ZGlmZiAtLWdpdCBhL1JFQURNRS50eHQgYi9SRUFETUUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFJFQURNRS50eHQKcmVuYW1lIHRvIFJFQURNRQpkaWZmIC0tZ2l0IGEvYnVpbGQvYWxsLmd5cCBiL2J1aWxkL2FsbC5neXAKaW5kZXggZTkyMjlkZC4uYzk3ODcxZCAxMDA2NDQKLS0tIGEvYnVpbGQvYWxsLmd5cAorKysgYi9idWlsZC9hbGwuZ3lwCkBAIC0xLDE1ICsxLDE1IEBACi0jIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0NCi17DQotICAndGFyZ2V0cyc6IFsNCi0gICAgew0KLSAgICAgICd0YXJnZXRfbmFtZSc6ICdBbGwnLA0KLSAgICAgICd0eXBlJzogJ25vbmUnLA0KLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbDQotICAgICAgICAnLi4vc2FtcGxlcy9zYW1wbGVzLmd5cDoqJywNCi0gICAgICBdLA0KLSAgICB9DQotICBdDQorIyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCit7CisgICd0YXJnZXRzJzogWworICAgIHsKKyAgICAgICd0YXJnZXRfbmFtZSc6ICdBbGwnLAorICAgICAgJ3R5cGUnOiAnbm9uZScsCisgICAgICAnZGVwZW5kZW5jaWVzJzogWworICAgICAgICAnLi4vc2FtcGxlcy9zYW1wbGVzLmd5cDoqJywKKyAgICAgIF0sCisgICAgfQorICBdCiB9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYnVpbGQvZ3lwX3BkZml1bS5weSBiL2J1aWxkL2d5cF9wZGZpdW0ucHkKaW5kZXggOTc3NmMzMC4uNjgzMTcwMiAxMDA2NDQKLS0tIGEvYnVpbGQvZ3lwX3BkZml1bS5weQorKysgYi9idWlsZC9neXBfcGRmaXVtLnB5CkBAIC0xLDggKzEsOCBAQAotIyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotDQotaW1wb3J0IG9zDQotDQotcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSkNCi1leGVjZmlsZShvcy5wYXRoLmpvaW4ocGF0aCwgJ2d5cF9wZGZpdW0nKSkNCisjIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisjIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKK2ltcG9ydCBvcworCitwYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguc3BsaXQoX19maWxlX18pWzBdKQorZXhlY2ZpbGUob3MucGF0aC5qb2luKHBhdGgsICdneXBfcGRmaXVtJykpCmRpZmYgLS1naXQgYS9idWlsZC9zdGFuZGFsb25lLmd5cGkgYi9idWlsZC9zdGFuZGFsb25lLmd5cGkKaW5kZXggOTcwYzA1OS4uZDkxOWMxNiAxMDA2NDQKLS0tIGEvYnVpbGQvc3RhbmRhbG9uZS5neXBpCisrKyBiL2J1aWxkL3N0YW5kYWxvbmUuZ3lwaQpAQCAtMSwyNTkgKzEsMjU5IEBACi0jIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0NCi0jIERlZmluaXRpb25zIHRvIGJlIHVzZWQgd2hlbiBidWlsZGluZyBzdGFuZC1hbG9uZSBQREZpdW0gYmluYXJpZXMuDQotDQotew0KLSAgJ3ZhcmlhYmxlcyc6IHsNCi0gICAgJ2NvbXBvbmVudCUnOiAnc3RhdGljX2xpYnJhcnknLA0KLSAgICAnY2xhbmclJzogMCwNCi0gICAgJ21zdnNfbXVsdGlfY29yZV9jb21waWxlJSc6ICcxJywNCi0gICAgJ3ZhcmlhYmxlcyc6IHsNCi0gICAgICAndmFyaWFibGVzJzogew0KLSAgICAgICAgJ3ZhcmlhYmxlcyc6IHsNCi0gICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbDQotICAgICAgICAgICAgWydPUz09ImxpbnV4IiBvciBPUz09Im1hYyInLCB7DQotICAgICAgICAgICAgICAjIFRoaXMgaGFuZGxlcyB0aGUgVW5peCBwbGF0Zm9ybXMgd2UgZ2VuZXJhbGx5IGRlYWwgd2l0aC4NCi0gICAgICAgICAgICAgICMgQW55dGhpbmcgZWxzZSBnZXRzIHBhc3NlZCB0aHJvdWdoLCB3aGljaCBwcm9iYWJseSB3b24ndCB3b3JrDQotICAgICAgICAgICAgICAjIHZlcnkgd2VsbDsgc3VjaCBob3N0cyBzaG91bGQgcGFzcyBhbiBleHBsaWNpdCB0YXJnZXRfYXJjaA0KLSAgICAgICAgICAgICAgIyB0byBneXAuDQotICAgICAgICAgICAgICAnaG9zdF9hcmNoJSc6DQotICAgICAgICAgICAgICAgICc8ISh1bmFtZSAtbSB8IHNlZCAtZSAicy9pLjg2L2lhMzIvO1wNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzL3g4Nl82NC94NjQvO1wNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzL2FtZDY0L3g2NC87XA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMvYXJtLiovYXJtLztcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy9hYXJjaDY0L2FybTY0LztcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy9taXBzLiovbWlwc2VsLyIpJywNCi0gICAgICAgICAgICB9LCB7DQotICAgICAgICAgICAgICAjIE9TIT0ibGludXgiIGFuZCBPUyE9Im1hYyINCi0gICAgICAgICAgICAgICdob3N0X2FyY2glJzogJ2lhMzInLA0KLSAgICAgICAgICAgIH1dLA0KLSAgICAgICAgICBdLA0KLSAgICAgICAgfSwNCi0gICAgICAgICdob3N0X2FyY2glJzogJzwoaG9zdF9hcmNoKScsDQotICAgICAgICAndGFyZ2V0X2FyY2glJzogJzwoaG9zdF9hcmNoKScsDQotICAgICAgfSwNCi0gICAgICAnaG9zdF9hcmNoJSc6ICc8KGhvc3RfYXJjaCknLA0KLSAgICAgICd0YXJnZXRfYXJjaCUnOiAnPCh0YXJnZXRfYXJjaCknLA0KLSAgICB9LA0KLSAgICAnaG9zdF9hcmNoJSc6ICc8KGhvc3RfYXJjaCknLA0KLSAgICAndGFyZ2V0X2FyY2glJzogJzwodGFyZ2V0X2FyY2gpJywNCi0gICAgJ3dlcnJvciUnOiAnLVdlcnJvcicsDQotICAgICd2OF9vcHRpbWl6ZWRfZGVidWclJzogMCwNCi0gICAgJ2ljdV9neXBfcGF0aCc6ICcuLi92OC90aGlyZF9wYXJ0eS9pY3UvaWN1Lmd5cCcsDQotICAgICdjb25kaXRpb25zJzogWw0KLSAgICAgIFsnT1MgPT0gIndpbiInLCB7DQotICAgICAgICAnb3NfcG9zaXglJzogMCwNCi0gICAgICB9LCB7DQotICAgICAgICAnb3NfcG9zaXglJzogMSwNCi0gICAgICB9XSwNCi0gICAgXSwNCi0gIH0sDQotICAndGFyZ2V0X2RlZmF1bHRzJzogew0KLSAgICAnZGVmYXVsdF9jb25maWd1cmF0aW9uJzogJ0RlYnVnJywNCi0gICAgJ2NvbmZpZ3VyYXRpb25zJzogew0KLSAgICAgICdEZWJ1Zyc6IHsNCi0gICAgICAgICdjZmxhZ3MnOiBbDQotICAgICAgICAgICctZycsDQotICAgICAgICAgICctTzAnLCAgICAgICAgICANCi0gICAgICAgICAgJy1mZGF0YS1zZWN0aW9ucycsDQotICAgICAgICAgICctZmZ1bmN0aW9uLXNlY3Rpb25zJywNCi0gICAgICAgIF0sDQotICAgICAgICAnbXN2c19zZXR0aW5ncyc6IHsNCi0gICAgICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnOiB7DQotICAgICAgICAgICAgJ09wdGltaXphdGlvbic6ICcwJywNCi0gICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsNCi0gICAgICAgICAgICAgIFsnY29tcG9uZW50PT0ic2hhcmVkX2xpYnJhcnkiJywgew0KLSAgICAgICAgICAgICAgICAnUnVudGltZUxpYnJhcnknOiAnMycsICAjIC9NRGQNCi0gICAgICAgICAgICAgIH0sIHsNCi0gICAgICAgICAgICAgICAgJ1J1bnRpbWVMaWJyYXJ5JzogJzEnLCAgIyAvTVRkDQotICAgICAgICAgICAgICB9XSwNCi0gICAgICAgICAgICBdLA0KLSAgICAgICAgICB9LA0KLSAgICAgICAgICAnVkNMaW5rZXJUb29sJzogew0KLSAgICAgICAgICAgICdMaW5rSW5jcmVtZW50YWwnOiAnMicsDQotICAgICAgICAgIH0sDQotICAgICAgICB9LA0KLSAgICAgICAgJ3hjb2RlX3NldHRpbmdzJzogew0KLSAgICAgICAgICAnR0NDX09QVElNSVpBVElPTl9MRVZFTCc6ICcwJywgICMgLU8wDQotICAgICAgICB9LA0KLSAgICAgIH0sDQotICAgICAgJ1JlbGVhc2UnOiB7DQotICAgICAgICAnY2ZsYWdzJzogWw0KLSAgICAgICAgICAnLWZuby1zdHJpY3QtYWxpYXNpbmcnLA0KLSAgICAgICAgXSwNCi0gICAgICAgICd4Y29kZV9zZXR0aW5ncyc6IHsNCi0gICAgICAgICAgJ0dDQ19PUFRJTUlaQVRJT05fTEVWRUwnOiAnMycsICAjIC1PMw0KLSAgICAgICAgICAnR0NDX1NUUklDVF9BTElBU0lORyc6ICdOTycsDQotICAgICAgICB9LA0KLSAgICAgICAgJ21zdnNfc2V0dGluZ3MnOiB7DQotICAgICAgICAgICdWQ0NMQ29tcGlsZXJUb29sJzogew0KLSAgICAgICAgICAgICdPcHRpbWl6YXRpb24nOiAnMicsDQotICAgICAgICAgICAgJ0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uJzogJzInLA0KLSAgICAgICAgICAgICdFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnMnOiAndHJ1ZScsDQotICAgICAgICAgICAgJ0Zhdm9yU2l6ZU9yU3BlZWQnOiAnMCcsDQotICAgICAgICAgICAgJ1N0cmluZ1Bvb2xpbmcnOiAndHJ1ZScsDQotICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbDQotICAgICAgICAgICAgICBbJ2NvbXBvbmVudD09InNoYXJlZF9saWJyYXJ5IicsIHsNCi0gICAgICAgICAgICAgICAgJ1J1bnRpbWVMaWJyYXJ5JzogJzInLCAgIy9NRA0KLSAgICAgICAgICAgICAgfSwgew0KLSAgICAgICAgICAgICAgICAnUnVudGltZUxpYnJhcnknOiAnMCcsICAjL01UDQotICAgICAgICAgICAgICB9XSwNCi0gICAgICAgICAgICBdLA0KLSAgICAgICAgICB9LA0KLSAgICAgICAgICAnVkNMaW5rZXJUb29sJzogew0KLSAgICAgICAgICAgICdMaW5rSW5jcmVtZW50YWwnOiAnMScsDQotICAgICAgICAgICAgJ09wdGltaXplUmVmZXJlbmNlcyc6ICcyJywNCi0gICAgICAgICAgICAnRW5hYmxlQ09NREFURm9sZGluZyc6ICcyJywNCi0gICAgICAgICAgfSwNCi0gICAgICAgIH0sDQotICAgICAgICAnY29uZGl0aW9ucyc6IFsNCi0gICAgICAgICAgWydPUz09ImxpbnV4IicsIHsNCi0gICAgICAgICAgICAnY2ZsYWdzJzogWw0KLSAgICAgICAgICAgICAgJy1mZGF0YS1zZWN0aW9ucycsDQotICAgICAgICAgICAgICAnLWZmdW5jdGlvbi1zZWN0aW9ucycsDQotICAgICAgICAgICAgICAnLU8zJywNCi0gICAgICAgICAgICAgICctTzInLA0KLSAgICAgICAgICAgIF0sDQotICAgICAgICAgIH1dLA0KLSAgICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7DQotICAgICAgICAgICAgJ2NmbGFncyEnOiBbDQotICAgICAgICAgICAgICAnLU8zJywNCi0gICAgICAgICAgICAgICctT3MnLA0KLSAgICAgICAgICAgIF0sDQotICAgICAgICAgICAgJ2NmbGFncyc6IFsNCi0gICAgICAgICAgICAgICctZmRhdGEtc2VjdGlvbnMnLA0KLSAgICAgICAgICAgICAgJy1mZnVuY3Rpb24tc2VjdGlvbnMnLA0KLSAgICAgICAgICAgICAgJy1PMicsDQotICAgICAgICAgICAgXSwNCi0gICAgICAgICAgfV0sDQotICAgICAgICBdLCAgIyBjb25kaXRpb25zDQotICAgICAgfSwNCi0gICAgfSwNCi0gICAgJ2RlZmluZXMhJzogWw0KLSAgICAgICdERUJVRycsDQotICAgIF0sDQotICAgICdjZmxhZ3MhJzogWw0KLSAgICAgICctV2FsbCcsDQotICAgICAgJy1XJywNCi0gICAgICAnLVduby11bnVzZWQtcGFyYW1ldGVyJywNCi0gICAgICAnLXB0aHJlYWQnLCAnLWZuby1leGNlcHRpb25zJywNCi0gICAgICAnLWZ2aXNpYmlsaXR5PWhpZGRlbicsDQotICAgIF0sDQotICAgICdjZmxhZ3NfY2MnOiBbDQotICAgICAgJy1Xbm9uLXZpcnR1YWwtZHRvcicsDQotICAgICAgJy1mbm8tcnR0aScsDQotICAgIF0sDQotICAgICdsZGZsYWdzJzogWw0KLSAgICAgICctcHRocmVhZCcsDQotICAgIF0sDQotICAgICdtc3ZzX2N5Z3dpbl9kaXJzJzogWyc8KERFUFRIKS92OC90aGlyZF9wYXJ0eS9jeWd3aW4nXSwNCi0gICAgJ21zdnNfY29uZmlndXJhdGlvbl9hdHRyaWJ1dGVzJzogew0KLSAgICAgICdPdXRwdXREaXJlY3RvcnknOiAnPChERVBUSClcXG91dFxcJChDb25maWd1cmF0aW9uTmFtZSknLA0KLSAgICAgICdJbnRlcm1lZGlhdGVEaXJlY3RvcnknOiAnJChPdXREaXIpXFxvYmpcXCQoUHJvamVjdE5hbWUpJywNCi0gICAgICAnQ2hhcmFjdGVyU2V0JzogJzEnLA0KLSAgICB9LA0KLSAgICAnbXN2c19zZXR0aW5ncyc6IHsNCi0gICAgICAnVkNDTENvbXBpbGVyVG9vbCc6IHsNCi0gICAgICAgICdNaW5pbWFsUmVidWlsZCc6ICdmYWxzZScsDQotICAgICAgICAnQnVmZmVyU2VjdXJpdHlDaGVjayc6ICd0cnVlJywNCi0gICAgICAgICdFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZyc6ICd0cnVlJywNCi0gICAgICAgICdSdW50aW1lVHlwZUluZm8nOiAnZmFsc2UnLA0KLSAgICAgICAgJ1dhcm5pbmdMZXZlbCc6ICczJywNCi0gICAgICAgICdXYXJuQXNFcnJvcic6ICdmYWxzZScsDQotICAgICAgICAnRGVidWdJbmZvcm1hdGlvbkZvcm1hdCc6ICczJywNCi0gICAgICAgICdEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXMnOiAnZmFsc2UnLA0KLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbDQotICAgICAgICAgIFsgJ21zdnNfbXVsdGlfY29yZV9jb21waWxlJywgew0KLSAgICAgICAgICAgICdBZGRpdGlvbmFsT3B0aW9ucyc6IFsnL01QJ10sDQotICAgICAgICAgIH1dLA0KLSAgICAgICAgICBbJ2NvbXBvbmVudD09InNoYXJlZF9saWJyYXJ5IicsIHsNCi0gICAgICAgICAgICAnRXhjZXB0aW9uSGFuZGxpbmcnOiAnMScsICAjIC9FSHNjDQotICAgICAgICAgIH0sIHsNCi0gICAgICAgICAgICAnRXhjZXB0aW9uSGFuZGxpbmcnOiAnMCcsDQotICAgICAgICAgIH1dLA0KLSAgICAgICAgXSwNCi0gICAgICB9LA0KLSAgICAgICdWQ0xpYnJhcmlhblRvb2wnOiB7DQotICAgICAgICAnQWRkaXRpb25hbE9wdGlvbnMnOiBbJy9pZ25vcmU6NDIyMSddLA0KLSAgICAgIH0sDQotICAgICAgJ1ZDTGlua2VyVG9vbCc6IHsNCi0gICAgICAgICdHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24nOiAndHJ1ZScsDQotICAgICAgICAnTGlua0luY3JlbWVudGFsJzogJzEnLA0KLSAgICAgICAgIyBTdWJTeXN0ZW0gdmFsdWVzOg0KLSAgICAgICAgIyAgIDAgPT0gbm90IHNldA0KLSAgICAgICAgIyAgIDEgPT0gL1NVQlNZU1RFTTpDT05TT0xFDQotICAgICAgICAjICAgMiA9PSAvU1VCU1lTVEVNOldJTkRPV1MNCi0gICAgICAgICdTdWJTeXN0ZW0nOiAnMScsDQotICAgICAgICAnQWRkaXRpb25hbERlcGVuZGVuY2llcyc6IFsNCi0gICAgICAgICAgJ2FkdmFwaTMyLmxpYicsDQotICAgICAgICAgICdnZGkzMi5saWInLA0KLSAgICAgICAgICAndXNlcjMyLmxpYicsDQotICAgICAgICBdLA0KLSAgICAgIH0sDQotICAgIH0sDQotICAgICd4Y29kZV9zZXR0aW5ncyc6IHsNCi0gICAgICAnQUxXQVlTX1NFQVJDSF9VU0VSX1BBVEhTJzogJ05PJywNCi0gICAgICAnR0NDX0NXX0FTTV9TWU5UQVgnOiAnTk8nLCAgICAgICAgICAgICAgICAjIE5vIC1mYXNtLWJsb2Nrcw0KLSAgICAgICdHQ0NfRFlOQU1JQ19OT19QSUMnOiAnTk8nLCAgICAgICAgICAgICAgICMgTm8gLW1keW5hbWljLW5vLXBpYw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKEVxdWl2YWxlbnQgdG8gLWZQSUMpDQotICAgICAgJ0dDQ19FTkFCTEVfQ1BQX0VYQ0VQVElPTlMnOiAnTk8nLCAgICAgICAgIyAtZm5vLWV4Y2VwdGlvbnMNCi0gICAgICAnR0NDX0VOQUJMRV9DUFBfUlRUSSc6ICdOTycsICAgICAgICAgICAgICAjIC1mbm8tcnR0aQ0KLSAgICAgICdHQ0NfRU5BQkxFX1BBU0NBTF9TVFJJTkdTJzogJ05PJywgICAgICAgICMgTm8gLW1wYXNjYWwtc3RyaW5ncw0KLSAgICAgICMgR0NDX0lOTElORVNfQVJFX1BSSVZBVEVfRVhURVJOIG1hcHMgdG8gLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuDQotICAgICAgJ0dDQ19JTkxJTkVTX0FSRV9QUklWQVRFX0VYVEVSTic6ICdZRVMnLA0KLSAgICAgICdHQ0NfU1lNQk9MU19QUklWQVRFX0VYVEVSTic6ICdZRVMnLCAgICAgICMgLWZ2aXNpYmlsaXR5PWhpZGRlbg0KLSAgICAgICdHQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTJzogJ05PJywgICAgICMgLVdlcnJvcg0KLSAgICAgICdHQ0NfV0FSTl9OT05fVklSVFVBTF9ERVNUUlVDVE9SJzogJ1lFUycsICMgLVdub24tdmlydHVhbC1kdG9yDQotICAgICAgJ1NZTVJPT1QnOiAnPChERVBUSCkveGNvZGVidWlsZCcsDQotICAgICAgJ1VTRV9IRUFERVJNQVAnOiAnTk8nLA0KLSAgICAgICdPVEhFUl9DRkxBR1MnOiBbDQotICAgICAgICAnLWZuby1zdHJpY3QtYWxpYXNpbmcnLA0KLSAgICAgIF0sDQotICAgICAgJ1dBUk5JTkdfQ0ZMQUdTJzogWw0KLSAgICAgICAgJy1XYWxsJywNCi0gICAgICAgICctV2VuZGlmLWxhYmVscycsDQotICAgICAgICAnLVcnLA0KLSAgICAgICAgJy1Xbm8tdW51c2VkLXBhcmFtZXRlcicsDQotICAgICAgXSwNCi0gICAgfSwNCi0gIH0sDQotICAnY29uZGl0aW9ucyc6IFsNCi0gICAgWydjb21wb25lbnQ9PSJzaGFyZWRfbGlicmFyeSInLCB7DQotICAgICAgJ2NmbGFncyc6IFsNCi0gICAgICAgICctZlBJQycsDQotICAgICAgXSwNCi0gICAgfV0sDQotICAgIFsnT1M9PSJ3aW4iJywgew0KLSAgICAgICd0YXJnZXRfZGVmYXVsdHMnOiB7DQotICAgICAgICAnZGVmaW5lcyc6IFsNCi0gICAgICAgICAgJ19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURScsDQotICAgICAgICAgICdfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFJywNCi0gICAgICAgIF0sDQotICAgICAgICAnY29uZGl0aW9ucyc6IFsNCi0gICAgICAgICAgWydjb21wb25lbnQ9PSJzdGF0aWNfbGlicmFyeSInLCB7DQotICAgICAgICAgICAgJ2RlZmluZXMnOiBbDQotICAgICAgICAgICAgICAnX0hBU19FWENFUFRJT05TPTAnLA0KLSAgICAgICAgICAgIF0sDQotICAgICAgICAgIH1dLA0KLSAgICAgICAgXSwNCi0gICAgICB9LA0KLSAgICB9XSwgICMgT1M9PSJ3aW4iDQotICAgIFsnT1M9PSJtYWMiJywgew0KLSAgICAgICd0YXJnZXRfZGVmYXVsdHMnOiB7DQotICAgICAgICAnbGlua19zZXR0aW5ncyc6IHsNCi0gICAgICAgICAgJ2xpYnJhcmllcyc6IFsNCi0gICAgICAgICAgICAnJChTREtST09UKS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0FwcEtpdC5mcmFtZXdvcmsnLA0KLSAgICAgICAgICAgICckKFNES1JPT1QpL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ29yZUZvdW5kYXRpb24uZnJhbWV3b3JrJywNCi0gICAgICAgICAgXSwNCi0gICAgICAgIH0sDQotICAgICAgICAndGFyZ2V0X2NvbmRpdGlvbnMnOiBbDQotICAgICAgICAgIFsnX3R5cGUhPSJzdGF0aWNfbGlicmFyeSInLCB7DQotICAgICAgICAgICAgJ3hjb2RlX3NldHRpbmdzJzogeydPVEhFUl9MREZMQUdTJzogWyctV2wsLXNlYXJjaF9wYXRoc19maXJzdCddfSwNCi0gICAgICAgICAgfV0sDQotICAgICAgICBdLCAgIyB0YXJnZXRfY29uZGl0aW9ucw0KLSAgICAgIH0sICAjIHRhcmdldF9kZWZhdWx0cw0KLSAgICB9XSwgICMgT1M9PSJtYWMiDQotICBdLA0KKyMgQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworIyBEZWZpbml0aW9ucyB0byBiZSB1c2VkIHdoZW4gYnVpbGRpbmcgc3RhbmQtYWxvbmUgUERGaXVtIGJpbmFyaWVzLgorCit7CisgICd2YXJpYWJsZXMnOiB7CisgICAgJ2NvbXBvbmVudCUnOiAnc3RhdGljX2xpYnJhcnknLAorICAgICdjbGFuZyUnOiAwLAorICAgICdtc3ZzX211bHRpX2NvcmVfY29tcGlsZSUnOiAnMScsCisgICAgJ3ZhcmlhYmxlcyc6IHsKKyAgICAgICd2YXJpYWJsZXMnOiB7CisgICAgICAgICd2YXJpYWJsZXMnOiB7CisgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCisgICAgICAgICAgICBbJ09TPT0ibGludXgiIG9yIE9TPT0ibWFjIicsIHsKKyAgICAgICAgICAgICAgIyBUaGlzIGhhbmRsZXMgdGhlIFVuaXggcGxhdGZvcm1zIHdlIGdlbmVyYWxseSBkZWFsIHdpdGguCisgICAgICAgICAgICAgICMgQW55dGhpbmcgZWxzZSBnZXRzIHBhc3NlZCB0aHJvdWdoLCB3aGljaCBwcm9iYWJseSB3b24ndCB3b3JrCisgICAgICAgICAgICAgICMgdmVyeSB3ZWxsOyBzdWNoIGhvc3RzIHNob3VsZCBwYXNzIGFuIGV4cGxpY2l0IHRhcmdldF9hcmNoCisgICAgICAgICAgICAgICMgdG8gZ3lwLgorICAgICAgICAgICAgICAnaG9zdF9hcmNoJSc6CisgICAgICAgICAgICAgICAgJzwhKHVuYW1lIC1tIHwgc2VkIC1lICJzL2kuODYvaWEzMi87XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy94ODZfNjQveDY0LztcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzL2FtZDY0L3g2NC87XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy9hcm0uKi9hcm0vO1wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMvYWFyY2g2NC9hcm02NC87XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy9taXBzLiovbWlwc2VsLyIpJywKKyAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgIyBPUyE9ImxpbnV4IiBhbmQgT1MhPSJtYWMiCisgICAgICAgICAgICAgICdob3N0X2FyY2glJzogJ2lhMzInLAorICAgICAgICAgICAgfV0sCisgICAgICAgICAgXSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hvc3RfYXJjaCUnOiAnPChob3N0X2FyY2gpJywKKyAgICAgICAgJ3RhcmdldF9hcmNoJSc6ICc8KGhvc3RfYXJjaCknLAorICAgICAgfSwKKyAgICAgICdob3N0X2FyY2glJzogJzwoaG9zdF9hcmNoKScsCisgICAgICAndGFyZ2V0X2FyY2glJzogJzwodGFyZ2V0X2FyY2gpJywKKyAgICB9LAorICAgICdob3N0X2FyY2glJzogJzwoaG9zdF9hcmNoKScsCisgICAgJ3RhcmdldF9hcmNoJSc6ICc8KHRhcmdldF9hcmNoKScsCisgICAgJ3dlcnJvciUnOiAnLVdlcnJvcicsCisgICAgJ3Y4X29wdGltaXplZF9kZWJ1ZyUnOiAwLAorICAgICdpY3VfZ3lwX3BhdGgnOiAnLi4vdjgvdGhpcmRfcGFydHkvaWN1L2ljdS5neXAnLAorICAgICdjb25kaXRpb25zJzogWworICAgICAgWydPUyA9PSAid2luIicsIHsKKyAgICAgICAgJ29zX3Bvc2l4JSc6IDAsCisgICAgICB9LCB7CisgICAgICAgICdvc19wb3NpeCUnOiAxLAorICAgICAgfV0sCisgICAgXSwKKyAgfSwKKyAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKKyAgICAnZGVmYXVsdF9jb25maWd1cmF0aW9uJzogJ0RlYnVnJywKKyAgICAnY29uZmlndXJhdGlvbnMnOiB7CisgICAgICAnRGVidWcnOiB7CisgICAgICAgICdjZmxhZ3MnOiBbCisgICAgICAgICAgJy1nJywKKyAgICAgICAgICAnLU8wJywgICAgICAgICAgCisgICAgICAgICAgJy1mZGF0YS1zZWN0aW9ucycsCisgICAgICAgICAgJy1mZnVuY3Rpb24tc2VjdGlvbnMnLAorICAgICAgICBdLAorICAgICAgICAnbXN2c19zZXR0aW5ncyc6IHsKKyAgICAgICAgICAnVkNDTENvbXBpbGVyVG9vbCc6IHsKKyAgICAgICAgICAgICdPcHRpbWl6YXRpb24nOiAnMCcsCisgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKKyAgICAgICAgICAgICAgWydjb21wb25lbnQ9PSJzaGFyZWRfbGlicmFyeSInLCB7CisgICAgICAgICAgICAgICAgJ1J1bnRpbWVMaWJyYXJ5JzogJzMnLCAgIyAvTURkCisgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAnUnVudGltZUxpYnJhcnknOiAnMScsICAjIC9NVGQKKyAgICAgICAgICAgICAgfV0sCisgICAgICAgICAgICBdLAorICAgICAgICAgIH0sCisgICAgICAgICAgJ1ZDTGlua2VyVG9vbCc6IHsKKyAgICAgICAgICAgICdMaW5rSW5jcmVtZW50YWwnOiAnMicsCisgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3hjb2RlX3NldHRpbmdzJzogeworICAgICAgICAgICdHQ0NfT1BUSU1JWkFUSU9OX0xFVkVMJzogJzAnLCAgIyAtTzAKKyAgICAgICAgfSwKKyAgICAgIH0sCisgICAgICAnUmVsZWFzZSc6IHsKKyAgICAgICAgJ2NmbGFncyc6IFsKKyAgICAgICAgICAnLWZuby1zdHJpY3QtYWxpYXNpbmcnLAorICAgICAgICBdLAorICAgICAgICAneGNvZGVfc2V0dGluZ3MnOiB7CisgICAgICAgICAgJ0dDQ19PUFRJTUlaQVRJT05fTEVWRUwnOiAnMycsICAjIC1PMworICAgICAgICAgICdHQ0NfU1RSSUNUX0FMSUFTSU5HJzogJ05PJywKKyAgICAgICAgfSwKKyAgICAgICAgJ21zdnNfc2V0dGluZ3MnOiB7CisgICAgICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnOiB7CisgICAgICAgICAgICAnT3B0aW1pemF0aW9uJzogJzInLAorICAgICAgICAgICAgJ0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uJzogJzInLAorICAgICAgICAgICAgJ0VuYWJsZUludHJpbnNpY0Z1bmN0aW9ucyc6ICd0cnVlJywKKyAgICAgICAgICAgICdGYXZvclNpemVPclNwZWVkJzogJzAnLAorICAgICAgICAgICAgJ1N0cmluZ1Bvb2xpbmcnOiAndHJ1ZScsCisgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKKyAgICAgICAgICAgICAgWydjb21wb25lbnQ9PSJzaGFyZWRfbGlicmFyeSInLCB7CisgICAgICAgICAgICAgICAgJ1J1bnRpbWVMaWJyYXJ5JzogJzInLCAgIy9NRAorICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgJ1J1bnRpbWVMaWJyYXJ5JzogJzAnLCAgIy9NVAorICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgfSwKKyAgICAgICAgICAnVkNMaW5rZXJUb29sJzogeworICAgICAgICAgICAgJ0xpbmtJbmNyZW1lbnRhbCc6ICcxJywKKyAgICAgICAgICAgICdPcHRpbWl6ZVJlZmVyZW5jZXMnOiAnMicsCisgICAgICAgICAgICAnRW5hYmxlQ09NREFURm9sZGluZyc6ICcyJywKKyAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnY29uZGl0aW9ucyc6IFsKKyAgICAgICAgICBbJ09TPT0ibGludXgiJywgeworICAgICAgICAgICAgJ2NmbGFncyc6IFsKKyAgICAgICAgICAgICAgJy1mZGF0YS1zZWN0aW9ucycsCisgICAgICAgICAgICAgICctZmZ1bmN0aW9uLXNlY3Rpb25zJywKKyAgICAgICAgICAgICAgJy1PMycsCisgICAgICAgICAgICAgICctTzInLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICB9XSwKKyAgICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7CisgICAgICAgICAgICAnY2ZsYWdzISc6IFsKKyAgICAgICAgICAgICAgJy1PMycsCisgICAgICAgICAgICAgICctT3MnLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICdjZmxhZ3MnOiBbCisgICAgICAgICAgICAgICctZmRhdGEtc2VjdGlvbnMnLAorICAgICAgICAgICAgICAnLWZmdW5jdGlvbi1zZWN0aW9ucycsCisgICAgICAgICAgICAgICctTzInLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICB9XSwKKyAgICAgICAgXSwgICMgY29uZGl0aW9ucworICAgICAgfSwKKyAgICB9LAorICAgICdkZWZpbmVzISc6IFsKKyAgICAgICdERUJVRycsCisgICAgXSwKKyAgICAnY2ZsYWdzISc6IFsKKyAgICAgICctV2FsbCcsCisgICAgICAnLVcnLAorICAgICAgJy1Xbm8tdW51c2VkLXBhcmFtZXRlcicsCisgICAgICAnLXB0aHJlYWQnLCAnLWZuby1leGNlcHRpb25zJywKKyAgICAgICctZnZpc2liaWxpdHk9aGlkZGVuJywKKyAgICBdLAorICAgICdjZmxhZ3NfY2MnOiBbCisgICAgICAnLVdub24tdmlydHVhbC1kdG9yJywKKyAgICAgICctZm5vLXJ0dGknLAorICAgIF0sCisgICAgJ2xkZmxhZ3MnOiBbCisgICAgICAnLXB0aHJlYWQnLAorICAgIF0sCisgICAgJ21zdnNfY3lnd2luX2RpcnMnOiBbJzwoREVQVEgpL3Y4L3RoaXJkX3BhcnR5L2N5Z3dpbiddLAorICAgICdtc3ZzX2NvbmZpZ3VyYXRpb25fYXR0cmlidXRlcyc6IHsKKyAgICAgICdPdXRwdXREaXJlY3RvcnknOiAnPChERVBUSClcXG91dFxcJChDb25maWd1cmF0aW9uTmFtZSknLAorICAgICAgJ0ludGVybWVkaWF0ZURpcmVjdG9yeSc6ICckKE91dERpcilcXG9ialxcJChQcm9qZWN0TmFtZSknLAorICAgICAgJ0NoYXJhY3RlclNldCc6ICcxJywKKyAgICB9LAorICAgICdtc3ZzX3NldHRpbmdzJzogeworICAgICAgJ1ZDQ0xDb21waWxlclRvb2wnOiB7CisgICAgICAgICdNaW5pbWFsUmVidWlsZCc6ICdmYWxzZScsCisgICAgICAgICdCdWZmZXJTZWN1cml0eUNoZWNrJzogJ3RydWUnLAorICAgICAgICAnRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmcnOiAndHJ1ZScsCisgICAgICAgICdSdW50aW1lVHlwZUluZm8nOiAnZmFsc2UnLAorICAgICAgICAnV2FybmluZ0xldmVsJzogJzMnLAorICAgICAgICAnV2FybkFzRXJyb3InOiAnZmFsc2UnLAorICAgICAgICAnRGVidWdJbmZvcm1hdGlvbkZvcm1hdCc6ICczJywKKyAgICAgICAgJ0RldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcyc6ICdmYWxzZScsCisgICAgICAgICdjb25kaXRpb25zJzogWworICAgICAgICAgIFsgJ21zdnNfbXVsdGlfY29yZV9jb21waWxlJywgeworICAgICAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogWycvTVAnXSwKKyAgICAgICAgICB9XSwKKyAgICAgICAgICBbJ2NvbXBvbmVudD09InNoYXJlZF9saWJyYXJ5IicsIHsKKyAgICAgICAgICAgICdFeGNlcHRpb25IYW5kbGluZyc6ICcxJywgICMgL0VIc2MKKyAgICAgICAgICB9LCB7CisgICAgICAgICAgICAnRXhjZXB0aW9uSGFuZGxpbmcnOiAnMCcsCisgICAgICAgICAgfV0sCisgICAgICAgIF0sCisgICAgICB9LAorICAgICAgJ1ZDTGlicmFyaWFuVG9vbCc6IHsKKyAgICAgICAgJ0FkZGl0aW9uYWxPcHRpb25zJzogWycvaWdub3JlOjQyMjEnXSwKKyAgICAgIH0sCisgICAgICAnVkNMaW5rZXJUb29sJzogeworICAgICAgICAnR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uJzogJ3RydWUnLAorICAgICAgICAnTGlua0luY3JlbWVudGFsJzogJzEnLAorICAgICAgICAjIFN1YlN5c3RlbSB2YWx1ZXM6CisgICAgICAgICMgICAwID09IG5vdCBzZXQKKyAgICAgICAgIyAgIDEgPT0gL1NVQlNZU1RFTTpDT05TT0xFCisgICAgICAgICMgICAyID09IC9TVUJTWVNURU06V0lORE9XUworICAgICAgICAnU3ViU3lzdGVtJzogJzEnLAorICAgICAgICAnQWRkaXRpb25hbERlcGVuZGVuY2llcyc6IFsKKyAgICAgICAgICAnYWR2YXBpMzIubGliJywKKyAgICAgICAgICAnZ2RpMzIubGliJywKKyAgICAgICAgICAndXNlcjMyLmxpYicsCisgICAgICAgIF0sCisgICAgICB9LAorICAgIH0sCisgICAgJ3hjb2RlX3NldHRpbmdzJzogeworICAgICAgJ0FMV0FZU19TRUFSQ0hfVVNFUl9QQVRIUyc6ICdOTycsCisgICAgICAnR0NDX0NXX0FTTV9TWU5UQVgnOiAnTk8nLCAgICAgICAgICAgICAgICAjIE5vIC1mYXNtLWJsb2NrcworICAgICAgJ0dDQ19EWU5BTUlDX05PX1BJQyc6ICdOTycsICAgICAgICAgICAgICAgIyBObyAtbWR5bmFtaWMtbm8tcGljCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChFcXVpdmFsZW50IHRvIC1mUElDKQorICAgICAgJ0dDQ19FTkFCTEVfQ1BQX0VYQ0VQVElPTlMnOiAnTk8nLCAgICAgICAgIyAtZm5vLWV4Y2VwdGlvbnMKKyAgICAgICdHQ0NfRU5BQkxFX0NQUF9SVFRJJzogJ05PJywgICAgICAgICAgICAgICMgLWZuby1ydHRpCisgICAgICAnR0NDX0VOQUJMRV9QQVNDQUxfU1RSSU5HUyc6ICdOTycsICAgICAgICAjIE5vIC1tcGFzY2FsLXN0cmluZ3MKKyAgICAgICMgR0NDX0lOTElORVNfQVJFX1BSSVZBVEVfRVhURVJOIG1hcHMgdG8gLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuCisgICAgICAnR0NDX0lOTElORVNfQVJFX1BSSVZBVEVfRVhURVJOJzogJ1lFUycsCisgICAgICAnR0NDX1NZTUJPTFNfUFJJVkFURV9FWFRFUk4nOiAnWUVTJywgICAgICAjIC1mdmlzaWJpbGl0eT1oaWRkZW4KKyAgICAgICdHQ0NfVFJFQVRfV0FSTklOR1NfQVNfRVJST1JTJzogJ05PJywgICAgICMgLVdlcnJvcgorICAgICAgJ0dDQ19XQVJOX05PTl9WSVJUVUFMX0RFU1RSVUNUT1InOiAnWUVTJywgIyAtV25vbi12aXJ0dWFsLWR0b3IKKyAgICAgICdTWU1ST09UJzogJzwoREVQVEgpL3hjb2RlYnVpbGQnLAorICAgICAgJ1VTRV9IRUFERVJNQVAnOiAnTk8nLAorICAgICAgJ09USEVSX0NGTEFHUyc6IFsKKyAgICAgICAgJy1mbm8tc3RyaWN0LWFsaWFzaW5nJywKKyAgICAgIF0sCisgICAgICAnV0FSTklOR19DRkxBR1MnOiBbCisgICAgICAgICctV2FsbCcsCisgICAgICAgICctV2VuZGlmLWxhYmVscycsCisgICAgICAgICctVycsCisgICAgICAgICctV25vLXVudXNlZC1wYXJhbWV0ZXInLAorICAgICAgXSwKKyAgICB9LAorICB9LAorICAnY29uZGl0aW9ucyc6IFsKKyAgICBbJ2NvbXBvbmVudD09InNoYXJlZF9saWJyYXJ5IicsIHsKKyAgICAgICdjZmxhZ3MnOiBbCisgICAgICAgICctZlBJQycsCisgICAgICBdLAorICAgIH1dLAorICAgIFsnT1M9PSJ3aW4iJywgeworICAgICAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKKyAgICAgICAgJ2RlZmluZXMnOiBbCisgICAgICAgICAgJ19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURScsCisgICAgICAgICAgJ19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUnLAorICAgICAgICBdLAorICAgICAgICAnY29uZGl0aW9ucyc6IFsKKyAgICAgICAgICBbJ2NvbXBvbmVudD09InN0YXRpY19saWJyYXJ5IicsIHsKKyAgICAgICAgICAgICdkZWZpbmVzJzogWworICAgICAgICAgICAgICAnX0hBU19FWENFUFRJT05TPTAnLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICB9XSwKKyAgICAgICAgXSwKKyAgICAgIH0sCisgICAgfV0sICAjIE9TPT0id2luIgorICAgIFsnT1M9PSJtYWMiJywgeworICAgICAgJ3RhcmdldF9kZWZhdWx0cyc6IHsKKyAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7CisgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKKyAgICAgICAgICAgICckKFNES1JPT1QpL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQXBwS2l0LmZyYW1ld29yaycsCisgICAgICAgICAgICAnJChTREtST09UKS9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVGb3VuZGF0aW9uLmZyYW1ld29yaycsCisgICAgICAgICAgXSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3RhcmdldF9jb25kaXRpb25zJzogWworICAgICAgICAgIFsnX3R5cGUhPSJzdGF0aWNfbGlicmFyeSInLCB7CisgICAgICAgICAgICAneGNvZGVfc2V0dGluZ3MnOiB7J09USEVSX0xERkxBR1MnOiBbJy1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0J119LAorICAgICAgICAgIH1dLAorICAgICAgICBdLCAgIyB0YXJnZXRfY29uZGl0aW9ucworICAgICAgfSwgICMgdGFyZ2V0X2RlZmF1bHRzCisgICAgfV0sICAjIE9TPT0ibWFjIgorICBdLAogfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvcmUvaW5jbHVkZS9mZHJtL2Z4X2NyeXB0LmggYi9jb3JlL2luY2x1ZGUvZmRybS9meF9jcnlwdC5oCmluZGV4IDVlMGI3ODYuLmVjN2Q1NWEgMTAwNjQ0Ci0tLSBhL2NvcmUvaW5jbHVkZS9mZHJtL2Z4X2NyeXB0LmgKKysrIGIvY29yZS9pbmNsdWRlL2Zkcm0vZnhfY3J5cHQuaApAQCAtMSw0MyArMSw0MyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlhfQ1JZUFRfSF8NCi0jZGVmaW5lIF9GWF9DUllQVF9IXw0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLWV4dGVybiAiQyIgew0KLSNlbmRpZg0KLXZvaWQgQ1JZUFRfQXJjRm91ckNyeXB0QmxvY2soRlhfTFBCWVRFIGRhdGEsIEZYX0RXT1JEIHNpemUsIEZYX0xQQ0JZVEUga2V5LCBGWF9EV09SRCBrZXlsZW4pOw0KLXZvaWQgQ1JZUFRfQXJjRm91clNldHVwKEZYX0xQVk9JRCBjb250ZXh0LCBGWF9MUENCWVRFIGtleSwgRlhfRFdPUkQgbGVuZ3RoKTsNCi12b2lkIENSWVBUX0FyY0ZvdXJDcnlwdChGWF9MUFZPSUQgY29udGV4dCwgRlhfTFBCWVRFIGRhdGEsIEZYX0RXT1JEIHNpemUpOw0KLXZvaWQgQ1JZUFRfQUVTU2V0S2V5KEZYX0xQVk9JRCBjb250ZXh0LCBGWF9EV09SRCBibG9ja2xlbiwgRlhfTFBDQllURSBrZXksIEZYX0RXT1JEIGtleWxlbiwgRlhfQk9PTCBiRW5jcnlwdCk7DQotdm9pZCBDUllQVF9BRVNTZXRJVihGWF9MUFZPSUQgY29udGV4dCwgRlhfTFBDQllURSBpdik7DQotdm9pZCBDUllQVF9BRVNEZWNyeXB0KEZYX0xQVk9JRCBjb250ZXh0LCBGWF9MUEJZVEUgZGVzdCwgRlhfTFBDQllURSBzcmMsIEZYX0RXT1JEIHNpemUpOw0KLXZvaWQgQ1JZUFRfQUVTRW5jcnlwdChGWF9MUFZPSUQgY29udGV4dCwgRlhfTFBCWVRFIGRlc3QsIEZYX0xQQ0JZVEUgc3JjLCBGWF9EV09SRCBzaXplKTsNCi12b2lkIENSWVBUX01ENUdlbmVyYXRlKEZYX0xQQ0JZVEUgZGF0YSwgRlhfRFdPUkQgc2l6ZSwgRlhfQllURSBkaWdlc3RbMTZdKTsNCi12b2lkIENSWVBUX01ENVN0YXJ0KEZYX0xQVk9JRCBjb250ZXh0KTsNCi12b2lkIENSWVBUX01ENVVwZGF0ZShGWF9MUFZPSUQgY29udGV4dCwgRlhfTFBDQllURSBkYXRhLCBGWF9EV09SRCBzaXplKTsNCi12b2lkIENSWVBUX01ENUZpbmlzaChGWF9MUFZPSUQgY29udGV4dCwgRlhfQllURSBkaWdlc3RbMTZdKTsNCi12b2lkIENSWVBUX1NIQTFHZW5lcmF0ZShGWF9MUENCWVRFIGRhdGEsIEZYX0RXT1JEIHNpemUsIEZYX0JZVEUgZGlnZXN0WzIwXSk7DQotdm9pZCBDUllQVF9TSEExU3RhcnQoRlhfTFBWT0lEIGNvbnRleHQpOw0KLXZvaWQgQ1JZUFRfU0hBMVVwZGF0ZShGWF9MUFZPSUQgY29udGV4dCwgRlhfTFBDQllURSBkYXRhLCBGWF9EV09SRCBzaXplKTsNCi12b2lkIENSWVBUX1NIQTFGaW5pc2goRlhfTFBWT0lEIGNvbnRleHQsIEZYX0JZVEUgZGlnZXN0WzIwXSk7DQotdm9pZCBDUllQVF9TSEEyNTZHZW5lcmF0ZShGWF9MUENCWVRFIGRhdGEsIEZYX0RXT1JEIHNpemUsIEZYX0JZVEUgZGlnZXN0WzMyXSk7DQotdm9pZCBDUllQVF9TSEEyNTZTdGFydChGWF9MUFZPSUQgY29udGV4dCk7DQotdm9pZCBDUllQVF9TSEEyNTZVcGRhdGUoRlhfTFBWT0lEIGNvbnRleHQsIEZYX0xQQ0JZVEUgZGF0YSwgRlhfRFdPUkQgc2l6ZSk7DQotdm9pZCBDUllQVF9TSEEyNTZGaW5pc2goRlhfTFBWT0lEIGNvbnRleHQsIEZYX0JZVEUgZGlnZXN0WzMyXSk7DQotdm9pZCBDUllQVF9TSEEzODRTdGFydChGWF9MUFZPSUQgY29udGV4dCk7DQotdm9pZCBDUllQVF9TSEEzODRVcGRhdGUoRlhfTFBWT0lEIGNvbnRleHQsIEZYX0xQQ0JZVEUgZGF0YSwgRlhfRFdPUkQgc2l6ZSk7DQotdm9pZCBDUllQVF9TSEEzODRGaW5pc2goRlhfTFBWT0lEIGNvbnRleHQsIEZYX0JZVEUgZGlnZXN0WzQ4XSk7DQotdm9pZCBDUllQVF9TSEEzODRHZW5lcmF0ZShGWF9MUENCWVRFIGRhdGEsIEZYX0RXT1JEIHNpemUsIEZYX0JZVEUgZGlnZXN0WzQ4XSk7DQotdm9pZCBDUllQVF9TSEE1MTJTdGFydChGWF9MUFZPSUQgY29udGV4dCk7DQotdm9pZCBDUllQVF9TSEE1MTJVcGRhdGUoRlhfTFBWT0lEIGNvbnRleHQsIEZYX0xQQ0JZVEUgZGF0YSwgRlhfRFdPUkQgc2l6ZSk7DQotdm9pZCBDUllQVF9TSEE1MTJGaW5pc2goRlhfTFBWT0lEIGNvbnRleHQsIEZYX0JZVEUgZGlnZXN0WzY0XSk7DQotdm9pZCBDUllQVF9TSEE1MTJHZW5lcmF0ZShGWF9MUENCWVRFIGRhdGEsIEZYX0RXT1JEIHNpemUsIEZYX0JZVEUgZGlnZXN0WzY0XSk7DQotdm9pZCBDUllQVF9TZXRQdWJLZXlEZWNyeXB0b3IoRlhfQk9PTCAoKmZ1bmMpKEZYX0xQQ0JZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUsIEZYX0xQQllURSBkYXRhX2J1ZiwgRlhfRFdPUkQmIGRhdGFfbGVuKSk7DQotI2lmZGVmIF9fY3BsdXNwbHVzDQotfTsNCi0jZW5kaWYNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9GWF9DUllQVF9IXworI2RlZmluZSBfRlhfQ1JZUFRfSF8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK3ZvaWQgQ1JZUFRfQXJjRm91ckNyeXB0QmxvY2soRlhfTFBCWVRFIGRhdGEsIEZYX0RXT1JEIHNpemUsIEZYX0xQQ0JZVEUga2V5LCBGWF9EV09SRCBrZXlsZW4pOwordm9pZCBDUllQVF9BcmNGb3VyU2V0dXAoRlhfTFBWT0lEIGNvbnRleHQsIEZYX0xQQ0JZVEUga2V5LCBGWF9EV09SRCBsZW5ndGgpOwordm9pZCBDUllQVF9BcmNGb3VyQ3J5cHQoRlhfTFBWT0lEIGNvbnRleHQsIEZYX0xQQllURSBkYXRhLCBGWF9EV09SRCBzaXplKTsKK3ZvaWQgQ1JZUFRfQUVTU2V0S2V5KEZYX0xQVk9JRCBjb250ZXh0LCBGWF9EV09SRCBibG9ja2xlbiwgRlhfTFBDQllURSBrZXksIEZYX0RXT1JEIGtleWxlbiwgRlhfQk9PTCBiRW5jcnlwdCk7Cit2b2lkIENSWVBUX0FFU1NldElWKEZYX0xQVk9JRCBjb250ZXh0LCBGWF9MUENCWVRFIGl2KTsKK3ZvaWQgQ1JZUFRfQUVTRGVjcnlwdChGWF9MUFZPSUQgY29udGV4dCwgRlhfTFBCWVRFIGRlc3QsIEZYX0xQQ0JZVEUgc3JjLCBGWF9EV09SRCBzaXplKTsKK3ZvaWQgQ1JZUFRfQUVTRW5jcnlwdChGWF9MUFZPSUQgY29udGV4dCwgRlhfTFBCWVRFIGRlc3QsIEZYX0xQQ0JZVEUgc3JjLCBGWF9EV09SRCBzaXplKTsKK3ZvaWQgQ1JZUFRfTUQ1R2VuZXJhdGUoRlhfTFBDQllURSBkYXRhLCBGWF9EV09SRCBzaXplLCBGWF9CWVRFIGRpZ2VzdFsxNl0pOwordm9pZCBDUllQVF9NRDVTdGFydChGWF9MUFZPSUQgY29udGV4dCk7Cit2b2lkIENSWVBUX01ENVVwZGF0ZShGWF9MUFZPSUQgY29udGV4dCwgRlhfTFBDQllURSBkYXRhLCBGWF9EV09SRCBzaXplKTsKK3ZvaWQgQ1JZUFRfTUQ1RmluaXNoKEZYX0xQVk9JRCBjb250ZXh0LCBGWF9CWVRFIGRpZ2VzdFsxNl0pOwordm9pZCBDUllQVF9TSEExR2VuZXJhdGUoRlhfTFBDQllURSBkYXRhLCBGWF9EV09SRCBzaXplLCBGWF9CWVRFIGRpZ2VzdFsyMF0pOwordm9pZCBDUllQVF9TSEExU3RhcnQoRlhfTFBWT0lEIGNvbnRleHQpOwordm9pZCBDUllQVF9TSEExVXBkYXRlKEZYX0xQVk9JRCBjb250ZXh0LCBGWF9MUENCWVRFIGRhdGEsIEZYX0RXT1JEIHNpemUpOwordm9pZCBDUllQVF9TSEExRmluaXNoKEZYX0xQVk9JRCBjb250ZXh0LCBGWF9CWVRFIGRpZ2VzdFsyMF0pOwordm9pZCBDUllQVF9TSEEyNTZHZW5lcmF0ZShGWF9MUENCWVRFIGRhdGEsIEZYX0RXT1JEIHNpemUsIEZYX0JZVEUgZGlnZXN0WzMyXSk7Cit2b2lkIENSWVBUX1NIQTI1NlN0YXJ0KEZYX0xQVk9JRCBjb250ZXh0KTsKK3ZvaWQgQ1JZUFRfU0hBMjU2VXBkYXRlKEZYX0xQVk9JRCBjb250ZXh0LCBGWF9MUENCWVRFIGRhdGEsIEZYX0RXT1JEIHNpemUpOwordm9pZCBDUllQVF9TSEEyNTZGaW5pc2goRlhfTFBWT0lEIGNvbnRleHQsIEZYX0JZVEUgZGlnZXN0WzMyXSk7Cit2b2lkIENSWVBUX1NIQTM4NFN0YXJ0KEZYX0xQVk9JRCBjb250ZXh0KTsKK3ZvaWQgQ1JZUFRfU0hBMzg0VXBkYXRlKEZYX0xQVk9JRCBjb250ZXh0LCBGWF9MUENCWVRFIGRhdGEsIEZYX0RXT1JEIHNpemUpOwordm9pZCBDUllQVF9TSEEzODRGaW5pc2goRlhfTFBWT0lEIGNvbnRleHQsIEZYX0JZVEUgZGlnZXN0WzQ4XSk7Cit2b2lkIENSWVBUX1NIQTM4NEdlbmVyYXRlKEZYX0xQQ0JZVEUgZGF0YSwgRlhfRFdPUkQgc2l6ZSwgRlhfQllURSBkaWdlc3RbNDhdKTsKK3ZvaWQgQ1JZUFRfU0hBNTEyU3RhcnQoRlhfTFBWT0lEIGNvbnRleHQpOwordm9pZCBDUllQVF9TSEE1MTJVcGRhdGUoRlhfTFBWT0lEIGNvbnRleHQsIEZYX0xQQ0JZVEUgZGF0YSwgRlhfRFdPUkQgc2l6ZSk7Cit2b2lkIENSWVBUX1NIQTUxMkZpbmlzaChGWF9MUFZPSUQgY29udGV4dCwgRlhfQllURSBkaWdlc3RbNjRdKTsKK3ZvaWQgQ1JZUFRfU0hBNTEyR2VuZXJhdGUoRlhfTFBDQllURSBkYXRhLCBGWF9EV09SRCBzaXplLCBGWF9CWVRFIGRpZ2VzdFs2NF0pOwordm9pZCBDUllQVF9TZXRQdWJLZXlEZWNyeXB0b3IoRlhfQk9PTCAoKmZ1bmMpKEZYX0xQQ0JZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUsIEZYX0xQQllURSBkYXRhX2J1ZiwgRlhfRFdPUkQmIGRhdGFfbGVuKSk7CisjaWZkZWYgX19jcGx1c3BsdXMKK307CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCBiL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfbW9kdWxlLmgKaW5kZXggYmMxMWE5Ni4uOGYwNjIxYSAxMDA2NDQKLS0tIGEvY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaAorKysgYi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX21vZHVsZS5oCkBAIC0xLDIwNSArMSwyMDUgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0ZQREZfTU9EVUxFXw0KLSNkZWZpbmUgX0ZQREZfTU9EVUxFXw0KLSNpZm5kZWYgX0ZYQ1JUX0VYVEVOU0lPTl8NCi0jaW5jbHVkZSAiLi4vZnhjcnQvZnhfZXh0LmgiDQotI2VuZGlmDQotY2xhc3MgQ1BERl9Nb2R1bGVNZ3I7DQotY2xhc3MgQ1BERl9QYWdlTW9kdWxlRGVmOw0KLWNsYXNzIENQREZfUmVuZGVyTW9kdWxlRGVmOw0KLWNsYXNzIENQREZfU2VjdXJpdHlIYW5kbGVyOw0KLWNsYXNzIENDb2RlY19Nb2R1bGVNZ3I7DQotY2xhc3MgQ1BERl9EaWN0aW9uYXJ5Ow0KLWNsYXNzIElDb2RlY19KcGVnTW9kdWxlOw0KLWNsYXNzIElDb2RlY19KcHhNb2R1bGU7DQotY2xhc3MgSUNvZGVjX0ZheE1vZHVsZTsNCi1jbGFzcyBJQ29kZWNfSmJpZzJNb2R1bGU7DQotY2xhc3MgSUNvZGVjX0ljY01vZHVsZTsNCi1jbGFzcyBJQ29kZWNfRmxhdGVNb2R1bGU7DQotI2RlZmluZSBBRERJTl9OQU1FX0NKSwkJCSJFYXN0ZXJuIEFzaWFuIExhbmd1YWdlIFN1cHBvcnQiDQotI2RlZmluZSBBRERJTl9OQU1FX0RFQ09ERVIJCSJKUEVHMjAwMCBhbmQgSkJJRzIgSW1hZ2UgRGVjb2RlcnMiDQotY2xhc3MgQ1BERl9Nb2R1bGVNZ3IgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHN0YXRpYyB2b2lkCUNyZWF0ZSgpOw0KLQ0KLSAgICBzdGF0aWMgQ1BERl9Nb2R1bGVNZ3IqCUdldCgpOw0KLQ0KLSAgICBzdGF0aWMgdm9pZAlEZXN0cm95KCk7DQotDQotDQotDQotICAgIHZvaWQJCVNldENvZGVjTW9kdWxlKENDb2RlY19Nb2R1bGVNZ3IqIHBNb2R1bGUpDQotICAgIHsNCi0gICAgICAgIG1fcENvZGVjTW9kdWxlID0gcE1vZHVsZTsNCi0gICAgfQ0KLSAgICBDQ29kZWNfTW9kdWxlTWdyKgkJR2V0Q29kZWNNb2R1bGUoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wQ29kZWNNb2R1bGU7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJSW5pdFBhZ2VNb2R1bGUoKTsNCi0NCi0gICAgdm9pZAkJSW5pdFJlbmRlck1vZHVsZSgpOw0KLQ0KLQ0KLSAgICB2b2lkCQlTZXRNb2R1bGVQYXRoKEZYX0xQQ1NUUiBtb2R1bGVfbmFtZSwgRlhfTFBDU1RSIHBhdGgpOw0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZyBHZXRNb2R1bGVGaWxlUGF0aChGWF9MUENTVFIgbW9kdWxlX25hbWUsIEZYX0xQQ1NUUiBuYW1lKTsNCi0NCi0gICAgdm9pZAkJU2V0RG93bmxvYWRDYWxsYmFjayhGWF9CT09MICgqY2FsbGJhY2spKEZYX0xQQ1NUUiBtb2R1bGVfbmFtZSkpOw0KLQ0KLSAgICBGWF9CT09MCQlEb3dubG9hZE1vZHVsZShGWF9MUENTVFIgbW9kdWxlX25hbWUpOw0KLQ0KLSAgICB2b2lkCQlOb3RpZnlNb2R1bGVBdmFpbGFibGUoRlhfTFBDU1RSIG1vZHVsZV9uYW1lKTsNCi0NCi0NCi0NCi0gICAgQ1BERl9SZW5kZXJNb2R1bGVEZWYqCUdldFJlbmRlck1vZHVsZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BSZW5kZXJNb2R1bGU7DQotICAgIH0NCi0NCi0gICAgQ1BERl9QYWdlTW9kdWxlRGVmKgkJR2V0UGFnZU1vZHVsZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BQYWdlTW9kdWxlOw0KLSAgICB9DQotDQotDQotDQotDQotICAgIHZvaWQJCQkJCUxvYWRFbWJlZGRlZEdCMUNNYXBzKCk7DQotDQotICAgIHZvaWQJCQkJCUxvYWRFbWJlZGRlZENOUzFDTWFwcygpOw0KLQ0KLSAgICB2b2lkCQkJCQlMb2FkRW1iZWRkZWRKYXBhbjFDTWFwcygpOw0KLQ0KLSAgICB2b2lkCQkJCQlMb2FkRW1iZWRkZWRLb3JlYTFDTWFwcygpOw0KLQ0KLSAgICBJQ29kZWNfRmF4TW9kdWxlKgkJR2V0RmF4TW9kdWxlKCk7DQotICAgIElDb2RlY19KcGVnTW9kdWxlKgkJR2V0SnBlZ01vZHVsZSgpOw0KLSAgICBJQ29kZWNfSnB4TW9kdWxlKgkJR2V0SnB4TW9kdWxlKCk7DQotICAgIElDb2RlY19KYmlnMk1vZHVsZSoJCUdldEpiaWcyTW9kdWxlKCk7DQotICAgIElDb2RlY19JY2NNb2R1bGUqCQlHZXRJY2NNb2R1bGUoKTsNCi0gICAgSUNvZGVjX0ZsYXRlTW9kdWxlKgkJR2V0RmxhdGVNb2R1bGUoKTsNCi0NCi0gICAgdm9pZAkJCQkJUmVnaXN0ZXJTZWN1cml0eUhhbmRsZXIoRlhfTFBDU1RSIG5hbWUsIENQREZfU2VjdXJpdHlIYW5kbGVyICogKCpDcmVhdGVIYW5kbGVyKSh2b2lkKiBwYXJhbSksIHZvaWQqIHBhcmFtKTsNCi0NCi0gICAgQ1BERl9TZWN1cml0eUhhbmRsZXIqCUNyZWF0ZVNlY3VyaXR5SGFuZGxlcihGWF9MUENTVFIgbmFtZSk7DQotDQotICAgIHZvaWQJCQkJCVNldFByaXZhdGVEYXRhKEZYX0xQVk9JRCBtb2R1bGVfaWQsIEZYX0xQVk9JRCBwRGF0YSwgUERfQ0FMTEJBQ0tfRlJFRURBVEEgY2FsbGJhY2spOw0KLQ0KLSAgICBGWF9MUFZPSUQJCQkJR2V0UHJpdmF0ZURhdGEoRlhfTFBWT0lEIG1vZHVsZV9pZCk7DQotDQotICAgIGludAkJCQkJCW1fRmlsZUJ1ZlNpemU7DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBDUERGX01vZHVsZU1ncigpOw0KLQ0KLSAgICB+Q1BERl9Nb2R1bGVNZ3IoKTsNCi0gICAgdm9pZAkJCQkJSW5pdGlhbGl6ZSgpOw0KLQ0KLSAgICB2b2lkCQkJCQlJbml0TW9kdWxlcygpOw0KLQ0KLQ0KLQ0KLSAgICBDQ29kZWNfTW9kdWxlTWdyKgkJbV9wQ29kZWNNb2R1bGU7DQotDQotICAgIENQREZfUmVuZGVyTW9kdWxlRGVmKgltX3BSZW5kZXJNb2R1bGU7DQotDQotICAgIENQREZfUGFnZU1vZHVsZURlZioJCW1fcFBhZ2VNb2R1bGU7DQotDQotDQotICAgIEZYX0JPT0wgKCptX3BEb3dubG9hZENhbGxiYWNrKShGWF9MUENTVFIgbW9kdWxlX25hbWUpOw0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZwkJCW1fRGVmYXVsdE1vZHVsZVBhdGg7DQotDQotICAgIENGWF9DTWFwQnl0ZVN0cmluZ1RvUHRyCW1fTW9kdWxlUGF0aExpc3Q7DQotDQotICAgIENGWF9NYXBCeXRlU3RyaW5nVG9QdHIJbV9TZWN1cml0eUhhbmRsZXJNYXA7DQotDQotICAgIENGWF9Qcml2YXRlRGF0YQkJCW1fcHJpdmF0ZURhdGE7DQotfTsNCi1jbGFzcyBDUERGX0RvY3VtZW50Ow0KLWNsYXNzIENQREZfRG9jUGFnZURhdGE7DQotY2xhc3MgQ1BERl9Gb250R2xvYmFsczsNCi1jbGFzcyBJUERGX0ZvbnRNZ3I7DQotY2xhc3MgSVBERl9Gb250TWFwcGVyOw0KLWNsYXNzIENQREZfQ29sb3JTcGFjZTsNCi1jbGFzcyBDUERGX1BhZ2VNb2R1bGVEZWYgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIHZpcnR1YWwgfkNQREZfUGFnZU1vZHVsZURlZigpIHt9DQotDQotICAgIHZpcnR1YWwgQ1BERl9Eb2NQYWdlRGF0YSoJQ3JlYXRlRG9jRGF0YShDUERGX0RvY3VtZW50KiBwRG9jKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQkJUmVsZWFzZURvYyhDUERGX0RvY3VtZW50Kikge30NCi0gICAgdmlydHVhbCB2b2lkCQkJCUNsZWFyRG9jKENQREZfRG9jdW1lbnQqKSB7fQ0KLQ0KLSAgICB2aXJ0dWFsIENQREZfRm9udEdsb2JhbHMqCUdldEZvbnRHbG9iYWxzKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0NCi0gICAgdmlydHVhbCB2b2lkCQkJCUNsZWFyU3RvY2tGb250KENQREZfRG9jdW1lbnQqIHBEb2MpIHt9DQotDQotICAgIHZpcnR1YWwgdm9pZAkJCQlOb3RpZnlDSktBdmFpbGFibGUoKSB7fQ0KLQ0KLSAgICB2aXJ0dWFsIENQREZfQ29sb3JTcGFjZSoJR2V0U3RvY2tDUyhpbnQgZmFtaWx5KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLX07DQotY2xhc3MgQ1BERl9QYWdlT2JqZWN0czsNCi1jbGFzcyBDRlhfQWZmaW5lTWF0cml4Ow0KLWNsYXNzIENQREZfUmVuZGVyT3B0aW9uczsNCi1jbGFzcyBDUERGX1BhZ2U7DQotY2xhc3MgQ1BERl9Eb2NSZW5kZXJEYXRhOw0KLWNsYXNzIENQREZfUGFnZVJlbmRlckNhY2hlOw0KLWNsYXNzIENGWF9CaXRtYXBEZXZpY2U7DQotY2xhc3MgQ1BERl9TdHJlYW07DQotY2xhc3MgQ0ZYX0RJQlNvdXJjZTsNCi1jbGFzcyBDUERGX1JlbmRlckNvbmZpZzsNCi1jbGFzcyBDUERGX0ltYWdlOw0KLWNsYXNzIENQREZfUmVuZGVyTW9kdWxlRGVmIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICB2aXJ0dWFsIH5DUERGX1JlbmRlck1vZHVsZURlZigpIHt9DQotDQotICAgIHZpcnR1YWwgQ1BERl9Eb2NSZW5kZXJEYXRhKglDcmVhdGVEb2NEYXRhKENQREZfRG9jdW1lbnQqIHBEb2MpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotDQotICAgIHZpcnR1YWwgdm9pZAlEZXN0cm95RG9jRGF0YShDUERGX0RvY1JlbmRlckRhdGEqKSB7fQ0KLSAgICB2aXJ0dWFsIHZvaWQJQ2xlYXJEb2NEYXRhKENQREZfRG9jUmVuZGVyRGF0YSopIHt9DQotDQotICAgIHZpcnR1YWwgQ1BERl9Eb2NSZW5kZXJEYXRhKiBHZXRSZW5kZXJEYXRhKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0NCi0gICAgdmlydHVhbCBDUERGX1BhZ2VSZW5kZXJDYWNoZSoJQ3JlYXRlUGFnZUNhY2hlKENQREZfUGFnZSogcFBhZ2UpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotDQotICAgIHZpcnR1YWwgdm9pZAlEZXN0cm95UGFnZUNhY2hlKENQREZfUGFnZVJlbmRlckNhY2hlKikge30NCi0NCi0gICAgdmlydHVhbCB2b2lkCU5vdGlmeURlY29kZXJBdmFpbGFibGUoKSB7fQ0KLQ0KLSAgICB2aXJ0dWFsIENQREZfUmVuZGVyQ29uZmlnKiBHZXRDb25maWcoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLX07DQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlBERl9NT0RVTEVfCisjZGVmaW5lIF9GUERGX01PRFVMRV8KKyNpZm5kZWYgX0ZYQ1JUX0VYVEVOU0lPTl8KKyNpbmNsdWRlICIuLi9meGNydC9meF9leHQuaCIKKyNlbmRpZgorY2xhc3MgQ1BERl9Nb2R1bGVNZ3I7CitjbGFzcyBDUERGX1BhZ2VNb2R1bGVEZWY7CitjbGFzcyBDUERGX1JlbmRlck1vZHVsZURlZjsKK2NsYXNzIENQREZfU2VjdXJpdHlIYW5kbGVyOworY2xhc3MgQ0NvZGVjX01vZHVsZU1ncjsKK2NsYXNzIENQREZfRGljdGlvbmFyeTsKK2NsYXNzIElDb2RlY19KcGVnTW9kdWxlOworY2xhc3MgSUNvZGVjX0pweE1vZHVsZTsKK2NsYXNzIElDb2RlY19GYXhNb2R1bGU7CitjbGFzcyBJQ29kZWNfSmJpZzJNb2R1bGU7CitjbGFzcyBJQ29kZWNfSWNjTW9kdWxlOworY2xhc3MgSUNvZGVjX0ZsYXRlTW9kdWxlOworI2RlZmluZSBBRERJTl9OQU1FX0NKSwkJCSJFYXN0ZXJuIEFzaWFuIExhbmd1YWdlIFN1cHBvcnQiCisjZGVmaW5lIEFERElOX05BTUVfREVDT0RFUgkJIkpQRUcyMDAwIGFuZCBKQklHMiBJbWFnZSBEZWNvZGVycyIKK2NsYXNzIENQREZfTW9kdWxlTWdyIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIHN0YXRpYyB2b2lkCUNyZWF0ZSgpOworCisgICAgc3RhdGljIENQREZfTW9kdWxlTWdyKglHZXQoKTsKKworICAgIHN0YXRpYyB2b2lkCURlc3Ryb3koKTsKKworCisKKyAgICB2b2lkCQlTZXRDb2RlY01vZHVsZShDQ29kZWNfTW9kdWxlTWdyKiBwTW9kdWxlKQorICAgIHsKKyAgICAgICAgbV9wQ29kZWNNb2R1bGUgPSBwTW9kdWxlOworICAgIH0KKyAgICBDQ29kZWNfTW9kdWxlTWdyKgkJR2V0Q29kZWNNb2R1bGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcENvZGVjTW9kdWxlOworICAgIH0KKworICAgIHZvaWQJCUluaXRQYWdlTW9kdWxlKCk7CisKKyAgICB2b2lkCQlJbml0UmVuZGVyTW9kdWxlKCk7CisKKworICAgIHZvaWQJCVNldE1vZHVsZVBhdGgoRlhfTFBDU1RSIG1vZHVsZV9uYW1lLCBGWF9MUENTVFIgcGF0aCk7CisKKyAgICBDRlhfQnl0ZVN0cmluZyBHZXRNb2R1bGVGaWxlUGF0aChGWF9MUENTVFIgbW9kdWxlX25hbWUsIEZYX0xQQ1NUUiBuYW1lKTsKKworICAgIHZvaWQJCVNldERvd25sb2FkQ2FsbGJhY2soRlhfQk9PTCAoKmNhbGxiYWNrKShGWF9MUENTVFIgbW9kdWxlX25hbWUpKTsKKworICAgIEZYX0JPT0wJCURvd25sb2FkTW9kdWxlKEZYX0xQQ1NUUiBtb2R1bGVfbmFtZSk7CisKKyAgICB2b2lkCQlOb3RpZnlNb2R1bGVBdmFpbGFibGUoRlhfTFBDU1RSIG1vZHVsZV9uYW1lKTsKKworCisKKyAgICBDUERGX1JlbmRlck1vZHVsZURlZioJR2V0UmVuZGVyTW9kdWxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BSZW5kZXJNb2R1bGU7CisgICAgfQorCisgICAgQ1BERl9QYWdlTW9kdWxlRGVmKgkJR2V0UGFnZU1vZHVsZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wUGFnZU1vZHVsZTsKKyAgICB9CisKKworCisKKyAgICB2b2lkCQkJCQlMb2FkRW1iZWRkZWRHQjFDTWFwcygpOworCisgICAgdm9pZAkJCQkJTG9hZEVtYmVkZGVkQ05TMUNNYXBzKCk7CisKKyAgICB2b2lkCQkJCQlMb2FkRW1iZWRkZWRKYXBhbjFDTWFwcygpOworCisgICAgdm9pZAkJCQkJTG9hZEVtYmVkZGVkS29yZWExQ01hcHMoKTsKKworICAgIElDb2RlY19GYXhNb2R1bGUqCQlHZXRGYXhNb2R1bGUoKTsKKyAgICBJQ29kZWNfSnBlZ01vZHVsZSoJCUdldEpwZWdNb2R1bGUoKTsKKyAgICBJQ29kZWNfSnB4TW9kdWxlKgkJR2V0SnB4TW9kdWxlKCk7CisgICAgSUNvZGVjX0piaWcyTW9kdWxlKgkJR2V0SmJpZzJNb2R1bGUoKTsKKyAgICBJQ29kZWNfSWNjTW9kdWxlKgkJR2V0SWNjTW9kdWxlKCk7CisgICAgSUNvZGVjX0ZsYXRlTW9kdWxlKgkJR2V0RmxhdGVNb2R1bGUoKTsKKworICAgIHZvaWQJCQkJCVJlZ2lzdGVyU2VjdXJpdHlIYW5kbGVyKEZYX0xQQ1NUUiBuYW1lLCBDUERGX1NlY3VyaXR5SGFuZGxlciAqICgqQ3JlYXRlSGFuZGxlcikodm9pZCogcGFyYW0pLCB2b2lkKiBwYXJhbSk7CisKKyAgICBDUERGX1NlY3VyaXR5SGFuZGxlcioJQ3JlYXRlU2VjdXJpdHlIYW5kbGVyKEZYX0xQQ1NUUiBuYW1lKTsKKworICAgIHZvaWQJCQkJCVNldFByaXZhdGVEYXRhKEZYX0xQVk9JRCBtb2R1bGVfaWQsIEZYX0xQVk9JRCBwRGF0YSwgUERfQ0FMTEJBQ0tfRlJFRURBVEEgY2FsbGJhY2spOworCisgICAgRlhfTFBWT0lECQkJCUdldFByaXZhdGVEYXRhKEZYX0xQVk9JRCBtb2R1bGVfaWQpOworCisgICAgaW50CQkJCQkJbV9GaWxlQnVmU2l6ZTsKK3Byb3RlY3RlZDoKKworICAgIENQREZfTW9kdWxlTWdyKCk7CisKKyAgICB+Q1BERl9Nb2R1bGVNZ3IoKTsKKyAgICB2b2lkCQkJCQlJbml0aWFsaXplKCk7CisKKyAgICB2b2lkCQkJCQlJbml0TW9kdWxlcygpOworCisKKworICAgIENDb2RlY19Nb2R1bGVNZ3IqCQltX3BDb2RlY01vZHVsZTsKKworICAgIENQREZfUmVuZGVyTW9kdWxlRGVmKgltX3BSZW5kZXJNb2R1bGU7CisKKyAgICBDUERGX1BhZ2VNb2R1bGVEZWYqCQltX3BQYWdlTW9kdWxlOworCisKKyAgICBGWF9CT09MICgqbV9wRG93bmxvYWRDYWxsYmFjaykoRlhfTFBDU1RSIG1vZHVsZV9uYW1lKTsKKworICAgIENGWF9CeXRlU3RyaW5nCQkJbV9EZWZhdWx0TW9kdWxlUGF0aDsKKworICAgIENGWF9DTWFwQnl0ZVN0cmluZ1RvUHRyCW1fTW9kdWxlUGF0aExpc3Q7CisKKyAgICBDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyCW1fU2VjdXJpdHlIYW5kbGVyTWFwOworCisgICAgQ0ZYX1ByaXZhdGVEYXRhCQkJbV9wcml2YXRlRGF0YTsKK307CitjbGFzcyBDUERGX0RvY3VtZW50OworY2xhc3MgQ1BERl9Eb2NQYWdlRGF0YTsKK2NsYXNzIENQREZfRm9udEdsb2JhbHM7CitjbGFzcyBJUERGX0ZvbnRNZ3I7CitjbGFzcyBJUERGX0ZvbnRNYXBwZXI7CitjbGFzcyBDUERGX0NvbG9yU3BhY2U7CitjbGFzcyBDUERGX1BhZ2VNb2R1bGVEZWYgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIHZpcnR1YWwgfkNQREZfUGFnZU1vZHVsZURlZigpIHt9CisKKyAgICB2aXJ0dWFsIENQREZfRG9jUGFnZURhdGEqCUNyZWF0ZURvY0RhdGEoQ1BERl9Eb2N1bWVudCogcERvYykKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZAkJCQlSZWxlYXNlRG9jKENQREZfRG9jdW1lbnQqKSB7fQorICAgIHZpcnR1YWwgdm9pZAkJCQlDbGVhckRvYyhDUERGX0RvY3VtZW50Kikge30KKworICAgIHZpcnR1YWwgQ1BERl9Gb250R2xvYmFscyoJR2V0Rm9udEdsb2JhbHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkCQkJCUNsZWFyU3RvY2tGb250KENQREZfRG9jdW1lbnQqIHBEb2MpIHt9CisKKyAgICB2aXJ0dWFsIHZvaWQJCQkJTm90aWZ5Q0pLQXZhaWxhYmxlKCkge30KKworICAgIHZpcnR1YWwgQ1BERl9Db2xvclNwYWNlKglHZXRTdG9ja0NTKGludCBmYW1pbHkpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9OworY2xhc3MgQ1BERl9QYWdlT2JqZWN0czsKK2NsYXNzIENGWF9BZmZpbmVNYXRyaXg7CitjbGFzcyBDUERGX1JlbmRlck9wdGlvbnM7CitjbGFzcyBDUERGX1BhZ2U7CitjbGFzcyBDUERGX0RvY1JlbmRlckRhdGE7CitjbGFzcyBDUERGX1BhZ2VSZW5kZXJDYWNoZTsKK2NsYXNzIENGWF9CaXRtYXBEZXZpY2U7CitjbGFzcyBDUERGX1N0cmVhbTsKK2NsYXNzIENGWF9ESUJTb3VyY2U7CitjbGFzcyBDUERGX1JlbmRlckNvbmZpZzsKK2NsYXNzIENQREZfSW1hZ2U7CitjbGFzcyBDUERGX1JlbmRlck1vZHVsZURlZiA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q1BERl9SZW5kZXJNb2R1bGVEZWYoKSB7fQorCisgICAgdmlydHVhbCBDUERGX0RvY1JlbmRlckRhdGEqCUNyZWF0ZURvY0RhdGEoQ1BERl9Eb2N1bWVudCogcERvYykKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZAlEZXN0cm95RG9jRGF0YShDUERGX0RvY1JlbmRlckRhdGEqKSB7fQorICAgIHZpcnR1YWwgdm9pZAlDbGVhckRvY0RhdGEoQ1BERl9Eb2NSZW5kZXJEYXRhKikge30KKworICAgIHZpcnR1YWwgQ1BERl9Eb2NSZW5kZXJEYXRhKiBHZXRSZW5kZXJEYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHZpcnR1YWwgQ1BERl9QYWdlUmVuZGVyQ2FjaGUqCUNyZWF0ZVBhZ2VDYWNoZShDUERGX1BhZ2UqIHBQYWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkCURlc3Ryb3lQYWdlQ2FjaGUoQ1BERl9QYWdlUmVuZGVyQ2FjaGUqKSB7fQorCisgICAgdmlydHVhbCB2b2lkCU5vdGlmeURlY29kZXJBdmFpbGFibGUoKSB7fQorCisgICAgdmlydHVhbCBDUERGX1JlbmRlckNvbmZpZyogR2V0Q29uZmlnKCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfb2JqZWN0cy5oIGIvY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9vYmplY3RzLmgKaW5kZXggZTY3MTQ0Yi4uNjIyZjM5ZCAxMDA2NDQKLS0tIGEvY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9vYmplY3RzLmgKKysrIGIvY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9vYmplY3RzLmgKQEAgLTEsNzg1ICsxLDc4NSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlBERl9PQkpFQ1RTXw0KLSNkZWZpbmUgX0ZQREZfT0JKRUNUU18NCi0jaWZuZGVmIF9GWENSVF9FWFRFTlNJT05fDQotI2luY2x1ZGUgIi4uL2Z4Y3J0L2Z4X2V4dC5oIg0KLSNlbmRpZg0KLWNsYXNzIENQREZfRG9jdW1lbnQ7DQotY2xhc3MgQ1BERl9JbmRpcmVjdE9iamVjdHM7DQotY2xhc3MgQ1BERl9OdWxsOw0KLWNsYXNzIENQREZfQm9vbGVhbjsNCi1jbGFzcyBDUERGX051bWJlcjsNCi1jbGFzcyBDUERGX1N0cmluZzsNCi1jbGFzcyBDUERGX1N0cmVhbTsNCi1jbGFzcyBDUERGX1N0cmVhbUFjYzsNCi1jbGFzcyBDUERGX1N0cmVhbUZpbHRlcjsNCi1jbGFzcyBDUERGX0FycmF5Ow0KLWNsYXNzIENQREZfRGljdGlvbmFyeTsNCi1jbGFzcyBDUERGX1JlZmVyZW5jZTsNCi1jbGFzcyBJUERGX0RvY1BhcnNlcjsNCi1jbGFzcyBJRlhfRmlsZVJlYWQ7DQotY2xhc3MgQ1BERl9DcnlwdG9IYW5kbGVyOw0KLSNkZWZpbmUgUERGT0JKX0lOVkFMSUQJCTANCi0jZGVmaW5lCVBERk9CSl9CT09MRUFOCQkxDQotI2RlZmluZSBQREZPQkpfTlVNQkVSCQkyDQotI2RlZmluZSBQREZPQkpfU1RSSU5HCQkzDQotI2RlZmluZSBQREZPQkpfTkFNRQkJCTQNCi0jZGVmaW5lIFBERk9CSl9BUlJBWQkJNQ0KLSNkZWZpbmUgUERGT0JKX0RJQ1RJT05BUlkJNg0KLSNkZWZpbmUgUERGT0JKX1NUUkVBTQkJNw0KLSNkZWZpbmUgUERGT0JKX05VTEwJCQk4DQotI2RlZmluZSBQREZPQkpfUkVGRVJFTkNFCTkNCi10eXBlZGVmIElGWF9GaWxlU3RyZWFtKiAoKkZQREZfTFBGQ2xvbmVTdHJlYW1DYWxsYmFjaykoQ1BERl9TdHJlYW0gKnBTdHJlYW0sIEZYX0xQVk9JRCBwVXNlckRhdGEpOw0KLWNsYXNzIENQREZfT2JqZWN0IDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBpbnQJCQkJCQlHZXRUeXBlKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fVHlwZTsNCi0gICAgfQ0KLQ0KLSAgICBGWF9EV09SRAkJCQlHZXRPYmpOdW0oKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9PYmpOdW07DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTAkJCQkJSXNJZGVudGljYWwoQ1BERl9PYmplY3QqIHBPYmopIGNvbnN0Ow0KLQ0KLSAgICBDUERGX09iamVjdCoJCQlDbG9uZShGWF9CT09MIGJEaXJlY3QgPSBGQUxTRSkgY29uc3Q7DQotDQotICAgIENQREZfT2JqZWN0KgkJCUNsb25lUmVmKENQREZfSW5kaXJlY3RPYmplY3RzKiBwT2JqcykgY29uc3Q7DQotDQotICAgIENQREZfT2JqZWN0KgkJCUdldERpcmVjdCgpIGNvbnN0Ow0KLQ0KLSAgICB2b2lkCQkJCQlSZWxlYXNlKCk7DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQkJR2V0U3RyaW5nKCkgY29uc3Q7DQotDQotICAgIENGWF9CeXRlU3RyaW5nQwkJCUdldENvbnN0U3RyaW5nKCkgY29uc3Q7DQotDQotICAgIENGWF9XaWRlU3RyaW5nCQkJR2V0VW5pY29kZVRleHQoQ0ZYX0NoYXJNYXAqIHBDaGFyTWFwID0gTlVMTCkgY29uc3Q7DQotDQotICAgIEZYX0ZMT0FUCQkJCUdldE51bWJlcigpIGNvbnN0Ow0KLQ0KLSAgICBGWF9GTE9BVAkJCQlHZXROdW1iZXIxNigpIGNvbnN0Ow0KLQ0KLSAgICBpbnQJCQkJCQlHZXRJbnRlZ2VyKCkgY29uc3Q7DQotDQotICAgIENQREZfRGljdGlvbmFyeSoJCUdldERpY3QoKSBjb25zdDsNCi0NCi0gICAgQ1BERl9BcnJheSoJCQkJR2V0QXJyYXkoKSBjb25zdDsNCi0NCi0gICAgdm9pZAkJCQkJU2V0U3RyaW5nKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIpOw0KLQ0KLSAgICB2b2lkCQkJCQlTZXRVbmljb2RlVGV4dChGWF9MUENXU1RSIHBVbmljb2RlcywgaW50IGxlbiA9IC0xKTsNCi0NCi0gICAgaW50CQkJCQkJR2V0RGlyZWN0VHlwZSgpIGNvbnN0Ow0KLQ0KLSAgICBGWF9CT09MCQkJCQlJc01vZGlmaWVkKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotcHJvdGVjdGVkOg0KLSAgICBGWF9EV09SRAkJCQltX1R5cGU7DQotICAgIENQREZfT2JqZWN0KCkNCi0gICAgew0KLSAgICAgICAgbV9PYmpOdW0gPSAwOw0KLSAgICB9DQotDQotICAgIEZYX0RXT1JEIAkJCQltX09iak51bTsNCi0NCi0gICAgdm9pZAkJCQkJRGVzdHJveSgpOw0KLQ0KLQ0KLSAgICB+Q1BERl9PYmplY3QoKSB7fQ0KLSAgICBmcmllbmQgY2xhc3MJCQlDUERGX0luZGlyZWN0T2JqZWN0czsNCi0gICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9QYXJzZXI7DQotICAgIGZyaWVuZCBjbGFzcwkJCUNQREZfU3ludGF4UGFyc2VyOw0KLXByaXZhdGU6DQotICAgIENQREZfT2JqZWN0KGNvbnN0IENQREZfT2JqZWN0JiBzcmMpIHt9DQotICAgIENQREZfT2JqZWN0KiBDbG9uZUludGVybmFsKEZYX0JPT0wgYkRpcmVjdCwgQ0ZYX01hcFB0clRvUHRyKiB2aXNpdGVkKSBjb25zdDsNCi19Ow0KLWNsYXNzIENQREZfQm9vbGVhbiA6IHB1YmxpYyBDUERGX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHN0YXRpYyBDUERGX0Jvb2xlYW4qCUNyZWF0ZShGWF9CT09MIHZhbHVlKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfQm9vbGVhbih2YWx1ZSk7DQotICAgIH0NCi0NCi0gICAgQ1BERl9Cb29sZWFuKCkNCi0gICAgew0KLSAgICAgICAgbV9UeXBlID0gUERGT0JKX0JPT0xFQU47DQotICAgIH0NCi0NCi0gICAgQ1BERl9Cb29sZWFuKEZYX0JPT0wgdmFsdWUpDQotICAgIHsNCi0gICAgICAgIG1fVHlwZSA9IFBERk9CSl9CT09MRUFOOw0KLSAgICAgICAgbV9iVmFsdWUgPSB2YWx1ZTsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MCQkJCQlJZGVudGljYWwoQ1BERl9Cb29sZWFuKiBwT3RoZXIpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX2JWYWx1ZSA9PSBwT3RoZXItPm1fYlZhbHVlOw0KLSAgICB9DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBGWF9CT09MCQkJCQltX2JWYWx1ZTsNCi0gICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9PYmplY3Q7DQotfTsNCi1jbGFzcyBDUERGX051bWJlciA6IHB1YmxpYyBDUERGX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHN0YXRpYyBDUERGX051bWJlcioJCUNyZWF0ZShpbnQgdmFsdWUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBGWF9ORVcgQ1BERl9OdW1iZXIodmFsdWUpOw0KLSAgICB9DQotDQotICAgIHN0YXRpYyBDUERGX051bWJlcioJCUNyZWF0ZShGWF9GTE9BVCB2YWx1ZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX051bWJlcih2YWx1ZSk7DQotICAgIH0NCi0NCi0gICAgc3RhdGljIENQREZfTnVtYmVyKgkJQ3JlYXRlKEZYX0JTVFIgc3RyKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfTnVtYmVyKHN0cik7DQotICAgIH0NCi0NCi0gICAgc3RhdGljIENQREZfTnVtYmVyKgkJQ3JlYXRlKEZYX0JPT0wgYkludGVnZXIsIHZvaWQqIHBEYXRhKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfTnVtYmVyKGJJbnRlZ2VyLCBwRGF0YSk7DQotICAgIH0NCi0NCi0gICAgQ1BERl9OdW1iZXIoKQ0KLSAgICB7DQotICAgICAgICBtX1R5cGUgPSBQREZPQkpfTlVNQkVSOw0KLSAgICB9DQotDQotICAgIENQREZfTnVtYmVyKEZYX0JPT0wgYkludGVnZXIsIHZvaWQqIHBEYXRhKTsNCi0NCi0gICAgQ1BERl9OdW1iZXIoaW50IHZhbHVlKTsNCi0NCi0gICAgQ1BERl9OdW1iZXIoRlhfRkxPQVQgdmFsdWUpOw0KLQ0KLSAgICBDUERGX051bWJlcihGWF9CU1RSIHN0cik7DQotDQotICAgIEZYX0JPT0wJCQkJCUlkZW50aWNhbChDUERGX051bWJlciogcE90aGVyKSBjb25zdDsNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcJCQlHZXRTdHJpbmcoKSBjb25zdDsNCi0NCi0gICAgdm9pZAkJCQkJU2V0U3RyaW5nKEZYX0JTVFIgc3RyKTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJSXNJbnRlZ2VyKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fYkludGVnZXI7DQotICAgIH0NCi0NCi0gICAgaW50CQkJCQkJR2V0SW50ZWdlcigpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX2JJbnRlZ2VyID8gbV9JbnRlZ2VyIDogKGludCltX0Zsb2F0Ow0KLSAgICB9DQotDQotICAgIEZYX0ZMT0FUCQkJCUdldE51bWJlcigpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX2JJbnRlZ2VyID8gKEZYX0ZMT0FUKW1fSW50ZWdlciA6IG1fRmxvYXQ7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCQkJU2V0TnVtYmVyKEZYX0ZMT0FUIHZhbHVlKTsNCi0NCi0gICAgRlhfRkxPQVQJCQlHZXROdW1iZXIxNigpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBHZXROdW1iZXIoKTsNCi0gICAgfQ0KLQ0KLSAgICBGWF9GTE9BVAkJCQlHZXRGbG9hdCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX2JJbnRlZ2VyID8gKEZYX0ZMT0FUKW1fSW50ZWdlciA6IG1fRmxvYXQ7DQotICAgIH0NCi1wcm90ZWN0ZWQ6DQotDQotICAgIEZYX0JPT0wJCQkJCW1fYkludGVnZXI7DQotDQotICAgIHVuaW9uIHsNCi0NCi0gICAgICAgIGludAkJCQkJbV9JbnRlZ2VyOw0KLQ0KLSAgICAgICAgRlhfRkxPQVQJCQltX0Zsb2F0Ow0KLSAgICB9Ow0KLSAgICBmcmllbmQgY2xhc3MJCQlDUERGX09iamVjdDsNCi19Ow0KLWNsYXNzIENQREZfU3RyaW5nIDogcHVibGljIENQREZfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgc3RhdGljIENQREZfU3RyaW5nKgkJQ3JlYXRlKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIsIEZYX0JPT0wgYkhleCA9IEZBTFNFKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfU3RyaW5nKHN0ciwgYkhleCk7DQotICAgIH0NCi0NCi0gICAgc3RhdGljIENQREZfU3RyaW5nKgkJQ3JlYXRlKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHIpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBGWF9ORVcgQ1BERl9TdHJpbmcoc3RyKTsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX1N0cmluZygpDQotICAgIHsNCi0gICAgICAgIG1fVHlwZSA9IFBERk9CSl9TVFJJTkc7DQotICAgICAgICBtX2JIZXggPSBGQUxTRTsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX1N0cmluZyhjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyLCBGWF9CT09MIGJIZXggPSBGQUxTRSkgOiBtX1N0cmluZyhzdHIpDQotICAgIHsNCi0gICAgICAgIG1fVHlwZSA9IFBERk9CSl9TVFJJTkc7DQotICAgICAgICBtX2JIZXggPSBiSGV4Ow0KLSAgICB9DQotDQotICAgIENQREZfU3RyaW5nKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHIpOw0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZyYJCQlHZXRTdHJpbmcoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9TdHJpbmc7DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTAkJCQkJSWRlbnRpY2FsKENQREZfU3RyaW5nKiBwT3RoZXIpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX1N0cmluZyA9PSBwT3RoZXItPm1fU3RyaW5nOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wJCQkJCUlzSGV4KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fYkhleDsNCi0gICAgfQ0KLXByb3RlY3RlZDoNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcJCQltX1N0cmluZzsNCi0NCi0gICAgRlhfQk9PTAkJCQkJbV9iSGV4Ow0KLSAgICBmcmllbmQgY2xhc3MJCQlDUERGX09iamVjdDsNCi19Ow0KLWNsYXNzIENQREZfTmFtZSA6IHB1YmxpYyBDUERGX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHN0YXRpYyBDUERGX05hbWUqCQlDcmVhdGUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX05hbWUoc3RyKTsNCi0gICAgfQ0KLQ0KLSAgICBzdGF0aWMgQ1BERl9OYW1lKgkJQ3JlYXRlKEZYX0JTVFIgc3RyKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfTmFtZShzdHIpOw0KLSAgICB9DQotDQotICAgIHN0YXRpYyBDUERGX05hbWUqCQlDcmVhdGUoRlhfTFBDU1RSIHN0cikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX05hbWUoc3RyKTsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX05hbWUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cikgOiBtX05hbWUoc3RyKQ0KLSAgICB7DQotICAgICAgICBtX1R5cGUgPSBQREZPQkpfTkFNRTsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX05hbWUoRlhfQlNUUiBzdHIpIDogbV9OYW1lKHN0cikNCi0gICAgew0KLSAgICAgICAgbV9UeXBlID0gUERGT0JKX05BTUU7DQotICAgIH0NCi0NCi0gICAgQ1BERl9OYW1lKEZYX0xQQ1NUUiBzdHIpIDogbV9OYW1lKHN0cikNCi0gICAgew0KLSAgICAgICAgbV9UeXBlID0gUERGT0JKX05BTUU7DQotICAgIH0NCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcmCQkJR2V0U3RyaW5nKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fTmFtZTsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MCQkJCQlJZGVudGljYWwoQ1BERl9OYW1lKiBwT3RoZXIpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX05hbWUgPT0gcE90aGVyLT5tX05hbWU7DQotICAgIH0NCi1wcm90ZWN0ZWQ6DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQkJbV9OYW1lOw0KLSAgICBmcmllbmQgY2xhc3MJCQlDUERGX09iamVjdDsNCi19Ow0KLWNsYXNzIENQREZfQXJyYXkgOiBwdWJsaWMgQ1BERl9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBzdGF0aWMgQ1BERl9BcnJheSoJCUNyZWF0ZSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBGWF9ORVcgQ1BERl9BcnJheSgpOw0KLSAgICB9DQotDQotICAgIENQREZfQXJyYXkoKQ0KLSAgICB7DQotICAgICAgICBtX1R5cGUgPSBQREZPQkpfQVJSQVk7DQotICAgIH0NCi0NCi0gICAgRlhfRFdPUkQJCQkJR2V0Q291bnQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9PYmplY3RzLkdldFNpemUoKTsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX09iamVjdCoJCQlHZXRFbGVtZW50KEZYX0RXT1JEIGluZGV4KSBjb25zdDsNCi0NCi0gICAgQ1BERl9PYmplY3QqCQkJR2V0RWxlbWVudFZhbHVlKEZYX0RXT1JEIGluZGV4KSBjb25zdDsNCi0NCi0NCi0NCi0gICAgQ0ZYX0FmZmluZU1hdHJpeAkJR2V0TWF0cml4KCk7DQotDQotICAgIENGWF9GbG9hdFJlY3QJCQlHZXRSZWN0KCk7DQotDQotDQotDQotDQotICAgIENGWF9CeXRlU3RyaW5nCQkJR2V0U3RyaW5nKEZYX0RXT1JEIGluZGV4KSBjb25zdDsNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmdDCQkJR2V0Q29uc3RTdHJpbmcoRlhfRFdPUkQgaW5kZXgpIGNvbnN0Ow0KLQ0KLSAgICBpbnQJCQkJCQlHZXRJbnRlZ2VyKEZYX0RXT1JEIGluZGV4KSBjb25zdDsNCi0NCi0gICAgRlhfRkxPQVQJCQkJR2V0TnVtYmVyKEZYX0RXT1JEIGluZGV4KSBjb25zdDsNCi0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KgkJR2V0RGljdChGWF9EV09SRCBpbmRleCkgY29uc3Q7DQotDQotICAgIENQREZfU3RyZWFtKgkJCUdldFN0cmVhbShGWF9EV09SRCBpbmRleCkgY29uc3Q7DQotDQotICAgIENQREZfQXJyYXkqCQkJCUdldEFycmF5KEZYX0RXT1JEIGluZGV4KSBjb25zdDsNCi0NCi0gICAgRlhfRkxPQVQJCQkJR2V0RmxvYXQoRlhfRFdPUkQgaW5kZXgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBHZXROdW1iZXIoaW5kZXgpOw0KLSAgICB9DQotDQotDQotDQotDQotICAgIHZvaWQJCQkJCVNldEF0KEZYX0RXT1JEIGluZGV4LCBDUERGX09iamVjdCogcE9iaiwgQ1BERl9JbmRpcmVjdE9iamVjdHMqIHBPYmpzID0gTlVMTCk7DQotDQotDQotICAgIHZvaWQJCQkJCUluc2VydEF0KEZYX0RXT1JEIGluZGV4LCBDUERGX09iamVjdCogcE9iaiwgQ1BERl9JbmRpcmVjdE9iamVjdHMqIHBPYmpzID0gTlVMTCk7DQotDQotICAgIHZvaWQJCQkJCVJlbW92ZUF0KEZYX0RXT1JEIGluZGV4KTsNCi0NCi0NCi0gICAgdm9pZAkJCQkJQWRkKENQREZfT2JqZWN0KiBwT2JqLCBDUERGX0luZGlyZWN0T2JqZWN0cyogcE9ianMgPSBOVUxMKTsNCi0NCi0NCi0NCi0gICAgdm9pZAkJCQkJQWRkTnVtYmVyKEZYX0ZMT0FUIGYpOw0KLQ0KLSAgICB2b2lkCQkJCQlBZGRJbnRlZ2VyKGludCBpKTsNCi0NCi0gICAgdm9pZAkJCQkJQWRkU3RyaW5nKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIpOw0KLQ0KLSAgICB2b2lkCQkJCQlBZGROYW1lKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIpOw0KLQ0KLSAgICB2b2lkCQkJCQlBZGRSZWZlcmVuY2UoQ1BERl9JbmRpcmVjdE9iamVjdHMqIHBEb2MsIEZYX0RXT1JEIG9iam51bSk7DQotDQotICAgIHZvaWQJCQkJCUFkZFJlZmVyZW5jZShDUERGX0luZGlyZWN0T2JqZWN0cyogcERvYywgQ1BERl9PYmplY3QqIG9iaikNCi0gICAgew0KLSAgICAgICAgQWRkUmVmZXJlbmNlKHBEb2MsIG9iai0+R2V0T2JqTnVtKCkpOw0KLSAgICB9DQotDQotDQotICAgIEZYX0ZMT0FUCQkJR2V0TnVtYmVyMTYoRlhfRFdPUkQgaW5kZXgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBHZXROdW1iZXIoaW5kZXgpOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJCUFkZE51bWJlcjE2KEZYX0ZMT0FUIHZhbHVlKQ0KLSAgICB7DQotICAgICAgICBBZGROdW1iZXIodmFsdWUpOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wJCQkJCUlkZW50aWNhbChDUERGX0FycmF5KiBwT3RoZXIpIGNvbnN0Ow0KLXByb3RlY3RlZDoNCi0NCi0gICAgfkNQREZfQXJyYXkoKTsNCi0NCi0gICAgQ0ZYX1B0ckFycmF5CQkJbV9PYmplY3RzOw0KLSAgICBmcmllbmQgY2xhc3MJCQlDUERGX09iamVjdDsNCi19Ow0KLWNsYXNzIENQREZfRGljdGlvbmFyeSA6IHB1YmxpYyBDUERGX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHN0YXRpYyBDUERGX0RpY3Rpb25hcnkqCUNyZWF0ZSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5KCk7DQotICAgIH0NCi0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KCkNCi0gICAgew0KLSAgICAgICAgbV9UeXBlID0gUERGT0JKX0RJQ1RJT05BUlk7DQotICAgIH0NCi0NCi0NCi0NCi0gICAgQ1BERl9PYmplY3QqCQkJR2V0RWxlbWVudChGWF9CU1RSIGtleSkgY29uc3Q7DQotDQotICAgIENQREZfT2JqZWN0KgkJCUdldEVsZW1lbnRWYWx1ZShGWF9CU1RSIGtleSkgY29uc3Q7DQotDQotDQotDQotDQotDQotICAgIENGWF9CeXRlU3RyaW5nCQkJR2V0U3RyaW5nKEZYX0JTVFIga2V5KSBjb25zdDsNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmdDCQkJR2V0Q29uc3RTdHJpbmcoRlhfQlNUUiBrZXkpIGNvbnN0Ow0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZwkJCUdldFN0cmluZyhGWF9CU1RSIGtleSwgRlhfQlNUUiBkZWZhdWx0X3N0cikgY29uc3Q7DQotDQotICAgIENGWF9CeXRlU3RyaW5nQwkJCUdldENvbnN0U3RyaW5nKEZYX0JTVFIga2V5LCBGWF9CU1RSIGRlZmF1bHRfc3RyKSBjb25zdDsNCi0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcJCQlHZXRVbmljb2RlVGV4dChGWF9CU1RSIGtleSwgQ0ZYX0NoYXJNYXAqIHBDaGFyTWFwID0gTlVMTCkgY29uc3Q7DQotDQotICAgIGludAkJCQkJCUdldEludGVnZXIoRlhfQlNUUiBrZXkpIGNvbnN0Ow0KLQ0KLSAgICBpbnQJCQkJCQlHZXRJbnRlZ2VyKEZYX0JTVFIga2V5LCBpbnQgZGVmYXVsdF9pbnQpIGNvbnN0Ow0KLQ0KLSAgICBGWF9CT09MCQkJCQlHZXRCb29sZWFuKEZYX0JTVFIga2V5LCBGWF9CT09MIGJEZWZhdWx0ID0gRkFMU0UpIGNvbnN0Ow0KLQ0KLSAgICBGWF9GTE9BVAkJCQlHZXROdW1iZXIoRlhfQlNUUiBrZXkpIGNvbnN0Ow0KLQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqCQlHZXREaWN0KEZYX0JTVFIga2V5KSBjb25zdDsNCi0NCi0gICAgQ1BERl9TdHJlYW0qCQkJR2V0U3RyZWFtKEZYX0JTVFIga2V5KSBjb25zdDsNCi0NCi0gICAgQ1BERl9BcnJheSoJCQkJR2V0QXJyYXkoRlhfQlNUUiBrZXkpIGNvbnN0Ow0KLQ0KLSAgICBDRlhfRmxvYXRSZWN0CQkJR2V0UmVjdChGWF9CU1RSIGtleSkgY29uc3Q7DQotDQotICAgIENGWF9BZmZpbmVNYXRyaXgJCUdldE1hdHJpeChGWF9CU1RSIGtleSkgY29uc3Q7DQotDQotICAgIEZYX0ZMT0FUCQkJCUdldEZsb2F0KEZYX0JTVFIga2V5KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gR2V0TnVtYmVyKGtleSk7DQotICAgIH0NCi0NCi0NCi0gICAgRlhfQk9PTAkJCQkJS2V5RXhpc3QoRlhfQlNUUiBrZXkpIGNvbnN0Ow0KLQ0KLSAgICBGWF9QT1NJVElPTgkJCQlHZXRTdGFydFBvcygpIGNvbnN0Ow0KLQ0KLSAgICBDUERGX09iamVjdCoJCQlHZXROZXh0RWxlbWVudChGWF9QT1NJVElPTiYgcG9zLCBDRlhfQnl0ZVN0cmluZyYga2V5KSBjb25zdDsNCi0NCi0gICAgdm9pZAkJCQkJU2V0QXQoRlhfQlNUUiBrZXksIENQREZfT2JqZWN0KiBwT2JqLCBDUERGX0luZGlyZWN0T2JqZWN0cyogcE9ianMgPSBOVUxMKTsNCi0NCi0NCi0NCi0gICAgdm9pZAkJCQkJU2V0QXROYW1lKEZYX0JTVFIga2V5LCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgbmFtZSk7DQotDQotDQotICAgIHZvaWQJCQkJCVNldEF0U3RyaW5nKEZYX0JTVFIga2V5LCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyaW5nKTsNCi0NCi0NCi0gICAgdm9pZAkJCQkJU2V0QXRJbnRlZ2VyKEZYX0JTVFIga2V5LCBpbnQgaSk7DQotDQotDQotICAgIHZvaWQJCQkJCVNldEF0TnVtYmVyKEZYX0JTVFIga2V5LCBGWF9GTE9BVCBmKTsNCi0NCi0gICAgdm9pZAkJCQkJU2V0QXRSZWZlcmVuY2UoRlhfQlNUUiBrZXksIENQREZfSW5kaXJlY3RPYmplY3RzKiBwRG9jLCBGWF9EV09SRCBvYmpudW0pOw0KLQ0KLSAgICB2b2lkCQkJCQlTZXRBdFJlZmVyZW5jZShGWF9CU1RSIGtleSwgQ1BERl9JbmRpcmVjdE9iamVjdHMqIHBEb2MsIENQREZfT2JqZWN0KiBvYmopDQotICAgIHsNCi0gICAgICAgIFNldEF0UmVmZXJlbmNlKGtleSwgcERvYywgb2JqLT5HZXRPYmpOdW0oKSk7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCQkJQWRkUmVmZXJlbmNlKEZYX0JTVFIga2V5LCBDUERGX0luZGlyZWN0T2JqZWN0cyogcERvYywgRlhfRFdPUkQgb2JqbnVtKTsNCi0NCi0gICAgdm9pZAkJCQkJQWRkUmVmZXJlbmNlKEZYX0JTVFIga2V5LCBDUERGX0luZGlyZWN0T2JqZWN0cyogcERvYywgQ1BERl9PYmplY3QqIG9iaikNCi0gICAgew0KLSAgICAgICAgQWRkUmVmZXJlbmNlKGtleSwgcERvYywgb2JqLT5HZXRPYmpOdW0oKSk7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCQkJU2V0QXRSZWN0KEZYX0JTVFIga2V5LCBjb25zdCBDRlhfRmxvYXRSZWN0JiByZWN0KTsNCi0NCi0gICAgdm9pZAkJCQkJU2V0QXRNYXRyaXgoRlhfQlNUUiBrZXksIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgmIG1hdHJpeCk7DQotDQotICAgIHZvaWQJCQkJCVNldEF0Qm9vbGVhbihGWF9CU1RSIGtleSwgRlhfQk9PTCBiVmFsdWUpOw0KLQ0KLQ0KLQ0KLSAgICB2b2lkCQkJCQlSZW1vdmVBdChGWF9CU1RSIGtleSk7DQotDQotDQotICAgIHZvaWQJCQkJCVJlcGxhY2VLZXkoRlhfQlNUUiBvbGRrZXksIEZYX0JTVFIgbmV3a2V5KTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJSWRlbnRpY2FsKENQREZfRGljdGlvbmFyeSogcERpY3QpIGNvbnN0Ow0KLQ0KLSAgICBpbnQJCQkJCQlHZXRDb3VudCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX01hcC5HZXRDb3VudCgpOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJCUFkZFZhbHVlKEZYX0JTVFIga2V5LCBDUERGX09iamVjdCogcE9iaik7DQotcHJvdGVjdGVkOg0KLQ0KLSAgICB+Q1BERl9EaWN0aW9uYXJ5KCk7DQotDQotICAgIENGWF9DTWFwQnl0ZVN0cmluZ1RvUHRyCW1fTWFwOw0KLQ0KLSAgICBmcmllbmQgY2xhc3MJCQlDUERGX09iamVjdDsNCi19Ow0KLWNsYXNzIENQREZfU3RyZWFtIDogcHVibGljIENQREZfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgc3RhdGljIENQREZfU3RyZWFtKgkJQ3JlYXRlKEZYX0xQQllURSBwRGF0YSwgRlhfRFdPUkQgc2l6ZSwgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX1N0cmVhbShwRGF0YSwgc2l6ZSwgcERpY3QpOw0KLSAgICB9DQotDQotICAgIENQREZfU3RyZWFtKEZYX0xQQllURSBwRGF0YSwgRlhfRFdPUkQgc2l6ZSwgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCk7DQotDQotICAgIENQREZfRGljdGlvbmFyeSoJCUdldERpY3QoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRGljdDsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJCQlTZXREYXRhKEZYX0xQQ0JZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUsIEZYX0JPT0wgYkNvbXByZXNzZWQsIEZYX0JPT0wgYktlZXBCdWYpOw0KLQ0KLSAgICB2b2lkCQkJCQlJbml0U3RyZWFtKEZYX0JZVEUqIHBEYXRhLCBGWF9EV09SRCBzaXplLCBDUERGX0RpY3Rpb25hcnkqIHBEaWN0KTsNCi0NCi0gICAgdm9pZAkJCQkJSW5pdFN0cmVhbShJRlhfRmlsZVJlYWQgKnBGaWxlLCBDUERGX0RpY3Rpb25hcnkqIHBEaWN0KTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJSWRlbnRpY2FsKENQREZfU3RyZWFtKiBwT3RoZXIpIGNvbnN0Ow0KLQ0KLSAgICBDUERGX1N0cmVhbUZpbHRlcioJCUdldFN0cmVhbUZpbHRlcihGWF9CT09MIGJSYXcgPSBGQUxTRSkgY29uc3Q7DQotDQotDQotDQotICAgIEZYX0RXT1JECQkJCUdldFJhd1NpemUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9kd1NpemU7DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTAkJCQkJUmVhZFJhd0RhdGEoRlhfRklMRVNJWkUgc3RhcnRfcG9zLCBGWF9MUEJZVEUgcEJ1ZiwgRlhfRFdPUkQgYnVmX3NpemUpIGNvbnN0Ow0KLQ0KLQ0KLSAgICBGWF9CT09MCQkJCQlJc01lbW9yeUJhc2VkKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fR2VuTnVtID09IChGWF9EV09SRCkgLSAxOw0KLSAgICB9DQotDQotICAgIENQREZfU3RyZWFtKgkJCUNsb25lKEZYX0JPT0wgYkRpcmVjdCwgRlBERl9MUEZDbG9uZVN0cmVhbUNhbGxiYWNrIGxwZkNhbGxiYWNrLCBGWF9MUFZPSUQgcFVzZXJEYXRhKSBjb25zdDsNCi1wcm90ZWN0ZWQ6DQotDQotICAgIH5DUERGX1N0cmVhbSgpOw0KLQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqCQltX3BEaWN0Ow0KLQ0KLSAgICBGWF9EV09SRAkJCQltX2R3U2l6ZTsNCi0NCi0gICAgRlhfRFdPUkQJCQkJbV9HZW5OdW07DQotDQotICAgIHVuaW9uIHsNCi0NCi0gICAgICAgIEZYX0xQQllURQkJCW1fcERhdGFCdWY7DQotDQotICAgICAgICBJRlhfRmlsZVJlYWQqCQltX3BGaWxlOw0KLSAgICB9Ow0KLQ0KLSAgICBGWF9GSUxFU0laRQkJCQltX0ZpbGVPZmZzZXQ7DQotDQotICAgIENQREZfQ3J5cHRvSGFuZGxlcioJCW1fcENyeXB0b0hhbmRsZXI7DQotDQotICAgIHZvaWQJCQkJCUluaXRTdHJlYW0oQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCk7DQotICAgIGZyaWVuZCBjbGFzcwkJCUNQREZfT2JqZWN0Ow0KLSAgICBmcmllbmQgY2xhc3MJCQlDUERGX1N0cmVhbUFjYzsNCi0gICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9BdHRhY2htZW50QWNjOw0KLX07DQotY2xhc3MgQ1BERl9TdHJlYW1BY2MgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfU3RyZWFtQWNjKCk7DQotDQotICAgIH5DUERGX1N0cmVhbUFjYygpOw0KLQ0KLSAgICB2b2lkCQkJCQlMb2FkQWxsRGF0YShjb25zdCBDUERGX1N0cmVhbSogcFN0cmVhbSwgRlhfQk9PTCBiUmF3QWNjZXNzID0gRkFMU0UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGVzdGltYXRlZF9zaXplID0gMCwgRlhfQk9PTCBiSW1hZ2VBY2MgPSBGQUxTRSk7DQotDQotICAgIGNvbnN0IENQREZfU3RyZWFtKgkJR2V0U3RyZWFtKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcFN0cmVhbTsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqCQlHZXREaWN0KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcFN0cmVhbS0+R2V0RGljdCgpOw0KLSAgICB9DQotDQotICAgIEZYX0xQQ0JZVEUJCQkJR2V0RGF0YSgpIGNvbnN0Ow0KLQ0KLSAgICBGWF9EV09SRAkJCQlHZXRTaXplKCkgY29uc3Q7DQotDQotICAgIEZYX0xQQllURQkJCQlEZXRhY2hEYXRhKCk7DQotDQotICAgIGNvbnN0IENGWF9CeXRlU3RyaW5nJglHZXRJbWFnZURlY29kZXIoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9JbWFnZURlY29kZXI7DQotICAgIH0NCi0NCi0gICAgY29uc3QgQ1BERl9EaWN0aW9uYXJ5KglHZXRJbWFnZVBhcmFtKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcEltYWdlUGFyYW07DQotICAgIH0NCi1wcm90ZWN0ZWQ6DQotDQotICAgIEZYX0xQQllURQkJCQltX3BEYXRhOw0KLQ0KLSAgICBGWF9EV09SRAkJCQltX2R3U2l6ZTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJbV9iTmV3QnVmOw0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZwkJCW1fSW1hZ2VEZWNvZGVyOw0KLQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqCQltX3BJbWFnZVBhcmFtOw0KLQ0KLSAgICBjb25zdCBDUERGX1N0cmVhbSoJCW1fcFN0cmVhbTsNCi0NCi0gICAgRlhfTFBCWVRFCQkJCW1fcFNyY0RhdGE7DQotfTsNCi1DRlhfRGF0YUZpbHRlciogRlBERl9DcmVhdGVGaWx0ZXIoRlhfQlNUUiBuYW1lLCBjb25zdCBDUERGX0RpY3Rpb25hcnkqIHBQYXJhbSwgaW50IHdpZHRoID0gMCwgaW50IGhlaWdodCA9IDApOw0KLSNkZWZpbmUgRlBERl9GSUxURVJfQlVGRkVSX1NJWkUJCTIwNDgwDQotY2xhc3MgQ1BERl9TdHJlYW1GaWx0ZXIgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIH5DUERGX1N0cmVhbUZpbHRlcigpOw0KLQ0KLSAgICBGWF9EV09SRAkJCVJlYWRCbG9jayhGWF9MUEJZVEUgYnVmZmVyLCBGWF9EV09SRCBzaXplKTsNCi0NCi0gICAgRlhfRFdPUkQJCQlHZXRTcmNQb3MoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9TcmNPZmZzZXQ7DQotICAgIH0NCi0NCi0gICAgY29uc3QgQ1BERl9TdHJlYW0qCUdldFN0cmVhbSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BTdHJlYW07DQotICAgIH0NCi1wcm90ZWN0ZWQ6DQotDQotICAgIENQREZfU3RyZWFtRmlsdGVyKCkge30NCi0NCi0gICAgRlhfRFdPUkQJCQlSZWFkTGVmdE92ZXIoRlhfTFBCWVRFIGJ1ZmZlciwgRlhfRFdPUkQgYnVmX3NpemUpOw0KLQ0KLSAgICBjb25zdCBDUERGX1N0cmVhbSoJbV9wU3RyZWFtOw0KLQ0KLSAgICBDRlhfRGF0YUZpbHRlcioJCW1fcEZpbHRlcjsNCi0NCi0gICAgQ0ZYX0JpbmFyeUJ1ZioJCW1fcEJ1ZmZlcjsNCi0NCi0gICAgRlhfRFdPUkQJCQltX0J1Zk9mZnNldDsNCi0NCi0gICAgRlhfRFdPUkQJCQltX1NyY09mZnNldDsNCi0NCi0gICAgRlhfQllURQkJCQltX1NyY0J1ZmZlcltGUERGX0ZJTFRFUl9CVUZGRVJfU0laRV07DQotICAgIGZyaWVuZCBjbGFzcyBDUERGX1N0cmVhbTsNCi19Ow0KLWNsYXNzIENQREZfTnVsbCA6IHB1YmxpYyBDUERGX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHN0YXRpYyBDUERGX051bGwqCQlDcmVhdGUoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfTnVsbCgpOw0KLSAgICB9DQotDQotICAgIENQREZfTnVsbCgpDQotICAgIHsNCi0gICAgICAgIG1fVHlwZSA9IFBERk9CSl9OVUxMOw0KLSAgICB9DQotfTsNCi1jbGFzcyBDUERGX1JlZmVyZW5jZSA6IHB1YmxpYyBDUERGX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHN0YXRpYyBDUERGX1JlZmVyZW5jZSoJQ3JlYXRlKENQREZfSW5kaXJlY3RPYmplY3RzKiBwRG9jLCBpbnQgb2JqbnVtKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfUmVmZXJlbmNlKHBEb2MsIG9iam51bSk7DQotICAgIH0NCi0NCi0gICAgQ1BERl9SZWZlcmVuY2UoQ1BERl9JbmRpcmVjdE9iamVjdHMqIHBEb2MsIGludCBvYmpudW0pDQotICAgIHsNCi0gICAgICAgIG1fVHlwZSA9IFBERk9CSl9SRUZFUkVOQ0U7DQotICAgICAgICBtX3BPYmpMaXN0ID0gcERvYzsNCi0gICAgICAgIG1fUmVmT2JqTnVtID0gb2JqbnVtOw0KLSAgICB9DQotDQotICAgIENQREZfSW5kaXJlY3RPYmplY3RzKglHZXRPYmpMaXN0KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcE9iakxpc3Q7DQotICAgIH0NCi0NCi0gICAgRlhfRFdPUkQJCQkJR2V0UmVmT2JqTnVtKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fUmVmT2JqTnVtOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJCVNldFJlZihDUERGX0luZGlyZWN0T2JqZWN0cyogcERvYywgRlhfRFdPUkQgb2JqbnVtKTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJSWRlbnRpY2FsKENQREZfUmVmZXJlbmNlKiBwT3RoZXIpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX1JlZk9iak51bSA9PSBwT3RoZXItPm1fUmVmT2JqTnVtOw0KLSAgICB9DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBDUERGX0luZGlyZWN0T2JqZWN0cyoJbV9wT2JqTGlzdDsNCi0NCi0gICAgRlhfRFdPUkQJCQkJbV9SZWZPYmpOdW07DQotICAgIGZyaWVuZCBjbGFzcwkJCUNQREZfT2JqZWN0Ow0KLX07DQotY2xhc3MgQ1BERl9JbmRpcmVjdE9iamVjdHMgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfSW5kaXJlY3RPYmplY3RzKElQREZfRG9jUGFyc2VyKiBwUGFyc2VyKTsNCi0NCi0gICAgfkNQREZfSW5kaXJlY3RPYmplY3RzKCk7DQotDQotICAgIENQREZfT2JqZWN0KgkJCUdldEluZGlyZWN0T2JqZWN0KEZYX0RXT1JEIG9iam51bSwgc3RydWN0IFBBUlNFX0NPTlRFWFQqIHBDb250ZXh0ID0gTlVMTCk7DQotDQotICAgIGludAkJCQkJCUdldEluZGlyZWN0VHlwZShGWF9EV09SRCBvYmpudW0pOw0KLQ0KLSAgICBGWF9EV09SRAkJCQlBZGRJbmRpcmVjdE9iamVjdChDUERGX09iamVjdCogcE9iaik7DQotDQotICAgIHZvaWQJCQkJCVJlbGVhc2VJbmRpcmVjdE9iamVjdChGWF9EV09SRCBvYmpudW0pOw0KLQ0KLSAgICB2b2lkCQkJCQlJbnNlcnRJbmRpcmVjdE9iamVjdChGWF9EV09SRCBvYmpudW0sIENQREZfT2JqZWN0KiBwT2JqKTsNCi0NCi0gICAgRlhfRFdPUkQJCQkJR2V0TGFzdE9iak51bSgpIGNvbnN0Ow0KLQ0KLSAgICBGWF9QT1NJVElPTgkJCQlHZXRTdGFydFBvc2l0aW9uKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fSW5kaXJlY3RPYmpzLkdldFN0YXJ0UG9zaXRpb24oKTsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJCQlHZXROZXh0QXNzb2MoRlhfUE9TSVRJT04mIHJQb3MsIEZYX0RXT1JEJiBvYmpudW0sIENQREZfT2JqZWN0KiYgcE9iamVjdCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgbV9JbmRpcmVjdE9ianMuR2V0TmV4dEFzc29jKHJQb3MsICh2b2lkKiYpb2JqbnVtLCAodm9pZComKXBPYmplY3QpOw0KLSAgICB9DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBDRlhfTWFwUHRyVG9QdHIJCQltX0luZGlyZWN0T2JqczsNCi0NCi0gICAgSVBERl9Eb2NQYXJzZXIqCQkJbV9wUGFyc2VyOw0KLQ0KLSAgICBGWF9EV09SRAkJCQltX0xhc3RPYmpOdW07DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9GUERGX09CSkVDVFNfCisjZGVmaW5lIF9GUERGX09CSkVDVFNfCisjaWZuZGVmIF9GWENSVF9FWFRFTlNJT05fCisjaW5jbHVkZSAiLi4vZnhjcnQvZnhfZXh0LmgiCisjZW5kaWYKK2NsYXNzIENQREZfRG9jdW1lbnQ7CitjbGFzcyBDUERGX0luZGlyZWN0T2JqZWN0czsKK2NsYXNzIENQREZfTnVsbDsKK2NsYXNzIENQREZfQm9vbGVhbjsKK2NsYXNzIENQREZfTnVtYmVyOworY2xhc3MgQ1BERl9TdHJpbmc7CitjbGFzcyBDUERGX1N0cmVhbTsKK2NsYXNzIENQREZfU3RyZWFtQWNjOworY2xhc3MgQ1BERl9TdHJlYW1GaWx0ZXI7CitjbGFzcyBDUERGX0FycmF5OworY2xhc3MgQ1BERl9EaWN0aW9uYXJ5OworY2xhc3MgQ1BERl9SZWZlcmVuY2U7CitjbGFzcyBJUERGX0RvY1BhcnNlcjsKK2NsYXNzIElGWF9GaWxlUmVhZDsKK2NsYXNzIENQREZfQ3J5cHRvSGFuZGxlcjsKKyNkZWZpbmUgUERGT0JKX0lOVkFMSUQJCTAKKyNkZWZpbmUJUERGT0JKX0JPT0xFQU4JCTEKKyNkZWZpbmUgUERGT0JKX05VTUJFUgkJMgorI2RlZmluZSBQREZPQkpfU1RSSU5HCQkzCisjZGVmaW5lIFBERk9CSl9OQU1FCQkJNAorI2RlZmluZSBQREZPQkpfQVJSQVkJCTUKKyNkZWZpbmUgUERGT0JKX0RJQ1RJT05BUlkJNgorI2RlZmluZSBQREZPQkpfU1RSRUFNCQk3CisjZGVmaW5lIFBERk9CSl9OVUxMCQkJOAorI2RlZmluZSBQREZPQkpfUkVGRVJFTkNFCTkKK3R5cGVkZWYgSUZYX0ZpbGVTdHJlYW0qICgqRlBERl9MUEZDbG9uZVN0cmVhbUNhbGxiYWNrKShDUERGX1N0cmVhbSAqcFN0cmVhbSwgRlhfTFBWT0lEIHBVc2VyRGF0YSk7CitjbGFzcyBDUERGX09iamVjdCA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBpbnQJCQkJCQlHZXRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX1R5cGU7CisgICAgfQorCisgICAgRlhfRFdPUkQJCQkJR2V0T2JqTnVtKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX09iak51bTsKKyAgICB9CisKKyAgICBGWF9CT09MCQkJCQlJc0lkZW50aWNhbChDUERGX09iamVjdCogcE9iaikgY29uc3Q7CisKKyAgICBDUERGX09iamVjdCoJCQlDbG9uZShGWF9CT09MIGJEaXJlY3QgPSBGQUxTRSkgY29uc3Q7CisKKyAgICBDUERGX09iamVjdCoJCQlDbG9uZVJlZihDUERGX0luZGlyZWN0T2JqZWN0cyogcE9ianMpIGNvbnN0OworCisgICAgQ1BERl9PYmplY3QqCQkJR2V0RGlyZWN0KCkgY29uc3Q7CisKKyAgICB2b2lkCQkJCQlSZWxlYXNlKCk7CisKKyAgICBDRlhfQnl0ZVN0cmluZwkJCUdldFN0cmluZygpIGNvbnN0OworCisgICAgQ0ZYX0J5dGVTdHJpbmdDCQkJR2V0Q29uc3RTdHJpbmcoKSBjb25zdDsKKworICAgIENGWF9XaWRlU3RyaW5nCQkJR2V0VW5pY29kZVRleHQoQ0ZYX0NoYXJNYXAqIHBDaGFyTWFwID0gTlVMTCkgY29uc3Q7CisKKyAgICBGWF9GTE9BVAkJCQlHZXROdW1iZXIoKSBjb25zdDsKKworICAgIEZYX0ZMT0FUCQkJCUdldE51bWJlcjE2KCkgY29uc3Q7CisKKyAgICBpbnQJCQkJCQlHZXRJbnRlZ2VyKCkgY29uc3Q7CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCQlHZXREaWN0KCkgY29uc3Q7CisKKyAgICBDUERGX0FycmF5KgkJCQlHZXRBcnJheSgpIGNvbnN0OworCisgICAgdm9pZAkJCQkJU2V0U3RyaW5nKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIpOworCisgICAgdm9pZAkJCQkJU2V0VW5pY29kZVRleHQoRlhfTFBDV1NUUiBwVW5pY29kZXMsIGludCBsZW4gPSAtMSk7CisKKyAgICBpbnQJCQkJCQlHZXREaXJlY3RUeXBlKCkgY29uc3Q7CisKKyAgICBGWF9CT09MCQkJCQlJc01vZGlmaWVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgRlhfRFdPUkQJCQkJbV9UeXBlOworICAgIENQREZfT2JqZWN0KCkKKyAgICB7CisgICAgICAgIG1fT2JqTnVtID0gMDsKKyAgICB9CisKKyAgICBGWF9EV09SRCAJCQkJbV9PYmpOdW07CisKKyAgICB2b2lkCQkJCQlEZXN0cm95KCk7CisKKworICAgIH5DUERGX09iamVjdCgpIHt9CisgICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9JbmRpcmVjdE9iamVjdHM7CisgICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9QYXJzZXI7CisgICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9TeW50YXhQYXJzZXI7Citwcml2YXRlOgorICAgIENQREZfT2JqZWN0KGNvbnN0IENQREZfT2JqZWN0JiBzcmMpIHt9CisgICAgQ1BERl9PYmplY3QqIENsb25lSW50ZXJuYWwoRlhfQk9PTCBiRGlyZWN0LCBDRlhfTWFwUHRyVG9QdHIqIHZpc2l0ZWQpIGNvbnN0OworfTsKK2NsYXNzIENQREZfQm9vbGVhbiA6IHB1YmxpYyBDUERGX09iamVjdAoreworcHVibGljOgorCisgICAgc3RhdGljIENQREZfQm9vbGVhbioJQ3JlYXRlKEZYX0JPT0wgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfQm9vbGVhbih2YWx1ZSk7CisgICAgfQorCisgICAgQ1BERl9Cb29sZWFuKCkKKyAgICB7CisgICAgICAgIG1fVHlwZSA9IFBERk9CSl9CT09MRUFOOworICAgIH0KKworICAgIENQREZfQm9vbGVhbihGWF9CT09MIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9UeXBlID0gUERGT0JKX0JPT0xFQU47CisgICAgICAgIG1fYlZhbHVlID0gdmFsdWU7CisgICAgfQorCisgICAgRlhfQk9PTAkJCQkJSWRlbnRpY2FsKENQREZfQm9vbGVhbiogcE90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYlZhbHVlID09IHBPdGhlci0+bV9iVmFsdWU7CisgICAgfQorcHJvdGVjdGVkOgorCisgICAgRlhfQk9PTAkJCQkJbV9iVmFsdWU7CisgICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9PYmplY3Q7Cit9OworY2xhc3MgQ1BERl9OdW1iZXIgOiBwdWJsaWMgQ1BERl9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIHN0YXRpYyBDUERGX051bWJlcioJCUNyZWF0ZShpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfTnVtYmVyKHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQ1BERl9OdW1iZXIqCQlDcmVhdGUoRlhfRkxPQVQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfTnVtYmVyKHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQ1BERl9OdW1iZXIqCQlDcmVhdGUoRlhfQlNUUiBzdHIpCisgICAgeworICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfTnVtYmVyKHN0cik7CisgICAgfQorCisgICAgc3RhdGljIENQREZfTnVtYmVyKgkJQ3JlYXRlKEZYX0JPT0wgYkludGVnZXIsIHZvaWQqIHBEYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX051bWJlcihiSW50ZWdlciwgcERhdGEpOworICAgIH0KKworICAgIENQREZfTnVtYmVyKCkKKyAgICB7CisgICAgICAgIG1fVHlwZSA9IFBERk9CSl9OVU1CRVI7CisgICAgfQorCisgICAgQ1BERl9OdW1iZXIoRlhfQk9PTCBiSW50ZWdlciwgdm9pZCogcERhdGEpOworCisgICAgQ1BERl9OdW1iZXIoaW50IHZhbHVlKTsKKworICAgIENQREZfTnVtYmVyKEZYX0ZMT0FUIHZhbHVlKTsKKworICAgIENQREZfTnVtYmVyKEZYX0JTVFIgc3RyKTsKKworICAgIEZYX0JPT0wJCQkJCUlkZW50aWNhbChDUERGX051bWJlciogcE90aGVyKSBjb25zdDsKKworICAgIENGWF9CeXRlU3RyaW5nCQkJR2V0U3RyaW5nKCkgY29uc3Q7CisKKyAgICB2b2lkCQkJCQlTZXRTdHJpbmcoRlhfQlNUUiBzdHIpOworCisgICAgRlhfQk9PTAkJCQkJSXNJbnRlZ2VyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JJbnRlZ2VyOworICAgIH0KKworICAgIGludAkJCQkJCUdldEludGVnZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYkludGVnZXIgPyBtX0ludGVnZXIgOiAoaW50KW1fRmxvYXQ7CisgICAgfQorCisgICAgRlhfRkxPQVQJCQkJR2V0TnVtYmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JJbnRlZ2VyID8gKEZYX0ZMT0FUKW1fSW50ZWdlciA6IG1fRmxvYXQ7CisgICAgfQorCisgICAgdm9pZAkJCQkJU2V0TnVtYmVyKEZYX0ZMT0FUIHZhbHVlKTsKKworICAgIEZYX0ZMT0FUCQkJR2V0TnVtYmVyMTYoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE51bWJlcigpOworICAgIH0KKworICAgIEZYX0ZMT0FUCQkJCUdldEZsb2F0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JJbnRlZ2VyID8gKEZYX0ZMT0FUKW1fSW50ZWdlciA6IG1fRmxvYXQ7CisgICAgfQorcHJvdGVjdGVkOgorCisgICAgRlhfQk9PTAkJCQkJbV9iSW50ZWdlcjsKKworICAgIHVuaW9uIHsKKworICAgICAgICBpbnQJCQkJCW1fSW50ZWdlcjsKKworICAgICAgICBGWF9GTE9BVAkJCW1fRmxvYXQ7CisgICAgfTsKKyAgICBmcmllbmQgY2xhc3MJCQlDUERGX09iamVjdDsKK307CitjbGFzcyBDUERGX1N0cmluZyA6IHB1YmxpYyBDUERGX09iamVjdAoreworcHVibGljOgorCisgICAgc3RhdGljIENQREZfU3RyaW5nKgkJQ3JlYXRlKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIsIEZYX0JPT0wgYkhleCA9IEZBTFNFKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX1N0cmluZyhzdHIsIGJIZXgpOworICAgIH0KKworICAgIHN0YXRpYyBDUERGX1N0cmluZyoJCUNyZWF0ZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX1N0cmluZyhzdHIpOworICAgIH0KKworICAgIENQREZfU3RyaW5nKCkKKyAgICB7CisgICAgICAgIG1fVHlwZSA9IFBERk9CSl9TVFJJTkc7CisgICAgICAgIG1fYkhleCA9IEZBTFNFOworICAgIH0KKworICAgIENQREZfU3RyaW5nKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIsIEZYX0JPT0wgYkhleCA9IEZBTFNFKSA6IG1fU3RyaW5nKHN0cikKKyAgICB7CisgICAgICAgIG1fVHlwZSA9IFBERk9CSl9TVFJJTkc7CisgICAgICAgIG1fYkhleCA9IGJIZXg7CisgICAgfQorCisgICAgQ1BERl9TdHJpbmcoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cik7CisKKyAgICBDRlhfQnl0ZVN0cmluZyYJCQlHZXRTdHJpbmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fU3RyaW5nOworICAgIH0KKworICAgIEZYX0JPT0wJCQkJCUlkZW50aWNhbChDUERGX1N0cmluZyogcE90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fU3RyaW5nID09IHBPdGhlci0+bV9TdHJpbmc7CisgICAgfQorCisgICAgRlhfQk9PTAkJCQkJSXNIZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYkhleDsKKyAgICB9Citwcm90ZWN0ZWQ6CisKKyAgICBDRlhfQnl0ZVN0cmluZwkJCW1fU3RyaW5nOworCisgICAgRlhfQk9PTAkJCQkJbV9iSGV4OworICAgIGZyaWVuZCBjbGFzcwkJCUNQREZfT2JqZWN0OworfTsKK2NsYXNzIENQREZfTmFtZSA6IHB1YmxpYyBDUERGX09iamVjdAoreworcHVibGljOgorCisgICAgc3RhdGljIENQREZfTmFtZSoJCUNyZWF0ZShjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX05hbWUoc3RyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQ1BERl9OYW1lKgkJQ3JlYXRlKEZYX0JTVFIgc3RyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX05hbWUoc3RyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQ1BERl9OYW1lKgkJQ3JlYXRlKEZYX0xQQ1NUUiBzdHIpCisgICAgeworICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfTmFtZShzdHIpOworICAgIH0KKworICAgIENQREZfTmFtZShjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyKSA6IG1fTmFtZShzdHIpCisgICAgeworICAgICAgICBtX1R5cGUgPSBQREZPQkpfTkFNRTsKKyAgICB9CisKKyAgICBDUERGX05hbWUoRlhfQlNUUiBzdHIpIDogbV9OYW1lKHN0cikKKyAgICB7CisgICAgICAgIG1fVHlwZSA9IFBERk9CSl9OQU1FOworICAgIH0KKworICAgIENQREZfTmFtZShGWF9MUENTVFIgc3RyKSA6IG1fTmFtZShzdHIpCisgICAgeworICAgICAgICBtX1R5cGUgPSBQREZPQkpfTkFNRTsKKyAgICB9CisKKyAgICBDRlhfQnl0ZVN0cmluZyYJCQlHZXRTdHJpbmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fTmFtZTsKKyAgICB9CisKKyAgICBGWF9CT09MCQkJCQlJZGVudGljYWwoQ1BERl9OYW1lKiBwT3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9OYW1lID09IHBPdGhlci0+bV9OYW1lOworICAgIH0KK3Byb3RlY3RlZDoKKworICAgIENGWF9CeXRlU3RyaW5nCQkJbV9OYW1lOworICAgIGZyaWVuZCBjbGFzcwkJCUNQREZfT2JqZWN0OworfTsKK2NsYXNzIENQREZfQXJyYXkgOiBwdWJsaWMgQ1BERl9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIHN0YXRpYyBDUERGX0FycmF5KgkJQ3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBGWF9ORVcgQ1BERl9BcnJheSgpOworICAgIH0KKworICAgIENQREZfQXJyYXkoKQorICAgIHsKKyAgICAgICAgbV9UeXBlID0gUERGT0JKX0FSUkFZOworICAgIH0KKworICAgIEZYX0RXT1JECQkJCUdldENvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX09iamVjdHMuR2V0U2l6ZSgpOworICAgIH0KKworICAgIENQREZfT2JqZWN0KgkJCUdldEVsZW1lbnQoRlhfRFdPUkQgaW5kZXgpIGNvbnN0OworCisgICAgQ1BERl9PYmplY3QqCQkJR2V0RWxlbWVudFZhbHVlKEZYX0RXT1JEIGluZGV4KSBjb25zdDsKKworCisKKyAgICBDRlhfQWZmaW5lTWF0cml4CQlHZXRNYXRyaXgoKTsKKworICAgIENGWF9GbG9hdFJlY3QJCQlHZXRSZWN0KCk7CisKKworCisKKyAgICBDRlhfQnl0ZVN0cmluZwkJCUdldFN0cmluZyhGWF9EV09SRCBpbmRleCkgY29uc3Q7CisKKyAgICBDRlhfQnl0ZVN0cmluZ0MJCQlHZXRDb25zdFN0cmluZyhGWF9EV09SRCBpbmRleCkgY29uc3Q7CisKKyAgICBpbnQJCQkJCQlHZXRJbnRlZ2VyKEZYX0RXT1JEIGluZGV4KSBjb25zdDsKKworICAgIEZYX0ZMT0FUCQkJCUdldE51bWJlcihGWF9EV09SRCBpbmRleCkgY29uc3Q7CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCQlHZXREaWN0KEZYX0RXT1JEIGluZGV4KSBjb25zdDsKKworICAgIENQREZfU3RyZWFtKgkJCUdldFN0cmVhbShGWF9EV09SRCBpbmRleCkgY29uc3Q7CisKKyAgICBDUERGX0FycmF5KgkJCQlHZXRBcnJheShGWF9EV09SRCBpbmRleCkgY29uc3Q7CisKKyAgICBGWF9GTE9BVAkJCQlHZXRGbG9hdChGWF9EV09SRCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBHZXROdW1iZXIoaW5kZXgpOworICAgIH0KKworCisKKworICAgIHZvaWQJCQkJCVNldEF0KEZYX0RXT1JEIGluZGV4LCBDUERGX09iamVjdCogcE9iaiwgQ1BERl9JbmRpcmVjdE9iamVjdHMqIHBPYmpzID0gTlVMTCk7CisKKworICAgIHZvaWQJCQkJCUluc2VydEF0KEZYX0RXT1JEIGluZGV4LCBDUERGX09iamVjdCogcE9iaiwgQ1BERl9JbmRpcmVjdE9iamVjdHMqIHBPYmpzID0gTlVMTCk7CisKKyAgICB2b2lkCQkJCQlSZW1vdmVBdChGWF9EV09SRCBpbmRleCk7CisKKworICAgIHZvaWQJCQkJCUFkZChDUERGX09iamVjdCogcE9iaiwgQ1BERl9JbmRpcmVjdE9iamVjdHMqIHBPYmpzID0gTlVMTCk7CisKKworCisgICAgdm9pZAkJCQkJQWRkTnVtYmVyKEZYX0ZMT0FUIGYpOworCisgICAgdm9pZAkJCQkJQWRkSW50ZWdlcihpbnQgaSk7CisKKyAgICB2b2lkCQkJCQlBZGRTdHJpbmcoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cik7CisKKyAgICB2b2lkCQkJCQlBZGROYW1lKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIpOworCisgICAgdm9pZAkJCQkJQWRkUmVmZXJlbmNlKENQREZfSW5kaXJlY3RPYmplY3RzKiBwRG9jLCBGWF9EV09SRCBvYmpudW0pOworCisgICAgdm9pZAkJCQkJQWRkUmVmZXJlbmNlKENQREZfSW5kaXJlY3RPYmplY3RzKiBwRG9jLCBDUERGX09iamVjdCogb2JqKQorICAgIHsKKyAgICAgICAgQWRkUmVmZXJlbmNlKHBEb2MsIG9iai0+R2V0T2JqTnVtKCkpOworICAgIH0KKworCisgICAgRlhfRkxPQVQJCQlHZXROdW1iZXIxNihGWF9EV09SRCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBHZXROdW1iZXIoaW5kZXgpOworICAgIH0KKworICAgIHZvaWQJCQkJCUFkZE51bWJlcjE2KEZYX0ZMT0FUIHZhbHVlKQorICAgIHsKKyAgICAgICAgQWRkTnVtYmVyKHZhbHVlKTsKKyAgICB9CisKKyAgICBGWF9CT09MCQkJCQlJZGVudGljYWwoQ1BERl9BcnJheSogcE90aGVyKSBjb25zdDsKK3Byb3RlY3RlZDoKKworICAgIH5DUERGX0FycmF5KCk7CisKKyAgICBDRlhfUHRyQXJyYXkJCQltX09iamVjdHM7CisgICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9PYmplY3Q7Cit9OworY2xhc3MgQ1BERl9EaWN0aW9uYXJ5IDogcHVibGljIENQREZfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBzdGF0aWMgQ1BERl9EaWN0aW9uYXJ5KglDcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX0RpY3Rpb25hcnkoKTsKKyAgICB9CisKKyAgICBDUERGX0RpY3Rpb25hcnkoKQorICAgIHsKKyAgICAgICAgbV9UeXBlID0gUERGT0JKX0RJQ1RJT05BUlk7CisgICAgfQorCisKKworICAgIENQREZfT2JqZWN0KgkJCUdldEVsZW1lbnQoRlhfQlNUUiBrZXkpIGNvbnN0OworCisgICAgQ1BERl9PYmplY3QqCQkJR2V0RWxlbWVudFZhbHVlKEZYX0JTVFIga2V5KSBjb25zdDsKKworCisKKworCisgICAgQ0ZYX0J5dGVTdHJpbmcJCQlHZXRTdHJpbmcoRlhfQlNUUiBrZXkpIGNvbnN0OworCisgICAgQ0ZYX0J5dGVTdHJpbmdDCQkJR2V0Q29uc3RTdHJpbmcoRlhfQlNUUiBrZXkpIGNvbnN0OworCisgICAgQ0ZYX0J5dGVTdHJpbmcJCQlHZXRTdHJpbmcoRlhfQlNUUiBrZXksIEZYX0JTVFIgZGVmYXVsdF9zdHIpIGNvbnN0OworCisgICAgQ0ZYX0J5dGVTdHJpbmdDCQkJR2V0Q29uc3RTdHJpbmcoRlhfQlNUUiBrZXksIEZYX0JTVFIgZGVmYXVsdF9zdHIpIGNvbnN0OworCisgICAgQ0ZYX1dpZGVTdHJpbmcJCQlHZXRVbmljb2RlVGV4dChGWF9CU1RSIGtleSwgQ0ZYX0NoYXJNYXAqIHBDaGFyTWFwID0gTlVMTCkgY29uc3Q7CisKKyAgICBpbnQJCQkJCQlHZXRJbnRlZ2VyKEZYX0JTVFIga2V5KSBjb25zdDsKKworICAgIGludAkJCQkJCUdldEludGVnZXIoRlhfQlNUUiBrZXksIGludCBkZWZhdWx0X2ludCkgY29uc3Q7CisKKyAgICBGWF9CT09MCQkJCQlHZXRCb29sZWFuKEZYX0JTVFIga2V5LCBGWF9CT09MIGJEZWZhdWx0ID0gRkFMU0UpIGNvbnN0OworCisgICAgRlhfRkxPQVQJCQkJR2V0TnVtYmVyKEZYX0JTVFIga2V5KSBjb25zdDsKKworICAgIENQREZfRGljdGlvbmFyeSoJCUdldERpY3QoRlhfQlNUUiBrZXkpIGNvbnN0OworCisgICAgQ1BERl9TdHJlYW0qCQkJR2V0U3RyZWFtKEZYX0JTVFIga2V5KSBjb25zdDsKKworICAgIENQREZfQXJyYXkqCQkJCUdldEFycmF5KEZYX0JTVFIga2V5KSBjb25zdDsKKworICAgIENGWF9GbG9hdFJlY3QJCQlHZXRSZWN0KEZYX0JTVFIga2V5KSBjb25zdDsKKworICAgIENGWF9BZmZpbmVNYXRyaXgJCUdldE1hdHJpeChGWF9CU1RSIGtleSkgY29uc3Q7CisKKyAgICBGWF9GTE9BVAkJCQlHZXRGbG9hdChGWF9CU1RSIGtleSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBHZXROdW1iZXIoa2V5KTsKKyAgICB9CisKKworICAgIEZYX0JPT0wJCQkJCUtleUV4aXN0KEZYX0JTVFIga2V5KSBjb25zdDsKKworICAgIEZYX1BPU0lUSU9OCQkJCUdldFN0YXJ0UG9zKCkgY29uc3Q7CisKKyAgICBDUERGX09iamVjdCoJCQlHZXROZXh0RWxlbWVudChGWF9QT1NJVElPTiYgcG9zLCBDRlhfQnl0ZVN0cmluZyYga2V5KSBjb25zdDsKKworICAgIHZvaWQJCQkJCVNldEF0KEZYX0JTVFIga2V5LCBDUERGX09iamVjdCogcE9iaiwgQ1BERl9JbmRpcmVjdE9iamVjdHMqIHBPYmpzID0gTlVMTCk7CisKKworCisgICAgdm9pZAkJCQkJU2V0QXROYW1lKEZYX0JTVFIga2V5LCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgbmFtZSk7CisKKworICAgIHZvaWQJCQkJCVNldEF0U3RyaW5nKEZYX0JTVFIga2V5LCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyaW5nKTsKKworCisgICAgdm9pZAkJCQkJU2V0QXRJbnRlZ2VyKEZYX0JTVFIga2V5LCBpbnQgaSk7CisKKworICAgIHZvaWQJCQkJCVNldEF0TnVtYmVyKEZYX0JTVFIga2V5LCBGWF9GTE9BVCBmKTsKKworICAgIHZvaWQJCQkJCVNldEF0UmVmZXJlbmNlKEZYX0JTVFIga2V5LCBDUERGX0luZGlyZWN0T2JqZWN0cyogcERvYywgRlhfRFdPUkQgb2JqbnVtKTsKKworICAgIHZvaWQJCQkJCVNldEF0UmVmZXJlbmNlKEZYX0JTVFIga2V5LCBDUERGX0luZGlyZWN0T2JqZWN0cyogcERvYywgQ1BERl9PYmplY3QqIG9iaikKKyAgICB7CisgICAgICAgIFNldEF0UmVmZXJlbmNlKGtleSwgcERvYywgb2JqLT5HZXRPYmpOdW0oKSk7CisgICAgfQorCisgICAgdm9pZAkJCQkJQWRkUmVmZXJlbmNlKEZYX0JTVFIga2V5LCBDUERGX0luZGlyZWN0T2JqZWN0cyogcERvYywgRlhfRFdPUkQgb2JqbnVtKTsKKworICAgIHZvaWQJCQkJCUFkZFJlZmVyZW5jZShGWF9CU1RSIGtleSwgQ1BERl9JbmRpcmVjdE9iamVjdHMqIHBEb2MsIENQREZfT2JqZWN0KiBvYmopCisgICAgeworICAgICAgICBBZGRSZWZlcmVuY2Uoa2V5LCBwRG9jLCBvYmotPkdldE9iak51bSgpKTsKKyAgICB9CisKKyAgICB2b2lkCQkJCQlTZXRBdFJlY3QoRlhfQlNUUiBrZXksIGNvbnN0IENGWF9GbG9hdFJlY3QmIHJlY3QpOworCisgICAgdm9pZAkJCQkJU2V0QXRNYXRyaXgoRlhfQlNUUiBrZXksIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgmIG1hdHJpeCk7CisKKyAgICB2b2lkCQkJCQlTZXRBdEJvb2xlYW4oRlhfQlNUUiBrZXksIEZYX0JPT0wgYlZhbHVlKTsKKworCisKKyAgICB2b2lkCQkJCQlSZW1vdmVBdChGWF9CU1RSIGtleSk7CisKKworICAgIHZvaWQJCQkJCVJlcGxhY2VLZXkoRlhfQlNUUiBvbGRrZXksIEZYX0JTVFIgbmV3a2V5KTsKKworICAgIEZYX0JPT0wJCQkJCUlkZW50aWNhbChDUERGX0RpY3Rpb25hcnkqIHBEaWN0KSBjb25zdDsKKworICAgIGludAkJCQkJCUdldENvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX01hcC5HZXRDb3VudCgpOworICAgIH0KKworICAgIHZvaWQJCQkJCUFkZFZhbHVlKEZYX0JTVFIga2V5LCBDUERGX09iamVjdCogcE9iaik7Citwcm90ZWN0ZWQ6CisKKyAgICB+Q1BERl9EaWN0aW9uYXJ5KCk7CisKKyAgICBDRlhfQ01hcEJ5dGVTdHJpbmdUb1B0cgltX01hcDsKKworICAgIGZyaWVuZCBjbGFzcwkJCUNQREZfT2JqZWN0OworfTsKK2NsYXNzIENQREZfU3RyZWFtIDogcHVibGljIENQREZfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBzdGF0aWMgQ1BERl9TdHJlYW0qCQlDcmVhdGUoRlhfTFBCWVRFIHBEYXRhLCBGWF9EV09SRCBzaXplLCBDUERGX0RpY3Rpb25hcnkqIHBEaWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX1N0cmVhbShwRGF0YSwgc2l6ZSwgcERpY3QpOworICAgIH0KKworICAgIENQREZfU3RyZWFtKEZYX0xQQllURSBwRGF0YSwgRlhfRFdPUkQgc2l6ZSwgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCk7CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCQlHZXREaWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BEaWN0OworICAgIH0KKworICAgIHZvaWQJCQkJCVNldERhdGEoRlhfTFBDQllURSBwRGF0YSwgRlhfRFdPUkQgc2l6ZSwgRlhfQk9PTCBiQ29tcHJlc3NlZCwgRlhfQk9PTCBiS2VlcEJ1Zik7CisKKyAgICB2b2lkCQkJCQlJbml0U3RyZWFtKEZYX0JZVEUqIHBEYXRhLCBGWF9EV09SRCBzaXplLCBDUERGX0RpY3Rpb25hcnkqIHBEaWN0KTsKKworICAgIHZvaWQJCQkJCUluaXRTdHJlYW0oSUZYX0ZpbGVSZWFkICpwRmlsZSwgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCk7CisKKyAgICBGWF9CT09MCQkJCQlJZGVudGljYWwoQ1BERl9TdHJlYW0qIHBPdGhlcikgY29uc3Q7CisKKyAgICBDUERGX1N0cmVhbUZpbHRlcioJCUdldFN0cmVhbUZpbHRlcihGWF9CT09MIGJSYXcgPSBGQUxTRSkgY29uc3Q7CisKKworCisgICAgRlhfRFdPUkQJCQkJR2V0UmF3U2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9kd1NpemU7CisgICAgfQorCisgICAgRlhfQk9PTAkJCQkJUmVhZFJhd0RhdGEoRlhfRklMRVNJWkUgc3RhcnRfcG9zLCBGWF9MUEJZVEUgcEJ1ZiwgRlhfRFdPUkQgYnVmX3NpemUpIGNvbnN0OworCisKKyAgICBGWF9CT09MCQkJCQlJc01lbW9yeUJhc2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0dlbk51bSA9PSAoRlhfRFdPUkQpIC0gMTsKKyAgICB9CisKKyAgICBDUERGX1N0cmVhbSoJCQlDbG9uZShGWF9CT09MIGJEaXJlY3QsIEZQREZfTFBGQ2xvbmVTdHJlYW1DYWxsYmFjayBscGZDYWxsYmFjaywgRlhfTFBWT0lEIHBVc2VyRGF0YSkgY29uc3Q7Citwcm90ZWN0ZWQ6CisKKyAgICB+Q1BERl9TdHJlYW0oKTsKKworICAgIENQREZfRGljdGlvbmFyeSoJCW1fcERpY3Q7CisKKyAgICBGWF9EV09SRAkJCQltX2R3U2l6ZTsKKworICAgIEZYX0RXT1JECQkJCW1fR2VuTnVtOworCisgICAgdW5pb24geworCisgICAgICAgIEZYX0xQQllURQkJCW1fcERhdGFCdWY7CisKKyAgICAgICAgSUZYX0ZpbGVSZWFkKgkJbV9wRmlsZTsKKyAgICB9OworCisgICAgRlhfRklMRVNJWkUJCQkJbV9GaWxlT2Zmc2V0OworCisgICAgQ1BERl9DcnlwdG9IYW5kbGVyKgkJbV9wQ3J5cHRvSGFuZGxlcjsKKworICAgIHZvaWQJCQkJCUluaXRTdHJlYW0oQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCk7CisgICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9PYmplY3Q7CisgICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9TdHJlYW1BY2M7CisgICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9BdHRhY2htZW50QWNjOworfTsKK2NsYXNzIENQREZfU3RyZWFtQWNjIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENQREZfU3RyZWFtQWNjKCk7CisKKyAgICB+Q1BERl9TdHJlYW1BY2MoKTsKKworICAgIHZvaWQJCQkJCUxvYWRBbGxEYXRhKGNvbnN0IENQREZfU3RyZWFtKiBwU3RyZWFtLCBGWF9CT09MIGJSYXdBY2Nlc3MgPSBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBlc3RpbWF0ZWRfc2l6ZSA9IDAsIEZYX0JPT0wgYkltYWdlQWNjID0gRkFMU0UpOworCisgICAgY29uc3QgQ1BERl9TdHJlYW0qCQlHZXRTdHJlYW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcFN0cmVhbTsKKyAgICB9CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCQlHZXREaWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BTdHJlYW0tPkdldERpY3QoKTsKKyAgICB9CisKKyAgICBGWF9MUENCWVRFCQkJCUdldERhdGEoKSBjb25zdDsKKworICAgIEZYX0RXT1JECQkJCUdldFNpemUoKSBjb25zdDsKKworICAgIEZYX0xQQllURQkJCQlEZXRhY2hEYXRhKCk7CisKKyAgICBjb25zdCBDRlhfQnl0ZVN0cmluZyYJR2V0SW1hZ2VEZWNvZGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX0ltYWdlRGVjb2RlcjsKKyAgICB9CisKKyAgICBjb25zdCBDUERGX0RpY3Rpb25hcnkqCUdldEltYWdlUGFyYW0oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcEltYWdlUGFyYW07CisgICAgfQorcHJvdGVjdGVkOgorCisgICAgRlhfTFBCWVRFCQkJCW1fcERhdGE7CisKKyAgICBGWF9EV09SRAkJCQltX2R3U2l6ZTsKKworICAgIEZYX0JPT0wJCQkJCW1fYk5ld0J1ZjsKKworICAgIENGWF9CeXRlU3RyaW5nCQkJbV9JbWFnZURlY29kZXI7CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCQltX3BJbWFnZVBhcmFtOworCisgICAgY29uc3QgQ1BERl9TdHJlYW0qCQltX3BTdHJlYW07CisKKyAgICBGWF9MUEJZVEUJCQkJbV9wU3JjRGF0YTsKK307CitDRlhfRGF0YUZpbHRlciogRlBERl9DcmVhdGVGaWx0ZXIoRlhfQlNUUiBuYW1lLCBjb25zdCBDUERGX0RpY3Rpb25hcnkqIHBQYXJhbSwgaW50IHdpZHRoID0gMCwgaW50IGhlaWdodCA9IDApOworI2RlZmluZSBGUERGX0ZJTFRFUl9CVUZGRVJfU0laRQkJMjA0ODAKK2NsYXNzIENQREZfU3RyZWFtRmlsdGVyIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIH5DUERGX1N0cmVhbUZpbHRlcigpOworCisgICAgRlhfRFdPUkQJCQlSZWFkQmxvY2soRlhfTFBCWVRFIGJ1ZmZlciwgRlhfRFdPUkQgc2l6ZSk7CisKKyAgICBGWF9EV09SRAkJCUdldFNyY1BvcygpCisgICAgeworICAgICAgICByZXR1cm4gbV9TcmNPZmZzZXQ7CisgICAgfQorCisgICAgY29uc3QgQ1BERl9TdHJlYW0qCUdldFN0cmVhbSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9wU3RyZWFtOworICAgIH0KK3Byb3RlY3RlZDoKKworICAgIENQREZfU3RyZWFtRmlsdGVyKCkge30KKworICAgIEZYX0RXT1JECQkJUmVhZExlZnRPdmVyKEZYX0xQQllURSBidWZmZXIsIEZYX0RXT1JEIGJ1Zl9zaXplKTsKKworICAgIGNvbnN0IENQREZfU3RyZWFtKgltX3BTdHJlYW07CisKKyAgICBDRlhfRGF0YUZpbHRlcioJCW1fcEZpbHRlcjsKKworICAgIENGWF9CaW5hcnlCdWYqCQltX3BCdWZmZXI7CisKKyAgICBGWF9EV09SRAkJCW1fQnVmT2Zmc2V0OworCisgICAgRlhfRFdPUkQJCQltX1NyY09mZnNldDsKKworICAgIEZYX0JZVEUJCQkJbV9TcmNCdWZmZXJbRlBERl9GSUxURVJfQlVGRkVSX1NJWkVdOworICAgIGZyaWVuZCBjbGFzcyBDUERGX1N0cmVhbTsKK307CitjbGFzcyBDUERGX051bGwgOiBwdWJsaWMgQ1BERl9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIHN0YXRpYyBDUERGX051bGwqCQlDcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX051bGwoKTsKKyAgICB9CisKKyAgICBDUERGX051bGwoKQorICAgIHsKKyAgICAgICAgbV9UeXBlID0gUERGT0JKX05VTEw7CisgICAgfQorfTsKK2NsYXNzIENQREZfUmVmZXJlbmNlIDogcHVibGljIENQREZfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBzdGF0aWMgQ1BERl9SZWZlcmVuY2UqCUNyZWF0ZShDUERGX0luZGlyZWN0T2JqZWN0cyogcERvYywgaW50IG9iam51bSkKKyAgICB7CisgICAgICAgIHJldHVybiBGWF9ORVcgQ1BERl9SZWZlcmVuY2UocERvYywgb2JqbnVtKTsKKyAgICB9CisKKyAgICBDUERGX1JlZmVyZW5jZShDUERGX0luZGlyZWN0T2JqZWN0cyogcERvYywgaW50IG9iam51bSkKKyAgICB7CisgICAgICAgIG1fVHlwZSA9IFBERk9CSl9SRUZFUkVOQ0U7CisgICAgICAgIG1fcE9iakxpc3QgPSBwRG9jOworICAgICAgICBtX1JlZk9iak51bSA9IG9iam51bTsKKyAgICB9CisKKyAgICBDUERGX0luZGlyZWN0T2JqZWN0cyoJR2V0T2JqTGlzdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wT2JqTGlzdDsKKyAgICB9CisKKyAgICBGWF9EV09SRAkJCQlHZXRSZWZPYmpOdW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fUmVmT2JqTnVtOworICAgIH0KKworICAgIHZvaWQJCQkJCVNldFJlZihDUERGX0luZGlyZWN0T2JqZWN0cyogcERvYywgRlhfRFdPUkQgb2JqbnVtKTsKKworICAgIEZYX0JPT0wJCQkJCUlkZW50aWNhbChDUERGX1JlZmVyZW5jZSogcE90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fUmVmT2JqTnVtID09IHBPdGhlci0+bV9SZWZPYmpOdW07CisgICAgfQorcHJvdGVjdGVkOgorCisgICAgQ1BERl9JbmRpcmVjdE9iamVjdHMqCW1fcE9iakxpc3Q7CisKKyAgICBGWF9EV09SRAkJCQltX1JlZk9iak51bTsKKyAgICBmcmllbmQgY2xhc3MJCQlDUERGX09iamVjdDsKK307CitjbGFzcyBDUERGX0luZGlyZWN0T2JqZWN0cyA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDUERGX0luZGlyZWN0T2JqZWN0cyhJUERGX0RvY1BhcnNlciogcFBhcnNlcik7CisKKyAgICB+Q1BERl9JbmRpcmVjdE9iamVjdHMoKTsKKworICAgIENQREZfT2JqZWN0KgkJCUdldEluZGlyZWN0T2JqZWN0KEZYX0RXT1JEIG9iam51bSwgc3RydWN0IFBBUlNFX0NPTlRFWFQqIHBDb250ZXh0ID0gTlVMTCk7CisKKyAgICBpbnQJCQkJCQlHZXRJbmRpcmVjdFR5cGUoRlhfRFdPUkQgb2JqbnVtKTsKKworICAgIEZYX0RXT1JECQkJCUFkZEluZGlyZWN0T2JqZWN0KENQREZfT2JqZWN0KiBwT2JqKTsKKworICAgIHZvaWQJCQkJCVJlbGVhc2VJbmRpcmVjdE9iamVjdChGWF9EV09SRCBvYmpudW0pOworCisgICAgdm9pZAkJCQkJSW5zZXJ0SW5kaXJlY3RPYmplY3QoRlhfRFdPUkQgb2JqbnVtLCBDUERGX09iamVjdCogcE9iaik7CisKKyAgICBGWF9EV09SRAkJCQlHZXRMYXN0T2JqTnVtKCkgY29uc3Q7CisKKyAgICBGWF9QT1NJVElPTgkJCQlHZXRTdGFydFBvc2l0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0luZGlyZWN0T2Jqcy5HZXRTdGFydFBvc2l0aW9uKCk7CisgICAgfQorCisgICAgdm9pZAkJCQkJR2V0TmV4dEFzc29jKEZYX1BPU0lUSU9OJiByUG9zLCBGWF9EV09SRCYgb2JqbnVtLCBDUERGX09iamVjdComIHBPYmplY3QpIGNvbnN0CisgICAgeworICAgICAgICBtX0luZGlyZWN0T2Jqcy5HZXROZXh0QXNzb2MoclBvcywgKHZvaWQqJilvYmpudW0sICh2b2lkKiYpcE9iamVjdCk7CisgICAgfQorcHJvdGVjdGVkOgorCisgICAgQ0ZYX01hcFB0clRvUHRyCQkJbV9JbmRpcmVjdE9ianM7CisKKyAgICBJUERGX0RvY1BhcnNlcioJCQltX3BQYXJzZXI7CisKKyAgICBGWF9EV09SRAkJCQltX0xhc3RPYmpOdW07Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2UuaCBiL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oCmluZGV4IDI5YjhjNjguLjNmZWE4NjYgMTAwNjQ0Ci0tLSBhL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oCisrKyBiL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oCkBAIC0xLDI0OSArMSwyNDkgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0ZQREZfUEFHRV8NCi0jZGVmaW5lIF9GUERGX1BBR0VfDQotI2lmbmRlZiBfRlBERl9QQVJTRVJfDQotI2luY2x1ZGUgImZwZGZfcGFyc2VyLmgiDQotI2VuZGlmDQotI2lmbmRlZiBfRlBERl9SRVNPVVJDRV8NCi0jaW5jbHVkZSAiZnBkZl9yZXNvdXJjZS5oIg0KLSNlbmRpZg0KLSNpZm5kZWYgX0ZYX0RJQl9IXw0KLSNpbmNsdWRlICIuLi9meGdlL2Z4X2RpYi5oIg0KLSNlbmRpZg0KLWNsYXNzIENQREZfUGFnZU9iamVjdHM7DQotY2xhc3MgQ1BERl9QYWdlOw0KLWNsYXNzIENQREZfRm9ybTsNCi1jbGFzcyBDUERGX1BhcnNlT3B0aW9uczsNCi1jbGFzcyBDUERGX1BhZ2VPYmplY3Q7DQotY2xhc3MgQ1BERl9QYWdlUmVuZGVyQ2FjaGU7DQotY2xhc3MgQ1BERl9TdHJlYW1GaWx0ZXI7DQotY2xhc3MgQ1BERl9BbGxTdGF0ZXM7DQotY2xhc3MgQ1BERl9Db250ZW50UGFyc2VyOw0KLWNsYXNzIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjsNCi1jbGFzcyBDUERGX1Jlc291cmNlTmFtaW5nOw0KLSNkZWZpbmUgUERGVFJBTlNfR1JPVVAJCQkweDAxMDANCi0jZGVmaW5lIFBERlRSQU5TX0lTT0xBVEVECQkweDAyMDANCi0jZGVmaW5lIFBERlRSQU5TX0tOT0NLT1VUCQkweDA0MDANCi0jZGVmaW5lIFBERl9DT05URU5UX05PVF9QQVJTRUQJMA0KLSNkZWZpbmUgUERGX0NPTlRFTlRfUEFSU0lORwkJMQ0KLSNkZWZpbmUgUERGX0NPTlRFTlRfUEFSU0VECQkyDQotY2xhc3MgQ1BERl9QYWdlT2JqZWN0cyA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9QYWdlT2JqZWN0cyhGWF9CT09MIGJSZWxlYXNlTWVtYmVycyA9IFRSVUUpOw0KLQ0KLSAgICB+Q1BERl9QYWdlT2JqZWN0cygpOw0KLQ0KLQ0KLQ0KLQ0KLSAgICB2b2lkCQkJCUNvbnRpbnVlUGFyc2UoSUZYX1BhdXNlKiBwUGF1c2UpOw0KLQ0KLSAgICBpbnQJCQkJCUdldFBhcnNlU3RhdGUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9QYXJzZVN0YXRlOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wJCQkJSXNQYXJzZWQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9QYXJzZVN0YXRlID09IFBERl9DT05URU5UX1BBUlNFRDsNCi0gICAgfQ0KLQ0KLSAgICBpbnQJCQkJCUVzdGltYXRlUGFyc2VQcm9ncmVzcygpIGNvbnN0Ow0KLQ0KLQ0KLQ0KLQ0KLSAgICBGWF9QT1NJVElPTgkJCUdldEZpcnN0T2JqZWN0UG9zaXRpb24oKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9PYmplY3RMaXN0LkdldEhlYWRQb3NpdGlvbigpOw0KLSAgICB9DQotDQotICAgIEZYX1BPU0lUSU9OCQkJR2V0TGFzdE9iamVjdFBvc2l0aW9uKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fT2JqZWN0TGlzdC5HZXRUYWlsUG9zaXRpb24oKTsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX1BhZ2VPYmplY3QqCUdldE5leHRPYmplY3QoRlhfUE9TSVRJT04mIHBvcykgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIChDUERGX1BhZ2VPYmplY3QqKW1fT2JqZWN0TGlzdC5HZXROZXh0KHBvcyk7DQotICAgIH0NCi0NCi0gICAgQ1BERl9QYWdlT2JqZWN0KglHZXRQcmV2T2JqZWN0KEZYX1BPU0lUSU9OJiBwb3MpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiAoQ1BERl9QYWdlT2JqZWN0KiltX09iamVjdExpc3QuR2V0UHJldihwb3MpOw0KLSAgICB9DQotDQotICAgIENQREZfUGFnZU9iamVjdCoJR2V0T2JqZWN0QXQoRlhfUE9TSVRJT04gcG9zKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gKENQREZfUGFnZU9iamVjdCopbV9PYmplY3RMaXN0LkdldEF0KHBvcyk7DQotICAgIH0NCi0NCi0gICAgRlhfRFdPUkQJCQlDb3VudE9iamVjdHMoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9PYmplY3RMaXN0LkdldENvdW50KCk7DQotICAgIH0NCi0NCi0gICAgaW50CQkJCQlHZXRPYmplY3RJbmRleChDUERGX1BhZ2VPYmplY3QqIHBPYmopIGNvbnN0Ow0KLQ0KLSAgICBDUERGX1BhZ2VPYmplY3QqCUdldE9iamVjdEJ5SW5kZXgoaW50IGluZGV4KSBjb25zdDsNCi0NCi0NCi0NCi0NCi0NCi0gICAgRlhfUE9TSVRJT04JCQlJbnNlcnRPYmplY3QoRlhfUE9TSVRJT04gcG9zSW5zZXJ0QWZ0ZXIsIENQREZfUGFnZU9iamVjdCogcE5ld09iamVjdCk7DQotDQotICAgIHZvaWQJCQkJVHJhbnNmb3JtKGNvbnN0IENGWF9BZmZpbmVNYXRyaXgmIG1hdHJpeCk7DQotDQotICAgIEZYX0JPT0wJCQkJQmFja2dyb3VuZEFscGhhTmVlZGVkKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fYkJhY2tncm91bmRBbHBoYU5lZWRlZDsNCi0gICAgfQ0KLQ0KLSAgICBDRlhfRmxvYXRSZWN0CQlDYWxjQm91bmRpbmdCb3goKSBjb25zdDsNCi0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KgltX3BGb3JtRGljdDsNCi0NCi0gICAgQ1BERl9TdHJlYW0qCQltX3BGb3JtU3RyZWFtOw0KLQ0KLSAgICBDUERGX0RvY3VtZW50KgkJbV9wRG9jdW1lbnQ7DQotDQotICAgIENQREZfRGljdGlvbmFyeSoJbV9wUGFnZVJlc291cmNlczsNCi0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KgltX3BSZXNvdXJjZXM7DQotDQotICAgIENGWF9GbG9hdFJlY3QJCW1fQkJveDsNCi0NCi0gICAgaW50CQkJCQltX1RyYW5zcGFyZW5jeTsNCi0NCi1wcm90ZWN0ZWQ6DQotICAgIGZyaWVuZCBjbGFzcwkJQ1BERl9Db250ZW50UGFyc2VyOw0KLSAgICBmcmllbmQgY2xhc3MJCUNQREZfU3RyZWFtQ29udGVudFBhcnNlcjsNCi0gICAgZnJpZW5kIGNsYXNzCQlDUERGX0FsbFN0YXRlczsNCi0NCi0gICAgQ0ZYX1B0ckxpc3QJCQltX09iamVjdExpc3Q7DQotDQotICAgIEZYX0JPT0wJCQkJbV9iQmFja2dyb3VuZEFscGhhTmVlZGVkOw0KLQ0KLSAgICBGWF9CT09MCQkJCW1fYlJlbGVhc2VNZW1iZXJzOw0KLSAgICB2b2lkCQkJCUxvYWRUcmFuc0luZm8oKTsNCi0gICAgdm9pZCAgICAgICAgICAgICAgICBDbGVhckNhY2hlT2JqZWN0cygpOw0KLQ0KLSAgICBDUERGX0NvbnRlbnRQYXJzZXIqCW1fcFBhcnNlcjsNCi0NCi0gICAgRlhfQk9PTAkJCQltX1BhcnNlU3RhdGU7DQotfTsNCi1jbGFzcyBDUERGX1BhZ2UgOiBwdWJsaWMgQ1BERl9QYWdlT2JqZWN0cywgcHVibGljIENGWF9Qcml2YXRlRGF0YQ0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfUGFnZSgpOw0KLQ0KLSAgICB+Q1BERl9QYWdlKCk7DQotDQotICAgIHZvaWQJCQkJTG9hZChDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIENQREZfRGljdGlvbmFyeSogcFBhZ2VEaWN0LCBGWF9CT09MIGJQYWdlQ2FjaGUgPSBUUlVFKTsNCi0NCi0gICAgdm9pZAkJCQlTdGFydFBhcnNlKENQREZfUGFyc2VPcHRpb25zKiBwT3B0aW9ucyA9IE5VTEwsIEZYX0JPT0wgYlJlUGFyc2UgPSBGQUxTRSk7DQotDQotICAgIHZvaWQJCQkJUGFyc2VDb250ZW50KENQREZfUGFyc2VPcHRpb25zKiBwT3B0aW9ucyA9IE5VTEwsIEZYX0JPT0wgYlJlUGFyc2UgPSBGQUxTRSk7DQotDQotICAgIHZvaWQJCQkJR2V0RGlzcGxheU1hdHJpeChDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgsIGludCB4UG9zLCBpbnQgeVBvcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4U2l6ZSwgaW50IHlTaXplLCBpbnQgaVJvdGF0ZSkgY29uc3Q7DQotDQotICAgIEZYX0ZMT0FUCQkJR2V0UGFnZVdpZHRoKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fUGFnZVdpZHRoOw0KLSAgICB9DQotDQotICAgIEZYX0ZMT0FUCQkJR2V0UGFnZUhlaWdodCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX1BhZ2VIZWlnaHQ7DQotICAgIH0NCi0NCi0gICAgQ0ZYX0Zsb2F0UmVjdAkJR2V0UGFnZUJCb3goKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9CQm94Ow0KLSAgICB9DQotDQotICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgmCUdldFBhZ2VNYXRyaXgoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9QYWdlTWF0cml4Ow0KLSAgICB9DQotDQotICAgIENQREZfT2JqZWN0KgkJR2V0UGFnZUF0dHIoRlhfQlNUUiBuYW1lKSBjb25zdDsNCi0NCi0NCi0NCi0gICAgQ1BERl9QYWdlUmVuZGVyQ2FjaGUqCUdldFJlbmRlckNhY2hlKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcFBhZ2VSZW5kZXI7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCQlDbGVhclJlbmRlckNhY2hlKCk7DQotDQotcHJvdGVjdGVkOg0KLSAgICBmcmllbmQgY2xhc3MJCUNQREZfQ29udGVudFBhcnNlcjsNCi0NCi0gICAgRlhfRkxPQVQJCQltX1BhZ2VXaWR0aDsNCi0NCi0gICAgRlhfRkxPQVQJCQltX1BhZ2VIZWlnaHQ7DQotDQotICAgIENGWF9BZmZpbmVNYXRyaXgJbV9QYWdlTWF0cml4Ow0KLQ0KLSAgICBDUERGX1BhZ2VSZW5kZXJDYWNoZSoJbV9wUGFnZVJlbmRlcjsNCi19Ow0KLWNsYXNzIENQREZfUGFyc2VPcHRpb25zIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDUERGX1BhcnNlT3B0aW9ucygpOw0KLQ0KLSAgICBGWF9CT09MCQkJCW1fYlRleHRPbmx5Ow0KLQ0KLSAgICBGWF9CT09MCQkJCW1fYk1hcmtlZENvbnRlbnQ7DQotDQotICAgIEZYX0JPT0wJCQkJbV9iU2VwYXJhdGVGb3JtOw0KLQ0KLSAgICBGWF9CT09MCQkJCW1fYkRlY29kZUlubGluZUltYWdlOw0KLX07DQotY2xhc3MgQ1BERl9Gb3JtIDogcHVibGljIENQREZfUGFnZU9iamVjdHMNCi17DQotcHVibGljOg0KLQ0KLSAgICBDUERGX0Zvcm0oQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDUERGX0RpY3Rpb25hcnkqIHBQYWdlUmVzb3VyY2VzLCBDUERGX1N0cmVhbSogcEZvcm1TdHJlYW0sIENQREZfRGljdGlvbmFyeSogcFBhcmVudFJlc291cmNlcyA9IE5VTEwpOw0KLQ0KLSAgICB+Q1BERl9Gb3JtKCk7DQotDQotICAgIHZvaWQJCQkJU3RhcnRQYXJzZShDUERGX0FsbFN0YXRlcyogcEdyYXBoaWNTdGF0ZXMsICBDRlhfQWZmaW5lTWF0cml4KiBwUGFyZW50TWF0cml4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9UeXBlM0NoYXIqIHBUeXBlM0NoYXIsIENQREZfUGFyc2VPcHRpb25zKiBwT3B0aW9ucywgaW50IGxldmVsID0gMCk7DQotDQotICAgIHZvaWQJCQkJUGFyc2VDb250ZW50KENQREZfQWxsU3RhdGVzKiBwR3JhcGhpY1N0YXRlcywgQ0ZYX0FmZmluZU1hdHJpeCogcFBhcmVudE1hdHJpeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9UeXBlM0NoYXIqIHBUeXBlM0NoYXIsIENQREZfUGFyc2VPcHRpb25zKiBwT3B0aW9ucywgaW50IGxldmVsID0gMCk7DQotDQotICAgIENQREZfRm9ybSoJCQlDbG9uZSgpIGNvbnN0Ow0KLX07DQotY2xhc3MgQ1BERl9QYWdlQ29udGVudEdlbmVyYXRlIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDUERGX1BhZ2VDb250ZW50R2VuZXJhdGUoQ1BERl9QYWdlKiBwUGFnZSk7DQotICAgIH5DUERGX1BhZ2VDb250ZW50R2VuZXJhdGUoKTsNCi0gICAgRlhfQk9PTCBJbnNlcnRQYWdlT2JqZWN0KENQREZfUGFnZU9iamVjdCogcFBhZ2VPYmplY3QpOw0KLSAgICB2b2lkIEdlbmVyYXRlQ29udGVudCgpOw0KLSAgICB2b2lkIFRyYW5zZm9ybUNvbnRlbnQoQ0ZYX01hdHJpeCYgbWF0cml4KTsNCi1wcm90ZWN0ZWQ6DQotICAgIHZvaWQgICAgICAgICAgICBQcm9jZXNzSW1hZ2UoQ0ZYX0J5dGVUZXh0QnVmJiBidWYsIENQREZfSW1hZ2VPYmplY3QqIHBJbWFnZU9iaik7DQotICAgIHZvaWQgICAgICAgICAgICBQcm9jZXNzRm9ybShDRlhfQnl0ZVRleHRCdWYmIGJ1ZiwgRlhfTFBDQllURSBkYXRhLCBGWF9EV09SRCBzaXplLCBDRlhfTWF0cml4JiBtYXRyaXgpOw0KLSAgICBDRlhfQnl0ZVN0cmluZyAgUmVhbGl6ZVJlc291cmNlKENQREZfT2JqZWN0KiBwUmVzb3VyY2VPYmosIGNvbnN0IEZYX0NIQVIqIHN6VHlwZSk7DQotcHJpdmF0ZToNCi0gICAgQ1BERl9QYWdlKiAgICAgIG1fcFBhZ2U7DQotICAgIENQREZfRG9jdW1lbnQqICBtX3BEb2N1bWVudDsNCi0gICAgQ0ZYX1B0ckFycmF5ICAgIG1fcGFnZU9iamVjdHM7DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9GUERGX1BBR0VfCisjZGVmaW5lIF9GUERGX1BBR0VfCisjaWZuZGVmIF9GUERGX1BBUlNFUl8KKyNpbmNsdWRlICJmcGRmX3BhcnNlci5oIgorI2VuZGlmCisjaWZuZGVmIF9GUERGX1JFU09VUkNFXworI2luY2x1ZGUgImZwZGZfcmVzb3VyY2UuaCIKKyNlbmRpZgorI2lmbmRlZiBfRlhfRElCX0hfCisjaW5jbHVkZSAiLi4vZnhnZS9meF9kaWIuaCIKKyNlbmRpZgorY2xhc3MgQ1BERl9QYWdlT2JqZWN0czsKK2NsYXNzIENQREZfUGFnZTsKK2NsYXNzIENQREZfRm9ybTsKK2NsYXNzIENQREZfUGFyc2VPcHRpb25zOworY2xhc3MgQ1BERl9QYWdlT2JqZWN0OworY2xhc3MgQ1BERl9QYWdlUmVuZGVyQ2FjaGU7CitjbGFzcyBDUERGX1N0cmVhbUZpbHRlcjsKK2NsYXNzIENQREZfQWxsU3RhdGVzOworY2xhc3MgQ1BERl9Db250ZW50UGFyc2VyOworY2xhc3MgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOworY2xhc3MgQ1BERl9SZXNvdXJjZU5hbWluZzsKKyNkZWZpbmUgUERGVFJBTlNfR1JPVVAJCQkweDAxMDAKKyNkZWZpbmUgUERGVFJBTlNfSVNPTEFURUQJCTB4MDIwMAorI2RlZmluZSBQREZUUkFOU19LTk9DS09VVAkJMHgwNDAwCisjZGVmaW5lIFBERl9DT05URU5UX05PVF9QQVJTRUQJMAorI2RlZmluZSBQREZfQ09OVEVOVF9QQVJTSU5HCQkxCisjZGVmaW5lIFBERl9DT05URU5UX1BBUlNFRAkJMgorY2xhc3MgQ1BERl9QYWdlT2JqZWN0cyA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDUERGX1BhZ2VPYmplY3RzKEZYX0JPT0wgYlJlbGVhc2VNZW1iZXJzID0gVFJVRSk7CisKKyAgICB+Q1BERl9QYWdlT2JqZWN0cygpOworCisKKworCisgICAgdm9pZAkJCQlDb250aW51ZVBhcnNlKElGWF9QYXVzZSogcFBhdXNlKTsKKworICAgIGludAkJCQkJR2V0UGFyc2VTdGF0ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9QYXJzZVN0YXRlOworICAgIH0KKworICAgIEZYX0JPT0wJCQkJSXNQYXJzZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fUGFyc2VTdGF0ZSA9PSBQREZfQ09OVEVOVF9QQVJTRUQ7CisgICAgfQorCisgICAgaW50CQkJCQlFc3RpbWF0ZVBhcnNlUHJvZ3Jlc3MoKSBjb25zdDsKKworCisKKworICAgIEZYX1BPU0lUSU9OCQkJR2V0Rmlyc3RPYmplY3RQb3NpdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9PYmplY3RMaXN0LkdldEhlYWRQb3NpdGlvbigpOworICAgIH0KKworICAgIEZYX1BPU0lUSU9OCQkJR2V0TGFzdE9iamVjdFBvc2l0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX09iamVjdExpc3QuR2V0VGFpbFBvc2l0aW9uKCk7CisgICAgfQorCisgICAgQ1BERl9QYWdlT2JqZWN0KglHZXROZXh0T2JqZWN0KEZYX1BPU0lUSU9OJiBwb3MpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKENQREZfUGFnZU9iamVjdCopbV9PYmplY3RMaXN0LkdldE5leHQocG9zKTsKKyAgICB9CisKKyAgICBDUERGX1BhZ2VPYmplY3QqCUdldFByZXZPYmplY3QoRlhfUE9TSVRJT04mIHBvcykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoQ1BERl9QYWdlT2JqZWN0KiltX09iamVjdExpc3QuR2V0UHJldihwb3MpOworICAgIH0KKworICAgIENQREZfUGFnZU9iamVjdCoJR2V0T2JqZWN0QXQoRlhfUE9TSVRJT04gcG9zKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChDUERGX1BhZ2VPYmplY3QqKW1fT2JqZWN0TGlzdC5HZXRBdChwb3MpOworICAgIH0KKworICAgIEZYX0RXT1JECQkJQ291bnRPYmplY3RzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX09iamVjdExpc3QuR2V0Q291bnQoKTsKKyAgICB9CisKKyAgICBpbnQJCQkJCUdldE9iamVjdEluZGV4KENQREZfUGFnZU9iamVjdCogcE9iaikgY29uc3Q7CisKKyAgICBDUERGX1BhZ2VPYmplY3QqCUdldE9iamVjdEJ5SW5kZXgoaW50IGluZGV4KSBjb25zdDsKKworCisKKworCisgICAgRlhfUE9TSVRJT04JCQlJbnNlcnRPYmplY3QoRlhfUE9TSVRJT04gcG9zSW5zZXJ0QWZ0ZXIsIENQREZfUGFnZU9iamVjdCogcE5ld09iamVjdCk7CisKKyAgICB2b2lkCQkJCVRyYW5zZm9ybShjb25zdCBDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpOworCisgICAgRlhfQk9PTAkJCQlCYWNrZ3JvdW5kQWxwaGFOZWVkZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYkJhY2tncm91bmRBbHBoYU5lZWRlZDsKKyAgICB9CisKKyAgICBDRlhfRmxvYXRSZWN0CQlDYWxjQm91bmRpbmdCb3goKSBjb25zdDsKKworICAgIENQREZfRGljdGlvbmFyeSoJbV9wRm9ybURpY3Q7CisKKyAgICBDUERGX1N0cmVhbSoJCW1fcEZvcm1TdHJlYW07CisKKyAgICBDUERGX0RvY3VtZW50KgkJbV9wRG9jdW1lbnQ7CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCW1fcFBhZ2VSZXNvdXJjZXM7CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCW1fcFJlc291cmNlczsKKworICAgIENGWF9GbG9hdFJlY3QJCW1fQkJveDsKKworICAgIGludAkJCQkJbV9UcmFuc3BhcmVuY3k7CisKK3Byb3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MJCUNQREZfQ29udGVudFBhcnNlcjsKKyAgICBmcmllbmQgY2xhc3MJCUNQREZfU3RyZWFtQ29udGVudFBhcnNlcjsKKyAgICBmcmllbmQgY2xhc3MJCUNQREZfQWxsU3RhdGVzOworCisgICAgQ0ZYX1B0ckxpc3QJCQltX09iamVjdExpc3Q7CisKKyAgICBGWF9CT09MCQkJCW1fYkJhY2tncm91bmRBbHBoYU5lZWRlZDsKKworICAgIEZYX0JPT0wJCQkJbV9iUmVsZWFzZU1lbWJlcnM7CisgICAgdm9pZAkJCQlMb2FkVHJhbnNJbmZvKCk7CisgICAgdm9pZCAgICAgICAgICAgICAgICBDbGVhckNhY2hlT2JqZWN0cygpOworCisgICAgQ1BERl9Db250ZW50UGFyc2VyKgltX3BQYXJzZXI7CisKKyAgICBGWF9CT09MCQkJCW1fUGFyc2VTdGF0ZTsKK307CitjbGFzcyBDUERGX1BhZ2UgOiBwdWJsaWMgQ1BERl9QYWdlT2JqZWN0cywgcHVibGljIENGWF9Qcml2YXRlRGF0YQoreworcHVibGljOgorCisgICAgQ1BERl9QYWdlKCk7CisKKyAgICB+Q1BERl9QYWdlKCk7CisKKyAgICB2b2lkCQkJCUxvYWQoQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDUERGX0RpY3Rpb25hcnkqIHBQYWdlRGljdCwgRlhfQk9PTCBiUGFnZUNhY2hlID0gVFJVRSk7CisKKyAgICB2b2lkCQkJCVN0YXJ0UGFyc2UoQ1BERl9QYXJzZU9wdGlvbnMqIHBPcHRpb25zID0gTlVMTCwgRlhfQk9PTCBiUmVQYXJzZSA9IEZBTFNFKTsKKworICAgIHZvaWQJCQkJUGFyc2VDb250ZW50KENQREZfUGFyc2VPcHRpb25zKiBwT3B0aW9ucyA9IE5VTEwsIEZYX0JPT0wgYlJlUGFyc2UgPSBGQUxTRSk7CisKKyAgICB2b2lkCQkJCUdldERpc3BsYXlNYXRyaXgoQ0ZYX0FmZmluZU1hdHJpeCYgbWF0cml4LCBpbnQgeFBvcywgaW50IHlQb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4U2l6ZSwgaW50IHlTaXplLCBpbnQgaVJvdGF0ZSkgY29uc3Q7CisKKyAgICBGWF9GTE9BVAkJCUdldFBhZ2VXaWR0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9QYWdlV2lkdGg7CisgICAgfQorCisgICAgRlhfRkxPQVQJCQlHZXRQYWdlSGVpZ2h0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX1BhZ2VIZWlnaHQ7CisgICAgfQorCisgICAgQ0ZYX0Zsb2F0UmVjdAkJR2V0UGFnZUJCb3goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fQkJveDsKKyAgICB9CisKKyAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4JglHZXRQYWdlTWF0cml4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX1BhZ2VNYXRyaXg7CisgICAgfQorCisgICAgQ1BERl9PYmplY3QqCQlHZXRQYWdlQXR0cihGWF9CU1RSIG5hbWUpIGNvbnN0OworCisKKworICAgIENQREZfUGFnZVJlbmRlckNhY2hlKglHZXRSZW5kZXJDYWNoZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wUGFnZVJlbmRlcjsKKyAgICB9CisKKyAgICB2b2lkCQkJCUNsZWFyUmVuZGVyQ2FjaGUoKTsKKworcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcwkJQ1BERl9Db250ZW50UGFyc2VyOworCisgICAgRlhfRkxPQVQJCQltX1BhZ2VXaWR0aDsKKworICAgIEZYX0ZMT0FUCQkJbV9QYWdlSGVpZ2h0OworCisgICAgQ0ZYX0FmZmluZU1hdHJpeAltX1BhZ2VNYXRyaXg7CisKKyAgICBDUERGX1BhZ2VSZW5kZXJDYWNoZSoJbV9wUGFnZVJlbmRlcjsKK307CitjbGFzcyBDUERGX1BhcnNlT3B0aW9ucyA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDUERGX1BhcnNlT3B0aW9ucygpOworCisgICAgRlhfQk9PTAkJCQltX2JUZXh0T25seTsKKworICAgIEZYX0JPT0wJCQkJbV9iTWFya2VkQ29udGVudDsKKworICAgIEZYX0JPT0wJCQkJbV9iU2VwYXJhdGVGb3JtOworCisgICAgRlhfQk9PTAkJCQltX2JEZWNvZGVJbmxpbmVJbWFnZTsKK307CitjbGFzcyBDUERGX0Zvcm0gOiBwdWJsaWMgQ1BERl9QYWdlT2JqZWN0cworeworcHVibGljOgorCisgICAgQ1BERl9Gb3JtKENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZVJlc291cmNlcywgQ1BERl9TdHJlYW0qIHBGb3JtU3RyZWFtLCBDUERGX0RpY3Rpb25hcnkqIHBQYXJlbnRSZXNvdXJjZXMgPSBOVUxMKTsKKworICAgIH5DUERGX0Zvcm0oKTsKKworICAgIHZvaWQJCQkJU3RhcnRQYXJzZShDUERGX0FsbFN0YXRlcyogcEdyYXBoaWNTdGF0ZXMsICBDRlhfQWZmaW5lTWF0cml4KiBwUGFyZW50TWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX1R5cGUzQ2hhciogcFR5cGUzQ2hhciwgQ1BERl9QYXJzZU9wdGlvbnMqIHBPcHRpb25zLCBpbnQgbGV2ZWwgPSAwKTsKKworICAgIHZvaWQJCQkJUGFyc2VDb250ZW50KENQREZfQWxsU3RhdGVzKiBwR3JhcGhpY1N0YXRlcywgQ0ZYX0FmZmluZU1hdHJpeCogcFBhcmVudE1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX1R5cGUzQ2hhciogcFR5cGUzQ2hhciwgQ1BERl9QYXJzZU9wdGlvbnMqIHBPcHRpb25zLCBpbnQgbGV2ZWwgPSAwKTsKKworICAgIENQREZfRm9ybSoJCQlDbG9uZSgpIGNvbnN0OworfTsKK2NsYXNzIENQREZfUGFnZUNvbnRlbnRHZW5lcmF0ZSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ1BERl9QYWdlQ29udGVudEdlbmVyYXRlKENQREZfUGFnZSogcFBhZ2UpOworICAgIH5DUERGX1BhZ2VDb250ZW50R2VuZXJhdGUoKTsKKyAgICBGWF9CT09MIEluc2VydFBhZ2VPYmplY3QoQ1BERl9QYWdlT2JqZWN0KiBwUGFnZU9iamVjdCk7CisgICAgdm9pZCBHZW5lcmF0ZUNvbnRlbnQoKTsKKyAgICB2b2lkIFRyYW5zZm9ybUNvbnRlbnQoQ0ZYX01hdHJpeCYgbWF0cml4KTsKK3Byb3RlY3RlZDoKKyAgICB2b2lkICAgICAgICAgICAgUHJvY2Vzc0ltYWdlKENGWF9CeXRlVGV4dEJ1ZiYgYnVmLCBDUERGX0ltYWdlT2JqZWN0KiBwSW1hZ2VPYmopOworICAgIHZvaWQgICAgICAgICAgICBQcm9jZXNzRm9ybShDRlhfQnl0ZVRleHRCdWYmIGJ1ZiwgRlhfTFBDQllURSBkYXRhLCBGWF9EV09SRCBzaXplLCBDRlhfTWF0cml4JiBtYXRyaXgpOworICAgIENGWF9CeXRlU3RyaW5nICBSZWFsaXplUmVzb3VyY2UoQ1BERl9PYmplY3QqIHBSZXNvdXJjZU9iaiwgY29uc3QgRlhfQ0hBUiogc3pUeXBlKTsKK3ByaXZhdGU6CisgICAgQ1BERl9QYWdlKiAgICAgIG1fcFBhZ2U7CisgICAgQ1BERl9Eb2N1bWVudCogIG1fcERvY3VtZW50OworICAgIENGWF9QdHJBcnJheSAgICBtX3BhZ2VPYmplY3RzOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlb2JqLmggYi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2VvYmouaAppbmRleCAxZTgyNjgwLi45MGUxYjBiIDEwMDY0NAotLS0gYS9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2VvYmouaAorKysgYi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2VvYmouaApAQCAtMSw3MjEgKzEsNzIxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GUERGX1BBR0VPQkpfSF8NCi0jZGVmaW5lIF9GUERGX1BBR0VPQkpfSF8NCi0jaWZuZGVmIF9GUERGX1JFU09VUkNFXw0KLSNpbmNsdWRlICJmcGRmX3Jlc291cmNlLmgiDQotI2VuZGlmDQotI2lmbmRlZiBfRlhfR0VfSF8NCi0jaW5jbHVkZSAiLi4vZnhnZS9meF9nZS5oIg0KLSNlbmRpZg0KLWNsYXNzIENQREZfUGF0aDsNCi1jbGFzcyBDUERGX0NsaXBQYXRoRGF0YTsNCi1jbGFzcyBDUERGX0NsaXBQYXRoOw0KLWNsYXNzIENQREZfQ29sb3JTdGF0ZURhdGE7DQotY2xhc3MgQ1BERl9Db2xvclN0YXRlOw0KLWNsYXNzIENQREZfR3JhcGhTdGF0ZTsNCi1jbGFzcyBDUERGX1RleHRTdGF0ZURhdGE7DQotY2xhc3MgQ1BERl9UZXh0U3RhdGU7DQotY2xhc3MgQ1BERl9HZW5lcmFsU3RhdGVEYXRhOw0KLWNsYXNzIENQREZfR2VuZXJhbFN0YXRlOw0KLWNsYXNzIENQREZfQ29udGVudE1hcmtJdGVtOw0KLWNsYXNzIENQREZfQ29udGVudE1hcms7DQotY2xhc3MgQ1BERl9HcmFwaGljU3RhdGVzOw0KLWNsYXNzIENQREZfUGFnZU9iamVjdDsNCi1jbGFzcyBDUERGX1RleHRPYmplY3Q7DQotY2xhc3MgQ1BERl9QYXRoT2JqZWN0Ow0KLWNsYXNzIENQREZfSW1hZ2VPYmplY3Q7DQotY2xhc3MgQ1BERl9TaGFkaW5nT2JqZWN0Ow0KLWNsYXNzIENQREZfRm9ybU9iamVjdDsNCi1jbGFzcyBDUERGX0lubGluZUltYWdlczsNCi10eXBlZGVmIENGWF9QYXRoRGF0YSBDUERGX1BhdGhEYXRhOw0KLWNsYXNzIENQREZfUGF0aCA6IHB1YmxpYyBDRlhfQ291bnRSZWY8Q0ZYX1BhdGhEYXRhPg0KLXsNCi1wdWJsaWM6DQotDQotDQotDQotDQotICAgIGludAkJCQkJR2V0UG9pbnRDb3VudCgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BPYmplY3QtPm1fUG9pbnRDb3VudDsNCi0gICAgfQ0KLQ0KLSAgICBpbnQJCQkJCUdldEZsYWcoaW50IGluZGV4KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wT2JqZWN0LT5tX3BQb2ludHNbaW5kZXhdLm1fRmxhZzsNCi0gICAgfQ0KLQ0KLSAgICBGWF9GTE9BVAkJCUdldFBvaW50WChpbnQgaW5kZXgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BPYmplY3QtPm1fcFBvaW50c1tpbmRleF0ubV9Qb2ludFg7DQotICAgIH0NCi0NCi0gICAgRlhfRkxPQVQJCQlHZXRQb2ludFkoaW50IGluZGV4KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wT2JqZWN0LT5tX3BQb2ludHNbaW5kZXhdLm1fUG9pbnRZOw0KLSAgICB9DQotDQotDQotDQotDQotICAgIEZYX1BBVEhQT0lOVCoJCUdldFBvaW50cygpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BPYmplY3QtPm1fcFBvaW50czsNCi0gICAgfQ0KLQ0KLQ0KLSAgICBDRlhfRmxvYXRSZWN0CQlHZXRCb3VuZGluZ0JveCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BPYmplY3QtPkdldEJvdW5kaW5nQm94KCk7DQotICAgIH0NCi0NCi0gICAgQ0ZYX0Zsb2F0UmVjdAkJR2V0Qm91bmRpbmdCb3goRlhfRkxPQVQgbGluZV93aWR0aCwgRlhfRkxPQVQgbWl0ZXJfbGltaXQpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BPYmplY3QtPkdldEJvdW5kaW5nQm94KGxpbmVfd2lkdGgsIG1pdGVyX2xpbWl0KTsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJCVRyYW5zZm9ybShjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4KQ0KLSAgICB7DQotICAgICAgICBHZXRNb2RpZnkoKS0+VHJhbnNmb3JtKHBNYXRyaXgpOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJQXBwZW5kKENQREZfUGF0aCBzcmMsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgpDQotICAgIHsNCi0gICAgICAgIG1fcE9iamVjdC0+QXBwZW5kKHNyYy5tX3BPYmplY3QsIHBNYXRyaXgpOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJQXBwZW5kUmVjdChGWF9GTE9BVCBsZWZ0LCBGWF9GTE9BVCBib3R0b20sIEZYX0ZMT0FUIHJpZ2h0LCBGWF9GTE9BVCB0b3ApDQotICAgIHsNCi0gICAgICAgIG1fcE9iamVjdC0+QXBwZW5kUmVjdChsZWZ0LCBib3R0b20sIHJpZ2h0LCB0b3ApOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wJCQkJSXNSZWN0KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcE9iamVjdC0+SXNSZWN0KCk7DQotICAgIH0NCi19Ow0KLWNsYXNzIENQREZfQ2xpcFBhdGhEYXRhIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDUERGX0NsaXBQYXRoRGF0YSgpOw0KLQ0KLSAgICBDUERGX0NsaXBQYXRoRGF0YShjb25zdCBDUERGX0NsaXBQYXRoRGF0YSYpOw0KLQ0KLSAgICB+Q1BERl9DbGlwUGF0aERhdGEoKTsNCi0NCi0gICAgdm9pZAkJCQlTZXRDb3VudChpbnQgcGF0aF9jb3VudCwgaW50IHRleHRfY291bnQpOw0KLXB1YmxpYzoNCi0NCi0gICAgaW50CQkJCQltX1BhdGhDb3VudDsNCi0NCi0gICAgQ1BERl9QYXRoKgkJCW1fcFBhdGhMaXN0Ow0KLQ0KLSAgICBGWF9CWVRFKgkJCW1fcFR5cGVMaXN0Ow0KLQ0KLSAgICBpbnQJCQkJCW1fVGV4dENvdW50Ow0KLQ0KLSAgICBDUERGX1RleHRPYmplY3QqKgltX3BUZXh0TGlzdDsNCi19Ow0KLWNsYXNzIENQREZfQ2xpcFBhdGggOiBwdWJsaWMgQ0ZYX0NvdW50UmVmPENQREZfQ2xpcFBhdGhEYXRhPg0KLXsNCi1wdWJsaWM6DQotDQotICAgIEZYX0RXT1JECQkJR2V0UGF0aENvdW50KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcE9iamVjdC0+bV9QYXRoQ291bnQ7DQotICAgIH0NCi0NCi0gICAgQ1BERl9QYXRoCQkJR2V0UGF0aChpbnQgaSkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcE9iamVjdC0+bV9wUGF0aExpc3RbaV07DQotICAgIH0NCi0NCi0gICAgaW50CQkJCQlHZXRDbGlwVHlwZShpbnQgaSkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcE9iamVjdC0+bV9wVHlwZUxpc3RbaV07DQotICAgIH0NCi0NCi0gICAgRlhfRFdPUkQJCQlHZXRUZXh0Q291bnQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wT2JqZWN0LT5tX1RleHRDb3VudDsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX1RleHRPYmplY3QqCUdldFRleHQoaW50IGkpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BPYmplY3QtPm1fcFRleHRMaXN0W2ldOw0KLSAgICB9DQotDQotICAgIENGWF9GbG9hdFJlY3QJCUdldENsaXBCb3goKSBjb25zdDsNCi0NCi0gICAgdm9pZAkJCQlBcHBlbmRQYXRoKENQREZfUGF0aCBwYXRoLCBpbnQgdHlwZSwgRlhfQk9PTCBiQXV0b01lcmdlKTsNCi0NCi0gICAgdm9pZAkJCQlEZWxldGVQYXRoKGludCBsYXllcl9pbmRleCk7DQotDQotICAgIHZvaWQJCQkJQXBwZW5kVGV4dHMoQ1BERl9UZXh0T2JqZWN0KiogcFRleHRzLCBpbnQgY291bnQpOw0KLQ0KLSAgICB2b2lkCQkJCVRyYW5zZm9ybShjb25zdCBDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpOw0KLX07DQotY2xhc3MgQ1BERl9Db2xvclN0YXRlRGF0YSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9Db2xvclN0YXRlRGF0YSgpIHt9DQotDQotICAgIENQREZfQ29sb3JTdGF0ZURhdGEoY29uc3QgQ1BERl9Db2xvclN0YXRlRGF0YSYgc3JjKTsNCi0NCi0gICAgdm9pZAkJCQlEZWZhdWx0KCk7DQotDQotICAgIENQREZfQ29sb3IJCQltX0ZpbGxDb2xvcjsNCi0NCi0gICAgRlhfRFdPUkQJCQltX0ZpbGxSR0I7DQotDQotICAgIENQREZfQ29sb3IJCQltX1N0cm9rZUNvbG9yOw0KLQ0KLSAgICBGWF9EV09SRAkJCW1fU3Ryb2tlUkdCOw0KLX07DQotY2xhc3MgQ1BERl9Db2xvclN0YXRlIDogcHVibGljIENGWF9Db3VudFJlZjxDUERGX0NvbG9yU3RhdGVEYXRhPg0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfQ29sb3IqCQkJR2V0RmlsbENvbG9yKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcE9iamVjdCA/ICZtX3BPYmplY3QtPm1fRmlsbENvbG9yIDogTlVMTDsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX0NvbG9yKgkJCUdldFN0cm9rZUNvbG9yKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcE9iamVjdCA/ICZtX3BPYmplY3QtPm1fU3Ryb2tlQ29sb3IgOiBOVUxMOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJU2V0RmlsbENvbG9yKENQREZfQ29sb3JTcGFjZSogcENTLCBGWF9GTE9BVCogcFZhbHVlLCBpbnQgblZhbHVlcyk7DQotDQotICAgIHZvaWQJCQkJU2V0U3Ryb2tlQ29sb3IoQ1BERl9Db2xvclNwYWNlKiBwQ1MsIEZYX0ZMT0FUKiBwVmFsdWUsIGludCBuVmFsdWVzKTsNCi0NCi0gICAgdm9pZAkJCQlTZXRGaWxsUGF0dGVybihDUERGX1BhdHRlcm4qIHBhdHRlcm4sIEZYX0ZMT0FUKiBwVmFsdWUsIGludCBuVmFsdWVzKTsNCi0NCi0gICAgdm9pZAkJCQlTZXRTdHJva2VQYXR0ZXJuKENQREZfUGF0dGVybiogcGF0dGVybiwgRlhfRkxPQVQqIHBWYWx1ZSwgaW50IG5WYWx1ZXMpOw0KLXByaXZhdGU6DQotICAgIHZvaWQJCQkJU2V0Q29sb3IoQ1BERl9Db2xvciYgY29sb3IsIEZYX0RXT1JEJiByZ2IsIENQREZfQ29sb3JTcGFjZSogcENTLCBGWF9GTE9BVCogcFZhbHVlLCBpbnQgblZhbHVlcyk7DQotfTsNCi10eXBlZGVmIENGWF9HcmFwaFN0YXRlRGF0YSBDUERGX0dyYXBoU3RhdGVEYXRhOw0KLWNsYXNzIENQREZfR3JhcGhTdGF0ZSA6IHB1YmxpYyBDRlhfQ291bnRSZWY8Q0ZYX0dyYXBoU3RhdGVEYXRhPg0KLXsNCi1wdWJsaWM6DQotfTsNCi1jbGFzcyBDUERGX1RleHRTdGF0ZURhdGEgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfVGV4dFN0YXRlRGF0YSgpOw0KLQ0KLSAgICBDUERGX1RleHRTdGF0ZURhdGEoY29uc3QgQ1BERl9UZXh0U3RhdGVEYXRhJiBzcmMpOw0KLQ0KLSAgICB+Q1BERl9UZXh0U3RhdGVEYXRhKCk7DQotDQotICAgIENQREZfRm9udCoJCQltX3BGb250Ow0KLQ0KLSAgICBGWF9GTE9BVAkJCW1fRm9udFNpemU7DQotDQotICAgIEZYX0ZMT0FUCQkJbV9DaGFyU3BhY2U7DQotDQotICAgIEZYX0ZMT0FUCQkJbV9Xb3JkU3BhY2U7DQotDQotICAgIEZYX0ZMT0FUCQltX01hdHJpeFs0XTsNCi0NCi0gICAgaW50CQkJCQltX1RleHRNb2RlOw0KLQ0KLSAgICBGWF9GTE9BVAkJbV9DVE1bNF07DQotfTsNCi1jbGFzcyBDUERGX1RleHRTdGF0ZSA6IHB1YmxpYyBDRlhfQ291bnRSZWY8Q1BERl9UZXh0U3RhdGVEYXRhPg0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfRm9udCoJCQlHZXRGb250KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcE9iamVjdC0+bV9wRm9udDsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJCVNldEZvbnQoQ1BERl9Gb250KiBwRm9udCk7DQotDQotICAgIEZYX0ZMT0FUCQkJR2V0Rm9udFNpemUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wT2JqZWN0LT5tX0ZvbnRTaXplOw0KLSAgICB9DQotDQotICAgIEZYX0ZMT0FUKgkJCUdldE1hdHJpeCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BPYmplY3QtPm1fTWF0cml4Ow0KLSAgICB9DQotDQotDQotDQotICAgIEZYX0ZMT0FUCQkJR2V0Rm9udFNpemVWKCkgY29uc3Q7DQotDQotICAgIEZYX0ZMT0FUCQkJR2V0Rm9udFNpemVIKCkgY29uc3Q7DQotDQotICAgIEZYX0ZMT0FUCQkJR2V0QmFzZWxpbmVBbmdsZSgpIGNvbnN0Ow0KLQ0KLSAgICBGWF9GTE9BVAkJCUdldFNoZWFyQW5nbGUoKSBjb25zdDsNCi0NCi19Ow0KLWNsYXNzIENQREZfVHJhbnNmZXJGdW5jOw0KLWNsYXNzIENQREZfR2VuZXJhbFN0YXRlRGF0YSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9HZW5lcmFsU3RhdGVEYXRhKCk7DQotDQotICAgIENQREZfR2VuZXJhbFN0YXRlRGF0YShjb25zdCBDUERGX0dlbmVyYWxTdGF0ZURhdGEmIHNyYyk7DQotICAgIH5DUERGX0dlbmVyYWxTdGF0ZURhdGEoKTsNCi0NCi0gICAgdm9pZAkJCQlTZXRCbGVuZE1vZGUoRlhfQlNUUiBibGVuZF9tb2RlKTsNCi0NCi0gICAgY2hhcgkJCQltX0JsZW5kTW9kZVsxNl07DQotDQotICAgIGludAkJCQkJbV9CbGVuZFR5cGU7DQotDQotICAgIENQREZfT2JqZWN0KgkJbV9wU29mdE1hc2s7DQotDQotICAgIEZYX0ZMT0FUCQkJbV9TTWFza01hdHJpeFs2XTsNCi0NCi0gICAgRlhfRkxPQVQJCQltX1N0cm9rZUFscGhhOw0KLQ0KLSAgICBGWF9GTE9BVAkJCW1fRmlsbEFscGhhOw0KLQ0KLSAgICBDUERGX09iamVjdCoJCW1fcFRSOw0KLQ0KLSAgICBDUERGX1RyYW5zZmVyRnVuYyoJbV9wVHJhbnNmZXJGdW5jOw0KLQ0KLSAgICBDRlhfTWF0cml4CQkJbV9NYXRyaXg7DQotDQotICAgIGludAkJCQkJbV9SZW5kZXJJbnRlbnQ7DQotDQotICAgIEZYX0JPT0wJCQkJbV9TdHJva2VBZGp1c3Q7DQotDQotICAgIEZYX0JPT0wJCQkJbV9BbHBoYVNvdXJjZTsNCi0NCi0gICAgRlhfQk9PTAkJCQltX1RleHRLbm9ja291dDsNCi0NCi0gICAgRlhfQk9PTAkJCQltX1N0cm9rZU9QOw0KLQ0KLSAgICBGWF9CT09MCQkJCW1fRmlsbE9QOw0KLQ0KLSAgICBpbnQJCQkJCW1fT1BNb2RlOw0KLQ0KLSAgICBDUERGX09iamVjdCoJCW1fcEJHOw0KLQ0KLSAgICBDUERGX09iamVjdCoJCW1fcFVDUjsNCi0NCi0gICAgQ1BERl9PYmplY3QqCQltX3BIVDsNCi0NCi0gICAgRlhfRkxPQVQJCQltX0ZsYXRuZXNzOw0KLQ0KLSAgICBGWF9GTE9BVAkJCW1fU21vb3RobmVzczsNCi19Ow0KLWNsYXNzIENQREZfR2VuZXJhbFN0YXRlIDogcHVibGljIENGWF9Db3VudFJlZjxDUERGX0dlbmVyYWxTdGF0ZURhdGE+DQotew0KLXB1YmxpYzoNCi0NCi0gICAgdm9pZAkJCQlTZXRSZW5kZXJJbnRlbnQoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHJpKTsNCi0NCi0gICAgaW50CQkJCQlHZXRCbGVuZFR5cGUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wT2JqZWN0ID8gbV9wT2JqZWN0LT5tX0JsZW5kVHlwZSA6IEZYRElCX0JMRU5EX05PUk1BTDsNCi0gICAgfQ0KLQ0KLSAgICBpbnQJCQkJCUdldEFscGhhKEZYX0JPT0wgYlN0cm9rZSkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcE9iamVjdCA/IEZYU1lTX3JvdW5kKChiU3Ryb2tlID8gbV9wT2JqZWN0LT5tX1N0cm9rZUFscGhhIDogbV9wT2JqZWN0LT5tX0ZpbGxBbHBoYSkgKiAyNTUpIDogMjU1Ow0KLSAgICB9DQotfTsNCi1jbGFzcyBDUERGX0NvbnRlbnRNYXJrSXRlbSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgdHlwZWRlZiBlbnVtIHsNCi0gICAgICAgIE5vbmUsDQotICAgICAgICBQcm9wZXJ0aWVzRGljdCwNCi0gICAgICAgIERpcmVjdERpY3QsDQotICAgICAgICBNQ0lEDQotICAgIH0gUGFyYW1UeXBlOw0KLQ0KLSAgICBDUERGX0NvbnRlbnRNYXJrSXRlbSgpOw0KLQ0KLSAgICBDUERGX0NvbnRlbnRNYXJrSXRlbShjb25zdCBDUERGX0NvbnRlbnRNYXJrSXRlbSYgc3JjKTsNCi0NCi0gICAgfkNQREZfQ29udGVudE1hcmtJdGVtKCk7DQotDQotICAgIGlubGluZSBjb25zdCBDRlhfQnl0ZVN0cmluZyYJR2V0TmFtZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX01hcmtOYW1lOw0KLSAgICB9DQotDQotICAgIGlubGluZSBQYXJhbVR5cGUJR2V0UGFyYW1UeXBlKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fUGFyYW1UeXBlOw0KLSAgICB9DQotDQotICAgIGlubGluZSB2b2lkKgkJR2V0UGFyYW0oKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wUGFyYW07DQotICAgIH0NCi0NCi0gICAgaW5saW5lIEZYX0JPT0wJCUhhc01DSUQoKSBjb25zdDsNCi0NCi0gICAgaW5saW5lIHZvaWQJCQlTZXROYW1lKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lKQ0KLSAgICB7DQotICAgICAgICBtX01hcmtOYW1lID0gbmFtZTsNCi0gICAgfQ0KLQ0KLSAgICBpbmxpbmUgdm9pZAkJCVNldFBhcmFtKFBhcmFtVHlwZSB0eXBlLCB2b2lkKiBwYXJhbSkNCi0gICAgew0KLSAgICAgICAgbV9QYXJhbVR5cGUgPSB0eXBlOw0KLSAgICAgICAgbV9wUGFyYW0gPSBwYXJhbTsNCi0gICAgfQ0KLXByaXZhdGU6DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQltX01hcmtOYW1lOw0KLQ0KLSAgICBQYXJhbVR5cGUJCQltX1BhcmFtVHlwZTsNCi0NCi0gICAgdm9pZCoJCQkJbV9wUGFyYW07DQotfTsNCi1jbGFzcyBDUERGX0NvbnRlbnRNYXJrRGF0YSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9Db250ZW50TWFya0RhdGEoKSB7IH0NCi0NCi0gICAgQ1BERl9Db250ZW50TWFya0RhdGEoY29uc3QgQ1BERl9Db250ZW50TWFya0RhdGEmIHNyYyk7DQotDQotICAgIGlubGluZSBpbnQJCQlDb3VudEl0ZW1zKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fTWFya3MuR2V0U2l6ZSgpOw0KLSAgICB9DQotDQotICAgIGlubGluZSBDUERGX0NvbnRlbnRNYXJrSXRlbSYJR2V0SXRlbShpbnQgaW5kZXgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX01hcmtzW2luZGV4XTsNCi0gICAgfQ0KLQ0KLSAgICBpbnQJCQkJCUdldE1DSUQoKSBjb25zdDsNCi0NCi0gICAgdm9pZAkJCQlBZGRNYXJrKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lLCBDUERGX0RpY3Rpb25hcnkqIHBEaWN0LCBGWF9CT09MIGJEaWN0TmVlZENsb25lKTsNCi0NCi0gICAgdm9pZAkJCQlEZWxldGVMYXN0TWFyaygpOw0KLXByaXZhdGU6DQotDQotICAgIENGWF9PYmplY3RBcnJheTxDUERGX0NvbnRlbnRNYXJrSXRlbT4JbV9NYXJrczsNCi19Ow0KLWNsYXNzIENQREZfQ29udGVudE1hcmsgOiBwdWJsaWMgQ0ZYX0NvdW50UmVmPENQREZfQ29udGVudE1hcmtEYXRhPg0KLXsNCi1wdWJsaWM6DQotDQotICAgIGludAkJCQkJR2V0TUNJRCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BPYmplY3QgPyBtX3BPYmplY3QtPkdldE1DSUQoKSA6IC0xOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wJCQkJSGFzTWFyayhGWF9CU1RSIG1hcmspIGNvbnN0Ow0KLQ0KLSAgICBGWF9CT09MCQkJCUxvb2t1cE1hcmsoRlhfQlNUUiBtYXJrLCBDUERGX0RpY3Rpb25hcnkqJiBwRGljdCkgY29uc3Q7DQotfTsNCi0jZGVmaW5lIFBERlBBR0VfVEVYVAkJMQ0KLSNkZWZpbmUgUERGUEFHRV9QQVRICQkyDQotI2RlZmluZSBQREZQQUdFX0lNQUdFCQkzDQotI2RlZmluZSBQREZQQUdFX1NIQURJTkcJCTQNCi0jZGVmaW5lIFBERlBBR0VfRk9STQkJNQ0KLSNkZWZpbmUgUERGUEFHRV9JTkxJTkVTCQk2DQotY2xhc3MgQ1BERl9HcmFwaGljU3RhdGVzIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICB2b2lkCQkJCUNvcHlTdGF0ZXMoY29uc3QgQ1BERl9HcmFwaGljU3RhdGVzJiBzcmMpOw0KLQ0KLSAgICB2b2lkCQkJCURlZmF1bHRTdGF0ZXMoKTsNCi0NCi0gICAgQ1BERl9DbGlwUGF0aAkJbV9DbGlwUGF0aDsNCi0NCi0gICAgQ1BERl9HcmFwaFN0YXRlCQltX0dyYXBoU3RhdGU7DQotDQotICAgIENQREZfQ29sb3JTdGF0ZQkJbV9Db2xvclN0YXRlOw0KLQ0KLSAgICBDUERGX1RleHRTdGF0ZQkJbV9UZXh0U3RhdGU7DQotDQotICAgIENQREZfR2VuZXJhbFN0YXRlCW1fR2VuZXJhbFN0YXRlOw0KLX07DQotY2xhc3MgQ1BERl9QYWdlT2JqZWN0IDogcHVibGljIENQREZfR3JhcGhpY1N0YXRlcw0KLXsNCi1wdWJsaWM6DQotDQotICAgIHN0YXRpYyBDUERGX1BhZ2VPYmplY3QqIENyZWF0ZShpbnQgdHlwZSk7DQotDQotICAgIHZvaWQJCQkJUmVsZWFzZSgpOw0KLQ0KLSAgICBDUERGX1BhZ2VPYmplY3QqCUNsb25lKCkgY29uc3Q7DQotDQotICAgIHZvaWQJCQkJQ29weShjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBTcmNPYmplY3QpOw0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCVRyYW5zZm9ybShjb25zdCBDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpID0gMDsNCi0NCi0NCi0NCi0gICAgdm9pZAkJCQlSZW1vdmVDbGlwUGF0aCgpOw0KLQ0KLSAgICB2b2lkCQkJCUFwcGVuZENsaXBQYXRoKENQREZfUGF0aCBwYXRoLCBpbnQgdHlwZSwgRlhfQk9PTCBiQXV0b01lcmdlKTsNCi0NCi0gICAgdm9pZAkJCQlDb3B5Q2xpcFBhdGgoQ1BERl9QYWdlT2JqZWN0KiBwT2JqKTsNCi0NCi0gICAgdm9pZAkJCQlUcmFuc2Zvcm1DbGlwUGF0aChDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpOw0KLQ0KLSAgICB2b2lkCQkJCVRyYW5zZm9ybUdlbmVyYWxTdGF0ZShDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpOw0KLQ0KLQ0KLSAgICB2b2lkCQkJCVNldENvbG9yU3RhdGUoQ1BERl9Db2xvclN0YXRlIHN0YXRlKQ0KLSAgICB7DQotICAgICAgICBtX0NvbG9yU3RhdGUgPSBzdGF0ZTsNCi0gICAgfQ0KLQ0KLSAgICBGWF9SRUNUCQkJCUdldEJCb3goY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCkgY29uc3Q7DQotDQotICAgIGludAkJCQkJbV9UeXBlOw0KLQ0KLSAgICBGWF9GTE9BVAkJCW1fTGVmdDsNCi0NCi0gICAgRlhfRkxPQVQJCQltX1JpZ2h0Ow0KLQ0KLSAgICBGWF9GTE9BVAkJCW1fVG9wOw0KLQ0KLSAgICBGWF9GTE9BVAkJCW1fQm90dG9tOw0KLQ0KLSAgICBDUERGX0NvbnRlbnRNYXJrCW1fQ29udGVudE1hcms7DQotcHJvdGVjdGVkOg0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCUNvcHlEYXRhKGNvbnN0IENQREZfUGFnZU9iamVjdCogcFNyY09iamVjdCkge30NCi0NCi0gICAgdm9pZAkJCQlSZWNhbGNCQm94KCk7DQotDQotICAgIENQREZfUGFnZU9iamVjdCgpIHt9DQotDQotICAgIHZpcnR1YWwgfkNQREZfUGFnZU9iamVjdCgpIHt9DQotfTsNCi1zdHJ1Y3QgQ1BERl9UZXh0T2JqZWN0SXRlbSA6IHB1YmxpYyBDRlhfT2JqZWN0IHsNCi0NCi0gICAgRlhfRFdPUkQJCQltX0NoYXJDb2RlOw0KLQ0KLSAgICBGWF9GTE9BVAkJCW1fT3JpZ2luWDsNCi0NCi0gICAgRlhfRkxPQVQJCQltX09yaWdpblk7DQotfTsNCi1jbGFzcyBDUERGX1RleHRPYmplY3QgOiBwdWJsaWMgQ1BERl9QYWdlT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9UZXh0T2JqZWN0KCk7DQotDQotICAgIHZpcnR1YWwgfkNQREZfVGV4dE9iamVjdCgpOw0KLQ0KLSAgICBpbnQJCQkJCUNvdW50SXRlbXMoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9uQ2hhcnM7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCQlHZXRJdGVtSW5mbyhpbnQgaW5kZXgsIENQREZfVGV4dE9iamVjdEl0ZW0qIHBJbmZvKSBjb25zdDsNCi0NCi0gICAgaW50CQkJCQlDb3VudENoYXJzKCkgY29uc3Q7DQotDQotICAgIHZvaWQJCQkJR2V0Q2hhckluZm8oaW50IGluZGV4LCBGWF9EV09SRCYgY2hhcmNvZGUsIEZYX0ZMT0FUJiBrZXJuaW5nKSBjb25zdDsNCi0gICAgdm9pZAkJCQlHZXRDaGFySW5mbyhpbnQgaW5kZXgsIENQREZfVGV4dE9iamVjdEl0ZW0qIHBJbmZvKSBjb25zdDsNCi0NCi0gICAgdm9pZAkJCQlHZXRDaGFyUmVjdChpbnQgaW5kZXgsIENGWF9GbG9hdFJlY3QmIHJlY3QpIGNvbnN0Ow0KLQ0KLQ0KLSAgICBGWF9GTE9BVAkJCUdldENoYXJXaWR0aChGWF9EV09SRCBjaGFyY29kZSkgY29uc3Q7DQotICAgIEZYX0ZMT0FUCQkJR2V0U3BhY2VDaGFyV2lkdGgoKSBjb25zdDsNCi0NCi0gICAgRlhfRkxPQVQJCQlHZXRQb3NYKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fUG9zWDsNCi0gICAgfQ0KLQ0KLSAgICBGWF9GTE9BVAkJCUdldFBvc1koKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9Qb3NZOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJR2V0VGV4dE1hdHJpeChDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4KSBjb25zdDsNCi0NCi0gICAgQ1BERl9Gb250KgkJCUdldEZvbnQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9UZXh0U3RhdGUuR2V0Rm9udCgpOw0KLSAgICB9DQotDQotICAgIEZYX0ZMT0FUCQkJR2V0Rm9udFNpemUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9UZXh0U3RhdGUuR2V0Rm9udFNpemUoKTsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJCVNldEVtcHR5KCk7DQotDQotICAgIHZvaWQJCQkJU2V0VGV4dChjb25zdCBDRlhfQnl0ZVN0cmluZyYgdGV4dCk7DQotDQotICAgIHZvaWQJCQkJU2V0VGV4dChDRlhfQnl0ZVN0cmluZyogcFN0cnMsIEZYX0ZMT0FUKiBwS2VybmluZywgaW50IG5TZWdzKTsNCi0NCi0gICAgdm9pZAkJCQlTZXRUZXh0KGludCBuQ2hhcnMsIEZYX0RXT1JEKiBwQ2hhckNvZGVzLCBGWF9GTE9BVCogcEtlcm5pbmdzKTsNCi0NCi0gICAgdm9pZAkJCQlTZXRQb3NpdGlvbihGWF9GTE9BVCB4LCBGWF9GTE9BVCB5KTsNCi0NCi0gICAgdm9pZAkJCQlTZXRUZXh0U3RhdGUoQ1BERl9UZXh0U3RhdGUgVGV4dFN0YXRlKTsNCi0gICAgdmlydHVhbCB2b2lkCQlUcmFuc2Zvcm0oY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCYgbWF0cml4KTsNCi0NCi0gICAgdm9pZAkJCQlDYWxjQ2hhclBvcyhGWF9GTE9BVCogcFBvc0FycmF5KSBjb25zdDsNCi0NCi0NCi0NCi0gICAgdm9pZAkJCQlTZXREYXRhKGludCBuQ2hhcnMsIEZYX0RXT1JEKiBwQ2hhckNvZGVzLCBGWF9GTE9BVCogcENoYXJQb3MsIEZYX0ZMT0FUIHgsIEZYX0ZMT0FUIHkpOw0KLQ0KLSAgICB2b2lkCQkJCUdldERhdGEoaW50JiBuQ2hhcnMsIEZYX0RXT1JEKiYgcENoYXJDb2RlcywgRlhfRkxPQVQqJiBwQ2hhclBvcykNCi0gICAgew0KLSAgICAgICAgbkNoYXJzID0gbV9uQ2hhcnM7DQotICAgICAgICBwQ2hhckNvZGVzID0gbV9wQ2hhckNvZGVzOw0KLSAgICAgICAgcENoYXJQb3MgPSBtX3BDaGFyUG9zOw0KLSAgICB9DQotDQotDQotICAgIHZvaWQJCQkJUmVjYWxjUG9zaXRpb25EYXRhKCkNCi0gICAgew0KLSAgICAgICAgQ2FsY1Bvc2l0aW9uRGF0YShOVUxMLCBOVUxMLCAxKTsNCi0gICAgfQ0KLXByb3RlY3RlZDoNCi0gICAgdmlydHVhbCB2b2lkCQlDb3B5RGF0YShjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBTcmNPYmplY3QpOw0KLQ0KLSAgICBGWF9GTE9BVAkJCW1fUG9zWDsNCi0NCi0gICAgRlhfRkxPQVQJCQltX1Bvc1k7DQotDQotICAgIGludAkJCQkJbV9uQ2hhcnM7DQotDQotICAgIEZYX0RXT1JEKgkJCW1fcENoYXJDb2RlczsNCi0NCi0gICAgRlhfRkxPQVQqCQltX3BDaGFyUG9zOw0KLQ0KLSAgICB2b2lkCQkJCVNldFNlZ21lbnRzKGNvbnN0IENGWF9CeXRlU3RyaW5nKiBwU3RycywgRlhfRkxPQVQqIHBLZXJuaW5nLCBpbnQgblNlZ3MpOw0KLQ0KLSAgICB2b2lkCQkJCUNhbGNQb3NpdGlvbkRhdGEoRlhfRkxPQVQqIHBUZXh0QWR2YW5jZVgsIEZYX0ZMT0FUKiBwVGV4dEFkdmFuY2VZLCBGWF9GTE9BVCBob3J6X3NjYWxlLCBpbnQgbGV2ZWwgPSAwKTsNCi0gICAgZnJpZW5kIGNsYXNzCQlDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI7DQotICAgIGZyaWVuZCBjbGFzcwkJQ1BERl9SZW5kZXJTdGF0dXM7DQotICAgIGZyaWVuZCBjbGFzcwkJQ1BERl9RdWlja0RyYXdlcjsNCi0gICAgZnJpZW5kIGNsYXNzCQlDUERGX1RleHRSZW5kZXJlcjsNCi0gICAgZnJpZW5kIGNsYXNzCQlDVGV4dFBhZ2U7DQotICAgIGZyaWVuZCBjbGFzcwkJQ1BERl9Db250ZW50R2VuZXJhdG9yOw0KLX07DQotY2xhc3MgQ1BERl9QYXRoT2JqZWN0IDogcHVibGljIENQREZfUGFnZU9iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfUGF0aE9iamVjdCgpDQotICAgIHsNCi0gICAgICAgIG1fVHlwZSA9IFBERlBBR0VfUEFUSDsNCi0gICAgfQ0KLQ0KLSAgICB2aXJ0dWFsIH5DUERGX1BhdGhPYmplY3QoKSB7fQ0KLSAgICB2aXJ0dWFsIHZvaWQJCVRyYW5zZm9ybShjb25zdCBDRlhfQWZmaW5lTWF0cml4JiBtYXh0cml4KTsNCi0NCi0gICAgdm9pZAkJCQlTZXRHcmFwaFN0YXRlKENQREZfR3JhcGhTdGF0ZSBHcmFwaFN0YXRlKTsNCi0NCi0gICAgQ1BERl9QYXRoCQkJbV9QYXRoOw0KLQ0KLSAgICBpbnQJCQkJCW1fRmlsbFR5cGU7DQotDQotICAgIEZYX0JPT0wJCQkJbV9iU3Ryb2tlOw0KLQ0KLSAgICBDRlhfQWZmaW5lTWF0cml4CW1fTWF0cml4Ow0KLQ0KLQ0KLSAgICB2b2lkCQkJCUNhbGNCb3VuZGluZ0JveCgpOw0KLXByb3RlY3RlZDoNCi0gICAgdmlydHVhbCB2b2lkCQlDb3B5RGF0YShjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBTcmNPYmpldCk7DQotfTsNCi1jbGFzcyBDUERGX0ltYWdlT2JqZWN0IDogcHVibGljIENQREZfUGFnZU9iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfSW1hZ2VPYmplY3QoKTsNCi0NCi0gICAgdmlydHVhbCB+Q1BERl9JbWFnZU9iamVjdCgpOw0KLSAgICB2aXJ0dWFsIHZvaWQJCVRyYW5zZm9ybShjb25zdCBDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpOw0KLQ0KLSAgICBDUERGX0ltYWdlKgkJCW1fcEltYWdlOw0KLQ0KLSAgICBDRlhfQWZmaW5lTWF0cml4CW1fTWF0cml4Ow0KLQ0KLSAgICB2b2lkCQkJCUNhbGNCb3VuZGluZ0JveCgpOw0KLXByaXZhdGU6DQotICAgIHZpcnR1YWwgdm9pZAkJQ29weURhdGEoY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwU3JjT2JqZXQpOw0KLX07DQotY2xhc3MgQ1BERl9TaGFkaW5nT2JqZWN0IDogcHVibGljIENQREZfUGFnZU9iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfU2hhZGluZ09iamVjdCgpOw0KLQ0KLSAgICB2aXJ0dWFsIH5DUERGX1NoYWRpbmdPYmplY3QoKTsNCi0NCi0gICAgQ1BERl9TaGFkaW5nUGF0dGVybioJbV9wU2hhZGluZzsNCi0NCi0gICAgQ0ZYX0FmZmluZU1hdHJpeAltX01hdHJpeDsNCi0NCi0gICAgQ1BERl9QYWdlKgkJCW1fcFBhZ2U7DQotICAgIHZpcnR1YWwgdm9pZAkJVHJhbnNmb3JtKGNvbnN0IENGWF9BZmZpbmVNYXRyaXgmIG1hdHJpeCk7DQotDQotICAgIHZvaWQJCQkJQ2FsY0JvdW5kaW5nQm94KCk7DQotcHJvdGVjdGVkOg0KLSAgICB2aXJ0dWFsIHZvaWQJCUNvcHlEYXRhKGNvbnN0IENQREZfUGFnZU9iamVjdCogcFNyY09iamV0KTsNCi19Ow0KLWNsYXNzIENQREZfRm9ybU9iamVjdCA6IHB1YmxpYyBDUERGX1BhZ2VPYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDUERGX0Zvcm1PYmplY3QoKQ0KLSAgICB7DQotICAgICAgICBtX1R5cGUgPSBQREZQQUdFX0ZPUk07DQotICAgICAgICBtX3BGb3JtID0gTlVMTDsNCi0gICAgfQ0KLQ0KLSAgICB2aXJ0dWFsIH5DUERGX0Zvcm1PYmplY3QoKTsNCi0gICAgdmlydHVhbCB2b2lkCQlUcmFuc2Zvcm0oY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCYgbWF0cml4KTsNCi0NCi0gICAgQ1BERl9Gb3JtKgkJCW1fcEZvcm07DQotDQotICAgIENGWF9BZmZpbmVNYXRyaXgJbV9Gb3JtTWF0cml4Ow0KLQ0KLSAgICB2b2lkCQkJCUNhbGNCb3VuZGluZ0JveCgpOw0KLXByb3RlY3RlZDoNCi0gICAgdmlydHVhbCB2b2lkCQlDb3B5RGF0YShjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBTcmNPYmpldCk7DQotfTsNCi1jbGFzcyBDUERGX0lubGluZUltYWdlcyA6IHB1YmxpYyBDUERGX1BhZ2VPYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDUERGX0lubGluZUltYWdlcygpOw0KLQ0KLSAgICB2aXJ0dWFsIH5DUERGX0lubGluZUltYWdlcygpOw0KLQ0KLSAgICBDUERGX1N0cmVhbSoJCW1fcFN0cmVhbTsNCi0NCi0gICAgQ0ZYX0RJQml0bWFwKgkJbV9wQml0bWFwOw0KLQ0KLSAgICBDRlhfQXJyYXlUZW1wbGF0ZTxDRlhfQWZmaW5lTWF0cml4PgltX01hdHJpY2VzOw0KLQ0KLSAgICB2b2lkCQkJCUFkZE1hdHJpeChDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpOw0KLXByb3RlY3RlZDoNCi0gICAgdmlydHVhbCB2b2lkCQlUcmFuc2Zvcm0oY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCYgbWF0cml4KSB7fQ0KLSAgICB2aXJ0dWFsIHZvaWQJCUNvcHlEYXRhKGNvbnN0IENQREZfUGFnZU9iamVjdCogcFNyY09iamV0KSB7fQ0KLX07DQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlBERl9QQUdFT0JKX0hfCisjZGVmaW5lIF9GUERGX1BBR0VPQkpfSF8KKyNpZm5kZWYgX0ZQREZfUkVTT1VSQ0VfCisjaW5jbHVkZSAiZnBkZl9yZXNvdXJjZS5oIgorI2VuZGlmCisjaWZuZGVmIF9GWF9HRV9IXworI2luY2x1ZGUgIi4uL2Z4Z2UvZnhfZ2UuaCIKKyNlbmRpZgorY2xhc3MgQ1BERl9QYXRoOworY2xhc3MgQ1BERl9DbGlwUGF0aERhdGE7CitjbGFzcyBDUERGX0NsaXBQYXRoOworY2xhc3MgQ1BERl9Db2xvclN0YXRlRGF0YTsKK2NsYXNzIENQREZfQ29sb3JTdGF0ZTsKK2NsYXNzIENQREZfR3JhcGhTdGF0ZTsKK2NsYXNzIENQREZfVGV4dFN0YXRlRGF0YTsKK2NsYXNzIENQREZfVGV4dFN0YXRlOworY2xhc3MgQ1BERl9HZW5lcmFsU3RhdGVEYXRhOworY2xhc3MgQ1BERl9HZW5lcmFsU3RhdGU7CitjbGFzcyBDUERGX0NvbnRlbnRNYXJrSXRlbTsKK2NsYXNzIENQREZfQ29udGVudE1hcms7CitjbGFzcyBDUERGX0dyYXBoaWNTdGF0ZXM7CitjbGFzcyBDUERGX1BhZ2VPYmplY3Q7CitjbGFzcyBDUERGX1RleHRPYmplY3Q7CitjbGFzcyBDUERGX1BhdGhPYmplY3Q7CitjbGFzcyBDUERGX0ltYWdlT2JqZWN0OworY2xhc3MgQ1BERl9TaGFkaW5nT2JqZWN0OworY2xhc3MgQ1BERl9Gb3JtT2JqZWN0OworY2xhc3MgQ1BERl9JbmxpbmVJbWFnZXM7Cit0eXBlZGVmIENGWF9QYXRoRGF0YSBDUERGX1BhdGhEYXRhOworY2xhc3MgQ1BERl9QYXRoIDogcHVibGljIENGWF9Db3VudFJlZjxDRlhfUGF0aERhdGE+Cit7CitwdWJsaWM6CisKKworCisKKyAgICBpbnQJCQkJCUdldFBvaW50Q291bnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcE9iamVjdC0+bV9Qb2ludENvdW50OworICAgIH0KKworICAgIGludAkJCQkJR2V0RmxhZyhpbnQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV9wT2JqZWN0LT5tX3BQb2ludHNbaW5kZXhdLm1fRmxhZzsKKyAgICB9CisKKyAgICBGWF9GTE9BVAkJCUdldFBvaW50WChpbnQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV9wT2JqZWN0LT5tX3BQb2ludHNbaW5kZXhdLm1fUG9pbnRYOworICAgIH0KKworICAgIEZYX0ZMT0FUCQkJR2V0UG9pbnRZKGludCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BPYmplY3QtPm1fcFBvaW50c1tpbmRleF0ubV9Qb2ludFk7CisgICAgfQorCisKKworCisgICAgRlhfUEFUSFBPSU5UKgkJR2V0UG9pbnRzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BPYmplY3QtPm1fcFBvaW50czsKKyAgICB9CisKKworICAgIENGWF9GbG9hdFJlY3QJCUdldEJvdW5kaW5nQm94KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BPYmplY3QtPkdldEJvdW5kaW5nQm94KCk7CisgICAgfQorCisgICAgQ0ZYX0Zsb2F0UmVjdAkJR2V0Qm91bmRpbmdCb3goRlhfRkxPQVQgbGluZV93aWR0aCwgRlhfRkxPQVQgbWl0ZXJfbGltaXQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wT2JqZWN0LT5HZXRCb3VuZGluZ0JveChsaW5lX3dpZHRoLCBtaXRlcl9saW1pdCk7CisgICAgfQorCisgICAgdm9pZAkJCQlUcmFuc2Zvcm0oY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCkKKyAgICB7CisgICAgICAgIEdldE1vZGlmeSgpLT5UcmFuc2Zvcm0ocE1hdHJpeCk7CisgICAgfQorCisgICAgdm9pZAkJCQlBcHBlbmQoQ1BERl9QYXRoIHNyYywgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCkKKyAgICB7CisgICAgICAgIG1fcE9iamVjdC0+QXBwZW5kKHNyYy5tX3BPYmplY3QsIHBNYXRyaXgpOworICAgIH0KKworICAgIHZvaWQJCQkJQXBwZW5kUmVjdChGWF9GTE9BVCBsZWZ0LCBGWF9GTE9BVCBib3R0b20sIEZYX0ZMT0FUIHJpZ2h0LCBGWF9GTE9BVCB0b3ApCisgICAgeworICAgICAgICBtX3BPYmplY3QtPkFwcGVuZFJlY3QobGVmdCwgYm90dG9tLCByaWdodCwgdG9wKTsKKyAgICB9CisKKyAgICBGWF9CT09MCQkJCUlzUmVjdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wT2JqZWN0LT5Jc1JlY3QoKTsKKyAgICB9Cit9OworY2xhc3MgQ1BERl9DbGlwUGF0aERhdGEgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ1BERl9DbGlwUGF0aERhdGEoKTsKKworICAgIENQREZfQ2xpcFBhdGhEYXRhKGNvbnN0IENQREZfQ2xpcFBhdGhEYXRhJik7CisKKyAgICB+Q1BERl9DbGlwUGF0aERhdGEoKTsKKworICAgIHZvaWQJCQkJU2V0Q291bnQoaW50IHBhdGhfY291bnQsIGludCB0ZXh0X2NvdW50KTsKK3B1YmxpYzoKKworICAgIGludAkJCQkJbV9QYXRoQ291bnQ7CisKKyAgICBDUERGX1BhdGgqCQkJbV9wUGF0aExpc3Q7CisKKyAgICBGWF9CWVRFKgkJCW1fcFR5cGVMaXN0OworCisgICAgaW50CQkJCQltX1RleHRDb3VudDsKKworICAgIENQREZfVGV4dE9iamVjdCoqCW1fcFRleHRMaXN0OworfTsKK2NsYXNzIENQREZfQ2xpcFBhdGggOiBwdWJsaWMgQ0ZYX0NvdW50UmVmPENQREZfQ2xpcFBhdGhEYXRhPgoreworcHVibGljOgorCisgICAgRlhfRFdPUkQJCQlHZXRQYXRoQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcE9iamVjdC0+bV9QYXRoQ291bnQ7CisgICAgfQorCisgICAgQ1BERl9QYXRoCQkJR2V0UGF0aChpbnQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BPYmplY3QtPm1fcFBhdGhMaXN0W2ldOworICAgIH0KKworICAgIGludAkJCQkJR2V0Q2xpcFR5cGUoaW50IGkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wT2JqZWN0LT5tX3BUeXBlTGlzdFtpXTsKKyAgICB9CisKKyAgICBGWF9EV09SRAkJCUdldFRleHRDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wT2JqZWN0LT5tX1RleHRDb3VudDsKKyAgICB9CisKKyAgICBDUERGX1RleHRPYmplY3QqCUdldFRleHQoaW50IGkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wT2JqZWN0LT5tX3BUZXh0TGlzdFtpXTsKKyAgICB9CisKKyAgICBDRlhfRmxvYXRSZWN0CQlHZXRDbGlwQm94KCkgY29uc3Q7CisKKyAgICB2b2lkCQkJCUFwcGVuZFBhdGgoQ1BERl9QYXRoIHBhdGgsIGludCB0eXBlLCBGWF9CT09MIGJBdXRvTWVyZ2UpOworCisgICAgdm9pZAkJCQlEZWxldGVQYXRoKGludCBsYXllcl9pbmRleCk7CisKKyAgICB2b2lkCQkJCUFwcGVuZFRleHRzKENQREZfVGV4dE9iamVjdCoqIHBUZXh0cywgaW50IGNvdW50KTsKKworICAgIHZvaWQJCQkJVHJhbnNmb3JtKGNvbnN0IENGWF9BZmZpbmVNYXRyaXgmIG1hdHJpeCk7Cit9OworY2xhc3MgQ1BERl9Db2xvclN0YXRlRGF0YSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDUERGX0NvbG9yU3RhdGVEYXRhKCkge30KKworICAgIENQREZfQ29sb3JTdGF0ZURhdGEoY29uc3QgQ1BERl9Db2xvclN0YXRlRGF0YSYgc3JjKTsKKworICAgIHZvaWQJCQkJRGVmYXVsdCgpOworCisgICAgQ1BERl9Db2xvcgkJCW1fRmlsbENvbG9yOworCisgICAgRlhfRFdPUkQJCQltX0ZpbGxSR0I7CisKKyAgICBDUERGX0NvbG9yCQkJbV9TdHJva2VDb2xvcjsKKworICAgIEZYX0RXT1JECQkJbV9TdHJva2VSR0I7Cit9OworY2xhc3MgQ1BERl9Db2xvclN0YXRlIDogcHVibGljIENGWF9Db3VudFJlZjxDUERGX0NvbG9yU3RhdGVEYXRhPgoreworcHVibGljOgorCisgICAgQ1BERl9Db2xvcioJCQlHZXRGaWxsQ29sb3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcE9iamVjdCA/ICZtX3BPYmplY3QtPm1fRmlsbENvbG9yIDogTlVMTDsKKyAgICB9CisKKyAgICBDUERGX0NvbG9yKgkJCUdldFN0cm9rZUNvbG9yKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BPYmplY3QgPyAmbV9wT2JqZWN0LT5tX1N0cm9rZUNvbG9yIDogTlVMTDsKKyAgICB9CisKKyAgICB2b2lkCQkJCVNldEZpbGxDb2xvcihDUERGX0NvbG9yU3BhY2UqIHBDUywgRlhfRkxPQVQqIHBWYWx1ZSwgaW50IG5WYWx1ZXMpOworCisgICAgdm9pZAkJCQlTZXRTdHJva2VDb2xvcihDUERGX0NvbG9yU3BhY2UqIHBDUywgRlhfRkxPQVQqIHBWYWx1ZSwgaW50IG5WYWx1ZXMpOworCisgICAgdm9pZAkJCQlTZXRGaWxsUGF0dGVybihDUERGX1BhdHRlcm4qIHBhdHRlcm4sIEZYX0ZMT0FUKiBwVmFsdWUsIGludCBuVmFsdWVzKTsKKworICAgIHZvaWQJCQkJU2V0U3Ryb2tlUGF0dGVybihDUERGX1BhdHRlcm4qIHBhdHRlcm4sIEZYX0ZMT0FUKiBwVmFsdWUsIGludCBuVmFsdWVzKTsKK3ByaXZhdGU6CisgICAgdm9pZAkJCQlTZXRDb2xvcihDUERGX0NvbG9yJiBjb2xvciwgRlhfRFdPUkQmIHJnYiwgQ1BERl9Db2xvclNwYWNlKiBwQ1MsIEZYX0ZMT0FUKiBwVmFsdWUsIGludCBuVmFsdWVzKTsKK307Cit0eXBlZGVmIENGWF9HcmFwaFN0YXRlRGF0YSBDUERGX0dyYXBoU3RhdGVEYXRhOworY2xhc3MgQ1BERl9HcmFwaFN0YXRlIDogcHVibGljIENGWF9Db3VudFJlZjxDRlhfR3JhcGhTdGF0ZURhdGE+Cit7CitwdWJsaWM6Cit9OworY2xhc3MgQ1BERl9UZXh0U3RhdGVEYXRhIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENQREZfVGV4dFN0YXRlRGF0YSgpOworCisgICAgQ1BERl9UZXh0U3RhdGVEYXRhKGNvbnN0IENQREZfVGV4dFN0YXRlRGF0YSYgc3JjKTsKKworICAgIH5DUERGX1RleHRTdGF0ZURhdGEoKTsKKworICAgIENQREZfRm9udCoJCQltX3BGb250OworCisgICAgRlhfRkxPQVQJCQltX0ZvbnRTaXplOworCisgICAgRlhfRkxPQVQJCQltX0NoYXJTcGFjZTsKKworICAgIEZYX0ZMT0FUCQkJbV9Xb3JkU3BhY2U7CisKKyAgICBGWF9GTE9BVAkJbV9NYXRyaXhbNF07CisKKyAgICBpbnQJCQkJCW1fVGV4dE1vZGU7CisKKyAgICBGWF9GTE9BVAkJbV9DVE1bNF07Cit9OworY2xhc3MgQ1BERl9UZXh0U3RhdGUgOiBwdWJsaWMgQ0ZYX0NvdW50UmVmPENQREZfVGV4dFN0YXRlRGF0YT4KK3sKK3B1YmxpYzoKKworICAgIENQREZfRm9udCoJCQlHZXRGb250KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BPYmplY3QtPm1fcEZvbnQ7CisgICAgfQorCisgICAgdm9pZAkJCQlTZXRGb250KENQREZfRm9udCogcEZvbnQpOworCisgICAgRlhfRkxPQVQJCQlHZXRGb250U2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wT2JqZWN0LT5tX0ZvbnRTaXplOworICAgIH0KKworICAgIEZYX0ZMT0FUKgkJCUdldE1hdHJpeCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wT2JqZWN0LT5tX01hdHJpeDsKKyAgICB9CisKKworCisgICAgRlhfRkxPQVQJCQlHZXRGb250U2l6ZVYoKSBjb25zdDsKKworICAgIEZYX0ZMT0FUCQkJR2V0Rm9udFNpemVIKCkgY29uc3Q7CisKKyAgICBGWF9GTE9BVAkJCUdldEJhc2VsaW5lQW5nbGUoKSBjb25zdDsKKworICAgIEZYX0ZMT0FUCQkJR2V0U2hlYXJBbmdsZSgpIGNvbnN0OworCit9OworY2xhc3MgQ1BERl9UcmFuc2ZlckZ1bmM7CitjbGFzcyBDUERGX0dlbmVyYWxTdGF0ZURhdGEgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ1BERl9HZW5lcmFsU3RhdGVEYXRhKCk7CisKKyAgICBDUERGX0dlbmVyYWxTdGF0ZURhdGEoY29uc3QgQ1BERl9HZW5lcmFsU3RhdGVEYXRhJiBzcmMpOworICAgIH5DUERGX0dlbmVyYWxTdGF0ZURhdGEoKTsKKworICAgIHZvaWQJCQkJU2V0QmxlbmRNb2RlKEZYX0JTVFIgYmxlbmRfbW9kZSk7CisKKyAgICBjaGFyCQkJCW1fQmxlbmRNb2RlWzE2XTsKKworICAgIGludAkJCQkJbV9CbGVuZFR5cGU7CisKKyAgICBDUERGX09iamVjdCoJCW1fcFNvZnRNYXNrOworCisgICAgRlhfRkxPQVQJCQltX1NNYXNrTWF0cml4WzZdOworCisgICAgRlhfRkxPQVQJCQltX1N0cm9rZUFscGhhOworCisgICAgRlhfRkxPQVQJCQltX0ZpbGxBbHBoYTsKKworICAgIENQREZfT2JqZWN0KgkJbV9wVFI7CisKKyAgICBDUERGX1RyYW5zZmVyRnVuYyoJbV9wVHJhbnNmZXJGdW5jOworCisgICAgQ0ZYX01hdHJpeAkJCW1fTWF0cml4OworCisgICAgaW50CQkJCQltX1JlbmRlckludGVudDsKKworICAgIEZYX0JPT0wJCQkJbV9TdHJva2VBZGp1c3Q7CisKKyAgICBGWF9CT09MCQkJCW1fQWxwaGFTb3VyY2U7CisKKyAgICBGWF9CT09MCQkJCW1fVGV4dEtub2Nrb3V0OworCisgICAgRlhfQk9PTAkJCQltX1N0cm9rZU9QOworCisgICAgRlhfQk9PTAkJCQltX0ZpbGxPUDsKKworICAgIGludAkJCQkJbV9PUE1vZGU7CisKKyAgICBDUERGX09iamVjdCoJCW1fcEJHOworCisgICAgQ1BERl9PYmplY3QqCQltX3BVQ1I7CisKKyAgICBDUERGX09iamVjdCoJCW1fcEhUOworCisgICAgRlhfRkxPQVQJCQltX0ZsYXRuZXNzOworCisgICAgRlhfRkxPQVQJCQltX1Ntb290aG5lc3M7Cit9OworY2xhc3MgQ1BERl9HZW5lcmFsU3RhdGUgOiBwdWJsaWMgQ0ZYX0NvdW50UmVmPENQREZfR2VuZXJhbFN0YXRlRGF0YT4KK3sKK3B1YmxpYzoKKworICAgIHZvaWQJCQkJU2V0UmVuZGVySW50ZW50KGNvbnN0IENGWF9CeXRlU3RyaW5nJiByaSk7CisKKyAgICBpbnQJCQkJCUdldEJsZW5kVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wT2JqZWN0ID8gbV9wT2JqZWN0LT5tX0JsZW5kVHlwZSA6IEZYRElCX0JMRU5EX05PUk1BTDsKKyAgICB9CisKKyAgICBpbnQJCQkJCUdldEFscGhhKEZYX0JPT0wgYlN0cm9rZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BPYmplY3QgPyBGWFNZU19yb3VuZCgoYlN0cm9rZSA/IG1fcE9iamVjdC0+bV9TdHJva2VBbHBoYSA6IG1fcE9iamVjdC0+bV9GaWxsQWxwaGEpICogMjU1KSA6IDI1NTsKKyAgICB9Cit9OworY2xhc3MgQ1BERl9Db250ZW50TWFya0l0ZW0gOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAgUHJvcGVydGllc0RpY3QsCisgICAgICAgIERpcmVjdERpY3QsCisgICAgICAgIE1DSUQKKyAgICB9IFBhcmFtVHlwZTsKKworICAgIENQREZfQ29udGVudE1hcmtJdGVtKCk7CisKKyAgICBDUERGX0NvbnRlbnRNYXJrSXRlbShjb25zdCBDUERGX0NvbnRlbnRNYXJrSXRlbSYgc3JjKTsKKworICAgIH5DUERGX0NvbnRlbnRNYXJrSXRlbSgpOworCisgICAgaW5saW5lIGNvbnN0IENGWF9CeXRlU3RyaW5nJglHZXROYW1lKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX01hcmtOYW1lOworICAgIH0KKworICAgIGlubGluZSBQYXJhbVR5cGUJR2V0UGFyYW1UeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX1BhcmFtVHlwZTsKKyAgICB9CisKKyAgICBpbmxpbmUgdm9pZCoJCUdldFBhcmFtKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BQYXJhbTsKKyAgICB9CisKKyAgICBpbmxpbmUgRlhfQk9PTAkJSGFzTUNJRCgpIGNvbnN0OworCisgICAgaW5saW5lIHZvaWQJCQlTZXROYW1lKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lKQorICAgIHsKKyAgICAgICAgbV9NYXJrTmFtZSA9IG5hbWU7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQJCQlTZXRQYXJhbShQYXJhbVR5cGUgdHlwZSwgdm9pZCogcGFyYW0pCisgICAgeworICAgICAgICBtX1BhcmFtVHlwZSA9IHR5cGU7CisgICAgICAgIG1fcFBhcmFtID0gcGFyYW07CisgICAgfQorcHJpdmF0ZToKKworICAgIENGWF9CeXRlU3RyaW5nCQltX01hcmtOYW1lOworCisgICAgUGFyYW1UeXBlCQkJbV9QYXJhbVR5cGU7CisKKyAgICB2b2lkKgkJCQltX3BQYXJhbTsKK307CitjbGFzcyBDUERGX0NvbnRlbnRNYXJrRGF0YSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDUERGX0NvbnRlbnRNYXJrRGF0YSgpIHsgfQorCisgICAgQ1BERl9Db250ZW50TWFya0RhdGEoY29uc3QgQ1BERl9Db250ZW50TWFya0RhdGEmIHNyYyk7CisKKyAgICBpbmxpbmUgaW50CQkJQ291bnRJdGVtcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9NYXJrcy5HZXRTaXplKCk7CisgICAgfQorCisgICAgaW5saW5lIENQREZfQ29udGVudE1hcmtJdGVtJglHZXRJdGVtKGludCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX01hcmtzW2luZGV4XTsKKyAgICB9CisKKyAgICBpbnQJCQkJCUdldE1DSUQoKSBjb25zdDsKKworICAgIHZvaWQJCQkJQWRkTWFyayhjb25zdCBDRlhfQnl0ZVN0cmluZyYgbmFtZSwgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCwgRlhfQk9PTCBiRGljdE5lZWRDbG9uZSk7CisKKyAgICB2b2lkCQkJCURlbGV0ZUxhc3RNYXJrKCk7Citwcml2YXRlOgorCisgICAgQ0ZYX09iamVjdEFycmF5PENQREZfQ29udGVudE1hcmtJdGVtPgltX01hcmtzOworfTsKK2NsYXNzIENQREZfQ29udGVudE1hcmsgOiBwdWJsaWMgQ0ZYX0NvdW50UmVmPENQREZfQ29udGVudE1hcmtEYXRhPgoreworcHVibGljOgorCisgICAgaW50CQkJCQlHZXRNQ0lEKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BPYmplY3QgPyBtX3BPYmplY3QtPkdldE1DSUQoKSA6IC0xOworICAgIH0KKworICAgIEZYX0JPT0wJCQkJSGFzTWFyayhGWF9CU1RSIG1hcmspIGNvbnN0OworCisgICAgRlhfQk9PTAkJCQlMb29rdXBNYXJrKEZYX0JTVFIgbWFyaywgQ1BERl9EaWN0aW9uYXJ5KiYgcERpY3QpIGNvbnN0OworfTsKKyNkZWZpbmUgUERGUEFHRV9URVhUCQkxCisjZGVmaW5lIFBERlBBR0VfUEFUSAkJMgorI2RlZmluZSBQREZQQUdFX0lNQUdFCQkzCisjZGVmaW5lIFBERlBBR0VfU0hBRElORwkJNAorI2RlZmluZSBQREZQQUdFX0ZPUk0JCTUKKyNkZWZpbmUgUERGUEFHRV9JTkxJTkVTCQk2CitjbGFzcyBDUERGX0dyYXBoaWNTdGF0ZXMgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgdm9pZAkJCQlDb3B5U3RhdGVzKGNvbnN0IENQREZfR3JhcGhpY1N0YXRlcyYgc3JjKTsKKworICAgIHZvaWQJCQkJRGVmYXVsdFN0YXRlcygpOworCisgICAgQ1BERl9DbGlwUGF0aAkJbV9DbGlwUGF0aDsKKworICAgIENQREZfR3JhcGhTdGF0ZQkJbV9HcmFwaFN0YXRlOworCisgICAgQ1BERl9Db2xvclN0YXRlCQltX0NvbG9yU3RhdGU7CisKKyAgICBDUERGX1RleHRTdGF0ZQkJbV9UZXh0U3RhdGU7CisKKyAgICBDUERGX0dlbmVyYWxTdGF0ZQltX0dlbmVyYWxTdGF0ZTsKK307CitjbGFzcyBDUERGX1BhZ2VPYmplY3QgOiBwdWJsaWMgQ1BERl9HcmFwaGljU3RhdGVzCit7CitwdWJsaWM6CisKKyAgICBzdGF0aWMgQ1BERl9QYWdlT2JqZWN0KiBDcmVhdGUoaW50IHR5cGUpOworCisgICAgdm9pZAkJCQlSZWxlYXNlKCk7CisKKyAgICBDUERGX1BhZ2VPYmplY3QqCUNsb25lKCkgY29uc3Q7CisKKyAgICB2b2lkCQkJCUNvcHkoY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwU3JjT2JqZWN0KTsKKworICAgIHZpcnR1YWwgdm9pZAkJVHJhbnNmb3JtKGNvbnN0IENGWF9BZmZpbmVNYXRyaXgmIG1hdHJpeCkgPSAwOworCisKKworICAgIHZvaWQJCQkJUmVtb3ZlQ2xpcFBhdGgoKTsKKworICAgIHZvaWQJCQkJQXBwZW5kQ2xpcFBhdGgoQ1BERl9QYXRoIHBhdGgsIGludCB0eXBlLCBGWF9CT09MIGJBdXRvTWVyZ2UpOworCisgICAgdm9pZAkJCQlDb3B5Q2xpcFBhdGgoQ1BERl9QYWdlT2JqZWN0KiBwT2JqKTsKKworICAgIHZvaWQJCQkJVHJhbnNmb3JtQ2xpcFBhdGgoQ0ZYX0FmZmluZU1hdHJpeCYgbWF0cml4KTsKKworICAgIHZvaWQJCQkJVHJhbnNmb3JtR2VuZXJhbFN0YXRlKENGWF9BZmZpbmVNYXRyaXgmIG1hdHJpeCk7CisKKworICAgIHZvaWQJCQkJU2V0Q29sb3JTdGF0ZShDUERGX0NvbG9yU3RhdGUgc3RhdGUpCisgICAgeworICAgICAgICBtX0NvbG9yU3RhdGUgPSBzdGF0ZTsKKyAgICB9CisKKyAgICBGWF9SRUNUCQkJCUdldEJCb3goY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCkgY29uc3Q7CisKKyAgICBpbnQJCQkJCW1fVHlwZTsKKworICAgIEZYX0ZMT0FUCQkJbV9MZWZ0OworCisgICAgRlhfRkxPQVQJCQltX1JpZ2h0OworCisgICAgRlhfRkxPQVQJCQltX1RvcDsKKworICAgIEZYX0ZMT0FUCQkJbV9Cb3R0b207CisKKyAgICBDUERGX0NvbnRlbnRNYXJrCW1fQ29udGVudE1hcms7Citwcm90ZWN0ZWQ6CisKKyAgICB2aXJ0dWFsIHZvaWQJCUNvcHlEYXRhKGNvbnN0IENQREZfUGFnZU9iamVjdCogcFNyY09iamVjdCkge30KKworICAgIHZvaWQJCQkJUmVjYWxjQkJveCgpOworCisgICAgQ1BERl9QYWdlT2JqZWN0KCkge30KKworICAgIHZpcnR1YWwgfkNQREZfUGFnZU9iamVjdCgpIHt9Cit9Oworc3RydWN0IENQREZfVGV4dE9iamVjdEl0ZW0gOiBwdWJsaWMgQ0ZYX09iamVjdCB7CisKKyAgICBGWF9EV09SRAkJCW1fQ2hhckNvZGU7CisKKyAgICBGWF9GTE9BVAkJCW1fT3JpZ2luWDsKKworICAgIEZYX0ZMT0FUCQkJbV9PcmlnaW5ZOworfTsKK2NsYXNzIENQREZfVGV4dE9iamVjdCA6IHB1YmxpYyBDUERGX1BhZ2VPYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENQREZfVGV4dE9iamVjdCgpOworCisgICAgdmlydHVhbCB+Q1BERl9UZXh0T2JqZWN0KCk7CisKKyAgICBpbnQJCQkJCUNvdW50SXRlbXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbkNoYXJzOworICAgIH0KKworICAgIHZvaWQJCQkJR2V0SXRlbUluZm8oaW50IGluZGV4LCBDUERGX1RleHRPYmplY3RJdGVtKiBwSW5mbykgY29uc3Q7CisKKyAgICBpbnQJCQkJCUNvdW50Q2hhcnMoKSBjb25zdDsKKworICAgIHZvaWQJCQkJR2V0Q2hhckluZm8oaW50IGluZGV4LCBGWF9EV09SRCYgY2hhcmNvZGUsIEZYX0ZMT0FUJiBrZXJuaW5nKSBjb25zdDsKKyAgICB2b2lkCQkJCUdldENoYXJJbmZvKGludCBpbmRleCwgQ1BERl9UZXh0T2JqZWN0SXRlbSogcEluZm8pIGNvbnN0OworCisgICAgdm9pZAkJCQlHZXRDaGFyUmVjdChpbnQgaW5kZXgsIENGWF9GbG9hdFJlY3QmIHJlY3QpIGNvbnN0OworCisKKyAgICBGWF9GTE9BVAkJCUdldENoYXJXaWR0aChGWF9EV09SRCBjaGFyY29kZSkgY29uc3Q7CisgICAgRlhfRkxPQVQJCQlHZXRTcGFjZUNoYXJXaWR0aCgpIGNvbnN0OworCisgICAgRlhfRkxPQVQJCQlHZXRQb3NYKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX1Bvc1g7CisgICAgfQorCisgICAgRlhfRkxPQVQJCQlHZXRQb3NZKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX1Bvc1k7CisgICAgfQorCisgICAgdm9pZAkJCQlHZXRUZXh0TWF0cml4KENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgpIGNvbnN0OworCisgICAgQ1BERl9Gb250KgkJCUdldEZvbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fVGV4dFN0YXRlLkdldEZvbnQoKTsKKyAgICB9CisKKyAgICBGWF9GTE9BVAkJCUdldEZvbnRTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX1RleHRTdGF0ZS5HZXRGb250U2l6ZSgpOworICAgIH0KKworICAgIHZvaWQJCQkJU2V0RW1wdHkoKTsKKworICAgIHZvaWQJCQkJU2V0VGV4dChjb25zdCBDRlhfQnl0ZVN0cmluZyYgdGV4dCk7CisKKyAgICB2b2lkCQkJCVNldFRleHQoQ0ZYX0J5dGVTdHJpbmcqIHBTdHJzLCBGWF9GTE9BVCogcEtlcm5pbmcsIGludCBuU2Vncyk7CisKKyAgICB2b2lkCQkJCVNldFRleHQoaW50IG5DaGFycywgRlhfRFdPUkQqIHBDaGFyQ29kZXMsIEZYX0ZMT0FUKiBwS2VybmluZ3MpOworCisgICAgdm9pZAkJCQlTZXRQb3NpdGlvbihGWF9GTE9BVCB4LCBGWF9GTE9BVCB5KTsKKworICAgIHZvaWQJCQkJU2V0VGV4dFN0YXRlKENQREZfVGV4dFN0YXRlIFRleHRTdGF0ZSk7CisgICAgdmlydHVhbCB2b2lkCQlUcmFuc2Zvcm0oY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCYgbWF0cml4KTsKKworICAgIHZvaWQJCQkJQ2FsY0NoYXJQb3MoRlhfRkxPQVQqIHBQb3NBcnJheSkgY29uc3Q7CisKKworCisgICAgdm9pZAkJCQlTZXREYXRhKGludCBuQ2hhcnMsIEZYX0RXT1JEKiBwQ2hhckNvZGVzLCBGWF9GTE9BVCogcENoYXJQb3MsIEZYX0ZMT0FUIHgsIEZYX0ZMT0FUIHkpOworCisgICAgdm9pZAkJCQlHZXREYXRhKGludCYgbkNoYXJzLCBGWF9EV09SRComIHBDaGFyQ29kZXMsIEZYX0ZMT0FUKiYgcENoYXJQb3MpCisgICAgeworICAgICAgICBuQ2hhcnMgPSBtX25DaGFyczsKKyAgICAgICAgcENoYXJDb2RlcyA9IG1fcENoYXJDb2RlczsKKyAgICAgICAgcENoYXJQb3MgPSBtX3BDaGFyUG9zOworICAgIH0KKworCisgICAgdm9pZAkJCQlSZWNhbGNQb3NpdGlvbkRhdGEoKQorICAgIHsKKyAgICAgICAgQ2FsY1Bvc2l0aW9uRGF0YShOVUxMLCBOVUxMLCAxKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkCQlDb3B5RGF0YShjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBTcmNPYmplY3QpOworCisgICAgRlhfRkxPQVQJCQltX1Bvc1g7CisKKyAgICBGWF9GTE9BVAkJCW1fUG9zWTsKKworICAgIGludAkJCQkJbV9uQ2hhcnM7CisKKyAgICBGWF9EV09SRCoJCQltX3BDaGFyQ29kZXM7CisKKyAgICBGWF9GTE9BVCoJCW1fcENoYXJQb3M7CisKKyAgICB2b2lkCQkJCVNldFNlZ21lbnRzKGNvbnN0IENGWF9CeXRlU3RyaW5nKiBwU3RycywgRlhfRkxPQVQqIHBLZXJuaW5nLCBpbnQgblNlZ3MpOworCisgICAgdm9pZAkJCQlDYWxjUG9zaXRpb25EYXRhKEZYX0ZMT0FUKiBwVGV4dEFkdmFuY2VYLCBGWF9GTE9BVCogcFRleHRBZHZhbmNlWSwgRlhfRkxPQVQgaG9yel9zY2FsZSwgaW50IGxldmVsID0gMCk7CisgICAgZnJpZW5kIGNsYXNzCQlDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI7CisgICAgZnJpZW5kIGNsYXNzCQlDUERGX1JlbmRlclN0YXR1czsKKyAgICBmcmllbmQgY2xhc3MJCUNQREZfUXVpY2tEcmF3ZXI7CisgICAgZnJpZW5kIGNsYXNzCQlDUERGX1RleHRSZW5kZXJlcjsKKyAgICBmcmllbmQgY2xhc3MJCUNUZXh0UGFnZTsKKyAgICBmcmllbmQgY2xhc3MJCUNQREZfQ29udGVudEdlbmVyYXRvcjsKK307CitjbGFzcyBDUERGX1BhdGhPYmplY3QgOiBwdWJsaWMgQ1BERl9QYWdlT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDUERGX1BhdGhPYmplY3QoKQorICAgIHsKKyAgICAgICAgbV9UeXBlID0gUERGUEFHRV9QQVRIOworICAgIH0KKworICAgIHZpcnR1YWwgfkNQREZfUGF0aE9iamVjdCgpIHt9CisgICAgdmlydHVhbCB2b2lkCQlUcmFuc2Zvcm0oY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCYgbWF4dHJpeCk7CisKKyAgICB2b2lkCQkJCVNldEdyYXBoU3RhdGUoQ1BERl9HcmFwaFN0YXRlIEdyYXBoU3RhdGUpOworCisgICAgQ1BERl9QYXRoCQkJbV9QYXRoOworCisgICAgaW50CQkJCQltX0ZpbGxUeXBlOworCisgICAgRlhfQk9PTAkJCQltX2JTdHJva2U7CisKKyAgICBDRlhfQWZmaW5lTWF0cml4CW1fTWF0cml4OworCisKKyAgICB2b2lkCQkJCUNhbGNCb3VuZGluZ0JveCgpOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZAkJQ29weURhdGEoY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwU3JjT2JqZXQpOworfTsKK2NsYXNzIENQREZfSW1hZ2VPYmplY3QgOiBwdWJsaWMgQ1BERl9QYWdlT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDUERGX0ltYWdlT2JqZWN0KCk7CisKKyAgICB2aXJ0dWFsIH5DUERGX0ltYWdlT2JqZWN0KCk7CisgICAgdmlydHVhbCB2b2lkCQlUcmFuc2Zvcm0oY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCYgbWF0cml4KTsKKworICAgIENQREZfSW1hZ2UqCQkJbV9wSW1hZ2U7CisKKyAgICBDRlhfQWZmaW5lTWF0cml4CW1fTWF0cml4OworCisgICAgdm9pZAkJCQlDYWxjQm91bmRpbmdCb3goKTsKK3ByaXZhdGU6CisgICAgdmlydHVhbCB2b2lkCQlDb3B5RGF0YShjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBTcmNPYmpldCk7Cit9OworY2xhc3MgQ1BERl9TaGFkaW5nT2JqZWN0IDogcHVibGljIENQREZfUGFnZU9iamVjdAoreworcHVibGljOgorCisgICAgQ1BERl9TaGFkaW5nT2JqZWN0KCk7CisKKyAgICB2aXJ0dWFsIH5DUERGX1NoYWRpbmdPYmplY3QoKTsKKworICAgIENQREZfU2hhZGluZ1BhdHRlcm4qCW1fcFNoYWRpbmc7CisKKyAgICBDRlhfQWZmaW5lTWF0cml4CW1fTWF0cml4OworCisgICAgQ1BERl9QYWdlKgkJCW1fcFBhZ2U7CisgICAgdmlydHVhbCB2b2lkCQlUcmFuc2Zvcm0oY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCYgbWF0cml4KTsKKworICAgIHZvaWQJCQkJQ2FsY0JvdW5kaW5nQm94KCk7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkCQlDb3B5RGF0YShjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBTcmNPYmpldCk7Cit9OworY2xhc3MgQ1BERl9Gb3JtT2JqZWN0IDogcHVibGljIENQREZfUGFnZU9iamVjdAoreworcHVibGljOgorCisgICAgQ1BERl9Gb3JtT2JqZWN0KCkKKyAgICB7CisgICAgICAgIG1fVHlwZSA9IFBERlBBR0VfRk9STTsKKyAgICAgICAgbV9wRm9ybSA9IE5VTEw7CisgICAgfQorCisgICAgdmlydHVhbCB+Q1BERl9Gb3JtT2JqZWN0KCk7CisgICAgdmlydHVhbCB2b2lkCQlUcmFuc2Zvcm0oY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCYgbWF0cml4KTsKKworICAgIENQREZfRm9ybSoJCQltX3BGb3JtOworCisgICAgQ0ZYX0FmZmluZU1hdHJpeAltX0Zvcm1NYXRyaXg7CisKKyAgICB2b2lkCQkJCUNhbGNCb3VuZGluZ0JveCgpOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZAkJQ29weURhdGEoY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwU3JjT2JqZXQpOworfTsKK2NsYXNzIENQREZfSW5saW5lSW1hZ2VzIDogcHVibGljIENQREZfUGFnZU9iamVjdAoreworcHVibGljOgorCisgICAgQ1BERl9JbmxpbmVJbWFnZXMoKTsKKworICAgIHZpcnR1YWwgfkNQREZfSW5saW5lSW1hZ2VzKCk7CisKKyAgICBDUERGX1N0cmVhbSoJCW1fcFN0cmVhbTsKKworICAgIENGWF9ESUJpdG1hcCoJCW1fcEJpdG1hcDsKKworICAgIENGWF9BcnJheVRlbXBsYXRlPENGWF9BZmZpbmVNYXRyaXg+CW1fTWF0cmljZXM7CisKKyAgICB2b2lkCQkJCUFkZE1hdHJpeChDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZAkJVHJhbnNmb3JtKGNvbnN0IENGWF9BZmZpbmVNYXRyaXgmIG1hdHJpeCkge30KKyAgICB2aXJ0dWFsIHZvaWQJCUNvcHlEYXRhKGNvbnN0IENQREZfUGFnZU9iamVjdCogcFNyY09iamV0KSB7fQorfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYXJzZXIuaCBiL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFyc2VyLmgKaW5kZXggOWQ0MTUzOS4uYzZjODA3NyAxMDA2NDQKLS0tIGEvY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYXJzZXIuaAorKysgYi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhcnNlci5oCkBAIC0xLDExNDkgKzEsMTE0OSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlBERl9QQVJTRVJfDQotI2RlZmluZSBfRlBERl9QQVJTRVJfDQotI2lmbmRlZiBfRlhfQkFTSUNfSF8NCi0jaW5jbHVkZSAiLi4vZnhjcnQvZnhfZXh0LmgiDQotI2VuZGlmDQotI2lmbmRlZiBfRlBERl9PQkpFQ1RTXw0KLSNpbmNsdWRlICJmcGRmX29iamVjdHMuaCINCi0jZW5kaWYNCi1jbGFzcyBDUERGX0RvY3VtZW50Ow0KLWNsYXNzIElQREZfRG9jUGFyc2VyOw0KLWNsYXNzIENQREZfUGFyc2VyOw0KLWNsYXNzIENQREZfU2VjdXJpdHlIYW5kbGVyOw0KLWNsYXNzIENQREZfU3RhbmRhcmRTZWN1cml0eUhhbmRsZXI7DQotY2xhc3MgQ1BERl9DcnlwdG9IYW5kbGVyOw0KLWNsYXNzIENQREZfT2JqZWN0Ow0KLWNsYXNzIElGWF9GaWxlUmVhZDsNCi1jbGFzcyBDRkRGX0RvY3VtZW50Ow0KLWNsYXNzIENGREZfUGFyc2VyOw0KLWNsYXNzIENGWF9Gb250Ow0KLWNsYXNzIENGWF9BZmZpbmVNYXRyaXg7DQotY2xhc3MgQ0ZYX0Zsb2F0UmVjdDsNCi1jbGFzcyBDUERGX1BvaW50Ow0KLWNsYXNzIENQREZfRG9jUGFnZURhdGE7DQotY2xhc3MgQ1BERl9Eb2NSZW5kZXJEYXRhOw0KLWNsYXNzIENQREZfTW9kdWxlTWdyOw0KLWNsYXNzIENGWF9ESUJTb3VyY2U7DQotY2xhc3MgQ1BERl9Gb250Ow0KLWNsYXNzIENQREZfSW1hZ2U7DQotY2xhc3MgQ1BERl9Db2xvclNwYWNlOw0KLWNsYXNzIENQREZfUGF0dGVybjsNCi1jbGFzcyBDUERGX0ZvbnRFbmNvZGluZzsNCi1jbGFzcyBDUERGX0ljY1Byb2ZpbGU7DQotY2xhc3MgQ0ZYX1ByaXZhdGVEYXRhOw0KLSNkZWZpbmUgRlBERlBFUk1fUFJJTlQJCQkweDAwMDQNCi0jZGVmaW5lIEZQREZQRVJNX01PRElGWQkJCTB4MDAwOA0KLSNkZWZpbmUgRlBERlBFUk1fRVhUUkFDVAkJMHgwMDEwDQotI2RlZmluZSBGUERGUEVSTV9BTk5PVF9GT1JNCQkweDAwMjANCi0jZGVmaW5lIEZQREZQRVJNX0ZJTExfRk9STQkJMHgwMTAwDQotI2RlZmluZSBGUERGUEVSTV9FWFRSQUNUX0FDQ0VTUwkweDAyMDANCi0jZGVmaW5lIEZQREZQRVJNX0FTU0VNQkxFCQkweDA0MDANCi0jZGVmaW5lIEZQREZQRVJNX1BSSU5UX0hJR0gJCTB4MDgwMA0KLSNkZWZpbmUgRlBERl9QQUdFX01BWF9OVU0JCTB4RkZGRkYNCi1jbGFzcyBJUERGX0VudW1QYWdlSGFuZGxlcg0KLXsNCi1wdWJsaWM6DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTCBFbnVtUGFnZShDUERGX0RpY3Rpb25hcnkqIHBQYWdlRGljdCkgPSAwOw0KLX07DQotY2xhc3MgQ1BERl9Eb2N1bWVudCA6IHB1YmxpYyBDRlhfUHJpdmF0ZURhdGEsIHB1YmxpYyBDUERGX0luZGlyZWN0T2JqZWN0cw0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfRG9jdW1lbnQoSVBERl9Eb2NQYXJzZXIqIHBQYXJzZXIpOw0KLQ0KLSAgICBDUERGX0RvY3VtZW50KCk7DQotDQotICAgIH5DUERGX0RvY3VtZW50KCk7DQotDQotICAgIElQREZfRG9jUGFyc2VyKgkJCUdldFBhcnNlcigpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BQYXJzZXI7DQotICAgIH0NCi0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KgkJR2V0Um9vdCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BSb290RGljdDsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqCQlHZXRJbmZvKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcEluZm9EaWN0Ow0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJCUdldElEKENGWF9CeXRlU3RyaW5nJiBpZDEsIENGWF9CeXRlU3RyaW5nJiBpZDIpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIGlkMSA9IG1fSUQxOw0KLSAgICAgICAgaWQyID0gbV9JRDI7DQotICAgIH0NCi0NCi0gICAgaW50CQkJCQkJR2V0UGFnZUNvdW50KCkgY29uc3Q7DQotDQotICAgIENQREZfRGljdGlvbmFyeSoJCUdldFBhZ2UoaW50IGlQYWdlKTsNCi0NCi0gICAgaW50CQkJCQkJR2V0UGFnZUluZGV4KEZYX0RXT1JEIG9iam51bSk7DQotDQotICAgIHZvaWQJCQkJCUVudW1QYWdlcyhJUERGX0VudW1QYWdlSGFuZGxlciogcEhhbmRsZXIpOw0KLQ0KLSAgICBGWF9EV09SRAkJCQlHZXRVc2VyUGVybWlzc2lvbnMoRlhfQk9PTCBiQ2hlY2tSZXZpc2lvbiA9IEZBTFNFKSBjb25zdDsNCi0NCi0gICAgRlhfQk9PTAkJCQkJSXNPd25lcigpIGNvbnN0Ow0KLQ0KLQ0KLQ0KLSAgICBDUERGX0RvY1BhZ2VEYXRhKgkJR2V0UGFnZURhdGEoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gR2V0VmFsaWRhdGVQYWdlRGF0YSgpOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJCUNsZWFyUGFnZURhdGEoKTsNCi0NCi0gICAgdm9pZAkJCQkJUmVtb3ZlQ29sb3JTcGFjZUZyb21QYWdlRGF0YShDUERGX09iamVjdCogcE9iamVjdCk7DQotDQotDQotICAgIENQREZfRG9jUmVuZGVyRGF0YSoJCUdldFJlbmRlckRhdGEoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gR2V0VmFsaWRhdGVSZW5kZXJEYXRhKCk7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCQkJQ2xlYXJSZW5kZXJEYXRhKCk7DQotDQotICAgIHZvaWQJCQkJCUNsZWFyUmVuZGVyRm9udCgpOw0KLQ0KLQ0KLSAgICBGWF9CT09MCQkJCQlJc0Zvcm1TdHJlYW0oRlhfRFdPUkQgb2JqbnVtLCBGWF9CT09MJiBiRm9ybSkgY29uc3Q7DQotDQotDQotDQotDQotICAgIENQREZfRm9udCoJCQkJTG9hZEZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9udERpY3QpOw0KLQ0KLSAgICBDUERGX0ZvbnQqCQkJCUZpbmRGb250KENQREZfRGljdGlvbmFyeSogcEZvbnREaWN0KTsNCi0NCi0gICAgQ1BERl9Db2xvclNwYWNlKgkJTG9hZENvbG9yU3BhY2UoQ1BERl9PYmplY3QqIHBDU09iaiwgQ1BERl9EaWN0aW9uYXJ5KiBwUmVzb3VyY2VzID0gTlVMTCk7DQotDQotICAgIENQREZfUGF0dGVybioJCQlMb2FkUGF0dGVybihDUERGX09iamVjdCogcE9iaiwgRlhfQk9PTCBiU2hhZGluZywgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogbWF0cml4ID0gTlVMTCk7DQotDQotICAgIENQREZfSW1hZ2UqCQkJCUxvYWRJbWFnZUYoQ1BERl9PYmplY3QqIHBPYmopOw0KLQ0KLSAgICBDUERGX1N0cmVhbUFjYyoJCQlMb2FkRm9udEZpbGUoQ1BERl9TdHJlYW0qIHBTdHJlYW0pOw0KLQ0KLSAgICBDUERGX0ljY1Byb2ZpbGUqCQlMb2FkSWNjUHJvZmlsZShDUERGX1N0cmVhbSogcFN0cmVhbSwgaW50IG5Db21wb25lbnRzKTsNCi0NCi0jaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXw0KLQ0KLSAgICBDUERGX0ZvbnQqCQkJCUFkZFdpbmRvd3NGb250KExPR0ZPTlRBKiBwTG9nRm9udCwgRlhfQk9PTCBiVmVydCwgRlhfQk9PTCBiVHJhbnNsYXRlTmFtZSA9IEZBTFNFKTsNCi0gICAgQ1BERl9Gb250KgkJCQlBZGRXaW5kb3dzRm9udChMT0dGT05UVyogcExvZ0ZvbnQsIEZYX0JPT0wgYlZlcnQsIEZYX0JPT0wgYlRyYW5zbGF0ZU5hbWUgPSBGQUxTRSk7DQotI2VuZGlmDQotI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fQVBQTEVfDQotICAgIENQREZfRm9udCogICAgICAgICAgICAgIEFkZE1hY0ZvbnQoQ1RGb250UmVmIHBGb250LCBGWF9CT09MIGJWZXJ0LCBGWF9CT09MIGJUcmFuc2xhdGVOYW1lID0gRkFMU0UpOw0KLSNlbmRpZg0KLQ0KLSAgICBDUERGX0ZvbnQqCQkJCUFkZFN0YW5kYXJkRm9udChjb25zdCBGWF9DSEFSKiBmb250LCBDUERGX0ZvbnRFbmNvZGluZyogcEVuY29kaW5nKTsNCi0NCi0NCi0gICAgQ1BERl9Gb250KgkJCQlBZGRGb250KENGWF9Gb250KiBwRm9udCwgaW50IGNoYXJzZXQsIEZYX0JPT0wgYlZlcnQpOw0KLQ0KLSAgICB2b2lkCQkJCQlDcmVhdGVOZXdEb2MoKTsNCi0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KgkJQ3JlYXRlTmV3UGFnZShpbnQgaVBhZ2UpOw0KLQ0KLSAgICB2b2lkCQkJCQlEZWxldGVQYWdlKGludCBpUGFnZSk7DQotDQotICAgIHZvaWQJCQkJCUxvYWREb2MoKTsNCi0gICAgdm9pZAkJCQkJTG9hZEFzeW5Eb2MoQ1BERl9EaWN0aW9uYXJ5ICpwTGluZWFyaXplZCk7DQotICAgIHZvaWQJCQkJCUxvYWRQYWdlcygpOw0KLXByb3RlY3RlZDoNCi0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KgkJbV9wUm9vdERpY3Q7DQotDQotICAgIENQREZfRGljdGlvbmFyeSoJCW1fcEluZm9EaWN0Ow0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZwkJCW1fSUQxOw0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZwkJCW1fSUQyOw0KLQ0KLQ0KLSAgICBGWF9CT09MCQkJCQltX2JMaW5lYXJpemVkOw0KLQ0KLSAgICBGWF9EV09SRAkJCQltX2R3Rmlyc3RQYWdlTm87DQotDQotICAgIEZYX0RXT1JECQkJCW1fZHdGaXJzdFBhZ2VPYmpOdW07DQotDQotICAgIENGWF9EV29yZEFycmF5CQkJbV9QYWdlTGlzdDsNCi0NCi0gICAgaW50CQkJCQkJX0dldFBhZ2VDb3VudCgpIGNvbnN0Ow0KLSAgICBDUERGX0RpY3Rpb25hcnkqCQlfRmluZFBERlBhZ2UoQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZXMsIGludCBpUGFnZSwgaW50IG5QYWdlc1RvR28sIGludCBsZXZlbCk7DQotICAgIGludAkJCQkJCV9GaW5kUGFnZUluZGV4KENQREZfRGljdGlvbmFyeSogcE5vZGUsIEZYX0RXT1JEJiBza2lwX2NvdW50LCBGWF9EV09SRCBvYmpudW0sIGludCYgaW5kZXgsIGludCBsZXZlbCA9IDApOw0KLSAgICBGWF9CT09MCQkJCQlJc0NvbnRlbnRVc2VkRWxzZXdoZXJlKEZYX0RXT1JEIG9iam51bSwgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QpOw0KLSAgICBGWF9CT09MCQkJCQlDaGVja09DR1Zpc2libGUoQ1BERl9EaWN0aW9uYXJ5KiBwT0NHLCBGWF9CT09MIGJQcmludGluZyk7DQotICAgIENQREZfRG9jUGFnZURhdGEqCQlHZXRWYWxpZGF0ZVBhZ2VEYXRhKCk7DQotICAgIENQREZfRG9jUmVuZGVyRGF0YSoJCUdldFZhbGlkYXRlUmVuZGVyRGF0YSgpOw0KLSAgICBmcmllbmQgY2xhc3MJCQlDUERGX0NyZWF0b3I7DQotICAgIGZyaWVuZCBjbGFzcwkJCUNQREZfUGFyc2VyOw0KLSAgICBmcmllbmQgY2xhc3MJCQlDUERGX0RhdGFBdmFpbDsNCi0gICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9PQ0NvbnRleHQ7DQotDQotDQotDQotICAgIENQREZfRG9jUGFnZURhdGEqCQltX3BEb2NQYWdlOw0KLQ0KLSAgICBDUERGX0RvY1JlbmRlckRhdGEqCQltX3BEb2NSZW5kZXI7DQotDQotfTsNCi0NCi0jZGVmaW5lIFBERldPUkRfRU9GCQkJMA0KLSNkZWZpbmUgUERGV09SRF9OVU1CRVIJCTENCi0jZGVmaW5lIFBERldPUkRfVEVYVAkJMg0KLSNkZWZpbmUgUERGV09SRF9ERUxJTUlURVIJMw0KLSNkZWZpbmUgUERGV09SRF9OQU1FCQk0DQotY2xhc3MgQ1BERl9TaW1wbGVQYXJzZXIgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfU2ltcGxlUGFyc2VyKEZYX0xQQ0JZVEUgcERhdGEsIEZYX0RXT1JEIGR3U2l6ZSk7DQotDQotICAgIENQREZfU2ltcGxlUGFyc2VyKEZYX0JTVFIgc3RyKTsNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmdDCQlHZXRXb3JkKCk7DQotDQotICAgIEZYX0JPT0wJCQkJU2VhcmNoVG9rZW4oRlhfQlNUUiB0b2tlbik7DQotDQotICAgIEZYX0JPT0wJCQkJU2tpcFdvcmQoRlhfQlNUUiB0b2tlbik7DQotDQotICAgIEZYX0JPT0wJCQkJRmluZFRhZ1BhaXIoRlhfQlNUUiBzdGFydF90b2tlbiwgRlhfQlNUUiBlbmRfdG9rZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQmIHN0YXJ0X3BvcywgRlhfRFdPUkQmIGVuZF9wb3MpOw0KLQ0KLSAgICBGWF9CT09MCQkJCUZpbmRUYWdQYXJhbShGWF9CU1RSIHRva2VuLCBpbnQgblBhcmFtcyk7DQotDQotICAgIEZYX0RXT1JECQkJR2V0UG9zKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fZHdDdXJQb3M7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCQlTZXRQb3MoRlhfRFdPUkQgcG9zKQ0KLSAgICB7DQotICAgICAgICBBU1NFUlQocG9zIDw9IG1fZHdTaXplKTsNCi0gICAgICAgIG1fZHdDdXJQb3MgPSBwb3M7DQotICAgIH0NCi1wcml2YXRlOg0KLQ0KLSAgICB2b2lkCQkJCVBhcnNlV29yZChGWF9MUENCWVRFJiBwU3RhcnQsIEZYX0RXT1JEJiBkd1NpemUsIGludCYgdHlwZSk7DQotDQotICAgIEZYX0xQQ0JZVEUJCQltX3BEYXRhOw0KLQ0KLSAgICBGWF9EV09SRAkJCW1fZHdTaXplOw0KLQ0KLSAgICBGWF9EV09SRAkJCW1fZHdDdXJQb3M7DQotfTsNCi1jbGFzcyBDUERGX1N5bnRheFBhcnNlciA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9TeW50YXhQYXJzZXIoKTsNCi0NCi0gICAgfkNQREZfU3ludGF4UGFyc2VyKCk7DQotDQotICAgIHZvaWQJCQkJSW5pdFBhcnNlcihJRlhfRmlsZVJlYWQqIHBGaWxlQWNjZXNzLCBGWF9EV09SRCBIZWFkZXJPZmZzZXQpOw0KLQ0KLSAgICBGWF9GSUxFU0laRQkJCVNhdmVQb3MoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9Qb3M7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCQlSZXN0b3JlUG9zKEZYX0ZJTEVTSVpFIHBvcykNCi0gICAgew0KLSAgICAgICAgbV9Qb3MgPSBwb3M7DQotICAgIH0NCi0NCi0gICAgQ1BERl9PYmplY3QqCQlHZXRPYmplY3QoQ1BERl9JbmRpcmVjdE9iamVjdHMqIHBPYmpMaXN0LCBGWF9EV09SRCBvYmpudW0sIEZYX0RXT1JEIGdlbm51bSwgaW50IGxldmVsLCBzdHJ1Y3QgUEFSU0VfQ09OVEVYVCogcENvbnRleHQgPSBOVUxMLCBGWF9CT09MIGJEZWNyeXB0ID0gVFJVRSk7DQotDQotDQotICAgIENQREZfT2JqZWN0KgkJR2V0T2JqZWN0QnlTdHJpY3QoQ1BERl9JbmRpcmVjdE9iamVjdHMqIHBPYmpMaXN0LCBGWF9EV09SRCBvYmpudW0sIEZYX0RXT1JEIGdlbm51bSwgaW50IGxldmVsLCBzdHJ1Y3QgUEFSU0VfQ09OVEVYVCogcENvbnRleHQgPSBOVUxMKTsNCi0NCi0gICAgaW50CQkJCQlHZXREaXJlY3ROdW0oKTsNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcJCUdldFN0cmluZyhGWF9EV09SRCBvYmpudW0sIEZYX0RXT1JEIGdlbm51bSk7DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQlHZXROYW1lKCk7DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQlHZXRLZXl3b3JkKCk7DQotDQotICAgIHZvaWQJCQkJR2V0QmluYXJ5KEZYX0JZVEUqIGJ1ZmZlciwgRlhfRFdPUkQgc2l6ZSk7DQotDQotICAgIHZvaWQJCQkJVG9OZXh0TGluZSgpOw0KLQ0KLSAgICB2b2lkCQkJCVRvTmV4dFdvcmQoKTsNCi0NCi0gICAgRlhfQk9PTAkJCQlTZWFyY2hXb3JkKEZYX0JTVFIgd29yZCwgRlhfQk9PTCBiV2hvbGVXb3JkLCBGWF9CT09MIGJGb3J3YXJkLCBGWF9GSUxFU0laRSBsaW1pdCk7DQotDQotICAgIGludAkJCQkJU2VhcmNoTXVsdGlXb3JkKEZYX0JTVFIgd29yZHMsIEZYX0JPT0wgYldob2xlV29yZCwgRlhfRklMRVNJWkUgbGltaXQpOw0KLQ0KLSAgICBGWF9GSUxFU0laRQkJCUZpbmRUYWcoRlhfQlNUUiB0YWcsIEZYX0ZJTEVTSVpFIGxpbWl0KTsNCi0NCi0gICAgdm9pZAkJCQlTZXRFbmNyeXB0KENQREZfQ3J5cHRvSGFuZGxlciogcENyeXB0b0hhbmRsZXIpDQotICAgIHsNCi0gICAgICAgIG1fcENyeXB0b0hhbmRsZXIgPSBwQ3J5cHRvSGFuZGxlcjsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MCQkJCUlzRW5jcnlwdGVkKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcENyeXB0b0hhbmRsZXIgIT0gTlVMTDsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MCQkJCUdldENoYXJBdChGWF9GSUxFU0laRSBwb3MsIEZYX0JZVEUmIGNoKTsNCi0NCi0gICAgRlhfQk9PTAkJCQlSZWFkQmxvY2soRlhfQllURSogcEJ1ZiwgRlhfRFdPUkQgc2l6ZSk7DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQlHZXROZXh0V29yZChGWF9CT09MJiBiSXNOdW1iZXIpOw0KLXByb3RlY3RlZDoNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJCUdldE5leHRDaGFyKEZYX0JZVEUmIGNoKTsNCi0NCi0gICAgRlhfQk9PTAkJCQlHZXRDaGFyQXRCYWNrd2FyZChGWF9GSUxFU0laRSBwb3MsIEZYX0JZVEUmIGNoKTsNCi0NCi0gICAgdm9pZAkJCQlHZXROZXh0V29yZCgpOw0KLQ0KLSAgICBGWF9CT09MCQkJCUlzV2hvbGVXb3JkKEZYX0ZJTEVTSVpFIHN0YXJ0cG9zLCBGWF9GSUxFU0laRSBsaW1pdCwgRlhfTFBDQllURSB0YWcsIEZYX0RXT1JEIHRhZ2xlbik7DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQlSZWFkU3RyaW5nKCk7DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQlSZWFkSGV4U3RyaW5nKCk7DQotDQotICAgIENQREZfU3RyZWFtKgkJUmVhZFN0cmVhbShDUERGX0RpY3Rpb25hcnkqIHBEaWN0LCBQQVJTRV9DT05URVhUKiBwQ29udGV4dCwgRlhfRFdPUkQgb2JqbnVtLCBGWF9EV09SRCBnZW5udW0pOw0KLQ0KLSAgICBGWF9GSUxFU0laRQkJCW1fUG9zOw0KLQ0KLSAgICBGWF9CT09MCQkJCW1fYkZpbGVTdHJlYW07DQotDQotICAgIGludAkJCQkJbV9NZXRhZGF0YU9iam51bTsNCi0NCi0gICAgSUZYX0ZpbGVSZWFkKgkJbV9wRmlsZUFjY2VzczsNCi0NCi0gICAgRlhfRFdPUkQJCQltX0hlYWRlck9mZnNldDsNCi0NCi0gICAgRlhfRklMRVNJWkUJCQltX0ZpbGVMZW47DQotDQotICAgIEZYX0JZVEUqCQkJbV9wRmlsZUJ1ZjsNCi0NCi0gICAgRlhfRFdPUkQJCQltX0J1ZlNpemU7DQotDQotICAgIEZYX0ZJTEVTSVpFCQkJbV9CdWZPZmZzZXQ7DQotDQotICAgIENQREZfQ3J5cHRvSGFuZGxlcioJbV9wQ3J5cHRvSGFuZGxlcjsNCi0NCi0gICAgRlhfQllURQkJCQltX1dvcmRCdWZmZXJbMjU3XTsNCi0NCi0gICAgRlhfRFdPUkQJCQltX1dvcmRTaXplOw0KLQ0KLSAgICBGWF9CT09MCQkJCW1fYklzTnVtYmVyOw0KLQ0KLSAgICBGWF9GSUxFU0laRQkJCW1fZHdXb3JkUG9zOw0KLSAgICBmcmllbmQgY2xhc3MJCUNQREZfUGFyc2VyOw0KLSAgICBmcmllbmQgY2xhc3MJCUNQREZfRGF0YUF2YWlsOw0KLX07DQotDQotI2RlZmluZSBQREZQQVJTRV9UWVBFT05MWQkxDQotI2RlZmluZSBQREZQQVJTRV9OT1NUUkVBTQkyDQotc3RydWN0IFBBUlNFX0NPTlRFWFQgew0KLQ0KLSAgICBGWF9CT09MCQltX0ZsYWdzOw0KLQ0KLSAgICBGWF9GSUxFU0laRQltX0RpY3RTdGFydDsNCi0NCi0gICAgRlhfRklMRVNJWkUJbV9EaWN0RW5kOw0KLQ0KLSAgICBGWF9GSUxFU0laRQltX0RhdGFTdGFydDsNCi0NCi0gICAgRlhfRklMRVNJWkUJbV9EYXRhRW5kOw0KLX07DQotY2xhc3MgSVBERl9Eb2NQYXJzZXIgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHZpcnR1YWwgRlhfRFdPUkQJR2V0Um9vdE9iak51bSgpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9EV09SRAlHZXRJbmZvT2JqTnVtKCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIENQREZfT2JqZWN0KglQYXJzZUluZGlyZWN0T2JqZWN0KENQREZfSW5kaXJlY3RPYmplY3RzKiBwT2JqTGlzdCwgRlhfRFdPUkQgb2JqbnVtLCBQQVJTRV9DT05URVhUKiBwQ29udGV4dCA9IE5VTEwpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9EV09SRAlHZXRMYXN0T2JqTnVtKCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIENQREZfQXJyYXkqCUdldElEQXJyYXkoKSA9IDA7DQotDQotICAgIHZpcnR1YWwgQ1BERl9EaWN0aW9uYXJ5KglHZXRFbmNyeXB0RGljdCgpID0gMDsNCi0NCi0gICAgRlhfQk9PTAkJCQlJc0VuY3J5cHRlZCgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBHZXRFbmNyeXB0RGljdCgpICE9IE5VTEw7DQotICAgIH0NCi0NCi0gICAgdmlydHVhbCBGWF9EV09SRAlHZXRQZXJtaXNzaW9ucyhGWF9CT09MIGJDaGVja1JldmlzaW9uID0gRkFMU0UpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQlJc093bmVyKCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCUlzRm9ybVN0cmVhbShGWF9EV09SRCBvYmpudW0sIEZYX0JPT0wmIGJGb3JtKSA9IDA7DQotfTsNCi0NCi0jZGVmaW5lIFBERlBBUlNFX0VSUk9SX1NVQ0NFU1MJCTANCi0jZGVmaW5lIFBERlBBUlNFX0VSUk9SX0ZJTEUJCQkxDQotI2RlZmluZSBQREZQQVJTRV9FUlJPUl9GT1JNQVQJCTINCi0jZGVmaW5lIFBERlBBUlNFX0VSUk9SX1BBU1NXT1JECQkzDQotI2RlZmluZSBQREZQQVJTRV9FUlJPUl9IQU5ETEVSCQk0DQotI2RlZmluZSBQREZQQVJTRV9FUlJPUl9DRVJUCQkJNQ0KLWNsYXNzIENQREZfUGFyc2VyIDogcHVibGljIElQREZfRG9jUGFyc2VyDQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9QYXJzZXIoKTsNCi0NCi0gICAgfkNQREZfUGFyc2VyKCk7DQotDQotICAgIEZYX0RXT1JECQkJU3RhcnRQYXJzZShGWF9MUENTVFIgZmlsZW5hbWUsIEZYX0JPT0wgYlJlUGFyc2UgPSBGQUxTRSk7DQotDQotICAgIEZYX0RXT1JECQkJU3RhcnRQYXJzZShGWF9MUENXU1RSIGZpbGVuYW1lLCBGWF9CT09MIGJSZVBhcnNlID0gRkFMU0UpOw0KLQ0KLSAgICBGWF9EV09SRAkJCVN0YXJ0UGFyc2UoSUZYX0ZpbGVSZWFkKiBwRmlsZSwgRlhfQk9PTCBiUmVQYXJzZSA9IEZBTFNFLCBGWF9CT09MIGJPd25GaWxlUmVhZCA9IFRSVUUpOw0KLQ0KLSAgICB2b2lkCQkJCUNsb3NlUGFyc2VyKEZYX0JPT0wgYlJlUGFyc2UgPSBGQUxTRSk7DQotDQotICAgIHZpcnR1YWwgRlhfRFdPUkQJR2V0UGVybWlzc2lvbnMoRlhfQk9PTCBiQ2hlY2tSZXZpc2lvbiA9IEZBTFNFKTsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQlJc093bmVyKCk7DQotDQotICAgIHZvaWQJCQkJU2V0UGFzc3dvcmQoY29uc3QgRlhfQ0hBUiogcGFzc3dvcmQpDQotICAgIHsNCi0gICAgICAgIG1fUGFzc3dvcmQgPSBwYXNzd29yZDsNCi0gICAgfQ0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZwkJR2V0UGFzc3dvcmQoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9QYXNzd29yZDsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX1NlY3VyaXR5SGFuZGxlciogR2V0U2VjdXJpdHlIYW5kbGVyKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcFNlY3VyaXR5SGFuZGxlcjsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX0NyeXB0b0hhbmRsZXIqCUdldENyeXB0b0hhbmRsZXIoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9TeW50YXgubV9wQ3J5cHRvSGFuZGxlcjsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJCVNldFNlY3VyaXR5SGFuZGxlcihDUERGX1NlY3VyaXR5SGFuZGxlciogcFNlY3VyaXR5SGFuZGxlciwgRlhfQk9PTCBiRm9yY2VkID0gRkFMU0UpOw0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZwkJR2V0UmVjaXBpZW50KCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fYnNSZWNpcGllbnQ7DQotICAgIH0NCi0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KglHZXRUcmFpbGVyKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcFRyYWlsZXI7DQotICAgIH0NCi0NCi0gICAgRlhfRklMRVNJWkUJCQlHZXRMYXN0WFJlZk9mZnNldCgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0xhc3RYUmVmT2Zmc2V0Ow0KLSAgICB9DQotDQotICAgIENQREZfRG9jdW1lbnQqCQlHZXREb2N1bWVudCgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BEb2N1bWVudDsNCi0gICAgfQ0KLSAgICBDRlhfQXJyYXlUZW1wbGF0ZTxDUERGX0RpY3Rpb25hcnkgKj4gKiBHZXRPdGhlclRyYWlsZXJzKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuICZtX1RyYWlsZXJzOw0KLSAgICB9DQotDQotICAgIHZpcnR1YWwgRlhfRFdPUkQJR2V0Um9vdE9iak51bSgpOw0KLSAgICB2aXJ0dWFsIEZYX0RXT1JECUdldEluZm9PYmpOdW0oKTsNCi0gICAgdmlydHVhbCBDUERGX0FycmF5KglHZXRJREFycmF5KCk7DQotICAgIHZpcnR1YWwgQ1BERl9EaWN0aW9uYXJ5KglHZXRFbmNyeXB0RGljdCgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BFbmNyeXB0RGljdDsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIENQREZfT2JqZWN0KgkJUGFyc2VJbmRpcmVjdE9iamVjdChDUERGX0luZGlyZWN0T2JqZWN0cyogcE9iakxpc3QsIEZYX0RXT1JEIG9iam51bSwgUEFSU0VfQ09OVEVYVCogcENvbnRleHQgPSBOVUxMKTsNCi0gICAgdmlydHVhbCBGWF9EV09SRAlHZXRMYXN0T2JqTnVtKCk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJSXNGb3JtU3RyZWFtKEZYX0RXT1JEIG9iam51bSwgRlhfQk9PTCYgYkZvcm0pOw0KLQ0KLSAgICBGWF9GSUxFU0laRQkJCUdldE9iamVjdE9mZnNldChGWF9EV09SRCBvYmpudW0pOw0KLQ0KLSAgICBGWF9GSUxFU0laRQkJCUdldE9iamVjdFNpemUoRlhfRFdPUkQgb2JqbnVtKTsNCi0NCi0gICAgaW50CQkJCQlHZXRPYmplY3RWZXJzaW9uKEZYX0RXT1JEIG9iam51bSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fT2JqVmVyc2lvbltvYmpudW1dOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJR2V0SW5kaXJlY3RCaW5hcnkoRlhfRFdPUkQgb2JqbnVtLCBGWF9CWVRFKiYgcEJ1ZmZlciwgRlhfRFdPUkQmIHNpemUpOw0KLQ0KLSAgICBGWF9CT09MCQkJCUdldEZpbGVTdHJlYW1PcHRpb24oKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9TeW50YXgubV9iRmlsZVN0cmVhbTsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJCVNldEZpbGVTdHJlYW1PcHRpb24oRlhfQk9PTCBiKQ0KLSAgICB7DQotICAgICAgICBtX1N5bnRheC5tX2JGaWxlU3RyZWFtID0gYjsNCi0gICAgfQ0KLQ0KLSAgICBJRlhfRmlsZVJlYWQqCQlHZXRGaWxlQWNjZXNzKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fU3ludGF4Lm1fcEZpbGVBY2Nlc3M7DQotICAgIH0NCi0NCi0gICAgaW50CQkJCQlHZXRGaWxlVmVyc2lvbigpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0ZpbGVWZXJzaW9uOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wJCQkJSXNYUmVmU3RyZWFtKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fYlhSZWZTdHJlYW07DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QqCQlQYXJzZUluZGlyZWN0T2JqZWN0QXQoQ1BERl9JbmRpcmVjdE9iamVjdHMqIHBPYmpMaXN0LCBGWF9GSUxFU0laRSBwb3MsIEZYX0RXT1JEIG9iam51bSwNCi0gICAgICAgICAgICBzdHJ1Y3QgUEFSU0VfQ09OVEVYVCogcENvbnRleHQpOw0KLQ0KLSAgICBDUERGX09iamVjdCoJCVBhcnNlSW5kaXJlY3RPYmplY3RBdEJ5U3RyaWN0KENQREZfSW5kaXJlY3RPYmplY3RzKiBwT2JqTGlzdCwgRlhfRklMRVNJWkUgcG9zLCBGWF9EV09SRCBvYmpudW0sDQotICAgICAgICAgICAgc3RydWN0IFBBUlNFX0NPTlRFWFQqIHBDb250ZXh0LCBGWF9GSUxFU0laRSAqcFJlc3VsdFBvcyk7DQotDQotICAgIEZYX0RXT1JECQkJU3RhcnRBc3luUGFyc2UoSUZYX0ZpbGVSZWFkKiBwRmlsZSwgRlhfQk9PTCBiUmVQYXJzZSA9IEZBTFNFLCBGWF9CT09MIGJPd25GaWxlUmVhZCA9IFRSVUUpOw0KLQ0KLSAgICBGWF9EV09SRAkJCUdldEZpcnN0UGFnZU5vKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fZHdGaXJzdFBhZ2VObzsNCi0gICAgfQ0KLXByb3RlY3RlZDoNCi0NCi0gICAgQ1BERl9Eb2N1bWVudCoJCW1fcERvY3VtZW50Ow0KLQ0KLSAgICBDUERGX1N5bnRheFBhcnNlcgltX1N5bnRheDsNCi0gICAgRlhfQk9PTAkJCQltX2JPd25GaWxlUmVhZDsNCi0gICAgQ1BERl9PYmplY3QqCQlQYXJzZURpcmVjdChDUERGX09iamVjdCogcE9iaik7DQotDQotICAgIEZYX0JPT0wJCQkJTG9hZEFsbENyb3NzUmVmVjQoRlhfRklMRVNJWkUgcG9zKTsNCi0NCi0gICAgRlhfQk9PTAkJCQlMb2FkQWxsQ3Jvc3NSZWZWNShGWF9GSUxFU0laRSBwb3MpOw0KLQ0KLSAgICBGWF9CT09MCQkJCUxvYWRDcm9zc1JlZlY0KEZYX0ZJTEVTSVpFIHBvcywgRlhfRklMRVNJWkUgc3RyZWFtcG9zLCBGWF9CT09MIGJTa2lwLCBGWF9CT09MIGJGaXJzdCk7DQotDQotICAgIEZYX0JPT0wJCQkJTG9hZENyb3NzUmVmVjUoRlhfRklMRVNJWkUgcG9zLCBGWF9GSUxFU0laRSYgcHJldiwgRlhfQk9PTCBiTWFpblhSZWYpOw0KLQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqCUxvYWRUcmFpbGVyVjQoKTsNCi0NCi0gICAgRlhfQk9PTAkJCQlSZWJ1aWxkQ3Jvc3NSZWYoKTsNCi0NCi0gICAgRlhfRFdPUkQJCQlTZXRFbmNyeXB0SGFuZGxlcigpOw0KLQ0KLSAgICB2b2lkCQkJCVJlbGVhc2VFbmNyeXB0SGFuZGxlcigpOw0KLQ0KLSAgICBGWF9CT09MCQkJCUxvYWRMaW5lYXJpemVkQWxsQ3Jvc3NSZWZWNChGWF9GSUxFU0laRSBwb3MsIEZYX0RXT1JEIGR3T2JqQ291bnQpOw0KLQ0KLSAgICBGWF9CT09MCQkJCUxvYWRMaW5lYXJpemVkQ3Jvc3NSZWZWNChGWF9GSUxFU0laRSBwb3MsIEZYX0RXT1JEIGR3T2JqQ291bnQpOw0KLQ0KLSAgICBGWF9CT09MCQkJCUxvYWRMaW5lYXJpemVkQWxsQ3Jvc3NSZWZWNShGWF9GSUxFU0laRSBwb3MpOw0KLQ0KLSAgICBGWF9EV09SRAkJCUxvYWRMaW5lYXJpemVkTWFpblhSZWZUYWJsZSgpOw0KLQ0KLSAgICBDRlhfTWFwUHRyVG9QdHIJCW1fT2JqZWN0U3RyZWFtTWFwOw0KLQ0KLSAgICBDUERGX1N0cmVhbUFjYyoJCUdldE9iamVjdFN0cmVhbShGWF9EV09SRCBudW1iZXIpOw0KLQ0KLSAgICBGWF9CT09MCQkJCUlzTGluZWFyaXplZEZpbGUoSUZYX0ZpbGVSZWFkKiBwRmlsZUFjY2VzcywgRlhfRFdPUkQgb2Zmc2V0KTsNCi0NCi0NCi0NCi0gICAgaW50CQkJCQltX0ZpbGVWZXJzaW9uOw0KLQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqCW1fcFRyYWlsZXI7DQotDQotICAgIENQREZfRGljdGlvbmFyeSoJbV9wRW5jcnlwdERpY3Q7DQotICAgIHZvaWQgU2V0RW5jcnlwdERpY3Rpb25hcnkoQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCk7DQotDQotICAgIEZYX0ZJTEVTSVpFCQkJbV9MYXN0WFJlZk9mZnNldDsNCi0NCi0gICAgRlhfQk9PTAkJCQltX2JYUmVmU3RyZWFtOw0KLQ0KLQ0KLSAgICBDUERGX1NlY3VyaXR5SGFuZGxlcioJbV9wU2VjdXJpdHlIYW5kbGVyOw0KLQ0KLSAgICBGWF9CT09MCQkJCQltX2JGb3JjZVVzZVNlY3VyaXR5SGFuZGxlcjsNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcJCQltX2JzUmVjaXBpZW50Ow0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZwkJbV9GaWxlUGF0aDsNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcJCW1fUGFzc3dvcmQ7DQotDQotICAgIENGWF9GaWxlU2l6ZUFycmF5CW1fQ3Jvc3NSZWY7DQotDQotICAgIENGWF9CeXRlQXJyYXkJCW1fVjVUeXBlOw0KLQ0KLSAgICBDRlhfRmlsZVNpemVBcnJheQltX1NvcnRlZE9mZnNldDsNCi0NCi0gICAgQ0ZYX1dvcmRBcnJheQkJbV9PYmpWZXJzaW9uOw0KLSAgICBDRlhfQXJyYXlUZW1wbGF0ZTxDUERGX0RpY3Rpb25hcnkgKj4JbV9UcmFpbGVyczsNCi0NCi0gICAgRlhfQk9PTAkJCQltX2JWZXJzaW9uVXBkYXRlZDsNCi0NCi0gICAgQ1BERl9PYmplY3QqCQltX3BMaW5lYXJpemVkOw0KLQ0KLSAgICBGWF9EV09SRAkJCW1fZHdGaXJzdFBhZ2VObzsNCi0NCi0gICAgRlhfRFdPUkQJCQltX2R3WHJlZlN0YXJ0T2JqTnVtOw0KLSAgICBmcmllbmQgY2xhc3MJCUNQREZfQ3JlYXRvcjsNCi0gICAgZnJpZW5kIGNsYXNzCQlDUERGX0RhdGFBdmFpbDsNCi19Ow0KLSNkZWZpbmUgRlhDSVBIRVJfTk9ORQkwDQotI2RlZmluZSBGWENJUEhFUl9SQzQJMQ0KLSNkZWZpbmUgRlhDSVBIRVJfQUVTCTINCi0jZGVmaW5lIEZYQ0lQSEVSX0FFUzIgICAzDQotY2xhc3MgQ1BERl9TZWN1cml0eUhhbmRsZXIgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHZpcnR1YWwgfkNQREZfU2VjdXJpdHlIYW5kbGVyKCkge30NCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQlPbkluaXQoQ1BERl9QYXJzZXIqIHBQYXJzZXIsIENQREZfRGljdGlvbmFyeSogcEVuY3J5cHREaWN0KSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfRFdPUkQJR2V0UGVybWlzc2lvbnMoKSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJSXNPd25lcigpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQlHZXRDcnlwdEluZm8oaW50JiBjaXBoZXIsIEZYX0xQQ0JZVEUmIGJ1ZmZlciwgaW50JiBrZXlsZW4pID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQlJc01ldGFkYXRhRW5jcnlwdGVkKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0NCi0gICAgdmlydHVhbCBDUERGX0NyeXB0b0hhbmRsZXIqCUNyZWF0ZUNyeXB0b0hhbmRsZXIoKSA9IDA7DQotDQotICAgIHZpcnR1YWwgQ1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlciogR2V0U3RhbmRhcmRIYW5kbGVyKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi19Ow0KLSNkZWZpbmUgUERGX0VOQ1JZUFRfQ09OVEVOVAkJCQkwDQotY2xhc3MgQ1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlciA6IHB1YmxpYyBDUERGX1NlY3VyaXR5SGFuZGxlcg0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfU3RhbmRhcmRTZWN1cml0eUhhbmRsZXIoKTsNCi0NCi0gICAgdmlydHVhbCB+Q1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcigpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCU9uSW5pdChDUERGX1BhcnNlciogcFBhcnNlciwgQ1BERl9EaWN0aW9uYXJ5KiBwRW5jcnlwdERpY3QpOw0KLSAgICB2aXJ0dWFsIEZYX0RXT1JECUdldFBlcm1pc3Npb25zKCk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJSXNPd25lcigpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX2JPd25lcjsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCUdldENyeXB0SW5mbyhpbnQmIGNpcGhlciwgRlhfTFBDQllURSYgYnVmZmVyLCBpbnQmIGtleWxlbik7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJSXNNZXRhZGF0YUVuY3J5cHRlZCgpOw0KLSAgICB2aXJ0dWFsIENQREZfQ3J5cHRvSGFuZGxlcioJQ3JlYXRlQ3J5cHRvSGFuZGxlcigpOw0KLSAgICB2aXJ0dWFsIENQREZfU3RhbmRhcmRTZWN1cml0eUhhbmRsZXIqIEdldFN0YW5kYXJkSGFuZGxlcigpDQotICAgIHsNCi0gICAgICAgIHJldHVybiB0aGlzOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJT25DcmVhdGUoQ1BERl9EaWN0aW9uYXJ5KiBwRW5jcnlwdERpY3QsIENQREZfQXJyYXkqIHBJZEFycmF5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgdXNlcl9wYXNzLCBGWF9EV09SRCB1c2VyX3NpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBDQllURSBvd25lcl9wYXNzLCBGWF9EV09SRCBvd25lcl9zaXplLCBGWF9EV09SRCB0eXBlID0gUERGX0VOQ1JZUFRfQ09OVEVOVCk7DQotDQotICAgIHZvaWQJCQkJT25DcmVhdGUoQ1BERl9EaWN0aW9uYXJ5KiBwRW5jcnlwdERpY3QsIENQREZfQXJyYXkqIHBJZEFycmF5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgdXNlcl9wYXNzLCBGWF9EV09SRCB1c2VyX3NpemUsIEZYX0RXT1JEIHR5cGUgPSBQREZfRU5DUllQVF9DT05URU5UKTsNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcJCUdldFVzZXJQYXNzd29yZChGWF9MUENCWVRFIG93bmVyX3Bhc3MsIEZYX0RXT1JEIHBhc3Nfc2l6ZSk7DQotICAgIENGWF9CeXRlU3RyaW5nCQlHZXRVc2VyUGFzc3dvcmQoRlhfTFBDQllURSBvd25lcl9wYXNzLCBGWF9EV09SRCBwYXNzX3NpemUsIEZYX0lOVDMyIGtleV9sZW4pOw0KLSAgICBpbnQJCQkJCUdldFZlcnNpb24oKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9WZXJzaW9uOw0KLSAgICB9DQotICAgIGludAkJCQkJR2V0UmV2aXNpb24oKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9SZXZpc2lvbjsNCi0gICAgfQ0KLQ0KLSAgICBpbnQJCQkJCUNoZWNrUGFzc3dvcmQoRlhfTFBDQllURSBwYXNzd29yZCwgRlhfRFdPUkQgcGFzc19zaXplLCBGWF9CT09MIGJPd25lciwgRlhfTFBCWVRFIGtleSk7DQotICAgIGludAkJCQkJQ2hlY2tQYXNzd29yZChGWF9MUENCWVRFIHBhc3N3b3JkLCBGWF9EV09SRCBwYXNzX3NpemUsIEZYX0JPT0wgYk93bmVyLCBGWF9MUEJZVEUga2V5LCBpbnQga2V5X2xlbik7DQotcHJpdmF0ZToNCi0NCi0gICAgaW50CQkJCQltX1ZlcnNpb247DQotDQotICAgIGludAkJCQkJbV9SZXZpc2lvbjsNCi0NCi0gICAgQ1BERl9QYXJzZXIqCQltX3BQYXJzZXI7DQotDQotICAgIENQREZfRGljdGlvbmFyeSoJbV9wRW5jcnlwdERpY3Q7DQotDQotICAgIEZYX0JPT0wJCQkJTG9hZERpY3QoQ1BERl9EaWN0aW9uYXJ5KiBwRW5jcnlwdERpY3QpOw0KLSAgICBGWF9CT09MCQkJCUxvYWREaWN0KENQREZfRGljdGlvbmFyeSogcEVuY3J5cHREaWN0LCBGWF9EV09SRCB0eXBlLCBpbnQmIGNpcGhlciwgaW50JiBrZXlfbGVuKTsNCi0NCi0gICAgRlhfQk9PTAkJCQlDaGVja1VzZXJQYXNzd29yZChGWF9MUENCWVRFIHBhc3N3b3JkLCBGWF9EV09SRCBwYXNzX3NpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiSWdub3JlRW5jcnlwdE1ldGEsIEZYX0xQQllURSBrZXksIEZYX0lOVDMyIGtleV9sZW4pOw0KLQ0KLSAgICBGWF9CT09MCQkJCUNoZWNrT3duZXJQYXNzd29yZChGWF9MUENCWVRFIHBhc3N3b3JkLCBGWF9EV09SRCBwYXNzX3NpemUsIEZYX0xQQllURSBrZXksIEZYX0lOVDMyIGtleV9sZW4pOw0KLSAgICBGWF9CT09MCQkJCUFFUzI1Nl9DaGVja1Bhc3N3b3JkKEZYX0xQQ0JZVEUgcGFzc3dvcmQsIEZYX0RXT1JEIHNpemUsIEZYX0JPT0wgYk93bmVyLCBGWF9MUEJZVEUga2V5KTsNCi0gICAgdm9pZAkJCQlBRVMyNTZfU2V0UGFzc3dvcmQoQ1BERl9EaWN0aW9uYXJ5KiBwRW5jcnlwdERpY3QsIEZYX0xQQ0JZVEUgcGFzc3dvcmQsIEZYX0RXT1JEIHNpemUsIEZYX0JPT0wgYk93bmVyLCBGWF9MUENCWVRFIGtleSk7DQotICAgIHZvaWQJCQkJQUVTMjU2X1NldFBlcm1zKENQREZfRGljdGlvbmFyeSogcEVuY3J5cHREaWN0LCBGWF9EV09SRCBwZXJtaXNzaW9uLCBGWF9CT09MIGJFbmNyeXB0TWV0YWRhdGEsIEZYX0xQQ0JZVEUga2V5KTsNCi0gICAgdm9pZAkJCQlPbkNyZWF0ZShDUERGX0RpY3Rpb25hcnkqIHBFbmNyeXB0RGljdCwgQ1BERl9BcnJheSogcElkQXJyYXksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBDQllURSB1c2VyX3Bhc3MsIEZYX0RXT1JEIHVzZXJfc2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUENCWVRFIG93bmVyX3Bhc3MsIEZYX0RXT1JEIG93bmVyX3NpemUsIEZYX0JPT0wgYkRlZmF1bHQsIEZYX0RXT1JEIHR5cGUpOw0KLSAgICBGWF9CT09MCQkJCUNoZWNrU2VjdXJpdHkoRlhfSU5UMzIga2V5X2xlbik7DQotDQotICAgIEZYX0JPT0wJCQkJbV9iT3duZXI7DQotDQotICAgIEZYX0RXT1JECQkJbV9QZXJtaXNzaW9uczsNCi0NCi0gICAgaW50CQkJCQltX0NpcGhlcjsNCi0NCi0gICAgRlhfQllURQkJCQltX0VuY3J5cHRLZXlbMzJdOw0KLQ0KLSAgICBpbnQJCQkJCW1fS2V5TGVuOw0KLX07DQotY2xhc3MgQ1BERl9DcnlwdG9IYW5kbGVyIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICB2aXJ0dWFsIH5DUERGX0NyeXB0b0hhbmRsZXIoKSB7fQ0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCUluaXQoQ1BERl9EaWN0aW9uYXJ5KiBwRW5jcnlwdERpY3QsIENQREZfU2VjdXJpdHlIYW5kbGVyKiBwU2VjdXJpdHlIYW5kbGVyKSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfRFdPUkQJRGVjcnlwdEdldFNpemUoRlhfRFdPUkQgc3JjX3NpemUpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9MUFZPSUQJRGVjcnlwdFN0YXJ0KEZYX0RXT1JEIG9iam51bSwgRlhfRFdPUkQgZ2VubnVtKSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJRGVjcnlwdFN0cmVhbShGWF9MUFZPSUQgY29udGV4dCwgRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQlEZWNyeXB0RmluaXNoKEZYX0xQVk9JRCBjb250ZXh0LCBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1ZikgPSAwOw0KLQ0KLQ0KLSAgICB2aXJ0dWFsIEZYX0RXT1JECUVuY3J5cHRHZXRTaXplKEZYX0RXT1JEIG9iam51bSwgRlhfRFdPUkQgdmVyc2lvbiwgRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCUVuY3J5cHRDb250ZW50KEZYX0RXT1JEIG9iam51bSwgRlhfRFdPUkQgdmVyc2lvbiwgRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpID0gMDsNCi0NCi0gICAgdm9pZAkJCQlEZWNyeXB0KEZYX0RXT1JEIG9iam51bSwgRlhfRFdPUkQgdmVyc2lvbiwgQ0ZYX0J5dGVTdHJpbmcmIHN0cik7DQotfTsNCi1jbGFzcyBDUERGX1N0YW5kYXJkQ3J5cHRvSGFuZGxlciA6IHB1YmxpYyBDUERGX0NyeXB0b0hhbmRsZXINCi17DQotcHVibGljOg0KLQ0KLSAgICBDUERGX1N0YW5kYXJkQ3J5cHRvSGFuZGxlcigpOw0KLQ0KLSAgICB2aXJ0dWFsIH5DUERGX1N0YW5kYXJkQ3J5cHRvSGFuZGxlcigpOw0KLQ0KLSAgICBGWF9CT09MCQkJCUluaXQoaW50IGNpcGhlciwgRlhfTFBDQllURSBrZXksIGludCBrZXlsZW4pOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCUluaXQoQ1BERl9EaWN0aW9uYXJ5KiBwRW5jcnlwdERpY3QsIENQREZfU2VjdXJpdHlIYW5kbGVyKiBwU2VjdXJpdHlIYW5kbGVyKTsNCi0gICAgdmlydHVhbCBGWF9EV09SRAlEZWNyeXB0R2V0U2l6ZShGWF9EV09SRCBzcmNfc2l6ZSk7DQotICAgIHZpcnR1YWwgRlhfTFBWT0lECURlY3J5cHRTdGFydChGWF9EV09SRCBvYmpudW0sIEZYX0RXT1JEIGdlbm51bSk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJRGVjcnlwdFN0cmVhbShGWF9MUFZPSUQgY29udGV4dCwgRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCURlY3J5cHRGaW5pc2goRlhfTFBWT0lEIGNvbnRleHQsIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKTsNCi0gICAgdmlydHVhbCBGWF9EV09SRAlFbmNyeXB0R2V0U2l6ZShGWF9EV09SRCBvYmpudW0sIEZYX0RXT1JEIHZlcnNpb24sIEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCUVuY3J5cHRDb250ZW50KEZYX0RXT1JEIG9iam51bSwgRlhfRFdPUkQgdmVyc2lvbiwgRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpOw0KLXByb3RlY3RlZDoNCi0NCi0gICAgdmlydHVhbCB2b2lkCQlDcnlwdEJsb2NrKEZYX0JPT0wgYkVuY3J5cHQsIEZYX0RXT1JEIG9iam51bSwgRlhfRFdPUkQgZ2VubnVtLCBGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3RfYnVmLCBGWF9EV09SRCYgZGVzdF9zaXplKTsNCi0gICAgdmlydHVhbCBGWF9MUFZPSUQJQ3J5cHRTdGFydChGWF9EV09SRCBvYmpudW0sIEZYX0RXT1JEIGdlbm51bSwgRlhfQk9PTCBiRW5jcnlwdCk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJQ3J5cHRTdHJlYW0oRlhfTFBWT0lEIGNvbnRleHQsIEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmLCBGWF9CT09MIGJFbmNyeXB0KTsNCi0gICAgdmlydHVhbCBGWF9CT09MCQlDcnlwdEZpbmlzaChGWF9MUFZPSUQgY29udGV4dCwgQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYsIEZYX0JPT0wgYkVuY3J5cHQpOw0KLQ0KLSAgICBGWF9CWVRFCQkJCW1fRW5jcnlwdEtleVszMl07DQotDQotICAgIGludAkJCQkJbV9LZXlMZW47DQotDQotICAgIGludAkJCQkJbV9DaXBoZXI7DQotDQotICAgIEZYX0xQQllURQkJCW1fcEFFU0NvbnRleHQ7DQotfTsNCi1jbGFzcyBDUERGX1BvaW50IDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDUERGX1BvaW50KEZYX0ZMT0FUIHh4LCBGWF9GTE9BVCB5eSkNCi0gICAgew0KLSAgICAgICAgeCA9IHh4Ow0KLSAgICAgICAgeSA9IHl5Ow0KLSAgICB9DQotDQotICAgIEZYX0ZMT0FUCQkJeDsNCi0NCi0gICAgRlhfRkxPQVQJCQl5Ow0KLX07DQotDQotI2RlZmluZSBDUERGX1JlY3QJCUNGWF9GbG9hdFJlY3QNCi0jZGVmaW5lIENQREZfTWF0cml4CQlDRlhfQWZmaW5lTWF0cml4DQotQ0ZYX0J5dGVTdHJpbmcgUERGX05hbWVEZWNvZGUoRlhfQlNUUiBvcmlnKTsNCi1DRlhfQnl0ZVN0cmluZyBQREZfTmFtZURlY29kZShjb25zdCBDRlhfQnl0ZVN0cmluZyYgb3JpZyk7DQotQ0ZYX0J5dGVTdHJpbmcgUERGX05hbWVFbmNvZGUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG9yaWcpOw0KLUNGWF9CeXRlU3RyaW5nIFBERl9FbmNvZGVTdHJpbmcoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNyYywgRlhfQk9PTCBiSGV4ID0gRkFMU0UpOw0KLUNGWF9XaWRlU3RyaW5nIFBERl9EZWNvZGVUZXh0KGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIsIENGWF9DaGFyTWFwKiBwQ2hhck1hcCA9IE5VTEwpOw0KLUNGWF9XaWRlU3RyaW5nIFBERl9EZWNvZGVUZXh0KEZYX0xQQ0JZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUsIENGWF9DaGFyTWFwKiBwQ2hhck1hcCA9IE5VTEwpOw0KLUNGWF9CeXRlU3RyaW5nIFBERl9FbmNvZGVUZXh0KEZYX0xQQ1dTVFIgcFN0cmluZywgaW50IGxlbiA9IC0xLCBDRlhfQ2hhck1hcCogcENoYXJNYXAgPSBOVUxMKTsNCi1GWF9GTE9BVCBQREZfQ2xpcEZsb2F0KEZYX0ZMT0FUIGYpOw0KLWNsYXNzIENGREZfRG9jdW1lbnQgOiBwdWJsaWMgQ1BERl9JbmRpcmVjdE9iamVjdHMNCi17DQotcHVibGljOg0KLQ0KLSAgICBzdGF0aWMgQ0ZERl9Eb2N1bWVudCoJQ3JlYXRlTmV3RG9jKCk7DQotDQotICAgIHN0YXRpYyBDRkRGX0RvY3VtZW50KglQYXJzZUZpbGUoRlhfTFBDU1RSIGZpbGVfcGF0aCk7DQotDQotICAgIHN0YXRpYyBDRkRGX0RvY3VtZW50KglQYXJzZUZpbGUoRlhfTFBDV1NUUiBmaWxlX3BhdGgpOw0KLQ0KLSAgICBzdGF0aWMgQ0ZERl9Eb2N1bWVudCoJUGFyc2VGaWxlKElGWF9GaWxlUmVhZCAqcEZpbGUsIEZYX0JPT0wgYk93bkZpbGUgPSBGQUxTRSk7DQotDQotICAgIHN0YXRpYyBDRkRGX0RvY3VtZW50KglQYXJzZU1lbW9yeShGWF9MUENCWVRFIHBEYXRhLCBGWF9EV09SRCBzaXplKTsNCi0NCi0gICAgfkNGREZfRG9jdW1lbnQoKTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJV3JpdGVGaWxlKEZYX0xQQ1NUUiBmaWxlX3BhdGgpIGNvbnN0Ow0KLQ0KLSAgICBGWF9CT09MCQkJCQlXcml0ZUZpbGUoRlhfTFBDV1NUUiBmaWxlX3BhdGgpIGNvbnN0Ow0KLQ0KLSAgICBGWF9CT09MCQkJCQlXcml0ZUZpbGUoSUZYX0ZpbGVXcml0ZSAqcEZpbGUpIGNvbnN0Ow0KLQ0KLSAgICBGWF9CT09MCQkJCQlXcml0ZUJ1ZihDRlhfQnl0ZVRleHRCdWYmIGJ1ZikgY29uc3Q7DQotDQotICAgIENQREZfRGljdGlvbmFyeSoJCUdldFJvb3QoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wUm9vdERpY3Q7DQotICAgIH0NCi0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcJCQlHZXRXaW4zMlBhdGgoKSBjb25zdDsNCi1wcm90ZWN0ZWQ6DQotDQotICAgIENGREZfRG9jdW1lbnQoKTsNCi0gICAgdm9pZAlQYXJzZVN0cmVhbShJRlhfRmlsZVJlYWQgKnBGaWxlLCBGWF9CT09MIGJPd25GaWxlKTsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KgkJbV9wUm9vdERpY3Q7DQotICAgIElGWF9GaWxlUmVhZCoJCQltX3BGaWxlOw0KLSAgICBGWF9CT09MCQkJCQltX2JPd25GaWxlOw0KLX07DQotDQotQ0ZYX1dpZGVTdHJpbmcJRlBERl9GaWxlU3BlY19HZXRXaW4zMlBhdGgoY29uc3QgQ1BERl9PYmplY3QqIHBGaWxlU3BlYyk7DQotdm9pZAkJCUZQREZfRmlsZVNwZWNfU2V0V2luMzJQYXRoKENQREZfT2JqZWN0KiBwRmlsZVNwZWMsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBmdWxscGF0aCk7DQotDQotdm9pZCBGbGF0ZUVuY29kZShjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSk7DQotRlhfRFdPUkQgRmxhdGVEZWNvZGUoY29uc3QgRlhfQllURSogc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpOw0KLUZYX0RXT1JEIFJ1bkxlbmd0aERlY29kZShjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSk7DQotY2xhc3MgQ1BERl9OdW1iZXJUcmVlIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDUERGX051bWJlclRyZWUoQ1BERl9EaWN0aW9uYXJ5KiBwUm9vdCkNCi0gICAgew0KLSAgICAgICAgbV9wUm9vdCA9IHBSb290Ow0KLSAgICB9DQotDQotICAgIENQREZfT2JqZWN0KgkJTG9va3VwVmFsdWUoaW50IG51bSk7DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqCW1fcFJvb3Q7DQotfTsNCi0NCi1jbGFzcyBJRlhfRmlsZUF2YWlsDQotew0KLXB1YmxpYzoNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJSXNEYXRhQXZhaWwoIEZYX0ZJTEVTSVpFIG9mZnNldCwgRlhfRFdPUkQgc2l6ZSkgPSAwOw0KLX07DQotY2xhc3MgSUZYX0Rvd25sb2FkSGludHMNCi17DQotcHVibGljOg0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQlBZGRTZWdtZW50KEZYX0ZJTEVTSVpFIG9mZnNldCwgRlhfRFdPUkQgc2l6ZSkgPSAwOw0KLX07DQotI2RlZmluZSBQREZfSVNfTElORUFSSVpFRAkJCTENCi0jZGVmaW5lIFBERl9OT1RfTElORUFSSVpFRAkJCTANCi0jZGVmaW5lIFBERl9VTktOT1dfTElORUFSSVpFRAkJLTENCi0jZGVmaW5lIFBERkZPUk1fTk9UQVZBSUwJCTANCi0jZGVmaW5lIFBERkZPUk1fQVZBSUwJCQkxDQotI2RlZmluZSBQREZGT1JNX05PVEVYSVNUCQkyDQotY2xhc3MgSVBERl9EYXRhQXZhaWwNCi17DQotcHVibGljOg0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQlJc0RvY0F2YWlsKElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpID0gMDsNCi0NCi0NCi0gICAgdmlydHVhbCB2b2lkCQkJU2V0RG9jdW1lbnQoQ1BERl9Eb2N1bWVudCogcERvYykgPSAwOw0KLQ0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQlJc1BhZ2VBdmFpbChpbnQgaVBhZ2UsIElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJSXNMaW5lYXJpemVkKCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0lOVDMyCQlJc0Zvcm1BdmFpbChJRlhfRG93bmxvYWRIaW50cyAqcEhpbnRzKSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfSU5UMzIJCUlzTGluZWFyaXplZFBERigpID0gMDsNCi0NCi0gICAgdmlydHVhbCB2b2lkCQkJCUdldExpbmVhcml6ZWRNYWluWFJlZkluZm8oRlhfRklMRVNJWkUgKnBQb3MsIEZYX0RXT1JEICpwU2l6ZSkgPSAwOw0KLX07DQotY2xhc3MgQ1BERl9Tb3J0T2JqTnVtQXJyYXkgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHZvaWQgQWRkT2JqTnVtKEZYX0RXT1JEIGR3T2JqTnVtKTsNCi0NCi0gICAgRlhfQk9PTCBGaW5kKEZYX0RXT1JEIGR3T2JqTnVtKTsNCi0NCi0gICAgdm9pZCBSZW1vdmVBbGwoKQ0KLSAgICB7DQotICAgICAgICBtX251bWJlcl9hcnJheS5SZW1vdmVBbGwoKTsNCi0gICAgfQ0KLXByb3RlY3RlZDoNCi0NCi0gICAgRlhfQk9PTCBCaW5hcnlTZWFyY2goRlhfRFdPUkQgdmFsdWUsIGludCAmaU5leHQpOw0KLXByb3RlY3RlZDoNCi0NCi0gICAgQ0ZYX0RXb3JkQXJyYXkJCQltX251bWJlcl9hcnJheTsNCi19Ow0KLWVudW0gUERGX1BBR0VOT0RFX1RZUEUgew0KLSAgICBQREZfUEFHRU5PREVfVU5LT1dOID0gMCwNCi0gICAgUERGX1BBR0VOT0RFX1BBR0UsDQotICAgIFBERl9QQUdFTk9ERV9QQUdFUywNCi0gICAgUERGX1BBR0VOT0RFX0FSUkFZLA0KLX07DQotY2xhc3MgQ1BERl9QYWdlTm9kZSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgQ1BERl9QYWdlTm9kZSgpIDogbV90eXBlKFBERl9QQUdFTk9ERV9VTktPV04pIHt9DQotICAgIH5DUERGX1BhZ2VOb2RlKCk7DQotICAgIFBERl9QQUdFTk9ERV9UWVBFCW1fdHlwZTsNCi0gICAgRlhfRFdPUkQJCQltX2R3UGFnZU5vOw0KLSAgICBDRlhfUHRyQXJyYXkJCW1fY2hpbGROb2RlOw0KLX07DQotZW51bSBQREZfREFUQUFWQUlMX1NUQVRVUyB7DQotICAgIFBERl9EQVRBQVZBSUxfSEVBREVSID0gMCwNCi0gICAgUERGX0RBVEFBVkFJTF9GSVJTVFBBR0UsDQotICAgIFBERl9EQVRBQVZBSUxfRklSU1RQQUdFX1BSRVBBUkUsDQotICAgIFBERl9EQVRBQVZBSUxfRU5ELA0KLSAgICBQREZfREFUQUFWQUlMX0NST1NTUkVGLA0KLSAgICBQREZfREFUQUFWQUlMX0NST1NTUkVGX0lURU0sDQotICAgIFBERl9EQVRBQVZBSUxfQ1JPU1NSRUZfU1RSRUFNLA0KLSAgICBQREZfREFUQUFWQUlMX1RSQUlMRVIsDQotICAgIFBERl9EQVRBQVZBSUxfTE9BREFMTENSU09TU1JFRiwNCi0gICAgUERGX0RBVEFBVkFJTF9ST09ULA0KLSAgICBQREZfREFUQUFWQUlMX0lORk8sDQotICAgIFBERl9EQVRBQVZBSUxfQUNST0ZPUk0sDQotICAgIFBERl9EQVRBQVZBSUxfQUNST0ZPUk1fU1VCT0JKRUNULA0KLSAgICBQREZfREFUQUFWQUlMX1BBR0VUUkVFLA0KLSAgICBQREZfREFUQUFWQUlMX1BBR0UsDQotICAgIFBERl9EQVRBQVZBSUxfUEFHRV9MQVRFUkxPQUQsDQotICAgIFBERl9EQVRBQVZBSUxfUkVTT1VSQ0VTLA0KLSAgICBQREZfREFUQUFWQUlMX0RPTkUsDQotICAgIFBERl9EQVRBQVZBSUxfRVJST1IsDQotICAgIFBERl9EQVRBQVZBSUxfTE9BREFMTEZJTEUsDQotICAgIFBERl9EQVRBQVZBSUxfVFJBSUxFUl9BUFBFTkQNCi19Ow0KLWNsYXNzIENQREZfRGF0YUF2YWlsIDogcHVibGljIENGWF9PYmplY3QsIHB1YmxpYyBJUERGX0RhdGFBdmFpbA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfRGF0YUF2YWlsKElGWF9GaWxlQXZhaWwqIHBGaWxlQXZhaWwsIElGWF9GaWxlUmVhZCogcEZpbGVSZWFkKTsNCi0gICAgfkNQREZfRGF0YUF2YWlsKCk7DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCQlJc0RvY0F2YWlsKElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpOw0KLQ0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQkJU2V0RG9jdW1lbnQoQ1BERl9Eb2N1bWVudCogcERvYyk7DQotDQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCQlJc1BhZ2VBdmFpbChpbnQgaVBhZ2UsIElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0lOVDMyCQkJSXNGb3JtQXZhaWwoSUZYX0Rvd25sb2FkSGludHMgKnBIaW50cyk7DQotDQotICAgIHZpcnR1YWwgRlhfSU5UMzIJCQlJc0xpbmVhcml6ZWRQREYoKTsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJCUlzTGluZWFyaXplZCgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX2JMaW5lYXJpemVkOw0KLSAgICB9DQotDQotICAgIHZpcnR1YWwgdm9pZAkJCQlHZXRMaW5lYXJpemVkTWFpblhSZWZJbmZvKEZYX0ZJTEVTSVpFICpwUG9zLCBGWF9EV09SRCAqcFNpemUpOw0KLSAgICBJRlhfRmlsZVJlYWQqCQkJCUdldEZpbGVSZWFkKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcEZpbGVSZWFkOw0KLSAgICB9DQotICAgIElGWF9GaWxlQXZhaWwqCQkJCUdldEZpbGVBdmFpbCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BGaWxlQXZhaWw7DQotICAgIH0NCi1wcm90ZWN0ZWQ6DQotICAgIEZYX0RXT1JECQkJCQlHZXRPYmplY3RTaXplKEZYX0RXT1JEIG9iam51bSwgRlhfRklMRVNJWkUmIG9mZnNldCk7DQotICAgIEZYX0JPT0wJCQkJCQlJc09iamVjdHNBdmFpbChDRlhfUHRyQXJyYXkmIG9ial9hcnJheSwgRlhfQk9PTCBiUGFyc2VQYWdlLCBJRlhfRG93bmxvYWRIaW50cyogcEhpbnRzLCBDRlhfUHRyQXJyYXkgJnJldF9hcnJheSk7DQotICAgIEZYX0JPT0wJCQkJCQlDaGVja0RvY1N0YXR1cyhJRlhfRG93bmxvYWRIaW50cyAqcEhpbnRzKTsNCi0gICAgRlhfQk9PTAkJCQkJCUNoZWNrSGVhZGVyKElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpOw0KLSAgICBGWF9CT09MCQkJCQkJQ2hlY2tGaXJzdFBhZ2UoSUZYX0Rvd25sb2FkSGludHMgKnBIaW50cyk7DQotICAgIEZYX0JPT0wJCQkJCQlDaGVja0VuZChJRlhfRG93bmxvYWRIaW50cyAqcEhpbnRzKTsNCi0gICAgRlhfQk9PTAkJCQkJCUNoZWNrQ3Jvc3NSZWYoSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cyk7DQotICAgIEZYX0JPT0wJCQkJCQlDaGVja0Nyb3NzUmVmSXRlbShJRlhfRG93bmxvYWRIaW50cyAqcEhpbnRzKTsNCi0gICAgRlhfQk9PTAkJCQkJCUNoZWNrVHJhaWxlcihJRlhfRG93bmxvYWRIaW50cyogcEhpbnRzKTsNCi0gICAgRlhfQk9PTAkJCQkJCUNoZWNrUm9vdChJRlhfRG93bmxvYWRIaW50cyogcEhpbnRzKTsNCi0gICAgRlhfQk9PTAkJCQkJCUNoZWNrSW5mbyhJRlhfRG93bmxvYWRIaW50cyogcEhpbnRzKTsNCi0gICAgRlhfQk9PTAkJCQkJCUNoZWNrUGFnZXMoSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cyk7DQotICAgIEZYX0JPT0wJCQkJCQlDaGVja1BhZ2UoSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cyk7DQotICAgIEZYX0JPT0wJCQkJCQlDaGVja1Jlc291cmNlcyhJRlhfRG93bmxvYWRIaW50cyogcEhpbnRzKTsNCi0gICAgRlhfQk9PTAkJCQkJCUNoZWNrQW5ub3RzKElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpOw0KLSAgICBGWF9CT09MCQkJCQkJQ2hlY2tBY3JvRm9ybShJRlhfRG93bmxvYWRIaW50cyogcEhpbnRzKTsNCi0gICAgRlhfQk9PTAkJCQkJCUNoZWNrQWNyb0Zvcm1TdWJPYmplY3QoSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cyk7DQotICAgIEZYX0JPT0wJCQkJCQlDaGVja1RyYWlsZXJBcHBlbmQoSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cyk7DQotICAgIEZYX0JPT0wJCQkJCQlDaGVja1BhZ2VTdGF0dXMoSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cyk7DQotICAgIEZYX0JPT0wJCQkJCQlDaGVja0FsbENyb3NzUmVmU3RyZWFtKElGWF9Eb3dubG9hZEhpbnRzICpwSGludHMpOw0KLQ0KLSAgICBGWF9EV09SRAkJCQkJQ2hlY2tDcm9zc1JlZlN0cmVhbShJRlhfRG93bmxvYWRIaW50cyAqcEhpbnRzLCBGWF9GSUxFU0laRSAmeHJlZl9vZmZzZXQpOw0KLSAgICBGWF9CT09MCQkJCQkJSXNMaW5lYXJpemVkRmlsZShGWF9MUEJZVEUgcERhdGEsIEZYX0RXT1JEIGR3TGVuKTsNCi0gICAgdm9pZAkJCQkJCVNldFN0YXJ0T2Zmc2V0KEZYX0ZJTEVTSVpFIGR3T2Zmc2V0KTsNCi0gICAgRlhfQk9PTAkJCQkJCUdldE5leHRUb2tlbihDRlhfQnl0ZVN0cmluZyAmdG9rZW4pOw0KLSAgICBGWF9CT09MCQkJCQkJR2V0TmV4dENoYXIoRlhfQllURSAmY2gpOw0KLSAgICBDUERGX09iamVjdAkqCQkJCVBhcnNlSW5kaXJlY3RPYmplY3RBdChGWF9GSUxFU0laRSBwb3MsIEZYX0RXT1JEIG9iam51bSk7DQotICAgIENQREZfT2JqZWN0CSoJCQkJR2V0T2JqZWN0KEZYX0RXT1JEIG9iam51bSwgSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cywgRlhfQk9PTCAqcEV4aXN0SW5GaWxlKTsNCi0gICAgRlhfQk9PTAkJCQkJCUdldFBhZ2VLaWRzKENQREZfUGFyc2VyICpwUGFyc2VyLCBDUERGX09iamVjdCAqcFBhZ2VzKTsNCi0gICAgRlhfQk9PTAkJCQkJCVByZXBhcmVQYWdlSXRlbSgpOw0KLSAgICBGWF9CT09MCQkJCQkJTG9hZFBhZ2VzKElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpOw0KLSAgICBGWF9CT09MCQkJCQkJTG9hZEFsbFhyZWYoSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cyk7DQotICAgIEZYX0JPT0wJCQkJCQlMb2FkQWxsRmlsZShJRlhfRG93bmxvYWRIaW50cyogcEhpbnRzKTsNCi0gICAgRlhfQk9PTAkJCQkJCUNoZWNrTGluZWFyaXplZERhdGEoSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cyk7DQotICAgIEZYX0JPT0wJCQkJCQlDaGVja0ZpbGVSZXNvdXJjZXMoSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cyk7DQotICAgIEZYX0JPT0wJCQkJCQlDaGVja1BhZ2VBbm5vdHMoaW50IGlQYWdlLCBJRlhfRG93bmxvYWRIaW50cyogcEhpbnRzKTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJCUNoZWNrTGluZWFyaXplZEZpcnN0UGFnZShpbnQgaVBhZ2UsIElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpOw0KLSAgICBGWF9CT09MCQkJCQkJSGF2ZVJlc291cmNlQW5jZXN0b3IoQ1BERl9EaWN0aW9uYXJ5ICpwRGljdCk7DQotICAgIEZYX0JPT0wJCQkJCQlDaGVja1BhZ2UoRlhfSU5UMzIgaVBhZ2UsIElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpOw0KLSAgICBGWF9CT09MCQkJCQkJTG9hZERvY1BhZ2VzKElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpOw0KLSAgICBGWF9CT09MCQkJCQkJTG9hZERvY1BhZ2UoRlhfSU5UMzIgaVBhZ2UsIElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpOw0KLSAgICBGWF9CT09MCQkJCQkJQ2hlY2tQYWdlTm9kZShDUERGX1BhZ2VOb2RlICZwYWdlTm9kZXMsIEZYX0lOVDMyIGlQYWdlLCBGWF9JTlQzMiAmaUNvdW50LCBJRlhfRG93bmxvYWRIaW50cyogcEhpbnRzKTsNCi0gICAgRlhfQk9PTAkJCQkJCUNoZWNrVW5rb3duUGFnZU5vZGUoRlhfRFdPUkQgZHdQYWdlTm8sIENQREZfUGFnZU5vZGUgKnBQYWdlTm9kZSwgSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cyk7DQotICAgIEZYX0JPT0wJCQkJCQlDaGVja0FycmF5UGFnZU5vZGUoRlhfRFdPUkQgZHdQYWdlTm8sIENQREZfUGFnZU5vZGUgKnBQYWdlTm9kZSwgSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cyk7DQotICAgIEZYX0JPT0wgICAgICAgICAgICAgICAgICAgICBDaGVja1BhZ2VDb3VudChJRlhfRG93bmxvYWRIaW50cyogcEhpbnRzKTsNCi0gICAgRlhfQk9PTAkJCQkJCUlzRmlyc3RDaGVjayhpbnQgaVBhZ2UpOw0KLSAgICB2b2lkCQkJCQkJUmVzZXRGaXJzdENoZWNrKGludCBpUGFnZSk7DQotDQotICAgIENQREZfUGFyc2VyCQkJCW1fcGFyc2VyOw0KLQ0KLSAgICBDUERGX1N5bnRheFBhcnNlcgkJbV9zeW50YXhQYXJzZXI7DQotDQotICAgIENQREZfT2JqZWN0CQkJCSptX3BSb290Ow0KLQ0KLSAgICBGWF9EV09SRAkJCQltX2R3Um9vdE9iak51bTsNCi0NCi0gICAgRlhfRFdPUkQJCQkJbV9kd0luZm9PYmpOdW07DQotDQotICAgIENQREZfT2JqZWN0CQkJCSptX3BMaW5lYXJpemVkOw0KLQ0KLSAgICBDUERGX09iamVjdAkJCQkqbV9wVHJhaWxlcjsNCi0NCi0gICAgRlhfQk9PTAkJCQkJbV9iRG9jQXZhaWw7DQotDQotICAgIEZYX0ZJTEVTSVpFCQkJCW1fZHdIZWFkZXJPZmZzZXQ7DQotDQotICAgIEZYX0ZJTEVTSVpFCQkJCW1fZHdMYXN0WFJlZk9mZnNldDsNCi0NCi0gICAgRlhfRklMRVNJWkUJCQkJbV9kd1hSZWZPZmZzZXQ7DQotDQotICAgIEZYX0ZJTEVTSVpFCQkJCW1fZHdUcmFpbGVyT2Zmc2V0Ow0KLQ0KLSAgICBGWF9GSUxFU0laRQkJCQltX2R3Q3VycmVudE9mZnNldDsNCi0NCi0gICAgUERGX0RBVEFBVkFJTF9TVEFUVVMJbV9kb2NTdGF0dXM7DQotDQotICAgIElGWF9GaWxlQXZhaWwqCQkJbV9wRmlsZUF2YWlsOw0KLQ0KLSAgICBJRlhfRmlsZVJlYWQqCQkJbV9wRmlsZVJlYWQ7DQotDQotICAgIEZYX0ZJTEVTSVpFCQkJCW1fZHdGaWxlTGVuOw0KLQ0KLSAgICBDUERGX0RvY3VtZW50KgkJCW1fcERvY3VtZW50Ow0KLQ0KLSAgICBDUERGX1NvcnRPYmpOdW1BcnJheQltX29iam51bV9hcnJheTsNCi0NCi0gICAgQ0ZYX1B0ckFycmF5CQkJbV9vYmpzX2FycmF5Ow0KLQ0KLSAgICBGWF9GSUxFU0laRQkJCQltX1BvczsNCi0NCi0gICAgRlhfRklMRVNJWkUJCQkJbV9idWZmZXJPZmZzZXQ7DQotDQotICAgIEZYX0RXT1JECQkJCW1fYnVmZmVyU2l6ZTsNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcJCQltX1dvcmRCdWY7DQotDQotICAgIEZYX0JZVEUJCQkJCW1fV29yZEJ1ZmZlclsyNTddOw0KLQ0KLSAgICBGWF9EV09SRAkJCQltX1dvcmRTaXplOw0KLQ0KLSAgICBGWF9CWVRFCQkJCQltX2J1ZmZlckRhdGFbNTEyXTsNCi0NCi0gICAgQ0ZYX0ZpbGVTaXplQXJyYXkJCW1fQ3Jvc3NPZmZzZXQ7DQotDQotICAgIENGWF9EV29yZEFycmF5CQkJbV9YUmVmU3RyZWFtTGlzdDsNCi0NCi0gICAgQ0ZYX0RXb3JkQXJyYXkJCQltX1BhZ2VPYmpMaXN0Ow0KLQ0KLSAgICBGWF9EV09SRAkJCQltX1BhZ2VzT2JqTnVtOw0KLQ0KLSAgICBGWF9CT09MCQkJCQltX2JMaW5lYXJpemVkOw0KLQ0KLSAgICBGWF9EV09SRAkJCQltX2R3Rmlyc3RQYWdlTm87DQotDQotICAgIEZYX0JPT0wJCQkJCW1fYkxpbmVhcmVkRGF0YU9LOw0KLQ0KLSAgICBGWF9CT09MCQkJCQltX2JNYWluWFJlZkxvYWQ7DQotDQotICAgIEZYX0JPT0wJCQkJCW1fYk1haW5YUmVmTG9hZGVkT0s7DQotDQotICAgIEZYX0JPT0wJCQkJCW1fYlBhZ2VzVHJlZUxvYWQ7DQotDQotICAgIEZYX0JPT0wJCQkJCW1fYlBhZ2VzTG9hZDsNCi0NCi0gICAgQ1BERl9QYXJzZXIgKgkJCW1fcEN1cnJlbnRQYXJzZXI7DQotDQotICAgIEZYX0ZJTEVTSVpFCQkJCW1fZHdDdXJyZW50WFJlZlN0ZWFtOw0KLQ0KLSAgICBGWF9CT09MCQkJCQltX2JBbm5vdHNMb2FkOw0KLQ0KLSAgICBGWF9CT09MCQkJCQltX2JIYXZlQWNyb0Zvcm07DQotDQotICAgIEZYX0RXT1JECQkJCW1fZHdBY3JvRm9ybU9iak51bTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJbV9iQWNyb0Zvcm1Mb2FkOw0KLQ0KLSAgICBDUERGX09iamVjdAkqCQkJbV9wQWNyb0Zvcm07DQotDQotICAgIENGWF9QdHJBcnJheQkJCW1fYXJyYXlBY3JvZm9ybXM7DQotDQotICAgIENQREZfRGljdGlvbmFyeSAqCQltX3BQYWdlRGljdDsNCi0NCi0gICAgQ1BERl9PYmplY3QgKgkJCW1fcFBhZ2VSZXNvdXJjZTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJbV9iTmVlZERvd25Mb2FkUmVzb3VyY2U7DQotDQotICAgIEZYX0JPT0wJCQkJCW1fYlBhZ2VMb2FkZWRPSzsNCi0NCi0gICAgRlhfQk9PTAkJCQkJbV9iTGluZWFyaXplZEZvcm1QYXJhbUxvYWQ7DQotDQotICAgIENGWF9QdHJBcnJheQkJCW1fUGFnZXNBcnJheTsNCi0NCi0gICAgRlhfRFdPUkQJCQkJbV9kd0VuY3J5cHRPYmpOdW07DQotDQotICAgIEZYX0ZJTEVTSVpFCQkJCW1fZHdQcmV2WFJlZk9mZnNldDsNCi0NCi0gICAgRlhfQk9PTAkJCQkJbV9iVG90YWxMb2FkUGFnZVRyZWU7DQotDQotICAgIEZYX0JPT0wJCQkJCW1fYkN1clBhZ2VEaWN0TG9hZE9LOw0KLQ0KLSAgICBDUERGX1BhZ2VOb2RlCQkJbV9wYWdlTm9kZXM7DQotDQotICAgIENGWF9DTWFwRFdvcmRUb0RXb3JkICoJbV9wYWdlTWFwQ2hlY2tTdGF0ZTsNCi0NCi0gICAgQ0ZYX0NNYXBEV29yZFRvRFdvcmQgKgltX3BhZ2VzTG9hZFN0YXRlOw0KLX07DQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlBERl9QQVJTRVJfCisjZGVmaW5lIF9GUERGX1BBUlNFUl8KKyNpZm5kZWYgX0ZYX0JBU0lDX0hfCisjaW5jbHVkZSAiLi4vZnhjcnQvZnhfZXh0LmgiCisjZW5kaWYKKyNpZm5kZWYgX0ZQREZfT0JKRUNUU18KKyNpbmNsdWRlICJmcGRmX29iamVjdHMuaCIKKyNlbmRpZgorY2xhc3MgQ1BERl9Eb2N1bWVudDsKK2NsYXNzIElQREZfRG9jUGFyc2VyOworY2xhc3MgQ1BERl9QYXJzZXI7CitjbGFzcyBDUERGX1NlY3VyaXR5SGFuZGxlcjsKK2NsYXNzIENQREZfU3RhbmRhcmRTZWN1cml0eUhhbmRsZXI7CitjbGFzcyBDUERGX0NyeXB0b0hhbmRsZXI7CitjbGFzcyBDUERGX09iamVjdDsKK2NsYXNzIElGWF9GaWxlUmVhZDsKK2NsYXNzIENGREZfRG9jdW1lbnQ7CitjbGFzcyBDRkRGX1BhcnNlcjsKK2NsYXNzIENGWF9Gb250OworY2xhc3MgQ0ZYX0FmZmluZU1hdHJpeDsKK2NsYXNzIENGWF9GbG9hdFJlY3Q7CitjbGFzcyBDUERGX1BvaW50OworY2xhc3MgQ1BERl9Eb2NQYWdlRGF0YTsKK2NsYXNzIENQREZfRG9jUmVuZGVyRGF0YTsKK2NsYXNzIENQREZfTW9kdWxlTWdyOworY2xhc3MgQ0ZYX0RJQlNvdXJjZTsKK2NsYXNzIENQREZfRm9udDsKK2NsYXNzIENQREZfSW1hZ2U7CitjbGFzcyBDUERGX0NvbG9yU3BhY2U7CitjbGFzcyBDUERGX1BhdHRlcm47CitjbGFzcyBDUERGX0ZvbnRFbmNvZGluZzsKK2NsYXNzIENQREZfSWNjUHJvZmlsZTsKK2NsYXNzIENGWF9Qcml2YXRlRGF0YTsKKyNkZWZpbmUgRlBERlBFUk1fUFJJTlQJCQkweDAwMDQKKyNkZWZpbmUgRlBERlBFUk1fTU9ESUZZCQkJMHgwMDA4CisjZGVmaW5lIEZQREZQRVJNX0VYVFJBQ1QJCTB4MDAxMAorI2RlZmluZSBGUERGUEVSTV9BTk5PVF9GT1JNCQkweDAwMjAKKyNkZWZpbmUgRlBERlBFUk1fRklMTF9GT1JNCQkweDAxMDAKKyNkZWZpbmUgRlBERlBFUk1fRVhUUkFDVF9BQ0NFU1MJMHgwMjAwCisjZGVmaW5lIEZQREZQRVJNX0FTU0VNQkxFCQkweDA0MDAKKyNkZWZpbmUgRlBERlBFUk1fUFJJTlRfSElHSAkJMHgwODAwCisjZGVmaW5lIEZQREZfUEFHRV9NQVhfTlVNCQkweEZGRkZGCitjbGFzcyBJUERGX0VudW1QYWdlSGFuZGxlcgoreworcHVibGljOgorCisgICAgdmlydHVhbCBGWF9CT09MIEVudW1QYWdlKENQREZfRGljdGlvbmFyeSogcFBhZ2VEaWN0KSA9IDA7Cit9OworY2xhc3MgQ1BERl9Eb2N1bWVudCA6IHB1YmxpYyBDRlhfUHJpdmF0ZURhdGEsIHB1YmxpYyBDUERGX0luZGlyZWN0T2JqZWN0cworeworcHVibGljOgorCisgICAgQ1BERl9Eb2N1bWVudChJUERGX0RvY1BhcnNlciogcFBhcnNlcik7CisKKyAgICBDUERGX0RvY3VtZW50KCk7CisKKyAgICB+Q1BERl9Eb2N1bWVudCgpOworCisgICAgSVBERl9Eb2NQYXJzZXIqCQkJR2V0UGFyc2VyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BQYXJzZXI7CisgICAgfQorCisgICAgQ1BERl9EaWN0aW9uYXJ5KgkJR2V0Um9vdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wUm9vdERpY3Q7CisgICAgfQorCisgICAgQ1BERl9EaWN0aW9uYXJ5KgkJR2V0SW5mbygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wSW5mb0RpY3Q7CisgICAgfQorCisgICAgdm9pZAkJCQkJR2V0SUQoQ0ZYX0J5dGVTdHJpbmcmIGlkMSwgQ0ZYX0J5dGVTdHJpbmcmIGlkMikgY29uc3QKKyAgICB7CisgICAgICAgIGlkMSA9IG1fSUQxOworICAgICAgICBpZDIgPSBtX0lEMjsKKyAgICB9CisKKyAgICBpbnQJCQkJCQlHZXRQYWdlQ291bnQoKSBjb25zdDsKKworICAgIENQREZfRGljdGlvbmFyeSoJCUdldFBhZ2UoaW50IGlQYWdlKTsKKworICAgIGludAkJCQkJCUdldFBhZ2VJbmRleChGWF9EV09SRCBvYmpudW0pOworCisgICAgdm9pZAkJCQkJRW51bVBhZ2VzKElQREZfRW51bVBhZ2VIYW5kbGVyKiBwSGFuZGxlcik7CisKKyAgICBGWF9EV09SRAkJCQlHZXRVc2VyUGVybWlzc2lvbnMoRlhfQk9PTCBiQ2hlY2tSZXZpc2lvbiA9IEZBTFNFKSBjb25zdDsKKworICAgIEZYX0JPT0wJCQkJCUlzT3duZXIoKSBjb25zdDsKKworCisKKyAgICBDUERGX0RvY1BhZ2VEYXRhKgkJR2V0UGFnZURhdGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldFZhbGlkYXRlUGFnZURhdGEoKTsKKyAgICB9CisKKyAgICB2b2lkCQkJCQlDbGVhclBhZ2VEYXRhKCk7CisKKyAgICB2b2lkCQkJCQlSZW1vdmVDb2xvclNwYWNlRnJvbVBhZ2VEYXRhKENQREZfT2JqZWN0KiBwT2JqZWN0KTsKKworCisgICAgQ1BERl9Eb2NSZW5kZXJEYXRhKgkJR2V0UmVuZGVyRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gR2V0VmFsaWRhdGVSZW5kZXJEYXRhKCk7CisgICAgfQorCisgICAgdm9pZAkJCQkJQ2xlYXJSZW5kZXJEYXRhKCk7CisKKyAgICB2b2lkCQkJCQlDbGVhclJlbmRlckZvbnQoKTsKKworCisgICAgRlhfQk9PTAkJCQkJSXNGb3JtU3RyZWFtKEZYX0RXT1JEIG9iam51bSwgRlhfQk9PTCYgYkZvcm0pIGNvbnN0OworCisKKworCisgICAgQ1BERl9Gb250KgkJCQlMb2FkRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb250RGljdCk7CisKKyAgICBDUERGX0ZvbnQqCQkJCUZpbmRGb250KENQREZfRGljdGlvbmFyeSogcEZvbnREaWN0KTsKKworICAgIENQREZfQ29sb3JTcGFjZSoJCUxvYWRDb2xvclNwYWNlKENQREZfT2JqZWN0KiBwQ1NPYmosIENQREZfRGljdGlvbmFyeSogcFJlc291cmNlcyA9IE5VTEwpOworCisgICAgQ1BERl9QYXR0ZXJuKgkJCUxvYWRQYXR0ZXJuKENQREZfT2JqZWN0KiBwT2JqLCBGWF9CT09MIGJTaGFkaW5nLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBtYXRyaXggPSBOVUxMKTsKKworICAgIENQREZfSW1hZ2UqCQkJCUxvYWRJbWFnZUYoQ1BERl9PYmplY3QqIHBPYmopOworCisgICAgQ1BERl9TdHJlYW1BY2MqCQkJTG9hZEZvbnRGaWxlKENQREZfU3RyZWFtKiBwU3RyZWFtKTsKKworICAgIENQREZfSWNjUHJvZmlsZSoJCUxvYWRJY2NQcm9maWxlKENQREZfU3RyZWFtKiBwU3RyZWFtLCBpbnQgbkNvbXBvbmVudHMpOworCisjaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXworCisgICAgQ1BERl9Gb250KgkJCQlBZGRXaW5kb3dzRm9udChMT0dGT05UQSogcExvZ0ZvbnQsIEZYX0JPT0wgYlZlcnQsIEZYX0JPT0wgYlRyYW5zbGF0ZU5hbWUgPSBGQUxTRSk7CisgICAgQ1BERl9Gb250KgkJCQlBZGRXaW5kb3dzRm9udChMT0dGT05UVyogcExvZ0ZvbnQsIEZYX0JPT0wgYlZlcnQsIEZYX0JPT0wgYlRyYW5zbGF0ZU5hbWUgPSBGQUxTRSk7CisjZW5kaWYKKyNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXworICAgIENQREZfRm9udCogICAgICAgICAgICAgIEFkZE1hY0ZvbnQoQ1RGb250UmVmIHBGb250LCBGWF9CT09MIGJWZXJ0LCBGWF9CT09MIGJUcmFuc2xhdGVOYW1lID0gRkFMU0UpOworI2VuZGlmCisKKyAgICBDUERGX0ZvbnQqCQkJCUFkZFN0YW5kYXJkRm9udChjb25zdCBGWF9DSEFSKiBmb250LCBDUERGX0ZvbnRFbmNvZGluZyogcEVuY29kaW5nKTsKKworCisgICAgQ1BERl9Gb250KgkJCQlBZGRGb250KENGWF9Gb250KiBwRm9udCwgaW50IGNoYXJzZXQsIEZYX0JPT0wgYlZlcnQpOworCisgICAgdm9pZAkJCQkJQ3JlYXRlTmV3RG9jKCk7CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCQlDcmVhdGVOZXdQYWdlKGludCBpUGFnZSk7CisKKyAgICB2b2lkCQkJCQlEZWxldGVQYWdlKGludCBpUGFnZSk7CisKKyAgICB2b2lkCQkJCQlMb2FkRG9jKCk7CisgICAgdm9pZAkJCQkJTG9hZEFzeW5Eb2MoQ1BERl9EaWN0aW9uYXJ5ICpwTGluZWFyaXplZCk7CisgICAgdm9pZAkJCQkJTG9hZFBhZ2VzKCk7Citwcm90ZWN0ZWQ6CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCQltX3BSb290RGljdDsKKworICAgIENQREZfRGljdGlvbmFyeSoJCW1fcEluZm9EaWN0OworCisgICAgQ0ZYX0J5dGVTdHJpbmcJCQltX0lEMTsKKworICAgIENGWF9CeXRlU3RyaW5nCQkJbV9JRDI7CisKKworICAgIEZYX0JPT0wJCQkJCW1fYkxpbmVhcml6ZWQ7CisKKyAgICBGWF9EV09SRAkJCQltX2R3Rmlyc3RQYWdlTm87CisKKyAgICBGWF9EV09SRAkJCQltX2R3Rmlyc3RQYWdlT2JqTnVtOworCisgICAgQ0ZYX0RXb3JkQXJyYXkJCQltX1BhZ2VMaXN0OworCisgICAgaW50CQkJCQkJX0dldFBhZ2VDb3VudCgpIGNvbnN0OworICAgIENQREZfRGljdGlvbmFyeSoJCV9GaW5kUERGUGFnZShDUERGX0RpY3Rpb25hcnkqIHBQYWdlcywgaW50IGlQYWdlLCBpbnQgblBhZ2VzVG9HbywgaW50IGxldmVsKTsKKyAgICBpbnQJCQkJCQlfRmluZFBhZ2VJbmRleChDUERGX0RpY3Rpb25hcnkqIHBOb2RlLCBGWF9EV09SRCYgc2tpcF9jb3VudCwgRlhfRFdPUkQgb2JqbnVtLCBpbnQmIGluZGV4LCBpbnQgbGV2ZWwgPSAwKTsKKyAgICBGWF9CT09MCQkJCQlJc0NvbnRlbnRVc2VkRWxzZXdoZXJlKEZYX0RXT1JEIG9iam51bSwgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QpOworICAgIEZYX0JPT0wJCQkJCUNoZWNrT0NHVmlzaWJsZShDUERGX0RpY3Rpb25hcnkqIHBPQ0csIEZYX0JPT0wgYlByaW50aW5nKTsKKyAgICBDUERGX0RvY1BhZ2VEYXRhKgkJR2V0VmFsaWRhdGVQYWdlRGF0YSgpOworICAgIENQREZfRG9jUmVuZGVyRGF0YSoJCUdldFZhbGlkYXRlUmVuZGVyRGF0YSgpOworICAgIGZyaWVuZCBjbGFzcwkJCUNQREZfQ3JlYXRvcjsKKyAgICBmcmllbmQgY2xhc3MJCQlDUERGX1BhcnNlcjsKKyAgICBmcmllbmQgY2xhc3MJCQlDUERGX0RhdGFBdmFpbDsKKyAgICBmcmllbmQgY2xhc3MJCQlDUERGX09DQ29udGV4dDsKKworCisKKyAgICBDUERGX0RvY1BhZ2VEYXRhKgkJbV9wRG9jUGFnZTsKKworICAgIENQREZfRG9jUmVuZGVyRGF0YSoJCW1fcERvY1JlbmRlcjsKKworfTsKKworI2RlZmluZSBQREZXT1JEX0VPRgkJCTAKKyNkZWZpbmUgUERGV09SRF9OVU1CRVIJCTEKKyNkZWZpbmUgUERGV09SRF9URVhUCQkyCisjZGVmaW5lIFBERldPUkRfREVMSU1JVEVSCTMKKyNkZWZpbmUgUERGV09SRF9OQU1FCQk0CitjbGFzcyBDUERGX1NpbXBsZVBhcnNlciA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDUERGX1NpbXBsZVBhcnNlcihGWF9MUENCWVRFIHBEYXRhLCBGWF9EV09SRCBkd1NpemUpOworCisgICAgQ1BERl9TaW1wbGVQYXJzZXIoRlhfQlNUUiBzdHIpOworCisgICAgQ0ZYX0J5dGVTdHJpbmdDCQlHZXRXb3JkKCk7CisKKyAgICBGWF9CT09MCQkJCVNlYXJjaFRva2VuKEZYX0JTVFIgdG9rZW4pOworCisgICAgRlhfQk9PTAkJCQlTa2lwV29yZChGWF9CU1RSIHRva2VuKTsKKworICAgIEZYX0JPT0wJCQkJRmluZFRhZ1BhaXIoRlhfQlNUUiBzdGFydF90b2tlbiwgRlhfQlNUUiBlbmRfdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCYgc3RhcnRfcG9zLCBGWF9EV09SRCYgZW5kX3Bvcyk7CisKKyAgICBGWF9CT09MCQkJCUZpbmRUYWdQYXJhbShGWF9CU1RSIHRva2VuLCBpbnQgblBhcmFtcyk7CisKKyAgICBGWF9EV09SRAkJCUdldFBvcygpCisgICAgeworICAgICAgICByZXR1cm4gbV9kd0N1clBvczsKKyAgICB9CisKKyAgICB2b2lkCQkJCVNldFBvcyhGWF9EV09SRCBwb3MpCisgICAgeworICAgICAgICBBU1NFUlQocG9zIDw9IG1fZHdTaXplKTsKKyAgICAgICAgbV9kd0N1clBvcyA9IHBvczsKKyAgICB9Citwcml2YXRlOgorCisgICAgdm9pZAkJCQlQYXJzZVdvcmQoRlhfTFBDQllURSYgcFN0YXJ0LCBGWF9EV09SRCYgZHdTaXplLCBpbnQmIHR5cGUpOworCisgICAgRlhfTFBDQllURQkJCW1fcERhdGE7CisKKyAgICBGWF9EV09SRAkJCW1fZHdTaXplOworCisgICAgRlhfRFdPUkQJCQltX2R3Q3VyUG9zOworfTsKK2NsYXNzIENQREZfU3ludGF4UGFyc2VyIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENQREZfU3ludGF4UGFyc2VyKCk7CisKKyAgICB+Q1BERl9TeW50YXhQYXJzZXIoKTsKKworICAgIHZvaWQJCQkJSW5pdFBhcnNlcihJRlhfRmlsZVJlYWQqIHBGaWxlQWNjZXNzLCBGWF9EV09SRCBIZWFkZXJPZmZzZXQpOworCisgICAgRlhfRklMRVNJWkUJCQlTYXZlUG9zKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX1BvczsKKyAgICB9CisKKyAgICB2b2lkCQkJCVJlc3RvcmVQb3MoRlhfRklMRVNJWkUgcG9zKQorICAgIHsKKyAgICAgICAgbV9Qb3MgPSBwb3M7CisgICAgfQorCisgICAgQ1BERl9PYmplY3QqCQlHZXRPYmplY3QoQ1BERl9JbmRpcmVjdE9iamVjdHMqIHBPYmpMaXN0LCBGWF9EV09SRCBvYmpudW0sIEZYX0RXT1JEIGdlbm51bSwgaW50IGxldmVsLCBzdHJ1Y3QgUEFSU0VfQ09OVEVYVCogcENvbnRleHQgPSBOVUxMLCBGWF9CT09MIGJEZWNyeXB0ID0gVFJVRSk7CisKKworICAgIENQREZfT2JqZWN0KgkJR2V0T2JqZWN0QnlTdHJpY3QoQ1BERl9JbmRpcmVjdE9iamVjdHMqIHBPYmpMaXN0LCBGWF9EV09SRCBvYmpudW0sIEZYX0RXT1JEIGdlbm51bSwgaW50IGxldmVsLCBzdHJ1Y3QgUEFSU0VfQ09OVEVYVCogcENvbnRleHQgPSBOVUxMKTsKKworICAgIGludAkJCQkJR2V0RGlyZWN0TnVtKCk7CisKKyAgICBDRlhfQnl0ZVN0cmluZwkJR2V0U3RyaW5nKEZYX0RXT1JEIG9iam51bSwgRlhfRFdPUkQgZ2VubnVtKTsKKworICAgIENGWF9CeXRlU3RyaW5nCQlHZXROYW1lKCk7CisKKyAgICBDRlhfQnl0ZVN0cmluZwkJR2V0S2V5d29yZCgpOworCisgICAgdm9pZAkJCQlHZXRCaW5hcnkoRlhfQllURSogYnVmZmVyLCBGWF9EV09SRCBzaXplKTsKKworICAgIHZvaWQJCQkJVG9OZXh0TGluZSgpOworCisgICAgdm9pZAkJCQlUb05leHRXb3JkKCk7CisKKyAgICBGWF9CT09MCQkJCVNlYXJjaFdvcmQoRlhfQlNUUiB3b3JkLCBGWF9CT09MIGJXaG9sZVdvcmQsIEZYX0JPT0wgYkZvcndhcmQsIEZYX0ZJTEVTSVpFIGxpbWl0KTsKKworICAgIGludAkJCQkJU2VhcmNoTXVsdGlXb3JkKEZYX0JTVFIgd29yZHMsIEZYX0JPT0wgYldob2xlV29yZCwgRlhfRklMRVNJWkUgbGltaXQpOworCisgICAgRlhfRklMRVNJWkUJCQlGaW5kVGFnKEZYX0JTVFIgdGFnLCBGWF9GSUxFU0laRSBsaW1pdCk7CisKKyAgICB2b2lkCQkJCVNldEVuY3J5cHQoQ1BERl9DcnlwdG9IYW5kbGVyKiBwQ3J5cHRvSGFuZGxlcikKKyAgICB7CisgICAgICAgIG1fcENyeXB0b0hhbmRsZXIgPSBwQ3J5cHRvSGFuZGxlcjsKKyAgICB9CisKKyAgICBGWF9CT09MCQkJCUlzRW5jcnlwdGVkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BDcnlwdG9IYW5kbGVyICE9IE5VTEw7CisgICAgfQorCisgICAgRlhfQk9PTAkJCQlHZXRDaGFyQXQoRlhfRklMRVNJWkUgcG9zLCBGWF9CWVRFJiBjaCk7CisKKyAgICBGWF9CT09MCQkJCVJlYWRCbG9jayhGWF9CWVRFKiBwQnVmLCBGWF9EV09SRCBzaXplKTsKKworICAgIENGWF9CeXRlU3RyaW5nCQlHZXROZXh0V29yZChGWF9CT09MJiBiSXNOdW1iZXIpOworcHJvdGVjdGVkOgorCisgICAgdmlydHVhbCBGWF9CT09MCQkJCUdldE5leHRDaGFyKEZYX0JZVEUmIGNoKTsKKworICAgIEZYX0JPT0wJCQkJR2V0Q2hhckF0QmFja3dhcmQoRlhfRklMRVNJWkUgcG9zLCBGWF9CWVRFJiBjaCk7CisKKyAgICB2b2lkCQkJCUdldE5leHRXb3JkKCk7CisKKyAgICBGWF9CT09MCQkJCUlzV2hvbGVXb3JkKEZYX0ZJTEVTSVpFIHN0YXJ0cG9zLCBGWF9GSUxFU0laRSBsaW1pdCwgRlhfTFBDQllURSB0YWcsIEZYX0RXT1JEIHRhZ2xlbik7CisKKyAgICBDRlhfQnl0ZVN0cmluZwkJUmVhZFN0cmluZygpOworCisgICAgQ0ZYX0J5dGVTdHJpbmcJCVJlYWRIZXhTdHJpbmcoKTsKKworICAgIENQREZfU3RyZWFtKgkJUmVhZFN0cmVhbShDUERGX0RpY3Rpb25hcnkqIHBEaWN0LCBQQVJTRV9DT05URVhUKiBwQ29udGV4dCwgRlhfRFdPUkQgb2JqbnVtLCBGWF9EV09SRCBnZW5udW0pOworCisgICAgRlhfRklMRVNJWkUJCQltX1BvczsKKworICAgIEZYX0JPT0wJCQkJbV9iRmlsZVN0cmVhbTsKKworICAgIGludAkJCQkJbV9NZXRhZGF0YU9iam51bTsKKworICAgIElGWF9GaWxlUmVhZCoJCW1fcEZpbGVBY2Nlc3M7CisKKyAgICBGWF9EV09SRAkJCW1fSGVhZGVyT2Zmc2V0OworCisgICAgRlhfRklMRVNJWkUJCQltX0ZpbGVMZW47CisKKyAgICBGWF9CWVRFKgkJCW1fcEZpbGVCdWY7CisKKyAgICBGWF9EV09SRAkJCW1fQnVmU2l6ZTsKKworICAgIEZYX0ZJTEVTSVpFCQkJbV9CdWZPZmZzZXQ7CisKKyAgICBDUERGX0NyeXB0b0hhbmRsZXIqCW1fcENyeXB0b0hhbmRsZXI7CisKKyAgICBGWF9CWVRFCQkJCW1fV29yZEJ1ZmZlclsyNTddOworCisgICAgRlhfRFdPUkQJCQltX1dvcmRTaXplOworCisgICAgRlhfQk9PTAkJCQltX2JJc051bWJlcjsKKworICAgIEZYX0ZJTEVTSVpFCQkJbV9kd1dvcmRQb3M7CisgICAgZnJpZW5kIGNsYXNzCQlDUERGX1BhcnNlcjsKKyAgICBmcmllbmQgY2xhc3MJCUNQREZfRGF0YUF2YWlsOworfTsKKworI2RlZmluZSBQREZQQVJTRV9UWVBFT05MWQkxCisjZGVmaW5lIFBERlBBUlNFX05PU1RSRUFNCTIKK3N0cnVjdCBQQVJTRV9DT05URVhUIHsKKworICAgIEZYX0JPT0wJCW1fRmxhZ3M7CisKKyAgICBGWF9GSUxFU0laRQltX0RpY3RTdGFydDsKKworICAgIEZYX0ZJTEVTSVpFCW1fRGljdEVuZDsKKworICAgIEZYX0ZJTEVTSVpFCW1fRGF0YVN0YXJ0OworCisgICAgRlhfRklMRVNJWkUJbV9EYXRhRW5kOworfTsKK2NsYXNzIElQREZfRG9jUGFyc2VyIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIHZpcnR1YWwgRlhfRFdPUkQJR2V0Um9vdE9iak51bSgpID0gMDsKKworICAgIHZpcnR1YWwgRlhfRFdPUkQJR2V0SW5mb09iak51bSgpID0gMDsKKworICAgIHZpcnR1YWwgQ1BERl9PYmplY3QqCVBhcnNlSW5kaXJlY3RPYmplY3QoQ1BERl9JbmRpcmVjdE9iamVjdHMqIHBPYmpMaXN0LCBGWF9EV09SRCBvYmpudW0sIFBBUlNFX0NPTlRFWFQqIHBDb250ZXh0ID0gTlVMTCkgPSAwOworCisgICAgdmlydHVhbCBGWF9EV09SRAlHZXRMYXN0T2JqTnVtKCkgPSAwOworCisgICAgdmlydHVhbCBDUERGX0FycmF5KglHZXRJREFycmF5KCkgPSAwOworCisgICAgdmlydHVhbCBDUERGX0RpY3Rpb25hcnkqCUdldEVuY3J5cHREaWN0KCkgPSAwOworCisgICAgRlhfQk9PTAkJCQlJc0VuY3J5cHRlZCgpCisgICAgeworICAgICAgICByZXR1cm4gR2V0RW5jcnlwdERpY3QoKSAhPSBOVUxMOworICAgIH0KKworICAgIHZpcnR1YWwgRlhfRFdPUkQJR2V0UGVybWlzc2lvbnMoRlhfQk9PTCBiQ2hlY2tSZXZpc2lvbiA9IEZBTFNFKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCUlzT3duZXIoKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCUlzRm9ybVN0cmVhbShGWF9EV09SRCBvYmpudW0sIEZYX0JPT0wmIGJGb3JtKSA9IDA7Cit9OworCisjZGVmaW5lIFBERlBBUlNFX0VSUk9SX1NVQ0NFU1MJCTAKKyNkZWZpbmUgUERGUEFSU0VfRVJST1JfRklMRQkJCTEKKyNkZWZpbmUgUERGUEFSU0VfRVJST1JfRk9STUFUCQkyCisjZGVmaW5lIFBERlBBUlNFX0VSUk9SX1BBU1NXT1JECQkzCisjZGVmaW5lIFBERlBBUlNFX0VSUk9SX0hBTkRMRVIJCTQKKyNkZWZpbmUgUERGUEFSU0VfRVJST1JfQ0VSVAkJCTUKK2NsYXNzIENQREZfUGFyc2VyIDogcHVibGljIElQREZfRG9jUGFyc2VyCit7CitwdWJsaWM6CisKKyAgICBDUERGX1BhcnNlcigpOworCisgICAgfkNQREZfUGFyc2VyKCk7CisKKyAgICBGWF9EV09SRAkJCVN0YXJ0UGFyc2UoRlhfTFBDU1RSIGZpbGVuYW1lLCBGWF9CT09MIGJSZVBhcnNlID0gRkFMU0UpOworCisgICAgRlhfRFdPUkQJCQlTdGFydFBhcnNlKEZYX0xQQ1dTVFIgZmlsZW5hbWUsIEZYX0JPT0wgYlJlUGFyc2UgPSBGQUxTRSk7CisKKyAgICBGWF9EV09SRAkJCVN0YXJ0UGFyc2UoSUZYX0ZpbGVSZWFkKiBwRmlsZSwgRlhfQk9PTCBiUmVQYXJzZSA9IEZBTFNFLCBGWF9CT09MIGJPd25GaWxlUmVhZCA9IFRSVUUpOworCisgICAgdm9pZAkJCQlDbG9zZVBhcnNlcihGWF9CT09MIGJSZVBhcnNlID0gRkFMU0UpOworCisgICAgdmlydHVhbCBGWF9EV09SRAlHZXRQZXJtaXNzaW9ucyhGWF9CT09MIGJDaGVja1JldmlzaW9uID0gRkFMU0UpOworCisgICAgdmlydHVhbCBGWF9CT09MCQlJc093bmVyKCk7CisKKyAgICB2b2lkCQkJCVNldFBhc3N3b3JkKGNvbnN0IEZYX0NIQVIqIHBhc3N3b3JkKQorICAgIHsKKyAgICAgICAgbV9QYXNzd29yZCA9IHBhc3N3b3JkOworICAgIH0KKworICAgIENGWF9CeXRlU3RyaW5nCQlHZXRQYXNzd29yZCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9QYXNzd29yZDsKKyAgICB9CisKKyAgICBDUERGX1NlY3VyaXR5SGFuZGxlciogR2V0U2VjdXJpdHlIYW5kbGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BTZWN1cml0eUhhbmRsZXI7CisgICAgfQorCisgICAgQ1BERl9DcnlwdG9IYW5kbGVyKglHZXRDcnlwdG9IYW5kbGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX1N5bnRheC5tX3BDcnlwdG9IYW5kbGVyOworICAgIH0KKworICAgIHZvaWQJCQkJU2V0U2VjdXJpdHlIYW5kbGVyKENQREZfU2VjdXJpdHlIYW5kbGVyKiBwU2VjdXJpdHlIYW5kbGVyLCBGWF9CT09MIGJGb3JjZWQgPSBGQUxTRSk7CisKKyAgICBDRlhfQnl0ZVN0cmluZwkJR2V0UmVjaXBpZW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JzUmVjaXBpZW50OworICAgIH0KKworICAgIENQREZfRGljdGlvbmFyeSoJR2V0VHJhaWxlcigpCisgICAgeworICAgICAgICByZXR1cm4gbV9wVHJhaWxlcjsKKyAgICB9CisKKyAgICBGWF9GSUxFU0laRQkJCUdldExhc3RYUmVmT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX0xhc3RYUmVmT2Zmc2V0OworICAgIH0KKworICAgIENQREZfRG9jdW1lbnQqCQlHZXREb2N1bWVudCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9wRG9jdW1lbnQ7CisgICAgfQorICAgIENGWF9BcnJheVRlbXBsYXRlPENQREZfRGljdGlvbmFyeSAqPiAqIEdldE90aGVyVHJhaWxlcnMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZtX1RyYWlsZXJzOworICAgIH0KKworICAgIHZpcnR1YWwgRlhfRFdPUkQJR2V0Um9vdE9iak51bSgpOworICAgIHZpcnR1YWwgRlhfRFdPUkQJR2V0SW5mb09iak51bSgpOworICAgIHZpcnR1YWwgQ1BERl9BcnJheSoJR2V0SURBcnJheSgpOworICAgIHZpcnR1YWwgQ1BERl9EaWN0aW9uYXJ5KglHZXRFbmNyeXB0RGljdCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9wRW5jcnlwdERpY3Q7CisgICAgfQorICAgIHZpcnR1YWwgQ1BERl9PYmplY3QqCQlQYXJzZUluZGlyZWN0T2JqZWN0KENQREZfSW5kaXJlY3RPYmplY3RzKiBwT2JqTGlzdCwgRlhfRFdPUkQgb2JqbnVtLCBQQVJTRV9DT05URVhUKiBwQ29udGV4dCA9IE5VTEwpOworICAgIHZpcnR1YWwgRlhfRFdPUkQJR2V0TGFzdE9iak51bSgpOworICAgIHZpcnR1YWwgRlhfQk9PTAkJSXNGb3JtU3RyZWFtKEZYX0RXT1JEIG9iam51bSwgRlhfQk9PTCYgYkZvcm0pOworCisgICAgRlhfRklMRVNJWkUJCQlHZXRPYmplY3RPZmZzZXQoRlhfRFdPUkQgb2JqbnVtKTsKKworICAgIEZYX0ZJTEVTSVpFCQkJR2V0T2JqZWN0U2l6ZShGWF9EV09SRCBvYmpudW0pOworCisgICAgaW50CQkJCQlHZXRPYmplY3RWZXJzaW9uKEZYX0RXT1JEIG9iam51bSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX09ialZlcnNpb25bb2JqbnVtXTsKKyAgICB9CisKKyAgICB2b2lkCQkJCUdldEluZGlyZWN0QmluYXJ5KEZYX0RXT1JEIG9iam51bSwgRlhfQllURSomIHBCdWZmZXIsIEZYX0RXT1JEJiBzaXplKTsKKworICAgIEZYX0JPT0wJCQkJR2V0RmlsZVN0cmVhbU9wdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gbV9TeW50YXgubV9iRmlsZVN0cmVhbTsKKyAgICB9CisKKyAgICB2b2lkCQkJCVNldEZpbGVTdHJlYW1PcHRpb24oRlhfQk9PTCBiKQorICAgIHsKKyAgICAgICAgbV9TeW50YXgubV9iRmlsZVN0cmVhbSA9IGI7CisgICAgfQorCisgICAgSUZYX0ZpbGVSZWFkKgkJR2V0RmlsZUFjY2VzcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9TeW50YXgubV9wRmlsZUFjY2VzczsKKyAgICB9CisKKyAgICBpbnQJCQkJCUdldEZpbGVWZXJzaW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0ZpbGVWZXJzaW9uOworICAgIH0KKworICAgIEZYX0JPT0wJCQkJSXNYUmVmU3RyZWFtKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JYUmVmU3RyZWFtOworICAgIH0KKyAgICBDUERGX09iamVjdCoJCVBhcnNlSW5kaXJlY3RPYmplY3RBdChDUERGX0luZGlyZWN0T2JqZWN0cyogcE9iakxpc3QsIEZYX0ZJTEVTSVpFIHBvcywgRlhfRFdPUkQgb2JqbnVtLAorICAgICAgICAgICAgc3RydWN0IFBBUlNFX0NPTlRFWFQqIHBDb250ZXh0KTsKKworICAgIENQREZfT2JqZWN0KgkJUGFyc2VJbmRpcmVjdE9iamVjdEF0QnlTdHJpY3QoQ1BERl9JbmRpcmVjdE9iamVjdHMqIHBPYmpMaXN0LCBGWF9GSUxFU0laRSBwb3MsIEZYX0RXT1JEIG9iam51bSwKKyAgICAgICAgICAgIHN0cnVjdCBQQVJTRV9DT05URVhUKiBwQ29udGV4dCwgRlhfRklMRVNJWkUgKnBSZXN1bHRQb3MpOworCisgICAgRlhfRFdPUkQJCQlTdGFydEFzeW5QYXJzZShJRlhfRmlsZVJlYWQqIHBGaWxlLCBGWF9CT09MIGJSZVBhcnNlID0gRkFMU0UsIEZYX0JPT0wgYk93bkZpbGVSZWFkID0gVFJVRSk7CisKKyAgICBGWF9EV09SRAkJCUdldEZpcnN0UGFnZU5vKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2R3Rmlyc3RQYWdlTm87CisgICAgfQorcHJvdGVjdGVkOgorCisgICAgQ1BERl9Eb2N1bWVudCoJCW1fcERvY3VtZW50OworCisgICAgQ1BERl9TeW50YXhQYXJzZXIJbV9TeW50YXg7CisgICAgRlhfQk9PTAkJCQltX2JPd25GaWxlUmVhZDsKKyAgICBDUERGX09iamVjdCoJCVBhcnNlRGlyZWN0KENQREZfT2JqZWN0KiBwT2JqKTsKKworICAgIEZYX0JPT0wJCQkJTG9hZEFsbENyb3NzUmVmVjQoRlhfRklMRVNJWkUgcG9zKTsKKworICAgIEZYX0JPT0wJCQkJTG9hZEFsbENyb3NzUmVmVjUoRlhfRklMRVNJWkUgcG9zKTsKKworICAgIEZYX0JPT0wJCQkJTG9hZENyb3NzUmVmVjQoRlhfRklMRVNJWkUgcG9zLCBGWF9GSUxFU0laRSBzdHJlYW1wb3MsIEZYX0JPT0wgYlNraXAsIEZYX0JPT0wgYkZpcnN0KTsKKworICAgIEZYX0JPT0wJCQkJTG9hZENyb3NzUmVmVjUoRlhfRklMRVNJWkUgcG9zLCBGWF9GSUxFU0laRSYgcHJldiwgRlhfQk9PTCBiTWFpblhSZWYpOworCisgICAgQ1BERl9EaWN0aW9uYXJ5KglMb2FkVHJhaWxlclY0KCk7CisKKyAgICBGWF9CT09MCQkJCVJlYnVpbGRDcm9zc1JlZigpOworCisgICAgRlhfRFdPUkQJCQlTZXRFbmNyeXB0SGFuZGxlcigpOworCisgICAgdm9pZAkJCQlSZWxlYXNlRW5jcnlwdEhhbmRsZXIoKTsKKworICAgIEZYX0JPT0wJCQkJTG9hZExpbmVhcml6ZWRBbGxDcm9zc1JlZlY0KEZYX0ZJTEVTSVpFIHBvcywgRlhfRFdPUkQgZHdPYmpDb3VudCk7CisKKyAgICBGWF9CT09MCQkJCUxvYWRMaW5lYXJpemVkQ3Jvc3NSZWZWNChGWF9GSUxFU0laRSBwb3MsIEZYX0RXT1JEIGR3T2JqQ291bnQpOworCisgICAgRlhfQk9PTAkJCQlMb2FkTGluZWFyaXplZEFsbENyb3NzUmVmVjUoRlhfRklMRVNJWkUgcG9zKTsKKworICAgIEZYX0RXT1JECQkJTG9hZExpbmVhcml6ZWRNYWluWFJlZlRhYmxlKCk7CisKKyAgICBDRlhfTWFwUHRyVG9QdHIJCW1fT2JqZWN0U3RyZWFtTWFwOworCisgICAgQ1BERl9TdHJlYW1BY2MqCQlHZXRPYmplY3RTdHJlYW0oRlhfRFdPUkQgbnVtYmVyKTsKKworICAgIEZYX0JPT0wJCQkJSXNMaW5lYXJpemVkRmlsZShJRlhfRmlsZVJlYWQqIHBGaWxlQWNjZXNzLCBGWF9EV09SRCBvZmZzZXQpOworCisKKworICAgIGludAkJCQkJbV9GaWxlVmVyc2lvbjsKKworICAgIENQREZfRGljdGlvbmFyeSoJbV9wVHJhaWxlcjsKKworICAgIENQREZfRGljdGlvbmFyeSoJbV9wRW5jcnlwdERpY3Q7CisgICAgdm9pZCBTZXRFbmNyeXB0RGljdGlvbmFyeShDUERGX0RpY3Rpb25hcnkqIHBEaWN0KTsKKworICAgIEZYX0ZJTEVTSVpFCQkJbV9MYXN0WFJlZk9mZnNldDsKKworICAgIEZYX0JPT0wJCQkJbV9iWFJlZlN0cmVhbTsKKworCisgICAgQ1BERl9TZWN1cml0eUhhbmRsZXIqCW1fcFNlY3VyaXR5SGFuZGxlcjsKKworICAgIEZYX0JPT0wJCQkJCW1fYkZvcmNlVXNlU2VjdXJpdHlIYW5kbGVyOworCisgICAgQ0ZYX0J5dGVTdHJpbmcJCQltX2JzUmVjaXBpZW50OworCisgICAgQ0ZYX0J5dGVTdHJpbmcJCW1fRmlsZVBhdGg7CisKKyAgICBDRlhfQnl0ZVN0cmluZwkJbV9QYXNzd29yZDsKKworICAgIENGWF9GaWxlU2l6ZUFycmF5CW1fQ3Jvc3NSZWY7CisKKyAgICBDRlhfQnl0ZUFycmF5CQltX1Y1VHlwZTsKKworICAgIENGWF9GaWxlU2l6ZUFycmF5CW1fU29ydGVkT2Zmc2V0OworCisgICAgQ0ZYX1dvcmRBcnJheQkJbV9PYmpWZXJzaW9uOworICAgIENGWF9BcnJheVRlbXBsYXRlPENQREZfRGljdGlvbmFyeSAqPgltX1RyYWlsZXJzOworCisgICAgRlhfQk9PTAkJCQltX2JWZXJzaW9uVXBkYXRlZDsKKworICAgIENQREZfT2JqZWN0KgkJbV9wTGluZWFyaXplZDsKKworICAgIEZYX0RXT1JECQkJbV9kd0ZpcnN0UGFnZU5vOworCisgICAgRlhfRFdPUkQJCQltX2R3WHJlZlN0YXJ0T2JqTnVtOworICAgIGZyaWVuZCBjbGFzcwkJQ1BERl9DcmVhdG9yOworICAgIGZyaWVuZCBjbGFzcwkJQ1BERl9EYXRhQXZhaWw7Cit9OworI2RlZmluZSBGWENJUEhFUl9OT05FCTAKKyNkZWZpbmUgRlhDSVBIRVJfUkM0CTEKKyNkZWZpbmUgRlhDSVBIRVJfQUVTCTIKKyNkZWZpbmUgRlhDSVBIRVJfQUVTMiAgIDMKK2NsYXNzIENQREZfU2VjdXJpdHlIYW5kbGVyIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIHZpcnR1YWwgfkNQREZfU2VjdXJpdHlIYW5kbGVyKCkge30KKworICAgIHZpcnR1YWwgRlhfQk9PTAkJT25Jbml0KENQREZfUGFyc2VyKiBwUGFyc2VyLCBDUERGX0RpY3Rpb25hcnkqIHBFbmNyeXB0RGljdCkgPSAwOworCisgICAgdmlydHVhbCBGWF9EV09SRAlHZXRQZXJtaXNzaW9ucygpID0gMDsKKworICAgIHZpcnR1YWwgRlhfQk9PTAkJSXNPd25lcigpID0gMDsKKworICAgIHZpcnR1YWwgRlhfQk9PTAkJR2V0Q3J5cHRJbmZvKGludCYgY2lwaGVyLCBGWF9MUENCWVRFJiBidWZmZXIsIGludCYga2V5bGVuKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCUlzTWV0YWRhdGFFbmNyeXB0ZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgdmlydHVhbCBDUERGX0NyeXB0b0hhbmRsZXIqCUNyZWF0ZUNyeXB0b0hhbmRsZXIoKSA9IDA7CisKKyAgICB2aXJ0dWFsIENQREZfU3RhbmRhcmRTZWN1cml0eUhhbmRsZXIqIEdldFN0YW5kYXJkSGFuZGxlcigpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9OworI2RlZmluZSBQREZfRU5DUllQVF9DT05URU5UCQkJCTAKK2NsYXNzIENQREZfU3RhbmRhcmRTZWN1cml0eUhhbmRsZXIgOiBwdWJsaWMgQ1BERl9TZWN1cml0eUhhbmRsZXIKK3sKK3B1YmxpYzoKKyAgICBDUERGX1N0YW5kYXJkU2VjdXJpdHlIYW5kbGVyKCk7CisKKyAgICB2aXJ0dWFsIH5DUERGX1N0YW5kYXJkU2VjdXJpdHlIYW5kbGVyKCk7CisgICAgdmlydHVhbCBGWF9CT09MCQlPbkluaXQoQ1BERl9QYXJzZXIqIHBQYXJzZXIsIENQREZfRGljdGlvbmFyeSogcEVuY3J5cHREaWN0KTsKKyAgICB2aXJ0dWFsIEZYX0RXT1JECUdldFBlcm1pc3Npb25zKCk7CisgICAgdmlydHVhbCBGWF9CT09MCQlJc093bmVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JPd25lcjsKKyAgICB9CisgICAgdmlydHVhbCBGWF9CT09MCQlHZXRDcnlwdEluZm8oaW50JiBjaXBoZXIsIEZYX0xQQ0JZVEUmIGJ1ZmZlciwgaW50JiBrZXlsZW4pOworICAgIHZpcnR1YWwgRlhfQk9PTAkJSXNNZXRhZGF0YUVuY3J5cHRlZCgpOworICAgIHZpcnR1YWwgQ1BERl9DcnlwdG9IYW5kbGVyKglDcmVhdGVDcnlwdG9IYW5kbGVyKCk7CisgICAgdmlydHVhbCBDUERGX1N0YW5kYXJkU2VjdXJpdHlIYW5kbGVyKiBHZXRTdGFuZGFyZEhhbmRsZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorCisgICAgdm9pZAkJCQlPbkNyZWF0ZShDUERGX0RpY3Rpb25hcnkqIHBFbmNyeXB0RGljdCwgQ1BERl9BcnJheSogcElkQXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUENCWVRFIHVzZXJfcGFzcywgRlhfRFdPUkQgdXNlcl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBDQllURSBvd25lcl9wYXNzLCBGWF9EV09SRCBvd25lcl9zaXplLCBGWF9EV09SRCB0eXBlID0gUERGX0VOQ1JZUFRfQ09OVEVOVCk7CisKKyAgICB2b2lkCQkJCU9uQ3JlYXRlKENQREZfRGljdGlvbmFyeSogcEVuY3J5cHREaWN0LCBDUERGX0FycmF5KiBwSWRBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgdXNlcl9wYXNzLCBGWF9EV09SRCB1c2VyX3NpemUsIEZYX0RXT1JEIHR5cGUgPSBQREZfRU5DUllQVF9DT05URU5UKTsKKworICAgIENGWF9CeXRlU3RyaW5nCQlHZXRVc2VyUGFzc3dvcmQoRlhfTFBDQllURSBvd25lcl9wYXNzLCBGWF9EV09SRCBwYXNzX3NpemUpOworICAgIENGWF9CeXRlU3RyaW5nCQlHZXRVc2VyUGFzc3dvcmQoRlhfTFBDQllURSBvd25lcl9wYXNzLCBGWF9EV09SRCBwYXNzX3NpemUsIEZYX0lOVDMyIGtleV9sZW4pOworICAgIGludAkJCQkJR2V0VmVyc2lvbigpCisgICAgeworICAgICAgICByZXR1cm4gbV9WZXJzaW9uOworICAgIH0KKyAgICBpbnQJCQkJCUdldFJldmlzaW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX1JldmlzaW9uOworICAgIH0KKworICAgIGludAkJCQkJQ2hlY2tQYXNzd29yZChGWF9MUENCWVRFIHBhc3N3b3JkLCBGWF9EV09SRCBwYXNzX3NpemUsIEZYX0JPT0wgYk93bmVyLCBGWF9MUEJZVEUga2V5KTsKKyAgICBpbnQJCQkJCUNoZWNrUGFzc3dvcmQoRlhfTFBDQllURSBwYXNzd29yZCwgRlhfRFdPUkQgcGFzc19zaXplLCBGWF9CT09MIGJPd25lciwgRlhfTFBCWVRFIGtleSwgaW50IGtleV9sZW4pOworcHJpdmF0ZToKKworICAgIGludAkJCQkJbV9WZXJzaW9uOworCisgICAgaW50CQkJCQltX1JldmlzaW9uOworCisgICAgQ1BERl9QYXJzZXIqCQltX3BQYXJzZXI7CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCW1fcEVuY3J5cHREaWN0OworCisgICAgRlhfQk9PTAkJCQlMb2FkRGljdChDUERGX0RpY3Rpb25hcnkqIHBFbmNyeXB0RGljdCk7CisgICAgRlhfQk9PTAkJCQlMb2FkRGljdChDUERGX0RpY3Rpb25hcnkqIHBFbmNyeXB0RGljdCwgRlhfRFdPUkQgdHlwZSwgaW50JiBjaXBoZXIsIGludCYga2V5X2xlbik7CisKKyAgICBGWF9CT09MCQkJCUNoZWNrVXNlclBhc3N3b3JkKEZYX0xQQ0JZVEUgcGFzc3dvcmQsIEZYX0RXT1JEIHBhc3Nfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYklnbm9yZUVuY3J5cHRNZXRhLCBGWF9MUEJZVEUga2V5LCBGWF9JTlQzMiBrZXlfbGVuKTsKKworICAgIEZYX0JPT0wJCQkJQ2hlY2tPd25lclBhc3N3b3JkKEZYX0xQQ0JZVEUgcGFzc3dvcmQsIEZYX0RXT1JEIHBhc3Nfc2l6ZSwgRlhfTFBCWVRFIGtleSwgRlhfSU5UMzIga2V5X2xlbik7CisgICAgRlhfQk9PTAkJCQlBRVMyNTZfQ2hlY2tQYXNzd29yZChGWF9MUENCWVRFIHBhc3N3b3JkLCBGWF9EV09SRCBzaXplLCBGWF9CT09MIGJPd25lciwgRlhfTFBCWVRFIGtleSk7CisgICAgdm9pZAkJCQlBRVMyNTZfU2V0UGFzc3dvcmQoQ1BERl9EaWN0aW9uYXJ5KiBwRW5jcnlwdERpY3QsIEZYX0xQQ0JZVEUgcGFzc3dvcmQsIEZYX0RXT1JEIHNpemUsIEZYX0JPT0wgYk93bmVyLCBGWF9MUENCWVRFIGtleSk7CisgICAgdm9pZAkJCQlBRVMyNTZfU2V0UGVybXMoQ1BERl9EaWN0aW9uYXJ5KiBwRW5jcnlwdERpY3QsIEZYX0RXT1JEIHBlcm1pc3Npb24sIEZYX0JPT0wgYkVuY3J5cHRNZXRhZGF0YSwgRlhfTFBDQllURSBrZXkpOworICAgIHZvaWQJCQkJT25DcmVhdGUoQ1BERl9EaWN0aW9uYXJ5KiBwRW5jcnlwdERpY3QsIENQREZfQXJyYXkqIHBJZEFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBDQllURSB1c2VyX3Bhc3MsIEZYX0RXT1JEIHVzZXJfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgb3duZXJfcGFzcywgRlhfRFdPUkQgb3duZXJfc2l6ZSwgRlhfQk9PTCBiRGVmYXVsdCwgRlhfRFdPUkQgdHlwZSk7CisgICAgRlhfQk9PTAkJCQlDaGVja1NlY3VyaXR5KEZYX0lOVDMyIGtleV9sZW4pOworCisgICAgRlhfQk9PTAkJCQltX2JPd25lcjsKKworICAgIEZYX0RXT1JECQkJbV9QZXJtaXNzaW9uczsKKworICAgIGludAkJCQkJbV9DaXBoZXI7CisKKyAgICBGWF9CWVRFCQkJCW1fRW5jcnlwdEtleVszMl07CisKKyAgICBpbnQJCQkJCW1fS2V5TGVuOworfTsKK2NsYXNzIENQREZfQ3J5cHRvSGFuZGxlciA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICB2aXJ0dWFsIH5DUERGX0NyeXB0b0hhbmRsZXIoKSB7fQorCisgICAgdmlydHVhbCBGWF9CT09MCQlJbml0KENQREZfRGljdGlvbmFyeSogcEVuY3J5cHREaWN0LCBDUERGX1NlY3VyaXR5SGFuZGxlciogcFNlY3VyaXR5SGFuZGxlcikgPSAwOworCisgICAgdmlydHVhbCBGWF9EV09SRAlEZWNyeXB0R2V0U2l6ZShGWF9EV09SRCBzcmNfc2l6ZSkgPSAwOworCisgICAgdmlydHVhbCBGWF9MUFZPSUQJRGVjcnlwdFN0YXJ0KEZYX0RXT1JEIG9iam51bSwgRlhfRFdPUkQgZ2VubnVtKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCURlY3J5cHRTdHJlYW0oRlhfTFBWT0lEIGNvbnRleHQsIEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCURlY3J5cHRGaW5pc2goRlhfTFBWT0lEIGNvbnRleHQsIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKSA9IDA7CisKKworICAgIHZpcnR1YWwgRlhfRFdPUkQJRW5jcnlwdEdldFNpemUoRlhfRFdPUkQgb2JqbnVtLCBGWF9EV09SRCB2ZXJzaW9uLCBGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCUVuY3J5cHRDb250ZW50KEZYX0RXT1JEIG9iam51bSwgRlhfRFdPUkQgdmVyc2lvbiwgRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkgPSAwOworCisgICAgdm9pZAkJCQlEZWNyeXB0KEZYX0RXT1JEIG9iam51bSwgRlhfRFdPUkQgdmVyc2lvbiwgQ0ZYX0J5dGVTdHJpbmcmIHN0cik7Cit9OworY2xhc3MgQ1BERl9TdGFuZGFyZENyeXB0b0hhbmRsZXIgOiBwdWJsaWMgQ1BERl9DcnlwdG9IYW5kbGVyCit7CitwdWJsaWM6CisKKyAgICBDUERGX1N0YW5kYXJkQ3J5cHRvSGFuZGxlcigpOworCisgICAgdmlydHVhbCB+Q1BERl9TdGFuZGFyZENyeXB0b0hhbmRsZXIoKTsKKworICAgIEZYX0JPT0wJCQkJSW5pdChpbnQgY2lwaGVyLCBGWF9MUENCWVRFIGtleSwgaW50IGtleWxlbik7CisgICAgdmlydHVhbCBGWF9CT09MCQlJbml0KENQREZfRGljdGlvbmFyeSogcEVuY3J5cHREaWN0LCBDUERGX1NlY3VyaXR5SGFuZGxlciogcFNlY3VyaXR5SGFuZGxlcik7CisgICAgdmlydHVhbCBGWF9EV09SRAlEZWNyeXB0R2V0U2l6ZShGWF9EV09SRCBzcmNfc2l6ZSk7CisgICAgdmlydHVhbCBGWF9MUFZPSUQJRGVjcnlwdFN0YXJ0KEZYX0RXT1JEIG9iam51bSwgRlhfRFdPUkQgZ2VubnVtKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCURlY3J5cHRTdHJlYW0oRlhfTFBWT0lEIGNvbnRleHQsIEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCURlY3J5cHRGaW5pc2goRlhfTFBWT0lEIGNvbnRleHQsIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKTsKKyAgICB2aXJ0dWFsIEZYX0RXT1JECUVuY3J5cHRHZXRTaXplKEZYX0RXT1JEIG9iam51bSwgRlhfRFdPUkQgdmVyc2lvbiwgRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSk7CisgICAgdmlydHVhbCBGWF9CT09MCQlFbmNyeXB0Q29udGVudChGWF9EV09SRCBvYmpudW0sIEZYX0RXT1JEIHZlcnNpb24sIEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpOworcHJvdGVjdGVkOgorCisgICAgdmlydHVhbCB2b2lkCQlDcnlwdEJsb2NrKEZYX0JPT0wgYkVuY3J5cHQsIEZYX0RXT1JEIG9iam51bSwgRlhfRFdPUkQgZ2VubnVtLCBGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpOworICAgIHZpcnR1YWwgRlhfTFBWT0lECUNyeXB0U3RhcnQoRlhfRFdPUkQgb2JqbnVtLCBGWF9EV09SRCBnZW5udW0sIEZYX0JPT0wgYkVuY3J5cHQpOworICAgIHZpcnR1YWwgRlhfQk9PTAkJQ3J5cHRTdHJlYW0oRlhfTFBWT0lEIGNvbnRleHQsIEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmLCBGWF9CT09MIGJFbmNyeXB0KTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCUNyeXB0RmluaXNoKEZYX0xQVk9JRCBjb250ZXh0LCBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1ZiwgRlhfQk9PTCBiRW5jcnlwdCk7CisKKyAgICBGWF9CWVRFCQkJCW1fRW5jcnlwdEtleVszMl07CisKKyAgICBpbnQJCQkJCW1fS2V5TGVuOworCisgICAgaW50CQkJCQltX0NpcGhlcjsKKworICAgIEZYX0xQQllURQkJCW1fcEFFU0NvbnRleHQ7Cit9OworY2xhc3MgQ1BERl9Qb2ludCA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDUERGX1BvaW50KEZYX0ZMT0FUIHh4LCBGWF9GTE9BVCB5eSkKKyAgICB7CisgICAgICAgIHggPSB4eDsKKyAgICAgICAgeSA9IHl5OworICAgIH0KKworICAgIEZYX0ZMT0FUCQkJeDsKKworICAgIEZYX0ZMT0FUCQkJeTsKK307CisKKyNkZWZpbmUgQ1BERl9SZWN0CQlDRlhfRmxvYXRSZWN0CisjZGVmaW5lIENQREZfTWF0cml4CQlDRlhfQWZmaW5lTWF0cml4CitDRlhfQnl0ZVN0cmluZyBQREZfTmFtZURlY29kZShGWF9CU1RSIG9yaWcpOworQ0ZYX0J5dGVTdHJpbmcgUERGX05hbWVEZWNvZGUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG9yaWcpOworQ0ZYX0J5dGVTdHJpbmcgUERGX05hbWVFbmNvZGUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG9yaWcpOworQ0ZYX0J5dGVTdHJpbmcgUERGX0VuY29kZVN0cmluZyhjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3JjLCBGWF9CT09MIGJIZXggPSBGQUxTRSk7CitDRlhfV2lkZVN0cmluZyBQREZfRGVjb2RlVGV4dChjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyLCBDRlhfQ2hhck1hcCogcENoYXJNYXAgPSBOVUxMKTsKK0NGWF9XaWRlU3RyaW5nIFBERl9EZWNvZGVUZXh0KEZYX0xQQ0JZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUsIENGWF9DaGFyTWFwKiBwQ2hhck1hcCA9IE5VTEwpOworQ0ZYX0J5dGVTdHJpbmcgUERGX0VuY29kZVRleHQoRlhfTFBDV1NUUiBwU3RyaW5nLCBpbnQgbGVuID0gLTEsIENGWF9DaGFyTWFwKiBwQ2hhck1hcCA9IE5VTEwpOworRlhfRkxPQVQgUERGX0NsaXBGbG9hdChGWF9GTE9BVCBmKTsKK2NsYXNzIENGREZfRG9jdW1lbnQgOiBwdWJsaWMgQ1BERl9JbmRpcmVjdE9iamVjdHMKK3sKK3B1YmxpYzoKKworICAgIHN0YXRpYyBDRkRGX0RvY3VtZW50KglDcmVhdGVOZXdEb2MoKTsKKworICAgIHN0YXRpYyBDRkRGX0RvY3VtZW50KglQYXJzZUZpbGUoRlhfTFBDU1RSIGZpbGVfcGF0aCk7CisKKyAgICBzdGF0aWMgQ0ZERl9Eb2N1bWVudCoJUGFyc2VGaWxlKEZYX0xQQ1dTVFIgZmlsZV9wYXRoKTsKKworICAgIHN0YXRpYyBDRkRGX0RvY3VtZW50KglQYXJzZUZpbGUoSUZYX0ZpbGVSZWFkICpwRmlsZSwgRlhfQk9PTCBiT3duRmlsZSA9IEZBTFNFKTsKKworICAgIHN0YXRpYyBDRkRGX0RvY3VtZW50KglQYXJzZU1lbW9yeShGWF9MUENCWVRFIHBEYXRhLCBGWF9EV09SRCBzaXplKTsKKworICAgIH5DRkRGX0RvY3VtZW50KCk7CisKKyAgICBGWF9CT09MCQkJCQlXcml0ZUZpbGUoRlhfTFBDU1RSIGZpbGVfcGF0aCkgY29uc3Q7CisKKyAgICBGWF9CT09MCQkJCQlXcml0ZUZpbGUoRlhfTFBDV1NUUiBmaWxlX3BhdGgpIGNvbnN0OworCisgICAgRlhfQk9PTAkJCQkJV3JpdGVGaWxlKElGWF9GaWxlV3JpdGUgKnBGaWxlKSBjb25zdDsKKworICAgIEZYX0JPT0wJCQkJCVdyaXRlQnVmKENGWF9CeXRlVGV4dEJ1ZiYgYnVmKSBjb25zdDsKKworICAgIENQREZfRGljdGlvbmFyeSoJCUdldFJvb3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcFJvb3REaWN0OworICAgIH0KKworICAgIENGWF9XaWRlU3RyaW5nCQkJR2V0V2luMzJQYXRoKCkgY29uc3Q7Citwcm90ZWN0ZWQ6CisKKyAgICBDRkRGX0RvY3VtZW50KCk7CisgICAgdm9pZAlQYXJzZVN0cmVhbShJRlhfRmlsZVJlYWQgKnBGaWxlLCBGWF9CT09MIGJPd25GaWxlKTsKKyAgICBDUERGX0RpY3Rpb25hcnkqCQltX3BSb290RGljdDsKKyAgICBJRlhfRmlsZVJlYWQqCQkJbV9wRmlsZTsKKyAgICBGWF9CT09MCQkJCQltX2JPd25GaWxlOworfTsKKworQ0ZYX1dpZGVTdHJpbmcJRlBERl9GaWxlU3BlY19HZXRXaW4zMlBhdGgoY29uc3QgQ1BERl9PYmplY3QqIHBGaWxlU3BlYyk7Cit2b2lkCQkJRlBERl9GaWxlU3BlY19TZXRXaW4zMlBhdGgoQ1BERl9PYmplY3QqIHBGaWxlU3BlYywgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIGZ1bGxwYXRoKTsKKwordm9pZCBGbGF0ZUVuY29kZShjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSk7CitGWF9EV09SRCBGbGF0ZURlY29kZShjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSk7CitGWF9EV09SRCBSdW5MZW5ndGhEZWNvZGUoY29uc3QgRlhfQllURSogc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpOworY2xhc3MgQ1BERl9OdW1iZXJUcmVlIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENQREZfTnVtYmVyVHJlZShDUERGX0RpY3Rpb25hcnkqIHBSb290KQorICAgIHsKKyAgICAgICAgbV9wUm9vdCA9IHBSb290OworICAgIH0KKworICAgIENQREZfT2JqZWN0KgkJTG9va3VwVmFsdWUoaW50IG51bSk7Citwcm90ZWN0ZWQ6CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCW1fcFJvb3Q7Cit9OworCitjbGFzcyBJRlhfRmlsZUF2YWlsCit7CitwdWJsaWM6CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQlJc0RhdGFBdmFpbCggRlhfRklMRVNJWkUgb2Zmc2V0LCBGWF9EV09SRCBzaXplKSA9IDA7Cit9OworY2xhc3MgSUZYX0Rvd25sb2FkSGludHMKK3sKK3B1YmxpYzoKKworICAgIHZpcnR1YWwgdm9pZAkJCUFkZFNlZ21lbnQoRlhfRklMRVNJWkUgb2Zmc2V0LCBGWF9EV09SRCBzaXplKSA9IDA7Cit9OworI2RlZmluZSBQREZfSVNfTElORUFSSVpFRAkJCTEKKyNkZWZpbmUgUERGX05PVF9MSU5FQVJJWkVECQkJMAorI2RlZmluZSBQREZfVU5LTk9XX0xJTkVBUklaRUQJCS0xCisjZGVmaW5lIFBERkZPUk1fTk9UQVZBSUwJCTAKKyNkZWZpbmUgUERGRk9STV9BVkFJTAkJCTEKKyNkZWZpbmUgUERGRk9STV9OT1RFWElTVAkJMgorY2xhc3MgSVBERl9EYXRhQXZhaWwKK3sKK3B1YmxpYzoKKworICAgIHZpcnR1YWwgRlhfQk9PTAkJCUlzRG9jQXZhaWwoSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cykgPSAwOworCisKKyAgICB2aXJ0dWFsIHZvaWQJCQlTZXREb2N1bWVudChDUERGX0RvY3VtZW50KiBwRG9jKSA9IDA7CisKKworICAgIHZpcnR1YWwgRlhfQk9PTAkJCUlzUGFnZUF2YWlsKGludCBpUGFnZSwgSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cykgPSAwOworCisgICAgdmlydHVhbCBGWF9CT09MCQkJSXNMaW5lYXJpemVkKCkgPSAwOworCisgICAgdmlydHVhbCBGWF9JTlQzMgkJSXNGb3JtQXZhaWwoSUZYX0Rvd25sb2FkSGludHMgKnBIaW50cykgPSAwOworCisgICAgdmlydHVhbCBGWF9JTlQzMgkJSXNMaW5lYXJpemVkUERGKCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkCQkJCUdldExpbmVhcml6ZWRNYWluWFJlZkluZm8oRlhfRklMRVNJWkUgKnBQb3MsIEZYX0RXT1JEICpwU2l6ZSkgPSAwOworfTsKK2NsYXNzIENQREZfU29ydE9iak51bUFycmF5IDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIHZvaWQgQWRkT2JqTnVtKEZYX0RXT1JEIGR3T2JqTnVtKTsKKworICAgIEZYX0JPT0wgRmluZChGWF9EV09SRCBkd09iak51bSk7CisKKyAgICB2b2lkIFJlbW92ZUFsbCgpCisgICAgeworICAgICAgICBtX251bWJlcl9hcnJheS5SZW1vdmVBbGwoKTsKKyAgICB9Citwcm90ZWN0ZWQ6CisKKyAgICBGWF9CT09MIEJpbmFyeVNlYXJjaChGWF9EV09SRCB2YWx1ZSwgaW50ICZpTmV4dCk7Citwcm90ZWN0ZWQ6CisKKyAgICBDRlhfRFdvcmRBcnJheQkJCW1fbnVtYmVyX2FycmF5OworfTsKK2VudW0gUERGX1BBR0VOT0RFX1RZUEUgeworICAgIFBERl9QQUdFTk9ERV9VTktPV04gPSAwLAorICAgIFBERl9QQUdFTk9ERV9QQUdFLAorICAgIFBERl9QQUdFTk9ERV9QQUdFUywKKyAgICBQREZfUEFHRU5PREVfQVJSQVksCit9OworY2xhc3MgQ1BERl9QYWdlTm9kZSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ1BERl9QYWdlTm9kZSgpIDogbV90eXBlKFBERl9QQUdFTk9ERV9VTktPV04pIHt9CisgICAgfkNQREZfUGFnZU5vZGUoKTsKKyAgICBQREZfUEFHRU5PREVfVFlQRQltX3R5cGU7CisgICAgRlhfRFdPUkQJCQltX2R3UGFnZU5vOworICAgIENGWF9QdHJBcnJheQkJbV9jaGlsZE5vZGU7Cit9OworZW51bSBQREZfREFUQUFWQUlMX1NUQVRVUyB7CisgICAgUERGX0RBVEFBVkFJTF9IRUFERVIgPSAwLAorICAgIFBERl9EQVRBQVZBSUxfRklSU1RQQUdFLAorICAgIFBERl9EQVRBQVZBSUxfRklSU1RQQUdFX1BSRVBBUkUsCisgICAgUERGX0RBVEFBVkFJTF9FTkQsCisgICAgUERGX0RBVEFBVkFJTF9DUk9TU1JFRiwKKyAgICBQREZfREFUQUFWQUlMX0NST1NTUkVGX0lURU0sCisgICAgUERGX0RBVEFBVkFJTF9DUk9TU1JFRl9TVFJFQU0sCisgICAgUERGX0RBVEFBVkFJTF9UUkFJTEVSLAorICAgIFBERl9EQVRBQVZBSUxfTE9BREFMTENSU09TU1JFRiwKKyAgICBQREZfREFUQUFWQUlMX1JPT1QsCisgICAgUERGX0RBVEFBVkFJTF9JTkZPLAorICAgIFBERl9EQVRBQVZBSUxfQUNST0ZPUk0sCisgICAgUERGX0RBVEFBVkFJTF9BQ1JPRk9STV9TVUJPQkpFQ1QsCisgICAgUERGX0RBVEFBVkFJTF9QQUdFVFJFRSwKKyAgICBQREZfREFUQUFWQUlMX1BBR0UsCisgICAgUERGX0RBVEFBVkFJTF9QQUdFX0xBVEVSTE9BRCwKKyAgICBQREZfREFUQUFWQUlMX1JFU09VUkNFUywKKyAgICBQREZfREFUQUFWQUlMX0RPTkUsCisgICAgUERGX0RBVEFBVkFJTF9FUlJPUiwKKyAgICBQREZfREFUQUFWQUlMX0xPQURBTExGSUxFLAorICAgIFBERl9EQVRBQVZBSUxfVFJBSUxFUl9BUFBFTkQKK307CitjbGFzcyBDUERGX0RhdGFBdmFpbCA6IHB1YmxpYyBDRlhfT2JqZWN0LCBwdWJsaWMgSVBERl9EYXRhQXZhaWwKK3sKK3B1YmxpYzoKKworICAgIENQREZfRGF0YUF2YWlsKElGWF9GaWxlQXZhaWwqIHBGaWxlQXZhaWwsIElGWF9GaWxlUmVhZCogcEZpbGVSZWFkKTsKKyAgICB+Q1BERl9EYXRhQXZhaWwoKTsKKworICAgIHZpcnR1YWwgRlhfQk9PTAkJCQlJc0RvY0F2YWlsKElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpOworCisKKyAgICB2aXJ0dWFsIHZvaWQJCQkJU2V0RG9jdW1lbnQoQ1BERl9Eb2N1bWVudCogcERvYyk7CisKKworICAgIHZpcnR1YWwgRlhfQk9PTAkJCQlJc1BhZ2VBdmFpbChpbnQgaVBhZ2UsIElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpOworCisgICAgdmlydHVhbCBGWF9JTlQzMgkJCUlzRm9ybUF2YWlsKElGWF9Eb3dubG9hZEhpbnRzICpwSGludHMpOworCisgICAgdmlydHVhbCBGWF9JTlQzMgkJCUlzTGluZWFyaXplZFBERigpOworCisgICAgdmlydHVhbCBGWF9CT09MCQkJCUlzTGluZWFyaXplZCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9iTGluZWFyaXplZDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQJCQkJR2V0TGluZWFyaXplZE1haW5YUmVmSW5mbyhGWF9GSUxFU0laRSAqcFBvcywgRlhfRFdPUkQgKnBTaXplKTsKKyAgICBJRlhfRmlsZVJlYWQqCQkJCUdldEZpbGVSZWFkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BGaWxlUmVhZDsKKyAgICB9CisgICAgSUZYX0ZpbGVBdmFpbCoJCQkJR2V0RmlsZUF2YWlsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BGaWxlQXZhaWw7CisgICAgfQorcHJvdGVjdGVkOgorICAgIEZYX0RXT1JECQkJCQlHZXRPYmplY3RTaXplKEZYX0RXT1JEIG9iam51bSwgRlhfRklMRVNJWkUmIG9mZnNldCk7CisgICAgRlhfQk9PTAkJCQkJCUlzT2JqZWN0c0F2YWlsKENGWF9QdHJBcnJheSYgb2JqX2FycmF5LCBGWF9CT09MIGJQYXJzZVBhZ2UsIElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMsIENGWF9QdHJBcnJheSAmcmV0X2FycmF5KTsKKyAgICBGWF9CT09MCQkJCQkJQ2hlY2tEb2NTdGF0dXMoSUZYX0Rvd25sb2FkSGludHMgKnBIaW50cyk7CisgICAgRlhfQk9PTAkJCQkJCUNoZWNrSGVhZGVyKElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpOworICAgIEZYX0JPT0wJCQkJCQlDaGVja0ZpcnN0UGFnZShJRlhfRG93bmxvYWRIaW50cyAqcEhpbnRzKTsKKyAgICBGWF9CT09MCQkJCQkJQ2hlY2tFbmQoSUZYX0Rvd25sb2FkSGludHMgKnBIaW50cyk7CisgICAgRlhfQk9PTAkJCQkJCUNoZWNrQ3Jvc3NSZWYoSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cyk7CisgICAgRlhfQk9PTAkJCQkJCUNoZWNrQ3Jvc3NSZWZJdGVtKElGWF9Eb3dubG9hZEhpbnRzICpwSGludHMpOworICAgIEZYX0JPT0wJCQkJCQlDaGVja1RyYWlsZXIoSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cyk7CisgICAgRlhfQk9PTAkJCQkJCUNoZWNrUm9vdChJRlhfRG93bmxvYWRIaW50cyogcEhpbnRzKTsKKyAgICBGWF9CT09MCQkJCQkJQ2hlY2tJbmZvKElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpOworICAgIEZYX0JPT0wJCQkJCQlDaGVja1BhZ2VzKElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpOworICAgIEZYX0JPT0wJCQkJCQlDaGVja1BhZ2UoSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cyk7CisgICAgRlhfQk9PTAkJCQkJCUNoZWNrUmVzb3VyY2VzKElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpOworICAgIEZYX0JPT0wJCQkJCQlDaGVja0Fubm90cyhJRlhfRG93bmxvYWRIaW50cyogcEhpbnRzKTsKKyAgICBGWF9CT09MCQkJCQkJQ2hlY2tBY3JvRm9ybShJRlhfRG93bmxvYWRIaW50cyogcEhpbnRzKTsKKyAgICBGWF9CT09MCQkJCQkJQ2hlY2tBY3JvRm9ybVN1Yk9iamVjdChJRlhfRG93bmxvYWRIaW50cyogcEhpbnRzKTsKKyAgICBGWF9CT09MCQkJCQkJQ2hlY2tUcmFpbGVyQXBwZW5kKElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpOworICAgIEZYX0JPT0wJCQkJCQlDaGVja1BhZ2VTdGF0dXMoSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cyk7CisgICAgRlhfQk9PTAkJCQkJCUNoZWNrQWxsQ3Jvc3NSZWZTdHJlYW0oSUZYX0Rvd25sb2FkSGludHMgKnBIaW50cyk7CisKKyAgICBGWF9EV09SRAkJCQkJQ2hlY2tDcm9zc1JlZlN0cmVhbShJRlhfRG93bmxvYWRIaW50cyAqcEhpbnRzLCBGWF9GSUxFU0laRSAmeHJlZl9vZmZzZXQpOworICAgIEZYX0JPT0wJCQkJCQlJc0xpbmVhcml6ZWRGaWxlKEZYX0xQQllURSBwRGF0YSwgRlhfRFdPUkQgZHdMZW4pOworICAgIHZvaWQJCQkJCQlTZXRTdGFydE9mZnNldChGWF9GSUxFU0laRSBkd09mZnNldCk7CisgICAgRlhfQk9PTAkJCQkJCUdldE5leHRUb2tlbihDRlhfQnl0ZVN0cmluZyAmdG9rZW4pOworICAgIEZYX0JPT0wJCQkJCQlHZXROZXh0Q2hhcihGWF9CWVRFICZjaCk7CisgICAgQ1BERl9PYmplY3QJKgkJCQlQYXJzZUluZGlyZWN0T2JqZWN0QXQoRlhfRklMRVNJWkUgcG9zLCBGWF9EV09SRCBvYmpudW0pOworICAgIENQREZfT2JqZWN0CSoJCQkJR2V0T2JqZWN0KEZYX0RXT1JEIG9iam51bSwgSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cywgRlhfQk9PTCAqcEV4aXN0SW5GaWxlKTsKKyAgICBGWF9CT09MCQkJCQkJR2V0UGFnZUtpZHMoQ1BERl9QYXJzZXIgKnBQYXJzZXIsIENQREZfT2JqZWN0ICpwUGFnZXMpOworICAgIEZYX0JPT0wJCQkJCQlQcmVwYXJlUGFnZUl0ZW0oKTsKKyAgICBGWF9CT09MCQkJCQkJTG9hZFBhZ2VzKElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpOworICAgIEZYX0JPT0wJCQkJCQlMb2FkQWxsWHJlZihJRlhfRG93bmxvYWRIaW50cyogcEhpbnRzKTsKKyAgICBGWF9CT09MCQkJCQkJTG9hZEFsbEZpbGUoSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cyk7CisgICAgRlhfQk9PTAkJCQkJCUNoZWNrTGluZWFyaXplZERhdGEoSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cyk7CisgICAgRlhfQk9PTAkJCQkJCUNoZWNrRmlsZVJlc291cmNlcyhJRlhfRG93bmxvYWRIaW50cyogcEhpbnRzKTsKKyAgICBGWF9CT09MCQkJCQkJQ2hlY2tQYWdlQW5ub3RzKGludCBpUGFnZSwgSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cyk7CisKKyAgICBGWF9CT09MCQkJCQkJQ2hlY2tMaW5lYXJpemVkRmlyc3RQYWdlKGludCBpUGFnZSwgSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cyk7CisgICAgRlhfQk9PTAkJCQkJCUhhdmVSZXNvdXJjZUFuY2VzdG9yKENQREZfRGljdGlvbmFyeSAqcERpY3QpOworICAgIEZYX0JPT0wJCQkJCQlDaGVja1BhZ2UoRlhfSU5UMzIgaVBhZ2UsIElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpOworICAgIEZYX0JPT0wJCQkJCQlMb2FkRG9jUGFnZXMoSUZYX0Rvd25sb2FkSGludHMqIHBIaW50cyk7CisgICAgRlhfQk9PTAkJCQkJCUxvYWREb2NQYWdlKEZYX0lOVDMyIGlQYWdlLCBJRlhfRG93bmxvYWRIaW50cyogcEhpbnRzKTsKKyAgICBGWF9CT09MCQkJCQkJQ2hlY2tQYWdlTm9kZShDUERGX1BhZ2VOb2RlICZwYWdlTm9kZXMsIEZYX0lOVDMyIGlQYWdlLCBGWF9JTlQzMiAmaUNvdW50LCBJRlhfRG93bmxvYWRIaW50cyogcEhpbnRzKTsKKyAgICBGWF9CT09MCQkJCQkJQ2hlY2tVbmtvd25QYWdlTm9kZShGWF9EV09SRCBkd1BhZ2VObywgQ1BERl9QYWdlTm9kZSAqcFBhZ2VOb2RlLCBJRlhfRG93bmxvYWRIaW50cyogcEhpbnRzKTsKKyAgICBGWF9CT09MCQkJCQkJQ2hlY2tBcnJheVBhZ2VOb2RlKEZYX0RXT1JEIGR3UGFnZU5vLCBDUERGX1BhZ2VOb2RlICpwUGFnZU5vZGUsIElGWF9Eb3dubG9hZEhpbnRzKiBwSGludHMpOworICAgIEZYX0JPT0wgICAgICAgICAgICAgICAgICAgICBDaGVja1BhZ2VDb3VudChJRlhfRG93bmxvYWRIaW50cyogcEhpbnRzKTsKKyAgICBGWF9CT09MCQkJCQkJSXNGaXJzdENoZWNrKGludCBpUGFnZSk7CisgICAgdm9pZAkJCQkJCVJlc2V0Rmlyc3RDaGVjayhpbnQgaVBhZ2UpOworCisgICAgQ1BERl9QYXJzZXIJCQkJbV9wYXJzZXI7CisKKyAgICBDUERGX1N5bnRheFBhcnNlcgkJbV9zeW50YXhQYXJzZXI7CisKKyAgICBDUERGX09iamVjdAkJCQkqbV9wUm9vdDsKKworICAgIEZYX0RXT1JECQkJCW1fZHdSb290T2JqTnVtOworCisgICAgRlhfRFdPUkQJCQkJbV9kd0luZm9PYmpOdW07CisKKyAgICBDUERGX09iamVjdAkJCQkqbV9wTGluZWFyaXplZDsKKworICAgIENQREZfT2JqZWN0CQkJCSptX3BUcmFpbGVyOworCisgICAgRlhfQk9PTAkJCQkJbV9iRG9jQXZhaWw7CisKKyAgICBGWF9GSUxFU0laRQkJCQltX2R3SGVhZGVyT2Zmc2V0OworCisgICAgRlhfRklMRVNJWkUJCQkJbV9kd0xhc3RYUmVmT2Zmc2V0OworCisgICAgRlhfRklMRVNJWkUJCQkJbV9kd1hSZWZPZmZzZXQ7CisKKyAgICBGWF9GSUxFU0laRQkJCQltX2R3VHJhaWxlck9mZnNldDsKKworICAgIEZYX0ZJTEVTSVpFCQkJCW1fZHdDdXJyZW50T2Zmc2V0OworCisgICAgUERGX0RBVEFBVkFJTF9TVEFUVVMJbV9kb2NTdGF0dXM7CisKKyAgICBJRlhfRmlsZUF2YWlsKgkJCW1fcEZpbGVBdmFpbDsKKworICAgIElGWF9GaWxlUmVhZCoJCQltX3BGaWxlUmVhZDsKKworICAgIEZYX0ZJTEVTSVpFCQkJCW1fZHdGaWxlTGVuOworCisgICAgQ1BERl9Eb2N1bWVudCoJCQltX3BEb2N1bWVudDsKKworICAgIENQREZfU29ydE9iak51bUFycmF5CW1fb2JqbnVtX2FycmF5OworCisgICAgQ0ZYX1B0ckFycmF5CQkJbV9vYmpzX2FycmF5OworCisgICAgRlhfRklMRVNJWkUJCQkJbV9Qb3M7CisKKyAgICBGWF9GSUxFU0laRQkJCQltX2J1ZmZlck9mZnNldDsKKworICAgIEZYX0RXT1JECQkJCW1fYnVmZmVyU2l6ZTsKKworICAgIENGWF9CeXRlU3RyaW5nCQkJbV9Xb3JkQnVmOworCisgICAgRlhfQllURQkJCQkJbV9Xb3JkQnVmZmVyWzI1N107CisKKyAgICBGWF9EV09SRAkJCQltX1dvcmRTaXplOworCisgICAgRlhfQllURQkJCQkJbV9idWZmZXJEYXRhWzUxMl07CisKKyAgICBDRlhfRmlsZVNpemVBcnJheQkJbV9Dcm9zc09mZnNldDsKKworICAgIENGWF9EV29yZEFycmF5CQkJbV9YUmVmU3RyZWFtTGlzdDsKKworICAgIENGWF9EV29yZEFycmF5CQkJbV9QYWdlT2JqTGlzdDsKKworICAgIEZYX0RXT1JECQkJCW1fUGFnZXNPYmpOdW07CisKKyAgICBGWF9CT09MCQkJCQltX2JMaW5lYXJpemVkOworCisgICAgRlhfRFdPUkQJCQkJbV9kd0ZpcnN0UGFnZU5vOworCisgICAgRlhfQk9PTAkJCQkJbV9iTGluZWFyZWREYXRhT0s7CisKKyAgICBGWF9CT09MCQkJCQltX2JNYWluWFJlZkxvYWQ7CisKKyAgICBGWF9CT09MCQkJCQltX2JNYWluWFJlZkxvYWRlZE9LOworCisgICAgRlhfQk9PTAkJCQkJbV9iUGFnZXNUcmVlTG9hZDsKKworICAgIEZYX0JPT0wJCQkJCW1fYlBhZ2VzTG9hZDsKKworICAgIENQREZfUGFyc2VyICoJCQltX3BDdXJyZW50UGFyc2VyOworCisgICAgRlhfRklMRVNJWkUJCQkJbV9kd0N1cnJlbnRYUmVmU3RlYW07CisKKyAgICBGWF9CT09MCQkJCQltX2JBbm5vdHNMb2FkOworCisgICAgRlhfQk9PTAkJCQkJbV9iSGF2ZUFjcm9Gb3JtOworCisgICAgRlhfRFdPUkQJCQkJbV9kd0Fjcm9Gb3JtT2JqTnVtOworCisgICAgRlhfQk9PTAkJCQkJbV9iQWNyb0Zvcm1Mb2FkOworCisgICAgQ1BERl9PYmplY3QJKgkJCW1fcEFjcm9Gb3JtOworCisgICAgQ0ZYX1B0ckFycmF5CQkJbV9hcnJheUFjcm9mb3JtczsKKworICAgIENQREZfRGljdGlvbmFyeSAqCQltX3BQYWdlRGljdDsKKworICAgIENQREZfT2JqZWN0ICoJCQltX3BQYWdlUmVzb3VyY2U7CisKKyAgICBGWF9CT09MCQkJCQltX2JOZWVkRG93bkxvYWRSZXNvdXJjZTsKKworICAgIEZYX0JPT0wJCQkJCW1fYlBhZ2VMb2FkZWRPSzsKKworICAgIEZYX0JPT0wJCQkJCW1fYkxpbmVhcml6ZWRGb3JtUGFyYW1Mb2FkOworCisgICAgQ0ZYX1B0ckFycmF5CQkJbV9QYWdlc0FycmF5OworCisgICAgRlhfRFdPUkQJCQkJbV9kd0VuY3J5cHRPYmpOdW07CisKKyAgICBGWF9GSUxFU0laRQkJCQltX2R3UHJldlhSZWZPZmZzZXQ7CisKKyAgICBGWF9CT09MCQkJCQltX2JUb3RhbExvYWRQYWdlVHJlZTsKKworICAgIEZYX0JPT0wJCQkJCW1fYkN1clBhZ2VEaWN0TG9hZE9LOworCisgICAgQ1BERl9QYWdlTm9kZQkJCW1fcGFnZU5vZGVzOworCisgICAgQ0ZYX0NNYXBEV29yZFRvRFdvcmQgKgltX3BhZ2VNYXBDaGVja1N0YXRlOworCisgICAgQ0ZYX0NNYXBEV29yZFRvRFdvcmQgKgltX3BhZ2VzTG9hZFN0YXRlOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9yZW5kZXIuaCBiL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcmVuZGVyLmgKaW5kZXggMjJiYTU2Zi4uYzA1OWJlZCAxMDA2NDQKLS0tIGEvY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9yZW5kZXIuaAorKysgYi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3JlbmRlci5oCkBAIC0xLDMxOCArMSwzMTggQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0ZQREZfUkVOREVSXw0KLSNkZWZpbmUgX0ZQREZfUkVOREVSXw0KLSNpZm5kZWYgX0ZQREZfUEFHRV8NCi0jaW5jbHVkZSAiZnBkZl9wYWdlLmgiDQotI2VuZGlmDQotI2lmbmRlZiBfRlhfR0VfSF8NCi0jaW5jbHVkZSAiLi4vZnhnZS9meF9nZS5oIg0KLSNlbmRpZg0KLWNsYXNzIENQREZfUmVuZGVyQ29udGV4dDsNCi1jbGFzcyBDUERGX1JlbmRlck9wdGlvbnM7DQotY2xhc3MgQ1BERl9JbWFnZUNhY2hlOw0KLWNsYXNzIElQREZfT0NDb250ZXh0Ow0KLWNsYXNzIENQREZfUXVpY2tTdHJldGNoZXI7DQotY2xhc3MgQ0ZYX1BhdGhEYXRhOw0KLWNsYXNzIENGWF9HcmFwaFN0YXRlRGF0YTsNCi1jbGFzcyBDRlhfUmVuZGVyRGV2aWNlOw0KLWNsYXNzIENQREZfVGV4dE9iamVjdDsNCi1jbGFzcyBDUERGX1BhdGhPYmplY3Q7DQotY2xhc3MgQ1BERl9JbWFnZU9iamVjdDsNCi1jbGFzcyBDUERGX1NoYWRpbmdPYmplY3Q7DQotY2xhc3MgQ1BERl9Gb3JtT2JqZWN0Ow0KLWNsYXNzIElQREZfT0NDb250ZXh0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgdmlydHVhbCB+SVBERl9PQ0NvbnRleHQoKSB7fQ0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJQ2hlY2tPQ0dWaXNpYmxlKGNvbnN0IENQREZfRGljdGlvbmFyeSogcE9DRykgPSAwOw0KLQ0KLSAgICBGWF9CT09MIENoZWNrT2JqZWN0VmlzaWJsZShjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmopOw0KLX07DQotI2RlZmluZSBSRU5ERVJfQ09MT1JfTk9STUFMCQkwDQotI2RlZmluZSBSRU5ERVJfQ09MT1JfR1JBWQkJMQ0KLSNkZWZpbmUgUkVOREVSX0NPTE9SX1RXT0NPTE9SCTINCi0jZGVmaW5lIFJFTkRFUl9DT0xPUl9BTFBIQQkJMw0KLSNkZWZpbmUgUkVOREVSX0NMRUFSVFlQRQkJCTB4MDAwMDAwMDENCi0jZGVmaW5lIFJFTkRFUl9QUklOVEdSQVBISUNURVhUCQkweDAwMDAwMDAyDQotI2RlZmluZSBSRU5ERVJfRk9SQ0VfRE9XTlNBTVBMRQkJMHgwMDAwMDAwNA0KLSNkZWZpbmUgUkVOREVSX1BSSU5UUFJFVklFVwkJCTB4MDAwMDAwMDgNCi0jZGVmaW5lIFJFTkRFUl9CR1JfU1RSSVBFCQkJMHgwMDAwMDAxMA0KLSNkZWZpbmUgUkVOREVSX05PX05BVElWRVRFWFQJCTB4MDAwMDAwMjANCi0jZGVmaW5lIFJFTkRFUl9GT1JDRV9IQUxGVE9ORQkJMHgwMDAwMDA0MA0KLSNkZWZpbmUgUkVOREVSX1JFQ1RfQUEJCQkJMHgwMDAwMDA4MA0KLSNkZWZpbmUgUkVOREVSX0ZJTExfRlVMTENPVkVSCQkweDAwMDAwMTAwDQotI2RlZmluZSBSRU5ERVJfUFJJTlRJTUFHRVRFWFQgICAgICAgMHgwMDAwMDIwMA0KLSNkZWZpbmUgUkVOREVSX09WRVJQUklOVCAgICAgICAgICAgIDB4MDAwMDA0MDANCi0jZGVmaW5lIFJFTkRFUl9USElOTElORSAgICAgICAgICAgICAweDAwMDAwODAwDQotI2RlZmluZSBSRU5ERVJfTk9URVhUU01PT1RICQkJMHgxMDAwMDAwMA0KLSNkZWZpbmUgUkVOREVSX05PUEFUSFNNT09USAkJCTB4MjAwMDAwMDANCi0jZGVmaW5lIFJFTkRFUl9OT0lNQUdFU01PT1RICQkweDQwMDAwMDAwDQotI2RlZmluZSBSRU5ERVJfTElNSVRFRElNQUdFQ0FDSEUJMHg4MDAwMDAwMA0KLWNsYXNzIENQREZfUmVuZGVyT3B0aW9ucyA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9SZW5kZXJPcHRpb25zKCk7DQotDQotICAgIGludAkJCQltX0NvbG9yTW9kZTsNCi0NCi0gICAgRlhfQ09MT1JSRUYJCW1fQmFja0NvbG9yOw0KLQ0KLSAgICBGWF9DT0xPUlJFRgkJbV9Gb3JlQ29sb3I7DQotDQotICAgIEZYX0RXT1JECQltX0ZsYWdzOw0KLQ0KLSAgICBpbnQJCQkJbV9JbnRlcnBvbGF0aW9uOw0KLQ0KLSAgICBGWF9EV09SRAkJbV9BZGRGbGFnczsNCi0NCi0gICAgSVBERl9PQ0NvbnRleHQqCW1fcE9DQ29udGV4dDsNCi0NCi0gICAgRlhfRFdPUkQJCW1fZHdMaW1pdENhY2hlU2l6ZTsNCi0NCi0gICAgaW50CQkJCW1fSGFsZnRvbmVMaW1pdDsNCi0NCi0gICAgRlhfQVJHQgkJCVRyYW5zbGF0ZUNvbG9yKEZYX0FSR0IgYXJnYikgY29uc3Q7DQotfTsNCi1jbGFzcyBDUERGX1JlbmRlckNvbnRleHQgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfUmVuZGVyQ29udGV4dCgpOw0KLQ0KLSAgICB2b2lkCQkJQ3JlYXRlKENQREZfUGFnZSogcFBhZ2UsIEZYX0JPT0wgYkZpcnN0TGF5ZXIgPSBUUlVFKTsNCi0NCi0gICAgdm9pZAkJCUNyZWF0ZShDUERGX0RvY3VtZW50KiBwRG9jID0gTlVMTCwgQ1BERl9QYWdlUmVuZGVyQ2FjaGUqIHBQYWdlQ2FjaGUgPSBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcFBhZ2VSZXNvdXJjZXMgPSBOVUxMLCBGWF9CT09MIGJGaXJzdExheWVyID0gVFJVRSk7DQotDQotICAgIH5DUERGX1JlbmRlckNvbnRleHQoKTsNCi0NCi0gICAgdm9pZAkJCUNsZWFyKCk7DQotDQotICAgIHZvaWQJCQlBcHBlbmRPYmplY3RMaXN0KENQREZfUGFnZU9iamVjdHMqIHBPYmpzLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkRldmljZSk7DQotDQotICAgIHZvaWQJCQlTZXRCYWNrZ3JvdW5kKGNsYXNzIElQREZfQmFja2dyb3VuZERyYXcqIHBCYWNrZ3JvdW5kKTsNCi0NCi0gICAgdm9pZAkJCVJlbmRlcihDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zID0gTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwRmluYWxNYXRyaXggPSBOVUxMKTsNCi0NCi0gICAgdm9pZAkJCURyYXdPYmplY3RMaXN0KENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfUGFnZU9iamVjdHMqIHBPYmpzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMpOw0KLQ0KLSAgICB2b2lkCQkJR2V0QmFja2dyb3VuZChDRlhfRElCaXRtYXAqIHBCdWZmZXIsIGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucywgQ0ZYX0FmZmluZU1hdHJpeCogcEZpbmFsTWF0cml4KTsNCi0NCi0gICAgQ1BERl9QYWdlUmVuZGVyQ2FjaGUqCUdldFBhZ2VDYWNoZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BQYWdlQ2FjaGU7DQotICAgIH0NCi0NCi0NCi0NCi0gICAgQ1BERl9Eb2N1bWVudCoJCQltX3BEb2N1bWVudDsNCi0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KgkJbV9wUGFnZVJlc291cmNlczsNCi0NCi0gICAgQ1BERl9QYWdlUmVuZGVyQ2FjaGUqCW1fcFBhZ2VDYWNoZTsNCi0NCi1wcm90ZWN0ZWQ6DQotDQotICAgIENGWF9BcnJheVRlbXBsYXRlPHN0cnVjdCBfUERGX1JlbmRlckl0ZW0+CW1fQ29udGVudExpc3Q7DQotDQotICAgIElQREZfQmFja2dyb3VuZERyYXcqCW1fcEJhY2tncm91bmREcmF3Ow0KLQ0KLSAgICBGWF9CT09MCQkJCQltX2JGaXJzdExheWVyOw0KLQ0KLSAgICB2b2lkCQkJUmVuZGVyKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIGNvbnN0IENQREZfUGFnZU9iamVjdCogcFN0b3BPYmosDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucywgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcEZpbmFsTWF0cml4KTsNCi0gICAgZnJpZW5kIGNsYXNzIENQREZfUmVuZGVyU3RhdHVzOw0KLSAgICBmcmllbmQgY2xhc3MgQ1BERl9Qcm9ncmVzc2l2ZVJlbmRlcmVyOw0KLX07DQotY2xhc3MgSVBERl9CYWNrZ3JvdW5kRHJhdw0KLXsNCi1wdWJsaWM6DQotDQotICAgIHZpcnR1YWwJdm9pZAlPbkRyYXdCYWNrZ3JvdW5kKA0KLSAgICAgICAgQ0ZYX1JlbmRlckRldmljZSogcEJpdG1hcERldmljZSwNCi0gICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPcmlnaW5hbDJCaXRtYXANCi0gICAgKSA9IDA7DQotfTsNCi1jbGFzcyBDUERGX1Byb2dyZXNzaXZlUmVuZGVyZXIgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfUHJvZ3Jlc3NpdmVSZW5kZXJlcigpOw0KLQ0KLSAgICB+Q1BERl9Qcm9ncmVzc2l2ZVJlbmRlcmVyKCk7DQotDQotICAgIHR5cGVkZWYgZW51bSB7DQotICAgICAgICBSZWFkeSwNCi0gICAgICAgIFRvQmVDb250aW51ZWQsDQotICAgICAgICBEb25lLA0KLSAgICAgICAgRmFpbGVkDQotICAgIH0gUmVuZGVyU3RhdHVzOw0KLQ0KLSAgICBSZW5kZXJTdGF0dXMJCUdldFN0YXR1cygpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX1N0YXR1czsNCi0gICAgfQ0KLQ0KLQ0KLQ0KLSAgICB2b2lkCQkJCVN0YXJ0KENQREZfUmVuZGVyQ29udGV4dCogcENvbnRleHQsIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucywgY2xhc3MgSUZYX1BhdXNlKiBwUGF1c2UsIEZYX0JPT0wgYkRyb3BPYmplY3RzID0gRkFMU0UpOw0KLQ0KLSAgICB2b2lkCQkJCUNvbnRpbnVlKGNsYXNzIElGWF9QYXVzZSogcFBhdXNlKTsNCi0NCi0NCi0gICAgaW50CQkJCQlFc3RpbWF0ZVByb2dyZXNzKCk7DQotDQotICAgIHZvaWQJCQkJQ2xlYXIoKTsNCi1wcm90ZWN0ZWQ6DQotDQotICAgIFJlbmRlclN0YXR1cwkJbV9TdGF0dXM7DQotDQotICAgIENQREZfUmVuZGVyQ29udGV4dCoJbV9wQ29udGV4dDsNCi0NCi0gICAgQ0ZYX1JlbmRlckRldmljZSoJbV9wRGV2aWNlOw0KLQ0KLSAgICBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMqCW1fcE9wdGlvbnM7DQotDQotICAgIEZYX0JPT0wJCQkJbV9iRHJvcE9iamVjdHM7DQotDQotICAgIGNsYXNzIENQREZfUmVuZGVyU3RhdHVzKgltX3BSZW5kZXJlcjsNCi0NCi0gICAgQ0ZYX0Zsb2F0UmVjdAkJbV9DbGlwUmVjdDsNCi0NCi0gICAgRlhfRFdPUkQJCQltX0xheWVySW5kZXg7DQotDQotICAgIEZYX0RXT1JECQkJbV9PYmplY3RJbmRleDsNCi0NCi0gICAgRlhfUE9TSVRJT04JCQltX09iamVjdFBvczsNCi0NCi0gICAgRlhfUE9TSVRJT04JCQltX1ByZXZMYXN0UG9zOw0KLQ0KLSAgICB2b2lkCQkJCVJlbmRlclN0ZXAoKTsNCi19Ow0KLWNsYXNzIENQREZfVGV4dFJlbmRlcmVyIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBzdGF0aWMgdm9pZAkJRHJhd1RleHRTdHJpbmcoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgaW50IGxlZnQsIGludCB0b3AsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0ZvbnQqIHBGb250LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9BUkdCIGFyZ2IpOw0KLQ0KLSAgICBzdGF0aWMgdm9pZAkJRHJhd1RleHRTdHJpbmcoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgRlhfRkxPQVQgb3JpZ2luX3gsIEZYX0ZMT0FUIG9yaWdpbl95LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9Gb250KiBwRm9udCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIGZvbnRfc2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIG1hdHJpeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9BUkdCIGZpbGxfYXJnYiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0FSR0Igc3Ryb2tlX2FyZ2IgPSAwLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZSA9IE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zID0gTlVMTA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KLQ0KLSAgICBzdGF0aWMgRlhfQk9PTAlEcmF3VGV4dFBhdGgoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgaW50IG5DaGFycywgRlhfRFdPUkQqIHBDaGFyQ29kZXMsIEZYX0ZMT0FUKiBwQ2hhclBvcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0ZvbnQqIHBGb250LCBGWF9GTE9BVCBmb250X3NpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcFRleHQyVXNlciwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcFVzZXIyRGV2aWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQVJHQiBmaWxsX2FyZ2IsIEZYX0FSR0Igc3Ryb2tlX2FyZ2IsIENGWF9QYXRoRGF0YSogcENsaXBwaW5nUGF0aCwgaW50IG5GbGFnID0gMCk7DQotDQotICAgIHN0YXRpYyBGWF9CT09MCURyYXdOb3JtYWxUZXh0KENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIGludCBuQ2hhcnMsIEZYX0RXT1JEKiBwQ2hhckNvZGVzLCBGWF9GTE9BVCogcENoYXJQb3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0ZvbnQqIHBGb250LCBGWF9GTE9BVCBmb250X3NpemUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBUZXh0MkRldmljZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0FSR0IgZmlsbF9hcmdiLCBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zKTsNCi0NCi0gICAgc3RhdGljIEZYX0JPT0wJRHJhd1R5cGUzVGV4dChDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBpbnQgbkNoYXJzLCBGWF9EV09SRCogcENoYXJDb2RlcywgRlhfRkxPQVQqIHBDaGFyUG9zLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0ZvbnQqIHBGb250LCBGWF9GTE9BVCBmb250X3NpemUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBUZXh0MkRldmljZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQVJHQiBmaWxsX2FyZ2IpOw0KLX07DQotY2xhc3MgSVBERl9QYWdlSW1hZ2VDYWNoZQ0KLXsNCi1wdWJsaWM6DQotDQotICAgIHN0YXRpYyBJUERGX1BhZ2VJbWFnZUNhY2hlKiBDcmVhdGUoKTsNCi0NCi0gICAgdmlydHVhbCB+SVBERl9QYWdlSW1hZ2VDYWNoZSgpIHt9DQotDQotICAgIHZpcnR1YWwgdm9pZAkJT3V0cHV0UGFnZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX1BhZ2UqIHBQYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBvc194LCBpbnQgcG9zX3ksIGludCBzaXplX3gsIGludCBzaXplX3ksIGludCByb3RhdGUpID0gMDsNCi0NCi0gICAgdmlydHVhbCB2b2lkCQlTZXRDYWNoZUxpbWl0KEZYX0RXT1JEIGxpbWl0KSA9IDA7DQotfTsNCi1jbGFzcyBDUERGX1BhZ2VSZW5kZXJDYWNoZSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgQ1BERl9QYWdlUmVuZGVyQ2FjaGUoQ1BERl9QYWdlKiBwUGFnZSkNCi0gICAgew0KLSAgICAgICAgbV9wUGFnZSA9IHBQYWdlOw0KLSAgICAgICAgbV9uVGltZUNvdW50ID0gMDsNCi0gICAgICAgIG1fbkNhY2hlU2l6ZSA9IDA7DQotICAgICAgICBtX3BDdXJJbWFnZUNhY2hlID0gTlVMTDsNCi0gICAgICAgIG1fYkN1ckZpbmRDYWNoZSA9IEZBTFNFOw0KLSAgICAgICAgbV9wQ3VySW1hZ2VDYWNoZXMgPSBOVUxMOw0KLSAgICB9DQotICAgIH5DUERGX1BhZ2VSZW5kZXJDYWNoZSgpDQotICAgIHsNCi0gICAgICAgIENsZWFyQWxsKCk7DQotICAgIH0NCi0gICAgdm9pZAkJCQlDbGVhckFsbCgpOw0KLSAgICB2b2lkCQkJCUNsZWFySW1hZ2VEYXRhKCk7DQotDQotICAgIEZYX0RXT1JECQkJRXN0aW1hdGVTaXplKCk7DQotICAgIHZvaWQJCQkJQ2FjaGVPcHRpbWl6YXRpb24oRlhfSU5UMzIgZHdMaW1pdENhY2hlU2l6ZSk7DQotICAgIEZYX0RXT1JECQkJR2V0Q2FjaGVkU2l6ZShDUERGX1N0cmVhbSogcFN0cmVhbSkgY29uc3Q7DQotICAgIEZYX0RXT1JECQkJR2V0VGltZUNvdW50KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fblRpbWVDb3VudDsNCi0gICAgfQ0KLSAgICB2b2lkCQkJCVNldFRpbWVDb3VudChGWF9EV09SRCBkd1RpbWVDb3VudCkNCi0gICAgew0KLSAgICAgICAgbV9uVGltZUNvdW50ID0gZHdUaW1lQ291bnQ7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCQlHZXRDYWNoZWRCaXRtYXAoQ1BERl9TdHJlYW0qIHBTdHJlYW0sIENGWF9ESUJTb3VyY2UqJiBwQml0bWFwLCBDRlhfRElCU291cmNlKiYgcE1hc2ssIEZYX0RXT1JEJiBNYXR0ZUNvbG9yLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9CT09MIGJTdGRDUyA9IEZBTFNFLCBGWF9EV09SRCBHcm91cEZhbWlseSA9IDAsIEZYX0JPT0wgYkxvYWRNYXNrID0gRkFMU0UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfUmVuZGVyU3RhdHVzKiBwUmVuZGVyU3RhdHVzID0gTlVMTCwgRlhfSU5UMzIgZG93bnNhbXBsZVdpZHRoID0gMCwgRlhfSU5UMzIgZG93bnNhbXBsZUhlaWdodCA9IDApOw0KLQ0KLSAgICB2b2lkCQkJCVJlc2V0Qml0bWFwKENQREZfU3RyZWFtKiBwU3RyZWFtLCBjb25zdCBDRlhfRElCaXRtYXAqIHBCaXRtYXApOw0KLSAgICB2b2lkCQkJCUNsZWFySW1hZ2VDYWNoZShDUERGX1N0cmVhbSogcFN0cmVhbSk7DQotICAgIENQREZfUGFnZSoJCQlHZXRQYWdlKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcFBhZ2U7DQotICAgIH0NCi0gICAgQ0ZYX01hcFB0clRvUHRyCQltX0ltYWdlQ2FjaGVzOw0KLXB1YmxpYzoNCi0gICAgRlhfQk9PTAkJCQlTdGFydEdldENhY2hlZEJpdG1hcChDUERGX1N0cmVhbSogcFN0cmVhbSwgRlhfQk9PTCBiU3RkQ1MgPSBGQUxTRSwgRlhfRFdPUkQgR3JvdXBGYW1pbHkgPSAwLA0KLSAgICAgICAgICAgIEZYX0JPT0wgYkxvYWRNYXNrID0gRkFMU0UsIENQREZfUmVuZGVyU3RhdHVzKiBwUmVuZGVyU3RhdHVzID0gTlVMTCwNCi0gICAgICAgICAgICBGWF9JTlQzMiBkb3duc2FtcGxlV2lkdGggPSAwLCBGWF9JTlQzMiBkb3duc2FtcGxlSGVpZ2h0ID0gMCk7DQotDQotICAgIEZYX0JPT0wJCQkJQ29udGludWUoSUZYX1BhdXNlKiBwUGF1c2UpOw0KLSAgICBDUERGX0ltYWdlQ2FjaGUqCW1fcEN1ckltYWdlQ2FjaGU7DQotICAgIENGWF9QdHJBcnJheSogICAgICAgbV9wQ3VySW1hZ2VDYWNoZXM7DQotcHJvdGVjdGVkOg0KLSAgICBmcmllbmQgY2xhc3MJCUNQREZfUGFnZTsNCi0gICAgQ1BERl9QYWdlKgkJCW1fcFBhZ2U7DQotDQotICAgIEZYX0RXT1JECQkJbV9uVGltZUNvdW50Ow0KLSAgICBGWF9EV09SRAkJCW1fbkNhY2hlU2l6ZTsNCi0gICAgRlhfQk9PTAkJCQltX2JDdXJGaW5kQ2FjaGU7DQotfTsNCi1jbGFzcyBDUERGX1JlbmRlckNvbmZpZyA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgQ1BERl9SZW5kZXJDb25maWcoKTsNCi0gICAgfkNQREZfUmVuZGVyQ29uZmlnKCk7DQotICAgIGludAkJCQkJbV9IYWxmdG9uZUxpbWl0Ow0KLSAgICBpbnQJCQkJCW1fUmVuZGVyU3RlcExpbWl0Ow0KLX07DQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlBERl9SRU5ERVJfCisjZGVmaW5lIF9GUERGX1JFTkRFUl8KKyNpZm5kZWYgX0ZQREZfUEFHRV8KKyNpbmNsdWRlICJmcGRmX3BhZ2UuaCIKKyNlbmRpZgorI2lmbmRlZiBfRlhfR0VfSF8KKyNpbmNsdWRlICIuLi9meGdlL2Z4X2dlLmgiCisjZW5kaWYKK2NsYXNzIENQREZfUmVuZGVyQ29udGV4dDsKK2NsYXNzIENQREZfUmVuZGVyT3B0aW9uczsKK2NsYXNzIENQREZfSW1hZ2VDYWNoZTsKK2NsYXNzIElQREZfT0NDb250ZXh0OworY2xhc3MgQ1BERl9RdWlja1N0cmV0Y2hlcjsKK2NsYXNzIENGWF9QYXRoRGF0YTsKK2NsYXNzIENGWF9HcmFwaFN0YXRlRGF0YTsKK2NsYXNzIENGWF9SZW5kZXJEZXZpY2U7CitjbGFzcyBDUERGX1RleHRPYmplY3Q7CitjbGFzcyBDUERGX1BhdGhPYmplY3Q7CitjbGFzcyBDUERGX0ltYWdlT2JqZWN0OworY2xhc3MgQ1BERl9TaGFkaW5nT2JqZWN0OworY2xhc3MgQ1BERl9Gb3JtT2JqZWN0OworY2xhc3MgSVBERl9PQ0NvbnRleHQKK3sKK3B1YmxpYzoKKworICAgIHZpcnR1YWwgfklQREZfT0NDb250ZXh0KCkge30KKworICAgIHZpcnR1YWwgRlhfQk9PTAlDaGVja09DR1Zpc2libGUoY29uc3QgQ1BERl9EaWN0aW9uYXJ5KiBwT0NHKSA9IDA7CisKKyAgICBGWF9CT09MIENoZWNrT2JqZWN0VmlzaWJsZShjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmopOworfTsKKyNkZWZpbmUgUkVOREVSX0NPTE9SX05PUk1BTAkJMAorI2RlZmluZSBSRU5ERVJfQ09MT1JfR1JBWQkJMQorI2RlZmluZSBSRU5ERVJfQ09MT1JfVFdPQ09MT1IJMgorI2RlZmluZSBSRU5ERVJfQ09MT1JfQUxQSEEJCTMKKyNkZWZpbmUgUkVOREVSX0NMRUFSVFlQRQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgUkVOREVSX1BSSU5UR1JBUEhJQ1RFWFQJCTB4MDAwMDAwMDIKKyNkZWZpbmUgUkVOREVSX0ZPUkNFX0RPV05TQU1QTEUJCTB4MDAwMDAwMDQKKyNkZWZpbmUgUkVOREVSX1BSSU5UUFJFVklFVwkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgUkVOREVSX0JHUl9TVFJJUEUJCQkweDAwMDAwMDEwCisjZGVmaW5lIFJFTkRFUl9OT19OQVRJVkVURVhUCQkweDAwMDAwMDIwCisjZGVmaW5lIFJFTkRFUl9GT1JDRV9IQUxGVE9ORQkJMHgwMDAwMDA0MAorI2RlZmluZSBSRU5ERVJfUkVDVF9BQQkJCQkweDAwMDAwMDgwCisjZGVmaW5lIFJFTkRFUl9GSUxMX0ZVTExDT1ZFUgkJMHgwMDAwMDEwMAorI2RlZmluZSBSRU5ERVJfUFJJTlRJTUFHRVRFWFQgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBSRU5ERVJfT1ZFUlBSSU5UICAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBSRU5ERVJfVEhJTkxJTkUgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBSRU5ERVJfTk9URVhUU01PT1RICQkJMHgxMDAwMDAwMAorI2RlZmluZSBSRU5ERVJfTk9QQVRIU01PT1RICQkJMHgyMDAwMDAwMAorI2RlZmluZSBSRU5ERVJfTk9JTUFHRVNNT09USAkJMHg0MDAwMDAwMAorI2RlZmluZSBSRU5ERVJfTElNSVRFRElNQUdFQ0FDSEUJMHg4MDAwMDAwMAorY2xhc3MgQ1BERl9SZW5kZXJPcHRpb25zIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENQREZfUmVuZGVyT3B0aW9ucygpOworCisgICAgaW50CQkJCW1fQ29sb3JNb2RlOworCisgICAgRlhfQ09MT1JSRUYJCW1fQmFja0NvbG9yOworCisgICAgRlhfQ09MT1JSRUYJCW1fRm9yZUNvbG9yOworCisgICAgRlhfRFdPUkQJCW1fRmxhZ3M7CisKKyAgICBpbnQJCQkJbV9JbnRlcnBvbGF0aW9uOworCisgICAgRlhfRFdPUkQJCW1fQWRkRmxhZ3M7CisKKyAgICBJUERGX09DQ29udGV4dCoJbV9wT0NDb250ZXh0OworCisgICAgRlhfRFdPUkQJCW1fZHdMaW1pdENhY2hlU2l6ZTsKKworICAgIGludAkJCQltX0hhbGZ0b25lTGltaXQ7CisKKyAgICBGWF9BUkdCCQkJVHJhbnNsYXRlQ29sb3IoRlhfQVJHQiBhcmdiKSBjb25zdDsKK307CitjbGFzcyBDUERGX1JlbmRlckNvbnRleHQgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ1BERl9SZW5kZXJDb250ZXh0KCk7CisKKyAgICB2b2lkCQkJQ3JlYXRlKENQREZfUGFnZSogcFBhZ2UsIEZYX0JPT0wgYkZpcnN0TGF5ZXIgPSBUUlVFKTsKKworICAgIHZvaWQJCQlDcmVhdGUoQ1BERl9Eb2N1bWVudCogcERvYyA9IE5VTEwsIENQREZfUGFnZVJlbmRlckNhY2hlKiBwUGFnZUNhY2hlID0gTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcFBhZ2VSZXNvdXJjZXMgPSBOVUxMLCBGWF9CT09MIGJGaXJzdExheWVyID0gVFJVRSk7CisKKyAgICB+Q1BERl9SZW5kZXJDb250ZXh0KCk7CisKKyAgICB2b2lkCQkJQ2xlYXIoKTsKKworICAgIHZvaWQJCQlBcHBlbmRPYmplY3RMaXN0KENQREZfUGFnZU9iamVjdHMqIHBPYmpzLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkRldmljZSk7CisKKyAgICB2b2lkCQkJU2V0QmFja2dyb3VuZChjbGFzcyBJUERGX0JhY2tncm91bmREcmF3KiBwQmFja2dyb3VuZCk7CisKKyAgICB2b2lkCQkJUmVuZGVyKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMgPSBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcEZpbmFsTWF0cml4ID0gTlVMTCk7CisKKyAgICB2b2lkCQkJRHJhd09iamVjdExpc3QoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9QYWdlT2JqZWN0cyogcE9ianMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLCBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zKTsKKworICAgIHZvaWQJCQlHZXRCYWNrZ3JvdW5kKENGWF9ESUJpdG1hcCogcEJ1ZmZlciwgY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwT2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMsIENGWF9BZmZpbmVNYXRyaXgqIHBGaW5hbE1hdHJpeCk7CisKKyAgICBDUERGX1BhZ2VSZW5kZXJDYWNoZSoJR2V0UGFnZUNhY2hlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BQYWdlQ2FjaGU7CisgICAgfQorCisKKworICAgIENQREZfRG9jdW1lbnQqCQkJbV9wRG9jdW1lbnQ7CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCQltX3BQYWdlUmVzb3VyY2VzOworCisgICAgQ1BERl9QYWdlUmVuZGVyQ2FjaGUqCW1fcFBhZ2VDYWNoZTsKKworcHJvdGVjdGVkOgorCisgICAgQ0ZYX0FycmF5VGVtcGxhdGU8c3RydWN0IF9QREZfUmVuZGVySXRlbT4JbV9Db250ZW50TGlzdDsKKworICAgIElQREZfQmFja2dyb3VuZERyYXcqCW1fcEJhY2tncm91bmREcmF3OworCisgICAgRlhfQk9PTAkJCQkJbV9iRmlyc3RMYXllcjsKKworICAgIHZvaWQJCQlSZW5kZXIoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwU3RvcE9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBGaW5hbE1hdHJpeCk7CisgICAgZnJpZW5kIGNsYXNzIENQREZfUmVuZGVyU3RhdHVzOworICAgIGZyaWVuZCBjbGFzcyBDUERGX1Byb2dyZXNzaXZlUmVuZGVyZXI7Cit9OworY2xhc3MgSVBERl9CYWNrZ3JvdW5kRHJhdworeworcHVibGljOgorCisgICAgdmlydHVhbAl2b2lkCU9uRHJhd0JhY2tncm91bmQoCisgICAgICAgIENGWF9SZW5kZXJEZXZpY2UqIHBCaXRtYXBEZXZpY2UsCisgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPcmlnaW5hbDJCaXRtYXAKKyAgICApID0gMDsKK307CitjbGFzcyBDUERGX1Byb2dyZXNzaXZlUmVuZGVyZXIgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ1BERl9Qcm9ncmVzc2l2ZVJlbmRlcmVyKCk7CisKKyAgICB+Q1BERl9Qcm9ncmVzc2l2ZVJlbmRlcmVyKCk7CisKKyAgICB0eXBlZGVmIGVudW0geworICAgICAgICBSZWFkeSwKKyAgICAgICAgVG9CZUNvbnRpbnVlZCwKKyAgICAgICAgRG9uZSwKKyAgICAgICAgRmFpbGVkCisgICAgfSBSZW5kZXJTdGF0dXM7CisKKyAgICBSZW5kZXJTdGF0dXMJCUdldFN0YXR1cygpCisgICAgeworICAgICAgICByZXR1cm4gbV9TdGF0dXM7CisgICAgfQorCisKKworICAgIHZvaWQJCQkJU3RhcnQoQ1BERl9SZW5kZXJDb250ZXh0KiBwQ29udGV4dCwgQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMsIGNsYXNzIElGWF9QYXVzZSogcFBhdXNlLCBGWF9CT09MIGJEcm9wT2JqZWN0cyA9IEZBTFNFKTsKKworICAgIHZvaWQJCQkJQ29udGludWUoY2xhc3MgSUZYX1BhdXNlKiBwUGF1c2UpOworCisKKyAgICBpbnQJCQkJCUVzdGltYXRlUHJvZ3Jlc3MoKTsKKworICAgIHZvaWQJCQkJQ2xlYXIoKTsKK3Byb3RlY3RlZDoKKworICAgIFJlbmRlclN0YXR1cwkJbV9TdGF0dXM7CisKKyAgICBDUERGX1JlbmRlckNvbnRleHQqCW1fcENvbnRleHQ7CisKKyAgICBDRlhfUmVuZGVyRGV2aWNlKgltX3BEZXZpY2U7CisKKyAgICBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMqCW1fcE9wdGlvbnM7CisKKyAgICBGWF9CT09MCQkJCW1fYkRyb3BPYmplY3RzOworCisgICAgY2xhc3MgQ1BERl9SZW5kZXJTdGF0dXMqCW1fcFJlbmRlcmVyOworCisgICAgQ0ZYX0Zsb2F0UmVjdAkJbV9DbGlwUmVjdDsKKworICAgIEZYX0RXT1JECQkJbV9MYXllckluZGV4OworCisgICAgRlhfRFdPUkQJCQltX09iamVjdEluZGV4OworCisgICAgRlhfUE9TSVRJT04JCQltX09iamVjdFBvczsKKworICAgIEZYX1BPU0lUSU9OCQkJbV9QcmV2TGFzdFBvczsKKworICAgIHZvaWQJCQkJUmVuZGVyU3RlcCgpOworfTsKK2NsYXNzIENQREZfVGV4dFJlbmRlcmVyIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIHN0YXRpYyB2b2lkCQlEcmF3VGV4dFN0cmluZyhDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBpbnQgbGVmdCwgaW50IHRvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9Gb250KiBwRm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQVJHQiBhcmdiKTsKKworICAgIHN0YXRpYyB2b2lkCQlEcmF3VGV4dFN0cmluZyhDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBGWF9GTE9BVCBvcmlnaW5feCwgRlhfRkxPQVQgb3JpZ2luX3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfRm9udCogcEZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIGZvbnRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9BUkdCIGZpbGxfYXJnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQVJHQiBzdHJva2VfYXJnYiA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUgPSBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zID0gTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBzdGF0aWMgRlhfQk9PTAlEcmF3VGV4dFBhdGgoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgaW50IG5DaGFycywgRlhfRFdPUkQqIHBDaGFyQ29kZXMsIEZYX0ZMT0FUKiBwQ2hhclBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfRm9udCogcEZvbnQsIEZYX0ZMT0FUIGZvbnRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBUZXh0MlVzZXIsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBVc2VyMkRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9BUkdCIGZpbGxfYXJnYiwgRlhfQVJHQiBzdHJva2VfYXJnYiwgQ0ZYX1BhdGhEYXRhKiBwQ2xpcHBpbmdQYXRoLCBpbnQgbkZsYWcgPSAwKTsKKworICAgIHN0YXRpYyBGWF9CT09MCURyYXdOb3JtYWxUZXh0KENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIGludCBuQ2hhcnMsIEZYX0RXT1JEKiBwQ2hhckNvZGVzLCBGWF9GTE9BVCogcENoYXJQb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfRm9udCogcEZvbnQsIEZYX0ZMT0FUIGZvbnRfc2l6ZSwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcFRleHQyRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9BUkdCIGZpbGxfYXJnYiwgY29uc3QgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucyk7CisKKyAgICBzdGF0aWMgRlhfQk9PTAlEcmF3VHlwZTNUZXh0KENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIGludCBuQ2hhcnMsIEZYX0RXT1JEKiBwQ2hhckNvZGVzLCBGWF9GTE9BVCogcENoYXJQb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9Gb250KiBwRm9udCwgRlhfRkxPQVQgZm9udF9zaXplLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwVGV4dDJEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQVJHQiBmaWxsX2FyZ2IpOworfTsKK2NsYXNzIElQREZfUGFnZUltYWdlQ2FjaGUKK3sKK3B1YmxpYzoKKworICAgIHN0YXRpYyBJUERGX1BhZ2VJbWFnZUNhY2hlKiBDcmVhdGUoKTsKKworICAgIHZpcnR1YWwgfklQREZfUGFnZUltYWdlQ2FjaGUoKSB7fQorCisgICAgdmlydHVhbCB2b2lkCQlPdXRwdXRQYWdlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfUGFnZSogcFBhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3NfeCwgaW50IHBvc195LCBpbnQgc2l6ZV94LCBpbnQgc2l6ZV95LCBpbnQgcm90YXRlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQJCVNldENhY2hlTGltaXQoRlhfRFdPUkQgbGltaXQpID0gMDsKK307CitjbGFzcyBDUERGX1BhZ2VSZW5kZXJDYWNoZSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ1BERl9QYWdlUmVuZGVyQ2FjaGUoQ1BERl9QYWdlKiBwUGFnZSkKKyAgICB7CisgICAgICAgIG1fcFBhZ2UgPSBwUGFnZTsKKyAgICAgICAgbV9uVGltZUNvdW50ID0gMDsKKyAgICAgICAgbV9uQ2FjaGVTaXplID0gMDsKKyAgICAgICAgbV9wQ3VySW1hZ2VDYWNoZSA9IE5VTEw7CisgICAgICAgIG1fYkN1ckZpbmRDYWNoZSA9IEZBTFNFOworICAgICAgICBtX3BDdXJJbWFnZUNhY2hlcyA9IE5VTEw7CisgICAgfQorICAgIH5DUERGX1BhZ2VSZW5kZXJDYWNoZSgpCisgICAgeworICAgICAgICBDbGVhckFsbCgpOworICAgIH0KKyAgICB2b2lkCQkJCUNsZWFyQWxsKCk7CisgICAgdm9pZAkJCQlDbGVhckltYWdlRGF0YSgpOworCisgICAgRlhfRFdPUkQJCQlFc3RpbWF0ZVNpemUoKTsKKyAgICB2b2lkCQkJCUNhY2hlT3B0aW1pemF0aW9uKEZYX0lOVDMyIGR3TGltaXRDYWNoZVNpemUpOworICAgIEZYX0RXT1JECQkJR2V0Q2FjaGVkU2l6ZShDUERGX1N0cmVhbSogcFN0cmVhbSkgY29uc3Q7CisgICAgRlhfRFdPUkQJCQlHZXRUaW1lQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fblRpbWVDb3VudDsKKyAgICB9CisgICAgdm9pZAkJCQlTZXRUaW1lQ291bnQoRlhfRFdPUkQgZHdUaW1lQ291bnQpCisgICAgeworICAgICAgICBtX25UaW1lQ291bnQgPSBkd1RpbWVDb3VudDsKKyAgICB9CisKKyAgICB2b2lkCQkJCUdldENhY2hlZEJpdG1hcChDUERGX1N0cmVhbSogcFN0cmVhbSwgQ0ZYX0RJQlNvdXJjZSomIHBCaXRtYXAsIENGWF9ESUJTb3VyY2UqJiBwTWFzaywgRlhfRFdPUkQmIE1hdHRlQ29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiU3RkQ1MgPSBGQUxTRSwgRlhfRFdPUkQgR3JvdXBGYW1pbHkgPSAwLCBGWF9CT09MIGJMb2FkTWFzayA9IEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfUmVuZGVyU3RhdHVzKiBwUmVuZGVyU3RhdHVzID0gTlVMTCwgRlhfSU5UMzIgZG93bnNhbXBsZVdpZHRoID0gMCwgRlhfSU5UMzIgZG93bnNhbXBsZUhlaWdodCA9IDApOworCisgICAgdm9pZAkJCQlSZXNldEJpdG1hcChDUERGX1N0cmVhbSogcFN0cmVhbSwgY29uc3QgQ0ZYX0RJQml0bWFwKiBwQml0bWFwKTsKKyAgICB2b2lkCQkJCUNsZWFySW1hZ2VDYWNoZShDUERGX1N0cmVhbSogcFN0cmVhbSk7CisgICAgQ1BERl9QYWdlKgkJCUdldFBhZ2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcFBhZ2U7CisgICAgfQorICAgIENGWF9NYXBQdHJUb1B0cgkJbV9JbWFnZUNhY2hlczsKK3B1YmxpYzoKKyAgICBGWF9CT09MCQkJCVN0YXJ0R2V0Q2FjaGVkQml0bWFwKENQREZfU3RyZWFtKiBwU3RyZWFtLCBGWF9CT09MIGJTdGRDUyA9IEZBTFNFLCBGWF9EV09SRCBHcm91cEZhbWlseSA9IDAsCisgICAgICAgICAgICBGWF9CT09MIGJMb2FkTWFzayA9IEZBTFNFLCBDUERGX1JlbmRlclN0YXR1cyogcFJlbmRlclN0YXR1cyA9IE5VTEwsCisgICAgICAgICAgICBGWF9JTlQzMiBkb3duc2FtcGxlV2lkdGggPSAwLCBGWF9JTlQzMiBkb3duc2FtcGxlSGVpZ2h0ID0gMCk7CisKKyAgICBGWF9CT09MCQkJCUNvbnRpbnVlKElGWF9QYXVzZSogcFBhdXNlKTsKKyAgICBDUERGX0ltYWdlQ2FjaGUqCW1fcEN1ckltYWdlQ2FjaGU7CisgICAgQ0ZYX1B0ckFycmF5KiAgICAgICBtX3BDdXJJbWFnZUNhY2hlczsKK3Byb3RlY3RlZDoKKyAgICBmcmllbmQgY2xhc3MJCUNQREZfUGFnZTsKKyAgICBDUERGX1BhZ2UqCQkJbV9wUGFnZTsKKworICAgIEZYX0RXT1JECQkJbV9uVGltZUNvdW50OworICAgIEZYX0RXT1JECQkJbV9uQ2FjaGVTaXplOworICAgIEZYX0JPT0wJCQkJbV9iQ3VyRmluZENhY2hlOworfTsKK2NsYXNzIENQREZfUmVuZGVyQ29uZmlnIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBDUERGX1JlbmRlckNvbmZpZygpOworICAgIH5DUERGX1JlbmRlckNvbmZpZygpOworICAgIGludAkJCQkJbV9IYWxmdG9uZUxpbWl0OworICAgIGludAkJCQkJbV9SZW5kZXJTdGVwTGltaXQ7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3Jlc291cmNlLmggYi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3Jlc291cmNlLmgKaW5kZXggZWVhM2FmYy4uNDllNzE0OCAxMDA2NDQKLS0tIGEvY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9yZXNvdXJjZS5oCisrKyBiL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcmVzb3VyY2UuaApAQCAtMSw5NjAgKzEsOTYwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GUERGX1JFU09VUkNFXw0KLSNkZWZpbmUgX0ZQREZfUkVTT1VSQ0VfDQotI2lmbmRlZiBfRlBERl9QQVJTRVJfDQotI2luY2x1ZGUgImZwZGZfcGFyc2VyLmgiDQotI2VuZGlmDQotI2lmbmRlZiBfRlhfRk9OVF9IXw0KLSNpbmNsdWRlICIuLi9meGdlL2Z4X2ZvbnQuaCINCi0jZW5kaWYNCi1jbGFzcyBDUERGX0ZvbnQ7DQotY2xhc3MgQ1BERl9UeXBlMUZvbnQ7DQotY2xhc3MgQ1BERl9UcnVlVHlwZUZvbnQ7DQotY2xhc3MgQ1BERl9DSURGb250Ow0KLWNsYXNzIENQREZfVHlwZTNGb250Ow0KLWNsYXNzIENQREZfRm9udEVuY29kaW5nOw0KLWNsYXNzIENQREZfQ01hcDsNCi1jbGFzcyBDUERGX0NJRDJVbmljb2RlTWFwOw0KLWNsYXNzIENQREZfQ29sb3JTcGFjZTsNCi1jbGFzcyBDUERGX0NvbG9yOw0KLWNsYXNzIENQREZfRnVuY3Rpb247DQotY2xhc3MgQ1BERl9QYXR0ZXJuOw0KLWNsYXNzIENQREZfVGlsaW5nUGF0dGVybjsNCi1jbGFzcyBDUERGX1NoYWRpbmdQYXR0ZXJuOw0KLWNsYXNzIENQREZfSW1hZ2U7DQotY2xhc3MgQ1BERl9GYWNlOw0KLWNsYXNzIENQREZfVG9Vbmljb2RlTWFwOw0KLWNsYXNzIENGWF9TdWJzdEZvbnQ7DQotY2xhc3MgQ0ZYX0ZvbnQ7DQotY2xhc3MgQ1BERl9SZW5kZXJDb250ZXh0Ow0KLWNsYXNzIENQREZfRm9ybTsNCi1jbGFzcyBDUERGX0ltYWdlT2JqZWN0Ow0KLWNsYXNzIENGWF9ESUJpdG1hcDsNCi10eXBlZGVmIHN0cnVjdCBGVF9GYWNlUmVjXyogRlhGVF9GYWNlOw0KLWNsYXNzIENGWF9DVFRHU1VCVGFibGU7DQotY2xhc3MgQ1BERl9QYWdlOw0KLSNkZWZpbmUgUERGRk9OVF9UWVBFMQkJCTENCi0jZGVmaW5lIFBERkZPTlRfVFJVRVRZUEUJCTINCi0jZGVmaW5lIFBERkZPTlRfVFlQRTMJCQkzDQotI2RlZmluZSBQREZGT05UX0NJREZPTlQJCQk0DQotI2RlZmluZSBQREZGT05UX0ZJWEVEUElUQ0gJCTENCi0jZGVmaW5lIFBERkZPTlRfU0VSSUYJCQkyDQotI2RlZmluZSBQREZGT05UX1NZTUJPTElDCQk0DQotI2RlZmluZSBQREZGT05UX1NDUklQVAkJCTgNCi0jZGVmaW5lIFBERkZPTlRfTk9OU1lNQk9MSUMJCTMyDQotI2RlZmluZSBQREZGT05UX0lUQUxJQwkJCTY0DQotI2RlZmluZSBQREZGT05UX0FMTENBUAkJCTB4MTAwMDANCi0jZGVmaW5lIFBERkZPTlRfU01BTExDQVAJCTB4MjAwMDANCi0jZGVmaW5lIFBERkZPTlRfRk9SQ0VCT0xECQkweDQwMDAwDQotI2RlZmluZSBQREZGT05UX1VTRUVYVEVSTkFUVFIJMHg4MDAwMA0KLUZYX1dDSEFSIFBERl9Vbmljb2RlRnJvbUFkb2JlTmFtZShjb25zdCBGWF9DSEFSKiBuYW1lKTsNCi1DRlhfQnl0ZVN0cmluZyBQREZfQWRvYmVOYW1lRnJvbVVuaWNvZGUoRlhfV0NIQVIgdW5pY29kZSk7DQotY2xhc3MgQ1BERl9Gb250IDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBzdGF0aWMgQ1BERl9Gb250KgkJQ3JlYXRlRm9udEYoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9EaWN0aW9uYXJ5KiBwRm9udERpY3QpOw0KLQ0KLSAgICBzdGF0aWMgQ1BERl9Gb250KgkJR2V0U3RvY2tGb250KENQREZfRG9jdW1lbnQqIHBEb2MsIEZYX0JTVFIgZm9udG5hbWUpOw0KLQ0KLSAgICB2aXJ0dWFsIH5DUERGX0ZvbnQoKTsNCi0NCi0NCi0NCi0NCi0gICAgaW50CQkJCQkJR2V0Rm9udFR5cGUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9Gb250VHlwZTsNCi0gICAgfQ0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZwkJCUdldEZvbnRUeXBlTmFtZSgpIGNvbnN0Ow0KLQ0KLSAgICBjb25zdCBDRlhfQnl0ZVN0cmluZyYJR2V0QmFzZUZvbnQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9CYXNlRm9udDsNCi0gICAgfQ0KLQ0KLSAgICBjb25zdCBDRlhfU3Vic3RGb250KglHZXRTdWJzdEZvbnQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9Gb250LkdldFN1YnN0Rm9udCgpOw0KLSAgICB9DQotDQotICAgIEZYX0RXT1JECQkJCUdldEZsYWdzKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fRmxhZ3M7DQotICAgIH0NCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJSXNWZXJ0V3JpdGluZygpY29uc3Q7DQotDQotDQotDQotDQotICAgIENQREZfVHlwZTFGb250KgkJCUdldFR5cGUxRm9udCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0ZvbnRUeXBlID09IFBERkZPTlRfVFlQRTEgPyAoQ1BERl9UeXBlMUZvbnQqKSh2b2lkKil0aGlzIDogTlVMTDsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX1RydWVUeXBlRm9udCoJCUdldFRydWVUeXBlRm9udCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0ZvbnRUeXBlID09IFBERkZPTlRfVFJVRVRZUEUgPyAoQ1BERl9UcnVlVHlwZUZvbnQqKSh2b2lkKil0aGlzIDogTlVMTDsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX0NJREZvbnQqCQkJR2V0Q0lERm9udCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiAobV9Gb250VHlwZSA9PSBQREZGT05UX0NJREZPTlQpID8gKENQREZfQ0lERm9udCopKHZvaWQqKXRoaXMgOiBOVUxMOw0KLSAgICB9DQotDQotICAgIENQREZfVHlwZTNGb250KgkJCUdldFR5cGUzRm9udCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiAobV9Gb250VHlwZSA9PSBQREZGT05UX1RZUEUzKSA/IChDUERGX1R5cGUzRm9udCopKHZvaWQqKXRoaXMgOiBOVUxMOw0KLSAgICB9DQotDQotDQotICAgIEZYX0JPT0wJCQkJCUlzRW1iZWRkZWQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9Gb250VHlwZSA9PSBQREZGT05UX1RZUEUzIHx8IG1fcEZvbnRGaWxlICE9IE5VTEw7DQotICAgIH0NCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJSXNVbmljb2RlQ29tcGF0aWJsZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX1N0cmVhbUFjYyoJCQlHZXRGb250RmlsZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BGb250RmlsZTsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqCQlHZXRGb250RGljdCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BGb250RGljdDsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MCQkJCQlJc1N0YW5kYXJkRm9udCgpIGNvbnN0Ow0KLQ0KLSAgICBGWEZUX0ZhY2UJCQkJR2V0RmFjZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0ZvbnQuR2V0RmFjZSgpOw0KLSAgICB9DQotDQotDQotDQotICAgIHZpcnR1YWwgRlhfRFdPUkQJCUdldE5leHRDaGFyKEZYX0xQQ1NUUiBwU3RyaW5nLCBpbnQmIG9mZnNldCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIChGWF9CWVRFKXBTdHJpbmdbb2Zmc2V0KytdOw0KLSAgICB9DQotDQotICAgIHZpcnR1YWwgaW50CQkJCUNvdW50Q2hhcihGWF9MUENTVFIgcFN0cmluZywgaW50IHNpemUpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBzaXplOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJCUFwcGVuZENoYXIoQ0ZYX0J5dGVTdHJpbmcmIHN0ciwgRlhfRFdPUkQgY2hhcmNvZGUpIGNvbnN0Ow0KLQ0KLSAgICB2aXJ0dWFsIGludAkJCQlBcHBlbmRDaGFyKEZYX0xQU1RSIGJ1ZiwgRlhfRFdPUkQgY2hhcmNvZGUpIGNvbnN0DQotICAgIHsNCi0gICAgICAgICpidWYgPSAoRlhfQ0hBUiljaGFyY29kZTsNCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotDQotICAgIHZpcnR1YWwgaW50CQkJCUdldENoYXJTaXplKEZYX0RXT1JEIGNoYXJjb2RlKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gMTsNCi0gICAgfQ0KLQ0KLQ0KLQ0KLQ0KLSAgICB2aXJ0dWFsIGludAkJCQlHbHlwaEZyb21DaGFyQ29kZShGWF9EV09SRCBjaGFyY29kZSwgRlhfQk9PTCAqcFZlcnRHbHlwaCA9IE5VTEwpID0gMDsNCi0gICAgdmlydHVhbCBpbnQJCQkJR2x5cGhGcm9tQ2hhckNvZGVFeHQoRlhfRFdPUkQgY2hhcmNvZGUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBHbHlwaEZyb21DaGFyQ29kZShjaGFyY29kZSk7DQotICAgIH0NCi0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcJCQlVbmljb2RlRnJvbUNoYXJDb2RlKEZYX0RXT1JEIGNoYXJjb2RlKSBjb25zdDsNCi0NCi0gICAgRlhfRFdPUkQJCQkJQ2hhckNvZGVGcm9tVW5pY29kZShGWF9XQ0hBUiBVbmljb2RlKSBjb25zdDsNCi0NCi0gICAgQ0ZYX0NoYXJNYXAqCQkJR2V0Q2hhck1hcCgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BDaGFyTWFwOw0KLSAgICB9DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQkJRW5jb2RlU3RyaW5nKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHIpIGNvbnN0Ow0KLQ0KLSAgICBDRlhfV2lkZVN0cmluZwkJCURlY29kZVN0cmluZyhjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyKSBjb25zdDsNCi0NCi0NCi0NCi0NCi0gICAgdm9pZAkJCQkJR2V0Rm9udEJCb3goRlhfUkVDVCYgcmVjdCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmVjdCA9IG1fRm9udEJCb3g7DQotICAgIH0NCi0NCi0gICAgaW50CQkJCQkJR2V0VHlwZUFzY2VudCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0FzY2VudDsNCi0gICAgfQ0KLQ0KLSAgICBpbnQJCQkJCQlHZXRUeXBlRGVzY2VudCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0Rlc2NlbnQ7DQotICAgIH0NCi0NCi0gICAgaW50CQkJCQkJR2V0SXRhbGljQW5nbGUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9JdGFsaWNBbmdsZTsNCi0gICAgfQ0KLQ0KLSAgICBpbnQJCQkJCQlHZXRTdGVtVigpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX1N0ZW1WOw0KLSAgICB9DQotDQotICAgIGludAkJCQkJCUdldFN0cmluZ1dpZHRoKGNvbnN0IEZYX0NIQVIqIHBTdHJpbmcsIGludCBzaXplKTsNCi0NCi0gICAgdmlydHVhbCBpbnQJCQkJR2V0Q2hhcldpZHRoRihGWF9EV09SRCBjaGFyY29kZSwgaW50IGxldmVsID0gMCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIGludAkJCQlHZXRDaGFyVHlwZVdpZHRoKEZYX0RXT1JEIGNoYXJjb2RlKTsNCi0NCi0gICAgdmlydHVhbCB2b2lkCQkJR2V0Q2hhckJCb3goRlhfRFdPUkQgY2hhcmNvZGUsIEZYX1JFQ1QmIHJlY3QsIGludCBsZXZlbCA9IDApID0gMDsNCi0NCi0NCi0NCi0gICAgQ1BERl9Eb2N1bWVudCoJCQltX3BEb2N1bWVudDsNCi0NCi0gICAgY2xhc3MgQ0ZYX1BhdGhEYXRhKgkJTG9hZEdseXBoUGF0aChGWF9EV09SRCBjaGFyY29kZSwgaW50IGRlc3Rfd2lkdGggPSAwKTsNCi0NCi0gICAgQ0ZYX0ZvbnQJCQkJbV9Gb250Ow0KLXByb3RlY3RlZDoNCi0NCi0gICAgQ1BERl9Gb250KCk7DQotDQotICAgIEZYX0JPT0wJCQkJCUluaXRpYWxpemUoKTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJTG9hZCgpOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQlfTG9hZCgpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9XQ0hBUgkJX1VuaWNvZGVGcm9tQ2hhckNvZGUoRlhfRFdPUkQgY2hhcmNvZGUpIGNvbnN0ID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9EV09SRAkJX0NoYXJDb2RlRnJvbVVuaWNvZGUoRlhfV0NIQVIgVW5pY29kZSkgY29uc3QgPSAwOw0KLQ0KLSAgICB2b2lkCQkJCQlMb2FkVW5pY29kZU1hcCgpOw0KLQ0KLSAgICB2b2lkCQkJCQlMb2FkUERGRW5jb2RpbmcoQ1BERl9PYmplY3QqIHBFbmNvZGluZywgaW50JiBpQmFzZUVuY29kaW5nLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcqJiBwQ2hhck5hbWVzLCBGWF9CT09MIGJFbWJlZGRlZCwgRlhfQk9PTCBiVHJ1ZVR5cGUpOw0KLQ0KLSAgICB2b2lkCQkJCQlMb2FkRm9udERlc2NyaXB0b3IoQ1BERl9EaWN0aW9uYXJ5Kik7DQotDQotICAgIHZvaWQJCQkJCUxvYWRDaGFyV2lkdGhzKEZYX1dPUkQqIHBXaWR0aHMpOw0KLQ0KLSAgICB2b2lkCQkJCQlDaGVja0ZvbnRNZXRyaWNzKCk7DQotDQotICAgIENGWF9DaGFyTWFwKgkJCW1fcENoYXJNYXA7DQotDQotDQotDQotICAgIGludAkJCQkJCW1fRm9udFR5cGU7DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQkJbV9CYXNlRm9udDsNCi0NCi0gICAgQ1BERl9TdHJlYW1BY2MqCQkJbV9wRm9udEZpbGU7DQotDQotICAgIENQREZfRGljdGlvbmFyeSoJCW1fcEZvbnREaWN0Ow0KLQ0KLSAgICBDUERGX1RvVW5pY29kZU1hcCoJCW1fcFRvVW5pY29kZU1hcDsNCi0NCi0gICAgRlhfQk9PTAkJCQkJbV9iVG9Vbmljb2RlTG9hZGVkOw0KLQ0KLQ0KLQ0KLQ0KLSAgICBpbnQJCQkJCQltX0ZsYWdzOw0KLQ0KLSAgICBGWF9SRUNUCQkJCQltX0ZvbnRCQm94Ow0KLQ0KLSAgICBpbnQJCQkJCQltX1N0ZW1WOw0KLQ0KLSAgICBpbnQJCQkJCQltX0FzY2VudDsNCi0NCi0gICAgaW50CQkJCQkJbV9EZXNjZW50Ow0KLQ0KLSAgICBpbnQJCQkJCQltX0l0YWxpY0FuZ2xlOw0KLQ0KLX07DQotI2RlZmluZSBQREZGT05UX0VOQ09ESU5HX0JVSUxUSU4JCTANCi0jZGVmaW5lIFBERkZPTlRfRU5DT0RJTkdfV0lOQU5TSQkJMQ0KLSNkZWZpbmUgUERGRk9OVF9FTkNPRElOR19NQUNST01BTgkJMg0KLSNkZWZpbmUgUERGRk9OVF9FTkNPRElOR19NQUNFWFBFUlQJCTMNCi0jZGVmaW5lIFBERkZPTlRfRU5DT0RJTkdfU1RBTkRBUkQJCTQNCi0jZGVmaW5lIFBERkZPTlRfRU5DT0RJTkdfQURPQkVfU1lNQk9MCTUNCi0jZGVmaW5lIFBERkZPTlRfRU5DT0RJTkdfWkFQRkRJTkdCQVRTCTYNCi0jZGVmaW5lIFBERkZPTlRfRU5DT0RJTkdfUERGRE9DCQkJNw0KLSNkZWZpbmUgUERGRk9OVF9FTkNPRElOR19NU19TWU1CT0wJCTgNCi0jZGVmaW5lIFBERkZPTlRfRU5DT0RJTkdfVU5JQ09ERQkJOQ0KLWNsYXNzIENQREZfRm9udEVuY29kaW5nIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDUERGX0ZvbnRFbmNvZGluZygpOw0KLQ0KLSAgICBDUERGX0ZvbnRFbmNvZGluZyhpbnQgUHJlZGVmaW5lZEVuY29kaW5nKTsNCi0NCi0gICAgdm9pZAkJCQkJTG9hZEVuY29kaW5nKENQREZfT2JqZWN0KiBwRW5jb2RpbmcpOw0KLQ0KLSAgICBGWF9CT09MCQkJCQlJc0lkZW50aWNhbChDUERGX0ZvbnRFbmNvZGluZyogcEFub3RoZXIpIGNvbnN0Ow0KLQ0KLSAgICBGWF9XQ0hBUgkJCQlVbmljb2RlRnJvbUNoYXJDb2RlKEZYX0JZVEUgY2hhcmNvZGUpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX1VuaWNvZGVzW2NoYXJjb2RlXTsNCi0gICAgfQ0KLQ0KLSAgICBpbnQJCQkJCQlDaGFyQ29kZUZyb21Vbmljb2RlKEZYX1dDSEFSIHVuaWNvZGUpIGNvbnN0Ow0KLQ0KLSAgICB2b2lkCQkJCQlTZXRVbmljb2RlKEZYX0JZVEUgY2hhcmNvZGUsIEZYX1dDSEFSIHVuaWNvZGUpDQotICAgIHsNCi0gICAgICAgIG1fVW5pY29kZXNbY2hhcmNvZGVdID0gdW5pY29kZTsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX09iamVjdCoJCQlSZWFsaXplKCk7DQotcHVibGljOg0KLQ0KLSAgICBGWF9XQ0hBUgkJCQltX1VuaWNvZGVzWzI1Nl07DQotfTsNCi1jbGFzcyBDUERGX1NpbXBsZUZvbnQgOiBwdWJsaWMgQ1BERl9Gb250DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9TaW1wbGVGb250KCk7DQotDQotICAgIHZpcnR1YWwgfkNQREZfU2ltcGxlRm9udCgpOw0KLQ0KLSAgICBDUERGX0ZvbnRFbmNvZGluZyoJCUdldEVuY29kaW5nKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuICZtX0VuY29kaW5nOw0KLSAgICB9DQotICAgIHZpcnR1YWwgaW50CQkJCUdldENoYXJXaWR0aEYoRlhfRFdPUkQgY2hhcmNvZGUsIGludCBsZXZlbCA9IDApOw0KLSAgICB2aXJ0dWFsIHZvaWQJCQlHZXRDaGFyQkJveChGWF9EV09SRCBjaGFyY29kZSwgRlhfUkVDVCYgcmVjdCwgaW50IGxldmVsID0gMCk7DQotICAgIHZpcnR1YWwgaW50CQkJCUdseXBoRnJvbUNoYXJDb2RlKEZYX0RXT1JEIGNoYXJjb2RlLCBGWF9CT09MICpwVmVydEdseXBoID0gTlVMTCk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCUlzVW5pY29kZUNvbXBhdGlibGUoKSBjb25zdDsNCi1wcm90ZWN0ZWQ6DQotDQotICAgIEZYX0JPT0wJCQkJCUxvYWRDb21tb24oKTsNCi0NCi0gICAgdm9pZAkJCQkJTG9hZFN1YnN0Rm9udCgpOw0KLQ0KLSAgICB2b2lkCQkJCQlMb2FkRmFjZU1ldHJpY3MoKTsNCi0NCi0gICAgdmlydHVhbCB2b2lkCQkJTG9hZEdseXBoTWFwKCkgPSAwOw0KLSAgICB2aXJ0dWFsIEZYX1dDSEFSCQlfVW5pY29kZUZyb21DaGFyQ29kZShGWF9EV09SRCBjaGFyY29kZSkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fRW5jb2RpbmcuVW5pY29kZUZyb21DaGFyQ29kZSgoRlhfQllURSljaGFyY29kZSk7DQotICAgIH0NCi0gICAgdmlydHVhbCBGWF9EV09SRAkJX0NoYXJDb2RlRnJvbVVuaWNvZGUoRlhfV0NIQVIgVW5pY29kZSkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fRW5jb2RpbmcuQ2hhckNvZGVGcm9tVW5pY29kZShVbmljb2RlKTsNCi0gICAgfQ0KLQ0KLQ0KLQ0KLSAgICBDUERGX0ZvbnRFbmNvZGluZwkJbV9FbmNvZGluZzsNCi0NCi0gICAgRlhfV09SRAkJCQkJbV9HbHlwaEluZGV4WzI1Nl07DQotICAgIEZYX1dPUkQJCQkJCW1fRXh0R0lEWzI1Nl07DQotDQotDQotDQotDQotICAgIENGWF9CeXRlU3RyaW5nKgkJCW1fcENoYXJOYW1lczsNCi0NCi0gICAgaW50CQkJCQkJbV9CYXNlRW5jb2Rpbmc7DQotDQotDQotDQotDQotICAgIEZYX1dPUkQJCQkJCW1fQ2hhcldpZHRoWzI1Nl07DQotDQotICAgIEZYX1NNQUxMX1JFQ1QJCQltX0NoYXJCQm94WzI1Nl07DQotDQotICAgIEZYX0JPT0wJCQkJCW1fYlVzZUZvbnRXaWR0aDsNCi0NCi0gICAgdm9pZAkJCQkJTG9hZENoYXJNZXRyaWNzKGludCBjaGFyY29kZSk7DQotDQotfTsNCi1jbGFzcyBDUERGX1R5cGUxRm9udCA6IHB1YmxpYyBDUERGX1NpbXBsZUZvbnQNCi17DQotcHVibGljOg0KLQ0KLSAgICBDUERGX1R5cGUxRm9udCgpOw0KLQ0KLSAgICBpbnQJCQkJCQlHZXRCYXNlMTRGb250KCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fQmFzZTE0Rm9udDsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIGludAkJCQlHbHlwaEZyb21DaGFyQ29kZUV4dChGWF9EV09SRCBjaGFyY29kZSk7DQotcHJvdGVjdGVkOg0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQlfTG9hZCgpOw0KLQ0KLSAgICBpbnQJCQkJCQltX0Jhc2UxNEZvbnQ7DQotICAgIHZpcnR1YWwgdm9pZAkJCUxvYWRHbHlwaE1hcCgpOw0KLX07DQotY2xhc3MgQ1BERl9UcnVlVHlwZUZvbnQgOiBwdWJsaWMgQ1BERl9TaW1wbGVGb250DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9UcnVlVHlwZUZvbnQoKTsNCi1wcm90ZWN0ZWQ6DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCV9Mb2FkKCk7DQotICAgIHZpcnR1YWwgdm9pZAkJCUxvYWRHbHlwaE1hcCgpOw0KLX07DQotY2xhc3MgQ1BERl9UeXBlM0NoYXIgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfVHlwZTNDaGFyKCk7DQotDQotICAgIH5DUERGX1R5cGUzQ2hhcigpOw0KLQ0KLSAgICBGWF9CT09MIExvYWRCaXRtYXAoQ1BERl9SZW5kZXJDb250ZXh0KiBwQ29udGV4dCk7DQotDQotICAgIEZYX0JPT0wJCQkJCW1fYkNvbG9yZWQ7DQotDQotICAgIEZYX0JPT0wJCQkJCW1fYlBhZ2VSZXF1aXJlZDsNCi0NCi0NCi0NCi0gICAgQ1BERl9Gb3JtKgkJCQltX3BGb3JtOw0KLQ0KLSAgICBDRlhfQWZmaW5lTWF0cml4CQltX0ltYWdlTWF0cml4Ow0KLQ0KLSAgICBDRlhfRElCaXRtYXAqCQkJbV9wQml0bWFwOw0KLQ0KLQ0KLSAgICBpbnQJCQkJCQltX1dpZHRoOw0KLQ0KLSAgICBGWF9SRUNUCQkJCQltX0JCb3g7DQotfTsNCi1jbGFzcyBDUERGX1R5cGUzRm9udCA6IHB1YmxpYyBDUERGX1NpbXBsZUZvbnQNCi17DQotcHVibGljOg0KLSAgICBDUERGX1R5cGUzRm9udCgpOw0KLSAgICB2aXJ0dWFsIH5DUERGX1R5cGUzRm9udCgpOw0KLSAgICB2b2lkCQkJCQlTZXRQYWdlUmVzb3VyY2VzKENQREZfRGljdGlvbmFyeSogcFJlc291cmNlcykNCi0gICAgew0KLSAgICAgICAgbV9wUGFnZVJlc291cmNlcyA9IHBSZXNvdXJjZXM7DQotICAgIH0NCi0gICAgQ1BERl9UeXBlM0NoYXIqCQkJTG9hZENoYXIoRlhfRFdPUkQgY2hhcmNvZGUsIGludCBsZXZlbCA9IDApOw0KLSAgICB2aXJ0dWFsIGludAkJCQlHZXRDaGFyV2lkdGhGKEZYX0RXT1JEIGNoYXJjb2RlLCBpbnQgbGV2ZWwgPSAwKTsNCi0gICAgdmlydHVhbCBpbnQJCQkJR2V0Q2hhclR5cGVXaWR0aChGWF9EV09SRCBjaGFyY29kZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEdldENoYXJXaWR0aEYoY2hhcmNvZGUpOw0KLSAgICB9DQotICAgIHZpcnR1YWwgdm9pZAkJCUdldENoYXJCQm94KEZYX0RXT1JEIGNoYXJjb2RlLCBGWF9SRUNUJiByZWN0LCBpbnQgbGV2ZWwgPSAwKTsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCYJCUdldEZvbnRNYXRyaXgoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9Gb250TWF0cml4Ow0KLSAgICB9DQotICAgIHZvaWQJCQkJCUNoZWNrVHlwZTNGb250TWV0cmljcygpOw0KLXByaXZhdGU6DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCV9Mb2FkKCk7DQotICAgIHZpcnR1YWwgdm9pZAkJCUxvYWRHbHlwaE1hcCgpIHt9DQotICAgIGludAkJCQkJCW1fQ2hhcldpZHRoTFsyNTZdOw0KLSAgICBDUERGX0RpY3Rpb25hcnkqCQltX3BDaGFyUHJvY3M7DQotICAgIENQREZfRGljdGlvbmFyeSoJCW1fcFBhZ2VSZXNvdXJjZXM7DQotICAgIENQREZfRGljdGlvbmFyeSoJCW1fcEZvbnRSZXNvdXJjZXM7DQotICAgIENGWF9NYXBQdHJUb1B0cgkJCW1fQ2FjaGVNYXA7DQotICAgIENGWF9NYXBQdHJUb1B0cgkJCW1fRGVsZXRlZE1hcDsNCi1wcm90ZWN0ZWQ6DQotICAgIENGWF9BZmZpbmVNYXRyaXgJCW1fRm9udE1hdHJpeDsNCi19Ow0KLSNkZWZpbmUgQ0lEU0VUX1VOS05PV04JCTANCi0jZGVmaW5lIENJRFNFVF9HQjEJCQkxDQotI2RlZmluZSBDSURTRVRfQ05TMQkJCTINCi0jZGVmaW5lIENJRFNFVF9KQVBBTjEJCTMNCi0jZGVmaW5lIENJRFNFVF9LT1JFQTEJCTQNCi0jZGVmaW5lIENJRFNFVF9VTklDT0RFCQk1DQotY2xhc3MgQ1BERl9DSURGb250IDogcHVibGljIENQREZfRm9udA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfQ0lERm9udCgpOw0KLQ0KLSAgICB2aXJ0dWFsIH5DUERGX0NJREZvbnQoKTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJTG9hZEdCMjMxMigpOw0KLSAgICB2aXJ0dWFsIGludAkJCQlHbHlwaEZyb21DaGFyQ29kZShGWF9EV09SRCBjaGFyY29kZSwgRlhfQk9PTCAqcFZlcnRHbHlwaCA9IE5VTEwpOw0KLSAgICB2aXJ0dWFsIGludAkJCQlHZXRDaGFyV2lkdGhGKEZYX0RXT1JEIGNoYXJjb2RlLCBpbnQgbGV2ZWwgPSAwKTsNCi0gICAgdmlydHVhbCB2b2lkCQkJR2V0Q2hhckJCb3goRlhfRFdPUkQgY2hhcmNvZGUsIEZYX1JFQ1QmIHJlY3QsIGludCBsZXZlbCA9IDApOw0KLQ0KLSAgICBGWF9XT1JECQkJCQlDSURGcm9tQ2hhckNvZGUoRlhfRFdPUkQgY2hhcmNvZGUpIGNvbnN0Ow0KLQ0KLSAgICBGWF9CT09MCQkJCQlJc1RydWVUeXBlKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuICFtX2JUeXBlMTsNCi0gICAgfQ0KLQ0KLQ0KLSAgICB2aXJ0dWFsIEZYX0RXT1JECQlHZXROZXh0Q2hhcihjb25zdCBGWF9DSEFSKiBwU3RyaW5nLCBpbnQmIG9mZnNldCkgY29uc3Q7DQotICAgIHZpcnR1YWwgaW50CQkJCUNvdW50Q2hhcihjb25zdCBGWF9DSEFSKiBwU3RyaW5nLCBpbnQgc2l6ZSkgY29uc3Q7DQotICAgIHZpcnR1YWwgaW50CQkJCUFwcGVuZENoYXIoRlhfTFBTVFIgc3RyLCBGWF9EV09SRCBjaGFyY29kZSkgY29uc3Q7DQotICAgIHZpcnR1YWwgaW50CQkJCUdldENoYXJTaXplKEZYX0RXT1JEIGNoYXJjb2RlKSBjb25zdDsNCi0NCi0NCi0gICAgaW50CQkJCQkJR2V0Q2hhcnNldCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0NoYXJzZXQ7DQotICAgIH0NCi0NCi0gICAgRlhfTFBDQllURQkJCQlHZXRDSURUcmFuc2Zvcm0oRlhfV09SRCBDSUQpIGNvbnN0Ow0KLQ0KLQ0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQlJc1ZlcnRXcml0aW5nKCkgY29uc3Q7DQotDQotICAgIHNob3J0CQkJCQlHZXRWZXJ0V2lkdGgoRlhfV09SRCBDSUQpIGNvbnN0Ow0KLQ0KLSAgICB2b2lkCQkJCQlHZXRWZXJ0T3JpZ2luKEZYX1dPUkQgQ0lELCBzaG9ydCYgdngsIHNob3J0JiB2eSkgY29uc3Q7DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCUlzVW5pY29kZUNvbXBhdGlibGUoKSBjb25zdDsNCi0gICAgdmlydHVhbCBGWF9CT09MCQkJSXNGb250U3R5bGVGcm9tQ2hhckNvZGUoRlhfRFdPUkQgY2hhcmNvZGUpIGNvbnN0Ow0KLXByb3RlY3RlZDoNCi0gICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9Gb250Ow0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQlfTG9hZCgpOw0KLSAgICB2aXJ0dWFsIEZYX1dDSEFSCQlfVW5pY29kZUZyb21DaGFyQ29kZShGWF9EV09SRCBjaGFyY29kZSkgY29uc3Q7DQotICAgIHZpcnR1YWwgRlhfRFdPUkQJCV9DaGFyQ29kZUZyb21Vbmljb2RlKEZYX1dDSEFSIFVuaWNvZGUpIGNvbnN0Ow0KLSAgICBpbnQJCQkJR2V0R2x5cGhJbmRleChGWF9EV09SRCB1bmljb2RlYiwgRlhfQk9PTCAqcFZlcnRHbHlwaCk7DQotDQotICAgIENQREZfQ01hcCoJCQkJbV9wQ01hcDsNCi0NCi0gICAgQ1BERl9DTWFwKgkJCQltX3BBbGxvY2F0ZWRDTWFwOw0KLQ0KLSAgICBDUERGX0NJRDJVbmljb2RlTWFwKgltX3BDSUQyVW5pY29kZU1hcDsNCi0NCi0gICAgaW50CQkJCQkJbV9DaGFyc2V0Ow0KLQ0KLSAgICBGWF9CT09MCQkJCQltX2JUeXBlMTsNCi0NCi0gICAgQ1BERl9TdHJlYW1BY2MqCQkJbV9wQ0lEVG9HSURNYXA7DQotICAgIEZYX0JPT0wJCQkJCW1fYkNJRElzR0lEOw0KLQ0KLQ0KLQ0KLSAgICBGWF9XT1JECQkJCQltX0RlZmF1bHRXaWR0aDsNCi0NCi0gICAgRlhfV09SRCoJCQkJbV9wQW5zaVdpZHRoczsNCi0NCi0gICAgRlhfU01BTExfUkVDVAkJCW1fQ2hhckJCb3hbMjU2XTsNCi0NCi0gICAgQ0ZYX0RXb3JkQXJyYXkJCQltX1dpZHRoTGlzdDsNCi0NCi0gICAgc2hvcnQJCQkJCW1fRGVmYXVsdFZZOw0KLQ0KLSAgICBzaG9ydAkJCQkJbV9EZWZhdWx0VzE7DQotDQotICAgIENGWF9EV29yZEFycmF5CQkJbV9WZXJ0TWV0cmljczsNCi0NCi0NCi0gICAgdm9pZAkJCQkJTG9hZE1ldHJpY3NBcnJheShDUERGX0FycmF5KiBwQXJyYXksIENGWF9EV29yZEFycmF5JiByZXN1bHQsIGludCBuRWxlbWVudHMpOw0KLQ0KLSAgICB2b2lkCQkJCQlMb2FkU3Vic3RGb250KCk7DQotDQotICAgIEZYX0JPT0wJCQkJCW1fYkFkb2JlQ291cmllclN0ZDsNCi0NCi0gICAgQ0ZYX0NUVEdTVUJUYWJsZSoJCQltX3BUVEdTVUJUYWJsZTsNCi19Ow0KLSNkZWZpbmUgUERGQ1NfREVWSUNFR1JBWQkJMQ0KLQ0KLSNkZWZpbmUgUERGQ1NfREVWSUNFUkdCCQkJMg0KLSNkZWZpbmUgUERGQ1NfREVWSUNFQ01ZSwkJMw0KLSNkZWZpbmUgUERGQ1NfQ0FMR1JBWQkJCTQNCi0jZGVmaW5lIFBERkNTX0NBTFJHQgkJCTUNCi0jZGVmaW5lIFBERkNTX0xBQgkJCQk2DQotI2RlZmluZSBQREZDU19JQ0NCQVNFRAkJCTcNCi0jZGVmaW5lIFBERkNTX1NFUEFSQVRJT04JCTgNCi0jZGVmaW5lIFBERkNTX0RFVklDRU4JCQk5DQotI2RlZmluZSBQREZDU19JTkRFWEVECQkJMTANCi0jZGVmaW5lIFBERkNTX1BBVFRFUk4JCQkxMQ0KLWNsYXNzIENQREZfQ29sb3JTcGFjZSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgc3RhdGljIENQREZfQ29sb3JTcGFjZSogR2V0U3RvY2tDUyhpbnQgRmFtaWx5KTsNCi0NCi0gICAgc3RhdGljIENQREZfQ29sb3JTcGFjZSoJTG9hZChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX09iamVjdCogcENTT2JqKTsNCi0NCi0gICAgdm9pZAkJCQkJUmVsZWFzZUNTKCk7DQotDQotICAgIGludAkJCQkJCUdldEJ1ZlNpemUoKSBjb25zdDsNCi0NCi0gICAgRlhfRkxPQVQqCQkJQ3JlYXRlQnVmKCk7DQotDQotICAgIHZvaWQJCQkJCUdldERlZmF1bHRDb2xvcihGWF9GTE9BVCogYnVmKSBjb25zdDsNCi0NCi0gICAgaW50CQkJCQkJQ291bnRDb21wb25lbnRzKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fbkNvbXBvbmVudHM7DQotICAgIH0NCi0NCi0gICAgaW50CQkJCQkJR2V0RmFtaWx5KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fRmFtaWx5Ow0KLSAgICB9DQotDQotICAgIHZpcnR1YWwgdm9pZAkJCUdldERlZmF1bHRWYWx1ZShpbnQgaUNvbXBvbmVudCwgRlhfRkxPQVQmIHZhbHVlLCBGWF9GTE9BVCYgbWluLCBGWF9GTE9BVCYgbWF4KSBjb25zdA0KLSAgICB7DQotICAgICAgICB2YWx1ZSA9IDA7DQotICAgICAgICBtaW4gPSAwOw0KLSAgICAgICAgbWF4ID0gMS4wZjsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MCQkJCQlzUkdCKCkgY29uc3Q7DQotDQotDQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCUdldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQmIFIsIEZYX0ZMT0FUJiBHLCBGWF9GTE9BVCYgQikgY29uc3QgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQlTZXRSR0IoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUIFIsIEZYX0ZMT0FUIEcsIEZYX0ZMT0FUIEIpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLQ0KLQ0KLQ0KLQ0KLSAgICBGWF9CT09MCQkJCQlHZXRDTVlLKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCYgYywgRlhfRkxPQVQmIG0sIEZYX0ZMT0FUJiB5LCBGWF9GTE9BVCYgaykgY29uc3Q7DQotDQotICAgIEZYX0JPT0wJCQkJCVNldENNWUsoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUIGMsIEZYX0ZMT0FUIG0sIEZYX0ZMT0FUIHksIEZYX0ZMT0FUIGspIGNvbnN0Ow0KLQ0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQlUcmFuc2xhdGVJbWFnZUxpbmUoRlhfTFBCWVRFIGRlc3RfYnVmLCBGWF9MUENCWVRFIHNyY19idWYsIGludCBwaXhlbHMsDQotICAgICAgICAgICAgaW50IGltYWdlX3dpZHRoLCBpbnQgaW1hZ2VfaGVpZ2h0LCBGWF9CT09MIGJUcmFuc01hc2sgPSBGQUxTRSkgY29uc3Q7DQotDQotICAgIENQREZfQXJyYXkqJgkJCUdldEFycmF5KCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcEFycmF5Ow0KLSAgICB9DQotDQotICAgIGludAkJCQkJCUdldE1heEluZGV4KCkgY29uc3Q7DQotDQotICAgIHZpcnR1YWwgQ1BERl9Db2xvclNwYWNlKglHZXRCYXNlQ1MoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQlFbmFibGVTdGRDb252ZXJzaW9uKEZYX0JPT0wgYkVuYWJsZWQpOw0KLSAgICBDUERGX0RvY3VtZW50KgkJCW1fcERvY3VtZW50Ow0KLXByb3RlY3RlZDoNCi0NCi0gICAgQ1BERl9Db2xvclNwYWNlKCk7DQotDQotICAgIHZpcnR1YWwgfkNQREZfQ29sb3JTcGFjZSgpIHt9DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCXZfTG9hZChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0FycmF5KiBwQXJyYXkpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCXZfR2V0Q01ZSyhGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQmIGMsIEZYX0ZMT0FUJiBtLCBGWF9GTE9BVCYgeSwgRlhfRkxPQVQmIGspIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQl2X1NldENNWUsoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUIGMsIEZYX0ZMT0FUIG0sIEZYX0ZMT0FUIHksIEZYX0ZMT0FUIGspIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLQ0KLSAgICBpbnQJCQkJCQltX0ZhbWlseTsNCi0NCi0gICAgaW50CQkJCQkJbV9uQ29tcG9uZW50czsNCi0NCi0gICAgQ1BERl9BcnJheSoJCQkJbV9wQXJyYXk7DQotDQotICAgIEZYX0RXT1JECQkJCW1fZHdTdGRDb252ZXJzaW9uOw0KLX07DQotY2xhc3MgQ1BERl9Db2xvciA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9Db2xvcigpDQotICAgIHsNCi0gICAgICAgIG1fcEJ1ZmZlciA9IE5VTEw7DQotICAgICAgICBtX3BDUyA9IE5VTEw7DQotICAgIH0NCi0NCi0gICAgQ1BERl9Db2xvcihpbnQgZmFtaWx5KTsNCi0NCi0gICAgfkNQREZfQ29sb3IoKTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJSXNOdWxsKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcEJ1ZmZlciA9PSBOVUxMOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wJCQkJCUlzRXF1YWwoY29uc3QgQ1BERl9Db2xvciYgb3RoZXIpIGNvbnN0Ow0KLQ0KLSAgICBGWF9CT09MCQkJCQlJc1BhdHRlcm4oKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wQ1MgJiYgbV9wQ1MtPkdldEZhbWlseSgpID09IFBERkNTX1BBVFRFUk47DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCQkJQ29weShjb25zdCBDUERGX0NvbG9yKiBwU3JjKTsNCi0NCi0gICAgdm9pZAkJCQkJU2V0Q29sb3JTcGFjZShDUERGX0NvbG9yU3BhY2UqIHBDUyk7DQotDQotICAgIHZvaWQJCQkJCVNldFZhbHVlKEZYX0ZMT0FUKiBjb21wKTsNCi0NCi0gICAgdm9pZAkJCQkJU2V0VmFsdWUoQ1BERl9QYXR0ZXJuKiBwUGF0dGVybiwgRlhfRkxPQVQqIGNvbXAsIGludCBuY29tcHMpOw0KLQ0KLSAgICBGWF9CT09MCQkJCQlHZXRSR0IoaW50JiBSLCBpbnQmIEcsIGludCYgQikgY29uc3Q7DQotDQotICAgIENQREZfUGF0dGVybioJCQlHZXRQYXR0ZXJuKCkgY29uc3Q7DQotDQotICAgIENQREZfQ29sb3JTcGFjZSoJCUdldFBhdHRlcm5DUygpIGNvbnN0Ow0KLQ0KLSAgICBGWF9GTE9BVCoJCQlHZXRQYXR0ZXJuQ29sb3IoKSBjb25zdDsNCi0NCi0gICAgQ1BERl9Db2xvclNwYWNlKgkJbV9wQ1M7DQotDQotICAgIEZYX0ZMT0FUKgkJCW1fcEJ1ZmZlcjsNCi1wcm90ZWN0ZWQ6DQotICAgIHZvaWQJUmVsZWFzZUJ1ZmZlcigpOw0KLSAgICB2b2lkCVJlbGVhc2VDb2xvclNwYWNlKCk7DQotfTsNCi0jZGVmaW5lIFBBVFRFUk5fVElMSU5HCQkxDQotI2RlZmluZSBQQVRURVJOX1NIQURJTkcJCTINCi1jbGFzcyBDUERGX1BhdHRlcm4gOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHZpcnR1YWwgfkNQREZfUGF0dGVybigpIHt9DQotDQotICAgIENQREZfT2JqZWN0KgkJCW1fcFBhdHRlcm5PYmo7DQotDQotICAgIGludAkJCQkJCW1fUGF0dGVyblR5cGU7DQotDQotICAgIENGWF9BZmZpbmVNYXRyaXgJCW1fUGF0dGVybjJGb3JtOw0KLSAgICBDRlhfQWZmaW5lTWF0cml4CQltX1BhcmVudE1hdHJpeDsNCi0NCi0gICAgQ1BERl9Eb2N1bWVudCoJCQltX3BEb2N1bWVudDsNCi0NCi1wcm90ZWN0ZWQ6DQotDQotICAgIENQREZfUGF0dGVybihjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwUGFyZW50TWF0cml4KQ0KLSAgICB7DQotICAgICAgICBpZiAocFBhcmVudE1hdHJpeCkgew0KLSAgICAgICAgICAgIG1fUGFyZW50TWF0cml4ID0gKnBQYXJlbnRNYXRyaXg7DQotICAgICAgICB9DQotICAgIH0NCi19Ow0KLWNsYXNzIENQREZfVGlsaW5nUGF0dGVybiA6IHB1YmxpYyBDUERGX1BhdHRlcm4NCi17DQotcHVibGljOg0KLQ0KLSAgICBDUERGX1RpbGluZ1BhdHRlcm4oQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9PYmplY3QqIHBQYXR0ZXJuT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwYXJlbnRNYXRyaXgpOw0KLQ0KLSAgICB2aXJ0dWFsIH5DUERGX1RpbGluZ1BhdHRlcm4oKTsNCi0NCi0gICAgRlhfQk9PTAkJCQlMb2FkKCk7DQotDQotDQotDQotICAgIEZYX0JPT0wJCQkJbV9iQ29sb3JlZDsNCi0NCi0gICAgQ0ZYX0Zsb2F0UmVjdAkJbV9CQm94Ow0KLQ0KLSAgICBGWF9GTE9BVAkJCW1fWFN0ZXA7DQotDQotICAgIEZYX0ZMT0FUCQkJbV9ZU3RlcDsNCi0NCi0NCi0NCi0gICAgQ1BERl9Gb3JtKgkJCW1fcEZvcm07DQotfTsNCi1jbGFzcyBDUERGX1NoYWRpbmdQYXR0ZXJuIDogcHVibGljIENQREZfUGF0dGVybg0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfU2hhZGluZ1BhdHRlcm4oQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9PYmplY3QqIHBQYXR0ZXJuT2JqLCBGWF9CT09MIGJTaGFkaW5nLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwYXJlbnRNYXRyaXgpOw0KLQ0KLSAgICB2aXJ0dWFsIH5DUERGX1NoYWRpbmdQYXR0ZXJuKCk7DQotDQotICAgIENQREZfT2JqZWN0KgkJbV9wU2hhZGluZ09iajsNCi0NCi0gICAgRlhfQk9PTAkJCQltX2JTaGFkaW5nT2JqOw0KLQ0KLSAgICBGWF9CT09MCQkJCUxvYWQoKTsNCi0NCi0gICAgRlhfQk9PTAkJCQlSZWxvYWQoKTsNCi0NCi0gICAgaW50CQkJCQltX1NoYWRpbmdUeXBlOw0KLQ0KLSAgICBDUERGX0NvbG9yU3BhY2UqCW1fcENTOw0KLQ0KLQ0KLSAgICBDUERGX0Z1bmN0aW9uKgkJbV9wRnVuY3Rpb25zWzRdOw0KLQ0KLSAgICBpbnQJCQkJCW1fbkZ1bmNzOw0KLXByb3RlY3RlZDoNCi0gICAgdm9pZAlDbGVhcigpOw0KLX07DQotc3RydWN0IENQREZfTWVzaFZlcnRleCB7DQotICAgIEZYX0ZMT0FUIHgsIHk7DQotICAgIEZYX0ZMT0FUIHIsIGcsIGI7DQotfTsNCi1jbGFzcyBDUERGX01lc2hTdHJlYW0gOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIEZYX0JPT0wJCQkJTG9hZChDUERGX1N0cmVhbSogcFNoYWRpbmdTdHJlYW0sIENQREZfRnVuY3Rpb24qKiBwRnVuY3MsIGludCBuRnVuY3MsIENQREZfQ29sb3JTcGFjZSogcENTKTsNCi0NCi0gICAgRlhfRFdPUkQJCQlHZXRGbGFnKCk7DQotDQotICAgIHZvaWQJCQkJR2V0Q29vcmRzKEZYX0ZMT0FUJiB4LCBGWF9GTE9BVCYgeSk7DQotDQotICAgIHZvaWQJCQkJR2V0Q29sb3IoRlhfRkxPQVQmIHIsIEZYX0ZMT0FUJiBnLCBGWF9GTE9BVCYgYik7DQotDQotICAgIEZYX0RXT1JEIAkJCUdldFZlcnRleChDUERGX01lc2hWZXJ0ZXgmIHZlcnRleCwgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJCaXRtYXApOw0KLQ0KLSAgICBGWF9CT09MCQkJCUdldFZlcnRleFJvdyhDUERGX01lc2hWZXJ0ZXgqIHZlcnRleCwgaW50IGNvdW50LCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkJpdG1hcCk7DQotICAgIENQREZfRnVuY3Rpb24qKgltX3BGdW5jczsNCi0gICAgQ1BERl9Db2xvclNwYWNlKgltX3BDUzsNCi0gICAgRlhfRFdPUkQJCQltX25GdW5jcywgbV9uQ29vcmRCaXRzLCBtX25Db21wQml0cywgbV9uRmxhZ0JpdHMsIG1fbkNvbXBzOw0KLSAgICBGWF9EV09SRAkJCW1fQ29vcmRNYXgsIG1fQ29tcE1heDsNCi0gICAgRlhfRkxPQVQJCQltX3htaW4sIG1feG1heCwgbV95bWluLCBtX3ltYXg7DQotICAgIEZYX0ZMT0FUCQkJbV9Db2xvck1pbls4XSwgbV9Db2xvck1heFs4XTsNCi0gICAgQ1BERl9TdHJlYW1BY2MJCW1fU3RyZWFtOw0KLSAgICBDRlhfQml0U3RyZWFtCQltX0JpdFN0cmVhbTsNCi19Ow0KLSNkZWZpbmUgUERGX0lNQUdFX05PX0NPTVBSRVNTCQkJCTB4MDAwMA0KLSNkZWZpbmUgUERGX0lNQUdFX0xPU1NZX0NPTVBSRVNTCQkJMHgwMDAxDQotI2RlZmluZSBQREZfSU1BR0VfTE9TU0xFU1NfQ09NUFJFU1MJCQkweDAwMDINCi0jZGVmaW5lIFBERl9JTUFHRV9NQVNLX0xPU1NZX0NPTVBSRVNTCQkweDAwMDQNCi0jZGVmaW5lIFBERl9JTUFHRV9NQVNLX0xPU1NMRVNTX0NPTVBSRVNTCTB4MDAwOA0KLWNsYXNzIENQREZfSW1hZ2VTZXRQYXJhbQ0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfSW1hZ2VTZXRQYXJhbSgpDQotICAgICAgICA6IHBNYXR0ZUNvbG9yKE5VTEwpDQotICAgICAgICAsIG5RdWFsaXR5KDgwKQ0KLSAgICB7DQotICAgIH0NCi0gICAgRlhfQVJHQiogcE1hdHRlQ29sb3I7DQotICAgIEZYX0lOVDMyIG5RdWFsaXR5Ow0KLX07DQotY2xhc3MgQ1BERl9JbWFnZSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9JbWFnZShDUERGX0RvY3VtZW50KiBwRG9jKTsNCi0NCi0gICAgfkNQREZfSW1hZ2UoKTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJTG9hZEltYWdlRihDUERGX1N0cmVhbSogcEltYWdlU3RyZWFtLCBGWF9CT09MIGJJbmxpbmUpOw0KLQ0KLSAgICB2b2lkCQkJCQlSZWxlYXNlKCk7DQotDQotICAgIENQREZfSW1hZ2UqCQkJCUNsb25lKCk7DQotDQotICAgIEZYX0JPT0wJCQkJCUlzSW5saW5lKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fYklubGluZTsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJCQlTZXRJbmxpbmVEaWN0KENQREZfRGljdGlvbmFyeSogcERpY3QpDQotICAgIHsNCi0gICAgICAgIG1fcElubGluZURpY3QgPSBwRGljdDsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqCQlHZXRJbmxpbmVEaWN0KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcElubGluZURpY3Q7DQotICAgIH0NCi0NCi0gICAgQ1BERl9TdHJlYW0qCQkJR2V0U3RyZWFtKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcFN0cmVhbTsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqCQlHZXREaWN0KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcFN0cmVhbS0+R2V0RGljdCgpOw0KLSAgICB9DQotDQotICAgIENQREZfRGljdGlvbmFyeSoJCUdldE9DKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcE9DOw0KLSAgICB9DQotDQotICAgIENQREZfRG9jdW1lbnQqCQkJR2V0RG9jdW1lbnQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRG9jdW1lbnQ7DQotICAgIH0NCi0NCi0NCi0NCi0gICAgRlhfSU5UMzIJCQkJR2V0UGl4ZWxIZWlnaHQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9IZWlnaHQ7DQotICAgIH0NCi0NCi0gICAgRlhfSU5UMzIJCQkJR2V0UGl4ZWxXaWR0aCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX1dpZHRoOw0KLSAgICB9DQotDQotDQotICAgIEZYX0JPT0wJCQkJCUlzTWFzaygpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX2JJc01hc2s7DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTAkJCQkJSXNJbnRlcnBvbCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX2JJbnRlcnBvbGF0ZTsNCi0gICAgfQ0KLQ0KLSAgICBDRlhfRElCU291cmNlKgkJCUxvYWRESUJTb3VyY2UoQ0ZYX0RJQlNvdXJjZSoqIHBwTWFzayA9IE5VTEwsIEZYX0RXT1JEKiBwTWF0dGVDb2xvciA9IE5VTEwsIEZYX0JPT0wgYlN0ZENTID0gRkFMU0UsIEZYX0RXT1JEIEdyb3VwRmFtaWx5ID0gMCwgRlhfQk9PTCBiTG9hZE1hc2sgPSBGQUxTRSkgY29uc3Q7DQotDQotDQotDQotICAgIHZvaWQJCQkJCVNldEltYWdlKGNvbnN0IENGWF9ESUJpdG1hcCogcERJQml0bWFwLCBGWF9JTlQzMiBpQ29tcHJlc3MsIElGWF9GaWxlV3JpdGUgKnBGaWxlV3JpdGUgPSBOVUxMLCBJRlhfRmlsZVJlYWQgKnBGaWxlUmVhZCA9IE5VTEwsIGNvbnN0IENGWF9ESUJpdG1hcCogcE1hc2sgPSBOVUxMLCBjb25zdCBDUERGX0ltYWdlU2V0UGFyYW0qIHBQYXJhbSA9IE5VTEwpOw0KLQ0KLSAgICB2b2lkCQkJCQlTZXRKcGVnSW1hZ2UoRlhfQllURSogcEltYWdlRGF0YSwgRlhfRFdPUkQgc2l6ZSk7DQotDQotICAgIHZvaWQJCQkJCVNldEpwZWdJbWFnZShJRlhfRmlsZVJlYWQgKnBGaWxlKTsNCi0NCi0gICAgdm9pZAkJCQkJUmVzZXRDYWNoZShDUERGX1BhZ2UqIHBQYWdlLCBjb25zdCBDRlhfRElCaXRtYXAqIHBESUJpdG1hcCk7DQotDQotcHVibGljOg0KLSAgICBGWF9CT09MCQkJCQlTdGFydExvYWRESUJTb3VyY2UoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybVJlc291cmNlLCBDUERGX0RpY3Rpb25hcnkqIHBQYWdlUmVzb3VyY2UsIEZYX0JPT0wgYlN0ZENTID0gRkFMU0UsIEZYX0RXT1JEIEdyb3VwRmFtaWx5ID0gMCwgRlhfQk9PTCBiTG9hZE1hc2sgPSBGQUxTRSk7DQotICAgIEZYX0JPT0wJCQkJCUNvbnRpbnVlKElGWF9QYXVzZSogcFBhdXNlKTsNCi0gICAgQ0ZYX0RJQlNvdXJjZSoJCQlEZXRhY2hCaXRtYXAoKTsNCi0gICAgQ0ZYX0RJQlNvdXJjZSoJCQlEZXRhY2hNYXNrKCk7DQotICAgIENGWF9ESUJTb3VyY2UqCQkJbV9wRElCU291cmNlOw0KLSAgICBDRlhfRElCU291cmNlKgkJCW1fcE1hc2s7DQotICAgIEZYX0RXT1JECQkJCW1fTWF0dGVDb2xvcjsNCi1wcml2YXRlOg0KLQ0KLSAgICBDUERGX1N0cmVhbSoJCQltX3BTdHJlYW07DQotICAgIEZYX0JPT0wJCQkJCW1fYklubGluZTsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KgkJbV9wSW5saW5lRGljdDsNCi0NCi0gICAgRlhfSU5UMzIJCQkJbV9IZWlnaHQ7DQotDQotICAgIEZYX0lOVDMyCQkJCW1fV2lkdGg7DQotDQotICAgIEZYX0JPT0wJCQkJCW1fYklzTWFzazsNCi0NCi0gICAgRlhfQk9PTAkJCQkJbV9iSW50ZXJwb2xhdGU7DQotDQotICAgIENQREZfRG9jdW1lbnQqCQkJbV9wRG9jdW1lbnQ7DQotDQotICAgIENQREZfRGljdGlvbmFyeSoJCW1fcE9DOw0KLSAgICBDUERGX0RpY3Rpb25hcnkqCUluaXRKUEVHKEZYX0xQQllURSBwRGF0YSwgRlhfRFdPUkQgc2l6ZSk7DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9GUERGX1JFU09VUkNFXworI2RlZmluZSBfRlBERl9SRVNPVVJDRV8KKyNpZm5kZWYgX0ZQREZfUEFSU0VSXworI2luY2x1ZGUgImZwZGZfcGFyc2VyLmgiCisjZW5kaWYKKyNpZm5kZWYgX0ZYX0ZPTlRfSF8KKyNpbmNsdWRlICIuLi9meGdlL2Z4X2ZvbnQuaCIKKyNlbmRpZgorY2xhc3MgQ1BERl9Gb250OworY2xhc3MgQ1BERl9UeXBlMUZvbnQ7CitjbGFzcyBDUERGX1RydWVUeXBlRm9udDsKK2NsYXNzIENQREZfQ0lERm9udDsKK2NsYXNzIENQREZfVHlwZTNGb250OworY2xhc3MgQ1BERl9Gb250RW5jb2Rpbmc7CitjbGFzcyBDUERGX0NNYXA7CitjbGFzcyBDUERGX0NJRDJVbmljb2RlTWFwOworY2xhc3MgQ1BERl9Db2xvclNwYWNlOworY2xhc3MgQ1BERl9Db2xvcjsKK2NsYXNzIENQREZfRnVuY3Rpb247CitjbGFzcyBDUERGX1BhdHRlcm47CitjbGFzcyBDUERGX1RpbGluZ1BhdHRlcm47CitjbGFzcyBDUERGX1NoYWRpbmdQYXR0ZXJuOworY2xhc3MgQ1BERl9JbWFnZTsKK2NsYXNzIENQREZfRmFjZTsKK2NsYXNzIENQREZfVG9Vbmljb2RlTWFwOworY2xhc3MgQ0ZYX1N1YnN0Rm9udDsKK2NsYXNzIENGWF9Gb250OworY2xhc3MgQ1BERl9SZW5kZXJDb250ZXh0OworY2xhc3MgQ1BERl9Gb3JtOworY2xhc3MgQ1BERl9JbWFnZU9iamVjdDsKK2NsYXNzIENGWF9ESUJpdG1hcDsKK3R5cGVkZWYgc3RydWN0IEZUX0ZhY2VSZWNfKiBGWEZUX0ZhY2U7CitjbGFzcyBDRlhfQ1RUR1NVQlRhYmxlOworY2xhc3MgQ1BERl9QYWdlOworI2RlZmluZSBQREZGT05UX1RZUEUxCQkJMQorI2RlZmluZSBQREZGT05UX1RSVUVUWVBFCQkyCisjZGVmaW5lIFBERkZPTlRfVFlQRTMJCQkzCisjZGVmaW5lIFBERkZPTlRfQ0lERk9OVAkJCTQKKyNkZWZpbmUgUERGRk9OVF9GSVhFRFBJVENICQkxCisjZGVmaW5lIFBERkZPTlRfU0VSSUYJCQkyCisjZGVmaW5lIFBERkZPTlRfU1lNQk9MSUMJCTQKKyNkZWZpbmUgUERGRk9OVF9TQ1JJUFQJCQk4CisjZGVmaW5lIFBERkZPTlRfTk9OU1lNQk9MSUMJCTMyCisjZGVmaW5lIFBERkZPTlRfSVRBTElDCQkJNjQKKyNkZWZpbmUgUERGRk9OVF9BTExDQVAJCQkweDEwMDAwCisjZGVmaW5lIFBERkZPTlRfU01BTExDQVAJCTB4MjAwMDAKKyNkZWZpbmUgUERGRk9OVF9GT1JDRUJPTEQJCTB4NDAwMDAKKyNkZWZpbmUgUERGRk9OVF9VU0VFWFRFUk5BVFRSCTB4ODAwMDAKK0ZYX1dDSEFSIFBERl9Vbmljb2RlRnJvbUFkb2JlTmFtZShjb25zdCBGWF9DSEFSKiBuYW1lKTsKK0NGWF9CeXRlU3RyaW5nIFBERl9BZG9iZU5hbWVGcm9tVW5pY29kZShGWF9XQ0hBUiB1bmljb2RlKTsKK2NsYXNzIENQREZfRm9udCA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBzdGF0aWMgQ1BERl9Gb250KgkJQ3JlYXRlRm9udEYoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9EaWN0aW9uYXJ5KiBwRm9udERpY3QpOworCisgICAgc3RhdGljIENQREZfRm9udCoJCUdldFN0b2NrRm9udChDUERGX0RvY3VtZW50KiBwRG9jLCBGWF9CU1RSIGZvbnRuYW1lKTsKKworICAgIHZpcnR1YWwgfkNQREZfRm9udCgpOworCisKKworCisgICAgaW50CQkJCQkJR2V0Rm9udFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fRm9udFR5cGU7CisgICAgfQorCisgICAgQ0ZYX0J5dGVTdHJpbmcJCQlHZXRGb250VHlwZU5hbWUoKSBjb25zdDsKKworICAgIGNvbnN0IENGWF9CeXRlU3RyaW5nJglHZXRCYXNlRm9udCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9CYXNlRm9udDsKKyAgICB9CisKKyAgICBjb25zdCBDRlhfU3Vic3RGb250KglHZXRTdWJzdEZvbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fRm9udC5HZXRTdWJzdEZvbnQoKTsKKyAgICB9CisKKyAgICBGWF9EV09SRAkJCQlHZXRGbGFncygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9GbGFnczsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQlJc1ZlcnRXcml0aW5nKCljb25zdDsKKworCisKKworICAgIENQREZfVHlwZTFGb250KgkJCUdldFR5cGUxRm9udCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9Gb250VHlwZSA9PSBQREZGT05UX1RZUEUxID8gKENQREZfVHlwZTFGb250Kikodm9pZCopdGhpcyA6IE5VTEw7CisgICAgfQorCisgICAgQ1BERl9UcnVlVHlwZUZvbnQqCQlHZXRUcnVlVHlwZUZvbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fRm9udFR5cGUgPT0gUERGRk9OVF9UUlVFVFlQRSA/IChDUERGX1RydWVUeXBlRm9udCopKHZvaWQqKXRoaXMgOiBOVUxMOworICAgIH0KKworICAgIENQREZfQ0lERm9udCoJCQlHZXRDSURGb250KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAobV9Gb250VHlwZSA9PSBQREZGT05UX0NJREZPTlQpID8gKENQREZfQ0lERm9udCopKHZvaWQqKXRoaXMgOiBOVUxMOworICAgIH0KKworICAgIENQREZfVHlwZTNGb250KgkJCUdldFR5cGUzRm9udCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKG1fRm9udFR5cGUgPT0gUERGRk9OVF9UWVBFMykgPyAoQ1BERl9UeXBlM0ZvbnQqKSh2b2lkKil0aGlzIDogTlVMTDsKKyAgICB9CisKKworICAgIEZYX0JPT0wJCQkJCUlzRW1iZWRkZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fRm9udFR5cGUgPT0gUERGRk9OVF9UWVBFMyB8fCBtX3BGb250RmlsZSAhPSBOVUxMOworICAgIH0KKworICAgIHZpcnR1YWwgRlhfQk9PTAkJCUlzVW5pY29kZUNvbXBhdGlibGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIENQREZfU3RyZWFtQWNjKgkJCUdldEZvbnRGaWxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BGb250RmlsZTsKKyAgICB9CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCQlHZXRGb250RGljdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wRm9udERpY3Q7CisgICAgfQorCisgICAgRlhfQk9PTAkJCQkJSXNTdGFuZGFyZEZvbnQoKSBjb25zdDsKKworICAgIEZYRlRfRmFjZQkJCQlHZXRGYWNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0ZvbnQuR2V0RmFjZSgpOworICAgIH0KKworCisKKyAgICB2aXJ0dWFsIEZYX0RXT1JECQlHZXROZXh0Q2hhcihGWF9MUENTVFIgcFN0cmluZywgaW50JiBvZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKEZYX0JZVEUpcFN0cmluZ1tvZmZzZXQrK107CisgICAgfQorCisgICAgdmlydHVhbCBpbnQJCQkJQ291bnRDaGFyKEZYX0xQQ1NUUiBwU3RyaW5nLCBpbnQgc2l6ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzaXplOworICAgIH0KKworICAgIHZvaWQJCQkJCUFwcGVuZENoYXIoQ0ZYX0J5dGVTdHJpbmcmIHN0ciwgRlhfRFdPUkQgY2hhcmNvZGUpIGNvbnN0OworCisgICAgdmlydHVhbCBpbnQJCQkJQXBwZW5kQ2hhcihGWF9MUFNUUiBidWYsIEZYX0RXT1JEIGNoYXJjb2RlKSBjb25zdAorICAgIHsKKyAgICAgICAgKmJ1ZiA9IChGWF9DSEFSKWNoYXJjb2RlOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGludAkJCQlHZXRDaGFyU2l6ZShGWF9EV09SRCBjaGFyY29kZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworCisKKworICAgIHZpcnR1YWwgaW50CQkJCUdseXBoRnJvbUNoYXJDb2RlKEZYX0RXT1JEIGNoYXJjb2RlLCBGWF9CT09MICpwVmVydEdseXBoID0gTlVMTCkgPSAwOworICAgIHZpcnR1YWwgaW50CQkJCUdseXBoRnJvbUNoYXJDb2RlRXh0KEZYX0RXT1JEIGNoYXJjb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdseXBoRnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsKKyAgICB9CisKKyAgICBDRlhfV2lkZVN0cmluZwkJCVVuaWNvZGVGcm9tQ2hhckNvZGUoRlhfRFdPUkQgY2hhcmNvZGUpIGNvbnN0OworCisgICAgRlhfRFdPUkQJCQkJQ2hhckNvZGVGcm9tVW5pY29kZShGWF9XQ0hBUiBVbmljb2RlKSBjb25zdDsKKworICAgIENGWF9DaGFyTWFwKgkJCUdldENoYXJNYXAoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcENoYXJNYXA7CisgICAgfQorCisgICAgQ0ZYX0J5dGVTdHJpbmcJCQlFbmNvZGVTdHJpbmcoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cikgY29uc3Q7CisKKyAgICBDRlhfV2lkZVN0cmluZwkJCURlY29kZVN0cmluZyhjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyKSBjb25zdDsKKworCisKKworICAgIHZvaWQJCQkJCUdldEZvbnRCQm94KEZYX1JFQ1QmIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICByZWN0ID0gbV9Gb250QkJveDsKKyAgICB9CisKKyAgICBpbnQJCQkJCQlHZXRUeXBlQXNjZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0FzY2VudDsKKyAgICB9CisKKyAgICBpbnQJCQkJCQlHZXRUeXBlRGVzY2VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9EZXNjZW50OworICAgIH0KKworICAgIGludAkJCQkJCUdldEl0YWxpY0FuZ2xlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0l0YWxpY0FuZ2xlOworICAgIH0KKworICAgIGludAkJCQkJCUdldFN0ZW1WKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX1N0ZW1WOworICAgIH0KKworICAgIGludAkJCQkJCUdldFN0cmluZ1dpZHRoKGNvbnN0IEZYX0NIQVIqIHBTdHJpbmcsIGludCBzaXplKTsKKworICAgIHZpcnR1YWwgaW50CQkJCUdldENoYXJXaWR0aEYoRlhfRFdPUkQgY2hhcmNvZGUsIGludCBsZXZlbCA9IDApID0gMDsKKworICAgIHZpcnR1YWwgaW50CQkJCUdldENoYXJUeXBlV2lkdGgoRlhfRFdPUkQgY2hhcmNvZGUpOworCisgICAgdmlydHVhbCB2b2lkCQkJR2V0Q2hhckJCb3goRlhfRFdPUkQgY2hhcmNvZGUsIEZYX1JFQ1QmIHJlY3QsIGludCBsZXZlbCA9IDApID0gMDsKKworCisKKyAgICBDUERGX0RvY3VtZW50KgkJCW1fcERvY3VtZW50OworCisgICAgY2xhc3MgQ0ZYX1BhdGhEYXRhKgkJTG9hZEdseXBoUGF0aChGWF9EV09SRCBjaGFyY29kZSwgaW50IGRlc3Rfd2lkdGggPSAwKTsKKworICAgIENGWF9Gb250CQkJCW1fRm9udDsKK3Byb3RlY3RlZDoKKworICAgIENQREZfRm9udCgpOworCisgICAgRlhfQk9PTAkJCQkJSW5pdGlhbGl6ZSgpOworCisgICAgRlhfQk9PTAkJCQkJTG9hZCgpOworCisgICAgdmlydHVhbCBGWF9CT09MCQkJX0xvYWQoKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX1dDSEFSCQlfVW5pY29kZUZyb21DaGFyQ29kZShGWF9EV09SRCBjaGFyY29kZSkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBGWF9EV09SRAkJX0NoYXJDb2RlRnJvbVVuaWNvZGUoRlhfV0NIQVIgVW5pY29kZSkgY29uc3QgPSAwOworCisgICAgdm9pZAkJCQkJTG9hZFVuaWNvZGVNYXAoKTsKKworICAgIHZvaWQJCQkJCUxvYWRQREZFbmNvZGluZyhDUERGX09iamVjdCogcEVuY29kaW5nLCBpbnQmIGlCYXNlRW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nKiYgcENoYXJOYW1lcywgRlhfQk9PTCBiRW1iZWRkZWQsIEZYX0JPT0wgYlRydWVUeXBlKTsKKworICAgIHZvaWQJCQkJCUxvYWRGb250RGVzY3JpcHRvcihDUERGX0RpY3Rpb25hcnkqKTsKKworICAgIHZvaWQJCQkJCUxvYWRDaGFyV2lkdGhzKEZYX1dPUkQqIHBXaWR0aHMpOworCisgICAgdm9pZAkJCQkJQ2hlY2tGb250TWV0cmljcygpOworCisgICAgQ0ZYX0NoYXJNYXAqCQkJbV9wQ2hhck1hcDsKKworCisKKyAgICBpbnQJCQkJCQltX0ZvbnRUeXBlOworCisgICAgQ0ZYX0J5dGVTdHJpbmcJCQltX0Jhc2VGb250OworCisgICAgQ1BERl9TdHJlYW1BY2MqCQkJbV9wRm9udEZpbGU7CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCQltX3BGb250RGljdDsKKworICAgIENQREZfVG9Vbmljb2RlTWFwKgkJbV9wVG9Vbmljb2RlTWFwOworCisgICAgRlhfQk9PTAkJCQkJbV9iVG9Vbmljb2RlTG9hZGVkOworCisKKworCisgICAgaW50CQkJCQkJbV9GbGFnczsKKworICAgIEZYX1JFQ1QJCQkJCW1fRm9udEJCb3g7CisKKyAgICBpbnQJCQkJCQltX1N0ZW1WOworCisgICAgaW50CQkJCQkJbV9Bc2NlbnQ7CisKKyAgICBpbnQJCQkJCQltX0Rlc2NlbnQ7CisKKyAgICBpbnQJCQkJCQltX0l0YWxpY0FuZ2xlOworCit9OworI2RlZmluZSBQREZGT05UX0VOQ09ESU5HX0JVSUxUSU4JCTAKKyNkZWZpbmUgUERGRk9OVF9FTkNPRElOR19XSU5BTlNJCQkxCisjZGVmaW5lIFBERkZPTlRfRU5DT0RJTkdfTUFDUk9NQU4JCTIKKyNkZWZpbmUgUERGRk9OVF9FTkNPRElOR19NQUNFWFBFUlQJCTMKKyNkZWZpbmUgUERGRk9OVF9FTkNPRElOR19TVEFOREFSRAkJNAorI2RlZmluZSBQREZGT05UX0VOQ09ESU5HX0FET0JFX1NZTUJPTAk1CisjZGVmaW5lIFBERkZPTlRfRU5DT0RJTkdfWkFQRkRJTkdCQVRTCTYKKyNkZWZpbmUgUERGRk9OVF9FTkNPRElOR19QREZET0MJCQk3CisjZGVmaW5lIFBERkZPTlRfRU5DT0RJTkdfTVNfU1lNQk9MCQk4CisjZGVmaW5lIFBERkZPTlRfRU5DT0RJTkdfVU5JQ09ERQkJOQorY2xhc3MgQ1BERl9Gb250RW5jb2RpbmcgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ1BERl9Gb250RW5jb2RpbmcoKTsKKworICAgIENQREZfRm9udEVuY29kaW5nKGludCBQcmVkZWZpbmVkRW5jb2RpbmcpOworCisgICAgdm9pZAkJCQkJTG9hZEVuY29kaW5nKENQREZfT2JqZWN0KiBwRW5jb2RpbmcpOworCisgICAgRlhfQk9PTAkJCQkJSXNJZGVudGljYWwoQ1BERl9Gb250RW5jb2RpbmcqIHBBbm90aGVyKSBjb25zdDsKKworICAgIEZYX1dDSEFSCQkJCVVuaWNvZGVGcm9tQ2hhckNvZGUoRlhfQllURSBjaGFyY29kZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX1VuaWNvZGVzW2NoYXJjb2RlXTsKKyAgICB9CisKKyAgICBpbnQJCQkJCQlDaGFyQ29kZUZyb21Vbmljb2RlKEZYX1dDSEFSIHVuaWNvZGUpIGNvbnN0OworCisgICAgdm9pZAkJCQkJU2V0VW5pY29kZShGWF9CWVRFIGNoYXJjb2RlLCBGWF9XQ0hBUiB1bmljb2RlKQorICAgIHsKKyAgICAgICAgbV9Vbmljb2Rlc1tjaGFyY29kZV0gPSB1bmljb2RlOworICAgIH0KKworICAgIENQREZfT2JqZWN0KgkJCVJlYWxpemUoKTsKK3B1YmxpYzoKKworICAgIEZYX1dDSEFSCQkJCW1fVW5pY29kZXNbMjU2XTsKK307CitjbGFzcyBDUERGX1NpbXBsZUZvbnQgOiBwdWJsaWMgQ1BERl9Gb250Cit7CitwdWJsaWM6CisKKyAgICBDUERGX1NpbXBsZUZvbnQoKTsKKworICAgIHZpcnR1YWwgfkNQREZfU2ltcGxlRm9udCgpOworCisgICAgQ1BERl9Gb250RW5jb2RpbmcqCQlHZXRFbmNvZGluZygpCisgICAgeworICAgICAgICByZXR1cm4gJm1fRW5jb2Rpbmc7CisgICAgfQorICAgIHZpcnR1YWwgaW50CQkJCUdldENoYXJXaWR0aEYoRlhfRFdPUkQgY2hhcmNvZGUsIGludCBsZXZlbCA9IDApOworICAgIHZpcnR1YWwgdm9pZAkJCUdldENoYXJCQm94KEZYX0RXT1JEIGNoYXJjb2RlLCBGWF9SRUNUJiByZWN0LCBpbnQgbGV2ZWwgPSAwKTsKKyAgICB2aXJ0dWFsIGludAkJCQlHbHlwaEZyb21DaGFyQ29kZShGWF9EV09SRCBjaGFyY29kZSwgRlhfQk9PTCAqcFZlcnRHbHlwaCA9IE5VTEwpOworICAgIHZpcnR1YWwgRlhfQk9PTAkJCUlzVW5pY29kZUNvbXBhdGlibGUoKSBjb25zdDsKK3Byb3RlY3RlZDoKKworICAgIEZYX0JPT0wJCQkJCUxvYWRDb21tb24oKTsKKworICAgIHZvaWQJCQkJCUxvYWRTdWJzdEZvbnQoKTsKKworICAgIHZvaWQJCQkJCUxvYWRGYWNlTWV0cmljcygpOworCisgICAgdmlydHVhbCB2b2lkCQkJTG9hZEdseXBoTWFwKCkgPSAwOworICAgIHZpcnR1YWwgRlhfV0NIQVIJCV9Vbmljb2RlRnJvbUNoYXJDb2RlKEZYX0RXT1JEIGNoYXJjb2RlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fRW5jb2RpbmcuVW5pY29kZUZyb21DaGFyQ29kZSgoRlhfQllURSljaGFyY29kZSk7CisgICAgfQorICAgIHZpcnR1YWwgRlhfRFdPUkQJCV9DaGFyQ29kZUZyb21Vbmljb2RlKEZYX1dDSEFSIFVuaWNvZGUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9FbmNvZGluZy5DaGFyQ29kZUZyb21Vbmljb2RlKFVuaWNvZGUpOworICAgIH0KKworCisKKyAgICBDUERGX0ZvbnRFbmNvZGluZwkJbV9FbmNvZGluZzsKKworICAgIEZYX1dPUkQJCQkJCW1fR2x5cGhJbmRleFsyNTZdOworICAgIEZYX1dPUkQJCQkJCW1fRXh0R0lEWzI1Nl07CisKKworCisKKyAgICBDRlhfQnl0ZVN0cmluZyoJCQltX3BDaGFyTmFtZXM7CisKKyAgICBpbnQJCQkJCQltX0Jhc2VFbmNvZGluZzsKKworCisKKworICAgIEZYX1dPUkQJCQkJCW1fQ2hhcldpZHRoWzI1Nl07CisKKyAgICBGWF9TTUFMTF9SRUNUCQkJbV9DaGFyQkJveFsyNTZdOworCisgICAgRlhfQk9PTAkJCQkJbV9iVXNlRm9udFdpZHRoOworCisgICAgdm9pZAkJCQkJTG9hZENoYXJNZXRyaWNzKGludCBjaGFyY29kZSk7CisKK307CitjbGFzcyBDUERGX1R5cGUxRm9udCA6IHB1YmxpYyBDUERGX1NpbXBsZUZvbnQKK3sKK3B1YmxpYzoKKworICAgIENQREZfVHlwZTFGb250KCk7CisKKyAgICBpbnQJCQkJCQlHZXRCYXNlMTRGb250KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX0Jhc2UxNEZvbnQ7CisgICAgfQorICAgIHZpcnR1YWwgaW50CQkJCUdseXBoRnJvbUNoYXJDb2RlRXh0KEZYX0RXT1JEIGNoYXJjb2RlKTsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQlfTG9hZCgpOworCisgICAgaW50CQkJCQkJbV9CYXNlMTRGb250OworICAgIHZpcnR1YWwgdm9pZAkJCUxvYWRHbHlwaE1hcCgpOworfTsKK2NsYXNzIENQREZfVHJ1ZVR5cGVGb250IDogcHVibGljIENQREZfU2ltcGxlRm9udAoreworcHVibGljOgorCisgICAgQ1BERl9UcnVlVHlwZUZvbnQoKTsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQlfTG9hZCgpOworICAgIHZpcnR1YWwgdm9pZAkJCUxvYWRHbHlwaE1hcCgpOworfTsKK2NsYXNzIENQREZfVHlwZTNDaGFyIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENQREZfVHlwZTNDaGFyKCk7CisKKyAgICB+Q1BERl9UeXBlM0NoYXIoKTsKKworICAgIEZYX0JPT0wgTG9hZEJpdG1hcChDUERGX1JlbmRlckNvbnRleHQqIHBDb250ZXh0KTsKKworICAgIEZYX0JPT0wJCQkJCW1fYkNvbG9yZWQ7CisKKyAgICBGWF9CT09MCQkJCQltX2JQYWdlUmVxdWlyZWQ7CisKKworCisgICAgQ1BERl9Gb3JtKgkJCQltX3BGb3JtOworCisgICAgQ0ZYX0FmZmluZU1hdHJpeAkJbV9JbWFnZU1hdHJpeDsKKworICAgIENGWF9ESUJpdG1hcCoJCQltX3BCaXRtYXA7CisKKworICAgIGludAkJCQkJCW1fV2lkdGg7CisKKyAgICBGWF9SRUNUCQkJCQltX0JCb3g7Cit9OworY2xhc3MgQ1BERl9UeXBlM0ZvbnQgOiBwdWJsaWMgQ1BERl9TaW1wbGVGb250Cit7CitwdWJsaWM6CisgICAgQ1BERl9UeXBlM0ZvbnQoKTsKKyAgICB2aXJ0dWFsIH5DUERGX1R5cGUzRm9udCgpOworICAgIHZvaWQJCQkJCVNldFBhZ2VSZXNvdXJjZXMoQ1BERl9EaWN0aW9uYXJ5KiBwUmVzb3VyY2VzKQorICAgIHsKKyAgICAgICAgbV9wUGFnZVJlc291cmNlcyA9IHBSZXNvdXJjZXM7CisgICAgfQorICAgIENQREZfVHlwZTNDaGFyKgkJCUxvYWRDaGFyKEZYX0RXT1JEIGNoYXJjb2RlLCBpbnQgbGV2ZWwgPSAwKTsKKyAgICB2aXJ0dWFsIGludAkJCQlHZXRDaGFyV2lkdGhGKEZYX0RXT1JEIGNoYXJjb2RlLCBpbnQgbGV2ZWwgPSAwKTsKKyAgICB2aXJ0dWFsIGludAkJCQlHZXRDaGFyVHlwZVdpZHRoKEZYX0RXT1JEIGNoYXJjb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldENoYXJXaWR0aEYoY2hhcmNvZGUpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQJCQlHZXRDaGFyQkJveChGWF9EV09SRCBjaGFyY29kZSwgRlhfUkVDVCYgcmVjdCwgaW50IGxldmVsID0gMCk7CisgICAgQ0ZYX0FmZmluZU1hdHJpeCYJCUdldEZvbnRNYXRyaXgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fRm9udE1hdHJpeDsKKyAgICB9CisgICAgdm9pZAkJCQkJQ2hlY2tUeXBlM0ZvbnRNZXRyaWNzKCk7Citwcml2YXRlOgorICAgIHZpcnR1YWwgRlhfQk9PTAkJCV9Mb2FkKCk7CisgICAgdmlydHVhbCB2b2lkCQkJTG9hZEdseXBoTWFwKCkge30KKyAgICBpbnQJCQkJCQltX0NoYXJXaWR0aExbMjU2XTsKKyAgICBDUERGX0RpY3Rpb25hcnkqCQltX3BDaGFyUHJvY3M7CisgICAgQ1BERl9EaWN0aW9uYXJ5KgkJbV9wUGFnZVJlc291cmNlczsKKyAgICBDUERGX0RpY3Rpb25hcnkqCQltX3BGb250UmVzb3VyY2VzOworICAgIENGWF9NYXBQdHJUb1B0cgkJCW1fQ2FjaGVNYXA7CisgICAgQ0ZYX01hcFB0clRvUHRyCQkJbV9EZWxldGVkTWFwOworcHJvdGVjdGVkOgorICAgIENGWF9BZmZpbmVNYXRyaXgJCW1fRm9udE1hdHJpeDsKK307CisjZGVmaW5lIENJRFNFVF9VTktOT1dOCQkwCisjZGVmaW5lIENJRFNFVF9HQjEJCQkxCisjZGVmaW5lIENJRFNFVF9DTlMxCQkJMgorI2RlZmluZSBDSURTRVRfSkFQQU4xCQkzCisjZGVmaW5lIENJRFNFVF9LT1JFQTEJCTQKKyNkZWZpbmUgQ0lEU0VUX1VOSUNPREUJCTUKK2NsYXNzIENQREZfQ0lERm9udCA6IHB1YmxpYyBDUERGX0ZvbnQKK3sKK3B1YmxpYzoKKworICAgIENQREZfQ0lERm9udCgpOworCisgICAgdmlydHVhbCB+Q1BERl9DSURGb250KCk7CisKKyAgICBGWF9CT09MCQkJCQlMb2FkR0IyMzEyKCk7CisgICAgdmlydHVhbCBpbnQJCQkJR2x5cGhGcm9tQ2hhckNvZGUoRlhfRFdPUkQgY2hhcmNvZGUsIEZYX0JPT0wgKnBWZXJ0R2x5cGggPSBOVUxMKTsKKyAgICB2aXJ0dWFsIGludAkJCQlHZXRDaGFyV2lkdGhGKEZYX0RXT1JEIGNoYXJjb2RlLCBpbnQgbGV2ZWwgPSAwKTsKKyAgICB2aXJ0dWFsIHZvaWQJCQlHZXRDaGFyQkJveChGWF9EV09SRCBjaGFyY29kZSwgRlhfUkVDVCYgcmVjdCwgaW50IGxldmVsID0gMCk7CisKKyAgICBGWF9XT1JECQkJCQlDSURGcm9tQ2hhckNvZGUoRlhfRFdPUkQgY2hhcmNvZGUpIGNvbnN0OworCisgICAgRlhfQk9PTAkJCQkJSXNUcnVlVHlwZSgpCisgICAgeworICAgICAgICByZXR1cm4gIW1fYlR5cGUxOworICAgIH0KKworCisgICAgdmlydHVhbCBGWF9EV09SRAkJR2V0TmV4dENoYXIoY29uc3QgRlhfQ0hBUiogcFN0cmluZywgaW50JiBvZmZzZXQpIGNvbnN0OworICAgIHZpcnR1YWwgaW50CQkJCUNvdW50Q2hhcihjb25zdCBGWF9DSEFSKiBwU3RyaW5nLCBpbnQgc2l6ZSkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQJCQkJQXBwZW5kQ2hhcihGWF9MUFNUUiBzdHIsIEZYX0RXT1JEIGNoYXJjb2RlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludAkJCQlHZXRDaGFyU2l6ZShGWF9EV09SRCBjaGFyY29kZSkgY29uc3Q7CisKKworICAgIGludAkJCQkJCUdldENoYXJzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fQ2hhcnNldDsKKyAgICB9CisKKyAgICBGWF9MUENCWVRFCQkJCUdldENJRFRyYW5zZm9ybShGWF9XT1JEIENJRCkgY29uc3Q7CisKKworCisgICAgdmlydHVhbCBGWF9CT09MCQkJSXNWZXJ0V3JpdGluZygpIGNvbnN0OworCisgICAgc2hvcnQJCQkJCUdldFZlcnRXaWR0aChGWF9XT1JEIENJRCkgY29uc3Q7CisKKyAgICB2b2lkCQkJCQlHZXRWZXJ0T3JpZ2luKEZYX1dPUkQgQ0lELCBzaG9ydCYgdngsIHNob3J0JiB2eSkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQlJc1VuaWNvZGVDb21wYXRpYmxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBGWF9CT09MCQkJSXNGb250U3R5bGVGcm9tQ2hhckNvZGUoRlhfRFdPUkQgY2hhcmNvZGUpIGNvbnN0OworcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcwkJCUNQREZfRm9udDsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQlfTG9hZCgpOworICAgIHZpcnR1YWwgRlhfV0NIQVIJCV9Vbmljb2RlRnJvbUNoYXJDb2RlKEZYX0RXT1JEIGNoYXJjb2RlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZYX0RXT1JECQlfQ2hhckNvZGVGcm9tVW5pY29kZShGWF9XQ0hBUiBVbmljb2RlKSBjb25zdDsKKyAgICBpbnQJCQkJR2V0R2x5cGhJbmRleChGWF9EV09SRCB1bmljb2RlYiwgRlhfQk9PTCAqcFZlcnRHbHlwaCk7CisKKyAgICBDUERGX0NNYXAqCQkJCW1fcENNYXA7CisKKyAgICBDUERGX0NNYXAqCQkJCW1fcEFsbG9jYXRlZENNYXA7CisKKyAgICBDUERGX0NJRDJVbmljb2RlTWFwKgltX3BDSUQyVW5pY29kZU1hcDsKKworICAgIGludAkJCQkJCW1fQ2hhcnNldDsKKworICAgIEZYX0JPT0wJCQkJCW1fYlR5cGUxOworCisgICAgQ1BERl9TdHJlYW1BY2MqCQkJbV9wQ0lEVG9HSURNYXA7CisgICAgRlhfQk9PTAkJCQkJbV9iQ0lESXNHSUQ7CisKKworCisgICAgRlhfV09SRAkJCQkJbV9EZWZhdWx0V2lkdGg7CisKKyAgICBGWF9XT1JEKgkJCQltX3BBbnNpV2lkdGhzOworCisgICAgRlhfU01BTExfUkVDVAkJCW1fQ2hhckJCb3hbMjU2XTsKKworICAgIENGWF9EV29yZEFycmF5CQkJbV9XaWR0aExpc3Q7CisKKyAgICBzaG9ydAkJCQkJbV9EZWZhdWx0Vlk7CisKKyAgICBzaG9ydAkJCQkJbV9EZWZhdWx0VzE7CisKKyAgICBDRlhfRFdvcmRBcnJheQkJCW1fVmVydE1ldHJpY3M7CisKKworICAgIHZvaWQJCQkJCUxvYWRNZXRyaWNzQXJyYXkoQ1BERl9BcnJheSogcEFycmF5LCBDRlhfRFdvcmRBcnJheSYgcmVzdWx0LCBpbnQgbkVsZW1lbnRzKTsKKworICAgIHZvaWQJCQkJCUxvYWRTdWJzdEZvbnQoKTsKKworICAgIEZYX0JPT0wJCQkJCW1fYkFkb2JlQ291cmllclN0ZDsKKworICAgIENGWF9DVFRHU1VCVGFibGUqCQkJbV9wVFRHU1VCVGFibGU7Cit9OworI2RlZmluZSBQREZDU19ERVZJQ0VHUkFZCQkxCisKKyNkZWZpbmUgUERGQ1NfREVWSUNFUkdCCQkJMgorI2RlZmluZSBQREZDU19ERVZJQ0VDTVlLCQkzCisjZGVmaW5lIFBERkNTX0NBTEdSQVkJCQk0CisjZGVmaW5lIFBERkNTX0NBTFJHQgkJCTUKKyNkZWZpbmUgUERGQ1NfTEFCCQkJCTYKKyNkZWZpbmUgUERGQ1NfSUNDQkFTRUQJCQk3CisjZGVmaW5lIFBERkNTX1NFUEFSQVRJT04JCTgKKyNkZWZpbmUgUERGQ1NfREVWSUNFTgkJCTkKKyNkZWZpbmUgUERGQ1NfSU5ERVhFRAkJCTEwCisjZGVmaW5lIFBERkNTX1BBVFRFUk4JCQkxMQorY2xhc3MgQ1BERl9Db2xvclNwYWNlIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIHN0YXRpYyBDUERGX0NvbG9yU3BhY2UqIEdldFN0b2NrQ1MoaW50IEZhbWlseSk7CisKKyAgICBzdGF0aWMgQ1BERl9Db2xvclNwYWNlKglMb2FkKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfT2JqZWN0KiBwQ1NPYmopOworCisgICAgdm9pZAkJCQkJUmVsZWFzZUNTKCk7CisKKyAgICBpbnQJCQkJCQlHZXRCdWZTaXplKCkgY29uc3Q7CisKKyAgICBGWF9GTE9BVCoJCQlDcmVhdGVCdWYoKTsKKworICAgIHZvaWQJCQkJCUdldERlZmF1bHRDb2xvcihGWF9GTE9BVCogYnVmKSBjb25zdDsKKworICAgIGludAkJCQkJCUNvdW50Q29tcG9uZW50cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9uQ29tcG9uZW50czsKKyAgICB9CisKKyAgICBpbnQJCQkJCQlHZXRGYW1pbHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fRmFtaWx5OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZAkJCUdldERlZmF1bHRWYWx1ZShpbnQgaUNvbXBvbmVudCwgRlhfRkxPQVQmIHZhbHVlLCBGWF9GTE9BVCYgbWluLCBGWF9GTE9BVCYgbWF4KSBjb25zdAorICAgIHsKKyAgICAgICAgdmFsdWUgPSAwOworICAgICAgICBtaW4gPSAwOworICAgICAgICBtYXggPSAxLjBmOworICAgIH0KKworICAgIEZYX0JPT0wJCQkJCXNSR0IoKSBjb25zdDsKKworCisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQlHZXRSR0IoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUJiBSLCBGWF9GTE9BVCYgRywgRlhfRkxPQVQmIEIpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgRlhfQk9PTAkJCVNldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQgUiwgRlhfRkxPQVQgRywgRlhfRkxPQVQgQikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKworCisKKyAgICBGWF9CT09MCQkJCQlHZXRDTVlLKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCYgYywgRlhfRkxPQVQmIG0sIEZYX0ZMT0FUJiB5LCBGWF9GTE9BVCYgaykgY29uc3Q7CisKKyAgICBGWF9CT09MCQkJCQlTZXRDTVlLKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCBjLCBGWF9GTE9BVCBtLCBGWF9GTE9BVCB5LCBGWF9GTE9BVCBrKSBjb25zdDsKKworCisgICAgdmlydHVhbCB2b2lkCQkJVHJhbnNsYXRlSW1hZ2VMaW5lKEZYX0xQQllURSBkZXN0X2J1ZiwgRlhfTFBDQllURSBzcmNfYnVmLCBpbnQgcGl4ZWxzLAorICAgICAgICAgICAgaW50IGltYWdlX3dpZHRoLCBpbnQgaW1hZ2VfaGVpZ2h0LCBGWF9CT09MIGJUcmFuc01hc2sgPSBGQUxTRSkgY29uc3Q7CisKKyAgICBDUERGX0FycmF5KiYJCQlHZXRBcnJheSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9wQXJyYXk7CisgICAgfQorCisgICAgaW50CQkJCQkJR2V0TWF4SW5kZXgoKSBjb25zdDsKKworICAgIHZpcnR1YWwgQ1BERl9Db2xvclNwYWNlKglHZXRCYXNlQ1MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkCQkJRW5hYmxlU3RkQ29udmVyc2lvbihGWF9CT09MIGJFbmFibGVkKTsKKyAgICBDUERGX0RvY3VtZW50KgkJCW1fcERvY3VtZW50OworcHJvdGVjdGVkOgorCisgICAgQ1BERl9Db2xvclNwYWNlKCk7CisKKyAgICB2aXJ0dWFsIH5DUERGX0NvbG9yU3BhY2UoKSB7fQorICAgIHZpcnR1YWwgRlhfQk9PTAkJCXZfTG9hZChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0FycmF5KiBwQXJyYXkpCisgICAgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgdmlydHVhbCBGWF9CT09MCQkJdl9HZXRDTVlLKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCYgYywgRlhfRkxPQVQmIG0sIEZYX0ZMT0FUJiB5LCBGWF9GTE9BVCYgaykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgdmlydHVhbCBGWF9CT09MCQkJdl9TZXRDTVlLKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCBjLCBGWF9GTE9BVCBtLCBGWF9GTE9BVCB5LCBGWF9GTE9BVCBrKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGludAkJCQkJCW1fRmFtaWx5OworCisgICAgaW50CQkJCQkJbV9uQ29tcG9uZW50czsKKworICAgIENQREZfQXJyYXkqCQkJCW1fcEFycmF5OworCisgICAgRlhfRFdPUkQJCQkJbV9kd1N0ZENvbnZlcnNpb247Cit9OworY2xhc3MgQ1BERl9Db2xvciA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDUERGX0NvbG9yKCkKKyAgICB7CisgICAgICAgIG1fcEJ1ZmZlciA9IE5VTEw7CisgICAgICAgIG1fcENTID0gTlVMTDsKKyAgICB9CisKKyAgICBDUERGX0NvbG9yKGludCBmYW1pbHkpOworCisgICAgfkNQREZfQ29sb3IoKTsKKworICAgIEZYX0JPT0wJCQkJCUlzTnVsbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wQnVmZmVyID09IE5VTEw7CisgICAgfQorCisgICAgRlhfQk9PTAkJCQkJSXNFcXVhbChjb25zdCBDUERGX0NvbG9yJiBvdGhlcikgY29uc3Q7CisKKyAgICBGWF9CT09MCQkJCQlJc1BhdHRlcm4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcENTICYmIG1fcENTLT5HZXRGYW1pbHkoKSA9PSBQREZDU19QQVRURVJOOworICAgIH0KKworICAgIHZvaWQJCQkJCUNvcHkoY29uc3QgQ1BERl9Db2xvciogcFNyYyk7CisKKyAgICB2b2lkCQkJCQlTZXRDb2xvclNwYWNlKENQREZfQ29sb3JTcGFjZSogcENTKTsKKworICAgIHZvaWQJCQkJCVNldFZhbHVlKEZYX0ZMT0FUKiBjb21wKTsKKworICAgIHZvaWQJCQkJCVNldFZhbHVlKENQREZfUGF0dGVybiogcFBhdHRlcm4sIEZYX0ZMT0FUKiBjb21wLCBpbnQgbmNvbXBzKTsKKworICAgIEZYX0JPT0wJCQkJCUdldFJHQihpbnQmIFIsIGludCYgRywgaW50JiBCKSBjb25zdDsKKworICAgIENQREZfUGF0dGVybioJCQlHZXRQYXR0ZXJuKCkgY29uc3Q7CisKKyAgICBDUERGX0NvbG9yU3BhY2UqCQlHZXRQYXR0ZXJuQ1MoKSBjb25zdDsKKworICAgIEZYX0ZMT0FUKgkJCUdldFBhdHRlcm5Db2xvcigpIGNvbnN0OworCisgICAgQ1BERl9Db2xvclNwYWNlKgkJbV9wQ1M7CisKKyAgICBGWF9GTE9BVCoJCQltX3BCdWZmZXI7Citwcm90ZWN0ZWQ6CisgICAgdm9pZAlSZWxlYXNlQnVmZmVyKCk7CisgICAgdm9pZAlSZWxlYXNlQ29sb3JTcGFjZSgpOworfTsKKyNkZWZpbmUgUEFUVEVSTl9USUxJTkcJCTEKKyNkZWZpbmUgUEFUVEVSTl9TSEFESU5HCQkyCitjbGFzcyBDUERGX1BhdHRlcm4gOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgdmlydHVhbCB+Q1BERl9QYXR0ZXJuKCkge30KKworICAgIENQREZfT2JqZWN0KgkJCW1fcFBhdHRlcm5PYmo7CisKKyAgICBpbnQJCQkJCQltX1BhdHRlcm5UeXBlOworCisgICAgQ0ZYX0FmZmluZU1hdHJpeAkJbV9QYXR0ZXJuMkZvcm07CisgICAgQ0ZYX0FmZmluZU1hdHJpeAkJbV9QYXJlbnRNYXRyaXg7CisKKyAgICBDUERGX0RvY3VtZW50KgkJCW1fcERvY3VtZW50OworCitwcm90ZWN0ZWQ6CisKKyAgICBDUERGX1BhdHRlcm4oY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcFBhcmVudE1hdHJpeCkKKyAgICB7CisgICAgICAgIGlmIChwUGFyZW50TWF0cml4KSB7CisgICAgICAgICAgICBtX1BhcmVudE1hdHJpeCA9ICpwUGFyZW50TWF0cml4OworICAgICAgICB9CisgICAgfQorfTsKK2NsYXNzIENQREZfVGlsaW5nUGF0dGVybiA6IHB1YmxpYyBDUERGX1BhdHRlcm4KK3sKK3B1YmxpYzoKKworICAgIENQREZfVGlsaW5nUGF0dGVybihDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX09iamVjdCogcFBhdHRlcm5PYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBhcmVudE1hdHJpeCk7CisKKyAgICB2aXJ0dWFsIH5DUERGX1RpbGluZ1BhdHRlcm4oKTsKKworICAgIEZYX0JPT0wJCQkJTG9hZCgpOworCisKKworICAgIEZYX0JPT0wJCQkJbV9iQ29sb3JlZDsKKworICAgIENGWF9GbG9hdFJlY3QJCW1fQkJveDsKKworICAgIEZYX0ZMT0FUCQkJbV9YU3RlcDsKKworICAgIEZYX0ZMT0FUCQkJbV9ZU3RlcDsKKworCisKKyAgICBDUERGX0Zvcm0qCQkJbV9wRm9ybTsKK307CitjbGFzcyBDUERGX1NoYWRpbmdQYXR0ZXJuIDogcHVibGljIENQREZfUGF0dGVybgoreworcHVibGljOgorCisgICAgQ1BERl9TaGFkaW5nUGF0dGVybihDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX09iamVjdCogcFBhdHRlcm5PYmosIEZYX0JPT0wgYlNoYWRpbmcsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBhcmVudE1hdHJpeCk7CisKKyAgICB2aXJ0dWFsIH5DUERGX1NoYWRpbmdQYXR0ZXJuKCk7CisKKyAgICBDUERGX09iamVjdCoJCW1fcFNoYWRpbmdPYmo7CisKKyAgICBGWF9CT09MCQkJCW1fYlNoYWRpbmdPYmo7CisKKyAgICBGWF9CT09MCQkJCUxvYWQoKTsKKworICAgIEZYX0JPT0wJCQkJUmVsb2FkKCk7CisKKyAgICBpbnQJCQkJCW1fU2hhZGluZ1R5cGU7CisKKyAgICBDUERGX0NvbG9yU3BhY2UqCW1fcENTOworCisKKyAgICBDUERGX0Z1bmN0aW9uKgkJbV9wRnVuY3Rpb25zWzRdOworCisgICAgaW50CQkJCQltX25GdW5jczsKK3Byb3RlY3RlZDoKKyAgICB2b2lkCUNsZWFyKCk7Cit9Oworc3RydWN0IENQREZfTWVzaFZlcnRleCB7CisgICAgRlhfRkxPQVQgeCwgeTsKKyAgICBGWF9GTE9BVCByLCBnLCBiOworfTsKK2NsYXNzIENQREZfTWVzaFN0cmVhbSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBGWF9CT09MCQkJCUxvYWQoQ1BERl9TdHJlYW0qIHBTaGFkaW5nU3RyZWFtLCBDUERGX0Z1bmN0aW9uKiogcEZ1bmNzLCBpbnQgbkZ1bmNzLCBDUERGX0NvbG9yU3BhY2UqIHBDUyk7CisKKyAgICBGWF9EV09SRAkJCUdldEZsYWcoKTsKKworICAgIHZvaWQJCQkJR2V0Q29vcmRzKEZYX0ZMT0FUJiB4LCBGWF9GTE9BVCYgeSk7CisKKyAgICB2b2lkCQkJCUdldENvbG9yKEZYX0ZMT0FUJiByLCBGWF9GTE9BVCYgZywgRlhfRkxPQVQmIGIpOworCisgICAgRlhfRFdPUkQgCQkJR2V0VmVydGV4KENQREZfTWVzaFZlcnRleCYgdmVydGV4LCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkJpdG1hcCk7CisKKyAgICBGWF9CT09MCQkJCUdldFZlcnRleFJvdyhDUERGX01lc2hWZXJ0ZXgqIHZlcnRleCwgaW50IGNvdW50LCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkJpdG1hcCk7CisgICAgQ1BERl9GdW5jdGlvbioqCW1fcEZ1bmNzOworICAgIENQREZfQ29sb3JTcGFjZSoJbV9wQ1M7CisgICAgRlhfRFdPUkQJCQltX25GdW5jcywgbV9uQ29vcmRCaXRzLCBtX25Db21wQml0cywgbV9uRmxhZ0JpdHMsIG1fbkNvbXBzOworICAgIEZYX0RXT1JECQkJbV9Db29yZE1heCwgbV9Db21wTWF4OworICAgIEZYX0ZMT0FUCQkJbV94bWluLCBtX3htYXgsIG1feW1pbiwgbV95bWF4OworICAgIEZYX0ZMT0FUCQkJbV9Db2xvck1pbls4XSwgbV9Db2xvck1heFs4XTsKKyAgICBDUERGX1N0cmVhbUFjYwkJbV9TdHJlYW07CisgICAgQ0ZYX0JpdFN0cmVhbQkJbV9CaXRTdHJlYW07Cit9OworI2RlZmluZSBQREZfSU1BR0VfTk9fQ09NUFJFU1MJCQkJMHgwMDAwCisjZGVmaW5lIFBERl9JTUFHRV9MT1NTWV9DT01QUkVTUwkJCTB4MDAwMQorI2RlZmluZSBQREZfSU1BR0VfTE9TU0xFU1NfQ09NUFJFU1MJCQkweDAwMDIKKyNkZWZpbmUgUERGX0lNQUdFX01BU0tfTE9TU1lfQ09NUFJFU1MJCTB4MDAwNAorI2RlZmluZSBQREZfSU1BR0VfTUFTS19MT1NTTEVTU19DT01QUkVTUwkweDAwMDgKK2NsYXNzIENQREZfSW1hZ2VTZXRQYXJhbQoreworcHVibGljOgorICAgIENQREZfSW1hZ2VTZXRQYXJhbSgpCisgICAgICAgIDogcE1hdHRlQ29sb3IoTlVMTCkKKyAgICAgICAgLCBuUXVhbGl0eSg4MCkKKyAgICB7CisgICAgfQorICAgIEZYX0FSR0IqIHBNYXR0ZUNvbG9yOworICAgIEZYX0lOVDMyIG5RdWFsaXR5OworfTsKK2NsYXNzIENQREZfSW1hZ2UgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ1BERl9JbWFnZShDUERGX0RvY3VtZW50KiBwRG9jKTsKKworICAgIH5DUERGX0ltYWdlKCk7CisKKyAgICBGWF9CT09MCQkJCQlMb2FkSW1hZ2VGKENQREZfU3RyZWFtKiBwSW1hZ2VTdHJlYW0sIEZYX0JPT0wgYklubGluZSk7CisKKyAgICB2b2lkCQkJCQlSZWxlYXNlKCk7CisKKyAgICBDUERGX0ltYWdlKgkJCQlDbG9uZSgpOworCisgICAgRlhfQk9PTAkJCQkJSXNJbmxpbmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYklubGluZTsKKyAgICB9CisKKyAgICB2b2lkCQkJCQlTZXRJbmxpbmVEaWN0KENQREZfRGljdGlvbmFyeSogcERpY3QpCisgICAgeworICAgICAgICBtX3BJbmxpbmVEaWN0ID0gcERpY3Q7CisgICAgfQorCisgICAgQ1BERl9EaWN0aW9uYXJ5KgkJR2V0SW5saW5lRGljdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wSW5saW5lRGljdDsKKyAgICB9CisKKyAgICBDUERGX1N0cmVhbSoJCQlHZXRTdHJlYW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcFN0cmVhbTsKKyAgICB9CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCQlHZXREaWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BTdHJlYW0tPkdldERpY3QoKTsKKyAgICB9CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCQlHZXRPQygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wT0M7CisgICAgfQorCisgICAgQ1BERl9Eb2N1bWVudCoJCQlHZXREb2N1bWVudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wRG9jdW1lbnQ7CisgICAgfQorCisKKworICAgIEZYX0lOVDMyCQkJCUdldFBpeGVsSGVpZ2h0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0hlaWdodDsKKyAgICB9CisKKyAgICBGWF9JTlQzMgkJCQlHZXRQaXhlbFdpZHRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX1dpZHRoOworICAgIH0KKworCisgICAgRlhfQk9PTAkJCQkJSXNNYXNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JJc01hc2s7CisgICAgfQorCisgICAgRlhfQk9PTAkJCQkJSXNJbnRlcnBvbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9iSW50ZXJwb2xhdGU7CisgICAgfQorCisgICAgQ0ZYX0RJQlNvdXJjZSoJCQlMb2FkRElCU291cmNlKENGWF9ESUJTb3VyY2UqKiBwcE1hc2sgPSBOVUxMLCBGWF9EV09SRCogcE1hdHRlQ29sb3IgPSBOVUxMLCBGWF9CT09MIGJTdGRDUyA9IEZBTFNFLCBGWF9EV09SRCBHcm91cEZhbWlseSA9IDAsIEZYX0JPT0wgYkxvYWRNYXNrID0gRkFMU0UpIGNvbnN0OworCisKKworICAgIHZvaWQJCQkJCVNldEltYWdlKGNvbnN0IENGWF9ESUJpdG1hcCogcERJQml0bWFwLCBGWF9JTlQzMiBpQ29tcHJlc3MsIElGWF9GaWxlV3JpdGUgKnBGaWxlV3JpdGUgPSBOVUxMLCBJRlhfRmlsZVJlYWQgKnBGaWxlUmVhZCA9IE5VTEwsIGNvbnN0IENGWF9ESUJpdG1hcCogcE1hc2sgPSBOVUxMLCBjb25zdCBDUERGX0ltYWdlU2V0UGFyYW0qIHBQYXJhbSA9IE5VTEwpOworCisgICAgdm9pZAkJCQkJU2V0SnBlZ0ltYWdlKEZYX0JZVEUqIHBJbWFnZURhdGEsIEZYX0RXT1JEIHNpemUpOworCisgICAgdm9pZAkJCQkJU2V0SnBlZ0ltYWdlKElGWF9GaWxlUmVhZCAqcEZpbGUpOworCisgICAgdm9pZAkJCQkJUmVzZXRDYWNoZShDUERGX1BhZ2UqIHBQYWdlLCBjb25zdCBDRlhfRElCaXRtYXAqIHBESUJpdG1hcCk7CisKK3B1YmxpYzoKKyAgICBGWF9CT09MCQkJCQlTdGFydExvYWRESUJTb3VyY2UoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybVJlc291cmNlLCBDUERGX0RpY3Rpb25hcnkqIHBQYWdlUmVzb3VyY2UsIEZYX0JPT0wgYlN0ZENTID0gRkFMU0UsIEZYX0RXT1JEIEdyb3VwRmFtaWx5ID0gMCwgRlhfQk9PTCBiTG9hZE1hc2sgPSBGQUxTRSk7CisgICAgRlhfQk9PTAkJCQkJQ29udGludWUoSUZYX1BhdXNlKiBwUGF1c2UpOworICAgIENGWF9ESUJTb3VyY2UqCQkJRGV0YWNoQml0bWFwKCk7CisgICAgQ0ZYX0RJQlNvdXJjZSoJCQlEZXRhY2hNYXNrKCk7CisgICAgQ0ZYX0RJQlNvdXJjZSoJCQltX3BESUJTb3VyY2U7CisgICAgQ0ZYX0RJQlNvdXJjZSoJCQltX3BNYXNrOworICAgIEZYX0RXT1JECQkJCW1fTWF0dGVDb2xvcjsKK3ByaXZhdGU6CisKKyAgICBDUERGX1N0cmVhbSoJCQltX3BTdHJlYW07CisgICAgRlhfQk9PTAkJCQkJbV9iSW5saW5lOworICAgIENQREZfRGljdGlvbmFyeSoJCW1fcElubGluZURpY3Q7CisKKyAgICBGWF9JTlQzMgkJCQltX0hlaWdodDsKKworICAgIEZYX0lOVDMyCQkJCW1fV2lkdGg7CisKKyAgICBGWF9CT09MCQkJCQltX2JJc01hc2s7CisKKyAgICBGWF9CT09MCQkJCQltX2JJbnRlcnBvbGF0ZTsKKworICAgIENQREZfRG9jdW1lbnQqCQkJbV9wRG9jdW1lbnQ7CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCQltX3BPQzsKKyAgICBDUERGX0RpY3Rpb25hcnkqCUluaXRKUEVHKEZYX0xQQllURSBwRGF0YSwgRlhfRFdPUkQgc2l6ZSk7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3NlcmlhbC5oIGIvY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9zZXJpYWwuaAppbmRleCA5YjE2NDJlLi44N2VjN2I1IDEwMDY0NAotLS0gYS9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3NlcmlhbC5oCisrKyBiL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfc2VyaWFsLmgKQEAgLTEsMjAzICsxLDIwMyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlBERl9TRVJJQUxfDQotI2RlZmluZSBfRlBERl9TRVJJQUxfDQotI2lmbmRlZiBfRlBERl9QQUdFXw0KLSNpbmNsdWRlICJmcGRmX3BhZ2UuaCINCi0jZW5kaWYNCi0jaWZuZGVmIF9GUERGX1BBR0VPQkpfSF8NCi0jaW5jbHVkZSAiZnBkZl9wYWdlb2JqLmgiDQotI2VuZGlmDQotY2xhc3MgQ1BERl9PYmplY3RTdHJlYW07DQotY2xhc3MgQ1BERl9YUmVmU3RyZWFtOw0KLUNGWF9CeXRlVGV4dEJ1ZiYgb3BlcmF0b3IgPDwgKENGWF9CeXRlVGV4dEJ1ZiYgYnVmLCBjb25zdCBDUERGX09iamVjdCogcE9iaik7DQotY2xhc3MgQ1BERl9PYmpBcmNoaXZlU2F2ZXIgOiBwdWJsaWMgQ0ZYX0FyY2hpdmVTYXZlcg0KLXsNCi1wdWJsaWM6DQotDQotICAgIGZyaWVuZCBDUERGX09iakFyY2hpdmVTYXZlciYJb3BlcmF0b3IgPDwgKENQREZfT2JqQXJjaGl2ZVNhdmVyJiBhciwgY29uc3QgQ1BERl9PYmplY3QqIHBPYmopOw0KLXByb3RlY3RlZDoNCi0NCi0gICAgQ0ZYX01hcFB0clRvUHRyCQkJbV9PYmplY3RNYXA7DQotfTsNCi1jbGFzcyBDUERGX09iakFyY2hpdmVMb2FkZXIgOiBwdWJsaWMgQ0ZYX0FyY2hpdmVMb2FkZXINCi17DQotcHVibGljOg0KLQ0KLSAgICBDUERGX09iakFyY2hpdmVMb2FkZXIoRlhfTFBDQllURSBwRGF0YSwgRlhfRFdPUkQgZHdTaXplKSA6IENGWF9BcmNoaXZlTG9hZGVyKHBEYXRhLCBkd1NpemUpLA0KLSAgICAgICAgbV9JbmRpcmVjdE9iamVjdHMoTlVMTCkge30NCi0NCi0gICAgZnJpZW5kIENQREZfT2JqQXJjaGl2ZUxvYWRlciYJb3BlcmF0b3IgPj4gKENQREZfT2JqQXJjaGl2ZUxvYWRlciYgYXIsIENQREZfT2JqZWN0KiYgcE9iaik7DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBDUERGX0luZGlyZWN0T2JqZWN0cwkJbV9JbmRpcmVjdE9iamVjdHM7DQotfTsNCi1jbGFzcyBDUERGX1BhZ2VBcmNoaXZlU2F2ZXIgOiBwdWJsaWMgQ1BERl9PYmpBcmNoaXZlU2F2ZXINCi17DQotcHVibGljOg0KLQ0KLSAgICBDUERGX1BhZ2VBcmNoaXZlU2F2ZXIoQ1BERl9QYWdlT2JqZWN0cyogcFBhZ2VPYmpzKTsNCi0NCi0gICAgZnJpZW5kIENQREZfUGFnZUFyY2hpdmVTYXZlciYJb3BlcmF0b3IgPDwgKENQREZfUGFnZUFyY2hpdmVTYXZlciYgYXIsIENQREZfUGFnZU9iamVjdCogcE9iaik7DQotDQotDQotDQotICAgIGZyaWVuZCBDUERGX1BhZ2VBcmNoaXZlU2F2ZXImCW9wZXJhdG9yIDw8IChDUERGX1BhZ2VBcmNoaXZlU2F2ZXImIGFyLCBDUERGX0NsaXBQYXRoIGNsaXBfcGF0aCk7DQotDQotICAgIGZyaWVuZCBDUERGX1BhZ2VBcmNoaXZlU2F2ZXImCW9wZXJhdG9yIDw8IChDUERGX1BhZ2VBcmNoaXZlU2F2ZXImIGFyLCBDUERGX0dyYXBoU3RhdGUgZ3JhcGhfc3RhdGUpOw0KLQ0KLSAgICBmcmllbmQgQ1BERl9QYWdlQXJjaGl2ZVNhdmVyJglvcGVyYXRvciA8PCAoQ1BERl9QYWdlQXJjaGl2ZVNhdmVyJiBhciwgQ1BERl9UZXh0U3RhdGUgdGV4dF9zdGF0ZSk7DQotDQotICAgIGZyaWVuZCBDUERGX1BhZ2VBcmNoaXZlU2F2ZXImCW9wZXJhdG9yIDw8IChDUERGX1BhZ2VBcmNoaXZlU2F2ZXImIGFyLCBDUERGX0NvbG9yU3RhdGUgY29sb3Jfc3RhdGUpOw0KLQ0KLSAgICBmcmllbmQgQ1BERl9QYWdlQXJjaGl2ZVNhdmVyJglvcGVyYXRvciA8PCAoQ1BERl9QYWdlQXJjaGl2ZVNhdmVyJiBhciwgQ1BERl9HZW5lcmFsU3RhdGUgZ2VuZXJhbF9zdGF0ZSk7DQotDQotcHJvdGVjdGVkOg0KLQ0KLSAgICBDUERGX0NsaXBQYXRoCQltX0xhc3RDbGlwUGF0aDsNCi0NCi0gICAgQ1BERl9HcmFwaFN0YXRlCQltX0xhc3RHcmFwaFN0YXRlOw0KLQ0KLSAgICBDUERGX0NvbG9yU3RhdGUJCW1fTGFzdENvbG9yU3RhdGU7DQotDQotICAgIENQREZfVGV4dFN0YXRlCQltX0xhc3RUZXh0U3RhdGU7DQotDQotICAgIENQREZfR2VuZXJhbFN0YXRlCW1fTGFzdEdlbmVyYWxTdGF0ZTsNCi0NCi0gICAgQ1BERl9QYWdlT2JqZWN0cyoJbV9wQ3VyUGFnZTsNCi19Ow0KLWNsYXNzIENQREZfUGFnZUFyY2hpdmVMb2FkZXIgOiBwdWJsaWMgQ1BERl9PYmpBcmNoaXZlTG9hZGVyDQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9QYWdlQXJjaGl2ZUxvYWRlcihDUERGX1BhZ2VPYmplY3RzKiBwUGFnZU9ianMsIEZYX0xQQ0JZVEUgcERhdGEsIEZYX0RXT1JEIGR3U2l6ZSk7DQotDQotICAgIGZyaWVuZCBDUERGX1BhZ2VBcmNoaXZlTG9hZGVyJglvcGVyYXRvciA+PiAoQ1BERl9QYWdlQXJjaGl2ZUxvYWRlciYgYXIsIENQREZfUGFnZU9iamVjdComIHBPYmopOw0KLQ0KLQ0KLQ0KLSAgICBmcmllbmQgQ1BERl9QYWdlQXJjaGl2ZUxvYWRlciYJb3BlcmF0b3IgPj4gKENQREZfUGFnZUFyY2hpdmVMb2FkZXImIGFyLCBDUERGX0NsaXBQYXRoJiBjbGlwX3BhdGgpOw0KLQ0KLSAgICBmcmllbmQgQ1BERl9QYWdlQXJjaGl2ZUxvYWRlciYJb3BlcmF0b3IgPj4gKENQREZfUGFnZUFyY2hpdmVMb2FkZXImIGFyLCBDUERGX0dyYXBoU3RhdGUmIGdyYXBoX3N0YXRlKTsNCi0NCi0gICAgZnJpZW5kIENQREZfUGFnZUFyY2hpdmVMb2FkZXImCW9wZXJhdG9yID4+IChDUERGX1BhZ2VBcmNoaXZlTG9hZGVyJiBhciwgQ1BERl9UZXh0U3RhdGUmIHRleHRfc3RhdGUpOw0KLQ0KLSAgICBmcmllbmQgQ1BERl9QYWdlQXJjaGl2ZUxvYWRlciYJb3BlcmF0b3IgPj4gKENQREZfUGFnZUFyY2hpdmVMb2FkZXImIGFyLCBDUERGX0NvbG9yU3RhdGUmIGNvbG9yX3N0YXRlKTsNCi0NCi0gICAgZnJpZW5kIENQREZfUGFnZUFyY2hpdmVMb2FkZXImCW9wZXJhdG9yID4+IChDUERGX1BhZ2VBcmNoaXZlTG9hZGVyJiBhciwgQ1BERl9HZW5lcmFsU3RhdGUmIGdlbmVyYWxfc3RhdGUpOw0KLQ0KLXByb3RlY3RlZDoNCi0gICAgdm9pZAkJCQlQb3N0UHJvY0NvbG9yKENQREZfQ29sb3ImIGNvbG9yKTsNCi0NCi0gICAgQ1BERl9PYmplY3QqCQlBZGRSZXNvdXJjZShDUERGX09iamVjdCogcFNyY09iaiwgRlhfTFBDU1RSIHR5cGUpOw0KLQ0KLSAgICBDUERGX0NsaXBQYXRoCQltX0xhc3RDbGlwUGF0aDsNCi0NCi0gICAgQ1BERl9HcmFwaFN0YXRlCQltX0xhc3RHcmFwaFN0YXRlOw0KLQ0KLSAgICBDUERGX0NvbG9yU3RhdGUJCW1fTGFzdENvbG9yU3RhdGU7DQotDQotICAgIENQREZfVGV4dFN0YXRlCQltX0xhc3RUZXh0U3RhdGU7DQotDQotICAgIENQREZfR2VuZXJhbFN0YXRlCW1fTGFzdEdlbmVyYWxTdGF0ZTsNCi0NCi0gICAgQ1BERl9QYWdlT2JqZWN0cyoJbV9wQ3VyUGFnZTsNCi0NCi0gICAgQ0ZYX01hcFB0clRvUHRyCQltX09iamVjdE1hcDsNCi19Ow0KLSNkZWZpbmUgRlBERkNSRUFURV9JTkNSRU1FTlRBTAkJMQ0KLSNkZWZpbmUgRlBERkNSRUFURV9OT19PUklHSU5BTAkJMg0KLSNkZWZpbmUgRlBERkNSRUFURV9QUk9HUkVTU0lWRQkJNA0KLSNkZWZpbmUgRlBERkNSRUFURV9PQkpFQ1RTVFJFQU0JCTgNCi1jbGFzcyBDUERGX0NyZWF0b3IgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfQ3JlYXRvcihDUERGX0RvY3VtZW50KiBwRG9jKTsNCi0NCi0gICAgfkNQREZfQ3JlYXRvcigpOw0KLQ0KLSAgICBGWF9CT09MCQkJCUNyZWF0ZShGWF9MUENXU1RSIGZpbGVuYW1lLCBGWF9EV09SRCBmbGFncyA9IDApOw0KLQ0KLSAgICBGWF9CT09MCQkJCUNyZWF0ZShGWF9MUENTVFIgZmlsZW5hbWUsIEZYX0RXT1JEIGZsYWdzID0gMCk7DQotDQotICAgIEZYX0JPT0wJCQkJQ3JlYXRlKElGWF9TdHJlYW1Xcml0ZSogcEZpbGUsIEZYX0RXT1JEIGZsYWdzID0gMCk7DQotDQotICAgIEZYX0lOVDMyCQkJQ29udGludWUoSUZYX1BhdXNlICpwUGF1c2UgPSBOVUxMKTsNCi0NCi0gICAgRlhfQk9PTAkJCQlTZXRGaWxlVmVyc2lvbihGWF9JTlQzMiBmaWxlVmVyc2lvbiA9IDE3KTsNCi1wcm90ZWN0ZWQ6DQotDQotICAgIENQREZfRG9jdW1lbnQqCQltX3BEb2N1bWVudDsNCi0NCi0gICAgQ1BERl9QYXJzZXIqCQltX3BQYXJzZXI7DQotDQotICAgIEZYX0JPT0wJCQkJbV9iQ29tcHJlc3M7DQotDQotICAgIEZYX0JPT0wJCQkJbV9iU2VjdXJpdHlDaGFuZ2VkOw0KLQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqCW1fcEVuY3J5cHREaWN0Ow0KLSAgICBGWF9EV09SRAkJCW1fZHdFbnJ5cHRPYmpOdW07DQotICAgIEZYX0JPT0wJCQkJbV9iRW5jcnlwdENsb25lZDsNCi0NCi0gICAgRlhfQk9PTAkJCQltX2JTdGFuZGFyZFNlY3VyaXR5Ow0KLQ0KLSAgICBDUERGX0NyeXB0b0hhbmRsZXIqCW1fcENyeXB0b0hhbmRsZXI7DQotICAgIEZYX0JPT0wJCQkJbV9iTmV3Q3J5cHRvOw0KLQ0KLSAgICBGWF9CT09MCQkJCW1fYkVuY3J5cHRNZXRhZGF0YTsNCi0NCi0gICAgQ1BERl9PYmplY3QqCQltX3BNZXRhZGF0YTsNCi0NCi0gICAgQ1BERl9YUmVmU3RyZWFtKgltX3BYUmVmU3RyZWFtOw0KLQ0KLSAgICBGWF9JTlQzMgkJCW1fT2JqZWN0U3RyZWFtU2l6ZTsNCi0NCi0gICAgRlhfRFdPUkQJCQltX2R3TGFzdE9iak51bTsNCi0gICAgRlhfQk9PTAkJCQlDcmVhdGUoRlhfRFdPUkQgZmxhZ3MpOw0KLSAgICB2b2lkCQkJCVJlc2V0U3RhbmRhcmRTZWN1cml0eSgpOw0KLSAgICB2b2lkCQkJCUNsZWFyKCk7DQotICAgIEZYX0lOVDMyCQkJV3JpdGVEb2NfU3RhZ2UxKElGWF9QYXVzZSAqcFBhdXNlKTsNCi0gICAgRlhfSU5UMzIJCQlXcml0ZURvY19TdGFnZTIoSUZYX1BhdXNlICpwUGF1c2UpOw0KLSAgICBGWF9JTlQzMgkJCVdyaXRlRG9jX1N0YWdlMyhJRlhfUGF1c2UgKnBQYXVzZSk7DQotICAgIEZYX0lOVDMyCQkJV3JpdGVEb2NfU3RhZ2U0KElGWF9QYXVzZSAqcFBhdXNlKTsNCi0NCi0gICAgQ0ZYX0ZpbGVCdWZmZXJBcmNoaXZlCW1fRmlsZTsNCi0NCi0gICAgRlhfRklMRVNJWkUJCQltX09mZnNldDsNCi0gICAgdm9pZAkJCQlJbml0T2xkT2JqTnVtT2Zmc2V0cygpOw0KLSAgICB2b2lkCQkJCUluaXROZXdPYmpOdW1PZmZzZXRzKCk7DQotICAgIHZvaWQJCQkJQXBwZW5kTmV3T2JqTnVtKEZYX0RXT1JEIG9iamJ1bSk7DQotICAgIEZYX0lOVDMyCQkJV3JpdGVPbGRJbmRpcmVjdE9iamVjdChGWF9EV09SRCBvYmpudW0pOw0KLSAgICBGWF9JTlQzMgkJCVdyaXRlT2xkT2JqcyhJRlhfUGF1c2UgKnBQYXVzZSk7DQotICAgIEZYX0lOVDMyCQkJV3JpdGVOZXdPYmpzKEZYX0JPT0wgYkluY3JlbWVudGFsLCBJRlhfUGF1c2UgKnBQYXVzZSk7DQotICAgIEZYX0lOVDMyCQkJV3JpdGVJbmRpcmVjdE9iaihjb25zdCBDUERGX09iamVjdCogcE9iaik7DQotICAgIEZYX0lOVDMyCQkJV3JpdGVEaXJlY3RPYmooRlhfRFdPUkQgb2JqbnVtLCBjb25zdCBDUERGX09iamVjdCogcE9iaiwgRlhfQk9PTCBiRW5jcnlwdCA9IFRSVUUpOw0KLSAgICBGWF9JTlQzMgkJCVdyaXRlSW5kaXJlY3RPYmplY3RUb1N0cmVhbShjb25zdCBDUERGX09iamVjdCogcE9iaik7DQotICAgIEZYX0lOVDMyCQkJV3JpdGVJbmRpcmVjdE9iaihGWF9EV09SRCBvYmpudW0sIGNvbnN0IENQREZfT2JqZWN0KiBwT2JqKTsNCi0gICAgRlhfSU5UMzIJCQlXcml0ZUluZGlyZWN0T2JqZWN0VG9TdHJlYW0oRlhfRFdPUkQgb2JqbnVtLCBGWF9MUENCWVRFIHBCdWZmZXIsIEZYX0RXT1JEIGR3U2l6ZSk7DQotICAgIEZYX0lOVDMyCQkJQXBwZW5kT2JqZWN0TnVtYmVyVG9YUmVmKEZYX0RXT1JEIG9iam51bSk7DQotICAgIHZvaWQJCQkJSW5pdElEKEZYX0JPT0wgYkRlZmF1bHQgPSBUUlVFKTsNCi0gICAgRlhfSU5UMzIJCQlXcml0ZVN0cmVhbShjb25zdCBDUERGX09iamVjdCogcFN0cmVhbSwgRlhfRFdPUkQgb2JqbnVtLCBDUERGX0NyeXB0b0hhbmRsZXIqIHBDcnlwdG8pOw0KLQ0KLSAgICBGWF9JTlQzMgkJCW1faVN0YWdlOw0KLSAgICBGWF9EV09SRAkJCW1fZHdGbGFnczsNCi0gICAgRlhfUE9TSVRJT04JCQltX1BvczsNCi0gICAgRlhfRklMRVNJWkUJCQltX1hyZWZTdGFydDsNCi0NCi0gICAgQ0ZYX0ZpbGVTaXplTGlzdEFycmF5CW1fT2JqZWN0T2Zmc2V0Ow0KLQ0KLSAgICBDRlhfRFdvcmRMaXN0QXJyYXkJCW1fT2JqZWN0U2l6ZTsNCi0gICAgQ0ZYX0RXb3JkQXJyYXkJCW1fTmV3T2JqTnVtQXJyYXk7DQotDQotICAgIENQREZfQXJyYXkqCQkJbV9wSURBcnJheTsNCi0NCi0gICAgRlhfSU5UMzIJCQltX0ZpbGVWZXJzaW9uOw0KLSAgICBmcmllbmQgY2xhc3MgQ1BERl9PYmplY3RTdHJlYW07DQotICAgIGZyaWVuZCBjbGFzcyBDUERGX1hSZWZTdHJlYW07DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9GUERGX1NFUklBTF8KKyNkZWZpbmUgX0ZQREZfU0VSSUFMXworI2lmbmRlZiBfRlBERl9QQUdFXworI2luY2x1ZGUgImZwZGZfcGFnZS5oIgorI2VuZGlmCisjaWZuZGVmIF9GUERGX1BBR0VPQkpfSF8KKyNpbmNsdWRlICJmcGRmX3BhZ2VvYmouaCIKKyNlbmRpZgorY2xhc3MgQ1BERl9PYmplY3RTdHJlYW07CitjbGFzcyBDUERGX1hSZWZTdHJlYW07CitDRlhfQnl0ZVRleHRCdWYmIG9wZXJhdG9yIDw8IChDRlhfQnl0ZVRleHRCdWYmIGJ1ZiwgY29uc3QgQ1BERl9PYmplY3QqIHBPYmopOworY2xhc3MgQ1BERl9PYmpBcmNoaXZlU2F2ZXIgOiBwdWJsaWMgQ0ZYX0FyY2hpdmVTYXZlcgoreworcHVibGljOgorCisgICAgZnJpZW5kIENQREZfT2JqQXJjaGl2ZVNhdmVyJglvcGVyYXRvciA8PCAoQ1BERl9PYmpBcmNoaXZlU2F2ZXImIGFyLCBjb25zdCBDUERGX09iamVjdCogcE9iaik7Citwcm90ZWN0ZWQ6CisKKyAgICBDRlhfTWFwUHRyVG9QdHIJCQltX09iamVjdE1hcDsKK307CitjbGFzcyBDUERGX09iakFyY2hpdmVMb2FkZXIgOiBwdWJsaWMgQ0ZYX0FyY2hpdmVMb2FkZXIKK3sKK3B1YmxpYzoKKworICAgIENQREZfT2JqQXJjaGl2ZUxvYWRlcihGWF9MUENCWVRFIHBEYXRhLCBGWF9EV09SRCBkd1NpemUpIDogQ0ZYX0FyY2hpdmVMb2FkZXIocERhdGEsIGR3U2l6ZSksCisgICAgICAgIG1fSW5kaXJlY3RPYmplY3RzKE5VTEwpIHt9CisKKyAgICBmcmllbmQgQ1BERl9PYmpBcmNoaXZlTG9hZGVyJglvcGVyYXRvciA+PiAoQ1BERl9PYmpBcmNoaXZlTG9hZGVyJiBhciwgQ1BERl9PYmplY3QqJiBwT2JqKTsKK3Byb3RlY3RlZDoKKworICAgIENQREZfSW5kaXJlY3RPYmplY3RzCQltX0luZGlyZWN0T2JqZWN0czsKK307CitjbGFzcyBDUERGX1BhZ2VBcmNoaXZlU2F2ZXIgOiBwdWJsaWMgQ1BERl9PYmpBcmNoaXZlU2F2ZXIKK3sKK3B1YmxpYzoKKworICAgIENQREZfUGFnZUFyY2hpdmVTYXZlcihDUERGX1BhZ2VPYmplY3RzKiBwUGFnZU9ianMpOworCisgICAgZnJpZW5kIENQREZfUGFnZUFyY2hpdmVTYXZlciYJb3BlcmF0b3IgPDwgKENQREZfUGFnZUFyY2hpdmVTYXZlciYgYXIsIENQREZfUGFnZU9iamVjdCogcE9iaik7CisKKworCisgICAgZnJpZW5kIENQREZfUGFnZUFyY2hpdmVTYXZlciYJb3BlcmF0b3IgPDwgKENQREZfUGFnZUFyY2hpdmVTYXZlciYgYXIsIENQREZfQ2xpcFBhdGggY2xpcF9wYXRoKTsKKworICAgIGZyaWVuZCBDUERGX1BhZ2VBcmNoaXZlU2F2ZXImCW9wZXJhdG9yIDw8IChDUERGX1BhZ2VBcmNoaXZlU2F2ZXImIGFyLCBDUERGX0dyYXBoU3RhdGUgZ3JhcGhfc3RhdGUpOworCisgICAgZnJpZW5kIENQREZfUGFnZUFyY2hpdmVTYXZlciYJb3BlcmF0b3IgPDwgKENQREZfUGFnZUFyY2hpdmVTYXZlciYgYXIsIENQREZfVGV4dFN0YXRlIHRleHRfc3RhdGUpOworCisgICAgZnJpZW5kIENQREZfUGFnZUFyY2hpdmVTYXZlciYJb3BlcmF0b3IgPDwgKENQREZfUGFnZUFyY2hpdmVTYXZlciYgYXIsIENQREZfQ29sb3JTdGF0ZSBjb2xvcl9zdGF0ZSk7CisKKyAgICBmcmllbmQgQ1BERl9QYWdlQXJjaGl2ZVNhdmVyJglvcGVyYXRvciA8PCAoQ1BERl9QYWdlQXJjaGl2ZVNhdmVyJiBhciwgQ1BERl9HZW5lcmFsU3RhdGUgZ2VuZXJhbF9zdGF0ZSk7CisKK3Byb3RlY3RlZDoKKworICAgIENQREZfQ2xpcFBhdGgJCW1fTGFzdENsaXBQYXRoOworCisgICAgQ1BERl9HcmFwaFN0YXRlCQltX0xhc3RHcmFwaFN0YXRlOworCisgICAgQ1BERl9Db2xvclN0YXRlCQltX0xhc3RDb2xvclN0YXRlOworCisgICAgQ1BERl9UZXh0U3RhdGUJCW1fTGFzdFRleHRTdGF0ZTsKKworICAgIENQREZfR2VuZXJhbFN0YXRlCW1fTGFzdEdlbmVyYWxTdGF0ZTsKKworICAgIENQREZfUGFnZU9iamVjdHMqCW1fcEN1clBhZ2U7Cit9OworY2xhc3MgQ1BERl9QYWdlQXJjaGl2ZUxvYWRlciA6IHB1YmxpYyBDUERGX09iakFyY2hpdmVMb2FkZXIKK3sKK3B1YmxpYzoKKworICAgIENQREZfUGFnZUFyY2hpdmVMb2FkZXIoQ1BERl9QYWdlT2JqZWN0cyogcFBhZ2VPYmpzLCBGWF9MUENCWVRFIHBEYXRhLCBGWF9EV09SRCBkd1NpemUpOworCisgICAgZnJpZW5kIENQREZfUGFnZUFyY2hpdmVMb2FkZXImCW9wZXJhdG9yID4+IChDUERGX1BhZ2VBcmNoaXZlTG9hZGVyJiBhciwgQ1BERl9QYWdlT2JqZWN0KiYgcE9iaik7CisKKworCisgICAgZnJpZW5kIENQREZfUGFnZUFyY2hpdmVMb2FkZXImCW9wZXJhdG9yID4+IChDUERGX1BhZ2VBcmNoaXZlTG9hZGVyJiBhciwgQ1BERl9DbGlwUGF0aCYgY2xpcF9wYXRoKTsKKworICAgIGZyaWVuZCBDUERGX1BhZ2VBcmNoaXZlTG9hZGVyJglvcGVyYXRvciA+PiAoQ1BERl9QYWdlQXJjaGl2ZUxvYWRlciYgYXIsIENQREZfR3JhcGhTdGF0ZSYgZ3JhcGhfc3RhdGUpOworCisgICAgZnJpZW5kIENQREZfUGFnZUFyY2hpdmVMb2FkZXImCW9wZXJhdG9yID4+IChDUERGX1BhZ2VBcmNoaXZlTG9hZGVyJiBhciwgQ1BERl9UZXh0U3RhdGUmIHRleHRfc3RhdGUpOworCisgICAgZnJpZW5kIENQREZfUGFnZUFyY2hpdmVMb2FkZXImCW9wZXJhdG9yID4+IChDUERGX1BhZ2VBcmNoaXZlTG9hZGVyJiBhciwgQ1BERl9Db2xvclN0YXRlJiBjb2xvcl9zdGF0ZSk7CisKKyAgICBmcmllbmQgQ1BERl9QYWdlQXJjaGl2ZUxvYWRlciYJb3BlcmF0b3IgPj4gKENQREZfUGFnZUFyY2hpdmVMb2FkZXImIGFyLCBDUERGX0dlbmVyYWxTdGF0ZSYgZ2VuZXJhbF9zdGF0ZSk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkCQkJCVBvc3RQcm9jQ29sb3IoQ1BERl9Db2xvciYgY29sb3IpOworCisgICAgQ1BERl9PYmplY3QqCQlBZGRSZXNvdXJjZShDUERGX09iamVjdCogcFNyY09iaiwgRlhfTFBDU1RSIHR5cGUpOworCisgICAgQ1BERl9DbGlwUGF0aAkJbV9MYXN0Q2xpcFBhdGg7CisKKyAgICBDUERGX0dyYXBoU3RhdGUJCW1fTGFzdEdyYXBoU3RhdGU7CisKKyAgICBDUERGX0NvbG9yU3RhdGUJCW1fTGFzdENvbG9yU3RhdGU7CisKKyAgICBDUERGX1RleHRTdGF0ZQkJbV9MYXN0VGV4dFN0YXRlOworCisgICAgQ1BERl9HZW5lcmFsU3RhdGUJbV9MYXN0R2VuZXJhbFN0YXRlOworCisgICAgQ1BERl9QYWdlT2JqZWN0cyoJbV9wQ3VyUGFnZTsKKworICAgIENGWF9NYXBQdHJUb1B0cgkJbV9PYmplY3RNYXA7Cit9OworI2RlZmluZSBGUERGQ1JFQVRFX0lOQ1JFTUVOVEFMCQkxCisjZGVmaW5lIEZQREZDUkVBVEVfTk9fT1JJR0lOQUwJCTIKKyNkZWZpbmUgRlBERkNSRUFURV9QUk9HUkVTU0lWRQkJNAorI2RlZmluZSBGUERGQ1JFQVRFX09CSkVDVFNUUkVBTQkJOAorY2xhc3MgQ1BERl9DcmVhdG9yIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENQREZfQ3JlYXRvcihDUERGX0RvY3VtZW50KiBwRG9jKTsKKworICAgIH5DUERGX0NyZWF0b3IoKTsKKworICAgIEZYX0JPT0wJCQkJQ3JlYXRlKEZYX0xQQ1dTVFIgZmlsZW5hbWUsIEZYX0RXT1JEIGZsYWdzID0gMCk7CisKKyAgICBGWF9CT09MCQkJCUNyZWF0ZShGWF9MUENTVFIgZmlsZW5hbWUsIEZYX0RXT1JEIGZsYWdzID0gMCk7CisKKyAgICBGWF9CT09MCQkJCUNyZWF0ZShJRlhfU3RyZWFtV3JpdGUqIHBGaWxlLCBGWF9EV09SRCBmbGFncyA9IDApOworCisgICAgRlhfSU5UMzIJCQlDb250aW51ZShJRlhfUGF1c2UgKnBQYXVzZSA9IE5VTEwpOworCisgICAgRlhfQk9PTAkJCQlTZXRGaWxlVmVyc2lvbihGWF9JTlQzMiBmaWxlVmVyc2lvbiA9IDE3KTsKK3Byb3RlY3RlZDoKKworICAgIENQREZfRG9jdW1lbnQqCQltX3BEb2N1bWVudDsKKworICAgIENQREZfUGFyc2VyKgkJbV9wUGFyc2VyOworCisgICAgRlhfQk9PTAkJCQltX2JDb21wcmVzczsKKworICAgIEZYX0JPT0wJCQkJbV9iU2VjdXJpdHlDaGFuZ2VkOworCisgICAgQ1BERl9EaWN0aW9uYXJ5KgltX3BFbmNyeXB0RGljdDsKKyAgICBGWF9EV09SRAkJCW1fZHdFbnJ5cHRPYmpOdW07CisgICAgRlhfQk9PTAkJCQltX2JFbmNyeXB0Q2xvbmVkOworCisgICAgRlhfQk9PTAkJCQltX2JTdGFuZGFyZFNlY3VyaXR5OworCisgICAgQ1BERl9DcnlwdG9IYW5kbGVyKgltX3BDcnlwdG9IYW5kbGVyOworICAgIEZYX0JPT0wJCQkJbV9iTmV3Q3J5cHRvOworCisgICAgRlhfQk9PTAkJCQltX2JFbmNyeXB0TWV0YWRhdGE7CisKKyAgICBDUERGX09iamVjdCoJCW1fcE1ldGFkYXRhOworCisgICAgQ1BERl9YUmVmU3RyZWFtKgltX3BYUmVmU3RyZWFtOworCisgICAgRlhfSU5UMzIJCQltX09iamVjdFN0cmVhbVNpemU7CisKKyAgICBGWF9EV09SRAkJCW1fZHdMYXN0T2JqTnVtOworICAgIEZYX0JPT0wJCQkJQ3JlYXRlKEZYX0RXT1JEIGZsYWdzKTsKKyAgICB2b2lkCQkJCVJlc2V0U3RhbmRhcmRTZWN1cml0eSgpOworICAgIHZvaWQJCQkJQ2xlYXIoKTsKKyAgICBGWF9JTlQzMgkJCVdyaXRlRG9jX1N0YWdlMShJRlhfUGF1c2UgKnBQYXVzZSk7CisgICAgRlhfSU5UMzIJCQlXcml0ZURvY19TdGFnZTIoSUZYX1BhdXNlICpwUGF1c2UpOworICAgIEZYX0lOVDMyCQkJV3JpdGVEb2NfU3RhZ2UzKElGWF9QYXVzZSAqcFBhdXNlKTsKKyAgICBGWF9JTlQzMgkJCVdyaXRlRG9jX1N0YWdlNChJRlhfUGF1c2UgKnBQYXVzZSk7CisKKyAgICBDRlhfRmlsZUJ1ZmZlckFyY2hpdmUJbV9GaWxlOworCisgICAgRlhfRklMRVNJWkUJCQltX09mZnNldDsKKyAgICB2b2lkCQkJCUluaXRPbGRPYmpOdW1PZmZzZXRzKCk7CisgICAgdm9pZAkJCQlJbml0TmV3T2JqTnVtT2Zmc2V0cygpOworICAgIHZvaWQJCQkJQXBwZW5kTmV3T2JqTnVtKEZYX0RXT1JEIG9iamJ1bSk7CisgICAgRlhfSU5UMzIJCQlXcml0ZU9sZEluZGlyZWN0T2JqZWN0KEZYX0RXT1JEIG9iam51bSk7CisgICAgRlhfSU5UMzIJCQlXcml0ZU9sZE9ianMoSUZYX1BhdXNlICpwUGF1c2UpOworICAgIEZYX0lOVDMyCQkJV3JpdGVOZXdPYmpzKEZYX0JPT0wgYkluY3JlbWVudGFsLCBJRlhfUGF1c2UgKnBQYXVzZSk7CisgICAgRlhfSU5UMzIJCQlXcml0ZUluZGlyZWN0T2JqKGNvbnN0IENQREZfT2JqZWN0KiBwT2JqKTsKKyAgICBGWF9JTlQzMgkJCVdyaXRlRGlyZWN0T2JqKEZYX0RXT1JEIG9iam51bSwgY29uc3QgQ1BERl9PYmplY3QqIHBPYmosIEZYX0JPT0wgYkVuY3J5cHQgPSBUUlVFKTsKKyAgICBGWF9JTlQzMgkJCVdyaXRlSW5kaXJlY3RPYmplY3RUb1N0cmVhbShjb25zdCBDUERGX09iamVjdCogcE9iaik7CisgICAgRlhfSU5UMzIJCQlXcml0ZUluZGlyZWN0T2JqKEZYX0RXT1JEIG9iam51bSwgY29uc3QgQ1BERl9PYmplY3QqIHBPYmopOworICAgIEZYX0lOVDMyCQkJV3JpdGVJbmRpcmVjdE9iamVjdFRvU3RyZWFtKEZYX0RXT1JEIG9iam51bSwgRlhfTFBDQllURSBwQnVmZmVyLCBGWF9EV09SRCBkd1NpemUpOworICAgIEZYX0lOVDMyCQkJQXBwZW5kT2JqZWN0TnVtYmVyVG9YUmVmKEZYX0RXT1JEIG9iam51bSk7CisgICAgdm9pZAkJCQlJbml0SUQoRlhfQk9PTCBiRGVmYXVsdCA9IFRSVUUpOworICAgIEZYX0lOVDMyCQkJV3JpdGVTdHJlYW0oY29uc3QgQ1BERl9PYmplY3QqIHBTdHJlYW0sIEZYX0RXT1JEIG9iam51bSwgQ1BERl9DcnlwdG9IYW5kbGVyKiBwQ3J5cHRvKTsKKworICAgIEZYX0lOVDMyCQkJbV9pU3RhZ2U7CisgICAgRlhfRFdPUkQJCQltX2R3RmxhZ3M7CisgICAgRlhfUE9TSVRJT04JCQltX1BvczsKKyAgICBGWF9GSUxFU0laRQkJCW1fWHJlZlN0YXJ0OworCisgICAgQ0ZYX0ZpbGVTaXplTGlzdEFycmF5CW1fT2JqZWN0T2Zmc2V0OworCisgICAgQ0ZYX0RXb3JkTGlzdEFycmF5CQltX09iamVjdFNpemU7CisgICAgQ0ZYX0RXb3JkQXJyYXkJCW1fTmV3T2JqTnVtQXJyYXk7CisKKyAgICBDUERGX0FycmF5KgkJCW1fcElEQXJyYXk7CisKKyAgICBGWF9JTlQzMgkJCW1fRmlsZVZlcnNpb247CisgICAgZnJpZW5kIGNsYXNzIENQREZfT2JqZWN0U3RyZWFtOworICAgIGZyaWVuZCBjbGFzcyBDUERGX1hSZWZTdHJlYW07Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmYXBpLmggYi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmYXBpLmgKaW5kZXggZTlmYzUyOC4uOTQwNzczNSAxMDA2NDQKLS0tIGEvY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZmFwaS5oCisrKyBiL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZhcGkuaApAQCAtMSwxNSArMSwxNSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlBERkFQSV9IXw0KLSNkZWZpbmUgX0ZQREZBUElfSF8NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGNydC9meF9iYXNpYy5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2UuaCINCi0jaW5jbHVkZSAiZnBkZl9tb2R1bGUuaCINCi0jaW5jbHVkZSAiZnBkZl9wYWdlb2JqLmgiDQotI2luY2x1ZGUgImZwZGZfcmVuZGVyLmgiDQotI2luY2x1ZGUgImZwZGZfc2VyaWFsLmgiDQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlBERkFQSV9IXworI2RlZmluZSBfRlBERkFQSV9IXworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfYmFzaWMuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2UuaCIKKyNpbmNsdWRlICJmcGRmX21vZHVsZS5oIgorI2luY2x1ZGUgImZwZGZfcGFnZW9iai5oIgorI2luY2x1ZGUgImZwZGZfcmVuZGVyLmgiCisjaW5jbHVkZSAiZnBkZl9zZXJpYWwuaCIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9pbmNsdWRlL2ZwZGZkb2MvZnBkZl9hcC5oIGIvY29yZS9pbmNsdWRlL2ZwZGZkb2MvZnBkZl9hcC5oCmluZGV4IDRiNmEzNzEuLmMyMjk5ZmMgMTAwNjQ0Ci0tLSBhL2NvcmUvaW5jbHVkZS9mcGRmZG9jL2ZwZGZfYXAuaAorKysgYi9jb3JlL2luY2x1ZGUvZnBkZmRvYy9mcGRmX2FwLmgKQEAgLTEsOTIgKzEsOTIgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNkZWZpbmUgX0ZQREZfQVBfSF8NCi0jaW5jbHVkZSAiLi4vZnhjcnQvZnhfYmFzaWMuaCINCi0jaW5jbHVkZSAiLi4vZnBkZmFwaS9mcGRmX3BhcnNlci5oIg0KLSNpbmNsdWRlICJmcGRmX3Z0LmgiDQotY2xhc3MgSVBWVF9Gb250TWFwDQotew0KLXB1YmxpYzoNCi0NCi0gICAgdmlydHVhbCBDUERGX0ZvbnQqCQkJCQkJR2V0UERGRm9udChGWF9JTlQzMiBuRm9udEluZGV4KSA9IDA7DQotDQotICAgIHZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldFBERkZvbnRBbGlhcyhGWF9JTlQzMiBuRm9udEluZGV4KSA9IDA7DQotfTsNCi1zdHJ1Y3QgQ1BWVF9EYXNoIHsNCi0NCi0gICAgQ1BWVF9EYXNoKEZYX0lOVDMyIGRhc2gsIEZYX0lOVDMyIGdhcCwgRlhfSU5UMzIgcGhhc2UpIDogbkRhc2goZGFzaCksIG5HYXAoZ2FwKSwgblBoYXNlKHBoYXNlKQ0KLSAgICB7fQ0KLQ0KLSAgICBGWF9JTlQzMgkJCW5EYXNoOw0KLQ0KLSAgICBGWF9JTlQzMgkJCW5HYXA7DQotDQotICAgIEZYX0lOVDMyCQkJblBoYXNlOw0KLX07DQotI2RlZmluZSBDVF9UUkFOU1BBUkVOVAkJMA0KLSNkZWZpbmUJQ1RfR1JBWQkJCQkxDQotI2RlZmluZQlDVF9SR0IJCQkJMg0KLSNkZWZpbmUJQ1RfQ01ZSwkJCQkzDQotc3RydWN0IENQVlRfQ29sb3Igew0KLQ0KLSAgICBDUFZUX0NvbG9yKEZYX0lOVDMyIHR5cGUgPSAwLCBGWF9GTE9BVCBjb2xvcjEgPSAwLjBmLCBGWF9GTE9BVCBjb2xvcjIgPSAwLjBmLCBGWF9GTE9BVCBjb2xvcjMgPSAwLjBmLCBGWF9GTE9BVCBjb2xvcjQgPSAwLjBmKQ0KLSAgICAgICAgOiBuQ29sb3JUeXBlKHR5cGUpLCBmQ29sb3IxKGNvbG9yMSksIGZDb2xvcjIoY29sb3IyKSwgZkNvbG9yMyhjb2xvcjMpLCBmQ29sb3I0KGNvbG9yNCkNCi0gICAge30NCi0NCi0gICAgRlhfSU5UMzIJCQluQ29sb3JUeXBlOw0KLSAgICBGWF9GTE9BVAkJCWZDb2xvcjE7DQotICAgIEZYX0ZMT0FUCQkJZkNvbG9yMjsNCi0gICAgRlhfRkxPQVQJCQlmQ29sb3IzOw0KLSAgICBGWF9GTE9BVAkJCWZDb2xvcjQ7DQotfTsNCi1jbGFzcyBDUFZUX1Byb3ZpZGVyIDogcHVibGljIElQREZfVmFyaWFibGVUZXh0X1Byb3ZpZGVyDQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BWVF9Qcm92aWRlcihJUFZUX0ZvbnRNYXAgKiBwRm9udE1hcCk7DQotDQotICAgIHZpcnR1YWwgfkNQVlRfUHJvdmlkZXIoKTsNCi0NCi0gICAgRlhfSU5UMzIJCQkJCQlHZXRDaGFyV2lkdGgoRlhfSU5UMzIgbkZvbnRJbmRleCwgRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBuV29yZFN0eWxlKTsNCi0NCi0gICAgRlhfSU5UMzIJCQkJCQlHZXRUeXBlQXNjZW50KEZYX0lOVDMyIG5Gb250SW5kZXgpOw0KLQ0KLSAgICBGWF9JTlQzMgkJCQkJCUdldFR5cGVEZXNjZW50KEZYX0lOVDMyIG5Gb250SW5kZXgpOw0KLQ0KLSAgICBGWF9JTlQzMgkJCQkJCUdldFdvcmRGb250SW5kZXgoRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBjaGFyc2V0LCBGWF9JTlQzMiBuRm9udEluZGV4KTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJCQlJc0xhdGluV29yZChGWF9XT1JEIHdvcmQpOw0KLQ0KLSAgICBGWF9JTlQzMgkJCQkJCUdldERlZmF1bHRGb250SW5kZXgoKTsNCi1wcml2YXRlOg0KLQ0KLSAgICBJUFZUX0ZvbnRNYXAgKgltX3BGb250TWFwOw0KLX07DQotI2RlZmluZSBQQlNfU09MSUQJCQkwDQotI2RlZmluZSBQQlNfREFTSAkJCTENCi0jZGVmaW5lIFBCU19CRVZFTEVECQkJMg0KLSNkZWZpbmUgUEJTX0lOU0VUCQkJMw0KLSNkZWZpbmUgUEJTX1VOREVSTElORUQJCTQNCi1jbGFzcyBDUFZUX0dlbmVyYXRlQVANCi17DQotcHVibGljOg0KLQ0KLSAgICBzdGF0aWMgRlhfQk9PTAkJCQkJCQlHZW5lcmF0ZVRleHRGaWVsZEFQKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfRGljdGlvbmFyeSogcEFubm90RGljdCk7DQotDQotICAgIHN0YXRpYyBGWF9CT09MCQkJCQkJCUdlbmVyYXRlQ29tYm9Cb3hBUChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpY3QpOw0KLQ0KLSAgICBzdGF0aWMgRlhfQk9PTAkJCQkJCQlHZW5lcmF0ZUxpc3RCb3hBUChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpY3QpOw0KLQ0KLSAgICBzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdlbmVyYXRlRWRpdEFQKElQVlRfRm9udE1hcCAqIHBGb250TWFwLCBJUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvciAqIHBJdGVyYXRvciwNCi0gICAgICAgICAgICBjb25zdCBDUERGX1BvaW50ICYgcHRPZmZzZXQsIEZYX0JPT0wgYkNvbnRpbnVvdXMsIEZYX1dPUkQgU3ViV29yZCA9IDAsIGNvbnN0IENQVlRfV29yZFJhbmdlICogcFZpc2libGUgPSBOVUxMKTsNCi0NCi0gICAgc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZW5lcmF0ZUJvcmRlckFQKGNvbnN0IENQREZfUmVjdCAmIHJlY3QsIEZYX0ZMT0FUIGZXaWR0aCwNCi0gICAgICAgICAgICBjb25zdCBDUFZUX0NvbG9yICYgY29sb3IsIGNvbnN0IENQVlRfQ29sb3IgJiBjckxlZnRUb3AsIGNvbnN0IENQVlRfQ29sb3IgJiBjclJpZ2h0Qm90dG9tLA0KLSAgICAgICAgICAgIEZYX0lOVDMyIG5TdHlsZSwgY29uc3QgQ1BWVF9EYXNoICYgZGFzaCk7DQotDQotICAgIHN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2VuZXJhdGVDb2xvckFQKGNvbnN0IENQVlRfQ29sb3IgJiBjb2xvciwgY29uc3QgRlhfQk9PTCAmIGJGaWxsT3JTdHJva2UpOw0KLX07DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2RlZmluZSBfRlBERl9BUF9IXworI2luY2x1ZGUgIi4uL2Z4Y3J0L2Z4X2Jhc2ljLmgiCisjaW5jbHVkZSAiLi4vZnBkZmFwaS9mcGRmX3BhcnNlci5oIgorI2luY2x1ZGUgImZwZGZfdnQuaCIKK2NsYXNzIElQVlRfRm9udE1hcAoreworcHVibGljOgorCisgICAgdmlydHVhbCBDUERGX0ZvbnQqCQkJCQkJR2V0UERGRm9udChGWF9JTlQzMiBuRm9udEluZGV4KSA9IDA7CisKKyAgICB2aXJ0dWFsIENGWF9CeXRlU3RyaW5nCQkJCQlHZXRQREZGb250QWxpYXMoRlhfSU5UMzIgbkZvbnRJbmRleCkgPSAwOworfTsKK3N0cnVjdCBDUFZUX0Rhc2ggeworCisgICAgQ1BWVF9EYXNoKEZYX0lOVDMyIGRhc2gsIEZYX0lOVDMyIGdhcCwgRlhfSU5UMzIgcGhhc2UpIDogbkRhc2goZGFzaCksIG5HYXAoZ2FwKSwgblBoYXNlKHBoYXNlKQorICAgIHt9CisKKyAgICBGWF9JTlQzMgkJCW5EYXNoOworCisgICAgRlhfSU5UMzIJCQluR2FwOworCisgICAgRlhfSU5UMzIJCQluUGhhc2U7Cit9OworI2RlZmluZSBDVF9UUkFOU1BBUkVOVAkJMAorI2RlZmluZQlDVF9HUkFZCQkJCTEKKyNkZWZpbmUJQ1RfUkdCCQkJCTIKKyNkZWZpbmUJQ1RfQ01ZSwkJCQkzCitzdHJ1Y3QgQ1BWVF9Db2xvciB7CisKKyAgICBDUFZUX0NvbG9yKEZYX0lOVDMyIHR5cGUgPSAwLCBGWF9GTE9BVCBjb2xvcjEgPSAwLjBmLCBGWF9GTE9BVCBjb2xvcjIgPSAwLjBmLCBGWF9GTE9BVCBjb2xvcjMgPSAwLjBmLCBGWF9GTE9BVCBjb2xvcjQgPSAwLjBmKQorICAgICAgICA6IG5Db2xvclR5cGUodHlwZSksIGZDb2xvcjEoY29sb3IxKSwgZkNvbG9yMihjb2xvcjIpLCBmQ29sb3IzKGNvbG9yMyksIGZDb2xvcjQoY29sb3I0KQorICAgIHt9CisKKyAgICBGWF9JTlQzMgkJCW5Db2xvclR5cGU7CisgICAgRlhfRkxPQVQJCQlmQ29sb3IxOworICAgIEZYX0ZMT0FUCQkJZkNvbG9yMjsKKyAgICBGWF9GTE9BVAkJCWZDb2xvcjM7CisgICAgRlhfRkxPQVQJCQlmQ29sb3I0OworfTsKK2NsYXNzIENQVlRfUHJvdmlkZXIgOiBwdWJsaWMgSVBERl9WYXJpYWJsZVRleHRfUHJvdmlkZXIKK3sKK3B1YmxpYzoKKworICAgIENQVlRfUHJvdmlkZXIoSVBWVF9Gb250TWFwICogcEZvbnRNYXApOworCisgICAgdmlydHVhbCB+Q1BWVF9Qcm92aWRlcigpOworCisgICAgRlhfSU5UMzIJCQkJCQlHZXRDaGFyV2lkdGgoRlhfSU5UMzIgbkZvbnRJbmRleCwgRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBuV29yZFN0eWxlKTsKKworICAgIEZYX0lOVDMyCQkJCQkJR2V0VHlwZUFzY2VudChGWF9JTlQzMiBuRm9udEluZGV4KTsKKworICAgIEZYX0lOVDMyCQkJCQkJR2V0VHlwZURlc2NlbnQoRlhfSU5UMzIgbkZvbnRJbmRleCk7CisKKyAgICBGWF9JTlQzMgkJCQkJCUdldFdvcmRGb250SW5kZXgoRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBjaGFyc2V0LCBGWF9JTlQzMiBuRm9udEluZGV4KTsKKworICAgIEZYX0JPT0wJCQkJCQkJSXNMYXRpbldvcmQoRlhfV09SRCB3b3JkKTsKKworICAgIEZYX0lOVDMyCQkJCQkJR2V0RGVmYXVsdEZvbnRJbmRleCgpOworcHJpdmF0ZToKKworICAgIElQVlRfRm9udE1hcCAqCW1fcEZvbnRNYXA7Cit9OworI2RlZmluZSBQQlNfU09MSUQJCQkwCisjZGVmaW5lIFBCU19EQVNICQkJMQorI2RlZmluZSBQQlNfQkVWRUxFRAkJCTIKKyNkZWZpbmUgUEJTX0lOU0VUCQkJMworI2RlZmluZSBQQlNfVU5ERVJMSU5FRAkJNAorY2xhc3MgQ1BWVF9HZW5lcmF0ZUFQCit7CitwdWJsaWM6CisKKyAgICBzdGF0aWMgRlhfQk9PTAkJCQkJCQlHZW5lcmF0ZVRleHRGaWVsZEFQKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfRGljdGlvbmFyeSogcEFubm90RGljdCk7CisKKyAgICBzdGF0aWMgRlhfQk9PTAkJCQkJCQlHZW5lcmF0ZUNvbWJvQm94QVAoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9EaWN0aW9uYXJ5KiBwQW5ub3REaWN0KTsKKworICAgIHN0YXRpYyBGWF9CT09MCQkJCQkJCUdlbmVyYXRlTGlzdEJveEFQKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfRGljdGlvbmFyeSogcEFubm90RGljdCk7CisKKyAgICBzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdlbmVyYXRlRWRpdEFQKElQVlRfRm9udE1hcCAqIHBGb250TWFwLCBJUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvciAqIHBJdGVyYXRvciwKKyAgICAgICAgICAgIGNvbnN0IENQREZfUG9pbnQgJiBwdE9mZnNldCwgRlhfQk9PTCBiQ29udGludW91cywgRlhfV09SRCBTdWJXb3JkID0gMCwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgKiBwVmlzaWJsZSA9IE5VTEwpOworCisgICAgc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZW5lcmF0ZUJvcmRlckFQKGNvbnN0IENQREZfUmVjdCAmIHJlY3QsIEZYX0ZMT0FUIGZXaWR0aCwKKyAgICAgICAgICAgIGNvbnN0IENQVlRfQ29sb3IgJiBjb2xvciwgY29uc3QgQ1BWVF9Db2xvciAmIGNyTGVmdFRvcCwgY29uc3QgQ1BWVF9Db2xvciAmIGNyUmlnaHRCb3R0b20sCisgICAgICAgICAgICBGWF9JTlQzMiBuU3R5bGUsIGNvbnN0IENQVlRfRGFzaCAmIGRhc2gpOworCisgICAgc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZW5lcmF0ZUNvbG9yQVAoY29uc3QgQ1BWVF9Db2xvciAmIGNvbG9yLCBjb25zdCBGWF9CT09MICYgYkZpbGxPclN0cm9rZSk7Cit9OwpkaWZmIC0tZ2l0IGEvY29yZS9pbmNsdWRlL2ZwZGZkb2MvZnBkZl9kb2MuaCBiL2NvcmUvaW5jbHVkZS9mcGRmZG9jL2ZwZGZfZG9jLmgKaW5kZXggZmMxOTQ0MS4uY2JiMGZkNCAxMDA2NDQKLS0tIGEvY29yZS9pbmNsdWRlL2ZwZGZkb2MvZnBkZl9kb2MuaAorKysgYi9jb3JlL2luY2x1ZGUvZnBkZmRvYy9mcGRmX2RvYy5oCkBAIC0xLDE3OTIgKzEsMTc5MiBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlBERl9ET0NfSF8NCi0jZGVmaW5lIF9GUERGX0RPQ19IXw0KLSNpZm5kZWYgX0ZQREZfUEFSU0VSXw0KLSNpbmNsdWRlICIuLi9mcGRmYXBpL2ZwZGZfcGFyc2VyLmgiDQotI2VuZGlmDQotI2lmbmRlZiBfRlBERl9SRU5ERVJfDQotI2luY2x1ZGUgIi4uL2ZwZGZhcGkvZnBkZl9yZW5kZXIuaCINCi0jZW5kaWYNCi1jbGFzcyBDUERGX0FjdGlvbjsNCi1jbGFzcyBDUERGX0Fubm90Ow0KLWNsYXNzIENQREZfQW5ub3RMaXN0Ow0KLWNsYXNzIENQREZfQm9va21hcms7DQotY2xhc3MgQ1BERl9Cb29rbWFya1RyZWU7DQotY2xhc3MgQ1BERl9EZXN0Ow0KLWNsYXNzIENQREZfTGluazsNCi1jbGFzcyBDUERGX0xpbmtMaXN0Ow0KLWNsYXNzIENQREZfTWV0YWRhdGE7DQotY2xhc3MgQ1BERl9OYW1lVHJlZTsNCi1jbGFzcyBDUERGX051bWJlclRyZWU7DQotY2xhc3MgQ1BERl9UZXh0T2JqZWN0Ow0KLWNsYXNzIENQREZfVmlld2VyUHJlZmVyZW5jZXM7DQotY2xhc3MgQ1BERl9QYWdlOw0KLWNsYXNzIENQREZfUmVuZGVyT3B0aW9uczsNCi1jbGFzcyBDWE1MX0VsZW1lbnQ7DQotY2xhc3MgQ1BERl9PQ0NvbnRleHQ7DQotY2xhc3MgQ1BERl9Eb2NKU0FjdGlvbnM7DQotY2xhc3MgQ1BERl9BY3Rpb25GaWVsZHM7DQotY2xhc3MgQ1BERl9BQWN0aW9uOw0KLWNsYXNzIENQREZfRmlsZVNwZWM7DQotY2xhc3MgQ1BERl9JY29uRml0Ow0KLWNsYXNzIENQREZfRGVmYXVsdEFwcGVhcmFuY2U7DQotY2xhc3MgQ1BERl9JbnRlckZvcm07DQotY2xhc3MgQ1BERl9Gb3JtRmllbGQ7DQotY2xhc3MgQ1BERl9Gb3JtTm90aWZ5Ow0KLWNsYXNzIENQREZfRm9ybUNvbnRyb2w7DQotY2xhc3MgQ1BERl9MV2luUGFyYW07DQotY2xhc3MgQ0ZpZWxkVHJlZTsNCi1jbGFzcyBDUERGX0FwU2V0dGluZ3M7DQotY2xhc3MgQ1BERl9OYW1lVHJlZSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9OYW1lVHJlZShDUERGX0RpY3Rpb25hcnkqIHBSb290KQ0KLSAgICB7DQotICAgICAgICBtX3BSb290ID0gcFJvb3Q7DQotICAgIH0NCi0NCi0gICAgQ1BERl9OYW1lVHJlZShDUERGX0RvY3VtZW50KiBwRG9jLCBGWF9CU1RSIGNhdGVnb3J5KTsNCi0NCi0gICAgQ1BERl9PYmplY3QqCQlMb29rdXBWYWx1ZShpbnQgbkluZGV4LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lKSBjb25zdDsNCi0NCi0gICAgQ1BERl9PYmplY3QqCQlMb29rdXBWYWx1ZShjb25zdCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lKSBjb25zdDsNCi0NCi0gICAgQ1BERl9BcnJheSoJCQlMb29rdXBOYW1lZERlc3QoQ1BERl9Eb2N1bWVudCogcERvYywgRlhfQlNUUiBzTmFtZSk7DQotDQotICAgIGludAkJCQkJR2V0SW5kZXgoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZSkgY29uc3Q7DQotDQotICAgIGludAkJCQkJR2V0Q291bnQoKSBjb25zdDsNCi0NCi0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KglHZXRSb290KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcFJvb3Q7DQotICAgIH0NCi0NCi1wcm90ZWN0ZWQ6DQotDQotICAgIENQREZfRGljdGlvbmFyeSoJCW1fcFJvb3Q7DQotfTsNCi1jbGFzcyBDUERGX0Jvb2ttYXJrVHJlZSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9Cb29rbWFya1RyZWUoQ1BERl9Eb2N1bWVudCogcERvYykNCi0gICAgew0KLSAgICAgICAgbV9wRG9jdW1lbnQgPSBwRG9jOw0KLSAgICB9DQotcHVibGljOg0KLQ0KLQ0KLQ0KLSAgICBDUERGX0Jvb2ttYXJrCQlHZXRGaXJzdENoaWxkKENQREZfQm9va21hcmsgcGFyZW50KTsNCi0NCi0gICAgQ1BERl9Cb29rbWFyawkJR2V0TmV4dFNpYmxpbmcoQ1BERl9Cb29rbWFyayBib29rbWFyayk7DQotDQotDQotICAgIENQREZfRG9jdW1lbnQqCQlHZXREb2N1bWVudCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BEb2N1bWVudDsNCi0gICAgfQ0KLXByb3RlY3RlZDoNCi0NCi0gICAgQ1BERl9Eb2N1bWVudCoJCW1fcERvY3VtZW50Ow0KLX07DQotI2RlZmluZSBQREZCT09LTUFSS19JVEFMSUMJCQkxDQotI2RlZmluZSBQREZCT09LTUFSS19CT0xECQkJMg0KLWNsYXNzIENQREZfQm9va21hcmsgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfQm9va21hcmsoQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IE5VTEwpDQotICAgIHsNCi0gICAgICAgIG1fcERpY3QgPSBwRGljdDsNCi0gICAgfQ0KLQ0KLSAgICBvcGVyYXRvciBDUERGX0RpY3Rpb25hcnkqKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcERpY3Q7DQotICAgIH0NCi0NCi0NCi0NCi0gICAgRlhfRFdPUkQJCQlHZXRDb2xvclJlZigpOw0KLQ0KLSAgICBGWF9EV09SRAkJCUdldEZvbnRTdHlsZSgpOw0KLQ0KLSAgICBDRlhfV2lkZVN0cmluZwkJR2V0VGl0bGUoKTsNCi0NCi0NCi0NCi0NCi0gICAgQ1BERl9EZXN0CQkJR2V0RGVzdChDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQpOw0KLQ0KLSAgICBDUERGX0FjdGlvbgkJCUdldEFjdGlvbigpOw0KLQ0KLQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqCW1fcERpY3Q7DQotfTsNCi0jZGVmaW5lIFBERlpPT01fWFlaCQkJCQkxDQotI2RlZmluZSBQREZaT09NX0ZJVFBBR0UJCQkJMg0KLSNkZWZpbmUgUERGWk9PTV9GSVRIT1JaCQkJCTMNCi0jZGVmaW5lIFBERlpPT01fRklUVkVSVAkJCQk0DQotI2RlZmluZSBQREZaT09NX0ZJVFJFQ1QJCQkJNQ0KLSNkZWZpbmUgUERGWk9PTV9GSVRCQk9YCQkJCTYNCi0jZGVmaW5lIFBERlpPT01fRklUQkhPUloJCQk3DQotDQotI2RlZmluZSBQREZaT09NX0ZJVEJWRVJUCQkJOA0KLWNsYXNzIENQREZfRGVzdCA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9EZXN0KENQREZfT2JqZWN0KiBwT2JqID0gTlVMTCkNCi0gICAgew0KLSAgICAgICAgbV9wT2JqID0gcE9iajsNCi0gICAgfQ0KLQ0KLSAgICBvcGVyYXRvciBDUERGX09iamVjdCogKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcE9iajsNCi0gICAgfQ0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZwkJR2V0UmVtb3RlTmFtZSgpOw0KLQ0KLSAgICBpbnQJCQkJCUdldFBhZ2VJbmRleChDUERGX0RvY3VtZW50KiBwRG9jKTsNCi0NCi0gICAgRlhfRFdPUkQJCQlHZXRQYWdlT2JqTnVtKCk7DQotDQotICAgIGludAkJCQkJR2V0Wm9vbU1vZGUoKTsNCi0NCi0gICAgRlhfRkxPQVQJCQlHZXRQYXJhbShpbnQgaW5kZXgpOw0KLQ0KLQ0KLSAgICBDUERGX09iamVjdCoJCW1fcE9iajsNCi19Ow0KLWNsYXNzIENQREZfT0NDb250ZXh0IDogcHVibGljIENGWF9PYmplY3QsIHB1YmxpYyBJUERGX09DQ29udGV4dA0KLXsNCi1wdWJsaWM6DQotDQotICAgIGVudW0gVXNhZ2VUeXBlIHsNCi0gICAgICAgIFZpZXcgPSAwLA0KLSAgICAgICAgRGVzaWduLA0KLSAgICAgICAgUHJpbnQsDQotICAgICAgICBFeHBvcnQNCi0gICAgfTsNCi0NCi0gICAgQ1BERl9PQ0NvbnRleHQoQ1BERl9Eb2N1bWVudCAqcERvYywgVXNhZ2VUeXBlIGVVc2FnZVR5cGUgPSBWaWV3KTsNCi0NCi0gICAgdmlydHVhbCB+Q1BERl9PQ0NvbnRleHQoKTsNCi0NCi0gICAgQ1BERl9Eb2N1bWVudCoJR2V0RG9jdW1lbnQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRG9jdW1lbnQ7DQotICAgIH0NCi0NCi0gICAgVXNhZ2VUeXBlCQlHZXRVc2FnZVR5cGUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9lVXNhZ2VUeXBlOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wJCQlDaGVja09DR1Zpc2libGUoY29uc3QgQ1BERl9EaWN0aW9uYXJ5ICpwT0NHRGljdCk7DQotDQotICAgIHZvaWQJCQlSZXNldE9DQ29udGV4dCgpOw0KLXByb3RlY3RlZDoNCi0NCi0gICAgRlhfQk9PTAkJCUxvYWRPQ0dTdGF0ZUZyb21Db25maWcoRlhfQlNUUiBjc0NvbmZpZywgY29uc3QgQ1BERl9EaWN0aW9uYXJ5ICpwT0NHRGljdCwgRlhfQk9PTCAmYlZhbGlkQ29uZmlnKSBjb25zdDsNCi0NCi0gICAgRlhfQk9PTAkJCUxvYWRPQ0dTdGF0ZShjb25zdCBDUERGX0RpY3Rpb25hcnkgKnBPQ0dEaWN0KSBjb25zdDsNCi0NCi0gICAgRlhfQk9PTAkJCUdldE9DR1Zpc2libGUoY29uc3QgQ1BERl9EaWN0aW9uYXJ5ICpwT0NHRGljdCk7DQotDQotICAgIEZYX0JPT0wJCQlHZXRPQ0dWRShDUERGX0FycmF5ICpwRXhwcmVzc2lvbiwgRlhfQk9PTCBiRnJvbUNvbmZpZywgaW50IG5MZXZlbCA9IDApOw0KLQ0KLSAgICBGWF9CT09MCQkJTG9hZE9DTURTdGF0ZShjb25zdCBDUERGX0RpY3Rpb25hcnkgKnBPQ01ERGljdCwgRlhfQk9PTCBiRnJvbUNvbmZpZyk7DQotDQotICAgIENQREZfRG9jdW1lbnQJCSptX3BEb2N1bWVudDsNCi0NCi0gICAgVXNhZ2VUeXBlCQkJbV9lVXNhZ2VUeXBlOw0KLQ0KLSAgICBDRlhfTWFwUHRyVGVtcGxhdGU8Y29uc3QgQ1BERl9EaWN0aW9uYXJ5Kiwgdm9pZCo+CW1fT0NHU3RhdGVzOw0KLX07DQotY2xhc3MgQ1BERl9MV2luUGFyYW0gOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfTFdpblBhcmFtKENQREZfRGljdGlvbmFyeSogcERpY3QpDQotICAgIHsNCi0gICAgICAgIG1fcERpY3QgPSBwRGljdDsNCi0gICAgfQ0KLQ0KLSAgICBvcGVyYXRvciBDUERGX0RpY3Rpb25hcnkqICgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BEaWN0Ow0KLSAgICB9DQotDQotICAgIGlubGluZSBDRlhfQnl0ZVN0cmluZwlHZXRGaWxlTmFtZSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BEaWN0LT5HZXRTdHJpbmcoIkYiKTsNCi0gICAgfQ0KLQ0KLQ0KLSAgICBpbmxpbmUgQ0ZYX0J5dGVTdHJpbmcJR2V0RGVmYXVsdERpcmVjdG9yeSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BEaWN0LT5HZXRTdHJpbmcoIkQiKTsNCi0gICAgfQ0KLQ0KLQ0KLSAgICBpbmxpbmUgQ0ZYX0J5dGVTdHJpbmcJR2V0T3BlcmF0aW9uKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcERpY3QtPkdldFN0cmluZygiTyIpOw0KLSAgICB9DQotDQotDQotICAgIGlubGluZSBDRlhfQnl0ZVN0cmluZwlHZXRQYXJhbWV0ZXIoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRGljdC0+R2V0U3RyaW5nKCJQIik7DQotICAgIH0NCi0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KgkJbV9wRGljdDsNCi19Ow0KLWNsYXNzIENQREZfQWN0aW9uRmllbGRzIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDUERGX0FjdGlvbkZpZWxkcyhjb25zdCBDUERGX0FjdGlvbiogcEFjdGlvbikNCi0gICAgew0KLSAgICAgICAgbV9wQWN0aW9uID0gKENQREZfQWN0aW9uKilwQWN0aW9uOw0KLSAgICB9DQotDQotICAgIG9wZXJhdG9yIENQREZfQWN0aW9uKigpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BBY3Rpb247DQotICAgIH0NCi0NCi0gICAgRlhfRFdPUkQJCQkJR2V0RmllbGRzQ291bnQoKSBjb25zdDsNCi0NCi0gICAgdm9pZAkJCQkJR2V0QWxsRmllbGRzKENGWF9QdHJBcnJheSYgZmllbGRPYmplY3RzKSBjb25zdDsNCi0NCi0gICAgQ1BERl9PYmplY3QqCQkJR2V0RmllbGQoRlhfRFdPUkQgaUluZGV4KSBjb25zdDsNCi0NCi0gICAgQ1BERl9BY3Rpb24qCQkJbV9wQWN0aW9uOw0KLX07DQotDQotI2RlZmluZSBQREZOQU1FRF9ORVhUUEFHRQkJMQ0KLSNkZWZpbmUgUERGTkFNRURfUFJFVlBBR0UJCTINCi0jZGVmaW5lIFBERk5BTUVEX0ZJUlNUUEFHRQkJMw0KLSNkZWZpbmUgUERGTkFNRURfTEFTVFBBR0UJCTQNCi0jZGVmaW5lIFBERkpTX01BWExFTkdUSAkJCTY0DQotY2xhc3MgQ1BERl9BY3Rpb24gOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfQWN0aW9uKENQREZfRGljdGlvbmFyeSogcERpY3QgPSBOVUxMKQ0KLSAgICB7DQotICAgICAgICBtX3BEaWN0ID0gcERpY3Q7DQotICAgIH0NCi0NCi0gICAgb3BlcmF0b3IgQ1BERl9EaWN0aW9uYXJ5KiAoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRGljdDsNCi0gICAgfQ0KLQ0KLSAgICBlbnVtIEFjdGlvblR5cGUgew0KLSAgICAgICAgVW5rbm93biA9IDAsDQotICAgICAgICBHb1RvLA0KLSAgICAgICAgR29Ub1IsDQotICAgICAgICBHb1RvRSwNCi0gICAgICAgIExhdW5jaCwNCi0gICAgICAgIFRocmVhZCwNCi0gICAgICAgIFVSSSwNCi0gICAgICAgIFNvdW5kLA0KLSAgICAgICAgTW92aWUsDQotICAgICAgICBIaWRlLA0KLSAgICAgICAgTmFtZWQsDQotICAgICAgICBTdWJtaXRGb3JtLA0KLSAgICAgICAgUmVzZXRGb3JtLA0KLSAgICAgICAgSW1wb3J0RGF0YSwNCi0gICAgICAgIEphdmFTY3JpcHQsDQotICAgICAgICBTZXRPQ0dTdGF0ZSwNCi0gICAgICAgIFJlbmRpdGlvbiwNCi0gICAgICAgIFRyYW5zLA0KLSAgICAgICAgR29UbzNEVmlldw0KLSAgICB9Ow0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZwkJR2V0VHlwZU5hbWUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRGljdC0+R2V0U3RyaW5nKCJTIik7DQotICAgIH0NCi0NCi0gICAgQWN0aW9uVHlwZQkJCUdldFR5cGUoKSBjb25zdDsNCi0NCi0NCi0NCi0gICAgQ1BERl9EZXN0CQkJR2V0RGVzdChDUERGX0RvY3VtZW50KiBwRG9jKSBjb25zdDsNCi0NCi0NCi0NCi0NCi0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcJCUdldEZpbGVQYXRoKCkgY29uc3Q7DQotDQotDQotDQotDQotICAgIEZYX0JPT0wJCQkJR2V0TmV3V2luZG93KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcERpY3QtPkdldEJvb2xlYW4oIk5ld1dpbmRvdyIpOw0KLSAgICB9DQotDQotDQotDQotDQotICAgIENQREZfTFdpblBhcmFtCQlHZXRXaW5QYXJhbSgpIGNvbnN0Ow0KLQ0KLQ0KLQ0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZwkJR2V0VVJJKENQREZfRG9jdW1lbnQqIHBEb2MpIGNvbnN0Ow0KLQ0KLQ0KLQ0KLQ0KLSAgICBGWF9CT09MCQkJCUdldE1vdXNlTWFwKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcERpY3QtPkdldEJvb2xlYW4oIklzTWFwIik7DQotICAgIH0NCi0NCi0NCi0NCi0NCi0gICAgQ1BERl9BY3Rpb25GaWVsZHMJR2V0V2lkZ2V0cygpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiB0aGlzOw0KLSAgICB9DQotDQotDQotDQotDQotICAgIEZYX0JPT0wJCQkJR2V0SGlkZVN0YXR1cygpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BEaWN0LT5HZXRCb29sZWFuKCJIIiwgVFJVRSk7DQotICAgIH0NCi0NCi0NCi0NCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcJCUdldE5hbWVkQWN0aW9uKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcERpY3QtPkdldFN0cmluZygiTiIpOw0KLSAgICB9DQotDQotDQotDQotDQotICAgIEZYX0RXT1JECQkJR2V0RmxhZ3MoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRGljdC0+R2V0SW50ZWdlcigiRmxhZ3MiKTsNCi0gICAgfQ0KLQ0KLQ0KLQ0KLQ0KLSAgICBDRlhfV2lkZVN0cmluZwkJR2V0SmF2YVNjcmlwdCgpIGNvbnN0Ow0KLQ0KLQ0KLQ0KLQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqCUdldEFubm90KCkgY29uc3Q7DQotDQotDQotDQotDQotICAgIEZYX0lOVDMyCQkJR2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0Ow0KLQ0KLQ0KLQ0KLQ0KLSAgICBDUERGX1N0cmVhbSoJCUdldFNvdW5kU3RyZWFtKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcERpY3QtPkdldFN0cmVhbSgiU291bmQiKTsNCi0gICAgfQ0KLQ0KLSAgICBGWF9GTE9BVAkJCUdldFZvbHVtZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BEaWN0LT5HZXROdW1iZXIoIlZvbHVtZSIpOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wJCQkJSXNTeW5jaHJvbm91cygpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BEaWN0LT5HZXRCb29sZWFuKCJTeW5jaHJvbm91cyIpOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wJCQkJSXNSZXBlYXQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRGljdC0+R2V0Qm9vbGVhbigiUmVwZWF0Iik7DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTAkJCQlJc01peFBsYXkoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRGljdC0+R2V0Qm9vbGVhbigiTWl4Iik7DQotICAgIH0NCi0NCi0NCi0NCi0NCi0gICAgRlhfRFdPUkQJCQlHZXRTdWJBY3Rpb25zQ291bnQoKSBjb25zdDsNCi0NCi0gICAgQ1BERl9BY3Rpb24JCQlHZXRTdWJBY3Rpb24oRlhfRFdPUkQgaUluZGV4KSBjb25zdDsNCi0NCi0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KgltX3BEaWN0Ow0KLX07DQotY2xhc3MgQ1BERl9BQWN0aW9uIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDUERGX0FBY3Rpb24oQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IE5VTEwpDQotICAgIHsNCi0gICAgICAgIG1fcERpY3QgPSBwRGljdDsNCi0gICAgfQ0KLQ0KLSAgICBvcGVyYXRvciBDUERGX0RpY3Rpb25hcnkqKCkJY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcERpY3Q7DQotICAgIH0NCi0NCi0gICAgZW51bSBBQWN0aW9uVHlwZSB7DQotICAgICAgICBDdXJzb3JFbnRlciA9IDAsDQotICAgICAgICBDdXJzb3JFeGl0LA0KLSAgICAgICAgQnV0dG9uRG93biwNCi0gICAgICAgIEJ1dHRvblVwLA0KLSAgICAgICAgR2V0Rm9jdXMsDQotICAgICAgICBMb3NlRm9jdXMsDQotICAgICAgICBQYWdlT3BlbiwNCi0gICAgICAgIFBhZ2VDbG9zZSwNCi0gICAgICAgIFBhZ2VWaXNpYmxlLA0KLSAgICAgICAgUGFnZUludmlzaWJsZSwNCi0gICAgICAgIE9wZW5QYWdlLA0KLSAgICAgICAgQ2xvc2VQYWdlLA0KLSAgICAgICAgS2V5U3Ryb2tlLA0KLSAgICAgICAgRm9ybWF0LA0KLSAgICAgICAgVmFsaWRhdGUsDQotICAgICAgICBDYWxjdWxhdGUsDQotICAgICAgICBDbG9zZURvY3VtZW50LA0KLSAgICAgICAgU2F2ZURvY3VtZW50LA0KLSAgICAgICAgRG9jdW1lbnRTYXZlZCwNCi0gICAgICAgIFByaW50RG9jdW1lbnQsDQotICAgICAgICBEb2N1bWVudFByaW50ZWQNCi0gICAgfTsNCi0NCi0gICAgRlhfQk9PTAkJCQlBY3Rpb25FeGlzdChBQWN0aW9uVHlwZSBlVHlwZSkgY29uc3Q7DQotDQotICAgIENQREZfQWN0aW9uCQkJR2V0QWN0aW9uKEFBY3Rpb25UeXBlIGVUeXBlKSBjb25zdDsNCi0NCi0gICAgRlhfUE9TSVRJT04JCQlHZXRTdGFydFBvcygpIGNvbnN0Ow0KLQ0KLSAgICBDUERGX0FjdGlvbgkJCUdldE5leHRBY3Rpb24oRlhfUE9TSVRJT04mIHBvcywgQUFjdGlvblR5cGUmIGVUeXBlKSBjb25zdDsNCi0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KgltX3BEaWN0Ow0KLX07DQotY2xhc3MgQ1BERl9Eb2NKU0FjdGlvbnMgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfRG9jSlNBY3Rpb25zKENQREZfRG9jdW1lbnQqIHBEb2MpOw0KLQ0KLQ0KLSAgICBpbnQJCQkJCUNvdW50SlNBY3Rpb25zKCkgY29uc3Q7DQotDQotICAgIENQREZfQWN0aW9uCQkJR2V0SlNBY3Rpb24oaW50IGluZGV4LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lKSBjb25zdDsNCi0NCi0gICAgQ1BERl9BY3Rpb24JCQlHZXRKU0FjdGlvbihjb25zdCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lKSBjb25zdDsNCi0NCi0gICAgaW50CQkJCQlGaW5kSlNBY3Rpb24oY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZSkgY29uc3Q7DQotDQotDQotICAgIENQREZfRG9jdW1lbnQqCQlHZXREb2N1bWVudCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BEb2N1bWVudDsNCi0gICAgfQ0KLQ0KLXByb3RlY3RlZDoNCi0NCi0gICAgQ1BERl9Eb2N1bWVudCoJCW1fcERvY3VtZW50Ow0KLX07DQotY2xhc3MgQ1BERl9GaWxlU3BlYyA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9GaWxlU3BlYygpOw0KLQ0KLSAgICBDUERGX0ZpbGVTcGVjKENQREZfT2JqZWN0ICpwT2JqKQ0KLSAgICB7DQotICAgICAgICBtX3BPYmogPSBwT2JqOw0KLSAgICB9DQotDQotICAgIG9wZXJhdG9yIENQREZfT2JqZWN0KigpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BPYmo7DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTAkJCUlzVVJMKCkgY29uc3Q7DQotDQotICAgIEZYX0JPT0wJCQlHZXRGaWxlTmFtZShDRlhfV2lkZVN0cmluZyAmd3NGaWxlTmFtZSkgY29uc3Q7DQotDQotICAgIENQREZfU3RyZWFtKglHZXRGaWxlU3RyZWFtKCkgY29uc3Q7DQotDQotICAgIHZvaWQJCQlTZXRGaWxlTmFtZShGWF9XU1RSIHdzRmlsZU5hbWUsIEZYX0JPT0wgYlVSTCA9IEZBTFNFKTsNCi1wcm90ZWN0ZWQ6DQotDQotICAgIENQREZfT2JqZWN0CQkqbV9wT2JqOw0KLX07DQotY2xhc3MgQ1BERl9MaW5rTGlzdCA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9MaW5rTGlzdChDUERGX0RvY3VtZW50KiBwRG9jKQ0KLSAgICB7DQotICAgICAgICBtX3BEb2N1bWVudCA9IHBEb2M7DQotICAgIH0NCi0NCi0gICAgfkNQREZfTGlua0xpc3QoKTsNCi0NCi0gICAgQ1BERl9MaW5rCQkJR2V0TGlua0F0UG9pbnQoQ1BERl9QYWdlKiBwUGFnZSwgRlhfRkxPQVQgcGRmX3gsIEZYX0ZMT0FUIHBkZl95KTsNCi0NCi0gICAgaW50CQkJCQlDb3VudExpbmtzKENQREZfUGFnZSogcFBhZ2UpOw0KLQ0KLSAgICBDUERGX0xpbmsJCQlHZXRMaW5rKENQREZfUGFnZSogcFBhZ2UsIGludCBpbmRleCk7DQotDQotICAgIENQREZfRG9jdW1lbnQqCQlHZXREb2N1bWVudCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BEb2N1bWVudDsNCi0gICAgfQ0KLXByb3RlY3RlZDoNCi0NCi0gICAgQ1BERl9Eb2N1bWVudCoJCW1fcERvY3VtZW50Ow0KLQ0KLSAgICBDRlhfTWFwUHRyVG9QdHIJCW1fUGFnZU1hcDsNCi0NCi0gICAgQ0ZYX1B0ckFycmF5KgkJR2V0UGFnZUxpbmtzKENQREZfUGFnZSogcFBhZ2UpOw0KLQ0KLSAgICB2b2lkCQkJCUxvYWRQYWdlTGlua3MoQ1BERl9QYWdlKiBwUGFnZSwgQ0ZYX1B0ckFycmF5KiBwTGlzdCk7DQotfTsNCi1jbGFzcyBDUERGX0xpbmsgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfTGluayhDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gTlVMTCkNCi0gICAgew0KLSAgICAgICAgbV9wRGljdCA9IHBEaWN0Ow0KLSAgICB9DQotDQotICAgIG9wZXJhdG9yIENQREZfRGljdGlvbmFyeSooKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRGljdDsNCi0gICAgfQ0KLQ0KLSAgICBDRlhfRmxvYXRSZWN0CQlHZXRSZWN0KCk7DQotDQotDQotDQotICAgIENQREZfRGVzdAkJCUdldERlc3QoQ1BERl9Eb2N1bWVudCogcERvYyk7DQotDQotICAgIENQREZfQWN0aW9uCQkJR2V0QWN0aW9uKCk7DQotDQotDQotICAgIENQREZfRGljdGlvbmFyeSoJbV9wRGljdDsNCi19Ow0KLSNkZWZpbmUgQU5OT1RGTEFHX0lOVklTSUJMRQkJCTENCi0jZGVmaW5lIEFOTk9URkxBR19ISURERU4JCQkyDQotI2RlZmluZSBBTk5PVEZMQUdfUFJJTlQJCQkJNA0KLSNkZWZpbmUgQU5OT1RGTEFHX05PWk9PTQkJCTgNCi0jZGVmaW5lIEFOTk9URkxBR19OT1JPVEFURQkJCTB4MTANCi0jZGVmaW5lIEFOTk9URkxBR19OT1ZJRVcJCQkweDIwDQotI2RlZmluZSBBTk5PVEZMQUdfUkVBRE9OTFkJCQkweDQwDQotI2RlZmluZSBBTk5PVEZMQUdfTE9DS0VECQkJMHg4MA0KLSNkZWZpbmUgQU5OT1RGTEFHX1RPR0dMRU5PVklFVwkJMHgxMDANCi1jbGFzcyBDUERGX0Fubm90IDogcHVibGljIENGWF9Qcml2YXRlRGF0YSwgcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDUERGX0Fubm90KENQREZfRGljdGlvbmFyeSogcERpY3QpOw0KLQ0KLSAgICB+Q1BERl9Bbm5vdCgpOw0KLQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqCW1fcEFubm90RGljdDsNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcJCUdldFN1YlR5cGUoKSBjb25zdDsNCi0NCi0gICAgRlhfRFdPUkQJCQlHZXRGbGFncygpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BBbm5vdERpY3QtPkdldEludGVnZXIoIkYiKTsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJCUdldFJlY3QoQ0ZYX0Zsb2F0UmVjdCYgcmVjdCkgY29uc3Q7DQotDQotICAgIGVudW0gQXBwZWFyYW5jZU1vZGUJew0KLSAgICAgICAgTm9ybWFsLA0KLSAgICAgICAgUm9sbG92ZXIsDQotICAgICAgICBEb3duDQotICAgIH07DQotDQotICAgIEZYX0JPT0wJCQkJRHJhd0FwcGVhcmFuY2UoY29uc3QgQ1BERl9QYWdlKiBwUGFnZSwgQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcFVzZXIyRGV2aWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGVhcmFuY2VNb2RlIG1vZGUsIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMpOw0KLQ0KLSAgICBGWF9CT09MCQkJCURyYXdJbkNvbnRleHQoY29uc3QgQ1BERl9QYWdlKiBwUGFnZSwgY29uc3QgQ1BERl9SZW5kZXJDb250ZXh0KiBwQ29udGV4dCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBVc2VyMkRldmljZSwgQXBwZWFyYW5jZU1vZGUgbW9kZSk7DQotDQotICAgIHZvaWQJCQkJQ2xlYXJDYWNoZWRBUCgpOw0KLQ0KLQ0KLSAgICB2b2lkCQkJCURyYXdCb3JkZXIoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcFVzZXIyRGV2aWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucyk7DQotDQotICAgIENQREZfUGFnZU9iamVjdCoJR2V0Qm9yZGVyKEZYX0JPT0wgYlByaW50LCBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zKTsNCi0NCi0NCi0NCi0gICAgaW50CQkJCQlDb3VudElSVE5vdGVzKCk7DQotDQotICAgIENQREZfQW5ub3QqCQkJR2V0SVJUTm90ZShpbnQgaW5kZXgpOw0KLQ0KLQ0KLSAgICBDUERGX0Zvcm0qCQkJR2V0QVBGb3JtKGNvbnN0IENQREZfUGFnZSogcFBhZ2UsIEFwcGVhcmFuY2VNb2RlIG1vZGUpOw0KLXByaXZhdGU6DQotDQotICAgIENGWF9NYXBQdHJUb1B0cgkJbV9BUE1hcDsNCi1wcm90ZWN0ZWQ6DQotICAgIGZyaWVuZCBjbGFzcwkJQ1BERl9Bbm5vdExpc3Q7DQotDQotICAgIENQREZfQW5ub3RMaXN0KgkJbV9wTGlzdDsNCi0NCi0gICAgQ1BERl9SZWZlcmVuY2UqCQlOZXdBbm5vdFJlZigpOw0KLX07DQotY2xhc3MgQ1BERl9Bbm5vdExpc3QgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfQW5ub3RMaXN0KENQREZfUGFnZSogcFBhZ2UpOw0KLQ0KLSAgICB+Q1BERl9Bbm5vdExpc3QoKTsNCi0NCi0gICAgdm9pZAlHZXRBbm5vdE1hdHJpeChjb25zdCBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpY3QsIGNvbnN0IENGWF9NYXRyaXgqIHBVc2VyMkRldmljZSwgQ0ZYX01hdHJpeCAmbWF0cml4KSBjb25zdDsNCi0NCi0gICAgdm9pZAlHZXRBbm5vdFJlY3QoY29uc3QgQ1BERl9EaWN0aW9uYXJ5KiBwQW5ub3REaWN0LCBjb25zdCBDRlhfTWF0cml4KiBwVXNlcjJEZXZpY2UsIENQREZfUmVjdCAmcnRBbm5vdCkgY29uc3Q7DQotDQotICAgIHZvaWQJCQkJRGlzcGxheUFubm90cyhjb25zdCBDUERGX1BhZ2UqIHBQYWdlLCBDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgRlhfQk9PTCBiU2hvd1dpZGdldCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMpOw0KLQ0KLSAgICB2b2lkCQkJCURpc3BsYXlBbm5vdHMoY29uc3QgQ1BERl9QYWdlKiBwUGFnZSwgQ1BERl9SZW5kZXJDb250ZXh0KiBwQ29udGV4dCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYlByaW50aW5nLCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LCBGWF9CT09MIGJTaG93V2lkZ2V0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucykNCi0gICAgew0KLSAgICAgICAgRGlzcGxheUFubm90cyhwUGFnZSwgTlVMTCwgcENvbnRleHQsIGJQcmludGluZywgcE1hdHJpeCwgYlNob3dXaWRnZXQgPyAzIDogMSwgcE9wdGlvbnMsIE5VTEwpOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJRGlzcGxheUFubm90cyhjb25zdCBDUERGX1BhZ2UqIHBQYWdlLCBDUERGX1JlbmRlckNvbnRleHQqIHBDb250ZXh0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiUHJpbnRpbmcsIENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIEZYX0JPT0wgYlNob3dXaWRnZXQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zLCBGWF9SRUNUICpwQ2xpcFJlY3QpDQotICAgIHsNCi0gICAgICAgIERpc3BsYXlBbm5vdHMocFBhZ2UsIE5VTEwsIHBDb250ZXh0LCBiUHJpbnRpbmcsIHBNYXRyaXgsIGJTaG93V2lkZ2V0ID8gMyA6IDEsIHBPcHRpb25zLCBwQ2xpcFJlY3QpOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJRGlzcGxheUFubm90cyhjb25zdCBDUERGX1BhZ2UqIHBQYWdlLCBDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX1JlbmRlckNvbnRleHQqIHBDb250ZXh0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiUHJpbnRpbmcsIENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIEZYX0RXT1JEIGR3QW5ub3RGbGFncywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMsIEZYX1JFQ1QqIHBDbGlwUmVjdCk7DQotDQotDQotDQotICAgIENQREZfQW5ub3QqCQkJR2V0QXQoaW50IGluZGV4KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gKENQREZfQW5ub3QqKW1fQW5ub3RMaXN0LkdldEF0KGluZGV4KTsNCi0gICAgfQ0KLQ0KLSAgICBpbnQJCQkJCUNvdW50KCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fQW5ub3RMaXN0LkdldFNpemUoKTsNCi0gICAgfQ0KLQ0KLSAgICBpbnQJCQkJCUdldEluZGV4KENQREZfQW5ub3QqIHBBbm5vdCk7DQotDQotDQotICAgIENQREZfRG9jdW1lbnQqCQlHZXREb2N1bWVudCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BEb2N1bWVudDsNCi0gICAgfQ0KLXByb3RlY3RlZDoNCi0NCi0gICAgQ0ZYX1B0ckFycmF5CQltX0Fubm90TGlzdDsNCi0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KgltX3BQYWdlRGljdDsNCi0NCi0gICAgQ1BERl9Eb2N1bWVudCoJCW1fcERvY3VtZW50Ow0KLQ0KLSAgICBDRlhfUHRyQXJyYXkJCW1fQm9yZGVyczsNCi0NCi0gICAgdm9pZAkJCQlEaXNwbGF5UGFzcyhjb25zdCBDUERGX1BhZ2UqIHBQYWdlLCBDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfUmVuZGVyQ29udGV4dCogcENvbnRleHQsIEZYX0JPT0wgYlByaW50aW5nLCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYldpZGdldCwgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucywgRlhfUkVDVCogY2xpcF9yZWN0KTsNCi0gICAgZnJpZW5kIGNsYXNzCQlDUERGX0Fubm90Ow0KLX07DQotI2RlZmluZSBDT0xPUlRZUEVfVFJBTlNQQVJFTlQJMA0KLSNkZWZpbmUgQ09MT1JUWVBFX0dSQVkJCQkxDQotI2RlZmluZSBDT0xPUlRZUEVfUkdCCQkJMg0KLSNkZWZpbmUgQ09MT1JUWVBFX0NNWUsJCQkzDQotY2xhc3MgQ1BERl9EZWZhdWx0QXBwZWFyYW5jZSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9EZWZhdWx0QXBwZWFyYW5jZShjb25zdCBDRlhfQnl0ZVN0cmluZyYgY3NEQSA9ICIiKQ0KLSAgICB7DQotICAgICAgICBtX2NzREEgPSBjc0RBOw0KLSAgICB9DQotDQotICAgIENQREZfRGVmYXVsdEFwcGVhcmFuY2UoY29uc3QgQ1BERl9EZWZhdWx0QXBwZWFyYW5jZSYgY0RBKQ0KLSAgICB7DQotICAgICAgICBtX2NzREEgPSAoQ0ZYX0J5dGVTdHJpbmcpKENQREZfRGVmYXVsdEFwcGVhcmFuY2UmKWNEQTsNCi0gICAgfQ0KLQ0KLQ0KLSAgICBvcGVyYXRvciBDRlhfQnl0ZVN0cmluZygpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX2NzREE7DQotICAgIH0NCi0NCi0gICAgY29uc3QgQ1BERl9EZWZhdWx0QXBwZWFyYW5jZSYgb3BlcmF0b3IgPShjb25zdCBDRlhfQnl0ZVN0cmluZyYgY3NEQSkNCi0gICAgew0KLSAgICAgICAgbV9jc0RBID0gY3NEQTsNCi0gICAgICAgIHJldHVybiAqdGhpczsNCi0gICAgfQ0KLQ0KLSAgICBjb25zdCBDUERGX0RlZmF1bHRBcHBlYXJhbmNlJiBvcGVyYXRvciA9KGNvbnN0IENQREZfRGVmYXVsdEFwcGVhcmFuY2UmIGNEQSkNCi0gICAgew0KLSAgICAgICAgbV9jc0RBID0gKENGWF9CeXRlU3RyaW5nKShDUERGX0RlZmF1bHRBcHBlYXJhbmNlJiljREE7DQotICAgICAgICByZXR1cm4gKnRoaXM7DQotICAgIH0NCi0NCi0NCi0NCi0gICAgRlhfQk9PTAkJCQlIYXNGb250KCk7DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQlHZXRGb250U3RyaW5nKCk7DQotDQotICAgIHZvaWQJCQkJR2V0Rm9udChDRlhfQnl0ZVN0cmluZyYgY3NGb250TmFtZVRhZywgRlhfRkxPQVQmIGZGb250U2l6ZSk7DQotDQotDQotDQotDQotICAgIEZYX0JPT0wJCQkJSGFzQ29sb3IoRlhfQk9PTCBiU3Ryb2tpbmdPcGVyYXRpb24gPSBGQUxTRSk7DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQlHZXRDb2xvclN0cmluZyhGWF9CT09MIGJTdHJva2luZ09wZXJhdGlvbiA9IEZBTFNFKTsNCi0NCi0gICAgdm9pZAkJCQlHZXRDb2xvcihpbnQmIGlDb2xvclR5cGUsIEZYX0ZMT0FUIGZjWzRdLCBGWF9CT09MIGJTdHJva2luZ09wZXJhdGlvbiA9IEZBTFNFKTsNCi0NCi0gICAgdm9pZAkJCQlHZXRDb2xvcihGWF9BUkdCJiBjb2xvciwgaW50JiBpQ29sb3JUeXBlLCBGWF9CT09MIGJTdHJva2luZ09wZXJhdGlvbiA9IEZBTFNFKTsNCi0NCi0NCi0NCi0NCi0gICAgRlhfQk9PTAkJCQlIYXNUZXh0TWF0cml4KCk7DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQlHZXRUZXh0TWF0cml4U3RyaW5nKCk7DQotDQotICAgIENGWF9BZmZpbmVNYXRyaXgJR2V0VGV4dE1hdHJpeCgpOw0KLQ0KLXByb3RlY3RlZDoNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcJCW1fY3NEQTsNCi19Ow0KLSNkZWZpbmUgRklFTERUWVBFX1VOS05PV04JCQkwDQotI2RlZmluZSBGSUVMRFRZUEVfUFVTSEJVVFRPTgkJMQ0KLSNkZWZpbmUgRklFTERUWVBFX0NIRUNLQk9YCQkJMg0KLSNkZWZpbmUgRklFTERUWVBFX1JBRElPQlVUVE9OCQkzDQotI2RlZmluZSBGSUVMRFRZUEVfQ09NQk9CT1gJCQk0DQotI2RlZmluZSBGSUVMRFRZUEVfTElTVEJPWAkJCTUNCi0jZGVmaW5lIEZJRUxEVFlQRV9URVhURklFTEQJCQk2DQotI2RlZmluZSBGSUVMRFRZUEVfU0lHTkFUVVJFCQkJNw0KLWNsYXNzIENQREZfSW50ZXJGb3JtIDogcHVibGljIENGWF9Qcml2YXRlRGF0YSwgcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDUERGX0ludGVyRm9ybShDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIEZYX0JPT0wgYlVwZGF0ZUFQKTsNCi0NCi0gICAgfkNQREZfSW50ZXJGb3JtKCk7DQotDQotDQotDQotICAgIHN0YXRpYyB2b2lkCQkJCUVuYWJsZVVwZGF0ZUFQKEZYX0JPT0wgYlVwZGF0ZUFQKTsNCi0NCi0gICAgc3RhdGljIEZYX0JPT0wJCQlVcGRhdGluZ0FQRW5hYmxlZCgpOw0KLQ0KLQ0KLSAgICBzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJR2VuZXJhdGVOZXdSZXNvdXJjZU5hbWUoY29uc3QgQ1BERl9EaWN0aW9uYXJ5KiBwUmVzRGljdCwgRlhfTFBDU1RSIGNzVHlwZSwgaW50IGlNaW5MZW4gPSAyLCBGWF9MUENTVFIgY3NQcmVmaXggPSAiIik7DQotDQotDQotDQotICAgIHN0YXRpYyBDUERGX0ZvbnQqCQlBZGRTeXN0ZW1EZWZhdWx0Rm9udChjb25zdCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQpOw0KLQ0KLSAgICBzdGF0aWMgQ1BERl9Gb250KgkJQWRkU3lzdGVtRm9udChjb25zdCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIENGWF9CeXRlU3RyaW5nIGNzRm9udE5hbWUsIEZYX0JZVEUgaUNoYXJTZXQgPSAxKTsNCi0NCi0gICAgc3RhdGljIENQREZfRm9udCoJCUFkZFN5c3RlbUZvbnQoY29uc3QgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDRlhfV2lkZVN0cmluZyBjc0ZvbnROYW1lLCBGWF9CWVRFIGlDaGFyU2V0ID0gMSk7DQotDQotICAgIHN0YXRpYyBDUERGX0ZvbnQqCQlBZGRTdGFuZGFyZEZvbnQoY29uc3QgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDRlhfQnl0ZVN0cmluZyBjc0ZvbnROYW1lKTsNCi0NCi0gICAgc3RhdGljIENGWF9CeXRlU3RyaW5nCUdldE5hdGl2ZUZvbnQoRlhfQllURSBpQ2hhclNldCwgRlhfTFBWT0lEIHBMb2dGb250ID0gTlVMTCk7DQotDQotICAgIHN0YXRpYyBDRlhfQnl0ZVN0cmluZwlHZXROYXRpdmVGb250KEZYX0xQVk9JRCBwTG9nRm9udCA9IE5VTEwpOw0KLQ0KLSAgICBzdGF0aWMgRlhfQllURQkJCUdldE5hdGl2ZUNoYXJTZXQoKTsNCi0NCi0gICAgc3RhdGljIENQREZfRm9udCoJCUFkZE5hdGl2ZUZvbnQoRlhfQllURSBpQ2hhclNldCwgY29uc3QgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50KTsNCi0NCi0gICAgc3RhdGljIENQREZfRm9udCoJCUFkZE5hdGl2ZUZvbnQoY29uc3QgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50KTsNCi0NCi0NCi0NCi0NCi0gICAgRlhfQk9PTAkJCQkJVmFsaWRhdGVGaWVsZE5hbWUoQ0ZYX1dpZGVTdHJpbmcmIGNzTmV3RmllbGROYW1lLCBpbnQgaVR5cGUpOw0KLQ0KLSAgICBGWF9CT09MCQkJCQlWYWxpZGF0ZUZpZWxkTmFtZShjb25zdCBDUERGX0Zvcm1GaWVsZCogcEZpZWxkLCBDRlhfV2lkZVN0cmluZyYgY3NOZXdGaWVsZE5hbWUpOw0KLQ0KLSAgICBGWF9CT09MCQkJCQlWYWxpZGF0ZUZpZWxkTmFtZShjb25zdCBDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCwgQ0ZYX1dpZGVTdHJpbmcmIGNzTmV3RmllbGROYW1lKTsNCi0NCi0NCi0NCi0NCi0gICAgRlhfRFdPUkQJCQkJQ291bnRGaWVsZHMoY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJmNzRmllbGROYW1lID0gTCIiKTsNCi0NCi0gICAgQ1BERl9Gb3JtRmllbGQqCQkJR2V0RmllbGQoRlhfRFdPUkQgaW5kZXgsIGNvbnN0IENGWF9XaWRlU3RyaW5nICZjc0ZpZWxkTmFtZSA9IEwiIik7DQotDQotICAgIHZvaWQJCQkJCUdldEFsbEZpZWxkTmFtZXMoQ0ZYX1dpZGVTdHJpbmdBcnJheSYgYWxsRmllbGROYW1lcyk7DQotDQotICAgIEZYX0JPT0wJCQkJCUlzVmFsaWRGb3JtRmllbGQoY29uc3Qgdm9pZCogcEZpZWxkKTsNCi0NCi0gICAgQ1BERl9Gb3JtRmllbGQqCQkJR2V0RmllbGRCeURpY3QoQ1BERl9EaWN0aW9uYXJ5KiBwRmllbGREaWN0KSBjb25zdDsNCi0NCi0NCi0NCi0NCi0gICAgRlhfRFdPUkQJCQkJQ291bnRDb250cm9scyhDRlhfV2lkZVN0cmluZyBjc0ZpZWxkTmFtZSA9IEwiIik7DQotDQotICAgIENQREZfRm9ybUNvbnRyb2wqCQlHZXRDb250cm9sKEZYX0RXT1JEIGluZGV4LCBDRlhfV2lkZVN0cmluZyBjc0ZpZWxkTmFtZSA9IEwiIik7DQotDQotICAgIEZYX0JPT0wJCQkJCUlzVmFsaWRGb3JtQ29udHJvbChjb25zdCB2b2lkKiBwQ29udHJvbCk7DQotDQotICAgIGludAkJCQkJCUNvdW50UGFnZUNvbnRyb2xzKENQREZfUGFnZSogcFBhZ2UpIGNvbnN0Ow0KLQ0KLSAgICBDUERGX0Zvcm1Db250cm9sKgkJR2V0UGFnZUNvbnRyb2woQ1BERl9QYWdlKiBwUGFnZSwgaW50IGluZGV4KSBjb25zdDsNCi0NCi0NCi0gICAgQ1BERl9Gb3JtQ29udHJvbCoJCUdldENvbnRyb2xBdFBvaW50KENQREZfUGFnZSogcFBhZ2UsIEZYX0ZMT0FUIHBkZl94LCBGWF9GTE9BVCBwZGZfeSkgY29uc3Q7DQotDQotICAgIENQREZfRm9ybUNvbnRyb2wqCQlHZXRDb250cm9sQnlEaWN0KENQREZfRGljdGlvbmFyeSogcFdpZGdldERpY3QpIGNvbnN0Ow0KLQ0KLQ0KLQ0KLQ0KLSAgICBGWF9EV09SRAkJCQlDb3VudEludGVybmFsRmllbGRzKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBjc0ZpZWxkTmFtZSA9IEwiIikgY29uc3Q7DQotDQotICAgIENQREZfRGljdGlvbmFyeSoJCUdldEludGVybmFsRmllbGQoRlhfRFdPUkQgaW5kZXgsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBjc0ZpZWxkTmFtZSA9IEwiIikgY29uc3Q7DQotDQotDQotDQotDQotDQotICAgIENQREZfRG9jdW1lbnQqCQkJR2V0RG9jdW1lbnQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRG9jdW1lbnQ7DQotICAgIH0NCi0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KgkJR2V0Rm9ybURpY3QoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRm9ybURpY3Q7DQotICAgIH0NCi0NCi0NCi0NCi0NCi0gICAgRlhfQk9PTAkJCQkJTmVlZENvbnN0cnVjdEFQKCk7DQotDQotICAgIHZvaWQJCQkJCU5lZWRDb25zdHJ1Y3RBUChGWF9CT09MIGJOZWVkQVApOw0KLQ0KLQ0KLQ0KLQ0KLSAgICBpbnQJCQkJCQlDb3VudEZpZWxkc0luQ2FsY3VsYXRpb25PcmRlcigpOw0KLQ0KLSAgICBDUERGX0Zvcm1GaWVsZCoJCQlHZXRGaWVsZEluQ2FsY3VsYXRpb25PcmRlcihpbnQgaW5kZXgpOw0KLQ0KLSAgICBpbnQJCQkJCQlGaW5kRmllbGRJbkNhbGN1bGF0aW9uT3JkZXIoY29uc3QgQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCk7DQotDQotDQotDQotDQotICAgIEZYX0RXT1JECQkJCUNvdW50Rm9ybUZvbnRzKCk7DQotDQotICAgIENQREZfRm9udCoJCQkJR2V0Rm9ybUZvbnQoRlhfRFdPUkQgaW5kZXgsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOw0KLQ0KLSAgICBDUERGX0ZvbnQqCQkJCUdldEZvcm1Gb250KENGWF9CeXRlU3RyaW5nIGNzTmFtZVRhZyk7DQotDQotICAgIENQREZfRm9udCoJCQkJR2V0Rm9ybUZvbnQoQ0ZYX0J5dGVTdHJpbmcgY3NGb250TmFtZSwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZyk7DQotDQotICAgIENQREZfRm9udCoJCQkJR2V0TmF0aXZlRm9ybUZvbnQoRlhfQllURSBpQ2hhclNldCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZyk7DQotDQotICAgIENQREZfRm9udCoJCQkJR2V0TmF0aXZlRm9ybUZvbnQoQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZyk7DQotDQotICAgIEZYX0JPT0wJCQkJCUZpbmRGb3JtRm9udChjb25zdCBDUERGX0ZvbnQqIHBGb250LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJRmluZEZvcm1Gb250KENGWF9CeXRlU3RyaW5nIGNzRm9udE5hbWUsIENQREZfRm9udComIHBGb250LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKTsNCi0NCi0gICAgaW5saW5lIEZYX0JPT0wJCQlGaW5kRm9ybUZvbnQoQ0ZYX1dpZGVTdHJpbmcgY3NGb250TmFtZSwgQ1BERl9Gb250KiYgcEZvbnQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBGaW5kRm9ybUZvbnQoUERGX0VuY29kZVRleHQoY3NGb250TmFtZSksIHBGb250LCBjc05hbWVUYWcpOw0KLSAgICB9DQotDQotDQotDQotDQotDQotICAgIHZvaWQJCQkJCUFkZEZvcm1Gb250KGNvbnN0IENQREZfRm9udCogcEZvbnQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOw0KLQ0KLSAgICBDUERGX0ZvbnQqCQkJCUFkZE5hdGl2ZUZvcm1Gb250KEZYX0JZVEUgaUNoYXJTZXQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOw0KLQ0KLSAgICBDUERGX0ZvbnQqCQkJCUFkZE5hdGl2ZUZvcm1Gb250KENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOw0KLQ0KLSAgICB2b2lkCQkJCQlSZW1vdmVGb3JtRm9udChjb25zdCBDUERGX0ZvbnQqIHBGb250KTsNCi0NCi0gICAgdm9pZAkJCQkJUmVtb3ZlRm9ybUZvbnQoQ0ZYX0J5dGVTdHJpbmcgY3NOYW1lVGFnKTsNCi0NCi0NCi0NCi0NCi0gICAgQ1BERl9EZWZhdWx0QXBwZWFyYW5jZQlHZXREZWZhdWx0QXBwZWFyYW5jZSgpOw0KLQ0KLSAgICBDUERGX0ZvbnQqCQkJCUdldERlZmF1bHRGb3JtRm9udCgpOw0KLQ0KLQ0KLQ0KLSAgICBpbnQJCQkJCQlHZXRGb3JtQWxpZ25tZW50KCk7DQotDQotDQotDQotDQotICAgIENQREZfRm9ybUZpZWxkKgkJCUNoZWNrUmVxdWlyZWRGaWVsZHMoY29uc3QgQ0ZYX1B0ckFycmF5ICpmaWVsZHMgPSBOVUxMLCBGWF9CT09MIGJJbmNsdWRlT3JFeGNsdWRlID0gVFJVRSkgY29uc3Q7DQotDQotICAgIENGREZfRG9jdW1lbnQqIAkJCUV4cG9ydFRvRkRGKEZYX1dTVFIgcGRmX3BhdGgsIEZYX0JPT0wgYlNpbXBsZUZpbGVTcGVjID0gRkFMU0UpIGNvbnN0Ow0KLQ0KLSAgICBDRkRGX0RvY3VtZW50KgkJCUV4cG9ydFRvRkRGKEZYX1dTVFIgcGRmX3BhdGgsIENGWF9QdHJBcnJheSYgZmllbGRzLCBGWF9CT09MIGJJbmNsdWRlT3JFeGNsdWRlID0gVFJVRSwgRlhfQk9PTCBiU2ltcGxlRmlsZVNwZWMgPSBGQUxTRSkgY29uc3Q7DQotDQotICAgIEZYX0JPT0wJCQkJCUltcG9ydEZyb21GREYoY29uc3QgQ0ZERl9Eb2N1bWVudCogcEZERkRvYywgRlhfQk9PTCBiTm90aWZ5ID0gRkFMU0UpOw0KLQ0KLQ0KLQ0KLQ0KLSAgICBGWF9CT09MCQkJCQlSZXNldEZvcm0oY29uc3QgQ0ZYX1B0ckFycmF5JiBmaWVsZHMsIEZYX0JPT0wgYkluY2x1ZGVPckV4Y2x1ZGUgPSBUUlVFLCBGWF9CT09MIGJOb3RpZnkgPSBGQUxTRSk7DQotDQotICAgIEZYX0JPT0wJCQkJCVJlc2V0Rm9ybShGWF9CT09MIGJOb3RpZnkgPSBGQUxTRSk7DQotDQotICAgIHZvaWQJCQkJCVJlbG9hZEZvcm0oKTsNCi0NCi0gICAgQ1BERl9Gb3JtTm90aWZ5KgkJR2V0Rm9ybU5vdGlmeSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BGb3JtTm90aWZ5Ow0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJCVNldEZvcm1Ob3RpZnkoY29uc3QgQ1BERl9Gb3JtTm90aWZ5KiBwTm90aWZ5KTsNCi0NCi0NCi0gICAgaW50CQkJCQkJR2V0UGFnZVdpdGhXaWRnZXQoaW50IGlDdXJQYWdlLCBGWF9CT09MIGJOZXh0KTsNCi0NCi0NCi0NCi0gICAgRlhfQk9PTAkJCQkJSXNVcGRhdGVkKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fYlVwZGF0ZWQ7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCQkJQ2xlYXJVcGRhdGVkRmxhZygpDQotICAgIHsNCi0gICAgICAgIG1fYlVwZGF0ZWQgPSBGQUxTRTsNCi0gICAgfQ0KLQ0KLQ0KLSAgICBGWF9CT09MCQkJCQlIYXNYRkFGb3JtKCkgY29uc3Q7DQotDQotICAgIHZvaWQJCQkJCUZpeFBhZ2VGaWVsZHMoY29uc3QgQ1BERl9QYWdlKiBwUGFnZSk7DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBzdGF0aWMgRlhfQk9PTAkJCW1fYlVwZGF0ZUFQOw0KLQ0KLSAgICB2b2lkCQkJCQlMb2FkRmllbGQoQ1BERl9EaWN0aW9uYXJ5KiBwRmllbGREaWN0LCBpbnQgbkxldmVsID0gMCk7DQotDQotICAgIENQREZfT2JqZWN0KgkJCUdldEZpZWxkQXR0cihDUERGX0RpY3Rpb25hcnkqIHBGaWVsZERpY3QsIGNvbnN0IEZYX0NIQVIqIG5hbWUpOw0KLQ0KLSAgICBDUERGX0Zvcm1GaWVsZCoJCQlBZGRUZXJtaW5hbEZpZWxkKGNvbnN0IENQREZfRGljdGlvbmFyeSogcEZpZWxkRGljdCk7DQotDQotICAgIENQREZfRm9ybUNvbnRyb2wqCQlBZGRDb250cm9sKGNvbnN0IENQREZfRm9ybUZpZWxkKiBwRmllbGQsIGNvbnN0IENQREZfRGljdGlvbmFyeSogcFdpZGdldERpY3QpOw0KLQ0KLSAgICB2b2lkCQkJCQlGREZfSW1wb3J0RmllbGQoQ1BERl9EaWN0aW9uYXJ5KiBwRmllbGQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBwYXJlbnRfbmFtZSwgRlhfQk9PTCBiTm90aWZ5ID0gRkFMU0UsIGludCBuTGV2ZWwgPSAwKTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJVmFsaWRhdGVGaWVsZE5hbWUoQ0ZYX1dpZGVTdHJpbmcmIGNzTmV3RmllbGROYW1lLCBpbnQgaVR5cGUsIGNvbnN0IENQREZfRm9ybUZpZWxkKiBwRXhjbHVkZWRGaWVsZCwgY29uc3QgQ1BERl9Gb3JtQ29udHJvbCogcEV4Y2x1ZGVkQ29udHJvbCk7DQotDQotICAgIGludAkJCQkJCUNvbXBhcmVGaWVsZE5hbWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIG5hbWUxLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgbmFtZTIpOw0KLQ0KLSAgICBpbnQJCQkJCQlDb21wYXJlRmllbGROYW1lKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lMSwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUyKTsNCi0NCi0gICAgQ1BERl9Eb2N1bWVudCoJCQltX3BEb2N1bWVudDsNCi0NCi0gICAgRlhfQk9PTAkJCQkJbV9iR2VuZXJhdGVBUDsNCi0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KgkJbV9wRm9ybURpY3Q7DQotDQotICAgIENGWF9NYXBQdHJUb1B0cgkJCW1fQ29udHJvbE1hcDsNCi0NCi0gICAgQ0ZpZWxkVHJlZSAqbV9wRmllbGRUcmVlOw0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZwkJCW1fYnNFbmNvZGluZzsNCi0NCi0gICAgQ1BERl9Gb3JtTm90aWZ5KgkJbV9wRm9ybU5vdGlmeTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJbV9iVXBkYXRlZDsNCi0gICAgZnJpZW5kIGNsYXNzIENQREZfRm9ybUNvbnRyb2w7DQotICAgIGZyaWVuZCBjbGFzcyBDUERGX0Zvcm1GaWVsZDsNCi19Ow0KLSNkZWZpbmUgRk9STUZJRUxEX1JFQURPTkxZCQkweDAxDQotI2RlZmluZSBGT1JNRklFTERfUkVRVUlSRUQJCTB4MDINCi0jZGVmaW5lIEZPUk1GSUVMRF9OT0VYUE9SVAkJMHgwNA0KLSNkZWZpbmUgRk9STVJBRElPX05PVE9HR0xFT0ZGCTB4MTAwDQotI2RlZmluZSBGT1JNUkFESU9fVU5JU09OCQkweDIwMA0KLSNkZWZpbmUgRk9STVRFWFRfTVVMVElMSU5FCQkweDEwMA0KLSNkZWZpbmUgRk9STVRFWFRfUEFTU1dPUkQJCTB4MjAwDQotI2RlZmluZSBGT1JNVEVYVF9OT1NDUk9MTAkJMHg0MDANCi0jZGVmaW5lIEZPUk1URVhUX0NPTUIJCQkweDgwMA0KLSNkZWZpbmUgRk9STUNPTUJPX0VESVQJCQkweDEwMA0KLSNkZWZpbmUgRk9STUxJU1RfTVVMVElTRUxFQ1QJMHgxMDANCi1jbGFzcyBDUERGX0Zvcm1GaWVsZCA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgZW51bSBUeXBlIHsNCi0gICAgICAgIFVua25vd24sDQotICAgICAgICBQdXNoQnV0dG9uLA0KLSAgICAgICAgUmFkaW9CdXR0b24sDQotICAgICAgICBDaGVja0JveCwNCi0gICAgICAgIFRleHQsDQotICAgICAgICBSaWNoVGV4dCwNCi0gICAgICAgIEZpbGUsDQotICAgICAgICBMaXN0Qm94LA0KLSAgICAgICAgQ29tYm9Cb3gsDQotICAgICAgICBTaWduDQotICAgIH07DQotDQotICAgIENGWF9XaWRlU3RyaW5nCQkJR2V0RnVsbE5hbWUoKTsNCi0NCi0gICAgVHlwZQkJCQkJR2V0VHlwZSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX1R5cGU7DQotICAgIH0NCi0NCi0gICAgRlhfRFdPUkQJCQkJR2V0RmxhZ3MoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9GbGFnczsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX0ludGVyRm9ybSoJCQlHZXRJbnRlckZvcm0oKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRm9ybTsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqCQlHZXRGaWVsZERpY3QoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRGljdDsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJCQlTZXRGaWVsZERpY3QoQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCkNCi0gICAgew0KLSAgICAgICAgbV9wRGljdCA9IHBEaWN0Ow0KLSAgICB9DQotDQotICAgIEZYX0JPT0wJCQkJCVJlc2V0RmllbGQoRlhfQk9PTCBiTm90aWZ5ID0gRkFMU0UpOw0KLQ0KLQ0KLQ0KLSAgICBpbnQJCQkJCQlDb3VudENvbnRyb2xzKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fQ29udHJvbExpc3QuR2V0U2l6ZSgpOw0KLSAgICB9DQotDQotICAgIENQREZfRm9ybUNvbnRyb2wqCQlHZXRDb250cm9sKGludCBpbmRleCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIChDUERGX0Zvcm1Db250cm9sKiltX0NvbnRyb2xMaXN0LkdldEF0KGluZGV4KTsNCi0gICAgfQ0KLQ0KLSAgICBpbnQJCQkJCQlHZXRDb250cm9sSW5kZXgoY29uc3QgQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2wpOw0KLQ0KLQ0KLQ0KLQ0KLSAgICBpbnQJCQkJCQlHZXRGaWVsZFR5cGUoKTsNCi0NCi0NCi0NCi0NCi0gICAgQ1BERl9BQWN0aW9uCQkJR2V0QWRkaXRpb25hbEFjdGlvbigpOw0KLQ0KLQ0KLQ0KLQ0KLSAgICBDRlhfV2lkZVN0cmluZwkJCUdldEFsdGVybmF0ZU5hbWUoKTsNCi0NCi0NCi0NCi0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcJCQlHZXRNYXBwaW5nTmFtZSgpOw0KLQ0KLQ0KLQ0KLQ0KLSAgICBGWF9EV09SRAkJCQlHZXRGaWVsZEZsYWdzKCk7DQotDQotDQotDQotDQotICAgIENGWF9CeXRlU3RyaW5nCQkJR2V0RGVmYXVsdFN0eWxlKCk7DQotDQotDQotDQotDQotICAgIENGWF9XaWRlU3RyaW5nCQkJR2V0UmljaFRleHRTdHJpbmcoKTsNCi0NCi0NCi0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcJCQlHZXRWYWx1ZSgpOw0KLQ0KLSAgICBDRlhfV2lkZVN0cmluZwkJCUdldERlZmF1bHRWYWx1ZSgpOw0KLQ0KLSAgICBGWF9CT09MCQkJCQlTZXRWYWx1ZShjb25zdCBDRlhfV2lkZVN0cmluZyYgdmFsdWUsIEZYX0JPT0wgYk5vdGlmeSA9IEZBTFNFKTsNCi0NCi0NCi0NCi0NCi0NCi0gICAgaW50CQkJCQkJR2V0TWF4TGVuKCk7DQotDQotDQotDQotDQotICAgIGludAkJCQkJCUNvdW50U2VsZWN0ZWRJdGVtcygpOw0KLQ0KLSAgICBpbnQJCQkJCQlHZXRTZWxlY3RlZEluZGV4KGludCBpbmRleCk7DQotDQotICAgIEZYX0JPT0wJCQkJCUNsZWFyU2VsZWN0aW9uKEZYX0JPT0wgYk5vdGlmeSA9IEZBTFNFKTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJSXNJdGVtU2VsZWN0ZWQoaW50IGluZGV4KTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJU2V0SXRlbVNlbGVjdGlvbihpbnQgaW5kZXgsIEZYX0JPT0wgYlNlbGVjdGVkLCBGWF9CT09MIGJOb3RpZnkgPSBGQUxTRSk7DQotDQotICAgIEZYX0JPT0wJCQkJCUlzSXRlbURlZmF1bHRTZWxlY3RlZChpbnQgaW5kZXgpOw0KLQ0KLSAgICBpbnQJCQkJCQlHZXREZWZhdWx0U2VsZWN0ZWRJdGVtKCk7DQotDQotDQotDQotDQotICAgIGludAkJCQkJCUNvdW50T3B0aW9ucygpOw0KLQ0KLSAgICBDRlhfV2lkZVN0cmluZwkJCUdldE9wdGlvbkxhYmVsKGludCBpbmRleCk7DQotDQotICAgIENGWF9XaWRlU3RyaW5nCQkJR2V0T3B0aW9uVmFsdWUoaW50IGluZGV4KTsNCi0NCi0gICAgaW50CQkJCQkJRmluZE9wdGlvbihDRlhfV2lkZVN0cmluZyBjc09wdExhYmVsKTsNCi0NCi0gICAgaW50CQkJCQkJRmluZE9wdGlvblZhbHVlKEZYX0xQQ1dTVFIgY3NPcHRWYWx1ZSwgaW50IGlTdGFydEluZGV4ID0gMCk7DQotDQotDQotDQotDQotICAgIEZYX0JPT0wJCQkJCUNoZWNrQ29udHJvbChpbnQgaUNvbnRyb2xJbmRleCwgRlhfQk9PTCBiQ2hlY2tlZCwgRlhfQk9PTCBiTm90aWZ5ID0gRkFMU0UpOw0KLQ0KLQ0KLQ0KLQ0KLSAgICBpbnQJCQkJCQlHZXRUb3BWaXNpYmxlSW5kZXgoKTsNCi0NCi0NCi0NCi0NCi0gICAgaW50CQkJCQkJQ291bnRTZWxlY3RlZE9wdGlvbnMoKTsNCi0NCi0gICAgaW50CQkJCQkJR2V0U2VsZWN0ZWRPcHRpb25JbmRleChpbnQgaW5kZXgpOw0KLQ0KLSAgICBGWF9CT09MCQkJCQlJc09wdGlvblNlbGVjdGVkKGludCBpT3B0SW5kZXgpOw0KLQ0KLSAgICBGWF9CT09MCQkJCQlTZWxlY3RPcHRpb24oaW50IGlPcHRJbmRleCwgRlhfQk9PTCBiU2VsZWN0ZWQsIEZYX0JPT0wgYk5vdGlmeSA9IEZBTFNFKTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJQ2xlYXJTZWxlY3RlZE9wdGlvbnMoRlhfQk9PTCBiTm90aWZ5ID0gRkFMU0UpOw0KLQ0KLQ0KLQ0KLQ0KLSAgICBGWF9GTE9BVAkJCQlHZXRGb250U2l6ZSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0ZvbnRTaXplOw0KLSAgICB9DQotDQotICAgIENQREZfRm9udCoJCQkJR2V0Rm9udCgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BGb250Ow0KLSAgICB9DQotDQotcHJvdGVjdGVkOg0KLQ0KLSAgICBDUERGX0Zvcm1GaWVsZChDUERGX0ludGVyRm9ybSogcEZvcm0sIENQREZfRGljdGlvbmFyeSogcERpY3QpOw0KLQ0KLSAgICB+Q1BERl9Gb3JtRmllbGQoKTsNCi0NCi0gICAgQ1BERl9Gb3JtRmllbGQ6OlR5cGUJbV9UeXBlOw0KLQ0KLSAgICBGWF9EV09SRAkJCQltX0ZsYWdzOw0KLQ0KLSAgICBDUERGX0ludGVyRm9ybSoJCQltX3BGb3JtOw0KLQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqCQltX3BEaWN0Ow0KLQ0KLSAgICBDRlhfUHRyQXJyYXkJCQltX0NvbnRyb2xMaXN0Ow0KLSAgICBmcmllbmQgY2xhc3MJCQlDUERGX0ludGVyRm9ybTsNCi0gICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9Gb3JtQ29udHJvbDsNCi0NCi0NCi0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcJCQlHZXRWYWx1ZShGWF9CT09MIGJEZWZhdWx0KTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJU2V0VmFsdWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHZhbHVlLCBGWF9CT09MIGJEZWZhdWx0LCBGWF9CT09MIGJOb3RpZnkpOw0KLQ0KLQ0KLSAgICB2b2lkCQkJCQlTeW5jRmllbGRGbGFncygpOw0KLQ0KLSAgICBpbnQJCQkJCQlGaW5kTGlzdFNlbChDUERGX1N0cmluZyogc3RyKTsNCi0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcJCQlHZXRPcHRpb25UZXh0KGludCBpbmRleCwgaW50IHN1Yl9pbmRleCk7DQotDQotICAgIHZvaWQJCQkJCUxvYWREQSgpOw0KLQ0KLSAgICB2b2lkCQkJCQlVcGRhdGVBUChDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCk7DQotDQotDQotDQotICAgIENGWF9XaWRlU3RyaW5nCQkJR2V0Q2hlY2tWYWx1ZShGWF9CT09MIGJEZWZhdWx0KTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJU2V0Q2hlY2tWYWx1ZShjb25zdCBDRlhfV2lkZVN0cmluZyYgdmFsdWUsIEZYX0JPT0wgYkRlZmF1bHQsIEZYX0JPT0wgYk5vdGlmeSk7DQotDQotDQotICAgIEZYX0ZMT0FUCQkJCW1fRm9udFNpemU7DQotDQotICAgIENQREZfRm9udCoJCQkJbV9wRm9udDsNCi19Ow0KLUNQREZfT2JqZWN0KglGUERGX0dldEZpZWxkQXR0cihDUERGX0RpY3Rpb25hcnkqIHBGaWVsZERpY3QsIGNvbnN0IEZYX0NIQVIqIG5hbWUsIGludCBuTGV2ZWwgPSAwKTsNCi1jbGFzcyBDUERGX0ljb25GaXQgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfSWNvbkZpdChDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gTlVMTCkNCi0gICAgew0KLSAgICAgICAgbV9wRGljdCA9IHBEaWN0Ow0KLSAgICB9DQotDQotICAgIG9wZXJhdG9yIENQREZfRGljdGlvbmFyeSooKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRGljdDsNCi0gICAgfQ0KLQ0KLQ0KLQ0KLQ0KLSAgICBlbnVtIFNjYWxlTWV0aG9kIHsNCi0gICAgICAgIEFsd2F5cyA9IDAsDQotICAgICAgICBCaWdnZXIsDQotICAgICAgICBTbWFsbGVyLA0KLSAgICAgICAgTmV2ZXINCi0gICAgfTsNCi0NCi0gICAgU2NhbGVNZXRob2QJCQkJR2V0U2NhbGVNZXRob2QoKTsNCi0NCi0NCi0NCi0NCi0gICAgRlhfQk9PTAkJCQkJSXNQcm9wb3J0aW9uYWxTY2FsZSgpOw0KLQ0KLQ0KLQ0KLQ0KLSAgICB2b2lkCQkJCQlHZXRJY29uUG9zaXRpb24oRlhfRkxPQVQmIGZMZWZ0LCBGWF9GTE9BVCYgZkJvdHRvbSk7DQotDQotDQotDQotDQotICAgIEZYX0JPT0wJCQkJCUdldEZpdHRpbmdCb3VuZHMoKTsNCi0NCi0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KgkJbV9wRGljdDsNCi19Ow0KLQ0KLSNkZWZpbmUgVEVYVFBPU19DQVBUSU9OCQkwDQotI2RlZmluZSBURVhUUE9TX0lDT04JCTENCi0jZGVmaW5lIFRFWFRQT1NfQkVMT1cJCTINCi0jZGVmaW5lIFRFWFRQT1NfQUJPVkUJCTMNCi0jZGVmaW5lIFRFWFRQT1NfUklHSFQJCTQNCi0jZGVmaW5lIFRFWFRQT1NfTEVGVAkJNQ0KLSNkZWZpbmUgVEVYVFBPU19PVkVSTEFJRAk2DQotY2xhc3MgQ1BERl9Gb3JtQ29udHJvbCA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9Gb3JtRmllbGQ6OlR5cGUJR2V0VHlwZSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BGaWVsZC0+R2V0VHlwZSgpOw0KLSAgICB9DQotDQotICAgIENQREZfSW50ZXJGb3JtKgkJCUdldEludGVyRm9ybSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BGb3JtOw0KLSAgICB9DQotDQotICAgIENQREZfRm9ybUZpZWxkKgkJCUdldEZpZWxkKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcEZpZWxkOw0KLSAgICB9DQotDQotICAgIENQREZfRGljdGlvbmFyeSoJCUdldFdpZGdldCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BXaWRnZXREaWN0Ow0KLSAgICB9DQotDQotICAgIENGWF9GbG9hdFJlY3QJCQlHZXRSZWN0KCk7DQotDQotICAgIHZvaWQJCQkJCURyYXdDb250cm9sKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfUGFnZSogcFBhZ2UsIENQREZfQW5ub3Q6OkFwcGVhcmFuY2VNb2RlIG1vZGUsIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMgPSBOVUxMKTsNCi0NCi0NCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcJCQlHZXRDaGVja2VkQVBTdGF0ZSgpOw0KLQ0KLSAgICBDRlhfV2lkZVN0cmluZwkJCUdldEV4cG9ydFZhbHVlKCk7DQotDQotICAgIEZYX0JPT0wJCQkJCUlzQ2hlY2tlZCgpOw0KLQ0KLSAgICBGWF9CT09MCQkJCQlJc0RlZmF1bHRDaGVja2VkKCk7DQotDQotDQotDQotDQotICAgIGVudW0gSGlnaGxpZ2h0aW5nTW9kZQl7DQotICAgICAgICBOb25lID0gMCwNCi0gICAgICAgIEludmVydCwNCi0gICAgICAgIE91dGxpbmUsDQotICAgICAgICBQdXNoLA0KLSAgICAgICAgVG9nZ2xlDQotICAgIH07DQotDQotICAgIEhpZ2hsaWdodGluZ01vZGUJCUdldEhpZ2hsaWdodGluZ01vZGUoKTsNCi0NCi0NCi0NCi0NCi0gICAgRlhfQk9PTAkJCQkJSGFzTUtFbnRyeShDRlhfQnl0ZVN0cmluZyBjc0VudHJ5KTsNCi0NCi0NCi0NCi0NCi0gICAgaW50CQkJCQkJR2V0Um90YXRpb24oKTsNCi0NCi0NCi0NCi0NCi0gICAgaW5saW5lIEZYX0FSR0IJCQlHZXRCb3JkZXJDb2xvcihpbnQmIGlDb2xvclR5cGUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBHZXRDb2xvcihpQ29sb3JUeXBlLCAiQkMiKTsNCi0gICAgfQ0KLQ0KLSAgICBpbmxpbmUgRlhfRkxPQVQJCQlHZXRPcmlnaW5hbEJvcmRlckNvbG9yKGludCBpbmRleCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEdldE9yaWdpbmFsQ29sb3IoaW5kZXgsICJCQyIpOw0KLSAgICB9DQotDQotICAgIGlubGluZSB2b2lkCQkJCUdldE9yaWdpbmFsQm9yZGVyQ29sb3IoaW50JiBpQ29sb3JUeXBlLCBGWF9GTE9BVCBmY1s0XSkNCi0gICAgew0KLSAgICAgICAgR2V0T3JpZ2luYWxDb2xvcihpQ29sb3JUeXBlLCBmYywgIkJDIik7DQotICAgIH0NCi0NCi0NCi0NCi0NCi0gICAgaW5saW5lIEZYX0FSR0IJCQlHZXRCYWNrZ3JvdW5kQ29sb3IoaW50JiBpQ29sb3JUeXBlKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gR2V0Q29sb3IoaUNvbG9yVHlwZSwgIkJHIik7DQotICAgIH0NCi0NCi0gICAgaW5saW5lIEZYX0ZMT0FUCQkJR2V0T3JpZ2luYWxCYWNrZ3JvdW5kQ29sb3IoaW50IGluZGV4KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gR2V0T3JpZ2luYWxDb2xvcihpbmRleCwgIkJHIik7DQotICAgIH0NCi0NCi0gICAgaW5saW5lIHZvaWQJCQkJR2V0T3JpZ2luYWxCYWNrZ3JvdW5kQ29sb3IoaW50JiBpQ29sb3JUeXBlLCBGWF9GTE9BVCBmY1s0XSkNCi0gICAgew0KLSAgICAgICAgR2V0T3JpZ2luYWxDb2xvcihpQ29sb3JUeXBlLCBmYywgIkJHIik7DQotICAgIH0NCi0NCi0NCi0NCi0NCi0gICAgaW5saW5lIENGWF9XaWRlU3RyaW5nCUdldE5vcm1hbENhcHRpb24oKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gR2V0Q2FwdGlvbigiQ0EiKTsNCi0gICAgfQ0KLQ0KLQ0KLQ0KLQ0KLSAgICBpbmxpbmUgQ0ZYX1dpZGVTdHJpbmcJR2V0Um9sbG92ZXJDYXB0aW9uKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEdldENhcHRpb24oIlJDIik7DQotICAgIH0NCi0NCi0NCi0NCi0NCi0gICAgaW5saW5lIENGWF9XaWRlU3RyaW5nCUdldERvd25DYXB0aW9uKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEdldENhcHRpb24oIkFDIik7DQotICAgIH0NCi0NCi0NCi0NCi0NCi0gICAgaW5saW5lIENQREZfU3RyZWFtKgkJR2V0Tm9ybWFsSWNvbigpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBHZXRJY29uKCJJIik7DQotICAgIH0NCi0NCi0NCi0NCi0NCi0gICAgaW5saW5lIENQREZfU3RyZWFtKgkJR2V0Um9sbG92ZXJJY29uKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEdldEljb24oIlJJIik7DQotICAgIH0NCi0NCi0NCi0NCi0NCi0gICAgaW5saW5lIENQREZfU3RyZWFtKgkJR2V0RG93bkljb24oKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gR2V0SWNvbigiSVgiKTsNCi0gICAgfQ0KLQ0KLQ0KLQ0KLQ0KLSAgICBDUERGX0ljb25GaXQJCQlHZXRJY29uRml0KCk7DQotDQotDQotDQotDQotICAgIGludAkJCQkJCUdldFRleHRQb3NpdGlvbigpOw0KLQ0KLQ0KLQ0KLQ0KLSAgICBDUERGX0FjdGlvbgkJCQlHZXRBY3Rpb24oKTsNCi0NCi0NCi0NCi0NCi0gICAgQ1BERl9BQWN0aW9uCQkJR2V0QWRkaXRpb25hbEFjdGlvbigpOw0KLQ0KLQ0KLQ0KLQ0KLSAgICBDUERGX0RlZmF1bHRBcHBlYXJhbmNlCUdldERlZmF1bHRBcHBlYXJhbmNlKCk7DQotDQotICAgIENQREZfRm9udCoJCQkJR2V0RGVmYXVsdENvbnRyb2xGb250KCk7DQotDQotDQotDQotDQotICAgIGludAkJCQkJCUdldENvbnRyb2xBbGlnbm1lbnQoKTsNCi0NCi1wcm90ZWN0ZWQ6DQotDQotICAgIENQREZfRm9ybUNvbnRyb2woQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCwgQ1BERl9EaWN0aW9uYXJ5KiBwV2lkZ2V0RGljdCk7DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQkJR2V0T25TdGF0ZU5hbWUoKTsNCi0NCi0gICAgdm9pZAkJCQkJU2V0T25TdGF0ZU5hbWUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGNzT24pOw0KLQ0KLSAgICB2b2lkCQkJCQlDaGVja0NvbnRyb2woRlhfQk9PTCBiQ2hlY2tlZCk7DQotDQotICAgIEZYX0FSR0IJCQkJCUdldENvbG9yKGludCYgaUNvbG9yVHlwZSwgQ0ZYX0J5dGVTdHJpbmcgY3NFbnRyeSk7DQotDQotICAgIEZYX0ZMT0FUCQkJCUdldE9yaWdpbmFsQ29sb3IoaW50IGluZGV4LCBDRlhfQnl0ZVN0cmluZyBjc0VudHJ5KTsNCi0NCi0gICAgdm9pZAkJCQkJR2V0T3JpZ2luYWxDb2xvcihpbnQmIGlDb2xvclR5cGUsIEZYX0ZMT0FUIGZjWzRdLCBDRlhfQnl0ZVN0cmluZyBjc0VudHJ5KTsNCi0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcJCQlHZXRDYXB0aW9uKENGWF9CeXRlU3RyaW5nIGNzRW50cnkpOw0KLQ0KLSAgICBDUERGX1N0cmVhbSoJCQlHZXRJY29uKENGWF9CeXRlU3RyaW5nIGNzRW50cnkpOw0KLQ0KLSAgICBDUERGX0FwU2V0dGluZ3MJCQlHZXRNSyhGWF9CT09MIGJDcmVhdGUpOw0KLQ0KLSAgICBDUERGX0ludGVyRm9ybSoJCQltX3BGb3JtOw0KLQ0KLSAgICBDUERGX0Zvcm1GaWVsZCoJCQltX3BGaWVsZDsNCi0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KgkJbV9wV2lkZ2V0RGljdDsNCi0gICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9JbnRlckZvcm07DQotICAgIGZyaWVuZCBjbGFzcwkJCUNQREZfRm9ybUZpZWxkOw0KLX07DQotY2xhc3MgQ1BERl9Gb3JtTm90aWZ5IDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICB2aXJ0dWFsIH5DUERGX0Zvcm1Ob3RpZnkoKSB7fQ0KLQ0KLSAgICB2aXJ0dWFsIGludAkJQmVmb3JlVmFsdWVDaGFuZ2UoY29uc3QgQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCwgQ0ZYX1dpZGVTdHJpbmcmIGNzVmFsdWUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotDQotICAgIHZpcnR1YWwgaW50CQlBZnRlclZhbHVlQ2hhbmdlKGNvbnN0IENQREZfRm9ybUZpZWxkKiBwRmllbGQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotDQotICAgIHZpcnR1YWwgaW50CQlCZWZvcmVTZWxlY3Rpb25DaGFuZ2UoY29uc3QgQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCwgQ0ZYX1dpZGVTdHJpbmcmIGNzVmFsdWUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotDQotICAgIHZpcnR1YWwgaW50CQlBZnRlclNlbGVjdGlvbkNoYW5nZShjb25zdCBDUERGX0Zvcm1GaWVsZCogcEZpZWxkKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLQ0KLSAgICB2aXJ0dWFsIGludAkJQWZ0ZXJDaGVja2VkU3RhdHVzQ2hhbmdlKGNvbnN0IENQREZfRm9ybUZpZWxkKiBwRmllbGQsIGNvbnN0IENGWF9CeXRlQXJyYXkmIHN0YXR1c0FycmF5KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLQ0KLSAgICB2aXJ0dWFsIGludAkJQmVmb3JlRm9ybVJlc2V0KGNvbnN0IENQREZfSW50ZXJGb3JtKiBwRm9ybSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0NCi0gICAgdmlydHVhbCBpbnQJCUFmdGVyRm9ybVJlc2V0KGNvbnN0IENQREZfSW50ZXJGb3JtKiBwRm9ybSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0NCi0gICAgdmlydHVhbCBpbnQJCUJlZm9yZUZvcm1JbXBvcnREYXRhKGNvbnN0IENQREZfSW50ZXJGb3JtKiBwRm9ybSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0NCi0gICAgdmlydHVhbCBpbnQJCUFmdGVyRm9ybUltcG9ydERhdGEoY29uc3QgQ1BERl9JbnRlckZvcm0qIHBGb3JtKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLX07DQotRlhfQk9PTAkJRlBERl9HZW5lcmF0ZUFQKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfRGljdGlvbmFyeSogcEFubm90RGljdCk7DQotY2xhc3MgQ1BERl9QYWdlTGFiZWwgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfUGFnZUxhYmVsKENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCkNCi0gICAgew0KLSAgICAgICAgbV9wRG9jdW1lbnQgPSBwRG9jdW1lbnQ7DQotICAgIH0NCi0NCi0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcJCQkJCUdldExhYmVsKGludCBuUGFnZSkgY29uc3Q7DQotDQotICAgIEZYX0lOVDMyCQkJCQkJR2V0UGFnZUJ5TGFiZWwoRlhfQlNUUiBic0xhYmVsKSBjb25zdDsNCi0NCi0NCi0gICAgRlhfSU5UMzIJCQkJCQlHZXRQYWdlQnlMYWJlbChGWF9XU1RSIHdzTGFiZWwpIGNvbnN0Ow0KLQ0KLXByb3RlY3RlZDoNCi0gICAgQ1BERl9Eb2N1bWVudCoJCQkJCW1fcERvY3VtZW50Ow0KLX07DQotY2xhc3MgQ1BERl9NZXRhZGF0YQ0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfTWV0YWRhdGEoKTsNCi0NCi0NCi0gICAgfkNQREZfTWV0YWRhdGEoKTsNCi0NCi0gICAgdm9pZAkJCQlMb2FkRG9jKENQREZfRG9jdW1lbnQgKnBEb2MpOw0KLQ0KLQ0KLSAgICBGWF9JTlQzMgkJCUdldFN0cmluZyhGWF9CU1RSIGJzSXRlbSwgQ0ZYX1dpZGVTdHJpbmcgJndzU3RyKTsNCi0NCi0gICAgQ1hNTF9FbGVtZW50KgkJR2V0Um9vdCgpIGNvbnN0Ow0KLQ0KLSAgICBDWE1MX0VsZW1lbnQqCQlHZXRSREYoKSBjb25zdDsNCi0NCi1wcm90ZWN0ZWQ6DQotICAgIEZYX0xQVk9JRAltX3BEYXRhOw0KLX07DQotY2xhc3MgQ1BERl9WaWV3ZXJQcmVmZXJlbmNlcw0KLXsNCi1wdWJsaWM6DQotDQotICAgIENQREZfVmlld2VyUHJlZmVyZW5jZXMoQ1BERl9Eb2N1bWVudCAqcERvYyk7DQotDQotDQotICAgIH5DUERGX1ZpZXdlclByZWZlcmVuY2VzKCk7DQotDQotDQotICAgIEZYX0JPT0wgSXNEaXJlY3Rpb25SMkwoKSBjb25zdDsNCi0NCi0gICAgRlhfQk9PTCBQcmludFNjYWxpbmcoKSBjb25zdDsNCi0NCi0NCi1wcm90ZWN0ZWQ6DQotICAgIENQREZfRG9jdW1lbnQqCW1fcERvYzsNCi19Ow0KLWNsYXNzIENQREZfQXBTZXR0aW5ncyA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9BcFNldHRpbmdzKENQREZfRGljdGlvbmFyeSogcERpY3QgPSBOVUxMKQ0KLSAgICB7DQotICAgICAgICBtX3BEaWN0ID0gcERpY3Q7DQotICAgIH0NCi0NCi0gICAgb3BlcmF0b3IgQ1BERl9EaWN0aW9uYXJ5KiAoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRGljdDsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MCQkJCQlIYXNNS0VudHJ5KEZYX0JTVFIgY3NFbnRyeSk7DQotDQotDQotDQotICAgIGludAkJCQkJCUdldFJvdGF0aW9uKCk7DQotDQotDQotDQotDQotICAgIGlubGluZSBGWF9BUkdCCQkJR2V0Qm9yZGVyQ29sb3IoaW50JiBpQ29sb3JUeXBlKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gR2V0Q29sb3IoaUNvbG9yVHlwZSwgRlhfQlNUUkMoIkJDIikpOw0KLSAgICB9DQotDQotICAgIGlubGluZSBGWF9GTE9BVAkJCUdldE9yaWdpbmFsQm9yZGVyQ29sb3IoaW50IGluZGV4KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gR2V0T3JpZ2luYWxDb2xvcihpbmRleCwgRlhfQlNUUkMoIkJDIikpOw0KLSAgICB9DQotDQotICAgIGlubGluZSB2b2lkCQkJCUdldE9yaWdpbmFsQm9yZGVyQ29sb3IoaW50JiBpQ29sb3JUeXBlLCBGWF9GTE9BVCBmY1s0XSkNCi0gICAgew0KLSAgICAgICAgR2V0T3JpZ2luYWxDb2xvcihpQ29sb3JUeXBlLCBmYywgRlhfQlNUUkMoIkJDIikpOw0KLSAgICB9DQotDQotDQotDQotDQotICAgIGlubGluZSBGWF9BUkdCCQkJR2V0QmFja2dyb3VuZENvbG9yKGludCYgaUNvbG9yVHlwZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEdldENvbG9yKGlDb2xvclR5cGUsIEZYX0JTVFJDKCJCRyIpKTsNCi0gICAgfQ0KLQ0KLSAgICBpbmxpbmUgRlhfRkxPQVQJCQlHZXRPcmlnaW5hbEJhY2tncm91bmRDb2xvcihpbnQgaW5kZXgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBHZXRPcmlnaW5hbENvbG9yKGluZGV4LCBGWF9CU1RSQygiQkciKSk7DQotICAgIH0NCi0NCi0gICAgaW5saW5lIHZvaWQJCQkJR2V0T3JpZ2luYWxCYWNrZ3JvdW5kQ29sb3IoaW50JiBpQ29sb3JUeXBlLCBGWF9GTE9BVCBmY1s0XSkNCi0gICAgew0KLSAgICAgICAgR2V0T3JpZ2luYWxDb2xvcihpQ29sb3JUeXBlLCBmYywgRlhfQlNUUkMoIkJHIikpOw0KLSAgICB9DQotDQotDQotDQotDQotICAgIGlubGluZSBDRlhfV2lkZVN0cmluZwlHZXROb3JtYWxDYXB0aW9uKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEdldENhcHRpb24oRlhfQlNUUkMoIkNBIikpOw0KLSAgICB9DQotDQotDQotDQotDQotICAgIGlubGluZSBDRlhfV2lkZVN0cmluZwlHZXRSb2xsb3ZlckNhcHRpb24oKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gR2V0Q2FwdGlvbihGWF9CU1RSQygiUkMiKSk7DQotICAgIH0NCi0NCi0NCi0NCi0NCi0gICAgaW5saW5lIENGWF9XaWRlU3RyaW5nCUdldERvd25DYXB0aW9uKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEdldENhcHRpb24oRlhfQlNUUkMoIkFDIikpOw0KLSAgICB9DQotDQotDQotDQotDQotICAgIGlubGluZSBDUERGX1N0cmVhbSoJCUdldE5vcm1hbEljb24oKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gR2V0SWNvbihGWF9CU1RSQygiSSIpKTsNCi0gICAgfQ0KLQ0KLQ0KLQ0KLQ0KLSAgICBpbmxpbmUgQ1BERl9TdHJlYW0qCQlHZXRSb2xsb3Zlckljb24oKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gR2V0SWNvbihGWF9CU1RSQygiUkkiKSk7DQotICAgIH0NCi0NCi0NCi0NCi0NCi0gICAgaW5saW5lIENQREZfU3RyZWFtKgkJR2V0RG93bkljb24oKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gR2V0SWNvbihGWF9CU1RSQygiSVgiKSk7DQotICAgIH0NCi0NCi0NCi0NCi0NCi0gICAgQ1BERl9JY29uRml0CQkJR2V0SWNvbkZpdCgpOw0KLQ0KLQ0KLQ0KLQ0KLSAgICBpbnQJCQkJCQlHZXRUZXh0UG9zaXRpb24oKTsNCi0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KgkJbV9wRGljdDsNCi1wcm90ZWN0ZWQ6DQotDQotICAgIEZYX0FSR0IJCQkJCUdldENvbG9yKGludCYgaUNvbG9yVHlwZSwgRlhfQlNUUiBjc0VudHJ5KTsNCi0NCi0gICAgRlhfRkxPQVQJCQkJR2V0T3JpZ2luYWxDb2xvcihpbnQgaW5kZXgsIEZYX0JTVFIgY3NFbnRyeSk7DQotDQotICAgIHZvaWQJCQkJCUdldE9yaWdpbmFsQ29sb3IoaW50JiBpQ29sb3JUeXBlLCBGWF9GTE9BVCBmY1s0XSwgRlhfQlNUUiBjc0VudHJ5KTsNCi0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcJCQlHZXRDYXB0aW9uKEZYX0JTVFIgY3NFbnRyeSk7DQotDQotICAgIENQREZfU3RyZWFtKgkJCUdldEljb24oRlhfQlNUUiBjc0VudHJ5KTsNCi0gICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9Gb3JtQ29udHJvbDsNCi19Ow0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZQREZfRE9DX0hfCisjZGVmaW5lIF9GUERGX0RPQ19IXworI2lmbmRlZiBfRlBERl9QQVJTRVJfCisjaW5jbHVkZSAiLi4vZnBkZmFwaS9mcGRmX3BhcnNlci5oIgorI2VuZGlmCisjaWZuZGVmIF9GUERGX1JFTkRFUl8KKyNpbmNsdWRlICIuLi9mcGRmYXBpL2ZwZGZfcmVuZGVyLmgiCisjZW5kaWYKK2NsYXNzIENQREZfQWN0aW9uOworY2xhc3MgQ1BERl9Bbm5vdDsKK2NsYXNzIENQREZfQW5ub3RMaXN0OworY2xhc3MgQ1BERl9Cb29rbWFyazsKK2NsYXNzIENQREZfQm9va21hcmtUcmVlOworY2xhc3MgQ1BERl9EZXN0OworY2xhc3MgQ1BERl9MaW5rOworY2xhc3MgQ1BERl9MaW5rTGlzdDsKK2NsYXNzIENQREZfTWV0YWRhdGE7CitjbGFzcyBDUERGX05hbWVUcmVlOworY2xhc3MgQ1BERl9OdW1iZXJUcmVlOworY2xhc3MgQ1BERl9UZXh0T2JqZWN0OworY2xhc3MgQ1BERl9WaWV3ZXJQcmVmZXJlbmNlczsKK2NsYXNzIENQREZfUGFnZTsKK2NsYXNzIENQREZfUmVuZGVyT3B0aW9uczsKK2NsYXNzIENYTUxfRWxlbWVudDsKK2NsYXNzIENQREZfT0NDb250ZXh0OworY2xhc3MgQ1BERl9Eb2NKU0FjdGlvbnM7CitjbGFzcyBDUERGX0FjdGlvbkZpZWxkczsKK2NsYXNzIENQREZfQUFjdGlvbjsKK2NsYXNzIENQREZfRmlsZVNwZWM7CitjbGFzcyBDUERGX0ljb25GaXQ7CitjbGFzcyBDUERGX0RlZmF1bHRBcHBlYXJhbmNlOworY2xhc3MgQ1BERl9JbnRlckZvcm07CitjbGFzcyBDUERGX0Zvcm1GaWVsZDsKK2NsYXNzIENQREZfRm9ybU5vdGlmeTsKK2NsYXNzIENQREZfRm9ybUNvbnRyb2w7CitjbGFzcyBDUERGX0xXaW5QYXJhbTsKK2NsYXNzIENGaWVsZFRyZWU7CitjbGFzcyBDUERGX0FwU2V0dGluZ3M7CitjbGFzcyBDUERGX05hbWVUcmVlIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENQREZfTmFtZVRyZWUoQ1BERl9EaWN0aW9uYXJ5KiBwUm9vdCkKKyAgICB7CisgICAgICAgIG1fcFJvb3QgPSBwUm9vdDsKKyAgICB9CisKKyAgICBDUERGX05hbWVUcmVlKENQREZfRG9jdW1lbnQqIHBEb2MsIEZYX0JTVFIgY2F0ZWdvcnkpOworCisgICAgQ1BERl9PYmplY3QqCQlMb29rdXBWYWx1ZShpbnQgbkluZGV4LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lKSBjb25zdDsKKworICAgIENQREZfT2JqZWN0KgkJTG9va3VwVmFsdWUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZSkgY29uc3Q7CisKKyAgICBDUERGX0FycmF5KgkJCUxvb2t1cE5hbWVkRGVzdChDUERGX0RvY3VtZW50KiBwRG9jLCBGWF9CU1RSIHNOYW1lKTsKKworICAgIGludAkJCQkJR2V0SW5kZXgoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZSkgY29uc3Q7CisKKyAgICBpbnQJCQkJCUdldENvdW50KCkgY29uc3Q7CisKKworICAgIENQREZfRGljdGlvbmFyeSoJR2V0Um9vdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wUm9vdDsKKyAgICB9CisKK3Byb3RlY3RlZDoKKworICAgIENQREZfRGljdGlvbmFyeSoJCW1fcFJvb3Q7Cit9OworY2xhc3MgQ1BERl9Cb29rbWFya1RyZWUgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ1BERl9Cb29rbWFya1RyZWUoQ1BERl9Eb2N1bWVudCogcERvYykKKyAgICB7CisgICAgICAgIG1fcERvY3VtZW50ID0gcERvYzsKKyAgICB9CitwdWJsaWM6CisKKworCisgICAgQ1BERl9Cb29rbWFyawkJR2V0Rmlyc3RDaGlsZChDUERGX0Jvb2ttYXJrIHBhcmVudCk7CisKKyAgICBDUERGX0Jvb2ttYXJrCQlHZXROZXh0U2libGluZyhDUERGX0Jvb2ttYXJrIGJvb2ttYXJrKTsKKworCisgICAgQ1BERl9Eb2N1bWVudCoJCUdldERvY3VtZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BEb2N1bWVudDsKKyAgICB9Citwcm90ZWN0ZWQ6CisKKyAgICBDUERGX0RvY3VtZW50KgkJbV9wRG9jdW1lbnQ7Cit9OworI2RlZmluZSBQREZCT09LTUFSS19JVEFMSUMJCQkxCisjZGVmaW5lIFBERkJPT0tNQVJLX0JPTEQJCQkyCitjbGFzcyBDUERGX0Jvb2ttYXJrIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENQREZfQm9va21hcmsoQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IE5VTEwpCisgICAgeworICAgICAgICBtX3BEaWN0ID0gcERpY3Q7CisgICAgfQorCisgICAgb3BlcmF0b3IgQ1BERl9EaWN0aW9uYXJ5KigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wRGljdDsKKyAgICB9CisKKworCisgICAgRlhfRFdPUkQJCQlHZXRDb2xvclJlZigpOworCisgICAgRlhfRFdPUkQJCQlHZXRGb250U3R5bGUoKTsKKworICAgIENGWF9XaWRlU3RyaW5nCQlHZXRUaXRsZSgpOworCisKKworCisgICAgQ1BERl9EZXN0CQkJR2V0RGVzdChDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQpOworCisgICAgQ1BERl9BY3Rpb24JCQlHZXRBY3Rpb24oKTsKKworCisgICAgQ1BERl9EaWN0aW9uYXJ5KgltX3BEaWN0OworfTsKKyNkZWZpbmUgUERGWk9PTV9YWVoJCQkJCTEKKyNkZWZpbmUgUERGWk9PTV9GSVRQQUdFCQkJCTIKKyNkZWZpbmUgUERGWk9PTV9GSVRIT1JaCQkJCTMKKyNkZWZpbmUgUERGWk9PTV9GSVRWRVJUCQkJCTQKKyNkZWZpbmUgUERGWk9PTV9GSVRSRUNUCQkJCTUKKyNkZWZpbmUgUERGWk9PTV9GSVRCQk9YCQkJCTYKKyNkZWZpbmUgUERGWk9PTV9GSVRCSE9SWgkJCTcKKworI2RlZmluZSBQREZaT09NX0ZJVEJWRVJUCQkJOAorY2xhc3MgQ1BERl9EZXN0IDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENQREZfRGVzdChDUERGX09iamVjdCogcE9iaiA9IE5VTEwpCisgICAgeworICAgICAgICBtX3BPYmogPSBwT2JqOworICAgIH0KKworICAgIG9wZXJhdG9yIENQREZfT2JqZWN0KiAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcE9iajsKKyAgICB9CisKKyAgICBDRlhfQnl0ZVN0cmluZwkJR2V0UmVtb3RlTmFtZSgpOworCisgICAgaW50CQkJCQlHZXRQYWdlSW5kZXgoQ1BERl9Eb2N1bWVudCogcERvYyk7CisKKyAgICBGWF9EV09SRAkJCUdldFBhZ2VPYmpOdW0oKTsKKworICAgIGludAkJCQkJR2V0Wm9vbU1vZGUoKTsKKworICAgIEZYX0ZMT0FUCQkJR2V0UGFyYW0oaW50IGluZGV4KTsKKworCisgICAgQ1BERl9PYmplY3QqCQltX3BPYmo7Cit9OworY2xhc3MgQ1BERl9PQ0NvbnRleHQgOiBwdWJsaWMgQ0ZYX09iamVjdCwgcHVibGljIElQREZfT0NDb250ZXh0Cit7CitwdWJsaWM6CisKKyAgICBlbnVtIFVzYWdlVHlwZSB7CisgICAgICAgIFZpZXcgPSAwLAorICAgICAgICBEZXNpZ24sCisgICAgICAgIFByaW50LAorICAgICAgICBFeHBvcnQKKyAgICB9OworCisgICAgQ1BERl9PQ0NvbnRleHQoQ1BERl9Eb2N1bWVudCAqcERvYywgVXNhZ2VUeXBlIGVVc2FnZVR5cGUgPSBWaWV3KTsKKworICAgIHZpcnR1YWwgfkNQREZfT0NDb250ZXh0KCk7CisKKyAgICBDUERGX0RvY3VtZW50KglHZXREb2N1bWVudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wRG9jdW1lbnQ7CisgICAgfQorCisgICAgVXNhZ2VUeXBlCQlHZXRVc2FnZVR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZVVzYWdlVHlwZTsKKyAgICB9CisKKyAgICBGWF9CT09MCQkJQ2hlY2tPQ0dWaXNpYmxlKGNvbnN0IENQREZfRGljdGlvbmFyeSAqcE9DR0RpY3QpOworCisgICAgdm9pZAkJCVJlc2V0T0NDb250ZXh0KCk7Citwcm90ZWN0ZWQ6CisKKyAgICBGWF9CT09MCQkJTG9hZE9DR1N0YXRlRnJvbUNvbmZpZyhGWF9CU1RSIGNzQ29uZmlnLCBjb25zdCBDUERGX0RpY3Rpb25hcnkgKnBPQ0dEaWN0LCBGWF9CT09MICZiVmFsaWRDb25maWcpIGNvbnN0OworCisgICAgRlhfQk9PTAkJCUxvYWRPQ0dTdGF0ZShjb25zdCBDUERGX0RpY3Rpb25hcnkgKnBPQ0dEaWN0KSBjb25zdDsKKworICAgIEZYX0JPT0wJCQlHZXRPQ0dWaXNpYmxlKGNvbnN0IENQREZfRGljdGlvbmFyeSAqcE9DR0RpY3QpOworCisgICAgRlhfQk9PTAkJCUdldE9DR1ZFKENQREZfQXJyYXkgKnBFeHByZXNzaW9uLCBGWF9CT09MIGJGcm9tQ29uZmlnLCBpbnQgbkxldmVsID0gMCk7CisKKyAgICBGWF9CT09MCQkJTG9hZE9DTURTdGF0ZShjb25zdCBDUERGX0RpY3Rpb25hcnkgKnBPQ01ERGljdCwgRlhfQk9PTCBiRnJvbUNvbmZpZyk7CisKKyAgICBDUERGX0RvY3VtZW50CQkqbV9wRG9jdW1lbnQ7CisKKyAgICBVc2FnZVR5cGUJCQltX2VVc2FnZVR5cGU7CisKKyAgICBDRlhfTWFwUHRyVGVtcGxhdGU8Y29uc3QgQ1BERl9EaWN0aW9uYXJ5Kiwgdm9pZCo+CW1fT0NHU3RhdGVzOworfTsKK2NsYXNzIENQREZfTFdpblBhcmFtIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENQREZfTFdpblBhcmFtKENQREZfRGljdGlvbmFyeSogcERpY3QpCisgICAgeworICAgICAgICBtX3BEaWN0ID0gcERpY3Q7CisgICAgfQorCisgICAgb3BlcmF0b3IgQ1BERl9EaWN0aW9uYXJ5KiAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcERpY3Q7CisgICAgfQorCisgICAgaW5saW5lIENGWF9CeXRlU3RyaW5nCUdldEZpbGVOYW1lKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BEaWN0LT5HZXRTdHJpbmcoIkYiKTsKKyAgICB9CisKKworICAgIGlubGluZSBDRlhfQnl0ZVN0cmluZwlHZXREZWZhdWx0RGlyZWN0b3J5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BEaWN0LT5HZXRTdHJpbmcoIkQiKTsKKyAgICB9CisKKworICAgIGlubGluZSBDRlhfQnl0ZVN0cmluZwlHZXRPcGVyYXRpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcERpY3QtPkdldFN0cmluZygiTyIpOworICAgIH0KKworCisgICAgaW5saW5lIENGWF9CeXRlU3RyaW5nCUdldFBhcmFtZXRlcigpCisgICAgeworICAgICAgICByZXR1cm4gbV9wRGljdC0+R2V0U3RyaW5nKCJQIik7CisgICAgfQorCisgICAgQ1BERl9EaWN0aW9uYXJ5KgkJbV9wRGljdDsKK307CitjbGFzcyBDUERGX0FjdGlvbkZpZWxkcyA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDUERGX0FjdGlvbkZpZWxkcyhjb25zdCBDUERGX0FjdGlvbiogcEFjdGlvbikKKyAgICB7CisgICAgICAgIG1fcEFjdGlvbiA9IChDUERGX0FjdGlvbiopcEFjdGlvbjsKKyAgICB9CisKKyAgICBvcGVyYXRvciBDUERGX0FjdGlvbiooKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcEFjdGlvbjsKKyAgICB9CisKKyAgICBGWF9EV09SRAkJCQlHZXRGaWVsZHNDb3VudCgpIGNvbnN0OworCisgICAgdm9pZAkJCQkJR2V0QWxsRmllbGRzKENGWF9QdHJBcnJheSYgZmllbGRPYmplY3RzKSBjb25zdDsKKworICAgIENQREZfT2JqZWN0KgkJCUdldEZpZWxkKEZYX0RXT1JEIGlJbmRleCkgY29uc3Q7CisKKyAgICBDUERGX0FjdGlvbioJCQltX3BBY3Rpb247Cit9OworCisjZGVmaW5lIFBERk5BTUVEX05FWFRQQUdFCQkxCisjZGVmaW5lIFBERk5BTUVEX1BSRVZQQUdFCQkyCisjZGVmaW5lIFBERk5BTUVEX0ZJUlNUUEFHRQkJMworI2RlZmluZSBQREZOQU1FRF9MQVNUUEFHRQkJNAorI2RlZmluZSBQREZKU19NQVhMRU5HVEgJCQk2NAorY2xhc3MgQ1BERl9BY3Rpb24gOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ1BERl9BY3Rpb24oQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IE5VTEwpCisgICAgeworICAgICAgICBtX3BEaWN0ID0gcERpY3Q7CisgICAgfQorCisgICAgb3BlcmF0b3IgQ1BERl9EaWN0aW9uYXJ5KiAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcERpY3Q7CisgICAgfQorCisgICAgZW51bSBBY3Rpb25UeXBlIHsKKyAgICAgICAgVW5rbm93biA9IDAsCisgICAgICAgIEdvVG8sCisgICAgICAgIEdvVG9SLAorICAgICAgICBHb1RvRSwKKyAgICAgICAgTGF1bmNoLAorICAgICAgICBUaHJlYWQsCisgICAgICAgIFVSSSwKKyAgICAgICAgU291bmQsCisgICAgICAgIE1vdmllLAorICAgICAgICBIaWRlLAorICAgICAgICBOYW1lZCwKKyAgICAgICAgU3VibWl0Rm9ybSwKKyAgICAgICAgUmVzZXRGb3JtLAorICAgICAgICBJbXBvcnREYXRhLAorICAgICAgICBKYXZhU2NyaXB0LAorICAgICAgICBTZXRPQ0dTdGF0ZSwKKyAgICAgICAgUmVuZGl0aW9uLAorICAgICAgICBUcmFucywKKyAgICAgICAgR29UbzNEVmlldworICAgIH07CisKKyAgICBDRlhfQnl0ZVN0cmluZwkJR2V0VHlwZU5hbWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcERpY3QtPkdldFN0cmluZygiUyIpOworICAgIH0KKworICAgIEFjdGlvblR5cGUJCQlHZXRUeXBlKCkgY29uc3Q7CisKKworCisgICAgQ1BERl9EZXN0CQkJR2V0RGVzdChDUERGX0RvY3VtZW50KiBwRG9jKSBjb25zdDsKKworCisKKworCisgICAgQ0ZYX1dpZGVTdHJpbmcJCUdldEZpbGVQYXRoKCkgY29uc3Q7CisKKworCisKKyAgICBGWF9CT09MCQkJCUdldE5ld1dpbmRvdygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wRGljdC0+R2V0Qm9vbGVhbigiTmV3V2luZG93Iik7CisgICAgfQorCisKKworCisgICAgQ1BERl9MV2luUGFyYW0JCUdldFdpblBhcmFtKCkgY29uc3Q7CisKKworCisKKyAgICBDRlhfQnl0ZVN0cmluZwkJR2V0VVJJKENQREZfRG9jdW1lbnQqIHBEb2MpIGNvbnN0OworCisKKworCisgICAgRlhfQk9PTAkJCQlHZXRNb3VzZU1hcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wRGljdC0+R2V0Qm9vbGVhbigiSXNNYXAiKTsKKyAgICB9CisKKworCisKKyAgICBDUERGX0FjdGlvbkZpZWxkcwlHZXRXaWRnZXRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KKworCisKKworICAgIEZYX0JPT0wJCQkJR2V0SGlkZVN0YXR1cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wRGljdC0+R2V0Qm9vbGVhbigiSCIsIFRSVUUpOworICAgIH0KKworCisKKworICAgIENGWF9CeXRlU3RyaW5nCQlHZXROYW1lZEFjdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wRGljdC0+R2V0U3RyaW5nKCJOIik7CisgICAgfQorCisKKworCisgICAgRlhfRFdPUkQJCQlHZXRGbGFncygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wRGljdC0+R2V0SW50ZWdlcigiRmxhZ3MiKTsKKyAgICB9CisKKworCisKKyAgICBDRlhfV2lkZVN0cmluZwkJR2V0SmF2YVNjcmlwdCgpIGNvbnN0OworCisKKworCisgICAgQ1BERl9EaWN0aW9uYXJ5KglHZXRBbm5vdCgpIGNvbnN0OworCisKKworCisgICAgRlhfSU5UMzIJCQlHZXRPcGVyYXRpb25UeXBlKCkgY29uc3Q7CisKKworCisKKyAgICBDUERGX1N0cmVhbSoJCUdldFNvdW5kU3RyZWFtKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BEaWN0LT5HZXRTdHJlYW0oIlNvdW5kIik7CisgICAgfQorCisgICAgRlhfRkxPQVQJCQlHZXRWb2x1bWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcERpY3QtPkdldE51bWJlcigiVm9sdW1lIik7CisgICAgfQorCisgICAgRlhfQk9PTAkJCQlJc1N5bmNocm9ub3VzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BEaWN0LT5HZXRCb29sZWFuKCJTeW5jaHJvbm91cyIpOworICAgIH0KKworICAgIEZYX0JPT0wJCQkJSXNSZXBlYXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcERpY3QtPkdldEJvb2xlYW4oIlJlcGVhdCIpOworICAgIH0KKworICAgIEZYX0JPT0wJCQkJSXNNaXhQbGF5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BEaWN0LT5HZXRCb29sZWFuKCJNaXgiKTsKKyAgICB9CisKKworCisKKyAgICBGWF9EV09SRAkJCUdldFN1YkFjdGlvbnNDb3VudCgpIGNvbnN0OworCisgICAgQ1BERl9BY3Rpb24JCQlHZXRTdWJBY3Rpb24oRlhfRFdPUkQgaUluZGV4KSBjb25zdDsKKworCisgICAgQ1BERl9EaWN0aW9uYXJ5KgltX3BEaWN0OworfTsKK2NsYXNzIENQREZfQUFjdGlvbiA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDUERGX0FBY3Rpb24oQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IE5VTEwpCisgICAgeworICAgICAgICBtX3BEaWN0ID0gcERpY3Q7CisgICAgfQorCisgICAgb3BlcmF0b3IgQ1BERl9EaWN0aW9uYXJ5KigpCWNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wRGljdDsKKyAgICB9CisKKyAgICBlbnVtIEFBY3Rpb25UeXBlIHsKKyAgICAgICAgQ3Vyc29yRW50ZXIgPSAwLAorICAgICAgICBDdXJzb3JFeGl0LAorICAgICAgICBCdXR0b25Eb3duLAorICAgICAgICBCdXR0b25VcCwKKyAgICAgICAgR2V0Rm9jdXMsCisgICAgICAgIExvc2VGb2N1cywKKyAgICAgICAgUGFnZU9wZW4sCisgICAgICAgIFBhZ2VDbG9zZSwKKyAgICAgICAgUGFnZVZpc2libGUsCisgICAgICAgIFBhZ2VJbnZpc2libGUsCisgICAgICAgIE9wZW5QYWdlLAorICAgICAgICBDbG9zZVBhZ2UsCisgICAgICAgIEtleVN0cm9rZSwKKyAgICAgICAgRm9ybWF0LAorICAgICAgICBWYWxpZGF0ZSwKKyAgICAgICAgQ2FsY3VsYXRlLAorICAgICAgICBDbG9zZURvY3VtZW50LAorICAgICAgICBTYXZlRG9jdW1lbnQsCisgICAgICAgIERvY3VtZW50U2F2ZWQsCisgICAgICAgIFByaW50RG9jdW1lbnQsCisgICAgICAgIERvY3VtZW50UHJpbnRlZAorICAgIH07CisKKyAgICBGWF9CT09MCQkJCUFjdGlvbkV4aXN0KEFBY3Rpb25UeXBlIGVUeXBlKSBjb25zdDsKKworICAgIENQREZfQWN0aW9uCQkJR2V0QWN0aW9uKEFBY3Rpb25UeXBlIGVUeXBlKSBjb25zdDsKKworICAgIEZYX1BPU0lUSU9OCQkJR2V0U3RhcnRQb3MoKSBjb25zdDsKKworICAgIENQREZfQWN0aW9uCQkJR2V0TmV4dEFjdGlvbihGWF9QT1NJVElPTiYgcG9zLCBBQWN0aW9uVHlwZSYgZVR5cGUpIGNvbnN0OworCisgICAgQ1BERl9EaWN0aW9uYXJ5KgltX3BEaWN0OworfTsKK2NsYXNzIENQREZfRG9jSlNBY3Rpb25zIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBDUERGX0RvY0pTQWN0aW9ucyhDUERGX0RvY3VtZW50KiBwRG9jKTsKKworCisgICAgaW50CQkJCQlDb3VudEpTQWN0aW9ucygpIGNvbnN0OworCisgICAgQ1BERl9BY3Rpb24JCQlHZXRKU0FjdGlvbihpbnQgaW5kZXgsIENGWF9CeXRlU3RyaW5nJiBjc05hbWUpIGNvbnN0OworCisgICAgQ1BERl9BY3Rpb24JCQlHZXRKU0FjdGlvbihjb25zdCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lKSBjb25zdDsKKworICAgIGludAkJCQkJRmluZEpTQWN0aW9uKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBjc05hbWUpIGNvbnN0OworCisKKyAgICBDUERGX0RvY3VtZW50KgkJR2V0RG9jdW1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcERvY3VtZW50OworICAgIH0KKworcHJvdGVjdGVkOgorCisgICAgQ1BERl9Eb2N1bWVudCoJCW1fcERvY3VtZW50OworfTsKK2NsYXNzIENQREZfRmlsZVNwZWMgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ1BERl9GaWxlU3BlYygpOworCisgICAgQ1BERl9GaWxlU3BlYyhDUERGX09iamVjdCAqcE9iaikKKyAgICB7CisgICAgICAgIG1fcE9iaiA9IHBPYmo7CisgICAgfQorCisgICAgb3BlcmF0b3IgQ1BERl9PYmplY3QqKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BPYmo7CisgICAgfQorCisgICAgRlhfQk9PTAkJCUlzVVJMKCkgY29uc3Q7CisKKyAgICBGWF9CT09MCQkJR2V0RmlsZU5hbWUoQ0ZYX1dpZGVTdHJpbmcgJndzRmlsZU5hbWUpIGNvbnN0OworCisgICAgQ1BERl9TdHJlYW0qCUdldEZpbGVTdHJlYW0oKSBjb25zdDsKKworICAgIHZvaWQJCQlTZXRGaWxlTmFtZShGWF9XU1RSIHdzRmlsZU5hbWUsIEZYX0JPT0wgYlVSTCA9IEZBTFNFKTsKK3Byb3RlY3RlZDoKKworICAgIENQREZfT2JqZWN0CQkqbV9wT2JqOworfTsKK2NsYXNzIENQREZfTGlua0xpc3QgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ1BERl9MaW5rTGlzdChDUERGX0RvY3VtZW50KiBwRG9jKQorICAgIHsKKyAgICAgICAgbV9wRG9jdW1lbnQgPSBwRG9jOworICAgIH0KKworICAgIH5DUERGX0xpbmtMaXN0KCk7CisKKyAgICBDUERGX0xpbmsJCQlHZXRMaW5rQXRQb2ludChDUERGX1BhZ2UqIHBQYWdlLCBGWF9GTE9BVCBwZGZfeCwgRlhfRkxPQVQgcGRmX3kpOworCisgICAgaW50CQkJCQlDb3VudExpbmtzKENQREZfUGFnZSogcFBhZ2UpOworCisgICAgQ1BERl9MaW5rCQkJR2V0TGluayhDUERGX1BhZ2UqIHBQYWdlLCBpbnQgaW5kZXgpOworCisgICAgQ1BERl9Eb2N1bWVudCoJCUdldERvY3VtZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BEb2N1bWVudDsKKyAgICB9Citwcm90ZWN0ZWQ6CisKKyAgICBDUERGX0RvY3VtZW50KgkJbV9wRG9jdW1lbnQ7CisKKyAgICBDRlhfTWFwUHRyVG9QdHIJCW1fUGFnZU1hcDsKKworICAgIENGWF9QdHJBcnJheSoJCUdldFBhZ2VMaW5rcyhDUERGX1BhZ2UqIHBQYWdlKTsKKworICAgIHZvaWQJCQkJTG9hZFBhZ2VMaW5rcyhDUERGX1BhZ2UqIHBQYWdlLCBDRlhfUHRyQXJyYXkqIHBMaXN0KTsKK307CitjbGFzcyBDUERGX0xpbmsgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ1BERl9MaW5rKENQREZfRGljdGlvbmFyeSogcERpY3QgPSBOVUxMKQorICAgIHsKKyAgICAgICAgbV9wRGljdCA9IHBEaWN0OworICAgIH0KKworICAgIG9wZXJhdG9yIENQREZfRGljdGlvbmFyeSooKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcERpY3Q7CisgICAgfQorCisgICAgQ0ZYX0Zsb2F0UmVjdAkJR2V0UmVjdCgpOworCisKKworICAgIENQREZfRGVzdAkJCUdldERlc3QoQ1BERl9Eb2N1bWVudCogcERvYyk7CisKKyAgICBDUERGX0FjdGlvbgkJCUdldEFjdGlvbigpOworCisKKyAgICBDUERGX0RpY3Rpb25hcnkqCW1fcERpY3Q7Cit9OworI2RlZmluZSBBTk5PVEZMQUdfSU5WSVNJQkxFCQkJMQorI2RlZmluZSBBTk5PVEZMQUdfSElEREVOCQkJMgorI2RlZmluZSBBTk5PVEZMQUdfUFJJTlQJCQkJNAorI2RlZmluZSBBTk5PVEZMQUdfTk9aT09NCQkJOAorI2RlZmluZSBBTk5PVEZMQUdfTk9ST1RBVEUJCQkweDEwCisjZGVmaW5lIEFOTk9URkxBR19OT1ZJRVcJCQkweDIwCisjZGVmaW5lIEFOTk9URkxBR19SRUFET05MWQkJCTB4NDAKKyNkZWZpbmUgQU5OT1RGTEFHX0xPQ0tFRAkJCTB4ODAKKyNkZWZpbmUgQU5OT1RGTEFHX1RPR0dMRU5PVklFVwkJMHgxMDAKK2NsYXNzIENQREZfQW5ub3QgOiBwdWJsaWMgQ0ZYX1ByaXZhdGVEYXRhLCBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ1BERl9Bbm5vdChDUERGX0RpY3Rpb25hcnkqIHBEaWN0KTsKKworICAgIH5DUERGX0Fubm90KCk7CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCW1fcEFubm90RGljdDsKKworICAgIENGWF9CeXRlU3RyaW5nCQlHZXRTdWJUeXBlKCkgY29uc3Q7CisKKyAgICBGWF9EV09SRAkJCUdldEZsYWdzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BBbm5vdERpY3QtPkdldEludGVnZXIoIkYiKTsKKyAgICB9CisKKyAgICB2b2lkCQkJCUdldFJlY3QoQ0ZYX0Zsb2F0UmVjdCYgcmVjdCkgY29uc3Q7CisKKyAgICBlbnVtIEFwcGVhcmFuY2VNb2RlCXsKKyAgICAgICAgTm9ybWFsLAorICAgICAgICBSb2xsb3ZlciwKKyAgICAgICAgRG93bgorICAgIH07CisKKyAgICBGWF9CT09MCQkJCURyYXdBcHBlYXJhbmNlKGNvbnN0IENQREZfUGFnZSogcFBhZ2UsIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBVc2VyMkRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGVhcmFuY2VNb2RlIG1vZGUsIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMpOworCisgICAgRlhfQk9PTAkJCQlEcmF3SW5Db250ZXh0KGNvbnN0IENQREZfUGFnZSogcFBhZ2UsIGNvbnN0IENQREZfUmVuZGVyQ29udGV4dCogcENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBVc2VyMkRldmljZSwgQXBwZWFyYW5jZU1vZGUgbW9kZSk7CisKKyAgICB2b2lkCQkJCUNsZWFyQ2FjaGVkQVAoKTsKKworCisgICAgdm9pZAkJCQlEcmF3Qm9yZGVyKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBVc2VyMkRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucyk7CisKKyAgICBDUERGX1BhZ2VPYmplY3QqCUdldEJvcmRlcihGWF9CT09MIGJQcmludCwgY29uc3QgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucyk7CisKKworCisgICAgaW50CQkJCQlDb3VudElSVE5vdGVzKCk7CisKKyAgICBDUERGX0Fubm90KgkJCUdldElSVE5vdGUoaW50IGluZGV4KTsKKworCisgICAgQ1BERl9Gb3JtKgkJCUdldEFQRm9ybShjb25zdCBDUERGX1BhZ2UqIHBQYWdlLCBBcHBlYXJhbmNlTW9kZSBtb2RlKTsKK3ByaXZhdGU6CisKKyAgICBDRlhfTWFwUHRyVG9QdHIJCW1fQVBNYXA7Citwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNzCQlDUERGX0Fubm90TGlzdDsKKworICAgIENQREZfQW5ub3RMaXN0KgkJbV9wTGlzdDsKKworICAgIENQREZfUmVmZXJlbmNlKgkJTmV3QW5ub3RSZWYoKTsKK307CitjbGFzcyBDUERGX0Fubm90TGlzdCA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDUERGX0Fubm90TGlzdChDUERGX1BhZ2UqIHBQYWdlKTsKKworICAgIH5DUERGX0Fubm90TGlzdCgpOworCisgICAgdm9pZAlHZXRBbm5vdE1hdHJpeChjb25zdCBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpY3QsIGNvbnN0IENGWF9NYXRyaXgqIHBVc2VyMkRldmljZSwgQ0ZYX01hdHJpeCAmbWF0cml4KSBjb25zdDsKKworICAgIHZvaWQJR2V0QW5ub3RSZWN0KGNvbnN0IENQREZfRGljdGlvbmFyeSogcEFubm90RGljdCwgY29uc3QgQ0ZYX01hdHJpeCogcFVzZXIyRGV2aWNlLCBDUERGX1JlY3QgJnJ0QW5ub3QpIGNvbnN0OworCisgICAgdm9pZAkJCQlEaXNwbGF5QW5ub3RzKGNvbnN0IENQREZfUGFnZSogcFBhZ2UsIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIEZYX0JPT0wgYlNob3dXaWRnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMpOworCisgICAgdm9pZAkJCQlEaXNwbGF5QW5ub3RzKGNvbnN0IENQREZfUGFnZSogcFBhZ2UsIENQREZfUmVuZGVyQ29udGV4dCogcENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYlByaW50aW5nLCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LCBGWF9CT09MIGJTaG93V2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zKQorICAgIHsKKyAgICAgICAgRGlzcGxheUFubm90cyhwUGFnZSwgTlVMTCwgcENvbnRleHQsIGJQcmludGluZywgcE1hdHJpeCwgYlNob3dXaWRnZXQgPyAzIDogMSwgcE9wdGlvbnMsIE5VTEwpOworICAgIH0KKworICAgIHZvaWQJCQkJRGlzcGxheUFubm90cyhjb25zdCBDUERGX1BhZ2UqIHBQYWdlLCBDUERGX1JlbmRlckNvbnRleHQqIHBDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9CT09MIGJQcmludGluZywgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgRlhfQk9PTCBiU2hvd1dpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucywgRlhfUkVDVCAqcENsaXBSZWN0KQorICAgIHsKKyAgICAgICAgRGlzcGxheUFubm90cyhwUGFnZSwgTlVMTCwgcENvbnRleHQsIGJQcmludGluZywgcE1hdHJpeCwgYlNob3dXaWRnZXQgPyAzIDogMSwgcE9wdGlvbnMsIHBDbGlwUmVjdCk7CisgICAgfQorCisgICAgdm9pZAkJCQlEaXNwbGF5QW5ub3RzKGNvbnN0IENQREZfUGFnZSogcFBhZ2UsIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfUmVuZGVyQ29udGV4dCogcENvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYlByaW50aW5nLCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LCBGWF9EV09SRCBkd0Fubm90RmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMsIEZYX1JFQ1QqIHBDbGlwUmVjdCk7CisKKworCisgICAgQ1BERl9Bbm5vdCoJCQlHZXRBdChpbnQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gKENQREZfQW5ub3QqKW1fQW5ub3RMaXN0LkdldEF0KGluZGV4KTsKKyAgICB9CisKKyAgICBpbnQJCQkJCUNvdW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX0Fubm90TGlzdC5HZXRTaXplKCk7CisgICAgfQorCisgICAgaW50CQkJCQlHZXRJbmRleChDUERGX0Fubm90KiBwQW5ub3QpOworCisKKyAgICBDUERGX0RvY3VtZW50KgkJR2V0RG9jdW1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcERvY3VtZW50OworICAgIH0KK3Byb3RlY3RlZDoKKworICAgIENGWF9QdHJBcnJheQkJbV9Bbm5vdExpc3Q7CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCW1fcFBhZ2VEaWN0OworCisgICAgQ1BERl9Eb2N1bWVudCoJCW1fcERvY3VtZW50OworCisgICAgQ0ZYX1B0ckFycmF5CQltX0JvcmRlcnM7CisKKyAgICB2b2lkCQkJCURpc3BsYXlQYXNzKGNvbnN0IENQREZfUGFnZSogcFBhZ2UsIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX1JlbmRlckNvbnRleHQqIHBDb250ZXh0LCBGWF9CT09MIGJQcmludGluZywgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYldpZGdldCwgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucywgRlhfUkVDVCogY2xpcF9yZWN0KTsKKyAgICBmcmllbmQgY2xhc3MJCUNQREZfQW5ub3Q7Cit9OworI2RlZmluZSBDT0xPUlRZUEVfVFJBTlNQQVJFTlQJMAorI2RlZmluZSBDT0xPUlRZUEVfR1JBWQkJCTEKKyNkZWZpbmUgQ09MT1JUWVBFX1JHQgkJCTIKKyNkZWZpbmUgQ09MT1JUWVBFX0NNWUsJCQkzCitjbGFzcyBDUERGX0RlZmF1bHRBcHBlYXJhbmNlIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENQREZfRGVmYXVsdEFwcGVhcmFuY2UoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGNzREEgPSAiIikKKyAgICB7CisgICAgICAgIG1fY3NEQSA9IGNzREE7CisgICAgfQorCisgICAgQ1BERl9EZWZhdWx0QXBwZWFyYW5jZShjb25zdCBDUERGX0RlZmF1bHRBcHBlYXJhbmNlJiBjREEpCisgICAgeworICAgICAgICBtX2NzREEgPSAoQ0ZYX0J5dGVTdHJpbmcpKENQREZfRGVmYXVsdEFwcGVhcmFuY2UmKWNEQTsKKyAgICB9CisKKworICAgIG9wZXJhdG9yIENGWF9CeXRlU3RyaW5nKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NzREE7CisgICAgfQorCisgICAgY29uc3QgQ1BERl9EZWZhdWx0QXBwZWFyYW5jZSYgb3BlcmF0b3IgPShjb25zdCBDRlhfQnl0ZVN0cmluZyYgY3NEQSkKKyAgICB7CisgICAgICAgIG1fY3NEQSA9IGNzREE7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBjb25zdCBDUERGX0RlZmF1bHRBcHBlYXJhbmNlJiBvcGVyYXRvciA9KGNvbnN0IENQREZfRGVmYXVsdEFwcGVhcmFuY2UmIGNEQSkKKyAgICB7CisgICAgICAgIG1fY3NEQSA9IChDRlhfQnl0ZVN0cmluZykoQ1BERl9EZWZhdWx0QXBwZWFyYW5jZSYpY0RBOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisKKworICAgIEZYX0JPT0wJCQkJSGFzRm9udCgpOworCisgICAgQ0ZYX0J5dGVTdHJpbmcJCUdldEZvbnRTdHJpbmcoKTsKKworICAgIHZvaWQJCQkJR2V0Rm9udChDRlhfQnl0ZVN0cmluZyYgY3NGb250TmFtZVRhZywgRlhfRkxPQVQmIGZGb250U2l6ZSk7CisKKworCisKKyAgICBGWF9CT09MCQkJCUhhc0NvbG9yKEZYX0JPT0wgYlN0cm9raW5nT3BlcmF0aW9uID0gRkFMU0UpOworCisgICAgQ0ZYX0J5dGVTdHJpbmcJCUdldENvbG9yU3RyaW5nKEZYX0JPT0wgYlN0cm9raW5nT3BlcmF0aW9uID0gRkFMU0UpOworCisgICAgdm9pZAkJCQlHZXRDb2xvcihpbnQmIGlDb2xvclR5cGUsIEZYX0ZMT0FUIGZjWzRdLCBGWF9CT09MIGJTdHJva2luZ09wZXJhdGlvbiA9IEZBTFNFKTsKKworICAgIHZvaWQJCQkJR2V0Q29sb3IoRlhfQVJHQiYgY29sb3IsIGludCYgaUNvbG9yVHlwZSwgRlhfQk9PTCBiU3Ryb2tpbmdPcGVyYXRpb24gPSBGQUxTRSk7CisKKworCisKKyAgICBGWF9CT09MCQkJCUhhc1RleHRNYXRyaXgoKTsKKworICAgIENGWF9CeXRlU3RyaW5nCQlHZXRUZXh0TWF0cml4U3RyaW5nKCk7CisKKyAgICBDRlhfQWZmaW5lTWF0cml4CUdldFRleHRNYXRyaXgoKTsKKworcHJvdGVjdGVkOgorCisgICAgQ0ZYX0J5dGVTdHJpbmcJCW1fY3NEQTsKK307CisjZGVmaW5lIEZJRUxEVFlQRV9VTktOT1dOCQkJMAorI2RlZmluZSBGSUVMRFRZUEVfUFVTSEJVVFRPTgkJMQorI2RlZmluZSBGSUVMRFRZUEVfQ0hFQ0tCT1gJCQkyCisjZGVmaW5lIEZJRUxEVFlQRV9SQURJT0JVVFRPTgkJMworI2RlZmluZSBGSUVMRFRZUEVfQ09NQk9CT1gJCQk0CisjZGVmaW5lIEZJRUxEVFlQRV9MSVNUQk9YCQkJNQorI2RlZmluZSBGSUVMRFRZUEVfVEVYVEZJRUxECQkJNgorI2RlZmluZSBGSUVMRFRZUEVfU0lHTkFUVVJFCQkJNworY2xhc3MgQ1BERl9JbnRlckZvcm0gOiBwdWJsaWMgQ0ZYX1ByaXZhdGVEYXRhLCBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ1BERl9JbnRlckZvcm0oQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBGWF9CT09MIGJVcGRhdGVBUCk7CisKKyAgICB+Q1BERl9JbnRlckZvcm0oKTsKKworCisKKyAgICBzdGF0aWMgdm9pZAkJCQlFbmFibGVVcGRhdGVBUChGWF9CT09MIGJVcGRhdGVBUCk7CisKKyAgICBzdGF0aWMgRlhfQk9PTAkJCVVwZGF0aW5nQVBFbmFibGVkKCk7CisKKworICAgIHN0YXRpYyBDRlhfQnl0ZVN0cmluZwlHZW5lcmF0ZU5ld1Jlc291cmNlTmFtZShjb25zdCBDUERGX0RpY3Rpb25hcnkqIHBSZXNEaWN0LCBGWF9MUENTVFIgY3NUeXBlLCBpbnQgaU1pbkxlbiA9IDIsIEZYX0xQQ1NUUiBjc1ByZWZpeCA9ICIiKTsKKworCisKKyAgICBzdGF0aWMgQ1BERl9Gb250KgkJQWRkU3lzdGVtRGVmYXVsdEZvbnQoY29uc3QgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50KTsKKworICAgIHN0YXRpYyBDUERGX0ZvbnQqCQlBZGRTeXN0ZW1Gb250KGNvbnN0IENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ0ZYX0J5dGVTdHJpbmcgY3NGb250TmFtZSwgRlhfQllURSBpQ2hhclNldCA9IDEpOworCisgICAgc3RhdGljIENQREZfRm9udCoJCUFkZFN5c3RlbUZvbnQoY29uc3QgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDRlhfV2lkZVN0cmluZyBjc0ZvbnROYW1lLCBGWF9CWVRFIGlDaGFyU2V0ID0gMSk7CisKKyAgICBzdGF0aWMgQ1BERl9Gb250KgkJQWRkU3RhbmRhcmRGb250KGNvbnN0IENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ0ZYX0J5dGVTdHJpbmcgY3NGb250TmFtZSk7CisKKyAgICBzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJR2V0TmF0aXZlRm9udChGWF9CWVRFIGlDaGFyU2V0LCBGWF9MUFZPSUQgcExvZ0ZvbnQgPSBOVUxMKTsKKworICAgIHN0YXRpYyBDRlhfQnl0ZVN0cmluZwlHZXROYXRpdmVGb250KEZYX0xQVk9JRCBwTG9nRm9udCA9IE5VTEwpOworCisgICAgc3RhdGljIEZYX0JZVEUJCQlHZXROYXRpdmVDaGFyU2V0KCk7CisKKyAgICBzdGF0aWMgQ1BERl9Gb250KgkJQWRkTmF0aXZlRm9udChGWF9CWVRFIGlDaGFyU2V0LCBjb25zdCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQpOworCisgICAgc3RhdGljIENQREZfRm9udCoJCUFkZE5hdGl2ZUZvbnQoY29uc3QgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50KTsKKworCisKKworICAgIEZYX0JPT0wJCQkJCVZhbGlkYXRlRmllbGROYW1lKENGWF9XaWRlU3RyaW5nJiBjc05ld0ZpZWxkTmFtZSwgaW50IGlUeXBlKTsKKworICAgIEZYX0JPT0wJCQkJCVZhbGlkYXRlRmllbGROYW1lKGNvbnN0IENQREZfRm9ybUZpZWxkKiBwRmllbGQsIENGWF9XaWRlU3RyaW5nJiBjc05ld0ZpZWxkTmFtZSk7CisKKyAgICBGWF9CT09MCQkJCQlWYWxpZGF0ZUZpZWxkTmFtZShjb25zdCBDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCwgQ0ZYX1dpZGVTdHJpbmcmIGNzTmV3RmllbGROYW1lKTsKKworCisKKworICAgIEZYX0RXT1JECQkJCUNvdW50RmllbGRzKGNvbnN0IENGWF9XaWRlU3RyaW5nICZjc0ZpZWxkTmFtZSA9IEwiIik7CisKKyAgICBDUERGX0Zvcm1GaWVsZCoJCQlHZXRGaWVsZChGWF9EV09SRCBpbmRleCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJmNzRmllbGROYW1lID0gTCIiKTsKKworICAgIHZvaWQJCQkJCUdldEFsbEZpZWxkTmFtZXMoQ0ZYX1dpZGVTdHJpbmdBcnJheSYgYWxsRmllbGROYW1lcyk7CisKKyAgICBGWF9CT09MCQkJCQlJc1ZhbGlkRm9ybUZpZWxkKGNvbnN0IHZvaWQqIHBGaWVsZCk7CisKKyAgICBDUERGX0Zvcm1GaWVsZCoJCQlHZXRGaWVsZEJ5RGljdChDUERGX0RpY3Rpb25hcnkqIHBGaWVsZERpY3QpIGNvbnN0OworCisKKworCisgICAgRlhfRFdPUkQJCQkJQ291bnRDb250cm9scyhDRlhfV2lkZVN0cmluZyBjc0ZpZWxkTmFtZSA9IEwiIik7CisKKyAgICBDUERGX0Zvcm1Db250cm9sKgkJR2V0Q29udHJvbChGWF9EV09SRCBpbmRleCwgQ0ZYX1dpZGVTdHJpbmcgY3NGaWVsZE5hbWUgPSBMIiIpOworCisgICAgRlhfQk9PTAkJCQkJSXNWYWxpZEZvcm1Db250cm9sKGNvbnN0IHZvaWQqIHBDb250cm9sKTsKKworICAgIGludAkJCQkJCUNvdW50UGFnZUNvbnRyb2xzKENQREZfUGFnZSogcFBhZ2UpIGNvbnN0OworCisgICAgQ1BERl9Gb3JtQ29udHJvbCoJCUdldFBhZ2VDb250cm9sKENQREZfUGFnZSogcFBhZ2UsIGludCBpbmRleCkgY29uc3Q7CisKKworICAgIENQREZfRm9ybUNvbnRyb2wqCQlHZXRDb250cm9sQXRQb2ludChDUERGX1BhZ2UqIHBQYWdlLCBGWF9GTE9BVCBwZGZfeCwgRlhfRkxPQVQgcGRmX3kpIGNvbnN0OworCisgICAgQ1BERl9Gb3JtQ29udHJvbCoJCUdldENvbnRyb2xCeURpY3QoQ1BERl9EaWN0aW9uYXJ5KiBwV2lkZ2V0RGljdCkgY29uc3Q7CisKKworCisKKyAgICBGWF9EV09SRAkJCQlDb3VudEludGVybmFsRmllbGRzKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBjc0ZpZWxkTmFtZSA9IEwiIikgY29uc3Q7CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCQlHZXRJbnRlcm5hbEZpZWxkKEZYX0RXT1JEIGluZGV4LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgY3NGaWVsZE5hbWUgPSBMIiIpIGNvbnN0OworCisKKworCisKKyAgICBDUERGX0RvY3VtZW50KgkJCUdldERvY3VtZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BEb2N1bWVudDsKKyAgICB9CisKKyAgICBDUERGX0RpY3Rpb25hcnkqCQlHZXRGb3JtRGljdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wRm9ybURpY3Q7CisgICAgfQorCisKKworCisgICAgRlhfQk9PTAkJCQkJTmVlZENvbnN0cnVjdEFQKCk7CisKKyAgICB2b2lkCQkJCQlOZWVkQ29uc3RydWN0QVAoRlhfQk9PTCBiTmVlZEFQKTsKKworCisKKworICAgIGludAkJCQkJCUNvdW50RmllbGRzSW5DYWxjdWxhdGlvbk9yZGVyKCk7CisKKyAgICBDUERGX0Zvcm1GaWVsZCoJCQlHZXRGaWVsZEluQ2FsY3VsYXRpb25PcmRlcihpbnQgaW5kZXgpOworCisgICAgaW50CQkJCQkJRmluZEZpZWxkSW5DYWxjdWxhdGlvbk9yZGVyKGNvbnN0IENQREZfRm9ybUZpZWxkKiBwRmllbGQpOworCisKKworCisgICAgRlhfRFdPUkQJCQkJQ291bnRGb3JtRm9udHMoKTsKKworICAgIENQREZfRm9udCoJCQkJR2V0Rm9ybUZvbnQoRlhfRFdPUkQgaW5kZXgsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOworCisgICAgQ1BERl9Gb250KgkJCQlHZXRGb3JtRm9udChDRlhfQnl0ZVN0cmluZyBjc05hbWVUYWcpOworCisgICAgQ1BERl9Gb250KgkJCQlHZXRGb3JtRm9udChDRlhfQnl0ZVN0cmluZyBjc0ZvbnROYW1lLCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKTsKKworICAgIENQREZfRm9udCoJCQkJR2V0TmF0aXZlRm9ybUZvbnQoRlhfQllURSBpQ2hhclNldCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZyk7CisKKyAgICBDUERGX0ZvbnQqCQkJCUdldE5hdGl2ZUZvcm1Gb250KENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOworCisgICAgRlhfQk9PTAkJCQkJRmluZEZvcm1Gb250KGNvbnN0IENQREZfRm9udCogcEZvbnQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOworCisgICAgRlhfQk9PTAkJCQkJRmluZEZvcm1Gb250KENGWF9CeXRlU3RyaW5nIGNzRm9udE5hbWUsIENQREZfRm9udComIHBGb250LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKTsKKworICAgIGlubGluZSBGWF9CT09MCQkJRmluZEZvcm1Gb250KENGWF9XaWRlU3RyaW5nIGNzRm9udE5hbWUsIENQREZfRm9udComIHBGb250LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZpbmRGb3JtRm9udChQREZfRW5jb2RlVGV4dChjc0ZvbnROYW1lKSwgcEZvbnQsIGNzTmFtZVRhZyk7CisgICAgfQorCisKKworCisKKyAgICB2b2lkCQkJCQlBZGRGb3JtRm9udChjb25zdCBDUERGX0ZvbnQqIHBGb250LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKTsKKworICAgIENQREZfRm9udCoJCQkJQWRkTmF0aXZlRm9ybUZvbnQoRlhfQllURSBpQ2hhclNldCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZyk7CisKKyAgICBDUERGX0ZvbnQqCQkJCUFkZE5hdGl2ZUZvcm1Gb250KENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOworCisgICAgdm9pZAkJCQkJUmVtb3ZlRm9ybUZvbnQoY29uc3QgQ1BERl9Gb250KiBwRm9udCk7CisKKyAgICB2b2lkCQkJCQlSZW1vdmVGb3JtRm9udChDRlhfQnl0ZVN0cmluZyBjc05hbWVUYWcpOworCisKKworCisgICAgQ1BERl9EZWZhdWx0QXBwZWFyYW5jZQlHZXREZWZhdWx0QXBwZWFyYW5jZSgpOworCisgICAgQ1BERl9Gb250KgkJCQlHZXREZWZhdWx0Rm9ybUZvbnQoKTsKKworCisKKyAgICBpbnQJCQkJCQlHZXRGb3JtQWxpZ25tZW50KCk7CisKKworCisKKyAgICBDUERGX0Zvcm1GaWVsZCoJCQlDaGVja1JlcXVpcmVkRmllbGRzKGNvbnN0IENGWF9QdHJBcnJheSAqZmllbGRzID0gTlVMTCwgRlhfQk9PTCBiSW5jbHVkZU9yRXhjbHVkZSA9IFRSVUUpIGNvbnN0OworCisgICAgQ0ZERl9Eb2N1bWVudCogCQkJRXhwb3J0VG9GREYoRlhfV1NUUiBwZGZfcGF0aCwgRlhfQk9PTCBiU2ltcGxlRmlsZVNwZWMgPSBGQUxTRSkgY29uc3Q7CisKKyAgICBDRkRGX0RvY3VtZW50KgkJCUV4cG9ydFRvRkRGKEZYX1dTVFIgcGRmX3BhdGgsIENGWF9QdHJBcnJheSYgZmllbGRzLCBGWF9CT09MIGJJbmNsdWRlT3JFeGNsdWRlID0gVFJVRSwgRlhfQk9PTCBiU2ltcGxlRmlsZVNwZWMgPSBGQUxTRSkgY29uc3Q7CisKKyAgICBGWF9CT09MCQkJCQlJbXBvcnRGcm9tRkRGKGNvbnN0IENGREZfRG9jdW1lbnQqIHBGREZEb2MsIEZYX0JPT0wgYk5vdGlmeSA9IEZBTFNFKTsKKworCisKKworICAgIEZYX0JPT0wJCQkJCVJlc2V0Rm9ybShjb25zdCBDRlhfUHRyQXJyYXkmIGZpZWxkcywgRlhfQk9PTCBiSW5jbHVkZU9yRXhjbHVkZSA9IFRSVUUsIEZYX0JPT0wgYk5vdGlmeSA9IEZBTFNFKTsKKworICAgIEZYX0JPT0wJCQkJCVJlc2V0Rm9ybShGWF9CT09MIGJOb3RpZnkgPSBGQUxTRSk7CisKKyAgICB2b2lkCQkJCQlSZWxvYWRGb3JtKCk7CisKKyAgICBDUERGX0Zvcm1Ob3RpZnkqCQlHZXRGb3JtTm90aWZ5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BGb3JtTm90aWZ5OworICAgIH0KKworICAgIHZvaWQJCQkJCVNldEZvcm1Ob3RpZnkoY29uc3QgQ1BERl9Gb3JtTm90aWZ5KiBwTm90aWZ5KTsKKworCisgICAgaW50CQkJCQkJR2V0UGFnZVdpdGhXaWRnZXQoaW50IGlDdXJQYWdlLCBGWF9CT09MIGJOZXh0KTsKKworCisKKyAgICBGWF9CT09MCQkJCQlJc1VwZGF0ZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYlVwZGF0ZWQ7CisgICAgfQorCisgICAgdm9pZAkJCQkJQ2xlYXJVcGRhdGVkRmxhZygpCisgICAgeworICAgICAgICBtX2JVcGRhdGVkID0gRkFMU0U7CisgICAgfQorCisKKyAgICBGWF9CT09MCQkJCQlIYXNYRkFGb3JtKCkgY29uc3Q7CisKKyAgICB2b2lkCQkJCQlGaXhQYWdlRmllbGRzKGNvbnN0IENQREZfUGFnZSogcFBhZ2UpOworcHJvdGVjdGVkOgorCisgICAgc3RhdGljIEZYX0JPT0wJCQltX2JVcGRhdGVBUDsKKworICAgIHZvaWQJCQkJCUxvYWRGaWVsZChDUERGX0RpY3Rpb25hcnkqIHBGaWVsZERpY3QsIGludCBuTGV2ZWwgPSAwKTsKKworICAgIENQREZfT2JqZWN0KgkJCUdldEZpZWxkQXR0cihDUERGX0RpY3Rpb25hcnkqIHBGaWVsZERpY3QsIGNvbnN0IEZYX0NIQVIqIG5hbWUpOworCisgICAgQ1BERl9Gb3JtRmllbGQqCQkJQWRkVGVybWluYWxGaWVsZChjb25zdCBDUERGX0RpY3Rpb25hcnkqIHBGaWVsZERpY3QpOworCisgICAgQ1BERl9Gb3JtQ29udHJvbCoJCUFkZENvbnRyb2woY29uc3QgQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCwgY29uc3QgQ1BERl9EaWN0aW9uYXJ5KiBwV2lkZ2V0RGljdCk7CisKKyAgICB2b2lkCQkJCQlGREZfSW1wb3J0RmllbGQoQ1BERl9EaWN0aW9uYXJ5KiBwRmllbGQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBwYXJlbnRfbmFtZSwgRlhfQk9PTCBiTm90aWZ5ID0gRkFMU0UsIGludCBuTGV2ZWwgPSAwKTsKKworICAgIEZYX0JPT0wJCQkJCVZhbGlkYXRlRmllbGROYW1lKENGWF9XaWRlU3RyaW5nJiBjc05ld0ZpZWxkTmFtZSwgaW50IGlUeXBlLCBjb25zdCBDUERGX0Zvcm1GaWVsZCogcEV4Y2x1ZGVkRmllbGQsIGNvbnN0IENQREZfRm9ybUNvbnRyb2wqIHBFeGNsdWRlZENvbnRyb2wpOworCisgICAgaW50CQkJCQkJQ29tcGFyZUZpZWxkTmFtZShjb25zdCBDRlhfV2lkZVN0cmluZyYgbmFtZTEsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBuYW1lMik7CisKKyAgICBpbnQJCQkJCQlDb21wYXJlRmllbGROYW1lKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lMSwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUyKTsKKworICAgIENQREZfRG9jdW1lbnQqCQkJbV9wRG9jdW1lbnQ7CisKKyAgICBGWF9CT09MCQkJCQltX2JHZW5lcmF0ZUFQOworCisgICAgQ1BERl9EaWN0aW9uYXJ5KgkJbV9wRm9ybURpY3Q7CisKKyAgICBDRlhfTWFwUHRyVG9QdHIJCQltX0NvbnRyb2xNYXA7CisKKyAgICBDRmllbGRUcmVlICptX3BGaWVsZFRyZWU7CisKKyAgICBDRlhfQnl0ZVN0cmluZwkJCW1fYnNFbmNvZGluZzsKKworICAgIENQREZfRm9ybU5vdGlmeSoJCW1fcEZvcm1Ob3RpZnk7CisKKyAgICBGWF9CT09MCQkJCQltX2JVcGRhdGVkOworICAgIGZyaWVuZCBjbGFzcyBDUERGX0Zvcm1Db250cm9sOworICAgIGZyaWVuZCBjbGFzcyBDUERGX0Zvcm1GaWVsZDsKK307CisjZGVmaW5lIEZPUk1GSUVMRF9SRUFET05MWQkJMHgwMQorI2RlZmluZSBGT1JNRklFTERfUkVRVUlSRUQJCTB4MDIKKyNkZWZpbmUgRk9STUZJRUxEX05PRVhQT1JUCQkweDA0CisjZGVmaW5lIEZPUk1SQURJT19OT1RPR0dMRU9GRgkweDEwMAorI2RlZmluZSBGT1JNUkFESU9fVU5JU09OCQkweDIwMAorI2RlZmluZSBGT1JNVEVYVF9NVUxUSUxJTkUJCTB4MTAwCisjZGVmaW5lIEZPUk1URVhUX1BBU1NXT1JECQkweDIwMAorI2RlZmluZSBGT1JNVEVYVF9OT1NDUk9MTAkJMHg0MDAKKyNkZWZpbmUgRk9STVRFWFRfQ09NQgkJCTB4ODAwCisjZGVmaW5lIEZPUk1DT01CT19FRElUCQkJMHgxMDAKKyNkZWZpbmUgRk9STUxJU1RfTVVMVElTRUxFQ1QJMHgxMDAKK2NsYXNzIENQREZfRm9ybUZpZWxkIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIGVudW0gVHlwZSB7CisgICAgICAgIFVua25vd24sCisgICAgICAgIFB1c2hCdXR0b24sCisgICAgICAgIFJhZGlvQnV0dG9uLAorICAgICAgICBDaGVja0JveCwKKyAgICAgICAgVGV4dCwKKyAgICAgICAgUmljaFRleHQsCisgICAgICAgIEZpbGUsCisgICAgICAgIExpc3RCb3gsCisgICAgICAgIENvbWJvQm94LAorICAgICAgICBTaWduCisgICAgfTsKKworICAgIENGWF9XaWRlU3RyaW5nCQkJR2V0RnVsbE5hbWUoKTsKKworICAgIFR5cGUJCQkJCUdldFR5cGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fVHlwZTsKKyAgICB9CisKKyAgICBGWF9EV09SRAkJCQlHZXRGbGFncygpCisgICAgeworICAgICAgICByZXR1cm4gbV9GbGFnczsKKyAgICB9CisKKyAgICBDUERGX0ludGVyRm9ybSoJCQlHZXRJbnRlckZvcm0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcEZvcm07CisgICAgfQorCisgICAgQ1BERl9EaWN0aW9uYXJ5KgkJR2V0RmllbGREaWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BEaWN0OworICAgIH0KKworICAgIHZvaWQJCQkJCVNldEZpZWxkRGljdChDUERGX0RpY3Rpb25hcnkqIHBEaWN0KQorICAgIHsKKyAgICAgICAgbV9wRGljdCA9IHBEaWN0OworICAgIH0KKworICAgIEZYX0JPT0wJCQkJCVJlc2V0RmllbGQoRlhfQk9PTCBiTm90aWZ5ID0gRkFMU0UpOworCisKKworICAgIGludAkJCQkJCUNvdW50Q29udHJvbHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fQ29udHJvbExpc3QuR2V0U2l6ZSgpOworICAgIH0KKworICAgIENQREZfRm9ybUNvbnRyb2wqCQlHZXRDb250cm9sKGludCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiAoQ1BERl9Gb3JtQ29udHJvbCopbV9Db250cm9sTGlzdC5HZXRBdChpbmRleCk7CisgICAgfQorCisgICAgaW50CQkJCQkJR2V0Q29udHJvbEluZGV4KGNvbnN0IENQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sKTsKKworCisKKworICAgIGludAkJCQkJCUdldEZpZWxkVHlwZSgpOworCisKKworCisgICAgQ1BERl9BQWN0aW9uCQkJR2V0QWRkaXRpb25hbEFjdGlvbigpOworCisKKworCisgICAgQ0ZYX1dpZGVTdHJpbmcJCQlHZXRBbHRlcm5hdGVOYW1lKCk7CisKKworCisKKyAgICBDRlhfV2lkZVN0cmluZwkJCUdldE1hcHBpbmdOYW1lKCk7CisKKworCisKKyAgICBGWF9EV09SRAkJCQlHZXRGaWVsZEZsYWdzKCk7CisKKworCisKKyAgICBDRlhfQnl0ZVN0cmluZwkJCUdldERlZmF1bHRTdHlsZSgpOworCisKKworCisgICAgQ0ZYX1dpZGVTdHJpbmcJCQlHZXRSaWNoVGV4dFN0cmluZygpOworCisKKworICAgIENGWF9XaWRlU3RyaW5nCQkJR2V0VmFsdWUoKTsKKworICAgIENGWF9XaWRlU3RyaW5nCQkJR2V0RGVmYXVsdFZhbHVlKCk7CisKKyAgICBGWF9CT09MCQkJCQlTZXRWYWx1ZShjb25zdCBDRlhfV2lkZVN0cmluZyYgdmFsdWUsIEZYX0JPT0wgYk5vdGlmeSA9IEZBTFNFKTsKKworCisKKworCisgICAgaW50CQkJCQkJR2V0TWF4TGVuKCk7CisKKworCisKKyAgICBpbnQJCQkJCQlDb3VudFNlbGVjdGVkSXRlbXMoKTsKKworICAgIGludAkJCQkJCUdldFNlbGVjdGVkSW5kZXgoaW50IGluZGV4KTsKKworICAgIEZYX0JPT0wJCQkJCUNsZWFyU2VsZWN0aW9uKEZYX0JPT0wgYk5vdGlmeSA9IEZBTFNFKTsKKworICAgIEZYX0JPT0wJCQkJCUlzSXRlbVNlbGVjdGVkKGludCBpbmRleCk7CisKKyAgICBGWF9CT09MCQkJCQlTZXRJdGVtU2VsZWN0aW9uKGludCBpbmRleCwgRlhfQk9PTCBiU2VsZWN0ZWQsIEZYX0JPT0wgYk5vdGlmeSA9IEZBTFNFKTsKKworICAgIEZYX0JPT0wJCQkJCUlzSXRlbURlZmF1bHRTZWxlY3RlZChpbnQgaW5kZXgpOworCisgICAgaW50CQkJCQkJR2V0RGVmYXVsdFNlbGVjdGVkSXRlbSgpOworCisKKworCisgICAgaW50CQkJCQkJQ291bnRPcHRpb25zKCk7CisKKyAgICBDRlhfV2lkZVN0cmluZwkJCUdldE9wdGlvbkxhYmVsKGludCBpbmRleCk7CisKKyAgICBDRlhfV2lkZVN0cmluZwkJCUdldE9wdGlvblZhbHVlKGludCBpbmRleCk7CisKKyAgICBpbnQJCQkJCQlGaW5kT3B0aW9uKENGWF9XaWRlU3RyaW5nIGNzT3B0TGFiZWwpOworCisgICAgaW50CQkJCQkJRmluZE9wdGlvblZhbHVlKEZYX0xQQ1dTVFIgY3NPcHRWYWx1ZSwgaW50IGlTdGFydEluZGV4ID0gMCk7CisKKworCisKKyAgICBGWF9CT09MCQkJCQlDaGVja0NvbnRyb2woaW50IGlDb250cm9sSW5kZXgsIEZYX0JPT0wgYkNoZWNrZWQsIEZYX0JPT0wgYk5vdGlmeSA9IEZBTFNFKTsKKworCisKKworICAgIGludAkJCQkJCUdldFRvcFZpc2libGVJbmRleCgpOworCisKKworCisgICAgaW50CQkJCQkJQ291bnRTZWxlY3RlZE9wdGlvbnMoKTsKKworICAgIGludAkJCQkJCUdldFNlbGVjdGVkT3B0aW9uSW5kZXgoaW50IGluZGV4KTsKKworICAgIEZYX0JPT0wJCQkJCUlzT3B0aW9uU2VsZWN0ZWQoaW50IGlPcHRJbmRleCk7CisKKyAgICBGWF9CT09MCQkJCQlTZWxlY3RPcHRpb24oaW50IGlPcHRJbmRleCwgRlhfQk9PTCBiU2VsZWN0ZWQsIEZYX0JPT0wgYk5vdGlmeSA9IEZBTFNFKTsKKworICAgIEZYX0JPT0wJCQkJCUNsZWFyU2VsZWN0ZWRPcHRpb25zKEZYX0JPT0wgYk5vdGlmeSA9IEZBTFNFKTsKKworCisKKworICAgIEZYX0ZMT0FUCQkJCUdldEZvbnRTaXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX0ZvbnRTaXplOworICAgIH0KKworICAgIENQREZfRm9udCoJCQkJR2V0Rm9udCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9wRm9udDsKKyAgICB9CisKK3Byb3RlY3RlZDoKKworICAgIENQREZfRm9ybUZpZWxkKENQREZfSW50ZXJGb3JtKiBwRm9ybSwgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCk7CisKKyAgICB+Q1BERl9Gb3JtRmllbGQoKTsKKworICAgIENQREZfRm9ybUZpZWxkOjpUeXBlCW1fVHlwZTsKKworICAgIEZYX0RXT1JECQkJCW1fRmxhZ3M7CisKKyAgICBDUERGX0ludGVyRm9ybSoJCQltX3BGb3JtOworCisgICAgQ1BERl9EaWN0aW9uYXJ5KgkJbV9wRGljdDsKKworICAgIENGWF9QdHJBcnJheQkJCW1fQ29udHJvbExpc3Q7CisgICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9JbnRlckZvcm07CisgICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9Gb3JtQ29udHJvbDsKKworCisKKyAgICBDRlhfV2lkZVN0cmluZwkJCUdldFZhbHVlKEZYX0JPT0wgYkRlZmF1bHQpOworCisgICAgRlhfQk9PTAkJCQkJU2V0VmFsdWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHZhbHVlLCBGWF9CT09MIGJEZWZhdWx0LCBGWF9CT09MIGJOb3RpZnkpOworCisKKyAgICB2b2lkCQkJCQlTeW5jRmllbGRGbGFncygpOworCisgICAgaW50CQkJCQkJRmluZExpc3RTZWwoQ1BERl9TdHJpbmcqIHN0cik7CisKKyAgICBDRlhfV2lkZVN0cmluZwkJCUdldE9wdGlvblRleHQoaW50IGluZGV4LCBpbnQgc3ViX2luZGV4KTsKKworICAgIHZvaWQJCQkJCUxvYWREQSgpOworCisgICAgdm9pZAkJCQkJVXBkYXRlQVAoQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2wpOworCisKKworICAgIENGWF9XaWRlU3RyaW5nCQkJR2V0Q2hlY2tWYWx1ZShGWF9CT09MIGJEZWZhdWx0KTsKKworICAgIEZYX0JPT0wJCQkJCVNldENoZWNrVmFsdWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHZhbHVlLCBGWF9CT09MIGJEZWZhdWx0LCBGWF9CT09MIGJOb3RpZnkpOworCisKKyAgICBGWF9GTE9BVAkJCQltX0ZvbnRTaXplOworCisgICAgQ1BERl9Gb250KgkJCQltX3BGb250OworfTsKK0NQREZfT2JqZWN0KglGUERGX0dldEZpZWxkQXR0cihDUERGX0RpY3Rpb25hcnkqIHBGaWVsZERpY3QsIGNvbnN0IEZYX0NIQVIqIG5hbWUsIGludCBuTGV2ZWwgPSAwKTsKK2NsYXNzIENQREZfSWNvbkZpdCA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDUERGX0ljb25GaXQoQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IE5VTEwpCisgICAgeworICAgICAgICBtX3BEaWN0ID0gcERpY3Q7CisgICAgfQorCisgICAgb3BlcmF0b3IgQ1BERl9EaWN0aW9uYXJ5KigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wRGljdDsKKyAgICB9CisKKworCisKKyAgICBlbnVtIFNjYWxlTWV0aG9kIHsKKyAgICAgICAgQWx3YXlzID0gMCwKKyAgICAgICAgQmlnZ2VyLAorICAgICAgICBTbWFsbGVyLAorICAgICAgICBOZXZlcgorICAgIH07CisKKyAgICBTY2FsZU1ldGhvZAkJCQlHZXRTY2FsZU1ldGhvZCgpOworCisKKworCisgICAgRlhfQk9PTAkJCQkJSXNQcm9wb3J0aW9uYWxTY2FsZSgpOworCisKKworCisgICAgdm9pZAkJCQkJR2V0SWNvblBvc2l0aW9uKEZYX0ZMT0FUJiBmTGVmdCwgRlhfRkxPQVQmIGZCb3R0b20pOworCisKKworCisgICAgRlhfQk9PTAkJCQkJR2V0Rml0dGluZ0JvdW5kcygpOworCisKKyAgICBDUERGX0RpY3Rpb25hcnkqCQltX3BEaWN0OworfTsKKworI2RlZmluZSBURVhUUE9TX0NBUFRJT04JCTAKKyNkZWZpbmUgVEVYVFBPU19JQ09OCQkxCisjZGVmaW5lIFRFWFRQT1NfQkVMT1cJCTIKKyNkZWZpbmUgVEVYVFBPU19BQk9WRQkJMworI2RlZmluZSBURVhUUE9TX1JJR0hUCQk0CisjZGVmaW5lIFRFWFRQT1NfTEVGVAkJNQorI2RlZmluZSBURVhUUE9TX09WRVJMQUlECTYKK2NsYXNzIENQREZfRm9ybUNvbnRyb2wgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ1BERl9Gb3JtRmllbGQ6OlR5cGUJR2V0VHlwZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9wRmllbGQtPkdldFR5cGUoKTsKKyAgICB9CisKKyAgICBDUERGX0ludGVyRm9ybSoJCQlHZXRJbnRlckZvcm0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcEZvcm07CisgICAgfQorCisgICAgQ1BERl9Gb3JtRmllbGQqCQkJR2V0RmllbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcEZpZWxkOworICAgIH0KKworICAgIENQREZfRGljdGlvbmFyeSoJCUdldFdpZGdldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wV2lkZ2V0RGljdDsKKyAgICB9CisKKyAgICBDRlhfRmxvYXRSZWN0CQkJR2V0UmVjdCgpOworCisgICAgdm9pZAkJCQkJRHJhd0NvbnRyb2woQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX1BhZ2UqIHBQYWdlLCBDUERGX0Fubm90OjpBcHBlYXJhbmNlTW9kZSBtb2RlLCBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zID0gTlVMTCk7CisKKworCisgICAgQ0ZYX0J5dGVTdHJpbmcJCQlHZXRDaGVja2VkQVBTdGF0ZSgpOworCisgICAgQ0ZYX1dpZGVTdHJpbmcJCQlHZXRFeHBvcnRWYWx1ZSgpOworCisgICAgRlhfQk9PTAkJCQkJSXNDaGVja2VkKCk7CisKKyAgICBGWF9CT09MCQkJCQlJc0RlZmF1bHRDaGVja2VkKCk7CisKKworCisKKyAgICBlbnVtIEhpZ2hsaWdodGluZ01vZGUJeworICAgICAgICBOb25lID0gMCwKKyAgICAgICAgSW52ZXJ0LAorICAgICAgICBPdXRsaW5lLAorICAgICAgICBQdXNoLAorICAgICAgICBUb2dnbGUKKyAgICB9OworCisgICAgSGlnaGxpZ2h0aW5nTW9kZQkJR2V0SGlnaGxpZ2h0aW5nTW9kZSgpOworCisKKworCisgICAgRlhfQk9PTAkJCQkJSGFzTUtFbnRyeShDRlhfQnl0ZVN0cmluZyBjc0VudHJ5KTsKKworCisKKworICAgIGludAkJCQkJCUdldFJvdGF0aW9uKCk7CisKKworCisKKyAgICBpbmxpbmUgRlhfQVJHQgkJCUdldEJvcmRlckNvbG9yKGludCYgaUNvbG9yVHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRDb2xvcihpQ29sb3JUeXBlLCAiQkMiKTsKKyAgICB9CisKKyAgICBpbmxpbmUgRlhfRkxPQVQJCQlHZXRPcmlnaW5hbEJvcmRlckNvbG9yKGludCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRPcmlnaW5hbENvbG9yKGluZGV4LCAiQkMiKTsKKyAgICB9CisKKyAgICBpbmxpbmUgdm9pZAkJCQlHZXRPcmlnaW5hbEJvcmRlckNvbG9yKGludCYgaUNvbG9yVHlwZSwgRlhfRkxPQVQgZmNbNF0pCisgICAgeworICAgICAgICBHZXRPcmlnaW5hbENvbG9yKGlDb2xvclR5cGUsIGZjLCAiQkMiKTsKKyAgICB9CisKKworCisKKyAgICBpbmxpbmUgRlhfQVJHQgkJCUdldEJhY2tncm91bmRDb2xvcihpbnQmIGlDb2xvclR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gR2V0Q29sb3IoaUNvbG9yVHlwZSwgIkJHIik7CisgICAgfQorCisgICAgaW5saW5lIEZYX0ZMT0FUCQkJR2V0T3JpZ2luYWxCYWNrZ3JvdW5kQ29sb3IoaW50IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldE9yaWdpbmFsQ29sb3IoaW5kZXgsICJCRyIpOworICAgIH0KKworICAgIGlubGluZSB2b2lkCQkJCUdldE9yaWdpbmFsQmFja2dyb3VuZENvbG9yKGludCYgaUNvbG9yVHlwZSwgRlhfRkxPQVQgZmNbNF0pCisgICAgeworICAgICAgICBHZXRPcmlnaW5hbENvbG9yKGlDb2xvclR5cGUsIGZjLCAiQkciKTsKKyAgICB9CisKKworCisKKyAgICBpbmxpbmUgQ0ZYX1dpZGVTdHJpbmcJR2V0Tm9ybWFsQ2FwdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gR2V0Q2FwdGlvbigiQ0EiKTsKKyAgICB9CisKKworCisKKyAgICBpbmxpbmUgQ0ZYX1dpZGVTdHJpbmcJR2V0Um9sbG92ZXJDYXB0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRDYXB0aW9uKCJSQyIpOworICAgIH0KKworCisKKworICAgIGlubGluZSBDRlhfV2lkZVN0cmluZwlHZXREb3duQ2FwdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gR2V0Q2FwdGlvbigiQUMiKTsKKyAgICB9CisKKworCisKKyAgICBpbmxpbmUgQ1BERl9TdHJlYW0qCQlHZXROb3JtYWxJY29uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRJY29uKCJJIik7CisgICAgfQorCisKKworCisgICAgaW5saW5lIENQREZfU3RyZWFtKgkJR2V0Um9sbG92ZXJJY29uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRJY29uKCJSSSIpOworICAgIH0KKworCisKKworICAgIGlubGluZSBDUERGX1N0cmVhbSoJCUdldERvd25JY29uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRJY29uKCJJWCIpOworICAgIH0KKworCisKKworICAgIENQREZfSWNvbkZpdAkJCUdldEljb25GaXQoKTsKKworCisKKworICAgIGludAkJCQkJCUdldFRleHRQb3NpdGlvbigpOworCisKKworCisgICAgQ1BERl9BY3Rpb24JCQkJR2V0QWN0aW9uKCk7CisKKworCisKKyAgICBDUERGX0FBY3Rpb24JCQlHZXRBZGRpdGlvbmFsQWN0aW9uKCk7CisKKworCisKKyAgICBDUERGX0RlZmF1bHRBcHBlYXJhbmNlCUdldERlZmF1bHRBcHBlYXJhbmNlKCk7CisKKyAgICBDUERGX0ZvbnQqCQkJCUdldERlZmF1bHRDb250cm9sRm9udCgpOworCisKKworCisgICAgaW50CQkJCQkJR2V0Q29udHJvbEFsaWdubWVudCgpOworCitwcm90ZWN0ZWQ6CisKKyAgICBDUERGX0Zvcm1Db250cm9sKENQREZfRm9ybUZpZWxkKiBwRmllbGQsIENQREZfRGljdGlvbmFyeSogcFdpZGdldERpY3QpOworCisgICAgQ0ZYX0J5dGVTdHJpbmcJCQlHZXRPblN0YXRlTmFtZSgpOworCisgICAgdm9pZAkJCQkJU2V0T25TdGF0ZU5hbWUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGNzT24pOworCisgICAgdm9pZAkJCQkJQ2hlY2tDb250cm9sKEZYX0JPT0wgYkNoZWNrZWQpOworCisgICAgRlhfQVJHQgkJCQkJR2V0Q29sb3IoaW50JiBpQ29sb3JUeXBlLCBDRlhfQnl0ZVN0cmluZyBjc0VudHJ5KTsKKworICAgIEZYX0ZMT0FUCQkJCUdldE9yaWdpbmFsQ29sb3IoaW50IGluZGV4LCBDRlhfQnl0ZVN0cmluZyBjc0VudHJ5KTsKKworICAgIHZvaWQJCQkJCUdldE9yaWdpbmFsQ29sb3IoaW50JiBpQ29sb3JUeXBlLCBGWF9GTE9BVCBmY1s0XSwgQ0ZYX0J5dGVTdHJpbmcgY3NFbnRyeSk7CisKKyAgICBDRlhfV2lkZVN0cmluZwkJCUdldENhcHRpb24oQ0ZYX0J5dGVTdHJpbmcgY3NFbnRyeSk7CisKKyAgICBDUERGX1N0cmVhbSoJCQlHZXRJY29uKENGWF9CeXRlU3RyaW5nIGNzRW50cnkpOworCisgICAgQ1BERl9BcFNldHRpbmdzCQkJR2V0TUsoRlhfQk9PTCBiQ3JlYXRlKTsKKworICAgIENQREZfSW50ZXJGb3JtKgkJCW1fcEZvcm07CisKKyAgICBDUERGX0Zvcm1GaWVsZCoJCQltX3BGaWVsZDsKKworICAgIENQREZfRGljdGlvbmFyeSoJCW1fcFdpZGdldERpY3Q7CisgICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9JbnRlckZvcm07CisgICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9Gb3JtRmllbGQ7Cit9OworY2xhc3MgQ1BERl9Gb3JtTm90aWZ5IDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIHZpcnR1YWwgfkNQREZfRm9ybU5vdGlmeSgpIHt9CisKKyAgICB2aXJ0dWFsIGludAkJQmVmb3JlVmFsdWVDaGFuZ2UoY29uc3QgQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCwgQ0ZYX1dpZGVTdHJpbmcmIGNzVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGludAkJQWZ0ZXJWYWx1ZUNoYW5nZShjb25zdCBDUERGX0Zvcm1GaWVsZCogcEZpZWxkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdmlydHVhbCBpbnQJCUJlZm9yZVNlbGVjdGlvbkNoYW5nZShjb25zdCBDUERGX0Zvcm1GaWVsZCogcEZpZWxkLCBDRlhfV2lkZVN0cmluZyYgY3NWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHZpcnR1YWwgaW50CQlBZnRlclNlbGVjdGlvbkNoYW5nZShjb25zdCBDUERGX0Zvcm1GaWVsZCogcEZpZWxkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdmlydHVhbCBpbnQJCUFmdGVyQ2hlY2tlZFN0YXR1c0NoYW5nZShjb25zdCBDUERGX0Zvcm1GaWVsZCogcEZpZWxkLCBjb25zdCBDRlhfQnl0ZUFycmF5JiBzdGF0dXNBcnJheSkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHZpcnR1YWwgaW50CQlCZWZvcmVGb3JtUmVzZXQoY29uc3QgQ1BERl9JbnRlckZvcm0qIHBGb3JtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdmlydHVhbCBpbnQJCUFmdGVyRm9ybVJlc2V0KGNvbnN0IENQREZfSW50ZXJGb3JtKiBwRm9ybSkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHZpcnR1YWwgaW50CQlCZWZvcmVGb3JtSW1wb3J0RGF0YShjb25zdCBDUERGX0ludGVyRm9ybSogcEZvcm0pCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGludAkJQWZ0ZXJGb3JtSW1wb3J0RGF0YShjb25zdCBDUERGX0ludGVyRm9ybSogcEZvcm0pCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9OworRlhfQk9PTAkJRlBERl9HZW5lcmF0ZUFQKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfRGljdGlvbmFyeSogcEFubm90RGljdCk7CitjbGFzcyBDUERGX1BhZ2VMYWJlbCA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDUERGX1BhZ2VMYWJlbChDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQpCisgICAgeworICAgICAgICBtX3BEb2N1bWVudCA9IHBEb2N1bWVudDsKKyAgICB9CisKKworICAgIENGWF9XaWRlU3RyaW5nCQkJCQlHZXRMYWJlbChpbnQgblBhZ2UpIGNvbnN0OworCisgICAgRlhfSU5UMzIJCQkJCQlHZXRQYWdlQnlMYWJlbChGWF9CU1RSIGJzTGFiZWwpIGNvbnN0OworCisKKyAgICBGWF9JTlQzMgkJCQkJCUdldFBhZ2VCeUxhYmVsKEZYX1dTVFIgd3NMYWJlbCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBDUERGX0RvY3VtZW50KgkJCQkJbV9wRG9jdW1lbnQ7Cit9OworY2xhc3MgQ1BERl9NZXRhZGF0YQoreworcHVibGljOgorCisgICAgQ1BERl9NZXRhZGF0YSgpOworCisKKyAgICB+Q1BERl9NZXRhZGF0YSgpOworCisgICAgdm9pZAkJCQlMb2FkRG9jKENQREZfRG9jdW1lbnQgKnBEb2MpOworCisKKyAgICBGWF9JTlQzMgkJCUdldFN0cmluZyhGWF9CU1RSIGJzSXRlbSwgQ0ZYX1dpZGVTdHJpbmcgJndzU3RyKTsKKworICAgIENYTUxfRWxlbWVudCoJCUdldFJvb3QoKSBjb25zdDsKKworICAgIENYTUxfRWxlbWVudCoJCUdldFJERigpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgRlhfTFBWT0lECW1fcERhdGE7Cit9OworY2xhc3MgQ1BERl9WaWV3ZXJQcmVmZXJlbmNlcworeworcHVibGljOgorCisgICAgQ1BERl9WaWV3ZXJQcmVmZXJlbmNlcyhDUERGX0RvY3VtZW50ICpwRG9jKTsKKworCisgICAgfkNQREZfVmlld2VyUHJlZmVyZW5jZXMoKTsKKworCisgICAgRlhfQk9PTCBJc0RpcmVjdGlvblIyTCgpIGNvbnN0OworCisgICAgRlhfQk9PTCBQcmludFNjYWxpbmcoKSBjb25zdDsKKworCitwcm90ZWN0ZWQ6CisgICAgQ1BERl9Eb2N1bWVudCoJbV9wRG9jOworfTsKK2NsYXNzIENQREZfQXBTZXR0aW5ncyA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDUERGX0FwU2V0dGluZ3MoQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IE5VTEwpCisgICAgeworICAgICAgICBtX3BEaWN0ID0gcERpY3Q7CisgICAgfQorCisgICAgb3BlcmF0b3IgQ1BERl9EaWN0aW9uYXJ5KiAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcERpY3Q7CisgICAgfQorCisgICAgRlhfQk9PTAkJCQkJSGFzTUtFbnRyeShGWF9CU1RSIGNzRW50cnkpOworCisKKworICAgIGludAkJCQkJCUdldFJvdGF0aW9uKCk7CisKKworCisKKyAgICBpbmxpbmUgRlhfQVJHQgkJCUdldEJvcmRlckNvbG9yKGludCYgaUNvbG9yVHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRDb2xvcihpQ29sb3JUeXBlLCBGWF9CU1RSQygiQkMiKSk7CisgICAgfQorCisgICAgaW5saW5lIEZYX0ZMT0FUCQkJR2V0T3JpZ2luYWxCb3JkZXJDb2xvcihpbnQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gR2V0T3JpZ2luYWxDb2xvcihpbmRleCwgRlhfQlNUUkMoIkJDIikpOworICAgIH0KKworICAgIGlubGluZSB2b2lkCQkJCUdldE9yaWdpbmFsQm9yZGVyQ29sb3IoaW50JiBpQ29sb3JUeXBlLCBGWF9GTE9BVCBmY1s0XSkKKyAgICB7CisgICAgICAgIEdldE9yaWdpbmFsQ29sb3IoaUNvbG9yVHlwZSwgZmMsIEZYX0JTVFJDKCJCQyIpKTsKKyAgICB9CisKKworCisKKyAgICBpbmxpbmUgRlhfQVJHQgkJCUdldEJhY2tncm91bmRDb2xvcihpbnQmIGlDb2xvclR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gR2V0Q29sb3IoaUNvbG9yVHlwZSwgRlhfQlNUUkMoIkJHIikpOworICAgIH0KKworICAgIGlubGluZSBGWF9GTE9BVAkJCUdldE9yaWdpbmFsQmFja2dyb3VuZENvbG9yKGludCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRPcmlnaW5hbENvbG9yKGluZGV4LCBGWF9CU1RSQygiQkciKSk7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQJCQkJR2V0T3JpZ2luYWxCYWNrZ3JvdW5kQ29sb3IoaW50JiBpQ29sb3JUeXBlLCBGWF9GTE9BVCBmY1s0XSkKKyAgICB7CisgICAgICAgIEdldE9yaWdpbmFsQ29sb3IoaUNvbG9yVHlwZSwgZmMsIEZYX0JTVFJDKCJCRyIpKTsKKyAgICB9CisKKworCisKKyAgICBpbmxpbmUgQ0ZYX1dpZGVTdHJpbmcJR2V0Tm9ybWFsQ2FwdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gR2V0Q2FwdGlvbihGWF9CU1RSQygiQ0EiKSk7CisgICAgfQorCisKKworCisgICAgaW5saW5lIENGWF9XaWRlU3RyaW5nCUdldFJvbGxvdmVyQ2FwdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gR2V0Q2FwdGlvbihGWF9CU1RSQygiUkMiKSk7CisgICAgfQorCisKKworCisgICAgaW5saW5lIENGWF9XaWRlU3RyaW5nCUdldERvd25DYXB0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRDYXB0aW9uKEZYX0JTVFJDKCJBQyIpKTsKKyAgICB9CisKKworCisKKyAgICBpbmxpbmUgQ1BERl9TdHJlYW0qCQlHZXROb3JtYWxJY29uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRJY29uKEZYX0JTVFJDKCJJIikpOworICAgIH0KKworCisKKworICAgIGlubGluZSBDUERGX1N0cmVhbSoJCUdldFJvbGxvdmVySWNvbigpCisgICAgeworICAgICAgICByZXR1cm4gR2V0SWNvbihGWF9CU1RSQygiUkkiKSk7CisgICAgfQorCisKKworCisgICAgaW5saW5lIENQREZfU3RyZWFtKgkJR2V0RG93bkljb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldEljb24oRlhfQlNUUkMoIklYIikpOworICAgIH0KKworCisKKworICAgIENQREZfSWNvbkZpdAkJCUdldEljb25GaXQoKTsKKworCisKKworICAgIGludAkJCQkJCUdldFRleHRQb3NpdGlvbigpOworCisgICAgQ1BERl9EaWN0aW9uYXJ5KgkJbV9wRGljdDsKK3Byb3RlY3RlZDoKKworICAgIEZYX0FSR0IJCQkJCUdldENvbG9yKGludCYgaUNvbG9yVHlwZSwgRlhfQlNUUiBjc0VudHJ5KTsKKworICAgIEZYX0ZMT0FUCQkJCUdldE9yaWdpbmFsQ29sb3IoaW50IGluZGV4LCBGWF9CU1RSIGNzRW50cnkpOworCisgICAgdm9pZAkJCQkJR2V0T3JpZ2luYWxDb2xvcihpbnQmIGlDb2xvclR5cGUsIEZYX0ZMT0FUIGZjWzRdLCBGWF9CU1RSIGNzRW50cnkpOworCisgICAgQ0ZYX1dpZGVTdHJpbmcJCQlHZXRDYXB0aW9uKEZYX0JTVFIgY3NFbnRyeSk7CisKKyAgICBDUERGX1N0cmVhbSoJCQlHZXRJY29uKEZYX0JTVFIgY3NFbnRyeSk7CisgICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9Gb3JtQ29udHJvbDsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvaW5jbHVkZS9mcGRmZG9jL2ZwZGZfdGFnZ2VkLmggYi9jb3JlL2luY2x1ZGUvZnBkZmRvYy9mcGRmX3RhZ2dlZC5oCmluZGV4IGE0NGMyNjMuLmYzYWIwMWUgMTAwNjQ0Ci0tLSBhL2NvcmUvaW5jbHVkZS9mcGRmZG9jL2ZwZGZfdGFnZ2VkLmgKKysrIGIvY29yZS9pbmNsdWRlL2ZwZGZkb2MvZnBkZl90YWdnZWQuaApAQCAtMSw5OSArMSw5OSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlBERl9UQUdHRURfSF8NCi0jZGVmaW5lIF9GUERGX1RBR0dFRF9IXw0KLWNsYXNzIENQREZfU3RydWN0VHJlZTsNCi1jbGFzcyBDUERGX1N0cnVjdEVsZW1lbnQ7DQotc3RydWN0IENQREZfU3RydWN0S2lkOw0KLWNsYXNzIENQREZfRG9jdW1lbnQ7DQotY2xhc3MgQ1BERl9QYWdlOw0KLWNsYXNzIElQREZfUmVmbG93RW5naW5lOw0KLWNsYXNzIElQREZfUmVmbG93ZWRQYWdlOw0KLWNsYXNzIENQREZfU3RydWN0VHJlZSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgc3RhdGljIENQREZfU3RydWN0VHJlZSogTG9hZERvYyhjb25zdCBDUERGX0RvY3VtZW50KiBwRG9jKTsNCi0NCi0gICAgc3RhdGljIENQREZfU3RydWN0VHJlZSogTG9hZFBhZ2UoY29uc3QgQ1BERl9Eb2N1bWVudCogcERvYywgY29uc3QgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QpOw0KLQ0KLSAgICB2aXJ0dWFsIH5DUERGX1N0cnVjdFRyZWUoKSB7fQ0KLQ0KLSAgICB2aXJ0dWFsIGludAkJCUNvdW50VG9wRWxlbWVudHMoKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgQ1BERl9TdHJ1Y3RFbGVtZW50KglHZXRUb3BFbGVtZW50KGludCBpKSBjb25zdCA9IDA7DQotfTsNCi1zdHJ1Y3QgQ1BERl9TdHJ1Y3RLaWQgew0KLSAgICBlbnVtIHsNCi0gICAgICAgIEludmFsaWQsDQotICAgICAgICBFbGVtZW50LA0KLSAgICAgICAgUGFnZUNvbnRlbnQsDQotICAgICAgICBTdHJlYW1Db250ZW50LA0KLSAgICAgICAgT2JqZWN0DQotICAgIH0gbV9UeXBlOw0KLQ0KLSAgICB1bmlvbiB7DQotICAgICAgICBzdHJ1Y3Qgew0KLQ0KLSAgICAgICAgICAgIENQREZfU3RydWN0RWxlbWVudCoJbV9wRWxlbWVudDsNCi0NCi0gICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqCW1fcERpY3Q7DQotICAgICAgICB9IG1fRWxlbWVudDsNCi0gICAgICAgIHN0cnVjdCB7DQotDQotICAgICAgICAgICAgRlhfRFdPUkQJCQltX1BhZ2VPYmpOdW07DQotDQotICAgICAgICAgICAgRlhfRFdPUkQJCQltX0NvbnRlbnRJZDsNCi0gICAgICAgIH0gbV9QYWdlQ29udGVudDsNCi0gICAgICAgIHN0cnVjdCB7DQotDQotICAgICAgICAgICAgRlhfRFdPUkQJCQltX1BhZ2VPYmpOdW07DQotDQotICAgICAgICAgICAgRlhfRFdPUkQJCQltX0NvbnRlbnRJZDsNCi0NCi0gICAgICAgICAgICBGWF9EV09SRAkJCW1fUmVmT2JqTnVtOw0KLSAgICAgICAgfSBtX1N0cmVhbUNvbnRlbnQ7DQotICAgICAgICBzdHJ1Y3Qgew0KLQ0KLSAgICAgICAgICAgIEZYX0RXT1JECQkJbV9QYWdlT2JqTnVtOw0KLQ0KLSAgICAgICAgICAgIEZYX0RXT1JECQkJbV9SZWZPYmpOdW07DQotICAgICAgICB9IG1fT2JqZWN0Ow0KLSAgICB9Ow0KLX07DQotY2xhc3MgQ1BERl9TdHJ1Y3RFbGVtZW50IDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICB2aXJ0dWFsIENQREZfU3RydWN0VHJlZSoJR2V0VHJlZSgpIGNvbnN0ID0gMDsNCi0NCi0gICAgdmlydHVhbCBjb25zdCBDRlhfQnl0ZVN0cmluZyYJR2V0VHlwZSgpIGNvbnN0ID0gMDsNCi0NCi0gICAgdmlydHVhbCBDUERGX1N0cnVjdEVsZW1lbnQqCUdldFBhcmVudCgpIGNvbnN0ID0gMDsNCi0NCi0gICAgdmlydHVhbCBDUERGX0RpY3Rpb25hcnkgKglHZXREaWN0KCkgY29uc3QgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIGludAkJCQkJQ291bnRLaWRzKCkgY29uc3QgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIGNvbnN0IENQREZfU3RydWN0S2lkJglHZXRLaWQoaW50IGluZGV4KSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgQ0ZYX1B0ckFycmF5KgkJR2V0T2JqZWN0QXJyYXkoKSA9IDA7DQotDQotICAgIHZpcnR1YWwgQ1BERl9PYmplY3QqCQlHZXRBdHRyKEZYX0JTVFIgb3duZXIsIEZYX0JTVFIgbmFtZSwgRlhfQk9PTCBiSW5oZXJpdGFibGUgPSBGQUxTRSwgRlhfRkxPQVQgZkxldmVsID0gMC4wRikgPSAwOw0KLQ0KLQ0KLQ0KLSAgICB2aXJ0dWFsIENGWF9CeXRlU3RyaW5nCQlHZXROYW1lKEZYX0JTVFIgb3duZXIsIEZYX0JTVFIgbmFtZSwgRlhfQlNUUiBkZWZhdWx0X3ZhbHVlLCBGWF9CT09MIGJJbmhlcml0YWJsZSA9IEZBTFNFLCBpbnQgc3ViaW5kZXggPSAtMSkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0FSR0IJCQkJR2V0Q29sb3IoRlhfQlNUUiBvd25lciwgRlhfQlNUUiBuYW1lLCBGWF9BUkdCIGRlZmF1bHRfdmFsdWUsIEZYX0JPT0wgYkluaGVyaXRhYmxlID0gRkFMU0UsIGludCBzdWJpbmRleCA9IC0xKSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfRkxPQVQJCQlHZXROdW1iZXIoRlhfQlNUUiBvd25lciwgRlhfQlNUUiBuYW1lLCBGWF9GTE9BVCBkZWZhdWx0X3ZhbHVlLCBGWF9CT09MIGJJbmhlcml0YWJsZSA9IEZBTFNFLCBpbnQgc3ViaW5kZXggPSAtMSkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIGludAkJCQkJR2V0SW50ZWdlcihGWF9CU1RSIG93bmVyLCBGWF9CU1RSIG5hbWUsIGludCBkZWZhdWx0X3ZhbHVlLCBGWF9CT09MIGJJbmhlcml0YWJsZSA9IEZBTFNFLCBpbnQgc3ViaW5kZXggPSAtMSkgPSAwOw0KLQ0KLX07DQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlBERl9UQUdHRURfSF8KKyNkZWZpbmUgX0ZQREZfVEFHR0VEX0hfCitjbGFzcyBDUERGX1N0cnVjdFRyZWU7CitjbGFzcyBDUERGX1N0cnVjdEVsZW1lbnQ7CitzdHJ1Y3QgQ1BERl9TdHJ1Y3RLaWQ7CitjbGFzcyBDUERGX0RvY3VtZW50OworY2xhc3MgQ1BERl9QYWdlOworY2xhc3MgSVBERl9SZWZsb3dFbmdpbmU7CitjbGFzcyBJUERGX1JlZmxvd2VkUGFnZTsKK2NsYXNzIENQREZfU3RydWN0VHJlZSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBzdGF0aWMgQ1BERl9TdHJ1Y3RUcmVlKiBMb2FkRG9jKGNvbnN0IENQREZfRG9jdW1lbnQqIHBEb2MpOworCisgICAgc3RhdGljIENQREZfU3RydWN0VHJlZSogTG9hZFBhZ2UoY29uc3QgQ1BERl9Eb2N1bWVudCogcERvYywgY29uc3QgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QpOworCisgICAgdmlydHVhbCB+Q1BERl9TdHJ1Y3RUcmVlKCkge30KKworICAgIHZpcnR1YWwgaW50CQkJQ291bnRUb3BFbGVtZW50cygpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgQ1BERl9TdHJ1Y3RFbGVtZW50KglHZXRUb3BFbGVtZW50KGludCBpKSBjb25zdCA9IDA7Cit9Oworc3RydWN0IENQREZfU3RydWN0S2lkIHsKKyAgICBlbnVtIHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAgICAgRWxlbWVudCwKKyAgICAgICAgUGFnZUNvbnRlbnQsCisgICAgICAgIFN0cmVhbUNvbnRlbnQsCisgICAgICAgIE9iamVjdAorICAgIH0gbV9UeXBlOworCisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworCisgICAgICAgICAgICBDUERGX1N0cnVjdEVsZW1lbnQqCW1fcEVsZW1lbnQ7CisKKyAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSoJbV9wRGljdDsKKyAgICAgICAgfSBtX0VsZW1lbnQ7CisgICAgICAgIHN0cnVjdCB7CisKKyAgICAgICAgICAgIEZYX0RXT1JECQkJbV9QYWdlT2JqTnVtOworCisgICAgICAgICAgICBGWF9EV09SRAkJCW1fQ29udGVudElkOworICAgICAgICB9IG1fUGFnZUNvbnRlbnQ7CisgICAgICAgIHN0cnVjdCB7CisKKyAgICAgICAgICAgIEZYX0RXT1JECQkJbV9QYWdlT2JqTnVtOworCisgICAgICAgICAgICBGWF9EV09SRAkJCW1fQ29udGVudElkOworCisgICAgICAgICAgICBGWF9EV09SRAkJCW1fUmVmT2JqTnVtOworICAgICAgICB9IG1fU3RyZWFtQ29udGVudDsKKyAgICAgICAgc3RydWN0IHsKKworICAgICAgICAgICAgRlhfRFdPUkQJCQltX1BhZ2VPYmpOdW07CisKKyAgICAgICAgICAgIEZYX0RXT1JECQkJbV9SZWZPYmpOdW07CisgICAgICAgIH0gbV9PYmplY3Q7CisgICAgfTsKK307CitjbGFzcyBDUERGX1N0cnVjdEVsZW1lbnQgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgdmlydHVhbCBDUERGX1N0cnVjdFRyZWUqCUdldFRyZWUoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGNvbnN0IENGWF9CeXRlU3RyaW5nJglHZXRUeXBlKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBDUERGX1N0cnVjdEVsZW1lbnQqCUdldFBhcmVudCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgQ1BERl9EaWN0aW9uYXJ5ICoJR2V0RGljdCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgaW50CQkJCQlDb3VudEtpZHMoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGNvbnN0IENQREZfU3RydWN0S2lkJglHZXRLaWQoaW50IGluZGV4KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIENGWF9QdHJBcnJheSoJCUdldE9iamVjdEFycmF5KCkgPSAwOworCisgICAgdmlydHVhbCBDUERGX09iamVjdCoJCUdldEF0dHIoRlhfQlNUUiBvd25lciwgRlhfQlNUUiBuYW1lLCBGWF9CT09MIGJJbmhlcml0YWJsZSA9IEZBTFNFLCBGWF9GTE9BVCBmTGV2ZWwgPSAwLjBGKSA9IDA7CisKKworCisgICAgdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJR2V0TmFtZShGWF9CU1RSIG93bmVyLCBGWF9CU1RSIG5hbWUsIEZYX0JTVFIgZGVmYXVsdF92YWx1ZSwgRlhfQk9PTCBiSW5oZXJpdGFibGUgPSBGQUxTRSwgaW50IHN1YmluZGV4ID0gLTEpID0gMDsKKworICAgIHZpcnR1YWwgRlhfQVJHQgkJCQlHZXRDb2xvcihGWF9CU1RSIG93bmVyLCBGWF9CU1RSIG5hbWUsIEZYX0FSR0IgZGVmYXVsdF92YWx1ZSwgRlhfQk9PTCBiSW5oZXJpdGFibGUgPSBGQUxTRSwgaW50IHN1YmluZGV4ID0gLTEpID0gMDsKKworICAgIHZpcnR1YWwgRlhfRkxPQVQJCQlHZXROdW1iZXIoRlhfQlNUUiBvd25lciwgRlhfQlNUUiBuYW1lLCBGWF9GTE9BVCBkZWZhdWx0X3ZhbHVlLCBGWF9CT09MIGJJbmhlcml0YWJsZSA9IEZBTFNFLCBpbnQgc3ViaW5kZXggPSAtMSkgPSAwOworCisgICAgdmlydHVhbCBpbnQJCQkJCUdldEludGVnZXIoRlhfQlNUUiBvd25lciwgRlhfQlNUUiBuYW1lLCBpbnQgZGVmYXVsdF92YWx1ZSwgRlhfQk9PTCBiSW5oZXJpdGFibGUgPSBGQUxTRSwgaW50IHN1YmluZGV4ID0gLTEpID0gMDsKKworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9pbmNsdWRlL2ZwZGZkb2MvZnBkZl92dC5oIGIvY29yZS9pbmNsdWRlL2ZwZGZkb2MvZnBkZl92dC5oCmluZGV4IGUyODI1YzEuLjQxMDI1Y2IgMTAwNjQ0Ci0tLSBhL2NvcmUvaW5jbHVkZS9mcGRmZG9jL2ZwZGZfdnQuaAorKysgYi9jb3JlL2luY2x1ZGUvZnBkZmRvYy9mcGRmX3Z0LmgKQEAgLTEsNDQ0ICsxLDQ0NCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlBERl9WVF9IXw0KLSNkZWZpbmUgX0ZQREZfVlRfSF8NCi0jaW5jbHVkZSAiLi4vZnhjcnQvZnhfYmFzaWMuaCINCi0jaW5jbHVkZSAiLi4vZnBkZmFwaS9mcGRmX3BhcnNlci5oIg0KLXN0cnVjdCBDUFZUX1dvcmRQbGFjZTsNCi1zdHJ1Y3QgQ1BWVF9Xb3JkUmFuZ2U7DQotc3RydWN0IENQVlRfV29yZDsNCi1zdHJ1Y3QgQ1BWVF9MaW5lOw0KLXN0cnVjdCBDUFZUX1NlY3Rpb247DQotY2xhc3MgSVBERl9WYXJpYWJsZVRleHRfUHJvdmlkZXI7DQotY2xhc3MgSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3I7DQotY2xhc3MgSVBERl9WYXJpYWJsZVRleHQ7DQotc3RydWN0IENQVlRfV29yZFBsYWNlIHsNCi0NCi0gICAgQ1BWVF9Xb3JkUGxhY2UoKSA6IG5TZWNJbmRleCgtMSksIG5MaW5lSW5kZXgoLTEpLCBuV29yZEluZGV4KC0xKQ0KLSAgICB7DQotICAgIH0NCi0NCi0gICAgQ1BWVF9Xb3JkUGxhY2UoRlhfSU5UMzIgblNlY0luZGV4LCBGWF9JTlQzMiBuTGluZUluZGV4LCBGWF9JTlQzMiBuV29yZEluZGV4KQ0KLSAgICB7DQotICAgICAgICB0aGlzLT5uU2VjSW5kZXggPSBuU2VjSW5kZXg7DQotICAgICAgICB0aGlzLT5uTGluZUluZGV4ID0gbkxpbmVJbmRleDsNCi0gICAgICAgIHRoaXMtPm5Xb3JkSW5kZXggPSBuV29yZEluZGV4Ow0KLSAgICB9DQotDQotICAgIHZvaWQgRGVmYXVsdCgpDQotICAgIHsNCi0gICAgICAgIG5TZWNJbmRleCA9IG5MaW5lSW5kZXggPSBuV29yZEluZGV4ID0gLTE7DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTCBvcGVyYXRvciA9PSAoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIHdwLm5TZWNJbmRleCA9PSB0aGlzLT5uU2VjSW5kZXggJiYgd3AubkxpbmVJbmRleCA9PSB0aGlzLT5uTGluZUluZGV4ICYmIHdwLm5Xb3JkSW5kZXggPT0gdGhpcy0+bldvcmRJbmRleDsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MIG9wZXJhdG9yICE9IChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gd3AublNlY0luZGV4ICE9IHRoaXMtPm5TZWNJbmRleCB8fCB3cC5uTGluZUluZGV4ICE9IHRoaXMtPm5MaW5lSW5kZXggfHwgd3AubldvcmRJbmRleCAhPSB0aGlzLT5uV29yZEluZGV4Ow0KLSAgICB9DQotDQotICAgIGlubGluZSBGWF9JTlQzMiBXb3JkQ21wKGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3ApIGNvbnN0DQotICAgIHsNCi0gICAgICAgIGlmICh0aGlzLT5uU2VjSW5kZXggPiB3cC5uU2VjSW5kZXgpIHsNCi0gICAgICAgICAgICByZXR1cm4gMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICh0aGlzLT5uU2VjSW5kZXggPCB3cC5uU2VjSW5kZXgpIHsNCi0gICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICB9DQotICAgICAgICBpZiAodGhpcy0+bkxpbmVJbmRleCA+IHdwLm5MaW5lSW5kZXgpIHsNCi0gICAgICAgICAgICByZXR1cm4gMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICh0aGlzLT5uTGluZUluZGV4IDwgd3AubkxpbmVJbmRleCkgew0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICh0aGlzLT5uV29yZEluZGV4ID4gd3AubldvcmRJbmRleCkgew0KLSAgICAgICAgICAgIHJldHVybiAxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHRoaXMtPm5Xb3JkSW5kZXggPCB3cC5uV29yZEluZGV4KSB7DQotICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0NCi0gICAgaW5saW5lIEZYX0lOVDMyIExpbmVDbXAoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgaWYgKHRoaXMtPm5TZWNJbmRleCA+IHdwLm5TZWNJbmRleCkgew0KLSAgICAgICAgICAgIHJldHVybiAxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHRoaXMtPm5TZWNJbmRleCA8IHdwLm5TZWNJbmRleCkgew0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICh0aGlzLT5uTGluZUluZGV4ID4gd3AubkxpbmVJbmRleCkgew0KLSAgICAgICAgICAgIHJldHVybiAxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHRoaXMtPm5MaW5lSW5kZXggPCB3cC5uTGluZUluZGV4KSB7DQotICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0NCi0gICAgaW5saW5lIEZYX0lOVDMyIFNlY0NtcChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwKSBjb25zdA0KLSAgICB7DQotICAgICAgICBpZiAodGhpcy0+blNlY0luZGV4ID4gd3AublNlY0luZGV4KSB7DQotICAgICAgICAgICAgcmV0dXJuIDE7DQotICAgICAgICB9DQotICAgICAgICBpZiAodGhpcy0+blNlY0luZGV4IDwgd3AublNlY0luZGV4KSB7DQotICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0NCi0gICAgRlhfSU5UMzIJCQkJCQkJblNlY0luZGV4Ow0KLQ0KLSAgICBGWF9JTlQzMgkJCQkJCQluTGluZUluZGV4Ow0KLQ0KLSAgICBGWF9JTlQzMgkJCQkJCQluV29yZEluZGV4Ow0KLX07DQotc3RydWN0IENQVlRfV29yZFJhbmdlIHsNCi0NCi0gICAgQ1BWVF9Xb3JkUmFuZ2UoKQ0KLSAgICB7DQotICAgIH0NCi0NCi0gICAgQ1BWVF9Xb3JkUmFuZ2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBiZWdpbiwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBlbmQpDQotICAgIHsNCi0gICAgICAgIFNldChiZWdpbiwgZW5kKTsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkIERlZmF1bHQoKQ0KLSAgICB7DQotICAgICAgICBCZWdpblBvcy5EZWZhdWx0KCk7DQotICAgICAgICBFbmRQb3MuRGVmYXVsdCgpOw0KLSAgICB9DQotDQotICAgIHZvaWQgU2V0KGNvbnN0IENQVlRfV29yZFBsYWNlICYgYmVnaW4sIGNvbnN0IENQVlRfV29yZFBsYWNlICYgZW5kKQ0KLSAgICB7DQotICAgICAgICB0aGlzLT5CZWdpblBvcyA9IGJlZ2luOw0KLSAgICAgICAgdGhpcy0+RW5kUG9zID0gZW5kOw0KLSAgICAgICAgU3dhcFdvcmRQbGFjZSgpOw0KLSAgICB9DQotDQotICAgIHZvaWQgU2V0QmVnaW5Qb3MoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBiZWdpbikNCi0gICAgew0KLSAgICAgICAgdGhpcy0+QmVnaW5Qb3MgPSBiZWdpbjsNCi0gICAgICAgIFN3YXBXb3JkUGxhY2UoKTsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkIFNldEVuZFBvcyhjb25zdCBDUFZUX1dvcmRQbGFjZSAmIGVuZCkNCi0gICAgew0KLSAgICAgICAgdGhpcy0+RW5kUG9zID0gZW5kOw0KLSAgICAgICAgU3dhcFdvcmRQbGFjZSgpOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wgSXNFeGlzdCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiB0aGlzLT5CZWdpblBvcyAhPSB0aGlzLT5FbmRQb3M7DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTCBvcGVyYXRvciAhPSAoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiB3cikgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIHdyLkJlZ2luUG9zICE9IHRoaXMtPkJlZ2luUG9zIHx8IHdyLkVuZFBvcyAhPSB0aGlzLT5FbmRQb3M7DQotICAgIH0NCi0NCi0gICAgdm9pZCBTd2FwV29yZFBsYWNlKCkNCi0gICAgew0KLSAgICAgICAgaWYgKEJlZ2luUG9zLldvcmRDbXAoRW5kUG9zKSA+IDApIHsNCi0gICAgICAgICAgICBDUFZUX1dvcmRQbGFjZSBwbGFjZSA9IEVuZFBvczsNCi0gICAgICAgICAgICBFbmRQb3MgPSBCZWdpblBvczsNCi0gICAgICAgICAgICBCZWdpblBvcyA9IHBsYWNlOw0KLSAgICAgICAgfQ0KLSAgICB9DQotDQotICAgIENQVlRfV29yZFBsYWNlIEJlZ2luUG9zOw0KLQ0KLSAgICBDUFZUX1dvcmRQbGFjZSBFbmRQb3M7DQotfTsNCi1zdHJ1Y3QgQ1BWVF9TZWNQcm9wcyA6IHB1YmxpYyBDRlhfT2JqZWN0IHsNCi0NCi0gICAgQ1BWVF9TZWNQcm9wcygpIDogZkxpbmVMZWFkaW5nKDAuMGYpLCBmTGluZUluZGVudCgwLjBmKSwgbkFsaWdubWVudCgwKQ0KLSAgICB7DQotICAgIH0NCi0NCi0gICAgQ1BWVF9TZWNQcm9wcyhGWF9GTE9BVCBsaW5lTGVhZGluZywgRlhfRkxPQVQgbGluZUluZGVudCwgRlhfSU5UMzIgYWxpZ25tZW50KSA6DQotICAgICAgICBmTGluZUxlYWRpbmcobGluZUxlYWRpbmcpLCBmTGluZUluZGVudChsaW5lSW5kZW50KSwgbkFsaWdubWVudChhbGlnbm1lbnQpDQotICAgIHsNCi0gICAgfQ0KLQ0KLSAgICBDUFZUX1NlY1Byb3BzKGNvbnN0IENQVlRfU2VjUHJvcHMgJiBvdGhlcikgOg0KLSAgICAgICAgZkxpbmVMZWFkaW5nKG90aGVyLmZMaW5lTGVhZGluZyksIGZMaW5lSW5kZW50KG90aGVyLmZMaW5lSW5kZW50KSwgbkFsaWdubWVudChvdGhlci5uQWxpZ25tZW50KQ0KLSAgICB7DQotICAgIH0NCi0NCi0gICAgRlhfRkxPQVQJCQlmTGluZUxlYWRpbmc7DQotDQotICAgIEZYX0ZMT0FUCQkJZkxpbmVJbmRlbnQ7DQotDQotICAgIEZYX0lOVDMyCQkJbkFsaWdubWVudDsNCi19Ow0KLXN0cnVjdCBDUFZUX1dvcmRQcm9wcyA6IHB1YmxpYyBDRlhfT2JqZWN0IHsNCi0NCi0gICAgQ1BWVF9Xb3JkUHJvcHMoKSA6IG5Gb250SW5kZXgoLTEpLCBmRm9udFNpemUoMC4wZiksIGR3V29yZENvbG9yKDApLCBuU2NyaXB0VHlwZSgwKSwgbldvcmRTdHlsZSgwKSwNCi0gICAgICAgIGZDaGFyU3BhY2UoMC4wZiksIG5Ib3J6U2NhbGUoMCkNCi0gICAgew0KLSAgICB9DQotDQotICAgIENQVlRfV29yZFByb3BzKEZYX0lOVDMyCWZvbnRJbmRleCwgRlhfRkxPQVQgZm9udFNpemUsIEZYX0NPTE9SUkVGIHdvcmRDb2xvciA9IDAsIEZYX0lOVDMyIHNjcmlwdFR5cGUgPSAwLCBGWF9JTlQzMiB3b3JkU3R5bGUgPSAwLA0KLSAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCBjaGFyU3BhY2UgPSAwLCBGWF9JTlQzMiBob3J6U2NhbGUgPSAxMDApIDoNCi0gICAgICAgIG5Gb250SW5kZXgoZm9udEluZGV4KSwgZkZvbnRTaXplKGZvbnRTaXplKSwgZHdXb3JkQ29sb3Iod29yZENvbG9yKSwgblNjcmlwdFR5cGUoc2NyaXB0VHlwZSksDQotICAgICAgICBuV29yZFN0eWxlKHdvcmRTdHlsZSksIGZDaGFyU3BhY2UoY2hhclNwYWNlKSwgbkhvcnpTY2FsZShob3J6U2NhbGUpDQotICAgIHsNCi0gICAgfQ0KLQ0KLSAgICBDUFZUX1dvcmRQcm9wcyhjb25zdCBDUFZUX1dvcmRQcm9wcyAmIG90aGVyKSA6DQotICAgICAgICBuRm9udEluZGV4KG90aGVyLm5Gb250SW5kZXgpLCBmRm9udFNpemUob3RoZXIuZkZvbnRTaXplKSwgZHdXb3JkQ29sb3Iob3RoZXIuZHdXb3JkQ29sb3IpLA0KLSAgICAgICAgblNjcmlwdFR5cGUob3RoZXIublNjcmlwdFR5cGUpLCBuV29yZFN0eWxlKG90aGVyLm5Xb3JkU3R5bGUpLCBmQ2hhclNwYWNlKG90aGVyLmZDaGFyU3BhY2UpLA0KLSAgICAgICAgbkhvcnpTY2FsZShvdGhlci5uSG9yelNjYWxlKQ0KLSAgICB7DQotICAgIH0NCi0NCi0gICAgRlhfSU5UMzIJCQkJCW5Gb250SW5kZXg7DQotDQotICAgIEZYX0ZMT0FUCQkJCQlmRm9udFNpemU7DQotDQotICAgIEZYX0NPTE9SUkVGCQkJCQlkd1dvcmRDb2xvcjsNCi0NCi0gICAgRlhfSU5UMzIJCQkJCW5TY3JpcHRUeXBlOw0KLQ0KLSAgICBGWF9JTlQzMgkJCQkJbldvcmRTdHlsZTsNCi0NCi0gICAgRlhfRkxPQVQJCQkJCWZDaGFyU3BhY2U7DQotDQotICAgIEZYX0lOVDMyCQkJCQluSG9yelNjYWxlOw0KLX07DQotc3RydWN0IENQVlRfV29yZCB7DQotDQotICAgIENQVlRfV29yZCgpIDogV29yZCgwKSwgbkNoYXJzZXQoMCksIHB0V29yZCgwLCAwKSwgZkFzY2VudCgwLjBmKSwgZkRlc2NlbnQoMC4wZiksIGZXaWR0aCgwLjBmKSwNCi0gICAgICAgIGZGb250U2l6ZSgwKSwgV29yZFByb3BzKCkNCi0gICAgew0KLSAgICB9DQotDQotICAgIEZYX1dPUkQJCQkJCQlXb3JkOw0KLQ0KLSAgICBGWF9JTlQzMgkJCQkJbkNoYXJzZXQ7DQotDQotICAgIENQVlRfV29yZFBsYWNlCQkJCVdvcmRQbGFjZTsNCi0NCi0gICAgQ1BERl9Qb2ludAkJCQkJcHRXb3JkOw0KLQ0KLSAgICBGWF9GTE9BVAkJCQkJZkFzY2VudDsNCi0NCi0gICAgRlhfRkxPQVQJCQkJCWZEZXNjZW50Ow0KLQ0KLSAgICBGWF9GTE9BVAkJCQkJZldpZHRoOw0KLQ0KLSAgICBGWF9JTlQzMgkJCQkJbkZvbnRJbmRleDsNCi0NCi0gICAgRlhfRkxPQVQJCQkJCWZGb250U2l6ZTsNCi0NCi0gICAgQ1BWVF9Xb3JkUHJvcHMJCQkJV29yZFByb3BzOw0KLX07DQotc3RydWN0IENQVlRfTGluZSB7DQotDQotICAgIENQVlRfTGluZSgpIDogcHRMaW5lKDAsIDApLCBmTGluZVdpZHRoKDAuMGYpLCBmTGluZUFzY2VudCgwLjBmKSwgZkxpbmVEZXNjZW50KDAuMGYpDQotICAgIHsNCi0gICAgfQ0KLQ0KLSAgICBDUFZUX1dvcmRQbGFjZQkJCQlsaW5lcGxhY2U7DQotDQotICAgIENQVlRfV29yZFBsYWNlCQkJCWxpbmVFbmQ7DQotDQotICAgIENQREZfUG9pbnQJCQkJCXB0TGluZTsNCi0NCi0gICAgRlhfRkxPQVQJCQkJCWZMaW5lV2lkdGg7DQotDQotICAgIEZYX0ZMT0FUCQkJCQlmTGluZUFzY2VudDsNCi0NCi0gICAgRlhfRkxPQVQJCQkJCWZMaW5lRGVzY2VudDsNCi19Ow0KLXN0cnVjdCBDUFZUX1NlY3Rpb24gew0KLQ0KLSAgICBDUFZUX1dvcmRQbGFjZQkJCQlzZWNwbGFjZTsNCi0NCi0gICAgQ1BERl9SZWN0CQkJCQlyY1NlY3Rpb247DQotDQotICAgIENQVlRfU2VjUHJvcHMJCQkJU2VjUHJvcHM7DQotDQotICAgIENQVlRfV29yZFByb3BzCQkJCVdvcmRQcm9wczsNCi19Ow0KLWNsYXNzIElQREZfVmFyaWFibGVUZXh0X1Byb3ZpZGVyDQotew0KLXB1YmxpYzoNCi0NCi0gICAgdmlydHVhbCBGWF9JTlQzMgkJCQkJCUdldENoYXJXaWR0aChGWF9JTlQzMiBuRm9udEluZGV4LCBGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIG5Xb3JkU3R5bGUpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9JTlQzMgkJCQkJCUdldFR5cGVBc2NlbnQoRlhfSU5UMzIgbkZvbnRJbmRleCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJR2V0VHlwZURlc2NlbnQoRlhfSU5UMzIgbkZvbnRJbmRleCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJR2V0V29yZEZvbnRJbmRleChGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIGNoYXJzZXQsIEZYX0lOVDMyIG5Gb250SW5kZXgpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJCQkJCUlzTGF0aW5Xb3JkKEZYX1dPUkQgd29yZCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJR2V0RGVmYXVsdEZvbnRJbmRleCgpID0gMDsNCi19Ow0KLWNsYXNzIElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yDQotew0KLXB1YmxpYzoNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJCQkJCU5leHRXb3JkKCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJUHJldldvcmQoKSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCQkJCQlOZXh0TGluZSgpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJCQkJCVByZXZMaW5lKCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJTmV4dFNlY3Rpb24oKSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCQkJCQlQcmV2U2VjdGlvbigpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJCQkJCUdldFdvcmQoQ1BWVF9Xb3JkICYgd29yZCkgY29uc3QgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJU2V0V29yZChjb25zdCBDUFZUX1dvcmQgJiB3b3JkKSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCQkJCQlHZXRMaW5lKENQVlRfTGluZSAmIGxpbmUpIGNvbnN0ID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJCQkJCUdldFNlY3Rpb24oQ1BWVF9TZWN0aW9uICYgc2VjdGlvbikgY29uc3QgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsCUZYX0JPT0wJCQkJCQkJU2V0U2VjdGlvbihjb25zdCBDUFZUX1NlY3Rpb24gJiBzZWN0aW9uKSA9IDA7DQotDQotICAgIHZpcnR1YWwgdm9pZAkJCQkJCQlTZXRBdChGWF9JTlQzMiBuV29yZEluZGV4KSA9IDA7DQotDQotICAgIHZpcnR1YWwgdm9pZAkJCQkJCQlTZXRBdChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSA9IDA7DQotDQotICAgIHZpcnR1YWwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJgkJCUdldEF0KCkgY29uc3QgPSAwOw0KLX07DQotY2xhc3MgSVBERl9WYXJpYWJsZVRleHQNCi17DQotcHVibGljOg0KLQ0KLSAgICBzdGF0aWMgSVBERl9WYXJpYWJsZVRleHQqCQkJTmV3VmFyaWFibGVUZXh0KCk7DQotDQotICAgIHN0YXRpYyB2b2lkCQkJCQkJCURlbFZhcmlhYmxlVGV4dChJUERGX1ZhcmlhYmxlVGV4dCogcFZUKTsNCi1wdWJsaWM6DQotDQotICAgIHZpcnR1YWwgSVBERl9WYXJpYWJsZVRleHRfUHJvdmlkZXIqCQlTZXRQcm92aWRlcihJUERGX1ZhcmlhYmxlVGV4dF9Qcm92aWRlciAqIHBQcm92aWRlcikgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yKgkJR2V0SXRlcmF0b3IoKSA9IDA7DQotDQotICAgIHZpcnR1YWwgdm9pZAkJCQkJCQlTZXRQbGF0ZVJlY3QoY29uc3QgQ1BERl9SZWN0ICYgcmVjdCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0QWxpZ25tZW50KEZYX0lOVDMyIG5Gb3JtYXQgPSAwKSA9IDA7DQotDQotICAgIHZpcnR1YWwgdm9pZAkJCQkJCQlTZXRQYXNzd29yZENoYXIoRlhfV09SRCB3U3ViV29yZCA9ICcqJykgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0TGltaXRDaGFyKEZYX0lOVDMyIG5MaW1pdENoYXIgPSAwKSA9IDA7DQotDQotICAgIHZpcnR1YWwgdm9pZAkJCQkJCQlTZXRDaGFyQXJyYXkoRlhfSU5UMzIgbkNoYXJBcnJheSA9IDApID0gMDsNCi0NCi0gICAgdmlydHVhbCB2b2lkCQkJCQkJCVNldENoYXJTcGFjZShGWF9GTE9BVCBmQ2hhclNwYWNlID0gMC4wZikgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0SG9yelNjYWxlKEZYX0lOVDMyIG5Ib3J6U2NhbGUgPSAxMDApID0gMDsNCi0NCi0gICAgdmlydHVhbCB2b2lkCQkJCQkJCVNldE11bHRpTGluZShGWF9CT09MIGJNdWx0aUxpbmUgPSBUUlVFKSA9IDA7DQotDQotICAgIHZpcnR1YWwgdm9pZAkJCQkJCQlTZXRBdXRvUmV0dXJuKEZYX0JPT0wgYkF1dG8gPSBUUlVFKSA9IDA7DQotDQotICAgIHZpcnR1YWwgdm9pZAkJCQkJCQlTZXRBdXRvRm9udFNpemUoRlhfQk9PTCBiQXV0byA9IFRSVUUpID0gMDsNCi0NCi0gICAgdmlydHVhbCB2b2lkCQkJCQkJCVNldEZvbnRTaXplKEZYX0ZMT0FUIGZGb250U2l6ZSkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0TGluZUxlYWRpbmcoRlhfRkxPQVQgZkxpbmVMZWFkaW5nKSA9IDA7DQotDQotICAgIHZpcnR1YWwgdm9pZAkJCQkJCQlTZXRSaWNoVGV4dChGWF9CT09MIGJSaWNoVGV4dCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQkJCQkJSW5pdGlhbGl6ZSgpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJCQkJCUlzVmFsaWQoKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCQkJCQlJc1JpY2hUZXh0KCkgY29uc3QgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQkJCQkJUmVhcnJhbmdlQWxsKCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQkJCQkJUmVhcnJhbmdlUGFydChjb25zdCBDUFZUX1dvcmRSYW5nZSAmIFBsYWNlUmFuZ2UpID0gMDsNCi0NCi0gICAgdmlydHVhbCB2b2lkCQkJCQkJCVJlc2V0QWxsKCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0VGV4dChGWF9MUENXU1RSIHRleHQsIEZYX0lOVDMyIGNoYXJzZXQgPSAxLCBjb25zdCBDUFZUX1NlY1Byb3BzICogcFNlY1Byb3BzID0gTlVMTCwNCi0gICAgICAgICAgICBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMgPSBOVUxMKSA9IDA7DQotDQotICAgIHZpcnR1YWwgQ1BWVF9Xb3JkUGxhY2UJCQkJCUluc2VydFdvcmQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSwgRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBjaGFyc2V0ID0gMSwNCi0gICAgICAgICAgICBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMgPSBOVUxMKSA9IDA7DQotDQotICAgIHZpcnR1YWwgQ1BWVF9Xb3JkUGxhY2UJCQkJCUluc2VydFNlY3Rpb24oY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSwgY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcyA9IE5VTEwsDQotICAgICAgICAgICAgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzID0gTlVMTCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIENQVlRfV29yZFBsYWNlCQkJCQlJbnNlcnRUZXh0KGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIEZYX0xQQ1dTVFIgdGV4dCwgRlhfSU5UMzIgY2hhcnNldCA9IDEsDQotICAgICAgICAgICAgY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcyA9IE5VTEwsCWNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcyA9IE5VTEwpID0gMDsNCi0NCi0gICAgdmlydHVhbCBDUFZUX1dvcmRQbGFjZQkJCQkJRGVsZXRlV29yZHMoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiBQbGFjZVJhbmdlKSA9IDA7DQotDQotICAgIHZpcnR1YWwgQ1BWVF9Xb3JkUGxhY2UJCQkJCURlbGV0ZVdvcmQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIENQVlRfV29yZFBsYWNlCQkJCQlCYWNrU3BhY2VXb3JkKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpID0gMDsNCi0NCi0gICAgdmlydHVhbCBjb25zdCBDUERGX1JlY3QgJgkJCQlHZXRQbGF0ZVJlY3QoKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgQ1BERl9SZWN0CQkJCQkJR2V0Q29udGVudFJlY3QoKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfSU5UMzIJCQkJCQlHZXRUb3RhbFdvcmRzKCkgY29uc3QgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0ZMT0FUCQkJCQkJR2V0Rm9udFNpemUoKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfSU5UMzIJCQkJCQlHZXRBbGlnbm1lbnQoKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfV09SRAkJCQkJCQlHZXRQYXNzd29yZENoYXIoKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfSU5UMzIJCQkJCQlHZXRDaGFyQXJyYXkoKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfSU5UMzIJCQkJCQlHZXRMaW1pdENoYXIoKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCQkJCQlJc011bHRpTGluZSgpIGNvbnN0ID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9JTlQzMgkJCQkJCUdldEhvcnpTY2FsZSgpIGNvbnN0ID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9GTE9BVAkJCQkJCUdldENoYXJTcGFjZSgpIGNvbnN0ID0gMDsNCi0NCi0gICAgdmlydHVhbCBDUFZUX1dvcmRQbGFjZQkJCQkJR2V0QmVnaW5Xb3JkUGxhY2UoKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgQ1BWVF9Xb3JkUGxhY2UJCQkJCUdldEVuZFdvcmRQbGFjZSgpIGNvbnN0ID0gMDsNCi0NCi0gICAgdmlydHVhbCBDUFZUX1dvcmRQbGFjZQkJCQkJR2V0UHJldldvcmRQbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgQ1BWVF9Xb3JkUGxhY2UJCQkJCUdldE5leHRXb3JkUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3QgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIENQVlRfV29yZFBsYWNlCQkJCQlTZWFyY2hXb3JkUGxhY2UoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgQ1BWVF9Xb3JkUGxhY2UJCQkJCUdldFVwV29yZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3QgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIENQVlRfV29yZFBsYWNlCQkJCQlHZXREb3duV29yZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3QgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIENQVlRfV29yZFBsYWNlCQkJCQlHZXRMaW5lQmVnaW5QbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgQ1BWVF9Xb3JkUGxhY2UJCQkJCUdldExpbmVFbmRQbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgQ1BWVF9Xb3JkUGxhY2UJCQkJCUdldFNlY3Rpb25CZWdpblBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0ID0gMDsNCi0NCi0gICAgdmlydHVhbCBDUFZUX1dvcmRQbGFjZQkJCQkJR2V0U2VjdGlvbkVuZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0ID0gMDsNCi0NCi0gICAgdmlydHVhbCB2b2lkCQkJCQkJCVVwZGF0ZVdvcmRQbGFjZShDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgQ1BWVF9Xb3JkUGxhY2UJCQkJCUFqdXN0TGluZUhlYWRlcihjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBGWF9CT09MIGJQcmV2T3JOZXh0KSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfSU5UMzIJCQkJCQlXb3JkUGxhY2VUb1dvcmRJbmRleChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgQ1BWVF9Xb3JkUGxhY2UJCQkJCVdvcmRJbmRleFRvV29yZFBsYWNlKEZYX0lOVDMyIGluZGV4KSBjb25zdCA9IDA7DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9GUERGX1ZUX0hfCisjZGVmaW5lIF9GUERGX1ZUX0hfCisjaW5jbHVkZSAiLi4vZnhjcnQvZnhfYmFzaWMuaCIKKyNpbmNsdWRlICIuLi9mcGRmYXBpL2ZwZGZfcGFyc2VyLmgiCitzdHJ1Y3QgQ1BWVF9Xb3JkUGxhY2U7CitzdHJ1Y3QgQ1BWVF9Xb3JkUmFuZ2U7CitzdHJ1Y3QgQ1BWVF9Xb3JkOworc3RydWN0IENQVlRfTGluZTsKK3N0cnVjdCBDUFZUX1NlY3Rpb247CitjbGFzcyBJUERGX1ZhcmlhYmxlVGV4dF9Qcm92aWRlcjsKK2NsYXNzIElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yOworY2xhc3MgSVBERl9WYXJpYWJsZVRleHQ7CitzdHJ1Y3QgQ1BWVF9Xb3JkUGxhY2UgeworCisgICAgQ1BWVF9Xb3JkUGxhY2UoKSA6IG5TZWNJbmRleCgtMSksIG5MaW5lSW5kZXgoLTEpLCBuV29yZEluZGV4KC0xKQorICAgIHsKKyAgICB9CisKKyAgICBDUFZUX1dvcmRQbGFjZShGWF9JTlQzMiBuU2VjSW5kZXgsIEZYX0lOVDMyIG5MaW5lSW5kZXgsIEZYX0lOVDMyIG5Xb3JkSW5kZXgpCisgICAgeworICAgICAgICB0aGlzLT5uU2VjSW5kZXggPSBuU2VjSW5kZXg7CisgICAgICAgIHRoaXMtPm5MaW5lSW5kZXggPSBuTGluZUluZGV4OworICAgICAgICB0aGlzLT5uV29yZEluZGV4ID0gbldvcmRJbmRleDsKKyAgICB9CisKKyAgICB2b2lkIERlZmF1bHQoKQorICAgIHsKKyAgICAgICAgblNlY0luZGV4ID0gbkxpbmVJbmRleCA9IG5Xb3JkSW5kZXggPSAtMTsKKyAgICB9CisKKyAgICBGWF9CT09MIG9wZXJhdG9yID09IChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdwLm5TZWNJbmRleCA9PSB0aGlzLT5uU2VjSW5kZXggJiYgd3AubkxpbmVJbmRleCA9PSB0aGlzLT5uTGluZUluZGV4ICYmIHdwLm5Xb3JkSW5kZXggPT0gdGhpcy0+bldvcmRJbmRleDsKKyAgICB9CisKKyAgICBGWF9CT09MIG9wZXJhdG9yICE9IChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdwLm5TZWNJbmRleCAhPSB0aGlzLT5uU2VjSW5kZXggfHwgd3AubkxpbmVJbmRleCAhPSB0aGlzLT5uTGluZUluZGV4IHx8IHdwLm5Xb3JkSW5kZXggIT0gdGhpcy0+bldvcmRJbmRleDsKKyAgICB9CisKKyAgICBpbmxpbmUgRlhfSU5UMzIgV29yZENtcChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHRoaXMtPm5TZWNJbmRleCA+IHdwLm5TZWNJbmRleCkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMtPm5TZWNJbmRleCA8IHdwLm5TZWNJbmRleCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLT5uTGluZUluZGV4ID4gd3AubkxpbmVJbmRleCkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMtPm5MaW5lSW5kZXggPCB3cC5uTGluZUluZGV4KSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMtPm5Xb3JkSW5kZXggPiB3cC5uV29yZEluZGV4KSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy0+bldvcmRJbmRleCA8IHdwLm5Xb3JkSW5kZXgpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpbmxpbmUgRlhfSU5UMzIgTGluZUNtcChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHRoaXMtPm5TZWNJbmRleCA+IHdwLm5TZWNJbmRleCkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMtPm5TZWNJbmRleCA8IHdwLm5TZWNJbmRleCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLT5uTGluZUluZGV4ID4gd3AubkxpbmVJbmRleCkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMtPm5MaW5lSW5kZXggPCB3cC5uTGluZUluZGV4KSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaW5saW5lIEZYX0lOVDMyIFNlY0NtcChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHRoaXMtPm5TZWNJbmRleCA+IHdwLm5TZWNJbmRleCkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMtPm5TZWNJbmRleCA8IHdwLm5TZWNJbmRleCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEZYX0lOVDMyCQkJCQkJCW5TZWNJbmRleDsKKworICAgIEZYX0lOVDMyCQkJCQkJCW5MaW5lSW5kZXg7CisKKyAgICBGWF9JTlQzMgkJCQkJCQluV29yZEluZGV4OworfTsKK3N0cnVjdCBDUFZUX1dvcmRSYW5nZSB7CisKKyAgICBDUFZUX1dvcmRSYW5nZSgpCisgICAgeworICAgIH0KKworICAgIENQVlRfV29yZFJhbmdlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgYmVnaW4sIGNvbnN0IENQVlRfV29yZFBsYWNlICYgZW5kKQorICAgIHsKKyAgICAgICAgU2V0KGJlZ2luLCBlbmQpOworICAgIH0KKworICAgIHZvaWQgRGVmYXVsdCgpCisgICAgeworICAgICAgICBCZWdpblBvcy5EZWZhdWx0KCk7CisgICAgICAgIEVuZFBvcy5EZWZhdWx0KCk7CisgICAgfQorCisgICAgdm9pZCBTZXQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBiZWdpbiwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBlbmQpCisgICAgeworICAgICAgICB0aGlzLT5CZWdpblBvcyA9IGJlZ2luOworICAgICAgICB0aGlzLT5FbmRQb3MgPSBlbmQ7CisgICAgICAgIFN3YXBXb3JkUGxhY2UoKTsKKyAgICB9CisKKyAgICB2b2lkIFNldEJlZ2luUG9zKGNvbnN0IENQVlRfV29yZFBsYWNlICYgYmVnaW4pCisgICAgeworICAgICAgICB0aGlzLT5CZWdpblBvcyA9IGJlZ2luOworICAgICAgICBTd2FwV29yZFBsYWNlKCk7CisgICAgfQorCisgICAgdm9pZCBTZXRFbmRQb3MoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBlbmQpCisgICAgeworICAgICAgICB0aGlzLT5FbmRQb3MgPSBlbmQ7CisgICAgICAgIFN3YXBXb3JkUGxhY2UoKTsKKyAgICB9CisKKyAgICBGWF9CT09MIElzRXhpc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMtPkJlZ2luUG9zICE9IHRoaXMtPkVuZFBvczsKKyAgICB9CisKKyAgICBGWF9CT09MIG9wZXJhdG9yICE9IChjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHdyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdyLkJlZ2luUG9zICE9IHRoaXMtPkJlZ2luUG9zIHx8IHdyLkVuZFBvcyAhPSB0aGlzLT5FbmRQb3M7CisgICAgfQorCisgICAgdm9pZCBTd2FwV29yZFBsYWNlKCkKKyAgICB7CisgICAgICAgIGlmIChCZWdpblBvcy5Xb3JkQ21wKEVuZFBvcykgPiAwKSB7CisgICAgICAgICAgICBDUFZUX1dvcmRQbGFjZSBwbGFjZSA9IEVuZFBvczsKKyAgICAgICAgICAgIEVuZFBvcyA9IEJlZ2luUG9zOworICAgICAgICAgICAgQmVnaW5Qb3MgPSBwbGFjZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIENQVlRfV29yZFBsYWNlIEJlZ2luUG9zOworCisgICAgQ1BWVF9Xb3JkUGxhY2UgRW5kUG9zOworfTsKK3N0cnVjdCBDUFZUX1NlY1Byb3BzIDogcHVibGljIENGWF9PYmplY3QgeworCisgICAgQ1BWVF9TZWNQcm9wcygpIDogZkxpbmVMZWFkaW5nKDAuMGYpLCBmTGluZUluZGVudCgwLjBmKSwgbkFsaWdubWVudCgwKQorICAgIHsKKyAgICB9CisKKyAgICBDUFZUX1NlY1Byb3BzKEZYX0ZMT0FUIGxpbmVMZWFkaW5nLCBGWF9GTE9BVCBsaW5lSW5kZW50LCBGWF9JTlQzMiBhbGlnbm1lbnQpIDoKKyAgICAgICAgZkxpbmVMZWFkaW5nKGxpbmVMZWFkaW5nKSwgZkxpbmVJbmRlbnQobGluZUluZGVudCksIG5BbGlnbm1lbnQoYWxpZ25tZW50KQorICAgIHsKKyAgICB9CisKKyAgICBDUFZUX1NlY1Byb3BzKGNvbnN0IENQVlRfU2VjUHJvcHMgJiBvdGhlcikgOgorICAgICAgICBmTGluZUxlYWRpbmcob3RoZXIuZkxpbmVMZWFkaW5nKSwgZkxpbmVJbmRlbnQob3RoZXIuZkxpbmVJbmRlbnQpLCBuQWxpZ25tZW50KG90aGVyLm5BbGlnbm1lbnQpCisgICAgeworICAgIH0KKworICAgIEZYX0ZMT0FUCQkJZkxpbmVMZWFkaW5nOworCisgICAgRlhfRkxPQVQJCQlmTGluZUluZGVudDsKKworICAgIEZYX0lOVDMyCQkJbkFsaWdubWVudDsKK307CitzdHJ1Y3QgQ1BWVF9Xb3JkUHJvcHMgOiBwdWJsaWMgQ0ZYX09iamVjdCB7CisKKyAgICBDUFZUX1dvcmRQcm9wcygpIDogbkZvbnRJbmRleCgtMSksIGZGb250U2l6ZSgwLjBmKSwgZHdXb3JkQ29sb3IoMCksIG5TY3JpcHRUeXBlKDApLCBuV29yZFN0eWxlKDApLAorICAgICAgICBmQ2hhclNwYWNlKDAuMGYpLCBuSG9yelNjYWxlKDApCisgICAgeworICAgIH0KKworICAgIENQVlRfV29yZFByb3BzKEZYX0lOVDMyCWZvbnRJbmRleCwgRlhfRkxPQVQgZm9udFNpemUsIEZYX0NPTE9SUkVGIHdvcmRDb2xvciA9IDAsIEZYX0lOVDMyIHNjcmlwdFR5cGUgPSAwLCBGWF9JTlQzMiB3b3JkU3R5bGUgPSAwLAorICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIGNoYXJTcGFjZSA9IDAsIEZYX0lOVDMyIGhvcnpTY2FsZSA9IDEwMCkgOgorICAgICAgICBuRm9udEluZGV4KGZvbnRJbmRleCksIGZGb250U2l6ZShmb250U2l6ZSksIGR3V29yZENvbG9yKHdvcmRDb2xvciksIG5TY3JpcHRUeXBlKHNjcmlwdFR5cGUpLAorICAgICAgICBuV29yZFN0eWxlKHdvcmRTdHlsZSksIGZDaGFyU3BhY2UoY2hhclNwYWNlKSwgbkhvcnpTY2FsZShob3J6U2NhbGUpCisgICAgeworICAgIH0KKworICAgIENQVlRfV29yZFByb3BzKGNvbnN0IENQVlRfV29yZFByb3BzICYgb3RoZXIpIDoKKyAgICAgICAgbkZvbnRJbmRleChvdGhlci5uRm9udEluZGV4KSwgZkZvbnRTaXplKG90aGVyLmZGb250U2l6ZSksIGR3V29yZENvbG9yKG90aGVyLmR3V29yZENvbG9yKSwKKyAgICAgICAgblNjcmlwdFR5cGUob3RoZXIublNjcmlwdFR5cGUpLCBuV29yZFN0eWxlKG90aGVyLm5Xb3JkU3R5bGUpLCBmQ2hhclNwYWNlKG90aGVyLmZDaGFyU3BhY2UpLAorICAgICAgICBuSG9yelNjYWxlKG90aGVyLm5Ib3J6U2NhbGUpCisgICAgeworICAgIH0KKworICAgIEZYX0lOVDMyCQkJCQluRm9udEluZGV4OworCisgICAgRlhfRkxPQVQJCQkJCWZGb250U2l6ZTsKKworICAgIEZYX0NPTE9SUkVGCQkJCQlkd1dvcmRDb2xvcjsKKworICAgIEZYX0lOVDMyCQkJCQluU2NyaXB0VHlwZTsKKworICAgIEZYX0lOVDMyCQkJCQluV29yZFN0eWxlOworCisgICAgRlhfRkxPQVQJCQkJCWZDaGFyU3BhY2U7CisKKyAgICBGWF9JTlQzMgkJCQkJbkhvcnpTY2FsZTsKK307CitzdHJ1Y3QgQ1BWVF9Xb3JkIHsKKworICAgIENQVlRfV29yZCgpIDogV29yZCgwKSwgbkNoYXJzZXQoMCksIHB0V29yZCgwLCAwKSwgZkFzY2VudCgwLjBmKSwgZkRlc2NlbnQoMC4wZiksIGZXaWR0aCgwLjBmKSwKKyAgICAgICAgZkZvbnRTaXplKDApLCBXb3JkUHJvcHMoKQorICAgIHsKKyAgICB9CisKKyAgICBGWF9XT1JECQkJCQkJV29yZDsKKworICAgIEZYX0lOVDMyCQkJCQluQ2hhcnNldDsKKworICAgIENQVlRfV29yZFBsYWNlCQkJCVdvcmRQbGFjZTsKKworICAgIENQREZfUG9pbnQJCQkJCXB0V29yZDsKKworICAgIEZYX0ZMT0FUCQkJCQlmQXNjZW50OworCisgICAgRlhfRkxPQVQJCQkJCWZEZXNjZW50OworCisgICAgRlhfRkxPQVQJCQkJCWZXaWR0aDsKKworICAgIEZYX0lOVDMyCQkJCQluRm9udEluZGV4OworCisgICAgRlhfRkxPQVQJCQkJCWZGb250U2l6ZTsKKworICAgIENQVlRfV29yZFByb3BzCQkJCVdvcmRQcm9wczsKK307CitzdHJ1Y3QgQ1BWVF9MaW5lIHsKKworICAgIENQVlRfTGluZSgpIDogcHRMaW5lKDAsIDApLCBmTGluZVdpZHRoKDAuMGYpLCBmTGluZUFzY2VudCgwLjBmKSwgZkxpbmVEZXNjZW50KDAuMGYpCisgICAgeworICAgIH0KKworICAgIENQVlRfV29yZFBsYWNlCQkJCWxpbmVwbGFjZTsKKworICAgIENQVlRfV29yZFBsYWNlCQkJCWxpbmVFbmQ7CisKKyAgICBDUERGX1BvaW50CQkJCQlwdExpbmU7CisKKyAgICBGWF9GTE9BVAkJCQkJZkxpbmVXaWR0aDsKKworICAgIEZYX0ZMT0FUCQkJCQlmTGluZUFzY2VudDsKKworICAgIEZYX0ZMT0FUCQkJCQlmTGluZURlc2NlbnQ7Cit9Oworc3RydWN0IENQVlRfU2VjdGlvbiB7CisKKyAgICBDUFZUX1dvcmRQbGFjZQkJCQlzZWNwbGFjZTsKKworICAgIENQREZfUmVjdAkJCQkJcmNTZWN0aW9uOworCisgICAgQ1BWVF9TZWNQcm9wcwkJCQlTZWNQcm9wczsKKworICAgIENQVlRfV29yZFByb3BzCQkJCVdvcmRQcm9wczsKK307CitjbGFzcyBJUERGX1ZhcmlhYmxlVGV4dF9Qcm92aWRlcgoreworcHVibGljOgorCisgICAgdmlydHVhbCBGWF9JTlQzMgkJCQkJCUdldENoYXJXaWR0aChGWF9JTlQzMiBuRm9udEluZGV4LCBGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIG5Xb3JkU3R5bGUpID0gMDsKKworICAgIHZpcnR1YWwgRlhfSU5UMzIJCQkJCQlHZXRUeXBlQXNjZW50KEZYX0lOVDMyIG5Gb250SW5kZXgpID0gMDsKKworICAgIHZpcnR1YWwgRlhfSU5UMzIJCQkJCQlHZXRUeXBlRGVzY2VudChGWF9JTlQzMiBuRm9udEluZGV4KSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJR2V0V29yZEZvbnRJbmRleChGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIGNoYXJzZXQsIEZYX0lOVDMyIG5Gb250SW5kZXgpID0gMDsKKworICAgIHZpcnR1YWwgRlhfQk9PTAkJCQkJCQlJc0xhdGluV29yZChGWF9XT1JEIHdvcmQpID0gMDsKKworICAgIHZpcnR1YWwgRlhfSU5UMzIJCQkJCQlHZXREZWZhdWx0Rm9udEluZGV4KCkgPSAwOworfTsKK2NsYXNzIElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yCit7CitwdWJsaWM6CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJTmV4dFdvcmQoKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJUHJldldvcmQoKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJTmV4dExpbmUoKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJUHJldkxpbmUoKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJTmV4dFNlY3Rpb24oKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJUHJldlNlY3Rpb24oKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJR2V0V29yZChDUFZUX1dvcmQgJiB3b3JkKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJU2V0V29yZChjb25zdCBDUFZUX1dvcmQgJiB3b3JkKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJR2V0TGluZShDUFZUX0xpbmUgJiBsaW5lKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJR2V0U2VjdGlvbihDUFZUX1NlY3Rpb24gJiBzZWN0aW9uKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsCUZYX0JPT0wJCQkJCQkJU2V0U2VjdGlvbihjb25zdCBDUFZUX1NlY3Rpb24gJiBzZWN0aW9uKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0QXQoRlhfSU5UMzIgbldvcmRJbmRleCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkCQkJCQkJCVNldEF0KGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpID0gMDsKKworICAgIHZpcnR1YWwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJgkJCUdldEF0KCkgY29uc3QgPSAwOworfTsKK2NsYXNzIElQREZfVmFyaWFibGVUZXh0Cit7CitwdWJsaWM6CisKKyAgICBzdGF0aWMgSVBERl9WYXJpYWJsZVRleHQqCQkJTmV3VmFyaWFibGVUZXh0KCk7CisKKyAgICBzdGF0aWMgdm9pZAkJCQkJCQlEZWxWYXJpYWJsZVRleHQoSVBERl9WYXJpYWJsZVRleHQqIHBWVCk7CitwdWJsaWM6CisKKyAgICB2aXJ0dWFsIElQREZfVmFyaWFibGVUZXh0X1Byb3ZpZGVyKgkJU2V0UHJvdmlkZXIoSVBERl9WYXJpYWJsZVRleHRfUHJvdmlkZXIgKiBwUHJvdmlkZXIpID0gMDsKKworICAgIHZpcnR1YWwgSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IqCQlHZXRJdGVyYXRvcigpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZAkJCQkJCQlTZXRQbGF0ZVJlY3QoY29uc3QgQ1BERl9SZWN0ICYgcmVjdCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkCQkJCQkJCVNldEFsaWdubWVudChGWF9JTlQzMiBuRm9ybWF0ID0gMCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkCQkJCQkJCVNldFBhc3N3b3JkQ2hhcihGWF9XT1JEIHdTdWJXb3JkID0gJyonKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0TGltaXRDaGFyKEZYX0lOVDMyIG5MaW1pdENoYXIgPSAwKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0Q2hhckFycmF5KEZYX0lOVDMyIG5DaGFyQXJyYXkgPSAwKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0Q2hhclNwYWNlKEZYX0ZMT0FUIGZDaGFyU3BhY2UgPSAwLjBmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0SG9yelNjYWxlKEZYX0lOVDMyIG5Ib3J6U2NhbGUgPSAxMDApID0gMDsKKworICAgIHZpcnR1YWwgdm9pZAkJCQkJCQlTZXRNdWx0aUxpbmUoRlhfQk9PTCBiTXVsdGlMaW5lID0gVFJVRSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkCQkJCQkJCVNldEF1dG9SZXR1cm4oRlhfQk9PTCBiQXV0byA9IFRSVUUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZAkJCQkJCQlTZXRBdXRvRm9udFNpemUoRlhfQk9PTCBiQXV0byA9IFRSVUUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZAkJCQkJCQlTZXRGb250U2l6ZShGWF9GTE9BVCBmRm9udFNpemUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZAkJCQkJCQlTZXRMaW5lTGVhZGluZyhGWF9GTE9BVCBmTGluZUxlYWRpbmcpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZAkJCQkJCQlTZXRSaWNoVGV4dChGWF9CT09MIGJSaWNoVGV4dCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkCQkJCQkJCUluaXRpYWxpemUoKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJSXNWYWxpZCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgRlhfQk9PTAkJCQkJCQlJc1JpY2hUZXh0KCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkCQkJCQkJCVJlYXJyYW5nZUFsbCgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZAkJCQkJCQlSZWFycmFuZ2VQYXJ0KGNvbnN0IENQVlRfV29yZFJhbmdlICYgUGxhY2VSYW5nZSkgPSAwOworCisgICAgdmlydHVhbCB2b2lkCQkJCQkJCVJlc2V0QWxsKCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkCQkJCQkJCVNldFRleHQoRlhfTFBDV1NUUiB0ZXh0LCBGWF9JTlQzMiBjaGFyc2V0ID0gMSwgY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcyA9IE5VTEwsCisgICAgICAgICAgICBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMgPSBOVUxMKSA9IDA7CisKKyAgICB2aXJ0dWFsIENQVlRfV29yZFBsYWNlCQkJCQlJbnNlcnRXb3JkKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCA9IDEsCisgICAgICAgICAgICBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMgPSBOVUxMKSA9IDA7CisKKyAgICB2aXJ0dWFsIENQVlRfV29yZFBsYWNlCQkJCQlJbnNlcnRTZWN0aW9uKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIGNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMgPSBOVUxMLAorICAgICAgICAgICAgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzID0gTlVMTCkgPSAwOworCisgICAgdmlydHVhbCBDUFZUX1dvcmRQbGFjZQkJCQkJSW5zZXJ0VGV4dChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBGWF9MUENXU1RSIHRleHQsIEZYX0lOVDMyIGNoYXJzZXQgPSAxLAorICAgICAgICAgICAgY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcyA9IE5VTEwsCWNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcyA9IE5VTEwpID0gMDsKKworICAgIHZpcnR1YWwgQ1BWVF9Xb3JkUGxhY2UJCQkJCURlbGV0ZVdvcmRzKGNvbnN0IENQVlRfV29yZFJhbmdlICYgUGxhY2VSYW5nZSkgPSAwOworCisgICAgdmlydHVhbCBDUFZUX1dvcmRQbGFjZQkJCQkJRGVsZXRlV29yZChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSA9IDA7CisKKyAgICB2aXJ0dWFsIENQVlRfV29yZFBsYWNlCQkJCQlCYWNrU3BhY2VXb3JkKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpID0gMDsKKworICAgIHZpcnR1YWwgY29uc3QgQ1BERl9SZWN0ICYJCQkJR2V0UGxhdGVSZWN0KCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBDUERGX1JlY3QJCQkJCQlHZXRDb250ZW50UmVjdCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgRlhfSU5UMzIJCQkJCQlHZXRUb3RhbFdvcmRzKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBGWF9GTE9BVAkJCQkJCUdldEZvbnRTaXplKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBGWF9JTlQzMgkJCQkJCUdldEFsaWdubWVudCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgRlhfV09SRAkJCQkJCQlHZXRQYXNzd29yZENoYXIoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJR2V0Q2hhckFycmF5KCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBGWF9JTlQzMgkJCQkJCUdldExpbWl0Q2hhcigpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgRlhfQk9PTAkJCQkJCQlJc011bHRpTGluZSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgRlhfSU5UMzIJCQkJCQlHZXRIb3J6U2NhbGUoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0ZMT0FUCQkJCQkJR2V0Q2hhclNwYWNlKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBDUFZUX1dvcmRQbGFjZQkJCQkJR2V0QmVnaW5Xb3JkUGxhY2UoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIENQVlRfV29yZFBsYWNlCQkJCQlHZXRFbmRXb3JkUGxhY2UoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIENQVlRfV29yZFBsYWNlCQkJCQlHZXRQcmV2V29yZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgQ1BWVF9Xb3JkUGxhY2UJCQkJCUdldE5leHRXb3JkUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBDUFZUX1dvcmRQbGFjZQkJCQkJU2VhcmNoV29yZFBsYWNlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBDUFZUX1dvcmRQbGFjZQkJCQkJR2V0VXBXb3JkUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSwgY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIENQVlRfV29yZFBsYWNlCQkJCQlHZXREb3duV29yZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBDUFZUX1dvcmRQbGFjZQkJCQkJR2V0TGluZUJlZ2luUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBDUFZUX1dvcmRQbGFjZQkJCQkJR2V0TGluZUVuZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgQ1BWVF9Xb3JkUGxhY2UJCQkJCUdldFNlY3Rpb25CZWdpblBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgQ1BWVF9Xb3JkUGxhY2UJCQkJCUdldFNlY3Rpb25FbmRQbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQJCQkJCQkJVXBkYXRlV29yZFBsYWNlKENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgQ1BWVF9Xb3JkUGxhY2UJCQkJCUFqdXN0TGluZUhlYWRlcihjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBGWF9CT09MIGJQcmV2T3JOZXh0KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJV29yZFBsYWNlVG9Xb3JkSW5kZXgoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBDUFZUX1dvcmRQbGFjZQkJCQkJV29yZEluZGV4VG9Xb3JkUGxhY2UoRlhfSU5UMzIgaW5kZXgpIGNvbnN0ID0gMDsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvaW5jbHVkZS9mcGRmdGV4dC9mcGRmX3RleHQuaCBiL2NvcmUvaW5jbHVkZS9mcGRmdGV4dC9mcGRmX3RleHQuaAppbmRleCA4YjVlZGMzLi4yYTVlNGFjIDEwMDY0NAotLS0gYS9jb3JlL2luY2x1ZGUvZnBkZnRleHQvZnBkZl90ZXh0LmgKKysrIGIvY29yZS9pbmNsdWRlL2ZwZGZ0ZXh0L2ZwZGZfdGV4dC5oCkBAIC0xLDE3MyArMSwxNzMgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0ZQREZfVEVYVF9IXw0KLSNkZWZpbmUgX0ZQREZfVEVYVF9IXw0KLSNpZm5kZWYgX0ZQREZfUEFSU0VSXw0KLSNpbmNsdWRlICIuLi9mcGRmYXBpL2ZwZGZfcGFyc2VyLmgiDQotI2VuZGlmDQotI2lmbmRlZiBfRlBERl9QQUdFT0JKX0hfDQotI2luY2x1ZGUgIi4uL2ZwZGZhcGkvZnBkZl9wYWdlb2JqLmgiDQotI2VuZGlmDQotI2lmbmRlZiBfRlBERl9QQUdFXw0KLSNpbmNsdWRlICIuLi9mcGRmYXBpL2ZwZGZfcGFnZS5oIg0KLSNlbmRpZg0KLWNsYXNzIENQREZfUGFnZU9iamVjdHM7DQotI2RlZmluZSBQREYyVFhUX0FVVE9fUk9UQVRFCQkxDQotI2RlZmluZSBQREYyVFhUX0FVVE9fV0lEVEgJCTINCi0jZGVmaW5lIFBERjJUWFRfS0VFUF9DT0xVTU4JCTQNCi0jZGVmaW5lIFBERjJUWFRfVVNFX09DUgkJCTgNCi0jZGVmaW5lIFBERjJUWFRfSU5DTFVERV9JTlZJU0lCTEUJMTYNCi12b2lkIFBERl9HZXRQYWdlVGV4dChDRlhfQnl0ZVN0cmluZ0FycmF5JiBsaW5lcywgQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZSwNCi0gICAgICAgICAgICAgICAgICAgICBpbnQgaU1pbldpZHRoLCBGWF9EV09SRCBmbGFncyk7DQotdm9pZCBQREZfR2V0UGFnZVRleHRfVW5pY29kZShDRlhfV2lkZVN0cmluZ0FycmF5JiBsaW5lcywgQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpTWluV2lkdGgsIEZYX0RXT1JEIGZsYWdzKTsNCi12b2lkIFBERl9HZXRUZXh0U3RyZWFtX1VuaWNvZGUoQ0ZYX1dpZGVUZXh0QnVmJiBidWZmZXIsIENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfRGljdGlvbmFyeSogcFBhZ2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGZsYWdzKTsNCi1DRlhfV2lkZVN0cmluZyBQREZfR2V0Rmlyc3RUZXh0TGluZV9Vbmljb2RlKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfRGljdGlvbmFyeSogcFBhZ2UpOw0KLWNsYXNzIElQREZfVGV4dFBhZ2U7DQotY2xhc3MgSVBERl9MaW5rRXh0cmFjdDsNCi1jbGFzcyBJUERGX1RleHRQYWdlRmluZDsNCi0jZGVmaW5lIENIQVJfRVJST1IJCQktMQ0KLSNkZWZpbmUgQ0hBUl9OT1JNQUwJCQkwDQotI2RlZmluZSBDSEFSX0dFTkVSQVRFRAkJMQ0KLSNkZWZpbmUgQ0hBUl9VTlVOSUNPREUJCTINCi10eXBlZGVmIHN0cnVjdCB7DQotICAgIEZYX1dDSEFSCQkJbV9Vbmljb2RlOw0KLSAgICBGWF9XQ0hBUgkJCW1fQ2hhcmNvZGU7DQotICAgIEZYX0lOVDMyCQkJbV9GbGFnOw0KLSAgICBGWF9GTE9BVAkJCW1fRm9udFNpemU7DQotICAgIEZYX0ZMT0FUCQkJbV9PcmlnaW5YOw0KLSAgICBGWF9GTE9BVAkJCW1fT3JpZ2luWTsNCi0gICAgQ0ZYX0Zsb2F0UmVjdAkJbV9DaGFyQm94Ow0KLSAgICBDUERGX1RleHRPYmplY3QqCW1fcFRleHRPYmo7DQotICAgIENGWF9BZmZpbmVNYXRyaXgJbV9NYXRyaXg7DQotfSBGUERGX0NIQVJfSU5GTzsNCi10eXBlZGVmCUNGWF9BcnJheVRlbXBsYXRlPENGWF9GbG9hdFJlY3Q+IENGWF9SZWN0QXJyYXk7DQotI2RlZmluZSBGUERGVEVYVF9MUlRCCTANCi0jZGVmaW5lIEZQREZURVhUX1JMVEIJMQ0KLSNkZWZpbmUgRlBERlRFWFRfVEJSTAkyDQotI2RlZmluZSBGUERGVEVYVF9MRUZUCQkJLTENCi0jZGVmaW5lIEZQREZURVhUX1JJR0hUCQkJMQ0KLSNkZWZpbmUgRlBERlRFWFRfVVAJCQkJLTINCi0jZGVmaW5lIEZQREZURVhUX0RPV04JCQkyDQotY2xhc3MgSVBERl9SZWZsb3dlZFBhZ2U7DQotI2RlZmluZSBGUERGVEVYVF9XUklUSU5HTU9ERV9VTktOT1cJMA0KLSNkZWZpbmUgRlBERlRFWFRfV1JJVElOR01PREVfTFJUQgkxDQotI2RlZmluZSBGUERGVEVYVF9XUklUSU5HTU9ERV9STFRCCTINCi0jZGVmaW5lIEZQREZURVhUX1dSSVRJTkdNT0RFX1RCUkwJMw0KLWNsYXNzIENQREZUZXh0X1BhcnNlT3B0aW9ucyA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERlRleHRfUGFyc2VPcHRpb25zKCk7DQotICAgIEZYX0JPT0wJCQltX2JHZXRDaGFyQ29kZU9ubHk7DQotICAgIEZYX0JPT0wJCQltX2JOb3JtYWxpemVPYmpzOw0KLSAgICBGWF9CT09MCQkJbV9iT3V0cHV0SHlwaGVuOw0KLX07DQotY2xhc3MgSVBERl9UZXh0UGFnZSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgdmlydHVhbCB+SVBERl9UZXh0UGFnZSgpIHt9DQotICAgIHN0YXRpYyBJUERGX1RleHRQYWdlKglDcmVhdGVUZXh0UGFnZShjb25zdCBDUERGX1BhZ2UqIHBQYWdlLCBDUERGVGV4dF9QYXJzZU9wdGlvbnMgUGFyc2VyT3B0aW9ucyk7DQotICAgIHN0YXRpYyBJUERGX1RleHRQYWdlKglDcmVhdGVUZXh0UGFnZShjb25zdCBDUERGX1BhZ2UqIHBQYWdlLCBpbnQgZmxhZ3MgPSAwKTsNCi0gICAgc3RhdGljIElQREZfVGV4dFBhZ2UqCUNyZWF0ZVRleHRQYWdlKGNvbnN0IENQREZfUGFnZU9iamVjdHMqIHBPYmpzLCBpbnQgZmxhZ3MgPSAwKTsNCi0gICAgc3RhdGljIElQREZfVGV4dFBhZ2UqCUNyZWF0ZVJlZmxvd1RleHRQYWdlKElQREZfUmVmbG93ZWRQYWdlKiBwUmVmUGFnZSk7DQotDQotICAgIHZpcnR1YWwgdm9pZAkJCU5vcm1hbGl6ZU9iamVjdHMoRlhfQk9PTCBiTm9ybWFsaXplKSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCVBhcnNlVGV4dFBhZ2UoKSA9IDA7DQotDQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCUlzUGFyc2VyZWQoKSBjb25zdCA9IDA7DQotcHVibGljOg0KLQ0KLSAgICB2aXJ0dWFsIGludCBDaGFySW5kZXhGcm9tVGV4dEluZGV4KGludCBUZXh0SW5kZXgpIGNvbnN0ID0gMDsNCi0NCi0gICAgdmlydHVhbCBpbnQgVGV4dEluZGV4RnJvbUNoYXJJbmRleChpbnQgQ2hhckluZGV4KSBjb25zdCA9IDA7DQotDQotDQotICAgIHZpcnR1YWwgaW50CQkJCUNvdW50Q2hhcnMoKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwJdm9pZAkJCUdldENoYXJJbmZvKGludCBpbmRleCwgRlBERl9DSEFSX0lORk8gJiBpbmZvKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgdm9pZAkJCUdldFJlY3RBcnJheShpbnQgc3RhcnQsIGludCBuQ291bnQsIENGWF9SZWN0QXJyYXkmIHJlY3RBcnJheSkgY29uc3QgPSAwOw0KLQ0KLQ0KLQ0KLSAgICB2aXJ0dWFsIGludAkJCQlHZXRJbmRleEF0UG9zKENQREZfUG9pbnQgcG9pbnQsIEZYX0ZMT0FUIHhUb3JlbGFuY2UsIEZYX0ZMT0FUIHlUb3JlbGFuY2UpIGNvbnN0ID0gMDsNCi0NCi0gICAgdmlydHVhbCBpbnQJCQkJR2V0SW5kZXhBdFBvcyhGWF9GTE9BVCB4LCBGWF9GTE9BVCB5LCBGWF9GTE9BVCB4VG9yZWxhbmNlLCBGWF9GTE9BVCB5VG9yZWxhbmNlKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwJaW50CQkJCUdldE9yZGVyQnlEaXJlY3Rpb24oaW50IGluZGV4LCBpbnQgZGlyZWN0aW9uKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJR2V0VGV4dEJ5UmVjdChDRlhfRmxvYXRSZWN0IHJlY3QpIGNvbnN0ID0gMDsNCi0NCi0gICAgdmlydHVhbCB2b2lkCQkJR2V0UmVjdHNBcnJheUJ5UmVjdChDRlhfRmxvYXRSZWN0IHJlY3QsIENGWF9SZWN0QXJyYXkmIHJlc1JlY3RBcnJheSkgY29uc3QgPSAwOw0KLQ0KLQ0KLSAgICB2aXJ0dWFsIGludAkJCQlDb3VudFJlY3RzKGludCBzdGFydCwgaW50IG5Db3VudCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsCXZvaWQJCQlHZXRSZWN0KGludCByZWN0SW5kZXgsIEZYX0ZMT0FUJiBsZWZ0LCBGWF9GTE9BVCYgdG9wLCBGWF9GTE9BVCYgcmlnaHQsIEZYX0ZMT0FUICZib3R0b20pIGNvbnN0ID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJR2V0QmFzZWxpbmVSb3RhdGUoaW50IHJlY3RJbmRleCwgaW50JiBSb3RhdGUpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJR2V0QmFzZWxpbmVSb3RhdGUoQ0ZYX0Zsb2F0UmVjdCByZWN0LCBpbnQmIFJvdGF0ZSkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsCWludAkJCQlDb3VudEJvdW5kZWRTZWdtZW50cyhGWF9GTE9BVCBsZWZ0LCBGWF9GTE9BVCB0b3AsIEZYX0ZMT0FUIHJpZ2h0LCBGWF9GTE9BVCBib3R0b20sIEZYX0JPT0wgYkNvbnRhaW5zID0gRkFMU0UpID0gMDsNCi0NCi0gICAgdmlydHVhbAl2b2lkCQkJR2V0Qm91bmRlZFNlZ21lbnQoaW50IGluZGV4LCBpbnQmIHN0YXJ0LCBpbnQmIGNvdW50KSBjb25zdCA9IDA7DQotDQotDQotICAgIHZpcnR1YWwgaW50CQkJCUdldFdvcmRCcmVhayhpbnQgaW5kZXgsIGludCBkaXJlY3Rpb24pIGNvbnN0ID0gMDsNCi0NCi0gICAgdmlydHVhbCBDRlhfV2lkZVN0cmluZwlHZXRQYWdlVGV4dChpbnQgc3RhcnQgPSAwLCBpbnQgbkNvdW50ID0gLTEgKSBjb25zdCA9IDA7DQotfTsNCi0jZGVmaW5lIEZQREZURVhUX01BVENIQ0FTRSAgICAgIDB4MDAwMDAwMDENCi0jZGVmaW5lIEZQREZURVhUX01BVENIV0hPTEVXT1JEIDB4MDAwMDAwMDINCi0jZGVmaW5lIEZQREZURVhUX0NPTlNFQ1VUSVZFCTB4MDAwMDAwMDQNCi1jbGFzcyBJUERGX1RleHRQYWdlRmluZCA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgdmlydHVhbAl+SVBERl9UZXh0UGFnZUZpbmQoKSB7fQ0KLQ0KLSAgICBzdGF0aWMJSVBERl9UZXh0UGFnZUZpbmQqCUNyZWF0ZVBhZ2VGaW5kKGNvbnN0IElQREZfVGV4dFBhZ2UqIHBUZXh0UGFnZSk7DQotcHVibGljOg0KLQ0KLSAgICB2aXJ0dWFsCUZYX0JPT0wJCQkJRmluZEZpcnN0KENGWF9XaWRlU3RyaW5nIGZpbmR3aGF0LCBpbnQgZmxhZ3MsIGludCBzdGFydFBvcyA9IDApID0gMDsNCi0NCi0gICAgdmlydHVhbAlGWF9CT09MCQkJCUZpbmROZXh0KCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsCUZYX0JPT0wJCQkJRmluZFByZXYoKSA9IDA7DQotDQotICAgIHZpcnR1YWwgdm9pZAkJCQlHZXRSZWN0QXJyYXkoQ0ZYX1JlY3RBcnJheSYgcmVjdHMpIGNvbnN0ID0gMDsNCi0NCi0gICAgdmlydHVhbCBpbnQJCQkJCUdldEN1ck9yZGVyKCkgY29uc3QgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIGludAkJCQkJR2V0TWF0Y2hlZENvdW50KCkgY29uc3QgPSAwOw0KLX07DQotY2xhc3MgSVBERl9MaW5rRXh0cmFjdCA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgdmlydHVhbAl+SVBERl9MaW5rRXh0cmFjdCgpIHt9DQotDQotICAgIHN0YXRpYwlJUERGX0xpbmtFeHRyYWN0KglDcmVhdGVMaW5rRXh0cmFjdCgpOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJRXh0cmFjdExpbmtzKGNvbnN0IElQREZfVGV4dFBhZ2UqIHBUZXh0UGFnZSkgPSAwOw0KLXB1YmxpYzoNCi0NCi0gICAgdmlydHVhbCBpbnQJCQkJCUNvdW50TGlua3MoKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCUdldFVSTChpbnQgaW5kZXgpIGNvbnN0ID0gMDsNCi0NCi0gICAgdmlydHVhbAl2b2lkCQkJCUdldEJvdW5kZWRTZWdtZW50KGludCBpbmRleCwgaW50JiBzdGFydCwgaW50JiBjb3VudCkgY29uc3QgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQkJR2V0UmVjdHMoaW50IGluZGV4LCBDRlhfUmVjdEFycmF5JiByZWN0cykgY29uc3QgPSAwOw0KLX07DQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlBERl9URVhUX0hfCisjZGVmaW5lIF9GUERGX1RFWFRfSF8KKyNpZm5kZWYgX0ZQREZfUEFSU0VSXworI2luY2x1ZGUgIi4uL2ZwZGZhcGkvZnBkZl9wYXJzZXIuaCIKKyNlbmRpZgorI2lmbmRlZiBfRlBERl9QQUdFT0JKX0hfCisjaW5jbHVkZSAiLi4vZnBkZmFwaS9mcGRmX3BhZ2VvYmouaCIKKyNlbmRpZgorI2lmbmRlZiBfRlBERl9QQUdFXworI2luY2x1ZGUgIi4uL2ZwZGZhcGkvZnBkZl9wYWdlLmgiCisjZW5kaWYKK2NsYXNzIENQREZfUGFnZU9iamVjdHM7CisjZGVmaW5lIFBERjJUWFRfQVVUT19ST1RBVEUJCTEKKyNkZWZpbmUgUERGMlRYVF9BVVRPX1dJRFRICQkyCisjZGVmaW5lIFBERjJUWFRfS0VFUF9DT0xVTU4JCTQKKyNkZWZpbmUgUERGMlRYVF9VU0VfT0NSCQkJOAorI2RlZmluZSBQREYyVFhUX0lOQ0xVREVfSU5WSVNJQkxFCTE2Cit2b2lkIFBERl9HZXRQYWdlVGV4dChDRlhfQnl0ZVN0cmluZ0FycmF5JiBsaW5lcywgQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZSwKKyAgICAgICAgICAgICAgICAgICAgIGludCBpTWluV2lkdGgsIEZYX0RXT1JEIGZsYWdzKTsKK3ZvaWQgUERGX0dldFBhZ2VUZXh0X1VuaWNvZGUoQ0ZYX1dpZGVTdHJpbmdBcnJheSYgbGluZXMsIENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfRGljdGlvbmFyeSogcFBhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpTWluV2lkdGgsIEZYX0RXT1JEIGZsYWdzKTsKK3ZvaWQgUERGX0dldFRleHRTdHJlYW1fVW5pY29kZShDRlhfV2lkZVRleHRCdWYmIGJ1ZmZlciwgQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBmbGFncyk7CitDRlhfV2lkZVN0cmluZyBQREZfR2V0Rmlyc3RUZXh0TGluZV9Vbmljb2RlKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfRGljdGlvbmFyeSogcFBhZ2UpOworY2xhc3MgSVBERl9UZXh0UGFnZTsKK2NsYXNzIElQREZfTGlua0V4dHJhY3Q7CitjbGFzcyBJUERGX1RleHRQYWdlRmluZDsKKyNkZWZpbmUgQ0hBUl9FUlJPUgkJCS0xCisjZGVmaW5lIENIQVJfTk9STUFMCQkJMAorI2RlZmluZSBDSEFSX0dFTkVSQVRFRAkJMQorI2RlZmluZSBDSEFSX1VOVU5JQ09ERQkJMgordHlwZWRlZiBzdHJ1Y3QgeworICAgIEZYX1dDSEFSCQkJbV9Vbmljb2RlOworICAgIEZYX1dDSEFSCQkJbV9DaGFyY29kZTsKKyAgICBGWF9JTlQzMgkJCW1fRmxhZzsKKyAgICBGWF9GTE9BVAkJCW1fRm9udFNpemU7CisgICAgRlhfRkxPQVQJCQltX09yaWdpblg7CisgICAgRlhfRkxPQVQJCQltX09yaWdpblk7CisgICAgQ0ZYX0Zsb2F0UmVjdAkJbV9DaGFyQm94OworICAgIENQREZfVGV4dE9iamVjdCoJbV9wVGV4dE9iajsKKyAgICBDRlhfQWZmaW5lTWF0cml4CW1fTWF0cml4OworfSBGUERGX0NIQVJfSU5GTzsKK3R5cGVkZWYJQ0ZYX0FycmF5VGVtcGxhdGU8Q0ZYX0Zsb2F0UmVjdD4gQ0ZYX1JlY3RBcnJheTsKKyNkZWZpbmUgRlBERlRFWFRfTFJUQgkwCisjZGVmaW5lIEZQREZURVhUX1JMVEIJMQorI2RlZmluZSBGUERGVEVYVF9UQlJMCTIKKyNkZWZpbmUgRlBERlRFWFRfTEVGVAkJCS0xCisjZGVmaW5lIEZQREZURVhUX1JJR0hUCQkJMQorI2RlZmluZSBGUERGVEVYVF9VUAkJCQktMgorI2RlZmluZSBGUERGVEVYVF9ET1dOCQkJMgorY2xhc3MgSVBERl9SZWZsb3dlZFBhZ2U7CisjZGVmaW5lIEZQREZURVhUX1dSSVRJTkdNT0RFX1VOS05PVwkwCisjZGVmaW5lIEZQREZURVhUX1dSSVRJTkdNT0RFX0xSVEIJMQorI2RlZmluZSBGUERGVEVYVF9XUklUSU5HTU9ERV9STFRCCTIKKyNkZWZpbmUgRlBERlRFWFRfV1JJVElOR01PREVfVEJSTAkzCitjbGFzcyBDUERGVGV4dF9QYXJzZU9wdGlvbnMgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ1BERlRleHRfUGFyc2VPcHRpb25zKCk7CisgICAgRlhfQk9PTAkJCW1fYkdldENoYXJDb2RlT25seTsKKyAgICBGWF9CT09MCQkJbV9iTm9ybWFsaXplT2JqczsKKyAgICBGWF9CT09MCQkJbV9iT3V0cHV0SHlwaGVuOworfTsKK2NsYXNzIElQREZfVGV4dFBhZ2UgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgdmlydHVhbCB+SVBERl9UZXh0UGFnZSgpIHt9CisgICAgc3RhdGljIElQREZfVGV4dFBhZ2UqCUNyZWF0ZVRleHRQYWdlKGNvbnN0IENQREZfUGFnZSogcFBhZ2UsIENQREZUZXh0X1BhcnNlT3B0aW9ucyBQYXJzZXJPcHRpb25zKTsKKyAgICBzdGF0aWMgSVBERl9UZXh0UGFnZSoJQ3JlYXRlVGV4dFBhZ2UoY29uc3QgQ1BERl9QYWdlKiBwUGFnZSwgaW50IGZsYWdzID0gMCk7CisgICAgc3RhdGljIElQREZfVGV4dFBhZ2UqCUNyZWF0ZVRleHRQYWdlKGNvbnN0IENQREZfUGFnZU9iamVjdHMqIHBPYmpzLCBpbnQgZmxhZ3MgPSAwKTsKKyAgICBzdGF0aWMgSVBERl9UZXh0UGFnZSoJQ3JlYXRlUmVmbG93VGV4dFBhZ2UoSVBERl9SZWZsb3dlZFBhZ2UqIHBSZWZQYWdlKTsKKworICAgIHZpcnR1YWwgdm9pZAkJCU5vcm1hbGl6ZU9iamVjdHMoRlhfQk9PTCBiTm9ybWFsaXplKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQlQYXJzZVRleHRQYWdlKCkgPSAwOworCisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQlJc1BhcnNlcmVkKCkgY29uc3QgPSAwOworcHVibGljOgorCisgICAgdmlydHVhbCBpbnQgQ2hhckluZGV4RnJvbVRleHRJbmRleChpbnQgVGV4dEluZGV4KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGludCBUZXh0SW5kZXhGcm9tQ2hhckluZGV4KGludCBDaGFySW5kZXgpIGNvbnN0ID0gMDsKKworCisgICAgdmlydHVhbCBpbnQJCQkJQ291bnRDaGFycygpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwJdm9pZAkJCUdldENoYXJJbmZvKGludCBpbmRleCwgRlBERl9DSEFSX0lORk8gJiBpbmZvKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQJCQlHZXRSZWN0QXJyYXkoaW50IHN0YXJ0LCBpbnQgbkNvdW50LCBDRlhfUmVjdEFycmF5JiByZWN0QXJyYXkpIGNvbnN0ID0gMDsKKworCisKKyAgICB2aXJ0dWFsIGludAkJCQlHZXRJbmRleEF0UG9zKENQREZfUG9pbnQgcG9pbnQsIEZYX0ZMT0FUIHhUb3JlbGFuY2UsIEZYX0ZMT0FUIHlUb3JlbGFuY2UpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgaW50CQkJCUdldEluZGV4QXRQb3MoRlhfRkxPQVQgeCwgRlhfRkxPQVQgeSwgRlhfRkxPQVQgeFRvcmVsYW5jZSwgRlhfRkxPQVQgeVRvcmVsYW5jZSkgY29uc3QgPSAwOworCisgICAgdmlydHVhbAlpbnQJCQkJR2V0T3JkZXJCeURpcmVjdGlvbihpbnQgaW5kZXgsIGludCBkaXJlY3Rpb24pIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJR2V0VGV4dEJ5UmVjdChDRlhfRmxvYXRSZWN0IHJlY3QpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZAkJCUdldFJlY3RzQXJyYXlCeVJlY3QoQ0ZYX0Zsb2F0UmVjdCByZWN0LCBDRlhfUmVjdEFycmF5JiByZXNSZWN0QXJyYXkpIGNvbnN0ID0gMDsKKworCisgICAgdmlydHVhbCBpbnQJCQkJQ291bnRSZWN0cyhpbnQgc3RhcnQsIGludCBuQ291bnQpID0gMDsKKworICAgIHZpcnR1YWwJdm9pZAkJCUdldFJlY3QoaW50IHJlY3RJbmRleCwgRlhfRkxPQVQmIGxlZnQsIEZYX0ZMT0FUJiB0b3AsIEZYX0ZMT0FUJiByaWdodCwgRlhfRkxPQVQgJmJvdHRvbSkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBGWF9CT09MCQkJR2V0QmFzZWxpbmVSb3RhdGUoaW50IHJlY3RJbmRleCwgaW50JiBSb3RhdGUpID0gMDsKKworICAgIHZpcnR1YWwgRlhfQk9PTAkJCUdldEJhc2VsaW5lUm90YXRlKENGWF9GbG9hdFJlY3QgcmVjdCwgaW50JiBSb3RhdGUpID0gMDsKKworICAgIHZpcnR1YWwJaW50CQkJCUNvdW50Qm91bmRlZFNlZ21lbnRzKEZYX0ZMT0FUIGxlZnQsIEZYX0ZMT0FUIHRvcCwgRlhfRkxPQVQgcmlnaHQsIEZYX0ZMT0FUIGJvdHRvbSwgRlhfQk9PTCBiQ29udGFpbnMgPSBGQUxTRSkgPSAwOworCisgICAgdmlydHVhbAl2b2lkCQkJR2V0Qm91bmRlZFNlZ21lbnQoaW50IGluZGV4LCBpbnQmIHN0YXJ0LCBpbnQmIGNvdW50KSBjb25zdCA9IDA7CisKKworICAgIHZpcnR1YWwgaW50CQkJCUdldFdvcmRCcmVhayhpbnQgaW5kZXgsIGludCBkaXJlY3Rpb24pIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJR2V0UGFnZVRleHQoaW50IHN0YXJ0ID0gMCwgaW50IG5Db3VudCA9IC0xICkgY29uc3QgPSAwOworfTsKKyNkZWZpbmUgRlBERlRFWFRfTUFUQ0hDQVNFICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBGUERGVEVYVF9NQVRDSFdIT0xFV09SRCAweDAwMDAwMDAyCisjZGVmaW5lIEZQREZURVhUX0NPTlNFQ1VUSVZFCTB4MDAwMDAwMDQKK2NsYXNzIElQREZfVGV4dFBhZ2VGaW5kIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIHZpcnR1YWwJfklQREZfVGV4dFBhZ2VGaW5kKCkge30KKworICAgIHN0YXRpYwlJUERGX1RleHRQYWdlRmluZCoJQ3JlYXRlUGFnZUZpbmQoY29uc3QgSVBERl9UZXh0UGFnZSogcFRleHRQYWdlKTsKK3B1YmxpYzoKKworICAgIHZpcnR1YWwJRlhfQk9PTAkJCQlGaW5kRmlyc3QoQ0ZYX1dpZGVTdHJpbmcgZmluZHdoYXQsIGludCBmbGFncywgaW50IHN0YXJ0UG9zID0gMCkgPSAwOworCisgICAgdmlydHVhbAlGWF9CT09MCQkJCUZpbmROZXh0KCkgPSAwOworCisgICAgdmlydHVhbAlGWF9CT09MCQkJCUZpbmRQcmV2KCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkCQkJCUdldFJlY3RBcnJheShDRlhfUmVjdEFycmF5JiByZWN0cykgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBpbnQJCQkJCUdldEN1ck9yZGVyKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBpbnQJCQkJCUdldE1hdGNoZWRDb3VudCgpIGNvbnN0ID0gMDsKK307CitjbGFzcyBJUERGX0xpbmtFeHRyYWN0IDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIHZpcnR1YWwJfklQREZfTGlua0V4dHJhY3QoKSB7fQorCisgICAgc3RhdGljCUlQREZfTGlua0V4dHJhY3QqCUNyZWF0ZUxpbmtFeHRyYWN0KCk7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJRXh0cmFjdExpbmtzKGNvbnN0IElQREZfVGV4dFBhZ2UqIHBUZXh0UGFnZSkgPSAwOworcHVibGljOgorCisgICAgdmlydHVhbCBpbnQJCQkJCUNvdW50TGlua3MoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIENGWF9XaWRlU3RyaW5nCQlHZXRVUkwoaW50IGluZGV4KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsCXZvaWQJCQkJR2V0Qm91bmRlZFNlZ21lbnQoaW50IGluZGV4LCBpbnQmIHN0YXJ0LCBpbnQmIGNvdW50KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQJCQkJR2V0UmVjdHMoaW50IGluZGV4LCBDRlhfUmVjdEFycmF5JiByZWN0cykgY29uc3QgPSAwOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaCBiL2NvcmUvaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgKaW5kZXggYmVlOTcwMi4uZTIxNWJiMSAxMDA2NDQKLS0tIGEvY29yZS9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaAorKysgYi9jb3JlL2luY2x1ZGUvZnhjb2RlYy9meF9jb2RlYy5oCkBAIC0xLDI4OCArMSwyODggQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0ZYX0NPREVDX0hfDQotI2RlZmluZSBfRlhfQ09ERUNfSF8NCi0jaWZuZGVmIF9GWENSVF9FWFRFTlNJT05fDQotI2luY2x1ZGUgIi4uL2Z4Y3J0L2Z4X2V4dC5oIg0KLSNlbmRpZg0KLSNpbmNsdWRlICJmeF9jb2RlY19kZWYuaCINCi0jaW5jbHVkZSAiZnhfY29kZWNfcHJvdmlkZXIuaCINCi1jbGFzcyBDRlhfRElCU291cmNlOw0KLWNsYXNzIElDb2RlY19TY2FubGluZURlY29kZXI7DQotY2xhc3MgSUNvZGVjX0Jhc2ljTW9kdWxlOw0KLWNsYXNzIElDb2RlY19GYXhNb2R1bGU7DQotY2xhc3MgSUNvZGVjX0pwZWdNb2R1bGU7DQotY2xhc3MgSUNvZGVjX0pweE1vZHVsZTsNCi1jbGFzcyBJQ29kZWNfSmJpZzJNb2R1bGU7DQotY2xhc3MgSUNvZGVjX0ljY01vZHVsZTsNCi1jbGFzcyBJQ29kZWNfRmxhdGVNb2R1bGU7DQotY2xhc3MgSUNvZGVjX0piaWcyRW5jb2RlcjsNCi1jbGFzcyBJQ29kZWNfU2NhbmxpbmVEZWNvZGVyOw0KLWNsYXNzIENDb2RlY19Nb2R1bGVNZ3IgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHN0YXRpYyBDQ29kZWNfTW9kdWxlTWdyKglDcmVhdGUoKTsNCi0NCi0gICAgdm9pZAkJCQlEZXN0cm95KCk7DQotDQotICAgIHZvaWQJCQkJSW5pdEpiaWcyRGVjb2RlcigpOw0KLQ0KLSAgICB2b2lkCQkJCUluaXRKcHhEZWNvZGVyKCk7DQotDQotDQotICAgIHZvaWQJCQkJSW5pdEljY0RlY29kZXIoKTsNCi0NCi0gICAgSUNvZGVjX0piaWcyRW5jb2RlcioJCUNyZWF0ZUpiaWcyRW5jb2RlcigpOw0KLXByb3RlY3RlZDoNCi0gICAgQ0NvZGVjX01vZHVsZU1ncigpOw0KLSAgICB+Q0NvZGVjX01vZHVsZU1ncigpOw0KLXB1YmxpYzoNCi0gICAgSUNvZGVjX0Jhc2ljTW9kdWxlKglHZXRCYXNpY01vZHVsZSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BCYXNpY01vZHVsZTsNCi0gICAgfQ0KLSAgICBJQ29kZWNfRmF4TW9kdWxlKglHZXRGYXhNb2R1bGUoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRmF4TW9kdWxlOw0KLSAgICB9DQotICAgIElDb2RlY19KcGVnTW9kdWxlKglHZXRKcGVnTW9kdWxlKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcEpwZWdNb2R1bGU7DQotICAgIH0NCi0gICAgSUNvZGVjX0pweE1vZHVsZSoJR2V0SnB4TW9kdWxlKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcEpweE1vZHVsZTsNCi0gICAgfQ0KLSAgICBJQ29kZWNfSmJpZzJNb2R1bGUqCUdldEpiaWcyTW9kdWxlKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcEpiaWcyTW9kdWxlOw0KLSAgICB9DQotICAgIElDb2RlY19JY2NNb2R1bGUqCUdldEljY01vZHVsZSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BJY2NNb2R1bGU7DQotICAgIH0NCi0gICAgSUNvZGVjX0ZsYXRlTW9kdWxlKglHZXRGbGF0ZU1vZHVsZSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BGbGF0ZU1vZHVsZTsNCi0gICAgfQ0KLXByb3RlY3RlZDoNCi0gICAgSUNvZGVjX0Jhc2ljTW9kdWxlKgltX3BCYXNpY01vZHVsZTsNCi0gICAgSUNvZGVjX0ZheE1vZHVsZSoJbV9wRmF4TW9kdWxlOw0KLSAgICBJQ29kZWNfSnBlZ01vZHVsZSoJbV9wSnBlZ01vZHVsZTsNCi0gICAgSUNvZGVjX0pweE1vZHVsZSoJbV9wSnB4TW9kdWxlOw0KLSAgICBJQ29kZWNfSmJpZzJNb2R1bGUqCW1fcEpiaWcyTW9kdWxlOw0KLSAgICBJQ29kZWNfSWNjTW9kdWxlKgltX3BJY2NNb2R1bGU7DQotICAgIElDb2RlY19GbGF0ZU1vZHVsZSoJbV9wRmxhdGVNb2R1bGU7DQotDQotfTsNCi1jbGFzcyBJQ29kZWNfQmFzaWNNb2R1bGUgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHZpcnR1YWwgfklDb2RlY19CYXNpY01vZHVsZSgpIHt9DQotICAgIHZpcnR1YWwgRlhfQk9PTAlSdW5MZW5ndGhFbmNvZGUoY29uc3QgRlhfQllURSogc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIEZYX0xQQllURSYgZGVzdF9idWYsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkgPSAwOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJQTg1RW5jb2RlKGNvbnN0IEZYX0JZVEUqIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBGWF9MUEJZVEUmIGRlc3RfYnVmLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEJiBkZXN0X3NpemUpID0gMDsNCi0gICAgdmlydHVhbCBJQ29kZWNfU2NhbmxpbmVEZWNvZGVyKglDcmVhdGVSdW5MZW5ndGhEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwNCi0gICAgICAgICAgICBpbnQgbkNvbXBzLCBpbnQgYnBjKSA9IDA7DQotfTsNCi1jbGFzcyBJQ29kZWNfU2NhbmxpbmVEZWNvZGVyIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICB2aXJ0dWFsIH5JQ29kZWNfU2NhbmxpbmVEZWNvZGVyKCkge30NCi0NCi0gICAgdmlydHVhbCBGWF9EV09SRAlHZXRTcmNPZmZzZXQoKSA9IDA7DQotDQotICAgIHZpcnR1YWwgdm9pZAkJRG93blNjYWxlKGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9MUEJZVEUJR2V0U2NhbmxpbmUoaW50IGxpbmUpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQlTa2lwVG9TY2FubGluZShpbnQgbGluZSwgSUZYX1BhdXNlKiBwUGF1c2UpID0gMDsNCi0NCi0gICAgdmlydHVhbCBpbnQJCQlHZXRXaWR0aCgpID0gMDsNCi0NCi0gICAgdmlydHVhbCBpbnQJCQlHZXRIZWlnaHQoKSA9IDA7DQotDQotICAgIHZpcnR1YWwgaW50CQkJQ291bnRDb21wcygpID0gMDsNCi0NCi0gICAgdmlydHVhbCBpbnQJCQlHZXRCUEMoKSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJSXNDb2xvclRyYW5zZm9ybWVkKCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCUNsZWFySW1hZ2VEYXRhKCkgPSAwOw0KLX07DQotY2xhc3MgSUNvZGVjX0ZsYXRlTW9kdWxlIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICB2aXJ0dWFsIH5JQ29kZWNfRmxhdGVNb2R1bGUoKSB7fQ0KLSAgICB2aXJ0dWFsIElDb2RlY19TY2FubGluZURlY29kZXIqCUNyZWF0ZURlY29kZXIoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KLSAgICAgICAgICAgIGludCBuQ29tcHMsIGludCBicGMsIGludCBwcmVkaWN0b3IsIGludCBDb2xvcnMsIGludCBCaXRzUGVyQ29tcG9uZW50LCBpbnQgQ29sdW1ucykgPSAwOw0KLSAgICB2aXJ0dWFsIEZYX0RXT1JECUZsYXRlT3JMWldEZWNvZGUoRlhfQk9PTCBiTFpXLCBjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgRlhfQk9PTCBiRWFybHlDaGFuZ2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJlZGljdG9yLCBpbnQgQ29sb3JzLCBpbnQgQml0c1BlckNvbXBvbmVudCwgaW50IENvbHVtbnMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBlc3RpbWF0ZWRfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkgPSAwOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCUVuY29kZShjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWRpY3RvciwgaW50IENvbG9ycywgaW50IEJpdHNQZXJDb21wb25lbnQsIGludCBDb2x1bW5zLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUmIGRlc3RfYnVmLCBGWF9EV09SRCYgZGVzdF9zaXplKSA9IDA7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJRW5jb2RlKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpID0gMDsNCi19Ow0KLWNsYXNzIElDb2RlY19GYXhNb2R1bGUgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHZpcnR1YWwgfklDb2RlY19GYXhNb2R1bGUoKSB7fQ0KLQ0KLSAgICB2aXJ0dWFsIElDb2RlY19TY2FubGluZURlY29kZXIqCUNyZWF0ZURlY29kZXIoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KLSAgICAgICAgICAgIGludCBLLCBGWF9CT09MIEVuZE9mTGluZSwgRlhfQk9PTCBFbmNvZGVkQnl0ZUFsaWduLCBGWF9CT09MIEJsYWNrSXMxLCBpbnQgQ29sdW1ucywgaW50IFJvd3MpID0gMDsNCi0NCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQlFbmNvZGUoRlhfTFBDQllURSBzcmNfYnVmLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBwaXRjaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkgPSAwOw0KLX07DQotY2xhc3MgSUNvZGVjX0pwZWdNb2R1bGUgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHZpcnR1YWwgfklDb2RlY19KcGVnTW9kdWxlKCkge30NCi0NCi0gICAgdmlydHVhbCB2b2lkCQlTZXRQb3ZpZGVyKElGWF9KcGVnUHJvdmlkZXIqIHBKUCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIElDb2RlY19TY2FubGluZURlY29kZXIqCUNyZWF0ZURlY29kZXIoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwNCi0gICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBuQ29tcHMsIEZYX0JPT0wgQ29sb3JUcmFuc2Zvcm0pID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQlMb2FkSW5mbyhGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBpbnQmIHdpZHRoLCBpbnQmIGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIG51bV9jb21wb25lbnRzLCBpbnQmIGJpdHNfcGVyX2NvbXBvbmVudHMsIEZYX0JPT0wmIGNvbG9yX3RyYW5zZm9ybSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUqIGljY19idWZfcHRyID0gTlVMTCwgRlhfRFdPUkQqIGljY19sZW5ndGggPSBOVUxMKSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJRW5jb2RlKGNvbnN0IGNsYXNzIENGWF9ESUJTb3VyY2UqIHBTb3VyY2UsIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX1NUUlNJWkUmIGRlc3Rfc2l6ZSwgaW50IHF1YWxpdHkgPSA3NSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBDQllURSBpY2NfYnVmID0gTlVMTCwgRlhfRFdPUkQgaWNjX2xlbmd0aCA9IDApID0gMDsNCi0NCi0gICAgdmlydHVhbCB2b2lkKgkJU3RhcnQoKSA9IDA7DQotDQotICAgIHZpcnR1YWwgdm9pZAkJRmluaXNoKHZvaWQqIHBDb250ZXh0KSA9IDA7DQotDQotICAgIHZpcnR1YWwgdm9pZAkJSW5wdXQodm9pZCogcENvbnRleHQsIEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUpID0gMDsNCi0NCi0gICAgdmlydHVhbCBpbnQJCQlSZWFkSGVhZGVyKHZvaWQqIHBDb250ZXh0LCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCwgaW50KiBuQ29tcHMpID0gMDsNCi0NCi0NCi0gICAgdmlydHVhbCBpbnQJCQlTdGFydFNjYW5saW5lKHZvaWQqIHBDb250ZXh0LCBpbnQgZG93bl9zY2FsZSkgPSAwOw0KLQ0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCVJlYWRTY2FubGluZSh2b2lkKiBwQ29udGV4dCwgRlhfTFBCWVRFIGRlc3RfYnVmKSA9IDA7DQotDQotDQotICAgIHZpcnR1YWwgRlhfRFdPUkQJR2V0QXZhaWxJbnB1dCh2b2lkKiBwQ29udGV4dCwgRlhfTFBCWVRFKiBhdmFpbF9idWZfcHRyID0gTlVMTCkgPSAwOw0KLX07DQotY2xhc3MgSUNvZGVjX0pweE1vZHVsZSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgdmlydHVhbCB+SUNvZGVjX0pweE1vZHVsZSgpIHt9DQotDQotICAgIHZpcnR1YWwgRlhfTFBWT0lEIAlDcmVhdGVEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIEZYX0JPT0wgdXNlQ29sb3JTcGFjZSA9IEZBTFNFKSA9IDA7DQotDQotICAgIHZpcnR1YWwgdm9pZAkJR2V0SW1hZ2VJbmZvKEZYX0xQVk9JRCBjdHgsIEZYX0RXT1JEJiB3aWR0aCwgRlhfRFdPUkQmIGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQmIGNvZGVzdHJlYW1fbkNvbXBzLCBGWF9EV09SRCYgb3V0cHV0X25Db21wcykgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCURlY29kZShGWF9MUFZPSUQgY3R4LCBGWF9MUEJZVEUgZGVzdF9kYXRhLCBpbnQgcGl0Y2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYlRyYW5zbGF0ZUNvbG9yLCBGWF9MUEJZVEUgb2Zmc2V0cykgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCURlc3Ryb3lEZWNvZGVyKEZYX0xQVk9JRCBjdHgpID0gMDsNCi19Ow0KLWNsYXNzIElDb2RlY19KYmlnMk1vZHVsZSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgdmlydHVhbCB+SUNvZGVjX0piaWcyTW9kdWxlKCkge30NCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQlEZWNvZGUoRlhfRFdPUkQgd2lkdGgsIEZYX0RXT1JEIGhlaWdodCwgRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBDQllURSBnbG9iYWxfZGF0YSwgRlhfRFdPUkQgZ2xvYmFsX3NpemUsIEZYX0xQQllURSBkZXN0X2J1ZiwgRlhfRFdPUkQgZGVzdF9waXRjaCkgID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQlEZWNvZGUoSUZYX0ZpbGVSZWFkKiBmaWxlX3B0ciwgRlhfRFdPUkQmIHdpZHRoLCBGWF9EV09SRCYgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCYgcGl0Y2gsIEZYX0xQQllURSYgZGVzdF9idWYpID0gMDsNCi0gICAgdmlydHVhbCB2b2lkKgkJCQlDcmVhdGVKYmlnMkNvbnRleHQoKSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhDT0RFQ19TVEFUVVMJCVN0YXJ0RGVjb2RlKHZvaWQqIHBKYmlnMkNvbnRleHQsIEZYX0RXT1JEIHdpZHRoLCBGWF9EV09SRCBoZWlnaHQsIEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUENCWVRFIGdsb2JhbF9kYXRhLCBGWF9EV09SRCBnbG9iYWxfc2l6ZSwgRlhfTFBCWVRFIGRlc3RfYnVmLCBGWF9EV09SRCBkZXN0X3BpdGNoLCBJRlhfUGF1c2UqIHBQYXVzZSkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYQ09ERUNfU1RBVFVTCQlTdGFydERlY29kZSh2b2lkKiBwSmJpZzJDb250ZXh0LCBJRlhfRmlsZVJlYWQqIGZpbGVfcHRyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQmIHdpZHRoLCBGWF9EV09SRCYgaGVpZ2h0LCBGWF9EV09SRCYgcGl0Y2gsIEZYX0xQQllURSYgZGVzdF9idWYsIElGWF9QYXVzZSogcFBhdXNlKSA9IDA7DQotICAgIHZpcnR1YWwgRlhDT0RFQ19TVEFUVVMJCUNvbnRpbnVlRGVjb2RlKHZvaWQqIHBKYmlnMkNvbnRlbnQsIElGWF9QYXVzZSogcFBhdXNlKSA9IDA7DQotICAgIHZpcnR1YWwgdm9pZAkJCQlEZXN0cm95SmJpZzJDb250ZXh0KHZvaWQqIHBKYmlnMkNvbnRlbnQpID0gMDsNCi19Ow0KLWNsYXNzIElDb2RlY19KYmlnMkVuY29kZXIgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHZpcnR1YWwgfklDb2RlY19KYmlnMkVuY29kZXIoKSB7fQ0KLX07DQotY2xhc3MgSUNvZGVjX0ljY01vZHVsZSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgdHlwZWRlZiBlbnVtIHsNCi0gICAgICAgIEljY0NTX1Vua25vd24gPSAwLA0KLSAgICAgICAgSWNjQ1NfWFlaLA0KLSAgICAgICAgSWNjQ1NfTGFiLA0KLSAgICAgICAgSWNjQ1NfTHV2LA0KLSAgICAgICAgSWNjQ1NfWUNiQ3IsDQotICAgICAgICBJY2NDU19ZeHksDQotICAgICAgICBJY2NDU19Ic3YsDQotICAgICAgICBJY2NDU19IbHMsDQotICAgICAgICBJY2NDU19HcmF5LA0KLSAgICAgICAgSWNjQ1NfUmdiLA0KLSAgICAgICAgSWNjQ1NfQ215aywNCi0gICAgICAgIEljY0NTX0NteQ0KLSAgICB9IEljY0NTOw0KLSAgICB0eXBlZGVmIHN0cnVjdCBfSWNjUGFyYW0gew0KLSAgICAgICAgRlhfRFdPUkQJVmVyc2lvbjsNCi0gICAgICAgIEljY0NTCQlDb2xvclNwYWNlOw0KLSAgICAgICAgRlhfRFdPUkQJZHdQcm9maWxlVHlwZTsNCi0gICAgICAgIEZYX0RXT1JECWR3Rm9ybWF0Ow0KLSAgICAgICAgRlhfTFBCWVRFCXBQcm9maWxlRGF0YTsNCi0gICAgICAgIEZYX0RXT1JECWR3UHJvZmlsZVNpemU7DQotICAgICAgICBkb3VibGUJCUdhbW1hOw0KLSAgICB9IEljY1BhcmFtOw0KLQ0KLSAgICB2aXJ0dWFsIH5JQ29kZWNfSWNjTW9kdWxlKCkge30NCi0NCi0gICAgdmlydHVhbCBJY2NDUwkJCUdldFByb2ZpbGVDUyhGWF9MUENCWVRFIHBQcm9maWxlRGF0YSwgdW5zaWduZWQgaW50IGR3UHJvZmlsZVNpemUpID0gMDsNCi0NCi0gICAgdmlydHVhbCBJY2NDUwkJCUdldFByb2ZpbGVDUyhJRlhfRmlsZVJlYWQqIHBGaWxlKSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfTFBWT0lECUNyZWF0ZVRyYW5zZm9ybShJQ29kZWNfSWNjTW9kdWxlOjpJY2NQYXJhbSogcElucHV0UGFyYW0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElDb2RlY19JY2NNb2R1bGU6OkljY1BhcmFtKiBwT3V0cHV0UGFyYW0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElDb2RlY19JY2NNb2R1bGU6OkljY1BhcmFtKiBwUHJvb2ZQYXJhbSA9IE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGR3SW50ZW50ID0gSWNjX0lOVEVOVF9QRVJDRVBUVUFMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBkd0ZsYWcgPSBJY2NfRkxBR1NfREVGQVVMVCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgZHdQcmZJbnRlbnQgPSBJY2NfSU5URU5UX0FCU09MVVRFX0NPTE9SSU1FVFJJQywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgZHdQcmZGbGFnID0gSWNjX0ZMQUdTX1NPRlRQUk9PRklORw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApID0gMDsNCi0NCi0NCi0gICAgdmlydHVhbCBGWF9MUFZPSUQJQ3JlYXRlVHJhbnNmb3JtX3NSR0IoRlhfTFBDQllURSBwUHJvZmlsZURhdGEsIHVuc2lnbmVkIGludCBkd1Byb2ZpbGVTaXplLCBpbnQgbkNvbXBvbmVudHMsIGludCBpbnRlbnQgPSAwLA0KLSAgICAgICAgICAgIEZYX0RXT1JEIGR3U3JjRm9ybWF0ID0gSWNjX0ZPUk1BVF9ERUZBVUxUKSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfTFBWT0lECUNyZWF0ZVRyYW5zZm9ybV9DTVlLKEZYX0xQQ0JZVEUgcFNyY1Byb2ZpbGVEYXRhLCB1bnNpZ25lZCBpbnQgZHdTcmNQcm9maWxlU2l6ZSwgaW50IG5TcmNDb21wb25lbnRzLA0KLSAgICAgICAgICAgIEZYX0xQQ0JZVEUgcERzdFByb2ZpbGVEYXRhLCB1bnNpZ25lZCBpbnQgZHdEc3RQcm9maWxlU2l6ZSwgaW50IGludGVudCA9IDAsDQotICAgICAgICAgICAgRlhfRFdPUkQgZHdTcmNGb3JtYXQgPSBJY2NfRk9STUFUX0RFRkFVTFQsDQotICAgICAgICAgICAgRlhfRFdPUkQgZHdEc3RGb3JtYXQgPSBJY2NfRk9STUFUX0RFRkFVTFQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApID0gMDsNCi0NCi0gICAgdmlydHVhbCB2b2lkCQkJRGVzdHJveVRyYW5zZm9ybShGWF9MUFZPSUQgcFRyYW5zZm9ybSkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQlUcmFuc2xhdGUoRlhfTFBWT0lEIHBUcmFuc2Zvcm0sIEZYX0ZMT0FUKiBwU3JjVmFsdWVzLCBGWF9GTE9BVCogcERlc3RWYWx1ZXMpID0gMDsNCi0NCi0gICAgdmlydHVhbCB2b2lkCQkJVHJhbnNsYXRlU2NhbmxpbmUoRlhfTFBWT0lEIHBUcmFuc2Zvcm0sIEZYX0xQQllURSBwRGVzdCwgRlhfTFBDQllURSBwU3JjLCBpbnQgcGl4ZWxzKSA9IDA7DQotfTsNCi12b2lkIEFkb2JlQ01ZS190b19zUkdCKEZYX0ZMT0FUIGMsIEZYX0ZMT0FUIG0sIEZYX0ZMT0FUIHksIEZYX0ZMT0FUIGssIEZYX0ZMT0FUJiBSLCBGWF9GTE9BVCYgRywgRlhfRkxPQVQmIEIpOw0KLXZvaWQgQWRvYmVDTVlLX3RvX3NSR0IxKEZYX0JZVEUgYywgRlhfQllURSBtLCBGWF9CWVRFIHksIEZYX0JZVEUgaywgRlhfQllURSYgUiwgRlhfQllURSYgRywgRlhfQllURSYgQik7DQotRlhfQk9PTCBNRDVDb21wdXRlSUQoRlhfTFBDVk9JRCBidWYsIEZYX0RXT1JEIGR3U2l6ZSwgRlhfQllURSBJRFsxNl0pOw0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZYX0NPREVDX0hfCisjZGVmaW5lIF9GWF9DT0RFQ19IXworI2lmbmRlZiBfRlhDUlRfRVhURU5TSU9OXworI2luY2x1ZGUgIi4uL2Z4Y3J0L2Z4X2V4dC5oIgorI2VuZGlmCisjaW5jbHVkZSAiZnhfY29kZWNfZGVmLmgiCisjaW5jbHVkZSAiZnhfY29kZWNfcHJvdmlkZXIuaCIKK2NsYXNzIENGWF9ESUJTb3VyY2U7CitjbGFzcyBJQ29kZWNfU2NhbmxpbmVEZWNvZGVyOworY2xhc3MgSUNvZGVjX0Jhc2ljTW9kdWxlOworY2xhc3MgSUNvZGVjX0ZheE1vZHVsZTsKK2NsYXNzIElDb2RlY19KcGVnTW9kdWxlOworY2xhc3MgSUNvZGVjX0pweE1vZHVsZTsKK2NsYXNzIElDb2RlY19KYmlnMk1vZHVsZTsKK2NsYXNzIElDb2RlY19JY2NNb2R1bGU7CitjbGFzcyBJQ29kZWNfRmxhdGVNb2R1bGU7CitjbGFzcyBJQ29kZWNfSmJpZzJFbmNvZGVyOworY2xhc3MgSUNvZGVjX1NjYW5saW5lRGVjb2RlcjsKK2NsYXNzIENDb2RlY19Nb2R1bGVNZ3IgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgc3RhdGljIENDb2RlY19Nb2R1bGVNZ3IqCUNyZWF0ZSgpOworCisgICAgdm9pZAkJCQlEZXN0cm95KCk7CisKKyAgICB2b2lkCQkJCUluaXRKYmlnMkRlY29kZXIoKTsKKworICAgIHZvaWQJCQkJSW5pdEpweERlY29kZXIoKTsKKworCisgICAgdm9pZAkJCQlJbml0SWNjRGVjb2RlcigpOworCisgICAgSUNvZGVjX0piaWcyRW5jb2RlcioJCUNyZWF0ZUpiaWcyRW5jb2RlcigpOworcHJvdGVjdGVkOgorICAgIENDb2RlY19Nb2R1bGVNZ3IoKTsKKyAgICB+Q0NvZGVjX01vZHVsZU1ncigpOworcHVibGljOgorICAgIElDb2RlY19CYXNpY01vZHVsZSoJR2V0QmFzaWNNb2R1bGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcEJhc2ljTW9kdWxlOworICAgIH0KKyAgICBJQ29kZWNfRmF4TW9kdWxlKglHZXRGYXhNb2R1bGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcEZheE1vZHVsZTsKKyAgICB9CisgICAgSUNvZGVjX0pwZWdNb2R1bGUqCUdldEpwZWdNb2R1bGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcEpwZWdNb2R1bGU7CisgICAgfQorICAgIElDb2RlY19KcHhNb2R1bGUqCUdldEpweE1vZHVsZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9wSnB4TW9kdWxlOworICAgIH0KKyAgICBJQ29kZWNfSmJpZzJNb2R1bGUqCUdldEpiaWcyTW9kdWxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BKYmlnMk1vZHVsZTsKKyAgICB9CisgICAgSUNvZGVjX0ljY01vZHVsZSoJR2V0SWNjTW9kdWxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BJY2NNb2R1bGU7CisgICAgfQorICAgIElDb2RlY19GbGF0ZU1vZHVsZSoJR2V0RmxhdGVNb2R1bGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcEZsYXRlTW9kdWxlOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBJQ29kZWNfQmFzaWNNb2R1bGUqCW1fcEJhc2ljTW9kdWxlOworICAgIElDb2RlY19GYXhNb2R1bGUqCW1fcEZheE1vZHVsZTsKKyAgICBJQ29kZWNfSnBlZ01vZHVsZSoJbV9wSnBlZ01vZHVsZTsKKyAgICBJQ29kZWNfSnB4TW9kdWxlKgltX3BKcHhNb2R1bGU7CisgICAgSUNvZGVjX0piaWcyTW9kdWxlKgltX3BKYmlnMk1vZHVsZTsKKyAgICBJQ29kZWNfSWNjTW9kdWxlKgltX3BJY2NNb2R1bGU7CisgICAgSUNvZGVjX0ZsYXRlTW9kdWxlKgltX3BGbGF0ZU1vZHVsZTsKKworfTsKK2NsYXNzIElDb2RlY19CYXNpY01vZHVsZSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICB2aXJ0dWFsIH5JQ29kZWNfQmFzaWNNb2R1bGUoKSB7fQorICAgIHZpcnR1YWwgRlhfQk9PTAlSdW5MZW5ndGhFbmNvZGUoY29uc3QgRlhfQllURSogc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIEZYX0xQQllURSYgZGVzdF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCYgZGVzdF9zaXplKSA9IDA7CisgICAgdmlydHVhbCBGWF9CT09MCUE4NUVuY29kZShjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEJiBkZXN0X3NpemUpID0gMDsKKyAgICB2aXJ0dWFsIElDb2RlY19TY2FubGluZURlY29kZXIqCUNyZWF0ZVJ1bkxlbmd0aERlY29kZXIoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgaW50IG5Db21wcywgaW50IGJwYykgPSAwOworfTsKK2NsYXNzIElDb2RlY19TY2FubGluZURlY29kZXIgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgdmlydHVhbCB+SUNvZGVjX1NjYW5saW5lRGVjb2RlcigpIHt9CisKKyAgICB2aXJ0dWFsIEZYX0RXT1JECUdldFNyY09mZnNldCgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZAkJRG93blNjYWxlKGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQpID0gMDsKKworICAgIHZpcnR1YWwgRlhfTFBCWVRFCUdldFNjYW5saW5lKGludCBsaW5lKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCVNraXBUb1NjYW5saW5lKGludCBsaW5lLCBJRlhfUGF1c2UqIHBQYXVzZSkgPSAwOworCisgICAgdmlydHVhbCBpbnQJCQlHZXRXaWR0aCgpID0gMDsKKworICAgIHZpcnR1YWwgaW50CQkJR2V0SGVpZ2h0KCkgPSAwOworCisgICAgdmlydHVhbCBpbnQJCQlDb3VudENvbXBzKCkgPSAwOworCisgICAgdmlydHVhbCBpbnQJCQlHZXRCUEMoKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCUlzQ29sb3JUcmFuc2Zvcm1lZCgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZAkJQ2xlYXJJbWFnZURhdGEoKSA9IDA7Cit9OworY2xhc3MgSUNvZGVjX0ZsYXRlTW9kdWxlIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIHZpcnR1YWwgfklDb2RlY19GbGF0ZU1vZHVsZSgpIHt9CisgICAgdmlydHVhbCBJQ29kZWNfU2NhbmxpbmVEZWNvZGVyKglDcmVhdGVEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgICAgIGludCBuQ29tcHMsIGludCBicGMsIGludCBwcmVkaWN0b3IsIGludCBDb2xvcnMsIGludCBCaXRzUGVyQ29tcG9uZW50LCBpbnQgQ29sdW1ucykgPSAwOworICAgIHZpcnR1YWwgRlhfRFdPUkQJRmxhdGVPckxaV0RlY29kZShGWF9CT09MIGJMWlcsIGNvbnN0IEZYX0JZVEUqIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBGWF9CT09MIGJFYXJseUNoYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWRpY3RvciwgaW50IENvbG9ycywgaW50IEJpdHNQZXJDb21wb25lbnQsIGludCBDb2x1bW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBlc3RpbWF0ZWRfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkgPSAwOworICAgIHZpcnR1YWwgRlhfQk9PTAkJRW5jb2RlKGNvbnN0IEZYX0JZVEUqIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmVkaWN0b3IsIGludCBDb2xvcnMsIGludCBCaXRzUGVyQ29tcG9uZW50LCBpbnQgQ29sdW1ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUmIGRlc3RfYnVmLCBGWF9EV09SRCYgZGVzdF9zaXplKSA9IDA7CisgICAgdmlydHVhbCBGWF9CT09MCQlFbmNvZGUoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkgPSAwOworfTsKK2NsYXNzIElDb2RlY19GYXhNb2R1bGUgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgdmlydHVhbCB+SUNvZGVjX0ZheE1vZHVsZSgpIHt9CisKKyAgICB2aXJ0dWFsIElDb2RlY19TY2FubGluZURlY29kZXIqCUNyZWF0ZURlY29kZXIoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgaW50IEssIEZYX0JPT0wgRW5kT2ZMaW5lLCBGWF9CT09MIEVuY29kZWRCeXRlQWxpZ24sIEZYX0JPT0wgQmxhY2tJczEsIGludCBDb2x1bW5zLCBpbnQgUm93cykgPSAwOworCisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCUVuY29kZShGWF9MUENCWVRFIHNyY19idWYsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpID0gMDsKK307CitjbGFzcyBJQ29kZWNfSnBlZ01vZHVsZSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICB2aXJ0dWFsIH5JQ29kZWNfSnBlZ01vZHVsZSgpIHt9CisKKyAgICB2aXJ0dWFsIHZvaWQJCVNldFBvdmlkZXIoSUZYX0pwZWdQcm92aWRlciogcEpQKSA9IDA7CisKKyAgICB2aXJ0dWFsIElDb2RlY19TY2FubGluZURlY29kZXIqCUNyZWF0ZURlY29kZXIoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwKKyAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG5Db21wcywgRlhfQk9PTCBDb2xvclRyYW5zZm9ybSkgPSAwOworCisgICAgdmlydHVhbCBGWF9CT09MCQlMb2FkSW5mbyhGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBpbnQmIHdpZHRoLCBpbnQmIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbnVtX2NvbXBvbmVudHMsIGludCYgYml0c19wZXJfY29tcG9uZW50cywgRlhfQk9PTCYgY29sb3JfdHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFKiBpY2NfYnVmX3B0ciA9IE5VTEwsIEZYX0RXT1JEKiBpY2NfbGVuZ3RoID0gTlVMTCkgPSAwOworCisgICAgdmlydHVhbCBGWF9CT09MCQlFbmNvZGUoY29uc3QgY2xhc3MgQ0ZYX0RJQlNvdXJjZSogcFNvdXJjZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfU1RSU0laRSYgZGVzdF9zaXplLCBpbnQgcXVhbGl0eSA9IDc1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgaWNjX2J1ZiA9IE5VTEwsIEZYX0RXT1JEIGljY19sZW5ndGggPSAwKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQqCQlTdGFydCgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZAkJRmluaXNoKHZvaWQqIHBDb250ZXh0KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQJCUlucHV0KHZvaWQqIHBDb250ZXh0LCBGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplKSA9IDA7CisKKyAgICB2aXJ0dWFsIGludAkJCVJlYWRIZWFkZXIodm9pZCogcENvbnRleHQsIGludCogd2lkdGgsIGludCogaGVpZ2h0LCBpbnQqIG5Db21wcykgPSAwOworCisKKyAgICB2aXJ0dWFsIGludAkJCVN0YXJ0U2NhbmxpbmUodm9pZCogcENvbnRleHQsIGludCBkb3duX3NjYWxlKSA9IDA7CisKKworICAgIHZpcnR1YWwgRlhfQk9PTAkJUmVhZFNjYW5saW5lKHZvaWQqIHBDb250ZXh0LCBGWF9MUEJZVEUgZGVzdF9idWYpID0gMDsKKworCisgICAgdmlydHVhbCBGWF9EV09SRAlHZXRBdmFpbElucHV0KHZvaWQqIHBDb250ZXh0LCBGWF9MUEJZVEUqIGF2YWlsX2J1Zl9wdHIgPSBOVUxMKSA9IDA7Cit9OworY2xhc3MgSUNvZGVjX0pweE1vZHVsZSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICB2aXJ0dWFsIH5JQ29kZWNfSnB4TW9kdWxlKCkge30KKworICAgIHZpcnR1YWwgRlhfTFBWT0lEIAlDcmVhdGVEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIEZYX0JPT0wgdXNlQ29sb3JTcGFjZSA9IEZBTFNFKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQJCUdldEltYWdlSW5mbyhGWF9MUFZPSUQgY3R4LCBGWF9EV09SRCYgd2lkdGgsIEZYX0RXT1JEJiBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQmIGNvZGVzdHJlYW1fbkNvbXBzLCBGWF9EV09SRCYgb3V0cHV0X25Db21wcykgPSAwOworCisgICAgdmlydHVhbCBGWF9CT09MCQlEZWNvZGUoRlhfTFBWT0lEIGN0eCwgRlhfTFBCWVRFIGRlc3RfZGF0YSwgaW50IHBpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYlRyYW5zbGF0ZUNvbG9yLCBGWF9MUEJZVEUgb2Zmc2V0cykgPSAwOworCisgICAgdmlydHVhbCB2b2lkCQlEZXN0cm95RGVjb2RlcihGWF9MUFZPSUQgY3R4KSA9IDA7Cit9OworY2xhc3MgSUNvZGVjX0piaWcyTW9kdWxlIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIHZpcnR1YWwgfklDb2RlY19KYmlnMk1vZHVsZSgpIHt9CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCURlY29kZShGWF9EV09SRCB3aWR0aCwgRlhfRFdPUkQgaGVpZ2h0LCBGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgZ2xvYmFsX2RhdGEsIEZYX0RXT1JEIGdsb2JhbF9zaXplLCBGWF9MUEJZVEUgZGVzdF9idWYsIEZYX0RXT1JEIGRlc3RfcGl0Y2gpICA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCURlY29kZShJRlhfRmlsZVJlYWQqIGZpbGVfcHRyLCBGWF9EV09SRCYgd2lkdGgsIEZYX0RXT1JEJiBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQmIHBpdGNoLCBGWF9MUEJZVEUmIGRlc3RfYnVmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkKgkJCQlDcmVhdGVKYmlnMkNvbnRleHQoKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYQ09ERUNfU1RBVFVTCQlTdGFydERlY29kZSh2b2lkKiBwSmJpZzJDb250ZXh0LCBGWF9EV09SRCB3aWR0aCwgRlhfRFdPUkQgaGVpZ2h0LCBGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUENCWVRFIGdsb2JhbF9kYXRhLCBGWF9EV09SRCBnbG9iYWxfc2l6ZSwgRlhfTFBCWVRFIGRlc3RfYnVmLCBGWF9EV09SRCBkZXN0X3BpdGNoLCBJRlhfUGF1c2UqIHBQYXVzZSkgPSAwOworCisgICAgdmlydHVhbCBGWENPREVDX1NUQVRVUwkJU3RhcnREZWNvZGUodm9pZCogcEpiaWcyQ29udGV4dCwgSUZYX0ZpbGVSZWFkKiBmaWxlX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQmIHdpZHRoLCBGWF9EV09SRCYgaGVpZ2h0LCBGWF9EV09SRCYgcGl0Y2gsIEZYX0xQQllURSYgZGVzdF9idWYsIElGWF9QYXVzZSogcFBhdXNlKSA9IDA7CisgICAgdmlydHVhbCBGWENPREVDX1NUQVRVUwkJQ29udGludWVEZWNvZGUodm9pZCogcEpiaWcyQ29udGVudCwgSUZYX1BhdXNlKiBwUGF1c2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQJCQkJRGVzdHJveUpiaWcyQ29udGV4dCh2b2lkKiBwSmJpZzJDb250ZW50KSA9IDA7Cit9OworY2xhc3MgSUNvZGVjX0piaWcyRW5jb2RlciA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICB2aXJ0dWFsIH5JQ29kZWNfSmJpZzJFbmNvZGVyKCkge30KK307CitjbGFzcyBJQ29kZWNfSWNjTW9kdWxlIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICB0eXBlZGVmIGVudW0geworICAgICAgICBJY2NDU19Vbmtub3duID0gMCwKKyAgICAgICAgSWNjQ1NfWFlaLAorICAgICAgICBJY2NDU19MYWIsCisgICAgICAgIEljY0NTX0x1diwKKyAgICAgICAgSWNjQ1NfWUNiQ3IsCisgICAgICAgIEljY0NTX1l4eSwKKyAgICAgICAgSWNjQ1NfSHN2LAorICAgICAgICBJY2NDU19IbHMsCisgICAgICAgIEljY0NTX0dyYXksCisgICAgICAgIEljY0NTX1JnYiwKKyAgICAgICAgSWNjQ1NfQ215aywKKyAgICAgICAgSWNjQ1NfQ215CisgICAgfSBJY2NDUzsKKyAgICB0eXBlZGVmIHN0cnVjdCBfSWNjUGFyYW0geworICAgICAgICBGWF9EV09SRAlWZXJzaW9uOworICAgICAgICBJY2NDUwkJQ29sb3JTcGFjZTsKKyAgICAgICAgRlhfRFdPUkQJZHdQcm9maWxlVHlwZTsKKyAgICAgICAgRlhfRFdPUkQJZHdGb3JtYXQ7CisgICAgICAgIEZYX0xQQllURQlwUHJvZmlsZURhdGE7CisgICAgICAgIEZYX0RXT1JECWR3UHJvZmlsZVNpemU7CisgICAgICAgIGRvdWJsZQkJR2FtbWE7CisgICAgfSBJY2NQYXJhbTsKKworICAgIHZpcnR1YWwgfklDb2RlY19JY2NNb2R1bGUoKSB7fQorCisgICAgdmlydHVhbCBJY2NDUwkJCUdldFByb2ZpbGVDUyhGWF9MUENCWVRFIHBQcm9maWxlRGF0YSwgdW5zaWduZWQgaW50IGR3UHJvZmlsZVNpemUpID0gMDsKKworICAgIHZpcnR1YWwgSWNjQ1MJCQlHZXRQcm9maWxlQ1MoSUZYX0ZpbGVSZWFkKiBwRmlsZSkgPSAwOworCisgICAgdmlydHVhbCBGWF9MUFZPSUQJQ3JlYXRlVHJhbnNmb3JtKElDb2RlY19JY2NNb2R1bGU6OkljY1BhcmFtKiBwSW5wdXRQYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQ29kZWNfSWNjTW9kdWxlOjpJY2NQYXJhbSogcE91dHB1dFBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElDb2RlY19JY2NNb2R1bGU6OkljY1BhcmFtKiBwUHJvb2ZQYXJhbSA9IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgZHdJbnRlbnQgPSBJY2NfSU5URU5UX1BFUkNFUFRVQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgZHdGbGFnID0gSWNjX0ZMQUdTX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgZHdQcmZJbnRlbnQgPSBJY2NfSU5URU5UX0FCU09MVVRFX0NPTE9SSU1FVFJJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBkd1ByZkZsYWcgPSBJY2NfRkxBR1NfU09GVFBST09GSU5HCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA9IDA7CisKKworICAgIHZpcnR1YWwgRlhfTFBWT0lECUNyZWF0ZVRyYW5zZm9ybV9zUkdCKEZYX0xQQ0JZVEUgcFByb2ZpbGVEYXRhLCB1bnNpZ25lZCBpbnQgZHdQcm9maWxlU2l6ZSwgaW50IG5Db21wb25lbnRzLCBpbnQgaW50ZW50ID0gMCwKKyAgICAgICAgICAgIEZYX0RXT1JEIGR3U3JjRm9ybWF0ID0gSWNjX0ZPUk1BVF9ERUZBVUxUKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0xQVk9JRAlDcmVhdGVUcmFuc2Zvcm1fQ01ZSyhGWF9MUENCWVRFIHBTcmNQcm9maWxlRGF0YSwgdW5zaWduZWQgaW50IGR3U3JjUHJvZmlsZVNpemUsIGludCBuU3JjQ29tcG9uZW50cywKKyAgICAgICAgICAgIEZYX0xQQ0JZVEUgcERzdFByb2ZpbGVEYXRhLCB1bnNpZ25lZCBpbnQgZHdEc3RQcm9maWxlU2l6ZSwgaW50IGludGVudCA9IDAsCisgICAgICAgICAgICBGWF9EV09SRCBkd1NyY0Zvcm1hdCA9IEljY19GT1JNQVRfREVGQVVMVCwKKyAgICAgICAgICAgIEZYX0RXT1JEIGR3RHN0Rm9ybWF0ID0gSWNjX0ZPUk1BVF9ERUZBVUxUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApID0gMDsKKworICAgIHZpcnR1YWwgdm9pZAkJCURlc3Ryb3lUcmFuc2Zvcm0oRlhfTFBWT0lEIHBUcmFuc2Zvcm0pID0gMDsKKworICAgIHZpcnR1YWwgdm9pZAkJCVRyYW5zbGF0ZShGWF9MUFZPSUQgcFRyYW5zZm9ybSwgRlhfRkxPQVQqIHBTcmNWYWx1ZXMsIEZYX0ZMT0FUKiBwRGVzdFZhbHVlcykgPSAwOworCisgICAgdmlydHVhbCB2b2lkCQkJVHJhbnNsYXRlU2NhbmxpbmUoRlhfTFBWT0lEIHBUcmFuc2Zvcm0sIEZYX0xQQllURSBwRGVzdCwgRlhfTFBDQllURSBwU3JjLCBpbnQgcGl4ZWxzKSA9IDA7Cit9Owordm9pZCBBZG9iZUNNWUtfdG9fc1JHQihGWF9GTE9BVCBjLCBGWF9GTE9BVCBtLCBGWF9GTE9BVCB5LCBGWF9GTE9BVCBrLCBGWF9GTE9BVCYgUiwgRlhfRkxPQVQmIEcsIEZYX0ZMT0FUJiBCKTsKK3ZvaWQgQWRvYmVDTVlLX3RvX3NSR0IxKEZYX0JZVEUgYywgRlhfQllURSBtLCBGWF9CWVRFIHksIEZYX0JZVEUgaywgRlhfQllURSYgUiwgRlhfQllURSYgRywgRlhfQllURSYgQik7CitGWF9CT09MIE1ENUNvbXB1dGVJRChGWF9MUENWT0lEIGJ1ZiwgRlhfRFdPUkQgZHdTaXplLCBGWF9CWVRFIElEWzE2XSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjX2RlZi5oIGIvY29yZS9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWNfZGVmLmgKaW5kZXggNzJiMTBiZC4uMGQwOGRhNiAxMDA2NDQKLS0tIGEvY29yZS9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWNfZGVmLmgKKysrIGIvY29yZS9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWNfZGVmLmgKQEAgLTEsNzEgKzEsNzEgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0ZYX0NPREVDX0RFRl9IXw0KLSNkZWZpbmUgX0ZYX0NPREVDX0RFRl9IXw0KLWVudW0gRlhDT0RFQ19TVEFUVVMgew0KLSAgICBGWENPREVDX1NUQVRVU19FUlJPUiA9IC0xLA0KLSAgICBGWENPREVDX1NUQVRVU19GUkFNRV9SRUFEWSwNCi0gICAgRlhDT0RFQ19TVEFUVVNfRlJBTUVfVE9CRUNPTlRJTlVFLA0KLSAgICBGWENPREVDX1NUQVRVU19ERUNPREVfUkVBRFksDQotICAgIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUUsDQotICAgIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0gsDQotICAgIEZYQ09ERUNfU1RBVFVTX0VSUl9NRU1PUlksDQotICAgIEZYQ09ERUNfU1RBVFVTX0VSUl9SRUFELA0KLSAgICBGWENPREVDX1NUQVRVU19FUlJfRkxVU0gsDQotICAgIEZYQ09ERUNfU1RBVFVTX0VSUl9GT1JNQVQsDQotICAgIEZYQ09ERUNfU1RBVFVTX0VSUl9QQVJBTVMNCi19Ow0KLSNkZWZpbmUgSlAyX1NQQUNFX0lOVkFMSUQJLTENCi0jZGVmaW5lIEpQWF9TUEFDRV9JTlZBTElECS0xDQotI2RlZmluZSBKUDJfU1BBQ0VfYmlsZXZlbDEJMA0KLSNkZWZpbmUgSlAyX1NQQUNFX1lDYkNyMQkxDQotI2RlZmluZSBKUDJfU1BBQ0VfWUNiQ3IyCTMNCi0jZGVmaW5lIEpQMl9TUEFDRV9ZQ2JDcjMJNA0KLSNkZWZpbmUgSlAyX1NQQUNFX1Bob3RvWUNDCTkNCi0jZGVmaW5lIEpQMl9TUEFDRV9DTVkJCTExDQotI2RlZmluZSBKUDJfU1BBQ0VfQ01ZSwkJMTINCi0jZGVmaW5lIEpQMl9TUEFDRV9ZQ0NLCQkxMw0KLSNkZWZpbmUgSlAyX1NQQUNFX0NJRUxhYgkxNA0KLSNkZWZpbmUgSlAyX1NQQUNFX2JpbGV2ZWwyCTE1DQotI2RlZmluZSBKUDJfU1BBQ0Vfc1JHQgkJMTYNCi0jZGVmaW5lIEpQMl9TUEFDRV9zTFVNCQkxNw0KLSNkZWZpbmUgSlAyX1NQQUNFX3NZQ0MJCTE4DQotI2RlZmluZSBKUDJfU1BBQ0VfQ0lFSmFiCTE5DQotI2RlZmluZSBKUDJfU1BBQ0VfZXNSR0IJCTIwDQotI2RlZmluZSBKUDJfU1BBQ0VfUk9NTVJHQgkyMQ0KLSNkZWZpbmUgSlAyX1NQQUNFX1lQYlByNjAJMjINCi0jZGVmaW5lIEpQMl9TUEFDRV9ZUGJQcjUwCTIzDQotI2RlZmluZSBKUDJfU1BBQ0VfZXNZQ0MJCTI0DQotI2RlZmluZSBKUDJfU1BBQ0VfaWNjTFVNCTEwMA0KLSNkZWZpbmUgSlAyX1NQQUNFX2ljY1JHQgkxMDENCi0jZGVmaW5lIEljY19JTlRFTlRfUEVSQ0VQVFVBTAkJCQkwDQotI2RlZmluZSBJY2NfSU5URU5UX1JFTEFUSVZFX0NPTE9SSU1FVFJJQwkxDQotI2RlZmluZSBJY2NfSU5URU5UX1NBVFVSQVRJT04JCQkJMg0KLSNkZWZpbmUgSWNjX0lOVEVOVF9BQlNPTFVURV9DT0xPUklNRVRSSUMJMw0KLSNkZWZpbmUgSWNjX0ZPUk1BVF9ERUZBVUxUCQkJCQkwDQotI2RlZmluZSBJY2NfRk9STUFUX1NXQVAJCQkJCQkoMTw8MTApDQotI2RlZmluZSBJY2NfRkxBR1NfREVGQVVMVAkJCQkJMHgwMDAwDQotI2RlZmluZSBJY2NfRkxBR1NfQkxBQ0tQT0lOVENPTVBFTlNBVElPTgkweDIwMDANCi0jZGVmaW5lIEljY19GTEFHU19OT1dISVRFT05XSElURUZJWFVQCQkweDAwMDQNCi0jZGVmaW5lIEljY19GTEFHU19ISUdIUkVTUFJFQ0FMQwkJCTB4MDQwMA0KLSNkZWZpbmUgSWNjX0ZMQUdTX0xPV1JFU1BSRUNBTEMJCQkJMHgwODAwDQotI2RlZmluZSBJY2NfRkxBR1NfR0FNVVRDSEVDSwkJCQkweDEwMDANCi0jZGVmaW5lIEljY19GTEFHU19TT0ZUUFJPT0ZJTkcJCQkJMHg0MDAwDQotI2RlZmluZSBJY2NfUEFSQU1UWVBFX05PTkUJCQkJCTANCi0jZGVmaW5lIEljY19QQVJBTVRZUEVfQlVGRkVSCQkJCTENCi0jZGVmaW5lIEljY19QQVJBTVRZUEVfUEFSQU0JCQkJCTINCi0jZGVmaW5lIEVYSUZUQUdfVVNIT1JUX1JFU1VOSVQJCQkJMjk2DQotI2RlZmluZSBFWElGVEFHX0ZMT0FUX0RQSVgJCQkJCTI4Mg0KLSNkZWZpbmUgRVhJRlRBR19GTE9BVF9EUElZCQkJCQkyODMNCi0jZGVmaW5lIEVYSUZUQUdfVVNIT1JUX09SSUVOVEFUSU9OCQkJMjc0DQotI2RlZmluZSBFWElGVEFHX1NUUklOR19NQU5VRkFDVFVSRVIJCQkyNzENCi0jZGVmaW5lIEVYSUZUQUdfU1RSSU5HX01PRFVMRQkJCQkyNzINCi0jZGVmaW5lIEVYSUZUQUdfU1RSSU5HX1NPRlRXQVJFCQkJCTMwNQ0KLSNkZWZpbmUgRVhJRlRBR19TVFJJTkdfSUFNR0VERVNDUklQVElPTgkJMjcwDQotI2RlZmluZSBFWElGVEFHX1NUUklOR19EQVRFVElNRQkJCQkzMDYNCi0jZGVmaW5lIEVYSUZUQUdfU1RSSU5HX0NPUFlSSUdIVAkJCTMzNDMyDQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlhfQ09ERUNfREVGX0hfCisjZGVmaW5lIF9GWF9DT0RFQ19ERUZfSF8KK2VudW0gRlhDT0RFQ19TVEFUVVMgeworICAgIEZYQ09ERUNfU1RBVFVTX0VSUk9SID0gLTEsCisgICAgRlhDT0RFQ19TVEFUVVNfRlJBTUVfUkVBRFksCisgICAgRlhDT0RFQ19TVEFUVVNfRlJBTUVfVE9CRUNPTlRJTlVFLAorICAgIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9SRUFEWSwKKyAgICBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFLAorICAgIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0gsCisgICAgRlhDT0RFQ19TVEFUVVNfRVJSX01FTU9SWSwKKyAgICBGWENPREVDX1NUQVRVU19FUlJfUkVBRCwKKyAgICBGWENPREVDX1NUQVRVU19FUlJfRkxVU0gsCisgICAgRlhDT0RFQ19TVEFUVVNfRVJSX0ZPUk1BVCwKKyAgICBGWENPREVDX1NUQVRVU19FUlJfUEFSQU1TCit9OworI2RlZmluZSBKUDJfU1BBQ0VfSU5WQUxJRAktMQorI2RlZmluZSBKUFhfU1BBQ0VfSU5WQUxJRAktMQorI2RlZmluZSBKUDJfU1BBQ0VfYmlsZXZlbDEJMAorI2RlZmluZSBKUDJfU1BBQ0VfWUNiQ3IxCTEKKyNkZWZpbmUgSlAyX1NQQUNFX1lDYkNyMgkzCisjZGVmaW5lIEpQMl9TUEFDRV9ZQ2JDcjMJNAorI2RlZmluZSBKUDJfU1BBQ0VfUGhvdG9ZQ0MJOQorI2RlZmluZSBKUDJfU1BBQ0VfQ01ZCQkxMQorI2RlZmluZSBKUDJfU1BBQ0VfQ01ZSwkJMTIKKyNkZWZpbmUgSlAyX1NQQUNFX1lDQ0sJCTEzCisjZGVmaW5lIEpQMl9TUEFDRV9DSUVMYWIJMTQKKyNkZWZpbmUgSlAyX1NQQUNFX2JpbGV2ZWwyCTE1CisjZGVmaW5lIEpQMl9TUEFDRV9zUkdCCQkxNgorI2RlZmluZSBKUDJfU1BBQ0Vfc0xVTQkJMTcKKyNkZWZpbmUgSlAyX1NQQUNFX3NZQ0MJCTE4CisjZGVmaW5lIEpQMl9TUEFDRV9DSUVKYWIJMTkKKyNkZWZpbmUgSlAyX1NQQUNFX2VzUkdCCQkyMAorI2RlZmluZSBKUDJfU1BBQ0VfUk9NTVJHQgkyMQorI2RlZmluZSBKUDJfU1BBQ0VfWVBiUHI2MAkyMgorI2RlZmluZSBKUDJfU1BBQ0VfWVBiUHI1MAkyMworI2RlZmluZSBKUDJfU1BBQ0VfZXNZQ0MJCTI0CisjZGVmaW5lIEpQMl9TUEFDRV9pY2NMVU0JMTAwCisjZGVmaW5lIEpQMl9TUEFDRV9pY2NSR0IJMTAxCisjZGVmaW5lIEljY19JTlRFTlRfUEVSQ0VQVFVBTAkJCQkwCisjZGVmaW5lIEljY19JTlRFTlRfUkVMQVRJVkVfQ09MT1JJTUVUUklDCTEKKyNkZWZpbmUgSWNjX0lOVEVOVF9TQVRVUkFUSU9OCQkJCTIKKyNkZWZpbmUgSWNjX0lOVEVOVF9BQlNPTFVURV9DT0xPUklNRVRSSUMJMworI2RlZmluZSBJY2NfRk9STUFUX0RFRkFVTFQJCQkJCTAKKyNkZWZpbmUgSWNjX0ZPUk1BVF9TV0FQCQkJCQkJKDE8PDEwKQorI2RlZmluZSBJY2NfRkxBR1NfREVGQVVMVAkJCQkJMHgwMDAwCisjZGVmaW5lIEljY19GTEFHU19CTEFDS1BPSU5UQ09NUEVOU0FUSU9OCTB4MjAwMAorI2RlZmluZSBJY2NfRkxBR1NfTk9XSElURU9OV0hJVEVGSVhVUAkJMHgwMDA0CisjZGVmaW5lIEljY19GTEFHU19ISUdIUkVTUFJFQ0FMQwkJCTB4MDQwMAorI2RlZmluZSBJY2NfRkxBR1NfTE9XUkVTUFJFQ0FMQwkJCQkweDA4MDAKKyNkZWZpbmUgSWNjX0ZMQUdTX0dBTVVUQ0hFQ0sJCQkJMHgxMDAwCisjZGVmaW5lIEljY19GTEFHU19TT0ZUUFJPT0ZJTkcJCQkJMHg0MDAwCisjZGVmaW5lIEljY19QQVJBTVRZUEVfTk9ORQkJCQkJMAorI2RlZmluZSBJY2NfUEFSQU1UWVBFX0JVRkZFUgkJCQkxCisjZGVmaW5lIEljY19QQVJBTVRZUEVfUEFSQU0JCQkJCTIKKyNkZWZpbmUgRVhJRlRBR19VU0hPUlRfUkVTVU5JVAkJCQkyOTYKKyNkZWZpbmUgRVhJRlRBR19GTE9BVF9EUElYCQkJCQkyODIKKyNkZWZpbmUgRVhJRlRBR19GTE9BVF9EUElZCQkJCQkyODMKKyNkZWZpbmUgRVhJRlRBR19VU0hPUlRfT1JJRU5UQVRJT04JCQkyNzQKKyNkZWZpbmUgRVhJRlRBR19TVFJJTkdfTUFOVUZBQ1RVUkVSCQkJMjcxCisjZGVmaW5lIEVYSUZUQUdfU1RSSU5HX01PRFVMRQkJCQkyNzIKKyNkZWZpbmUgRVhJRlRBR19TVFJJTkdfU09GVFdBUkUJCQkJMzA1CisjZGVmaW5lIEVYSUZUQUdfU1RSSU5HX0lBTUdFREVTQ1JJUFRJT04JCTI3MAorI2RlZmluZSBFWElGVEFHX1NUUklOR19EQVRFVElNRQkJCQkzMDYKKyNkZWZpbmUgRVhJRlRBR19TVFJJTkdfQ09QWVJJR0hUCQkJMzM0MzIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWNfcHJvdmlkZXIuaCBiL2NvcmUvaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjX3Byb3ZpZGVyLmgKaW5kZXggNGVmNjFkOC4uYTNlZjM5NiAxMDA2NDQKLS0tIGEvY29yZS9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWNfcHJvdmlkZXIuaAorKysgYi9jb3JlL2luY2x1ZGUvZnhjb2RlYy9meF9jb2RlY19wcm92aWRlci5oCkBAIC0xLDUzICsxLDUzIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GWF9DT0RFQ19QUk9WSURFUl9IXw0KLSNkZWZpbmUgX0ZYX0NPREVDX1BST1ZJREVSX0hfDQotY2xhc3MgSUZYX0pwZWdQcm92aWRlcg0KLXsNCi1wdWJsaWM6DQotDQotICAgIHZpcnR1YWwgdm9pZAkJUmVsZWFzZSgpID0gMDsNCi0NCi0gICAgdmlydHVhbCB2b2lkKgkJQ3JlYXRlRGVjb2RlcihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBuQ29tcHMsIEZYX0JPT0wgQ29sb3JUcmFuc2Zvcm0pID0gMDsNCi0NCi0NCi0gICAgdmlydHVhbCB2b2lkCQlEZXN0cm95RGVjb2Rlcih2b2lkKiBwRGVjb2RlcikgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCURvd25TY2FsZSh2b2lkKiBwRGVjb2RlciwgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCVJld2luZCh2b2lkKiBwRGVjb2RlcikgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0xQQllURQlHZXROZXh0TGluZSh2b2lkKiBwRGVjb2RlcikgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0RXT1JECUdldFNyY09mZnNldCh2b2lkKiBwRGVjb2RlcikgPSAwOw0KLQ0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCUxvYWRJbmZvKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCYgd2lkdGgsIGludCYgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbnVtX2NvbXBvbmVudHMsIGludCYgYml0c19wZXJfY29tcG9uZW50cywgRlhfQk9PTCYgY29sb3JfdHJhbnNmb3JtLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSogaWNjX2J1Zl9wdHIgPSBOVUxMLCBGWF9EV09SRCogaWNjX2xlbmd0aCA9IE5VTEwpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQlFbmNvZGUoY29uc3QgY2xhc3MgQ0ZYX0RJQlNvdXJjZSogcFNvdXJjZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfU1RSU0laRSYgZGVzdF9zaXplLCBpbnQgcXVhbGl0eSA9IDc1LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUENCWVRFIGljY19idWYgPSBOVUxMLCBGWF9EV09SRCBpY2NfbGVuZ3RoID0gMCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQqCQlTdGFydCgpID0gMDsNCi0NCi0gICAgdmlydHVhbCB2b2lkCQlGaW5pc2godm9pZCogcENvbnRleHQpID0gMDsNCi0NCi0gICAgdmlydHVhbCB2b2lkCQlJbnB1dCh2b2lkKiBwQ29udGV4dCwgRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIGludAkJCVJlYWRIZWFkZXIodm9pZCogcENvbnRleHQsIGludCogd2lkdGgsIGludCogaGVpZ2h0LCBpbnQqIG5Db21wcykgPSAwOw0KLQ0KLQ0KLSAgICB2aXJ0dWFsIGludAkJCVN0YXJ0U2NhbmxpbmUodm9pZCogcENvbnRleHQsIGludCBkb3duX3NjYWxlKSA9IDA7DQotDQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJUmVhZFNjYW5saW5lKHZvaWQqIHBDb250ZXh0LCBGWF9MUEJZVEUgZGVzdF9idWYpID0gMDsNCi0NCi0NCi0gICAgdmlydHVhbCBGWF9EV09SRAlHZXRBdmFpbElucHV0KHZvaWQqIHBDb250ZXh0LCBGWF9MUEJZVEUqIGF2YWlsX2J1Zl9wdHIgPSBOVUxMKSA9IDA7DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9GWF9DT0RFQ19QUk9WSURFUl9IXworI2RlZmluZSBfRlhfQ09ERUNfUFJPVklERVJfSF8KK2NsYXNzIElGWF9KcGVnUHJvdmlkZXIKK3sKK3B1YmxpYzoKKworICAgIHZpcnR1YWwgdm9pZAkJUmVsZWFzZSgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCoJCUNyZWF0ZURlY29kZXIoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbkNvbXBzLCBGWF9CT09MIENvbG9yVHJhbnNmb3JtKSA9IDA7CisKKworICAgIHZpcnR1YWwgdm9pZAkJRGVzdHJveURlY29kZXIodm9pZCogcERlY29kZXIpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZAkJRG93blNjYWxlKHZvaWQqIHBEZWNvZGVyLCBpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0KSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCVJld2luZCh2b2lkKiBwRGVjb2RlcikgPSAwOworCisgICAgdmlydHVhbCBGWF9MUEJZVEUJR2V0TmV4dExpbmUodm9pZCogcERlY29kZXIpID0gMDsKKworICAgIHZpcnR1YWwgRlhfRFdPUkQJR2V0U3JjT2Zmc2V0KHZvaWQqIHBEZWNvZGVyKSA9IDA7CisKKworICAgIHZpcnR1YWwgRlhfQk9PTAkJTG9hZEluZm8oRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50JiB3aWR0aCwgaW50JiBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIG51bV9jb21wb25lbnRzLCBpbnQmIGJpdHNfcGVyX2NvbXBvbmVudHMsIEZYX0JPT0wmIGNvbG9yX3RyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSogaWNjX2J1Zl9wdHIgPSBOVUxMLCBGWF9EV09SRCogaWNjX2xlbmd0aCA9IE5VTEwpID0gMDsKKworICAgIHZpcnR1YWwgRlhfQk9PTAkJRW5jb2RlKGNvbnN0IGNsYXNzIENGWF9ESUJTb3VyY2UqIHBTb3VyY2UsIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX1NUUlNJWkUmIGRlc3Rfc2l6ZSwgaW50IHF1YWxpdHkgPSA3NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUENCWVRFIGljY19idWYgPSBOVUxMLCBGWF9EV09SRCBpY2NfbGVuZ3RoID0gMCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkKgkJU3RhcnQoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQJCUZpbmlzaCh2b2lkKiBwQ29udGV4dCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkCQlJbnB1dCh2b2lkKiBwQ29udGV4dCwgRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSkgPSAwOworCisgICAgdmlydHVhbCBpbnQJCQlSZWFkSGVhZGVyKHZvaWQqIHBDb250ZXh0LCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCwgaW50KiBuQ29tcHMpID0gMDsKKworCisgICAgdmlydHVhbCBpbnQJCQlTdGFydFNjYW5saW5lKHZvaWQqIHBDb250ZXh0LCBpbnQgZG93bl9zY2FsZSkgPSAwOworCisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCVJlYWRTY2FubGluZSh2b2lkKiBwQ29udGV4dCwgRlhfTFBCWVRFIGRlc3RfYnVmKSA9IDA7CisKKworICAgIHZpcnR1YWwgRlhfRFdPUkQJR2V0QXZhaWxJbnB1dCh2b2lkKiBwQ29udGV4dCwgRlhfTFBCWVRFKiBhdmFpbF9idWZfcHRyID0gTlVMTCkgPSAwOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9pbmNsdWRlL2Z4Y3J0L2Z4X2Jhc2ljLmggYi9jb3JlL2luY2x1ZGUvZnhjcnQvZnhfYmFzaWMuaAppbmRleCAyOWJjMjIxLi4zNzhkNmMzIDEwMDY0NAotLS0gYS9jb3JlL2luY2x1ZGUvZnhjcnQvZnhfYmFzaWMuaAorKysgYi9jb3JlL2luY2x1ZGUvZnhjcnQvZnhfYmFzaWMuaApAQCAtMSwxNjQyICsxLDE2NDIgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0ZYX0JBU0lDX0hfDQotI2RlZmluZSBfRlhfQkFTSUNfSF8NCi0jaWZuZGVmIF9GWF9TWVNURU1fSF8NCi0jaW5jbHVkZSAiZnhfc3lzdGVtLmgiDQotI2VuZGlmDQotI2lmbmRlZiBfRlhfTUVNT1JZX0hfDQotI2luY2x1ZGUgImZ4X21lbW9yeS5oIg0KLSNlbmRpZg0KLSNpZm5kZWYgX0ZYX1NUUklOR19IXw0KLSNpbmNsdWRlICJmeF9zdHJpbmcuaCINCi0jZW5kaWYNCi0jaWZuZGVmIF9GWF9TVFJFQU1fSF8NCi0jaW5jbHVkZSAiZnhfc3RyZWFtLmgiDQotI2VuZGlmDQotY2xhc3MgQ0ZYX0JpbmFyeUJ1ZiA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ0ZYX0JpbmFyeUJ1ZihJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7DQotDQotICAgIENGWF9CaW5hcnlCdWYoRlhfU1RSU0laRSBzaXplLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7DQotDQotICAgIH5DRlhfQmluYXJ5QnVmKCk7DQotDQotICAgIHZvaWQJCQkJCUNsZWFyKCk7DQotDQotICAgIHZvaWQJCQkJCUVzdGltYXRlU2l6ZShGWF9TVFJTSVpFIHNpemUsIEZYX1NUUlNJWkUgYWxsb2Nfc3RlcCA9IDApOw0KLQ0KLSAgICB2b2lkCQkJCQlBcHBlbmRCbG9jayhjb25zdCB2b2lkKiBwQnVmLCBGWF9TVFJTSVpFIHNpemUpOw0KLQ0KLSAgICB2b2lkCQkJCQlBcHBlbmRGaWxsKEZYX0JZVEUgYnl0ZSwgRlhfU1RSU0laRSBjb3VudCk7DQotDQotICAgIHZvaWQJCQkJCUFwcGVuZFN0cmluZyhGWF9CU1RSIHN0cikNCi0gICAgew0KLSAgICAgICAgQXBwZW5kQmxvY2soc3RyLkdldFB0cigpLCBzdHIuR2V0TGVuZ3RoKCkpOw0KLSAgICB9DQotDQotICAgIGlubGluZSB2b2lkCQkJCUFwcGVuZEJ5dGUoRlhfQllURSBieXRlKQ0KLSAgICB7DQotICAgICAgICBpZiAobV9BbGxvY1NpemUgPD0gbV9EYXRhU2l6ZSkgew0KLSAgICAgICAgICAgIEV4cGFuZEJ1ZigxKTsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fcEJ1ZmZlclttX0RhdGFTaXplKytdID0gYnl0ZTsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJCQlJbnNlcnRCbG9jayhGWF9TVFJTSVpFIHBvcywgY29uc3Qgdm9pZCogcEJ1ZiwgRlhfU1RSU0laRSBzaXplKTsNCi0NCi0gICAgdm9pZAkJCQkJQXR0YWNoRGF0YSh2b2lkKiBwQnVmLCBGWF9TVFJTSVpFIHNpemUpOw0KLQ0KLSAgICB2b2lkCQkJCQlDb3B5RGF0YShjb25zdCB2b2lkKiBwQnVmLCBGWF9TVFJTSVpFIHNpemUpOw0KLQ0KLSAgICB2b2lkCQkJCQlUYWtlT3ZlcihDRlhfQmluYXJ5QnVmJiBvdGhlcik7DQotDQotICAgIHZvaWQJCQkJCURlbGV0ZShpbnQgc3RhcnRfaW5kZXgsIGludCBjb3VudCk7DQotDQotICAgIEZYX0xQQllURQkJCQlHZXRCdWZmZXIoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wQnVmZmVyOw0KLSAgICB9DQotDQotICAgIEZYX1NUUlNJWkUJCQkJR2V0U2l6ZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0RhdGFTaXplOw0KLSAgICB9DQotDQotICAgIENGWF9CeXRlU3RyaW5nQwkJCUdldEJ5dGVTdHJpbmcoKSBjb25zdDsNCi0gICAgdm9pZAkJCQkJR2V0Qnl0ZVN0cmluZ0woQ0ZYX0J5dGVTdHJpbmdMICZzdHIpIGNvbnN0Ow0KLQ0KLSAgICB2b2lkCQkJCQlEZXRhY2hCdWZmZXIoKTsNCi0NCi0gICAgSUZYX0FsbG9jYXRvcioJCQltX3BBbGxvY2F0b3I7DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBGWF9TVFJTSVpFCQkJCW1fQWxsb2NTdGVwOw0KLQ0KLSAgICBGWF9MUEJZVEUJCQkJbV9wQnVmZmVyOw0KLQ0KLSAgICBGWF9TVFJTSVpFCQkJCW1fRGF0YVNpemU7DQotDQotICAgIEZYX1NUUlNJWkUJCQkJbV9BbGxvY1NpemU7DQotDQotICAgIHZvaWQJCQkJCUV4cGFuZEJ1ZihGWF9TVFJTSVpFIHNpemUpOw0KLX07DQotY2xhc3MgQ0ZYX0J5dGVUZXh0QnVmIDogcHVibGljIENGWF9CaW5hcnlCdWYNCi17DQotcHVibGljOg0KLQ0KLSAgICBDRlhfQnl0ZVRleHRCdWYoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpIDogQ0ZYX0JpbmFyeUJ1ZihwQWxsb2NhdG9yKSB7fQ0KLQ0KLSAgICB2b2lkCQkJCQlvcGVyYXRvciA9IChGWF9CU1RSIHN0cik7DQotDQotICAgIHZvaWQJCQkJCUFwcGVuZENoYXIoaW50IGNoKQ0KLSAgICB7DQotICAgICAgICBBcHBlbmRCeXRlKChGWF9CWVRFKWNoKTsNCi0gICAgfQ0KLQ0KLSAgICBDRlhfQnl0ZVRleHRCdWYmCQlvcGVyYXRvciA8PCAoaW50IGkpOw0KLQ0KLSAgICBDRlhfQnl0ZVRleHRCdWYmCQlvcGVyYXRvciA8PCAoRlhfRFdPUkQgaSk7DQotDQotICAgIENGWF9CeXRlVGV4dEJ1ZiYJCW9wZXJhdG9yIDw8IChkb3VibGUgZik7DQotDQotICAgIENGWF9CeXRlVGV4dEJ1ZiYJCW9wZXJhdG9yIDw8IChGWF9CU1RSIGxwc3opOw0KLQ0KLSAgICBDRlhfQnl0ZVRleHRCdWYmCQlvcGVyYXRvciA8PCAoY29uc3QgQ0ZYX0J5dGVUZXh0QnVmJiBidWYpOw0KLQ0KLSAgICBGWF9TVFJTSVpFCQkJCUdldExlbmd0aCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0RhdGFTaXplOw0KLSAgICB9DQotfTsNCi1jbGFzcyBDRlhfV2lkZVRleHRCdWYgOiBwdWJsaWMgQ0ZYX0JpbmFyeUJ1Zg0KLXsNCi1wdWJsaWM6DQotDQotICAgIENGWF9XaWRlVGV4dEJ1ZihJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCkgOiBDRlhfQmluYXJ5QnVmKHBBbGxvY2F0b3IpIHt9DQotDQotICAgIHZvaWQJCQkJCW9wZXJhdG9yID0gKEZYX0xQQ1dTVFIgbHBzeik7DQotDQotICAgIHZvaWQJCQkJCW9wZXJhdG9yID0gKEZYX1dTVFIgc3RyKTsNCi0NCi0gICAgdm9pZAkJCQkJQXBwZW5kQ2hhcihGWF9XQ0hBUiB3Y2gpOw0KLQ0KLSAgICBDRlhfV2lkZVRleHRCdWYmCQlvcGVyYXRvciA8PCAoaW50IGkpOw0KLQ0KLSAgICBDRlhfV2lkZVRleHRCdWYmCQlvcGVyYXRvciA8PCAoZG91YmxlIGYpOw0KLQ0KLSAgICBDRlhfV2lkZVRleHRCdWYmCQlvcGVyYXRvciA8PCAoRlhfTFBDV1NUUiBscHN6KTsNCi0NCi0gICAgQ0ZYX1dpZGVUZXh0QnVmJgkJb3BlcmF0b3IgPDwgKEZYX1dTVFIgc3RyKTsNCi0gICAgQ0ZYX1dpZGVUZXh0QnVmJgkJb3BlcmF0b3IgPDwgKGNvbnN0IENGWF9XaWRlU3RyaW5nICZzdHIpOw0KLQ0KLSAgICBDRlhfV2lkZVRleHRCdWYmCQlvcGVyYXRvciA8PCAoY29uc3QgQ0ZYX1dpZGVUZXh0QnVmJiBidWYpOw0KLQ0KLSAgICBGWF9TVFJTSVpFCQkJCUdldExlbmd0aCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0RhdGFTaXplIC8gc2l6ZW9mKEZYX1dDSEFSKTsNCi0gICAgfQ0KLQ0KLSAgICBGWF9MUFdTVFIJCQkJR2V0QnVmZmVyKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIChGWF9MUFdTVFIpbV9wQnVmZmVyOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJCURlbGV0ZShpbnQgc3RhcnRfaW5kZXgsIGludCBjb3VudCkNCi0gICAgew0KLSAgICAgICAgQ0ZYX0JpbmFyeUJ1Zjo6RGVsZXRlKHN0YXJ0X2luZGV4ICogc2l6ZW9mKEZYX1dDSEFSKSwgY291bnQgKiBzaXplb2YoRlhfV0NIQVIpKTsNCi0gICAgfQ0KLQ0KLSAgICBDRlhfV2lkZVN0cmluZ0MJCQlHZXRXaWRlU3RyaW5nKCkgY29uc3Q7DQotICAgIHZvaWQJCQkJCUdldFdpZGVTdHJpbmdMKENGWF9XaWRlU3RyaW5nTCYgd2lkZVRleHQpIGNvbnN0Ow0KLX07DQotY2xhc3MgQ0ZYX0FyY2hpdmVTYXZlciA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ0ZYX0FyY2hpdmVTYXZlcihJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCkgOiBtX1NhdmluZ0J1ZihwQWxsb2NhdG9yKSwgbV9wU3RyZWFtKE5VTEwpIHt9DQotDQotICAgIENGWF9BcmNoaXZlU2F2ZXImCQlvcGVyYXRvciA8PCAoRlhfQllURSBpKTsNCi0NCi0gICAgQ0ZYX0FyY2hpdmVTYXZlciYJCW9wZXJhdG9yIDw8IChpbnQgaSk7DQotDQotICAgIENGWF9BcmNoaXZlU2F2ZXImCQlvcGVyYXRvciA8PCAoRlhfRFdPUkQgaSk7DQotDQotICAgIENGWF9BcmNoaXZlU2F2ZXImCQlvcGVyYXRvciA8PCAoRlhfRkxPQVQgaSk7DQotDQotICAgIENGWF9BcmNoaXZlU2F2ZXImCQlvcGVyYXRvciA8PCAoZG91YmxlIGkpOw0KLQ0KLSAgICBDRlhfQXJjaGl2ZVNhdmVyJgkJb3BlcmF0b3IgPDwgKEZYX0JTVFIgYnN0cik7DQotDQotICAgIENGWF9BcmNoaXZlU2F2ZXImCQlvcGVyYXRvciA8PCAoRlhfTFBDV1NUUiBic3RyKTsNCi0NCi0gICAgQ0ZYX0FyY2hpdmVTYXZlciYJCW9wZXJhdG9yIDw8IChjb25zdCBDRlhfV2lkZVN0cmluZyYgd3N0cik7DQotDQotICAgIHZvaWQJCQkJCVdyaXRlKGNvbnN0IHZvaWQqIHBEYXRhLCBGWF9TVFJTSVpFIGR3U2l6ZSk7DQotDQotICAgIEZYX0lOVFBUUgkJCQlHZXRMZW5ndGgoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9TYXZpbmdCdWYuR2V0U2l6ZSgpOw0KLSAgICB9DQotDQotICAgIEZYX0xQQ0JZVEUJCQkJR2V0QnVmZmVyKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fU2F2aW5nQnVmLkdldEJ1ZmZlcigpOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJCVNldFN0cmVhbShJRlhfRmlsZVN0cmVhbSogcFN0cmVhbSkNCi0gICAgew0KLSAgICAgICAgbV9wU3RyZWFtID0gcFN0cmVhbTsNCi0gICAgfQ0KLXByb3RlY3RlZDoNCi0NCi0gICAgQ0ZYX0JpbmFyeUJ1ZgkJCW1fU2F2aW5nQnVmOw0KLQ0KLSAgICBJRlhfRmlsZVN0cmVhbSoJCQltX3BTdHJlYW07DQotfTsNCi1jbGFzcyBDRlhfQXJjaGl2ZUxvYWRlciA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ0ZYX0FyY2hpdmVMb2FkZXIoRlhfTFBDQllURSBwRGF0YSwgRlhfRFdPUkQgZHdTaXplKTsNCi0NCi0gICAgQ0ZYX0FyY2hpdmVMb2FkZXImCQlvcGVyYXRvciA+PiAoRlhfQllURSYgaSk7DQotDQotICAgIENGWF9BcmNoaXZlTG9hZGVyJgkJb3BlcmF0b3IgPj4gKGludCYgaSk7DQotDQotICAgIENGWF9BcmNoaXZlTG9hZGVyJgkJb3BlcmF0b3IgPj4gKEZYX0RXT1JEJiBpKTsNCi0NCi0gICAgQ0ZYX0FyY2hpdmVMb2FkZXImCQlvcGVyYXRvciA+PiAoRlhfRkxPQVQmIGkpOw0KLQ0KLSAgICBDRlhfQXJjaGl2ZUxvYWRlciYJCW9wZXJhdG9yID4+IChkb3VibGUmIGkpOw0KLQ0KLSAgICBDRlhfQXJjaGl2ZUxvYWRlciYJCW9wZXJhdG9yID4+IChDRlhfQnl0ZVN0cmluZyYgYnN0cik7DQotDQotICAgIENGWF9BcmNoaXZlTG9hZGVyJgkJb3BlcmF0b3IgPj4gKENGWF9XaWRlU3RyaW5nJiB3c3RyKTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJSXNFT0YoKTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJUmVhZCh2b2lkKiBwQnVmLCBGWF9EV09SRCBkd1NpemUpOw0KLXByb3RlY3RlZDoNCi0NCi0gICAgRlhfRFdPUkQJCQkJbV9Mb2FkaW5nUG9zOw0KLQ0KLSAgICBGWF9MUENCWVRFCQkJCW1fcExvYWRpbmdCdWY7DQotDQotICAgIEZYX0RXT1JECQkJCW1fTG9hZGluZ1NpemU7DQotfTsNCi1jbGFzcyBJRlhfQnVmZmVyQXJjaGl2ZQ0KLXsNCi1wdWJsaWM6DQotDQotICAgIElGWF9CdWZmZXJBcmNoaXZlKEZYX1NUUlNJWkUgc2l6ZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpOw0KLQ0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQlDbGVhcigpOw0KLQ0KLQ0KLSAgICBGWF9CT09MCQkJCQlGbHVzaCgpOw0KLQ0KLQ0KLSAgICBGWF9JTlQzMgkJCQlBcHBlbmRCbG9jayhjb25zdCB2b2lkKiBwQnVmLCBzaXplX3Qgc2l6ZSk7DQotDQotICAgIEZYX0lOVDMyCQkJCUFwcGVuZEJ5dGUoRlhfQllURSBieXRlKTsNCi0NCi0gICAgRlhfSU5UMzIJCQkJQXBwZW5kRFdvcmQoRlhfRFdPUkQgaSk7DQotDQotDQotICAgIEZYX0lOVDMyCQkJCUFwcGVuZFN0cmluZyhGWF9CU1RSIGxwc3opOw0KLQ0KLXByb3RlY3RlZDoNCi0NCi0gICAgdmlydHVhbAlGWF9CT09MCQkJRG9Xb3JrKGNvbnN0IHZvaWQqIHBCdWYsIHNpemVfdCBzaXplKSA9IDA7DQotDQotDQotICAgIElGWF9BbGxvY2F0b3IqCQkJbV9wQWxsb2NhdG9yOw0KLQ0KLSAgICBGWF9TVFJTSVpFCQkJCW1fQnVmU2l6ZTsNCi0NCi0gICAgRlhfTFBCWVRFCQkJCW1fcEJ1ZmZlcjsNCi0NCi0gICAgRlhfU1RSU0laRQkJCQltX0xlbmd0aDsNCi19Ow0KLWNsYXNzIENGWF9GaWxlQnVmZmVyQXJjaGl2ZSA6IHB1YmxpYyBJRlhfQnVmZmVyQXJjaGl2ZSwgcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDRlhfRmlsZUJ1ZmZlckFyY2hpdmUoRlhfU1RSU0laRSBzaXplID0gMzI3NjgsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsNCi0gICAgfkNGWF9GaWxlQnVmZmVyQXJjaGl2ZSgpOw0KLSAgICB2aXJ0dWFsIHZvaWQJCQlDbGVhcigpOw0KLQ0KLSAgICBGWF9CT09MCQkJCQlBdHRhY2hGaWxlKElGWF9TdHJlYW1Xcml0ZSAqcEZpbGUsIEZYX0JPT0wgYlRha2VvdmVyID0gRkFMU0UpOw0KLQ0KLSAgICBGWF9CT09MCQkJCQlBdHRhY2hGaWxlKEZYX0xQQ1dTVFIgZmlsZW5hbWUpOw0KLQ0KLSAgICBGWF9CT09MCQkJCQlBdHRhY2hGaWxlKEZYX0xQQ1NUUiBmaWxlbmFtZSk7DQotcHJpdmF0ZToNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJRG9Xb3JrKGNvbnN0IHZvaWQqIHBCdWYsIHNpemVfdCBzaXplKTsNCi0NCi0gICAgSUZYX1N0cmVhbVdyaXRlCQkJKm1fcEZpbGU7DQotDQotICAgIEZYX0JPT0wJCQkJCW1fYlRha2VvdmVyOw0KLX07DQotc3RydWN0IENGWF9DaGFyTWFwIHsNCi0NCi0gICAgc3RhdGljIENGWF9DaGFyTWFwKgkJR2V0RGVmYXVsdE1hcHBlcihGWF9JTlQzMiBjb2RlcGFnZSA9IDApOw0KLQ0KLQ0KLSAgICBDRlhfV2lkZVN0cmluZwkoKm1fR2V0V2lkZVN0cmluZykoQ0ZYX0NoYXJNYXAqIHBNYXAsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBic3RyKTsNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcJKCptX0dldEJ5dGVTdHJpbmcpKENGWF9DaGFyTWFwKiBwTWFwLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgd3N0cik7DQotDQotICAgIEZYX0lOVDMyCQkoKm1fR2V0Q29kZVBhZ2UpKCk7DQotfTsNCi1jbGFzcyBDRlhfVVRGOERlY29kZXINCi17DQotcHVibGljOg0KLQ0KLSAgICBDRlhfVVRGOERlY29kZXIoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpIDogbV9CdWZmZXIocEFsbG9jYXRvcikNCi0gICAgew0KLSAgICAgICAgbV9QZW5kaW5nQnl0ZXMgPSAwOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQlDbGVhcigpOw0KLQ0KLSAgICB2b2lkCQkJSW5wdXQoRlhfQllURSBieXRlKTsNCi0NCi0gICAgdm9pZAkJCUFwcGVuZENoYXIoRlhfRFdPUkQgY2gpOw0KLQ0KLSAgICB2b2lkCQkJQ2xlYXJTdGF0dXMoKQ0KLSAgICB7DQotICAgICAgICBtX1BlbmRpbmdCeXRlcyA9IDA7DQotICAgIH0NCi0NCi0gICAgQ0ZYX1dpZGVTdHJpbmdDCUdldFJlc3VsdCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0J1ZmZlci5HZXRXaWRlU3RyaW5nKCk7DQotICAgIH0NCi0gICAgdm9pZAkJCUdldFJlc3VsdChDRlhfV2lkZVN0cmluZ0wgJnJlc3VsdCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgbV9CdWZmZXIuR2V0V2lkZVN0cmluZ0wocmVzdWx0KTsNCi0gICAgfQ0KLXByb3RlY3RlZDoNCi0NCi0gICAgaW50CQkJCW1fUGVuZGluZ0J5dGVzOw0KLQ0KLSAgICBGWF9EV09SRAkJbV9QZW5kaW5nQ2hhcjsNCi0NCi0gICAgQ0ZYX1dpZGVUZXh0QnVmCW1fQnVmZmVyOw0KLX07DQotY2xhc3MgQ0ZYX1VURjhFbmNvZGVyDQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ0ZYX1VURjhFbmNvZGVyKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKSA6IG1fQnVmZmVyKHBBbGxvY2F0b3IpDQotICAgIHsNCi0gICAgICAgIG1fVVRGMTZGaXJzdCA9IDA7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCUlucHV0KEZYX1dDSEFSIHVuaWNvZGUpOw0KLQ0KLSAgICB2b2lkCQkJQXBwZW5kU3RyKEZYX0JTVFIgc3RyKQ0KLSAgICB7DQotICAgICAgICBtX1VURjE2Rmlyc3QgPSAwOw0KLSAgICAgICAgbV9CdWZmZXIgPDwgc3RyOw0KLSAgICB9DQotDQotICAgIENGWF9CeXRlU3RyaW5nQwlHZXRSZXN1bHQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9CdWZmZXIuR2V0Qnl0ZVN0cmluZygpOw0KLSAgICB9DQotICAgIHZvaWQJCQlHZXRSZXN1bHQoQ0ZYX0J5dGVTdHJpbmdMICZyZXN1bHQpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIG1fQnVmZmVyLkdldEJ5dGVTdHJpbmdMKHJlc3VsdCk7DQotICAgIH0NCi1wcm90ZWN0ZWQ6DQotDQotICAgIENGWF9CeXRlVGV4dEJ1ZgltX0J1ZmZlcjsNCi0NCi0gICAgRlhfRFdPUkQJCW1fVVRGMTZGaXJzdDsNCi19Ow0KLUNGWF9CeXRlU3RyaW5nIEZYX1VybEVuY29kZShjb25zdCBDRlhfV2lkZVN0cmluZyYgd3NVcmwpOw0KLUNGWF9XaWRlU3RyaW5nIEZYX1VybERlY29kZShjb25zdCBDRlhfQnl0ZVN0cmluZyYgYnNVcmwpOw0KLUNGWF9CeXRlU3RyaW5nIEZYX0VuY29kZVVSSShjb25zdCBDRlhfV2lkZVN0cmluZyYgd3NVUkkpOw0KLUNGWF9XaWRlU3RyaW5nIEZYX0RlY29kZVVSSShjb25zdCBDRlhfQnl0ZVN0cmluZyYgYnNVUkkpOw0KLWNsYXNzIENGWF9CYXNpY0FycmF5IDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBJRlhfQWxsb2NhdG9yKgltX3BBbGxvY2F0b3I7DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBDRlhfQmFzaWNBcnJheShpbnQgdW5pdF9zaXplLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7DQotDQotICAgIH5DRlhfQmFzaWNBcnJheSgpOw0KLQ0KLSAgICBGWF9CT09MCQkJU2V0U2l6ZShpbnQgbk5ld1NpemUsIGludCBuR3Jvd0J5KTsNCi0NCi0gICAgRlhfQk9PTAkJCUFwcGVuZChjb25zdCBDRlhfQmFzaWNBcnJheSYgc3JjKTsNCi0NCi0gICAgRlhfQk9PTAkJCUNvcHkoY29uc3QgQ0ZYX0Jhc2ljQXJyYXkmIHNyYyk7DQotDQotICAgIEZYX0xQQllURQkJSW5zZXJ0U3BhY2VBdChpbnQgbkluZGV4LCBpbnQgbkNvdW50KTsNCi0NCi0gICAgRlhfQk9PTAkJCVJlbW92ZUF0KGludCBuSW5kZXgsIGludCBuQ291bnQpOw0KLQ0KLSAgICBGWF9CT09MCQkJSW5zZXJ0QXQoaW50IG5TdGFydEluZGV4LCBjb25zdCBDRlhfQmFzaWNBcnJheSogcE5ld0FycmF5KTsNCi0NCi0gICAgY29uc3Qgdm9pZCoJCUdldERhdGFQdHIoaW50IGluZGV4KSBjb25zdDsNCi1wcm90ZWN0ZWQ6DQotDQotICAgIEZYX0xQQllURQkJbV9wRGF0YTsNCi0NCi0gICAgaW50CQkJCW1fblNpemU7DQotDQotICAgIGludAkJCQltX25NYXhTaXplOw0KLQ0KLSAgICBpbnQJCQkJbV9uR3Jvd0J5Ow0KLQ0KLSAgICBpbnQJCQkJbV9uVW5pdFNpemU7DQotfTsNCi10ZW1wbGF0ZTxjbGFzcyBUWVBFPg0KLWNsYXNzIENGWF9BcnJheVRlbXBsYXRlIDogcHVibGljIENGWF9CYXNpY0FycmF5DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ0ZYX0FycmF5VGVtcGxhdGUoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpIDogQ0ZYX0Jhc2ljQXJyYXkoc2l6ZW9mKFRZUEUpLCBwQWxsb2NhdG9yKSB7fQ0KLQ0KLSAgICBpbnQJCQlHZXRTaXplKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fblNpemU7DQotICAgIH0NCi0NCi0gICAgaW50CQkJR2V0VXBwZXJCb3VuZCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX25TaXplIC0gMTsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MCQlTZXRTaXplKGludCBuTmV3U2l6ZSwgaW50IG5Hcm93QnkgPSAtMSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIENGWF9CYXNpY0FycmF5OjpTZXRTaXplKG5OZXdTaXplLCBuR3Jvd0J5KTsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQlSZW1vdmVBbGwoKQ0KLSAgICB7DQotICAgICAgICBTZXRTaXplKDAsIC0xKTsNCi0gICAgfQ0KLQ0KLSAgICBjb25zdCBUWVBFCUdldEF0KGludCBuSW5kZXgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIGlmIChuSW5kZXggPCAwIHx8IG5JbmRleCA+PSBtX25TaXplKSB7DQotICAgICAgICAgICAgcmV0dXJuIChjb25zdCBUWVBFJikoKih2b2xhdGlsZSBjb25zdCBUWVBFKilOVUxMKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiAoKGNvbnN0IFRZUEUqKW1fcERhdGEpW25JbmRleF07DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTAkJU2V0QXQoaW50IG5JbmRleCwgVFlQRSBuZXdFbGVtZW50KQ0KLSAgICB7DQotICAgICAgICBpZiAobkluZGV4IDwgMCB8fCBuSW5kZXggPj0gbV9uU2l6ZSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgICgoVFlQRSopbV9wRGF0YSlbbkluZGV4XSA9IG5ld0VsZW1lbnQ7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLQ0KLSAgICBUWVBFJgkJRWxlbWVudEF0KGludCBuSW5kZXgpDQotICAgIHsNCi0gICAgICAgIGlmIChuSW5kZXggPCAwIHx8IG5JbmRleCA+PSBtX25TaXplKSB7DQotICAgICAgICAgICAgcmV0dXJuICooVFlQRSopTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiAoKFRZUEUqKW1fcERhdGEpW25JbmRleF07DQotICAgIH0NCi0NCi0gICAgY29uc3QgVFlQRSoJR2V0RGF0YSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiAoY29uc3QgVFlQRSopbV9wRGF0YTsNCi0gICAgfQ0KLQ0KLSAgICBUWVBFKgkJR2V0RGF0YSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAoVFlQRSopbV9wRGF0YTsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MCQlTZXRBdEdyb3coaW50IG5JbmRleCwgVFlQRSBuZXdFbGVtZW50KQ0KLSAgICB7DQotICAgICAgICBpZiAobkluZGV4IDwgMCkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChuSW5kZXggPj0gbV9uU2l6ZSkNCi0gICAgICAgICAgICBpZiAoIVNldFNpemUobkluZGV4ICsgMSwgLTEpKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAoKFRZUEUqKW1fcERhdGEpW25JbmRleF0gPSBuZXdFbGVtZW50Ow0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTAkJQWRkKFRZUEUgbmV3RWxlbWVudCkNCi0gICAgew0KLSAgICAgICAgaWYgKG1fblNpemUgPCBtX25NYXhTaXplKSB7DQotICAgICAgICAgICAgbV9uU2l6ZSArKzsNCi0gICAgICAgIH0gZWxzZSBpZiAoIVNldFNpemUobV9uU2l6ZSArIDEsIC0xKSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgICgoVFlQRSopbV9wRGF0YSlbbV9uU2l6ZSAtIDFdID0gbmV3RWxlbWVudDsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wJCUFwcGVuZChjb25zdCBDRlhfQXJyYXlUZW1wbGF0ZSYgc3JjKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gQ0ZYX0Jhc2ljQXJyYXk6OkFwcGVuZChzcmMpOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wJCUNvcHkoY29uc3QgQ0ZYX0FycmF5VGVtcGxhdGUmIHNyYykNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIENGWF9CYXNpY0FycmF5OjpDb3B5KHNyYyk7DQotICAgIH0NCi0NCi0gICAgVFlQRSoJCUdldERhdGFQdHIoaW50IGluZGV4KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gKFRZUEUqKUNGWF9CYXNpY0FycmF5OjpHZXREYXRhUHRyKGluZGV4KTsNCi0gICAgfQ0KLQ0KLSAgICBUWVBFKgkJQWRkU3BhY2UoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gKFRZUEUqKUNGWF9CYXNpY0FycmF5OjpJbnNlcnRTcGFjZUF0KG1fblNpemUsIDEpOw0KLSAgICB9DQotDQotICAgIFRZUEUqCQlJbnNlcnRTcGFjZUF0KGludCBuSW5kZXgsIGludCBuQ291bnQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAoVFlQRSopQ0ZYX0Jhc2ljQXJyYXk6Okluc2VydFNwYWNlQXQobkluZGV4LCBuQ291bnQpOw0KLSAgICB9DQotDQotICAgIGNvbnN0IFRZUEUJb3BlcmF0b3JbXShpbnQgbkluZGV4KSBjb25zdA0KLSAgICB7DQotICAgICAgICBpZiAobkluZGV4IDwgMCB8fCBuSW5kZXggPj0gbV9uU2l6ZSkgew0KLSAgICAgICAgICAgICoodm9sYXRpbGUgY2hhciopMCA9ICdcMCc7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gKChjb25zdCBUWVBFKiltX3BEYXRhKVtuSW5kZXhdOw0KLSAgICB9DQotDQotICAgIFRZUEUmCQlvcGVyYXRvcltdKGludCBuSW5kZXgpDQotICAgIHsNCi0gICAgICAgIGlmIChuSW5kZXggPCAwIHx8IG5JbmRleCA+PSBtX25TaXplKSB7DQotICAgICAgICAgICAgKih2b2xhdGlsZSBjaGFyKikwID0gJ1wwJzsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiAoKFRZUEUqKW1fcERhdGEpW25JbmRleF07DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTAkJSW5zZXJ0QXQoaW50IG5JbmRleCwgVFlQRSBuZXdFbGVtZW50LCBpbnQgbkNvdW50ID0gMSkNCi0gICAgew0KLSAgICAgICAgaWYgKCFJbnNlcnRTcGFjZUF0KG5JbmRleCwgbkNvdW50KSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIHdoaWxlIChuQ291bnQtLSkgew0KLSAgICAgICAgICAgICgoVFlQRSopbV9wRGF0YSlbbkluZGV4KytdID0gbmV3RWxlbWVudDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wJCVJlbW92ZUF0KGludCBuSW5kZXgsIGludCBuQ291bnQgPSAxKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gQ0ZYX0Jhc2ljQXJyYXk6OlJlbW92ZUF0KG5JbmRleCwgbkNvdW50KTsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MCQlJbnNlcnRBdChpbnQgblN0YXJ0SW5kZXgsIGNvbnN0IENGWF9CYXNpY0FycmF5KiBwTmV3QXJyYXkpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBDRlhfQmFzaWNBcnJheTo6SW5zZXJ0QXQoblN0YXJ0SW5kZXgsIHBOZXdBcnJheSk7DQotICAgIH0NCi0NCi0gICAgaW50CQkJRmluZChUWVBFIGRhdGEsIGludCBpU3RhcnQgPSAwKSBjb25zdA0KLSAgICB7DQotICAgICAgICBpZiAoaVN0YXJ0IDwgMCkgew0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGZvciAoOyBpU3RhcnQgPCAoaW50KW1fblNpemU7IGlTdGFydCArKykNCi0gICAgICAgICAgICBpZiAoKChUWVBFKiltX3BEYXRhKVtpU3RhcnRdID09IGRhdGEpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIGlTdGFydDsNCi0gICAgICAgICAgICB9DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi19Ow0KLXR5cGVkZWYgQ0ZYX0FycmF5VGVtcGxhdGU8RlhfQllURT4JCUNGWF9CeXRlQXJyYXk7DQotdHlwZWRlZiBDRlhfQXJyYXlUZW1wbGF0ZTxGWF9XT1JEPgkJQ0ZYX1dvcmRBcnJheTsNCi10eXBlZGVmIENGWF9BcnJheVRlbXBsYXRlPEZYX0RXT1JEPgkJQ0ZYX0RXb3JkQXJyYXk7DQotdHlwZWRlZiBDRlhfQXJyYXlUZW1wbGF0ZTx2b2lkKj4JCUNGWF9QdHJBcnJheTsNCi10eXBlZGVmIENGWF9BcnJheVRlbXBsYXRlPEZYX0ZJTEVTSVpFPglDRlhfRmlsZVNpemVBcnJheTsNCi10eXBlZGVmIENGWF9BcnJheVRlbXBsYXRlPEZYX0ZMT0FUPgkJQ0ZYX0Zsb2F0QXJyYXk7DQotdHlwZWRlZiBDRlhfQXJyYXlUZW1wbGF0ZTxGWF9JTlQzMj4JCUNGWF9JbnQzMkFycmF5Ow0KLXRlbXBsYXRlIDxjbGFzcyBPYmplY3RDbGFzcz4NCi1jbGFzcyBDRlhfT2JqZWN0QXJyYXkgOiBwdWJsaWMgQ0ZYX0Jhc2ljQXJyYXkNCi17DQotcHVibGljOg0KLQ0KLSAgICBDRlhfT2JqZWN0QXJyYXkoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpIDogQ0ZYX0Jhc2ljQXJyYXkoc2l6ZW9mKE9iamVjdENsYXNzKSwgcEFsbG9jYXRvcikge30NCi0NCi0gICAgfkNGWF9PYmplY3RBcnJheSgpDQotICAgIHsNCi0gICAgICAgIFJlbW92ZUFsbCgpOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQlBZGQoY29uc3QgT2JqZWN0Q2xhc3MmIGRhdGEpDQotICAgIHsNCi0gICAgICAgIG5ldyAoKHZvaWQqKUluc2VydFNwYWNlQXQobV9uU2l6ZSwgMSkpIE9iamVjdENsYXNzKGRhdGEpOw0KLSAgICB9DQotDQotICAgIE9iamVjdENsYXNzJglBZGQoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gKihPYmplY3RDbGFzcyopIG5ldyAoKHZvaWQqKUluc2VydFNwYWNlQXQobV9uU2l6ZSwgMSkpIE9iamVjdENsYXNzKCk7DQotICAgIH0NCi0NCi0gICAgdm9pZCoJCQlBZGRTcGFjZSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBJbnNlcnRTcGFjZUF0KG1fblNpemUsIDEpOw0KLSAgICB9DQotDQotICAgIEZYX0lOVDMyCQlBcHBlbmQoY29uc3QgQ0ZYX09iamVjdEFycmF5JiBzcmMsIEZYX0lOVDMyIG5TdGFydCA9IDAsIEZYX0lOVDMyIG5Db3VudCA9IC0xKQ0KLSAgICB7DQotICAgICAgICBpZiAobkNvdW50ID09IDApIHsNCi0gICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0lOVDMyIG5TaXplID0gc3JjLkdldFNpemUoKTsNCi0gICAgICAgIGlmICghblNpemUpIHsNCi0gICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYU1lTX2Fzc2VydChuU3RhcnQgPiAtMSAmJiBuU3RhcnQgPCBuU2l6ZSk7DQotICAgICAgICBpZiAobkNvdW50IDwgMCkgew0KLSAgICAgICAgICAgIG5Db3VudCA9IG5TaXplOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG5TdGFydCArIG5Db3VudCA+IG5TaXplKSB7DQotICAgICAgICAgICAgbkNvdW50ID0gblNpemUgLSBuU3RhcnQ7DQotICAgICAgICB9DQotICAgICAgICBpZiAobkNvdW50IDwgMSkgew0KLSAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgblNpemUgPSBtX25TaXplOw0KLSAgICAgICAgSW5zZXJ0U3BhY2VBdChtX25TaXplLCBuQ291bnQpOw0KLSAgICAgICAgT2JqZWN0Q2xhc3MqIHBTdGFydE9iaiA9IChPYmplY3RDbGFzcyopR2V0RGF0YVB0cihuU2l6ZSk7DQotICAgICAgICBuU2l6ZSA9IG5TdGFydCArIG5Db3VudDsNCi0gICAgICAgIGZvciAoRlhfSU5UMzIgaSA9IG5TdGFydDsgaSA8IG5TaXplOyBpICsrLCBwU3RhcnRPYmorKykgew0KLSAgICAgICAgICAgIG5ldyAoKHZvaWQqKXBTdGFydE9iaikgT2JqZWN0Q2xhc3Moc3JjW2ldKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBuQ291bnQ7DQotICAgIH0NCi0NCi0gICAgRlhfSU5UMzIJCUNvcHkoY29uc3QgQ0ZYX09iamVjdEFycmF5JiBzcmMsIEZYX0lOVDMyIG5TdGFydCA9IDAsIEZYX0lOVDMyIG5Db3VudCA9IC0xKQ0KLSAgICB7DQotICAgICAgICBpZiAobkNvdW50ID09IDApIHsNCi0gICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0lOVDMyIG5TaXplID0gc3JjLkdldFNpemUoKTsNCi0gICAgICAgIGlmICghblNpemUpIHsNCi0gICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYU1lTX2Fzc2VydChuU3RhcnQgPiAtMSAmJiBuU3RhcnQgPCBuU2l6ZSk7DQotICAgICAgICBpZiAobkNvdW50IDwgMCkgew0KLSAgICAgICAgICAgIG5Db3VudCA9IG5TaXplOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG5TdGFydCArIG5Db3VudCA+IG5TaXplKSB7DQotICAgICAgICAgICAgbkNvdW50ID0gblNpemUgLSBuU3RhcnQ7DQotICAgICAgICB9DQotICAgICAgICBpZiAobkNvdW50IDwgMSkgew0KLSAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgUmVtb3ZlQWxsKCk7DQotICAgICAgICBTZXRTaXplKG5Db3VudCwgLTEpOw0KLSAgICAgICAgT2JqZWN0Q2xhc3MqIHBTdGFydE9iaiA9IChPYmplY3RDbGFzcyopbV9wRGF0YTsNCi0gICAgICAgIG5TaXplID0gblN0YXJ0ICsgbkNvdW50Ow0KLSAgICAgICAgZm9yIChGWF9JTlQzMiBpID0gblN0YXJ0OyBpIDwgblNpemU7IGkgKyssIHBTdGFydE9iaisrKSB7DQotICAgICAgICAgICAgbmV3ICgodm9pZCopcFN0YXJ0T2JqKSBPYmplY3RDbGFzcyhzcmNbaV0pOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIG5Db3VudDsNCi0gICAgfQ0KLQ0KLSAgICBpbnQJCQkJR2V0U2l6ZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX25TaXplOw0KLSAgICB9DQotDQotICAgIE9iamVjdENsYXNzJglvcGVyYXRvcltdIChpbnQgaW5kZXgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIEZYU1lTX2Fzc2VydChpbmRleCA8IG1fblNpemUpOw0KLSAgICAgICAgcmV0dXJuICooT2JqZWN0Q2xhc3MqKUNGWF9CYXNpY0FycmF5OjpHZXREYXRhUHRyKGluZGV4KTsNCi0gICAgfQ0KLQ0KLSAgICBPYmplY3RDbGFzcyoJR2V0RGF0YVB0cihpbnQgaW5kZXgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAoT2JqZWN0Q2xhc3MqKUNGWF9CYXNpY0FycmF5OjpHZXREYXRhUHRyKGluZGV4KTsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJUmVtb3ZlQXQoaW50IGluZGV4KQ0KLSAgICB7DQotICAgICAgICBGWFNZU19hc3NlcnQoaW5kZXggPCBtX25TaXplKTsNCi0gICAgICAgICgoT2JqZWN0Q2xhc3MqKUdldERhdGFQdHIoaW5kZXgpKS0+fk9iamVjdENsYXNzKCk7DQotICAgICAgICBDRlhfQmFzaWNBcnJheTo6UmVtb3ZlQXQoaW5kZXgsIDEpOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQlSZW1vdmVBbGwoKQ0KLSAgICB7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fblNpemU7IGkgKyspIHsNCi0gICAgICAgICAgICAoKE9iamVjdENsYXNzKilHZXREYXRhUHRyKGkpKS0+fk9iamVjdENsYXNzKCk7DQotICAgICAgICB9DQotICAgICAgICBDRlhfQmFzaWNBcnJheTo6U2V0U2l6ZSgwLCAtMSk7DQotICAgIH0NCi19Ow0KLXR5cGVkZWYgQ0ZYX09iamVjdEFycmF5PENGWF9CeXRlU3RyaW5nPiBDRlhfQnl0ZVN0cmluZ0FycmF5Ow0KLXR5cGVkZWYgQ0ZYX09iamVjdEFycmF5PENGWF9XaWRlU3RyaW5nPiBDRlhfV2lkZVN0cmluZ0FycmF5Ow0KLWNsYXNzIENGWF9CYXNlU2VnbWVudGVkQXJyYXkgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENGWF9CYXNlU2VnbWVudGVkQXJyYXkoaW50IHVuaXRfc2l6ZSA9IDEsIGludCBzZWdtZW50X3VuaXRzID0gNTEyLCBpbnQgaW5kZXhfc2l6ZSA9IDgsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsNCi0NCi0gICAgfkNGWF9CYXNlU2VnbWVudGVkQXJyYXkoKTsNCi0NCi0gICAgdm9pZAlTZXRVbml0U2l6ZShpbnQgdW5pdF9zaXplLCBpbnQgc2VnbWVudF91bml0cywgaW50IGluZGV4X3NpemUgPSA4KTsNCi0NCi0gICAgdm9pZCoJQWRkKCk7DQotDQotICAgIHZvaWQqCUdldEF0KGludCBpbmRleCkgY29uc3Q7DQotDQotICAgIHZvaWQJUmVtb3ZlQWxsKCk7DQotDQotICAgIHZvaWQJRGVsZXRlKGludCBpbmRleCwgaW50IGNvdW50ID0gMSk7DQotDQotICAgIGludAkJR2V0U2l6ZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0RhdGFTaXplOw0KLSAgICB9DQotDQotICAgIGludAkJR2V0U2VnbWVudFNpemUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9TZWdtZW50U2l6ZTsNCi0gICAgfQ0KLQ0KLSAgICBpbnQJCUdldFVuaXRTaXplKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fVW5pdFNpemU7DQotICAgIH0NCi0NCi0gICAgdm9pZCoJSXRlcmF0ZShGWF9CT09MICgqY2FsbGJhY2spKHZvaWQqIHBhcmFtLCB2b2lkKiBwRGF0YSksIHZvaWQqIHBhcmFtKSBjb25zdDsNCi0NCi0gICAgSUZYX0FsbG9jYXRvcioJbV9wQWxsb2NhdG9yOw0KLXByaXZhdGU6DQotDQotICAgIGludAkJCQltX1VuaXRTaXplOw0KLQ0KLSAgICBzaG9ydAkJCW1fU2VnbWVudFNpemU7DQotDQotICAgIEZYX0JZVEUJCQltX0luZGV4U2l6ZTsNCi0NCi0gICAgRlhfQllURQkJCW1fSW5kZXhEZXB0aDsNCi0NCi0gICAgaW50CQkJCW1fRGF0YVNpemU7DQotDQotICAgIHZvaWQqCQkJbV9wSW5kZXg7DQotICAgIHZvaWQqKglHZXRJbmRleChpbnQgc2VnX2luZGV4KSBjb25zdDsNCi0gICAgdm9pZCoJSXRlcmF0ZUluZGV4KGludCBsZXZlbCwgaW50JiBzdGFydCwgdm9pZCoqIHBJbmRleCwgRlhfQk9PTCAoKmNhbGxiYWNrKSh2b2lkKiBwYXJhbSwgdm9pZCogcERhdGEpLCB2b2lkKiBwYXJhbSkgY29uc3Q7DQotICAgIHZvaWQqCUl0ZXJhdGVTZWdtZW50KEZYX0xQQ0JZVEUgcFNlZ21lbnQsIGludCBjb3VudCwgRlhfQk9PTCAoKmNhbGxiYWNrKSh2b2lkKiBwYXJhbSwgdm9pZCogcERhdGEpLCB2b2lkKiBwYXJhbSkgY29uc3Q7DQotfTsNCi10ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudFR5cGU+DQotY2xhc3MgQ0ZYX1NlZ21lbnRlZEFycmF5IDogcHVibGljIENGWF9CYXNlU2VnbWVudGVkQXJyYXkNCi17DQotcHVibGljOg0KLQ0KLSAgICBDRlhfU2VnbWVudGVkQXJyYXkoaW50IHNlZ21lbnRfdW5pdHMsIGludCBpbmRleF9zaXplID0gOCwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpDQotICAgICAgICA6IENGWF9CYXNlU2VnbWVudGVkQXJyYXkoc2l6ZW9mKEVsZW1lbnRUeXBlKSwgc2VnbWVudF91bml0cywgaW5kZXhfc2l6ZSwgcEFsbG9jYXRvcikNCi0gICAge30NCi0NCi0gICAgdm9pZAlBZGQoRWxlbWVudFR5cGUgZGF0YSkNCi0gICAgew0KLSAgICAgICAgKihFbGVtZW50VHlwZSopQ0ZYX0Jhc2VTZWdtZW50ZWRBcnJheTo6QWRkKCkgPSBkYXRhOw0KLSAgICB9DQotDQotICAgIEVsZW1lbnRUeXBlJiBvcGVyYXRvciBbXSAoaW50IGluZGV4KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gKihFbGVtZW50VHlwZSopQ0ZYX0Jhc2VTZWdtZW50ZWRBcnJheTo6R2V0QXQoaW5kZXgpOw0KLSAgICB9DQotfTsNCi10ZW1wbGF0ZSA8Y2xhc3MgRGF0YVR5cGUsIGludCBGaXhlZFNpemU+DQotY2xhc3MgQ0ZYX0ZpeGVkQnVmR3JvdyA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgQ0ZYX0ZpeGVkQnVmR3JvdyhJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCkNCi0gICAgICAgIDogbV9wQWxsb2NhdG9yKHBBbGxvY2F0b3IpDQotICAgICAgICAsIG1fcERhdGEoTlVMTCkNCi0gICAge30NCi0gICAgQ0ZYX0ZpeGVkQnVmR3JvdyhpbnQgZGF0YV9zaXplLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCkNCi0gICAgICAgIDogbV9wQWxsb2NhdG9yKHBBbGxvY2F0b3IpDQotICAgICAgICAsIG1fcERhdGEoTlVMTCkNCi0gICAgew0KLSAgICAgICAgaWYgKGRhdGFfc2l6ZSA+IEZpeGVkU2l6ZSkgew0KLSAgICAgICAgICAgIG1fcERhdGEgPSBGWF9BbGxvY2F0b3JfQWxsb2MobV9wQWxsb2NhdG9yLCBEYXRhVHlwZSwgZGF0YV9zaXplKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgRlhTWVNfbWVtc2V0MzIobV9EYXRhLCAwLCBzaXplb2YoRGF0YVR5cGUpKkZpeGVkU2l6ZSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgdm9pZCBTZXREYXRhU2l6ZShpbnQgZGF0YV9zaXplKQ0KLSAgICB7DQotICAgICAgICBpZiAobV9wRGF0YSkgew0KLSAgICAgICAgICAgIEZYX0FsbG9jYXRvcl9GcmVlKG1fcEFsbG9jYXRvciwgbV9wRGF0YSk7DQotICAgICAgICB9DQotICAgICAgICBtX3BEYXRhID0gTlVMTDsNCi0gICAgICAgIGlmIChkYXRhX3NpemUgPiBGaXhlZFNpemUpIHsNCi0gICAgICAgICAgICBtX3BEYXRhID0gRlhfQWxsb2NhdG9yX0FsbG9jKG1fcEFsbG9jYXRvciwgRGF0YVR5cGUsIGRhdGFfc2l6ZSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIEZYU1lTX21lbXNldDMyKG1fRGF0YSwgMCwgc2l6ZW9mKERhdGFUeXBlKSpGaXhlZFNpemUpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIH5DRlhfRml4ZWRCdWZHcm93KCkNCi0gICAgew0KLSAgICAgICAgaWYgKG1fcERhdGEpIHsNCi0gICAgICAgICAgICBGWF9BbGxvY2F0b3JfRnJlZShtX3BBbGxvY2F0b3IsIG1fcERhdGEpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG9wZXJhdG9yIERhdGFUeXBlKigpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BEYXRhID8gbV9wRGF0YSA6IG1fRGF0YTsNCi0gICAgfQ0KLXByaXZhdGU6DQotICAgIElGWF9BbGxvY2F0b3IqCW1fcEFsbG9jYXRvcjsNCi0gICAgRGF0YVR5cGUJCW1fRGF0YVtGaXhlZFNpemVdOw0KLSAgICBEYXRhVHlwZSoJCW1fcERhdGE7DQotfTsNCi10ZW1wbGF0ZSA8Y2xhc3MgRGF0YVR5cGU+DQotY2xhc3MgQ0ZYX1RlbXBCdWYNCi17DQotcHVibGljOg0KLSAgICBDRlhfVGVtcEJ1ZihpbnQgc2l6ZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpIDogbV9wQWxsb2NhdG9yKHBBbGxvY2F0b3IpDQotICAgIHsNCi0gICAgICAgIG1fcERhdGEgPSBGWF9BbGxvY2F0b3JfQWxsb2MobV9wQWxsb2NhdG9yLCBEYXRhVHlwZSwgc2l6ZSk7DQotICAgIH0NCi0gICAgfkNGWF9UZW1wQnVmKCkNCi0gICAgew0KLSAgICAgICAgaWYgKG1fcERhdGEpIHsNCi0gICAgICAgICAgICBGWF9BbGxvY2F0b3JfRnJlZShtX3BBbGxvY2F0b3IsIG1fcERhdGEpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIERhdGFUeXBlJglvcGVyYXRvcltdKGludCBpKQ0KLSAgICB7DQotICAgICAgICBGWFNZU19hc3NlcnQobV9wRGF0YSAhPSBOVUxMKTsNCi0gICAgICAgIHJldHVybiBtX3BEYXRhW2ldOw0KLSAgICB9DQotICAgIG9wZXJhdG9yIERhdGFUeXBlKigpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BEYXRhOw0KLSAgICB9DQotcHJpdmF0ZToNCi0gICAgSUZYX0FsbG9jYXRvcioJbV9wQWxsb2NhdG9yOw0KLSAgICBEYXRhVHlwZSoJCW1fcERhdGE7DQotfTsNCi1jbGFzcyBDRlhfTWFwUHRyVG9QdHIgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wcm90ZWN0ZWQ6DQotDQotICAgIHN0cnVjdCBDQXNzb2Mgew0KLQ0KLSAgICAgICAgQ0Fzc29jKiBwTmV4dDsNCi0NCi0gICAgICAgIHZvaWQqIGtleTsNCi0NCi0gICAgICAgIHZvaWQqIHZhbHVlOw0KLSAgICB9Ow0KLXB1YmxpYzoNCi0NCi0gICAgQ0ZYX01hcFB0clRvUHRyKGludCBuQmxvY2tTaXplID0gMTAsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsNCi0NCi0gICAgfkNGWF9NYXBQdHJUb1B0cigpOw0KLQ0KLSAgICBpbnQgR2V0Q291bnQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9uQ291bnQ7DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTCBJc0VtcHR5KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fbkNvdW50ID09IDA7DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTCBMb29rdXAodm9pZCoga2V5LCB2b2lkKiYgclZhbHVlKSBjb25zdDsNCi0NCi0gICAgdm9pZCogR2V0VmFsdWVBdCh2b2lkKiBrZXkpIGNvbnN0Ow0KLQ0KLSAgICB2b2lkKiYgb3BlcmF0b3JbXSh2b2lkKiBrZXkpOw0KLQ0KLSAgICB2b2lkIFNldEF0KHZvaWQqIGtleSwgdm9pZCogbmV3VmFsdWUpDQotICAgIHsNCi0gICAgICAgICgqdGhpcylba2V5XSA9IG5ld1ZhbHVlOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wgUmVtb3ZlS2V5KHZvaWQqIGtleSk7DQotDQotICAgIHZvaWQgUmVtb3ZlQWxsKCk7DQotDQotICAgIEZYX1BPU0lUSU9OIEdldFN0YXJ0UG9zaXRpb24oKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gKG1fbkNvdW50ID09IDApID8gTlVMTCA6IChGWF9QT1NJVElPTikgLSAxOw0KLSAgICB9DQotDQotICAgIHZvaWQgR2V0TmV4dEFzc29jKEZYX1BPU0lUSU9OJiByTmV4dFBvc2l0aW9uLCB2b2lkKiYgcktleSwgdm9pZComIHJWYWx1ZSkgY29uc3Q7DQotDQotICAgIEZYX0RXT1JEIEdldEhhc2hUYWJsZVNpemUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9uSGFzaFRhYmxlU2l6ZTsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkIEluaXRIYXNoVGFibGUoRlhfRFdPUkQgaGFzaFNpemUsIEZYX0JPT0wgYkFsbG9jTm93ID0gVFJVRSk7DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBJRlhfQWxsb2NhdG9yKgltX3BBbGxvY2F0b3I7DQotDQotICAgIENBc3NvYyoqIG1fcEhhc2hUYWJsZTsNCi0NCi0gICAgRlhfRFdPUkQgbV9uSGFzaFRhYmxlU2l6ZTsNCi0NCi0gICAgaW50IG1fbkNvdW50Ow0KLQ0KLSAgICBDQXNzb2MqIG1fcEZyZWVMaXN0Ow0KLQ0KLSAgICBzdHJ1Y3QgQ0ZYX1BsZXgqIG1fcEJsb2NrczsNCi0NCi0gICAgaW50IG1fbkJsb2NrU2l6ZTsNCi0NCi0gICAgRlhfRFdPUkQgSGFzaEtleSh2b2lkKiBrZXkpIGNvbnN0Ow0KLQ0KLSAgICBDQXNzb2MqIE5ld0Fzc29jKCk7DQotDQotICAgIHZvaWQgRnJlZUFzc29jKENBc3NvYyogcEFzc29jKTsNCi0NCi0gICAgQ0Fzc29jKiBHZXRBc3NvY0F0KHZvaWQqIGtleSwgRlhfRFdPUkQmIGhhc2gpIGNvbnN0Ow0KLX07DQotdGVtcGxhdGUgPGNsYXNzIEtleVR5cGUsIGNsYXNzIFZhbHVlVHlwZT4NCi1jbGFzcyBDRlhfTWFwUHRyVGVtcGxhdGUgOiBwdWJsaWMgQ0ZYX01hcFB0clRvUHRyDQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ0ZYX01hcFB0clRlbXBsYXRlKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKSA6IENGWF9NYXBQdHJUb1B0cigxMCwgcEFsbG9jYXRvcikge30NCi0NCi0gICAgRlhfQk9PTAlMb29rdXAoS2V5VHlwZSBrZXksIFZhbHVlVHlwZSYgclZhbHVlKSBjb25zdA0KLSAgICB7DQotICAgICAgICBGWF9MUFZPSUQgcFZhbHVlID0gTlVMTDsNCi0gICAgICAgIGlmICghQ0ZYX01hcFB0clRvUHRyOjpMb29rdXAoKHZvaWQqKShGWF9VSU5UUFRSKWtleSwgcFZhbHVlKSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJWYWx1ZSA9IChWYWx1ZVR5cGUpKEZYX1VJTlRQVFIpcFZhbHVlOw0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0NCi0gICAgVmFsdWVUeXBlJiBvcGVyYXRvcltdKEtleVR5cGUga2V5KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gKFZhbHVlVHlwZSYpQ0ZYX01hcFB0clRvUHRyOjpvcGVyYXRvciBbXSgodm9pZCopKEZYX1VJTlRQVFIpa2V5KTsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkIFNldEF0KEtleVR5cGUga2V5LCBWYWx1ZVR5cGUgbmV3VmFsdWUpDQotICAgIHsNCi0gICAgICAgIENGWF9NYXBQdHJUb1B0cjo6U2V0QXQoKHZvaWQqKShGWF9VSU5UUFRSKWtleSwgKHZvaWQqKShGWF9VSU5UUFRSKW5ld1ZhbHVlKTsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MCVJlbW92ZUtleShLZXlUeXBlIGtleSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIENGWF9NYXBQdHJUb1B0cjo6UmVtb3ZlS2V5KCh2b2lkKikoRlhfVUlOVFBUUilrZXkpOw0KLSAgICB9DQotDQotICAgIHZvaWQgR2V0TmV4dEFzc29jKEZYX1BPU0lUSU9OJiByTmV4dFBvc2l0aW9uLCBLZXlUeXBlJiByS2V5LCBWYWx1ZVR5cGUmIHJWYWx1ZSkgY29uc3QNCi0gICAgew0KLSAgICAgICAgdm9pZCogcEtleSA9IE5VTEw7DQotICAgICAgICB2b2lkKiBwVmFsdWUgPSBOVUxMOw0KLSAgICAgICAgQ0ZYX01hcFB0clRvUHRyOjpHZXROZXh0QXNzb2Mock5leHRQb3NpdGlvbiwgcEtleSwgcFZhbHVlKTsNCi0gICAgICAgIHJLZXkgPSAoS2V5VHlwZSkoRlhfVUlOVFBUUilwS2V5Ow0KLSAgICAgICAgclZhbHVlID0gKFZhbHVlVHlwZSkoRlhfVUlOVFBUUilwVmFsdWU7DQotICAgIH0NCi19Ow0KLWNsYXNzIENGWF9DTWFwRFdvcmRUb0RXb3JkIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDRlhfQ01hcERXb3JkVG9EV29yZChJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCkgOiBtX0J1ZmZlcihwQWxsb2NhdG9yKSB7fQ0KLQ0KLSAgICBGWF9CT09MCQkJTG9va3VwKEZYX0RXT1JEIGtleSwgRlhfRFdPUkQmIHZhbHVlKSBjb25zdDsNCi0NCi0gICAgdm9pZAkJCVNldEF0KEZYX0RXT1JEIGtleSwgRlhfRFdPUkQgdmFsdWUpOw0KLQ0KLSAgICB2b2lkCQkJRXN0aW1hdGVTaXplKEZYX0RXT1JEIHNpemUsIEZYX0RXT1JEIGdyb3dfYnkpOw0KLQ0KLSAgICBGWF9QT1NJVElPTgkJR2V0U3RhcnRQb3NpdGlvbigpIGNvbnN0Ow0KLQ0KLSAgICB2b2lkCQkJR2V0TmV4dEFzc29jKEZYX1BPU0lUSU9OJiBwb3MsIEZYX0RXT1JEJiBrZXksIEZYX0RXT1JEJiB2YWx1ZSkgY29uc3Q7DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBDRlhfQmluYXJ5QnVmCW1fQnVmZmVyOw0KLX07DQotY2xhc3MgQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0ciA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXByb3RlY3RlZDoNCi0NCi0gICAgc3RydWN0IENBc3NvYyB7DQotDQotICAgICAgICBDQXNzb2MqIHBOZXh0Ow0KLQ0KLSAgICAgICAgRlhfRFdPUkQgbkhhc2hWYWx1ZTsNCi0NCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIGtleTsNCi0NCi0gICAgICAgIHZvaWQqIHZhbHVlOw0KLSAgICB9Ow0KLXB1YmxpYzoNCi0NCi0gICAgQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0cihpbnQgbkJsb2NrU2l6ZSA9IDEwLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7DQotDQotICAgIGludCBHZXRDb3VudCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX25Db3VudDsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MIElzRW1wdHkoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9uQ291bnQgPT0gMDsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MIExvb2t1cChGWF9CU1RSIGtleSwgdm9pZComIHJWYWx1ZSkgY29uc3Q7DQotDQotICAgIHZvaWQqJiBvcGVyYXRvcltdKEZYX0JTVFIga2V5KTsNCi0NCi0gICAgdm9pZCBTZXRBdChGWF9CU1RSIGtleSwgdm9pZCogbmV3VmFsdWUpDQotICAgIHsNCi0gICAgICAgICgqdGhpcylba2V5XSA9IG5ld1ZhbHVlOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wgUmVtb3ZlS2V5KEZYX0JTVFIga2V5KTsNCi0NCi0gICAgdm9pZCBSZW1vdmVBbGwoKTsNCi0NCi0gICAgRlhfUE9TSVRJT04gR2V0U3RhcnRQb3NpdGlvbigpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiAobV9uQ291bnQgPT0gMCkgPyBOVUxMIDogKEZYX1BPU0lUSU9OKSAtIDE7DQotICAgIH0NCi0NCi0gICAgdm9pZCBHZXROZXh0QXNzb2MoRlhfUE9TSVRJT04mIHJOZXh0UG9zaXRpb24sIENGWF9CeXRlU3RyaW5nJiByS2V5LCB2b2lkKiYgclZhbHVlKSBjb25zdDsNCi0NCi0gICAgRlhfTFBWT0lECQlHZXROZXh0VmFsdWUoRlhfUE9TSVRJT04mIHJOZXh0UG9zaXRpb24pIGNvbnN0Ow0KLQ0KLSAgICBGWF9EV09SRCBHZXRIYXNoVGFibGVTaXplKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fbkhhc2hUYWJsZVNpemU7DQotICAgIH0NCi0NCi0gICAgdm9pZCBJbml0SGFzaFRhYmxlKEZYX0RXT1JEIGhhc2hTaXplLCBGWF9CT09MIGJBbGxvY05vdyA9IFRSVUUpOw0KLQ0KLSAgICBGWF9EV09SRCBIYXNoS2V5KEZYX0JTVFIga2V5KSBjb25zdDsNCi1wcm90ZWN0ZWQ6DQotDQotICAgIElGWF9BbGxvY2F0b3IqCW1fcEFsbG9jYXRvcjsNCi0NCi0gICAgQ0Fzc29jKiogbV9wSGFzaFRhYmxlOw0KLQ0KLSAgICBGWF9EV09SRCBtX25IYXNoVGFibGVTaXplOw0KLQ0KLSAgICBpbnQgbV9uQ291bnQ7DQotDQotICAgIENBc3NvYyogbV9wRnJlZUxpc3Q7DQotDQotICAgIHN0cnVjdCBDRlhfUGxleCogbV9wQmxvY2tzOw0KLQ0KLSAgICBpbnQgbV9uQmxvY2tTaXplOw0KLQ0KLSAgICBDQXNzb2MqIE5ld0Fzc29jKCk7DQotDQotICAgIHZvaWQgRnJlZUFzc29jKENBc3NvYyogcEFzc29jKTsNCi0NCi0gICAgQ0Fzc29jKiBHZXRBc3NvY0F0KEZYX0JTVFIga2V5LCBGWF9EV09SRCYgaGFzaCkgY29uc3Q7DQotcHVibGljOg0KLQ0KLSAgICB+Q0ZYX01hcEJ5dGVTdHJpbmdUb1B0cigpOw0KLX07DQotY2xhc3MgQ0ZYX0NNYXBCeXRlU3RyaW5nVG9QdHIgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENGWF9DTWFwQnl0ZVN0cmluZ1RvUHRyKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsNCi0NCi0gICAgfkNGWF9DTWFwQnl0ZVN0cmluZ1RvUHRyKCk7DQotDQotICAgIHZvaWQJCQlSZW1vdmVBbGwoKTsNCi0NCi0gICAgRlhfUE9TSVRJT04JCUdldFN0YXJ0UG9zaXRpb24oKSBjb25zdDsNCi0NCi0gICAgdm9pZAkJCUdldE5leHRBc3NvYyhGWF9QT1NJVElPTiYgck5leHRQb3NpdGlvbiwgQ0ZYX0J5dGVTdHJpbmcmIHJLZXksIHZvaWQqJiByVmFsdWUpIGNvbnN0Ow0KLQ0KLSAgICBGWF9MUFZPSUQJCUdldE5leHRWYWx1ZShGWF9QT1NJVElPTiYgck5leHRQb3NpdGlvbikgY29uc3Q7DQotDQotICAgIEZYX0JPT0wJCQlMb29rdXAoRlhfQlNUUiBrZXksIHZvaWQqJiByVmFsdWUpIGNvbnN0Ow0KLQ0KLSAgICB2b2lkCQkJU2V0QXQoRlhfQlNUUiBrZXksIHZvaWQqIHZhbHVlKTsNCi0NCi0gICAgdm9pZAkJCVJlbW92ZUtleShGWF9CU1RSIGtleSk7DQotDQotICAgIGludAkJCQlHZXRDb3VudCgpIGNvbnN0Ow0KLQ0KLSAgICB2b2lkCQkJQWRkVmFsdWUoRlhfQlNUUiBrZXksIHZvaWQqIHBWYWx1ZSk7DQotcHJpdmF0ZToNCi0NCi0gICAgQ0ZYX0Jhc2VTZWdtZW50ZWRBcnJheQkJCW1fQnVmZmVyOw0KLX07DQotY2xhc3MgQ0ZYX1B0ckxpc3QgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wcm90ZWN0ZWQ6DQotDQotICAgIHN0cnVjdCBDTm9kZSB7DQotDQotICAgICAgICBDTm9kZSogcE5leHQ7DQotDQotICAgICAgICBDTm9kZSogcFByZXY7DQotDQotICAgICAgICB2b2lkKiBkYXRhOw0KLSAgICB9Ow0KLXB1YmxpYzoNCi0NCi0gICAgQ0ZYX1B0ckxpc3QoaW50IG5CbG9ja1NpemUgPSAxMCwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpOw0KLQ0KLSAgICBGWF9QT1NJVElPTiBHZXRIZWFkUG9zaXRpb24oKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gKEZYX1BPU0lUSU9OKW1fcE5vZGVIZWFkOw0KLSAgICB9DQotDQotICAgIEZYX1BPU0lUSU9OIEdldFRhaWxQb3NpdGlvbigpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiAoRlhfUE9TSVRJT04pbV9wTm9kZVRhaWw7DQotICAgIH0NCi0NCi0gICAgdm9pZCoJR2V0TmV4dChGWF9QT1NJVElPTiYgclBvc2l0aW9uKSBjb25zdA0KLSAgICB7DQotICAgICAgICBDTm9kZSogcE5vZGUgPSAoQ05vZGUqKSByUG9zaXRpb247DQotICAgICAgICByUG9zaXRpb24gPSAoRlhfUE9TSVRJT04pIHBOb2RlLT5wTmV4dDsNCi0gICAgICAgIHJldHVybiBwTm9kZS0+ZGF0YTsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkKglHZXRQcmV2KEZYX1BPU0lUSU9OJiByUG9zaXRpb24pIGNvbnN0DQotICAgIHsNCi0gICAgICAgIENOb2RlKiBwTm9kZSA9IChDTm9kZSopIHJQb3NpdGlvbjsNCi0gICAgICAgIHJQb3NpdGlvbiA9IChGWF9QT1NJVElPTikgcE5vZGUtPnBQcmV2Ow0KLSAgICAgICAgcmV0dXJuIHBOb2RlLT5kYXRhOw0KLSAgICB9DQotDQotICAgIEZYX1BPU0lUSU9OCUdldE5leHRQb3NpdGlvbihGWF9QT1NJVElPTiBwb3MpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiAoKENOb2RlKilwb3MpLT5wTmV4dDsNCi0gICAgfQ0KLQ0KLSAgICBGWF9QT1NJVElPTglHZXRQcmV2UG9zaXRpb24oRlhfUE9TSVRJT04gcG9zKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gKChDTm9kZSopcG9zKS0+cFByZXY7DQotICAgIH0NCi0NCi0gICAgdm9pZCoJR2V0QXQoRlhfUE9TSVRJT04gclBvc2l0aW9uKSBjb25zdA0KLSAgICB7DQotICAgICAgICBDTm9kZSogcE5vZGUgPSAoQ05vZGUqKSByUG9zaXRpb247DQotICAgICAgICByZXR1cm4gcE5vZGUtPmRhdGE7DQotICAgIH0NCi0NCi0gICAgaW50CQlHZXRDb3VudCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX25Db3VudDsNCi0gICAgfQ0KLQ0KLSAgICBGWF9QT1NJVElPTglBZGRUYWlsKHZvaWQqIG5ld0VsZW1lbnQpOw0KLQ0KLSAgICBGWF9QT1NJVElPTiBBZGRIZWFkKHZvaWQqIG5ld0VsZW1lbnQpOw0KLQ0KLSAgICB2b2lkCVNldEF0KEZYX1BPU0lUSU9OIHBvcywgdm9pZCogbmV3RWxlbWVudCkNCi0gICAgew0KLSAgICAgICAgQ05vZGUqIHBOb2RlID0gKENOb2RlKikgcG9zOw0KLSAgICAgICAgcE5vZGUtPmRhdGEgPSBuZXdFbGVtZW50Ow0KLSAgICB9DQotDQotICAgIEZYX1BPU0lUSU9OIEluc2VydEFmdGVyKEZYX1BPU0lUSU9OIHBvcywgdm9pZCogbmV3RWxlbWVudCk7DQotDQotICAgIEZYX1BPU0lUSU9OIEZpbmQodm9pZCogc2VhcmNoVmFsdWUsIEZYX1BPU0lUSU9OIHN0YXJ0QWZ0ZXIgPSBOVUxMICkgY29uc3Q7DQotDQotICAgIEZYX1BPU0lUSU9OIEZpbmRJbmRleChpbnQgaW5kZXgpIGNvbnN0Ow0KLQ0KLSAgICB2b2lkCVJlbW92ZUF0KEZYX1BPU0lUSU9OIHBvcyk7DQotDQotICAgIHZvaWQJUmVtb3ZlQWxsKCk7DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBJRlhfQWxsb2NhdG9yKgltX3BBbGxvY2F0b3I7DQotDQotICAgIENOb2RlKiBtX3BOb2RlSGVhZDsNCi0NCi0gICAgQ05vZGUqIG1fcE5vZGVUYWlsOw0KLQ0KLSAgICBpbnQgbV9uQ291bnQ7DQotDQotICAgIENOb2RlKiBtX3BOb2RlRnJlZTsNCi0NCi0gICAgc3RydWN0IENGWF9QbGV4KiBtX3BCbG9ja3M7DQotDQotICAgIGludCBtX25CbG9ja1NpemU7DQotDQotICAgIENOb2RlKiBOZXdOb2RlKENOb2RlKiBwUHJldiwgQ05vZGUqIHBOZXh0KTsNCi0NCi0gICAgdm9pZCBGcmVlTm9kZShDTm9kZSogcE5vZGUpOw0KLXB1YmxpYzoNCi0NCi0gICAgfkNGWF9QdHJMaXN0KCk7DQotfTsNCi10eXBlZGVmIHZvaWQgKCpQRF9DQUxMQkFDS19GUkVFREFUQSkoRlhfTFBWT0lEIHBEYXRhKTsNCi1zdHJ1Y3QgRlhfUFJJVkFURURBVEEgew0KLQ0KLSAgICB2b2lkCQkJCQlGcmVlRGF0YSgpOw0KLQ0KLSAgICBGWF9MUFZPSUQJCQkJbV9wTW9kdWxlSWQ7DQotDQotICAgIEZYX0xQVk9JRAkJCQltX3BEYXRhOw0KLQ0KLSAgICBQRF9DQUxMQkFDS19GUkVFREFUQQltX3BDYWxsYmFjazsNCi0NCi0gICAgRlhfQk9PTAkJCQkJbV9iU2VsZkRlc3RydWN0Ow0KLX07DQotY2xhc3MgQ0ZYX1ByaXZhdGVEYXRhDQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ0ZYX1ByaXZhdGVEYXRhKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKSA6IG1fRGF0YUxpc3QocEFsbG9jYXRvcikge30NCi0NCi0gICAgfkNGWF9Qcml2YXRlRGF0YSgpOw0KLQ0KLSAgICB2b2lkCQkJCQlDbGVhckFsbCgpOw0KLQ0KLSAgICB2b2lkCQkJCQlTZXRQcml2YXRlRGF0YShGWF9MUFZPSUQgbW9kdWxlX2lkLCBGWF9MUFZPSUQgcERhdGEsIFBEX0NBTExCQUNLX0ZSRUVEQVRBIGNhbGxiYWNrKTsNCi0NCi0gICAgdm9pZAkJCQkJU2V0UHJpdmF0ZU9iaihGWF9MUFZPSUQgbW9kdWxlX2lkLCBDRlhfRGVzdHJ1Y3RPYmplY3QqIHBPYmopOw0KLQ0KLSAgICBGWF9MUFZPSUQJCQkJR2V0UHJpdmF0ZURhdGEoRlhfTFBWT0lEIG1vZHVsZV9pZCk7DQotDQotICAgIEZYX0JPT0wJCQkJCUxvb2t1cFByaXZhdGVEYXRhKEZYX0xQVk9JRCBtb2R1bGVfaWQsIEZYX0xQVk9JRCAmcERhdGEpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIGlmICghbW9kdWxlX2lkKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfRFdPUkQgbkNvdW50ID0gbV9EYXRhTGlzdC5HZXRTaXplKCk7DQotICAgICAgICBmb3IgKEZYX0RXT1JEIG4gPSAwOyBuIDwgbkNvdW50OyBuICsrKSB7DQotICAgICAgICAgICAgaWYgKG1fRGF0YUxpc3Rbbl0ubV9wTW9kdWxlSWQgPT0gbW9kdWxlX2lkKSB7DQotICAgICAgICAgICAgICAgIHBEYXRhID0gbV9EYXRhTGlzdFtuXS5tX3BEYXRhOw0KLSAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTAkJCQkJUmVtb3ZlUHJpdmF0ZURhdGEoRlhfTFBWT0lEIG1vZHVsZV9pZCk7DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBDRlhfQXJyYXlUZW1wbGF0ZTxGWF9QUklWQVRFREFUQT4JbV9EYXRhTGlzdDsNCi0NCi0gICAgdm9pZAkJCQkJQWRkRGF0YShGWF9MUFZPSUQgbW9kdWxlX2lkLCBGWF9MUFZPSUQgcERhdGEsIFBEX0NBTExCQUNLX0ZSRUVEQVRBIGNhbGxiYWNrLCBGWF9CT09MIGJTZWxmRGVzdHJ1Y3QpOw0KLX07DQotY2xhc3MgQ0ZYX0JpdFN0cmVhbSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgdm9pZAkJCQlJbml0KEZYX0xQQ0JZVEUgcERhdGEsIEZYX0RXT1JEIGR3U2l6ZSk7DQotDQotDQotICAgIEZYX0RXT1JECQkJR2V0Qml0cyhGWF9EV09SRCBuQml0cyk7DQotDQotICAgIHZvaWQJCQkJQnl0ZUFsaWduKCk7DQotDQotICAgIEZYX0JPT0wJCQkJSXNFT0YoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9CaXRQb3MgPj0gbV9CaXRTaXplOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJU2tpcEJpdHMoRlhfRFdPUkQgbkJpdHMpDQotICAgIHsNCi0gICAgICAgIG1fQml0UG9zICs9IG5CaXRzOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJUmV3aW5kKCkNCi0gICAgew0KLSAgICAgICAgbV9CaXRQb3MgPSAwOw0KLSAgICB9DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBGWF9EV09SRAkJCW1fQml0UG9zOw0KLQ0KLSAgICBGWF9EV09SRAkJCW1fQml0U2l6ZTsNCi0NCi0gICAgRlhfTFBDQllURQkJCW1fcERhdGE7DQotfTsNCi10ZW1wbGF0ZSA8Y2xhc3MgT2JqQ2xhc3M+IGNsYXNzIENGWF9Db3VudFJlZiA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgdHlwZWRlZiBDRlhfQ291bnRSZWY8T2JqQ2xhc3M+IFJlZjsNCi0NCi0gICAgY2xhc3MgQ291bnRlZE9iaiA6IHB1YmxpYyBPYmpDbGFzcw0KLSAgICB7DQotICAgIHB1YmxpYzoNCi0NCi0gICAgICAgIENvdW50ZWRPYmooKSB7fQ0KLQ0KLSAgICAgICAgQ291bnRlZE9iaihjb25zdCBDb3VudGVkT2JqJiBzcmMpIDogT2JqQ2xhc3Moc3JjKSB7fQ0KLQ0KLSAgICAgICAgaW50CQkJbV9SZWZDb3VudDsNCi0gICAgfTsNCi0NCi0gICAgQ0ZYX0NvdW50UmVmKCkNCi0gICAgew0KLSAgICAgICAgbV9wT2JqZWN0ID0gTlVMTDsNCi0gICAgfQ0KLQ0KLSAgICBDRlhfQ291bnRSZWYoY29uc3QgUmVmJiByZWYpDQotICAgIHsNCi0gICAgICAgIG1fcE9iamVjdCA9IHJlZi5tX3BPYmplY3Q7DQotICAgICAgICBpZiAobV9wT2JqZWN0KSB7DQotICAgICAgICAgICAgbV9wT2JqZWN0LT5tX1JlZkNvdW50ICsrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotDQotICAgIH5DRlhfQ291bnRSZWYoKQ0KLSAgICB7DQotICAgICAgICBpZiAoIW1fcE9iamVjdCkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fcE9iamVjdC0+bV9SZWZDb3VudCAtLTsNCi0gICAgICAgIGlmIChtX3BPYmplY3QtPm1fUmVmQ291bnQgPD0gMCkgew0KLSAgICAgICAgICAgIGRlbGV0ZSBtX3BPYmplY3Q7DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgT2JqQ2xhc3MqCQkJTmV3KCkNCi0gICAgew0KLSAgICAgICAgaWYgKG1fcE9iamVjdCkgew0KLSAgICAgICAgICAgIG1fcE9iamVjdC0+bV9SZWZDb3VudCAtLTsNCi0gICAgICAgICAgICBpZiAobV9wT2JqZWN0LT5tX1JlZkNvdW50IDw9IDApIHsNCi0gICAgICAgICAgICAgICAgZGVsZXRlIG1fcE9iamVjdDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9wT2JqZWN0ID0gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fcE9iamVjdCA9IEZYX05FVyBDb3VudGVkT2JqOw0KLSAgICAgICAgaWYgKCFtX3BPYmplY3QpIHsNCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fcE9iamVjdC0+bV9SZWZDb3VudCA9IDE7DQotICAgICAgICByZXR1cm4gbV9wT2JqZWN0Ow0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJb3BlcmF0b3IgPSAoY29uc3QgUmVmJiByZWYpDQotICAgIHsNCi0gICAgICAgIGlmIChyZWYubV9wT2JqZWN0KSB7DQotICAgICAgICAgICAgcmVmLm1fcE9iamVjdC0+bV9SZWZDb3VudCArKzsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX3BPYmplY3QpIHsNCi0gICAgICAgICAgICBtX3BPYmplY3QtPm1fUmVmQ291bnQgLS07DQotICAgICAgICAgICAgaWYgKG1fcE9iamVjdC0+bV9SZWZDb3VudCA8PSAwKSB7DQotICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3BPYmplY3Q7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wT2JqZWN0ID0gcmVmLm1fcE9iamVjdDsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJCW9wZXJhdG9yID0gKHZvaWQqIHApDQotICAgIHsNCi0gICAgICAgIEZYU1lTX2Fzc2VydChwID09IDApOw0KLSAgICAgICAgaWYgKG1fcE9iamVjdCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wT2JqZWN0LT5tX1JlZkNvdW50IC0tOw0KLSAgICAgICAgaWYgKG1fcE9iamVjdC0+bV9SZWZDb3VudCA8PSAwKSB7DQotICAgICAgICAgICAgZGVsZXRlIG1fcE9iamVjdDsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fcE9iamVjdCA9IE5VTEw7DQotICAgIH0NCi0NCi0gICAgY29uc3QgT2JqQ2xhc3MqCQlHZXRPYmplY3QoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wT2JqZWN0Ow0KLSAgICB9DQotDQotICAgIG9wZXJhdG9yCQkJY29uc3QgT2JqQ2xhc3MqKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcE9iamVjdDsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MCQkJCUlzTnVsbCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BPYmplY3QgPT0gTlVMTDsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MCQkJCU5vdE51bGwoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wT2JqZWN0ICE9IE5VTEw7DQotICAgIH0NCi0NCi0gICAgT2JqQ2xhc3MqCQkJR2V0TW9kaWZ5KCkNCi0gICAgew0KLSAgICAgICAgaWYgKG1fcE9iamVjdCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgbV9wT2JqZWN0ID0gRlhfTkVXIENvdW50ZWRPYmo7DQotICAgICAgICAgICAgaWYgKG1fcE9iamVjdCkgew0KLSAgICAgICAgICAgICAgICBtX3BPYmplY3QtPm1fUmVmQ291bnQgPSAxOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSBpZiAobV9wT2JqZWN0LT5tX1JlZkNvdW50ID4gMSkgew0KLSAgICAgICAgICAgIG1fcE9iamVjdC0+bV9SZWZDb3VudCAtLTsNCi0gICAgICAgICAgICBDb3VudGVkT2JqKiBwT2xkT2JqZWN0ID0gbV9wT2JqZWN0Ow0KLSAgICAgICAgICAgIG1fcE9iamVjdCA9IE5VTEw7DQotICAgICAgICAgICAgbV9wT2JqZWN0ID0gRlhfTkVXIENvdW50ZWRPYmooKnBPbGRPYmplY3QpOw0KLSAgICAgICAgICAgIGlmIChtX3BPYmplY3QpIHsNCi0gICAgICAgICAgICAgICAgbV9wT2JqZWN0LT5tX1JlZkNvdW50ID0gMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gbV9wT2JqZWN0Ow0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJU2V0TnVsbCgpDQotICAgIHsNCi0gICAgICAgIGlmIChtX3BPYmplY3QgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fcE9iamVjdC0+bV9SZWZDb3VudCAtLTsNCi0gICAgICAgIGlmIChtX3BPYmplY3QtPm1fUmVmQ291bnQgPD0gMCkgew0KLSAgICAgICAgICAgIGRlbGV0ZSBtX3BPYmplY3Q7DQotICAgICAgICB9DQotICAgICAgICBtX3BPYmplY3QgPSBOVUxMOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wJCQkJb3BlcmF0b3IgPT0gKGNvbnN0IFJlZiYgcmVmKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wT2JqZWN0ID09IHJlZi5tX3BPYmplY3Q7DQotICAgIH0NCi1wcm90ZWN0ZWQ6DQotDQotICAgIENvdW50ZWRPYmoqCQkJbV9wT2JqZWN0Ow0KLX07DQotY2xhc3MgSUZYX1BhdXNlDQotew0KLXB1YmxpYzoNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCU5lZWRUb1BhdXNlTm93KCkgPSAwOw0KLX07DQotY2xhc3MgQ0ZYX0RhdGFGaWx0ZXIgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHZpcnR1YWwgfkNGWF9EYXRhRmlsdGVyKCk7DQotDQotICAgIHZvaWQJCQlTZXREZXN0RmlsdGVyKENGWF9EYXRhRmlsdGVyKiBwRmlsdGVyKTsNCi0NCi0gICAgRlhfQk9PTAkJCUlzRU9GKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fYkVPRjsNCi0gICAgfQ0KLQ0KLSAgICBGWF9EV09SRAkJR2V0U3JjUG9zKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fU3JjUG9zOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQlGaWx0ZXJJbihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1Zik7DQotDQotICAgIHZvaWQJCQlGaWx0ZXJGaW5pc2goQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpOw0KLXByb3RlY3RlZDoNCi0NCi0gICAgQ0ZYX0RhdGFGaWx0ZXIoKTsNCi0gICAgdmlydHVhbCB2b2lkCXZfRmlsdGVySW4oRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpID0gMDsNCi0gICAgdmlydHVhbCB2b2lkCXZfRmlsdGVyRmluaXNoKENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKSA9IDA7DQotICAgIHZvaWQJCQlSZXBvcnRFT0YoRlhfRFdPUkQgbGVmdF9pbnB1dCk7DQotDQotICAgIEZYX0JPT0wJCQltX2JFT0Y7DQotDQotICAgIEZYX0RXT1JECQltX1NyY1BvczsNCi0NCi0gICAgQ0ZYX0RhdGFGaWx0ZXIqCW1fcERlc3RGaWx0ZXI7DQotfTsNCi10ZW1wbGF0ZSA8Y2xhc3MgVD4NCi1jbGFzcyBDRlhfU21hcnRQb2ludGVyDQotew0KLXB1YmxpYzoNCi0gICAgQ0ZYX1NtYXJ0UG9pbnRlcihUICpwT2JqKSA6IG1fcE9iaihwT2JqKSB7fQ0KLSAgICB+Q0ZYX1NtYXJ0UG9pbnRlcigpDQotICAgIHsNCi0gICAgICAgIG1fcE9iai0+UmVsZWFzZSgpOw0KLSAgICB9DQotICAgIG9wZXJhdG9yIFQqKHZvaWQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BPYmo7DQotICAgIH0NCi0gICAgVCYJCW9wZXJhdG9yICoodm9pZCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuICptX3BPYmo7DQotICAgIH0NCi0gICAgVCoJCW9wZXJhdG9yIC0+KHZvaWQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BPYmo7DQotICAgIH0NCi1wcm90ZWN0ZWQ6DQotICAgIFQgKm1fcE9iajsNCi19Ow0KLSNkZWZpbmUgRlhfREFUQUxJU1RfTEVOR1RICTEwMjQNCi10ZW1wbGF0ZTxzaXplX3QgdW5pdD4NCi1jbGFzcyBDRlhfU29ydExpc3RBcnJheSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXByb3RlY3RlZDoNCi0NCi0gICAgc3RydWN0IERhdGFMaXN0IHsNCi0NCi0gICAgICAgIEZYX0lOVDMyCXN0YXJ0Ow0KLQ0KLSAgICAgICAgRlhfSU5UMzIJY291bnQ7DQotICAgICAgICBGWF9MUEJZVEUJZGF0YTsNCi0gICAgfTsNCi1wdWJsaWM6DQotDQotICAgIENGWF9Tb3J0TGlzdEFycmF5KElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKSA6IG1fQ3VyTGlzdCgwKSwgbV9EYXRhTGlzdHMocEFsbG9jYXRvcikge30NCi0NCi0gICAgfkNGWF9Tb3J0TGlzdEFycmF5KCkNCi0gICAgew0KLSAgICAgICAgQ2xlYXIoKTsNCi0gICAgfQ0KLQ0KLQ0KLSAgICB2b2lkCQkJQ2xlYXIoKQ0KLSAgICB7DQotICAgICAgICBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gbV9EYXRhTGlzdHMubV9wQWxsb2NhdG9yOw0KLSAgICAgICAgZm9yIChGWF9JTlQzMiBpID0gbV9EYXRhTGlzdHMuR2V0VXBwZXJCb3VuZCgpOyBpID49IDA7IGktLSkgew0KLSAgICAgICAgICAgIERhdGFMaXN0IGxpc3QgPSBtX0RhdGFMaXN0cy5FbGVtZW50QXQoaSk7DQotICAgICAgICAgICAgaWYgKGxpc3QuZGF0YSkgew0KLSAgICAgICAgICAgICAgICBGWF9BbGxvY2F0b3JfRnJlZShwQWxsb2NhdG9yLCBsaXN0LmRhdGEpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIG1fRGF0YUxpc3RzLlJlbW92ZUFsbCgpOw0KLSAgICAgICAgbV9DdXJMaXN0ID0gMDsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJQXBwZW5kKEZYX0lOVDMyIG5TdGFydCwgRlhfSU5UMzIgbkNvdW50KQ0KLSAgICB7DQotICAgICAgICBpZiAoblN0YXJ0IDwgMCkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBtX0RhdGFMaXN0cy5tX3BBbGxvY2F0b3I7DQotICAgICAgICB3aGlsZSAobkNvdW50ID4gMCkgew0KLSAgICAgICAgICAgIEZYX0lOVDMyIHRlbXBfY291bnQgPSBGWF9NSU4obkNvdW50LCBGWF9EQVRBTElTVF9MRU5HVEgpOw0KLSAgICAgICAgICAgIERhdGFMaXN0IGxpc3Q7DQotICAgICAgICAgICAgbGlzdC5kYXRhID0gRlhfQWxsb2NhdG9yX0FsbG9jKHBBbGxvY2F0b3IsIEZYX0JZVEUsIHRlbXBfY291bnQgKiB1bml0KTsNCi0gICAgICAgICAgICBpZiAoIWxpc3QuZGF0YSkgew0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgRlhTWVNfbWVtc2V0MzIobGlzdC5kYXRhLCAwLCB0ZW1wX2NvdW50ICogdW5pdCk7DQotICAgICAgICAgICAgbGlzdC5zdGFydCA9IG5TdGFydDsNCi0gICAgICAgICAgICBsaXN0LmNvdW50ID0gdGVtcF9jb3VudDsNCi0gICAgICAgICAgICBBcHBlbmQobGlzdCk7DQotICAgICAgICAgICAgbkNvdW50IC09IHRlbXBfY291bnQ7DQotICAgICAgICAgICAgblN0YXJ0ICs9IHRlbXBfY291bnQ7DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgRlhfTFBCWVRFCQlHZXRBdChGWF9JTlQzMiBuSW5kZXgpDQotICAgIHsNCi0gICAgICAgIGlmIChuSW5kZXggPCAwKSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9DdXJMaXN0IDwgMCB8fCBtX0N1ckxpc3QgPj0gbV9EYXRhTGlzdHMuR2V0U2l6ZSgpKSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBEYXRhTGlzdCAqcEN1ckxpc3QgPSBtX0RhdGFMaXN0cy5HZXREYXRhUHRyKG1fQ3VyTGlzdCk7DQotICAgICAgICBpZiAoIXBDdXJMaXN0IHx8IG5JbmRleCA8IHBDdXJMaXN0LT5zdGFydCB8fCBuSW5kZXggPj0gcEN1ckxpc3QtPnN0YXJ0ICsgcEN1ckxpc3QtPmNvdW50KSB7DQotICAgICAgICAgICAgcEN1ckxpc3QgPSBOVUxMOw0KLSAgICAgICAgICAgIEZYX0lOVDMyIGlTdGFydCA9IDA7DQotICAgICAgICAgICAgRlhfSU5UMzIgaUVuZCA9IG1fRGF0YUxpc3RzLkdldFVwcGVyQm91bmQoKTsNCi0gICAgICAgICAgICBGWF9JTlQzMiBpTWlkID0gMDsNCi0gICAgICAgICAgICB3aGlsZSAoaVN0YXJ0IDw9IGlFbmQpIHsNCi0gICAgICAgICAgICAgICAgaU1pZCA9IChpU3RhcnQgKyBpRW5kKSAvIDI7DQotICAgICAgICAgICAgICAgIERhdGFMaXN0KiBsaXN0ID0gbV9EYXRhTGlzdHMuR2V0RGF0YVB0cihpTWlkKTsNCi0gICAgICAgICAgICAgICAgaWYgKG5JbmRleCA8IGxpc3QtPnN0YXJ0KSB7DQotICAgICAgICAgICAgICAgICAgICBpRW5kID0gaU1pZCAtIDE7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobkluZGV4ID49IGxpc3QtPnN0YXJ0ICsgbGlzdC0+Y291bnQpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlTdGFydCA9IGlNaWQgKyAxOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgcEN1ckxpc3QgPSBsaXN0Ow0KLSAgICAgICAgICAgICAgICAgICAgbV9DdXJMaXN0ID0gaU1pZDsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHBDdXJMaXN0ID8gcEN1ckxpc3QtPmRhdGEgKyAobkluZGV4IC0gcEN1ckxpc3QtPnN0YXJ0KSAqIHVuaXQgOiBOVUxMOw0KLSAgICB9DQotcHJvdGVjdGVkOg0KLSAgICB2b2lkCQkJQXBwZW5kKGNvbnN0IERhdGFMaXN0JiBsaXN0KQ0KLSAgICB7DQotICAgICAgICBGWF9JTlQzMiBpU3RhcnQgPSAwOw0KLSAgICAgICAgRlhfSU5UMzIgaUVuZCA9IG1fRGF0YUxpc3RzLkdldFVwcGVyQm91bmQoKTsNCi0gICAgICAgIEZYX0lOVDMyIGlGaW5kID0gMDsNCi0gICAgICAgIHdoaWxlIChpU3RhcnQgPD0gaUVuZCkgew0KLSAgICAgICAgICAgIEZYX0lOVDMyIGlNaWQgPSAoaVN0YXJ0ICsgaUVuZCkgLyAyOw0KLSAgICAgICAgICAgIERhdGFMaXN0KiBjdXJfbGlzdCA9IG1fRGF0YUxpc3RzLkdldERhdGFQdHIoaU1pZCk7DQotICAgICAgICAgICAgaWYgKGxpc3Quc3RhcnQgPCBjdXJfbGlzdC0+c3RhcnQgKyBjdXJfbGlzdC0+Y291bnQpIHsNCi0gICAgICAgICAgICAgICAgaUVuZCA9IGlNaWQgLSAxOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGlmIChpTWlkID09IGlFbmQpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlGaW5kID0gaU1pZCArIDE7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBEYXRhTGlzdCogbmV4dF9saXN0ID0gbV9EYXRhTGlzdHMuR2V0RGF0YVB0cihpTWlkICsgMSk7DQotICAgICAgICAgICAgICAgIGlmIChsaXN0LnN0YXJ0IDwgbmV4dF9saXN0LT5zdGFydCkgew0KLSAgICAgICAgICAgICAgICAgICAgaUZpbmQgPSBpTWlkICsgMTsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgaVN0YXJ0ID0gaU1pZCArIDE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBtX0RhdGFMaXN0cy5JbnNlcnRBdChpRmluZCwgbGlzdCk7DQotICAgIH0NCi0gICAgRlhfSU5UMzIJCW1fQ3VyTGlzdDsNCi0gICAgQ0ZYX0FycmF5VGVtcGxhdGU8RGF0YUxpc3Q+CW1fRGF0YUxpc3RzOw0KLX07DQotdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPg0KLWNsYXNzIENGWF9MaXN0QXJyYXlUZW1wbGF0ZSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgdm9pZAkJCUNsZWFyKCkNCi0gICAgew0KLSAgICAgICAgbV9EYXRhLkNsZWFyKCk7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCUFkZChGWF9JTlQzMiBuU3RhcnQsIEZYX0lOVDMyIG5Db3VudCkNCi0gICAgew0KLSAgICAgICAgbV9EYXRhLkFwcGVuZChuU3RhcnQsIG5Db3VudCk7DQotICAgIH0NCi0NCi0gICAgVDImCQkJCW9wZXJhdG9yIFtdIChGWF9JTlQzMiBuSW5kZXgpDQotICAgIHsNCi0gICAgICAgIEZYX0xQQllURSBkYXRhID0gbV9EYXRhLkdldEF0KG5JbmRleCk7DQotICAgICAgICBGWFNZU19hc3NlcnQoZGF0YSAhPSBOVUxMKTsNCi0gICAgICAgIHJldHVybiAoVDImKSgqKHZvbGF0aWxlIFQyKilkYXRhKTsNCi0gICAgfQ0KLQ0KLSAgICBUMioJCQkJR2V0UHRyQXQoRlhfSU5UMzIgbkluZGV4KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gKFQyKiltX0RhdGEuR2V0QXQobkluZGV4KTsNCi0gICAgfQ0KLXByb3RlY3RlZDoNCi0gICAgVDEJCQltX0RhdGE7DQotfTsNCi10eXBlZGVmIENGWF9MaXN0QXJyYXlUZW1wbGF0ZTxDRlhfU29ydExpc3RBcnJheTxzaXplb2YoRlhfRklMRVNJWkUpPiwgRlhfRklMRVNJWkU+CUNGWF9GaWxlU2l6ZUxpc3RBcnJheTsNCi10eXBlZGVmIENGWF9MaXN0QXJyYXlUZW1wbGF0ZTxDRlhfU29ydExpc3RBcnJheTxzaXplb2YoRlhfRFdPUkQpPiwgRlhfRFdPUkQ+CQlDRlhfRFdvcmRMaXN0QXJyYXk7DQotdHlwZWRlZiBlbnVtIHsNCi0gICAgUmVhZHksDQotICAgIFRvQmVDb250aW51ZWQsDQotICAgIEZvdW5kLA0KLSAgICBOb3RGb3VuZCwNCi0gICAgRmFpbGVkLA0KLSAgICBEb25lDQotfSBGWF9Qcm9ncmVzc2l2ZVN0YXR1czsNCi0jZGVmaW5lIFByb2dyZXNzaXZlU3RhdHVzCUZYX1Byb2dyZXNzaXZlU3RhdHVzDQotI2RlZmluZSBGWF9OQU1FU1BBQ0VfREVDTEFSRShuYW1lc3BhY2UsIHR5cGUpICAgICAgIG5hbWVzcGFjZTo6dHlwZQ0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZYX0JBU0lDX0hfCisjZGVmaW5lIF9GWF9CQVNJQ19IXworI2lmbmRlZiBfRlhfU1lTVEVNX0hfCisjaW5jbHVkZSAiZnhfc3lzdGVtLmgiCisjZW5kaWYKKyNpZm5kZWYgX0ZYX01FTU9SWV9IXworI2luY2x1ZGUgImZ4X21lbW9yeS5oIgorI2VuZGlmCisjaWZuZGVmIF9GWF9TVFJJTkdfSF8KKyNpbmNsdWRlICJmeF9zdHJpbmcuaCIKKyNlbmRpZgorI2lmbmRlZiBfRlhfU1RSRUFNX0hfCisjaW5jbHVkZSAiZnhfc3RyZWFtLmgiCisjZW5kaWYKK2NsYXNzIENGWF9CaW5hcnlCdWYgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ0ZYX0JpbmFyeUJ1ZihJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7CisKKyAgICBDRlhfQmluYXJ5QnVmKEZYX1NUUlNJWkUgc2l6ZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpOworCisgICAgfkNGWF9CaW5hcnlCdWYoKTsKKworICAgIHZvaWQJCQkJCUNsZWFyKCk7CisKKyAgICB2b2lkCQkJCQlFc3RpbWF0ZVNpemUoRlhfU1RSU0laRSBzaXplLCBGWF9TVFJTSVpFIGFsbG9jX3N0ZXAgPSAwKTsKKworICAgIHZvaWQJCQkJCUFwcGVuZEJsb2NrKGNvbnN0IHZvaWQqIHBCdWYsIEZYX1NUUlNJWkUgc2l6ZSk7CisKKyAgICB2b2lkCQkJCQlBcHBlbmRGaWxsKEZYX0JZVEUgYnl0ZSwgRlhfU1RSU0laRSBjb3VudCk7CisKKyAgICB2b2lkCQkJCQlBcHBlbmRTdHJpbmcoRlhfQlNUUiBzdHIpCisgICAgeworICAgICAgICBBcHBlbmRCbG9jayhzdHIuR2V0UHRyKCksIHN0ci5HZXRMZW5ndGgoKSk7CisgICAgfQorCisgICAgaW5saW5lIHZvaWQJCQkJQXBwZW5kQnl0ZShGWF9CWVRFIGJ5dGUpCisgICAgeworICAgICAgICBpZiAobV9BbGxvY1NpemUgPD0gbV9EYXRhU2l6ZSkgeworICAgICAgICAgICAgRXhwYW5kQnVmKDEpOworICAgICAgICB9CisgICAgICAgIG1fcEJ1ZmZlclttX0RhdGFTaXplKytdID0gYnl0ZTsKKyAgICB9CisKKyAgICB2b2lkCQkJCQlJbnNlcnRCbG9jayhGWF9TVFJTSVpFIHBvcywgY29uc3Qgdm9pZCogcEJ1ZiwgRlhfU1RSU0laRSBzaXplKTsKKworICAgIHZvaWQJCQkJCUF0dGFjaERhdGEodm9pZCogcEJ1ZiwgRlhfU1RSU0laRSBzaXplKTsKKworICAgIHZvaWQJCQkJCUNvcHlEYXRhKGNvbnN0IHZvaWQqIHBCdWYsIEZYX1NUUlNJWkUgc2l6ZSk7CisKKyAgICB2b2lkCQkJCQlUYWtlT3ZlcihDRlhfQmluYXJ5QnVmJiBvdGhlcik7CisKKyAgICB2b2lkCQkJCQlEZWxldGUoaW50IHN0YXJ0X2luZGV4LCBpbnQgY291bnQpOworCisgICAgRlhfTFBCWVRFCQkJCUdldEJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wQnVmZmVyOworICAgIH0KKworICAgIEZYX1NUUlNJWkUJCQkJR2V0U2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9EYXRhU2l6ZTsKKyAgICB9CisKKyAgICBDRlhfQnl0ZVN0cmluZ0MJCQlHZXRCeXRlU3RyaW5nKCkgY29uc3Q7CisgICAgdm9pZAkJCQkJR2V0Qnl0ZVN0cmluZ0woQ0ZYX0J5dGVTdHJpbmdMICZzdHIpIGNvbnN0OworCisgICAgdm9pZAkJCQkJRGV0YWNoQnVmZmVyKCk7CisKKyAgICBJRlhfQWxsb2NhdG9yKgkJCW1fcEFsbG9jYXRvcjsKK3Byb3RlY3RlZDoKKworICAgIEZYX1NUUlNJWkUJCQkJbV9BbGxvY1N0ZXA7CisKKyAgICBGWF9MUEJZVEUJCQkJbV9wQnVmZmVyOworCisgICAgRlhfU1RSU0laRQkJCQltX0RhdGFTaXplOworCisgICAgRlhfU1RSU0laRQkJCQltX0FsbG9jU2l6ZTsKKworICAgIHZvaWQJCQkJCUV4cGFuZEJ1ZihGWF9TVFJTSVpFIHNpemUpOworfTsKK2NsYXNzIENGWF9CeXRlVGV4dEJ1ZiA6IHB1YmxpYyBDRlhfQmluYXJ5QnVmCit7CitwdWJsaWM6CisKKyAgICBDRlhfQnl0ZVRleHRCdWYoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpIDogQ0ZYX0JpbmFyeUJ1ZihwQWxsb2NhdG9yKSB7fQorCisgICAgdm9pZAkJCQkJb3BlcmF0b3IgPSAoRlhfQlNUUiBzdHIpOworCisgICAgdm9pZAkJCQkJQXBwZW5kQ2hhcihpbnQgY2gpCisgICAgeworICAgICAgICBBcHBlbmRCeXRlKChGWF9CWVRFKWNoKTsKKyAgICB9CisKKyAgICBDRlhfQnl0ZVRleHRCdWYmCQlvcGVyYXRvciA8PCAoaW50IGkpOworCisgICAgQ0ZYX0J5dGVUZXh0QnVmJgkJb3BlcmF0b3IgPDwgKEZYX0RXT1JEIGkpOworCisgICAgQ0ZYX0J5dGVUZXh0QnVmJgkJb3BlcmF0b3IgPDwgKGRvdWJsZSBmKTsKKworICAgIENGWF9CeXRlVGV4dEJ1ZiYJCW9wZXJhdG9yIDw8IChGWF9CU1RSIGxwc3opOworCisgICAgQ0ZYX0J5dGVUZXh0QnVmJgkJb3BlcmF0b3IgPDwgKGNvbnN0IENGWF9CeXRlVGV4dEJ1ZiYgYnVmKTsKKworICAgIEZYX1NUUlNJWkUJCQkJR2V0TGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0RhdGFTaXplOworICAgIH0KK307CitjbGFzcyBDRlhfV2lkZVRleHRCdWYgOiBwdWJsaWMgQ0ZYX0JpbmFyeUJ1ZgoreworcHVibGljOgorCisgICAgQ0ZYX1dpZGVUZXh0QnVmKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKSA6IENGWF9CaW5hcnlCdWYocEFsbG9jYXRvcikge30KKworICAgIHZvaWQJCQkJCW9wZXJhdG9yID0gKEZYX0xQQ1dTVFIgbHBzeik7CisKKyAgICB2b2lkCQkJCQlvcGVyYXRvciA9IChGWF9XU1RSIHN0cik7CisKKyAgICB2b2lkCQkJCQlBcHBlbmRDaGFyKEZYX1dDSEFSIHdjaCk7CisKKyAgICBDRlhfV2lkZVRleHRCdWYmCQlvcGVyYXRvciA8PCAoaW50IGkpOworCisgICAgQ0ZYX1dpZGVUZXh0QnVmJgkJb3BlcmF0b3IgPDwgKGRvdWJsZSBmKTsKKworICAgIENGWF9XaWRlVGV4dEJ1ZiYJCW9wZXJhdG9yIDw8IChGWF9MUENXU1RSIGxwc3opOworCisgICAgQ0ZYX1dpZGVUZXh0QnVmJgkJb3BlcmF0b3IgPDwgKEZYX1dTVFIgc3RyKTsKKyAgICBDRlhfV2lkZVRleHRCdWYmCQlvcGVyYXRvciA8PCAoY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJnN0cik7CisKKyAgICBDRlhfV2lkZVRleHRCdWYmCQlvcGVyYXRvciA8PCAoY29uc3QgQ0ZYX1dpZGVUZXh0QnVmJiBidWYpOworCisgICAgRlhfU1RSU0laRQkJCQlHZXRMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fRGF0YVNpemUgLyBzaXplb2YoRlhfV0NIQVIpOworICAgIH0KKworICAgIEZYX0xQV1NUUgkJCQlHZXRCdWZmZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChGWF9MUFdTVFIpbV9wQnVmZmVyOworICAgIH0KKworICAgIHZvaWQJCQkJCURlbGV0ZShpbnQgc3RhcnRfaW5kZXgsIGludCBjb3VudCkKKyAgICB7CisgICAgICAgIENGWF9CaW5hcnlCdWY6OkRlbGV0ZShzdGFydF9pbmRleCAqIHNpemVvZihGWF9XQ0hBUiksIGNvdW50ICogc2l6ZW9mKEZYX1dDSEFSKSk7CisgICAgfQorCisgICAgQ0ZYX1dpZGVTdHJpbmdDCQkJR2V0V2lkZVN0cmluZygpIGNvbnN0OworICAgIHZvaWQJCQkJCUdldFdpZGVTdHJpbmdMKENGWF9XaWRlU3RyaW5nTCYgd2lkZVRleHQpIGNvbnN0OworfTsKK2NsYXNzIENGWF9BcmNoaXZlU2F2ZXIgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ0ZYX0FyY2hpdmVTYXZlcihJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCkgOiBtX1NhdmluZ0J1ZihwQWxsb2NhdG9yKSwgbV9wU3RyZWFtKE5VTEwpIHt9CisKKyAgICBDRlhfQXJjaGl2ZVNhdmVyJgkJb3BlcmF0b3IgPDwgKEZYX0JZVEUgaSk7CisKKyAgICBDRlhfQXJjaGl2ZVNhdmVyJgkJb3BlcmF0b3IgPDwgKGludCBpKTsKKworICAgIENGWF9BcmNoaXZlU2F2ZXImCQlvcGVyYXRvciA8PCAoRlhfRFdPUkQgaSk7CisKKyAgICBDRlhfQXJjaGl2ZVNhdmVyJgkJb3BlcmF0b3IgPDwgKEZYX0ZMT0FUIGkpOworCisgICAgQ0ZYX0FyY2hpdmVTYXZlciYJCW9wZXJhdG9yIDw8IChkb3VibGUgaSk7CisKKyAgICBDRlhfQXJjaGl2ZVNhdmVyJgkJb3BlcmF0b3IgPDwgKEZYX0JTVFIgYnN0cik7CisKKyAgICBDRlhfQXJjaGl2ZVNhdmVyJgkJb3BlcmF0b3IgPDwgKEZYX0xQQ1dTVFIgYnN0cik7CisKKyAgICBDRlhfQXJjaGl2ZVNhdmVyJgkJb3BlcmF0b3IgPDwgKGNvbnN0IENGWF9XaWRlU3RyaW5nJiB3c3RyKTsKKworICAgIHZvaWQJCQkJCVdyaXRlKGNvbnN0IHZvaWQqIHBEYXRhLCBGWF9TVFJTSVpFIGR3U2l6ZSk7CisKKyAgICBGWF9JTlRQVFIJCQkJR2V0TGVuZ3RoKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX1NhdmluZ0J1Zi5HZXRTaXplKCk7CisgICAgfQorCisgICAgRlhfTFBDQllURQkJCQlHZXRCdWZmZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fU2F2aW5nQnVmLkdldEJ1ZmZlcigpOworICAgIH0KKworICAgIHZvaWQJCQkJCVNldFN0cmVhbShJRlhfRmlsZVN0cmVhbSogcFN0cmVhbSkKKyAgICB7CisgICAgICAgIG1fcFN0cmVhbSA9IHBTdHJlYW07CisgICAgfQorcHJvdGVjdGVkOgorCisgICAgQ0ZYX0JpbmFyeUJ1ZgkJCW1fU2F2aW5nQnVmOworCisgICAgSUZYX0ZpbGVTdHJlYW0qCQkJbV9wU3RyZWFtOworfTsKK2NsYXNzIENGWF9BcmNoaXZlTG9hZGVyIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENGWF9BcmNoaXZlTG9hZGVyKEZYX0xQQ0JZVEUgcERhdGEsIEZYX0RXT1JEIGR3U2l6ZSk7CisKKyAgICBDRlhfQXJjaGl2ZUxvYWRlciYJCW9wZXJhdG9yID4+IChGWF9CWVRFJiBpKTsKKworICAgIENGWF9BcmNoaXZlTG9hZGVyJgkJb3BlcmF0b3IgPj4gKGludCYgaSk7CisKKyAgICBDRlhfQXJjaGl2ZUxvYWRlciYJCW9wZXJhdG9yID4+IChGWF9EV09SRCYgaSk7CisKKyAgICBDRlhfQXJjaGl2ZUxvYWRlciYJCW9wZXJhdG9yID4+IChGWF9GTE9BVCYgaSk7CisKKyAgICBDRlhfQXJjaGl2ZUxvYWRlciYJCW9wZXJhdG9yID4+IChkb3VibGUmIGkpOworCisgICAgQ0ZYX0FyY2hpdmVMb2FkZXImCQlvcGVyYXRvciA+PiAoQ0ZYX0J5dGVTdHJpbmcmIGJzdHIpOworCisgICAgQ0ZYX0FyY2hpdmVMb2FkZXImCQlvcGVyYXRvciA+PiAoQ0ZYX1dpZGVTdHJpbmcmIHdzdHIpOworCisgICAgRlhfQk9PTAkJCQkJSXNFT0YoKTsKKworICAgIEZYX0JPT0wJCQkJCVJlYWQodm9pZCogcEJ1ZiwgRlhfRFdPUkQgZHdTaXplKTsKK3Byb3RlY3RlZDoKKworICAgIEZYX0RXT1JECQkJCW1fTG9hZGluZ1BvczsKKworICAgIEZYX0xQQ0JZVEUJCQkJbV9wTG9hZGluZ0J1ZjsKKworICAgIEZYX0RXT1JECQkJCW1fTG9hZGluZ1NpemU7Cit9OworY2xhc3MgSUZYX0J1ZmZlckFyY2hpdmUKK3sKK3B1YmxpYzoKKworICAgIElGWF9CdWZmZXJBcmNoaXZlKEZYX1NUUlNJWkUgc2l6ZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpOworCisKKyAgICB2aXJ0dWFsIHZvaWQJCQlDbGVhcigpOworCisKKyAgICBGWF9CT09MCQkJCQlGbHVzaCgpOworCisKKyAgICBGWF9JTlQzMgkJCQlBcHBlbmRCbG9jayhjb25zdCB2b2lkKiBwQnVmLCBzaXplX3Qgc2l6ZSk7CisKKyAgICBGWF9JTlQzMgkJCQlBcHBlbmRCeXRlKEZYX0JZVEUgYnl0ZSk7CisKKyAgICBGWF9JTlQzMgkJCQlBcHBlbmREV29yZChGWF9EV09SRCBpKTsKKworCisgICAgRlhfSU5UMzIJCQkJQXBwZW5kU3RyaW5nKEZYX0JTVFIgbHBzeik7CisKK3Byb3RlY3RlZDoKKworICAgIHZpcnR1YWwJRlhfQk9PTAkJCURvV29yayhjb25zdCB2b2lkKiBwQnVmLCBzaXplX3Qgc2l6ZSkgPSAwOworCisKKyAgICBJRlhfQWxsb2NhdG9yKgkJCW1fcEFsbG9jYXRvcjsKKworICAgIEZYX1NUUlNJWkUJCQkJbV9CdWZTaXplOworCisgICAgRlhfTFBCWVRFCQkJCW1fcEJ1ZmZlcjsKKworICAgIEZYX1NUUlNJWkUJCQkJbV9MZW5ndGg7Cit9OworY2xhc3MgQ0ZYX0ZpbGVCdWZmZXJBcmNoaXZlIDogcHVibGljIElGWF9CdWZmZXJBcmNoaXZlLCBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENGWF9GaWxlQnVmZmVyQXJjaGl2ZShGWF9TVFJTSVpFIHNpemUgPSAzMjc2OCwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpOworICAgIH5DRlhfRmlsZUJ1ZmZlckFyY2hpdmUoKTsKKyAgICB2aXJ0dWFsIHZvaWQJCQlDbGVhcigpOworCisgICAgRlhfQk9PTAkJCQkJQXR0YWNoRmlsZShJRlhfU3RyZWFtV3JpdGUgKnBGaWxlLCBGWF9CT09MIGJUYWtlb3ZlciA9IEZBTFNFKTsKKworICAgIEZYX0JPT0wJCQkJCUF0dGFjaEZpbGUoRlhfTFBDV1NUUiBmaWxlbmFtZSk7CisKKyAgICBGWF9CT09MCQkJCQlBdHRhY2hGaWxlKEZYX0xQQ1NUUiBmaWxlbmFtZSk7Citwcml2YXRlOgorCisgICAgdmlydHVhbCBGWF9CT09MCQkJRG9Xb3JrKGNvbnN0IHZvaWQqIHBCdWYsIHNpemVfdCBzaXplKTsKKworICAgIElGWF9TdHJlYW1Xcml0ZQkJCSptX3BGaWxlOworCisgICAgRlhfQk9PTAkJCQkJbV9iVGFrZW92ZXI7Cit9Oworc3RydWN0IENGWF9DaGFyTWFwIHsKKworICAgIHN0YXRpYyBDRlhfQ2hhck1hcCoJCUdldERlZmF1bHRNYXBwZXIoRlhfSU5UMzIgY29kZXBhZ2UgPSAwKTsKKworCisgICAgQ0ZYX1dpZGVTdHJpbmcJKCptX0dldFdpZGVTdHJpbmcpKENGWF9DaGFyTWFwKiBwTWFwLCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgYnN0cik7CisKKyAgICBDRlhfQnl0ZVN0cmluZwkoKm1fR2V0Qnl0ZVN0cmluZykoQ0ZYX0NoYXJNYXAqIHBNYXAsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiB3c3RyKTsKKworICAgIEZYX0lOVDMyCQkoKm1fR2V0Q29kZVBhZ2UpKCk7Cit9OworY2xhc3MgQ0ZYX1VURjhEZWNvZGVyCit7CitwdWJsaWM6CisKKyAgICBDRlhfVVRGOERlY29kZXIoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpIDogbV9CdWZmZXIocEFsbG9jYXRvcikKKyAgICB7CisgICAgICAgIG1fUGVuZGluZ0J5dGVzID0gMDsKKyAgICB9CisKKyAgICB2b2lkCQkJQ2xlYXIoKTsKKworICAgIHZvaWQJCQlJbnB1dChGWF9CWVRFIGJ5dGUpOworCisgICAgdm9pZAkJCUFwcGVuZENoYXIoRlhfRFdPUkQgY2gpOworCisgICAgdm9pZAkJCUNsZWFyU3RhdHVzKCkKKyAgICB7CisgICAgICAgIG1fUGVuZGluZ0J5dGVzID0gMDsKKyAgICB9CisKKyAgICBDRlhfV2lkZVN0cmluZ0MJR2V0UmVzdWx0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0J1ZmZlci5HZXRXaWRlU3RyaW5nKCk7CisgICAgfQorICAgIHZvaWQJCQlHZXRSZXN1bHQoQ0ZYX1dpZGVTdHJpbmdMICZyZXN1bHQpIGNvbnN0CisgICAgeworICAgICAgICBtX0J1ZmZlci5HZXRXaWRlU3RyaW5nTChyZXN1bHQpOworICAgIH0KK3Byb3RlY3RlZDoKKworICAgIGludAkJCQltX1BlbmRpbmdCeXRlczsKKworICAgIEZYX0RXT1JECQltX1BlbmRpbmdDaGFyOworCisgICAgQ0ZYX1dpZGVUZXh0QnVmCW1fQnVmZmVyOworfTsKK2NsYXNzIENGWF9VVEY4RW5jb2RlcgoreworcHVibGljOgorCisgICAgQ0ZYX1VURjhFbmNvZGVyKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKSA6IG1fQnVmZmVyKHBBbGxvY2F0b3IpCisgICAgeworICAgICAgICBtX1VURjE2Rmlyc3QgPSAwOworICAgIH0KKworICAgIHZvaWQJCQlJbnB1dChGWF9XQ0hBUiB1bmljb2RlKTsKKworICAgIHZvaWQJCQlBcHBlbmRTdHIoRlhfQlNUUiBzdHIpCisgICAgeworICAgICAgICBtX1VURjE2Rmlyc3QgPSAwOworICAgICAgICBtX0J1ZmZlciA8PCBzdHI7CisgICAgfQorCisgICAgQ0ZYX0J5dGVTdHJpbmdDCUdldFJlc3VsdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9CdWZmZXIuR2V0Qnl0ZVN0cmluZygpOworICAgIH0KKyAgICB2b2lkCQkJR2V0UmVzdWx0KENGWF9CeXRlU3RyaW5nTCAmcmVzdWx0KSBjb25zdAorICAgIHsKKyAgICAgICAgbV9CdWZmZXIuR2V0Qnl0ZVN0cmluZ0wocmVzdWx0KTsKKyAgICB9Citwcm90ZWN0ZWQ6CisKKyAgICBDRlhfQnl0ZVRleHRCdWYJbV9CdWZmZXI7CisKKyAgICBGWF9EV09SRAkJbV9VVEYxNkZpcnN0OworfTsKK0NGWF9CeXRlU3RyaW5nIEZYX1VybEVuY29kZShjb25zdCBDRlhfV2lkZVN0cmluZyYgd3NVcmwpOworQ0ZYX1dpZGVTdHJpbmcgRlhfVXJsRGVjb2RlKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBic1VybCk7CitDRlhfQnl0ZVN0cmluZyBGWF9FbmNvZGVVUkkoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHdzVVJJKTsKK0NGWF9XaWRlU3RyaW5nIEZYX0RlY29kZVVSSShjb25zdCBDRlhfQnl0ZVN0cmluZyYgYnNVUkkpOworY2xhc3MgQ0ZYX0Jhc2ljQXJyYXkgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgSUZYX0FsbG9jYXRvcioJbV9wQWxsb2NhdG9yOworcHJvdGVjdGVkOgorCisgICAgQ0ZYX0Jhc2ljQXJyYXkoaW50IHVuaXRfc2l6ZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpOworCisgICAgfkNGWF9CYXNpY0FycmF5KCk7CisKKyAgICBGWF9CT09MCQkJU2V0U2l6ZShpbnQgbk5ld1NpemUsIGludCBuR3Jvd0J5KTsKKworICAgIEZYX0JPT0wJCQlBcHBlbmQoY29uc3QgQ0ZYX0Jhc2ljQXJyYXkmIHNyYyk7CisKKyAgICBGWF9CT09MCQkJQ29weShjb25zdCBDRlhfQmFzaWNBcnJheSYgc3JjKTsKKworICAgIEZYX0xQQllURQkJSW5zZXJ0U3BhY2VBdChpbnQgbkluZGV4LCBpbnQgbkNvdW50KTsKKworICAgIEZYX0JPT0wJCQlSZW1vdmVBdChpbnQgbkluZGV4LCBpbnQgbkNvdW50KTsKKworICAgIEZYX0JPT0wJCQlJbnNlcnRBdChpbnQgblN0YXJ0SW5kZXgsIGNvbnN0IENGWF9CYXNpY0FycmF5KiBwTmV3QXJyYXkpOworCisgICAgY29uc3Qgdm9pZCoJCUdldERhdGFQdHIoaW50IGluZGV4KSBjb25zdDsKK3Byb3RlY3RlZDoKKworICAgIEZYX0xQQllURQkJbV9wRGF0YTsKKworICAgIGludAkJCQltX25TaXplOworCisgICAgaW50CQkJCW1fbk1heFNpemU7CisKKyAgICBpbnQJCQkJbV9uR3Jvd0J5OworCisgICAgaW50CQkJCW1fblVuaXRTaXplOworfTsKK3RlbXBsYXRlPGNsYXNzIFRZUEU+CitjbGFzcyBDRlhfQXJyYXlUZW1wbGF0ZSA6IHB1YmxpYyBDRlhfQmFzaWNBcnJheQoreworcHVibGljOgorCisgICAgQ0ZYX0FycmF5VGVtcGxhdGUoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpIDogQ0ZYX0Jhc2ljQXJyYXkoc2l6ZW9mKFRZUEUpLCBwQWxsb2NhdG9yKSB7fQorCisgICAgaW50CQkJR2V0U2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9uU2l6ZTsKKyAgICB9CisKKyAgICBpbnQJCQlHZXRVcHBlckJvdW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX25TaXplIC0gMTsKKyAgICB9CisKKyAgICBGWF9CT09MCQlTZXRTaXplKGludCBuTmV3U2l6ZSwgaW50IG5Hcm93QnkgPSAtMSkKKyAgICB7CisgICAgICAgIHJldHVybiBDRlhfQmFzaWNBcnJheTo6U2V0U2l6ZShuTmV3U2l6ZSwgbkdyb3dCeSk7CisgICAgfQorCisgICAgdm9pZAkJUmVtb3ZlQWxsKCkKKyAgICB7CisgICAgICAgIFNldFNpemUoMCwgLTEpOworICAgIH0KKworICAgIGNvbnN0IFRZUEUJR2V0QXQoaW50IG5JbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChuSW5kZXggPCAwIHx8IG5JbmRleCA+PSBtX25TaXplKSB7CisgICAgICAgICAgICByZXR1cm4gKGNvbnN0IFRZUEUmKSgqKHZvbGF0aWxlIGNvbnN0IFRZUEUqKU5VTEwpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAoKGNvbnN0IFRZUEUqKW1fcERhdGEpW25JbmRleF07CisgICAgfQorCisgICAgRlhfQk9PTAkJU2V0QXQoaW50IG5JbmRleCwgVFlQRSBuZXdFbGVtZW50KQorICAgIHsKKyAgICAgICAgaWYgKG5JbmRleCA8IDAgfHwgbkluZGV4ID49IG1fblNpemUpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICAoKFRZUEUqKW1fcERhdGEpW25JbmRleF0gPSBuZXdFbGVtZW50OworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBUWVBFJgkJRWxlbWVudEF0KGludCBuSW5kZXgpCisgICAgeworICAgICAgICBpZiAobkluZGV4IDwgMCB8fCBuSW5kZXggPj0gbV9uU2l6ZSkgeworICAgICAgICAgICAgcmV0dXJuICooVFlQRSopTlVMTDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKChUWVBFKiltX3BEYXRhKVtuSW5kZXhdOworICAgIH0KKworICAgIGNvbnN0IFRZUEUqCUdldERhdGEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChjb25zdCBUWVBFKiltX3BEYXRhOworICAgIH0KKworICAgIFRZUEUqCQlHZXREYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiAoVFlQRSopbV9wRGF0YTsKKyAgICB9CisKKyAgICBGWF9CT09MCQlTZXRBdEdyb3coaW50IG5JbmRleCwgVFlQRSBuZXdFbGVtZW50KQorICAgIHsKKyAgICAgICAgaWYgKG5JbmRleCA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBpZiAobkluZGV4ID49IG1fblNpemUpCisgICAgICAgICAgICBpZiAoIVNldFNpemUobkluZGV4ICsgMSwgLTEpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAoKFRZUEUqKW1fcERhdGEpW25JbmRleF0gPSBuZXdFbGVtZW50OworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBGWF9CT09MCQlBZGQoVFlQRSBuZXdFbGVtZW50KQorICAgIHsKKyAgICAgICAgaWYgKG1fblNpemUgPCBtX25NYXhTaXplKSB7CisgICAgICAgICAgICBtX25TaXplICsrOworICAgICAgICB9IGVsc2UgaWYgKCFTZXRTaXplKG1fblNpemUgKyAxLCAtMSkpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICAoKFRZUEUqKW1fcERhdGEpW21fblNpemUgLSAxXSA9IG5ld0VsZW1lbnQ7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIEZYX0JPT0wJCUFwcGVuZChjb25zdCBDRlhfQXJyYXlUZW1wbGF0ZSYgc3JjKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENGWF9CYXNpY0FycmF5OjpBcHBlbmQoc3JjKTsKKyAgICB9CisKKyAgICBGWF9CT09MCQlDb3B5KGNvbnN0IENGWF9BcnJheVRlbXBsYXRlJiBzcmMpCisgICAgeworICAgICAgICByZXR1cm4gQ0ZYX0Jhc2ljQXJyYXk6OkNvcHkoc3JjKTsKKyAgICB9CisKKyAgICBUWVBFKgkJR2V0RGF0YVB0cihpbnQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gKFRZUEUqKUNGWF9CYXNpY0FycmF5OjpHZXREYXRhUHRyKGluZGV4KTsKKyAgICB9CisKKyAgICBUWVBFKgkJQWRkU3BhY2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChUWVBFKilDRlhfQmFzaWNBcnJheTo6SW5zZXJ0U3BhY2VBdChtX25TaXplLCAxKTsKKyAgICB9CisKKyAgICBUWVBFKgkJSW5zZXJ0U3BhY2VBdChpbnQgbkluZGV4LCBpbnQgbkNvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIChUWVBFKilDRlhfQmFzaWNBcnJheTo6SW5zZXJ0U3BhY2VBdChuSW5kZXgsIG5Db3VudCk7CisgICAgfQorCisgICAgY29uc3QgVFlQRQlvcGVyYXRvcltdKGludCBuSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobkluZGV4IDwgMCB8fCBuSW5kZXggPj0gbV9uU2l6ZSkgeworICAgICAgICAgICAgKih2b2xhdGlsZSBjaGFyKikwID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKChjb25zdCBUWVBFKiltX3BEYXRhKVtuSW5kZXhdOworICAgIH0KKworICAgIFRZUEUmCQlvcGVyYXRvcltdKGludCBuSW5kZXgpCisgICAgeworICAgICAgICBpZiAobkluZGV4IDwgMCB8fCBuSW5kZXggPj0gbV9uU2l6ZSkgeworICAgICAgICAgICAgKih2b2xhdGlsZSBjaGFyKikwID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKChUWVBFKiltX3BEYXRhKVtuSW5kZXhdOworICAgIH0KKworICAgIEZYX0JPT0wJCUluc2VydEF0KGludCBuSW5kZXgsIFRZUEUgbmV3RWxlbWVudCwgaW50IG5Db3VudCA9IDEpCisgICAgeworICAgICAgICBpZiAoIUluc2VydFNwYWNlQXQobkluZGV4LCBuQ291bnQpKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKG5Db3VudC0tKSB7CisgICAgICAgICAgICAoKFRZUEUqKW1fcERhdGEpW25JbmRleCsrXSA9IG5ld0VsZW1lbnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgRlhfQk9PTAkJUmVtb3ZlQXQoaW50IG5JbmRleCwgaW50IG5Db3VudCA9IDEpCisgICAgeworICAgICAgICByZXR1cm4gQ0ZYX0Jhc2ljQXJyYXk6OlJlbW92ZUF0KG5JbmRleCwgbkNvdW50KTsKKyAgICB9CisKKyAgICBGWF9CT09MCQlJbnNlcnRBdChpbnQgblN0YXJ0SW5kZXgsIGNvbnN0IENGWF9CYXNpY0FycmF5KiBwTmV3QXJyYXkpCisgICAgeworICAgICAgICByZXR1cm4gQ0ZYX0Jhc2ljQXJyYXk6Okluc2VydEF0KG5TdGFydEluZGV4LCBwTmV3QXJyYXkpOworICAgIH0KKworICAgIGludAkJCUZpbmQoVFlQRSBkYXRhLCBpbnQgaVN0YXJ0ID0gMCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpU3RhcnQgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgZm9yICg7IGlTdGFydCA8IChpbnQpbV9uU2l6ZTsgaVN0YXJ0ICsrKQorICAgICAgICAgICAgaWYgKCgoVFlQRSopbV9wRGF0YSlbaVN0YXJ0XSA9PSBkYXRhKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGlTdGFydDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KK307Cit0eXBlZGVmIENGWF9BcnJheVRlbXBsYXRlPEZYX0JZVEU+CQlDRlhfQnl0ZUFycmF5OwordHlwZWRlZiBDRlhfQXJyYXlUZW1wbGF0ZTxGWF9XT1JEPgkJQ0ZYX1dvcmRBcnJheTsKK3R5cGVkZWYgQ0ZYX0FycmF5VGVtcGxhdGU8RlhfRFdPUkQ+CQlDRlhfRFdvcmRBcnJheTsKK3R5cGVkZWYgQ0ZYX0FycmF5VGVtcGxhdGU8dm9pZCo+CQlDRlhfUHRyQXJyYXk7Cit0eXBlZGVmIENGWF9BcnJheVRlbXBsYXRlPEZYX0ZJTEVTSVpFPglDRlhfRmlsZVNpemVBcnJheTsKK3R5cGVkZWYgQ0ZYX0FycmF5VGVtcGxhdGU8RlhfRkxPQVQ+CQlDRlhfRmxvYXRBcnJheTsKK3R5cGVkZWYgQ0ZYX0FycmF5VGVtcGxhdGU8RlhfSU5UMzI+CQlDRlhfSW50MzJBcnJheTsKK3RlbXBsYXRlIDxjbGFzcyBPYmplY3RDbGFzcz4KK2NsYXNzIENGWF9PYmplY3RBcnJheSA6IHB1YmxpYyBDRlhfQmFzaWNBcnJheQoreworcHVibGljOgorCisgICAgQ0ZYX09iamVjdEFycmF5KElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKSA6IENGWF9CYXNpY0FycmF5KHNpemVvZihPYmplY3RDbGFzcyksIHBBbGxvY2F0b3IpIHt9CisKKyAgICB+Q0ZYX09iamVjdEFycmF5KCkKKyAgICB7CisgICAgICAgIFJlbW92ZUFsbCgpOworICAgIH0KKworICAgIHZvaWQJCQlBZGQoY29uc3QgT2JqZWN0Q2xhc3MmIGRhdGEpCisgICAgeworICAgICAgICBuZXcgKCh2b2lkKilJbnNlcnRTcGFjZUF0KG1fblNpemUsIDEpKSBPYmplY3RDbGFzcyhkYXRhKTsKKyAgICB9CisKKyAgICBPYmplY3RDbGFzcyYJQWRkKCkKKyAgICB7CisgICAgICAgIHJldHVybiAqKE9iamVjdENsYXNzKikgbmV3ICgodm9pZCopSW5zZXJ0U3BhY2VBdChtX25TaXplLCAxKSkgT2JqZWN0Q2xhc3MoKTsKKyAgICB9CisKKyAgICB2b2lkKgkJCUFkZFNwYWNlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBJbnNlcnRTcGFjZUF0KG1fblNpemUsIDEpOworICAgIH0KKworICAgIEZYX0lOVDMyCQlBcHBlbmQoY29uc3QgQ0ZYX09iamVjdEFycmF5JiBzcmMsIEZYX0lOVDMyIG5TdGFydCA9IDAsIEZYX0lOVDMyIG5Db3VudCA9IC0xKQorICAgIHsKKyAgICAgICAgaWYgKG5Db3VudCA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBGWF9JTlQzMiBuU2l6ZSA9IHNyYy5HZXRTaXplKCk7CisgICAgICAgIGlmICghblNpemUpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIEZYU1lTX2Fzc2VydChuU3RhcnQgPiAtMSAmJiBuU3RhcnQgPCBuU2l6ZSk7CisgICAgICAgIGlmIChuQ291bnQgPCAwKSB7CisgICAgICAgICAgICBuQ291bnQgPSBuU2l6ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoblN0YXJ0ICsgbkNvdW50ID4gblNpemUpIHsKKyAgICAgICAgICAgIG5Db3VudCA9IG5TaXplIC0gblN0YXJ0OworICAgICAgICB9CisgICAgICAgIGlmIChuQ291bnQgPCAxKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBuU2l6ZSA9IG1fblNpemU7CisgICAgICAgIEluc2VydFNwYWNlQXQobV9uU2l6ZSwgbkNvdW50KTsKKyAgICAgICAgT2JqZWN0Q2xhc3MqIHBTdGFydE9iaiA9IChPYmplY3RDbGFzcyopR2V0RGF0YVB0cihuU2l6ZSk7CisgICAgICAgIG5TaXplID0gblN0YXJ0ICsgbkNvdW50OworICAgICAgICBmb3IgKEZYX0lOVDMyIGkgPSBuU3RhcnQ7IGkgPCBuU2l6ZTsgaSArKywgcFN0YXJ0T2JqKyspIHsKKyAgICAgICAgICAgIG5ldyAoKHZvaWQqKXBTdGFydE9iaikgT2JqZWN0Q2xhc3Moc3JjW2ldKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbkNvdW50OworICAgIH0KKworICAgIEZYX0lOVDMyCQlDb3B5KGNvbnN0IENGWF9PYmplY3RBcnJheSYgc3JjLCBGWF9JTlQzMiBuU3RhcnQgPSAwLCBGWF9JTlQzMiBuQ291bnQgPSAtMSkKKyAgICB7CisgICAgICAgIGlmIChuQ291bnQgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgRlhfSU5UMzIgblNpemUgPSBzcmMuR2V0U2l6ZSgpOworICAgICAgICBpZiAoIW5TaXplKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBGWFNZU19hc3NlcnQoblN0YXJ0ID4gLTEgJiYgblN0YXJ0IDwgblNpemUpOworICAgICAgICBpZiAobkNvdW50IDwgMCkgeworICAgICAgICAgICAgbkNvdW50ID0gblNpemU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5TdGFydCArIG5Db3VudCA+IG5TaXplKSB7CisgICAgICAgICAgICBuQ291bnQgPSBuU2l6ZSAtIG5TdGFydDsKKyAgICAgICAgfQorICAgICAgICBpZiAobkNvdW50IDwgMSkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgUmVtb3ZlQWxsKCk7CisgICAgICAgIFNldFNpemUobkNvdW50LCAtMSk7CisgICAgICAgIE9iamVjdENsYXNzKiBwU3RhcnRPYmogPSAoT2JqZWN0Q2xhc3MqKW1fcERhdGE7CisgICAgICAgIG5TaXplID0gblN0YXJ0ICsgbkNvdW50OworICAgICAgICBmb3IgKEZYX0lOVDMyIGkgPSBuU3RhcnQ7IGkgPCBuU2l6ZTsgaSArKywgcFN0YXJ0T2JqKyspIHsKKyAgICAgICAgICAgIG5ldyAoKHZvaWQqKXBTdGFydE9iaikgT2JqZWN0Q2xhc3Moc3JjW2ldKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbkNvdW50OworICAgIH0KKworICAgIGludAkJCQlHZXRTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX25TaXplOworICAgIH0KKworICAgIE9iamVjdENsYXNzJglvcGVyYXRvcltdIChpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBGWFNZU19hc3NlcnQoaW5kZXggPCBtX25TaXplKTsKKyAgICAgICAgcmV0dXJuICooT2JqZWN0Q2xhc3MqKUNGWF9CYXNpY0FycmF5OjpHZXREYXRhUHRyKGluZGV4KTsKKyAgICB9CisKKyAgICBPYmplY3RDbGFzcyoJR2V0RGF0YVB0cihpbnQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gKE9iamVjdENsYXNzKilDRlhfQmFzaWNBcnJheTo6R2V0RGF0YVB0cihpbmRleCk7CisgICAgfQorCisgICAgdm9pZAkJCVJlbW92ZUF0KGludCBpbmRleCkKKyAgICB7CisgICAgICAgIEZYU1lTX2Fzc2VydChpbmRleCA8IG1fblNpemUpOworICAgICAgICAoKE9iamVjdENsYXNzKilHZXREYXRhUHRyKGluZGV4KSktPn5PYmplY3RDbGFzcygpOworICAgICAgICBDRlhfQmFzaWNBcnJheTo6UmVtb3ZlQXQoaW5kZXgsIDEpOworICAgIH0KKworICAgIHZvaWQJCQlSZW1vdmVBbGwoKQorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX25TaXplOyBpICsrKSB7CisgICAgICAgICAgICAoKE9iamVjdENsYXNzKilHZXREYXRhUHRyKGkpKS0+fk9iamVjdENsYXNzKCk7CisgICAgICAgIH0KKyAgICAgICAgQ0ZYX0Jhc2ljQXJyYXk6OlNldFNpemUoMCwgLTEpOworICAgIH0KK307Cit0eXBlZGVmIENGWF9PYmplY3RBcnJheTxDRlhfQnl0ZVN0cmluZz4gQ0ZYX0J5dGVTdHJpbmdBcnJheTsKK3R5cGVkZWYgQ0ZYX09iamVjdEFycmF5PENGWF9XaWRlU3RyaW5nPiBDRlhfV2lkZVN0cmluZ0FycmF5OworY2xhc3MgQ0ZYX0Jhc2VTZWdtZW50ZWRBcnJheSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDRlhfQmFzZVNlZ21lbnRlZEFycmF5KGludCB1bml0X3NpemUgPSAxLCBpbnQgc2VnbWVudF91bml0cyA9IDUxMiwgaW50IGluZGV4X3NpemUgPSA4LCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7CisKKyAgICB+Q0ZYX0Jhc2VTZWdtZW50ZWRBcnJheSgpOworCisgICAgdm9pZAlTZXRVbml0U2l6ZShpbnQgdW5pdF9zaXplLCBpbnQgc2VnbWVudF91bml0cywgaW50IGluZGV4X3NpemUgPSA4KTsKKworICAgIHZvaWQqCUFkZCgpOworCisgICAgdm9pZCoJR2V0QXQoaW50IGluZGV4KSBjb25zdDsKKworICAgIHZvaWQJUmVtb3ZlQWxsKCk7CisKKyAgICB2b2lkCURlbGV0ZShpbnQgaW5kZXgsIGludCBjb3VudCA9IDEpOworCisgICAgaW50CQlHZXRTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0RhdGFTaXplOworICAgIH0KKworICAgIGludAkJR2V0U2VnbWVudFNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fU2VnbWVudFNpemU7CisgICAgfQorCisgICAgaW50CQlHZXRVbml0U2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9Vbml0U2l6ZTsKKyAgICB9CisKKyAgICB2b2lkKglJdGVyYXRlKEZYX0JPT0wgKCpjYWxsYmFjaykodm9pZCogcGFyYW0sIHZvaWQqIHBEYXRhKSwgdm9pZCogcGFyYW0pIGNvbnN0OworCisgICAgSUZYX0FsbG9jYXRvcioJbV9wQWxsb2NhdG9yOworcHJpdmF0ZToKKworICAgIGludAkJCQltX1VuaXRTaXplOworCisgICAgc2hvcnQJCQltX1NlZ21lbnRTaXplOworCisgICAgRlhfQllURQkJCW1fSW5kZXhTaXplOworCisgICAgRlhfQllURQkJCW1fSW5kZXhEZXB0aDsKKworICAgIGludAkJCQltX0RhdGFTaXplOworCisgICAgdm9pZCoJCQltX3BJbmRleDsKKyAgICB2b2lkKioJR2V0SW5kZXgoaW50IHNlZ19pbmRleCkgY29uc3Q7CisgICAgdm9pZCoJSXRlcmF0ZUluZGV4KGludCBsZXZlbCwgaW50JiBzdGFydCwgdm9pZCoqIHBJbmRleCwgRlhfQk9PTCAoKmNhbGxiYWNrKSh2b2lkKiBwYXJhbSwgdm9pZCogcERhdGEpLCB2b2lkKiBwYXJhbSkgY29uc3Q7CisgICAgdm9pZCoJSXRlcmF0ZVNlZ21lbnQoRlhfTFBDQllURSBwU2VnbWVudCwgaW50IGNvdW50LCBGWF9CT09MICgqY2FsbGJhY2spKHZvaWQqIHBhcmFtLCB2b2lkKiBwRGF0YSksIHZvaWQqIHBhcmFtKSBjb25zdDsKK307Cit0ZW1wbGF0ZSA8Y2xhc3MgRWxlbWVudFR5cGU+CitjbGFzcyBDRlhfU2VnbWVudGVkQXJyYXkgOiBwdWJsaWMgQ0ZYX0Jhc2VTZWdtZW50ZWRBcnJheQoreworcHVibGljOgorCisgICAgQ0ZYX1NlZ21lbnRlZEFycmF5KGludCBzZWdtZW50X3VuaXRzLCBpbnQgaW5kZXhfc2l6ZSA9IDgsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKQorICAgICAgICA6IENGWF9CYXNlU2VnbWVudGVkQXJyYXkoc2l6ZW9mKEVsZW1lbnRUeXBlKSwgc2VnbWVudF91bml0cywgaW5kZXhfc2l6ZSwgcEFsbG9jYXRvcikKKyAgICB7fQorCisgICAgdm9pZAlBZGQoRWxlbWVudFR5cGUgZGF0YSkKKyAgICB7CisgICAgICAgICooRWxlbWVudFR5cGUqKUNGWF9CYXNlU2VnbWVudGVkQXJyYXk6OkFkZCgpID0gZGF0YTsKKyAgICB9CisKKyAgICBFbGVtZW50VHlwZSYgb3BlcmF0b3IgW10gKGludCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiAqKEVsZW1lbnRUeXBlKilDRlhfQmFzZVNlZ21lbnRlZEFycmF5OjpHZXRBdChpbmRleCk7CisgICAgfQorfTsKK3RlbXBsYXRlIDxjbGFzcyBEYXRhVHlwZSwgaW50IEZpeGVkU2l6ZT4KK2NsYXNzIENGWF9GaXhlZEJ1Zkdyb3cgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENGWF9GaXhlZEJ1Zkdyb3coSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpCisgICAgICAgIDogbV9wQWxsb2NhdG9yKHBBbGxvY2F0b3IpCisgICAgICAgICwgbV9wRGF0YShOVUxMKQorICAgIHt9CisgICAgQ0ZYX0ZpeGVkQnVmR3JvdyhpbnQgZGF0YV9zaXplLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCkKKyAgICAgICAgOiBtX3BBbGxvY2F0b3IocEFsbG9jYXRvcikKKyAgICAgICAgLCBtX3BEYXRhKE5VTEwpCisgICAgeworICAgICAgICBpZiAoZGF0YV9zaXplID4gRml4ZWRTaXplKSB7CisgICAgICAgICAgICBtX3BEYXRhID0gRlhfQWxsb2NhdG9yX0FsbG9jKG1fcEFsbG9jYXRvciwgRGF0YVR5cGUsIGRhdGFfc2l6ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBGWFNZU19tZW1zZXQzMihtX0RhdGEsIDAsIHNpemVvZihEYXRhVHlwZSkqRml4ZWRTaXplKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIFNldERhdGFTaXplKGludCBkYXRhX3NpemUpCisgICAgeworICAgICAgICBpZiAobV9wRGF0YSkgeworICAgICAgICAgICAgRlhfQWxsb2NhdG9yX0ZyZWUobV9wQWxsb2NhdG9yLCBtX3BEYXRhKTsKKyAgICAgICAgfQorICAgICAgICBtX3BEYXRhID0gTlVMTDsKKyAgICAgICAgaWYgKGRhdGFfc2l6ZSA+IEZpeGVkU2l6ZSkgeworICAgICAgICAgICAgbV9wRGF0YSA9IEZYX0FsbG9jYXRvcl9BbGxvYyhtX3BBbGxvY2F0b3IsIERhdGFUeXBlLCBkYXRhX3NpemUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRlhTWVNfbWVtc2V0MzIobV9EYXRhLCAwLCBzaXplb2YoRGF0YVR5cGUpKkZpeGVkU2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgfkNGWF9GaXhlZEJ1Zkdyb3coKQorICAgIHsKKyAgICAgICAgaWYgKG1fcERhdGEpIHsKKyAgICAgICAgICAgIEZYX0FsbG9jYXRvcl9GcmVlKG1fcEFsbG9jYXRvciwgbV9wRGF0YSk7CisgICAgICAgIH0KKyAgICB9CisgICAgb3BlcmF0b3IgRGF0YVR5cGUqKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BEYXRhID8gbV9wRGF0YSA6IG1fRGF0YTsKKyAgICB9Citwcml2YXRlOgorICAgIElGWF9BbGxvY2F0b3IqCW1fcEFsbG9jYXRvcjsKKyAgICBEYXRhVHlwZQkJbV9EYXRhW0ZpeGVkU2l6ZV07CisgICAgRGF0YVR5cGUqCQltX3BEYXRhOworfTsKK3RlbXBsYXRlIDxjbGFzcyBEYXRhVHlwZT4KK2NsYXNzIENGWF9UZW1wQnVmCit7CitwdWJsaWM6CisgICAgQ0ZYX1RlbXBCdWYoaW50IHNpemUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKSA6IG1fcEFsbG9jYXRvcihwQWxsb2NhdG9yKQorICAgIHsKKyAgICAgICAgbV9wRGF0YSA9IEZYX0FsbG9jYXRvcl9BbGxvYyhtX3BBbGxvY2F0b3IsIERhdGFUeXBlLCBzaXplKTsKKyAgICB9CisgICAgfkNGWF9UZW1wQnVmKCkKKyAgICB7CisgICAgICAgIGlmIChtX3BEYXRhKSB7CisgICAgICAgICAgICBGWF9BbGxvY2F0b3JfRnJlZShtX3BBbGxvY2F0b3IsIG1fcERhdGEpOworICAgICAgICB9CisgICAgfQorICAgIERhdGFUeXBlJglvcGVyYXRvcltdKGludCBpKQorICAgIHsKKyAgICAgICAgRlhTWVNfYXNzZXJ0KG1fcERhdGEgIT0gTlVMTCk7CisgICAgICAgIHJldHVybiBtX3BEYXRhW2ldOworICAgIH0KKyAgICBvcGVyYXRvciBEYXRhVHlwZSooKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcERhdGE7CisgICAgfQorcHJpdmF0ZToKKyAgICBJRlhfQWxsb2NhdG9yKgltX3BBbGxvY2F0b3I7CisgICAgRGF0YVR5cGUqCQltX3BEYXRhOworfTsKK2NsYXNzIENGWF9NYXBQdHJUb1B0ciA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7Citwcm90ZWN0ZWQ6CisKKyAgICBzdHJ1Y3QgQ0Fzc29jIHsKKworICAgICAgICBDQXNzb2MqIHBOZXh0OworCisgICAgICAgIHZvaWQqIGtleTsKKworICAgICAgICB2b2lkKiB2YWx1ZTsKKyAgICB9OworcHVibGljOgorCisgICAgQ0ZYX01hcFB0clRvUHRyKGludCBuQmxvY2tTaXplID0gMTAsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsKKworICAgIH5DRlhfTWFwUHRyVG9QdHIoKTsKKworICAgIGludCBHZXRDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9uQ291bnQ7CisgICAgfQorCisgICAgRlhfQk9PTCBJc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX25Db3VudCA9PSAwOworICAgIH0KKworICAgIEZYX0JPT0wgTG9va3VwKHZvaWQqIGtleSwgdm9pZComIHJWYWx1ZSkgY29uc3Q7CisKKyAgICB2b2lkKiBHZXRWYWx1ZUF0KHZvaWQqIGtleSkgY29uc3Q7CisKKyAgICB2b2lkKiYgb3BlcmF0b3JbXSh2b2lkKiBrZXkpOworCisgICAgdm9pZCBTZXRBdCh2b2lkKiBrZXksIHZvaWQqIG5ld1ZhbHVlKQorICAgIHsKKyAgICAgICAgKCp0aGlzKVtrZXldID0gbmV3VmFsdWU7CisgICAgfQorCisgICAgRlhfQk9PTCBSZW1vdmVLZXkodm9pZCoga2V5KTsKKworICAgIHZvaWQgUmVtb3ZlQWxsKCk7CisKKyAgICBGWF9QT1NJVElPTiBHZXRTdGFydFBvc2l0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAobV9uQ291bnQgPT0gMCkgPyBOVUxMIDogKEZYX1BPU0lUSU9OKSAtIDE7CisgICAgfQorCisgICAgdm9pZCBHZXROZXh0QXNzb2MoRlhfUE9TSVRJT04mIHJOZXh0UG9zaXRpb24sIHZvaWQqJiByS2V5LCB2b2lkKiYgclZhbHVlKSBjb25zdDsKKworICAgIEZYX0RXT1JEIEdldEhhc2hUYWJsZVNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbkhhc2hUYWJsZVNpemU7CisgICAgfQorCisgICAgdm9pZCBJbml0SGFzaFRhYmxlKEZYX0RXT1JEIGhhc2hTaXplLCBGWF9CT09MIGJBbGxvY05vdyA9IFRSVUUpOworcHJvdGVjdGVkOgorCisgICAgSUZYX0FsbG9jYXRvcioJbV9wQWxsb2NhdG9yOworCisgICAgQ0Fzc29jKiogbV9wSGFzaFRhYmxlOworCisgICAgRlhfRFdPUkQgbV9uSGFzaFRhYmxlU2l6ZTsKKworICAgIGludCBtX25Db3VudDsKKworICAgIENBc3NvYyogbV9wRnJlZUxpc3Q7CisKKyAgICBzdHJ1Y3QgQ0ZYX1BsZXgqIG1fcEJsb2NrczsKKworICAgIGludCBtX25CbG9ja1NpemU7CisKKyAgICBGWF9EV09SRCBIYXNoS2V5KHZvaWQqIGtleSkgY29uc3Q7CisKKyAgICBDQXNzb2MqIE5ld0Fzc29jKCk7CisKKyAgICB2b2lkIEZyZWVBc3NvYyhDQXNzb2MqIHBBc3NvYyk7CisKKyAgICBDQXNzb2MqIEdldEFzc29jQXQodm9pZCoga2V5LCBGWF9EV09SRCYgaGFzaCkgY29uc3Q7Cit9OwordGVtcGxhdGUgPGNsYXNzIEtleVR5cGUsIGNsYXNzIFZhbHVlVHlwZT4KK2NsYXNzIENGWF9NYXBQdHJUZW1wbGF0ZSA6IHB1YmxpYyBDRlhfTWFwUHRyVG9QdHIKK3sKK3B1YmxpYzoKKworICAgIENGWF9NYXBQdHJUZW1wbGF0ZShJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCkgOiBDRlhfTWFwUHRyVG9QdHIoMTAsIHBBbGxvY2F0b3IpIHt9CisKKyAgICBGWF9CT09MCUxvb2t1cChLZXlUeXBlIGtleSwgVmFsdWVUeXBlJiByVmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBGWF9MUFZPSUQgcFZhbHVlID0gTlVMTDsKKyAgICAgICAgaWYgKCFDRlhfTWFwUHRyVG9QdHI6Okxvb2t1cCgodm9pZCopKEZYX1VJTlRQVFIpa2V5LCBwVmFsdWUpKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgclZhbHVlID0gKFZhbHVlVHlwZSkoRlhfVUlOVFBUUilwVmFsdWU7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIFZhbHVlVHlwZSYgb3BlcmF0b3JbXShLZXlUeXBlIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiAoVmFsdWVUeXBlJilDRlhfTWFwUHRyVG9QdHI6Om9wZXJhdG9yIFtdKCh2b2lkKikoRlhfVUlOVFBUUilrZXkpOworICAgIH0KKworICAgIHZvaWQgU2V0QXQoS2V5VHlwZSBrZXksIFZhbHVlVHlwZSBuZXdWYWx1ZSkKKyAgICB7CisgICAgICAgIENGWF9NYXBQdHJUb1B0cjo6U2V0QXQoKHZvaWQqKShGWF9VSU5UUFRSKWtleSwgKHZvaWQqKShGWF9VSU5UUFRSKW5ld1ZhbHVlKTsKKyAgICB9CisKKyAgICBGWF9CT09MCVJlbW92ZUtleShLZXlUeXBlIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBDRlhfTWFwUHRyVG9QdHI6OlJlbW92ZUtleSgodm9pZCopKEZYX1VJTlRQVFIpa2V5KTsKKyAgICB9CisKKyAgICB2b2lkIEdldE5leHRBc3NvYyhGWF9QT1NJVElPTiYgck5leHRQb3NpdGlvbiwgS2V5VHlwZSYgcktleSwgVmFsdWVUeXBlJiByVmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICB2b2lkKiBwS2V5ID0gTlVMTDsKKyAgICAgICAgdm9pZCogcFZhbHVlID0gTlVMTDsKKyAgICAgICAgQ0ZYX01hcFB0clRvUHRyOjpHZXROZXh0QXNzb2Mock5leHRQb3NpdGlvbiwgcEtleSwgcFZhbHVlKTsKKyAgICAgICAgcktleSA9IChLZXlUeXBlKShGWF9VSU5UUFRSKXBLZXk7CisgICAgICAgIHJWYWx1ZSA9IChWYWx1ZVR5cGUpKEZYX1VJTlRQVFIpcFZhbHVlOworICAgIH0KK307CitjbGFzcyBDRlhfQ01hcERXb3JkVG9EV29yZCA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDRlhfQ01hcERXb3JkVG9EV29yZChJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCkgOiBtX0J1ZmZlcihwQWxsb2NhdG9yKSB7fQorCisgICAgRlhfQk9PTAkJCUxvb2t1cChGWF9EV09SRCBrZXksIEZYX0RXT1JEJiB2YWx1ZSkgY29uc3Q7CisKKyAgICB2b2lkCQkJU2V0QXQoRlhfRFdPUkQga2V5LCBGWF9EV09SRCB2YWx1ZSk7CisKKyAgICB2b2lkCQkJRXN0aW1hdGVTaXplKEZYX0RXT1JEIHNpemUsIEZYX0RXT1JEIGdyb3dfYnkpOworCisgICAgRlhfUE9TSVRJT04JCUdldFN0YXJ0UG9zaXRpb24oKSBjb25zdDsKKworICAgIHZvaWQJCQlHZXROZXh0QXNzb2MoRlhfUE9TSVRJT04mIHBvcywgRlhfRFdPUkQmIGtleSwgRlhfRFdPUkQmIHZhbHVlKSBjb25zdDsKK3Byb3RlY3RlZDoKKworICAgIENGWF9CaW5hcnlCdWYJbV9CdWZmZXI7Cit9OworY2xhc3MgQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0ciA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7Citwcm90ZWN0ZWQ6CisKKyAgICBzdHJ1Y3QgQ0Fzc29jIHsKKworICAgICAgICBDQXNzb2MqIHBOZXh0OworCisgICAgICAgIEZYX0RXT1JEIG5IYXNoVmFsdWU7CisKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcga2V5OworCisgICAgICAgIHZvaWQqIHZhbHVlOworICAgIH07CitwdWJsaWM6CisKKyAgICBDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyKGludCBuQmxvY2tTaXplID0gMTAsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsKKworICAgIGludCBHZXRDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9uQ291bnQ7CisgICAgfQorCisgICAgRlhfQk9PTCBJc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX25Db3VudCA9PSAwOworICAgIH0KKworICAgIEZYX0JPT0wgTG9va3VwKEZYX0JTVFIga2V5LCB2b2lkKiYgclZhbHVlKSBjb25zdDsKKworICAgIHZvaWQqJiBvcGVyYXRvcltdKEZYX0JTVFIga2V5KTsKKworICAgIHZvaWQgU2V0QXQoRlhfQlNUUiBrZXksIHZvaWQqIG5ld1ZhbHVlKQorICAgIHsKKyAgICAgICAgKCp0aGlzKVtrZXldID0gbmV3VmFsdWU7CisgICAgfQorCisgICAgRlhfQk9PTCBSZW1vdmVLZXkoRlhfQlNUUiBrZXkpOworCisgICAgdm9pZCBSZW1vdmVBbGwoKTsKKworICAgIEZYX1BPU0lUSU9OIEdldFN0YXJ0UG9zaXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChtX25Db3VudCA9PSAwKSA/IE5VTEwgOiAoRlhfUE9TSVRJT04pIC0gMTsKKyAgICB9CisKKyAgICB2b2lkIEdldE5leHRBc3NvYyhGWF9QT1NJVElPTiYgck5leHRQb3NpdGlvbiwgQ0ZYX0J5dGVTdHJpbmcmIHJLZXksIHZvaWQqJiByVmFsdWUpIGNvbnN0OworCisgICAgRlhfTFBWT0lECQlHZXROZXh0VmFsdWUoRlhfUE9TSVRJT04mIHJOZXh0UG9zaXRpb24pIGNvbnN0OworCisgICAgRlhfRFdPUkQgR2V0SGFzaFRhYmxlU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9uSGFzaFRhYmxlU2l6ZTsKKyAgICB9CisKKyAgICB2b2lkIEluaXRIYXNoVGFibGUoRlhfRFdPUkQgaGFzaFNpemUsIEZYX0JPT0wgYkFsbG9jTm93ID0gVFJVRSk7CisKKyAgICBGWF9EV09SRCBIYXNoS2V5KEZYX0JTVFIga2V5KSBjb25zdDsKK3Byb3RlY3RlZDoKKworICAgIElGWF9BbGxvY2F0b3IqCW1fcEFsbG9jYXRvcjsKKworICAgIENBc3NvYyoqIG1fcEhhc2hUYWJsZTsKKworICAgIEZYX0RXT1JEIG1fbkhhc2hUYWJsZVNpemU7CisKKyAgICBpbnQgbV9uQ291bnQ7CisKKyAgICBDQXNzb2MqIG1fcEZyZWVMaXN0OworCisgICAgc3RydWN0IENGWF9QbGV4KiBtX3BCbG9ja3M7CisKKyAgICBpbnQgbV9uQmxvY2tTaXplOworCisgICAgQ0Fzc29jKiBOZXdBc3NvYygpOworCisgICAgdm9pZCBGcmVlQXNzb2MoQ0Fzc29jKiBwQXNzb2MpOworCisgICAgQ0Fzc29jKiBHZXRBc3NvY0F0KEZYX0JTVFIga2V5LCBGWF9EV09SRCYgaGFzaCkgY29uc3Q7CitwdWJsaWM6CisKKyAgICB+Q0ZYX01hcEJ5dGVTdHJpbmdUb1B0cigpOworfTsKK2NsYXNzIENGWF9DTWFwQnl0ZVN0cmluZ1RvUHRyIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENGWF9DTWFwQnl0ZVN0cmluZ1RvUHRyKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsKKworICAgIH5DRlhfQ01hcEJ5dGVTdHJpbmdUb1B0cigpOworCisgICAgdm9pZAkJCVJlbW92ZUFsbCgpOworCisgICAgRlhfUE9TSVRJT04JCUdldFN0YXJ0UG9zaXRpb24oKSBjb25zdDsKKworICAgIHZvaWQJCQlHZXROZXh0QXNzb2MoRlhfUE9TSVRJT04mIHJOZXh0UG9zaXRpb24sIENGWF9CeXRlU3RyaW5nJiByS2V5LCB2b2lkKiYgclZhbHVlKSBjb25zdDsKKworICAgIEZYX0xQVk9JRAkJR2V0TmV4dFZhbHVlKEZYX1BPU0lUSU9OJiByTmV4dFBvc2l0aW9uKSBjb25zdDsKKworICAgIEZYX0JPT0wJCQlMb29rdXAoRlhfQlNUUiBrZXksIHZvaWQqJiByVmFsdWUpIGNvbnN0OworCisgICAgdm9pZAkJCVNldEF0KEZYX0JTVFIga2V5LCB2b2lkKiB2YWx1ZSk7CisKKyAgICB2b2lkCQkJUmVtb3ZlS2V5KEZYX0JTVFIga2V5KTsKKworICAgIGludAkJCQlHZXRDb3VudCgpIGNvbnN0OworCisgICAgdm9pZAkJCUFkZFZhbHVlKEZYX0JTVFIga2V5LCB2b2lkKiBwVmFsdWUpOworcHJpdmF0ZToKKworICAgIENGWF9CYXNlU2VnbWVudGVkQXJyYXkJCQltX0J1ZmZlcjsKK307CitjbGFzcyBDRlhfUHRyTGlzdCA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7Citwcm90ZWN0ZWQ6CisKKyAgICBzdHJ1Y3QgQ05vZGUgeworCisgICAgICAgIENOb2RlKiBwTmV4dDsKKworICAgICAgICBDTm9kZSogcFByZXY7CisKKyAgICAgICAgdm9pZCogZGF0YTsKKyAgICB9OworcHVibGljOgorCisgICAgQ0ZYX1B0ckxpc3QoaW50IG5CbG9ja1NpemUgPSAxMCwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpOworCisgICAgRlhfUE9TSVRJT04gR2V0SGVhZFBvc2l0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoRlhfUE9TSVRJT04pbV9wTm9kZUhlYWQ7CisgICAgfQorCisgICAgRlhfUE9TSVRJT04gR2V0VGFpbFBvc2l0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoRlhfUE9TSVRJT04pbV9wTm9kZVRhaWw7CisgICAgfQorCisgICAgdm9pZCoJR2V0TmV4dChGWF9QT1NJVElPTiYgclBvc2l0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgQ05vZGUqIHBOb2RlID0gKENOb2RlKikgclBvc2l0aW9uOworICAgICAgICByUG9zaXRpb24gPSAoRlhfUE9TSVRJT04pIHBOb2RlLT5wTmV4dDsKKyAgICAgICAgcmV0dXJuIHBOb2RlLT5kYXRhOworICAgIH0KKworICAgIHZvaWQqCUdldFByZXYoRlhfUE9TSVRJT04mIHJQb3NpdGlvbikgY29uc3QKKyAgICB7CisgICAgICAgIENOb2RlKiBwTm9kZSA9IChDTm9kZSopIHJQb3NpdGlvbjsKKyAgICAgICAgclBvc2l0aW9uID0gKEZYX1BPU0lUSU9OKSBwTm9kZS0+cFByZXY7CisgICAgICAgIHJldHVybiBwTm9kZS0+ZGF0YTsKKyAgICB9CisKKyAgICBGWF9QT1NJVElPTglHZXROZXh0UG9zaXRpb24oRlhfUE9TSVRJT04gcG9zKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICgoQ05vZGUqKXBvcyktPnBOZXh0OworICAgIH0KKworICAgIEZYX1BPU0lUSU9OCUdldFByZXZQb3NpdGlvbihGWF9QT1NJVElPTiBwb3MpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKChDTm9kZSopcG9zKS0+cFByZXY7CisgICAgfQorCisgICAgdm9pZCoJR2V0QXQoRlhfUE9TSVRJT04gclBvc2l0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgQ05vZGUqIHBOb2RlID0gKENOb2RlKikgclBvc2l0aW9uOworICAgICAgICByZXR1cm4gcE5vZGUtPmRhdGE7CisgICAgfQorCisgICAgaW50CQlHZXRDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9uQ291bnQ7CisgICAgfQorCisgICAgRlhfUE9TSVRJT04JQWRkVGFpbCh2b2lkKiBuZXdFbGVtZW50KTsKKworICAgIEZYX1BPU0lUSU9OIEFkZEhlYWQodm9pZCogbmV3RWxlbWVudCk7CisKKyAgICB2b2lkCVNldEF0KEZYX1BPU0lUSU9OIHBvcywgdm9pZCogbmV3RWxlbWVudCkKKyAgICB7CisgICAgICAgIENOb2RlKiBwTm9kZSA9IChDTm9kZSopIHBvczsKKyAgICAgICAgcE5vZGUtPmRhdGEgPSBuZXdFbGVtZW50OworICAgIH0KKworICAgIEZYX1BPU0lUSU9OIEluc2VydEFmdGVyKEZYX1BPU0lUSU9OIHBvcywgdm9pZCogbmV3RWxlbWVudCk7CisKKyAgICBGWF9QT1NJVElPTiBGaW5kKHZvaWQqIHNlYXJjaFZhbHVlLCBGWF9QT1NJVElPTiBzdGFydEFmdGVyID0gTlVMTCApIGNvbnN0OworCisgICAgRlhfUE9TSVRJT04gRmluZEluZGV4KGludCBpbmRleCkgY29uc3Q7CisKKyAgICB2b2lkCVJlbW92ZUF0KEZYX1BPU0lUSU9OIHBvcyk7CisKKyAgICB2b2lkCVJlbW92ZUFsbCgpOworcHJvdGVjdGVkOgorCisgICAgSUZYX0FsbG9jYXRvcioJbV9wQWxsb2NhdG9yOworCisgICAgQ05vZGUqIG1fcE5vZGVIZWFkOworCisgICAgQ05vZGUqIG1fcE5vZGVUYWlsOworCisgICAgaW50IG1fbkNvdW50OworCisgICAgQ05vZGUqIG1fcE5vZGVGcmVlOworCisgICAgc3RydWN0IENGWF9QbGV4KiBtX3BCbG9ja3M7CisKKyAgICBpbnQgbV9uQmxvY2tTaXplOworCisgICAgQ05vZGUqIE5ld05vZGUoQ05vZGUqIHBQcmV2LCBDTm9kZSogcE5leHQpOworCisgICAgdm9pZCBGcmVlTm9kZShDTm9kZSogcE5vZGUpOworcHVibGljOgorCisgICAgfkNGWF9QdHJMaXN0KCk7Cit9OwordHlwZWRlZiB2b2lkICgqUERfQ0FMTEJBQ0tfRlJFRURBVEEpKEZYX0xQVk9JRCBwRGF0YSk7CitzdHJ1Y3QgRlhfUFJJVkFURURBVEEgeworCisgICAgdm9pZAkJCQkJRnJlZURhdGEoKTsKKworICAgIEZYX0xQVk9JRAkJCQltX3BNb2R1bGVJZDsKKworICAgIEZYX0xQVk9JRAkJCQltX3BEYXRhOworCisgICAgUERfQ0FMTEJBQ0tfRlJFRURBVEEJbV9wQ2FsbGJhY2s7CisKKyAgICBGWF9CT09MCQkJCQltX2JTZWxmRGVzdHJ1Y3Q7Cit9OworY2xhc3MgQ0ZYX1ByaXZhdGVEYXRhCit7CitwdWJsaWM6CisKKyAgICBDRlhfUHJpdmF0ZURhdGEoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpIDogbV9EYXRhTGlzdChwQWxsb2NhdG9yKSB7fQorCisgICAgfkNGWF9Qcml2YXRlRGF0YSgpOworCisgICAgdm9pZAkJCQkJQ2xlYXJBbGwoKTsKKworICAgIHZvaWQJCQkJCVNldFByaXZhdGVEYXRhKEZYX0xQVk9JRCBtb2R1bGVfaWQsIEZYX0xQVk9JRCBwRGF0YSwgUERfQ0FMTEJBQ0tfRlJFRURBVEEgY2FsbGJhY2spOworCisgICAgdm9pZAkJCQkJU2V0UHJpdmF0ZU9iaihGWF9MUFZPSUQgbW9kdWxlX2lkLCBDRlhfRGVzdHJ1Y3RPYmplY3QqIHBPYmopOworCisgICAgRlhfTFBWT0lECQkJCUdldFByaXZhdGVEYXRhKEZYX0xQVk9JRCBtb2R1bGVfaWQpOworCisgICAgRlhfQk9PTAkJCQkJTG9va3VwUHJpdmF0ZURhdGEoRlhfTFBWT0lEIG1vZHVsZV9pZCwgRlhfTFBWT0lEICZwRGF0YSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghbW9kdWxlX2lkKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgRlhfRFdPUkQgbkNvdW50ID0gbV9EYXRhTGlzdC5HZXRTaXplKCk7CisgICAgICAgIGZvciAoRlhfRFdPUkQgbiA9IDA7IG4gPCBuQ291bnQ7IG4gKyspIHsKKyAgICAgICAgICAgIGlmIChtX0RhdGFMaXN0W25dLm1fcE1vZHVsZUlkID09IG1vZHVsZV9pZCkgeworICAgICAgICAgICAgICAgIHBEYXRhID0gbV9EYXRhTGlzdFtuXS5tX3BEYXRhOworICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBGWF9CT09MCQkJCQlSZW1vdmVQcml2YXRlRGF0YShGWF9MUFZPSUQgbW9kdWxlX2lkKTsKK3Byb3RlY3RlZDoKKworICAgIENGWF9BcnJheVRlbXBsYXRlPEZYX1BSSVZBVEVEQVRBPgltX0RhdGFMaXN0OworCisgICAgdm9pZAkJCQkJQWRkRGF0YShGWF9MUFZPSUQgbW9kdWxlX2lkLCBGWF9MUFZPSUQgcERhdGEsIFBEX0NBTExCQUNLX0ZSRUVEQVRBIGNhbGxiYWNrLCBGWF9CT09MIGJTZWxmRGVzdHJ1Y3QpOworfTsKK2NsYXNzIENGWF9CaXRTdHJlYW0gOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgdm9pZAkJCQlJbml0KEZYX0xQQ0JZVEUgcERhdGEsIEZYX0RXT1JEIGR3U2l6ZSk7CisKKworICAgIEZYX0RXT1JECQkJR2V0Qml0cyhGWF9EV09SRCBuQml0cyk7CisKKyAgICB2b2lkCQkJCUJ5dGVBbGlnbigpOworCisgICAgRlhfQk9PTAkJCQlJc0VPRigpCisgICAgeworICAgICAgICByZXR1cm4gbV9CaXRQb3MgPj0gbV9CaXRTaXplOworICAgIH0KKworICAgIHZvaWQJCQkJU2tpcEJpdHMoRlhfRFdPUkQgbkJpdHMpCisgICAgeworICAgICAgICBtX0JpdFBvcyArPSBuQml0czsKKyAgICB9CisKKyAgICB2b2lkCQkJCVJld2luZCgpCisgICAgeworICAgICAgICBtX0JpdFBvcyA9IDA7CisgICAgfQorcHJvdGVjdGVkOgorCisgICAgRlhfRFdPUkQJCQltX0JpdFBvczsKKworICAgIEZYX0RXT1JECQkJbV9CaXRTaXplOworCisgICAgRlhfTFBDQllURQkJCW1fcERhdGE7Cit9OwordGVtcGxhdGUgPGNsYXNzIE9iakNsYXNzPiBjbGFzcyBDRlhfQ291bnRSZWYgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgdHlwZWRlZiBDRlhfQ291bnRSZWY8T2JqQ2xhc3M+IFJlZjsKKworICAgIGNsYXNzIENvdW50ZWRPYmogOiBwdWJsaWMgT2JqQ2xhc3MKKyAgICB7CisgICAgcHVibGljOgorCisgICAgICAgIENvdW50ZWRPYmooKSB7fQorCisgICAgICAgIENvdW50ZWRPYmooY29uc3QgQ291bnRlZE9iaiYgc3JjKSA6IE9iakNsYXNzKHNyYykge30KKworICAgICAgICBpbnQJCQltX1JlZkNvdW50OworICAgIH07CisKKyAgICBDRlhfQ291bnRSZWYoKQorICAgIHsKKyAgICAgICAgbV9wT2JqZWN0ID0gTlVMTDsKKyAgICB9CisKKyAgICBDRlhfQ291bnRSZWYoY29uc3QgUmVmJiByZWYpCisgICAgeworICAgICAgICBtX3BPYmplY3QgPSByZWYubV9wT2JqZWN0OworICAgICAgICBpZiAobV9wT2JqZWN0KSB7CisgICAgICAgICAgICBtX3BPYmplY3QtPm1fUmVmQ291bnQgKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+Q0ZYX0NvdW50UmVmKCkKKyAgICB7CisgICAgICAgIGlmICghbV9wT2JqZWN0KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9wT2JqZWN0LT5tX1JlZkNvdW50IC0tOworICAgICAgICBpZiAobV9wT2JqZWN0LT5tX1JlZkNvdW50IDw9IDApIHsKKyAgICAgICAgICAgIGRlbGV0ZSBtX3BPYmplY3Q7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBPYmpDbGFzcyoJCQlOZXcoKQorICAgIHsKKyAgICAgICAgaWYgKG1fcE9iamVjdCkgeworICAgICAgICAgICAgbV9wT2JqZWN0LT5tX1JlZkNvdW50IC0tOworICAgICAgICAgICAgaWYgKG1fcE9iamVjdC0+bV9SZWZDb3VudCA8PSAwKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIG1fcE9iamVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcE9iamVjdCA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbV9wT2JqZWN0ID0gRlhfTkVXIENvdW50ZWRPYmo7CisgICAgICAgIGlmICghbV9wT2JqZWN0KSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBtX3BPYmplY3QtPm1fUmVmQ291bnQgPSAxOworICAgICAgICByZXR1cm4gbV9wT2JqZWN0OworICAgIH0KKworICAgIHZvaWQJCQkJb3BlcmF0b3IgPSAoY29uc3QgUmVmJiByZWYpCisgICAgeworICAgICAgICBpZiAocmVmLm1fcE9iamVjdCkgeworICAgICAgICAgICAgcmVmLm1fcE9iamVjdC0+bV9SZWZDb3VudCArKzsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9wT2JqZWN0KSB7CisgICAgICAgICAgICBtX3BPYmplY3QtPm1fUmVmQ291bnQgLS07CisgICAgICAgICAgICBpZiAobV9wT2JqZWN0LT5tX1JlZkNvdW50IDw9IDApIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgbV9wT2JqZWN0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fcE9iamVjdCA9IHJlZi5tX3BPYmplY3Q7CisgICAgfQorCisgICAgdm9pZAkJCQlvcGVyYXRvciA9ICh2b2lkKiBwKQorICAgIHsKKyAgICAgICAgRlhTWVNfYXNzZXJ0KHAgPT0gMCk7CisgICAgICAgIGlmIChtX3BPYmplY3QgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fcE9iamVjdC0+bV9SZWZDb3VudCAtLTsKKyAgICAgICAgaWYgKG1fcE9iamVjdC0+bV9SZWZDb3VudCA8PSAwKSB7CisgICAgICAgICAgICBkZWxldGUgbV9wT2JqZWN0OworICAgICAgICB9CisgICAgICAgIG1fcE9iamVjdCA9IE5VTEw7CisgICAgfQorCisgICAgY29uc3QgT2JqQ2xhc3MqCQlHZXRPYmplY3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcE9iamVjdDsKKyAgICB9CisKKyAgICBvcGVyYXRvcgkJCWNvbnN0IE9iakNsYXNzKigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wT2JqZWN0OworICAgIH0KKworICAgIEZYX0JPT0wJCQkJSXNOdWxsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BPYmplY3QgPT0gTlVMTDsKKyAgICB9CisKKyAgICBGWF9CT09MCQkJCU5vdE51bGwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcE9iamVjdCAhPSBOVUxMOworICAgIH0KKworICAgIE9iakNsYXNzKgkJCUdldE1vZGlmeSgpCisgICAgeworICAgICAgICBpZiAobV9wT2JqZWN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIG1fcE9iamVjdCA9IEZYX05FVyBDb3VudGVkT2JqOworICAgICAgICAgICAgaWYgKG1fcE9iamVjdCkgeworICAgICAgICAgICAgICAgIG1fcE9iamVjdC0+bV9SZWZDb3VudCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobV9wT2JqZWN0LT5tX1JlZkNvdW50ID4gMSkgeworICAgICAgICAgICAgbV9wT2JqZWN0LT5tX1JlZkNvdW50IC0tOworICAgICAgICAgICAgQ291bnRlZE9iaiogcE9sZE9iamVjdCA9IG1fcE9iamVjdDsKKyAgICAgICAgICAgIG1fcE9iamVjdCA9IE5VTEw7CisgICAgICAgICAgICBtX3BPYmplY3QgPSBGWF9ORVcgQ291bnRlZE9iaigqcE9sZE9iamVjdCk7CisgICAgICAgICAgICBpZiAobV9wT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgbV9wT2JqZWN0LT5tX1JlZkNvdW50ID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9wT2JqZWN0OworICAgIH0KKworICAgIHZvaWQJCQkJU2V0TnVsbCgpCisgICAgeworICAgICAgICBpZiAobV9wT2JqZWN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX3BPYmplY3QtPm1fUmVmQ291bnQgLS07CisgICAgICAgIGlmIChtX3BPYmplY3QtPm1fUmVmQ291bnQgPD0gMCkgeworICAgICAgICAgICAgZGVsZXRlIG1fcE9iamVjdDsKKyAgICAgICAgfQorICAgICAgICBtX3BPYmplY3QgPSBOVUxMOworICAgIH0KKworICAgIEZYX0JPT0wJCQkJb3BlcmF0b3IgPT0gKGNvbnN0IFJlZiYgcmVmKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcE9iamVjdCA9PSByZWYubV9wT2JqZWN0OworICAgIH0KK3Byb3RlY3RlZDoKKworICAgIENvdW50ZWRPYmoqCQkJbV9wT2JqZWN0OworfTsKK2NsYXNzIElGWF9QYXVzZQoreworcHVibGljOgorCisgICAgdmlydHVhbCBGWF9CT09MCU5lZWRUb1BhdXNlTm93KCkgPSAwOworfTsKK2NsYXNzIENGWF9EYXRhRmlsdGVyIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIHZpcnR1YWwgfkNGWF9EYXRhRmlsdGVyKCk7CisKKyAgICB2b2lkCQkJU2V0RGVzdEZpbHRlcihDRlhfRGF0YUZpbHRlciogcEZpbHRlcik7CisKKyAgICBGWF9CT09MCQkJSXNFT0YoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYkVPRjsKKyAgICB9CisKKyAgICBGWF9EV09SRAkJR2V0U3JjUG9zKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX1NyY1BvczsKKyAgICB9CisKKyAgICB2b2lkCQkJRmlsdGVySW4oRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpOworCisgICAgdm9pZAkJCUZpbHRlckZpbmlzaChDRlhfQmluYXJ5QnVmJiBkZXN0X2J1Zik7Citwcm90ZWN0ZWQ6CisKKyAgICBDRlhfRGF0YUZpbHRlcigpOworICAgIHZpcnR1YWwgdm9pZAl2X0ZpbHRlckluKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkCXZfRmlsdGVyRmluaXNoKENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKSA9IDA7CisgICAgdm9pZAkJCVJlcG9ydEVPRihGWF9EV09SRCBsZWZ0X2lucHV0KTsKKworICAgIEZYX0JPT0wJCQltX2JFT0Y7CisKKyAgICBGWF9EV09SRAkJbV9TcmNQb3M7CisKKyAgICBDRlhfRGF0YUZpbHRlcioJbV9wRGVzdEZpbHRlcjsKK307Cit0ZW1wbGF0ZSA8Y2xhc3MgVD4KK2NsYXNzIENGWF9TbWFydFBvaW50ZXIKK3sKK3B1YmxpYzoKKyAgICBDRlhfU21hcnRQb2ludGVyKFQgKnBPYmopIDogbV9wT2JqKHBPYmopIHt9CisgICAgfkNGWF9TbWFydFBvaW50ZXIoKQorICAgIHsKKyAgICAgICAgbV9wT2JqLT5SZWxlYXNlKCk7CisgICAgfQorICAgIG9wZXJhdG9yIFQqKHZvaWQpCisgICAgeworICAgICAgICByZXR1cm4gbV9wT2JqOworICAgIH0KKyAgICBUJgkJb3BlcmF0b3IgKih2b2lkKQorICAgIHsKKyAgICAgICAgcmV0dXJuICptX3BPYmo7CisgICAgfQorICAgIFQqCQlvcGVyYXRvciAtPih2b2lkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcE9iajsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgVCAqbV9wT2JqOworfTsKKyNkZWZpbmUgRlhfREFUQUxJU1RfTEVOR1RICTEwMjQKK3RlbXBsYXRlPHNpemVfdCB1bml0PgorY2xhc3MgQ0ZYX1NvcnRMaXN0QXJyYXkgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHJvdGVjdGVkOgorCisgICAgc3RydWN0IERhdGFMaXN0IHsKKworICAgICAgICBGWF9JTlQzMglzdGFydDsKKworICAgICAgICBGWF9JTlQzMgljb3VudDsKKyAgICAgICAgRlhfTFBCWVRFCWRhdGE7CisgICAgfTsKK3B1YmxpYzoKKworICAgIENGWF9Tb3J0TGlzdEFycmF5KElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKSA6IG1fQ3VyTGlzdCgwKSwgbV9EYXRhTGlzdHMocEFsbG9jYXRvcikge30KKworICAgIH5DRlhfU29ydExpc3RBcnJheSgpCisgICAgeworICAgICAgICBDbGVhcigpOworICAgIH0KKworCisgICAgdm9pZAkJCUNsZWFyKCkKKyAgICB7CisgICAgICAgIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBtX0RhdGFMaXN0cy5tX3BBbGxvY2F0b3I7CisgICAgICAgIGZvciAoRlhfSU5UMzIgaSA9IG1fRGF0YUxpc3RzLkdldFVwcGVyQm91bmQoKTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIERhdGFMaXN0IGxpc3QgPSBtX0RhdGFMaXN0cy5FbGVtZW50QXQoaSk7CisgICAgICAgICAgICBpZiAobGlzdC5kYXRhKSB7CisgICAgICAgICAgICAgICAgRlhfQWxsb2NhdG9yX0ZyZWUocEFsbG9jYXRvciwgbGlzdC5kYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX0RhdGFMaXN0cy5SZW1vdmVBbGwoKTsKKyAgICAgICAgbV9DdXJMaXN0ID0gMDsKKyAgICB9CisKKyAgICB2b2lkCQkJQXBwZW5kKEZYX0lOVDMyIG5TdGFydCwgRlhfSU5UMzIgbkNvdW50KQorICAgIHsKKyAgICAgICAgaWYgKG5TdGFydCA8IDApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gbV9EYXRhTGlzdHMubV9wQWxsb2NhdG9yOworICAgICAgICB3aGlsZSAobkNvdW50ID4gMCkgeworICAgICAgICAgICAgRlhfSU5UMzIgdGVtcF9jb3VudCA9IEZYX01JTihuQ291bnQsIEZYX0RBVEFMSVNUX0xFTkdUSCk7CisgICAgICAgICAgICBEYXRhTGlzdCBsaXN0OworICAgICAgICAgICAgbGlzdC5kYXRhID0gRlhfQWxsb2NhdG9yX0FsbG9jKHBBbGxvY2F0b3IsIEZYX0JZVEUsIHRlbXBfY291bnQgKiB1bml0KTsKKyAgICAgICAgICAgIGlmICghbGlzdC5kYXRhKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWFNZU19tZW1zZXQzMihsaXN0LmRhdGEsIDAsIHRlbXBfY291bnQgKiB1bml0KTsKKyAgICAgICAgICAgIGxpc3Quc3RhcnQgPSBuU3RhcnQ7CisgICAgICAgICAgICBsaXN0LmNvdW50ID0gdGVtcF9jb3VudDsKKyAgICAgICAgICAgIEFwcGVuZChsaXN0KTsKKyAgICAgICAgICAgIG5Db3VudCAtPSB0ZW1wX2NvdW50OworICAgICAgICAgICAgblN0YXJ0ICs9IHRlbXBfY291bnQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBGWF9MUEJZVEUJCUdldEF0KEZYX0lOVDMyIG5JbmRleCkKKyAgICB7CisgICAgICAgIGlmIChuSW5kZXggPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9DdXJMaXN0IDwgMCB8fCBtX0N1ckxpc3QgPj0gbV9EYXRhTGlzdHMuR2V0U2l6ZSgpKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBEYXRhTGlzdCAqcEN1ckxpc3QgPSBtX0RhdGFMaXN0cy5HZXREYXRhUHRyKG1fQ3VyTGlzdCk7CisgICAgICAgIGlmICghcEN1ckxpc3QgfHwgbkluZGV4IDwgcEN1ckxpc3QtPnN0YXJ0IHx8IG5JbmRleCA+PSBwQ3VyTGlzdC0+c3RhcnQgKyBwQ3VyTGlzdC0+Y291bnQpIHsKKyAgICAgICAgICAgIHBDdXJMaXN0ID0gTlVMTDsKKyAgICAgICAgICAgIEZYX0lOVDMyIGlTdGFydCA9IDA7CisgICAgICAgICAgICBGWF9JTlQzMiBpRW5kID0gbV9EYXRhTGlzdHMuR2V0VXBwZXJCb3VuZCgpOworICAgICAgICAgICAgRlhfSU5UMzIgaU1pZCA9IDA7CisgICAgICAgICAgICB3aGlsZSAoaVN0YXJ0IDw9IGlFbmQpIHsKKyAgICAgICAgICAgICAgICBpTWlkID0gKGlTdGFydCArIGlFbmQpIC8gMjsKKyAgICAgICAgICAgICAgICBEYXRhTGlzdCogbGlzdCA9IG1fRGF0YUxpc3RzLkdldERhdGFQdHIoaU1pZCk7CisgICAgICAgICAgICAgICAgaWYgKG5JbmRleCA8IGxpc3QtPnN0YXJ0KSB7CisgICAgICAgICAgICAgICAgICAgIGlFbmQgPSBpTWlkIC0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5JbmRleCA+PSBsaXN0LT5zdGFydCArIGxpc3QtPmNvdW50KSB7CisgICAgICAgICAgICAgICAgICAgIGlTdGFydCA9IGlNaWQgKyAxOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBDdXJMaXN0ID0gbGlzdDsKKyAgICAgICAgICAgICAgICAgICAgbV9DdXJMaXN0ID0gaU1pZDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBwQ3VyTGlzdCA/IHBDdXJMaXN0LT5kYXRhICsgKG5JbmRleCAtIHBDdXJMaXN0LT5zdGFydCkgKiB1bml0IDogTlVMTDsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgdm9pZAkJCUFwcGVuZChjb25zdCBEYXRhTGlzdCYgbGlzdCkKKyAgICB7CisgICAgICAgIEZYX0lOVDMyIGlTdGFydCA9IDA7CisgICAgICAgIEZYX0lOVDMyIGlFbmQgPSBtX0RhdGFMaXN0cy5HZXRVcHBlckJvdW5kKCk7CisgICAgICAgIEZYX0lOVDMyIGlGaW5kID0gMDsKKyAgICAgICAgd2hpbGUgKGlTdGFydCA8PSBpRW5kKSB7CisgICAgICAgICAgICBGWF9JTlQzMiBpTWlkID0gKGlTdGFydCArIGlFbmQpIC8gMjsKKyAgICAgICAgICAgIERhdGFMaXN0KiBjdXJfbGlzdCA9IG1fRGF0YUxpc3RzLkdldERhdGFQdHIoaU1pZCk7CisgICAgICAgICAgICBpZiAobGlzdC5zdGFydCA8IGN1cl9saXN0LT5zdGFydCArIGN1cl9saXN0LT5jb3VudCkgeworICAgICAgICAgICAgICAgIGlFbmQgPSBpTWlkIC0gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGlNaWQgPT0gaUVuZCkgeworICAgICAgICAgICAgICAgICAgICBpRmluZCA9IGlNaWQgKyAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRGF0YUxpc3QqIG5leHRfbGlzdCA9IG1fRGF0YUxpc3RzLkdldERhdGFQdHIoaU1pZCArIDEpOworICAgICAgICAgICAgICAgIGlmIChsaXN0LnN0YXJ0IDwgbmV4dF9saXN0LT5zdGFydCkgeworICAgICAgICAgICAgICAgICAgICBpRmluZCA9IGlNaWQgKyAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpU3RhcnQgPSBpTWlkICsgMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9EYXRhTGlzdHMuSW5zZXJ0QXQoaUZpbmQsIGxpc3QpOworICAgIH0KKyAgICBGWF9JTlQzMgkJbV9DdXJMaXN0OworICAgIENGWF9BcnJheVRlbXBsYXRlPERhdGFMaXN0PgltX0RhdGFMaXN0czsKK307Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+CitjbGFzcyBDRlhfTGlzdEFycmF5VGVtcGxhdGUgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgdm9pZAkJCUNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fRGF0YS5DbGVhcigpOworICAgIH0KKworICAgIHZvaWQJCQlBZGQoRlhfSU5UMzIgblN0YXJ0LCBGWF9JTlQzMiBuQ291bnQpCisgICAgeworICAgICAgICBtX0RhdGEuQXBwZW5kKG5TdGFydCwgbkNvdW50KTsKKyAgICB9CisKKyAgICBUMiYJCQkJb3BlcmF0b3IgW10gKEZYX0lOVDMyIG5JbmRleCkKKyAgICB7CisgICAgICAgIEZYX0xQQllURSBkYXRhID0gbV9EYXRhLkdldEF0KG5JbmRleCk7CisgICAgICAgIEZYU1lTX2Fzc2VydChkYXRhICE9IE5VTEwpOworICAgICAgICByZXR1cm4gKFQyJikoKih2b2xhdGlsZSBUMiopZGF0YSk7CisgICAgfQorCisgICAgVDIqCQkJCUdldFB0ckF0KEZYX0lOVDMyIG5JbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiAoVDIqKW1fRGF0YS5HZXRBdChuSW5kZXgpOworICAgIH0KK3Byb3RlY3RlZDoKKyAgICBUMQkJCW1fRGF0YTsKK307Cit0eXBlZGVmIENGWF9MaXN0QXJyYXlUZW1wbGF0ZTxDRlhfU29ydExpc3RBcnJheTxzaXplb2YoRlhfRklMRVNJWkUpPiwgRlhfRklMRVNJWkU+CUNGWF9GaWxlU2l6ZUxpc3RBcnJheTsKK3R5cGVkZWYgQ0ZYX0xpc3RBcnJheVRlbXBsYXRlPENGWF9Tb3J0TGlzdEFycmF5PHNpemVvZihGWF9EV09SRCk+LCBGWF9EV09SRD4JCUNGWF9EV29yZExpc3RBcnJheTsKK3R5cGVkZWYgZW51bSB7CisgICAgUmVhZHksCisgICAgVG9CZUNvbnRpbnVlZCwKKyAgICBGb3VuZCwKKyAgICBOb3RGb3VuZCwKKyAgICBGYWlsZWQsCisgICAgRG9uZQorfSBGWF9Qcm9ncmVzc2l2ZVN0YXR1czsKKyNkZWZpbmUgUHJvZ3Jlc3NpdmVTdGF0dXMJRlhfUHJvZ3Jlc3NpdmVTdGF0dXMKKyNkZWZpbmUgRlhfTkFNRVNQQUNFX0RFQ0xBUkUobmFtZXNwYWNlLCB0eXBlKSAgICAgICBuYW1lc3BhY2U6OnR5cGUKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9pbmNsdWRlL2Z4Y3J0L2Z4X2Nvb3JkaW5hdGVzLmggYi9jb3JlL2luY2x1ZGUvZnhjcnQvZnhfY29vcmRpbmF0ZXMuaAppbmRleCBlZWUwZGZiLi45YTYzZTJhIDEwMDY0NAotLS0gYS9jb3JlL2luY2x1ZGUvZnhjcnQvZnhfY29vcmRpbmF0ZXMuaAorKysgYi9jb3JlL2luY2x1ZGUvZnhjcnQvZnhfY29vcmRpbmF0ZXMuaApAQCAtMSw5MDAgKzEsOTAwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GWENSVF9DT09SRElOQVRFU18NCi0jZGVmaW5lIF9GWENSVF9DT09SRElOQVRFU18NCi10ZW1wbGF0ZTxjbGFzcyBiYXNlVHlwZT4gY2xhc3MgQ0ZYX1BTVlRlbXBsYXRlOw0KLXRlbXBsYXRlPGNsYXNzIGJhc2VUeXBlPiBjbGFzcyBDRlhfVlRlbXBsYXRlOw0KLXRlbXBsYXRlPGNsYXNzIGJhc2VUeXBlPiBjbGFzcyBDRlhfUFJMVGVtcGxhdGU7DQotdGVtcGxhdGU8Y2xhc3MgYmFzZVR5cGU+IGNsYXNzIENGWF9SVGVtcGxhdGU7DQotdGVtcGxhdGU8Y2xhc3MgYmFzZVR5cGU+IGNsYXNzIENGWF9FVGVtcGxhdGU7DQotdGVtcGxhdGU8Y2xhc3MgYmFzZVR5cGU+IGNsYXNzIENGWF9BVGVtcGxhdGU7DQotdGVtcGxhdGU8Y2xhc3MgYmFzZVR5cGU+IGNsYXNzIENGWF9SUlRlbXBsYXRlOw0KLWNsYXNzIENGWF9NYXRyaXg7DQotdGVtcGxhdGU8Y2xhc3MgYmFzZVR5cGU+DQotY2xhc3MgQ0ZYX1BTVlRlbXBsYXRlIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICB0eXBlZGVmIENGWF9QU1ZUZW1wbGF0ZTxiYXNlVHlwZT4JRlhUX1BTVjsNCi0gICAgdHlwZWRlZiBDRlhfUFNWVGVtcGxhdGU8YmFzZVR5cGU+CUZYVF9QT0lOVDsNCi0gICAgdHlwZWRlZiBDRlhfUFNWVGVtcGxhdGU8YmFzZVR5cGU+CUZYVF9TSVpFOw0KLSAgICB2b2lkCQlTZXQoYmFzZVR5cGUgeCwgYmFzZVR5cGUgeSkNCi0gICAgew0KLSAgICAgICAgRlhUX1BTVjo6eCA9IHgsIEZYVF9QU1Y6OnkgPSB5Ow0KLSAgICB9DQotICAgIHZvaWQJCVNldChjb25zdCBGWFRfUFNWICZwc3YpDQotICAgIHsNCi0gICAgICAgIEZYVF9QU1Y6OnggPSBwc3YueCwgRlhUX1BTVjo6eSA9IHBzdi55Ow0KLSAgICB9DQotICAgIHZvaWQJCUFkZChiYXNlVHlwZSB4LCBiYXNlVHlwZSB5KQ0KLSAgICB7DQotICAgICAgICBGWFRfUFNWOjp4ICs9IHgsIEZYVF9QU1Y6OnkgKz0geTsNCi0gICAgfQ0KLSAgICB2b2lkCQlTdWJ0cmFjdChiYXNlVHlwZSB4LCBiYXNlVHlwZSB5KQ0KLSAgICB7DQotICAgICAgICBGWFRfUFNWOjp4IC09IHgsIEZYVF9QU1Y6OnkgLT0geTsNCi0gICAgfQ0KLSAgICB2b2lkCQlSZXNldCgpDQotICAgIHsNCi0gICAgICAgIEZYVF9QU1Y6OnggPSBGWFRfUFNWOjp5ID0gMDsNCi0gICAgfQ0KLSAgICBGWFRfUFNWJglvcGVyYXRvciArPSAoY29uc3QgRlhUX1BTViAmb2JqKQ0KLSAgICB7DQotICAgICAgICB4ICs9IG9iai54Ow0KLSAgICAgICAgeSArPSBvYmoueTsNCi0gICAgICAgIHJldHVybiAqdGhpczsNCi0gICAgfQ0KLSAgICBGWFRfUFNWJglvcGVyYXRvciAtPSAoY29uc3QgRlhUX1BTViAmb2JqKQ0KLSAgICB7DQotICAgICAgICB4IC09IG9iai54Ow0KLSAgICAgICAgeSAtPSBvYmoueTsNCi0gICAgICAgIHJldHVybiAqdGhpczsNCi0gICAgfQ0KLSAgICBGWFRfUFNWJglvcGVyYXRvciAqPSAoYmFzZVR5cGUgbGFtZGEpDQotICAgIHsNCi0gICAgICAgIHggKj0gbGFtZGE7DQotICAgICAgICB5ICo9IGxhbWRhOw0KLSAgICAgICAgcmV0dXJuICp0aGlzOw0KLSAgICB9DQotICAgIEZYVF9QU1YmCW9wZXJhdG9yIC89IChiYXNlVHlwZSBsYW1kYSkNCi0gICAgew0KLSAgICAgICAgeCAvPSBsYW1kYTsNCi0gICAgICAgIHkgLz0gbGFtZGE7DQotICAgICAgICByZXR1cm4gKnRoaXM7DQotICAgIH0NCi0gICAgZnJpZW5kCUZYX0JPT0wJCW9wZXJhdG9yID09IChjb25zdCBGWFRfUFNWICZvYmoxLCBjb25zdCBGWFRfUFNWICZvYmoyKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gb2JqMS54ID09IG9iajIueCAmJiBvYmoxLnkgPT0gb2JqMi55Ow0KLSAgICB9DQotICAgIGZyaWVuZAlGWF9CT09MCQlvcGVyYXRvciAhPSAoY29uc3QgRlhUX1BTViAmb2JqMSwgY29uc3QgRlhUX1BTViAmb2JqMikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG9iajEueCAhPSBvYmoyLnggfHwgb2JqMS55ICE9IG9iajIueTsNCi0gICAgfQ0KLSAgICBmcmllbmQJRlhUX1BTVgkJb3BlcmF0b3IgKyAoY29uc3QgRlhUX1BTViAmb2JqMSwgY29uc3QgRlhUX1BTViAmb2JqMikNCi0gICAgew0KLSAgICAgICAgQ0ZYX1BTVlRlbXBsYXRlIG9iajsNCi0gICAgICAgIG9iai54ID0gb2JqMS54ICsgb2JqMi54Ow0KLSAgICAgICAgb2JqLnkgPSBvYmoxLnkgKyBvYmoyLnk7DQotICAgICAgICByZXR1cm4gb2JqOw0KLSAgICB9DQotICAgIGZyaWVuZAlGWFRfUFNWCQlvcGVyYXRvciAtIChjb25zdCBGWFRfUFNWICZvYmoxLCBjb25zdCBGWFRfUFNWICZvYmoyKQ0KLSAgICB7DQotICAgICAgICBDRlhfUFNWVGVtcGxhdGUgb2JqOw0KLSAgICAgICAgb2JqLnggPSBvYmoxLnggLSBvYmoyLng7DQotICAgICAgICBvYmoueSA9IG9iajEueSAtIG9iajIueTsNCi0gICAgICAgIHJldHVybiBvYmo7DQotICAgIH0NCi0gICAgZnJpZW5kCUZYVF9QU1YJCW9wZXJhdG9yICogKGNvbnN0IEZYVF9QU1YgJm9iaiwgYmFzZVR5cGUgbGFtZGEpDQotICAgIHsNCi0gICAgICAgIENGWF9QU1ZUZW1wbGF0ZSB0Ow0KLSAgICAgICAgdC54ID0gb2JqLnggKiBsYW1kYTsNCi0gICAgICAgIHQueSA9IG9iai55ICogbGFtZGE7DQotICAgICAgICByZXR1cm4gdDsNCi0gICAgfQ0KLSAgICBmcmllbmQJRlhUX1BTVgkJb3BlcmF0b3IgKiAoYmFzZVR5cGUgbGFtZGEsIGNvbnN0IEZYVF9QU1YgJm9iaikNCi0gICAgew0KLSAgICAgICAgQ0ZYX1BTVlRlbXBsYXRlIHQ7DQotICAgICAgICB0LnggPSBsYW1kYSAqIG9iai54Ow0KLSAgICAgICAgdC55ID0gbGFtZGEgKiBvYmoueTsNCi0gICAgICAgIHJldHVybiB0Ow0KLSAgICB9DQotICAgIGZyaWVuZAlGWFRfUFNWCQlvcGVyYXRvciAvIChjb25zdCBGWFRfUFNWICZvYmosIGJhc2VUeXBlIGxhbWRhKQ0KLSAgICB7DQotICAgICAgICBDRlhfUFNWVGVtcGxhdGUgdDsNCi0gICAgICAgIHQueCA9IG9iai54IC8gbGFtZGE7DQotICAgICAgICB0LnkgPSBvYmoueSAvIGxhbWRhOw0KLSAgICAgICAgcmV0dXJuIHQ7DQotICAgIH0NCi0gICAgYmFzZVR5cGUgeCwgeTsNCi19Ow0KLXR5cGVkZWYgQ0ZYX1BTVlRlbXBsYXRlPEZYX0lOVDMyPgkJCUNGWF9Qb2ludDsNCi10eXBlZGVmIENGWF9QU1ZUZW1wbGF0ZTxGWF9GTE9BVD4JCQlDRlhfUG9pbnRGOw0KLXR5cGVkZWYgQ0ZYX1BTVlRlbXBsYXRlPEZYX0lOVDMyPgkJCUNGWF9TaXplOw0KLXR5cGVkZWYgQ0ZYX1BTVlRlbXBsYXRlPEZYX0ZMT0FUPgkJCUNGWF9TaXplRjsNCi10eXBlZGVmIENGWF9BcnJheVRlbXBsYXRlPENGWF9Qb2ludD4JCUNGWF9Qb2ludHM7DQotdHlwZWRlZiBDRlhfQXJyYXlUZW1wbGF0ZTxDRlhfUG9pbnRGPgkJQ0ZYX1BvaW50c0Y7DQotdHlwZWRlZiBDRlhfUFNWVGVtcGxhdGU8RlhfSU5UMzI+ICoJCQlGWF9MUFBPSU5UOw0KLXR5cGVkZWYgQ0ZYX1BTVlRlbXBsYXRlPEZYX0ZMT0FUPiAqCQkJRlhfTFBQT0lOVEY7DQotdHlwZWRlZiBDRlhfUFNWVGVtcGxhdGU8RlhfSU5UMzI+IGNvbnN0ICoJRlhfTFBDUE9JTlQ7DQotdHlwZWRlZiBDRlhfUFNWVGVtcGxhdGU8RlhfRkxPQVQ+IGNvbnN0ICoJRlhfTFBDUE9JTlRGOw0KLSNkZWZpbmUgQ0ZYX0Zsb2F0UG9pbnQJQ0ZYX1BvaW50Rg0KLXRlbXBsYXRlPGNsYXNzIGJhc2VUeXBlPg0KLWNsYXNzIENGWF9WVGVtcGxhdGU6IHB1YmxpYyBDRlhfUFNWVGVtcGxhdGU8YmFzZVR5cGU+DQotew0KLXB1YmxpYzoNCi0gICAgdHlwZWRlZiBDRlhfUFNWVGVtcGxhdGU8YmFzZVR5cGU+CUZYVF9QU1Y7DQotICAgIHR5cGVkZWYgQ0ZYX1BTVlRlbXBsYXRlPGJhc2VUeXBlPglGWFRfUE9JTlQ7DQotICAgIHR5cGVkZWYgQ0ZYX1BTVlRlbXBsYXRlPGJhc2VUeXBlPglGWFRfU0laRTsNCi0gICAgdHlwZWRlZiBDRlhfVlRlbXBsYXRlPGJhc2VUeXBlPgkJRlhUX1ZFQ1RPUjsNCi0gICAgdm9pZAkJU2V0KGJhc2VUeXBlIHgsIGJhc2VUeXBlIHkpDQotICAgIHsNCi0gICAgICAgIEZYVF9QU1Y6OnggPSB4LCBGWFRfUFNWOjp5ID0geTsNCi0gICAgfQ0KLSAgICB2b2lkCQlTZXQoY29uc3QgRlhUX1BTViAmcHN2KQ0KLSAgICB7DQotICAgICAgICBGWFRfUFNWOjp4ID0gcHN2LngsIEZYVF9QU1Y6OnkgPSBwc3YueTsNCi0gICAgfQ0KLSAgICB2b2lkCQlTZXQoY29uc3QgRlhUX1BPSU5UICZwMSwgY29uc3QgRlhUX1BPSU5UICZwMikNCi0gICAgew0KLSAgICAgICAgRlhUX1BTVjo6eCA9IHAyLnggLSBwMS54LCBGWFRfUFNWOjp5ID0gcDIueSAtIHAxLnk7DQotICAgIH0NCi0gICAgdm9pZAkJUmVzZXQoKQ0KLSAgICB7DQotICAgICAgICBGWFRfUFNWOjp4ID0gRlhUX1BTVjo6eSA9IDA7DQotICAgIH0NCi0gICAgYmFzZVR5cGUJU3F1YXJlTGVuZ3RoKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEZYVF9QU1Y6OnggKiBGWFRfUFNWOjp4ICsgRlhUX1BTVjo6eSAqIEZYVF9QU1Y6Onk7DQotICAgIH0NCi0gICAgYmFzZVR5cGUJTGVuZ3RoKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEZYU1lTX3NxcnQoRlhUX1BTVjo6eCAqIEZYVF9QU1Y6OnggKyBGWFRfUFNWOjp5ICogRlhUX1BTVjo6eSk7DQotICAgIH0NCi0gICAgdm9pZAkJTm9ybWFsaXplKCkNCi0gICAgew0KLSAgICAgICAgRlhfRkxPQVQgZkxlbiA9IEZYU1lTX3NxcnQoRlhUX1BTVjo6eCAqIEZYVF9QU1Y6OnggKyBGWFRfUFNWOjp5ICogRlhUX1BTVjo6eSk7DQotICAgICAgICBGWFNZU19hc3NlcnQoZkxlbiA+PSAwLjAwMDFmKTsNCi0gICAgICAgIEZYVF9QU1Y6OnggPSAoKGJhc2VUeXBlKUZYVF9QU1Y6OngpIC8gZkxlbjsNCi0gICAgICAgIEZYVF9QU1Y6OnkgPSAoKGJhc2VUeXBlKUZYVF9QU1Y6OnkpIC8gZkxlbjsNCi0gICAgfQ0KLSAgICBiYXNlVHlwZQlEb3RQcm9kdWN0KGJhc2VUeXBlIHgsIGJhc2VUeXBlIHkpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBGWFRfUFNWOjp4ICogeCArIEZYVF9QU1Y6OnkgKiB5Ow0KLSAgICB9DQotICAgIGJhc2VUeXBlCURvdFByb2R1Y3QoY29uc3QgRlhUX1ZFQ1RPUiAmdikgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEZYVF9QU1Y6OnggKiB2LnggKyBGWFRfUFNWOjp5ICogdi55Ow0KLSAgICB9DQotICAgIEZYX0JPT0wJCUlzUGFyYWxsZWwoYmFzZVR5cGUgeCwgYmFzZVR5cGUgeSkgY29uc3QNCi0gICAgew0KLSAgICAgICAgYmFzZVR5cGUgdCA9IEZYVF9QU1Y6OnggKiB5IC0gRlhUX1BTVjo6eSAqIHg7DQotICAgICAgICByZXR1cm4gRlhTWVNfZmFicyh0KSA8IDB4MDAwMWY7DQotICAgIH0NCi0gICAgRlhfQk9PTAkJSXNQYXJhbGxlbChjb25zdCBGWFRfVkVDVE9SICZ2KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gSXNQYXJhbGxlbCh2LngsIHYueSk7DQotICAgIH0NCi0gICAgRlhfQk9PTAkJSXNQZXJwZW5kaWN1bGFyKGJhc2VUeXBlIHgsIGJhc2VUeXBlIHkpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIGJhc2VUeXBlIHQgPSBEb3RQcm9kdWN0KHgsIHkpOw0KLSAgICAgICAgcmV0dXJuIEZYU1lTX2ZhYnModCkgPCAweDAwMDFmOw0KLSAgICB9DQotICAgIEZYX0JPT0wJCUlzUGVycGVuZGljdWxhcihjb25zdCBGWFRfVkVDVE9SICZ2KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gSXNQZXJwZW5kaWN1bGFyKHYueCwgdi55KTsNCi0gICAgfQ0KLSAgICB2b2lkCQlUcmFuc2xhdGUoYmFzZVR5cGUgZHgsIGJhc2VUeXBlIGR5KQ0KLSAgICB7DQotICAgICAgICBGWFRfUFNWOjp4ICs9IGR4LCBGWFRfUFNWOjp5ICs9IGR5Ow0KLSAgICB9DQotICAgIHZvaWQJCVNjYWxlKGJhc2VUeXBlIHN4LCBiYXNlVHlwZSBzeSkNCi0gICAgew0KLSAgICAgICAgRlhUX1BTVjo6eCAqPSBzeCwgRlhUX1BTVjo6eSAqPSBzeTsNCi0gICAgfQ0KLSAgICB2b2lkCQlSb3RhdGUoRlhfRkxPQVQgZlJhZGlhbikNCi0gICAgew0KLSAgICAgICAgRlhfRkxPQVQgeHggPSAoRlhfRkxPQVQpRlhUX1BTVjo6eDsNCi0gICAgICAgIEZYX0ZMT0FUIHl5ID0gKEZYX0ZMT0FUKUZYVF9QU1Y6Onk7DQotICAgICAgICBGWF9GTE9BVCBjb3NWYWx1ZSA9IEZYU1lTX2NvcyhmUmFkaWFuKTsNCi0gICAgICAgIEZYX0ZMT0FUIHNpblZhbHVlID0gRlhTWVNfc2luKGZSYWRpYW4pOw0KLSAgICAgICAgRlhUX1BTVjo6eCA9IHh4ICogY29zVmFsdWUgLSB5eSAqIHNpblZhbHVlOw0KLSAgICAgICAgRlhUX1BTVjo6eSA9IHh4ICogc2luVmFsdWUgKyB5eSAqIGNvc1ZhbHVlOw0KLSAgICB9DQotICAgIGZyaWVuZAlGWF9GTE9BVAlDb3NpbmUoY29uc3QgRlhUX1ZFQ1RPUiAmdjEsIGNvbnN0IEZYVF9WRUNUT1IgJnYyKQ0KLSAgICB7DQotICAgICAgICBGWFNZU19hc3NlcnQodjEuU3F1YXJlTGVuZ3RoKCkgIT0gMCAmJiB2Mi5TcXVhcmVMZW5ndGgoKSAhPSAwKTsNCi0gICAgICAgIEZYX0ZMT0FUIGRvdFByb2R1Y3QgPSB2MS5Eb3RQcm9kdWN0KHYyKTsNCi0gICAgICAgIHJldHVybiBkb3RQcm9kdWN0IC8gKEZYX0ZMT0FUKUZYU1lTX3NxcnQodjEuU3F1YXJlTGVuZ3RoKCkgKiB2Mi5TcXVhcmVMZW5ndGgoKSk7DQotICAgIH0NCi0gICAgZnJpZW5kCUZYX0ZMT0FUCUFyY0Nvc2luZShjb25zdCBGWFRfVkVDVE9SICZ2MSwgY29uc3QgRlhUX1ZFQ1RPUiAmdjIpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAoRlhfRkxPQVQpRlhTWVNfYWNvcyhDb3NpbmUodjEsIHYyKSk7DQotICAgIH0NCi0gICAgZnJpZW5kCUZYX0ZMT0FUCVNsb3BlQW5nbGUoY29uc3QgRlhUX1ZFQ1RPUiAmdikNCi0gICAgew0KLSAgICAgICAgQ0ZYX1ZUZW1wbGF0ZSB2eDsNCi0gICAgICAgIHZ4LlNldCgxLCAwKTsNCi0gICAgICAgIEZYX0ZMT0FUIGZTbG9wZSA9IEFyY0Nvc2luZSh2LCB2eCk7DQotICAgICAgICByZXR1cm4gdi55IDwgMCA/IC1mU2xvcGUgOiBmU2xvcGU7DQotICAgIH0NCi19Ow0KLXR5cGVkZWYgQ0ZYX1ZUZW1wbGF0ZTxGWF9JTlQzMj4gQ0ZYX1ZlY3RvcjsNCi10eXBlZGVmIENGWF9WVGVtcGxhdGU8RlhfRkxPQVQ+IENGWF9WZWN0b3JGOw0KLXRlbXBsYXRlPGNsYXNzIGJhc2VUeXBlPg0KLWNsYXNzIENGWF9SVGVtcGxhdGU6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgdHlwZWRlZiBDRlhfUFNWVGVtcGxhdGU8YmFzZVR5cGU+CUZYVF9QT0lOVDsNCi0gICAgdHlwZWRlZiBDRlhfUFNWVGVtcGxhdGU8YmFzZVR5cGU+CUZYVF9TSVpFOw0KLSAgICB0eXBlZGVmIENGWF9WVGVtcGxhdGU8YmFzZVR5cGU+CQlGWFRfVkVDVE9SOw0KLSAgICB0eXBlZGVmIENGWF9QUkxUZW1wbGF0ZTxiYXNlVHlwZT4JRlhUX1BBUkFMOw0KLSAgICB0eXBlZGVmIENGWF9SVGVtcGxhdGU8YmFzZVR5cGU+CQlGWFRfUkVDVDsNCi0gICAgdm9pZAkJU2V0KGJhc2VUeXBlIGxlZnQsIGJhc2VUeXBlIHRvcCwgYmFzZVR5cGUgd2lkdGgsIGJhc2VUeXBlIGhlaWdodCkNCi0gICAgew0KLSAgICAgICAgRlhUX1JFQ1Q6OmxlZnQgPSBsZWZ0LCBGWFRfUkVDVDo6dG9wID0gdG9wLCBGWFRfUkVDVDo6d2lkdGggPSB3aWR0aCwgRlhUX1JFQ1Q6OmhlaWdodCA9IGhlaWdodDsNCi0gICAgfQ0KLSAgICB2b2lkCQlTZXQoYmFzZVR5cGUgbGVmdCwgYmFzZVR5cGUgdG9wLCBjb25zdCBGWFRfU0laRSAmc2l6ZSkNCi0gICAgew0KLSAgICAgICAgRlhUX1JFQ1Q6OmxlZnQgPSBsZWZ0LCBGWFRfUkVDVDo6dG9wID0gdG9wLCBGWFRfUkVDVDo6U2l6ZShzaXplKTsNCi0gICAgfQ0KLSAgICB2b2lkCQlTZXQoY29uc3QgRlhUX1BPSU5UICZwLCBiYXNlVHlwZSB3aWR0aCwgYmFzZVR5cGUgaGVpZ2h0KQ0KLSAgICB7DQotICAgICAgICBUb3BMZWZ0KHApLCBGWFRfUkVDVDo6d2lkdGggPSB3aWR0aCwgRlhUX1JFQ1Q6OmhlaWdodCA9IGhlaWdodDsNCi0gICAgfQ0KLSAgICB2b2lkCQlTZXQoY29uc3QgRlhUX1BPSU5UICZwMSwgY29uc3QgRlhUX1BPSU5UICZwMikNCi0gICAgew0KLSAgICAgICAgVG9wTGVmdChwMSksIEZYVF9SRUNUOjp3aWR0aCA9IHAyLnggLSBwMS54LCBGWFRfUkVDVDo6aGVpZ2h0ID0gcDIueSAtIHAxLnksIEZYVF9SRUNUOjpOb3JtYWxpemUoKTsNCi0gICAgfQ0KLSAgICB2b2lkCQlTZXQoY29uc3QgRlhUX1BPSU5UICZwLCBjb25zdCBGWFRfVkVDVE9SICZ2KQ0KLSAgICB7DQotICAgICAgICBUb3BMZWZ0KHApLCBGWFRfUkVDVDo6d2lkdGggPSB2LngsIEZYVF9SRUNUOjpoZWlnaHQgPSB2LnksIEZYVF9SRUNUOjpOb3JtYWxpemUoKTsNCi0gICAgfQ0KLSAgICB2b2lkCQlSZXNldCgpDQotICAgIHsNCi0gICAgICAgIEZYVF9SRUNUOjpsZWZ0ID0gRlhUX1JFQ1Q6OnRvcCA9IEZYVF9SRUNUOjp3aWR0aCA9IEZYVF9SRUNUOjpoZWlnaHQgPSAwOw0KLSAgICB9DQotICAgIEZYVF9SRUNUJglvcGVyYXRvciArPSAoY29uc3QgRlhUX1BPSU5UICZwKQ0KLSAgICB7DQotICAgICAgICBsZWZ0ICs9IHAueCwgdG9wICs9IHAueTsNCi0gICAgICAgIHJldHVybiAqdGhpczsNCi0gICAgfQ0KLSAgICBGWFRfUkVDVCYJb3BlcmF0b3IgLT0gKGNvbnN0IEZYVF9QT0lOVCAmcCkNCi0gICAgew0KLSAgICAgICAgbGVmdCAtPSBwLngsIHRvcCAtPSBwLnk7DQotICAgICAgICByZXR1cm4gKnRoaXM7DQotICAgIH0NCi0gICAgYmFzZVR5cGUJcmlnaHQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbGVmdCArIHdpZHRoOw0KLSAgICB9DQotICAgIGJhc2VUeXBlCWJvdHRvbSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiB0b3AgKyBoZWlnaHQ7DQotICAgIH0NCi0gICAgdm9pZAkJTm9ybWFsaXplKCkNCi0gICAgew0KLSAgICAgICAgaWYgKHdpZHRoIDwgMCkgew0KLSAgICAgICAgICAgIGxlZnQgKz0gd2lkdGg7DQotICAgICAgICAgICAgd2lkdGggPSAtd2lkdGg7DQotICAgICAgICB9DQotICAgICAgICBpZiAoaGVpZ2h0IDwgMCkgew0KLSAgICAgICAgICAgIHRvcCArPSBoZWlnaHQ7DQotICAgICAgICAgICAgaGVpZ2h0ID0gLWhlaWdodDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICB2b2lkCQlPZmZzZXQoYmFzZVR5cGUgZHgsIGJhc2VUeXBlIGR5KQ0KLSAgICB7DQotICAgICAgICBsZWZ0ICs9IGR4Ow0KLSAgICAgICAgdG9wICs9IGR5Ow0KLSAgICB9DQotICAgIHZvaWQJCUluZmxhdGUoYmFzZVR5cGUgeCwgYmFzZVR5cGUgeSkNCi0gICAgew0KLSAgICAgICAgbGVmdCAtPSB4Ow0KLSAgICAgICAgd2lkdGggKz0geCAqIDI7DQotICAgICAgICB0b3AgLT0geTsNCi0gICAgICAgIGhlaWdodCArPSB5ICogMjsNCi0gICAgfQ0KLSAgICB2b2lkCQlJbmZsYXRlKGNvbnN0IEZYVF9QT0lOVCAmcCkNCi0gICAgew0KLSAgICAgICAgSW5mbGF0ZShwLngsIHAueSk7DQotICAgIH0NCi0gICAgdm9pZAkJSW5mbGF0ZShiYXNlVHlwZSBsZWZ0LCBiYXNlVHlwZSB0b3AsIGJhc2VUeXBlIHJpZ2h0LCBiYXNlVHlwZSBib3R0b20pDQotICAgIHsNCi0gICAgICAgIEZYVF9SRUNUOjpsZWZ0IC09IGxlZnQ7DQotICAgICAgICBGWFRfUkVDVDo6dG9wIC09IHRvcDsNCi0gICAgICAgIEZYVF9SRUNUOjp3aWR0aCArPSBsZWZ0ICsgcmlnaHQ7DQotICAgICAgICBGWFRfUkVDVDo6aGVpZ2h0ICs9IHRvcCArIGJvdHRvbTsNCi0gICAgfQ0KLSAgICB2b2lkCQlJbmZsYXRlKGNvbnN0IEZYVF9SRUNUICZydCkNCi0gICAgew0KLSAgICAgICAgSW5mbGF0ZShydC5sZWZ0LCBydC50b3AsIHJ0LmxlZnQgKyBydC53aWR0aCwgcnQudG9wICsgcnQuaGVpZ2h0KTsNCi0gICAgfQ0KLSAgICB2b2lkCQlEZWZsYXRlKGJhc2VUeXBlIHgsIGJhc2VUeXBlIHkpDQotICAgIHsNCi0gICAgICAgIGxlZnQgKz0geDsNCi0gICAgICAgIHdpZHRoIC09IHggKiAyOw0KLSAgICAgICAgdG9wICs9IHk7DQotICAgICAgICBoZWlnaHQgLT0geSAqIDI7DQotICAgIH0NCi0gICAgdm9pZAkJRGVmbGF0ZShjb25zdCBGWFRfUE9JTlQgJnApDQotICAgIHsNCi0gICAgICAgIERlZmxhdGUocC54LCBwLnkpOw0KLSAgICB9DQotICAgIHZvaWQJCURlZmxhdGUoYmFzZVR5cGUgbGVmdCwgYmFzZVR5cGUgdG9wLCBiYXNlVHlwZSByaWdodCwgYmFzZVR5cGUgYm90dG9tKQ0KLSAgICB7DQotICAgICAgICBGWFRfUkVDVDo6bGVmdCArPSBsZWZ0Ow0KLSAgICAgICAgRlhUX1JFQ1Q6OnRvcCArPSB0b3A7DQotICAgICAgICBGWFRfUkVDVDo6d2lkdGggLT0gbGVmdCArIHJpZ2h0Ow0KLSAgICAgICAgRlhUX1JFQ1Q6OmhlaWdodCAtPSB0b3AgKyBib3R0b207DQotICAgIH0NCi0gICAgdm9pZAkJRGVmbGF0ZShjb25zdCBGWFRfUkVDVCAmcnQpDQotICAgIHsNCi0gICAgICAgIERlZmxhdGUocnQubGVmdCwgcnQudG9wLCBydC50b3AgKyBydC53aWR0aCwgcnQudG9wICsgcnQuaGVpZ2h0KTsNCi0gICAgfQ0KLSAgICBGWF9CT09MCQlJc0VtcHR5KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDA7DQotICAgIH0NCi0gICAgRlhfQk9PTAkJSXNFbXB0eShGWF9GTE9BVCBmRXBzaWxvbikgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIHdpZHRoIDw9IGZFcHNpbG9uIHx8IGhlaWdodCA8PSBmRXBzaWxvbjsNCi0gICAgfQ0KLSAgICB2b2lkCQlFbXB0eSgpDQotICAgIHsNCi0gICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gMDsNCi0gICAgfQ0KLSAgICBGWF9CT09MCQlDb250YWlucyhiYXNlVHlwZSB4LCBiYXNlVHlwZSB5KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4geCA+PSBsZWZ0ICYmIHggPCBsZWZ0ICsgd2lkdGggJiYgeSA+PSB0b3AgJiYgeSA8IHRvcCArIGhlaWdodDsNCi0gICAgfQ0KLSAgICBGWF9CT09MCQlDb250YWlucyhjb25zdCBGWFRfUE9JTlQgJnApIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBDb250YWlucyhwLngsIHAueSk7DQotICAgIH0NCi0gICAgRlhfQk9PTAkJQ29udGFpbnMoY29uc3QgRlhUX1JFQ1QgJnJ0KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gcnQubGVmdCA+PSBsZWZ0ICYmIHJ0LnJpZ2h0KCkgPD0gcmlnaHQoKSAmJiBydC50b3AgPj0gdG9wICYmIHJ0LmJvdHRvbSgpIDw9IGJvdHRvbSgpOw0KLSAgICB9DQotICAgIGJhc2VUeXBlCVdpZHRoKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIHdpZHRoOw0KLSAgICB9DQotICAgIGJhc2VUeXBlCUhlaWdodCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBoZWlnaHQ7DQotICAgIH0NCi0gICAgRlhUX1NJWkUJU2l6ZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIEZYVF9TSVpFIHNpemU7DQotICAgICAgICBzaXplLlNldCh3aWR0aCwgaGVpZ2h0KTsNCi0gICAgICAgIHJldHVybiBzaXplOw0KLSAgICB9DQotICAgIHZvaWQJCVNpemUoRlhUX1NJWkUgcykNCi0gICAgew0KLSAgICAgICAgd2lkdGggPSBzLngsIGhlaWdodCA9IHMueTsNCi0gICAgfQ0KLSAgICBGWFRfUE9JTlQJVG9wTGVmdCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIEZYVF9QT0lOVCBwOw0KLSAgICAgICAgcC54ID0gbGVmdDsNCi0gICAgICAgIHAueSA9IHRvcDsNCi0gICAgICAgIHJldHVybiBwOw0KLSAgICB9DQotICAgIEZYVF9QT0lOVAlUb3BSaWdodCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIEZYVF9QT0lOVCBwOw0KLSAgICAgICAgcC54ID0gbGVmdCArIHdpZHRoOw0KLSAgICAgICAgcC55ID0gdG9wOw0KLSAgICAgICAgcmV0dXJuIHA7DQotICAgIH0NCi0gICAgRlhUX1BPSU5UCUJvdHRvbUxlZnQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBGWFRfUE9JTlQgcDsNCi0gICAgICAgIHAueCA9IGxlZnQ7DQotICAgICAgICBwLnkgPSB0b3AgKyBoZWlnaHQ7DQotICAgICAgICByZXR1cm4gcDsNCi0gICAgfQ0KLSAgICBGWFRfUE9JTlQJQm90dG9tUmlnaHQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBGWFRfUE9JTlQgcDsNCi0gICAgICAgIHAueCA9IGxlZnQgKyB3aWR0aDsNCi0gICAgICAgIHAueSA9IHRvcCArIGhlaWdodDsNCi0gICAgICAgIHJldHVybiBwOw0KLSAgICB9DQotICAgIHZvaWQJCVRvcExlZnQoRlhUX1BPSU5UIHRsKQ0KLSAgICB7DQotICAgICAgICBsZWZ0ID0gdGwueDsNCi0gICAgICAgIHRvcCA9IHRsLnk7DQotICAgIH0NCi0gICAgdm9pZAkJVG9wUmlnaHQoRlhUX1BPSU5UIHRyKQ0KLSAgICB7DQotICAgICAgICB3aWR0aCA9IHRyLnggLSBsZWZ0Ow0KLSAgICAgICAgdG9wID0gdHIueTsNCi0gICAgfQ0KLSAgICB2b2lkCQlCb3R0b21MZWZ0KEZYVF9QT0lOVCBibCkNCi0gICAgew0KLSAgICAgICAgbGVmdCA9IGJsLng7DQotICAgICAgICBoZWlnaHQgPSBibC55IC0gdG9wOw0KLSAgICB9DQotICAgIHZvaWQJCUJvdHRvbVJpZ2h0KEZYVF9QT0lOVCBicikNCi0gICAgew0KLSAgICAgICAgd2lkdGggPSBici54IC0gbGVmdDsNCi0gICAgICAgIGhlaWdodCA9IGJyLnkgLSB0b3A7DQotICAgIH0NCi0gICAgRlhUX1BPSU5UCUNlbnRlcigpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIEZYVF9QT0lOVCBwOw0KLSAgICAgICAgcC54ID0gbGVmdCArIHdpZHRoIC8gMjsNCi0gICAgICAgIHAueSA9IHRvcCArIGhlaWdodCAvIDI7DQotICAgICAgICByZXR1cm4gcDsNCi0gICAgfQ0KLSAgICB2b2lkCQlHZXRQYXJhbGxlbG9ncmFtKEZYVF9QQVJBTCAmcGcpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHBnLnggPSBsZWZ0LCBwZy55ID0gdG9wOw0KLSAgICAgICAgcGcueDEgPSB3aWR0aCwgcGcueTEgPSAwOw0KLSAgICAgICAgcGcueDIgPSAwLCBwZy55MiA9IGhlaWdodDsNCi0gICAgfQ0KLSAgICB2b2lkCQlVbmlvbihiYXNlVHlwZSB4LCBiYXNlVHlwZSB5KQ0KLSAgICB7DQotICAgICAgICBiYXNlVHlwZSByID0gcmlnaHQoKSwgYiA9IGJvdHRvbSgpOw0KLSAgICAgICAgaWYgKGxlZnQgPiB4KSB7DQotICAgICAgICAgICAgbGVmdCA9IHg7DQotICAgICAgICB9DQotICAgICAgICBpZiAociA8IHgpIHsNCi0gICAgICAgICAgICByID0geDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICh0b3AgPiB5KSB7DQotICAgICAgICAgICAgdG9wID0geTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChiIDwgeSkgew0KLSAgICAgICAgICAgIGIgPSB5Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgd2lkdGggPSByIC0gbGVmdDsNCi0gICAgICAgIGhlaWdodCA9IGIgLSB0b3A7DQotICAgIH0NCi0gICAgdm9pZAkJVW5pb24oY29uc3QgRlhUX1BPSU5UICZwKQ0KLSAgICB7DQotICAgICAgICBVbmlvbihwLngsIHAueSk7DQotICAgIH0NCi0gICAgdm9pZAkJVW5pb24oY29uc3QgRlhUX1JFQ1QgJnJ0KQ0KLSAgICB7DQotICAgICAgICBiYXNlVHlwZSByID0gcmlnaHQoKSwgYiA9IGJvdHRvbSgpOw0KLSAgICAgICAgaWYgKGxlZnQgPiBydC5sZWZ0KSB7DQotICAgICAgICAgICAgbGVmdCA9IHJ0LmxlZnQ7DQotICAgICAgICB9DQotICAgICAgICBpZiAociA8IHJ0LnJpZ2h0KCkpIHsNCi0gICAgICAgICAgICByID0gcnQucmlnaHQoKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICh0b3AgPiBydC50b3ApIHsNCi0gICAgICAgICAgICB0b3AgPSBydC50b3A7DQotICAgICAgICB9DQotICAgICAgICBpZiAoYiA8IHJ0LmJvdHRvbSgpKSB7DQotICAgICAgICAgICAgYiA9IHJ0LmJvdHRvbSgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgd2lkdGggPSByIC0gbGVmdDsNCi0gICAgICAgIGhlaWdodCA9IGIgLSB0b3A7DQotICAgIH0NCi0gICAgdm9pZAkJSW50ZXJzZWN0KGNvbnN0IEZYVF9SRUNUICZydCkNCi0gICAgew0KLSAgICAgICAgYmFzZVR5cGUgciA9IHJpZ2h0KCksIGIgPSBib3R0b20oKTsNCi0gICAgICAgIGlmIChsZWZ0IDwgcnQubGVmdCkgew0KLSAgICAgICAgICAgIGxlZnQgPSBydC5sZWZ0Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHIgPiBydC5yaWdodCgpKSB7DQotICAgICAgICAgICAgciA9IHJ0LnJpZ2h0KCk7DQotICAgICAgICB9DQotICAgICAgICBpZiAodG9wIDwgcnQudG9wKSB7DQotICAgICAgICAgICAgdG9wID0gcnQudG9wOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGIgPiBydC5ib3R0b20oKSkgew0KLSAgICAgICAgICAgIGIgPSBydC5ib3R0b20oKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHdpZHRoID0gciAtIGxlZnQ7DQotICAgICAgICBoZWlnaHQgPSBiIC0gdG9wOw0KLSAgICB9DQotICAgIEZYX0JPT0wJCUludGVyc2VjdFdpdGgoY29uc3QgRlhUX1JFQ1QgJnJ0KSBjb25zdA0KLSAgICB7DQotICAgICAgICBGWFRfUkVDVCByZWN0ID0gcnQ7DQotICAgICAgICByZWN0LkludGVyc2VjdCgqdGhpcyk7DQotICAgICAgICByZXR1cm4gIXJlY3QuSXNFbXB0eSgpOw0KLSAgICB9DQotICAgIEZYX0JPT0wJCUludGVyc2VjdFdpdGgoY29uc3QgRlhUX1JFQ1QgJnJ0LCBGWF9GTE9BVCBmRXBzaWxvbikgY29uc3QNCi0gICAgew0KLSAgICAgICAgRlhUX1JFQ1QgcmVjdCA9IHJ0Ow0KLSAgICAgICAgcmVjdC5JbnRlcnNlY3QoKnRoaXMpOw0KLSAgICAgICAgcmV0dXJuICFyZWN0LklzRW1wdHkoZkVwc2lsb24pOw0KLSAgICB9DQotICAgIGZyaWVuZAlGWF9CT09MCW9wZXJhdG9yID09IChjb25zdCBGWFRfUkVDVCAmcmMxLCBjb25zdCBGWFRfUkVDVCAmcmMyKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gcmMxLmxlZnQgPT0gcmMyLmxlZnQgJiYgcmMxLnRvcCA9PSByYzIudG9wICYmIHJjMS53aWR0aCA9PSByYzIud2lkdGggJiYgcmMxLmhlaWdodCA9PSByYzIuaGVpZ2h0Ow0KLSAgICB9DQotICAgIGZyaWVuZAlGWF9CT09MCW9wZXJhdG9yICE9IChjb25zdCBGWFRfUkVDVCAmcmMxLCBjb25zdCBGWFRfUkVDVCAmcmMyKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gcmMxLmxlZnQgIT0gcmMyLmxlZnQgfHwgcmMxLnRvcCAhPSByYzIudG9wIHx8IHJjMS53aWR0aCAhPSByYzIud2lkdGggfHwgcmMxLmhlaWdodCAhPSByYzIuaGVpZ2h0Ow0KLSAgICB9DQotICAgIGJhc2VUeXBlIGxlZnQsIHRvcDsNCi0gICAgYmFzZVR5cGUgd2lkdGgsIGhlaWdodDsNCi19Ow0KLXR5cGVkZWYgQ0ZYX1JUZW1wbGF0ZTxGWF9JTlQzMj4JCQlDRlhfUmVjdDsNCi10eXBlZGVmIENGWF9SVGVtcGxhdGU8RlhfRkxPQVQ+CQkJQ0ZYX1JlY3RGOw0KLXR5cGVkZWYgQ0ZYX1JUZW1wbGF0ZTxGWF9JTlQzMj4gKgkJRlhfTFBSRUNUOw0KLXR5cGVkZWYgQ0ZYX1JUZW1wbGF0ZTxGWF9GTE9BVD4gKgkJRlhfTFBSRUNURjsNCi10eXBlZGVmIENGWF9SVGVtcGxhdGU8RlhfSU5UMzI+IGNvbnN0ICoJRlhfTFBDUkVDVDsNCi10eXBlZGVmIENGWF9SVGVtcGxhdGU8RlhfRkxPQVQ+IGNvbnN0ICoJRlhfTFBDUkVDVEY7DQotdHlwZWRlZiBDRlhfQXJyYXlUZW1wbGF0ZTxDRlhfUmVjdEY+CUNGWF9SZWN0RkFycmF5Ow0KLXN0cnVjdCBGWF9SRUNUIHsNCi0NCi0gICAgaW50CQkJbGVmdDsNCi0NCi0gICAgaW50CQkJdG9wOw0KLQ0KLSAgICBpbnQJCQlyaWdodDsNCi0NCi0gICAgaW50CQkJYm90dG9tOw0KLQ0KLSAgICBGWF9SRUNUKCkge30NCi0NCi0gICAgRlhfUkVDVChpbnQgbGVmdDEsIGludCB0b3AxLCBpbnQgcmlnaHQxLCBpbnQgYm90dG9tMSkNCi0gICAgew0KLSAgICAgICAgbGVmdCA9IGxlZnQxOw0KLSAgICAgICAgdG9wID0gdG9wMTsNCi0gICAgICAgIHJpZ2h0ID0gcmlnaHQxOw0KLSAgICAgICAgYm90dG9tID0gYm90dG9tMTsNCi0gICAgfQ0KLQ0KLSAgICBpbnQJCQlXaWR0aCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiByaWdodCAtIGxlZnQ7DQotICAgIH0NCi0NCi0gICAgaW50CQkJSGVpZ2h0KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIGJvdHRvbSAtIHRvcDsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MCQlJc0VtcHR5KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIHJpZ2h0IDw9IGxlZnQgfHwgYm90dG9tIDw9IHRvcDsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQlOb3JtYWxpemUoKTsNCi0NCi0gICAgdm9pZAkJSW50ZXJzZWN0KGNvbnN0IEZYX1JFQ1QmIHNyYyk7DQotDQotICAgIHZvaWQJCUludGVyc2VjdChpbnQgbGVmdDEsIGludCB0b3AxLCBpbnQgcmlnaHQxLCBpbnQgYm90dG9tMSkNCi0gICAgew0KLSAgICAgICAgSW50ZXJzZWN0KEZYX1JFQ1QobGVmdDEsIHRvcDEsIHJpZ2h0MSwgYm90dG9tMSkpOw0KLSAgICB9DQotDQotICAgIHZvaWQJCVVuaW9uKGNvbnN0IEZYX1JFQ1QmIG90aGVyX3JlY3QpOw0KLQ0KLSAgICBGWF9CT09MCQlvcGVyYXRvciA9PSAoY29uc3QgRlhfUkVDVCYgc3JjKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbGVmdCA9PSBzcmMubGVmdCAmJiByaWdodCA9PSBzcmMucmlnaHQgJiYgdG9wID09IHNyYy50b3AgJiYgYm90dG9tID09IHNyYy5ib3R0b207DQotICAgIH0NCi0NCi0gICAgdm9pZAkJT2Zmc2V0KGludCBkeCwgaW50IGR5KQ0KLSAgICB7DQotICAgICAgICBsZWZ0ICs9IGR4Ow0KLSAgICAgICAgcmlnaHQgKz0gZHg7DQotICAgICAgICB0b3AgKz0gZHk7DQotICAgICAgICBib3R0b20gKz0gZHk7DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTAkJQ29udGFpbnMoY29uc3QgRlhfUkVDVCYgb3RoZXJfcmVjdCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG90aGVyX3JlY3QubGVmdCA+PSBsZWZ0ICYmIG90aGVyX3JlY3QucmlnaHQgPD0gcmlnaHQgJiYgb3RoZXJfcmVjdC50b3AgPj0gdG9wICYmIG90aGVyX3JlY3QuYm90dG9tIDw9IGJvdHRvbTsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MCQlDb250YWlucyhpbnQgeCwgaW50IHkpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiB4ID49IGxlZnQgJiYgeCA8IHJpZ2h0ICYmIHkgPj0gdG9wICYmIHkgPCBib3R0b207DQotICAgIH0NCi19Ow0KLXN0cnVjdCBGWF9TTUFMTF9SRUNUIHsNCi0NCi0gICAgRlhfU0hPUlQJTGVmdDsNCi0NCi0gICAgRlhfU0hPUlQJVG9wOw0KLQ0KLSAgICBGWF9TSE9SVAlSaWdodDsNCi0NCi0gICAgRlhfU0hPUlQJQm90dG9tOw0KLX07DQotY2xhc3MgQ0ZYX0Zsb2F0UmVjdCA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ0ZYX0Zsb2F0UmVjdCgpDQotICAgIHsNCi0gICAgICAgIGxlZnQgPSByaWdodCA9IGJvdHRvbSA9IHRvcCA9IDA7DQotICAgIH0NCi0NCi0gICAgQ0ZYX0Zsb2F0UmVjdChGWF9GTE9BVCBsZWZ0MSwgRlhfRkxPQVQgYm90dG9tMSwgRlhfRkxPQVQgcmlnaHQxLCBGWF9GTE9BVCB0b3AxKQ0KLSAgICB7DQotICAgICAgICBsZWZ0ID0gbGVmdDE7DQotICAgICAgICBib3R0b20gPSBib3R0b20xOw0KLSAgICAgICAgcmlnaHQgPSByaWdodDE7DQotICAgICAgICB0b3AgPSB0b3AxOw0KLSAgICB9DQotDQotICAgIENGWF9GbG9hdFJlY3QoY29uc3QgRlhfRkxPQVQqIHBBcnJheSkNCi0gICAgew0KLSAgICAgICAgbGVmdCA9IHBBcnJheVswXTsNCi0gICAgICAgIGJvdHRvbSA9IHBBcnJheVsxXTsNCi0gICAgICAgIHJpZ2h0ID0gcEFycmF5WzJdOw0KLSAgICAgICAgdG9wID0gcEFycmF5WzNdOw0KLSAgICB9DQotDQotICAgIENGWF9GbG9hdFJlY3QoY29uc3QgRlhfUkVDVCYgcmVjdCk7DQotDQotICAgIEZYX0JPT0wJCQkJSXNFbXB0eSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBsZWZ0ID49IHJpZ2h0IHx8IGJvdHRvbSA+PSB0b3A7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCQlOb3JtYWxpemUoKTsNCi0NCi0gICAgdm9pZAkJCQlSZXNldCgpDQotICAgIHsNCi0gICAgICAgIGxlZnQgPSByaWdodCA9IGJvdHRvbSA9IHRvcCA9IDA7DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTAkJCQlDb250YWlucyhjb25zdCBDRlhfRmxvYXRSZWN0JiBvdGhlcl9yZWN0KSBjb25zdDsNCi0NCi0gICAgRlhfQk9PTAkJCQlDb250YWlucyhGWF9GTE9BVCB4LCBGWF9GTE9BVCB5KSBjb25zdDsNCi0NCi0gICAgdm9pZAkJCQlUcmFuc2Zvcm0oY29uc3QgQ0ZYX01hdHJpeCogcE1hdHJpeCk7DQotDQotICAgIHZvaWQJCQkJSW50ZXJzZWN0KGNvbnN0IENGWF9GbG9hdFJlY3QmIG90aGVyX3JlY3QpOw0KLQ0KLSAgICB2b2lkCQkJCVVuaW9uKGNvbnN0IENGWF9GbG9hdFJlY3QmIG90aGVyX3JlY3QpOw0KLQ0KLSAgICBGWF9SRUNUCQkJCUdldElubmVyUmVjdCgpIGNvbnN0Ow0KLQ0KLSAgICBGWF9SRUNUCQkJCUdldE91dHRlclJlY3QoKSBjb25zdDsNCi0NCi0gICAgRlhfUkVDVAkJCQlHZXRDbG9zZXN0UmVjdCgpIGNvbnN0Ow0KLQ0KLSAgICBpbnQJCQkJCVN1YnN0cmFjdDQoQ0ZYX0Zsb2F0UmVjdCYgc3Vic3RyYWN0X3JlY3QsIENGWF9GbG9hdFJlY3QqIHBSZWN0cyk7DQotDQotICAgIHZvaWQJCQkJSW5pdFJlY3QoRlhfRkxPQVQgeCwgRlhfRkxPQVQgeSkNCi0gICAgew0KLSAgICAgICAgbGVmdCA9IHJpZ2h0ID0geDsNCi0gICAgICAgIGJvdHRvbSA9IHRvcCA9IHk7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCQlVcGRhdGVSZWN0KEZYX0ZMT0FUIHgsIEZYX0ZMT0FUIHkpOw0KLQ0KLSAgICBGWF9GTE9BVAkJCVdpZHRoKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIHJpZ2h0IC0gbGVmdDsNCi0gICAgfQ0KLQ0KLSAgICBGWF9GTE9BVAkJCUhlaWdodCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiB0b3AgLSBib3R0b207DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCQlJbmZsYXRlKEZYX0ZMT0FUIHgsIEZYX0ZMT0FUIHkpDQotICAgIHsNCi0gICAgICAgIE5vcm1hbGl6ZSgpOw0KLSAgICAgICAgbGVmdCAtPSB4Ow0KLSAgICAgICAgcmlnaHQgKz0geDsNCi0gICAgICAgIGJvdHRvbSAtPSB5Ow0KLSAgICAgICAgdG9wICs9IHk7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCQlJbmZsYXRlKEZYX0ZMT0FUIGxlZnQsIEZYX0ZMT0FUIGJvdHRvbSwgRlhfRkxPQVQgcmlnaHQsIEZYX0ZMT0FUIHRvcCkNCi0gICAgew0KLSAgICAgICAgTm9ybWFsaXplKCk7DQotICAgICAgICB0aGlzLT5sZWZ0IC09IGxlZnQ7DQotICAgICAgICB0aGlzLT5ib3R0b20gLT0gYm90dG9tOw0KLSAgICAgICAgdGhpcy0+cmlnaHQgKz0gcmlnaHQ7DQotICAgICAgICB0aGlzLT50b3AgKz0gdG9wOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJSW5mbGF0ZShjb25zdCBDRlhfRmxvYXRSZWN0ICZydCkNCi0gICAgew0KLSAgICAgICAgSW5mbGF0ZShydC5sZWZ0LCBydC5ib3R0b20sIHJ0LnJpZ2h0LCBydC50b3ApOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJRGVmbGF0ZShGWF9GTE9BVCB4LCBGWF9GTE9BVCB5KQ0KLSAgICB7DQotICAgICAgICBOb3JtYWxpemUoKTsNCi0gICAgICAgIGxlZnQgKz0geDsNCi0gICAgICAgIHJpZ2h0IC09IHg7DQotICAgICAgICBib3R0b20gKz0geTsNCi0gICAgICAgIHRvcCAtPSB5Ow0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJRGVmbGF0ZShGWF9GTE9BVCBsZWZ0LCBGWF9GTE9BVCBib3R0b20sIEZYX0ZMT0FUIHJpZ2h0LCBGWF9GTE9BVCB0b3ApDQotICAgIHsNCi0gICAgICAgIE5vcm1hbGl6ZSgpOw0KLSAgICAgICAgdGhpcy0+bGVmdCArPSBsZWZ0Ow0KLSAgICAgICAgdGhpcy0+Ym90dG9tICs9IGJvdHRvbTsNCi0gICAgICAgIHRoaXMtPnJpZ2h0IC09IHJpZ2h0Ow0KLSAgICAgICAgdGhpcy0+dG9wIC09IHRvcDsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJCURlZmxhdGUoY29uc3QgQ0ZYX0Zsb2F0UmVjdCAmcnQpDQotICAgIHsNCi0gICAgICAgIERlZmxhdGUocnQubGVmdCwgcnQuYm90dG9tLCBydC5yaWdodCwgcnQudG9wKTsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJCVRyYW5zbGF0ZShGWF9GTE9BVCBlLCBGWF9GTE9BVCBmKQ0KLSAgICB7DQotICAgICAgICBsZWZ0ICs9IGU7DQotICAgICAgICByaWdodCArPSBlOw0KLSAgICAgICAgdG9wICs9IGY7DQotICAgICAgICBib3R0b20gKz0gZjsNCi0gICAgfQ0KLQ0KLSAgICBzdGF0aWMgQ0ZYX0Zsb2F0UmVjdAlHZXRCQm94KGNvbnN0IENGWF9GbG9hdFBvaW50KiBwUG9pbnRzLCBpbnQgblBvaW50cyk7DQotDQotICAgIEZYX0ZMT0FUCQkJbGVmdDsNCi0NCi0gICAgRlhfRkxPQVQJCQlyaWdodDsNCi0NCi0gICAgRlhfRkxPQVQJCQlib3R0b207DQotDQotICAgIEZYX0ZMT0FUCQkJdG9wOw0KLX07DQotY2xhc3MgQ0ZYX01hdHJpeCA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ0ZYX01hdHJpeCgpDQotICAgIHsNCi0gICAgICAgIGEgPSBkID0gMTsNCi0gICAgICAgIGIgPSBjID0gZSA9IGYgPSAwOw0KLSAgICB9DQotDQotICAgIENGWF9NYXRyaXgoRlhfRkxPQVQgYTEsIEZYX0ZMT0FUIGIxLCBGWF9GTE9BVCBjMSwgRlhfRkxPQVQgZDEsIEZYX0ZMT0FUIGUxLCBGWF9GTE9BVCBmMSkNCi0gICAgew0KLSAgICAgICAgYSA9IGExOw0KLSAgICAgICAgYiA9IGIxOw0KLSAgICAgICAgYyA9IGMxOw0KLSAgICAgICAgZCA9IGQxOw0KLSAgICAgICAgZSA9IGUxOw0KLSAgICAgICAgZiA9IGYxOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQlTZXQoRlhfRkxPQVQgYSwgRlhfRkxPQVQgYiwgRlhfRkxPQVQgYywgRlhfRkxPQVQgZCwgRlhfRkxPQVQgZSwgRlhfRkxPQVQgZik7DQotICAgIHZvaWQJCQlTZXQoY29uc3QgRlhfRkxPQVQgbls2XSk7DQotDQotICAgIHZvaWQJCQlTZXRJZGVudGl0eSgpDQotICAgIHsNCi0gICAgICAgIGEgPSBkID0gMTsNCi0gICAgICAgIGIgPSBjID0gZSA9IGYgPSAwOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQlTZXRSZXZlcnNlKGNvbnN0IENGWF9NYXRyaXggJm0pOw0KLQ0KLSAgICB2b2lkCQkJQ29uY2F0KEZYX0ZMT0FUIGEsIEZYX0ZMT0FUIGIsIEZYX0ZMT0FUIGMsIEZYX0ZMT0FUIGQsIEZYX0ZMT0FUIGUsIEZYX0ZMT0FUIGYsIEZYX0JPT0wgYlByZXBlbmRlZCA9IEZBTFNFKTsNCi0NCi0gICAgdm9pZAkJCUNvbmNhdChjb25zdCBDRlhfTWF0cml4ICZtLCBGWF9CT09MIGJQcmVwZW5kZWQgPSBGQUxTRSk7DQotDQotICAgIHZvaWQJCQlDb25jYXRJbnZlcnNlKGNvbnN0IENGWF9NYXRyaXgmIG0sIEZYX0JPT0wgYlByZXBlbmRlZCA9IEZBTFNFKTsNCi0gICAgdm9pZAkJCVJlc2V0KCkNCi0gICAgew0KLSAgICAgICAgU2V0SWRlbnRpdHkoKTsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJQ29weShjb25zdCBDRlhfTWF0cml4JiBtKQ0KLSAgICB7DQotICAgICAgICAqdGhpcyA9IG07DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTAkJCUlzSWRlbnRpdHkoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gYSA9PSAxICYmIGIgPT0gMCAmJiBjID09IDAgJiYgZCA9PSAxICYmIGUgPT0gMCAmJiBmID09IDA7DQotICAgIH0NCi0gICAgRlhfQk9PTAkJCUlzSW52ZXJ0aWJsZSgpIGNvbnN0Ow0KLQ0KLSAgICBGWF9CT09MCQkJSXM5MFJvdGF0ZWQoKSBjb25zdDsNCi0NCi0gICAgRlhfQk9PTAkJCUlzU2NhbGVkKCkgY29uc3Q7DQotDQotICAgIHZvaWQJCQlUcmFuc2xhdGUoRlhfRkxPQVQgeCwgRlhfRkxPQVQgeSwgRlhfQk9PTCBiUHJlcGVuZGVkID0gRkFMU0UpOw0KLQ0KLSAgICB2b2lkCQkJVHJhbnNsYXRlSShGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBGWF9CT09MIGJQcmVwZW5kZWQgPSBGQUxTRSkNCi0gICAgew0KLSAgICAgICAgVHJhbnNsYXRlKChGWF9GTE9BVCl4LCAoRlhfRkxPQVQpeSwgYlByZXBlbmRlZCk7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCVNjYWxlKEZYX0ZMT0FUIHN4LCBGWF9GTE9BVCBzeSwgRlhfQk9PTCBiUHJlcGVuZGVkID0gRkFMU0UpOw0KLQ0KLSAgICB2b2lkCQkJUm90YXRlKEZYX0ZMT0FUIGZSYWRpYW4sIEZYX0JPT0wgYlByZXBlbmRlZCA9IEZBTFNFKTsNCi0NCi0gICAgdm9pZAkJCVJvdGF0ZUF0KEZYX0ZMT0FUIGZSYWRpYW4sIEZYX0ZMT0FUIHgsIEZYX0ZMT0FUIHksIEZYX0JPT0wgYlByZXBlbmRlZCA9IEZBTFNFKTsNCi0NCi0gICAgdm9pZAkJCVNoZWFyKEZYX0ZMT0FUIGZBbHBoYVJhZGlhbiwgRlhfRkxPQVQgZkJldGFSYWRpYW4sIEZYX0JPT0wgYlByZXBlbmRlZCA9IEZBTFNFKTsNCi0NCi0gICAgdm9pZAkJCU1hdGNoUmVjdChjb25zdCBDRlhfRmxvYXRSZWN0ICZkZXN0LCBjb25zdCBDRlhfRmxvYXRSZWN0ICZzcmMpOw0KLQ0KLSAgICBGWF9GTE9BVAkJR2V0WFVuaXQoKSBjb25zdDsNCi0NCi0gICAgRlhfRkxPQVQJCUdldFlVbml0KCkgY29uc3Q7DQotICAgIHZvaWQJCQlHZXRVbml0UmVjdChDRlhfUmVjdEYgJnJlY3QpIGNvbnN0Ow0KLQ0KLSAgICBDRlhfRmxvYXRSZWN0CUdldFVuaXRSZWN0KCkgY29uc3Q7DQotDQotICAgIEZYX0ZMT0FUCQlHZXRVbml0QXJlYSgpIGNvbnN0Ow0KLSAgICBGWF9GTE9BVAkJVHJhbnNmb3JtWERpc3RhbmNlKEZYX0ZMT0FUIGR4KSBjb25zdDsNCi0gICAgRlhfSU5UMzIJCVRyYW5zZm9ybVhEaXN0YW5jZShGWF9JTlQzMiBkeCkgY29uc3Q7DQotICAgIEZYX0ZMT0FUCQlUcmFuc2Zvcm1ZRGlzdGFuY2UoRlhfRkxPQVQgZHkpIGNvbnN0Ow0KLSAgICBGWF9JTlQzMgkJVHJhbnNmb3JtWURpc3RhbmNlKEZYX0lOVDMyIGR5KSBjb25zdDsNCi0gICAgRlhfRkxPQVQJCVRyYW5zZm9ybURpc3RhbmNlKEZYX0ZMT0FUIGR4LCBGWF9GTE9BVCBkeSkgY29uc3Q7DQotICAgIEZYX0lOVDMyCQlUcmFuc2Zvcm1EaXN0YW5jZShGWF9JTlQzMiBkeCwgRlhfSU5UMzIgZHkpIGNvbnN0Ow0KLQ0KLSAgICBGWF9GTE9BVAkJVHJhbnNmb3JtRGlzdGFuY2UoRlhfRkxPQVQgZGlzdGFuY2UpIGNvbnN0Ow0KLSAgICB2b2lkCQkJVHJhbnNmb3JtUG9pbnQoRlhfRkxPQVQgJngsIEZYX0ZMT0FUICZ5KSBjb25zdDsNCi0gICAgdm9pZAkJCVRyYW5zZm9ybVBvaW50KEZYX0lOVDMyICZ4LCBGWF9JTlQzMiAmeSkgY29uc3Q7DQotICAgIHZvaWQJCQlUcmFuc2Zvcm1Qb2ludHMoQ0ZYX1BvaW50RiAqcG9pbnRzLCBGWF9JTlQzMiBpQ291bnQpIGNvbnN0Ow0KLSAgICB2b2lkCQkJVHJhbnNmb3JtUG9pbnRzKENGWF9Qb2ludCAqcG9pbnRzLCBGWF9JTlQzMiBpQ291bnQpIGNvbnN0Ow0KLQ0KLSAgICB2b2lkCQkJVHJhbnNmb3JtKEZYX0ZMT0FUJiB4LCBGWF9GTE9BVCYgeSkgY29uc3QNCi0gICAgew0KLSAgICAgICAgVHJhbnNmb3JtUG9pbnQoeCwgeSk7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCVRyYW5zZm9ybShGWF9GTE9BVCB4LCBGWF9GTE9BVCB5LCBGWF9GTE9BVCYgeDEsIEZYX0ZMT0FUJiB5MSkgY29uc3QNCi0gICAgew0KLSAgICAgICAgeDEgPSB4LCB5MSA9IHk7DQotICAgICAgICBUcmFuc2Zvcm1Qb2ludCh4MSwgeTEpOw0KLSAgICB9DQotICAgIHZvaWQJCQlUcmFuc2Zvcm1WZWN0b3IoQ0ZYX1ZlY3RvckYgJnYpIGNvbnN0Ow0KLSAgICB2b2lkCQkJVHJhbnNmb3JtVmVjdG9yKENGWF9WZWN0b3IgJnYpIGNvbnN0Ow0KLSAgICB2b2lkCQkJVHJhbnNmb3JtUmVjdChDRlhfUmVjdEYgJnJlY3QpIGNvbnN0Ow0KLSAgICB2b2lkCQkJVHJhbnNmb3JtUmVjdChDRlhfUmVjdCAmcmVjdCkgY29uc3Q7DQotDQotICAgIHZvaWQJCQlUcmFuc2Zvcm1SZWN0KEZYX0ZMT0FUJiBsZWZ0LCBGWF9GTE9BVCYgcmlnaHQsIEZYX0ZMT0FUJiB0b3AsIEZYX0ZMT0FUJiBib3R0b20pIGNvbnN0Ow0KLQ0KLSAgICB2b2lkCQkJVHJhbnNmb3JtUmVjdChDRlhfRmxvYXRSZWN0JiByZWN0KSBjb25zdA0KLSAgICB7DQotICAgICAgICBUcmFuc2Zvcm1SZWN0KHJlY3QubGVmdCwgcmVjdC5yaWdodCwgcmVjdC50b3AsIHJlY3QuYm90dG9tKTsNCi0gICAgfQ0KLQ0KLSAgICBGWF9GTE9BVAkJR2V0QSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBhOw0KLSAgICB9DQotDQotICAgIEZYX0ZMT0FUCQlHZXRCKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIGI7DQotICAgIH0NCi0NCi0gICAgRlhfRkxPQVQJCUdldEMoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gYzsNCi0gICAgfQ0KLQ0KLSAgICBGWF9GTE9BVAkJR2V0RCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBkOw0KLSAgICB9DQotDQotICAgIEZYX0ZMT0FUCQlHZXRFKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIGU7DQotICAgIH0NCi0NCi0gICAgRlhfRkxPQVQJCUdldEYoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gZjsNCi0gICAgfQ0KLXB1YmxpYzoNCi0gICAgRlhfRkxPQVQgYTsNCi0gICAgRlhfRkxPQVQgYjsNCi0gICAgRlhfRkxPQVQgYzsNCi0gICAgRlhfRkxPQVQgZDsNCi0gICAgRlhfRkxPQVQgZTsNCi0gICAgRlhfRkxPQVQgZjsNCi19Ow0KLSNkZWZpbmUgQ0ZYX0FmZmluZU1hdHJpeAlDRlhfTWF0cml4DQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlhDUlRfQ09PUkRJTkFURVNfCisjZGVmaW5lIF9GWENSVF9DT09SRElOQVRFU18KK3RlbXBsYXRlPGNsYXNzIGJhc2VUeXBlPiBjbGFzcyBDRlhfUFNWVGVtcGxhdGU7Cit0ZW1wbGF0ZTxjbGFzcyBiYXNlVHlwZT4gY2xhc3MgQ0ZYX1ZUZW1wbGF0ZTsKK3RlbXBsYXRlPGNsYXNzIGJhc2VUeXBlPiBjbGFzcyBDRlhfUFJMVGVtcGxhdGU7Cit0ZW1wbGF0ZTxjbGFzcyBiYXNlVHlwZT4gY2xhc3MgQ0ZYX1JUZW1wbGF0ZTsKK3RlbXBsYXRlPGNsYXNzIGJhc2VUeXBlPiBjbGFzcyBDRlhfRVRlbXBsYXRlOwordGVtcGxhdGU8Y2xhc3MgYmFzZVR5cGU+IGNsYXNzIENGWF9BVGVtcGxhdGU7Cit0ZW1wbGF0ZTxjbGFzcyBiYXNlVHlwZT4gY2xhc3MgQ0ZYX1JSVGVtcGxhdGU7CitjbGFzcyBDRlhfTWF0cml4OwordGVtcGxhdGU8Y2xhc3MgYmFzZVR5cGU+CitjbGFzcyBDRlhfUFNWVGVtcGxhdGUgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIHR5cGVkZWYgQ0ZYX1BTVlRlbXBsYXRlPGJhc2VUeXBlPglGWFRfUFNWOworICAgIHR5cGVkZWYgQ0ZYX1BTVlRlbXBsYXRlPGJhc2VUeXBlPglGWFRfUE9JTlQ7CisgICAgdHlwZWRlZiBDRlhfUFNWVGVtcGxhdGU8YmFzZVR5cGU+CUZYVF9TSVpFOworICAgIHZvaWQJCVNldChiYXNlVHlwZSB4LCBiYXNlVHlwZSB5KQorICAgIHsKKyAgICAgICAgRlhUX1BTVjo6eCA9IHgsIEZYVF9QU1Y6OnkgPSB5OworICAgIH0KKyAgICB2b2lkCQlTZXQoY29uc3QgRlhUX1BTViAmcHN2KQorICAgIHsKKyAgICAgICAgRlhUX1BTVjo6eCA9IHBzdi54LCBGWFRfUFNWOjp5ID0gcHN2Lnk7CisgICAgfQorICAgIHZvaWQJCUFkZChiYXNlVHlwZSB4LCBiYXNlVHlwZSB5KQorICAgIHsKKyAgICAgICAgRlhUX1BTVjo6eCArPSB4LCBGWFRfUFNWOjp5ICs9IHk7CisgICAgfQorICAgIHZvaWQJCVN1YnRyYWN0KGJhc2VUeXBlIHgsIGJhc2VUeXBlIHkpCisgICAgeworICAgICAgICBGWFRfUFNWOjp4IC09IHgsIEZYVF9QU1Y6OnkgLT0geTsKKyAgICB9CisgICAgdm9pZAkJUmVzZXQoKQorICAgIHsKKyAgICAgICAgRlhUX1BTVjo6eCA9IEZYVF9QU1Y6OnkgPSAwOworICAgIH0KKyAgICBGWFRfUFNWJglvcGVyYXRvciArPSAoY29uc3QgRlhUX1BTViAmb2JqKQorICAgIHsKKyAgICAgICAgeCArPSBvYmoueDsKKyAgICAgICAgeSArPSBvYmoueTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICBGWFRfUFNWJglvcGVyYXRvciAtPSAoY29uc3QgRlhUX1BTViAmb2JqKQorICAgIHsKKyAgICAgICAgeCAtPSBvYmoueDsKKyAgICAgICAgeSAtPSBvYmoueTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICBGWFRfUFNWJglvcGVyYXRvciAqPSAoYmFzZVR5cGUgbGFtZGEpCisgICAgeworICAgICAgICB4ICo9IGxhbWRhOworICAgICAgICB5ICo9IGxhbWRhOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIEZYVF9QU1YmCW9wZXJhdG9yIC89IChiYXNlVHlwZSBsYW1kYSkKKyAgICB7CisgICAgICAgIHggLz0gbGFtZGE7CisgICAgICAgIHkgLz0gbGFtZGE7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgZnJpZW5kCUZYX0JPT0wJCW9wZXJhdG9yID09IChjb25zdCBGWFRfUFNWICZvYmoxLCBjb25zdCBGWFRfUFNWICZvYmoyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9iajEueCA9PSBvYmoyLnggJiYgb2JqMS55ID09IG9iajIueTsKKyAgICB9CisgICAgZnJpZW5kCUZYX0JPT0wJCW9wZXJhdG9yICE9IChjb25zdCBGWFRfUFNWICZvYmoxLCBjb25zdCBGWFRfUFNWICZvYmoyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9iajEueCAhPSBvYmoyLnggfHwgb2JqMS55ICE9IG9iajIueTsKKyAgICB9CisgICAgZnJpZW5kCUZYVF9QU1YJCW9wZXJhdG9yICsgKGNvbnN0IEZYVF9QU1YgJm9iajEsIGNvbnN0IEZYVF9QU1YgJm9iajIpCisgICAgeworICAgICAgICBDRlhfUFNWVGVtcGxhdGUgb2JqOworICAgICAgICBvYmoueCA9IG9iajEueCArIG9iajIueDsKKyAgICAgICAgb2JqLnkgPSBvYmoxLnkgKyBvYmoyLnk7CisgICAgICAgIHJldHVybiBvYmo7CisgICAgfQorICAgIGZyaWVuZAlGWFRfUFNWCQlvcGVyYXRvciAtIChjb25zdCBGWFRfUFNWICZvYmoxLCBjb25zdCBGWFRfUFNWICZvYmoyKQorICAgIHsKKyAgICAgICAgQ0ZYX1BTVlRlbXBsYXRlIG9iajsKKyAgICAgICAgb2JqLnggPSBvYmoxLnggLSBvYmoyLng7CisgICAgICAgIG9iai55ID0gb2JqMS55IC0gb2JqMi55OworICAgICAgICByZXR1cm4gb2JqOworICAgIH0KKyAgICBmcmllbmQJRlhUX1BTVgkJb3BlcmF0b3IgKiAoY29uc3QgRlhUX1BTViAmb2JqLCBiYXNlVHlwZSBsYW1kYSkKKyAgICB7CisgICAgICAgIENGWF9QU1ZUZW1wbGF0ZSB0OworICAgICAgICB0LnggPSBvYmoueCAqIGxhbWRhOworICAgICAgICB0LnkgPSBvYmoueSAqIGxhbWRhOworICAgICAgICByZXR1cm4gdDsKKyAgICB9CisgICAgZnJpZW5kCUZYVF9QU1YJCW9wZXJhdG9yICogKGJhc2VUeXBlIGxhbWRhLCBjb25zdCBGWFRfUFNWICZvYmopCisgICAgeworICAgICAgICBDRlhfUFNWVGVtcGxhdGUgdDsKKyAgICAgICAgdC54ID0gbGFtZGEgKiBvYmoueDsKKyAgICAgICAgdC55ID0gbGFtZGEgKiBvYmoueTsKKyAgICAgICAgcmV0dXJuIHQ7CisgICAgfQorICAgIGZyaWVuZAlGWFRfUFNWCQlvcGVyYXRvciAvIChjb25zdCBGWFRfUFNWICZvYmosIGJhc2VUeXBlIGxhbWRhKQorICAgIHsKKyAgICAgICAgQ0ZYX1BTVlRlbXBsYXRlIHQ7CisgICAgICAgIHQueCA9IG9iai54IC8gbGFtZGE7CisgICAgICAgIHQueSA9IG9iai55IC8gbGFtZGE7CisgICAgICAgIHJldHVybiB0OworICAgIH0KKyAgICBiYXNlVHlwZSB4LCB5OworfTsKK3R5cGVkZWYgQ0ZYX1BTVlRlbXBsYXRlPEZYX0lOVDMyPgkJCUNGWF9Qb2ludDsKK3R5cGVkZWYgQ0ZYX1BTVlRlbXBsYXRlPEZYX0ZMT0FUPgkJCUNGWF9Qb2ludEY7Cit0eXBlZGVmIENGWF9QU1ZUZW1wbGF0ZTxGWF9JTlQzMj4JCQlDRlhfU2l6ZTsKK3R5cGVkZWYgQ0ZYX1BTVlRlbXBsYXRlPEZYX0ZMT0FUPgkJCUNGWF9TaXplRjsKK3R5cGVkZWYgQ0ZYX0FycmF5VGVtcGxhdGU8Q0ZYX1BvaW50PgkJQ0ZYX1BvaW50czsKK3R5cGVkZWYgQ0ZYX0FycmF5VGVtcGxhdGU8Q0ZYX1BvaW50Rj4JCUNGWF9Qb2ludHNGOwordHlwZWRlZiBDRlhfUFNWVGVtcGxhdGU8RlhfSU5UMzI+ICoJCQlGWF9MUFBPSU5UOwordHlwZWRlZiBDRlhfUFNWVGVtcGxhdGU8RlhfRkxPQVQ+ICoJCQlGWF9MUFBPSU5URjsKK3R5cGVkZWYgQ0ZYX1BTVlRlbXBsYXRlPEZYX0lOVDMyPiBjb25zdCAqCUZYX0xQQ1BPSU5UOwordHlwZWRlZiBDRlhfUFNWVGVtcGxhdGU8RlhfRkxPQVQ+IGNvbnN0ICoJRlhfTFBDUE9JTlRGOworI2RlZmluZSBDRlhfRmxvYXRQb2ludAlDRlhfUG9pbnRGCit0ZW1wbGF0ZTxjbGFzcyBiYXNlVHlwZT4KK2NsYXNzIENGWF9WVGVtcGxhdGU6IHB1YmxpYyBDRlhfUFNWVGVtcGxhdGU8YmFzZVR5cGU+Cit7CitwdWJsaWM6CisgICAgdHlwZWRlZiBDRlhfUFNWVGVtcGxhdGU8YmFzZVR5cGU+CUZYVF9QU1Y7CisgICAgdHlwZWRlZiBDRlhfUFNWVGVtcGxhdGU8YmFzZVR5cGU+CUZYVF9QT0lOVDsKKyAgICB0eXBlZGVmIENGWF9QU1ZUZW1wbGF0ZTxiYXNlVHlwZT4JRlhUX1NJWkU7CisgICAgdHlwZWRlZiBDRlhfVlRlbXBsYXRlPGJhc2VUeXBlPgkJRlhUX1ZFQ1RPUjsKKyAgICB2b2lkCQlTZXQoYmFzZVR5cGUgeCwgYmFzZVR5cGUgeSkKKyAgICB7CisgICAgICAgIEZYVF9QU1Y6OnggPSB4LCBGWFRfUFNWOjp5ID0geTsKKyAgICB9CisgICAgdm9pZAkJU2V0KGNvbnN0IEZYVF9QU1YgJnBzdikKKyAgICB7CisgICAgICAgIEZYVF9QU1Y6OnggPSBwc3YueCwgRlhUX1BTVjo6eSA9IHBzdi55OworICAgIH0KKyAgICB2b2lkCQlTZXQoY29uc3QgRlhUX1BPSU5UICZwMSwgY29uc3QgRlhUX1BPSU5UICZwMikKKyAgICB7CisgICAgICAgIEZYVF9QU1Y6OnggPSBwMi54IC0gcDEueCwgRlhUX1BTVjo6eSA9IHAyLnkgLSBwMS55OworICAgIH0KKyAgICB2b2lkCQlSZXNldCgpCisgICAgeworICAgICAgICBGWFRfUFNWOjp4ID0gRlhUX1BTVjo6eSA9IDA7CisgICAgfQorICAgIGJhc2VUeXBlCVNxdWFyZUxlbmd0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRlhUX1BTVjo6eCAqIEZYVF9QU1Y6OnggKyBGWFRfUFNWOjp5ICogRlhUX1BTVjo6eTsKKyAgICB9CisgICAgYmFzZVR5cGUJTGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGWFNZU19zcXJ0KEZYVF9QU1Y6OnggKiBGWFRfUFNWOjp4ICsgRlhUX1BTVjo6eSAqIEZYVF9QU1Y6OnkpOworICAgIH0KKyAgICB2b2lkCQlOb3JtYWxpemUoKQorICAgIHsKKyAgICAgICAgRlhfRkxPQVQgZkxlbiA9IEZYU1lTX3NxcnQoRlhUX1BTVjo6eCAqIEZYVF9QU1Y6OnggKyBGWFRfUFNWOjp5ICogRlhUX1BTVjo6eSk7CisgICAgICAgIEZYU1lTX2Fzc2VydChmTGVuID49IDAuMDAwMWYpOworICAgICAgICBGWFRfUFNWOjp4ID0gKChiYXNlVHlwZSlGWFRfUFNWOjp4KSAvIGZMZW47CisgICAgICAgIEZYVF9QU1Y6OnkgPSAoKGJhc2VUeXBlKUZYVF9QU1Y6OnkpIC8gZkxlbjsKKyAgICB9CisgICAgYmFzZVR5cGUJRG90UHJvZHVjdChiYXNlVHlwZSB4LCBiYXNlVHlwZSB5KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEZYVF9QU1Y6OnggKiB4ICsgRlhUX1BTVjo6eSAqIHk7CisgICAgfQorICAgIGJhc2VUeXBlCURvdFByb2R1Y3QoY29uc3QgRlhUX1ZFQ1RPUiAmdikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBGWFRfUFNWOjp4ICogdi54ICsgRlhUX1BTVjo6eSAqIHYueTsKKyAgICB9CisgICAgRlhfQk9PTAkJSXNQYXJhbGxlbChiYXNlVHlwZSB4LCBiYXNlVHlwZSB5KSBjb25zdAorICAgIHsKKyAgICAgICAgYmFzZVR5cGUgdCA9IEZYVF9QU1Y6OnggKiB5IC0gRlhUX1BTVjo6eSAqIHg7CisgICAgICAgIHJldHVybiBGWFNZU19mYWJzKHQpIDwgMHgwMDAxZjsKKyAgICB9CisgICAgRlhfQk9PTAkJSXNQYXJhbGxlbChjb25zdCBGWFRfVkVDVE9SICZ2KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIElzUGFyYWxsZWwodi54LCB2LnkpOworICAgIH0KKyAgICBGWF9CT09MCQlJc1BlcnBlbmRpY3VsYXIoYmFzZVR5cGUgeCwgYmFzZVR5cGUgeSkgY29uc3QKKyAgICB7CisgICAgICAgIGJhc2VUeXBlIHQgPSBEb3RQcm9kdWN0KHgsIHkpOworICAgICAgICByZXR1cm4gRlhTWVNfZmFicyh0KSA8IDB4MDAwMWY7CisgICAgfQorICAgIEZYX0JPT0wJCUlzUGVycGVuZGljdWxhcihjb25zdCBGWFRfVkVDVE9SICZ2KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIElzUGVycGVuZGljdWxhcih2LngsIHYueSk7CisgICAgfQorICAgIHZvaWQJCVRyYW5zbGF0ZShiYXNlVHlwZSBkeCwgYmFzZVR5cGUgZHkpCisgICAgeworICAgICAgICBGWFRfUFNWOjp4ICs9IGR4LCBGWFRfUFNWOjp5ICs9IGR5OworICAgIH0KKyAgICB2b2lkCQlTY2FsZShiYXNlVHlwZSBzeCwgYmFzZVR5cGUgc3kpCisgICAgeworICAgICAgICBGWFRfUFNWOjp4ICo9IHN4LCBGWFRfUFNWOjp5ICo9IHN5OworICAgIH0KKyAgICB2b2lkCQlSb3RhdGUoRlhfRkxPQVQgZlJhZGlhbikKKyAgICB7CisgICAgICAgIEZYX0ZMT0FUIHh4ID0gKEZYX0ZMT0FUKUZYVF9QU1Y6Ong7CisgICAgICAgIEZYX0ZMT0FUIHl5ID0gKEZYX0ZMT0FUKUZYVF9QU1Y6Onk7CisgICAgICAgIEZYX0ZMT0FUIGNvc1ZhbHVlID0gRlhTWVNfY29zKGZSYWRpYW4pOworICAgICAgICBGWF9GTE9BVCBzaW5WYWx1ZSA9IEZYU1lTX3NpbihmUmFkaWFuKTsKKyAgICAgICAgRlhUX1BTVjo6eCA9IHh4ICogY29zVmFsdWUgLSB5eSAqIHNpblZhbHVlOworICAgICAgICBGWFRfUFNWOjp5ID0geHggKiBzaW5WYWx1ZSArIHl5ICogY29zVmFsdWU7CisgICAgfQorICAgIGZyaWVuZAlGWF9GTE9BVAlDb3NpbmUoY29uc3QgRlhUX1ZFQ1RPUiAmdjEsIGNvbnN0IEZYVF9WRUNUT1IgJnYyKQorICAgIHsKKyAgICAgICAgRlhTWVNfYXNzZXJ0KHYxLlNxdWFyZUxlbmd0aCgpICE9IDAgJiYgdjIuU3F1YXJlTGVuZ3RoKCkgIT0gMCk7CisgICAgICAgIEZYX0ZMT0FUIGRvdFByb2R1Y3QgPSB2MS5Eb3RQcm9kdWN0KHYyKTsKKyAgICAgICAgcmV0dXJuIGRvdFByb2R1Y3QgLyAoRlhfRkxPQVQpRlhTWVNfc3FydCh2MS5TcXVhcmVMZW5ndGgoKSAqIHYyLlNxdWFyZUxlbmd0aCgpKTsKKyAgICB9CisgICAgZnJpZW5kCUZYX0ZMT0FUCUFyY0Nvc2luZShjb25zdCBGWFRfVkVDVE9SICZ2MSwgY29uc3QgRlhUX1ZFQ1RPUiAmdjIpCisgICAgeworICAgICAgICByZXR1cm4gKEZYX0ZMT0FUKUZYU1lTX2Fjb3MoQ29zaW5lKHYxLCB2MikpOworICAgIH0KKyAgICBmcmllbmQJRlhfRkxPQVQJU2xvcGVBbmdsZShjb25zdCBGWFRfVkVDVE9SICZ2KQorICAgIHsKKyAgICAgICAgQ0ZYX1ZUZW1wbGF0ZSB2eDsKKyAgICAgICAgdnguU2V0KDEsIDApOworICAgICAgICBGWF9GTE9BVCBmU2xvcGUgPSBBcmNDb3NpbmUodiwgdngpOworICAgICAgICByZXR1cm4gdi55IDwgMCA/IC1mU2xvcGUgOiBmU2xvcGU7CisgICAgfQorfTsKK3R5cGVkZWYgQ0ZYX1ZUZW1wbGF0ZTxGWF9JTlQzMj4gQ0ZYX1ZlY3RvcjsKK3R5cGVkZWYgQ0ZYX1ZUZW1wbGF0ZTxGWF9GTE9BVD4gQ0ZYX1ZlY3RvckY7Cit0ZW1wbGF0ZTxjbGFzcyBiYXNlVHlwZT4KK2NsYXNzIENGWF9SVGVtcGxhdGU6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgdHlwZWRlZiBDRlhfUFNWVGVtcGxhdGU8YmFzZVR5cGU+CUZYVF9QT0lOVDsKKyAgICB0eXBlZGVmIENGWF9QU1ZUZW1wbGF0ZTxiYXNlVHlwZT4JRlhUX1NJWkU7CisgICAgdHlwZWRlZiBDRlhfVlRlbXBsYXRlPGJhc2VUeXBlPgkJRlhUX1ZFQ1RPUjsKKyAgICB0eXBlZGVmIENGWF9QUkxUZW1wbGF0ZTxiYXNlVHlwZT4JRlhUX1BBUkFMOworICAgIHR5cGVkZWYgQ0ZYX1JUZW1wbGF0ZTxiYXNlVHlwZT4JCUZYVF9SRUNUOworICAgIHZvaWQJCVNldChiYXNlVHlwZSBsZWZ0LCBiYXNlVHlwZSB0b3AsIGJhc2VUeXBlIHdpZHRoLCBiYXNlVHlwZSBoZWlnaHQpCisgICAgeworICAgICAgICBGWFRfUkVDVDo6bGVmdCA9IGxlZnQsIEZYVF9SRUNUOjp0b3AgPSB0b3AsIEZYVF9SRUNUOjp3aWR0aCA9IHdpZHRoLCBGWFRfUkVDVDo6aGVpZ2h0ID0gaGVpZ2h0OworICAgIH0KKyAgICB2b2lkCQlTZXQoYmFzZVR5cGUgbGVmdCwgYmFzZVR5cGUgdG9wLCBjb25zdCBGWFRfU0laRSAmc2l6ZSkKKyAgICB7CisgICAgICAgIEZYVF9SRUNUOjpsZWZ0ID0gbGVmdCwgRlhUX1JFQ1Q6OnRvcCA9IHRvcCwgRlhUX1JFQ1Q6OlNpemUoc2l6ZSk7CisgICAgfQorICAgIHZvaWQJCVNldChjb25zdCBGWFRfUE9JTlQgJnAsIGJhc2VUeXBlIHdpZHRoLCBiYXNlVHlwZSBoZWlnaHQpCisgICAgeworICAgICAgICBUb3BMZWZ0KHApLCBGWFRfUkVDVDo6d2lkdGggPSB3aWR0aCwgRlhUX1JFQ1Q6OmhlaWdodCA9IGhlaWdodDsKKyAgICB9CisgICAgdm9pZAkJU2V0KGNvbnN0IEZYVF9QT0lOVCAmcDEsIGNvbnN0IEZYVF9QT0lOVCAmcDIpCisgICAgeworICAgICAgICBUb3BMZWZ0KHAxKSwgRlhUX1JFQ1Q6OndpZHRoID0gcDIueCAtIHAxLngsIEZYVF9SRUNUOjpoZWlnaHQgPSBwMi55IC0gcDEueSwgRlhUX1JFQ1Q6Ok5vcm1hbGl6ZSgpOworICAgIH0KKyAgICB2b2lkCQlTZXQoY29uc3QgRlhUX1BPSU5UICZwLCBjb25zdCBGWFRfVkVDVE9SICZ2KQorICAgIHsKKyAgICAgICAgVG9wTGVmdChwKSwgRlhUX1JFQ1Q6OndpZHRoID0gdi54LCBGWFRfUkVDVDo6aGVpZ2h0ID0gdi55LCBGWFRfUkVDVDo6Tm9ybWFsaXplKCk7CisgICAgfQorICAgIHZvaWQJCVJlc2V0KCkKKyAgICB7CisgICAgICAgIEZYVF9SRUNUOjpsZWZ0ID0gRlhUX1JFQ1Q6OnRvcCA9IEZYVF9SRUNUOjp3aWR0aCA9IEZYVF9SRUNUOjpoZWlnaHQgPSAwOworICAgIH0KKyAgICBGWFRfUkVDVCYJb3BlcmF0b3IgKz0gKGNvbnN0IEZYVF9QT0lOVCAmcCkKKyAgICB7CisgICAgICAgIGxlZnQgKz0gcC54LCB0b3AgKz0gcC55OworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIEZYVF9SRUNUJglvcGVyYXRvciAtPSAoY29uc3QgRlhUX1BPSU5UICZwKQorICAgIHsKKyAgICAgICAgbGVmdCAtPSBwLngsIHRvcCAtPSBwLnk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgYmFzZVR5cGUJcmlnaHQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxlZnQgKyB3aWR0aDsKKyAgICB9CisgICAgYmFzZVR5cGUJYm90dG9tKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0b3AgKyBoZWlnaHQ7CisgICAgfQorICAgIHZvaWQJCU5vcm1hbGl6ZSgpCisgICAgeworICAgICAgICBpZiAod2lkdGggPCAwKSB7CisgICAgICAgICAgICBsZWZ0ICs9IHdpZHRoOworICAgICAgICAgICAgd2lkdGggPSAtd2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGhlaWdodCA8IDApIHsKKyAgICAgICAgICAgIHRvcCArPSBoZWlnaHQ7CisgICAgICAgICAgICBoZWlnaHQgPSAtaGVpZ2h0OworICAgICAgICB9CisgICAgfQorICAgIHZvaWQJCU9mZnNldChiYXNlVHlwZSBkeCwgYmFzZVR5cGUgZHkpCisgICAgeworICAgICAgICBsZWZ0ICs9IGR4OworICAgICAgICB0b3AgKz0gZHk7CisgICAgfQorICAgIHZvaWQJCUluZmxhdGUoYmFzZVR5cGUgeCwgYmFzZVR5cGUgeSkKKyAgICB7CisgICAgICAgIGxlZnQgLT0geDsKKyAgICAgICAgd2lkdGggKz0geCAqIDI7CisgICAgICAgIHRvcCAtPSB5OworICAgICAgICBoZWlnaHQgKz0geSAqIDI7CisgICAgfQorICAgIHZvaWQJCUluZmxhdGUoY29uc3QgRlhUX1BPSU5UICZwKQorICAgIHsKKyAgICAgICAgSW5mbGF0ZShwLngsIHAueSk7CisgICAgfQorICAgIHZvaWQJCUluZmxhdGUoYmFzZVR5cGUgbGVmdCwgYmFzZVR5cGUgdG9wLCBiYXNlVHlwZSByaWdodCwgYmFzZVR5cGUgYm90dG9tKQorICAgIHsKKyAgICAgICAgRlhUX1JFQ1Q6OmxlZnQgLT0gbGVmdDsKKyAgICAgICAgRlhUX1JFQ1Q6OnRvcCAtPSB0b3A7CisgICAgICAgIEZYVF9SRUNUOjp3aWR0aCArPSBsZWZ0ICsgcmlnaHQ7CisgICAgICAgIEZYVF9SRUNUOjpoZWlnaHQgKz0gdG9wICsgYm90dG9tOworICAgIH0KKyAgICB2b2lkCQlJbmZsYXRlKGNvbnN0IEZYVF9SRUNUICZydCkKKyAgICB7CisgICAgICAgIEluZmxhdGUocnQubGVmdCwgcnQudG9wLCBydC5sZWZ0ICsgcnQud2lkdGgsIHJ0LnRvcCArIHJ0LmhlaWdodCk7CisgICAgfQorICAgIHZvaWQJCURlZmxhdGUoYmFzZVR5cGUgeCwgYmFzZVR5cGUgeSkKKyAgICB7CisgICAgICAgIGxlZnQgKz0geDsKKyAgICAgICAgd2lkdGggLT0geCAqIDI7CisgICAgICAgIHRvcCArPSB5OworICAgICAgICBoZWlnaHQgLT0geSAqIDI7CisgICAgfQorICAgIHZvaWQJCURlZmxhdGUoY29uc3QgRlhUX1BPSU5UICZwKQorICAgIHsKKyAgICAgICAgRGVmbGF0ZShwLngsIHAueSk7CisgICAgfQorICAgIHZvaWQJCURlZmxhdGUoYmFzZVR5cGUgbGVmdCwgYmFzZVR5cGUgdG9wLCBiYXNlVHlwZSByaWdodCwgYmFzZVR5cGUgYm90dG9tKQorICAgIHsKKyAgICAgICAgRlhUX1JFQ1Q6OmxlZnQgKz0gbGVmdDsKKyAgICAgICAgRlhUX1JFQ1Q6OnRvcCArPSB0b3A7CisgICAgICAgIEZYVF9SRUNUOjp3aWR0aCAtPSBsZWZ0ICsgcmlnaHQ7CisgICAgICAgIEZYVF9SRUNUOjpoZWlnaHQgLT0gdG9wICsgYm90dG9tOworICAgIH0KKyAgICB2b2lkCQlEZWZsYXRlKGNvbnN0IEZYVF9SRUNUICZydCkKKyAgICB7CisgICAgICAgIERlZmxhdGUocnQubGVmdCwgcnQudG9wLCBydC50b3AgKyBydC53aWR0aCwgcnQudG9wICsgcnQuaGVpZ2h0KTsKKyAgICB9CisgICAgRlhfQk9PTAkJSXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gd2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMDsKKyAgICB9CisgICAgRlhfQk9PTAkJSXNFbXB0eShGWF9GTE9BVCBmRXBzaWxvbikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB3aWR0aCA8PSBmRXBzaWxvbiB8fCBoZWlnaHQgPD0gZkVwc2lsb247CisgICAgfQorICAgIHZvaWQJCUVtcHR5KCkKKyAgICB7CisgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gMDsKKyAgICB9CisgICAgRlhfQk9PTAkJQ29udGFpbnMoYmFzZVR5cGUgeCwgYmFzZVR5cGUgeSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB4ID49IGxlZnQgJiYgeCA8IGxlZnQgKyB3aWR0aCAmJiB5ID49IHRvcCAmJiB5IDwgdG9wICsgaGVpZ2h0OworICAgIH0KKyAgICBGWF9CT09MCQlDb250YWlucyhjb25zdCBGWFRfUE9JTlQgJnApIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQ29udGFpbnMocC54LCBwLnkpOworICAgIH0KKyAgICBGWF9CT09MCQlDb250YWlucyhjb25zdCBGWFRfUkVDVCAmcnQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcnQubGVmdCA+PSBsZWZ0ICYmIHJ0LnJpZ2h0KCkgPD0gcmlnaHQoKSAmJiBydC50b3AgPj0gdG9wICYmIHJ0LmJvdHRvbSgpIDw9IGJvdHRvbSgpOworICAgIH0KKyAgICBiYXNlVHlwZQlXaWR0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gd2lkdGg7CisgICAgfQorICAgIGJhc2VUeXBlCUhlaWdodCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaGVpZ2h0OworICAgIH0KKyAgICBGWFRfU0laRQlTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIEZYVF9TSVpFIHNpemU7CisgICAgICAgIHNpemUuU2V0KHdpZHRoLCBoZWlnaHQpOworICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9CisgICAgdm9pZAkJU2l6ZShGWFRfU0laRSBzKQorICAgIHsKKyAgICAgICAgd2lkdGggPSBzLngsIGhlaWdodCA9IHMueTsKKyAgICB9CisgICAgRlhUX1BPSU5UCVRvcExlZnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgRlhUX1BPSU5UIHA7CisgICAgICAgIHAueCA9IGxlZnQ7CisgICAgICAgIHAueSA9IHRvcDsKKyAgICAgICAgcmV0dXJuIHA7CisgICAgfQorICAgIEZYVF9QT0lOVAlUb3BSaWdodCgpIGNvbnN0CisgICAgeworICAgICAgICBGWFRfUE9JTlQgcDsKKyAgICAgICAgcC54ID0gbGVmdCArIHdpZHRoOworICAgICAgICBwLnkgPSB0b3A7CisgICAgICAgIHJldHVybiBwOworICAgIH0KKyAgICBGWFRfUE9JTlQJQm90dG9tTGVmdCgpIGNvbnN0CisgICAgeworICAgICAgICBGWFRfUE9JTlQgcDsKKyAgICAgICAgcC54ID0gbGVmdDsKKyAgICAgICAgcC55ID0gdG9wICsgaGVpZ2h0OworICAgICAgICByZXR1cm4gcDsKKyAgICB9CisgICAgRlhUX1BPSU5UCUJvdHRvbVJpZ2h0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEZYVF9QT0lOVCBwOworICAgICAgICBwLnggPSBsZWZ0ICsgd2lkdGg7CisgICAgICAgIHAueSA9IHRvcCArIGhlaWdodDsKKyAgICAgICAgcmV0dXJuIHA7CisgICAgfQorICAgIHZvaWQJCVRvcExlZnQoRlhUX1BPSU5UIHRsKQorICAgIHsKKyAgICAgICAgbGVmdCA9IHRsLng7CisgICAgICAgIHRvcCA9IHRsLnk7CisgICAgfQorICAgIHZvaWQJCVRvcFJpZ2h0KEZYVF9QT0lOVCB0cikKKyAgICB7CisgICAgICAgIHdpZHRoID0gdHIueCAtIGxlZnQ7CisgICAgICAgIHRvcCA9IHRyLnk7CisgICAgfQorICAgIHZvaWQJCUJvdHRvbUxlZnQoRlhUX1BPSU5UIGJsKQorICAgIHsKKyAgICAgICAgbGVmdCA9IGJsLng7CisgICAgICAgIGhlaWdodCA9IGJsLnkgLSB0b3A7CisgICAgfQorICAgIHZvaWQJCUJvdHRvbVJpZ2h0KEZYVF9QT0lOVCBicikKKyAgICB7CisgICAgICAgIHdpZHRoID0gYnIueCAtIGxlZnQ7CisgICAgICAgIGhlaWdodCA9IGJyLnkgLSB0b3A7CisgICAgfQorICAgIEZYVF9QT0lOVAlDZW50ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgRlhUX1BPSU5UIHA7CisgICAgICAgIHAueCA9IGxlZnQgKyB3aWR0aCAvIDI7CisgICAgICAgIHAueSA9IHRvcCArIGhlaWdodCAvIDI7CisgICAgICAgIHJldHVybiBwOworICAgIH0KKyAgICB2b2lkCQlHZXRQYXJhbGxlbG9ncmFtKEZYVF9QQVJBTCAmcGcpIGNvbnN0CisgICAgeworICAgICAgICBwZy54ID0gbGVmdCwgcGcueSA9IHRvcDsKKyAgICAgICAgcGcueDEgPSB3aWR0aCwgcGcueTEgPSAwOworICAgICAgICBwZy54MiA9IDAsIHBnLnkyID0gaGVpZ2h0OworICAgIH0KKyAgICB2b2lkCQlVbmlvbihiYXNlVHlwZSB4LCBiYXNlVHlwZSB5KQorICAgIHsKKyAgICAgICAgYmFzZVR5cGUgciA9IHJpZ2h0KCksIGIgPSBib3R0b20oKTsKKyAgICAgICAgaWYgKGxlZnQgPiB4KSB7CisgICAgICAgICAgICBsZWZ0ID0geDsKKyAgICAgICAgfQorICAgICAgICBpZiAociA8IHgpIHsKKyAgICAgICAgICAgIHIgPSB4OworICAgICAgICB9CisgICAgICAgIGlmICh0b3AgPiB5KSB7CisgICAgICAgICAgICB0b3AgPSB5OworICAgICAgICB9CisgICAgICAgIGlmIChiIDwgeSkgeworICAgICAgICAgICAgYiA9IHk7CisgICAgICAgIH0KKyAgICAgICAgd2lkdGggPSByIC0gbGVmdDsKKyAgICAgICAgaGVpZ2h0ID0gYiAtIHRvcDsKKyAgICB9CisgICAgdm9pZAkJVW5pb24oY29uc3QgRlhUX1BPSU5UICZwKQorICAgIHsKKyAgICAgICAgVW5pb24ocC54LCBwLnkpOworICAgIH0KKyAgICB2b2lkCQlVbmlvbihjb25zdCBGWFRfUkVDVCAmcnQpCisgICAgeworICAgICAgICBiYXNlVHlwZSByID0gcmlnaHQoKSwgYiA9IGJvdHRvbSgpOworICAgICAgICBpZiAobGVmdCA+IHJ0LmxlZnQpIHsKKyAgICAgICAgICAgIGxlZnQgPSBydC5sZWZ0OworICAgICAgICB9CisgICAgICAgIGlmIChyIDwgcnQucmlnaHQoKSkgeworICAgICAgICAgICAgciA9IHJ0LnJpZ2h0KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRvcCA+IHJ0LnRvcCkgeworICAgICAgICAgICAgdG9wID0gcnQudG9wOworICAgICAgICB9CisgICAgICAgIGlmIChiIDwgcnQuYm90dG9tKCkpIHsKKyAgICAgICAgICAgIGIgPSBydC5ib3R0b20oKTsKKyAgICAgICAgfQorICAgICAgICB3aWR0aCA9IHIgLSBsZWZ0OworICAgICAgICBoZWlnaHQgPSBiIC0gdG9wOworICAgIH0KKyAgICB2b2lkCQlJbnRlcnNlY3QoY29uc3QgRlhUX1JFQ1QgJnJ0KQorICAgIHsKKyAgICAgICAgYmFzZVR5cGUgciA9IHJpZ2h0KCksIGIgPSBib3R0b20oKTsKKyAgICAgICAgaWYgKGxlZnQgPCBydC5sZWZ0KSB7CisgICAgICAgICAgICBsZWZ0ID0gcnQubGVmdDsKKyAgICAgICAgfQorICAgICAgICBpZiAociA+IHJ0LnJpZ2h0KCkpIHsKKyAgICAgICAgICAgIHIgPSBydC5yaWdodCgpOworICAgICAgICB9CisgICAgICAgIGlmICh0b3AgPCBydC50b3ApIHsKKyAgICAgICAgICAgIHRvcCA9IHJ0LnRvcDsKKyAgICAgICAgfQorICAgICAgICBpZiAoYiA+IHJ0LmJvdHRvbSgpKSB7CisgICAgICAgICAgICBiID0gcnQuYm90dG9tKCk7CisgICAgICAgIH0KKyAgICAgICAgd2lkdGggPSByIC0gbGVmdDsKKyAgICAgICAgaGVpZ2h0ID0gYiAtIHRvcDsKKyAgICB9CisgICAgRlhfQk9PTAkJSW50ZXJzZWN0V2l0aChjb25zdCBGWFRfUkVDVCAmcnQpIGNvbnN0CisgICAgeworICAgICAgICBGWFRfUkVDVCByZWN0ID0gcnQ7CisgICAgICAgIHJlY3QuSW50ZXJzZWN0KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuICFyZWN0LklzRW1wdHkoKTsKKyAgICB9CisgICAgRlhfQk9PTAkJSW50ZXJzZWN0V2l0aChjb25zdCBGWFRfUkVDVCAmcnQsIEZYX0ZMT0FUIGZFcHNpbG9uKSBjb25zdAorICAgIHsKKyAgICAgICAgRlhUX1JFQ1QgcmVjdCA9IHJ0OworICAgICAgICByZWN0LkludGVyc2VjdCgqdGhpcyk7CisgICAgICAgIHJldHVybiAhcmVjdC5Jc0VtcHR5KGZFcHNpbG9uKTsKKyAgICB9CisgICAgZnJpZW5kCUZYX0JPT0wJb3BlcmF0b3IgPT0gKGNvbnN0IEZYVF9SRUNUICZyYzEsIGNvbnN0IEZYVF9SRUNUICZyYzIpCisgICAgeworICAgICAgICByZXR1cm4gcmMxLmxlZnQgPT0gcmMyLmxlZnQgJiYgcmMxLnRvcCA9PSByYzIudG9wICYmIHJjMS53aWR0aCA9PSByYzIud2lkdGggJiYgcmMxLmhlaWdodCA9PSByYzIuaGVpZ2h0OworICAgIH0KKyAgICBmcmllbmQJRlhfQk9PTAlvcGVyYXRvciAhPSAoY29uc3QgRlhUX1JFQ1QgJnJjMSwgY29uc3QgRlhUX1JFQ1QgJnJjMikKKyAgICB7CisgICAgICAgIHJldHVybiByYzEubGVmdCAhPSByYzIubGVmdCB8fCByYzEudG9wICE9IHJjMi50b3AgfHwgcmMxLndpZHRoICE9IHJjMi53aWR0aCB8fCByYzEuaGVpZ2h0ICE9IHJjMi5oZWlnaHQ7CisgICAgfQorICAgIGJhc2VUeXBlIGxlZnQsIHRvcDsKKyAgICBiYXNlVHlwZSB3aWR0aCwgaGVpZ2h0OworfTsKK3R5cGVkZWYgQ0ZYX1JUZW1wbGF0ZTxGWF9JTlQzMj4JCQlDRlhfUmVjdDsKK3R5cGVkZWYgQ0ZYX1JUZW1wbGF0ZTxGWF9GTE9BVD4JCQlDRlhfUmVjdEY7Cit0eXBlZGVmIENGWF9SVGVtcGxhdGU8RlhfSU5UMzI+ICoJCUZYX0xQUkVDVDsKK3R5cGVkZWYgQ0ZYX1JUZW1wbGF0ZTxGWF9GTE9BVD4gKgkJRlhfTFBSRUNURjsKK3R5cGVkZWYgQ0ZYX1JUZW1wbGF0ZTxGWF9JTlQzMj4gY29uc3QgKglGWF9MUENSRUNUOwordHlwZWRlZiBDRlhfUlRlbXBsYXRlPEZYX0ZMT0FUPiBjb25zdCAqCUZYX0xQQ1JFQ1RGOwordHlwZWRlZiBDRlhfQXJyYXlUZW1wbGF0ZTxDRlhfUmVjdEY+CUNGWF9SZWN0RkFycmF5Oworc3RydWN0IEZYX1JFQ1QgeworCisgICAgaW50CQkJbGVmdDsKKworICAgIGludAkJCXRvcDsKKworICAgIGludAkJCXJpZ2h0OworCisgICAgaW50CQkJYm90dG9tOworCisgICAgRlhfUkVDVCgpIHt9CisKKyAgICBGWF9SRUNUKGludCBsZWZ0MSwgaW50IHRvcDEsIGludCByaWdodDEsIGludCBib3R0b20xKQorICAgIHsKKyAgICAgICAgbGVmdCA9IGxlZnQxOworICAgICAgICB0b3AgPSB0b3AxOworICAgICAgICByaWdodCA9IHJpZ2h0MTsKKyAgICAgICAgYm90dG9tID0gYm90dG9tMTsKKyAgICB9CisKKyAgICBpbnQJCQlXaWR0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gcmlnaHQgLSBsZWZ0OworICAgIH0KKworICAgIGludAkJCUhlaWdodCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYm90dG9tIC0gdG9wOworICAgIH0KKworICAgIEZYX0JPT0wJCUlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJpZ2h0IDw9IGxlZnQgfHwgYm90dG9tIDw9IHRvcDsKKyAgICB9CisKKyAgICB2b2lkCQlOb3JtYWxpemUoKTsKKworICAgIHZvaWQJCUludGVyc2VjdChjb25zdCBGWF9SRUNUJiBzcmMpOworCisgICAgdm9pZAkJSW50ZXJzZWN0KGludCBsZWZ0MSwgaW50IHRvcDEsIGludCByaWdodDEsIGludCBib3R0b20xKQorICAgIHsKKyAgICAgICAgSW50ZXJzZWN0KEZYX1JFQ1QobGVmdDEsIHRvcDEsIHJpZ2h0MSwgYm90dG9tMSkpOworICAgIH0KKworICAgIHZvaWQJCVVuaW9uKGNvbnN0IEZYX1JFQ1QmIG90aGVyX3JlY3QpOworCisgICAgRlhfQk9PTAkJb3BlcmF0b3IgPT0gKGNvbnN0IEZYX1JFQ1QmIHNyYykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsZWZ0ID09IHNyYy5sZWZ0ICYmIHJpZ2h0ID09IHNyYy5yaWdodCAmJiB0b3AgPT0gc3JjLnRvcCAmJiBib3R0b20gPT0gc3JjLmJvdHRvbTsKKyAgICB9CisKKyAgICB2b2lkCQlPZmZzZXQoaW50IGR4LCBpbnQgZHkpCisgICAgeworICAgICAgICBsZWZ0ICs9IGR4OworICAgICAgICByaWdodCArPSBkeDsKKyAgICAgICAgdG9wICs9IGR5OworICAgICAgICBib3R0b20gKz0gZHk7CisgICAgfQorCisgICAgRlhfQk9PTAkJQ29udGFpbnMoY29uc3QgRlhfUkVDVCYgb3RoZXJfcmVjdCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBvdGhlcl9yZWN0LmxlZnQgPj0gbGVmdCAmJiBvdGhlcl9yZWN0LnJpZ2h0IDw9IHJpZ2h0ICYmIG90aGVyX3JlY3QudG9wID49IHRvcCAmJiBvdGhlcl9yZWN0LmJvdHRvbSA8PSBib3R0b207CisgICAgfQorCisgICAgRlhfQk9PTAkJQ29udGFpbnMoaW50IHgsIGludCB5KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHggPj0gbGVmdCAmJiB4IDwgcmlnaHQgJiYgeSA+PSB0b3AgJiYgeSA8IGJvdHRvbTsKKyAgICB9Cit9Oworc3RydWN0IEZYX1NNQUxMX1JFQ1QgeworCisgICAgRlhfU0hPUlQJTGVmdDsKKworICAgIEZYX1NIT1JUCVRvcDsKKworICAgIEZYX1NIT1JUCVJpZ2h0OworCisgICAgRlhfU0hPUlQJQm90dG9tOworfTsKK2NsYXNzIENGWF9GbG9hdFJlY3QgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ0ZYX0Zsb2F0UmVjdCgpCisgICAgeworICAgICAgICBsZWZ0ID0gcmlnaHQgPSBib3R0b20gPSB0b3AgPSAwOworICAgIH0KKworICAgIENGWF9GbG9hdFJlY3QoRlhfRkxPQVQgbGVmdDEsIEZYX0ZMT0FUIGJvdHRvbTEsIEZYX0ZMT0FUIHJpZ2h0MSwgRlhfRkxPQVQgdG9wMSkKKyAgICB7CisgICAgICAgIGxlZnQgPSBsZWZ0MTsKKyAgICAgICAgYm90dG9tID0gYm90dG9tMTsKKyAgICAgICAgcmlnaHQgPSByaWdodDE7CisgICAgICAgIHRvcCA9IHRvcDE7CisgICAgfQorCisgICAgQ0ZYX0Zsb2F0UmVjdChjb25zdCBGWF9GTE9BVCogcEFycmF5KQorICAgIHsKKyAgICAgICAgbGVmdCA9IHBBcnJheVswXTsKKyAgICAgICAgYm90dG9tID0gcEFycmF5WzFdOworICAgICAgICByaWdodCA9IHBBcnJheVsyXTsKKyAgICAgICAgdG9wID0gcEFycmF5WzNdOworICAgIH0KKworICAgIENGWF9GbG9hdFJlY3QoY29uc3QgRlhfUkVDVCYgcmVjdCk7CisKKyAgICBGWF9CT09MCQkJCUlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxlZnQgPj0gcmlnaHQgfHwgYm90dG9tID49IHRvcDsKKyAgICB9CisKKyAgICB2b2lkCQkJCU5vcm1hbGl6ZSgpOworCisgICAgdm9pZAkJCQlSZXNldCgpCisgICAgeworICAgICAgICBsZWZ0ID0gcmlnaHQgPSBib3R0b20gPSB0b3AgPSAwOworICAgIH0KKworICAgIEZYX0JPT0wJCQkJQ29udGFpbnMoY29uc3QgQ0ZYX0Zsb2F0UmVjdCYgb3RoZXJfcmVjdCkgY29uc3Q7CisKKyAgICBGWF9CT09MCQkJCUNvbnRhaW5zKEZYX0ZMT0FUIHgsIEZYX0ZMT0FUIHkpIGNvbnN0OworCisgICAgdm9pZAkJCQlUcmFuc2Zvcm0oY29uc3QgQ0ZYX01hdHJpeCogcE1hdHJpeCk7CisKKyAgICB2b2lkCQkJCUludGVyc2VjdChjb25zdCBDRlhfRmxvYXRSZWN0JiBvdGhlcl9yZWN0KTsKKworICAgIHZvaWQJCQkJVW5pb24oY29uc3QgQ0ZYX0Zsb2F0UmVjdCYgb3RoZXJfcmVjdCk7CisKKyAgICBGWF9SRUNUCQkJCUdldElubmVyUmVjdCgpIGNvbnN0OworCisgICAgRlhfUkVDVAkJCQlHZXRPdXR0ZXJSZWN0KCkgY29uc3Q7CisKKyAgICBGWF9SRUNUCQkJCUdldENsb3Nlc3RSZWN0KCkgY29uc3Q7CisKKyAgICBpbnQJCQkJCVN1YnN0cmFjdDQoQ0ZYX0Zsb2F0UmVjdCYgc3Vic3RyYWN0X3JlY3QsIENGWF9GbG9hdFJlY3QqIHBSZWN0cyk7CisKKyAgICB2b2lkCQkJCUluaXRSZWN0KEZYX0ZMT0FUIHgsIEZYX0ZMT0FUIHkpCisgICAgeworICAgICAgICBsZWZ0ID0gcmlnaHQgPSB4OworICAgICAgICBib3R0b20gPSB0b3AgPSB5OworICAgIH0KKworICAgIHZvaWQJCQkJVXBkYXRlUmVjdChGWF9GTE9BVCB4LCBGWF9GTE9BVCB5KTsKKworICAgIEZYX0ZMT0FUCQkJV2lkdGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJpZ2h0IC0gbGVmdDsKKyAgICB9CisKKyAgICBGWF9GTE9BVAkJCUhlaWdodCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG9wIC0gYm90dG9tOworICAgIH0KKworICAgIHZvaWQJCQkJSW5mbGF0ZShGWF9GTE9BVCB4LCBGWF9GTE9BVCB5KQorICAgIHsKKyAgICAgICAgTm9ybWFsaXplKCk7CisgICAgICAgIGxlZnQgLT0geDsKKyAgICAgICAgcmlnaHQgKz0geDsKKyAgICAgICAgYm90dG9tIC09IHk7CisgICAgICAgIHRvcCArPSB5OworICAgIH0KKworICAgIHZvaWQJCQkJSW5mbGF0ZShGWF9GTE9BVCBsZWZ0LCBGWF9GTE9BVCBib3R0b20sIEZYX0ZMT0FUIHJpZ2h0LCBGWF9GTE9BVCB0b3ApCisgICAgeworICAgICAgICBOb3JtYWxpemUoKTsKKyAgICAgICAgdGhpcy0+bGVmdCAtPSBsZWZ0OworICAgICAgICB0aGlzLT5ib3R0b20gLT0gYm90dG9tOworICAgICAgICB0aGlzLT5yaWdodCArPSByaWdodDsKKyAgICAgICAgdGhpcy0+dG9wICs9IHRvcDsKKyAgICB9CisKKyAgICB2b2lkCQkJCUluZmxhdGUoY29uc3QgQ0ZYX0Zsb2F0UmVjdCAmcnQpCisgICAgeworICAgICAgICBJbmZsYXRlKHJ0LmxlZnQsIHJ0LmJvdHRvbSwgcnQucmlnaHQsIHJ0LnRvcCk7CisgICAgfQorCisgICAgdm9pZAkJCQlEZWZsYXRlKEZYX0ZMT0FUIHgsIEZYX0ZMT0FUIHkpCisgICAgeworICAgICAgICBOb3JtYWxpemUoKTsKKyAgICAgICAgbGVmdCArPSB4OworICAgICAgICByaWdodCAtPSB4OworICAgICAgICBib3R0b20gKz0geTsKKyAgICAgICAgdG9wIC09IHk7CisgICAgfQorCisgICAgdm9pZAkJCQlEZWZsYXRlKEZYX0ZMT0FUIGxlZnQsIEZYX0ZMT0FUIGJvdHRvbSwgRlhfRkxPQVQgcmlnaHQsIEZYX0ZMT0FUIHRvcCkKKyAgICB7CisgICAgICAgIE5vcm1hbGl6ZSgpOworICAgICAgICB0aGlzLT5sZWZ0ICs9IGxlZnQ7CisgICAgICAgIHRoaXMtPmJvdHRvbSArPSBib3R0b207CisgICAgICAgIHRoaXMtPnJpZ2h0IC09IHJpZ2h0OworICAgICAgICB0aGlzLT50b3AgLT0gdG9wOworICAgIH0KKworICAgIHZvaWQJCQkJRGVmbGF0ZShjb25zdCBDRlhfRmxvYXRSZWN0ICZydCkKKyAgICB7CisgICAgICAgIERlZmxhdGUocnQubGVmdCwgcnQuYm90dG9tLCBydC5yaWdodCwgcnQudG9wKTsKKyAgICB9CisKKyAgICB2b2lkCQkJCVRyYW5zbGF0ZShGWF9GTE9BVCBlLCBGWF9GTE9BVCBmKQorICAgIHsKKyAgICAgICAgbGVmdCArPSBlOworICAgICAgICByaWdodCArPSBlOworICAgICAgICB0b3AgKz0gZjsKKyAgICAgICAgYm90dG9tICs9IGY7CisgICAgfQorCisgICAgc3RhdGljIENGWF9GbG9hdFJlY3QJR2V0QkJveChjb25zdCBDRlhfRmxvYXRQb2ludCogcFBvaW50cywgaW50IG5Qb2ludHMpOworCisgICAgRlhfRkxPQVQJCQlsZWZ0OworCisgICAgRlhfRkxPQVQJCQlyaWdodDsKKworICAgIEZYX0ZMT0FUCQkJYm90dG9tOworCisgICAgRlhfRkxPQVQJCQl0b3A7Cit9OworY2xhc3MgQ0ZYX01hdHJpeCA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDRlhfTWF0cml4KCkKKyAgICB7CisgICAgICAgIGEgPSBkID0gMTsKKyAgICAgICAgYiA9IGMgPSBlID0gZiA9IDA7CisgICAgfQorCisgICAgQ0ZYX01hdHJpeChGWF9GTE9BVCBhMSwgRlhfRkxPQVQgYjEsIEZYX0ZMT0FUIGMxLCBGWF9GTE9BVCBkMSwgRlhfRkxPQVQgZTEsIEZYX0ZMT0FUIGYxKQorICAgIHsKKyAgICAgICAgYSA9IGExOworICAgICAgICBiID0gYjE7CisgICAgICAgIGMgPSBjMTsKKyAgICAgICAgZCA9IGQxOworICAgICAgICBlID0gZTE7CisgICAgICAgIGYgPSBmMTsKKyAgICB9CisKKyAgICB2b2lkCQkJU2V0KEZYX0ZMT0FUIGEsIEZYX0ZMT0FUIGIsIEZYX0ZMT0FUIGMsIEZYX0ZMT0FUIGQsIEZYX0ZMT0FUIGUsIEZYX0ZMT0FUIGYpOworICAgIHZvaWQJCQlTZXQoY29uc3QgRlhfRkxPQVQgbls2XSk7CisKKyAgICB2b2lkCQkJU2V0SWRlbnRpdHkoKQorICAgIHsKKyAgICAgICAgYSA9IGQgPSAxOworICAgICAgICBiID0gYyA9IGUgPSBmID0gMDsKKyAgICB9CisKKyAgICB2b2lkCQkJU2V0UmV2ZXJzZShjb25zdCBDRlhfTWF0cml4ICZtKTsKKworICAgIHZvaWQJCQlDb25jYXQoRlhfRkxPQVQgYSwgRlhfRkxPQVQgYiwgRlhfRkxPQVQgYywgRlhfRkxPQVQgZCwgRlhfRkxPQVQgZSwgRlhfRkxPQVQgZiwgRlhfQk9PTCBiUHJlcGVuZGVkID0gRkFMU0UpOworCisgICAgdm9pZAkJCUNvbmNhdChjb25zdCBDRlhfTWF0cml4ICZtLCBGWF9CT09MIGJQcmVwZW5kZWQgPSBGQUxTRSk7CisKKyAgICB2b2lkCQkJQ29uY2F0SW52ZXJzZShjb25zdCBDRlhfTWF0cml4JiBtLCBGWF9CT09MIGJQcmVwZW5kZWQgPSBGQUxTRSk7CisgICAgdm9pZAkJCVJlc2V0KCkKKyAgICB7CisgICAgICAgIFNldElkZW50aXR5KCk7CisgICAgfQorCisgICAgdm9pZAkJCUNvcHkoY29uc3QgQ0ZYX01hdHJpeCYgbSkKKyAgICB7CisgICAgICAgICp0aGlzID0gbTsKKyAgICB9CisKKyAgICBGWF9CT09MCQkJSXNJZGVudGl0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYSA9PSAxICYmIGIgPT0gMCAmJiBjID09IDAgJiYgZCA9PSAxICYmIGUgPT0gMCAmJiBmID09IDA7CisgICAgfQorICAgIEZYX0JPT0wJCQlJc0ludmVydGlibGUoKSBjb25zdDsKKworICAgIEZYX0JPT0wJCQlJczkwUm90YXRlZCgpIGNvbnN0OworCisgICAgRlhfQk9PTAkJCUlzU2NhbGVkKCkgY29uc3Q7CisKKyAgICB2b2lkCQkJVHJhbnNsYXRlKEZYX0ZMT0FUIHgsIEZYX0ZMT0FUIHksIEZYX0JPT0wgYlByZXBlbmRlZCA9IEZBTFNFKTsKKworICAgIHZvaWQJCQlUcmFuc2xhdGVJKEZYX0lOVDMyIHgsIEZYX0lOVDMyIHksIEZYX0JPT0wgYlByZXBlbmRlZCA9IEZBTFNFKQorICAgIHsKKyAgICAgICAgVHJhbnNsYXRlKChGWF9GTE9BVCl4LCAoRlhfRkxPQVQpeSwgYlByZXBlbmRlZCk7CisgICAgfQorCisgICAgdm9pZAkJCVNjYWxlKEZYX0ZMT0FUIHN4LCBGWF9GTE9BVCBzeSwgRlhfQk9PTCBiUHJlcGVuZGVkID0gRkFMU0UpOworCisgICAgdm9pZAkJCVJvdGF0ZShGWF9GTE9BVCBmUmFkaWFuLCBGWF9CT09MIGJQcmVwZW5kZWQgPSBGQUxTRSk7CisKKyAgICB2b2lkCQkJUm90YXRlQXQoRlhfRkxPQVQgZlJhZGlhbiwgRlhfRkxPQVQgeCwgRlhfRkxPQVQgeSwgRlhfQk9PTCBiUHJlcGVuZGVkID0gRkFMU0UpOworCisgICAgdm9pZAkJCVNoZWFyKEZYX0ZMT0FUIGZBbHBoYVJhZGlhbiwgRlhfRkxPQVQgZkJldGFSYWRpYW4sIEZYX0JPT0wgYlByZXBlbmRlZCA9IEZBTFNFKTsKKworICAgIHZvaWQJCQlNYXRjaFJlY3QoY29uc3QgQ0ZYX0Zsb2F0UmVjdCAmZGVzdCwgY29uc3QgQ0ZYX0Zsb2F0UmVjdCAmc3JjKTsKKworICAgIEZYX0ZMT0FUCQlHZXRYVW5pdCgpIGNvbnN0OworCisgICAgRlhfRkxPQVQJCUdldFlVbml0KCkgY29uc3Q7CisgICAgdm9pZAkJCUdldFVuaXRSZWN0KENGWF9SZWN0RiAmcmVjdCkgY29uc3Q7CisKKyAgICBDRlhfRmxvYXRSZWN0CUdldFVuaXRSZWN0KCkgY29uc3Q7CisKKyAgICBGWF9GTE9BVAkJR2V0VW5pdEFyZWEoKSBjb25zdDsKKyAgICBGWF9GTE9BVAkJVHJhbnNmb3JtWERpc3RhbmNlKEZYX0ZMT0FUIGR4KSBjb25zdDsKKyAgICBGWF9JTlQzMgkJVHJhbnNmb3JtWERpc3RhbmNlKEZYX0lOVDMyIGR4KSBjb25zdDsKKyAgICBGWF9GTE9BVAkJVHJhbnNmb3JtWURpc3RhbmNlKEZYX0ZMT0FUIGR5KSBjb25zdDsKKyAgICBGWF9JTlQzMgkJVHJhbnNmb3JtWURpc3RhbmNlKEZYX0lOVDMyIGR5KSBjb25zdDsKKyAgICBGWF9GTE9BVAkJVHJhbnNmb3JtRGlzdGFuY2UoRlhfRkxPQVQgZHgsIEZYX0ZMT0FUIGR5KSBjb25zdDsKKyAgICBGWF9JTlQzMgkJVHJhbnNmb3JtRGlzdGFuY2UoRlhfSU5UMzIgZHgsIEZYX0lOVDMyIGR5KSBjb25zdDsKKworICAgIEZYX0ZMT0FUCQlUcmFuc2Zvcm1EaXN0YW5jZShGWF9GTE9BVCBkaXN0YW5jZSkgY29uc3Q7CisgICAgdm9pZAkJCVRyYW5zZm9ybVBvaW50KEZYX0ZMT0FUICZ4LCBGWF9GTE9BVCAmeSkgY29uc3Q7CisgICAgdm9pZAkJCVRyYW5zZm9ybVBvaW50KEZYX0lOVDMyICZ4LCBGWF9JTlQzMiAmeSkgY29uc3Q7CisgICAgdm9pZAkJCVRyYW5zZm9ybVBvaW50cyhDRlhfUG9pbnRGICpwb2ludHMsIEZYX0lOVDMyIGlDb3VudCkgY29uc3Q7CisgICAgdm9pZAkJCVRyYW5zZm9ybVBvaW50cyhDRlhfUG9pbnQgKnBvaW50cywgRlhfSU5UMzIgaUNvdW50KSBjb25zdDsKKworICAgIHZvaWQJCQlUcmFuc2Zvcm0oRlhfRkxPQVQmIHgsIEZYX0ZMT0FUJiB5KSBjb25zdAorICAgIHsKKyAgICAgICAgVHJhbnNmb3JtUG9pbnQoeCwgeSk7CisgICAgfQorCisgICAgdm9pZAkJCVRyYW5zZm9ybShGWF9GTE9BVCB4LCBGWF9GTE9BVCB5LCBGWF9GTE9BVCYgeDEsIEZYX0ZMT0FUJiB5MSkgY29uc3QKKyAgICB7CisgICAgICAgIHgxID0geCwgeTEgPSB5OworICAgICAgICBUcmFuc2Zvcm1Qb2ludCh4MSwgeTEpOworICAgIH0KKyAgICB2b2lkCQkJVHJhbnNmb3JtVmVjdG9yKENGWF9WZWN0b3JGICZ2KSBjb25zdDsKKyAgICB2b2lkCQkJVHJhbnNmb3JtVmVjdG9yKENGWF9WZWN0b3IgJnYpIGNvbnN0OworICAgIHZvaWQJCQlUcmFuc2Zvcm1SZWN0KENGWF9SZWN0RiAmcmVjdCkgY29uc3Q7CisgICAgdm9pZAkJCVRyYW5zZm9ybVJlY3QoQ0ZYX1JlY3QgJnJlY3QpIGNvbnN0OworCisgICAgdm9pZAkJCVRyYW5zZm9ybVJlY3QoRlhfRkxPQVQmIGxlZnQsIEZYX0ZMT0FUJiByaWdodCwgRlhfRkxPQVQmIHRvcCwgRlhfRkxPQVQmIGJvdHRvbSkgY29uc3Q7CisKKyAgICB2b2lkCQkJVHJhbnNmb3JtUmVjdChDRlhfRmxvYXRSZWN0JiByZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAgVHJhbnNmb3JtUmVjdChyZWN0LmxlZnQsIHJlY3QucmlnaHQsIHJlY3QudG9wLCByZWN0LmJvdHRvbSk7CisgICAgfQorCisgICAgRlhfRkxPQVQJCUdldEEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGE7CisgICAgfQorCisgICAgRlhfRkxPQVQJCUdldEIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGI7CisgICAgfQorCisgICAgRlhfRkxPQVQJCUdldEMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGM7CisgICAgfQorCisgICAgRlhfRkxPQVQJCUdldEQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGQ7CisgICAgfQorCisgICAgRlhfRkxPQVQJCUdldEUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGU7CisgICAgfQorCisgICAgRlhfRkxPQVQJCUdldEYoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGY7CisgICAgfQorcHVibGljOgorICAgIEZYX0ZMT0FUIGE7CisgICAgRlhfRkxPQVQgYjsKKyAgICBGWF9GTE9BVCBjOworICAgIEZYX0ZMT0FUIGQ7CisgICAgRlhfRkxPQVQgZTsKKyAgICBGWF9GTE9BVCBmOworfTsKKyNkZWZpbmUgQ0ZYX0FmZmluZU1hdHJpeAlDRlhfTWF0cml4CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvaW5jbHVkZS9meGNydC9meF9leHQuaCBiL2NvcmUvaW5jbHVkZS9meGNydC9meF9leHQuaAppbmRleCA3ZmRiZmNkLi4wM2VjNDg4IDEwMDY0NAotLS0gYS9jb3JlL2luY2x1ZGUvZnhjcnQvZnhfZXh0LmgKKysrIGIvY29yZS9pbmNsdWRlL2Z4Y3J0L2Z4X2V4dC5oCkBAIC0xLDEwMyArMSwxMDMgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0ZYQ1JUX0VYVEVOU0lPTl8NCi0jZGVmaW5lIF9GWENSVF9FWFRFTlNJT05fDQotI2lmbmRlZiBfRlhfQkFTSUNfSF8NCi0jaW5jbHVkZSAiZnhfYmFzaWMuaCINCi0jZW5kaWYNCi0jaWZuZGVmIF9GWENSVF9DT09SRElOQVRFU18NCi0jaW5jbHVkZSAiZnhfY29vcmRpbmF0ZXMuaCINCi0jZW5kaWYNCi0jaWZuZGVmIF9GWF9YTUxfSF8NCi0jaW5jbHVkZSAiZnhfeG1sLmgiDQotI2VuZGlmDQotI2lmbmRlZiBfRlhfVU5JQ09ERV8NCi0jaW5jbHVkZSAiZnhfdWNkLmgiDQotI2VuZGlmDQotI2lmbmRlZiBfRlhfQVJBQklDXw0KLSNpbmNsdWRlICJmeF9hcmIuaCINCi0jZW5kaWYNCi0jaWZkZWYgX19jcGx1c3BsdXMNCi1leHRlcm4gIkMiIHsNCi0jZW5kaWYNCi0NCi0NCi1GWF9GTE9BVAkJRlhTWVNfdGFuKEZYX0ZMT0FUIGEpOw0KLUZYX0ZMT0FUCQlGWFNZU19sb2diKEZYX0ZMT0FUIGIsIEZYX0ZMT0FUIHgpOw0KLUZYX0ZMT0FUCQlGWFNZU19zdHJ0b2YoRlhfTFBDU1RSIHBjc1N0ciwgRlhfSU5UMzIgaUxlbmd0aCA9IC0xLCBGWF9JTlQzMiAqcFVzZWRMZW4gPSBOVUxMKTsNCi1GWF9GTE9BVAkJRlhTWVNfd2NzdG9mKEZYX0xQQ1dTVFIgcHdzU3RyLCBGWF9JTlQzMiBpTGVuZ3RoID0gLTEsIEZYX0lOVDMyICpwVXNlZExlbiA9IE5VTEwpOw0KLUZYX0xQV1NUUgkJRlhTWVNfd2NzbmNweShGWF9MUFdTVFIgZHN0U3RyLCBGWF9MUENXU1RSIHNyY1N0ciwgc2l6ZV90IGNvdW50KTsNCi1GWF9JTlQzMgkJRlhTWVNfd2NzbmljbXAoRlhfTFBDV1NUUiBzMSwgRlhfTFBDV1NUUiBzMiwgc2l6ZV90IGNvdW50KTsNCi1GWF9JTlQzMgkJRlhTWVNfc3RybmljbXAoRlhfTFBDU1RSIHMxLCBGWF9MUENTVFIgczIsIHNpemVfdCBjb3VudCk7DQotaW5saW5lIEZYX0JPT0wJRlhTWVNfaXNsb3dlcihGWF9JTlQzMiBjaCkNCi17DQotICAgIHJldHVybiBjaCA+PSAnYScgJiYgY2ggPD0gJ3onOw0KLX0NCi1pbmxpbmUgRlhfQk9PTAlGWFNZU19pc3VwcGVyKEZYX0lOVDMyIGNoKQ0KLXsNCi0gICAgcmV0dXJuIGNoID49ICdBJyAmJiBjaCA8PSAnWic7DQotfQ0KLWlubGluZSBGWF9JTlQzMglGWFNZU190b2xvd2VyKEZYX0lOVDMyIGNoKQ0KLXsNCi0gICAgcmV0dXJuIGNoIDwgJ0EnIHx8IGNoID4gJ1onID8gY2ggOiAoY2ggKyAweDIwKTsNCi19DQotaW5saW5lIEZYX0lOVDMyIEZYU1lTX3RvdXBwZXIoRlhfSU5UMzIgY2gpDQotew0KLSAgICByZXR1cm4gY2ggPCAnYScgfHwgY2ggPiAneicgPyBjaCA6IChjaCAtIDB4MjApOw0KLX0NCi0NCi0NCi0NCi1GWF9EV09SRAlGWF9IYXNoQ29kZV9TdHJpbmdfR2V0QShGWF9MUENTVFIgcFN0ciwgRlhfSU5UMzIgaUxlbmd0aCwgRlhfQk9PTCBiSWdub3JlQ2FzZSA9IEZBTFNFKTsNCi1GWF9EV09SRAlGWF9IYXNoQ29kZV9TdHJpbmdfR2V0VyhGWF9MUENXU1RSIHBTdHIsIEZYX0lOVDMyIGlMZW5ndGgsIEZYX0JPT0wgYklnbm9yZUNhc2UgPSBGQUxTRSk7DQotDQotI2lmZGVmIF9fY3BsdXNwbHVzDQotfQ0KLSNlbmRpZg0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLWV4dGVybiAiQyIgew0KLSNlbmRpZg0KLQ0KLUZYX0xQVk9JRAlGWF9SYW5kb21fTVRfU3RhcnQoRlhfRFdPUkQgZHdTZWVkKTsNCi0NCi1GWF9EV09SRAlGWF9SYW5kb21fTVRfR2VuZXJhdGUoRlhfTFBWT0lEIHBDb250ZXh0KTsNCi0NCi12b2lkCQlGWF9SYW5kb21fTVRfQ2xvc2UoRlhfTFBWT0lEIHBDb250ZXh0KTsNCi0NCi12b2lkCQlGWF9SYW5kb21fR2VuZXJhdGVCYXNlKEZYX0xQRFdPUkQgcEJ1ZmZlciwgRlhfSU5UMzIgaUNvdW50KTsNCi0NCi12b2lkCQlGWF9SYW5kb21fR2VuZXJhdGVNVChGWF9MUERXT1JEIHBCdWZmZXIsIEZYX0lOVDMyIGlDb3VudCk7DQotDQotdm9pZAkJRlhfUmFuZG9tX0dlbmVyYXRlQ3J5cHRvKEZYX0xQRFdPUkQgcEJ1ZmZlciwgRlhfSU5UMzIgaUNvdW50KTsNCi0jaWZkZWYgX19jcGx1c3BsdXMNCi19DQotI2VuZGlmDQotdGVtcGxhdGU8Y2xhc3MgYmFzZVR5cGU+DQotY2xhc3MgQ0ZYX1NTb3J0VGVtcGxhdGUNCi17DQotcHVibGljOg0KLSAgICB2b2lkIFNoZWxsU29ydChiYXNlVHlwZSAqcEFycmF5LCBGWF9JTlQzMiBpQ291bnQpDQotICAgIHsNCi0gICAgICAgIEZYU1lTX2Fzc2VydChwQXJyYXkgIT0gTlVMTCAmJiBpQ291bnQgPiAwKTsNCi0gICAgICAgIEZYX0lOVDMyIGksIGosIGdhcDsNCi0gICAgICAgIGJhc2VUeXBlIHYxLCB2MjsNCi0gICAgICAgIGdhcCA9IGlDb3VudCA+PiAxOw0KLSAgICAgICAgd2hpbGUgKGdhcCA+IDApIHsNCi0gICAgICAgICAgICBmb3IgKGkgPSBnYXA7IGkgPCBpQ291bnQ7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgaiA9IGkgLSBnYXA7DQotICAgICAgICAgICAgICAgIHYxID0gcEFycmF5W2ldOw0KLSAgICAgICAgICAgICAgICB3aGlsZSAoaiA+IC0xICYmICh2MiA9IHBBcnJheVtqXSkgPiB2MSkgew0KLSAgICAgICAgICAgICAgICAgICAgcEFycmF5W2ogKyBnYXBdID0gdjI7DQotICAgICAgICAgICAgICAgICAgICBqIC09IGdhcDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBwQXJyYXlbaiArIGdhcF0gPSB2MTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZ2FwID4+PSAxOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9GWENSVF9FWFRFTlNJT05fCisjZGVmaW5lIF9GWENSVF9FWFRFTlNJT05fCisjaWZuZGVmIF9GWF9CQVNJQ19IXworI2luY2x1ZGUgImZ4X2Jhc2ljLmgiCisjZW5kaWYKKyNpZm5kZWYgX0ZYQ1JUX0NPT1JESU5BVEVTXworI2luY2x1ZGUgImZ4X2Nvb3JkaW5hdGVzLmgiCisjZW5kaWYKKyNpZm5kZWYgX0ZYX1hNTF9IXworI2luY2x1ZGUgImZ4X3htbC5oIgorI2VuZGlmCisjaWZuZGVmIF9GWF9VTklDT0RFXworI2luY2x1ZGUgImZ4X3VjZC5oIgorI2VuZGlmCisjaWZuZGVmIF9GWF9BUkFCSUNfCisjaW5jbHVkZSAiZnhfYXJiLmgiCisjZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCitGWF9GTE9BVAkJRlhTWVNfdGFuKEZYX0ZMT0FUIGEpOworRlhfRkxPQVQJCUZYU1lTX2xvZ2IoRlhfRkxPQVQgYiwgRlhfRkxPQVQgeCk7CitGWF9GTE9BVAkJRlhTWVNfc3RydG9mKEZYX0xQQ1NUUiBwY3NTdHIsIEZYX0lOVDMyIGlMZW5ndGggPSAtMSwgRlhfSU5UMzIgKnBVc2VkTGVuID0gTlVMTCk7CitGWF9GTE9BVAkJRlhTWVNfd2NzdG9mKEZYX0xQQ1dTVFIgcHdzU3RyLCBGWF9JTlQzMiBpTGVuZ3RoID0gLTEsIEZYX0lOVDMyICpwVXNlZExlbiA9IE5VTEwpOworRlhfTFBXU1RSCQlGWFNZU193Y3NuY3B5KEZYX0xQV1NUUiBkc3RTdHIsIEZYX0xQQ1dTVFIgc3JjU3RyLCBzaXplX3QgY291bnQpOworRlhfSU5UMzIJCUZYU1lTX3djc25pY21wKEZYX0xQQ1dTVFIgczEsIEZYX0xQQ1dTVFIgczIsIHNpemVfdCBjb3VudCk7CitGWF9JTlQzMgkJRlhTWVNfc3RybmljbXAoRlhfTFBDU1RSIHMxLCBGWF9MUENTVFIgczIsIHNpemVfdCBjb3VudCk7CitpbmxpbmUgRlhfQk9PTAlGWFNZU19pc2xvd2VyKEZYX0lOVDMyIGNoKQoreworICAgIHJldHVybiBjaCA+PSAnYScgJiYgY2ggPD0gJ3onOworfQoraW5saW5lIEZYX0JPT0wJRlhTWVNfaXN1cHBlcihGWF9JTlQzMiBjaCkKK3sKKyAgICByZXR1cm4gY2ggPj0gJ0EnICYmIGNoIDw9ICdaJzsKK30KK2lubGluZSBGWF9JTlQzMglGWFNZU190b2xvd2VyKEZYX0lOVDMyIGNoKQoreworICAgIHJldHVybiBjaCA8ICdBJyB8fCBjaCA+ICdaJyA/IGNoIDogKGNoICsgMHgyMCk7Cit9CitpbmxpbmUgRlhfSU5UMzIgRlhTWVNfdG91cHBlcihGWF9JTlQzMiBjaCkKK3sKKyAgICByZXR1cm4gY2ggPCAnYScgfHwgY2ggPiAneicgPyBjaCA6IChjaCAtIDB4MjApOworfQorCisKKworRlhfRFdPUkQJRlhfSGFzaENvZGVfU3RyaW5nX0dldEEoRlhfTFBDU1RSIHBTdHIsIEZYX0lOVDMyIGlMZW5ndGgsIEZYX0JPT0wgYklnbm9yZUNhc2UgPSBGQUxTRSk7CitGWF9EV09SRAlGWF9IYXNoQ29kZV9TdHJpbmdfR2V0VyhGWF9MUENXU1RSIHBTdHIsIEZYX0lOVDMyIGlMZW5ndGgsIEZYX0JPT0wgYklnbm9yZUNhc2UgPSBGQUxTRSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK0ZYX0xQVk9JRAlGWF9SYW5kb21fTVRfU3RhcnQoRlhfRFdPUkQgZHdTZWVkKTsKKworRlhfRFdPUkQJRlhfUmFuZG9tX01UX0dlbmVyYXRlKEZYX0xQVk9JRCBwQ29udGV4dCk7CisKK3ZvaWQJCUZYX1JhbmRvbV9NVF9DbG9zZShGWF9MUFZPSUQgcENvbnRleHQpOworCit2b2lkCQlGWF9SYW5kb21fR2VuZXJhdGVCYXNlKEZYX0xQRFdPUkQgcEJ1ZmZlciwgRlhfSU5UMzIgaUNvdW50KTsKKwordm9pZAkJRlhfUmFuZG9tX0dlbmVyYXRlTVQoRlhfTFBEV09SRCBwQnVmZmVyLCBGWF9JTlQzMiBpQ291bnQpOworCit2b2lkCQlGWF9SYW5kb21fR2VuZXJhdGVDcnlwdG8oRlhfTFBEV09SRCBwQnVmZmVyLCBGWF9JTlQzMiBpQ291bnQpOworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK3RlbXBsYXRlPGNsYXNzIGJhc2VUeXBlPgorY2xhc3MgQ0ZYX1NTb3J0VGVtcGxhdGUKK3sKK3B1YmxpYzoKKyAgICB2b2lkIFNoZWxsU29ydChiYXNlVHlwZSAqcEFycmF5LCBGWF9JTlQzMiBpQ291bnQpCisgICAgeworICAgICAgICBGWFNZU19hc3NlcnQocEFycmF5ICE9IE5VTEwgJiYgaUNvdW50ID4gMCk7CisgICAgICAgIEZYX0lOVDMyIGksIGosIGdhcDsKKyAgICAgICAgYmFzZVR5cGUgdjEsIHYyOworICAgICAgICBnYXAgPSBpQ291bnQgPj4gMTsKKyAgICAgICAgd2hpbGUgKGdhcCA+IDApIHsKKyAgICAgICAgICAgIGZvciAoaSA9IGdhcDsgaSA8IGlDb3VudDsgaSArKykgeworICAgICAgICAgICAgICAgIGogPSBpIC0gZ2FwOworICAgICAgICAgICAgICAgIHYxID0gcEFycmF5W2ldOworICAgICAgICAgICAgICAgIHdoaWxlIChqID4gLTEgJiYgKHYyID0gcEFycmF5W2pdKSA+IHYxKSB7CisgICAgICAgICAgICAgICAgICAgIHBBcnJheVtqICsgZ2FwXSA9IHYyOworICAgICAgICAgICAgICAgICAgICBqIC09IGdhcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcEFycmF5W2ogKyBnYXBdID0gdjE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnYXAgPj49IDE7CisgICAgICAgIH0KKyAgICB9Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL2luY2x1ZGUvZnhjcnQvZnhfbWVtb3J5LmggYi9jb3JlL2luY2x1ZGUvZnhjcnQvZnhfbWVtb3J5LmgKaW5kZXggYjBjOTRjNC4uY2Y3OTVmYSAxMDA2NDQKLS0tIGEvY29yZS9pbmNsdWRlL2Z4Y3J0L2Z4X21lbW9yeS5oCisrKyBiL2NvcmUvaW5jbHVkZS9meGNydC9meF9tZW1vcnkuaApAQCAtMSwzMDAgKzEsMzAwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GWF9NRU1PUllfSF8NCi0jZGVmaW5lIF9GWF9NRU1PUllfSF8NCi0jaWZuZGVmIF9GWF9TWVNURU1fSF8NCi0jaW5jbHVkZSAiZnhfc3lzdGVtLmgiDQotI2VuZGlmDQotI2RlZmluZSBGWE1FTV9OT05MRUFWRQkJCTENCi0jZGVmaW5lIEZYTUVNX01PVkFCTEUJCQkyDQotI2RlZmluZSBGWE1FTV9ESVNDQVJEQUJMRQkJNA0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLWV4dGVybiAiQyIgew0KLSNlbmRpZg0KLXR5cGVkZWYgc3RydWN0IF9GWE1FTV9TeXN0ZW1NZ3Igew0KLQ0KLSAgICB2b2lkKiAoKkFsbG9jKShzdHJ1Y3QgX0ZYTUVNX1N5c3RlbU1nciogcE1nciwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7DQotDQotICAgIHZvaWQqICgqQWxsb2NEZWJ1Zykoc3RydWN0IF9GWE1FTV9TeXN0ZW1NZ3IqIHBNZ3IsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIEZYX0xQQ1NUUiBmaWxlLCBpbnQgbGluZSk7DQotDQotICAgIHZvaWQqICgqUmVhbGxvYykoc3RydWN0IF9GWE1FTV9TeXN0ZW1NZ3IqIHBNZ3IsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOw0KLQ0KLSAgICB2b2lkKiAoKlJlYWxsb2NEZWJ1Zykoc3RydWN0IF9GWE1FTV9TeXN0ZW1NZ3IqIHBNZ3IsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIEZYX0xQQ1NUUiBmaWxlLCBpbnQgbGluZSk7DQotDQotICAgIHZvaWQqICgqTG9jaykoc3RydWN0IF9GWE1FTV9TeXN0ZW1NZ3IqIHBNZ3IsIHZvaWQqIGhhbmRsZSk7DQotDQotICAgIHZvaWQgICgqVW5sb2NrKShzdHJ1Y3QgX0ZYTUVNX1N5c3RlbU1nciogcE1nciwgdm9pZCogaGFuZGxlKTsNCi0NCi0gICAgdm9pZCAgKCpGcmVlKShzdHJ1Y3QgX0ZYTUVNX1N5c3RlbU1nciogcE1nciwgdm9pZCogcG9pbnRlciwgaW50IGZsYWdzKTsNCi0NCi0gICAgdm9pZCAgKCpQdXJnZSkoc3RydWN0IF9GWE1FTV9TeXN0ZW1NZ3IqIHBNZ3IpOw0KLQ0KLSAgICB2b2lkICAoKkNvbGxlY3RBbGwpKHN0cnVjdCBfRlhNRU1fU3lzdGVtTWdyKiBwTWdyKTsNCi0NCi0NCi0gICAgdm9pZCogdXNlcjsNCi19IEZYTUVNX1N5c3RlbU1ncjsNCi1GWF9ERUZJTkVIQU5ETEUoRlhNRU1fRm94aXRNZ3IpDQotdHlwZWRlZiBzdHJ1Y3QgX0ZYTUVNX1N5c3RlbU1ncjIgew0KLQ0KLSAgICBGWF9CT09MCSgqTW9yZSkoc3RydWN0IF9GWE1FTV9TeXN0ZW1NZ3IyKiBwTWdyLCBzaXplX3QgYWxsb2Nfc2l6ZSwgdm9pZCoqIG5ld19tZW1vcnksIHNpemVfdCogbmV3X3NpemUpOw0KLQ0KLSAgICB2b2lkCSgqRnJlZSkoc3RydWN0IF9GWE1FTV9TeXN0ZW1NZ3IyKiBwTWdyLCB2b2lkKiBtZW1vcnkpOw0KLX0gRlhNRU1fU3lzdGVtTWdyMjsNCi1GWE1FTV9Gb3hpdE1nciogRlhNRU1fQ3JlYXRlTWVtb3J5TWdyKHNpemVfdCBzaXplLCBGWF9CT09MIGV4dGVuc2libGUpOw0KLXZvaWQJRlhNRU1fRGVzdHJveUZveGl0TWdyKEZYTUVNX0ZveGl0TWdyKiBwRm94aXRNZ3IpOw0KLXZvaWQqCUZYTUVNX0RlZmF1bHRBbGxvYyhzaXplX3QgYnl0ZV9zaXplLCBpbnQgZmxhZ3MpOw0KLXZvaWQqCUZYTUVNX0RlZmF1bHRBbGxvYzIoc2l6ZV90IHVuaXRzLCBzaXplX3QgdW5pdF9zaXplLCBpbnQgZmxhZ3MpOw0KLXZvaWQqCUZYTUVNX0RlZmF1bHRSZWFsbG9jKHZvaWQqIHBvaW50ZXIsIHNpemVfdCBuZXdfc2l6ZSwgaW50IGZsYWdzKTsNCi12b2lkKglGWE1FTV9EZWZhdWx0UmVhbGxvYzIodm9pZCogcG9pbnRlciwgc2l6ZV90IHVuaXRzLCBzaXplX3QgdW5pdF9zaXplLCBpbnQgZmxhZ3MpOw0KLXZvaWQJRlhNRU1fRGVmYXVsdEZyZWUodm9pZCogcG9pbnRlciwgaW50IGZsYWdzKTsNCi0jZGVmaW5lIEZYX0FsbG9jKHR5cGUsIHNpemUpCQkJKHR5cGUqKUZYTUVNX0RlZmF1bHRBbGxvYzIoc2l6ZSwgc2l6ZW9mKHR5cGUpLCAwKQ0KLSNkZWZpbmUgRlhfUmVhbGxvYyh0eXBlLCBwdHIsIHNpemUpCQkodHlwZSopRlhNRU1fRGVmYXVsdFJlYWxsb2MyKHB0ciwgc2l6ZSwgc2l6ZW9mKHR5cGUpLCAwKQ0KLSNkZWZpbmUgRlhfQWxsb2NOTCh0eXBlLCBzaXplKQkJCSh0eXBlKilGWE1FTV9EZWZhdWx0QWxsb2MyKHNpemUsIHNpemVvZih0eXBlKSwgRlhNRU1fTk9OTEVBVkUpDQotI2RlZmluZSBGWF9SZWFsbG9jTkwodHlwZSwgcHRyLCBzaXplKQkodHlwZSopRlhNRU1fRGVmYXVsdFJlYWxsb2MyKHB0ciwgc2l6ZSwgc2l6ZW9mKHR5cGUpLCBGWE1FTV9OT05MRUFWRSkNCi0jZGVmaW5lIEZYX0ZyZWUocG9pbnRlcikgRlhNRU1fRGVmYXVsdEZyZWUocG9pbnRlciwgMCkNCi0jaWZkZWYgX19jcGx1c3BsdXMNCi19DQotI2VuZGlmDQotI2lmZGVmIF9fY3BsdXNwbHVzDQotI2lmIGRlZmluZWQoX0RFQlVHKQ0KLSNkZWZpbmUgRlhfTkVXIG5ldyhfX0ZJTEVfXywgX19MSU5FX18pDQotI2Vsc2UNCi0NCi0jZGVmaW5lIEZYX05FVyBuZXcNCi0jZW5kaWYNCi1jbGFzcyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgdm9pZCoJCQlvcGVyYXRvciBuZXcgKHNpemVfdCBzaXplLCBGWF9MUENTVFIgZmlsZSwgaW50IGxpbmUpOw0KLQ0KLSAgICB2b2lkCQkJb3BlcmF0b3IgZGVsZXRlICh2b2lkKiBwLCBGWF9MUENTVFIgZmlsZSwgaW50IGxpbmUpOw0KLQ0KLSAgICB2b2lkKgkJCW9wZXJhdG9yIG5ldyAoc2l6ZV90IHNpemUpOw0KLQ0KLSAgICB2b2lkCQkJb3BlcmF0b3IgZGVsZXRlICh2b2lkKiBwKTsNCi0NCi0gICAgdm9pZCoJCQlvcGVyYXRvciBuZXdbXSAoc2l6ZV90IHNpemUsIEZYX0xQQ1NUUiBmaWxlLCBpbnQgbGluZSk7DQotDQotICAgIHZvaWQJCQlvcGVyYXRvciBkZWxldGVbXSAodm9pZCogcCwgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKTsNCi0NCi0gICAgdm9pZCoJCQlvcGVyYXRvciBuZXdbXSAoc2l6ZV90IHNpemUpOw0KLQ0KLSAgICB2b2lkCQkJb3BlcmF0b3IgZGVsZXRlW10gKHZvaWQqIHApOw0KLQ0KLSAgICB2b2lkKgkJCW9wZXJhdG9yIG5ldyAoc2l6ZV90LCB2b2lkKiBidWYpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBidWY7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCW9wZXJhdG9yIGRlbGV0ZSAodm9pZCosIHZvaWQqKSB7fQ0KLX07DQotI2RlZmluZSBGWF9ORVdfVkVDVE9SKFBvaW50ZXIsIENsYXNzLCBDb3VudCkgXA0KLSAgICB7IFwNCi0gICAgICAgIFBvaW50ZXIgPSBGWF9BbGxvYyhDbGFzcywgQ291bnQpOyBcDQotICAgICAgICBpZiAoUG9pbnRlcikgeyBcDQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoQ291bnQpOyBpICsrKSBuZXcgKFBvaW50ZXIgKyBpKSBDbGFzczsgXA0KLSAgICAgICAgfSBcDQotICAgIH0NCi0jZGVmaW5lIEZYX0RFTEVURV9WRUNUT1IoUG9pbnRlciwgQ2xhc3MsIENvdW50KSBcDQotICAgIHsgXA0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoQ291bnQpOyBpICsrKSBQb2ludGVyW2ldLn5DbGFzcygpOyBcDQotICAgICAgICBGWF9GcmVlKFBvaW50ZXIpOyBcDQotICAgIH0NCi1jbGFzcyBDRlhfRGVzdHJ1Y3RPYmplY3QgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHZpcnR1YWwgfkNGWF9EZXN0cnVjdE9iamVjdCgpIHt9DQotfTsNCi0jaWZkZWYgX19jcGx1c3BsdXMNCi1leHRlcm4gIkMiIHsNCi0jZW5kaWYNCi10eXBlZGVmIHN0cnVjdCBfSUZYX0FsbG9jYXRvciB7DQotDQotICAgIHZvaWQqCSgqbV9BbGxvY0RlYnVnKShzdHJ1Y3QgX0lGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IsIHNpemVfdCBzaXplLCBGWF9MUENTVFIgZmlsZSwgaW50IGxpbmUpOw0KLQ0KLSAgICB2b2lkKgkoKm1fQWxsb2MpKHN0cnVjdCBfSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciwgc2l6ZV90IHNpemUpOw0KLQ0KLSAgICB2b2lkKgkoKm1fUmVhbGxvY0RlYnVnKShzdHJ1Y3QgX0lGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IsIHZvaWQqIHAsIHNpemVfdCBzaXplLCBGWF9MUENTVFIgZmlsZSwgaW50IGxpbmUpOw0KLQ0KLSAgICB2b2lkKgkoKm1fUmVhbGxvYykoc3RydWN0IF9JRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yLCB2b2lkKiBwLCBzaXplX3Qgc2l6ZSk7DQotDQotICAgIHZvaWQJKCptX0ZyZWUpKHN0cnVjdCBfSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciwgdm9pZCogcCk7DQotfSBJRlhfQWxsb2NhdG9yOw0KLUlGWF9BbGxvY2F0b3IqIEZYTUVNX0dldERlZkFsbG9jYXRvcigpOw0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX0NCi0jZW5kaWYNCi0jaWZkZWYgX0RFQlVHDQotDQotI2RlZmluZSBGWF9BbGxvY2F0b3JfQWxsb2MoZnhBbGxvY2F0b3IsIHR5cGUsIHNpemUpIFwNCi0gICAgKChmeEFsbG9jYXRvcikgPyAodHlwZSopKGZ4QWxsb2NhdG9yKS0+bV9BbGxvY0RlYnVnKChmeEFsbG9jYXRvciksIChzaXplKSAqIHNpemVvZih0eXBlKSwgX19GSUxFX18sIF9fTElORV9fKSA6IChGWF9BbGxvYyh0eXBlLCBzaXplKSkpDQotDQotI2RlZmluZSBGWF9BbGxvY2F0b3JfUmVhbGxvYyhmeEFsbG9jYXRvciwgdHlwZSwgcHRyLCBuZXdfc2l6ZSkgXA0KLSAgICAoKGZ4QWxsb2NhdG9yKSA/ICh0eXBlKikoZnhBbGxvY2F0b3IpLT5tX1JlYWxsb2NEZWJ1ZygoZnhBbGxvY2F0b3IpLCAocHRyKSwgKG5ld19zaXplKSAqIHNpemVvZih0eXBlKSwgX19GSUxFX18sIF9fTElORV9fKSA6IChGWF9SZWFsbG9jKHR5cGUsIHB0ciwgbmV3X3NpemUpKSkNCi0jZWxzZQ0KLQ0KLSNkZWZpbmUgRlhfQWxsb2NhdG9yX0FsbG9jKGZ4QWxsb2NhdG9yLCB0eXBlLCBzaXplKSBcDQotICAgICgoZnhBbGxvY2F0b3IpID8gKHR5cGUqKShmeEFsbG9jYXRvciktPm1fQWxsb2MoKGZ4QWxsb2NhdG9yKSwgKHNpemUpICogc2l6ZW9mKHR5cGUpKSA6IChGWF9BbGxvYyh0eXBlLCBzaXplKSkpDQotDQotI2RlZmluZSBGWF9BbGxvY2F0b3JfUmVhbGxvYyhmeEFsbG9jYXRvciwgdHlwZSwgcHRyLCBuZXdfc2l6ZSkgXA0KLSAgICAoKGZ4QWxsb2NhdG9yKSA/ICh0eXBlKikoZnhBbGxvY2F0b3IpLT5tX1JlYWxsb2MoKGZ4QWxsb2NhdG9yKSwgKHB0ciksIChuZXdfc2l6ZSkgKiBzaXplb2YodHlwZSkpIDogKEZYX1JlYWxsb2ModHlwZSwgcHRyLCBuZXdfc2l6ZSkpKQ0KLSNlbmRpZg0KLSNkZWZpbmUgRlhfQWxsb2NhdG9yX0ZyZWUoZnhBbGxvY2F0b3IsIHB0cikgXA0KLSAgICAoKGZ4QWxsb2NhdG9yKSA/IChmeEFsbG9jYXRvciktPm1fRnJlZSgoZnhBbGxvY2F0b3IpLCAocHRyKSkgOiAoRlhfRnJlZShwdHIpKSkNCi1pbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBJRlhfQWxsb2NhdG9yKiBmeEFsbG9jYXRvcikNCi17DQotICAgIHJldHVybiAodm9pZCopRlhfQWxsb2NhdG9yX0FsbG9jKGZ4QWxsb2NhdG9yLCBGWF9CWVRFLCBzaXplKTsNCi19DQotaW5saW5lIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqIHB0ciwgSUZYX0FsbG9jYXRvciogZnhBbGxvY2F0b3IpDQotew0KLX0NCi0jZGVmaW5lIEZYX05ld0F0QWxsb2NhdG9yKGZ4QWxsb2NhdG9yKSBcDQotICAgIDo6bmV3KGZ4QWxsb2NhdG9yKQ0KLSNkZWZpbmUgRlhfRGVsZXRlQXRBbGxvY2F0b3IocG9pbnRlciwgZnhBbGxvY2F0b3IsIF9fY2xhc3NfXykgXA0KLSAgICAocG9pbnRlciktPn5fX2NsYXNzX18oKTsgXA0KLSAgICBGWF9BbGxvY2F0b3JfRnJlZShmeEFsbG9jYXRvciwgcG9pbnRlcikNCi1jbGFzcyBDRlhfQWxsb2NPYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICB2b2lkKgkJCW9wZXJhdG9yIG5ldyAoc2l6ZV90IHNpemUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IsIEZYX0xQQ1NUUiBmaWxlLCBpbnQgbGluZSk7DQotI2lmbmRlZiBfRlhfTk9fRVhDRVBUSU9OXw0KLQ0KLSAgICB2b2lkCQkJb3BlcmF0b3IgZGVsZXRlICh2b2lkKiBwLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yLCBGWF9MUENTVFIgZmlsZSwgaW50IGxpbmUpOw0KLSNlbmRpZg0KLQ0KLSAgICB2b2lkKgkJCW9wZXJhdG9yIG5ldyAoc2l6ZV90IHNpemUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpOw0KLQ0KLSAgICB2b2lkCQkJb3BlcmF0b3IgZGVsZXRlICh2b2lkKiBwKTsNCi0jaWZuZGVmIF9GWF9OT19FWENFUFRJT05fDQotDQotICAgIHZvaWQJCQlvcGVyYXRvciBkZWxldGUgKHZvaWQqIHAsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpOw0KLSNlbmRpZg0KLQ0KLSAgICB2b2lkKgkJCW9wZXJhdG9yIG5ldyAoc2l6ZV90LCB2b2lkKiBidWYpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBidWY7DQotICAgIH0NCi0jaWZuZGVmIF9GWF9OT19FWENFUFRJT05fDQotDQotICAgIHZvaWQJCQlvcGVyYXRvciBkZWxldGUgKHZvaWQqLCB2b2lkKikge30NCi0jZW5kaWYNCi0NCi0gICAgSUZYX0FsbG9jYXRvcioJR2V0QWxsb2NhdG9yKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcEFsbG9jYXRvcjsNCi0gICAgfQ0KLXByaXZhdGU6DQotDQotICAgIHZvaWQqCQkJb3BlcmF0b3IgbmV3W10gKHNpemVfdCBzaXplLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yLCBGWF9MUENTVFIgZmlsZSwgaW50IGxpbmUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBvcGVyYXRvciBuZXcoc2l6ZSwgcEFsbG9jYXRvciwgZmlsZSwgbGluZSk7DQotICAgIH0NCi0jaWZuZGVmIF9GWF9OT19FWENFUFRJT05fDQotDQotICAgIHZvaWQJCQlvcGVyYXRvciBkZWxldGVbXSAodm9pZCogcCwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciwgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKSB7fQ0KLSNlbmRpZg0KLQ0KLSAgICB2b2lkKgkJCW9wZXJhdG9yIG5ld1tdIChzaXplX3Qgc2l6ZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG9wZXJhdG9yIG5ldyhzaXplLCBwQWxsb2NhdG9yKTsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJb3BlcmF0b3IgZGVsZXRlW10gKHZvaWQqIHApIHt9DQotI2lmbmRlZiBfRlhfTk9fRVhDRVBUSU9OXw0KLQ0KLSAgICB2b2lkCQkJb3BlcmF0b3IgZGVsZXRlW10gKHZvaWQqIHAsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpIHt9DQotI2VuZGlmDQotcHJvdGVjdGVkOg0KLQ0KLSAgICBJRlhfQWxsb2NhdG9yKgltX3BBbGxvY2F0b3I7DQotfTsNCi0jaWYgZGVmaW5lZChfREVCVUcpDQotI2RlZmluZSBGWF9ORVdBVChwQWxsb2NhdG9yKSBuZXcocEFsbG9jYXRvciwgX19GSUxFX18sIF9fTElORV9fKQ0KLSNlbHNlDQotDQotI2RlZmluZSBGWF9ORVdBVChwQWxsb2NhdG9yKSBuZXcocEFsbG9jYXRvcikNCi0jZW5kaWYNCi1jbGFzcyBDRlhfR3Jvd09ubHlQb29sIDogcHVibGljIElGWF9BbGxvY2F0b3IsIHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ0ZYX0dyb3dPbmx5UG9vbChJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCwgc2l6ZV90IHRydW5rX3NpemUgPSAxNjM4NCk7DQotDQotICAgIH5DRlhfR3Jvd09ubHlQb29sKCk7DQotDQotICAgIHZvaWQJU2V0QWxsb2NhdG9yKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpOw0KLQ0KLSAgICB2b2lkCVNldFRydW5rU2l6ZShzaXplX3QgdHJ1bmtfc2l6ZSkNCi0gICAgew0KLSAgICAgICAgbV9UcnVua1NpemUgPSB0cnVua19zaXplOw0KLSAgICB9DQotDQotICAgIHZvaWQqCUFsbG9jRGVidWcoc2l6ZV90IHNpemUsIEZYX0xQQ1NUUiBmaWxlLCBpbnQgbGluZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEFsbG9jKHNpemUpOw0KLSAgICB9DQotDQotICAgIHZvaWQqCUFsbG9jKHNpemVfdCBzaXplKTsNCi0NCi0gICAgdm9pZCoJUmVhbGxvY0RlYnVnKHZvaWQqIHAsIHNpemVfdCBuZXdfc2l6ZSwgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkKglSZWFsbG9jKHZvaWQqIHAsIHNpemVfdCBuZXdfc2l6ZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0NCi0gICAgdm9pZAlGcmVlKHZvaWQqKSB7fQ0KLQ0KLSAgICB2b2lkCUZyZWVBbGwoKTsNCi1wcml2YXRlOg0KLQ0KLSAgICBzaXplX3QJbV9UcnVua1NpemU7DQotDQotICAgIHZvaWQqCW1fcEZpcnN0VHJ1bms7DQotDQotICAgIElGWF9BbGxvY2F0b3IqCW1fcEFsbG9jYXRvcjsNCi19Ow0KLSNlbmRpZg0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLWV4dGVybiAiQyIgew0KLSNlbmRpZg0KLSNkZWZpbmUgRlhfRklYRURNRU1fUEFHRVNJWkUJCSg0MDk2ICogMTYpDQotI2RlZmluZSBGWF9GSVhFRE1FTV9NSURCTE9DS1NJWkUJKDQwOTYpDQotdHlwZWRlZiBzdHJ1Y3QgX0ZYX01FTUNPTkZJRyB7DQotDQotICAgIHNpemVfdAluUGFnZU51bV9Jbml0ODsNCi0NCi0gICAgc2l6ZV90CW5QYWdlTnVtX0luaXQxNjsNCi0NCi0gICAgc2l6ZV90CW5QYWdlTnVtX0luaXQzMjsNCi0NCi0gICAgc2l6ZV90CW5QYWdlTnVtX01vcmUxNjsNCi0NCi0gICAgc2l6ZV90CW5QYWdlTnVtX01vcmUzMjsNCi0NCi0gICAgc2l6ZV90CW5QYWdlU2l6ZV9NaWQ7DQotDQotICAgIHNpemVfdAluUGFnZU51bV9Jbml0TWlkOw0KLQ0KLSAgICBzaXplX3QJblBhZ2VOdW1fTW9yZU1pZDsNCi0NCi0gICAgc2l6ZV90CW5QYWdlU2l6ZV9MYXJnZTsNCi0NCi0gICAgc2l6ZV90CW5QYWdlU2l6ZV9BbG9uZTsNCi19IEZYX01FTUNPTkZJRzsNCi12b2lkCUZYTUVNX1NldENvbmZpZyhjb25zdCBGWF9NRU1DT05GSUcqIG1lbUNvbmZpZyk7DQotI2lmZGVmIF9fY3BsdXNwbHVzDQotfQ0KLSNlbmRpZg0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZYX01FTU9SWV9IXworI2RlZmluZSBfRlhfTUVNT1JZX0hfCisjaWZuZGVmIF9GWF9TWVNURU1fSF8KKyNpbmNsdWRlICJmeF9zeXN0ZW0uaCIKKyNlbmRpZgorI2RlZmluZSBGWE1FTV9OT05MRUFWRQkJCTEKKyNkZWZpbmUgRlhNRU1fTU9WQUJMRQkJCTIKKyNkZWZpbmUgRlhNRU1fRElTQ0FSREFCTEUJCTQKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK3R5cGVkZWYgc3RydWN0IF9GWE1FTV9TeXN0ZW1NZ3IgeworCisgICAgdm9pZCogKCpBbGxvYykoc3RydWN0IF9GWE1FTV9TeXN0ZW1NZ3IqIHBNZ3IsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworCisgICAgdm9pZCogKCpBbGxvY0RlYnVnKShzdHJ1Y3QgX0ZYTUVNX1N5c3RlbU1nciogcE1nciwgc2l6ZV90IHNpemUsIGludCBmbGFncywgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKTsKKworICAgIHZvaWQqICgqUmVhbGxvYykoc3RydWN0IF9GWE1FTV9TeXN0ZW1NZ3IqIHBNZ3IsIHZvaWQqIHBvaW50ZXIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworCisgICAgdm9pZCogKCpSZWFsbG9jRGVidWcpKHN0cnVjdCBfRlhNRU1fU3lzdGVtTWdyKiBwTWdyLCB2b2lkKiBwb2ludGVyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBGWF9MUENTVFIgZmlsZSwgaW50IGxpbmUpOworCisgICAgdm9pZCogKCpMb2NrKShzdHJ1Y3QgX0ZYTUVNX1N5c3RlbU1nciogcE1nciwgdm9pZCogaGFuZGxlKTsKKworICAgIHZvaWQgICgqVW5sb2NrKShzdHJ1Y3QgX0ZYTUVNX1N5c3RlbU1nciogcE1nciwgdm9pZCogaGFuZGxlKTsKKworICAgIHZvaWQgICgqRnJlZSkoc3RydWN0IF9GWE1FTV9TeXN0ZW1NZ3IqIHBNZ3IsIHZvaWQqIHBvaW50ZXIsIGludCBmbGFncyk7CisKKyAgICB2b2lkICAoKlB1cmdlKShzdHJ1Y3QgX0ZYTUVNX1N5c3RlbU1nciogcE1ncik7CisKKyAgICB2b2lkICAoKkNvbGxlY3RBbGwpKHN0cnVjdCBfRlhNRU1fU3lzdGVtTWdyKiBwTWdyKTsKKworCisgICAgdm9pZCogdXNlcjsKK30gRlhNRU1fU3lzdGVtTWdyOworRlhfREVGSU5FSEFORExFKEZYTUVNX0ZveGl0TWdyKQordHlwZWRlZiBzdHJ1Y3QgX0ZYTUVNX1N5c3RlbU1ncjIgeworCisgICAgRlhfQk9PTAkoKk1vcmUpKHN0cnVjdCBfRlhNRU1fU3lzdGVtTWdyMiogcE1nciwgc2l6ZV90IGFsbG9jX3NpemUsIHZvaWQqKiBuZXdfbWVtb3J5LCBzaXplX3QqIG5ld19zaXplKTsKKworICAgIHZvaWQJKCpGcmVlKShzdHJ1Y3QgX0ZYTUVNX1N5c3RlbU1ncjIqIHBNZ3IsIHZvaWQqIG1lbW9yeSk7Cit9IEZYTUVNX1N5c3RlbU1ncjI7CitGWE1FTV9Gb3hpdE1nciogRlhNRU1fQ3JlYXRlTWVtb3J5TWdyKHNpemVfdCBzaXplLCBGWF9CT09MIGV4dGVuc2libGUpOwordm9pZAlGWE1FTV9EZXN0cm95Rm94aXRNZ3IoRlhNRU1fRm94aXRNZ3IqIHBGb3hpdE1ncik7Cit2b2lkKglGWE1FTV9EZWZhdWx0QWxsb2Moc2l6ZV90IGJ5dGVfc2l6ZSwgaW50IGZsYWdzKTsKK3ZvaWQqCUZYTUVNX0RlZmF1bHRBbGxvYzIoc2l6ZV90IHVuaXRzLCBzaXplX3QgdW5pdF9zaXplLCBpbnQgZmxhZ3MpOwordm9pZCoJRlhNRU1fRGVmYXVsdFJlYWxsb2Modm9pZCogcG9pbnRlciwgc2l6ZV90IG5ld19zaXplLCBpbnQgZmxhZ3MpOwordm9pZCoJRlhNRU1fRGVmYXVsdFJlYWxsb2MyKHZvaWQqIHBvaW50ZXIsIHNpemVfdCB1bml0cywgc2l6ZV90IHVuaXRfc2l6ZSwgaW50IGZsYWdzKTsKK3ZvaWQJRlhNRU1fRGVmYXVsdEZyZWUodm9pZCogcG9pbnRlciwgaW50IGZsYWdzKTsKKyNkZWZpbmUgRlhfQWxsb2ModHlwZSwgc2l6ZSkJCQkodHlwZSopRlhNRU1fRGVmYXVsdEFsbG9jMihzaXplLCBzaXplb2YodHlwZSksIDApCisjZGVmaW5lIEZYX1JlYWxsb2ModHlwZSwgcHRyLCBzaXplKQkJKHR5cGUqKUZYTUVNX0RlZmF1bHRSZWFsbG9jMihwdHIsIHNpemUsIHNpemVvZih0eXBlKSwgMCkKKyNkZWZpbmUgRlhfQWxsb2NOTCh0eXBlLCBzaXplKQkJCSh0eXBlKilGWE1FTV9EZWZhdWx0QWxsb2MyKHNpemUsIHNpemVvZih0eXBlKSwgRlhNRU1fTk9OTEVBVkUpCisjZGVmaW5lIEZYX1JlYWxsb2NOTCh0eXBlLCBwdHIsIHNpemUpCSh0eXBlKilGWE1FTV9EZWZhdWx0UmVhbGxvYzIocHRyLCBzaXplLCBzaXplb2YodHlwZSksIEZYTUVNX05PTkxFQVZFKQorI2RlZmluZSBGWF9GcmVlKHBvaW50ZXIpIEZYTUVNX0RlZmF1bHRGcmVlKHBvaW50ZXIsIDApCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2lmZGVmIF9fY3BsdXNwbHVzCisjaWYgZGVmaW5lZChfREVCVUcpCisjZGVmaW5lIEZYX05FVyBuZXcoX19GSUxFX18sIF9fTElORV9fKQorI2Vsc2UKKworI2RlZmluZSBGWF9ORVcgbmV3CisjZW5kaWYKK2NsYXNzIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIHZvaWQqCQkJb3BlcmF0b3IgbmV3IChzaXplX3Qgc2l6ZSwgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKTsKKworICAgIHZvaWQJCQlvcGVyYXRvciBkZWxldGUgKHZvaWQqIHAsIEZYX0xQQ1NUUiBmaWxlLCBpbnQgbGluZSk7CisKKyAgICB2b2lkKgkJCW9wZXJhdG9yIG5ldyAoc2l6ZV90IHNpemUpOworCisgICAgdm9pZAkJCW9wZXJhdG9yIGRlbGV0ZSAodm9pZCogcCk7CisKKyAgICB2b2lkKgkJCW9wZXJhdG9yIG5ld1tdIChzaXplX3Qgc2l6ZSwgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKTsKKworICAgIHZvaWQJCQlvcGVyYXRvciBkZWxldGVbXSAodm9pZCogcCwgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKTsKKworICAgIHZvaWQqCQkJb3BlcmF0b3IgbmV3W10gKHNpemVfdCBzaXplKTsKKworICAgIHZvaWQJCQlvcGVyYXRvciBkZWxldGVbXSAodm9pZCogcCk7CisKKyAgICB2b2lkKgkJCW9wZXJhdG9yIG5ldyAoc2l6ZV90LCB2b2lkKiBidWYpCisgICAgeworICAgICAgICByZXR1cm4gYnVmOworICAgIH0KKworICAgIHZvaWQJCQlvcGVyYXRvciBkZWxldGUgKHZvaWQqLCB2b2lkKikge30KK307CisjZGVmaW5lIEZYX05FV19WRUNUT1IoUG9pbnRlciwgQ2xhc3MsIENvdW50KSBcCisgICAgeyBcCisgICAgICAgIFBvaW50ZXIgPSBGWF9BbGxvYyhDbGFzcywgQ291bnQpOyBcCisgICAgICAgIGlmIChQb2ludGVyKSB7IFwKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKENvdW50KTsgaSArKykgbmV3IChQb2ludGVyICsgaSkgQ2xhc3M7IFwKKyAgICAgICAgfSBcCisgICAgfQorI2RlZmluZSBGWF9ERUxFVEVfVkVDVE9SKFBvaW50ZXIsIENsYXNzLCBDb3VudCkgXAorICAgIHsgXAorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IChDb3VudCk7IGkgKyspIFBvaW50ZXJbaV0ufkNsYXNzKCk7IFwKKyAgICAgICAgRlhfRnJlZShQb2ludGVyKTsgXAorICAgIH0KK2NsYXNzIENGWF9EZXN0cnVjdE9iamVjdCA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICB2aXJ0dWFsIH5DRlhfRGVzdHJ1Y3RPYmplY3QoKSB7fQorfTsKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK3R5cGVkZWYgc3RydWN0IF9JRlhfQWxsb2NhdG9yIHsKKworICAgIHZvaWQqCSgqbV9BbGxvY0RlYnVnKShzdHJ1Y3QgX0lGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IsIHNpemVfdCBzaXplLCBGWF9MUENTVFIgZmlsZSwgaW50IGxpbmUpOworCisgICAgdm9pZCoJKCptX0FsbG9jKShzdHJ1Y3QgX0lGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IsIHNpemVfdCBzaXplKTsKKworICAgIHZvaWQqCSgqbV9SZWFsbG9jRGVidWcpKHN0cnVjdCBfSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciwgdm9pZCogcCwgc2l6ZV90IHNpemUsIEZYX0xQQ1NUUiBmaWxlLCBpbnQgbGluZSk7CisKKyAgICB2b2lkKgkoKm1fUmVhbGxvYykoc3RydWN0IF9JRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yLCB2b2lkKiBwLCBzaXplX3Qgc2l6ZSk7CisKKyAgICB2b2lkCSgqbV9GcmVlKShzdHJ1Y3QgX0lGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IsIHZvaWQqIHApOworfSBJRlhfQWxsb2NhdG9yOworSUZYX0FsbG9jYXRvciogRlhNRU1fR2V0RGVmQWxsb2NhdG9yKCk7CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2lmZGVmIF9ERUJVRworCisjZGVmaW5lIEZYX0FsbG9jYXRvcl9BbGxvYyhmeEFsbG9jYXRvciwgdHlwZSwgc2l6ZSkgXAorICAgICgoZnhBbGxvY2F0b3IpID8gKHR5cGUqKShmeEFsbG9jYXRvciktPm1fQWxsb2NEZWJ1ZygoZnhBbGxvY2F0b3IpLCAoc2l6ZSkgKiBzaXplb2YodHlwZSksIF9fRklMRV9fLCBfX0xJTkVfXykgOiAoRlhfQWxsb2ModHlwZSwgc2l6ZSkpKQorCisjZGVmaW5lIEZYX0FsbG9jYXRvcl9SZWFsbG9jKGZ4QWxsb2NhdG9yLCB0eXBlLCBwdHIsIG5ld19zaXplKSBcCisgICAgKChmeEFsbG9jYXRvcikgPyAodHlwZSopKGZ4QWxsb2NhdG9yKS0+bV9SZWFsbG9jRGVidWcoKGZ4QWxsb2NhdG9yKSwgKHB0ciksIChuZXdfc2l6ZSkgKiBzaXplb2YodHlwZSksIF9fRklMRV9fLCBfX0xJTkVfXykgOiAoRlhfUmVhbGxvYyh0eXBlLCBwdHIsIG5ld19zaXplKSkpCisjZWxzZQorCisjZGVmaW5lIEZYX0FsbG9jYXRvcl9BbGxvYyhmeEFsbG9jYXRvciwgdHlwZSwgc2l6ZSkgXAorICAgICgoZnhBbGxvY2F0b3IpID8gKHR5cGUqKShmeEFsbG9jYXRvciktPm1fQWxsb2MoKGZ4QWxsb2NhdG9yKSwgKHNpemUpICogc2l6ZW9mKHR5cGUpKSA6IChGWF9BbGxvYyh0eXBlLCBzaXplKSkpCisKKyNkZWZpbmUgRlhfQWxsb2NhdG9yX1JlYWxsb2MoZnhBbGxvY2F0b3IsIHR5cGUsIHB0ciwgbmV3X3NpemUpIFwKKyAgICAoKGZ4QWxsb2NhdG9yKSA/ICh0eXBlKikoZnhBbGxvY2F0b3IpLT5tX1JlYWxsb2MoKGZ4QWxsb2NhdG9yKSwgKHB0ciksIChuZXdfc2l6ZSkgKiBzaXplb2YodHlwZSkpIDogKEZYX1JlYWxsb2ModHlwZSwgcHRyLCBuZXdfc2l6ZSkpKQorI2VuZGlmCisjZGVmaW5lIEZYX0FsbG9jYXRvcl9GcmVlKGZ4QWxsb2NhdG9yLCBwdHIpIFwKKyAgICAoKGZ4QWxsb2NhdG9yKSA/IChmeEFsbG9jYXRvciktPm1fRnJlZSgoZnhBbGxvY2F0b3IpLCAocHRyKSkgOiAoRlhfRnJlZShwdHIpKSkKK2lubGluZSB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIElGWF9BbGxvY2F0b3IqIGZ4QWxsb2NhdG9yKQoreworICAgIHJldHVybiAodm9pZCopRlhfQWxsb2NhdG9yX0FsbG9jKGZ4QWxsb2NhdG9yLCBGWF9CWVRFLCBzaXplKTsKK30KK2lubGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiBwdHIsIElGWF9BbGxvY2F0b3IqIGZ4QWxsb2NhdG9yKQoreworfQorI2RlZmluZSBGWF9OZXdBdEFsbG9jYXRvcihmeEFsbG9jYXRvcikgXAorICAgIDo6bmV3KGZ4QWxsb2NhdG9yKQorI2RlZmluZSBGWF9EZWxldGVBdEFsbG9jYXRvcihwb2ludGVyLCBmeEFsbG9jYXRvciwgX19jbGFzc19fKSBcCisgICAgKHBvaW50ZXIpLT5+X19jbGFzc19fKCk7IFwKKyAgICBGWF9BbGxvY2F0b3JfRnJlZShmeEFsbG9jYXRvciwgcG9pbnRlcikKK2NsYXNzIENGWF9BbGxvY09iamVjdAoreworcHVibGljOgorCisgICAgdm9pZCoJCQlvcGVyYXRvciBuZXcgKHNpemVfdCBzaXplLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yLCBGWF9MUENTVFIgZmlsZSwgaW50IGxpbmUpOworI2lmbmRlZiBfRlhfTk9fRVhDRVBUSU9OXworCisgICAgdm9pZAkJCW9wZXJhdG9yIGRlbGV0ZSAodm9pZCogcCwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciwgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKTsKKyNlbmRpZgorCisgICAgdm9pZCoJCQlvcGVyYXRvciBuZXcgKHNpemVfdCBzaXplLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKTsKKworICAgIHZvaWQJCQlvcGVyYXRvciBkZWxldGUgKHZvaWQqIHApOworI2lmbmRlZiBfRlhfTk9fRVhDRVBUSU9OXworCisgICAgdm9pZAkJCW9wZXJhdG9yIGRlbGV0ZSAodm9pZCogcCwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcik7CisjZW5kaWYKKworICAgIHZvaWQqCQkJb3BlcmF0b3IgbmV3IChzaXplX3QsIHZvaWQqIGJ1ZikKKyAgICB7CisgICAgICAgIHJldHVybiBidWY7CisgICAgfQorI2lmbmRlZiBfRlhfTk9fRVhDRVBUSU9OXworCisgICAgdm9pZAkJCW9wZXJhdG9yIGRlbGV0ZSAodm9pZCosIHZvaWQqKSB7fQorI2VuZGlmCisKKyAgICBJRlhfQWxsb2NhdG9yKglHZXRBbGxvY2F0b3IoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcEFsbG9jYXRvcjsKKyAgICB9Citwcml2YXRlOgorCisgICAgdm9pZCoJCQlvcGVyYXRvciBuZXdbXSAoc2l6ZV90IHNpemUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IsIEZYX0xQQ1NUUiBmaWxlLCBpbnQgbGluZSkKKyAgICB7CisgICAgICAgIHJldHVybiBvcGVyYXRvciBuZXcoc2l6ZSwgcEFsbG9jYXRvciwgZmlsZSwgbGluZSk7CisgICAgfQorI2lmbmRlZiBfRlhfTk9fRVhDRVBUSU9OXworCisgICAgdm9pZAkJCW9wZXJhdG9yIGRlbGV0ZVtdICh2b2lkKiBwLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yLCBGWF9MUENTVFIgZmlsZSwgaW50IGxpbmUpIHt9CisjZW5kaWYKKworICAgIHZvaWQqCQkJb3BlcmF0b3IgbmV3W10gKHNpemVfdCBzaXplLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wZXJhdG9yIG5ldyhzaXplLCBwQWxsb2NhdG9yKTsKKyAgICB9CisKKyAgICB2b2lkCQkJb3BlcmF0b3IgZGVsZXRlW10gKHZvaWQqIHApIHt9CisjaWZuZGVmIF9GWF9OT19FWENFUFRJT05fCisKKyAgICB2b2lkCQkJb3BlcmF0b3IgZGVsZXRlW10gKHZvaWQqIHAsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpIHt9CisjZW5kaWYKK3Byb3RlY3RlZDoKKworICAgIElGWF9BbGxvY2F0b3IqCW1fcEFsbG9jYXRvcjsKK307CisjaWYgZGVmaW5lZChfREVCVUcpCisjZGVmaW5lIEZYX05FV0FUKHBBbGxvY2F0b3IpIG5ldyhwQWxsb2NhdG9yLCBfX0ZJTEVfXywgX19MSU5FX18pCisjZWxzZQorCisjZGVmaW5lIEZYX05FV0FUKHBBbGxvY2F0b3IpIG5ldyhwQWxsb2NhdG9yKQorI2VuZGlmCitjbGFzcyBDRlhfR3Jvd09ubHlQb29sIDogcHVibGljIElGWF9BbGxvY2F0b3IsIHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDRlhfR3Jvd09ubHlQb29sKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMLCBzaXplX3QgdHJ1bmtfc2l6ZSA9IDE2Mzg0KTsKKworICAgIH5DRlhfR3Jvd09ubHlQb29sKCk7CisKKyAgICB2b2lkCVNldEFsbG9jYXRvcihJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKTsKKworICAgIHZvaWQJU2V0VHJ1bmtTaXplKHNpemVfdCB0cnVua19zaXplKQorICAgIHsKKyAgICAgICAgbV9UcnVua1NpemUgPSB0cnVua19zaXplOworICAgIH0KKworICAgIHZvaWQqCUFsbG9jRGVidWcoc2l6ZV90IHNpemUsIEZYX0xQQ1NUUiBmaWxlLCBpbnQgbGluZSkKKyAgICB7CisgICAgICAgIHJldHVybiBBbGxvYyhzaXplKTsKKyAgICB9CisKKyAgICB2b2lkKglBbGxvYyhzaXplX3Qgc2l6ZSk7CisKKyAgICB2b2lkKglSZWFsbG9jRGVidWcodm9pZCogcCwgc2l6ZV90IG5ld19zaXplLCBGWF9MUENTVFIgZmlsZSwgaW50IGxpbmUpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB2b2lkKglSZWFsbG9jKHZvaWQqIHAsIHNpemVfdCBuZXdfc2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHZvaWQJRnJlZSh2b2lkKikge30KKworICAgIHZvaWQJRnJlZUFsbCgpOworcHJpdmF0ZToKKworICAgIHNpemVfdAltX1RydW5rU2l6ZTsKKworICAgIHZvaWQqCW1fcEZpcnN0VHJ1bms7CisKKyAgICBJRlhfQWxsb2NhdG9yKgltX3BBbGxvY2F0b3I7Cit9OworI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisjZGVmaW5lIEZYX0ZJWEVETUVNX1BBR0VTSVpFCQkoNDA5NiAqIDE2KQorI2RlZmluZSBGWF9GSVhFRE1FTV9NSURCTE9DS1NJWkUJKDQwOTYpCit0eXBlZGVmIHN0cnVjdCBfRlhfTUVNQ09ORklHIHsKKworICAgIHNpemVfdAluUGFnZU51bV9Jbml0ODsKKworICAgIHNpemVfdAluUGFnZU51bV9Jbml0MTY7CisKKyAgICBzaXplX3QJblBhZ2VOdW1fSW5pdDMyOworCisgICAgc2l6ZV90CW5QYWdlTnVtX01vcmUxNjsKKworICAgIHNpemVfdAluUGFnZU51bV9Nb3JlMzI7CisKKyAgICBzaXplX3QJblBhZ2VTaXplX01pZDsKKworICAgIHNpemVfdAluUGFnZU51bV9Jbml0TWlkOworCisgICAgc2l6ZV90CW5QYWdlTnVtX01vcmVNaWQ7CisKKyAgICBzaXplX3QJblBhZ2VTaXplX0xhcmdlOworCisgICAgc2l6ZV90CW5QYWdlU2l6ZV9BbG9uZTsKK30gRlhfTUVNQ09ORklHOwordm9pZAlGWE1FTV9TZXRDb25maWcoY29uc3QgRlhfTUVNQ09ORklHKiBtZW1Db25maWcpOworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9pbmNsdWRlL2Z4Y3J0L2Z4X3N0cmVhbS5oIGIvY29yZS9pbmNsdWRlL2Z4Y3J0L2Z4X3N0cmVhbS5oCmluZGV4IGNkYTUyNTMuLjg2OTc5N2YgMTAwNjQ0Ci0tLSBhL2NvcmUvaW5jbHVkZS9meGNydC9meF9zdHJlYW0uaAorKysgYi9jb3JlL2luY2x1ZGUvZnhjcnQvZnhfc3RyZWFtLmgKQEAgLTEsMjAwICsxLDIwMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlhfU1RSRUFNX0hfDQotI2RlZmluZSBfRlhfU1RSRUFNX0hfDQotI2lmbmRlZiBfRlhfTUVNT1JZX0hfDQotI2luY2x1ZGUgImZ4X21lbW9yeS5oIg0KLSNlbmRpZg0KLXZvaWQqIEZYX09wZW5Gb2xkZXIoRlhfTFBDU1RSIHBhdGgpOw0KLXZvaWQqIEZYX09wZW5Gb2xkZXIoRlhfTFBDV1NUUiBwYXRoKTsNCi1GWF9CT09MIEZYX0dldE5leHRGaWxlKHZvaWQqIGhhbmRsZSwgQ0ZYX0J5dGVTdHJpbmcmIGZpbGVuYW1lLCBGWF9CT09MJiBiRm9sZGVyKTsNCi1GWF9CT09MIEZYX0dldE5leHRGaWxlKHZvaWQqIGhhbmRsZSwgQ0ZYX1dpZGVTdHJpbmcmIGZpbGVuYW1lLCBGWF9CT09MJiBiRm9sZGVyKTsNCi12b2lkIEZYX0Nsb3NlRm9sZGVyKHZvaWQqIGhhbmRsZSk7DQotRlhfV0NIQVIgRlhfR2V0Rm9sZGVyU2VwYXJhdG9yKCk7DQotRlhfREVGSU5FSEFORExFKEZYX0hGSUxFKQ0KLSNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfDQotI2RlZmluZSBGWF9GSUxFU0laRQkJCUZYX0lOVDMyDQotI2Vsc2UNCi0jaW5jbHVkZSA8ZmNudGwuaD4NCi0jaW5jbHVkZSA8dW5pc3RkLmg+DQotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+DQotI2lmbmRlZiBPX0JJTkFSWQ0KLSNkZWZpbmUgT19CSU5BUlkgCQkwDQotI2VuZGlmDQotI2lmbmRlZiBPX0xBUkdFRklMRQ0KLSNkZWZpbmUgT19MQVJHRUZJTEUJCTANCi0jZW5kaWYNCi0jZGVmaW5lIEZYX0ZJTEVTSVpFCQkJb2ZmX3QNCi0jZW5kaWYNCi0jZGVmaW5lIEZYX0dFVEJZVEVPRkZTRVQzMihhKQkwDQotI2RlZmluZSBGWF9HRVRCWVRFT0ZGU0VUNDAoYSkJMA0KLSNkZWZpbmUgRlhfR0VUQllURU9GRlNFVDQ4KGEpCTANCi0jZGVmaW5lIEZYX0dFVEJZVEVPRkZTRVQ1NihhKQkwDQotI2RlZmluZSBGWF9HRVRCWVRFT0ZGU0VUMjQoYSkgICgoRlhfQllURSkoYT4+MjQpKQ0KLSNkZWZpbmUgRlhfR0VUQllURU9GRlNFVDE2KGEpICAoKEZYX0JZVEUpKGE+PjE2KSkNCi0jZGVmaW5lIEZYX0dFVEJZVEVPRkZTRVQ4KGEpICAgKChGWF9CWVRFKShhPj44KSkNCi0jZGVmaW5lIEZYX0dFVEJZVEVPRkZTRVQwKGEpICAgKChGWF9CWVRFKShhKSkNCi0jZGVmaW5lIEZYX0ZJTEVNT0RFX1dyaXRlCQkwDQotI2RlZmluZSBGWF9GSUxFTU9ERV9SZWFkT25seQkxDQotI2RlZmluZSBGWF9GSUxFTU9ERV9UcnVuY2F0ZQkyDQotRlhfSEZJTEUJRlhfRmlsZV9PcGVuKEZYX0JTVFIgZmlsZU5hbWUsIEZYX0RXT1JEIGR3TW9kZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpOw0KLUZYX0hGSUxFCUZYX0ZpbGVfT3BlbihGWF9XU1RSIGZpbGVOYW1lLCBGWF9EV09SRCBkd01vZGUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsNCi12b2lkCQlGWF9GaWxlX0Nsb3NlKEZYX0hGSUxFIGhGaWxlLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7DQotRlhfRklMRVNJWkUJRlhfRmlsZV9HZXRTaXplKEZYX0hGSUxFIGhGaWxlKTsNCi1GWF9GSUxFU0laRQlGWF9GaWxlX0dldFBvc2l0aW9uKEZYX0hGSUxFIGhGaWxlKTsNCi1GWF9GSUxFU0laRQlGWF9GaWxlX1NldFBvc2l0aW9uKEZYX0hGSUxFIGhGaWxlLCBGWF9GSUxFU0laRSBwb3MpOw0KLXNpemVfdAkJRlhfRmlsZV9SZWFkKEZYX0hGSUxFIGhGaWxlLCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIpOw0KLXNpemVfdAkJRlhfRmlsZV9SZWFkUG9zKEZYX0hGSUxFIGhGaWxlLCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIsIEZYX0ZJTEVTSVpFIHBvcyk7DQotc2l6ZV90CQlGWF9GaWxlX1dyaXRlKEZYX0hGSUxFIGhGaWxlLCBjb25zdCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIpOw0KLXNpemVfdAkJRlhfRmlsZV9Xcml0ZVBvcyhGWF9IRklMRSBoRmlsZSwgY29uc3Qgdm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyLCBGWF9GSUxFU0laRSBwb3MpOw0KLUZYX0JPT0wJCUZYX0ZpbGVfRmx1c2goRlhfSEZJTEUgaEZpbGUpOw0KLUZYX0JPT0wJCUZYX0ZpbGVfVHJ1bmNhdGUoRlhfSEZJTEUgaEZpbGUsIEZYX0ZJTEVTSVpFIHN6RmlsZSk7DQotRlhfQk9PTAkJRlhfRmlsZV9FeGlzdChGWF9CU1RSIGZpbGVOYW1lKTsNCi1GWF9CT09MCQlGWF9GaWxlX0V4aXN0KEZYX1dTVFIgZmlsZU5hbWUpOw0KLUZYX0JPT0wJCUZYX0ZpbGVfRGVsZXRlKEZYX0JTVFIgZmlsZU5hbWUpOw0KLUZYX0JPT0wJCUZYX0ZpbGVfRGVsZXRlKEZYX1dTVFIgZmlsZU5hbWUpOw0KLUZYX0JPT0wJCUZYX0ZpbGVfQ29weShGWF9CU1RSIGZpbGVOYW1lU3JjLCBGWF9CU1RSIGZpbGVOYW1lRHN0KTsNCi1GWF9CT09MCQlGWF9GaWxlX0NvcHkoRlhfV1NUUiBmaWxlTmFtZVNyYywgRlhfV1NUUiBmaWxlTmFtZURzdCk7DQotRlhfQk9PTAkJRlhfRmlsZV9Nb3ZlKEZYX0JTVFIgZmlsZU5hbWVTcmMsIEZYX0JTVFIgZmlsZU5hbWVEc3QpOw0KLUZYX0JPT0wJCUZYX0ZpbGVfTW92ZShGWF9XU1RSIGZpbGVOYW1lU3JjLCBGWF9XU1RSIGZpbGVOYW1lRHN0KTsNCi1jbGFzcyBJRlhfU3RyZWFtV3JpdGUNCi17DQotcHVibGljOg0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCVJlbGVhc2UoKSA9IDA7DQotDQotICAgIHZpcnR1YWwJRlhfQk9PTAkJV3JpdGVCbG9jayhjb25zdCB2b2lkKiBwRGF0YSwgc2l6ZV90IHNpemUpID0gMDsNCi19Ow0KLWNsYXNzIElGWF9GaWxlV3JpdGUgOiBwdWJsaWMgSUZYX1N0cmVhbVdyaXRlDQotew0KLXB1YmxpYzoNCi0NCi0gICAgdmlydHVhbCB2b2lkCQkJUmVsZWFzZSgpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9GSUxFU0laRQkJR2V0U2l6ZSgpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJRmx1c2goKSA9IDA7DQotDQotICAgIHZpcnR1YWwJRlhfQk9PTAkJCVdyaXRlQmxvY2soY29uc3Qgdm9pZCogcERhdGEsIEZYX0ZJTEVTSVpFIG9mZnNldCwgc2l6ZV90IHNpemUpID0gMDsNCi0gICAgdmlydHVhbAlGWF9CT09MCQkJV3JpdGVCbG9jayhjb25zdCB2b2lkKiBwRGF0YSwgc2l6ZV90IHNpemUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBXcml0ZUJsb2NrKHBEYXRhLCBHZXRTaXplKCksIHNpemUpOw0KLSAgICB9DQotfTsNCi1JRlhfRmlsZVdyaXRlKiBGWF9DcmVhdGVGaWxlV3JpdGUoRlhfTFBDU1RSIGZpbGVuYW1lLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7DQotSUZYX0ZpbGVXcml0ZSogRlhfQ3JlYXRlRmlsZVdyaXRlKEZYX0xQQ1dTVFIgZmlsZW5hbWUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsNCi1jbGFzcyBJRlhfU3RyZWFtUmVhZA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHZpcnR1YWwgdm9pZAkJCVJlbGVhc2UoKSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCUlzRU9GKCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0ZJTEVTSVpFCQlHZXRQb3NpdGlvbigpID0gMDsNCi0NCi0gICAgdmlydHVhbCBzaXplX3QJCQlSZWFkQmxvY2sodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkgPSAwOw0KLX07DQotY2xhc3MgSUZYX0ZpbGVSZWFkIDogSUZYX1N0cmVhbVJlYWQNCi17DQotcHVibGljOg0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQlSZWxlYXNlKCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0ZJTEVTSVpFCQlHZXRTaXplKCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQlJc0VPRigpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLQ0KLSAgICB2aXJ0dWFsIEZYX0ZJTEVTSVpFCQlHZXRQb3NpdGlvbigpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCVNldFJhbmdlKEZYX0ZJTEVTSVpFIG9mZnNldCwgRlhfRklMRVNJWkUgc2l6ZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotDQotICAgIHZpcnR1YWwgdm9pZAkJCUNsZWFyUmFuZ2UoKSB7fQ0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQlSZWFkQmxvY2sodm9pZCogYnVmZmVyLCBGWF9GSUxFU0laRSBvZmZzZXQsIHNpemVfdCBzaXplKSA9IDA7DQotDQotICAgIHZpcnR1YWwgc2l6ZV90CQkJUmVhZEJsb2NrKHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotfTsNCi1JRlhfRmlsZVJlYWQqIEZYX0NyZWF0ZUZpbGVSZWFkKEZYX0xQQ1NUUiBmaWxlbmFtZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpOw0KLUlGWF9GaWxlUmVhZCogRlhfQ3JlYXRlRmlsZVJlYWQoRlhfTFBDV1NUUiBmaWxlbmFtZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpOw0KLWNsYXNzIElGWF9GaWxlU3RyZWFtIDogcHVibGljIElGWF9GaWxlUmVhZCwgcHVibGljIElGWF9GaWxlV3JpdGUNCi17DQotcHVibGljOg0KLQ0KLSAgICB2aXJ0dWFsIElGWF9GaWxlU3RyZWFtKgkJUmV0YWluKCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQkJUmVsZWFzZSgpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9GSUxFU0laRQkJCUdldFNpemUoKSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCQlJc0VPRigpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9GSUxFU0laRQkJCUdldFBvc2l0aW9uKCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJUmVhZEJsb2NrKHZvaWQqIGJ1ZmZlciwgRlhfRklMRVNJWkUgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIHNpemVfdAkJCQlSZWFkQmxvY2sodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsCUZYX0JPT0wJCQkJV3JpdGVCbG9jayhjb25zdCB2b2lkKiBidWZmZXIsIEZYX0ZJTEVTSVpFIG9mZnNldCwgc2l6ZV90IHNpemUpID0gMDsNCi0gICAgdmlydHVhbAlGWF9CT09MCQkJCVdyaXRlQmxvY2soY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFdyaXRlQmxvY2soYnVmZmVyLCBHZXRTaXplKCksIHNpemUpOw0KLSAgICB9DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCQlGbHVzaCgpID0gMDsNCi19Ow0KLUlGWF9GaWxlU3RyZWFtKgkJRlhfQ3JlYXRlRmlsZVN0cmVhbShGWF9MUENTVFIgZmlsZW5hbWUsIEZYX0RXT1JEIGR3TW9kZXMsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsNCi1JRlhfRmlsZVN0cmVhbSoJCUZYX0NyZWF0ZUZpbGVTdHJlYW0oRlhfTFBDV1NUUiBmaWxlbmFtZSwgRlhfRFdPUkQgZHdNb2RlcywgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpOw0KLWNsYXNzIElGWF9NZW1vcnlTdHJlYW0gOiBwdWJsaWMgSUZYX0ZpbGVTdHJlYW0NCi17DQotcHVibGljOg0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQlJc0NvbnNlY3V0aXZlKCkgY29uc3QgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQlFc3RpbWF0ZVNpemUoc2l6ZV90IG5Jbml0U2l6ZSwgc2l6ZV90IG5Hcm93U2l6ZSkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0xQQllURQkJR2V0QnVmZmVyKCkgY29uc3QgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQlBdHRhY2hCdWZmZXIoRlhfTFBCWVRFIHBCdWZmZXIsIHNpemVfdCBuU2l6ZSwgRlhfQk9PTCBiVGFrZU92ZXIgPSBGQUxTRSkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQlEZXRhY2hCdWZmZXIoKSA9IDA7DQotfTsNCi1JRlhfTWVtb3J5U3RyZWFtKglGWF9DcmVhdGVNZW1vcnlTdHJlYW0oRlhfTFBCWVRFIHBCdWZmZXIsIHNpemVfdCBuU2l6ZSwgRlhfQk9PTCBiVGFrZU92ZXIgPSBGQUxTRSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpOw0KLUlGWF9NZW1vcnlTdHJlYW0qCUZYX0NyZWF0ZU1lbW9yeVN0cmVhbShGWF9CT09MIGJDb25zZWN1dGl2ZSA9IEZBTFNFLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7DQotY2xhc3MgSUZYX0J1ZmZlclJlYWQgOiBwdWJsaWMgSUZYX1N0cmVhbVJlYWQNCi17DQotcHVibGljOg0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQlSZWxlYXNlKCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQlJc0VPRigpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9GSUxFU0laRQkJR2V0UG9zaXRpb24oKSA9IDA7DQotDQotICAgIHZpcnR1YWwgc2l6ZV90CQkJUmVhZEJsb2NrKHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJUmVhZE5leHRCbG9jayhGWF9CT09MIGJSZXN0YXJ0ID0gRkFMU0UpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9MUENCWVRFCQlHZXRCbG9ja0J1ZmZlcigpID0gMDsNCi0NCi0gICAgdmlydHVhbCBzaXplX3QJCQlHZXRCbG9ja1NpemUoKSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfRklMRVNJWkUJCUdldEJsb2NrT2Zmc2V0KCkgPSAwOw0KLX07DQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlhfU1RSRUFNX0hfCisjZGVmaW5lIF9GWF9TVFJFQU1fSF8KKyNpZm5kZWYgX0ZYX01FTU9SWV9IXworI2luY2x1ZGUgImZ4X21lbW9yeS5oIgorI2VuZGlmCit2b2lkKiBGWF9PcGVuRm9sZGVyKEZYX0xQQ1NUUiBwYXRoKTsKK3ZvaWQqIEZYX09wZW5Gb2xkZXIoRlhfTFBDV1NUUiBwYXRoKTsKK0ZYX0JPT0wgRlhfR2V0TmV4dEZpbGUodm9pZCogaGFuZGxlLCBDRlhfQnl0ZVN0cmluZyYgZmlsZW5hbWUsIEZYX0JPT0wmIGJGb2xkZXIpOworRlhfQk9PTCBGWF9HZXROZXh0RmlsZSh2b2lkKiBoYW5kbGUsIENGWF9XaWRlU3RyaW5nJiBmaWxlbmFtZSwgRlhfQk9PTCYgYkZvbGRlcik7Cit2b2lkIEZYX0Nsb3NlRm9sZGVyKHZvaWQqIGhhbmRsZSk7CitGWF9XQ0hBUiBGWF9HZXRGb2xkZXJTZXBhcmF0b3IoKTsKK0ZYX0RFRklORUhBTkRMRShGWF9IRklMRSkKKyNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfCisjZGVmaW5lIEZYX0ZJTEVTSVpFCQkJRlhfSU5UMzIKKyNlbHNlCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2lmbmRlZiBPX0JJTkFSWQorI2RlZmluZSBPX0JJTkFSWSAJCTAKKyNlbmRpZgorI2lmbmRlZiBPX0xBUkdFRklMRQorI2RlZmluZSBPX0xBUkdFRklMRQkJMAorI2VuZGlmCisjZGVmaW5lIEZYX0ZJTEVTSVpFCQkJb2ZmX3QKKyNlbmRpZgorI2RlZmluZSBGWF9HRVRCWVRFT0ZGU0VUMzIoYSkJMAorI2RlZmluZSBGWF9HRVRCWVRFT0ZGU0VUNDAoYSkJMAorI2RlZmluZSBGWF9HRVRCWVRFT0ZGU0VUNDgoYSkJMAorI2RlZmluZSBGWF9HRVRCWVRFT0ZGU0VUNTYoYSkJMAorI2RlZmluZSBGWF9HRVRCWVRFT0ZGU0VUMjQoYSkgICgoRlhfQllURSkoYT4+MjQpKQorI2RlZmluZSBGWF9HRVRCWVRFT0ZGU0VUMTYoYSkgICgoRlhfQllURSkoYT4+MTYpKQorI2RlZmluZSBGWF9HRVRCWVRFT0ZGU0VUOChhKSAgICgoRlhfQllURSkoYT4+OCkpCisjZGVmaW5lIEZYX0dFVEJZVEVPRkZTRVQwKGEpICAgKChGWF9CWVRFKShhKSkKKyNkZWZpbmUgRlhfRklMRU1PREVfV3JpdGUJCTAKKyNkZWZpbmUgRlhfRklMRU1PREVfUmVhZE9ubHkJMQorI2RlZmluZSBGWF9GSUxFTU9ERV9UcnVuY2F0ZQkyCitGWF9IRklMRQlGWF9GaWxlX09wZW4oRlhfQlNUUiBmaWxlTmFtZSwgRlhfRFdPUkQgZHdNb2RlLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7CitGWF9IRklMRQlGWF9GaWxlX09wZW4oRlhfV1NUUiBmaWxlTmFtZSwgRlhfRFdPUkQgZHdNb2RlLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7Cit2b2lkCQlGWF9GaWxlX0Nsb3NlKEZYX0hGSUxFIGhGaWxlLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7CitGWF9GSUxFU0laRQlGWF9GaWxlX0dldFNpemUoRlhfSEZJTEUgaEZpbGUpOworRlhfRklMRVNJWkUJRlhfRmlsZV9HZXRQb3NpdGlvbihGWF9IRklMRSBoRmlsZSk7CitGWF9GSUxFU0laRQlGWF9GaWxlX1NldFBvc2l0aW9uKEZYX0hGSUxFIGhGaWxlLCBGWF9GSUxFU0laRSBwb3MpOworc2l6ZV90CQlGWF9GaWxlX1JlYWQoRlhfSEZJTEUgaEZpbGUsIHZvaWQqIHBCdWZmZXIsIHNpemVfdCBzekJ1ZmZlcik7CitzaXplX3QJCUZYX0ZpbGVfUmVhZFBvcyhGWF9IRklMRSBoRmlsZSwgdm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyLCBGWF9GSUxFU0laRSBwb3MpOworc2l6ZV90CQlGWF9GaWxlX1dyaXRlKEZYX0hGSUxFIGhGaWxlLCBjb25zdCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIpOworc2l6ZV90CQlGWF9GaWxlX1dyaXRlUG9zKEZYX0hGSUxFIGhGaWxlLCBjb25zdCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIsIEZYX0ZJTEVTSVpFIHBvcyk7CitGWF9CT09MCQlGWF9GaWxlX0ZsdXNoKEZYX0hGSUxFIGhGaWxlKTsKK0ZYX0JPT0wJCUZYX0ZpbGVfVHJ1bmNhdGUoRlhfSEZJTEUgaEZpbGUsIEZYX0ZJTEVTSVpFIHN6RmlsZSk7CitGWF9CT09MCQlGWF9GaWxlX0V4aXN0KEZYX0JTVFIgZmlsZU5hbWUpOworRlhfQk9PTAkJRlhfRmlsZV9FeGlzdChGWF9XU1RSIGZpbGVOYW1lKTsKK0ZYX0JPT0wJCUZYX0ZpbGVfRGVsZXRlKEZYX0JTVFIgZmlsZU5hbWUpOworRlhfQk9PTAkJRlhfRmlsZV9EZWxldGUoRlhfV1NUUiBmaWxlTmFtZSk7CitGWF9CT09MCQlGWF9GaWxlX0NvcHkoRlhfQlNUUiBmaWxlTmFtZVNyYywgRlhfQlNUUiBmaWxlTmFtZURzdCk7CitGWF9CT09MCQlGWF9GaWxlX0NvcHkoRlhfV1NUUiBmaWxlTmFtZVNyYywgRlhfV1NUUiBmaWxlTmFtZURzdCk7CitGWF9CT09MCQlGWF9GaWxlX01vdmUoRlhfQlNUUiBmaWxlTmFtZVNyYywgRlhfQlNUUiBmaWxlTmFtZURzdCk7CitGWF9CT09MCQlGWF9GaWxlX01vdmUoRlhfV1NUUiBmaWxlTmFtZVNyYywgRlhfV1NUUiBmaWxlTmFtZURzdCk7CitjbGFzcyBJRlhfU3RyZWFtV3JpdGUKK3sKK3B1YmxpYzoKKworICAgIHZpcnR1YWwgdm9pZAkJUmVsZWFzZSgpID0gMDsKKworICAgIHZpcnR1YWwJRlhfQk9PTAkJV3JpdGVCbG9jayhjb25zdCB2b2lkKiBwRGF0YSwgc2l6ZV90IHNpemUpID0gMDsKK307CitjbGFzcyBJRlhfRmlsZVdyaXRlIDogcHVibGljIElGWF9TdHJlYW1Xcml0ZQoreworcHVibGljOgorCisgICAgdmlydHVhbCB2b2lkCQkJUmVsZWFzZSgpID0gMDsKKworICAgIHZpcnR1YWwgRlhfRklMRVNJWkUJCUdldFNpemUoKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQlGbHVzaCgpID0gMDsKKworICAgIHZpcnR1YWwJRlhfQk9PTAkJCVdyaXRlQmxvY2soY29uc3Qgdm9pZCogcERhdGEsIEZYX0ZJTEVTSVpFIG9mZnNldCwgc2l6ZV90IHNpemUpID0gMDsKKyAgICB2aXJ0dWFsCUZYX0JPT0wJCQlXcml0ZUJsb2NrKGNvbnN0IHZvaWQqIHBEYXRhLCBzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBXcml0ZUJsb2NrKHBEYXRhLCBHZXRTaXplKCksIHNpemUpOworICAgIH0KK307CitJRlhfRmlsZVdyaXRlKiBGWF9DcmVhdGVGaWxlV3JpdGUoRlhfTFBDU1RSIGZpbGVuYW1lLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7CitJRlhfRmlsZVdyaXRlKiBGWF9DcmVhdGVGaWxlV3JpdGUoRlhfTFBDV1NUUiBmaWxlbmFtZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpOworY2xhc3MgSUZYX1N0cmVhbVJlYWQKK3sKK3B1YmxpYzoKKworICAgIHZpcnR1YWwgdm9pZAkJCVJlbGVhc2UoKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQlJc0VPRigpID0gMDsKKworICAgIHZpcnR1YWwgRlhfRklMRVNJWkUJCUdldFBvc2l0aW9uKCkgPSAwOworCisgICAgdmlydHVhbCBzaXplX3QJCQlSZWFkQmxvY2sodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkgPSAwOworfTsKK2NsYXNzIElGWF9GaWxlUmVhZCA6IElGWF9TdHJlYW1SZWFkCit7CitwdWJsaWM6CisKKyAgICB2aXJ0dWFsIHZvaWQJCQlSZWxlYXNlKCkgPSAwOworCisgICAgdmlydHVhbCBGWF9GSUxFU0laRQkJR2V0U2l6ZSgpID0gMDsKKworICAgIHZpcnR1YWwgRlhfQk9PTAkJCUlzRU9GKCkKKyAgICB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEZYX0ZJTEVTSVpFCQlHZXRQb3NpdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQlTZXRSYW5nZShGWF9GSUxFU0laRSBvZmZzZXQsIEZYX0ZJTEVTSVpFIHNpemUpCisgICAgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkCQkJQ2xlYXJSYW5nZSgpIHt9CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQlSZWFkQmxvY2sodm9pZCogYnVmZmVyLCBGWF9GSUxFU0laRSBvZmZzZXQsIHNpemVfdCBzaXplKSA9IDA7CisKKyAgICB2aXJ0dWFsIHNpemVfdAkJCVJlYWRCbG9jayh2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfTsKK0lGWF9GaWxlUmVhZCogRlhfQ3JlYXRlRmlsZVJlYWQoRlhfTFBDU1RSIGZpbGVuYW1lLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7CitJRlhfRmlsZVJlYWQqIEZYX0NyZWF0ZUZpbGVSZWFkKEZYX0xQQ1dTVFIgZmlsZW5hbWUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsKK2NsYXNzIElGWF9GaWxlU3RyZWFtIDogcHVibGljIElGWF9GaWxlUmVhZCwgcHVibGljIElGWF9GaWxlV3JpdGUKK3sKK3B1YmxpYzoKKworICAgIHZpcnR1YWwgSUZYX0ZpbGVTdHJlYW0qCQlSZXRhaW4oKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQJCQkJUmVsZWFzZSgpID0gMDsKKworICAgIHZpcnR1YWwgRlhfRklMRVNJWkUJCQlHZXRTaXplKCkgPSAwOworCisgICAgdmlydHVhbCBGWF9CT09MCQkJCUlzRU9GKCkgPSAwOworCisgICAgdmlydHVhbCBGWF9GSUxFU0laRQkJCUdldFBvc2l0aW9uKCkgPSAwOworCisgICAgdmlydHVhbCBGWF9CT09MCQkJCVJlYWRCbG9jayh2b2lkKiBidWZmZXIsIEZYX0ZJTEVTSVpFIG9mZnNldCwgc2l6ZV90IHNpemUpID0gMDsKKworICAgIHZpcnR1YWwgc2l6ZV90CQkJCVJlYWRCbG9jayh2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKSA9IDA7CisKKyAgICB2aXJ0dWFsCUZYX0JPT0wJCQkJV3JpdGVCbG9jayhjb25zdCB2b2lkKiBidWZmZXIsIEZYX0ZJTEVTSVpFIG9mZnNldCwgc2l6ZV90IHNpemUpID0gMDsKKyAgICB2aXJ0dWFsCUZYX0JPT0wJCQkJV3JpdGVCbG9jayhjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdyaXRlQmxvY2soYnVmZmVyLCBHZXRTaXplKCksIHNpemUpOworICAgIH0KKworICAgIHZpcnR1YWwgRlhfQk9PTAkJCQlGbHVzaCgpID0gMDsKK307CitJRlhfRmlsZVN0cmVhbSoJCUZYX0NyZWF0ZUZpbGVTdHJlYW0oRlhfTFBDU1RSIGZpbGVuYW1lLCBGWF9EV09SRCBkd01vZGVzLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7CitJRlhfRmlsZVN0cmVhbSoJCUZYX0NyZWF0ZUZpbGVTdHJlYW0oRlhfTFBDV1NUUiBmaWxlbmFtZSwgRlhfRFdPUkQgZHdNb2RlcywgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpOworY2xhc3MgSUZYX01lbW9yeVN0cmVhbSA6IHB1YmxpYyBJRlhfRmlsZVN0cmVhbQoreworcHVibGljOgorCisgICAgdmlydHVhbCBGWF9CT09MCQkJSXNDb25zZWN1dGl2ZSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZAkJCUVzdGltYXRlU2l6ZShzaXplX3QgbkluaXRTaXplLCBzaXplX3Qgbkdyb3dTaXplKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0xQQllURQkJR2V0QnVmZmVyKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkCQkJQXR0YWNoQnVmZmVyKEZYX0xQQllURSBwQnVmZmVyLCBzaXplX3QgblNpemUsIEZYX0JPT0wgYlRha2VPdmVyID0gRkFMU0UpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZAkJCURldGFjaEJ1ZmZlcigpID0gMDsKK307CitJRlhfTWVtb3J5U3RyZWFtKglGWF9DcmVhdGVNZW1vcnlTdHJlYW0oRlhfTFBCWVRFIHBCdWZmZXIsIHNpemVfdCBuU2l6ZSwgRlhfQk9PTCBiVGFrZU92ZXIgPSBGQUxTRSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpOworSUZYX01lbW9yeVN0cmVhbSoJRlhfQ3JlYXRlTWVtb3J5U3RyZWFtKEZYX0JPT0wgYkNvbnNlY3V0aXZlID0gRkFMU0UsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsKK2NsYXNzIElGWF9CdWZmZXJSZWFkIDogcHVibGljIElGWF9TdHJlYW1SZWFkCit7CitwdWJsaWM6CisKKyAgICB2aXJ0dWFsIHZvaWQJCQlSZWxlYXNlKCkgPSAwOworCisgICAgdmlydHVhbCBGWF9CT09MCQkJSXNFT0YoKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0ZJTEVTSVpFCQlHZXRQb3NpdGlvbigpID0gMDsKKworICAgIHZpcnR1YWwgc2l6ZV90CQkJUmVhZEJsb2NrKHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpID0gMDsKKworICAgIHZpcnR1YWwgRlhfQk9PTAkJCVJlYWROZXh0QmxvY2soRlhfQk9PTCBiUmVzdGFydCA9IEZBTFNFKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0xQQ0JZVEUJCUdldEJsb2NrQnVmZmVyKCkgPSAwOworCisgICAgdmlydHVhbCBzaXplX3QJCQlHZXRCbG9ja1NpemUoKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0ZJTEVTSVpFCQlHZXRCbG9ja09mZnNldCgpID0gMDsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvaW5jbHVkZS9meGNydC9meF9zdHJpbmcuaCBiL2NvcmUvaW5jbHVkZS9meGNydC9meF9zdHJpbmcuaAppbmRleCA1NjM5NjRjLi4wOGZiODNjIDEwMDY0NAotLS0gYS9jb3JlL2luY2x1ZGUvZnhjcnQvZnhfc3RyaW5nLmgKKysrIGIvY29yZS9pbmNsdWRlL2Z4Y3J0L2Z4X3N0cmluZy5oCkBAIC0xLDg3MCArMSw4NzAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0ZYX1NUUklOR19IXw0KLSNkZWZpbmUgX0ZYX1NUUklOR19IXw0KLWNsYXNzIENGWF9CeXRlU3RyaW5nQzsNCi1jbGFzcyBDRlhfQnl0ZVN0cmluZzsNCi1jbGFzcyBDRlhfV2lkZVN0cmluZ0M7DQotY2xhc3MgQ0ZYX1dpZGVTdHJpbmc7DQotc3RydWN0IENGWF9DaGFyTWFwOw0KLWNsYXNzIENGWF9CaW5hcnlCdWY7DQotdHlwZWRlZiBpbnQgRlhfU1RSU0laRTsNCi1jbGFzcyBDRlhfQnl0ZVN0cmluZ0w7DQotY2xhc3MgQ0ZYX1dpZGVTdHJpbmdMOw0KLWNsYXNzIENGWF9CeXRlU3RyaW5nQyA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmdDKCkNCi0gICAgew0KLSAgICAgICAgbV9QdHIgPSBOVUxMOw0KLSAgICAgICAgbV9MZW5ndGggPSAwOw0KLSAgICB9DQotDQotICAgIENGWF9CeXRlU3RyaW5nQyhGWF9MUENCWVRFIHB0ciwgRlhfU1RSU0laRSBzaXplKQ0KLSAgICB7DQotICAgICAgICBtX1B0ciA9IHB0cjsNCi0gICAgICAgIG1fTGVuZ3RoID0gc2l6ZTsNCi0gICAgfQ0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZ0MoRlhfTFBDU1RSIHB0cikNCi0gICAgew0KLSAgICAgICAgbV9QdHIgPSAoRlhfTFBDQllURSlwdHI7DQotICAgICAgICBtX0xlbmd0aCA9IHB0ciA/IChGWF9TVFJTSVpFKUZYU1lTX3N0cmxlbihwdHIpIDogMDsNCi0gICAgfQ0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZ0MoRlhfQ0hBUiYgY2gpDQotICAgIHsNCi0gICAgICAgIG1fUHRyID0gKEZYX0xQQ0JZVEUpJmNoOw0KLSAgICAgICAgbV9MZW5ndGggPSAxOw0KLSAgICB9DQotDQotICAgIENGWF9CeXRlU3RyaW5nQyhGWF9MUENTVFIgcHRyLCBGWF9TVFJTSVpFIGxlbikNCi0gICAgew0KLSAgICAgICAgbV9QdHIgPSAoRlhfTFBDQllURSlwdHI7DQotICAgICAgICBpZiAobGVuID09IC0xKSB7DQotICAgICAgICAgICAgbV9MZW5ndGggPSAoRlhfU1RSU0laRSlGWFNZU19zdHJsZW4ocHRyKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbV9MZW5ndGggPSBsZW47DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmdDKGNvbnN0IENGWF9CeXRlU3RyaW5nQyYgc3JjKQ0KLSAgICB7DQotICAgICAgICBtX1B0ciA9IHNyYy5tX1B0cjsNCi0gICAgICAgIG1fTGVuZ3RoID0gc3JjLm1fTGVuZ3RoOw0KLSAgICB9DQotDQotICAgIENGWF9CeXRlU3RyaW5nQyhjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3JjKTsNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmdDJiBvcGVyYXRvciA9IChGWF9MUENTVFIgc3JjKQ0KLSAgICB7DQotICAgICAgICBtX1B0ciA9IChGWF9MUENCWVRFKXNyYzsNCi0gICAgICAgIG1fTGVuZ3RoID0gKEZYX1NUUlNJWkUpRlhTWVNfc3RybGVuKHNyYyk7DQotICAgICAgICByZXR1cm4gKnRoaXM7DQotICAgIH0NCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmdDJiBvcGVyYXRvciA9IChjb25zdCBDRlhfQnl0ZVN0cmluZ0MmIHNyYykNCi0gICAgew0KLSAgICAgICAgbV9QdHIgPSBzcmMubV9QdHI7DQotICAgICAgICBtX0xlbmd0aCA9IHNyYy5tX0xlbmd0aDsNCi0gICAgICAgIHJldHVybiAqdGhpczsNCi0gICAgfQ0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZ0MmIG9wZXJhdG9yID0gKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzcmMpOw0KLQ0KLSAgICBib29sCQkJb3BlcmF0b3IgPT0gKGNvbnN0IENGWF9CeXRlU3RyaW5nQyYgc3RyKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gCXN0ci5tX0xlbmd0aCA9PSBtX0xlbmd0aCAmJiBGWFNZU19tZW1jbXAzMihzdHIubV9QdHIsIG1fUHRyLCBtX0xlbmd0aCkgPT0gMDsNCi0gICAgfQ0KLQ0KLSAgICBib29sCQkJb3BlcmF0b3IgIT0gKGNvbnN0IENGWF9CeXRlU3RyaW5nQyYgc3RyKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gCXN0ci5tX0xlbmd0aCAhPSBtX0xlbmd0aCB8fCBGWFNZU19tZW1jbXAzMihzdHIubV9QdHIsIG1fUHRyLCBtX0xlbmd0aCkgIT0gMDsNCi0gICAgfQ0KLSNkZWZpbmUgRlhCU1RSX0lEKGMxLCBjMiwgYzMsIGM0KSAoKGMxIDw8IDI0KSB8IChjMiA8PCAxNikgfCAoYzMgPDwgOCkgfCAoYzQpKQ0KLQ0KLSAgICBGWF9EV09SRAkJR2V0SUQoRlhfU1RSU0laRSBzdGFydF9wb3MgPSAwKSBjb25zdDsNCi0NCi0gICAgRlhfTFBDQllURQkJR2V0UHRyKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fUHRyOw0KLSAgICB9DQotDQotICAgIEZYX0xQQ1NUUgkJR2V0Q1N0cigpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiAoRlhfTFBDU1RSKW1fUHRyOw0KLSAgICB9DQotDQotICAgIEZYX1NUUlNJWkUJCUdldExlbmd0aCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0xlbmd0aDsNCi0gICAgfQ0KLQ0KLSAgICBib29sCQkJSXNFbXB0eSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0xlbmd0aCA9PSAwOw0KLSAgICB9DQotDQotICAgIG9wZXJhdG9yCQlGWF9MUENCWVRFKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fUHRyOw0KLSAgICB9DQotDQotICAgIEZYX0JZVEUJCQlHZXRBdChGWF9TVFJTSVpFIGluZGV4KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9QdHJbaW5kZXhdOw0KLSAgICB9DQotDQotICAgIENGWF9CeXRlU3RyaW5nQwlNaWQoRlhfU1RSU0laRSBpbmRleCwgRlhfU1RSU0laRSBjb3VudCA9IC0xKSBjb25zdA0KLSAgICB7DQotICAgICAgICBpZiAoaW5kZXggPCAwKSB7DQotICAgICAgICAgICAgaW5kZXggPSAwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGluZGV4ID4gbV9MZW5ndGgpIHsNCi0gICAgICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmdDKCk7DQotICAgICAgICB9DQotICAgICAgICBpZiAoY291bnQgPCAwIHx8IGNvdW50ID4gbV9MZW5ndGggLSBpbmRleCkgew0KLSAgICAgICAgICAgIGNvdW50ID0gbV9MZW5ndGggLSBpbmRleDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0MobV9QdHIgKyBpbmRleCwgY291bnQpOw0KLSAgICB9DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBGWF9MUENCWVRFCQltX1B0cjsNCi0NCi0gICAgRlhfU1RSU0laRQkJbV9MZW5ndGg7DQotcHJpdmF0ZToNCi0NCi0gICAgdm9pZCoJCQlvcGVyYXRvciBuZXcgKHNpemVfdCkgdGhyb3coKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLX07DQotdHlwZWRlZiBjb25zdCBDRlhfQnl0ZVN0cmluZ0MmIEZYX0JTVFI7DQotI2RlZmluZSBGWF9CU1RSQyhzdHIpIENGWF9CeXRlU3RyaW5nQyhzdHIsIHNpemVvZiBzdHItMSkNCi1zdHJ1Y3QgQ0ZYX1N0cmluZ0RhdGEgew0KLQ0KLSAgICBsb25nCQltX25SZWZzOw0KLQ0KLSAgICBGWF9TVFJTSVpFCW1fbkRhdGFMZW5ndGg7DQotDQotICAgIEZYX1NUUlNJWkUJbV9uQWxsb2NMZW5ndGg7DQotDQotICAgIEZYX0NIQVIJCW1fU3RyaW5nWzFdOw0KLX07DQotY2xhc3MgQ0ZYX0J5dGVTdHJpbmcgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENGWF9CeXRlU3RyaW5nKCkNCi0gICAgew0KLSAgICAgICAgbV9wRGF0YSA9IE5VTEw7DQotICAgIH0NCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cik7DQotDQotICAgIENGWF9CeXRlU3RyaW5nKGNoYXIgY2gpOw0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZyhGWF9MUENTVFIgcHRyLCBGWF9TVFJTSVpFIGxlbiA9IC0xKTsNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcoRlhfTFBDQllURSBwdHIsIEZYX1NUUlNJWkUgbGVuKTsNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcoRlhfQlNUUiBic3RyYyk7DQotDQotICAgIENGWF9CeXRlU3RyaW5nKEZYX0JTVFIgYnN0cmMxLCBGWF9CU1RSIGJzdHJjMik7DQotDQotICAgIH5DRlhfQnl0ZVN0cmluZygpOw0KLQ0KLSAgICBzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJRnJvbVVuaWNvZGUoRlhfTFBDV1NUUiBwdHIsIEZYX1NUUlNJWkUgbGVuID0gLTEpOw0KLQ0KLSAgICBzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJRnJvbVVuaWNvZGUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cik7DQotDQotICAgIG9wZXJhdG9yCQkJCUZYX0xQQ1NUUigpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BEYXRhID8gbV9wRGF0YS0+bV9TdHJpbmcgOiAiIjsNCi0gICAgfQ0KLQ0KLSAgICBvcGVyYXRvcgkJCQlGWF9MUENCWVRFKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcERhdGEgPyAoRlhfTFBDQllURSltX3BEYXRhLT5tX1N0cmluZyA6IE5VTEw7DQotICAgIH0NCi0NCi0gICAgRlhfU1RSU0laRQkJCQlHZXRMZW5ndGgoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRGF0YSA/IG1fcERhdGEtPm1fbkRhdGFMZW5ndGggOiAwOw0KLSAgICB9DQotDQotICAgIGJvb2wJCQkJCUlzRW1wdHkoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gIUdldExlbmd0aCgpOw0KLSAgICB9DQotDQotICAgIGludAkJCQkJCUNvbXBhcmUoRlhfQlNUUiBzdHIpIGNvbnN0Ow0KLQ0KLQ0KLSAgICBib29sCQkJCQlFcXVhbChGWF9CU1RSIHN0cikgY29uc3Q7DQotDQotDQotICAgIGJvb2wJCQkJCUVxdWFsTm9DYXNlKEZYX0JTVFIgc3RyKSBjb25zdDsNCi0NCi0gICAgYm9vbAkJCQkJb3BlcmF0b3IgPT0gKEZYX0xQQ1NUUiBzdHIpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBFcXVhbChzdHIpOw0KLSAgICB9DQotDQotICAgIGJvb2wJCQkJCW9wZXJhdG9yID09IChGWF9CU1RSIHN0cikgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEVxdWFsKHN0cik7DQotICAgIH0NCi0NCi0gICAgYm9vbAkJCQkJb3BlcmF0b3IgPT0gKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIpIGNvbnN0Ow0KLQ0KLSAgICBib29sCQkJCQlvcGVyYXRvciAhPSAoRlhfTFBDU1RSIHN0cikgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuICFFcXVhbChzdHIpOw0KLSAgICB9DQotDQotICAgIGJvb2wJCQkJCW9wZXJhdG9yICE9IChGWF9CU1RSIHN0cikgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuICFFcXVhbChzdHIpOw0KLSAgICB9DQotDQotICAgIGJvb2wJCQkJCW9wZXJhdG9yICE9IChjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0oc3RyKTsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJCQlFbXB0eSgpOw0KLQ0KLSAgICBjb25zdCBDRlhfQnl0ZVN0cmluZyYJb3BlcmF0b3IgPSAoRlhfTFBDU1RSIHN0cik7DQotDQotICAgIGNvbnN0IENGWF9CeXRlU3RyaW5nJglvcGVyYXRvciA9IChGWF9CU1RSIGJzdHJjKTsNCi0NCi0gICAgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmCW9wZXJhdG9yID0gKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHJpbmdTcmMpOw0KLQ0KLSAgICBjb25zdCBDRlhfQnl0ZVN0cmluZyYJb3BlcmF0b3IgPSAoY29uc3QgQ0ZYX0JpbmFyeUJ1ZiYgYnVmKTsNCi0NCi0gICAgdm9pZAkJCQkJTG9hZChGWF9MUENCWVRFIHN0ciwgRlhfU1RSU0laRSBsZW4pOw0KLQ0KLSAgICBjb25zdCBDRlhfQnl0ZVN0cmluZyYJb3BlcmF0b3IgKz0gKEZYX0NIQVIgY2gpOw0KLQ0KLSAgICBjb25zdCBDRlhfQnl0ZVN0cmluZyYJb3BlcmF0b3IgKz0gKEZYX0xQQ1NUUiBzdHIpOw0KLQ0KLSAgICBjb25zdCBDRlhfQnl0ZVN0cmluZyYJb3BlcmF0b3IgKz0gKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIpOw0KLQ0KLSAgICBjb25zdCBDRlhfQnl0ZVN0cmluZyYJb3BlcmF0b3IgKz0gKEZYX0JTVFIgYnN0cmMpOw0KLQ0KLSAgICBGWF9CWVRFCQkJCQlHZXRBdChGWF9TVFJTSVpFIG5JbmRleCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcERhdGEgPyBtX3BEYXRhLT5tX1N0cmluZ1tuSW5kZXhdIDogMDsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CWVRFCQkJCQlvcGVyYXRvcltdKEZYX1NUUlNJWkUgbkluZGV4KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRGF0YSA/IG1fcERhdGEtPm1fU3RyaW5nW25JbmRleF0gOiAwOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJCVNldEF0KEZYX1NUUlNJWkUgbkluZGV4LCBGWF9DSEFSIGNoKTsNCi0NCi0gICAgRlhfU1RSU0laRQkJCQlJbnNlcnQoRlhfU1RSU0laRSBpbmRleCwgRlhfQ0hBUiBjaCk7DQotDQotICAgIEZYX1NUUlNJWkUJCQkJRGVsZXRlKEZYX1NUUlNJWkUgaW5kZXgsIEZYX1NUUlNJWkUgY291bnQgPSAxKTsNCi0NCi0NCi0gICAgdm9pZAkJCQkJRm9ybWF0KEZYX0xQQ1NUUiBscHN6Rm9ybWF0LCAuLi4gKTsNCi0NCi0gICAgdm9pZAkJCQkJRm9ybWF0VihGWF9MUENTVFIgbHBzekZvcm1hdCwgdmFfbGlzdCBhcmdMaXN0KTsNCi0NCi0NCi0gICAgdm9pZAkJCQkJUmVzZXJ2ZShGWF9TVFJTSVpFIGxlbik7DQotDQotICAgIEZYX0xQU1RSCQkJCUdldEJ1ZmZlcihGWF9TVFJTSVpFIGxlbik7DQotDQotICAgIEZYX0xQU1RSCQkJCUxvY2tCdWZmZXIoKTsNCi0NCi0gICAgdm9pZAkJCQkJUmVsZWFzZUJ1ZmZlcihGWF9TVFJTSVpFIGxlbiA9IC0xKTsNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcJCQlNaWQoRlhfU1RSU0laRSBmaXJzdCkgY29uc3Q7DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQkJTWlkKEZYX1NUUlNJWkUgZmlyc3QsIEZYX1NUUlNJWkUgY291bnQpIGNvbnN0Ow0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZwkJCUxlZnQoRlhfU1RSU0laRSBjb3VudCkgY29uc3Q7DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQkJUmlnaHQoRlhfU1RSU0laRSBjb3VudCkgY29uc3Q7DQotDQotICAgIEZYX1NUUlNJWkUJCQkJRmluZChGWF9CU1RSIGxwc3pTdWIsIEZYX1NUUlNJWkUgc3RhcnQgPSAwKSBjb25zdDsNCi0NCi0gICAgRlhfU1RSU0laRQkJCQlGaW5kKEZYX0NIQVIgY2gsIEZYX1NUUlNJWkUgc3RhcnQgPSAwKSBjb25zdDsNCi0NCi0gICAgRlhfU1RSU0laRQkJCQlSZXZlcnNlRmluZChGWF9DSEFSIGNoKSBjb25zdDsNCi0NCi0gICAgdm9pZAkJCQkJTWFrZUxvd2VyKCk7DQotDQotICAgIHZvaWQJCQkJCU1ha2VVcHBlcigpOw0KLQ0KLSAgICB2b2lkCQkJCQlUcmltUmlnaHQoKTsNCi0NCi0gICAgdm9pZAkJCQkJVHJpbVJpZ2h0KEZYX0NIQVIgY2hUYXJnZXQpOw0KLQ0KLSAgICB2b2lkCQkJCQlUcmltUmlnaHQoRlhfQlNUUiBscHN6VGFyZ2V0cyk7DQotDQotICAgIHZvaWQJCQkJCVRyaW1MZWZ0KCk7DQotDQotICAgIHZvaWQJCQkJCVRyaW1MZWZ0KEZYX0NIQVIgY2hUYXJnZXQpOw0KLQ0KLSAgICB2b2lkCQkJCQlUcmltTGVmdChGWF9CU1RSIGxwc3pUYXJnZXRzKTsNCi0NCi0gICAgRlhfU1RSU0laRQkJCQlSZXBsYWNlKEZYX0JTVFIgbHBzek9sZCwgRlhfQlNUUiBscHN6TmV3KTsNCi0NCi0gICAgRlhfU1RSU0laRQkJCQlSZW1vdmUoRlhfQ0hBUiBjaCk7DQotDQotICAgIENGWF9XaWRlU3RyaW5nCQkJVVRGOERlY29kZSgpIGNvbnN0Ow0KLQ0KLSAgICB2b2lkCQkJCQlDb252ZXJ0RnJvbShjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyLCBDRlhfQ2hhck1hcCogcENoYXJNYXAgPSBOVUxMKTsNCi0NCi0gICAgRlhfRFdPUkQJCQkJR2V0SUQoRlhfU1RSU0laRSBzdGFydF9wb3MgPSAwKSBjb25zdDsNCi0NCi0gICAgc3RhdGljIENGWF9CeXRlU3RyaW5nCUxvYWRGcm9tRmlsZShGWF9CU1RSIGZpbGVfcGF0aCk7DQotI2RlZmluZSBGWEZPUk1BVF9TSUdORUQJCQkxDQotI2RlZmluZSBGWEZPUk1BVF9IRVgJCQkyDQotI2RlZmluZSBGWEZPUk1BVF9DQVBJVEFMCQk0DQotDQotICAgIHN0YXRpYyBDRlhfQnl0ZVN0cmluZwlGb3JtYXRJbnRlZ2VyKGludCBpLCBGWF9EV09SRCBmbGFncyA9IDApOw0KLQ0KLSAgICBzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJRm9ybWF0RmxvYXQoRlhfRkxPQVQgZiwgaW50IHByZWNpc2lvbiA9IDApOw0KLXByb3RlY3RlZDoNCi0NCi0gICAgc3RydWN0IENGWF9TdHJpbmdEYXRhKgltX3BEYXRhOw0KLSAgICB2b2lkCQkJCQlBbGxvY0NvcHkoQ0ZYX0J5dGVTdHJpbmcmIGRlc3QsIEZYX1NUUlNJWkUgbkNvcHlMZW4sIEZYX1NUUlNJWkUgbkNvcHlJbmRleCwgRlhfU1RSU0laRSBuRXh0cmFMZW4pIGNvbnN0Ow0KLSAgICB2b2lkCQkJCQlBc3NpZ25Db3B5KEZYX1NUUlNJWkUgblNyY0xlbiwgRlhfTFBDU1RSIGxwc3pTcmNEYXRhKTsNCi0gICAgdm9pZAkJCQkJQ29uY2F0Q29weShGWF9TVFJTSVpFIG5TcmMxTGVuLCBGWF9MUENTVFIgbHBzelNyYzFEYXRhLCBGWF9TVFJTSVpFIG5TcmMyTGVuLCBGWF9MUENTVFIgbHBzelNyYzJEYXRhKTsNCi0gICAgdm9pZAkJCQkJQ29uY2F0SW5QbGFjZShGWF9TVFJTSVpFIG5TcmNMZW4sIEZYX0xQQ1NUUiBscHN6U3JjRGF0YSk7DQotICAgIHZvaWQJCQkJCUNvcHlCZWZvcmVXcml0ZSgpOw0KLSAgICB2b2lkCQkJCQlBbGxvY0JlZm9yZVdyaXRlKEZYX1NUUlNJWkUgbkxlbik7DQotfTsNCi1pbmxpbmUgQ0ZYX0J5dGVTdHJpbmdDOjpDRlhfQnl0ZVN0cmluZ0MoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNyYykNCi17DQotICAgIG1fUHRyID0gKEZYX0xQQ0JZVEUpc3JjOw0KLSAgICBtX0xlbmd0aCA9IHNyYy5HZXRMZW5ndGgoKTsNCi19DQotaW5saW5lIENGWF9CeXRlU3RyaW5nQyYgQ0ZYX0J5dGVTdHJpbmdDOjpvcGVyYXRvciA9IChjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3JjKQ0KLXsNCi0gICAgbV9QdHIgPSAoRlhfTFBDQllURSlzcmM7DQotICAgIG1fTGVuZ3RoID0gc3JjLkdldExlbmd0aCgpOw0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLQ0KLWlubGluZSBDRlhfQnl0ZVN0cmluZyBvcGVyYXRvciArIChGWF9CU1RSIHN0cjEsIEZYX0JTVFIgc3RyMikNCi17DQotICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZyhzdHIxLCBzdHIyKTsNCi19DQotaW5saW5lIENGWF9CeXRlU3RyaW5nIG9wZXJhdG9yICsgKEZYX0JTVFIgc3RyMSwgRlhfTFBDU1RSIHN0cjIpDQotew0KLSAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoc3RyMSwgc3RyMik7DQotfQ0KLWlubGluZSBDRlhfQnl0ZVN0cmluZyBvcGVyYXRvciArIChGWF9MUENTVFIgc3RyMSwgRlhfQlNUUiBzdHIyKQ0KLXsNCi0gICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKHN0cjEsIHN0cjIpOw0KLX0NCi1pbmxpbmUgQ0ZYX0J5dGVTdHJpbmcgb3BlcmF0b3IgKyAoRlhfQlNUUiBzdHIxLCBGWF9DSEFSIGNoKQ0KLXsNCi0gICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKHN0cjEsIENGWF9CeXRlU3RyaW5nQyhjaCkpOw0KLX0NCi1pbmxpbmUgQ0ZYX0J5dGVTdHJpbmcgb3BlcmF0b3IgKyAoRlhfQ0hBUiBjaCwgRlhfQlNUUiBzdHIyKQ0KLXsNCi0gICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKGNoLCBzdHIyKTsNCi19DQotaW5saW5lIENGWF9CeXRlU3RyaW5nIG9wZXJhdG9yICsgKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIxLCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyMikNCi17DQotICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZyhzdHIxLCBzdHIyKTsNCi19DQotaW5saW5lIENGWF9CeXRlU3RyaW5nIG9wZXJhdG9yICsgKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIxLCBGWF9DSEFSIGNoKQ0KLXsNCi0gICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKHN0cjEsIENGWF9CeXRlU3RyaW5nQyhjaCkpOw0KLX0NCi1pbmxpbmUgQ0ZYX0J5dGVTdHJpbmcgb3BlcmF0b3IgKyAoRlhfQ0hBUiBjaCwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cjIpDQotew0KLSAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoY2gsIHN0cjIpOw0KLX0NCi1pbmxpbmUgQ0ZYX0J5dGVTdHJpbmcgb3BlcmF0b3IgKyAoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cjEsIEZYX0xQQ1NUUiBzdHIyKQ0KLXsNCi0gICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKHN0cjEsIHN0cjIpOw0KLX0NCi1pbmxpbmUgQ0ZYX0J5dGVTdHJpbmcgb3BlcmF0b3IgKyAoRlhfTFBDU1RSIHN0cjEsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIyKQ0KLXsNCi0gICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKHN0cjEsIHN0cjIpOw0KLX0NCi1pbmxpbmUgQ0ZYX0J5dGVTdHJpbmcgb3BlcmF0b3IgKyAoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cjEsIEZYX0JTVFIgc3RyMikNCi17DQotICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZyhzdHIxLCBzdHIyKTsNCi19DQotaW5saW5lIENGWF9CeXRlU3RyaW5nIG9wZXJhdG9yICsgKEZYX0JTVFIgc3RyMSwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cjIpDQotew0KLSAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoc3RyMSwgc3RyMik7DQotfQ0KLWNsYXNzIENGWF9TdHJpbmdCdWZCYXNlIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDRlhfU3RyaW5nQnVmQmFzZShGWF9TVFJTSVpFIGxpbWl0KQ0KLSAgICB7DQotICAgICAgICBtX1NpemUgPSAwOw0KLSAgICAgICAgbV9MaW1pdCA9IGxpbWl0Ow0KLSAgICB9DQotDQotICAgIEZYX0NIQVIqCUdldFB0cigpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiAoRlhfQ0hBUiopKHRoaXMgKyAxKTsNCi0gICAgfQ0KLQ0KLSAgICBGWF9TVFJTSVpFCUdldFNpemUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9TaXplOw0KLSAgICB9DQotDQotICAgIHZvaWQJCUVtcHR5KCkNCi0gICAgew0KLSAgICAgICAgbV9TaXplID0gMDsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQlDb3B5KEZYX0JTVFIgc3RyKTsNCi0NCi0gICAgdm9pZAkJQXBwZW5kKEZYX0JTVFIgc3RyKTsNCi0NCi0gICAgdm9pZAkJQXBwZW5kKGludCBpLCBGWF9EV09SRCBmbGFncyA9IDApOw0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZ0MJCUdldFN0cmluZ0MoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmdDKChGWF9DSEFSKikodGhpcyArIDEpLCBtX1NpemUpOw0KLSAgICB9DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQlHZXRTdHJpbmcoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKEZYX0NIQVIqKSh0aGlzICsgMSksIG1fU2l6ZSk7DQotICAgIH0NCi1wcm90ZWN0ZWQ6DQotDQotICAgIEZYX1NUUlNJWkUJbV9MaW1pdDsNCi0NCi0gICAgRlhfU1RSU0laRQltX1NpemU7DQotfTsNCi10ZW1wbGF0ZTxGWF9TVFJTSVpFIGxpbWl0Pg0KLWNsYXNzIENGWF9TdHJpbmdCdWZUZW1wbGF0ZSA6IHB1YmxpYyBDRlhfU3RyaW5nQnVmQmFzZQ0KLXsNCi1wdWJsaWM6DQotDQotICAgIENGWF9TdHJpbmdCdWZUZW1wbGF0ZSgpIDogQ0ZYX1N0cmluZ0J1ZkJhc2UobGltaXQpIHt9DQotDQotICAgIEZYX0NIQVIJCW1fQnVmZmVyW2xpbWl0XTsNCi19Ow0KLXR5cGVkZWYgQ0ZYX1N0cmluZ0J1ZlRlbXBsYXRlPDI1Nj4gQ0ZYX1N0cmluZ0J1ZjI1NjsNCi1jbGFzcyBDRlhfV2lkZVN0cmluZ0MgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENGWF9XaWRlU3RyaW5nQygpDQotICAgIHsNCi0gICAgICAgIG1fUHRyID0gTlVMTDsNCi0gICAgICAgIG1fTGVuZ3RoID0gMDsNCi0gICAgfQ0KLQ0KLSAgICBDRlhfV2lkZVN0cmluZ0MoRlhfTFBDV1NUUiBwdHIpDQotICAgIHsNCi0gICAgICAgIG1fUHRyID0gcHRyOw0KLSAgICAgICAgbV9MZW5ndGggPSBwdHIgPyAoRlhfU1RSU0laRSlGWFNZU193Y3NsZW4ocHRyKSA6IDA7DQotICAgIH0NCi0NCi0gICAgQ0ZYX1dpZGVTdHJpbmdDKEZYX1dDSEFSJiBjaCkNCi0gICAgew0KLSAgICAgICAgbV9QdHIgPSAmY2g7DQotICAgICAgICBtX0xlbmd0aCA9IDE7DQotICAgIH0NCi0NCi0gICAgQ0ZYX1dpZGVTdHJpbmdDKEZYX0xQQ1dTVFIgcHRyLCBGWF9TVFJTSVpFIGxlbikNCi0gICAgew0KLSAgICAgICAgbV9QdHIgPSBwdHI7DQotICAgICAgICBpZiAobGVuID09IC0xKSB7DQotICAgICAgICAgICAgbV9MZW5ndGggPSAoRlhfU1RSU0laRSlGWFNZU193Y3NsZW4ocHRyKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbV9MZW5ndGggPSBsZW47DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgQ0ZYX1dpZGVTdHJpbmdDKGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgc3JjKQ0KLSAgICB7DQotICAgICAgICBtX1B0ciA9IHNyYy5tX1B0cjsNCi0gICAgICAgIG1fTGVuZ3RoID0gc3JjLm1fTGVuZ3RoOw0KLSAgICB9DQotDQotICAgIENGWF9XaWRlU3RyaW5nQyhjb25zdCBDRlhfV2lkZVN0cmluZyYgc3JjKTsNCi0NCi0gICAgQ0ZYX1dpZGVTdHJpbmdDJiBvcGVyYXRvciA9IChGWF9MUENXU1RSIHNyYykNCi0gICAgew0KLSAgICAgICAgbV9QdHIgPSBzcmM7DQotICAgICAgICBtX0xlbmd0aCA9IChGWF9TVFJTSVpFKUZYU1lTX3djc2xlbihzcmMpOw0KLSAgICAgICAgcmV0dXJuICp0aGlzOw0KLSAgICB9DQotDQotICAgIENGWF9XaWRlU3RyaW5nQyYgb3BlcmF0b3IgPSAoY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzcmMpDQotICAgIHsNCi0gICAgICAgIG1fUHRyID0gc3JjLm1fUHRyOw0KLSAgICAgICAgbV9MZW5ndGggPSBzcmMubV9MZW5ndGg7DQotICAgICAgICByZXR1cm4gKnRoaXM7DQotICAgIH0NCi0NCi0gICAgQ0ZYX1dpZGVTdHJpbmdDJiBvcGVyYXRvciA9IChjb25zdCBDRlhfV2lkZVN0cmluZyYgc3JjKTsNCi0NCi0gICAgYm9vbAkJCW9wZXJhdG9yID09IChjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHN0cikgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIAlzdHIubV9MZW5ndGggPT0gbV9MZW5ndGggJiYgRlhTWVNfbWVtY21wMzIoc3RyLm1fUHRyLCBtX1B0ciwgbV9MZW5ndGggKiBzaXplb2YoRlhfV0NIQVIpKSA9PSAwOw0KLSAgICB9DQotDQotICAgIGJvb2wJCQlvcGVyYXRvciAhPSAoY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzdHIpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiAJc3RyLm1fTGVuZ3RoICE9IG1fTGVuZ3RoIHx8IEZYU1lTX21lbWNtcDMyKHN0ci5tX1B0ciwgbV9QdHIsIG1fTGVuZ3RoICogc2l6ZW9mKEZYX1dDSEFSKSkgIT0gMDsNCi0gICAgfQ0KLQ0KLSAgICBGWF9MUENXU1RSCQlHZXRQdHIoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9QdHI7DQotICAgIH0NCi0NCi0gICAgRlhfU1RSU0laRQkJR2V0TGVuZ3RoKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fTGVuZ3RoOw0KLSAgICB9DQotDQotICAgIGJvb2wJCQlJc0VtcHR5KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fTGVuZ3RoID09IDA7DQotICAgIH0NCi0NCi0gICAgRlhfV0NIQVIJCUdldEF0KEZYX1NUUlNJWkUgaW5kZXgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX1B0cltpbmRleF07DQotICAgIH0NCi0NCi0gICAgQ0ZYX1dpZGVTdHJpbmdDCUxlZnQoRlhfU1RSU0laRSBjb3VudCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgaWYgKGNvdW50IDwgMSkgew0KLSAgICAgICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZ0MoKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChjb3VudCA+IG1fTGVuZ3RoKSB7DQotICAgICAgICAgICAgY291bnQgPSBtX0xlbmd0aDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZ0MobV9QdHIsIGNvdW50KTsNCi0gICAgfQ0KLQ0KLSAgICBDRlhfV2lkZVN0cmluZ0MJTWlkKEZYX1NUUlNJWkUgaW5kZXgsIEZYX1NUUlNJWkUgY291bnQgPSAtMSkgY29uc3QNCi0gICAgew0KLSAgICAgICAgaWYgKGluZGV4IDwgMCkgew0KLSAgICAgICAgICAgIGluZGV4ID0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChpbmRleCA+IG1fTGVuZ3RoKSB7DQotICAgICAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nQygpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGNvdW50IDwgMCB8fCBjb3VudCA+IG1fTGVuZ3RoIC0gaW5kZXgpIHsNCi0gICAgICAgICAgICBjb3VudCA9IG1fTGVuZ3RoIC0gaW5kZXg7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmdDKG1fUHRyICsgaW5kZXgsIGNvdW50KTsNCi0gICAgfQ0KLQ0KLSAgICBDRlhfV2lkZVN0cmluZ0MJUmlnaHQoRlhfU1RSU0laRSBjb3VudCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgaWYgKGNvdW50IDwgMSkgew0KLSAgICAgICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZ0MoKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChjb3VudCA+IG1fTGVuZ3RoKSB7DQotICAgICAgICAgICAgY291bnQgPSBtX0xlbmd0aDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZ0MobV9QdHIgKyBtX0xlbmd0aCAtIGNvdW50LCBjb3VudCk7DQotICAgIH0NCi1wcm90ZWN0ZWQ6DQotDQotICAgIEZYX0xQQ1dTVFIJCW1fUHRyOw0KLQ0KLSAgICBGWF9TVFJTSVpFCQltX0xlbmd0aDsNCi1wcml2YXRlOg0KLQ0KLSAgICB2b2lkKgkJCW9wZXJhdG9yIG5ldyAoc2l6ZV90KSB0aHJvdygpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotfTsNCi10eXBlZGVmIGNvbnN0IENGWF9XaWRlU3RyaW5nQyYJRlhfV1NUUjsNCi0jZGVmaW5lIEZYX1dTVFJDKHdzdHIpIENGWF9XaWRlU3RyaW5nQygoRlhfTFBDV1NUUil3c3RyLCBzaXplb2Yod3N0cikgLyBzaXplb2YoRlhfV0NIQVIpIC0gMSkNCi1zdHJ1Y3QgQ0ZYX1N0cmluZ0RhdGFXIHsNCi0NCi0gICAgbG9uZwkJbV9uUmVmczsNCi0NCi0gICAgRlhfU1RSU0laRQltX25EYXRhTGVuZ3RoOw0KLQ0KLSAgICBGWF9TVFJTSVpFCW1fbkFsbG9jTGVuZ3RoOw0KLQ0KLSAgICBGWF9XQ0hBUgltX1N0cmluZ1sxXTsNCi19Ow0KLWNsYXNzIENGWF9XaWRlU3RyaW5nIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDRlhfV2lkZVN0cmluZygpDQotICAgIHsNCi0gICAgICAgIG1fcERhdGEgPSBOVUxMOw0KLSAgICB9DQotDQotICAgIENGWF9XaWRlU3RyaW5nKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHIpOw0KLQ0KLSAgICBDRlhfV2lkZVN0cmluZyhGWF9MUENXU1RSIHB0ciwgRlhfU1RSU0laRSBsZW4gPSAtMSkNCi0gICAgew0KLSAgICAgICAgSW5pdFN0cihwdHIsIGxlbik7DQotICAgIH0NCi0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcoRlhfV0NIQVIgY2gpOw0KLQ0KLSAgICBDRlhfV2lkZVN0cmluZyhjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHN0cik7DQotDQotICAgIENGWF9XaWRlU3RyaW5nKGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgc3RyMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzdHIyKTsNCi0NCi0gICAgfkNGWF9XaWRlU3RyaW5nKCk7DQotDQotICAgIHN0YXRpYyBDRlhfV2lkZVN0cmluZwlGcm9tTG9jYWwoY29uc3QgY2hhciogc3RyLCBGWF9TVFJTSVpFIGxlbiA9IC0xKTsNCi0NCi0gICAgc3RhdGljIENGWF9XaWRlU3RyaW5nCUZyb21VVEY4KGNvbnN0IGNoYXIqIHN0ciwgRlhfU1RSU0laRSBsZW4gPSAtMSk7DQotDQotICAgIHN0YXRpYyBDRlhfV2lkZVN0cmluZwlGcm9tVVRGMTZMRShjb25zdCB1bnNpZ25lZCBzaG9ydCogc3RyLCBGWF9TVFJTSVpFIGxlbiA9IC0xKTsNCi0NCi0gICAgb3BlcmF0b3IgRlhfTFBDV1NUUigpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BEYXRhID8gbV9wRGF0YS0+bV9TdHJpbmcgOiAoRlhfV0NIQVIqKUwiIjsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJCQlFbXB0eSgpOw0KLQ0KLQ0KLSAgICBGWF9CT09MCQkJCQlJc0VtcHR5KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuICFHZXRMZW5ndGgoKTsNCi0gICAgfQ0KLQ0KLSAgICBGWF9TVFJTSVpFCQkJCUdldExlbmd0aCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BEYXRhID8gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCA6IDA7DQotICAgIH0NCi0NCi0gICAgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmCW9wZXJhdG9yID0gKEZYX0xQQ1dTVFIgc3RyKTsNCi0NCi0gICAgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmCW9wZXJhdG9yID0oY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cmluZ1NyYyk7DQotDQotICAgIGNvbnN0IENGWF9XaWRlU3RyaW5nJglvcGVyYXRvciA9KGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgc3RyaW5nU3JjKTsNCi0NCi0gICAgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmCW9wZXJhdG9yICs9IChGWF9MUENXU1RSIHN0cik7DQotDQotICAgIGNvbnN0IENGWF9XaWRlU3RyaW5nJglvcGVyYXRvciArPSAoRlhfV0NIQVIgY2gpOw0KLQ0KLSAgICBjb25zdCBDRlhfV2lkZVN0cmluZyYJb3BlcmF0b3IgKz0gKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHIpOw0KLQ0KLSAgICBjb25zdCBDRlhfV2lkZVN0cmluZyYJb3BlcmF0b3IgKz0gKGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgc3RyKTsNCi0NCi0gICAgRlhfV0NIQVIJCQkJR2V0QXQoRlhfU1RSU0laRSBuSW5kZXgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BEYXRhID8gbV9wRGF0YS0+bV9TdHJpbmdbbkluZGV4XSA6IDA7DQotICAgIH0NCi0NCi0gICAgRlhfV0NIQVIJCQkJb3BlcmF0b3JbXShGWF9TVFJTSVpFIG5JbmRleCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcERhdGEgPyBtX3BEYXRhLT5tX1N0cmluZ1tuSW5kZXhdIDogMDsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJCQlTZXRBdChGWF9TVFJTSVpFIG5JbmRleCwgRlhfV0NIQVIgY2gpOw0KLQ0KLSAgICBpbnQJCQkJCQlDb21wYXJlKEZYX0xQQ1dTVFIgc3RyKSBjb25zdDsNCi0NCi0gICAgaW50CQkJCQkJQ29tcGFyZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyKSBjb25zdDsNCi0NCi0gICAgaW50CQkJCQkJQ29tcGFyZU5vQ2FzZShGWF9MUENXU1RSIHN0cikgY29uc3Q7DQotDQotICAgIGJvb2wJCQkJCUVxdWFsKGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgc3RyKSBjb25zdDsNCi0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcJCQlNaWQoRlhfU1RSU0laRSBmaXJzdCkgY29uc3Q7DQotDQotICAgIENGWF9XaWRlU3RyaW5nCQkJTWlkKEZYX1NUUlNJWkUgZmlyc3QsIEZYX1NUUlNJWkUgY291bnQpIGNvbnN0Ow0KLQ0KLSAgICBDRlhfV2lkZVN0cmluZwkJCUxlZnQoRlhfU1RSU0laRSBjb3VudCkgY29uc3Q7DQotDQotICAgIENGWF9XaWRlU3RyaW5nCQkJUmlnaHQoRlhfU1RSU0laRSBjb3VudCkgY29uc3Q7DQotDQotICAgIEZYX1NUUlNJWkUJCQkJSW5zZXJ0KEZYX1NUUlNJWkUgaW5kZXgsIEZYX1dDSEFSIGNoKTsNCi0NCi0gICAgRlhfU1RSU0laRQkJCQlEZWxldGUoRlhfU1RSU0laRSBpbmRleCwgRlhfU1RSU0laRSBjb3VudCA9IDEpOw0KLQ0KLSAgICB2b2lkCQkJCQlGb3JtYXQoRlhfTFBDV1NUUiBscHN6Rm9ybWF0LCAuLi4gKTsNCi0NCi0gICAgdm9pZAkJCQkJRm9ybWF0VihGWF9MUENXU1RSIGxwc3pGb3JtYXQsIHZhX2xpc3QgYXJnTGlzdCk7DQotDQotICAgIHZvaWQJCQkJCU1ha2VMb3dlcigpOw0KLQ0KLSAgICB2b2lkCQkJCQlNYWtlVXBwZXIoKTsNCi0NCi0gICAgdm9pZAkJCQkJVHJpbVJpZ2h0KCk7DQotDQotICAgIHZvaWQJCQkJCVRyaW1SaWdodChGWF9XQ0hBUiBjaFRhcmdldCk7DQotDQotICAgIHZvaWQJCQkJCVRyaW1SaWdodChGWF9MUENXU1RSIGxwc3pUYXJnZXRzKTsNCi0NCi0gICAgdm9pZAkJCQkJVHJpbUxlZnQoKTsNCi0NCi0gICAgdm9pZAkJCQkJVHJpbUxlZnQoRlhfV0NIQVIgY2hUYXJnZXQpOw0KLQ0KLSAgICB2b2lkCQkJCQlUcmltTGVmdChGWF9MUENXU1RSIGxwc3pUYXJnZXRzKTsNCi0NCi0gICAgdm9pZAkJCQkJUmVzZXJ2ZShGWF9TVFJTSVpFIGxlbik7DQotDQotICAgIEZYX0xQV1NUUgkJCQlHZXRCdWZmZXIoRlhfU1RSU0laRSBsZW4pOw0KLQ0KLSAgICBGWF9MUFdTVFIJCQkJTG9ja0J1ZmZlcigpOw0KLQ0KLSAgICB2b2lkCQkJCQlSZWxlYXNlQnVmZmVyKEZYX1NUUlNJWkUgbGVuID0gLTEpOw0KLQ0KLSAgICBpbnQJCQkJCQlHZXRJbnRlZ2VyKCkgY29uc3Q7DQotDQotICAgIEZYX0ZMT0FUCQkJCUdldEZsb2F0KCkgY29uc3Q7DQotDQotICAgIEZYX1NUUlNJWkUJCQkJRmluZChGWF9MUENXU1RSIGxwc3pTdWIsIEZYX1NUUlNJWkUgc3RhcnQgPSAwKSBjb25zdDsNCi0NCi0gICAgRlhfU1RSU0laRQkJCQlGaW5kKEZYX1dDSEFSIGNoLCBGWF9TVFJTSVpFIHN0YXJ0ID0gMCkgY29uc3Q7DQotDQotICAgIEZYX1NUUlNJWkUJCQkJUmVwbGFjZShGWF9MUENXU1RSIGxwc3pPbGQsIEZYX0xQQ1dTVFIgbHBzek5ldyk7DQotDQotICAgIEZYX1NUUlNJWkUJCQkJUmVtb3ZlKEZYX1dDSEFSIGNoKTsNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcJCQlVVEY4RW5jb2RlKCkgY29uc3Q7DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQkJVVRGMTZMRV9FbmNvZGUoRlhfQk9PTCBiVGVybWluYXRlID0gVFJVRSkgY29uc3Q7DQotDQotICAgIHZvaWQJCQkJCUNvbnZlcnRGcm9tKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIsIENGWF9DaGFyTWFwKiBwQ2hhck1hcCA9IE5VTEwpOw0KLXByb3RlY3RlZDoNCi0gICAgdm9pZAkJCQkJSW5pdFN0cihGWF9MUENXU1RSIHB0ciwgaW50IGxlbik7DQotDQotICAgIENGWF9TdHJpbmdEYXRhVyoJCW1fcERhdGE7DQotICAgIHZvaWQJCQkJCUNvcHlCZWZvcmVXcml0ZSgpOw0KLSAgICB2b2lkCQkJCQlBbGxvY0JlZm9yZVdyaXRlKEZYX1NUUlNJWkUgbkxlbik7DQotICAgIHZvaWQJCQkJCUNvbmNhdEluUGxhY2UoRlhfU1RSU0laRSBuU3JjTGVuLCBGWF9MUENXU1RSIGxwc3pTcmNEYXRhKTsNCi0gICAgdm9pZAkJCQkJQ29uY2F0Q29weShGWF9TVFJTSVpFIG5TcmMxTGVuLCBGWF9MUENXU1RSIGxwc3pTcmMxRGF0YSwgRlhfU1RSU0laRSBuU3JjMkxlbiwgRlhfTFBDV1NUUiBscHN6U3JjMkRhdGEpOw0KLSAgICB2b2lkCQkJCQlBc3NpZ25Db3B5KEZYX1NUUlNJWkUgblNyY0xlbiwgRlhfTFBDV1NUUiBscHN6U3JjRGF0YSk7DQotICAgIHZvaWQJCQkJCUFsbG9jQ29weShDRlhfV2lkZVN0cmluZyYgZGVzdCwgRlhfU1RSU0laRSBuQ29weUxlbiwgRlhfU1RSU0laRSBuQ29weUluZGV4LCBGWF9TVFJTSVpFIG5FeHRyYUxlbikgY29uc3Q7DQotfTsNCi1pbmxpbmUgQ0ZYX1dpZGVTdHJpbmdDOjpDRlhfV2lkZVN0cmluZ0MoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNyYykNCi17DQotICAgIG1fUHRyID0gKEZYX0xQQ1dTVFIpc3JjOw0KLSAgICBtX0xlbmd0aCA9IHNyYy5HZXRMZW5ndGgoKTsNCi19DQotaW5saW5lIENGWF9XaWRlU3RyaW5nQyYgQ0ZYX1dpZGVTdHJpbmdDOjpvcGVyYXRvciA9IChjb25zdCBDRlhfV2lkZVN0cmluZyYgc3JjKQ0KLXsNCi0gICAgbV9QdHIgPSAoRlhfTFBDV1NUUilzcmM7DQotICAgIG1fTGVuZ3RoID0gc3JjLkdldExlbmd0aCgpOw0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLQ0KLWlubGluZSBDRlhfV2lkZVN0cmluZyBvcGVyYXRvciArIChjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHN0cjEsIGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgc3RyMikNCi17DQotICAgIHJldHVybiBDRlhfV2lkZVN0cmluZyhzdHIxLCBzdHIyKTsNCi19DQotaW5saW5lIENGWF9XaWRlU3RyaW5nIG9wZXJhdG9yICsgKGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgc3RyMSwgRlhfTFBDV1NUUiBzdHIyKQ0KLXsNCi0gICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKHN0cjEsIHN0cjIpOw0KLX0NCi1pbmxpbmUgQ0ZYX1dpZGVTdHJpbmcgb3BlcmF0b3IgKyAoRlhfTFBDV1NUUiBzdHIxLCBjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHN0cjIpDQotew0KLSAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoc3RyMSwgc3RyMik7DQotfQ0KLWlubGluZSBDRlhfV2lkZVN0cmluZyBvcGVyYXRvciArIChjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHN0cjEsIEZYX1dDSEFSIGNoKQ0KLXsNCi0gICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKHN0cjEsIENGWF9XaWRlU3RyaW5nQyhjaCkpOw0KLX0NCi1pbmxpbmUgQ0ZYX1dpZGVTdHJpbmcgb3BlcmF0b3IgKyAoRlhfV0NIQVIgY2gsIGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgc3RyMikNCi17DQotICAgIHJldHVybiBDRlhfV2lkZVN0cmluZyhjaCwgc3RyMik7DQotfQ0KLWlubGluZSBDRlhfV2lkZVN0cmluZyBvcGVyYXRvciArIChjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cjIpDQotew0KLSAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoc3RyMSwgc3RyMik7DQotfQ0KLWlubGluZSBDRlhfV2lkZVN0cmluZyBvcGVyYXRvciArIChjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyMSwgRlhfV0NIQVIgY2gpDQotew0KLSAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoc3RyMSwgQ0ZYX1dpZGVTdHJpbmdDKGNoKSk7DQotfQ0KLWlubGluZSBDRlhfV2lkZVN0cmluZyBvcGVyYXRvciArIChGWF9XQ0hBUiBjaCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cjIpDQotew0KLSAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoY2gsIHN0cjIpOw0KLX0NCi1pbmxpbmUgQ0ZYX1dpZGVTdHJpbmcgb3BlcmF0b3IgKyAoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cjEsIEZYX0xQQ1dTVFIgc3RyMikNCi17DQotICAgIHJldHVybiBDRlhfV2lkZVN0cmluZyhzdHIxLCBzdHIyKTsNCi19DQotaW5saW5lIENGWF9XaWRlU3RyaW5nIG9wZXJhdG9yICsgKEZYX0xQQ1dTVFIgc3RyMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cjIpDQotew0KLSAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoc3RyMSwgc3RyMik7DQotfQ0KLWlubGluZSBDRlhfV2lkZVN0cmluZyBvcGVyYXRvciArIChjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzdHIyKQ0KLXsNCi0gICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKHN0cjEsIHN0cjIpOw0KLX0NCi1pbmxpbmUgQ0ZYX1dpZGVTdHJpbmcgb3BlcmF0b3IgKyAoY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzdHIxLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyMikNCi17DQotICAgIHJldHVybiBDRlhfV2lkZVN0cmluZyhzdHIxLCBzdHIyKTsNCi19DQotDQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHMyKTsNCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHMxLCBjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHMyKTsNCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHMyKTsNCi1ib29sIG9wZXJhdG9yPT0gKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzMSwgRlhfTFBDV1NUUiBzMik7DQotYm9vbCBvcGVyYXRvcj09KEZYX0xQQ1dTVFIgczEsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzMik7DQotYm9vbCBvcGVyYXRvciE9KGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHMyKTsNCi1ib29sIG9wZXJhdG9yIT0oY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHMxLCBjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHMyKTsNCi1ib29sIG9wZXJhdG9yIT0oY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHMyKTsNCi1ib29sIG9wZXJhdG9yIT0gKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzMSwgRlhfTFBDV1NUUiBzMik7DQotYm9vbCBvcGVyYXRvciE9KEZYX0xQQ1dTVFIgczEsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzMik7DQotRlhfRkxPQVQgRlhfYXRvZihGWF9CU1RSIHN0cik7DQotdm9pZCBGWF9hdG9udW0oRlhfQlNUUiBzdHIsIEZYX0JPT0wmIGJJbnRlZ2VyLCB2b2lkKiBwRGF0YSk7DQotRlhfU1RSU0laRSBGWF9mdG9hKEZYX0ZMT0FUIGYsIEZYX0xQU1RSIGJ1Zik7DQotQ0ZYX0J5dGVTdHJpbmcJRlhfVVRGOEVuY29kZShGWF9MUENXU1RSIHB3c1N0ciwgRlhfU1RSU0laRSBsZW4pOw0KLWlubGluZSBDRlhfQnl0ZVN0cmluZwlGWF9VVEY4RW5jb2RlKEZYX1dTVFIgd3NTdHIpDQotew0KLSAgICByZXR1cm4gRlhfVVRGOEVuY29kZSh3c1N0ci5HZXRQdHIoKSwgd3NTdHIuR2V0TGVuZ3RoKCkpOw0KLX0NCi1pbmxpbmUgQ0ZYX0J5dGVTdHJpbmcJRlhfVVRGOEVuY29kZShjb25zdCBDRlhfV2lkZVN0cmluZyAmd3NTdHIpDQotew0KLSAgICByZXR1cm4gRlhfVVRGOEVuY29kZSgoRlhfTFBDV1NUUil3c1N0ciwgd3NTdHIuR2V0TGVuZ3RoKCkpOw0KLX0NCi1jbGFzcyBDRlhfQnl0ZVN0cmluZ0wgOiBwdWJsaWMgQ0ZYX0J5dGVTdHJpbmdDDQotew0KLXB1YmxpYzoNCi0gICAgQ0ZYX0J5dGVTdHJpbmdMKCkgOiBDRlhfQnl0ZVN0cmluZ0MoKSB7fQ0KLSAgICB+Q0ZYX0J5dGVTdHJpbmdMKCkge30NCi0NCi0gICAgdm9pZAkJRW1wdHkoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcik7DQotICAgIEZYX0xQU1RSCUFsbG9jQnVmZmVyKEZYX1NUUlNJWkUgbGVuZ3RoLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKTsNCi0NCi0gICAgdm9pZAkJU2V0KEZYX0JTVFIgc3JjLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKTsNCi19Ow0KLWNsYXNzIENGWF9XaWRlU3RyaW5nTCA6IHB1YmxpYyBDRlhfV2lkZVN0cmluZ0MNCi17DQotcHVibGljOg0KLSAgICBDRlhfV2lkZVN0cmluZ0woKSA6IENGWF9XaWRlU3RyaW5nQygpIHt9DQotICAgIH5DRlhfV2lkZVN0cmluZ0woKSB7fQ0KLQ0KLSAgICB2b2lkCQlFbXB0eShJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKTsNCi0gICAgdm9pZAkJU2V0KEZYX1dTVFIgc3JjLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKTsNCi0NCi0gICAgaW50CQkJR2V0SW50ZWdlcigpIGNvbnN0Ow0KLSAgICBGWF9GTE9BVAlHZXRGbG9hdCgpIGNvbnN0Ow0KLQ0KLSAgICB2b2lkCQlUcmltUmlnaHQoRlhfTFBDV1NUUiBscHN6VGFyZ2V0cyk7DQotfTsNCi12b2lkCUZYX1VURjhFbmNvZGUoRlhfTFBDV1NUUiBwd3NTdHIsIEZYX1NUUlNJWkUgbGVuLCBDRlhfQnl0ZVN0cmluZ0wgJnV0ZjhTdHIsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9GWF9TVFJJTkdfSF8KKyNkZWZpbmUgX0ZYX1NUUklOR19IXworY2xhc3MgQ0ZYX0J5dGVTdHJpbmdDOworY2xhc3MgQ0ZYX0J5dGVTdHJpbmc7CitjbGFzcyBDRlhfV2lkZVN0cmluZ0M7CitjbGFzcyBDRlhfV2lkZVN0cmluZzsKK3N0cnVjdCBDRlhfQ2hhck1hcDsKK2NsYXNzIENGWF9CaW5hcnlCdWY7Cit0eXBlZGVmIGludCBGWF9TVFJTSVpFOworY2xhc3MgQ0ZYX0J5dGVTdHJpbmdMOworY2xhc3MgQ0ZYX1dpZGVTdHJpbmdMOworY2xhc3MgQ0ZYX0J5dGVTdHJpbmdDIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENGWF9CeXRlU3RyaW5nQygpCisgICAgeworICAgICAgICBtX1B0ciA9IE5VTEw7CisgICAgICAgIG1fTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICBDRlhfQnl0ZVN0cmluZ0MoRlhfTFBDQllURSBwdHIsIEZYX1NUUlNJWkUgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fUHRyID0gcHRyOworICAgICAgICBtX0xlbmd0aCA9IHNpemU7CisgICAgfQorCisgICAgQ0ZYX0J5dGVTdHJpbmdDKEZYX0xQQ1NUUiBwdHIpCisgICAgeworICAgICAgICBtX1B0ciA9IChGWF9MUENCWVRFKXB0cjsKKyAgICAgICAgbV9MZW5ndGggPSBwdHIgPyAoRlhfU1RSU0laRSlGWFNZU19zdHJsZW4ocHRyKSA6IDA7CisgICAgfQorCisgICAgQ0ZYX0J5dGVTdHJpbmdDKEZYX0NIQVImIGNoKQorICAgIHsKKyAgICAgICAgbV9QdHIgPSAoRlhfTFBDQllURSkmY2g7CisgICAgICAgIG1fTGVuZ3RoID0gMTsKKyAgICB9CisKKyAgICBDRlhfQnl0ZVN0cmluZ0MoRlhfTFBDU1RSIHB0ciwgRlhfU1RSU0laRSBsZW4pCisgICAgeworICAgICAgICBtX1B0ciA9IChGWF9MUENCWVRFKXB0cjsKKyAgICAgICAgaWYgKGxlbiA9PSAtMSkgeworICAgICAgICAgICAgbV9MZW5ndGggPSAoRlhfU1RSU0laRSlGWFNZU19zdHJsZW4ocHRyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fTGVuZ3RoID0gbGVuOworICAgICAgICB9CisgICAgfQorCisgICAgQ0ZYX0J5dGVTdHJpbmdDKGNvbnN0IENGWF9CeXRlU3RyaW5nQyYgc3JjKQorICAgIHsKKyAgICAgICAgbV9QdHIgPSBzcmMubV9QdHI7CisgICAgICAgIG1fTGVuZ3RoID0gc3JjLm1fTGVuZ3RoOworICAgIH0KKworICAgIENGWF9CeXRlU3RyaW5nQyhjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3JjKTsKKworICAgIENGWF9CeXRlU3RyaW5nQyYgb3BlcmF0b3IgPSAoRlhfTFBDU1RSIHNyYykKKyAgICB7CisgICAgICAgIG1fUHRyID0gKEZYX0xQQ0JZVEUpc3JjOworICAgICAgICBtX0xlbmd0aCA9IChGWF9TVFJTSVpFKUZYU1lTX3N0cmxlbihzcmMpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgQ0ZYX0J5dGVTdHJpbmdDJiBvcGVyYXRvciA9IChjb25zdCBDRlhfQnl0ZVN0cmluZ0MmIHNyYykKKyAgICB7CisgICAgICAgIG1fUHRyID0gc3JjLm1fUHRyOworICAgICAgICBtX0xlbmd0aCA9IHNyYy5tX0xlbmd0aDsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIENGWF9CeXRlU3RyaW5nQyYgb3BlcmF0b3IgPSAoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNyYyk7CisKKyAgICBib29sCQkJb3BlcmF0b3IgPT0gKGNvbnN0IENGWF9CeXRlU3RyaW5nQyYgc3RyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIAlzdHIubV9MZW5ndGggPT0gbV9MZW5ndGggJiYgRlhTWVNfbWVtY21wMzIoc3RyLm1fUHRyLCBtX1B0ciwgbV9MZW5ndGgpID09IDA7CisgICAgfQorCisgICAgYm9vbAkJCW9wZXJhdG9yICE9IChjb25zdCBDRlhfQnl0ZVN0cmluZ0MmIHN0cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAJc3RyLm1fTGVuZ3RoICE9IG1fTGVuZ3RoIHx8IEZYU1lTX21lbWNtcDMyKHN0ci5tX1B0ciwgbV9QdHIsIG1fTGVuZ3RoKSAhPSAwOworICAgIH0KKyNkZWZpbmUgRlhCU1RSX0lEKGMxLCBjMiwgYzMsIGM0KSAoKGMxIDw8IDI0KSB8IChjMiA8PCAxNikgfCAoYzMgPDwgOCkgfCAoYzQpKQorCisgICAgRlhfRFdPUkQJCUdldElEKEZYX1NUUlNJWkUgc3RhcnRfcG9zID0gMCkgY29uc3Q7CisKKyAgICBGWF9MUENCWVRFCQlHZXRQdHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fUHRyOworICAgIH0KKworICAgIEZYX0xQQ1NUUgkJR2V0Q1N0cigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKEZYX0xQQ1NUUiltX1B0cjsKKyAgICB9CisKKyAgICBGWF9TVFJTSVpFCQlHZXRMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fTGVuZ3RoOworICAgIH0KKworICAgIGJvb2wJCQlJc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0xlbmd0aCA9PSAwOworICAgIH0KKworICAgIG9wZXJhdG9yCQlGWF9MUENCWVRFKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX1B0cjsKKyAgICB9CisKKyAgICBGWF9CWVRFCQkJR2V0QXQoRlhfU1RSU0laRSBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX1B0cltpbmRleF07CisgICAgfQorCisgICAgQ0ZYX0J5dGVTdHJpbmdDCU1pZChGWF9TVFJTSVpFIGluZGV4LCBGWF9TVFJTSVpFIGNvdW50ID0gLTEpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaW5kZXggPCAwKSB7CisgICAgICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGluZGV4ID4gbV9MZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0MoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY291bnQgPCAwIHx8IGNvdW50ID4gbV9MZW5ndGggLSBpbmRleCkgeworICAgICAgICAgICAgY291bnQgPSBtX0xlbmd0aCAtIGluZGV4OworICAgICAgICB9CisgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0MobV9QdHIgKyBpbmRleCwgY291bnQpOworICAgIH0KK3Byb3RlY3RlZDoKKworICAgIEZYX0xQQ0JZVEUJCW1fUHRyOworCisgICAgRlhfU1RSU0laRQkJbV9MZW5ndGg7Citwcml2YXRlOgorCisgICAgdm9pZCoJCQlvcGVyYXRvciBuZXcgKHNpemVfdCkgdGhyb3coKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfTsKK3R5cGVkZWYgY29uc3QgQ0ZYX0J5dGVTdHJpbmdDJiBGWF9CU1RSOworI2RlZmluZSBGWF9CU1RSQyhzdHIpIENGWF9CeXRlU3RyaW5nQyhzdHIsIHNpemVvZiBzdHItMSkKK3N0cnVjdCBDRlhfU3RyaW5nRGF0YSB7CisKKyAgICBsb25nCQltX25SZWZzOworCisgICAgRlhfU1RSU0laRQltX25EYXRhTGVuZ3RoOworCisgICAgRlhfU1RSU0laRQltX25BbGxvY0xlbmd0aDsKKworICAgIEZYX0NIQVIJCW1fU3RyaW5nWzFdOworfTsKK2NsYXNzIENGWF9CeXRlU3RyaW5nIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENGWF9CeXRlU3RyaW5nKCkKKyAgICB7CisgICAgICAgIG1fcERhdGEgPSBOVUxMOworICAgIH0KKworICAgIENGWF9CeXRlU3RyaW5nKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIpOworCisgICAgQ0ZYX0J5dGVTdHJpbmcoY2hhciBjaCk7CisKKyAgICBDRlhfQnl0ZVN0cmluZyhGWF9MUENTVFIgcHRyLCBGWF9TVFJTSVpFIGxlbiA9IC0xKTsKKworICAgIENGWF9CeXRlU3RyaW5nKEZYX0xQQ0JZVEUgcHRyLCBGWF9TVFJTSVpFIGxlbik7CisKKyAgICBDRlhfQnl0ZVN0cmluZyhGWF9CU1RSIGJzdHJjKTsKKworICAgIENGWF9CeXRlU3RyaW5nKEZYX0JTVFIgYnN0cmMxLCBGWF9CU1RSIGJzdHJjMik7CisKKyAgICB+Q0ZYX0J5dGVTdHJpbmcoKTsKKworICAgIHN0YXRpYyBDRlhfQnl0ZVN0cmluZwlGcm9tVW5pY29kZShGWF9MUENXU1RSIHB0ciwgRlhfU1RSU0laRSBsZW4gPSAtMSk7CisKKyAgICBzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJRnJvbVVuaWNvZGUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cik7CisKKyAgICBvcGVyYXRvcgkJCQlGWF9MUENTVFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcERhdGEgPyBtX3BEYXRhLT5tX1N0cmluZyA6ICIiOworICAgIH0KKworICAgIG9wZXJhdG9yCQkJCUZYX0xQQ0JZVEUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcERhdGEgPyAoRlhfTFBDQllURSltX3BEYXRhLT5tX1N0cmluZyA6IE5VTEw7CisgICAgfQorCisgICAgRlhfU1RSU0laRQkJCQlHZXRMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcERhdGEgPyBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoIDogMDsKKyAgICB9CisKKyAgICBib29sCQkJCQlJc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhR2V0TGVuZ3RoKCk7CisgICAgfQorCisgICAgaW50CQkJCQkJQ29tcGFyZShGWF9CU1RSIHN0cikgY29uc3Q7CisKKworICAgIGJvb2wJCQkJCUVxdWFsKEZYX0JTVFIgc3RyKSBjb25zdDsKKworCisgICAgYm9vbAkJCQkJRXF1YWxOb0Nhc2UoRlhfQlNUUiBzdHIpIGNvbnN0OworCisgICAgYm9vbAkJCQkJb3BlcmF0b3IgPT0gKEZYX0xQQ1NUUiBzdHIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRXF1YWwoc3RyKTsKKyAgICB9CisKKyAgICBib29sCQkJCQlvcGVyYXRvciA9PSAoRlhfQlNUUiBzdHIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gRXF1YWwoc3RyKTsKKyAgICB9CisKKyAgICBib29sCQkJCQlvcGVyYXRvciA9PSAoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cikgY29uc3Q7CisKKyAgICBib29sCQkJCQlvcGVyYXRvciAhPSAoRlhfTFBDU1RSIHN0cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhRXF1YWwoc3RyKTsKKyAgICB9CisKKyAgICBib29sCQkJCQlvcGVyYXRvciAhPSAoRlhfQlNUUiBzdHIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIUVxdWFsKHN0cik7CisgICAgfQorCisgICAgYm9vbAkJCQkJb3BlcmF0b3IgIT0gKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW9wZXJhdG9yPT0oc3RyKTsKKyAgICB9CisKKyAgICB2b2lkCQkJCQlFbXB0eSgpOworCisgICAgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmCW9wZXJhdG9yID0gKEZYX0xQQ1NUUiBzdHIpOworCisgICAgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmCW9wZXJhdG9yID0gKEZYX0JTVFIgYnN0cmMpOworCisgICAgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmCW9wZXJhdG9yID0gKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHJpbmdTcmMpOworCisgICAgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmCW9wZXJhdG9yID0gKGNvbnN0IENGWF9CaW5hcnlCdWYmIGJ1Zik7CisKKyAgICB2b2lkCQkJCQlMb2FkKEZYX0xQQ0JZVEUgc3RyLCBGWF9TVFJTSVpFIGxlbik7CisKKyAgICBjb25zdCBDRlhfQnl0ZVN0cmluZyYJb3BlcmF0b3IgKz0gKEZYX0NIQVIgY2gpOworCisgICAgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmCW9wZXJhdG9yICs9IChGWF9MUENTVFIgc3RyKTsKKworICAgIGNvbnN0IENGWF9CeXRlU3RyaW5nJglvcGVyYXRvciArPSAoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cik7CisKKyAgICBjb25zdCBDRlhfQnl0ZVN0cmluZyYJb3BlcmF0b3IgKz0gKEZYX0JTVFIgYnN0cmMpOworCisgICAgRlhfQllURQkJCQkJR2V0QXQoRlhfU1RSU0laRSBuSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wRGF0YSA/IG1fcERhdGEtPm1fU3RyaW5nW25JbmRleF0gOiAwOworICAgIH0KKworICAgIEZYX0JZVEUJCQkJCW9wZXJhdG9yW10oRlhfU1RSU0laRSBuSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wRGF0YSA/IG1fcERhdGEtPm1fU3RyaW5nW25JbmRleF0gOiAwOworICAgIH0KKworICAgIHZvaWQJCQkJCVNldEF0KEZYX1NUUlNJWkUgbkluZGV4LCBGWF9DSEFSIGNoKTsKKworICAgIEZYX1NUUlNJWkUJCQkJSW5zZXJ0KEZYX1NUUlNJWkUgaW5kZXgsIEZYX0NIQVIgY2gpOworCisgICAgRlhfU1RSU0laRQkJCQlEZWxldGUoRlhfU1RSU0laRSBpbmRleCwgRlhfU1RSU0laRSBjb3VudCA9IDEpOworCisKKyAgICB2b2lkCQkJCQlGb3JtYXQoRlhfTFBDU1RSIGxwc3pGb3JtYXQsIC4uLiApOworCisgICAgdm9pZAkJCQkJRm9ybWF0VihGWF9MUENTVFIgbHBzekZvcm1hdCwgdmFfbGlzdCBhcmdMaXN0KTsKKworCisgICAgdm9pZAkJCQkJUmVzZXJ2ZShGWF9TVFJTSVpFIGxlbik7CisKKyAgICBGWF9MUFNUUgkJCQlHZXRCdWZmZXIoRlhfU1RSU0laRSBsZW4pOworCisgICAgRlhfTFBTVFIJCQkJTG9ja0J1ZmZlcigpOworCisgICAgdm9pZAkJCQkJUmVsZWFzZUJ1ZmZlcihGWF9TVFJTSVpFIGxlbiA9IC0xKTsKKworICAgIENGWF9CeXRlU3RyaW5nCQkJTWlkKEZYX1NUUlNJWkUgZmlyc3QpIGNvbnN0OworCisgICAgQ0ZYX0J5dGVTdHJpbmcJCQlNaWQoRlhfU1RSU0laRSBmaXJzdCwgRlhfU1RSU0laRSBjb3VudCkgY29uc3Q7CisKKyAgICBDRlhfQnl0ZVN0cmluZwkJCUxlZnQoRlhfU1RSU0laRSBjb3VudCkgY29uc3Q7CisKKyAgICBDRlhfQnl0ZVN0cmluZwkJCVJpZ2h0KEZYX1NUUlNJWkUgY291bnQpIGNvbnN0OworCisgICAgRlhfU1RSU0laRQkJCQlGaW5kKEZYX0JTVFIgbHBzelN1YiwgRlhfU1RSU0laRSBzdGFydCA9IDApIGNvbnN0OworCisgICAgRlhfU1RSU0laRQkJCQlGaW5kKEZYX0NIQVIgY2gsIEZYX1NUUlNJWkUgc3RhcnQgPSAwKSBjb25zdDsKKworICAgIEZYX1NUUlNJWkUJCQkJUmV2ZXJzZUZpbmQoRlhfQ0hBUiBjaCkgY29uc3Q7CisKKyAgICB2b2lkCQkJCQlNYWtlTG93ZXIoKTsKKworICAgIHZvaWQJCQkJCU1ha2VVcHBlcigpOworCisgICAgdm9pZAkJCQkJVHJpbVJpZ2h0KCk7CisKKyAgICB2b2lkCQkJCQlUcmltUmlnaHQoRlhfQ0hBUiBjaFRhcmdldCk7CisKKyAgICB2b2lkCQkJCQlUcmltUmlnaHQoRlhfQlNUUiBscHN6VGFyZ2V0cyk7CisKKyAgICB2b2lkCQkJCQlUcmltTGVmdCgpOworCisgICAgdm9pZAkJCQkJVHJpbUxlZnQoRlhfQ0hBUiBjaFRhcmdldCk7CisKKyAgICB2b2lkCQkJCQlUcmltTGVmdChGWF9CU1RSIGxwc3pUYXJnZXRzKTsKKworICAgIEZYX1NUUlNJWkUJCQkJUmVwbGFjZShGWF9CU1RSIGxwc3pPbGQsIEZYX0JTVFIgbHBzek5ldyk7CisKKyAgICBGWF9TVFJTSVpFCQkJCVJlbW92ZShGWF9DSEFSIGNoKTsKKworICAgIENGWF9XaWRlU3RyaW5nCQkJVVRGOERlY29kZSgpIGNvbnN0OworCisgICAgdm9pZAkJCQkJQ29udmVydEZyb20oY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0ciwgQ0ZYX0NoYXJNYXAqIHBDaGFyTWFwID0gTlVMTCk7CisKKyAgICBGWF9EV09SRAkJCQlHZXRJRChGWF9TVFJTSVpFIHN0YXJ0X3BvcyA9IDApIGNvbnN0OworCisgICAgc3RhdGljIENGWF9CeXRlU3RyaW5nCUxvYWRGcm9tRmlsZShGWF9CU1RSIGZpbGVfcGF0aCk7CisjZGVmaW5lIEZYRk9STUFUX1NJR05FRAkJCTEKKyNkZWZpbmUgRlhGT1JNQVRfSEVYCQkJMgorI2RlZmluZSBGWEZPUk1BVF9DQVBJVEFMCQk0CisKKyAgICBzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJRm9ybWF0SW50ZWdlcihpbnQgaSwgRlhfRFdPUkQgZmxhZ3MgPSAwKTsKKworICAgIHN0YXRpYyBDRlhfQnl0ZVN0cmluZwlGb3JtYXRGbG9hdChGWF9GTE9BVCBmLCBpbnQgcHJlY2lzaW9uID0gMCk7Citwcm90ZWN0ZWQ6CisKKyAgICBzdHJ1Y3QgQ0ZYX1N0cmluZ0RhdGEqCW1fcERhdGE7CisgICAgdm9pZAkJCQkJQWxsb2NDb3B5KENGWF9CeXRlU3RyaW5nJiBkZXN0LCBGWF9TVFJTSVpFIG5Db3B5TGVuLCBGWF9TVFJTSVpFIG5Db3B5SW5kZXgsIEZYX1NUUlNJWkUgbkV4dHJhTGVuKSBjb25zdDsKKyAgICB2b2lkCQkJCQlBc3NpZ25Db3B5KEZYX1NUUlNJWkUgblNyY0xlbiwgRlhfTFBDU1RSIGxwc3pTcmNEYXRhKTsKKyAgICB2b2lkCQkJCQlDb25jYXRDb3B5KEZYX1NUUlNJWkUgblNyYzFMZW4sIEZYX0xQQ1NUUiBscHN6U3JjMURhdGEsIEZYX1NUUlNJWkUgblNyYzJMZW4sIEZYX0xQQ1NUUiBscHN6U3JjMkRhdGEpOworICAgIHZvaWQJCQkJCUNvbmNhdEluUGxhY2UoRlhfU1RSU0laRSBuU3JjTGVuLCBGWF9MUENTVFIgbHBzelNyY0RhdGEpOworICAgIHZvaWQJCQkJCUNvcHlCZWZvcmVXcml0ZSgpOworICAgIHZvaWQJCQkJCUFsbG9jQmVmb3JlV3JpdGUoRlhfU1RSU0laRSBuTGVuKTsKK307CitpbmxpbmUgQ0ZYX0J5dGVTdHJpbmdDOjpDRlhfQnl0ZVN0cmluZ0MoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNyYykKK3sKKyAgICBtX1B0ciA9IChGWF9MUENCWVRFKXNyYzsKKyAgICBtX0xlbmd0aCA9IHNyYy5HZXRMZW5ndGgoKTsKK30KK2lubGluZSBDRlhfQnl0ZVN0cmluZ0MmIENGWF9CeXRlU3RyaW5nQzo6b3BlcmF0b3IgPSAoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNyYykKK3sKKyAgICBtX1B0ciA9IChGWF9MUENCWVRFKXNyYzsKKyAgICBtX0xlbmd0aCA9IHNyYy5HZXRMZW5ndGgoKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBDRlhfQnl0ZVN0cmluZyBvcGVyYXRvciArIChGWF9CU1RSIHN0cjEsIEZYX0JTVFIgc3RyMikKK3sKKyAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoc3RyMSwgc3RyMik7Cit9CitpbmxpbmUgQ0ZYX0J5dGVTdHJpbmcgb3BlcmF0b3IgKyAoRlhfQlNUUiBzdHIxLCBGWF9MUENTVFIgc3RyMikKK3sKKyAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoc3RyMSwgc3RyMik7Cit9CitpbmxpbmUgQ0ZYX0J5dGVTdHJpbmcgb3BlcmF0b3IgKyAoRlhfTFBDU1RSIHN0cjEsIEZYX0JTVFIgc3RyMikKK3sKKyAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoc3RyMSwgc3RyMik7Cit9CitpbmxpbmUgQ0ZYX0J5dGVTdHJpbmcgb3BlcmF0b3IgKyAoRlhfQlNUUiBzdHIxLCBGWF9DSEFSIGNoKQoreworICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZyhzdHIxLCBDRlhfQnl0ZVN0cmluZ0MoY2gpKTsKK30KK2lubGluZSBDRlhfQnl0ZVN0cmluZyBvcGVyYXRvciArIChGWF9DSEFSIGNoLCBGWF9CU1RSIHN0cjIpCit7CisgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKGNoLCBzdHIyKTsKK30KK2lubGluZSBDRlhfQnl0ZVN0cmluZyBvcGVyYXRvciArIChjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyMSwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cjIpCit7CisgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKHN0cjEsIHN0cjIpOworfQoraW5saW5lIENGWF9CeXRlU3RyaW5nIG9wZXJhdG9yICsgKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIxLCBGWF9DSEFSIGNoKQoreworICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZyhzdHIxLCBDRlhfQnl0ZVN0cmluZ0MoY2gpKTsKK30KK2lubGluZSBDRlhfQnl0ZVN0cmluZyBvcGVyYXRvciArIChGWF9DSEFSIGNoLCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyMikKK3sKKyAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoY2gsIHN0cjIpOworfQoraW5saW5lIENGWF9CeXRlU3RyaW5nIG9wZXJhdG9yICsgKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIxLCBGWF9MUENTVFIgc3RyMikKK3sKKyAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoc3RyMSwgc3RyMik7Cit9CitpbmxpbmUgQ0ZYX0J5dGVTdHJpbmcgb3BlcmF0b3IgKyAoRlhfTFBDU1RSIHN0cjEsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIyKQoreworICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZyhzdHIxLCBzdHIyKTsKK30KK2lubGluZSBDRlhfQnl0ZVN0cmluZyBvcGVyYXRvciArIChjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyMSwgRlhfQlNUUiBzdHIyKQoreworICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZyhzdHIxLCBzdHIyKTsKK30KK2lubGluZSBDRlhfQnl0ZVN0cmluZyBvcGVyYXRvciArIChGWF9CU1RSIHN0cjEsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIyKQoreworICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZyhzdHIxLCBzdHIyKTsKK30KK2NsYXNzIENGWF9TdHJpbmdCdWZCYXNlIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENGWF9TdHJpbmdCdWZCYXNlKEZYX1NUUlNJWkUgbGltaXQpCisgICAgeworICAgICAgICBtX1NpemUgPSAwOworICAgICAgICBtX0xpbWl0ID0gbGltaXQ7CisgICAgfQorCisgICAgRlhfQ0hBUioJR2V0UHRyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoRlhfQ0hBUiopKHRoaXMgKyAxKTsKKyAgICB9CisKKyAgICBGWF9TVFJTSVpFCUdldFNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fU2l6ZTsKKyAgICB9CisKKyAgICB2b2lkCQlFbXB0eSgpCisgICAgeworICAgICAgICBtX1NpemUgPSAwOworICAgIH0KKworICAgIHZvaWQJCUNvcHkoRlhfQlNUUiBzdHIpOworCisgICAgdm9pZAkJQXBwZW5kKEZYX0JTVFIgc3RyKTsKKworICAgIHZvaWQJCUFwcGVuZChpbnQgaSwgRlhfRFdPUkQgZmxhZ3MgPSAwKTsKKworICAgIENGWF9CeXRlU3RyaW5nQwkJR2V0U3RyaW5nQygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmdDKChGWF9DSEFSKikodGhpcyArIDEpLCBtX1NpemUpOworICAgIH0KKworICAgIENGWF9CeXRlU3RyaW5nCQlHZXRTdHJpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKChGWF9DSEFSKikodGhpcyArIDEpLCBtX1NpemUpOworICAgIH0KK3Byb3RlY3RlZDoKKworICAgIEZYX1NUUlNJWkUJbV9MaW1pdDsKKworICAgIEZYX1NUUlNJWkUJbV9TaXplOworfTsKK3RlbXBsYXRlPEZYX1NUUlNJWkUgbGltaXQ+CitjbGFzcyBDRlhfU3RyaW5nQnVmVGVtcGxhdGUgOiBwdWJsaWMgQ0ZYX1N0cmluZ0J1ZkJhc2UKK3sKK3B1YmxpYzoKKworICAgIENGWF9TdHJpbmdCdWZUZW1wbGF0ZSgpIDogQ0ZYX1N0cmluZ0J1ZkJhc2UobGltaXQpIHt9CisKKyAgICBGWF9DSEFSCQltX0J1ZmZlcltsaW1pdF07Cit9OwordHlwZWRlZiBDRlhfU3RyaW5nQnVmVGVtcGxhdGU8MjU2PiBDRlhfU3RyaW5nQnVmMjU2OworY2xhc3MgQ0ZYX1dpZGVTdHJpbmdDIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENGWF9XaWRlU3RyaW5nQygpCisgICAgeworICAgICAgICBtX1B0ciA9IE5VTEw7CisgICAgICAgIG1fTGVuZ3RoID0gMDsKKyAgICB9CisKKyAgICBDRlhfV2lkZVN0cmluZ0MoRlhfTFBDV1NUUiBwdHIpCisgICAgeworICAgICAgICBtX1B0ciA9IHB0cjsKKyAgICAgICAgbV9MZW5ndGggPSBwdHIgPyAoRlhfU1RSU0laRSlGWFNZU193Y3NsZW4ocHRyKSA6IDA7CisgICAgfQorCisgICAgQ0ZYX1dpZGVTdHJpbmdDKEZYX1dDSEFSJiBjaCkKKyAgICB7CisgICAgICAgIG1fUHRyID0gJmNoOworICAgICAgICBtX0xlbmd0aCA9IDE7CisgICAgfQorCisgICAgQ0ZYX1dpZGVTdHJpbmdDKEZYX0xQQ1dTVFIgcHRyLCBGWF9TVFJTSVpFIGxlbikKKyAgICB7CisgICAgICAgIG1fUHRyID0gcHRyOworICAgICAgICBpZiAobGVuID09IC0xKSB7CisgICAgICAgICAgICBtX0xlbmd0aCA9IChGWF9TVFJTSVpFKUZYU1lTX3djc2xlbihwdHIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9MZW5ndGggPSBsZW47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBDRlhfV2lkZVN0cmluZ0MoY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzcmMpCisgICAgeworICAgICAgICBtX1B0ciA9IHNyYy5tX1B0cjsKKyAgICAgICAgbV9MZW5ndGggPSBzcmMubV9MZW5ndGg7CisgICAgfQorCisgICAgQ0ZYX1dpZGVTdHJpbmdDKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzcmMpOworCisgICAgQ0ZYX1dpZGVTdHJpbmdDJiBvcGVyYXRvciA9IChGWF9MUENXU1RSIHNyYykKKyAgICB7CisgICAgICAgIG1fUHRyID0gc3JjOworICAgICAgICBtX0xlbmd0aCA9IChGWF9TVFJTSVpFKUZYU1lTX3djc2xlbihzcmMpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgQ0ZYX1dpZGVTdHJpbmdDJiBvcGVyYXRvciA9IChjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHNyYykKKyAgICB7CisgICAgICAgIG1fUHRyID0gc3JjLm1fUHRyOworICAgICAgICBtX0xlbmd0aCA9IHNyYy5tX0xlbmd0aDsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIENGWF9XaWRlU3RyaW5nQyYgb3BlcmF0b3IgPSAoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNyYyk7CisKKyAgICBib29sCQkJb3BlcmF0b3IgPT0gKGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgc3RyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIAlzdHIubV9MZW5ndGggPT0gbV9MZW5ndGggJiYgRlhTWVNfbWVtY21wMzIoc3RyLm1fUHRyLCBtX1B0ciwgbV9MZW5ndGggKiBzaXplb2YoRlhfV0NIQVIpKSA9PSAwOworICAgIH0KKworICAgIGJvb2wJCQlvcGVyYXRvciAhPSAoY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzdHIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gCXN0ci5tX0xlbmd0aCAhPSBtX0xlbmd0aCB8fCBGWFNZU19tZW1jbXAzMihzdHIubV9QdHIsIG1fUHRyLCBtX0xlbmd0aCAqIHNpemVvZihGWF9XQ0hBUikpICE9IDA7CisgICAgfQorCisgICAgRlhfTFBDV1NUUgkJR2V0UHRyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX1B0cjsKKyAgICB9CisKKyAgICBGWF9TVFJTSVpFCQlHZXRMZW5ndGgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fTGVuZ3RoOworICAgIH0KKworICAgIGJvb2wJCQlJc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0xlbmd0aCA9PSAwOworICAgIH0KKworICAgIEZYX1dDSEFSCQlHZXRBdChGWF9TVFJTSVpFIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fUHRyW2luZGV4XTsKKyAgICB9CisKKyAgICBDRlhfV2lkZVN0cmluZ0MJTGVmdChGWF9TVFJTSVpFIGNvdW50KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGNvdW50IDwgMSkgeworICAgICAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nQygpOworICAgICAgICB9CisgICAgICAgIGlmIChjb3VudCA+IG1fTGVuZ3RoKSB7CisgICAgICAgICAgICBjb3VudCA9IG1fTGVuZ3RoOworICAgICAgICB9CisgICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZ0MobV9QdHIsIGNvdW50KTsKKyAgICB9CisKKyAgICBDRlhfV2lkZVN0cmluZ0MJTWlkKEZYX1NUUlNJWkUgaW5kZXgsIEZYX1NUUlNJWkUgY291bnQgPSAtMSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IDApIHsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5kZXggPiBtX0xlbmd0aCkgeworICAgICAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nQygpOworICAgICAgICB9CisgICAgICAgIGlmIChjb3VudCA8IDAgfHwgY291bnQgPiBtX0xlbmd0aCAtIGluZGV4KSB7CisgICAgICAgICAgICBjb3VudCA9IG1fTGVuZ3RoIC0gaW5kZXg7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nQyhtX1B0ciArIGluZGV4LCBjb3VudCk7CisgICAgfQorCisgICAgQ0ZYX1dpZGVTdHJpbmdDCVJpZ2h0KEZYX1NUUlNJWkUgY291bnQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoY291bnQgPCAxKSB7CisgICAgICAgICAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmdDKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvdW50ID4gbV9MZW5ndGgpIHsKKyAgICAgICAgICAgIGNvdW50ID0gbV9MZW5ndGg7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nQyhtX1B0ciArIG1fTGVuZ3RoIC0gY291bnQsIGNvdW50KTsKKyAgICB9Citwcm90ZWN0ZWQ6CisKKyAgICBGWF9MUENXU1RSCQltX1B0cjsKKworICAgIEZYX1NUUlNJWkUJCW1fTGVuZ3RoOworcHJpdmF0ZToKKworICAgIHZvaWQqCQkJb3BlcmF0b3IgbmV3IChzaXplX3QpIHRocm93KCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK307Cit0eXBlZGVmIGNvbnN0IENGWF9XaWRlU3RyaW5nQyYJRlhfV1NUUjsKKyNkZWZpbmUgRlhfV1NUUkMod3N0cikgQ0ZYX1dpZGVTdHJpbmdDKChGWF9MUENXU1RSKXdzdHIsIHNpemVvZih3c3RyKSAvIHNpemVvZihGWF9XQ0hBUikgLSAxKQorc3RydWN0IENGWF9TdHJpbmdEYXRhVyB7CisKKyAgICBsb25nCQltX25SZWZzOworCisgICAgRlhfU1RSU0laRQltX25EYXRhTGVuZ3RoOworCisgICAgRlhfU1RSU0laRQltX25BbGxvY0xlbmd0aDsKKworICAgIEZYX1dDSEFSCW1fU3RyaW5nWzFdOworfTsKK2NsYXNzIENGWF9XaWRlU3RyaW5nIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENGWF9XaWRlU3RyaW5nKCkKKyAgICB7CisgICAgICAgIG1fcERhdGEgPSBOVUxMOworICAgIH0KKworICAgIENGWF9XaWRlU3RyaW5nKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHIpOworCisgICAgQ0ZYX1dpZGVTdHJpbmcoRlhfTFBDV1NUUiBwdHIsIEZYX1NUUlNJWkUgbGVuID0gLTEpCisgICAgeworICAgICAgICBJbml0U3RyKHB0ciwgbGVuKTsKKyAgICB9CisKKyAgICBDRlhfV2lkZVN0cmluZyhGWF9XQ0hBUiBjaCk7CisKKyAgICBDRlhfV2lkZVN0cmluZyhjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHN0cik7CisKKyAgICBDRlhfV2lkZVN0cmluZyhjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHN0cjEsIGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgc3RyMik7CisKKyAgICB+Q0ZYX1dpZGVTdHJpbmcoKTsKKworICAgIHN0YXRpYyBDRlhfV2lkZVN0cmluZwlGcm9tTG9jYWwoY29uc3QgY2hhciogc3RyLCBGWF9TVFJTSVpFIGxlbiA9IC0xKTsKKworICAgIHN0YXRpYyBDRlhfV2lkZVN0cmluZwlGcm9tVVRGOChjb25zdCBjaGFyKiBzdHIsIEZYX1NUUlNJWkUgbGVuID0gLTEpOworCisgICAgc3RhdGljIENGWF9XaWRlU3RyaW5nCUZyb21VVEYxNkxFKGNvbnN0IHVuc2lnbmVkIHNob3J0KiBzdHIsIEZYX1NUUlNJWkUgbGVuID0gLTEpOworCisgICAgb3BlcmF0b3IgRlhfTFBDV1NUUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wRGF0YSA/IG1fcERhdGEtPm1fU3RyaW5nIDogKEZYX1dDSEFSKilMIiI7CisgICAgfQorCisgICAgdm9pZAkJCQkJRW1wdHkoKTsKKworCisgICAgRlhfQk9PTAkJCQkJSXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIUdldExlbmd0aCgpOworICAgIH0KKworICAgIEZYX1NUUlNJWkUJCQkJR2V0TGVuZ3RoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BEYXRhID8gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCA6IDA7CisgICAgfQorCisgICAgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmCW9wZXJhdG9yID0gKEZYX0xQQ1dTVFIgc3RyKTsKKworICAgIGNvbnN0IENGWF9XaWRlU3RyaW5nJglvcGVyYXRvciA9KGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJpbmdTcmMpOworCisgICAgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmCW9wZXJhdG9yID0oY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzdHJpbmdTcmMpOworCisgICAgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmCW9wZXJhdG9yICs9IChGWF9MUENXU1RSIHN0cik7CisKKyAgICBjb25zdCBDRlhfV2lkZVN0cmluZyYJb3BlcmF0b3IgKz0gKEZYX1dDSEFSIGNoKTsKKworICAgIGNvbnN0IENGWF9XaWRlU3RyaW5nJglvcGVyYXRvciArPSAoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cik7CisKKyAgICBjb25zdCBDRlhfV2lkZVN0cmluZyYJb3BlcmF0b3IgKz0gKGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgc3RyKTsKKworICAgIEZYX1dDSEFSCQkJCUdldEF0KEZYX1NUUlNJWkUgbkluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcERhdGEgPyBtX3BEYXRhLT5tX1N0cmluZ1tuSW5kZXhdIDogMDsKKyAgICB9CisKKyAgICBGWF9XQ0hBUgkJCQlvcGVyYXRvcltdKEZYX1NUUlNJWkUgbkluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcERhdGEgPyBtX3BEYXRhLT5tX1N0cmluZ1tuSW5kZXhdIDogMDsKKyAgICB9CisKKyAgICB2b2lkCQkJCQlTZXRBdChGWF9TVFJTSVpFIG5JbmRleCwgRlhfV0NIQVIgY2gpOworCisgICAgaW50CQkJCQkJQ29tcGFyZShGWF9MUENXU1RSIHN0cikgY29uc3Q7CisKKyAgICBpbnQJCQkJCQlDb21wYXJlKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHIpIGNvbnN0OworCisgICAgaW50CQkJCQkJQ29tcGFyZU5vQ2FzZShGWF9MUENXU1RSIHN0cikgY29uc3Q7CisKKyAgICBib29sCQkJCQlFcXVhbChjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHN0cikgY29uc3Q7CisKKyAgICBDRlhfV2lkZVN0cmluZwkJCU1pZChGWF9TVFJTSVpFIGZpcnN0KSBjb25zdDsKKworICAgIENGWF9XaWRlU3RyaW5nCQkJTWlkKEZYX1NUUlNJWkUgZmlyc3QsIEZYX1NUUlNJWkUgY291bnQpIGNvbnN0OworCisgICAgQ0ZYX1dpZGVTdHJpbmcJCQlMZWZ0KEZYX1NUUlNJWkUgY291bnQpIGNvbnN0OworCisgICAgQ0ZYX1dpZGVTdHJpbmcJCQlSaWdodChGWF9TVFJTSVpFIGNvdW50KSBjb25zdDsKKworICAgIEZYX1NUUlNJWkUJCQkJSW5zZXJ0KEZYX1NUUlNJWkUgaW5kZXgsIEZYX1dDSEFSIGNoKTsKKworICAgIEZYX1NUUlNJWkUJCQkJRGVsZXRlKEZYX1NUUlNJWkUgaW5kZXgsIEZYX1NUUlNJWkUgY291bnQgPSAxKTsKKworICAgIHZvaWQJCQkJCUZvcm1hdChGWF9MUENXU1RSIGxwc3pGb3JtYXQsIC4uLiApOworCisgICAgdm9pZAkJCQkJRm9ybWF0VihGWF9MUENXU1RSIGxwc3pGb3JtYXQsIHZhX2xpc3QgYXJnTGlzdCk7CisKKyAgICB2b2lkCQkJCQlNYWtlTG93ZXIoKTsKKworICAgIHZvaWQJCQkJCU1ha2VVcHBlcigpOworCisgICAgdm9pZAkJCQkJVHJpbVJpZ2h0KCk7CisKKyAgICB2b2lkCQkJCQlUcmltUmlnaHQoRlhfV0NIQVIgY2hUYXJnZXQpOworCisgICAgdm9pZAkJCQkJVHJpbVJpZ2h0KEZYX0xQQ1dTVFIgbHBzelRhcmdldHMpOworCisgICAgdm9pZAkJCQkJVHJpbUxlZnQoKTsKKworICAgIHZvaWQJCQkJCVRyaW1MZWZ0KEZYX1dDSEFSIGNoVGFyZ2V0KTsKKworICAgIHZvaWQJCQkJCVRyaW1MZWZ0KEZYX0xQQ1dTVFIgbHBzelRhcmdldHMpOworCisgICAgdm9pZAkJCQkJUmVzZXJ2ZShGWF9TVFJTSVpFIGxlbik7CisKKyAgICBGWF9MUFdTVFIJCQkJR2V0QnVmZmVyKEZYX1NUUlNJWkUgbGVuKTsKKworICAgIEZYX0xQV1NUUgkJCQlMb2NrQnVmZmVyKCk7CisKKyAgICB2b2lkCQkJCQlSZWxlYXNlQnVmZmVyKEZYX1NUUlNJWkUgbGVuID0gLTEpOworCisgICAgaW50CQkJCQkJR2V0SW50ZWdlcigpIGNvbnN0OworCisgICAgRlhfRkxPQVQJCQkJR2V0RmxvYXQoKSBjb25zdDsKKworICAgIEZYX1NUUlNJWkUJCQkJRmluZChGWF9MUENXU1RSIGxwc3pTdWIsIEZYX1NUUlNJWkUgc3RhcnQgPSAwKSBjb25zdDsKKworICAgIEZYX1NUUlNJWkUJCQkJRmluZChGWF9XQ0hBUiBjaCwgRlhfU1RSU0laRSBzdGFydCA9IDApIGNvbnN0OworCisgICAgRlhfU1RSU0laRQkJCQlSZXBsYWNlKEZYX0xQQ1dTVFIgbHBzek9sZCwgRlhfTFBDV1NUUiBscHN6TmV3KTsKKworICAgIEZYX1NUUlNJWkUJCQkJUmVtb3ZlKEZYX1dDSEFSIGNoKTsKKworICAgIENGWF9CeXRlU3RyaW5nCQkJVVRGOEVuY29kZSgpIGNvbnN0OworCisgICAgQ0ZYX0J5dGVTdHJpbmcJCQlVVEYxNkxFX0VuY29kZShGWF9CT09MIGJUZXJtaW5hdGUgPSBUUlVFKSBjb25zdDsKKworICAgIHZvaWQJCQkJCUNvbnZlcnRGcm9tKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIsIENGWF9DaGFyTWFwKiBwQ2hhck1hcCA9IE5VTEwpOworcHJvdGVjdGVkOgorICAgIHZvaWQJCQkJCUluaXRTdHIoRlhfTFBDV1NUUiBwdHIsIGludCBsZW4pOworCisgICAgQ0ZYX1N0cmluZ0RhdGFXKgkJbV9wRGF0YTsKKyAgICB2b2lkCQkJCQlDb3B5QmVmb3JlV3JpdGUoKTsKKyAgICB2b2lkCQkJCQlBbGxvY0JlZm9yZVdyaXRlKEZYX1NUUlNJWkUgbkxlbik7CisgICAgdm9pZAkJCQkJQ29uY2F0SW5QbGFjZShGWF9TVFJTSVpFIG5TcmNMZW4sIEZYX0xQQ1dTVFIgbHBzelNyY0RhdGEpOworICAgIHZvaWQJCQkJCUNvbmNhdENvcHkoRlhfU1RSU0laRSBuU3JjMUxlbiwgRlhfTFBDV1NUUiBscHN6U3JjMURhdGEsIEZYX1NUUlNJWkUgblNyYzJMZW4sIEZYX0xQQ1dTVFIgbHBzelNyYzJEYXRhKTsKKyAgICB2b2lkCQkJCQlBc3NpZ25Db3B5KEZYX1NUUlNJWkUgblNyY0xlbiwgRlhfTFBDV1NUUiBscHN6U3JjRGF0YSk7CisgICAgdm9pZAkJCQkJQWxsb2NDb3B5KENGWF9XaWRlU3RyaW5nJiBkZXN0LCBGWF9TVFJTSVpFIG5Db3B5TGVuLCBGWF9TVFJTSVpFIG5Db3B5SW5kZXgsIEZYX1NUUlNJWkUgbkV4dHJhTGVuKSBjb25zdDsKK307CitpbmxpbmUgQ0ZYX1dpZGVTdHJpbmdDOjpDRlhfV2lkZVN0cmluZ0MoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNyYykKK3sKKyAgICBtX1B0ciA9IChGWF9MUENXU1RSKXNyYzsKKyAgICBtX0xlbmd0aCA9IHNyYy5HZXRMZW5ndGgoKTsKK30KK2lubGluZSBDRlhfV2lkZVN0cmluZ0MmIENGWF9XaWRlU3RyaW5nQzo6b3BlcmF0b3IgPSAoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNyYykKK3sKKyAgICBtX1B0ciA9IChGWF9MUENXU1RSKXNyYzsKKyAgICBtX0xlbmd0aCA9IHNyYy5HZXRMZW5ndGgoKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK2lubGluZSBDRlhfV2lkZVN0cmluZyBvcGVyYXRvciArIChjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHN0cjEsIGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgc3RyMikKK3sKKyAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoc3RyMSwgc3RyMik7Cit9CitpbmxpbmUgQ0ZYX1dpZGVTdHJpbmcgb3BlcmF0b3IgKyAoY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzdHIxLCBGWF9MUENXU1RSIHN0cjIpCit7CisgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKHN0cjEsIHN0cjIpOworfQoraW5saW5lIENGWF9XaWRlU3RyaW5nIG9wZXJhdG9yICsgKEZYX0xQQ1dTVFIgc3RyMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzdHIyKQoreworICAgIHJldHVybiBDRlhfV2lkZVN0cmluZyhzdHIxLCBzdHIyKTsKK30KK2lubGluZSBDRlhfV2lkZVN0cmluZyBvcGVyYXRvciArIChjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHN0cjEsIEZYX1dDSEFSIGNoKQoreworICAgIHJldHVybiBDRlhfV2lkZVN0cmluZyhzdHIxLCBDRlhfV2lkZVN0cmluZ0MoY2gpKTsKK30KK2lubGluZSBDRlhfV2lkZVN0cmluZyBvcGVyYXRvciArIChGWF9XQ0hBUiBjaCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzdHIyKQoreworICAgIHJldHVybiBDRlhfV2lkZVN0cmluZyhjaCwgc3RyMik7Cit9CitpbmxpbmUgQ0ZYX1dpZGVTdHJpbmcgb3BlcmF0b3IgKyAoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cjEsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHIyKQoreworICAgIHJldHVybiBDRlhfV2lkZVN0cmluZyhzdHIxLCBzdHIyKTsKK30KK2lubGluZSBDRlhfV2lkZVN0cmluZyBvcGVyYXRvciArIChjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyMSwgRlhfV0NIQVIgY2gpCit7CisgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKHN0cjEsIENGWF9XaWRlU3RyaW5nQyhjaCkpOworfQoraW5saW5lIENGWF9XaWRlU3RyaW5nIG9wZXJhdG9yICsgKEZYX1dDSEFSIGNoLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyMikKK3sKKyAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoY2gsIHN0cjIpOworfQoraW5saW5lIENGWF9XaWRlU3RyaW5nIG9wZXJhdG9yICsgKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHIxLCBGWF9MUENXU1RSIHN0cjIpCit7CisgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKHN0cjEsIHN0cjIpOworfQoraW5saW5lIENGWF9XaWRlU3RyaW5nIG9wZXJhdG9yICsgKEZYX0xQQ1dTVFIgc3RyMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cjIpCit7CisgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKHN0cjEsIHN0cjIpOworfQoraW5saW5lIENGWF9XaWRlU3RyaW5nIG9wZXJhdG9yICsgKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHIxLCBjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHN0cjIpCit7CisgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKHN0cjEsIHN0cjIpOworfQoraW5saW5lIENGWF9XaWRlU3RyaW5nIG9wZXJhdG9yICsgKGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgc3RyMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cjIpCit7CisgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKHN0cjEsIHN0cjIpOworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHMxLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgczIpOworYm9vbCBvcGVyYXRvcj09KGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzMik7Citib29sIG9wZXJhdG9yPT0oY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHMyKTsKK2Jvb2wgb3BlcmF0b3I9PSAoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHMxLCBGWF9MUENXU1RSIHMyKTsKK2Jvb2wgb3BlcmF0b3I9PShGWF9MUENXU1RSIHMxLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgczIpOworYm9vbCBvcGVyYXRvciE9KGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHMyKTsKK2Jvb2wgb3BlcmF0b3IhPShjb25zdCBDRlhfV2lkZVN0cmluZyYgczEsIGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgczIpOworYm9vbCBvcGVyYXRvciE9KGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgczEsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzMik7Citib29sIG9wZXJhdG9yIT0gKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzMSwgRlhfTFBDV1NUUiBzMik7Citib29sIG9wZXJhdG9yIT0oRlhfTFBDV1NUUiBzMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHMyKTsKK0ZYX0ZMT0FUIEZYX2F0b2YoRlhfQlNUUiBzdHIpOwordm9pZCBGWF9hdG9udW0oRlhfQlNUUiBzdHIsIEZYX0JPT0wmIGJJbnRlZ2VyLCB2b2lkKiBwRGF0YSk7CitGWF9TVFJTSVpFIEZYX2Z0b2EoRlhfRkxPQVQgZiwgRlhfTFBTVFIgYnVmKTsKK0NGWF9CeXRlU3RyaW5nCUZYX1VURjhFbmNvZGUoRlhfTFBDV1NUUiBwd3NTdHIsIEZYX1NUUlNJWkUgbGVuKTsKK2lubGluZSBDRlhfQnl0ZVN0cmluZwlGWF9VVEY4RW5jb2RlKEZYX1dTVFIgd3NTdHIpCit7CisgICAgcmV0dXJuIEZYX1VURjhFbmNvZGUod3NTdHIuR2V0UHRyKCksIHdzU3RyLkdldExlbmd0aCgpKTsKK30KK2lubGluZSBDRlhfQnl0ZVN0cmluZwlGWF9VVEY4RW5jb2RlKGNvbnN0IENGWF9XaWRlU3RyaW5nICZ3c1N0cikKK3sKKyAgICByZXR1cm4gRlhfVVRGOEVuY29kZSgoRlhfTFBDV1NUUil3c1N0ciwgd3NTdHIuR2V0TGVuZ3RoKCkpOworfQorY2xhc3MgQ0ZYX0J5dGVTdHJpbmdMIDogcHVibGljIENGWF9CeXRlU3RyaW5nQworeworcHVibGljOgorICAgIENGWF9CeXRlU3RyaW5nTCgpIDogQ0ZYX0J5dGVTdHJpbmdDKCkge30KKyAgICB+Q0ZYX0J5dGVTdHJpbmdMKCkge30KKworICAgIHZvaWQJCUVtcHR5KElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpOworICAgIEZYX0xQU1RSCUFsbG9jQnVmZmVyKEZYX1NUUlNJWkUgbGVuZ3RoLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKTsKKworICAgIHZvaWQJCVNldChGWF9CU1RSIHNyYywgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcik7Cit9OworY2xhc3MgQ0ZYX1dpZGVTdHJpbmdMIDogcHVibGljIENGWF9XaWRlU3RyaW5nQworeworcHVibGljOgorICAgIENGWF9XaWRlU3RyaW5nTCgpIDogQ0ZYX1dpZGVTdHJpbmdDKCkge30KKyAgICB+Q0ZYX1dpZGVTdHJpbmdMKCkge30KKworICAgIHZvaWQJCUVtcHR5KElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpOworICAgIHZvaWQJCVNldChGWF9XU1RSIHNyYywgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcik7CisKKyAgICBpbnQJCQlHZXRJbnRlZ2VyKCkgY29uc3Q7CisgICAgRlhfRkxPQVQJR2V0RmxvYXQoKSBjb25zdDsKKworICAgIHZvaWQJCVRyaW1SaWdodChGWF9MUENXU1RSIGxwc3pUYXJnZXRzKTsKK307Cit2b2lkCUZYX1VURjhFbmNvZGUoRlhfTFBDV1NUUiBwd3NTdHIsIEZYX1NUUlNJWkUgbGVuLCBDRlhfQnl0ZVN0cmluZ0wgJnV0ZjhTdHIsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9pbmNsdWRlL2Z4Y3J0L2Z4X3N5c3RlbS5oIGIvY29yZS9pbmNsdWRlL2Z4Y3J0L2Z4X3N5c3RlbS5oCmluZGV4IGY3MmJlMGYuLjAwMjFjMTQgMTAwNjQ0Ci0tLSBhL2NvcmUvaW5jbHVkZS9meGNydC9meF9zeXN0ZW0uaAorKysgYi9jb3JlL2luY2x1ZGUvZnhjcnQvZnhfc3lzdGVtLmgKQEAgLTEsMjc5ICsxLDI3OSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlhfU1lTVEVNX0hfDQotI2RlZmluZSBfRlhfU1lTVEVNX0hfDQotI2RlZmluZSBfRlhfV0lOMzJfREVTS1RPUF8JCTENCi0jZGVmaW5lIF9GWF9MSU5VWF9ERVNLVE9QXwkJNA0KLSNkZWZpbmUgX0ZYX01BQ09TWF8JCQkJNw0KLSNkZWZpbmUgX0ZYX0FORFJPSURfCQkJMTINCi0jZGVmaW5lIF9GWE1fUExBVEZPUk1fV0lORE9XU18JCTENCi0jZGVmaW5lIF9GWE1fUExBVEZPUk1fTElOVVhfCQkyDQotI2RlZmluZSBfRlhNX1BMQVRGT1JNX0FQUExFXwkJMw0KLSNkZWZpbmUgX0ZYTV9QTEFURk9STV9BTkRST0lEXwkJNA0KLSNpZm5kZWYgX0ZYX09TXw0KLSNpZiBkZWZpbmVkKF9fQU5EUk9JRF9fKQ0KLSNkZWZpbmUgX0ZYX09TXyBfRlhfQU5EUk9JRF8NCi0jZGVmaW5lIF9GWE1fUExBVEZPUk1fIF9GWE1fUExBVEZPUk1fQU5EUk9JRF8NCi0jZWxpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lONjQpDQotI2RlZmluZSBfRlhfT1NfIF9GWF9XSU4zMl9ERVNLVE9QXw0KLSNkZWZpbmUgX0ZYTV9QTEFURk9STV8gX0ZYTV9QTEFURk9STV9XSU5ET1dTXw0KLSNlbGlmIGRlZmluZWQoX19saW51eF9fKQ0KLSNkZWZpbmUgX0ZYX09TXyBfRlhfTElOVVhfREVTS1RPUF8NCi0jZGVmaW5lIF9GWE1fUExBVEZPUk1fIF9GWE1fUExBVEZPUk1fTElOVVhfDQotI2VsaWYgZGVmaW5lZChfX0FQUExFX18pDQotI2RlZmluZSBfRlhfT1NfIF9GWF9NQUNPU1hfDQotI2RlZmluZSBfRlhNX1BMQVRGT1JNXyBfRlhNX1BMQVRGT1JNX0FQUExFXw0KLSNlbmRpZg0KLSNlbmRpZg0KLSNpZiAhZGVmaW5lZChfRlhfT1NfKSB8fCBfRlhfT1NfID09IDANCi0jZXJyb3IgU29ycnksIGNhbiBub3QgZmlndXJlIG91dCB3aGF0IE9TIHlvdSBhcmUgdGFyZ2V0aW5nIHRvLiBQbGVhc2Ugc3BlY2lmeSBfRlhfT1NfIG1hY3JvLg0KLSNlbmRpZg0KLSNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfDQotI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUw0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+DQotI2VuZGlmDQotI2RlZmluZSBfRlhfVzMyXwkJMQ0KLSNkZWZpbmUgX0ZYX1c2NF8JCTINCi0jaWZuZGVmIF9GWF9XT1JEU0laRV8NCi0jaWYgZGVmaW5lZChfV0lONjQpIHx8IGRlZmluZWQoX19hcm02NCkgfHwgZGVmaW5lZChfX2FybTY0X18pIHx8IGRlZmluZWQoX01fQU1ENjQpIHx8IGRlZmluZWQoX01fWDY0KSB8fCBkZWZpbmVkKF9NX0lBNjQpIHx8IGRlZmluZWQoX19wb3dlcnBjNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBfX1dPUkRTSVpFID09IDY0DQotI2RlZmluZSBfRlhfV09SRFNJWkVfCV9GWF9XNjRfDQotI2Vsc2UNCi0jZGVmaW5lIF9GWF9XT1JEU0laRV8JX0ZYX1czMl8NCi0jZW5kaWYNCi0jZW5kaWYNCi0jaW5jbHVkZSA8c3RkZGVmLmg+DQotI2luY2x1ZGUgPHN0ZGFyZy5oPg0KLSNpbmNsdWRlIDxzZXRqbXAuaD4NCi0jaW5jbHVkZSA8c3RkbGliLmg+DQotI2luY2x1ZGUgPHN0ZGlvLmg+DQotI2luY2x1ZGUgPHN0cmluZy5oPg0KLSNpbmNsdWRlIDxhc3NlcnQuaD4NCi0jaW5jbHVkZSA8d2NoYXIuaD4NCi0jaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8NCi0jaW5jbHVkZSA8bGlia2Vybi9PU0F0b21pYy5oPg0KLSNpZiBfRlhfT1NfID09IF9GWF9NQUNPU1hfDQotI2luY2x1ZGUgPENhcmJvbi9DYXJib24uaD4NCi0jZWxpZiBfRlhfT1NfID09IF9GWF9JT1NfDQotI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+DQotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4NCi0jZW5kaWYNCi0jZW5kaWYNCi0jaWZkZWYgX19jcGx1c3BsdXMNCi1leHRlcm4gIkMiIHsNCi0jZW5kaWYNCi10eXBlZGVmIHZvaWQqCQkJCQlGWF9MUFZPSUQ7DQotdHlwZWRlZiB2b2lkIGNvbnN0KgkJCQlGWF9MUENWT0lEOw0KLXR5cGVkZWYgdm9pZCoJCQkJCUZYX1BPU0lUSU9OOw0KLXR5cGVkZWYgc2lnbmVkIGNoYXIJCQkJRlhfSU5UODsNCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIJCQlGWF9VSU5UODsNCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIJCQlGWF9CWVRFOw0KLXR5cGVkZWYgdW5zaWduZWQgY2hhcioJCQlGWF9MUEJZVEU7DQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGNvbnN0KglGWF9MUENCWVRFOw0KLXR5cGVkZWYgc2hvcnQJCQkJCUZYX0lOVDE2Ow0KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQJCQlGWF9VSU5UMTY7DQotdHlwZWRlZiBzaG9ydAkJCQkJRlhfU0hPUlQ7DQotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJCUZYX1dPUkQ7DQotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCoJCQlGWF9MUFdPUkQ7DQotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBjb25zdCoJRlhfTFBDV09SRDsNCi10eXBlZGVmIGludAkJCQkJCUZYX0lOVDMyOw0KLXR5cGVkZWYgZmxvYXQJCQkJCUZYX0ZMT0FUOw0KLXR5cGVkZWYgaW50CQkJCQkJRlhfQk9PTDsNCi10eXBlZGVmIGludAkJCQkJCUZYX0VSUjsNCi0jZGVmaW5lIEZYX1NVQ0NFRURFRChTdGF0dXMpCSgoRlhfRVJSKShTdGF0dXMpID49IDApDQotI2RlZmluZSBGWF9GQUlMRUQoU3RhdHVzKQkJKChGWF9FUlIpKFN0YXR1cykgPCAwKQ0KLXR5cGVkZWYgY2hhcgkJCQkJRlhfQ0hBUjsNCi10eXBlZGVmIGNoYXIqCQkJCQlGWF9MUFNUUjsNCi10eXBlZGVmIGNoYXIgY29uc3QqCQkJCUZYX0xQQ1NUUjsNCi10eXBlZGVmIHVuc2lnbmVkIGludAkJRlhfRFdPUkQ7DQotdHlwZWRlZiB1bnNpZ25lZCBpbnQqCQlGWF9MUERXT1JEOw0KLSNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfDQotdHlwZWRlZiBfX2ludDY0CQkJCUZYX0lOVDY0Ow0KLXR5cGVkZWYgdW5zaWduZWQgX19pbnQ2NAlGWF9VSU5UNjQ7DQotI2Vsc2UNCi10eXBlZGVmIGxvbmcgbG9uZyBpbnQJCUZYX0lOVDY0Ow0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nCUZYX1VJTlQ2NDsNCi0jZW5kaWYNCi0jaWYgX0ZYX1dPUkRTSVpFXyA9PSBfRlhfVzY0Xw0KLXR5cGVkZWYgRlhfSU5UNjQJCQlGWF9JTlRQVFI7DQotdHlwZWRlZiBGWF9VSU5UNjQJCQlGWF9VSU5UUFRSOw0KLSNlbHNlDQotdHlwZWRlZiBpbnQJCQkJCUZYX0lOVFBUUjsNCi10eXBlZGVmIHVuc2lnbmVkIGludAkJRlhfVUlOVFBUUjsNCi0jZW5kaWYNCi10eXBlZGVmIHdjaGFyX3QJCQkJCUZYX1dDSEFSOw0KLXR5cGVkZWYgd2NoYXJfdCoJCQkJRlhfTFBXU1RSOw0KLXR5cGVkZWYgd2NoYXJfdCBjb25zdCoJCQlGWF9MUENXU1RSOw0KLXR5cGVkZWYgRlhfRFdPUkQJCQkJRlhfVUlOVDMyOw0KLXR5cGVkZWYgRlhfVUlOVDY0CQkJCUZYX1FXT1JEOw0KLSNkZWZpbmUgRlhfREVGSU5FSEFORExFKG5hbWUpCXR5cGVkZWYgc3RydWN0IF8jI25hbWUge0ZYX0xQVk9JRCBwRGF0YTt9ICogbmFtZTsNCi0jaWYgZGVmaW5lZChERUJVRykgJiYgIWRlZmluZWQoX0RFQlVHKQ0KLSNkZWZpbmUgX0RFQlVHDQotI2VuZGlmDQotI2lmbmRlZiBUUlVFDQotDQotI2RlZmluZSBUUlVFCTENCi0jZW5kaWYNCi0jaWZuZGVmIEZBTFNFDQotDQotI2RlZmluZSBGQUxTRQkwDQotI2VuZGlmDQotI2lmbmRlZiBOVUxMDQotDQotI2RlZmluZSBOVUxMCTANCi0jZW5kaWYNCi0jZGVmaW5lIEZYU1lTX2Fzc2VydCBhc3NlcnQNCi0jaWZuZGVmIEFTU0VSVA0KLSNpZmRlZiBfREVCVUcNCi0jZGVmaW5lIEFTU0VSVCBGWFNZU19hc3NlcnQNCi0jZWxzZQ0KLQ0KLSNkZWZpbmUgQVNTRVJUKGEpDQotI2VuZGlmDQotI2VuZGlmDQotI2RlZmluZSBGWF9NQVgoYSwgYikgKCgoYSkgPiAoYikpID8gKGEpIDogKGIpKQ0KLSNkZWZpbmUgRlhfTUlOKGEsIGIpICgoKGEpIDwgKGIpKSA/IChhKSA6IChiKSkNCi0jZGVmaW5lIEZYX1BJCTMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NWYNCi0jaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXw0KLSNkZWZpbmUgRlhTWVNfc25wcmludGYJX3NucHJpbnRmDQotI2Vsc2UNCi0jZGVmaW5lIEZYU1lTX3NucHJpbnRmCXNucHJpbnRmDQotI2VuZGlmDQotI2RlZmluZSBGWFNZU19zcHJpbnRmCXNwcmludGYNCi0jZGVmaW5lIEZYU1lTX3ZzcHJpbnRmCXZzcHJpbnRmDQotI2RlZmluZSBGWFNZU19zdHJjaHIJc3RyY2hyDQotI2RlZmluZSBGWFNZU19zdHJsZW4Jc3RybGVuDQotI2RlZmluZSBGWFNZU19zdHJuY21wCXN0cm5jbXANCi0jZGVmaW5lIEZYU1lTX3N0cmNtcAlzdHJjbXANCi0jZGVmaW5lIEZYU1lTX3N0cmNweQlzdHJjcHkNCi0jZGVmaW5lIEZYU1lTX3N0cm5jcHkJc3RybmNweQ0KLSNkZWZpbmUgRlhTWVNfc3Ryc3RyCXN0cnN0cg0KLSNkZWZpbmUgRlhTWVNfRklMRQkJRklMRQ0KLSNkZWZpbmUgRlhTWVNfZm9wZW4JCWZvcGVuDQotI2RlZmluZSBGWFNZU19mY2xvc2UJZmNsb3NlDQotI2RlZmluZSBGWFNZU19TRUVLX0VORAlTRUVLX0VORA0KLSNkZWZpbmUgRlhTWVNfU0VFS19TRVQJU0VFS19TRVQNCi0jZGVmaW5lIEZYU1lTX2ZzZWVrCQlmc2Vlaw0KLSNkZWZpbmUgRlhTWVNfZnRlbGwJCWZ0ZWxsDQotI2RlZmluZSBGWFNZU19mcmVhZAkJZnJlYWQNCi0jZGVmaW5lIEZYU1lTX2Z3cml0ZQlmd3JpdGUNCi0jZGVmaW5lIEZYU1lTX2ZwcmludGYJZnByaW50Zg0KLSNkZWZpbmUgRlhTWVNfZmZsdXNoCWZmbHVzaA0KLSNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfDQotI2lmZGVmIF9OQVRJVkVfV0NIQVJfVF9ERUZJTkVEDQotI2RlZmluZSBGWFNZU193Zm9wZW4oZiwgbSkgX3dmb3BlbigoY29uc3Qgd2NoYXJfdCopKGYpLCAoY29uc3Qgd2NoYXJfdCopKG0pKQ0KLSNlbHNlDQotI2RlZmluZSBGWFNZU193Zm9wZW4gX3dmb3Blbg0KLSNlbmRpZg0KLSNlbHNlDQotRlhTWVNfRklMRSogRlhTWVNfd2ZvcGVuKEZYX0xQQ1dTVFIgZmlsZW5hbWUsIEZYX0xQQ1dTVFIgbW9kZSk7DQotI2VuZGlmDQotDQotI2RlZmluZSBGWFNZU193Y3NsZW4Jd2NzbGVuDQotI2RlZmluZSBGWFNZU193Y3NjbXAJd2NzY21wDQotI2RlZmluZSBGWFNZU193Y3NjaHIJd2NzY2hyDQotI2RlZmluZSBGWFNZU193Y3NzdHIJd2Nzc3RyDQotI2RlZmluZSBGWFNZU193Y3NuY21wCXdjc25jbXANCi0jZGVmaW5lIEZYU1lTX3Zzd3ByaW50Zgl2c3dwcmludGYNCi0jZGVmaW5lIEZYU1lTX21ic3Rvd2NzCW1ic3Rvd2NzDQotI2RlZmluZSBGWFNZU193Y3N0b21icwl3Y3N0b21icw0KLSNkZWZpbmUgRlhTWVNfbWVtY21wCW1lbWNtcA0KLSNkZWZpbmUgRlhTWVNfbWVtY3B5CW1lbWNweQ0KLSNkZWZpbmUgRlhTWVNfbWVtbW92ZQltZW1tb3ZlDQotI2RlZmluZSBGWFNZU19tZW1zZXQJbWVtc2V0DQotI2RlZmluZSBGWFNZU19tZW1jaHIJbWVtY2hyDQotI2RlZmluZSBGWFNZU19xc29ydAkJcXNvcnQNCi0jZGVmaW5lIEZYU1lTX2JzZWFyY2gJYnNlYXJjaA0KLSNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfDQotI2RlZmluZSBGWFNZU19HZXRBQ1AgR2V0QUNQDQotI2RlZmluZSBGWFNZU19pdG9hIF9pdG9hDQotI2RlZmluZSBGWFNZU19zdHJsd3IgX3N0cmx3cg0KLSNkZWZpbmUgRlhTWVNfc3RydXByIF9zdHJ1cHINCi0jZGVmaW5lIEZYU1lTX3N0cmljbXAgX3N0cmljbXANCi0jaWZkZWYgX05BVElWRV9XQ0hBUl9UX0RFRklORUQNCi0jZGVmaW5lIEZYU1lTX3djc2ljbXAoc3RyMSwgc3RyMikgX3djc2ljbXAoKHdjaGFyX3QqKShzdHIxKSwgKHdjaGFyX3QqKShzdHIyKSkNCi0jZGVmaW5lIEZYU1lTX1dpZGVDaGFyVG9NdWx0aUJ5dGUocDEsIHAyLCBwMywgcDQsIHA1LCBwNiwgcDcsIHA4KSBXaWRlQ2hhclRvTXVsdGlCeXRlKHAxLCBwMiwgKGNvbnN0IHdjaGFyX3QqKShwMyksIHA0LCBwNSwgcDYsIHA3LCBwOCkNCi0jZGVmaW5lIEZYU1lTX011bHRpQnl0ZVRvV2lkZUNoYXIocDEsIHAyLCBwMywgcDQsIHA1LCBwNikgTXVsdGlCeXRlVG9XaWRlQ2hhcihwMSwgcDIsIHAzLCBwNCwgKHdjaGFyX3QqKShwNSksIHA2KQ0KLSNkZWZpbmUgRlhTWVNfd2NzbHdyKHN0cikgX3djc2x3cigod2NoYXJfdCopKHN0cikpDQotI2RlZmluZSBGWFNZU193Y3N1cHIoc3RyKSBfd2NzdXByKCh3Y2hhcl90Kikoc3RyKSkNCi0jZWxzZQ0KLSNkZWZpbmUgRlhTWVNfd2NzaWNtcCBfd2NzaWNtcA0KLSNkZWZpbmUgRlhTWVNfV2lkZUNoYXJUb011bHRpQnl0ZSBXaWRlQ2hhclRvTXVsdGlCeXRlDQotI2RlZmluZSBGWFNZU19NdWx0aUJ5dGVUb1dpZGVDaGFyIE11bHRpQnl0ZVRvV2lkZUNoYXINCi0jZGVmaW5lIEZYU1lTX3djc2x3ciBfd2NzbHdyDQotI2RlZmluZSBGWFNZU193Y3N1cHIgX3djc3Vwcg0KLSNlbmRpZg0KLSNkZWZpbmUgRlhTWVNfR2V0RnVsbFBhdGhOYW1lIEdldEZ1bGxQYXRoTmFtZQ0KLSNkZWZpbmUgRlhTWVNfR2V0TW9kdWxlRmlsZU5hbWUgR2V0TW9kdWxlRmlsZU5hbWUNCi0jZWxzZQ0KLWludAkJCUZYU1lTX0dldEFDUCh2b2lkKTsNCi1jaGFyKgkJRlhTWVNfaXRvYShpbnQgdmFsdWUsIGNoYXIqIHN0cmluZywgaW50IHJhZGl4KTsNCi1pbnQJCQlGWFNZU19XaWRlQ2hhclRvTXVsdGlCeXRlKEZYX0RXT1JEIGNvZGVwYWdlLCBGWF9EV09SRCBkd0ZsYWdzLCBjb25zdCB3Y2hhcl90KiB3c3RyLCBpbnQgd2xlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIGJ1ZiwgaW50IGJ1ZmxlbiwgY29uc3QgY2hhciogZGVmYXVsdF9zdHIsIGludCogcFVzZURlZmF1bHQpOw0KLWludAkJCUZYU1lTX011bHRpQnl0ZVRvV2lkZUNoYXIoRlhfRFdPUkQgY29kZXBhZ2UsIEZYX0RXT1JEIGR3RmxhZ3MsIGNvbnN0IGNoYXIqIGJzdHIsIGludCBibGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCogYnVmLCBpbnQgYnVmbGVuKTsNCi1GWF9EV09SRAlGWFNZU19HZXRGdWxsUGF0aE5hbWUoY29uc3QgY2hhciogZmlsZW5hbWUsIEZYX0RXT1JEIGJ1ZmxlbiwgY2hhciogYnVmLCBjaGFyKiogZmlsZXBhcnQpOw0KLUZYX0RXT1JECUZYU1lTX0dldE1vZHVsZUZpbGVOYW1lKHZvaWQqIGhNb2R1bGUsIGNoYXIqIGJ1ZiwgRlhfRFdPUkQgYnVmc2l6ZSk7DQotY2hhcioJCUZYU1lTX3N0cmx3cihjaGFyKiBzdHIpOw0KLWNoYXIqCQlGWFNZU19zdHJ1cHIoY2hhciogc3RyKTsNCi1pbnQJCQlGWFNZU19zdHJpY21wKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7DQotaW50CQkJRlhTWVNfd2NzaWNtcChjb25zdCB3Y2hhcl90ICpzdHJpbmcxLCBjb25zdCB3Y2hhcl90ICpzdHJpbmcyKTsNCi13Y2hhcl90KglGWFNZU193Y3Nsd3Iod2NoYXJfdCogc3RyKTsNCi13Y2hhcl90KglGWFNZU193Y3N1cHIod2NoYXJfdCogc3RyKTsNCi0jZW5kaWYNCi0jZGVmaW5lIEZYU1lTX21lbWNweTMyCQlGWFNZU19tZW1jcHkNCi0jZGVmaW5lIEZYU1lTX21lbWNtcDMyCQlGWFNZU19tZW1jbXANCi0jZGVmaW5lIEZYU1lTX21lbXNldDMyCQlGWFNZU19tZW1zZXQNCi0jZGVmaW5lIEZYU1lTX21lbXNldDgJCUZYU1lTX21lbXNldA0KLSNkZWZpbmUgRlhTWVNfbWVtbW92ZTMyCQlGWFNZU19tZW1tb3ZlDQotI2lmZGVmIF9fY3BsdXNwbHVzDQotfQ0KLSNlbmRpZg0KLSNpbmNsdWRlIDxtYXRoLmg+DQotI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18NCi0jZGVmaW5lIEZYU1lTX3BvdyhhLCBiKQkJKEZYX0ZMT0FUKXBvd2YoYSwgYikNCi0jZWxzZQ0KLSNkZWZpbmUgRlhTWVNfcG93KGEsIGIpCQkoRlhfRkxPQVQpcG93KGEsIGIpDQotI2VuZGlmDQotI2RlZmluZSBGWFNZU19zcXJ0KGEpCQkoRlhfRkxPQVQpc3FydChhKQ0KLSNkZWZpbmUgRlhTWVNfZmFicyhhKQkJKEZYX0ZMT0FUKWZhYnMoYSkNCi0jZGVmaW5lIEZYU1lTX2F0YW4yKGEsIGIpCShGWF9GTE9BVClhdGFuMihhLCBiKQ0KLSNkZWZpbmUgRlhTWVNfY2VpbChhKQkJKEZYX0ZMT0FUKWNlaWwoYSkNCi0jZGVmaW5lIEZYU1lTX2Zsb29yKGEpCQkoRlhfRkxPQVQpZmxvb3IoYSkNCi0jZGVmaW5lIEZYU1lTX2NvcyhhKQkJKEZYX0ZMT0FUKWNvcyhhKQ0KLSNkZWZpbmUgRlhTWVNfYWNvcyhhKQkJKEZYX0ZMT0FUKWFjb3MoYSkNCi0jZGVmaW5lIEZYU1lTX3NpbihhKQkJKEZYX0ZMT0FUKXNpbihhKQ0KLSNkZWZpbmUgRlhTWVNfbG9nKGEpCQkoRlhfRkxPQVQpbG9nKGEpDQotI2RlZmluZSBGWFNZU19sb2cxMChhKQkJKEZYX0ZMT0FUKWxvZzEwKGEpDQotI2RlZmluZSBGWFNZU19mbW9kKGEsIGIpCShGWF9GTE9BVClmbW9kKGEsIGIpDQotI2RlZmluZSBGWFNZU19hYnMJCQlhYnMNCi0jaWZkZWYgX19jcGx1c3BsdXMNCi1leHRlcm4gIkMiIHsNCi0jZW5kaWYNCi0jZGVmaW5lIF9GWF9MU0JfRklSU1RfDQotI2RlZmluZSBGWERXT1JEX0ZST01fTFNCRklSU1QoaSkJKGkpDQotI2RlZmluZSBGWERXT1JEX0ZST01fTVNCRklSU1QoaSkJKCgoRlhfQllURSkoaSkgPDwgMjQpIHwgKChGWF9CWVRFKSgoaSkgPj4gOCkgPDwgMTYpIHwgKChGWF9CWVRFKSgoaSkgPj4gMTYpIDw8IDgpIHwgKEZYX0JZVEUpKChpKSA+PiAyNCkpDQotI2RlZmluZSBGWERXT1JEX0dFVF9MU0JGSVJTVChwKQkJKCgoKEZYX0xQQllURSkocCkpWzNdIDw8IDI0KSB8ICgoKEZYX0xQQllURSkocCkpWzJdIDw8IDE2KSB8ICgoKEZYX0xQQllURSkocCkpWzFdIDw8IDgpIHwgKCgoRlhfTFBCWVRFKShwKSlbMF0pKQ0KLSNkZWZpbmUgRlhEV09SRF9HRVRfTVNCRklSU1QocCkgKCgoKEZYX0xQQllURSkocCkpWzBdIDw8IDI0KSB8ICgoKEZYX0xQQllURSkocCkpWzFdIDw8IDE2KSB8ICgoKEZYX0xQQllURSkocCkpWzJdIDw8IDgpIHwgKCgoRlhfTFBCWVRFKShwKSlbM10pKQ0KLSNkZWZpbmUgRlhTWVNfSElCWVRFKHdvcmQpCSgoRlhfQllURSkoKHdvcmQpID4+IDgpKQ0KLSNkZWZpbmUgRlhTWVNfTE9CWVRFKHdvcmQpCSgoRlhfQllURSkod29yZCkpDQotI2RlZmluZSBGWFNZU19ISVdPUkQoZHdvcmQpCSgoRlhfV09SRCkoKGR3b3JkKSA+PiAxNikpDQotI2RlZmluZSBGWFNZU19MT1dPUkQoZHdvcmQpCSgoRlhfV09SRCkoZHdvcmQpKQ0KLUZYX0lOVDMyCUZYU1lTX2F0b2koRlhfTFBDU1RSIHN0cik7DQotRlhfSU5UMzIJRlhTWVNfd3RvaShGWF9MUENXU1RSIHN0cik7DQotRlhfSU5UNjQJRlhTWVNfYXRvaTY0KEZYX0xQQ1NUUiBzdHIpOw0KLUZYX0lOVDY0CUZYU1lTX3d0b2k2NChGWF9MUENXU1RSIHN0cik7DQotRlhfTFBDU1RSCUZYU1lTX2k2NHRvYShGWF9JTlQ2NCB2YWx1ZSwgRlhfTFBTVFIgc3RyLCBpbnQgcmFkaXgpOw0KLUZYX0xQQ1dTVFIJRlhTWVNfaTY0dG93KEZYX0lOVDY0IHZhbHVlLCBGWF9MUFdTVFIgc3RyLCBpbnQgcmFkaXgpOw0KLWludAkJCUZYU1lTX3JvdW5kKEZYX0ZMT0FUIGYpOw0KLSNkZWZpbmUJCUZYU1lTX011bChhLCBiKSAoKGEpICogKGIpKQ0KLSNkZWZpbmUJCUZYU1lTX0RpdihhLCBiKSAoKGEpIC8gKGIpKQ0KLSNkZWZpbmUJCUZYU1lTX011bERpdihhLCBiLCBjKSAoKGEpICogKGIpIC8gKGMpKQ0KLSNkZWZpbmUJCUZYU1lTX3NxcnQyKGEsIGIpIChGWF9GTE9BVClGWFNZU19zcXJ0KChhKSooYSkgKyAoYikqKGIpKQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX07DQotI2VuZGlmDQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlhfU1lTVEVNX0hfCisjZGVmaW5lIF9GWF9TWVNURU1fSF8KKyNkZWZpbmUgX0ZYX1dJTjMyX0RFU0tUT1BfCQkxCisjZGVmaW5lIF9GWF9MSU5VWF9ERVNLVE9QXwkJNAorI2RlZmluZSBfRlhfTUFDT1NYXwkJCQk3CisjZGVmaW5lIF9GWF9BTkRST0lEXwkJCTEyCisjZGVmaW5lIF9GWE1fUExBVEZPUk1fV0lORE9XU18JCTEKKyNkZWZpbmUgX0ZYTV9QTEFURk9STV9MSU5VWF8JCTIKKyNkZWZpbmUgX0ZYTV9QTEFURk9STV9BUFBMRV8JCTMKKyNkZWZpbmUgX0ZYTV9QTEFURk9STV9BTkRST0lEXwkJNAorI2lmbmRlZiBfRlhfT1NfCisjaWYgZGVmaW5lZChfX0FORFJPSURfXykKKyNkZWZpbmUgX0ZYX09TXyBfRlhfQU5EUk9JRF8KKyNkZWZpbmUgX0ZYTV9QTEFURk9STV8gX0ZYTV9QTEFURk9STV9BTkRST0lEXworI2VsaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjY0KQorI2RlZmluZSBfRlhfT1NfIF9GWF9XSU4zMl9ERVNLVE9QXworI2RlZmluZSBfRlhNX1BMQVRGT1JNXyBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfCisjZWxpZiBkZWZpbmVkKF9fbGludXhfXykKKyNkZWZpbmUgX0ZYX09TXyBfRlhfTElOVVhfREVTS1RPUF8KKyNkZWZpbmUgX0ZYTV9QTEFURk9STV8gX0ZYTV9QTEFURk9STV9MSU5VWF8KKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQorI2RlZmluZSBfRlhfT1NfIF9GWF9NQUNPU1hfCisjZGVmaW5lIF9GWE1fUExBVEZPUk1fIF9GWE1fUExBVEZPUk1fQVBQTEVfCisjZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9GWF9PU18pIHx8IF9GWF9PU18gPT0gMAorI2Vycm9yIFNvcnJ5LCBjYW4gbm90IGZpZ3VyZSBvdXQgd2hhdCBPUyB5b3UgYXJlIHRhcmdldGluZyB0by4gUGxlYXNlIHNwZWNpZnkgX0ZYX09TXyBtYWNyby4KKyNlbmRpZgorI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18KKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYKKyNkZWZpbmUgX0ZYX1czMl8JCTEKKyNkZWZpbmUgX0ZYX1c2NF8JCTIKKyNpZm5kZWYgX0ZYX1dPUkRTSVpFXworI2lmIGRlZmluZWQoX1dJTjY0KSB8fCBkZWZpbmVkKF9fYXJtNjQpIHx8IGRlZmluZWQoX19hcm02NF9fKSB8fCBkZWZpbmVkKF9NX0FNRDY0KSB8fCBkZWZpbmVkKF9NX1g2NCkgfHwgZGVmaW5lZChfTV9JQTY0KSB8fCBkZWZpbmVkKF9fcG93ZXJwYzY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgX19XT1JEU0laRSA9PSA2NAorI2RlZmluZSBfRlhfV09SRFNJWkVfCV9GWF9XNjRfCisjZWxzZQorI2RlZmluZSBfRlhfV09SRFNJWkVfCV9GWF9XMzJfCisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHNldGptcC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8d2NoYXIuaD4KKyNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXworI2luY2x1ZGUgPGxpYmtlcm4vT1NBdG9taWMuaD4KKyNpZiBfRlhfT1NfID09IF9GWF9NQUNPU1hfCisjaW5jbHVkZSA8Q2FyYm9uL0NhcmJvbi5oPgorI2VsaWYgX0ZYX09TXyA9PSBfRlhfSU9TXworI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK3R5cGVkZWYgdm9pZCoJCQkJCUZYX0xQVk9JRDsKK3R5cGVkZWYgdm9pZCBjb25zdCoJCQkJRlhfTFBDVk9JRDsKK3R5cGVkZWYgdm9pZCoJCQkJCUZYX1BPU0lUSU9OOwordHlwZWRlZiBzaWduZWQgY2hhcgkJCQlGWF9JTlQ4OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyCQkJRlhfVUlOVDg7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIJCQlGWF9CWVRFOwordHlwZWRlZiB1bnNpZ25lZCBjaGFyKgkJCUZYX0xQQllURTsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBjb25zdCoJRlhfTFBDQllURTsKK3R5cGVkZWYgc2hvcnQJCQkJCUZYX0lOVDE2OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJCUZYX1VJTlQxNjsKK3R5cGVkZWYgc2hvcnQJCQkJCUZYX1NIT1JUOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAkJCUZYX1dPUkQ7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0KgkJCUZYX0xQV09SRDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgY29uc3QqCUZYX0xQQ1dPUkQ7Cit0eXBlZGVmIGludAkJCQkJCUZYX0lOVDMyOwordHlwZWRlZiBmbG9hdAkJCQkJRlhfRkxPQVQ7Cit0eXBlZGVmIGludAkJCQkJCUZYX0JPT0w7Cit0eXBlZGVmIGludAkJCQkJCUZYX0VSUjsKKyNkZWZpbmUgRlhfU1VDQ0VFREVEKFN0YXR1cykJKChGWF9FUlIpKFN0YXR1cykgPj0gMCkKKyNkZWZpbmUgRlhfRkFJTEVEKFN0YXR1cykJCSgoRlhfRVJSKShTdGF0dXMpIDwgMCkKK3R5cGVkZWYgY2hhcgkJCQkJRlhfQ0hBUjsKK3R5cGVkZWYgY2hhcioJCQkJCUZYX0xQU1RSOwordHlwZWRlZiBjaGFyIGNvbnN0KgkJCQlGWF9MUENTVFI7Cit0eXBlZGVmIHVuc2lnbmVkIGludAkJRlhfRFdPUkQ7Cit0eXBlZGVmIHVuc2lnbmVkIGludCoJCUZYX0xQRFdPUkQ7CisjaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXwordHlwZWRlZiBfX2ludDY0CQkJCUZYX0lOVDY0OwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0CUZYX1VJTlQ2NDsKKyNlbHNlCit0eXBlZGVmIGxvbmcgbG9uZyBpbnQJCUZYX0lOVDY0OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcJRlhfVUlOVDY0OworI2VuZGlmCisjaWYgX0ZYX1dPUkRTSVpFXyA9PSBfRlhfVzY0XwordHlwZWRlZiBGWF9JTlQ2NAkJCUZYX0lOVFBUUjsKK3R5cGVkZWYgRlhfVUlOVDY0CQkJRlhfVUlOVFBUUjsKKyNlbHNlCit0eXBlZGVmIGludAkJCQkJRlhfSU5UUFRSOwordHlwZWRlZiB1bnNpZ25lZCBpbnQJCUZYX1VJTlRQVFI7CisjZW5kaWYKK3R5cGVkZWYgd2NoYXJfdAkJCQkJRlhfV0NIQVI7Cit0eXBlZGVmIHdjaGFyX3QqCQkJCUZYX0xQV1NUUjsKK3R5cGVkZWYgd2NoYXJfdCBjb25zdCoJCQlGWF9MUENXU1RSOwordHlwZWRlZiBGWF9EV09SRAkJCQlGWF9VSU5UMzI7Cit0eXBlZGVmIEZYX1VJTlQ2NAkJCQlGWF9RV09SRDsKKyNkZWZpbmUgRlhfREVGSU5FSEFORExFKG5hbWUpCXR5cGVkZWYgc3RydWN0IF8jI25hbWUge0ZYX0xQVk9JRCBwRGF0YTt9ICogbmFtZTsKKyNpZiBkZWZpbmVkKERFQlVHKSAmJiAhZGVmaW5lZChfREVCVUcpCisjZGVmaW5lIF9ERUJVRworI2VuZGlmCisjaWZuZGVmIFRSVUUKKworI2RlZmluZSBUUlVFCTEKKyNlbmRpZgorI2lmbmRlZiBGQUxTRQorCisjZGVmaW5lIEZBTFNFCTAKKyNlbmRpZgorI2lmbmRlZiBOVUxMCisKKyNkZWZpbmUgTlVMTAkwCisjZW5kaWYKKyNkZWZpbmUgRlhTWVNfYXNzZXJ0IGFzc2VydAorI2lmbmRlZiBBU1NFUlQKKyNpZmRlZiBfREVCVUcKKyNkZWZpbmUgQVNTRVJUIEZYU1lTX2Fzc2VydAorI2Vsc2UKKworI2RlZmluZSBBU1NFUlQoYSkKKyNlbmRpZgorI2VuZGlmCisjZGVmaW5lIEZYX01BWChhLCBiKSAoKChhKSA+IChiKSkgPyAoYSkgOiAoYikpCisjZGVmaW5lIEZYX01JTihhLCBiKSAoKChhKSA8IChiKSkgPyAoYSkgOiAoYikpCisjZGVmaW5lIEZYX1BJCTMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NWYKKyNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfCisjZGVmaW5lIEZYU1lTX3NucHJpbnRmCV9zbnByaW50ZgorI2Vsc2UKKyNkZWZpbmUgRlhTWVNfc25wcmludGYJc25wcmludGYKKyNlbmRpZgorI2RlZmluZSBGWFNZU19zcHJpbnRmCXNwcmludGYKKyNkZWZpbmUgRlhTWVNfdnNwcmludGYJdnNwcmludGYKKyNkZWZpbmUgRlhTWVNfc3RyY2hyCXN0cmNocgorI2RlZmluZSBGWFNZU19zdHJsZW4Jc3RybGVuCisjZGVmaW5lIEZYU1lTX3N0cm5jbXAJc3RybmNtcAorI2RlZmluZSBGWFNZU19zdHJjbXAJc3RyY21wCisjZGVmaW5lIEZYU1lTX3N0cmNweQlzdHJjcHkKKyNkZWZpbmUgRlhTWVNfc3RybmNweQlzdHJuY3B5CisjZGVmaW5lIEZYU1lTX3N0cnN0cglzdHJzdHIKKyNkZWZpbmUgRlhTWVNfRklMRQkJRklMRQorI2RlZmluZSBGWFNZU19mb3BlbgkJZm9wZW4KKyNkZWZpbmUgRlhTWVNfZmNsb3NlCWZjbG9zZQorI2RlZmluZSBGWFNZU19TRUVLX0VORAlTRUVLX0VORAorI2RlZmluZSBGWFNZU19TRUVLX1NFVAlTRUVLX1NFVAorI2RlZmluZSBGWFNZU19mc2VlawkJZnNlZWsKKyNkZWZpbmUgRlhTWVNfZnRlbGwJCWZ0ZWxsCisjZGVmaW5lIEZYU1lTX2ZyZWFkCQlmcmVhZAorI2RlZmluZSBGWFNZU19md3JpdGUJZndyaXRlCisjZGVmaW5lIEZYU1lTX2ZwcmludGYJZnByaW50ZgorI2RlZmluZSBGWFNZU19mZmx1c2gJZmZsdXNoCisjaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXworI2lmZGVmIF9OQVRJVkVfV0NIQVJfVF9ERUZJTkVECisjZGVmaW5lIEZYU1lTX3dmb3BlbihmLCBtKSBfd2ZvcGVuKChjb25zdCB3Y2hhcl90KikoZiksIChjb25zdCB3Y2hhcl90KikobSkpCisjZWxzZQorI2RlZmluZSBGWFNZU193Zm9wZW4gX3dmb3BlbgorI2VuZGlmCisjZWxzZQorRlhTWVNfRklMRSogRlhTWVNfd2ZvcGVuKEZYX0xQQ1dTVFIgZmlsZW5hbWUsIEZYX0xQQ1dTVFIgbW9kZSk7CisjZW5kaWYKKworI2RlZmluZSBGWFNZU193Y3NsZW4Jd2NzbGVuCisjZGVmaW5lIEZYU1lTX3djc2NtcAl3Y3NjbXAKKyNkZWZpbmUgRlhTWVNfd2NzY2hyCXdjc2NocgorI2RlZmluZSBGWFNZU193Y3NzdHIJd2Nzc3RyCisjZGVmaW5lIEZYU1lTX3djc25jbXAJd2NzbmNtcAorI2RlZmluZSBGWFNZU192c3dwcmludGYJdnN3cHJpbnRmCisjZGVmaW5lIEZYU1lTX21ic3Rvd2NzCW1ic3Rvd2NzCisjZGVmaW5lIEZYU1lTX3djc3RvbWJzCXdjc3RvbWJzCisjZGVmaW5lIEZYU1lTX21lbWNtcAltZW1jbXAKKyNkZWZpbmUgRlhTWVNfbWVtY3B5CW1lbWNweQorI2RlZmluZSBGWFNZU19tZW1tb3ZlCW1lbW1vdmUKKyNkZWZpbmUgRlhTWVNfbWVtc2V0CW1lbXNldAorI2RlZmluZSBGWFNZU19tZW1jaHIJbWVtY2hyCisjZGVmaW5lIEZYU1lTX3Fzb3J0CQlxc29ydAorI2RlZmluZSBGWFNZU19ic2VhcmNoCWJzZWFyY2gKKyNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfCisjZGVmaW5lIEZYU1lTX0dldEFDUCBHZXRBQ1AKKyNkZWZpbmUgRlhTWVNfaXRvYSBfaXRvYQorI2RlZmluZSBGWFNZU19zdHJsd3IgX3N0cmx3cgorI2RlZmluZSBGWFNZU19zdHJ1cHIgX3N0cnVwcgorI2RlZmluZSBGWFNZU19zdHJpY21wIF9zdHJpY21wCisjaWZkZWYgX05BVElWRV9XQ0hBUl9UX0RFRklORUQKKyNkZWZpbmUgRlhTWVNfd2NzaWNtcChzdHIxLCBzdHIyKSBfd2NzaWNtcCgod2NoYXJfdCopKHN0cjEpLCAod2NoYXJfdCopKHN0cjIpKQorI2RlZmluZSBGWFNZU19XaWRlQ2hhclRvTXVsdGlCeXRlKHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYsIHA3LCBwOCkgV2lkZUNoYXJUb011bHRpQnl0ZShwMSwgcDIsIChjb25zdCB3Y2hhcl90KikocDMpLCBwNCwgcDUsIHA2LCBwNywgcDgpCisjZGVmaW5lIEZYU1lTX011bHRpQnl0ZVRvV2lkZUNoYXIocDEsIHAyLCBwMywgcDQsIHA1LCBwNikgTXVsdGlCeXRlVG9XaWRlQ2hhcihwMSwgcDIsIHAzLCBwNCwgKHdjaGFyX3QqKShwNSksIHA2KQorI2RlZmluZSBGWFNZU193Y3Nsd3Ioc3RyKSBfd2NzbHdyKCh3Y2hhcl90Kikoc3RyKSkKKyNkZWZpbmUgRlhTWVNfd2NzdXByKHN0cikgX3djc3Vwcigod2NoYXJfdCopKHN0cikpCisjZWxzZQorI2RlZmluZSBGWFNZU193Y3NpY21wIF93Y3NpY21wCisjZGVmaW5lIEZYU1lTX1dpZGVDaGFyVG9NdWx0aUJ5dGUgV2lkZUNoYXJUb011bHRpQnl0ZQorI2RlZmluZSBGWFNZU19NdWx0aUJ5dGVUb1dpZGVDaGFyIE11bHRpQnl0ZVRvV2lkZUNoYXIKKyNkZWZpbmUgRlhTWVNfd2NzbHdyIF93Y3Nsd3IKKyNkZWZpbmUgRlhTWVNfd2NzdXByIF93Y3N1cHIKKyNlbmRpZgorI2RlZmluZSBGWFNZU19HZXRGdWxsUGF0aE5hbWUgR2V0RnVsbFBhdGhOYW1lCisjZGVmaW5lIEZYU1lTX0dldE1vZHVsZUZpbGVOYW1lIEdldE1vZHVsZUZpbGVOYW1lCisjZWxzZQoraW50CQkJRlhTWVNfR2V0QUNQKHZvaWQpOworY2hhcioJCUZYU1lTX2l0b2EoaW50IHZhbHVlLCBjaGFyKiBzdHJpbmcsIGludCByYWRpeCk7CitpbnQJCQlGWFNZU19XaWRlQ2hhclRvTXVsdGlCeXRlKEZYX0RXT1JEIGNvZGVwYWdlLCBGWF9EV09SRCBkd0ZsYWdzLCBjb25zdCB3Y2hhcl90KiB3c3RyLCBpbnQgd2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogYnVmLCBpbnQgYnVmbGVuLCBjb25zdCBjaGFyKiBkZWZhdWx0X3N0ciwgaW50KiBwVXNlRGVmYXVsdCk7CitpbnQJCQlGWFNZU19NdWx0aUJ5dGVUb1dpZGVDaGFyKEZYX0RXT1JEIGNvZGVwYWdlLCBGWF9EV09SRCBkd0ZsYWdzLCBjb25zdCBjaGFyKiBic3RyLCBpbnQgYmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCogYnVmLCBpbnQgYnVmbGVuKTsKK0ZYX0RXT1JECUZYU1lTX0dldEZ1bGxQYXRoTmFtZShjb25zdCBjaGFyKiBmaWxlbmFtZSwgRlhfRFdPUkQgYnVmbGVuLCBjaGFyKiBidWYsIGNoYXIqKiBmaWxlcGFydCk7CitGWF9EV09SRAlGWFNZU19HZXRNb2R1bGVGaWxlTmFtZSh2b2lkKiBoTW9kdWxlLCBjaGFyKiBidWYsIEZYX0RXT1JEIGJ1ZnNpemUpOworY2hhcioJCUZYU1lTX3N0cmx3cihjaGFyKiBzdHIpOworY2hhcioJCUZYU1lTX3N0cnVwcihjaGFyKiBzdHIpOworaW50CQkJRlhTWVNfc3RyaWNtcChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOworaW50CQkJRlhTWVNfd2NzaWNtcChjb25zdCB3Y2hhcl90ICpzdHJpbmcxLCBjb25zdCB3Y2hhcl90ICpzdHJpbmcyKTsKK3djaGFyX3QqCUZYU1lTX3djc2x3cih3Y2hhcl90KiBzdHIpOword2NoYXJfdCoJRlhTWVNfd2NzdXByKHdjaGFyX3QqIHN0cik7CisjZW5kaWYKKyNkZWZpbmUgRlhTWVNfbWVtY3B5MzIJCUZYU1lTX21lbWNweQorI2RlZmluZSBGWFNZU19tZW1jbXAzMgkJRlhTWVNfbWVtY21wCisjZGVmaW5lIEZYU1lTX21lbXNldDMyCQlGWFNZU19tZW1zZXQKKyNkZWZpbmUgRlhTWVNfbWVtc2V0OAkJRlhTWVNfbWVtc2V0CisjZGVmaW5lIEZYU1lTX21lbW1vdmUzMgkJRlhTWVNfbWVtbW92ZQorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNpbmNsdWRlIDxtYXRoLmg+CisjaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXworI2RlZmluZSBGWFNZU19wb3coYSwgYikJCShGWF9GTE9BVClwb3dmKGEsIGIpCisjZWxzZQorI2RlZmluZSBGWFNZU19wb3coYSwgYikJCShGWF9GTE9BVClwb3coYSwgYikKKyNlbmRpZgorI2RlZmluZSBGWFNZU19zcXJ0KGEpCQkoRlhfRkxPQVQpc3FydChhKQorI2RlZmluZSBGWFNZU19mYWJzKGEpCQkoRlhfRkxPQVQpZmFicyhhKQorI2RlZmluZSBGWFNZU19hdGFuMihhLCBiKQkoRlhfRkxPQVQpYXRhbjIoYSwgYikKKyNkZWZpbmUgRlhTWVNfY2VpbChhKQkJKEZYX0ZMT0FUKWNlaWwoYSkKKyNkZWZpbmUgRlhTWVNfZmxvb3IoYSkJCShGWF9GTE9BVClmbG9vcihhKQorI2RlZmluZSBGWFNZU19jb3MoYSkJCShGWF9GTE9BVCljb3MoYSkKKyNkZWZpbmUgRlhTWVNfYWNvcyhhKQkJKEZYX0ZMT0FUKWFjb3MoYSkKKyNkZWZpbmUgRlhTWVNfc2luKGEpCQkoRlhfRkxPQVQpc2luKGEpCisjZGVmaW5lIEZYU1lTX2xvZyhhKQkJKEZYX0ZMT0FUKWxvZyhhKQorI2RlZmluZSBGWFNZU19sb2cxMChhKQkJKEZYX0ZMT0FUKWxvZzEwKGEpCisjZGVmaW5lIEZYU1lTX2Ztb2QoYSwgYikJKEZYX0ZMT0FUKWZtb2QoYSwgYikKKyNkZWZpbmUgRlhTWVNfYWJzCQkJYWJzCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisjZGVmaW5lIF9GWF9MU0JfRklSU1RfCisjZGVmaW5lIEZYRFdPUkRfRlJPTV9MU0JGSVJTVChpKQkoaSkKKyNkZWZpbmUgRlhEV09SRF9GUk9NX01TQkZJUlNUKGkpCSgoKEZYX0JZVEUpKGkpIDw8IDI0KSB8ICgoRlhfQllURSkoKGkpID4+IDgpIDw8IDE2KSB8ICgoRlhfQllURSkoKGkpID4+IDE2KSA8PCA4KSB8IChGWF9CWVRFKSgoaSkgPj4gMjQpKQorI2RlZmluZSBGWERXT1JEX0dFVF9MU0JGSVJTVChwKQkJKCgoKEZYX0xQQllURSkocCkpWzNdIDw8IDI0KSB8ICgoKEZYX0xQQllURSkocCkpWzJdIDw8IDE2KSB8ICgoKEZYX0xQQllURSkocCkpWzFdIDw8IDgpIHwgKCgoRlhfTFBCWVRFKShwKSlbMF0pKQorI2RlZmluZSBGWERXT1JEX0dFVF9NU0JGSVJTVChwKSAoKCgoRlhfTFBCWVRFKShwKSlbMF0gPDwgMjQpIHwgKCgoRlhfTFBCWVRFKShwKSlbMV0gPDwgMTYpIHwgKCgoRlhfTFBCWVRFKShwKSlbMl0gPDwgOCkgfCAoKChGWF9MUEJZVEUpKHApKVszXSkpCisjZGVmaW5lIEZYU1lTX0hJQllURSh3b3JkKQkoKEZYX0JZVEUpKCh3b3JkKSA+PiA4KSkKKyNkZWZpbmUgRlhTWVNfTE9CWVRFKHdvcmQpCSgoRlhfQllURSkod29yZCkpCisjZGVmaW5lIEZYU1lTX0hJV09SRChkd29yZCkJKChGWF9XT1JEKSgoZHdvcmQpID4+IDE2KSkKKyNkZWZpbmUgRlhTWVNfTE9XT1JEKGR3b3JkKQkoKEZYX1dPUkQpKGR3b3JkKSkKK0ZYX0lOVDMyCUZYU1lTX2F0b2koRlhfTFBDU1RSIHN0cik7CitGWF9JTlQzMglGWFNZU193dG9pKEZYX0xQQ1dTVFIgc3RyKTsKK0ZYX0lOVDY0CUZYU1lTX2F0b2k2NChGWF9MUENTVFIgc3RyKTsKK0ZYX0lOVDY0CUZYU1lTX3d0b2k2NChGWF9MUENXU1RSIHN0cik7CitGWF9MUENTVFIJRlhTWVNfaTY0dG9hKEZYX0lOVDY0IHZhbHVlLCBGWF9MUFNUUiBzdHIsIGludCByYWRpeCk7CitGWF9MUENXU1RSCUZYU1lTX2k2NHRvdyhGWF9JTlQ2NCB2YWx1ZSwgRlhfTFBXU1RSIHN0ciwgaW50IHJhZGl4KTsKK2ludAkJCUZYU1lTX3JvdW5kKEZYX0ZMT0FUIGYpOworI2RlZmluZQkJRlhTWVNfTXVsKGEsIGIpICgoYSkgKiAoYikpCisjZGVmaW5lCQlGWFNZU19EaXYoYSwgYikgKChhKSAvIChiKSkKKyNkZWZpbmUJCUZYU1lTX011bERpdihhLCBiLCBjKSAoKGEpICogKGIpIC8gKGMpKQorI2RlZmluZQkJRlhTWVNfc3FydDIoYSwgYikgKEZYX0ZMT0FUKUZYU1lTX3NxcnQoKGEpKihhKSArIChiKSooYikpCisjaWZkZWYgX19jcGx1c3BsdXMKK307CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9pbmNsdWRlL2Z4Y3J0L2Z4X3htbC5oIGIvY29yZS9pbmNsdWRlL2Z4Y3J0L2Z4X3htbC5oCmluZGV4IDEyMTc2NzcuLjE5YTQ5Y2QgMTAwNjQ0Ci0tLSBhL2NvcmUvaW5jbHVkZS9meGNydC9meF94bWwuaAorKysgYi9jb3JlL2luY2x1ZGUvZnhjcnQvZnhfeG1sLmgKQEAgLTEsMjA5ICsxLDIwOSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlhfWE1MX0hfDQotI2RlZmluZSBfRlhfWE1MX0hfDQotI2lmbmRlZiBfRlhfQkFTSUNfSF8NCi0jaW5jbHVkZSAiZnhfYmFzaWMuaCINCi0jZW5kaWYNCi1jbGFzcyBDWE1MX0F0dHJJdGVtIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDRlhfQnl0ZVN0cmluZ0wJbV9RU3BhY2VOYW1lOw0KLSAgICBDRlhfQnl0ZVN0cmluZ0wJbV9BdHRyTmFtZTsNCi0gICAgQ0ZYX1dpZGVTdHJpbmdMCW1fVmFsdWU7DQotDQotICAgIHZvaWQJRW1wdHkoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpDQotICAgIHsNCi0gICAgICAgIG1fUVNwYWNlTmFtZS5FbXB0eShwQWxsb2NhdG9yKTsNCi0gICAgICAgIG1fQXR0ck5hbWUuRW1wdHkocEFsbG9jYXRvcik7DQotICAgICAgICBtX1ZhbHVlLkVtcHR5KHBBbGxvY2F0b3IpOw0KLSAgICB9DQotfTsNCi1jbGFzcyBDWE1MX0F0dHJNYXAgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENYTUxfQXR0ck1hcCgpDQotICAgIHsNCi0gICAgICAgIG1fcE1hcCA9IE5VTEw7DQotICAgIH0NCi0gICAgfkNYTUxfQXR0ck1hcCgpDQotICAgIHsNCi0gICAgICAgIFJlbW92ZUFsbChOVUxMKTsNCi0gICAgfQ0KLSAgICBjb25zdCBDRlhfV2lkZVN0cmluZ0wqCUxvb2t1cChGWF9CU1RSIHNwYWNlLCBGWF9CU1RSIG5hbWUpIGNvbnN0Ow0KLSAgICB2b2lkCQkJCQlTZXRBdChGWF9CU1RSIHNwYWNlLCBGWF9CU1RSIG5hbWUsIEZYX1dTVFIgdmFsdWUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsNCi0gICAgdm9pZAkJCQkJUmVtb3ZlQXQoRlhfQlNUUiBzcGFjZSwgRlhfQlNUUiBuYW1lLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7DQotICAgIHZvaWQJCQkJCVJlbW92ZUFsbChJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7DQotICAgIGludAkJCQkJCUdldFNpemUoKSBjb25zdDsNCi0gICAgQ1hNTF9BdHRySXRlbSYJCQlHZXRBdChpbnQgaW5kZXgpIGNvbnN0Ow0KLSAgICBDRlhfT2JqZWN0QXJyYXk8Q1hNTF9BdHRySXRlbT4qCW1fcE1hcDsNCi19Ow0KLWNsYXNzIENYTUxfQ29udGVudCA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgQ1hNTF9Db250ZW50KCkgOiBtX2JDREFUQShGQUxTRSksIG1fQ29udGVudCgpIHt9DQotICAgIH5DWE1MX0NvbnRlbnQoKQ0KLSAgICB7DQotICAgICAgICBFbXB0eShOVUxMKTsNCi0gICAgfQ0KLSAgICB2b2lkCUVtcHR5KElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKQ0KLSAgICB7DQotICAgICAgICBtX0NvbnRlbnQuRW1wdHkocEFsbG9jYXRvcik7DQotICAgIH0NCi0gICAgdm9pZAlTZXQoRlhfQk9PTCBiQ0RBVEEsIEZYX1dTVFIgY29udGVudCwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpDQotICAgIHsNCi0gICAgICAgIG1fYkNEQVRBID0gYkNEQVRBOw0KLSAgICAgICAgbV9Db250ZW50LlNldChjb250ZW50LCBwQWxsb2NhdG9yKTsNCi0gICAgfQ0KLSAgICBGWF9CT09MCQkJbV9iQ0RBVEE7DQotICAgIENGWF9XaWRlU3RyaW5nTAltX0NvbnRlbnQ7DQotfTsNCi1jbGFzcyBDWE1MX0VsZW1lbnQgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHN0YXRpYyBDWE1MX0VsZW1lbnQqCVBhcnNlKGNvbnN0IHZvaWQqIHBCdWZmZXIsIHNpemVfdCBzaXplLCBGWF9CT09MIGJTYXZlU3BhY2VDaGFycyA9IEZBTFNFLCBGWF9GSUxFU0laRSogcFBhcnNlZFNpemUgPSBOVUxMLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7DQotDQotICAgIHN0YXRpYyBDWE1MX0VsZW1lbnQqCVBhcnNlKElGWF9GaWxlUmVhZCAqcEZpbGUsIEZYX0JPT0wgYlNhdmVTcGFjZUNoYXJzID0gRkFMU0UsIEZYX0ZJTEVTSVpFKiBwUGFyc2VkU2l6ZSA9IE5VTEwsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsNCi0NCi0gICAgc3RhdGljIENYTUxfRWxlbWVudCoJUGFyc2UoSUZYX0J1ZmZlclJlYWQgKnBCdWZmZXIsIEZYX0JPT0wgYlNhdmVTcGFjZUNoYXJzID0gRkFMU0UsIEZYX0ZJTEVTSVpFKiBwUGFyc2VkU2l6ZSA9IE5VTEwsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsNCi0NCi0gICAgQ1hNTF9FbGVtZW50KEZYX0JTVFIgcVNwYWNlLCBGWF9CU1RSIHRhZ05hbWUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsNCi0NCi0gICAgQ1hNTF9FbGVtZW50KEZYX0JTVFIgcVRhZ05hbWUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsNCi0NCi0gICAgQ1hNTF9FbGVtZW50KElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsNCi0NCi0gICAgfkNYTUxfRWxlbWVudCgpOw0KLQ0KLSAgICB2b2lkCUVtcHR5KCk7DQotDQotDQotDQotICAgIENGWF9CeXRlU3RyaW5nCQkJR2V0VGFnTmFtZShGWF9CT09MIGJRdWFsaWZpZWQgPSBGQUxTRSkgY29uc3Q7DQotICAgIHZvaWQJCQkJCUdldFRhZ05hbWUoQ0ZYX0J5dGVTdHJpbmdMICZ0YWdOYW1lLCBGWF9CT09MIGJRdWFsaWZpZWQgPSBGQUxTRSkgY29uc3Q7DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQkJR2V0TmFtZXNwYWNlKEZYX0JPT0wgYlF1YWxpZmllZCA9IEZBTFNFKSBjb25zdDsNCi0gICAgdm9pZAkJCQkJR2V0TmFtZXNwYWNlKENGWF9CeXRlU3RyaW5nTCAmbmFtZVNwYWNlLCBGWF9CT09MIGJRdWFsaWZpZWQgPSBGQUxTRSkgY29uc3Q7DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQkJR2V0TmFtZXNwYWNlVVJJKEZYX0JTVFIgcU5hbWUpIGNvbnN0Ow0KLSAgICB2b2lkCQkJCQlHZXROYW1lc3BhY2VVUkkoRlhfQlNUUiBxTmFtZSwgQ0ZYX0J5dGVTdHJpbmdMICZ1cmkpIGNvbnN0Ow0KLQ0KLSAgICBDWE1MX0VsZW1lbnQqCQkJR2V0UGFyZW50KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcFBhcmVudDsNCi0gICAgfQ0KLQ0KLSAgICBGWF9EV09SRAkJCQlDb3VudEF0dHJzKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fQXR0ck1hcC5HZXRTaXplKCk7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCQkJR2V0QXR0ckJ5SW5kZXgoaW50IGluZGV4LCBDRlhfQnl0ZVN0cmluZyAmc3BhY2UsIENGWF9CeXRlU3RyaW5nICZuYW1lLCBDRlhfV2lkZVN0cmluZyAmdmFsdWUpIGNvbnN0Ow0KLSAgICB2b2lkCQkJCQlHZXRBdHRyQnlJbmRleChpbnQgaW5kZXgsIENGWF9CeXRlU3RyaW5nTCAmc3BhY2UsIENGWF9CeXRlU3RyaW5nTCAmbmFtZSwgQ0ZYX1dpZGVTdHJpbmdMICZ2YWx1ZSkgY29uc3Q7DQotDQotICAgIEZYX0JPT0wJCQkJCUhhc0F0dHIoRlhfQlNUUiBxTmFtZSkgY29uc3Q7DQotDQotICAgIEZYX0JPT0wJCQkJCUdldEF0dHJWYWx1ZShGWF9CU1RSIG5hbWUsIENGWF9XaWRlU3RyaW5nJiBhdHRyaWJ1dGUpIGNvbnN0Ow0KLSAgICBDRlhfV2lkZVN0cmluZwkJCUdldEF0dHJWYWx1ZShGWF9CU1RSIG5hbWUpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIENGWF9XaWRlU3RyaW5nIGF0dHI7DQotICAgICAgICBHZXRBdHRyVmFsdWUobmFtZSwgYXR0cik7DQotICAgICAgICByZXR1cm4gYXR0cjsNCi0gICAgfQ0KLSAgICBjb25zdCBDRlhfV2lkZVN0cmluZ0wqCUdldEF0dHJWYWx1ZVB0cihGWF9CU1RSIG5hbWUpIGNvbnN0Ow0KLQ0KLSAgICBGWF9CT09MCQkJCQlHZXRBdHRyVmFsdWUoRlhfQlNUUiBzcGFjZSwgRlhfQlNUUiBuYW1lLCBDRlhfV2lkZVN0cmluZyYgYXR0cmlidXRlKSBjb25zdDsNCi0gICAgQ0ZYX1dpZGVTdHJpbmcJCQlHZXRBdHRyVmFsdWUoRlhfQlNUUiBzcGFjZSwgRlhfQlNUUiBuYW1lKSBjb25zdA0KLSAgICB7DQotICAgICAgICBDRlhfV2lkZVN0cmluZyBhdHRyOw0KLSAgICAgICAgR2V0QXR0clZhbHVlKHNwYWNlLCBuYW1lLCBhdHRyKTsNCi0gICAgICAgIHJldHVybiBhdHRyOw0KLSAgICB9DQotICAgIGNvbnN0IENGWF9XaWRlU3RyaW5nTCoJR2V0QXR0clZhbHVlUHRyKEZYX0JTVFIgc3BhY2UsIEZYX0JTVFIgbmFtZSkgY29uc3Q7DQotDQotICAgIEZYX0JPT0wJCQkJCUdldEF0dHJJbnRlZ2VyKEZYX0JTVFIgbmFtZSwgaW50JiBhdHRyaWJ1dGUpIGNvbnN0Ow0KLSAgICBpbnQJCQkJCQlHZXRBdHRySW50ZWdlcihGWF9CU1RSIG5hbWUpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIGludCBhdHRyID0gMDsNCi0gICAgICAgIEdldEF0dHJJbnRlZ2VyKG5hbWUsIGF0dHIpOw0KLSAgICAgICAgcmV0dXJuIGF0dHI7DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTAkJCQkJR2V0QXR0ckludGVnZXIoRlhfQlNUUiBzcGFjZSwgRlhfQlNUUiBuYW1lLCBpbnQmIGF0dHJpYnV0ZSkgY29uc3Q7DQotICAgIGludAkJCQkJCUdldEF0dHJJbnRlZ2VyKEZYX0JTVFIgc3BhY2UsIEZYX0JTVFIgbmFtZSkgY29uc3QNCi0gICAgew0KLSAgICAgICAgaW50IGF0dHIgPSAwOw0KLSAgICAgICAgR2V0QXR0ckludGVnZXIoc3BhY2UsIG5hbWUsIGF0dHIpOw0KLSAgICAgICAgcmV0dXJuIGF0dHI7DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTAkJCQkJR2V0QXR0ckZsb2F0KEZYX0JTVFIgbmFtZSwgRlhfRkxPQVQmIGF0dHJpYnV0ZSkgY29uc3Q7DQotICAgIEZYX0ZMT0FUCQkJCUdldEF0dHJGbG9hdChGWF9CU1RSIG5hbWUpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIEZYX0ZMT0FUIGF0dHIgPSAwOw0KLSAgICAgICAgR2V0QXR0ckZsb2F0KG5hbWUsIGF0dHIpOw0KLSAgICAgICAgcmV0dXJuIGF0dHI7DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTAkJCQkJR2V0QXR0ckZsb2F0KEZYX0JTVFIgc3BhY2UsIEZYX0JTVFIgbmFtZSwgRlhfRkxPQVQmIGF0dHJpYnV0ZSkgY29uc3Q7DQotICAgIEZYX0ZMT0FUCQkJCUdldEF0dHJGbG9hdChGWF9CU1RSIHNwYWNlLCBGWF9CU1RSIG5hbWUpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIEZYX0ZMT0FUIGF0dHIgPSAwOw0KLSAgICAgICAgR2V0QXR0ckZsb2F0KHNwYWNlLCBuYW1lLCBhdHRyKTsNCi0gICAgICAgIHJldHVybiBhdHRyOw0KLSAgICB9DQotDQotICAgIEZYX0RXT1JECQkJCUNvdW50Q2hpbGRyZW4oKSBjb25zdDsNCi0NCi0gICAgZW51bSBDaGlsZFR5cGUgeyBJbnZhbGlkLCBFbGVtZW50LCBDb250ZW50fTsNCi0NCi0gICAgQ2hpbGRUeXBlCQkJCUdldENoaWxkVHlwZShGWF9EV09SRCBpbmRleCkgY29uc3Q7DQotDQotICAgIENGWF9XaWRlU3RyaW5nCQkJR2V0Q29udGVudChGWF9EV09SRCBpbmRleCkgY29uc3Q7DQotICAgIGNvbnN0IENGWF9XaWRlU3RyaW5nTCoJR2V0Q29udGVudFB0cihGWF9EV09SRCBpbmRleCkgY29uc3Q7DQotDQotICAgIENYTUxfRWxlbWVudCoJCQlHZXRFbGVtZW50KEZYX0RXT1JEIGluZGV4KSBjb25zdDsNCi0NCi0gICAgQ1hNTF9FbGVtZW50KgkJCUdldEVsZW1lbnQoRlhfQlNUUiBzcGFjZSwgRlhfQlNUUiB0YWcpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBHZXRFbGVtZW50KHNwYWNlLCB0YWcsIDApOw0KLSAgICB9DQotDQotICAgIEZYX0RXT1JECQkJCUNvdW50RWxlbWVudHMoRlhfQlNUUiBzcGFjZSwgRlhfQlNUUiB0YWcpIGNvbnN0Ow0KLQ0KLSAgICBDWE1MX0VsZW1lbnQqCQkJR2V0RWxlbWVudChGWF9CU1RSIHNwYWNlLCBGWF9CU1RSIHRhZywgaW50IGluZGV4KSBjb25zdDsNCi0NCi0gICAgRlhfRFdPUkQJCQkJRmluZEVsZW1lbnQoQ1hNTF9FbGVtZW50ICpwQ2hpbGQpIGNvbnN0Ow0KLQ0KLQ0KLQ0KLQ0KLSAgICB2b2lkCQkJCQlTZXRUYWcoRlhfQlNUUiBxU3BhY2UsIEZYX0JTVFIgdGFnbmFtZSk7DQotDQotICAgIHZvaWQJCQkJCVNldFRhZyhGWF9CU1RSIHFUYWdOYW1lKTsNCi0NCi0gICAgdm9pZAkJCQkJUmVtb3ZlQ2hpbGRyZW4oKTsNCi0NCi0gICAgdm9pZAkJCQkJUmVtb3ZlQ2hpbGQoRlhfRFdPUkQgaW5kZXgpOw0KLQ0KLQ0KLXByb3RlY3RlZDoNCi0NCi0gICAgQ1hNTF9FbGVtZW50KgkJCW1fcFBhcmVudDsNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmdMCQkJbV9RU3BhY2VOYW1lOw0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZ0wJCQltX1RhZ05hbWU7DQotDQotICAgIENYTUxfQXR0ck1hcAkJCW1fQXR0ck1hcDsNCi0NCi0gICAgQ0ZYX1B0ckFycmF5CQkJbV9DaGlsZHJlbjsNCi0gICAgZnJpZW5kIGNsYXNzIENYTUxfUGFyc2VyOw0KLSAgICBmcmllbmQgY2xhc3MgQ1hNTF9Db21wb3NlcjsNCi19Ow0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZYX1hNTF9IXworI2RlZmluZSBfRlhfWE1MX0hfCisjaWZuZGVmIF9GWF9CQVNJQ19IXworI2luY2x1ZGUgImZ4X2Jhc2ljLmgiCisjZW5kaWYKK2NsYXNzIENYTUxfQXR0ckl0ZW0gOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENGWF9CeXRlU3RyaW5nTAltX1FTcGFjZU5hbWU7CisgICAgQ0ZYX0J5dGVTdHJpbmdMCW1fQXR0ck5hbWU7CisgICAgQ0ZYX1dpZGVTdHJpbmdMCW1fVmFsdWU7CisKKyAgICB2b2lkCUVtcHR5KElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKQorICAgIHsKKyAgICAgICAgbV9RU3BhY2VOYW1lLkVtcHR5KHBBbGxvY2F0b3IpOworICAgICAgICBtX0F0dHJOYW1lLkVtcHR5KHBBbGxvY2F0b3IpOworICAgICAgICBtX1ZhbHVlLkVtcHR5KHBBbGxvY2F0b3IpOworICAgIH0KK307CitjbGFzcyBDWE1MX0F0dHJNYXAgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENYTUxfQXR0ck1hcCgpCisgICAgeworICAgICAgICBtX3BNYXAgPSBOVUxMOworICAgIH0KKyAgICB+Q1hNTF9BdHRyTWFwKCkKKyAgICB7CisgICAgICAgIFJlbW92ZUFsbChOVUxMKTsKKyAgICB9CisgICAgY29uc3QgQ0ZYX1dpZGVTdHJpbmdMKglMb29rdXAoRlhfQlNUUiBzcGFjZSwgRlhfQlNUUiBuYW1lKSBjb25zdDsKKyAgICB2b2lkCQkJCQlTZXRBdChGWF9CU1RSIHNwYWNlLCBGWF9CU1RSIG5hbWUsIEZYX1dTVFIgdmFsdWUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsKKyAgICB2b2lkCQkJCQlSZW1vdmVBdChGWF9CU1RSIHNwYWNlLCBGWF9CU1RSIG5hbWUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsKKyAgICB2b2lkCQkJCQlSZW1vdmVBbGwoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpOworICAgIGludAkJCQkJCUdldFNpemUoKSBjb25zdDsKKyAgICBDWE1MX0F0dHJJdGVtJgkJCUdldEF0KGludCBpbmRleCkgY29uc3Q7CisgICAgQ0ZYX09iamVjdEFycmF5PENYTUxfQXR0ckl0ZW0+KgltX3BNYXA7Cit9OworY2xhc3MgQ1hNTF9Db250ZW50IDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBDWE1MX0NvbnRlbnQoKSA6IG1fYkNEQVRBKEZBTFNFKSwgbV9Db250ZW50KCkge30KKyAgICB+Q1hNTF9Db250ZW50KCkKKyAgICB7CisgICAgICAgIEVtcHR5KE5VTEwpOworICAgIH0KKyAgICB2b2lkCUVtcHR5KElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKQorICAgIHsKKyAgICAgICAgbV9Db250ZW50LkVtcHR5KHBBbGxvY2F0b3IpOworICAgIH0KKyAgICB2b2lkCVNldChGWF9CT09MIGJDREFUQSwgRlhfV1NUUiBjb250ZW50LCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCkKKyAgICB7CisgICAgICAgIG1fYkNEQVRBID0gYkNEQVRBOworICAgICAgICBtX0NvbnRlbnQuU2V0KGNvbnRlbnQsIHBBbGxvY2F0b3IpOworICAgIH0KKyAgICBGWF9CT09MCQkJbV9iQ0RBVEE7CisgICAgQ0ZYX1dpZGVTdHJpbmdMCW1fQ29udGVudDsKK307CitjbGFzcyBDWE1MX0VsZW1lbnQgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgc3RhdGljIENYTUxfRWxlbWVudCoJUGFyc2UoY29uc3Qgdm9pZCogcEJ1ZmZlciwgc2l6ZV90IHNpemUsIEZYX0JPT0wgYlNhdmVTcGFjZUNoYXJzID0gRkFMU0UsIEZYX0ZJTEVTSVpFKiBwUGFyc2VkU2l6ZSA9IE5VTEwsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsKKworICAgIHN0YXRpYyBDWE1MX0VsZW1lbnQqCVBhcnNlKElGWF9GaWxlUmVhZCAqcEZpbGUsIEZYX0JPT0wgYlNhdmVTcGFjZUNoYXJzID0gRkFMU0UsIEZYX0ZJTEVTSVpFKiBwUGFyc2VkU2l6ZSA9IE5VTEwsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsKKworICAgIHN0YXRpYyBDWE1MX0VsZW1lbnQqCVBhcnNlKElGWF9CdWZmZXJSZWFkICpwQnVmZmVyLCBGWF9CT09MIGJTYXZlU3BhY2VDaGFycyA9IEZBTFNFLCBGWF9GSUxFU0laRSogcFBhcnNlZFNpemUgPSBOVUxMLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7CisKKyAgICBDWE1MX0VsZW1lbnQoRlhfQlNUUiBxU3BhY2UsIEZYX0JTVFIgdGFnTmFtZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpOworCisgICAgQ1hNTF9FbGVtZW50KEZYX0JTVFIgcVRhZ05hbWUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsKKworICAgIENYTUxfRWxlbWVudChJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7CisKKyAgICB+Q1hNTF9FbGVtZW50KCk7CisKKyAgICB2b2lkCUVtcHR5KCk7CisKKworCisgICAgQ0ZYX0J5dGVTdHJpbmcJCQlHZXRUYWdOYW1lKEZYX0JPT0wgYlF1YWxpZmllZCA9IEZBTFNFKSBjb25zdDsKKyAgICB2b2lkCQkJCQlHZXRUYWdOYW1lKENGWF9CeXRlU3RyaW5nTCAmdGFnTmFtZSwgRlhfQk9PTCBiUXVhbGlmaWVkID0gRkFMU0UpIGNvbnN0OworCisgICAgQ0ZYX0J5dGVTdHJpbmcJCQlHZXROYW1lc3BhY2UoRlhfQk9PTCBiUXVhbGlmaWVkID0gRkFMU0UpIGNvbnN0OworICAgIHZvaWQJCQkJCUdldE5hbWVzcGFjZShDRlhfQnl0ZVN0cmluZ0wgJm5hbWVTcGFjZSwgRlhfQk9PTCBiUXVhbGlmaWVkID0gRkFMU0UpIGNvbnN0OworCisgICAgQ0ZYX0J5dGVTdHJpbmcJCQlHZXROYW1lc3BhY2VVUkkoRlhfQlNUUiBxTmFtZSkgY29uc3Q7CisgICAgdm9pZAkJCQkJR2V0TmFtZXNwYWNlVVJJKEZYX0JTVFIgcU5hbWUsIENGWF9CeXRlU3RyaW5nTCAmdXJpKSBjb25zdDsKKworICAgIENYTUxfRWxlbWVudCoJCQlHZXRQYXJlbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcFBhcmVudDsKKyAgICB9CisKKyAgICBGWF9EV09SRAkJCQlDb3VudEF0dHJzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0F0dHJNYXAuR2V0U2l6ZSgpOworICAgIH0KKworICAgIHZvaWQJCQkJCUdldEF0dHJCeUluZGV4KGludCBpbmRleCwgQ0ZYX0J5dGVTdHJpbmcgJnNwYWNlLCBDRlhfQnl0ZVN0cmluZyAmbmFtZSwgQ0ZYX1dpZGVTdHJpbmcgJnZhbHVlKSBjb25zdDsKKyAgICB2b2lkCQkJCQlHZXRBdHRyQnlJbmRleChpbnQgaW5kZXgsIENGWF9CeXRlU3RyaW5nTCAmc3BhY2UsIENGWF9CeXRlU3RyaW5nTCAmbmFtZSwgQ0ZYX1dpZGVTdHJpbmdMICZ2YWx1ZSkgY29uc3Q7CisKKyAgICBGWF9CT09MCQkJCQlIYXNBdHRyKEZYX0JTVFIgcU5hbWUpIGNvbnN0OworCisgICAgRlhfQk9PTAkJCQkJR2V0QXR0clZhbHVlKEZYX0JTVFIgbmFtZSwgQ0ZYX1dpZGVTdHJpbmcmIGF0dHJpYnV0ZSkgY29uc3Q7CisgICAgQ0ZYX1dpZGVTdHJpbmcJCQlHZXRBdHRyVmFsdWUoRlhfQlNUUiBuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgYXR0cjsKKyAgICAgICAgR2V0QXR0clZhbHVlKG5hbWUsIGF0dHIpOworICAgICAgICByZXR1cm4gYXR0cjsKKyAgICB9CisgICAgY29uc3QgQ0ZYX1dpZGVTdHJpbmdMKglHZXRBdHRyVmFsdWVQdHIoRlhfQlNUUiBuYW1lKSBjb25zdDsKKworICAgIEZYX0JPT0wJCQkJCUdldEF0dHJWYWx1ZShGWF9CU1RSIHNwYWNlLCBGWF9CU1RSIG5hbWUsIENGWF9XaWRlU3RyaW5nJiBhdHRyaWJ1dGUpIGNvbnN0OworICAgIENGWF9XaWRlU3RyaW5nCQkJR2V0QXR0clZhbHVlKEZYX0JTVFIgc3BhY2UsIEZYX0JTVFIgbmFtZSkgY29uc3QKKyAgICB7CisgICAgICAgIENGWF9XaWRlU3RyaW5nIGF0dHI7CisgICAgICAgIEdldEF0dHJWYWx1ZShzcGFjZSwgbmFtZSwgYXR0cik7CisgICAgICAgIHJldHVybiBhdHRyOworICAgIH0KKyAgICBjb25zdCBDRlhfV2lkZVN0cmluZ0wqCUdldEF0dHJWYWx1ZVB0cihGWF9CU1RSIHNwYWNlLCBGWF9CU1RSIG5hbWUpIGNvbnN0OworCisgICAgRlhfQk9PTAkJCQkJR2V0QXR0ckludGVnZXIoRlhfQlNUUiBuYW1lLCBpbnQmIGF0dHJpYnV0ZSkgY29uc3Q7CisgICAgaW50CQkJCQkJR2V0QXR0ckludGVnZXIoRlhfQlNUUiBuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgaW50IGF0dHIgPSAwOworICAgICAgICBHZXRBdHRySW50ZWdlcihuYW1lLCBhdHRyKTsKKyAgICAgICAgcmV0dXJuIGF0dHI7CisgICAgfQorCisgICAgRlhfQk9PTAkJCQkJR2V0QXR0ckludGVnZXIoRlhfQlNUUiBzcGFjZSwgRlhfQlNUUiBuYW1lLCBpbnQmIGF0dHJpYnV0ZSkgY29uc3Q7CisgICAgaW50CQkJCQkJR2V0QXR0ckludGVnZXIoRlhfQlNUUiBzcGFjZSwgRlhfQlNUUiBuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgaW50IGF0dHIgPSAwOworICAgICAgICBHZXRBdHRySW50ZWdlcihzcGFjZSwgbmFtZSwgYXR0cik7CisgICAgICAgIHJldHVybiBhdHRyOworICAgIH0KKworICAgIEZYX0JPT0wJCQkJCUdldEF0dHJGbG9hdChGWF9CU1RSIG5hbWUsIEZYX0ZMT0FUJiBhdHRyaWJ1dGUpIGNvbnN0OworICAgIEZYX0ZMT0FUCQkJCUdldEF0dHJGbG9hdChGWF9CU1RSIG5hbWUpIGNvbnN0CisgICAgeworICAgICAgICBGWF9GTE9BVCBhdHRyID0gMDsKKyAgICAgICAgR2V0QXR0ckZsb2F0KG5hbWUsIGF0dHIpOworICAgICAgICByZXR1cm4gYXR0cjsKKyAgICB9CisKKyAgICBGWF9CT09MCQkJCQlHZXRBdHRyRmxvYXQoRlhfQlNUUiBzcGFjZSwgRlhfQlNUUiBuYW1lLCBGWF9GTE9BVCYgYXR0cmlidXRlKSBjb25zdDsKKyAgICBGWF9GTE9BVAkJCQlHZXRBdHRyRmxvYXQoRlhfQlNUUiBzcGFjZSwgRlhfQlNUUiBuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgRlhfRkxPQVQgYXR0ciA9IDA7CisgICAgICAgIEdldEF0dHJGbG9hdChzcGFjZSwgbmFtZSwgYXR0cik7CisgICAgICAgIHJldHVybiBhdHRyOworICAgIH0KKworICAgIEZYX0RXT1JECQkJCUNvdW50Q2hpbGRyZW4oKSBjb25zdDsKKworICAgIGVudW0gQ2hpbGRUeXBlIHsgSW52YWxpZCwgRWxlbWVudCwgQ29udGVudH07CisKKyAgICBDaGlsZFR5cGUJCQkJR2V0Q2hpbGRUeXBlKEZYX0RXT1JEIGluZGV4KSBjb25zdDsKKworICAgIENGWF9XaWRlU3RyaW5nCQkJR2V0Q29udGVudChGWF9EV09SRCBpbmRleCkgY29uc3Q7CisgICAgY29uc3QgQ0ZYX1dpZGVTdHJpbmdMKglHZXRDb250ZW50UHRyKEZYX0RXT1JEIGluZGV4KSBjb25zdDsKKworICAgIENYTUxfRWxlbWVudCoJCQlHZXRFbGVtZW50KEZYX0RXT1JEIGluZGV4KSBjb25zdDsKKworICAgIENYTUxfRWxlbWVudCoJCQlHZXRFbGVtZW50KEZYX0JTVFIgc3BhY2UsIEZYX0JTVFIgdGFnKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldEVsZW1lbnQoc3BhY2UsIHRhZywgMCk7CisgICAgfQorCisgICAgRlhfRFdPUkQJCQkJQ291bnRFbGVtZW50cyhGWF9CU1RSIHNwYWNlLCBGWF9CU1RSIHRhZykgY29uc3Q7CisKKyAgICBDWE1MX0VsZW1lbnQqCQkJR2V0RWxlbWVudChGWF9CU1RSIHNwYWNlLCBGWF9CU1RSIHRhZywgaW50IGluZGV4KSBjb25zdDsKKworICAgIEZYX0RXT1JECQkJCUZpbmRFbGVtZW50KENYTUxfRWxlbWVudCAqcENoaWxkKSBjb25zdDsKKworCisKKworICAgIHZvaWQJCQkJCVNldFRhZyhGWF9CU1RSIHFTcGFjZSwgRlhfQlNUUiB0YWduYW1lKTsKKworICAgIHZvaWQJCQkJCVNldFRhZyhGWF9CU1RSIHFUYWdOYW1lKTsKKworICAgIHZvaWQJCQkJCVJlbW92ZUNoaWxkcmVuKCk7CisKKyAgICB2b2lkCQkJCQlSZW1vdmVDaGlsZChGWF9EV09SRCBpbmRleCk7CisKKworcHJvdGVjdGVkOgorCisgICAgQ1hNTF9FbGVtZW50KgkJCW1fcFBhcmVudDsKKworICAgIENGWF9CeXRlU3RyaW5nTAkJCW1fUVNwYWNlTmFtZTsKKworICAgIENGWF9CeXRlU3RyaW5nTAkJCW1fVGFnTmFtZTsKKworICAgIENYTUxfQXR0ck1hcAkJCW1fQXR0ck1hcDsKKworICAgIENGWF9QdHJBcnJheQkJCW1fQ2hpbGRyZW47CisgICAgZnJpZW5kIGNsYXNzIENYTUxfUGFyc2VyOworICAgIGZyaWVuZCBjbGFzcyBDWE1MX0NvbXBvc2VyOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9pbmNsdWRlL2Z4Z2UvZnhfZGliLmggYi9jb3JlL2luY2x1ZGUvZnhnZS9meF9kaWIuaAppbmRleCA3YWEzYmY4Li45NTdhOTU3IDEwMDY0NAotLS0gYS9jb3JlL2luY2x1ZGUvZnhnZS9meF9kaWIuaAorKysgYi9jb3JlL2luY2x1ZGUvZnhnZS9meF9kaWIuaApAQCAtMSw2MDYgKzEsNjA2IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GUERGX0RJQl9IXw0KLSNkZWZpbmUgX0ZQREZfRElCX0hfDQotI2lmbmRlZiBfRlhDUlRfRVhURU5TSU9OXw0KLSNpbmNsdWRlICIuLi9meGNydC9meF9leHQuaCINCi0jZW5kaWYNCi1lbnVtIEZYRElCX0Zvcm1hdCB7DQotICAgIEZYRElCX0ludmFsaWQgPSAwLA0KLSAgICBGWERJQl8xYnBwTWFzayA9IDB4MTAxLA0KLSAgICBGWERJQl8xYnBwUmdiID0gMHgwMDEsDQotICAgIEZYRElCXzFicHBDbXlrID0gMHg0MDEsDQotICAgIEZYRElCXzhicHBNYXNrID0gMHgxMDgsDQotICAgIEZYRElCXzhicHBSZ2IgPSAweDAwOCwNCi0gICAgRlhESUJfOGJwcFJnYmEgPSAweDIwOCwNCi0gICAgRlhESUJfOGJwcENteWsgPSAweDQwOCwNCi0gICAgRlhESUJfOGJwcENteWthID0gMHg2MDgsDQotICAgIEZYRElCX1JnYiA9IDB4MDE4LA0KLSAgICBGWERJQl9SZ2JhID0gMHgyMTgsDQotICAgIEZYRElCX1JnYjMyID0gMHgwMjAsDQotICAgIEZYRElCX0FyZ2IgPSAweDIyMCwNCi0gICAgRlhESUJfQ215ayA9IDB4NDIwLA0KLSAgICBGWERJQl9DbXlrYSA9IDB4NjIwLA0KLX07DQotZW51bSBGWERJQl9DaGFubmVsIHsNCi0gICAgRlhESUJfUmVkID0gMSwNCi0gICAgRlhESUJfR3JlZW4sDQotICAgIEZYRElCX0JsdWUsDQotICAgIEZYRElCX0N5YW4sDQotICAgIEZYRElCX01hZ2VudGEsDQotICAgIEZYRElCX1llbGxvdywNCi0gICAgRlhESUJfQmxhY2ssDQotICAgIEZYRElCX0FscGhhDQotfTsNCi0jZGVmaW5lIEZYRElCX0RPV05TQU1QTEUJCTB4MDQNCi0jZGVmaW5lIEZYRElCX0lOVEVSUE9MCQkJMHgyMA0KLSNkZWZpbmUgRlhESUJfQklDVUJJQ19JTlRFUlBPTCAgMHg4MA0KLSNkZWZpbmUgRlhESUJfTk9TTU9PVEgJCQkweDEwMA0KLSNkZWZpbmUgRlhESUJfUEFMRVRURV9MT0MJCTB4MDENCi0jZGVmaW5lIEZYRElCX1BBTEVUVEVfV0lOCQkweDAyDQotI2RlZmluZSBGWERJQl9QQUxFVFRFX01BQwkJMHgwNA0KLSNkZWZpbmUgRlhESUJfQkxFTkRfTk9STUFMCQkJMA0KLSNkZWZpbmUgRlhESUJfQkxFTkRfTVVMVElQTFkJCTENCi0jZGVmaW5lIEZYRElCX0JMRU5EX1NDUkVFTgkJCTINCi0jZGVmaW5lIEZYRElCX0JMRU5EX09WRVJMQVkJCQkzDQotI2RlZmluZSBGWERJQl9CTEVORF9EQVJLRU4JCQk0DQotI2RlZmluZSBGWERJQl9CTEVORF9MSUdIVEVOCQkJNQ0KLQ0KLSNkZWZpbmUgRlhESUJfQkxFTkRfQ09MT1JET0RHRQkJNg0KLSNkZWZpbmUgRlhESUJfQkxFTkRfQ09MT1JCVVJOCQk3DQotI2RlZmluZSBGWERJQl9CTEVORF9IQVJETElHSFQJCTgNCi0jZGVmaW5lIEZYRElCX0JMRU5EX1NPRlRMSUdIVAkJOQ0KLSNkZWZpbmUgRlhESUJfQkxFTkRfRElGRkVSRU5DRQkJMTANCi0jZGVmaW5lIEZYRElCX0JMRU5EX0VYQ0xVU0lPTgkJMTENCi0jZGVmaW5lIEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRQkyMQ0KLSNkZWZpbmUgRlhESUJfQkxFTkRfSFVFCQkJCTIxDQotI2RlZmluZSBGWERJQl9CTEVORF9TQVRVUkFUSU9OCQkyMg0KLSNkZWZpbmUgRlhESUJfQkxFTkRfQ09MT1IJCQkyMw0KLSNkZWZpbmUgRlhESUJfQkxFTkRfTFVNSU5PU0lUWQkJMjQNCi0jZGVmaW5lIEZYRElCX0JMRU5EX1VOU1VQUE9SVEVECQktMQ0KLXR5cGVkZWYgRlhfRFdPUkQJRlhfQVJHQjsNCi10eXBlZGVmIEZYX0RXT1JECUZYX0NPTE9SUkVGOw0KLXR5cGVkZWYgRlhfRFdPUkQJRlhfQ01ZSzsNCi1jbGFzcyBDRlhfQ2xpcFJnbjsNCi1jbGFzcyBDRlhfRElCU291cmNlOw0KLWNsYXNzIENGWF9ESUJpdG1hcDsNCi0jZGVmaW5lIEZYU1lTX1JHQihyLCBnLCBiKSAgKChyKSB8ICgoZykgPDwgOCkgfCAoKGIpIDw8IDE2KSkNCi0jZGVmaW5lIEZYU1lTX0dldFJWYWx1ZShyZ2IpICgocmdiKSAmIDB4ZmYpDQotI2RlZmluZSBGWFNZU19HZXRHVmFsdWUocmdiKSAoKChyZ2IpID4+IDgpICYgMHhmZikNCi0jZGVmaW5lIEZYU1lTX0dldEJWYWx1ZShyZ2IpICgoKHJnYikgPj4gMTYpICYgMHhmZikNCi0jZGVmaW5lIEZYX0NDT0xPUih2YWwpICgyNTUtKHZhbCkpDQotI2RlZmluZSBGWFNZU19DTVlLKGMsIG0sIHksIGspICgoKGMpIDw8IDI0KSB8ICgobSkgPDwgMTYpIHwgKCh5KSA8PCA4KSB8IChrKSkNCi0jZGVmaW5lIEZYU1lTX0dldENWYWx1ZShjbXlrKSAoKEZYX0JZVEUpKChjbXlrKSA+PiAyNCkgJiAweGZmKQ0KLSNkZWZpbmUgRlhTWVNfR2V0TVZhbHVlKGNteWspICgoRlhfQllURSkoKGNteWspID4+IDE2KSAmIDB4ZmYpDQotI2RlZmluZSBGWFNZU19HZXRZVmFsdWUoY215aykgKChGWF9CWVRFKSgoY215aykgPj4gOCkgJiAweGZmKQ0KLSNkZWZpbmUgRlhTWVNfR2V0S1ZhbHVlKGNteWspICgoRlhfQllURSkoY215aykgJiAweGZmKQ0KLXZvaWQgQ215a0RlY29kZShGWF9DTVlLIGNteWssIGludCYgYywgaW50JiBtLCBpbnQmIHksIGludCYgayk7DQotaW5saW5lIEZYX0NNWUsgQ215a0VuY29kZShpbnQgYywgaW50IG0sIGludCB5LCBpbnQgaykNCi17DQotICAgIHJldHVybiAoYyA8PCAyNCkgfCAobSA8PCAxNikgfCAoeSA8PCA4KSB8IGs7DQotfQ0KLXZvaWQgQXJnYkRlY29kZShGWF9BUkdCIGFyZ2IsIGludCYgYSwgaW50JiByLCBpbnQmZywgaW50JiBiKTsNCi12b2lkIEFyZ2JEZWNvZGUoRlhfQVJHQiBhcmdiLCBpbnQmIGEsIEZYX0NPTE9SUkVGJiByZ2IpOw0KLWlubGluZSBGWF9BUkdCIEFyZ2JFbmNvZGUoaW50IGEsIGludCByLCBpbnQgZywgaW50IGIpDQotew0KLSAgICByZXR1cm4gKGEgPDwgMjQpIHwgKHIgPDwgMTYpIHwgKGcgPDwgOCkgfCBiOw0KLX0NCi1GWF9BUkdCIEFyZ2JFbmNvZGUoaW50IGEsIEZYX0NPTE9SUkVGIHJnYik7DQotI2RlZmluZSBGWEFSR0JfQShhcmdiKSAoKEZYX0JZVEUpKChhcmdiKSA+PiAyNCkpDQotI2RlZmluZSBGWEFSR0JfUihhcmdiKSAoKEZYX0JZVEUpKChhcmdiKSA+PiAxNikpDQotI2RlZmluZSBGWEFSR0JfRyhhcmdiKSAoKEZYX0JZVEUpKChhcmdiKSA+PiA4KSkNCi0jZGVmaW5lIEZYQVJHQl9CKGFyZ2IpICgoRlhfQllURSkoYXJnYikpDQotI2RlZmluZSBGWEFSR0JfTUFLRShhLHIsZyxiKSAoKChGWF9EV09SRCkoYSkgPDwgMjQpIHwgKChyKSA8PCAxNikgfCAoKGcpIDw8IDgpIHwgKGIpKQ0KLSNkZWZpbmUgRlhBUkdCX01VTF9BTFBIQShhcmdiLCBhbHBoYSkgKCgoKChhcmdiKSA+PiAyNCkgKiAoYWxwaGEpIC8gMjU1KSA8PCAyNCkgfCAoKGFyZ2IpICYgMHhmZmZmZmYpKQ0KLSNkZWZpbmUgRlhSR0IyR1JBWShyLGcsYikgKCgoYikgKiAxMSArIChnKSAqIDU5ICsgKHIpICogMzApIC8gMTAwKQ0KLSNkZWZpbmUgRlhDTVlLMkdSQVkoYyxtLHksaykgKCgoMjU1LShjKSkgKiAoMjU1LShrKSkgKiAzMCArICgyNTUtKG0pKSAqICgyNTUtKGspKSAqIDU5ICsgKDI1NS0oeSkpICogKDI1NS0oaykpICogMTEpIC8gMjU1MDApDQotI2RlZmluZSBGWERJQl9BTFBIQV9NRVJHRShiYWNrZHJvcCwgc291cmNlLCBzb3VyY2VfYWxwaGEpICgoKGJhY2tkcm9wKSAqICgyNTUtKHNvdXJjZV9hbHBoYSkpICsgKHNvdXJjZSkqKHNvdXJjZV9hbHBoYSkpLzI1NSkNCi0jZGVmaW5lIEZYRElCX0FMUEhBX1VOSU9OKGRlc3QsIHNyYykgKChkZXN0KSArIChzcmMpIC0gKGRlc3QpKihzcmMpLzI1NSkNCi0jZGVmaW5lIEZYQ01ZS19HRVRESUIocCkgKCgoKEZYX0xQQllURSkocCkpWzBdIDw8IDI0IHwgKCgoRlhfTFBCWVRFKShwKSlbMV0gPDwgMTYpIHwgKCgoRlhfTFBCWVRFKShwKSlbMl0gPDwgOCkgfCAoKEZYX0xQQllURSkocCkpWzNdKSkNCi0jZGVmaW5lIEZYQ01ZS19TRVRESUIocCwgY215aykgICgoRlhfTFBCWVRFKShwKSlbMF0gPSAoRlhfQllURSkoKGNteWspID4+IDI0KSwgXA0KLSAgICAgICAgKChGWF9MUEJZVEUpKHApKVsxXSA9IChGWF9CWVRFKSgoY215aykgPj4gMTYpLCBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGWF9MUEJZVEUpKHApKVsyXSA9IChGWF9CWVRFKSgoY215aykgPj4gOCksIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRlhfTFBCWVRFKShwKSlbM10gPSAoRlhfQllURSkoY215aykpDQotI2RlZmluZSBGWEFSR0JfR0VURElCKHApICgoKEZYX0xQQllURSkocCkpWzBdKSB8ICgoKEZYX0xQQllURSkocCkpWzFdIDw8IDgpIHwgKCgoRlhfTFBCWVRFKShwKSlbMl0gPDwgMTYpIHwgKCgoRlhfTFBCWVRFKShwKSlbM10gPDwgMjQpDQotI2RlZmluZSBGWEFSR0JfU0VURElCKHAsIGFyZ2IpICgoRlhfTFBCWVRFKShwKSlbMF0gPSAoRlhfQllURSkoYXJnYiksIFwNCi0gICAgICAgICgoRlhfTFBCWVRFKShwKSlbMV0gPSAoRlhfQllURSkoKGFyZ2IpID4+IDgpLCBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGWF9MUEJZVEUpKHApKVsyXSA9IChGWF9CWVRFKSgoYXJnYikgPj4gMTYpLCBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZYX0xQQllURSkocCkpWzNdID0gKEZYX0JZVEUpKChhcmdiKSA+PiAyNCkNCi0jZGVmaW5lIEZYQVJHQl9DT1BZKGRlc3QsIHNyYykgKihGWF9MUEJZVEUpKGRlc3QpID0gKihGWF9MUEJZVEUpKHNyYyksIFwNCi0gICAgICAgICooKEZYX0xQQllURSkoZGVzdCkrMSkgPSAqKChGWF9MUEJZVEUpKHNyYykrMSksIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKChGWF9MUEJZVEUpKGRlc3QpKzIpID0gKigoRlhfTFBCWVRFKShzcmMpKzIpLCBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKChGWF9MUEJZVEUpKGRlc3QpKzMpID0gKigoRlhfTFBCWVRFKShzcmMpKzMpDQotI2RlZmluZSBGWENNWUtfQ09QWShkZXN0LCBzcmMpICAqKEZYX0xQQllURSkoZGVzdCkgPSAqKEZYX0xQQllURSkoc3JjKSwgXA0KLSAgICAgICAgKigoRlhfTFBCWVRFKShkZXN0KSsxKSA9ICooKEZYX0xQQllURSkoc3JjKSsxKSwgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKEZYX0xQQllURSkoZGVzdCkrMikgPSAqKChGWF9MUEJZVEUpKHNyYykrMiksIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKEZYX0xQQllURSkoZGVzdCkrMykgPSAqKChGWF9MUEJZVEUpKHNyYykrMykNCi0jZGVmaW5lIEZYQVJHQl9TRVRSR0JPUkRFUkRJQihwLCBhcmdiKSAoKEZYX0xQQllURSkocCkpWzNdID0gKEZYX0JZVEUpKGFyZ2I+PjI0KSwgXA0KLSAgICAgICAgKChGWF9MUEJZVEUpKHApKVswXSA9IChGWF9CWVRFKSgoYXJnYikgPj4gMTYpLCBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGWF9MUEJZVEUpKHApKVsxXSA9IChGWF9CWVRFKSgoYXJnYikgPj4gOCksIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRlhfTFBCWVRFKShwKSlbMl0gPSAoRlhfQllURSkoYXJnYikNCi0jZGVmaW5lIEZYQVJHQl9HRVRSR0JPUkRFUkRJQihwKSAoKChGWF9MUEJZVEUpKHApKVsyXSkgfCAoKChGWF9MUEJZVEUpKHApKVsxXSA8PCA4KSB8ICgoKEZYX0xQQllURSkocCkpWzBdIDw8IDE2KSB8ICgoKEZYX0xQQllURSkocCkpWzNdIDw8IDI0KQ0KLSNkZWZpbmUgRlhBUkdCX1JHQk9SREVSQ09QWShkZXN0LCBzcmMpICooKEZYX0xQQllURSkoZGVzdCkrMykgPSAqKChGWF9MUEJZVEUpKHNyYykrMyksIFwNCi0gICAgICAgICooRlhfTFBCWVRFKShkZXN0KSA9ICooKEZYX0xQQllURSkoc3JjKSsyKSwgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigoRlhfTFBCWVRFKShkZXN0KSsxKSA9ICooKEZYX0xQQllURSkoc3JjKSsxKSwgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKChGWF9MUEJZVEUpKGRlc3QpKzIpID0gKigoRlhfTFBCWVRFKShzcmMpKQ0KLSNkZWZpbmUgRlhBUkdCX1RPRElCKGFyZ2IpIChhcmdiKQ0KLSNkZWZpbmUgRlhDTVlLX1RPRElCKGNteWspICgoRlhfQllURSkoKGNteWspID4+IDI0KSB8ICgoRlhfQllURSkoKGNteWspID4+IDE2KSkgPDwgOCB8ICgoRlhfQllURSkoKGNteWspID4+IDgpKSA8PCAxNiB8ICgoRlhfQllURSkoY215aykgPDwgMjQpKQ0KLSNkZWZpbmUgRlhBUkdCX1RPQkdST1JERVJESUIoYXJnYikgKChGWF9CWVRFKShhcmdiPj4xNikgfCAoKEZYX0JZVEUpKGFyZ2I+PjgpKSA8PCA4IHwgKChGWF9CWVRFKShhcmdiKSkgPDwgMTYgfCAoKEZYX0JZVEUpKGFyZ2I+PjI0KSA8PCAyNCkpDQotI2RlZmluZSBGWEdFVEZMQUdfQ09MT1JUWVBFKGZsYWcpCQkJKEZYX0JZVEUpKChmbGFnKT4+OCkNCi0jZGVmaW5lIEZYR0VURkxBR19BTFBIQV9GSUxMKGZsYWcpCQkJKEZYX0JZVEUpKGZsYWcpDQotI2RlZmluZSBGWEdFVEZMQUdfQUxQSEFfU1RST0tFKGZsYWcpCQkoRlhfQllURSkoKGZsYWcpPj4xNikNCi0jZGVmaW5lIEZYU0VURkxBR19DT0xPUlRZUEUoZmxhZywgdmFsKQkJZmxhZyA9ICgoKHZhbCk8PDgpfChmbGFnJjB4ZmZmZjAwZmYpKQ0KLSNkZWZpbmUgRlhTRVRGTEFHX0FMUEhBX0ZJTEwoZmxhZywgdmFsKQkJZmxhZyA9ICgodmFsKXwoZmxhZyYweGZmZmZmZjAwKSkNCi0jZGVmaW5lIEZYU0VURkxBR19BTFBIQV9TVFJPS0UoZmxhZywgdmFsKQlmbGFnID0gKCgodmFsKTw8MTYpfChmbGFnJjB4ZmYwMGZmZmYpKQ0KLWNsYXNzIENGWF9ESUJTb3VyY2UgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHZpcnR1YWwJCQl+Q0ZYX0RJQlNvdXJjZSgpOw0KLQ0KLQ0KLQ0KLSAgICBpbnQJCQkJR2V0V2lkdGgoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9XaWR0aDsNCi0gICAgfQ0KLQ0KLSAgICBpbnQJCQkJR2V0SGVpZ2h0KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fSGVpZ2h0Ow0KLSAgICB9DQotDQotICAgIEZYRElCX0Zvcm1hdAlHZXRGb3JtYXQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gKEZYRElCX0Zvcm1hdCkobV9BbHBoYUZsYWcgKiAweDEwMCArIG1fYnBwKTsNCi0gICAgfQ0KLQ0KLSAgICBGWF9EV09SRAkJR2V0UGl0Y2goKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9QaXRjaDsNCi0gICAgfQ0KLQ0KLSAgICBGWF9EV09SRCoJCUdldFBhbGV0dGUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wUGFsZXR0ZTsNCi0gICAgfQ0KLQ0KLQ0KLQ0KLSAgICB2aXJ0dWFsCUZYX0xQQllURQlHZXRCdWZmZXIoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLQ0KLSAgICB2aXJ0dWFsIEZYX0xQQ0JZVEUJR2V0U2NhbmxpbmUoaW50IGxpbmUpIGNvbnN0ID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQlTa2lwVG9TY2FubGluZShpbnQgbGluZSwgSUZYX1BhdXNlKiBwUGF1c2UpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCURvd25TYW1wbGVTY2FubGluZShpbnQgbGluZSwgRlhfTFBCWVRFIGRlc3Rfc2NhbiwgaW50IGRlc3RfYnBwLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF93aWR0aCwgRlhfQk9PTCBiRmxpcFgsIGludCBjbGlwX2xlZnQsIGludCBjbGlwX3dpZHRoKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgdm9pZAkJU2V0RG93blNhbXBsZVNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdCB7fQ0KLQ0KLSAgICBpbnQJCQkJR2V0QlBQKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fYnBwOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wJCQlJc0FscGhhTWFzaygpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0FscGhhRmxhZyA9PSAxOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wJCQlIYXNBbHBoYSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0FscGhhRmxhZyAmIDIgPyBUUlVFIDogRkFMU0U7DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTAkJCUlzT3BhcXVlSW1hZ2UoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gIShtX0FscGhhRmxhZyAmIDMpOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wJCQlJc0NteWtJbWFnZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0FscGhhRmxhZyAmIDQgPyBUUlVFIDogRkFMU0U7DQotICAgIH0NCi0NCi0NCi0NCi0gICAgaW50CQkJCUdldFBhbGV0dGVTaXplKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIElzQWxwaGFNYXNrKCkgPyAwIDogKG1fYnBwID09IDEgPyAyIDogKG1fYnBwID09IDggPyAyNTYgOiAwKSk7DQotICAgIH0NCi0NCi0gICAgRlhfRFdPUkQJCUdldFBhbGV0dGVFbnRyeShpbnQgaW5kZXgpIGNvbnN0Ow0KLQ0KLSAgICB2b2lkCQkJU2V0UGFsZXR0ZUVudHJ5KGludCBpbmRleCwgRlhfRFdPUkQgY29sb3IpOw0KLSAgICBGWF9EV09SRAkJR2V0UGFsZXR0ZUFyZ2IoaW50IGluZGV4KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gR2V0UGFsZXR0ZUVudHJ5KGluZGV4KTsNCi0gICAgfQ0KLSAgICB2b2lkCQkJU2V0UGFsZXR0ZUFyZ2IoaW50IGluZGV4LCBGWF9EV09SRCBjb2xvcikNCi0gICAgew0KLSAgICAgICAgU2V0UGFsZXR0ZUVudHJ5KGluZGV4LCBjb2xvcik7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCUNvcHlQYWxldHRlKGNvbnN0IEZYX0RXT1JEKiBwU3JjUGFsLCBGWF9EV09SRCBzaXplID0gMjU2KTsNCi0NCi0NCi0gICAgQ0ZYX0RJQml0bWFwKglDbG9uZShjb25zdCBGWF9SRUNUKiBwQ2xpcCA9IE5VTEwpIGNvbnN0Ow0KLQ0KLSAgICBDRlhfRElCaXRtYXAqCUNsb25lQ29udmVydChGWERJQl9Gb3JtYXQgZm9ybWF0LCBjb25zdCBGWF9SRUNUKiBwQ2xpcCA9IE5VTEwsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMKSBjb25zdDsNCi0NCi0gICAgQ0ZYX0RJQml0bWFwKglTdHJldGNoVG8oaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgRlhfRFdPUkQgZmxhZ3MgPSAwLCBjb25zdCBGWF9SRUNUKiBwQ2xpcCA9IE5VTEwpIGNvbnN0Ow0KLQ0KLQ0KLSAgICBDRlhfRElCaXRtYXAqCVRyYW5zZm9ybVRvKGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIGludCYgbGVmdCwgaW50ICZ0b3AsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBmbGFncyA9IDAsIGNvbnN0IEZYX1JFQ1QqIHBDbGlwID0gTlVMTCkgY29uc3Q7DQotDQotICAgIENGWF9ESUJpdG1hcCoJR2V0QWxwaGFNYXNrKGNvbnN0IEZYX1JFQ1QqIHBDbGlwID0gTlVMTCkgY29uc3Q7DQotDQotICAgIEZYX0JPT0wJCQlDb3B5QWxwaGFNYXNrKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBBbHBoYU1hc2ssIGNvbnN0IEZYX1JFQ1QqIHBDbGlwID0gTlVMTCk7DQotDQotICAgIENGWF9ESUJpdG1hcCoJU3dhcFhZKEZYX0JPT0wgYlhGbGlwLCBGWF9CT09MIGJZRmxpcCwgY29uc3QgRlhfUkVDVCogcENsaXAgPSBOVUxMKSBjb25zdDsNCi0NCi0gICAgQ0ZYX0RJQml0bWFwKglGbGlwSW1hZ2UoRlhfQk9PTCBiWEZsaXAsIEZYX0JPT0wgYllGbGlwKSBjb25zdDsNCi0NCi0gICAgdm9pZAkJCUdldE92ZXJsYXBSZWN0KGludCYgZGVzdF9sZWZ0LCBpbnQmIGRlc3RfdG9wLCBpbnQmIHdpZHRoLCBpbnQmIGhlaWdodCwgaW50IHNyY193aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfaGVpZ2h0LCBpbnQmIHNyY19sZWZ0LCBpbnQmIHNyY190b3AsIGNvbnN0IENGWF9DbGlwUmduKiBwQ2xpcFJnbik7DQotDQotICAgIENGWF9ESUJpdG1hcCoJbV9wQWxwaGFNYXNrOw0KLXByb3RlY3RlZDoNCi0NCi0gICAgQ0ZYX0RJQlNvdXJjZSgpOw0KLQ0KLSAgICBpbnQJCQkJbV9XaWR0aDsNCi0NCi0gICAgaW50CQkJCW1fSGVpZ2h0Ow0KLQ0KLSAgICBpbnQJCQkJbV9icHA7DQotDQotICAgIEZYX0RXT1JECQltX0FscGhhRmxhZzsNCi0NCi0gICAgRlhfRFdPUkQJCW1fUGl0Y2g7DQotDQotICAgIEZYX0RXT1JEKgkJbV9wUGFsZXR0ZTsNCi0NCi0gICAgdm9pZAkJCUJ1aWxkUGFsZXR0ZSgpOw0KLQ0KLSAgICBGWF9CT09MCQkJQnVpbGRBbHBoYU1hc2soKTsNCi0NCi0gICAgaW50CQkJCUZpbmRQYWxldHRlKEZYX0RXT1JEIGNvbG9yKSBjb25zdDsNCi0NCi0gICAgdm9pZAkJCUdldFBhbGV0dGUoRlhfRFdPUkQqIHBhbCwgaW50IGFscGhhKSBjb25zdDsNCi19Ow0KLWNsYXNzIENGWF9ESUJpdG1hcCA6IHB1YmxpYyBDRlhfRElCU291cmNlDQotew0KLXB1YmxpYzoNCi0NCi0gICAgdmlydHVhbCB+Q0ZYX0RJQml0bWFwKCk7DQotDQotICAgIENGWF9ESUJpdG1hcCgpOw0KLQ0KLSAgICBDRlhfRElCaXRtYXAoY29uc3QgQ0ZYX0RJQml0bWFwJiBzcmMpOw0KLQ0KLSAgICBGWF9CT09MCQkJQ3JlYXRlKGludCB3aWR0aCwgaW50IGhlaWdodCwgRlhESUJfRm9ybWF0IGZvcm1hdCwgRlhfTFBCWVRFIHBCdWZmZXIgPSBOVUxMLCBpbnQgcGl0Y2ggPSAwKTsNCi0NCi0gICAgRlhfQk9PTAkJCUNvcHkoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyYyk7DQotDQotICAgIHZpcnR1YWwJRlhfTFBCWVRFCUdldEJ1ZmZlcigpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BCdWZmZXI7DQotICAgIH0NCi0NCi0gICAgdmlydHVhbCBGWF9MUENCWVRFCUdldFNjYW5saW5lKGludCBsaW5lKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wQnVmZmVyID8gbV9wQnVmZmVyICsgbGluZSAqIG1fUGl0Y2ggOiBOVUxMOw0KLSAgICB9DQotDQotICAgIHZpcnR1YWwgdm9pZAlEb3duU2FtcGxlU2NhbmxpbmUoaW50IGxpbmUsIEZYX0xQQllURSBkZXN0X3NjYW4sIGludCBkZXN0X2JwcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF93aWR0aCwgRlhfQk9PTCBiRmxpcFgsIGludCBjbGlwX2xlZnQsIGludCBjbGlwX3dpZHRoKSBjb25zdDsNCi0NCi0gICAgdm9pZAkJCVRha2VPdmVyKENGWF9ESUJpdG1hcCogcFNyY0JpdG1hcCk7DQotDQotICAgIEZYX0JPT0wJCQlDb252ZXJ0Rm9ybWF0KEZYRElCX0Zvcm1hdCBmb3JtYXQsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMKTsNCi0NCi0gICAgdm9pZAkJCUNsZWFyKEZYX0RXT1JEIGNvbG9yKTsNCi0NCi0gICAgRlhfRFdPUkQJCUdldFBpeGVsKGludCB4LCBpbnQgeSkgY29uc3Q7DQotDQotICAgIHZvaWQJCQlTZXRQaXhlbChpbnQgeCwgaW50IHksIEZYX0RXT1JEIGNvbG9yKTsNCi0NCi0gICAgRlhfQk9PTAkJCUxvYWRDaGFubmVsKEZYRElCX0NoYW5uZWwgZGVzdENoYW5uZWwsIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIEZYRElCX0NoYW5uZWwgc3JjQ2hhbm5lbCk7DQotDQotICAgIEZYX0JPT0wJCQlMb2FkQ2hhbm5lbChGWERJQl9DaGFubmVsIGRlc3RDaGFubmVsLCBpbnQgdmFsdWUpOw0KLQ0KLSAgICBGWF9CT09MCQkJTXVsdGlwbHlBbHBoYShpbnQgYWxwaGEpOw0KLQ0KLSAgICBGWF9CT09MCQkJTXVsdGlwbHlBbHBoYShjb25zdCBDRlhfRElCU291cmNlKiBwQWxwaGFNYXNrKTsNCi0NCi0gICAgRlhfQk9PTAkJCVRyYW5zZmVyQml0bWFwKGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyY0JpdG1hcCwgaW50IHNyY19sZWZ0LCBpbnQgc3JjX3RvcCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwpOw0KLQ0KLSAgICBGWF9CT09MCQkJQ29tcG9zaXRlQml0bWFwKGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3AsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsZW5kX3R5cGUgPSBGWERJQl9CTEVORF9OT1JNQUwsIGNvbnN0IENGWF9DbGlwUmduKiBwQ2xpcFJnbiA9IE5VTEwsIEZYX0JPT0wgYlJnYkJ5dGVPcmRlciA9IEZBTFNFLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCk7DQotDQotICAgIEZYX0JPT0wJCQlUcmFuc2Zlck1hc2soaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcE1hc2ssIEZYX0RXT1JEIGNvbG9yLCBpbnQgc3JjX2xlZnQsIGludCBzcmNfdG9wLCBpbnQgYWxwaGFfZmxhZyA9IDAsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMKTsNCi0NCi0gICAgRlhfQk9PTAkJCUNvbXBvc2l0ZU1hc2soaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBNYXNrLCBGWF9EV09SRCBjb2xvciwgaW50IHNyY19sZWZ0LCBpbnQgc3JjX3RvcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsZW5kX3R5cGUgPSBGWERJQl9CTEVORF9OT1JNQUwsIGNvbnN0IENGWF9DbGlwUmduKiBwQ2xpcFJnbiA9IE5VTEwsIEZYX0JPT0wgYlJnYkJ5dGVPcmRlciA9IEZBTFNFLCBpbnQgYWxwaGFfZmxhZyA9IDAsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMKTsNCi0NCi0gICAgRlhfQk9PTAkJCUNvbXBvc2l0ZVJlY3QoaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEZYX0RXT1JEIGNvbG9yLCBpbnQgYWxwaGFfZmxhZyA9IDAsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMKTsNCi0NCi0gICAgRlhfQk9PTAkJCUNvbnZlcnRDb2xvclNjYWxlKEZYX0RXT1JEIGZvcmVjb2xvciwgRlhfRFdPUkQgYmFja2NvbG9yKTsNCi0NCi0gICAgRlhfQk9PTAkJCURpdGhlckZTKGNvbnN0IEZYX0RXT1JEKiBwUGFsZXR0ZSwgaW50IHBhbF9zaXplLCBjb25zdCBGWF9SRUNUKiBwUmVjdCA9IE5VTEwpOw0KLXByb3RlY3RlZDoNCi0NCi0gICAgRlhfTFBCWVRFCQltX3BCdWZmZXI7DQotDQotICAgIEZYX0JPT0wJCQltX2JFeHRCdWY7DQotDQotICAgIEZYX0JPT0wJCQlHZXRHcmF5RGF0YSh2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCk7DQotfTsNCi1jbGFzcyBDRlhfRElCRXh0cmFjdG9yIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDRlhfRElCRXh0cmFjdG9yKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmMpOw0KLQ0KLSAgICB+Q0ZYX0RJQkV4dHJhY3RvcigpOw0KLQ0KLSAgICBvcGVyYXRvciBDRlhfRElCaXRtYXAqKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcEJpdG1hcDsNCi0gICAgfQ0KLXByaXZhdGU6DQotDQotICAgIENGWF9ESUJpdG1hcCoJCQltX3BCaXRtYXA7DQotfTsNCi10eXBlZGVmIENGWF9Db3VudFJlZjxDRlhfRElCaXRtYXA+IENGWF9ESUJpdG1hcFJlZjsNCi1jbGFzcyBDRlhfRmlsdGVyZWRESUIgOiBwdWJsaWMgQ0ZYX0RJQlNvdXJjZQ0KLXsNCi1wdWJsaWM6DQotDQotICAgIENGWF9GaWx0ZXJlZERJQigpOw0KLQ0KLSAgICB+Q0ZYX0ZpbHRlcmVkRElCKCk7DQotDQotICAgIHZvaWQJCQkJCUxvYWRTcmMoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyYywgRlhfQk9PTCBiQXV0b0Ryb3BTcmMgPSBGQUxTRSk7DQotDQotICAgIHZpcnR1YWwgRlhESUJfRm9ybWF0CUdldERlc3RGb3JtYXQoKSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfRFdPUkQqCQlHZXREZXN0UGFsZXR0ZSgpID0gMDsNCi0NCi0NCi0gICAgdmlydHVhbCB2b2lkCQkJVHJhbnNsYXRlU2NhbmxpbmUoRlhfTFBCWVRFIGRlc3RfYnVmLCBGWF9MUENCWVRFIHNyY19idWYpIGNvbnN0ID0gMDsNCi0NCi0gICAgdmlydHVhbCB2b2lkCQkJVHJhbnNsYXRlRG93blNhbXBsZXMoRlhfTFBCWVRFIGRlc3RfYnVmLCBGWF9MUENCWVRFIHNyY19idWYsIGludCBwaXhlbHMsIGludCBCcHApIGNvbnN0ID0gMDsNCi1wcm90ZWN0ZWQ6DQotICAgIHZpcnR1YWwgRlhfTFBDQllURQkJR2V0U2NhbmxpbmUoaW50IGxpbmUpIGNvbnN0Ow0KLSAgICB2aXJ0dWFsIHZvaWQJCQlEb3duU2FtcGxlU2NhbmxpbmUoaW50IGxpbmUsIEZYX0xQQllURSBkZXN0X3NjYW4sIGludCBkZXN0X2JwcCwNCi0gICAgICAgICAgICBpbnQgZGVzdF93aWR0aCwgRlhfQk9PTCBiRmxpcFgsIGludCBjbGlwX2xlZnQsIGludCBjbGlwX3dpZHRoKSBjb25zdDsNCi0NCi0gICAgY29uc3QgQ0ZYX0RJQlNvdXJjZSoJbV9wU3JjOw0KLQ0KLSAgICBGWF9CT09MCQkJCQltX2JBdXRvRHJvcFNyYzsNCi0NCi0gICAgRlhfTFBCWVRFCQkJCW1fcFNjYW5saW5lOw0KLX07DQotY2xhc3MgSUZYX1NjYW5saW5lQ29tcG9zZXINCi17DQotcHVibGljOg0KLQ0KLSAgICB2aXJ0dWFsCXZvaWQJCUNvbXBvc2VTY2FubGluZShpbnQgbGluZSwgRlhfTFBDQllURSBzY2FubGluZSwgRlhfTFBDQllURSBzY2FuX2V4dHJhX2FscGhhID0gTlVMTCkgPSAwOw0KLQ0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCVNldEluZm8oaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBGWERJQl9Gb3JtYXQgc3JjX2Zvcm1hdCwgRlhfRFdPUkQqIHBTcmNQYWxldHRlKSA9IDA7DQotfTsNCi1jbGFzcyBDRlhfU2NhbmxpbmVDb21wb3NpdG9yIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDRlhfU2NhbmxpbmVDb21wb3NpdG9yKCk7DQotDQotICAgIH5DRlhfU2NhbmxpbmVDb21wb3NpdG9yKCk7DQotDQotICAgIEZYX0JPT0wJCQkJSW5pdChGWERJQl9Gb3JtYXQgZGVzdF9mb3JtYXQsIEZYRElCX0Zvcm1hdCBzcmNfZm9ybWF0LCBGWF9JTlQzMiB3aWR0aCwgRlhfRFdPUkQqIHBTcmNQYWxldHRlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgbWFza19jb2xvciwgaW50IGJsZW5kX3R5cGUsIEZYX0JPT0wgYkNsaXAsIEZYX0JPT0wgYlJnYkJ5dGVPcmRlciA9IEZBTFNFLCBpbnQgYWxwaGFfZmxhZyA9IDAsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMKTsNCi0NCi0NCi0gICAgdm9pZAkJCQlDb21wb3NpdGVSZ2JCaXRtYXBMaW5lKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgRlhfTFBDQllURSBjbGlwX3NjYW4sDQotICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfZXh0cmFfYWxwaGEgPSBOVUxMLCBGWF9MUEJZVEUgZHN0X2V4dHJhX2FscGhhID0gTlVMTCk7DQotDQotDQotICAgIHZvaWQJCQkJQ29tcG9zaXRlUGFsQml0bWFwTGluZShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgc3JjX2xlZnQsIGludCB3aWR0aCwgRlhfTFBDQllURSBjbGlwX3NjYW4sDQotICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfZXh0cmFfYWxwaGEgPSBOVUxMLCBGWF9MUEJZVEUgZHN0X2V4dHJhX2FscGhhID0gTlVMTCk7DQotDQotDQotICAgIHZvaWQJCQkJQ29tcG9zaXRlQnl0ZU1hc2tMaW5lKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgRlhfTFBDQllURSBjbGlwX3NjYW4sDQotICAgICAgICAgICAgRlhfTFBCWVRFIGRzdF9leHRyYV9hbHBoYSA9IE5VTEwpOw0KLQ0KLQ0KLSAgICB2b2lkCQkJCUNvbXBvc2l0ZUJpdE1hc2tMaW5lKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCBzcmNfbGVmdCwgaW50IHdpZHRoLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwNCi0gICAgICAgICAgICBGWF9MUEJZVEUgZHN0X2V4dHJhX2FscGhhID0gTlVMTCk7DQotcHJvdGVjdGVkOg0KLSAgICBpbnQJCQkJCW1fVHJhbnNwYXJlbmN5Ow0KLSAgICBGWERJQl9Gb3JtYXQJCW1fU3JjRm9ybWF0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fRGVzdEZvcm1hdDsNCi0gICAgRlhfRFdPUkQqCQkJbV9wU3JjUGFsZXR0ZTsNCi0NCi0gICAgaW50CQkJCQltX01hc2tBbHBoYSwNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX01hc2tSZWQsDQotICAgICAgICAgICAgICAgICAgICAgICAgbV9NYXNrR3JlZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgbV9NYXNrQmx1ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX01hc2tCbGFjazsNCi0gICAgaW50CQkJCQltX0JsZW5kVHlwZTsNCi0gICAgdm9pZCoJCQkJbV9wSWNjVHJhbnNmb3JtOw0KLSAgICBGWF9MUEJZVEUJCQltX3BDYWNoZVNjYW5saW5lOw0KLSAgICBpbnQJCQkJCW1fQ2FjaGVTaXplOw0KLSAgICBGWF9CT09MICAgICAgICAgICAgIG1fYlJnYkJ5dGVPcmRlcjsNCi19Ow0KLWNsYXNzIENGWF9CaXRtYXBDb21wb3NlciA6IHB1YmxpYyBJRlhfU2NhbmxpbmVDb21wb3NlciwgcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDRlhfQml0bWFwQ29tcG9zZXIoKTsNCi0NCi0gICAgfkNGWF9CaXRtYXBDb21wb3NlcigpOw0KLQ0KLQ0KLSAgICB2b2lkCQkJCUNvbXBvc2UoQ0ZYX0RJQml0bWFwKiBwRGVzdCwgY29uc3QgQ0ZYX0NsaXBSZ24qIHBDbGlwUmduLCBpbnQgYml0bWFwX2FscGhhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgbWFza19jb2xvciwgRlhfUkVDVCYgZGVzdF9yZWN0LCBGWF9CT09MIGJWZXJ0aWNhbCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYkZsaXBYLCBGWF9CT09MIGJGbGlwWSwgRlhfQk9PTCBiUmdiQnl0ZU9yZGVyID0gRkFMU0UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZyA9IDAsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMLCBpbnQgYmxlbmRfdHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTCk7DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJU2V0SW5mbyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIEZYRElCX0Zvcm1hdCBzcmNfZm9ybWF0LCBGWF9EV09SRCogcFNyY1BhbGV0dGUpOw0KLQ0KLQ0KLSAgICB2aXJ0dWFsCXZvaWQJCUNvbXBvc2VTY2FubGluZShpbnQgbGluZSwgRlhfTFBDQllURSBzY2FubGluZSwgRlhfTFBDQllURSBzY2FuX2V4dHJhX2FscGhhKTsNCi1wcm90ZWN0ZWQ6DQotDQotICAgIHZvaWQJCQkJRG9Db21wb3NlKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCBkZXN0X3dpZHRoLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfZXh0cmFfYWxwaGEgPSBOVUxMLCBGWF9MUEJZVEUgZHN0X2V4dHJhX2FscGhhID0gTlVMTCk7DQotICAgIENGWF9ESUJpdG1hcCoJCW1fcEJpdG1hcDsNCi0gICAgY29uc3QgQ0ZYX0NsaXBSZ24qCW1fcENsaXBSZ247DQotICAgIEZYRElCX0Zvcm1hdAkJbV9TcmNGb3JtYXQ7DQotICAgIGludAkJCQkJbV9EZXN0TGVmdCwgbV9EZXN0VG9wLCBtX0Rlc3RXaWR0aCwgbV9EZXN0SGVpZ2h0LCBtX0JpdG1hcEFscGhhOw0KLSAgICBGWF9EV09SRAkJCW1fTWFza0NvbG9yOw0KLSAgICBjb25zdCBDRlhfRElCaXRtYXAqCW1fcENsaXBNYXNrOw0KLSAgICBDRlhfU2NhbmxpbmVDb21wb3NpdG9yCW1fQ29tcG9zaXRvcjsNCi0gICAgRlhfQk9PTAkJCQltX2JWZXJ0aWNhbCwgbV9iRmxpcFgsIG1fYkZsaXBZOw0KLSAgICBpbnQJCQkJCW1fQWxwaGFGbGFnOw0KLSAgICB2b2lkKgkJCQltX3BJY2NUcmFuc2Zvcm07DQotICAgIEZYX0JPT0wgICAgICAgICAgICAgbV9iUmdiQnl0ZU9yZGVyOw0KLSAgICBpbnQJCQkJCW1fQmxlbmRUeXBlOw0KLSAgICB2b2lkCQkJCUNvbXBvc2VTY2FubGluZVYoaW50IGxpbmUsIEZYX0xQQ0JZVEUgc2NhbmxpbmUsIEZYX0xQQ0JZVEUgc2Nhbl9leHRyYV9hbHBoYSA9IE5VTEwpOw0KLSAgICBGWF9MUEJZVEUJCQltX3BTY2FubGluZVYsIG1fcENsaXBTY2FuViwgbV9wQWRkQ2xpcFNjYW4sIG1fcFNjYW5saW5lQWxwaGFWOw0KLX07DQotY2xhc3MgQ0ZYX0JpdG1hcFN0b3JlciA6IHB1YmxpYyBJRlhfU2NhbmxpbmVDb21wb3NlciwgcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDRlhfQml0bWFwU3RvcmVyKCk7DQotDQotICAgIH5DRlhfQml0bWFwU3RvcmVyKCk7DQotDQotICAgIHZpcnR1YWwJdm9pZAkJQ29tcG9zZVNjYW5saW5lKGludCBsaW5lLCBGWF9MUENCWVRFIHNjYW5saW5lLCBGWF9MUENCWVRFIHNjYW5fZXh0cmFfYWxwaGEpOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCVNldEluZm8oaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBGWERJQl9Gb3JtYXQgc3JjX2Zvcm1hdCwgRlhfRFdPUkQqIHBTcmNQYWxldHRlKTsNCi0NCi0gICAgQ0ZYX0RJQml0bWFwKgkJR2V0Qml0bWFwKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcEJpdG1hcDsNCi0gICAgfQ0KLQ0KLSAgICBDRlhfRElCaXRtYXAqCQlEZXRhY2goKTsNCi0NCi0gICAgdm9pZAkJCQlSZXBsYWNlKENGWF9ESUJpdG1hcCogcEJpdG1hcCk7DQotcHJpdmF0ZToNCi0gICAgQ0ZYX0RJQml0bWFwKgkJbV9wQml0bWFwOw0KLX07DQotY2xhc3MgQ1N0cmV0Y2hFbmdpbmU7DQotY2xhc3MgQ0ZYX0ltYWdlU3RyZXRjaGVyIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDRlhfSW1hZ2VTdHJldGNoZXIoKTsNCi0NCi0gICAgfkNGWF9JbWFnZVN0cmV0Y2hlcigpOw0KLQ0KLSAgICBGWF9JTlQzMgkJU3RhcnQoSUZYX1NjYW5saW5lQ29tcG9zZXIqIHBEZXN0LCBjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgY29uc3QgRlhfUkVDVCYgYml0bWFwX3JlY3QsIEZYX0RXT1JEIGZsYWdzKTsNCi0NCi0NCi0gICAgRlhfSU5UMzIJCUNvbnRpbnVlKElGWF9QYXVzZSogcFBhdXNlKTsNCi0gICAgSUZYX1NjYW5saW5lQ29tcG9zZXIqCW1fcERlc3Q7DQotICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqCW1fcFNvdXJjZTsNCi0gICAgQ1N0cmV0Y2hFbmdpbmUqCQltX3BTdHJldGNoRW5naW5lOw0KLSAgICBGWF9EV09SRAkJbV9GbGFnczsNCi0gICAgRlhfQk9PTAkJCW1fYkZsaXBYLA0KLSAgICAgICAgICAgICAgICAgICAgbV9iRmxpcFk7DQotICAgIGludAkJCQltX0Rlc3RXaWR0aCwNCi0gICAgICAgICAgICAgICAgICAgIG1fRGVzdEhlaWdodDsNCi0gICAgRlhfUkVDVAkJCW1fQ2xpcFJlY3Q7DQotICAgIGludAkJCQltX0xpbmVJbmRleDsNCi0gICAgaW50CQkJCW1fRGVzdEJQUDsNCi0gICAgRlhfTFBCWVRFCQltX3BTY2FubGluZTsNCi0gICAgRlhfTFBCWVRFICAgICAgIG1fcE1hc2tTY2FubGluZTsNCi0gICAgRlhESUJfRm9ybWF0CW1fRGVzdEZvcm1hdDsNCi0gICAgRlhfSU5UMzIJCW1fU3RhdHVzOw0KLQ0KLSAgICBGWF9JTlQzMgkJU3RhcnRRdWlja1N0cmV0Y2goKTsNCi0NCi0gICAgRlhfSU5UMzIJCVN0YXJ0U3RyZXRjaCgpOw0KLQ0KLSAgICBGWF9JTlQzMgkJQ29udGludWVRdWlja1N0cmV0Y2goSUZYX1BhdXNlKiBwUGF1c2UpOw0KLQ0KLSAgICBGWF9JTlQzMgkJQ29udGludWVTdHJldGNoKElGWF9QYXVzZSogcFBhdXNlKTsNCi19Ow0KLWNsYXNzIENGWF9JbWFnZVRyYW5zZm9ybWVyIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDRlhfSW1hZ2VUcmFuc2Zvcm1lcigpOw0KLQ0KLSAgICB+Q0ZYX0ltYWdlVHJhbnNmb3JtZXIoKTsNCi0NCi0gICAgRlhfSU5UMzIJU3RhcnQoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyYywgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgaW50IGZsYWdzLCBjb25zdCBGWF9SRUNUKiBwQ2xpcCk7DQotDQotDQotICAgIEZYX0lOVDMyCUNvbnRpbnVlKElGWF9QYXVzZSogcFBhdXNlKTsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCogbV9wTWF0cml4Ow0KLSAgICBGWF9SRUNUCQltX1N0cmV0Y2hDbGlwOw0KLSAgICBpbnQJCQltX1Jlc3VsdExlZnQsIG1fUmVzdWx0VG9wLCBtX1Jlc3VsdFdpZHRoLCBtX1Jlc3VsdEhlaWdodDsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeAltX2Rlc3Qyc3RyZXRjaDsNCi0gICAgQ0ZYX0ltYWdlU3RyZXRjaGVyCW1fU3RyZXRjaGVyOw0KLSAgICBDRlhfQml0bWFwU3RvcmVyCW1fU3RvcmVyOw0KLSAgICBGWF9EV09SRAltX0ZsYWdzOw0KLSAgICBpbnQJCQltX1N0YXR1czsNCi19Ow0KLWNsYXNzIENGWF9JbWFnZVJlbmRlcmVyIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDRlhfSW1hZ2VSZW5kZXJlcigpOw0KLQ0KLSAgICB+Q0ZYX0ltYWdlUmVuZGVyZXIoKTsNCi0NCi0gICAgRlhfSU5UMzIJCQlTdGFydChDRlhfRElCaXRtYXAqIHBEZXZpY2UsIGNvbnN0IENGWF9DbGlwUmduKiBwQ2xpcFJnbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwU291cmNlLCBpbnQgYml0bWFwX2FscGhhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIG1hc2tfY29sb3IsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIEZYX0RXT1JEIGRpYl9mbGFncywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9CT09MIGJSZ2JCeXRlT3JkZXIgPSBGQUxTRSwgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxlbmRfdHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTCk7DQotDQotICAgIEZYX0lOVDMyCQkJQ29udGludWUoSUZYX1BhdXNlKiBwUGF1c2UpOw0KLXByb3RlY3RlZDoNCi0gICAgQ0ZYX0RJQml0bWFwKgkJbV9wRGV2aWNlOw0KLSAgICBjb25zdCBDRlhfQ2xpcFJnbioJbV9wQ2xpcFJnbjsNCi0gICAgaW50CQkJCQltX0JpdG1hcEFscGhhOw0KLSAgICBGWF9EV09SRAkJCW1fTWFza0NvbG9yOw0KLSAgICBDRlhfQWZmaW5lTWF0cml4CW1fTWF0cml4Ow0KLSAgICBDRlhfSW1hZ2VUcmFuc2Zvcm1lcioJbV9wVHJhbnNmb3JtZXI7DQotICAgIENGWF9JbWFnZVN0cmV0Y2hlcgltX1N0cmV0Y2hlcjsNCi0gICAgQ0ZYX0JpdG1hcENvbXBvc2VyCW1fQ29tcG9zZXI7DQotICAgIGludAkJCQkJbV9TdGF0dXM7DQotICAgIGludAkJCQkJbV9EZXN0TGVmdCwgbV9EZXN0VG9wOw0KLSAgICBGWF9SRUNUCQkJCW1fQ2xpcEJveDsNCi0gICAgRlhfRFdPUkQJCQltX0ZsYWdzOw0KLSAgICBpbnQJCQkJCW1fQWxwaGFGbGFnOw0KLSAgICB2b2lkKgkJCQltX3BJY2NUcmFuc2Zvcm07DQotICAgIEZYX0JPT0wJCQkJbV9iUmdiQnl0ZU9yZGVyOw0KLSAgICBpbnQJCQkJCW1fQmxlbmRUeXBlOw0KLX07DQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlBERl9ESUJfSF8KKyNkZWZpbmUgX0ZQREZfRElCX0hfCisjaWZuZGVmIF9GWENSVF9FWFRFTlNJT05fCisjaW5jbHVkZSAiLi4vZnhjcnQvZnhfZXh0LmgiCisjZW5kaWYKK2VudW0gRlhESUJfRm9ybWF0IHsKKyAgICBGWERJQl9JbnZhbGlkID0gMCwKKyAgICBGWERJQl8xYnBwTWFzayA9IDB4MTAxLAorICAgIEZYRElCXzFicHBSZ2IgPSAweDAwMSwKKyAgICBGWERJQl8xYnBwQ215ayA9IDB4NDAxLAorICAgIEZYRElCXzhicHBNYXNrID0gMHgxMDgsCisgICAgRlhESUJfOGJwcFJnYiA9IDB4MDA4LAorICAgIEZYRElCXzhicHBSZ2JhID0gMHgyMDgsCisgICAgRlhESUJfOGJwcENteWsgPSAweDQwOCwKKyAgICBGWERJQl84YnBwQ215a2EgPSAweDYwOCwKKyAgICBGWERJQl9SZ2IgPSAweDAxOCwKKyAgICBGWERJQl9SZ2JhID0gMHgyMTgsCisgICAgRlhESUJfUmdiMzIgPSAweDAyMCwKKyAgICBGWERJQl9BcmdiID0gMHgyMjAsCisgICAgRlhESUJfQ215ayA9IDB4NDIwLAorICAgIEZYRElCX0NteWthID0gMHg2MjAsCit9OworZW51bSBGWERJQl9DaGFubmVsIHsKKyAgICBGWERJQl9SZWQgPSAxLAorICAgIEZYRElCX0dyZWVuLAorICAgIEZYRElCX0JsdWUsCisgICAgRlhESUJfQ3lhbiwKKyAgICBGWERJQl9NYWdlbnRhLAorICAgIEZYRElCX1llbGxvdywKKyAgICBGWERJQl9CbGFjaywKKyAgICBGWERJQl9BbHBoYQorfTsKKyNkZWZpbmUgRlhESUJfRE9XTlNBTVBMRQkJMHgwNAorI2RlZmluZSBGWERJQl9JTlRFUlBPTAkJCTB4MjAKKyNkZWZpbmUgRlhESUJfQklDVUJJQ19JTlRFUlBPTCAgMHg4MAorI2RlZmluZSBGWERJQl9OT1NNT09USAkJCTB4MTAwCisjZGVmaW5lIEZYRElCX1BBTEVUVEVfTE9DCQkweDAxCisjZGVmaW5lIEZYRElCX1BBTEVUVEVfV0lOCQkweDAyCisjZGVmaW5lIEZYRElCX1BBTEVUVEVfTUFDCQkweDA0CisjZGVmaW5lIEZYRElCX0JMRU5EX05PUk1BTAkJCTAKKyNkZWZpbmUgRlhESUJfQkxFTkRfTVVMVElQTFkJCTEKKyNkZWZpbmUgRlhESUJfQkxFTkRfU0NSRUVOCQkJMgorI2RlZmluZSBGWERJQl9CTEVORF9PVkVSTEFZCQkJMworI2RlZmluZSBGWERJQl9CTEVORF9EQVJLRU4JCQk0CisjZGVmaW5lIEZYRElCX0JMRU5EX0xJR0hURU4JCQk1CisKKyNkZWZpbmUgRlhESUJfQkxFTkRfQ09MT1JET0RHRQkJNgorI2RlZmluZSBGWERJQl9CTEVORF9DT0xPUkJVUk4JCTcKKyNkZWZpbmUgRlhESUJfQkxFTkRfSEFSRExJR0hUCQk4CisjZGVmaW5lIEZYRElCX0JMRU5EX1NPRlRMSUdIVAkJOQorI2RlZmluZSBGWERJQl9CTEVORF9ESUZGRVJFTkNFCQkxMAorI2RlZmluZSBGWERJQl9CTEVORF9FWENMVVNJT04JCTExCisjZGVmaW5lIEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRQkyMQorI2RlZmluZSBGWERJQl9CTEVORF9IVUUJCQkJMjEKKyNkZWZpbmUgRlhESUJfQkxFTkRfU0FUVVJBVElPTgkJMjIKKyNkZWZpbmUgRlhESUJfQkxFTkRfQ09MT1IJCQkyMworI2RlZmluZSBGWERJQl9CTEVORF9MVU1JTk9TSVRZCQkyNAorI2RlZmluZSBGWERJQl9CTEVORF9VTlNVUFBPUlRFRAkJLTEKK3R5cGVkZWYgRlhfRFdPUkQJRlhfQVJHQjsKK3R5cGVkZWYgRlhfRFdPUkQJRlhfQ09MT1JSRUY7Cit0eXBlZGVmIEZYX0RXT1JECUZYX0NNWUs7CitjbGFzcyBDRlhfQ2xpcFJnbjsKK2NsYXNzIENGWF9ESUJTb3VyY2U7CitjbGFzcyBDRlhfRElCaXRtYXA7CisjZGVmaW5lIEZYU1lTX1JHQihyLCBnLCBiKSAgKChyKSB8ICgoZykgPDwgOCkgfCAoKGIpIDw8IDE2KSkKKyNkZWZpbmUgRlhTWVNfR2V0UlZhbHVlKHJnYikgKChyZ2IpICYgMHhmZikKKyNkZWZpbmUgRlhTWVNfR2V0R1ZhbHVlKHJnYikgKCgocmdiKSA+PiA4KSAmIDB4ZmYpCisjZGVmaW5lIEZYU1lTX0dldEJWYWx1ZShyZ2IpICgoKHJnYikgPj4gMTYpICYgMHhmZikKKyNkZWZpbmUgRlhfQ0NPTE9SKHZhbCkgKDI1NS0odmFsKSkKKyNkZWZpbmUgRlhTWVNfQ01ZSyhjLCBtLCB5LCBrKSAoKChjKSA8PCAyNCkgfCAoKG0pIDw8IDE2KSB8ICgoeSkgPDwgOCkgfCAoaykpCisjZGVmaW5lIEZYU1lTX0dldENWYWx1ZShjbXlrKSAoKEZYX0JZVEUpKChjbXlrKSA+PiAyNCkgJiAweGZmKQorI2RlZmluZSBGWFNZU19HZXRNVmFsdWUoY215aykgKChGWF9CWVRFKSgoY215aykgPj4gMTYpICYgMHhmZikKKyNkZWZpbmUgRlhTWVNfR2V0WVZhbHVlKGNteWspICgoRlhfQllURSkoKGNteWspID4+IDgpICYgMHhmZikKKyNkZWZpbmUgRlhTWVNfR2V0S1ZhbHVlKGNteWspICgoRlhfQllURSkoY215aykgJiAweGZmKQordm9pZCBDbXlrRGVjb2RlKEZYX0NNWUsgY215aywgaW50JiBjLCBpbnQmIG0sIGludCYgeSwgaW50JiBrKTsKK2lubGluZSBGWF9DTVlLIENteWtFbmNvZGUoaW50IGMsIGludCBtLCBpbnQgeSwgaW50IGspCit7CisgICAgcmV0dXJuIChjIDw8IDI0KSB8IChtIDw8IDE2KSB8ICh5IDw8IDgpIHwgazsKK30KK3ZvaWQgQXJnYkRlY29kZShGWF9BUkdCIGFyZ2IsIGludCYgYSwgaW50JiByLCBpbnQmZywgaW50JiBiKTsKK3ZvaWQgQXJnYkRlY29kZShGWF9BUkdCIGFyZ2IsIGludCYgYSwgRlhfQ09MT1JSRUYmIHJnYik7CitpbmxpbmUgRlhfQVJHQiBBcmdiRW5jb2RlKGludCBhLCBpbnQgciwgaW50IGcsIGludCBiKQoreworICAgIHJldHVybiAoYSA8PCAyNCkgfCAociA8PCAxNikgfCAoZyA8PCA4KSB8IGI7Cit9CitGWF9BUkdCIEFyZ2JFbmNvZGUoaW50IGEsIEZYX0NPTE9SUkVGIHJnYik7CisjZGVmaW5lIEZYQVJHQl9BKGFyZ2IpICgoRlhfQllURSkoKGFyZ2IpID4+IDI0KSkKKyNkZWZpbmUgRlhBUkdCX1IoYXJnYikgKChGWF9CWVRFKSgoYXJnYikgPj4gMTYpKQorI2RlZmluZSBGWEFSR0JfRyhhcmdiKSAoKEZYX0JZVEUpKChhcmdiKSA+PiA4KSkKKyNkZWZpbmUgRlhBUkdCX0IoYXJnYikgKChGWF9CWVRFKShhcmdiKSkKKyNkZWZpbmUgRlhBUkdCX01BS0UoYSxyLGcsYikgKCgoRlhfRFdPUkQpKGEpIDw8IDI0KSB8ICgocikgPDwgMTYpIHwgKChnKSA8PCA4KSB8IChiKSkKKyNkZWZpbmUgRlhBUkdCX01VTF9BTFBIQShhcmdiLCBhbHBoYSkgKCgoKChhcmdiKSA+PiAyNCkgKiAoYWxwaGEpIC8gMjU1KSA8PCAyNCkgfCAoKGFyZ2IpICYgMHhmZmZmZmYpKQorI2RlZmluZSBGWFJHQjJHUkFZKHIsZyxiKSAoKChiKSAqIDExICsgKGcpICogNTkgKyAocikgKiAzMCkgLyAxMDApCisjZGVmaW5lIEZYQ01ZSzJHUkFZKGMsbSx5LGspICgoKDI1NS0oYykpICogKDI1NS0oaykpICogMzAgKyAoMjU1LShtKSkgKiAoMjU1LShrKSkgKiA1OSArICgyNTUtKHkpKSAqICgyNTUtKGspKSAqIDExKSAvIDI1NTAwKQorI2RlZmluZSBGWERJQl9BTFBIQV9NRVJHRShiYWNrZHJvcCwgc291cmNlLCBzb3VyY2VfYWxwaGEpICgoKGJhY2tkcm9wKSAqICgyNTUtKHNvdXJjZV9hbHBoYSkpICsgKHNvdXJjZSkqKHNvdXJjZV9hbHBoYSkpLzI1NSkKKyNkZWZpbmUgRlhESUJfQUxQSEFfVU5JT04oZGVzdCwgc3JjKSAoKGRlc3QpICsgKHNyYykgLSAoZGVzdCkqKHNyYykvMjU1KQorI2RlZmluZSBGWENNWUtfR0VURElCKHApICgoKChGWF9MUEJZVEUpKHApKVswXSA8PCAyNCB8ICgoKEZYX0xQQllURSkocCkpWzFdIDw8IDE2KSB8ICgoKEZYX0xQQllURSkocCkpWzJdIDw8IDgpIHwgKChGWF9MUEJZVEUpKHApKVszXSkpCisjZGVmaW5lIEZYQ01ZS19TRVRESUIocCwgY215aykgICgoRlhfTFBCWVRFKShwKSlbMF0gPSAoRlhfQllURSkoKGNteWspID4+IDI0KSwgXAorICAgICAgICAoKEZYX0xQQllURSkocCkpWzFdID0gKEZYX0JZVEUpKChjbXlrKSA+PiAxNiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRlhfTFBCWVRFKShwKSlbMl0gPSAoRlhfQllURSkoKGNteWspID4+IDgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRlhfTFBCWVRFKShwKSlbM10gPSAoRlhfQllURSkoY215aykpCisjZGVmaW5lIEZYQVJHQl9HRVRESUIocCkgKCgoRlhfTFBCWVRFKShwKSlbMF0pIHwgKCgoRlhfTFBCWVRFKShwKSlbMV0gPDwgOCkgfCAoKChGWF9MUEJZVEUpKHApKVsyXSA8PCAxNikgfCAoKChGWF9MUEJZVEUpKHApKVszXSA8PCAyNCkKKyNkZWZpbmUgRlhBUkdCX1NFVERJQihwLCBhcmdiKSAoKEZYX0xQQllURSkocCkpWzBdID0gKEZYX0JZVEUpKGFyZ2IpLCBcCisgICAgICAgICgoRlhfTFBCWVRFKShwKSlbMV0gPSAoRlhfQllURSkoKGFyZ2IpID4+IDgpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZYX0xQQllURSkocCkpWzJdID0gKEZYX0JZVEUpKChhcmdiKSA+PiAxNiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGWF9MUEJZVEUpKHApKVszXSA9IChGWF9CWVRFKSgoYXJnYikgPj4gMjQpCisjZGVmaW5lIEZYQVJHQl9DT1BZKGRlc3QsIHNyYykgKihGWF9MUEJZVEUpKGRlc3QpID0gKihGWF9MUEJZVEUpKHNyYyksIFwKKyAgICAgICAgKigoRlhfTFBCWVRFKShkZXN0KSsxKSA9ICooKEZYX0xQQllURSkoc3JjKSsxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigoRlhfTFBCWVRFKShkZXN0KSsyKSA9ICooKEZYX0xQQllURSkoc3JjKSsyKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKChGWF9MUEJZVEUpKGRlc3QpKzMpID0gKigoRlhfTFBCWVRFKShzcmMpKzMpCisjZGVmaW5lIEZYQ01ZS19DT1BZKGRlc3QsIHNyYykgICooRlhfTFBCWVRFKShkZXN0KSA9ICooRlhfTFBCWVRFKShzcmMpLCBcCisgICAgICAgICooKEZYX0xQQllURSkoZGVzdCkrMSkgPSAqKChGWF9MUEJZVEUpKHNyYykrMSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKEZYX0xQQllURSkoZGVzdCkrMikgPSAqKChGWF9MUEJZVEUpKHNyYykrMiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigoRlhfTFBCWVRFKShkZXN0KSszKSA9ICooKEZYX0xQQllURSkoc3JjKSszKQorI2RlZmluZSBGWEFSR0JfU0VUUkdCT1JERVJESUIocCwgYXJnYikgKChGWF9MUEJZVEUpKHApKVszXSA9IChGWF9CWVRFKShhcmdiPj4yNCksIFwKKyAgICAgICAgKChGWF9MUEJZVEUpKHApKVswXSA9IChGWF9CWVRFKSgoYXJnYikgPj4gMTYpLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZYX0xQQllURSkocCkpWzFdID0gKEZYX0JZVEUpKChhcmdiKSA+PiA4KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZYX0xQQllURSkocCkpWzJdID0gKEZYX0JZVEUpKGFyZ2IpCisjZGVmaW5lIEZYQVJHQl9HRVRSR0JPUkRFUkRJQihwKSAoKChGWF9MUEJZVEUpKHApKVsyXSkgfCAoKChGWF9MUEJZVEUpKHApKVsxXSA8PCA4KSB8ICgoKEZYX0xQQllURSkocCkpWzBdIDw8IDE2KSB8ICgoKEZYX0xQQllURSkocCkpWzNdIDw8IDI0KQorI2RlZmluZSBGWEFSR0JfUkdCT1JERVJDT1BZKGRlc3QsIHNyYykgKigoRlhfTFBCWVRFKShkZXN0KSszKSA9ICooKEZYX0xQQllURSkoc3JjKSszKSwgXAorICAgICAgICAqKEZYX0xQQllURSkoZGVzdCkgPSAqKChGWF9MUEJZVEUpKHNyYykrMiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigoRlhfTFBCWVRFKShkZXN0KSsxKSA9ICooKEZYX0xQQllURSkoc3JjKSsxKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKEZYX0xQQllURSkoZGVzdCkrMikgPSAqKChGWF9MUEJZVEUpKHNyYykpCisjZGVmaW5lIEZYQVJHQl9UT0RJQihhcmdiKSAoYXJnYikKKyNkZWZpbmUgRlhDTVlLX1RPRElCKGNteWspICgoRlhfQllURSkoKGNteWspID4+IDI0KSB8ICgoRlhfQllURSkoKGNteWspID4+IDE2KSkgPDwgOCB8ICgoRlhfQllURSkoKGNteWspID4+IDgpKSA8PCAxNiB8ICgoRlhfQllURSkoY215aykgPDwgMjQpKQorI2RlZmluZSBGWEFSR0JfVE9CR1JPUkRFUkRJQihhcmdiKSAoKEZYX0JZVEUpKGFyZ2I+PjE2KSB8ICgoRlhfQllURSkoYXJnYj4+OCkpIDw8IDggfCAoKEZYX0JZVEUpKGFyZ2IpKSA8PCAxNiB8ICgoRlhfQllURSkoYXJnYj4+MjQpIDw8IDI0KSkKKyNkZWZpbmUgRlhHRVRGTEFHX0NPTE9SVFlQRShmbGFnKQkJCShGWF9CWVRFKSgoZmxhZyk+PjgpCisjZGVmaW5lIEZYR0VURkxBR19BTFBIQV9GSUxMKGZsYWcpCQkJKEZYX0JZVEUpKGZsYWcpCisjZGVmaW5lIEZYR0VURkxBR19BTFBIQV9TVFJPS0UoZmxhZykJCShGWF9CWVRFKSgoZmxhZyk+PjE2KQorI2RlZmluZSBGWFNFVEZMQUdfQ09MT1JUWVBFKGZsYWcsIHZhbCkJCWZsYWcgPSAoKCh2YWwpPDw4KXwoZmxhZyYweGZmZmYwMGZmKSkKKyNkZWZpbmUgRlhTRVRGTEFHX0FMUEhBX0ZJTEwoZmxhZywgdmFsKQkJZmxhZyA9ICgodmFsKXwoZmxhZyYweGZmZmZmZjAwKSkKKyNkZWZpbmUgRlhTRVRGTEFHX0FMUEhBX1NUUk9LRShmbGFnLCB2YWwpCWZsYWcgPSAoKCh2YWwpPDwxNil8KGZsYWcmMHhmZjAwZmZmZikpCitjbGFzcyBDRlhfRElCU291cmNlIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIHZpcnR1YWwJCQl+Q0ZYX0RJQlNvdXJjZSgpOworCisKKworICAgIGludAkJCQlHZXRXaWR0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9XaWR0aDsKKyAgICB9CisKKyAgICBpbnQJCQkJR2V0SGVpZ2h0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0hlaWdodDsKKyAgICB9CisKKyAgICBGWERJQl9Gb3JtYXQJR2V0Rm9ybWF0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoRlhESUJfRm9ybWF0KShtX0FscGhhRmxhZyAqIDB4MTAwICsgbV9icHApOworICAgIH0KKworICAgIEZYX0RXT1JECQlHZXRQaXRjaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9QaXRjaDsKKyAgICB9CisKKyAgICBGWF9EV09SRCoJCUdldFBhbGV0dGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcFBhbGV0dGU7CisgICAgfQorCisKKworICAgIHZpcnR1YWwJRlhfTFBCWVRFCUdldEJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEZYX0xQQ0JZVEUJR2V0U2NhbmxpbmUoaW50IGxpbmUpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgRlhfQk9PTAkJU2tpcFRvU2NhbmxpbmUoaW50IGxpbmUsIElGWF9QYXVzZSogcFBhdXNlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZAkJRG93blNhbXBsZVNjYW5saW5lKGludCBsaW5lLCBGWF9MUEJZVEUgZGVzdF9zY2FuLCBpbnQgZGVzdF9icHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGgsIEZYX0JPT0wgYkZsaXBYLCBpbnQgY2xpcF9sZWZ0LCBpbnQgY2xpcF93aWR0aCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkCQlTZXREb3duU2FtcGxlU2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0IHt9CisKKyAgICBpbnQJCQkJR2V0QlBQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JwcDsKKyAgICB9CisKKyAgICBGWF9CT09MCQkJSXNBbHBoYU1hc2soKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fQWxwaGFGbGFnID09IDE7CisgICAgfQorCisgICAgRlhfQk9PTAkJCUhhc0FscGhhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0FscGhhRmxhZyAmIDIgPyBUUlVFIDogRkFMU0U7CisgICAgfQorCisgICAgRlhfQk9PTAkJCUlzT3BhcXVlSW1hZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEobV9BbHBoYUZsYWcgJiAzKTsKKyAgICB9CisKKyAgICBGWF9CT09MCQkJSXNDbXlrSW1hZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fQWxwaGFGbGFnICYgNCA/IFRSVUUgOiBGQUxTRTsKKyAgICB9CisKKworCisgICAgaW50CQkJCUdldFBhbGV0dGVTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBJc0FscGhhTWFzaygpID8gMCA6IChtX2JwcCA9PSAxID8gMiA6IChtX2JwcCA9PSA4ID8gMjU2IDogMCkpOworICAgIH0KKworICAgIEZYX0RXT1JECQlHZXRQYWxldHRlRW50cnkoaW50IGluZGV4KSBjb25zdDsKKworICAgIHZvaWQJCQlTZXRQYWxldHRlRW50cnkoaW50IGluZGV4LCBGWF9EV09SRCBjb2xvcik7CisgICAgRlhfRFdPUkQJCUdldFBhbGV0dGVBcmdiKGludCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRQYWxldHRlRW50cnkoaW5kZXgpOworICAgIH0KKyAgICB2b2lkCQkJU2V0UGFsZXR0ZUFyZ2IoaW50IGluZGV4LCBGWF9EV09SRCBjb2xvcikKKyAgICB7CisgICAgICAgIFNldFBhbGV0dGVFbnRyeShpbmRleCwgY29sb3IpOworICAgIH0KKworICAgIHZvaWQJCQlDb3B5UGFsZXR0ZShjb25zdCBGWF9EV09SRCogcFNyY1BhbCwgRlhfRFdPUkQgc2l6ZSA9IDI1Nik7CisKKworICAgIENGWF9ESUJpdG1hcCoJQ2xvbmUoY29uc3QgRlhfUkVDVCogcENsaXAgPSBOVUxMKSBjb25zdDsKKworICAgIENGWF9ESUJpdG1hcCoJQ2xvbmVDb252ZXJ0KEZYRElCX0Zvcm1hdCBmb3JtYXQsIGNvbnN0IEZYX1JFQ1QqIHBDbGlwID0gTlVMTCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwpIGNvbnN0OworCisgICAgQ0ZYX0RJQml0bWFwKglTdHJldGNoVG8oaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgRlhfRFdPUkQgZmxhZ3MgPSAwLCBjb25zdCBGWF9SRUNUKiBwQ2xpcCA9IE5VTEwpIGNvbnN0OworCisKKyAgICBDRlhfRElCaXRtYXAqCVRyYW5zZm9ybVRvKGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIGludCYgbGVmdCwgaW50ICZ0b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGZsYWdzID0gMCwgY29uc3QgRlhfUkVDVCogcENsaXAgPSBOVUxMKSBjb25zdDsKKworICAgIENGWF9ESUJpdG1hcCoJR2V0QWxwaGFNYXNrKGNvbnN0IEZYX1JFQ1QqIHBDbGlwID0gTlVMTCkgY29uc3Q7CisKKyAgICBGWF9CT09MCQkJQ29weUFscGhhTWFzayhjb25zdCBDRlhfRElCU291cmNlKiBwQWxwaGFNYXNrLCBjb25zdCBGWF9SRUNUKiBwQ2xpcCA9IE5VTEwpOworCisgICAgQ0ZYX0RJQml0bWFwKglTd2FwWFkoRlhfQk9PTCBiWEZsaXAsIEZYX0JPT0wgYllGbGlwLCBjb25zdCBGWF9SRUNUKiBwQ2xpcCA9IE5VTEwpIGNvbnN0OworCisgICAgQ0ZYX0RJQml0bWFwKglGbGlwSW1hZ2UoRlhfQk9PTCBiWEZsaXAsIEZYX0JPT0wgYllGbGlwKSBjb25zdDsKKworICAgIHZvaWQJCQlHZXRPdmVybGFwUmVjdChpbnQmIGRlc3RfbGVmdCwgaW50JiBkZXN0X3RvcCwgaW50JiB3aWR0aCwgaW50JiBoZWlnaHQsIGludCBzcmNfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfaGVpZ2h0LCBpbnQmIHNyY19sZWZ0LCBpbnQmIHNyY190b3AsIGNvbnN0IENGWF9DbGlwUmduKiBwQ2xpcFJnbik7CisKKyAgICBDRlhfRElCaXRtYXAqCW1fcEFscGhhTWFzazsKK3Byb3RlY3RlZDoKKworICAgIENGWF9ESUJTb3VyY2UoKTsKKworICAgIGludAkJCQltX1dpZHRoOworCisgICAgaW50CQkJCW1fSGVpZ2h0OworCisgICAgaW50CQkJCW1fYnBwOworCisgICAgRlhfRFdPUkQJCW1fQWxwaGFGbGFnOworCisgICAgRlhfRFdPUkQJCW1fUGl0Y2g7CisKKyAgICBGWF9EV09SRCoJCW1fcFBhbGV0dGU7CisKKyAgICB2b2lkCQkJQnVpbGRQYWxldHRlKCk7CisKKyAgICBGWF9CT09MCQkJQnVpbGRBbHBoYU1hc2soKTsKKworICAgIGludAkJCQlGaW5kUGFsZXR0ZShGWF9EV09SRCBjb2xvcikgY29uc3Q7CisKKyAgICB2b2lkCQkJR2V0UGFsZXR0ZShGWF9EV09SRCogcGFsLCBpbnQgYWxwaGEpIGNvbnN0OworfTsKK2NsYXNzIENGWF9ESUJpdG1hcCA6IHB1YmxpYyBDRlhfRElCU291cmNlCit7CitwdWJsaWM6CisKKyAgICB2aXJ0dWFsIH5DRlhfRElCaXRtYXAoKTsKKworICAgIENGWF9ESUJpdG1hcCgpOworCisgICAgQ0ZYX0RJQml0bWFwKGNvbnN0IENGWF9ESUJpdG1hcCYgc3JjKTsKKworICAgIEZYX0JPT0wJCQlDcmVhdGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBGWERJQl9Gb3JtYXQgZm9ybWF0LCBGWF9MUEJZVEUgcEJ1ZmZlciA9IE5VTEwsIGludCBwaXRjaCA9IDApOworCisgICAgRlhfQk9PTAkJCUNvcHkoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyYyk7CisKKyAgICB2aXJ0dWFsCUZYX0xQQllURQlHZXRCdWZmZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcEJ1ZmZlcjsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEZYX0xQQ0JZVEUJR2V0U2NhbmxpbmUoaW50IGxpbmUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wQnVmZmVyID8gbV9wQnVmZmVyICsgbGluZSAqIG1fUGl0Y2ggOiBOVUxMOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZAlEb3duU2FtcGxlU2NhbmxpbmUoaW50IGxpbmUsIEZYX0xQQllURSBkZXN0X3NjYW4sIGludCBkZXN0X2JwcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3dpZHRoLCBGWF9CT09MIGJGbGlwWCwgaW50IGNsaXBfbGVmdCwgaW50IGNsaXBfd2lkdGgpIGNvbnN0OworCisgICAgdm9pZAkJCVRha2VPdmVyKENGWF9ESUJpdG1hcCogcFNyY0JpdG1hcCk7CisKKyAgICBGWF9CT09MCQkJQ29udmVydEZvcm1hdChGWERJQl9Gb3JtYXQgZm9ybWF0LCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCk7CisKKyAgICB2b2lkCQkJQ2xlYXIoRlhfRFdPUkQgY29sb3IpOworCisgICAgRlhfRFdPUkQJCUdldFBpeGVsKGludCB4LCBpbnQgeSkgY29uc3Q7CisKKyAgICB2b2lkCQkJU2V0UGl4ZWwoaW50IHgsIGludCB5LCBGWF9EV09SRCBjb2xvcik7CisKKyAgICBGWF9CT09MCQkJTG9hZENoYW5uZWwoRlhESUJfQ2hhbm5lbCBkZXN0Q2hhbm5lbCwgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyY0JpdG1hcCwgRlhESUJfQ2hhbm5lbCBzcmNDaGFubmVsKTsKKworICAgIEZYX0JPT0wJCQlMb2FkQ2hhbm5lbChGWERJQl9DaGFubmVsIGRlc3RDaGFubmVsLCBpbnQgdmFsdWUpOworCisgICAgRlhfQk9PTAkJCU11bHRpcGx5QWxwaGEoaW50IGFscGhhKTsKKworICAgIEZYX0JPT0wJCQlNdWx0aXBseUFscGhhKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBBbHBoYU1hc2spOworCisgICAgRlhfQk9PTAkJCVRyYW5zZmVyQml0bWFwKGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwU3JjQml0bWFwLCBpbnQgc3JjX2xlZnQsIGludCBzcmNfdG9wLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCk7CisKKyAgICBGWF9CT09MCQkJQ29tcG9zaXRlQml0bWFwKGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyY0JpdG1hcCwgaW50IHNyY19sZWZ0LCBpbnQgc3JjX3RvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibGVuZF90eXBlID0gRlhESUJfQkxFTkRfTk9STUFMLCBjb25zdCBDRlhfQ2xpcFJnbiogcENsaXBSZ24gPSBOVUxMLCBGWF9CT09MIGJSZ2JCeXRlT3JkZXIgPSBGQUxTRSwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwpOworCisgICAgRlhfQk9PTAkJCVRyYW5zZmVyTWFzayhpbnQgZGVzdF9sZWZ0LCBpbnQgZGVzdF90b3AsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBNYXNrLCBGWF9EV09SRCBjb2xvciwgaW50IHNyY19sZWZ0LCBpbnQgc3JjX3RvcCwgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCk7CisKKyAgICBGWF9CT09MCQkJQ29tcG9zaXRlTWFzayhpbnQgZGVzdF9sZWZ0LCBpbnQgZGVzdF90b3AsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwTWFzaywgRlhfRFdPUkQgY29sb3IsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsZW5kX3R5cGUgPSBGWERJQl9CTEVORF9OT1JNQUwsIGNvbnN0IENGWF9DbGlwUmduKiBwQ2xpcFJnbiA9IE5VTEwsIEZYX0JPT0wgYlJnYkJ5dGVPcmRlciA9IEZBTFNFLCBpbnQgYWxwaGFfZmxhZyA9IDAsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMKTsKKworICAgIEZYX0JPT0wJCQlDb21wb3NpdGVSZWN0KGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBGWF9EV09SRCBjb2xvciwgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCk7CisKKyAgICBGWF9CT09MCQkJQ29udmVydENvbG9yU2NhbGUoRlhfRFdPUkQgZm9yZWNvbG9yLCBGWF9EV09SRCBiYWNrY29sb3IpOworCisgICAgRlhfQk9PTAkJCURpdGhlckZTKGNvbnN0IEZYX0RXT1JEKiBwUGFsZXR0ZSwgaW50IHBhbF9zaXplLCBjb25zdCBGWF9SRUNUKiBwUmVjdCA9IE5VTEwpOworcHJvdGVjdGVkOgorCisgICAgRlhfTFBCWVRFCQltX3BCdWZmZXI7CisKKyAgICBGWF9CT09MCQkJbV9iRXh0QnVmOworCisgICAgRlhfQk9PTAkJCUdldEdyYXlEYXRhKHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMKTsKK307CitjbGFzcyBDRlhfRElCRXh0cmFjdG9yIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENGWF9ESUJFeHRyYWN0b3IoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyYyk7CisKKyAgICB+Q0ZYX0RJQkV4dHJhY3RvcigpOworCisgICAgb3BlcmF0b3IgQ0ZYX0RJQml0bWFwKigpCisgICAgeworICAgICAgICByZXR1cm4gbV9wQml0bWFwOworICAgIH0KK3ByaXZhdGU6CisKKyAgICBDRlhfRElCaXRtYXAqCQkJbV9wQml0bWFwOworfTsKK3R5cGVkZWYgQ0ZYX0NvdW50UmVmPENGWF9ESUJpdG1hcD4gQ0ZYX0RJQml0bWFwUmVmOworY2xhc3MgQ0ZYX0ZpbHRlcmVkRElCIDogcHVibGljIENGWF9ESUJTb3VyY2UKK3sKK3B1YmxpYzoKKworICAgIENGWF9GaWx0ZXJlZERJQigpOworCisgICAgfkNGWF9GaWx0ZXJlZERJQigpOworCisgICAgdm9pZAkJCQkJTG9hZFNyYyhjb25zdCBDRlhfRElCU291cmNlKiBwU3JjLCBGWF9CT09MIGJBdXRvRHJvcFNyYyA9IEZBTFNFKTsKKworICAgIHZpcnR1YWwgRlhESUJfRm9ybWF0CUdldERlc3RGb3JtYXQoKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0RXT1JEKgkJR2V0RGVzdFBhbGV0dGUoKSA9IDA7CisKKworICAgIHZpcnR1YWwgdm9pZAkJCVRyYW5zbGF0ZVNjYW5saW5lKEZYX0xQQllURSBkZXN0X2J1ZiwgRlhfTFBDQllURSBzcmNfYnVmKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQJCQlUcmFuc2xhdGVEb3duU2FtcGxlcyhGWF9MUEJZVEUgZGVzdF9idWYsIEZYX0xQQ0JZVEUgc3JjX2J1ZiwgaW50IHBpeGVscywgaW50IEJwcCkgY29uc3QgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgRlhfTFBDQllURQkJR2V0U2NhbmxpbmUoaW50IGxpbmUpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZAkJCURvd25TYW1wbGVTY2FubGluZShpbnQgbGluZSwgRlhfTFBCWVRFIGRlc3Rfc2NhbiwgaW50IGRlc3RfYnBwLAorICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGgsIEZYX0JPT0wgYkZsaXBYLCBpbnQgY2xpcF9sZWZ0LCBpbnQgY2xpcF93aWR0aCkgY29uc3Q7CisKKyAgICBjb25zdCBDRlhfRElCU291cmNlKgltX3BTcmM7CisKKyAgICBGWF9CT09MCQkJCQltX2JBdXRvRHJvcFNyYzsKKworICAgIEZYX0xQQllURQkJCQltX3BTY2FubGluZTsKK307CitjbGFzcyBJRlhfU2NhbmxpbmVDb21wb3NlcgoreworcHVibGljOgorCisgICAgdmlydHVhbAl2b2lkCQlDb21wb3NlU2NhbmxpbmUoaW50IGxpbmUsIEZYX0xQQ0JZVEUgc2NhbmxpbmUsIEZYX0xQQ0JZVEUgc2Nhbl9leHRyYV9hbHBoYSA9IE5VTEwpID0gMDsKKworCisgICAgdmlydHVhbCBGWF9CT09MCQlTZXRJbmZvKGludCB3aWR0aCwgaW50IGhlaWdodCwgRlhESUJfRm9ybWF0IHNyY19mb3JtYXQsIEZYX0RXT1JEKiBwU3JjUGFsZXR0ZSkgPSAwOworfTsKK2NsYXNzIENGWF9TY2FubGluZUNvbXBvc2l0b3IgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ0ZYX1NjYW5saW5lQ29tcG9zaXRvcigpOworCisgICAgfkNGWF9TY2FubGluZUNvbXBvc2l0b3IoKTsKKworICAgIEZYX0JPT0wJCQkJSW5pdChGWERJQl9Gb3JtYXQgZGVzdF9mb3JtYXQsIEZYRElCX0Zvcm1hdCBzcmNfZm9ybWF0LCBGWF9JTlQzMiB3aWR0aCwgRlhfRFdPUkQqIHBTcmNQYWxldHRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBtYXNrX2NvbG9yLCBpbnQgYmxlbmRfdHlwZSwgRlhfQk9PTCBiQ2xpcCwgRlhfQk9PTCBiUmdiQnl0ZU9yZGVyID0gRkFMU0UsIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwpOworCisKKyAgICB2b2lkCQkJCUNvbXBvc2l0ZVJnYkJpdG1hcExpbmUoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwKKyAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX2V4dHJhX2FscGhhID0gTlVMTCwgRlhfTFBCWVRFIGRzdF9leHRyYV9hbHBoYSA9IE5VTEwpOworCisKKyAgICB2b2lkCQkJCUNvbXBvc2l0ZVBhbEJpdG1hcExpbmUoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHNyY19sZWZ0LCBpbnQgd2lkdGgsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLAorICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfZXh0cmFfYWxwaGEgPSBOVUxMLCBGWF9MUEJZVEUgZHN0X2V4dHJhX2FscGhhID0gTlVMTCk7CisKKworICAgIHZvaWQJCQkJQ29tcG9zaXRlQnl0ZU1hc2tMaW5lKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgRlhfTFBDQllURSBjbGlwX3NjYW4sCisgICAgICAgICAgICBGWF9MUEJZVEUgZHN0X2V4dHJhX2FscGhhID0gTlVMTCk7CisKKworICAgIHZvaWQJCQkJQ29tcG9zaXRlQml0TWFza0xpbmUoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHNyY19sZWZ0LCBpbnQgd2lkdGgsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLAorICAgICAgICAgICAgRlhfTFBCWVRFIGRzdF9leHRyYV9hbHBoYSA9IE5VTEwpOworcHJvdGVjdGVkOgorICAgIGludAkJCQkJbV9UcmFuc3BhcmVuY3k7CisgICAgRlhESUJfRm9ybWF0CQltX1NyY0Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fRGVzdEZvcm1hdDsKKyAgICBGWF9EV09SRCoJCQltX3BTcmNQYWxldHRlOworCisgICAgaW50CQkJCQltX01hc2tBbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fTWFza1JlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fTWFza0dyZWVuLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9NYXNrQmx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fTWFza0JsYWNrOworICAgIGludAkJCQkJbV9CbGVuZFR5cGU7CisgICAgdm9pZCoJCQkJbV9wSWNjVHJhbnNmb3JtOworICAgIEZYX0xQQllURQkJCW1fcENhY2hlU2NhbmxpbmU7CisgICAgaW50CQkJCQltX0NhY2hlU2l6ZTsKKyAgICBGWF9CT09MICAgICAgICAgICAgIG1fYlJnYkJ5dGVPcmRlcjsKK307CitjbGFzcyBDRlhfQml0bWFwQ29tcG9zZXIgOiBwdWJsaWMgSUZYX1NjYW5saW5lQ29tcG9zZXIsIHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDRlhfQml0bWFwQ29tcG9zZXIoKTsKKworICAgIH5DRlhfQml0bWFwQ29tcG9zZXIoKTsKKworCisgICAgdm9pZAkJCQlDb21wb3NlKENGWF9ESUJpdG1hcCogcERlc3QsIGNvbnN0IENGWF9DbGlwUmduKiBwQ2xpcFJnbiwgaW50IGJpdG1hcF9hbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgbWFza19jb2xvciwgRlhfUkVDVCYgZGVzdF9yZWN0LCBGWF9CT09MIGJWZXJ0aWNhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiRmxpcFgsIEZYX0JPT0wgYkZsaXBZLCBGWF9CT09MIGJSZ2JCeXRlT3JkZXIgPSBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCwgaW50IGJsZW5kX3R5cGUgPSBGWERJQl9CTEVORF9OT1JNQUwpOworCisgICAgdmlydHVhbCBGWF9CT09MCQlTZXRJbmZvKGludCB3aWR0aCwgaW50IGhlaWdodCwgRlhESUJfRm9ybWF0IHNyY19mb3JtYXQsIEZYX0RXT1JEKiBwU3JjUGFsZXR0ZSk7CisKKworICAgIHZpcnR1YWwJdm9pZAkJQ29tcG9zZVNjYW5saW5lKGludCBsaW5lLCBGWF9MUENCWVRFIHNjYW5saW5lLCBGWF9MUENCWVRFIHNjYW5fZXh0cmFfYWxwaGEpOworcHJvdGVjdGVkOgorCisgICAgdm9pZAkJCQlEb0NvbXBvc2UoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IGRlc3Rfd2lkdGgsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX2V4dHJhX2FscGhhID0gTlVMTCwgRlhfTFBCWVRFIGRzdF9leHRyYV9hbHBoYSA9IE5VTEwpOworICAgIENGWF9ESUJpdG1hcCoJCW1fcEJpdG1hcDsKKyAgICBjb25zdCBDRlhfQ2xpcFJnbioJbV9wQ2xpcFJnbjsKKyAgICBGWERJQl9Gb3JtYXQJCW1fU3JjRm9ybWF0OworICAgIGludAkJCQkJbV9EZXN0TGVmdCwgbV9EZXN0VG9wLCBtX0Rlc3RXaWR0aCwgbV9EZXN0SGVpZ2h0LCBtX0JpdG1hcEFscGhhOworICAgIEZYX0RXT1JECQkJbV9NYXNrQ29sb3I7CisgICAgY29uc3QgQ0ZYX0RJQml0bWFwKgltX3BDbGlwTWFzazsKKyAgICBDRlhfU2NhbmxpbmVDb21wb3NpdG9yCW1fQ29tcG9zaXRvcjsKKyAgICBGWF9CT09MCQkJCW1fYlZlcnRpY2FsLCBtX2JGbGlwWCwgbV9iRmxpcFk7CisgICAgaW50CQkJCQltX0FscGhhRmxhZzsKKyAgICB2b2lkKgkJCQltX3BJY2NUcmFuc2Zvcm07CisgICAgRlhfQk9PTCAgICAgICAgICAgICBtX2JSZ2JCeXRlT3JkZXI7CisgICAgaW50CQkJCQltX0JsZW5kVHlwZTsKKyAgICB2b2lkCQkJCUNvbXBvc2VTY2FubGluZVYoaW50IGxpbmUsIEZYX0xQQ0JZVEUgc2NhbmxpbmUsIEZYX0xQQ0JZVEUgc2Nhbl9leHRyYV9hbHBoYSA9IE5VTEwpOworICAgIEZYX0xQQllURQkJCW1fcFNjYW5saW5lViwgbV9wQ2xpcFNjYW5WLCBtX3BBZGRDbGlwU2NhbiwgbV9wU2NhbmxpbmVBbHBoYVY7Cit9OworY2xhc3MgQ0ZYX0JpdG1hcFN0b3JlciA6IHB1YmxpYyBJRlhfU2NhbmxpbmVDb21wb3NlciwgcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENGWF9CaXRtYXBTdG9yZXIoKTsKKworICAgIH5DRlhfQml0bWFwU3RvcmVyKCk7CisKKyAgICB2aXJ0dWFsCXZvaWQJCUNvbXBvc2VTY2FubGluZShpbnQgbGluZSwgRlhfTFBDQllURSBzY2FubGluZSwgRlhfTFBDQllURSBzY2FuX2V4dHJhX2FscGhhKTsKKworICAgIHZpcnR1YWwgRlhfQk9PTAkJU2V0SW5mbyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIEZYRElCX0Zvcm1hdCBzcmNfZm9ybWF0LCBGWF9EV09SRCogcFNyY1BhbGV0dGUpOworCisgICAgQ0ZYX0RJQml0bWFwKgkJR2V0Qml0bWFwKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BCaXRtYXA7CisgICAgfQorCisgICAgQ0ZYX0RJQml0bWFwKgkJRGV0YWNoKCk7CisKKyAgICB2b2lkCQkJCVJlcGxhY2UoQ0ZYX0RJQml0bWFwKiBwQml0bWFwKTsKK3ByaXZhdGU6CisgICAgQ0ZYX0RJQml0bWFwKgkJbV9wQml0bWFwOworfTsKK2NsYXNzIENTdHJldGNoRW5naW5lOworY2xhc3MgQ0ZYX0ltYWdlU3RyZXRjaGVyIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENGWF9JbWFnZVN0cmV0Y2hlcigpOworCisgICAgfkNGWF9JbWFnZVN0cmV0Y2hlcigpOworCisgICAgRlhfSU5UMzIJCVN0YXJ0KElGWF9TY2FubGluZUNvbXBvc2VyKiBwRGVzdCwgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgY29uc3QgRlhfUkVDVCYgYml0bWFwX3JlY3QsIEZYX0RXT1JEIGZsYWdzKTsKKworCisgICAgRlhfSU5UMzIJCUNvbnRpbnVlKElGWF9QYXVzZSogcFBhdXNlKTsKKyAgICBJRlhfU2NhbmxpbmVDb21wb3NlcioJbV9wRGVzdDsKKyAgICBjb25zdCBDRlhfRElCU291cmNlKgltX3BTb3VyY2U7CisgICAgQ1N0cmV0Y2hFbmdpbmUqCQltX3BTdHJldGNoRW5naW5lOworICAgIEZYX0RXT1JECQltX0ZsYWdzOworICAgIEZYX0JPT0wJCQltX2JGbGlwWCwKKyAgICAgICAgICAgICAgICAgICAgbV9iRmxpcFk7CisgICAgaW50CQkJCW1fRGVzdFdpZHRoLAorICAgICAgICAgICAgICAgICAgICBtX0Rlc3RIZWlnaHQ7CisgICAgRlhfUkVDVAkJCW1fQ2xpcFJlY3Q7CisgICAgaW50CQkJCW1fTGluZUluZGV4OworICAgIGludAkJCQltX0Rlc3RCUFA7CisgICAgRlhfTFBCWVRFCQltX3BTY2FubGluZTsKKyAgICBGWF9MUEJZVEUgICAgICAgbV9wTWFza1NjYW5saW5lOworICAgIEZYRElCX0Zvcm1hdAltX0Rlc3RGb3JtYXQ7CisgICAgRlhfSU5UMzIJCW1fU3RhdHVzOworCisgICAgRlhfSU5UMzIJCVN0YXJ0UXVpY2tTdHJldGNoKCk7CisKKyAgICBGWF9JTlQzMgkJU3RhcnRTdHJldGNoKCk7CisKKyAgICBGWF9JTlQzMgkJQ29udGludWVRdWlja1N0cmV0Y2goSUZYX1BhdXNlKiBwUGF1c2UpOworCisgICAgRlhfSU5UMzIJCUNvbnRpbnVlU3RyZXRjaChJRlhfUGF1c2UqIHBQYXVzZSk7Cit9OworY2xhc3MgQ0ZYX0ltYWdlVHJhbnNmb3JtZXIgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ0ZYX0ltYWdlVHJhbnNmb3JtZXIoKTsKKworICAgIH5DRlhfSW1hZ2VUcmFuc2Zvcm1lcigpOworCisgICAgRlhfSU5UMzIJU3RhcnQoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyYywgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgaW50IGZsYWdzLCBjb25zdCBGWF9SRUNUKiBwQ2xpcCk7CisKKworICAgIEZYX0lOVDMyCUNvbnRpbnVlKElGWF9QYXVzZSogcFBhdXNlKTsKKyAgICBDRlhfQWZmaW5lTWF0cml4KiBtX3BNYXRyaXg7CisgICAgRlhfUkVDVAkJbV9TdHJldGNoQ2xpcDsKKyAgICBpbnQJCQltX1Jlc3VsdExlZnQsIG1fUmVzdWx0VG9wLCBtX1Jlc3VsdFdpZHRoLCBtX1Jlc3VsdEhlaWdodDsKKyAgICBDRlhfQWZmaW5lTWF0cml4CW1fZGVzdDJzdHJldGNoOworICAgIENGWF9JbWFnZVN0cmV0Y2hlcgltX1N0cmV0Y2hlcjsKKyAgICBDRlhfQml0bWFwU3RvcmVyCW1fU3RvcmVyOworICAgIEZYX0RXT1JECW1fRmxhZ3M7CisgICAgaW50CQkJbV9TdGF0dXM7Cit9OworY2xhc3MgQ0ZYX0ltYWdlUmVuZGVyZXIgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ0ZYX0ltYWdlUmVuZGVyZXIoKTsKKworICAgIH5DRlhfSW1hZ2VSZW5kZXJlcigpOworCisgICAgRlhfSU5UMzIJCQlTdGFydChDRlhfRElCaXRtYXAqIHBEZXZpY2UsIGNvbnN0IENGWF9DbGlwUmduKiBwQ2xpcFJnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTb3VyY2UsIGludCBiaXRtYXBfYWxwaGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBtYXNrX2NvbG9yLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LCBGWF9EV09SRCBkaWJfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9CT09MIGJSZ2JCeXRlT3JkZXIgPSBGQUxTRSwgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibGVuZF90eXBlID0gRlhESUJfQkxFTkRfTk9STUFMKTsKKworICAgIEZYX0lOVDMyCQkJQ29udGludWUoSUZYX1BhdXNlKiBwUGF1c2UpOworcHJvdGVjdGVkOgorICAgIENGWF9ESUJpdG1hcCoJCW1fcERldmljZTsKKyAgICBjb25zdCBDRlhfQ2xpcFJnbioJbV9wQ2xpcFJnbjsKKyAgICBpbnQJCQkJCW1fQml0bWFwQWxwaGE7CisgICAgRlhfRFdPUkQJCQltX01hc2tDb2xvcjsKKyAgICBDRlhfQWZmaW5lTWF0cml4CW1fTWF0cml4OworICAgIENGWF9JbWFnZVRyYW5zZm9ybWVyKgltX3BUcmFuc2Zvcm1lcjsKKyAgICBDRlhfSW1hZ2VTdHJldGNoZXIJbV9TdHJldGNoZXI7CisgICAgQ0ZYX0JpdG1hcENvbXBvc2VyCW1fQ29tcG9zZXI7CisgICAgaW50CQkJCQltX1N0YXR1czsKKyAgICBpbnQJCQkJCW1fRGVzdExlZnQsIG1fRGVzdFRvcDsKKyAgICBGWF9SRUNUCQkJCW1fQ2xpcEJveDsKKyAgICBGWF9EV09SRAkJCW1fRmxhZ3M7CisgICAgaW50CQkJCQltX0FscGhhRmxhZzsKKyAgICB2b2lkKgkJCQltX3BJY2NUcmFuc2Zvcm07CisgICAgRlhfQk9PTAkJCQltX2JSZ2JCeXRlT3JkZXI7CisgICAgaW50CQkJCQltX0JsZW5kVHlwZTsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvaW5jbHVkZS9meGdlL2Z4X2ZvbnQuaCBiL2NvcmUvaW5jbHVkZS9meGdlL2Z4X2ZvbnQuaAppbmRleCBhYmZhOWI4Li5kYzk2ZGViIDEwMDY0NAotLS0gYS9jb3JlL2luY2x1ZGUvZnhnZS9meF9mb250LmgKKysrIGIvY29yZS9pbmNsdWRlL2Z4Z2UvZnhfZm9udC5oCkBAIC0xLDQyOCArMSw0MjggQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0ZYX0ZPTlRfSF8NCi0jZGVmaW5lIF9GWF9GT05UX0hfDQotI2lmbmRlZiBfRlhDUlRfRVhURU5TSU9OXw0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2V4dC5oIg0KLSNlbmRpZg0KLSNpZm5kZWYgX0ZYX0RJQl9IXw0KLSNpbmNsdWRlICJmeF9kaWIuaCINCi0jZW5kaWYNCi10eXBlZGVmIHN0cnVjdCBGVF9GYWNlUmVjXyogRlhGVF9GYWNlOw0KLXR5cGVkZWYgdm9pZCogRlhGVF9MaWJyYXJ5Ow0KLWNsYXNzIElGWF9Gb250RW5jb2Rpbmc7DQotY2xhc3MgQ0ZYX1BhdGhEYXRhOw0KLWNsYXNzIENGWF9TdWJzdEZvbnQ7DQotY2xhc3MgQ0ZYX0ZhY2VDYWNoZTsNCi1jbGFzcyBJRlhfRm9udE1hcHBlcjsNCi1jbGFzcyBDRlhfRm9udE1hcHBlcjsNCi1jbGFzcyBJRlhfU3lzdGVtRm9udEluZm87DQotY2xhc3MgQ0ZvbnRGaWxlRmFjZUluZm87DQotI2RlZmluZSBGWEZPTlRfRklYRURfUElUQ0gJCTB4MDENCi0jZGVmaW5lIEZYRk9OVF9TRVJJRgkJCTB4MDINCi0jZGVmaW5lIEZYRk9OVF9TWU1CT0xJQwkJCTB4MDQNCi0jZGVmaW5lIEZYRk9OVF9TQ1JJUFQJCQkweDA4DQotI2RlZmluZSBGWEZPTlRfSVRBTElDCQkJMHg0MA0KLSNkZWZpbmUgRlhGT05UX0JPTEQJCQkJMHg0MDAwMA0KLSNkZWZpbmUgRlhGT05UX1VTRUVYVEVSTkFUVFIJMHg4MDAwMA0KLSNkZWZpbmUgRlhGT05UX0NJREZPTlQJCQkweDEwMDAwMA0KLSNkZWZpbmUgRlhGT05UX0FOU0lfQ0hBUlNFVAkJMA0KLSNkZWZpbmUgRlhGT05UX0RFRkFVTFRfQ0hBUlNFVAkxDQotI2RlZmluZSBGWEZPTlRfU1lNQk9MX0NIQVJTRVQJMg0KLSNkZWZpbmUgRlhGT05UX1NISUZUSklTX0NIQVJTRVQJMTI4DQotI2RlZmluZSBGWEZPTlRfSEFOR0VVTF9DSEFSU0VUCTEyOQ0KLSNkZWZpbmUgRlhGT05UX0dCMjMxMl9DSEFSU0VUCTEzNA0KLSNkZWZpbmUgRlhGT05UX0NISU5FU0VCSUc1X0NIQVJTRVQJMTM2DQotI2RlZmluZSBGWEZPTlRfVEhBSV9DSEFSU0VUCQkyMjINCi0jZGVmaW5lIEZYRk9OVF9FQVNURVVST1BFX0NIQVJTRVQJMjM4DQotI2RlZmluZSBGWEZPTlRfUlVTU0lBTl9DSEFSU0VUCTIwNA0KLSNkZWZpbmUgRlhGT05UX0dSRUVLX0NIQVJTRVQJMTYxDQotI2RlZmluZSBGWEZPTlRfVFVSS0lTSF9DSEFSU0VUCTE2Mg0KLSNkZWZpbmUgRlhGT05UX0hFQlJFV19DSEFSU0VUCTE3Nw0KLSNkZWZpbmUgRlhGT05UX0FSQUJJQ19DSEFSU0VUCTE3OA0KLSNkZWZpbmUgRlhGT05UX0JBTFRJQ19DSEFSU0VUCTE4Ng0KLSNkZWZpbmUgRlhGT05UX0ZGX0ZJWEVEUElUQ0gJMQ0KLSNkZWZpbmUgRlhGT05UX0ZGX1JPTUFOCQkJKDE8PDQpDQotI2RlZmluZSBGWEZPTlRfRkZfU0NSSVBUCQkoNDw8NCkNCi0jZGVmaW5lIEZYRk9OVF9GV19OT1JNQUwJCTQwMA0KLSNkZWZpbmUgRlhGT05UX0ZXX0JPTEQJCQk3MDANCi1jbGFzcyBDRlhfRm9udCA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgQ0ZYX0ZvbnQoKTsNCi0gICAgfkNGWF9Gb250KCk7DQotDQotICAgIEZYX0JPT0wJCQkJCUxvYWRTdWJzdChjb25zdCBDRlhfQnl0ZVN0cmluZyYgZmFjZV9uYW1lLCBGWF9CT09MIGJUcnVlVHlwZSwgRlhfRFdPUkQgZmxhZ3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2VpZ2h0LCBpbnQgaXRhbGljX2FuZ2xlLCBpbnQgQ2hhcnNldENQLCBGWF9CT09MIGJWZXJ0aWNhbCA9IEZBTFNFKTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJTG9hZEVtYmVkZGVkKEZYX0xQQ0JZVEUgZGF0YSwgRlhfRFdPUkQgc2l6ZSk7DQotDQotICAgIEZYX0JPT0wJCQkJCUxvYWRGaWxlKElGWF9GaWxlUmVhZCogcEZpbGUpOw0KLQ0KLSAgICBGWEZUX0ZhY2UJCQkJR2V0RmFjZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0ZhY2U7DQotICAgIH0NCi0NCi0NCi0gICAgY29uc3QgQ0ZYX1N1YnN0Rm9udCoJR2V0U3Vic3RGb250KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcFN1YnN0Rm9udDsNCi0gICAgfQ0KLQ0KLSAgICBDRlhfUGF0aERhdGEqCQkJTG9hZEdseXBoUGF0aChGWF9EV09SRCBnbHlwaF9pbmRleCwgaW50IGRlc3Rfd2lkdGggPSAwKTsNCi0NCi0gICAgaW50CQkJCQkJR2V0R2x5cGhXaWR0aChGWF9EV09SRCBnbHlwaF9pbmRleCk7DQotDQotICAgIGludAkJCQkJCUdldEFzY2VudCgpIGNvbnN0Ow0KLQ0KLSAgICBpbnQJCQkJCQlHZXREZXNjZW50KCkgY29uc3Q7DQotDQotICAgIEZYX0JPT0wgICAgICAgICAgICAgICAgIEdldEdseXBoQkJveChGWF9EV09SRCBnbHlwaF9pbmRleCwgRlhfUkVDVCAmYmJveCk7DQotDQotICAgIEZYX0JPT0wgICAgICAgICAgICAgICAgIElzSXRhbGljKCk7DQotDQotICAgIEZYX0JPT0wgICAgICAgICAgICAgICAgIElzQm9sZCgpOw0KLQ0KLSAgICBGWF9CT09MICAgICAgICAgICAgICAgICBJc0ZpeGVkV2lkdGgoKTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJSXNWZXJ0aWNhbCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX2JWZXJ0aWNhbDsNCi0gICAgfQ0KLQ0KLSAgICBDRlhfV2lkZVN0cmluZyAgICAgICAgICBHZXRQc05hbWUoKSBjb25zdDsNCi0NCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgICAgICAgICAgR2V0RmFtaWx5TmFtZSgpIGNvbnN0Ow0KLQ0KLSAgICBDRlhfQnl0ZVN0cmluZyAgICAgICAgICBHZXRGYWNlTmFtZSgpIGNvbnN0Ow0KLQ0KLQ0KLSAgICBGWF9CT09MICAgICAgICAgICAgICAgICBJc1RURm9udCgpOw0KLQ0KLSAgICBGWF9CT09MICAgICAgICAgICAgICAgICBHZXRCQm94KEZYX1JFQ1QgJmJib3gpOw0KLQ0KLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICBHZXRIZWlnaHQoKTsNCi0NCi0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgR2V0VUxQb3MoKTsNCi0NCi0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgR2V0VUx0aGlja25lc3MoKTsNCi0NCi0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgR2V0TWF4QWR2YW5jZVdpZHRoKCk7DQotDQotICAgIEZYRlRfRmFjZQkJCQltX0ZhY2U7DQotDQotICAgIENGWF9TdWJzdEZvbnQqCQkJbV9wU3Vic3RGb250Ow0KLSAgICBGWF9CT09MCQkJCQlJc0VtYmVkZGVkKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fYkVtYmVkZGVkOw0KLSAgICB9DQotDQotICAgIHZvaWQJCQkJCUFkanVzdE1NUGFyYW1zKGludCBnbHlwaF9pbmRleCwgaW50IHdpZHRoLCBpbnQgd2VpZ2h0KTsNCi0gICAgRlhfTFBCWVRFCQkJCW1fcEZvbnREYXRhQWxsb2NhdGlvbjsNCi0gICAgRlhfTFBCWVRFICAgICAgICAgICAgICAgbV9wRm9udERhdGE7DQotICAgIEZYX0xQQllURQkJCQltX3BHc3ViRGF0YTsNCi0gICAgRlhfRFdPUkQgICAgICAgICAgICAgICAgbV9kd1NpemU7DQotICAgIENGWF9CaW5hcnlCdWYgICAgICAgICAgIG1fT3RmRm9udERhdGE7DQotICAgIHZvaWQqICAgICAgICAgICAgICAgICAgIG1faEhhbmRsZTsNCi0gICAgdm9pZCogICAgICAgICAgICAgICAgICAgbV9wUGxhdGZvcm1Gb250Ow0KLSAgICB2b2lkKiAgICAgICAgICAgICAgICAgICBtX3BQbGF0Zm9ybUZvbnRDb2xsZWN0aW9uOw0KLSAgICB2b2lkKiAgICAgICAgICAgICAgICAgICBtX3BEd0ZvbnQ7DQotICAgIEZYX0JPT0wgICAgICAgICAgICAgICAgIG1fYkR3TG9hZGVkOw0KLSAgICB2b2lkICAgICAgICAgICAgICAgICAgICBSZWxlYXNlUGxhdGZvcm1SZXNvdXJjZSgpOw0KLQ0KLSAgICB2b2lkCQkJCQlEZWxldGVGYWNlKCk7DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBGWF9CT09MCQkJCQltX2JFbWJlZGRlZDsNCi0gICAgRlhfQk9PTAkJCQkJbV9iVmVydGljYWw7DQotICAgIHZvaWQqCQkJCQltX3BPd25lZFN0cmVhbTsNCi19Ow0KLSNkZWZpbmUgRU5DT0RJTkdfSU5URVJOQUwJCTANCi0jZGVmaW5lIEVOQ09ESU5HX1VOSUNPREUJCTENCi1jbGFzcyBJRlhfRm9udEVuY29kaW5nIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICB2aXJ0dWFsIH5JRlhfRm9udEVuY29kaW5nKCkge30NCi0NCi0gICAgdmlydHVhbCBGWF9EV09SRAkJR2x5cGhGcm9tQ2hhckNvZGUoRlhfRFdPUkQgY2hhcmNvZGUpID0gMDsNCi0NCi0gICAgdmlydHVhbCBDRlhfV2lkZVN0cmluZwlVbmljb2RlRnJvbUNoYXJDb2RlKEZYX0RXT1JEIGNoYXJjb2RlKSBjb25zdCA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfRFdPUkQJCUNoYXJDb2RlRnJvbVVuaWNvZGUoRlhfV0NIQVIgVW5pY29kZSkgY29uc3QgPSAwOw0KLX07DQotSUZYX0ZvbnRFbmNvZGluZyogRlhHRV9DcmVhdGVVbmljb2RlRW5jb2RpbmcoQ0ZYX0ZvbnQqIHBGb250KTsNCi0jZGVmaW5lIEZYRk9OVF9TVUJTVF9NTQkJCQkweDAxDQotI2RlZmluZSBGWEZPTlRfU1VCU1RfR0xZUEhQQVRICQkweDA0DQotI2RlZmluZSBGWEZPTlRfU1VCU1RfQ0xFQVJUWVBFCQkweDA4DQotI2RlZmluZSBGWEZPTlRfU1VCU1RfVFJBTlNGT1JNCQkweDEwDQotI2RlZmluZSBGWEZPTlRfU1VCU1RfTk9OU1lNQk9MCQkweDIwDQotI2RlZmluZSBGWEZPTlRfU1VCU1RfRVhBQ1QJCQkweDQwDQotI2RlZmluZSBGWEZPTlRfU1VCU1RfU1RBTkRBUkQJCTB4ODANCi1jbGFzcyBDRlhfU3Vic3RGb250IDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDRlhfU3Vic3RGb250KCk7DQotDQotICAgIEZYX0xQVk9JRAkJCQltX0V4dEhhbmRsZTsNCi0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcJCQltX0ZhbWlseTsNCi0NCi0gICAgaW50CQkJCQkJbV9DaGFyc2V0Ow0KLQ0KLSAgICBGWF9EV09SRAkJCQltX1N1YnN0RmxhZ3M7DQotDQotICAgIGludAkJCQkJCW1fV2VpZ2h0Ow0KLQ0KLSAgICBpbnQJCQkJCQltX0l0YWxpY0FuZ2xlOw0KLQ0KLSAgICBGWF9CT09MCQkJCQltX2JTdWJzdE9mQ0pLOw0KLQ0KLSAgICBpbnQJCQkJCQltX1dlaWdodENKSzsNCi0NCi0gICAgRlhfQk9PTAkJCQkJbV9iSXRsaWNDSks7DQotfTsNCi0jZGVmaW5lIEZYX0ZPTlRfRkxBR19TRVJJRiAgICAgICAgICAgICAgMHgwMQ0KLSNkZWZpbmUgRlhfRk9OVF9GTEFHX0ZJWEVEUElUQ0gJCQkweDAyDQotI2RlZmluZSBGWF9GT05UX0ZMQUdfSVRBTElDCQkJCTB4MDQNCi0jZGVmaW5lIEZYX0ZPTlRfRkxBR19CT0xECQkJCTB4MDgNCi0jZGVmaW5lIEZYX0ZPTlRfRkxBR19TWU1CT0xJQ19TWU1CT0wJMHgxMA0KLSNkZWZpbmUgRlhfRk9OVF9GTEFHX1NZTUJPTElDX0RJTkdCQVRTCTB4MjANCi0jZGVmaW5lIEZYX0ZPTlRfRkxBR19NVUxUSVBMRU1BU1RFUgkJMHg0MA0KLXR5cGVkZWYgc3RydWN0IHsNCi0gICAgRlhfTFBDQllURQltX3BGb250RGF0YTsNCi0gICAgRlhfRFdPUkQJbV9kd1NpemU7DQotfSBGb3hpdEZvbnRzOw0KLWNsYXNzIENGWF9Gb250TWdyIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDRlhfRm9udE1ncigpOw0KLSAgICB+Q0ZYX0ZvbnRNZ3IoKTsNCi0gICAgdm9pZAkJCUluaXRGVExpYnJhcnkoKTsNCi0gICAgRlhGVF9GYWNlCQlHZXRDYWNoZWRGYWNlKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBmYWNlX25hbWUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3ZWlnaHQsIEZYX0JPT0wgYkl0YWxpYywgRlhfTFBCWVRFJiBwRm9udERhdGEpOw0KLSAgICBGWEZUX0ZhY2UJCUFkZENhY2hlZEZhY2UoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGZhY2VfbmFtZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdlaWdodCwgRlhfQk9PTCBiSXRhbGljLCBGWF9MUEJZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUsIGludCBmYWNlX2luZGV4KTsNCi0gICAgRlhGVF9GYWNlCQlHZXRDYWNoZWRUVENGYWNlKGludCB0dGNfc2l6ZSwgRlhfRFdPUkQgY2hlY2tzdW0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmb250X29mZnNldCwgRlhfTFBCWVRFJiBwRm9udERhdGEpOw0KLSAgICBGWEZUX0ZhY2UJCUFkZENhY2hlZFRUQ0ZhY2UoaW50IHR0Y19zaXplLCBGWF9EV09SRCBjaGVja3N1bSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFIHBEYXRhLCBGWF9EV09SRCBzaXplLCBpbnQgZm9udF9vZmZzZXQpOw0KLSAgICBGWEZUX0ZhY2UJCUdldEZpbGVGYWNlKEZYX0xQQ1NUUiBmaWxlbmFtZSwgaW50IGZhY2VfaW5kZXgpOw0KLSAgICBGWEZUX0ZhY2UJCUdldEZpeGVkRmFjZShGWF9MUENCWVRFIHBEYXRhLCBGWF9EV09SRCBzaXplLCBpbnQgZmFjZV9pbmRleCk7DQotICAgIHZvaWQJCQlSZWxlYXNlRmFjZShGWEZUX0ZhY2UgZmFjZSk7DQotICAgIHZvaWQJCQlTZXRTeXN0ZW1Gb250SW5mbyhJRlhfU3lzdGVtRm9udEluZm8qIHBGb250SW5mbyk7DQotICAgIEZYRlRfRmFjZQkJRmluZFN1YnN0Rm9udChjb25zdCBDRlhfQnl0ZVN0cmluZyYgZmFjZV9uYW1lLCBGWF9CT09MIGJUcnVlVHlwZSwgRlhfRFdPUkQgZmxhZ3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3ZWlnaHQsIGludCBpdGFsaWNfYW5nbGUsIGludCBDaGFyc2V0Q1AsIENGWF9TdWJzdEZvbnQqIHBTdWJzdEZvbnQpOw0KLQ0KLSAgICB2b2lkCQkJRnJlZUNhY2hlKCk7DQotDQotICAgIEZYX0JPT0wJCQlHZXRTdGFuZGFyZEZvbnQoRlhfTFBDQllURSYgcEZvbnREYXRhLCBGWF9EV09SRCYgc2l6ZSwgaW50IGluZGV4KTsNCi0gICAgQ0ZYX0ZvbnRNYXBwZXIqCW1fcEJ1aWx0aW5NYXBwZXI7DQotICAgIElGWF9Gb250TWFwcGVyKgltX3BFeHRNYXBwZXI7DQotICAgIENGWF9NYXBCeXRlU3RyaW5nVG9QdHIJbV9GYWNlTWFwOw0KLSAgICBGWEZUX0xpYnJhcnkJbV9GVExpYnJhcnk7DQotICAgIEZveGl0Rm9udHMgbV9FeHRlcm5hbEZvbnRzWzE2XTsNCi19Ow0KLWNsYXNzIElGWF9Gb250TWFwcGVyIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICB2aXJ0dWFsIH5JRlhfRm9udE1hcHBlcigpIHt9DQotDQotICAgIHZpcnR1YWwgRlhGVF9GYWNlCUZpbmRTdWJzdEZvbnQoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGZhY2VfbmFtZSwgRlhfQk9PTCBiVHJ1ZVR5cGUsIEZYX0RXT1JEIGZsYWdzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdlaWdodCwgaW50IGl0YWxpY19hbmdsZSwgaW50IENoYXJzZXRDUCwgQ0ZYX1N1YnN0Rm9udCogcFN1YnN0Rm9udCkgPSAwOw0KLQ0KLSAgICBDRlhfRm9udE1ncioJCW1fcEZvbnRNZ3I7DQotfTsNCi1jbGFzcyBJRlhfRm9udEVudW1lcmF0b3INCi17DQotcHVibGljOg0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQJCUhpdEZvbnQoKSA9IDA7DQotDQotICAgIHZpcnR1YWwgdm9pZAkJRmluaXNoKCkgPSAwOw0KLX07DQotY2xhc3MgSUZYX0FkZGl0aW9uYWxGb250RW51bQ0KLXsNCi1wdWJsaWM6DQotICAgIHZpcnR1YWwgaW50ICBDb3VudEZpbGVzKCkgPSAwOw0KLSAgICB2aXJ0dWFsIElGWF9GaWxlU3RyZWFtKiBHZXRGb250RmlsZShpbnQgaW5kZXgpID0gMDsNCi19Ow0KLWNsYXNzIENGWF9Gb250TWFwcGVyIDogcHVibGljIElGWF9Gb250TWFwcGVyDQotew0KLXB1YmxpYzoNCi0gICAgQ0ZYX0ZvbnRNYXBwZXIoKTsNCi0gICAgdmlydHVhbCB+Q0ZYX0ZvbnRNYXBwZXIoKTsNCi0gICAgdm9pZAkJCQlTZXRTeXN0ZW1Gb250SW5mbyhJRlhfU3lzdGVtRm9udEluZm8qIHBGb250SW5mbyk7DQotICAgIElGWF9TeXN0ZW1Gb250SW5mbyoJR2V0U3lzdGVtRm9udEluZm8oKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRm9udEluZm87DQotICAgIH0NCi0gICAgdm9pZAkJCQlBZGRJbnN0YWxsZWRGb250KGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lLCBpbnQgY2hhcnNldCk7DQotICAgIHZvaWQJCQkJTG9hZEluc3RhbGxlZEZvbnRzKCk7DQotICAgIENGWF9CeXRlU3RyaW5nQXJyYXkJbV9JbnN0YWxsZWRUVEZvbnRzOw0KLSAgICB2b2lkCQkJCVNldEZvbnRFbnVtZXJhdG9yKElGWF9Gb250RW51bWVyYXRvciogcEZvbnRFbnVtZXJhdG9yKQ0KLSAgICB7DQotICAgICAgICBtX3BGb250RW51bWVyYXRvciA9IHBGb250RW51bWVyYXRvcjsNCi0gICAgfQ0KLSAgICBJRlhfRm9udEVudW1lcmF0b3IqCUdldEZvbnRFbnVtZXJhdG9yKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcEZvbnRFbnVtZXJhdG9yOw0KLSAgICB9DQotICAgIHZpcnR1YWwgRlhGVF9GYWNlCUZpbmRTdWJzdEZvbnQoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGZhY2VfbmFtZSwgRlhfQk9PTCBiVHJ1ZVR5cGUsIEZYX0RXT1JEIGZsYWdzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdlaWdodCwgaW50IGl0YWxpY19hbmdsZSwgaW50IENoYXJzZXRDUCwgQ0ZYX1N1YnN0Rm9udCogcFN1YnN0Rm9udCk7DQotcHJpdmF0ZToNCi0gICAgQ0ZYX0J5dGVTdHJpbmcJCUdldFBTTmFtZUZyb21UVCh2b2lkKiBoRm9udCk7DQotICAgIENGWF9CeXRlU3RyaW5nCQlNYXRjaEluc3RhbGxlZEZvbnRzKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBub3JtX25hbWUpOw0KLSAgICBGWEZUX0ZhY2UJCQlVc2VJbnRlcm5hbFN1YnN0KENGWF9TdWJzdEZvbnQqIHBTdWJzdEZvbnQsIGludCBpQmFzZUZvbnQsIGludCBpdGFsaWNfYW5nbGUsIGludCB3ZWlnaHQsIGludCBwaWN0aGZhbWlseSk7DQotDQotICAgIEZYX0JPT0wJCQkJbV9iTGlzdExvYWRlZDsNCi0gICAgRlhGVF9GYWNlCQkJbV9NTUZhY2VzWzJdOw0KLSAgICBDRlhfQnl0ZVN0cmluZwkJbV9MYXN0RmFtaWx5Ow0KLSAgICBDRlhfRFdvcmRBcnJheQkJbV9DaGFyc2V0QXJyYXk7DQotICAgIENGWF9CeXRlU3RyaW5nQXJyYXkJbV9GYWNlQXJyYXk7DQotICAgIElGWF9TeXN0ZW1Gb250SW5mbyoJbV9wRm9udEluZm87DQotICAgIEZYRlRfRmFjZQkJCW1fRm94aXRGYWNlc1sxNF07DQotICAgIElGWF9Gb250RW51bWVyYXRvcioJCW1fcEZvbnRFbnVtZXJhdG9yOw0KLX07DQotY2xhc3MgSUZYX1N5c3RlbUZvbnRJbmZvIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBzdGF0aWMgSUZYX1N5c3RlbUZvbnRJbmZvKglDcmVhdGVEZWZhdWx0KCk7DQotICAgIHZpcnR1YWwgdm9pZAkJUmVsZWFzZSgpID0gMDsNCi0gICAgdmlydHVhbAlGWF9CT09MCQlFbnVtRm9udExpc3QoQ0ZYX0ZvbnRNYXBwZXIqIHBNYXBwZXIpID0gMDsNCi0gICAgdmlydHVhbCB2b2lkKgkJTWFwRm9udChpbnQgd2VpZ2h0LCBGWF9CT09MIGJJdGFsaWMsIGludCBjaGFyc2V0LCBpbnQgcGl0Y2hfZmFtaWx5LCBGWF9MUENTVFIgZmFjZSwgRlhfQk9PTCYgYkV4YWN0KSA9IDA7DQotICAgIHZpcnR1YWwgdm9pZCoJCUdldEZvbnQoRlhfTFBDU1RSIGZhY2UpID0gMDsNCi0gICAgdmlydHVhbCBGWF9EV09SRAlHZXRGb250RGF0YSh2b2lkKiBoRm9udCwgRlhfRFdPUkQgdGFibGUsIEZYX0xQQllURSBidWZmZXIsIEZYX0RXT1JEIHNpemUpID0gMDsNCi0gICAgdmlydHVhbCBGWF9CT09MCQlHZXRGYWNlTmFtZSh2b2lkKiBoRm9udCwgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUpID0gMDsNCi0gICAgdmlydHVhbCBGWF9CT09MCQlHZXRGb250Q2hhcnNldCh2b2lkKiBoRm9udCwgaW50JiBjaGFyc2V0KSA9IDA7DQotICAgIHZpcnR1YWwgaW50CQkJR2V0RmFjZUluZGV4KHZvaWQqIGhGb250KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIHZvaWQJCURlbGV0ZUZvbnQodm9pZCogaEZvbnQpID0gMDsNCi0gICAgdmlydHVhbCB2b2lkKiAgICAgICBSZXRhaW5Gb250KHZvaWQqIGhGb250KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLX07DQotY2xhc3MgQ0ZYX0ZvbGRlckZvbnRJbmZvIDogcHVibGljIElGWF9TeXN0ZW1Gb250SW5mbw0KLXsNCi1wdWJsaWM6DQotICAgIENGWF9Gb2xkZXJGb250SW5mbygpOw0KLSAgICB+Q0ZYX0ZvbGRlckZvbnRJbmZvKCk7DQotICAgIHZvaWQJCQkJQWRkUGF0aChGWF9CU1RSIHBhdGgpOw0KLSAgICB2aXJ0dWFsIHZvaWQJCVJlbGVhc2UoKTsNCi0gICAgdmlydHVhbAlGWF9CT09MCQlFbnVtRm9udExpc3QoQ0ZYX0ZvbnRNYXBwZXIqIHBNYXBwZXIpOw0KLSAgICB2aXJ0dWFsIHZvaWQqCQlNYXBGb250KGludCB3ZWlnaHQsIEZYX0JPT0wgYkl0YWxpYywgaW50IGNoYXJzZXQsIGludCBwaXRjaF9mYW1pbHksIEZYX0xQQ1NUUiBmYWNlLCBGWF9CT09MJiBiRXhhY3QpOw0KLSAgICB2aXJ0dWFsIHZvaWQqCQlHZXRGb250KEZYX0xQQ1NUUiBmYWNlKTsNCi0gICAgdmlydHVhbCBGWF9EV09SRAlHZXRGb250RGF0YSh2b2lkKiBoRm9udCwgRlhfRFdPUkQgdGFibGUsIEZYX0xQQllURSBidWZmZXIsIEZYX0RXT1JEIHNpemUpOw0KLSAgICB2aXJ0dWFsIHZvaWQJCURlbGV0ZUZvbnQodm9pZCogaEZvbnQpOw0KLSAgICB2aXJ0dWFsCUZYX0JPT0wJCUdldEZhY2VOYW1lKHZvaWQqIGhGb250LCBDRlhfQnl0ZVN0cmluZyYgbmFtZSk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJR2V0Rm9udENoYXJzZXQodm9pZCogaEZvbnQsIGludCYgY2hhcnNldCk7DQotcHJvdGVjdGVkOg0KLSAgICBDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyCW1fRm9udExpc3Q7DQotICAgIENGWF9CeXRlU3RyaW5nQXJyYXkJbV9QYXRoTGlzdDsNCi0gICAgQ0ZYX0ZvbnRNYXBwZXIqCQltX3BNYXBwZXI7DQotICAgIHZvaWQJCQkJU2NhblBhdGgoQ0ZYX0J5dGVTdHJpbmcmIHBhdGgpOw0KLSAgICB2b2lkCQkJCVNjYW5GaWxlKENGWF9CeXRlU3RyaW5nJiBwYXRoKTsNCi0gICAgdm9pZAkJCQlSZXBvcnRGYWNlKENGWF9CeXRlU3RyaW5nJiBwYXRoLCBGWFNZU19GSUxFKiBwRmlsZSwgRlhfRFdPUkQgZmlsZXNpemUsIEZYX0RXT1JEIG9mZnNldCk7DQotfTsNCi1jbGFzcyBDRlhfQ291bnRlZEZhY2VDYWNoZSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgQ0ZYX0ZhY2VDYWNoZSoJbV9PYmo7DQotICAgIEZYX0RXT1JECQltX25Db3VudDsNCi19Ow0KLXR5cGVkZWYgQ0ZYX01hcFB0clRlbXBsYXRlPEZYRlRfRmFjZSwgQ0ZYX0NvdW50ZWRGYWNlQ2FjaGUqPiBDRlhfRlRDYWNoZU1hcDsNCi1jbGFzcyBDRlhfRm9udENhY2hlIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICB+Q0ZYX0ZvbnRDYWNoZSgpOw0KLSAgICBDRlhfRmFjZUNhY2hlKgkJCUdldENhY2hlZEZhY2UoQ0ZYX0ZvbnQqIHBGb250KTsNCi0gICAgdm9pZAkJCQkJUmVsZWFzZUNhY2hlZEZhY2UoQ0ZYX0ZvbnQqIHBGb250KTsNCi0gICAgdm9pZAkJCQkJRnJlZUNhY2hlKEZYX0JPT0wgYlJlbGVhc2UgPSBGQUxTRSk7DQotDQotcHJpdmF0ZToNCi0gICAgQ0ZYX0ZUQ2FjaGVNYXAJCQltX0ZURmFjZU1hcDsNCi0gICAgQ0ZYX0ZUQ2FjaGVNYXAJCQltX0V4dEZhY2VNYXA7DQotfTsNCi1jbGFzcyBDRlhfQXV0b0ZvbnRDYWNoZQ0KLXsNCi1wdWJsaWM6DQotICAgIENGWF9BdXRvRm9udENhY2hlKENGWF9Gb250Q2FjaGUqIHBGb250Q2FjaGUsIENGWF9Gb250KiBwRm9udCkNCi0gICAgICAgIDogbV9wRm9udENhY2hlKHBGb250Q2FjaGUpDQotICAgICAgICAsIG1fcEZvbnQocEZvbnQpDQotICAgIHsNCi0gICAgfQ0KLSAgICB+Q0ZYX0F1dG9Gb250Q2FjaGUoKQ0KLSAgICB7DQotICAgICAgICBtX3BGb250Q2FjaGUtPlJlbGVhc2VDYWNoZWRGYWNlKG1fcEZvbnQpOw0KLSAgICB9DQotICAgIENGWF9Gb250Q2FjaGUqIG1fcEZvbnRDYWNoZTsNCi0gICAgQ0ZYX0ZvbnQqIG1fcEZvbnQ7DQotfTsNCi0jZGVmaW5lIEZYX0ZPTlRDQUNIRV9ERUZJTkUocEZvbnRDYWNoZSwgcEZvbnQpIENGWF9BdXRvRm9udENhY2hlIGF1dG9Gb250Q2FjaGUoKHBGb250Q2FjaGUpLCAocEZvbnQpKQ0KLWNsYXNzIENGWF9HbHlwaEJpdG1hcCA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgaW50CQkJCQkJbV9Ub3A7DQotICAgIGludAkJCQkJCW1fTGVmdDsNCi0gICAgQ0ZYX0RJQml0bWFwCQkJbV9CaXRtYXA7DQotfTsNCi1jbGFzcyBDRlhfRmFjZUNhY2hlIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICB+Q0ZYX0ZhY2VDYWNoZSgpOw0KLSAgICBjb25zdCBDRlhfR2x5cGhCaXRtYXAqCUxvYWRHbHlwaEJpdG1hcChDRlhfRm9udCogcEZvbnQsIEZYX0RXT1JEIGdseXBoX2luZGV4LCBGWF9CT09MIGJGb250U3R5bGUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF93aWR0aCwgaW50IGFudGlfYWxpYXMsIGludCYgdGV4dF9mbGFncyk7DQotICAgIGNvbnN0IENGWF9QYXRoRGF0YSoJCUxvYWRHbHlwaFBhdGgoQ0ZYX0ZvbnQqIHBGb250LCBGWF9EV09SRCBnbHlwaF9pbmRleCwgaW50IGRlc3Rfd2lkdGgpOw0KLQ0KLQ0KLSAgICBDRlhfRmFjZUNhY2hlKEZYRlRfRmFjZSBmYWNlKTsNCi1wcml2YXRlOg0KLSAgICBGWEZUX0ZhY2UJCQkJbV9GYWNlOw0KLSAgICBDRlhfR2x5cGhCaXRtYXAqCQlSZW5kZXJHbHlwaChDRlhfRm9udCogcEZvbnQsIEZYX0RXT1JEIGdseXBoX2luZGV4LCBGWF9CT09MIGJGb250U3R5bGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIGludCBkZXN0X3dpZHRoLCBpbnQgYW50aV9hbGlhcyk7DQotICAgIENGWF9HbHlwaEJpdG1hcCoJCVJlbmRlckdseXBoX05hdGl2ZXRleHQoQ0ZYX0ZvbnQqIHBGb250LCBGWF9EV09SRCBnbHlwaF9pbmRleCwNCi0gICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LCBpbnQgZGVzdF93aWR0aCwgaW50IGFudGlfYWxpYXMpOw0KLSAgICBDRlhfR2x5cGhCaXRtYXAqICAgICAgICBMb29rVXBHbHlwaEJpdG1hcChDRlhfRm9udCogcEZvbnQsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIENGWF9CeXRlU3RyaW5nQyYgRmFjZUdseXBoc0tleSwNCi0gICAgICAgICAgICBGWF9EV09SRCBnbHlwaF9pbmRleCwgRlhfQk9PTCBiRm9udFN0eWxlLCBpbnQgZGVzdF93aWR0aCwgaW50IGFudGlfYWxpYXMpOw0KLSAgICBDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyCW1fU2l6ZU1hcDsNCi0gICAgQ0ZYX01hcFB0clRvUHRyCQkJbV9QYXRoTWFwOw0KLSAgICBDRlhfRElCaXRtYXAqICAgICAgICAgICBtX3BCaXRtYXA7DQotICAgIHZvaWQqICAgICAgICAgICAgICAgICAgIG1fcFBsYXRmb3JtR3JhcGhpY3M7DQotICAgIHZvaWQqICAgICAgICAgICAgICAgICAgIG1fcFBsYXRmb3JtQml0bWFwOw0KLSAgICB2b2lkKiAgICAgICAgICAgICAgICAgICBtX2hEQzsNCi0gICAgdm9pZCogICAgICAgICAgICAgICAgICAgbV9oQml0bWFwOw0KLSAgICB2b2lkKiAgICAgICAgICAgICAgICAgICBtX2hPbGRCaXRtYXA7DQotICAgIHZvaWQqICAgICAgICAgICAgICAgICAgIG1faEdkaUZvbnQ7DQotICAgIHZvaWQqICAgICAgICAgICAgICAgICAgIG1faE9sZEdkaUZvbnQ7DQotDQotICAgIHZvaWQJCQkJICAgIEluaXRQbGF0Zm9ybSgpOw0KLSAgICB2b2lkCQkJCSAgICBEZXN0cm95UGxhdGZvcm0oKTsNCi19Ow0KLXR5cGVkZWYgc3RydWN0IHsNCi0gICAgY29uc3QgQ0ZYX0dseXBoQml0bWFwKgltX3BHbHlwaDsNCi0gICAgaW50CQkJCQltX09yaWdpblgsIG1fT3JpZ2luWTsNCi0gICAgRlhfRkxPQVQJCQltX2ZPcmlnaW5YLCBtX2ZPcmlnaW5ZOw0KLX0gRlhURVhUX0dMWVBIUE9TOw0KLUZYX1JFQ1QgRlhHRV9HZXRHbHlwaHNCQm94KEZYVEVYVF9HTFlQSFBPUyogcEdseXBoQW5kUG9zLCBpbnQgbkNoYXJzLCBpbnQgYW50aV9hbGlhcywgRlhfRkxPQVQgcmV0aW5hU2NhbGVYID0gMS4wZiwgRlhfRkxPQVQgcmV0aW5hU2NhbGVZID0gMS4wZik7DQotRlhfQk9PTAlPdXRwdXRHbHlwaCh2b2lkKiBkaWIsIGludCB4LCBpbnQgeSwgQ0ZYX0ZvbnQqIHBGb250LCBkb3VibGUgZm9udF9zaXplLA0KLSAgICAgICAgICAgICAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgdW5zaWduZWQgbG9uZyBnbHlwaF9pbmRleCwgdW5zaWduZWQgbG9uZyBhcmdiKTsNCi1GWF9CT09MCU91dHB1dFRleHQodm9pZCogZGliLCBpbnQgeCwgaW50IHksIENGWF9Gb250KiBwRm9udCwgZG91YmxlIGZvbnRfc2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCogcFRleHRfbWF0cml4LCB1bnNpZ25lZCBzaG9ydCBjb25zdCogdGV4dCwgdW5zaWduZWQgbG9uZyBhcmdiKTsNCi1jbGFzcyBJRlhfR1NVQlRhYmxlDQotew0KLXB1YmxpYzoNCi0gICAgdmlydHVhbCB2b2lkCVJlbGVhc2UoKSA9IDA7DQotICAgIHZpcnR1YWwgRlhfQk9PTCBHZXRWZXJ0aWNhbEdseXBoKEZYX0RXT1JEIGdseXBobnVtLCBGWF9EV09SRCogdmdseXBobnVtKSA9IDA7DQotfTsNCi1JRlhfR1NVQlRhYmxlKiBGWEdFX0NyZWF0ZUdTVUJUYWJsZShDRlhfRm9udCogcEZvbnQpOw0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZYX0ZPTlRfSF8KKyNkZWZpbmUgX0ZYX0ZPTlRfSF8KKyNpZm5kZWYgX0ZYQ1JUX0VYVEVOU0lPTl8KKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2V4dC5oIgorI2VuZGlmCisjaWZuZGVmIF9GWF9ESUJfSF8KKyNpbmNsdWRlICJmeF9kaWIuaCIKKyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QgRlRfRmFjZVJlY18qIEZYRlRfRmFjZTsKK3R5cGVkZWYgdm9pZCogRlhGVF9MaWJyYXJ5OworY2xhc3MgSUZYX0ZvbnRFbmNvZGluZzsKK2NsYXNzIENGWF9QYXRoRGF0YTsKK2NsYXNzIENGWF9TdWJzdEZvbnQ7CitjbGFzcyBDRlhfRmFjZUNhY2hlOworY2xhc3MgSUZYX0ZvbnRNYXBwZXI7CitjbGFzcyBDRlhfRm9udE1hcHBlcjsKK2NsYXNzIElGWF9TeXN0ZW1Gb250SW5mbzsKK2NsYXNzIENGb250RmlsZUZhY2VJbmZvOworI2RlZmluZSBGWEZPTlRfRklYRURfUElUQ0gJCTB4MDEKKyNkZWZpbmUgRlhGT05UX1NFUklGCQkJMHgwMgorI2RlZmluZSBGWEZPTlRfU1lNQk9MSUMJCQkweDA0CisjZGVmaW5lIEZYRk9OVF9TQ1JJUFQJCQkweDA4CisjZGVmaW5lIEZYRk9OVF9JVEFMSUMJCQkweDQwCisjZGVmaW5lIEZYRk9OVF9CT0xECQkJCTB4NDAwMDAKKyNkZWZpbmUgRlhGT05UX1VTRUVYVEVSTkFUVFIJMHg4MDAwMAorI2RlZmluZSBGWEZPTlRfQ0lERk9OVAkJCTB4MTAwMDAwCisjZGVmaW5lIEZYRk9OVF9BTlNJX0NIQVJTRVQJCTAKKyNkZWZpbmUgRlhGT05UX0RFRkFVTFRfQ0hBUlNFVAkxCisjZGVmaW5lIEZYRk9OVF9TWU1CT0xfQ0hBUlNFVAkyCisjZGVmaW5lIEZYRk9OVF9TSElGVEpJU19DSEFSU0VUCTEyOAorI2RlZmluZSBGWEZPTlRfSEFOR0VVTF9DSEFSU0VUCTEyOQorI2RlZmluZSBGWEZPTlRfR0IyMzEyX0NIQVJTRVQJMTM0CisjZGVmaW5lIEZYRk9OVF9DSElORVNFQklHNV9DSEFSU0VUCTEzNgorI2RlZmluZSBGWEZPTlRfVEhBSV9DSEFSU0VUCQkyMjIKKyNkZWZpbmUgRlhGT05UX0VBU1RFVVJPUEVfQ0hBUlNFVAkyMzgKKyNkZWZpbmUgRlhGT05UX1JVU1NJQU5fQ0hBUlNFVAkyMDQKKyNkZWZpbmUgRlhGT05UX0dSRUVLX0NIQVJTRVQJMTYxCisjZGVmaW5lIEZYRk9OVF9UVVJLSVNIX0NIQVJTRVQJMTYyCisjZGVmaW5lIEZYRk9OVF9IRUJSRVdfQ0hBUlNFVAkxNzcKKyNkZWZpbmUgRlhGT05UX0FSQUJJQ19DSEFSU0VUCTE3OAorI2RlZmluZSBGWEZPTlRfQkFMVElDX0NIQVJTRVQJMTg2CisjZGVmaW5lIEZYRk9OVF9GRl9GSVhFRFBJVENICTEKKyNkZWZpbmUgRlhGT05UX0ZGX1JPTUFOCQkJKDE8PDQpCisjZGVmaW5lIEZYRk9OVF9GRl9TQ1JJUFQJCSg0PDw0KQorI2RlZmluZSBGWEZPTlRfRldfTk9STUFMCQk0MDAKKyNkZWZpbmUgRlhGT05UX0ZXX0JPTEQJCQk3MDAKK2NsYXNzIENGWF9Gb250IDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBDRlhfRm9udCgpOworICAgIH5DRlhfRm9udCgpOworCisgICAgRlhfQk9PTAkJCQkJTG9hZFN1YnN0KGNvbnN0IENGWF9CeXRlU3RyaW5nJiBmYWNlX25hbWUsIEZYX0JPT0wgYlRydWVUeXBlLCBGWF9EV09SRCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdlaWdodCwgaW50IGl0YWxpY19hbmdsZSwgaW50IENoYXJzZXRDUCwgRlhfQk9PTCBiVmVydGljYWwgPSBGQUxTRSk7CisKKyAgICBGWF9CT09MCQkJCQlMb2FkRW1iZWRkZWQoRlhfTFBDQllURSBkYXRhLCBGWF9EV09SRCBzaXplKTsKKworICAgIEZYX0JPT0wJCQkJCUxvYWRGaWxlKElGWF9GaWxlUmVhZCogcEZpbGUpOworCisgICAgRlhGVF9GYWNlCQkJCUdldEZhY2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fRmFjZTsKKyAgICB9CisKKworICAgIGNvbnN0IENGWF9TdWJzdEZvbnQqCUdldFN1YnN0Rm9udCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wU3Vic3RGb250OworICAgIH0KKworICAgIENGWF9QYXRoRGF0YSoJCQlMb2FkR2x5cGhQYXRoKEZYX0RXT1JEIGdseXBoX2luZGV4LCBpbnQgZGVzdF93aWR0aCA9IDApOworCisgICAgaW50CQkJCQkJR2V0R2x5cGhXaWR0aChGWF9EV09SRCBnbHlwaF9pbmRleCk7CisKKyAgICBpbnQJCQkJCQlHZXRBc2NlbnQoKSBjb25zdDsKKworICAgIGludAkJCQkJCUdldERlc2NlbnQoKSBjb25zdDsKKworICAgIEZYX0JPT0wgICAgICAgICAgICAgICAgIEdldEdseXBoQkJveChGWF9EV09SRCBnbHlwaF9pbmRleCwgRlhfUkVDVCAmYmJveCk7CisKKyAgICBGWF9CT09MICAgICAgICAgICAgICAgICBJc0l0YWxpYygpOworCisgICAgRlhfQk9PTCAgICAgICAgICAgICAgICAgSXNCb2xkKCk7CisKKyAgICBGWF9CT09MICAgICAgICAgICAgICAgICBJc0ZpeGVkV2lkdGgoKTsKKworICAgIEZYX0JPT0wJCQkJCUlzVmVydGljYWwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYlZlcnRpY2FsOworICAgIH0KKworICAgIENGWF9XaWRlU3RyaW5nICAgICAgICAgIEdldFBzTmFtZSgpIGNvbnN0OworCisKKyAgICBDRlhfQnl0ZVN0cmluZyAgICAgICAgICBHZXRGYW1pbHlOYW1lKCkgY29uc3Q7CisKKyAgICBDRlhfQnl0ZVN0cmluZyAgICAgICAgICBHZXRGYWNlTmFtZSgpIGNvbnN0OworCisKKyAgICBGWF9CT09MICAgICAgICAgICAgICAgICBJc1RURm9udCgpOworCisgICAgRlhfQk9PTCAgICAgICAgICAgICAgICAgR2V0QkJveChGWF9SRUNUICZiYm94KTsKKworICAgIGludCAgICAgICAgICAgICAgICAgICAgIEdldEhlaWdodCgpOworCisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgR2V0VUxQb3MoKTsKKworICAgIGludCAgICAgICAgICAgICAgICAgICAgIEdldFVMdGhpY2tuZXNzKCk7CisKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICBHZXRNYXhBZHZhbmNlV2lkdGgoKTsKKworICAgIEZYRlRfRmFjZQkJCQltX0ZhY2U7CisKKyAgICBDRlhfU3Vic3RGb250KgkJCW1fcFN1YnN0Rm9udDsKKyAgICBGWF9CT09MCQkJCQlJc0VtYmVkZGVkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JFbWJlZGRlZDsKKyAgICB9CisKKyAgICB2b2lkCQkJCQlBZGp1c3RNTVBhcmFtcyhpbnQgZ2x5cGhfaW5kZXgsIGludCB3aWR0aCwgaW50IHdlaWdodCk7CisgICAgRlhfTFBCWVRFCQkJCW1fcEZvbnREYXRhQWxsb2NhdGlvbjsKKyAgICBGWF9MUEJZVEUgICAgICAgICAgICAgICBtX3BGb250RGF0YTsKKyAgICBGWF9MUEJZVEUJCQkJbV9wR3N1YkRhdGE7CisgICAgRlhfRFdPUkQgICAgICAgICAgICAgICAgbV9kd1NpemU7CisgICAgQ0ZYX0JpbmFyeUJ1ZiAgICAgICAgICAgbV9PdGZGb250RGF0YTsKKyAgICB2b2lkKiAgICAgICAgICAgICAgICAgICBtX2hIYW5kbGU7CisgICAgdm9pZCogICAgICAgICAgICAgICAgICAgbV9wUGxhdGZvcm1Gb250OworICAgIHZvaWQqICAgICAgICAgICAgICAgICAgIG1fcFBsYXRmb3JtRm9udENvbGxlY3Rpb247CisgICAgdm9pZCogICAgICAgICAgICAgICAgICAgbV9wRHdGb250OworICAgIEZYX0JPT0wgICAgICAgICAgICAgICAgIG1fYkR3TG9hZGVkOworICAgIHZvaWQgICAgICAgICAgICAgICAgICAgIFJlbGVhc2VQbGF0Zm9ybVJlc291cmNlKCk7CisKKyAgICB2b2lkCQkJCQlEZWxldGVGYWNlKCk7Citwcm90ZWN0ZWQ6CisKKyAgICBGWF9CT09MCQkJCQltX2JFbWJlZGRlZDsKKyAgICBGWF9CT09MCQkJCQltX2JWZXJ0aWNhbDsKKyAgICB2b2lkKgkJCQkJbV9wT3duZWRTdHJlYW07Cit9OworI2RlZmluZSBFTkNPRElOR19JTlRFUk5BTAkJMAorI2RlZmluZSBFTkNPRElOR19VTklDT0RFCQkxCitjbGFzcyBJRlhfRm9udEVuY29kaW5nIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JRlhfRm9udEVuY29kaW5nKCkge30KKworICAgIHZpcnR1YWwgRlhfRFdPUkQJCUdseXBoRnJvbUNoYXJDb2RlKEZYX0RXT1JEIGNoYXJjb2RlKSA9IDA7CisKKyAgICB2aXJ0dWFsIENGWF9XaWRlU3RyaW5nCVVuaWNvZGVGcm9tQ2hhckNvZGUoRlhfRFdPUkQgY2hhcmNvZGUpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgRlhfRFdPUkQJCUNoYXJDb2RlRnJvbVVuaWNvZGUoRlhfV0NIQVIgVW5pY29kZSkgY29uc3QgPSAwOworfTsKK0lGWF9Gb250RW5jb2RpbmcqIEZYR0VfQ3JlYXRlVW5pY29kZUVuY29kaW5nKENGWF9Gb250KiBwRm9udCk7CisjZGVmaW5lIEZYRk9OVF9TVUJTVF9NTQkJCQkweDAxCisjZGVmaW5lIEZYRk9OVF9TVUJTVF9HTFlQSFBBVEgJCTB4MDQKKyNkZWZpbmUgRlhGT05UX1NVQlNUX0NMRUFSVFlQRQkJMHgwOAorI2RlZmluZSBGWEZPTlRfU1VCU1RfVFJBTlNGT1JNCQkweDEwCisjZGVmaW5lIEZYRk9OVF9TVUJTVF9OT05TWU1CT0wJCTB4MjAKKyNkZWZpbmUgRlhGT05UX1NVQlNUX0VYQUNUCQkJMHg0MAorI2RlZmluZSBGWEZPTlRfU1VCU1RfU1RBTkRBUkQJCTB4ODAKK2NsYXNzIENGWF9TdWJzdEZvbnQgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ0ZYX1N1YnN0Rm9udCgpOworCisgICAgRlhfTFBWT0lECQkJCW1fRXh0SGFuZGxlOworCisgICAgQ0ZYX0J5dGVTdHJpbmcJCQltX0ZhbWlseTsKKworICAgIGludAkJCQkJCW1fQ2hhcnNldDsKKworICAgIEZYX0RXT1JECQkJCW1fU3Vic3RGbGFnczsKKworICAgIGludAkJCQkJCW1fV2VpZ2h0OworCisgICAgaW50CQkJCQkJbV9JdGFsaWNBbmdsZTsKKworICAgIEZYX0JPT0wJCQkJCW1fYlN1YnN0T2ZDSks7CisKKyAgICBpbnQJCQkJCQltX1dlaWdodENKSzsKKworICAgIEZYX0JPT0wJCQkJCW1fYkl0bGljQ0pLOworfTsKKyNkZWZpbmUgRlhfRk9OVF9GTEFHX1NFUklGICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEZYX0ZPTlRfRkxBR19GSVhFRFBJVENICQkJMHgwMgorI2RlZmluZSBGWF9GT05UX0ZMQUdfSVRBTElDCQkJCTB4MDQKKyNkZWZpbmUgRlhfRk9OVF9GTEFHX0JPTEQJCQkJMHgwOAorI2RlZmluZSBGWF9GT05UX0ZMQUdfU1lNQk9MSUNfU1lNQk9MCTB4MTAKKyNkZWZpbmUgRlhfRk9OVF9GTEFHX1NZTUJPTElDX0RJTkdCQVRTCTB4MjAKKyNkZWZpbmUgRlhfRk9OVF9GTEFHX01VTFRJUExFTUFTVEVSCQkweDQwCit0eXBlZGVmIHN0cnVjdCB7CisgICAgRlhfTFBDQllURQltX3BGb250RGF0YTsKKyAgICBGWF9EV09SRAltX2R3U2l6ZTsKK30gRm94aXRGb250czsKK2NsYXNzIENGWF9Gb250TWdyIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBDRlhfRm9udE1ncigpOworICAgIH5DRlhfRm9udE1ncigpOworICAgIHZvaWQJCQlJbml0RlRMaWJyYXJ5KCk7CisgICAgRlhGVF9GYWNlCQlHZXRDYWNoZWRGYWNlKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBmYWNlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdlaWdodCwgRlhfQk9PTCBiSXRhbGljLCBGWF9MUEJZVEUmIHBGb250RGF0YSk7CisgICAgRlhGVF9GYWNlCQlBZGRDYWNoZWRGYWNlKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBmYWNlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdlaWdodCwgRlhfQk9PTCBiSXRhbGljLCBGWF9MUEJZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUsIGludCBmYWNlX2luZGV4KTsKKyAgICBGWEZUX0ZhY2UJCUdldENhY2hlZFRUQ0ZhY2UoaW50IHR0Y19zaXplLCBGWF9EV09SRCBjaGVja3N1bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZm9udF9vZmZzZXQsIEZYX0xQQllURSYgcEZvbnREYXRhKTsKKyAgICBGWEZUX0ZhY2UJCUFkZENhY2hlZFRUQ0ZhY2UoaW50IHR0Y19zaXplLCBGWF9EV09SRCBjaGVja3N1bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUsIGludCBmb250X29mZnNldCk7CisgICAgRlhGVF9GYWNlCQlHZXRGaWxlRmFjZShGWF9MUENTVFIgZmlsZW5hbWUsIGludCBmYWNlX2luZGV4KTsKKyAgICBGWEZUX0ZhY2UJCUdldEZpeGVkRmFjZShGWF9MUENCWVRFIHBEYXRhLCBGWF9EV09SRCBzaXplLCBpbnQgZmFjZV9pbmRleCk7CisgICAgdm9pZAkJCVJlbGVhc2VGYWNlKEZYRlRfRmFjZSBmYWNlKTsKKyAgICB2b2lkCQkJU2V0U3lzdGVtRm9udEluZm8oSUZYX1N5c3RlbUZvbnRJbmZvKiBwRm9udEluZm8pOworICAgIEZYRlRfRmFjZQkJRmluZFN1YnN0Rm9udChjb25zdCBDRlhfQnl0ZVN0cmluZyYgZmFjZV9uYW1lLCBGWF9CT09MIGJUcnVlVHlwZSwgRlhfRFdPUkQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdlaWdodCwgaW50IGl0YWxpY19hbmdsZSwgaW50IENoYXJzZXRDUCwgQ0ZYX1N1YnN0Rm9udCogcFN1YnN0Rm9udCk7CisKKyAgICB2b2lkCQkJRnJlZUNhY2hlKCk7CisKKyAgICBGWF9CT09MCQkJR2V0U3RhbmRhcmRGb250KEZYX0xQQ0JZVEUmIHBGb250RGF0YSwgRlhfRFdPUkQmIHNpemUsIGludCBpbmRleCk7CisgICAgQ0ZYX0ZvbnRNYXBwZXIqCW1fcEJ1aWx0aW5NYXBwZXI7CisgICAgSUZYX0ZvbnRNYXBwZXIqCW1fcEV4dE1hcHBlcjsKKyAgICBDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyCW1fRmFjZU1hcDsKKyAgICBGWEZUX0xpYnJhcnkJbV9GVExpYnJhcnk7CisgICAgRm94aXRGb250cyBtX0V4dGVybmFsRm9udHNbMTZdOworfTsKK2NsYXNzIElGWF9Gb250TWFwcGVyIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIHZpcnR1YWwgfklGWF9Gb250TWFwcGVyKCkge30KKworICAgIHZpcnR1YWwgRlhGVF9GYWNlCUZpbmRTdWJzdEZvbnQoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGZhY2VfbmFtZSwgRlhfQk9PTCBiVHJ1ZVR5cGUsIEZYX0RXT1JEIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2VpZ2h0LCBpbnQgaXRhbGljX2FuZ2xlLCBpbnQgQ2hhcnNldENQLCBDRlhfU3Vic3RGb250KiBwU3Vic3RGb250KSA9IDA7CisKKyAgICBDRlhfRm9udE1ncioJCW1fcEZvbnRNZ3I7Cit9OworY2xhc3MgSUZYX0ZvbnRFbnVtZXJhdG9yCit7CitwdWJsaWM6CisKKyAgICB2aXJ0dWFsIHZvaWQJCUhpdEZvbnQoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQJCUZpbmlzaCgpID0gMDsKK307CitjbGFzcyBJRlhfQWRkaXRpb25hbEZvbnRFbnVtCit7CitwdWJsaWM6CisgICAgdmlydHVhbCBpbnQgIENvdW50RmlsZXMoKSA9IDA7CisgICAgdmlydHVhbCBJRlhfRmlsZVN0cmVhbSogR2V0Rm9udEZpbGUoaW50IGluZGV4KSA9IDA7Cit9OworY2xhc3MgQ0ZYX0ZvbnRNYXBwZXIgOiBwdWJsaWMgSUZYX0ZvbnRNYXBwZXIKK3sKK3B1YmxpYzoKKyAgICBDRlhfRm9udE1hcHBlcigpOworICAgIHZpcnR1YWwgfkNGWF9Gb250TWFwcGVyKCk7CisgICAgdm9pZAkJCQlTZXRTeXN0ZW1Gb250SW5mbyhJRlhfU3lzdGVtRm9udEluZm8qIHBGb250SW5mbyk7CisgICAgSUZYX1N5c3RlbUZvbnRJbmZvKglHZXRTeXN0ZW1Gb250SW5mbygpCisgICAgeworICAgICAgICByZXR1cm4gbV9wRm9udEluZm87CisgICAgfQorICAgIHZvaWQJCQkJQWRkSW5zdGFsbGVkRm9udChjb25zdCBDRlhfQnl0ZVN0cmluZyYgbmFtZSwgaW50IGNoYXJzZXQpOworICAgIHZvaWQJCQkJTG9hZEluc3RhbGxlZEZvbnRzKCk7CisgICAgQ0ZYX0J5dGVTdHJpbmdBcnJheQltX0luc3RhbGxlZFRURm9udHM7CisgICAgdm9pZAkJCQlTZXRGb250RW51bWVyYXRvcihJRlhfRm9udEVudW1lcmF0b3IqIHBGb250RW51bWVyYXRvcikKKyAgICB7CisgICAgICAgIG1fcEZvbnRFbnVtZXJhdG9yID0gcEZvbnRFbnVtZXJhdG9yOworICAgIH0KKyAgICBJRlhfRm9udEVudW1lcmF0b3IqCUdldEZvbnRFbnVtZXJhdG9yKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BGb250RW51bWVyYXRvcjsKKyAgICB9CisgICAgdmlydHVhbCBGWEZUX0ZhY2UJRmluZFN1YnN0Rm9udChjb25zdCBDRlhfQnl0ZVN0cmluZyYgZmFjZV9uYW1lLCBGWF9CT09MIGJUcnVlVHlwZSwgRlhfRFdPUkQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3ZWlnaHQsIGludCBpdGFsaWNfYW5nbGUsIGludCBDaGFyc2V0Q1AsIENGWF9TdWJzdEZvbnQqIHBTdWJzdEZvbnQpOworcHJpdmF0ZToKKyAgICBDRlhfQnl0ZVN0cmluZwkJR2V0UFNOYW1lRnJvbVRUKHZvaWQqIGhGb250KTsKKyAgICBDRlhfQnl0ZVN0cmluZwkJTWF0Y2hJbnN0YWxsZWRGb250cyhjb25zdCBDRlhfQnl0ZVN0cmluZyYgbm9ybV9uYW1lKTsKKyAgICBGWEZUX0ZhY2UJCQlVc2VJbnRlcm5hbFN1YnN0KENGWF9TdWJzdEZvbnQqIHBTdWJzdEZvbnQsIGludCBpQmFzZUZvbnQsIGludCBpdGFsaWNfYW5nbGUsIGludCB3ZWlnaHQsIGludCBwaWN0aGZhbWlseSk7CisKKyAgICBGWF9CT09MCQkJCW1fYkxpc3RMb2FkZWQ7CisgICAgRlhGVF9GYWNlCQkJbV9NTUZhY2VzWzJdOworICAgIENGWF9CeXRlU3RyaW5nCQltX0xhc3RGYW1pbHk7CisgICAgQ0ZYX0RXb3JkQXJyYXkJCW1fQ2hhcnNldEFycmF5OworICAgIENGWF9CeXRlU3RyaW5nQXJyYXkJbV9GYWNlQXJyYXk7CisgICAgSUZYX1N5c3RlbUZvbnRJbmZvKgltX3BGb250SW5mbzsKKyAgICBGWEZUX0ZhY2UJCQltX0ZveGl0RmFjZXNbMTRdOworICAgIElGWF9Gb250RW51bWVyYXRvcioJCW1fcEZvbnRFbnVtZXJhdG9yOworfTsKK2NsYXNzIElGWF9TeXN0ZW1Gb250SW5mbyA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgc3RhdGljIElGWF9TeXN0ZW1Gb250SW5mbyoJQ3JlYXRlRGVmYXVsdCgpOworICAgIHZpcnR1YWwgdm9pZAkJUmVsZWFzZSgpID0gMDsKKyAgICB2aXJ0dWFsCUZYX0JPT0wJCUVudW1Gb250TGlzdChDRlhfRm9udE1hcHBlciogcE1hcHBlcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCoJCU1hcEZvbnQoaW50IHdlaWdodCwgRlhfQk9PTCBiSXRhbGljLCBpbnQgY2hhcnNldCwgaW50IHBpdGNoX2ZhbWlseSwgRlhfTFBDU1RSIGZhY2UsIEZYX0JPT0wmIGJFeGFjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCoJCUdldEZvbnQoRlhfTFBDU1RSIGZhY2UpID0gMDsKKyAgICB2aXJ0dWFsIEZYX0RXT1JECUdldEZvbnREYXRhKHZvaWQqIGhGb250LCBGWF9EV09SRCB0YWJsZSwgRlhfTFBCWVRFIGJ1ZmZlciwgRlhfRFdPUkQgc2l6ZSkgPSAwOworICAgIHZpcnR1YWwgRlhfQk9PTAkJR2V0RmFjZU5hbWUodm9pZCogaEZvbnQsIENGWF9CeXRlU3RyaW5nJiBuYW1lKSA9IDA7CisgICAgdmlydHVhbCBGWF9CT09MCQlHZXRGb250Q2hhcnNldCh2b2lkKiBoRm9udCwgaW50JiBjaGFyc2V0KSA9IDA7CisgICAgdmlydHVhbCBpbnQJCQlHZXRGYWNlSW5kZXgodm9pZCogaEZvbnQpCisgICAgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkCQlEZWxldGVGb250KHZvaWQqIGhGb250KSA9IDA7CisgICAgdmlydHVhbCB2b2lkKiAgICAgICBSZXRhaW5Gb250KHZvaWQqIGhGb250KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfTsKK2NsYXNzIENGWF9Gb2xkZXJGb250SW5mbyA6IHB1YmxpYyBJRlhfU3lzdGVtRm9udEluZm8KK3sKK3B1YmxpYzoKKyAgICBDRlhfRm9sZGVyRm9udEluZm8oKTsKKyAgICB+Q0ZYX0ZvbGRlckZvbnRJbmZvKCk7CisgICAgdm9pZAkJCQlBZGRQYXRoKEZYX0JTVFIgcGF0aCk7CisgICAgdmlydHVhbCB2b2lkCQlSZWxlYXNlKCk7CisgICAgdmlydHVhbAlGWF9CT09MCQlFbnVtRm9udExpc3QoQ0ZYX0ZvbnRNYXBwZXIqIHBNYXBwZXIpOworICAgIHZpcnR1YWwgdm9pZCoJCU1hcEZvbnQoaW50IHdlaWdodCwgRlhfQk9PTCBiSXRhbGljLCBpbnQgY2hhcnNldCwgaW50IHBpdGNoX2ZhbWlseSwgRlhfTFBDU1RSIGZhY2UsIEZYX0JPT0wmIGJFeGFjdCk7CisgICAgdmlydHVhbCB2b2lkKgkJR2V0Rm9udChGWF9MUENTVFIgZmFjZSk7CisgICAgdmlydHVhbCBGWF9EV09SRAlHZXRGb250RGF0YSh2b2lkKiBoRm9udCwgRlhfRFdPUkQgdGFibGUsIEZYX0xQQllURSBidWZmZXIsIEZYX0RXT1JEIHNpemUpOworICAgIHZpcnR1YWwgdm9pZAkJRGVsZXRlRm9udCh2b2lkKiBoRm9udCk7CisgICAgdmlydHVhbAlGWF9CT09MCQlHZXRGYWNlTmFtZSh2b2lkKiBoRm9udCwgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUpOworICAgIHZpcnR1YWwgRlhfQk9PTAkJR2V0Rm9udENoYXJzZXQodm9pZCogaEZvbnQsIGludCYgY2hhcnNldCk7Citwcm90ZWN0ZWQ6CisgICAgQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0cgltX0ZvbnRMaXN0OworICAgIENGWF9CeXRlU3RyaW5nQXJyYXkJbV9QYXRoTGlzdDsKKyAgICBDRlhfRm9udE1hcHBlcioJCW1fcE1hcHBlcjsKKyAgICB2b2lkCQkJCVNjYW5QYXRoKENGWF9CeXRlU3RyaW5nJiBwYXRoKTsKKyAgICB2b2lkCQkJCVNjYW5GaWxlKENGWF9CeXRlU3RyaW5nJiBwYXRoKTsKKyAgICB2b2lkCQkJCVJlcG9ydEZhY2UoQ0ZYX0J5dGVTdHJpbmcmIHBhdGgsIEZYU1lTX0ZJTEUqIHBGaWxlLCBGWF9EV09SRCBmaWxlc2l6ZSwgRlhfRFdPUkQgb2Zmc2V0KTsKK307CitjbGFzcyBDRlhfQ291bnRlZEZhY2VDYWNoZSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ0ZYX0ZhY2VDYWNoZSoJbV9PYmo7CisgICAgRlhfRFdPUkQJCW1fbkNvdW50OworfTsKK3R5cGVkZWYgQ0ZYX01hcFB0clRlbXBsYXRlPEZYRlRfRmFjZSwgQ0ZYX0NvdW50ZWRGYWNlQ2FjaGUqPiBDRlhfRlRDYWNoZU1hcDsKK2NsYXNzIENGWF9Gb250Q2FjaGUgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIH5DRlhfRm9udENhY2hlKCk7CisgICAgQ0ZYX0ZhY2VDYWNoZSoJCQlHZXRDYWNoZWRGYWNlKENGWF9Gb250KiBwRm9udCk7CisgICAgdm9pZAkJCQkJUmVsZWFzZUNhY2hlZEZhY2UoQ0ZYX0ZvbnQqIHBGb250KTsKKyAgICB2b2lkCQkJCQlGcmVlQ2FjaGUoRlhfQk9PTCBiUmVsZWFzZSA9IEZBTFNFKTsKKworcHJpdmF0ZToKKyAgICBDRlhfRlRDYWNoZU1hcAkJCW1fRlRGYWNlTWFwOworICAgIENGWF9GVENhY2hlTWFwCQkJbV9FeHRGYWNlTWFwOworfTsKK2NsYXNzIENGWF9BdXRvRm9udENhY2hlCit7CitwdWJsaWM6CisgICAgQ0ZYX0F1dG9Gb250Q2FjaGUoQ0ZYX0ZvbnRDYWNoZSogcEZvbnRDYWNoZSwgQ0ZYX0ZvbnQqIHBGb250KQorICAgICAgICA6IG1fcEZvbnRDYWNoZShwRm9udENhY2hlKQorICAgICAgICAsIG1fcEZvbnQocEZvbnQpCisgICAgeworICAgIH0KKyAgICB+Q0ZYX0F1dG9Gb250Q2FjaGUoKQorICAgIHsKKyAgICAgICAgbV9wRm9udENhY2hlLT5SZWxlYXNlQ2FjaGVkRmFjZShtX3BGb250KTsKKyAgICB9CisgICAgQ0ZYX0ZvbnRDYWNoZSogbV9wRm9udENhY2hlOworICAgIENGWF9Gb250KiBtX3BGb250OworfTsKKyNkZWZpbmUgRlhfRk9OVENBQ0hFX0RFRklORShwRm9udENhY2hlLCBwRm9udCkgQ0ZYX0F1dG9Gb250Q2FjaGUgYXV0b0ZvbnRDYWNoZSgocEZvbnRDYWNoZSksIChwRm9udCkpCitjbGFzcyBDRlhfR2x5cGhCaXRtYXAgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIGludAkJCQkJCW1fVG9wOworICAgIGludAkJCQkJCW1fTGVmdDsKKyAgICBDRlhfRElCaXRtYXAJCQltX0JpdG1hcDsKK307CitjbGFzcyBDRlhfRmFjZUNhY2hlIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICB+Q0ZYX0ZhY2VDYWNoZSgpOworICAgIGNvbnN0IENGWF9HbHlwaEJpdG1hcCoJTG9hZEdseXBoQml0bWFwKENGWF9Gb250KiBwRm9udCwgRlhfRFdPUkQgZ2x5cGhfaW5kZXgsIEZYX0JPT0wgYkZvbnRTdHlsZSwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBhbnRpX2FsaWFzLCBpbnQmIHRleHRfZmxhZ3MpOworICAgIGNvbnN0IENGWF9QYXRoRGF0YSoJCUxvYWRHbHlwaFBhdGgoQ0ZYX0ZvbnQqIHBGb250LCBGWF9EV09SRCBnbHlwaF9pbmRleCwgaW50IGRlc3Rfd2lkdGgpOworCisKKyAgICBDRlhfRmFjZUNhY2hlKEZYRlRfRmFjZSBmYWNlKTsKK3ByaXZhdGU6CisgICAgRlhGVF9GYWNlCQkJCW1fRmFjZTsKKyAgICBDRlhfR2x5cGhCaXRtYXAqCQlSZW5kZXJHbHlwaChDRlhfRm9udCogcEZvbnQsIEZYX0RXT1JEIGdseXBoX2luZGV4LCBGWF9CT09MIGJGb250U3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgaW50IGRlc3Rfd2lkdGgsIGludCBhbnRpX2FsaWFzKTsKKyAgICBDRlhfR2x5cGhCaXRtYXAqCQlSZW5kZXJHbHlwaF9OYXRpdmV0ZXh0KENGWF9Gb250KiBwRm9udCwgRlhfRFdPUkQgZ2x5cGhfaW5kZXgsCisgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LCBpbnQgZGVzdF93aWR0aCwgaW50IGFudGlfYWxpYXMpOworICAgIENGWF9HbHlwaEJpdG1hcCogICAgICAgIExvb2tVcEdseXBoQml0bWFwKENGWF9Gb250KiBwRm9udCwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgQ0ZYX0J5dGVTdHJpbmdDJiBGYWNlR2x5cGhzS2V5LAorICAgICAgICAgICAgRlhfRFdPUkQgZ2x5cGhfaW5kZXgsIEZYX0JPT0wgYkZvbnRTdHlsZSwgaW50IGRlc3Rfd2lkdGgsIGludCBhbnRpX2FsaWFzKTsKKyAgICBDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyCW1fU2l6ZU1hcDsKKyAgICBDRlhfTWFwUHRyVG9QdHIJCQltX1BhdGhNYXA7CisgICAgQ0ZYX0RJQml0bWFwKiAgICAgICAgICAgbV9wQml0bWFwOworICAgIHZvaWQqICAgICAgICAgICAgICAgICAgIG1fcFBsYXRmb3JtR3JhcGhpY3M7CisgICAgdm9pZCogICAgICAgICAgICAgICAgICAgbV9wUGxhdGZvcm1CaXRtYXA7CisgICAgdm9pZCogICAgICAgICAgICAgICAgICAgbV9oREM7CisgICAgdm9pZCogICAgICAgICAgICAgICAgICAgbV9oQml0bWFwOworICAgIHZvaWQqICAgICAgICAgICAgICAgICAgIG1faE9sZEJpdG1hcDsKKyAgICB2b2lkKiAgICAgICAgICAgICAgICAgICBtX2hHZGlGb250OworICAgIHZvaWQqICAgICAgICAgICAgICAgICAgIG1faE9sZEdkaUZvbnQ7CisKKyAgICB2b2lkCQkJCSAgICBJbml0UGxhdGZvcm0oKTsKKyAgICB2b2lkCQkJCSAgICBEZXN0cm95UGxhdGZvcm0oKTsKK307Cit0eXBlZGVmIHN0cnVjdCB7CisgICAgY29uc3QgQ0ZYX0dseXBoQml0bWFwKgltX3BHbHlwaDsKKyAgICBpbnQJCQkJCW1fT3JpZ2luWCwgbV9PcmlnaW5ZOworICAgIEZYX0ZMT0FUCQkJbV9mT3JpZ2luWCwgbV9mT3JpZ2luWTsKK30gRlhURVhUX0dMWVBIUE9TOworRlhfUkVDVCBGWEdFX0dldEdseXBoc0JCb3goRlhURVhUX0dMWVBIUE9TKiBwR2x5cGhBbmRQb3MsIGludCBuQ2hhcnMsIGludCBhbnRpX2FsaWFzLCBGWF9GTE9BVCByZXRpbmFTY2FsZVggPSAxLjBmLCBGWF9GTE9BVCByZXRpbmFTY2FsZVkgPSAxLjBmKTsKK0ZYX0JPT0wJT3V0cHV0R2x5cGgodm9pZCogZGliLCBpbnQgeCwgaW50IHksIENGWF9Gb250KiBwRm9udCwgZG91YmxlIGZvbnRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgdW5zaWduZWQgbG9uZyBnbHlwaF9pbmRleCwgdW5zaWduZWQgbG9uZyBhcmdiKTsKK0ZYX0JPT0wJT3V0cHV0VGV4dCh2b2lkKiBkaWIsIGludCB4LCBpbnQgeSwgQ0ZYX0ZvbnQqIHBGb250LCBkb3VibGUgZm9udF9zaXplLAorICAgICAgICAgICAgICAgICAgIENGWF9BZmZpbmVNYXRyaXgqIHBUZXh0X21hdHJpeCwgdW5zaWduZWQgc2hvcnQgY29uc3QqIHRleHQsIHVuc2lnbmVkIGxvbmcgYXJnYik7CitjbGFzcyBJRlhfR1NVQlRhYmxlCit7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkCVJlbGVhc2UoKSA9IDA7CisgICAgdmlydHVhbCBGWF9CT09MIEdldFZlcnRpY2FsR2x5cGgoRlhfRFdPUkQgZ2x5cGhudW0sIEZYX0RXT1JEKiB2Z2x5cGhudW0pID0gMDsKK307CitJRlhfR1NVQlRhYmxlKiBGWEdFX0NyZWF0ZUdTVUJUYWJsZShDRlhfRm9udCogcEZvbnQpOworI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL2luY2x1ZGUvZnhnZS9meF9mcmVldHlwZS5oIGIvY29yZS9pbmNsdWRlL2Z4Z2UvZnhfZnJlZXR5cGUuaAppbmRleCAzOTdjM2VlLi42YTIxOTBiIDEwMDY0NAotLS0gYS9jb3JlL2luY2x1ZGUvZnhnZS9meF9mcmVldHlwZS5oCisrKyBiL2NvcmUvaW5jbHVkZS9meGdlL2Z4X2ZyZWV0eXBlLmgKQEAgLTEsMTQ0ICsxLDE0NCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uL3RoaXJkcGFydGllcy9mcmVldHlwZS9mdDJidWlsZC5oIg0KLSNpbmNsdWRlICIuLi90aGlyZHBhcnRpZXMvZnJlZXR5cGUvZnJlZXR5cGUvZnJlZXR5cGUuaCINCi0jaW5jbHVkZSAiLi4vdGhpcmRwYXJ0aWVzL2ZyZWV0eXBlL2ZyZWV0eXBlL2Z0b3V0bG4uaCINCi0jaW5jbHVkZSAiLi4vdGhpcmRwYXJ0aWVzL2ZyZWV0eXBlL2ZyZWV0eXBlL2Z0bW0uaCINCi0jaW5jbHVkZSAiLi4vdGhpcmRwYXJ0aWVzL2ZyZWV0eXBlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIg0KLSNpbmNsdWRlICIuLi90aGlyZHBhcnRpZXMvZnJlZXR5cGUvZnJlZXR5cGUvdHR0YWJsZXMuaCINCi0jaWZkZWYgX19jcGx1c3BsdXMNCi1leHRlcm4gIkMiIHsNCi0jZW5kaWYNCi0jZGVmaW5lIEZYRlRfRU5DT0RJTkdfVU5JQ09ERSBGVF9FTkNPRElOR19VTklDT0RFDQotI2RlZmluZSBGWEZUX0VOQ09ESU5HX0FET0JFX1NUQU5EQVJEIEZUX0VOQ09ESU5HX0FET0JFX1NUQU5EQVJEDQotI2RlZmluZSBGWEZUX0VOQ09ESU5HX0FET0JFX0VYUEVSVCBGVF9FTkNPRElOR19BRE9CRV9FWFBFUlQNCi0jZGVmaW5lIEZYRlRfRU5DT0RJTkdfQURPQkVfTEFUSU5fMSBGVF9FTkNPRElOR19BRE9CRV9MQVRJTl8xDQotI2RlZmluZSBGWEZUX0VOQ09ESU5HX0FQUExFX1JPTUFOIEZUX0VOQ09ESU5HX0FQUExFX1JPTUFODQotI2RlZmluZSBGWEZUX0VOQ09ESU5HX0FET0JFX0NVU1RPTSBGVF9FTkNPRElOR19BRE9CRV9DVVNUT00NCi0jZGVmaW5lIEZYRlRfRU5DT0RJTkdfTVNfU1lNQk9MIEZUX0VOQ09ESU5HX01TX1NZTUJPTA0KLSNkZWZpbmUgRlhGVF9FTkNPRElOR19HQjIzMTIgRlRfRU5DT0RJTkdfR0IyMzEyDQotI2RlZmluZSBGWEZUX0VOQ09ESU5HX0JJRzUgRlRfRU5DT0RJTkdfQklHNQ0KLSNkZWZpbmUgRlhGVF9FTkNPRElOR19TSklTIEZUX0VOQ09ESU5HX1NKSVMNCi0jZGVmaW5lIEZYRlRfRU5DT0RJTkdfSk9IQUIgRlRfRU5DT0RJTkdfSk9IQUINCi0jZGVmaW5lIEZYRlRfRU5DT0RJTkdfV0FOU1VORyBGVF9FTkNPRElOR19XQU5TVU5HDQotI2RlZmluZSBGWEZUX0xPQURfTk9fU0NBTEUgRlRfTE9BRF9OT19TQ0FMRQ0KLSNkZWZpbmUgRlhGVF9MT0FEX0lHTk9SRV9HTE9CQUxfQURWQU5DRV9XSURUSCBGVF9MT0FEX0lHTk9SRV9HTE9CQUxfQURWQU5DRV9XSURUSA0KLSNkZWZpbmUgRlhGVF9SRU5ERVJfTU9ERV9MQ0QgRlRfUkVOREVSX01PREVfTENEDQotI2RlZmluZSBGWEZUX1JFTkRFUl9NT0RFX01PTk8gRlRfUkVOREVSX01PREVfTU9OTw0KLSNkZWZpbmUgRlhGVF9SRU5ERVJfTU9ERV9OT1JNQUwgRlRfUkVOREVSX01PREVfTk9STUFMDQotI2RlZmluZSBGWEZUX0xPQURfSUdOT1JFX1RSQU5TRk9STSBGVF9MT0FEX0lHTk9SRV9UUkFOU0ZPUk0NCi0jZGVmaW5lIEZYRlRfTE9BRF9OT19CSVRNQVAgRlRfTE9BRF9OT19CSVRNQVANCi0jZGVmaW5lIEZYRlRfTE9BRF9OT19ISU5USU5HIEZUX0xPQURfTk9fSElOVElORw0KLSNkZWZpbmUgRlhGVF9QSVhFTF9NT0RFX01PTk8gRlRfUElYRUxfTU9ERV9NT05PDQotI2RlZmluZSBGWEZUX1NUWUxFX0ZMQUdfSVRBTElDIEZUX1NUWUxFX0ZMQUdfSVRBTElDDQotI2RlZmluZSBGWEZUX1NUWUxFX0ZMQUdfQk9MRCBGVF9TVFlMRV9GTEFHX0JPTEQNCi0jZGVmaW5lIEZYRlRfRkFDRV9GTEFHX1NGTlQgRlRfRkFDRV9GTEFHX1NGTlQNCi0jZGVmaW5lIEZYRlRfRkFDRV9GTEFHX1RSSUNLWSAoIDFMIDw8IDEzICkNCi10eXBlZGVmIEZUX01NX1ZhcioJCUZYRlRfTU1fVmFyOw0KLXR5cGVkZWYgRlRfQml0bWFwKgkJRlhGVF9CaXRtYXA7DQotI2RlZmluZSBGWEZUX01hdHJpeAkJRlRfTWF0cml4DQotI2RlZmluZSBGWEZUX1ZlY3RvcgkJRlRfVmVjdG9yDQotI2RlZmluZSBGWEZUX091dGxpbmVfRnVuY3MgRlRfT3V0bGluZV9GdW5jcw0KLXR5cGVkZWYgRlRfT3Blbl9BcmdzCUZYRlRfT3Blbl9BcmdzOw0KLXR5cGVkZWYgRlRfU3RyZWFtUmVjCUZYRlRfU3RyZWFtUmVjOw0KLXR5cGVkZWYgRlRfU3RyZWFtUmVjKglGWEZUX1N0cmVhbTsNCi10eXBlZGVmIEZUX0JCb3gJCQlGWEZUX0JCb3g7DQotdHlwZWRlZiBGVF9HbHlwaAkJRlhGVF9HbHlwaDsNCi10eXBlZGVmIEZUX0NoYXJNYXAJCUZYRlRfQ2hhck1hcDsNCi0jZGVmaW5lIEZYRlRfR0xZUEhfQkJPWF9QSVhFTFMJRlRfR0xZUEhfQkJPWF9QSVhFTFMNCi0jZGVmaW5lIEZYRlRfT3Blbl9GYWNlKGxpYnJhcnksIGFyZ3MsIGluZGV4LCBmYWNlKSBcDQotICAgIEZUX09wZW5fRmFjZSgoRlRfTGlicmFyeSkobGlicmFyeSksIGFyZ3MsIGluZGV4LCAoRlRfRmFjZSopKGZhY2UpKQ0KLSNkZWZpbmUgRlhGVF9Eb25lX0ZhY2UoZmFjZSkgRlRfRG9uZV9GYWNlKChGVF9GYWNlKShmYWNlKSkNCi0jZGVmaW5lIEZYRlRfRG9uZV9GcmVlVHlwZShsaWJyYXJ5KSBGVF9Eb25lX0ZyZWVUeXBlKChGVF9MaWJyYXJ5KShsaWJyYXJ5KSkNCi0jZGVmaW5lIEZYRlRfSW5pdF9GcmVlVHlwZShsaWJyYXJ5KSBGVF9Jbml0X0ZyZWVUeXBlKChGVF9MaWJyYXJ5KikobGlicmFyeSkpDQotI2RlZmluZSBGWEZUX05ld19NZW1vcnlfRmFjZShsaWJyYXJ5LCBiYXNlLCBzaXplLCBpbmRleCwgZmFjZSkgXA0KLSAgICBGVF9OZXdfTWVtb3J5X0ZhY2UoKEZUX0xpYnJhcnkpKGxpYnJhcnkpLCBiYXNlLCBzaXplLCBpbmRleCwgKEZUX0ZhY2UqKShmYWNlKSkNCi0jZGVmaW5lIEZYRlRfTmV3X0ZhY2UobGlicmFyeSwgZmlsZW5hbWUsIGluZGV4LCBmYWNlKSBcDQotICAgIEZUX05ld19GYWNlKChGVF9MaWJyYXJ5KShsaWJyYXJ5KSwgZmlsZW5hbWUsIGluZGV4LCAoRlRfRmFjZSopKGZhY2UpKQ0KLSNkZWZpbmUgRlhGVF9HZXRfRmFjZV9GcmVlVHlwZShmYWNlKSAoKEZUX0ZhY2UpZmFjZSktPmRyaXZlci0+cm9vdC5saWJyYXJ5DQotI2RlZmluZSBGWEZUX1NlbGVjdF9DaGFybWFwKGZhY2UsIGVuY29kaW5nKSBGVF9TZWxlY3RfQ2hhcm1hcCgoRlRfRmFjZSlmYWNlLCAoRlRfRW5jb2RpbmcpZW5jb2RpbmcpDQotI2RlZmluZSBGWEZUX1NldF9DaGFybWFwKGZhY2UsIGNoYXJtYXApIEZUX1NldF9DaGFybWFwKChGVF9GYWNlKWZhY2UsIChGVF9DaGFyTWFwKWNoYXJtYXApDQotI2RlZmluZSBGWEZUX0xvYWRfR2x5cGgoZmFjZSwgZ2x5cGhfaW5kZXgsIGZsYWdzKSBGVF9Mb2FkX0dseXBoKChGVF9GYWNlKWZhY2UsIGdseXBoX2luZGV4LCBmbGFncykNCi0jZGVmaW5lIEZYRlRfR2V0X0NoYXJfSW5kZXgoZmFjZSwgY29kZSkgRlRfR2V0X0NoYXJfSW5kZXgoKEZUX0ZhY2UpZmFjZSwgY29kZSkNCi0jZGVmaW5lIEZYRlRfR2V0X0dseXBoX05hbWUoZmFjZSwgaW5kZXgsIGJ1ZmZlciwgc2l6ZSkgRlRfR2V0X0dseXBoX05hbWUoKEZUX0ZhY2UpZmFjZSwgaW5kZXgsIGJ1ZmZlciwgc2l6ZSkNCi0jZGVmaW5lIEZYRlRfR2V0X05hbWVfSW5kZXgoZmFjZSwgbmFtZSkgRlRfR2V0X05hbWVfSW5kZXgoKEZUX0ZhY2UpZmFjZSwgbmFtZSkNCi0jZGVmaW5lIEZYRlRfSGFzX0dseXBoX05hbWVzKGZhY2UpICAoKChGVF9GYWNlKWZhY2UpLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0dMWVBIX05BTUVTKQ0KLSNkZWZpbmUgRlhGVF9HZXRfUG9zdHNjcmlwdF9OYW1lKGZhY2UpIEZUX0dldF9Qb3N0c2NyaXB0X05hbWUoKEZUX0ZhY2UpZmFjZSkNCi0jZGVmaW5lIEZYRlRfTG9hZF9TZm50X1RhYmxlKGZhY2UsIHRhZywgb2Zmc2V0LCBidWZmZXIsIGxlbmd0aCkgXA0KLSAgICBGVF9Mb2FkX1NmbnRfVGFibGUoKEZUX0ZhY2UpZmFjZSwgdGFnLCBvZmZzZXQsIGJ1ZmZlciwgbGVuZ3RoKQ0KLSNkZWZpbmUgRlhGVF9HZXRfRmlyc3RfQ2hhcihmYWNlLCBnbHlwaF9pbmRleCkgRlRfR2V0X0ZpcnN0X0NoYXIoKEZUX0ZhY2UpZmFjZSwgZ2x5cGhfaW5kZXgpDQotI2RlZmluZSBGWEZUX0dldF9OZXh0X0NoYXIoZmFjZSwgY29kZSwgZ2x5cGhfaW5kZXgpIEZUX0dldF9OZXh0X0NoYXIoKEZUX0ZhY2UpZmFjZSwgY29kZSwgZ2x5cGhfaW5kZXgpDQotI2RlZmluZSBGWEZUX0NsZWFyX0ZhY2VfRXh0ZXJuYWxfU3RyZWFtKGZhY2UpICgoKEZUX0ZhY2UpZmFjZSktPmZhY2VfZmxhZ3MmPX5GVF9GQUNFX0ZMQUdfRVhURVJOQUxfU1RSRUFNKQ0KLSNkZWZpbmUgRlhGVF9HZXRfRmFjZV9FeHRlcm5hbF9TdHJlYW0oZmFjZSkgKCgoRlRfRmFjZSlmYWNlKS0+ZmFjZV9mbGFncyZGVF9GQUNFX0ZMQUdfRVhURVJOQUxfU1RSRUFNKQ0KLSNkZWZpbmUgRlhGVF9Jc19GYWNlX1RUX09UKGZhY2UpICgoKEZUX0ZhY2UpZmFjZSktPmZhY2VfZmxhZ3MmRlRfRkFDRV9GTEFHX1NGTlQpDQotI2RlZmluZSBGWEZUX0lzX0ZhY2VfVHJpY2t5KGZhY2UpICgoKEZUX0ZhY2UpZmFjZSktPmZhY2VfZmxhZ3MmRlhGVF9GQUNFX0ZMQUdfVFJJQ0tZKQ0KLSNkZWZpbmUgRlhGVF9Jc19GYWNlX2ZpeGVkd2lkdGgoZmFjZSkgKCgoRlRfRmFjZSlmYWNlKS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19GSVhFRF9XSURUSCkNCi0jZGVmaW5lIEZYRlRfR2V0X0ZhY2VfU3RyZWFtX0Jhc2UoZmFjZSkgKChGVF9GYWNlKWZhY2UpLT5zdHJlYW0tPmJhc2UNCi0jZGVmaW5lIEZYRlRfR2V0X0ZhY2VfU3RyZWFtX1NpemUoZmFjZSkgKChGVF9GYWNlKWZhY2UpLT5zdHJlYW0tPnNpemUNCi0jZGVmaW5lIEZYRlRfR2V0X0ZhY2VfRmFtaWx5X05hbWUoZmFjZSkgKChGVF9GYWNlKWZhY2UpLT5mYW1pbHlfbmFtZQ0KLSNkZWZpbmUgRlhGVF9HZXRfRmFjZV9TdHlsZV9OYW1lKGZhY2UpICgoRlRfRmFjZSlmYWNlKS0+c3R5bGVfbmFtZQ0KLSNkZWZpbmUgRlhGVF9HZXRfRmFjZV9OdW1mYWNlcyhmYWNlKSAoKEZUX0ZhY2UpZmFjZSktPm51bV9mYWNlcw0KLSNkZWZpbmUgRlhGVF9HZXRfRmFjZV9GYWNlaW5kZXgoZmFjZSkgKChGVF9GYWNlKWZhY2UpLT5mYWNlX2luZGV4DQotI2RlZmluZSBGWEZUX0lzX0ZhY2VfSXRhbGljKGZhY2UpICgoKEZUX0ZhY2UpZmFjZSktPnN0eWxlX2ZsYWdzJkZUX1NUWUxFX0ZMQUdfSVRBTElDKQ0KLSNkZWZpbmUgRlhGVF9Jc19GYWNlX0JvbGQoZmFjZSkgKCgoRlRfRmFjZSlmYWNlKS0+c3R5bGVfZmxhZ3MmRlRfU1RZTEVfRkxBR19CT0xEKQ0KLSNkZWZpbmUgRlhGVF9HZXRfRmFjZV9DaGFybWFwcyhmYWNlKSAoKEZUX0ZhY2UpZmFjZSktPmNoYXJtYXBzDQotI2RlZmluZSBGWEZUX0dldF9HbHlwaF9Ib3JpQmVhcmluZ1goZmFjZSkgKChGVF9GYWNlKWZhY2UpLT5nbHlwaC0+bWV0cmljcy5ob3JpQmVhcmluZ1gNCi0jZGVmaW5lIEZYRlRfR2V0X0dseXBoX0hvcmlCZWFyaW5nWShmYWNlKSAoKEZUX0ZhY2UpZmFjZSktPmdseXBoLT5tZXRyaWNzLmhvcmlCZWFyaW5nWQ0KLSNkZWZpbmUgRlhGVF9HZXRfR2x5cGhfV2lkdGgoZmFjZSkgKChGVF9GYWNlKWZhY2UpLT5nbHlwaC0+bWV0cmljcy53aWR0aA0KLSNkZWZpbmUgRlhGVF9HZXRfR2x5cGhfSGVpZ2h0KGZhY2UpICgoRlRfRmFjZSlmYWNlKS0+Z2x5cGgtPm1ldHJpY3MuaGVpZ2h0DQotI2RlZmluZSBGWEZUX0dldF9GYWNlX0NoYXJtYXBDb3VudChmYWNlKSAoKEZUX0ZhY2UpZmFjZSktPm51bV9jaGFybWFwcw0KLSNkZWZpbmUgRlhGVF9HZXRfQ2hhcm1hcF9FbmNvZGluZyhjaGFybWFwKSAoKEZUX0NoYXJNYXApY2hhcm1hcCktPmVuY29kaW5nDQotI2RlZmluZSBGWEZUX0dldF9GYWNlX0NoYXJtYXAoZmFjZSkgKChGVF9GYWNlKWZhY2UpLT5jaGFybWFwDQotI2RlZmluZSBGWEZUX0dldF9DaGFybWFwX1BsYXRmb3JtSUQoY2hhcm1hcCkgKChGVF9DaGFyTWFwKWNoYXJtYXApLT5wbGF0Zm9ybV9pZA0KLSNkZWZpbmUgRlhGVF9HZXRfQ2hhcm1hcF9FbmNvZGluZ0lEKGNoYXJtYXApICgoRlRfQ2hhck1hcCljaGFybWFwKS0+ZW5jb2RpbmdfaWQNCi0jZGVmaW5lIEZYRlRfR2V0X0ZhY2VfVW5pdHNQZXJFTShmYWNlKSAoKEZUX0ZhY2UpZmFjZSktPnVuaXRzX3Blcl9FTQ0KLSNkZWZpbmUgRlhGVF9HZXRfRmFjZV94TWluKGZhY2UpICgoRlRfRmFjZSlmYWNlKS0+YmJveC54TWluDQotI2RlZmluZSBGWEZUX0dldF9GYWNlX3hNYXgoZmFjZSkgKChGVF9GYWNlKWZhY2UpLT5iYm94LnhNYXgNCi0jZGVmaW5lIEZYRlRfR2V0X0ZhY2VfeU1pbihmYWNlKSAoKEZUX0ZhY2UpZmFjZSktPmJib3gueU1pbg0KLSNkZWZpbmUgRlhGVF9HZXRfRmFjZV95TWF4KGZhY2UpICgoRlRfRmFjZSlmYWNlKS0+YmJveC55TWF4DQotI2RlZmluZSBGWEZUX0dldF9GYWNlX0hlaWdodChmYWNlKSAoKEZUX0ZhY2UpZmFjZSktPmhlaWdodA0KLSNkZWZpbmUgRlhGVF9HZXRfRmFjZV9VbmRlckxpbmVUaGlja25lc3MoZmFjZSkgKChGVF9GYWNlKWZhY2UpLT51bmRlcmxpbmVfdGhpY2tuZXNzDQotI2RlZmluZSBGWEZUX0dldF9GYWNlX1VuZGVyTGluZVBvc2l0aW9uKGZhY2UpICgoRlRfRmFjZSlmYWNlKS0+dW5kZXJsaW5lX3Bvc2l0aW9uDQotI2RlZmluZSBGWEZUX0dldF9GYWNlX01heEFkdmFuY2VXaWR0aChmYWNlKSAoKEZUX0ZhY2UpZmFjZSktPm1heF9hZHZhbmNlX3dpZHRoDQotI2RlZmluZSBGWEZUX0dldF9GYWNlX0FzY2VuZGVyKGZhY2UpICgoRlRfRmFjZSlmYWNlKS0+YXNjZW5kZXINCi0jZGVmaW5lIEZYRlRfR2V0X0ZhY2VfRGVzY2VuZGVyKGZhY2UpICgoRlRfRmFjZSlmYWNlKS0+ZGVzY2VuZGVyDQotI2RlZmluZSBGWEZUX0dldF9HbHlwaF9Ib3JpQWR2YW5jZShmYWNlKSAoKEZUX0ZhY2UpZmFjZSktPmdseXBoLT5tZXRyaWNzLmhvcmlBZHZhbmNlDQotI2RlZmluZSBGWEZUX0dldF9NTV9BeGlzKHZhciwgaW5kZXgpICYoKEZUX01NX1ZhciopdmFyKS0+YXhpc1tpbmRleF0NCi0jZGVmaW5lIEZYRlRfR2V0X01NX0F4aXNfTWluKGF4aXMpICgoRlRfVmFyX0F4aXMqKWF4aXMpLT5taW5pbXVtDQotI2RlZmluZSBGWEZUX0dldF9NTV9BeGlzX01heChheGlzKSAoKEZUX1Zhcl9BeGlzKilheGlzKS0+bWF4aW11bQ0KLSNkZWZpbmUgRlhGVF9HZXRfTU1fQXhpc19EZWYoYXhpcykgKChGVF9WYXJfQXhpcyopYXhpcyktPmRlZg0KLSNkZWZpbmUgRlhGVF9HZXRfRmFjZV9JbnRlcm5hbF9GbGFnKGZhY2UpICgoRlRfRmFjZSlmYWNlKS0+aW50ZXJuYWwtPnRyYW5zZm9ybV9mbGFncw0KLSNkZWZpbmUgRlhGVF9TZXRfRmFjZV9JbnRlcm5hbF9GbGFnKGZhY2UsIGZsYWcpICgoKEZUX0ZhY2UpZmFjZSktPmludGVybmFsLT50cmFuc2Zvcm1fZmxhZ3MgPSBmbGFnKQ0KLSNkZWZpbmUgRlhGVF9BbGxvYyhsaWJyYXJ5LCBzaXplKSAoKEZUX0xpYnJhcnkpbGlicmFyeSktPm1lbW9yeS0+YWxsb2MoKChGVF9MaWJyYXJ5KWxpYnJhcnkpLT5tZW1vcnksIHNpemUpDQotI2RlZmluZSBGWEZUX0ZyZWUoZmFjZSwgcCkgKChGVF9GYWNlKWZhY2UpLT5tZW1vcnktPmZyZWUoKChGVF9GYWNlKWZhY2UpLT5tZW1vcnksIHApDQotI2RlZmluZSBGWEZUX0dldF9HbHlwaF9PdXRsaW5lKGZhY2UpICYoKEZUX0ZhY2UpZmFjZSktPmdseXBoLT5vdXRsaW5lDQotI2RlZmluZSBGWEZUX0dldF9PdXRsaW5lX0Jib3gob3V0bGluZSwgY2JveCkgIEZUX091dGxpbmVfR2V0X0NCb3gob3V0bGluZSwgY2JveCkNCi0jZGVmaW5lIEZYRlRfUmVuZGVyX0dseXBoKGZhY2UsIG1vZGUpIEZUX1JlbmRlcl9HbHlwaCgoKEZUX0ZhY2UpZmFjZSktPmdseXBoLCAoZW51bSBGVF9SZW5kZXJfTW9kZV8pbW9kZSkNCi0jZGVmaW5lIEZYRlRfR2V0X01NX1ZhcihmYWNlLCBwKSBGVF9HZXRfTU1fVmFyKChGVF9GYWNlKWZhY2UsIHApDQotI2RlZmluZSBGWEZUX1NldF9NTV9EZXNpZ25fQ29vcmRpbmF0ZXMoZmFjZSwgbiwgcCkgRlRfU2V0X01NX0Rlc2lnbl9Db29yZGluYXRlcygoRlRfRmFjZSlmYWNlLCBuLCBwKQ0KLSNkZWZpbmUgRlhGVF9TZXRfUGl4ZWxfU2l6ZXMoZmFjZSwgdywgaCkgRlRfU2V0X1BpeGVsX1NpemVzKChGVF9GYWNlKWZhY2UsIHcsIGgpDQotI2RlZmluZSBGWEZUX1NldF9UcmFuc2Zvcm0oZmFjZSwgbSwgZCkgRlRfU2V0X1RyYW5zZm9ybSgoRlRfRmFjZSlmYWNlLCBtLCBkKQ0KLSNkZWZpbmUgRlhGVF9PdXRsaW5lX0VtYm9sZGVuKG91dGxpbmUsIHMpIEZUX091dGxpbmVfRW1ib2xkZW4ob3V0bGluZSwgcykNCi0jZGVmaW5lIEZYRlRfR2V0X0dseXBoX0JpdG1hcChmYWNlKSAmKChGVF9GYWNlKWZhY2UpLT5nbHlwaC0+Yml0bWFwDQotI2RlZmluZSBGWEZUX0dldF9CaXRtYXBfV2lkdGgoYml0bWFwKSAoKEZUX0JpdG1hcCopYml0bWFwKS0+d2lkdGgNCi0jZGVmaW5lIEZYRlRfR2V0X0JpdG1hcF9Sb3dzKGJpdG1hcCkgKChGVF9CaXRtYXAqKWJpdG1hcCktPnJvd3MNCi0jZGVmaW5lIEZYRlRfR2V0X0JpdG1hcF9QaXhlbE1vZGUoYml0bWFwKSAoKEZUX0JpdG1hcCopYml0bWFwKS0+cGl4ZWxfbW9kZQ0KLSNkZWZpbmUgRlhGVF9HZXRfQml0bWFwX1BpdGNoKGJpdG1hcCkgKChGVF9CaXRtYXAqKWJpdG1hcCktPnBpdGNoDQotI2RlZmluZSBGWEZUX0dldF9CaXRtYXBfQnVmZmVyKGJpdG1hcCkgKChGVF9CaXRtYXAqKWJpdG1hcCktPmJ1ZmZlcg0KLSNkZWZpbmUgRlhGVF9HZXRfR2x5cGhfQml0bWFwTGVmdChmYWNlKSAoKEZUX0ZhY2UpZmFjZSktPmdseXBoLT5iaXRtYXBfbGVmdA0KLSNkZWZpbmUgRlhGVF9HZXRfR2x5cGhfQml0bWFwVG9wKGZhY2UpICgoRlRfRmFjZSlmYWNlKS0+Z2x5cGgtPmJpdG1hcF90b3ANCi0jZGVmaW5lIEZYRlRfT3V0bGluZV9EZWNvbXBvc2Uob3V0bGluZSwgZnVuY3MsIHBhcmFtcykgRlRfT3V0bGluZV9EZWNvbXBvc2Uob3V0bGluZSwgZnVuY3MsIHBhcmFtcykNCi0jZGVmaW5lIEZYRlRfU2V0X0NoYXJfU2l6ZShmYWNlLCBjaGFyX3dpZHRoLCBjaGFyX2hlaWdodCwgaG9yel9yZXNvbHV0aW9uLCB2ZXJ0X3Jlc29sdXRpb24pIEZUX1NldF9DaGFyX1NpemUoZmFjZSwgY2hhcl93aWR0aCwgY2hhcl9oZWlnaHQsIGhvcnpfcmVzb2x1dGlvbiwgdmVydF9yZXNvbHV0aW9uKQ0KLSNkZWZpbmUgRlhGVF9HZXRfR2x5cGgoc2xvdCwgYWdseXBoKSBGVF9HZXRfR2x5cGgoc2xvdCwgYWdseXBoKQ0KLSNkZWZpbmUgRlhGVF9HbHlwaF9HZXRfQ0JveChnbHlwaCwgYmJveF9tb2RlLCBhY2JveCkgRlRfR2x5cGhfR2V0X0NCb3goZ2x5cGgsIGJib3hfbW9kZSwgYWNib3gpDQotI2RlZmluZSBGWEZUX0RvbmVfR2x5cGgoZ2x5cGgpCUZUX0RvbmVfR2x5cGgoZ2x5cGgpDQotI2RlZmluZSBGWEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyKGxpYnJhcnksIGZpbHRlcikgRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIoKEZUX0xpYnJhcnkpKGxpYnJhcnkpLCBmaWx0ZXIpDQotaW50IEZYRlRfdW5pY29kZV9mcm9tX2Fkb2JlX25hbWUoY29uc3QgY2hhciogbmFtZSk7DQotdm9pZCBGWEZUX2Fkb2JlX25hbWVfZnJvbV91bmljb2RlKGNoYXIqIG5hbWUsIHVuc2lnbmVkIGludCB1bmljb2RlKTsNCi0jaWZkZWYgX19jcGx1c3BsdXMNCi19Ow0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi90aGlyZHBhcnRpZXMvZnJlZXR5cGUvZnQyYnVpbGQuaCIKKyNpbmNsdWRlICIuLi90aGlyZHBhcnRpZXMvZnJlZXR5cGUvZnJlZXR5cGUvZnJlZXR5cGUuaCIKKyNpbmNsdWRlICIuLi90aGlyZHBhcnRpZXMvZnJlZXR5cGUvZnJlZXR5cGUvZnRvdXRsbi5oIgorI2luY2x1ZGUgIi4uL3RoaXJkcGFydGllcy9mcmVldHlwZS9mcmVldHlwZS9mdG1tLmgiCisjaW5jbHVkZSAiLi4vdGhpcmRwYXJ0aWVzL2ZyZWV0eXBlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIgorI2luY2x1ZGUgIi4uL3RoaXJkcGFydGllcy9mcmVldHlwZS9mcmVldHlwZS90dHRhYmxlcy5oIgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorI2RlZmluZSBGWEZUX0VOQ09ESU5HX1VOSUNPREUgRlRfRU5DT0RJTkdfVU5JQ09ERQorI2RlZmluZSBGWEZUX0VOQ09ESU5HX0FET0JFX1NUQU5EQVJEIEZUX0VOQ09ESU5HX0FET0JFX1NUQU5EQVJECisjZGVmaW5lIEZYRlRfRU5DT0RJTkdfQURPQkVfRVhQRVJUIEZUX0VOQ09ESU5HX0FET0JFX0VYUEVSVAorI2RlZmluZSBGWEZUX0VOQ09ESU5HX0FET0JFX0xBVElOXzEgRlRfRU5DT0RJTkdfQURPQkVfTEFUSU5fMQorI2RlZmluZSBGWEZUX0VOQ09ESU5HX0FQUExFX1JPTUFOIEZUX0VOQ09ESU5HX0FQUExFX1JPTUFOCisjZGVmaW5lIEZYRlRfRU5DT0RJTkdfQURPQkVfQ1VTVE9NIEZUX0VOQ09ESU5HX0FET0JFX0NVU1RPTQorI2RlZmluZSBGWEZUX0VOQ09ESU5HX01TX1NZTUJPTCBGVF9FTkNPRElOR19NU19TWU1CT0wKKyNkZWZpbmUgRlhGVF9FTkNPRElOR19HQjIzMTIgRlRfRU5DT0RJTkdfR0IyMzEyCisjZGVmaW5lIEZYRlRfRU5DT0RJTkdfQklHNSBGVF9FTkNPRElOR19CSUc1CisjZGVmaW5lIEZYRlRfRU5DT0RJTkdfU0pJUyBGVF9FTkNPRElOR19TSklTCisjZGVmaW5lIEZYRlRfRU5DT0RJTkdfSk9IQUIgRlRfRU5DT0RJTkdfSk9IQUIKKyNkZWZpbmUgRlhGVF9FTkNPRElOR19XQU5TVU5HIEZUX0VOQ09ESU5HX1dBTlNVTkcKKyNkZWZpbmUgRlhGVF9MT0FEX05PX1NDQUxFIEZUX0xPQURfTk9fU0NBTEUKKyNkZWZpbmUgRlhGVF9MT0FEX0lHTk9SRV9HTE9CQUxfQURWQU5DRV9XSURUSCBGVF9MT0FEX0lHTk9SRV9HTE9CQUxfQURWQU5DRV9XSURUSAorI2RlZmluZSBGWEZUX1JFTkRFUl9NT0RFX0xDRCBGVF9SRU5ERVJfTU9ERV9MQ0QKKyNkZWZpbmUgRlhGVF9SRU5ERVJfTU9ERV9NT05PIEZUX1JFTkRFUl9NT0RFX01PTk8KKyNkZWZpbmUgRlhGVF9SRU5ERVJfTU9ERV9OT1JNQUwgRlRfUkVOREVSX01PREVfTk9STUFMCisjZGVmaW5lIEZYRlRfTE9BRF9JR05PUkVfVFJBTlNGT1JNIEZUX0xPQURfSUdOT1JFX1RSQU5TRk9STQorI2RlZmluZSBGWEZUX0xPQURfTk9fQklUTUFQIEZUX0xPQURfTk9fQklUTUFQCisjZGVmaW5lIEZYRlRfTE9BRF9OT19ISU5USU5HIEZUX0xPQURfTk9fSElOVElORworI2RlZmluZSBGWEZUX1BJWEVMX01PREVfTU9OTyBGVF9QSVhFTF9NT0RFX01PTk8KKyNkZWZpbmUgRlhGVF9TVFlMRV9GTEFHX0lUQUxJQyBGVF9TVFlMRV9GTEFHX0lUQUxJQworI2RlZmluZSBGWEZUX1NUWUxFX0ZMQUdfQk9MRCBGVF9TVFlMRV9GTEFHX0JPTEQKKyNkZWZpbmUgRlhGVF9GQUNFX0ZMQUdfU0ZOVCBGVF9GQUNFX0ZMQUdfU0ZOVAorI2RlZmluZSBGWEZUX0ZBQ0VfRkxBR19UUklDS1kgKCAxTCA8PCAxMyApCit0eXBlZGVmIEZUX01NX1ZhcioJCUZYRlRfTU1fVmFyOwordHlwZWRlZiBGVF9CaXRtYXAqCQlGWEZUX0JpdG1hcDsKKyNkZWZpbmUgRlhGVF9NYXRyaXgJCUZUX01hdHJpeAorI2RlZmluZSBGWEZUX1ZlY3RvcgkJRlRfVmVjdG9yCisjZGVmaW5lIEZYRlRfT3V0bGluZV9GdW5jcyBGVF9PdXRsaW5lX0Z1bmNzCit0eXBlZGVmIEZUX09wZW5fQXJncwlGWEZUX09wZW5fQXJnczsKK3R5cGVkZWYgRlRfU3RyZWFtUmVjCUZYRlRfU3RyZWFtUmVjOwordHlwZWRlZiBGVF9TdHJlYW1SZWMqCUZYRlRfU3RyZWFtOwordHlwZWRlZiBGVF9CQm94CQkJRlhGVF9CQm94OwordHlwZWRlZiBGVF9HbHlwaAkJRlhGVF9HbHlwaDsKK3R5cGVkZWYgRlRfQ2hhck1hcAkJRlhGVF9DaGFyTWFwOworI2RlZmluZSBGWEZUX0dMWVBIX0JCT1hfUElYRUxTCUZUX0dMWVBIX0JCT1hfUElYRUxTCisjZGVmaW5lIEZYRlRfT3Blbl9GYWNlKGxpYnJhcnksIGFyZ3MsIGluZGV4LCBmYWNlKSBcCisgICAgRlRfT3Blbl9GYWNlKChGVF9MaWJyYXJ5KShsaWJyYXJ5KSwgYXJncywgaW5kZXgsIChGVF9GYWNlKikoZmFjZSkpCisjZGVmaW5lIEZYRlRfRG9uZV9GYWNlKGZhY2UpIEZUX0RvbmVfRmFjZSgoRlRfRmFjZSkoZmFjZSkpCisjZGVmaW5lIEZYRlRfRG9uZV9GcmVlVHlwZShsaWJyYXJ5KSBGVF9Eb25lX0ZyZWVUeXBlKChGVF9MaWJyYXJ5KShsaWJyYXJ5KSkKKyNkZWZpbmUgRlhGVF9Jbml0X0ZyZWVUeXBlKGxpYnJhcnkpIEZUX0luaXRfRnJlZVR5cGUoKEZUX0xpYnJhcnkqKShsaWJyYXJ5KSkKKyNkZWZpbmUgRlhGVF9OZXdfTWVtb3J5X0ZhY2UobGlicmFyeSwgYmFzZSwgc2l6ZSwgaW5kZXgsIGZhY2UpIFwKKyAgICBGVF9OZXdfTWVtb3J5X0ZhY2UoKEZUX0xpYnJhcnkpKGxpYnJhcnkpLCBiYXNlLCBzaXplLCBpbmRleCwgKEZUX0ZhY2UqKShmYWNlKSkKKyNkZWZpbmUgRlhGVF9OZXdfRmFjZShsaWJyYXJ5LCBmaWxlbmFtZSwgaW5kZXgsIGZhY2UpIFwKKyAgICBGVF9OZXdfRmFjZSgoRlRfTGlicmFyeSkobGlicmFyeSksIGZpbGVuYW1lLCBpbmRleCwgKEZUX0ZhY2UqKShmYWNlKSkKKyNkZWZpbmUgRlhGVF9HZXRfRmFjZV9GcmVlVHlwZShmYWNlKSAoKEZUX0ZhY2UpZmFjZSktPmRyaXZlci0+cm9vdC5saWJyYXJ5CisjZGVmaW5lIEZYRlRfU2VsZWN0X0NoYXJtYXAoZmFjZSwgZW5jb2RpbmcpIEZUX1NlbGVjdF9DaGFybWFwKChGVF9GYWNlKWZhY2UsIChGVF9FbmNvZGluZyllbmNvZGluZykKKyNkZWZpbmUgRlhGVF9TZXRfQ2hhcm1hcChmYWNlLCBjaGFybWFwKSBGVF9TZXRfQ2hhcm1hcCgoRlRfRmFjZSlmYWNlLCAoRlRfQ2hhck1hcCljaGFybWFwKQorI2RlZmluZSBGWEZUX0xvYWRfR2x5cGgoZmFjZSwgZ2x5cGhfaW5kZXgsIGZsYWdzKSBGVF9Mb2FkX0dseXBoKChGVF9GYWNlKWZhY2UsIGdseXBoX2luZGV4LCBmbGFncykKKyNkZWZpbmUgRlhGVF9HZXRfQ2hhcl9JbmRleChmYWNlLCBjb2RlKSBGVF9HZXRfQ2hhcl9JbmRleCgoRlRfRmFjZSlmYWNlLCBjb2RlKQorI2RlZmluZSBGWEZUX0dldF9HbHlwaF9OYW1lKGZhY2UsIGluZGV4LCBidWZmZXIsIHNpemUpIEZUX0dldF9HbHlwaF9OYW1lKChGVF9GYWNlKWZhY2UsIGluZGV4LCBidWZmZXIsIHNpemUpCisjZGVmaW5lIEZYRlRfR2V0X05hbWVfSW5kZXgoZmFjZSwgbmFtZSkgRlRfR2V0X05hbWVfSW5kZXgoKEZUX0ZhY2UpZmFjZSwgbmFtZSkKKyNkZWZpbmUgRlhGVF9IYXNfR2x5cGhfTmFtZXMoZmFjZSkgICgoKEZUX0ZhY2UpZmFjZSktPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfR0xZUEhfTkFNRVMpCisjZGVmaW5lIEZYRlRfR2V0X1Bvc3RzY3JpcHRfTmFtZShmYWNlKSBGVF9HZXRfUG9zdHNjcmlwdF9OYW1lKChGVF9GYWNlKWZhY2UpCisjZGVmaW5lIEZYRlRfTG9hZF9TZm50X1RhYmxlKGZhY2UsIHRhZywgb2Zmc2V0LCBidWZmZXIsIGxlbmd0aCkgXAorICAgIEZUX0xvYWRfU2ZudF9UYWJsZSgoRlRfRmFjZSlmYWNlLCB0YWcsIG9mZnNldCwgYnVmZmVyLCBsZW5ndGgpCisjZGVmaW5lIEZYRlRfR2V0X0ZpcnN0X0NoYXIoZmFjZSwgZ2x5cGhfaW5kZXgpIEZUX0dldF9GaXJzdF9DaGFyKChGVF9GYWNlKWZhY2UsIGdseXBoX2luZGV4KQorI2RlZmluZSBGWEZUX0dldF9OZXh0X0NoYXIoZmFjZSwgY29kZSwgZ2x5cGhfaW5kZXgpIEZUX0dldF9OZXh0X0NoYXIoKEZUX0ZhY2UpZmFjZSwgY29kZSwgZ2x5cGhfaW5kZXgpCisjZGVmaW5lIEZYRlRfQ2xlYXJfRmFjZV9FeHRlcm5hbF9TdHJlYW0oZmFjZSkgKCgoRlRfRmFjZSlmYWNlKS0+ZmFjZV9mbGFncyY9fkZUX0ZBQ0VfRkxBR19FWFRFUk5BTF9TVFJFQU0pCisjZGVmaW5lIEZYRlRfR2V0X0ZhY2VfRXh0ZXJuYWxfU3RyZWFtKGZhY2UpICgoKEZUX0ZhY2UpZmFjZSktPmZhY2VfZmxhZ3MmRlRfRkFDRV9GTEFHX0VYVEVSTkFMX1NUUkVBTSkKKyNkZWZpbmUgRlhGVF9Jc19GYWNlX1RUX09UKGZhY2UpICgoKEZUX0ZhY2UpZmFjZSktPmZhY2VfZmxhZ3MmRlRfRkFDRV9GTEFHX1NGTlQpCisjZGVmaW5lIEZYRlRfSXNfRmFjZV9Ucmlja3koZmFjZSkgKCgoRlRfRmFjZSlmYWNlKS0+ZmFjZV9mbGFncyZGWEZUX0ZBQ0VfRkxBR19UUklDS1kpCisjZGVmaW5lIEZYRlRfSXNfRmFjZV9maXhlZHdpZHRoKGZhY2UpICgoKEZUX0ZhY2UpZmFjZSktPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfRklYRURfV0lEVEgpCisjZGVmaW5lIEZYRlRfR2V0X0ZhY2VfU3RyZWFtX0Jhc2UoZmFjZSkgKChGVF9GYWNlKWZhY2UpLT5zdHJlYW0tPmJhc2UKKyNkZWZpbmUgRlhGVF9HZXRfRmFjZV9TdHJlYW1fU2l6ZShmYWNlKSAoKEZUX0ZhY2UpZmFjZSktPnN0cmVhbS0+c2l6ZQorI2RlZmluZSBGWEZUX0dldF9GYWNlX0ZhbWlseV9OYW1lKGZhY2UpICgoRlRfRmFjZSlmYWNlKS0+ZmFtaWx5X25hbWUKKyNkZWZpbmUgRlhGVF9HZXRfRmFjZV9TdHlsZV9OYW1lKGZhY2UpICgoRlRfRmFjZSlmYWNlKS0+c3R5bGVfbmFtZQorI2RlZmluZSBGWEZUX0dldF9GYWNlX051bWZhY2VzKGZhY2UpICgoRlRfRmFjZSlmYWNlKS0+bnVtX2ZhY2VzCisjZGVmaW5lIEZYRlRfR2V0X0ZhY2VfRmFjZWluZGV4KGZhY2UpICgoRlRfRmFjZSlmYWNlKS0+ZmFjZV9pbmRleAorI2RlZmluZSBGWEZUX0lzX0ZhY2VfSXRhbGljKGZhY2UpICgoKEZUX0ZhY2UpZmFjZSktPnN0eWxlX2ZsYWdzJkZUX1NUWUxFX0ZMQUdfSVRBTElDKQorI2RlZmluZSBGWEZUX0lzX0ZhY2VfQm9sZChmYWNlKSAoKChGVF9GYWNlKWZhY2UpLT5zdHlsZV9mbGFncyZGVF9TVFlMRV9GTEFHX0JPTEQpCisjZGVmaW5lIEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcHMoZmFjZSkgKChGVF9GYWNlKWZhY2UpLT5jaGFybWFwcworI2RlZmluZSBGWEZUX0dldF9HbHlwaF9Ib3JpQmVhcmluZ1goZmFjZSkgKChGVF9GYWNlKWZhY2UpLT5nbHlwaC0+bWV0cmljcy5ob3JpQmVhcmluZ1gKKyNkZWZpbmUgRlhGVF9HZXRfR2x5cGhfSG9yaUJlYXJpbmdZKGZhY2UpICgoRlRfRmFjZSlmYWNlKS0+Z2x5cGgtPm1ldHJpY3MuaG9yaUJlYXJpbmdZCisjZGVmaW5lIEZYRlRfR2V0X0dseXBoX1dpZHRoKGZhY2UpICgoRlRfRmFjZSlmYWNlKS0+Z2x5cGgtPm1ldHJpY3Mud2lkdGgKKyNkZWZpbmUgRlhGVF9HZXRfR2x5cGhfSGVpZ2h0KGZhY2UpICgoRlRfRmFjZSlmYWNlKS0+Z2x5cGgtPm1ldHJpY3MuaGVpZ2h0CisjZGVmaW5lIEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcENvdW50KGZhY2UpICgoRlRfRmFjZSlmYWNlKS0+bnVtX2NoYXJtYXBzCisjZGVmaW5lIEZYRlRfR2V0X0NoYXJtYXBfRW5jb2RpbmcoY2hhcm1hcCkgKChGVF9DaGFyTWFwKWNoYXJtYXApLT5lbmNvZGluZworI2RlZmluZSBGWEZUX0dldF9GYWNlX0NoYXJtYXAoZmFjZSkgKChGVF9GYWNlKWZhY2UpLT5jaGFybWFwCisjZGVmaW5lIEZYRlRfR2V0X0NoYXJtYXBfUGxhdGZvcm1JRChjaGFybWFwKSAoKEZUX0NoYXJNYXApY2hhcm1hcCktPnBsYXRmb3JtX2lkCisjZGVmaW5lIEZYRlRfR2V0X0NoYXJtYXBfRW5jb2RpbmdJRChjaGFybWFwKSAoKEZUX0NoYXJNYXApY2hhcm1hcCktPmVuY29kaW5nX2lkCisjZGVmaW5lIEZYRlRfR2V0X0ZhY2VfVW5pdHNQZXJFTShmYWNlKSAoKEZUX0ZhY2UpZmFjZSktPnVuaXRzX3Blcl9FTQorI2RlZmluZSBGWEZUX0dldF9GYWNlX3hNaW4oZmFjZSkgKChGVF9GYWNlKWZhY2UpLT5iYm94LnhNaW4KKyNkZWZpbmUgRlhGVF9HZXRfRmFjZV94TWF4KGZhY2UpICgoRlRfRmFjZSlmYWNlKS0+YmJveC54TWF4CisjZGVmaW5lIEZYRlRfR2V0X0ZhY2VfeU1pbihmYWNlKSAoKEZUX0ZhY2UpZmFjZSktPmJib3gueU1pbgorI2RlZmluZSBGWEZUX0dldF9GYWNlX3lNYXgoZmFjZSkgKChGVF9GYWNlKWZhY2UpLT5iYm94LnlNYXgKKyNkZWZpbmUgRlhGVF9HZXRfRmFjZV9IZWlnaHQoZmFjZSkgKChGVF9GYWNlKWZhY2UpLT5oZWlnaHQKKyNkZWZpbmUgRlhGVF9HZXRfRmFjZV9VbmRlckxpbmVUaGlja25lc3MoZmFjZSkgKChGVF9GYWNlKWZhY2UpLT51bmRlcmxpbmVfdGhpY2tuZXNzCisjZGVmaW5lIEZYRlRfR2V0X0ZhY2VfVW5kZXJMaW5lUG9zaXRpb24oZmFjZSkgKChGVF9GYWNlKWZhY2UpLT51bmRlcmxpbmVfcG9zaXRpb24KKyNkZWZpbmUgRlhGVF9HZXRfRmFjZV9NYXhBZHZhbmNlV2lkdGgoZmFjZSkgKChGVF9GYWNlKWZhY2UpLT5tYXhfYWR2YW5jZV93aWR0aAorI2RlZmluZSBGWEZUX0dldF9GYWNlX0FzY2VuZGVyKGZhY2UpICgoRlRfRmFjZSlmYWNlKS0+YXNjZW5kZXIKKyNkZWZpbmUgRlhGVF9HZXRfRmFjZV9EZXNjZW5kZXIoZmFjZSkgKChGVF9GYWNlKWZhY2UpLT5kZXNjZW5kZXIKKyNkZWZpbmUgRlhGVF9HZXRfR2x5cGhfSG9yaUFkdmFuY2UoZmFjZSkgKChGVF9GYWNlKWZhY2UpLT5nbHlwaC0+bWV0cmljcy5ob3JpQWR2YW5jZQorI2RlZmluZSBGWEZUX0dldF9NTV9BeGlzKHZhciwgaW5kZXgpICYoKEZUX01NX1ZhciopdmFyKS0+YXhpc1tpbmRleF0KKyNkZWZpbmUgRlhGVF9HZXRfTU1fQXhpc19NaW4oYXhpcykgKChGVF9WYXJfQXhpcyopYXhpcyktPm1pbmltdW0KKyNkZWZpbmUgRlhGVF9HZXRfTU1fQXhpc19NYXgoYXhpcykgKChGVF9WYXJfQXhpcyopYXhpcyktPm1heGltdW0KKyNkZWZpbmUgRlhGVF9HZXRfTU1fQXhpc19EZWYoYXhpcykgKChGVF9WYXJfQXhpcyopYXhpcyktPmRlZgorI2RlZmluZSBGWEZUX0dldF9GYWNlX0ludGVybmFsX0ZsYWcoZmFjZSkgKChGVF9GYWNlKWZhY2UpLT5pbnRlcm5hbC0+dHJhbnNmb3JtX2ZsYWdzCisjZGVmaW5lIEZYRlRfU2V0X0ZhY2VfSW50ZXJuYWxfRmxhZyhmYWNlLCBmbGFnKSAoKChGVF9GYWNlKWZhY2UpLT5pbnRlcm5hbC0+dHJhbnNmb3JtX2ZsYWdzID0gZmxhZykKKyNkZWZpbmUgRlhGVF9BbGxvYyhsaWJyYXJ5LCBzaXplKSAoKEZUX0xpYnJhcnkpbGlicmFyeSktPm1lbW9yeS0+YWxsb2MoKChGVF9MaWJyYXJ5KWxpYnJhcnkpLT5tZW1vcnksIHNpemUpCisjZGVmaW5lIEZYRlRfRnJlZShmYWNlLCBwKSAoKEZUX0ZhY2UpZmFjZSktPm1lbW9yeS0+ZnJlZSgoKEZUX0ZhY2UpZmFjZSktPm1lbW9yeSwgcCkKKyNkZWZpbmUgRlhGVF9HZXRfR2x5cGhfT3V0bGluZShmYWNlKSAmKChGVF9GYWNlKWZhY2UpLT5nbHlwaC0+b3V0bGluZQorI2RlZmluZSBGWEZUX0dldF9PdXRsaW5lX0Jib3gob3V0bGluZSwgY2JveCkgIEZUX091dGxpbmVfR2V0X0NCb3gob3V0bGluZSwgY2JveCkKKyNkZWZpbmUgRlhGVF9SZW5kZXJfR2x5cGgoZmFjZSwgbW9kZSkgRlRfUmVuZGVyX0dseXBoKCgoRlRfRmFjZSlmYWNlKS0+Z2x5cGgsIChlbnVtIEZUX1JlbmRlcl9Nb2RlXyltb2RlKQorI2RlZmluZSBGWEZUX0dldF9NTV9WYXIoZmFjZSwgcCkgRlRfR2V0X01NX1ZhcigoRlRfRmFjZSlmYWNlLCBwKQorI2RlZmluZSBGWEZUX1NldF9NTV9EZXNpZ25fQ29vcmRpbmF0ZXMoZmFjZSwgbiwgcCkgRlRfU2V0X01NX0Rlc2lnbl9Db29yZGluYXRlcygoRlRfRmFjZSlmYWNlLCBuLCBwKQorI2RlZmluZSBGWEZUX1NldF9QaXhlbF9TaXplcyhmYWNlLCB3LCBoKSBGVF9TZXRfUGl4ZWxfU2l6ZXMoKEZUX0ZhY2UpZmFjZSwgdywgaCkKKyNkZWZpbmUgRlhGVF9TZXRfVHJhbnNmb3JtKGZhY2UsIG0sIGQpIEZUX1NldF9UcmFuc2Zvcm0oKEZUX0ZhY2UpZmFjZSwgbSwgZCkKKyNkZWZpbmUgRlhGVF9PdXRsaW5lX0VtYm9sZGVuKG91dGxpbmUsIHMpIEZUX091dGxpbmVfRW1ib2xkZW4ob3V0bGluZSwgcykKKyNkZWZpbmUgRlhGVF9HZXRfR2x5cGhfQml0bWFwKGZhY2UpICYoKEZUX0ZhY2UpZmFjZSktPmdseXBoLT5iaXRtYXAKKyNkZWZpbmUgRlhGVF9HZXRfQml0bWFwX1dpZHRoKGJpdG1hcCkgKChGVF9CaXRtYXAqKWJpdG1hcCktPndpZHRoCisjZGVmaW5lIEZYRlRfR2V0X0JpdG1hcF9Sb3dzKGJpdG1hcCkgKChGVF9CaXRtYXAqKWJpdG1hcCktPnJvd3MKKyNkZWZpbmUgRlhGVF9HZXRfQml0bWFwX1BpeGVsTW9kZShiaXRtYXApICgoRlRfQml0bWFwKiliaXRtYXApLT5waXhlbF9tb2RlCisjZGVmaW5lIEZYRlRfR2V0X0JpdG1hcF9QaXRjaChiaXRtYXApICgoRlRfQml0bWFwKiliaXRtYXApLT5waXRjaAorI2RlZmluZSBGWEZUX0dldF9CaXRtYXBfQnVmZmVyKGJpdG1hcCkgKChGVF9CaXRtYXAqKWJpdG1hcCktPmJ1ZmZlcgorI2RlZmluZSBGWEZUX0dldF9HbHlwaF9CaXRtYXBMZWZ0KGZhY2UpICgoRlRfRmFjZSlmYWNlKS0+Z2x5cGgtPmJpdG1hcF9sZWZ0CisjZGVmaW5lIEZYRlRfR2V0X0dseXBoX0JpdG1hcFRvcChmYWNlKSAoKEZUX0ZhY2UpZmFjZSktPmdseXBoLT5iaXRtYXBfdG9wCisjZGVmaW5lIEZYRlRfT3V0bGluZV9EZWNvbXBvc2Uob3V0bGluZSwgZnVuY3MsIHBhcmFtcykgRlRfT3V0bGluZV9EZWNvbXBvc2Uob3V0bGluZSwgZnVuY3MsIHBhcmFtcykKKyNkZWZpbmUgRlhGVF9TZXRfQ2hhcl9TaXplKGZhY2UsIGNoYXJfd2lkdGgsIGNoYXJfaGVpZ2h0LCBob3J6X3Jlc29sdXRpb24sIHZlcnRfcmVzb2x1dGlvbikgRlRfU2V0X0NoYXJfU2l6ZShmYWNlLCBjaGFyX3dpZHRoLCBjaGFyX2hlaWdodCwgaG9yel9yZXNvbHV0aW9uLCB2ZXJ0X3Jlc29sdXRpb24pCisjZGVmaW5lIEZYRlRfR2V0X0dseXBoKHNsb3QsIGFnbHlwaCkgRlRfR2V0X0dseXBoKHNsb3QsIGFnbHlwaCkKKyNkZWZpbmUgRlhGVF9HbHlwaF9HZXRfQ0JveChnbHlwaCwgYmJveF9tb2RlLCBhY2JveCkgRlRfR2x5cGhfR2V0X0NCb3goZ2x5cGgsIGJib3hfbW9kZSwgYWNib3gpCisjZGVmaW5lIEZYRlRfRG9uZV9HbHlwaChnbHlwaCkJRlRfRG9uZV9HbHlwaChnbHlwaCkKKyNkZWZpbmUgRlhGVF9MaWJyYXJ5X1NldExjZEZpbHRlcihsaWJyYXJ5LCBmaWx0ZXIpIEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyKChGVF9MaWJyYXJ5KShsaWJyYXJ5KSwgZmlsdGVyKQoraW50IEZYRlRfdW5pY29kZV9mcm9tX2Fkb2JlX25hbWUoY29uc3QgY2hhciogbmFtZSk7Cit2b2lkIEZYRlRfYWRvYmVfbmFtZV9mcm9tX3VuaWNvZGUoY2hhciogbmFtZSwgdW5zaWduZWQgaW50IHVuaWNvZGUpOworI2lmZGVmIF9fY3BsdXNwbHVzCit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL2luY2x1ZGUvZnhnZS9meF9nZS5oIGIvY29yZS9pbmNsdWRlL2Z4Z2UvZnhfZ2UuaAppbmRleCBhYjBiZjM1Li44MjcxOWZmIDEwMDY0NAotLS0gYS9jb3JlL2luY2x1ZGUvZnhnZS9meF9nZS5oCisrKyBiL2NvcmUvaW5jbHVkZS9meGdlL2Z4X2dlLmgKQEAgLTEsNzMzICsxLDczMyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlhfR0VfSF8NCi0jZGVmaW5lIF9GWF9HRV9IXw0KLSNpZm5kZWYgX0ZYX0RJQl9IXw0KLSNpbmNsdWRlICJmeF9kaWIuaCINCi0jZW5kaWYNCi0jaWZuZGVmIF9GWF9GT05UX0hfDQotI2luY2x1ZGUgImZ4X2ZvbnQuaCINCi0jZW5kaWYNCi1jbGFzcyBDRlhfQ2xpcFJnbjsNCi1jbGFzcyBDRlhfUGF0aERhdGE7DQotY2xhc3MgQ0ZYX0dyYXBoU3RhdGVEYXRhOw0KLWNsYXNzIENGWF9Gb250Ow0KLWNsYXNzIENGWF9Gb250TWdyOw0KLWNsYXNzIENGWF9Gb250Q2FjaGU7DQotY2xhc3MgQ0ZYX0ZhY2VDYWNoZTsNCi1jbGFzcyBDRlhfUmVuZGVyRGV2aWNlOw0KLWNsYXNzIElGWF9SZW5kZXJEZXZpY2VEcml2ZXI7DQotY2xhc3MgQ0NvZGVjX01vZHVsZU1ncjsNCi1jbGFzcyBJRlhHX1BhaW50TW9kdWxlTWdyOw0KLWNsYXNzIENGWF9HRU1vZHVsZSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgc3RhdGljIHZvaWQJCQkJQ3JlYXRlKCk7DQotDQotICAgIHN0YXRpYyB2b2lkCQkJCVVzZShDRlhfR0VNb2R1bGUqIHBNZ3IpOw0KLQ0KLSAgICBzdGF0aWMgQ0ZYX0dFTW9kdWxlKglHZXQoKTsNCi0NCi0gICAgc3RhdGljIHZvaWQJCQkJRGVzdHJveSgpOw0KLXB1YmxpYzoNCi0NCi0gICAgQ0ZYX0ZvbnRDYWNoZSoJCQlHZXRGb250Q2FjaGUoKTsNCi0gICAgQ0ZYX0ZvbnRNZ3IqCQkJR2V0Rm9udE1ncigpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BGb250TWdyOw0KLSAgICB9DQotICAgIHZvaWQJCQkJCVNldFRleHRHYW1tYShGWF9GTE9BVCBnYW1tYVZhbHVlKTsNCi0gICAgRlhfTFBDQllURQkJCQlHZXRUZXh0R2FtbWFUYWJsZSgpOw0KLSAgICB2b2lkCQkJCQlTZXRFeHRGb250TWFwcGVyKElGWF9Gb250TWFwcGVyKiBwRm9udE1hcHBlcik7DQotDQotICAgIHZvaWQJCQkJCVNldENvZGVjTW9kdWxlKENDb2RlY19Nb2R1bGVNZ3IqIHBDb2RlY01vZHVsZSkNCi0gICAgew0KLSAgICAgICAgbV9wQ29kZWNNb2R1bGUgPSBwQ29kZWNNb2R1bGU7DQotICAgIH0NCi0gICAgQ0NvZGVjX01vZHVsZU1ncioJCUdldENvZGVjTW9kdWxlKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcENvZGVjTW9kdWxlOw0KLSAgICB9DQotICAgIEZYRlRfTGlicmFyeQkJCW1fRlRMaWJyYXJ5Ow0KLSAgICB2b2lkKgkJCQkJR2V0UGxhdGZvcm1EYXRhKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcFBsYXRmb3JtRGF0YTsNCi0gICAgfQ0KLXByb3RlY3RlZDoNCi0NCi0gICAgQ0ZYX0dFTW9kdWxlKCk7DQotDQotICAgIH5DRlhfR0VNb2R1bGUoKTsNCi0gICAgdm9pZAkJCQkJSW5pdFBsYXRmb3JtKCk7DQotICAgIHZvaWQJCQkJCURlc3Ryb3lQbGF0Zm9ybSgpOw0KLXByaXZhdGU6DQotICAgIEZYX0JZVEUJCQkJCW1fR2FtbWFWYWx1ZVsyNTZdOw0KLSAgICBDRlhfRm9udENhY2hlKgkJCW1fcEZvbnRDYWNoZTsNCi0gICAgQ0ZYX0ZvbnRNZ3IqCQkJbV9wRm9udE1ncjsNCi0gICAgQ0NvZGVjX01vZHVsZU1ncioJCW1fcENvZGVjTW9kdWxlOw0KLSAgICB2b2lkKgkJCQkJbV9wUGxhdGZvcm1EYXRhOw0KLX07DQotdHlwZWRlZiBzdHJ1Y3Qgew0KLQ0KLSAgICBGWF9GTE9BVAkJCW1fUG9pbnRYOw0KLQ0KLSAgICBGWF9GTE9BVAkJCW1fUG9pbnRZOw0KLQ0KLSAgICBpbnQJCQkJCW1fRmxhZzsNCi19IEZYX1BBVEhQT0lOVDsNCi0jZGVmaW5lIEZYUFRfQ0xPU0VGSUdVUkUJCTB4MDENCi0jZGVmaW5lIEZYUFRfTElORVRPCQkJCTB4MDINCi0jZGVmaW5lIEZYUFRfQkVaSUVSVE8JCQkweDA0DQotI2RlZmluZSBGWFBUX01PVkVUTwkJCQkweDA2DQotI2RlZmluZSBGWFBUX1RZUEUJCQkJMHgwNg0KLSNkZWZpbmUgRlhGSUxMX0FMVEVSTkFURQkJMQ0KLSNkZWZpbmUgRlhGSUxMX1dJTkRJTkcJCQkyDQotY2xhc3MgQ0ZYX0NsaXBSZ24gOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENGWF9DbGlwUmduKGludCBkZXZpY2Vfd2lkdGgsIGludCBkZXZpY2VfaGVpZ2h0KTsNCi0NCi0gICAgQ0ZYX0NsaXBSZ24oY29uc3QgRlhfUkVDVCYgcmVjdCk7DQotDQotICAgIENGWF9DbGlwUmduKGNvbnN0IENGWF9DbGlwUmduJiBzcmMpOw0KLQ0KLSAgICB+Q0ZYX0NsaXBSZ24oKTsNCi0NCi0gICAgdHlwZWRlZiBlbnVtIHsNCi0gICAgICAgIFJlY3RJLA0KLSAgICAgICAgTWFza0YNCi0gICAgfSBDbGlwVHlwZTsNCi0NCi0gICAgdm9pZAkJCVJlc2V0KGNvbnN0IEZYX1JFQ1QmIHJlY3QpOw0KLQ0KLSAgICBDbGlwVHlwZQkJR2V0VHlwZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX1R5cGU7DQotICAgIH0NCi0NCi0gICAgY29uc3QgRlhfUkVDVCYJR2V0Qm94KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fQm94Ow0KLSAgICB9DQotDQotICAgIENGWF9ESUJpdG1hcFJlZglHZXRNYXNrKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fTWFzazsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJSW50ZXJzZWN0UmVjdChjb25zdCBGWF9SRUNUJiByZWN0KTsNCi0NCi0gICAgdm9pZAkJCUludGVyc2VjdE1hc2tGKGludCBsZWZ0LCBpbnQgdG9wLCBDRlhfRElCaXRtYXBSZWYgTWFzayk7DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBDbGlwVHlwZQkJbV9UeXBlOw0KLQ0KLSAgICBGWF9SRUNUCQkJbV9Cb3g7DQotDQotICAgIENGWF9ESUJpdG1hcFJlZgltX01hc2s7DQotDQotICAgIHZvaWQJCQlJbnRlcnNlY3RNYXNrUmVjdChGWF9SRUNUIHJlY3QsIEZYX1JFQ1QgbWFza19ib3gsIENGWF9ESUJpdG1hcFJlZiBNYXNrKTsNCi19Ow0KLWV4dGVybiBjb25zdCBGWF9CWVRFIGdfR2FtbWFSYW1wWzI1Nl07DQotZXh0ZXJuIGNvbnN0IEZYX0JZVEUgZ19HYW1tYUludmVyc2VbMjU2XTsNCi0jZGVmaW5lIEZYX0dBTU1BKHZhbHVlKQkJCSh2YWx1ZSkNCi0jZGVmaW5lIEZYX0dBTU1BX0lOVkVSU0UodmFsdWUpCSh2YWx1ZSkNCi1pbmxpbmUgRlhfQVJHQiBBcmdiR2FtbWEoRlhfQVJHQiBhcmdiKQ0KLXsNCi0gICAgcmV0dXJuIGFyZ2I7DQotfQ0KLWlubGluZSBGWF9BUkdCIEFyZ2JHYW1tYUludmVyc2UoRlhfQVJHQiBhcmdiKQ0KLXsNCi0gICAgcmV0dXJuIGFyZ2I7DQotfQ0KLWNsYXNzIENGWF9QYXRoRGF0YSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ0ZYX1BhdGhEYXRhKCk7DQotDQotICAgIENGWF9QYXRoRGF0YShjb25zdCBDRlhfUGF0aERhdGEmIHNyYyk7DQotDQotICAgIH5DRlhfUGF0aERhdGEoKTsNCi0NCi0NCi0NCi0NCi0gICAgaW50CQkJCQlHZXRQb2ludENvdW50KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fUG9pbnRDb3VudDsNCi0gICAgfQ0KLQ0KLSAgICBpbnQJCQkJCUdldEZsYWcoaW50IGluZGV4KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wUG9pbnRzW2luZGV4XS5tX0ZsYWc7DQotICAgIH0NCi0NCi0gICAgRlhfRkxPQVQJCQlHZXRQb2ludFgoaW50IGluZGV4KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wUG9pbnRzW2luZGV4XS5tX1BvaW50WDsNCi0gICAgfQ0KLQ0KLSAgICBGWF9GTE9BVAkJCUdldFBvaW50WShpbnQgaW5kZXgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BQb2ludHNbaW5kZXhdLm1fUG9pbnRZOw0KLSAgICB9DQotDQotDQotDQotICAgIEZYX1BBVEhQT0lOVCoJCUdldFBvaW50cygpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BQb2ludHM7DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTAkJCQlTZXRQb2ludENvdW50KGludCBuUG9pbnRzKTsNCi0NCi0gICAgRlhfQk9PTAkJCQlBbGxvY1BvaW50Q291bnQoaW50IG5Qb2ludHMpOw0KLQ0KLSAgICBGWF9CT09MCQkJCUFkZFBvaW50Q291bnQoaW50IGFkZFBvaW50cyk7DQotDQotICAgIENGWF9GbG9hdFJlY3QJCUdldEJvdW5kaW5nQm94KCkgY29uc3Q7DQotDQotICAgIENGWF9GbG9hdFJlY3QJCUdldEJvdW5kaW5nQm94KEZYX0ZMT0FUIGxpbmVfd2lkdGgsIEZYX0ZMT0FUIG1pdGVyX2xpbWl0KSBjb25zdDsNCi0NCi0gICAgdm9pZAkJCQlUcmFuc2Zvcm0oY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCk7DQotDQotICAgIEZYX0JPT0wJCQkJSXNSZWN0KCkgY29uc3Q7DQotDQotICAgIEZYX0JPT0wJCQkJR2V0WmVyb0FyZWFQYXRoKENGWF9QYXRoRGF0YSYgTmV3UGF0aCwgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgRlhfQk9PTCZiVGhpbiwgRlhfQk9PTCBiQWRqdXN0KSBjb25zdDsNCi0NCi0gICAgRlhfQk9PTAkJCQlJc1JlY3QoY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgQ0ZYX0Zsb2F0UmVjdCogcmVjdCkgY29uc3Q7DQotDQotICAgIEZYX0JPT0wJCQkJQXBwZW5kKGNvbnN0IENGWF9QYXRoRGF0YSogcFNyYywgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCk7DQotDQotICAgIEZYX0JPT0wJCQkJQXBwZW5kUmVjdChGWF9GTE9BVCBsZWZ0LCBGWF9GTE9BVCBib3R0b20sIEZYX0ZMT0FUIHJpZ2h0LCBGWF9GTE9BVCB0b3ApOw0KLQ0KLSAgICB2b2lkCQkJCVNldFBvaW50KGludCBpbmRleCwgRlhfRkxPQVQgeCwgRlhfRkxPQVQgeSwgaW50IGZsYWcpOw0KLQ0KLSAgICB2b2lkCQkJCVRyaW1Qb2ludHMoaW50IG5Qb2ludHMpOw0KLQ0KLSAgICBGWF9CT09MCQkJCUNvcHkoY29uc3QgQ0ZYX1BhdGhEYXRhICZzcmMpOw0KLXByb3RlY3RlZDoNCi0gICAgZnJpZW5kIGNsYXNzCQlDUERGX1BhdGg7DQotDQotICAgIGludAkJCQkJbV9Qb2ludENvdW50Ow0KLQ0KLSAgICBGWF9QQVRIUE9JTlQqCQltX3BQb2ludHM7DQotDQotICAgIGludAkJCQkJbV9BbGxvY0NvdW50Ow0KLX07DQotY2xhc3MgQ0ZYX0dyYXBoU3RhdGVEYXRhIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDRlhfR3JhcGhTdGF0ZURhdGEoKTsNCi0NCi0gICAgQ0ZYX0dyYXBoU3RhdGVEYXRhKGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSYgc3JjKTsNCi0NCi0gICAgfkNGWF9HcmFwaFN0YXRlRGF0YSgpOw0KLQ0KLSAgICB2b2lkCQkJCUNvcHkoY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhJiBzcmMpOw0KLQ0KLSAgICB2b2lkCQkJCVNldERhc2hDb3VudChpbnQgY291bnQpOw0KLQ0KLQ0KLQ0KLSAgICB0eXBlZGVmIGVudW0gew0KLSAgICAgICAgTGluZUNhcEJ1dHQgPSAwLA0KLSAgICAgICAgTGluZUNhcFJvdW5kID0gMSwNCi0gICAgICAgIExpbmVDYXBTcXVhcmUgPSAyDQotICAgIH0gTGluZUNhcDsNCi0gICAgTGluZUNhcAkJCQltX0xpbmVDYXA7DQotICAgIGludAkJCQkJbV9EYXNoQ291bnQ7DQotICAgIEZYX0ZMT0FUKgkJbV9EYXNoQXJyYXk7DQotICAgIEZYX0ZMT0FUCQkJbV9EYXNoUGhhc2U7DQotDQotICAgIHR5cGVkZWYgZW51bSB7DQotICAgICAgICBMaW5lSm9pbk1pdGVyID0gMCwNCi0gICAgICAgIExpbmVKb2luUm91bmQgPSAxLA0KLSAgICAgICAgTGluZUpvaW5CZXZlbCA9IDIsDQotICAgIH0gTGluZUpvaW47DQotICAgIExpbmVKb2luCQkJbV9MaW5lSm9pbjsNCi0gICAgRlhfRkxPQVQJCQltX01pdGVyTGltaXQ7DQotICAgIEZYX0ZMT0FUCQkJbV9MaW5lV2lkdGg7DQotDQotfTsNCi0jZGVmaW5lIEZYRENfREVWSUNFX0NMQVNTCQkJMQ0KLSNkZWZpbmUgRlhEQ19QSVhFTF9XSURUSAkJCTINCi0jZGVmaW5lIEZYRENfUElYRUxfSEVJR0hUCQkJMw0KLSNkZWZpbmUgRlhEQ19CSVRTX1BJWEVMCQkJCTQNCi0jZGVmaW5lIEZYRENfSE9SWl9TSVpFCQkJCTUNCi0jZGVmaW5lIEZYRENfVkVSVF9TSVpFCQkJCTYNCi0jZGVmaW5lIEZYRENfUkVOREVSX0NBUFMJCQk3DQotI2RlZmluZSBGWERDX0RJVEhFUl9CSVRTCQkJOA0KLSNkZWZpbmUgRlhEQ19ESVNQTEFZCQkJCTENCi0jZGVmaW5lIEZYRENfUFJJTlRFUgkJCQkyDQotI2RlZmluZSBGWFJDX0dFVF9CSVRTCQkJCTB4MDENCi0jZGVmaW5lIEZYUkNfQklUX01BU0sJCQkJMHgwMg0KLSNkZWZpbmUgRlhSQ19BTFBIQV9NQVNLCQkJCTB4MDQNCi0jZGVmaW5lIEZYUkNfQUxQSEFfUEFUSAkJCQkweDEwDQotI2RlZmluZSBGWFJDX0FMUEhBX0lNQUdFCQkJMHgyMA0KLSNkZWZpbmUgRlhSQ19BTFBIQV9PVVRQVVQJCQkweDQwDQotI2RlZmluZSBGWFJDX0JMRU5EX01PREUJCQkJMHg4MA0KLSNkZWZpbmUgRlhSQ19TT0ZUX0NMSVAJCQkJMHgxMDANCi0jZGVmaW5lIEZYUkNfQ01ZS19PVVRQVVQJCQkweDIwMA0KLSNkZWZpbmUgRlhSQ19CSVRNQVNLX09VVFBVVCAgICAgICAgIDB4NDAwDQotI2RlZmluZSBGWFJDX0JZVEVNQVNLX09VVFBVVCAgICAgICAgMHg4MDANCi0jZGVmaW5lIEZYUkVOREVSX0lNQUdFX0xPU1NZCQkweDEwMDANCi0jZGVmaW5lIEZYRklMTF9BTFRFUk5BVEUJCTENCi0jZGVmaW5lIEZYRklMTF9XSU5ESU5HCQkJMg0KLSNkZWZpbmUgRlhGSUxMX0ZVTExDT1ZFUgkJNA0KLSNkZWZpbmUgRlhGSUxMX1JFQ1RfQUEJCQk4DQotI2RlZmluZSBGWF9GSUxMX1NUUk9LRQkJCTE2DQotI2RlZmluZSBGWF9TVFJPS0VfQURKVVNUCQkzMg0KLSNkZWZpbmUgRlhfU1RST0tFX1RFWFRfTU9ERQkJNjQNCi0jZGVmaW5lIEZYX0ZJTExfVEVYVF9NT0RFCQkxMjgNCi0jZGVmaW5lIEZYX1pFUk9BUkVBX0ZJTEwJCTI1Ng0KLSNkZWZpbmUgRlhGSUxMX05PUEFUSFNNT09USAkJNTEyDQotI2RlZmluZSBGWFRFWFRfQ0xFQVJUWVBFCQkJMHgwMQ0KLSNkZWZpbmUgRlhURVhUX0JHUl9TVFJJUEUJCQkweDAyDQotI2RlZmluZSBGWFRFWFRfUFJJTlRHUkFQSElDVEVYVAkJMHgwNA0KLSNkZWZpbmUgRlhURVhUX05PX05BVElWRVRFWFQJCTB4MDgNCi0jZGVmaW5lIEZYVEVYVF9QUklOVElNQUdFVEVYVAkJMHgxMA0KLSNkZWZpbmUgRlhURVhUX05PU01PT1RICQkJCTB4MjANCi10eXBlZGVmIHN0cnVjdCB7DQotICAgIEZYX0RXT1JECQkJbV9HbHlwaEluZGV4Ow0KLSAgICBGWF9GTE9BVAkJCW1fT3JpZ2luWCwgbV9PcmlnaW5ZOw0KLSAgICBpbnQJCQkJCW1fRm9udENoYXJXaWR0aDsNCi0gICAgRlhfQk9PTAkJCQltX2JHbHlwaEFkanVzdDsNCi0gICAgRlhfRkxPQVQJCQltX0FkanVzdE1hdHJpeFs0XTsNCi0gICAgRlhfRFdPUkQJCQltX0V4dEdJRDsNCi0gICAgRlhfQk9PTAkJCQltX2JGb250U3R5bGU7DQotfSBGWFRFWFRfQ0hBUlBPUzsNCi1jbGFzcyBDRlhfUmVuZGVyRGV2aWNlIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDRlhfUmVuZGVyRGV2aWNlKCk7DQotDQotICAgIHZpcnR1YWwgfkNGWF9SZW5kZXJEZXZpY2UoKTsNCi0NCi0gICAgdm9pZAkJCVNldERldmljZURyaXZlcihJRlhfUmVuZGVyRGV2aWNlRHJpdmVyKiBwRHJpdmVyKTsNCi0NCi0gICAgSUZYX1JlbmRlckRldmljZURyaXZlcioJR2V0RGV2aWNlRHJpdmVyKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcERldmljZURyaXZlcjsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MCQkJU3RhcnRSZW5kZXJpbmcoKTsNCi0NCi0gICAgdm9pZAkJCUVuZFJlbmRlcmluZygpOw0KLQ0KLQ0KLQ0KLSAgICB2b2lkCQkJU2F2ZVN0YXRlKCk7DQotDQotICAgIHZvaWQJCQlSZXN0b3JlU3RhdGUoRlhfQk9PTCBiS2VlcFNhdmVkID0gRkFMU0UpOw0KLQ0KLQ0KLQ0KLQ0KLSAgICBpbnQJCQkJR2V0V2lkdGgoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9XaWR0aDsNCi0gICAgfQ0KLQ0KLSAgICBpbnQJCQkJR2V0SGVpZ2h0KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fSGVpZ2h0Ow0KLSAgICB9DQotDQotICAgIGludAkJCQlHZXREZXZpY2VDbGFzcygpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0RldmljZUNsYXNzOw0KLSAgICB9DQotDQotICAgIGludAkJCQlHZXRCUFAoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9icHA7DQotICAgIH0NCi0NCi0gICAgaW50CQkJCUdldFJlbmRlckNhcHMoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9SZW5kZXJDYXBzOw0KLSAgICB9DQotDQotICAgIGludAkJCQlHZXREZXZpY2VDYXBzKGludCBpZCkgY29uc3Q7DQotDQotICAgIENGWF9NYXRyaXgJCUdldENUTSgpIGNvbnN0Ow0KLQ0KLQ0KLSAgICBDRlhfRElCaXRtYXAqCUdldEJpdG1hcCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BCaXRtYXA7DQotICAgIH0NCi0gICAgdm9pZAkJCVNldEJpdG1hcChDRlhfRElCaXRtYXAqIHBCaXRtYXApDQotICAgIHsNCi0gICAgICAgIG1fcEJpdG1hcCA9IHBCaXRtYXA7DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTAkJCUNyZWF0ZUNvbXBhdGlibGVCaXRtYXAoQ0ZYX0RJQml0bWFwKiBwRElCLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0Ow0KLQ0KLSAgICBjb25zdCBGWF9SRUNUJglHZXRDbGlwQm94KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fQ2xpcEJveDsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MCQkJU2V0Q2xpcF9QYXRoRmlsbChjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWxsX21vZGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KLQ0KLSAgICBGWF9CT09MCQkJU2V0Q2xpcF9SZWN0KGNvbnN0IEZYX1JFQ1QqIHBSZWN0KTsNCi0NCi0gICAgRlhfQk9PTAkJCVNldENsaXBfUGF0aFN0cm9rZShjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkRldmljZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfR3JhcGhTdGF0ZURhdGEqIHBHcmFwaFN0YXRlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KLQ0KLSAgICBGWF9CT09MCQkJRHJhd1BhdGgoY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkRldmljZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBmaWxsX2NvbG9yLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgc3Ryb2tlX2NvbG9yLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpbGxfbW9kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsZW5kX3R5cGUgPSBGWERJQl9CTEVORF9OT1JNQUwNCi0gICAgICAgICAgICAgICAgICAgICAgKTsNCi0NCi0gICAgRlhfQk9PTAkJCVNldFBpeGVsKGludCB4LCBpbnQgeSwgRlhfRFdPUkQgY29sb3IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZyA9IDAsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMKTsNCi0NCi0gICAgRlhfQk9PTAkJCUZpbGxSZWN0KGNvbnN0IEZYX1JFQ1QqIHBSZWN0LCBGWF9EV09SRCBjb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwsIGludCBibGVuZF90eXBlID0gRlhESUJfQkxFTkRfTk9STUFMKTsNCi0NCi0gICAgRlhfQk9PTAkJCURyYXdDb3NtZXRpY0xpbmUoRlhfRkxPQVQgeDEsIEZYX0ZMT0FUIHkxLCBGWF9GTE9BVCB4MiwgRlhfRkxPQVQgeTIsIEZYX0RXT1JEIGNvbG9yLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmlsbF9tb2RlID0gMCwgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCwgaW50IGJsZW5kX3R5cGUgPSBGWERJQl9CTEVORF9OT1JNQUwpOw0KLQ0KLSAgICBGWF9CT09MCQkJR2V0RElCaXRzKENGWF9ESUJpdG1hcCogcEJpdG1hcCwgaW50IGxlZnQsIGludCB0b3AsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMKTsNCi0NCi0gICAgQ0ZYX0RJQml0bWFwKiAgIEdldEJhY2tEcm9wKCk7DQotDQotICAgIEZYX0JPT0wJCQlTZXRESUJpdHMoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwgaW50IGxlZnQsIGludCB0b3AsIGludCBibGVuZF90eXBlID0gRlhESUJfQkxFTkRfTk9STUFMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMKTsNCi0NCi0gICAgRlhfQk9PTAkJCVN0cmV0Y2hESUJpdHMoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwgaW50IGxlZnQsIGludCB0b3AsIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGZsYWdzID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwsIGludCBibGVuZF90eXBlID0gRlhESUJfQkxFTkRfTk9STUFMKTsNCi0NCi0gICAgRlhfQk9PTAkJCVNldEJpdE1hc2soY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwgaW50IGxlZnQsIGludCB0b3AsIEZYX0RXT1JEIGNvbG9yLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZyA9IDAsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMKTsNCi0NCi0gICAgRlhfQk9PTAkJCVN0cmV0Y2hCaXRNYXNrKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgY29sb3IsIEZYX0RXT1JEIGZsYWdzID0gMCwgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCk7DQotDQotICAgIEZYX0JPT0wJCQlTdGFydERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBpbnQgYml0bWFwX2FscGhhLCBGWF9EV09SRCBjb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIEZYX0RXT1JEIGZsYWdzLCBGWF9MUFZPSUQmIGhhbmRsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwsIGludCBibGVuZF90eXBlID0gRlhESUJfQkxFTkRfTk9STUFMKTsNCi0NCi0gICAgRlhfQk9PTAkJCUNvbnRpbnVlRElCaXRzKEZYX0xQVk9JRCBoYW5kbGUsIElGWF9QYXVzZSogcFBhdXNlKTsNCi0NCi0gICAgdm9pZAkJCUNhbmNlbERJQml0cyhGWF9MUFZPSUQgaGFuZGxlKTsNCi0NCi0gICAgRlhfQk9PTAkJCURyYXdOb3JtYWxUZXh0KGludCBuQ2hhcnMsIGNvbnN0IEZYVEVYVF9DSEFSUE9TKiBwQ2hhclBvcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9Gb250KiBwRm9udCwgQ0ZYX0ZvbnRDYWNoZSogcENhY2hlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQgZm9udF9zaXplLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwVGV4dDJEZXZpY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBmaWxsX2NvbG9yLCBGWF9EV09SRCB0ZXh0X2ZsYWdzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCk7DQotDQotICAgIEZYX0JPT0wJCQlEcmF3VGV4dFBhdGgoaW50IG5DaGFycywgY29uc3QgRlhURVhUX0NIQVJQT1MqIHBDaGFyUG9zLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9Gb250KiBwRm9udCwgQ0ZYX0ZvbnRDYWNoZSogcENhY2hlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIGZvbnRfc2l6ZSwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcFRleHQyVXNlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwVXNlcjJEZXZpY2UsIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgZmlsbF9jb2xvciwgRlhfRFdPUkQgc3Ryb2tlX2NvbG9yLCBDRlhfUGF0aERhdGEqIHBDbGlwcGluZ1BhdGgsIGludCBuRmxhZyA9IDAsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCwgaW50IGJsZW5kX3R5cGUgPSBGWERJQl9CTEVORF9OT1JNQUwpOw0KLSAgICB2aXJ0dWFsIHZvaWQgQmVnaW4oKSB7fQ0KLSAgICB2aXJ0dWFsIHZvaWQgRW5kKCkge30NCi1wcml2YXRlOg0KLQ0KLSAgICBDRlhfRElCaXRtYXAqCW1fcEJpdG1hcDsNCi0NCi0NCi0NCi0gICAgaW50CQkJCW1fV2lkdGg7DQotDQotICAgIGludAkJCQltX0hlaWdodDsNCi0NCi0gICAgaW50CQkJCW1fYnBwOw0KLQ0KLSAgICBpbnQJCQkJbV9SZW5kZXJDYXBzOw0KLQ0KLSAgICBpbnQJCQkJbV9EZXZpY2VDbGFzczsNCi0NCi0gICAgRlhfUkVDVAkJCW1fQ2xpcEJveDsNCi0NCi1wcm90ZWN0ZWQ6DQotDQotICAgIElGWF9SZW5kZXJEZXZpY2VEcml2ZXIqCW1fcERldmljZURyaXZlcjsNCi1wcml2YXRlOg0KLQ0KLSAgICB2b2lkCQkJSW5pdERldmljZUluZm8oKTsNCi0NCi0gICAgdm9pZAkJCVVwZGF0ZUNsaXBCb3goKTsNCi19Ow0KLWNsYXNzIENGWF9GeGdlRGV2aWNlIDogcHVibGljIENGWF9SZW5kZXJEZXZpY2UNCi17DQotcHVibGljOg0KLQ0KLSAgICBDRlhfRnhnZURldmljZSgpOw0KLQ0KLSAgICB+Q0ZYX0Z4Z2VEZXZpY2UoKTsNCi0NCi0gICAgRlhfQk9PTAkJCUF0dGFjaChDRlhfRElCaXRtYXAqIHBCaXRtYXAsIGludCBkaXRoZXJfYml0cyA9IDAsIEZYX0JPT0wgYlJnYkJ5dGVPcmRlciA9IEZBTFNFLCBDRlhfRElCaXRtYXAqIHBPcmlEZXZpY2UgPSBOVUxMLCBGWF9CT09MIGJHcm91cEtub2Nrb3V0ID0gRkFMU0UpOw0KLQ0KLSAgICBGWF9CT09MCQkJQ3JlYXRlKGludCB3aWR0aCwgaW50IGhlaWdodCwgRlhESUJfRm9ybWF0IGZvcm1hdCwgaW50IGRpdGhlcl9iaXRzID0gMCwgQ0ZYX0RJQml0bWFwKiBwT3JpRGV2aWNlID0gTlVMTCk7DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBGWF9CT09MCQkJbV9iT3duZWRCaXRtYXA7DQotfTsNCi1jbGFzcyBDRlhfU2tpYURldmljZSA6IHB1YmxpYyBDRlhfUmVuZGVyRGV2aWNlDQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ0ZYX1NraWFEZXZpY2UoKTsNCi0NCi0gICAgfkNGWF9Ta2lhRGV2aWNlKCk7DQotDQotICAgIEZYX0JPT0wJCQlBdHRhY2goQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCBpbnQgZGl0aGVyX2JpdHMgPSAwLCBGWF9CT09MIGJSZ2JCeXRlT3JkZXIgPSBGQUxTRSwgQ0ZYX0RJQml0bWFwKiBwT3JpRGV2aWNlID0gTlVMTCwgRlhfQk9PTCBiR3JvdXBLbm9ja291dCA9IEZBTFNFKTsNCi0NCi0gICAgRlhfQk9PTAkJCUNyZWF0ZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIEZYRElCX0Zvcm1hdCBmb3JtYXQsIGludCBkaXRoZXJfYml0cyA9IDAsIENGWF9ESUJpdG1hcCogcE9yaURldmljZSA9IE5VTEwpOw0KLXByb3RlY3RlZDoNCi0NCi0gICAgRlhfQk9PTAkJCW1fYk93bmVkQml0bWFwOw0KLX07DQotY2xhc3MgSUZYX1JlbmRlckRldmljZURyaXZlciA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgc3RhdGljIElGWF9SZW5kZXJEZXZpY2VEcml2ZXIqCQlDcmVhdGVGeGdlRHJpdmVyKENGWF9ESUJpdG1hcCogcEJpdG1hcCwgRlhfQk9PTCBiUmdiQnl0ZU9yZGVyID0gRkFMU0UsDQotICAgICAgICAgICAgQ0ZYX0RJQml0bWFwKiBwT3JpRGV2aWNlID0gTlVMTCwgRlhfQk9PTCBiR3JvdXBLbm9ja291dCA9IEZBTFNFKTsNCi0NCi0gICAgdmlydHVhbCB+SUZYX1JlbmRlckRldmljZURyaXZlcigpIHt9DQotICAgIHZpcnR1YWwgdm9pZCBCZWdpbigpIHsgfQ0KLSAgICB2aXJ0dWFsIHZvaWQgRW5kKCkgeyB9DQotDQotICAgIHZpcnR1YWwgaW50CQlHZXREZXZpY2VDYXBzKGludCBjYXBzX2lkKSA9IDA7DQotDQotICAgIHZpcnR1YWwgQ0ZYX01hdHJpeAlHZXRDVE0oKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gQ0ZYX01hdHJpeCgpOw0KLSAgICB9DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTCBJc1BTUHJpbnREcml2ZXIoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCVN0YXJ0UmVuZGVyaW5nKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0NCi0gICAgdmlydHVhbCB2b2lkCUVuZFJlbmRlcmluZygpIHt9DQotDQotDQotDQotDQotICAgIHZpcnR1YWwgdm9pZAlTYXZlU3RhdGUoKSA9IDA7DQotDQotICAgIHZpcnR1YWwgdm9pZAlSZXN0b3JlU3RhdGUoRlhfQk9PTCBiS2VlcFNhdmVkID0gRkFMU0UpID0gMDsNCi0NCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCVNldENsaXBfUGF0aEZpbGwoY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmlsbF9tb2RlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAlTZXRDbGlwX1BhdGhTdHJva2UoY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCURyYXdQYXRoKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfR3JhcGhTdGF0ZURhdGEqIHBHcmFwaFN0YXRlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgZmlsbF9jb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIHN0cm9rZV9jb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWxsX21vZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZyA9IDAsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibGVuZF90eXBlID0gRlhESUJfQkxFTkRfTk9STUFMDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJU2V0UGl4ZWwoaW50IHgsIGludCB5LCBGWF9EV09SRCBjb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wgRmlsbFJlY3QoY29uc3QgRlhfUkVDVCogcFJlY3QsIEZYX0RXT1JEIGZpbGxfY29sb3IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZyA9IDAsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMLCBpbnQgYmxlbmRfdHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAlEcmF3Q29zbWV0aWNMaW5lKEZYX0ZMT0FUIHgxLCBGWF9GTE9BVCB5MSwgRlhfRkxPQVQgeDIsIEZYX0ZMT0FUIHkyLCBGWF9EV09SRCBjb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCwgaW50IGJsZW5kX3R5cGUgPSBGWERJQl9CTEVORF9OT1JNQUwpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wgR2V0Q2xpcEJveChGWF9SRUNUKiBwUmVjdCkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJR2V0RElCaXRzKENGWF9ESUJpdG1hcCogcEJpdG1hcCwgaW50IGxlZnQsIGludCB0b3AsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMLCBGWF9CT09MIGJERWRnZSA9IEZBTFNFKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgdmlydHVhbCBDRlhfRElCaXRtYXAqICAgR2V0QmFja0Ryb3AoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJU2V0RElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIEZYX0RXT1JEIGNvbG9yLCBjb25zdCBGWF9SRUNUKiBwU3JjUmVjdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF9sZWZ0LCBpbnQgZGVzdF90b3AsIGludCBibGVuZF90eXBlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCVN0cmV0Y2hESUJpdHMoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwgRlhfRFdPUkQgY29sb3IsIGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgY29uc3QgRlhfUkVDVCogcENsaXBSZWN0LCBGWF9EV09SRCBmbGFncywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCwgaW50IGJsZW5kX3R5cGUgPSBGWERJQl9CTEVORF9OT1JNQUwpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCVN0YXJ0RElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIGludCBiaXRtYXBfYWxwaGEsIEZYX0RXT1JEIGNvbG9yLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgRlhfRFdPUkQgZmxhZ3MsIEZYX0xQVk9JRCYgaGFuZGxlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCwgaW50IGJsZW5kX3R5cGUgPSBGWERJQl9CTEVORF9OT1JNQUwpID0gMDsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCUNvbnRpbnVlRElCaXRzKEZYX0xQVk9JRCBoYW5kbGUsIElGWF9QYXVzZSogcFBhdXNlKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0NCi0gICAgdmlydHVhbCB2b2lkCUNhbmNlbERJQml0cyhGWF9MUFZPSUQgaGFuZGxlKSB7fQ0KLQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wgRHJhd0RldmljZVRleHQoaW50IG5DaGFycywgY29uc3QgRlhURVhUX0NIQVJQT1MqIHBDaGFyUG9zLCBDRlhfRm9udCogcEZvbnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlhfRm9udENhY2hlKiBwQ2FjaGUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLCBGWF9GTE9BVCBmb250X3NpemUsIEZYX0RXT1JEIGNvbG9yLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotDQotICAgIHZpcnR1YWwgdm9pZCoJR2V0UGxhdGZvcm1TdXJmYWNlKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0NCi0gICAgdmlydHVhbCBpbnQJCUdldERyaXZlclR5cGUoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQgICAgQ2xlYXJEcml2ZXIoKSB7fQ0KLX07DQotY2xhc3MgSUZYX1BTT3V0cHV0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgdmlydHVhbCB2b2lkCU91dHB1dFBTKEZYX0xQQ1NUUiBzdHJpbmcsIGludCBsZW4pID0gMDsNCi0gICAgdmlydHVhbCB2b2lkICBSZWxlYXNlKCkgPSAwOw0KLX07DQotY2xhc3MgQ1BTRm9udDsNCi1jbGFzcyBDRlhfUFNSZW5kZXJlciA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ0ZYX1BTUmVuZGVyZXIoKTsNCi0NCi0gICAgfkNGWF9QU1JlbmRlcmVyKCk7DQotDQotICAgIHZvaWQJCQlJbml0KElGWF9QU091dHB1dCogcE91dHB1dCwgaW50IHBzX2xldmVsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEZYX0JPT0wgYkNteWtPdXRwdXQpOw0KLSAgICBGWF9CT09MCQkJU3RhcnRSZW5kZXJpbmcoKTsNCi0gICAgdm9pZAkJCUVuZFJlbmRlcmluZygpOw0KLQ0KLSAgICB2b2lkCQkJU2F2ZVN0YXRlKCk7DQotDQotICAgIHZvaWQJCQlSZXN0b3JlU3RhdGUoRlhfQk9PTCBiS2VlcFNhdmVkID0gRkFMU0UpOw0KLQ0KLSAgICB2b2lkCQkJU2V0Q2xpcF9QYXRoRmlsbChjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWxsX21vZGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KLQ0KLSAgICB2b2lkCQkJU2V0Q2xpcF9QYXRoU3Ryb2tlKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQotDQotICAgIEZYX1JFQ1QJCQlHZXRDbGlwQm94KCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fQ2xpcEJveDsNCi0gICAgfQ0KLQ0KLSAgICBGWF9CT09MCQkJRHJhd1BhdGgoY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkRldmljZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBmaWxsX2NvbG9yLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgc3Ryb2tlX2NvbG9yLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpbGxfbW9kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMDQotICAgICAgICAgICAgICAgICAgICAgICk7DQotDQotICAgIEZYX0JPT0wJCQlTZXRESUJpdHMoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwgRlhfRFdPUkQgY29sb3IsIGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZyA9IDAsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMKTsNCi0NCi0gICAgRlhfQk9PTAkJCVN0cmV0Y2hESUJpdHMoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwgRlhfRFdPUkQgY29sb3IsIGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgRlhfRFdPUkQgZmxhZ3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwpOw0KLQ0KLSAgICBGWF9CT09MCQkJRHJhd0RJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBGWF9EV09SRCBjb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgRlhfRFdPUkQgZmxhZ3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwpOw0KLQ0KLSAgICBGWF9CT09MCQkJRHJhd1RleHQoaW50IG5DaGFycywgY29uc3QgRlhURVhUX0NIQVJQT1MqIHBDaGFyUG9zLCBDRlhfRm9udCogcEZvbnQsIENGWF9Gb250Q2FjaGUqIHBDYWNoZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLCBGWF9GTE9BVCBmb250X3NpemUsIEZYX0RXT1JEIGNvbG9yLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCk7DQotcHJpdmF0ZToNCi0NCi0gICAgSUZYX1BTT3V0cHV0KgltX3BPdXRwdXQ7DQotDQotICAgIGludAkJCQltX1BTTGV2ZWw7DQotDQotICAgIENGWF9HcmFwaFN0YXRlRGF0YQltX0N1ckdyYXBoU3RhdGU7DQotDQotICAgIEZYX0JPT0wJCQltX2JHcmFwaFN0YXRlU2V0Ow0KLQ0KLSAgICBGWF9CT09MCQkJbV9iQ215a091dHB1dDsNCi0NCi0gICAgRlhfQk9PTAkJCW1fYkNvbG9yU2V0Ow0KLQ0KLSAgICBGWF9EV09SRAkJbV9MYXN0Q29sb3I7DQotDQotICAgIEZYX1JFQ1QJCQltX0NsaXBCb3g7DQotDQotICAgIENGWF9BcnJheVRlbXBsYXRlPENQU0ZvbnQqPgltX1BTRm9udExpc3Q7DQotDQotICAgIENGWF9BcnJheVRlbXBsYXRlPEZYX1JFQ1Q+CW1fQ2xpcEJveFN0YWNrOw0KLSAgICBGWF9CT09MCQkJbV9iSW5pdGVkOw0KLQ0KLSAgICB2b2lkCQkJT3V0cHV0UGF0aChjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UpOw0KLQ0KLSAgICB2b2lkCQkJU2V0R3JhcGhTdGF0ZShjb25zdCBDRlhfR3JhcGhTdGF0ZURhdGEqIHBHcmFwaFN0YXRlKTsNCi0NCi0gICAgdm9pZAkJCVNldENvbG9yKEZYX0RXT1JEIGNvbG9yLCBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSk7DQotDQotICAgIHZvaWQJCQlGaW5kUFNGb250R2x5cGgoQ0ZYX0ZhY2VDYWNoZSogcEZhY2VDYWNoZSwgQ0ZYX0ZvbnQqIHBGb250LCBjb25zdCBGWFRFWFRfQ0hBUlBPUyYgY2hhcnBvcywgaW50JiBwc19mb250bnVtLCBpbnQgJnBzX2dseXBoaW5kZXgpOw0KLQ0KLSAgICB2b2lkCQkJV3JpdGVQU0JpbmFyeShGWF9MUENCWVRFIGRhdGEsIGludCBsZW4pOw0KLX07DQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlhfR0VfSF8KKyNkZWZpbmUgX0ZYX0dFX0hfCisjaWZuZGVmIF9GWF9ESUJfSF8KKyNpbmNsdWRlICJmeF9kaWIuaCIKKyNlbmRpZgorI2lmbmRlZiBfRlhfRk9OVF9IXworI2luY2x1ZGUgImZ4X2ZvbnQuaCIKKyNlbmRpZgorY2xhc3MgQ0ZYX0NsaXBSZ247CitjbGFzcyBDRlhfUGF0aERhdGE7CitjbGFzcyBDRlhfR3JhcGhTdGF0ZURhdGE7CitjbGFzcyBDRlhfRm9udDsKK2NsYXNzIENGWF9Gb250TWdyOworY2xhc3MgQ0ZYX0ZvbnRDYWNoZTsKK2NsYXNzIENGWF9GYWNlQ2FjaGU7CitjbGFzcyBDRlhfUmVuZGVyRGV2aWNlOworY2xhc3MgSUZYX1JlbmRlckRldmljZURyaXZlcjsKK2NsYXNzIENDb2RlY19Nb2R1bGVNZ3I7CitjbGFzcyBJRlhHX1BhaW50TW9kdWxlTWdyOworY2xhc3MgQ0ZYX0dFTW9kdWxlIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIHN0YXRpYyB2b2lkCQkJCUNyZWF0ZSgpOworCisgICAgc3RhdGljIHZvaWQJCQkJVXNlKENGWF9HRU1vZHVsZSogcE1ncik7CisKKyAgICBzdGF0aWMgQ0ZYX0dFTW9kdWxlKglHZXQoKTsKKworICAgIHN0YXRpYyB2b2lkCQkJCURlc3Ryb3koKTsKK3B1YmxpYzoKKworICAgIENGWF9Gb250Q2FjaGUqCQkJR2V0Rm9udENhY2hlKCk7CisgICAgQ0ZYX0ZvbnRNZ3IqCQkJR2V0Rm9udE1ncigpCisgICAgeworICAgICAgICByZXR1cm4gbV9wRm9udE1ncjsKKyAgICB9CisgICAgdm9pZAkJCQkJU2V0VGV4dEdhbW1hKEZYX0ZMT0FUIGdhbW1hVmFsdWUpOworICAgIEZYX0xQQ0JZVEUJCQkJR2V0VGV4dEdhbW1hVGFibGUoKTsKKyAgICB2b2lkCQkJCQlTZXRFeHRGb250TWFwcGVyKElGWF9Gb250TWFwcGVyKiBwRm9udE1hcHBlcik7CisKKyAgICB2b2lkCQkJCQlTZXRDb2RlY01vZHVsZShDQ29kZWNfTW9kdWxlTWdyKiBwQ29kZWNNb2R1bGUpCisgICAgeworICAgICAgICBtX3BDb2RlY01vZHVsZSA9IHBDb2RlY01vZHVsZTsKKyAgICB9CisgICAgQ0NvZGVjX01vZHVsZU1ncioJCUdldENvZGVjTW9kdWxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BDb2RlY01vZHVsZTsKKyAgICB9CisgICAgRlhGVF9MaWJyYXJ5CQkJbV9GVExpYnJhcnk7CisgICAgdm9pZCoJCQkJCUdldFBsYXRmb3JtRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9wUGxhdGZvcm1EYXRhOworICAgIH0KK3Byb3RlY3RlZDoKKworICAgIENGWF9HRU1vZHVsZSgpOworCisgICAgfkNGWF9HRU1vZHVsZSgpOworICAgIHZvaWQJCQkJCUluaXRQbGF0Zm9ybSgpOworICAgIHZvaWQJCQkJCURlc3Ryb3lQbGF0Zm9ybSgpOworcHJpdmF0ZToKKyAgICBGWF9CWVRFCQkJCQltX0dhbW1hVmFsdWVbMjU2XTsKKyAgICBDRlhfRm9udENhY2hlKgkJCW1fcEZvbnRDYWNoZTsKKyAgICBDRlhfRm9udE1ncioJCQltX3BGb250TWdyOworICAgIENDb2RlY19Nb2R1bGVNZ3IqCQltX3BDb2RlY01vZHVsZTsKKyAgICB2b2lkKgkJCQkJbV9wUGxhdGZvcm1EYXRhOworfTsKK3R5cGVkZWYgc3RydWN0IHsKKworICAgIEZYX0ZMT0FUCQkJbV9Qb2ludFg7CisKKyAgICBGWF9GTE9BVAkJCW1fUG9pbnRZOworCisgICAgaW50CQkJCQltX0ZsYWc7Cit9IEZYX1BBVEhQT0lOVDsKKyNkZWZpbmUgRlhQVF9DTE9TRUZJR1VSRQkJMHgwMQorI2RlZmluZSBGWFBUX0xJTkVUTwkJCQkweDAyCisjZGVmaW5lIEZYUFRfQkVaSUVSVE8JCQkweDA0CisjZGVmaW5lIEZYUFRfTU9WRVRPCQkJCTB4MDYKKyNkZWZpbmUgRlhQVF9UWVBFCQkJCTB4MDYKKyNkZWZpbmUgRlhGSUxMX0FMVEVSTkFURQkJMQorI2RlZmluZSBGWEZJTExfV0lORElORwkJCTIKK2NsYXNzIENGWF9DbGlwUmduIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENGWF9DbGlwUmduKGludCBkZXZpY2Vfd2lkdGgsIGludCBkZXZpY2VfaGVpZ2h0KTsKKworICAgIENGWF9DbGlwUmduKGNvbnN0IEZYX1JFQ1QmIHJlY3QpOworCisgICAgQ0ZYX0NsaXBSZ24oY29uc3QgQ0ZYX0NsaXBSZ24mIHNyYyk7CisKKyAgICB+Q0ZYX0NsaXBSZ24oKTsKKworICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIFJlY3RJLAorICAgICAgICBNYXNrRgorICAgIH0gQ2xpcFR5cGU7CisKKyAgICB2b2lkCQkJUmVzZXQoY29uc3QgRlhfUkVDVCYgcmVjdCk7CisKKyAgICBDbGlwVHlwZQkJR2V0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9UeXBlOworICAgIH0KKworICAgIGNvbnN0IEZYX1JFQ1QmCUdldEJveCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9Cb3g7CisgICAgfQorCisgICAgQ0ZYX0RJQml0bWFwUmVmCUdldE1hc2soKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fTWFzazsKKyAgICB9CisKKyAgICB2b2lkCQkJSW50ZXJzZWN0UmVjdChjb25zdCBGWF9SRUNUJiByZWN0KTsKKworICAgIHZvaWQJCQlJbnRlcnNlY3RNYXNrRihpbnQgbGVmdCwgaW50IHRvcCwgQ0ZYX0RJQml0bWFwUmVmIE1hc2spOworcHJvdGVjdGVkOgorCisgICAgQ2xpcFR5cGUJCW1fVHlwZTsKKworICAgIEZYX1JFQ1QJCQltX0JveDsKKworICAgIENGWF9ESUJpdG1hcFJlZgltX01hc2s7CisKKyAgICB2b2lkCQkJSW50ZXJzZWN0TWFza1JlY3QoRlhfUkVDVCByZWN0LCBGWF9SRUNUIG1hc2tfYm94LCBDRlhfRElCaXRtYXBSZWYgTWFzayk7Cit9OworZXh0ZXJuIGNvbnN0IEZYX0JZVEUgZ19HYW1tYVJhbXBbMjU2XTsKK2V4dGVybiBjb25zdCBGWF9CWVRFIGdfR2FtbWFJbnZlcnNlWzI1Nl07CisjZGVmaW5lIEZYX0dBTU1BKHZhbHVlKQkJCSh2YWx1ZSkKKyNkZWZpbmUgRlhfR0FNTUFfSU5WRVJTRSh2YWx1ZSkJKHZhbHVlKQoraW5saW5lIEZYX0FSR0IgQXJnYkdhbW1hKEZYX0FSR0IgYXJnYikKK3sKKyAgICByZXR1cm4gYXJnYjsKK30KK2lubGluZSBGWF9BUkdCIEFyZ2JHYW1tYUludmVyc2UoRlhfQVJHQiBhcmdiKQoreworICAgIHJldHVybiBhcmdiOworfQorY2xhc3MgQ0ZYX1BhdGhEYXRhIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENGWF9QYXRoRGF0YSgpOworCisgICAgQ0ZYX1BhdGhEYXRhKGNvbnN0IENGWF9QYXRoRGF0YSYgc3JjKTsKKworICAgIH5DRlhfUGF0aERhdGEoKTsKKworCisKKworICAgIGludAkJCQkJR2V0UG9pbnRDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9Qb2ludENvdW50OworICAgIH0KKworICAgIGludAkJCQkJR2V0RmxhZyhpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wUG9pbnRzW2luZGV4XS5tX0ZsYWc7CisgICAgfQorCisgICAgRlhfRkxPQVQJCQlHZXRQb2ludFgoaW50IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcFBvaW50c1tpbmRleF0ubV9Qb2ludFg7CisgICAgfQorCisgICAgRlhfRkxPQVQJCQlHZXRQb2ludFkoaW50IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcFBvaW50c1tpbmRleF0ubV9Qb2ludFk7CisgICAgfQorCisKKworICAgIEZYX1BBVEhQT0lOVCoJCUdldFBvaW50cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wUG9pbnRzOworICAgIH0KKworICAgIEZYX0JPT0wJCQkJU2V0UG9pbnRDb3VudChpbnQgblBvaW50cyk7CisKKyAgICBGWF9CT09MCQkJCUFsbG9jUG9pbnRDb3VudChpbnQgblBvaW50cyk7CisKKyAgICBGWF9CT09MCQkJCUFkZFBvaW50Q291bnQoaW50IGFkZFBvaW50cyk7CisKKyAgICBDRlhfRmxvYXRSZWN0CQlHZXRCb3VuZGluZ0JveCgpIGNvbnN0OworCisgICAgQ0ZYX0Zsb2F0UmVjdAkJR2V0Qm91bmRpbmdCb3goRlhfRkxPQVQgbGluZV93aWR0aCwgRlhfRkxPQVQgbWl0ZXJfbGltaXQpIGNvbnN0OworCisgICAgdm9pZAkJCQlUcmFuc2Zvcm0oY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCk7CisKKyAgICBGWF9CT09MCQkJCUlzUmVjdCgpIGNvbnN0OworCisgICAgRlhfQk9PTAkJCQlHZXRaZXJvQXJlYVBhdGgoQ0ZYX1BhdGhEYXRhJiBOZXdQYXRoLCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LCBGWF9CT09MJmJUaGluLCBGWF9CT09MIGJBZGp1c3QpIGNvbnN0OworCisgICAgRlhfQk9PTAkJCQlJc1JlY3QoY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgQ0ZYX0Zsb2F0UmVjdCogcmVjdCkgY29uc3Q7CisKKyAgICBGWF9CT09MCQkJCUFwcGVuZChjb25zdCBDRlhfUGF0aERhdGEqIHBTcmMsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgpOworCisgICAgRlhfQk9PTAkJCQlBcHBlbmRSZWN0KEZYX0ZMT0FUIGxlZnQsIEZYX0ZMT0FUIGJvdHRvbSwgRlhfRkxPQVQgcmlnaHQsIEZYX0ZMT0FUIHRvcCk7CisKKyAgICB2b2lkCQkJCVNldFBvaW50KGludCBpbmRleCwgRlhfRkxPQVQgeCwgRlhfRkxPQVQgeSwgaW50IGZsYWcpOworCisgICAgdm9pZAkJCQlUcmltUG9pbnRzKGludCBuUG9pbnRzKTsKKworICAgIEZYX0JPT0wJCQkJQ29weShjb25zdCBDRlhfUGF0aERhdGEgJnNyYyk7Citwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGNsYXNzCQlDUERGX1BhdGg7CisKKyAgICBpbnQJCQkJCW1fUG9pbnRDb3VudDsKKworICAgIEZYX1BBVEhQT0lOVCoJCW1fcFBvaW50czsKKworICAgIGludAkJCQkJbV9BbGxvY0NvdW50OworfTsKK2NsYXNzIENGWF9HcmFwaFN0YXRlRGF0YSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDRlhfR3JhcGhTdGF0ZURhdGEoKTsKKworICAgIENGWF9HcmFwaFN0YXRlRGF0YShjb25zdCBDRlhfR3JhcGhTdGF0ZURhdGEmIHNyYyk7CisKKyAgICB+Q0ZYX0dyYXBoU3RhdGVEYXRhKCk7CisKKyAgICB2b2lkCQkJCUNvcHkoY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhJiBzcmMpOworCisgICAgdm9pZAkJCQlTZXREYXNoQ291bnQoaW50IGNvdW50KTsKKworCisKKyAgICB0eXBlZGVmIGVudW0geworICAgICAgICBMaW5lQ2FwQnV0dCA9IDAsCisgICAgICAgIExpbmVDYXBSb3VuZCA9IDEsCisgICAgICAgIExpbmVDYXBTcXVhcmUgPSAyCisgICAgfSBMaW5lQ2FwOworICAgIExpbmVDYXAJCQkJbV9MaW5lQ2FwOworICAgIGludAkJCQkJbV9EYXNoQ291bnQ7CisgICAgRlhfRkxPQVQqCQltX0Rhc2hBcnJheTsKKyAgICBGWF9GTE9BVAkJCW1fRGFzaFBoYXNlOworCisgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAgICAgTGluZUpvaW5NaXRlciA9IDAsCisgICAgICAgIExpbmVKb2luUm91bmQgPSAxLAorICAgICAgICBMaW5lSm9pbkJldmVsID0gMiwKKyAgICB9IExpbmVKb2luOworICAgIExpbmVKb2luCQkJbV9MaW5lSm9pbjsKKyAgICBGWF9GTE9BVAkJCW1fTWl0ZXJMaW1pdDsKKyAgICBGWF9GTE9BVAkJCW1fTGluZVdpZHRoOworCit9OworI2RlZmluZSBGWERDX0RFVklDRV9DTEFTUwkJCTEKKyNkZWZpbmUgRlhEQ19QSVhFTF9XSURUSAkJCTIKKyNkZWZpbmUgRlhEQ19QSVhFTF9IRUlHSFQJCQkzCisjZGVmaW5lIEZYRENfQklUU19QSVhFTAkJCQk0CisjZGVmaW5lIEZYRENfSE9SWl9TSVpFCQkJCTUKKyNkZWZpbmUgRlhEQ19WRVJUX1NJWkUJCQkJNgorI2RlZmluZSBGWERDX1JFTkRFUl9DQVBTCQkJNworI2RlZmluZSBGWERDX0RJVEhFUl9CSVRTCQkJOAorI2RlZmluZSBGWERDX0RJU1BMQVkJCQkJMQorI2RlZmluZSBGWERDX1BSSU5URVIJCQkJMgorI2RlZmluZSBGWFJDX0dFVF9CSVRTCQkJCTB4MDEKKyNkZWZpbmUgRlhSQ19CSVRfTUFTSwkJCQkweDAyCisjZGVmaW5lIEZYUkNfQUxQSEFfTUFTSwkJCQkweDA0CisjZGVmaW5lIEZYUkNfQUxQSEFfUEFUSAkJCQkweDEwCisjZGVmaW5lIEZYUkNfQUxQSEFfSU1BR0UJCQkweDIwCisjZGVmaW5lIEZYUkNfQUxQSEFfT1VUUFVUCQkJMHg0MAorI2RlZmluZSBGWFJDX0JMRU5EX01PREUJCQkJMHg4MAorI2RlZmluZSBGWFJDX1NPRlRfQ0xJUAkJCQkweDEwMAorI2RlZmluZSBGWFJDX0NNWUtfT1VUUFVUCQkJMHgyMDAKKyNkZWZpbmUgRlhSQ19CSVRNQVNLX09VVFBVVCAgICAgICAgIDB4NDAwCisjZGVmaW5lIEZYUkNfQllURU1BU0tfT1VUUFVUICAgICAgICAweDgwMAorI2RlZmluZSBGWFJFTkRFUl9JTUFHRV9MT1NTWQkJMHgxMDAwCisjZGVmaW5lIEZYRklMTF9BTFRFUk5BVEUJCTEKKyNkZWZpbmUgRlhGSUxMX1dJTkRJTkcJCQkyCisjZGVmaW5lIEZYRklMTF9GVUxMQ09WRVIJCTQKKyNkZWZpbmUgRlhGSUxMX1JFQ1RfQUEJCQk4CisjZGVmaW5lIEZYX0ZJTExfU1RST0tFCQkJMTYKKyNkZWZpbmUgRlhfU1RST0tFX0FESlVTVAkJMzIKKyNkZWZpbmUgRlhfU1RST0tFX1RFWFRfTU9ERQkJNjQKKyNkZWZpbmUgRlhfRklMTF9URVhUX01PREUJCTEyOAorI2RlZmluZSBGWF9aRVJPQVJFQV9GSUxMCQkyNTYKKyNkZWZpbmUgRlhGSUxMX05PUEFUSFNNT09USAkJNTEyCisjZGVmaW5lIEZYVEVYVF9DTEVBUlRZUEUJCQkweDAxCisjZGVmaW5lIEZYVEVYVF9CR1JfU1RSSVBFCQkJMHgwMgorI2RlZmluZSBGWFRFWFRfUFJJTlRHUkFQSElDVEVYVAkJMHgwNAorI2RlZmluZSBGWFRFWFRfTk9fTkFUSVZFVEVYVAkJMHgwOAorI2RlZmluZSBGWFRFWFRfUFJJTlRJTUFHRVRFWFQJCTB4MTAKKyNkZWZpbmUgRlhURVhUX05PU01PT1RICQkJCTB4MjAKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBGWF9EV09SRAkJCW1fR2x5cGhJbmRleDsKKyAgICBGWF9GTE9BVAkJCW1fT3JpZ2luWCwgbV9PcmlnaW5ZOworICAgIGludAkJCQkJbV9Gb250Q2hhcldpZHRoOworICAgIEZYX0JPT0wJCQkJbV9iR2x5cGhBZGp1c3Q7CisgICAgRlhfRkxPQVQJCQltX0FkanVzdE1hdHJpeFs0XTsKKyAgICBGWF9EV09SRAkJCW1fRXh0R0lEOworICAgIEZYX0JPT0wJCQkJbV9iRm9udFN0eWxlOworfSBGWFRFWFRfQ0hBUlBPUzsKK2NsYXNzIENGWF9SZW5kZXJEZXZpY2UgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENGWF9SZW5kZXJEZXZpY2UoKTsKKworICAgIHZpcnR1YWwgfkNGWF9SZW5kZXJEZXZpY2UoKTsKKworICAgIHZvaWQJCQlTZXREZXZpY2VEcml2ZXIoSUZYX1JlbmRlckRldmljZURyaXZlciogcERyaXZlcik7CisKKyAgICBJRlhfUmVuZGVyRGV2aWNlRHJpdmVyKglHZXREZXZpY2VEcml2ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcERldmljZURyaXZlcjsKKyAgICB9CisKKyAgICBGWF9CT09MCQkJU3RhcnRSZW5kZXJpbmcoKTsKKworICAgIHZvaWQJCQlFbmRSZW5kZXJpbmcoKTsKKworCisKKyAgICB2b2lkCQkJU2F2ZVN0YXRlKCk7CisKKyAgICB2b2lkCQkJUmVzdG9yZVN0YXRlKEZYX0JPT0wgYktlZXBTYXZlZCA9IEZBTFNFKTsKKworCisKKworICAgIGludAkJCQlHZXRXaWR0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9XaWR0aDsKKyAgICB9CisKKyAgICBpbnQJCQkJR2V0SGVpZ2h0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0hlaWdodDsKKyAgICB9CisKKyAgICBpbnQJCQkJR2V0RGV2aWNlQ2xhc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fRGV2aWNlQ2xhc3M7CisgICAgfQorCisgICAgaW50CQkJCUdldEJQUCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9icHA7CisgICAgfQorCisgICAgaW50CQkJCUdldFJlbmRlckNhcHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fUmVuZGVyQ2FwczsKKyAgICB9CisKKyAgICBpbnQJCQkJR2V0RGV2aWNlQ2FwcyhpbnQgaWQpIGNvbnN0OworCisgICAgQ0ZYX01hdHJpeAkJR2V0Q1RNKCkgY29uc3Q7CisKKworICAgIENGWF9ESUJpdG1hcCoJR2V0Qml0bWFwKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BCaXRtYXA7CisgICAgfQorICAgIHZvaWQJCQlTZXRCaXRtYXAoQ0ZYX0RJQml0bWFwKiBwQml0bWFwKQorICAgIHsKKyAgICAgICAgbV9wQml0bWFwID0gcEJpdG1hcDsKKyAgICB9CisKKyAgICBGWF9CT09MCQkJQ3JlYXRlQ29tcGF0aWJsZUJpdG1hcChDRlhfRElCaXRtYXAqIHBESUIsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3Q7CisKKyAgICBjb25zdCBGWF9SRUNUJglHZXRDbGlwQm94KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0NsaXBCb3g7CisgICAgfQorCisgICAgRlhfQk9PTAkJCVNldENsaXBfUGF0aEZpbGwoY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpbGxfbW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgIEZYX0JPT0wJCQlTZXRDbGlwX1JlY3QoY29uc3QgRlhfUkVDVCogcFJlY3QpOworCisgICAgRlhfQk9PTAkJCVNldENsaXBfUGF0aFN0cm9rZShjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgRlhfQk9PTAkJCURyYXdQYXRoKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgZmlsbF9jb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgc3Ryb2tlX2NvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmlsbF9tb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZyA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxlbmRfdHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTAorICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBGWF9CT09MCQkJU2V0UGl4ZWwoaW50IHgsIGludCB5LCBGWF9EV09SRCBjb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCk7CisKKyAgICBGWF9CT09MCQkJRmlsbFJlY3QoY29uc3QgRlhfUkVDVCogcFJlY3QsIEZYX0RXT1JEIGNvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZyA9IDAsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMLCBpbnQgYmxlbmRfdHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTCk7CisKKyAgICBGWF9CT09MCQkJRHJhd0Nvc21ldGljTGluZShGWF9GTE9BVCB4MSwgRlhfRkxPQVQgeTEsIEZYX0ZMT0FUIHgyLCBGWF9GTE9BVCB5MiwgRlhfRFdPUkQgY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpbGxfbW9kZSA9IDAsIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwsIGludCBibGVuZF90eXBlID0gRlhESUJfQkxFTkRfTk9STUFMKTsKKworICAgIEZYX0JPT0wJCQlHZXRESUJpdHMoQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCBpbnQgbGVmdCwgaW50IHRvcCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwpOworCisgICAgQ0ZYX0RJQml0bWFwKiAgIEdldEJhY2tEcm9wKCk7CisKKyAgICBGWF9CT09MCQkJU2V0RElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgYmxlbmRfdHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMKTsKKworICAgIEZYX0JPT0wJCQlTdHJldGNoRElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGZsYWdzID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwsIGludCBibGVuZF90eXBlID0gRlhESUJfQkxFTkRfTk9STUFMKTsKKworICAgIEZYX0JPT0wJCQlTZXRCaXRNYXNrKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIGludCBsZWZ0LCBpbnQgdG9wLCBGWF9EV09SRCBjb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZyA9IDAsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMKTsKKworICAgIEZYX0JPT0wJCQlTdHJldGNoQml0TWFzayhjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgY29sb3IsIEZYX0RXT1JEIGZsYWdzID0gMCwgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCk7CisKKyAgICBGWF9CT09MCQkJU3RhcnRESUJpdHMoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwgaW50IGJpdG1hcF9hbHBoYSwgRlhfRFdPUkQgY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIEZYX0RXT1JEIGZsYWdzLCBGWF9MUFZPSUQmIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCwgaW50IGJsZW5kX3R5cGUgPSBGWERJQl9CTEVORF9OT1JNQUwpOworCisgICAgRlhfQk9PTAkJCUNvbnRpbnVlRElCaXRzKEZYX0xQVk9JRCBoYW5kbGUsIElGWF9QYXVzZSogcFBhdXNlKTsKKworICAgIHZvaWQJCQlDYW5jZWxESUJpdHMoRlhfTFBWT0lEIGhhbmRsZSk7CisKKyAgICBGWF9CT09MCQkJRHJhd05vcm1hbFRleHQoaW50IG5DaGFycywgY29uc3QgRlhURVhUX0NIQVJQT1MqIHBDaGFyUG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlhfRm9udCogcEZvbnQsIENGWF9Gb250Q2FjaGUqIHBDYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQgZm9udF9zaXplLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwVGV4dDJEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGZpbGxfY29sb3IsIEZYX0RXT1JEIHRleHRfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwpOworCisgICAgRlhfQk9PTAkJCURyYXdUZXh0UGF0aChpbnQgbkNoYXJzLCBjb25zdCBGWFRFWFRfQ0hBUlBPUyogcENoYXJQb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlhfRm9udCogcEZvbnQsIENGWF9Gb250Q2FjaGUqIHBDYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIGZvbnRfc2l6ZSwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcFRleHQyVXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBVc2VyMkRldmljZSwgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGZpbGxfY29sb3IsIEZYX0RXT1JEIHN0cm9rZV9jb2xvciwgQ0ZYX1BhdGhEYXRhKiBwQ2xpcHBpbmdQYXRoLCBpbnQgbkZsYWcgPSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCwgaW50IGJsZW5kX3R5cGUgPSBGWERJQl9CTEVORF9OT1JNQUwpOworICAgIHZpcnR1YWwgdm9pZCBCZWdpbigpIHt9CisgICAgdmlydHVhbCB2b2lkIEVuZCgpIHt9Citwcml2YXRlOgorCisgICAgQ0ZYX0RJQml0bWFwKgltX3BCaXRtYXA7CisKKworCisgICAgaW50CQkJCW1fV2lkdGg7CisKKyAgICBpbnQJCQkJbV9IZWlnaHQ7CisKKyAgICBpbnQJCQkJbV9icHA7CisKKyAgICBpbnQJCQkJbV9SZW5kZXJDYXBzOworCisgICAgaW50CQkJCW1fRGV2aWNlQ2xhc3M7CisKKyAgICBGWF9SRUNUCQkJbV9DbGlwQm94OworCitwcm90ZWN0ZWQ6CisKKyAgICBJRlhfUmVuZGVyRGV2aWNlRHJpdmVyKgltX3BEZXZpY2VEcml2ZXI7Citwcml2YXRlOgorCisgICAgdm9pZAkJCUluaXREZXZpY2VJbmZvKCk7CisKKyAgICB2b2lkCQkJVXBkYXRlQ2xpcEJveCgpOworfTsKK2NsYXNzIENGWF9GeGdlRGV2aWNlIDogcHVibGljIENGWF9SZW5kZXJEZXZpY2UKK3sKK3B1YmxpYzoKKworICAgIENGWF9GeGdlRGV2aWNlKCk7CisKKyAgICB+Q0ZYX0Z4Z2VEZXZpY2UoKTsKKworICAgIEZYX0JPT0wJCQlBdHRhY2goQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCBpbnQgZGl0aGVyX2JpdHMgPSAwLCBGWF9CT09MIGJSZ2JCeXRlT3JkZXIgPSBGQUxTRSwgQ0ZYX0RJQml0bWFwKiBwT3JpRGV2aWNlID0gTlVMTCwgRlhfQk9PTCBiR3JvdXBLbm9ja291dCA9IEZBTFNFKTsKKworICAgIEZYX0JPT0wJCQlDcmVhdGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBGWERJQl9Gb3JtYXQgZm9ybWF0LCBpbnQgZGl0aGVyX2JpdHMgPSAwLCBDRlhfRElCaXRtYXAqIHBPcmlEZXZpY2UgPSBOVUxMKTsKK3Byb3RlY3RlZDoKKworICAgIEZYX0JPT0wJCQltX2JPd25lZEJpdG1hcDsKK307CitjbGFzcyBDRlhfU2tpYURldmljZSA6IHB1YmxpYyBDRlhfUmVuZGVyRGV2aWNlCit7CitwdWJsaWM6CisKKyAgICBDRlhfU2tpYURldmljZSgpOworCisgICAgfkNGWF9Ta2lhRGV2aWNlKCk7CisKKyAgICBGWF9CT09MCQkJQXR0YWNoKENGWF9ESUJpdG1hcCogcEJpdG1hcCwgaW50IGRpdGhlcl9iaXRzID0gMCwgRlhfQk9PTCBiUmdiQnl0ZU9yZGVyID0gRkFMU0UsIENGWF9ESUJpdG1hcCogcE9yaURldmljZSA9IE5VTEwsIEZYX0JPT0wgYkdyb3VwS25vY2tvdXQgPSBGQUxTRSk7CisKKyAgICBGWF9CT09MCQkJQ3JlYXRlKGludCB3aWR0aCwgaW50IGhlaWdodCwgRlhESUJfRm9ybWF0IGZvcm1hdCwgaW50IGRpdGhlcl9iaXRzID0gMCwgQ0ZYX0RJQml0bWFwKiBwT3JpRGV2aWNlID0gTlVMTCk7Citwcm90ZWN0ZWQ6CisKKyAgICBGWF9CT09MCQkJbV9iT3duZWRCaXRtYXA7Cit9OworY2xhc3MgSUZYX1JlbmRlckRldmljZURyaXZlciA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBzdGF0aWMgSUZYX1JlbmRlckRldmljZURyaXZlcioJCUNyZWF0ZUZ4Z2VEcml2ZXIoQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCBGWF9CT09MIGJSZ2JCeXRlT3JkZXIgPSBGQUxTRSwKKyAgICAgICAgICAgIENGWF9ESUJpdG1hcCogcE9yaURldmljZSA9IE5VTEwsIEZYX0JPT0wgYkdyb3VwS25vY2tvdXQgPSBGQUxTRSk7CisKKyAgICB2aXJ0dWFsIH5JRlhfUmVuZGVyRGV2aWNlRHJpdmVyKCkge30KKyAgICB2aXJ0dWFsIHZvaWQgQmVnaW4oKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgRW5kKCkgeyB9CisKKyAgICB2aXJ0dWFsIGludAkJR2V0RGV2aWNlQ2FwcyhpbnQgY2Fwc19pZCkgPSAwOworCisgICAgdmlydHVhbCBDRlhfTWF0cml4CUdldENUTSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQ0ZYX01hdHJpeCgpOworICAgIH0KKworICAgIHZpcnR1YWwgRlhfQk9PTCBJc1BTUHJpbnREcml2ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHZpcnR1YWwgRlhfQk9PTAlTdGFydFJlbmRlcmluZygpCisgICAgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQJRW5kUmVuZGVyaW5nKCkge30KKworCisKKworICAgIHZpcnR1YWwgdm9pZAlTYXZlU3RhdGUoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQJUmVzdG9yZVN0YXRlKEZYX0JPT0wgYktlZXBTYXZlZCA9IEZBTFNFKSA9IDA7CisKKworICAgIHZpcnR1YWwgRlhfQk9PTAlTZXRDbGlwX1BhdGhGaWxsKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWxsX21vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPSAwOworCisgICAgdmlydHVhbCBGWF9CT09MCVNldENsaXBfUGF0aFN0cm9rZShjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgdmlydHVhbCBGWF9CT09MCURyYXdQYXRoKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgZmlsbF9jb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgc3Ryb2tlX2NvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmlsbF9tb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZyA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxlbmRfdHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgPSAwOworCisgICAgdmlydHVhbCBGWF9CT09MCVNldFBpeGVsKGludCB4LCBpbnQgeSwgRlhfRFdPUkQgY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgdmlydHVhbCBGWF9CT09MIEZpbGxSZWN0KGNvbnN0IEZYX1JFQ1QqIHBSZWN0LCBGWF9EV09SRCBmaWxsX2NvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZyA9IDAsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMLCBpbnQgYmxlbmRfdHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTCkKKyAgICB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJRHJhd0Nvc21ldGljTGluZShGWF9GTE9BVCB4MSwgRlhfRkxPQVQgeTEsIEZYX0ZMT0FUIHgyLCBGWF9GTE9BVCB5MiwgRlhfRFdPUkQgY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCwgaW50IGJsZW5kX3R5cGUgPSBGWERJQl9CTEVORF9OT1JNQUwpCisgICAgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgdmlydHVhbCBGWF9CT09MIEdldENsaXBCb3goRlhfUkVDVCogcFJlY3QpID0gMDsKKworICAgIHZpcnR1YWwgRlhfQk9PTAlHZXRESUJpdHMoQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCBpbnQgbGVmdCwgaW50IHRvcCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwsIEZYX0JPT0wgYkRFZGdlID0gRkFMU0UpCisgICAgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHZpcnR1YWwgQ0ZYX0RJQml0bWFwKiAgIEdldEJhY2tEcm9wKCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHZpcnR1YWwgRlhfQk9PTAlTZXRESUJpdHMoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwgRlhfRFdPUkQgY29sb3IsIGNvbnN0IEZYX1JFQ1QqIHBTcmNSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLCBpbnQgYmxlbmRfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwpID0gMDsKKworICAgIHZpcnR1YWwgRlhfQk9PTAlTdHJldGNoRElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIEZYX0RXT1JEIGNvbG9yLCBpbnQgZGVzdF9sZWZ0LCBpbnQgZGVzdF90b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgY29uc3QgRlhfUkVDVCogcENsaXBSZWN0LCBGWF9EV09SRCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZyA9IDAsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMLCBpbnQgYmxlbmRfdHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTCkgPSAwOworCisgICAgdmlydHVhbCBGWF9CT09MCVN0YXJ0RElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIGludCBiaXRtYXBfYWxwaGEsIEZYX0RXT1JEIGNvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LCBGWF9EV09SRCBmbGFncywgRlhfTFBWT0lEJiBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwsIGludCBibGVuZF90eXBlID0gRlhESUJfQkxFTkRfTk9STUFMKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZYX0JPT0wJQ29udGludWVESUJpdHMoRlhfTFBWT0lEIGhhbmRsZSwgSUZYX1BhdXNlKiBwUGF1c2UpCisgICAgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkCUNhbmNlbERJQml0cyhGWF9MUFZPSUQgaGFuZGxlKSB7fQorCisgICAgdmlydHVhbCBGWF9CT09MIERyYXdEZXZpY2VUZXh0KGludCBuQ2hhcnMsIGNvbnN0IEZYVEVYVF9DSEFSUE9TKiBwQ2hhclBvcywgQ0ZYX0ZvbnQqIHBGb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlhfRm9udENhY2hlKiBwQ2FjaGUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLCBGWF9GTE9BVCBmb250X3NpemUsIEZYX0RXT1JEIGNvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZyA9IDAsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCoJR2V0UGxhdGZvcm1TdXJmYWNlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHZpcnR1YWwgaW50CQlHZXREcml2ZXJUeXBlKCkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCAgICBDbGVhckRyaXZlcigpIHt9Cit9OworY2xhc3MgSUZYX1BTT3V0cHV0Cit7CitwdWJsaWM6CisKKyAgICB2aXJ0dWFsIHZvaWQJT3V0cHV0UFMoRlhfTFBDU1RSIHN0cmluZywgaW50IGxlbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCAgUmVsZWFzZSgpID0gMDsKK307CitjbGFzcyBDUFNGb250OworY2xhc3MgQ0ZYX1BTUmVuZGVyZXIgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCisgICAgQ0ZYX1BTUmVuZGVyZXIoKTsKKworICAgIH5DRlhfUFNSZW5kZXJlcigpOworCisgICAgdm9pZAkJCUluaXQoSUZYX1BTT3V0cHV0KiBwT3V0cHV0LCBpbnQgcHNfbGV2ZWwsIGludCB3aWR0aCwgaW50IGhlaWdodCwgRlhfQk9PTCBiQ215a091dHB1dCk7CisgICAgRlhfQk9PTAkJCVN0YXJ0UmVuZGVyaW5nKCk7CisgICAgdm9pZAkJCUVuZFJlbmRlcmluZygpOworCisgICAgdm9pZAkJCVNhdmVTdGF0ZSgpOworCisgICAgdm9pZAkJCVJlc3RvcmVTdGF0ZShGWF9CT09MIGJLZWVwU2F2ZWQgPSBGQUxTRSk7CisKKyAgICB2b2lkCQkJU2V0Q2xpcF9QYXRoRmlsbChjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmlsbF9tb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgdm9pZAkJCVNldENsaXBfUGF0aFN0cm9rZShjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgRlhfUkVDVAkJCUdldENsaXBCb3goKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fQ2xpcEJveDsKKyAgICB9CisKKyAgICBGWF9CT09MCQkJRHJhd1BhdGgoY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfR3JhcGhTdGF0ZURhdGEqIHBHcmFwaFN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBmaWxsX2NvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBzdHJva2VfY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWxsX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgRlhfQk9PTAkJCVNldERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBGWF9EV09SRCBjb2xvciwgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCk7CisKKyAgICBGWF9CT09MCQkJU3RyZXRjaERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBGWF9EV09SRCBjb2xvciwgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsIEZYX0RXT1JEIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwpOworCisgICAgRlhfQk9PTAkJCURyYXdESUJpdHMoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwgRlhfRFdPUkQgY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgRlhfRFdPUkQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCk7CisKKyAgICBGWF9CT09MCQkJRHJhd1RleHQoaW50IG5DaGFycywgY29uc3QgRlhURVhUX0NIQVJQT1MqIHBDaGFyUG9zLCBDRlhfRm9udCogcEZvbnQsIENGWF9Gb250Q2FjaGUqIHBDYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsIEZYX0ZMT0FUIGZvbnRfc2l6ZSwgRlhfRFdPUkQgY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwpOworcHJpdmF0ZToKKworICAgIElGWF9QU091dHB1dCoJbV9wT3V0cHV0OworCisgICAgaW50CQkJCW1fUFNMZXZlbDsKKworICAgIENGWF9HcmFwaFN0YXRlRGF0YQltX0N1ckdyYXBoU3RhdGU7CisKKyAgICBGWF9CT09MCQkJbV9iR3JhcGhTdGF0ZVNldDsKKworICAgIEZYX0JPT0wJCQltX2JDbXlrT3V0cHV0OworCisgICAgRlhfQk9PTAkJCW1fYkNvbG9yU2V0OworCisgICAgRlhfRFdPUkQJCW1fTGFzdENvbG9yOworCisgICAgRlhfUkVDVAkJCW1fQ2xpcEJveDsKKworICAgIENGWF9BcnJheVRlbXBsYXRlPENQU0ZvbnQqPgltX1BTRm9udExpc3Q7CisKKyAgICBDRlhfQXJyYXlUZW1wbGF0ZTxGWF9SRUNUPgltX0NsaXBCb3hTdGFjazsKKyAgICBGWF9CT09MCQkJbV9iSW5pdGVkOworCisgICAgdm9pZAkJCU91dHB1dFBhdGgoY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlKTsKKworICAgIHZvaWQJCQlTZXRHcmFwaFN0YXRlKGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUpOworCisgICAgdm9pZAkJCVNldENvbG9yKEZYX0RXT1JEIGNvbG9yLCBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSk7CisKKyAgICB2b2lkCQkJRmluZFBTRm9udEdseXBoKENGWF9GYWNlQ2FjaGUqIHBGYWNlQ2FjaGUsIENGWF9Gb250KiBwRm9udCwgY29uc3QgRlhURVhUX0NIQVJQT1MmIGNoYXJwb3MsIGludCYgcHNfZm9udG51bSwgaW50ICZwc19nbHlwaGluZGV4KTsKKworICAgIHZvaWQJCQlXcml0ZVBTQmluYXJ5KEZYX0xQQ0JZVEUgZGF0YSwgaW50IGxlbik7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL2luY2x1ZGUvZnhnZS9meF9nZV9hcHBsZS5oIGIvY29yZS9pbmNsdWRlL2Z4Z2UvZnhfZ2VfYXBwbGUuaAppbmRleCBmMTNhMWIzLi40NGJmMmEwIDEwMDY0NAotLS0gYS9jb3JlL2luY2x1ZGUvZnhnZS9meF9nZV9hcHBsZS5oCisrKyBiL2NvcmUvaW5jbHVkZS9meGdlL2Z4X2dlX2FwcGxlLmgKQEAgLTEsMjYgKzEsMjYgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0ZYX0dFX0FQUExFX0hfDQotI2RlZmluZSBfRlhfR0VfQVBQTEVfSF8NCi0jaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfDQotY2xhc3MgQ0ZYX1F1YXJ0ekRldmljZSA6IHB1YmxpYyBDRlhfUmVuZGVyRGV2aWNlDQotew0KLXB1YmxpYzoNCi0gICAgQ0ZYX1F1YXJ0ekRldmljZSgpOw0KLSAgICB+Q0ZYX1F1YXJ0ekRldmljZSgpOw0KLSAgICBGWF9CT09MIEF0dGFjaChDR0NvbnRleHRSZWYgY29udGV4dCwgRlhfSU5UMzIgbkRldmljZUNsYXNzID0gRlhEQ19ESVNQTEFZKTsNCi0gICAgRlhfQk9PTCBBdHRhY2goQ0ZYX0RJQml0bWFwKiBwQml0bWFwKTsNCi0gICAgRlhfQk9PTCBDcmVhdGUoRlhfSU5UMzIgd2lkdGgsIEZYX0lOVDMyIGhlaWdodCwgRlhESUJfRm9ybWF0IGZvcm1hdCk7DQotDQotICAgIENHQ29udGV4dFJlZiBHZXRDb250ZXh0KCk7DQotDQotcHJvdGVjdGVkOg0KLSAgICBDR0NvbnRleHRSZWYgbV9wQ29udGV4dDsNCi0gICAgRlhfQk9PTCBtX2JPd25lZEJpdG1hcDsNCi19Ow0KLSNlbmRpZg0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZYX0dFX0FQUExFX0hfCisjZGVmaW5lIF9GWF9HRV9BUFBMRV9IXworI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXworY2xhc3MgQ0ZYX1F1YXJ0ekRldmljZSA6IHB1YmxpYyBDRlhfUmVuZGVyRGV2aWNlCit7CitwdWJsaWM6CisgICAgQ0ZYX1F1YXJ0ekRldmljZSgpOworICAgIH5DRlhfUXVhcnR6RGV2aWNlKCk7CisgICAgRlhfQk9PTCBBdHRhY2goQ0dDb250ZXh0UmVmIGNvbnRleHQsIEZYX0lOVDMyIG5EZXZpY2VDbGFzcyA9IEZYRENfRElTUExBWSk7CisgICAgRlhfQk9PTCBBdHRhY2goQ0ZYX0RJQml0bWFwKiBwQml0bWFwKTsKKyAgICBGWF9CT09MIENyZWF0ZShGWF9JTlQzMiB3aWR0aCwgRlhfSU5UMzIgaGVpZ2h0LCBGWERJQl9Gb3JtYXQgZm9ybWF0KTsKKworICAgIENHQ29udGV4dFJlZiBHZXRDb250ZXh0KCk7CisKK3Byb3RlY3RlZDoKKyAgICBDR0NvbnRleHRSZWYgbV9wQ29udGV4dDsKKyAgICBGWF9CT09MIG1fYk93bmVkQml0bWFwOworfTsKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL2luY2x1ZGUvZnhnZS9meF9nZV93aW4zMi5oIGIvY29yZS9pbmNsdWRlL2Z4Z2UvZnhfZ2Vfd2luMzIuaAppbmRleCAwYjQyMWRiLi4zMTFkMzU1IDEwMDY0NAotLS0gYS9jb3JlL2luY2x1ZGUvZnhnZS9meF9nZV93aW4zMi5oCisrKyBiL2NvcmUvaW5jbHVkZS9meGdlL2Z4X2dlX3dpbjMyLmgKQEAgLTEsMTA1ICsxLDEwNSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlhfR0VfV0lOMzJfSF8NCi0jZGVmaW5lIF9GWF9HRV9XSU4zMl9IXw0KLSNpZmRlZiBfV0lOMzINCi0jaWZuZGVmIF9XSU5ET1dTXw0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+DQotI2VuZGlmDQotI2RlZmluZSBXSU5ESUJfT1BFTl9NRU1PUlkgICAgMHgxDQotI2RlZmluZSBXSU5ESUJfT1BFTl9QQVRITkFNRSAgMHgyDQotdHlwZWRlZiBzdHJ1Y3QgIFdJTkRJQl9PcGVuX0FyZ3NfIHsNCi0NCi0gICAgaW50ICAgICAgICAgZmxhZ3M7DQotDQotICAgIGNvbnN0IEZYX0JZVEUqICBtZW1vcnlfYmFzZTsNCi0NCi0gICAgc2l6ZV90ICAgIG1lbW9yeV9zaXplOw0KLQ0KLSAgICBGWF9MUENXU1RSICBwYXRoX25hbWU7DQotfSBXSU5ESUJfT3Blbl9BcmdzXzsNCi1jbGFzcyBDRlhfV2luZG93c0RJQiA6IHB1YmxpYyBDRlhfRElCaXRtYXANCi17DQotcHVibGljOg0KLQ0KLSAgICBzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJR2V0Qml0bWFwSW5mbyhjb25zdCBDRlhfRElCaXRtYXAqIHBCaXRtYXApOw0KLQ0KLSAgICBzdGF0aWMgQ0ZYX0RJQml0bWFwKiBMb2FkRnJvbUJ1ZihCSVRNQVBJTkZPKiBwYm1pLCB2b2lkKiBwRGF0YSk7DQotDQotICAgIHN0YXRpYyBIQklUTUFQCQlHZXREREJpdG1hcChjb25zdCBDRlhfRElCaXRtYXAqIHBCaXRtYXAsIEhEQyBoREMpOw0KLQ0KLSAgICBzdGF0aWMgQ0ZYX0RJQml0bWFwKiBMb2FkRnJvbUREQihIREMgaERDLCBIQklUTUFQIGhCaXRtYXAsIEZYX0RXT1JEKiBwUGFsZXR0ZSA9IE5VTEwsIEZYX0RXT1JEIHNpemUgPSAyNTYpOw0KLQ0KLSAgICBzdGF0aWMgQ0ZYX0RJQml0bWFwKiBMb2FkRnJvbUZpbGUoRlhfTFBDV1NUUiBmaWxlbmFtZSk7DQotDQotICAgIHN0YXRpYyBDRlhfRElCaXRtYXAqIExvYWRGcm9tRmlsZShGWF9MUENTVFIgZmlsZW5hbWUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBMb2FkRnJvbUZpbGUoQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChmaWxlbmFtZSkpOw0KLSAgICB9DQotDQotICAgIHN0YXRpYyBDRlhfRElCaXRtYXAqIExvYWRESUJpdG1hcChXSU5ESUJfT3Blbl9BcmdzXyBhcmdzKTsNCi0NCi0gICAgQ0ZYX1dpbmRvd3NESUIoSERDIGhEQywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsNCi0NCi0gICAgfkNGWF9XaW5kb3dzRElCKCk7DQotDQotICAgIEhEQwkJCQkJR2V0REMoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9oTWVtREM7DQotICAgIH0NCi0NCi0gICAgSEJJVE1BUAkJCQlHZXRXaW5kb3dzQml0bWFwKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1faEJpdG1hcDsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkCQkJCUxvYWRGcm9tRGV2aWNlKEhEQyBoREMsIGludCBsZWZ0LCBpbnQgdG9wKTsNCi0NCi0gICAgdm9pZAkJCQlTZXRUb0RldmljZShIREMgaERDLCBpbnQgbGVmdCwgaW50IHRvcCk7DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBIREMJCQkJCW1faE1lbURDOw0KLQ0KLSAgICBIQklUTUFQCQkJCW1faEJpdG1hcDsNCi0NCi0gICAgSEJJVE1BUAkJCQltX2hPbGRCaXRtYXA7DQotfTsNCi1jbGFzcyBDRlhfV2luZG93c0RldmljZSA6IHB1YmxpYyBDRlhfUmVuZGVyRGV2aWNlDQotew0KLXB1YmxpYzoNCi0gICAgc3RhdGljIElGWF9SZW5kZXJEZXZpY2VEcml2ZXIqCUNyZWF0ZURyaXZlcihIREMgaERDLCBGWF9CT09MIGJDbXlrT3V0cHV0ID0gRkFMU0UpOw0KLQ0KLSAgICBDRlhfV2luZG93c0RldmljZShIREMgaERDLCBGWF9CT09MIGJDbXlrT3V0cHV0ID0gRkFMU0UsIEZYX0JPT0wgYkZvcmNlUFNPdXRwdXQgPSBGQUxTRSwgaW50IHBzTGV2ZWwgPSAyKTsNCi0NCi0gICAgSERDCQlHZXREQygpIGNvbnN0Ow0KLQ0KLSAgICBGWF9CT09MIG1fYkZvcmNlUFNPdXRwdXQ7DQotDQotICAgIHN0YXRpYyBpbnQgbV9wc0xldmVsOw0KLX07DQotY2xhc3MgQ0ZYX1dpbkJpdG1hcERldmljZSA6IHB1YmxpYyBDRlhfUmVuZGVyRGV2aWNlDQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ0ZYX1dpbkJpdG1hcERldmljZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIEZYRElCX0Zvcm1hdCBmb3JtYXQpOw0KLQ0KLSAgICB+Q0ZYX1dpbkJpdG1hcERldmljZSgpOw0KLQ0KLSAgICBIREMJCUdldERDKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1faERDOw0KLSAgICB9DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBIQklUTUFQCW1faEJpdG1hcDsNCi0NCi0gICAgSEJJVE1BUCBtX2hPbGRCaXRtYXA7DQotDQotICAgIEhEQwkJbV9oREM7DQotfTsNCi0jZW5kaWYNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9GWF9HRV9XSU4zMl9IXworI2RlZmluZSBfRlhfR0VfV0lOMzJfSF8KKyNpZmRlZiBfV0lOMzIKKyNpZm5kZWYgX1dJTkRPV1NfCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisjZGVmaW5lIFdJTkRJQl9PUEVOX01FTU9SWSAgICAweDEKKyNkZWZpbmUgV0lORElCX09QRU5fUEFUSE5BTUUgIDB4MgordHlwZWRlZiBzdHJ1Y3QgIFdJTkRJQl9PcGVuX0FyZ3NfIHsKKworICAgIGludCAgICAgICAgIGZsYWdzOworCisgICAgY29uc3QgRlhfQllURSogIG1lbW9yeV9iYXNlOworCisgICAgc2l6ZV90ICAgIG1lbW9yeV9zaXplOworCisgICAgRlhfTFBDV1NUUiAgcGF0aF9uYW1lOworfSBXSU5ESUJfT3Blbl9BcmdzXzsKK2NsYXNzIENGWF9XaW5kb3dzRElCIDogcHVibGljIENGWF9ESUJpdG1hcAoreworcHVibGljOgorCisgICAgc3RhdGljIENGWF9CeXRlU3RyaW5nCUdldEJpdG1hcEluZm8oY29uc3QgQ0ZYX0RJQml0bWFwKiBwQml0bWFwKTsKKworICAgIHN0YXRpYyBDRlhfRElCaXRtYXAqIExvYWRGcm9tQnVmKEJJVE1BUElORk8qIHBibWksIHZvaWQqIHBEYXRhKTsKKworICAgIHN0YXRpYyBIQklUTUFQCQlHZXREREJpdG1hcChjb25zdCBDRlhfRElCaXRtYXAqIHBCaXRtYXAsIEhEQyBoREMpOworCisgICAgc3RhdGljIENGWF9ESUJpdG1hcCogTG9hZEZyb21EREIoSERDIGhEQywgSEJJVE1BUCBoQml0bWFwLCBGWF9EV09SRCogcFBhbGV0dGUgPSBOVUxMLCBGWF9EV09SRCBzaXplID0gMjU2KTsKKworICAgIHN0YXRpYyBDRlhfRElCaXRtYXAqIExvYWRGcm9tRmlsZShGWF9MUENXU1RSIGZpbGVuYW1lKTsKKworICAgIHN0YXRpYyBDRlhfRElCaXRtYXAqIExvYWRGcm9tRmlsZShGWF9MUENTVFIgZmlsZW5hbWUpCisgICAgeworICAgICAgICByZXR1cm4gTG9hZEZyb21GaWxlKENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoZmlsZW5hbWUpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQ0ZYX0RJQml0bWFwKiBMb2FkRElCaXRtYXAoV0lORElCX09wZW5fQXJnc18gYXJncyk7CisKKyAgICBDRlhfV2luZG93c0RJQihIREMgaERDLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCisgICAgfkNGWF9XaW5kb3dzRElCKCk7CisKKyAgICBIREMJCQkJCUdldERDKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2hNZW1EQzsKKyAgICB9CisKKyAgICBIQklUTUFQCQkJCUdldFdpbmRvd3NCaXRtYXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faEJpdG1hcDsKKyAgICB9CisKKyAgICB2b2lkCQkJCUxvYWRGcm9tRGV2aWNlKEhEQyBoREMsIGludCBsZWZ0LCBpbnQgdG9wKTsKKworICAgIHZvaWQJCQkJU2V0VG9EZXZpY2UoSERDIGhEQywgaW50IGxlZnQsIGludCB0b3ApOworcHJvdGVjdGVkOgorCisgICAgSERDCQkJCQltX2hNZW1EQzsKKworICAgIEhCSVRNQVAJCQkJbV9oQml0bWFwOworCisgICAgSEJJVE1BUAkJCQltX2hPbGRCaXRtYXA7Cit9OworY2xhc3MgQ0ZYX1dpbmRvd3NEZXZpY2UgOiBwdWJsaWMgQ0ZYX1JlbmRlckRldmljZQoreworcHVibGljOgorICAgIHN0YXRpYyBJRlhfUmVuZGVyRGV2aWNlRHJpdmVyKglDcmVhdGVEcml2ZXIoSERDIGhEQywgRlhfQk9PTCBiQ215a091dHB1dCA9IEZBTFNFKTsKKworICAgIENGWF9XaW5kb3dzRGV2aWNlKEhEQyBoREMsIEZYX0JPT0wgYkNteWtPdXRwdXQgPSBGQUxTRSwgRlhfQk9PTCBiRm9yY2VQU091dHB1dCA9IEZBTFNFLCBpbnQgcHNMZXZlbCA9IDIpOworCisgICAgSERDCQlHZXREQygpIGNvbnN0OworCisgICAgRlhfQk9PTCBtX2JGb3JjZVBTT3V0cHV0OworCisgICAgc3RhdGljIGludCBtX3BzTGV2ZWw7Cit9OworY2xhc3MgQ0ZYX1dpbkJpdG1hcERldmljZSA6IHB1YmxpYyBDRlhfUmVuZGVyRGV2aWNlCit7CitwdWJsaWM6CisKKyAgICBDRlhfV2luQml0bWFwRGV2aWNlKGludCB3aWR0aCwgaW50IGhlaWdodCwgRlhESUJfRm9ybWF0IGZvcm1hdCk7CisKKyAgICB+Q0ZYX1dpbkJpdG1hcERldmljZSgpOworCisgICAgSERDCQlHZXREQygpCisgICAgeworICAgICAgICByZXR1cm4gbV9oREM7CisgICAgfQorcHJvdGVjdGVkOgorCisgICAgSEJJVE1BUAltX2hCaXRtYXA7CisKKyAgICBIQklUTUFQIG1faE9sZEJpdG1hcDsKKworICAgIEhEQwkJbV9oREM7Cit9OworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvaW5jbHVkZS90aGlyZHBhcnRpZXMvZnJlZXR5cGUvZm94aXRuYW1lcy5oIGIvY29yZS9pbmNsdWRlL3RoaXJkcGFydGllcy9mcmVldHlwZS9mb3hpdG5hbWVzLmgKaW5kZXggNTc0OWY5Yi4uZTE2M2ZiOCAxMDA2NDQKLS0tIGEvY29yZS9pbmNsdWRlL3RoaXJkcGFydGllcy9mcmVldHlwZS9mb3hpdG5hbWVzLmgKKysrIGIvY29yZS9pbmNsdWRlL3RoaXJkcGFydGllcy9mcmVldHlwZS9mb3hpdG5hbWVzLmgKQEAgLTEsMjgzICsxLDI4MyBAQAotI2lmbmRlZiBfRlhfRlJFRVRZUEVfRE9OVF9SRU5BTUVfDQotLy8gVG8gYXZvaWQgYW55IHBvc3NpYmxlIGxpbmtpbmcgY29uZmxpY3Rpb24sIHdlIHJlbmFtZSBhbGwgRnJlZVR5cGUgZXhwb3J0ZWQgbmFtZXMNCi0NCi0jZGVmaW5lIEZUX0luaXRfRnJlZVR5cGUgRlBERkFQSV9GVF9Jbml0X0ZyZWVUeXBlDQotI2RlZmluZSBGVF9Eb25lX0ZyZWVUeXBlIEZQREZBUElfRlRfRG9uZV9GcmVlVHlwZQ0KLSNkZWZpbmUgRlRfTmV3X0ZhY2UJCUZQREZBUElfRlRfTmV3X0ZhY2UNCi0jZGVmaW5lIEZUX1NlbGVjdF9DaGFybWFwIEZQREZBUElfRlRfU2VsZWN0X0NoYXJtYXAgDQotI2RlZmluZSBGVF9Eb25lX0ZhY2UgRlBERkFQSV9GVF9Eb25lX0ZhY2UgDQotI2RlZmluZSBGVF9HZXRfQ2hhcm1hcF9JbmRleCBGUERGQVBJX0ZUX0dldF9DaGFybWFwX0luZGV4IA0KLSNkZWZpbmUgRlRfTmV3X01lbW9yeV9GYWNlIEZQREZBUElfRlRfTmV3X01lbW9yeV9GYWNlIA0KLSNkZWZpbmUgRlRfTXVsRGl2IEZQREZBUElfRlRfTXVsRGl2IA0KLSNkZWZpbmUgRlRfVmVjdG9yX1RyYW5zZm9ybSBGUERGQVBJX0ZUX1ZlY3Rvcl9UcmFuc2Zvcm0gDQotI2RlZmluZSBGVF9Db3MgRlBERkFQSV9GVF9Db3MgDQotI2RlZmluZSBGVF9TaW4gRlBERkFQSV9GVF9TaW4gDQotI2RlZmluZSBGVF9Mb2FkX0dseXBoIEZQREZBUElfRlRfTG9hZF9HbHlwaCANCi0jZGVmaW5lIEZUX0RpdkZpeCBGUERGQVBJX0ZUX0RpdkZpeCANCi0jZGVmaW5lIEZUX1JlYWxsb2MgRlBERkFQSV9GVF9SZWFsbG9jIA0KLSNkZWZpbmUgRlRfQWxsb2MgRlBERkFQSV9GVF9BbGxvYyANCi0jZGVmaW5lIEZUX0dldF9DaGFyX0luZGV4IEZQREZBUElfRlRfR2V0X0NoYXJfSW5kZXggDQotI2RlZmluZSBGVF9HbHlwaExvYWRlcl9DaGVja1BvaW50cyBGUERGQVBJX0ZUX0dseXBoTG9hZGVyX0NoZWNrUG9pbnRzIA0KLSNkZWZpbmUgRlRfR2x5cGhMb2FkZXJfQWRkIEZQREZBUElfRlRfR2x5cGhMb2FkZXJfQWRkIA0KLSNkZWZpbmUgRlRfR2x5cGhMb2FkZXJfQ2hlY2tTdWJHbHlwaHMgRlBERkFQSV9GVF9HbHlwaExvYWRlcl9DaGVja1N1YkdseXBocyANCi0jZGVmaW5lIEZUX091dGxpbmVfVHJhbnNsYXRlIEZQREZBUElfRlRfT3V0bGluZV9UcmFuc2xhdGUgDQotI2RlZmluZSBGVF9PdXRsaW5lX1RyYW5zZm9ybSBGUERGQVBJX0ZUX091dGxpbmVfVHJhbnNmb3JtIA0KLSNkZWZpbmUgRlRfT3V0bGluZV9HZXRfQ0JveCBGUERGQVBJX0ZUX091dGxpbmVfR2V0X0NCb3ggDQotI2RlZmluZSBGVF9HbHlwaExvYWRlcl9SZXdpbmQgRlBERkFQSV9GVF9HbHlwaExvYWRlcl9SZXdpbmQgDQotI2RlZmluZSBGVF9HbHlwaExvYWRlcl9Db3B5UG9pbnRzIEZQREZBUElfRlRfR2x5cGhMb2FkZXJfQ29weVBvaW50cyANCi0jZGVmaW5lIEZUX0dseXBoTG9hZGVyX05ldyBGUERGQVBJX0ZUX0dseXBoTG9hZGVyX05ldyANCi0jZGVmaW5lIEZUX0dseXBoTG9hZGVyX0NyZWF0ZUV4dHJhIEZQREZBUElfRlRfR2x5cGhMb2FkZXJfQ3JlYXRlRXh0cmEgDQotI2RlZmluZSBGVF9GcmVlIEZQREZBUElfRlRfRnJlZSANCi0jZGVmaW5lIEZUX1NldF9DaGFybWFwIEZQREZBUElfRlRfU2V0X0NoYXJtYXAgDQotI2RlZmluZSBGVF9HbHlwaExvYWRlcl9Eb25lIEZQREZBUElfRlRfR2x5cGhMb2FkZXJfRG9uZSANCi0jZGVmaW5lIF9kZWJ1Z19tZW1fZHVtbXkgRlBERkFQSV9fZGVidWdfbWVtX2R1bW15IA0KLSNkZWZpbmUgX2RlYnVnX21lbV9kdW1teSBGUERGQVBJX19kZWJ1Z19tZW1fZHVtbXkgDQotI2RlZmluZSBGVF9RQWxsb2MgRlBERkFQSV9GVF9RQWxsb2MgDQotI2RlZmluZSBGVF9RUmVhbGxvYyBGUERGQVBJX0ZUX1FSZWFsbG9jIA0KLSNkZWZpbmUgRlRfTGlzdF9GaW5kIEZQREZBUElfRlRfTGlzdF9GaW5kIA0KLSNkZWZpbmUgRlRfTGlzdF9BZGQgRlBERkFQSV9GVF9MaXN0X0FkZCANCi0jZGVmaW5lIEZUX0xpc3RfSW5zZXJ0IEZQREZBUElfRlRfTGlzdF9JbnNlcnQgDQotI2RlZmluZSBGVF9MaXN0X1JlbW92ZSBGUERGQVBJX0ZUX0xpc3RfUmVtb3ZlIA0KLSNkZWZpbmUgRlRfTGlzdF9VcCBGUERGQVBJX0ZUX0xpc3RfVXAgDQotI2RlZmluZSBGVF9MaXN0X0l0ZXJhdGUgRlBERkFQSV9GVF9MaXN0X0l0ZXJhdGUgDQotI2RlZmluZSBGVF9MaXN0X0ZpbmFsaXplIEZQREZBUElfRlRfTGlzdF9GaW5hbGl6ZSANCi0jZGVmaW5lIGZ0X2hpZ2hwb3cyIEZQREZBUElfZnRfaGlnaHBvdzIgDQotI2RlZmluZSBGVF9TdHJlYW1fT3Blbk1lbW9yeSBGUERGQVBJX0ZUX1N0cmVhbV9PcGVuTWVtb3J5IA0KLSNkZWZpbmUgRlRfU3RyZWFtX0Nsb3NlIEZQREZBUElfRlRfU3RyZWFtX0Nsb3NlIA0KLSNkZWZpbmUgRlRfU3RyZWFtX1NlZWsgRlBERkFQSV9GVF9TdHJlYW1fU2VlayANCi0jZGVmaW5lIEZUX1N0cmVhbV9Ta2lwIEZQREZBUElfRlRfU3RyZWFtX1NraXAgDQotI2RlZmluZSBGVF9TdHJlYW1fUG9zIEZQREZBUElfRlRfU3RyZWFtX1BvcyANCi0jZGVmaW5lIEZUX1N0cmVhbV9SZWFkQXQgRlBERkFQSV9GVF9TdHJlYW1fUmVhZEF0IA0KLSNkZWZpbmUgRlRfU3RyZWFtX1JlYWQgRlBERkFQSV9GVF9TdHJlYW1fUmVhZCANCi0jZGVmaW5lIEZUX1N0cmVhbV9UcnlSZWFkIEZQREZBUElfRlRfU3RyZWFtX1RyeVJlYWQgDQotI2RlZmluZSBGVF9TdHJlYW1fRW50ZXJGcmFtZSBGUERGQVBJX0ZUX1N0cmVhbV9FbnRlckZyYW1lIA0KLSNkZWZpbmUgRlRfU3RyZWFtX0V4dHJhY3RGcmFtZSBGUERGQVBJX0ZUX1N0cmVhbV9FeHRyYWN0RnJhbWUgDQotI2RlZmluZSBGVF9TdHJlYW1fUmVsZWFzZUZyYW1lIEZQREZBUElfRlRfU3RyZWFtX1JlbGVhc2VGcmFtZSANCi0jZGVmaW5lIEZUX1N0cmVhbV9FeGl0RnJhbWUgRlBERkFQSV9GVF9TdHJlYW1fRXhpdEZyYW1lIA0KLSNkZWZpbmUgRlRfU3RyZWFtX0dldENoYXIgRlBERkFQSV9GVF9TdHJlYW1fR2V0Q2hhciANCi0jZGVmaW5lIEZUX1N0cmVhbV9HZXRTaG9ydCBGUERGQVBJX0ZUX1N0cmVhbV9HZXRTaG9ydCANCi0jZGVmaW5lIEZUX1N0cmVhbV9HZXRTaG9ydExFIEZQREZBUElfRlRfU3RyZWFtX0dldFNob3J0TEUgDQotI2RlZmluZSBGVF9TdHJlYW1fR2V0T2Zmc2V0IEZQREZBUElfRlRfU3RyZWFtX0dldE9mZnNldCANCi0jZGVmaW5lIEZUX1N0cmVhbV9HZXRMb25nIEZQREZBUElfRlRfU3RyZWFtX0dldExvbmcgDQotI2RlZmluZSBGVF9TdHJlYW1fR2V0TG9uZ0xFIEZQREZBUElfRlRfU3RyZWFtX0dldExvbmdMRSANCi0jZGVmaW5lIEZUX1N0cmVhbV9SZWFkQ2hhciBGUERGQVBJX0ZUX1N0cmVhbV9SZWFkQ2hhciANCi0jZGVmaW5lIEZUX1N0cmVhbV9SZWFkU2hvcnQgRlBERkFQSV9GVF9TdHJlYW1fUmVhZFNob3J0IA0KLSNkZWZpbmUgRlRfU3RyZWFtX1JlYWRTaG9ydExFIEZQREZBUElfRlRfU3RyZWFtX1JlYWRTaG9ydExFIA0KLSNkZWZpbmUgRlRfU3RyZWFtX1JlYWRPZmZzZXQgRlBERkFQSV9GVF9TdHJlYW1fUmVhZE9mZnNldCANCi0jZGVmaW5lIEZUX1N0cmVhbV9SZWFkTG9uZyBGUERGQVBJX0ZUX1N0cmVhbV9SZWFkTG9uZyANCi0jZGVmaW5lIEZUX1N0cmVhbV9SZWFkTG9uZ0xFIEZQREZBUElfRlRfU3RyZWFtX1JlYWRMb25nTEUgDQotI2RlZmluZSBGVF9TdHJlYW1fUmVhZEZpZWxkcyBGUERGQVBJX0ZUX1N0cmVhbV9SZWFkRmllbGRzIA0KLSNkZWZpbmUgRlRfUm91bmRGaXggRlBERkFQSV9GVF9Sb3VuZEZpeCANCi0jZGVmaW5lIEZUX0NlaWxGaXggRlBERkFQSV9GVF9DZWlsRml4IA0KLSNkZWZpbmUgRlRfRmxvb3JGaXggRlBERkFQSV9GVF9GbG9vckZpeCANCi0jZGVmaW5lIEZUX1NxcnQzMiBGUERGQVBJX0ZUX1NxcnQzMiANCi0jZGVmaW5lIEZUX1NxcnRGaXhlZCBGUERGQVBJX0ZUX1NxcnRGaXhlZCANCi0jZGVmaW5lIEZUX1RhbiBGUERGQVBJX0ZUX1RhbiANCi0jZGVmaW5lIEZUX0F0YW4yIEZQREZBUElfRlRfQXRhbjIgDQotI2RlZmluZSBGVF9WZWN0b3JfVW5pdCBGUERGQVBJX0ZUX1ZlY3Rvcl9Vbml0IA0KLSNkZWZpbmUgRlRfVmVjdG9yX1JvdGF0ZSBGUERGQVBJX0ZUX1ZlY3Rvcl9Sb3RhdGUgDQotI2RlZmluZSBGVF9WZWN0b3JfTGVuZ3RoIEZQREZBUElfRlRfVmVjdG9yX0xlbmd0aCANCi0jZGVmaW5lIEZUX1ZlY3Rvcl9Qb2xhcml6ZSBGUERGQVBJX0ZUX1ZlY3Rvcl9Qb2xhcml6ZSANCi0jZGVmaW5lIEZUX1ZlY3Rvcl9Gcm9tX1BvbGFyIEZQREZBUElfRlRfVmVjdG9yX0Zyb21fUG9sYXIgDQotI2RlZmluZSBGVF9BbmdsZV9EaWZmIEZQREZBUElfRlRfQW5nbGVfRGlmZiANCi0jZGVmaW5lIEZUX091dGxpbmVfRGVjb21wb3NlIEZQREZBUElfRlRfT3V0bGluZV9EZWNvbXBvc2UgDQotI2RlZmluZSBGVF9PdXRsaW5lX0RvbmVfSW50ZXJuYWwgRlBERkFQSV9GVF9PdXRsaW5lX0RvbmVfSW50ZXJuYWwgDQotI2RlZmluZSBGVF9PdXRsaW5lX05ld19JbnRlcm5hbCBGUERGQVBJX0ZUX091dGxpbmVfTmV3X0ludGVybmFsIA0KLSNkZWZpbmUgRlRfT3V0bGluZV9OZXcgRlBERkFQSV9GVF9PdXRsaW5lX05ldyANCi0jZGVmaW5lIEZUX091dGxpbmVfQ2hlY2sgRlBERkFQSV9GVF9PdXRsaW5lX0NoZWNrIA0KLSNkZWZpbmUgRlRfT3V0bGluZV9Db3B5IEZQREZBUElfRlRfT3V0bGluZV9Db3B5IA0KLSNkZWZpbmUgRlRfT3V0bGluZV9Eb25lIEZQREZBUElfRlRfT3V0bGluZV9Eb25lIA0KLSNkZWZpbmUgRlRfT3V0bGluZV9SZXZlcnNlIEZQREZBUElfRlRfT3V0bGluZV9SZXZlcnNlIA0KLSNkZWZpbmUgRlRfU2V0X1JlbmRlcmVyIEZQREZBUElfRlRfU2V0X1JlbmRlcmVyIA0KLSNkZWZpbmUgRlRfTG9va3VwX1JlbmRlcmVyIEZQREZBUElfRlRfTG9va3VwX1JlbmRlcmVyIA0KLSNkZWZpbmUgRlRfT3V0bGluZV9SZW5kZXIgRlBERkFQSV9GVF9PdXRsaW5lX1JlbmRlciANCi0jZGVmaW5lIEZUX091dGxpbmVfR2V0X0JpdG1hcCBGUERGQVBJX0ZUX091dGxpbmVfR2V0X0JpdG1hcCANCi0jZGVmaW5lIEZUX091dGxpbmVfR2V0X09yaWVudGF0aW9uIEZQREZBUElfRlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb24gDQotI2RlZmluZSBGVF9PdXRsaW5lX0VtYm9sZGVuIEZQREZBUElfRlRfT3V0bGluZV9FbWJvbGRlbiANCi0jZGVmaW5lIEZUX0dseXBoTG9hZGVyX1Jlc2V0IEZQREZBUElfRlRfR2x5cGhMb2FkZXJfUmVzZXQgDQotI2RlZmluZSBGVF9HbHlwaExvYWRlcl9QcmVwYXJlIEZQREZBUElfRlRfR2x5cGhMb2FkZXJfUHJlcGFyZSANCi0jZGVmaW5lIGZ0X3NlcnZpY2VfbGlzdF9sb29rdXAgRlBERkFQSV9mdF9zZXJ2aWNlX2xpc3RfbG9va3VwIA0KLSNkZWZpbmUgZnRfdmFsaWRhdG9yX2luaXQgRlBERkFQSV9mdF92YWxpZGF0b3JfaW5pdCANCi0jZGVmaW5lIGZ0X3ZhbGlkYXRvcl9ydW4gRlBERkFQSV9mdF92YWxpZGF0b3JfcnVuIA0KLSNkZWZpbmUgZnRfdmFsaWRhdG9yX2Vycm9yIEZQREZBUElfZnRfdmFsaWRhdG9yX2Vycm9yIA0KLSNkZWZpbmUgRlRfU3RyZWFtX05ldyBGUERGQVBJX0ZUX1N0cmVhbV9OZXcgDQotI2RlZmluZSBGVF9TdHJlYW1fRnJlZSBGUERGQVBJX0ZUX1N0cmVhbV9GcmVlIA0KLSNkZWZpbmUgZnRfZ2x5cGhzbG90X2ZyZWVfYml0bWFwIEZQREZBUElfZnRfZ2x5cGhzbG90X2ZyZWVfYml0bWFwIA0KLSNkZWZpbmUgZnRfZ2x5cGhzbG90X3NldF9iaXRtYXAgRlBERkFQSV9mdF9nbHlwaHNsb3Rfc2V0X2JpdG1hcCANCi0jZGVmaW5lIEZUX0dseXBoU2xvdF9Pd25fQml0bWFwIEZQREZBUElfRlRfR2x5cGhTbG90X093bl9CaXRtYXANCi0jZGVmaW5lIGZ0X2dseXBoc2xvdF9hbGxvY19iaXRtYXAgRlBERkFQSV9mdF9nbHlwaHNsb3RfYWxsb2NfYml0bWFwIA0KLSNkZWZpbmUgRlRfTmV3X0dseXBoU2xvdCBGUERGQVBJX0ZUX05ld19HbHlwaFNsb3QgDQotI2RlZmluZSBGVF9Eb25lX0dseXBoU2xvdCBGUERGQVBJX0ZUX0RvbmVfR2x5cGhTbG90IA0KLSNkZWZpbmUgRlRfU2V0X1RyYW5zZm9ybSBGUERGQVBJX0ZUX1NldF9UcmFuc2Zvcm0gDQotI2RlZmluZSBGVF9SZW5kZXJfR2x5cGhfSW50ZXJuYWwgRlBERkFQSV9GVF9SZW5kZXJfR2x5cGhfSW50ZXJuYWwgDQotI2RlZmluZSBGVF9SZW5kZXJfR2x5cGggRlBERkFQSV9GVF9SZW5kZXJfR2x5cGggDQotI2RlZmluZSBGVF9Mb2FkX0NoYXIgRlBERkFQSV9GVF9Mb2FkX0NoYXIgDQotI2RlZmluZSBGVF9OZXdfU2l6ZSBGUERGQVBJX0ZUX05ld19TaXplIA0KLSNkZWZpbmUgRlRfT3Blbl9GYWNlIEZQREZBUElfRlRfT3Blbl9GYWNlIA0KLSNkZWZpbmUgRlRfQXR0YWNoX1N0cmVhbSBGUERGQVBJX0ZUX0F0dGFjaF9TdHJlYW0gDQotI2RlZmluZSBGVF9BdHRhY2hfRmlsZSBGUERGQVBJX0ZUX0F0dGFjaF9GaWxlIA0KLSNkZWZpbmUgRlRfRG9uZV9TaXplIEZQREZBUElfRlRfRG9uZV9TaXplIA0KLSNkZWZpbmUgRlRfU2V0X0NoYXJfU2l6ZSBGUERGQVBJX0ZUX1NldF9DaGFyX1NpemUgDQotI2RlZmluZSBGVF9TZXRfUGl4ZWxfU2l6ZXMgRlBERkFQSV9GVF9TZXRfUGl4ZWxfU2l6ZXMgDQotI2RlZmluZSBGVF9HZXRfS2VybmluZyBGUERGQVBJX0ZUX0dldF9LZXJuaW5nIA0KLSNkZWZpbmUgRlRfQ01hcF9Eb25lIEZQREZBUElfRlRfQ01hcF9Eb25lIA0KLSNkZWZpbmUgRlRfQ01hcF9OZXcgRlBERkFQSV9GVF9DTWFwX05ldyANCi0jZGVmaW5lIEZUX0dldF9OZXh0X0NoYXIgRlBERkFQSV9GVF9HZXRfTmV4dF9DaGFyIA0KLSNkZWZpbmUgRlRfR2V0X0ZpcnN0X0NoYXIgRlBERkFQSV9GVF9HZXRfRmlyc3RfQ2hhciANCi0jZGVmaW5lIEZUX0dldF9OYW1lX0luZGV4IEZQREZBUElfRlRfR2V0X05hbWVfSW5kZXggDQotI2RlZmluZSBGVF9HZXRfR2x5cGhfTmFtZSBGUERGQVBJX0ZUX0dldF9HbHlwaF9OYW1lIA0KLSNkZWZpbmUgRlRfR2V0X1Bvc3RzY3JpcHRfTmFtZSBGUERGQVBJX0ZUX0dldF9Qb3N0c2NyaXB0X05hbWUgDQotI2RlZmluZSBGVF9HZXRfU2ZudF9UYWJsZSBGUERGQVBJX0ZUX0dldF9TZm50X1RhYmxlIA0KLSNkZWZpbmUgRlRfTG9hZF9TZm50X1RhYmxlIEZQREZBUElfRlRfTG9hZF9TZm50X1RhYmxlIA0KLSNkZWZpbmUgRlRfU2ZudF9UYWJsZV9JbmZvIEZQREZBUElfRlRfU2ZudF9UYWJsZV9JbmZvIA0KLSNkZWZpbmUgRlRfR2V0X0NNYXBfTGFuZ3VhZ2VfSUQgRlBERkFQSV9GVF9HZXRfQ01hcF9MYW5ndWFnZV9JRCANCi0jZGVmaW5lIEZUX0FjdGl2YXRlX1NpemUgRlBERkFQSV9GVF9BY3RpdmF0ZV9TaXplIA0KLSNkZWZpbmUgRlRfR2V0X1JlbmRlcmVyIEZQREZBUElfRlRfR2V0X1JlbmRlcmVyIA0KLSNkZWZpbmUgRlRfUmVtb3ZlX01vZHVsZSBGUERGQVBJX0ZUX1JlbW92ZV9Nb2R1bGUgDQotI2RlZmluZSBGVF9BZGRfTW9kdWxlIEZQREZBUElfRlRfQWRkX01vZHVsZSANCi0jZGVmaW5lIEZUX0dldF9Nb2R1bGUgRlBERkFQSV9GVF9HZXRfTW9kdWxlIA0KLSNkZWZpbmUgRlRfR2V0X01vZHVsZV9JbnRlcmZhY2UgRlBERkFQSV9GVF9HZXRfTW9kdWxlX0ludGVyZmFjZSANCi0jZGVmaW5lIGZ0X21vZHVsZV9nZXRfc2VydmljZSBGUERGQVBJX2Z0X21vZHVsZV9nZXRfc2VydmljZSANCi0jZGVmaW5lIEZUX05ld19MaWJyYXJ5IEZQREZBUElfRlRfTmV3X0xpYnJhcnkgDQotI2RlZmluZSBGVF9MaWJyYXJ5X1ZlcnNpb24gRlBERkFQSV9GVF9MaWJyYXJ5X1ZlcnNpb24gDQotI2RlZmluZSBGVF9Eb25lX0xpYnJhcnkgRlBERkFQSV9GVF9Eb25lX0xpYnJhcnkgDQotI2RlZmluZSBGVF9TZXRfRGVidWdfSG9vayBGUERGQVBJX0ZUX1NldF9EZWJ1Z19Ib29rIA0KLSNkZWZpbmUgRlRfUmFjY2Vzc19HZXRfSGVhZGVySW5mbyBGUERGQVBJX0ZUX1JhY2Nlc3NfR2V0X0hlYWRlckluZm8gDQotI2RlZmluZSBGVF9SYWNjZXNzX0dldF9EYXRhT2Zmc2V0cyBGUERGQVBJX0ZUX1JhY2Nlc3NfR2V0X0RhdGFPZmZzZXRzIA0KLSNkZWZpbmUgRlRfUmFjY2Vzc19HdWVzcyBGUERGQVBJX0ZUX1JhY2Nlc3NfR3Vlc3MNCi0jZGVmaW5lIGFmX2R1bW15X3NjcmlwdF9jbGFzcyBGUERGQVBJX2FmX2R1bW15X3NjcmlwdF9jbGFzcw0KLSNkZWZpbmUgYWZfbGF0aW5fc2NyaXB0X2NsYXNzIEZQREZBUElfYWZfbGF0aW5fc2NyaXB0X2NsYXNzDQotI2RlZmluZSBhZl9jamtfc2NyaXB0X2NsYXNzIEZQREZBUElfYWZfY2prX3NjcmlwdF9jbGFzcw0KLSNkZWZpbmUgYWZfYXV0b2ZpdHRlcl9zZXJ2aWNlIEZQREZBUElfYWZfYXV0b2ZpdHRlcl9zZXJ2aWNlDQotI2RlZmluZSBhdXRvZml0X21vZHVsZV9jbGFzcyBGUERGQVBJX2F1dG9maXRfbW9kdWxlX2NsYXNzDQotI2RlZmluZSBjZmZfY21hcF9lbmNvZGluZ19jbGFzc19yZWMgRlBERkFQSV9jZmZfY21hcF9lbmNvZGluZ19jbGFzc19yZWMNCi0jZGVmaW5lIGNmZl9jbWFwX3VuaWNvZGVfY2xhc3NfcmVjIEZQREZBUElfY2ZmX2NtYXBfdW5pY29kZV9jbGFzc19yZWMNCi0jZGVmaW5lIGNmZl9kcml2ZXJfY2xhc3MgRlBERkFQSV9jZmZfZHJpdmVyX2NsYXNzDQotI2RlZmluZSBGVF9TdHJlYW1fT3BlbiBGUERGQVBJX0ZUX1N0cmVhbV9PcGVuDQotI2RlZmluZSBGVF9OZXdfTWVtb3J5IEZQREZBUElfRlRfTmV3X01lbW9yeQ0KLSNkZWZpbmUgRlRfRG9uZV9NZW1vcnkgRlBERkFQSV9GVF9Eb25lX01lbW9yeQ0KLSNkZWZpbmUgZnRfbWVtX3FhbGxvYyBGUERGQVBJX2Z0X21lbV9xYWxsb2MNCi0jZGVmaW5lIGZ0X21lbV9hbGxvYyBGUERGQVBJX2Z0X21lbV9hbGxvYw0KLSNkZWZpbmUgZnRfbWVtX2ZyZWUgRlBERkFQSV9mdF9tZW1fZnJlZQ0KLSNkZWZpbmUgZnRfbWVtX3FyZWFsbG9jIEZQREZBUElfZnRfbWVtX3FyZWFsbG9jDQotI2RlZmluZSBmdF9tZW1fcmVhbGxvYyBGUERGQVBJX2Z0X21lbV9yZWFsbG9jDQotI2RlZmluZSBGVF9HZXRfVHJ1ZVR5cGVfRW5naW5lX1R5cGUgRlBERkFQSV9GVF9HZXRfVHJ1ZVR5cGVfRW5naW5lX1R5cGUNCi0jZGVmaW5lIGZ0X3N0dWJfc2V0X2NoYXJfc2l6ZXMgRlBERkFQSV9mdF9zdHViX3NldF9jaGFyX3NpemVzDQotI2RlZmluZSBmdF9zdHViX3NldF9waXhlbF9zaXplcyBGUERGQVBJX2Z0X3N0dWJfc2V0X3BpeGVsX3NpemVzDQotI2RlZmluZSBGVF9HZXRfU3ViR2x5cGhfSW5mbyBGUERGQVBJX0ZUX0dldF9TdWJHbHlwaF9JbmZvDQotI2RlZmluZSBGVF9HZXRfU2ZudF9OYW1lX0NvdW50IEZQREZBUElfRlRfR2V0X1NmbnRfTmFtZV9Db3VudA0KLSNkZWZpbmUgRlRfR2V0X1NmbnRfTmFtZSBGUERGQVBJX0ZUX0dldF9TZm50X05hbWUNCi0jZGVmaW5lIEZUX0JpdG1hcF9OZXcgRlBERkFQSV9GVF9CaXRtYXBfTmV3DQotI2RlZmluZSBGVF9CaXRtYXBfQ29weSBGUERGQVBJX0ZUX0JpdG1hcF9Db3B5DQotI2RlZmluZSBGVF9CaXRtYXBfRG9uZSBGUERGQVBJX0ZUX0JpdG1hcF9Eb25lDQotI2RlZmluZSBGVF9CaXRtYXBfQ29udmVydCBGUERGQVBJX0ZUX0JpdG1hcF9Db252ZXJ0DQotI2RlZmluZSBGVF9CaXRtYXBfRW1ib2xkZW4gRlBERkFQSV9GVF9CaXRtYXBfRW1ib2xkZW4NCi0jZGVmaW5lIGZ0X2JpdG1hcF9nbHlwaF9jbGFzcyBGUERGQVBJX2Z0X2JpdG1hcF9nbHlwaF9jbGFzcw0KLSNkZWZpbmUgZnRfb3V0bGluZV9nbHlwaF9jbGFzcyBGUERGQVBJX2Z0X291dGxpbmVfZ2x5cGhfY2xhc3MNCi0jZGVmaW5lIEZUX01hdHJpeF9NdWx0aXBseSBGUERGQVBJX0ZUX01hdHJpeF9NdWx0aXBseQ0KLSNkZWZpbmUgRlRfTWF0cml4X0ludmVydCBGUERGQVBJX0ZUX01hdHJpeF9JbnZlcnQNCi0jZGVmaW5lIEZUX0RvbmVfR2x5cGggRlBERkFQSV9GVF9Eb25lX0dseXBoDQotI2RlZmluZSBGVF9HbHlwaF9Db3B5IEZQREZBUElfRlRfR2x5cGhfQ29weQ0KLSNkZWZpbmUgRlRfR2V0X0dseXBoIEZQREZBUElfRlRfR2V0X0dseXBoDQotI2RlZmluZSBGVF9HbHlwaF9UcmFuc2Zvcm0gRlBERkFQSV9GVF9HbHlwaF9UcmFuc2Zvcm0NCi0jZGVmaW5lIEZUX0dseXBoX0dldF9DQm94IEZQREZBUElfRlRfR2x5cGhfR2V0X0NCb3gNCi0jZGVmaW5lIEZUX0dseXBoX1RvX0JpdG1hcCBGUERGQVBJX0ZUX0dseXBoX1RvX0JpdG1hcA0KLSNkZWZpbmUgRlRfQWRkX0RlZmF1bHRfTW9kdWxlcyBGUERGQVBJX0ZUX0FkZF9EZWZhdWx0X01vZHVsZXMNCi0jZGVmaW5lIEZUX0dldF9NdWx0aV9NYXN0ZXIgRlBERkFQSV9GVF9HZXRfTXVsdGlfTWFzdGVyDQotI2RlZmluZSBGVF9HZXRfTU1fVmFyIEZQREZBUElfRlRfR2V0X01NX1Zhcg0KLSNkZWZpbmUgRlRfU2V0X01NX0Rlc2lnbl9Db29yZGluYXRlcyBGUERGQVBJX0ZUX1NldF9NTV9EZXNpZ25fQ29vcmRpbmF0ZXMNCi0jZGVmaW5lIEZUX1NldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzIEZQREZBUElfRlRfU2V0X1Zhcl9EZXNpZ25fQ29vcmRpbmF0ZXMNCi0jZGVmaW5lIEZUX1NldF9NTV9CbGVuZF9Db29yZGluYXRlcyBGUERGQVBJX0ZUX1NldF9NTV9CbGVuZF9Db29yZGluYXRlcw0KLSNkZWZpbmUgRlRfU2V0X1Zhcl9CbGVuZF9Db29yZGluYXRlcyBGUERGQVBJX0ZUX1NldF9WYXJfQmxlbmRfQ29vcmRpbmF0ZXMNCi0jZGVmaW5lIHBzX3RhYmxlX2Z1bmNzIEZQREZBUElfcHNfdGFibGVfZnVuY3MNCi0jZGVmaW5lIHBzX3BhcnNlcl9mdW5jcyBGUERGQVBJX3BzX3BhcnNlcl9mdW5jcw0KLSNkZWZpbmUgdDFfYnVpbGRlcl9mdW5jcyBGUERGQVBJX3QxX2J1aWxkZXJfZnVuY3MNCi0jZGVmaW5lIHQxX2RlY29kZXJfZnVuY3MgRlBERkFQSV90MV9kZWNvZGVyX2Z1bmNzDQotI2RlZmluZSBhZm1fcGFyc2VyX2Z1bmNzIEZQREZBUElfYWZtX3BhcnNlcl9mdW5jcw0KLSNkZWZpbmUgdDFfY21hcF9jbGFzc2VzIEZQREZBUElfdDFfY21hcF9jbGFzc2VzDQotI2RlZmluZSB0MV9jbWFwX3N0YW5kYXJkX2NsYXNzX3JlYyBGUERGQVBJX3QxX2NtYXBfc3RhbmRhcmRfY2xhc3NfcmVjDQotI2RlZmluZSB0MV9jbWFwX2V4cGVydF9jbGFzc19yZWMgRlBERkFQSV90MV9jbWFwX2V4cGVydF9jbGFzc19yZWMNCi0jZGVmaW5lIHQxX2NtYXBfY3VzdG9tX2NsYXNzX3JlYyBGUERGQVBJX3QxX2NtYXBfY3VzdG9tX2NsYXNzX3JlYw0KLSNkZWZpbmUgdDFfY21hcF91bmljb2RlX2NsYXNzX3JlYyBGUERGQVBJX3QxX2NtYXBfdW5pY29kZV9jbGFzc19yZWMNCi0jZGVmaW5lIHBzYXV4X21vZHVsZV9jbGFzcyBGUERGQVBJX3BzYXV4X21vZHVsZV9jbGFzcw0KLSNkZWZpbmUgcHNoaW50ZXJfbW9kdWxlX2NsYXNzIEZQREZBUElfcHNoaW50ZXJfbW9kdWxlX2NsYXNzDQotI2RlZmluZSBwc19oaW50c19hcHBseSBGUERGQVBJX3BzX2hpbnRzX2FwcGx5DQotI2RlZmluZSBwc25hbWVzX21vZHVsZV9jbGFzcyBGUERGQVBJX3BzbmFtZXNfbW9kdWxlX2NsYXNzDQotI2RlZmluZSBmdF9yYXN0ZXIxX3JlbmRlcmVyX2NsYXNzIEZQREZBUElfZnRfcmFzdGVyMV9yZW5kZXJlcl9jbGFzcw0KLSNkZWZpbmUgZnRfc3RhbmRhcmRfcmFzdGVyIEZQREZBUElfZnRfc3RhbmRhcmRfcmFzdGVyDQotI2RlZmluZSBmdF9yYXN0ZXI1X3JlbmRlcmVyX2NsYXNzIEZQREZBUElfZnRfcmFzdGVyNV9yZW5kZXJlcl9jbGFzcw0KLSNkZWZpbmUgdHRfY21hcDBfY2xhc3NfcmVjIEZQREZBUElfdHRfY21hcDBfY2xhc3NfcmVjDQotI2RlZmluZSB0dF9jbWFwMl9jbGFzc19yZWMgRlBERkFQSV90dF9jbWFwMl9jbGFzc19yZWMNCi0jZGVmaW5lIHR0X2NtYXA0X2NsYXNzX3JlYyBGUERGQVBJX3R0X2NtYXA0X2NsYXNzX3JlYw0KLSNkZWZpbmUgdHRfY21hcDZfY2xhc3NfcmVjIEZQREZBUElfdHRfY21hcDZfY2xhc3NfcmVjDQotI2RlZmluZSB0dF9jbWFwOF9jbGFzc19yZWMgRlBERkFQSV90dF9jbWFwOF9jbGFzc19yZWMNCi0jZGVmaW5lIHR0X2NtYXAxMF9jbGFzc19yZWMgRlBERkFQSV90dF9jbWFwMTBfY2xhc3NfcmVjDQotI2RlZmluZSB0dF9jbWFwMTJfY2xhc3NfcmVjIEZQREZBUElfdHRfY21hcDEyX2NsYXNzX3JlYw0KLSNkZWZpbmUgdHRfY21hcDEzX2NsYXNzX3JlYyBGUERGQVBJX3R0X2NtYXAxM19jbGFzc19yZWMNCi0jZGVmaW5lIHR0X2NtYXAxNF9jbGFzc19yZWMgRlBERkFQSV90dF9jbWFwMTRfY2xhc3NfcmVjDQotI2RlZmluZSBzZm50X21vZHVsZV9jbGFzcyBGUERGQVBJX3NmbnRfbW9kdWxlX2NsYXNzDQotI2RlZmluZSBmdF9ncmF5c19yYXN0ZXIgRlBERkFQSV9mdF9ncmF5c19yYXN0ZXINCi0jZGVmaW5lIGZ0X3Ntb290aF9yZW5kZXJlcl9jbGFzcyBGUERGQVBJX2Z0X3Ntb290aF9yZW5kZXJlcl9jbGFzcw0KLSNkZWZpbmUgZnRfc21vb3RoX2xjZF9yZW5kZXJlcl9jbGFzcyBGUERGQVBJX2Z0X3Ntb290aF9sY2RfcmVuZGVyZXJfY2xhc3MNCi0jZGVmaW5lIGZ0X3Ntb290aF9sY2R2X3JlbmRlcmVyX2NsYXNzIEZQREZBUElfZnRfc21vb3RoX2xjZHZfcmVuZGVyZXJfY2xhc3MNCi0jZGVmaW5lIHR0X2RlZmF1bHRfZ3JhcGhpY3Nfc3RhdGUgRlBERkFQSV90dF9kZWZhdWx0X2dyYXBoaWNzX3N0YXRlDQotI2RlZmluZSB0dF9kcml2ZXJfY2xhc3MgRlBERkFQSV90dF9kcml2ZXJfY2xhc3MNCi0jZGVmaW5lIFRUX1J1bklucyBGUERGQVBJX1RUX1J1bklucw0KLSNkZWZpbmUgVFRfTmV3X0NvbnRleHQgRlBERkFQSV9UVF9OZXdfQ29udGV4dA0KLSNkZWZpbmUgdDFfZHJpdmVyX2NsYXNzIEZQREZBUElfdDFfZHJpdmVyX2NsYXNzDQotI2RlZmluZSB0MWNpZF9kcml2ZXJfY2xhc3MgRlBERkFQSV90MWNpZF9kcml2ZXJfY2xhc3MNCi0jZGVmaW5lIEZUX0dldF9UcmFja19LZXJuaW5nIEZQREZBUElfRlRfR2V0X1RyYWNrX0tlcm5pbmcNCi0jZGVmaW5lIEZUX01hdGNoX1NpemUgRlBERkFQSV9GVF9NYXRjaF9TaXplDQotI2RlZmluZSBGVF9NdWxEaXZfTm9fUm91bmQgRlBERkFQSV9GVF9NdWxEaXZfTm9fUm91bmQNCi0jZGVmaW5lIEZUX1JlcXVlc3RfTWV0cmljcyBGUERGQVBJX0ZUX1JlcXVlc3RfTWV0cmljcw0KLSNkZWZpbmUgRlRfUmVxdWVzdF9TaXplIEZQREZBUElfRlRfUmVxdWVzdF9TaXplDQotI2RlZmluZSBGVF9TZWxlY3RfTWV0cmljcyBGUERGQVBJX0ZUX1NlbGVjdF9NZXRyaWNzDQotI2RlZmluZSBGVF9TZWxlY3RfU2l6ZSBGUERGQVBJX0ZUX1NlbGVjdF9TaXplDQotI2RlZmluZSBmdF9zeW50aGVzaXplX3ZlcnRpY2FsX21ldHJpY3MgRlBERkFQSV9mdF9zeW50aGVzaXplX3ZlcnRpY2FsX21ldHJpY3MNCi0jZGVmaW5lIE5ld19Qcm9maWxlIEZQREZBUElfTmV3X1Byb2ZpbGUNCi0jZGVmaW5lIEVuZF9Qcm9maWxlIEZQREZBUElfRW5kX1Byb2ZpbGUNCi0jZGVmaW5lIEluc2VydF9ZX1R1cm4gRlBERkFQSV9JbnNlcnRfWV9UdXJuIA0KLSNkZWZpbmUgU3BsaXRfQ29uaWMgRlBERkFQSV9TcGxpdF9Db25pYyAgDQotI2RlZmluZSBTcGxpdF9DdWJpYyBGUERGQVBJX1NwbGl0X0N1YmljDQotI2RlZmluZSBMaW5lX1VwIEZQREZBUElfTGluZV9VcCANCi0jZGVmaW5lIEJlemllcl9VcCBGUERGQVBJX0Jlemllcl9VcCANCi0jZGVmaW5lIEJlemllcl9Eb3duIEZQREZBUElfQmV6aWVyX0Rvd24gDQotI2RlZmluZSBMaW5lX1RvIEZQREZBUElfTGluZV9Ubw0KLSNkZWZpbmUgQ29uaWNfVG8gRlBERkFQSV9Db25pY19UbyANCi0jZGVmaW5lIEN1YmljX1RvIEZQREZBUElfQ3ViaWNfVG8NCi0jZGVmaW5lIERlY29tcG9zZV9DdXJ2ZSBGUERGQVBJX0RlY29tcG9zZV9DdXJ2ZQ0KLSNkZWZpbmUgQ29udmVydF9HbHlwaCBGUERGQVBJX0NvbnZlcnRfR2x5cGggDQotI2RlZmluZSBTb3J0IEZQREZBUElfU29ydCANCi0jZGVmaW5lIFZlcnRpY2FsX1N3ZWVwX0luaXQgRlBERkFQSV9WZXJ0aWNhbF9Td2VlcF9Jbml0IA0KLSNkZWZpbmUgVmVydGljYWxfU3dlZXBfU3BhbiBGUERGQVBJX1ZlcnRpY2FsX1N3ZWVwX1NwYW4gDQotI2RlZmluZSBWZXJ0aWNhbF9Td2VlcF9Ecm9wIEZQREZBUElfVmVydGljYWxfU3dlZXBfRHJvcCANCi0jZGVmaW5lIFZlcnRpY2FsX1N3ZWVwX1N0ZXAgRlBERkFQSV9WZXJ0aWNhbF9Td2VlcF9TdGVwIA0KLSNkZWZpbmUgSG9yaXpvbnRhbF9Td2VlcF9Jbml0IEZQREZBUElfSG9yaXpvbnRhbF9Td2VlcF9Jbml0IA0KLSNkZWZpbmUgSG9yaXpvbnRhbF9Td2VlcF9TcGFuIEZQREZBUElfSG9yaXpvbnRhbF9Td2VlcF9TcGFuIA0KLSNkZWZpbmUgSG9yaXpvbnRhbF9Td2VlcF9Ecm9wIEZQREZBUElfSG9yaXpvbnRhbF9Td2VlcF9Ecm9wIA0KLSNkZWZpbmUgSG9yaXpvbnRhbF9Td2VlcF9TdGVwIEZQREZBUElfSG9yaXpvbnRhbF9Td2VlcF9TdGVwIA0KLSNkZWZpbmUgRHJhd19Td2VlcCBGUERGQVBJX0RyYXdfU3dlZXAgDQotI2RlZmluZSBSZW5kZXJfU2luZ2xlX1Bhc3MgRlBERkFQSV9SZW5kZXJfU2luZ2xlX1Bhc3MgDQotI2RlZmluZSBSZW5kZXJfR2x5cGggRlBERkFQSV9SZW5kZXJfR2x5cGggIA0KLSNkZWZpbmUgRmluYWxpemVfUHJvZmlsZV9UYWJsZSBGUERGQVBJX0ZpbmFsaXplX1Byb2ZpbGVfVGFibGUgDQotI2RlZmluZSBJbnNOZXcgRlBERkFQSV9JbnNOZXcgDQotI2RlZmluZSBEZWxPbGQgRlBERkFQSV9EZWxPbGQNCi0jZGVmaW5lIEZUX011bEZpeCBGUERGQVBJX0ZUX011bEZpeA0KLSNkZWZpbmUgRlRfTWF0cml4X011bHRpcGx5X1NjYWxlZCBGUERGQVBJX0ZUX01hdHJpeF9NdWx0aXBseV9TY2FsZWQNCi0jZGVmaW5lIEZUX1ZlY3Rvcl9UcmFuc2Zvcm1fU2NhbGVkIEZQREZBUElfRlRfVmVjdG9yX1RyYW5zZm9ybV9TY2FsZWQNCi0jZGVmaW5lIGZ0X2Nvcm5lcl9vcmllbnRhdGlvbiBGUERGQVBJX2Z0X2Nvcm5lcl9vcmllbnRhdGlvbg0KLSNkZWZpbmUgZnRfY29ybmVyX2lzX2ZsYXQgRlBERkFQSV9mdF9jb3JuZXJfaXNfZmxhdA0KLSNkZWZpbmUgRlRfR2V0X0NNYXBfRm9ybWF0IEZQREZBUElfRlRfR2V0X0NNYXBfRm9ybWF0DQotI2RlZmluZSBmdF9tZW1fc3RyY3B5biBGUERGQVBJX2Z0X21lbV9zdHJjcHluDQotI2RlZmluZSBmdF9tZW1fZHVwIEZQREZBUElfZnRfbWVtX2R1cA0KLSNkZWZpbmUgZnRfbWVtX3N0cmR1cCBGUERGQVBJX2Z0X21lbV9zdHJkdXANCi0jZGVmaW5lIEZUX0ZhY2VfR2V0Q2hhclZhcmlhbnRJc0RlZmF1bHQgRlBERkFQSV9GVF9GYWNlX0dldENoYXJWYXJpYW50SXNEZWZhdWx0DQotI2RlZmluZSBGVF9GYWNlX0dldENoYXJzT2ZWYXJpYW50IEZQREZBUElfRlRfRmFjZV9HZXRDaGFyc09mVmFyaWFudA0KLSNkZWZpbmUgRlRfRmFjZV9HZXRWYXJpYW50c09mQ2hhciBGUERGQVBJX0ZUX0ZhY2VfR2V0VmFyaWFudHNPZkNoYXINCi0jZGVmaW5lIEZUX0ZhY2VfR2V0VmFyaWFudFNlbGVjdG9ycyBGUERGQVBJX0ZUX0ZhY2VfR2V0VmFyaWFudFNlbGVjdG9ycw0KLSNkZWZpbmUgRlRfRmFjZV9HZXRDaGFyVmFyaWFudEluZGV4IEZQREZBUElfRlRfRmFjZV9HZXRDaGFyVmFyaWFudEluZGV4DQotI2RlZmluZSBGVF9HZXRfQWR2YW5jZXMgRlBERkFQSV9GVF9HZXRfQWR2YW5jZXMNCi0jZGVmaW5lIEZUX0dldF9BZHZhbmNlIEZQREZBUElfRlRfR2V0X0FkdmFuY2UNCi0jZGVmaW5lIEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyIEZQREZBUElfRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXINCi0gDQotI2VuZGlmIC8vICFfRlhfRlJFRVRZUEVfRE9OVF9SRU5BTUVfDQorI2lmbmRlZiBfRlhfRlJFRVRZUEVfRE9OVF9SRU5BTUVfCisvLyBUbyBhdm9pZCBhbnkgcG9zc2libGUgbGlua2luZyBjb25mbGljdGlvbiwgd2UgcmVuYW1lIGFsbCBGcmVlVHlwZSBleHBvcnRlZCBuYW1lcworCisjZGVmaW5lIEZUX0luaXRfRnJlZVR5cGUgRlBERkFQSV9GVF9Jbml0X0ZyZWVUeXBlCisjZGVmaW5lIEZUX0RvbmVfRnJlZVR5cGUgRlBERkFQSV9GVF9Eb25lX0ZyZWVUeXBlCisjZGVmaW5lIEZUX05ld19GYWNlCQlGUERGQVBJX0ZUX05ld19GYWNlCisjZGVmaW5lIEZUX1NlbGVjdF9DaGFybWFwIEZQREZBUElfRlRfU2VsZWN0X0NoYXJtYXAgCisjZGVmaW5lIEZUX0RvbmVfRmFjZSBGUERGQVBJX0ZUX0RvbmVfRmFjZSAKKyNkZWZpbmUgRlRfR2V0X0NoYXJtYXBfSW5kZXggRlBERkFQSV9GVF9HZXRfQ2hhcm1hcF9JbmRleCAKKyNkZWZpbmUgRlRfTmV3X01lbW9yeV9GYWNlIEZQREZBUElfRlRfTmV3X01lbW9yeV9GYWNlIAorI2RlZmluZSBGVF9NdWxEaXYgRlBERkFQSV9GVF9NdWxEaXYgCisjZGVmaW5lIEZUX1ZlY3Rvcl9UcmFuc2Zvcm0gRlBERkFQSV9GVF9WZWN0b3JfVHJhbnNmb3JtIAorI2RlZmluZSBGVF9Db3MgRlBERkFQSV9GVF9Db3MgCisjZGVmaW5lIEZUX1NpbiBGUERGQVBJX0ZUX1NpbiAKKyNkZWZpbmUgRlRfTG9hZF9HbHlwaCBGUERGQVBJX0ZUX0xvYWRfR2x5cGggCisjZGVmaW5lIEZUX0RpdkZpeCBGUERGQVBJX0ZUX0RpdkZpeCAKKyNkZWZpbmUgRlRfUmVhbGxvYyBGUERGQVBJX0ZUX1JlYWxsb2MgCisjZGVmaW5lIEZUX0FsbG9jIEZQREZBUElfRlRfQWxsb2MgCisjZGVmaW5lIEZUX0dldF9DaGFyX0luZGV4IEZQREZBUElfRlRfR2V0X0NoYXJfSW5kZXggCisjZGVmaW5lIEZUX0dseXBoTG9hZGVyX0NoZWNrUG9pbnRzIEZQREZBUElfRlRfR2x5cGhMb2FkZXJfQ2hlY2tQb2ludHMgCisjZGVmaW5lIEZUX0dseXBoTG9hZGVyX0FkZCBGUERGQVBJX0ZUX0dseXBoTG9hZGVyX0FkZCAKKyNkZWZpbmUgRlRfR2x5cGhMb2FkZXJfQ2hlY2tTdWJHbHlwaHMgRlBERkFQSV9GVF9HbHlwaExvYWRlcl9DaGVja1N1YkdseXBocyAKKyNkZWZpbmUgRlRfT3V0bGluZV9UcmFuc2xhdGUgRlBERkFQSV9GVF9PdXRsaW5lX1RyYW5zbGF0ZSAKKyNkZWZpbmUgRlRfT3V0bGluZV9UcmFuc2Zvcm0gRlBERkFQSV9GVF9PdXRsaW5lX1RyYW5zZm9ybSAKKyNkZWZpbmUgRlRfT3V0bGluZV9HZXRfQ0JveCBGUERGQVBJX0ZUX091dGxpbmVfR2V0X0NCb3ggCisjZGVmaW5lIEZUX0dseXBoTG9hZGVyX1Jld2luZCBGUERGQVBJX0ZUX0dseXBoTG9hZGVyX1Jld2luZCAKKyNkZWZpbmUgRlRfR2x5cGhMb2FkZXJfQ29weVBvaW50cyBGUERGQVBJX0ZUX0dseXBoTG9hZGVyX0NvcHlQb2ludHMgCisjZGVmaW5lIEZUX0dseXBoTG9hZGVyX05ldyBGUERGQVBJX0ZUX0dseXBoTG9hZGVyX05ldyAKKyNkZWZpbmUgRlRfR2x5cGhMb2FkZXJfQ3JlYXRlRXh0cmEgRlBERkFQSV9GVF9HbHlwaExvYWRlcl9DcmVhdGVFeHRyYSAKKyNkZWZpbmUgRlRfRnJlZSBGUERGQVBJX0ZUX0ZyZWUgCisjZGVmaW5lIEZUX1NldF9DaGFybWFwIEZQREZBUElfRlRfU2V0X0NoYXJtYXAgCisjZGVmaW5lIEZUX0dseXBoTG9hZGVyX0RvbmUgRlBERkFQSV9GVF9HbHlwaExvYWRlcl9Eb25lIAorI2RlZmluZSBfZGVidWdfbWVtX2R1bW15IEZQREZBUElfX2RlYnVnX21lbV9kdW1teSAKKyNkZWZpbmUgX2RlYnVnX21lbV9kdW1teSBGUERGQVBJX19kZWJ1Z19tZW1fZHVtbXkgCisjZGVmaW5lIEZUX1FBbGxvYyBGUERGQVBJX0ZUX1FBbGxvYyAKKyNkZWZpbmUgRlRfUVJlYWxsb2MgRlBERkFQSV9GVF9RUmVhbGxvYyAKKyNkZWZpbmUgRlRfTGlzdF9GaW5kIEZQREZBUElfRlRfTGlzdF9GaW5kIAorI2RlZmluZSBGVF9MaXN0X0FkZCBGUERGQVBJX0ZUX0xpc3RfQWRkIAorI2RlZmluZSBGVF9MaXN0X0luc2VydCBGUERGQVBJX0ZUX0xpc3RfSW5zZXJ0IAorI2RlZmluZSBGVF9MaXN0X1JlbW92ZSBGUERGQVBJX0ZUX0xpc3RfUmVtb3ZlIAorI2RlZmluZSBGVF9MaXN0X1VwIEZQREZBUElfRlRfTGlzdF9VcCAKKyNkZWZpbmUgRlRfTGlzdF9JdGVyYXRlIEZQREZBUElfRlRfTGlzdF9JdGVyYXRlIAorI2RlZmluZSBGVF9MaXN0X0ZpbmFsaXplIEZQREZBUElfRlRfTGlzdF9GaW5hbGl6ZSAKKyNkZWZpbmUgZnRfaGlnaHBvdzIgRlBERkFQSV9mdF9oaWdocG93MiAKKyNkZWZpbmUgRlRfU3RyZWFtX09wZW5NZW1vcnkgRlBERkFQSV9GVF9TdHJlYW1fT3Blbk1lbW9yeSAKKyNkZWZpbmUgRlRfU3RyZWFtX0Nsb3NlIEZQREZBUElfRlRfU3RyZWFtX0Nsb3NlIAorI2RlZmluZSBGVF9TdHJlYW1fU2VlayBGUERGQVBJX0ZUX1N0cmVhbV9TZWVrIAorI2RlZmluZSBGVF9TdHJlYW1fU2tpcCBGUERGQVBJX0ZUX1N0cmVhbV9Ta2lwIAorI2RlZmluZSBGVF9TdHJlYW1fUG9zIEZQREZBUElfRlRfU3RyZWFtX1BvcyAKKyNkZWZpbmUgRlRfU3RyZWFtX1JlYWRBdCBGUERGQVBJX0ZUX1N0cmVhbV9SZWFkQXQgCisjZGVmaW5lIEZUX1N0cmVhbV9SZWFkIEZQREZBUElfRlRfU3RyZWFtX1JlYWQgCisjZGVmaW5lIEZUX1N0cmVhbV9UcnlSZWFkIEZQREZBUElfRlRfU3RyZWFtX1RyeVJlYWQgCisjZGVmaW5lIEZUX1N0cmVhbV9FbnRlckZyYW1lIEZQREZBUElfRlRfU3RyZWFtX0VudGVyRnJhbWUgCisjZGVmaW5lIEZUX1N0cmVhbV9FeHRyYWN0RnJhbWUgRlBERkFQSV9GVF9TdHJlYW1fRXh0cmFjdEZyYW1lIAorI2RlZmluZSBGVF9TdHJlYW1fUmVsZWFzZUZyYW1lIEZQREZBUElfRlRfU3RyZWFtX1JlbGVhc2VGcmFtZSAKKyNkZWZpbmUgRlRfU3RyZWFtX0V4aXRGcmFtZSBGUERGQVBJX0ZUX1N0cmVhbV9FeGl0RnJhbWUgCisjZGVmaW5lIEZUX1N0cmVhbV9HZXRDaGFyIEZQREZBUElfRlRfU3RyZWFtX0dldENoYXIgCisjZGVmaW5lIEZUX1N0cmVhbV9HZXRTaG9ydCBGUERGQVBJX0ZUX1N0cmVhbV9HZXRTaG9ydCAKKyNkZWZpbmUgRlRfU3RyZWFtX0dldFNob3J0TEUgRlBERkFQSV9GVF9TdHJlYW1fR2V0U2hvcnRMRSAKKyNkZWZpbmUgRlRfU3RyZWFtX0dldE9mZnNldCBGUERGQVBJX0ZUX1N0cmVhbV9HZXRPZmZzZXQgCisjZGVmaW5lIEZUX1N0cmVhbV9HZXRMb25nIEZQREZBUElfRlRfU3RyZWFtX0dldExvbmcgCisjZGVmaW5lIEZUX1N0cmVhbV9HZXRMb25nTEUgRlBERkFQSV9GVF9TdHJlYW1fR2V0TG9uZ0xFIAorI2RlZmluZSBGVF9TdHJlYW1fUmVhZENoYXIgRlBERkFQSV9GVF9TdHJlYW1fUmVhZENoYXIgCisjZGVmaW5lIEZUX1N0cmVhbV9SZWFkU2hvcnQgRlBERkFQSV9GVF9TdHJlYW1fUmVhZFNob3J0IAorI2RlZmluZSBGVF9TdHJlYW1fUmVhZFNob3J0TEUgRlBERkFQSV9GVF9TdHJlYW1fUmVhZFNob3J0TEUgCisjZGVmaW5lIEZUX1N0cmVhbV9SZWFkT2Zmc2V0IEZQREZBUElfRlRfU3RyZWFtX1JlYWRPZmZzZXQgCisjZGVmaW5lIEZUX1N0cmVhbV9SZWFkTG9uZyBGUERGQVBJX0ZUX1N0cmVhbV9SZWFkTG9uZyAKKyNkZWZpbmUgRlRfU3RyZWFtX1JlYWRMb25nTEUgRlBERkFQSV9GVF9TdHJlYW1fUmVhZExvbmdMRSAKKyNkZWZpbmUgRlRfU3RyZWFtX1JlYWRGaWVsZHMgRlBERkFQSV9GVF9TdHJlYW1fUmVhZEZpZWxkcyAKKyNkZWZpbmUgRlRfUm91bmRGaXggRlBERkFQSV9GVF9Sb3VuZEZpeCAKKyNkZWZpbmUgRlRfQ2VpbEZpeCBGUERGQVBJX0ZUX0NlaWxGaXggCisjZGVmaW5lIEZUX0Zsb29yRml4IEZQREZBUElfRlRfRmxvb3JGaXggCisjZGVmaW5lIEZUX1NxcnQzMiBGUERGQVBJX0ZUX1NxcnQzMiAKKyNkZWZpbmUgRlRfU3FydEZpeGVkIEZQREZBUElfRlRfU3FydEZpeGVkIAorI2RlZmluZSBGVF9UYW4gRlBERkFQSV9GVF9UYW4gCisjZGVmaW5lIEZUX0F0YW4yIEZQREZBUElfRlRfQXRhbjIgCisjZGVmaW5lIEZUX1ZlY3Rvcl9Vbml0IEZQREZBUElfRlRfVmVjdG9yX1VuaXQgCisjZGVmaW5lIEZUX1ZlY3Rvcl9Sb3RhdGUgRlBERkFQSV9GVF9WZWN0b3JfUm90YXRlIAorI2RlZmluZSBGVF9WZWN0b3JfTGVuZ3RoIEZQREZBUElfRlRfVmVjdG9yX0xlbmd0aCAKKyNkZWZpbmUgRlRfVmVjdG9yX1BvbGFyaXplIEZQREZBUElfRlRfVmVjdG9yX1BvbGFyaXplIAorI2RlZmluZSBGVF9WZWN0b3JfRnJvbV9Qb2xhciBGUERGQVBJX0ZUX1ZlY3Rvcl9Gcm9tX1BvbGFyIAorI2RlZmluZSBGVF9BbmdsZV9EaWZmIEZQREZBUElfRlRfQW5nbGVfRGlmZiAKKyNkZWZpbmUgRlRfT3V0bGluZV9EZWNvbXBvc2UgRlBERkFQSV9GVF9PdXRsaW5lX0RlY29tcG9zZSAKKyNkZWZpbmUgRlRfT3V0bGluZV9Eb25lX0ludGVybmFsIEZQREZBUElfRlRfT3V0bGluZV9Eb25lX0ludGVybmFsIAorI2RlZmluZSBGVF9PdXRsaW5lX05ld19JbnRlcm5hbCBGUERGQVBJX0ZUX091dGxpbmVfTmV3X0ludGVybmFsIAorI2RlZmluZSBGVF9PdXRsaW5lX05ldyBGUERGQVBJX0ZUX091dGxpbmVfTmV3IAorI2RlZmluZSBGVF9PdXRsaW5lX0NoZWNrIEZQREZBUElfRlRfT3V0bGluZV9DaGVjayAKKyNkZWZpbmUgRlRfT3V0bGluZV9Db3B5IEZQREZBUElfRlRfT3V0bGluZV9Db3B5IAorI2RlZmluZSBGVF9PdXRsaW5lX0RvbmUgRlBERkFQSV9GVF9PdXRsaW5lX0RvbmUgCisjZGVmaW5lIEZUX091dGxpbmVfUmV2ZXJzZSBGUERGQVBJX0ZUX091dGxpbmVfUmV2ZXJzZSAKKyNkZWZpbmUgRlRfU2V0X1JlbmRlcmVyIEZQREZBUElfRlRfU2V0X1JlbmRlcmVyIAorI2RlZmluZSBGVF9Mb29rdXBfUmVuZGVyZXIgRlBERkFQSV9GVF9Mb29rdXBfUmVuZGVyZXIgCisjZGVmaW5lIEZUX091dGxpbmVfUmVuZGVyIEZQREZBUElfRlRfT3V0bGluZV9SZW5kZXIgCisjZGVmaW5lIEZUX091dGxpbmVfR2V0X0JpdG1hcCBGUERGQVBJX0ZUX091dGxpbmVfR2V0X0JpdG1hcCAKKyNkZWZpbmUgRlRfT3V0bGluZV9HZXRfT3JpZW50YXRpb24gRlBERkFQSV9GVF9PdXRsaW5lX0dldF9PcmllbnRhdGlvbiAKKyNkZWZpbmUgRlRfT3V0bGluZV9FbWJvbGRlbiBGUERGQVBJX0ZUX091dGxpbmVfRW1ib2xkZW4gCisjZGVmaW5lIEZUX0dseXBoTG9hZGVyX1Jlc2V0IEZQREZBUElfRlRfR2x5cGhMb2FkZXJfUmVzZXQgCisjZGVmaW5lIEZUX0dseXBoTG9hZGVyX1ByZXBhcmUgRlBERkFQSV9GVF9HbHlwaExvYWRlcl9QcmVwYXJlIAorI2RlZmluZSBmdF9zZXJ2aWNlX2xpc3RfbG9va3VwIEZQREZBUElfZnRfc2VydmljZV9saXN0X2xvb2t1cCAKKyNkZWZpbmUgZnRfdmFsaWRhdG9yX2luaXQgRlBERkFQSV9mdF92YWxpZGF0b3JfaW5pdCAKKyNkZWZpbmUgZnRfdmFsaWRhdG9yX3J1biBGUERGQVBJX2Z0X3ZhbGlkYXRvcl9ydW4gCisjZGVmaW5lIGZ0X3ZhbGlkYXRvcl9lcnJvciBGUERGQVBJX2Z0X3ZhbGlkYXRvcl9lcnJvciAKKyNkZWZpbmUgRlRfU3RyZWFtX05ldyBGUERGQVBJX0ZUX1N0cmVhbV9OZXcgCisjZGVmaW5lIEZUX1N0cmVhbV9GcmVlIEZQREZBUElfRlRfU3RyZWFtX0ZyZWUgCisjZGVmaW5lIGZ0X2dseXBoc2xvdF9mcmVlX2JpdG1hcCBGUERGQVBJX2Z0X2dseXBoc2xvdF9mcmVlX2JpdG1hcCAKKyNkZWZpbmUgZnRfZ2x5cGhzbG90X3NldF9iaXRtYXAgRlBERkFQSV9mdF9nbHlwaHNsb3Rfc2V0X2JpdG1hcCAKKyNkZWZpbmUgRlRfR2x5cGhTbG90X093bl9CaXRtYXAgRlBERkFQSV9GVF9HbHlwaFNsb3RfT3duX0JpdG1hcAorI2RlZmluZSBmdF9nbHlwaHNsb3RfYWxsb2NfYml0bWFwIEZQREZBUElfZnRfZ2x5cGhzbG90X2FsbG9jX2JpdG1hcCAKKyNkZWZpbmUgRlRfTmV3X0dseXBoU2xvdCBGUERGQVBJX0ZUX05ld19HbHlwaFNsb3QgCisjZGVmaW5lIEZUX0RvbmVfR2x5cGhTbG90IEZQREZBUElfRlRfRG9uZV9HbHlwaFNsb3QgCisjZGVmaW5lIEZUX1NldF9UcmFuc2Zvcm0gRlBERkFQSV9GVF9TZXRfVHJhbnNmb3JtIAorI2RlZmluZSBGVF9SZW5kZXJfR2x5cGhfSW50ZXJuYWwgRlBERkFQSV9GVF9SZW5kZXJfR2x5cGhfSW50ZXJuYWwgCisjZGVmaW5lIEZUX1JlbmRlcl9HbHlwaCBGUERGQVBJX0ZUX1JlbmRlcl9HbHlwaCAKKyNkZWZpbmUgRlRfTG9hZF9DaGFyIEZQREZBUElfRlRfTG9hZF9DaGFyIAorI2RlZmluZSBGVF9OZXdfU2l6ZSBGUERGQVBJX0ZUX05ld19TaXplIAorI2RlZmluZSBGVF9PcGVuX0ZhY2UgRlBERkFQSV9GVF9PcGVuX0ZhY2UgCisjZGVmaW5lIEZUX0F0dGFjaF9TdHJlYW0gRlBERkFQSV9GVF9BdHRhY2hfU3RyZWFtIAorI2RlZmluZSBGVF9BdHRhY2hfRmlsZSBGUERGQVBJX0ZUX0F0dGFjaF9GaWxlIAorI2RlZmluZSBGVF9Eb25lX1NpemUgRlBERkFQSV9GVF9Eb25lX1NpemUgCisjZGVmaW5lIEZUX1NldF9DaGFyX1NpemUgRlBERkFQSV9GVF9TZXRfQ2hhcl9TaXplIAorI2RlZmluZSBGVF9TZXRfUGl4ZWxfU2l6ZXMgRlBERkFQSV9GVF9TZXRfUGl4ZWxfU2l6ZXMgCisjZGVmaW5lIEZUX0dldF9LZXJuaW5nIEZQREZBUElfRlRfR2V0X0tlcm5pbmcgCisjZGVmaW5lIEZUX0NNYXBfRG9uZSBGUERGQVBJX0ZUX0NNYXBfRG9uZSAKKyNkZWZpbmUgRlRfQ01hcF9OZXcgRlBERkFQSV9GVF9DTWFwX05ldyAKKyNkZWZpbmUgRlRfR2V0X05leHRfQ2hhciBGUERGQVBJX0ZUX0dldF9OZXh0X0NoYXIgCisjZGVmaW5lIEZUX0dldF9GaXJzdF9DaGFyIEZQREZBUElfRlRfR2V0X0ZpcnN0X0NoYXIgCisjZGVmaW5lIEZUX0dldF9OYW1lX0luZGV4IEZQREZBUElfRlRfR2V0X05hbWVfSW5kZXggCisjZGVmaW5lIEZUX0dldF9HbHlwaF9OYW1lIEZQREZBUElfRlRfR2V0X0dseXBoX05hbWUgCisjZGVmaW5lIEZUX0dldF9Qb3N0c2NyaXB0X05hbWUgRlBERkFQSV9GVF9HZXRfUG9zdHNjcmlwdF9OYW1lIAorI2RlZmluZSBGVF9HZXRfU2ZudF9UYWJsZSBGUERGQVBJX0ZUX0dldF9TZm50X1RhYmxlIAorI2RlZmluZSBGVF9Mb2FkX1NmbnRfVGFibGUgRlBERkFQSV9GVF9Mb2FkX1NmbnRfVGFibGUgCisjZGVmaW5lIEZUX1NmbnRfVGFibGVfSW5mbyBGUERGQVBJX0ZUX1NmbnRfVGFibGVfSW5mbyAKKyNkZWZpbmUgRlRfR2V0X0NNYXBfTGFuZ3VhZ2VfSUQgRlBERkFQSV9GVF9HZXRfQ01hcF9MYW5ndWFnZV9JRCAKKyNkZWZpbmUgRlRfQWN0aXZhdGVfU2l6ZSBGUERGQVBJX0ZUX0FjdGl2YXRlX1NpemUgCisjZGVmaW5lIEZUX0dldF9SZW5kZXJlciBGUERGQVBJX0ZUX0dldF9SZW5kZXJlciAKKyNkZWZpbmUgRlRfUmVtb3ZlX01vZHVsZSBGUERGQVBJX0ZUX1JlbW92ZV9Nb2R1bGUgCisjZGVmaW5lIEZUX0FkZF9Nb2R1bGUgRlBERkFQSV9GVF9BZGRfTW9kdWxlIAorI2RlZmluZSBGVF9HZXRfTW9kdWxlIEZQREZBUElfRlRfR2V0X01vZHVsZSAKKyNkZWZpbmUgRlRfR2V0X01vZHVsZV9JbnRlcmZhY2UgRlBERkFQSV9GVF9HZXRfTW9kdWxlX0ludGVyZmFjZSAKKyNkZWZpbmUgZnRfbW9kdWxlX2dldF9zZXJ2aWNlIEZQREZBUElfZnRfbW9kdWxlX2dldF9zZXJ2aWNlIAorI2RlZmluZSBGVF9OZXdfTGlicmFyeSBGUERGQVBJX0ZUX05ld19MaWJyYXJ5IAorI2RlZmluZSBGVF9MaWJyYXJ5X1ZlcnNpb24gRlBERkFQSV9GVF9MaWJyYXJ5X1ZlcnNpb24gCisjZGVmaW5lIEZUX0RvbmVfTGlicmFyeSBGUERGQVBJX0ZUX0RvbmVfTGlicmFyeSAKKyNkZWZpbmUgRlRfU2V0X0RlYnVnX0hvb2sgRlBERkFQSV9GVF9TZXRfRGVidWdfSG9vayAKKyNkZWZpbmUgRlRfUmFjY2Vzc19HZXRfSGVhZGVySW5mbyBGUERGQVBJX0ZUX1JhY2Nlc3NfR2V0X0hlYWRlckluZm8gCisjZGVmaW5lIEZUX1JhY2Nlc3NfR2V0X0RhdGFPZmZzZXRzIEZQREZBUElfRlRfUmFjY2Vzc19HZXRfRGF0YU9mZnNldHMgCisjZGVmaW5lIEZUX1JhY2Nlc3NfR3Vlc3MgRlBERkFQSV9GVF9SYWNjZXNzX0d1ZXNzCisjZGVmaW5lIGFmX2R1bW15X3NjcmlwdF9jbGFzcyBGUERGQVBJX2FmX2R1bW15X3NjcmlwdF9jbGFzcworI2RlZmluZSBhZl9sYXRpbl9zY3JpcHRfY2xhc3MgRlBERkFQSV9hZl9sYXRpbl9zY3JpcHRfY2xhc3MKKyNkZWZpbmUgYWZfY2prX3NjcmlwdF9jbGFzcyBGUERGQVBJX2FmX2Nqa19zY3JpcHRfY2xhc3MKKyNkZWZpbmUgYWZfYXV0b2ZpdHRlcl9zZXJ2aWNlIEZQREZBUElfYWZfYXV0b2ZpdHRlcl9zZXJ2aWNlCisjZGVmaW5lIGF1dG9maXRfbW9kdWxlX2NsYXNzIEZQREZBUElfYXV0b2ZpdF9tb2R1bGVfY2xhc3MKKyNkZWZpbmUgY2ZmX2NtYXBfZW5jb2RpbmdfY2xhc3NfcmVjIEZQREZBUElfY2ZmX2NtYXBfZW5jb2RpbmdfY2xhc3NfcmVjCisjZGVmaW5lIGNmZl9jbWFwX3VuaWNvZGVfY2xhc3NfcmVjIEZQREZBUElfY2ZmX2NtYXBfdW5pY29kZV9jbGFzc19yZWMKKyNkZWZpbmUgY2ZmX2RyaXZlcl9jbGFzcyBGUERGQVBJX2NmZl9kcml2ZXJfY2xhc3MKKyNkZWZpbmUgRlRfU3RyZWFtX09wZW4gRlBERkFQSV9GVF9TdHJlYW1fT3BlbgorI2RlZmluZSBGVF9OZXdfTWVtb3J5IEZQREZBUElfRlRfTmV3X01lbW9yeQorI2RlZmluZSBGVF9Eb25lX01lbW9yeSBGUERGQVBJX0ZUX0RvbmVfTWVtb3J5CisjZGVmaW5lIGZ0X21lbV9xYWxsb2MgRlBERkFQSV9mdF9tZW1fcWFsbG9jCisjZGVmaW5lIGZ0X21lbV9hbGxvYyBGUERGQVBJX2Z0X21lbV9hbGxvYworI2RlZmluZSBmdF9tZW1fZnJlZSBGUERGQVBJX2Z0X21lbV9mcmVlCisjZGVmaW5lIGZ0X21lbV9xcmVhbGxvYyBGUERGQVBJX2Z0X21lbV9xcmVhbGxvYworI2RlZmluZSBmdF9tZW1fcmVhbGxvYyBGUERGQVBJX2Z0X21lbV9yZWFsbG9jCisjZGVmaW5lIEZUX0dldF9UcnVlVHlwZV9FbmdpbmVfVHlwZSBGUERGQVBJX0ZUX0dldF9UcnVlVHlwZV9FbmdpbmVfVHlwZQorI2RlZmluZSBmdF9zdHViX3NldF9jaGFyX3NpemVzIEZQREZBUElfZnRfc3R1Yl9zZXRfY2hhcl9zaXplcworI2RlZmluZSBmdF9zdHViX3NldF9waXhlbF9zaXplcyBGUERGQVBJX2Z0X3N0dWJfc2V0X3BpeGVsX3NpemVzCisjZGVmaW5lIEZUX0dldF9TdWJHbHlwaF9JbmZvIEZQREZBUElfRlRfR2V0X1N1YkdseXBoX0luZm8KKyNkZWZpbmUgRlRfR2V0X1NmbnRfTmFtZV9Db3VudCBGUERGQVBJX0ZUX0dldF9TZm50X05hbWVfQ291bnQKKyNkZWZpbmUgRlRfR2V0X1NmbnRfTmFtZSBGUERGQVBJX0ZUX0dldF9TZm50X05hbWUKKyNkZWZpbmUgRlRfQml0bWFwX05ldyBGUERGQVBJX0ZUX0JpdG1hcF9OZXcKKyNkZWZpbmUgRlRfQml0bWFwX0NvcHkgRlBERkFQSV9GVF9CaXRtYXBfQ29weQorI2RlZmluZSBGVF9CaXRtYXBfRG9uZSBGUERGQVBJX0ZUX0JpdG1hcF9Eb25lCisjZGVmaW5lIEZUX0JpdG1hcF9Db252ZXJ0IEZQREZBUElfRlRfQml0bWFwX0NvbnZlcnQKKyNkZWZpbmUgRlRfQml0bWFwX0VtYm9sZGVuIEZQREZBUElfRlRfQml0bWFwX0VtYm9sZGVuCisjZGVmaW5lIGZ0X2JpdG1hcF9nbHlwaF9jbGFzcyBGUERGQVBJX2Z0X2JpdG1hcF9nbHlwaF9jbGFzcworI2RlZmluZSBmdF9vdXRsaW5lX2dseXBoX2NsYXNzIEZQREZBUElfZnRfb3V0bGluZV9nbHlwaF9jbGFzcworI2RlZmluZSBGVF9NYXRyaXhfTXVsdGlwbHkgRlBERkFQSV9GVF9NYXRyaXhfTXVsdGlwbHkKKyNkZWZpbmUgRlRfTWF0cml4X0ludmVydCBGUERGQVBJX0ZUX01hdHJpeF9JbnZlcnQKKyNkZWZpbmUgRlRfRG9uZV9HbHlwaCBGUERGQVBJX0ZUX0RvbmVfR2x5cGgKKyNkZWZpbmUgRlRfR2x5cGhfQ29weSBGUERGQVBJX0ZUX0dseXBoX0NvcHkKKyNkZWZpbmUgRlRfR2V0X0dseXBoIEZQREZBUElfRlRfR2V0X0dseXBoCisjZGVmaW5lIEZUX0dseXBoX1RyYW5zZm9ybSBGUERGQVBJX0ZUX0dseXBoX1RyYW5zZm9ybQorI2RlZmluZSBGVF9HbHlwaF9HZXRfQ0JveCBGUERGQVBJX0ZUX0dseXBoX0dldF9DQm94CisjZGVmaW5lIEZUX0dseXBoX1RvX0JpdG1hcCBGUERGQVBJX0ZUX0dseXBoX1RvX0JpdG1hcAorI2RlZmluZSBGVF9BZGRfRGVmYXVsdF9Nb2R1bGVzIEZQREZBUElfRlRfQWRkX0RlZmF1bHRfTW9kdWxlcworI2RlZmluZSBGVF9HZXRfTXVsdGlfTWFzdGVyIEZQREZBUElfRlRfR2V0X011bHRpX01hc3RlcgorI2RlZmluZSBGVF9HZXRfTU1fVmFyIEZQREZBUElfRlRfR2V0X01NX1ZhcgorI2RlZmluZSBGVF9TZXRfTU1fRGVzaWduX0Nvb3JkaW5hdGVzIEZQREZBUElfRlRfU2V0X01NX0Rlc2lnbl9Db29yZGluYXRlcworI2RlZmluZSBGVF9TZXRfVmFyX0Rlc2lnbl9Db29yZGluYXRlcyBGUERGQVBJX0ZUX1NldF9WYXJfRGVzaWduX0Nvb3JkaW5hdGVzCisjZGVmaW5lIEZUX1NldF9NTV9CbGVuZF9Db29yZGluYXRlcyBGUERGQVBJX0ZUX1NldF9NTV9CbGVuZF9Db29yZGluYXRlcworI2RlZmluZSBGVF9TZXRfVmFyX0JsZW5kX0Nvb3JkaW5hdGVzIEZQREZBUElfRlRfU2V0X1Zhcl9CbGVuZF9Db29yZGluYXRlcworI2RlZmluZSBwc190YWJsZV9mdW5jcyBGUERGQVBJX3BzX3RhYmxlX2Z1bmNzCisjZGVmaW5lIHBzX3BhcnNlcl9mdW5jcyBGUERGQVBJX3BzX3BhcnNlcl9mdW5jcworI2RlZmluZSB0MV9idWlsZGVyX2Z1bmNzIEZQREZBUElfdDFfYnVpbGRlcl9mdW5jcworI2RlZmluZSB0MV9kZWNvZGVyX2Z1bmNzIEZQREZBUElfdDFfZGVjb2Rlcl9mdW5jcworI2RlZmluZSBhZm1fcGFyc2VyX2Z1bmNzIEZQREZBUElfYWZtX3BhcnNlcl9mdW5jcworI2RlZmluZSB0MV9jbWFwX2NsYXNzZXMgRlBERkFQSV90MV9jbWFwX2NsYXNzZXMKKyNkZWZpbmUgdDFfY21hcF9zdGFuZGFyZF9jbGFzc19yZWMgRlBERkFQSV90MV9jbWFwX3N0YW5kYXJkX2NsYXNzX3JlYworI2RlZmluZSB0MV9jbWFwX2V4cGVydF9jbGFzc19yZWMgRlBERkFQSV90MV9jbWFwX2V4cGVydF9jbGFzc19yZWMKKyNkZWZpbmUgdDFfY21hcF9jdXN0b21fY2xhc3NfcmVjIEZQREZBUElfdDFfY21hcF9jdXN0b21fY2xhc3NfcmVjCisjZGVmaW5lIHQxX2NtYXBfdW5pY29kZV9jbGFzc19yZWMgRlBERkFQSV90MV9jbWFwX3VuaWNvZGVfY2xhc3NfcmVjCisjZGVmaW5lIHBzYXV4X21vZHVsZV9jbGFzcyBGUERGQVBJX3BzYXV4X21vZHVsZV9jbGFzcworI2RlZmluZSBwc2hpbnRlcl9tb2R1bGVfY2xhc3MgRlBERkFQSV9wc2hpbnRlcl9tb2R1bGVfY2xhc3MKKyNkZWZpbmUgcHNfaGludHNfYXBwbHkgRlBERkFQSV9wc19oaW50c19hcHBseQorI2RlZmluZSBwc25hbWVzX21vZHVsZV9jbGFzcyBGUERGQVBJX3BzbmFtZXNfbW9kdWxlX2NsYXNzCisjZGVmaW5lIGZ0X3Jhc3RlcjFfcmVuZGVyZXJfY2xhc3MgRlBERkFQSV9mdF9yYXN0ZXIxX3JlbmRlcmVyX2NsYXNzCisjZGVmaW5lIGZ0X3N0YW5kYXJkX3Jhc3RlciBGUERGQVBJX2Z0X3N0YW5kYXJkX3Jhc3RlcgorI2RlZmluZSBmdF9yYXN0ZXI1X3JlbmRlcmVyX2NsYXNzIEZQREZBUElfZnRfcmFzdGVyNV9yZW5kZXJlcl9jbGFzcworI2RlZmluZSB0dF9jbWFwMF9jbGFzc19yZWMgRlBERkFQSV90dF9jbWFwMF9jbGFzc19yZWMKKyNkZWZpbmUgdHRfY21hcDJfY2xhc3NfcmVjIEZQREZBUElfdHRfY21hcDJfY2xhc3NfcmVjCisjZGVmaW5lIHR0X2NtYXA0X2NsYXNzX3JlYyBGUERGQVBJX3R0X2NtYXA0X2NsYXNzX3JlYworI2RlZmluZSB0dF9jbWFwNl9jbGFzc19yZWMgRlBERkFQSV90dF9jbWFwNl9jbGFzc19yZWMKKyNkZWZpbmUgdHRfY21hcDhfY2xhc3NfcmVjIEZQREZBUElfdHRfY21hcDhfY2xhc3NfcmVjCisjZGVmaW5lIHR0X2NtYXAxMF9jbGFzc19yZWMgRlBERkFQSV90dF9jbWFwMTBfY2xhc3NfcmVjCisjZGVmaW5lIHR0X2NtYXAxMl9jbGFzc19yZWMgRlBERkFQSV90dF9jbWFwMTJfY2xhc3NfcmVjCisjZGVmaW5lIHR0X2NtYXAxM19jbGFzc19yZWMgRlBERkFQSV90dF9jbWFwMTNfY2xhc3NfcmVjCisjZGVmaW5lIHR0X2NtYXAxNF9jbGFzc19yZWMgRlBERkFQSV90dF9jbWFwMTRfY2xhc3NfcmVjCisjZGVmaW5lIHNmbnRfbW9kdWxlX2NsYXNzIEZQREZBUElfc2ZudF9tb2R1bGVfY2xhc3MKKyNkZWZpbmUgZnRfZ3JheXNfcmFzdGVyIEZQREZBUElfZnRfZ3JheXNfcmFzdGVyCisjZGVmaW5lIGZ0X3Ntb290aF9yZW5kZXJlcl9jbGFzcyBGUERGQVBJX2Z0X3Ntb290aF9yZW5kZXJlcl9jbGFzcworI2RlZmluZSBmdF9zbW9vdGhfbGNkX3JlbmRlcmVyX2NsYXNzIEZQREZBUElfZnRfc21vb3RoX2xjZF9yZW5kZXJlcl9jbGFzcworI2RlZmluZSBmdF9zbW9vdGhfbGNkdl9yZW5kZXJlcl9jbGFzcyBGUERGQVBJX2Z0X3Ntb290aF9sY2R2X3JlbmRlcmVyX2NsYXNzCisjZGVmaW5lIHR0X2RlZmF1bHRfZ3JhcGhpY3Nfc3RhdGUgRlBERkFQSV90dF9kZWZhdWx0X2dyYXBoaWNzX3N0YXRlCisjZGVmaW5lIHR0X2RyaXZlcl9jbGFzcyBGUERGQVBJX3R0X2RyaXZlcl9jbGFzcworI2RlZmluZSBUVF9SdW5JbnMgRlBERkFQSV9UVF9SdW5JbnMKKyNkZWZpbmUgVFRfTmV3X0NvbnRleHQgRlBERkFQSV9UVF9OZXdfQ29udGV4dAorI2RlZmluZSB0MV9kcml2ZXJfY2xhc3MgRlBERkFQSV90MV9kcml2ZXJfY2xhc3MKKyNkZWZpbmUgdDFjaWRfZHJpdmVyX2NsYXNzIEZQREZBUElfdDFjaWRfZHJpdmVyX2NsYXNzCisjZGVmaW5lIEZUX0dldF9UcmFja19LZXJuaW5nIEZQREZBUElfRlRfR2V0X1RyYWNrX0tlcm5pbmcKKyNkZWZpbmUgRlRfTWF0Y2hfU2l6ZSBGUERGQVBJX0ZUX01hdGNoX1NpemUKKyNkZWZpbmUgRlRfTXVsRGl2X05vX1JvdW5kIEZQREZBUElfRlRfTXVsRGl2X05vX1JvdW5kCisjZGVmaW5lIEZUX1JlcXVlc3RfTWV0cmljcyBGUERGQVBJX0ZUX1JlcXVlc3RfTWV0cmljcworI2RlZmluZSBGVF9SZXF1ZXN0X1NpemUgRlBERkFQSV9GVF9SZXF1ZXN0X1NpemUKKyNkZWZpbmUgRlRfU2VsZWN0X01ldHJpY3MgRlBERkFQSV9GVF9TZWxlY3RfTWV0cmljcworI2RlZmluZSBGVF9TZWxlY3RfU2l6ZSBGUERGQVBJX0ZUX1NlbGVjdF9TaXplCisjZGVmaW5lIGZ0X3N5bnRoZXNpemVfdmVydGljYWxfbWV0cmljcyBGUERGQVBJX2Z0X3N5bnRoZXNpemVfdmVydGljYWxfbWV0cmljcworI2RlZmluZSBOZXdfUHJvZmlsZSBGUERGQVBJX05ld19Qcm9maWxlCisjZGVmaW5lIEVuZF9Qcm9maWxlIEZQREZBUElfRW5kX1Byb2ZpbGUKKyNkZWZpbmUgSW5zZXJ0X1lfVHVybiBGUERGQVBJX0luc2VydF9ZX1R1cm4gCisjZGVmaW5lIFNwbGl0X0NvbmljIEZQREZBUElfU3BsaXRfQ29uaWMgIAorI2RlZmluZSBTcGxpdF9DdWJpYyBGUERGQVBJX1NwbGl0X0N1YmljCisjZGVmaW5lIExpbmVfVXAgRlBERkFQSV9MaW5lX1VwIAorI2RlZmluZSBCZXppZXJfVXAgRlBERkFQSV9CZXppZXJfVXAgCisjZGVmaW5lIEJlemllcl9Eb3duIEZQREZBUElfQmV6aWVyX0Rvd24gCisjZGVmaW5lIExpbmVfVG8gRlBERkFQSV9MaW5lX1RvCisjZGVmaW5lIENvbmljX1RvIEZQREZBUElfQ29uaWNfVG8gCisjZGVmaW5lIEN1YmljX1RvIEZQREZBUElfQ3ViaWNfVG8KKyNkZWZpbmUgRGVjb21wb3NlX0N1cnZlIEZQREZBUElfRGVjb21wb3NlX0N1cnZlCisjZGVmaW5lIENvbnZlcnRfR2x5cGggRlBERkFQSV9Db252ZXJ0X0dseXBoIAorI2RlZmluZSBTb3J0IEZQREZBUElfU29ydCAKKyNkZWZpbmUgVmVydGljYWxfU3dlZXBfSW5pdCBGUERGQVBJX1ZlcnRpY2FsX1N3ZWVwX0luaXQgCisjZGVmaW5lIFZlcnRpY2FsX1N3ZWVwX1NwYW4gRlBERkFQSV9WZXJ0aWNhbF9Td2VlcF9TcGFuIAorI2RlZmluZSBWZXJ0aWNhbF9Td2VlcF9Ecm9wIEZQREZBUElfVmVydGljYWxfU3dlZXBfRHJvcCAKKyNkZWZpbmUgVmVydGljYWxfU3dlZXBfU3RlcCBGUERGQVBJX1ZlcnRpY2FsX1N3ZWVwX1N0ZXAgCisjZGVmaW5lIEhvcml6b250YWxfU3dlZXBfSW5pdCBGUERGQVBJX0hvcml6b250YWxfU3dlZXBfSW5pdCAKKyNkZWZpbmUgSG9yaXpvbnRhbF9Td2VlcF9TcGFuIEZQREZBUElfSG9yaXpvbnRhbF9Td2VlcF9TcGFuIAorI2RlZmluZSBIb3Jpem9udGFsX1N3ZWVwX0Ryb3AgRlBERkFQSV9Ib3Jpem9udGFsX1N3ZWVwX0Ryb3AgCisjZGVmaW5lIEhvcml6b250YWxfU3dlZXBfU3RlcCBGUERGQVBJX0hvcml6b250YWxfU3dlZXBfU3RlcCAKKyNkZWZpbmUgRHJhd19Td2VlcCBGUERGQVBJX0RyYXdfU3dlZXAgCisjZGVmaW5lIFJlbmRlcl9TaW5nbGVfUGFzcyBGUERGQVBJX1JlbmRlcl9TaW5nbGVfUGFzcyAKKyNkZWZpbmUgUmVuZGVyX0dseXBoIEZQREZBUElfUmVuZGVyX0dseXBoICAKKyNkZWZpbmUgRmluYWxpemVfUHJvZmlsZV9UYWJsZSBGUERGQVBJX0ZpbmFsaXplX1Byb2ZpbGVfVGFibGUgCisjZGVmaW5lIEluc05ldyBGUERGQVBJX0luc05ldyAKKyNkZWZpbmUgRGVsT2xkIEZQREZBUElfRGVsT2xkCisjZGVmaW5lIEZUX011bEZpeCBGUERGQVBJX0ZUX011bEZpeAorI2RlZmluZSBGVF9NYXRyaXhfTXVsdGlwbHlfU2NhbGVkIEZQREZBUElfRlRfTWF0cml4X011bHRpcGx5X1NjYWxlZAorI2RlZmluZSBGVF9WZWN0b3JfVHJhbnNmb3JtX1NjYWxlZCBGUERGQVBJX0ZUX1ZlY3Rvcl9UcmFuc2Zvcm1fU2NhbGVkCisjZGVmaW5lIGZ0X2Nvcm5lcl9vcmllbnRhdGlvbiBGUERGQVBJX2Z0X2Nvcm5lcl9vcmllbnRhdGlvbgorI2RlZmluZSBmdF9jb3JuZXJfaXNfZmxhdCBGUERGQVBJX2Z0X2Nvcm5lcl9pc19mbGF0CisjZGVmaW5lIEZUX0dldF9DTWFwX0Zvcm1hdCBGUERGQVBJX0ZUX0dldF9DTWFwX0Zvcm1hdAorI2RlZmluZSBmdF9tZW1fc3RyY3B5biBGUERGQVBJX2Z0X21lbV9zdHJjcHluCisjZGVmaW5lIGZ0X21lbV9kdXAgRlBERkFQSV9mdF9tZW1fZHVwCisjZGVmaW5lIGZ0X21lbV9zdHJkdXAgRlBERkFQSV9mdF9tZW1fc3RyZHVwCisjZGVmaW5lIEZUX0ZhY2VfR2V0Q2hhclZhcmlhbnRJc0RlZmF1bHQgRlBERkFQSV9GVF9GYWNlX0dldENoYXJWYXJpYW50SXNEZWZhdWx0CisjZGVmaW5lIEZUX0ZhY2VfR2V0Q2hhcnNPZlZhcmlhbnQgRlBERkFQSV9GVF9GYWNlX0dldENoYXJzT2ZWYXJpYW50CisjZGVmaW5lIEZUX0ZhY2VfR2V0VmFyaWFudHNPZkNoYXIgRlBERkFQSV9GVF9GYWNlX0dldFZhcmlhbnRzT2ZDaGFyCisjZGVmaW5lIEZUX0ZhY2VfR2V0VmFyaWFudFNlbGVjdG9ycyBGUERGQVBJX0ZUX0ZhY2VfR2V0VmFyaWFudFNlbGVjdG9ycworI2RlZmluZSBGVF9GYWNlX0dldENoYXJWYXJpYW50SW5kZXggRlBERkFQSV9GVF9GYWNlX0dldENoYXJWYXJpYW50SW5kZXgKKyNkZWZpbmUgRlRfR2V0X0FkdmFuY2VzIEZQREZBUElfRlRfR2V0X0FkdmFuY2VzCisjZGVmaW5lIEZUX0dldF9BZHZhbmNlIEZQREZBUElfRlRfR2V0X0FkdmFuY2UKKyNkZWZpbmUgRlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIgRlBERkFQSV9GVF9MaWJyYXJ5X1NldExjZEZpbHRlcgorIAorI2VuZGlmIC8vICFfRlhfRlJFRVRZUEVfRE9OVF9SRU5BTUVfCmRpZmYgLS1naXQgYS9jb3JlL2luY2x1ZGUvdGhpcmRwYXJ0aWVzL2ZyZWV0eXBlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oIGIvY29yZS9pbmNsdWRlL3RoaXJkcGFydGllcy9mcmVldHlwZS9mcmVldHlwZS9jb25maWcvZnRjb25maWcuaAppbmRleCBlNGViNGRjLi5iOTcxZDE0IDEwMDY0NAotLS0gYS9jb3JlL2luY2x1ZGUvdGhpcmRwYXJ0aWVzL2ZyZWV0eXBlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oCisrKyBiL2NvcmUvaW5jbHVkZS90aGlyZHBhcnRpZXMvZnJlZXR5cGUvZnJlZXR5cGUvY29uZmlnL2Z0Y29uZmlnLmgKQEAgLTMzNyw3ICszMzcsNyBAQAogICAvKiBQcm92aWRlIGFzc2VtYmxlciBmcmFnbWVudHMgZm9yIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGZ1bmN0aW9ucy4gKi8KICAgLyogVGhlc2UgbXVzdCBiZSBkZWZpbmVkIGBzdGF0aWMgX19pbmxpbmVfXycgd2l0aCBHQ0MuICAgICAgICAgICAgICovCiAKLSAgLyoqSm9obnNvbiBhZGQgIWRlZmluZWQoIF9fdGh1bWJfXyApKi8NCisgIC8qKkpvaG5zb24gYWRkICFkZWZpbmVkKCBfX3RodW1iX18gKSovCiAjaWYgKGRlZmluZWQoIF9fQ0NfQVJNICkgfHwgZGVmaW5lZCggX19BUk1DQ19fICkpJiYgIWRlZmluZWQoIF9fdGh1bWJfXyApICAvKiBSVkNUICovCiAjZGVmaW5lIEZUX01VTEZJWF9BU1NFTUJMRVIgIEZUX011bEZpeF9hcm0KIApkaWZmIC0tZ2l0IGEvY29yZS9pbmNsdWRlL3RoaXJkcGFydGllcy9mcmVldHlwZS9mcmVldHlwZS9mcmVldHlwZS5oIGIvY29yZS9pbmNsdWRlL3RoaXJkcGFydGllcy9mcmVldHlwZS9mcmVldHlwZS9mcmVldHlwZS5oCmluZGV4IDdhMzE5MjMuLmI2Yzc3MTUgMTAwNjQ0Ci0tLSBhL2NvcmUvaW5jbHVkZS90aGlyZHBhcnRpZXMvZnJlZXR5cGUvZnJlZXR5cGUvZnJlZXR5cGUuaAorKysgYi9jb3JlL2luY2x1ZGUvdGhpcmRwYXJ0aWVzL2ZyZWV0eXBlL2ZyZWV0eXBlL2ZyZWV0eXBlLmgKQEAgLTEsNDAxNiArMSw0MDE2IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogIGZyZWV0eXBlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICAgIEZyZWVUeXBlIGhpZ2gtbGV2ZWwgQVBJIGFuZCBjb21tb24gdHlwZXMgKHNwZWNpZmljYXRpb24gb25seSkuICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgQ29weXJpZ2h0IDE5OTYtMjAxMyBieSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLS8qICBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKiAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCAgICAgICAqLw0KLS8qICBtb2RpZmllZCwgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCAgICAgICovDQotLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8NCi0vKiAgdGhpcyBmaWxlIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kICAgICAgICAgICAgICAqLw0KLS8qICB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQgZnVsbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLQ0KLSNpZm5kZWYgX19GUkVFVFlQRV9IX18NCi0jZGVmaW5lIF9fRlJFRVRZUEVfSF9fDQotDQotDQotI2lmbmRlZiBGVF9GUkVFVFlQRV9IDQotI2Vycm9yICJgZnQyYnVpbGQuaCcgaGFzbid0IGJlZW4gaW5jbHVkZWQgeWV0ISINCi0jZXJyb3IgIlBsZWFzZSBhbHdheXMgdXNlIG1hY3JvcyB0byBpbmNsdWRlIEZyZWVUeXBlIGhlYWRlciBmaWxlcy4iDQotI2Vycm9yICJFeGFtcGxlOiINCi0jZXJyb3IgIiAgI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+Ig0KLSNlcnJvciAiICAjaW5jbHVkZSBGVF9GUkVFVFlQRV9IIg0KLSNlbmRpZg0KLQ0KLQ0KLSNpbmNsdWRlICIuLi9mdDJidWlsZC5oIg0KLSNpbmNsdWRlICJjb25maWcvZnRjb25maWcuaCINCi0jaW5jbHVkZSAiZnR0eXBlcy5oIg0KLSNpbmNsdWRlICJmdGVycm9ycy5oIg0KLQ0KLQ0KLUZUX0JFR0lOX0hFQURFUg0KLQ0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgdXNlcl9hbGxvY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVXNlciBhbGxvY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgSG93IGNsaWVudCBhcHBsaWNhdGlvbnMgc2hvdWxkIGFsbG9jYXRlIEZyZWVUeXBlIGRhdGEgc3RydWN0dXJlcy4gICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRnJlZVR5cGUgYXNzdW1lcyB0aGF0IHN0cnVjdHVyZXMgYWxsb2NhdGVkIGJ5IHRoZSB1c2VyIGFuZCBwYXNzZWQgICovDQotICAvKiAgICBhcyBhcmd1bWVudHMgYXJlIHplcm9lZCBvdXQgZXhjZXB0IGZvciB0aGUgYWN0dWFsIGRhdGEuICBJbiBvdGhlciAgKi8NCi0gIC8qICAgIHdvcmRzLCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgYGNhbGxvYycgKG9yIHZhcmlhbnRzIG9mIGl0KSAgICAgICAqLw0KLSAgLyogICAgaW5zdGVhZCBvZiBgbWFsbG9jJyBmb3IgYWxsb2NhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICBCIEEgUyBJIEMgICBUIFkgUCBFIFMgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFNlY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBiYXNlX2ludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFRpdGxlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBCYXNlIEludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEFic3RyYWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGUgRnJlZVR5cGV+MiBiYXNlIGZvbnQgaW50ZXJmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBwdWJsaWMgaGlnaC1sZXZlbCBBUEkgb2YgRnJlZVR5cGV+Mi4gICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE9yZGVyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9MaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9HbHlwaFNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0NoYXJNYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRW5jb2RpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0ZhY2VSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9GQUNFX0ZMQUdfU0NBTEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRkFDRV9GTEFHX0ZJWEVEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19WRVJUSUNBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRkFDRV9GTEFHX1NGTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9GQUNFX0ZMQUdfS0VSTklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19NVUxUSVBMRV9NQVNURVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRkFDRV9GTEFHX0dMWVBIX05BTUVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9GQUNFX0ZMQUdfRVhURVJOQUxfU1RSRUFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19GQVNUX0dMWVBIUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRkFDRV9GTEFHX0hJTlRFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX1NUWUxFX0ZMQUdfQk9MRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfU1RZTEVfRkxBR19JVEFMSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX1NpemVSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfU2l6ZV9NZXRyaWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0dseXBoU2xvdFJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfR2x5cGhfTWV0cmljcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9TdWJHbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfQml0bWFwX1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0luaXRfRnJlZVR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRG9uZV9GcmVlVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX05ld19GYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRG9uZV9GYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9OZXdfTWVtb3J5X0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX09wZW5fRmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfT3Blbl9BcmdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9QYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0F0dGFjaF9GaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfQXR0YWNoX1N0cmVhbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX1NldF9DaGFyX1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfU2V0X1BpeGVsX1NpemVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9SZXF1ZXN0X1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX1NlbGVjdF9TaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfU2l6ZV9SZXF1ZXN0X1R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9TaXplX1JlcXVlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX1NldF9UcmFuc2Zvcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfTG9hZF9HbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9HZXRfQ2hhcl9JbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0dldF9OYW1lX0luZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfTG9hZF9DaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX09QRU5fTUVNT1JZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfT1BFTl9TVFJFQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9PUEVOX1BBVEhOQU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX09QRU5fRFJJVkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfT1BFTl9QQVJBTVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0xPQURfREVGQVVMVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfTE9BRF9SRU5ERVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9MT0FEX01PTk9DSFJPTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0xPQURfTElORUFSX0RFU0lHTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfTE9BRF9OT19TQ0FMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9MT0FEX05PX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0xPQURfTk9fQklUTUFQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfTE9BRF9DUk9QX0JJVE1BUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0xPQURfVkVSVElDQUxfTEFZT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfTE9BRF9JR05PUkVfVFJBTlNGT1JNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9MT0FEX0lHTk9SRV9HTE9CQUxfQURWQU5DRV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0xPQURfRk9SQ0VfQVVUT0hJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfTE9BRF9OT19SRUNVUlNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9MT0FEX1BFREFOVElDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfTE9BRF9UQVJHRVRfTk9STUFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9MT0FEX1RBUkdFVF9MSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0xPQURfVEFSR0VUX01PTk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfTE9BRF9UQVJHRVRfTENEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9MT0FEX1RBUkdFVF9MQ0RfViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfUmVuZGVyX0dseXBoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9SZW5kZXJfTW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0dldF9LZXJuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfS2VybmluZ19Nb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9HZXRfVHJhY2tfS2VybmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0dldF9HbHlwaF9OYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfR2V0X1Bvc3RzY3JpcHRfTmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0NoYXJNYXBSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfU2VsZWN0X0NoYXJtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9TZXRfQ2hhcm1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0dldF9DaGFybWFwX0luZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9GU1RZUEVfSU5TVEFMTEFCTEVfRU1CRURESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0ZTVFlQRV9SRVNUUklDVEVEX0xJQ0VOU0VfRU1CRURESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRlNUWVBFX1BSRVZJRVdfQU5EX1BSSU5UX0VNQkVERElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9GU1RZUEVfRURJVEFCTEVfRU1CRURESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0ZTVFlQRV9OT19TVUJTRVRUSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRlNUWVBFX0JJVE1BUF9FTUJFRERJTkdfT05MWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0dldF9GU1R5cGVfRmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0dseXBoX01ldHJpY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEEgc3RydWN0dXJlIHVzZWQgdG8gbW9kZWwgdGhlIG1ldHJpY3Mgb2YgYSBzaW5nbGUgZ2x5cGguICBUaGUgICAgICAqLw0KLSAgLyogICAgdmFsdWVzIGFyZSBleHByZXNzZWQgaW4gMjYuNiBmcmFjdGlvbmFsIHBpeGVsIGZvcm1hdDsgaWYgdGhlIGZsYWcgICovDQotICAvKiAgICBARlRfTE9BRF9OT19TQ0FMRSBoYXMgYmVlbiB1c2VkIHdoaWxlIGxvYWRpbmcgdGhlIGdseXBoLCB2YWx1ZXMgICAgKi8NCi0gIC8qICAgIGFyZSBleHByZXNzZWQgaW4gZm9udCB1bml0cyBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIHdpZHRoIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBUaGUgZ2x5cGgncyB3aWR0aC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGhlaWdodCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBUaGUgZ2x5cGgncyBoZWlnaHQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGhvcmlCZWFyaW5nWCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBMZWZ0IHNpZGUgYmVhcmluZyBmb3IgaG9yaXpvbnRhbCBsYXlvdXQuICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGhvcmlCZWFyaW5nWSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBUb3Agc2lkZSBiZWFyaW5nIGZvciBob3Jpem9udGFsIGxheW91dC4gICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGhvcmlBZHZhbmNlIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBBZHZhbmNlIHdpZHRoIGZvciBob3Jpem9udGFsIGxheW91dC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIHZlcnRCZWFyaW5nWCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBMZWZ0IHNpZGUgYmVhcmluZyBmb3IgdmVydGljYWwgbGF5b3V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIHZlcnRCZWFyaW5nWSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBUb3Agc2lkZSBiZWFyaW5nIGZvciB2ZXJ0aWNhbCBsYXlvdXQuICBMYXJnZXIgcG9zaXRpdmUgdmFsdWVzICAgICovDQotICAvKiAgICAgIG1lYW4gZnVydGhlciBiZWxvdyB0aGUgdmVydGljYWwgZ2x5cGggb3JpZ2luLiAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgdmVydEFkdmFuY2UgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIEFkdmFuY2UgaGVpZ2h0IGZvciB2ZXJ0aWNhbCBsYXlvdXQuICBQb3NpdGl2ZSB2YWx1ZXMgbWVhbiB0aGUgICAgKi8NCi0gIC8qICAgICAgZ2x5cGggaGFzIGEgcG9zaXRpdmUgYWR2YW5jZSBkb3dud2FyZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIElmIG5vdCBkaXNhYmxlZCB3aXRoIEBGVF9MT0FEX05PX0hJTlRJTkcsIHRoZSB2YWx1ZXMgcmVwcmVzZW50ICAgICAqLw0KLSAgLyogICAgZGltZW5zaW9ucyBvZiB0aGUgaGludGVkIGdseXBoIChpbiBjYXNlIGhpbnRpbmcgaXMgYXBwbGljYWJsZSkuICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFN0cm9raW5nIGEgZ2x5cGggd2l0aCBhbiBvdXRzaWRlIGJvcmRlciBkb2VzIG5vdCBpbmNyZWFzZSAgICAgICAgICAqLw0KLSAgLyogICAgYGhvcmlBZHZhbmNlJyBvciBgdmVydEFkdmFuY2UnOyB5b3UgaGF2ZSB0byBtYW51YWxseSBhZGp1c3QgdGhlc2UgICovDQotICAvKiAgICB2YWx1ZXMgdG8gYWNjb3VudCBmb3IgdGhlIGFkZGVkIHdpZHRoIGFuZCBoZWlnaHQuICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgdHlwZWRlZiBzdHJ1Y3QgIEZUX0dseXBoX01ldHJpY3NfDQotICB7DQotICAgIEZUX1BvcyAgd2lkdGg7DQotICAgIEZUX1BvcyAgaGVpZ2h0Ow0KLQ0KLSAgICBGVF9Qb3MgIGhvcmlCZWFyaW5nWDsNCi0gICAgRlRfUG9zICBob3JpQmVhcmluZ1k7DQotICAgIEZUX1BvcyAgaG9yaUFkdmFuY2U7DQotDQotICAgIEZUX1BvcyAgdmVydEJlYXJpbmdYOw0KLSAgICBGVF9Qb3MgIHZlcnRCZWFyaW5nWTsNCi0gICAgRlRfUG9zICB2ZXJ0QWR2YW5jZTsNCi0NCi0gIH0gRlRfR2x5cGhfTWV0cmljczsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0JpdG1hcF9TaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoaXMgc3RydWN0dXJlIG1vZGVscyB0aGUgbWV0cmljcyBvZiBhIGJpdG1hcCBzdHJpa2UgKGkuZS4sIGEgc2V0ICAqLw0KLSAgLyogICAgb2YgZ2x5cGhzIGZvciBhIGdpdmVuIHBvaW50IHNpemUgYW5kIHJlc29sdXRpb24pIGluIGEgYml0bWFwIGZvbnQuICovDQotICAvKiAgICBJdCBpcyB1c2VkIGZvciB0aGUgYGF2YWlsYWJsZV9zaXplcycgZmllbGQgb2YgQEZUX0ZhY2UuICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBoZWlnaHQgOjogVGhlIHZlcnRpY2FsIGRpc3RhbmNlLCBpbiBwaXhlbHMsIGJldHdlZW4gdHdvICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICBjb25zZWN1dGl2ZSBiYXNlbGluZXMuICBJdCBpcyBhbHdheXMgcG9zaXRpdmUuICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICB3aWR0aCAgOjogVGhlIGF2ZXJhZ2Ugd2lkdGgsIGluIHBpeGVscywgb2YgYWxsIGdseXBocyBpbiB0aGUgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICBzdHJpa2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBzaXplICAgOjogVGhlIG5vbWluYWwgc2l6ZSBvZiB0aGUgc3RyaWtlIGluIDI2LjYgZnJhY3Rpb25hbCAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICBwb2ludHMuICBUaGlzIGZpZWxkIGlzIG5vdCB2ZXJ5IHVzZWZ1bC4gICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICB4X3BwZW0gOjogVGhlIGhvcml6b250YWwgcHBlbSAobm9taW5hbCB3aWR0aCkgaW4gMjYuNiBmcmFjdGlvbmFsICAgKi8NCi0gIC8qICAgICAgICAgICAgICBwaXhlbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICB5X3BwZW0gOjogVGhlIHZlcnRpY2FsIHBwZW0gKG5vbWluYWwgaGVpZ2h0KSBpbiAyNi42IGZyYWN0aW9uYWwgICAgKi8NCi0gIC8qICAgICAgICAgICAgICBwaXhlbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFdpbmRvd3MgRk5UOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBUaGUgbm9taW5hbCBzaXplIGdpdmVuIGluIGEgRk5UIGZvbnQgaXMgbm90IHJlbGlhYmxlLiAgVGh1cyB3aGVuICovDQotICAvKiAgICAgIHRoZSBkcml2ZXIgZmluZHMgaXQgaW5jb3JyZWN0LCBpdCBzZXRzIGBzaXplJyB0byBzb21lIGNhbGN1bGF0ZWQgKi8NCi0gIC8qICAgICAgdmFsdWVzIGFuZCBzZXRzIGB4X3BwZW0nIGFuZCBgeV9wcGVtJyB0byB0aGUgcGl4ZWwgd2lkdGggYW5kICAgICAqLw0KLSAgLyogICAgICBoZWlnaHQgZ2l2ZW4gaW4gdGhlIGZvbnQsIHJlc3BlY3RpdmVseS4gICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRydWVUeXBlIGVtYmVkZGVkIGJpdG1hcHM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBgc2l6ZScsIGB3aWR0aCcsIGFuZCBgaGVpZ2h0JyB2YWx1ZXMgYXJlIG5vdCBjb250YWluZWQgaW4gdGhlICAgICovDQotICAvKiAgICAgIGJpdG1hcCBzdHJpa2UgaXRzZWxmLiAgVGhleSBhcmUgY29tcHV0ZWQgZnJvbSB0aGUgZ2xvYmFsIGZvbnQgICAgKi8NCi0gIC8qICAgICAgcGFyYW1ldGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICB0eXBlZGVmIHN0cnVjdCAgRlRfQml0bWFwX1NpemVfDQotICB7DQotICAgIEZUX1Nob3J0ICBoZWlnaHQ7DQotICAgIEZUX1Nob3J0ICB3aWR0aDsNCi0NCi0gICAgRlRfUG9zICAgIHNpemU7DQotDQotICAgIEZUX1BvcyAgICB4X3BwZW07DQotICAgIEZUX1BvcyAgICB5X3BwZW07DQotDQotICB9IEZUX0JpdG1hcF9TaXplOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICBPIEIgSiBFIEMgVCAgIEMgTCBBIFMgUyBFIFMgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9MaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBBIGhhbmRsZSB0byBhIEZyZWVUeXBlIGxpYnJhcnkgaW5zdGFuY2UuICBFYWNoIGBsaWJyYXJ5JyBpcyAgICAgICAgKi8NCi0gIC8qICAgIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgZnJvbSB0aGUgb3RoZXJzOyBpdCBpcyB0aGUgYHJvb3QnIG9mIGEgc2V0ICAqLw0KLSAgLyogICAgb2Ygb2JqZWN0cyBsaWtlIGZvbnRzLCBmYWNlcywgc2l6ZXMsIGV0Yy4gICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEl0IGFsc28gZW1iZWRzIGEgbWVtb3J5IG1hbmFnZXIgKHNlZSBARlRfTWVtb3J5KSwgYXMgd2VsbCBhcyBhICAgICAqLw0KLSAgLyogICAgc2Nhbi1saW5lIGNvbnZlcnRlciBvYmplY3QgKHNlZSBARlRfUmFzdGVyKS4gICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEluIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucywgbWFrZSBzdXJlIHRoYXQgdGhlIHNhbWUgRlRfTGlicmFyeSAqLw0KLSAgLyogICAgb2JqZWN0IG9yIGFueSBvZiBpdHMgY2hpbGRyZW4gZG9lc24ndCBnZXQgYWNjZXNzZWQgaW4gcGFyYWxsZWwuICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgTGlicmFyeSBvYmplY3RzIGFyZSBub3JtYWxseSBjcmVhdGVkIGJ5IEBGVF9Jbml0X0ZyZWVUeXBlLCBhbmQgICAgICovDQotICAvKiAgICBkZXN0cm95ZWQgd2l0aCBARlRfRG9uZV9GcmVlVHlwZS4gIElmIHlvdSBuZWVkIHJlZmVyZW5jZS1jb3VudGluZyAgKi8NCi0gIC8qICAgIChjZi4gQEZUX1JlZmVyZW5jZV9MaWJyYXJ5KSwgdXNlIEBGVF9OZXdfTGlicmFyeSBhbmQgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgQEZUX0RvbmVfTGlicmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIHR5cGVkZWYgc3RydWN0IEZUX0xpYnJhcnlSZWNfICAqRlRfTGlicmFyeTsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX01vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEEgaGFuZGxlIHRvIGEgZ2l2ZW4gRnJlZVR5cGUgbW9kdWxlIG9iamVjdC4gIEVhY2ggbW9kdWxlIGNhbiBiZSBhICAqLw0KLSAgLyogICAgZm9udCBkcml2ZXIsIGEgcmVuZGVyZXIsIG9yIGFueXRoaW5nIGVsc2UgdGhhdCBwcm92aWRlcyBzZXJ2aWNlcyAgICovDQotICAvKiAgICB0byB0aGUgZm9ybWVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgdHlwZWRlZiBzdHJ1Y3QgRlRfTW9kdWxlUmVjXyogIEZUX01vZHVsZTsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0RyaXZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEEgaGFuZGxlIHRvIGEgZ2l2ZW4gRnJlZVR5cGUgZm9udCBkcml2ZXIgb2JqZWN0LiAgRWFjaCBmb250IGRyaXZlciAqLw0KLSAgLyogICAgaXMgYSBzcGVjaWFsIG1vZHVsZSBjYXBhYmxlIG9mIGNyZWF0aW5nIGZhY2VzIGZyb20gZm9udCBmaWxlcy4gICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIHR5cGVkZWYgc3RydWN0IEZUX0RyaXZlclJlY18qICBGVF9Ecml2ZXI7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9SZW5kZXJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBBIGhhbmRsZSB0byBhIGdpdmVuIEZyZWVUeXBlIHJlbmRlcmVyLiAgQSByZW5kZXJlciBpcyBhIHNwZWNpYWwgICAgKi8NCi0gIC8qICAgIG1vZHVsZSBpbiBjaGFyZ2Ugb2YgY29udmVydGluZyBhIGdseXBoIGltYWdlIHRvIGEgYml0bWFwLCB3aGVuICAgICAqLw0KLSAgLyogICAgbmVjZXNzYXJ5LiAgRWFjaCByZW5kZXJlciBzdXBwb3J0cyBhIGdpdmVuIGdseXBoIGltYWdlIGZvcm1hdCwgYW5kICovDQotICAvKiAgICBvbmUgb3IgbW9yZSB0YXJnZXQgc3VyZmFjZSBkZXB0aHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgdHlwZWRlZiBzdHJ1Y3QgRlRfUmVuZGVyZXJSZWNfKiAgRlRfUmVuZGVyZXI7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9GYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBBIGhhbmRsZSB0byBhIGdpdmVuIHR5cG9ncmFwaGljIGZhY2Ugb2JqZWN0LiAgQSBmYWNlIG9iamVjdCBtb2RlbHMgKi8NCi0gIC8qICAgIGEgZ2l2ZW4gdHlwZWZhY2UsIGluIGEgZ2l2ZW4gc3R5bGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEVhY2ggZmFjZSBvYmplY3QgYWxzbyBvd25zIGEgc2luZ2xlIEBGVF9HbHlwaFNsb3Qgb2JqZWN0LCBhcyB3ZWxsICAqLw0KLSAgLyogICAgYXMgb25lIG9yIG1vcmUgQEZUX1NpemUgb2JqZWN0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFVzZSBARlRfTmV3X0ZhY2Ugb3IgQEZUX09wZW5fRmFjZSB0byBjcmVhdGUgYSBuZXcgZmFjZSBvYmplY3QgZnJvbSAqLw0KLSAgLyogICAgYSBnaXZlbiBmaWxlcGF0aG5hbWUgb3IgYSBjdXN0b20gaW5wdXQgc3RyZWFtLiAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFVzZSBARlRfRG9uZV9GYWNlIHRvIGRlc3Ryb3kgaXQgKGFsb25nIHdpdGggaXRzIHNsb3QgYW5kIHNpemVzKS4gICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8QWxzbz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFNlZSBARlRfRmFjZVJlYyBmb3IgdGhlIHB1YmxpY2x5IGFjY2Vzc2libGUgZmllbGRzIG9mIGEgZ2l2ZW4gZmFjZSAqLw0KLSAgLyogICAgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIHR5cGVkZWYgc3RydWN0IEZUX0ZhY2VSZWNfKiAgRlRfRmFjZTsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEEgaGFuZGxlIHRvIGFuIG9iamVjdCB1c2VkIHRvIG1vZGVsIGEgZmFjZSBzY2FsZWQgdG8gYSBnaXZlbiAgICAgICAqLw0KLSAgLyogICAgY2hhcmFjdGVyIHNpemUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRWFjaCBARlRfRmFjZSBoYXMgYW4gX2FjdGl2ZV8gQEZUX1NpemUgb2JqZWN0IHRoYXQgaXMgdXNlZCBieSAgICAgICovDQotICAvKiAgICBmdW5jdGlvbnMgbGlrZSBARlRfTG9hZF9HbHlwaCB0byBkZXRlcm1pbmUgdGhlIHNjYWxpbmcgICAgICAgICAgICAgKi8NCi0gIC8qICAgIHRyYW5zZm9ybWF0aW9uIHdoaWNoIGlzIHVzZWQgdG8gbG9hZCBhbmQgaGludCBnbHlwaHMgYW5kIG1ldHJpY3MuICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBZb3UgY2FuIHVzZSBARlRfU2V0X0NoYXJfU2l6ZSwgQEZUX1NldF9QaXhlbF9TaXplcywgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEBGVF9SZXF1ZXN0X1NpemUgb3IgZXZlbiBARlRfU2VsZWN0X1NpemUgdG8gY2hhbmdlIHRoZSBjb250ZW50ICAgICAqLw0KLSAgLyogICAgKGkuZS4sIHRoZSBzY2FsaW5nIHZhbHVlcykgb2YgdGhlIGFjdGl2ZSBARlRfU2l6ZS4gICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFlvdSBjYW4gdXNlIEBGVF9OZXdfU2l6ZSB0byBjcmVhdGUgYWRkaXRpb25hbCBzaXplIG9iamVjdHMgZm9yIGEgICAqLw0KLSAgLyogICAgZ2l2ZW4gQEZUX0ZhY2UsIGJ1dCB0aGV5IHdvbid0IGJlIHVzZWQgYnkgb3RoZXIgZnVuY3Rpb25zIHVudGlsICAgICovDQotICAvKiAgICB5b3UgYWN0aXZhdGUgaXQgdGhyb3VnaCBARlRfQWN0aXZhdGVfU2l6ZS4gIE9ubHkgb25lIHNpemUgY2FuIGJlICAgKi8NCi0gIC8qICAgIGFjdGl2YXRlZCBhdCBhbnkgZ2l2ZW4gdGltZSBwZXIgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8QWxzbz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFNlZSBARlRfU2l6ZVJlYyBmb3IgdGhlIHB1YmxpY2x5IGFjY2Vzc2libGUgZmllbGRzIG9mIGEgZ2l2ZW4gc2l6ZSAqLw0KLSAgLyogICAgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIHR5cGVkZWYgc3RydWN0IEZUX1NpemVSZWNfKiAgRlRfU2l6ZTsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0dseXBoU2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEEgaGFuZGxlIHRvIGEgZ2l2ZW4gYGdseXBoIHNsb3QnLiAgQSBzbG90IGlzIGEgY29udGFpbmVyIHdoZXJlIGl0ICAqLw0KLSAgLyogICAgaXMgcG9zc2libGUgdG8gbG9hZCBhbnkgb2YgdGhlIGdseXBocyBjb250YWluZWQgaW4gaXRzIHBhcmVudCAgICAgICovDQotICAvKiAgICBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgSW4gb3RoZXIgd29yZHMsIGVhY2ggdGltZSB5b3UgY2FsbCBARlRfTG9hZF9HbHlwaCBvciAgICAgICAgICAgICAgICovDQotICAvKiAgICBARlRfTG9hZF9DaGFyLCB0aGUgc2xvdCdzIGNvbnRlbnQgaXMgZXJhc2VkIGJ5IHRoZSBuZXcgZ2x5cGggZGF0YSwgKi8NCi0gIC8qICAgIGkuZS4sIHRoZSBnbHlwaCdzIG1ldHJpY3MsIGl0cyBpbWFnZSAoYml0bWFwIG9yIG91dGxpbmUpLCBhbmQgICAgICAqLw0KLSAgLyogICAgb3RoZXIgY29udHJvbCBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxBbHNvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgU2VlIEBGVF9HbHlwaFNsb3RSZWMgZm9yIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGdseXBoIGZpZWxkcy4gICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIHR5cGVkZWYgc3RydWN0IEZUX0dseXBoU2xvdFJlY18qICBGVF9HbHlwaFNsb3Q7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9DaGFyTWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBBIGhhbmRsZSB0byBhIGdpdmVuIGNoYXJhY3RlciBtYXAuICBBIGNoYXJtYXAgaXMgdXNlZCB0byB0cmFuc2xhdGUgKi8NCi0gIC8qICAgIGNoYXJhY3RlciBjb2RlcyBpbiBhIGdpdmVuIGVuY29kaW5nIGludG8gZ2x5cGggaW5kZXhlcyBmb3IgaXRzICAgICAqLw0KLSAgLyogICAgcGFyZW50J3MgZmFjZS4gIFNvbWUgZm9udCBmb3JtYXRzIG1heSBwcm92aWRlIHNldmVyYWwgY2hhcm1hcHMgcGVyICovDQotICAvKiAgICBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRWFjaCBmYWNlIG9iamVjdCBvd25zIHplcm8gb3IgbW9yZSBjaGFybWFwcywgYnV0IG9ubHkgb25lIG9mIHRoZW0gICovDQotICAvKiAgICBjYW4gYmUgYGFjdGl2ZScgYW5kIHVzZWQgYnkgQEZUX0dldF9DaGFyX0luZGV4IG9yIEBGVF9Mb2FkX0NoYXIuICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNoYXJtYXBzIGluIGEgZmFjZSBpcyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgICovDQotICAvKiAgICBgZmFjZS0+bnVtX2NoYXJtYXBzJyBhbmQgYGZhY2UtPmNoYXJtYXBzJyBmaWVsZHMgb2YgQEZUX0ZhY2VSZWMuICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVGhlIGN1cnJlbnRseSBhY3RpdmUgY2hhcm1hcCBpcyBhdmFpbGFibGUgYXMgYGZhY2UtPmNoYXJtYXAnLiAgICAgICovDQotICAvKiAgICBZb3Ugc2hvdWxkIGNhbGwgQEZUX1NldF9DaGFybWFwIHRvIGNoYW5nZSBpdC4gICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBXaGVuIGEgbmV3IGZhY2UgaXMgY3JlYXRlZCAoZWl0aGVyIHRocm91Z2ggQEZUX05ld19GYWNlIG9yICAgICAgICAgKi8NCi0gIC8qICAgIEBGVF9PcGVuX0ZhY2UpLCB0aGUgbGlicmFyeSBsb29rcyBmb3IgYSBVbmljb2RlIGNoYXJtYXAgd2l0aGluICAgICAqLw0KLSAgLyogICAgdGhlIGxpc3QgYW5kIGF1dG9tYXRpY2FsbHkgYWN0aXZhdGVzIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxBbHNvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgU2VlIEBGVF9DaGFyTWFwUmVjIGZvciB0aGUgcHVibGljbHkgYWNjZXNzaWJsZSBmaWVsZHMgb2YgYSBnaXZlbiAgICovDQotICAvKiAgICBjaGFyYWN0ZXIgbWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgdHlwZWRlZiBzdHJ1Y3QgRlRfQ2hhck1hcFJlY18qICBGVF9DaGFyTWFwOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxNYWNybz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRU5DX1RBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVGhpcyBtYWNybyBjb252ZXJ0cyBmb3VyLWxldHRlciB0YWdzIGludG8gYW4gdW5zaWduZWQgbG9uZy4gIEl0IGlzICovDQotICAvKiAgICB1c2VkIHRvIGRlZmluZSBgZW5jb2RpbmcnIGlkZW50aWZpZXJzIChzZWUgQEZUX0VuY29kaW5nKS4gICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBTaW5jZSBtYW55IDE2LWJpdCBjb21waWxlcnMgZG9uJ3QgbGlrZSAzMi1iaXQgZW51bWVyYXRpb25zLCB5b3UgICAgKi8NCi0gIC8qICAgIHNob3VsZCByZWRlZmluZSB0aGlzIG1hY3JvIGluIGNhc2Ugb2YgcHJvYmxlbXMgdG8gc29tZXRoaW5nIGxpa2UgICAqLw0KLSAgLyogICAgdGhpczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAjZGVmaW5lIEZUX0VOQ19UQUcoIHZhbHVlLCBhLCBiLCBjLCBkICkgIHZhbHVlICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgdG8gZ2V0IGEgc2ltcGxlIGVudW1lcmF0aW9uIHdpdGhvdXQgYXNzaWduaW5nIHNwZWNpYWwgbnVtYmVycy4gICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0NCi0jaWZuZGVmIEZUX0VOQ19UQUcNCi0jZGVmaW5lIEZUX0VOQ19UQUcoIHZhbHVlLCBhLCBiLCBjLCBkICkgICAgICAgICBcDQotICAgICAgICAgIHZhbHVlID0gKCAoIChGVF9VSW50MzIpKGEpIDw8IDI0ICkgfCAgXA0KLSAgICAgICAgICAgICAgICAgICAgKCAoRlRfVUludDMyKShiKSA8PCAxNiApIHwgIFwNCi0gICAgICAgICAgICAgICAgICAgICggKEZUX1VJbnQzMikoYykgPDwgIDggKSB8ICBcDQotICAgICAgICAgICAgICAgICAgICAgIChGVF9VSW50MzIpKGQpICAgICAgICAgKQ0KLQ0KLSNlbmRpZiAvKiBGVF9FTkNfVEFHICovDQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEVudW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9FbmNvZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBBbiBlbnVtZXJhdGlvbiB1c2VkIHRvIHNwZWNpZnkgY2hhcmFjdGVyIHNldHMgc3VwcG9ydGVkIGJ5ICAgICAgICAgKi8NCi0gIC8qICAgIGNoYXJtYXBzLiAgVXNlZCBpbiB0aGUgQEZUX1NlbGVjdF9DaGFybWFwIEFQSSBmdW5jdGlvbi4gICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIERlc3BpdGUgdGhlIG5hbWUsIHRoaXMgZW51bWVyYXRpb24gbGlzdHMgc3BlY2lmaWMgY2hhcmFjdGVyICAgICAgICAqLw0KLSAgLyogICAgcmVwZXJ0b3JpZXMgKGkuZS4sIGNoYXJzZXRzKSwgYW5kIG5vdCB0ZXh0IGVuY29kaW5nIG1ldGhvZHMgKGUuZy4sICovDQotICAvKiAgICBVVEYtOCwgVVRGLTE2LCBldGMuKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgT3RoZXIgZW5jb2RpbmdzIG1pZ2h0IGJlIGRlZmluZWQgaW4gdGhlIGZ1dHVyZS4gICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRU5DT0RJTkdfTk9ORSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIFRoZSBlbmNvZGluZyB2YWx1ZX4wIGlzIHJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRU5DT0RJTkdfVU5JQ09ERSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIENvcnJlc3BvbmRzIHRvIHRoZSBVbmljb2RlIGNoYXJhY3RlciBzZXQuICBUaGlzIHZhbHVlIGNvdmVycyAgICAgKi8NCi0gIC8qICAgICAgYWxsIHZlcnNpb25zIG9mIHRoZSBVbmljb2RlIHJlcGVydG9pcmUsIGluY2x1ZGluZyBBU0NJSSBhbmQgICAgICAqLw0KLSAgLyogICAgICBMYXRpbi0xLiAgTW9zdCBmb250cyBpbmNsdWRlIGEgVW5pY29kZSBjaGFybWFwLCBidXQgbm90IGFsbCAgICAgICovDQotICAvKiAgICAgIG9mIHRoZW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gYWNjZXNzIFVuaWNvZGUgdmFsdWUgVSsxRjAyOCAoYW5kICAgICovDQotICAvKiAgICAgIHRoZSBmb250IGNvbnRhaW5zIGl0KSwgdXNlIHZhbHVlIDB4MUYwMjggYXMgdGhlIGlucHV0IHZhbHVlIGZvciAgKi8NCi0gIC8qICAgICAgQEZUX0dldF9DaGFyX0luZGV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9FTkNPRElOR19NU19TWU1CT0wgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgQ29ycmVzcG9uZHMgdG8gdGhlIE1pY3Jvc29mdCBTeW1ib2wgZW5jb2RpbmcsIHVzZWQgdG8gZW5jb2RlICAgICAqLw0KLSAgLyogICAgICBtYXRoZW1hdGljYWwgc3ltYm9scyBpbiB0aGUgMzIuLjI1NSBjaGFyYWN0ZXIgY29kZSByYW5nZS4gIEZvciAgICovDQotICAvKiAgICAgIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBgaHR0cDovL3d3dy5jZXZpei5uZXQvc3ltYm9sLmh0bScuICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRU5DT0RJTkdfU0pJUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIENvcnJlc3BvbmRzIHRvIEphcGFuZXNlIFNKSVMgZW5jb2RpbmcuICBNb3JlIGluZm8gYXQgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgYXQgYGh0dHA6Ly9sYW5nc3VwcG9ydC5qYXBhbnJlZmVyZW5jZS5jb20vZW5jb2Rpbmcuc2h0bWwnLiAgICAgICAqLw0KLSAgLyogICAgICBTZWUgbm90ZSBvbiBtdWx0aS1ieXRlIGVuY29kaW5ncyBiZWxvdy4gICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0VOQ09ESU5HX0dCMjMxMiA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBDb3JyZXNwb25kcyB0byBhbiBlbmNvZGluZyBzeXN0ZW0gZm9yIFNpbXBsaWZpZWQgQ2hpbmVzZSBhcyB1c2VkICovDQotICAvKiAgICAgIHVzZWQgaW4gbWFpbmxhbmQgQ2hpbmEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRU5DT0RJTkdfQklHNSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIENvcnJlc3BvbmRzIHRvIGFuIGVuY29kaW5nIHN5c3RlbSBmb3IgVHJhZGl0aW9uYWwgQ2hpbmVzZSBhcyAgICAgKi8NCi0gIC8qICAgICAgdXNlZCBpbiBUYWl3YW4gYW5kIEhvbmcgS29uZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9FTkNPRElOR19XQU5TVU5HIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgQ29ycmVzcG9uZHMgdG8gdGhlIEtvcmVhbiBlbmNvZGluZyBzeXN0ZW0ga25vd24gYXMgV2Fuc3VuZy4gICAgICAqLw0KLSAgLyogICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIGBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS91bmljb2RlLzk0OS50eHQnLiAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRU5DT0RJTkdfSk9IQUIgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIFRoZSBLb3JlYW4gc3RhbmRhcmQgY2hhcmFjdGVyIHNldCAoS1N+QyA1NjAxLTE5OTIpLCB3aGljaCAgICAgICAgKi8NCi0gIC8qICAgICAgY29ycmVzcG9uZHMgdG8gTVMgV2luZG93cyBjb2RlIHBhZ2UgMTM2MS4gIFRoaXMgY2hhcmFjdGVyIHNldCAgICAqLw0KLSAgLyogICAgICBpbmNsdWRlcyBhbGwgcG9zc2libGUgSGFuZ2V1bCBjaGFyYWN0ZXIgY29tYmluYXRpb25zLiAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0VOQ09ESU5HX0FET0JFX0xBVElOXzEgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBDb3JyZXNwb25kcyB0byBhIExhdGluLTEgZW5jb2RpbmcgYXMgZGVmaW5lZCBpbiBhIFR5cGV+MSAgICAgICAgICovDQotICAvKiAgICAgIFBvc3RTY3JpcHQgZm9udC4gIEl0IGlzIGxpbWl0ZWQgdG8gMjU2IGNoYXJhY3RlciBjb2Rlcy4gICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRU5DT0RJTkdfQURPQkVfU1RBTkRBUkQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIENvcnJlc3BvbmRzIHRvIHRoZSBBZG9iZSBTdGFuZGFyZCBlbmNvZGluZywgYXMgZm91bmQgaW4gVHlwZX4xLCAgKi8NCi0gIC8qICAgICAgQ0ZGLCBhbmQgT3BlblR5cGUvQ0ZGIGZvbnRzLiAgSXQgaXMgbGltaXRlZCB0byAyNTYgY2hhcmFjdGVyICAgICAqLw0KLSAgLyogICAgICBjb2Rlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0VOQ09ESU5HX0FET0JFX0VYUEVSVCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBDb3JyZXNwb25kcyB0byB0aGUgQWRvYmUgRXhwZXJ0IGVuY29kaW5nLCBhcyBmb3VuZCBpbiBUeXBlfjEsICAgICovDQotICAvKiAgICAgIENGRiwgYW5kIE9wZW5UeXBlL0NGRiBmb250cy4gIEl0IGlzIGxpbWl0ZWQgdG8gMjU2IGNoYXJhY3RlciAgICAgKi8NCi0gIC8qICAgICAgY29kZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9FTkNPRElOR19BRE9CRV9DVVNUT00gOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgQ29ycmVzcG9uZHMgdG8gYSBjdXN0b20gZW5jb2RpbmcsIGFzIGZvdW5kIGluIFR5cGV+MSwgQ0ZGLCBhbmQgICAqLw0KLSAgLyogICAgICBPcGVuVHlwZS9DRkYgZm9udHMuICBJdCBpcyBsaW1pdGVkIHRvIDI1NiBjaGFyYWN0ZXIgY29kZXMuICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0VOQ09ESU5HX0FQUExFX1JPTUFOIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBDb3JyZXNwb25kcyB0byB0aGUgOC1iaXQgQXBwbGUgcm9tYW4gZW5jb2RpbmcuICBNYW55IFRydWVUeXBlICAgICovDQotICAvKiAgICAgIGFuZCBPcGVuVHlwZSBmb250cyBjb250YWluIGEgY2hhcm1hcCBmb3IgdGhpcyBlbmNvZGluZywgc2luY2UgICAgKi8NCi0gIC8qICAgICAgb2xkZXIgdmVyc2lvbnMgb2YgTWFjIE9TIGFyZSBhYmxlIHRvIHVzZSBpdC4gICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9FTkNPRElOR19PTERfTEFUSU5fMiA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgVGhpcyB2YWx1ZSBpcyBkZXByZWNhdGVkIGFuZCB3YXMgbmV2ZXIgdXNlZCBub3IgcmVwb3J0ZWQgYnkgICAgICAqLw0KLSAgLyogICAgICBGcmVlVHlwZS4gIERvbid0IHVzZSBvciB0ZXN0IGZvciBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0VOQ09ESU5HX01TX1NKSVMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBTYW1lIGFzIEZUX0VOQ09ESU5HX1NKSVMuICBEZXByZWNhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0VOQ09ESU5HX01TX0dCMjMxMiA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBTYW1lIGFzIEZUX0VOQ09ESU5HX0dCMjMxMi4gIERlcHJlY2F0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0VOQ09ESU5HX01TX0JJRzUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBTYW1lIGFzIEZUX0VOQ09ESU5HX0JJRzUuICBEZXByZWNhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0VOQ09ESU5HX01TX1dBTlNVTkcgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBTYW1lIGFzIEZUX0VOQ09ESU5HX1dBTlNVTkcuICBEZXByZWNhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0VOQ09ESU5HX01TX0pPSEFCIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBTYW1lIGFzIEZUX0VOQ09ESU5HX0pPSEFCLiAgRGVwcmVjYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgQnkgZGVmYXVsdCwgRnJlZVR5cGUgYXV0b21hdGljYWxseSBzeW50aGVzaXplcyBhIFVuaWNvZGUgY2hhcm1hcCAgICovDQotICAvKiAgICBmb3IgUG9zdFNjcmlwdCBmb250cywgdXNpbmcgdGhlaXIgZ2x5cGggbmFtZXMgZGljdGlvbmFyaWVzLiAgICAgICAgKi8NCi0gIC8qICAgIEhvd2V2ZXIsIGl0IGFsc28gcmVwb3J0cyB0aGUgZW5jb2RpbmdzIGRlZmluZWQgZXhwbGljaXRseSBpbiB0aGUgICAqLw0KLSAgLyogICAgZm9udCBmaWxlLCBmb3IgdGhlIGNhc2VzIHdoZW4gdGhleSBhcmUgbmVlZGVkLCB3aXRoIHRoZSBBZG9iZSAgICAgICovDQotICAvKiAgICB2YWx1ZXMgYXMgd2VsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRU5DT0RJTkdfTk9ORSBpcyBzZXQgYnkgdGhlIEJERiBhbmQgUENGIGRyaXZlcnMgaWYgdGhlIGNoYXJtYXAgICovDQotICAvKiAgICBpcyBuZWl0aGVyIFVuaWNvZGUgbm9yIElTTy04ODU5LTEgKG90aGVyd2lzZSBpdCBpcyBzZXQgdG8gICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0VOQ09ESU5HX1VOSUNPREUpLiAgVXNlIEBGVF9HZXRfQkRGX0NoYXJzZXRfSUQgdG8gZmluZCBvdXQgICAgICAqLw0KLSAgLyogICAgd2hpY2ggZW5jb2RpbmcgaXMgcmVhbGx5IHByZXNlbnQuICBJZiwgZm9yIGV4YW1wbGUsIHRoZSAgICAgICAgICAgICovDQotICAvKiAgICBgY3NfcmVnaXN0cnknIGZpZWxkIGlzIGBLT0k4JyBhbmQgdGhlIGBjc19lbmNvZGluZycgZmllbGQgaXMgYFInLCAgKi8NCi0gIC8qICAgIHRoZSBmb250IGlzIGVuY29kZWQgaW4gS09JOC1SLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9FTkNPRElOR19OT05FIGlzIGFsd2F5cyBzZXQgKHdpdGggYSBzaW5nbGUgZXhjZXB0aW9uKSBieSB0aGUgICAgKi8NCi0gIC8qICAgIHdpbmZvbnRzIGRyaXZlci4gIFVzZSBARlRfR2V0X1dpbkZOVF9IZWFkZXIgYW5kIGV4YW1pbmUgdGhlICAgICAgICAqLw0KLSAgLyogICAgYGNoYXJzZXQnIGZpZWxkIG9mIHRoZSBARlRfV2luRk5UX0hlYWRlclJlYyBzdHJ1Y3R1cmUgdG8gZmluZCBvdXQgICovDQotICAvKiAgICB3aGljaCBlbmNvZGluZyBpcyByZWFsbHkgcHJlc2VudC4gIEZvciBleGFtcGxlLCAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEBGVF9XaW5GTlRfSURfQ1AxMjUxICgyMDQpIG1lYW5zIFdpbmRvd3MgY29kZSBwYWdlIDEyNTEgKGZvciAgICAgICAqLw0KLSAgLyogICAgUnVzc2lhbikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0VOQ09ESU5HX05PTkUgaXMgc2V0IGlmIGBwbGF0Zm9ybV9pZCcgaXMgQFRUX1BMQVRGT1JNX01BQ0lOVE9TSCAqLw0KLSAgLyogICAgYW5kIGBlbmNvZGluZ19pZCcgaXMgbm90IEBUVF9NQUNfSURfUk9NQU4gKG90aGVyd2lzZSBpdCBpcyBzZXQgdG8gICovDQotICAvKiAgICBGVF9FTkNPRElOR19BUFBMRV9ST01BTikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgSWYgYHBsYXRmb3JtX2lkJyBpcyBAVFRfUExBVEZPUk1fTUFDSU5UT1NILCB1c2UgdGhlIGZ1bmN0aW9uICAgICAgICovDQotICAvKiAgICBARlRfR2V0X0NNYXBfTGFuZ3VhZ2VfSUQgIHRvIHF1ZXJ5IHRoZSBNYWMgbGFuZ3VhZ2UgSUQgd2hpY2ggbWF5ICAgKi8NCi0gIC8qICAgIGJlIG5lZWRlZCB0byBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoIEFwcGxlIGVuY29kaW5nIHZhcmlhbnRzLiAgU2VlICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL1ZFTkRPUlMvQVBQTEUvUkVBRE1FLlRYVCAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgdG8gZ2V0IGFuIGlkZWEgaG93IHRvIGRvIHRoYXQuICBCYXNpY2FsbHksIGlmIHRoZSBsYW5ndWFnZSBJRCAgICAgICovDQotICAvKiAgICBpc34wLCBkb24ndCB1c2UgaXQsIG90aGVyd2lzZSBzdWJ0cmFjdCAxIGZyb20gdGhlIGxhbmd1YWdlIElELiAgICAgKi8NCi0gIC8qICAgIFRoZW4gZXhhbWluZSBgZW5jb2RpbmdfaWQnLiAgSWYsIGZvciBleGFtcGxlLCBgZW5jb2RpbmdfaWQnIGlzICAgICAqLw0KLSAgLyogICAgQFRUX01BQ19JRF9ST01BTiBhbmQgdGhlIGxhbmd1YWdlIElEIChtaW51c34xKSBpcyAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBgVFRfTUFDX0xBTkdJRF9HUkVFSycsIGl0IGlzIHRoZSBHcmVlayBlbmNvZGluZywgbm90IFJvbWFuLiAgICAgICAgKi8NCi0gIC8qICAgIEBUVF9NQUNfSURfQVJBQklDIHdpdGggYFRUX01BQ19MQU5HSURfRkFSU0knIG1lYW5zIHRoZSBGYXJzaSAgICAgICAqLw0KLSAgLyogICAgdmFyaWFudCB0aGUgQXJhYmljIGVuY29kaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIHR5cGVkZWYgZW51bSAgRlRfRW5jb2RpbmdfDQotICB7DQotICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX05PTkUsIDAsIDAsIDAsIDAgKSwNCi0NCi0gICAgRlRfRU5DX1RBRyggRlRfRU5DT0RJTkdfTVNfU1lNQk9MLCAncycsICd5JywgJ20nLCAnYicgKSwNCi0gICAgRlRfRU5DX1RBRyggRlRfRU5DT0RJTkdfVU5JQ09ERSwgICAndScsICduJywgJ2knLCAnYycgKSwNCi0NCi0gICAgRlRfRU5DX1RBRyggRlRfRU5DT0RJTkdfU0pJUywgICAgJ3MnLCAnaicsICdpJywgJ3MnICksDQotICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX0dCMjMxMiwgICdnJywgJ2InLCAnICcsICcgJyApLA0KLSAgICBGVF9FTkNfVEFHKCBGVF9FTkNPRElOR19CSUc1LCAgICAnYicsICdpJywgJ2cnLCAnNScgKSwNCi0gICAgRlRfRU5DX1RBRyggRlRfRU5DT0RJTkdfV0FOU1VORywgJ3cnLCAnYScsICduJywgJ3MnICksDQotICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX0pPSEFCLCAgICdqJywgJ28nLCAnaCcsICdhJyApLA0KLQ0KLSAgICAvKiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8NCi0gICAgRlRfRU5DT0RJTkdfTVNfU0pJUyAgICA9IEZUX0VOQ09ESU5HX1NKSVMsDQotICAgIEZUX0VOQ09ESU5HX01TX0dCMjMxMiAgPSBGVF9FTkNPRElOR19HQjIzMTIsDQotICAgIEZUX0VOQ09ESU5HX01TX0JJRzUgICAgPSBGVF9FTkNPRElOR19CSUc1LA0KLSAgICBGVF9FTkNPRElOR19NU19XQU5TVU5HID0gRlRfRU5DT0RJTkdfV0FOU1VORywNCi0gICAgRlRfRU5DT0RJTkdfTVNfSk9IQUIgICA9IEZUX0VOQ09ESU5HX0pPSEFCLA0KLQ0KLSAgICBGVF9FTkNfVEFHKCBGVF9FTkNPRElOR19BRE9CRV9TVEFOREFSRCwgJ0EnLCAnRCcsICdPJywgJ0InICksDQotICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX0FET0JFX0VYUEVSVCwgICAnQScsICdEJywgJ0InLCAnRScgKSwNCi0gICAgRlRfRU5DX1RBRyggRlRfRU5DT0RJTkdfQURPQkVfQ1VTVE9NLCAgICdBJywgJ0QnLCAnQicsICdDJyApLA0KLSAgICBGVF9FTkNfVEFHKCBGVF9FTkNPRElOR19BRE9CRV9MQVRJTl8xLCAgJ2wnLCAnYScsICd0JywgJzEnICksDQotDQotICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX09MRF9MQVRJTl8yLCAnbCcsICdhJywgJ3QnLCAnMicgKSwNCi0NCi0gICAgRlRfRU5DX1RBRyggRlRfRU5DT0RJTkdfQVBQTEVfUk9NQU4sICdhJywgJ3InLCAnbScsICduJyApDQotDQotICB9IEZUX0VuY29kaW5nOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxFbnVtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZnRfZW5jb2RpbmdfeHh4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVGhlc2UgY29uc3RhbnRzIGFyZSBkZXByZWNhdGVkOyB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgQEZUX0VuY29kaW5nICovDQotICAvKiAgICB2YWx1ZXMgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSNkZWZpbmUgZnRfZW5jb2Rpbmdfbm9uZSAgICAgICAgICAgIEZUX0VOQ09ESU5HX05PTkUNCi0jZGVmaW5lIGZ0X2VuY29kaW5nX3VuaWNvZGUgICAgICAgICBGVF9FTkNPRElOR19VTklDT0RFDQotI2RlZmluZSBmdF9lbmNvZGluZ19zeW1ib2wgICAgICAgICAgRlRfRU5DT0RJTkdfTVNfU1lNQk9MDQotI2RlZmluZSBmdF9lbmNvZGluZ19sYXRpbl8xICAgICAgICAgRlRfRU5DT0RJTkdfQURPQkVfTEFUSU5fMQ0KLSNkZWZpbmUgZnRfZW5jb2RpbmdfbGF0aW5fMiAgICAgICAgIEZUX0VOQ09ESU5HX09MRF9MQVRJTl8yDQotI2RlZmluZSBmdF9lbmNvZGluZ19zamlzICAgICAgICAgICAgRlRfRU5DT0RJTkdfU0pJUw0KLSNkZWZpbmUgZnRfZW5jb2RpbmdfZ2IyMzEyICAgICAgICAgIEZUX0VOQ09ESU5HX0dCMjMxMg0KLSNkZWZpbmUgZnRfZW5jb2RpbmdfYmlnNSAgICAgICAgICAgIEZUX0VOQ09ESU5HX0JJRzUNCi0jZGVmaW5lIGZ0X2VuY29kaW5nX3dhbnN1bmcgICAgICAgICBGVF9FTkNPRElOR19XQU5TVU5HDQotI2RlZmluZSBmdF9lbmNvZGluZ19qb2hhYiAgICAgICAgICAgRlRfRU5DT0RJTkdfSk9IQUINCi0NCi0jZGVmaW5lIGZ0X2VuY29kaW5nX2Fkb2JlX3N0YW5kYXJkICBGVF9FTkNPRElOR19BRE9CRV9TVEFOREFSRA0KLSNkZWZpbmUgZnRfZW5jb2RpbmdfYWRvYmVfZXhwZXJ0ICAgIEZUX0VOQ09ESU5HX0FET0JFX0VYUEVSVA0KLSNkZWZpbmUgZnRfZW5jb2RpbmdfYWRvYmVfY3VzdG9tICAgIEZUX0VOQ09ESU5HX0FET0JFX0NVU1RPTQ0KLSNkZWZpbmUgZnRfZW5jb2RpbmdfYXBwbGVfcm9tYW4gICAgIEZUX0VOQ09ESU5HX0FQUExFX1JPTUFODQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9DaGFyTWFwUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGUgYmFzZSBjaGFybWFwIHN0cnVjdHVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmYWNlICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgcGFyZW50IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZW5jb2RpbmcgICAgOjogQW4gQEZUX0VuY29kaW5nIHRhZyBpZGVudGlmeWluZyB0aGUgY2hhcm1hcC4gIFVzZSAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICB0aGlzIHdpdGggQEZUX1NlbGVjdF9DaGFybWFwLiAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgcGxhdGZvcm1faWQgOjogQW4gSUQgbnVtYmVyIGRlc2NyaWJpbmcgdGhlIHBsYXRmb3JtIGZvciB0aGUgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICBmb2xsb3dpbmcgZW5jb2RpbmcgSUQuICBUaGlzIGNvbWVzIGRpcmVjdGx5IGZyb20gICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgIHRoZSBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uIGFuZCBzaG91bGQgYmUgZW11bGF0ZWQgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgZm9yIG90aGVyIGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGVuY29kaW5nX2lkIDo6IEEgcGxhdGZvcm0gc3BlY2lmaWMgZW5jb2RpbmcgbnVtYmVyLiAgVGhpcyBhbHNvICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgY29tZXMgZnJvbSB0aGUgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBhbmQgc2hvdWxkIGJlICovDQotICAvKiAgICAgICAgICAgICAgICAgICBlbXVsYXRlZCBzaW1pbGFybHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgdHlwZWRlZiBzdHJ1Y3QgIEZUX0NoYXJNYXBSZWNfDQotICB7DQotICAgIEZUX0ZhY2UgICAgICBmYWNlOw0KLSAgICBGVF9FbmNvZGluZyAgZW5jb2Rpbmc7DQotICAgIEZUX1VTaG9ydCAgICBwbGF0Zm9ybV9pZDsNCi0gICAgRlRfVVNob3J0ICAgIGVuY29kaW5nX2lkOw0KLQ0KLSAgfSBGVF9DaGFyTWFwUmVjOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgIEIgQSBTIEUgICBPIEIgSiBFIEMgVCAgIEMgTCBBIFMgUyBFIFMgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9GYWNlX0ludGVybmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBBbiBvcGFxdWUgaGFuZGxlIHRvIGFuIGBGVF9GYWNlX0ludGVybmFsUmVjJyBzdHJ1Y3R1cmUsIHVzZWQgdG8gICAgKi8NCi0gIC8qICAgIG1vZGVsIHByaXZhdGUgZGF0YSBvZiBhIGdpdmVuIEBGVF9GYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGlzIHN0cnVjdHVyZSBtaWdodCBjaGFuZ2UgYmV0d2VlbiByZWxlYXNlcyBvZiBGcmVlVHlwZX4yIGFuZCBpcyAgKi8NCi0gIC8qICAgIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlIHRvIGNsaWVudCBhcHBsaWNhdGlvbnMuICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICB0eXBlZGVmIHN0cnVjdCBGVF9GYWNlX0ludGVybmFsUmVjXyogIEZUX0ZhY2VfSW50ZXJuYWw7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9GYWNlUmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGcmVlVHlwZSByb290IGZhY2UgY2xhc3Mgc3RydWN0dXJlLiAgQSBmYWNlIG9iamVjdCBtb2RlbHMgYSAgICAgICAgKi8NCi0gIC8qICAgIHR5cGVmYWNlIGluIGEgZm9udCBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIG51bV9mYWNlcyAgICAgICAgICAgOjogVGhlIG51bWJlciBvZiBmYWNlcyBpbiB0aGUgZm9udCBmaWxlLiAgU29tZSAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb250IGZvcm1hdHMgY2FuIGhhdmUgbXVsdGlwbGUgZmFjZXMgaW4gICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgZm9udCBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZmFjZV9pbmRleCAgICAgICAgICA6OiBUaGUgaW5kZXggb2YgdGhlIGZhY2UgaW4gdGhlIGZvbnQgZmlsZS4gIEl0ICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHNldCB0b34wIGlmIHRoZXJlIGlzIG9ubHkgb25lIGZhY2UgaW4gICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbnQgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmYWNlX2ZsYWdzICAgICAgICAgIDo6IEEgc2V0IG9mIGJpdCBmbGFncyB0aGF0IGdpdmUgaW1wb3J0YW50ICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZhY2U7IHNlZSAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBARlRfRkFDRV9GTEFHX1hYWCBmb3IgdGhlIGRldGFpbHMuICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIHN0eWxlX2ZsYWdzICAgICAgICAgOjogQSBzZXQgb2YgYml0IGZsYWdzIGluZGljYXRpbmcgdGhlIHN0eWxlIG9mICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmFjZTsgc2VlIEBGVF9TVFlMRV9GTEFHX1hYWCBmb3IgdGhlICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgbnVtX2dseXBocyAgICAgICAgICA6OiBUaGUgbnVtYmVyIG9mIGdseXBocyBpbiB0aGUgZmFjZS4gIElmIHRoZSAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2UgaXMgc2NhbGFibGUgYW5kIGhhcyBzYml0cyAoc2VlICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgYG51bV9maXhlZF9zaXplcycpLCBpdCBpcyBzZXQgdG8gdGhlIG51bWJlciAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBvdXRsaW5lIGdseXBocy4gICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIENJRC1rZXllZCBmb250cywgdGhpcyB2YWx1ZSBnaXZlcyB0aGUgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoZXN0IENJRCB1c2VkIGluIHRoZSBmb250LiAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGZhbWlseV9uYW1lICAgICAgICAgOjogVGhlIGZhY2UncyBmYW1pbHkgbmFtZS4gIFRoaXMgaXMgYW4gQVNDSUkgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcsIHVzdWFsbHkgaW4gRW5nbGlzaCwgd2hpY2ggZGVzY3JpYmVzICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0eXBlZmFjZSdzIGZhbWlseSAobGlrZSBgVGltZXMgTmV3ICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgUm9tYW4nLCBgQm9kb25pJywgYEdhcmFtb25kJywgZXRjKS4gIFRoaXMgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBhIGxlYXN0IGNvbW1vbiBkZW5vbWluYXRvciB1c2VkIHRvIGxpc3QgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRzLiAgU29tZSBmb3JtYXRzIChUcnVlVHlwZSAmIE9wZW5UeXBlKSAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZSBsb2NhbGl6ZWQgYW5kIFVuaWNvZGUgdmVyc2lvbnMgb2YgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHN0cmluZy4gIEFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZSAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCBzcGVjaWZpYyBpbnRlcmZhY2UgdG8gYWNjZXNzIHRoZW0uICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIE5VTEwgKGUuZy4sIGluIGZvbnRzIGVtYmVkZGVkIGluIGEgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBQREYgZmlsZSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIHN0eWxlX25hbWUgICAgICAgICAgOjogVGhlIGZhY2UncyBzdHlsZSBuYW1lLiAgVGhpcyBpcyBhbiBBU0NJSSAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcsIHVzdWFsbHkgaW4gRW5nbGlzaCwgd2hpY2ggZGVzY3JpYmVzICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0eXBlZmFjZSdzIHN0eWxlIChsaWtlIGBJdGFsaWMnLCAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgYEJvbGQnLCBgQ29uZGVuc2VkJywgZXRjKS4gIE5vdCBhbGwgZm9udCAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRzIHByb3ZpZGUgYSBzdHlsZSBuYW1lLCBzbyB0aGlzIGZpZWxkICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG9wdGlvbmFsLCBhbmQgY2FuIGJlIHNldCB0byBOVUxMLiAgQXMgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGBmYW1pbHlfbmFtZScsIHNvbWUgZm9ybWF0cyBwcm92aWRlICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGl6ZWQgYW5kIFVuaWNvZGUgdmVyc2lvbnMgb2YgdGhpcyAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZy4gIEFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZSBmb3JtYXQgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgaW50ZXJmYWNlIHRvIGFjY2VzcyB0aGVtLiAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBudW1fZml4ZWRfc2l6ZXMgICAgIDo6IFRoZSBudW1iZXIgb2YgYml0bWFwIHN0cmlrZXMgaW4gdGhlIGZhY2UuICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbiBpZiB0aGUgZmFjZSBpcyBzY2FsYWJsZSwgdGhlcmUgbWlnaHQgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBzdGlsbCBiZSBiaXRtYXAgc3RyaWtlcywgd2hpY2ggYXJlIGNhbGxlZCAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGBzYml0cycgaW4gdGhhdCBjYXNlLiAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgYXZhaWxhYmxlX3NpemVzICAgICA6OiBBbiBhcnJheSBvZiBARlRfQml0bWFwX1NpemUgZm9yIGFsbCBiaXRtYXAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlrZXMgaW4gdGhlIGZhY2UuICBJdCBpcyBzZXQgdG8gTlVMTCBpZiAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlcmUgaXMgbm8gYml0bWFwIHN0cmlrZS4gICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBudW1fY2hhcm1hcHMgICAgICAgIDo6IFRoZSBudW1iZXIgb2YgY2hhcm1hcHMgaW4gdGhlIGZhY2UuICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgY2hhcm1hcHMgICAgICAgICAgICA6OiBBbiBhcnJheSBvZiB0aGUgY2hhcm1hcHMgb2YgdGhlIGZhY2UuICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGdlbmVyaWMgICAgICAgICAgICAgOjogQSBmaWVsZCByZXNlcnZlZCBmb3IgY2xpZW50IHVzZXMuICBTZWUgdGhlICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBARlRfR2VuZXJpYyB0eXBlIGRlc2NyaXB0aW9uLiAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGJib3ggICAgICAgICAgICAgICAgOjogVGhlIGZvbnQgYm91bmRpbmcgYm94LiAgQ29vcmRpbmF0ZXMgYXJlICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzZWQgaW4gZm9udCB1bml0cyAoc2VlICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGB1bml0c19wZXJfRU0nKS4gIFRoZSBib3ggaXMgbGFyZ2UgZW5vdWdoICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gY29udGFpbiBhbnkgZ2x5cGggZnJvbSB0aGUgZm9udC4gIFRodXMsICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBgYmJveC55TWF4JyBjYW4gYmUgc2VlbiBhcyB0aGUgYG1heGltdW0gICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzY2VuZGVyJywgYW5kIGBiYm94LnlNaW4nIGFzIHRoZSBgbWluaW11bSAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY2VuZGVyJy4gIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoZSBib3VuZGluZyBib3ggbWlnaHQgYmUgb2ZmIGJ5ICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAoYXQgbGVhc3QpIG9uZSBwaXhlbCBmb3IgaGludGVkIGZvbnRzLiAgU2VlICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9TaXplX01ldHJpY3MgZm9yIGZ1cnRoZXIgZGlzY3Vzc2lvbi4gICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgdW5pdHNfcGVyX0VNICAgICAgICA6OiBUaGUgbnVtYmVyIG9mIGZvbnQgdW5pdHMgcGVyIEVNIHNxdWFyZSBmb3IgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgZmFjZS4gIFRoaXMgaXMgdHlwaWNhbGx5IDIwNDggZm9yICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZVR5cGUgZm9udHMsIGFuZCAxMDAwIGZvciBUeXBlfjEgZm9udHMuICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBPbmx5IHJlbGV2YW50IGZvciBzY2FsYWJsZSBmb3JtYXRzLiAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGFzY2VuZGVyICAgICAgICAgICAgOjogVGhlIHR5cG9ncmFwaGljIGFzY2VuZGVyIG9mIHRoZSBmYWNlLCAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzZWQgaW4gZm9udCB1bml0cy4gIEZvciBmb250IGZvcm1hdHMgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBoYXZpbmcgdGhpcyBpbmZvcm1hdGlvbiwgaXQgaXMgc2V0IHRvICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgYGJib3gueU1heCcuICBPbmx5IHJlbGV2YW50IGZvciBzY2FsYWJsZSAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGRlc2NlbmRlciAgICAgICAgICAgOjogVGhlIHR5cG9ncmFwaGljIGRlc2NlbmRlciBvZiB0aGUgZmFjZSwgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzZWQgaW4gZm9udCB1bml0cy4gIEZvciBmb250IGZvcm1hdHMgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBoYXZpbmcgdGhpcyBpbmZvcm1hdGlvbiwgaXQgaXMgc2V0IHRvICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgYGJib3gueU1pbicuICBOb3RlIHRoYXQgdGhpcyBmaWVsZCBpcyAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB1c3VhbGx5IG5lZ2F0aXZlLiAgT25seSByZWxldmFudCBmb3IgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxhYmxlIGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgaGVpZ2h0ICAgICAgICAgICAgICA6OiBUaGlzIHZhbHVlIGlzIHRoZSB2ZXJ0aWNhbCBkaXN0YW5jZSAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIGJhc2VsaW5lcywgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2VkIGluIGZvbnQgdW5pdHMuICBJdCBpcyBhbHdheXMgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGl2ZS4gIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0aGUgZ2xvYmFsIGdseXBoIGhlaWdodCwgdXNlICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGBhc2NlbmRlciAtIGRlc2NlbmRlcicuICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgbWF4X2FkdmFuY2Vfd2lkdGggICA6OiBUaGUgbWF4aW11bSBhZHZhbmNlIHdpZHRoLCBpbiBmb250IHVuaXRzLCAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhbGwgZ2x5cGhzIGluIHRoaXMgZmFjZS4gIFRoaXMgY2FuIGJlICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBtYWtlIHdvcmQgd3JhcHBpbmcgY29tcHV0YXRpb25zICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmYXN0ZXIuICBPbmx5IHJlbGV2YW50IGZvciBzY2FsYWJsZSAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgbWF4X2FkdmFuY2VfaGVpZ2h0ICA6OiBUaGUgbWF4aW11bSBhZHZhbmNlIGhlaWdodCwgaW4gZm9udCB1bml0cywgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhbGwgZ2x5cGhzIGluIHRoaXMgZmFjZS4gIFRoaXMgaXMgb25seSAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnQgZm9yIHZlcnRpY2FsIGxheW91dHMsIGFuZCBpcyBzZXQgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB0byBgaGVpZ2h0JyBmb3IgZm9udHMgdGhhdCBkbyBub3QgcHJvdmlkZSAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsIG1ldHJpY3MuICBPbmx5IHJlbGV2YW50IGZvciAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGFibGUgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICB1bmRlcmxpbmVfcG9zaXRpb24gIDo6IFRoZSBwb3NpdGlvbiwgaW4gZm9udCB1bml0cywgb2YgdGhlICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXJsaW5lIGxpbmUgZm9yIHRoaXMgZmFjZS4gIEl0IGlzIHRoZSAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXIgb2YgdGhlIHVuZGVybGluaW5nIHN0ZW0uICBPbmx5ICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGV2YW50IGZvciBzY2FsYWJsZSBmb3JtYXRzLiAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgdW5kZXJsaW5lX3RoaWNrbmVzcyA6OiBUaGUgdGhpY2tuZXNzLCBpbiBmb250IHVuaXRzLCBvZiB0aGUgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVybGluZSBmb3IgdGhpcyBmYWNlLiAgT25seSByZWxldmFudCBmb3IgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGFibGUgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBnbHlwaCAgICAgICAgICAgICAgIDo6IFRoZSBmYWNlJ3MgYXNzb2NpYXRlZCBnbHlwaCBzbG90KHMpLiAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgc2l6ZSAgICAgICAgICAgICAgICA6OiBUaGUgY3VycmVudCBhY3RpdmUgc2l6ZSBmb3IgdGhpcyBmYWNlLiAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGNoYXJtYXAgICAgICAgICAgICAgOjogVGhlIGN1cnJlbnQgYWN0aXZlIGNoYXJtYXAgZm9yIHRoaXMgZmFjZS4gICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZpZWxkcyBtYXkgYmUgY2hhbmdlZCBhZnRlciBhIGNhbGwgdG8gQEZUX0F0dGFjaF9GaWxlIG9yICAgICAgICAgICAqLw0KLSAgLyogICAgQEZUX0F0dGFjaF9TdHJlYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIHR5cGVkZWYgc3RydWN0ICBGVF9GYWNlUmVjXw0KLSAgew0KLSAgICBGVF9Mb25nICAgICAgICAgICBudW1fZmFjZXM7DQotICAgIEZUX0xvbmcgICAgICAgICAgIGZhY2VfaW5kZXg7DQotDQotICAgIEZUX0xvbmcgICAgICAgICAgIGZhY2VfZmxhZ3M7DQotICAgIEZUX0xvbmcgICAgICAgICAgIHN0eWxlX2ZsYWdzOw0KLQ0KLSAgICBGVF9Mb25nICAgICAgICAgICBudW1fZ2x5cGhzOw0KLQ0KLSAgICBGVF9TdHJpbmcqICAgICAgICBmYW1pbHlfbmFtZTsNCi0gICAgRlRfU3RyaW5nKiAgICAgICAgc3R5bGVfbmFtZTsNCi0NCi0gICAgRlRfSW50ICAgICAgICAgICAgbnVtX2ZpeGVkX3NpemVzOw0KLSAgICBGVF9CaXRtYXBfU2l6ZSogICBhdmFpbGFibGVfc2l6ZXM7DQotDQotICAgIEZUX0ludCAgICAgICAgICAgIG51bV9jaGFybWFwczsNCi0gICAgRlRfQ2hhck1hcCogICAgICAgY2hhcm1hcHM7DQotDQotI2lmZGVmCV9GWF9NQU5BR0VEX0NPREVfDQotI2RlZmluZSBnZW5lcmljCQlnZW5lcmljX2RhdGENCi0jZW5kaWYNCi0NCi0gICAgRlRfR2VuZXJpYyAgICAgICAgZ2VuZXJpYzsNCi0NCi0gICAgLyojIFRoZSBmb2xsb3dpbmcgbWVtYmVyIHZhcmlhYmxlcyAoZG93biB0byBgdW5kZXJsaW5lX3RoaWNrbmVzcycpICovDQotICAgIC8qIyBhcmUgb25seSByZWxldmFudCB0byBzY2FsYWJsZSBvdXRsaW5lczsgY2YuIEBGVF9CaXRtYXBfU2l6ZSAgICAqLw0KLSAgICAvKiMgZm9yIGJpdG1hcCBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gICAgRlRfQkJveCAgICAgICAgICAgYmJveDsNCi0NCi0gICAgRlRfVVNob3J0ICAgICAgICAgdW5pdHNfcGVyX0VNOw0KLSAgICBGVF9TaG9ydCAgICAgICAgICBhc2NlbmRlcjsNCi0gICAgRlRfU2hvcnQgICAgICAgICAgZGVzY2VuZGVyOw0KLSAgICBGVF9TaG9ydCAgICAgICAgICBoZWlnaHQ7DQotDQotICAgIEZUX1Nob3J0ICAgICAgICAgIG1heF9hZHZhbmNlX3dpZHRoOw0KLSAgICBGVF9TaG9ydCAgICAgICAgICBtYXhfYWR2YW5jZV9oZWlnaHQ7DQotDQotICAgIEZUX1Nob3J0ICAgICAgICAgIHVuZGVybGluZV9wb3NpdGlvbjsNCi0gICAgRlRfU2hvcnQgICAgICAgICAgdW5kZXJsaW5lX3RoaWNrbmVzczsNCi0NCi0gICAgRlRfR2x5cGhTbG90ICAgICAgZ2x5cGg7DQotICAgIEZUX1NpemUgICAgICAgICAgIHNpemU7DQotICAgIEZUX0NoYXJNYXAgICAgICAgIGNoYXJtYXA7DQotDQotICAgIC8qQHByaXZhdGUgYmVnaW4gKi8NCi0NCi0gICAgRlRfRHJpdmVyICAgICAgICAgZHJpdmVyOw0KLSAgICBGVF9NZW1vcnkgICAgICAgICBtZW1vcnk7DQotICAgIEZUX1N0cmVhbSAgICAgICAgIHN0cmVhbTsNCi0NCi0gICAgRlRfTGlzdFJlYyAgICAgICAgc2l6ZXNfbGlzdDsNCi0NCi0gICAgRlRfR2VuZXJpYyAgICAgICAgYXV0b2hpbnQ7ICAgLyogZmFjZS1zcGVjaWZpYyBhdXRvLWhpbnRlciBkYXRhICovDQotICAgIHZvaWQqICAgICAgICAgICAgIGV4dGVuc2lvbnM7IC8qIHVudXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLQ0KLSAgICBGVF9GYWNlX0ludGVybmFsICBpbnRlcm5hbDsNCi0NCi0gICAgLypAcHJpdmF0ZSBlbmQgKi8NCi0NCi0gIH0gRlRfRmFjZVJlYzsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19YWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEEgbGlzdCBvZiBiaXQgZmxhZ3MgdXNlZCBpbiB0aGUgYGZhY2VfZmxhZ3MnIGZpZWxkIG9mIHRoZSAgICAgICAgICAqLw0KLSAgLyogICAgQEZUX0ZhY2VSZWMgc3RydWN0dXJlLiAgVGhleSBpbmZvcm0gY2xpZW50IGFwcGxpY2F0aW9ucyBvZiAgICAgICAgICovDQotICAvKiAgICBwcm9wZXJ0aWVzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFZhbHVlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9GQUNFX0ZMQUdfU0NBTEFCTEUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIGZhY2UgY29udGFpbnMgb3V0bGluZSBnbHlwaHMuICBUaGlzIGRvZXNuJ3QgICAqLw0KLSAgLyogICAgICBwcmV2ZW50IGJpdG1hcCBzdHJpa2VzLCBpLmUuLCBhIGZhY2UgY2FuIGhhdmUgYm90aCB0aGlzIGFuZCAgICAgICovDQotICAvKiAgICAgIGFuZCBARlRfRkFDRV9GTEFHX0ZJWEVEX1NJWkVTIHNldC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRkFDRV9GTEFHX0ZJWEVEX1NJWkVTIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBmYWNlIGNvbnRhaW5zIGJpdG1hcCBzdHJpa2VzLiAgU2VlIGFsc28gdGhlICAgKi8NCi0gIC8qICAgICAgYG51bV9maXhlZF9zaXplcycgYW5kIGBhdmFpbGFibGVfc2l6ZXMnIGZpZWxkcyBvZiBARlRfRmFjZVJlYy4gICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9GQUNFX0ZMQUdfRklYRURfV0lEVEggOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIGZhY2UgY29udGFpbnMgZml4ZWQtd2lkdGggY2hhcmFjdGVycyAobGlrZSAgICAqLw0KLSAgLyogICAgICBDb3VyaWVyLCBMdWNpZG8sIE1vbm9UeXBlLCBldGMuKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19TRk5UIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgZmFjZSB1c2VzIHRoZSBgc2ZudCcgc3RvcmFnZSBzY2hlbWUuICBGb3IgICAgICovDQotICAvKiAgICAgIG5vdywgdGhpcyBtZWFucyBUcnVlVHlwZSBhbmQgT3BlblR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRkFDRV9GTEFHX0hPUklaT05UQUwgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBmYWNlIGNvbnRhaW5zIGhvcml6b250YWwgZ2x5cGggbWV0cmljcy4gIFRoaXMgKi8NCi0gIC8qICAgICAgc2hvdWxkIGJlIHNldCBmb3IgYWxsIGNvbW1vbiBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9GQUNFX0ZMQUdfVkVSVElDQUwgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIGZhY2UgY29udGFpbnMgdmVydGljYWwgZ2x5cGggbWV0cmljcy4gIFRoaXMgICAqLw0KLSAgLyogICAgICBpcyBvbmx5IGF2YWlsYWJsZSBpbiBzb21lIGZvcm1hdHMsIG5vdCBhbGwgb2YgdGhlbS4gICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19LRVJOSU5HIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgZmFjZSBjb250YWlucyBrZXJuaW5nIGluZm9ybWF0aW9uLiAgSWYgc2V0LCAgICovDQotICAvKiAgICAgIHRoZSBrZXJuaW5nIGRpc3RhbmNlIGNhbiBiZSByZXRyaWV2ZWQgdGhyb3VnaCB0aGUgZnVuY3Rpb24gICAgICAgKi8NCi0gIC8qICAgICAgQEZUX0dldF9LZXJuaW5nLiAgT3RoZXJ3aXNlIHRoZSBmdW5jdGlvbiBhbHdheXMgcmV0dXJuIHRoZSAgICAgICAqLw0KLSAgLyogICAgICB2ZWN0b3IgKDAsMCkuICBOb3RlIHRoYXQgRnJlZVR5cGUgZG9lc24ndCBoYW5kbGUga2VybmluZyBkYXRhICAgICovDQotICAvKiAgICAgIGZyb20gdGhlIGBHUE9TJyB0YWJsZSAoYXMgcHJlc2VudCBpbiBzb21lIE9wZW5UeXBlIGZvbnRzKS4gICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRkFDRV9GTEFHX0ZBU1RfR0xZUEhTIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIFRISVMgRkxBRyBJUyBERVBSRUNBVEVELiAgRE8gTk9UIFVTRSBPUiBURVNUIElULiAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRkFDRV9GTEFHX01VTFRJUExFX01BU1RFUlMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBmb250IGNvbnRhaW5zIG11bHRpcGxlIG1hc3RlcnMgYW5kIGlzIGNhcGFibGUgKi8NCi0gIC8qICAgICAgb2YgaW50ZXJwb2xhdGluZyBiZXR3ZWVuIHRoZW0uICBTZWUgdGhlIG11bHRpcGxlLW1hc3RlcnMgICAgICAgICAqLw0KLSAgLyogICAgICBzcGVjaWZpYyBBUEkgZm9yIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19HTFlQSF9OQU1FUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgZm9udCBjb250YWlucyBnbHlwaCBuYW1lcyB0aGF0IGNhbiBiZSAgICAgICAgICovDQotICAvKiAgICAgIHJldHJpZXZlZCB0aHJvdWdoIEBGVF9HZXRfR2x5cGhfTmFtZS4gIE5vdGUgdGhhdCBzb21lIFRydWVUeXBlICAgKi8NCi0gIC8qICAgICAgZm9udHMgY29udGFpbiBicm9rZW4gZ2x5cGggbmFtZSB0YWJsZXMuICBVc2UgdGhlIGZ1bmN0aW9uICAgICAgICAqLw0KLSAgLyogICAgICBARlRfSGFzX1BTX0dseXBoX05hbWVzIHdoZW4gbmVlZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0ZBQ0VfRkxBR19FWFRFUk5BTF9TVFJFQU0gOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBVc2VkIGludGVybmFsbHkgYnkgRnJlZVR5cGUgdG8gaW5kaWNhdGUgdGhhdCBhIGZhY2UncyBzdHJlYW0gd2FzICovDQotICAvKiAgICAgIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQgYXBwbGljYXRpb24gYW5kIHNob3VsZCBub3QgYmUgZGVzdHJveWVkICAgKi8NCi0gIC8qICAgICAgd2hlbiBARlRfRG9uZV9GYWNlIGlzIGNhbGxlZC4gIERvbid0IHJlYWQgb3IgdGVzdCB0aGlzIGZsYWcuICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9GQUNFX0ZMQUdfSElOVEVSIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgU2V0IGlmIHRoZSBmb250IGRyaXZlciBoYXMgYSBoaW50aW5nIG1hY2hpbmUgb2YgaXRzIG93bi4gIEZvciAgICAqLw0KLSAgLyogICAgICBleGFtcGxlLCB3aXRoIFRydWVUeXBlIGZvbnRzLCBpdCBtYWtlcyBzZW5zZSB0byB1c2UgZGF0YSBmcm9tICAgICovDQotICAvKiAgICAgIHRoZSBTRk5UIGBnYXNwJyB0YWJsZSBvbmx5IGlmIHRoZSBuYXRpdmUgVHJ1ZVR5cGUgaGludGluZyBlbmdpbmUgKi8NCi0gIC8qICAgICAgKHdpdGggdGhlIGJ5dGVjb2RlIGludGVycHJldGVyKSBpcyBhdmFpbGFibGUgYW5kIGFjdGl2ZS4gICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9GQUNFX0ZMQUdfQ0lEX0tFWUVEIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgU2V0IGlmIHRoZSBmb250IGlzIENJRC1rZXllZC4gIEluIHRoYXQgY2FzZSwgdGhlIGZvbnQgaXMgbm90ICAgICAqLw0KLSAgLyogICAgICBhY2Nlc3NlZCBieSBnbHlwaCBpbmRpY2VzIGJ1dCBieSBDSUQgdmFsdWVzLiAgRm9yIHN1YnNldHRlZCAgICAgICovDQotICAvKiAgICAgIENJRC1rZXllZCBmb250cyB0aGlzIGhhcyB0aGUgY29uc2VxdWVuY2UgdGhhdCBub3QgYWxsIGluZGV4ICAgICAgKi8NCi0gIC8qICAgICAgdmFsdWVzIGFyZSBhIHZhbGlkIGFyZ3VtZW50IHRvIEZUX0xvYWRfR2x5cGguICBPbmx5IHRoZSBDSUQgICAgICAqLw0KLSAgLyogICAgICB2YWx1ZXMgZm9yIHdoaWNoIGNvcnJlc3BvbmRpbmcgZ2x5cGhzIGluIHRoZSBzdWJzZXR0ZWQgZm9udCAgICAgICovDQotICAvKiAgICAgIGV4aXN0IG1ha2UgRlRfTG9hZF9HbHlwaCByZXR1cm4gc3VjY2Vzc2Z1bGx5OyBpbiBhbGwgb3RoZXIgY2FzZXMgKi8NCi0gIC8qICAgICAgeW91IGdldCBhbiBgRlRfRXJyX0ludmFsaWRfQXJndW1lbnQnIGVycm9yLiAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIE5vdGUgdGhhdCBDSUQta2V5ZWQgZm9udHMgd2hpY2ggYXJlIGluIGFuIFNGTlQgd3JhcHBlciBkb24ndCAgICAgKi8NCi0gIC8qICAgICAgaGF2ZSB0aGlzIGZsYWcgc2V0IHNpbmNlIHRoZSBnbHlwaHMgYXJlIGFjY2Vzc2VkIGluIHRoZSBub3JtYWwgICAqLw0KLSAgLyogICAgICB3YXkgKHVzaW5nIGNvbnRpZ3VvdXMgaW5kaWNlcyk7IHRoZSBgQ0lELW5lc3MnIGlzbid0IHZpc2libGUgdG8gICovDQotICAvKiAgICAgIHRoZSBhcHBsaWNhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRkFDRV9GTEFHX1RSSUNLWSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIFNldCBpZiB0aGUgZm9udCBpcyBgdHJpY2t5JywgdGhpcyBpcywgaXQgYWx3YXlzIG5lZWRzIHRoZSAgICAgICAgKi8NCi0gIC8qICAgICAgZm9udCBmb3JtYXQncyBuYXRpdmUgaGludGluZyBlbmdpbmUgdG8gZ2V0IGEgcmVhc29uYWJsZSByZXN1bHQuICAqLw0KLSAgLyogICAgICBBIHR5cGljYWwgZXhhbXBsZSBpcyB0aGUgQ2hpbmVzZSBmb250IGBtaW5nbGkudHRmJyB3aGljaCB1c2VzICAgICovDQotICAvKiAgICAgIFRydWVUeXBlIGJ5dGVjb2RlIGluc3RydWN0aW9ucyB0byBtb3ZlIGFuZCBzY2FsZSBhbGwgb2YgaXRzICAgICAgKi8NCi0gIC8qICAgICAgc3ViZ2x5cGhzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhdXRvaGludCBzdWNoIGZvbnRzIHVzaW5nICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgQEZUX0xPQURfRk9SQ0VfQVVUT0hJTlQ7IGl0IHdpbGwgYWxzbyBpZ25vcmUgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBARlRfTE9BRF9OT19ISU5USU5HLiAgWW91IGhhdmUgdG8gc2V0IGJvdGggQEZUX0xPQURfTk9fSElOVElORyAgICovDQotICAvKiAgICAgIGFuZCBARlRfTE9BRF9OT19BVVRPSElOVCB0byByZWFsbHkgZGlzYWJsZSBoaW50aW5nOyBob3dldmVyLCB5b3UgKi8NCi0gIC8qICAgICAgcHJvYmFibHkgbmV2ZXIgd2FudCB0aGlzIGV4Y2VwdCBmb3IgZGVtb25zdHJhdGlvbiBwdXJwb3Nlcy4gICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIEN1cnJlbnRseSwgdGhlcmUgYXJlIGFib3V0IGEgZG96ZW4gVHJ1ZVR5cGUgZm9udHMgaW4gdGhlIGxpc3Qgb2YgKi8NCi0gIC8qICAgICAgdHJpY2t5IGZvbnRzOyB0aGV5IGFyZSBoYXJkLWNvZGVkIGluIGZpbGUgYHR0b2Jqcy5jJy4gICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotI2RlZmluZSBGVF9GQUNFX0ZMQUdfU0NBTEFCTEUgICAgICAgICAgKCAxTCA8PCAgMCApDQotI2RlZmluZSBGVF9GQUNFX0ZMQUdfRklYRURfU0laRVMgICAgICAgKCAxTCA8PCAgMSApDQotI2RlZmluZSBGVF9GQUNFX0ZMQUdfRklYRURfV0lEVEggICAgICAgKCAxTCA8PCAgMiApDQotI2RlZmluZSBGVF9GQUNFX0ZMQUdfU0ZOVCAgICAgICAgICAgICAgKCAxTCA8PCAgMyApDQotI2RlZmluZSBGVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTCAgICAgICAgKCAxTCA8PCAgNCApDQotI2RlZmluZSBGVF9GQUNFX0ZMQUdfVkVSVElDQUwgICAgICAgICAgKCAxTCA8PCAgNSApDQotI2RlZmluZSBGVF9GQUNFX0ZMQUdfS0VSTklORyAgICAgICAgICAgKCAxTCA8PCAgNiApDQotI2RlZmluZSBGVF9GQUNFX0ZMQUdfRkFTVF9HTFlQSFMgICAgICAgKCAxTCA8PCAgNyApDQotI2RlZmluZSBGVF9GQUNFX0ZMQUdfTVVMVElQTEVfTUFTVEVSUyAgKCAxTCA8PCAgOCApDQotI2RlZmluZSBGVF9GQUNFX0ZMQUdfR0xZUEhfTkFNRVMgICAgICAgKCAxTCA8PCAgOSApDQotI2RlZmluZSBGVF9GQUNFX0ZMQUdfRVhURVJOQUxfU1RSRUFNICAgKCAxTCA8PCAxMCApDQotI2RlZmluZSBGVF9GQUNFX0ZMQUdfSElOVEVSICAgICAgICAgICAgKCAxTCA8PCAxMSApDQotI2RlZmluZSBGVF9GQUNFX0ZMQUdfQ0lEX0tFWUVEICAgICAgICAgKCAxTCA8PCAxMiApDQotI2RlZmluZSBGVF9GQUNFX0ZMQUdfVFJJQ0tZICAgICAgICAgICAgKCAxTCA8PCAxMyApDQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAgICoNCi0gICAqIEBtYWNybzoNCi0gICAqICAgRlRfSEFTX0hPUklaT05UQUwoIGZhY2UgKQ0KLSAgICoNCi0gICAqIEBkZXNjcmlwdGlvbjoNCi0gICAqICAgQSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGNvbnRhaW5zDQotICAgKiAgIGhvcml6b250YWwgbWV0cmljcyAodGhpcyBpcyB0cnVlIGZvciBhbGwgZm9udCBmb3JtYXRzIHRob3VnaCkuDQotICAgKg0KLSAgICogQGFsc286DQotICAgKiAgIEBGVF9IQVNfVkVSVElDQUwgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZm9yIHZlcnRpY2FsIG1ldHJpY3MuDQotICAgKg0KLSAgICovDQotI2RlZmluZSBGVF9IQVNfSE9SSVpPTlRBTCggZmFjZSApIFwNCi0gICAgICAgICAgKCBmYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX0hPUklaT05UQUwgKQ0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gICAqDQotICAgKiBAbWFjcm86DQotICAgKiAgIEZUX0hBU19WRVJUSUNBTCggZmFjZSApDQotICAgKg0KLSAgICogQGRlc2NyaXB0aW9uOg0KLSAgICogICBBIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMgcmVhbA0KLSAgICogICB2ZXJ0aWNhbCBtZXRyaWNzIChhbmQgbm90IG9ubHkgc3ludGhlc2l6ZWQgb25lcykuDQotICAgKg0KLSAgICovDQotI2RlZmluZSBGVF9IQVNfVkVSVElDQUwoIGZhY2UgKSBcDQotICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19WRVJUSUNBTCApDQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAgICoNCi0gICAqIEBtYWNybzoNCi0gICAqICAgRlRfSEFTX0tFUk5JTkcoIGZhY2UgKQ0KLSAgICoNCi0gICAqIEBkZXNjcmlwdGlvbjoNCi0gICAqICAgQSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGNvbnRhaW5zIGtlcm5pbmcNCi0gICAqICAgZGF0YSB0aGF0IGNhbiBiZSBhY2Nlc3NlZCB3aXRoIEBGVF9HZXRfS2VybmluZy4NCi0gICAqDQotICAgKi8NCi0jZGVmaW5lIEZUX0hBU19LRVJOSU5HKCBmYWNlICkgXA0KLSAgICAgICAgICAoIGZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfS0VSTklORyApDQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAgICoNCi0gICAqIEBtYWNybzoNCi0gICAqICAgRlRfSVNfU0NBTEFCTEUoIGZhY2UgKQ0KLSAgICoNCi0gICAqIEBkZXNjcmlwdGlvbjoNCi0gICAqICAgQSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGNvbnRhaW5zIGEgc2NhbGFibGUNCi0gICAqICAgZm9udCBmYWNlICh0cnVlIGZvciBUcnVlVHlwZSwgVHlwZX4xLCBUeXBlfjQyLCBDSUQsIE9wZW5UeXBlL0NGRiwNCi0gICAqICAgYW5kIFBGUiBmb250IGZvcm1hdHMuDQotICAgKg0KLSAgICovDQotI2RlZmluZSBGVF9JU19TQ0FMQUJMRSggZmFjZSApIFwNCi0gICAgICAgICAgKCBmYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX1NDQUxBQkxFICkNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICAgKg0KLSAgICogQG1hY3JvOg0KLSAgICogICBGVF9JU19TRk5UKCBmYWNlICkNCi0gICAqDQotICAgKiBAZGVzY3JpcHRpb246DQotICAgKiAgIEEgbWFjcm8gdGhhdCByZXR1cm5zIHRydWUgd2hlbmV2ZXIgYSBmYWNlIG9iamVjdCBjb250YWlucyBhIGZvbnQNCi0gICAqICAgd2hvc2UgZm9ybWF0IGlzIGJhc2VkIG9uIHRoZSBTRk5UIHN0b3JhZ2Ugc2NoZW1lLiAgVGhpcyB1c3VhbGx5DQotICAgKiAgIG1lYW5zOiBUcnVlVHlwZSBmb250cywgT3BlblR5cGUgZm9udHMsIGFzIHdlbGwgYXMgU0ZOVC1iYXNlZCBlbWJlZGRlZA0KLSAgICogICBiaXRtYXAgZm9udHMuDQotICAgKg0KLSAgICogICBJZiB0aGlzIG1hY3JvIGlzIHRydWUsIGFsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBARlRfU0ZOVF9OQU1FU19IIGFuZA0KLSAgICogICBARlRfVFJVRVRZUEVfVEFCTEVTX0ggYXJlIGF2YWlsYWJsZS4NCi0gICAqDQotICAgKi8NCi0jZGVmaW5lIEZUX0lTX1NGTlQoIGZhY2UgKSBcDQotICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19TRk5UICkNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICAgKg0KLSAgICogQG1hY3JvOg0KLSAgICogICBGVF9JU19GSVhFRF9XSURUSCggZmFjZSApDQotICAgKg0KLSAgICogQGRlc2NyaXB0aW9uOg0KLSAgICogICBBIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMgYSBmb250IGZhY2UNCi0gICAqICAgdGhhdCBjb250YWlucyBmaXhlZC13aWR0aCAob3IgYG1vbm9zcGFjZScsIGBmaXhlZC1waXRjaCcsIGV0Yy4pDQotICAgKiAgIGdseXBocy4NCi0gICAqDQotICAgKi8NCi0jZGVmaW5lIEZUX0lTX0ZJWEVEX1dJRFRIKCBmYWNlICkgXA0KLSAgICAgICAgICAoIGZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfRklYRURfV0lEVEggKQ0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gICAqDQotICAgKiBAbWFjcm86DQotICAgKiAgIEZUX0hBU19GSVhFRF9TSVpFUyggZmFjZSApDQotICAgKg0KLSAgICogQGRlc2NyaXB0aW9uOg0KLSAgICogICBBIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMgc29tZQ0KLSAgICogICBlbWJlZGRlZCBiaXRtYXBzLiAgU2VlIHRoZSBgYXZhaWxhYmxlX3NpemVzJyBmaWVsZCBvZiB0aGUNCi0gICAqICAgQEZUX0ZhY2VSZWMgc3RydWN0dXJlLg0KLSAgICoNCi0gICAqLw0KLSNkZWZpbmUgRlRfSEFTX0ZJWEVEX1NJWkVTKCBmYWNlICkgXA0KLSAgICAgICAgICAoIGZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfRklYRURfU0laRVMgKQ0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gICAqDQotICAgKiBAbWFjcm86DQotICAgKiAgIEZUX0hBU19GQVNUX0dMWVBIUyggZmFjZSApDQotICAgKg0KLSAgICogQGRlc2NyaXB0aW9uOg0KLSAgICogICBEZXByZWNhdGVkLg0KLSAgICoNCi0gICAqLw0KLSNkZWZpbmUgRlRfSEFTX0ZBU1RfR0xZUEhTKCBmYWNlICkgIDANCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICAgKg0KLSAgICogQG1hY3JvOg0KLSAgICogICBGVF9IQVNfR0xZUEhfTkFNRVMoIGZhY2UgKQ0KLSAgICoNCi0gICAqIEBkZXNjcmlwdGlvbjoNCi0gICAqICAgQSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGNvbnRhaW5zIHNvbWUgZ2x5cGgNCi0gICAqICAgbmFtZXMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgdGhyb3VnaCBARlRfR2V0X0dseXBoX05hbWUuDQotICAgKg0KLSAgICovDQotI2RlZmluZSBGVF9IQVNfR0xZUEhfTkFNRVMoIGZhY2UgKSBcDQotICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19HTFlQSF9OQU1FUyApDQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAgICoNCi0gICAqIEBtYWNybzoNCi0gICAqICAgRlRfSEFTX01VTFRJUExFX01BU1RFUlMoIGZhY2UgKQ0KLSAgICoNCi0gICAqIEBkZXNjcmlwdGlvbjoNCi0gICAqICAgQSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGNvbnRhaW5zIHNvbWUNCi0gICAqICAgbXVsdGlwbGUgbWFzdGVycy4gIFRoZSBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgQEZUX01VTFRJUExFX01BU1RFUlNfSA0KLSAgICogICBhcmUgdGhlbiBhdmFpbGFibGUgdG8gY2hvb3NlIHRoZSBleGFjdCBkZXNpZ24geW91IHdhbnQuDQotICAgKg0KLSAgICovDQotI2RlZmluZSBGVF9IQVNfTVVMVElQTEVfTUFTVEVSUyggZmFjZSApIFwNCi0gICAgICAgICAgKCBmYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX01VTFRJUExFX01BU1RFUlMgKQ0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gICAqDQotICAgKiBAbWFjcm86DQotICAgKiAgIEZUX0lTX0NJRF9LRVlFRCggZmFjZSApDQotICAgKg0KLSAgICogQGRlc2NyaXB0aW9uOg0KLSAgICogICBBIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMgYSBDSUQta2V5ZWQNCi0gICAqICAgZm9udC4gIFNlZSB0aGUgZGlzY3Vzc2lvbiBvZiBARlRfRkFDRV9GTEFHX0NJRF9LRVlFRCBmb3IgbW9yZQ0KLSAgICogICBkZXRhaWxzLg0KLSAgICoNCi0gICAqICAgSWYgdGhpcyBtYWNybyBpcyB0cnVlLCBhbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gQEZUX0NJRF9IIGFyZQ0KLSAgICogICBhdmFpbGFibGUuDQotICAgKg0KLSAgICovDQotI2RlZmluZSBGVF9JU19DSURfS0VZRUQoIGZhY2UgKSBcDQotICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19DSURfS0VZRUQgKQ0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gICAqDQotICAgKiBAbWFjcm86DQotICAgKiAgIEZUX0lTX1RSSUNLWSggZmFjZSApDQotICAgKg0KLSAgICogQGRlc2NyaXB0aW9uOg0KLSAgICogICBBIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSByZXByZXNlbnRzIGEgYHRyaWNreScgZm9udC4NCi0gICAqICAgU2VlIHRoZSBkaXNjdXNzaW9uIG9mIEBGVF9GQUNFX0ZMQUdfVFJJQ0tZIGZvciBtb3JlIGRldGFpbHMuDQotICAgKg0KLSAgICovDQotI2RlZmluZSBGVF9JU19UUklDS1koIGZhY2UgKSBcDQotICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19UUklDS1kgKQ0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxDb25zdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfU1RZTEVfRkxBR19YWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgQSBsaXN0IG9mIGJpdC1mbGFncyB1c2VkIHRvIGluZGljYXRlIHRoZSBzdHlsZSBvZiBhIGdpdmVuIGZhY2UuICAgICovDQotICAvKiAgICBUaGVzZSBhcmUgdXNlZCBpbiB0aGUgYHN0eWxlX2ZsYWdzJyBmaWVsZCBvZiBARlRfRmFjZVJlYy4gICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFZhbHVlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9TVFlMRV9GTEFHX0lUQUxJQyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgSW5kaWNhdGVzIHRoYXQgYSBnaXZlbiBmYWNlIHN0eWxlIGlzIGl0YWxpYyBvciBvYmxpcXVlLiAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9TVFlMRV9GTEFHX0JPTEQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgSW5kaWNhdGVzIHRoYXQgYSBnaXZlbiBmYWNlIGlzIGJvbGQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoZSBzdHlsZSBpbmZvcm1hdGlvbiBhcyBwcm92aWRlZCBieSBGcmVlVHlwZSBpcyB2ZXJ5IGJhc2ljLiAgTW9yZSAqLw0KLSAgLyogICAgZGV0YWlscyBhcmUgYmV5b25kIHRoZSBzY29wZSBhbmQgc2hvdWxkIGJlIGRvbmUgb24gYSBoaWdoZXIgbGV2ZWwgICovDQotICAvKiAgICAoZm9yIGV4YW1wbGUsIGJ5IGFuYWx5emluZyB2YXJpb3VzIGZpZWxkcyBvZiB0aGUgYE9TLzInIHRhYmxlIGluICAgKi8NCi0gIC8qICAgIFNGTlQgYmFzZWQgZm9udHMpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotI2RlZmluZSBGVF9TVFlMRV9GTEFHX0lUQUxJQyAgKCAxIDw8IDAgKQ0KLSNkZWZpbmUgRlRfU1RZTEVfRkxBR19CT0xEICAgICggMSA8PCAxICkNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX1NpemVfSW50ZXJuYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEFuIG9wYXF1ZSBoYW5kbGUgdG8gYW4gYEZUX1NpemVfSW50ZXJuYWxSZWMnIHN0cnVjdHVyZSwgdXNlZCB0byAgICAqLw0KLSAgLyogICAgbW9kZWwgcHJpdmF0ZSBkYXRhIG9mIGEgZ2l2ZW4gQEZUX1NpemUgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIHR5cGVkZWYgc3RydWN0IEZUX1NpemVfSW50ZXJuYWxSZWNfKiAgRlRfU2l6ZV9JbnRlcm5hbDsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX1NpemVfTWV0cmljcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoZSBzaXplIG1ldHJpY3Mgc3RydWN0dXJlIGdpdmVzIHRoZSBtZXRyaWNzIG9mIGEgc2l6ZSBvYmplY3QuICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIHhfcHBlbSAgICAgICA6OiBUaGUgd2lkdGggb2YgdGhlIHNjYWxlZCBFTSBzcXVhcmUgaW4gcGl4ZWxzLCBoZW5jZSAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgIHRoZSB0ZXJtIGBwcGVtJyAocGl4ZWxzIHBlciBFTSkuICBJdCBpcyBhbHNvICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgcmVmZXJyZWQgdG8gYXMgYG5vbWluYWwgd2lkdGgnLiAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgeV9wcGVtICAgICAgIDo6IFRoZSBoZWlnaHQgb2YgdGhlIHNjYWxlZCBFTSBzcXVhcmUgaW4gcGl4ZWxzLCAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgaGVuY2UgdGhlIHRlcm0gYHBwZW0nIChwaXhlbHMgcGVyIEVNKS4gIEl0IGlzIGFsc28gKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICByZWZlcnJlZCB0byBhcyBgbm9taW5hbCBoZWlnaHQnLiAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICB4X3NjYWxlICAgICAgOjogQSAxNi4xNiBmcmFjdGlvbmFsIHNjYWxpbmcgdmFsdWUgdXNlZCB0byBjb252ZXJ0ICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsIG1ldHJpY3MgZnJvbSBmb250IHVuaXRzIHRvIDI2LjYgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uYWwgcGl4ZWxzLiAgT25seSByZWxldmFudCBmb3Igc2NhbGFibGUgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgZm9udCBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgeV9zY2FsZSAgICAgIDo6IEEgMTYuMTYgZnJhY3Rpb25hbCBzY2FsaW5nIHZhbHVlIHVzZWQgdG8gY29udmVydCAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgdmVydGljYWwgbWV0cmljcyBmcm9tIGZvbnQgdW5pdHMgdG8gMjYuNiAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbmFsIHBpeGVscy4gIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgIGZvbnQgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGFzY2VuZGVyICAgICA6OiBUaGUgYXNjZW5kZXIgaW4gMjYuNiBmcmFjdGlvbmFsIHBpeGVscy4gIFNlZSAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgIEBGVF9GYWNlUmVjIGZvciB0aGUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGRlc2NlbmRlciAgICA6OiBUaGUgZGVzY2VuZGVyIGluIDI2LjYgZnJhY3Rpb25hbCBwaXhlbHMuICBTZWUgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgIEBGVF9GYWNlUmVjIGZvciB0aGUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGhlaWdodCAgICAgICA6OiBUaGUgaGVpZ2h0IGluIDI2LjYgZnJhY3Rpb25hbCBwaXhlbHMuICBTZWUgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgIEBGVF9GYWNlUmVjIGZvciB0aGUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIG1heF9hZHZhbmNlICA6OiBUaGUgbWF4aW11bSBhZHZhbmNlIHdpZHRoIGluIDI2LjYgZnJhY3Rpb25hbCAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgIHBpeGVscy4gIFNlZSBARlRfRmFjZVJlYyBmb3IgdGhlIGRldGFpbHMuICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVGhlIHNjYWxpbmcgdmFsdWVzLCBpZiByZWxldmFudCwgYXJlIGRldGVybWluZWQgZmlyc3QgZHVyaW5nIGEgICAgICovDQotICAvKiAgICBzaXplIGNoYW5naW5nIG9wZXJhdGlvbi4gIFRoZSByZW1haW5pbmcgZmllbGRzIGFyZSB0aGVuIHNldCBieSB0aGUgKi8NCi0gIC8qICAgIGRyaXZlci4gIEZvciBzY2FsYWJsZSBmb3JtYXRzLCB0aGV5IGFyZSB1c3VhbGx5IHNldCB0byBzY2FsZWQgICAgICAqLw0KLSAgLyogICAgdmFsdWVzIG9mIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkcyBpbiBARlRfRmFjZVJlYy4gICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIE5vdGUgdGhhdCBkdWUgdG8gZ2x5cGggaGludGluZywgdGhlc2UgdmFsdWVzIG1pZ2h0IG5vdCBiZSBleGFjdCAgICAqLw0KLSAgLyogICAgZm9yIGNlcnRhaW4gZm9udHMuICBUaHVzIHRoZXkgbXVzdCBiZSB0cmVhdGVkIGFzIHVucmVsaWFibGUgICAgICAgICovDQotICAvKiAgICB3aXRoIGFuIGVycm9yIG1hcmdpbiBvZiBhdCBsZWFzdCBvbmUgcGl4ZWwhICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgSW5kZWVkLCB0aGUgb25seSB3YXkgdG8gZ2V0IHRoZSBleGFjdCBtZXRyaWNzIGlzIHRvIHJlbmRlciBfYWxsXyAgICovDQotICAvKiAgICBnbHlwaHMuICBBcyB0aGlzIHdvdWxkIGJlIGEgZGVmaW5pdGUgcGVyZm9ybWFuY2UgaGl0LCBpdCBpcyB1cCB0byAgKi8NCi0gIC8qICAgIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gcGVyZm9ybSBzdWNoIGNvbXB1dGF0aW9ucy4gICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGUgRlRfU2l6ZV9NZXRyaWNzIHN0cnVjdHVyZSBpcyB2YWxpZCBmb3IgYml0bWFwIGZvbnRzIGFsc28uICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1NpemVfTWV0cmljc18NCi0gIHsNCi0gICAgRlRfVVNob3J0ICB4X3BwZW07ICAgICAgLyogaG9yaXpvbnRhbCBwaXhlbHMgcGVyIEVNICAgICAgICAgICAgICAgKi8NCi0gICAgRlRfVVNob3J0ICB5X3BwZW07ICAgICAgLyogdmVydGljYWwgcGl4ZWxzIHBlciBFTSAgICAgICAgICAgICAgICAgKi8NCi0NCi0gICAgRlRfRml4ZWQgICB4X3NjYWxlOyAgICAgLyogc2NhbGluZyB2YWx1ZXMgdXNlZCB0byBjb252ZXJ0IGZvbnQgICAgKi8NCi0gICAgRlRfRml4ZWQgICB5X3NjYWxlOyAgICAgLyogdW5pdHMgdG8gMjYuNiBmcmFjdGlvbmFsIHBpeGVscyAgICAgICAgKi8NCi0NCi0gICAgRlRfUG9zICAgICBhc2NlbmRlcjsgICAgLyogYXNjZW5kZXIgaW4gMjYuNiBmcmFjLiBwaXhlbHMgICAgICAgICAgKi8NCi0gICAgRlRfUG9zICAgICBkZXNjZW5kZXI7ICAgLyogZGVzY2VuZGVyIGluIDI2LjYgZnJhYy4gcGl4ZWxzICAgICAgICAgKi8NCi0gICAgRlRfUG9zICAgICBoZWlnaHQ7ICAgICAgLyogdGV4dCBoZWlnaHQgaW4gMjYuNiBmcmFjLiBwaXhlbHMgICAgICAgKi8NCi0gICAgRlRfUG9zICAgICBtYXhfYWR2YW5jZTsgLyogbWF4IGhvcml6b250YWwgYWR2YW5jZSwgaW4gMjYuNiBwaXhlbHMgKi8NCi0NCi0gIH0gRlRfU2l6ZV9NZXRyaWNzOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfU2l6ZVJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRnJlZVR5cGUgcm9vdCBzaXplIGNsYXNzIHN0cnVjdHVyZS4gIEEgc2l6ZSBvYmplY3QgbW9kZWxzIGEgZmFjZSAgICovDQotICAvKiAgICBvYmplY3QgYXQgYSBnaXZlbiBzaXplLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmYWNlICAgIDo6IEhhbmRsZSB0byB0aGUgcGFyZW50IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZ2VuZXJpYyA6OiBBIHR5cGVsZXNzIHBvaW50ZXIsIHdoaWNoIGlzIHVudXNlZCBieSB0aGUgRnJlZVR5cGUgICAgICovDQotICAvKiAgICAgICAgICAgICAgIGxpYnJhcnkgb3IgYW55IG9mIGl0cyBkcml2ZXJzLiAgSXQgY2FuIGJlIHVzZWQgYnkgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBsaW5rIHRoZWlyIG93biBkYXRhIHRvIGVhY2ggc2l6ZSAqLw0KLSAgLyogICAgICAgICAgICAgICBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIG1ldHJpY3MgOjogTWV0cmljcyBmb3IgdGhpcyBzaXplIG9iamVjdC4gIFRoaXMgZmllbGQgaXMgcmVhZC1vbmx5LiAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICB0eXBlZGVmIHN0cnVjdCAgRlRfU2l6ZVJlY18NCi0gIHsNCi0gICAgRlRfRmFjZSAgICAgICAgICAgZmFjZTsgICAgICAvKiBwYXJlbnQgZmFjZSBvYmplY3QgICAgICAgICAgICAgICovDQotICAgIEZUX0dlbmVyaWMgICAgICAgIGdlbmVyaWM7ICAgLyogZ2VuZXJpYyBwb2ludGVyIGZvciBjbGllbnQgdXNlcyAqLw0KLSAgICBGVF9TaXplX01ldHJpY3MgICBtZXRyaWNzOyAgIC8qIHNpemUgbWV0cmljcyAgICAgICAgICAgICAgICAgICAgKi8NCi0gICAgRlRfU2l6ZV9JbnRlcm5hbCAgaW50ZXJuYWw7DQotDQotICB9IEZUX1NpemVSZWM7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9TdWJHbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGUgc3ViZ2x5cGggc3RydWN0dXJlIGlzIGFuIGludGVybmFsIG9iamVjdCB1c2VkIHRvIGRlc2NyaWJlICAgICAgKi8NCi0gIC8qICAgIHN1YmdseXBocyAoZm9yIGV4YW1wbGUsIGluIHRoZSBjYXNlIG9mIGNvbXBvc2l0ZXMpLiAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoZSBzdWJnbHlwaCBpbXBsZW1lbnRhdGlvbiBpcyBub3QgcGFydCBvZiB0aGUgaGlnaC1sZXZlbCBBUEksICAgICAqLw0KLSAgLyogICAgaGVuY2UgdGhlIGZvcndhcmQgc3RydWN0dXJlIGRlY2xhcmF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFlvdSBjYW4gaG93ZXZlciByZXRyaWV2ZSBzdWJnbHlwaCBpbmZvcm1hdGlvbiB3aXRoICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgQEZUX0dldF9TdWJHbHlwaF9JbmZvLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIHR5cGVkZWYgc3RydWN0IEZUX1N1YkdseXBoUmVjXyogIEZUX1N1YkdseXBoOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfU2xvdF9JbnRlcm5hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgQW4gb3BhcXVlIGhhbmRsZSB0byBhbiBgRlRfU2xvdF9JbnRlcm5hbFJlYycgc3RydWN0dXJlLCB1c2VkIHRvICAgICovDQotICAvKiAgICBtb2RlbCBwcml2YXRlIGRhdGEgb2YgYSBnaXZlbiBARlRfR2x5cGhTbG90IG9iamVjdC4gICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgdHlwZWRlZiBzdHJ1Y3QgRlRfU2xvdF9JbnRlcm5hbFJlY18qICBGVF9TbG90X0ludGVybmFsOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfR2x5cGhTbG90UmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRnJlZVR5cGUgcm9vdCBnbHlwaCBzbG90IGNsYXNzIHN0cnVjdHVyZS4gIEEgZ2x5cGggc2xvdCBpcyBhICAgICAgICovDQotICAvKiAgICBjb250YWluZXIgd2hlcmUgaW5kaXZpZHVhbCBnbHlwaHMgY2FuIGJlIGxvYWRlZCwgYmUgdGhleSBpbiAgICAgICAgKi8NCi0gIC8qICAgIG91dGxpbmUgb3IgYml0bWFwIGZvcm1hdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGxpYnJhcnkgICAgICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBGcmVlVHlwZSBsaWJyYXJ5IGluc3RhbmNlICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBzbG90IGJlbG9uZ3MgdG8uICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGZhY2UgICAgICAgICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBwYXJlbnQgZmFjZSBvYmplY3QuICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBuZXh0ICAgICAgICAgICAgICA6OiBJbiBzb21lIGNhc2VzIChsaWtlIHNvbWUgZm9udCB0b29scyksIHNldmVyYWwgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoIHNsb3RzIHBlciBmYWNlIG9iamVjdCBjYW4gYmUgYSBnb29kICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgdGhpbmcuICBBcyB0aGlzIGlzIHJhcmUsIHRoZSBnbHlwaCBzbG90cyBhcmUgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZWQgdGhyb3VnaCBhIGRpcmVjdCwgc2luZ2xlLWxpbmtlZCBsaXN0ICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nIGl0cyBgbmV4dCcgZmllbGQuICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBnZW5lcmljICAgICAgICAgICA6OiBBIHR5cGVsZXNzIHBvaW50ZXIgd2hpY2ggaXMgdW51c2VkIGJ5IHRoZSAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIEZyZWVUeXBlIGxpYnJhcnkgb3IgYW55IG9mIGl0cyBkcml2ZXJzLiAgSXQgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHVzZWQgYnkgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBsaW5rICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICB0aGVpciBvd24gZGF0YSB0byBlYWNoIGdseXBoIHNsb3Qgb2JqZWN0LiAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgbWV0cmljcyAgICAgICAgICAgOjogVGhlIG1ldHJpY3Mgb2YgdGhlIGxhc3QgbG9hZGVkIGdseXBoIGluIHRoZSAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBzbG90LiAgVGhlIHJldHVybmVkIHZhbHVlcyBkZXBlbmQgb24gdGhlIGxhc3QgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQgZmxhZ3MgKHNlZSB0aGUgQEZUX0xvYWRfR2x5cGggQVBJICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24pIGFuZCBjYW4gYmUgZXhwcmVzc2VkIGVpdGhlciBpbiAyNi42ICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbmFsIHBpeGVscyBvciBmb250IHVuaXRzLiAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGV2ZW4gd2hlbiB0aGUgZ2x5cGggaW1hZ2UgaXMgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZCwgdGhlIG1ldHJpY3MgYXJlIG5vdC4gICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgbGluZWFySG9yaUFkdmFuY2UgOjogVGhlIGFkdmFuY2Ugd2lkdGggb2YgdGhlIHVuaGludGVkIGdseXBoLiAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBJdHMgdmFsdWUgaXMgZXhwcmVzc2VkIGluIDE2LjE2IGZyYWN0aW9uYWwgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVscywgdW5sZXNzIEBGVF9MT0FEX0xJTkVBUl9ERVNJR04gaXMgc2V0ICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBsb2FkaW5nIHRoZSBnbHlwaC4gIFRoaXMgZmllbGQgY2FuIGJlICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRhbnQgdG8gcGVyZm9ybSBjb3JyZWN0IFdZU0lXWUcgbGF5b3V0LiAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgcmVsZXZhbnQgZm9yIG91dGxpbmUgZ2x5cGhzLiAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBsaW5lYXJWZXJ0QWR2YW5jZSA6OiBUaGUgYWR2YW5jZSBoZWlnaHQgb2YgdGhlIHVuaGludGVkIGdseXBoLiAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIEl0cyB2YWx1ZSBpcyBleHByZXNzZWQgaW4gMTYuMTYgZnJhY3Rpb25hbCAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzLCB1bmxlc3MgQEZUX0xPQURfTElORUFSX0RFU0lHTiBpcyBzZXQgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGxvYWRpbmcgdGhlIGdseXBoLiAgVGhpcyBmaWVsZCBjYW4gYmUgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGFudCB0byBwZXJmb3JtIGNvcnJlY3QgV1lTSVdZRyBsYXlvdXQuICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgT25seSByZWxldmFudCBmb3Igb3V0bGluZSBnbHlwaHMuICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGFkdmFuY2UgICAgICAgICAgIDo6IFRoaXMgc2hvcnRoYW5kIGlzLCBkZXBlbmRpbmcgb24gICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgQEZUX0xPQURfSUdOT1JFX1RSQU5TRk9STSwgdGhlIHRyYW5zZm9ybWVkICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlIHdpZHRoIGZvciB0aGUgZ2x5cGggKGluIDI2LjYgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uYWwgcGl4ZWwgZm9ybWF0KS4gIEFzIHNwZWNpZmllZCB3aXRoICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgQEZUX0xPQURfVkVSVElDQUxfTEFZT1VULCBpdCB1c2VzIGVpdGhlciB0aGUgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBgaG9yaUFkdmFuY2UnIG9yIHRoZSBgdmVydEFkdmFuY2UnIHZhbHVlIG9mICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGBtZXRyaWNzJyBmaWVsZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmb3JtYXQgICAgICAgICAgICA6OiBUaGlzIGZpZWxkIGluZGljYXRlcyB0aGUgZm9ybWF0IG9mIHRoZSBpbWFnZSAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lZCBpbiB0aGUgZ2x5cGggc2xvdC4gIFR5cGljYWxseSAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgQEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVAsICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBARlRfR0xZUEhfRk9STUFUX09VVExJTkUsIG9yICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9HTFlQSF9GT1JNQVRfQ09NUE9TSVRFLCBidXQgb3RoZXJzIGFyZSAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGJpdG1hcCAgICAgICAgICAgIDo6IFRoaXMgZmllbGQgaXMgdXNlZCBhcyBhIGJpdG1hcCBkZXNjcmlwdG9yICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgc2xvdCBmb3JtYXQgaXMgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBARlRfR0xZUEhfRk9STUFUX0JJVE1BUC4gIE5vdGUgdGhhdCB0aGUgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgYW5kIGNvbnRlbnQgb2YgdGhlIGJpdG1hcCBidWZmZXIgY2FuICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlIGJldHdlZW4gY2FsbHMgb2YgQEZUX0xvYWRfR2x5cGggYW5kIGEgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBmZXcgb3RoZXIgZnVuY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgYml0bWFwX2xlZnQgICAgICAgOjogVGhpcyBpcyB0aGUgYml0bWFwJ3MgbGVmdCBiZWFyaW5nIGV4cHJlc3NlZCAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBpbiBpbnRlZ2VyIHBpeGVscy4gIE9mIGNvdXJzZSwgdGhpcyBpcyBvbmx5ICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkIGlmIHRoZSBmb3JtYXQgaXMgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgQEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVAuICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGJpdG1hcF90b3AgICAgICAgIDo6IFRoaXMgaXMgdGhlIGJpdG1hcCdzIHRvcCBiZWFyaW5nIGV4cHJlc3NlZCBpbiAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdlciBwaXhlbHMuICBSZW1lbWJlciB0aGF0IHRoaXMgaXMgdGhlICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSBmcm9tIHRoZSBiYXNlbGluZSB0byB0aGUgdG9wLW1vc3QgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoIHNjYW5saW5lLCB1cHdhcmRzIHl+Y29vcmRpbmF0ZXMgYmVpbmcgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgKnBvc2l0aXZlKi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIG91dGxpbmUgICAgICAgICAgIDo6IFRoZSBvdXRsaW5lIGRlc2NyaXB0b3IgZm9yIHRoZSBjdXJyZW50IGdseXBoICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgaWYgaXRzIGZvcm1hdCBpcyAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBARlRfR0xZUEhfRk9STUFUX09VVExJTkUuICBPbmNlIGEgZ2x5cGggaXMgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZCwgYG91dGxpbmUnIGNhbiBiZSB0cmFuc2Zvcm1lZCwgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgZGlzdG9ydGVkLCBlbWJvbGRlZCwgZXRjLiAgSG93ZXZlciwgaXQgbXVzdCAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBub3QgYmUgZnJlZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgbnVtX3N1YmdseXBocyAgICAgOjogVGhlIG51bWJlciBvZiBzdWJnbHlwaHMgaW4gYSBjb21wb3NpdGUgZ2x5cGguICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGlzIG9ubHkgdmFsaWQgZm9yIHRoZSBjb21wb3NpdGUgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoIGZvcm1hdCB0aGF0IHNob3VsZCBub3JtYWxseSBvbmx5IGJlICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkIHdpdGggdGhlIEBGVF9MT0FEX05PX1JFQ1VSU0UgZmxhZy4gICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBGb3Igbm93IHRoaXMgaXMgaW50ZXJuYWwgdG8gRnJlZVR5cGUuICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgc3ViZ2x5cGhzICAgICAgICAgOjogQW4gYXJyYXkgb2Ygc3ViZ2x5cGggZGVzY3JpcHRvcnMgZm9yICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGUgZ2x5cGhzLiAgVGhlcmUgYXJlIGBudW1fc3ViZ2x5cGhzJyAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzIGluIHRoZXJlLiAgQ3VycmVudGx5IGludGVybmFsIHRvICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgRnJlZVR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGNvbnRyb2xfZGF0YSAgICAgIDo6IENlcnRhaW4gZm9udCBkcml2ZXJzIGNhbiBhbHNvIHJldHVybiB0aGUgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbCBkYXRhIGZvciBhIGdpdmVuIGdseXBoIGltYWdlIChlLmcuICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlVHlwZSBieXRlY29kZSwgVHlwZX4xIGNoYXJzdHJpbmdzLCBldGMuKS4gKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgYSBwb2ludGVyIHRvIHN1Y2ggZGF0YS4gICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBjb250cm9sX2xlbiAgICAgICA6OiBUaGlzIGlzIHRoZSBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIGNvbnRyb2wgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBvdGhlciAgICAgICAgICAgICA6OiBSZWFsbHkgd2lja2VkIGZvcm1hdHMgY2FuIHVzZSB0aGlzIHBvaW50ZXIgdG8gKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnQgdGhlaXIgb3duIGdseXBoIGltYWdlIHRvIGNsaWVudCAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25zLiAgTm90ZSB0aGF0IHRoZSBhcHBsaWNhdGlvbiAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkcyB0byBrbm93IGFib3V0IHRoZSBpbWFnZSBmb3JtYXQuICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgbHNiX2RlbHRhICAgICAgICAgOjogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBoaW50ZWQgYW5kIHVuaGludGVkICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0IHNpZGUgYmVhcmluZyB3aGlsZSBhdXRvaGludGluZyBpcyAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZS4gIFplcm8gb3RoZXJ3aXNlLiAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICByc2JfZGVsdGEgICAgICAgICA6OiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGhpbnRlZCBhbmQgdW5oaW50ZWQgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0IHNpZGUgYmVhcmluZyB3aGlsZSBhdXRvaGludGluZyBpcyAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlLiAgWmVybyBvdGhlcndpc2UuICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgSWYgQEZUX0xvYWRfR2x5cGggaXMgY2FsbGVkIHdpdGggZGVmYXVsdCBmbGFncyAoc2VlICAgICAgICAgICAgICAgICovDQotICAvKiAgICBARlRfTE9BRF9ERUZBVUxUKSB0aGUgZ2x5cGggaW1hZ2UgaXMgbG9hZGVkIGluIHRoZSBnbHlwaCBzbG90IGluICAgKi8NCi0gIC8qICAgIGl0cyBuYXRpdmUgZm9ybWF0IChlLmcuLCBhbiBvdXRsaW5lIGdseXBoIGZvciBUcnVlVHlwZSBhbmQgVHlwZX4xICAqLw0KLSAgLyogICAgZm9ybWF0cykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoaXMgaW1hZ2UgY2FuIGxhdGVyIGJlIGNvbnZlcnRlZCBpbnRvIGEgYml0bWFwIGJ5IGNhbGxpbmcgICAgICAgICAqLw0KLSAgLyogICAgQEZUX1JlbmRlcl9HbHlwaC4gIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgZm9yICAgICovDQotICAvKiAgICB0aGUgbmF0aXZlIGltYWdlJ3MgZm9ybWF0LCB0aGVuIGludm9rZXMgaXQuICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVGhlIHJlbmRlcmVyIGlzIGluIGNoYXJnZSBvZiB0cmFuc2Zvcm1pbmcgdGhlIG5hdGl2ZSBpbWFnZSB0aHJvdWdoICovDQotICAvKiAgICB0aGUgc2xvdCdzIGZhY2UgdHJhbnNmb3JtYXRpb24gZmllbGRzLCB0aGVuIGNvbnZlcnRpbmcgaXQgaW50byBhICAgKi8NCi0gIC8qICAgIGJpdG1hcCB0aGF0IGlzIHJldHVybmVkIGluIGBzbG90LT5iaXRtYXAnLiAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBOb3RlIHRoYXQgYHNsb3QtPmJpdG1hcF9sZWZ0JyBhbmQgYHNsb3QtPmJpdG1hcF90b3AnIGFyZSBhbHNvIHVzZWQgKi8NCi0gIC8qICAgIHRvIHNwZWNpZnkgdGhlIHBvc2l0aW9uIG9mIHRoZSBiaXRtYXAgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcGVuICAqLw0KLSAgLyogICAgcG9zaXRpb24gKGUuZy4sIGNvb3JkaW5hdGVzICgwLDApIG9uIHRoZSBiYXNlbGluZSkuICBPZiBjb3Vyc2UsICAgICovDQotICAvKiAgICBgc2xvdC0+Zm9ybWF0JyBpcyBhbHNvIGNoYW5nZWQgdG8gQEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVAuICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBIZXJlIGEgc21hbGwgcHNldWRvIGNvZGUgZnJhZ21lbnQgd2hpY2ggc2hvd3MgaG93IHRvIHVzZSAgICAgICAgICAgKi8NCi0gIC8qICAgIGBsc2JfZGVsdGEnIGFuZCBgcnNiX2RlbHRhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgRlRfUG9zICBvcmlnaW5feCAgICAgICA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBGVF9Qb3MgIHByZXZfcnNiX2RlbHRhID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBmb3IgYWxsIGdseXBocyBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgPGNvbXB1dGUga2VybiBiZXR3ZWVuIGN1cnJlbnQgYW5kIHByZXZpb3VzIGdseXBoIGFuZCBhZGQgaXQgdG8gKi8NCi0gIC8qICAgICAgICAgYG9yaWdpbl94Jz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgPGxvYWQgZ2x5cGggd2l0aCBgRlRfTG9hZF9HbHlwaCc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgIGlmICggcHJldl9yc2JfZGVsdGEgLSBmYWNlLT5nbHlwaC0+bHNiX2RlbHRhID49IDMyICkgICAgICAgICAgICovDQotICAvKiAgICAgICAgICBvcmlnaW5feCAtPSA2NDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICBlbHNlIGlmICggcHJldl9yc2JfZGVsdGEgLSBmYWNlLT5nbHlwaC0+bHNiX2RlbHRhIDwgLTMyICkgICAgICAqLw0KLSAgLyogICAgICAgICAgb3JpZ2luX3ggKz0gNjQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICBwcmV2X3JzYl9kZWx0YSA9IGZhY2UtPmdseXBoLT5yc2JfZGVsdGE7ICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgPHNhdmUgZ2x5cGggaW1hZ2UsIG9yIHJlbmRlciBnbHlwaCwgb3IgLi4uPiAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgIG9yaWdpbl94ICs9IGZhY2UtPmdseXBoLT5hZHZhbmNlLng7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIGVuZGZvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICB0eXBlZGVmIHN0cnVjdCAgRlRfR2x5cGhTbG90UmVjXw0KLSAgew0KLSAgICBGVF9MaWJyYXJ5ICAgICAgICBsaWJyYXJ5Ow0KLSAgICBGVF9GYWNlICAgICAgICAgICBmYWNlOw0KLSAgICBGVF9HbHlwaFNsb3QgICAgICBuZXh0Ow0KLSAgICBGVF9VSW50ICAgICAgICAgICByZXNlcnZlZDsgICAgICAgLyogcmV0YWluZWQgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5ICovDQotICAgIEZUX0dlbmVyaWMgICAgICAgIGdlbmVyaWM7DQotDQotICAgIEZUX0dseXBoX01ldHJpY3MgIG1ldHJpY3M7DQotICAgIEZUX0ZpeGVkICAgICAgICAgIGxpbmVhckhvcmlBZHZhbmNlOw0KLSAgICBGVF9GaXhlZCAgICAgICAgICBsaW5lYXJWZXJ0QWR2YW5jZTsNCi0gICAgRlRfVmVjdG9yICAgICAgICAgYWR2YW5jZTsNCi0NCi0gICAgRlRfR2x5cGhfRm9ybWF0ICAgZm9ybWF0Ow0KLQ0KLSAgICBGVF9CaXRtYXAgICAgICAgICBiaXRtYXA7DQotICAgIEZUX0ludCAgICAgICAgICAgIGJpdG1hcF9sZWZ0Ow0KLSAgICBGVF9JbnQgICAgICAgICAgICBiaXRtYXBfdG9wOw0KLQ0KLSAgICBGVF9PdXRsaW5lICAgICAgICBvdXRsaW5lOw0KLQ0KLSAgICBGVF9VSW50ICAgICAgICAgICBudW1fc3ViZ2x5cGhzOw0KLSAgICBGVF9TdWJHbHlwaCAgICAgICBzdWJnbHlwaHM7DQotDQotICAgIHZvaWQqICAgICAgICAgICAgIGNvbnRyb2xfZGF0YTsNCi0gICAgbG9uZyAgICAgICAgICAgICAgY29udHJvbF9sZW47DQotDQotICAgIEZUX1BvcyAgICAgICAgICAgIGxzYl9kZWx0YTsNCi0gICAgRlRfUG9zICAgICAgICAgICAgcnNiX2RlbHRhOw0KLQ0KLSAgICB2b2lkKiAgICAgICAgICAgICBvdGhlcjsNCi0NCi0gICAgRlRfU2xvdF9JbnRlcm5hbCAgaW50ZXJuYWw7DQotDQotICB9IEZUX0dseXBoU2xvdFJlYzsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgIEYgVSBOIEMgVCBJIE8gTiBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfSW5pdF9GcmVlVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgSW5pdGlhbGl6ZSBhIG5ldyBGcmVlVHlwZSBsaWJyYXJ5IG9iamVjdC4gIFRoZSBzZXQgb2YgbW9kdWxlcyAgICAgICovDQotICAvKiAgICB0aGF0IGFyZSByZWdpc3RlcmVkIGJ5IHRoaXMgZnVuY3Rpb24gaXMgZGV0ZXJtaW5lZCBhdCBidWlsZCB0aW1lLiAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBhbGlicmFyeSA6OiBBIGhhbmRsZSB0byBhIG5ldyBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBJbiBjYXNlIHlvdSB3YW50IHRvIHByb3ZpZGUgeW91ciBvd24gbWVtb3J5IGFsbG9jYXRpbmcgcm91dGluZXMsICAgKi8NCi0gIC8qICAgIHVzZSBARlRfTmV3X0xpYnJhcnkgaW5zdGVhZCwgZm9sbG93ZWQgYnkgYSBjYWxsIHRvICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgQEZUX0FkZF9EZWZhdWx0X01vZHVsZXMgKG9yIGEgc2VyaWVzIG9mIGNhbGxzIHRvIEBGVF9BZGRfTW9kdWxlKS4gICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZvciBtdWx0aS10aHJlYWRpbmcgYXBwbGljYXRpb25zIGVhY2ggdGhyZWFkIHNob3VsZCBoYXZlIGl0cyBvd24gICAqLw0KLSAgLyogICAgRlRfTGlicmFyeSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIElmIHlvdSBuZWVkIHJlZmVyZW5jZS1jb3VudGluZyAoY2YuIEBGVF9SZWZlcmVuY2VfTGlicmFyeSksIHVzZSAgICAqLw0KLSAgLyogICAgQEZUX05ld19MaWJyYXJ5IGFuZCBARlRfRG9uZV9MaWJyYXJ5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIEZUX0VYUE9SVCggRlRfRXJyb3IgKQ0KLSAgRlRfSW5pdF9GcmVlVHlwZSggRlRfTGlicmFyeSAgKmFsaWJyYXJ5ICk7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9Eb25lX0ZyZWVUeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBEZXN0cm95IGEgZ2l2ZW4gRnJlZVR5cGUgbGlicmFyeSBvYmplY3QgYW5kIGFsbCBvZiBpdHMgY2hpbGRyZW4sICAgKi8NCi0gIC8qICAgIGluY2x1ZGluZyByZXNvdXJjZXMsIGRyaXZlcnMsIGZhY2VzLCBzaXplcywgZXRjLiAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGxpYnJhcnkgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICBGVF9FWFBPUlQoIEZUX0Vycm9yICkNCi0gIEZUX0RvbmVfRnJlZVR5cGUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX09QRU5fWFhYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEEgbGlzdCBvZiBiaXQtZmllbGQgY29uc3RhbnRzIHVzZWQgd2l0aGluIHRoZSBgZmxhZ3MnIGZpZWxkIG9mIHRoZSAqLw0KLSAgLyogICAgQEZUX09wZW5fQXJncyBzdHJ1Y3R1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfT1BFTl9NRU1PUlkgICA6OiBUaGlzIGlzIGEgbWVtb3J5LWJhc2VkIHN0cmVhbS4gICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX09QRU5fU1RSRUFNICAgOjogQ29weSB0aGUgc3RyZWFtIGZyb20gdGhlIGBzdHJlYW0nIGZpZWxkLiAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9PUEVOX1BBVEhOQU1FIDo6IENyZWF0ZSBhIG5ldyBpbnB1dCBzdHJlYW0gZnJvbSBhIEN+cGF0aCAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9PUEVOX0RSSVZFUiAgIDo6IFVzZSB0aGUgYGRyaXZlcicgZmllbGQuICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfT1BFTl9QQVJBTVMgICA6OiBVc2UgdGhlIGBudW1fcGFyYW1zJyBhbmQgYHBhcmFtcycgZmllbGRzLiAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGZ0X29wZW5fbWVtb3J5ICAgOjogRGVwcmVjYXRlZDsgdXNlIEBGVF9PUEVOX01FTU9SWSBpbnN0ZWFkLiAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmdF9vcGVuX3N0cmVhbSAgIDo6IERlcHJlY2F0ZWQ7IHVzZSBARlRfT1BFTl9TVFJFQU0gaW5zdGVhZC4gICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZnRfb3Blbl9wYXRobmFtZSA6OiBEZXByZWNhdGVkOyB1c2UgQEZUX09QRU5fUEFUSE5BTUUgaW5zdGVhZC4gICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGZ0X29wZW5fZHJpdmVyICAgOjogRGVwcmVjYXRlZDsgdXNlIEBGVF9PUEVOX0RSSVZFUiBpbnN0ZWFkLiAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmdF9vcGVuX3BhcmFtcyAgIDo6IERlcHJlY2F0ZWQ7IHVzZSBARlRfT1BFTl9QQVJBTVMgaW5zdGVhZC4gICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGUgYEZUX09QRU5fTUVNT1JZJywgYEZUX09QRU5fU1RSRUFNJywgYW5kIGBGVF9PUEVOX1BBVEhOQU1FJyAgICAgKi8NCi0gIC8qICAgIGZsYWdzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotI2RlZmluZSBGVF9PUEVOX01FTU9SWSAgICAweDENCi0jZGVmaW5lIEZUX09QRU5fU1RSRUFNICAgIDB4Mg0KLSNkZWZpbmUgRlRfT1BFTl9QQVRITkFNRSAgMHg0DQotI2RlZmluZSBGVF9PUEVOX0RSSVZFUiAgICAweDgNCi0jZGVmaW5lIEZUX09QRU5fUEFSQU1TICAgIDB4MTANCi0NCi0jZGVmaW5lIGZ0X29wZW5fbWVtb3J5ICAgIEZUX09QRU5fTUVNT1JZICAgICAvKiBkZXByZWNhdGVkICovDQotI2RlZmluZSBmdF9vcGVuX3N0cmVhbSAgICBGVF9PUEVOX1NUUkVBTSAgICAgLyogZGVwcmVjYXRlZCAqLw0KLSNkZWZpbmUgZnRfb3Blbl9wYXRobmFtZSAgRlRfT1BFTl9QQVRITkFNRSAgIC8qIGRlcHJlY2F0ZWQgKi8NCi0jZGVmaW5lIGZ0X29wZW5fZHJpdmVyICAgIEZUX09QRU5fRFJJVkVSICAgICAvKiBkZXByZWNhdGVkICovDQotI2RlZmluZSBmdF9vcGVuX3BhcmFtcyAgICBGVF9PUEVOX1BBUkFNUyAgICAgLyogZGVwcmVjYXRlZCAqLw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfUGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgQSBzaW1wbGUgc3RydWN0dXJlIHVzZWQgdG8gcGFzcyBtb3JlIG9yIGxlc3MgZ2VuZXJpYyBwYXJhbWV0ZXJzIHRvICovDQotICAvKiAgICBARlRfT3Blbl9GYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICB0YWcgIDo6IEEgZm91ci1ieXRlIGlkZW50aWZpY2F0aW9uIHRhZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZGF0YSA6OiBBIHBvaW50ZXIgdG8gdGhlIHBhcmFtZXRlciBkYXRhLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVGhlIElEIGFuZCBmdW5jdGlvbiBvZiBwYXJhbWV0ZXJzIGFyZSBkcml2ZXItc3BlY2lmaWMuICBTZWUgdGhlICAgICovDQotICAvKiAgICB2YXJpb3VzIEZUX1BBUkFNX1RBR19YWFggZmxhZ3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1BhcmFtZXRlcl8NCi0gIHsNCi0gICAgRlRfVUxvbmcgICAgdGFnOw0KLSAgICBGVF9Qb2ludGVyICBkYXRhOw0KLQ0KLSAgfSBGVF9QYXJhbWV0ZXI7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9PcGVuX0FyZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIHRvIGluZGljYXRlIGhvdyB0byBvcGVuIGEgbmV3IGZvbnQgZmlsZSBvciAgICAgICAgKi8NCi0gIC8qICAgIHN0cmVhbS4gIEEgcG9pbnRlciB0byBzdWNoIGEgc3RydWN0dXJlIGNhbiBiZSB1c2VkIGFzIGEgcGFyYW1ldGVyICAqLw0KLSAgLyogICAgZm9yIHRoZSBmdW5jdGlvbnMgQEZUX09wZW5fRmFjZSBhbmQgQEZUX0F0dGFjaF9TdHJlYW0uICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZmxhZ3MgICAgICAgOjogQSBzZXQgb2YgYml0IGZsYWdzIGluZGljYXRpbmcgaG93IHRvIHVzZSB0aGUgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgbWVtb3J5X2Jhc2UgOjogVGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGZpbGUgaW4gbWVtb3J5LiAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIG1lbW9yeV9zaXplIDo6IFRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBmaWxlIGluIG1lbW9yeS4gICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBwYXRobmFtZSAgICA6OiBBIHBvaW50ZXIgdG8gYW4gOC1iaXQgZmlsZSBwYXRobmFtZS4gICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgc3RyZWFtICAgICAgOjogQSBoYW5kbGUgdG8gYSBzb3VyY2Ugc3RyZWFtIG9iamVjdC4gICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGRyaXZlciAgICAgIDo6IFRoaXMgZmllbGQgaXMgZXhjbHVzaXZlbHkgdXNlZCBieSBARlRfT3Blbl9GYWNlOyAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgaXQgc2ltcGx5IHNwZWNpZmllcyB0aGUgZm9udCBkcml2ZXIgdG8gdXNlIHRvIG9wZW4gICovDQotICAvKiAgICAgICAgICAgICAgICAgICB0aGUgZmFjZS4gIElmIHNldCB0b34wLCBGcmVlVHlwZSB0cmllcyB0byBsb2FkIHRoZSAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgIGZhY2Ugd2l0aCBlYWNoIG9uZSBvZiB0aGUgZHJpdmVycyBpbiBpdHMgbGlzdC4gICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBudW1fcGFyYW1zICA6OiBUaGUgbnVtYmVyIG9mIGV4dHJhIHBhcmFtZXRlcnMuICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgcGFyYW1zICAgICAgOjogRXh0cmEgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlIGZvbnQgZHJpdmVyIHdoZW4gICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICBvcGVuaW5nIGEgbmV3IGZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGUgc3RyZWFtIHR5cGUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgY29udGVudHMgb2YgYGZsYWdzJyB3aGljaCAgICAgKi8NCi0gIC8qICAgIGFyZSB0ZXN0ZWQgaW4gdGhlIGZvbGxvd2luZyBvcmRlciBieSBARlRfT3Blbl9GYWNlOiAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBJZiB0aGUgYEZUX09QRU5fTUVNT1JZJyBiaXQgaXMgc2V0LCBhc3N1bWUgdGhhdCB0aGlzIGlzIGEgICAgICAgICAgKi8NCi0gIC8qICAgIG1lbW9yeSBmaWxlIG9mIGBtZW1vcnlfc2l6ZScgYnl0ZXMsIGxvY2F0ZWQgYXQgYG1lbW9yeV9hZGRyZXNzJy4gICAqLw0KLSAgLyogICAgVGhlIGRhdGEgYXJlIGFyZSBub3QgY29waWVkLCBhbmQgdGhlIGNsaWVudCBpcyByZXNwb25zaWJsZSBmb3IgICAgICovDQotICAvKiAgICByZWxlYXNpbmcgYW5kIGRlc3Ryb3lpbmcgdGhlbSBfYWZ0ZXJfIHRoZSBjb3JyZXNwb25kaW5nIGNhbGwgdG8gICAgKi8NCi0gIC8qICAgIEBGVF9Eb25lX0ZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBPdGhlcndpc2UsIGlmIHRoZSBgRlRfT1BFTl9TVFJFQU0nIGJpdCBpcyBzZXQsIGFzc3VtZSB0aGF0IGEgICAgICAgKi8NCi0gIC8qICAgIGN1c3RvbSBpbnB1dCBzdHJlYW0gYHN0cmVhbScgaXMgdXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBPdGhlcndpc2UsIGlmIHRoZSBgRlRfT1BFTl9QQVRITkFNRScgYml0IGlzIHNldCwgYXNzdW1lIHRoYXQgdGhpcyAgKi8NCi0gIC8qICAgIGlzIGEgbm9ybWFsIGZpbGUgYW5kIHVzZSBgcGF0aG5hbWUnIHRvIG9wZW4gaXQuICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBJZiB0aGUgYEZUX09QRU5fRFJJVkVSJyBiaXQgaXMgc2V0LCBARlRfT3Blbl9GYWNlIG9ubHkgdHJpZXMgdG8gICAgKi8NCi0gIC8qICAgIG9wZW4gdGhlIGZpbGUgd2l0aCB0aGUgZHJpdmVyIHdob3NlIGhhbmRsZXIgaXMgaW4gYGRyaXZlcicuICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBJZiB0aGUgYEZUX09QRU5fUEFSQU1TJyBiaXQgaXMgc2V0LCB0aGUgcGFyYW1ldGVycyBnaXZlbiBieSAgICAgICAgKi8NCi0gIC8qICAgIGBudW1fcGFyYW1zJyBhbmQgYHBhcmFtcycgaXMgdXNlZC4gIFRoZXkgYXJlIGlnbm9yZWQgb3RoZXJ3aXNlLiAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBJZGVhbGx5LCBib3RoIHRoZSBgcGF0aG5hbWUnIGFuZCBgcGFyYW1zJyBmaWVsZHMgc2hvdWxkIGJlIHRhZ2dlZCAgKi8NCi0gIC8qICAgIGFzIGBjb25zdCc7IHRoaXMgaXMgbWlzc2luZyBmb3IgQVBJIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAgSW4gICAqLw0KLSAgLyogICAgb3RoZXIgd29yZHMsIGFwcGxpY2F0aW9ucyBzaG91bGQgdHJlYXQgdGhlbSBhcyByZWFkLW9ubHkuICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIHR5cGVkZWYgc3RydWN0ICBGVF9PcGVuX0FyZ3NfDQotICB7DQotICAgIEZUX1VJbnQgICAgICAgICBmbGFnczsNCi0gICAgY29uc3QgRlRfQnl0ZSogIG1lbW9yeV9iYXNlOw0KLSAgICBGVF9Mb25nICAgICAgICAgbWVtb3J5X3NpemU7DQotICAgIEZUX1N0cmluZyogICAgICBwYXRobmFtZTsNCi0gICAgRlRfU3RyZWFtICAgICAgIHN0cmVhbTsNCi0gICAgRlRfTW9kdWxlICAgICAgIGRyaXZlcjsNCi0gICAgRlRfSW50ICAgICAgICAgIG51bV9wYXJhbXM7DQotICAgIEZUX1BhcmFtZXRlciogICBwYXJhbXM7DQotDQotICB9IEZUX09wZW5fQXJnczsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX05ld19GYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gY2FsbHMgQEZUX09wZW5fRmFjZSB0byBvcGVuIGEgZm9udCBieSBpdHMgcGF0aG5hbWUuICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGxpYnJhcnkgICAgOjogQSBoYW5kbGUgdG8gdGhlIGxpYnJhcnkgcmVzb3VyY2UuICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIHBhdGhuYW1lICAgOjogQSBwYXRoIHRvIHRoZSBmb250IGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmYWNlX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZmFjZSB3aXRoaW4gdGhlIGZvbnQuICBUaGUgZmlyc3QgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgZmFjZSBoYXMgaW5kZXh+MC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGFmYWNlICAgICAgOjogQSBoYW5kbGUgdG8gYSBuZXcgZmFjZSBvYmplY3QuICBJZiBgZmFjZV9pbmRleCcgaXMgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybywgaXQgbXVzdCBiZSBub24tTlVMTC4gICovDQotICAvKiAgICAgICAgICAgICAgICAgIFNlZSBARlRfT3Blbl9GYWNlIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBVc2UgQEZUX0RvbmVfRmFjZSB0byBkZXN0cm95IHRoZSBjcmVhdGVkIEBGVF9GYWNlIG9iamVjdCAoYWxvbmcgICAgKi8NCi0gIC8qICAgIHdpdGggaXRzIHNsb3QgYW5kIHNpemVzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICBGVF9FWFBPUlQoIEZUX0Vycm9yICkNCi0gIEZUX05ld19GYWNlKCBGVF9MaWJyYXJ5ICAgbGlicmFyeSwNCi0gICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgZmlsZXBhdGhuYW1lLA0KLSAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICBmYWNlX2luZGV4LA0KLSAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICphZmFjZSApOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfTmV3X01lbW9yeV9GYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVGhpcyBmdW5jdGlvbiBjYWxscyBARlRfT3Blbl9GYWNlIHRvIG9wZW4gYSBmb250IHdoaWNoIGhhcyBiZWVuICAgICovDQotICAvKiAgICBsb2FkZWQgaW50byBtZW1vcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBsaWJyYXJ5ICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IHJlc291cmNlLiAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmaWxlX2Jhc2UgIDo6IEEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmb250IGRhdGEuICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZmlsZV9zaXplICA6OiBUaGUgc2l6ZSBvZiB0aGUgbWVtb3J5IGNodW5rIHVzZWQgYnkgdGhlIGZvbnQgZGF0YS4gICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGZhY2VfaW5kZXggOjogVGhlIGluZGV4IG9mIHRoZSBmYWNlIHdpdGhpbiB0aGUgZm9udC4gIFRoZSBmaXJzdCAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICBmYWNlIGhhcyBpbmRleH4wLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgYWZhY2UgICAgICA6OiBBIGhhbmRsZSB0byBhIG5ldyBmYWNlIG9iamVjdC4gIElmIGBmYWNlX2luZGV4JyBpcyAgICovDQotICAvKiAgICAgICAgICAgICAgICAgIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLCBpdCBtdXN0IGJlIG5vbi1OVUxMLiAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgU2VlIEBGVF9PcGVuX0ZhY2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFlvdSBtdXN0IG5vdCBkZWFsbG9jYXRlIHRoZSBtZW1vcnkgYmVmb3JlIGNhbGxpbmcgQEZUX0RvbmVfRmFjZS4gICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICBGVF9FWFBPUlQoIEZUX0Vycm9yICkNCi0gIEZUX05ld19NZW1vcnlfRmFjZSggRlRfTGlicmFyeSAgICAgIGxpYnJhcnksDQotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX0J5dGUqICBmaWxlX2Jhc2UsDQotICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgICBmaWxlX3NpemUsDQotICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgICBmYWNlX2luZGV4LA0KLSAgICAgICAgICAgICAgICAgICAgICBGVF9GYWNlICAgICAgICAqYWZhY2UgKTsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX09wZW5fRmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIENyZWF0ZSBhIGZhY2Ugb2JqZWN0IGZyb20gYSBnaXZlbiByZXNvdXJjZSBkZXNjcmliZWQgYnkgICAgICAgICAgICAqLw0KLSAgLyogICAgQEZUX09wZW5fQXJncy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgbGlicmFyeSAgICA6OiBBIGhhbmRsZSB0byB0aGUgbGlicmFyeSByZXNvdXJjZS4gICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgYXJncyAgICAgICA6OiBBIHBvaW50ZXIgdG8gYW4gYEZUX09wZW5fQXJncycgc3RydWN0dXJlIHdoaWNoIG11c3QgICovDQotICAvKiAgICAgICAgICAgICAgICAgIGJlIGZpbGxlZCBieSB0aGUgY2FsbGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZmFjZV9pbmRleCA6OiBUaGUgaW5kZXggb2YgdGhlIGZhY2Ugd2l0aGluIHRoZSBmb250LiAgVGhlIGZpcnN0ICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgIGZhY2UgaGFzIGluZGV4fjAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBhZmFjZSAgICAgIDo6IEEgaGFuZGxlIHRvIGEgbmV3IGZhY2Ugb2JqZWN0LiAgSWYgYGZhY2VfaW5kZXgnIGlzICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIGl0IG11c3QgYmUgbm9uLU5VTEwuICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICBTZWUgbm90ZSBiZWxvdy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVW5saWtlIEZyZWVUeXBlIDEueCwgdGhpcyBmdW5jdGlvbiBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgYSBnbHlwaCAgICovDQotICAvKiAgICBzbG90IGZvciB0aGUgZmFjZSBvYmplY3Qgd2hpY2ggY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IHRocm91Z2ggICAgKi8NCi0gIC8qICAgIGBmYWNlLT5nbHlwaCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9PcGVuX0ZhY2UgY2FuIGJlIHVzZWQgdG8gcXVpY2tseSBjaGVjayB3aGV0aGVyIHRoZSBmb250ICAgICAgICAgKi8NCi0gIC8qICAgIGZvcm1hdCBvZiBhIGdpdmVuIGZvbnQgcmVzb3VyY2UgaXMgc3VwcG9ydGVkIGJ5IEZyZWVUeXBlLiAgSWYgdGhlICAqLw0KLSAgLyogICAgYGZhY2VfaW5kZXgnIGZpZWxkIGlzIG5lZ2F0aXZlLCB0aGUgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUgaXN+MCAgICovDQotICAvKiAgICBpZiB0aGUgZm9udCBmb3JtYXQgaXMgcmVjb2duaXplZCwgb3Igbm9uLXplcm8gb3RoZXJ3aXNlOyAgICAgICAgICAgKi8NCi0gIC8qICAgIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbW9yZSBvciBsZXNzIGVtcHR5IGZhY2UgaGFuZGxlIGluIGAqYWZhY2UnICAqLw0KLSAgLyogICAgKGlmIGBhZmFjZScgaXNuJ3QgTlVMTCkuICBUaGUgb25seSB1c2VmdWwgZmllbGQgaW4gdGhpcyBzcGVjaWFsICAgICovDQotICAvKiAgICBjYXNlIGlzIGBmYWNlLT5udW1fZmFjZXMnIHdoaWNoIGdpdmVzIHRoZSBudW1iZXIgb2YgZmFjZXMgd2l0aGluICAgKi8NCi0gIC8qICAgIHRoZSBmb250IGZpbGUuICBBZnRlciBleGFtaW5hdGlvbiwgdGhlIHJldHVybmVkIEBGVF9GYWNlIHN0cnVjdHVyZSAqLw0KLSAgLyogICAgc2hvdWxkIGJlIGRlYWxsb2NhdGVkIHdpdGggYSBjYWxsIHRvIEBGVF9Eb25lX0ZhY2UuICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEVhY2ggbmV3IGZhY2Ugb2JqZWN0IGNyZWF0ZWQgd2l0aCB0aGlzIGZ1bmN0aW9uIGFsc28gb3ducyBhICAgICAgICAqLw0KLSAgLyogICAgZGVmYXVsdCBARlRfU2l6ZSBvYmplY3QsIGFjY2Vzc2libGUgYXMgYGZhY2UtPnNpemUnLiAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIE9uZSBARlRfTGlicmFyeSBpbnN0YW5jZSBjYW4gaGF2ZSBtdWx0aXBsZSBmYWNlIG9iamVjdHMsIHRoaXMgaXMsICAqLw0KLSAgLyogICAgQEZUX09wZW5fRmFjZSBhbmQgaXRzIHNpYmxpbmdzIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdXNpbmcgICovDQotICAvKiAgICB0aGUgc2FtZSBgbGlicmFyeScgYXJndW1lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgU2VlIHRoZSBkaXNjdXNzaW9uIG9mIHJlZmVyZW5jZSBjb3VudGVycyBpbiB0aGUgZGVzY3JpcHRpb24gb2YgICAgICovDQotICAvKiAgICBARlRfUmVmZXJlbmNlX0ZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgRlRfRVhQT1JUKCBGVF9FcnJvciApDQotICBGVF9PcGVuX0ZhY2UoIEZUX0xpYnJhcnkgICAgICAgICAgIGxpYnJhcnksDQotICAgICAgICAgICAgICAgIGNvbnN0IEZUX09wZW5fQXJncyogIGFyZ3MsDQotICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgICAgICAgIGZhY2VfaW5kZXgsDQotICAgICAgICAgICAgICAgIEZUX0ZhY2UgICAgICAgICAgICAgKmFmYWNlICk7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9BdHRhY2hfRmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGlzIGZ1bmN0aW9uIGNhbGxzIEBGVF9BdHRhY2hfU3RyZWFtIHRvIGF0dGFjaCBhIGZpbGUuICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmYWNlICAgICAgICAgOjogVGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmaWxlcGF0aG5hbWUgOjogVGhlIHBhdGhuYW1lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgRlRfRVhQT1JUKCBGVF9FcnJvciApDQotICBGVF9BdHRhY2hfRmlsZSggRlRfRmFjZSAgICAgIGZhY2UsDQotICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogIGZpbGVwYXRobmFtZSApOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfQXR0YWNoX1N0cmVhbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgYEF0dGFjaCcgZGF0YSB0byBhIGZhY2Ugb2JqZWN0LiAgTm9ybWFsbHksIHRoaXMgaXMgdXNlZCB0byByZWFkICAgICovDQotICAvKiAgICBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciB0aGUgZmFjZSBvYmplY3QuICBGb3IgZXhhbXBsZSwgeW91IGNhbiAgKi8NCi0gIC8qICAgIGF0dGFjaCBhbiBBRk0gZmlsZSB0aGF0IGNvbWVzIHdpdGggYSBUeXBlfjEgZm9udCB0byBnZXQgdGhlICAgICAgICAqLw0KLSAgLyogICAga2VybmluZyB2YWx1ZXMgYW5kIG90aGVyIG1ldHJpY3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZmFjZSAgICAgICA6OiBUaGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgcGFyYW1ldGVycyA6OiBBIHBvaW50ZXIgdG8gQEZUX09wZW5fQXJncyB3aGljaCBtdXN0IGJlIGZpbGxlZCBieSAgICovDQotICAvKiAgICAgICAgICAgICAgICAgIHRoZSBjYWxsZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGUgbWVhbmluZyBvZiB0aGUgYGF0dGFjaCcgKGkuZS4sIHdoYXQgcmVhbGx5IGhhcHBlbnMgd2hlbiB0aGUgICAgKi8NCi0gIC8qICAgIG5ldyBmaWxlIGlzIHJlYWQpIGlzIG5vdCBmaXhlZCBieSBGcmVlVHlwZSBpdHNlbGYuICBJdCByZWFsbHkgICAgICAqLw0KLSAgLyogICAgZGVwZW5kcyBvbiB0aGUgZm9udCBmb3JtYXQgKGFuZCB0aHVzIHRoZSBmb250IGRyaXZlcikuICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIENsaWVudCBhcHBsaWNhdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGtub3cgd2hhdCB0aGV5IGFyZSBkb2luZyAgICAgICAqLw0KLSAgLyogICAgd2hlbiBpbnZva2luZyB0aGlzIGZ1bmN0aW9uLiAgTW9zdCBkcml2ZXJzIHNpbXBseSBkbyBub3QgaW1wbGVtZW50ICovDQotICAvKiAgICBmaWxlIGF0dGFjaG1lbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgRlRfRVhQT1JUKCBGVF9FcnJvciApDQotICBGVF9BdHRhY2hfU3RyZWFtKCBGVF9GYWNlICAgICAgICBmYWNlLA0KLSAgICAgICAgICAgICAgICAgICAgRlRfT3Blbl9BcmdzKiAgcGFyYW1ldGVycyApOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfUmVmZXJlbmNlX0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgQSBjb3VudGVyIGdldHMgaW5pdGlhbGl6ZWQgdG9+MSBhdCB0aGUgdGltZSBhbiBARlRfRmFjZSBzdHJ1Y3R1cmUgICovDQotICAvKiAgICBpcyBjcmVhdGVkLiAgVGhpcyBmdW5jdGlvbiBpbmNyZW1lbnRzIHRoZSBjb3VudGVyLiAgQEZUX0RvbmVfRmFjZSAgKi8NCi0gIC8qICAgIHRoZW4gb25seSBkZXN0cm95cyBhIGZhY2UgaWYgdGhlIGNvdW50ZXIgaXN+MSwgb3RoZXJ3aXNlIGl0IHNpbXBseSAqLw0KLSAgLyogICAgZGVjcmVtZW50cyB0aGUgY291bnRlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gaGVscHMgaW4gbWFuYWdpbmcgbGlmZS1jeWNsZXMgb2Ygc3RydWN0dXJlcyB3aGljaCAgICAqLw0KLSAgLyogICAgcmVmZXJlbmNlIEBGVF9GYWNlIG9iamVjdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZmFjZSA6OiBBIGhhbmRsZSB0byBhIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxTaW5jZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgMi40LjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIEZUX0VYUE9SVCggRlRfRXJyb3IgKQ0KLSAgRlRfUmVmZXJlbmNlX0ZhY2UoIEZUX0ZhY2UgIGZhY2UgKTsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0RvbmVfRmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIERpc2NhcmQgYSBnaXZlbiBmYWNlIG9iamVjdCwgYXMgd2VsbCBhcyBhbGwgb2YgaXRzIGNoaWxkIHNsb3RzIGFuZCAqLw0KLSAgLyogICAgc2l6ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZmFjZSA6OiBBIGhhbmRsZSB0byBhIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgU2VlIHRoZSBkaXNjdXNzaW9uIG9mIHJlZmVyZW5jZSBjb3VudGVycyBpbiB0aGUgZGVzY3JpcHRpb24gb2YgICAgICovDQotICAvKiAgICBARlRfUmVmZXJlbmNlX0ZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgRlRfRVhQT1JUKCBGVF9FcnJvciApDQotICBGVF9Eb25lX0ZhY2UoIEZUX0ZhY2UgIGZhY2UgKTsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX1NlbGVjdF9TaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFNlbGVjdCBhIGJpdG1hcCBzdHJpa2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGZhY2UgICAgICAgICA6OiBBIGhhbmRsZSB0byBhIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIHN0cmlrZV9pbmRleCA6OiBUaGUgaW5kZXggb2YgdGhlIGJpdG1hcCBzdHJpa2UgaW4gdGhlICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgIGBhdmFpbGFibGVfc2l6ZXMnIGZpZWxkIG9mIEBGVF9GYWNlUmVjIHN0cnVjdHVyZS4gICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIEZUX0VYUE9SVCggRlRfRXJyb3IgKQ0KLSAgRlRfU2VsZWN0X1NpemUoIEZUX0ZhY2UgIGZhY2UsDQotICAgICAgICAgICAgICAgICAgRlRfSW50ICAgc3RyaWtlX2luZGV4ICk7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEVudW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9TaXplX1JlcXVlc3RfVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBBbiBlbnVtZXJhdGlvbiB0eXBlIHRoYXQgbGlzdHMgdGhlIHN1cHBvcnRlZCBzaXplIHJlcXVlc3QgdHlwZXMuICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFZhbHVlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9TSVpFX1JFUVVFU1RfVFlQRV9OT01JTkFMIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgVGhlIG5vbWluYWwgc2l6ZS4gIFRoZSBgdW5pdHNfcGVyX0VNJyBmaWVsZCBvZiBARlRfRmFjZVJlYyBpcyAgICAqLw0KLSAgLyogICAgICB1c2VkIHRvIGRldGVybWluZSBib3RoIHNjYWxpbmcgdmFsdWVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX1NJWkVfUkVRVUVTVF9UWVBFX1JFQUxfRElNIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBUaGUgcmVhbCBkaW1lbnNpb24uICBUaGUgc3VtIG9mIHRoZSB0aGUgYGFzY2VuZGVyJyBhbmQgKG1pbnVzICAgICovDQotICAvKiAgICAgIG9mKSB0aGUgYGRlc2NlbmRlcicgZmllbGRzIG9mIEBGVF9GYWNlUmVjIGFyZSB1c2VkIHRvIGRldGVybWluZSAgKi8NCi0gIC8qICAgICAgYm90aCBzY2FsaW5nIHZhbHVlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9TSVpFX1JFUVVFU1RfVFlQRV9CQk9YIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgVGhlIGZvbnQgYm91bmRpbmcgYm94LiAgVGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGBiYm94JyBmaWVsZCAqLw0KLSAgLyogICAgICBvZiBARlRfRmFjZVJlYyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGhvcml6b250YWwgYW5kIHZlcnRpY2FsICovDQotICAvKiAgICAgIHNjYWxpbmcgdmFsdWUsIHJlc3BlY3RpdmVseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfU0laRV9SRVFVRVNUX1RZUEVfQ0VMTCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIFRoZSBgbWF4X2FkdmFuY2Vfd2lkdGgnIGZpZWxkIG9mIEBGVF9GYWNlUmVjIGlzIHVzZWQgdG8gICAgICAgICAgKi8NCi0gIC8qICAgICAgZGV0ZXJtaW5lIHRoZSBob3Jpem9udGFsIHNjYWxpbmcgdmFsdWU7IHRoZSB2ZXJ0aWNhbCBzY2FsaW5nICAgICAqLw0KLSAgLyogICAgICB2YWx1ZSBpcyBkZXRlcm1pbmVkIHRoZSBzYW1lIHdheSBhcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIEBGVF9TSVpFX1JFUVVFU1RfVFlQRV9SRUFMX0RJTSBkb2VzLiAgRmluYWxseSwgYm90aCBzY2FsaW5nICAgICAgKi8NCi0gIC8qICAgICAgdmFsdWVzIGFyZSBzZXQgdG8gdGhlIHNtYWxsZXIgb25lLiAgVGhpcyB0eXBlIGlzIHVzZWZ1bCBpZiB5b3UgICAqLw0KLSAgLyogICAgICB3YW50IHRvIHNwZWNpZnkgdGhlIGZvbnQgc2l6ZSBmb3IsIHNheSwgYSB3aW5kb3cgb2YgYSBnaXZlbiAgICAgICovDQotICAvKiAgICAgIGRpbWVuc2lvbiBhbmQgODB4MjQgY2VsbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfU0laRV9SRVFVRVNUX1RZUEVfU0NBTEVTIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIFNwZWNpZnkgdGhlIHNjYWxpbmcgdmFsdWVzIGRpcmVjdGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGUgYWJvdmUgZGVzY3JpcHRpb25zIG9ubHkgYXBwbHkgdG8gc2NhbGFibGUgZm9ybWF0cy4gIEZvciBiaXRtYXAgKi8NCi0gIC8qICAgIGZvcm1hdHMsIHRoZSBiZWhhdmlvdXIgaXMgdXAgdG8gdGhlIGRyaXZlci4gICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBTZWUgdGhlIG5vdGUgc2VjdGlvbiBvZiBARlRfU2l6ZV9NZXRyaWNzIGlmIHlvdSB3b25kZXIgaG93IHNpemUgICAgKi8NCi0gIC8qICAgIHJlcXVlc3RpbmcgcmVsYXRlcyB0byBzY2FsaW5nIHZhbHVlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICB0eXBlZGVmIGVudW0gIEZUX1NpemVfUmVxdWVzdF9UeXBlXw0KLSAgew0KLSAgICBGVF9TSVpFX1JFUVVFU1RfVFlQRV9OT01JTkFMLA0KLSAgICBGVF9TSVpFX1JFUVVFU1RfVFlQRV9SRUFMX0RJTSwNCi0gICAgRlRfU0laRV9SRVFVRVNUX1RZUEVfQkJPWCwNCi0gICAgRlRfU0laRV9SRVFVRVNUX1RZUEVfQ0VMTCwNCi0gICAgRlRfU0laRV9SRVFVRVNUX1RZUEVfU0NBTEVTLA0KLQ0KLSAgICBGVF9TSVpFX1JFUVVFU1RfVFlQRV9NQVgNCi0NCi0gIH0gRlRfU2l6ZV9SZXF1ZXN0X1R5cGU7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9TaXplX1JlcXVlc3RSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIGEgc2l6ZSByZXF1ZXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICB0eXBlICAgICAgICAgICA6OiBTZWUgQEZUX1NpemVfUmVxdWVzdF9UeXBlLiAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgd2lkdGggICAgICAgICAgOjogVGhlIGRlc2lyZWQgd2lkdGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGhlaWdodCAgICAgICAgIDo6IFRoZSBkZXNpcmVkIGhlaWdodC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBob3JpUmVzb2x1dGlvbiA6OiBUaGUgaG9yaXpvbnRhbCByZXNvbHV0aW9uLiAgSWYgc2V0IHRvIHplcm8sICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgIGB3aWR0aCcgaXMgdHJlYXRlZCBhcyBhIDI2LjYgZnJhY3Rpb25hbCBwaXhlbCAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIHZlcnRSZXNvbHV0aW9uIDo6IFRoZSB2ZXJ0aWNhbCByZXNvbHV0aW9uLiAgSWYgc2V0IHRvIHplcm8sICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgYGhlaWdodCcgaXMgdHJlYXRlZCBhcyBhIDI2LjYgZnJhY3Rpb25hbCBwaXhlbCAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBJZiBgd2lkdGgnIGlzIHplcm8sIHRoZW4gdGhlIGhvcml6b250YWwgc2NhbGluZyB2YWx1ZSBpcyBzZXQgZXF1YWwgKi8NCi0gIC8qICAgIHRvIHRoZSB2ZXJ0aWNhbCBzY2FsaW5nIHZhbHVlLCBhbmQgdmljZSB2ZXJzYS4gICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICB0eXBlZGVmIHN0cnVjdCAgRlRfU2l6ZV9SZXF1ZXN0UmVjXw0KLSAgew0KLSAgICBGVF9TaXplX1JlcXVlc3RfVHlwZSAgdHlwZTsNCi0gICAgRlRfTG9uZyAgICAgICAgICAgICAgIHdpZHRoOw0KLSAgICBGVF9Mb25nICAgICAgICAgICAgICAgaGVpZ2h0Ow0KLSAgICBGVF9VSW50ICAgICAgICAgICAgICAgaG9yaVJlc29sdXRpb247DQotICAgIEZUX1VJbnQgICAgICAgICAgICAgICB2ZXJ0UmVzb2x1dGlvbjsNCi0NCi0gIH0gRlRfU2l6ZV9SZXF1ZXN0UmVjOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfU2l6ZV9SZXF1ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgQSBoYW5kbGUgdG8gYSBzaXplIHJlcXVlc3Qgc3RydWN0dXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIHR5cGVkZWYgc3RydWN0IEZUX1NpemVfUmVxdWVzdFJlY18gICpGVF9TaXplX1JlcXVlc3Q7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9SZXF1ZXN0X1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBSZXNpemUgdGhlIHNjYWxlIG9mIHRoZSBhY3RpdmUgQEZUX1NpemUgb2JqZWN0IGluIGEgZmFjZS4gICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmYWNlIDo6IEEgaGFuZGxlIHRvIGEgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICByZXEgIDo6IEEgcG9pbnRlciB0byBhIEBGVF9TaXplX1JlcXVlc3RSZWMuICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBBbHRob3VnaCBkcml2ZXJzIG1heSBzZWxlY3QgdGhlIGJpdG1hcCBzdHJpa2UgbWF0Y2hpbmcgdGhlICAgICAgICAgKi8NCi0gIC8qICAgIHJlcXVlc3QsIHlvdSBzaG91bGQgbm90IHJlbHkgb24gdGhpcyBpZiB5b3UgaW50ZW5kIHRvIHNlbGVjdCBhICAgICAqLw0KLSAgLyogICAgcGFydGljdWxhciBiaXRtYXAgc3RyaWtlLiAgVXNlIEBGVF9TZWxlY3RfU2l6ZSBpbnN0ZWFkIGluIHRoYXQgICAgICovDQotICAvKiAgICBjYXNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVGhlIHJlbGF0aW9uIGJldHdlZW4gdGhlIHJlcXVlc3RlZCBzaXplIGFuZCB0aGUgcmVzdWx0aW5nIGdseXBoICAgICovDQotICAvKiAgICBzaXplIGlzIGRlcGVuZGVudCBlbnRpcmVseSBvbiBob3cgdGhlIHNpemUgaXMgZGVmaW5lZCBpbiB0aGUgICAgICAgKi8NCi0gIC8qICAgIHNvdXJjZSBmYWNlLiAgVGhlIGZvbnQgZGVzaWduZXIgY2hvb3NlcyB0aGUgZmluYWwgc2l6ZSBvZiBlYWNoICAgICAqLw0KLSAgLyogICAgZ2x5cGggcmVsYXRpdmUgdG8gdGhpcyBzaXplLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gICAgICAgICovDQotICAvKiAgICBgaHR0cDovL3d3dy5mcmVldHlwZS5vcmcvZnJlZXR5cGUyL2RvY3MvZ2x5cGhzL2dseXBocy0yLmh0bWwnICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgRlRfRVhQT1JUKCBGVF9FcnJvciApDQotICBGVF9SZXF1ZXN0X1NpemUoIEZUX0ZhY2UgICAgICAgICAgZmFjZSwNCi0gICAgICAgICAgICAgICAgICAgRlRfU2l6ZV9SZXF1ZXN0ICByZXEgKTsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX1NldF9DaGFyX1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gY2FsbHMgQEZUX1JlcXVlc3RfU2l6ZSB0byByZXF1ZXN0IHRoZSBub21pbmFsIHNpemUgICAqLw0KLSAgLyogICAgKGluIHBvaW50cykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZmFjZSAgICAgICAgICAgIDo6IEEgaGFuZGxlIHRvIGEgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgY2hhcl93aWR0aCAgICAgIDo6IFRoZSBub21pbmFsIHdpZHRoLCBpbiAyNi42IGZyYWN0aW9uYWwgcG9pbnRzLiAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGNoYXJfaGVpZ2h0ICAgICA6OiBUaGUgbm9taW5hbCBoZWlnaHQsIGluIDI2LjYgZnJhY3Rpb25hbCBwb2ludHMuICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBob3J6X3Jlc29sdXRpb24gOjogVGhlIGhvcml6b250YWwgcmVzb2x1dGlvbiBpbiBkcGkuICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgdmVydF9yZXNvbHV0aW9uIDo6IFRoZSB2ZXJ0aWNhbCByZXNvbHV0aW9uIGluIGRwaS4gICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgSWYgZWl0aGVyIHRoZSBjaGFyYWN0ZXIgd2lkdGggb3IgaGVpZ2h0IGlzIHplcm8sIGl0IGlzIHNldCBlcXVhbCAgICovDQotICAvKiAgICB0byB0aGUgb3RoZXIgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgSWYgZWl0aGVyIHRoZSBob3Jpem9udGFsIG9yIHZlcnRpY2FsIHJlc29sdXRpb24gaXMgemVybywgaXQgaXMgc2V0ICovDQotICAvKiAgICBlcXVhbCB0byB0aGUgb3RoZXIgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgQSBjaGFyYWN0ZXIgd2lkdGggb3IgaGVpZ2h0IHNtYWxsZXIgdGhhbiAxcHQgaXMgc2V0IHRvIDFwdDsgaWYgICAgICovDQotICAvKiAgICBib3RoIHJlc29sdXRpb24gdmFsdWVzIGFyZSB6ZXJvLCB0aGV5IGFyZSBzZXQgdG8gNzJkcGkuICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRG9uJ3QgdXNlIHRoaXMgZnVuY3Rpb24gaWYgeW91IGFyZSB1c2luZyB0aGUgRnJlZVR5cGUgY2FjaGUgQVBJLiAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIEZUX0VYUE9SVCggRlRfRXJyb3IgKQ0KLSAgRlRfU2V0X0NoYXJfU2l6ZSggRlRfRmFjZSAgICAgZmFjZSwNCi0gICAgICAgICAgICAgICAgICAgIEZUX0YyNkRvdDYgIGNoYXJfd2lkdGgsDQotICAgICAgICAgICAgICAgICAgICBGVF9GMjZEb3Q2ICBjaGFyX2hlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGhvcnpfcmVzb2x1dGlvbiwNCi0gICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIHZlcnRfcmVzb2x1dGlvbiApOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfU2V0X1BpeGVsX1NpemVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVGhpcyBmdW5jdGlvbiBjYWxscyBARlRfUmVxdWVzdF9TaXplIHRvIHJlcXVlc3QgdGhlIG5vbWluYWwgc2l6ZSAgICovDQotICAvKiAgICAoaW4gcGl4ZWxzKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmYWNlICAgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBwaXhlbF93aWR0aCAgOjogVGhlIG5vbWluYWwgd2lkdGgsIGluIHBpeGVscy4gICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgcGl4ZWxfaGVpZ2h0IDo6IFRoZSBub21pbmFsIGhlaWdodCwgaW4gcGl4ZWxzLiAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgWW91IHNob3VsZCBub3QgcmVseSBvbiB0aGUgcmVzdWx0aW5nIGdseXBocyBtYXRjaGluZywgb3IgYmVpbmcgICAgICovDQotICAvKiAgICBjb25zdHJhaW5lZCwgdG8gdGhpcyBwaXhlbCBzaXplLiAgUmVmZXIgdG8gQEZUX1JlcXVlc3RfU2l6ZSB0byAgICAgKi8NCi0gIC8qICAgIHVuZGVyc3RhbmQgaG93IHJlcXVlc3RlZCBzaXplcyByZWxhdGUgdG8gYWN0dWFsIHNpemVzLiAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICBGVF9FWFBPUlQoIEZUX0Vycm9yICkNCi0gIEZUX1NldF9QaXhlbF9TaXplcyggRlRfRmFjZSAgZmFjZSwNCi0gICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgcGl4ZWxfd2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgIHBpeGVsX2hlaWdodCApOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfTG9hZF9HbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgQSBmdW5jdGlvbiB1c2VkIHRvIGxvYWQgYSBzaW5nbGUgZ2x5cGggaW50byB0aGUgZ2x5cGggc2xvdCBvZiBhICAgICovDQotICAvKiAgICBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmYWNlICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0IHdoZXJlIHRoZSBnbHlwaCAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgIGlzIGxvYWRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGdseXBoX2luZGV4IDo6IFRoZSBpbmRleCBvZiB0aGUgZ2x5cGggaW4gdGhlIGZvbnQgZmlsZS4gIEZvciAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgQ0lELWtleWVkIGZvbnRzIChlaXRoZXIgaW4gUFMgb3IgaW4gQ0ZGIGZvcm1hdCkgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICB0aGlzIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgQ0lEIHZhbHVlLiAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgbG9hZF9mbGFncyAgOjogQSBmbGFnIGluZGljYXRpbmcgd2hhdCB0byBsb2FkIGZvciB0aGlzIGdseXBoLiAgVGhlICovDQotICAvKiAgICAgICAgICAgICAgICAgICBARlRfTE9BRF9YWFggY29uc3RhbnRzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgIGdseXBoIGxvYWRpbmcgcHJvY2VzcyAoZS5nLiwgd2hldGhlciB0aGUgb3V0bGluZSAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIHNjYWxlZCwgd2hldGhlciB0byBsb2FkIGJpdG1hcHMgb3Igbm90LCAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICB3aGV0aGVyIHRvIGhpbnQgdGhlIG91dGxpbmUsIGV0YykuICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGUgbG9hZGVkIGdseXBoIG1heSBiZSB0cmFuc2Zvcm1lZC4gIFNlZSBARlRfU2V0X1RyYW5zZm9ybSBmb3IgICAgKi8NCi0gIC8qICAgIHRoZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGb3Igc3Vic2V0dGVkIENJRC1rZXllZCBmb250cywgYEZUX0Vycl9JbnZhbGlkX0FyZ3VtZW50JyBpcyAgICAgICAgKi8NCi0gIC8qICAgIHJldHVybmVkIGZvciBpbnZhbGlkIENJRCB2YWx1ZXMgKHRoaXMgaXMsIGZvciBDSUQgdmFsdWVzIHdoaWNoICAgICAqLw0KLSAgLyogICAgZG9uJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZ2x5cGggaW4gdGhlIGZvbnQpLiAgU2VlIHRoZSBkaXNjdXNzaW9uICovDQotICAvKiAgICBvZiB0aGUgQEZUX0ZBQ0VfRkxBR19DSURfS0VZRUQgZmxhZyBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgRlRfRVhQT1JUKCBGVF9FcnJvciApDQotICBGVF9Mb2FkX0dseXBoKCBGVF9GYWNlICAgZmFjZSwNCi0gICAgICAgICAgICAgICAgIEZUX1VJbnQgICBnbHlwaF9pbmRleCwNCi0gICAgICAgICAgICAgICAgIEZUX0ludDMyICBsb2FkX2ZsYWdzICk7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9Mb2FkX0NoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBBIGZ1bmN0aW9uIHVzZWQgdG8gbG9hZCBhIHNpbmdsZSBnbHlwaCBpbnRvIHRoZSBnbHlwaCBzbG90IG9mIGEgICAgKi8NCi0gIC8qICAgIGZhY2Ugb2JqZWN0LCBhY2NvcmRpbmcgdG8gaXRzIGNoYXJhY3RlciBjb2RlLiAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGZhY2UgICAgICAgIDo6IEEgaGFuZGxlIHRvIGEgdGFyZ2V0IGZhY2Ugb2JqZWN0IHdoZXJlIHRoZSBnbHlwaCAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgaXMgbG9hZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgY2hhcl9jb2RlICAgOjogVGhlIGdseXBoJ3MgY2hhcmFjdGVyIGNvZGUsIGFjY29yZGluZyB0byB0aGUgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICBjdXJyZW50IGNoYXJtYXAgdXNlZCBpbiB0aGUgZmFjZS4gICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgbG9hZF9mbGFncyAgOjogQSBmbGFnIGluZGljYXRpbmcgd2hhdCB0byBsb2FkIGZvciB0aGlzIGdseXBoLiAgVGhlICovDQotICAvKiAgICAgICAgICAgICAgICAgICBARlRfTE9BRF9YWFggY29uc3RhbnRzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgIGdseXBoIGxvYWRpbmcgcHJvY2VzcyAoZS5nLiwgd2hldGhlciB0aGUgb3V0bGluZSAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIHNjYWxlZCwgd2hldGhlciB0byBsb2FkIGJpdG1hcHMgb3Igbm90LCAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICB3aGV0aGVyIHRvIGhpbnQgdGhlIG91dGxpbmUsIGV0YykuICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGlzIGZ1bmN0aW9uIHNpbXBseSBjYWxscyBARlRfR2V0X0NoYXJfSW5kZXggYW5kIEBGVF9Mb2FkX0dseXBoLiAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgRlRfRVhQT1JUKCBGVF9FcnJvciApDQotICBGVF9Mb2FkX0NoYXIoIEZUX0ZhY2UgICBmYWNlLA0KLSAgICAgICAgICAgICAgICBGVF9VTG9uZyAgY2hhcl9jb2RlLA0KLSAgICAgICAgICAgICAgICBGVF9JbnQzMiAgbG9hZF9mbGFncyApOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gICAqDQotICAgKiBAZW51bToNCi0gICAqICAgRlRfTE9BRF9YWFgNCi0gICAqDQotICAgKiBAZGVzY3JpcHRpb246DQotICAgKiAgIEEgbGlzdCBvZiBiaXQtZmllbGQgY29uc3RhbnRzIHVzZWQgd2l0aCBARlRfTG9hZF9HbHlwaCB0byBpbmRpY2F0ZQ0KLSAgICogICB3aGF0IGtpbmQgb2Ygb3BlcmF0aW9ucyB0byBwZXJmb3JtIGR1cmluZyBnbHlwaCBsb2FkaW5nLg0KLSAgICoNCi0gICAqIEB2YWx1ZXM6DQotICAgKiAgIEZUX0xPQURfREVGQVVMVCA6Og0KLSAgICogICAgIENvcnJlc3BvbmRpbmcgdG9+MCwgdGhpcyB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBkZWZhdWx0IGdseXBoIGxvYWQNCi0gICAqICAgICBvcGVyYXRpb24uICBJbiB0aGlzIGNhc2UsIHRoZSBmb2xsb3dpbmcgaGFwcGVuczoNCi0gICAqDQotICAgKiAgICAgMS4gRnJlZVR5cGUgbG9va3MgZm9yIGEgYml0bWFwIGZvciB0aGUgZ2x5cGggY29ycmVzcG9uZGluZyB0byB0aGUNCi0gICAqICAgICAgICBmYWNlJ3MgY3VycmVudCBzaXplLiAgSWYgb25lIGlzIGZvdW5kLCB0aGUgZnVuY3Rpb24gcmV0dXJucy4NCi0gICAqICAgICAgICBUaGUgYml0bWFwIGRhdGEgY2FuIGJlIGFjY2Vzc2VkIGZyb20gdGhlIGdseXBoIHNsb3QgKHNlZSBub3RlDQotICAgKiAgICAgICAgYmVsb3cpLg0KLSAgICoNCi0gICAqICAgICAyLiBJZiBubyBlbWJlZGRlZCBiaXRtYXAgaXMgc2VhcmNoZWQgb3IgZm91bmQsIEZyZWVUeXBlIGxvb2tzIGZvciBhDQotICAgKiAgICAgICAgc2NhbGFibGUgb3V0bGluZS4gIElmIG9uZSBpcyBmb3VuZCwgaXQgaXMgbG9hZGVkIGZyb20gdGhlIGZvbnQNCi0gICAqICAgICAgICBmaWxlLCBzY2FsZWQgdG8gZGV2aWNlIHBpeGVscywgdGhlbiBgaGludGVkJyB0byB0aGUgcGl4ZWwgZ3JpZA0KLSAgICogICAgICAgIGluIG9yZGVyIHRvIG9wdGltaXplIGl0LiAgVGhlIG91dGxpbmUgZGF0YSBjYW4gYmUgYWNjZXNzZWQgZnJvbQ0KLSAgICogICAgICAgIHRoZSBnbHlwaCBzbG90IChzZWUgbm90ZSBiZWxvdykuDQotICAgKg0KLSAgICogICAgIE5vdGUgdGhhdCBieSBkZWZhdWx0LCB0aGUgZ2x5cGggbG9hZGVyIGRvZXNuJ3QgcmVuZGVyIG91dGxpbmVzIGludG8NCi0gICAqICAgICBiaXRtYXBzLiAgVGhlIGZvbGxvd2luZyBmbGFncyBhcmUgdXNlZCB0byBtb2RpZnkgdGhpcyBkZWZhdWx0DQotICAgKiAgICAgYmVoYXZpb3VyIHRvIG1vcmUgc3BlY2lmaWMgYW5kIHVzZWZ1bCBjYXNlcy4NCi0gICAqDQotICAgKiAgIEZUX0xPQURfTk9fU0NBTEUgOjoNCi0gICAqICAgICBEb24ndCBzY2FsZSB0aGUgbG9hZGVkIG91dGxpbmUgZ2x5cGggYnV0IGtlZXAgaXQgaW4gZm9udCB1bml0cy4NCi0gICAqDQotICAgKiAgICAgVGhpcyBmbGFnIGltcGxpZXMgQEZUX0xPQURfTk9fSElOVElORyBhbmQgQEZUX0xPQURfTk9fQklUTUFQLCBhbmQNCi0gICAqICAgICB1bnNldHMgQEZUX0xPQURfUkVOREVSLg0KLSAgICoNCi0gICAqICAgICBJZiB0aGUgZm9udCBpcyBgdHJpY2t5JyAoc2VlIEBGVF9GQUNFX0ZMQUdfVFJJQ0tZIGZvciBtb3JlKSwgdXNpbmcNCi0gICAqICAgICBGVF9MT0FEX05PX1NDQUxFIHVzdWFsbHkgeWllbGRzIG1lYW5pbmdsZXNzIG91dGxpbmVzIGJlY2F1c2UgdGhlDQotICAgKiAgICAgc3ViZ2x5cGhzIG11c3QgYmUgc2NhbGVkIGFuZCBwb3NpdGlvbmVkIHdpdGggaGludGluZyBpbnN0cnVjdGlvbnMuDQotICAgKiAgICAgVGhpcyBjYW4gYmUgc29sdmVkIGJ5IGxvYWRpbmcgdGhlIGZvbnQgd2l0aG91dCBGVF9MT0FEX05PX1NDQUxFIGFuZA0KLSAgICogICAgIHNldHRpbmcgdGhlIGNoYXJhY3RlciBzaXplIHRvIGBmb250LT51bml0c19wZXJfRU0nLg0KLSAgICoNCi0gICAqICAgRlRfTE9BRF9OT19ISU5USU5HIDo6DQotICAgKiAgICAgRGlzYWJsZSBoaW50aW5nLiAgVGhpcyBnZW5lcmFsbHkgZ2VuZXJhdGVzIGBibHVycmllcicgYml0bWFwIGdseXBocw0KLSAgICogICAgIHdoZW4gdGhlIGdseXBoIGFyZSByZW5kZXJlZCBpbiBhbnkgb2YgdGhlIGFudGktYWxpYXNlZCBtb2Rlcy4gIFNlZQ0KLSAgICogICAgIGFsc28gdGhlIG5vdGUgYmVsb3cuDQotICAgKg0KLSAgICogICAgIFRoaXMgZmxhZyBpcyBpbXBsaWVkIGJ5IEBGVF9MT0FEX05PX1NDQUxFLg0KLSAgICoNCi0gICAqICAgRlRfTE9BRF9SRU5ERVIgOjoNCi0gICAqICAgICBDYWxsIEBGVF9SZW5kZXJfR2x5cGggYWZ0ZXIgdGhlIGdseXBoIGlzIGxvYWRlZC4gIEJ5IGRlZmF1bHQsIHRoZQ0KLSAgICogICAgIGdseXBoIGlzIHJlbmRlcmVkIGluIEBGVF9SRU5ERVJfTU9ERV9OT1JNQUwgbW9kZS4gIFRoaXMgY2FuIGJlDQotICAgKiAgICAgb3ZlcnJpZGRlbiBieSBARlRfTE9BRF9UQVJHRVRfWFhYIG9yIEBGVF9MT0FEX01PTk9DSFJPTUUuDQotICAgKg0KLSAgICogICAgIFRoaXMgZmxhZyBpcyB1bnNldCBieSBARlRfTE9BRF9OT19TQ0FMRS4NCi0gICAqDQotICAgKiAgIEZUX0xPQURfTk9fQklUTUFQIDo6DQotICAgKiAgICAgSWdub3JlIGJpdG1hcCBzdHJpa2VzIHdoZW4gbG9hZGluZy4gIEJpdG1hcC1vbmx5IGZvbnRzIGlnbm9yZSB0aGlzDQotICAgKiAgICAgZmxhZy4NCi0gICAqDQotICAgKiAgICAgQEZUX0xPQURfTk9fU0NBTEUgYWx3YXlzIHNldHMgdGhpcyBmbGFnLg0KLSAgICoNCi0gICAqICAgRlRfTE9BRF9WRVJUSUNBTF9MQVlPVVQgOjoNCi0gICAqICAgICBMb2FkIHRoZSBnbHlwaCBmb3IgdmVydGljYWwgdGV4dCBsYXlvdXQuICBJbiBwYXJ0aWN1bGFyLCB0aGUNCi0gICAqICAgICBgYWR2YW5jZScgdmFsdWUgaW4gdGhlIEBGVF9HbHlwaFNsb3RSZWMgc3RydWN0dXJlIGlzIHNldCB0byB0aGUNCi0gICAqICAgICBgdmVydEFkdmFuY2UnIHZhbHVlIG9mIHRoZSBgbWV0cmljcycgZmllbGQuDQotICAgKg0KLSAgICogICAgIEluIGNhc2UgQEZUX0hBU19WRVJUSUNBTCBkb2Vzbid0IHJldHVybiB0cnVlLCB5b3Ugc2hvdWxkbid0IHVzZQ0KLSAgICogICAgIHRoaXMgZmxhZyBjdXJyZW50bHkuICBSZWFzb24gaXMgdGhhdCBpbiB0aGlzIGNhc2UgdmVydGljYWwgbWV0cmljcw0KLSAgICogICAgIGdldCBzeW50aGVzaXplZCwgYW5kIHRob3NlIHZhbHVlcyBhcmUgbm90IGFsd2F5cyBjb25zaXN0ZW50IGFjcm9zcw0KLSAgICogICAgIHZhcmlvdXMgZm9udCBmb3JtYXRzLg0KLSAgICoNCi0gICAqICAgRlRfTE9BRF9GT1JDRV9BVVRPSElOVCA6Og0KLSAgICogICAgIEluZGljYXRlcyB0aGF0IHRoZSBhdXRvLWhpbnRlciBpcyBwcmVmZXJyZWQgb3ZlciB0aGUgZm9udCdzIG5hdGl2ZQ0KLSAgICogICAgIGhpbnRlci4gIFNlZSBhbHNvIHRoZSBub3RlIGJlbG93Lg0KLSAgICoNCi0gICAqICAgRlRfTE9BRF9DUk9QX0JJVE1BUCA6Og0KLSAgICogICAgIEluZGljYXRlcyB0aGF0IHRoZSBmb250IGRyaXZlciBzaG91bGQgY3JvcCB0aGUgbG9hZGVkIGJpdG1hcCBnbHlwaA0KLSAgICogICAgIChpLmUuLCByZW1vdmUgYWxsIHNwYWNlIGFyb3VuZCBpdHMgYmxhY2sgYml0cykuICBOb3QgYWxsIGRyaXZlcnMNCi0gICAqICAgICBpbXBsZW1lbnQgdGhpcy4NCi0gICAqDQotICAgKiAgIEZUX0xPQURfUEVEQU5USUMgOjoNCi0gICAqICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgZm9udCBkcml2ZXIgc2hvdWxkIHBlcmZvcm0gcGVkYW50aWMgdmVyaWZpY2F0aW9ucw0KLSAgICogICAgIGR1cmluZyBnbHlwaCBsb2FkaW5nLiAgVGhpcyBpcyBtb3N0bHkgdXNlZCB0byBkZXRlY3QgYnJva2VuIGdseXBocw0KLSAgICogICAgIGluIGZvbnRzLiAgQnkgZGVmYXVsdCwgRnJlZVR5cGUgdHJpZXMgdG8gaGFuZGxlIGJyb2tlbiBmb250cyBhbHNvLg0KLSAgICoNCi0gICAqICAgICBJbiBwYXJ0aWN1bGFyLCBlcnJvcnMgZnJvbSB0aGUgVHJ1ZVR5cGUgYnl0ZWNvZGUgZW5naW5lIGFyZSBub3QNCi0gICAqICAgICBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIGlmIHRoaXMgZmxhZyBpcyBub3Qgc2V0OyB0aGlzIG1pZ2h0DQotICAgKiAgICAgcmVzdWx0IGluIHBhcnRpYWxseSBoaW50ZWQgb3IgZGlzdG9ydGVkIGdseXBocyBpbiBjYXNlIGEgZ2x5cGgncw0KLSAgICogICAgIGJ5dGVjb2RlIGlzIGJ1Z2d5Lg0KLSAgICoNCi0gICAqICAgRlRfTE9BRF9JR05PUkVfR0xPQkFMX0FEVkFOQ0VfV0lEVEggOjoNCi0gICAqICAgICBJZ25vcmVkLiAgRGVwcmVjYXRlZC4NCi0gICAqDQotICAgKiAgIEZUX0xPQURfTk9fUkVDVVJTRSA6Og0KLSAgICogICAgIFRoaXMgZmxhZyBpcyBvbmx5IHVzZWQgaW50ZXJuYWxseS4gIEl0IG1lcmVseSBpbmRpY2F0ZXMgdGhhdCB0aGUNCi0gICAqICAgICBmb250IGRyaXZlciBzaG91bGQgbm90IGxvYWQgY29tcG9zaXRlIGdseXBocyByZWN1cnNpdmVseS4gIEluc3RlYWQsDQotICAgKiAgICAgaXQgc2hvdWxkIHNldCB0aGUgYG51bV9zdWJnbHlwaCcgYW5kIGBzdWJnbHlwaHMnIHZhbHVlcyBvZiB0aGUNCi0gICAqICAgICBnbHlwaCBzbG90IGFjY29yZGluZ2x5LCBhbmQgc2V0IGBnbHlwaC0+Zm9ybWF0JyB0bw0KLSAgICogICAgIEBGVF9HTFlQSF9GT1JNQVRfQ09NUE9TSVRFLg0KLSAgICoNCi0gICAqICAgICBUaGUgZGVzY3JpcHRpb24gb2Ygc3ViLWdseXBocyBpcyBub3QgYXZhaWxhYmxlIHRvIGNsaWVudA0KLSAgICogICAgIGFwcGxpY2F0aW9ucyBmb3Igbm93Lg0KLSAgICoNCi0gICAqICAgICBUaGlzIGZsYWcgaW1wbGllcyBARlRfTE9BRF9OT19TQ0FMRSBhbmQgQEZUX0xPQURfSUdOT1JFX1RSQU5TRk9STS4NCi0gICAqDQotICAgKiAgIEZUX0xPQURfSUdOT1JFX1RSQU5TRk9STSA6Og0KLSAgICogICAgIEluZGljYXRlcyB0aGF0IHRoZSB0cmFuc2Zvcm0gbWF0cml4IHNldCBieSBARlRfU2V0X1RyYW5zZm9ybSBzaG91bGQNCi0gICAqICAgICBiZSBpZ25vcmVkLg0KLSAgICoNCi0gICAqICAgRlRfTE9BRF9NT05PQ0hST01FIDo6DQotICAgKiAgICAgVGhpcyBmbGFnIGlzIHVzZWQgd2l0aCBARlRfTE9BRF9SRU5ERVIgdG8gaW5kaWNhdGUgdGhhdCB5b3Ugd2FudCB0bw0KLSAgICogICAgIHJlbmRlciBhbiBvdXRsaW5lIGdseXBoIHRvIGEgMS1iaXQgbW9ub2Nocm9tZSBiaXRtYXAgZ2x5cGgsIHdpdGgNCi0gICAqICAgICA4fnBpeGVscyBwYWNrZWQgaW50byBlYWNoIGJ5dGUgb2YgdGhlIGJpdG1hcCBkYXRhLg0KLSAgICoNCi0gICAqICAgICBOb3RlIHRoYXQgdGhpcyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBoaW50aW5nIGFsZ29yaXRobSB1c2VkLiAgWW91DQotICAgKiAgICAgc2hvdWxkIHJhdGhlciB1c2UgQEZUX0xPQURfVEFSR0VUX01PTk8gc28gdGhhdCB0aGUNCi0gICAqICAgICBtb25vY2hyb21lLW9wdGltaXplZCBoaW50aW5nIGFsZ29yaXRobSBpcyB1c2VkLg0KLSAgICoNCi0gICAqICAgRlRfTE9BRF9MSU5FQVJfREVTSUdOIDo6DQotICAgKiAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIGBsaW5lYXJIb3JpQWR2YW5jZScgYW5kIGBsaW5lYXJWZXJ0QWR2YW5jZScNCi0gICAqICAgICBmaWVsZHMgb2YgQEZUX0dseXBoU2xvdFJlYyBzaG91bGQgYmUga2VwdCBpbiBmb250IHVuaXRzLiAgU2VlDQotICAgKiAgICAgQEZUX0dseXBoU2xvdFJlYyBmb3IgZGV0YWlscy4NCi0gICAqDQotICAgKiAgIEZUX0xPQURfTk9fQVVUT0hJTlQgOjoNCi0gICAqICAgICBEaXNhYmxlIGF1dG8taGludGVyLiAgU2VlIGFsc28gdGhlIG5vdGUgYmVsb3cuDQotICAgKg0KLSAgICogICBGVF9MT0FEX0NPTE9SIDo6DQotICAgKiAgICAgVGhpcyBmbGFnIGlzIHVzZWQgdG8gcmVxdWVzdCBsb2FkaW5nIG9mIGNvbG9yIGVtYmVkZGVkLWJpdG1hcA0KLSAgICogICAgIGltYWdlcy4gIFRoZSByZXN1bHRpbmcgY29sb3IgYml0bWFwcywgaWYgYXZhaWxhYmxlLCB3aWxsIGhhdmUgdGhlDQotICAgKiAgICAgQEZUX1BJWEVMX01PREVfQkdSQSBmb3JtYXQuICBXaGVuIHRoZSBmbGFnIGlzIG5vdCB1c2VkIGFuZCBjb2xvcg0KLSAgICogICAgIGJpdG1hcHMgYXJlIGZvdW5kLCB0aGV5IHdpbGwgYmUgY29udmVydGVkIHRvIDI1Ni1sZXZlbCBncmF5DQotICAgKiAgICAgYml0bWFwcyB0cmFuc3BhcmVudGx5LiAgVGhvc2UgYml0bWFwcyB3aWxsIGJlIGluIHRoZQ0KLSAgICogICAgIEBGVF9QSVhFTF9NT0RFX0dSQVkgZm9ybWF0Lg0KLSAgICoNCi0gICAqIEBub3RlOg0KLSAgICogICBCeSBkZWZhdWx0LCBoaW50aW5nIGlzIGVuYWJsZWQgYW5kIHRoZSBmb250J3MgbmF0aXZlIGhpbnRlciAoc2VlDQotICAgKiAgIEBGVF9GQUNFX0ZMQUdfSElOVEVSKSBpcyBwcmVmZXJyZWQgb3ZlciB0aGUgYXV0by1oaW50ZXIuICBZb3UgY2FuDQotICAgKiAgIGRpc2FibGUgaGludGluZyBieSBzZXR0aW5nIEBGVF9MT0FEX05PX0hJTlRJTkcgb3IgY2hhbmdlIHRoZQ0KLSAgICogICBwcmVjZWRlbmNlIGJ5IHNldHRpbmcgQEZUX0xPQURfRk9SQ0VfQVVUT0hJTlQuICBZb3UgY2FuIGFsc28gc2V0DQotICAgKiAgIEBGVF9MT0FEX05PX0FVVE9ISU5UIGluIGNhc2UgeW91IGRvbid0IHdhbnQgdGhlIGF1dG8taGludGVyIHRvIGJlDQotICAgKiAgIHVzZWQgYXQgYWxsLg0KLSAgICoNCi0gICAqICAgU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBARlRfRkFDRV9GTEFHX1RSSUNLWSBmb3IgYSBzcGVjaWFsIGV4Y2VwdGlvbg0KLSAgICogICAoYWZmZWN0aW5nIG9ubHkgYSBoYW5kZnVsIG9mIEFzaWFuIGZvbnRzKS4NCi0gICAqDQotICAgKiAgIEJlc2lkZXMgZGVjaWRpbmcgd2hpY2ggaGludGVyIHRvIHVzZSwgeW91IGNhbiBhbHNvIGRlY2lkZSB3aGljaA0KLSAgICogICBoaW50aW5nIGFsZ29yaXRobSB0byB1c2UuICBTZWUgQEZUX0xPQURfVEFSR0VUX1hYWCBmb3IgZGV0YWlscy4NCi0gICAqDQotICAgKiAgIE5vdGUgdGhhdCB0aGUgYXV0by1oaW50ZXIgbmVlZHMgYSB2YWxpZCBVbmljb2RlIGNtYXAgKGVpdGhlciBhIG5hdGl2ZQ0KLSAgICogICBvbmUgb3Igc3ludGhlc2l6ZWQgYnkgRnJlZVR5cGUpIGZvciBwcm9kdWNpbmcgY29ycmVjdCByZXN1bHRzLiAgSWYgYQ0KLSAgICogICBmb250IHByb3ZpZGVzIGFuIGluY29ycmVjdCBtYXBwaW5nIChmb3IgZXhhbXBsZSwgYXNzaWduaW5nIHRoZQ0KLSAgICogICBjaGFyYWN0ZXIgY29kZSBVKzAwNUEsIExBVElOIENBUElUQUwgTEVUVEVSIFosIHRvIGEgZ2x5cGggZGVwaWN0aW5nIGENCi0gICAqICAgbWF0aGVtYXRpY2FsIGludGVncmFsIHNpZ24pLCB0aGUgYXV0by1oaW50ZXIgbWlnaHQgcHJvZHVjZSB1c2VsZXNzDQotICAgKiAgIHJlc3VsdHMuDQotICAgKg0KLSAgICovDQotI2RlZmluZSBGVF9MT0FEX0RFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgMHgwDQotI2RlZmluZSBGVF9MT0FEX05PX1NDQUxFICAgICAgICAgICAgICAgICAgICAgKCAxTCA8PCAwICkNCi0jZGVmaW5lIEZUX0xPQURfTk9fSElOVElORyAgICAgICAgICAgICAgICAgICAoIDFMIDw8IDEgKQ0KLSNkZWZpbmUgRlRfTE9BRF9SRU5ERVIgICAgICAgICAgICAgICAgICAgICAgICggMUwgPDwgMiApDQotI2RlZmluZSBGVF9MT0FEX05PX0JJVE1BUCAgICAgICAgICAgICAgICAgICAgKCAxTCA8PCAzICkNCi0jZGVmaW5lIEZUX0xPQURfVkVSVElDQUxfTEFZT1VUICAgICAgICAgICAgICAoIDFMIDw8IDQgKQ0KLSNkZWZpbmUgRlRfTE9BRF9GT1JDRV9BVVRPSElOVCAgICAgICAgICAgICAgICggMUwgPDwgNSApDQotI2RlZmluZSBGVF9MT0FEX0NST1BfQklUTUFQICAgICAgICAgICAgICAgICAgKCAxTCA8PCA2ICkNCi0jZGVmaW5lIEZUX0xPQURfUEVEQU5USUMgICAgICAgICAgICAgICAgICAgICAoIDFMIDw8IDcgKQ0KLSNkZWZpbmUgRlRfTE9BRF9JR05PUkVfR0xPQkFMX0FEVkFOQ0VfV0lEVEggICggMUwgPDwgOSApDQotI2RlZmluZSBGVF9MT0FEX05PX1JFQ1VSU0UgICAgICAgICAgICAgICAgICAgKCAxTCA8PCAxMCApDQotI2RlZmluZSBGVF9MT0FEX0lHTk9SRV9UUkFOU0ZPUk0gICAgICAgICAgICAgKCAxTCA8PCAxMSApDQotI2RlZmluZSBGVF9MT0FEX01PTk9DSFJPTUUgICAgICAgICAgICAgICAgICAgKCAxTCA8PCAxMiApDQotI2RlZmluZSBGVF9MT0FEX0xJTkVBUl9ERVNJR04gICAgICAgICAgICAgICAgKCAxTCA8PCAxMyApDQotI2RlZmluZSBGVF9MT0FEX05PX0FVVE9ISU5UICAgICAgICAgICAgICAgICAgKCAxTCA8PCAxNSApDQotICAvKiBCaXRzIDE2Li4xOSBhcmUgdXNlZCBieSBgRlRfTE9BRF9UQVJHRVRfJyAqLw0KLSNkZWZpbmUgRlRfTE9BRF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAgICggMUwgPDwgMjAgKQ0KLQ0KLSAgLyogKi8NCi0NCi0gIC8qIHVzZWQgaW50ZXJuYWxseSBvbmx5IGJ5IGNlcnRhaW4gZm9udCBkcml2ZXJzISAqLw0KLSNkZWZpbmUgRlRfTE9BRF9BRFZBTkNFX09OTFkgICAgICAgICAgICAgICAgICggMUwgPDwgOCApDQotI2RlZmluZSBGVF9MT0FEX1NCSVRTX09OTFkgICAgICAgICAgICAgICAgICAgKCAxTCA8PCAxNCApDQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gICAqDQotICAgKiBAZW51bToNCi0gICAqICAgRlRfTE9BRF9UQVJHRVRfWFhYDQotICAgKg0KLSAgICogQGRlc2NyaXB0aW9uOg0KLSAgICogICBBIGxpc3Qgb2YgdmFsdWVzIHRoYXQgYXJlIHVzZWQgdG8gc2VsZWN0IGEgc3BlY2lmaWMgaGludGluZyBhbGdvcml0aG0NCi0gICAqICAgdG8gdXNlIGJ5IHRoZSBoaW50ZXIuICBZb3Ugc2hvdWxkIE9SIG9uZSBvZiB0aGVzZSB2YWx1ZXMgdG8geW91cg0KLSAgICogICBgbG9hZF9mbGFncycgd2hlbiBjYWxsaW5nIEBGVF9Mb2FkX0dseXBoLg0KLSAgICoNCi0gICAqICAgTm90ZSB0aGF0IGZvbnQncyBuYXRpdmUgaGludGVycyBtYXkgaWdub3JlIHRoZSBoaW50aW5nIGFsZ29yaXRobSB5b3UNCi0gICAqICAgaGF2ZSBzcGVjaWZpZWQgKGUuZy4sIHRoZSBUcnVlVHlwZSBieXRlY29kZSBpbnRlcnByZXRlcikuICBZb3UgY2FuIHNldA0KLSAgICogICBARlRfTE9BRF9GT1JDRV9BVVRPSElOVCB0byBlbnN1cmUgdGhhdCB0aGUgYXV0by1oaW50ZXIgaXMgdXNlZC4NCi0gICAqDQotICAgKiAgIEFsc28gbm90ZSB0aGF0IEBGVF9MT0FEX1RBUkdFVF9MSUdIVCBpcyBhbiBleGNlcHRpb24sIGluIHRoYXQgaXQNCi0gICAqICAgYWx3YXlzIGltcGxpZXMgQEZUX0xPQURfRk9SQ0VfQVVUT0hJTlQuDQotICAgKg0KLSAgICogQHZhbHVlczoNCi0gICAqICAgRlRfTE9BRF9UQVJHRVRfTk9STUFMIDo6DQotICAgKiAgICAgVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgZGVmYXVsdCBoaW50aW5nIGFsZ29yaXRobSwgb3B0aW1pemVkIGZvcg0KLSAgICogICAgIHN0YW5kYXJkIGdyYXktbGV2ZWwgcmVuZGVyaW5nLiAgRm9yIG1vbm9jaHJvbWUgb3V0cHV0LCB1c2UNCi0gICAqICAgICBARlRfTE9BRF9UQVJHRVRfTU9OTyBpbnN0ZWFkLg0KLSAgICoNCi0gICAqICAgRlRfTE9BRF9UQVJHRVRfTElHSFQgOjoNCi0gICAqICAgICBBIGxpZ2h0ZXIgaGludGluZyBhbGdvcml0aG0gZm9yIG5vbi1tb25vY2hyb21lIG1vZGVzLiAgTWFueQ0KLSAgICogICAgIGdlbmVyYXRlZCBnbHlwaHMgYXJlIG1vcmUgZnV6enkgYnV0IGJldHRlciByZXNlbWJsZSBpdHMgb3JpZ2luYWwNCi0gICAqICAgICBzaGFwZS4gIEEgYml0IGxpa2UgcmVuZGVyaW5nIG9uIE1hYyBPU35YLg0KLSAgICoNCi0gICAqICAgICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGlzIHRhcmdldCBpbXBsaWVzIEBGVF9MT0FEX0ZPUkNFX0FVVE9ISU5ULg0KLSAgICoNCi0gICAqICAgRlRfTE9BRF9UQVJHRVRfTU9OTyA6Og0KLSAgICogICAgIFN0cm9uZyBoaW50aW5nIGFsZ29yaXRobSB0aGF0IHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIG1vbm9jaHJvbWUNCi0gICAqICAgICBvdXRwdXQuICBUaGUgcmVzdWx0IGlzIHByb2JhYmx5IHVucGxlYXNhbnQgaWYgdGhlIGdseXBoIGlzIHJlbmRlcmVkDQotICAgKiAgICAgaW4gbm9uLW1vbm9jaHJvbWUgbW9kZXMuDQotICAgKg0KLSAgICogICBGVF9MT0FEX1RBUkdFVF9MQ0QgOjoNCi0gICAqICAgICBBIHZhcmlhbnQgb2YgQEZUX0xPQURfVEFSR0VUX05PUk1BTCBvcHRpbWl6ZWQgZm9yIGhvcml6b250YWxseQ0KLSAgICogICAgIGRlY2ltYXRlZCBMQ0QgZGlzcGxheXMuDQotICAgKg0KLSAgICogICBGVF9MT0FEX1RBUkdFVF9MQ0RfViA6Og0KLSAgICogICAgIEEgdmFyaWFudCBvZiBARlRfTE9BRF9UQVJHRVRfTk9STUFMIG9wdGltaXplZCBmb3IgdmVydGljYWxseQ0KLSAgICogICAgIGRlY2ltYXRlZCBMQ0QgZGlzcGxheXMuDQotICAgKg0KLSAgICogQG5vdGU6DQotICAgKiAgIFlvdSBzaG91bGQgdXNlIG9ubHkgX29uZV8gb2YgdGhlIEZUX0xPQURfVEFSR0VUX1hYWCB2YWx1ZXMgaW4geW91cg0KLSAgICogICBgbG9hZF9mbGFncycuICBUaGV5IGNhbid0IGJlIE9SZWQuDQotICAgKg0KLSAgICogICBJZiBARlRfTE9BRF9SRU5ERVIgaXMgYWxzbyBzZXQsIHRoZSBnbHlwaCBpcyByZW5kZXJlZCBpbiB0aGUNCi0gICAqICAgY29ycmVzcG9uZGluZyBtb2RlIChpLmUuLCB0aGUgbW9kZSB3aGljaCBtYXRjaGVzIHRoZSB1c2VkIGFsZ29yaXRobQ0KLSAgICogICBiZXN0KS4gIEFuIGV4ZXB0aW9uIGlzIEZUX0xPQURfVEFSR0VUX01PTk8gc2luY2UgaXQgaW1wbGllcw0KLSAgICogICBARlRfTE9BRF9NT05PQ0hST01FLg0KLSAgICoNCi0gICAqICAgWW91IGNhbiB1c2UgYSBoaW50aW5nIGFsZ29yaXRobSB0aGF0IGRvZXNuJ3QgY29ycmVzcG9uZCB0byB0aGUgc2FtZQ0KLSAgICogICByZW5kZXJpbmcgbW9kZS4gIEFzIGFuIGV4YW1wbGUsIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSB0aGUgYGxpZ2h0Jw0KLSAgICogICBoaW50aW5nIGFsZ29yaXRobSBhbmQgaGF2ZSB0aGUgcmVzdWx0cyByZW5kZXJlZCBpbiBob3Jpem9udGFsIExDRA0KLSAgICogICBwaXhlbCBtb2RlLCB3aXRoIGNvZGUgbGlrZQ0KLSAgICoNCi0gICAqICAgICB7DQotICAgKiAgICAgICBGVF9Mb2FkX0dseXBoKCBmYWNlLCBnbHlwaF9pbmRleCwNCi0gICAqICAgICAgICAgICAgICAgICAgICAgIGxvYWRfZmxhZ3MgfCBGVF9MT0FEX1RBUkdFVF9MSUdIVCApOw0KLSAgICoNCi0gICAqICAgICAgIEZUX1JlbmRlcl9HbHlwaCggZmFjZS0+Z2x5cGgsIEZUX1JFTkRFUl9NT0RFX0xDRCApOw0KLSAgICogICAgIH0NCi0gICAqDQotICAgKi8NCi0jZGVmaW5lIEZUX0xPQURfVEFSR0VUXyggeCApICAgKCAoRlRfSW50MzIpKCAoeCkgJiAxNSApIDw8IDE2ICkNCi0NCi0jZGVmaW5lIEZUX0xPQURfVEFSR0VUX05PUk1BTCAgRlRfTE9BRF9UQVJHRVRfKCBGVF9SRU5ERVJfTU9ERV9OT1JNQUwgKQ0KLSNkZWZpbmUgRlRfTE9BRF9UQVJHRVRfTElHSFQgICBGVF9MT0FEX1RBUkdFVF8oIEZUX1JFTkRFUl9NT0RFX0xJR0hUICApDQotI2RlZmluZSBGVF9MT0FEX1RBUkdFVF9NT05PICAgIEZUX0xPQURfVEFSR0VUXyggRlRfUkVOREVSX01PREVfTU9OTyAgICkNCi0jZGVmaW5lIEZUX0xPQURfVEFSR0VUX0xDRCAgICAgRlRfTE9BRF9UQVJHRVRfKCBGVF9SRU5ERVJfTU9ERV9MQ0QgICAgKQ0KLSNkZWZpbmUgRlRfTE9BRF9UQVJHRVRfTENEX1YgICBGVF9MT0FEX1RBUkdFVF8oIEZUX1JFTkRFUl9NT0RFX0xDRF9WICApDQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gICAqDQotICAgKiBAbWFjcm86DQotICAgKiAgIEZUX0xPQURfVEFSR0VUX01PREUNCi0gICAqDQotICAgKiBAZGVzY3JpcHRpb246DQotICAgKiAgIFJldHVybiB0aGUgQEZUX1JlbmRlcl9Nb2RlIGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbg0KLSAgICogICBARlRfTE9BRF9UQVJHRVRfWFhYIHZhbHVlLg0KLSAgICoNCi0gICAqLw0KLSNkZWZpbmUgRlRfTE9BRF9UQVJHRVRfTU9ERSggeCApICAoIChGVF9SZW5kZXJfTW9kZSkoICggKHgpID4+IDE2ICkgJiAxNSApICkNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX1NldF9UcmFuc2Zvcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEEgZnVuY3Rpb24gdXNlZCB0byBzZXQgdGhlIHRyYW5zZm9ybWF0aW9uIHRoYXQgaXMgYXBwbGllZCB0byBnbHlwaCAqLw0KLSAgLyogICAgaW1hZ2VzIHdoZW4gdGhleSBhcmUgbG9hZGVkIGludG8gYSBnbHlwaCBzbG90IHRocm91Z2ggICAgICAgICAgICAgICovDQotICAvKiAgICBARlRfTG9hZF9HbHlwaC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmYWNlICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBtYXRyaXggOjogQSBwb2ludGVyIHRvIHRoZSB0cmFuc2Zvcm1hdGlvbidzIDJ4MiBtYXRyaXguICBVc2V+MCBmb3IgKi8NCi0gIC8qICAgICAgICAgICAgICB0aGUgaWRlbnRpdHkgbWF0cml4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZGVsdGEgIDo6IEEgcG9pbnRlciB0byB0aGUgdHJhbnNsYXRpb24gdmVjdG9yLiAgVXNlfjAgZm9yIHRoZSBudWxsICovDQotICAvKiAgICAgICAgICAgICAgdmVjdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGUgdHJhbnNmb3JtYXRpb24gaXMgb25seSBhcHBsaWVkIHRvIHNjYWxhYmxlIGltYWdlIGZvcm1hdHMgYWZ0ZXIgKi8NCi0gIC8qICAgIHRoZSBnbHlwaCBoYXMgYmVlbiBsb2FkZWQuICBJdCBtZWFucyB0aGF0IGhpbnRpbmcgaXMgdW5hbHRlcmVkIGJ5ICAqLw0KLSAgLyogICAgdGhlIHRyYW5zZm9ybWF0aW9uIGFuZCBpcyBwZXJmb3JtZWQgb24gdGhlIGNoYXJhY3RlciBzaXplIGdpdmVuIGluICovDQotICAvKiAgICB0aGUgbGFzdCBjYWxsIHRvIEBGVF9TZXRfQ2hhcl9TaXplIG9yIEBGVF9TZXRfUGl4ZWxfU2l6ZXMuICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgTm90ZSB0aGF0IHRoaXMgYWxzbyB0cmFuc2Zvcm1zIHRoZSBgZmFjZS5nbHlwaC5hZHZhbmNlJyBmaWVsZCwgYnV0ICovDQotICAvKiAgICAqbm90KiB0aGUgdmFsdWVzIGluIGBmYWNlLmdseXBoLm1ldHJpY3MnLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgRlRfRVhQT1JUKCB2b2lkICkNCi0gIEZUX1NldF9UcmFuc2Zvcm0oIEZUX0ZhY2UgICAgIGZhY2UsDQotICAgICAgICAgICAgICAgICAgICBGVF9NYXRyaXgqICBtYXRyaXgsDQotICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICBkZWx0YSApOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxFbnVtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfUmVuZGVyX01vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgQW4gZW51bWVyYXRpb24gdHlwZSB0aGF0IGxpc3RzIHRoZSByZW5kZXIgbW9kZXMgc3VwcG9ydGVkIGJ5ICAgICAgICovDQotICAvKiAgICBGcmVlVHlwZX4yLiAgRWFjaCBtb2RlIGNvcnJlc3BvbmRzIHRvIGEgc3BlY2lmaWMgdHlwZSBvZiBzY2FubGluZSAgKi8NCi0gIC8qICAgIGNvbnZlcnNpb24gcGVyZm9ybWVkIG9uIHRoZSBvdXRsaW5lLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGb3IgYml0bWFwIGZvbnRzIGFuZCBlbWJlZGRlZCBiaXRtYXBzIHRoZSBgYml0bWFwLT5waXhlbF9tb2RlJyAgICAgKi8NCi0gIC8qICAgIGZpZWxkIGluIHRoZSBARlRfR2x5cGhTbG90UmVjIHN0cnVjdHVyZSBnaXZlcyB0aGUgZm9ybWF0IG9mIHRoZSAgICAqLw0KLSAgLyogICAgcmV0dXJuZWQgYml0bWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEFsbCBtb2RlcyBleGNlcHQgQEZUX1JFTkRFUl9NT0RFX01PTk8gdXNlIDI1NiBsZXZlbHMgb2Ygb3BhY2l0eS4gICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8VmFsdWVzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX1JFTkRFUl9NT0RFX05PUk1BTCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBUaGlzIGlzIHRoZSBkZWZhdWx0IHJlbmRlciBtb2RlOyBpdCBjb3JyZXNwb25kcyB0byA4LWJpdCAgICAgICAgICovDQotICAvKiAgICAgIGFudGktYWxpYXNlZCBiaXRtYXBzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfUkVOREVSX01PREVfTElHSFQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBARlRfUkVOREVSX01PREVfTk9STUFMLiAgSXQgaXMgb25seSAgICAgICAgKi8NCi0gIC8qICAgICAgZGVmaW5lZCBhcyBhIHNlcGFyYXRlIHZhbHVlIGJlY2F1c2UgcmVuZGVyIG1vZGVzIGFyZSBhbHNvIHVzZWQgICAqLw0KLSAgLyogICAgICBpbmRpcmVjdGx5IHRvIGRlZmluZSBoaW50aW5nIGFsZ29yaXRobSBzZWxlY3RvcnMuICBTZWUgICAgICAgICAgICovDQotICAvKiAgICAgIEBGVF9MT0FEX1RBUkdFVF9YWFggZm9yIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfUkVOREVSX01PREVfTU9OTyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIFRoaXMgbW9kZSBjb3JyZXNwb25kcyB0byAxLWJpdCBiaXRtYXBzICh3aXRoIDJ+bGV2ZWxzIG9mICAgICAgICAgKi8NCi0gIC8qICAgICAgb3BhY2l0eSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9SRU5ERVJfTU9ERV9MQ0QgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgVGhpcyBtb2RlIGNvcnJlc3BvbmRzIHRvIGhvcml6b250YWwgUkdCIGFuZCBCR1Igc3ViLXBpeGVsICAgICAgICAqLw0KLSAgLyogICAgICBkaXNwbGF5cyBsaWtlIExDRCBzY3JlZW5zLiAgSXQgcHJvZHVjZXMgOC1iaXQgYml0bWFwcyB0aGF0IGFyZSAgICovDQotICAvKiAgICAgIDN+dGltZXMgdGhlIHdpZHRoIG9mIHRoZSBvcmlnaW5hbCBnbHlwaCBvdXRsaW5lIGluIHBpeGVscywgYW5kICAgKi8NCi0gIC8qICAgICAgd2hpY2ggdXNlIHRoZSBARlRfUElYRUxfTU9ERV9MQ0QgbW9kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9SRU5ERVJfTU9ERV9MQ0RfViA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgVGhpcyBtb2RlIGNvcnJlc3BvbmRzIHRvIHZlcnRpY2FsIFJHQiBhbmQgQkdSIHN1Yi1waXhlbCBkaXNwbGF5cyAqLw0KLSAgLyogICAgICAobGlrZSBQREEgc2NyZWVucywgcm90YXRlZCBMQ0QgZGlzcGxheXMsIGV0Yy4pLiAgSXQgcHJvZHVjZXMgICAgICovDQotICAvKiAgICAgIDgtYml0IGJpdG1hcHMgdGhhdCBhcmUgM350aW1lcyB0aGUgaGVpZ2h0IG9mIHRoZSBvcmlnaW5hbCAgICAgICAgKi8NCi0gIC8qICAgICAgZ2x5cGggb3V0bGluZSBpbiBwaXhlbHMgYW5kIHVzZSB0aGUgQEZUX1BJWEVMX01PREVfTENEX1YgbW9kZS4gICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoZSBMQ0Qtb3B0aW1pemVkIGdseXBoIGJpdG1hcHMgcHJvZHVjZWQgYnkgRlRfUmVuZGVyX0dseXBoIGNhbiBiZSAqLw0KLSAgLyogICAgZmlsdGVyZWQgdG8gcmVkdWNlIGNvbG9yLWZyaW5nZXMgYnkgdXNpbmcgQEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyICovDQotICAvKiAgICAobm90IGFjdGl2ZSBpbiB0aGUgZGVmYXVsdCBidWlsZHMpLiAgSXQgaXMgdXAgdG8gdGhlIGNhbGxlciB0byAgICAgKi8NCi0gIC8qICAgIGVpdGhlciBjYWxsIEBGVF9MaWJyYXJ5X1NldExjZEZpbHRlciAoaWYgYXZhaWxhYmxlKSBvciBkbyB0aGUgICAgICAqLw0KLSAgLyogICAgZmlsdGVyaW5nIGl0c2VsZi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoZSBzZWxlY3RlZCByZW5kZXIgbW9kZSBvbmx5IGFmZmVjdHMgdmVjdG9yIGdseXBocyBvZiBhIGZvbnQuICAgICAqLw0KLSAgLyogICAgRW1iZWRkZWQgYml0bWFwcyBvZnRlbiBoYXZlIGEgZGlmZmVyZW50IHBpeGVsIG1vZGUgbGlrZSAgICAgICAgICAgICovDQotICAvKiAgICBARlRfUElYRUxfTU9ERV9NT05PLiAgWW91IGNhbiB1c2UgQEZUX0JpdG1hcF9Db252ZXJ0IHRvIHRyYW5zZm9ybSAgKi8NCi0gIC8qICAgIHRoZW0gaW50byA4LWJpdCBwaXhtYXBzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICB0eXBlZGVmIGVudW0gIEZUX1JlbmRlcl9Nb2RlXw0KLSAgew0KLSAgICBGVF9SRU5ERVJfTU9ERV9OT1JNQUwgPSAwLA0KLSAgICBGVF9SRU5ERVJfTU9ERV9MSUdIVCwNCi0gICAgRlRfUkVOREVSX01PREVfTU9OTywNCi0gICAgRlRfUkVOREVSX01PREVfTENELA0KLSAgICBGVF9SRU5ERVJfTU9ERV9MQ0RfViwNCi0NCi0gICAgRlRfUkVOREVSX01PREVfTUFYDQotDQotICB9IEZUX1JlbmRlcl9Nb2RlOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxFbnVtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZnRfcmVuZGVyX21vZGVfeHh4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVGhlc2UgY29uc3RhbnRzIGFyZSBkZXByZWNhdGVkLiAgVXNlIHRoZSBjb3JyZXNwb25kaW5nICAgICAgICAgICAgICovDQotICAvKiAgICBARlRfUmVuZGVyX01vZGUgdmFsdWVzIGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFZhbHVlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmdF9yZW5kZXJfbW9kZV9ub3JtYWwgOjogc2VlIEBGVF9SRU5ERVJfTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGZ0X3JlbmRlcl9tb2RlX21vbm8gICA6OiBzZWUgQEZUX1JFTkRFUl9NT0RFX01PTk8gICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotI2RlZmluZSBmdF9yZW5kZXJfbW9kZV9ub3JtYWwgIEZUX1JFTkRFUl9NT0RFX05PUk1BTA0KLSNkZWZpbmUgZnRfcmVuZGVyX21vZGVfbW9ubyAgICBGVF9SRU5ERVJfTU9ERV9NT05PDQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9SZW5kZXJfR2x5cGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBDb252ZXJ0IGEgZ2l2ZW4gZ2x5cGggaW1hZ2UgdG8gYSBiaXRtYXAuICBJdCBkb2VzIHNvIGJ5IGluc3BlY3RpbmcgKi8NCi0gIC8qICAgIHRoZSBnbHlwaCBpbWFnZSBmb3JtYXQsIGZpbmRpbmcgdGhlIHJlbGV2YW50IHJlbmRlcmVyLCBhbmQgICAgICAgICAqLw0KLSAgLyogICAgaW52b2tpbmcgaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgc2xvdCAgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIGdseXBoIHNsb3QgY29udGFpbmluZyB0aGUgaW1hZ2UgdG8gICovDQotICAvKiAgICAgICAgICAgICAgICAgICBjb252ZXJ0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICByZW5kZXJfbW9kZSA6OiBUaGlzIGlzIHRoZSByZW5kZXIgbW9kZSB1c2VkIHRvIHJlbmRlciB0aGUgZ2x5cGggICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgIGltYWdlIGludG8gYSBiaXRtYXAuICBTZWUgQEZUX1JlbmRlcl9Nb2RlIGZvciBhICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIEZUX0VYUE9SVCggRlRfRXJyb3IgKQ0KLSAgRlRfUmVuZGVyX0dseXBoKCBGVF9HbHlwaFNsb3QgICAgc2xvdCwNCi0gICAgICAgICAgICAgICAgICAgRlRfUmVuZGVyX01vZGUgIHJlbmRlcl9tb2RlICk7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEVudW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9LZXJuaW5nX01vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBBbiBlbnVtZXJhdGlvbiB1c2VkIHRvIHNwZWNpZnkgd2hpY2gga2VybmluZyB2YWx1ZXMgdG8gcmV0dXJuIGluICAgKi8NCi0gIC8qICAgIEBGVF9HZXRfS2VybmluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8VmFsdWVzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0tFUk5JTkdfREVGQVVMVCAgOjogUmV0dXJuIHNjYWxlZCBhbmQgZ3JpZC1maXR0ZWQga2VybmluZyAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZXMgKHZhbHVlIGlzfjApLiAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0tFUk5JTkdfVU5GSVRURUQgOjogUmV0dXJuIHNjYWxlZCBidXQgdW4tZ3JpZC1maXR0ZWQga2VybmluZyAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0tFUk5JTkdfVU5TQ0FMRUQgOjogUmV0dXJuIHRoZSBrZXJuaW5nIHZlY3RvciBpbiBvcmlnaW5hbCBmb250ICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIHR5cGVkZWYgZW51bSAgRlRfS2VybmluZ19Nb2RlXw0KLSAgew0KLSAgICBGVF9LRVJOSU5HX0RFRkFVTFQgID0gMCwNCi0gICAgRlRfS0VSTklOR19VTkZJVFRFRCwNCi0gICAgRlRfS0VSTklOR19VTlNDQUxFRA0KLQ0KLSAgfSBGVF9LZXJuaW5nX01vZGU7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPENvbnN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmdF9rZXJuaW5nX2RlZmF1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGlzIGNvbnN0YW50IGlzIGRlcHJlY2F0ZWQuICBQbGVhc2UgdXNlIEBGVF9LRVJOSU5HX0RFRkFVTFQgICAgICAgKi8NCi0gIC8qICAgIGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotI2RlZmluZSBmdF9rZXJuaW5nX2RlZmF1bHQgICBGVF9LRVJOSU5HX0RFRkFVTFQNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8Q29uc3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGZ0X2tlcm5pbmdfdW5maXR0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoaXMgY29uc3RhbnQgaXMgZGVwcmVjYXRlZC4gIFBsZWFzZSB1c2UgQEZUX0tFUk5JTkdfVU5GSVRURUQgICAgICAqLw0KLSAgLyogICAgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0jZGVmaW5lIGZ0X2tlcm5pbmdfdW5maXR0ZWQgIEZUX0tFUk5JTkdfVU5GSVRURUQNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8Q29uc3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGZ0X2tlcm5pbmdfdW5zY2FsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoaXMgY29uc3RhbnQgaXMgZGVwcmVjYXRlZC4gIFBsZWFzZSB1c2UgQEZUX0tFUk5JTkdfVU5TQ0FMRUQgICAgICAqLw0KLSAgLyogICAgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0jZGVmaW5lIGZ0X2tlcm5pbmdfdW5zY2FsZWQgIEZUX0tFUk5JTkdfVU5TQ0FMRUQNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0dldF9LZXJuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFJldHVybiB0aGUga2VybmluZyB2ZWN0b3IgYmV0d2VlbiB0d28gZ2x5cGhzIG9mIGEgc2FtZSBmYWNlLiAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGZhY2UgICAgICAgIDo6IEEgaGFuZGxlIHRvIGEgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBsZWZ0X2dseXBoICA6OiBUaGUgaW5kZXggb2YgdGhlIGxlZnQgZ2x5cGggaW4gdGhlIGtlcm4gcGFpci4gICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgcmlnaHRfZ2x5cGggOjogVGhlIGluZGV4IG9mIHRoZSByaWdodCBnbHlwaCBpbiB0aGUga2VybiBwYWlyLiAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGtlcm5fbW9kZSAgIDo6IFNlZSBARlRfS2VybmluZ19Nb2RlIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgc2NhbGUgYW5kIGRpbWVuc2lvbiBvZiB0aGUgcmV0dXJuZWQgICovDQotICAvKiAgICAgICAgICAgICAgICAgICBrZXJuaW5nIHZlY3Rvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBha2VybmluZyAgICA6OiBUaGUga2VybmluZyB2ZWN0b3IuICBUaGlzIGlzIGVpdGhlciBpbiBmb250IHVuaXRzICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgIG9yIGluIHBpeGVscyAoMjYuNiBmb3JtYXQpIGZvciBzY2FsYWJsZSBmb3JtYXRzLCAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgYW5kIGluIHBpeGVscyBmb3IgZml4ZWQtc2l6ZXMgZm9ybWF0cy4gICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgT25seSBob3Jpem9udGFsIGxheW91dHMgKGxlZnQtdG8tcmlnaHQgJiByaWdodC10by1sZWZ0KSBhcmUgICAgICAgICovDQotICAvKiAgICBzdXBwb3J0ZWQgYnkgdGhpcyBtZXRob2QuICBPdGhlciBsYXlvdXRzLCBvciBtb3JlIHNvcGhpc3RpY2F0ZWQgICAgKi8NCi0gIC8qICAgIGtlcm5pbmdzLCBhcmUgb3V0IG9mIHRoZSBzY29wZSBvZiB0aGlzIEFQSSBmdW5jdGlvbiAtLSB0aGV5IGNhbiBiZSAqLw0KLSAgLyogICAgaW1wbGVtZW50ZWQgdGhyb3VnaCBmb3JtYXQtc3BlY2lmaWMgaW50ZXJmYWNlcy4gICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIEZUX0VYUE9SVCggRlRfRXJyb3IgKQ0KLSAgRlRfR2V0X0tlcm5pbmcoIEZUX0ZhY2UgICAgIGZhY2UsDQotICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgbGVmdF9nbHlwaCwNCi0gICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICByaWdodF9nbHlwaCwNCi0gICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBrZXJuX21vZGUsDQotICAgICAgICAgICAgICAgICAgRlRfVmVjdG9yICAqYWtlcm5pbmcgKTsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0dldF9UcmFja19LZXJuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFJldHVybiB0aGUgdHJhY2sga2VybmluZyBmb3IgYSBnaXZlbiBmYWNlIG9iamVjdCBhdCBhIGdpdmVuIHNpemUuICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGZhY2UgICAgICAgOjogQSBoYW5kbGUgdG8gYSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBwb2ludF9zaXplIDo6IFRoZSBwb2ludCBzaXplIGluIDE2LjE2IGZyYWN0aW9uYWwgcG9pbnRzLiAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZGVncmVlICAgICA6OiBUaGUgZGVncmVlIG9mIHRpZ2h0bmVzcy4gIEluY3JlYXNpbmdseSBuZWdhdGl2ZSAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgIHZhbHVlcyByZXByZXNlbnQgdGlnaHRlciB0cmFjayBrZXJuaW5nLCB3aGlsZSAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgaW5jcmVhc2luZ2x5IHBvc2l0aXZlIHZhbHVlcyByZXByZXNlbnQgbG9vc2VyIHRyYWNrICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICBrZXJuaW5nLiAgVmFsdWUgemVybyBtZWFucyBubyB0cmFjayBrZXJuaW5nLiAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgYWtlcm5pbmcgICA6OiBUaGUga2VybmluZyBpbiAxNi4xNiBmcmFjdGlvbmFsIHBvaW50cywgdG8gYmUgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgIHVuaWZvcm1seSBhcHBsaWVkIGJldHdlZW4gYWxsIGdseXBocy4gICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBDdXJyZW50bHksIG9ubHkgdGhlIFR5cGV+MSBmb250IGRyaXZlciBzdXBwb3J0cyB0cmFjayBrZXJuaW5nLCAgICAgKi8NCi0gIC8qICAgIHVzaW5nIGRhdGEgZnJvbSBBRk0gZmlsZXMgKGlmIGF0dGFjaGVkIHdpdGggQEZUX0F0dGFjaF9GaWxlIG9yICAgICAqLw0KLSAgLyogICAgQEZUX0F0dGFjaF9TdHJlYW0pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIE9ubHkgdmVyeSBmZXcgQUZNIGZpbGVzIGNvbWUgd2l0aCB0cmFjayBrZXJuaW5nIGRhdGE7IHBsZWFzZSByZWZlciAqLw0KLSAgLyogICAgdG8gdGhlIEFkb2JlJ3MgQUZNIHNwZWNpZmljYXRpb24gZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIEZUX0VYUE9SVCggRlRfRXJyb3IgKQ0KLSAgRlRfR2V0X1RyYWNrX0tlcm5pbmcoIEZUX0ZhY2UgICAgZmFjZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgIHBvaW50X3NpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICBkZWdyZWUsDQotICAgICAgICAgICAgICAgICAgICAgICAgRlRfRml4ZWQqICBha2VybmluZyApOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfR2V0X0dseXBoX05hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgUmV0cmlldmUgdGhlIEFTQ0lJIG5hbWUgb2YgYSBnaXZlbiBnbHlwaCBpbiBhIGZhY2UuICBUaGlzIG9ubHkgICAgICovDQotICAvKiAgICB3b3JrcyBmb3IgdGhvc2UgZmFjZXMgd2hlcmUgQEZUX0hBU19HTFlQSF9OQU1FUyhmYWNlKSByZXR1cm5zfjEuICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmYWNlICAgICAgICA6OiBBIGhhbmRsZSB0byBhIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZ2x5cGhfaW5kZXggOjogVGhlIGdseXBoIGluZGV4LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGJ1ZmZlcl9tYXggIDo6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgaW4gdGhlICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgYnVmZmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgYnVmZmVyICAgICAgOjogQSBwb2ludGVyIHRvIGEgdGFyZ2V0IGJ1ZmZlciB3aGVyZSB0aGUgbmFtZSBpcyAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICBjb3BpZWQgdG8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBBbiBlcnJvciBpcyByZXR1cm5lZCBpZiB0aGUgZmFjZSBkb2Vzbid0IHByb3ZpZGUgZ2x5cGggbmFtZXMgb3IgaWYgKi8NCi0gIC8qICAgIHRoZSBnbHlwaCBpbmRleCBpcyBpbnZhbGlkLiAgSW4gYWxsIGNhc2VzIG9mIGZhaWx1cmUsIHRoZSBmaXJzdCAgICAqLw0KLSAgLyogICAgYnl0ZSBvZiBgYnVmZmVyJyBpcyBzZXQgdG9+MCB0byBpbmRpY2F0ZSBhbiBlbXB0eSBuYW1lLiAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoZSBnbHlwaCBuYW1lIGlzIHRydW5jYXRlZCB0byBmaXQgd2l0aGluIHRoZSBidWZmZXIgaWYgaXQgaXMgdG9vICAqLw0KLSAgLyogICAgbG9uZy4gIFRoZSByZXR1cm5lZCBzdHJpbmcgaXMgYWx3YXlzIHplcm8tdGVybWluYXRlZC4gICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEJlIGF3YXJlIHRoYXQgRnJlZVR5cGUgcmVvcmRlcnMgZ2x5cGggaW5kaWNlcyBpbnRlcm5hbGx5IHNvIHRoYXQgICAqLw0KLSAgLyogICAgZ2x5cGggaW5kZXh+MCBhbHdheXMgY29ycmVzcG9uZHMgdG8gdGhlIGBtaXNzaW5nIGdseXBoJyAoY2FsbGVkICAgICovDQotICAvKiAgICBgLm5vdGRlZicpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVGhpcyBmdW5jdGlvbiBpcyBub3QgY29tcGlsZWQgd2l0aGluIHRoZSBsaWJyYXJ5IGlmIHRoZSBjb25maWcgICAgICovDQotICAvKiAgICBtYWNybyBgRlRfQ09ORklHX09QVElPTl9OT19HTFlQSF9OQU1FUycgaXMgZGVmaW5lZCBpbiAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbnMuaCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICBGVF9FWFBPUlQoIEZUX0Vycm9yICkNCi0gIEZUX0dldF9HbHlwaF9OYW1lKCBGVF9GYWNlICAgICBmYWNlLA0KLSAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGdseXBoX2luZGV4LA0KLSAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgIGJ1ZmZlciwNCi0gICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBidWZmZXJfbWF4ICk7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9HZXRfUG9zdHNjcmlwdF9OYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBSZXRyaWV2ZSB0aGUgQVNDSUkgUG9zdFNjcmlwdCBuYW1lIG9mIGEgZ2l2ZW4gZmFjZSwgaWYgYXZhaWxhYmxlLiAgKi8NCi0gIC8qICAgIFRoaXMgb25seSB3b3JrcyB3aXRoIFBvc3RTY3JpcHQgYW5kIFRydWVUeXBlIGZvbnRzLiAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGZhY2UgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEEgcG9pbnRlciB0byB0aGUgZmFjZSdzIFBvc3RTY3JpcHQgbmFtZS4gIE5VTEwgaWYgdW5hdmFpbGFibGUuICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoZSByZXR1cm5lZCBwb2ludGVyIGlzIG93bmVkIGJ5IHRoZSBmYWNlIGFuZCBpcyBkZXN0cm95ZWQgd2l0aCAgICAqLw0KLSAgLyogICAgaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIEZUX0VYUE9SVCggY29uc3QgY2hhciogKQ0KLSAgRlRfR2V0X1Bvc3RzY3JpcHRfTmFtZSggRlRfRmFjZSAgZmFjZSApOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfU2VsZWN0X0NoYXJtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgU2VsZWN0IGEgZ2l2ZW4gY2hhcm1hcCBieSBpdHMgZW5jb2RpbmcgdGFnIChhcyBsaXN0ZWQgaW4gICAgICAgICAgICovDQotICAvKiAgICBgZnJlZXR5cGUuaCcpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmYWNlICAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBlbmNvZGluZyA6OiBBIGhhbmRsZSB0byB0aGUgc2VsZWN0ZWQgZW5jb2RpbmcuICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gZXJyb3IgaWYgbm8gY2hhcm1hcCBpbiB0aGUgZmFjZSAgICAgICAgICAgKi8NCi0gIC8qICAgIGNvcnJlc3BvbmRzIHRvIHRoZSBlbmNvZGluZyBxdWVyaWVkIGhlcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBCZWNhdXNlIG1hbnkgZm9udHMgY29udGFpbiBtb3JlIHRoYW4gYSBzaW5nbGUgY21hcCBmb3IgVW5pY29kZSAgICAgKi8NCi0gIC8qICAgIGVuY29kaW5nLCB0aGlzIGZ1bmN0aW9uIGhhcyBzb21lIHNwZWNpYWwgY29kZSB0byBzZWxlY3QgdGhlIG9uZSAgICAqLw0KLSAgLyogICAgd2hpY2ggY292ZXJzIFVuaWNvZGUgYmVzdCAoYGJlc3QnIGluIHRoZSBzZW5zZSB0aGF0IGEgVUNTLTQgY21hcCAgICovDQotICAvKiAgICBpcyBwcmVmZXJyZWQgdG8gYSBVQ1MtMiBjbWFwKS4gIEl0IGlzIHRodXMgcHJlZmVyYWJsZSB0byAgICAgICAgICAgKi8NCi0gIC8qICAgIEBGVF9TZXRfQ2hhcm1hcCBpbiB0aGlzIGNhc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICBGVF9FWFBPUlQoIEZUX0Vycm9yICkNCi0gIEZUX1NlbGVjdF9DaGFybWFwKCBGVF9GYWNlICAgICAgZmFjZSwNCi0gICAgICAgICAgICAgICAgICAgICBGVF9FbmNvZGluZyAgZW5jb2RpbmcgKTsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX1NldF9DaGFybWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFNlbGVjdCBhIGdpdmVuIGNoYXJtYXAgZm9yIGNoYXJhY3RlciBjb2RlIHRvIGdseXBoIGluZGV4IG1hcHBpbmcuICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGZhY2UgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGNoYXJtYXAgOjogQSBoYW5kbGUgdG8gdGhlIHNlbGVjdGVkIGNoYXJtYXAuICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgY2hhcm1hcCBpcyBub3QgcGFydCBvZiAgICAgICAqLw0KLSAgLyogICAgdGhlIGZhY2UgKGkuZS4sIGlmIGl0IGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGBmYWNlLT5jaGFybWFwcycgICAgICAgICovDQotICAvKiAgICB0YWJsZSkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgSXQgYWxzbyBmYWlscyBpZiBhIHR5cGV+MTQgY2hhcm1hcCBpcyBzZWxlY3RlZC4gICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIEZUX0VYUE9SVCggRlRfRXJyb3IgKQ0KLSAgRlRfU2V0X0NoYXJtYXAoIEZUX0ZhY2UgICAgIGZhY2UsDQotICAgICAgICAgICAgICAgICAgRlRfQ2hhck1hcCAgY2hhcm1hcCApOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gICAqDQotICAgKiBAZnVuY3Rpb246DQotICAgKiAgIEZUX0dldF9DaGFybWFwX0luZGV4DQotICAgKg0KLSAgICogQGRlc2NyaXB0aW9uOg0KLSAgICogICBSZXRyaWV2ZSBpbmRleCBvZiBhIGdpdmVuIGNoYXJtYXAuDQotICAgKg0KLSAgICogQGlucHV0Og0KLSAgICogICBjaGFybWFwIDo6DQotICAgKiAgICAgQSBoYW5kbGUgdG8gYSBjaGFybWFwLg0KLSAgICoNCi0gICAqIEByZXR1cm46DQotICAgKiAgIFRoZSBpbmRleCBpbnRvIHRoZSBhcnJheSBvZiBjaGFyYWN0ZXIgbWFwcyB3aXRoaW4gdGhlIGZhY2UgdG8gd2hpY2gNCi0gICAqICAgYGNoYXJtYXAnIGJlbG9uZ3MuICBJZiBhbiBlcnJvciBvY2N1cnMsIC0xIGlzIHJldHVybmVkLg0KLSAgICoNCi0gICAqLw0KLSAgRlRfRVhQT1JUKCBGVF9JbnQgKQ0KLSAgRlRfR2V0X0NoYXJtYXBfSW5kZXgoIEZUX0NoYXJNYXAgIGNoYXJtYXAgKTsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0dldF9DaGFyX0luZGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFJldHVybiB0aGUgZ2x5cGggaW5kZXggb2YgYSBnaXZlbiBjaGFyYWN0ZXIgY29kZS4gIFRoaXMgZnVuY3Rpb24gICAqLw0KLSAgLyogICAgdXNlcyBhIGNoYXJtYXAgb2JqZWN0IHRvIGRvIHRoZSBtYXBwaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZmFjZSAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGNoYXJjb2RlIDo6IFRoZSBjaGFyYWN0ZXIgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoZSBnbHlwaCBpbmRleC4gIDB+bWVhbnMgYHVuZGVmaW5lZCBjaGFyYWN0ZXIgY29kZScuICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIElmIHlvdSB1c2UgRnJlZVR5cGUgdG8gbWFuaXB1bGF0ZSB0aGUgY29udGVudHMgb2YgZm9udCBmaWxlcyAgICAgICAqLw0KLSAgLyogICAgZGlyZWN0bHksIGJlIGF3YXJlIHRoYXQgdGhlIGdseXBoIGluZGV4IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gICovDQotICAvKiAgICBkb2Vzbid0IGFsd2F5cyBjb3JyZXNwb25kIHRvIHRoZSBpbnRlcm5hbCBpbmRpY2VzIHVzZWQgd2l0aGluIHRoZSAgKi8NCi0gIC8qICAgIGZpbGUuICBUaGlzIGlzIGRvbmUgdG8gZW5zdXJlIHRoYXQgdmFsdWV+MCBhbHdheXMgY29ycmVzcG9uZHMgdG8gICAqLw0KLSAgLyogICAgdGhlIGBtaXNzaW5nIGdseXBoJy4gIElmIHRoZSBmaXJzdCBnbHlwaCBpcyBub3QgbmFtZWQgYC5ub3RkZWYnLCAgICovDQotICAvKiAgICB0aGVuIGZvciBUeXBlfjEgYW5kIFR5cGV+NDIgZm9udHMsIGAubm90ZGVmJyB3aWxsIGJlIG1vdmVkIGludG8gICAgKi8NCi0gIC8qICAgIHRoZSBnbHlwaCBJRH4wIHBvc2l0aW9uLCBhbmQgd2hhdGV2ZXIgd2FzIHRoZXJlIHdpbGwgYmUgbW92ZWQgdG8gICAqLw0KLSAgLyogICAgdGhlIHBvc2l0aW9uIGAubm90ZGVmJyBoYWQuICBGb3IgVHlwZX4xIGZvbnRzLCBpZiB0aGVyZSBpcyBubyAgICAgICovDQotICAvKiAgICBgLm5vdGRlZicgZ2x5cGggYXQgYWxsLCB0aGVuIG9uZSB3aWxsIGJlIGNyZWF0ZWQgYXQgaW5kZXh+MCBhbmQgICAgKi8NCi0gIC8qICAgIHdoYXRldmVyIHdhcyB0aGVyZSB3aWxsIGJlIG1vdmVkIHRvIHRoZSBsYXN0IGluZGV4IC0tIFR5cGV+NDIgICAgICAqLw0KLSAgLyogICAgZm9udHMgYXJlIGNvbnNpZGVyZWQgaW52YWxpZCB1bmRlciB0aGlzIGNvbmRpdGlvbi4gICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIEZUX0VYUE9SVCggRlRfVUludCApDQotICBGVF9HZXRfQ2hhcl9JbmRleCggRlRfRmFjZSAgIGZhY2UsDQotICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgIGNoYXJjb2RlICk7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9HZXRfRmlyc3RfQ2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmV0dXJuIHRoZSBmaXJzdCBjaGFyYWN0ZXIgY29kZSBpbiB0aGUgICAgKi8NCi0gIC8qICAgIGN1cnJlbnQgY2hhcm1hcCBvZiBhIGdpdmVuIGZhY2UuICBJdCBhbHNvIHJldHVybnMgdGhlICAgICAgICAgICAgICAqLw0KLSAgLyogICAgY29ycmVzcG9uZGluZyBnbHlwaCBpbmRleC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZmFjZSAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgYWdpbmRleCA6OiBHbHlwaCBpbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgY29kZS4gIDB+aWYgY2hhcm1hcCBpcyAgICovDQotICAvKiAgICAgICAgICAgICAgIGVtcHR5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGUgY2hhcm1hcCdzIGZpcnN0IGNoYXJhY3RlciBjb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBZb3Ugc2hvdWxkIHVzZSB0aGlzIGZ1bmN0aW9uIHdpdGggQEZUX0dldF9OZXh0X0NoYXIgdG8gYmUgYWJsZSB0byAgKi8NCi0gIC8qICAgIHBhcnNlIGFsbCBjaGFyYWN0ZXIgY29kZXMgYXZhaWxhYmxlIGluIGEgZ2l2ZW4gY2hhcm1hcC4gIFRoZSBjb2RlICAqLw0KLSAgLyogICAgc2hvdWxkIGxvb2sgbGlrZSB0aGlzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBGVF9VTG9uZyAgY2hhcmNvZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIEZUX1VJbnQgICBnaW5kZXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIGNoYXJjb2RlID0gRlRfR2V0X0ZpcnN0X0NoYXIoIGZhY2UsICZnaW5kZXggKTsgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgd2hpbGUgKCBnaW5kZXggIT0gMCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgLi4uIGRvIHNvbWV0aGluZyB3aXRoIChjaGFyY29kZSxnaW5kZXgpIHBhaXIgLi4uICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgIGNoYXJjb2RlID0gRlRfR2V0X05leHRfQ2hhciggZmFjZSwgY2hhcmNvZGUsICZnaW5kZXggKTsgICAgICAgICovDQotICAvKiAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBOb3RlIHRoYXQgYCphZ2luZGV4JyBpcyBzZXQgdG9+MCBpZiB0aGUgY2hhcm1hcCBpcyBlbXB0eS4gIFRoZSAgICAgKi8NCi0gIC8qICAgIHJlc3VsdCBpdHNlbGYgY2FuIGJlfjAgaW4gdHdvIGNhc2VzOiBpZiB0aGUgY2hhcm1hcCBpcyBlbXB0eSBvciAgICAqLw0KLSAgLyogICAgaWYgdGhlIHZhbHVlfjAgaXMgdGhlIGZpcnN0IHZhbGlkIGNoYXJhY3RlciBjb2RlLiAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIEZUX0VYUE9SVCggRlRfVUxvbmcgKQ0KLSAgRlRfR2V0X0ZpcnN0X0NoYXIoIEZUX0ZhY2UgICBmYWNlLA0KLSAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICphZ2luZGV4ICk7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9HZXRfTmV4dF9DaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmV0dXJuIHRoZSBuZXh0IGNoYXJhY3RlciBjb2RlIGluIHRoZSAgICAgKi8NCi0gIC8qICAgIGN1cnJlbnQgY2hhcm1hcCBvZiBhIGdpdmVuIGZhY2UgZm9sbG93aW5nIHRoZSB2YWx1ZSBgY2hhcl9jb2RlJywgICAqLw0KLSAgLyogICAgYXMgd2VsbCBhcyB0aGUgY29ycmVzcG9uZGluZyBnbHlwaCBpbmRleC4gICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZmFjZSAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBjaGFyX2NvZGUgOjogVGhlIHN0YXJ0aW5nIGNoYXJhY3RlciBjb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBhZ2luZGV4ICAgOjogR2x5cGggaW5kZXggb2YgbmV4dCBjaGFyYWN0ZXIgY29kZS4gIDB+aWYgY2hhcm1hcCAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICBpcyBlbXB0eS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoZSBjaGFybWFwJ3MgbmV4dCBjaGFyYWN0ZXIgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFlvdSBzaG91bGQgdXNlIHRoaXMgZnVuY3Rpb24gd2l0aCBARlRfR2V0X0ZpcnN0X0NoYXIgdG8gd2FsayAgICAgICAqLw0KLSAgLyogICAgb3ZlciBhbGwgY2hhcmFjdGVyIGNvZGVzIGF2YWlsYWJsZSBpbiBhIGdpdmVuIGNoYXJtYXAuICBTZWUgdGhlICAgICovDQotICAvKiAgICBub3RlIGZvciB0aGlzIGZ1bmN0aW9uIGZvciBhIHNpbXBsZSBjb2RlIGV4YW1wbGUuICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgTm90ZSB0aGF0IGAqYWdpbmRleCcgaXMgc2V0IHRvfjAgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBjb2RlcyBpbiAgICovDQotICAvKiAgICB0aGUgY2hhcm1hcC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgRlRfRVhQT1JUKCBGVF9VTG9uZyApDQotICBGVF9HZXRfTmV4dF9DaGFyKCBGVF9GYWNlICAgIGZhY2UsDQotICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgIGNoYXJfY29kZSwNCi0gICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAqYWdpbmRleCApOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfR2V0X05hbWVfSW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgUmV0dXJuIHRoZSBnbHlwaCBpbmRleCBvZiBhIGdpdmVuIGdseXBoIG5hbWUuICBUaGlzIGZ1bmN0aW9uIHVzZXMgICovDQotICAvKiAgICBkcml2ZXIgc3BlY2lmaWMgb2JqZWN0cyB0byBkbyB0aGUgdHJhbnNsYXRpb24uICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmYWNlICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZ2x5cGhfbmFtZSA6OiBUaGUgZ2x5cGggbmFtZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVGhlIGdseXBoIGluZGV4LiAgMH5tZWFucyBgdW5kZWZpbmVkIGNoYXJhY3RlciBjb2RlJy4gICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIEZUX0VYUE9SVCggRlRfVUludCApDQotICBGVF9HZXRfTmFtZV9JbmRleCggRlRfRmFjZSAgICAgZmFjZSwNCi0gICAgICAgICAgICAgICAgICAgICBGVF9TdHJpbmcqICBnbHlwaF9uYW1lICk7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAgICoNCi0gICAqIEBtYWNybzoNCi0gICAqICAgRlRfU1VCR0xZUEhfRkxBR19YWFgNCi0gICAqDQotICAgKiBAZGVzY3JpcHRpb246DQotICAgKiAgIEEgbGlzdCBvZiBjb25zdGFudHMgdXNlZCB0byBkZXNjcmliZSBzdWJnbHlwaHMuICBQbGVhc2UgcmVmZXIgdG8gdGhlDQotICAgKiAgIFRydWVUeXBlIHNwZWNpZmljYXRpb24gZm9yIHRoZSBtZWFuaW5nIG9mIHRoZSB2YXJpb3VzIGZsYWdzLg0KLSAgICoNCi0gICAqIEB2YWx1ZXM6DQotICAgKiAgIEZUX1NVQkdMWVBIX0ZMQUdfQVJHU19BUkVfV09SRFMgOjoNCi0gICAqICAgRlRfU1VCR0xZUEhfRkxBR19BUkdTX0FSRV9YWV9WQUxVRVMgOjoNCi0gICAqICAgRlRfU1VCR0xZUEhfRkxBR19ST1VORF9YWV9UT19HUklEIDo6DQotICAgKiAgIEZUX1NVQkdMWVBIX0ZMQUdfU0NBTEUgOjoNCi0gICAqICAgRlRfU1VCR0xZUEhfRkxBR19YWV9TQ0FMRSA6Og0KLSAgICogICBGVF9TVUJHTFlQSF9GTEFHXzJYMiA6Og0KLSAgICogICBGVF9TVUJHTFlQSF9GTEFHX1VTRV9NWV9NRVRSSUNTIDo6DQotICAgKg0KLSAgICovDQotI2RlZmluZSBGVF9TVUJHTFlQSF9GTEFHX0FSR1NfQVJFX1dPUkRTICAgICAgICAgIDENCi0jZGVmaW5lIEZUX1NVQkdMWVBIX0ZMQUdfQVJHU19BUkVfWFlfVkFMVUVTICAgICAgMg0KLSNkZWZpbmUgRlRfU1VCR0xZUEhfRkxBR19ST1VORF9YWV9UT19HUklEICAgICAgICA0DQotI2RlZmluZSBGVF9TVUJHTFlQSF9GTEFHX1NDQUxFICAgICAgICAgICAgICAgICAgIDgNCi0jZGVmaW5lIEZUX1NVQkdMWVBIX0ZMQUdfWFlfU0NBTEUgICAgICAgICAgICAgMHg0MA0KLSNkZWZpbmUgRlRfU1VCR0xZUEhfRkxBR18yWDIgICAgICAgICAgICAgICAgICAweDgwDQotI2RlZmluZSBGVF9TVUJHTFlQSF9GTEFHX1VTRV9NWV9NRVRSSUNTICAgICAgMHgyMDANCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICAgKg0KLSAgICogQGZ1bmM6DQotICAgKiAgIEZUX0dldF9TdWJHbHlwaF9JbmZvDQotICAgKg0KLSAgICogQGRlc2NyaXB0aW9uOg0KLSAgICogICBSZXRyaWV2ZSBhIGRlc2NyaXB0aW9uIG9mIGEgZ2l2ZW4gc3ViZ2x5cGguICBPbmx5IHVzZSBpdCBpZg0KLSAgICogICBgZ2x5cGgtPmZvcm1hdCcgaXMgQEZUX0dMWVBIX0ZPUk1BVF9DT01QT1NJVEU7IGFuIGVycm9yIGlzDQotICAgKiAgIHJldHVybmVkIG90aGVyd2lzZS4NCi0gICAqDQotICAgKiBAaW5wdXQ6DQotICAgKiAgIGdseXBoIDo6DQotICAgKiAgICAgVGhlIHNvdXJjZSBnbHlwaCBzbG90Lg0KLSAgICoNCi0gICAqICAgc3ViX2luZGV4IDo6DQotICAgKiAgICAgVGhlIGluZGV4IG9mIHRoZSBzdWJnbHlwaC4gIE11c3QgYmUgbGVzcyB0aGFuDQotICAgKiAgICAgYGdseXBoLT5udW1fc3ViZ2x5cGhzJy4NCi0gICAqDQotICAgKiBAb3V0cHV0Og0KLSAgICogICBwX2luZGV4IDo6DQotICAgKiAgICAgVGhlIGdseXBoIGluZGV4IG9mIHRoZSBzdWJnbHlwaC4NCi0gICAqDQotICAgKiAgIHBfZmxhZ3MgOjoNCi0gICAqICAgICBUaGUgc3ViZ2x5cGggZmxhZ3MsIHNlZSBARlRfU1VCR0xZUEhfRkxBR19YWFguDQotICAgKg0KLSAgICogICBwX2FyZzEgOjoNCi0gICAqICAgICBUaGUgc3ViZ2x5cGgncyBmaXJzdCBhcmd1bWVudCAoaWYgYW55KS4NCi0gICAqDQotICAgKiAgIHBfYXJnMiA6Og0KLSAgICogICAgIFRoZSBzdWJnbHlwaCdzIHNlY29uZCBhcmd1bWVudCAoaWYgYW55KS4NCi0gICAqDQotICAgKiAgIHBfdHJhbnNmb3JtIDo6DQotICAgKiAgICAgVGhlIHN1YmdseXBoIHRyYW5zZm9ybWF0aW9uIChpZiBhbnkpLg0KLSAgICoNCi0gICAqIEByZXR1cm46DQotICAgKiAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuDQotICAgKg0KLSAgICogQG5vdGU6DQotICAgKiAgIFRoZSB2YWx1ZXMgb2YgYCpwX2FyZzEnLCBgKnBfYXJnMicsIGFuZCBgKnBfdHJhbnNmb3JtJyBtdXN0IGJlDQotICAgKiAgIGludGVycHJldGVkIGRlcGVuZGluZyBvbiB0aGUgZmxhZ3MgcmV0dXJuZWQgaW4gYCpwX2ZsYWdzJy4gIFNlZSB0aGUNCi0gICAqICAgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscy4NCi0gICAqDQotICAgKi8NCi0gIEZUX0VYUE9SVCggRlRfRXJyb3IgKQ0KLSAgRlRfR2V0X1N1YkdseXBoX0luZm8oIEZUX0dseXBoU2xvdCAgZ2x5cGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICBzdWJfaW5kZXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICpwX2luZGV4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAqcF9mbGFncywNCi0gICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgKnBfYXJnMSwNCi0gICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgKnBfYXJnMiwNCi0gICAgICAgICAgICAgICAgICAgICAgICBGVF9NYXRyaXggICAgKnBfdHJhbnNmb3JtICk7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEVudW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9GU1RZUEVfWFhYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBBIGxpc3Qgb2YgYml0IGZsYWdzIHVzZWQgaW4gdGhlIGBmc1R5cGUnIGZpZWxkIG9mIHRoZSBPUy8yIHRhYmxlICAgKi8NCi0gIC8qICAgIGluIGEgVHJ1ZVR5cGUgb3IgT3BlblR5cGUgZm9udCBhbmQgdGhlIGBGU1R5cGUnIGVudHJ5IGluIGEgICAgICAgICAqLw0KLSAgLyogICAgUG9zdFNjcmlwdCBmb250LiAgVGhlc2UgYml0IGZsYWdzIGFyZSByZXR1cm5lZCBieSAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBARlRfR2V0X0ZTVHlwZV9GbGFnczsgdGhleSBpbmZvcm0gY2xpZW50IGFwcGxpY2F0aW9ucyBvZiBlbWJlZGRpbmcgKi8NCi0gIC8qICAgIGFuZCBzdWJzZXR0aW5nIHJlc3RyaWN0aW9ucyBhc3NvY2lhdGVkIHdpdGggYSBmb250LiAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBTZWUgaHR0cDovL3d3dy5hZG9iZS5jb20vZGV2bmV0L2Fjcm9iYXQvcGRmcy9Gb250UG9saWNpZXMucGRmIGZvciAgKi8NCi0gIC8qICAgIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8VmFsdWVzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0ZTVFlQRV9JTlNUQUxMQUJMRV9FTUJFRERJTkcgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBGb250cyB3aXRoIG5vIGZzVHlwZSBiaXQgc2V0IG1heSBiZSBlbWJlZGRlZCBhbmQgcGVybWFuZW50bHkgICAgICovDQotICAvKiAgICAgIGluc3RhbGxlZCBvbiB0aGUgcmVtb3RlIHN5c3RlbSBieSBhbiBhcHBsaWNhdGlvbi4gICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRlNUWVBFX1JFU1RSSUNURURfTElDRU5TRV9FTUJFRERJTkcgOjogICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIEZvbnRzIHRoYXQgaGF2ZSBvbmx5IHRoaXMgYml0IHNldCBtdXN0IG5vdCBiZSBtb2RpZmllZCwgZW1iZWRkZWQgKi8NCi0gIC8qICAgICAgb3IgZXhjaGFuZ2VkIGluIGFueSBtYW5uZXIgd2l0aG91dCBmaXJzdCBvYnRhaW5pbmcgcGVybWlzc2lvbiBvZiAqLw0KLSAgLyogICAgICB0aGUgZm9udCBzb2Z0d2FyZSBjb3B5cmlnaHQgb3duZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0ZTVFlQRV9QUkVWSUVXX0FORF9QUklOVF9FTUJFRERJTkcgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZSBmb250IG1heSBiZSBlbWJlZGRlZCBhbmQgdGVtcG9yYXJpbHkgICAgICovDQotICAvKiAgICAgIGxvYWRlZCBvbiB0aGUgcmVtb3RlIHN5c3RlbS4gIERvY3VtZW50cyBjb250YWluaW5nIFByZXZpZXcgJiAgICAgKi8NCi0gIC8qICAgICAgUHJpbnQgZm9udHMgbXVzdCBiZSBvcGVuZWQgYHJlYWQtb25seSc7IG5vIGVkaXRzIGNhbiBiZSBhcHBsaWVkICAqLw0KLSAgLyogICAgICB0byB0aGUgZG9jdW1lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0ZTVFlQRV9FRElUQUJMRV9FTUJFRERJTkcgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZSBmb250IG1heSBiZSBlbWJlZGRlZCBidXQgbXVzdCBvbmx5IGJlICAgICovDQotICAvKiAgICAgIGluc3RhbGxlZCB0ZW1wb3JhcmlseSBvbiBvdGhlciBzeXN0ZW1zLiAgSW4gY29udHJhc3QgdG8gUHJldmlldyAgKi8NCi0gIC8qICAgICAgJiBQcmludCBmb250cywgZG9jdW1lbnRzIGNvbnRhaW5pbmcgZWRpdGFibGUgZm9udHMgbWF5IGJlIG9wZW5lZCAqLw0KLSAgLyogICAgICBmb3IgcmVhZGluZywgZWRpdGluZyBpcyBwZXJtaXR0ZWQsIGFuZCBjaGFuZ2VzIG1heSBiZSBzYXZlZC4gICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0ZTVFlQRV9OT19TVUJTRVRUSU5HIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZSBmb250IG1heSBub3QgYmUgc3Vic2V0dGVkIHByaW9yIHRvICAgICAgICovDQotICAvKiAgICAgIGVtYmVkZGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRlNUWVBFX0JJVE1BUF9FTUJFRERJTkdfT05MWSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIElmIHRoaXMgYml0IGlzIHNldCwgb25seSBiaXRtYXBzIGNvbnRhaW5lZCBpbiB0aGUgZm9udCBtYXkgYmUgICAgKi8NCi0gIC8qICAgICAgZW1iZWRkZWQ7IG5vIG91dGxpbmUgZGF0YSBtYXkgYmUgZW1iZWRkZWQuICBJZiB0aGVyZSBhcmUgbm8gICAgICAqLw0KLSAgLyogICAgICBiaXRtYXBzIGF2YWlsYWJsZSBpbiB0aGUgZm9udCwgdGhlbiB0aGUgZm9udCBpcyB1bmVtYmVkZGFibGUuICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgV2hpbGUgdGhlIGZzVHlwZSBmbGFncyBjYW4gaW5kaWNhdGUgdGhhdCBhIGZvbnQgbWF5IGJlIGVtYmVkZGVkLCBhICovDQotICAvKiAgICBsaWNlbnNlIHdpdGggdGhlIGZvbnQgdmVuZG9yIG1heSBiZSBzZXBhcmF0ZWx5IHJlcXVpcmVkIHRvIHVzZSB0aGUgKi8NCi0gIC8qICAgIGZvbnQgaW4gdGhpcyB3YXkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotI2RlZmluZSBGVF9GU1RZUEVfSU5TVEFMTEFCTEVfRU1CRURESU5HICAgICAgICAgMHgwMDAwDQotI2RlZmluZSBGVF9GU1RZUEVfUkVTVFJJQ1RFRF9MSUNFTlNFX0VNQkVERElORyAgMHgwMDAyDQotI2RlZmluZSBGVF9GU1RZUEVfUFJFVklFV19BTkRfUFJJTlRfRU1CRURESU5HICAgMHgwMDA0DQotI2RlZmluZSBGVF9GU1RZUEVfRURJVEFCTEVfRU1CRURESU5HICAgICAgICAgICAgMHgwMDA4DQotI2RlZmluZSBGVF9GU1RZUEVfTk9fU1VCU0VUVElORyAgICAgICAgICAgICAgICAgMHgwMTAwDQotI2RlZmluZSBGVF9GU1RZUEVfQklUTUFQX0VNQkVERElOR19PTkxZICAgICAgICAgMHgwMjAwDQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9HZXRfRlNUeXBlX0ZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBSZXR1cm4gdGhlIGZzVHlwZSBmbGFncyBmb3IgYSBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmYWNlIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGUgZnNUeXBlIGZsYWdzLCBARlRfRlNUWVBFX1hYWC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBVc2UgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiBkaXJlY3RseSByZWFkaW5nIHRoZSBgZnNfdHlwZScgZmllbGQgKi8NCi0gIC8qICAgIGluIHRoZSBAUFNfRm9udEluZm9SZWMgc3RydWN0dXJlIHdoaWNoIGlzIG9ubHkgZ3VhcmFudGVlZCB0byAgICAgICAqLw0KLSAgLyogICAgcmV0dXJuIHRoZSBjb3JyZWN0IHJlc3VsdHMgZm9yIFR5cGV+MSBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxTaW5jZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgMi4zLjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIEZUX0VYUE9SVCggRlRfVVNob3J0ICkNCi0gIEZUX0dldF9GU1R5cGVfRmxhZ3MoIEZUX0ZhY2UgIGZhY2UgKTsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGdseXBoX3ZhcmlhbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEdseXBoIFZhcmlhbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoZSBGcmVlVHlwZX4yIGludGVyZmFjZSB0byBVbmljb2RlIElkZW9ncmFwaGljIFZhcmlhdGlvbiAgICAgICAgICAqLw0KLSAgLyogICAgU2VxdWVuY2VzIChJVlMpLCB1c2luZyB0aGUgU0ZOVCBjbWFwIGZvcm1hdH4xNC4gICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgTWFueSBDSksgY2hhcmFjdGVycyBoYXZlIHZhcmlhbnQgZm9ybXMuICBUaGV5IGFyZSBhIHNvcnQgb2YgZ3JleSAgICovDQotICAvKiAgICBhcmVhIHNvbWV3aGVyZSBiZXR3ZWVuIGJlaW5nIHRvdGFsbHkgaXJyZWxldmFudCBhbmQgc2VtYW50aWNhbGx5ICAgKi8NCi0gIC8qICAgIGRpc3RpbmN0OyBmb3IgdGhpcyByZWFzb24sIHRoZSBVbmljb2RlIGNvbnNvcnRpdW0gZGVjaWRlZCB0byAgICAgICAqLw0KLSAgLyogICAgaW50cm9kdWNlIElkZW9ncmFwaGljIFZhcmlhdGlvbiBTZXF1ZW5jZXMgKElWUyksIGNvbnNpc3Rpbmcgb2YgYSAgICovDQotICAvKiAgICBVbmljb2RlIGJhc2UgY2hhcmFjdGVyIGFuZCBvbmUgb2YgMjQwIHZhcmlhbnQgc2VsZWN0b3JzICAgICAgICAgICAgKi8NCi0gIC8qICAgIChVK0UwMTAwLVUrRTAxRUYpLCBpbnN0ZWFkIG9mIGZ1cnRoZXIgZXh0ZW5kaW5nIHRoZSBhbHJlYWR5IGh1Z2UgICAqLw0KLSAgLyogICAgY29kZSByYW5nZSBmb3IgQ0pLIGNoYXJhY3RlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEFuIElWUyBpcyByZWdpc3RlcmVkIGFuZCB1bmlxdWU7IGZvciBmdXJ0aGVyIGRldGFpbHMgcGxlYXNlIHJlZmVyICAqLw0KLSAgLyogICAgdG8gVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM3LCB0aGUgSWRlb2dyYXBoaWMgVmFyaWF0aW9uICAgICAgICovDQotICAvKiAgICBEYXRhYmFzZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRvIGRhdGUgKE5vdmVtYmVyIDIwMTIpLCB0aGUgY2hhcmFjdGVyIHdpdGggdGhlIG1vc3QgdmFyaWFudHMgaXMgICAqLw0KLSAgLyogICAgVSs5MDg5LCBoYXZpbmcgMzEgc3VjaCBJVlMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEFkb2JlIGFuZCBNUyBkZWNpZGVkIHRvIHN1cHBvcnQgSVZTIHdpdGggYSBuZXcgY21hcCBzdWJ0YWJsZSAgICAgICAqLw0KLSAgLyogICAgKGZvcm1hdH4xNCkuICBJdCBpcyBhbiBvZGQgc3VidGFibGUgYmVjYXVzZSBpdCBpcyBub3QgYSBtYXBwaW5nIG9mICovDQotICAvKiAgICBpbnB1dCBjb2RlIHBvaW50cyB0byBnbHlwaHMsIGJ1dCBjb250YWlucyBsaXN0cyBvZiBhbGwgdmFyaWFudHMgICAgKi8NCi0gIC8qICAgIHN1cHBvcnRlZCBieSB0aGUgZm9udC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBBIHZhcmlhbnQgbWF5IGJlIGVpdGhlciBgZGVmYXVsdCcgb3IgYG5vbi1kZWZhdWx0Jy4gIEEgZGVmYXVsdCAgICAgKi8NCi0gIC8qICAgIHZhcmlhbnQgaXMgdGhlIG9uZSB5b3Ugd2lsbCBnZXQgZm9yIHRoYXQgY29kZSBwb2ludCBpZiB5b3UgbG9vayBpdCAqLw0KLSAgLyogICAgdXAgaW4gdGhlIHN0YW5kYXJkIFVuaWNvZGUgY21hcC4gIEEgbm9uLWRlZmF1bHQgdmFyaWFudCBpcyBhICAgICAgICovDQotICAvKiAgICBkaWZmZXJlbnQgZ2x5cGguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9GYWNlX0dldENoYXJWYXJpYW50SW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBSZXR1cm4gdGhlIGdseXBoIGluZGV4IG9mIGEgZ2l2ZW4gY2hhcmFjdGVyIGNvZGUgYXMgbW9kaWZpZWQgYnkgICAgKi8NCi0gIC8qICAgIHRoZSB2YXJpYXRpb24gc2VsZWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGZhY2UgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGNoYXJjb2RlIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBUaGUgY2hhcmFjdGVyIGNvZGUgcG9pbnQgaW4gVW5pY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIHZhcmlhbnRTZWxlY3RvciA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBUaGUgVW5pY29kZSBjb2RlIHBvaW50IG9mIHRoZSB2YXJpYXRpb24gc2VsZWN0b3IuICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVGhlIGdseXBoIGluZGV4LiAgMH5tZWFucyBlaXRoZXIgYHVuZGVmaW5lZCBjaGFyYWN0ZXIgY29kZScsIG9yICAgICovDQotICAvKiAgICBgdW5kZWZpbmVkIHNlbGVjdG9yIGNvZGUnLCBvciBgbm8gdmFyaWF0aW9uIHNlbGVjdG9yIGNtYXAgICAgICAgICAgKi8NCi0gIC8qICAgIHN1YnRhYmxlJywgb3IgYGN1cnJlbnQgQ2hhck1hcCBpcyBub3QgVW5pY29kZScuICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIElmIHlvdSB1c2UgRnJlZVR5cGUgdG8gbWFuaXB1bGF0ZSB0aGUgY29udGVudHMgb2YgZm9udCBmaWxlcyAgICAgICAqLw0KLSAgLyogICAgZGlyZWN0bHksIGJlIGF3YXJlIHRoYXQgdGhlIGdseXBoIGluZGV4IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gICovDQotICAvKiAgICBkb2Vzbid0IGFsd2F5cyBjb3JyZXNwb25kIHRvIHRoZSBpbnRlcm5hbCBpbmRpY2VzIHVzZWQgd2l0aGluICAgICAgKi8NCi0gIC8qICAgIHRoZSBmaWxlLiAgVGhpcyBpcyBkb25lIHRvIGVuc3VyZSB0aGF0IHZhbHVlfjAgYWx3YXlzIGNvcnJlc3BvbmRzICAqLw0KLSAgLyogICAgdG8gdGhlIGBtaXNzaW5nIGdseXBoJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgb25seSBtZWFuaW5nZnVsIGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBhKSB0aGUgZm9udCBoYXMgYSB2YXJpYXRpb24gc2VsZWN0b3IgY21hcCBzdWIgdGFibGUsICAgICAgICAgICAgICovDQotICAvKiAgICBhbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgYikgdGhlIGN1cnJlbnQgY2hhcm1hcCBoYXMgYSBVbmljb2RlIGVuY29kaW5nLiAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIDIuMy42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICBGVF9FWFBPUlQoIEZUX1VJbnQgKQ0KLSAgRlRfRmFjZV9HZXRDaGFyVmFyaWFudEluZGV4KCBGVF9GYWNlICAgZmFjZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgIGNoYXJjb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgdmFyaWFudFNlbGVjdG9yICk7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9GYWNlX0dldENoYXJWYXJpYW50SXNEZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBDaGVjayB3aGV0aGVyIHRoaXMgdmFyaWFudCBvZiB0aGlzIFVuaWNvZGUgY2hhcmFjdGVyIGlzIHRoZSBvbmUgdG8gKi8NCi0gIC8qICAgIGJlIGZvdW5kIGluIHRoZSBgY21hcCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGZhY2UgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGNoYXJjb2RlIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBUaGUgY2hhcmFjdGVyIGNvZGVwb2ludCBpbiBVbmljb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIHZhcmlhbnRTZWxlY3RvciA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICBUaGUgVW5pY29kZSBjb2RlcG9pbnQgb2YgdGhlIHZhcmlhdGlvbiBzZWxlY3Rvci4gICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgMX5pZiBmb3VuZCBpbiB0aGUgc3RhbmRhcmQgKFVuaWNvZGUpIGNtYXAsIDB+aWYgZm91bmQgaW4gdGhlICAgICAgICovDQotICAvKiAgICB2YXJpYXRpb24gc2VsZWN0b3IgY21hcCwgb3IgLTEgaWYgaXQgaXMgbm90IGEgdmFyaWFudC4gICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgbWVhbmluZ2Z1bCBpZiB0aGUgZm9udCBoYXMgYSB2YXJpYXRpb24gICAgICAgKi8NCi0gIC8qICAgIHNlbGVjdG9yIGNtYXAgc3VidGFibGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIDIuMy42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICBGVF9FWFBPUlQoIEZUX0ludCApDQotICBGVF9GYWNlX0dldENoYXJWYXJpYW50SXNEZWZhdWx0KCBGVF9GYWNlICAgZmFjZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICBjaGFyY29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICB2YXJpYW50U2VsZWN0b3IgKTsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0ZhY2VfR2V0VmFyaWFudFNlbGVjdG9ycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFJldHVybiBhIHplcm8tdGVybWluYXRlZCBsaXN0IG9mIFVuaWNvZGUgdmFyaWFudCBzZWxlY3RvcnMgZm91bmQgICAqLw0KLSAgLyogICAgaW4gdGhlIGZvbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgZmFjZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBBIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2Ygc2VsZWN0b3IgY29kZSBwb2ludHMsIG9yIE5VTEwgaWYgdGhlcmUgaXMgKi8NCi0gIC8qICAgIG5vIHZhbGlkIHZhcmlhbnQgc2VsZWN0b3IgY21hcCBzdWJ0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoZSBsYXN0IGl0ZW0gaW4gdGhlIGFycmF5IGlzfjA7IHRoZSBhcnJheSBpcyBvd25lZCBieSB0aGUgICAgICAgICAqLw0KLSAgLyogICAgQEZUX0ZhY2Ugb2JqZWN0IGJ1dCBjYW4gYmUgb3ZlcndyaXR0ZW4gb3IgcmVsZWFzZWQgb24gdGhlIG5leHQgICAgICovDQotICAvKiAgICBjYWxsIHRvIGEgRnJlZVR5cGUgZnVuY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAyLjMuNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgRlRfRVhQT1JUKCBGVF9VSW50MzIqICkNCi0gIEZUX0ZhY2VfR2V0VmFyaWFudFNlbGVjdG9ycyggRlRfRmFjZSAgZmFjZSApOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRmFjZV9HZXRWYXJpYW50c09mQ2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgUmV0dXJuIGEgemVyby10ZXJtaW5hdGVkIGxpc3Qgb2YgVW5pY29kZSB2YXJpYW50IHNlbGVjdG9ycyBmb3VuZCAgICovDQotICAvKiAgICBmb3IgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmYWNlIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBjaGFyY29kZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgVGhlIGNoYXJhY3RlciBjb2RlcG9pbnQgaW4gVW5pY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEEgcG9pbnRlciB0byBhbiBhcnJheSBvZiB2YXJpYW50IHNlbGVjdG9yIGNvZGUgcG9pbnRzIHdoaWNoIGFyZSAgICAqLw0KLSAgLyogICAgYWN0aXZlIGZvciB0aGUgZ2l2ZW4gY2hhcmFjdGVyLCBvciBOVUxMIGlmIHRoZSBjb3JyZXNwb25kaW5nIGxpc3QgICovDQotICAvKiAgICBpcyBlbXB0eS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGUgbGFzdCBpdGVtIGluIHRoZSBhcnJheSBpc34wOyB0aGUgYXJyYXkgaXMgb3duZWQgYnkgdGhlICAgICAgICAgKi8NCi0gIC8qICAgIEBGVF9GYWNlIG9iamVjdCBidXQgY2FuIGJlIG92ZXJ3cml0dGVuIG9yIHJlbGVhc2VkIG9uIHRoZSBuZXh0ICAgICAqLw0KLSAgLyogICAgY2FsbCB0byBhIEZyZWVUeXBlIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxTaW5jZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgMi4zLjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIEZUX0VYUE9SVCggRlRfVUludDMyKiApDQotICBGVF9GYWNlX0dldFZhcmlhbnRzT2ZDaGFyKCBGVF9GYWNlICAgZmFjZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICBjaGFyY29kZSApOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRmFjZV9HZXRDaGFyc09mVmFyaWFudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgUmV0dXJuIGEgemVyby10ZXJtaW5hdGVkIGxpc3Qgb2YgVW5pY29kZSBjaGFyYWN0ZXIgY29kZXMgZm91bmQgZm9yICovDQotICAvKiAgICB0aGUgc3BlY2lmaWVkIHZhcmlhbnQgc2VsZWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmYWNlIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICB2YXJpYW50U2VsZWN0b3IgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgVGhlIHZhcmlhbnQgc2VsZWN0b3IgY29kZSBwb2ludCBpbiBVbmljb2RlLiAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEEgbGlzdCBvZiBhbGwgdGhlIGNvZGUgcG9pbnRzIHdoaWNoIGFyZSBzcGVjaWZpZWQgYnkgdGhpcyBzZWxlY3RvciAqLw0KLSAgLyogICAgKGJvdGggZGVmYXVsdCBhbmQgbm9uLWRlZmF1bHQgY29kZXMgYXJlIHJldHVybmVkKSBvciBOVUxMIGlmIHRoZXJlICovDQotICAvKiAgICBpcyBubyB2YWxpZCBjbWFwIG9yIHRoZSB2YXJpYW50IHNlbGVjdG9yIGlzIGludmFsaWQuICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGUgbGFzdCBpdGVtIGluIHRoZSBhcnJheSBpc34wOyB0aGUgYXJyYXkgaXMgb3duZWQgYnkgdGhlICAgICAgICAgKi8NCi0gIC8qICAgIEBGVF9GYWNlIG9iamVjdCBidXQgY2FuIGJlIG92ZXJ3cml0dGVuIG9yIHJlbGVhc2VkIG9uIHRoZSBuZXh0ICAgICAqLw0KLSAgLyogICAgY2FsbCB0byBhIEZyZWVUeXBlIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxTaW5jZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgMi4zLjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIEZUX0VYUE9SVCggRlRfVUludDMyKiApDQotICBGVF9GYWNlX0dldENoYXJzT2ZWYXJpYW50KCBGVF9GYWNlICAgZmFjZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICB2YXJpYW50U2VsZWN0b3IgKTsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGNvbXB1dGF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIENvbXB1dGF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIENydW5jaGluZyBmaXhlZCBudW1iZXJzIGFuZCB2ZWN0b3JzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFRoaXMgc2VjdGlvbiBjb250YWlucyB2YXJpb3VzIGZ1bmN0aW9ucyB1c2VkIHRvIHBlcmZvcm0gICAgICAgICAgICAqLw0KLSAgLyogICAgY29tcHV0YXRpb25zIG9uIDE2LjE2IGZpeGVkLWZsb2F0IG51bWJlcnMgb3IgMmQgdmVjdG9ycy4gICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxPcmRlcj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfTXVsRGl2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9NdWxGaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0RpdkZpeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfUm91bmRGaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9DZWlsRml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0Zsb29yRml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfVmVjdG9yX1RyYW5zZm9ybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9NYXRyaXhfTXVsdGlwbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX01hdHJpeF9JbnZlcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX011bERpdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEEgdmVyeSBzaW1wbGUgZnVuY3Rpb24gdXNlZCB0byBwZXJmb3JtIHRoZSBjb21wdXRhdGlvbiBgKGEqYikvYycgICAqLw0KLSAgLyogICAgd2l0aCBtYXhpbXVtIGFjY3VyYWN5IChpdCB1c2VzIGEgNjQtYml0IGludGVybWVkaWF0ZSBpbnRlZ2VyICAgICAgICovDQotICAvKiAgICB3aGVuZXZlciBuZWNlc3NhcnkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVGhpcyBmdW5jdGlvbiBpc24ndCBuZWNlc3NhcmlseSBhcyBmYXN0IGFzIHNvbWUgcHJvY2Vzc29yIHNwZWNpZmljICovDQotICAvKiAgICBvcGVyYXRpb25zLCBidXQgaXMgYXQgbGVhc3QgY29tcGxldGVseSBwb3J0YWJsZS4gICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBhIDo6IFRoZSBmaXJzdCBtdWx0aXBsaWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGIgOjogVGhlIHNlY29uZCBtdWx0aXBsaWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgYyA6OiBUaGUgZGl2aXNvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVGhlIHJlc3VsdCBvZiBgKGEqYikvYycuICBUaGlzIGZ1bmN0aW9uIG5ldmVyIHRyYXBzIHdoZW4gdHJ5aW5nIHRvICovDQotICAvKiAgICBkaXZpZGUgYnkgemVybzsgaXQgc2ltcGx5IHJldHVybnMgYE1heEludCcgb3IgYE1pbkludCcgZGVwZW5kaW5nICAgKi8NCi0gIC8qICAgIG9uIHRoZSBzaWducyBvZiBgYScgYW5kIGBiJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICBGVF9FWFBPUlQoIEZUX0xvbmcgKQ0KLSAgRlRfTXVsRGl2KCBGVF9Mb25nICBhLA0KLSAgICAgICAgICAgICBGVF9Mb25nICBiLA0KLSAgICAgICAgICAgICBGVF9Mb25nICBjICk7DQotDQotDQotICAvKiAqLw0KLQ0KLSAgLyogVGhlIGZvbGxvd2luZyAjaWYgMCAuLi4gI2VuZGlmIGlzIGZvciB0aGUgZG9jdW1lbnRhdGlvbiBmb3JtYXR0ZXIsICovDQotICAvKiBoaWRpbmcgdGhlIGludGVybmFsIGBGVF9NVUxGSVhfSU5MSU5FRCcgbWFjcm8uICAgICAgICAgICAgICAgICAgICAgKi8NCi0NCi0jaWYgMA0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfTXVsRml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgQSB2ZXJ5IHNpbXBsZSBmdW5jdGlvbiB1c2VkIHRvIHBlcmZvcm0gdGhlIGNvbXB1dGF0aW9uICAgICAgICAgICAgICovDQotICAvKiAgICBgKGEqYikvMHgxMDAwMCcgd2l0aCBtYXhpbXVtIGFjY3VyYWN5LiAgTW9zdCBvZiB0aGUgdGltZSB0aGlzIGlzICAgKi8NCi0gIC8qICAgIHVzZWQgdG8gbXVsdGlwbHkgYSBnaXZlbiB2YWx1ZSBieSBhIDE2LjE2IGZpeGVkLXBvaW50IGZhY3Rvci4gICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGEgOjogVGhlIGZpcnN0IG11bHRpcGxpZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgYiA6OiBUaGUgc2Vjb25kIG11bHRpcGxpZXIuICBVc2UgYSAxNi4xNiBmYWN0b3IgaGVyZSB3aGVuZXZlciAgICAgICovDQotICAvKiAgICAgICAgIHBvc3NpYmxlIChzZWUgbm90ZSBiZWxvdykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGUgcmVzdWx0IG9mIGAoYSpiKS8weDEwMDAwJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGlzIGZ1bmN0aW9uIGhhcyBiZWVuIG9wdGltaXplZCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIGFic29sdXRlICAgKi8NCi0gIC8qICAgIHZhbHVlIG9mIGBhJyBpcyBsZXNzIHRoYW4gMjA0OCwgYW5kIGBiJyBpcyBhIDE2LjE2IHNjYWxpbmcgZmFjdG9yLiAqLw0KLSAgLyogICAgQXMgdGhpcyBoYXBwZW5zIG1haW5seSB3aGVuIHNjYWxpbmcgZnJvbSBub3Rpb25hbCB1bml0cyB0byAgICAgICAgICovDQotICAvKiAgICBmcmFjdGlvbmFsIHBpeGVscyBpbiBGcmVlVHlwZSwgaXQgcmVzdWx0ZWQgaW4gbm90aWNlYWJsZSBzcGVlZCAgICAgKi8NCi0gIC8qICAgIGltcHJvdmVtZW50cyBiZXR3ZWVuIHZlcnNpb25zIDIueCBhbmQgMS54LiAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBBcyBhIGNvbmNsdXNpb24sIGFsd2F5cyB0cnkgdG8gcGxhY2UgYSAxNi4xNiBmYWN0b3IgYXMgdGhlICAgICAgICAgKi8NCi0gIC8qICAgIF9zZWNvbmRfIGFyZ3VtZW50IG9mIHRoaXMgZnVuY3Rpb247IHRoaXMgY2FuIG1ha2UgYSBncmVhdCAgICAgICAgICAqLw0KLSAgLyogICAgZGlmZmVyZW5jZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIEZUX0VYUE9SVCggRlRfTG9uZyApDQotICBGVF9NdWxGaXgoIEZUX0xvbmcgIGEsDQotICAgICAgICAgICAgIEZUX0xvbmcgIGIgKTsNCi0NCi0gIC8qICovDQotI2VuZGlmDQotDQotI2lmZGVmIEZUX01VTEZJWF9JTkxJTkVEDQotI2RlZmluZSBGUERGQVBJX0ZUX011bEZpeCggYSwgYiApICBGVF9NVUxGSVhfSU5MSU5FRCggYSwgYiApDQotI2Vsc2UNCi0gIEZUX0VYUE9SVCggRlRfTG9uZyApDQotICBGVF9NdWxGaXgoIEZUX0xvbmcgIGEsDQotICAgICAgICAgICAgIEZUX0xvbmcgIGIgKTsNCi0jZW5kaWYNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0RpdkZpeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEEgdmVyeSBzaW1wbGUgZnVuY3Rpb24gdXNlZCB0byBwZXJmb3JtIHRoZSBjb21wdXRhdGlvbiAgICAgICAgICAgICAqLw0KLSAgLyogICAgYChhKjB4MTAwMDApL2InIHdpdGggbWF4aW11bSBhY2N1cmFjeS4gIE1vc3Qgb2YgdGhlIHRpbWUsIHRoaXMgaXMgICovDQotICAvKiAgICB1c2VkIHRvIGRpdmlkZSBhIGdpdmVuIHZhbHVlIGJ5IGEgMTYuMTYgZml4ZWQtcG9pbnQgZmFjdG9yLiAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBhIDo6IFRoZSBmaXJzdCBtdWx0aXBsaWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGIgOjogVGhlIHNlY29uZCBtdWx0aXBsaWVyLiAgVXNlIGEgMTYuMTYgZmFjdG9yIGhlcmUgd2hlbmV2ZXIgICAgICAqLw0KLSAgLyogICAgICAgICBwb3NzaWJsZSAoc2VlIG5vdGUgYmVsb3cpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVGhlIHJlc3VsdCBvZiBgKGEqMHgxMDAwMCkvYicuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVGhlIG9wdGltaXphdGlvbiBmb3IgRlRfRGl2Rml4KCkgaXMgc2ltcGxlOiBJZiAoYX48PH4xNikgZml0cyBpbiAgICovDQotICAvKiAgICAzMn5iaXRzLCB0aGVuIHRoZSBkaXZpc2lvbiBpcyBjb21wdXRlZCBkaXJlY3RseS4gIE90aGVyd2lzZSwgd2UgICAgKi8NCi0gIC8qICAgIHVzZSBhIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgQEZUX011bERpdi4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICBGVF9FWFBPUlQoIEZUX0xvbmcgKQ0KLSAgRlRfRGl2Rml4KCBGVF9Mb25nICBhLA0KLSAgICAgICAgICAgICBGVF9Mb25nICBiICk7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9Sb3VuZEZpeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBBIHZlcnkgc2ltcGxlIGZ1bmN0aW9uIHVzZWQgdG8gcm91bmQgYSAxNi4xNiBmaXhlZCBudW1iZXIuICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBhIDo6IFRoZSBudW1iZXIgdG8gYmUgcm91bmRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGUgcmVzdWx0IG9mIGAoYSArIDB4ODAwMCkgJiAtMHgxMDAwMCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgRlRfRVhQT1JUKCBGVF9GaXhlZCApDQotICBGVF9Sb3VuZEZpeCggRlRfRml4ZWQgIGEgKTsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0NlaWxGaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEEgdmVyeSBzaW1wbGUgZnVuY3Rpb24gdXNlZCB0byBjb21wdXRlIHRoZSBjZWlsaW5nIGZ1bmN0aW9uIG9mIGEgICAqLw0KLSAgLyogICAgMTYuMTYgZml4ZWQgbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgYSA6OiBUaGUgbnVtYmVyIGZvciB3aGljaCB0aGUgY2VpbGluZyBmdW5jdGlvbiBpcyB0byBiZSBjb21wdXRlZC4gICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVGhlIHJlc3VsdCBvZiBgKGEgKyAweDEwMDAwIC0gMSkgJiAtMHgxMDAwMCcuICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIEZUX0VYUE9SVCggRlRfRml4ZWQgKQ0KLSAgRlRfQ2VpbEZpeCggRlRfRml4ZWQgIGEgKTsNCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEZUX0Zsb29yRml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEEgdmVyeSBzaW1wbGUgZnVuY3Rpb24gdXNlZCB0byBjb21wdXRlIHRoZSBmbG9vciBmdW5jdGlvbiBvZiBhICAgICAqLw0KLSAgLyogICAgMTYuMTYgZml4ZWQgbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgYSA6OiBUaGUgbnVtYmVyIGZvciB3aGljaCB0aGUgZmxvb3IgZnVuY3Rpb24gaXMgdG8gYmUgY29tcHV0ZWQuICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgVGhlIHJlc3VsdCBvZiBgYSAmIC0weDEwMDAwJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIEZUX0VYUE9SVCggRlRfRml4ZWQgKQ0KLSAgRlRfRmxvb3JGaXgoIEZUX0ZpeGVkICBhICk7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9WZWN0b3JfVHJhbnNmb3JtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUcmFuc2Zvcm0gYSBzaW5nbGUgdmVjdG9yIHRocm91Z2ggYSAyeDIgbWF0cml4LiAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICB2ZWN0b3IgOjogVGhlIHRhcmdldCB2ZWN0b3IgdG8gdHJhbnNmb3JtLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBtYXRyaXggOjogQSBwb2ludGVyIHRvIHRoZSBzb3VyY2UgMngyIG1hdHJpeC4gICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGUgcmVzdWx0IGlzIHVuZGVmaW5lZCBpZiBlaXRoZXIgYHZlY3Rvcicgb3IgYG1hdHJpeCcgaXMgaW52YWxpZC4gKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgRlRfRVhQT1JUKCB2b2lkICkNCi0gIEZUX1ZlY3Rvcl9UcmFuc2Zvcm0oIEZUX1ZlY3RvciogICAgICAgIHZlYywNCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX01hdHJpeCogIG1hdHJpeCApOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRnJlZVR5cGUgVmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRnVuY3Rpb25zIGFuZCBtYWNyb3MgcmVsYXRlZCB0byBGcmVlVHlwZSB2ZXJzaW9ucy4gICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgTm90ZSB0aGF0IHRob3NlIGZ1bmN0aW9ucyBhbmQgbWFjcm9zIGFyZSBvZiBsaW1pdGVkIHVzZSBiZWNhdXNlICAgICovDQotICAvKiAgICBldmVuIGEgbmV3IHJlbGVhc2Ugb2YgRnJlZVR5cGUgd2l0aCBvbmx5IGRvY3VtZW50YXRpb24gY2hhbmdlcyAgICAgKi8NCi0gIC8qICAgIGluY3JlYXNlcyB0aGUgdmVyc2lvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0NCi0gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICAgKg0KLSAgICogQGVudW06DQotICAgKiAgIEZSRUVUWVBFX1hYWA0KLSAgICoNCi0gICAqIEBkZXNjcmlwdGlvbjoNCi0gICAqICAgVGhlc2UgdGhyZWUgbWFjcm9zIGlkZW50aWZ5IHRoZSBGcmVlVHlwZSBzb3VyY2UgY29kZSB2ZXJzaW9uLg0KLSAgICogICBVc2UgQEZUX0xpYnJhcnlfVmVyc2lvbiB0byBhY2Nlc3MgdGhlbSBhdCBydW50aW1lLg0KLSAgICoNCi0gICAqIEB2YWx1ZXM6DQotICAgKiAgIEZSRUVUWVBFX01BSk9SIDo6IFRoZSBtYWpvciB2ZXJzaW9uIG51bWJlci4NCi0gICAqICAgRlJFRVRZUEVfTUlOT1IgOjogVGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyLg0KLSAgICogICBGUkVFVFlQRV9QQVRDSCA6OiBUaGUgcGF0Y2ggbGV2ZWwuDQotICAgKg0KLSAgICogQG5vdGU6DQotICAgKiAgIFRoZSB2ZXJzaW9uIG51bWJlciBvZiBGcmVlVHlwZSBpZiBidWlsdCBhcyBhIGR5bmFtaWMgbGluayBsaWJyYXJ5DQotICAgKiAgIHdpdGggdGhlIGBsaWJ0b29sJyBwYWNrYWdlIGlzIF9ub3RfIGNvbnRyb2xsZWQgYnkgdGhlc2UgdGhyZWUNCi0gICAqICAgbWFjcm9zLg0KLSAgICoNCi0gICAqLw0KLSNkZWZpbmUgRlJFRVRZUEVfTUFKT1IgIDINCi0jZGVmaW5lIEZSRUVUWVBFX01JTk9SICA1DQotI2RlZmluZSBGUkVFVFlQRV9QQVRDSCAgMA0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfTGlicmFyeV9WZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgUmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoZSBGcmVlVHlwZSBsaWJyYXJ5IGJlaW5nIHVzZWQuICBUaGlzIGlzICAgICovDQotICAvKiAgICB1c2VmdWwgd2hlbiBkeW5hbWljYWxseSBsaW5raW5nIHRvIHRoZSBsaWJyYXJ5LCBzaW5jZSBvbmUgY2Fubm90ICAgKi8NCi0gIC8qICAgIHVzZSB0aGUgbWFjcm9zIEBGUkVFVFlQRV9NQUpPUiwgQEZSRUVUWVBFX01JTk9SLCBhbmQgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgQEZSRUVUWVBFX1BBVENILiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgbGlicmFyeSA6OiBBIHNvdXJjZSBsaWJyYXJ5IGhhbmRsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgYW1ham9yICA6OiBUaGUgbWFqb3IgdmVyc2lvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGFtaW5vciAgOjogVGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBhcGF0Y2ggIDo6IFRoZSBwYXRjaCB2ZXJzaW9uIG51bWJlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGUgcmVhc29uIHdoeSB0aGlzIGZ1bmN0aW9uIHRha2VzIGEgYGxpYnJhcnknIGFyZ3VtZW50IGlzIGJlY2F1c2UgKi8NCi0gIC8qICAgIGNlcnRhaW4gcHJvZ3JhbXMgaW1wbGVtZW50IGxpYnJhcnkgaW5pdGlhbGl6YXRpb24gaW4gYSBjdXN0b20gd2F5ICAqLw0KLSAgLyogICAgdGhhdCBkb2Vzbid0IHVzZSBARlRfSW5pdF9GcmVlVHlwZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIEluIHN1Y2ggY2FzZXMsIHRoZSBsaWJyYXJ5IHZlcnNpb24gbWlnaHQgbm90IGJlIGF2YWlsYWJsZSBiZWZvcmUgICAqLw0KLSAgLyogICAgdGhlIGxpYnJhcnkgb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIEZUX0VYUE9SVCggdm9pZCApDQotICBGVF9MaWJyYXJ5X1ZlcnNpb24oIEZUX0xpYnJhcnkgICBsaWJyYXJ5LA0KLSAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAqYW1ham9yLA0KLSAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAqYW1pbm9yLA0KLSAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAqYXBhdGNoICk7DQotDQotDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBGVF9GYWNlX0NoZWNrVHJ1ZVR5cGVQYXRlbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBQYXJzZSBhbGwgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zIG9mIGEgVHJ1ZVR5cGUgZm9udCBmaWxlIHRvIGNoZWNrICAgKi8NCi0gIC8qICAgIHdoZXRoZXIgYW55IG9mIHRoZSBwYXRlbnRlZCBvcGNvZGVzIGFyZSB1c2VkLiAgVGhpcyBpcyBvbmx5IHVzZWZ1bCAqLw0KLSAgLyogICAgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgdGhlIHVucGF0ZW50ZWQgaGludGVyIHdpdGggICAgICAgICAgICovDQotICAvKiAgICBmb250cyB0aGF0IGRvICpub3QqIHVzZSB0aGVzZSBvcGNvZGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gcGFyc2VzICphbGwqIGdseXBoIGluc3RydWN0aW9ucyBpbiB0aGUgICAgICovDQotICAvKiAgICBmb250IGZpbGUsIHdoaWNoIG1heSBiZSBzbG93LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBmYWNlIDo6IEEgZmFjZSBoYW5kbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAxfmlmIHRoaXMgaXMgYSBUcnVlVHlwZSBmb250IHRoYXQgdXNlcyBvbmUgb2YgdGhlIHBhdGVudGVkICAgICAgICAgKi8NCi0gIC8qICAgIG9wY29kZXMsIDB+b3RoZXJ3aXNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIFNpbmNlIE1heSAyMDEwLCBUcnVlVHlwZSBoaW50aW5nIGlzIG5vIGxvbmdlciBwYXRlbnRlZC4gICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIDIuMy41ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICBGVF9FWFBPUlQoIEZUX0Jvb2wgKQ0KLSAgRlRfRmFjZV9DaGVja1RydWVUeXBlUGF0ZW50cyggRlRfRmFjZSAgZmFjZSApOw0KLQ0KLQ0KLSAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRlRfRmFjZV9TZXRVbnBhdGVudGVkSGludGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgRW5hYmxlIG9yIGRpc2FibGUgdGhlIHVucGF0ZW50ZWQgaGludGVyIGZvciBhIGdpdmVuIGZhY2UuICAgICAgICAgICovDQotICAvKiAgICBPbmx5IGVuYWJsZSBpdCBpZiB5b3UgaGF2ZSBkZXRlcm1pbmVkIHRoYXQgdGhlIGZhY2UgZG9lc24ndCAgICAgICAgKi8NCi0gIC8qICAgIHVzZSBhbnkgcGF0ZW50ZWQgb3Bjb2RlcyAoc2VlIEBGVF9GYWNlX0NoZWNrVHJ1ZVR5cGVQYXRlbnRzKS4gICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgIGZhY2UgIDo6IEEgZmFjZSBoYW5kbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICB2YWx1ZSA6OiBOZXcgYm9vbGVhbiBzZXR0aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICBUaGUgb2xkIHNldHRpbmcgdmFsdWUuICBUaGlzIHdpbGwgYWx3YXlzIGJlIGZhbHNlIGlmIHRoaXMgaXMgbm90ICAgKi8NCi0gIC8qICAgIGFuIFNGTlQgZm9udCwgb3IgaWYgdGhlIHVucGF0ZW50ZWQgaGludGVyIGlzIG5vdCBjb21waWxlZCBpbiB0aGlzICAqLw0KLSAgLyogICAgaW5zdGFuY2Ugb2YgdGhlIGxpYnJhcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgU2luY2UgTWF5IDIwMTAsIFRydWVUeXBlIGhpbnRpbmcgaXMgbm8gbG9uZ2VyIHBhdGVudGVkLiAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIC8qIDxTaW5jZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogICAgMi4zLjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQotICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCi0gIEZUX0VYUE9SVCggRlRfQm9vbCApDQotICBGVF9GYWNlX1NldFVucGF0ZW50ZWRIaW50aW5nKCBGVF9GYWNlICBmYWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfQm9vbCAgdmFsdWUgKTsNCi0NCi0gIC8qICovDQotDQotDQotRlRfRU5EX0hFQURFUg0KLQ0KLSNlbmRpZiAvKiBfX0ZSRUVUWVBFX0hfXyAqLw0KLQ0KLQ0KLS8qIEVORCAqLw0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogIGZyZWV0eXBlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICBGcmVlVHlwZSBoaWdoLWxldmVsIEFQSSBhbmQgY29tbW9uIHR5cGVzIChzcGVjaWZpY2F0aW9uIG9ubHkpLiAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBDb3B5cmlnaHQgMTk5Ni0yMDEzIGJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgRGF2aWQgVHVybmVyLCBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsICAgICAgICovCisvKiAgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgICAgICAqLworLyogIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZSAgICAgKi8KKy8qICB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgICAgICAgICAgICAgICovCisvKiAgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0IGZ1bGx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworI2lmbmRlZiBfX0ZSRUVUWVBFX0hfXworI2RlZmluZSBfX0ZSRUVUWVBFX0hfXworCisKKyNpZm5kZWYgRlRfRlJFRVRZUEVfSAorI2Vycm9yICJgZnQyYnVpbGQuaCcgaGFzbid0IGJlZW4gaW5jbHVkZWQgeWV0ISIKKyNlcnJvciAiUGxlYXNlIGFsd2F5cyB1c2UgbWFjcm9zIHRvIGluY2x1ZGUgRnJlZVR5cGUgaGVhZGVyIGZpbGVzLiIKKyNlcnJvciAiRXhhbXBsZToiCisjZXJyb3IgIiAgI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+IgorI2Vycm9yICIgICNpbmNsdWRlIEZUX0ZSRUVUWVBFX0giCisjZW5kaWYKKworCisjaW5jbHVkZSAiLi4vZnQyYnVpbGQuaCIKKyNpbmNsdWRlICJjb25maWcvZnRjb25maWcuaCIKKyNpbmNsdWRlICJmdHR5cGVzLmgiCisjaW5jbHVkZSAiZnRlcnJvcnMuaCIKKworCitGVF9CRUdJTl9IRUFERVIKKworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdXNlcl9hbGxvY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVXNlciBhbGxvY2F0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSG93IGNsaWVudCBhcHBsaWNhdGlvbnMgc2hvdWxkIGFsbG9jYXRlIEZyZWVUeXBlIGRhdGEgc3RydWN0dXJlcy4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgYXNzdW1lcyB0aGF0IHN0cnVjdHVyZXMgYWxsb2NhdGVkIGJ5IHRoZSB1c2VyIGFuZCBwYXNzZWQgICovCisgIC8qICAgIGFzIGFyZ3VtZW50cyBhcmUgemVyb2VkIG91dCBleGNlcHQgZm9yIHRoZSBhY3R1YWwgZGF0YS4gIEluIG90aGVyICAqLworICAvKiAgICB3b3JkcywgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGBjYWxsb2MnIChvciB2YXJpYW50cyBvZiBpdCkgICAgICAgKi8KKyAgLyogICAgaW5zdGVhZCBvZiBgbWFsbG9jJyBmb3IgYWxsb2NhdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICBCIEEgUyBJIEMgICBUIFkgUCBFIFMgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBiYXNlX2ludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBCYXNlIEludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgRnJlZVR5cGV+MiBiYXNlIGZvbnQgaW50ZXJmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBwdWJsaWMgaGlnaC1sZXZlbCBBUEkgb2YgRnJlZVR5cGV+Mi4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPcmRlcj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HbHlwaFNsb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQ2hhck1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0VuY29kaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRmFjZVJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfU0NBTEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRkFDRV9GTEFHX0ZJWEVEX1NJWkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19GSVhFRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRkFDRV9GTEFHX1ZFUlRJQ0FMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19TRk5UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfS0VSTklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRkFDRV9GTEFHX01VTFRJUExFX01BU1RFUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19HTFlQSF9OQU1FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfRVhURVJOQUxfU1RSRUFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRkFDRV9GTEFHX0ZBU1RfR0xZUEhTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19ISU5URVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU1RZTEVfRkxBR19CT0xEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NUWUxFX0ZMQUdfSVRBTElDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2l6ZVJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NpemVfTWV0cmljcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2x5cGhTbG90UmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dseXBoX01ldHJpY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TdWJHbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0JpdG1hcF9TaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfSW5pdF9GcmVlVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0RvbmVfRnJlZVR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTmV3X0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0RvbmVfRmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9OZXdfTWVtb3J5X0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3Blbl9GYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX09wZW5fQXJncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9QYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQXR0YWNoX0ZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0F0dGFjaF9TdHJlYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2V0X0NoYXJfU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NldF9QaXhlbF9TaXplcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SZXF1ZXN0X1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2VsZWN0X1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NpemVfUmVxdWVzdF9UeXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TaXplX1JlcXVlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2V0X1RyYW5zZm9ybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xvYWRfR2x5cGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZXRfQ2hhcl9JbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X05hbWVfSW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xvYWRfQ2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT1BFTl9NRU1PUlkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX09QRU5fU1RSRUFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PUEVOX1BBVEhOQU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT1BFTl9EUklWRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX09QRU5fUEFSQU1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTE9BRF9ERUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xPQURfUkVOREVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MT0FEX01PTk9DSFJPTUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTE9BRF9MSU5FQVJfREVTSUdOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xPQURfTk9fU0NBTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MT0FEX05PX0hJTlRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTE9BRF9OT19CSVRNQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xPQURfQ1JPUF9CSVRNQVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTE9BRF9WRVJUSUNBTF9MQVlPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xPQURfSUdOT1JFX1RSQU5TRk9STSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MT0FEX0lHTk9SRV9HTE9CQUxfQURWQU5DRV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTE9BRF9GT1JDRV9BVVRPSElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xPQURfTk9fUkVDVVJTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MT0FEX1BFREFOVElDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xPQURfVEFSR0VUX05PUk1BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MT0FEX1RBUkdFVF9MSUdIVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTE9BRF9UQVJHRVRfTU9OTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xPQURfVEFSR0VUX0xDRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9MT0FEX1RBUkdFVF9MQ0RfViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1JlbmRlcl9HbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SZW5kZXJfTW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X0tlcm5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0tlcm5pbmdfTW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZXRfVHJhY2tfS2VybmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X0dseXBoX05hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dldF9Qb3N0c2NyaXB0X05hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQ2hhck1hcFJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NlbGVjdF9DaGFybWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TZXRfQ2hhcm1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X0NoYXJtYXBfSW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GU1RZUEVfSU5TVEFMTEFCTEVfRU1CRURESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRlNUWVBFX1JFU1RSSUNURURfTElDRU5TRV9FTUJFRERJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZTVFlQRV9QUkVWSUVXX0FORF9QUklOVF9FTUJFRERJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GU1RZUEVfRURJVEFCTEVfRU1CRURESU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRlNUWVBFX05PX1NVQlNFVFRJTkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZTVFlQRV9CSVRNQVBfRU1CRURESU5HX09OTFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X0ZTVHlwZV9GbGFncyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dseXBoX01ldHJpY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgc3RydWN0dXJlIHVzZWQgdG8gbW9kZWwgdGhlIG1ldHJpY3Mgb2YgYSBzaW5nbGUgZ2x5cGguICBUaGUgICAgICAqLworICAvKiAgICB2YWx1ZXMgYXJlIGV4cHJlc3NlZCBpbiAyNi42IGZyYWN0aW9uYWwgcGl4ZWwgZm9ybWF0OyBpZiB0aGUgZmxhZyAgKi8KKyAgLyogICAgQEZUX0xPQURfTk9fU0NBTEUgaGFzIGJlZW4gdXNlZCB3aGlsZSBsb2FkaW5nIHRoZSBnbHlwaCwgdmFsdWVzICAgICovCisgIC8qICAgIGFyZSBleHByZXNzZWQgaW4gZm9udCB1bml0cyBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHdpZHRoIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSBnbHlwaCdzIHdpZHRoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhlaWdodCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSBnbHlwaCdzIGhlaWdodC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhvcmlCZWFyaW5nWCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIExlZnQgc2lkZSBiZWFyaW5nIGZvciBob3Jpem9udGFsIGxheW91dC4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhvcmlCZWFyaW5nWSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRvcCBzaWRlIGJlYXJpbmcgZm9yIGhvcml6b250YWwgbGF5b3V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhvcmlBZHZhbmNlIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEFkdmFuY2Ugd2lkdGggZm9yIGhvcml6b250YWwgbGF5b3V0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHZlcnRCZWFyaW5nWCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIExlZnQgc2lkZSBiZWFyaW5nIGZvciB2ZXJ0aWNhbCBsYXlvdXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHZlcnRCZWFyaW5nWSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRvcCBzaWRlIGJlYXJpbmcgZm9yIHZlcnRpY2FsIGxheW91dC4gIExhcmdlciBwb3NpdGl2ZSB2YWx1ZXMgICAgKi8KKyAgLyogICAgICBtZWFuIGZ1cnRoZXIgYmVsb3cgdGhlIHZlcnRpY2FsIGdseXBoIG9yaWdpbi4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB2ZXJ0QWR2YW5jZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBBZHZhbmNlIGhlaWdodCBmb3IgdmVydGljYWwgbGF5b3V0LiAgUG9zaXRpdmUgdmFsdWVzIG1lYW4gdGhlICAgICovCisgIC8qICAgICAgZ2x5cGggaGFzIGEgcG9zaXRpdmUgYWR2YW5jZSBkb3dud2FyZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIElmIG5vdCBkaXNhYmxlZCB3aXRoIEBGVF9MT0FEX05PX0hJTlRJTkcsIHRoZSB2YWx1ZXMgcmVwcmVzZW50ICAgICAqLworICAvKiAgICBkaW1lbnNpb25zIG9mIHRoZSBoaW50ZWQgZ2x5cGggKGluIGNhc2UgaGludGluZyBpcyBhcHBsaWNhYmxlKS4gICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFN0cm9raW5nIGEgZ2x5cGggd2l0aCBhbiBvdXRzaWRlIGJvcmRlciBkb2VzIG5vdCBpbmNyZWFzZSAgICAgICAgICAqLworICAvKiAgICBgaG9yaUFkdmFuY2UnIG9yIGB2ZXJ0QWR2YW5jZSc7IHlvdSBoYXZlIHRvIG1hbnVhbGx5IGFkanVzdCB0aGVzZSAgKi8KKyAgLyogICAgdmFsdWVzIHRvIGFjY291bnQgZm9yIHRoZSBhZGRlZCB3aWR0aCBhbmQgaGVpZ2h0LiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfR2x5cGhfTWV0cmljc18KKyAgeworICAgIEZUX1BvcyAgd2lkdGg7CisgICAgRlRfUG9zICBoZWlnaHQ7CisKKyAgICBGVF9Qb3MgIGhvcmlCZWFyaW5nWDsKKyAgICBGVF9Qb3MgIGhvcmlCZWFyaW5nWTsKKyAgICBGVF9Qb3MgIGhvcmlBZHZhbmNlOworCisgICAgRlRfUG9zICB2ZXJ0QmVhcmluZ1g7CisgICAgRlRfUG9zICB2ZXJ0QmVhcmluZ1k7CisgICAgRlRfUG9zICB2ZXJ0QWR2YW5jZTsKKworICB9IEZUX0dseXBoX01ldHJpY3M7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9CaXRtYXBfU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIHN0cnVjdHVyZSBtb2RlbHMgdGhlIG1ldHJpY3Mgb2YgYSBiaXRtYXAgc3RyaWtlIChpLmUuLCBhIHNldCAgKi8KKyAgLyogICAgb2YgZ2x5cGhzIGZvciBhIGdpdmVuIHBvaW50IHNpemUgYW5kIHJlc29sdXRpb24pIGluIGEgYml0bWFwIGZvbnQuICovCisgIC8qICAgIEl0IGlzIHVzZWQgZm9yIHRoZSBgYXZhaWxhYmxlX3NpemVzJyBmaWVsZCBvZiBARlRfRmFjZS4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhlaWdodCA6OiBUaGUgdmVydGljYWwgZGlzdGFuY2UsIGluIHBpeGVscywgYmV0d2VlbiB0d28gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgY29uc2VjdXRpdmUgYmFzZWxpbmVzLiAgSXQgaXMgYWx3YXlzIHBvc2l0aXZlLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHdpZHRoICA6OiBUaGUgYXZlcmFnZSB3aWR0aCwgaW4gcGl4ZWxzLCBvZiBhbGwgZ2x5cGhzIGluIHRoZSAgICAgICAqLworICAvKiAgICAgICAgICAgICAgc3RyaWtlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHNpemUgICA6OiBUaGUgbm9taW5hbCBzaXplIG9mIHRoZSBzdHJpa2UgaW4gMjYuNiBmcmFjdGlvbmFsICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgcG9pbnRzLiAgVGhpcyBmaWVsZCBpcyBub3QgdmVyeSB1c2VmdWwuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHhfcHBlbSA6OiBUaGUgaG9yaXpvbnRhbCBwcGVtIChub21pbmFsIHdpZHRoKSBpbiAyNi42IGZyYWN0aW9uYWwgICAqLworICAvKiAgICAgICAgICAgICAgcGl4ZWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHlfcHBlbSA6OiBUaGUgdmVydGljYWwgcHBlbSAobm9taW5hbCBoZWlnaHQpIGluIDI2LjYgZnJhY3Rpb25hbCAgICAqLworICAvKiAgICAgICAgICAgICAgcGl4ZWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBXaW5kb3dzIEZOVDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGUgbm9taW5hbCBzaXplIGdpdmVuIGluIGEgRk5UIGZvbnQgaXMgbm90IHJlbGlhYmxlLiAgVGh1cyB3aGVuICovCisgIC8qICAgICAgdGhlIGRyaXZlciBmaW5kcyBpdCBpbmNvcnJlY3QsIGl0IHNldHMgYHNpemUnIHRvIHNvbWUgY2FsY3VsYXRlZCAqLworICAvKiAgICAgIHZhbHVlcyBhbmQgc2V0cyBgeF9wcGVtJyBhbmQgYHlfcHBlbScgdG8gdGhlIHBpeGVsIHdpZHRoIGFuZCAgICAgKi8KKyAgLyogICAgICBoZWlnaHQgZ2l2ZW4gaW4gdGhlIGZvbnQsIHJlc3BlY3RpdmVseS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUcnVlVHlwZSBlbWJlZGRlZCBiaXRtYXBzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBgc2l6ZScsIGB3aWR0aCcsIGFuZCBgaGVpZ2h0JyB2YWx1ZXMgYXJlIG5vdCBjb250YWluZWQgaW4gdGhlICAgICovCisgIC8qICAgICAgYml0bWFwIHN0cmlrZSBpdHNlbGYuICBUaGV5IGFyZSBjb21wdXRlZCBmcm9tIHRoZSBnbG9iYWwgZm9udCAgICAqLworICAvKiAgICAgIHBhcmFtZXRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9CaXRtYXBfU2l6ZV8KKyAgeworICAgIEZUX1Nob3J0ICBoZWlnaHQ7CisgICAgRlRfU2hvcnQgIHdpZHRoOworCisgICAgRlRfUG9zICAgIHNpemU7CisKKyAgICBGVF9Qb3MgICAgeF9wcGVtOworICAgIEZUX1BvcyAgICB5X3BwZW07CisKKyAgfSBGVF9CaXRtYXBfU2l6ZTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgTyBCIEogRSBDIFQgICBDIEwgQSBTIFMgRSBTICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xpYnJhcnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGEgRnJlZVR5cGUgbGlicmFyeSBpbnN0YW5jZS4gIEVhY2ggYGxpYnJhcnknIGlzICAgICAgICAqLworICAvKiAgICBjb21wbGV0ZWx5IGluZGVwZW5kZW50IGZyb20gdGhlIG90aGVyczsgaXQgaXMgdGhlIGByb290JyBvZiBhIHNldCAgKi8KKyAgLyogICAgb2Ygb2JqZWN0cyBsaWtlIGZvbnRzLCBmYWNlcywgc2l6ZXMsIGV0Yy4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJdCBhbHNvIGVtYmVkcyBhIG1lbW9yeSBtYW5hZ2VyIChzZWUgQEZUX01lbW9yeSksIGFzIHdlbGwgYXMgYSAgICAgKi8KKyAgLyogICAgc2Nhbi1saW5lIGNvbnZlcnRlciBvYmplY3QgKHNlZSBARlRfUmFzdGVyKS4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJbiBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbnMsIG1ha2Ugc3VyZSB0aGF0IHRoZSBzYW1lIEZUX0xpYnJhcnkgKi8KKyAgLyogICAgb2JqZWN0IG9yIGFueSBvZiBpdHMgY2hpbGRyZW4gZG9lc24ndCBnZXQgYWNjZXNzZWQgaW4gcGFyYWxsZWwuICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTGlicmFyeSBvYmplY3RzIGFyZSBub3JtYWxseSBjcmVhdGVkIGJ5IEBGVF9Jbml0X0ZyZWVUeXBlLCBhbmQgICAgICovCisgIC8qICAgIGRlc3Ryb3llZCB3aXRoIEBGVF9Eb25lX0ZyZWVUeXBlLiAgSWYgeW91IG5lZWQgcmVmZXJlbmNlLWNvdW50aW5nICAqLworICAvKiAgICAoY2YuIEBGVF9SZWZlcmVuY2VfTGlicmFyeSksIHVzZSBARlRfTmV3X0xpYnJhcnkgYW5kICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQEZUX0RvbmVfTGlicmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCBGVF9MaWJyYXJ5UmVjXyAgKkZUX0xpYnJhcnk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Nb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGhhbmRsZSB0byBhIGdpdmVuIEZyZWVUeXBlIG1vZHVsZSBvYmplY3QuICBFYWNoIG1vZHVsZSBjYW4gYmUgYSAgKi8KKyAgLyogICAgZm9udCBkcml2ZXIsIGEgcmVuZGVyZXIsIG9yIGFueXRoaW5nIGVsc2UgdGhhdCBwcm92aWRlcyBzZXJ2aWNlcyAgICovCisgIC8qICAgIHRvIHRoZSBmb3JtZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgRlRfTW9kdWxlUmVjXyogIEZUX01vZHVsZTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0RyaXZlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGEgZ2l2ZW4gRnJlZVR5cGUgZm9udCBkcml2ZXIgb2JqZWN0LiAgRWFjaCBmb250IGRyaXZlciAqLworICAvKiAgICBpcyBhIHNwZWNpYWwgbW9kdWxlIGNhcGFibGUgb2YgY3JlYXRpbmcgZmFjZXMgZnJvbSBmb250IGZpbGVzLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0IEZUX0RyaXZlclJlY18qICBGVF9Ecml2ZXI7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SZW5kZXJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGhhbmRsZSB0byBhIGdpdmVuIEZyZWVUeXBlIHJlbmRlcmVyLiAgQSByZW5kZXJlciBpcyBhIHNwZWNpYWwgICAgKi8KKyAgLyogICAgbW9kdWxlIGluIGNoYXJnZSBvZiBjb252ZXJ0aW5nIGEgZ2x5cGggaW1hZ2UgdG8gYSBiaXRtYXAsIHdoZW4gICAgICovCisgIC8qICAgIG5lY2Vzc2FyeS4gIEVhY2ggcmVuZGVyZXIgc3VwcG9ydHMgYSBnaXZlbiBnbHlwaCBpbWFnZSBmb3JtYXQsIGFuZCAqLworICAvKiAgICBvbmUgb3IgbW9yZSB0YXJnZXQgc3VyZmFjZSBkZXB0aHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0IEZUX1JlbmRlcmVyUmVjXyogIEZUX1JlbmRlcmVyOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBoYW5kbGUgdG8gYSBnaXZlbiB0eXBvZ3JhcGhpYyBmYWNlIG9iamVjdC4gIEEgZmFjZSBvYmplY3QgbW9kZWxzICovCisgIC8qICAgIGEgZ2l2ZW4gdHlwZWZhY2UsIGluIGEgZ2l2ZW4gc3R5bGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEVhY2ggZmFjZSBvYmplY3QgYWxzbyBvd25zIGEgc2luZ2xlIEBGVF9HbHlwaFNsb3Qgb2JqZWN0LCBhcyB3ZWxsICAqLworICAvKiAgICBhcyBvbmUgb3IgbW9yZSBARlRfU2l6ZSBvYmplY3RzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFVzZSBARlRfTmV3X0ZhY2Ugb3IgQEZUX09wZW5fRmFjZSB0byBjcmVhdGUgYSBuZXcgZmFjZSBvYmplY3QgZnJvbSAqLworICAvKiAgICBhIGdpdmVuIGZpbGVwYXRobmFtZSBvciBhIGN1c3RvbSBpbnB1dCBzdHJlYW0uICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFVzZSBARlRfRG9uZV9GYWNlIHRvIGRlc3Ryb3kgaXQgKGFsb25nIHdpdGggaXRzIHNsb3QgYW5kIHNpemVzKS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEFsc28+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNlZSBARlRfRmFjZVJlYyBmb3IgdGhlIHB1YmxpY2x5IGFjY2Vzc2libGUgZmllbGRzIG9mIGEgZ2l2ZW4gZmFjZSAqLworICAvKiAgICBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0IEZUX0ZhY2VSZWNfKiAgRlRfRmFjZTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGFuIG9iamVjdCB1c2VkIHRvIG1vZGVsIGEgZmFjZSBzY2FsZWQgdG8gYSBnaXZlbiAgICAgICAqLworICAvKiAgICBjaGFyYWN0ZXIgc2l6ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBFYWNoIEBGVF9GYWNlIGhhcyBhbiBfYWN0aXZlXyBARlRfU2l6ZSBvYmplY3QgdGhhdCBpcyB1c2VkIGJ5ICAgICAgKi8KKyAgLyogICAgZnVuY3Rpb25zIGxpa2UgQEZUX0xvYWRfR2x5cGggdG8gZGV0ZXJtaW5lIHRoZSBzY2FsaW5nICAgICAgICAgICAgICovCisgIC8qICAgIHRyYW5zZm9ybWF0aW9uIHdoaWNoIGlzIHVzZWQgdG8gbG9hZCBhbmQgaGludCBnbHlwaHMgYW5kIG1ldHJpY3MuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgWW91IGNhbiB1c2UgQEZUX1NldF9DaGFyX1NpemUsIEBGVF9TZXRfUGl4ZWxfU2l6ZXMsICAgICAgICAgICAgICAgICovCisgIC8qICAgIEBGVF9SZXF1ZXN0X1NpemUgb3IgZXZlbiBARlRfU2VsZWN0X1NpemUgdG8gY2hhbmdlIHRoZSBjb250ZW50ICAgICAqLworICAvKiAgICAoaS5lLiwgdGhlIHNjYWxpbmcgdmFsdWVzKSBvZiB0aGUgYWN0aXZlIEBGVF9TaXplLiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFlvdSBjYW4gdXNlIEBGVF9OZXdfU2l6ZSB0byBjcmVhdGUgYWRkaXRpb25hbCBzaXplIG9iamVjdHMgZm9yIGEgICAqLworICAvKiAgICBnaXZlbiBARlRfRmFjZSwgYnV0IHRoZXkgd29uJ3QgYmUgdXNlZCBieSBvdGhlciBmdW5jdGlvbnMgdW50aWwgICAgKi8KKyAgLyogICAgeW91IGFjdGl2YXRlIGl0IHRocm91Z2ggQEZUX0FjdGl2YXRlX1NpemUuICBPbmx5IG9uZSBzaXplIGNhbiBiZSAgICovCisgIC8qICAgIGFjdGl2YXRlZCBhdCBhbnkgZ2l2ZW4gdGltZSBwZXIgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEFsc28+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNlZSBARlRfU2l6ZVJlYyBmb3IgdGhlIHB1YmxpY2x5IGFjY2Vzc2libGUgZmllbGRzIG9mIGEgZ2l2ZW4gc2l6ZSAqLworICAvKiAgICBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0IEZUX1NpemVSZWNfKiAgRlRfU2l6ZTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFR5cGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dseXBoU2xvdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGEgZ2l2ZW4gYGdseXBoIHNsb3QnLiAgQSBzbG90IGlzIGEgY29udGFpbmVyIHdoZXJlIGl0ICAqLworICAvKiAgICBpcyBwb3NzaWJsZSB0byBsb2FkIGFueSBvZiB0aGUgZ2x5cGhzIGNvbnRhaW5lZCBpbiBpdHMgcGFyZW50ICAgICAgKi8KKyAgLyogICAgZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJbiBvdGhlciB3b3JkcywgZWFjaCB0aW1lIHlvdSBjYWxsIEBGVF9Mb2FkX0dseXBoIG9yICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQEZUX0xvYWRfQ2hhciwgdGhlIHNsb3QncyBjb250ZW50IGlzIGVyYXNlZCBieSB0aGUgbmV3IGdseXBoIGRhdGEsICovCisgIC8qICAgIGkuZS4sIHRoZSBnbHlwaCdzIG1ldHJpY3MsIGl0cyBpbWFnZSAoYml0bWFwIG9yIG91dGxpbmUpLCBhbmQgICAgICAqLworICAvKiAgICBvdGhlciBjb250cm9sIGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxBbHNvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTZWUgQEZUX0dseXBoU2xvdFJlYyBmb3IgdGhlIHB1YmxpY2x5IGFjY2Vzc2libGUgZ2x5cGggZmllbGRzLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0IEZUX0dseXBoU2xvdFJlY18qICBGVF9HbHlwaFNsb3Q7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9DaGFyTWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGhhbmRsZSB0byBhIGdpdmVuIGNoYXJhY3RlciBtYXAuICBBIGNoYXJtYXAgaXMgdXNlZCB0byB0cmFuc2xhdGUgKi8KKyAgLyogICAgY2hhcmFjdGVyIGNvZGVzIGluIGEgZ2l2ZW4gZW5jb2RpbmcgaW50byBnbHlwaCBpbmRleGVzIGZvciBpdHMgICAgICovCisgIC8qICAgIHBhcmVudCdzIGZhY2UuICBTb21lIGZvbnQgZm9ybWF0cyBtYXkgcHJvdmlkZSBzZXZlcmFsIGNoYXJtYXBzIHBlciAqLworICAvKiAgICBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEVhY2ggZmFjZSBvYmplY3Qgb3ducyB6ZXJvIG9yIG1vcmUgY2hhcm1hcHMsIGJ1dCBvbmx5IG9uZSBvZiB0aGVtICAqLworICAvKiAgICBjYW4gYmUgYGFjdGl2ZScgYW5kIHVzZWQgYnkgQEZUX0dldF9DaGFyX0luZGV4IG9yIEBGVF9Mb2FkX0NoYXIuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBsaXN0IG9mIGF2YWlsYWJsZSBjaGFybWFwcyBpbiBhIGZhY2UgaXMgYXZhaWxhYmxlIHRocm91Z2ggdGhlICAqLworICAvKiAgICBgZmFjZS0+bnVtX2NoYXJtYXBzJyBhbmQgYGZhY2UtPmNoYXJtYXBzJyBmaWVsZHMgb2YgQEZUX0ZhY2VSZWMuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBjdXJyZW50bHkgYWN0aXZlIGNoYXJtYXAgaXMgYXZhaWxhYmxlIGFzIGBmYWNlLT5jaGFybWFwJy4gICAgICAqLworICAvKiAgICBZb3Ugc2hvdWxkIGNhbGwgQEZUX1NldF9DaGFybWFwIHRvIGNoYW5nZSBpdC4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBXaGVuIGEgbmV3IGZhY2UgaXMgY3JlYXRlZCAoZWl0aGVyIHRocm91Z2ggQEZUX05ld19GYWNlIG9yICAgICAgICAgKi8KKyAgLyogICAgQEZUX09wZW5fRmFjZSksIHRoZSBsaWJyYXJ5IGxvb2tzIGZvciBhIFVuaWNvZGUgY2hhcm1hcCB3aXRoaW4gICAgICovCisgIC8qICAgIHRoZSBsaXN0IGFuZCBhdXRvbWF0aWNhbGx5IGFjdGl2YXRlcyBpdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEFsc28+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNlZSBARlRfQ2hhck1hcFJlYyBmb3IgdGhlIHB1YmxpY2x5IGFjY2Vzc2libGUgZmllbGRzIG9mIGEgZ2l2ZW4gICAqLworICAvKiAgICBjaGFyYWN0ZXIgbWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0IEZUX0NoYXJNYXBSZWNfKiAgRlRfQ2hhck1hcDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE1hY3JvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0VOQ19UQUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgbWFjcm8gY29udmVydHMgZm91ci1sZXR0ZXIgdGFncyBpbnRvIGFuIHVuc2lnbmVkIGxvbmcuICBJdCBpcyAqLworICAvKiAgICB1c2VkIHRvIGRlZmluZSBgZW5jb2RpbmcnIGlkZW50aWZpZXJzIChzZWUgQEZUX0VuY29kaW5nKS4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBTaW5jZSBtYW55IDE2LWJpdCBjb21waWxlcnMgZG9uJ3QgbGlrZSAzMi1iaXQgZW51bWVyYXRpb25zLCB5b3UgICAgKi8KKyAgLyogICAgc2hvdWxkIHJlZGVmaW5lIHRoaXMgbWFjcm8gaW4gY2FzZSBvZiBwcm9ibGVtcyB0byBzb21ldGhpbmcgbGlrZSAgICovCisgIC8qICAgIHRoaXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgI2RlZmluZSBGVF9FTkNfVEFHKCB2YWx1ZSwgYSwgYiwgYywgZCApICB2YWx1ZSAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHRvIGdldCBhIHNpbXBsZSBlbnVtZXJhdGlvbiB3aXRob3V0IGFzc2lnbmluZyBzcGVjaWFsIG51bWJlcnMuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2lmbmRlZiBGVF9FTkNfVEFHCisjZGVmaW5lIEZUX0VOQ19UQUcoIHZhbHVlLCBhLCBiLCBjLCBkICkgICAgICAgICBcCisgICAgICAgICAgdmFsdWUgPSAoICggKEZUX1VJbnQzMikoYSkgPDwgMjQgKSB8ICBcCisgICAgICAgICAgICAgICAgICAgICggKEZUX1VJbnQzMikoYikgPDwgMTYgKSB8ICBcCisgICAgICAgICAgICAgICAgICAgICggKEZUX1VJbnQzMikoYykgPDwgIDggKSB8ICBcCisgICAgICAgICAgICAgICAgICAgICAgKEZUX1VJbnQzMikoZCkgICAgICAgICApCisKKyNlbmRpZiAvKiBGVF9FTkNfVEFHICovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxFbnVtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9FbmNvZGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbiBlbnVtZXJhdGlvbiB1c2VkIHRvIHNwZWNpZnkgY2hhcmFjdGVyIHNldHMgc3VwcG9ydGVkIGJ5ICAgICAgICAgKi8KKyAgLyogICAgY2hhcm1hcHMuICBVc2VkIGluIHRoZSBARlRfU2VsZWN0X0NoYXJtYXAgQVBJIGZ1bmN0aW9uLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRGVzcGl0ZSB0aGUgbmFtZSwgdGhpcyBlbnVtZXJhdGlvbiBsaXN0cyBzcGVjaWZpYyBjaGFyYWN0ZXIgICAgICAgICovCisgIC8qICAgIHJlcGVydG9yaWVzIChpLmUuLCBjaGFyc2V0cyksIGFuZCBub3QgdGV4dCBlbmNvZGluZyBtZXRob2RzIChlLmcuLCAqLworICAvKiAgICBVVEYtOCwgVVRGLTE2LCBldGMuKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE90aGVyIGVuY29kaW5ncyBtaWdodCBiZSBkZWZpbmVkIGluIHRoZSBmdXR1cmUuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFZhbHVlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0VOQ09ESU5HX05PTkUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSBlbmNvZGluZyB2YWx1ZX4wIGlzIHJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0VOQ09ESU5HX1VOSUNPREUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIENvcnJlc3BvbmRzIHRvIHRoZSBVbmljb2RlIGNoYXJhY3RlciBzZXQuICBUaGlzIHZhbHVlIGNvdmVycyAgICAgKi8KKyAgLyogICAgICBhbGwgdmVyc2lvbnMgb2YgdGhlIFVuaWNvZGUgcmVwZXJ0b2lyZSwgaW5jbHVkaW5nIEFTQ0lJIGFuZCAgICAgICovCisgIC8qICAgICAgTGF0aW4tMS4gIE1vc3QgZm9udHMgaW5jbHVkZSBhIFVuaWNvZGUgY2hhcm1hcCwgYnV0IG5vdCBhbGwgICAgICAqLworICAvKiAgICAgIG9mIHRoZW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGFjY2VzcyBVbmljb2RlIHZhbHVlIFUrMUYwMjggKGFuZCAgICAqLworICAvKiAgICAgIHRoZSBmb250IGNvbnRhaW5zIGl0KSwgdXNlIHZhbHVlIDB4MUYwMjggYXMgdGhlIGlucHV0IHZhbHVlIGZvciAgKi8KKyAgLyogICAgICBARlRfR2V0X0NoYXJfSW5kZXguICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9FTkNPRElOR19NU19TWU1CT0wgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBDb3JyZXNwb25kcyB0byB0aGUgTWljcm9zb2Z0IFN5bWJvbCBlbmNvZGluZywgdXNlZCB0byBlbmNvZGUgICAgICovCisgIC8qICAgICAgbWF0aGVtYXRpY2FsIHN5bWJvbHMgaW4gdGhlIDMyLi4yNTUgY2hhcmFjdGVyIGNvZGUgcmFuZ2UuICBGb3IgICAqLworICAvKiAgICAgIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBgaHR0cDovL3d3dy5jZXZpei5uZXQvc3ltYm9sLmh0bScuICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0VOQ09ESU5HX1NKSVMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIENvcnJlc3BvbmRzIHRvIEphcGFuZXNlIFNKSVMgZW5jb2RpbmcuICBNb3JlIGluZm8gYXQgICAgICAgICAgICAgKi8KKyAgLyogICAgICBhdCBgaHR0cDovL2xhbmdzdXBwb3J0LmphcGFucmVmZXJlbmNlLmNvbS9lbmNvZGluZy5zaHRtbCcuICAgICAgICovCisgIC8qICAgICAgU2VlIG5vdGUgb24gbXVsdGktYnl0ZSBlbmNvZGluZ3MgYmVsb3cuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfR0IyMzEyIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQ29ycmVzcG9uZHMgdG8gYW4gZW5jb2Rpbmcgc3lzdGVtIGZvciBTaW1wbGlmaWVkIENoaW5lc2UgYXMgdXNlZCAqLworICAvKiAgICAgIHVzZWQgaW4gbWFpbmxhbmQgQ2hpbmEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0VOQ09ESU5HX0JJRzUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIENvcnJlc3BvbmRzIHRvIGFuIGVuY29kaW5nIHN5c3RlbSBmb3IgVHJhZGl0aW9uYWwgQ2hpbmVzZSBhcyAgICAgKi8KKyAgLyogICAgICB1c2VkIGluIFRhaXdhbiBhbmQgSG9uZyBLb25nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9FTkNPRElOR19XQU5TVU5HIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBDb3JyZXNwb25kcyB0byB0aGUgS29yZWFuIGVuY29kaW5nIHN5c3RlbSBrbm93biBhcyBXYW5zdW5nLiAgICAgICovCisgIC8qICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIGBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS91bmljb2RlLzk0OS50eHQnLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0VOQ09ESU5HX0pPSEFCIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSBLb3JlYW4gc3RhbmRhcmQgY2hhcmFjdGVyIHNldCAoS1N+QyA1NjAxLTE5OTIpLCB3aGljaCAgICAgICAgKi8KKyAgLyogICAgICBjb3JyZXNwb25kcyB0byBNUyBXaW5kb3dzIGNvZGUgcGFnZSAxMzYxLiAgVGhpcyBjaGFyYWN0ZXIgc2V0ICAgICovCisgIC8qICAgICAgaW5jbHVkZXMgYWxsIHBvc3NpYmxlIEhhbmdldWwgY2hhcmFjdGVyIGNvbWJpbmF0aW9ucy4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfQURPQkVfTEFUSU5fMSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQ29ycmVzcG9uZHMgdG8gYSBMYXRpbi0xIGVuY29kaW5nIGFzIGRlZmluZWQgaW4gYSBUeXBlfjEgICAgICAgICAqLworICAvKiAgICAgIFBvc3RTY3JpcHQgZm9udC4gIEl0IGlzIGxpbWl0ZWQgdG8gMjU2IGNoYXJhY3RlciBjb2Rlcy4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0VOQ09ESU5HX0FET0JFX1NUQU5EQVJEIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIENvcnJlc3BvbmRzIHRvIHRoZSBBZG9iZSBTdGFuZGFyZCBlbmNvZGluZywgYXMgZm91bmQgaW4gVHlwZX4xLCAgKi8KKyAgLyogICAgICBDRkYsIGFuZCBPcGVuVHlwZS9DRkYgZm9udHMuICBJdCBpcyBsaW1pdGVkIHRvIDI1NiBjaGFyYWN0ZXIgICAgICovCisgIC8qICAgICAgY29kZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfQURPQkVfRVhQRVJUIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQ29ycmVzcG9uZHMgdG8gdGhlIEFkb2JlIEV4cGVydCBlbmNvZGluZywgYXMgZm91bmQgaW4gVHlwZX4xLCAgICAqLworICAvKiAgICAgIENGRiwgYW5kIE9wZW5UeXBlL0NGRiBmb250cy4gIEl0IGlzIGxpbWl0ZWQgdG8gMjU2IGNoYXJhY3RlciAgICAgKi8KKyAgLyogICAgICBjb2Rlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9FTkNPRElOR19BRE9CRV9DVVNUT00gOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBDb3JyZXNwb25kcyB0byBhIGN1c3RvbSBlbmNvZGluZywgYXMgZm91bmQgaW4gVHlwZX4xLCBDRkYsIGFuZCAgICovCisgIC8qICAgICAgT3BlblR5cGUvQ0ZGIGZvbnRzLiAgSXQgaXMgbGltaXRlZCB0byAyNTYgY2hhcmFjdGVyIGNvZGVzLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfQVBQTEVfUk9NQU4gOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQ29ycmVzcG9uZHMgdG8gdGhlIDgtYml0IEFwcGxlIHJvbWFuIGVuY29kaW5nLiAgTWFueSBUcnVlVHlwZSAgICAqLworICAvKiAgICAgIGFuZCBPcGVuVHlwZSBmb250cyBjb250YWluIGEgY2hhcm1hcCBmb3IgdGhpcyBlbmNvZGluZywgc2luY2UgICAgKi8KKyAgLyogICAgICBvbGRlciB2ZXJzaW9ucyBvZiBNYWMgT1MgYXJlIGFibGUgdG8gdXNlIGl0LiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9FTkNPRElOR19PTERfTEFUSU5fMiA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGlzIHZhbHVlIGlzIGRlcHJlY2F0ZWQgYW5kIHdhcyBuZXZlciB1c2VkIG5vciByZXBvcnRlZCBieSAgICAgICovCisgIC8qICAgICAgRnJlZVR5cGUuICBEb24ndCB1c2Ugb3IgdGVzdCBmb3IgaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfTVNfU0pJUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgU2FtZSBhcyBGVF9FTkNPRElOR19TSklTLiAgRGVwcmVjYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfTVNfR0IyMzEyIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgU2FtZSBhcyBGVF9FTkNPRElOR19HQjIzMTIuICBEZXByZWNhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfTVNfQklHNSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgU2FtZSBhcyBGVF9FTkNPRElOR19CSUc1LiAgRGVwcmVjYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfTVNfV0FOU1VORyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgU2FtZSBhcyBGVF9FTkNPRElOR19XQU5TVU5HLiAgRGVwcmVjYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfTVNfSk9IQUIgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgU2FtZSBhcyBGVF9FTkNPRElOR19KT0hBQi4gIERlcHJlY2F0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEJ5IGRlZmF1bHQsIEZyZWVUeXBlIGF1dG9tYXRpY2FsbHkgc3ludGhlc2l6ZXMgYSBVbmljb2RlIGNoYXJtYXAgICAqLworICAvKiAgICBmb3IgUG9zdFNjcmlwdCBmb250cywgdXNpbmcgdGhlaXIgZ2x5cGggbmFtZXMgZGljdGlvbmFyaWVzLiAgICAgICAgKi8KKyAgLyogICAgSG93ZXZlciwgaXQgYWxzbyByZXBvcnRzIHRoZSBlbmNvZGluZ3MgZGVmaW5lZCBleHBsaWNpdGx5IGluIHRoZSAgICovCisgIC8qICAgIGZvbnQgZmlsZSwgZm9yIHRoZSBjYXNlcyB3aGVuIHRoZXkgYXJlIG5lZWRlZCwgd2l0aCB0aGUgQWRvYmUgICAgICAqLworICAvKiAgICB2YWx1ZXMgYXMgd2VsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0VOQ09ESU5HX05PTkUgaXMgc2V0IGJ5IHRoZSBCREYgYW5kIFBDRiBkcml2ZXJzIGlmIHRoZSBjaGFybWFwICAqLworICAvKiAgICBpcyBuZWl0aGVyIFVuaWNvZGUgbm9yIElTTy04ODU5LTEgKG90aGVyd2lzZSBpdCBpcyBzZXQgdG8gICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfVU5JQ09ERSkuICBVc2UgQEZUX0dldF9CREZfQ2hhcnNldF9JRCB0byBmaW5kIG91dCAgICAgICovCisgIC8qICAgIHdoaWNoIGVuY29kaW5nIGlzIHJlYWxseSBwcmVzZW50LiAgSWYsIGZvciBleGFtcGxlLCB0aGUgICAgICAgICAgICAqLworICAvKiAgICBgY3NfcmVnaXN0cnknIGZpZWxkIGlzIGBLT0k4JyBhbmQgdGhlIGBjc19lbmNvZGluZycgZmllbGQgaXMgYFInLCAgKi8KKyAgLyogICAgdGhlIGZvbnQgaXMgZW5jb2RlZCBpbiBLT0k4LVIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9FTkNPRElOR19OT05FIGlzIGFsd2F5cyBzZXQgKHdpdGggYSBzaW5nbGUgZXhjZXB0aW9uKSBieSB0aGUgICAgKi8KKyAgLyogICAgd2luZm9udHMgZHJpdmVyLiAgVXNlIEBGVF9HZXRfV2luRk5UX0hlYWRlciBhbmQgZXhhbWluZSB0aGUgICAgICAgICovCisgIC8qICAgIGBjaGFyc2V0JyBmaWVsZCBvZiB0aGUgQEZUX1dpbkZOVF9IZWFkZXJSZWMgc3RydWN0dXJlIHRvIGZpbmQgb3V0ICAqLworICAvKiAgICB3aGljaCBlbmNvZGluZyBpcyByZWFsbHkgcHJlc2VudC4gIEZvciBleGFtcGxlLCAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQEZUX1dpbkZOVF9JRF9DUDEyNTEgKDIwNCkgbWVhbnMgV2luZG93cyBjb2RlIHBhZ2UgMTI1MSAoZm9yICAgICAgICovCisgIC8qICAgIFJ1c3NpYW4pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRU5DT0RJTkdfTk9ORSBpcyBzZXQgaWYgYHBsYXRmb3JtX2lkJyBpcyBAVFRfUExBVEZPUk1fTUFDSU5UT1NIICovCisgIC8qICAgIGFuZCBgZW5jb2RpbmdfaWQnIGlzIG5vdCBAVFRfTUFDX0lEX1JPTUFOIChvdGhlcndpc2UgaXQgaXMgc2V0IHRvICAqLworICAvKiAgICBGVF9FTkNPRElOR19BUFBMRV9ST01BTikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIElmIGBwbGF0Zm9ybV9pZCcgaXMgQFRUX1BMQVRGT1JNX01BQ0lOVE9TSCwgdXNlIHRoZSBmdW5jdGlvbiAgICAgICAqLworICAvKiAgICBARlRfR2V0X0NNYXBfTGFuZ3VhZ2VfSUQgIHRvIHF1ZXJ5IHRoZSBNYWMgbGFuZ3VhZ2UgSUQgd2hpY2ggbWF5ICAgKi8KKyAgLyogICAgYmUgbmVlZGVkIHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggQXBwbGUgZW5jb2RpbmcgdmFyaWFudHMuICBTZWUgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL1ZFTkRPUlMvQVBQTEUvUkVBRE1FLlRYVCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHRvIGdldCBhbiBpZGVhIGhvdyB0byBkbyB0aGF0LiAgQmFzaWNhbGx5LCBpZiB0aGUgbGFuZ3VhZ2UgSUQgICAgICAqLworICAvKiAgICBpc34wLCBkb24ndCB1c2UgaXQsIG90aGVyd2lzZSBzdWJ0cmFjdCAxIGZyb20gdGhlIGxhbmd1YWdlIElELiAgICAgKi8KKyAgLyogICAgVGhlbiBleGFtaW5lIGBlbmNvZGluZ19pZCcuICBJZiwgZm9yIGV4YW1wbGUsIGBlbmNvZGluZ19pZCcgaXMgICAgICovCisgIC8qICAgIEBUVF9NQUNfSURfUk9NQU4gYW5kIHRoZSBsYW5ndWFnZSBJRCAobWludXN+MSkgaXMgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBgVFRfTUFDX0xBTkdJRF9HUkVFSycsIGl0IGlzIHRoZSBHcmVlayBlbmNvZGluZywgbm90IFJvbWFuLiAgICAgICAgKi8KKyAgLyogICAgQFRUX01BQ19JRF9BUkFCSUMgd2l0aCBgVFRfTUFDX0xBTkdJRF9GQVJTSScgbWVhbnMgdGhlIEZhcnNpICAgICAgICovCisgIC8qICAgIHZhcmlhbnQgdGhlIEFyYWJpYyBlbmNvZGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBlbnVtICBGVF9FbmNvZGluZ18KKyAgeworICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX05PTkUsIDAsIDAsIDAsIDAgKSwKKworICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX01TX1NZTUJPTCwgJ3MnLCAneScsICdtJywgJ2InICksCisgICAgRlRfRU5DX1RBRyggRlRfRU5DT0RJTkdfVU5JQ09ERSwgICAndScsICduJywgJ2knLCAnYycgKSwKKworICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX1NKSVMsICAgICdzJywgJ2onLCAnaScsICdzJyApLAorICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX0dCMjMxMiwgICdnJywgJ2InLCAnICcsICcgJyApLAorICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX0JJRzUsICAgICdiJywgJ2knLCAnZycsICc1JyApLAorICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX1dBTlNVTkcsICd3JywgJ2EnLCAnbicsICdzJyApLAorICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX0pPSEFCLCAgICdqJywgJ28nLCAnaCcsICdhJyApLAorCisgICAgLyogZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisgICAgRlRfRU5DT0RJTkdfTVNfU0pJUyAgICA9IEZUX0VOQ09ESU5HX1NKSVMsCisgICAgRlRfRU5DT0RJTkdfTVNfR0IyMzEyICA9IEZUX0VOQ09ESU5HX0dCMjMxMiwKKyAgICBGVF9FTkNPRElOR19NU19CSUc1ICAgID0gRlRfRU5DT0RJTkdfQklHNSwKKyAgICBGVF9FTkNPRElOR19NU19XQU5TVU5HID0gRlRfRU5DT0RJTkdfV0FOU1VORywKKyAgICBGVF9FTkNPRElOR19NU19KT0hBQiAgID0gRlRfRU5DT0RJTkdfSk9IQUIsCisKKyAgICBGVF9FTkNfVEFHKCBGVF9FTkNPRElOR19BRE9CRV9TVEFOREFSRCwgJ0EnLCAnRCcsICdPJywgJ0InICksCisgICAgRlRfRU5DX1RBRyggRlRfRU5DT0RJTkdfQURPQkVfRVhQRVJULCAgICdBJywgJ0QnLCAnQicsICdFJyApLAorICAgIEZUX0VOQ19UQUcoIEZUX0VOQ09ESU5HX0FET0JFX0NVU1RPTSwgICAnQScsICdEJywgJ0InLCAnQycgKSwKKyAgICBGVF9FTkNfVEFHKCBGVF9FTkNPRElOR19BRE9CRV9MQVRJTl8xLCAgJ2wnLCAnYScsICd0JywgJzEnICksCisKKyAgICBGVF9FTkNfVEFHKCBGVF9FTkNPRElOR19PTERfTEFUSU5fMiwgJ2wnLCAnYScsICd0JywgJzInICksCisKKyAgICBGVF9FTkNfVEFHKCBGVF9FTkNPRElOR19BUFBMRV9ST01BTiwgJ2EnLCAncicsICdtJywgJ24nICkKKworICB9IEZUX0VuY29kaW5nOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZnRfZW5jb2RpbmdfeHh4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlc2UgY29uc3RhbnRzIGFyZSBkZXByZWNhdGVkOyB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgQEZUX0VuY29kaW5nICovCisgIC8qICAgIHZhbHVlcyBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgZnRfZW5jb2Rpbmdfbm9uZSAgICAgICAgICAgIEZUX0VOQ09ESU5HX05PTkUKKyNkZWZpbmUgZnRfZW5jb2RpbmdfdW5pY29kZSAgICAgICAgIEZUX0VOQ09ESU5HX1VOSUNPREUKKyNkZWZpbmUgZnRfZW5jb2Rpbmdfc3ltYm9sICAgICAgICAgIEZUX0VOQ09ESU5HX01TX1NZTUJPTAorI2RlZmluZSBmdF9lbmNvZGluZ19sYXRpbl8xICAgICAgICAgRlRfRU5DT0RJTkdfQURPQkVfTEFUSU5fMQorI2RlZmluZSBmdF9lbmNvZGluZ19sYXRpbl8yICAgICAgICAgRlRfRU5DT0RJTkdfT0xEX0xBVElOXzIKKyNkZWZpbmUgZnRfZW5jb2Rpbmdfc2ppcyAgICAgICAgICAgIEZUX0VOQ09ESU5HX1NKSVMKKyNkZWZpbmUgZnRfZW5jb2RpbmdfZ2IyMzEyICAgICAgICAgIEZUX0VOQ09ESU5HX0dCMjMxMgorI2RlZmluZSBmdF9lbmNvZGluZ19iaWc1ICAgICAgICAgICAgRlRfRU5DT0RJTkdfQklHNQorI2RlZmluZSBmdF9lbmNvZGluZ193YW5zdW5nICAgICAgICAgRlRfRU5DT0RJTkdfV0FOU1VORworI2RlZmluZSBmdF9lbmNvZGluZ19qb2hhYiAgICAgICAgICAgRlRfRU5DT0RJTkdfSk9IQUIKKworI2RlZmluZSBmdF9lbmNvZGluZ19hZG9iZV9zdGFuZGFyZCAgRlRfRU5DT0RJTkdfQURPQkVfU1RBTkRBUkQKKyNkZWZpbmUgZnRfZW5jb2RpbmdfYWRvYmVfZXhwZXJ0ICAgIEZUX0VOQ09ESU5HX0FET0JFX0VYUEVSVAorI2RlZmluZSBmdF9lbmNvZGluZ19hZG9iZV9jdXN0b20gICAgRlRfRU5DT0RJTkdfQURPQkVfQ1VTVE9NCisjZGVmaW5lIGZ0X2VuY29kaW5nX2FwcGxlX3JvbWFuICAgICBGVF9FTkNPRElOR19BUFBMRV9ST01BTgorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfQ2hhck1hcFJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGJhc2UgY2hhcm1hcCBzdHJ1Y3R1cmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHBhcmVudCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBlbmNvZGluZyAgICA6OiBBbiBARlRfRW5jb2RpbmcgdGFnIGlkZW50aWZ5aW5nIHRoZSBjaGFybWFwLiAgVXNlICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgdGhpcyB3aXRoIEBGVF9TZWxlY3RfQ2hhcm1hcC4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwbGF0Zm9ybV9pZCA6OiBBbiBJRCBudW1iZXIgZGVzY3JpYmluZyB0aGUgcGxhdGZvcm0gZm9yIHRoZSAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgZm9sbG93aW5nIGVuY29kaW5nIElELiAgVGhpcyBjb21lcyBkaXJlY3RseSBmcm9tICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIHRoZSBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uIGFuZCBzaG91bGQgYmUgZW11bGF0ZWQgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBmb3Igb3RoZXIgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGVuY29kaW5nX2lkIDo6IEEgcGxhdGZvcm0gc3BlY2lmaWMgZW5jb2RpbmcgbnVtYmVyLiAgVGhpcyBhbHNvICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBjb21lcyBmcm9tIHRoZSBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uIGFuZCBzaG91bGQgYmUgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgZW11bGF0ZWQgc2ltaWxhcmx5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfQ2hhck1hcFJlY18KKyAgeworICAgIEZUX0ZhY2UgICAgICBmYWNlOworICAgIEZUX0VuY29kaW5nICBlbmNvZGluZzsKKyAgICBGVF9VU2hvcnQgICAgcGxhdGZvcm1faWQ7CisgICAgRlRfVVNob3J0ICAgIGVuY29kaW5nX2lkOworCisgIH0gRlRfQ2hhck1hcFJlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICBCIEEgUyBFICAgTyBCIEogRSBDIFQgICBDIEwgQSBTIFMgRSBTICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRmFjZV9JbnRlcm5hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQW4gb3BhcXVlIGhhbmRsZSB0byBhbiBgRlRfRmFjZV9JbnRlcm5hbFJlYycgc3RydWN0dXJlLCB1c2VkIHRvICAgICovCisgIC8qICAgIG1vZGVsIHByaXZhdGUgZGF0YSBvZiBhIGdpdmVuIEBGVF9GYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBzdHJ1Y3R1cmUgbWlnaHQgY2hhbmdlIGJldHdlZW4gcmVsZWFzZXMgb2YgRnJlZVR5cGV+MiBhbmQgaXMgICovCisgIC8qICAgIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlIHRvIGNsaWVudCBhcHBsaWNhdGlvbnMuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgRlRfRmFjZV9JbnRlcm5hbFJlY18qICBGVF9GYWNlX0ludGVybmFsOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRmFjZVJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgcm9vdCBmYWNlIGNsYXNzIHN0cnVjdHVyZS4gIEEgZmFjZSBvYmplY3QgbW9kZWxzIGEgICAgICAgICovCisgIC8qICAgIHR5cGVmYWNlIGluIGEgZm9udCBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG51bV9mYWNlcyAgICAgICAgICAgOjogVGhlIG51bWJlciBvZiBmYWNlcyBpbiB0aGUgZm9udCBmaWxlLiAgU29tZSAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgZm9ybWF0cyBjYW4gaGF2ZSBtdWx0aXBsZSBmYWNlcyBpbiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBhIGZvbnQgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlX2luZGV4ICAgICAgICAgIDo6IFRoZSBpbmRleCBvZiB0aGUgZmFjZSBpbiB0aGUgZm9udCBmaWxlLiAgSXQgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBzZXQgdG9+MCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBmYWNlIGluICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbnQgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZV9mbGFncyAgICAgICAgICA6OiBBIHNldCBvZiBiaXQgZmxhZ3MgdGhhdCBnaXZlIGltcG9ydGFudCAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZhY2U7IHNlZSAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9GQUNFX0ZMQUdfWFhYIGZvciB0aGUgZGV0YWlscy4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0eWxlX2ZsYWdzICAgICAgICAgOjogQSBzZXQgb2YgYml0IGZsYWdzIGluZGljYXRpbmcgdGhlIHN0eWxlIG9mICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmYWNlOyBzZWUgQEZUX1NUWUxFX0ZMQUdfWFhYIGZvciB0aGUgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBudW1fZ2x5cGhzICAgICAgICAgIDo6IFRoZSBudW1iZXIgb2YgZ2x5cGhzIGluIHRoZSBmYWNlLiAgSWYgdGhlICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNlIGlzIHNjYWxhYmxlIGFuZCBoYXMgc2JpdHMgKHNlZSAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgYG51bV9maXhlZF9zaXplcycpLCBpdCBpcyBzZXQgdG8gdGhlIG51bWJlciAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIG91dGxpbmUgZ2x5cGhzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIENJRC1rZXllZCBmb250cywgdGhpcyB2YWx1ZSBnaXZlcyB0aGUgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hlc3QgQ0lEIHVzZWQgaW4gdGhlIGZvbnQuICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhbWlseV9uYW1lICAgICAgICAgOjogVGhlIGZhY2UncyBmYW1pbHkgbmFtZS4gIFRoaXMgaXMgYW4gQVNDSUkgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZywgdXN1YWxseSBpbiBFbmdsaXNoLCB3aGljaCBkZXNjcmliZXMgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdHlwZWZhY2UncyBmYW1pbHkgKGxpa2UgYFRpbWVzIE5ldyAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgUm9tYW4nLCBgQm9kb25pJywgYEdhcmFtb25kJywgZXRjKS4gIFRoaXMgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGEgbGVhc3QgY29tbW9uIGRlbm9taW5hdG9yIHVzZWQgdG8gbGlzdCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb250cy4gIFNvbWUgZm9ybWF0cyAoVHJ1ZVR5cGUgJiBPcGVuVHlwZSkgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZSBsb2NhbGl6ZWQgYW5kIFVuaWNvZGUgdmVyc2lvbnMgb2YgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgc3RyaW5nLiAgQXBwbGljYXRpb25zIHNob3VsZCB1c2UgdGhlICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQgc3BlY2lmaWMgaW50ZXJmYWNlIHRvIGFjY2VzcyB0aGVtLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuIGJlIE5VTEwgKGUuZy4sIGluIGZvbnRzIGVtYmVkZGVkIGluIGEgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFBERiBmaWxlKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0eWxlX25hbWUgICAgICAgICAgOjogVGhlIGZhY2UncyBzdHlsZSBuYW1lLiAgVGhpcyBpcyBhbiBBU0NJSSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZywgdXN1YWxseSBpbiBFbmdsaXNoLCB3aGljaCBkZXNjcmliZXMgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgdHlwZWZhY2UncyBzdHlsZSAobGlrZSBgSXRhbGljJywgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgYEJvbGQnLCBgQ29uZGVuc2VkJywgZXRjKS4gIE5vdCBhbGwgZm9udCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHMgcHJvdmlkZSBhIHN0eWxlIG5hbWUsIHNvIHRoaXMgZmllbGQgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBvcHRpb25hbCwgYW5kIGNhbiBiZSBzZXQgdG8gTlVMTC4gIEFzICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGBmYW1pbHlfbmFtZScsIHNvbWUgZm9ybWF0cyBwcm92aWRlICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsaXplZCBhbmQgVW5pY29kZSB2ZXJzaW9ucyBvZiB0aGlzICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcuICBBcHBsaWNhdGlvbnMgc2hvdWxkIHVzZSB0aGUgZm9ybWF0ICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMgaW50ZXJmYWNlIHRvIGFjY2VzcyB0aGVtLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX2ZpeGVkX3NpemVzICAgICA6OiBUaGUgbnVtYmVyIG9mIGJpdG1hcCBzdHJpa2VzIGluIHRoZSBmYWNlLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbiBpZiB0aGUgZmFjZSBpcyBzY2FsYWJsZSwgdGhlcmUgbWlnaHQgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWxsIGJlIGJpdG1hcCBzdHJpa2VzLCB3aGljaCBhcmUgY2FsbGVkICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBgc2JpdHMnIGluIHRoYXQgY2FzZS4gICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhdmFpbGFibGVfc2l6ZXMgICAgIDo6IEFuIGFycmF5IG9mIEBGVF9CaXRtYXBfU2l6ZSBmb3IgYWxsIGJpdG1hcCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpa2VzIGluIHRoZSBmYWNlLiAgSXQgaXMgc2V0IHRvIE5VTEwgaWYgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlcmUgaXMgbm8gYml0bWFwIHN0cmlrZS4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX2NoYXJtYXBzICAgICAgICA6OiBUaGUgbnVtYmVyIG9mIGNoYXJtYXBzIGluIHRoZSBmYWNlLiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjaGFybWFwcyAgICAgICAgICAgIDo6IEFuIGFycmF5IG9mIHRoZSBjaGFybWFwcyBvZiB0aGUgZmFjZS4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdlbmVyaWMgICAgICAgICAgICAgOjogQSBmaWVsZCByZXNlcnZlZCBmb3IgY2xpZW50IHVzZXMuICBTZWUgdGhlICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9HZW5lcmljIHR5cGUgZGVzY3JpcHRpb24uICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJib3ggICAgICAgICAgICAgICAgOjogVGhlIGZvbnQgYm91bmRpbmcgYm94LiAgQ29vcmRpbmF0ZXMgYXJlICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3NlZCBpbiBmb250IHVuaXRzIChzZWUgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBgdW5pdHNfcGVyX0VNJykuICBUaGUgYm94IGlzIGxhcmdlIGVub3VnaCAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gY29udGFpbiBhbnkgZ2x5cGggZnJvbSB0aGUgZm9udC4gIFRodXMsICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGBiYm94LnlNYXgnIGNhbiBiZSBzZWVuIGFzIHRoZSBgbWF4aW11bSAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBhc2NlbmRlcicsIGFuZCBgYmJveC55TWluJyBhcyB0aGUgYG1pbmltdW0gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY2VuZGVyJy4gIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoZSBib3VuZGluZyBib3ggbWlnaHQgYmUgb2ZmIGJ5ICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIChhdCBsZWFzdCkgb25lIHBpeGVsIGZvciBoaW50ZWQgZm9udHMuICBTZWUgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBARlRfU2l6ZV9NZXRyaWNzIGZvciBmdXJ0aGVyIGRpc2N1c3Npb24uICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB1bml0c19wZXJfRU0gICAgICAgIDo6IFRoZSBudW1iZXIgb2YgZm9udCB1bml0cyBwZXIgRU0gc3F1YXJlIGZvciAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGZhY2UuICBUaGlzIGlzIHR5cGljYWxseSAyMDQ4IGZvciAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZVR5cGUgZm9udHMsIGFuZCAxMDAwIGZvciBUeXBlfjEgZm9udHMuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlIGZvcm1hdHMuICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFzY2VuZGVyICAgICAgICAgICAgOjogVGhlIHR5cG9ncmFwaGljIGFzY2VuZGVyIG9mIHRoZSBmYWNlLCAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3NlZCBpbiBmb250IHVuaXRzLiAgRm9yIGZvbnQgZm9ybWF0cyAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgaGF2aW5nIHRoaXMgaW5mb3JtYXRpb24sIGl0IGlzIHNldCB0byAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgYGJib3gueU1heCcuICBPbmx5IHJlbGV2YW50IGZvciBzY2FsYWJsZSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRlc2NlbmRlciAgICAgICAgICAgOjogVGhlIHR5cG9ncmFwaGljIGRlc2NlbmRlciBvZiB0aGUgZmFjZSwgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3NlZCBpbiBmb250IHVuaXRzLiAgRm9yIGZvbnQgZm9ybWF0cyAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgaGF2aW5nIHRoaXMgaW5mb3JtYXRpb24sIGl0IGlzIHNldCB0byAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgYGJib3gueU1pbicuICBOb3RlIHRoYXQgdGhpcyBmaWVsZCBpcyAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzdWFsbHkgbmVnYXRpdmUuICBPbmx5IHJlbGV2YW50IGZvciAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsYWJsZSBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBoZWlnaHQgICAgICAgICAgICAgIDo6IFRoaXMgdmFsdWUgaXMgdGhlIHZlcnRpY2FsIGRpc3RhbmNlICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBiZXR3ZWVuIHR3byBjb25zZWN1dGl2ZSBiYXNlbGluZXMsICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2VkIGluIGZvbnQgdW5pdHMuICBJdCBpcyBhbHdheXMgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aXZlLiAgT25seSByZWxldmFudCBmb3Igc2NhbGFibGUgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRoZSBnbG9iYWwgZ2x5cGggaGVpZ2h0LCB1c2UgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBgYXNjZW5kZXIgLSBkZXNjZW5kZXInLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYXhfYWR2YW5jZV93aWR0aCAgIDo6IFRoZSBtYXhpbXVtIGFkdmFuY2Ugd2lkdGgsIGluIGZvbnQgdW5pdHMsICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYWxsIGdseXBocyBpbiB0aGlzIGZhY2UuICBUaGlzIGNhbiBiZSAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBtYWtlIHdvcmQgd3JhcHBpbmcgY29tcHV0YXRpb25zICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhc3Rlci4gIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtYXhfYWR2YW5jZV9oZWlnaHQgIDo6IFRoZSBtYXhpbXVtIGFkdmFuY2UgaGVpZ2h0LCBpbiBmb250IHVuaXRzLCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYWxsIGdseXBocyBpbiB0aGlzIGZhY2UuICBUaGlzIGlzIG9ubHkgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZXZhbnQgZm9yIHZlcnRpY2FsIGxheW91dHMsIGFuZCBpcyBzZXQgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGBoZWlnaHQnIGZvciBmb250cyB0aGF0IGRvIG5vdCBwcm92aWRlICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbCBtZXRyaWNzLiAgT25seSByZWxldmFudCBmb3IgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGFibGUgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdW5kZXJsaW5lX3Bvc2l0aW9uICA6OiBUaGUgcG9zaXRpb24sIGluIGZvbnQgdW5pdHMsIG9mIHRoZSAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXJsaW5lIGxpbmUgZm9yIHRoaXMgZmFjZS4gIEl0IGlzIHRoZSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlciBvZiB0aGUgdW5kZXJsaW5pbmcgc3RlbS4gIE9ubHkgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICByZWxldmFudCBmb3Igc2NhbGFibGUgZm9ybWF0cy4gICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB1bmRlcmxpbmVfdGhpY2tuZXNzIDo6IFRoZSB0aGlja25lc3MsIGluIGZvbnQgdW5pdHMsIG9mIHRoZSAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlcmxpbmUgZm9yIHRoaXMgZmFjZS4gIE9ubHkgcmVsZXZhbnQgZm9yICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGFibGUgZm9ybWF0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZ2x5cGggICAgICAgICAgICAgICA6OiBUaGUgZmFjZSdzIGFzc29jaWF0ZWQgZ2x5cGggc2xvdChzKS4gICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzaXplICAgICAgICAgICAgICAgIDo6IFRoZSBjdXJyZW50IGFjdGl2ZSBzaXplIGZvciB0aGlzIGZhY2UuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNoYXJtYXAgICAgICAgICAgICAgOjogVGhlIGN1cnJlbnQgYWN0aXZlIGNoYXJtYXAgZm9yIHRoaXMgZmFjZS4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZpZWxkcyBtYXkgYmUgY2hhbmdlZCBhZnRlciBhIGNhbGwgdG8gQEZUX0F0dGFjaF9GaWxlIG9yICAgICAgICAgICAqLworICAvKiAgICBARlRfQXR0YWNoX1N0cmVhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9GYWNlUmVjXworICB7CisgICAgRlRfTG9uZyAgICAgICAgICAgbnVtX2ZhY2VzOworICAgIEZUX0xvbmcgICAgICAgICAgIGZhY2VfaW5kZXg7CisKKyAgICBGVF9Mb25nICAgICAgICAgICBmYWNlX2ZsYWdzOworICAgIEZUX0xvbmcgICAgICAgICAgIHN0eWxlX2ZsYWdzOworCisgICAgRlRfTG9uZyAgICAgICAgICAgbnVtX2dseXBoczsKKworICAgIEZUX1N0cmluZyogICAgICAgIGZhbWlseV9uYW1lOworICAgIEZUX1N0cmluZyogICAgICAgIHN0eWxlX25hbWU7CisKKyAgICBGVF9JbnQgICAgICAgICAgICBudW1fZml4ZWRfc2l6ZXM7CisgICAgRlRfQml0bWFwX1NpemUqICAgYXZhaWxhYmxlX3NpemVzOworCisgICAgRlRfSW50ICAgICAgICAgICAgbnVtX2NoYXJtYXBzOworICAgIEZUX0NoYXJNYXAqICAgICAgIGNoYXJtYXBzOworCisjaWZkZWYJX0ZYX01BTkFHRURfQ09ERV8KKyNkZWZpbmUgZ2VuZXJpYwkJZ2VuZXJpY19kYXRhCisjZW5kaWYKKworICAgIEZUX0dlbmVyaWMgICAgICAgIGdlbmVyaWM7CisKKyAgICAvKiMgVGhlIGZvbGxvd2luZyBtZW1iZXIgdmFyaWFibGVzIChkb3duIHRvIGB1bmRlcmxpbmVfdGhpY2tuZXNzJykgKi8KKyAgICAvKiMgYXJlIG9ubHkgcmVsZXZhbnQgdG8gc2NhbGFibGUgb3V0bGluZXM7IGNmLiBARlRfQml0bWFwX1NpemUgICAgKi8KKyAgICAvKiMgZm9yIGJpdG1hcCBmb250cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBGVF9CQm94ICAgICAgICAgICBiYm94OworCisgICAgRlRfVVNob3J0ICAgICAgICAgdW5pdHNfcGVyX0VNOworICAgIEZUX1Nob3J0ICAgICAgICAgIGFzY2VuZGVyOworICAgIEZUX1Nob3J0ICAgICAgICAgIGRlc2NlbmRlcjsKKyAgICBGVF9TaG9ydCAgICAgICAgICBoZWlnaHQ7CisKKyAgICBGVF9TaG9ydCAgICAgICAgICBtYXhfYWR2YW5jZV93aWR0aDsKKyAgICBGVF9TaG9ydCAgICAgICAgICBtYXhfYWR2YW5jZV9oZWlnaHQ7CisKKyAgICBGVF9TaG9ydCAgICAgICAgICB1bmRlcmxpbmVfcG9zaXRpb247CisgICAgRlRfU2hvcnQgICAgICAgICAgdW5kZXJsaW5lX3RoaWNrbmVzczsKKworICAgIEZUX0dseXBoU2xvdCAgICAgIGdseXBoOworICAgIEZUX1NpemUgICAgICAgICAgIHNpemU7CisgICAgRlRfQ2hhck1hcCAgICAgICAgY2hhcm1hcDsKKworICAgIC8qQHByaXZhdGUgYmVnaW4gKi8KKworICAgIEZUX0RyaXZlciAgICAgICAgIGRyaXZlcjsKKyAgICBGVF9NZW1vcnkgICAgICAgICBtZW1vcnk7CisgICAgRlRfU3RyZWFtICAgICAgICAgc3RyZWFtOworCisgICAgRlRfTGlzdFJlYyAgICAgICAgc2l6ZXNfbGlzdDsKKworICAgIEZUX0dlbmVyaWMgICAgICAgIGF1dG9oaW50OyAgIC8qIGZhY2Utc3BlY2lmaWMgYXV0by1oaW50ZXIgZGF0YSAqLworICAgIHZvaWQqICAgICAgICAgICAgIGV4dGVuc2lvbnM7IC8qIHVudXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgRlRfRmFjZV9JbnRlcm5hbCAgaW50ZXJuYWw7CisKKyAgICAvKkBwcml2YXRlIGVuZCAqLworCisgIH0gRlRfRmFjZVJlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEVudW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19YWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgbGlzdCBvZiBiaXQgZmxhZ3MgdXNlZCBpbiB0aGUgYGZhY2VfZmxhZ3MnIGZpZWxkIG9mIHRoZSAgICAgICAgICAqLworICAvKiAgICBARlRfRmFjZVJlYyBzdHJ1Y3R1cmUuICBUaGV5IGluZm9ybSBjbGllbnQgYXBwbGljYXRpb25zIG9mICAgICAgICAgKi8KKyAgLyogICAgcHJvcGVydGllcyBvZiB0aGUgY29ycmVzcG9uZGluZyBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VmFsdWVzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRkFDRV9GTEFHX1NDQUxBQkxFIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIGZhY2UgY29udGFpbnMgb3V0bGluZSBnbHlwaHMuICBUaGlzIGRvZXNuJ3QgICAqLworICAvKiAgICAgIHByZXZlbnQgYml0bWFwIHN0cmlrZXMsIGkuZS4sIGEgZmFjZSBjYW4gaGF2ZSBib3RoIHRoaXMgYW5kICAgICAgKi8KKyAgLyogICAgICBhbmQgQEZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUyBzZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfRklYRURfU0laRVMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgZmFjZSBjb250YWlucyBiaXRtYXAgc3RyaWtlcy4gIFNlZSBhbHNvIHRoZSAgICovCisgIC8qICAgICAgYG51bV9maXhlZF9zaXplcycgYW5kIGBhdmFpbGFibGVfc2l6ZXMnIGZpZWxkcyBvZiBARlRfRmFjZVJlYy4gICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRkFDRV9GTEFHX0ZJWEVEX1dJRFRIIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIGZhY2UgY29udGFpbnMgZml4ZWQtd2lkdGggY2hhcmFjdGVycyAobGlrZSAgICAqLworICAvKiAgICAgIENvdXJpZXIsIEx1Y2lkbywgTW9ub1R5cGUsIGV0Yy4pLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19TRk5UIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBmYWNlIHVzZXMgdGhlIGBzZm50JyBzdG9yYWdlIHNjaGVtZS4gIEZvciAgICAgKi8KKyAgLyogICAgICBub3csIHRoaXMgbWVhbnMgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgZmFjZSBjb250YWlucyBob3Jpem9udGFsIGdseXBoIG1ldHJpY3MuICBUaGlzICovCisgIC8qICAgICAgc2hvdWxkIGJlIHNldCBmb3IgYWxsIGNvbW1vbiBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRkFDRV9GTEFHX1ZFUlRJQ0FMIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIGZhY2UgY29udGFpbnMgdmVydGljYWwgZ2x5cGggbWV0cmljcy4gIFRoaXMgICAqLworICAvKiAgICAgIGlzIG9ubHkgYXZhaWxhYmxlIGluIHNvbWUgZm9ybWF0cywgbm90IGFsbCBvZiB0aGVtLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19LRVJOSU5HIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBmYWNlIGNvbnRhaW5zIGtlcm5pbmcgaW5mb3JtYXRpb24uICBJZiBzZXQsICAgKi8KKyAgLyogICAgICB0aGUga2VybmluZyBkaXN0YW5jZSBjYW4gYmUgcmV0cmlldmVkIHRocm91Z2ggdGhlIGZ1bmN0aW9uICAgICAgICovCisgIC8qICAgICAgQEZUX0dldF9LZXJuaW5nLiAgT3RoZXJ3aXNlIHRoZSBmdW5jdGlvbiBhbHdheXMgcmV0dXJuIHRoZSAgICAgICAqLworICAvKiAgICAgIHZlY3RvciAoMCwwKS4gIE5vdGUgdGhhdCBGcmVlVHlwZSBkb2Vzbid0IGhhbmRsZSBrZXJuaW5nIGRhdGEgICAgKi8KKyAgLyogICAgICBmcm9tIHRoZSBgR1BPUycgdGFibGUgKGFzIHByZXNlbnQgaW4gc29tZSBPcGVuVHlwZSBmb250cykuICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfRkFTVF9HTFlQSFMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUSElTIEZMQUcgSVMgREVQUkVDQVRFRC4gIERPIE5PVCBVU0UgT1IgVEVTVCBJVC4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfTVVMVElQTEVfTUFTVEVSUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgZm9udCBjb250YWlucyBtdWx0aXBsZSBtYXN0ZXJzIGFuZCBpcyBjYXBhYmxlICovCisgIC8qICAgICAgb2YgaW50ZXJwb2xhdGluZyBiZXR3ZWVuIHRoZW0uICBTZWUgdGhlIG11bHRpcGxlLW1hc3RlcnMgICAgICAgICAqLworICAvKiAgICAgIHNwZWNpZmljIEFQSSBmb3IgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19HTFlQSF9OQU1FUyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEluZGljYXRlcyB0aGF0IHRoZSBmb250IGNvbnRhaW5zIGdseXBoIG5hbWVzIHRoYXQgY2FuIGJlICAgICAgICAgKi8KKyAgLyogICAgICByZXRyaWV2ZWQgdGhyb3VnaCBARlRfR2V0X0dseXBoX05hbWUuICBOb3RlIHRoYXQgc29tZSBUcnVlVHlwZSAgICovCisgIC8qICAgICAgZm9udHMgY29udGFpbiBicm9rZW4gZ2x5cGggbmFtZSB0YWJsZXMuICBVc2UgdGhlIGZ1bmN0aW9uICAgICAgICAqLworICAvKiAgICAgIEBGVF9IYXNfUFNfR2x5cGhfTmFtZXMgd2hlbiBuZWVkZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZBQ0VfRkxBR19FWFRFUk5BTF9TVFJFQU0gOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFVzZWQgaW50ZXJuYWxseSBieSBGcmVlVHlwZSB0byBpbmRpY2F0ZSB0aGF0IGEgZmFjZSdzIHN0cmVhbSB3YXMgKi8KKyAgLyogICAgICBwcm92aWRlZCBieSB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIGFuZCBzaG91bGQgbm90IGJlIGRlc3Ryb3llZCAgICovCisgIC8qICAgICAgd2hlbiBARlRfRG9uZV9GYWNlIGlzIGNhbGxlZC4gIERvbid0IHJlYWQgb3IgdGVzdCB0aGlzIGZsYWcuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRkFDRV9GTEFHX0hJTlRFUiA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgU2V0IGlmIHRoZSBmb250IGRyaXZlciBoYXMgYSBoaW50aW5nIG1hY2hpbmUgb2YgaXRzIG93bi4gIEZvciAgICAqLworICAvKiAgICAgIGV4YW1wbGUsIHdpdGggVHJ1ZVR5cGUgZm9udHMsIGl0IG1ha2VzIHNlbnNlIHRvIHVzZSBkYXRhIGZyb20gICAgKi8KKyAgLyogICAgICB0aGUgU0ZOVCBgZ2FzcCcgdGFibGUgb25seSBpZiB0aGUgbmF0aXZlIFRydWVUeXBlIGhpbnRpbmcgZW5naW5lICovCisgIC8qICAgICAgKHdpdGggdGhlIGJ5dGVjb2RlIGludGVycHJldGVyKSBpcyBhdmFpbGFibGUgYW5kIGFjdGl2ZS4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRkFDRV9GTEFHX0NJRF9LRVlFRCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgU2V0IGlmIHRoZSBmb250IGlzIENJRC1rZXllZC4gIEluIHRoYXQgY2FzZSwgdGhlIGZvbnQgaXMgbm90ICAgICAqLworICAvKiAgICAgIGFjY2Vzc2VkIGJ5IGdseXBoIGluZGljZXMgYnV0IGJ5IENJRCB2YWx1ZXMuICBGb3Igc3Vic2V0dGVkICAgICAgKi8KKyAgLyogICAgICBDSUQta2V5ZWQgZm9udHMgdGhpcyBoYXMgdGhlIGNvbnNlcXVlbmNlIHRoYXQgbm90IGFsbCBpbmRleCAgICAgICovCisgIC8qICAgICAgdmFsdWVzIGFyZSBhIHZhbGlkIGFyZ3VtZW50IHRvIEZUX0xvYWRfR2x5cGguICBPbmx5IHRoZSBDSUQgICAgICAqLworICAvKiAgICAgIHZhbHVlcyBmb3Igd2hpY2ggY29ycmVzcG9uZGluZyBnbHlwaHMgaW4gdGhlIHN1YnNldHRlZCBmb250ICAgICAgKi8KKyAgLyogICAgICBleGlzdCBtYWtlIEZUX0xvYWRfR2x5cGggcmV0dXJuIHN1Y2Nlc3NmdWxseTsgaW4gYWxsIG90aGVyIGNhc2VzICovCisgIC8qICAgICAgeW91IGdldCBhbiBgRlRfRXJyX0ludmFsaWRfQXJndW1lbnQnIGVycm9yLiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBOb3RlIHRoYXQgQ0lELWtleWVkIGZvbnRzIHdoaWNoIGFyZSBpbiBhbiBTRk5UIHdyYXBwZXIgZG9uJ3QgICAgICovCisgIC8qICAgICAgaGF2ZSB0aGlzIGZsYWcgc2V0IHNpbmNlIHRoZSBnbHlwaHMgYXJlIGFjY2Vzc2VkIGluIHRoZSBub3JtYWwgICAqLworICAvKiAgICAgIHdheSAodXNpbmcgY29udGlndW91cyBpbmRpY2VzKTsgdGhlIGBDSUQtbmVzcycgaXNuJ3QgdmlzaWJsZSB0byAgKi8KKyAgLyogICAgICB0aGUgYXBwbGljYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GQUNFX0ZMQUdfVFJJQ0tZIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBTZXQgaWYgdGhlIGZvbnQgaXMgYHRyaWNreScsIHRoaXMgaXMsIGl0IGFsd2F5cyBuZWVkcyB0aGUgICAgICAgICovCisgIC8qICAgICAgZm9udCBmb3JtYXQncyBuYXRpdmUgaGludGluZyBlbmdpbmUgdG8gZ2V0IGEgcmVhc29uYWJsZSByZXN1bHQuICAqLworICAvKiAgICAgIEEgdHlwaWNhbCBleGFtcGxlIGlzIHRoZSBDaGluZXNlIGZvbnQgYG1pbmdsaS50dGYnIHdoaWNoIHVzZXMgICAgKi8KKyAgLyogICAgICBUcnVlVHlwZSBieXRlY29kZSBpbnN0cnVjdGlvbnMgdG8gbW92ZSBhbmQgc2NhbGUgYWxsIG9mIGl0cyAgICAgICovCisgIC8qICAgICAgc3ViZ2x5cGhzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBJdCBpcyBub3QgcG9zc2libGUgdG8gYXV0b2hpbnQgc3VjaCBmb250cyB1c2luZyAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQEZUX0xPQURfRk9SQ0VfQVVUT0hJTlQ7IGl0IHdpbGwgYWxzbyBpZ25vcmUgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEBGVF9MT0FEX05PX0hJTlRJTkcuICBZb3UgaGF2ZSB0byBzZXQgYm90aCBARlRfTE9BRF9OT19ISU5USU5HICAgKi8KKyAgLyogICAgICBhbmQgQEZUX0xPQURfTk9fQVVUT0hJTlQgdG8gcmVhbGx5IGRpc2FibGUgaGludGluZzsgaG93ZXZlciwgeW91ICovCisgIC8qICAgICAgcHJvYmFibHkgbmV2ZXIgd2FudCB0aGlzIGV4Y2VwdCBmb3IgZGVtb25zdHJhdGlvbiBwdXJwb3Nlcy4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBDdXJyZW50bHksIHRoZXJlIGFyZSBhYm91dCBhIGRvemVuIFRydWVUeXBlIGZvbnRzIGluIHRoZSBsaXN0IG9mICovCisgIC8qICAgICAgdHJpY2t5IGZvbnRzOyB0aGV5IGFyZSBoYXJkLWNvZGVkIGluIGZpbGUgYHR0b2Jqcy5jJy4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfRkFDRV9GTEFHX1NDQUxBQkxFICAgICAgICAgICggMUwgPDwgIDAgKQorI2RlZmluZSBGVF9GQUNFX0ZMQUdfRklYRURfU0laRVMgICAgICAgKCAxTCA8PCAgMSApCisjZGVmaW5lIEZUX0ZBQ0VfRkxBR19GSVhFRF9XSURUSCAgICAgICAoIDFMIDw8ICAyICkKKyNkZWZpbmUgRlRfRkFDRV9GTEFHX1NGTlQgICAgICAgICAgICAgICggMUwgPDwgIDMgKQorI2RlZmluZSBGVF9GQUNFX0ZMQUdfSE9SSVpPTlRBTCAgICAgICAgKCAxTCA8PCAgNCApCisjZGVmaW5lIEZUX0ZBQ0VfRkxBR19WRVJUSUNBTCAgICAgICAgICAoIDFMIDw8ICA1ICkKKyNkZWZpbmUgRlRfRkFDRV9GTEFHX0tFUk5JTkcgICAgICAgICAgICggMUwgPDwgIDYgKQorI2RlZmluZSBGVF9GQUNFX0ZMQUdfRkFTVF9HTFlQSFMgICAgICAgKCAxTCA8PCAgNyApCisjZGVmaW5lIEZUX0ZBQ0VfRkxBR19NVUxUSVBMRV9NQVNURVJTICAoIDFMIDw8ICA4ICkKKyNkZWZpbmUgRlRfRkFDRV9GTEFHX0dMWVBIX05BTUVTICAgICAgICggMUwgPDwgIDkgKQorI2RlZmluZSBGVF9GQUNFX0ZMQUdfRVhURVJOQUxfU1RSRUFNICAgKCAxTCA8PCAxMCApCisjZGVmaW5lIEZUX0ZBQ0VfRkxBR19ISU5URVIgICAgICAgICAgICAoIDFMIDw8IDExICkKKyNkZWZpbmUgRlRfRkFDRV9GTEFHX0NJRF9LRVlFRCAgICAgICAgICggMUwgPDwgMTIgKQorI2RlZmluZSBGVF9GQUNFX0ZMQUdfVFJJQ0tZICAgICAgICAgICAgKCAxTCA8PCAxMyApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfSEFTX0hPUklaT05UQUwoIGZhY2UgKQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGNvbnRhaW5zCisgICAqICAgaG9yaXpvbnRhbCBtZXRyaWNzICh0aGlzIGlzIHRydWUgZm9yIGFsbCBmb250IGZvcm1hdHMgdGhvdWdoKS4KKyAgICoKKyAgICogQGFsc286CisgICAqICAgQEZUX0hBU19WRVJUSUNBTCBjYW4gYmUgdXNlZCB0byBjaGVjayBmb3IgdmVydGljYWwgbWV0cmljcy4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0hBU19IT1JJWk9OVEFMKCBmYWNlICkgXAorICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19IT1JJWk9OVEFMICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9IQVNfVkVSVElDQUwoIGZhY2UgKQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGNvbnRhaW5zIHJlYWwKKyAgICogICB2ZXJ0aWNhbCBtZXRyaWNzIChhbmQgbm90IG9ubHkgc3ludGhlc2l6ZWQgb25lcykuCisgICAqCisgICAqLworI2RlZmluZSBGVF9IQVNfVkVSVElDQUwoIGZhY2UgKSBcCisgICAgICAgICAgKCBmYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX1ZFUlRJQ0FMICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9IQVNfS0VSTklORyggZmFjZSApCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMga2VybmluZworICAgKiAgIGRhdGEgdGhhdCBjYW4gYmUgYWNjZXNzZWQgd2l0aCBARlRfR2V0X0tlcm5pbmcuCisgICAqCisgICAqLworI2RlZmluZSBGVF9IQVNfS0VSTklORyggZmFjZSApIFwKKyAgICAgICAgICAoIGZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfS0VSTklORyApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfSVNfU0NBTEFCTEUoIGZhY2UgKQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGNvbnRhaW5zIGEgc2NhbGFibGUKKyAgICogICBmb250IGZhY2UgKHRydWUgZm9yIFRydWVUeXBlLCBUeXBlfjEsIFR5cGV+NDIsIENJRCwgT3BlblR5cGUvQ0ZGLAorICAgKiAgIGFuZCBQRlIgZm9udCBmb3JtYXRzLgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfSVNfU0NBTEFCTEUoIGZhY2UgKSBcCisgICAgICAgICAgKCBmYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX1NDQUxBQkxFICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9JU19TRk5UKCBmYWNlICkKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdGhhdCByZXR1cm5zIHRydWUgd2hlbmV2ZXIgYSBmYWNlIG9iamVjdCBjb250YWlucyBhIGZvbnQKKyAgICogICB3aG9zZSBmb3JtYXQgaXMgYmFzZWQgb24gdGhlIFNGTlQgc3RvcmFnZSBzY2hlbWUuICBUaGlzIHVzdWFsbHkKKyAgICogICBtZWFuczogVHJ1ZVR5cGUgZm9udHMsIE9wZW5UeXBlIGZvbnRzLCBhcyB3ZWxsIGFzIFNGTlQtYmFzZWQgZW1iZWRkZWQKKyAgICogICBiaXRtYXAgZm9udHMuCisgICAqCisgICAqICAgSWYgdGhpcyBtYWNybyBpcyB0cnVlLCBhbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gQEZUX1NGTlRfTkFNRVNfSCBhbmQKKyAgICogICBARlRfVFJVRVRZUEVfVEFCTEVTX0ggYXJlIGF2YWlsYWJsZS4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0lTX1NGTlQoIGZhY2UgKSBcCisgICAgICAgICAgKCBmYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX1NGTlQgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0lTX0ZJWEVEX1dJRFRIKCBmYWNlICkKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdGhhdCByZXR1cm5zIHRydWUgd2hlbmV2ZXIgYSBmYWNlIG9iamVjdCBjb250YWlucyBhIGZvbnQgZmFjZQorICAgKiAgIHRoYXQgY29udGFpbnMgZml4ZWQtd2lkdGggKG9yIGBtb25vc3BhY2UnLCBgZml4ZWQtcGl0Y2gnLCBldGMuKQorICAgKiAgIGdseXBocy4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0lTX0ZJWEVEX1dJRFRIKCBmYWNlICkgXAorICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19GSVhFRF9XSURUSCApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfSEFTX0ZJWEVEX1NJWkVTKCBmYWNlICkKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIEEgbWFjcm8gdGhhdCByZXR1cm5zIHRydWUgd2hlbmV2ZXIgYSBmYWNlIG9iamVjdCBjb250YWlucyBzb21lCisgICAqICAgZW1iZWRkZWQgYml0bWFwcy4gIFNlZSB0aGUgYGF2YWlsYWJsZV9zaXplcycgZmllbGQgb2YgdGhlCisgICAqICAgQEZUX0ZhY2VSZWMgc3RydWN0dXJlLgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfSEFTX0ZJWEVEX1NJWkVTKCBmYWNlICkgXAorICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19GSVhFRF9TSVpFUyApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfSEFTX0ZBU1RfR0xZUEhTKCBmYWNlICkKKyAgICoKKyAgICogQGRlc2NyaXB0aW9uOgorICAgKiAgIERlcHJlY2F0ZWQuCisgICAqCisgICAqLworI2RlZmluZSBGVF9IQVNfRkFTVF9HTFlQSFMoIGZhY2UgKSAgMAorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0hBU19HTFlQSF9OQU1FUyggZmFjZSApCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMgc29tZSBnbHlwaAorICAgKiAgIG5hbWVzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIHRocm91Z2ggQEZUX0dldF9HbHlwaF9OYW1lLgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfSEFTX0dMWVBIX05BTUVTKCBmYWNlICkgXAorICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19HTFlQSF9OQU1FUyApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfSEFTX01VTFRJUExFX01BU1RFUlMoIGZhY2UgKQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBtYWNybyB0aGF0IHJldHVybnMgdHJ1ZSB3aGVuZXZlciBhIGZhY2Ugb2JqZWN0IGNvbnRhaW5zIHNvbWUKKyAgICogICBtdWx0aXBsZSBtYXN0ZXJzLiAgVGhlIGZ1bmN0aW9ucyBwcm92aWRlZCBieSBARlRfTVVMVElQTEVfTUFTVEVSU19ICisgICAqICAgYXJlIHRoZW4gYXZhaWxhYmxlIHRvIGNob29zZSB0aGUgZXhhY3QgZGVzaWduIHlvdSB3YW50LgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfSEFTX01VTFRJUExFX01BU1RFUlMoIGZhY2UgKSBcCisgICAgICAgICAgKCBmYWNlLT5mYWNlX2ZsYWdzICYgRlRfRkFDRV9GTEFHX01VTFRJUExFX01BU1RFUlMgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0lTX0NJRF9LRVlFRCggZmFjZSApCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSBvYmplY3QgY29udGFpbnMgYSBDSUQta2V5ZWQKKyAgICogICBmb250LiAgU2VlIHRoZSBkaXNjdXNzaW9uIG9mIEBGVF9GQUNFX0ZMQUdfQ0lEX0tFWUVEIGZvciBtb3JlCisgICAqICAgZGV0YWlscy4KKyAgICoKKyAgICogICBJZiB0aGlzIG1hY3JvIGlzIHRydWUsIGFsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBARlRfQ0lEX0ggYXJlCisgICAqICAgYXZhaWxhYmxlLgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfSVNfQ0lEX0tFWUVEKCBmYWNlICkgXAorICAgICAgICAgICggZmFjZS0+ZmFjZV9mbGFncyAmIEZUX0ZBQ0VfRkxBR19DSURfS0VZRUQgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQG1hY3JvOgorICAgKiAgIEZUX0lTX1RSSUNLWSggZmFjZSApCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBBIG1hY3JvIHRoYXQgcmV0dXJucyB0cnVlIHdoZW5ldmVyIGEgZmFjZSByZXByZXNlbnRzIGEgYHRyaWNreScgZm9udC4KKyAgICogICBTZWUgdGhlIGRpc2N1c3Npb24gb2YgQEZUX0ZBQ0VfRkxBR19UUklDS1kgZm9yIG1vcmUgZGV0YWlscy4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0lTX1RSSUNLWSggZmFjZSApIFwKKyAgICAgICAgICAoIGZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfVFJJQ0tZICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPENvbnN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NUWUxFX0ZMQUdfWFhYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgbGlzdCBvZiBiaXQtZmxhZ3MgdXNlZCB0byBpbmRpY2F0ZSB0aGUgc3R5bGUgb2YgYSBnaXZlbiBmYWNlLiAgICAqLworICAvKiAgICBUaGVzZSBhcmUgdXNlZCBpbiB0aGUgYHN0eWxlX2ZsYWdzJyBmaWVsZCBvZiBARlRfRmFjZVJlYy4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TVFlMRV9GTEFHX0lUQUxJQyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBJbmRpY2F0ZXMgdGhhdCBhIGdpdmVuIGZhY2Ugc3R5bGUgaXMgaXRhbGljIG9yIG9ibGlxdWUuICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TVFlMRV9GTEFHX0JPTEQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBJbmRpY2F0ZXMgdGhhdCBhIGdpdmVuIGZhY2UgaXMgYm9sZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHN0eWxlIGluZm9ybWF0aW9uIGFzIHByb3ZpZGVkIGJ5IEZyZWVUeXBlIGlzIHZlcnkgYmFzaWMuICBNb3JlICovCisgIC8qICAgIGRldGFpbHMgYXJlIGJleW9uZCB0aGUgc2NvcGUgYW5kIHNob3VsZCBiZSBkb25lIG9uIGEgaGlnaGVyIGxldmVsICAqLworICAvKiAgICAoZm9yIGV4YW1wbGUsIGJ5IGFuYWx5emluZyB2YXJpb3VzIGZpZWxkcyBvZiB0aGUgYE9TLzInIHRhYmxlIGluICAgKi8KKyAgLyogICAgU0ZOVCBiYXNlZCBmb250cykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBGVF9TVFlMRV9GTEFHX0lUQUxJQyAgKCAxIDw8IDAgKQorI2RlZmluZSBGVF9TVFlMRV9GTEFHX0JPTEQgICAgKCAxIDw8IDEgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2l6ZV9JbnRlcm5hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQW4gb3BhcXVlIGhhbmRsZSB0byBhbiBgRlRfU2l6ZV9JbnRlcm5hbFJlYycgc3RydWN0dXJlLCB1c2VkIHRvICAgICovCisgIC8qICAgIG1vZGVsIHByaXZhdGUgZGF0YSBvZiBhIGdpdmVuIEBGVF9TaXplIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgRlRfU2l6ZV9JbnRlcm5hbFJlY18qICBGVF9TaXplX0ludGVybmFsOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2l6ZV9NZXRyaWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHNpemUgbWV0cmljcyBzdHJ1Y3R1cmUgZ2l2ZXMgdGhlIG1ldHJpY3Mgb2YgYSBzaXplIG9iamVjdC4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RmllbGRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgeF9wcGVtICAgICAgIDo6IFRoZSB3aWR0aCBvZiB0aGUgc2NhbGVkIEVNIHNxdWFyZSBpbiBwaXhlbHMsIGhlbmNlICovCisgIC8qICAgICAgICAgICAgICAgICAgICB0aGUgdGVybSBgcHBlbScgKHBpeGVscyBwZXIgRU0pLiAgSXQgaXMgYWxzbyAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgcmVmZXJyZWQgdG8gYXMgYG5vbWluYWwgd2lkdGgnLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHlfcHBlbSAgICAgICA6OiBUaGUgaGVpZ2h0IG9mIHRoZSBzY2FsZWQgRU0gc3F1YXJlIGluIHBpeGVscywgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgaGVuY2UgdGhlIHRlcm0gYHBwZW0nIChwaXhlbHMgcGVyIEVNKS4gIEl0IGlzIGFsc28gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIHJlZmVycmVkIHRvIGFzIGBub21pbmFsIGhlaWdodCcuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB4X3NjYWxlICAgICAgOjogQSAxNi4xNiBmcmFjdGlvbmFsIHNjYWxpbmcgdmFsdWUgdXNlZCB0byBjb252ZXJ0ICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIGhvcml6b250YWwgbWV0cmljcyBmcm9tIGZvbnQgdW5pdHMgdG8gMjYuNiAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbmFsIHBpeGVscy4gIE9ubHkgcmVsZXZhbnQgZm9yIHNjYWxhYmxlICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgZm9udCBmb3JtYXRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHlfc2NhbGUgICAgICA6OiBBIDE2LjE2IGZyYWN0aW9uYWwgc2NhbGluZyB2YWx1ZSB1c2VkIHRvIGNvbnZlcnQgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgdmVydGljYWwgbWV0cmljcyBmcm9tIGZvbnQgdW5pdHMgdG8gMjYuNiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uYWwgcGl4ZWxzLiAgT25seSByZWxldmFudCBmb3Igc2NhbGFibGUgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICBmb250IGZvcm1hdHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYXNjZW5kZXIgICAgIDo6IFRoZSBhc2NlbmRlciBpbiAyNi42IGZyYWN0aW9uYWwgcGl4ZWxzLiAgU2VlICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICBARlRfRmFjZVJlYyBmb3IgdGhlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGVzY2VuZGVyICAgIDo6IFRoZSBkZXNjZW5kZXIgaW4gMjYuNiBmcmFjdGlvbmFsIHBpeGVscy4gIFNlZSAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICBARlRfRmFjZVJlYyBmb3IgdGhlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaGVpZ2h0ICAgICAgIDo6IFRoZSBoZWlnaHQgaW4gMjYuNiBmcmFjdGlvbmFsIHBpeGVscy4gIFNlZSAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICBARlRfRmFjZVJlYyBmb3IgdGhlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWF4X2FkdmFuY2UgIDo6IFRoZSBtYXhpbXVtIGFkdmFuY2Ugd2lkdGggaW4gMjYuNiBmcmFjdGlvbmFsICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICBwaXhlbHMuICBTZWUgQEZUX0ZhY2VSZWMgZm9yIHRoZSBkZXRhaWxzLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBzY2FsaW5nIHZhbHVlcywgaWYgcmVsZXZhbnQsIGFyZSBkZXRlcm1pbmVkIGZpcnN0IGR1cmluZyBhICAgICAqLworICAvKiAgICBzaXplIGNoYW5naW5nIG9wZXJhdGlvbi4gIFRoZSByZW1haW5pbmcgZmllbGRzIGFyZSB0aGVuIHNldCBieSB0aGUgKi8KKyAgLyogICAgZHJpdmVyLiAgRm9yIHNjYWxhYmxlIGZvcm1hdHMsIHRoZXkgYXJlIHVzdWFsbHkgc2V0IHRvIHNjYWxlZCAgICAgICovCisgIC8qICAgIHZhbHVlcyBvZiB0aGUgY29ycmVzcG9uZGluZyBmaWVsZHMgaW4gQEZUX0ZhY2VSZWMuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTm90ZSB0aGF0IGR1ZSB0byBnbHlwaCBoaW50aW5nLCB0aGVzZSB2YWx1ZXMgbWlnaHQgbm90IGJlIGV4YWN0ICAgICovCisgIC8qICAgIGZvciBjZXJ0YWluIGZvbnRzLiAgVGh1cyB0aGV5IG11c3QgYmUgdHJlYXRlZCBhcyB1bnJlbGlhYmxlICAgICAgICAqLworICAvKiAgICB3aXRoIGFuIGVycm9yIG1hcmdpbiBvZiBhdCBsZWFzdCBvbmUgcGl4ZWwhICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEluZGVlZCwgdGhlIG9ubHkgd2F5IHRvIGdldCB0aGUgZXhhY3QgbWV0cmljcyBpcyB0byByZW5kZXIgX2FsbF8gICAqLworICAvKiAgICBnbHlwaHMuICBBcyB0aGlzIHdvdWxkIGJlIGEgZGVmaW5pdGUgcGVyZm9ybWFuY2UgaGl0LCBpdCBpcyB1cCB0byAgKi8KKyAgLyogICAgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBwZXJmb3JtIHN1Y2ggY29tcHV0YXRpb25zLiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgRlRfU2l6ZV9NZXRyaWNzIHN0cnVjdHVyZSBpcyB2YWxpZCBmb3IgYml0bWFwIGZvbnRzIGFsc28uICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9TaXplX01ldHJpY3NfCisgIHsKKyAgICBGVF9VU2hvcnQgIHhfcHBlbTsgICAgICAvKiBob3Jpem9udGFsIHBpeGVscyBwZXIgRU0gICAgICAgICAgICAgICAqLworICAgIEZUX1VTaG9ydCAgeV9wcGVtOyAgICAgIC8qIHZlcnRpY2FsIHBpeGVscyBwZXIgRU0gICAgICAgICAgICAgICAgICovCisKKyAgICBGVF9GaXhlZCAgIHhfc2NhbGU7ICAgICAvKiBzY2FsaW5nIHZhbHVlcyB1c2VkIHRvIGNvbnZlcnQgZm9udCAgICAqLworICAgIEZUX0ZpeGVkICAgeV9zY2FsZTsgICAgIC8qIHVuaXRzIHRvIDI2LjYgZnJhY3Rpb25hbCBwaXhlbHMgICAgICAgICovCisKKyAgICBGVF9Qb3MgICAgIGFzY2VuZGVyOyAgICAvKiBhc2NlbmRlciBpbiAyNi42IGZyYWMuIHBpeGVscyAgICAgICAgICAqLworICAgIEZUX1BvcyAgICAgZGVzY2VuZGVyOyAgIC8qIGRlc2NlbmRlciBpbiAyNi42IGZyYWMuIHBpeGVscyAgICAgICAgICovCisgICAgRlRfUG9zICAgICBoZWlnaHQ7ICAgICAgLyogdGV4dCBoZWlnaHQgaW4gMjYuNiBmcmFjLiBwaXhlbHMgICAgICAgKi8KKyAgICBGVF9Qb3MgICAgIG1heF9hZHZhbmNlOyAvKiBtYXggaG9yaXpvbnRhbCBhZHZhbmNlLCBpbiAyNi42IHBpeGVscyAqLworCisgIH0gRlRfU2l6ZV9NZXRyaWNzOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2l6ZVJlYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgcm9vdCBzaXplIGNsYXNzIHN0cnVjdHVyZS4gIEEgc2l6ZSBvYmplY3QgbW9kZWxzIGEgZmFjZSAgICovCisgIC8qICAgIG9iamVjdCBhdCBhIGdpdmVuIHNpemUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgOjogSGFuZGxlIHRvIHRoZSBwYXJlbnQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZ2VuZXJpYyA6OiBBIHR5cGVsZXNzIHBvaW50ZXIsIHdoaWNoIGlzIHVudXNlZCBieSB0aGUgRnJlZVR5cGUgICAgICovCisgIC8qICAgICAgICAgICAgICAgbGlicmFyeSBvciBhbnkgb2YgaXRzIGRyaXZlcnMuICBJdCBjYW4gYmUgdXNlZCBieSAgICAgICAqLworICAvKiAgICAgICAgICAgICAgIGNsaWVudCBhcHBsaWNhdGlvbnMgdG8gbGluayB0aGVpciBvd24gZGF0YSB0byBlYWNoIHNpemUgKi8KKyAgLyogICAgICAgICAgICAgICBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtZXRyaWNzIDo6IE1ldHJpY3MgZm9yIHRoaXMgc2l6ZSBvYmplY3QuICBUaGlzIGZpZWxkIGlzIHJlYWQtb25seS4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9TaXplUmVjXworICB7CisgICAgRlRfRmFjZSAgICAgICAgICAgZmFjZTsgICAgICAvKiBwYXJlbnQgZmFjZSBvYmplY3QgICAgICAgICAgICAgICovCisgICAgRlRfR2VuZXJpYyAgICAgICAgZ2VuZXJpYzsgICAvKiBnZW5lcmljIHBvaW50ZXIgZm9yIGNsaWVudCB1c2VzICovCisgICAgRlRfU2l6ZV9NZXRyaWNzICAgbWV0cmljczsgICAvKiBzaXplIG1ldHJpY3MgICAgICAgICAgICAgICAgICAgICovCisgICAgRlRfU2l6ZV9JbnRlcm5hbCAgaW50ZXJuYWw7CisKKyAgfSBGVF9TaXplUmVjOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU3ViR2x5cGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHN1YmdseXBoIHN0cnVjdHVyZSBpcyBhbiBpbnRlcm5hbCBvYmplY3QgdXNlZCB0byBkZXNjcmliZSAgICAgICovCisgIC8qICAgIHN1YmdseXBocyAoZm9yIGV4YW1wbGUsIGluIHRoZSBjYXNlIG9mIGNvbXBvc2l0ZXMpLiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBzdWJnbHlwaCBpbXBsZW1lbnRhdGlvbiBpcyBub3QgcGFydCBvZiB0aGUgaGlnaC1sZXZlbCBBUEksICAgICAqLworICAvKiAgICBoZW5jZSB0aGUgZm9yd2FyZCBzdHJ1Y3R1cmUgZGVjbGFyYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFlvdSBjYW4gaG93ZXZlciByZXRyaWV2ZSBzdWJnbHlwaCBpbmZvcm1hdGlvbiB3aXRoICAgICAgICAgICAgICAgICAqLworICAvKiAgICBARlRfR2V0X1N1YkdseXBoX0luZm8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0IEZUX1N1YkdseXBoUmVjXyogIEZUX1N1YkdseXBoOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2xvdF9JbnRlcm5hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQW4gb3BhcXVlIGhhbmRsZSB0byBhbiBgRlRfU2xvdF9JbnRlcm5hbFJlYycgc3RydWN0dXJlLCB1c2VkIHRvICAgICovCisgIC8qICAgIG1vZGVsIHByaXZhdGUgZGF0YSBvZiBhIGdpdmVuIEBGVF9HbHlwaFNsb3Qgb2JqZWN0LiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgRlRfU2xvdF9JbnRlcm5hbFJlY18qICBGVF9TbG90X0ludGVybmFsOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2x5cGhTbG90UmVjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgcm9vdCBnbHlwaCBzbG90IGNsYXNzIHN0cnVjdHVyZS4gIEEgZ2x5cGggc2xvdCBpcyBhICAgICAgICovCisgIC8qICAgIGNvbnRhaW5lciB3aGVyZSBpbmRpdmlkdWFsIGdseXBocyBjYW4gYmUgbG9hZGVkLCBiZSB0aGV5IGluICAgICAgICAqLworICAvKiAgICBvdXRsaW5lIG9yIGJpdG1hcCBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsaWJyYXJ5ICAgICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgRnJlZVR5cGUgbGlicmFyeSBpbnN0YW5jZSAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBzbG90IGJlbG9uZ3MgdG8uICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICAgICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgcGFyZW50IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG5leHQgICAgICAgICAgICAgIDo6IEluIHNvbWUgY2FzZXMgKGxpa2Ugc29tZSBmb250IHRvb2xzKSwgc2V2ZXJhbCAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaCBzbG90cyBwZXIgZmFjZSBvYmplY3QgY2FuIGJlIGEgZ29vZCAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgdGhpbmcuICBBcyB0aGlzIGlzIHJhcmUsIHRoZSBnbHlwaCBzbG90cyBhcmUgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlZCB0aHJvdWdoIGEgZGlyZWN0LCBzaW5nbGUtbGlua2VkIGxpc3QgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyBpdHMgYG5leHQnIGZpZWxkLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdlbmVyaWMgICAgICAgICAgIDo6IEEgdHlwZWxlc3MgcG9pbnRlciB3aGljaCBpcyB1bnVzZWQgYnkgdGhlICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBGcmVlVHlwZSBsaWJyYXJ5IG9yIGFueSBvZiBpdHMgZHJpdmVycy4gIEl0ICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIHVzZWQgYnkgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBsaW5rICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWlyIG93biBkYXRhIHRvIGVhY2ggZ2x5cGggc2xvdCBvYmplY3QuICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWV0cmljcyAgICAgICAgICAgOjogVGhlIG1ldHJpY3Mgb2YgdGhlIGxhc3QgbG9hZGVkIGdseXBoIGluIHRoZSAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3QuICBUaGUgcmV0dXJuZWQgdmFsdWVzIGRlcGVuZCBvbiB0aGUgbGFzdCAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkIGZsYWdzIChzZWUgdGhlIEBGVF9Mb2FkX0dseXBoIEFQSSAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24pIGFuZCBjYW4gYmUgZXhwcmVzc2VkIGVpdGhlciBpbiAyNi42ICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uYWwgcGl4ZWxzIG9yIGZvbnQgdW5pdHMuICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGV2ZW4gd2hlbiB0aGUgZ2x5cGggaW1hZ2UgaXMgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkLCB0aGUgbWV0cmljcyBhcmUgbm90LiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGluZWFySG9yaUFkdmFuY2UgOjogVGhlIGFkdmFuY2Ugd2lkdGggb2YgdGhlIHVuaGludGVkIGdseXBoLiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIEl0cyB2YWx1ZSBpcyBleHByZXNzZWQgaW4gMTYuMTYgZnJhY3Rpb25hbCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHMsIHVubGVzcyBARlRfTE9BRF9MSU5FQVJfREVTSUdOIGlzIHNldCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBsb2FkaW5nIHRoZSBnbHlwaC4gIFRoaXMgZmllbGQgY2FuIGJlICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGFudCB0byBwZXJmb3JtIGNvcnJlY3QgV1lTSVdZRyBsYXlvdXQuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBPbmx5IHJlbGV2YW50IGZvciBvdXRsaW5lIGdseXBocy4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxpbmVhclZlcnRBZHZhbmNlIDo6IFRoZSBhZHZhbmNlIGhlaWdodCBvZiB0aGUgdW5oaW50ZWQgZ2x5cGguICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBJdHMgdmFsdWUgaXMgZXhwcmVzc2VkIGluIDE2LjE2IGZyYWN0aW9uYWwgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzLCB1bmxlc3MgQEZUX0xPQURfTElORUFSX0RFU0lHTiBpcyBzZXQgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gbG9hZGluZyB0aGUgZ2x5cGguICBUaGlzIGZpZWxkIGNhbiBiZSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRhbnQgdG8gcGVyZm9ybSBjb3JyZWN0IFdZU0lXWUcgbGF5b3V0LiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgT25seSByZWxldmFudCBmb3Igb3V0bGluZSBnbHlwaHMuICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhZHZhbmNlICAgICAgICAgICA6OiBUaGlzIHNob3J0aGFuZCBpcywgZGVwZW5kaW5nIG9uICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgQEZUX0xPQURfSUdOT1JFX1RSQU5TRk9STSwgdGhlIHRyYW5zZm9ybWVkICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2Ugd2lkdGggZm9yIHRoZSBnbHlwaCAoaW4gMjYuNiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbmFsIHBpeGVsIGZvcm1hdCkuICBBcyBzcGVjaWZpZWQgd2l0aCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgQEZUX0xPQURfVkVSVElDQUxfTEFZT1VULCBpdCB1c2VzIGVpdGhlciB0aGUgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGBob3JpQWR2YW5jZScgb3IgdGhlIGB2ZXJ0QWR2YW5jZScgdmFsdWUgb2YgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBgbWV0cmljcycgZmllbGQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZvcm1hdCAgICAgICAgICAgIDo6IFRoaXMgZmllbGQgaW5kaWNhdGVzIHRoZSBmb3JtYXQgb2YgdGhlIGltYWdlICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZWQgaW4gdGhlIGdseXBoIHNsb3QuICBUeXBpY2FsbHkgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgQEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVAsICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9HTFlQSF9GT1JNQVRfT1VUTElORSwgb3IgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBARlRfR0xZUEhfRk9STUFUX0NPTVBPU0lURSwgYnV0IG90aGVycyBhcmUgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBiaXRtYXAgICAgICAgICAgICA6OiBUaGlzIGZpZWxkIGlzIHVzZWQgYXMgYSBiaXRtYXAgZGVzY3JpcHRvciAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgc2xvdCBmb3JtYXQgaXMgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9HTFlQSF9GT1JNQVRfQklUTUFQLiAgTm90ZSB0aGF0IHRoZSAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzIGFuZCBjb250ZW50IG9mIHRoZSBiaXRtYXAgYnVmZmVyIGNhbiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlIGJldHdlZW4gY2FsbHMgb2YgQEZUX0xvYWRfR2x5cGggYW5kIGEgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGZldyBvdGhlciBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYml0bWFwX2xlZnQgICAgICAgOjogVGhpcyBpcyB0aGUgYml0bWFwJ3MgbGVmdCBiZWFyaW5nIGV4cHJlc3NlZCAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGluIGludGVnZXIgcGl4ZWxzLiAgT2YgY291cnNlLCB0aGlzIGlzIG9ubHkgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCBpZiB0aGUgZm9ybWF0IGlzICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgQEZUX0dMWVBIX0ZPUk1BVF9CSVRNQVAuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBiaXRtYXBfdG9wICAgICAgICA6OiBUaGlzIGlzIHRoZSBiaXRtYXAncyB0b3AgYmVhcmluZyBleHByZXNzZWQgaW4gKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdlciBwaXhlbHMuICBSZW1lbWJlciB0aGF0IHRoaXMgaXMgdGhlICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3RhbmNlIGZyb20gdGhlIGJhc2VsaW5lIHRvIHRoZSB0b3AtbW9zdCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaCBzY2FubGluZSwgdXB3YXJkcyB5fmNvb3JkaW5hdGVzIGJlaW5nICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgKnBvc2l0aXZlKi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBvdXRsaW5lICAgICAgICAgICA6OiBUaGUgb3V0bGluZSBkZXNjcmlwdG9yIGZvciB0aGUgY3VycmVudCBnbHlwaCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgaWYgaXRzIGZvcm1hdCBpcyAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIEBGVF9HTFlQSF9GT1JNQVRfT1VUTElORS4gIE9uY2UgYSBnbHlwaCBpcyAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQsIGBvdXRsaW5lJyBjYW4gYmUgdHJhbnNmb3JtZWQsICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgZGlzdG9ydGVkLCBlbWJvbGRlZCwgZXRjLiAgSG93ZXZlciwgaXQgbXVzdCAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBiZSBmcmVlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX3N1YmdseXBocyAgICAgOjogVGhlIG51bWJlciBvZiBzdWJnbHlwaHMgaW4gYSBjb21wb3NpdGUgZ2x5cGguICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgb25seSB2YWxpZCBmb3IgdGhlIGNvbXBvc2l0ZSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaCBmb3JtYXQgdGhhdCBzaG91bGQgbm9ybWFsbHkgb25seSBiZSAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkIHdpdGggdGhlIEBGVF9MT0FEX05PX1JFQ1VSU0UgZmxhZy4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBub3cgdGhpcyBpcyBpbnRlcm5hbCB0byBGcmVlVHlwZS4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc3ViZ2x5cGhzICAgICAgICAgOjogQW4gYXJyYXkgb2Ygc3ViZ2x5cGggZGVzY3JpcHRvcnMgZm9yICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZSBnbHlwaHMuICBUaGVyZSBhcmUgYG51bV9zdWJnbHlwaHMnICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50cyBpbiB0aGVyZS4gIEN1cnJlbnRseSBpbnRlcm5hbCB0byAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgRnJlZVR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjb250cm9sX2RhdGEgICAgICA6OiBDZXJ0YWluIGZvbnQgZHJpdmVycyBjYW4gYWxzbyByZXR1cm4gdGhlICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbCBkYXRhIGZvciBhIGdpdmVuIGdseXBoIGltYWdlIChlLmcuICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIFRydWVUeXBlIGJ5dGVjb2RlLCBUeXBlfjEgY2hhcnN0cmluZ3MsIGV0Yy4pLiAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGlzIGEgcG9pbnRlciB0byBzdWNoIGRhdGEuICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNvbnRyb2xfbGVuICAgICAgIDo6IFRoaXMgaXMgdGhlIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgY29udHJvbCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG90aGVyICAgICAgICAgICAgIDo6IFJlYWxseSB3aWNrZWQgZm9ybWF0cyBjYW4gdXNlIHRoaXMgcG9pbnRlciB0byAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50IHRoZWlyIG93biBnbHlwaCBpbWFnZSB0byBjbGllbnQgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25zLiAgTm90ZSB0aGF0IHRoZSBhcHBsaWNhdGlvbiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRzIHRvIGtub3cgYWJvdXQgdGhlIGltYWdlIGZvcm1hdC4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbHNiX2RlbHRhICAgICAgICAgOjogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBoaW50ZWQgYW5kIHVuaGludGVkICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgc2lkZSBiZWFyaW5nIHdoaWxlIGF1dG9oaW50aW5nIGlzICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmUuICBaZXJvIG90aGVyd2lzZS4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHJzYl9kZWx0YSAgICAgICAgIDo6IFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gaGludGVkIGFuZCB1bmhpbnRlZCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCBzaWRlIGJlYXJpbmcgd2hpbGUgYXV0b2hpbnRpbmcgaXMgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlLiAgWmVybyBvdGhlcndpc2UuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSWYgQEZUX0xvYWRfR2x5cGggaXMgY2FsbGVkIHdpdGggZGVmYXVsdCBmbGFncyAoc2VlICAgICAgICAgICAgICAgICovCisgIC8qICAgIEBGVF9MT0FEX0RFRkFVTFQpIHRoZSBnbHlwaCBpbWFnZSBpcyBsb2FkZWQgaW4gdGhlIGdseXBoIHNsb3QgaW4gICAqLworICAvKiAgICBpdHMgbmF0aXZlIGZvcm1hdCAoZS5nLiwgYW4gb3V0bGluZSBnbHlwaCBmb3IgVHJ1ZVR5cGUgYW5kIFR5cGV+MSAgKi8KKyAgLyogICAgZm9ybWF0cykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGltYWdlIGNhbiBsYXRlciBiZSBjb252ZXJ0ZWQgaW50byBhIGJpdG1hcCBieSBjYWxsaW5nICAgICAgICAgKi8KKyAgLyogICAgQEZUX1JlbmRlcl9HbHlwaC4gIFRoaXMgZnVuY3Rpb24gZmluZHMgdGhlIGN1cnJlbnQgcmVuZGVyZXIgZm9yICAgICovCisgIC8qICAgIHRoZSBuYXRpdmUgaW1hZ2UncyBmb3JtYXQsIHRoZW4gaW52b2tlcyBpdC4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHJlbmRlcmVyIGlzIGluIGNoYXJnZSBvZiB0cmFuc2Zvcm1pbmcgdGhlIG5hdGl2ZSBpbWFnZSB0aHJvdWdoICovCisgIC8qICAgIHRoZSBzbG90J3MgZmFjZSB0cmFuc2Zvcm1hdGlvbiBmaWVsZHMsIHRoZW4gY29udmVydGluZyBpdCBpbnRvIGEgICAqLworICAvKiAgICBiaXRtYXAgdGhhdCBpcyByZXR1cm5lZCBpbiBgc2xvdC0+Yml0bWFwJy4gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE5vdGUgdGhhdCBgc2xvdC0+Yml0bWFwX2xlZnQnIGFuZCBgc2xvdC0+Yml0bWFwX3RvcCcgYXJlIGFsc28gdXNlZCAqLworICAvKiAgICB0byBzcGVjaWZ5IHRoZSBwb3NpdGlvbiBvZiB0aGUgYml0bWFwIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBlbiAgKi8KKyAgLyogICAgcG9zaXRpb24gKGUuZy4sIGNvb3JkaW5hdGVzICgwLDApIG9uIHRoZSBiYXNlbGluZSkuICBPZiBjb3Vyc2UsICAgICovCisgIC8qICAgIGBzbG90LT5mb3JtYXQnIGlzIGFsc28gY2hhbmdlZCB0byBARlRfR0xZUEhfRk9STUFUX0JJVE1BUC4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEhlcmUgYSBzbWFsbCBwc2V1ZG8gY29kZSBmcmFnbWVudCB3aGljaCBzaG93cyBob3cgdG8gdXNlICAgICAgICAgICAqLworICAvKiAgICBgbHNiX2RlbHRhJyBhbmQgYHJzYl9kZWx0YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEZUX1BvcyAgb3JpZ2luX3ggICAgICAgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBGVF9Qb3MgIHByZXZfcnNiX2RlbHRhID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBmb3IgYWxsIGdseXBocyBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICA8Y29tcHV0ZSBrZXJuIGJldHdlZW4gY3VycmVudCBhbmQgcHJldmlvdXMgZ2x5cGggYW5kIGFkZCBpdCB0byAqLworICAvKiAgICAgICAgIGBvcmlnaW5feCc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICA8bG9hZCBnbHlwaCB3aXRoIGBGVF9Mb2FkX0dseXBoJz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIGlmICggcHJldl9yc2JfZGVsdGEgLSBmYWNlLT5nbHlwaC0+bHNiX2RlbHRhID49IDMyICkgICAgICAgICAgICovCisgIC8qICAgICAgICAgIG9yaWdpbl94IC09IDY0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgZWxzZSBpZiAoIHByZXZfcnNiX2RlbHRhIC0gZmFjZS0+Z2x5cGgtPmxzYl9kZWx0YSA8IC0zMiApICAgICAgKi8KKyAgLyogICAgICAgICAgb3JpZ2luX3ggKz0gNjQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgcHJldl9yc2JfZGVsdGEgPSBmYWNlLT5nbHlwaC0+cnNiX2RlbHRhOyAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICA8c2F2ZSBnbHlwaCBpbWFnZSwgb3IgcmVuZGVyIGdseXBoLCBvciAuLi4+ICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIG9yaWdpbl94ICs9IGZhY2UtPmdseXBoLT5hZHZhbmNlLng7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgZW5kZm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9HbHlwaFNsb3RSZWNfCisgIHsKKyAgICBGVF9MaWJyYXJ5ICAgICAgICBsaWJyYXJ5OworICAgIEZUX0ZhY2UgICAgICAgICAgIGZhY2U7CisgICAgRlRfR2x5cGhTbG90ICAgICAgbmV4dDsKKyAgICBGVF9VSW50ICAgICAgICAgICByZXNlcnZlZDsgICAgICAgLyogcmV0YWluZWQgZm9yIGJpbmFyeSBjb21wYXRpYmlsaXR5ICovCisgICAgRlRfR2VuZXJpYyAgICAgICAgZ2VuZXJpYzsKKworICAgIEZUX0dseXBoX01ldHJpY3MgIG1ldHJpY3M7CisgICAgRlRfRml4ZWQgICAgICAgICAgbGluZWFySG9yaUFkdmFuY2U7CisgICAgRlRfRml4ZWQgICAgICAgICAgbGluZWFyVmVydEFkdmFuY2U7CisgICAgRlRfVmVjdG9yICAgICAgICAgYWR2YW5jZTsKKworICAgIEZUX0dseXBoX0Zvcm1hdCAgIGZvcm1hdDsKKworICAgIEZUX0JpdG1hcCAgICAgICAgIGJpdG1hcDsKKyAgICBGVF9JbnQgICAgICAgICAgICBiaXRtYXBfbGVmdDsKKyAgICBGVF9JbnQgICAgICAgICAgICBiaXRtYXBfdG9wOworCisgICAgRlRfT3V0bGluZSAgICAgICAgb3V0bGluZTsKKworICAgIEZUX1VJbnQgICAgICAgICAgIG51bV9zdWJnbHlwaHM7CisgICAgRlRfU3ViR2x5cGggICAgICAgc3ViZ2x5cGhzOworCisgICAgdm9pZCogICAgICAgICAgICAgY29udHJvbF9kYXRhOworICAgIGxvbmcgICAgICAgICAgICAgIGNvbnRyb2xfbGVuOworCisgICAgRlRfUG9zICAgICAgICAgICAgbHNiX2RlbHRhOworICAgIEZUX1BvcyAgICAgICAgICAgIHJzYl9kZWx0YTsKKworICAgIHZvaWQqICAgICAgICAgICAgIG90aGVyOworCisgICAgRlRfU2xvdF9JbnRlcm5hbCAgaW50ZXJuYWw7CisKKyAgfSBGVF9HbHlwaFNsb3RSZWM7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICBGIFUgTiBDIFQgSSBPIE4gUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0luaXRfRnJlZVR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEluaXRpYWxpemUgYSBuZXcgRnJlZVR5cGUgbGlicmFyeSBvYmplY3QuICBUaGUgc2V0IG9mIG1vZHVsZXMgICAgICAqLworICAvKiAgICB0aGF0IGFyZSByZWdpc3RlcmVkIGJ5IHRoaXMgZnVuY3Rpb24gaXMgZGV0ZXJtaW5lZCBhdCBidWlsZCB0aW1lLiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhbGlicmFyeSA6OiBBIGhhbmRsZSB0byBhIG5ldyBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJbiBjYXNlIHlvdSB3YW50IHRvIHByb3ZpZGUgeW91ciBvd24gbWVtb3J5IGFsbG9jYXRpbmcgcm91dGluZXMsICAgKi8KKyAgLyogICAgdXNlIEBGVF9OZXdfTGlicmFyeSBpbnN0ZWFkLCBmb2xsb3dlZCBieSBhIGNhbGwgdG8gICAgICAgICAgICAgICAgICovCisgIC8qICAgIEBGVF9BZGRfRGVmYXVsdF9Nb2R1bGVzIChvciBhIHNlcmllcyBvZiBjYWxscyB0byBARlRfQWRkX01vZHVsZSkuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRm9yIG11bHRpLXRocmVhZGluZyBhcHBsaWNhdGlvbnMgZWFjaCB0aHJlYWQgc2hvdWxkIGhhdmUgaXRzIG93biAgICovCisgIC8qICAgIEZUX0xpYnJhcnkgb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSWYgeW91IG5lZWQgcmVmZXJlbmNlLWNvdW50aW5nIChjZi4gQEZUX1JlZmVyZW5jZV9MaWJyYXJ5KSwgdXNlICAgICovCisgIC8qICAgIEBGVF9OZXdfTGlicmFyeSBhbmQgQEZUX0RvbmVfTGlicmFyeS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0luaXRfRnJlZVR5cGUoIEZUX0xpYnJhcnkgICphbGlicmFyeSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRG9uZV9GcmVlVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRGVzdHJveSBhIGdpdmVuIEZyZWVUeXBlIGxpYnJhcnkgb2JqZWN0IGFuZCBhbGwgb2YgaXRzIGNoaWxkcmVuLCAgICovCisgIC8qICAgIGluY2x1ZGluZyByZXNvdXJjZXMsIGRyaXZlcnMsIGZhY2VzLCBzaXplcywgZXRjLiAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxpYnJhcnkgOjogQSBoYW5kbGUgdG8gdGhlIHRhcmdldCBsaWJyYXJ5IG9iamVjdC4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0RvbmVfRnJlZVR5cGUoIEZUX0xpYnJhcnkgIGxpYnJhcnkgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEVudW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX09QRU5fWFhYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgbGlzdCBvZiBiaXQtZmllbGQgY29uc3RhbnRzIHVzZWQgd2l0aGluIHRoZSBgZmxhZ3MnIGZpZWxkIG9mIHRoZSAqLworICAvKiAgICBARlRfT3Blbl9BcmdzIHN0cnVjdHVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PUEVOX01FTU9SWSAgIDo6IFRoaXMgaXMgYSBtZW1vcnktYmFzZWQgc3RyZWFtLiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX09QRU5fU1RSRUFNICAgOjogQ29weSB0aGUgc3RyZWFtIGZyb20gdGhlIGBzdHJlYW0nIGZpZWxkLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT1BFTl9QQVRITkFNRSA6OiBDcmVhdGUgYSBuZXcgaW5wdXQgc3RyZWFtIGZyb20gYSBDfnBhdGggICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT1BFTl9EUklWRVIgICA6OiBVc2UgdGhlIGBkcml2ZXInIGZpZWxkLiAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PUEVOX1BBUkFNUyAgIDo6IFVzZSB0aGUgYG51bV9wYXJhbXMnIGFuZCBgcGFyYW1zJyBmaWVsZHMuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZ0X29wZW5fbWVtb3J5ICAgOjogRGVwcmVjYXRlZDsgdXNlIEBGVF9PUEVOX01FTU9SWSBpbnN0ZWFkLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZnRfb3Blbl9zdHJlYW0gICA6OiBEZXByZWNhdGVkOyB1c2UgQEZUX09QRU5fU1RSRUFNIGluc3RlYWQuICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmdF9vcGVuX3BhdGhuYW1lIDo6IERlcHJlY2F0ZWQ7IHVzZSBARlRfT1BFTl9QQVRITkFNRSBpbnN0ZWFkLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZ0X29wZW5fZHJpdmVyICAgOjogRGVwcmVjYXRlZDsgdXNlIEBGVF9PUEVOX0RSSVZFUiBpbnN0ZWFkLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZnRfb3Blbl9wYXJhbXMgICA6OiBEZXByZWNhdGVkOyB1c2UgQEZUX09QRU5fUEFSQU1TIGluc3RlYWQuICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGBGVF9PUEVOX01FTU9SWScsIGBGVF9PUEVOX1NUUkVBTScsIGFuZCBgRlRfT1BFTl9QQVRITkFNRScgICAgICovCisgIC8qICAgIGZsYWdzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRlRfT1BFTl9NRU1PUlkgICAgMHgxCisjZGVmaW5lIEZUX09QRU5fU1RSRUFNICAgIDB4MgorI2RlZmluZSBGVF9PUEVOX1BBVEhOQU1FICAweDQKKyNkZWZpbmUgRlRfT1BFTl9EUklWRVIgICAgMHg4CisjZGVmaW5lIEZUX09QRU5fUEFSQU1TICAgIDB4MTAKKworI2RlZmluZSBmdF9vcGVuX21lbW9yeSAgICBGVF9PUEVOX01FTU9SWSAgICAgLyogZGVwcmVjYXRlZCAqLworI2RlZmluZSBmdF9vcGVuX3N0cmVhbSAgICBGVF9PUEVOX1NUUkVBTSAgICAgLyogZGVwcmVjYXRlZCAqLworI2RlZmluZSBmdF9vcGVuX3BhdGhuYW1lICBGVF9PUEVOX1BBVEhOQU1FICAgLyogZGVwcmVjYXRlZCAqLworI2RlZmluZSBmdF9vcGVuX2RyaXZlciAgICBGVF9PUEVOX0RSSVZFUiAgICAgLyogZGVwcmVjYXRlZCAqLworI2RlZmluZSBmdF9vcGVuX3BhcmFtcyAgICBGVF9PUEVOX1BBUkFNUyAgICAgLyogZGVwcmVjYXRlZCAqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBzaW1wbGUgc3RydWN0dXJlIHVzZWQgdG8gcGFzcyBtb3JlIG9yIGxlc3MgZ2VuZXJpYyBwYXJhbWV0ZXJzIHRvICovCisgIC8qICAgIEBGVF9PcGVuX0ZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZpZWxkcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHRhZyAgOjogQSBmb3VyLWJ5dGUgaWRlbnRpZmljYXRpb24gdGFnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGF0YSA6OiBBIHBvaW50ZXIgdG8gdGhlIHBhcmFtZXRlciBkYXRhLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIElEIGFuZCBmdW5jdGlvbiBvZiBwYXJhbWV0ZXJzIGFyZSBkcml2ZXItc3BlY2lmaWMuICBTZWUgdGhlICAgICovCisgIC8qICAgIHZhcmlvdXMgRlRfUEFSQU1fVEFHX1hYWCBmbGFncyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgIEZUX1BhcmFtZXRlcl8KKyAgeworICAgIEZUX1VMb25nICAgIHRhZzsKKyAgICBGVF9Qb2ludGVyICBkYXRhOworCisgIH0gRlRfUGFyYW1ldGVyOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U3RydWN0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfT3Blbl9BcmdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBzdHJ1Y3R1cmUgdXNlZCB0byBpbmRpY2F0ZSBob3cgdG8gb3BlbiBhIG5ldyBmb250IGZpbGUgb3IgICAgICAgICovCisgIC8qICAgIHN0cmVhbS4gIEEgcG9pbnRlciB0byBzdWNoIGEgc3RydWN0dXJlIGNhbiBiZSB1c2VkIGFzIGEgcGFyYW1ldGVyICAqLworICAvKiAgICBmb3IgdGhlIGZ1bmN0aW9ucyBARlRfT3Blbl9GYWNlIGFuZCBARlRfQXR0YWNoX1N0cmVhbS4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmbGFncyAgICAgICA6OiBBIHNldCBvZiBiaXQgZmxhZ3MgaW5kaWNhdGluZyBob3cgdG8gdXNlIHRoZSAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBtZW1vcnlfYmFzZSA6OiBUaGUgZmlyc3QgYnl0ZSBvZiB0aGUgZmlsZSBpbiBtZW1vcnkuICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1lbW9yeV9zaXplIDo6IFRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBmaWxlIGluIG1lbW9yeS4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcGF0aG5hbWUgICAgOjogQSBwb2ludGVyIHRvIGFuIDgtYml0IGZpbGUgcGF0aG5hbWUuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBzdHJlYW0gICAgICA6OiBBIGhhbmRsZSB0byBhIHNvdXJjZSBzdHJlYW0gb2JqZWN0LiAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRyaXZlciAgICAgIDo6IFRoaXMgZmllbGQgaXMgZXhjbHVzaXZlbHkgdXNlZCBieSBARlRfT3Blbl9GYWNlOyAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBpdCBzaW1wbHkgc3BlY2lmaWVzIHRoZSBmb250IGRyaXZlciB0byB1c2UgdG8gb3BlbiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgdGhlIGZhY2UuICBJZiBzZXQgdG9+MCwgRnJlZVR5cGUgdHJpZXMgdG8gbG9hZCB0aGUgICovCisgIC8qICAgICAgICAgICAgICAgICAgIGZhY2Ugd2l0aCBlYWNoIG9uZSBvZiB0aGUgZHJpdmVycyBpbiBpdHMgbGlzdC4gICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbnVtX3BhcmFtcyAgOjogVGhlIG51bWJlciBvZiBleHRyYSBwYXJhbWV0ZXJzLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwYXJhbXMgICAgICA6OiBFeHRyYSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgZm9udCBkcml2ZXIgd2hlbiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgb3BlbmluZyBhIG5ldyBmYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHN0cmVhbSB0eXBlIGlzIGRldGVybWluZWQgYnkgdGhlIGNvbnRlbnRzIG9mIGBmbGFncycgd2hpY2ggICAgICovCisgIC8qICAgIGFyZSB0ZXN0ZWQgaW4gdGhlIGZvbGxvd2luZyBvcmRlciBieSBARlRfT3Blbl9GYWNlOiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSWYgdGhlIGBGVF9PUEVOX01FTU9SWScgYml0IGlzIHNldCwgYXNzdW1lIHRoYXQgdGhpcyBpcyBhICAgICAgICAgICovCisgIC8qICAgIG1lbW9yeSBmaWxlIG9mIGBtZW1vcnlfc2l6ZScgYnl0ZXMsIGxvY2F0ZWQgYXQgYG1lbW9yeV9hZGRyZXNzJy4gICAqLworICAvKiAgICBUaGUgZGF0YSBhcmUgYXJlIG5vdCBjb3BpZWQsIGFuZCB0aGUgY2xpZW50IGlzIHJlc3BvbnNpYmxlIGZvciAgICAgKi8KKyAgLyogICAgcmVsZWFzaW5nIGFuZCBkZXN0cm95aW5nIHRoZW0gX2FmdGVyXyB0aGUgY29ycmVzcG9uZGluZyBjYWxsIHRvICAgICovCisgIC8qICAgIEBGVF9Eb25lX0ZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgT3RoZXJ3aXNlLCBpZiB0aGUgYEZUX09QRU5fU1RSRUFNJyBiaXQgaXMgc2V0LCBhc3N1bWUgdGhhdCBhICAgICAgICovCisgIC8qICAgIGN1c3RvbSBpbnB1dCBzdHJlYW0gYHN0cmVhbScgaXMgdXNlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgT3RoZXJ3aXNlLCBpZiB0aGUgYEZUX09QRU5fUEFUSE5BTUUnIGJpdCBpcyBzZXQsIGFzc3VtZSB0aGF0IHRoaXMgICovCisgIC8qICAgIGlzIGEgbm9ybWFsIGZpbGUgYW5kIHVzZSBgcGF0aG5hbWUnIHRvIG9wZW4gaXQuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSWYgdGhlIGBGVF9PUEVOX0RSSVZFUicgYml0IGlzIHNldCwgQEZUX09wZW5fRmFjZSBvbmx5IHRyaWVzIHRvICAgICovCisgIC8qICAgIG9wZW4gdGhlIGZpbGUgd2l0aCB0aGUgZHJpdmVyIHdob3NlIGhhbmRsZXIgaXMgaW4gYGRyaXZlcicuICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSWYgdGhlIGBGVF9PUEVOX1BBUkFNUycgYml0IGlzIHNldCwgdGhlIHBhcmFtZXRlcnMgZ2l2ZW4gYnkgICAgICAgICovCisgIC8qICAgIGBudW1fcGFyYW1zJyBhbmQgYHBhcmFtcycgaXMgdXNlZC4gIFRoZXkgYXJlIGlnbm9yZWQgb3RoZXJ3aXNlLiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSWRlYWxseSwgYm90aCB0aGUgYHBhdGhuYW1lJyBhbmQgYHBhcmFtcycgZmllbGRzIHNob3VsZCBiZSB0YWdnZWQgICovCisgIC8qICAgIGFzIGBjb25zdCc7IHRoaXMgaXMgbWlzc2luZyBmb3IgQVBJIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAgSW4gICAqLworICAvKiAgICBvdGhlciB3b3JkcywgYXBwbGljYXRpb25zIHNob3VsZCB0cmVhdCB0aGVtIGFzIHJlYWQtb25seS4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgc3RydWN0ICBGVF9PcGVuX0FyZ3NfCisgIHsKKyAgICBGVF9VSW50ICAgICAgICAgZmxhZ3M7CisgICAgY29uc3QgRlRfQnl0ZSogIG1lbW9yeV9iYXNlOworICAgIEZUX0xvbmcgICAgICAgICBtZW1vcnlfc2l6ZTsKKyAgICBGVF9TdHJpbmcqICAgICAgcGF0aG5hbWU7CisgICAgRlRfU3RyZWFtICAgICAgIHN0cmVhbTsKKyAgICBGVF9Nb2R1bGUgICAgICAgZHJpdmVyOworICAgIEZUX0ludCAgICAgICAgICBudW1fcGFyYW1zOworICAgIEZUX1BhcmFtZXRlciogICBwYXJhbXM7CisKKyAgfSBGVF9PcGVuX0FyZ3M7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9OZXdfRmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGNhbGxzIEBGVF9PcGVuX0ZhY2UgdG8gb3BlbiBhIGZvbnQgYnkgaXRzIHBhdGhuYW1lLiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsaWJyYXJ5ICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IHJlc291cmNlLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwYXRobmFtZSAgIDo6IEEgcGF0aCB0byB0aGUgZm9udCBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2VfaW5kZXggOjogVGhlIGluZGV4IG9mIHRoZSBmYWNlIHdpdGhpbiB0aGUgZm9udC4gIFRoZSBmaXJzdCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGZhY2UgaGFzIGluZGV4fjAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxPdXRwdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhZmFjZSAgICAgIDo6IEEgaGFuZGxlIHRvIGEgbmV3IGZhY2Ugb2JqZWN0LiAgSWYgYGZhY2VfaW5kZXgnIGlzICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybywgaXQgbXVzdCBiZSBub24tTlVMTC4gICovCisgIC8qICAgICAgICAgICAgICAgICAgU2VlIEBGVF9PcGVuX0ZhY2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFVzZSBARlRfRG9uZV9GYWNlIHRvIGRlc3Ryb3kgdGhlIGNyZWF0ZWQgQEZUX0ZhY2Ugb2JqZWN0IChhbG9uZyAgICAqLworICAvKiAgICB3aXRoIGl0cyBzbG90IGFuZCBzaXplcykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9OZXdfRmFjZSggRlRfTGlicmFyeSAgIGxpYnJhcnksCisgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgZmlsZXBhdGhuYW1lLAorICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICBGVF9GYWNlICAgICAqYWZhY2UgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX05ld19NZW1vcnlfRmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgZnVuY3Rpb24gY2FsbHMgQEZUX09wZW5fRmFjZSB0byBvcGVuIGEgZm9udCB3aGljaCBoYXMgYmVlbiAgICAqLworICAvKiAgICBsb2FkZWQgaW50byBtZW1vcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsaWJyYXJ5ICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBsaWJyYXJ5IHJlc291cmNlLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmaWxlX2Jhc2UgIDo6IEEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmb250IGRhdGEuICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZpbGVfc2l6ZSAgOjogVGhlIHNpemUgb2YgdGhlIG1lbW9yeSBjaHVuayB1c2VkIGJ5IHRoZSBmb250IGRhdGEuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZV9pbmRleCA6OiBUaGUgaW5kZXggb2YgdGhlIGZhY2Ugd2l0aGluIHRoZSBmb250LiAgVGhlIGZpcnN0ICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgZmFjZSBoYXMgaW5kZXh+MC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFmYWNlICAgICAgOjogQSBoYW5kbGUgdG8gYSBuZXcgZmFjZSBvYmplY3QuICBJZiBgZmFjZV9pbmRleCcgaXMgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLCBpdCBtdXN0IGJlIG5vbi1OVUxMLiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBTZWUgQEZUX09wZW5fRmFjZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgWW91IG11c3Qgbm90IGRlYWxsb2NhdGUgdGhlIG1lbW9yeSBiZWZvcmUgY2FsbGluZyBARlRfRG9uZV9GYWNlLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfTmV3X01lbW9yeV9GYWNlKCBGVF9MaWJyYXJ5ICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGVF9CeXRlKiAgZmlsZV9iYXNlLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgICBmaWxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgRlRfTG9uZyAgICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgKmFmYWNlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9PcGVuX0ZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDcmVhdGUgYSBmYWNlIG9iamVjdCBmcm9tIGEgZ2l2ZW4gcmVzb3VyY2UgZGVzY3JpYmVkIGJ5ICAgICAgICAgICAgKi8KKyAgLyogICAgQEZUX09wZW5fQXJncy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbGlicmFyeSAgICA6OiBBIGhhbmRsZSB0byB0aGUgbGlicmFyeSByZXNvdXJjZS4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYXJncyAgICAgICA6OiBBIHBvaW50ZXIgdG8gYW4gYEZUX09wZW5fQXJncycgc3RydWN0dXJlIHdoaWNoIG11c3QgICovCisgIC8qICAgICAgICAgICAgICAgICAgYmUgZmlsbGVkIGJ5IHRoZSBjYWxsZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZV9pbmRleCA6OiBUaGUgaW5kZXggb2YgdGhlIGZhY2Ugd2l0aGluIHRoZSBmb250LiAgVGhlIGZpcnN0ICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgZmFjZSBoYXMgaW5kZXh+MC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFmYWNlICAgICAgOjogQSBoYW5kbGUgdG8gYSBuZXcgZmFjZSBvYmplY3QuICBJZiBgZmFjZV9pbmRleCcgaXMgICAqLworICAvKiAgICAgICAgICAgICAgICAgIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLCBpdCBtdXN0IGJlIG5vbi1OVUxMLiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBTZWUgbm90ZSBiZWxvdy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVW5saWtlIEZyZWVUeXBlIDEueCwgdGhpcyBmdW5jdGlvbiBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgYSBnbHlwaCAgICovCisgIC8qICAgIHNsb3QgZm9yIHRoZSBmYWNlIG9iamVjdCB3aGljaCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgdGhyb3VnaCAgICAqLworICAvKiAgICBgZmFjZS0+Z2x5cGgnLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX09wZW5fRmFjZSBjYW4gYmUgdXNlZCB0byBxdWlja2x5IGNoZWNrIHdoZXRoZXIgdGhlIGZvbnQgICAgICAgICAqLworICAvKiAgICBmb3JtYXQgb2YgYSBnaXZlbiBmb250IHJlc291cmNlIGlzIHN1cHBvcnRlZCBieSBGcmVlVHlwZS4gIElmIHRoZSAgKi8KKyAgLyogICAgYGZhY2VfaW5kZXgnIGZpZWxkIGlzIG5lZ2F0aXZlLCB0aGUgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUgaXN+MCAgICovCisgIC8qICAgIGlmIHRoZSBmb250IGZvcm1hdCBpcyByZWNvZ25pemVkLCBvciBub24temVybyBvdGhlcndpc2U7ICAgICAgICAgICAqLworICAvKiAgICB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIG1vcmUgb3IgbGVzcyBlbXB0eSBmYWNlIGhhbmRsZSBpbiBgKmFmYWNlJyAgKi8KKyAgLyogICAgKGlmIGBhZmFjZScgaXNuJ3QgTlVMTCkuICBUaGUgb25seSB1c2VmdWwgZmllbGQgaW4gdGhpcyBzcGVjaWFsICAgICovCisgIC8qICAgIGNhc2UgaXMgYGZhY2UtPm51bV9mYWNlcycgd2hpY2ggZ2l2ZXMgdGhlIG51bWJlciBvZiBmYWNlcyB3aXRoaW4gICAqLworICAvKiAgICB0aGUgZm9udCBmaWxlLiAgQWZ0ZXIgZXhhbWluYXRpb24sIHRoZSByZXR1cm5lZCBARlRfRmFjZSBzdHJ1Y3R1cmUgKi8KKyAgLyogICAgc2hvdWxkIGJlIGRlYWxsb2NhdGVkIHdpdGggYSBjYWxsIHRvIEBGVF9Eb25lX0ZhY2UuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBFYWNoIG5ldyBmYWNlIG9iamVjdCBjcmVhdGVkIHdpdGggdGhpcyBmdW5jdGlvbiBhbHNvIG93bnMgYSAgICAgICAgKi8KKyAgLyogICAgZGVmYXVsdCBARlRfU2l6ZSBvYmplY3QsIGFjY2Vzc2libGUgYXMgYGZhY2UtPnNpemUnLiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBPbmUgQEZUX0xpYnJhcnkgaW5zdGFuY2UgY2FuIGhhdmUgbXVsdGlwbGUgZmFjZSBvYmplY3RzLCB0aGlzIGlzLCAgKi8KKyAgLyogICAgQEZUX09wZW5fRmFjZSBhbmQgaXRzIHNpYmxpbmdzIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdXNpbmcgICovCisgIC8qICAgIHRoZSBzYW1lIGBsaWJyYXJ5JyBhcmd1bWVudC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2VlIHRoZSBkaXNjdXNzaW9uIG9mIHJlZmVyZW5jZSBjb3VudGVycyBpbiB0aGUgZGVzY3JpcHRpb24gb2YgICAgICovCisgIC8qICAgIEBGVF9SZWZlcmVuY2VfRmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX09wZW5fRmFjZSggRlRfTGlicmFyeSAgICAgICAgICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICBjb25zdCBGVF9PcGVuX0FyZ3MqICBhcmdzLAorICAgICAgICAgICAgICAgIEZUX0xvbmcgICAgICAgICAgICAgIGZhY2VfaW5kZXgsCisgICAgICAgICAgICAgICAgRlRfRmFjZSAgICAgICAgICAgICAqYWZhY2UgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0F0dGFjaF9GaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgZnVuY3Rpb24gY2FsbHMgQEZUX0F0dGFjaF9TdHJlYW0gdG8gYXR0YWNoIGEgZmlsZS4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgICAgICA6OiBUaGUgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZpbGVwYXRobmFtZSA6OiBUaGUgcGF0aG5hbWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0F0dGFjaF9GaWxlKCBGVF9GYWNlICAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqICBmaWxlcGF0aG5hbWUgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0F0dGFjaF9TdHJlYW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGBBdHRhY2gnIGRhdGEgdG8gYSBmYWNlIG9iamVjdC4gIE5vcm1hbGx5LCB0aGlzIGlzIHVzZWQgdG8gcmVhZCAgICAqLworICAvKiAgICBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciB0aGUgZmFjZSBvYmplY3QuICBGb3IgZXhhbXBsZSwgeW91IGNhbiAgKi8KKyAgLyogICAgYXR0YWNoIGFuIEFGTSBmaWxlIHRoYXQgY29tZXMgd2l0aCBhIFR5cGV+MSBmb250IHRvIGdldCB0aGUgICAgICAgICovCisgIC8qICAgIGtlcm5pbmcgdmFsdWVzIGFuZCBvdGhlciBtZXRyaWNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgICAgOjogVGhlIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHBhcmFtZXRlcnMgOjogQSBwb2ludGVyIHRvIEBGVF9PcGVuX0FyZ3Mgd2hpY2ggbXVzdCBiZSBmaWxsZWQgYnkgICAqLworICAvKiAgICAgICAgICAgICAgICAgIHRoZSBjYWxsZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgbWVhbmluZyBvZiB0aGUgYGF0dGFjaCcgKGkuZS4sIHdoYXQgcmVhbGx5IGhhcHBlbnMgd2hlbiB0aGUgICAgKi8KKyAgLyogICAgbmV3IGZpbGUgaXMgcmVhZCkgaXMgbm90IGZpeGVkIGJ5IEZyZWVUeXBlIGl0c2VsZi4gIEl0IHJlYWxseSAgICAgICovCisgIC8qICAgIGRlcGVuZHMgb24gdGhlIGZvbnQgZm9ybWF0IChhbmQgdGh1cyB0aGUgZm9udCBkcml2ZXIpLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ2xpZW50IGFwcGxpY2F0aW9ucyBhcmUgZXhwZWN0ZWQgdG8ga25vdyB3aGF0IHRoZXkgYXJlIGRvaW5nICAgICAgICovCisgIC8qICAgIHdoZW4gaW52b2tpbmcgdGhpcyBmdW5jdGlvbi4gIE1vc3QgZHJpdmVycyBzaW1wbHkgZG8gbm90IGltcGxlbWVudCAqLworICAvKiAgICBmaWxlIGF0dGFjaG1lbnRzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9BdHRhY2hfU3RyZWFtKCBGVF9GYWNlICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICBGVF9PcGVuX0FyZ3MqICBwYXJhbWV0ZXJzICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SZWZlcmVuY2VfRmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGNvdW50ZXIgZ2V0cyBpbml0aWFsaXplZCB0b34xIGF0IHRoZSB0aW1lIGFuIEBGVF9GYWNlIHN0cnVjdHVyZSAgKi8KKyAgLyogICAgaXMgY3JlYXRlZC4gIFRoaXMgZnVuY3Rpb24gaW5jcmVtZW50cyB0aGUgY291bnRlci4gIEBGVF9Eb25lX0ZhY2UgICovCisgIC8qICAgIHRoZW4gb25seSBkZXN0cm95cyBhIGZhY2UgaWYgdGhlIGNvdW50ZXIgaXN+MSwgb3RoZXJ3aXNlIGl0IHNpbXBseSAqLworICAvKiAgICBkZWNyZW1lbnRzIHRoZSBjb3VudGVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgZnVuY3Rpb24gaGVscHMgaW4gbWFuYWdpbmcgbGlmZS1jeWNsZXMgb2Ygc3RydWN0dXJlcyB3aGljaCAgICAqLworICAvKiAgICByZWZlcmVuY2UgQEZUX0ZhY2Ugb2JqZWN0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlIDo6IEEgaGFuZGxlIHRvIGEgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTaW5jZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAyLjQuMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9SZWZlcmVuY2VfRmFjZSggRlRfRmFjZSAgZmFjZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRG9uZV9GYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRGlzY2FyZCBhIGdpdmVuIGZhY2Ugb2JqZWN0LCBhcyB3ZWxsIGFzIGFsbCBvZiBpdHMgY2hpbGQgc2xvdHMgYW5kICovCisgIC8qICAgIHNpemVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgOjogQSBoYW5kbGUgdG8gYSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNlZSB0aGUgZGlzY3Vzc2lvbiBvZiByZWZlcmVuY2UgY291bnRlcnMgaW4gdGhlIGRlc2NyaXB0aW9uIG9mICAgICAqLworICAvKiAgICBARlRfUmVmZXJlbmNlX0ZhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9Eb25lX0ZhY2UoIEZUX0ZhY2UgIGZhY2UgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NlbGVjdF9TaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNlbGVjdCBhIGJpdG1hcCBzdHJpa2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgICAgICA6OiBBIGhhbmRsZSB0byBhIHRhcmdldCBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHN0cmlrZV9pbmRleCA6OiBUaGUgaW5kZXggb2YgdGhlIGJpdG1hcCBzdHJpa2UgaW4gdGhlICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgYGF2YWlsYWJsZV9zaXplcycgZmllbGQgb2YgQEZUX0ZhY2VSZWMgc3RydWN0dXJlLiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9TZWxlY3RfU2l6ZSggRlRfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgICAgIEZUX0ludCAgIHN0cmlrZV9pbmRleCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2l6ZV9SZXF1ZXN0X1R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQW4gZW51bWVyYXRpb24gdHlwZSB0aGF0IGxpc3RzIHRoZSBzdXBwb3J0ZWQgc2l6ZSByZXF1ZXN0IHR5cGVzLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VmFsdWVzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU0laRV9SRVFVRVNUX1RZUEVfTk9NSU5BTCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhlIG5vbWluYWwgc2l6ZS4gIFRoZSBgdW5pdHNfcGVyX0VNJyBmaWVsZCBvZiBARlRfRmFjZVJlYyBpcyAgICAqLworICAvKiAgICAgIHVzZWQgdG8gZGV0ZXJtaW5lIGJvdGggc2NhbGluZyB2YWx1ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NJWkVfUkVRVUVTVF9UWVBFX1JFQUxfRElNIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSByZWFsIGRpbWVuc2lvbi4gIFRoZSBzdW0gb2YgdGhlIHRoZSBgYXNjZW5kZXInIGFuZCAobWludXMgICAgKi8KKyAgLyogICAgICBvZikgdGhlIGBkZXNjZW5kZXInIGZpZWxkcyBvZiBARlRfRmFjZVJlYyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgICovCisgIC8qICAgICAgYm90aCBzY2FsaW5nIHZhbHVlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU0laRV9SRVFVRVNUX1RZUEVfQkJPWCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhlIGZvbnQgYm91bmRpbmcgYm94LiAgVGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIGBiYm94JyBmaWVsZCAqLworICAvKiAgICAgIG9mIEBGVF9GYWNlUmVjIGFyZSB1c2VkIHRvIGRldGVybWluZSB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgKi8KKyAgLyogICAgICBzY2FsaW5nIHZhbHVlLCByZXNwZWN0aXZlbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TSVpFX1JFUVVFU1RfVFlQRV9DRUxMIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGUgYG1heF9hZHZhbmNlX3dpZHRoJyBmaWVsZCBvZiBARlRfRmFjZVJlYyBpcyB1c2VkIHRvICAgICAgICAgICovCisgIC8qICAgICAgZGV0ZXJtaW5lIHRoZSBob3Jpem9udGFsIHNjYWxpbmcgdmFsdWU7IHRoZSB2ZXJ0aWNhbCBzY2FsaW5nICAgICAqLworICAvKiAgICAgIHZhbHVlIGlzIGRldGVybWluZWQgdGhlIHNhbWUgd2F5IGFzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBARlRfU0laRV9SRVFVRVNUX1RZUEVfUkVBTF9ESU0gZG9lcy4gIEZpbmFsbHksIGJvdGggc2NhbGluZyAgICAgICovCisgIC8qICAgICAgdmFsdWVzIGFyZSBzZXQgdG8gdGhlIHNtYWxsZXIgb25lLiAgVGhpcyB0eXBlIGlzIHVzZWZ1bCBpZiB5b3UgICAqLworICAvKiAgICAgIHdhbnQgdG8gc3BlY2lmeSB0aGUgZm9udCBzaXplIGZvciwgc2F5LCBhIHdpbmRvdyBvZiBhIGdpdmVuICAgICAgKi8KKyAgLyogICAgICBkaW1lbnNpb24gYW5kIDgweDI0IGNlbGxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TSVpFX1JFUVVFU1RfVFlQRV9TQ0FMRVMgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBTcGVjaWZ5IHRoZSBzY2FsaW5nIHZhbHVlcyBkaXJlY3RseS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGFib3ZlIGRlc2NyaXB0aW9ucyBvbmx5IGFwcGx5IHRvIHNjYWxhYmxlIGZvcm1hdHMuICBGb3IgYml0bWFwICovCisgIC8qICAgIGZvcm1hdHMsIHRoZSBiZWhhdmlvdXIgaXMgdXAgdG8gdGhlIGRyaXZlci4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2VlIHRoZSBub3RlIHNlY3Rpb24gb2YgQEZUX1NpemVfTWV0cmljcyBpZiB5b3Ugd29uZGVyIGhvdyBzaXplICAgICovCisgIC8qICAgIHJlcXVlc3RpbmcgcmVsYXRlcyB0byBzY2FsaW5nIHZhbHVlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBlbnVtICBGVF9TaXplX1JlcXVlc3RfVHlwZV8KKyAgeworICAgIEZUX1NJWkVfUkVRVUVTVF9UWVBFX05PTUlOQUwsCisgICAgRlRfU0laRV9SRVFVRVNUX1RZUEVfUkVBTF9ESU0sCisgICAgRlRfU0laRV9SRVFVRVNUX1RZUEVfQkJPWCwKKyAgICBGVF9TSVpFX1JFUVVFU1RfVFlQRV9DRUxMLAorICAgIEZUX1NJWkVfUkVRVUVTVF9UWVBFX1NDQUxFUywKKworICAgIEZUX1NJWkVfUkVRVUVTVF9UWVBFX01BWAorCisgIH0gRlRfU2l6ZV9SZXF1ZXN0X1R5cGU7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTdHJ1Y3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TaXplX1JlcXVlc3RSZWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHN0cnVjdHVyZSB1c2VkIHRvIG1vZGVsIGEgc2l6ZSByZXF1ZXN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGaWVsZHM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB0eXBlICAgICAgICAgICA6OiBTZWUgQEZUX1NpemVfUmVxdWVzdF9UeXBlLiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHdpZHRoICAgICAgICAgIDo6IFRoZSBkZXNpcmVkIHdpZHRoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgaGVpZ2h0ICAgICAgICAgOjogVGhlIGRlc2lyZWQgaGVpZ2h0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBob3JpUmVzb2x1dGlvbiA6OiBUaGUgaG9yaXpvbnRhbCByZXNvbHV0aW9uLiAgSWYgc2V0IHRvIHplcm8sICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgYHdpZHRoJyBpcyB0cmVhdGVkIGFzIGEgMjYuNiBmcmFjdGlvbmFsIHBpeGVsICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdmVydFJlc29sdXRpb24gOjogVGhlIHZlcnRpY2FsIHJlc29sdXRpb24uICBJZiBzZXQgdG8gemVybywgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgIGBoZWlnaHQnIGlzIHRyZWF0ZWQgYXMgYSAyNi42IGZyYWN0aW9uYWwgcGl4ZWwgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJZiBgd2lkdGgnIGlzIHplcm8sIHRoZW4gdGhlIGhvcml6b250YWwgc2NhbGluZyB2YWx1ZSBpcyBzZXQgZXF1YWwgKi8KKyAgLyogICAgdG8gdGhlIHZlcnRpY2FsIHNjYWxpbmcgdmFsdWUsIGFuZCB2aWNlIHZlcnNhLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIHN0cnVjdCAgRlRfU2l6ZV9SZXF1ZXN0UmVjXworICB7CisgICAgRlRfU2l6ZV9SZXF1ZXN0X1R5cGUgIHR5cGU7CisgICAgRlRfTG9uZyAgICAgICAgICAgICAgIHdpZHRoOworICAgIEZUX0xvbmcgICAgICAgICAgICAgICBoZWlnaHQ7CisgICAgRlRfVUludCAgICAgICAgICAgICAgIGhvcmlSZXNvbHV0aW9uOworICAgIEZUX1VJbnQgICAgICAgICAgICAgICB2ZXJ0UmVzb2x1dGlvbjsKKworICB9IEZUX1NpemVfUmVxdWVzdFJlYzsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFN0cnVjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NpemVfUmVxdWVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgaGFuZGxlIHRvIGEgc2l6ZSByZXF1ZXN0IHN0cnVjdHVyZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgdHlwZWRlZiBzdHJ1Y3QgRlRfU2l6ZV9SZXF1ZXN0UmVjXyAgKkZUX1NpemVfUmVxdWVzdDsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1JlcXVlc3RfU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJlc2l6ZSB0aGUgc2NhbGUgb2YgdGhlIGFjdGl2ZSBARlRfU2l6ZSBvYmplY3QgaW4gYSBmYWNlLiAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgOjogQSBoYW5kbGUgdG8gYSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHJlcSAgOjogQSBwb2ludGVyIHRvIGEgQEZUX1NpemVfUmVxdWVzdFJlYy4gICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEFsdGhvdWdoIGRyaXZlcnMgbWF5IHNlbGVjdCB0aGUgYml0bWFwIHN0cmlrZSBtYXRjaGluZyB0aGUgICAgICAgICAqLworICAvKiAgICByZXF1ZXN0LCB5b3Ugc2hvdWxkIG5vdCByZWx5IG9uIHRoaXMgaWYgeW91IGludGVuZCB0byBzZWxlY3QgYSAgICAgKi8KKyAgLyogICAgcGFydGljdWxhciBiaXRtYXAgc3RyaWtlLiAgVXNlIEBGVF9TZWxlY3RfU2l6ZSBpbnN0ZWFkIGluIHRoYXQgICAgICovCisgIC8qICAgIGNhc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHJlbGF0aW9uIGJldHdlZW4gdGhlIHJlcXVlc3RlZCBzaXplIGFuZCB0aGUgcmVzdWx0aW5nIGdseXBoICAgICovCisgIC8qICAgIHNpemUgaXMgZGVwZW5kZW50IGVudGlyZWx5IG9uIGhvdyB0aGUgc2l6ZSBpcyBkZWZpbmVkIGluIHRoZSAgICAgICAqLworICAvKiAgICBzb3VyY2UgZmFjZS4gIFRoZSBmb250IGRlc2lnbmVyIGNob29zZXMgdGhlIGZpbmFsIHNpemUgb2YgZWFjaCAgICAgKi8KKyAgLyogICAgZ2x5cGggcmVsYXRpdmUgdG8gdGhpcyBzaXplLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gcmVmZXIgdG8gICAgICAgICovCisgIC8qICAgIGBodHRwOi8vd3d3LmZyZWV0eXBlLm9yZy9mcmVldHlwZTIvZG9jcy9nbHlwaHMvZ2x5cGhzLTIuaHRtbCcgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX1JlcXVlc3RfU2l6ZSggRlRfRmFjZSAgICAgICAgICBmYWNlLAorICAgICAgICAgICAgICAgICAgIEZUX1NpemVfUmVxdWVzdCAgcmVxICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TZXRfQ2hhcl9TaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGNhbGxzIEBGVF9SZXF1ZXN0X1NpemUgdG8gcmVxdWVzdCB0aGUgbm9taW5hbCBzaXplICAgKi8KKyAgLyogICAgKGluIHBvaW50cykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICAgICAgIDo6IEEgaGFuZGxlIHRvIGEgdGFyZ2V0IGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2hhcl93aWR0aCAgICAgIDo6IFRoZSBub21pbmFsIHdpZHRoLCBpbiAyNi42IGZyYWN0aW9uYWwgcG9pbnRzLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjaGFyX2hlaWdodCAgICAgOjogVGhlIG5vbWluYWwgaGVpZ2h0LCBpbiAyNi42IGZyYWN0aW9uYWwgcG9pbnRzLiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGhvcnpfcmVzb2x1dGlvbiA6OiBUaGUgaG9yaXpvbnRhbCByZXNvbHV0aW9uIGluIGRwaS4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdmVydF9yZXNvbHV0aW9uIDo6IFRoZSB2ZXJ0aWNhbCByZXNvbHV0aW9uIGluIGRwaS4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSWYgZWl0aGVyIHRoZSBjaGFyYWN0ZXIgd2lkdGggb3IgaGVpZ2h0IGlzIHplcm8sIGl0IGlzIHNldCBlcXVhbCAgICovCisgIC8qICAgIHRvIHRoZSBvdGhlciB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSWYgZWl0aGVyIHRoZSBob3Jpem9udGFsIG9yIHZlcnRpY2FsIHJlc29sdXRpb24gaXMgemVybywgaXQgaXMgc2V0ICovCisgIC8qICAgIGVxdWFsIHRvIHRoZSBvdGhlciB2YWx1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBjaGFyYWN0ZXIgd2lkdGggb3IgaGVpZ2h0IHNtYWxsZXIgdGhhbiAxcHQgaXMgc2V0IHRvIDFwdDsgaWYgICAgICovCisgIC8qICAgIGJvdGggcmVzb2x1dGlvbiB2YWx1ZXMgYXJlIHplcm8sIHRoZXkgYXJlIHNldCB0byA3MmRwaS4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRG9uJ3QgdXNlIHRoaXMgZnVuY3Rpb24gaWYgeW91IGFyZSB1c2luZyB0aGUgRnJlZVR5cGUgY2FjaGUgQVBJLiAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfU2V0X0NoYXJfU2l6ZSggRlRfRmFjZSAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgY2hhcl93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgRlRfRjI2RG90NiAgY2hhcl9oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGhvcnpfcmVzb2x1dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgdmVydF9yZXNvbHV0aW9uICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TZXRfUGl4ZWxfU2l6ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGNhbGxzIEBGVF9SZXF1ZXN0X1NpemUgdG8gcmVxdWVzdCB0aGUgbm9taW5hbCBzaXplICAgKi8KKyAgLyogICAgKGluIHBpeGVscykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSB0YXJnZXQgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcGl4ZWxfd2lkdGggIDo6IFRoZSBub21pbmFsIHdpZHRoLCBpbiBwaXhlbHMuICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwaXhlbF9oZWlnaHQgOjogVGhlIG5vbWluYWwgaGVpZ2h0LCBpbiBwaXhlbHMuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBZb3Ugc2hvdWxkIG5vdCByZWx5IG9uIHRoZSByZXN1bHRpbmcgZ2x5cGhzIG1hdGNoaW5nLCBvciBiZWluZyAgICAgKi8KKyAgLyogICAgY29uc3RyYWluZWQsIHRvIHRoaXMgcGl4ZWwgc2l6ZS4gIFJlZmVyIHRvIEBGVF9SZXF1ZXN0X1NpemUgdG8gICAgICovCisgIC8qICAgIHVuZGVyc3RhbmQgaG93IHJlcXVlc3RlZCBzaXplcyByZWxhdGUgdG8gYWN0dWFsIHNpemVzLiAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX1NldF9QaXhlbF9TaXplcyggRlRfRmFjZSAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICBwaXhlbF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICBwaXhlbF9oZWlnaHQgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xvYWRfR2x5cGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgZnVuY3Rpb24gdXNlZCB0byBsb2FkIGEgc2luZ2xlIGdseXBoIGludG8gdGhlIGdseXBoIHNsb3Qgb2YgYSAgICAqLworICAvKiAgICBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbk91dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICAgICA6OiBBIGhhbmRsZSB0byB0aGUgdGFyZ2V0IGZhY2Ugb2JqZWN0IHdoZXJlIHRoZSBnbHlwaCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgaXMgbG9hZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZ2x5cGhfaW5kZXggOjogVGhlIGluZGV4IG9mIHRoZSBnbHlwaCBpbiB0aGUgZm9udCBmaWxlLiAgRm9yICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIENJRC1rZXllZCBmb250cyAoZWl0aGVyIGluIFBTIG9yIGluIENGRiBmb3JtYXQpICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICB0aGlzIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgQ0lEIHZhbHVlLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxvYWRfZmxhZ3MgIDo6IEEgZmxhZyBpbmRpY2F0aW5nIHdoYXQgdG8gbG9hZCBmb3IgdGhpcyBnbHlwaC4gIFRoZSAqLworICAvKiAgICAgICAgICAgICAgICAgICBARlRfTE9BRF9YWFggY29uc3RhbnRzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgZ2x5cGggbG9hZGluZyBwcm9jZXNzIChlLmcuLCB3aGV0aGVyIHRoZSBvdXRsaW5lICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIHNob3VsZCBiZSBzY2FsZWQsIHdoZXRoZXIgdG8gbG9hZCBiaXRtYXBzIG9yIG5vdCwgICAqLworICAvKiAgICAgICAgICAgICAgICAgICB3aGV0aGVyIHRvIGhpbnQgdGhlIG91dGxpbmUsIGV0YykuICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgbG9hZGVkIGdseXBoIG1heSBiZSB0cmFuc2Zvcm1lZC4gIFNlZSBARlRfU2V0X1RyYW5zZm9ybSBmb3IgICAgKi8KKyAgLyogICAgdGhlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGb3Igc3Vic2V0dGVkIENJRC1rZXllZCBmb250cywgYEZUX0Vycl9JbnZhbGlkX0FyZ3VtZW50JyBpcyAgICAgICAgKi8KKyAgLyogICAgcmV0dXJuZWQgZm9yIGludmFsaWQgQ0lEIHZhbHVlcyAodGhpcyBpcywgZm9yIENJRCB2YWx1ZXMgd2hpY2ggICAgICovCisgIC8qICAgIGRvbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGdseXBoIGluIHRoZSBmb250KS4gIFNlZSB0aGUgZGlzY3Vzc2lvbiAqLworICAvKiAgICBvZiB0aGUgQEZUX0ZBQ0VfRkxBR19DSURfS0VZRUQgZmxhZyBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9Mb2FkX0dseXBoKCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgRlRfVUludCAgIGdseXBoX2luZGV4LAorICAgICAgICAgICAgICAgICBGVF9JbnQzMiAgbG9hZF9mbGFncyApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTG9hZF9DaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBmdW5jdGlvbiB1c2VkIHRvIGxvYWQgYSBzaW5nbGUgZ2x5cGggaW50byB0aGUgZ2x5cGggc2xvdCBvZiBhICAgICovCisgIC8qICAgIGZhY2Ugb2JqZWN0LCBhY2NvcmRpbmcgdG8gaXRzIGNoYXJhY3RlciBjb2RlLiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgICAgIDo6IEEgaGFuZGxlIHRvIGEgdGFyZ2V0IGZhY2Ugb2JqZWN0IHdoZXJlIHRoZSBnbHlwaCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBpcyBsb2FkZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjaGFyX2NvZGUgICA6OiBUaGUgZ2x5cGgncyBjaGFyYWN0ZXIgY29kZSwgYWNjb3JkaW5nIHRvIHRoZSAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgY3VycmVudCBjaGFybWFwIHVzZWQgaW4gdGhlIGZhY2UuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBsb2FkX2ZsYWdzICA6OiBBIGZsYWcgaW5kaWNhdGluZyB3aGF0IHRvIGxvYWQgZm9yIHRoaXMgZ2x5cGguICBUaGUgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgQEZUX0xPQURfWFhYIGNvbnN0YW50cyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIGdseXBoIGxvYWRpbmcgcHJvY2VzcyAoZS5nLiwgd2hldGhlciB0aGUgb3V0bGluZSAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgc2NhbGVkLCB3aGV0aGVyIHRvIGxvYWQgYml0bWFwcyBvciBub3QsICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgd2hldGhlciB0byBoaW50IHRoZSBvdXRsaW5lLCBldGMpLiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBzaW1wbHkgY2FsbHMgQEZUX0dldF9DaGFyX0luZGV4IGFuZCBARlRfTG9hZF9HbHlwaC4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfTG9hZF9DaGFyKCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICBGVF9VTG9uZyAgY2hhcl9jb2RlLAorICAgICAgICAgICAgICAgIEZUX0ludDMyICBsb2FkX2ZsYWdzICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZW51bToKKyAgICogICBGVF9MT0FEX1hYWAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBsaXN0IG9mIGJpdC1maWVsZCBjb25zdGFudHMgdXNlZCB3aXRoIEBGVF9Mb2FkX0dseXBoIHRvIGluZGljYXRlCisgICAqICAgd2hhdCBraW5kIG9mIG9wZXJhdGlvbnMgdG8gcGVyZm9ybSBkdXJpbmcgZ2x5cGggbG9hZGluZy4KKyAgICoKKyAgICogQHZhbHVlczoKKyAgICogICBGVF9MT0FEX0RFRkFVTFQgOjoKKyAgICogICAgIENvcnJlc3BvbmRpbmcgdG9+MCwgdGhpcyB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBkZWZhdWx0IGdseXBoIGxvYWQKKyAgICogICAgIG9wZXJhdGlvbi4gIEluIHRoaXMgY2FzZSwgdGhlIGZvbGxvd2luZyBoYXBwZW5zOgorICAgKgorICAgKiAgICAgMS4gRnJlZVR5cGUgbG9va3MgZm9yIGEgYml0bWFwIGZvciB0aGUgZ2x5cGggY29ycmVzcG9uZGluZyB0byB0aGUKKyAgICogICAgICAgIGZhY2UncyBjdXJyZW50IHNpemUuICBJZiBvbmUgaXMgZm91bmQsIHRoZSBmdW5jdGlvbiByZXR1cm5zLgorICAgKiAgICAgICAgVGhlIGJpdG1hcCBkYXRhIGNhbiBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBnbHlwaCBzbG90IChzZWUgbm90ZQorICAgKiAgICAgICAgYmVsb3cpLgorICAgKgorICAgKiAgICAgMi4gSWYgbm8gZW1iZWRkZWQgYml0bWFwIGlzIHNlYXJjaGVkIG9yIGZvdW5kLCBGcmVlVHlwZSBsb29rcyBmb3IgYQorICAgKiAgICAgICAgc2NhbGFibGUgb3V0bGluZS4gIElmIG9uZSBpcyBmb3VuZCwgaXQgaXMgbG9hZGVkIGZyb20gdGhlIGZvbnQKKyAgICogICAgICAgIGZpbGUsIHNjYWxlZCB0byBkZXZpY2UgcGl4ZWxzLCB0aGVuIGBoaW50ZWQnIHRvIHRoZSBwaXhlbCBncmlkCisgICAqICAgICAgICBpbiBvcmRlciB0byBvcHRpbWl6ZSBpdC4gIFRoZSBvdXRsaW5lIGRhdGEgY2FuIGJlIGFjY2Vzc2VkIGZyb20KKyAgICogICAgICAgIHRoZSBnbHlwaCBzbG90IChzZWUgbm90ZSBiZWxvdykuCisgICAqCisgICAqICAgICBOb3RlIHRoYXQgYnkgZGVmYXVsdCwgdGhlIGdseXBoIGxvYWRlciBkb2Vzbid0IHJlbmRlciBvdXRsaW5lcyBpbnRvCisgICAqICAgICBiaXRtYXBzLiAgVGhlIGZvbGxvd2luZyBmbGFncyBhcmUgdXNlZCB0byBtb2RpZnkgdGhpcyBkZWZhdWx0CisgICAqICAgICBiZWhhdmlvdXIgdG8gbW9yZSBzcGVjaWZpYyBhbmQgdXNlZnVsIGNhc2VzLgorICAgKgorICAgKiAgIEZUX0xPQURfTk9fU0NBTEUgOjoKKyAgICogICAgIERvbid0IHNjYWxlIHRoZSBsb2FkZWQgb3V0bGluZSBnbHlwaCBidXQga2VlcCBpdCBpbiBmb250IHVuaXRzLgorICAgKgorICAgKiAgICAgVGhpcyBmbGFnIGltcGxpZXMgQEZUX0xPQURfTk9fSElOVElORyBhbmQgQEZUX0xPQURfTk9fQklUTUFQLCBhbmQKKyAgICogICAgIHVuc2V0cyBARlRfTE9BRF9SRU5ERVIuCisgICAqCisgICAqICAgICBJZiB0aGUgZm9udCBpcyBgdHJpY2t5JyAoc2VlIEBGVF9GQUNFX0ZMQUdfVFJJQ0tZIGZvciBtb3JlKSwgdXNpbmcKKyAgICogICAgIEZUX0xPQURfTk9fU0NBTEUgdXN1YWxseSB5aWVsZHMgbWVhbmluZ2xlc3Mgb3V0bGluZXMgYmVjYXVzZSB0aGUKKyAgICogICAgIHN1YmdseXBocyBtdXN0IGJlIHNjYWxlZCBhbmQgcG9zaXRpb25lZCB3aXRoIGhpbnRpbmcgaW5zdHJ1Y3Rpb25zLgorICAgKiAgICAgVGhpcyBjYW4gYmUgc29sdmVkIGJ5IGxvYWRpbmcgdGhlIGZvbnQgd2l0aG91dCBGVF9MT0FEX05PX1NDQUxFIGFuZAorICAgKiAgICAgc2V0dGluZyB0aGUgY2hhcmFjdGVyIHNpemUgdG8gYGZvbnQtPnVuaXRzX3Blcl9FTScuCisgICAqCisgICAqICAgRlRfTE9BRF9OT19ISU5USU5HIDo6CisgICAqICAgICBEaXNhYmxlIGhpbnRpbmcuICBUaGlzIGdlbmVyYWxseSBnZW5lcmF0ZXMgYGJsdXJyaWVyJyBiaXRtYXAgZ2x5cGhzCisgICAqICAgICB3aGVuIHRoZSBnbHlwaCBhcmUgcmVuZGVyZWQgaW4gYW55IG9mIHRoZSBhbnRpLWFsaWFzZWQgbW9kZXMuICBTZWUKKyAgICogICAgIGFsc28gdGhlIG5vdGUgYmVsb3cuCisgICAqCisgICAqICAgICBUaGlzIGZsYWcgaXMgaW1wbGllZCBieSBARlRfTE9BRF9OT19TQ0FMRS4KKyAgICoKKyAgICogICBGVF9MT0FEX1JFTkRFUiA6OgorICAgKiAgICAgQ2FsbCBARlRfUmVuZGVyX0dseXBoIGFmdGVyIHRoZSBnbHlwaCBpcyBsb2FkZWQuICBCeSBkZWZhdWx0LCB0aGUKKyAgICogICAgIGdseXBoIGlzIHJlbmRlcmVkIGluIEBGVF9SRU5ERVJfTU9ERV9OT1JNQUwgbW9kZS4gIFRoaXMgY2FuIGJlCisgICAqICAgICBvdmVycmlkZGVuIGJ5IEBGVF9MT0FEX1RBUkdFVF9YWFggb3IgQEZUX0xPQURfTU9OT0NIUk9NRS4KKyAgICoKKyAgICogICAgIFRoaXMgZmxhZyBpcyB1bnNldCBieSBARlRfTE9BRF9OT19TQ0FMRS4KKyAgICoKKyAgICogICBGVF9MT0FEX05PX0JJVE1BUCA6OgorICAgKiAgICAgSWdub3JlIGJpdG1hcCBzdHJpa2VzIHdoZW4gbG9hZGluZy4gIEJpdG1hcC1vbmx5IGZvbnRzIGlnbm9yZSB0aGlzCisgICAqICAgICBmbGFnLgorICAgKgorICAgKiAgICAgQEZUX0xPQURfTk9fU0NBTEUgYWx3YXlzIHNldHMgdGhpcyBmbGFnLgorICAgKgorICAgKiAgIEZUX0xPQURfVkVSVElDQUxfTEFZT1VUIDo6CisgICAqICAgICBMb2FkIHRoZSBnbHlwaCBmb3IgdmVydGljYWwgdGV4dCBsYXlvdXQuICBJbiBwYXJ0aWN1bGFyLCB0aGUKKyAgICogICAgIGBhZHZhbmNlJyB2YWx1ZSBpbiB0aGUgQEZUX0dseXBoU2xvdFJlYyBzdHJ1Y3R1cmUgaXMgc2V0IHRvIHRoZQorICAgKiAgICAgYHZlcnRBZHZhbmNlJyB2YWx1ZSBvZiB0aGUgYG1ldHJpY3MnIGZpZWxkLgorICAgKgorICAgKiAgICAgSW4gY2FzZSBARlRfSEFTX1ZFUlRJQ0FMIGRvZXNuJ3QgcmV0dXJuIHRydWUsIHlvdSBzaG91bGRuJ3QgdXNlCisgICAqICAgICB0aGlzIGZsYWcgY3VycmVudGx5LiAgUmVhc29uIGlzIHRoYXQgaW4gdGhpcyBjYXNlIHZlcnRpY2FsIG1ldHJpY3MKKyAgICogICAgIGdldCBzeW50aGVzaXplZCwgYW5kIHRob3NlIHZhbHVlcyBhcmUgbm90IGFsd2F5cyBjb25zaXN0ZW50IGFjcm9zcworICAgKiAgICAgdmFyaW91cyBmb250IGZvcm1hdHMuCisgICAqCisgICAqICAgRlRfTE9BRF9GT1JDRV9BVVRPSElOVCA6OgorICAgKiAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIGF1dG8taGludGVyIGlzIHByZWZlcnJlZCBvdmVyIHRoZSBmb250J3MgbmF0aXZlCisgICAqICAgICBoaW50ZXIuICBTZWUgYWxzbyB0aGUgbm90ZSBiZWxvdy4KKyAgICoKKyAgICogICBGVF9MT0FEX0NST1BfQklUTUFQIDo6CisgICAqICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgZm9udCBkcml2ZXIgc2hvdWxkIGNyb3AgdGhlIGxvYWRlZCBiaXRtYXAgZ2x5cGgKKyAgICogICAgIChpLmUuLCByZW1vdmUgYWxsIHNwYWNlIGFyb3VuZCBpdHMgYmxhY2sgYml0cykuICBOb3QgYWxsIGRyaXZlcnMKKyAgICogICAgIGltcGxlbWVudCB0aGlzLgorICAgKgorICAgKiAgIEZUX0xPQURfUEVEQU5USUMgOjoKKyAgICogICAgIEluZGljYXRlcyB0aGF0IHRoZSBmb250IGRyaXZlciBzaG91bGQgcGVyZm9ybSBwZWRhbnRpYyB2ZXJpZmljYXRpb25zCisgICAqICAgICBkdXJpbmcgZ2x5cGggbG9hZGluZy4gIFRoaXMgaXMgbW9zdGx5IHVzZWQgdG8gZGV0ZWN0IGJyb2tlbiBnbHlwaHMKKyAgICogICAgIGluIGZvbnRzLiAgQnkgZGVmYXVsdCwgRnJlZVR5cGUgdHJpZXMgdG8gaGFuZGxlIGJyb2tlbiBmb250cyBhbHNvLgorICAgKgorICAgKiAgICAgSW4gcGFydGljdWxhciwgZXJyb3JzIGZyb20gdGhlIFRydWVUeXBlIGJ5dGVjb2RlIGVuZ2luZSBhcmUgbm90CisgICAqICAgICBwYXNzZWQgdG8gdGhlIGFwcGxpY2F0aW9uIGlmIHRoaXMgZmxhZyBpcyBub3Qgc2V0OyB0aGlzIG1pZ2h0CisgICAqICAgICByZXN1bHQgaW4gcGFydGlhbGx5IGhpbnRlZCBvciBkaXN0b3J0ZWQgZ2x5cGhzIGluIGNhc2UgYSBnbHlwaCdzCisgICAqICAgICBieXRlY29kZSBpcyBidWdneS4KKyAgICoKKyAgICogICBGVF9MT0FEX0lHTk9SRV9HTE9CQUxfQURWQU5DRV9XSURUSCA6OgorICAgKiAgICAgSWdub3JlZC4gIERlcHJlY2F0ZWQuCisgICAqCisgICAqICAgRlRfTE9BRF9OT19SRUNVUlNFIDo6CisgICAqICAgICBUaGlzIGZsYWcgaXMgb25seSB1c2VkIGludGVybmFsbHkuICBJdCBtZXJlbHkgaW5kaWNhdGVzIHRoYXQgdGhlCisgICAqICAgICBmb250IGRyaXZlciBzaG91bGQgbm90IGxvYWQgY29tcG9zaXRlIGdseXBocyByZWN1cnNpdmVseS4gIEluc3RlYWQsCisgICAqICAgICBpdCBzaG91bGQgc2V0IHRoZSBgbnVtX3N1YmdseXBoJyBhbmQgYHN1YmdseXBocycgdmFsdWVzIG9mIHRoZQorICAgKiAgICAgZ2x5cGggc2xvdCBhY2NvcmRpbmdseSwgYW5kIHNldCBgZ2x5cGgtPmZvcm1hdCcgdG8KKyAgICogICAgIEBGVF9HTFlQSF9GT1JNQVRfQ09NUE9TSVRFLgorICAgKgorICAgKiAgICAgVGhlIGRlc2NyaXB0aW9uIG9mIHN1Yi1nbHlwaHMgaXMgbm90IGF2YWlsYWJsZSB0byBjbGllbnQKKyAgICogICAgIGFwcGxpY2F0aW9ucyBmb3Igbm93LgorICAgKgorICAgKiAgICAgVGhpcyBmbGFnIGltcGxpZXMgQEZUX0xPQURfTk9fU0NBTEUgYW5kIEBGVF9MT0FEX0lHTk9SRV9UUkFOU0ZPUk0uCisgICAqCisgICAqICAgRlRfTE9BRF9JR05PUkVfVFJBTlNGT1JNIDo6CisgICAqICAgICBJbmRpY2F0ZXMgdGhhdCB0aGUgdHJhbnNmb3JtIG1hdHJpeCBzZXQgYnkgQEZUX1NldF9UcmFuc2Zvcm0gc2hvdWxkCisgICAqICAgICBiZSBpZ25vcmVkLgorICAgKgorICAgKiAgIEZUX0xPQURfTU9OT0NIUk9NRSA6OgorICAgKiAgICAgVGhpcyBmbGFnIGlzIHVzZWQgd2l0aCBARlRfTE9BRF9SRU5ERVIgdG8gaW5kaWNhdGUgdGhhdCB5b3Ugd2FudCB0bworICAgKiAgICAgcmVuZGVyIGFuIG91dGxpbmUgZ2x5cGggdG8gYSAxLWJpdCBtb25vY2hyb21lIGJpdG1hcCBnbHlwaCwgd2l0aAorICAgKiAgICAgOH5waXhlbHMgcGFja2VkIGludG8gZWFjaCBieXRlIG9mIHRoZSBiaXRtYXAgZGF0YS4KKyAgICoKKyAgICogICAgIE5vdGUgdGhhdCB0aGlzIGhhcyBubyBlZmZlY3Qgb24gdGhlIGhpbnRpbmcgYWxnb3JpdGhtIHVzZWQuICBZb3UKKyAgICogICAgIHNob3VsZCByYXRoZXIgdXNlIEBGVF9MT0FEX1RBUkdFVF9NT05PIHNvIHRoYXQgdGhlCisgICAqICAgICBtb25vY2hyb21lLW9wdGltaXplZCBoaW50aW5nIGFsZ29yaXRobSBpcyB1c2VkLgorICAgKgorICAgKiAgIEZUX0xPQURfTElORUFSX0RFU0lHTiA6OgorICAgKiAgICAgSW5kaWNhdGVzIHRoYXQgdGhlIGBsaW5lYXJIb3JpQWR2YW5jZScgYW5kIGBsaW5lYXJWZXJ0QWR2YW5jZScKKyAgICogICAgIGZpZWxkcyBvZiBARlRfR2x5cGhTbG90UmVjIHNob3VsZCBiZSBrZXB0IGluIGZvbnQgdW5pdHMuICBTZWUKKyAgICogICAgIEBGVF9HbHlwaFNsb3RSZWMgZm9yIGRldGFpbHMuCisgICAqCisgICAqICAgRlRfTE9BRF9OT19BVVRPSElOVCA6OgorICAgKiAgICAgRGlzYWJsZSBhdXRvLWhpbnRlci4gIFNlZSBhbHNvIHRoZSBub3RlIGJlbG93LgorICAgKgorICAgKiAgIEZUX0xPQURfQ09MT1IgOjoKKyAgICogICAgIFRoaXMgZmxhZyBpcyB1c2VkIHRvIHJlcXVlc3QgbG9hZGluZyBvZiBjb2xvciBlbWJlZGRlZC1iaXRtYXAKKyAgICogICAgIGltYWdlcy4gIFRoZSByZXN1bHRpbmcgY29sb3IgYml0bWFwcywgaWYgYXZhaWxhYmxlLCB3aWxsIGhhdmUgdGhlCisgICAqICAgICBARlRfUElYRUxfTU9ERV9CR1JBIGZvcm1hdC4gIFdoZW4gdGhlIGZsYWcgaXMgbm90IHVzZWQgYW5kIGNvbG9yCisgICAqICAgICBiaXRtYXBzIGFyZSBmb3VuZCwgdGhleSB3aWxsIGJlIGNvbnZlcnRlZCB0byAyNTYtbGV2ZWwgZ3JheQorICAgKiAgICAgYml0bWFwcyB0cmFuc3BhcmVudGx5LiAgVGhvc2UgYml0bWFwcyB3aWxsIGJlIGluIHRoZQorICAgKiAgICAgQEZUX1BJWEVMX01PREVfR1JBWSBmb3JtYXQuCisgICAqCisgICAqIEBub3RlOgorICAgKiAgIEJ5IGRlZmF1bHQsIGhpbnRpbmcgaXMgZW5hYmxlZCBhbmQgdGhlIGZvbnQncyBuYXRpdmUgaGludGVyIChzZWUKKyAgICogICBARlRfRkFDRV9GTEFHX0hJTlRFUikgaXMgcHJlZmVycmVkIG92ZXIgdGhlIGF1dG8taGludGVyLiAgWW91IGNhbgorICAgKiAgIGRpc2FibGUgaGludGluZyBieSBzZXR0aW5nIEBGVF9MT0FEX05PX0hJTlRJTkcgb3IgY2hhbmdlIHRoZQorICAgKiAgIHByZWNlZGVuY2UgYnkgc2V0dGluZyBARlRfTE9BRF9GT1JDRV9BVVRPSElOVC4gIFlvdSBjYW4gYWxzbyBzZXQKKyAgICogICBARlRfTE9BRF9OT19BVVRPSElOVCBpbiBjYXNlIHlvdSBkb24ndCB3YW50IHRoZSBhdXRvLWhpbnRlciB0byBiZQorICAgKiAgIHVzZWQgYXQgYWxsLgorICAgKgorICAgKiAgIFNlZSB0aGUgZGVzY3JpcHRpb24gb2YgQEZUX0ZBQ0VfRkxBR19UUklDS1kgZm9yIGEgc3BlY2lhbCBleGNlcHRpb24KKyAgICogICAoYWZmZWN0aW5nIG9ubHkgYSBoYW5kZnVsIG9mIEFzaWFuIGZvbnRzKS4KKyAgICoKKyAgICogICBCZXNpZGVzIGRlY2lkaW5nIHdoaWNoIGhpbnRlciB0byB1c2UsIHlvdSBjYW4gYWxzbyBkZWNpZGUgd2hpY2gKKyAgICogICBoaW50aW5nIGFsZ29yaXRobSB0byB1c2UuICBTZWUgQEZUX0xPQURfVEFSR0VUX1hYWCBmb3IgZGV0YWlscy4KKyAgICoKKyAgICogICBOb3RlIHRoYXQgdGhlIGF1dG8taGludGVyIG5lZWRzIGEgdmFsaWQgVW5pY29kZSBjbWFwIChlaXRoZXIgYSBuYXRpdmUKKyAgICogICBvbmUgb3Igc3ludGhlc2l6ZWQgYnkgRnJlZVR5cGUpIGZvciBwcm9kdWNpbmcgY29ycmVjdCByZXN1bHRzLiAgSWYgYQorICAgKiAgIGZvbnQgcHJvdmlkZXMgYW4gaW5jb3JyZWN0IG1hcHBpbmcgKGZvciBleGFtcGxlLCBhc3NpZ25pbmcgdGhlCisgICAqICAgY2hhcmFjdGVyIGNvZGUgVSswMDVBLCBMQVRJTiBDQVBJVEFMIExFVFRFUiBaLCB0byBhIGdseXBoIGRlcGljdGluZyBhCisgICAqICAgbWF0aGVtYXRpY2FsIGludGVncmFsIHNpZ24pLCB0aGUgYXV0by1oaW50ZXIgbWlnaHQgcHJvZHVjZSB1c2VsZXNzCisgICAqICAgcmVzdWx0cy4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0xPQURfREVGQVVMVCAgICAgICAgICAgICAgICAgICAgICAweDAKKyNkZWZpbmUgRlRfTE9BRF9OT19TQ0FMRSAgICAgICAgICAgICAgICAgICAgICggMUwgPDwgMCApCisjZGVmaW5lIEZUX0xPQURfTk9fSElOVElORyAgICAgICAgICAgICAgICAgICAoIDFMIDw8IDEgKQorI2RlZmluZSBGVF9MT0FEX1JFTkRFUiAgICAgICAgICAgICAgICAgICAgICAgKCAxTCA8PCAyICkKKyNkZWZpbmUgRlRfTE9BRF9OT19CSVRNQVAgICAgICAgICAgICAgICAgICAgICggMUwgPDwgMyApCisjZGVmaW5lIEZUX0xPQURfVkVSVElDQUxfTEFZT1VUICAgICAgICAgICAgICAoIDFMIDw8IDQgKQorI2RlZmluZSBGVF9MT0FEX0ZPUkNFX0FVVE9ISU5UICAgICAgICAgICAgICAgKCAxTCA8PCA1ICkKKyNkZWZpbmUgRlRfTE9BRF9DUk9QX0JJVE1BUCAgICAgICAgICAgICAgICAgICggMUwgPDwgNiApCisjZGVmaW5lIEZUX0xPQURfUEVEQU5USUMgICAgICAgICAgICAgICAgICAgICAoIDFMIDw8IDcgKQorI2RlZmluZSBGVF9MT0FEX0lHTk9SRV9HTE9CQUxfQURWQU5DRV9XSURUSCAgKCAxTCA8PCA5ICkKKyNkZWZpbmUgRlRfTE9BRF9OT19SRUNVUlNFICAgICAgICAgICAgICAgICAgICggMUwgPDwgMTAgKQorI2RlZmluZSBGVF9MT0FEX0lHTk9SRV9UUkFOU0ZPUk0gICAgICAgICAgICAgKCAxTCA8PCAxMSApCisjZGVmaW5lIEZUX0xPQURfTU9OT0NIUk9NRSAgICAgICAgICAgICAgICAgICAoIDFMIDw8IDEyICkKKyNkZWZpbmUgRlRfTE9BRF9MSU5FQVJfREVTSUdOICAgICAgICAgICAgICAgICggMUwgPDwgMTMgKQorI2RlZmluZSBGVF9MT0FEX05PX0FVVE9ISU5UICAgICAgICAgICAgICAgICAgKCAxTCA8PCAxNSApCisgIC8qIEJpdHMgMTYuLjE5IGFyZSB1c2VkIGJ5IGBGVF9MT0FEX1RBUkdFVF8nICovCisjZGVmaW5lIEZUX0xPQURfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAoIDFMIDw8IDIwICkKKworICAvKiAqLworCisgIC8qIHVzZWQgaW50ZXJuYWxseSBvbmx5IGJ5IGNlcnRhaW4gZm9udCBkcml2ZXJzISAqLworI2RlZmluZSBGVF9MT0FEX0FEVkFOQ0VfT05MWSAgICAgICAgICAgICAgICAgKCAxTCA8PCA4ICkKKyNkZWZpbmUgRlRfTE9BRF9TQklUU19PTkxZICAgICAgICAgICAgICAgICAgICggMUwgPDwgMTQgKQorCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBlbnVtOgorICAgKiAgIEZUX0xPQURfVEFSR0VUX1hYWAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBsaXN0IG9mIHZhbHVlcyB0aGF0IGFyZSB1c2VkIHRvIHNlbGVjdCBhIHNwZWNpZmljIGhpbnRpbmcgYWxnb3JpdGhtCisgICAqICAgdG8gdXNlIGJ5IHRoZSBoaW50ZXIuICBZb3Ugc2hvdWxkIE9SIG9uZSBvZiB0aGVzZSB2YWx1ZXMgdG8geW91cgorICAgKiAgIGBsb2FkX2ZsYWdzJyB3aGVuIGNhbGxpbmcgQEZUX0xvYWRfR2x5cGguCisgICAqCisgICAqICAgTm90ZSB0aGF0IGZvbnQncyBuYXRpdmUgaGludGVycyBtYXkgaWdub3JlIHRoZSBoaW50aW5nIGFsZ29yaXRobSB5b3UKKyAgICogICBoYXZlIHNwZWNpZmllZCAoZS5nLiwgdGhlIFRydWVUeXBlIGJ5dGVjb2RlIGludGVycHJldGVyKS4gIFlvdSBjYW4gc2V0CisgICAqICAgQEZUX0xPQURfRk9SQ0VfQVVUT0hJTlQgdG8gZW5zdXJlIHRoYXQgdGhlIGF1dG8taGludGVyIGlzIHVzZWQuCisgICAqCisgICAqICAgQWxzbyBub3RlIHRoYXQgQEZUX0xPQURfVEFSR0VUX0xJR0hUIGlzIGFuIGV4Y2VwdGlvbiwgaW4gdGhhdCBpdAorICAgKiAgIGFsd2F5cyBpbXBsaWVzIEBGVF9MT0FEX0ZPUkNFX0FVVE9ISU5ULgorICAgKgorICAgKiBAdmFsdWVzOgorICAgKiAgIEZUX0xPQURfVEFSR0VUX05PUk1BTCA6OgorICAgKiAgICAgVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgZGVmYXVsdCBoaW50aW5nIGFsZ29yaXRobSwgb3B0aW1pemVkIGZvcgorICAgKiAgICAgc3RhbmRhcmQgZ3JheS1sZXZlbCByZW5kZXJpbmcuICBGb3IgbW9ub2Nocm9tZSBvdXRwdXQsIHVzZQorICAgKiAgICAgQEZUX0xPQURfVEFSR0VUX01PTk8gaW5zdGVhZC4KKyAgICoKKyAgICogICBGVF9MT0FEX1RBUkdFVF9MSUdIVCA6OgorICAgKiAgICAgQSBsaWdodGVyIGhpbnRpbmcgYWxnb3JpdGhtIGZvciBub24tbW9ub2Nocm9tZSBtb2Rlcy4gIE1hbnkKKyAgICogICAgIGdlbmVyYXRlZCBnbHlwaHMgYXJlIG1vcmUgZnV6enkgYnV0IGJldHRlciByZXNlbWJsZSBpdHMgb3JpZ2luYWwKKyAgICogICAgIHNoYXBlLiAgQSBiaXQgbGlrZSByZW5kZXJpbmcgb24gTWFjIE9TflguCisgICAqCisgICAqICAgICBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGlzIHRhcmdldCBpbXBsaWVzIEBGVF9MT0FEX0ZPUkNFX0FVVE9ISU5ULgorICAgKgorICAgKiAgIEZUX0xPQURfVEFSR0VUX01PTk8gOjoKKyAgICogICAgIFN0cm9uZyBoaW50aW5nIGFsZ29yaXRobSB0aGF0IHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIG1vbm9jaHJvbWUKKyAgICogICAgIG91dHB1dC4gIFRoZSByZXN1bHQgaXMgcHJvYmFibHkgdW5wbGVhc2FudCBpZiB0aGUgZ2x5cGggaXMgcmVuZGVyZWQKKyAgICogICAgIGluIG5vbi1tb25vY2hyb21lIG1vZGVzLgorICAgKgorICAgKiAgIEZUX0xPQURfVEFSR0VUX0xDRCA6OgorICAgKiAgICAgQSB2YXJpYW50IG9mIEBGVF9MT0FEX1RBUkdFVF9OT1JNQUwgb3B0aW1pemVkIGZvciBob3Jpem9udGFsbHkKKyAgICogICAgIGRlY2ltYXRlZCBMQ0QgZGlzcGxheXMuCisgICAqCisgICAqICAgRlRfTE9BRF9UQVJHRVRfTENEX1YgOjoKKyAgICogICAgIEEgdmFyaWFudCBvZiBARlRfTE9BRF9UQVJHRVRfTk9STUFMIG9wdGltaXplZCBmb3IgdmVydGljYWxseQorICAgKiAgICAgZGVjaW1hdGVkIExDRCBkaXNwbGF5cy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgWW91IHNob3VsZCB1c2Ugb25seSBfb25lXyBvZiB0aGUgRlRfTE9BRF9UQVJHRVRfWFhYIHZhbHVlcyBpbiB5b3VyCisgICAqICAgYGxvYWRfZmxhZ3MnLiAgVGhleSBjYW4ndCBiZSBPUmVkLgorICAgKgorICAgKiAgIElmIEBGVF9MT0FEX1JFTkRFUiBpcyBhbHNvIHNldCwgdGhlIGdseXBoIGlzIHJlbmRlcmVkIGluIHRoZQorICAgKiAgIGNvcnJlc3BvbmRpbmcgbW9kZSAoaS5lLiwgdGhlIG1vZGUgd2hpY2ggbWF0Y2hlcyB0aGUgdXNlZCBhbGdvcml0aG0KKyAgICogICBiZXN0KS4gIEFuIGV4ZXB0aW9uIGlzIEZUX0xPQURfVEFSR0VUX01PTk8gc2luY2UgaXQgaW1wbGllcworICAgKiAgIEBGVF9MT0FEX01PTk9DSFJPTUUuCisgICAqCisgICAqICAgWW91IGNhbiB1c2UgYSBoaW50aW5nIGFsZ29yaXRobSB0aGF0IGRvZXNuJ3QgY29ycmVzcG9uZCB0byB0aGUgc2FtZQorICAgKiAgIHJlbmRlcmluZyBtb2RlLiAgQXMgYW4gZXhhbXBsZSwgaXQgaXMgcG9zc2libGUgdG8gdXNlIHRoZSBgbGlnaHQnCisgICAqICAgaGludGluZyBhbGdvcml0aG0gYW5kIGhhdmUgdGhlIHJlc3VsdHMgcmVuZGVyZWQgaW4gaG9yaXpvbnRhbCBMQ0QKKyAgICogICBwaXhlbCBtb2RlLCB3aXRoIGNvZGUgbGlrZQorICAgKgorICAgKiAgICAgeworICAgKiAgICAgICBGVF9Mb2FkX0dseXBoKCBmYWNlLCBnbHlwaF9pbmRleCwKKyAgICogICAgICAgICAgICAgICAgICAgICAgbG9hZF9mbGFncyB8IEZUX0xPQURfVEFSR0VUX0xJR0hUICk7CisgICAqCisgICAqICAgICAgIEZUX1JlbmRlcl9HbHlwaCggZmFjZS0+Z2x5cGgsIEZUX1JFTkRFUl9NT0RFX0xDRCApOworICAgKiAgICAgfQorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfTE9BRF9UQVJHRVRfKCB4ICkgICAoIChGVF9JbnQzMikoICh4KSAmIDE1ICkgPDwgMTYgKQorCisjZGVmaW5lIEZUX0xPQURfVEFSR0VUX05PUk1BTCAgRlRfTE9BRF9UQVJHRVRfKCBGVF9SRU5ERVJfTU9ERV9OT1JNQUwgKQorI2RlZmluZSBGVF9MT0FEX1RBUkdFVF9MSUdIVCAgIEZUX0xPQURfVEFSR0VUXyggRlRfUkVOREVSX01PREVfTElHSFQgICkKKyNkZWZpbmUgRlRfTE9BRF9UQVJHRVRfTU9OTyAgICBGVF9MT0FEX1RBUkdFVF8oIEZUX1JFTkRFUl9NT0RFX01PTk8gICApCisjZGVmaW5lIEZUX0xPQURfVEFSR0VUX0xDRCAgICAgRlRfTE9BRF9UQVJHRVRfKCBGVF9SRU5ERVJfTU9ERV9MQ0QgICAgKQorI2RlZmluZSBGVF9MT0FEX1RBUkdFVF9MQ0RfViAgIEZUX0xPQURfVEFSR0VUXyggRlRfUkVOREVSX01PREVfTENEX1YgICkKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAbWFjcm86CisgICAqICAgRlRfTE9BRF9UQVJHRVRfTU9ERQorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0dXJuIHRoZSBARlRfUmVuZGVyX01vZGUgY29ycmVzcG9uZGluZyB0byBhIGdpdmVuCisgICAqICAgQEZUX0xPQURfVEFSR0VUX1hYWCB2YWx1ZS4KKyAgICoKKyAgICovCisjZGVmaW5lIEZUX0xPQURfVEFSR0VUX01PREUoIHggKSAgKCAoRlRfUmVuZGVyX01vZGUpKCAoICh4KSA+PiAxNiApICYgMTUgKSApCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9TZXRfVHJhbnNmb3JtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGZ1bmN0aW9uIHVzZWQgdG8gc2V0IHRoZSB0cmFuc2Zvcm1hdGlvbiB0aGF0IGlzIGFwcGxpZWQgdG8gZ2x5cGggKi8KKyAgLyogICAgaW1hZ2VzIHdoZW4gdGhleSBhcmUgbG9hZGVkIGludG8gYSBnbHlwaCBzbG90IHRocm91Z2ggICAgICAgICAgICAgICovCisgIC8qICAgIEBGVF9Mb2FkX0dseXBoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIG1hdHJpeCA6OiBBIHBvaW50ZXIgdG8gdGhlIHRyYW5zZm9ybWF0aW9uJ3MgMngyIG1hdHJpeC4gIFVzZX4wIGZvciAqLworICAvKiAgICAgICAgICAgICAgdGhlIGlkZW50aXR5IG1hdHJpeC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZGVsdGEgIDo6IEEgcG9pbnRlciB0byB0aGUgdHJhbnNsYXRpb24gdmVjdG9yLiAgVXNlfjAgZm9yIHRoZSBudWxsICovCisgIC8qICAgICAgICAgICAgICB2ZWN0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSB0cmFuc2Zvcm1hdGlvbiBpcyBvbmx5IGFwcGxpZWQgdG8gc2NhbGFibGUgaW1hZ2UgZm9ybWF0cyBhZnRlciAqLworICAvKiAgICB0aGUgZ2x5cGggaGFzIGJlZW4gbG9hZGVkLiAgSXQgbWVhbnMgdGhhdCBoaW50aW5nIGlzIHVuYWx0ZXJlZCBieSAgKi8KKyAgLyogICAgdGhlIHRyYW5zZm9ybWF0aW9uIGFuZCBpcyBwZXJmb3JtZWQgb24gdGhlIGNoYXJhY3RlciBzaXplIGdpdmVuIGluICovCisgIC8qICAgIHRoZSBsYXN0IGNhbGwgdG8gQEZUX1NldF9DaGFyX1NpemUgb3IgQEZUX1NldF9QaXhlbF9TaXplcy4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTm90ZSB0aGF0IHRoaXMgYWxzbyB0cmFuc2Zvcm1zIHRoZSBgZmFjZS5nbHlwaC5hZHZhbmNlJyBmaWVsZCwgYnV0ICovCisgIC8qICAgICpub3QqIHRoZSB2YWx1ZXMgaW4gYGZhY2UuZ2x5cGgubWV0cmljcycuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRfU2V0X1RyYW5zZm9ybSggRlRfRmFjZSAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfTWF0cml4KiAgbWF0cml4LAorICAgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IqICBkZWx0YSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RW51bT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUmVuZGVyX01vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQW4gZW51bWVyYXRpb24gdHlwZSB0aGF0IGxpc3RzIHRoZSByZW5kZXIgbW9kZXMgc3VwcG9ydGVkIGJ5ICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlfjIuICBFYWNoIG1vZGUgY29ycmVzcG9uZHMgdG8gYSBzcGVjaWZpYyB0eXBlIG9mIHNjYW5saW5lICAqLworICAvKiAgICBjb252ZXJzaW9uIHBlcmZvcm1lZCBvbiB0aGUgb3V0bGluZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZvciBiaXRtYXAgZm9udHMgYW5kIGVtYmVkZGVkIGJpdG1hcHMgdGhlIGBiaXRtYXAtPnBpeGVsX21vZGUnICAgICAqLworICAvKiAgICBmaWVsZCBpbiB0aGUgQEZUX0dseXBoU2xvdFJlYyBzdHJ1Y3R1cmUgZ2l2ZXMgdGhlIGZvcm1hdCBvZiB0aGUgICAgKi8KKyAgLyogICAgcmV0dXJuZWQgYml0bWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbGwgbW9kZXMgZXhjZXB0IEBGVF9SRU5ERVJfTU9ERV9NT05PIHVzZSAyNTYgbGV2ZWxzIG9mIG9wYWNpdHkuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9SRU5ERVJfTU9ERV9OT1JNQUwgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGlzIGlzIHRoZSBkZWZhdWx0IHJlbmRlciBtb2RlOyBpdCBjb3JyZXNwb25kcyB0byA4LWJpdCAgICAgICAgICovCisgIC8qICAgICAgYW50aS1hbGlhc2VkIGJpdG1hcHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUkVOREVSX01PREVfTElHSFQgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIEBGVF9SRU5ERVJfTU9ERV9OT1JNQUwuICBJdCBpcyBvbmx5ICAgICAgICAqLworICAvKiAgICAgIGRlZmluZWQgYXMgYSBzZXBhcmF0ZSB2YWx1ZSBiZWNhdXNlIHJlbmRlciBtb2RlcyBhcmUgYWxzbyB1c2VkICAgKi8KKyAgLyogICAgICBpbmRpcmVjdGx5IHRvIGRlZmluZSBoaW50aW5nIGFsZ29yaXRobSBzZWxlY3RvcnMuICBTZWUgICAgICAgICAgICovCisgIC8qICAgICAgQEZUX0xPQURfVEFSR0VUX1hYWCBmb3IgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfUkVOREVSX01PREVfTU9OTyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhpcyBtb2RlIGNvcnJlc3BvbmRzIHRvIDEtYml0IGJpdG1hcHMgKHdpdGggMn5sZXZlbHMgb2YgICAgICAgICAqLworICAvKiAgICAgIG9wYWNpdHkpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1JFTkRFUl9NT0RFX0xDRCA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoaXMgbW9kZSBjb3JyZXNwb25kcyB0byBob3Jpem9udGFsIFJHQiBhbmQgQkdSIHN1Yi1waXhlbCAgICAgICAgKi8KKyAgLyogICAgICBkaXNwbGF5cyBsaWtlIExDRCBzY3JlZW5zLiAgSXQgcHJvZHVjZXMgOC1iaXQgYml0bWFwcyB0aGF0IGFyZSAgICovCisgIC8qICAgICAgM350aW1lcyB0aGUgd2lkdGggb2YgdGhlIG9yaWdpbmFsIGdseXBoIG91dGxpbmUgaW4gcGl4ZWxzLCBhbmQgICAqLworICAvKiAgICAgIHdoaWNoIHVzZSB0aGUgQEZUX1BJWEVMX01PREVfTENEIG1vZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1JFTkRFUl9NT0RFX0xDRF9WIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoaXMgbW9kZSBjb3JyZXNwb25kcyB0byB2ZXJ0aWNhbCBSR0IgYW5kIEJHUiBzdWItcGl4ZWwgZGlzcGxheXMgKi8KKyAgLyogICAgICAobGlrZSBQREEgc2NyZWVucywgcm90YXRlZCBMQ0QgZGlzcGxheXMsIGV0Yy4pLiAgSXQgcHJvZHVjZXMgICAgICovCisgIC8qICAgICAgOC1iaXQgYml0bWFwcyB0aGF0IGFyZSAzfnRpbWVzIHRoZSBoZWlnaHQgb2YgdGhlIG9yaWdpbmFsICAgICAgICAqLworICAvKiAgICAgIGdseXBoIG91dGxpbmUgaW4gcGl4ZWxzIGFuZCB1c2UgdGhlIEBGVF9QSVhFTF9NT0RFX0xDRF9WIG1vZGUuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgTENELW9wdGltaXplZCBnbHlwaCBiaXRtYXBzIHByb2R1Y2VkIGJ5IEZUX1JlbmRlcl9HbHlwaCBjYW4gYmUgKi8KKyAgLyogICAgZmlsdGVyZWQgdG8gcmVkdWNlIGNvbG9yLWZyaW5nZXMgYnkgdXNpbmcgQEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyICovCisgIC8qICAgIChub3QgYWN0aXZlIGluIHRoZSBkZWZhdWx0IGJ1aWxkcykuICBJdCBpcyB1cCB0byB0aGUgY2FsbGVyIHRvICAgICAqLworICAvKiAgICBlaXRoZXIgY2FsbCBARlRfTGlicmFyeV9TZXRMY2RGaWx0ZXIgKGlmIGF2YWlsYWJsZSkgb3IgZG8gdGhlICAgICAgKi8KKyAgLyogICAgZmlsdGVyaW5nIGl0c2VsZi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgc2VsZWN0ZWQgcmVuZGVyIG1vZGUgb25seSBhZmZlY3RzIHZlY3RvciBnbHlwaHMgb2YgYSBmb250LiAgICAgKi8KKyAgLyogICAgRW1iZWRkZWQgYml0bWFwcyBvZnRlbiBoYXZlIGEgZGlmZmVyZW50IHBpeGVsIG1vZGUgbGlrZSAgICAgICAgICAgICovCisgIC8qICAgIEBGVF9QSVhFTF9NT0RFX01PTk8uICBZb3UgY2FuIHVzZSBARlRfQml0bWFwX0NvbnZlcnQgdG8gdHJhbnNmb3JtICAqLworICAvKiAgICB0aGVtIGludG8gOC1iaXQgcGl4bWFwcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHR5cGVkZWYgZW51bSAgRlRfUmVuZGVyX01vZGVfCisgIHsKKyAgICBGVF9SRU5ERVJfTU9ERV9OT1JNQUwgPSAwLAorICAgIEZUX1JFTkRFUl9NT0RFX0xJR0hULAorICAgIEZUX1JFTkRFUl9NT0RFX01PTk8sCisgICAgRlRfUkVOREVSX01PREVfTENELAorICAgIEZUX1JFTkRFUl9NT0RFX0xDRF9WLAorCisgICAgRlRfUkVOREVSX01PREVfTUFYCisKKyAgfSBGVF9SZW5kZXJfTW9kZTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEVudW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZ0X3JlbmRlcl9tb2RlX3h4eCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZXNlIGNvbnN0YW50cyBhcmUgZGVwcmVjYXRlZC4gIFVzZSB0aGUgY29ycmVzcG9uZGluZyAgICAgICAgICAgICAqLworICAvKiAgICBARlRfUmVuZGVyX01vZGUgdmFsdWVzIGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmdF9yZW5kZXJfbW9kZV9ub3JtYWwgOjogc2VlIEBGVF9SRU5ERVJfTU9ERV9OT1JNQUwgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZnRfcmVuZGVyX21vZGVfbW9ubyAgIDo6IHNlZSBARlRfUkVOREVSX01PREVfTU9OTyAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBmdF9yZW5kZXJfbW9kZV9ub3JtYWwgIEZUX1JFTkRFUl9NT0RFX05PUk1BTAorI2RlZmluZSBmdF9yZW5kZXJfbW9kZV9tb25vICAgIEZUX1JFTkRFUl9NT0RFX01PTk8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1JlbmRlcl9HbHlwaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIENvbnZlcnQgYSBnaXZlbiBnbHlwaCBpbWFnZSB0byBhIGJpdG1hcC4gIEl0IGRvZXMgc28gYnkgaW5zcGVjdGluZyAqLworICAvKiAgICB0aGUgZ2x5cGggaW1hZ2UgZm9ybWF0LCBmaW5kaW5nIHRoZSByZWxldmFudCByZW5kZXJlciwgYW5kICAgICAgICAgKi8KKyAgLyogICAgaW52b2tpbmcgaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgc2xvdCAgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIGdseXBoIHNsb3QgY29udGFpbmluZyB0aGUgaW1hZ2UgdG8gICovCisgIC8qICAgICAgICAgICAgICAgICAgIGNvbnZlcnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHJlbmRlcl9tb2RlIDo6IFRoaXMgaXMgdGhlIHJlbmRlciBtb2RlIHVzZWQgdG8gcmVuZGVyIHRoZSBnbHlwaCAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBpbWFnZSBpbnRvIGEgYml0bWFwLiAgU2VlIEBGVF9SZW5kZXJfTW9kZSBmb3IgYSAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfUmVuZGVyX0dseXBoKCBGVF9HbHlwaFNsb3QgICAgc2xvdCwKKyAgICAgICAgICAgICAgICAgICBGVF9SZW5kZXJfTW9kZSAgcmVuZGVyX21vZGUgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEVudW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0tlcm5pbmdfTW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEFuIGVudW1lcmF0aW9uIHVzZWQgdG8gc3BlY2lmeSB3aGljaCBrZXJuaW5nIHZhbHVlcyB0byByZXR1cm4gaW4gICAqLworICAvKiAgICBARlRfR2V0X0tlcm5pbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9LRVJOSU5HX0RFRkFVTFQgIDo6IFJldHVybiBzY2FsZWQgYW5kIGdyaWQtZml0dGVkIGtlcm5pbmcgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZXMgKHZhbHVlIGlzfjApLiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9LRVJOSU5HX1VORklUVEVEIDo6IFJldHVybiBzY2FsZWQgYnV0IHVuLWdyaWQtZml0dGVkIGtlcm5pbmcgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9LRVJOSU5HX1VOU0NBTEVEIDo6IFJldHVybiB0aGUga2VybmluZyB2ZWN0b3IgaW4gb3JpZ2luYWwgZm9udCAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICB0eXBlZGVmIGVudW0gIEZUX0tlcm5pbmdfTW9kZV8KKyAgeworICAgIEZUX0tFUk5JTkdfREVGQVVMVCAgPSAwLAorICAgIEZUX0tFUk5JTkdfVU5GSVRURUQsCisgICAgRlRfS0VSTklOR19VTlNDQUxFRAorCisgIH0gRlRfS2VybmluZ19Nb2RlOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Q29uc3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZnRfa2VybmluZ19kZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBjb25zdGFudCBpcyBkZXByZWNhdGVkLiAgUGxlYXNlIHVzZSBARlRfS0VSTklOR19ERUZBVUxUICAgICAgICovCisgIC8qICAgIGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgZnRfa2VybmluZ19kZWZhdWx0ICAgRlRfS0VSTklOR19ERUZBVUxUCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxDb25zdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmdF9rZXJuaW5nX3VuZml0dGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGNvbnN0YW50IGlzIGRlcHJlY2F0ZWQuICBQbGVhc2UgdXNlIEBGVF9LRVJOSU5HX1VORklUVEVEICAgICAgKi8KKyAgLyogICAgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBmdF9rZXJuaW5nX3VuZml0dGVkICBGVF9LRVJOSU5HX1VORklUVEVECisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxDb25zdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmdF9rZXJuaW5nX3Vuc2NhbGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGNvbnN0YW50IGlzIGRlcHJlY2F0ZWQuICBQbGVhc2UgdXNlIEBGVF9LRVJOSU5HX1VOU0NBTEVEICAgICAgKi8KKyAgLyogICAgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBmdF9rZXJuaW5nX3Vuc2NhbGVkICBGVF9LRVJOSU5HX1VOU0NBTEVECisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZXRfS2VybmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXR1cm4gdGhlIGtlcm5pbmcgdmVjdG9yIGJldHdlZW4gdHdvIGdseXBocyBvZiBhIHNhbWUgZmFjZS4gICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICAgICA6OiBBIGhhbmRsZSB0byBhIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxlZnRfZ2x5cGggIDo6IFRoZSBpbmRleCBvZiB0aGUgbGVmdCBnbHlwaCBpbiB0aGUga2VybiBwYWlyLiAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgcmlnaHRfZ2x5cGggOjogVGhlIGluZGV4IG9mIHRoZSByaWdodCBnbHlwaCBpbiB0aGUga2VybiBwYWlyLiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBrZXJuX21vZGUgICA6OiBTZWUgQEZUX0tlcm5pbmdfTW9kZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgc2NhbGUgYW5kIGRpbWVuc2lvbiBvZiB0aGUgcmV0dXJuZWQgICovCisgIC8qICAgICAgICAgICAgICAgICAgIGtlcm5pbmcgdmVjdG9yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFrZXJuaW5nICAgIDo6IFRoZSBrZXJuaW5nIHZlY3Rvci4gIFRoaXMgaXMgZWl0aGVyIGluIGZvbnQgdW5pdHMgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBvciBpbiBwaXhlbHMgKDI2LjYgZm9ybWF0KSBmb3Igc2NhbGFibGUgZm9ybWF0cywgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgYW5kIGluIHBpeGVscyBmb3IgZml4ZWQtc2l6ZXMgZm9ybWF0cy4gICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgT25seSBob3Jpem9udGFsIGxheW91dHMgKGxlZnQtdG8tcmlnaHQgJiByaWdodC10by1sZWZ0KSBhcmUgICAgICAgICovCisgIC8qICAgIHN1cHBvcnRlZCBieSB0aGlzIG1ldGhvZC4gIE90aGVyIGxheW91dHMsIG9yIG1vcmUgc29waGlzdGljYXRlZCAgICAqLworICAvKiAgICBrZXJuaW5ncywgYXJlIG91dCBvZiB0aGUgc2NvcGUgb2YgdGhpcyBBUEkgZnVuY3Rpb24gLS0gdGhleSBjYW4gYmUgKi8KKyAgLyogICAgaW1wbGVtZW50ZWQgdGhyb3VnaCBmb3JtYXQtc3BlY2lmaWMgaW50ZXJmYWNlcy4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfR2V0X0tlcm5pbmcoIEZUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBsZWZ0X2dseXBoLAorICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgcmlnaHRfZ2x5cGgsCisgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBrZXJuX21vZGUsCisgICAgICAgICAgICAgICAgICBGVF9WZWN0b3IgICpha2VybmluZyApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X1RyYWNrX0tlcm5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmV0dXJuIHRoZSB0cmFjayBrZXJuaW5nIGZvciBhIGdpdmVuIGZhY2Ugb2JqZWN0IGF0IGEgZ2l2ZW4gc2l6ZS4gICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgICA6OiBBIGhhbmRsZSB0byBhIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBwb2ludF9zaXplIDo6IFRoZSBwb2ludCBzaXplIGluIDE2LjE2IGZyYWN0aW9uYWwgcG9pbnRzLiAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGRlZ3JlZSAgICAgOjogVGhlIGRlZ3JlZSBvZiB0aWdodG5lc3MuICBJbmNyZWFzaW5nbHkgbmVnYXRpdmUgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIHZhbHVlcyByZXByZXNlbnQgdGlnaHRlciB0cmFjayBrZXJuaW5nLCB3aGlsZSAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICBpbmNyZWFzaW5nbHkgcG9zaXRpdmUgdmFsdWVzIHJlcHJlc2VudCBsb29zZXIgdHJhY2sgICovCisgIC8qICAgICAgICAgICAgICAgICAga2VybmluZy4gIFZhbHVlIHplcm8gbWVhbnMgbm8gdHJhY2sga2VybmluZy4gICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFrZXJuaW5nICAgOjogVGhlIGtlcm5pbmcgaW4gMTYuMTYgZnJhY3Rpb25hbCBwb2ludHMsIHRvIGJlICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgIHVuaWZvcm1seSBhcHBsaWVkIGJldHdlZW4gYWxsIGdseXBocy4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDdXJyZW50bHksIG9ubHkgdGhlIFR5cGV+MSBmb250IGRyaXZlciBzdXBwb3J0cyB0cmFjayBrZXJuaW5nLCAgICAgKi8KKyAgLyogICAgdXNpbmcgZGF0YSBmcm9tIEFGTSBmaWxlcyAoaWYgYXR0YWNoZWQgd2l0aCBARlRfQXR0YWNoX0ZpbGUgb3IgICAgICovCisgIC8qICAgIEBGVF9BdHRhY2hfU3RyZWFtKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgT25seSB2ZXJ5IGZldyBBRk0gZmlsZXMgY29tZSB3aXRoIHRyYWNrIGtlcm5pbmcgZGF0YTsgcGxlYXNlIHJlZmVyICovCisgIC8qICAgIHRvIHRoZSBBZG9iZSdzIEFGTSBzcGVjaWZpY2F0aW9uIGZvciBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9FcnJvciApCisgIEZUX0dldF9UcmFja19LZXJuaW5nKCBGVF9GYWNlICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9GaXhlZCAgIHBvaW50X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgIGRlZ3JlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX0ZpeGVkKiAgYWtlcm5pbmcgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dldF9HbHlwaF9OYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHJpZXZlIHRoZSBBU0NJSSBuYW1lIG9mIGEgZ2l2ZW4gZ2x5cGggaW4gYSBmYWNlLiAgVGhpcyBvbmx5ICAgICAqLworICAvKiAgICB3b3JrcyBmb3IgdGhvc2UgZmFjZXMgd2hlcmUgQEZUX0hBU19HTFlQSF9OQU1FUyhmYWNlKSByZXR1cm5zfjEuICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICAgICAgICA6OiBBIGhhbmRsZSB0byBhIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGdseXBoX2luZGV4IDo6IFRoZSBnbHlwaCBpbmRleC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYnVmZmVyX21heCAgOjogVGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgIGJ1ZmZlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGJ1ZmZlciAgICAgIDo6IEEgcG9pbnRlciB0byBhIHRhcmdldCBidWZmZXIgd2hlcmUgdGhlIG5hbWUgaXMgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICBjb3BpZWQgdG8uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGcmVlVHlwZSBlcnJvciBjb2RlLiAgMH5tZWFucyBzdWNjZXNzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbiBlcnJvciBpcyByZXR1cm5lZCBpZiB0aGUgZmFjZSBkb2Vzbid0IHByb3ZpZGUgZ2x5cGggbmFtZXMgb3IgaWYgKi8KKyAgLyogICAgdGhlIGdseXBoIGluZGV4IGlzIGludmFsaWQuICBJbiBhbGwgY2FzZXMgb2YgZmFpbHVyZSwgdGhlIGZpcnN0ICAgICovCisgIC8qICAgIGJ5dGUgb2YgYGJ1ZmZlcicgaXMgc2V0IHRvfjAgdG8gaW5kaWNhdGUgYW4gZW1wdHkgbmFtZS4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGdseXBoIG5hbWUgaXMgdHJ1bmNhdGVkIHRvIGZpdCB3aXRoaW4gdGhlIGJ1ZmZlciBpZiBpdCBpcyB0b28gICovCisgIC8qICAgIGxvbmcuICBUaGUgcmV0dXJuZWQgc3RyaW5nIGlzIGFsd2F5cyB6ZXJvLXRlcm1pbmF0ZWQuICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQmUgYXdhcmUgdGhhdCBGcmVlVHlwZSByZW9yZGVycyBnbHlwaCBpbmRpY2VzIGludGVybmFsbHkgc28gdGhhdCAgICovCisgIC8qICAgIGdseXBoIGluZGV4fjAgYWx3YXlzIGNvcnJlc3BvbmRzIHRvIHRoZSBgbWlzc2luZyBnbHlwaCcgKGNhbGxlZCAgICAqLworICAvKiAgICBgLm5vdGRlZicpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgbm90IGNvbXBpbGVkIHdpdGhpbiB0aGUgbGlicmFyeSBpZiB0aGUgY29uZmlnICAgICAqLworICAvKiAgICBtYWNybyBgRlRfQ09ORklHX09QVElPTl9OT19HTFlQSF9OQU1FUycgaXMgZGVmaW5lZCBpbiAgICAgICAgICAgICAgKi8KKyAgLyogICAgYGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9ucy5oJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Vycm9yICkKKyAgRlRfR2V0X0dseXBoX05hbWUoIEZUX0ZhY2UgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9VSW50ICAgICBnbHlwaF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1BvaW50ZXIgIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgIGJ1ZmZlcl9tYXggKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dldF9Qb3N0c2NyaXB0X05hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHJpZXZlIHRoZSBBU0NJSSBQb3N0U2NyaXB0IG5hbWUgb2YgYSBnaXZlbiBmYWNlLCBpZiBhdmFpbGFibGUuICAqLworICAvKiAgICBUaGlzIG9ubHkgd29ya3Mgd2l0aCBQb3N0U2NyaXB0IGFuZCBUcnVlVHlwZSBmb250cy4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHBvaW50ZXIgdG8gdGhlIGZhY2UncyBQb3N0U2NyaXB0IG5hbWUuICBOVUxMIGlmIHVuYXZhaWxhYmxlLiAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgcmV0dXJuZWQgcG9pbnRlciBpcyBvd25lZCBieSB0aGUgZmFjZSBhbmQgaXMgZGVzdHJveWVkIHdpdGggICAgKi8KKyAgLyogICAgaXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIGNvbnN0IGNoYXIqICkKKyAgRlRfR2V0X1Bvc3RzY3JpcHRfTmFtZSggRlRfRmFjZSAgZmFjZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfU2VsZWN0X0NoYXJtYXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2VsZWN0IGEgZ2l2ZW4gY2hhcm1hcCBieSBpdHMgZW5jb2RpbmcgdGFnIChhcyBsaXN0ZWQgaW4gICAgICAgICAgICovCisgIC8qICAgIGBmcmVldHlwZS5oJykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGVuY29kaW5nIDo6IEEgaGFuZGxlIHRvIHRoZSBzZWxlY3RlZCBlbmNvZGluZy4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBpZiBubyBjaGFybWFwIGluIHRoZSBmYWNlICAgICAgICAgICAqLworICAvKiAgICBjb3JyZXNwb25kcyB0byB0aGUgZW5jb2RpbmcgcXVlcmllZCBoZXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEJlY2F1c2UgbWFueSBmb250cyBjb250YWluIG1vcmUgdGhhbiBhIHNpbmdsZSBjbWFwIGZvciBVbmljb2RlICAgICAqLworICAvKiAgICBlbmNvZGluZywgdGhpcyBmdW5jdGlvbiBoYXMgc29tZSBzcGVjaWFsIGNvZGUgdG8gc2VsZWN0IHRoZSBvbmUgICAgKi8KKyAgLyogICAgd2hpY2ggY292ZXJzIFVuaWNvZGUgYmVzdCAoYGJlc3QnIGluIHRoZSBzZW5zZSB0aGF0IGEgVUNTLTQgY21hcCAgICovCisgIC8qICAgIGlzIHByZWZlcnJlZCB0byBhIFVDUy0yIGNtYXApLiAgSXQgaXMgdGh1cyBwcmVmZXJhYmxlIHRvICAgICAgICAgICAqLworICAvKiAgICBARlRfU2V0X0NoYXJtYXAgaW4gdGhpcyBjYXNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9TZWxlY3RfQ2hhcm1hcCggRlRfRmFjZSAgICAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9FbmNvZGluZyAgZW5jb2RpbmcgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1NldF9DaGFybWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNlbGVjdCBhIGdpdmVuIGNoYXJtYXAgZm9yIGNoYXJhY3RlciBjb2RlIHRvIGdseXBoIGluZGV4IG1hcHBpbmcuICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEluT3V0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNoYXJtYXAgOjogQSBoYW5kbGUgdG8gdGhlIHNlbGVjdGVkIGNoYXJtYXAuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZyZWVUeXBlIGVycm9yIGNvZGUuICAwfm1lYW5zIHN1Y2Nlc3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBpZiB0aGUgY2hhcm1hcCBpcyBub3QgcGFydCBvZiAgICAgICAqLworICAvKiAgICB0aGUgZmFjZSAoaS5lLiwgaWYgaXQgaXMgbm90IGxpc3RlZCBpbiB0aGUgYGZhY2UtPmNoYXJtYXBzJyAgICAgICAgKi8KKyAgLyogICAgdGFibGUpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJdCBhbHNvIGZhaWxzIGlmIGEgdHlwZX4xNCBjaGFybWFwIGlzIHNlbGVjdGVkLiAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9TZXRfQ2hhcm1hcCggRlRfRmFjZSAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgIEZUX0NoYXJNYXAgIGNoYXJtYXAgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBmdW5jdGlvbjoKKyAgICogICBGVF9HZXRfQ2hhcm1hcF9JbmRleAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0cmlldmUgaW5kZXggb2YgYSBnaXZlbiBjaGFybWFwLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgY2hhcm1hcCA6OgorICAgKiAgICAgQSBoYW5kbGUgdG8gYSBjaGFybWFwLgorICAgKgorICAgKiBAcmV0dXJuOgorICAgKiAgIFRoZSBpbmRleCBpbnRvIHRoZSBhcnJheSBvZiBjaGFyYWN0ZXIgbWFwcyB3aXRoaW4gdGhlIGZhY2UgdG8gd2hpY2gKKyAgICogICBgY2hhcm1hcCcgYmVsb25ncy4gIElmIGFuIGVycm9yIG9jY3VycywgLTEgaXMgcmV0dXJuZWQuCisgICAqCisgICAqLworICBGVF9FWFBPUlQoIEZUX0ludCApCisgIEZUX0dldF9DaGFybWFwX0luZGV4KCBGVF9DaGFyTWFwICBjaGFybWFwICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZXRfQ2hhcl9JbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXR1cm4gdGhlIGdseXBoIGluZGV4IG9mIGEgZ2l2ZW4gY2hhcmFjdGVyIGNvZGUuICBUaGlzIGZ1bmN0aW9uICAgKi8KKyAgLyogICAgdXNlcyBhIGNoYXJtYXAgb2JqZWN0IHRvIGRvIHRoZSBtYXBwaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjaGFyY29kZSA6OiBUaGUgY2hhcmFjdGVyIGNvZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgZ2x5cGggaW5kZXguICAwfm1lYW5zIGB1bmRlZmluZWQgY2hhcmFjdGVyIGNvZGUnLiAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBJZiB5b3UgdXNlIEZyZWVUeXBlIHRvIG1hbmlwdWxhdGUgdGhlIGNvbnRlbnRzIG9mIGZvbnQgZmlsZXMgICAgICAgKi8KKyAgLyogICAgZGlyZWN0bHksIGJlIGF3YXJlIHRoYXQgdGhlIGdseXBoIGluZGV4IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gICovCisgIC8qICAgIGRvZXNuJ3QgYWx3YXlzIGNvcnJlc3BvbmQgdG8gdGhlIGludGVybmFsIGluZGljZXMgdXNlZCB3aXRoaW4gdGhlICAqLworICAvKiAgICBmaWxlLiAgVGhpcyBpcyBkb25lIHRvIGVuc3VyZSB0aGF0IHZhbHVlfjAgYWx3YXlzIGNvcnJlc3BvbmRzIHRvICAgKi8KKyAgLyogICAgdGhlIGBtaXNzaW5nIGdseXBoJy4gIElmIHRoZSBmaXJzdCBnbHlwaCBpcyBub3QgbmFtZWQgYC5ub3RkZWYnLCAgICovCisgIC8qICAgIHRoZW4gZm9yIFR5cGV+MSBhbmQgVHlwZX40MiBmb250cywgYC5ub3RkZWYnIHdpbGwgYmUgbW92ZWQgaW50byAgICAqLworICAvKiAgICB0aGUgZ2x5cGggSUR+MCBwb3NpdGlvbiwgYW5kIHdoYXRldmVyIHdhcyB0aGVyZSB3aWxsIGJlIG1vdmVkIHRvICAgKi8KKyAgLyogICAgdGhlIHBvc2l0aW9uIGAubm90ZGVmJyBoYWQuICBGb3IgVHlwZX4xIGZvbnRzLCBpZiB0aGVyZSBpcyBubyAgICAgICovCisgIC8qICAgIGAubm90ZGVmJyBnbHlwaCBhdCBhbGwsIHRoZW4gb25lIHdpbGwgYmUgY3JlYXRlZCBhdCBpbmRleH4wIGFuZCAgICAqLworICAvKiAgICB3aGF0ZXZlciB3YXMgdGhlcmUgd2lsbCBiZSBtb3ZlZCB0byB0aGUgbGFzdCBpbmRleCAtLSBUeXBlfjQyICAgICAgKi8KKyAgLyogICAgZm9udHMgYXJlIGNvbnNpZGVyZWQgaW52YWxpZCB1bmRlciB0aGlzIGNvbmRpdGlvbi4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX1VJbnQgKQorICBGVF9HZXRfQ2hhcl9JbmRleCggRlRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgY2hhcmNvZGUgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dldF9GaXJzdF9DaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZXR1cm4gdGhlIGZpcnN0IGNoYXJhY3RlciBjb2RlIGluIHRoZSAgICAqLworICAvKiAgICBjdXJyZW50IGNoYXJtYXAgb2YgYSBnaXZlbiBmYWNlLiAgSXQgYWxzbyByZXR1cm5zIHRoZSAgICAgICAgICAgICAgKi8KKyAgLyogICAgY29ycmVzcG9uZGluZyBnbHlwaCBpbmRleC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICA6OiBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8T3V0cHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYWdpbmRleCA6OiBHbHlwaCBpbmRleCBvZiBmaXJzdCBjaGFyYWN0ZXIgY29kZS4gIDB+aWYgY2hhcm1hcCBpcyAgICovCisgIC8qICAgICAgICAgICAgICAgZW1wdHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBjaGFybWFwJ3MgZmlyc3QgY2hhcmFjdGVyIGNvZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFlvdSBzaG91bGQgdXNlIHRoaXMgZnVuY3Rpb24gd2l0aCBARlRfR2V0X05leHRfQ2hhciB0byBiZSBhYmxlIHRvICAqLworICAvKiAgICBwYXJzZSBhbGwgY2hhcmFjdGVyIGNvZGVzIGF2YWlsYWJsZSBpbiBhIGdpdmVuIGNoYXJtYXAuICBUaGUgY29kZSAgKi8KKyAgLyogICAgc2hvdWxkIGxvb2sgbGlrZSB0aGlzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBGVF9VTG9uZyAgY2hhcmNvZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgRlRfVUludCAgIGdpbmRleDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgY2hhcmNvZGUgPSBGVF9HZXRfRmlyc3RfQ2hhciggZmFjZSwgJmdpbmRleCApOyAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIHdoaWxlICggZ2luZGV4ICE9IDAgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAuLi4gZG8gc29tZXRoaW5nIHdpdGggKGNoYXJjb2RlLGdpbmRleCkgcGFpciAuLi4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgIGNoYXJjb2RlID0gRlRfR2V0X05leHRfQ2hhciggZmFjZSwgY2hhcmNvZGUsICZnaW5kZXggKTsgICAgICAgICovCisgIC8qICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIE5vdGUgdGhhdCBgKmFnaW5kZXgnIGlzIHNldCB0b34wIGlmIHRoZSBjaGFybWFwIGlzIGVtcHR5LiAgVGhlICAgICAqLworICAvKiAgICByZXN1bHQgaXRzZWxmIGNhbiBiZX4wIGluIHR3byBjYXNlczogaWYgdGhlIGNoYXJtYXAgaXMgZW1wdHkgb3IgICAgKi8KKyAgLyogICAgaWYgdGhlIHZhbHVlfjAgaXMgdGhlIGZpcnN0IHZhbGlkIGNoYXJhY3RlciBjb2RlLiAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX1VMb25nICkKKyAgRlRfR2V0X0ZpcnN0X0NoYXIoIEZUX0ZhY2UgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgKmFnaW5kZXggKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0dldF9OZXh0X0NoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZXR1cm4gdGhlIG5leHQgY2hhcmFjdGVyIGNvZGUgaW4gdGhlICAgICAqLworICAvKiAgICBjdXJyZW50IGNoYXJtYXAgb2YgYSBnaXZlbiBmYWNlIGZvbGxvd2luZyB0aGUgdmFsdWUgYGNoYXJfY29kZScsICAgKi8KKyAgLyogICAgYXMgd2VsbCBhcyB0aGUgY29ycmVzcG9uZGluZyBnbHlwaCBpbmRleC4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSAgICAgIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGNoYXJfY29kZSA6OiBUaGUgc3RhcnRpbmcgY2hhcmFjdGVyIGNvZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFnaW5kZXggICA6OiBHbHlwaCBpbmRleCBvZiBuZXh0IGNoYXJhY3RlciBjb2RlLiAgMH5pZiBjaGFybWFwICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgaXMgZW1wdHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgY2hhcm1hcCdzIG5leHQgY2hhcmFjdGVyIGNvZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBZb3Ugc2hvdWxkIHVzZSB0aGlzIGZ1bmN0aW9uIHdpdGggQEZUX0dldF9GaXJzdF9DaGFyIHRvIHdhbGsgICAgICAgKi8KKyAgLyogICAgb3ZlciBhbGwgY2hhcmFjdGVyIGNvZGVzIGF2YWlsYWJsZSBpbiBhIGdpdmVuIGNoYXJtYXAuICBTZWUgdGhlICAgICovCisgIC8qICAgIG5vdGUgZm9yIHRoaXMgZnVuY3Rpb24gZm9yIGEgc2ltcGxlIGNvZGUgZXhhbXBsZS4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTm90ZSB0aGF0IGAqYWdpbmRleCcgaXMgc2V0IHRvfjAgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBjb2RlcyBpbiAgICovCisgIC8qICAgIHRoZSBjaGFybWFwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9VTG9uZyApCisgIEZUX0dldF9OZXh0X0NoYXIoIEZUX0ZhY2UgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgICBjaGFyX2NvZGUsCisgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAqYWdpbmRleCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfR2V0X05hbWVfSW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmV0dXJuIHRoZSBnbHlwaCBpbmRleCBvZiBhIGdpdmVuIGdseXBoIG5hbWUuICBUaGlzIGZ1bmN0aW9uIHVzZXMgICovCisgIC8qICAgIGRyaXZlciBzcGVjaWZpYyBvYmplY3RzIHRvIGRvIHRoZSB0cmFuc2xhdGlvbi4gICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgICAgICAgOjogQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZ2x5cGhfbmFtZSA6OiBUaGUgZ2x5cGggbmFtZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIGdseXBoIGluZGV4LiAgMH5tZWFucyBgdW5kZWZpbmVkIGNoYXJhY3RlciBjb2RlJy4gICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX1VJbnQgKQorICBGVF9HZXRfTmFtZV9JbmRleCggRlRfRmFjZSAgICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgIEZUX1N0cmluZyogIGdseXBoX25hbWUgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAqCisgICAqIEBtYWNybzoKKyAgICogICBGVF9TVUJHTFlQSF9GTEFHX1hYWAorICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgQSBsaXN0IG9mIGNvbnN0YW50cyB1c2VkIHRvIGRlc2NyaWJlIHN1YmdseXBocy4gIFBsZWFzZSByZWZlciB0byB0aGUKKyAgICogICBUcnVlVHlwZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgbWVhbmluZyBvZiB0aGUgdmFyaW91cyBmbGFncy4KKyAgICoKKyAgICogQHZhbHVlczoKKyAgICogICBGVF9TVUJHTFlQSF9GTEFHX0FSR1NfQVJFX1dPUkRTIDo6CisgICAqICAgRlRfU1VCR0xZUEhfRkxBR19BUkdTX0FSRV9YWV9WQUxVRVMgOjoKKyAgICogICBGVF9TVUJHTFlQSF9GTEFHX1JPVU5EX1hZX1RPX0dSSUQgOjoKKyAgICogICBGVF9TVUJHTFlQSF9GTEFHX1NDQUxFIDo6CisgICAqICAgRlRfU1VCR0xZUEhfRkxBR19YWV9TQ0FMRSA6OgorICAgKiAgIEZUX1NVQkdMWVBIX0ZMQUdfMlgyIDo6CisgICAqICAgRlRfU1VCR0xZUEhfRkxBR19VU0VfTVlfTUVUUklDUyA6OgorICAgKgorICAgKi8KKyNkZWZpbmUgRlRfU1VCR0xZUEhfRkxBR19BUkdTX0FSRV9XT1JEUyAgICAgICAgICAxCisjZGVmaW5lIEZUX1NVQkdMWVBIX0ZMQUdfQVJHU19BUkVfWFlfVkFMVUVTICAgICAgMgorI2RlZmluZSBGVF9TVUJHTFlQSF9GTEFHX1JPVU5EX1hZX1RPX0dSSUQgICAgICAgIDQKKyNkZWZpbmUgRlRfU1VCR0xZUEhfRkxBR19TQ0FMRSAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZUX1NVQkdMWVBIX0ZMQUdfWFlfU0NBTEUgICAgICAgICAgICAgMHg0MAorI2RlZmluZSBGVF9TVUJHTFlQSF9GTEFHXzJYMiAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgRlRfU1VCR0xZUEhfRkxBR19VU0VfTVlfTUVUUklDUyAgICAgIDB4MjAwCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgKgorICAgKiBAZnVuYzoKKyAgICogICBGVF9HZXRfU3ViR2x5cGhfSW5mbworICAgKgorICAgKiBAZGVzY3JpcHRpb246CisgICAqICAgUmV0cmlldmUgYSBkZXNjcmlwdGlvbiBvZiBhIGdpdmVuIHN1YmdseXBoLiAgT25seSB1c2UgaXQgaWYKKyAgICogICBgZ2x5cGgtPmZvcm1hdCcgaXMgQEZUX0dMWVBIX0ZPUk1BVF9DT01QT1NJVEU7IGFuIGVycm9yIGlzCisgICAqICAgcmV0dXJuZWQgb3RoZXJ3aXNlLgorICAgKgorICAgKiBAaW5wdXQ6CisgICAqICAgZ2x5cGggOjoKKyAgICogICAgIFRoZSBzb3VyY2UgZ2x5cGggc2xvdC4KKyAgICoKKyAgICogICBzdWJfaW5kZXggOjoKKyAgICogICAgIFRoZSBpbmRleCBvZiB0aGUgc3ViZ2x5cGguICBNdXN0IGJlIGxlc3MgdGhhbgorICAgKiAgICAgYGdseXBoLT5udW1fc3ViZ2x5cGhzJy4KKyAgICoKKyAgICogQG91dHB1dDoKKyAgICogICBwX2luZGV4IDo6CisgICAqICAgICBUaGUgZ2x5cGggaW5kZXggb2YgdGhlIHN1YmdseXBoLgorICAgKgorICAgKiAgIHBfZmxhZ3MgOjoKKyAgICogICAgIFRoZSBzdWJnbHlwaCBmbGFncywgc2VlIEBGVF9TVUJHTFlQSF9GTEFHX1hYWC4KKyAgICoKKyAgICogICBwX2FyZzEgOjoKKyAgICogICAgIFRoZSBzdWJnbHlwaCdzIGZpcnN0IGFyZ3VtZW50IChpZiBhbnkpLgorICAgKgorICAgKiAgIHBfYXJnMiA6OgorICAgKiAgICAgVGhlIHN1YmdseXBoJ3Mgc2Vjb25kIGFyZ3VtZW50IChpZiBhbnkpLgorICAgKgorICAgKiAgIHBfdHJhbnNmb3JtIDo6CisgICAqICAgICBUaGUgc3ViZ2x5cGggdHJhbnNmb3JtYXRpb24gKGlmIGFueSkuCisgICAqCisgICAqIEByZXR1cm46CisgICAqICAgRnJlZVR5cGUgZXJyb3IgY29kZS4gIDB+bWVhbnMgc3VjY2Vzcy4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIHZhbHVlcyBvZiBgKnBfYXJnMScsIGAqcF9hcmcyJywgYW5kIGAqcF90cmFuc2Zvcm0nIG11c3QgYmUKKyAgICogICBpbnRlcnByZXRlZCBkZXBlbmRpbmcgb24gdGhlIGZsYWdzIHJldHVybmVkIGluIGAqcF9mbGFncycuICBTZWUgdGhlCisgICAqICAgVHJ1ZVR5cGUgc3BlY2lmaWNhdGlvbiBmb3IgZGV0YWlscy4KKyAgICoKKyAgICovCisgIEZUX0VYUE9SVCggRlRfRXJyb3IgKQorICBGVF9HZXRfU3ViR2x5cGhfSW5mbyggRlRfR2x5cGhTbG90ICBnbHlwaCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VJbnQgICAgICAgc3ViX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICpwX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUludCAgICAgICpwX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgICpwX2FyZzEsCisgICAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAgKnBfYXJnMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEZUX01hdHJpeCAgICAqcF90cmFuc2Zvcm0gKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEVudW0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZTVFlQRV9YWFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgbGlzdCBvZiBiaXQgZmxhZ3MgdXNlZCBpbiB0aGUgYGZzVHlwZScgZmllbGQgb2YgdGhlIE9TLzIgdGFibGUgICAqLworICAvKiAgICBpbiBhIFRydWVUeXBlIG9yIE9wZW5UeXBlIGZvbnQgYW5kIHRoZSBgRlNUeXBlJyBlbnRyeSBpbiBhICAgICAgICAgKi8KKyAgLyogICAgUG9zdFNjcmlwdCBmb250LiAgVGhlc2UgYml0IGZsYWdzIGFyZSByZXR1cm5lZCBieSAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEBGVF9HZXRfRlNUeXBlX0ZsYWdzOyB0aGV5IGluZm9ybSBjbGllbnQgYXBwbGljYXRpb25zIG9mIGVtYmVkZGluZyAqLworICAvKiAgICBhbmQgc3Vic2V0dGluZyByZXN0cmljdGlvbnMgYXNzb2NpYXRlZCB3aXRoIGEgZm9udC4gICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNlZSBodHRwOi8vd3d3LmFkb2JlLmNvbS9kZXZuZXQvYWNyb2JhdC9wZGZzL0ZvbnRQb2xpY2llcy5wZGYgZm9yICAqLworICAvKiAgICBtb3JlIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxWYWx1ZXM+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GU1RZUEVfSU5TVEFMTEFCTEVfRU1CRURESU5HIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBGb250cyB3aXRoIG5vIGZzVHlwZSBiaXQgc2V0IG1heSBiZSBlbWJlZGRlZCBhbmQgcGVybWFuZW50bHkgICAgICovCisgIC8qICAgICAgaW5zdGFsbGVkIG9uIHRoZSByZW1vdGUgc3lzdGVtIGJ5IGFuIGFwcGxpY2F0aW9uLiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRlNUWVBFX1JFU1RSSUNURURfTElDRU5TRV9FTUJFRERJTkcgOjogICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgRm9udHMgdGhhdCBoYXZlIG9ubHkgdGhpcyBiaXQgc2V0IG11c3Qgbm90IGJlIG1vZGlmaWVkLCBlbWJlZGRlZCAqLworICAvKiAgICAgIG9yIGV4Y2hhbmdlZCBpbiBhbnkgbWFubmVyIHdpdGhvdXQgZmlyc3Qgb2J0YWluaW5nIHBlcm1pc3Npb24gb2YgKi8KKyAgLyogICAgICB0aGUgZm9udCBzb2Z0d2FyZSBjb3B5cmlnaHQgb3duZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GU1RZUEVfUFJFVklFV19BTkRfUFJJTlRfRU1CRURESU5HIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZSBmb250IG1heSBiZSBlbWJlZGRlZCBhbmQgdGVtcG9yYXJpbHkgICAgICovCisgIC8qICAgICAgbG9hZGVkIG9uIHRoZSByZW1vdGUgc3lzdGVtLiAgRG9jdW1lbnRzIGNvbnRhaW5pbmcgUHJldmlldyAmICAgICAqLworICAvKiAgICAgIFByaW50IGZvbnRzIG11c3QgYmUgb3BlbmVkIGByZWFkLW9ubHknOyBubyBlZGl0cyBjYW4gYmUgYXBwbGllZCAgKi8KKyAgLyogICAgICB0byB0aGUgZG9jdW1lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GU1RZUEVfRURJVEFCTEVfRU1CRURESU5HIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZSBmb250IG1heSBiZSBlbWJlZGRlZCBidXQgbXVzdCBvbmx5IGJlICAgICovCisgIC8qICAgICAgaW5zdGFsbGVkIHRlbXBvcmFyaWx5IG9uIG90aGVyIHN5c3RlbXMuICBJbiBjb250cmFzdCB0byBQcmV2aWV3ICAqLworICAvKiAgICAgICYgUHJpbnQgZm9udHMsIGRvY3VtZW50cyBjb250YWluaW5nIGVkaXRhYmxlIGZvbnRzIG1heSBiZSBvcGVuZWQgKi8KKyAgLyogICAgICBmb3IgcmVhZGluZywgZWRpdGluZyBpcyBwZXJtaXR0ZWQsIGFuZCBjaGFuZ2VzIG1heSBiZSBzYXZlZC4gICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GU1RZUEVfTk9fU1VCU0VUVElORyA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBJZiB0aGlzIGJpdCBpcyBzZXQsIHRoZSBmb250IG1heSBub3QgYmUgc3Vic2V0dGVkIHByaW9yIHRvICAgICAgICovCisgIC8qICAgICAgZW1iZWRkaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRlNUWVBFX0JJVE1BUF9FTUJFRERJTkdfT05MWSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgSWYgdGhpcyBiaXQgaXMgc2V0LCBvbmx5IGJpdG1hcHMgY29udGFpbmVkIGluIHRoZSBmb250IG1heSBiZSAgICAqLworICAvKiAgICAgIGVtYmVkZGVkOyBubyBvdXRsaW5lIGRhdGEgbWF5IGJlIGVtYmVkZGVkLiAgSWYgdGhlcmUgYXJlIG5vICAgICAgKi8KKyAgLyogICAgICBiaXRtYXBzIGF2YWlsYWJsZSBpbiB0aGUgZm9udCwgdGhlbiB0aGUgZm9udCBpcyB1bmVtYmVkZGFibGUuICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgV2hpbGUgdGhlIGZzVHlwZSBmbGFncyBjYW4gaW5kaWNhdGUgdGhhdCBhIGZvbnQgbWF5IGJlIGVtYmVkZGVkLCBhICovCisgIC8qICAgIGxpY2Vuc2Ugd2l0aCB0aGUgZm9udCB2ZW5kb3IgbWF5IGJlIHNlcGFyYXRlbHkgcmVxdWlyZWQgdG8gdXNlIHRoZSAqLworICAvKiAgICBmb250IGluIHRoaXMgd2F5LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZUX0ZTVFlQRV9JTlNUQUxMQUJMRV9FTUJFRERJTkcgICAgICAgICAweDAwMDAKKyNkZWZpbmUgRlRfRlNUWVBFX1JFU1RSSUNURURfTElDRU5TRV9FTUJFRERJTkcgIDB4MDAwMgorI2RlZmluZSBGVF9GU1RZUEVfUFJFVklFV19BTkRfUFJJTlRfRU1CRURESU5HICAgMHgwMDA0CisjZGVmaW5lIEZUX0ZTVFlQRV9FRElUQUJMRV9FTUJFRERJTkcgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgRlRfRlNUWVBFX05PX1NVQlNFVFRJTkcgICAgICAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBGVF9GU1RZUEVfQklUTUFQX0VNQkVERElOR19PTkxZICAgICAgICAgMHgwMjAwCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9HZXRfRlNUeXBlX0ZsYWdzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXR1cm4gdGhlIGZzVHlwZSBmbGFncyBmb3IgYSBmb250LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlIDo6IEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgZnNUeXBlIGZsYWdzLCBARlRfRlNUWVBFX1hYWC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBVc2UgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiBkaXJlY3RseSByZWFkaW5nIHRoZSBgZnNfdHlwZScgZmllbGQgKi8KKyAgLyogICAgaW4gdGhlIEBQU19Gb250SW5mb1JlYyBzdHJ1Y3R1cmUgd2hpY2ggaXMgb25seSBndWFyYW50ZWVkIHRvICAgICAgICovCisgIC8qICAgIHJldHVybiB0aGUgY29ycmVjdCByZXN1bHRzIGZvciBUeXBlfjEgZm9udHMuICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIDIuMy44ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9VU2hvcnQgKQorICBGVF9HZXRfRlNUeXBlX0ZsYWdzKCBGVF9GYWNlICBmYWNlICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxTZWN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBnbHlwaF92YXJpYW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxUaXRsZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBHbHlwaCBWYXJpYW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxBYnN0cmFjdD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgRnJlZVR5cGV+MiBpbnRlcmZhY2UgdG8gVW5pY29kZSBJZGVvZ3JhcGhpYyBWYXJpYXRpb24gICAgICAgICAgKi8KKyAgLyogICAgU2VxdWVuY2VzIChJVlMpLCB1c2luZyB0aGUgU0ZOVCBjbWFwIGZvcm1hdH4xNC4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTWFueSBDSksgY2hhcmFjdGVycyBoYXZlIHZhcmlhbnQgZm9ybXMuICBUaGV5IGFyZSBhIHNvcnQgb2YgZ3JleSAgICovCisgIC8qICAgIGFyZWEgc29tZXdoZXJlIGJldHdlZW4gYmVpbmcgdG90YWxseSBpcnJlbGV2YW50IGFuZCBzZW1hbnRpY2FsbHkgICAqLworICAvKiAgICBkaXN0aW5jdDsgZm9yIHRoaXMgcmVhc29uLCB0aGUgVW5pY29kZSBjb25zb3J0aXVtIGRlY2lkZWQgdG8gICAgICAgKi8KKyAgLyogICAgaW50cm9kdWNlIElkZW9ncmFwaGljIFZhcmlhdGlvbiBTZXF1ZW5jZXMgKElWUyksIGNvbnNpc3Rpbmcgb2YgYSAgICovCisgIC8qICAgIFVuaWNvZGUgYmFzZSBjaGFyYWN0ZXIgYW5kIG9uZSBvZiAyNDAgdmFyaWFudCBzZWxlY3RvcnMgICAgICAgICAgICAqLworICAvKiAgICAoVStFMDEwMC1VK0UwMUVGKSwgaW5zdGVhZCBvZiBmdXJ0aGVyIGV4dGVuZGluZyB0aGUgYWxyZWFkeSBodWdlICAgKi8KKyAgLyogICAgY29kZSByYW5nZSBmb3IgQ0pLIGNoYXJhY3RlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBbiBJVlMgaXMgcmVnaXN0ZXJlZCBhbmQgdW5pcXVlOyBmb3IgZnVydGhlciBkZXRhaWxzIHBsZWFzZSByZWZlciAgKi8KKyAgLyogICAgdG8gVW5pY29kZSBUZWNobmljYWwgU3RhbmRhcmQgIzM3LCB0aGUgSWRlb2dyYXBoaWMgVmFyaWF0aW9uICAgICAgICovCisgIC8qICAgIERhdGFiYXNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHIzNy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUbyBkYXRlIChOb3ZlbWJlciAyMDEyKSwgdGhlIGNoYXJhY3RlciB3aXRoIHRoZSBtb3N0IHZhcmlhbnRzIGlzICAgKi8KKyAgLyogICAgVSs5MDg5LCBoYXZpbmcgMzEgc3VjaCBJVlMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBZG9iZSBhbmQgTVMgZGVjaWRlZCB0byBzdXBwb3J0IElWUyB3aXRoIGEgbmV3IGNtYXAgc3VidGFibGUgICAgICAgKi8KKyAgLyogICAgKGZvcm1hdH4xNCkuICBJdCBpcyBhbiBvZGQgc3VidGFibGUgYmVjYXVzZSBpdCBpcyBub3QgYSBtYXBwaW5nIG9mICovCisgIC8qICAgIGlucHV0IGNvZGUgcG9pbnRzIHRvIGdseXBocywgYnV0IGNvbnRhaW5zIGxpc3RzIG9mIGFsbCB2YXJpYW50cyAgICAqLworICAvKiAgICBzdXBwb3J0ZWQgYnkgdGhlIGZvbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgdmFyaWFudCBtYXkgYmUgZWl0aGVyIGBkZWZhdWx0JyBvciBgbm9uLWRlZmF1bHQnLiAgQSBkZWZhdWx0ICAgICAqLworICAvKiAgICB2YXJpYW50IGlzIHRoZSBvbmUgeW91IHdpbGwgZ2V0IGZvciB0aGF0IGNvZGUgcG9pbnQgaWYgeW91IGxvb2sgaXQgKi8KKyAgLyogICAgdXAgaW4gdGhlIHN0YW5kYXJkIFVuaWNvZGUgY21hcC4gIEEgbm9uLWRlZmF1bHQgdmFyaWFudCBpcyBhICAgICAgICovCisgIC8qICAgIGRpZmZlcmVudCBnbHlwaC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GYWNlX0dldENoYXJWYXJpYW50SW5kZXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBSZXR1cm4gdGhlIGdseXBoIGluZGV4IG9mIGEgZ2l2ZW4gY2hhcmFjdGVyIGNvZGUgYXMgbW9kaWZpZWQgYnkgICAgKi8KKyAgLyogICAgdGhlIHZhcmlhdGlvbiBzZWxlY3Rvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2hhcmNvZGUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhlIGNoYXJhY3RlciBjb2RlIHBvaW50IGluIFVuaWNvZGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdmFyaWFudFNlbGVjdG9yIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhlIFVuaWNvZGUgY29kZSBwb2ludCBvZiB0aGUgdmFyaWF0aW9uIHNlbGVjdG9yLiAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBnbHlwaCBpbmRleC4gIDB+bWVhbnMgZWl0aGVyIGB1bmRlZmluZWQgY2hhcmFjdGVyIGNvZGUnLCBvciAgICAqLworICAvKiAgICBgdW5kZWZpbmVkIHNlbGVjdG9yIGNvZGUnLCBvciBgbm8gdmFyaWF0aW9uIHNlbGVjdG9yIGNtYXAgICAgICAgICAgKi8KKyAgLyogICAgc3VidGFibGUnLCBvciBgY3VycmVudCBDaGFyTWFwIGlzIG5vdCBVbmljb2RlJy4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSWYgeW91IHVzZSBGcmVlVHlwZSB0byBtYW5pcHVsYXRlIHRoZSBjb250ZW50cyBvZiBmb250IGZpbGVzICAgICAgICovCisgIC8qICAgIGRpcmVjdGx5LCBiZSBhd2FyZSB0aGF0IHRoZSBnbHlwaCBpbmRleCByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uICAqLworICAvKiAgICBkb2Vzbid0IGFsd2F5cyBjb3JyZXNwb25kIHRvIHRoZSBpbnRlcm5hbCBpbmRpY2VzIHVzZWQgd2l0aGluICAgICAgKi8KKyAgLyogICAgdGhlIGZpbGUuICBUaGlzIGlzIGRvbmUgdG8gZW5zdXJlIHRoYXQgdmFsdWV+MCBhbHdheXMgY29ycmVzcG9uZHMgICovCisgIC8qICAgIHRvIHRoZSBgbWlzc2luZyBnbHlwaCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IG1lYW5pbmdmdWwgaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgYSkgdGhlIGZvbnQgaGFzIGEgdmFyaWF0aW9uIHNlbGVjdG9yIGNtYXAgc3ViIHRhYmxlLCAgICAgICAgICAgICAqLworICAvKiAgICBhbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBiKSB0aGUgY3VycmVudCBjaGFybWFwIGhhcyBhIFVuaWNvZGUgZW5jb2RpbmcuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgMi4zLjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX1VJbnQgKQorICBGVF9GYWNlX0dldENoYXJWYXJpYW50SW5kZXgoIEZUX0ZhY2UgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICBjaGFyY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgdmFyaWFudFNlbGVjdG9yICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9GYWNlX0dldENoYXJWYXJpYW50SXNEZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBDaGVjayB3aGV0aGVyIHRoaXMgdmFyaWFudCBvZiB0aGlzIFVuaWNvZGUgY2hhcmFjdGVyIGlzIHRoZSBvbmUgdG8gKi8KKyAgLyogICAgYmUgZm91bmQgaW4gdGhlIGBjbWFwJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgQSBoYW5kbGUgdG8gdGhlIHNvdXJjZSBmYWNlIG9iamVjdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY2hhcmNvZGUgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhlIGNoYXJhY3RlciBjb2RlcG9pbnQgaW4gVW5pY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdmFyaWFudFNlbGVjdG9yIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgVGhlIFVuaWNvZGUgY29kZXBvaW50IG9mIHRoZSB2YXJpYXRpb24gc2VsZWN0b3IuICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIDF+aWYgZm91bmQgaW4gdGhlIHN0YW5kYXJkIChVbmljb2RlKSBjbWFwLCAwfmlmIGZvdW5kIGluIHRoZSAgICAgICAqLworICAvKiAgICB2YXJpYXRpb24gc2VsZWN0b3IgY21hcCwgb3IgLTEgaWYgaXQgaXMgbm90IGEgdmFyaWFudC4gICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgbWVhbmluZ2Z1bCBpZiB0aGUgZm9udCBoYXMgYSB2YXJpYXRpb24gICAgICAgKi8KKyAgLyogICAgc2VsZWN0b3IgY21hcCBzdWJ0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgMi4zLjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0ludCApCisgIEZUX0ZhY2VfR2V0Q2hhclZhcmlhbnRJc0RlZmF1bHQoIEZUX0ZhY2UgICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9VTG9uZyAgY2hhcmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICB2YXJpYW50U2VsZWN0b3IgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZhY2VfR2V0VmFyaWFudFNlbGVjdG9ycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHVybiBhIHplcm8tdGVybWluYXRlZCBsaXN0IG9mIFVuaWNvZGUgdmFyaWFudCBzZWxlY3RvcnMgZm91bmQgICAqLworICAvKiAgICBpbiB0aGUgZm9udC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHNlbGVjdG9yIGNvZGUgcG9pbnRzLCBvciBOVUxMIGlmIHRoZXJlIGlzICovCisgIC8qICAgIG5vIHZhbGlkIHZhcmlhbnQgc2VsZWN0b3IgY21hcCBzdWJ0YWJsZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBsYXN0IGl0ZW0gaW4gdGhlIGFycmF5IGlzfjA7IHRoZSBhcnJheSBpcyBvd25lZCBieSB0aGUgICAgICAgICAqLworICAvKiAgICBARlRfRmFjZSBvYmplY3QgYnV0IGNhbiBiZSBvdmVyd3JpdHRlbiBvciByZWxlYXNlZCBvbiB0aGUgbmV4dCAgICAgKi8KKyAgLyogICAgY2FsbCB0byBhIEZyZWVUeXBlIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgMi4zLjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX1VJbnQzMiogKQorICBGVF9GYWNlX0dldFZhcmlhbnRTZWxlY3RvcnMoIEZUX0ZhY2UgIGZhY2UgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0ZhY2VfR2V0VmFyaWFudHNPZkNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHVybiBhIHplcm8tdGVybWluYXRlZCBsaXN0IG9mIFVuaWNvZGUgdmFyaWFudCBzZWxlY3RvcnMgZm91bmQgICAqLworICAvKiAgICBmb3IgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlIDo6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBBIGhhbmRsZSB0byB0aGUgc291cmNlIGZhY2Ugb2JqZWN0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjaGFyY29kZSA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICBUaGUgY2hhcmFjdGVyIGNvZGVwb2ludCBpbiBVbmljb2RlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHZhcmlhbnQgc2VsZWN0b3IgY29kZSBwb2ludHMgd2hpY2ggYXJlICAgICovCisgIC8qICAgIGFjdGl2ZSBmb3IgdGhlIGdpdmVuIGNoYXJhY3Rlciwgb3IgTlVMTCBpZiB0aGUgY29ycmVzcG9uZGluZyBsaXN0ICAqLworICAvKiAgICBpcyBlbXB0eS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgbGFzdCBpdGVtIGluIHRoZSBhcnJheSBpc34wOyB0aGUgYXJyYXkgaXMgb3duZWQgYnkgdGhlICAgICAgICAgKi8KKyAgLyogICAgQEZUX0ZhY2Ugb2JqZWN0IGJ1dCBjYW4gYmUgb3ZlcndyaXR0ZW4gb3IgcmVsZWFzZWQgb24gdGhlIG5leHQgICAgICovCisgIC8qICAgIGNhbGwgdG8gYSBGcmVlVHlwZSBmdW5jdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIDIuMy42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9VSW50MzIqICkKKyAgRlRfRmFjZV9HZXRWYXJpYW50c09mQ2hhciggRlRfRmFjZSAgIGZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZUX1VMb25nICBjaGFyY29kZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRmFjZV9HZXRDaGFyc09mVmFyaWFudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUmV0dXJuIGEgemVyby10ZXJtaW5hdGVkIGxpc3Qgb2YgVW5pY29kZSBjaGFyYWN0ZXIgY29kZXMgZm91bmQgZm9yICovCisgIC8qICAgIHRoZSBzcGVjaWZpZWQgdmFyaWFudCBzZWxlY3Rvci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGZhY2UgOjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIEEgaGFuZGxlIHRvIHRoZSBzb3VyY2UgZmFjZSBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHZhcmlhbnRTZWxlY3RvciA6OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgIFRoZSB2YXJpYW50IHNlbGVjdG9yIGNvZGUgcG9pbnQgaW4gVW5pY29kZS4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIGxpc3Qgb2YgYWxsIHRoZSBjb2RlIHBvaW50cyB3aGljaCBhcmUgc3BlY2lmaWVkIGJ5IHRoaXMgc2VsZWN0b3IgKi8KKyAgLyogICAgKGJvdGggZGVmYXVsdCBhbmQgbm9uLWRlZmF1bHQgY29kZXMgYXJlIHJldHVybmVkKSBvciBOVUxMIGlmIHRoZXJlICovCisgIC8qICAgIGlzIG5vIHZhbGlkIGNtYXAgb3IgdGhlIHZhcmlhbnQgc2VsZWN0b3IgaXMgaW52YWxpZC4gICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBsYXN0IGl0ZW0gaW4gdGhlIGFycmF5IGlzfjA7IHRoZSBhcnJheSBpcyBvd25lZCBieSB0aGUgICAgICAgICAqLworICAvKiAgICBARlRfRmFjZSBvYmplY3QgYnV0IGNhbiBiZSBvdmVyd3JpdHRlbiBvciByZWxlYXNlZCBvbiB0aGUgbmV4dCAgICAgKi8KKyAgLyogICAgY2FsbCB0byBhIEZyZWVUeXBlIGZ1bmN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgMi4zLjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX1VJbnQzMiogKQorICBGVF9GYWNlX0dldENoYXJzT2ZWYXJpYW50KCBGVF9GYWNlICAgZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlRfVUxvbmcgIHZhcmlhbnRTZWxlY3RvciApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgY29tcHV0YXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ29tcHV0YXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQ3J1bmNoaW5nIGZpeGVkIG51bWJlcnMgYW5kIHZlY3RvcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHZhcmlvdXMgZnVuY3Rpb25zIHVzZWQgdG8gcGVyZm9ybSAgICAgICAgICAgICovCisgIC8qICAgIGNvbXB1dGF0aW9ucyBvbiAxNi4xNiBmaXhlZC1mbG9hdCBudW1iZXJzIG9yIDJkIHZlY3RvcnMuICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE9yZGVyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX011bERpdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9NdWxGaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRGl2Rml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1JvdW5kRml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9DZWlsRml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRmxvb3JGaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX1ZlY3Rvcl9UcmFuc2Zvcm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9NYXRyaXhfTXVsdGlwbHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfTWF0cml4X0ludmVydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX011bERpdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgdmVyeSBzaW1wbGUgZnVuY3Rpb24gdXNlZCB0byBwZXJmb3JtIHRoZSBjb21wdXRhdGlvbiBgKGEqYikvYycgICAqLworICAvKiAgICB3aXRoIG1heGltdW0gYWNjdXJhY3kgKGl0IHVzZXMgYSA2NC1iaXQgaW50ZXJtZWRpYXRlIGludGVnZXIgICAgICAgKi8KKyAgLyogICAgd2hlbmV2ZXIgbmVjZXNzYXJ5KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGlzbid0IG5lY2Vzc2FyaWx5IGFzIGZhc3QgYXMgc29tZSBwcm9jZXNzb3Igc3BlY2lmaWMgKi8KKyAgLyogICAgb3BlcmF0aW9ucywgYnV0IGlzIGF0IGxlYXN0IGNvbXBsZXRlbHkgcG9ydGFibGUuICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYSA6OiBUaGUgZmlyc3QgbXVsdGlwbGllci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGIgOjogVGhlIHNlY29uZCBtdWx0aXBsaWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBjIDo6IFRoZSBkaXZpc29yLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgcmVzdWx0IG9mIGAoYSpiKS9jJy4gIFRoaXMgZnVuY3Rpb24gbmV2ZXIgdHJhcHMgd2hlbiB0cnlpbmcgdG8gKi8KKyAgLyogICAgZGl2aWRlIGJ5IHplcm87IGl0IHNpbXBseSByZXR1cm5zIGBNYXhJbnQnIG9yIGBNaW5JbnQnIGRlcGVuZGluZyAgICovCisgIC8qICAgIG9uIHRoZSBzaWducyBvZiBgYScgYW5kIGBiJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9Mb25nICkKKyAgRlRfTXVsRGl2KCBGVF9Mb25nICBhLAorICAgICAgICAgICAgIEZUX0xvbmcgIGIsCisgICAgICAgICAgICAgRlRfTG9uZyAgYyApOworCisKKyAgLyogKi8KKworICAvKiBUaGUgZm9sbG93aW5nICNpZiAwIC4uLiAjZW5kaWYgaXMgZm9yIHRoZSBkb2N1bWVudGF0aW9uIGZvcm1hdHRlciwgKi8KKyAgLyogaGlkaW5nIHRoZSBpbnRlcm5hbCBgRlRfTVVMRklYX0lOTElORUQnIG1hY3JvLiAgICAgICAgICAgICAgICAgICAgICovCisKKyNpZiAwCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX011bEZpeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgdmVyeSBzaW1wbGUgZnVuY3Rpb24gdXNlZCB0byBwZXJmb3JtIHRoZSBjb21wdXRhdGlvbiAgICAgICAgICAgICAqLworICAvKiAgICBgKGEqYikvMHgxMDAwMCcgd2l0aCBtYXhpbXVtIGFjY3VyYWN5LiAgTW9zdCBvZiB0aGUgdGltZSB0aGlzIGlzICAgKi8KKyAgLyogICAgdXNlZCB0byBtdWx0aXBseSBhIGdpdmVuIHZhbHVlIGJ5IGEgMTYuMTYgZml4ZWQtcG9pbnQgZmFjdG9yLiAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYSA6OiBUaGUgZmlyc3QgbXVsdGlwbGllci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGIgOjogVGhlIHNlY29uZCBtdWx0aXBsaWVyLiAgVXNlIGEgMTYuMTYgZmFjdG9yIGhlcmUgd2hlbmV2ZXIgICAgICAqLworICAvKiAgICAgICAgIHBvc3NpYmxlIChzZWUgbm90ZSBiZWxvdykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgcmVzdWx0IG9mIGAoYSpiKS8weDEwMDAwJy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGlzIGZ1bmN0aW9uIGhhcyBiZWVuIG9wdGltaXplZCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIGFic29sdXRlICAgKi8KKyAgLyogICAgdmFsdWUgb2YgYGEnIGlzIGxlc3MgdGhhbiAyMDQ4LCBhbmQgYGInIGlzIGEgMTYuMTYgc2NhbGluZyBmYWN0b3IuICovCisgIC8qICAgIEFzIHRoaXMgaGFwcGVucyBtYWlubHkgd2hlbiBzY2FsaW5nIGZyb20gbm90aW9uYWwgdW5pdHMgdG8gICAgICAgICAqLworICAvKiAgICBmcmFjdGlvbmFsIHBpeGVscyBpbiBGcmVlVHlwZSwgaXQgcmVzdWx0ZWQgaW4gbm90aWNlYWJsZSBzcGVlZCAgICAgKi8KKyAgLyogICAgaW1wcm92ZW1lbnRzIGJldHdlZW4gdmVyc2lvbnMgMi54IGFuZCAxLnguICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBcyBhIGNvbmNsdXNpb24sIGFsd2F5cyB0cnkgdG8gcGxhY2UgYSAxNi4xNiBmYWN0b3IgYXMgdGhlICAgICAgICAgKi8KKyAgLyogICAgX3NlY29uZF8gYXJndW1lbnQgb2YgdGhpcyBmdW5jdGlvbjsgdGhpcyBjYW4gbWFrZSBhIGdyZWF0ICAgICAgICAgICovCisgIC8qICAgIGRpZmZlcmVuY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9Mb25nICkKKyAgRlRfTXVsRml4KCBGVF9Mb25nICBhLAorICAgICAgICAgICAgIEZUX0xvbmcgIGIgKTsKKworICAvKiAqLworI2VuZGlmCisKKyNpZmRlZiBGVF9NVUxGSVhfSU5MSU5FRAorI2RlZmluZSBGUERGQVBJX0ZUX011bEZpeCggYSwgYiApICBGVF9NVUxGSVhfSU5MSU5FRCggYSwgYiApCisjZWxzZQorICBGVF9FWFBPUlQoIEZUX0xvbmcgKQorICBGVF9NdWxGaXgoIEZUX0xvbmcgIGEsCisgICAgICAgICAgICAgRlRfTG9uZyAgYiApOworI2VuZGlmCisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9EaXZGaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHZlcnkgc2ltcGxlIGZ1bmN0aW9uIHVzZWQgdG8gcGVyZm9ybSB0aGUgY29tcHV0YXRpb24gICAgICAgICAgICAgKi8KKyAgLyogICAgYChhKjB4MTAwMDApL2InIHdpdGggbWF4aW11bSBhY2N1cmFjeS4gIE1vc3Qgb2YgdGhlIHRpbWUsIHRoaXMgaXMgICovCisgIC8qICAgIHVzZWQgdG8gZGl2aWRlIGEgZ2l2ZW4gdmFsdWUgYnkgYSAxNi4xNiBmaXhlZC1wb2ludCBmYWN0b3IuICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGEgOjogVGhlIGZpcnN0IG11bHRpcGxpZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBiIDo6IFRoZSBzZWNvbmQgbXVsdGlwbGllci4gIFVzZSBhIDE2LjE2IGZhY3RvciBoZXJlIHdoZW5ldmVyICAgICAgKi8KKyAgLyogICAgICAgICBwb3NzaWJsZSAoc2VlIG5vdGUgYmVsb3cpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHJlc3VsdCBvZiBgKGEqMHgxMDAwMCkvYicuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIG9wdGltaXphdGlvbiBmb3IgRlRfRGl2Rml4KCkgaXMgc2ltcGxlOiBJZiAoYX48PH4xNikgZml0cyBpbiAgICovCisgIC8qICAgIDMyfmJpdHMsIHRoZW4gdGhlIGRpdmlzaW9uIGlzIGNvbXB1dGVkIGRpcmVjdGx5LiAgT3RoZXJ3aXNlLCB3ZSAgICAqLworICAvKiAgICB1c2UgYSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIEBGVF9NdWxEaXYuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfTG9uZyApCisgIEZUX0RpdkZpeCggRlRfTG9uZyAgYSwKKyAgICAgICAgICAgICBGVF9Mb25nICBiICk7CisKKworICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxGdW5jdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBGVF9Sb3VuZEZpeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxEZXNjcmlwdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBBIHZlcnkgc2ltcGxlIGZ1bmN0aW9uIHVzZWQgdG8gcm91bmQgYSAxNi4xNiBmaXhlZCBudW1iZXIuICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhIDo6IFRoZSBudW1iZXIgdG8gYmUgcm91bmRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgcmVzdWx0IG9mIGAoYSArIDB4ODAwMCkgJiAtMHgxMDAwMCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRml4ZWQgKQorICBGVF9Sb3VuZEZpeCggRlRfRml4ZWQgIGEgKTsKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0NlaWxGaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEEgdmVyeSBzaW1wbGUgZnVuY3Rpb24gdXNlZCB0byBjb21wdXRlIHRoZSBjZWlsaW5nIGZ1bmN0aW9uIG9mIGEgICAqLworICAvKiAgICAxNi4xNiBmaXhlZCBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhIDo6IFRoZSBudW1iZXIgZm9yIHdoaWNoIHRoZSBjZWlsaW5nIGZ1bmN0aW9uIGlzIHRvIGJlIGNvbXB1dGVkLiAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxSZXR1cm4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgcmVzdWx0IG9mIGAoYSArIDB4MTAwMDAgLSAxKSAmIC0weDEwMDAwJy4gICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIEZUX0VYUE9SVCggRlRfRml4ZWQgKQorICBGVF9DZWlsRml4KCBGVF9GaXhlZCAgYSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRmxvb3JGaXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgQSB2ZXJ5IHNpbXBsZSBmdW5jdGlvbiB1c2VkIHRvIGNvbXB1dGUgdGhlIGZsb29yIGZ1bmN0aW9uIG9mIGEgICAgICovCisgIC8qICAgIDE2LjE2IGZpeGVkIG51bWJlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGEgOjogVGhlIG51bWJlciBmb3Igd2hpY2ggdGhlIGZsb29yIGZ1bmN0aW9uIGlzIHRvIGJlIGNvbXB1dGVkLiAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSByZXN1bHQgb2YgYGEgJiAtMHgxMDAwMCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9GaXhlZCApCisgIEZUX0Zsb29yRml4KCBGVF9GaXhlZCAgYSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfVmVjdG9yX1RyYW5zZm9ybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVHJhbnNmb3JtIGEgc2luZ2xlIHZlY3RvciB0aHJvdWdoIGEgMngyIG1hdHJpeC4gICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5PdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdmVjdG9yIDo6IFRoZSB0YXJnZXQgdmVjdG9yIHRvIHRyYW5zZm9ybS4gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgbWF0cml4IDo6IEEgcG9pbnRlciB0byB0aGUgc291cmNlIDJ4MiBtYXRyaXguICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgVGhlIHJlc3VsdCBpcyB1bmRlZmluZWQgaWYgZWl0aGVyIGB2ZWN0b3InIG9yIGBtYXRyaXgnIGlzIGludmFsaWQuICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIHZvaWQgKQorICBGVF9WZWN0b3JfVHJhbnNmb3JtKCBGVF9WZWN0b3IqICAgICAgICB2ZWMsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZUX01hdHJpeCogIG1hdHJpeCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2VjdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8VGl0bGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnJlZVR5cGUgVmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8QWJzdHJhY3Q+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRnVuY3Rpb25zIGFuZCBtYWNyb3MgcmVsYXRlZCB0byBGcmVlVHlwZSB2ZXJzaW9ucy4gICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgTm90ZSB0aGF0IHRob3NlIGZ1bmN0aW9ucyBhbmQgbWFjcm9zIGFyZSBvZiBsaW1pdGVkIHVzZSBiZWNhdXNlICAgICovCisgIC8qICAgIGV2ZW4gYSBuZXcgcmVsZWFzZSBvZiBGcmVlVHlwZSB3aXRoIG9ubHkgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzICAgICAqLworICAvKiAgICBpbmNyZWFzZXMgdGhlIHZlcnNpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICoKKyAgICogQGVudW06CisgICAqICAgRlJFRVRZUEVfWFhYCisgICAqCisgICAqIEBkZXNjcmlwdGlvbjoKKyAgICogICBUaGVzZSB0aHJlZSBtYWNyb3MgaWRlbnRpZnkgdGhlIEZyZWVUeXBlIHNvdXJjZSBjb2RlIHZlcnNpb24uCisgICAqICAgVXNlIEBGVF9MaWJyYXJ5X1ZlcnNpb24gdG8gYWNjZXNzIHRoZW0gYXQgcnVudGltZS4KKyAgICoKKyAgICogQHZhbHVlczoKKyAgICogICBGUkVFVFlQRV9NQUpPUiA6OiBUaGUgbWFqb3IgdmVyc2lvbiBudW1iZXIuCisgICAqICAgRlJFRVRZUEVfTUlOT1IgOjogVGhlIG1pbm9yIHZlcnNpb24gbnVtYmVyLgorICAgKiAgIEZSRUVUWVBFX1BBVENIIDo6IFRoZSBwYXRjaCBsZXZlbC4KKyAgICoKKyAgICogQG5vdGU6CisgICAqICAgVGhlIHZlcnNpb24gbnVtYmVyIG9mIEZyZWVUeXBlIGlmIGJ1aWx0IGFzIGEgZHluYW1pYyBsaW5rIGxpYnJhcnkKKyAgICogICB3aXRoIHRoZSBgbGlidG9vbCcgcGFja2FnZSBpcyBfbm90XyBjb250cm9sbGVkIGJ5IHRoZXNlIHRocmVlCisgICAqICAgbWFjcm9zLgorICAgKgorICAgKi8KKyNkZWZpbmUgRlJFRVRZUEVfTUFKT1IgIDIKKyNkZWZpbmUgRlJFRVRZUEVfTUlOT1IgIDUKKyNkZWZpbmUgRlJFRVRZUEVfUEFUQ0ggIDAKKworCisgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPEZ1bmN0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIEZUX0xpYnJhcnlfVmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPERlc2NyaXB0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFJldHVybiB0aGUgdmVyc2lvbiBvZiB0aGUgRnJlZVR5cGUgbGlicmFyeSBiZWluZyB1c2VkLiAgVGhpcyBpcyAgICAqLworICAvKiAgICB1c2VmdWwgd2hlbiBkeW5hbWljYWxseSBsaW5raW5nIHRvIHRoZSBsaWJyYXJ5LCBzaW5jZSBvbmUgY2Fubm90ICAgKi8KKyAgLyogICAgdXNlIHRoZSBtYWNyb3MgQEZSRUVUWVBFX01BSk9SLCBARlJFRVRZUEVfTUlOT1IsIGFuZCAgICAgICAgICAgICAgICovCisgIC8qICAgIEBGUkVFVFlQRV9QQVRDSC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPElucHV0PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGxpYnJhcnkgOjogQSBzb3VyY2UgbGlicmFyeSBoYW5kbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE91dHB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIGFtYWpvciAgOjogVGhlIG1ham9yIHZlcnNpb24gbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgYW1pbm9yICA6OiBUaGUgbWlub3IgdmVyc2lvbiBudW1iZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBhcGF0Y2ggIDo6IFRoZSBwYXRjaCB2ZXJzaW9uIG51bWJlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxOb3RlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBUaGUgcmVhc29uIHdoeSB0aGlzIGZ1bmN0aW9uIHRha2VzIGEgYGxpYnJhcnknIGFyZ3VtZW50IGlzIGJlY2F1c2UgKi8KKyAgLyogICAgY2VydGFpbiBwcm9ncmFtcyBpbXBsZW1lbnQgbGlicmFyeSBpbml0aWFsaXphdGlvbiBpbiBhIGN1c3RvbSB3YXkgICovCisgIC8qICAgIHRoYXQgZG9lc24ndCB1c2UgQEZUX0luaXRfRnJlZVR5cGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgSW4gc3VjaCBjYXNlcywgdGhlIGxpYnJhcnkgdmVyc2lvbiBtaWdodCBub3QgYmUgYXZhaWxhYmxlIGJlZm9yZSAgICovCisgIC8qICAgIHRoZSBsaWJyYXJ5IG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCB2b2lkICkKKyAgRlRfTGlicmFyeV9WZXJzaW9uKCBGVF9MaWJyYXJ5ICAgbGlicmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICBGVF9JbnQgICAgICAqYW1ham9yLAorICAgICAgICAgICAgICAgICAgICAgIEZUX0ludCAgICAgICphbWlub3IsCisgICAgICAgICAgICAgICAgICAgICAgRlRfSW50ICAgICAgKmFwYXRjaCApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRmFjZV9DaGVja1RydWVUeXBlUGF0ZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgUGFyc2UgYWxsIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBvZiBhIFRydWVUeXBlIGZvbnQgZmlsZSB0byBjaGVjayAgICovCisgIC8qICAgIHdoZXRoZXIgYW55IG9mIHRoZSBwYXRlbnRlZCBvcGNvZGVzIGFyZSB1c2VkLiAgVGhpcyBpcyBvbmx5IHVzZWZ1bCAqLworICAvKiAgICBpZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSB0aGUgdW5wYXRlbnRlZCBoaW50ZXIgd2l0aCAgICAgICAgICAgKi8KKyAgLyogICAgZm9udHMgdGhhdCBkbyAqbm90KiB1c2UgdGhlc2Ugb3Bjb2Rlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBwYXJzZXMgKmFsbCogZ2x5cGggaW5zdHJ1Y3Rpb25zIGluIHRoZSAgICAgKi8KKyAgLyogICAgZm9udCBmaWxlLCB3aGljaCBtYXkgYmUgc2xvdy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8SW5wdXQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgZmFjZSA6OiBBIGZhY2UgaGFuZGxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8UmV0dXJuPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgMX5pZiB0aGlzIGlzIGEgVHJ1ZVR5cGUgZm9udCB0aGF0IHVzZXMgb25lIG9mIHRoZSBwYXRlbnRlZCAgICAgICAgICovCisgIC8qICAgIG9wY29kZXMsIDB+b3RoZXJ3aXNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPE5vdGU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFNpbmNlIE1heSAyMDEwLCBUcnVlVHlwZSBoaW50aW5nIGlzIG5vIGxvbmdlciBwYXRlbnRlZC4gICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFNpbmNlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIDIuMy41ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgRlRfRVhQT1JUKCBGVF9Cb29sICkKKyAgRlRfRmFjZV9DaGVja1RydWVUeXBlUGF0ZW50cyggRlRfRmFjZSAgZmFjZSApOworCisKKyAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RnVuY3Rpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRlRfRmFjZV9TZXRVbnBhdGVudGVkSGludGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8RGVzY3JpcHRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgRW5hYmxlIG9yIGRpc2FibGUgdGhlIHVucGF0ZW50ZWQgaGludGVyIGZvciBhIGdpdmVuIGZhY2UuICAgICAgICAgICovCisgIC8qICAgIE9ubHkgZW5hYmxlIGl0IGlmIHlvdSBoYXZlIGRldGVybWluZWQgdGhhdCB0aGUgZmFjZSBkb2Vzbid0ICAgICAgICAqLworICAvKiAgICB1c2UgYW55IHBhdGVudGVkIG9wY29kZXMgKHNlZSBARlRfRmFjZV9DaGVja1RydWVUeXBlUGF0ZW50cykuICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIDxJbnB1dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICBmYWNlICA6OiBBIGZhY2UgaGFuZGxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIHZhbHVlIDo6IE5ldyBib29sZWFuIHNldHRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogPFJldHVybj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgIFRoZSBvbGQgc2V0dGluZyB2YWx1ZS4gIFRoaXMgd2lsbCBhbHdheXMgYmUgZmFsc2UgaWYgdGhpcyBpcyBub3QgICAqLworICAvKiAgICBhbiBTRk5UIGZvbnQsIG9yIGlmIHRoZSB1bnBhdGVudGVkIGhpbnRlciBpcyBub3QgY29tcGlsZWQgaW4gdGhpcyAgKi8KKyAgLyogICAgaW5zdGFuY2Ugb2YgdGhlIGxpYnJhcnkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8Tm90ZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgU2luY2UgTWF5IDIwMTAsIFRydWVUeXBlIGhpbnRpbmcgaXMgbm8gbG9uZ2VyIHBhdGVudGVkLiAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiA8U2luY2U+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogICAgMi4zLjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICBGVF9FWFBPUlQoIEZUX0Jvb2wgKQorICBGVF9GYWNlX1NldFVucGF0ZW50ZWRIaW50aW5nKCBGVF9GYWNlICBmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVF9Cb29sICB2YWx1ZSApOworCisgIC8qICovCisKKworRlRfRU5EX0hFQURFUgorCisjZW5kaWYgLyogX19GUkVFVFlQRV9IX18gKi8KKworCisvKiBFTkQgKi8KZGlmZiAtLWdpdCBhL2NvcmUvaW5jbHVkZS90aGlyZHBhcnRpZXMvZnJlZXR5cGUvZnJlZXR5cGUvZnRzeXN0ZW0uaCBiL2NvcmUvaW5jbHVkZS90aGlyZHBhcnRpZXMvZnJlZXR5cGUvZnJlZXR5cGUvZnRzeXN0ZW0uaAppbmRleCA2YjQxMzIwLi4xZTkyMzkwIDEwMDY0NAotLS0gYS9jb3JlL2luY2x1ZGUvdGhpcmRwYXJ0aWVzL2ZyZWV0eXBlL2ZyZWV0eXBlL2Z0c3lzdGVtLmgKKysrIGIvY29yZS9pbmNsdWRlL3RoaXJkcGFydGllcy9mcmVldHlwZS9mcmVldHlwZS9mdHN5c3RlbS5oCkBAIC04OSwxMCArODksMTAgQEAKICAgKCpGVF9BbGxvY19GdW5jKSggRlRfTWVtb3J5ICBtZW1vcnksCiAgICAgICAgICAgICAgICAgICAgIGxvbmcgICAgICAgc2l6ZSApOwogCi0gIC8qIFN1bmxpYW5nLkxpdSAyMDEwMDkxNSBzeW5jIDIyMSdzIHJldmlzb24uICovDQotICB0eXBlZGVmIHZvaWQqDQotCSAgKCpGVF9BbGxvY0RlYnVnX0Z1bmMpKCBGVF9NZW1vcnkgIG1lbW9yeSwNCi0JICBsb25nICAgICAgIHNpemUsIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCAgaW50IGxpbmUpOw0KKyAgLyogU3VubGlhbmcuTGl1IDIwMTAwOTE1IHN5bmMgMjIxJ3MgcmV2aXNvbi4gKi8KKyAgdHlwZWRlZiB2b2lkKgorCSAgKCpGVF9BbGxvY0RlYnVnX0Z1bmMpKCBGVF9NZW1vcnkgIG1lbW9yeSwKKwkgIGxvbmcgICAgICAgc2l6ZSwgY29uc3QgY2hhciogZmlsZW5hbWUsICBpbnQgbGluZSk7CiAKIAogCmRpZmYgLS1naXQgYS9jb3JlL2luY2x1ZGUvdGhpcmRwYXJ0aWVzL2ZyZWV0eXBlL2ZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5LmggYi9jb3JlL2luY2x1ZGUvdGhpcmRwYXJ0aWVzL2ZyZWV0eXBlL2ZyZWV0eXBlL2ludGVybmFsL2Z0bWVtb3J5LmgKaW5kZXggNjdjYmY0My4uNDMyYTliYSAxMDA2NDQKLS0tIGEvY29yZS9pbmNsdWRlL3RoaXJkcGFydGllcy9mcmVldHlwZS9mcmVldHlwZS9pbnRlcm5hbC9mdG1lbW9yeS5oCisrKyBiL2NvcmUvaW5jbHVkZS90aGlyZHBhcnRpZXMvZnJlZXR5cGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRtZW1vcnkuaApAQCAtMTM1LDM3ICsxMzUsMzcgQEAKICAgICAgICAgICAgICAgICAgICBGVF9Mb25nICAgIG5ld19jb3VudCwKICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgIGJsb2NrLAogICAgICAgICAgICAgICAgICAgIEZUX0Vycm9yICAqcF9lcnJvciApOwotI2lmZGVmIF9ERUJVRw0KLS8vI2RlZmluZSBfWFlRX01FTV9ERUJVRw0KLSNlbmRpZg0KLSAgDQotI2lmZGVmIF9YWVFfTUVNX0RFQlVHCQkvKiBYWVEgKi8NCi0gIEZUX0JBU0UoIEZUX1BvaW50ZXIgKQ0KLQkgIGZ0X21lbV9hbGxvY2RlYnVnKCBGVF9NZW1vcnkgIG1lbW9yeSwNCi0JICBGVF9Mb25nICAgIHNpemUsIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZSwNCi0JICBGVF9FcnJvciAgKnBfZXJyb3IgKTsNCi0gIA0KLSAgRlRfQkFTRSggRlRfUG9pbnRlciApDQotCSAgZnRfbWVtX3FhbGxvY2RlYnVnKCBGVF9NZW1vcnkgIG1lbW9yeSwNCi0JICBGVF9Mb25nICAgIHNpemUsIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZSwNCi0JICBGVF9FcnJvciAgKnBfZXJyb3IgKTsNCi0gIA0KLSAgRlRfQkFTRSggRlRfUG9pbnRlciApDQotCSAgZnRfbWVtX3JlYWxsb2NkZWJ1ZyggRlRfTWVtb3J5ICBtZW1vcnksDQotCSAgRlRfTG9uZyAgICBpdGVtX3NpemUsDQotCSAgRlRfTG9uZyAgICBjdXJfY291bnQsDQotCSAgRlRfTG9uZyAgICBuZXdfY291bnQsDQotCSAgdm9pZCogICAgICBibG9jaywgY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBsaW5lLA0KLQkgIEZUX0Vycm9yICAqcF9lcnJvciApOw0KLSAgDQotICBGVF9CQVNFKCBGVF9Qb2ludGVyICkNCi0JICBmdF9tZW1fcXJlYWxsb2NkZWJ1ZyggRlRfTWVtb3J5ICBtZW1vcnksDQotCSAgRlRfTG9uZyAgICBpdGVtX3NpemUsDQotCSAgRlRfTG9uZyAgICBjdXJfY291bnQsDQotCSAgRlRfTG9uZyAgICBuZXdfY291bnQsDQotCSAgdm9pZCogICAgICBibG9jaywgY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBsaW5lLA0KLQkgIEZUX0Vycm9yICAqcF9lcnJvciApOw0KLSNlbmRpZg0KKyNpZmRlZiBfREVCVUcKKy8vI2RlZmluZSBfWFlRX01FTV9ERUJVRworI2VuZGlmCisgIAorI2lmZGVmIF9YWVFfTUVNX0RFQlVHCQkvKiBYWVEgKi8KKyAgRlRfQkFTRSggRlRfUG9pbnRlciApCisJICBmdF9tZW1fYWxsb2NkZWJ1ZyggRlRfTWVtb3J5ICBtZW1vcnksCisJICBGVF9Mb25nICAgIHNpemUsIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZSwKKwkgIEZUX0Vycm9yICAqcF9lcnJvciApOworICAKKyAgRlRfQkFTRSggRlRfUG9pbnRlciApCisJICBmdF9tZW1fcWFsbG9jZGVidWcoIEZUX01lbW9yeSAgbWVtb3J5LAorCSAgRlRfTG9uZyAgICBzaXplLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGxpbmUsCisJICBGVF9FcnJvciAgKnBfZXJyb3IgKTsKKyAgCisgIEZUX0JBU0UoIEZUX1BvaW50ZXIgKQorCSAgZnRfbWVtX3JlYWxsb2NkZWJ1ZyggRlRfTWVtb3J5ICBtZW1vcnksCisJICBGVF9Mb25nICAgIGl0ZW1fc2l6ZSwKKwkgIEZUX0xvbmcgICAgY3VyX2NvdW50LAorCSAgRlRfTG9uZyAgICBuZXdfY291bnQsCisJICB2b2lkKiAgICAgIGJsb2NrLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGxpbmUsCisJICBGVF9FcnJvciAgKnBfZXJyb3IgKTsKKyAgCisgIEZUX0JBU0UoIEZUX1BvaW50ZXIgKQorCSAgZnRfbWVtX3FyZWFsbG9jZGVidWcoIEZUX01lbW9yeSAgbWVtb3J5LAorCSAgRlRfTG9uZyAgICBpdGVtX3NpemUsCisJICBGVF9Mb25nICAgIGN1cl9jb3VudCwKKwkgIEZUX0xvbmcgICAgbmV3X2NvdW50LAorCSAgdm9pZCogICAgICBibG9jaywgY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBsaW5lLAorCSAgRlRfRXJyb3IgICpwX2Vycm9yICk7CisjZW5kaWYKIAogCiAgIEZUX0JBU0UoIHZvaWQgKQpAQCAtMTc4LDggKzE3OCw4IEBACiAgICAgICAgICAgICBmdF9tZW1fZnJlZSggbWVtb3J5LCAocHRyKSApOyBcCiAgICAgICAgICAgICAocHRyKSA9IE5VTEw7ICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgRlRfRU5EX1NUTU5UCi0jaWZuZGVmIF9YWVFfTUVNX0RFQlVHDQotI2RlZmluZSBGVF9NRU1fQUxMT0MoIHB0ciwgc2l6ZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQorI2lmbmRlZiBfWFlRX01FTV9ERUJVRworI2RlZmluZSBGVF9NRU1fQUxMT0MoIHB0ciwgc2l6ZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJCSAgRlRfQVNTSUdOUF9JTk5FUiggcHRyLCBmdF9tZW1fYWxsb2MoIG1lbW9yeSwgKHNpemUpLCAmZXJyb3IgKSApCiAKIApAQCAtMjM1LDk0ICsyMzUsOTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZUX0xvbmcpKG5ld2NudCksIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHB0ciksICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yICkgKQotI2RlZmluZSBGVF9NRU1fTkVXX0FSUkFZKCBwdHIsIGNvdW50ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgRlRfQVNTSUdOUF9JTk5FUiggcHRyLCBmdF9tZW1fcmVhbGxvYyggbWVtb3J5LCBzaXplb2YgKCAqKHB0cikgKSwgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAoY291bnQpLCAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICZlcnJvciApICkNCi0NCi0jZGVmaW5lIEZUX01FTV9SRU5FV19BUlJBWSggcHRyLCBjdXJzeiwgbmV3c3ogKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICBGVF9BU1NJR05QX0lOTkVSKCBwdHIsIGZ0X21lbV9yZWFsbG9jKCBtZW1vcnksIHNpemVvZiAoICoocHRyKSApLCBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJzeiksIChuZXdzeiksICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHB0ciksICZlcnJvciApICkNCi0NCi0jZGVmaW5lIEZUX01FTV9RTkVXX0FSUkFZKCBwdHIsIGNvdW50ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgRlRfQVNTSUdOUF9JTk5FUiggcHRyLCBmdF9tZW1fcXJlYWxsb2MoIG1lbW9yeSwgc2l6ZW9mICggKihwdHIpICksIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIChjb3VudCksICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICZlcnJvciApICkNCi0NCi0jZGVmaW5lIEZUX01FTV9RUkVORVdfQVJSQVkoIHB0ciwgY3Vyc3osIG5ld3N6ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0JRlRfQVNTSUdOUF9JTk5FUiggcHRyLCBmdF9tZW1fcXJlYWxsb2MoIG1lbW9yeSwgc2l6ZW9mICggKihwdHIpICksIFwNCi0JKGN1cnN6KSwgKG5ld3N6KSwgICAgICAgICAgXA0KLSAgKHB0ciksICZlcnJvciApICkNCi0gIA0KLSNlbHNlDQotI2RlZmluZSBGVF9NRU1fQUxMT0MoIHB0ciwgc2l6ZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICBGVF9BU1NJR05QX0lOTkVSKCBwdHIsIGZ0X21lbV9hbGxvY2RlYnVnKCBtZW1vcnksIChzaXplKSwgX19GSUxFX18sIF9fTElORV9fLCAmZXJyb3IgKSApDQotICANCi0jZGVmaW5lIEZUX01FTV9SRUFMTE9DKCBwdHIsIGN1cnN6LCBuZXdzeiApICAgICAgICAgICAgICAgICAgICAgICAgXA0KLQlGVF9BU1NJR05QX0lOTkVSKCBwdHIsIGZ0X21lbV9yZWFsbG9jZGVidWcoIG1lbW9yeSwgMSwgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJzeiksIChuZXdzeiksICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHB0ciksIF9fRklMRV9fLCBfX0xJTkVfXywgJmVycm9yICkgKQ0KLQ0KLSNkZWZpbmUgRlRfTUVNX1FBTExPQyggcHRyLCBzaXplICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgRlRfQVNTSUdOUF9JTk5FUiggcHRyLCBmdF9tZW1fcWFsbG9jZGVidWcoIG1lbW9yeSwgKHNpemUpLCBfX0ZJTEVfXywgX19MSU5FX18sICZlcnJvciApICkNCi0NCi0jZGVmaW5lIEZUX01FTV9RUkVBTExPQyggcHRyLCBjdXJzeiwgbmV3c3ogKSAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgIEZUX0FTU0lHTlBfSU5ORVIoIHB0ciwgZnRfbWVtX3FyZWFsbG9jZGVidWcoIG1lbW9yeSwgMSwgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJzeiksIChuZXdzeiksIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdHIpLCBfX0ZJTEVfXywgX19MSU5FX18sICZlcnJvciApICkNCi0NCi0jZGVmaW5lIEZUX01FTV9BTExPQ19NVUxUKCBwdHIsIGNvdW50LCBpdGVtX3NpemUgKSAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICBGVF9BU1NJR05QX0lOTkVSKCBwdHIsIGZ0X21lbV9yZWFsbG9jZGVidWcoIG1lbW9yeSwgKGl0ZW1fc2l6ZSksIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgKGNvdW50KSwgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBfX0ZJTEVfXywgX19MSU5FX18sICZlcnJvciApICkNCi0NCi0jZGVmaW5lIEZUX01FTV9SRUFMTE9DX01VTFQoIHB0ciwgb2xkY250LCBuZXdjbnQsIGl0bXN6ICkgICAgICAgICAgICBcDQotICAgICAgICAgIEZUX0FTU0lHTlBfSU5ORVIoIHB0ciwgZnRfbWVtX3JlYWxsb2NkZWJ1ZyggbWVtb3J5LCAoaXRtc3opLCAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbGRjbnQpLCAobmV3Y250KSwgXA0KKyNkZWZpbmUgRlRfTUVNX05FV19BUlJBWSggcHRyLCBjb3VudCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfQVNTSUdOUF9JTk5FUiggcHRyLCBmdF9tZW1fcmVhbGxvYyggbWVtb3J5LCBzaXplb2YgKCAqKHB0cikgKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIChjb3VudCksICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAmZXJyb3IgKSApCisKKyNkZWZpbmUgRlRfTUVNX1JFTkVXX0FSUkFZKCBwdHIsIGN1cnN6LCBuZXdzeiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfQVNTSUdOUF9JTk5FUiggcHRyLCBmdF9tZW1fcmVhbGxvYyggbWVtb3J5LCBzaXplb2YgKCAqKHB0cikgKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJzeiksIChuZXdzeiksICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHRyKSwgJmVycm9yICkgKQorCisjZGVmaW5lIEZUX01FTV9RTkVXX0FSUkFZKCBwdHIsIGNvdW50ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9BU1NJR05QX0lOTkVSKCBwdHIsIGZ0X21lbV9xcmVhbGxvYyggbWVtb3J5LCBzaXplb2YgKCAqKHB0cikgKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAoY291bnQpLCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICZlcnJvciApICkKKworI2RlZmluZSBGVF9NRU1fUVJFTkVXX0FSUkFZKCBwdHIsIGN1cnN6LCBuZXdzeiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJRlRfQVNTSUdOUF9JTk5FUiggcHRyLCBmdF9tZW1fcXJlYWxsb2MoIG1lbW9yeSwgc2l6ZW9mICggKihwdHIpICksIFwKKwkoY3Vyc3opLCAobmV3c3opLCAgICAgICAgICBcCisgIChwdHIpLCAmZXJyb3IgKSApCisgIAorI2Vsc2UKKyNkZWZpbmUgRlRfTUVNX0FMTE9DKCBwdHIsIHNpemUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBGVF9BU1NJR05QX0lOTkVSKCBwdHIsIGZ0X21lbV9hbGxvY2RlYnVnKCBtZW1vcnksIChzaXplKSwgX19GSUxFX18sIF9fTElORV9fLCAmZXJyb3IgKSApCisgIAorI2RlZmluZSBGVF9NRU1fUkVBTExPQyggcHRyLCBjdXJzeiwgbmV3c3ogKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlGVF9BU1NJR05QX0lOTkVSKCBwdHIsIGZ0X21lbV9yZWFsbG9jZGVidWcoIG1lbW9yeSwgMSwgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnN6KSwgKG5ld3N6KSwgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdHIpLCBfX0ZJTEVfXywgX19MSU5FX18sICZlcnJvciApICkKIAotI2RlZmluZSBGVF9NRU1fUUFMTE9DX01VTFQoIHB0ciwgY291bnQsIGl0ZW1fc2l6ZSApICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgIEZUX0FTU0lHTlBfSU5ORVIoIHB0ciwgZnRfbWVtX3FyZWFsbG9jZGVidWcoIG1lbW9yeSwgKGl0ZW1fc2l6ZSksIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIChjb3VudCksICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIF9fRklMRV9fLCBfX0xJTkVfXywgJmVycm9yICkgKQ0KLQ0KLSNkZWZpbmUgRlRfTUVNX1FSRUFMTE9DX01VTFQoIHB0ciwgb2xkY250LCBuZXdjbnQsIGl0bXN6KSAgICAgICAgICAgICBcDQotICAgICAgICAgIEZUX0FTU0lHTlBfSU5ORVIoIHB0ciwgZnRfbWVtX3FyZWFsbG9jZGVidWcoIG1lbW9yeSwgKGl0bXN6KSwgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9sZGNudCksIChuZXdjbnQpLCBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHRyKSwgX19GSUxFX18sIF9fTElORV9fLCAmZXJyb3IgKSApDQotICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLSAgLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgbWFjcm9zIGV4cGVjdCB0aGF0IHRoZWlyIHBvaW50ZXIgYXJndW1lbnQgaXMgICovDQotICAvKiBfdHlwZWRfIGluIG9yZGVyIHRvIGF1dG9tYXRpY2FsbHkgY29tcHV0ZSBhcnJheSBlbGVtZW50IHNpemVzLiAgICAgICAgKi8NCi0gIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KLQ0KLSNkZWZpbmUgRlRfTUVNX05FV19BUlJBWSggcHRyLCBjb3VudCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgIEZUX0FTU0lHTlBfSU5ORVIoIHB0ciwgZnRfbWVtX3JlYWxsb2NkZWJ1ZyggbWVtb3J5LCBzaXplb2YgKCAqKHB0cikgKSwgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAoY291bnQpLCAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIF9fRklMRV9fLCBfX0xJTkVfXywgJmVycm9yICkgKQ0KLQ0KLSNkZWZpbmUgRlRfTUVNX1JFTkVXX0FSUkFZKCBwdHIsIGN1cnN6LCBuZXdzeiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgIEZUX0FTU0lHTlBfSU5ORVIoIHB0ciwgZnRfbWVtX3JlYWxsb2NkZWJ1ZyggbWVtb3J5LCBzaXplb2YgKCAqKHB0cikgKSwgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3Vyc3opLCAobmV3c3opLCAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdHIpLCBfX0ZJTEVfXywgX19MSU5FX18sICZlcnJvciApICkNCi0NCi0jZGVmaW5lIEZUX01FTV9RTkVXX0FSUkFZKCBwdHIsIGNvdW50ICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgRlRfQVNTSUdOUF9JTk5FUiggcHRyLCBmdF9tZW1fcXJlYWxsb2NkZWJ1ZyggbWVtb3J5LCBzaXplb2YgKCAqKHB0cikgKSwgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgKGNvdW50KSwgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgX19GSUxFX18sIF9fTElORV9fLCAmZXJyb3IgKSApDQotDQotI2RlZmluZSBGVF9NRU1fUVJFTkVXX0FSUkFZKCBwdHIsIGN1cnN6LCBuZXdzeiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgIEZUX0FTU0lHTlBfSU5ORVIoIHB0ciwgZnRfbWVtX3FyZWFsbG9jZGVidWcoIG1lbW9yeSwgc2l6ZW9mICggKihwdHIpICksIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJzeiksIChuZXdzeiksICAgICAgICAgIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdHIpLCBfX0ZJTEVfXywgX19MSU5FX18sICZlcnJvciApICkNCi0NCi0jZW5kaWYNCi0NCi0jZGVmaW5lIEZUX01FTV9ORVcoIHB0ciApICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICBGVF9NRU1fQUxMT0MoIHB0ciwgc2l6ZW9mICggKihwdHIpICkgKQ0KLQ0KLSNkZWZpbmUgRlRfTUVNX1FORVcoIHB0ciApICAgICAgICAgICAgICAgICAgICAgICAgXA0KKyNkZWZpbmUgRlRfTUVNX1FBTExPQyggcHRyLCBzaXplICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9BU1NJR05QX0lOTkVSKCBwdHIsIGZ0X21lbV9xYWxsb2NkZWJ1ZyggbWVtb3J5LCAoc2l6ZSksIF9fRklMRV9fLCBfX0xJTkVfXywgJmVycm9yICkgKQorCisjZGVmaW5lIEZUX01FTV9RUkVBTExPQyggcHRyLCBjdXJzeiwgbmV3c3ogKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfQVNTSUdOUF9JTk5FUiggcHRyLCBmdF9tZW1fcXJlYWxsb2NkZWJ1ZyggbWVtb3J5LCAxLCAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3Vyc3opLCAobmV3c3opLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdHIpLCBfX0ZJTEVfXywgX19MSU5FX18sICZlcnJvciApICkKKworI2RlZmluZSBGVF9NRU1fQUxMT0NfTVVMVCggcHRyLCBjb3VudCwgaXRlbV9zaXplICkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9BU1NJR05QX0lOTkVSKCBwdHIsIGZ0X21lbV9yZWFsbG9jZGVidWcoIG1lbW9yeSwgKGl0ZW1fc2l6ZSksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAoY291bnQpLCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgX19GSUxFX18sIF9fTElORV9fLCAmZXJyb3IgKSApCisKKyNkZWZpbmUgRlRfTUVNX1JFQUxMT0NfTVVMVCggcHRyLCBvbGRjbnQsIG5ld2NudCwgaXRtc3ogKSAgICAgICAgICAgIFwKKyAgICAgICAgICBGVF9BU1NJR05QX0lOTkVSKCBwdHIsIGZ0X21lbV9yZWFsbG9jZGVidWcoIG1lbW9yeSwgKGl0bXN6KSwgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbGRjbnQpLCAobmV3Y250KSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdHIpLCBfX0ZJTEVfXywgX19MSU5FX18sICZlcnJvciApICkKKworI2RlZmluZSBGVF9NRU1fUUFMTE9DX01VTFQoIHB0ciwgY291bnQsIGl0ZW1fc2l6ZSApICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfQVNTSUdOUF9JTk5FUiggcHRyLCBmdF9tZW1fcXJlYWxsb2NkZWJ1ZyggbWVtb3J5LCAoaXRlbV9zaXplKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAoY291bnQpLCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIF9fRklMRV9fLCBfX0xJTkVfXywgJmVycm9yICkgKQorCisjZGVmaW5lIEZUX01FTV9RUkVBTExPQ19NVUxUKCBwdHIsIG9sZGNudCwgbmV3Y250LCBpdG1zeikgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0FTU0lHTlBfSU5ORVIoIHB0ciwgZnRfbWVtX3FyZWFsbG9jZGVidWcoIG1lbW9yeSwgKGl0bXN6KSwgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob2xkY250KSwgKG5ld2NudCksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHB0ciksIF9fRklMRV9fLCBfX0xJTkVfXywgJmVycm9yICkgKQorICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIG1hY3JvcyBleHBlY3QgdGhhdCB0aGVpciBwb2ludGVyIGFyZ3VtZW50IGlzICAqLworICAvKiBfdHlwZWRfIGluIG9yZGVyIHRvIGF1dG9tYXRpY2FsbHkgY29tcHV0ZSBhcnJheSBlbGVtZW50IHNpemVzLiAgICAgICAgKi8KKyAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgRlRfTUVNX05FV19BUlJBWSggcHRyLCBjb3VudCApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfQVNTSUdOUF9JTk5FUiggcHRyLCBmdF9tZW1fcmVhbGxvY2RlYnVnKCBtZW1vcnksIHNpemVvZiAoICoocHRyKSApLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgKGNvdW50KSwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIF9fRklMRV9fLCBfX0xJTkVfXywgJmVycm9yICkgKQorCisjZGVmaW5lIEZUX01FTV9SRU5FV19BUlJBWSggcHRyLCBjdXJzeiwgbmV3c3ogKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0FTU0lHTlBfSU5ORVIoIHB0ciwgZnRfbWVtX3JlYWxsb2NkZWJ1ZyggbWVtb3J5LCBzaXplb2YgKCAqKHB0cikgKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJzeiksIChuZXdzeiksICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHRyKSwgX19GSUxFX18sIF9fTElORV9fLCAmZXJyb3IgKSApCisKKyNkZWZpbmUgRlRfTUVNX1FORVdfQVJSQVkoIHB0ciwgY291bnQgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIEZUX0FTU0lHTlBfSU5ORVIoIHB0ciwgZnRfbWVtX3FyZWFsbG9jZGVidWcoIG1lbW9yeSwgc2l6ZW9mICggKihwdHIpICksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgKGNvdW50KSwgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBfX0ZJTEVfXywgX19MSU5FX18sICZlcnJvciApICkKKworI2RlZmluZSBGVF9NRU1fUVJFTkVXX0FSUkFZKCBwdHIsIGN1cnN6LCBuZXdzeiApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfQVNTSUdOUF9JTk5FUiggcHRyLCBmdF9tZW1fcXJlYWxsb2NkZWJ1ZyggbWVtb3J5LCBzaXplb2YgKCAqKHB0cikgKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3Vyc3opLCAobmV3c3opLCAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdHIpLCBfX0ZJTEVfXywgX19MSU5FX18sICZlcnJvciApICkKKworI2VuZGlmCisKKyNkZWZpbmUgRlRfTUVNX05FVyggcHRyICkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgRlRfTUVNX0FMTE9DKCBwdHIsIHNpemVvZiAoICoocHRyKSApICkKKworI2RlZmluZSBGVF9NRU1fUU5FVyggcHRyICkgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgRlRfTUVNX1FBTExPQyggcHRyLCBzaXplb2YgKCAqKHB0cikgKSApCiAKICNkZWZpbmUgRlRfTUVNX1NFVF9FUlJPUiggY29uZCApICAoIChjb25kKSwgZXJyb3IgIT0gMCApCmRpZmYgLS1naXQgYS9jb3JlL2luY2x1ZGUvdGhpcmRwYXJ0aWVzL2ZyZWV0eXBlL2Z0MmJ1aWxkLmggYi9jb3JlL2luY2x1ZGUvdGhpcmRwYXJ0aWVzL2ZyZWV0eXBlL2Z0MmJ1aWxkLmgKaW5kZXggMTM0MDA3ZC4uMWZjODEyMSAxMDA2NDQKLS0tIGEvY29yZS9pbmNsdWRlL3RoaXJkcGFydGllcy9mcmVldHlwZS9mdDJidWlsZC5oCisrKyBiL2NvcmUvaW5jbHVkZS90aGlyZHBhcnRpZXMvZnJlZXR5cGUvZnQyYnVpbGQuaApAQCAtMzEsNyArMzEsNyBAQAogI2lmbmRlZiBfX0ZUMl9CVUlMRF9HRU5FUklDX0hfXwogI2RlZmluZSBfX0ZUMl9CVUlMRF9HRU5FUklDX0hfXwogCi0jaW5jbHVkZSAiZm94aXRuYW1lcy5oIg0KKyNpbmNsdWRlICJmb3hpdG5hbWVzLmgiCiAjaW5jbHVkZSAiZnJlZXR5cGUvY29uZmlnL2Z0aGVhZGVyLmgiCiAKICNlbmRpZiAvKiBfX0ZUMl9CVUlMRF9HRU5FUklDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvY29yZS9pbmNsdWRlL3RoaXJkcGFydGllcy9saWJqcGVnL2pjb25maWcuaCBiL2NvcmUvaW5jbHVkZS90aGlyZHBhcnRpZXMvbGlianBlZy9qY29uZmlnLmgKaW5kZXggMmY0ZGExNC4uN2UyOTFjNyAxMDA2NDQKLS0tIGEvY29yZS9pbmNsdWRlL3RoaXJkcGFydGllcy9saWJqcGVnL2pjb25maWcuaAorKysgYi9jb3JlL2luY2x1ZGUvdGhpcmRwYXJ0aWVzL2xpYmpwZWcvamNvbmZpZy5oCkBAIC0xLDQ1ICsxLDQ1IEBACi0vKiBqY29uZmlnLnZjIC0tLSBqY29uZmlnLmggZm9yIE1pY3Jvc29mdCBWaXN1YWwgQysrIG9uIFdpbmRvd3MgOTUgb3IgTlQuICovDQotLyogc2VlIGpjb25maWcuZG9jIGZvciBleHBsYW5hdGlvbnMgKi8NCi0NCi0jZGVmaW5lIEhBVkVfUFJPVE9UWVBFUw0KLSNkZWZpbmUgSEFWRV9VTlNJR05FRF9DSEFSDQotI2RlZmluZSBIQVZFX1VOU0lHTkVEX1NIT1JUDQotLyogI2RlZmluZSB2b2lkIGNoYXIgKi8NCi0vKiAjZGVmaW5lIGNvbnN0ICovDQotI3VuZGVmIENIQVJfSVNfVU5TSUdORUQNCi0jZGVmaW5lIEhBVkVfU1REREVGX0gNCi0jZGVmaW5lIEhBVkVfU1RETElCX0gNCi0jdW5kZWYgTkVFRF9CU0RfU1RSSU5HUw0KLSN1bmRlZiBORUVEX1NZU19UWVBFU19IDQotI3VuZGVmIE5FRURfRkFSX1BPSU5URVJTCS8qIHdlIHByZXN1bWUgYSAzMi1iaXQgZmxhdCBtZW1vcnkgbW9kZWwgKi8NCi0jdW5kZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUw0KLSN1bmRlZiBJTkNPTVBMRVRFX1RZUEVTX0JST0tFTg0KLQ0KLS8qIERlZmluZSAiYm9vbGVhbiIgYXMgdW5zaWduZWQgY2hhciwgbm90IGludCwgcGVyIFdpbmRvd3MgY3VzdG9tICovDQotI2lmbmRlZiBfX1JQQ05EUl9IX18JCS8qIGRvbid0IGNvbmZsaWN0IGlmIHJwY25kci5oIGFscmVhZHkgcmVhZCAqLw0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciBib29sZWFuOw0KLSNlbmRpZg0KLSNkZWZpbmUgSEFWRV9CT09MRUFOCQkvKiBwcmV2ZW50IGptb3JlY2ZnLmggZnJvbSByZWRlZmluaW5nIGl0ICovDQotDQotDQotI2lmZGVmIEpQRUdfSU5URVJOQUxTDQotDQotI3VuZGVmIFJJR0hUX1NISUZUX0lTX1VOU0lHTkVEDQotDQotI2VuZGlmIC8qIEpQRUdfSU5URVJOQUxTICovDQotDQotI2lmZGVmIEpQRUdfQ0pQRUdfREpQRUcNCi0NCi0jZGVmaW5lIEJNUF9TVVBQT1JURUQJCS8qIEJNUCBpbWFnZSBmaWxlIGZvcm1hdCAqLw0KLSNkZWZpbmUgR0lGX1NVUFBPUlRFRAkJLyogR0lGIGltYWdlIGZpbGUgZm9ybWF0ICovDQotI2RlZmluZSBQUE1fU1VQUE9SVEVECQkvKiBQQk1QTFVTIFBQTS9QR00gaW1hZ2UgZmlsZSBmb3JtYXQgKi8NCi0jdW5kZWYgUkxFX1NVUFBPUlRFRAkJLyogVXRhaCBSTEUgaW1hZ2UgZmlsZSBmb3JtYXQgKi8NCi0jZGVmaW5lIFRBUkdBX1NVUFBPUlRFRAkJLyogVGFyZ2EgaW1hZ2UgZmlsZSBmb3JtYXQgKi8NCi0NCi0jZGVmaW5lIFRXT19GSUxFX0NPTU1BTkRMSU5FCS8qIG9wdGlvbmFsICovDQotI2RlZmluZSBVU0VfU0VUTU9ERQkJLyogTWljcm9zb2Z0IGhhcyBzZXRtb2RlKCkgKi8NCi0jdW5kZWYgTkVFRF9TSUdOQUxfQ0FUQ0hFUg0KLSN1bmRlZiBET05UX1VTRV9CX01PREUNCi0jdW5kZWYgUFJPR1JFU1NfUkVQT1JUCQkvKiBvcHRpb25hbCAqLw0KLQ0KLSNlbmRpZiAvKiBKUEVHX0NKUEVHX0RKUEVHICovDQorLyogamNvbmZpZy52YyAtLS0gamNvbmZpZy5oIGZvciBNaWNyb3NvZnQgVmlzdWFsIEMrKyBvbiBXaW5kb3dzIDk1IG9yIE5ULiAqLworLyogc2VlIGpjb25maWcuZG9jIGZvciBleHBsYW5hdGlvbnMgKi8KKworI2RlZmluZSBIQVZFX1BST1RPVFlQRVMKKyNkZWZpbmUgSEFWRV9VTlNJR05FRF9DSEFSCisjZGVmaW5lIEhBVkVfVU5TSUdORURfU0hPUlQKKy8qICNkZWZpbmUgdm9pZCBjaGFyICovCisvKiAjZGVmaW5lIGNvbnN0ICovCisjdW5kZWYgQ0hBUl9JU19VTlNJR05FRAorI2RlZmluZSBIQVZFX1NURERFRl9ICisjZGVmaW5lIEhBVkVfU1RETElCX0gKKyN1bmRlZiBORUVEX0JTRF9TVFJJTkdTCisjdW5kZWYgTkVFRF9TWVNfVFlQRVNfSAorI3VuZGVmIE5FRURfRkFSX1BPSU5URVJTCS8qIHdlIHByZXN1bWUgYSAzMi1iaXQgZmxhdCBtZW1vcnkgbW9kZWwgKi8KKyN1bmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCisjdW5kZWYgSU5DT01QTEVURV9UWVBFU19CUk9LRU4KKworLyogRGVmaW5lICJib29sZWFuIiBhcyB1bnNpZ25lZCBjaGFyLCBub3QgaW50LCBwZXIgV2luZG93cyBjdXN0b20gKi8KKyNpZm5kZWYgX19SUENORFJfSF9fCQkvKiBkb24ndCBjb25mbGljdCBpZiBycGNuZHIuaCBhbHJlYWR5IHJlYWQgKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhciBib29sZWFuOworI2VuZGlmCisjZGVmaW5lIEhBVkVfQk9PTEVBTgkJLyogcHJldmVudCBqbW9yZWNmZy5oIGZyb20gcmVkZWZpbmluZyBpdCAqLworCisKKyNpZmRlZiBKUEVHX0lOVEVSTkFMUworCisjdW5kZWYgUklHSFRfU0hJRlRfSVNfVU5TSUdORUQKKworI2VuZGlmIC8qIEpQRUdfSU5URVJOQUxTICovCisKKyNpZmRlZiBKUEVHX0NKUEVHX0RKUEVHCisKKyNkZWZpbmUgQk1QX1NVUFBPUlRFRAkJLyogQk1QIGltYWdlIGZpbGUgZm9ybWF0ICovCisjZGVmaW5lIEdJRl9TVVBQT1JURUQJCS8qIEdJRiBpbWFnZSBmaWxlIGZvcm1hdCAqLworI2RlZmluZSBQUE1fU1VQUE9SVEVECQkvKiBQQk1QTFVTIFBQTS9QR00gaW1hZ2UgZmlsZSBmb3JtYXQgKi8KKyN1bmRlZiBSTEVfU1VQUE9SVEVECQkvKiBVdGFoIFJMRSBpbWFnZSBmaWxlIGZvcm1hdCAqLworI2RlZmluZSBUQVJHQV9TVVBQT1JURUQJCS8qIFRhcmdhIGltYWdlIGZpbGUgZm9ybWF0ICovCisKKyNkZWZpbmUgVFdPX0ZJTEVfQ09NTUFORExJTkUJLyogb3B0aW9uYWwgKi8KKyNkZWZpbmUgVVNFX1NFVE1PREUJCS8qIE1pY3Jvc29mdCBoYXMgc2V0bW9kZSgpICovCisjdW5kZWYgTkVFRF9TSUdOQUxfQ0FUQ0hFUgorI3VuZGVmIERPTlRfVVNFX0JfTU9ERQorI3VuZGVmIFBST0dSRVNTX1JFUE9SVAkJLyogb3B0aW9uYWwgKi8KKworI2VuZGlmIC8qIEpQRUdfQ0pQRUdfREpQRUcgKi8KZGlmZiAtLWdpdCBhL2NvcmUvaW5jbHVkZS90aGlyZHBhcnRpZXMvbGlianBlZy9qZXJyb3IuaCBiL2NvcmUvaW5jbHVkZS90aGlyZHBhcnRpZXMvbGlianBlZy9qZXJyb3IuaAppbmRleCBhMmI4Zjk2Li4wNmQzNDQwIDEwMDY0NAotLS0gYS9jb3JlL2luY2x1ZGUvdGhpcmRwYXJ0aWVzL2xpYmpwZWcvamVycm9yLmgKKysrIGIvY29yZS9pbmNsdWRlL3RoaXJkcGFydGllcy9saWJqcGVnL2plcnJvci5oCkBAIC0xLDI5MSArMSwyOTEgQEAKLS8qDQotICogamVycm9yLmgNCi0gKg0KLSAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk3LCBUaG9tYXMgRy4gTGFuZS4NCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLg0KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4NCi0gKg0KLSAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBlcnJvciBhbmQgbWVzc2FnZSBjb2RlcyBmb3IgdGhlIEpQRUcgbGlicmFyeS4NCi0gKiBFZGl0IHRoaXMgZmlsZSB0byBhZGQgbmV3IGNvZGVzLCBvciB0byB0cmFuc2xhdGUgdGhlIG1lc3NhZ2Ugc3RyaW5ncyB0bw0KLSAqIHNvbWUgb3RoZXIgbGFuZ3VhZ2UuDQotICogQSBzZXQgb2YgZXJyb3ItcmVwb3J0aW5nIG1hY3JvcyBhcmUgZGVmaW5lZCB0b28uICBTb21lIGFwcGxpY2F0aW9ucyB1c2luZw0KLSAqIHRoZSBKUEVHIGxpYnJhcnkgbWF5IHdpc2ggdG8gaW5jbHVkZSB0aGlzIGZpbGUgdG8gZ2V0IHRoZSBlcnJvciBjb2Rlcw0KLSAqIGFuZC9vciB0aGUgbWFjcm9zLg0KLSAqLw0KLQ0KLS8qDQotICogVG8gZGVmaW5lIHRoZSBlbnVtIGxpc3Qgb2YgbWVzc2FnZSBjb2RlcywgaW5jbHVkZSB0aGlzIGZpbGUgd2l0aG91dA0KLSAqIGRlZmluaW5nIG1hY3JvIEpNRVNTQUdFLiAgVG8gY3JlYXRlIGEgbWVzc2FnZSBzdHJpbmcgdGFibGUsIGluY2x1ZGUgaXQNCi0gKiBhZ2FpbiB3aXRoIGEgc3VpdGFibGUgSk1FU1NBR0UgZGVmaW5pdGlvbiAoc2VlIGplcnJvci5jIGZvciBhbiBleGFtcGxlKS4NCi0gKi8NCi0jaWZuZGVmIEpNRVNTQUdFDQotI2lmbmRlZiBKRVJST1JfSA0KLS8qIEZpcnN0IHRpbWUgdGhyb3VnaCwgZGVmaW5lIHRoZSBlbnVtIGxpc3QgKi8NCi0jZGVmaW5lIEpNQUtFX0VOVU1fTElTVA0KLSNlbHNlDQotLyogUmVwZWF0ZWQgaW5jbHVzaW9ucyBvZiB0aGlzIGZpbGUgYXJlIG5vLW9wcyB1bmxlc3MgSk1FU1NBR0UgaXMgZGVmaW5lZCAqLw0KLSNkZWZpbmUgSk1FU1NBR0UoY29kZSxzdHJpbmcpDQotI2VuZGlmIC8qIEpFUlJPUl9IICovDQotI2VuZGlmIC8qIEpNRVNTQUdFICovDQotDQotI2lmZGVmIEpNQUtFX0VOVU1fTElTVA0KLQ0KLXR5cGVkZWYgZW51bSB7DQotDQotI2RlZmluZSBKTUVTU0FHRShjb2RlLHN0cmluZykJY29kZSAsDQotDQotI2VuZGlmIC8qIEpNQUtFX0VOVU1fTElTVCAqLw0KLQ0KLUpNRVNTQUdFKEpNU0dfTk9NRVNTQUdFLCAiQm9ndXMgbWVzc2FnZSBjb2RlICVkIikgLyogTXVzdCBiZSBmaXJzdCBlbnRyeSEgKi8NCi0NCi0vKiBGb3IgbWFpbnRlbmFuY2UgY29udmVuaWVuY2UsIGxpc3QgaXMgYWxwaGFiZXRpY2FsIGJ5IG1lc3NhZ2UgY29kZSBuYW1lICovDQotSk1FU1NBR0UoSkVSUl9BUklUSF9OT1RJTVBMLA0KLQkgIlNvcnJ5LCB0aGVyZSBhcmUgbGVnYWwgcmVzdHJpY3Rpb25zIG9uIGFyaXRobWV0aWMgY29kaW5nIikNCi1KTUVTU0FHRShKRVJSX0JBRF9BTElHTl9UWVBFLCAiQUxJR05fVFlQRSBpcyB3cm9uZywgcGxlYXNlIGZpeCIpDQotSk1FU1NBR0UoSkVSUl9CQURfQUxMT0NfQ0hVTkssICJNQVhfQUxMT0NfQ0hVTksgaXMgd3JvbmcsIHBsZWFzZSBmaXgiKQ0KLUpNRVNTQUdFKEpFUlJfQkFEX0JVRkZFUl9NT0RFLCAiQm9ndXMgYnVmZmVyIGNvbnRyb2wgbW9kZSIpDQotSk1FU1NBR0UoSkVSUl9CQURfQ09NUE9ORU5UX0lELCAiSW52YWxpZCBjb21wb25lbnQgSUQgJWQgaW4gU09TIikNCi1KTUVTU0FHRShKRVJSX0JBRF9EQ1RfQ09FRiwgIkRDVCBjb2VmZmljaWVudCBvdXQgb2YgcmFuZ2UiKQ0KLUpNRVNTQUdFKEpFUlJfQkFEX0RDVFNJWkUsICJJRENUIG91dHB1dCBibG9jayBzaXplICVkIG5vdCBzdXBwb3J0ZWQiKQ0KLUpNRVNTQUdFKEpFUlJfQkFEX0hVRkZfVEFCTEUsICJCb2d1cyBIdWZmbWFuIHRhYmxlIGRlZmluaXRpb24iKQ0KLUpNRVNTQUdFKEpFUlJfQkFEX0lOX0NPTE9SU1BBQ0UsICJCb2d1cyBpbnB1dCBjb2xvcnNwYWNlIikNCi1KTUVTU0FHRShKRVJSX0JBRF9KX0NPTE9SU1BBQ0UsICJCb2d1cyBKUEVHIGNvbG9yc3BhY2UiKQ0KLUpNRVNTQUdFKEpFUlJfQkFEX0xFTkdUSCwgIkJvZ3VzIG1hcmtlciBsZW5ndGgiKQ0KLUpNRVNTQUdFKEpFUlJfQkFEX0xJQl9WRVJTSU9OLA0KLQkgIldyb25nIEpQRUcgbGlicmFyeSB2ZXJzaW9uOiBsaWJyYXJ5IGlzICVkLCBjYWxsZXIgZXhwZWN0cyAlZCIpDQotSk1FU1NBR0UoSkVSUl9CQURfTUNVX1NJWkUsICJTYW1wbGluZyBmYWN0b3JzIHRvbyBsYXJnZSBmb3IgaW50ZXJsZWF2ZWQgc2NhbiIpDQotSk1FU1NBR0UoSkVSUl9CQURfUE9PTF9JRCwgIkludmFsaWQgbWVtb3J5IHBvb2wgY29kZSAlZCIpDQotSk1FU1NBR0UoSkVSUl9CQURfUFJFQ0lTSU9OLCAiVW5zdXBwb3J0ZWQgSlBFRyBkYXRhIHByZWNpc2lvbiAlZCIpDQotSk1FU1NBR0UoSkVSUl9CQURfUFJPR1JFU1NJT04sDQotCSAiSW52YWxpZCBwcm9ncmVzc2l2ZSBwYXJhbWV0ZXJzIFNzPSVkIFNlPSVkIEFoPSVkIEFsPSVkIikNCi1KTUVTU0FHRShKRVJSX0JBRF9QUk9HX1NDUklQVCwNCi0JICJJbnZhbGlkIHByb2dyZXNzaXZlIHBhcmFtZXRlcnMgYXQgc2NhbiBzY3JpcHQgZW50cnkgJWQiKQ0KLUpNRVNTQUdFKEpFUlJfQkFEX1NBTVBMSU5HLCAiQm9ndXMgc2FtcGxpbmcgZmFjdG9ycyIpDQotSk1FU1NBR0UoSkVSUl9CQURfU0NBTl9TQ1JJUFQsICJJbnZhbGlkIHNjYW4gc2NyaXB0IGF0IGVudHJ5ICVkIikNCi1KTUVTU0FHRShKRVJSX0JBRF9TVEFURSwgIkltcHJvcGVyIGNhbGwgdG8gSlBFRyBsaWJyYXJ5IGluIHN0YXRlICVkIikNCi1KTUVTU0FHRShKRVJSX0JBRF9TVFJVQ1RfU0laRSwNCi0JICJKUEVHIHBhcmFtZXRlciBzdHJ1Y3QgbWlzbWF0Y2g6IGxpYnJhcnkgdGhpbmtzIHNpemUgaXMgJXUsIGNhbGxlciBleHBlY3RzICV1IikNCi1KTUVTU0FHRShKRVJSX0JBRF9WSVJUVUFMX0FDQ0VTUywgIkJvZ3VzIHZpcnR1YWwgYXJyYXkgYWNjZXNzIikNCi1KTUVTU0FHRShKRVJSX0JVRkZFUl9TSVpFLCAiQnVmZmVyIHBhc3NlZCB0byBKUEVHIGxpYnJhcnkgaXMgdG9vIHNtYWxsIikNCi1KTUVTU0FHRShKRVJSX0NBTlRfU1VTUEVORCwgIlN1c3BlbnNpb24gbm90IGFsbG93ZWQgaGVyZSIpDQotSk1FU1NBR0UoSkVSUl9DQ0lSNjAxX05PVElNUEwsICJDQ0lSNjAxIHNhbXBsaW5nIG5vdCBpbXBsZW1lbnRlZCB5ZXQiKQ0KLUpNRVNTQUdFKEpFUlJfQ09NUE9ORU5UX0NPVU5ULCAiVG9vIG1hbnkgY29sb3IgY29tcG9uZW50czogJWQsIG1heCAlZCIpDQotSk1FU1NBR0UoSkVSUl9DT05WRVJTSU9OX05PVElNUEwsICJVbnN1cHBvcnRlZCBjb2xvciBjb252ZXJzaW9uIHJlcXVlc3QiKQ0KLUpNRVNTQUdFKEpFUlJfREFDX0lOREVYLCAiQm9ndXMgREFDIGluZGV4ICVkIikNCi1KTUVTU0FHRShKRVJSX0RBQ19WQUxVRSwgIkJvZ3VzIERBQyB2YWx1ZSAweCV4IikNCi1KTUVTU0FHRShKRVJSX0RIVF9JTkRFWCwgIkJvZ3VzIERIVCBpbmRleCAlZCIpDQotSk1FU1NBR0UoSkVSUl9EUVRfSU5ERVgsICJCb2d1cyBEUVQgaW5kZXggJWQiKQ0KLUpNRVNTQUdFKEpFUlJfRU1QVFlfSU1BR0UsICJFbXB0eSBKUEVHIGltYWdlIChETkwgbm90IHN1cHBvcnRlZCkiKQ0KLUpNRVNTQUdFKEpFUlJfRU1TX1JFQUQsICJSZWFkIGZyb20gRU1TIGZhaWxlZCIpDQotSk1FU1NBR0UoSkVSUl9FTVNfV1JJVEUsICJXcml0ZSB0byBFTVMgZmFpbGVkIikNCi1KTUVTU0FHRShKRVJSX0VPSV9FWFBFQ1RFRCwgIkRpZG4ndCBleHBlY3QgbW9yZSB0aGFuIG9uZSBzY2FuIikNCi1KTUVTU0FHRShKRVJSX0ZJTEVfUkVBRCwgIklucHV0IGZpbGUgcmVhZCBlcnJvciIpDQotSk1FU1NBR0UoSkVSUl9GSUxFX1dSSVRFLCAiT3V0cHV0IGZpbGUgd3JpdGUgZXJyb3IgLS0tIG91dCBvZiBkaXNrIHNwYWNlPyIpDQotSk1FU1NBR0UoSkVSUl9GUkFDVF9TQU1QTEVfTk9USU1QTCwgIkZyYWN0aW9uYWwgc2FtcGxpbmcgbm90IGltcGxlbWVudGVkIHlldCIpDQotSk1FU1NBR0UoSkVSUl9IVUZGX0NMRU5fT1ZFUkZMT1csICJIdWZmbWFuIGNvZGUgc2l6ZSB0YWJsZSBvdmVyZmxvdyIpDQotSk1FU1NBR0UoSkVSUl9IVUZGX01JU1NJTkdfQ09ERSwgIk1pc3NpbmcgSHVmZm1hbiBjb2RlIHRhYmxlIGVudHJ5IikNCi1KTUVTU0FHRShKRVJSX0lNQUdFX1RPT19CSUcsICJNYXhpbXVtIHN1cHBvcnRlZCBpbWFnZSBkaW1lbnNpb24gaXMgJXUgcGl4ZWxzIikNCi1KTUVTU0FHRShKRVJSX0lOUFVUX0VNUFRZLCAiRW1wdHkgaW5wdXQgZmlsZSIpDQotSk1FU1NBR0UoSkVSUl9JTlBVVF9FT0YsICJQcmVtYXR1cmUgZW5kIG9mIGlucHV0IGZpbGUiKQ0KLUpNRVNTQUdFKEpFUlJfTUlTTUFUQ0hFRF9RVUFOVF9UQUJMRSwNCi0JICJDYW5ub3QgdHJhbnNjb2RlIGR1ZSB0byBtdWx0aXBsZSB1c2Ugb2YgcXVhbnRpemF0aW9uIHRhYmxlICVkIikNCi1KTUVTU0FHRShKRVJSX01JU1NJTkdfREFUQSwgIlNjYW4gc2NyaXB0IGRvZXMgbm90IHRyYW5zbWl0IGFsbCBkYXRhIikNCi1KTUVTU0FHRShKRVJSX01PREVfQ0hBTkdFLCAiSW52YWxpZCBjb2xvciBxdWFudGl6YXRpb24gbW9kZSBjaGFuZ2UiKQ0KLUpNRVNTQUdFKEpFUlJfTk9USU1QTCwgIk5vdCBpbXBsZW1lbnRlZCB5ZXQiKQ0KLUpNRVNTQUdFKEpFUlJfTk9UX0NPTVBJTEVELCAiUmVxdWVzdGVkIGZlYXR1cmUgd2FzIG9taXR0ZWQgYXQgY29tcGlsZSB0aW1lIikNCi1KTUVTU0FHRShKRVJSX05PX0JBQ0tJTkdfU1RPUkUsICJCYWNraW5nIHN0b3JlIG5vdCBzdXBwb3J0ZWQiKQ0KLUpNRVNTQUdFKEpFUlJfTk9fSFVGRl9UQUJMRSwgIkh1ZmZtYW4gdGFibGUgMHglMDJ4IHdhcyBub3QgZGVmaW5lZCIpDQotSk1FU1NBR0UoSkVSUl9OT19JTUFHRSwgIkpQRUcgZGF0YXN0cmVhbSBjb250YWlucyBubyBpbWFnZSIpDQotSk1FU1NBR0UoSkVSUl9OT19RVUFOVF9UQUJMRSwgIlF1YW50aXphdGlvbiB0YWJsZSAweCUwMnggd2FzIG5vdCBkZWZpbmVkIikNCi1KTUVTU0FHRShKRVJSX05PX1NPSSwgIk5vdCBhIEpQRUcgZmlsZTogc3RhcnRzIHdpdGggMHglMDJ4IDB4JTAyeCIpDQotSk1FU1NBR0UoSkVSUl9PVVRfT0ZfTUVNT1JZLCAiSW5zdWZmaWNpZW50IG1lbW9yeSAoY2FzZSAlZCkiKQ0KLUpNRVNTQUdFKEpFUlJfUVVBTlRfQ09NUE9ORU5UUywNCi0JICJDYW5ub3QgcXVhbnRpemUgbW9yZSB0aGFuICVkIGNvbG9yIGNvbXBvbmVudHMiKQ0KLUpNRVNTQUdFKEpFUlJfUVVBTlRfRkVXX0NPTE9SUywgIkNhbm5vdCBxdWFudGl6ZSB0byBmZXdlciB0aGFuICVkIGNvbG9ycyIpDQotSk1FU1NBR0UoSkVSUl9RVUFOVF9NQU5ZX0NPTE9SUywgIkNhbm5vdCBxdWFudGl6ZSB0byBtb3JlIHRoYW4gJWQgY29sb3JzIikNCi1KTUVTU0FHRShKRVJSX1NPRl9EVVBMSUNBVEUsICJJbnZhbGlkIEpQRUcgZmlsZSBzdHJ1Y3R1cmU6IHR3byBTT0YgbWFya2VycyIpDQotSk1FU1NBR0UoSkVSUl9TT0ZfTk9fU09TLCAiSW52YWxpZCBKUEVHIGZpbGUgc3RydWN0dXJlOiBtaXNzaW5nIFNPUyBtYXJrZXIiKQ0KLUpNRVNTQUdFKEpFUlJfU09GX1VOU1VQUE9SVEVELCAiVW5zdXBwb3J0ZWQgSlBFRyBwcm9jZXNzOiBTT0YgdHlwZSAweCUwMngiKQ0KLUpNRVNTQUdFKEpFUlJfU09JX0RVUExJQ0FURSwgIkludmFsaWQgSlBFRyBmaWxlIHN0cnVjdHVyZTogdHdvIFNPSSBtYXJrZXJzIikNCi1KTUVTU0FHRShKRVJSX1NPU19OT19TT0YsICJJbnZhbGlkIEpQRUcgZmlsZSBzdHJ1Y3R1cmU6IFNPUyBiZWZvcmUgU09GIikNCi1KTUVTU0FHRShKRVJSX1RGSUxFX0NSRUFURSwgIkZhaWxlZCB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgJXMiKQ0KLUpNRVNTQUdFKEpFUlJfVEZJTEVfUkVBRCwgIlJlYWQgZmFpbGVkIG9uIHRlbXBvcmFyeSBmaWxlIikNCi1KTUVTU0FHRShKRVJSX1RGSUxFX1NFRUssICJTZWVrIGZhaWxlZCBvbiB0ZW1wb3JhcnkgZmlsZSIpDQotSk1FU1NBR0UoSkVSUl9URklMRV9XUklURSwNCi0JICJXcml0ZSBmYWlsZWQgb24gdGVtcG9yYXJ5IGZpbGUgLS0tIG91dCBvZiBkaXNrIHNwYWNlPyIpDQotSk1FU1NBR0UoSkVSUl9UT09fTElUVExFX0RBVEEsICJBcHBsaWNhdGlvbiB0cmFuc2ZlcnJlZCB0b28gZmV3IHNjYW5saW5lcyIpDQotSk1FU1NBR0UoSkVSUl9VTktOT1dOX01BUktFUiwgIlVuc3VwcG9ydGVkIG1hcmtlciB0eXBlIDB4JTAyeCIpDQotSk1FU1NBR0UoSkVSUl9WSVJUVUFMX0JVRywgIlZpcnR1YWwgYXJyYXkgY29udHJvbGxlciBtZXNzZWQgdXAiKQ0KLUpNRVNTQUdFKEpFUlJfV0lEVEhfT1ZFUkZMT1csICJJbWFnZSB0b28gd2lkZSBmb3IgdGhpcyBpbXBsZW1lbnRhdGlvbiIpDQotSk1FU1NBR0UoSkVSUl9YTVNfUkVBRCwgIlJlYWQgZnJvbSBYTVMgZmFpbGVkIikNCi1KTUVTU0FHRShKRVJSX1hNU19XUklURSwgIldyaXRlIHRvIFhNUyBmYWlsZWQiKQ0KLUpNRVNTQUdFKEpNU0dfQ09QWVJJR0hULCBKQ09QWVJJR0hUKQ0KLUpNRVNTQUdFKEpNU0dfVkVSU0lPTiwgSlZFUlNJT04pDQotSk1FU1NBR0UoSlRSQ18xNkJJVF9UQUJMRVMsDQotCSAiQ2F1dGlvbjogcXVhbnRpemF0aW9uIHRhYmxlcyBhcmUgdG9vIGNvYXJzZSBmb3IgYmFzZWxpbmUgSlBFRyIpDQotSk1FU1NBR0UoSlRSQ19BRE9CRSwNCi0JICJBZG9iZSBBUFAxNCBtYXJrZXI6IHZlcnNpb24gJWQsIGZsYWdzIDB4JTA0eCAweCUwNHgsIHRyYW5zZm9ybSAlZCIpDQotSk1FU1NBR0UoSlRSQ19BUFAwLCAiVW5rbm93biBBUFAwIG1hcmtlciAobm90IEpGSUYpLCBsZW5ndGggJXUiKQ0KLUpNRVNTQUdFKEpUUkNfQVBQMTQsICJVbmtub3duIEFQUDE0IG1hcmtlciAobm90IEFkb2JlKSwgbGVuZ3RoICV1IikNCi1KTUVTU0FHRShKVFJDX0RBQywgIkRlZmluZSBBcml0aG1ldGljIFRhYmxlIDB4JTAyeDogMHglMDJ4IikNCi1KTUVTU0FHRShKVFJDX0RIVCwgIkRlZmluZSBIdWZmbWFuIFRhYmxlIDB4JTAyeCIpDQotSk1FU1NBR0UoSlRSQ19EUVQsICJEZWZpbmUgUXVhbnRpemF0aW9uIFRhYmxlICVkICBwcmVjaXNpb24gJWQiKQ0KLUpNRVNTQUdFKEpUUkNfRFJJLCAiRGVmaW5lIFJlc3RhcnQgSW50ZXJ2YWwgJXUiKQ0KLUpNRVNTQUdFKEpUUkNfRU1TX0NMT1NFLCAiRnJlZWQgRU1TIGhhbmRsZSAldSIpDQotSk1FU1NBR0UoSlRSQ19FTVNfT1BFTiwgIk9idGFpbmVkIEVNUyBoYW5kbGUgJXUiKQ0KLUpNRVNTQUdFKEpUUkNfRU9JLCAiRW5kIE9mIEltYWdlIikNCi1KTUVTU0FHRShKVFJDX0hVRkZCSVRTLCAiICAgICAgICAlM2QgJTNkICUzZCAlM2QgJTNkICUzZCAlM2QgJTNkIikNCi1KTUVTU0FHRShKVFJDX0pGSUYsICJKRklGIEFQUDAgbWFya2VyOiB2ZXJzaW9uICVkLiUwMmQsIGRlbnNpdHkgJWR4JWQgICVkIikNCi1KTUVTU0FHRShKVFJDX0pGSUZfQkFEVEhVTUJOQUlMU0laRSwNCi0JICJXYXJuaW5nOiB0aHVtYm5haWwgaW1hZ2Ugc2l6ZSBkb2VzIG5vdCBtYXRjaCBkYXRhIGxlbmd0aCAldSIpDQotSk1FU1NBR0UoSlRSQ19KRklGX0VYVEVOU0lPTiwNCi0JICJKRklGIGV4dGVuc2lvbiBtYXJrZXI6IHR5cGUgMHglMDJ4LCBsZW5ndGggJXUiKQ0KLUpNRVNTQUdFKEpUUkNfSkZJRl9USFVNQk5BSUwsICIgICAgd2l0aCAlZCB4ICVkIHRodW1ibmFpbCBpbWFnZSIpDQotSk1FU1NBR0UoSlRSQ19NSVNDX01BUktFUiwgIk1pc2NlbGxhbmVvdXMgbWFya2VyIDB4JTAyeCwgbGVuZ3RoICV1IikNCi1KTUVTU0FHRShKVFJDX1BBUk1MRVNTX01BUktFUiwgIlVuZXhwZWN0ZWQgbWFya2VyIDB4JTAyeCIpDQotSk1FU1NBR0UoSlRSQ19RVUFOVFZBTFMsICIgICAgICAgICU0dSAlNHUgJTR1ICU0dSAlNHUgJTR1ICU0dSAlNHUiKQ0KLUpNRVNTQUdFKEpUUkNfUVVBTlRfM19OQ09MT1JTLCAiUXVhbnRpemluZyB0byAlZCA9ICVkKiVkKiVkIGNvbG9ycyIpDQotSk1FU1NBR0UoSlRSQ19RVUFOVF9OQ09MT1JTLCAiUXVhbnRpemluZyB0byAlZCBjb2xvcnMiKQ0KLUpNRVNTQUdFKEpUUkNfUVVBTlRfU0VMRUNURUQsICJTZWxlY3RlZCAlZCBjb2xvcnMgZm9yIHF1YW50aXphdGlvbiIpDQotSk1FU1NBR0UoSlRSQ19SRUNPVkVSWV9BQ1RJT04sICJBdCBtYXJrZXIgMHglMDJ4LCByZWNvdmVyeSBhY3Rpb24gJWQiKQ0KLUpNRVNTQUdFKEpUUkNfUlNULCAiUlNUJWQiKQ0KLUpNRVNTQUdFKEpUUkNfU01PT1RIX05PVElNUEwsDQotCSAiU21vb3RoaW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCBub25zdGFuZGFyZCBzYW1wbGluZyByYXRpb3MiKQ0KLUpNRVNTQUdFKEpUUkNfU09GLCAiU3RhcnQgT2YgRnJhbWUgMHglMDJ4OiB3aWR0aD0ldSwgaGVpZ2h0PSV1LCBjb21wb25lbnRzPSVkIikNCi1KTUVTU0FHRShKVFJDX1NPRl9DT01QT05FTlQsICIgICAgQ29tcG9uZW50ICVkOiAlZGh4JWR2IHE9JWQiKQ0KLUpNRVNTQUdFKEpUUkNfU09JLCAiU3RhcnQgb2YgSW1hZ2UiKQ0KLUpNRVNTQUdFKEpUUkNfU09TLCAiU3RhcnQgT2YgU2NhbjogJWQgY29tcG9uZW50cyIpDQotSk1FU1NBR0UoSlRSQ19TT1NfQ09NUE9ORU5ULCAiICAgIENvbXBvbmVudCAlZDogZGM9JWQgYWM9JWQiKQ0KLUpNRVNTQUdFKEpUUkNfU09TX1BBUkFNUywgIiAgU3M9JWQsIFNlPSVkLCBBaD0lZCwgQWw9JWQiKQ0KLUpNRVNTQUdFKEpUUkNfVEZJTEVfQ0xPU0UsICJDbG9zZWQgdGVtcG9yYXJ5IGZpbGUgJXMiKQ0KLUpNRVNTQUdFKEpUUkNfVEZJTEVfT1BFTiwgIk9wZW5lZCB0ZW1wb3JhcnkgZmlsZSAlcyIpDQotSk1FU1NBR0UoSlRSQ19USFVNQl9KUEVHLA0KLQkgIkpGSUYgZXh0ZW5zaW9uIG1hcmtlcjogSlBFRy1jb21wcmVzc2VkIHRodW1ibmFpbCBpbWFnZSwgbGVuZ3RoICV1IikNCi1KTUVTU0FHRShKVFJDX1RIVU1CX1BBTEVUVEUsDQotCSAiSkZJRiBleHRlbnNpb24gbWFya2VyOiBwYWxldHRlIHRodW1ibmFpbCBpbWFnZSwgbGVuZ3RoICV1IikNCi1KTUVTU0FHRShKVFJDX1RIVU1CX1JHQiwNCi0JICJKRklGIGV4dGVuc2lvbiBtYXJrZXI6IFJHQiB0aHVtYm5haWwgaW1hZ2UsIGxlbmd0aCAldSIpDQotSk1FU1NBR0UoSlRSQ19VTktOT1dOX0lEUywNCi0JICJVbnJlY29nbml6ZWQgY29tcG9uZW50IElEcyAlZCAlZCAlZCwgYXNzdW1pbmcgWUNiQ3IiKQ0KLUpNRVNTQUdFKEpUUkNfWE1TX0NMT1NFLCAiRnJlZWQgWE1TIGhhbmRsZSAldSIpDQotSk1FU1NBR0UoSlRSQ19YTVNfT1BFTiwgIk9idGFpbmVkIFhNUyBoYW5kbGUgJXUiKQ0KLUpNRVNTQUdFKEpXUk5fQURPQkVfWEZPUk0sICJVbmtub3duIEFkb2JlIGNvbG9yIHRyYW5zZm9ybSBjb2RlICVkIikNCi1KTUVTU0FHRShKV1JOX0JPR1VTX1BST0dSRVNTSU9OLA0KLQkgIkluY29uc2lzdGVudCBwcm9ncmVzc2lvbiBzZXF1ZW5jZSBmb3IgY29tcG9uZW50ICVkIGNvZWZmaWNpZW50ICVkIikNCi1KTUVTU0FHRShKV1JOX0VYVFJBTkVPVVNfREFUQSwNCi0JICJDb3JydXB0IEpQRUcgZGF0YTogJXUgZXh0cmFuZW91cyBieXRlcyBiZWZvcmUgbWFya2VyIDB4JTAyeCIpDQotSk1FU1NBR0UoSldSTl9ISVRfTUFSS0VSLCAiQ29ycnVwdCBKUEVHIGRhdGE6IHByZW1hdHVyZSBlbmQgb2YgZGF0YSBzZWdtZW50IikNCi1KTUVTU0FHRShKV1JOX0hVRkZfQkFEX0NPREUsICJDb3JydXB0IEpQRUcgZGF0YTogYmFkIEh1ZmZtYW4gY29kZSIpDQotSk1FU1NBR0UoSldSTl9KRklGX01BSk9SLCAiV2FybmluZzogdW5rbm93biBKRklGIHJldmlzaW9uIG51bWJlciAlZC4lMDJkIikNCi1KTUVTU0FHRShKV1JOX0pQRUdfRU9GLCAiUHJlbWF0dXJlIGVuZCBvZiBKUEVHIGZpbGUiKQ0KLUpNRVNTQUdFKEpXUk5fTVVTVF9SRVNZTkMsDQotCSAiQ29ycnVwdCBKUEVHIGRhdGE6IGZvdW5kIG1hcmtlciAweCUwMnggaW5zdGVhZCBvZiBSU1QlZCIpDQotSk1FU1NBR0UoSldSTl9OT1RfU0VRVUVOVElBTCwgIkludmFsaWQgU09TIHBhcmFtZXRlcnMgZm9yIHNlcXVlbnRpYWwgSlBFRyIpDQotSk1FU1NBR0UoSldSTl9UT09fTVVDSF9EQVRBLCAiQXBwbGljYXRpb24gdHJhbnNmZXJyZWQgdG9vIG1hbnkgc2NhbmxpbmVzIikNCi0NCi0jaWZkZWYgSk1BS0VfRU5VTV9MSVNUDQotDQotICBKTVNHX0xBU1RNU0dDT0RFDQotfSBKX01FU1NBR0VfQ09ERTsNCi0NCi0jdW5kZWYgSk1BS0VfRU5VTV9MSVNUDQotI2VuZGlmIC8qIEpNQUtFX0VOVU1fTElTVCAqLw0KLQ0KLS8qIFphcCBKTUVTU0FHRSBtYWNybyBzbyB0aGF0IGZ1dHVyZSByZS1pbmNsdXNpb25zIGRvIG5vdGhpbmcgYnkgZGVmYXVsdCAqLw0KLSN1bmRlZiBKTUVTU0FHRQ0KLQ0KLQ0KLSNpZm5kZWYgSkVSUk9SX0gNCi0jZGVmaW5lIEpFUlJPUl9IDQotDQotLyogTWFjcm9zIHRvIHNpbXBsaWZ5IHVzaW5nIHRoZSBlcnJvciBhbmQgdHJhY2UgbWVzc2FnZSBzdHVmZiAqLw0KLS8qIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgZWl0aGVyIHR5cGUgb2YgY2luZm8gcG9pbnRlciAqLw0KLQ0KLS8qIEZhdGFsIGVycm9ycyAocHJpbnQgbWVzc2FnZSBhbmQgZXhpdCkgKi8NCi0jZGVmaW5lIEVSUkVYSVQoY2luZm8sY29kZSkgIFwNCi0gICgoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpLCBcDQotICAgKCooY2luZm8pLT5lcnItPmVycm9yX2V4aXQpICgoal9jb21tb25fcHRyKSAoY2luZm8pKSkNCi0jZGVmaW5lIEVSUkVYSVQxKGNpbmZvLGNvZGUscDEpICBcDQotICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXA0KLSAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVswXSA9IChwMSksIFwNCi0gICAoKihjaW5mbyktPmVyci0+ZXJyb3JfZXhpdCkgKChqX2NvbW1vbl9wdHIpIChjaW5mbykpKQ0KLSNkZWZpbmUgRVJSRVhJVDIoY2luZm8sY29kZSxwMSxwMikgIFwNCi0gICgoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpLCBcDQotICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzBdID0gKHAxKSwgXA0KLSAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVsxXSA9IChwMiksIFwNCi0gICAoKihjaW5mbyktPmVyci0+ZXJyb3JfZXhpdCkgKChqX2NvbW1vbl9wdHIpIChjaW5mbykpKQ0KLSNkZWZpbmUgRVJSRVhJVDMoY2luZm8sY29kZSxwMSxwMixwMykgIFwNCi0gICgoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpLCBcDQotICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzBdID0gKHAxKSwgXA0KLSAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVsxXSA9IChwMiksIFwNCi0gICAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmlbMl0gPSAocDMpLCBcDQotICAgKCooY2luZm8pLT5lcnItPmVycm9yX2V4aXQpICgoal9jb21tb25fcHRyKSAoY2luZm8pKSkNCi0jZGVmaW5lIEVSUkVYSVQ0KGNpbmZvLGNvZGUscDEscDIscDMscDQpICBcDQotICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXA0KLSAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVswXSA9IChwMSksIFwNCi0gICAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmlbMV0gPSAocDIpLCBcDQotICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzJdID0gKHAzKSwgXA0KLSAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVszXSA9IChwNCksIFwNCi0gICAoKihjaW5mbyktPmVyci0+ZXJyb3JfZXhpdCkgKChqX2NvbW1vbl9wdHIpIChjaW5mbykpKQ0KLSNkZWZpbmUgRVJSRVhJVFMoY2luZm8sY29kZSxzdHIpICBcDQotICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXA0KLSAgIEZYU1lTX3N0cm5jcHkoKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5zLCAoc3RyKSwgSk1TR19TVFJfUEFSTV9NQVgpLCBcDQotICAgKCooY2luZm8pLT5lcnItPmVycm9yX2V4aXQpICgoal9jb21tb25fcHRyKSAoY2luZm8pKSkNCi0NCi0jZGVmaW5lIE1BS0VTVE1UKHN0dWZmKQkJZG8geyBzdHVmZiB9IHdoaWxlICgwKQ0KLQ0KLS8qIE5vbmZhdGFsIGVycm9ycyAod2UgY2FuIGtlZXAgZ29pbmcsIGJ1dCB0aGUgZGF0YSBpcyBwcm9iYWJseSBjb3JydXB0KSAqLw0KLSNkZWZpbmUgV0FSTk1TKGNpbmZvLGNvZGUpICBcDQotICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXA0KLSAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKSAoY2luZm8pLCAtMSkpDQotI2RlZmluZSBXQVJOTVMxKGNpbmZvLGNvZGUscDEpICBcDQotICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXA0KLSAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVswXSA9IChwMSksIFwNCi0gICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSwgLTEpKQ0KLSNkZWZpbmUgV0FSTk1TMihjaW5mbyxjb2RlLHAxLHAyKSAgXA0KLSAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwNCi0gICAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmlbMF0gPSAocDEpLCBcDQotICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzFdID0gKHAyKSwgXA0KLSAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKSAoY2luZm8pLCAtMSkpDQotDQotLyogSW5mb3JtYXRpb25hbC9kZWJ1Z2dpbmcgbWVzc2FnZXMgKi8NCi0jZGVmaW5lIFRSQUNFTVMoY2luZm8sbHZsLGNvZGUpICBcDQotICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXA0KLSAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKSAoY2luZm8pLCAobHZsKSkpDQotI2RlZmluZSBUUkFDRU1TMShjaW5mbyxsdmwsY29kZSxwMSkgIFwNCi0gICgoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpLCBcDQotICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzBdID0gKHAxKSwgXA0KLSAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKSAoY2luZm8pLCAobHZsKSkpDQotI2RlZmluZSBUUkFDRU1TMihjaW5mbyxsdmwsY29kZSxwMSxwMikgIFwNCi0gICgoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpLCBcDQotICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzBdID0gKHAxKSwgXA0KLSAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVsxXSA9IChwMiksIFwNCi0gICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSwgKGx2bCkpKQ0KLSNkZWZpbmUgVFJBQ0VNUzMoY2luZm8sbHZsLGNvZGUscDEscDIscDMpICBcDQotICBNQUtFU1RNVChpbnQgKiBfbXAgPSAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmk7IFwNCi0JICAgX21wWzBdID0gKHAxKTsgX21wWzFdID0gKHAyKTsgX21wWzJdID0gKHAzKTsgXA0KLQkgICAoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpOyBcDQotCSAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKSAoY2luZm8pLCAobHZsKSk7ICkNCi0jZGVmaW5lIFRSQUNFTVM0KGNpbmZvLGx2bCxjb2RlLHAxLHAyLHAzLHA0KSAgXA0KLSAgTUFLRVNUTVQoaW50ICogX21wID0gKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pOyBcDQotCSAgIF9tcFswXSA9IChwMSk7IF9tcFsxXSA9IChwMik7IF9tcFsyXSA9IChwMyk7IF9tcFszXSA9IChwNCk7IFwNCi0JICAgKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKTsgXA0KLQkgICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSwgKGx2bCkpOyApDQotI2RlZmluZSBUUkFDRU1TNShjaW5mbyxsdmwsY29kZSxwMSxwMixwMyxwNCxwNSkgIFwNCi0gIE1BS0VTVE1UKGludCAqIF9tcCA9IChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaTsgXA0KLQkgICBfbXBbMF0gPSAocDEpOyBfbXBbMV0gPSAocDIpOyBfbXBbMl0gPSAocDMpOyBfbXBbM10gPSAocDQpOyBcDQotCSAgIF9tcFs0XSA9IChwNSk7IFwNCi0JICAgKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKTsgXA0KLQkgICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSwgKGx2bCkpOyApDQotI2RlZmluZSBUUkFDRU1TOChjaW5mbyxsdmwsY29kZSxwMSxwMixwMyxwNCxwNSxwNixwNyxwOCkgIFwNCi0gIE1BS0VTVE1UKGludCAqIF9tcCA9IChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaTsgXA0KLQkgICBfbXBbMF0gPSAocDEpOyBfbXBbMV0gPSAocDIpOyBfbXBbMl0gPSAocDMpOyBfbXBbM10gPSAocDQpOyBcDQotCSAgIF9tcFs0XSA9IChwNSk7IF9tcFs1XSA9IChwNik7IF9tcFs2XSA9IChwNyk7IF9tcFs3XSA9IChwOCk7IFwNCi0JICAgKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKTsgXA0KLQkgICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSwgKGx2bCkpOyApDQotI2RlZmluZSBUUkFDRU1TUyhjaW5mbyxsdmwsY29kZSxzdHIpICBcDQotICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXA0KLSAgIEZYU1lTX3N0cm5jcHkoKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5zLCAoc3RyKSwgSk1TR19TVFJfUEFSTV9NQVgpLCBcDQotICAgKCooY2luZm8pLT5lcnItPmVtaXRfbWVzc2FnZSkgKChqX2NvbW1vbl9wdHIpIChjaW5mbyksIChsdmwpKSkNCi0NCi0jZW5kaWYgLyogSkVSUk9SX0ggKi8NCisvKgorICogamVycm9yLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBlcnJvciBhbmQgbWVzc2FnZSBjb2RlcyBmb3IgdGhlIEpQRUcgbGlicmFyeS4KKyAqIEVkaXQgdGhpcyBmaWxlIHRvIGFkZCBuZXcgY29kZXMsIG9yIHRvIHRyYW5zbGF0ZSB0aGUgbWVzc2FnZSBzdHJpbmdzIHRvCisgKiBzb21lIG90aGVyIGxhbmd1YWdlLgorICogQSBzZXQgb2YgZXJyb3ItcmVwb3J0aW5nIG1hY3JvcyBhcmUgZGVmaW5lZCB0b28uICBTb21lIGFwcGxpY2F0aW9ucyB1c2luZworICogdGhlIEpQRUcgbGlicmFyeSBtYXkgd2lzaCB0byBpbmNsdWRlIHRoaXMgZmlsZSB0byBnZXQgdGhlIGVycm9yIGNvZGVzCisgKiBhbmQvb3IgdGhlIG1hY3Jvcy4KKyAqLworCisvKgorICogVG8gZGVmaW5lIHRoZSBlbnVtIGxpc3Qgb2YgbWVzc2FnZSBjb2RlcywgaW5jbHVkZSB0aGlzIGZpbGUgd2l0aG91dAorICogZGVmaW5pbmcgbWFjcm8gSk1FU1NBR0UuICBUbyBjcmVhdGUgYSBtZXNzYWdlIHN0cmluZyB0YWJsZSwgaW5jbHVkZSBpdAorICogYWdhaW4gd2l0aCBhIHN1aXRhYmxlIEpNRVNTQUdFIGRlZmluaXRpb24gKHNlZSBqZXJyb3IuYyBmb3IgYW4gZXhhbXBsZSkuCisgKi8KKyNpZm5kZWYgSk1FU1NBR0UKKyNpZm5kZWYgSkVSUk9SX0gKKy8qIEZpcnN0IHRpbWUgdGhyb3VnaCwgZGVmaW5lIHRoZSBlbnVtIGxpc3QgKi8KKyNkZWZpbmUgSk1BS0VfRU5VTV9MSVNUCisjZWxzZQorLyogUmVwZWF0ZWQgaW5jbHVzaW9ucyBvZiB0aGlzIGZpbGUgYXJlIG5vLW9wcyB1bmxlc3MgSk1FU1NBR0UgaXMgZGVmaW5lZCAqLworI2RlZmluZSBKTUVTU0FHRShjb2RlLHN0cmluZykKKyNlbmRpZiAvKiBKRVJST1JfSCAqLworI2VuZGlmIC8qIEpNRVNTQUdFICovCisKKyNpZmRlZiBKTUFLRV9FTlVNX0xJU1QKKwordHlwZWRlZiBlbnVtIHsKKworI2RlZmluZSBKTUVTU0FHRShjb2RlLHN0cmluZykJY29kZSAsCisKKyNlbmRpZiAvKiBKTUFLRV9FTlVNX0xJU1QgKi8KKworSk1FU1NBR0UoSk1TR19OT01FU1NBR0UsICJCb2d1cyBtZXNzYWdlIGNvZGUgJWQiKSAvKiBNdXN0IGJlIGZpcnN0IGVudHJ5ISAqLworCisvKiBGb3IgbWFpbnRlbmFuY2UgY29udmVuaWVuY2UsIGxpc3QgaXMgYWxwaGFiZXRpY2FsIGJ5IG1lc3NhZ2UgY29kZSBuYW1lICovCitKTUVTU0FHRShKRVJSX0FSSVRIX05PVElNUEwsCisJICJTb3JyeSwgdGhlcmUgYXJlIGxlZ2FsIHJlc3RyaWN0aW9ucyBvbiBhcml0aG1ldGljIGNvZGluZyIpCitKTUVTU0FHRShKRVJSX0JBRF9BTElHTl9UWVBFLCAiQUxJR05fVFlQRSBpcyB3cm9uZywgcGxlYXNlIGZpeCIpCitKTUVTU0FHRShKRVJSX0JBRF9BTExPQ19DSFVOSywgIk1BWF9BTExPQ19DSFVOSyBpcyB3cm9uZywgcGxlYXNlIGZpeCIpCitKTUVTU0FHRShKRVJSX0JBRF9CVUZGRVJfTU9ERSwgIkJvZ3VzIGJ1ZmZlciBjb250cm9sIG1vZGUiKQorSk1FU1NBR0UoSkVSUl9CQURfQ09NUE9ORU5UX0lELCAiSW52YWxpZCBjb21wb25lbnQgSUQgJWQgaW4gU09TIikKK0pNRVNTQUdFKEpFUlJfQkFEX0RDVF9DT0VGLCAiRENUIGNvZWZmaWNpZW50IG91dCBvZiByYW5nZSIpCitKTUVTU0FHRShKRVJSX0JBRF9EQ1RTSVpFLCAiSURDVCBvdXRwdXQgYmxvY2sgc2l6ZSAlZCBub3Qgc3VwcG9ydGVkIikKK0pNRVNTQUdFKEpFUlJfQkFEX0hVRkZfVEFCTEUsICJCb2d1cyBIdWZmbWFuIHRhYmxlIGRlZmluaXRpb24iKQorSk1FU1NBR0UoSkVSUl9CQURfSU5fQ09MT1JTUEFDRSwgIkJvZ3VzIGlucHV0IGNvbG9yc3BhY2UiKQorSk1FU1NBR0UoSkVSUl9CQURfSl9DT0xPUlNQQUNFLCAiQm9ndXMgSlBFRyBjb2xvcnNwYWNlIikKK0pNRVNTQUdFKEpFUlJfQkFEX0xFTkdUSCwgIkJvZ3VzIG1hcmtlciBsZW5ndGgiKQorSk1FU1NBR0UoSkVSUl9CQURfTElCX1ZFUlNJT04sCisJICJXcm9uZyBKUEVHIGxpYnJhcnkgdmVyc2lvbjogbGlicmFyeSBpcyAlZCwgY2FsbGVyIGV4cGVjdHMgJWQiKQorSk1FU1NBR0UoSkVSUl9CQURfTUNVX1NJWkUsICJTYW1wbGluZyBmYWN0b3JzIHRvbyBsYXJnZSBmb3IgaW50ZXJsZWF2ZWQgc2NhbiIpCitKTUVTU0FHRShKRVJSX0JBRF9QT09MX0lELCAiSW52YWxpZCBtZW1vcnkgcG9vbCBjb2RlICVkIikKK0pNRVNTQUdFKEpFUlJfQkFEX1BSRUNJU0lPTiwgIlVuc3VwcG9ydGVkIEpQRUcgZGF0YSBwcmVjaXNpb24gJWQiKQorSk1FU1NBR0UoSkVSUl9CQURfUFJPR1JFU1NJT04sCisJICJJbnZhbGlkIHByb2dyZXNzaXZlIHBhcmFtZXRlcnMgU3M9JWQgU2U9JWQgQWg9JWQgQWw9JWQiKQorSk1FU1NBR0UoSkVSUl9CQURfUFJPR19TQ1JJUFQsCisJICJJbnZhbGlkIHByb2dyZXNzaXZlIHBhcmFtZXRlcnMgYXQgc2NhbiBzY3JpcHQgZW50cnkgJWQiKQorSk1FU1NBR0UoSkVSUl9CQURfU0FNUExJTkcsICJCb2d1cyBzYW1wbGluZyBmYWN0b3JzIikKK0pNRVNTQUdFKEpFUlJfQkFEX1NDQU5fU0NSSVBULCAiSW52YWxpZCBzY2FuIHNjcmlwdCBhdCBlbnRyeSAlZCIpCitKTUVTU0FHRShKRVJSX0JBRF9TVEFURSwgIkltcHJvcGVyIGNhbGwgdG8gSlBFRyBsaWJyYXJ5IGluIHN0YXRlICVkIikKK0pNRVNTQUdFKEpFUlJfQkFEX1NUUlVDVF9TSVpFLAorCSAiSlBFRyBwYXJhbWV0ZXIgc3RydWN0IG1pc21hdGNoOiBsaWJyYXJ5IHRoaW5rcyBzaXplIGlzICV1LCBjYWxsZXIgZXhwZWN0cyAldSIpCitKTUVTU0FHRShKRVJSX0JBRF9WSVJUVUFMX0FDQ0VTUywgIkJvZ3VzIHZpcnR1YWwgYXJyYXkgYWNjZXNzIikKK0pNRVNTQUdFKEpFUlJfQlVGRkVSX1NJWkUsICJCdWZmZXIgcGFzc2VkIHRvIEpQRUcgbGlicmFyeSBpcyB0b28gc21hbGwiKQorSk1FU1NBR0UoSkVSUl9DQU5UX1NVU1BFTkQsICJTdXNwZW5zaW9uIG5vdCBhbGxvd2VkIGhlcmUiKQorSk1FU1NBR0UoSkVSUl9DQ0lSNjAxX05PVElNUEwsICJDQ0lSNjAxIHNhbXBsaW5nIG5vdCBpbXBsZW1lbnRlZCB5ZXQiKQorSk1FU1NBR0UoSkVSUl9DT01QT05FTlRfQ09VTlQsICJUb28gbWFueSBjb2xvciBjb21wb25lbnRzOiAlZCwgbWF4ICVkIikKK0pNRVNTQUdFKEpFUlJfQ09OVkVSU0lPTl9OT1RJTVBMLCAiVW5zdXBwb3J0ZWQgY29sb3IgY29udmVyc2lvbiByZXF1ZXN0IikKK0pNRVNTQUdFKEpFUlJfREFDX0lOREVYLCAiQm9ndXMgREFDIGluZGV4ICVkIikKK0pNRVNTQUdFKEpFUlJfREFDX1ZBTFVFLCAiQm9ndXMgREFDIHZhbHVlIDB4JXgiKQorSk1FU1NBR0UoSkVSUl9ESFRfSU5ERVgsICJCb2d1cyBESFQgaW5kZXggJWQiKQorSk1FU1NBR0UoSkVSUl9EUVRfSU5ERVgsICJCb2d1cyBEUVQgaW5kZXggJWQiKQorSk1FU1NBR0UoSkVSUl9FTVBUWV9JTUFHRSwgIkVtcHR5IEpQRUcgaW1hZ2UgKEROTCBub3Qgc3VwcG9ydGVkKSIpCitKTUVTU0FHRShKRVJSX0VNU19SRUFELCAiUmVhZCBmcm9tIEVNUyBmYWlsZWQiKQorSk1FU1NBR0UoSkVSUl9FTVNfV1JJVEUsICJXcml0ZSB0byBFTVMgZmFpbGVkIikKK0pNRVNTQUdFKEpFUlJfRU9JX0VYUEVDVEVELCAiRGlkbid0IGV4cGVjdCBtb3JlIHRoYW4gb25lIHNjYW4iKQorSk1FU1NBR0UoSkVSUl9GSUxFX1JFQUQsICJJbnB1dCBmaWxlIHJlYWQgZXJyb3IiKQorSk1FU1NBR0UoSkVSUl9GSUxFX1dSSVRFLCAiT3V0cHV0IGZpbGUgd3JpdGUgZXJyb3IgLS0tIG91dCBvZiBkaXNrIHNwYWNlPyIpCitKTUVTU0FHRShKRVJSX0ZSQUNUX1NBTVBMRV9OT1RJTVBMLCAiRnJhY3Rpb25hbCBzYW1wbGluZyBub3QgaW1wbGVtZW50ZWQgeWV0IikKK0pNRVNTQUdFKEpFUlJfSFVGRl9DTEVOX09WRVJGTE9XLCAiSHVmZm1hbiBjb2RlIHNpemUgdGFibGUgb3ZlcmZsb3ciKQorSk1FU1NBR0UoSkVSUl9IVUZGX01JU1NJTkdfQ09ERSwgIk1pc3NpbmcgSHVmZm1hbiBjb2RlIHRhYmxlIGVudHJ5IikKK0pNRVNTQUdFKEpFUlJfSU1BR0VfVE9PX0JJRywgIk1heGltdW0gc3VwcG9ydGVkIGltYWdlIGRpbWVuc2lvbiBpcyAldSBwaXhlbHMiKQorSk1FU1NBR0UoSkVSUl9JTlBVVF9FTVBUWSwgIkVtcHR5IGlucHV0IGZpbGUiKQorSk1FU1NBR0UoSkVSUl9JTlBVVF9FT0YsICJQcmVtYXR1cmUgZW5kIG9mIGlucHV0IGZpbGUiKQorSk1FU1NBR0UoSkVSUl9NSVNNQVRDSEVEX1FVQU5UX1RBQkxFLAorCSAiQ2Fubm90IHRyYW5zY29kZSBkdWUgdG8gbXVsdGlwbGUgdXNlIG9mIHF1YW50aXphdGlvbiB0YWJsZSAlZCIpCitKTUVTU0FHRShKRVJSX01JU1NJTkdfREFUQSwgIlNjYW4gc2NyaXB0IGRvZXMgbm90IHRyYW5zbWl0IGFsbCBkYXRhIikKK0pNRVNTQUdFKEpFUlJfTU9ERV9DSEFOR0UsICJJbnZhbGlkIGNvbG9yIHF1YW50aXphdGlvbiBtb2RlIGNoYW5nZSIpCitKTUVTU0FHRShKRVJSX05PVElNUEwsICJOb3QgaW1wbGVtZW50ZWQgeWV0IikKK0pNRVNTQUdFKEpFUlJfTk9UX0NPTVBJTEVELCAiUmVxdWVzdGVkIGZlYXR1cmUgd2FzIG9taXR0ZWQgYXQgY29tcGlsZSB0aW1lIikKK0pNRVNTQUdFKEpFUlJfTk9fQkFDS0lOR19TVE9SRSwgIkJhY2tpbmcgc3RvcmUgbm90IHN1cHBvcnRlZCIpCitKTUVTU0FHRShKRVJSX05PX0hVRkZfVEFCTEUsICJIdWZmbWFuIHRhYmxlIDB4JTAyeCB3YXMgbm90IGRlZmluZWQiKQorSk1FU1NBR0UoSkVSUl9OT19JTUFHRSwgIkpQRUcgZGF0YXN0cmVhbSBjb250YWlucyBubyBpbWFnZSIpCitKTUVTU0FHRShKRVJSX05PX1FVQU5UX1RBQkxFLCAiUXVhbnRpemF0aW9uIHRhYmxlIDB4JTAyeCB3YXMgbm90IGRlZmluZWQiKQorSk1FU1NBR0UoSkVSUl9OT19TT0ksICJOb3QgYSBKUEVHIGZpbGU6IHN0YXJ0cyB3aXRoIDB4JTAyeCAweCUwMngiKQorSk1FU1NBR0UoSkVSUl9PVVRfT0ZfTUVNT1JZLCAiSW5zdWZmaWNpZW50IG1lbW9yeSAoY2FzZSAlZCkiKQorSk1FU1NBR0UoSkVSUl9RVUFOVF9DT01QT05FTlRTLAorCSAiQ2Fubm90IHF1YW50aXplIG1vcmUgdGhhbiAlZCBjb2xvciBjb21wb25lbnRzIikKK0pNRVNTQUdFKEpFUlJfUVVBTlRfRkVXX0NPTE9SUywgIkNhbm5vdCBxdWFudGl6ZSB0byBmZXdlciB0aGFuICVkIGNvbG9ycyIpCitKTUVTU0FHRShKRVJSX1FVQU5UX01BTllfQ09MT1JTLCAiQ2Fubm90IHF1YW50aXplIHRvIG1vcmUgdGhhbiAlZCBjb2xvcnMiKQorSk1FU1NBR0UoSkVSUl9TT0ZfRFVQTElDQVRFLCAiSW52YWxpZCBKUEVHIGZpbGUgc3RydWN0dXJlOiB0d28gU09GIG1hcmtlcnMiKQorSk1FU1NBR0UoSkVSUl9TT0ZfTk9fU09TLCAiSW52YWxpZCBKUEVHIGZpbGUgc3RydWN0dXJlOiBtaXNzaW5nIFNPUyBtYXJrZXIiKQorSk1FU1NBR0UoSkVSUl9TT0ZfVU5TVVBQT1JURUQsICJVbnN1cHBvcnRlZCBKUEVHIHByb2Nlc3M6IFNPRiB0eXBlIDB4JTAyeCIpCitKTUVTU0FHRShKRVJSX1NPSV9EVVBMSUNBVEUsICJJbnZhbGlkIEpQRUcgZmlsZSBzdHJ1Y3R1cmU6IHR3byBTT0kgbWFya2VycyIpCitKTUVTU0FHRShKRVJSX1NPU19OT19TT0YsICJJbnZhbGlkIEpQRUcgZmlsZSBzdHJ1Y3R1cmU6IFNPUyBiZWZvcmUgU09GIikKK0pNRVNTQUdFKEpFUlJfVEZJTEVfQ1JFQVRFLCAiRmFpbGVkIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgZmlsZSAlcyIpCitKTUVTU0FHRShKRVJSX1RGSUxFX1JFQUQsICJSZWFkIGZhaWxlZCBvbiB0ZW1wb3JhcnkgZmlsZSIpCitKTUVTU0FHRShKRVJSX1RGSUxFX1NFRUssICJTZWVrIGZhaWxlZCBvbiB0ZW1wb3JhcnkgZmlsZSIpCitKTUVTU0FHRShKRVJSX1RGSUxFX1dSSVRFLAorCSAiV3JpdGUgZmFpbGVkIG9uIHRlbXBvcmFyeSBmaWxlIC0tLSBvdXQgb2YgZGlzayBzcGFjZT8iKQorSk1FU1NBR0UoSkVSUl9UT09fTElUVExFX0RBVEEsICJBcHBsaWNhdGlvbiB0cmFuc2ZlcnJlZCB0b28gZmV3IHNjYW5saW5lcyIpCitKTUVTU0FHRShKRVJSX1VOS05PV05fTUFSS0VSLCAiVW5zdXBwb3J0ZWQgbWFya2VyIHR5cGUgMHglMDJ4IikKK0pNRVNTQUdFKEpFUlJfVklSVFVBTF9CVUcsICJWaXJ0dWFsIGFycmF5IGNvbnRyb2xsZXIgbWVzc2VkIHVwIikKK0pNRVNTQUdFKEpFUlJfV0lEVEhfT1ZFUkZMT1csICJJbWFnZSB0b28gd2lkZSBmb3IgdGhpcyBpbXBsZW1lbnRhdGlvbiIpCitKTUVTU0FHRShKRVJSX1hNU19SRUFELCAiUmVhZCBmcm9tIFhNUyBmYWlsZWQiKQorSk1FU1NBR0UoSkVSUl9YTVNfV1JJVEUsICJXcml0ZSB0byBYTVMgZmFpbGVkIikKK0pNRVNTQUdFKEpNU0dfQ09QWVJJR0hULCBKQ09QWVJJR0hUKQorSk1FU1NBR0UoSk1TR19WRVJTSU9OLCBKVkVSU0lPTikKK0pNRVNTQUdFKEpUUkNfMTZCSVRfVEFCTEVTLAorCSAiQ2F1dGlvbjogcXVhbnRpemF0aW9uIHRhYmxlcyBhcmUgdG9vIGNvYXJzZSBmb3IgYmFzZWxpbmUgSlBFRyIpCitKTUVTU0FHRShKVFJDX0FET0JFLAorCSAiQWRvYmUgQVBQMTQgbWFya2VyOiB2ZXJzaW9uICVkLCBmbGFncyAweCUwNHggMHglMDR4LCB0cmFuc2Zvcm0gJWQiKQorSk1FU1NBR0UoSlRSQ19BUFAwLCAiVW5rbm93biBBUFAwIG1hcmtlciAobm90IEpGSUYpLCBsZW5ndGggJXUiKQorSk1FU1NBR0UoSlRSQ19BUFAxNCwgIlVua25vd24gQVBQMTQgbWFya2VyIChub3QgQWRvYmUpLCBsZW5ndGggJXUiKQorSk1FU1NBR0UoSlRSQ19EQUMsICJEZWZpbmUgQXJpdGhtZXRpYyBUYWJsZSAweCUwMng6IDB4JTAyeCIpCitKTUVTU0FHRShKVFJDX0RIVCwgIkRlZmluZSBIdWZmbWFuIFRhYmxlIDB4JTAyeCIpCitKTUVTU0FHRShKVFJDX0RRVCwgIkRlZmluZSBRdWFudGl6YXRpb24gVGFibGUgJWQgIHByZWNpc2lvbiAlZCIpCitKTUVTU0FHRShKVFJDX0RSSSwgIkRlZmluZSBSZXN0YXJ0IEludGVydmFsICV1IikKK0pNRVNTQUdFKEpUUkNfRU1TX0NMT1NFLCAiRnJlZWQgRU1TIGhhbmRsZSAldSIpCitKTUVTU0FHRShKVFJDX0VNU19PUEVOLCAiT2J0YWluZWQgRU1TIGhhbmRsZSAldSIpCitKTUVTU0FHRShKVFJDX0VPSSwgIkVuZCBPZiBJbWFnZSIpCitKTUVTU0FHRShKVFJDX0hVRkZCSVRTLCAiICAgICAgICAlM2QgJTNkICUzZCAlM2QgJTNkICUzZCAlM2QgJTNkIikKK0pNRVNTQUdFKEpUUkNfSkZJRiwgIkpGSUYgQVBQMCBtYXJrZXI6IHZlcnNpb24gJWQuJTAyZCwgZGVuc2l0eSAlZHglZCAgJWQiKQorSk1FU1NBR0UoSlRSQ19KRklGX0JBRFRIVU1CTkFJTFNJWkUsCisJICJXYXJuaW5nOiB0aHVtYm5haWwgaW1hZ2Ugc2l6ZSBkb2VzIG5vdCBtYXRjaCBkYXRhIGxlbmd0aCAldSIpCitKTUVTU0FHRShKVFJDX0pGSUZfRVhURU5TSU9OLAorCSAiSkZJRiBleHRlbnNpb24gbWFya2VyOiB0eXBlIDB4JTAyeCwgbGVuZ3RoICV1IikKK0pNRVNTQUdFKEpUUkNfSkZJRl9USFVNQk5BSUwsICIgICAgd2l0aCAlZCB4ICVkIHRodW1ibmFpbCBpbWFnZSIpCitKTUVTU0FHRShKVFJDX01JU0NfTUFSS0VSLCAiTWlzY2VsbGFuZW91cyBtYXJrZXIgMHglMDJ4LCBsZW5ndGggJXUiKQorSk1FU1NBR0UoSlRSQ19QQVJNTEVTU19NQVJLRVIsICJVbmV4cGVjdGVkIG1hcmtlciAweCUwMngiKQorSk1FU1NBR0UoSlRSQ19RVUFOVFZBTFMsICIgICAgICAgICU0dSAlNHUgJTR1ICU0dSAlNHUgJTR1ICU0dSAlNHUiKQorSk1FU1NBR0UoSlRSQ19RVUFOVF8zX05DT0xPUlMsICJRdWFudGl6aW5nIHRvICVkID0gJWQqJWQqJWQgY29sb3JzIikKK0pNRVNTQUdFKEpUUkNfUVVBTlRfTkNPTE9SUywgIlF1YW50aXppbmcgdG8gJWQgY29sb3JzIikKK0pNRVNTQUdFKEpUUkNfUVVBTlRfU0VMRUNURUQsICJTZWxlY3RlZCAlZCBjb2xvcnMgZm9yIHF1YW50aXphdGlvbiIpCitKTUVTU0FHRShKVFJDX1JFQ09WRVJZX0FDVElPTiwgIkF0IG1hcmtlciAweCUwMngsIHJlY292ZXJ5IGFjdGlvbiAlZCIpCitKTUVTU0FHRShKVFJDX1JTVCwgIlJTVCVkIikKK0pNRVNTQUdFKEpUUkNfU01PT1RIX05PVElNUEwsCisJICJTbW9vdGhpbmcgbm90IHN1cHBvcnRlZCB3aXRoIG5vbnN0YW5kYXJkIHNhbXBsaW5nIHJhdGlvcyIpCitKTUVTU0FHRShKVFJDX1NPRiwgIlN0YXJ0IE9mIEZyYW1lIDB4JTAyeDogd2lkdGg9JXUsIGhlaWdodD0ldSwgY29tcG9uZW50cz0lZCIpCitKTUVTU0FHRShKVFJDX1NPRl9DT01QT05FTlQsICIgICAgQ29tcG9uZW50ICVkOiAlZGh4JWR2IHE9JWQiKQorSk1FU1NBR0UoSlRSQ19TT0ksICJTdGFydCBvZiBJbWFnZSIpCitKTUVTU0FHRShKVFJDX1NPUywgIlN0YXJ0IE9mIFNjYW46ICVkIGNvbXBvbmVudHMiKQorSk1FU1NBR0UoSlRSQ19TT1NfQ09NUE9ORU5ULCAiICAgIENvbXBvbmVudCAlZDogZGM9JWQgYWM9JWQiKQorSk1FU1NBR0UoSlRSQ19TT1NfUEFSQU1TLCAiICBTcz0lZCwgU2U9JWQsIEFoPSVkLCBBbD0lZCIpCitKTUVTU0FHRShKVFJDX1RGSUxFX0NMT1NFLCAiQ2xvc2VkIHRlbXBvcmFyeSBmaWxlICVzIikKK0pNRVNTQUdFKEpUUkNfVEZJTEVfT1BFTiwgIk9wZW5lZCB0ZW1wb3JhcnkgZmlsZSAlcyIpCitKTUVTU0FHRShKVFJDX1RIVU1CX0pQRUcsCisJICJKRklGIGV4dGVuc2lvbiBtYXJrZXI6IEpQRUctY29tcHJlc3NlZCB0aHVtYm5haWwgaW1hZ2UsIGxlbmd0aCAldSIpCitKTUVTU0FHRShKVFJDX1RIVU1CX1BBTEVUVEUsCisJICJKRklGIGV4dGVuc2lvbiBtYXJrZXI6IHBhbGV0dGUgdGh1bWJuYWlsIGltYWdlLCBsZW5ndGggJXUiKQorSk1FU1NBR0UoSlRSQ19USFVNQl9SR0IsCisJICJKRklGIGV4dGVuc2lvbiBtYXJrZXI6IFJHQiB0aHVtYm5haWwgaW1hZ2UsIGxlbmd0aCAldSIpCitKTUVTU0FHRShKVFJDX1VOS05PV05fSURTLAorCSAiVW5yZWNvZ25pemVkIGNvbXBvbmVudCBJRHMgJWQgJWQgJWQsIGFzc3VtaW5nIFlDYkNyIikKK0pNRVNTQUdFKEpUUkNfWE1TX0NMT1NFLCAiRnJlZWQgWE1TIGhhbmRsZSAldSIpCitKTUVTU0FHRShKVFJDX1hNU19PUEVOLCAiT2J0YWluZWQgWE1TIGhhbmRsZSAldSIpCitKTUVTU0FHRShKV1JOX0FET0JFX1hGT1JNLCAiVW5rbm93biBBZG9iZSBjb2xvciB0cmFuc2Zvcm0gY29kZSAlZCIpCitKTUVTU0FHRShKV1JOX0JPR1VTX1BST0dSRVNTSU9OLAorCSAiSW5jb25zaXN0ZW50IHByb2dyZXNzaW9uIHNlcXVlbmNlIGZvciBjb21wb25lbnQgJWQgY29lZmZpY2llbnQgJWQiKQorSk1FU1NBR0UoSldSTl9FWFRSQU5FT1VTX0RBVEEsCisJICJDb3JydXB0IEpQRUcgZGF0YTogJXUgZXh0cmFuZW91cyBieXRlcyBiZWZvcmUgbWFya2VyIDB4JTAyeCIpCitKTUVTU0FHRShKV1JOX0hJVF9NQVJLRVIsICJDb3JydXB0IEpQRUcgZGF0YTogcHJlbWF0dXJlIGVuZCBvZiBkYXRhIHNlZ21lbnQiKQorSk1FU1NBR0UoSldSTl9IVUZGX0JBRF9DT0RFLCAiQ29ycnVwdCBKUEVHIGRhdGE6IGJhZCBIdWZmbWFuIGNvZGUiKQorSk1FU1NBR0UoSldSTl9KRklGX01BSk9SLCAiV2FybmluZzogdW5rbm93biBKRklGIHJldmlzaW9uIG51bWJlciAlZC4lMDJkIikKK0pNRVNTQUdFKEpXUk5fSlBFR19FT0YsICJQcmVtYXR1cmUgZW5kIG9mIEpQRUcgZmlsZSIpCitKTUVTU0FHRShKV1JOX01VU1RfUkVTWU5DLAorCSAiQ29ycnVwdCBKUEVHIGRhdGE6IGZvdW5kIG1hcmtlciAweCUwMnggaW5zdGVhZCBvZiBSU1QlZCIpCitKTUVTU0FHRShKV1JOX05PVF9TRVFVRU5USUFMLCAiSW52YWxpZCBTT1MgcGFyYW1ldGVycyBmb3Igc2VxdWVudGlhbCBKUEVHIikKK0pNRVNTQUdFKEpXUk5fVE9PX01VQ0hfREFUQSwgIkFwcGxpY2F0aW9uIHRyYW5zZmVycmVkIHRvbyBtYW55IHNjYW5saW5lcyIpCisKKyNpZmRlZiBKTUFLRV9FTlVNX0xJU1QKKworICBKTVNHX0xBU1RNU0dDT0RFCit9IEpfTUVTU0FHRV9DT0RFOworCisjdW5kZWYgSk1BS0VfRU5VTV9MSVNUCisjZW5kaWYgLyogSk1BS0VfRU5VTV9MSVNUICovCisKKy8qIFphcCBKTUVTU0FHRSBtYWNybyBzbyB0aGF0IGZ1dHVyZSByZS1pbmNsdXNpb25zIGRvIG5vdGhpbmcgYnkgZGVmYXVsdCAqLworI3VuZGVmIEpNRVNTQUdFCisKKworI2lmbmRlZiBKRVJST1JfSAorI2RlZmluZSBKRVJST1JfSAorCisvKiBNYWNyb3MgdG8gc2ltcGxpZnkgdXNpbmcgdGhlIGVycm9yIGFuZCB0cmFjZSBtZXNzYWdlIHN0dWZmICovCisvKiBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIGVpdGhlciB0eXBlIG9mIGNpbmZvIHBvaW50ZXIgKi8KKworLyogRmF0YWwgZXJyb3JzIChwcmludCBtZXNzYWdlIGFuZCBleGl0KSAqLworI2RlZmluZSBFUlJFWElUKGNpbmZvLGNvZGUpICBcCisgICgoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpLCBcCisgICAoKihjaW5mbyktPmVyci0+ZXJyb3JfZXhpdCkgKChqX2NvbW1vbl9wdHIpIChjaW5mbykpKQorI2RlZmluZSBFUlJFWElUMShjaW5mbyxjb2RlLHAxKSAgXAorICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXAorICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzBdID0gKHAxKSwgXAorICAgKCooY2luZm8pLT5lcnItPmVycm9yX2V4aXQpICgoal9jb21tb25fcHRyKSAoY2luZm8pKSkKKyNkZWZpbmUgRVJSRVhJVDIoY2luZm8sY29kZSxwMSxwMikgIFwKKyAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwKKyAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVswXSA9IChwMSksIFwKKyAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVsxXSA9IChwMiksIFwKKyAgICgqKGNpbmZvKS0+ZXJyLT5lcnJvcl9leGl0KSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSkpCisjZGVmaW5lIEVSUkVYSVQzKGNpbmZvLGNvZGUscDEscDIscDMpICBcCisgICgoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpLCBcCisgICAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmlbMF0gPSAocDEpLCBcCisgICAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmlbMV0gPSAocDIpLCBcCisgICAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmlbMl0gPSAocDMpLCBcCisgICAoKihjaW5mbyktPmVyci0+ZXJyb3JfZXhpdCkgKChqX2NvbW1vbl9wdHIpIChjaW5mbykpKQorI2RlZmluZSBFUlJFWElUNChjaW5mbyxjb2RlLHAxLHAyLHAzLHA0KSAgXAorICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXAorICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzBdID0gKHAxKSwgXAorICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzFdID0gKHAyKSwgXAorICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzJdID0gKHAzKSwgXAorICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzNdID0gKHA0KSwgXAorICAgKCooY2luZm8pLT5lcnItPmVycm9yX2V4aXQpICgoal9jb21tb25fcHRyKSAoY2luZm8pKSkKKyNkZWZpbmUgRVJSRVhJVFMoY2luZm8sY29kZSxzdHIpICBcCisgICgoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpLCBcCisgICBGWFNZU19zdHJuY3B5KChjaW5mbyktPmVyci0+bXNnX3Bhcm0ucywgKHN0ciksIEpNU0dfU1RSX1BBUk1fTUFYKSwgXAorICAgKCooY2luZm8pLT5lcnItPmVycm9yX2V4aXQpICgoal9jb21tb25fcHRyKSAoY2luZm8pKSkKKworI2RlZmluZSBNQUtFU1RNVChzdHVmZikJCWRvIHsgc3R1ZmYgfSB3aGlsZSAoMCkKKworLyogTm9uZmF0YWwgZXJyb3JzICh3ZSBjYW4ga2VlcCBnb2luZywgYnV0IHRoZSBkYXRhIGlzIHByb2JhYmx5IGNvcnJ1cHQpICovCisjZGVmaW5lIFdBUk5NUyhjaW5mbyxjb2RlKSAgXAorICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXAorICAgKCooY2luZm8pLT5lcnItPmVtaXRfbWVzc2FnZSkgKChqX2NvbW1vbl9wdHIpIChjaW5mbyksIC0xKSkKKyNkZWZpbmUgV0FSTk1TMShjaW5mbyxjb2RlLHAxKSAgXAorICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXAorICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzBdID0gKHAxKSwgXAorICAgKCooY2luZm8pLT5lcnItPmVtaXRfbWVzc2FnZSkgKChqX2NvbW1vbl9wdHIpIChjaW5mbyksIC0xKSkKKyNkZWZpbmUgV0FSTk1TMihjaW5mbyxjb2RlLHAxLHAyKSAgXAorICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXAorICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzBdID0gKHAxKSwgXAorICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzFdID0gKHAyKSwgXAorICAgKCooY2luZm8pLT5lcnItPmVtaXRfbWVzc2FnZSkgKChqX2NvbW1vbl9wdHIpIChjaW5mbyksIC0xKSkKKworLyogSW5mb3JtYXRpb25hbC9kZWJ1Z2dpbmcgbWVzc2FnZXMgKi8KKyNkZWZpbmUgVFJBQ0VNUyhjaW5mbyxsdmwsY29kZSkgIFwKKyAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwKKyAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKSAoY2luZm8pLCAobHZsKSkpCisjZGVmaW5lIFRSQUNFTVMxKGNpbmZvLGx2bCxjb2RlLHAxKSAgXAorICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXAorICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzBdID0gKHAxKSwgXAorICAgKCooY2luZm8pLT5lcnItPmVtaXRfbWVzc2FnZSkgKChqX2NvbW1vbl9wdHIpIChjaW5mbyksIChsdmwpKSkKKyNkZWZpbmUgVFJBQ0VNUzIoY2luZm8sbHZsLGNvZGUscDEscDIpICBcCisgICgoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpLCBcCisgICAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmlbMF0gPSAocDEpLCBcCisgICAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmlbMV0gPSAocDIpLCBcCisgICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSwgKGx2bCkpKQorI2RlZmluZSBUUkFDRU1TMyhjaW5mbyxsdmwsY29kZSxwMSxwMixwMykgIFwKKyAgTUFLRVNUTVQoaW50ICogX21wID0gKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pOyBcCisJICAgX21wWzBdID0gKHAxKTsgX21wWzFdID0gKHAyKTsgX21wWzJdID0gKHAzKTsgXAorCSAgIChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSk7IFwKKwkgICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSwgKGx2bCkpOyApCisjZGVmaW5lIFRSQUNFTVM0KGNpbmZvLGx2bCxjb2RlLHAxLHAyLHAzLHA0KSAgXAorICBNQUtFU1RNVChpbnQgKiBfbXAgPSAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmk7IFwKKwkgICBfbXBbMF0gPSAocDEpOyBfbXBbMV0gPSAocDIpOyBfbXBbMl0gPSAocDMpOyBfbXBbM10gPSAocDQpOyBcCisJICAgKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKTsgXAorCSAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKSAoY2luZm8pLCAobHZsKSk7ICkKKyNkZWZpbmUgVFJBQ0VNUzUoY2luZm8sbHZsLGNvZGUscDEscDIscDMscDQscDUpICBcCisgIE1BS0VTVE1UKGludCAqIF9tcCA9IChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaTsgXAorCSAgIF9tcFswXSA9IChwMSk7IF9tcFsxXSA9IChwMik7IF9tcFsyXSA9IChwMyk7IF9tcFszXSA9IChwNCk7IFwKKwkgICBfbXBbNF0gPSAocDUpOyBcCisJICAgKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKTsgXAorCSAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKSAoY2luZm8pLCAobHZsKSk7ICkKKyNkZWZpbmUgVFJBQ0VNUzgoY2luZm8sbHZsLGNvZGUscDEscDIscDMscDQscDUscDYscDcscDgpICBcCisgIE1BS0VTVE1UKGludCAqIF9tcCA9IChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaTsgXAorCSAgIF9tcFswXSA9IChwMSk7IF9tcFsxXSA9IChwMik7IF9tcFsyXSA9IChwMyk7IF9tcFszXSA9IChwNCk7IFwKKwkgICBfbXBbNF0gPSAocDUpOyBfbXBbNV0gPSAocDYpOyBfbXBbNl0gPSAocDcpOyBfbXBbN10gPSAocDgpOyBcCisJICAgKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKTsgXAorCSAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKSAoY2luZm8pLCAobHZsKSk7ICkKKyNkZWZpbmUgVFJBQ0VNU1MoY2luZm8sbHZsLGNvZGUsc3RyKSAgXAorICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXAorICAgRlhTWVNfc3RybmNweSgoY2luZm8pLT5lcnItPm1zZ19wYXJtLnMsIChzdHIpLCBKTVNHX1NUUl9QQVJNX01BWCksIFwKKyAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKSAoY2luZm8pLCAobHZsKSkpCisKKyNlbmRpZiAvKiBKRVJST1JfSCAqLwpkaWZmIC0tZ2l0IGEvY29yZS9pbmNsdWRlL3RoaXJkcGFydGllcy9saWJqcGVnL2ptb3JlY2ZnLmggYi9jb3JlL2luY2x1ZGUvdGhpcmRwYXJ0aWVzL2xpYmpwZWcvam1vcmVjZmcuaAppbmRleCAzNjAyMTE0Li44OGQyMTA5IDEwMDY0NAotLS0gYS9jb3JlL2luY2x1ZGUvdGhpcmRwYXJ0aWVzL2xpYmpwZWcvam1vcmVjZmcuaAorKysgYi9jb3JlL2luY2x1ZGUvdGhpcmRwYXJ0aWVzL2xpYmpwZWcvam1vcmVjZmcuaApAQCAtMSwzNzYgKzEsMzc2IEBACi0vKg0KLSAqIGptb3JlY2ZnLmgNCi0gKg0KLSAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4NCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLg0KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4NCi0gKg0KLSAqIFRoaXMgZmlsZSBjb250YWlucyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGN1c3RvbWl6ZSB0aGUNCi0gKiBKUEVHIHNvZnR3YXJlIGZvciBzcGVjaWFsIGFwcGxpY2F0aW9ucyBvciBzdXBwb3J0IG1hY2hpbmUtZGVwZW5kZW50DQotICogb3B0aW1pemF0aW9ucy4gIE1vc3QgdXNlcnMgd2lsbCBub3QgbmVlZCB0byB0b3VjaCB0aGlzIGZpbGUuDQotICovDQotDQotI2lmZGVmIF9NU0NfVkVSDQotI3ByYWdtYSB3YXJuaW5nIChkaXNhYmxlIDogNDE0MikNCi0jZW5kaWYNCi0NCi0vKg0KLSAqIERlZmluZSBCSVRTX0lOX0pTQU1QTEUgYXMgZWl0aGVyDQotICogICA4ICAgZm9yIDgtYml0IHNhbXBsZSB2YWx1ZXMgKHRoZSB1c3VhbCBzZXR0aW5nKQ0KLSAqICAgMTIgIGZvciAxMi1iaXQgc2FtcGxlIHZhbHVlcw0KLSAqIE9ubHkgOCBhbmQgMTIgYXJlIGxlZ2FsIGRhdGEgcHJlY2lzaW9ucyBmb3IgbG9zc3kgSlBFRyBhY2NvcmRpbmcgdG8gdGhlDQotICogSlBFRyBzdGFuZGFyZCwgYW5kIHRoZSBJSkcgY29kZSBkb2VzIG5vdCBzdXBwb3J0IGFueXRoaW5nIGVsc2UhDQotICogV2UgZG8gbm90IHN1cHBvcnQgcnVuLXRpbWUgc2VsZWN0aW9uIG9mIGRhdGEgcHJlY2lzaW9uLCBzb3JyeS4NCi0gKi8NCi0NCi0jZGVmaW5lIEJJVFNfSU5fSlNBTVBMRSAgOAkvKiB1c2UgOCBvciAxMiAqLw0KLQ0KLQ0KLS8qDQotICogTWF4aW11bSBudW1iZXIgb2YgY29tcG9uZW50cyAoY29sb3IgY2hhbm5lbHMpIGFsbG93ZWQgaW4gSlBFRyBpbWFnZS4NCi0gKiBUbyBtZWV0IHRoZSBsZXR0ZXIgb2YgdGhlIEpQRUcgc3BlYywgc2V0IHRoaXMgdG8gMjU1LiAgSG93ZXZlciwgZGFybg0KLSAqIGZldyBhcHBsaWNhdGlvbnMgbmVlZCBtb3JlIHRoYW4gNCBjaGFubmVscyAobWF5YmUgNSBmb3IgQ01ZSyArIGFscGhhDQotICogbWFzaykuICBXZSByZWNvbW1lbmQgMTAgYXMgYSByZWFzb25hYmxlIGNvbXByb21pc2U7IHVzZSA0IGlmIHlvdSBhcmUNCi0gKiByZWFsbHkgc2hvcnQgb24gbWVtb3J5LiAgKEVhY2ggYWxsb3dlZCBjb21wb25lbnQgY29zdHMgYSBodW5kcmVkIG9yIHNvDQotICogYnl0ZXMgb2Ygc3RvcmFnZSwgd2hldGhlciBhY3R1YWxseSB1c2VkIGluIGFuIGltYWdlIG9yIG5vdC4pDQotICovDQotDQotI2RlZmluZSBNQVhfQ09NUE9ORU5UUyAgMTAJLyogbWF4aW11bSBudW1iZXIgb2YgaW1hZ2UgY29tcG9uZW50cyAqLw0KLQ0KLQ0KLS8qDQotICogQmFzaWMgZGF0YSB0eXBlcy4NCi0gKiBZb3UgbWF5IG5lZWQgdG8gY2hhbmdlIHRoZXNlIGlmIHlvdSBoYXZlIGEgbWFjaGluZSB3aXRoIHVudXN1YWwgZGF0YQ0KLSAqIHR5cGUgc2l6ZXM7IGZvciBleGFtcGxlLCAiY2hhciIgbm90IDggYml0cywgInNob3J0IiBub3QgMTYgYml0cywNCi0gKiBvciAibG9uZyIgbm90IDMyIGJpdHMuICBXZSBkb24ndCBjYXJlIHdoZXRoZXIgImludCIgaXMgMTYgb3IgMzIgYml0cywNCi0gKiBidXQgaXQgaGFkIGJldHRlciBiZSBhdCBsZWFzdCAxNi4NCi0gKi8NCi0NCi0vKiBSZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZSBzYW1wbGUgKHBpeGVsIGVsZW1lbnQgdmFsdWUpLg0KLSAqIFdlIGZyZXF1ZW50bHkgYWxsb2NhdGUgbGFyZ2UgYXJyYXlzIG9mIHRoZXNlLCBzbyBpdCdzIGltcG9ydGFudCB0byBrZWVwDQotICogdGhlbSBzbWFsbC4gIEJ1dCBpZiB5b3UgaGF2ZSBtZW1vcnkgdG8gYnVybiBhbmQgYWNjZXNzIHRvIGNoYXIgb3Igc2hvcnQNCi0gKiBhcnJheXMgaXMgdmVyeSBzbG93IG9uIHlvdXIgaGFyZHdhcmUsIHlvdSBtaWdodCB3YW50IHRvIGNoYW5nZSB0aGVzZS4NCi0gKi8NCi0NCi0jaWYgQklUU19JTl9KU0FNUExFID09IDgNCi0vKiBKU0FNUExFIHNob3VsZCBiZSB0aGUgc21hbGxlc3QgdHlwZSB0aGF0IHdpbGwgaG9sZCB0aGUgdmFsdWVzIDAuLjI1NS4NCi0gKiBZb3UgY2FuIHVzZSBhIHNpZ25lZCBjaGFyIGJ5IGhhdmluZyBHRVRKU0FNUExFIG1hc2sgaXQgd2l0aCAweEZGLg0KLSAqLw0KLQ0KLSNpZmRlZiBIQVZFX1VOU0lHTkVEX0NIQVINCi0NCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgSlNBTVBMRTsNCi0jZGVmaW5lIEdFVEpTQU1QTEUodmFsdWUpICAoKGludCkgKHZhbHVlKSkNCi0NCi0jZWxzZSAvKiBub3QgSEFWRV9VTlNJR05FRF9DSEFSICovDQotDQotdHlwZWRlZiBjaGFyIEpTQU1QTEU7DQotI2lmZGVmIENIQVJfSVNfVU5TSUdORUQNCi0jZGVmaW5lIEdFVEpTQU1QTEUodmFsdWUpICAoKGludCkgKHZhbHVlKSkNCi0jZWxzZQ0KLSNkZWZpbmUgR0VUSlNBTVBMRSh2YWx1ZSkgICgoaW50KSAodmFsdWUpICYgMHhGRikNCi0jZW5kaWYgLyogQ0hBUl9JU19VTlNJR05FRCAqLw0KLQ0KLSNlbmRpZiAvKiBIQVZFX1VOU0lHTkVEX0NIQVIgKi8NCi0NCi0jZGVmaW5lIE1BWEpTQU1QTEUJMjU1DQotI2RlZmluZSBDRU5URVJKU0FNUExFCTEyOA0KLQ0KLSNlbmRpZiAvKiBCSVRTX0lOX0pTQU1QTEUgPT0gOCAqLw0KLQ0KLQ0KLSNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gMTINCi0vKiBKU0FNUExFIHNob3VsZCBiZSB0aGUgc21hbGxlc3QgdHlwZSB0aGF0IHdpbGwgaG9sZCB0aGUgdmFsdWVzIDAuLjQwOTUuDQotICogT24gbmVhcmx5IGFsbCBtYWNoaW5lcyAic2hvcnQiIHdpbGwgZG8gbmljZWx5Lg0KLSAqLw0KLQ0KLXR5cGVkZWYgc2hvcnQgSlNBTVBMRTsNCi0jZGVmaW5lIEdFVEpTQU1QTEUodmFsdWUpICAoKGludCkgKHZhbHVlKSkNCi0NCi0jZGVmaW5lIE1BWEpTQU1QTEUJNDA5NQ0KLSNkZWZpbmUgQ0VOVEVSSlNBTVBMRQkyMDQ4DQotDQotI2VuZGlmIC8qIEJJVFNfSU5fSlNBTVBMRSA9PSAxMiAqLw0KLQ0KLQ0KLS8qIFJlcHJlc2VudGF0aW9uIG9mIGEgRENUIGZyZXF1ZW5jeSBjb2VmZmljaWVudC4NCi0gKiBUaGlzIHNob3VsZCBiZSBhIHNpZ25lZCB2YWx1ZSBvZiBhdCBsZWFzdCAxNiBiaXRzOyAic2hvcnQiIGlzIHVzdWFsbHkgT0suDQotICogQWdhaW4sIHdlIGFsbG9jYXRlIGxhcmdlIGFycmF5cyBvZiB0aGVzZSwgYnV0IHlvdSBjYW4gY2hhbmdlIHRvIGludA0KLSAqIGlmIHlvdSBoYXZlIG1lbW9yeSB0byBidXJuIGFuZCAic2hvcnQiIGlzIHJlYWxseSBzbG93Lg0KLSAqLw0KLQ0KLXR5cGVkZWYgc2hvcnQgSkNPRUY7DQotDQotDQotLyogQ29tcHJlc3NlZCBkYXRhc3RyZWFtcyBhcmUgcmVwcmVzZW50ZWQgYXMgYXJyYXlzIG9mIEpPQ1RFVC4NCi0gKiBUaGVzZSBtdXN0IGJlIEVYQUNUTFkgOCBiaXRzIHdpZGUsIGF0IGxlYXN0IG9uY2UgdGhleSBhcmUgd3JpdHRlbiB0bw0KLSAqIGV4dGVybmFsIHN0b3JhZ2UuICBOb3RlIHRoYXQgd2hlbiB1c2luZyB0aGUgc3RkaW8gZGF0YSBzb3VyY2UvZGVzdGluYXRpb24NCi0gKiBtYW5hZ2VycywgdGhpcyBpcyBhbHNvIHRoZSBkYXRhIHR5cGUgcGFzc2VkIHRvIGZyZWFkL2Z3cml0ZS4NCi0gKi8NCi0NCi0jaWZkZWYgSEFWRV9VTlNJR05FRF9DSEFSDQotDQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIEpPQ1RFVDsNCi0jZGVmaW5lIEdFVEpPQ1RFVCh2YWx1ZSkgICh2YWx1ZSkNCi0NCi0jZWxzZSAvKiBub3QgSEFWRV9VTlNJR05FRF9DSEFSICovDQotDQotdHlwZWRlZiBjaGFyIEpPQ1RFVDsNCi0jaWZkZWYgQ0hBUl9JU19VTlNJR05FRA0KLSNkZWZpbmUgR0VUSk9DVEVUKHZhbHVlKSAgKHZhbHVlKQ0KLSNlbHNlDQotI2RlZmluZSBHRVRKT0NURVQodmFsdWUpICAoKHZhbHVlKSAmIDB4RkYpDQotI2VuZGlmIC8qIENIQVJfSVNfVU5TSUdORUQgKi8NCi0NCi0jZW5kaWYgLyogSEFWRV9VTlNJR05FRF9DSEFSICovDQotDQotDQotLyogVGhlc2UgdHlwZWRlZnMgYXJlIHVzZWQgZm9yIHZhcmlvdXMgdGFibGUgZW50cmllcyBhbmQgc28gZm9ydGguDQotICogVGhleSBtdXN0IGJlIGF0IGxlYXN0IGFzIHdpZGUgYXMgc3BlY2lmaWVkOyBidXQgbWFraW5nIHRoZW0gdG9vIGJpZw0KLSAqIHdvbid0IGNvc3QgYSBodWdlIGFtb3VudCBvZiBtZW1vcnksIHNvIHdlIGRvbid0IHByb3ZpZGUgc3BlY2lhbA0KLSAqIGV4dHJhY3Rpb24gY29kZSBsaWtlIHdlIGRpZCBmb3IgSlNBTVBMRS4gIChJbiBvdGhlciB3b3JkcywgdGhlc2UNCi0gKiB0eXBlZGVmcyBsaXZlIGF0IGEgZGlmZmVyZW50IHBvaW50IG9uIHRoZSBzcGVlZC9zcGFjZSB0cmFkZW9mZiBjdXJ2ZS4pDQotICovDQotDQotI2lmIF9GWF9PU18gIT0gX0ZYX1ZYV09SS1NfDQotDQotLyogVUlOVDggbXVzdCBob2xkIGF0IGxlYXN0IHRoZSB2YWx1ZXMgMC4uMjU1LiAqLw0KLQ0KLSNpZmRlZiBIQVZFX1VOU0lHTkVEX0NIQVINCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUlOVDg7DQotI2Vsc2UgLyogbm90IEhBVkVfVU5TSUdORURfQ0hBUiAqLw0KLSNpZmRlZiBDSEFSX0lTX1VOU0lHTkVEDQotdHlwZWRlZiBjaGFyIFVJTlQ4Ow0KLSNlbHNlIC8qIG5vdCBDSEFSX0lTX1VOU0lHTkVEICovDQotdHlwZWRlZiBzaG9ydCBVSU5UODsNCi0jZW5kaWYgLyogQ0hBUl9JU19VTlNJR05FRCAqLw0KLSNlbmRpZiAvKiBIQVZFX1VOU0lHTkVEX0NIQVIgKi8NCi0NCi0NCi0vKiBVSU5UMTYgbXVzdCBob2xkIGF0IGxlYXN0IHRoZSB2YWx1ZXMgMC4uNjU1MzUuICovDQotDQotI2lmZGVmIEhBVkVfVU5TSUdORURfU0hPUlQNCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVJTlQxNjsNCi0jZWxzZSAvKiBub3QgSEFWRV9VTlNJR05FRF9TSE9SVCAqLw0KLXR5cGVkZWYgdW5zaWduZWQgaW50IFVJTlQxNjsNCi0jZW5kaWYgLyogSEFWRV9VTlNJR05FRF9TSE9SVCAqLw0KLQ0KLS8qIElOVDE2IG11c3QgaG9sZCBhdCBsZWFzdCB0aGUgdmFsdWVzIC0zMjc2OC4uMzI3NjcuICovDQotDQotI2lmbmRlZiBYTURfSAkJCS8qIFgxMS94bWQuaCBjb3JyZWN0bHkgZGVmaW5lcyBJTlQxNiAqLw0KLXR5cGVkZWYgc2hvcnQgSU5UMTY7DQotI2VuZGlmDQotDQotLyogSU5UMzIgbXVzdCBob2xkIGF0IGxlYXN0IHNpZ25lZCAzMi1iaXQgdmFsdWVzLiAqLw0KLQ0KLSNpZm5kZWYgWE1EX0gJCQkvKiBYMTEveG1kLmggY29ycmVjdGx5IGRlZmluZXMgSU5UMzIgKi8NCi10eXBlZGVmIGludCBJTlQzMjsNCi0jZW5kaWYNCi0NCi0jZW5kaWYgDQotDQotLyogRGF0YXR5cGUgdXNlZCBmb3IgaW1hZ2UgZGltZW5zaW9ucy4gIFRoZSBKUEVHIHN0YW5kYXJkIG9ubHkgc3VwcG9ydHMNCi0gKiBpbWFnZXMgdXAgdG8gNjRLKjY0SyBkdWUgdG8gMTYtYml0IGZpZWxkcyBpbiBTT0YgbWFya2Vycy4gIFRoZXJlZm9yZQ0KLSAqICJ1bnNpZ25lZCBpbnQiIGlzIHN1ZmZpY2llbnQgb24gYWxsIG1hY2hpbmVzLiAgSG93ZXZlciwgaWYgeW91IG5lZWQgdG8NCi0gKiBoYW5kbGUgbGFyZ2VyIGltYWdlcyBhbmQgeW91IGRvbid0IG1pbmQgZGV2aWF0aW5nIGZyb20gdGhlIHNwZWMsIHlvdQ0KLSAqIGNhbiBjaGFuZ2UgdGhpcyBkYXRhdHlwZS4NCi0gKi8NCi0NCi10eXBlZGVmIHVuc2lnbmVkIGludCBKRElNRU5TSU9OOw0KLQ0KLSNkZWZpbmUgSlBFR19NQVhfRElNRU5TSU9OICA2NTUwMEwgIC8qIGEgdGFkIHVuZGVyIDY0SyB0byBwcmV2ZW50IG92ZXJmbG93cyAqLw0KLQ0KLQ0KLS8qIFRoZXNlIG1hY3JvcyBhcmUgdXNlZCBpbiBhbGwgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYW5kIGV4dGVybiBkZWNsYXJhdGlvbnMuDQotICogWW91IGNvdWxkIG1vZGlmeSB0aGVtIGlmIHlvdSBuZWVkIHRvIGNoYW5nZSBmdW5jdGlvbiBsaW5rYWdlIGNvbnZlbnRpb25zOw0KLSAqIGluIHBhcnRpY3VsYXIsIHlvdSdsbCBuZWVkIHRvIGRvIHRoYXQgdG8gbWFrZSB0aGUgbGlicmFyeSBhIFdpbmRvd3MgRExMLg0KLSAqIEFub3RoZXIgYXBwbGljYXRpb24gaXMgdG8gbWFrZSBhbGwgZnVuY3Rpb25zIGdsb2JhbCBmb3IgdXNlIHdpdGggZGVidWdnZXJzDQotICogb3IgY29kZSBwcm9maWxlcnMgdGhhdCByZXF1aXJlIGl0Lg0KLSAqLw0KLQ0KLS8qIGEgZnVuY3Rpb24gY2FsbGVkIHRocm91Z2ggbWV0aG9kIHBvaW50ZXJzOiAqLw0KLSNkZWZpbmUgTUVUSE9EREVGKHR5cGUpCQlzdGF0aWMgdHlwZQ0KLS8qIGEgZnVuY3Rpb24gdXNlZCBvbmx5IGluIGl0cyBtb2R1bGU6ICovDQotI2RlZmluZSBMT0NBTCh0eXBlKQkJc3RhdGljIHR5cGUNCi0vKiBhIGZ1bmN0aW9uIHJlZmVyZW5jZWQgdGhydSBFWFRFUk5zOiAqLw0KLSNkZWZpbmUgR0xPQkFMKHR5cGUpCQl0eXBlDQotDQotI2lmZGVmIF9GWF9NQU5BR0VEX0NPREVfDQotI2RlZmluZSBFWFRFUk4odHlwZSkJCWV4dGVybiAiQyIgdHlwZQ0KLSNlbHNlDQotLyogYSByZWZlcmVuY2UgdG8gYSBHTE9CQUwgZnVuY3Rpb246ICovDQotI2RlZmluZSBFWFRFUk4odHlwZSkJCWV4dGVybiB0eXBlDQotI2VuZGlmDQotDQotDQotLyogVGhpcyBtYWNybyBpcyB1c2VkIHRvIGRlY2xhcmUgYSAibWV0aG9kIiwgdGhhdCBpcywgYSBmdW5jdGlvbiBwb2ludGVyLg0KLSAqIFdlIHdhbnQgdG8gc3VwcGx5IHByb3RvdHlwZSBwYXJhbWV0ZXJzIGlmIHRoZSBjb21waWxlciBjYW4gY29wZS4NCi0gKiBOb3RlIHRoYXQgdGhlIGFyZ2xpc3QgcGFyYW1ldGVyIG11c3QgYmUgcGFyZW50aGVzaXplZCENCi0gKiBBZ2FpbiwgeW91IGNhbiBjdXN0b21pemUgdGhpcyBpZiB5b3UgbmVlZCBzcGVjaWFsIGxpbmthZ2Uga2V5d29yZHMuDQotICovDQotDQotI2lmZGVmIEhBVkVfUFJPVE9UWVBFUw0KLSNkZWZpbmUgSk1FVEhPRCh0eXBlLG1ldGhvZG5hbWUsYXJnbGlzdCkgIHR5cGUgKCptZXRob2RuYW1lKSBhcmdsaXN0DQotI2Vsc2UNCi0jZGVmaW5lIEpNRVRIT0QodHlwZSxtZXRob2RuYW1lLGFyZ2xpc3QpICB0eXBlICgqbWV0aG9kbmFtZSkgKCkNCi0jZW5kaWYNCi0NCi0NCi0vKiBIZXJlIGlzIHRoZSBwc2V1ZG8ta2V5d29yZCBmb3IgZGVjbGFyaW5nIHBvaW50ZXJzIHRoYXQgbXVzdCBiZSAiZmFyIg0KLSAqIG9uIDgweDg2IG1hY2hpbmVzLiAgTW9zdCBvZiB0aGUgc3BlY2lhbGl6ZWQgY29kaW5nIGZvciA4MHg4NiBpcyBoYW5kbGVkDQotICogYnkganVzdCBzYXlpbmcgIkZBUiAqIiB3aGVyZSBzdWNoIGEgcG9pbnRlciBpcyBuZWVkZWQuICBJbiBhIGZldyBwbGFjZXMNCi0gKiBleHBsaWNpdCBjb2RpbmcgaXMgbmVlZGVkOyBzZWUgdXNlcyBvZiB0aGUgTkVFRF9GQVJfUE9JTlRFUlMgc3ltYm9sLg0KLSAqLw0KLQ0KLSNpZmRlZiBORUVEX0ZBUl9QT0lOVEVSUw0KLSNkZWZpbmUgRkFSICBmYXINCi0jZWxzZQ0KLS8vI2RlZmluZSBGQVINCi0jZW5kaWYNCi0NCi0NCi0vKg0KLSAqIE9uIGEgZmV3IHN5c3RlbXMsIHR5cGUgYm9vbGVhbiBhbmQvb3IgaXRzIHZhbHVlcyBGQUxTRSwgVFJVRSBtYXkgYXBwZWFyDQotICogaW4gc3RhbmRhcmQgaGVhZGVyIGZpbGVzLiAgT3IgeW91IG1heSBoYXZlIGNvbmZsaWN0cyB3aXRoIGFwcGxpY2F0aW9uLQ0KLSAqIHNwZWNpZmljIGhlYWRlciBmaWxlcyB0aGF0IHlvdSB3YW50IHRvIGluY2x1ZGUgdG9nZXRoZXIgd2l0aCB0aGVzZSBmaWxlcy4NCi0gKiBEZWZpbmluZyBIQVZFX0JPT0xFQU4gYmVmb3JlIGluY2x1ZGluZyBqcGVnbGliLmggc2hvdWxkIG1ha2UgaXQgd29yay4NCi0gKi8NCi0NCi0jaWZuZGVmIEhBVkVfQk9PTEVBTg0KLXR5cGVkZWYgaW50IGJvb2xlYW47DQotI2VuZGlmDQotI2lmbmRlZiBGQUxTRQkJCS8qIGluIGNhc2UgdGhlc2UgbWFjcm9zIGFscmVhZHkgZXhpc3QgKi8NCi0jZGVmaW5lIEZBTFNFCTAJCS8qIHZhbHVlcyBvZiBib29sZWFuICovDQotI2VuZGlmDQotI2lmbmRlZiBUUlVFDQotI2RlZmluZSBUUlVFCTENCi0jZW5kaWYNCi0NCi0NCi0vKg0KLSAqIFRoZSByZW1haW5pbmcgb3B0aW9ucyBhZmZlY3QgY29kZSBzZWxlY3Rpb24gd2l0aGluIHRoZSBKUEVHIGxpYnJhcnksDQotICogYnV0IHRoZXkgZG9uJ3QgbmVlZCB0byBiZSB2aXNpYmxlIHRvIG1vc3QgYXBwbGljYXRpb25zIHVzaW5nIHRoZSBsaWJyYXJ5Lg0KLSAqIFRvIG1pbmltaXplIGFwcGxpY2F0aW9uIG5hbWVzcGFjZSBwb2xsdXRpb24sIHRoZSBzeW1ib2xzIHdvbid0IGJlDQotICogZGVmaW5lZCB1bmxlc3MgSlBFR19JTlRFUk5BTFMgb3IgSlBFR19JTlRFUk5BTF9PUFRJT05TIGhhcyBiZWVuIGRlZmluZWQuDQotICovDQotDQotI2lmZGVmIEpQRUdfSU5URVJOQUxTDQotI2RlZmluZSBKUEVHX0lOVEVSTkFMX09QVElPTlMNCi0jZW5kaWYNCi0NCi0jaWZkZWYgSlBFR19JTlRFUk5BTF9PUFRJT05TDQotDQotDQotLyoNCi0gKiBUaGVzZSBkZWZpbmVzIGluZGljYXRlIHdoZXRoZXIgdG8gaW5jbHVkZSB2YXJpb3VzIG9wdGlvbmFsIGZ1bmN0aW9ucy4NCi0gKiBVbmRlZmluaW5nIHNvbWUgb2YgdGhlc2Ugc3ltYm9scyB3aWxsIHByb2R1Y2UgYSBzbWFsbGVyIGJ1dCBsZXNzIGNhcGFibGUNCi0gKiBsaWJyYXJ5LiAgTm90ZSB0aGF0IHlvdSBjYW4gbGVhdmUgY2VydGFpbiBzb3VyY2UgZmlsZXMgb3V0IG9mIHRoZQ0KLSAqIGNvbXBpbGF0aW9uL2xpbmtpbmcgcHJvY2VzcyBpZiB5b3UndmUgI3VuZGVmJ2QgdGhlIGNvcnJlc3BvbmRpbmcgc3ltYm9scy4NCi0gKiAoWW91IG1heSBIQVZFIHRvIGRvIHRoYXQgaWYgeW91ciBjb21waWxlciBkb2Vzbid0IGxpa2UgbnVsbCBzb3VyY2UgZmlsZXMuKQ0KLSAqLw0KLQ0KLS8qIEFyaXRobWV0aWMgY29kaW5nIGlzIHVuc3VwcG9ydGVkIGZvciBsZWdhbCByZWFzb25zLiAgQ29tcGxhaW50cyB0byBJQk0uICovDQotDQotLyogQ2FwYWJpbGl0eSBvcHRpb25zIGNvbW1vbiB0byBlbmNvZGVyIGFuZCBkZWNvZGVyOiAqLw0KLQ0KLSNkZWZpbmUgRENUX0lTTE9XX1NVUFBPUlRFRAkvKiBzbG93IGJ1dCBhY2N1cmF0ZSBpbnRlZ2VyIGFsZ29yaXRobSAqLw0KLSNkZWZpbmUgRENUX0lGQVNUX1NVUFBPUlRFRAkvKiBmYXN0ZXIsIGxlc3MgYWNjdXJhdGUgaW50ZWdlciBtZXRob2QgKi8NCi0jdW5kZWYgRENUX0ZMT0FUX1NVUFBPUlRFRAkvKiBmbG9hdGluZy1wb2ludDogYWNjdXJhdGUsIGZhc3Qgb24gZmFzdCBIVyAqLw0KLQ0KLS8qIEVuY29kZXIgY2FwYWJpbGl0eSBvcHRpb25zOiAqLw0KLQ0KLSN1bmRlZiAgQ19BUklUSF9DT0RJTkdfU1VQUE9SVEVEICAgIC8qIEFyaXRobWV0aWMgY29kaW5nIGJhY2sgZW5kPyAqLw0KLSNkZWZpbmUgQ19NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVEIC8qIE11bHRpcGxlLXNjYW4gSlBFRyBmaWxlcz8gKi8NCi0jZGVmaW5lIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVECSAgICAvKiBQcm9ncmVzc2l2ZSBKUEVHPyAoUmVxdWlyZXMgTVVMVElTQ0FOKSovDQotI2RlZmluZSBFTlRST1BZX09QVF9TVVBQT1JURUQJICAgIC8qIE9wdGltaXphdGlvbiBvZiBlbnRyb3B5IGNvZGluZyBwYXJtcz8gKi8NCi0vKiBOb3RlOiBpZiB5b3Ugc2VsZWN0ZWQgMTItYml0IGRhdGEgcHJlY2lzaW9uLCBpdCBpcyBkYW5nZXJvdXMgdG8gdHVybiBvZmYNCi0gKiBFTlRST1BZX09QVF9TVVBQT1JURUQuICBUaGUgc3RhbmRhcmQgSHVmZm1hbiB0YWJsZXMgYXJlIG9ubHkgZ29vZCBmb3IgOC1iaXQNCi0gKiBwcmVjaXNpb24sIHNvIGpjaHVmZi5jIG5vcm1hbGx5IHVzZXMgZW50cm9weSBvcHRpbWl6YXRpb24gdG8gY29tcHV0ZQ0KLSAqIHVzYWJsZSB0YWJsZXMgZm9yIGhpZ2hlciBwcmVjaXNpb24uICBJZiB5b3UgZG9uJ3Qgd2FudCB0byBkbyBvcHRpbWl6YXRpb24sDQotICogeW91J2xsIGhhdmUgdG8gc3VwcGx5IGRpZmZlcmVudCBkZWZhdWx0IEh1ZmZtYW4gdGFibGVzLg0KLSAqIFRoZSBleGFjdCBzYW1lIHN0YXRlbWVudHMgYXBwbHkgZm9yIHByb2dyZXNzaXZlIEpQRUc6IHRoZSBkZWZhdWx0IHRhYmxlcw0KLSAqIGRvbid0IHdvcmsgZm9yIHByb2dyZXNzaXZlIG1vZGUuICAoVGhpcyBtYXkgZ2V0IGZpeGVkLCBob3dldmVyLikNCi0gKi8NCi0jZGVmaW5lIElOUFVUX1NNT09USElOR19TVVBQT1JURUQgICAvKiBJbnB1dCBpbWFnZSBzbW9vdGhpbmcgb3B0aW9uPyAqLw0KLQ0KLS8qIERlY29kZXIgY2FwYWJpbGl0eSBvcHRpb25zOiAqLw0KLQ0KLSN1bmRlZiAgRF9BUklUSF9DT0RJTkdfU1VQUE9SVEVEICAgIC8qIEFyaXRobWV0aWMgY29kaW5nIGJhY2sgZW5kPyAqLw0KLSNkZWZpbmUgRF9NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVEIC8qIE11bHRpcGxlLXNjYW4gSlBFRyBmaWxlcz8gKi8NCi0jZGVmaW5lIERfUFJPR1JFU1NJVkVfU1VQUE9SVEVECSAgICAvKiBQcm9ncmVzc2l2ZSBKUEVHPyAoUmVxdWlyZXMgTVVMVElTQ0FOKSovDQotI2RlZmluZSBTQVZFX01BUktFUlNfU1VQUE9SVEVECSAgICAvKiBqcGVnX3NhdmVfbWFya2VycygpIG5lZWRlZD8gKi8NCi0jZGVmaW5lIEJMT0NLX1NNT09USElOR19TVVBQT1JURUQgICAvKiBCbG9jayBzbW9vdGhpbmc/IChQcm9ncmVzc2l2ZSBvbmx5KSAqLw0KLSNkZWZpbmUgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRAkgICAgLyogT3V0cHV0IHJlc2NhbGluZyB2aWEgSURDVD8gKi8NCi0jdW5kZWYgVVBTQU1QTEVfU0NBTElOR19TVVBQT1JURUQgIC8qIE91dHB1dCByZXNjYWxpbmcgYXQgdXBzYW1wbGUgc3RhZ2U/ICovDQotI2RlZmluZSBVUFNBTVBMRV9NRVJHSU5HX1NVUFBPUlRFRCAgLyogRmFzdCBwYXRoIGZvciBzbG9wcHkgdXBzYW1wbGluZz8gKi8NCi0jdW5kZWYgUVVBTlRfMVBBU1NfU1VQUE9SVEVECSAgICAvKiAxLXBhc3MgY29sb3IgcXVhbnRpemF0aW9uPyAqLw0KLSN1bmRlZiBRVUFOVF8yUEFTU19TVVBQT1JURUQJICAgIC8qIDItcGFzcyBjb2xvciBxdWFudGl6YXRpb24/ICovDQotDQotLyogbW9yZSBjYXBhYmlsaXR5IG9wdGlvbnMgbGF0ZXIsIG5vIGRvdWJ0ICovDQotDQotDQotLyoNCi0gKiBPcmRlcmluZyBvZiBSR0IgZGF0YSBpbiBzY2FubGluZXMgcGFzc2VkIHRvIG9yIGZyb20gdGhlIGFwcGxpY2F0aW9uLg0KLSAqIElmIHlvdXIgYXBwbGljYXRpb24gd2FudHMgdG8gZGVhbCB3aXRoIGRhdGEgaW4gdGhlIG9yZGVyIEIsRyxSLCBqdXN0DQotICogY2hhbmdlIHRoZXNlIG1hY3Jvcy4gIFlvdSBjYW4gYWxzbyBkZWFsIHdpdGggZm9ybWF0cyBzdWNoIGFzIFIsRyxCLFgNCi0gKiAob25lIGV4dHJhIGJ5dGUgcGVyIHBpeGVsKSBieSBjaGFuZ2luZyBSR0JfUElYRUxTSVpFLiAgTm90ZSB0aGF0IGNoYW5naW5nDQotICogdGhlIG9mZnNldHMgd2lsbCBhbHNvIGNoYW5nZSB0aGUgb3JkZXIgaW4gd2hpY2ggY29sb3JtYXAgZGF0YSBpcyBvcmdhbml6ZWQuDQotICogUkVTVFJJQ1RJT05TOg0KLSAqIDEuIFRoZSBzYW1wbGUgYXBwbGljYXRpb25zIGNqcGVnLGRqcGVnIGRvIE5PVCBzdXBwb3J0IG1vZGlmaWVkIFJHQiBmb3JtYXRzLg0KLSAqIDIuIFRoZXNlIG1hY3JvcyBvbmx5IGFmZmVjdCBSR0I8PT5ZQ2JDciBjb2xvciBjb252ZXJzaW9uLCBzbyB0aGV5IGFyZSBub3QNCi0gKiAgICB1c2VmdWwgaWYgeW91IGFyZSB1c2luZyBKUEVHIGNvbG9yIHNwYWNlcyBvdGhlciB0aGFuIFlDYkNyIG9yIGdyYXlzY2FsZS4NCi0gKiAzLiBUaGUgY29sb3IgcXVhbnRpemVyIG1vZHVsZXMgd2lsbCBub3QgYmVoYXZlIGRlc2lyYWJseSBpZiBSR0JfUElYRUxTSVpFDQotICogICAgaXMgbm90IDMgKHRoZXkgZG9uJ3QgdW5kZXJzdGFuZCBhYm91dCBkdW1teSBjb2xvciBjb21wb25lbnRzISkuICBTbyB5b3UNCi0gKiAgICBjYW4ndCB1c2UgY29sb3IgcXVhbnRpemF0aW9uIGlmIHlvdSBjaGFuZ2UgdGhhdCB2YWx1ZS4NCi0gKi8NCi0NCi0jZGVmaW5lIFJHQl9SRUQJCTAJLyogT2Zmc2V0IG9mIFJlZCBpbiBhbiBSR0Igc2NhbmxpbmUgZWxlbWVudCAqLw0KLSNkZWZpbmUgUkdCX0dSRUVOCTEJLyogT2Zmc2V0IG9mIEdyZWVuICovDQotI2RlZmluZSBSR0JfQkxVRQkyCS8qIE9mZnNldCBvZiBCbHVlICovDQotI2RlZmluZSBSR0JfUElYRUxTSVpFCTMJLyogSlNBTVBMRXMgcGVyIFJHQiBzY2FubGluZSBlbGVtZW50ICovDQotDQotDQotLyogRGVmaW5pdGlvbnMgZm9yIHNwZWVkLXJlbGF0ZWQgb3B0aW1pemF0aW9ucy4gKi8NCi0NCi0NCi0vKiBJZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIGlubGluZSBmdW5jdGlvbnMsIGRlZmluZSBJTkxJTkUNCi0gKiBhcyB0aGUgaW5saW5lIGtleXdvcmQ7IG90aGVyd2lzZSBkZWZpbmUgaXQgYXMgZW1wdHkuDQotICovDQotDQotI2lmbmRlZiBJTkxJTkUNCi0jaWZkZWYgX19HTlVDX18JCQkvKiBmb3IgaW5zdGFuY2UsIEdOVSBDIGtub3dzIGFib3V0IGlubGluZSAqLw0KLSNkZWZpbmUgSU5MSU5FIF9faW5saW5lX18NCi0jZW5kaWYNCi0jaWZuZGVmIElOTElORQ0KLSNkZWZpbmUgSU5MSU5FCQkJLyogZGVmYXVsdCBpcyB0byBkZWZpbmUgaXQgYXMgZW1wdHkgKi8NCi0jZW5kaWYNCi0jZW5kaWYNCi0NCi0NCi0vKiBPbiBzb21lIG1hY2hpbmVzIChub3RhYmx5IDY4MDAwIHNlcmllcykgImludCIgaXMgMzIgYml0cywgYnV0IG11bHRpcGx5aW5nDQotICogdHdvIDE2LWJpdCBzaG9ydHMgaXMgZmFzdGVyIHRoYW4gbXVsdGlwbHlpbmcgdHdvIGludHMuICBEZWZpbmUgTVVMVElQTElFUg0KLSAqIGFzIHNob3J0IG9uIHN1Y2ggYSBtYWNoaW5lLiAgTVVMVElQTElFUiBtdXN0IGJlIGF0IGxlYXN0IDE2IGJpdHMgd2lkZS4NCi0gKi8NCi0NCi0jaWZuZGVmIE1VTFRJUExJRVINCi0jZGVmaW5lIE1VTFRJUExJRVIgIGludAkJLyogdHlwZSBmb3IgZmFzdGVzdCBpbnRlZ2VyIG11bHRpcGx5ICovDQotI2VuZGlmDQotDQotDQotLyogRkFTVF9GTE9BVCBzaG91bGQgYmUgZWl0aGVyIGZsb2F0IG9yIGRvdWJsZSwgd2hpY2hldmVyIGlzIGRvbmUgZmFzdGVyDQotICogYnkgeW91ciBjb21waWxlci4gIChOb3RlIHRoYXQgdGhpcyB0eXBlIGlzIG9ubHkgdXNlZCBpbiB0aGUgZmxvYXRpbmcgcG9pbnQNCi0gKiBEQ1Qgcm91dGluZXMsIHNvIGl0IG9ubHkgbWF0dGVycyBpZiB5b3UndmUgZGVmaW5lZCBEQ1RfRkxPQVRfU1VQUE9SVEVELikNCi0gKiBUeXBpY2FsbHksIGZsb2F0IGlzIGZhc3RlciBpbiBBTlNJIEMgY29tcGlsZXJzLCB3aGlsZSBkb3VibGUgaXMgZmFzdGVyIGluDQotICogcHJlLUFOU0kgY29tcGlsZXJzIChiZWNhdXNlIHRoZXkgaW5zaXN0IG9uIGNvbnZlcnRpbmcgdG8gZG91YmxlIGFueXdheSkuDQotICogVGhlIGNvZGUgYmVsb3cgdGhlcmVmb3JlIGNob29zZXMgZmxvYXQgaWYgd2UgaGF2ZSBBTlNJLXN0eWxlIHByb3RvdHlwZXMuDQotICovDQotDQotI2lmbmRlZiBGQVNUX0ZMT0FUDQotI2lmZGVmIEhBVkVfUFJPVE9UWVBFUw0KLSNkZWZpbmUgRkFTVF9GTE9BVCAgZmxvYXQNCi0jZWxzZQ0KLSNkZWZpbmUgRkFTVF9GTE9BVCAgZG91YmxlDQotI2VuZGlmDQotI2VuZGlmDQotDQotI2VuZGlmIC8qIEpQRUdfSU5URVJOQUxfT1BUSU9OUyAqLw0KKy8qCisgKiBqbW9yZWNmZy5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBjdXN0b21pemUgdGhlCisgKiBKUEVHIHNvZnR3YXJlIGZvciBzcGVjaWFsIGFwcGxpY2F0aW9ucyBvciBzdXBwb3J0IG1hY2hpbmUtZGVwZW5kZW50CisgKiBvcHRpbWl6YXRpb25zLiAgTW9zdCB1c2VycyB3aWxsIG5vdCBuZWVkIHRvIHRvdWNoIHRoaXMgZmlsZS4KKyAqLworCisjaWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyAoZGlzYWJsZSA6IDQxNDIpCisjZW5kaWYKKworLyoKKyAqIERlZmluZSBCSVRTX0lOX0pTQU1QTEUgYXMgZWl0aGVyCisgKiAgIDggICBmb3IgOC1iaXQgc2FtcGxlIHZhbHVlcyAodGhlIHVzdWFsIHNldHRpbmcpCisgKiAgIDEyICBmb3IgMTItYml0IHNhbXBsZSB2YWx1ZXMKKyAqIE9ubHkgOCBhbmQgMTIgYXJlIGxlZ2FsIGRhdGEgcHJlY2lzaW9ucyBmb3IgbG9zc3kgSlBFRyBhY2NvcmRpbmcgdG8gdGhlCisgKiBKUEVHIHN0YW5kYXJkLCBhbmQgdGhlIElKRyBjb2RlIGRvZXMgbm90IHN1cHBvcnQgYW55dGhpbmcgZWxzZSEKKyAqIFdlIGRvIG5vdCBzdXBwb3J0IHJ1bi10aW1lIHNlbGVjdGlvbiBvZiBkYXRhIHByZWNpc2lvbiwgc29ycnkuCisgKi8KKworI2RlZmluZSBCSVRTX0lOX0pTQU1QTEUgIDgJLyogdXNlIDggb3IgMTIgKi8KKworCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgY29tcG9uZW50cyAoY29sb3IgY2hhbm5lbHMpIGFsbG93ZWQgaW4gSlBFRyBpbWFnZS4KKyAqIFRvIG1lZXQgdGhlIGxldHRlciBvZiB0aGUgSlBFRyBzcGVjLCBzZXQgdGhpcyB0byAyNTUuICBIb3dldmVyLCBkYXJuCisgKiBmZXcgYXBwbGljYXRpb25zIG5lZWQgbW9yZSB0aGFuIDQgY2hhbm5lbHMgKG1heWJlIDUgZm9yIENNWUsgKyBhbHBoYQorICogbWFzaykuICBXZSByZWNvbW1lbmQgMTAgYXMgYSByZWFzb25hYmxlIGNvbXByb21pc2U7IHVzZSA0IGlmIHlvdSBhcmUKKyAqIHJlYWxseSBzaG9ydCBvbiBtZW1vcnkuICAoRWFjaCBhbGxvd2VkIGNvbXBvbmVudCBjb3N0cyBhIGh1bmRyZWQgb3Igc28KKyAqIGJ5dGVzIG9mIHN0b3JhZ2UsIHdoZXRoZXIgYWN0dWFsbHkgdXNlZCBpbiBhbiBpbWFnZSBvciBub3QuKQorICovCisKKyNkZWZpbmUgTUFYX0NPTVBPTkVOVFMgIDEwCS8qIG1heGltdW0gbnVtYmVyIG9mIGltYWdlIGNvbXBvbmVudHMgKi8KKworCisvKgorICogQmFzaWMgZGF0YSB0eXBlcy4KKyAqIFlvdSBtYXkgbmVlZCB0byBjaGFuZ2UgdGhlc2UgaWYgeW91IGhhdmUgYSBtYWNoaW5lIHdpdGggdW51c3VhbCBkYXRhCisgKiB0eXBlIHNpemVzOyBmb3IgZXhhbXBsZSwgImNoYXIiIG5vdCA4IGJpdHMsICJzaG9ydCIgbm90IDE2IGJpdHMsCisgKiBvciAibG9uZyIgbm90IDMyIGJpdHMuICBXZSBkb24ndCBjYXJlIHdoZXRoZXIgImludCIgaXMgMTYgb3IgMzIgYml0cywKKyAqIGJ1dCBpdCBoYWQgYmV0dGVyIGJlIGF0IGxlYXN0IDE2LgorICovCisKKy8qIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIHNhbXBsZSAocGl4ZWwgZWxlbWVudCB2YWx1ZSkuCisgKiBXZSBmcmVxdWVudGx5IGFsbG9jYXRlIGxhcmdlIGFycmF5cyBvZiB0aGVzZSwgc28gaXQncyBpbXBvcnRhbnQgdG8ga2VlcAorICogdGhlbSBzbWFsbC4gIEJ1dCBpZiB5b3UgaGF2ZSBtZW1vcnkgdG8gYnVybiBhbmQgYWNjZXNzIHRvIGNoYXIgb3Igc2hvcnQKKyAqIGFycmF5cyBpcyB2ZXJ5IHNsb3cgb24geW91ciBoYXJkd2FyZSwgeW91IG1pZ2h0IHdhbnQgdG8gY2hhbmdlIHRoZXNlLgorICovCisKKyNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOAorLyogSlNBTVBMRSBzaG91bGQgYmUgdGhlIHNtYWxsZXN0IHR5cGUgdGhhdCB3aWxsIGhvbGQgdGhlIHZhbHVlcyAwLi4yNTUuCisgKiBZb3UgY2FuIHVzZSBhIHNpZ25lZCBjaGFyIGJ5IGhhdmluZyBHRVRKU0FNUExFIG1hc2sgaXQgd2l0aCAweEZGLgorICovCisKKyNpZmRlZiBIQVZFX1VOU0lHTkVEX0NIQVIKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIEpTQU1QTEU7CisjZGVmaW5lIEdFVEpTQU1QTEUodmFsdWUpICAoKGludCkgKHZhbHVlKSkKKworI2Vsc2UgLyogbm90IEhBVkVfVU5TSUdORURfQ0hBUiAqLworCit0eXBlZGVmIGNoYXIgSlNBTVBMRTsKKyNpZmRlZiBDSEFSX0lTX1VOU0lHTkVECisjZGVmaW5lIEdFVEpTQU1QTEUodmFsdWUpICAoKGludCkgKHZhbHVlKSkKKyNlbHNlCisjZGVmaW5lIEdFVEpTQU1QTEUodmFsdWUpICAoKGludCkgKHZhbHVlKSAmIDB4RkYpCisjZW5kaWYgLyogQ0hBUl9JU19VTlNJR05FRCAqLworCisjZW5kaWYgLyogSEFWRV9VTlNJR05FRF9DSEFSICovCisKKyNkZWZpbmUgTUFYSlNBTVBMRQkyNTUKKyNkZWZpbmUgQ0VOVEVSSlNBTVBMRQkxMjgKKworI2VuZGlmIC8qIEJJVFNfSU5fSlNBTVBMRSA9PSA4ICovCisKKworI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSAxMgorLyogSlNBTVBMRSBzaG91bGQgYmUgdGhlIHNtYWxsZXN0IHR5cGUgdGhhdCB3aWxsIGhvbGQgdGhlIHZhbHVlcyAwLi40MDk1LgorICogT24gbmVhcmx5IGFsbCBtYWNoaW5lcyAic2hvcnQiIHdpbGwgZG8gbmljZWx5LgorICovCisKK3R5cGVkZWYgc2hvcnQgSlNBTVBMRTsKKyNkZWZpbmUgR0VUSlNBTVBMRSh2YWx1ZSkgICgoaW50KSAodmFsdWUpKQorCisjZGVmaW5lIE1BWEpTQU1QTEUJNDA5NQorI2RlZmluZSBDRU5URVJKU0FNUExFCTIwNDgKKworI2VuZGlmIC8qIEJJVFNfSU5fSlNBTVBMRSA9PSAxMiAqLworCisKKy8qIFJlcHJlc2VudGF0aW9uIG9mIGEgRENUIGZyZXF1ZW5jeSBjb2VmZmljaWVudC4KKyAqIFRoaXMgc2hvdWxkIGJlIGEgc2lnbmVkIHZhbHVlIG9mIGF0IGxlYXN0IDE2IGJpdHM7ICJzaG9ydCIgaXMgdXN1YWxseSBPSy4KKyAqIEFnYWluLCB3ZSBhbGxvY2F0ZSBsYXJnZSBhcnJheXMgb2YgdGhlc2UsIGJ1dCB5b3UgY2FuIGNoYW5nZSB0byBpbnQKKyAqIGlmIHlvdSBoYXZlIG1lbW9yeSB0byBidXJuIGFuZCAic2hvcnQiIGlzIHJlYWxseSBzbG93LgorICovCisKK3R5cGVkZWYgc2hvcnQgSkNPRUY7CisKKworLyogQ29tcHJlc3NlZCBkYXRhc3RyZWFtcyBhcmUgcmVwcmVzZW50ZWQgYXMgYXJyYXlzIG9mIEpPQ1RFVC4KKyAqIFRoZXNlIG11c3QgYmUgRVhBQ1RMWSA4IGJpdHMgd2lkZSwgYXQgbGVhc3Qgb25jZSB0aGV5IGFyZSB3cml0dGVuIHRvCisgKiBleHRlcm5hbCBzdG9yYWdlLiAgTm90ZSB0aGF0IHdoZW4gdXNpbmcgdGhlIHN0ZGlvIGRhdGEgc291cmNlL2Rlc3RpbmF0aW9uCisgKiBtYW5hZ2VycywgdGhpcyBpcyBhbHNvIHRoZSBkYXRhIHR5cGUgcGFzc2VkIHRvIGZyZWFkL2Z3cml0ZS4KKyAqLworCisjaWZkZWYgSEFWRV9VTlNJR05FRF9DSEFSCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBKT0NURVQ7CisjZGVmaW5lIEdFVEpPQ1RFVCh2YWx1ZSkgICh2YWx1ZSkKKworI2Vsc2UgLyogbm90IEhBVkVfVU5TSUdORURfQ0hBUiAqLworCit0eXBlZGVmIGNoYXIgSk9DVEVUOworI2lmZGVmIENIQVJfSVNfVU5TSUdORUQKKyNkZWZpbmUgR0VUSk9DVEVUKHZhbHVlKSAgKHZhbHVlKQorI2Vsc2UKKyNkZWZpbmUgR0VUSk9DVEVUKHZhbHVlKSAgKCh2YWx1ZSkgJiAweEZGKQorI2VuZGlmIC8qIENIQVJfSVNfVU5TSUdORUQgKi8KKworI2VuZGlmIC8qIEhBVkVfVU5TSUdORURfQ0hBUiAqLworCisKKy8qIFRoZXNlIHR5cGVkZWZzIGFyZSB1c2VkIGZvciB2YXJpb3VzIHRhYmxlIGVudHJpZXMgYW5kIHNvIGZvcnRoLgorICogVGhleSBtdXN0IGJlIGF0IGxlYXN0IGFzIHdpZGUgYXMgc3BlY2lmaWVkOyBidXQgbWFraW5nIHRoZW0gdG9vIGJpZworICogd29uJ3QgY29zdCBhIGh1Z2UgYW1vdW50IG9mIG1lbW9yeSwgc28gd2UgZG9uJ3QgcHJvdmlkZSBzcGVjaWFsCisgKiBleHRyYWN0aW9uIGNvZGUgbGlrZSB3ZSBkaWQgZm9yIEpTQU1QTEUuICAoSW4gb3RoZXIgd29yZHMsIHRoZXNlCisgKiB0eXBlZGVmcyBsaXZlIGF0IGEgZGlmZmVyZW50IHBvaW50IG9uIHRoZSBzcGVlZC9zcGFjZSB0cmFkZW9mZiBjdXJ2ZS4pCisgKi8KKworI2lmIF9GWF9PU18gIT0gX0ZYX1ZYV09SS1NfCisKKy8qIFVJTlQ4IG11c3QgaG9sZCBhdCBsZWFzdCB0aGUgdmFsdWVzIDAuLjI1NS4gKi8KKworI2lmZGVmIEhBVkVfVU5TSUdORURfQ0hBUgordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJTlQ4OworI2Vsc2UgLyogbm90IEhBVkVfVU5TSUdORURfQ0hBUiAqLworI2lmZGVmIENIQVJfSVNfVU5TSUdORUQKK3R5cGVkZWYgY2hhciBVSU5UODsKKyNlbHNlIC8qIG5vdCBDSEFSX0lTX1VOU0lHTkVEICovCit0eXBlZGVmIHNob3J0IFVJTlQ4OworI2VuZGlmIC8qIENIQVJfSVNfVU5TSUdORUQgKi8KKyNlbmRpZiAvKiBIQVZFX1VOU0lHTkVEX0NIQVIgKi8KKworCisvKiBVSU5UMTYgbXVzdCBob2xkIGF0IGxlYXN0IHRoZSB2YWx1ZXMgMC4uNjU1MzUuICovCisKKyNpZmRlZiBIQVZFX1VOU0lHTkVEX1NIT1JUCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFVJTlQxNjsKKyNlbHNlIC8qIG5vdCBIQVZFX1VOU0lHTkVEX1NIT1JUICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBVSU5UMTY7CisjZW5kaWYgLyogSEFWRV9VTlNJR05FRF9TSE9SVCAqLworCisvKiBJTlQxNiBtdXN0IGhvbGQgYXQgbGVhc3QgdGhlIHZhbHVlcyAtMzI3NjguLjMyNzY3LiAqLworCisjaWZuZGVmIFhNRF9ICQkJLyogWDExL3htZC5oIGNvcnJlY3RseSBkZWZpbmVzIElOVDE2ICovCit0eXBlZGVmIHNob3J0IElOVDE2OworI2VuZGlmCisKKy8qIElOVDMyIG11c3QgaG9sZCBhdCBsZWFzdCBzaWduZWQgMzItYml0IHZhbHVlcy4gKi8KKworI2lmbmRlZiBYTURfSAkJCS8qIFgxMS94bWQuaCBjb3JyZWN0bHkgZGVmaW5lcyBJTlQzMiAqLwordHlwZWRlZiBpbnQgSU5UMzI7CisjZW5kaWYKKworI2VuZGlmIAorCisvKiBEYXRhdHlwZSB1c2VkIGZvciBpbWFnZSBkaW1lbnNpb25zLiAgVGhlIEpQRUcgc3RhbmRhcmQgb25seSBzdXBwb3J0cworICogaW1hZ2VzIHVwIHRvIDY0Syo2NEsgZHVlIHRvIDE2LWJpdCBmaWVsZHMgaW4gU09GIG1hcmtlcnMuICBUaGVyZWZvcmUKKyAqICJ1bnNpZ25lZCBpbnQiIGlzIHN1ZmZpY2llbnQgb24gYWxsIG1hY2hpbmVzLiAgSG93ZXZlciwgaWYgeW91IG5lZWQgdG8KKyAqIGhhbmRsZSBsYXJnZXIgaW1hZ2VzIGFuZCB5b3UgZG9uJ3QgbWluZCBkZXZpYXRpbmcgZnJvbSB0aGUgc3BlYywgeW91CisgKiBjYW4gY2hhbmdlIHRoaXMgZGF0YXR5cGUuCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgSkRJTUVOU0lPTjsKKworI2RlZmluZSBKUEVHX01BWF9ESU1FTlNJT04gIDY1NTAwTCAgLyogYSB0YWQgdW5kZXIgNjRLIHRvIHByZXZlbnQgb3ZlcmZsb3dzICovCisKKworLyogVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGluIGFsbCBmdW5jdGlvbiBkZWZpbml0aW9ucyBhbmQgZXh0ZXJuIGRlY2xhcmF0aW9ucy4KKyAqIFlvdSBjb3VsZCBtb2RpZnkgdGhlbSBpZiB5b3UgbmVlZCB0byBjaGFuZ2UgZnVuY3Rpb24gbGlua2FnZSBjb252ZW50aW9uczsKKyAqIGluIHBhcnRpY3VsYXIsIHlvdSdsbCBuZWVkIHRvIGRvIHRoYXQgdG8gbWFrZSB0aGUgbGlicmFyeSBhIFdpbmRvd3MgRExMLgorICogQW5vdGhlciBhcHBsaWNhdGlvbiBpcyB0byBtYWtlIGFsbCBmdW5jdGlvbnMgZ2xvYmFsIGZvciB1c2Ugd2l0aCBkZWJ1Z2dlcnMKKyAqIG9yIGNvZGUgcHJvZmlsZXJzIHRoYXQgcmVxdWlyZSBpdC4KKyAqLworCisvKiBhIGZ1bmN0aW9uIGNhbGxlZCB0aHJvdWdoIG1ldGhvZCBwb2ludGVyczogKi8KKyNkZWZpbmUgTUVUSE9EREVGKHR5cGUpCQlzdGF0aWMgdHlwZQorLyogYSBmdW5jdGlvbiB1c2VkIG9ubHkgaW4gaXRzIG1vZHVsZTogKi8KKyNkZWZpbmUgTE9DQUwodHlwZSkJCXN0YXRpYyB0eXBlCisvKiBhIGZ1bmN0aW9uIHJlZmVyZW5jZWQgdGhydSBFWFRFUk5zOiAqLworI2RlZmluZSBHTE9CQUwodHlwZSkJCXR5cGUKKworI2lmZGVmIF9GWF9NQU5BR0VEX0NPREVfCisjZGVmaW5lIEVYVEVSTih0eXBlKQkJZXh0ZXJuICJDIiB0eXBlCisjZWxzZQorLyogYSByZWZlcmVuY2UgdG8gYSBHTE9CQUwgZnVuY3Rpb246ICovCisjZGVmaW5lIEVYVEVSTih0eXBlKQkJZXh0ZXJuIHR5cGUKKyNlbmRpZgorCisKKy8qIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkZWNsYXJlIGEgIm1ldGhvZCIsIHRoYXQgaXMsIGEgZnVuY3Rpb24gcG9pbnRlci4KKyAqIFdlIHdhbnQgdG8gc3VwcGx5IHByb3RvdHlwZSBwYXJhbWV0ZXJzIGlmIHRoZSBjb21waWxlciBjYW4gY29wZS4KKyAqIE5vdGUgdGhhdCB0aGUgYXJnbGlzdCBwYXJhbWV0ZXIgbXVzdCBiZSBwYXJlbnRoZXNpemVkIQorICogQWdhaW4sIHlvdSBjYW4gY3VzdG9taXplIHRoaXMgaWYgeW91IG5lZWQgc3BlY2lhbCBsaW5rYWdlIGtleXdvcmRzLgorICovCisKKyNpZmRlZiBIQVZFX1BST1RPVFlQRVMKKyNkZWZpbmUgSk1FVEhPRCh0eXBlLG1ldGhvZG5hbWUsYXJnbGlzdCkgIHR5cGUgKCptZXRob2RuYW1lKSBhcmdsaXN0CisjZWxzZQorI2RlZmluZSBKTUVUSE9EKHR5cGUsbWV0aG9kbmFtZSxhcmdsaXN0KSAgdHlwZSAoKm1ldGhvZG5hbWUpICgpCisjZW5kaWYKKworCisvKiBIZXJlIGlzIHRoZSBwc2V1ZG8ta2V5d29yZCBmb3IgZGVjbGFyaW5nIHBvaW50ZXJzIHRoYXQgbXVzdCBiZSAiZmFyIgorICogb24gODB4ODYgbWFjaGluZXMuICBNb3N0IG9mIHRoZSBzcGVjaWFsaXplZCBjb2RpbmcgZm9yIDgweDg2IGlzIGhhbmRsZWQKKyAqIGJ5IGp1c3Qgc2F5aW5nICJGQVIgKiIgd2hlcmUgc3VjaCBhIHBvaW50ZXIgaXMgbmVlZGVkLiAgSW4gYSBmZXcgcGxhY2VzCisgKiBleHBsaWNpdCBjb2RpbmcgaXMgbmVlZGVkOyBzZWUgdXNlcyBvZiB0aGUgTkVFRF9GQVJfUE9JTlRFUlMgc3ltYm9sLgorICovCisKKyNpZmRlZiBORUVEX0ZBUl9QT0lOVEVSUworI2RlZmluZSBGQVIgIGZhcgorI2Vsc2UKKy8vI2RlZmluZSBGQVIKKyNlbmRpZgorCisKKy8qCisgKiBPbiBhIGZldyBzeXN0ZW1zLCB0eXBlIGJvb2xlYW4gYW5kL29yIGl0cyB2YWx1ZXMgRkFMU0UsIFRSVUUgbWF5IGFwcGVhcgorICogaW4gc3RhbmRhcmQgaGVhZGVyIGZpbGVzLiAgT3IgeW91IG1heSBoYXZlIGNvbmZsaWN0cyB3aXRoIGFwcGxpY2F0aW9uLQorICogc3BlY2lmaWMgaGVhZGVyIGZpbGVzIHRoYXQgeW91IHdhbnQgdG8gaW5jbHVkZSB0b2dldGhlciB3aXRoIHRoZXNlIGZpbGVzLgorICogRGVmaW5pbmcgSEFWRV9CT09MRUFOIGJlZm9yZSBpbmNsdWRpbmcganBlZ2xpYi5oIHNob3VsZCBtYWtlIGl0IHdvcmsuCisgKi8KKworI2lmbmRlZiBIQVZFX0JPT0xFQU4KK3R5cGVkZWYgaW50IGJvb2xlYW47CisjZW5kaWYKKyNpZm5kZWYgRkFMU0UJCQkvKiBpbiBjYXNlIHRoZXNlIG1hY3JvcyBhbHJlYWR5IGV4aXN0ICovCisjZGVmaW5lIEZBTFNFCTAJCS8qIHZhbHVlcyBvZiBib29sZWFuICovCisjZW5kaWYKKyNpZm5kZWYgVFJVRQorI2RlZmluZSBUUlVFCTEKKyNlbmRpZgorCisKKy8qCisgKiBUaGUgcmVtYWluaW5nIG9wdGlvbnMgYWZmZWN0IGNvZGUgc2VsZWN0aW9uIHdpdGhpbiB0aGUgSlBFRyBsaWJyYXJ5LAorICogYnV0IHRoZXkgZG9uJ3QgbmVlZCB0byBiZSB2aXNpYmxlIHRvIG1vc3QgYXBwbGljYXRpb25zIHVzaW5nIHRoZSBsaWJyYXJ5LgorICogVG8gbWluaW1pemUgYXBwbGljYXRpb24gbmFtZXNwYWNlIHBvbGx1dGlvbiwgdGhlIHN5bWJvbHMgd29uJ3QgYmUKKyAqIGRlZmluZWQgdW5sZXNzIEpQRUdfSU5URVJOQUxTIG9yIEpQRUdfSU5URVJOQUxfT1BUSU9OUyBoYXMgYmVlbiBkZWZpbmVkLgorICovCisKKyNpZmRlZiBKUEVHX0lOVEVSTkFMUworI2RlZmluZSBKUEVHX0lOVEVSTkFMX09QVElPTlMKKyNlbmRpZgorCisjaWZkZWYgSlBFR19JTlRFUk5BTF9PUFRJT05TCisKKworLyoKKyAqIFRoZXNlIGRlZmluZXMgaW5kaWNhdGUgd2hldGhlciB0byBpbmNsdWRlIHZhcmlvdXMgb3B0aW9uYWwgZnVuY3Rpb25zLgorICogVW5kZWZpbmluZyBzb21lIG9mIHRoZXNlIHN5bWJvbHMgd2lsbCBwcm9kdWNlIGEgc21hbGxlciBidXQgbGVzcyBjYXBhYmxlCisgKiBsaWJyYXJ5LiAgTm90ZSB0aGF0IHlvdSBjYW4gbGVhdmUgY2VydGFpbiBzb3VyY2UgZmlsZXMgb3V0IG9mIHRoZQorICogY29tcGlsYXRpb24vbGlua2luZyBwcm9jZXNzIGlmIHlvdSd2ZSAjdW5kZWYnZCB0aGUgY29ycmVzcG9uZGluZyBzeW1ib2xzLgorICogKFlvdSBtYXkgSEFWRSB0byBkbyB0aGF0IGlmIHlvdXIgY29tcGlsZXIgZG9lc24ndCBsaWtlIG51bGwgc291cmNlIGZpbGVzLikKKyAqLworCisvKiBBcml0aG1ldGljIGNvZGluZyBpcyB1bnN1cHBvcnRlZCBmb3IgbGVnYWwgcmVhc29ucy4gIENvbXBsYWludHMgdG8gSUJNLiAqLworCisvKiBDYXBhYmlsaXR5IG9wdGlvbnMgY29tbW9uIHRvIGVuY29kZXIgYW5kIGRlY29kZXI6ICovCisKKyNkZWZpbmUgRENUX0lTTE9XX1NVUFBPUlRFRAkvKiBzbG93IGJ1dCBhY2N1cmF0ZSBpbnRlZ2VyIGFsZ29yaXRobSAqLworI2RlZmluZSBEQ1RfSUZBU1RfU1VQUE9SVEVECS8qIGZhc3RlciwgbGVzcyBhY2N1cmF0ZSBpbnRlZ2VyIG1ldGhvZCAqLworI3VuZGVmIERDVF9GTE9BVF9TVVBQT1JURUQJLyogZmxvYXRpbmctcG9pbnQ6IGFjY3VyYXRlLCBmYXN0IG9uIGZhc3QgSFcgKi8KKworLyogRW5jb2RlciBjYXBhYmlsaXR5IG9wdGlvbnM6ICovCisKKyN1bmRlZiAgQ19BUklUSF9DT0RJTkdfU1VQUE9SVEVEICAgIC8qIEFyaXRobWV0aWMgY29kaW5nIGJhY2sgZW5kPyAqLworI2RlZmluZSBDX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQgLyogTXVsdGlwbGUtc2NhbiBKUEVHIGZpbGVzPyAqLworI2RlZmluZSBDX1BST0dSRVNTSVZFX1NVUFBPUlRFRAkgICAgLyogUHJvZ3Jlc3NpdmUgSlBFRz8gKFJlcXVpcmVzIE1VTFRJU0NBTikqLworI2RlZmluZSBFTlRST1BZX09QVF9TVVBQT1JURUQJICAgIC8qIE9wdGltaXphdGlvbiBvZiBlbnRyb3B5IGNvZGluZyBwYXJtcz8gKi8KKy8qIE5vdGU6IGlmIHlvdSBzZWxlY3RlZCAxMi1iaXQgZGF0YSBwcmVjaXNpb24sIGl0IGlzIGRhbmdlcm91cyB0byB0dXJuIG9mZgorICogRU5UUk9QWV9PUFRfU1VQUE9SVEVELiAgVGhlIHN0YW5kYXJkIEh1ZmZtYW4gdGFibGVzIGFyZSBvbmx5IGdvb2QgZm9yIDgtYml0CisgKiBwcmVjaXNpb24sIHNvIGpjaHVmZi5jIG5vcm1hbGx5IHVzZXMgZW50cm9weSBvcHRpbWl6YXRpb24gdG8gY29tcHV0ZQorICogdXNhYmxlIHRhYmxlcyBmb3IgaGlnaGVyIHByZWNpc2lvbi4gIElmIHlvdSBkb24ndCB3YW50IHRvIGRvIG9wdGltaXphdGlvbiwKKyAqIHlvdSdsbCBoYXZlIHRvIHN1cHBseSBkaWZmZXJlbnQgZGVmYXVsdCBIdWZmbWFuIHRhYmxlcy4KKyAqIFRoZSBleGFjdCBzYW1lIHN0YXRlbWVudHMgYXBwbHkgZm9yIHByb2dyZXNzaXZlIEpQRUc6IHRoZSBkZWZhdWx0IHRhYmxlcworICogZG9uJ3Qgd29yayBmb3IgcHJvZ3Jlc3NpdmUgbW9kZS4gIChUaGlzIG1heSBnZXQgZml4ZWQsIGhvd2V2ZXIuKQorICovCisjZGVmaW5lIElOUFVUX1NNT09USElOR19TVVBQT1JURUQgICAvKiBJbnB1dCBpbWFnZSBzbW9vdGhpbmcgb3B0aW9uPyAqLworCisvKiBEZWNvZGVyIGNhcGFiaWxpdHkgb3B0aW9uczogKi8KKworI3VuZGVmICBEX0FSSVRIX0NPRElOR19TVVBQT1JURUQgICAgLyogQXJpdGhtZXRpYyBjb2RpbmcgYmFjayBlbmQ/ICovCisjZGVmaW5lIERfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRCAvKiBNdWx0aXBsZS1zY2FuIEpQRUcgZmlsZXM/ICovCisjZGVmaW5lIERfUFJPR1JFU1NJVkVfU1VQUE9SVEVECSAgICAvKiBQcm9ncmVzc2l2ZSBKUEVHPyAoUmVxdWlyZXMgTVVMVElTQ0FOKSovCisjZGVmaW5lIFNBVkVfTUFSS0VSU19TVVBQT1JURUQJICAgIC8qIGpwZWdfc2F2ZV9tYXJrZXJzKCkgbmVlZGVkPyAqLworI2RlZmluZSBCTE9DS19TTU9PVEhJTkdfU1VQUE9SVEVEICAgLyogQmxvY2sgc21vb3RoaW5nPyAoUHJvZ3Jlc3NpdmUgb25seSkgKi8KKyNkZWZpbmUgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRAkgICAgLyogT3V0cHV0IHJlc2NhbGluZyB2aWEgSURDVD8gKi8KKyN1bmRlZiBVUFNBTVBMRV9TQ0FMSU5HX1NVUFBPUlRFRCAgLyogT3V0cHV0IHJlc2NhbGluZyBhdCB1cHNhbXBsZSBzdGFnZT8gKi8KKyNkZWZpbmUgVVBTQU1QTEVfTUVSR0lOR19TVVBQT1JURUQgIC8qIEZhc3QgcGF0aCBmb3Igc2xvcHB5IHVwc2FtcGxpbmc/ICovCisjdW5kZWYgUVVBTlRfMVBBU1NfU1VQUE9SVEVECSAgICAvKiAxLXBhc3MgY29sb3IgcXVhbnRpemF0aW9uPyAqLworI3VuZGVmIFFVQU5UXzJQQVNTX1NVUFBPUlRFRAkgICAgLyogMi1wYXNzIGNvbG9yIHF1YW50aXphdGlvbj8gKi8KKworLyogbW9yZSBjYXBhYmlsaXR5IG9wdGlvbnMgbGF0ZXIsIG5vIGRvdWJ0ICovCisKKworLyoKKyAqIE9yZGVyaW5nIG9mIFJHQiBkYXRhIGluIHNjYW5saW5lcyBwYXNzZWQgdG8gb3IgZnJvbSB0aGUgYXBwbGljYXRpb24uCisgKiBJZiB5b3VyIGFwcGxpY2F0aW9uIHdhbnRzIHRvIGRlYWwgd2l0aCBkYXRhIGluIHRoZSBvcmRlciBCLEcsUiwganVzdAorICogY2hhbmdlIHRoZXNlIG1hY3Jvcy4gIFlvdSBjYW4gYWxzbyBkZWFsIHdpdGggZm9ybWF0cyBzdWNoIGFzIFIsRyxCLFgKKyAqIChvbmUgZXh0cmEgYnl0ZSBwZXIgcGl4ZWwpIGJ5IGNoYW5naW5nIFJHQl9QSVhFTFNJWkUuICBOb3RlIHRoYXQgY2hhbmdpbmcKKyAqIHRoZSBvZmZzZXRzIHdpbGwgYWxzbyBjaGFuZ2UgdGhlIG9yZGVyIGluIHdoaWNoIGNvbG9ybWFwIGRhdGEgaXMgb3JnYW5pemVkLgorICogUkVTVFJJQ1RJT05TOgorICogMS4gVGhlIHNhbXBsZSBhcHBsaWNhdGlvbnMgY2pwZWcsZGpwZWcgZG8gTk9UIHN1cHBvcnQgbW9kaWZpZWQgUkdCIGZvcm1hdHMuCisgKiAyLiBUaGVzZSBtYWNyb3Mgb25seSBhZmZlY3QgUkdCPD0+WUNiQ3IgY29sb3IgY29udmVyc2lvbiwgc28gdGhleSBhcmUgbm90CisgKiAgICB1c2VmdWwgaWYgeW91IGFyZSB1c2luZyBKUEVHIGNvbG9yIHNwYWNlcyBvdGhlciB0aGFuIFlDYkNyIG9yIGdyYXlzY2FsZS4KKyAqIDMuIFRoZSBjb2xvciBxdWFudGl6ZXIgbW9kdWxlcyB3aWxsIG5vdCBiZWhhdmUgZGVzaXJhYmx5IGlmIFJHQl9QSVhFTFNJWkUKKyAqICAgIGlzIG5vdCAzICh0aGV5IGRvbid0IHVuZGVyc3RhbmQgYWJvdXQgZHVtbXkgY29sb3IgY29tcG9uZW50cyEpLiAgU28geW91CisgKiAgICBjYW4ndCB1c2UgY29sb3IgcXVhbnRpemF0aW9uIGlmIHlvdSBjaGFuZ2UgdGhhdCB2YWx1ZS4KKyAqLworCisjZGVmaW5lIFJHQl9SRUQJCTAJLyogT2Zmc2V0IG9mIFJlZCBpbiBhbiBSR0Igc2NhbmxpbmUgZWxlbWVudCAqLworI2RlZmluZSBSR0JfR1JFRU4JMQkvKiBPZmZzZXQgb2YgR3JlZW4gKi8KKyNkZWZpbmUgUkdCX0JMVUUJMgkvKiBPZmZzZXQgb2YgQmx1ZSAqLworI2RlZmluZSBSR0JfUElYRUxTSVpFCTMJLyogSlNBTVBMRXMgcGVyIFJHQiBzY2FubGluZSBlbGVtZW50ICovCisKKworLyogRGVmaW5pdGlvbnMgZm9yIHNwZWVkLXJlbGF0ZWQgb3B0aW1pemF0aW9ucy4gKi8KKworCisvKiBJZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIGlubGluZSBmdW5jdGlvbnMsIGRlZmluZSBJTkxJTkUKKyAqIGFzIHRoZSBpbmxpbmUga2V5d29yZDsgb3RoZXJ3aXNlIGRlZmluZSBpdCBhcyBlbXB0eS4KKyAqLworCisjaWZuZGVmIElOTElORQorI2lmZGVmIF9fR05VQ19fCQkJLyogZm9yIGluc3RhbmNlLCBHTlUgQyBrbm93cyBhYm91dCBpbmxpbmUgKi8KKyNkZWZpbmUgSU5MSU5FIF9faW5saW5lX18KKyNlbmRpZgorI2lmbmRlZiBJTkxJTkUKKyNkZWZpbmUgSU5MSU5FCQkJLyogZGVmYXVsdCBpcyB0byBkZWZpbmUgaXQgYXMgZW1wdHkgKi8KKyNlbmRpZgorI2VuZGlmCisKKworLyogT24gc29tZSBtYWNoaW5lcyAobm90YWJseSA2ODAwMCBzZXJpZXMpICJpbnQiIGlzIDMyIGJpdHMsIGJ1dCBtdWx0aXBseWluZworICogdHdvIDE2LWJpdCBzaG9ydHMgaXMgZmFzdGVyIHRoYW4gbXVsdGlwbHlpbmcgdHdvIGludHMuICBEZWZpbmUgTVVMVElQTElFUgorICogYXMgc2hvcnQgb24gc3VjaCBhIG1hY2hpbmUuICBNVUxUSVBMSUVSIG11c3QgYmUgYXQgbGVhc3QgMTYgYml0cyB3aWRlLgorICovCisKKyNpZm5kZWYgTVVMVElQTElFUgorI2RlZmluZSBNVUxUSVBMSUVSICBpbnQJCS8qIHR5cGUgZm9yIGZhc3Rlc3QgaW50ZWdlciBtdWx0aXBseSAqLworI2VuZGlmCisKKworLyogRkFTVF9GTE9BVCBzaG91bGQgYmUgZWl0aGVyIGZsb2F0IG9yIGRvdWJsZSwgd2hpY2hldmVyIGlzIGRvbmUgZmFzdGVyCisgKiBieSB5b3VyIGNvbXBpbGVyLiAgKE5vdGUgdGhhdCB0aGlzIHR5cGUgaXMgb25seSB1c2VkIGluIHRoZSBmbG9hdGluZyBwb2ludAorICogRENUIHJvdXRpbmVzLCBzbyBpdCBvbmx5IG1hdHRlcnMgaWYgeW91J3ZlIGRlZmluZWQgRENUX0ZMT0FUX1NVUFBPUlRFRC4pCisgKiBUeXBpY2FsbHksIGZsb2F0IGlzIGZhc3RlciBpbiBBTlNJIEMgY29tcGlsZXJzLCB3aGlsZSBkb3VibGUgaXMgZmFzdGVyIGluCisgKiBwcmUtQU5TSSBjb21waWxlcnMgKGJlY2F1c2UgdGhleSBpbnNpc3Qgb24gY29udmVydGluZyB0byBkb3VibGUgYW55d2F5KS4KKyAqIFRoZSBjb2RlIGJlbG93IHRoZXJlZm9yZSBjaG9vc2VzIGZsb2F0IGlmIHdlIGhhdmUgQU5TSS1zdHlsZSBwcm90b3R5cGVzLgorICovCisKKyNpZm5kZWYgRkFTVF9GTE9BVAorI2lmZGVmIEhBVkVfUFJPVE9UWVBFUworI2RlZmluZSBGQVNUX0ZMT0FUICBmbG9hdAorI2Vsc2UKKyNkZWZpbmUgRkFTVF9GTE9BVCAgZG91YmxlCisjZW5kaWYKKyNlbmRpZgorCisjZW5kaWYgLyogSlBFR19JTlRFUk5BTF9PUFRJT05TICovCmRpZmYgLS1naXQgYS9jb3JlL2luY2x1ZGUvdGhpcmRwYXJ0aWVzL2xpYmpwZWcvanBlZ2ludC5oIGIvY29yZS9pbmNsdWRlL3RoaXJkcGFydGllcy9saWJqcGVnL2pwZWdpbnQuaAppbmRleCA2ODVhMzYxLi45NWIwMGQ0IDEwMDY0NAotLS0gYS9jb3JlL2luY2x1ZGUvdGhpcmRwYXJ0aWVzL2xpYmpwZWcvanBlZ2ludC5oCisrKyBiL2NvcmUvaW5jbHVkZS90aGlyZHBhcnRpZXMvbGlianBlZy9qcGVnaW50LmgKQEAgLTEsMzkyICsxLDM5MiBAQAotLyoNCi0gKiBqcGVnaW50LmgNCi0gKg0KLSAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4NCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLg0KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4NCi0gKg0KLSAqIFRoaXMgZmlsZSBwcm92aWRlcyBjb21tb24gZGVjbGFyYXRpb25zIGZvciB0aGUgdmFyaW91cyBKUEVHIG1vZHVsZXMuDQotICogVGhlc2UgZGVjbGFyYXRpb25zIGFyZSBjb25zaWRlcmVkIGludGVybmFsIHRvIHRoZSBKUEVHIGxpYnJhcnk7IG1vc3QNCi0gKiBhcHBsaWNhdGlvbnMgdXNpbmcgdGhlIGxpYnJhcnkgc2hvdWxkbid0IG5lZWQgdG8gaW5jbHVkZSB0aGlzIGZpbGUuDQotICovDQotDQotDQotLyogRGVjbGFyYXRpb25zIGZvciBib3RoIGNvbXByZXNzaW9uICYgZGVjb21wcmVzc2lvbiAqLw0KLQ0KLXR5cGVkZWYgZW51bSB7CQkJLyogT3BlcmF0aW5nIG1vZGVzIGZvciBidWZmZXIgY29udHJvbGxlcnMgKi8NCi0JSkJVRl9QQVNTX1RIUlUsCQkvKiBQbGFpbiBzdHJpcHdpc2Ugb3BlcmF0aW9uICovDQotCS8qIFJlbWFpbmluZyBtb2RlcyByZXF1aXJlIGEgZnVsbC1pbWFnZSBidWZmZXIgdG8gaGF2ZSBiZWVuIGNyZWF0ZWQgKi8NCi0JSkJVRl9TQVZFX1NPVVJDRSwJLyogUnVuIHNvdXJjZSBzdWJvYmplY3Qgb25seSwgc2F2ZSBvdXRwdXQgKi8NCi0JSkJVRl9DUkFOS19ERVNULAkvKiBSdW4gZGVzdCBzdWJvYmplY3Qgb25seSwgdXNpbmcgc2F2ZWQgZGF0YSAqLw0KLQlKQlVGX1NBVkVfQU5EX1BBU1MJLyogUnVuIGJvdGggc3Vib2JqZWN0cywgc2F2ZSBvdXRwdXQgKi8NCi19IEpfQlVGX01PREU7DQotDQotLyogVmFsdWVzIG9mIGdsb2JhbF9zdGF0ZSBmaWVsZCAoamRhcGkuYyBoYXMgc29tZSBkZXBlbmRlbmNpZXMgb24gb3JkZXJpbmchKSAqLw0KLSNkZWZpbmUgQ1NUQVRFX1NUQVJUCTEwMAkvKiBhZnRlciBjcmVhdGVfY29tcHJlc3MgKi8NCi0jZGVmaW5lIENTVEFURV9TQ0FOTklORwkxMDEJLyogc3RhcnRfY29tcHJlc3MgZG9uZSwgd3JpdGVfc2NhbmxpbmVzIE9LICovDQotI2RlZmluZSBDU1RBVEVfUkFXX09LCTEwMgkvKiBzdGFydF9jb21wcmVzcyBkb25lLCB3cml0ZV9yYXdfZGF0YSBPSyAqLw0KLSNkZWZpbmUgQ1NUQVRFX1dSQ09FRlMJMTAzCS8qIGpwZWdfd3JpdGVfY29lZmZpY2llbnRzIGRvbmUgKi8NCi0jZGVmaW5lIERTVEFURV9TVEFSVAkyMDAJLyogYWZ0ZXIgY3JlYXRlX2RlY29tcHJlc3MgKi8NCi0jZGVmaW5lIERTVEFURV9JTkhFQURFUgkyMDEJLyogcmVhZGluZyBoZWFkZXIgbWFya2Vycywgbm8gU09TIHlldCAqLw0KLSNkZWZpbmUgRFNUQVRFX1JFQURZCTIwMgkvKiBmb3VuZCBTT1MsIHJlYWR5IGZvciBzdGFydF9kZWNvbXByZXNzICovDQotI2RlZmluZSBEU1RBVEVfUFJFTE9BRAkyMDMJLyogcmVhZGluZyBtdWx0aXNjYW4gZmlsZSBpbiBzdGFydF9kZWNvbXByZXNzKi8NCi0jZGVmaW5lIERTVEFURV9QUkVTQ0FOCTIwNAkvKiBwZXJmb3JtaW5nIGR1bW15IHBhc3MgZm9yIDItcGFzcyBxdWFudCAqLw0KLSNkZWZpbmUgRFNUQVRFX1NDQU5OSU5HCTIwNQkvKiBzdGFydF9kZWNvbXByZXNzIGRvbmUsIHJlYWRfc2NhbmxpbmVzIE9LICovDQotI2RlZmluZSBEU1RBVEVfUkFXX09LCTIwNgkvKiBzdGFydF9kZWNvbXByZXNzIGRvbmUsIHJlYWRfcmF3X2RhdGEgT0sgKi8NCi0jZGVmaW5lIERTVEFURV9CVUZJTUFHRQkyMDcJLyogZXhwZWN0aW5nIGpwZWdfc3RhcnRfb3V0cHV0ICovDQotI2RlZmluZSBEU1RBVEVfQlVGUE9TVAkyMDgJLyogbG9va2luZyBmb3IgU09TL0VPSSBpbiBqcGVnX2ZpbmlzaF9vdXRwdXQgKi8NCi0jZGVmaW5lIERTVEFURV9SRENPRUZTCTIwOQkvKiByZWFkaW5nIGZpbGUgaW4ganBlZ19yZWFkX2NvZWZmaWNpZW50cyAqLw0KLSNkZWZpbmUgRFNUQVRFX1NUT1BQSU5HCTIxMAkvKiBsb29raW5nIGZvciBFT0kgaW4ganBlZ19maW5pc2hfZGVjb21wcmVzcyAqLw0KLQ0KLQ0KLS8qIERlY2xhcmF0aW9ucyBmb3IgY29tcHJlc3Npb24gbW9kdWxlcyAqLw0KLQ0KLS8qIE1hc3RlciBjb250cm9sIG1vZHVsZSAqLw0KLXN0cnVjdCBqcGVnX2NvbXBfbWFzdGVyIHsNCi0gIEpNRVRIT0Qodm9pZCwgcHJlcGFyZV9mb3JfcGFzcywgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotICBKTUVUSE9EKHZvaWQsIHBhc3Nfc3RhcnR1cCwgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotICBKTUVUSE9EKHZvaWQsIGZpbmlzaF9wYXNzLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi0NCi0gIC8qIFN0YXRlIHZhcmlhYmxlcyBtYWRlIHZpc2libGUgdG8gb3RoZXIgbW9kdWxlcyAqLw0KLSAgYm9vbGVhbiBjYWxsX3Bhc3Nfc3RhcnR1cDsJLyogVHJ1ZSBpZiBwYXNzX3N0YXJ0dXAgbXVzdCBiZSBjYWxsZWQgKi8NCi0gIGJvb2xlYW4gaXNfbGFzdF9wYXNzOwkJLyogVHJ1ZSBkdXJpbmcgbGFzdCBwYXNzICovDQotfTsNCi0NCi0vKiBNYWluIGJ1ZmZlciBjb250cm9sIChkb3duc2FtcGxlZC1kYXRhIGJ1ZmZlcikgKi8NCi1zdHJ1Y3QganBlZ19jX21haW5fY29udHJvbGxlciB7DQotICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSl9CVUZfTU9ERSBwYXNzX21vZGUpKTsNCi0gIEpNRVRIT0Qodm9pZCwgcHJvY2Vzc19kYXRhLCAoal9jb21wcmVzc19wdHIgY2luZm8sDQotCQkJICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKRElNRU5TSU9OICppbl9yb3dfY3RyLA0KLQkJCSAgICAgICBKRElNRU5TSU9OIGluX3Jvd3NfYXZhaWwpKTsNCi19Ow0KLQ0KLS8qIENvbXByZXNzaW9uIHByZXByb2Nlc3NpbmcgKGRvd25zYW1wbGluZyBpbnB1dCBidWZmZXIgY29udHJvbCkgKi8NCi1zdHJ1Y3QganBlZ19jX3ByZXBfY29udHJvbGxlciB7DQotICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSl9CVUZfTU9ERSBwYXNzX21vZGUpKTsNCi0gIEpNRVRIT0Qodm9pZCwgcHJlX3Byb2Nlc3NfZGF0YSwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQkgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwNCi0JCQkJICAgSkRJTUVOU0lPTiAqaW5fcm93X2N0ciwNCi0JCQkJICAgSkRJTUVOU0lPTiBpbl9yb3dzX2F2YWlsLA0KLQkJCQkgICBKU0FNUElNQUdFIG91dHB1dF9idWYsDQotCQkJCSAgIEpESU1FTlNJT04gKm91dF9yb3dfZ3JvdXBfY3RyLA0KLQkJCQkgICBKRElNRU5TSU9OIG91dF9yb3dfZ3JvdXBzX2F2YWlsKSk7DQotfTsNCi0NCi0vKiBDb2VmZmljaWVudCBidWZmZXIgY29udHJvbCAqLw0KLXN0cnVjdCBqcGVnX2NfY29lZl9jb250cm9sbGVyIHsNCi0gIEpNRVRIT0Qodm9pZCwgc3RhcnRfcGFzcywgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKX0JVRl9NT0RFIHBhc3NfbW9kZSkpOw0KLSAgSk1FVEhPRChib29sZWFuLCBjb21wcmVzc19kYXRhLCAoal9jb21wcmVzc19wdHIgY2luZm8sDQotCQkJCSAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmKSk7DQotfTsNCi0NCi0vKiBDb2xvcnNwYWNlIGNvbnZlcnNpb24gKi8NCi1zdHJ1Y3QganBlZ19jb2xvcl9jb252ZXJ0ZXIgew0KLSAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi0gIEpNRVRIT0Qodm9pZCwgY29sb3JfY29udmVydCwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQlKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLA0KLQkJCQlKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykpOw0KLX07DQotDQotLyogRG93bnNhbXBsaW5nICovDQotc3RydWN0IGpwZWdfZG93bnNhbXBsZXIgew0KLSAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi0gIEpNRVRIT0Qodm9pZCwgZG93bnNhbXBsZSwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCSAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2luZGV4LA0KLQkJCSAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLA0KLQkJCSAgICAgSkRJTUVOU0lPTiBvdXRfcm93X2dyb3VwX2luZGV4KSk7DQotDQotICBib29sZWFuIG5lZWRfY29udGV4dF9yb3dzOwkvKiBUUlVFIGlmIG5lZWQgcm93cyBhYm92ZSAmIGJlbG93ICovDQotfTsNCi0NCi0vKiBGb3J3YXJkIERDVCAoYWxzbyBjb250cm9scyBjb2VmZmljaWVudCBxdWFudGl6YXRpb24pICovDQotc3RydWN0IGpwZWdfZm9yd2FyZF9kY3Qgew0KLSAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi0gIC8qIHBlcmhhcHMgdGhpcyBzaG91bGQgYmUgYW4gYXJyYXk/Pz8gKi8NCi0gIEpNRVRIT0Qodm9pZCwgZm9yd2FyZF9EQ1QsIChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwNCi0JCQkgICAgICBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKQkxPQ0tST1cgY29lZl9ibG9ja3MsDQotCQkJICAgICAgSkRJTUVOU0lPTiBzdGFydF9yb3csIEpESU1FTlNJT04gc3RhcnRfY29sLA0KLQkJCSAgICAgIEpESU1FTlNJT04gbnVtX2Jsb2NrcykpOw0KLX07DQotDQotLyogRW50cm9weSBlbmNvZGluZyAqLw0KLXN0cnVjdCBqcGVnX2VudHJvcHlfZW5jb2RlciB7DQotICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2NvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBnYXRoZXJfc3RhdGlzdGljcykpOw0KLSAgSk1FVEhPRChib29sZWFuLCBlbmNvZGVfbWN1LCAoal9jb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsNCi0gIEpNRVRIT0Qodm9pZCwgZmluaXNoX3Bhc3MsIChqX2NvbXByZXNzX3B0ciBjaW5mbykpOw0KLX07DQotDQotLyogTWFya2VyIHdyaXRpbmcgKi8NCi1zdHJ1Y3QganBlZ19tYXJrZXJfd3JpdGVyIHsNCi0gIEpNRVRIT0Qodm9pZCwgd3JpdGVfZmlsZV9oZWFkZXIsIChqX2NvbXByZXNzX3B0ciBjaW5mbykpOw0KLSAgSk1FVEhPRCh2b2lkLCB3cml0ZV9mcmFtZV9oZWFkZXIsIChqX2NvbXByZXNzX3B0ciBjaW5mbykpOw0KLSAgSk1FVEhPRCh2b2lkLCB3cml0ZV9zY2FuX2hlYWRlciwgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotICBKTUVUSE9EKHZvaWQsIHdyaXRlX2ZpbGVfdHJhaWxlciwgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotICBKTUVUSE9EKHZvaWQsIHdyaXRlX3RhYmxlc19vbmx5LCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi0gIC8qIFRoZXNlIHJvdXRpbmVzIGFyZSBleHBvcnRlZCB0byBhbGxvdyBpbnNlcnRpb24gb2YgZXh0cmEgbWFya2VycyAqLw0KLSAgLyogUHJvYmFibHkgb25seSBDT00gYW5kIEFQUG4gbWFya2VycyBzaG91bGQgYmUgd3JpdHRlbiB0aGlzIHdheSAqLw0KLSAgSk1FVEhPRCh2b2lkLCB3cml0ZV9tYXJrZXJfaGVhZGVyLCAoal9jb21wcmVzc19wdHIgY2luZm8sIGludCBtYXJrZXIsDQotCQkJCSAgICAgIHVuc2lnbmVkIGludCBkYXRhbGVuKSk7DQotICBKTUVUSE9EKHZvaWQsIHdyaXRlX21hcmtlcl9ieXRlLCAoal9jb21wcmVzc19wdHIgY2luZm8sIGludCB2YWwpKTsNCi19Ow0KLQ0KLQ0KLS8qIERlY2xhcmF0aW9ucyBmb3IgZGVjb21wcmVzc2lvbiBtb2R1bGVzICovDQotDQotLyogTWFzdGVyIGNvbnRyb2wgbW9kdWxlICovDQotc3RydWN0IGpwZWdfZGVjb21wX21hc3RlciB7DQotICBKTUVUSE9EKHZvaWQsIHByZXBhcmVfZm9yX291dHB1dF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLSAgSk1FVEhPRCh2b2lkLCBmaW5pc2hfb3V0cHV0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotDQotICAvKiBTdGF0ZSB2YXJpYWJsZXMgbWFkZSB2aXNpYmxlIHRvIG90aGVyIG1vZHVsZXMgKi8NCi0gIGJvb2xlYW4gaXNfZHVtbXlfcGFzczsJLyogVHJ1ZSBkdXJpbmcgMXN0IHBhc3MgZm9yIDItcGFzcyBxdWFudCAqLw0KLX07DQotDQotLyogSW5wdXQgY29udHJvbCBtb2R1bGUgKi8NCi1zdHJ1Y3QganBlZ19pbnB1dF9jb250cm9sbGVyIHsNCi0gIEpNRVRIT0QoaW50LCBjb25zdW1lX2lucHV0LCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLSAgSk1FVEhPRCh2b2lkLCByZXNldF9pbnB1dF9jb250cm9sbGVyLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLSAgSk1FVEhPRCh2b2lkLCBzdGFydF9pbnB1dF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLSAgSk1FVEhPRCh2b2lkLCBmaW5pc2hfaW5wdXRfcGFzcywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi0NCi0gIC8qIFN0YXRlIHZhcmlhYmxlcyBtYWRlIHZpc2libGUgdG8gb3RoZXIgbW9kdWxlcyAqLw0KLSAgYm9vbGVhbiBoYXNfbXVsdGlwbGVfc2NhbnM7CS8qIFRydWUgaWYgZmlsZSBoYXMgbXVsdGlwbGUgc2NhbnMgKi8NCi0gIGJvb2xlYW4gZW9pX3JlYWNoZWQ7CQkvKiBUcnVlIHdoZW4gRU9JIGhhcyBiZWVuIGNvbnN1bWVkICovDQotfTsNCi0NCi0vKiBNYWluIGJ1ZmZlciBjb250cm9sIChkb3duc2FtcGxlZC1kYXRhIGJ1ZmZlcikgKi8NCi1zdHJ1Y3QganBlZ19kX21haW5fY29udHJvbGxlciB7DQotICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKX0JVRl9NT0RFIHBhc3NfbW9kZSkpOw0KLSAgSk1FVEhPRCh2b2lkLCBwcm9jZXNzX2RhdGEsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCSAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLA0KLQkJCSAgICAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKSk7DQotfTsNCi0NCi0vKiBDb2VmZmljaWVudCBidWZmZXIgY29udHJvbCAqLw0KLXN0cnVjdCBqcGVnX2RfY29lZl9jb250cm9sbGVyIHsNCi0gIEpNRVRIT0Qodm9pZCwgc3RhcnRfaW5wdXRfcGFzcywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi0gIEpNRVRIT0QoaW50LCBjb25zdW1lX2RhdGEsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotICBKTUVUSE9EKHZvaWQsIHN0YXJ0X291dHB1dF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLSAgSk1FVEhPRChpbnQsIGRlY29tcHJlc3NfZGF0YSwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sDQotCQkJCSBKU0FNUElNQUdFIG91dHB1dF9idWYpKTsNCi0gIC8qIFBvaW50ZXIgdG8gYXJyYXkgb2YgY29lZmZpY2llbnQgdmlydHVhbCBhcnJheXMsIG9yIE5VTEwgaWYgbm9uZSAqLw0KLSAganZpcnRfYmFycmF5X3B0ciAqY29lZl9hcnJheXM7DQotfTsNCi0NCi0vKiBEZWNvbXByZXNzaW9uIHBvc3Rwcm9jZXNzaW5nIChjb2xvciBxdWFudGl6YXRpb24gYnVmZmVyIGNvbnRyb2wpICovDQotc3RydWN0IGpwZWdfZF9wb3N0X2NvbnRyb2xsZXIgew0KLSAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSl9CVUZfTU9ERSBwYXNzX21vZGUpKTsNCi0gIEpNRVRIT0Qodm9pZCwgcG9zdF9wcm9jZXNzX2RhdGEsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQkgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsDQotCQkJCSAgICBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLA0KLQkJCQkgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBzX2F2YWlsLA0KLQkJCQkgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLA0KLQkJCQkgICAgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsDQotCQkJCSAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKSk7DQotfTsNCi0NCi0vKiBNYXJrZXIgcmVhZGluZyAmIHBhcnNpbmcgKi8NCi1zdHJ1Y3QganBlZ19tYXJrZXJfcmVhZGVyIHsNCi0gIEpNRVRIT0Qodm9pZCwgcmVzZXRfbWFya2VyX3JlYWRlciwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi0gIC8qIFJlYWQgbWFya2VycyB1bnRpbCBTT1Mgb3IgRU9JLg0KLSAgICogUmV0dXJucyBzYW1lIGNvZGVzIGFzIGFyZSBkZWZpbmVkIGZvciBqcGVnX2NvbnN1bWVfaW5wdXQ6DQotICAgKiBKUEVHX1NVU1BFTkRFRCwgSlBFR19SRUFDSEVEX1NPUywgb3IgSlBFR19SRUFDSEVEX0VPSS4NCi0gICAqLw0KLSAgSk1FVEhPRChpbnQsIHJlYWRfbWFya2VycywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi0gIC8qIFJlYWQgYSByZXN0YXJ0IG1hcmtlciAtLS0gZXhwb3J0ZWQgZm9yIHVzZSBieSBlbnRyb3B5IGRlY29kZXIgb25seSAqLw0KLSAganBlZ19tYXJrZXJfcGFyc2VyX21ldGhvZCByZWFkX3Jlc3RhcnRfbWFya2VyOw0KLQ0KLSAgLyogU3RhdGUgb2YgbWFya2VyIHJlYWRlciAtLS0gbm9taW5hbGx5IGludGVybmFsLCBidXQgYXBwbGljYXRpb25zDQotICAgKiBzdXBwbHlpbmcgQ09NIG9yIEFQUG4gaGFuZGxlcnMgbWlnaHQgbGlrZSB0byBrbm93IHRoZSBzdGF0ZS4NCi0gICAqLw0KLSAgYm9vbGVhbiBzYXdfU09JOwkJLyogZm91bmQgU09JPyAqLw0KLSAgYm9vbGVhbiBzYXdfU09GOwkJLyogZm91bmQgU09GPyAqLw0KLSAgaW50IG5leHRfcmVzdGFydF9udW07CQkvKiBuZXh0IHJlc3RhcnQgbnVtYmVyIGV4cGVjdGVkICgwLTcpICovDQotICB1bnNpZ25lZCBpbnQgZGlzY2FyZGVkX2J5dGVzOwkvKiAjIG9mIGJ5dGVzIHNraXBwZWQgbG9va2luZyBmb3IgYSBtYXJrZXIgKi8NCi19Ow0KLQ0KLS8qIEVudHJvcHkgZGVjb2RpbmcgKi8NCi1zdHJ1Y3QganBlZ19lbnRyb3B5X2RlY29kZXIgew0KLSAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLSAgSk1FVEhPRChib29sZWFuLCBkZWNvZGVfbWN1LCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJSkJMT0NLUk9XICpNQ1VfZGF0YSkpOw0KLQ0KLSAgLyogVGhpcyBpcyBoZXJlIHRvIHNoYXJlIGNvZGUgYmV0d2VlbiBiYXNlbGluZSBhbmQgcHJvZ3Jlc3NpdmUgZGVjb2RlcnM7ICovDQotICAvKiBvdGhlciBtb2R1bGVzIHByb2JhYmx5IHNob3VsZCBub3QgdXNlIGl0ICovDQotICBib29sZWFuIGluc3VmZmljaWVudF9kYXRhOwkvKiBzZXQgVFJVRSBhZnRlciBlbWl0dGluZyB3YXJuaW5nICovDQotfTsNCi0NCi0vKiBJbnZlcnNlIERDVCAoYWxzbyBwZXJmb3JtcyBkZXF1YW50aXphdGlvbikgKi8NCi10eXBlZGVmIEpNRVRIT0Qodm9pZCwgaW52ZXJzZV9EQ1RfbWV0aG9kX3B0ciwNCi0JCShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwNCi0JCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLA0KLQkJIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7DQotDQotc3RydWN0IGpwZWdfaW52ZXJzZV9kY3Qgew0KLSAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLSAgLyogSXQgaXMgdXNlZnVsIHRvIGFsbG93IGVhY2ggY29tcG9uZW50IHRvIGhhdmUgYSBzZXBhcmF0ZSBJRENUIG1ldGhvZC4gKi8NCi0gIGludmVyc2VfRENUX21ldGhvZF9wdHIgaW52ZXJzZV9EQ1RbTUFYX0NPTVBPTkVOVFNdOw0KLX07DQotDQotLyogVXBzYW1wbGluZyAobm90ZSB0aGF0IHVwc2FtcGxlciBtdXN0IGFsc28gY2FsbCBjb2xvciBjb252ZXJ0ZXIpICovDQotc3RydWN0IGpwZWdfdXBzYW1wbGVyIHsNCi0gIEpNRVRIT0Qodm9pZCwgc3RhcnRfcGFzcywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi0gIEpNRVRIT0Qodm9pZCwgdXBzYW1wbGUsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCSAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLA0KLQkJCSAgIEpESU1FTlNJT04gKmluX3Jvd19ncm91cF9jdHIsDQotCQkJICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBzX2F2YWlsLA0KLQkJCSAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwNCi0JCQkgICBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwNCi0JCQkgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKSk7DQotDQotICBib29sZWFuIG5lZWRfY29udGV4dF9yb3dzOwkvKiBUUlVFIGlmIG5lZWQgcm93cyBhYm92ZSAmIGJlbG93ICovDQotfTsNCi0NCi0vKiBDb2xvcnNwYWNlIGNvbnZlcnNpb24gKi8NCi1zdHJ1Y3QganBlZ19jb2xvcl9kZWNvbnZlcnRlciB7DQotICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotICBKTUVUSE9EKHZvaWQsIGNvbG9yX2NvbnZlcnQsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQlKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csDQotCQkJCUpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKSk7DQotfTsNCi0NCi0vKiBDb2xvciBxdWFudGl6YXRpb24gb3IgY29sb3IgcHJlY2lzaW9uIHJlZHVjdGlvbiAqLw0KLXN0cnVjdCBqcGVnX2NvbG9yX3F1YW50aXplciB7DQotICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIGlzX3ByZV9zY2FuKSk7DQotICBKTUVUSE9EKHZvaWQsIGNvbG9yX3F1YW50aXplLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsDQotCQkJCSBpbnQgbnVtX3Jvd3MpKTsNCi0gIEpNRVRIT0Qodm9pZCwgZmluaXNoX3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotICBKTUVUSE9EKHZvaWQsIG5ld19jb2xvcl9tYXAsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotfTsNCi0NCi0NCi0vKiBNaXNjZWxsYW5lb3VzIHVzZWZ1bCBtYWNyb3MgKi8NCi0NCi0jdW5kZWYgTUFYDQotI2RlZmluZSBNQVgoYSxiKQkoKGEpID4gKGIpID8gKGEpIDogKGIpKQ0KLSN1bmRlZiBNSU4NCi0jZGVmaW5lIE1JTihhLGIpCSgoYSkgPCAoYikgPyAoYSkgOiAoYikpDQotDQotDQotLyogV2UgYXNzdW1lIHRoYXQgcmlnaHQgc2hpZnQgY29ycmVzcG9uZHMgdG8gc2lnbmVkIGRpdmlzaW9uIGJ5IDIgd2l0aA0KLSAqIHJvdW5kaW5nIHRvd2FyZHMgbWludXMgaW5maW5pdHkuICBUaGlzIGlzIGNvcnJlY3QgZm9yIHR5cGljYWwgImFyaXRobWV0aWMNCi0gKiBzaGlmdCIgaW5zdHJ1Y3Rpb25zIHRoYXQgc2hpZnQgaW4gY29waWVzIG9mIHRoZSBzaWduIGJpdC4gIEJ1dCBzb21lDQotICogQyBjb21waWxlcnMgaW1wbGVtZW50ID4+IHdpdGggYW4gdW5zaWduZWQgc2hpZnQuICBGb3IgdGhlc2UgbWFjaGluZXMgeW91DQotICogbXVzdCBkZWZpbmUgUklHSFRfU0hJRlRfSVNfVU5TSUdORUQuDQotICogUklHSFRfU0hJRlQgcHJvdmlkZXMgYSBwcm9wZXIgc2lnbmVkIHJpZ2h0IHNoaWZ0IG9mIGFuIElOVDMyIHF1YW50aXR5Lg0KLSAqIEl0IGlzIG9ubHkgYXBwbGllZCB3aXRoIGNvbnN0YW50IHNoaWZ0IGNvdW50cy4gIFNISUZUX1RFTVBTIG11c3QgYmUNCi0gKiBpbmNsdWRlZCBpbiB0aGUgdmFyaWFibGVzIG9mIGFueSByb3V0aW5lIHVzaW5nIFJJR0hUX1NISUZULg0KLSAqLw0KLQ0KLSNpZmRlZiBSSUdIVF9TSElGVF9JU19VTlNJR05FRA0KLSNkZWZpbmUgU0hJRlRfVEVNUFMJSU5UMzIgc2hpZnRfdGVtcDsNCi0jZGVmaW5lIFJJR0hUX1NISUZUKHgsc2hmdCkgIFwNCi0JKChzaGlmdF90ZW1wID0gKHgpKSA8IDAgPyBcDQotCSAoc2hpZnRfdGVtcCA+PiAoc2hmdCkpIHwgKCh+KChJTlQzMikgMCkpIDw8ICgzMi0oc2hmdCkpKSA6IFwNCi0JIChzaGlmdF90ZW1wID4+IChzaGZ0KSkpDQotI2Vsc2UNCi0jZGVmaW5lIFNISUZUX1RFTVBTDQotI2RlZmluZSBSSUdIVF9TSElGVCh4LHNoZnQpCSgoeCkgPj4gKHNoZnQpKQ0KLSNlbmRpZg0KLQ0KLQ0KLS8qIFNob3J0IGZvcm1zIG9mIGV4dGVybmFsIG5hbWVzIGZvciBzeXN0ZW1zIHdpdGggYnJhaW4tZGFtYWdlZCBsaW5rZXJzLiAqLw0KLQ0KLSNpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTDQotI2RlZmluZSBqaW5pdF9jb21wcmVzc19tYXN0ZXIJaklDb21wcmVzcw0KLSNkZWZpbmUgamluaXRfY19tYXN0ZXJfY29udHJvbAlqSUNNYXN0ZXINCi0jZGVmaW5lIGppbml0X2NfbWFpbl9jb250cm9sbGVyCWpJQ01haW5DDQotI2RlZmluZSBqaW5pdF9jX3ByZXBfY29udHJvbGxlcglqSUNQcmVwQw0KLSNkZWZpbmUgamluaXRfY19jb2VmX2NvbnRyb2xsZXIJaklDQ29lZkMNCi0jZGVmaW5lIGppbml0X2NvbG9yX2NvbnZlcnRlcglqSUNDb2xvcg0KLSNkZWZpbmUgamluaXRfZG93bnNhbXBsZXIJaklEb3duc2FtcGxlcg0KLSNkZWZpbmUgamluaXRfZm9yd2FyZF9kY3QJaklGRENUDQotI2RlZmluZSBqaW5pdF9odWZmX2VuY29kZXIJaklIRW5jb2Rlcg0KLSNkZWZpbmUgamluaXRfcGh1ZmZfZW5jb2RlcglqSVBIRW5jb2Rlcg0KLSNkZWZpbmUgamluaXRfbWFya2VyX3dyaXRlcglqSU1Xcml0ZXINCi0jZGVmaW5lIGppbml0X21hc3Rlcl9kZWNvbXByZXNzCWpJRE1hc3Rlcg0KLSNkZWZpbmUgamluaXRfZF9tYWluX2NvbnRyb2xsZXIJaklETWFpbkMNCi0jZGVmaW5lIGppbml0X2RfY29lZl9jb250cm9sbGVyCWpJRENvZWZDDQotI2RlZmluZSBqaW5pdF9kX3Bvc3RfY29udHJvbGxlcglqSURQb3N0Qw0KLSNkZWZpbmUgamluaXRfaW5wdXRfY29udHJvbGxlcglqSUluQ3Rscg0KLSNkZWZpbmUgamluaXRfbWFya2VyX3JlYWRlcglqSU1SZWFkZXINCi0jZGVmaW5lIGppbml0X2h1ZmZfZGVjb2RlcglqSUhEZWNvZGVyDQotI2RlZmluZSBqaW5pdF9waHVmZl9kZWNvZGVyCWpJUEhEZWNvZGVyDQotI2RlZmluZSBqaW5pdF9pbnZlcnNlX2RjdAlqSUlEQ1QNCi0jZGVmaW5lIGppbml0X3Vwc2FtcGxlcgkJaklVcHNhbXBsZXINCi0jZGVmaW5lIGppbml0X2NvbG9yX2RlY29udmVydGVyCWpJRENvbG9yDQotI2RlZmluZSBqaW5pdF8xcGFzc19xdWFudGl6ZXIJakkxUXVhbnQNCi0jZGVmaW5lIGppbml0XzJwYXNzX3F1YW50aXplcglqSTJRdWFudA0KLSNkZWZpbmUgamluaXRfbWVyZ2VkX3Vwc2FtcGxlcglqSU1VcHNhbXBsZXINCi0jZGVmaW5lIGppbml0X21lbW9yeV9tZ3IJaklNZW1NZ3INCi0jZGVmaW5lIGpkaXZfcm91bmRfdXAJCWpEaXZSb3VuZA0KLSNkZWZpbmUganJvdW5kX3VwCQlqUm91bmQNCi0jZGVmaW5lIGpjb3B5X3NhbXBsZV9yb3dzCWpDb3B5U2FtcGxlcw0KLSNkZWZpbmUgamNvcHlfYmxvY2tfcm93CQlqQ29weUJsb2Nrcw0KLSNkZWZpbmUganplcm9fZmFyCQlqWmVyb0Zhcg0KLSNkZWZpbmUganBlZ196aWd6YWdfb3JkZXIJalpJR1RhYmxlDQotI2RlZmluZSBqcGVnX25hdHVyYWxfb3JkZXIJalpBR1RhYmxlDQotI2VuZGlmIC8qIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMgKi8NCi0NCi0NCi0vKiBDb21wcmVzc2lvbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgKi8NCi1FWFRFUk4odm9pZCkgamluaXRfY29tcHJlc3NfbWFzdGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4odm9pZCkgamluaXRfY19tYXN0ZXJfY29udHJvbCBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQkJIGJvb2xlYW4gdHJhbnNjb2RlX29ubHkpKTsNCi1FWFRFUk4odm9pZCkgamluaXRfY19tYWluX2NvbnRyb2xsZXIgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJCSAgYm9vbGVhbiBuZWVkX2Z1bGxfYnVmZmVyKSk7DQotRVhURVJOKHZvaWQpIGppbml0X2NfcHJlcF9jb250cm9sbGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sDQotCQkJCQkgIGJvb2xlYW4gbmVlZF9mdWxsX2J1ZmZlcikpOw0KLUVYVEVSTih2b2lkKSBqaW5pdF9jX2NvZWZfY29udHJvbGxlciBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQkJICBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpKTsNCi1FWFRFUk4odm9pZCkgamluaXRfY29sb3JfY29udmVydGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4odm9pZCkgamluaXRfZG93bnNhbXBsZXIgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOw0KLUVYVEVSTih2b2lkKSBqaW5pdF9mb3J3YXJkX2RjdCBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotRVhURVJOKHZvaWQpIGppbml0X2h1ZmZfZW5jb2RlciBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotRVhURVJOKHZvaWQpIGppbml0X3BodWZmX2VuY29kZXIgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOw0KLUVYVEVSTih2b2lkKSBqaW5pdF9tYXJrZXJfd3JpdGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi0vKiBEZWNvbXByZXNzaW9uIG1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcyAqLw0KLUVYVEVSTih2b2lkKSBqaW5pdF9tYXN0ZXJfZGVjb21wcmVzcyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4odm9pZCkgamluaXRfZF9tYWluX2NvbnRyb2xsZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQkJICBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpKTsNCi1FWFRFUk4odm9pZCkgamluaXRfZF9jb2VmX2NvbnRyb2xsZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQkJICBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpKTsNCi1FWFRFUk4odm9pZCkgamluaXRfZF9wb3N0X2NvbnRyb2xsZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQkJICBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpKTsNCi1FWFRFUk4odm9pZCkgamluaXRfaW5wdXRfY29udHJvbGxlciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4odm9pZCkgamluaXRfbWFya2VyX3JlYWRlciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4odm9pZCkgamluaXRfaHVmZl9kZWNvZGVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLUVYVEVSTih2b2lkKSBqaW5pdF9waHVmZl9kZWNvZGVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLUVYVEVSTih2b2lkKSBqaW5pdF9pbnZlcnNlX2RjdCBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4odm9pZCkgamluaXRfdXBzYW1wbGVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLUVYVEVSTih2b2lkKSBqaW5pdF9jb2xvcl9kZWNvbnZlcnRlciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4odm9pZCkgamluaXRfMXBhc3NfcXVhbnRpemVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLUVYVEVSTih2b2lkKSBqaW5pdF8ycGFzc19xdWFudGl6ZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotRVhURVJOKHZvaWQpIGppbml0X21lcmdlZF91cHNhbXBsZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotLyogTWVtb3J5IG1hbmFnZXIgaW5pdGlhbGl6YXRpb24gKi8NCi1FWFRFUk4odm9pZCkgamluaXRfbWVtb3J5X21nciBKUFAoKGpfY29tbW9uX3B0ciBjaW5mbykpOw0KLQ0KLS8qIFV0aWxpdHkgcm91dGluZXMgaW4ganV0aWxzLmMgKi8NCi1FWFRFUk4obG9uZykgamRpdl9yb3VuZF91cCBKUFAoKGxvbmcgYSwgbG9uZyBiKSk7DQotRVhURVJOKGxvbmcpIGpyb3VuZF91cCBKUFAoKGxvbmcgYSwgbG9uZyBiKSk7DQotRVhURVJOKHZvaWQpIGpjb3B5X3NhbXBsZV9yb3dzIEpQUCgoSlNBTVBBUlJBWSBpbnB1dF9hcnJheSwgaW50IHNvdXJjZV9yb3csDQotCQkJCSAgICBKU0FNUEFSUkFZIG91dHB1dF9hcnJheSwgaW50IGRlc3Rfcm93LA0KLQkJCQkgICAgaW50IG51bV9yb3dzLCBKRElNRU5TSU9OIG51bV9jb2xzKSk7DQotRVhURVJOKHZvaWQpIGpjb3B5X2Jsb2NrX3JvdyBKUFAoKEpCTE9DS1JPVyBpbnB1dF9yb3csIEpCTE9DS1JPVyBvdXRwdXRfcm93LA0KLQkJCQkgIEpESU1FTlNJT04gbnVtX2Jsb2NrcykpOw0KLUVYVEVSTih2b2lkKSBqemVyb19mYXIgSlBQKCh2b2lkIEZBUiAqIHRhcmdldCwgc2l6ZV90IGJ5dGVzdG96ZXJvKSk7DQotLyogQ29uc3RhbnQgdGFibGVzIGluIGp1dGlscy5jICovDQotI2lmIDAJCQkJLyogVGhpcyB0YWJsZSBpcyBub3QgYWN0dWFsbHkgbmVlZGVkIGluIHY2YSAqLw0KLWV4dGVybiBjb25zdCBpbnQganBlZ196aWd6YWdfb3JkZXJbXTsgLyogbmF0dXJhbCBjb2VmIG9yZGVyIHRvIHppZ3phZyBvcmRlciAqLw0KLSNlbmRpZg0KLWV4dGVybiBjb25zdCBpbnQganBlZ19uYXR1cmFsX29yZGVyW107IC8qIHppZ3phZyBjb2VmIG9yZGVyIHRvIG5hdHVyYWwgb3JkZXIgKi8NCi0NCi0vKiBTdXBwcmVzcyB1bmRlZmluZWQtc3RydWN0dXJlIGNvbXBsYWludHMgaWYgbmVjZXNzYXJ5LiAqLw0KLQ0KLSNpZmRlZiBJTkNPTVBMRVRFX1RZUEVTX0JST0tFTg0KLSNpZm5kZWYgQU1fTUVNT1JZX01BTkFHRVIJLyogb25seSBqbWVtbWdyLmMgZGVmaW5lcyB0aGVzZSAqLw0KLXN0cnVjdCBqdmlydF9zYXJyYXlfY29udHJvbCB7IGxvbmcgZHVtbXk7IH07DQotc3RydWN0IGp2aXJ0X2JhcnJheV9jb250cm9sIHsgbG9uZyBkdW1teTsgfTsNCi0jZW5kaWYNCi0jZW5kaWYgLyogSU5DT01QTEVURV9UWVBFU19CUk9LRU4gKi8NCisvKgorICoganBlZ2ludC5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgcHJvdmlkZXMgY29tbW9uIGRlY2xhcmF0aW9ucyBmb3IgdGhlIHZhcmlvdXMgSlBFRyBtb2R1bGVzLgorICogVGhlc2UgZGVjbGFyYXRpb25zIGFyZSBjb25zaWRlcmVkIGludGVybmFsIHRvIHRoZSBKUEVHIGxpYnJhcnk7IG1vc3QKKyAqIGFwcGxpY2F0aW9ucyB1c2luZyB0aGUgbGlicmFyeSBzaG91bGRuJ3QgbmVlZCB0byBpbmNsdWRlIHRoaXMgZmlsZS4KKyAqLworCisKKy8qIERlY2xhcmF0aW9ucyBmb3IgYm90aCBjb21wcmVzc2lvbiAmIGRlY29tcHJlc3Npb24gKi8KKwordHlwZWRlZiBlbnVtIHsJCQkvKiBPcGVyYXRpbmcgbW9kZXMgZm9yIGJ1ZmZlciBjb250cm9sbGVycyAqLworCUpCVUZfUEFTU19USFJVLAkJLyogUGxhaW4gc3RyaXB3aXNlIG9wZXJhdGlvbiAqLworCS8qIFJlbWFpbmluZyBtb2RlcyByZXF1aXJlIGEgZnVsbC1pbWFnZSBidWZmZXIgdG8gaGF2ZSBiZWVuIGNyZWF0ZWQgKi8KKwlKQlVGX1NBVkVfU09VUkNFLAkvKiBSdW4gc291cmNlIHN1Ym9iamVjdCBvbmx5LCBzYXZlIG91dHB1dCAqLworCUpCVUZfQ1JBTktfREVTVCwJLyogUnVuIGRlc3Qgc3Vib2JqZWN0IG9ubHksIHVzaW5nIHNhdmVkIGRhdGEgKi8KKwlKQlVGX1NBVkVfQU5EX1BBU1MJLyogUnVuIGJvdGggc3Vib2JqZWN0cywgc2F2ZSBvdXRwdXQgKi8KK30gSl9CVUZfTU9ERTsKKworLyogVmFsdWVzIG9mIGdsb2JhbF9zdGF0ZSBmaWVsZCAoamRhcGkuYyBoYXMgc29tZSBkZXBlbmRlbmNpZXMgb24gb3JkZXJpbmchKSAqLworI2RlZmluZSBDU1RBVEVfU1RBUlQJMTAwCS8qIGFmdGVyIGNyZWF0ZV9jb21wcmVzcyAqLworI2RlZmluZSBDU1RBVEVfU0NBTk5JTkcJMTAxCS8qIHN0YXJ0X2NvbXByZXNzIGRvbmUsIHdyaXRlX3NjYW5saW5lcyBPSyAqLworI2RlZmluZSBDU1RBVEVfUkFXX09LCTEwMgkvKiBzdGFydF9jb21wcmVzcyBkb25lLCB3cml0ZV9yYXdfZGF0YSBPSyAqLworI2RlZmluZSBDU1RBVEVfV1JDT0VGUwkxMDMJLyoganBlZ193cml0ZV9jb2VmZmljaWVudHMgZG9uZSAqLworI2RlZmluZSBEU1RBVEVfU1RBUlQJMjAwCS8qIGFmdGVyIGNyZWF0ZV9kZWNvbXByZXNzICovCisjZGVmaW5lIERTVEFURV9JTkhFQURFUgkyMDEJLyogcmVhZGluZyBoZWFkZXIgbWFya2Vycywgbm8gU09TIHlldCAqLworI2RlZmluZSBEU1RBVEVfUkVBRFkJMjAyCS8qIGZvdW5kIFNPUywgcmVhZHkgZm9yIHN0YXJ0X2RlY29tcHJlc3MgKi8KKyNkZWZpbmUgRFNUQVRFX1BSRUxPQUQJMjAzCS8qIHJlYWRpbmcgbXVsdGlzY2FuIGZpbGUgaW4gc3RhcnRfZGVjb21wcmVzcyovCisjZGVmaW5lIERTVEFURV9QUkVTQ0FOCTIwNAkvKiBwZXJmb3JtaW5nIGR1bW15IHBhc3MgZm9yIDItcGFzcyBxdWFudCAqLworI2RlZmluZSBEU1RBVEVfU0NBTk5JTkcJMjA1CS8qIHN0YXJ0X2RlY29tcHJlc3MgZG9uZSwgcmVhZF9zY2FubGluZXMgT0sgKi8KKyNkZWZpbmUgRFNUQVRFX1JBV19PSwkyMDYJLyogc3RhcnRfZGVjb21wcmVzcyBkb25lLCByZWFkX3Jhd19kYXRhIE9LICovCisjZGVmaW5lIERTVEFURV9CVUZJTUFHRQkyMDcJLyogZXhwZWN0aW5nIGpwZWdfc3RhcnRfb3V0cHV0ICovCisjZGVmaW5lIERTVEFURV9CVUZQT1NUCTIwOAkvKiBsb29raW5nIGZvciBTT1MvRU9JIGluIGpwZWdfZmluaXNoX291dHB1dCAqLworI2RlZmluZSBEU1RBVEVfUkRDT0VGUwkyMDkJLyogcmVhZGluZyBmaWxlIGluIGpwZWdfcmVhZF9jb2VmZmljaWVudHMgKi8KKyNkZWZpbmUgRFNUQVRFX1NUT1BQSU5HCTIxMAkvKiBsb29raW5nIGZvciBFT0kgaW4ganBlZ19maW5pc2hfZGVjb21wcmVzcyAqLworCisKKy8qIERlY2xhcmF0aW9ucyBmb3IgY29tcHJlc3Npb24gbW9kdWxlcyAqLworCisvKiBNYXN0ZXIgY29udHJvbCBtb2R1bGUgKi8KK3N0cnVjdCBqcGVnX2NvbXBfbWFzdGVyIHsKKyAgSk1FVEhPRCh2b2lkLCBwcmVwYXJlX2Zvcl9wYXNzLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsKKyAgSk1FVEhPRCh2b2lkLCBwYXNzX3N0YXJ0dXAsIChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworICBKTUVUSE9EKHZvaWQsIGZpbmlzaF9wYXNzLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsKKworICAvKiBTdGF0ZSB2YXJpYWJsZXMgbWFkZSB2aXNpYmxlIHRvIG90aGVyIG1vZHVsZXMgKi8KKyAgYm9vbGVhbiBjYWxsX3Bhc3Nfc3RhcnR1cDsJLyogVHJ1ZSBpZiBwYXNzX3N0YXJ0dXAgbXVzdCBiZSBjYWxsZWQgKi8KKyAgYm9vbGVhbiBpc19sYXN0X3Bhc3M7CQkvKiBUcnVlIGR1cmluZyBsYXN0IHBhc3MgKi8KK307CisKKy8qIE1haW4gYnVmZmVyIGNvbnRyb2wgKGRvd25zYW1wbGVkLWRhdGEgYnVmZmVyKSAqLworc3RydWN0IGpwZWdfY19tYWluX2NvbnRyb2xsZXIgeworICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSl9CVUZfTU9ERSBwYXNzX21vZGUpKTsKKyAgSk1FVEhPRCh2b2lkLCBwcm9jZXNzX2RhdGEsIChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCSAgICAgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2N0ciwKKwkJCSAgICAgICBKRElNRU5TSU9OIGluX3Jvd3NfYXZhaWwpKTsKK307CisKKy8qIENvbXByZXNzaW9uIHByZXByb2Nlc3NpbmcgKGRvd25zYW1wbGluZyBpbnB1dCBidWZmZXIgY29udHJvbCkgKi8KK3N0cnVjdCBqcGVnX2NfcHJlcF9jb250cm9sbGVyIHsKKyAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9jb21wcmVzc19wdHIgY2luZm8sIEpfQlVGX01PREUgcGFzc19tb2RlKSk7CisgIEpNRVRIT0Qodm9pZCwgcHJlX3Byb2Nlc3NfZGF0YSwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCSAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorCQkJCSAgIEpESU1FTlNJT04gKmluX3Jvd19jdHIsCisJCQkJICAgSkRJTUVOU0lPTiBpbl9yb3dzX2F2YWlsLAorCQkJCSAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKwkJCQkgICBKRElNRU5TSU9OICpvdXRfcm93X2dyb3VwX2N0ciwKKwkJCQkgICBKRElNRU5TSU9OIG91dF9yb3dfZ3JvdXBzX2F2YWlsKSk7Cit9OworCisvKiBDb2VmZmljaWVudCBidWZmZXIgY29udHJvbCAqLworc3RydWN0IGpwZWdfY19jb2VmX2NvbnRyb2xsZXIgeworICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSl9CVUZfTU9ERSBwYXNzX21vZGUpKTsKKyAgSk1FVEhPRChib29sZWFuLCBjb21wcmVzc19kYXRhLCAoal9jb21wcmVzc19wdHIgY2luZm8sCisJCQkJICAgSlNBTVBJTUFHRSBpbnB1dF9idWYpKTsKK307CisKKy8qIENvbG9yc3BhY2UgY29udmVyc2lvbiAqLworc3RydWN0IGpwZWdfY29sb3JfY29udmVydGVyIHsKKyAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsKKyAgSk1FVEhPRCh2b2lkLCBjb2xvcl9jb252ZXJ0LCAoal9jb21wcmVzc19wdHIgY2luZm8sCisJCQkJSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKwkJCQlKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykpOworfTsKKworLyogRG93bnNhbXBsaW5nICovCitzdHJ1Y3QganBlZ19kb3duc2FtcGxlciB7CisgIEpNRVRIT0Qodm9pZCwgc3RhcnRfcGFzcywgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CisgIEpNRVRIT0Qodm9pZCwgZG93bnNhbXBsZSwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfaW5kZXgsCisJCQkgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKwkJCSAgICAgSkRJTUVOU0lPTiBvdXRfcm93X2dyb3VwX2luZGV4KSk7CisKKyAgYm9vbGVhbiBuZWVkX2NvbnRleHRfcm93czsJLyogVFJVRSBpZiBuZWVkIHJvd3MgYWJvdmUgJiBiZWxvdyAqLworfTsKKworLyogRm9yd2FyZCBEQ1QgKGFsc28gY29udHJvbHMgY29lZmZpY2llbnQgcXVhbnRpemF0aW9uKSAqLworc3RydWN0IGpwZWdfZm9yd2FyZF9kY3QgeworICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworICAvKiBwZXJoYXBzIHRoaXMgc2hvdWxkIGJlIGFuIGFycmF5Pz8/ICovCisgIEpNRVRIT0Qodm9pZCwgZm9yd2FyZF9EQ1QsIChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCSAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCQkJICAgICAgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkJMT0NLUk9XIGNvZWZfYmxvY2tzLAorCQkJICAgICAgSkRJTUVOU0lPTiBzdGFydF9yb3csIEpESU1FTlNJT04gc3RhcnRfY29sLAorCQkJICAgICAgSkRJTUVOU0lPTiBudW1fYmxvY2tzKSk7Cit9OworCisvKiBFbnRyb3B5IGVuY29kaW5nICovCitzdHJ1Y3QganBlZ19lbnRyb3B5X2VuY29kZXIgeworICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2NvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBnYXRoZXJfc3RhdGlzdGljcykpOworICBKTUVUSE9EKGJvb2xlYW4sIGVuY29kZV9tY3UsIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkpOworICBKTUVUSE9EKHZvaWQsIGZpbmlzaF9wYXNzLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsKK307CisKKy8qIE1hcmtlciB3cml0aW5nICovCitzdHJ1Y3QganBlZ19tYXJrZXJfd3JpdGVyIHsKKyAgSk1FVEhPRCh2b2lkLCB3cml0ZV9maWxlX2hlYWRlciwgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CisgIEpNRVRIT0Qodm9pZCwgd3JpdGVfZnJhbWVfaGVhZGVyLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsKKyAgSk1FVEhPRCh2b2lkLCB3cml0ZV9zY2FuX2hlYWRlciwgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CisgIEpNRVRIT0Qodm9pZCwgd3JpdGVfZmlsZV90cmFpbGVyLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsKKyAgSk1FVEhPRCh2b2lkLCB3cml0ZV90YWJsZXNfb25seSwgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CisgIC8qIFRoZXNlIHJvdXRpbmVzIGFyZSBleHBvcnRlZCB0byBhbGxvdyBpbnNlcnRpb24gb2YgZXh0cmEgbWFya2VycyAqLworICAvKiBQcm9iYWJseSBvbmx5IENPTSBhbmQgQVBQbiBtYXJrZXJzIHNob3VsZCBiZSB3cml0dGVuIHRoaXMgd2F5ICovCisgIEpNRVRIT0Qodm9pZCwgd3JpdGVfbWFya2VyX2hlYWRlciwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBkYXRhbGVuKSk7CisgIEpNRVRIT0Qodm9pZCwgd3JpdGVfbWFya2VyX2J5dGUsIChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IHZhbCkpOworfTsKKworCisvKiBEZWNsYXJhdGlvbnMgZm9yIGRlY29tcHJlc3Npb24gbW9kdWxlcyAqLworCisvKiBNYXN0ZXIgY29udHJvbCBtb2R1bGUgKi8KK3N0cnVjdCBqcGVnX2RlY29tcF9tYXN0ZXIgeworICBKTUVUSE9EKHZvaWQsIHByZXBhcmVfZm9yX291dHB1dF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworICBKTUVUSE9EKHZvaWQsIGZpbmlzaF9vdXRwdXRfcGFzcywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKKworICAvKiBTdGF0ZSB2YXJpYWJsZXMgbWFkZSB2aXNpYmxlIHRvIG90aGVyIG1vZHVsZXMgKi8KKyAgYm9vbGVhbiBpc19kdW1teV9wYXNzOwkvKiBUcnVlIGR1cmluZyAxc3QgcGFzcyBmb3IgMi1wYXNzIHF1YW50ICovCit9OworCisvKiBJbnB1dCBjb250cm9sIG1vZHVsZSAqLworc3RydWN0IGpwZWdfaW5wdXRfY29udHJvbGxlciB7CisgIEpNRVRIT0QoaW50LCBjb25zdW1lX2lucHV0LCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworICBKTUVUSE9EKHZvaWQsIHJlc2V0X2lucHV0X2NvbnRyb2xsZXIsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CisgIEpNRVRIT0Qodm9pZCwgc3RhcnRfaW5wdXRfcGFzcywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKKyAgSk1FVEhPRCh2b2lkLCBmaW5pc2hfaW5wdXRfcGFzcywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKKworICAvKiBTdGF0ZSB2YXJpYWJsZXMgbWFkZSB2aXNpYmxlIHRvIG90aGVyIG1vZHVsZXMgKi8KKyAgYm9vbGVhbiBoYXNfbXVsdGlwbGVfc2NhbnM7CS8qIFRydWUgaWYgZmlsZSBoYXMgbXVsdGlwbGUgc2NhbnMgKi8KKyAgYm9vbGVhbiBlb2lfcmVhY2hlZDsJCS8qIFRydWUgd2hlbiBFT0kgaGFzIGJlZW4gY29uc3VtZWQgKi8KK307CisKKy8qIE1haW4gYnVmZmVyIGNvbnRyb2wgKGRvd25zYW1wbGVkLWRhdGEgYnVmZmVyKSAqLworc3RydWN0IGpwZWdfZF9tYWluX2NvbnRyb2xsZXIgeworICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKX0JVRl9NT0RFIHBhc3NfbW9kZSkpOworICBKTUVUSE9EKHZvaWQsIHByb2Nlc3NfZGF0YSwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisJCQkgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwKKwkJCSAgICAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKSk7Cit9OworCisvKiBDb2VmZmljaWVudCBidWZmZXIgY29udHJvbCAqLworc3RydWN0IGpwZWdfZF9jb2VmX2NvbnRyb2xsZXIgeworICBKTUVUSE9EKHZvaWQsIHN0YXJ0X2lucHV0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CisgIEpNRVRIT0QoaW50LCBjb25zdW1lX2RhdGEsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CisgIEpNRVRIT0Qodm9pZCwgc3RhcnRfb3V0cHV0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CisgIEpNRVRIT0QoaW50LCBkZWNvbXByZXNzX2RhdGEsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCSBKU0FNUElNQUdFIG91dHB1dF9idWYpKTsKKyAgLyogUG9pbnRlciB0byBhcnJheSBvZiBjb2VmZmljaWVudCB2aXJ0dWFsIGFycmF5cywgb3IgTlVMTCBpZiBub25lICovCisgIGp2aXJ0X2JhcnJheV9wdHIgKmNvZWZfYXJyYXlzOworfTsKKworLyogRGVjb21wcmVzc2lvbiBwb3N0cHJvY2Vzc2luZyAoY29sb3IgcXVhbnRpemF0aW9uIGJ1ZmZlciBjb250cm9sKSAqLworc3RydWN0IGpwZWdfZF9wb3N0X2NvbnRyb2xsZXIgeworICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKX0JVRl9NT0RFIHBhc3NfbW9kZSkpOworICBKTUVUSE9EKHZvaWQsIHBvc3RfcHJvY2Vzc19kYXRhLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisJCQkJICAgIEpESU1FTlNJT04gKmluX3Jvd19ncm91cF9jdHIsCisJCQkJICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3Vwc19hdmFpbCwKKwkJCQkgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorCQkJCSAgICBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwKKwkJCQkgICAgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkpOworfTsKKworLyogTWFya2VyIHJlYWRpbmcgJiBwYXJzaW5nICovCitzdHJ1Y3QganBlZ19tYXJrZXJfcmVhZGVyIHsKKyAgSk1FVEhPRCh2b2lkLCByZXNldF9tYXJrZXJfcmVhZGVyLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworICAvKiBSZWFkIG1hcmtlcnMgdW50aWwgU09TIG9yIEVPSS4KKyAgICogUmV0dXJucyBzYW1lIGNvZGVzIGFzIGFyZSBkZWZpbmVkIGZvciBqcGVnX2NvbnN1bWVfaW5wdXQ6CisgICAqIEpQRUdfU1VTUEVOREVELCBKUEVHX1JFQUNIRURfU09TLCBvciBKUEVHX1JFQUNIRURfRU9JLgorICAgKi8KKyAgSk1FVEhPRChpbnQsIHJlYWRfbWFya2VycywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKKyAgLyogUmVhZCBhIHJlc3RhcnQgbWFya2VyIC0tLSBleHBvcnRlZCBmb3IgdXNlIGJ5IGVudHJvcHkgZGVjb2RlciBvbmx5ICovCisgIGpwZWdfbWFya2VyX3BhcnNlcl9tZXRob2QgcmVhZF9yZXN0YXJ0X21hcmtlcjsKKworICAvKiBTdGF0ZSBvZiBtYXJrZXIgcmVhZGVyIC0tLSBub21pbmFsbHkgaW50ZXJuYWwsIGJ1dCBhcHBsaWNhdGlvbnMKKyAgICogc3VwcGx5aW5nIENPTSBvciBBUFBuIGhhbmRsZXJzIG1pZ2h0IGxpa2UgdG8ga25vdyB0aGUgc3RhdGUuCisgICAqLworICBib29sZWFuIHNhd19TT0k7CQkvKiBmb3VuZCBTT0k/ICovCisgIGJvb2xlYW4gc2F3X1NPRjsJCS8qIGZvdW5kIFNPRj8gKi8KKyAgaW50IG5leHRfcmVzdGFydF9udW07CQkvKiBuZXh0IHJlc3RhcnQgbnVtYmVyIGV4cGVjdGVkICgwLTcpICovCisgIHVuc2lnbmVkIGludCBkaXNjYXJkZWRfYnl0ZXM7CS8qICMgb2YgYnl0ZXMgc2tpcHBlZCBsb29raW5nIGZvciBhIG1hcmtlciAqLworfTsKKworLyogRW50cm9weSBkZWNvZGluZyAqLworc3RydWN0IGpwZWdfZW50cm9weV9kZWNvZGVyIHsKKyAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworICBKTUVUSE9EKGJvb2xlYW4sIGRlY29kZV9tY3UsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCUpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKKworICAvKiBUaGlzIGlzIGhlcmUgdG8gc2hhcmUgY29kZSBiZXR3ZWVuIGJhc2VsaW5lIGFuZCBwcm9ncmVzc2l2ZSBkZWNvZGVyczsgKi8KKyAgLyogb3RoZXIgbW9kdWxlcyBwcm9iYWJseSBzaG91bGQgbm90IHVzZSBpdCAqLworICBib29sZWFuIGluc3VmZmljaWVudF9kYXRhOwkvKiBzZXQgVFJVRSBhZnRlciBlbWl0dGluZyB3YXJuaW5nICovCit9OworCisvKiBJbnZlcnNlIERDVCAoYWxzbyBwZXJmb3JtcyBkZXF1YW50aXphdGlvbikgKi8KK3R5cGVkZWYgSk1FVEhPRCh2b2lkLCBpbnZlcnNlX0RDVF9tZXRob2RfcHRyLAorCQkoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorCQkgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKKworc3RydWN0IGpwZWdfaW52ZXJzZV9kY3QgeworICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CisgIC8qIEl0IGlzIHVzZWZ1bCB0byBhbGxvdyBlYWNoIGNvbXBvbmVudCB0byBoYXZlIGEgc2VwYXJhdGUgSURDVCBtZXRob2QuICovCisgIGludmVyc2VfRENUX21ldGhvZF9wdHIgaW52ZXJzZV9EQ1RbTUFYX0NPTVBPTkVOVFNdOworfTsKKworLyogVXBzYW1wbGluZyAobm90ZSB0aGF0IHVwc2FtcGxlciBtdXN0IGFsc28gY2FsbCBjb2xvciBjb252ZXJ0ZXIpICovCitzdHJ1Y3QganBlZ191cHNhbXBsZXIgeworICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CisgIEpNRVRIT0Qodm9pZCwgdXBzYW1wbGUsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisJCQkgICBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLAorCQkJICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBzX2F2YWlsLAorCQkJICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorCQkJICAgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCisJCQkgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKSk7CisKKyAgYm9vbGVhbiBuZWVkX2NvbnRleHRfcm93czsJLyogVFJVRSBpZiBuZWVkIHJvd3MgYWJvdmUgJiBiZWxvdyAqLworfTsKKworLyogQ29sb3JzcGFjZSBjb252ZXJzaW9uICovCitzdHJ1Y3QganBlZ19jb2xvcl9kZWNvbnZlcnRlciB7CisgIEpNRVRIT0Qodm9pZCwgc3RhcnRfcGFzcywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKKyAgSk1FVEhPRCh2b2lkLCBjb2xvcl9jb252ZXJ0LCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCQlKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisJCQkJSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpKTsKK307CisKKy8qIENvbG9yIHF1YW50aXphdGlvbiBvciBjb2xvciBwcmVjaXNpb24gcmVkdWN0aW9uICovCitzdHJ1Y3QganBlZ19jb2xvcl9xdWFudGl6ZXIgeworICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIGlzX3ByZV9zY2FuKSk7CisgIEpNRVRIT0Qodm9pZCwgY29sb3JfcXVhbnRpemUsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCSBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorCQkJCSBpbnQgbnVtX3Jvd3MpKTsKKyAgSk1FVEhPRCh2b2lkLCBmaW5pc2hfcGFzcywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKKyAgSk1FVEhPRCh2b2lkLCBuZXdfY29sb3JfbWFwLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworfTsKKworCisvKiBNaXNjZWxsYW5lb3VzIHVzZWZ1bCBtYWNyb3MgKi8KKworI3VuZGVmIE1BWAorI2RlZmluZSBNQVgoYSxiKQkoKGEpID4gKGIpID8gKGEpIDogKGIpKQorI3VuZGVmIE1JTgorI2RlZmluZSBNSU4oYSxiKQkoKGEpIDwgKGIpID8gKGEpIDogKGIpKQorCisKKy8qIFdlIGFzc3VtZSB0aGF0IHJpZ2h0IHNoaWZ0IGNvcnJlc3BvbmRzIHRvIHNpZ25lZCBkaXZpc2lvbiBieSAyIHdpdGgKKyAqIHJvdW5kaW5nIHRvd2FyZHMgbWludXMgaW5maW5pdHkuICBUaGlzIGlzIGNvcnJlY3QgZm9yIHR5cGljYWwgImFyaXRobWV0aWMKKyAqIHNoaWZ0IiBpbnN0cnVjdGlvbnMgdGhhdCBzaGlmdCBpbiBjb3BpZXMgb2YgdGhlIHNpZ24gYml0LiAgQnV0IHNvbWUKKyAqIEMgY29tcGlsZXJzIGltcGxlbWVudCA+PiB3aXRoIGFuIHVuc2lnbmVkIHNoaWZ0LiAgRm9yIHRoZXNlIG1hY2hpbmVzIHlvdQorICogbXVzdCBkZWZpbmUgUklHSFRfU0hJRlRfSVNfVU5TSUdORUQuCisgKiBSSUdIVF9TSElGVCBwcm92aWRlcyBhIHByb3BlciBzaWduZWQgcmlnaHQgc2hpZnQgb2YgYW4gSU5UMzIgcXVhbnRpdHkuCisgKiBJdCBpcyBvbmx5IGFwcGxpZWQgd2l0aCBjb25zdGFudCBzaGlmdCBjb3VudHMuICBTSElGVF9URU1QUyBtdXN0IGJlCisgKiBpbmNsdWRlZCBpbiB0aGUgdmFyaWFibGVzIG9mIGFueSByb3V0aW5lIHVzaW5nIFJJR0hUX1NISUZULgorICovCisKKyNpZmRlZiBSSUdIVF9TSElGVF9JU19VTlNJR05FRAorI2RlZmluZSBTSElGVF9URU1QUwlJTlQzMiBzaGlmdF90ZW1wOworI2RlZmluZSBSSUdIVF9TSElGVCh4LHNoZnQpICBcCisJKChzaGlmdF90ZW1wID0gKHgpKSA8IDAgPyBcCisJIChzaGlmdF90ZW1wID4+IChzaGZ0KSkgfCAoKH4oKElOVDMyKSAwKSkgPDwgKDMyLShzaGZ0KSkpIDogXAorCSAoc2hpZnRfdGVtcCA+PiAoc2hmdCkpKQorI2Vsc2UKKyNkZWZpbmUgU0hJRlRfVEVNUFMKKyNkZWZpbmUgUklHSFRfU0hJRlQoeCxzaGZ0KQkoKHgpID4+IChzaGZ0KSkKKyNlbmRpZgorCisKKy8qIFNob3J0IGZvcm1zIG9mIGV4dGVybmFsIG5hbWVzIGZvciBzeXN0ZW1zIHdpdGggYnJhaW4tZGFtYWdlZCBsaW5rZXJzLiAqLworCisjaWZkZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUworI2RlZmluZSBqaW5pdF9jb21wcmVzc19tYXN0ZXIJaklDb21wcmVzcworI2RlZmluZSBqaW5pdF9jX21hc3Rlcl9jb250cm9sCWpJQ01hc3RlcgorI2RlZmluZSBqaW5pdF9jX21haW5fY29udHJvbGxlcglqSUNNYWluQworI2RlZmluZSBqaW5pdF9jX3ByZXBfY29udHJvbGxlcglqSUNQcmVwQworI2RlZmluZSBqaW5pdF9jX2NvZWZfY29udHJvbGxlcglqSUNDb2VmQworI2RlZmluZSBqaW5pdF9jb2xvcl9jb252ZXJ0ZXIJaklDQ29sb3IKKyNkZWZpbmUgamluaXRfZG93bnNhbXBsZXIJaklEb3duc2FtcGxlcgorI2RlZmluZSBqaW5pdF9mb3J3YXJkX2RjdAlqSUZEQ1QKKyNkZWZpbmUgamluaXRfaHVmZl9lbmNvZGVyCWpJSEVuY29kZXIKKyNkZWZpbmUgamluaXRfcGh1ZmZfZW5jb2RlcglqSVBIRW5jb2RlcgorI2RlZmluZSBqaW5pdF9tYXJrZXJfd3JpdGVyCWpJTVdyaXRlcgorI2RlZmluZSBqaW5pdF9tYXN0ZXJfZGVjb21wcmVzcwlqSURNYXN0ZXIKKyNkZWZpbmUgamluaXRfZF9tYWluX2NvbnRyb2xsZXIJaklETWFpbkMKKyNkZWZpbmUgamluaXRfZF9jb2VmX2NvbnRyb2xsZXIJaklEQ29lZkMKKyNkZWZpbmUgamluaXRfZF9wb3N0X2NvbnRyb2xsZXIJaklEUG9zdEMKKyNkZWZpbmUgamluaXRfaW5wdXRfY29udHJvbGxlcglqSUluQ3RscgorI2RlZmluZSBqaW5pdF9tYXJrZXJfcmVhZGVyCWpJTVJlYWRlcgorI2RlZmluZSBqaW5pdF9odWZmX2RlY29kZXIJaklIRGVjb2RlcgorI2RlZmluZSBqaW5pdF9waHVmZl9kZWNvZGVyCWpJUEhEZWNvZGVyCisjZGVmaW5lIGppbml0X2ludmVyc2VfZGN0CWpJSURDVAorI2RlZmluZSBqaW5pdF91cHNhbXBsZXIJCWpJVXBzYW1wbGVyCisjZGVmaW5lIGppbml0X2NvbG9yX2RlY29udmVydGVyCWpJRENvbG9yCisjZGVmaW5lIGppbml0XzFwYXNzX3F1YW50aXplcglqSTFRdWFudAorI2RlZmluZSBqaW5pdF8ycGFzc19xdWFudGl6ZXIJakkyUXVhbnQKKyNkZWZpbmUgamluaXRfbWVyZ2VkX3Vwc2FtcGxlcglqSU1VcHNhbXBsZXIKKyNkZWZpbmUgamluaXRfbWVtb3J5X21ncglqSU1lbU1ncgorI2RlZmluZSBqZGl2X3JvdW5kX3VwCQlqRGl2Um91bmQKKyNkZWZpbmUganJvdW5kX3VwCQlqUm91bmQKKyNkZWZpbmUgamNvcHlfc2FtcGxlX3Jvd3MJakNvcHlTYW1wbGVzCisjZGVmaW5lIGpjb3B5X2Jsb2NrX3JvdwkJakNvcHlCbG9ja3MKKyNkZWZpbmUganplcm9fZmFyCQlqWmVyb0ZhcgorI2RlZmluZSBqcGVnX3ppZ3phZ19vcmRlcglqWklHVGFibGUKKyNkZWZpbmUganBlZ19uYXR1cmFsX29yZGVyCWpaQUdUYWJsZQorI2VuZGlmIC8qIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMgKi8KKworCisvKiBDb21wcmVzc2lvbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgKi8KK0VYVEVSTih2b2lkKSBqaW5pdF9jb21wcmVzc19tYXN0ZXIgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKHZvaWQpIGppbml0X2NfbWFzdGVyX2NvbnRyb2wgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJIGJvb2xlYW4gdHJhbnNjb2RlX29ubHkpKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9jX21haW5fY29udHJvbGxlciBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCQkgIGJvb2xlYW4gbmVlZF9mdWxsX2J1ZmZlcikpOworRVhURVJOKHZvaWQpIGppbml0X2NfcHJlcF9jb250cm9sbGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCisJCQkJCSAgYm9vbGVhbiBuZWVkX2Z1bGxfYnVmZmVyKSk7CitFWFRFUk4odm9pZCkgamluaXRfY19jb2VmX2NvbnRyb2xsZXIgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJICBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9jb2xvcl9jb252ZXJ0ZXIgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKHZvaWQpIGppbml0X2Rvd25zYW1wbGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9mb3J3YXJkX2RjdCBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CitFWFRFUk4odm9pZCkgamluaXRfaHVmZl9lbmNvZGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9waHVmZl9lbmNvZGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9tYXJrZXJfd3JpdGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKKy8qIERlY29tcHJlc3Npb24gbW9kdWxlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzICovCitFWFRFUk4odm9pZCkgamluaXRfbWFzdGVyX2RlY29tcHJlc3MgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CitFWFRFUk4odm9pZCkgamluaXRfZF9tYWluX2NvbnRyb2xsZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCQkgIGJvb2xlYW4gbmVlZF9mdWxsX2J1ZmZlcikpOworRVhURVJOKHZvaWQpIGppbml0X2RfY29lZl9jb250cm9sbGVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJICBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9kX3Bvc3RfY29udHJvbGxlciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisJCQkJCSAgYm9vbGVhbiBuZWVkX2Z1bGxfYnVmZmVyKSk7CitFWFRFUk4odm9pZCkgamluaXRfaW5wdXRfY29udHJvbGxlciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9tYXJrZXJfcmVhZGVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKHZvaWQpIGppbml0X2h1ZmZfZGVjb2RlciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9waHVmZl9kZWNvZGVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKHZvaWQpIGppbml0X2ludmVyc2VfZGN0IEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKHZvaWQpIGppbml0X3Vwc2FtcGxlciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9jb2xvcl9kZWNvbnZlcnRlciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTih2b2lkKSBqaW5pdF8xcGFzc19xdWFudGl6ZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CitFWFRFUk4odm9pZCkgamluaXRfMnBhc3NfcXVhbnRpemVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKHZvaWQpIGppbml0X21lcmdlZF91cHNhbXBsZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CisvKiBNZW1vcnkgbWFuYWdlciBpbml0aWFsaXphdGlvbiAqLworRVhURVJOKHZvaWQpIGppbml0X21lbW9yeV9tZ3IgSlBQKChqX2NvbW1vbl9wdHIgY2luZm8pKTsKKworLyogVXRpbGl0eSByb3V0aW5lcyBpbiBqdXRpbHMuYyAqLworRVhURVJOKGxvbmcpIGpkaXZfcm91bmRfdXAgSlBQKChsb25nIGEsIGxvbmcgYikpOworRVhURVJOKGxvbmcpIGpyb3VuZF91cCBKUFAoKGxvbmcgYSwgbG9uZyBiKSk7CitFWFRFUk4odm9pZCkgamNvcHlfc2FtcGxlX3Jvd3MgSlBQKChKU0FNUEFSUkFZIGlucHV0X2FycmF5LCBpbnQgc291cmNlX3JvdywKKwkJCQkgICAgSlNBTVBBUlJBWSBvdXRwdXRfYXJyYXksIGludCBkZXN0X3JvdywKKwkJCQkgICAgaW50IG51bV9yb3dzLCBKRElNRU5TSU9OIG51bV9jb2xzKSk7CitFWFRFUk4odm9pZCkgamNvcHlfYmxvY2tfcm93IEpQUCgoSkJMT0NLUk9XIGlucHV0X3JvdywgSkJMT0NLUk9XIG91dHB1dF9yb3csCisJCQkJICBKRElNRU5TSU9OIG51bV9ibG9ja3MpKTsKK0VYVEVSTih2b2lkKSBqemVyb19mYXIgSlBQKCh2b2lkIEZBUiAqIHRhcmdldCwgc2l6ZV90IGJ5dGVzdG96ZXJvKSk7CisvKiBDb25zdGFudCB0YWJsZXMgaW4ganV0aWxzLmMgKi8KKyNpZiAwCQkJCS8qIFRoaXMgdGFibGUgaXMgbm90IGFjdHVhbGx5IG5lZWRlZCBpbiB2NmEgKi8KK2V4dGVybiBjb25zdCBpbnQganBlZ196aWd6YWdfb3JkZXJbXTsgLyogbmF0dXJhbCBjb2VmIG9yZGVyIHRvIHppZ3phZyBvcmRlciAqLworI2VuZGlmCitleHRlcm4gY29uc3QgaW50IGpwZWdfbmF0dXJhbF9vcmRlcltdOyAvKiB6aWd6YWcgY29lZiBvcmRlciB0byBuYXR1cmFsIG9yZGVyICovCisKKy8qIFN1cHByZXNzIHVuZGVmaW5lZC1zdHJ1Y3R1cmUgY29tcGxhaW50cyBpZiBuZWNlc3NhcnkuICovCisKKyNpZmRlZiBJTkNPTVBMRVRFX1RZUEVTX0JST0tFTgorI2lmbmRlZiBBTV9NRU1PUllfTUFOQUdFUgkvKiBvbmx5IGptZW1tZ3IuYyBkZWZpbmVzIHRoZXNlICovCitzdHJ1Y3QganZpcnRfc2FycmF5X2NvbnRyb2wgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGp2aXJ0X2JhcnJheV9jb250cm9sIHsgbG9uZyBkdW1teTsgfTsKKyNlbmRpZgorI2VuZGlmIC8qIElOQ09NUExFVEVfVFlQRVNfQlJPS0VOICovCmRpZmYgLS1naXQgYS9jb3JlL2luY2x1ZGUvdGhpcmRwYXJ0aWVzL2xpYmpwZWcvanBlZ2xpYi5oIGIvY29yZS9pbmNsdWRlL3RoaXJkcGFydGllcy9saWJqcGVnL2pwZWdsaWIuaAppbmRleCBhYzJhZmY5Li43ZGU1YWI3IDEwMDY0NAotLS0gYS9jb3JlL2luY2x1ZGUvdGhpcmRwYXJ0aWVzL2xpYmpwZWcvanBlZ2xpYi5oCisrKyBiL2NvcmUvaW5jbHVkZS90aGlyZHBhcnRpZXMvbGlianBlZy9qcGVnbGliLmgKQEAgLTEsMTE2NSArMSwxMTY1IEBACi0vKg0KLSAqIGpwZWdsaWIuaA0KLSAqDQotICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTgsIFRob21hcyBHLiBMYW5lLg0KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuDQotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLg0KLSAqDQotICogVGhpcyBmaWxlIGRlZmluZXMgdGhlIGFwcGxpY2F0aW9uIGludGVyZmFjZSBmb3IgdGhlIEpQRUcgbGlicmFyeS4NCi0gKiBNb3N0IGFwcGxpY2F0aW9ucyB1c2luZyB0aGUgbGlicmFyeSBuZWVkIG9ubHkgaW5jbHVkZSB0aGlzIGZpbGUsDQotICogYW5kIHBlcmhhcHMgamVycm9yLmggaWYgdGhleSB3YW50IHRvIGtub3cgdGhlIGV4YWN0IGVycm9yIGNvZGVzLg0KLSAqLw0KLQ0KLSNpZm5kZWYgSlBFR0xJQl9IDQotI2RlZmluZSBKUEVHTElCX0gNCi0NCi0jZGVmaW5lIEZPWElUX1BSRUZJWChvcmlnTmFtZSkgIEZQREZBUElKUEVHXyMjb3JpZ05hbWUNCi0NCi0jZGVmaW5lIGpjb3B5X2Jsb2NrX3JvdyBGT1hJVF9QUkVGSVgoamNvcHlfYmxvY2tfcm93KQ0KLSNkZWZpbmUgamNvcHlfc2FtcGxlX3Jvd3MgRk9YSVRfUFJFRklYKGpjb3B5X3NhbXBsZV9yb3dzKQ0KLSNkZWZpbmUgamRpdl9yb3VuZF91cCBGT1hJVF9QUkVGSVgoamRpdl9yb3VuZF91cCkNCi0jZGVmaW5lIGppbml0XzFwYXNzX3F1YW50aXplciBGT1hJVF9QUkVGSVgoamluaXRfMXBhc3NfcXVhbnRpemVyKQ0KLSNkZWZpbmUgamluaXRfMnBhc3NfcXVhbnRpemVyIEZPWElUX1BSRUZJWChqaW5pdF8ycGFzc19xdWFudGl6ZXIpDQotI2RlZmluZSBqaW5pdF9jb2xvcl9kZWNvbnZlcnRlciBGT1hJVF9QUkVGSVgoamluaXRfY29sb3JfZGVjb252ZXJ0ZXIpDQotI2RlZmluZSBqaW5pdF9kX2NvZWZfY29udHJvbGxlciBGT1hJVF9QUkVGSVgoamluaXRfZF9jb2VmX2NvbnRyb2xsZXIpDQotI2RlZmluZSBqaW5pdF9kX21haW5fY29udHJvbGxlciBGT1hJVF9QUkVGSVgoamluaXRfZF9tYWluX2NvbnRyb2xsZXIpDQotI2RlZmluZSBqaW5pdF9kX3Bvc3RfY29udHJvbGxlciBGT1hJVF9QUkVGSVgoamluaXRfZF9wb3N0X2NvbnRyb2xsZXIpDQotI2RlZmluZSBqaW5pdF9odWZmX2RlY29kZXIgRk9YSVRfUFJFRklYKGppbml0X2h1ZmZfZGVjb2RlcikNCi0jZGVmaW5lIGppbml0X2lucHV0X2NvbnRyb2xsZXIgRk9YSVRfUFJFRklYKGppbml0X2lucHV0X2NvbnRyb2xsZXIpDQotI2RlZmluZSBqaW5pdF9pbnZlcnNlX2RjdCBGT1hJVF9QUkVGSVgoamluaXRfaW52ZXJzZV9kY3QpDQotI2RlZmluZSBqaW5pdF9tYXJrZXJfcmVhZGVyIEZPWElUX1BSRUZJWChqaW5pdF9tYXJrZXJfcmVhZGVyKQ0KLSNkZWZpbmUgamluaXRfbWFzdGVyX2RlY29tcHJlc3MgRk9YSVRfUFJFRklYKGppbml0X21hc3Rlcl9kZWNvbXByZXNzKQ0KLSNkZWZpbmUgamluaXRfbWVtb3J5X21nciBGT1hJVF9QUkVGSVgoamluaXRfbWVtb3J5X21ncikNCi0jZGVmaW5lIGppbml0X21lcmdlZF91cHNhbXBsZXIgRk9YSVRfUFJFRklYKGppbml0X21lcmdlZF91cHNhbXBsZXIpDQotI2RlZmluZSBqaW5pdF9waHVmZl9kZWNvZGVyIEZPWElUX1BSRUZJWChqaW5pdF9waHVmZl9kZWNvZGVyKQ0KLSNkZWZpbmUgamluaXRfdXBzYW1wbGVyIEZPWElUX1BSRUZJWChqaW5pdF91cHNhbXBsZXIpDQotI2RlZmluZSBqcGVnX0NyZWF0ZURlY29tcHJlc3MgRk9YSVRfUFJFRklYKGpwZWdfQ3JlYXRlRGVjb21wcmVzcykNCi0jZGVmaW5lIGpwZWdfYWJvcnQgRk9YSVRfUFJFRklYKGpwZWdfYWJvcnQpDQotI2RlZmluZSBqcGVnX2Fib3J0X2RlY29tcHJlc3MgRk9YSVRfUFJFRklYKGpwZWdfYWJvcnRfZGVjb21wcmVzcykNCi0jZGVmaW5lIGpwZWdfYWxsb2NfaHVmZl90YWJsZSBGT1hJVF9QUkVGSVgoanBlZ19hbGxvY19odWZmX3RhYmxlKQ0KLSNkZWZpbmUganBlZ19hbGxvY19xdWFudF90YWJsZSBGT1hJVF9QUkVGSVgoanBlZ19hbGxvY19xdWFudF90YWJsZSkNCi0jZGVmaW5lIGpwZWdfY2FsY19vdXRwdXRfZGltZW5zaW9ucyBGT1hJVF9QUkVGSVgoanBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zKQ0KLSNkZWZpbmUganBlZ19jb25zdW1lX2lucHV0IEZPWElUX1BSRUZJWChqcGVnX2NvbnN1bWVfaW5wdXQpDQotI2RlZmluZSBqcGVnX2Rlc3Ryb3kgRk9YSVRfUFJFRklYKGpwZWdfZGVzdHJveSkNCi0jZGVmaW5lIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzIEZPWElUX1BSRUZJWChqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcykNCi0jZGVmaW5lIGpwZWdfZmlsbF9iaXRfYnVmZmVyIEZPWElUX1BSRUZJWChqcGVnX2ZpbGxfYml0X2J1ZmZlcikNCi0jZGVmaW5lIGpwZWdfZmluaXNoX2RlY29tcHJlc3MgRk9YSVRfUFJFRklYKGpwZWdfZmluaXNoX2RlY29tcHJlc3MpDQotI2RlZmluZSBqcGVnX2ZpbmlzaF9vdXRwdXQgRk9YSVRfUFJFRklYKGpwZWdfZmluaXNoX291dHB1dCkNCi0jZGVmaW5lIGpwZWdfZnJlZV9sYXJnZSBGT1hJVF9QUkVGSVgoanBlZ19mcmVlX2xhcmdlKQ0KLSNkZWZpbmUganBlZ19mcmVlX3NtYWxsIEZPWElUX1BSRUZJWChqcGVnX2ZyZWVfc21hbGwpDQotI2RlZmluZSBqcGVnX2dldF9sYXJnZSBGT1hJVF9QUkVGSVgoanBlZ19nZXRfbGFyZ2UpDQotI2RlZmluZSBqcGVnX2dldF9zbWFsbCBGT1hJVF9QUkVGSVgoanBlZ19nZXRfc21hbGwpDQotI2RlZmluZSBqcGVnX2hhc19tdWx0aXBsZV9zY2FucyBGT1hJVF9QUkVGSVgoanBlZ19oYXNfbXVsdGlwbGVfc2NhbnMpDQotI2RlZmluZSBqcGVnX2h1ZmZfZGVjb2RlIEZPWElUX1BSRUZJWChqcGVnX2h1ZmZfZGVjb2RlKQ0KLSNkZWZpbmUganBlZ19pZGN0XzF4MSBGT1hJVF9QUkVGSVgoanBlZ19pZGN0XzF4MSkNCi0jZGVmaW5lIGpwZWdfaWRjdF8yeDIgRk9YSVRfUFJFRklYKGpwZWdfaWRjdF8yeDIpDQotI2RlZmluZSBqcGVnX2lkY3RfNHg0IEZPWElUX1BSRUZJWChqcGVnX2lkY3RfNHg0KQ0KLSNkZWZpbmUganBlZ19pZGN0X2Zsb2F0IEZPWElUX1BSRUZJWChqcGVnX2lkY3RfZmxvYXQpDQotI2RlZmluZSBqcGVnX2lkY3RfaWZhc3QgRk9YSVRfUFJFRklYKGpwZWdfaWRjdF9pZmFzdCkNCi0jZGVmaW5lIGpwZWdfaWRjdF9pc2xvdyBGT1hJVF9QUkVGSVgoanBlZ19pZGN0X2lzbG93KQ0KLSNkZWZpbmUganBlZ19pbnB1dF9jb21wbGV0ZSBGT1hJVF9QUkVGSVgoanBlZ19pbnB1dF9jb21wbGV0ZSkNCi0jZGVmaW5lIGpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsIEZPWElUX1BSRUZJWChqcGVnX21ha2VfZF9kZXJpdmVkX3RibCkNCi0jZGVmaW5lIGpwZWdfbWVtX2F2YWlsYWJsZSBGT1hJVF9QUkVGSVgoanBlZ19tZW1fYXZhaWxhYmxlKQ0KLSNkZWZpbmUganBlZ19tZW1faW5pdCBGT1hJVF9QUkVGSVgoanBlZ19tZW1faW5pdCkNCi0jZGVmaW5lIGpwZWdfbWVtX3Rlcm0gRk9YSVRfUFJFRklYKGpwZWdfbWVtX3Rlcm0pDQotI2RlZmluZSBqcGVnX25hdHVyYWxfb3JkZXIgRk9YSVRfUFJFRklYKGpwZWdfbmF0dXJhbF9vcmRlcikNCi0jZGVmaW5lIGpwZWdfbmV3X2NvbG9ybWFwIEZPWElUX1BSRUZJWChqcGVnX25ld19jb2xvcm1hcCkNCi0jZGVmaW5lIGpwZWdfb3Blbl9iYWNraW5nX3N0b3JlIEZPWElUX1BSRUZJWChqcGVnX29wZW5fYmFja2luZ19zdG9yZSkNCi0jZGVmaW5lIGpwZWdfcmVhZF9jb2VmZmljaWVudHMgRk9YSVRfUFJFRklYKGpwZWdfcmVhZF9jb2VmZmljaWVudHMpDQotI2RlZmluZSBqcGVnX3JlYWRfaGVhZGVyIEZPWElUX1BSRUZJWChqcGVnX3JlYWRfaGVhZGVyKQ0KLSNkZWZpbmUganBlZ19yZWFkX3Jhd19kYXRhIEZPWElUX1BSRUZJWChqcGVnX3JlYWRfcmF3X2RhdGEpDQotI2RlZmluZSBqcGVnX3JlYWRfc2NhbmxpbmVzIEZPWElUX1BSRUZJWChqcGVnX3JlYWRfc2NhbmxpbmVzKQ0KLSNkZWZpbmUganBlZ19yZXN5bmNfdG9fcmVzdGFydCBGT1hJVF9QUkVGSVgoanBlZ19yZXN5bmNfdG9fcmVzdGFydCkNCi0jZGVmaW5lIGpwZWdfc2F2ZV9tYXJrZXJzIEZPWElUX1BSRUZJWChqcGVnX3NhdmVfbWFya2VycykNCi0jZGVmaW5lIGpwZWdfc2V0X21hcmtlcl9wcm9jZXNzb3IgRk9YSVRfUFJFRklYKGpwZWdfc2V0X21hcmtlcl9wcm9jZXNzb3IpDQotI2RlZmluZSBqcGVnX3N0YXJ0X2RlY29tcHJlc3MgRk9YSVRfUFJFRklYKGpwZWdfc3RhcnRfZGVjb21wcmVzcykNCi0jZGVmaW5lIGpwZWdfc3RhcnRfb3V0cHV0IEZPWElUX1BSRUZJWChqcGVnX3N0YXJ0X291dHB1dCkNCi0jZGVmaW5lIGpwZWdfc3RkX2Vycm9yIEZPWElUX1BSRUZJWChqcGVnX3N0ZF9lcnJvcikNCi0jZGVmaW5lIGpwZWdfc3RkX21lc3NhZ2VfdGFibGUgRk9YSVRfUFJFRklYKGpwZWdfc3RkX21lc3NhZ2VfdGFibGUpDQotI2RlZmluZSBqcGVnX3N0ZGlvX3NyYyBGT1hJVF9QUkVGSVgoanBlZ19zdGRpb19zcmMpDQotI2RlZmluZSBqcm91bmRfdXAgRk9YSVRfUFJFRklYKGpyb3VuZF91cCkNCi0jZGVmaW5lIGp6ZXJvX2ZhciBGT1hJVF9QUkVGSVgoanplcm9fZmFyKQ0KLQ0KLSAvKg0KLSAqIEZpcnN0IHdlIGluY2x1ZGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdGhhdCByZWNvcmQgaG93IHRoaXMNCi0gKiBpbnN0YWxsYXRpb24gb2YgdGhlIEpQRUcgbGlicmFyeSBpcyBzZXQgdXAuICBqY29uZmlnLmggY2FuIGJlDQotICogZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZm9yIG1hbnkgc3lzdGVtcy4gIGptb3JlY2ZnLmggY29udGFpbnMNCi0gKiBtYW51YWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgbW9zdCBwZW9wbGUgbmVlZCBub3Qgd29ycnkgYWJvdXQuDQotICovDQotDQotI2lmbmRlZiBKQ09ORklHX0lOQ0xVREVECS8qIGluIGNhc2UgamluY2x1ZGUuaCBhbHJlYWR5IGRpZCAqLw0KLSNpbmNsdWRlICJqY29uZmlnLmgiCQkvKiB3aWRlbHkgdXNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgKi8NCi0jZW5kaWYNCi0jaW5jbHVkZSAiam1vcmVjZmcuaCIJCS8qIHNlbGRvbSBjaGFuZ2VkIG9wdGlvbnMgKi8NCi0NCi0NCi0vKiBWZXJzaW9uIElEIGZvciB0aGUgSlBFRyBsaWJyYXJ5Lg0KLSAqIE1pZ2h0IGJlIHVzZWZ1bCBmb3IgdGVzdHMgbGlrZSAiI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNjAiLg0KLSAqLw0KLQ0KLSNkZWZpbmUgSlBFR19MSUJfVkVSU0lPTiAgNjIJLyogVmVyc2lvbiA2YiAqLw0KLQ0KLQ0KLS8qIFZhcmlvdXMgY29uc3RhbnRzIGRldGVybWluaW5nIHRoZSBzaXplcyBvZiB0aGluZ3MuDQotICogQWxsIG9mIHRoZXNlIGFyZSBzcGVjaWZpZWQgYnkgdGhlIEpQRUcgc3RhbmRhcmQsIHNvIGRvbid0IGNoYW5nZSB0aGVtDQotICogaWYgeW91IHdhbnQgdG8gYmUgY29tcGF0aWJsZS4NCi0gKi8NCi0NCi0jZGVmaW5lIERDVFNJWkUJCSAgICA4CS8qIFRoZSBiYXNpYyBEQ1QgYmxvY2sgaXMgOHg4IHNhbXBsZXMgKi8NCi0jZGVmaW5lIERDVFNJWkUyCSAgICA2NAkvKiBEQ1RTSVpFIHNxdWFyZWQ7ICMgb2YgZWxlbWVudHMgaW4gYSBibG9jayAqLw0KLSNkZWZpbmUgTlVNX1FVQU5UX1RCTFMgICAgICA0CS8qIFF1YW50aXphdGlvbiB0YWJsZXMgYXJlIG51bWJlcmVkIDAuLjMgKi8NCi0jZGVmaW5lIE5VTV9IVUZGX1RCTFMgICAgICAgNAkvKiBIdWZmbWFuIHRhYmxlcyBhcmUgbnVtYmVyZWQgMC4uMyAqLw0KLSNkZWZpbmUgTlVNX0FSSVRIX1RCTFMgICAgICAxNgkvKiBBcml0aC1jb2RpbmcgdGFibGVzIGFyZSBudW1iZXJlZCAwLi4xNSAqLw0KLSNkZWZpbmUgTUFYX0NPTVBTX0lOX1NDQU4gICA0CS8qIEpQRUcgbGltaXQgb24gIyBvZiBjb21wb25lbnRzIGluIG9uZSBzY2FuICovDQotI2RlZmluZSBNQVhfU0FNUF9GQUNUT1IgICAgIDQJLyogSlBFRyBsaW1pdCBvbiBzYW1wbGluZyBmYWN0b3JzICovDQotLyogVW5mb3J0dW5hdGVseSwgc29tZSBib3pvIGF0IEFkb2JlIHNhdyBubyByZWFzb24gdG8gYmUgYm91bmQgYnkgdGhlIHN0YW5kYXJkOw0KLSAqIHRoZSBQb3N0U2NyaXB0IERDVCBmaWx0ZXIgY2FuIGVtaXQgZmlsZXMgd2l0aCBtYW55IG1vcmUgdGhhbiAxMCBibG9ja3MvTUNVLg0KLSAqIElmIHlvdSBoYXBwZW4gdG8gcnVuIGFjcm9zcyBzdWNoIGEgZmlsZSwgeW91IGNhbiB1cCBEX01BWF9CTE9DS1NfSU5fTUNVDQotICogdG8gaGFuZGxlIGl0LiAgV2UgZXZlbiBsZXQgeW91IGRvIHRoaXMgZnJvbSB0aGUgamNvbmZpZy5oIGZpbGUuICBIb3dldmVyLA0KLSAqIHdlIHN0cm9uZ2x5IGRpc2NvdXJhZ2UgY2hhbmdpbmcgQ19NQVhfQkxPQ0tTX0lOX01DVTsganVzdCBiZWNhdXNlIEFkb2JlDQotICogc29tZXRpbWVzIGVtaXRzIG5vbmNvbXBsaWFudCBmaWxlcyBkb2Vzbid0IG1lYW4geW91IHNob3VsZCB0b28uDQotICovDQotI2RlZmluZSBDX01BWF9CTE9DS1NfSU5fTUNVICAgMTAgLyogY29tcHJlc3NvcidzIGxpbWl0IG9uIGJsb2NrcyBwZXIgTUNVICovDQotI2lmbmRlZiBEX01BWF9CTE9DS1NfSU5fTUNVDQotI2RlZmluZSBEX01BWF9CTE9DS1NfSU5fTUNVICAgMTAgLyogZGVjb21wcmVzc29yJ3MgbGltaXQgb24gYmxvY2tzIHBlciBNQ1UgKi8NCi0jZW5kaWYNCi0NCi0NCi0vKiBEYXRhIHN0cnVjdHVyZXMgZm9yIGltYWdlcyAoYXJyYXlzIG9mIHNhbXBsZXMgYW5kIG9mIERDVCBjb2VmZmljaWVudHMpLg0KLSAqIE9uIDgweDg2IG1hY2hpbmVzLCB0aGUgaW1hZ2UgYXJyYXlzIGFyZSB0b28gYmlnIGZvciBuZWFyIHBvaW50ZXJzLA0KLSAqIGJ1dCB0aGUgcG9pbnRlciBhcnJheXMgY2FuIGZpdCBpbiBuZWFyIG1lbW9yeS4NCi0gKi8NCi0NCi10eXBlZGVmIEpTQU1QTEUgICpKU0FNUFJPVzsJLyogcHRyIHRvIG9uZSBpbWFnZSByb3cgb2YgcGl4ZWwgc2FtcGxlcy4gKi8NCi10eXBlZGVmIEpTQU1QUk9XICpKU0FNUEFSUkFZOwkvKiBwdHIgdG8gc29tZSByb3dzIChhIDItRCBzYW1wbGUgYXJyYXkpICovDQotdHlwZWRlZiBKU0FNUEFSUkFZICpKU0FNUElNQUdFOwkvKiBhIDMtRCBzYW1wbGUgYXJyYXk6IHRvcCBpbmRleCBpcyBjb2xvciAqLw0KLQ0KLXR5cGVkZWYgSkNPRUYgSkJMT0NLW0RDVFNJWkUyXTsJLyogb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cyAqLw0KLXR5cGVkZWYgSkJMT0NLICAqSkJMT0NLUk9XOwkvKiBwb2ludGVyIHRvIG9uZSByb3cgb2YgY29lZmZpY2llbnQgYmxvY2tzICovDQotdHlwZWRlZiBKQkxPQ0tST1cgKkpCTE9DS0FSUkFZOwkJLyogYSAyLUQgYXJyYXkgb2YgY29lZmZpY2llbnQgYmxvY2tzICovDQotdHlwZWRlZiBKQkxPQ0tBUlJBWSAqSkJMT0NLSU1BR0U7CS8qIGEgMy1EIGFycmF5IG9mIGNvZWZmaWNpZW50IGJsb2NrcyAqLw0KLQ0KLXR5cGVkZWYgSkNPRUYgICpKQ09FRlBUUjsJLyogdXNlZnVsIGluIGEgY291cGxlIG9mIHBsYWNlcyAqLw0KLQ0KLQ0KLS8qIFR5cGVzIGZvciBKUEVHIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgYW5kIHdvcmtpbmcgdGFibGVzLiAqLw0KLQ0KLQ0KLS8qIERDVCBjb2VmZmljaWVudCBxdWFudGl6YXRpb24gdGFibGVzLiAqLw0KLQ0KLXR5cGVkZWYgc3RydWN0IHsNCi0gIC8qIFRoaXMgYXJyYXkgZ2l2ZXMgdGhlIGNvZWZmaWNpZW50IHF1YW50aXplcnMgaW4gbmF0dXJhbCBhcnJheSBvcmRlcg0KLSAgICogKG5vdCB0aGUgemlnemFnIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIHN0b3JlZCBpbiBhIEpQRUcgRFFUIG1hcmtlcikuDQotICAgKiBDQVVUSU9OOiBJSkcgdmVyc2lvbnMgcHJpb3IgdG8gdjZhIGtlcHQgdGhpcyBhcnJheSBpbiB6aWd6YWcgb3JkZXIuDQotICAgKi8NCi0gIFVJTlQxNiBxdWFudHZhbFtEQ1RTSVpFMl07CS8qIHF1YW50aXphdGlvbiBzdGVwIGZvciBlYWNoIGNvZWZmaWNpZW50ICovDQotICAvKiBUaGlzIGZpZWxkIGlzIHVzZWQgb25seSBkdXJpbmcgY29tcHJlc3Npb24uICBJdCdzIGluaXRpYWxpemVkIEZBTFNFIHdoZW4NCi0gICAqIHRoZSB0YWJsZSBpcyBjcmVhdGVkLCBhbmQgc2V0IFRSVUUgd2hlbiBpdCdzIGJlZW4gb3V0cHV0IHRvIHRoZSBmaWxlLg0KLSAgICogWW91IGNvdWxkIHN1cHByZXNzIG91dHB1dCBvZiBhIHRhYmxlIGJ5IHNldHRpbmcgdGhpcyB0byBUUlVFLg0KLSAgICogKFNlZSBqcGVnX3N1cHByZXNzX3RhYmxlcyBmb3IgYW4gZXhhbXBsZS4pDQotICAgKi8NCi0gIGJvb2xlYW4gc2VudF90YWJsZTsJCS8qIFRSVUUgd2hlbiB0YWJsZSBoYXMgYmVlbiBvdXRwdXQgKi8NCi19IEpRVUFOVF9UQkw7DQotDQotDQotLyogSHVmZm1hbiBjb2RpbmcgdGFibGVzLiAqLw0KLQ0KLXR5cGVkZWYgc3RydWN0IHsNCi0gIC8qIFRoZXNlIHR3byBmaWVsZHMgZGlyZWN0bHkgcmVwcmVzZW50IHRoZSBjb250ZW50cyBvZiBhIEpQRUcgREhUIG1hcmtlciAqLw0KLSAgVUlOVDggYml0c1sxN107CQkvKiBiaXRzW2tdID0gIyBvZiBzeW1ib2xzIHdpdGggY29kZXMgb2YgKi8NCi0JCQkJLyogbGVuZ3RoIGsgYml0czsgYml0c1swXSBpcyB1bnVzZWQgKi8NCi0gIFVJTlQ4IGh1ZmZ2YWxbMjU2XTsJCS8qIFRoZSBzeW1ib2xzLCBpbiBvcmRlciBvZiBpbmNyIGNvZGUgbGVuZ3RoICovDQotICAvKiBUaGlzIGZpZWxkIGlzIHVzZWQgb25seSBkdXJpbmcgY29tcHJlc3Npb24uICBJdCdzIGluaXRpYWxpemVkIEZBTFNFIHdoZW4NCi0gICAqIHRoZSB0YWJsZSBpcyBjcmVhdGVkLCBhbmQgc2V0IFRSVUUgd2hlbiBpdCdzIGJlZW4gb3V0cHV0IHRvIHRoZSBmaWxlLg0KLSAgICogWW91IGNvdWxkIHN1cHByZXNzIG91dHB1dCBvZiBhIHRhYmxlIGJ5IHNldHRpbmcgdGhpcyB0byBUUlVFLg0KLSAgICogKFNlZSBqcGVnX3N1cHByZXNzX3RhYmxlcyBmb3IgYW4gZXhhbXBsZS4pDQotICAgKi8NCi0gIGJvb2xlYW4gc2VudF90YWJsZTsJCS8qIFRSVUUgd2hlbiB0YWJsZSBoYXMgYmVlbiBvdXRwdXQgKi8NCi19IEpIVUZGX1RCTDsNCi0NCi0NCi0vKiBCYXNpYyBpbmZvIGFib3V0IG9uZSBjb21wb25lbnQgKGNvbG9yIGNoYW5uZWwpLiAqLw0KLQ0KLXR5cGVkZWYgc3RydWN0IHsNCi0gIC8qIFRoZXNlIHZhbHVlcyBhcmUgZml4ZWQgb3ZlciB0aGUgd2hvbGUgaW1hZ2UuICovDQotICAvKiBGb3IgY29tcHJlc3Npb24sIHRoZXkgbXVzdCBiZSBzdXBwbGllZCBieSBwYXJhbWV0ZXIgc2V0dXA7ICovDQotICAvKiBmb3IgZGVjb21wcmVzc2lvbiwgdGhleSBhcmUgcmVhZCBmcm9tIHRoZSBTT0YgbWFya2VyLiAqLw0KLSAgaW50IGNvbXBvbmVudF9pZDsJCS8qIGlkZW50aWZpZXIgZm9yIHRoaXMgY29tcG9uZW50ICgwLi4yNTUpICovDQotICBpbnQgY29tcG9uZW50X2luZGV4OwkJLyogaXRzIGluZGV4IGluIFNPRiBvciBjaW5mby0+Y29tcF9pbmZvW10gKi8NCi0gIGludCBoX3NhbXBfZmFjdG9yOwkJLyogaG9yaXpvbnRhbCBzYW1wbGluZyBmYWN0b3IgKDEuLjQpICovDQotICBpbnQgdl9zYW1wX2ZhY3RvcjsJCS8qIHZlcnRpY2FsIHNhbXBsaW5nIGZhY3RvciAoMS4uNCkgKi8NCi0gIGludCBxdWFudF90Ymxfbm87CQkvKiBxdWFudGl6YXRpb24gdGFibGUgc2VsZWN0b3IgKDAuLjMpICovDQotICAvKiBUaGVzZSB2YWx1ZXMgbWF5IHZhcnkgYmV0d2VlbiBzY2Fucy4gKi8NCi0gIC8qIEZvciBjb21wcmVzc2lvbiwgdGhleSBtdXN0IGJlIHN1cHBsaWVkIGJ5IHBhcmFtZXRlciBzZXR1cDsgKi8NCi0gIC8qIGZvciBkZWNvbXByZXNzaW9uLCB0aGV5IGFyZSByZWFkIGZyb20gdGhlIFNPUyBtYXJrZXIuICovDQotICAvKiBUaGUgZGVjb21wcmVzc29yIG91dHB1dCBzaWRlIG1heSBub3QgdXNlIHRoZXNlIHZhcmlhYmxlcy4gKi8NCi0gIGludCBkY190Ymxfbm87CQkvKiBEQyBlbnRyb3B5IHRhYmxlIHNlbGVjdG9yICgwLi4zKSAqLw0KLSAgaW50IGFjX3RibF9ubzsJCS8qIEFDIGVudHJvcHkgdGFibGUgc2VsZWN0b3IgKDAuLjMpICovDQotICANCi0gIC8qIFJlbWFpbmluZyBmaWVsZHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgcHJpdmF0ZSBieSBhcHBsaWNhdGlvbnMuICovDQotICANCi0gIC8qIFRoZXNlIHZhbHVlcyBhcmUgY29tcHV0ZWQgZHVyaW5nIGNvbXByZXNzaW9uIG9yIGRlY29tcHJlc3Npb24gc3RhcnR1cDogKi8NCi0gIC8qIENvbXBvbmVudCdzIHNpemUgaW4gRENUIGJsb2Nrcy4NCi0gICAqIEFueSBkdW1teSBibG9ja3MgYWRkZWQgdG8gY29tcGxldGUgYW4gTUNVIGFyZSBub3QgY291bnRlZDsgdGhlcmVmb3JlDQotICAgKiB0aGVzZSB2YWx1ZXMgZG8gbm90IGRlcGVuZCBvbiB3aGV0aGVyIGEgc2NhbiBpcyBpbnRlcmxlYXZlZCBvciBub3QuDQotICAgKi8NCi0gIEpESU1FTlNJT04gd2lkdGhfaW5fYmxvY2tzOw0KLSAgSkRJTUVOU0lPTiBoZWlnaHRfaW5fYmxvY2tzOw0KLSAgLyogU2l6ZSBvZiBhIERDVCBibG9jayBpbiBzYW1wbGVzLiAgQWx3YXlzIERDVFNJWkUgZm9yIGNvbXByZXNzaW9uLg0KLSAgICogRm9yIGRlY29tcHJlc3Npb24gdGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGZyb20gb25lIERDVCBibG9jaywNCi0gICAqIHJlZmxlY3RpbmcgYW55IHNjYWxpbmcgd2UgY2hvb3NlIHRvIGFwcGx5IGR1cmluZyB0aGUgSURDVCBzdGVwLg0KLSAgICogVmFsdWVzIG9mIDEsMiw0LDggYXJlIGxpa2VseSB0byBiZSBzdXBwb3J0ZWQuICBOb3RlIHRoYXQgZGlmZmVyZW50DQotICAgKiBjb21wb25lbnRzIG1heSByZWNlaXZlIGRpZmZlcmVudCBJRENUIHNjYWxpbmdzLg0KLSAgICovDQotICBpbnQgRENUX3NjYWxlZF9zaXplOw0KLSAgLyogVGhlIGRvd25zYW1wbGVkIGRpbWVuc2lvbnMgYXJlIHRoZSBjb21wb25lbnQncyBhY3R1YWwsIHVucGFkZGVkIG51bWJlcg0KLSAgICogb2Ygc2FtcGxlcyBhdCB0aGUgbWFpbiBidWZmZXIgKHByZXByb2Nlc3NpbmcvY29tcHJlc3Npb24gaW50ZXJmYWNlKSwgdGh1cw0KLSAgICogZG93bnNhbXBsZWRfd2lkdGggPSBjZWlsKGltYWdlX3dpZHRoICogSGkvSG1heCkNCi0gICAqIGFuZCBzaW1pbGFybHkgZm9yIGhlaWdodC4gIEZvciBkZWNvbXByZXNzaW9uLCBJRENUIHNjYWxpbmcgaXMgaW5jbHVkZWQsIHNvDQotICAgKiBkb3duc2FtcGxlZF93aWR0aCA9IGNlaWwoaW1hZ2Vfd2lkdGggKiBIaS9IbWF4ICogRENUX3NjYWxlZF9zaXplL0RDVFNJWkUpDQotICAgKi8NCi0gIEpESU1FTlNJT04gZG93bnNhbXBsZWRfd2lkdGg7CSAvKiBhY3R1YWwgd2lkdGggaW4gc2FtcGxlcyAqLw0KLSAgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF9oZWlnaHQ7IC8qIGFjdHVhbCBoZWlnaHQgaW4gc2FtcGxlcyAqLw0KLSAgLyogVGhpcyBmbGFnIGlzIHVzZWQgb25seSBmb3IgZGVjb21wcmVzc2lvbi4gIEluIGNhc2VzIHdoZXJlIHNvbWUgb2YgdGhlDQotICAgKiBjb21wb25lbnRzIHdpbGwgYmUgaWdub3JlZCAoZWcgZ3JheXNjYWxlIG91dHB1dCBmcm9tIFlDYkNyIGltYWdlKSwNCi0gICAqIHdlIGNhbiBza2lwIG1vc3QgY29tcHV0YXRpb25zIGZvciB0aGUgdW51c2VkIGNvbXBvbmVudHMuDQotICAgKi8NCi0gIGJvb2xlYW4gY29tcG9uZW50X25lZWRlZDsJLyogZG8gd2UgbmVlZCB0aGUgdmFsdWUgb2YgdGhpcyBjb21wb25lbnQ/ICovDQotDQotICAvKiBUaGVzZSB2YWx1ZXMgYXJlIGNvbXB1dGVkIGJlZm9yZSBzdGFydGluZyBhIHNjYW4gb2YgdGhlIGNvbXBvbmVudC4gKi8NCi0gIC8qIFRoZSBkZWNvbXByZXNzb3Igb3V0cHV0IHNpZGUgbWF5IG5vdCB1c2UgdGhlc2UgdmFyaWFibGVzLiAqLw0KLSAgaW50IE1DVV93aWR0aDsJCS8qIG51bWJlciBvZiBibG9ja3MgcGVyIE1DVSwgaG9yaXpvbnRhbGx5ICovDQotICBpbnQgTUNVX2hlaWdodDsJCS8qIG51bWJlciBvZiBibG9ja3MgcGVyIE1DVSwgdmVydGljYWxseSAqLw0KLSAgaW50IE1DVV9ibG9ja3M7CQkvKiBNQ1Vfd2lkdGggKiBNQ1VfaGVpZ2h0ICovDQotICBpbnQgTUNVX3NhbXBsZV93aWR0aDsJCS8qIE1DVSB3aWR0aCBpbiBzYW1wbGVzLCBNQ1Vfd2lkdGgqRENUX3NjYWxlZF9zaXplICovDQotICBpbnQgbGFzdF9jb2xfd2lkdGg7CQkvKiAjIG9mIG5vbi1kdW1teSBibG9ja3MgYWNyb3NzIGluIGxhc3QgTUNVICovDQotICBpbnQgbGFzdF9yb3dfaGVpZ2h0OwkJLyogIyBvZiBub24tZHVtbXkgYmxvY2tzIGRvd24gaW4gbGFzdCBNQ1UgKi8NCi0NCi0gIC8qIFNhdmVkIHF1YW50aXphdGlvbiB0YWJsZSBmb3IgY29tcG9uZW50OyBOVUxMIGlmIG5vbmUgeWV0IHNhdmVkLg0KLSAgICogU2VlIGpkaW5wdXQuYyBjb21tZW50cyBhYm91dCB0aGUgbmVlZCBmb3IgdGhpcyBpbmZvcm1hdGlvbi4NCi0gICAqIFRoaXMgZmllbGQgaXMgY3VycmVudGx5IHVzZWQgb25seSBmb3IgZGVjb21wcmVzc2lvbi4NCi0gICAqLw0KLSAgSlFVQU5UX1RCTCAqIHF1YW50X3RhYmxlOw0KLQ0KLSAgLyogUHJpdmF0ZSBwZXItY29tcG9uZW50IHN0b3JhZ2UgZm9yIERDVCBvciBJRENUIHN1YnN5c3RlbS4gKi8NCi0gIHZvaWQgKiBkY3RfdGFibGU7DQotfSBqcGVnX2NvbXBvbmVudF9pbmZvOw0KLQ0KLQ0KLS8qIFRoZSBzY3JpcHQgZm9yIGVuY29kaW5nIGEgbXVsdGlwbGUtc2NhbiBmaWxlIGlzIGFuIGFycmF5IG9mIHRoZXNlOiAqLw0KLQ0KLXR5cGVkZWYgc3RydWN0IHsNCi0gIGludCBjb21wc19pbl9zY2FuOwkJLyogbnVtYmVyIG9mIGNvbXBvbmVudHMgZW5jb2RlZCBpbiB0aGlzIHNjYW4gKi8NCi0gIGludCBjb21wb25lbnRfaW5kZXhbTUFYX0NPTVBTX0lOX1NDQU5dOyAvKiB0aGVpciBTT0YvY29tcF9pbmZvW10gaW5kZXhlcyAqLw0KLSAgaW50IFNzLCBTZTsJCQkvKiBwcm9ncmVzc2l2ZSBKUEVHIHNwZWN0cmFsIHNlbGVjdGlvbiBwYXJtcyAqLw0KLSAgaW50IEFoLCBBbDsJCQkvKiBwcm9ncmVzc2l2ZSBKUEVHIHN1Y2Nlc3NpdmUgYXBwcm94LiBwYXJtcyAqLw0KLX0ganBlZ19zY2FuX2luZm87DQotDQotLyogVGhlIGRlY29tcHJlc3NvciBjYW4gc2F2ZSBBUFBuIGFuZCBDT00gbWFya2VycyBpbiBhIGxpc3Qgb2YgdGhlc2U6ICovDQotDQotdHlwZWRlZiBzdHJ1Y3QganBlZ19tYXJrZXJfc3RydWN0ICAqIGpwZWdfc2F2ZWRfbWFya2VyX3B0cjsNCi0NCi1zdHJ1Y3QganBlZ19tYXJrZXJfc3RydWN0IHsNCi0gIGpwZWdfc2F2ZWRfbWFya2VyX3B0ciBuZXh0OwkvKiBuZXh0IGluIGxpc3QsIG9yIE5VTEwgKi8NCi0gIFVJTlQ4IG1hcmtlcjsJCQkvKiBtYXJrZXIgY29kZTogSlBFR19DT00sIG9yIEpQRUdfQVBQMCtuICovDQotICB1bnNpZ25lZCBpbnQgb3JpZ2luYWxfbGVuZ3RoOwkvKiAjIGJ5dGVzIG9mIGRhdGEgaW4gdGhlIGZpbGUgKi8NCi0gIHVuc2lnbmVkIGludCBkYXRhX2xlbmd0aDsJLyogIyBieXRlcyBvZiBkYXRhIHNhdmVkIGF0IGRhdGFbXSAqLw0KLSAgSk9DVEVUICAqIGRhdGE7CQkvKiB0aGUgZGF0YSBjb250YWluZWQgaW4gdGhlIG1hcmtlciAqLw0KLSAgLyogdGhlIG1hcmtlciBsZW5ndGggd29yZCBpcyBub3QgY291bnRlZCBpbiBkYXRhX2xlbmd0aCBvciBvcmlnaW5hbF9sZW5ndGggKi8NCi19Ow0KLQ0KLS8qIEtub3duIGNvbG9yIHNwYWNlcy4gKi8NCi0NCi10eXBlZGVmIGVudW0gew0KLQlKQ1NfVU5LTk9XTiwJCS8qIGVycm9yL3Vuc3BlY2lmaWVkICovDQotCUpDU19HUkFZU0NBTEUsCQkvKiBtb25vY2hyb21lICovDQotCUpDU19SR0IsCQkvKiByZWQvZ3JlZW4vYmx1ZSAqLw0KLQlKQ1NfWUNiQ3IsCQkvKiBZL0NiL0NyIChhbHNvIGtub3duIGFzIFlVVikgKi8NCi0JSkNTX0NNWUssCQkvKiBDL00vWS9LICovDQotCUpDU19ZQ0NLCQkvKiBZL0NiL0NyL0sgKi8NCi19IEpfQ09MT1JfU1BBQ0U7DQotDQotLyogRENUL0lEQ1QgYWxnb3JpdGhtIG9wdGlvbnMuICovDQotDQotdHlwZWRlZiBlbnVtIHsNCi0JSkRDVF9JU0xPVywJCS8qIHNsb3cgYnV0IGFjY3VyYXRlIGludGVnZXIgYWxnb3JpdGhtICovDQotCUpEQ1RfSUZBU1QsCQkvKiBmYXN0ZXIsIGxlc3MgYWNjdXJhdGUgaW50ZWdlciBtZXRob2QgKi8NCi0JSkRDVF9GTE9BVAkJLyogZmxvYXRpbmctcG9pbnQ6IGFjY3VyYXRlLCBmYXN0IG9uIGZhc3QgSFcgKi8NCi19IEpfRENUX01FVEhPRDsNCi0NCi0jaWZuZGVmIEpEQ1RfREVGQVVMVAkJLyogbWF5IGJlIG92ZXJyaWRkZW4gaW4gamNvbmZpZy5oICovDQotI2RlZmluZSBKRENUX0RFRkFVTFQgIEpEQ1RfSVNMT1cNCi0jZW5kaWYNCi0jaWZuZGVmIEpEQ1RfRkFTVEVTVAkJLyogbWF5IGJlIG92ZXJyaWRkZW4gaW4gamNvbmZpZy5oICovDQotI2RlZmluZSBKRENUX0ZBU1RFU1QgIEpEQ1RfSUZBU1QNCi0jZW5kaWYNCi0NCi0vKiBEaXRoZXJpbmcgb3B0aW9ucyBmb3IgZGVjb21wcmVzc2lvbi4gKi8NCi0NCi10eXBlZGVmIGVudW0gew0KLQlKRElUSEVSX05PTkUsCQkvKiBubyBkaXRoZXJpbmcgKi8NCi0JSkRJVEhFUl9PUkRFUkVELAkvKiBzaW1wbGUgb3JkZXJlZCBkaXRoZXIgKi8NCi0JSkRJVEhFUl9GUwkJLyogRmxveWQtU3RlaW5iZXJnIGVycm9yIGRpZmZ1c2lvbiBkaXRoZXIgKi8NCi19IEpfRElUSEVSX01PREU7DQotDQotDQotLyogQ29tbW9uIGZpZWxkcyBiZXR3ZWVuIEpQRUcgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gbWFzdGVyIHN0cnVjdHMuICovDQotDQotI2RlZmluZSBqcGVnX2NvbW1vbl9maWVsZHMgXA0KLSAgc3RydWN0IGpwZWdfZXJyb3JfbWdyICogZXJyOwkvKiBFcnJvciBoYW5kbGVyIG1vZHVsZSAqL1wNCi0gIHN0cnVjdCBqcGVnX21lbW9yeV9tZ3IgKiBtZW07CS8qIE1lbW9yeSBtYW5hZ2VyIG1vZHVsZSAqL1wNCi0gIHN0cnVjdCBqcGVnX3Byb2dyZXNzX21nciAqIHByb2dyZXNzOyAvKiBQcm9ncmVzcyBtb25pdG9yLCBvciBOVUxMIGlmIG5vbmUgKi9cDQotICB2b2lkICogY2xpZW50X2RhdGE7CQkvKiBBdmFpbGFibGUgZm9yIHVzZSBieSBhcHBsaWNhdGlvbiAqL1wNCi0gIGJvb2xlYW4gaXNfZGVjb21wcmVzc29yOwkvKiBTbyBjb21tb24gY29kZSBjYW4gdGVsbCB3aGljaCBpcyB3aGljaCAqL1wNCi0gIGludCBnbG9iYWxfc3RhdGUJCS8qIEZvciBjaGVja2luZyBjYWxsIHNlcXVlbmNlIHZhbGlkaXR5ICovDQotDQotLyogUm91dGluZXMgdGhhdCBhcmUgdG8gYmUgdXNlZCBieSBib3RoIGhhbHZlcyBvZiB0aGUgbGlicmFyeSBhcmUgZGVjbGFyZWQNCi0gKiB0byByZWNlaXZlIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZS4gIFRoZXJlIGFyZSBubyBhY3R1YWwgaW5zdGFuY2VzIG9mDQotICoganBlZ19jb21tb25fc3RydWN0LCBvbmx5IG9mIGpwZWdfY29tcHJlc3Nfc3RydWN0IGFuZCBqcGVnX2RlY29tcHJlc3Nfc3RydWN0Lg0KLSAqLw0KLXN0cnVjdCBqcGVnX2NvbW1vbl9zdHJ1Y3Qgew0KLSAganBlZ19jb21tb25fZmllbGRzOwkJLyogRmllbGRzIGNvbW1vbiB0byBib3RoIG1hc3RlciBzdHJ1Y3QgdHlwZXMgKi8NCi0gIC8qIEFkZGl0aW9uYWwgZmllbGRzIGZvbGxvdyBpbiBhbiBhY3R1YWwganBlZ19jb21wcmVzc19zdHJ1Y3Qgb3INCi0gICAqIGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QuICBBbGwgdGhyZWUgc3RydWN0cyBtdXN0IGFncmVlIG9uIHRoZXNlDQotICAgKiBpbml0aWFsIGZpZWxkcyEgIChUaGlzIHdvdWxkIGJlIGEgbG90IGNsZWFuZXIgaW4gQysrLikNCi0gICAqLw0KLX07DQotDQotdHlwZWRlZiBzdHJ1Y3QganBlZ19jb21tb25fc3RydWN0ICogal9jb21tb25fcHRyOw0KLXR5cGVkZWYgc3RydWN0IGpwZWdfY29tcHJlc3Nfc3RydWN0ICogal9jb21wcmVzc19wdHI7DQotdHlwZWRlZiBzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCAqIGpfZGVjb21wcmVzc19wdHI7DQotDQotDQotLyogTWFzdGVyIHJlY29yZCBmb3IgYSBjb21wcmVzc2lvbiBpbnN0YW5jZSAqLw0KLQ0KLXN0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCB7DQotICBqcGVnX2NvbW1vbl9maWVsZHM7CQkvKiBGaWVsZHMgc2hhcmVkIHdpdGgganBlZ19kZWNvbXByZXNzX3N0cnVjdCAqLw0KLQ0KLSAgLyogRGVzdGluYXRpb24gZm9yIGNvbXByZXNzZWQgZGF0YSAqLw0KLSAgc3RydWN0IGpwZWdfZGVzdGluYXRpb25fbWdyICogZGVzdDsNCi0NCi0gIC8qIERlc2NyaXB0aW9uIG9mIHNvdXJjZSBpbWFnZSAtLS0gdGhlc2UgZmllbGRzIG11c3QgYmUgZmlsbGVkIGluIGJ5DQotICAgKiBvdXRlciBhcHBsaWNhdGlvbiBiZWZvcmUgc3RhcnRpbmcgY29tcHJlc3Npb24uICBpbl9jb2xvcl9zcGFjZSBtdXN0DQotICAgKiBiZSBjb3JyZWN0IGJlZm9yZSB5b3UgY2FuIGV2ZW4gY2FsbCBqcGVnX3NldF9kZWZhdWx0cygpLg0KLSAgICovDQotDQotICBKRElNRU5TSU9OIGltYWdlX3dpZHRoOwkvKiBpbnB1dCBpbWFnZSB3aWR0aCAqLw0KLSAgSkRJTUVOU0lPTiBpbWFnZV9oZWlnaHQ7CS8qIGlucHV0IGltYWdlIGhlaWdodCAqLw0KLSAgaW50IGlucHV0X2NvbXBvbmVudHM7CQkvKiAjIG9mIGNvbG9yIGNvbXBvbmVudHMgaW4gaW5wdXQgaW1hZ2UgKi8NCi0gIEpfQ09MT1JfU1BBQ0UgaW5fY29sb3Jfc3BhY2U7CS8qIGNvbG9yc3BhY2Ugb2YgaW5wdXQgaW1hZ2UgKi8NCi0NCi0gIGRvdWJsZSBpbnB1dF9nYW1tYTsJCS8qIGltYWdlIGdhbW1hIG9mIGlucHV0IGltYWdlICovDQotDQotICAvKiBDb21wcmVzc2lvbiBwYXJhbWV0ZXJzIC0tLSB0aGVzZSBmaWVsZHMgbXVzdCBiZSBzZXQgYmVmb3JlIGNhbGxpbmcNCi0gICAqIGpwZWdfc3RhcnRfY29tcHJlc3MoKS4gIFdlIHJlY29tbWVuZCBjYWxsaW5nIGpwZWdfc2V0X2RlZmF1bHRzKCkgdG8NCi0gICAqIGluaXRpYWxpemUgZXZlcnl0aGluZyB0byByZWFzb25hYmxlIGRlZmF1bHRzLCB0aGVuIGNoYW5naW5nIGFueXRoaW5nDQotICAgKiB0aGUgYXBwbGljYXRpb24gc3BlY2lmaWNhbGx5IHdhbnRzIHRvIGNoYW5nZS4gIFRoYXQgd2F5IHlvdSB3b24ndCBnZXQNCi0gICAqIGJ1cm50IHdoZW4gbmV3IHBhcmFtZXRlcnMgYXJlIGFkZGVkLiAgQWxzbyBub3RlIHRoYXQgdGhlcmUgYXJlIHNldmVyYWwNCi0gICAqIGhlbHBlciByb3V0aW5lcyB0byBzaW1wbGlmeSBjaGFuZ2luZyBwYXJhbWV0ZXJzLg0KLSAgICovDQotDQotICBpbnQgZGF0YV9wcmVjaXNpb247CQkvKiBiaXRzIG9mIHByZWNpc2lvbiBpbiBpbWFnZSBkYXRhICovDQotDQotICBpbnQgbnVtX2NvbXBvbmVudHM7CQkvKiAjIG9mIGNvbG9yIGNvbXBvbmVudHMgaW4gSlBFRyBpbWFnZSAqLw0KLSAgSl9DT0xPUl9TUEFDRSBqcGVnX2NvbG9yX3NwYWNlOyAvKiBjb2xvcnNwYWNlIG9mIEpQRUcgaW1hZ2UgKi8NCi0NCi0gIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wX2luZm87DQotICAvKiBjb21wX2luZm9baV0gZGVzY3JpYmVzIGNvbXBvbmVudCB0aGF0IGFwcGVhcnMgaSd0aCBpbiBTT0YgKi8NCi0gIA0KLSAgSlFVQU5UX1RCTCAqIHF1YW50X3RibF9wdHJzW05VTV9RVUFOVF9UQkxTXTsNCi0gIC8qIHB0cnMgdG8gY29lZmZpY2llbnQgcXVhbnRpemF0aW9uIHRhYmxlcywgb3IgTlVMTCBpZiBub3QgZGVmaW5lZCAqLw0KLSAgDQotICBKSFVGRl9UQkwgKiBkY19odWZmX3RibF9wdHJzW05VTV9IVUZGX1RCTFNdOw0KLSAgSkhVRkZfVEJMICogYWNfaHVmZl90YmxfcHRyc1tOVU1fSFVGRl9UQkxTXTsNCi0gIC8qIHB0cnMgdG8gSHVmZm1hbiBjb2RpbmcgdGFibGVzLCBvciBOVUxMIGlmIG5vdCBkZWZpbmVkICovDQotICANCi0gIFVJTlQ4IGFyaXRoX2RjX0xbTlVNX0FSSVRIX1RCTFNdOyAvKiBMIHZhbHVlcyBmb3IgREMgYXJpdGgtY29kaW5nIHRhYmxlcyAqLw0KLSAgVUlOVDggYXJpdGhfZGNfVVtOVU1fQVJJVEhfVEJMU107IC8qIFUgdmFsdWVzIGZvciBEQyBhcml0aC1jb2RpbmcgdGFibGVzICovDQotICBVSU5UOCBhcml0aF9hY19LW05VTV9BUklUSF9UQkxTXTsgLyogS3ggdmFsdWVzIGZvciBBQyBhcml0aC1jb2RpbmcgdGFibGVzICovDQotDQotICBpbnQgbnVtX3NjYW5zOwkJLyogIyBvZiBlbnRyaWVzIGluIHNjYW5faW5mbyBhcnJheSAqLw0KLSAgY29uc3QganBlZ19zY2FuX2luZm8gKiBzY2FuX2luZm87IC8qIHNjcmlwdCBmb3IgbXVsdGktc2NhbiBmaWxlLCBvciBOVUxMICovDQotICAvKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBzY2FuX2luZm8gaXMgTlVMTCwgd2hpY2ggY2F1c2VzIGEgc2luZ2xlLXNjYW4NCi0gICAqIHNlcXVlbnRpYWwgSlBFRyBmaWxlIHRvIGJlIGVtaXR0ZWQuICBUbyBjcmVhdGUgYSBtdWx0aS1zY2FuIGZpbGUsDQotICAgKiBzZXQgbnVtX3NjYW5zIGFuZCBzY2FuX2luZm8gdG8gcG9pbnQgdG8gYW4gYXJyYXkgb2Ygc2NhbiBkZWZpbml0aW9ucy4NCi0gICAqLw0KLQ0KLSAgYm9vbGVhbiByYXdfZGF0YV9pbjsJCS8qIFRSVUU9Y2FsbGVyIHN1cHBsaWVzIGRvd25zYW1wbGVkIGRhdGEgKi8NCi0gIGJvb2xlYW4gYXJpdGhfY29kZTsJCS8qIFRSVUU9YXJpdGhtZXRpYyBjb2RpbmcsIEZBTFNFPUh1ZmZtYW4gKi8NCi0gIGJvb2xlYW4gb3B0aW1pemVfY29kaW5nOwkvKiBUUlVFPW9wdGltaXplIGVudHJvcHkgZW5jb2RpbmcgcGFybXMgKi8NCi0gIGJvb2xlYW4gQ0NJUjYwMV9zYW1wbGluZzsJLyogVFJVRT1maXJzdCBzYW1wbGVzIGFyZSBjb3NpdGVkICovDQotICBpbnQgc21vb3RoaW5nX2ZhY3RvcjsJCS8qIDEuLjEwMCwgb3IgMCBmb3Igbm8gaW5wdXQgc21vb3RoaW5nICovDQotICBKX0RDVF9NRVRIT0QgZGN0X21ldGhvZDsJLyogRENUIGFsZ29yaXRobSBzZWxlY3RvciAqLw0KLQ0KLSAgLyogVGhlIHJlc3RhcnQgaW50ZXJ2YWwgY2FuIGJlIHNwZWNpZmllZCBpbiBhYnNvbHV0ZSBNQ1VzIGJ5IHNldHRpbmcNCi0gICAqIHJlc3RhcnRfaW50ZXJ2YWwsIG9yIGluIE1DVSByb3dzIGJ5IHNldHRpbmcgcmVzdGFydF9pbl9yb3dzDQotICAgKiAoaW4gd2hpY2ggY2FzZSB0aGUgY29ycmVjdCByZXN0YXJ0X2ludGVydmFsIHdpbGwgYmUgZmlndXJlZA0KLSAgICogZm9yIGVhY2ggc2NhbikuDQotICAgKi8NCi0gIHVuc2lnbmVkIGludCByZXN0YXJ0X2ludGVydmFsOyAvKiBNQ1VzIHBlciByZXN0YXJ0LCBvciAwIGZvciBubyByZXN0YXJ0ICovDQotICBpbnQgcmVzdGFydF9pbl9yb3dzOwkJLyogaWYgPiAwLCBNQ1Ugcm93cyBwZXIgcmVzdGFydCBpbnRlcnZhbCAqLw0KLQ0KLSAgLyogUGFyYW1ldGVycyBjb250cm9sbGluZyBlbWlzc2lvbiBvZiBzcGVjaWFsIG1hcmtlcnMuICovDQotDQotICBib29sZWFuIHdyaXRlX0pGSUZfaGVhZGVyOwkvKiBzaG91bGQgYSBKRklGIG1hcmtlciBiZSB3cml0dGVuPyAqLw0KLSAgVUlOVDggSkZJRl9tYWpvcl92ZXJzaW9uOwkvKiBXaGF0IHRvIHdyaXRlIGZvciB0aGUgSkZJRiB2ZXJzaW9uIG51bWJlciAqLw0KLSAgVUlOVDggSkZJRl9taW5vcl92ZXJzaW9uOw0KLSAgLyogVGhlc2UgdGhyZWUgdmFsdWVzIGFyZSBub3QgdXNlZCBieSB0aGUgSlBFRyBjb2RlLCBtZXJlbHkgY29waWVkICovDQotICAvKiBpbnRvIHRoZSBKRklGIEFQUDAgbWFya2VyLiAgZGVuc2l0eV91bml0IGNhbiBiZSAwIGZvciB1bmtub3duLCAqLw0KLSAgLyogMSBmb3IgZG90cy9pbmNoLCBvciAyIGZvciBkb3RzL2NtLiAgTm90ZSB0aGF0IHRoZSBwaXhlbCBhc3BlY3QgKi8NCi0gIC8qIHJhdGlvIGlzIGRlZmluZWQgYnkgWF9kZW5zaXR5L1lfZGVuc2l0eSBldmVuIHdoZW4gZGVuc2l0eV91bml0PTAuICovDQotICBVSU5UOCBkZW5zaXR5X3VuaXQ7CQkvKiBKRklGIGNvZGUgZm9yIHBpeGVsIHNpemUgdW5pdHMgKi8NCi0gIFVJTlQxNiBYX2RlbnNpdHk7CQkvKiBIb3Jpem9udGFsIHBpeGVsIGRlbnNpdHkgKi8NCi0gIFVJTlQxNiBZX2RlbnNpdHk7CQkvKiBWZXJ0aWNhbCBwaXhlbCBkZW5zaXR5ICovDQotICBib29sZWFuIHdyaXRlX0Fkb2JlX21hcmtlcjsJLyogc2hvdWxkIGFuIEFkb2JlIG1hcmtlciBiZSB3cml0dGVuPyAqLw0KLSAgDQotICAvKiBTdGF0ZSB2YXJpYWJsZTogaW5kZXggb2YgbmV4dCBzY2FubGluZSB0byBiZSB3cml0dGVuIHRvDQotICAgKiBqcGVnX3dyaXRlX3NjYW5saW5lcygpLiAgQXBwbGljYXRpb24gbWF5IHVzZSB0aGlzIHRvIGNvbnRyb2wgaXRzDQotICAgKiBwcm9jZXNzaW5nIGxvb3AsIGUuZy4sICJ3aGlsZSAobmV4dF9zY2FubGluZSA8IGltYWdlX2hlaWdodCkiLg0KLSAgICovDQotDQotICBKRElNRU5TSU9OIG5leHRfc2NhbmxpbmU7CS8qIDAgLi4gaW1hZ2VfaGVpZ2h0LTEgICovDQotDQotICAvKiBSZW1haW5pbmcgZmllbGRzIGFyZSBrbm93biB0aHJvdWdob3V0IGNvbXByZXNzb3IsIGJ1dCBnZW5lcmFsbHkNCi0gICAqIHNob3VsZCBub3QgYmUgdG91Y2hlZCBieSBhIHN1cnJvdW5kaW5nIGFwcGxpY2F0aW9uLg0KLSAgICovDQotDQotICAvKg0KLSAgICogVGhlc2UgZmllbGRzIGFyZSBjb21wdXRlZCBkdXJpbmcgY29tcHJlc3Npb24gc3RhcnR1cA0KLSAgICovDQotICBib29sZWFuIHByb2dyZXNzaXZlX21vZGU7CS8qIFRSVUUgaWYgc2NhbiBzY3JpcHQgdXNlcyBwcm9ncmVzc2l2ZSBtb2RlICovDQotICBpbnQgbWF4X2hfc2FtcF9mYWN0b3I7CS8qIGxhcmdlc3QgaF9zYW1wX2ZhY3RvciAqLw0KLSAgaW50IG1heF92X3NhbXBfZmFjdG9yOwkvKiBsYXJnZXN0IHZfc2FtcF9mYWN0b3IgKi8NCi0NCi0gIEpESU1FTlNJT04gdG90YWxfaU1DVV9yb3dzOwkvKiAjIG9mIGlNQ1Ugcm93cyB0byBiZSBpbnB1dCB0byBjb2VmIGN0bHIgKi8NCi0gIC8qIFRoZSBjb2VmZmljaWVudCBjb250cm9sbGVyIHJlY2VpdmVzIGRhdGEgaW4gdW5pdHMgb2YgTUNVIHJvd3MgYXMgZGVmaW5lZA0KLSAgICogZm9yIGZ1bGx5IGludGVybGVhdmVkIHNjYW5zICh3aGV0aGVyIHRoZSBKUEVHIGZpbGUgaXMgaW50ZXJsZWF2ZWQgb3Igbm90KS4NCi0gICAqIFRoZXJlIGFyZSB2X3NhbXBfZmFjdG9yICogRENUU0laRSBzYW1wbGUgcm93cyBvZiBlYWNoIGNvbXBvbmVudCBpbiBhbg0KLSAgICogImlNQ1UiIChpbnRlcmxlYXZlZCBNQ1UpIHJvdy4NCi0gICAqLw0KLSAgDQotICAvKg0KLSAgICogVGhlc2UgZmllbGRzIGFyZSB2YWxpZCBkdXJpbmcgYW55IG9uZSBzY2FuLg0KLSAgICogVGhleSBkZXNjcmliZSB0aGUgY29tcG9uZW50cyBhbmQgTUNVcyBhY3R1YWxseSBhcHBlYXJpbmcgaW4gdGhlIHNjYW4uDQotICAgKi8NCi0gIGludCBjb21wc19pbl9zY2FuOwkJLyogIyBvZiBKUEVHIGNvbXBvbmVudHMgaW4gdGhpcyBzY2FuICovDQotICBqcGVnX2NvbXBvbmVudF9pbmZvICogY3VyX2NvbXBfaW5mb1tNQVhfQ09NUFNfSU5fU0NBTl07DQotICAvKiAqY3VyX2NvbXBfaW5mb1tpXSBkZXNjcmliZXMgY29tcG9uZW50IHRoYXQgYXBwZWFycyBpJ3RoIGluIFNPUyAqLw0KLSAgDQotICBKRElNRU5TSU9OIE1DVXNfcGVyX3JvdzsJLyogIyBvZiBNQ1VzIGFjcm9zcyB0aGUgaW1hZ2UgKi8NCi0gIEpESU1FTlNJT04gTUNVX3Jvd3NfaW5fc2NhbjsJLyogIyBvZiBNQ1Ugcm93cyBpbiB0aGUgaW1hZ2UgKi8NCi0gIA0KLSAgaW50IGJsb2Nrc19pbl9NQ1U7CQkvKiAjIG9mIERDVCBibG9ja3MgcGVyIE1DVSAqLw0KLSAgaW50IE1DVV9tZW1iZXJzaGlwW0NfTUFYX0JMT0NLU19JTl9NQ1VdOw0KLSAgLyogTUNVX21lbWJlcnNoaXBbaV0gaXMgaW5kZXggaW4gY3VyX2NvbXBfaW5mbyBvZiBjb21wb25lbnQgb3duaW5nICovDQotICAvKiBpJ3RoIGJsb2NrIGluIGFuIE1DVSAqLw0KLQ0KLSAgaW50IFNzLCBTZSwgQWgsIEFsOwkJLyogcHJvZ3Jlc3NpdmUgSlBFRyBwYXJhbWV0ZXJzIGZvciBzY2FuICovDQotDQotICAvKg0KLSAgICogTGlua3MgdG8gY29tcHJlc3Npb24gc3Vib2JqZWN0cyAobWV0aG9kcyBhbmQgcHJpdmF0ZSB2YXJpYWJsZXMgb2YgbW9kdWxlcykNCi0gICAqLw0KLSAgc3RydWN0IGpwZWdfY29tcF9tYXN0ZXIgKiBtYXN0ZXI7DQotICBzdHJ1Y3QganBlZ19jX21haW5fY29udHJvbGxlciAqIG1haW47DQotICBzdHJ1Y3QganBlZ19jX3ByZXBfY29udHJvbGxlciAqIHByZXA7DQotICBzdHJ1Y3QganBlZ19jX2NvZWZfY29udHJvbGxlciAqIGNvZWY7DQotICBzdHJ1Y3QganBlZ19tYXJrZXJfd3JpdGVyICogbWFya2VyOw0KLSAgc3RydWN0IGpwZWdfY29sb3JfY29udmVydGVyICogY2NvbnZlcnQ7DQotICBzdHJ1Y3QganBlZ19kb3duc2FtcGxlciAqIGRvd25zYW1wbGU7DQotICBzdHJ1Y3QganBlZ19mb3J3YXJkX2RjdCAqIGZkY3Q7DQotICBzdHJ1Y3QganBlZ19lbnRyb3B5X2VuY29kZXIgKiBlbnRyb3B5Ow0KLSAganBlZ19zY2FuX2luZm8gKiBzY3JpcHRfc3BhY2U7IC8qIHdvcmtzcGFjZSBmb3IganBlZ19zaW1wbGVfcHJvZ3Jlc3Npb24gKi8NCi0gIGludCBzY3JpcHRfc3BhY2Vfc2l6ZTsNCi19Ow0KLQ0KLQ0KLS8qIE1hc3RlciByZWNvcmQgZm9yIGEgZGVjb21wcmVzc2lvbiBpbnN0YW5jZSAqLw0KLQ0KLXN0cnVjdCBqcGVnX2RlY29tcHJlc3Nfc3RydWN0IHsNCi0gIGpwZWdfY29tbW9uX2ZpZWxkczsJCS8qIEZpZWxkcyBzaGFyZWQgd2l0aCBqcGVnX2NvbXByZXNzX3N0cnVjdCAqLw0KLQ0KLSAgLyogU291cmNlIG9mIGNvbXByZXNzZWQgZGF0YSAqLw0KLSAgc3RydWN0IGpwZWdfc291cmNlX21nciAqIHNyYzsNCi0NCi0gIC8qIEJhc2ljIGRlc2NyaXB0aW9uIG9mIGltYWdlIC0tLSBmaWxsZWQgaW4gYnkganBlZ19yZWFkX2hlYWRlcigpLiAqLw0KLSAgLyogQXBwbGljYXRpb24gbWF5IGluc3BlY3QgdGhlc2UgdmFsdWVzIHRvIGRlY2lkZSBob3cgdG8gcHJvY2VzcyBpbWFnZS4gKi8NCi0NCi0gIEpESU1FTlNJT04gaW1hZ2Vfd2lkdGg7CS8qIG5vbWluYWwgaW1hZ2Ugd2lkdGggKGZyb20gU09GIG1hcmtlcikgKi8NCi0gIEpESU1FTlNJT04gaW1hZ2VfaGVpZ2h0OwkvKiBub21pbmFsIGltYWdlIGhlaWdodCAqLw0KLSAgaW50IG51bV9jb21wb25lbnRzOwkJLyogIyBvZiBjb2xvciBjb21wb25lbnRzIGluIEpQRUcgaW1hZ2UgKi8NCi0gIEpfQ09MT1JfU1BBQ0UganBlZ19jb2xvcl9zcGFjZTsgLyogY29sb3JzcGFjZSBvZiBKUEVHIGltYWdlICovDQotDQotICAvKiBEZWNvbXByZXNzaW9uIHByb2Nlc3NpbmcgcGFyYW1ldGVycyAtLS0gdGhlc2UgZmllbGRzIG11c3QgYmUgc2V0IGJlZm9yZQ0KLSAgICogY2FsbGluZyBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKS4gIE5vdGUgdGhhdCBqcGVnX3JlYWRfaGVhZGVyKCkgaW5pdGlhbGl6ZXMNCi0gICAqIHRoZW0gdG8gZGVmYXVsdCB2YWx1ZXMuDQotICAgKi8NCi0NCi0gIEpfQ09MT1JfU1BBQ0Ugb3V0X2NvbG9yX3NwYWNlOyAvKiBjb2xvcnNwYWNlIGZvciBvdXRwdXQgKi8NCi0NCi0gIHVuc2lnbmVkIGludCBzY2FsZV9udW0sIHNjYWxlX2Rlbm9tOyAvKiBmcmFjdGlvbiBieSB3aGljaCB0byBzY2FsZSBpbWFnZSAqLw0KLQ0KLSAgZG91YmxlIG91dHB1dF9nYW1tYTsJCS8qIGltYWdlIGdhbW1hIHdhbnRlZCBpbiBvdXRwdXQgKi8NCi0NCi0gIGJvb2xlYW4gYnVmZmVyZWRfaW1hZ2U7CS8qIFRSVUU9bXVsdGlwbGUgb3V0cHV0IHBhc3NlcyAqLw0KLSAgYm9vbGVhbiByYXdfZGF0YV9vdXQ7CQkvKiBUUlVFPWRvd25zYW1wbGVkIGRhdGEgd2FudGVkICovDQotDQotICBKX0RDVF9NRVRIT0QgZGN0X21ldGhvZDsJLyogSURDVCBhbGdvcml0aG0gc2VsZWN0b3IgKi8NCi0gIGJvb2xlYW4gZG9fZmFuY3lfdXBzYW1wbGluZzsJLyogVFJVRT1hcHBseSBmYW5jeSB1cHNhbXBsaW5nICovDQotICBib29sZWFuIGRvX2Jsb2NrX3Ntb290aGluZzsJLyogVFJVRT1hcHBseSBpbnRlcmJsb2NrIHNtb290aGluZyAqLw0KLQ0KLSAgYm9vbGVhbiBxdWFudGl6ZV9jb2xvcnM7CS8qIFRSVUU9Y29sb3JtYXBwZWQgb3V0cHV0IHdhbnRlZCAqLw0KLSAgLyogdGhlIGZvbGxvd2luZyBhcmUgaWdub3JlZCBpZiBub3QgcXVhbnRpemVfY29sb3JzOiAqLw0KLSAgSl9ESVRIRVJfTU9ERSBkaXRoZXJfbW9kZTsJLyogdHlwZSBvZiBjb2xvciBkaXRoZXJpbmcgdG8gdXNlICovDQotICBib29sZWFuIHR3b19wYXNzX3F1YW50aXplOwkvKiBUUlVFPXVzZSB0d28tcGFzcyBjb2xvciBxdWFudGl6YXRpb24gKi8NCi0gIGludCBkZXNpcmVkX251bWJlcl9vZl9jb2xvcnM7CS8qIG1heCAjIGNvbG9ycyB0byB1c2UgaW4gY3JlYXRlZCBjb2xvcm1hcCAqLw0KLSAgLyogdGhlc2UgYXJlIHNpZ25pZmljYW50IG9ubHkgaW4gYnVmZmVyZWQtaW1hZ2UgbW9kZTogKi8NCi0gIGJvb2xlYW4gZW5hYmxlXzFwYXNzX3F1YW50OwkvKiBlbmFibGUgZnV0dXJlIHVzZSBvZiAxLXBhc3MgcXVhbnRpemVyICovDQotICBib29sZWFuIGVuYWJsZV9leHRlcm5hbF9xdWFudDsvKiBlbmFibGUgZnV0dXJlIHVzZSBvZiBleHRlcm5hbCBjb2xvcm1hcCAqLw0KLSAgYm9vbGVhbiBlbmFibGVfMnBhc3NfcXVhbnQ7CS8qIGVuYWJsZSBmdXR1cmUgdXNlIG9mIDItcGFzcyBxdWFudGl6ZXIgKi8NCi0NCi0gIC8qIERlc2NyaXB0aW9uIG9mIGFjdHVhbCBvdXRwdXQgaW1hZ2UgdGhhdCB3aWxsIGJlIHJldHVybmVkIHRvIGFwcGxpY2F0aW9uLg0KLSAgICogVGhlc2UgZmllbGRzIGFyZSBjb21wdXRlZCBieSBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKS4NCi0gICAqIFlvdSBjYW4gYWxzbyB1c2UganBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zKCkgdG8gZGV0ZXJtaW5lIHRoZXNlIHZhbHVlcw0KLSAgICogaW4gYWR2YW5jZSBvZiBjYWxsaW5nIGpwZWdfc3RhcnRfZGVjb21wcmVzcygpLg0KLSAgICovDQotDQotICBKRElNRU5TSU9OIG91dHB1dF93aWR0aDsJLyogc2NhbGVkIGltYWdlIHdpZHRoICovDQotICBKRElNRU5TSU9OIG91dHB1dF9oZWlnaHQ7CS8qIHNjYWxlZCBpbWFnZSBoZWlnaHQgKi8NCi0gIGludCBvdXRfY29sb3JfY29tcG9uZW50czsJLyogIyBvZiBjb2xvciBjb21wb25lbnRzIGluIG91dF9jb2xvcl9zcGFjZSAqLw0KLSAgaW50IG91dHB1dF9jb21wb25lbnRzOwkvKiAjIG9mIGNvbG9yIGNvbXBvbmVudHMgcmV0dXJuZWQgKi8NCi0gIC8qIG91dHB1dF9jb21wb25lbnRzIGlzIDEgKGEgY29sb3JtYXAgaW5kZXgpIHdoZW4gcXVhbnRpemluZyBjb2xvcnM7DQotICAgKiBvdGhlcndpc2UgaXQgZXF1YWxzIG91dF9jb2xvcl9jb21wb25lbnRzLg0KLSAgICovDQotICBpbnQgcmVjX291dGJ1Zl9oZWlnaHQ7CS8qIG1pbiByZWNvbW1lbmRlZCBoZWlnaHQgb2Ygc2NhbmxpbmUgYnVmZmVyICovDQotICAvKiBJZiB0aGUgYnVmZmVyIHBhc3NlZCB0byBqcGVnX3JlYWRfc2NhbmxpbmVzKCkgaXMgbGVzcyB0aGFuIHRoaXMgbWFueSByb3dzDQotICAgKiBoaWdoLCBzcGFjZSBhbmQgdGltZSB3aWxsIGJlIHdhc3RlZCBkdWUgdG8gdW5uZWNlc3NhcnkgZGF0YSBjb3B5aW5nLg0KLSAgICogVXN1YWxseSByZWNfb3V0YnVmX2hlaWdodCB3aWxsIGJlIDEgb3IgMiwgYXQgbW9zdCA0Lg0KLSAgICovDQotDQotICAvKiBXaGVuIHF1YW50aXppbmcgY29sb3JzLCB0aGUgb3V0cHV0IGNvbG9ybWFwIGlzIGRlc2NyaWJlZCBieSB0aGVzZSBmaWVsZHMuDQotICAgKiBUaGUgYXBwbGljYXRpb24gY2FuIHN1cHBseSBhIGNvbG9ybWFwIGJ5IHNldHRpbmcgY29sb3JtYXAgbm9uLU5VTEwgYmVmb3JlDQotICAgKiBjYWxsaW5nIGpwZWdfc3RhcnRfZGVjb21wcmVzczsgb3RoZXJ3aXNlIGEgY29sb3JtYXAgaXMgY3JlYXRlZCBkdXJpbmcNCi0gICAqIGpwZWdfc3RhcnRfZGVjb21wcmVzcyBvciBqcGVnX3N0YXJ0X291dHB1dC4NCi0gICAqIFRoZSBtYXAgaGFzIG91dF9jb2xvcl9jb21wb25lbnRzIHJvd3MgYW5kIGFjdHVhbF9udW1iZXJfb2ZfY29sb3JzIGNvbHVtbnMuDQotICAgKi8NCi0gIGludCBhY3R1YWxfbnVtYmVyX29mX2NvbG9yczsJLyogbnVtYmVyIG9mIGVudHJpZXMgaW4gdXNlICovDQotICBKU0FNUEFSUkFZIGNvbG9ybWFwOwkJLyogVGhlIGNvbG9yIG1hcCBhcyBhIDItRCBwaXhlbCBhcnJheSAqLw0KLQ0KLSAgLyogU3RhdGUgdmFyaWFibGVzOiB0aGVzZSB2YXJpYWJsZXMgaW5kaWNhdGUgdGhlIHByb2dyZXNzIG9mIGRlY29tcHJlc3Npb24uDQotICAgKiBUaGUgYXBwbGljYXRpb24gbWF5IGV4YW1pbmUgdGhlc2UgYnV0IG11c3Qgbm90IG1vZGlmeSB0aGVtLg0KLSAgICovDQotDQotICAvKiBSb3cgaW5kZXggb2YgbmV4dCBzY2FubGluZSB0byBiZSByZWFkIGZyb20ganBlZ19yZWFkX3NjYW5saW5lcygpLg0KLSAgICogQXBwbGljYXRpb24gbWF5IHVzZSB0aGlzIHRvIGNvbnRyb2wgaXRzIHByb2Nlc3NpbmcgbG9vcCwgZS5nLiwNCi0gICAqICJ3aGlsZSAob3V0cHV0X3NjYW5saW5lIDwgb3V0cHV0X2hlaWdodCkiLg0KLSAgICovDQotICBKRElNRU5TSU9OIG91dHB1dF9zY2FubGluZTsJLyogMCAuLiBvdXRwdXRfaGVpZ2h0LTEgICovDQotDQotICAvKiBDdXJyZW50IGlucHV0IHNjYW4gbnVtYmVyIGFuZCBudW1iZXIgb2YgaU1DVSByb3dzIGNvbXBsZXRlZCBpbiBzY2FuLg0KLSAgICogVGhlc2UgaW5kaWNhdGUgdGhlIHByb2dyZXNzIG9mIHRoZSBkZWNvbXByZXNzb3IgaW5wdXQgc2lkZS4NCi0gICAqLw0KLSAgaW50IGlucHV0X3NjYW5fbnVtYmVyOwkvKiBOdW1iZXIgb2YgU09TIG1hcmtlcnMgc2VlbiBzbyBmYXIgKi8NCi0gIEpESU1FTlNJT04gaW5wdXRfaU1DVV9yb3c7CS8qIE51bWJlciBvZiBpTUNVIHJvd3MgY29tcGxldGVkICovDQotDQotICAvKiBUaGUgIm91dHB1dCBzY2FuIG51bWJlciIgaXMgdGhlIG5vdGlvbmFsIHNjYW4gYmVpbmcgZGlzcGxheWVkIGJ5IHRoZQ0KLSAgICogb3V0cHV0IHNpZGUuICBUaGUgZGVjb21wcmVzc29yIHdpbGwgbm90IGFsbG93IG91dHB1dCBzY2FuL3JvdyBudW1iZXINCi0gICAqIHRvIGdldCBhaGVhZCBvZiBpbnB1dCBzY2FuL3JvdywgYnV0IGl0IGNhbiBmYWxsIGFyYml0cmFyaWx5IGZhciBiZWhpbmQuDQotICAgKi8NCi0gIGludCBvdXRwdXRfc2Nhbl9udW1iZXI7CS8qIE5vbWluYWwgc2NhbiBudW1iZXIgYmVpbmcgZGlzcGxheWVkICovDQotICBKRElNRU5TSU9OIG91dHB1dF9pTUNVX3JvdzsJLyogTnVtYmVyIG9mIGlNQ1Ugcm93cyByZWFkICovDQotDQotICAvKiBDdXJyZW50IHByb2dyZXNzaW9uIHN0YXR1cy4gIGNvZWZfYml0c1tjXVtpXSBpbmRpY2F0ZXMgdGhlIHByZWNpc2lvbg0KLSAgICogd2l0aCB3aGljaCBjb21wb25lbnQgYydzIERDVCBjb2VmZmljaWVudCBpIChpbiB6aWd6YWcgb3JkZXIpIGlzIGtub3duLg0KLSAgICogSXQgaXMgLTEgd2hlbiBubyBkYXRhIGhhcyB5ZXQgYmVlbiByZWNlaXZlZCwgb3RoZXJ3aXNlIGl0IGlzIHRoZSBwb2ludA0KLSAgICogdHJhbnNmb3JtIChzaGlmdCkgdmFsdWUgZm9yIHRoZSBtb3N0IHJlY2VudCBzY2FuIG9mIHRoZSBjb2VmZmljaWVudA0KLSAgICogKHRodXMsIDAgYXQgY29tcGxldGlvbiBvZiB0aGUgcHJvZ3Jlc3Npb24pLg0KLSAgICogVGhpcyBwb2ludGVyIGlzIE5VTEwgd2hlbiByZWFkaW5nIGEgbm9uLXByb2dyZXNzaXZlIGZpbGUuDQotICAgKi8NCi0gIGludCAoKmNvZWZfYml0cylbRENUU0laRTJdOwkvKiAtMSBvciBjdXJyZW50IEFsIHZhbHVlIGZvciBlYWNoIGNvZWYgKi8NCi0NCi0gIC8qIEludGVybmFsIEpQRUcgcGFyYW1ldGVycyAtLS0gdGhlIGFwcGxpY2F0aW9uIHVzdWFsbHkgbmVlZCBub3QgbG9vayBhdA0KLSAgICogdGhlc2UgZmllbGRzLiAgTm90ZSB0aGF0IHRoZSBkZWNvbXByZXNzb3Igb3V0cHV0IHNpZGUgbWF5IG5vdCB1c2UNCi0gICAqIGFueSBwYXJhbWV0ZXJzIHRoYXQgY2FuIGNoYW5nZSBiZXR3ZWVuIHNjYW5zLg0KLSAgICovDQotDQotICAvKiBRdWFudGl6YXRpb24gYW5kIEh1ZmZtYW4gdGFibGVzIGFyZSBjYXJyaWVkIGZvcndhcmQgYWNyb3NzIGlucHV0DQotICAgKiBkYXRhc3RyZWFtcyB3aGVuIHByb2Nlc3NpbmcgYWJicmV2aWF0ZWQgSlBFRyBkYXRhc3RyZWFtcy4NCi0gICAqLw0KLQ0KLSAgSlFVQU5UX1RCTCAqIHF1YW50X3RibF9wdHJzW05VTV9RVUFOVF9UQkxTXTsNCi0gIC8qIHB0cnMgdG8gY29lZmZpY2llbnQgcXVhbnRpemF0aW9uIHRhYmxlcywgb3IgTlVMTCBpZiBub3QgZGVmaW5lZCAqLw0KLQ0KLSAgSkhVRkZfVEJMICogZGNfaHVmZl90YmxfcHRyc1tOVU1fSFVGRl9UQkxTXTsNCi0gIEpIVUZGX1RCTCAqIGFjX2h1ZmZfdGJsX3B0cnNbTlVNX0hVRkZfVEJMU107DQotICAvKiBwdHJzIHRvIEh1ZmZtYW4gY29kaW5nIHRhYmxlcywgb3IgTlVMTCBpZiBub3QgZGVmaW5lZCAqLw0KLQ0KLSAgLyogVGhlc2UgcGFyYW1ldGVycyBhcmUgbmV2ZXIgY2FycmllZCBhY3Jvc3MgZGF0YXN0cmVhbXMsIHNpbmNlIHRoZXkNCi0gICAqIGFyZSBnaXZlbiBpbiBTT0YvU09TIG1hcmtlcnMgb3IgZGVmaW5lZCB0byBiZSByZXNldCBieSBTT0kuDQotICAgKi8NCi0NCi0gIGludCBkYXRhX3ByZWNpc2lvbjsJCS8qIGJpdHMgb2YgcHJlY2lzaW9uIGluIGltYWdlIGRhdGEgKi8NCi0NCi0gIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wX2luZm87DQotICAvKiBjb21wX2luZm9baV0gZGVzY3JpYmVzIGNvbXBvbmVudCB0aGF0IGFwcGVhcnMgaSd0aCBpbiBTT0YgKi8NCi0NCi0gIGJvb2xlYW4gcHJvZ3Jlc3NpdmVfbW9kZTsJLyogVFJVRSBpZiBTT0ZuIHNwZWNpZmllcyBwcm9ncmVzc2l2ZSBtb2RlICovDQotICBib29sZWFuIGFyaXRoX2NvZGU7CQkvKiBUUlVFPWFyaXRobWV0aWMgY29kaW5nLCBGQUxTRT1IdWZmbWFuICovDQotDQotICBVSU5UOCBhcml0aF9kY19MW05VTV9BUklUSF9UQkxTXTsgLyogTCB2YWx1ZXMgZm9yIERDIGFyaXRoLWNvZGluZyB0YWJsZXMgKi8NCi0gIFVJTlQ4IGFyaXRoX2RjX1VbTlVNX0FSSVRIX1RCTFNdOyAvKiBVIHZhbHVlcyBmb3IgREMgYXJpdGgtY29kaW5nIHRhYmxlcyAqLw0KLSAgVUlOVDggYXJpdGhfYWNfS1tOVU1fQVJJVEhfVEJMU107IC8qIEt4IHZhbHVlcyBmb3IgQUMgYXJpdGgtY29kaW5nIHRhYmxlcyAqLw0KLQ0KLSAgdW5zaWduZWQgaW50IHJlc3RhcnRfaW50ZXJ2YWw7IC8qIE1DVXMgcGVyIHJlc3RhcnQgaW50ZXJ2YWwsIG9yIDAgZm9yIG5vIHJlc3RhcnQgKi8NCi0NCi0gIC8qIFRoZXNlIGZpZWxkcyByZWNvcmQgZGF0YSBvYnRhaW5lZCBmcm9tIG9wdGlvbmFsIG1hcmtlcnMgcmVjb2duaXplZCBieQ0KLSAgICogdGhlIEpQRUcgbGlicmFyeS4NCi0gICAqLw0KLSAgYm9vbGVhbiBzYXdfSkZJRl9tYXJrZXI7CS8qIFRSVUUgaWZmIGEgSkZJRiBBUFAwIG1hcmtlciB3YXMgZm91bmQgKi8NCi0gIC8qIERhdGEgY29waWVkIGZyb20gSkZJRiBtYXJrZXI7IG9ubHkgdmFsaWQgaWYgc2F3X0pGSUZfbWFya2VyIGlzIFRSVUU6ICovDQotICBVSU5UOCBKRklGX21ham9yX3ZlcnNpb247CS8qIEpGSUYgdmVyc2lvbiBudW1iZXIgKi8NCi0gIFVJTlQ4IEpGSUZfbWlub3JfdmVyc2lvbjsNCi0gIFVJTlQ4IGRlbnNpdHlfdW5pdDsJCS8qIEpGSUYgY29kZSBmb3IgcGl4ZWwgc2l6ZSB1bml0cyAqLw0KLSAgVUlOVDE2IFhfZGVuc2l0eTsJCS8qIEhvcml6b250YWwgcGl4ZWwgZGVuc2l0eSAqLw0KLSAgVUlOVDE2IFlfZGVuc2l0eTsJCS8qIFZlcnRpY2FsIHBpeGVsIGRlbnNpdHkgKi8NCi0gIGJvb2xlYW4gc2F3X0Fkb2JlX21hcmtlcjsJLyogVFJVRSBpZmYgYW4gQWRvYmUgQVBQMTQgbWFya2VyIHdhcyBmb3VuZCAqLw0KLSAgVUlOVDggQWRvYmVfdHJhbnNmb3JtOwkvKiBDb2xvciB0cmFuc2Zvcm0gY29kZSBmcm9tIEFkb2JlIG1hcmtlciAqLw0KLQ0KLSAgYm9vbGVhbiBDQ0lSNjAxX3NhbXBsaW5nOwkvKiBUUlVFPWZpcnN0IHNhbXBsZXMgYXJlIGNvc2l0ZWQgKi8NCi0NCi0gIC8qIEFzaWRlIGZyb20gdGhlIHNwZWNpZmljIGRhdGEgcmV0YWluZWQgZnJvbSBBUFBuIG1hcmtlcnMga25vd24gdG8gdGhlDQotICAgKiBsaWJyYXJ5LCB0aGUgdW5pbnRlcnByZXRlZCBjb250ZW50cyBvZiBhbnkgb3IgYWxsIEFQUG4gYW5kIENPTSBtYXJrZXJzDQotICAgKiBjYW4gYmUgc2F2ZWQgaW4gYSBsaXN0IGZvciBleGFtaW5hdGlvbiBieSB0aGUgYXBwbGljYXRpb24uDQotICAgKi8NCi0gIGpwZWdfc2F2ZWRfbWFya2VyX3B0ciBtYXJrZXJfbGlzdDsgLyogSGVhZCBvZiBsaXN0IG9mIHNhdmVkIG1hcmtlcnMgKi8NCi0NCi0gIC8qIFJlbWFpbmluZyBmaWVsZHMgYXJlIGtub3duIHRocm91Z2hvdXQgZGVjb21wcmVzc29yLCBidXQgZ2VuZXJhbGx5DQotICAgKiBzaG91bGQgbm90IGJlIHRvdWNoZWQgYnkgYSBzdXJyb3VuZGluZyBhcHBsaWNhdGlvbi4NCi0gICAqLw0KLQ0KLSAgLyoNCi0gICAqIFRoZXNlIGZpZWxkcyBhcmUgY29tcHV0ZWQgZHVyaW5nIGRlY29tcHJlc3Npb24gc3RhcnR1cA0KLSAgICovDQotICBpbnQgbWF4X2hfc2FtcF9mYWN0b3I7CS8qIGxhcmdlc3QgaF9zYW1wX2ZhY3RvciAqLw0KLSAgaW50IG1heF92X3NhbXBfZmFjdG9yOwkvKiBsYXJnZXN0IHZfc2FtcF9mYWN0b3IgKi8NCi0NCi0gIGludCBtaW5fRENUX3NjYWxlZF9zaXplOwkvKiBzbWFsbGVzdCBEQ1Rfc2NhbGVkX3NpemUgb2YgYW55IGNvbXBvbmVudCAqLw0KLQ0KLSAgSkRJTUVOU0lPTiB0b3RhbF9pTUNVX3Jvd3M7CS8qICMgb2YgaU1DVSByb3dzIGluIGltYWdlICovDQotICAvKiBUaGUgY29lZmZpY2llbnQgY29udHJvbGxlcidzIGlucHV0IGFuZCBvdXRwdXQgcHJvZ3Jlc3MgaXMgbWVhc3VyZWQgaW4NCi0gICAqIHVuaXRzIG9mICJpTUNVIiAoaW50ZXJsZWF2ZWQgTUNVKSByb3dzLiAgVGhlc2UgYXJlIHRoZSBzYW1lIGFzIE1DVSByb3dzDQotICAgKiBpbiBmdWxseSBpbnRlcmxlYXZlZCBKUEVHIHNjYW5zLCBidXQgYXJlIHVzZWQgd2hldGhlciB0aGUgc2NhbiBpcw0KLSAgICogaW50ZXJsZWF2ZWQgb3Igbm90LiAgV2UgZGVmaW5lIGFuIGlNQ1Ugcm93IGFzIHZfc2FtcF9mYWN0b3IgRENUIGJsb2NrDQotICAgKiByb3dzIG9mIGVhY2ggY29tcG9uZW50LiAgVGhlcmVmb3JlLCB0aGUgSURDVCBvdXRwdXQgY29udGFpbnMNCi0gICAqIHZfc2FtcF9mYWN0b3IqRENUX3NjYWxlZF9zaXplIHNhbXBsZSByb3dzIG9mIGEgY29tcG9uZW50IHBlciBpTUNVIHJvdy4NCi0gICAqLw0KLQ0KLSAgSlNBTVBMRSAqIHNhbXBsZV9yYW5nZV9saW1pdDsgLyogdGFibGUgZm9yIGZhc3QgcmFuZ2UtbGltaXRpbmcgKi8NCi0NCi0gIC8qDQotICAgKiBUaGVzZSBmaWVsZHMgYXJlIHZhbGlkIGR1cmluZyBhbnkgb25lIHNjYW4uDQotICAgKiBUaGV5IGRlc2NyaWJlIHRoZSBjb21wb25lbnRzIGFuZCBNQ1VzIGFjdHVhbGx5IGFwcGVhcmluZyBpbiB0aGUgc2Nhbi4NCi0gICAqIE5vdGUgdGhhdCB0aGUgZGVjb21wcmVzc29yIG91dHB1dCBzaWRlIG11c3Qgbm90IHVzZSB0aGVzZSBmaWVsZHMuDQotICAgKi8NCi0gIGludCBjb21wc19pbl9zY2FuOwkJLyogIyBvZiBKUEVHIGNvbXBvbmVudHMgaW4gdGhpcyBzY2FuICovDQotICBqcGVnX2NvbXBvbmVudF9pbmZvICogY3VyX2NvbXBfaW5mb1tNQVhfQ09NUFNfSU5fU0NBTl07DQotICAvKiAqY3VyX2NvbXBfaW5mb1tpXSBkZXNjcmliZXMgY29tcG9uZW50IHRoYXQgYXBwZWFycyBpJ3RoIGluIFNPUyAqLw0KLQ0KLSAgSkRJTUVOU0lPTiBNQ1VzX3Blcl9yb3c7CS8qICMgb2YgTUNVcyBhY3Jvc3MgdGhlIGltYWdlICovDQotICBKRElNRU5TSU9OIE1DVV9yb3dzX2luX3NjYW47CS8qICMgb2YgTUNVIHJvd3MgaW4gdGhlIGltYWdlICovDQotDQotICBpbnQgYmxvY2tzX2luX01DVTsJCS8qICMgb2YgRENUIGJsb2NrcyBwZXIgTUNVICovDQotICBpbnQgTUNVX21lbWJlcnNoaXBbRF9NQVhfQkxPQ0tTX0lOX01DVV07DQotICAvKiBNQ1VfbWVtYmVyc2hpcFtpXSBpcyBpbmRleCBpbiBjdXJfY29tcF9pbmZvIG9mIGNvbXBvbmVudCBvd25pbmcgKi8NCi0gIC8qIGkndGggYmxvY2sgaW4gYW4gTUNVICovDQotDQotICBpbnQgU3MsIFNlLCBBaCwgQWw7CQkvKiBwcm9ncmVzc2l2ZSBKUEVHIHBhcmFtZXRlcnMgZm9yIHNjYW4gKi8NCi0NCi0gIC8qIFRoaXMgZmllbGQgaXMgc2hhcmVkIGJldHdlZW4gZW50cm9weSBkZWNvZGVyIGFuZCBtYXJrZXIgcGFyc2VyLg0KLSAgICogSXQgaXMgZWl0aGVyIHplcm8gb3IgdGhlIGNvZGUgb2YgYSBKUEVHIG1hcmtlciB0aGF0IGhhcyBiZWVuDQotICAgKiByZWFkIGZyb20gdGhlIGRhdGEgc291cmNlLCBidXQgaGFzIG5vdCB5ZXQgYmVlbiBwcm9jZXNzZWQuDQotICAgKi8NCi0gIGludCB1bnJlYWRfbWFya2VyOw0KLQ0KLSAgLyoNCi0gICAqIExpbmtzIHRvIGRlY29tcHJlc3Npb24gc3Vib2JqZWN0cyAobWV0aG9kcywgcHJpdmF0ZSB2YXJpYWJsZXMgb2YgbW9kdWxlcykNCi0gICAqLw0KLSAgc3RydWN0IGpwZWdfZGVjb21wX21hc3RlciAqIG1hc3RlcjsNCi0gIHN0cnVjdCBqcGVnX2RfbWFpbl9jb250cm9sbGVyICogbWFpbjsNCi0gIHN0cnVjdCBqcGVnX2RfY29lZl9jb250cm9sbGVyICogY29lZjsNCi0gIHN0cnVjdCBqcGVnX2RfcG9zdF9jb250cm9sbGVyICogcG9zdDsNCi0gIHN0cnVjdCBqcGVnX2lucHV0X2NvbnRyb2xsZXIgKiBpbnB1dGN0bDsNCi0gIHN0cnVjdCBqcGVnX21hcmtlcl9yZWFkZXIgKiBtYXJrZXI7DQotICBzdHJ1Y3QganBlZ19lbnRyb3B5X2RlY29kZXIgKiBlbnRyb3B5Ow0KLSAgc3RydWN0IGpwZWdfaW52ZXJzZV9kY3QgKiBpZGN0Ow0KLSAgc3RydWN0IGpwZWdfdXBzYW1wbGVyICogdXBzYW1wbGU7DQotICBzdHJ1Y3QganBlZ19jb2xvcl9kZWNvbnZlcnRlciAqIGNjb252ZXJ0Ow0KLSAgc3RydWN0IGpwZWdfY29sb3JfcXVhbnRpemVyICogY3F1YW50aXplOw0KLX07DQotDQotDQotLyogIk9iamVjdCIgZGVjbGFyYXRpb25zIGZvciBKUEVHIG1vZHVsZXMgdGhhdCBtYXkgYmUgc3VwcGxpZWQgb3IgY2FsbGVkDQotICogZGlyZWN0bHkgYnkgdGhlIHN1cnJvdW5kaW5nIGFwcGxpY2F0aW9uLg0KLSAqIEFzIHdpdGggYWxsIG9iamVjdHMgaW4gdGhlIEpQRUcgbGlicmFyeSwgdGhlc2Ugc3RydWN0cyBvbmx5IGRlZmluZSB0aGUNCi0gKiBwdWJsaWNseSB2aXNpYmxlIG1ldGhvZHMgYW5kIHN0YXRlIHZhcmlhYmxlcyBvZiBhIG1vZHVsZS4gIEFkZGl0aW9uYWwNCi0gKiBwcml2YXRlIGZpZWxkcyBtYXkgZXhpc3QgYWZ0ZXIgdGhlIHB1YmxpYyBvbmVzLg0KLSAqLw0KLQ0KLQ0KLS8qIEVycm9yIGhhbmRsZXIgb2JqZWN0ICovDQotDQotc3RydWN0IGpwZWdfZXJyb3JfbWdyIHsNCi0gIC8qIEVycm9yIGV4aXQgaGFuZGxlcjogZG9lcyBub3QgcmV0dXJuIHRvIGNhbGxlciAqLw0KLSAgSk1FVEhPRCh2b2lkLCBlcnJvcl9leGl0LCAoal9jb21tb25fcHRyIGNpbmZvKSk7DQotICAvKiBDb25kaXRpb25hbGx5IGVtaXQgYSB0cmFjZSBvciB3YXJuaW5nIG1lc3NhZ2UgKi8NCi0gIEpNRVRIT0Qodm9pZCwgZW1pdF9tZXNzYWdlLCAoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgbXNnX2xldmVsKSk7DQotICAvKiBSb3V0aW5lIHRoYXQgYWN0dWFsbHkgb3V0cHV0cyBhIHRyYWNlIG9yIGVycm9yIG1lc3NhZ2UgKi8NCi0gIEpNRVRIT0Qodm9pZCwgb3V0cHV0X21lc3NhZ2UsIChqX2NvbW1vbl9wdHIgY2luZm8pKTsNCi0gIC8qIEZvcm1hdCBhIG1lc3NhZ2Ugc3RyaW5nIGZvciB0aGUgbW9zdCByZWNlbnQgSlBFRyBlcnJvciBvciBtZXNzYWdlICovDQotICBKTUVUSE9EKHZvaWQsIGZvcm1hdF9tZXNzYWdlLCAoal9jb21tb25fcHRyIGNpbmZvLCBjaGFyICogYnVmZmVyKSk7DQotI2RlZmluZSBKTVNHX0xFTkdUSF9NQVggIDIwMAkvKiByZWNvbW1lbmRlZCBzaXplIG9mIGZvcm1hdF9tZXNzYWdlIGJ1ZmZlciAqLw0KLSAgLyogUmVzZXQgZXJyb3Igc3RhdGUgdmFyaWFibGVzIGF0IHN0YXJ0IG9mIGEgbmV3IGltYWdlICovDQotICBKTUVUSE9EKHZvaWQsIHJlc2V0X2Vycm9yX21nciwgKGpfY29tbW9uX3B0ciBjaW5mbykpOw0KLSAgDQotICAvKiBUaGUgbWVzc2FnZSBJRCBjb2RlIGFuZCBhbnkgcGFyYW1ldGVycyBhcmUgc2F2ZWQgaGVyZS4NCi0gICAqIEEgbWVzc2FnZSBjYW4gaGF2ZSBvbmUgc3RyaW5nIHBhcmFtZXRlciBvciB1cCB0byA4IGludCBwYXJhbWV0ZXJzLg0KLSAgICovDQotICBpbnQgbXNnX2NvZGU7DQotI2RlZmluZSBKTVNHX1NUUl9QQVJNX01BWCAgODANCi0gIHVuaW9uIHsNCi0gICAgaW50IGlbOF07DQotICAgIGNoYXIgc1tKTVNHX1NUUl9QQVJNX01BWF07DQotICB9IG1zZ19wYXJtOw0KLSAgDQotICAvKiBTdGFuZGFyZCBzdGF0ZSB2YXJpYWJsZXMgZm9yIGVycm9yIGZhY2lsaXR5ICovDQotICANCi0gIGludCB0cmFjZV9sZXZlbDsJCS8qIG1heCBtc2dfbGV2ZWwgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCAqLw0KLSAgDQotICAvKiBGb3IgcmVjb3ZlcmFibGUgY29ycnVwdC1kYXRhIGVycm9ycywgd2UgZW1pdCBhIHdhcm5pbmcgbWVzc2FnZSwNCi0gICAqIGJ1dCBrZWVwIGdvaW5nIHVubGVzcyBlbWl0X21lc3NhZ2UgY2hvb3NlcyB0byBhYm9ydC4gIGVtaXRfbWVzc2FnZQ0KLSAgICogc2hvdWxkIGNvdW50IHdhcm5pbmdzIGluIG51bV93YXJuaW5ncy4gIFRoZSBzdXJyb3VuZGluZyBhcHBsaWNhdGlvbg0KLSAgICogY2FuIGNoZWNrIGZvciBiYWQgZGF0YSBieSBzZWVpbmcgaWYgbnVtX3dhcm5pbmdzIGlzIG5vbnplcm8gYXQgdGhlDQotICAgKiBlbmQgb2YgcHJvY2Vzc2luZy4NCi0gICAqLw0KLSAgbG9uZyBudW1fd2FybmluZ3M7CQkvKiBudW1iZXIgb2YgY29ycnVwdC1kYXRhIHdhcm5pbmdzICovDQotDQotICAvKiBUaGVzZSBmaWVsZHMgcG9pbnQgdG8gdGhlIHRhYmxlKHMpIG9mIGVycm9yIG1lc3NhZ2Ugc3RyaW5ncy4NCi0gICAqIEFuIGFwcGxpY2F0aW9uIGNhbiBjaGFuZ2UgdGhlIHRhYmxlIHBvaW50ZXIgdG8gc3dpdGNoIHRvIGEgZGlmZmVyZW50DQotICAgKiBtZXNzYWdlIGxpc3QgKHR5cGljYWxseSwgdG8gY2hhbmdlIHRoZSBsYW5ndWFnZSBpbiB3aGljaCBlcnJvcnMgYXJlDQotICAgKiByZXBvcnRlZCkuICBTb21lIGFwcGxpY2F0aW9ucyBtYXkgd2lzaCB0byBhZGQgYWRkaXRpb25hbCBlcnJvciBjb2Rlcw0KLSAgICogdGhhdCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIEpQRUcgbGlicmFyeSBlcnJvciBtZWNoYW5pc207IHRoZSBzZWNvbmQNCi0gICAqIHRhYmxlIHBvaW50ZXIgaXMgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLg0KLSAgICoNCi0gICAqIEZpcnN0IHRhYmxlIGluY2x1ZGVzIGFsbCBlcnJvcnMgZ2VuZXJhdGVkIGJ5IEpQRUcgbGlicmFyeSBpdHNlbGYuDQotICAgKiBFcnJvciBjb2RlIDAgaXMgcmVzZXJ2ZWQgZm9yIGEgIm5vIHN1Y2ggZXJyb3Igc3RyaW5nIiBtZXNzYWdlLg0KLSAgICovDQotICBjb25zdCBjaGFyICogY29uc3QgKiBqcGVnX21lc3NhZ2VfdGFibGU7IC8qIExpYnJhcnkgZXJyb3JzICovDQotICBpbnQgbGFzdF9qcGVnX21lc3NhZ2U7ICAgIC8qIFRhYmxlIGNvbnRhaW5zIHN0cmluZ3MgMC4ubGFzdF9qcGVnX21lc3NhZ2UgKi8NCi0gIC8qIFNlY29uZCB0YWJsZSBjYW4gYmUgYWRkZWQgYnkgYXBwbGljYXRpb24gKHNlZSBjanBlZy9kanBlZyBmb3IgZXhhbXBsZSkuDQotICAgKiBJdCBjb250YWlucyBzdHJpbmdzIG51bWJlcmVkIGZpcnN0X2FkZG9uX21lc3NhZ2UuLmxhc3RfYWRkb25fbWVzc2FnZS4NCi0gICAqLw0KLSAgY29uc3QgY2hhciAqIGNvbnN0ICogYWRkb25fbWVzc2FnZV90YWJsZTsgLyogTm9uLWxpYnJhcnkgZXJyb3JzICovDQotICBpbnQgZmlyc3RfYWRkb25fbWVzc2FnZTsJLyogY29kZSBmb3IgZmlyc3Qgc3RyaW5nIGluIGFkZG9uIHRhYmxlICovDQotICBpbnQgbGFzdF9hZGRvbl9tZXNzYWdlOwkvKiBjb2RlIGZvciBsYXN0IHN0cmluZyBpbiBhZGRvbiB0YWJsZSAqLw0KLX07DQotDQotDQotLyogUHJvZ3Jlc3MgbW9uaXRvciBvYmplY3QgKi8NCi0NCi1zdHJ1Y3QganBlZ19wcm9ncmVzc19tZ3Igew0KLSAgSk1FVEhPRCh2b2lkLCBwcm9ncmVzc19tb25pdG9yLCAoal9jb21tb25fcHRyIGNpbmZvKSk7DQotDQotICBsb25nIHBhc3NfY291bnRlcjsJCS8qIHdvcmsgdW5pdHMgY29tcGxldGVkIGluIHRoaXMgcGFzcyAqLw0KLSAgbG9uZyBwYXNzX2xpbWl0OwkJLyogdG90YWwgbnVtYmVyIG9mIHdvcmsgdW5pdHMgaW4gdGhpcyBwYXNzICovDQotICBpbnQgY29tcGxldGVkX3Bhc3NlczsJCS8qIHBhc3NlcyBjb21wbGV0ZWQgc28gZmFyICovDQotICBpbnQgdG90YWxfcGFzc2VzOwkJLyogdG90YWwgbnVtYmVyIG9mIHBhc3NlcyBleHBlY3RlZCAqLw0KLX07DQotDQotDQotLyogRGF0YSBkZXN0aW5hdGlvbiBvYmplY3QgZm9yIGNvbXByZXNzaW9uICovDQotDQotc3RydWN0IGpwZWdfZGVzdGluYXRpb25fbWdyIHsNCi0gIEpPQ1RFVCAqIG5leHRfb3V0cHV0X2J5dGU7CS8qID0+IG5leHQgYnl0ZSB0byB3cml0ZSBpbiBidWZmZXIgKi8NCi0gIHNpemVfdCBmcmVlX2luX2J1ZmZlcjsJLyogIyBvZiBieXRlIHNwYWNlcyByZW1haW5pbmcgaW4gYnVmZmVyICovDQotDQotICBKTUVUSE9EKHZvaWQsIGluaXRfZGVzdGluYXRpb24sIChqX2NvbXByZXNzX3B0ciBjaW5mbykpOw0KLSAgSk1FVEhPRChib29sZWFuLCBlbXB0eV9vdXRwdXRfYnVmZmVyLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi0gIEpNRVRIT0Qodm9pZCwgdGVybV9kZXN0aW5hdGlvbiwgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotfTsNCi0NCi0NCi0vKiBEYXRhIHNvdXJjZSBvYmplY3QgZm9yIGRlY29tcHJlc3Npb24gKi8NCi0NCi1zdHJ1Y3QganBlZ19zb3VyY2VfbWdyIHsNCi0gIGNvbnN0IEpPQ1RFVCAqIG5leHRfaW5wdXRfYnl0ZTsgLyogPT4gbmV4dCBieXRlIHRvIHJlYWQgZnJvbSBidWZmZXIgKi8NCi0gIHNpemVfdCBieXRlc19pbl9idWZmZXI7CS8qICMgb2YgYnl0ZXMgcmVtYWluaW5nIGluIGJ1ZmZlciAqLw0KLQ0KLSAgSk1FVEhPRCh2b2lkLCBpbml0X3NvdXJjZSwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi0gIEpNRVRIT0QoYm9vbGVhbiwgZmlsbF9pbnB1dF9idWZmZXIsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotICBKTUVUSE9EKHZvaWQsIHNraXBfaW5wdXRfZGF0YSwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGxvbmcgbnVtX2J5dGVzKSk7DQotICBKTUVUSE9EKGJvb2xlYW4sIHJlc3luY190b19yZXN0YXJ0LCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IGRlc2lyZWQpKTsNCi0gIEpNRVRIT0Qodm9pZCwgdGVybV9zb3VyY2UsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotfTsNCi0NCi0NCi0vKiBNZW1vcnkgbWFuYWdlciBvYmplY3QuDQotICogQWxsb2NhdGVzICJzbWFsbCIgb2JqZWN0cyAoYSBmZXcgSyB0b3RhbCksICJsYXJnZSIgb2JqZWN0cyAodGVucyBvZiBLKSwNCi0gKiBhbmQgInJlYWxseSBiaWciIG9iamVjdHMgKHZpcnR1YWwgYXJyYXlzIHdpdGggYmFja2luZyBzdG9yZSBpZiBuZWVkZWQpLg0KLSAqIFRoZSBtZW1vcnkgbWFuYWdlciBkb2VzIG5vdCBhbGxvdyBpbmRpdmlkdWFsIG9iamVjdHMgdG8gYmUgZnJlZWQ7IHJhdGhlciwNCi0gKiBlYWNoIGNyZWF0ZWQgb2JqZWN0IGlzIGFzc2lnbmVkIHRvIGEgcG9vbCwgYW5kIHdob2xlIHBvb2xzIGNhbiBiZSBmcmVlZA0KLSAqIGF0IG9uY2UuICBUaGlzIGlzIGZhc3RlciBhbmQgbW9yZSBjb252ZW5pZW50IHRoYW4gcmVtZW1iZXJpbmcgZXhhY3RseSB3aGF0DQotICogdG8gZnJlZSwgZXNwZWNpYWxseSB3aGVyZSBtYWxsb2MoKS9mcmVlKCkgYXJlIG5vdCB0b28gc3BlZWR5Lg0KLSAqIE5COiBhbGxvYyByb3V0aW5lcyBuZXZlciByZXR1cm4gTlVMTC4gIFRoZXkgZXhpdCB0byBlcnJvcl9leGl0IGlmIG5vdA0KLSAqIHN1Y2Nlc3NmdWwuDQotICovDQotDQotI2RlZmluZSBKUE9PTF9QRVJNQU5FTlQJMAkvKiBsYXN0cyB1bnRpbCBtYXN0ZXIgcmVjb3JkIGlzIGRlc3Ryb3llZCAqLw0KLSNkZWZpbmUgSlBPT0xfSU1BR0UJMQkvKiBsYXN0cyB1bnRpbCBkb25lIHdpdGggaW1hZ2UvZGF0YXN0cmVhbSAqLw0KLSNkZWZpbmUgSlBPT0xfTlVNUE9PTFMJMg0KLQ0KLXR5cGVkZWYgc3RydWN0IGp2aXJ0X3NhcnJheV9jb250cm9sICoganZpcnRfc2FycmF5X3B0cjsNCi10eXBlZGVmIHN0cnVjdCBqdmlydF9iYXJyYXlfY29udHJvbCAqIGp2aXJ0X2JhcnJheV9wdHI7DQotDQotDQotc3RydWN0IGpwZWdfbWVtb3J5X21nciB7DQotICAvKiBNZXRob2QgcG9pbnRlcnMgKi8NCi0gIEpNRVRIT0Qodm9pZCAqLCBhbGxvY19zbWFsbCwgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQsDQotCQkJCXNpemVfdCBzaXplb2ZvYmplY3QpKTsNCi0gIEpNRVRIT0Qodm9pZCAgKiwgYWxsb2NfbGFyZ2UsIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkLA0KLQkJCQkgICAgIHNpemVfdCBzaXplb2ZvYmplY3QpKTsNCi0gIEpNRVRIT0QoSlNBTVBBUlJBWSwgYWxsb2Nfc2FycmF5LCAoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgcG9vbF9pZCwNCi0JCQkJICAgICBKRElNRU5TSU9OIHNhbXBsZXNwZXJyb3csDQotCQkJCSAgICAgSkRJTUVOU0lPTiBudW1yb3dzKSk7DQotICBKTUVUSE9EKEpCTE9DS0FSUkFZLCBhbGxvY19iYXJyYXksIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkLA0KLQkJCQkgICAgICBKRElNRU5TSU9OIGJsb2Nrc3BlcnJvdywNCi0JCQkJICAgICAgSkRJTUVOU0lPTiBudW1yb3dzKSk7DQotICBKTUVUSE9EKGp2aXJ0X3NhcnJheV9wdHIsIHJlcXVlc3RfdmlydF9zYXJyYXksIChqX2NvbW1vbl9wdHIgY2luZm8sDQotCQkJCQkJICBpbnQgcG9vbF9pZCwNCi0JCQkJCQkgIGJvb2xlYW4gcHJlX3plcm8sDQotCQkJCQkJICBKRElNRU5TSU9OIHNhbXBsZXNwZXJyb3csDQotCQkJCQkJICBKRElNRU5TSU9OIG51bXJvd3MsDQotCQkJCQkJICBKRElNRU5TSU9OIG1heGFjY2VzcykpOw0KLSAgSk1FVEhPRChqdmlydF9iYXJyYXlfcHRyLCByZXF1ZXN0X3ZpcnRfYmFycmF5LCAoal9jb21tb25fcHRyIGNpbmZvLA0KLQkJCQkJCSAgaW50IHBvb2xfaWQsDQotCQkJCQkJICBib29sZWFuIHByZV96ZXJvLA0KLQkJCQkJCSAgSkRJTUVOU0lPTiBibG9ja3NwZXJyb3csDQotCQkJCQkJICBKRElNRU5TSU9OIG51bXJvd3MsDQotCQkJCQkJICBKRElNRU5TSU9OIG1heGFjY2VzcykpOw0KLSAgSk1FVEhPRCh2b2lkLCByZWFsaXplX3ZpcnRfYXJyYXlzLCAoal9jb21tb25fcHRyIGNpbmZvKSk7DQotICBKTUVUSE9EKEpTQU1QQVJSQVksIGFjY2Vzc192aXJ0X3NhcnJheSwgKGpfY29tbW9uX3B0ciBjaW5mbywNCi0JCQkJCSAgIGp2aXJ0X3NhcnJheV9wdHIgcHRyLA0KLQkJCQkJICAgSkRJTUVOU0lPTiBzdGFydF9yb3csDQotCQkJCQkgICBKRElNRU5TSU9OIG51bV9yb3dzLA0KLQkJCQkJICAgYm9vbGVhbiB3cml0YWJsZSkpOw0KLSAgSk1FVEhPRChKQkxPQ0tBUlJBWSwgYWNjZXNzX3ZpcnRfYmFycmF5LCAoal9jb21tb25fcHRyIGNpbmZvLA0KLQkJCQkJICAgIGp2aXJ0X2JhcnJheV9wdHIgcHRyLA0KLQkJCQkJICAgIEpESU1FTlNJT04gc3RhcnRfcm93LA0KLQkJCQkJICAgIEpESU1FTlNJT04gbnVtX3Jvd3MsDQotCQkJCQkgICAgYm9vbGVhbiB3cml0YWJsZSkpOw0KLSAgSk1FVEhPRCh2b2lkLCBmcmVlX3Bvb2wsIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkKSk7DQotICBKTUVUSE9EKHZvaWQsIHNlbGZfZGVzdHJ1Y3QsIChqX2NvbW1vbl9wdHIgY2luZm8pKTsNCi0NCi0gIC8qIExpbWl0IG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZvciB0aGlzIEpQRUcgb2JqZWN0LiAgKE5vdGUgdGhhdCB0aGlzIGlzDQotICAgKiBtZXJlbHkgYWR2aXNvcnksIG5vdCBhIGd1YXJhbnRlZWQgbWF4aW11bTsgaXQgb25seSBhZmZlY3RzIHRoZSBzcGFjZQ0KLSAgICogdXNlZCBmb3IgdmlydHVhbC1hcnJheSBidWZmZXJzLikgIE1heSBiZSBjaGFuZ2VkIGJ5IG91dGVyIGFwcGxpY2F0aW9uDQotICAgKiBhZnRlciBjcmVhdGluZyB0aGUgSlBFRyBvYmplY3QuDQotICAgKi8NCi0gIGxvbmcgbWF4X21lbW9yeV90b191c2U7DQotDQotICAvKiBNYXhpbXVtIGFsbG9jYXRpb24gcmVxdWVzdCBhY2NlcHRlZCBieSBhbGxvY19sYXJnZS4gKi8NCi0gIGxvbmcgbWF4X2FsbG9jX2NodW5rOw0KLX07DQotDQotDQotLyogUm91dGluZSBzaWduYXR1cmUgZm9yIGFwcGxpY2F0aW9uLXN1cHBsaWVkIG1hcmtlciBwcm9jZXNzaW5nIG1ldGhvZHMuDQotICogTmVlZCBub3QgcGFzcyBtYXJrZXIgY29kZSBzaW5jZSBpdCBpcyBzdG9yZWQgaW4gY2luZm8tPnVucmVhZF9tYXJrZXIuDQotICovDQotdHlwZWRlZiBKTUVUSE9EKGJvb2xlYW4sIGpwZWdfbWFya2VyX3BhcnNlcl9tZXRob2QsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotDQotDQotLyogRGVjbGFyYXRpb25zIGZvciByb3V0aW5lcyBjYWxsZWQgYnkgYXBwbGljYXRpb24uDQotICogVGhlIEpQUCBtYWNybyBoaWRlcyBwcm90b3R5cGUgcGFyYW1ldGVycyBmcm9tIGNvbXBpbGVycyB0aGF0IGNhbid0IGNvcGUuDQotICogTm90ZSBKUFAgcmVxdWlyZXMgZG91YmxlIHBhcmVudGhlc2VzLg0KLSAqLw0KLQ0KLSNpZmRlZiBIQVZFX1BST1RPVFlQRVMNCi0jZGVmaW5lIEpQUChhcmdsaXN0KQlhcmdsaXN0DQotI2Vsc2UNCi0jZGVmaW5lIEpQUChhcmdsaXN0KQkoKQ0KLSNlbmRpZg0KLQ0KLQ0KLS8qIFNob3J0IGZvcm1zIG9mIGV4dGVybmFsIG5hbWVzIGZvciBzeXN0ZW1zIHdpdGggYnJhaW4tZGFtYWdlZCBsaW5rZXJzLg0KLSAqIFdlIHNob3J0ZW4gZXh0ZXJuYWwgbmFtZXMgdG8gYmUgdW5pcXVlIGluIHRoZSBmaXJzdCBzaXggbGV0dGVycywgd2hpY2gNCi0gKiBpcyBnb29kIGVub3VnaCBmb3IgYWxsIGtub3duIHN5c3RlbXMuDQotICogKElmIHlvdXIgY29tcGlsZXIgaXRzZWxmIG5lZWRzIG5hbWVzIHRvIGJlIHVuaXF1ZSBpbiBsZXNzIHRoYW4gMTUgDQotICogY2hhcmFjdGVycywgeW91IGFyZSBvdXQgb2YgbHVjay4gIEdldCBhIGJldHRlciBjb21waWxlci4pDQotICovDQotDQotI2lmZGVmIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMNCi0jZGVmaW5lIGpwZWdfc3RkX2Vycm9yCQlqU3RkRXJyb3INCi0jZGVmaW5lIGpwZWdfQ3JlYXRlQ29tcHJlc3MJakNyZWFDb21wcmVzcw0KLSNkZWZpbmUganBlZ19DcmVhdGVEZWNvbXByZXNzCWpDcmVhRGVjb21wcmVzcw0KLSNkZWZpbmUganBlZ19kZXN0cm95X2NvbXByZXNzCWpEZXN0Q29tcHJlc3MNCi0jZGVmaW5lIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzCWpEZXN0RGVjb21wcmVzcw0KLSNkZWZpbmUganBlZ19zdGRpb19kZXN0CQlqU3RkRGVzdA0KLSNkZWZpbmUganBlZ19zdGRpb19zcmMJCWpTdGRTcmMNCi0jZGVmaW5lIGpwZWdfc2V0X2RlZmF1bHRzCWpTZXREZWZhdWx0cw0KLSNkZWZpbmUganBlZ19zZXRfY29sb3JzcGFjZQlqU2V0Q29sb3JzcGFjZQ0KLSNkZWZpbmUganBlZ19kZWZhdWx0X2NvbG9yc3BhY2UJakRlZkNvbG9yc3BhY2UNCi0jZGVmaW5lIGpwZWdfc2V0X3F1YWxpdHkJalNldFF1YWxpdHkNCi0jZGVmaW5lIGpwZWdfc2V0X2xpbmVhcl9xdWFsaXR5CWpTZXRMUXVhbGl0eQ0KLSNkZWZpbmUganBlZ19hZGRfcXVhbnRfdGFibGUJakFkZFF1YW50VGFibGUNCi0jZGVmaW5lIGpwZWdfcXVhbGl0eV9zY2FsaW5nCWpRdWFsaXR5U2NhbGluZw0KLSNkZWZpbmUganBlZ19zaW1wbGVfcHJvZ3Jlc3Npb24JalNpbVByb2dyZXNzDQotI2RlZmluZSBqcGVnX3N1cHByZXNzX3RhYmxlcwlqU3VwcHJlc3NUYWJsZXMNCi0jZGVmaW5lIGpwZWdfYWxsb2NfcXVhbnRfdGFibGUJakFsY1FUYWJsZQ0KLSNkZWZpbmUganBlZ19hbGxvY19odWZmX3RhYmxlCWpBbGNIVGFibGUNCi0jZGVmaW5lIGpwZWdfc3RhcnRfY29tcHJlc3MJalN0cnRDb21wcmVzcw0KLSNkZWZpbmUganBlZ193cml0ZV9zY2FubGluZXMJaldydFNjYW5saW5lcw0KLSNkZWZpbmUganBlZ19maW5pc2hfY29tcHJlc3MJakZpbkNvbXByZXNzDQotI2RlZmluZSBqcGVnX3dyaXRlX3Jhd19kYXRhCWpXcnRSYXdEYXRhDQotI2RlZmluZSBqcGVnX3dyaXRlX21hcmtlcglqV3J0TWFya2VyDQotI2RlZmluZSBqcGVnX3dyaXRlX21faGVhZGVyCWpXcnRNSGVhZGVyDQotI2RlZmluZSBqcGVnX3dyaXRlX21fYnl0ZQlqV3J0TUJ5dGUNCi0jZGVmaW5lIGpwZWdfd3JpdGVfdGFibGVzCWpXcnRUYWJsZXMNCi0jZGVmaW5lIGpwZWdfcmVhZF9oZWFkZXIJalJlYWRIZWFkZXINCi0jZGVmaW5lIGpwZWdfc3RhcnRfZGVjb21wcmVzcwlqU3RydERlY29tcHJlc3MNCi0jZGVmaW5lIGpwZWdfcmVhZF9zY2FubGluZXMJalJlYWRTY2FubGluZXMNCi0jZGVmaW5lIGpwZWdfZmluaXNoX2RlY29tcHJlc3MJakZpbkRlY29tcHJlc3MNCi0jZGVmaW5lIGpwZWdfcmVhZF9yYXdfZGF0YQlqUmVhZFJhd0RhdGENCi0jZGVmaW5lIGpwZWdfaGFzX211bHRpcGxlX3NjYW5zCWpIYXNNdWx0U2NuDQotI2RlZmluZSBqcGVnX3N0YXJ0X291dHB1dAlqU3RydE91dHB1dA0KLSNkZWZpbmUganBlZ19maW5pc2hfb3V0cHV0CWpGaW5PdXRwdXQNCi0jZGVmaW5lIGpwZWdfaW5wdXRfY29tcGxldGUJakluQ29tcGxldGUNCi0jZGVmaW5lIGpwZWdfbmV3X2NvbG9ybWFwCWpOZXdDTWFwDQotI2RlZmluZSBqcGVnX2NvbnN1bWVfaW5wdXQJakNvbnN1bWVJbnB1dA0KLSNkZWZpbmUganBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zCWpDYWxjRGltZW5zaW9ucw0KLSNkZWZpbmUganBlZ19zYXZlX21hcmtlcnMJalNhdmVNYXJrZXJzDQotI2RlZmluZSBqcGVnX3NldF9tYXJrZXJfcHJvY2Vzc29yCWpTZXRNYXJrZXINCi0jZGVmaW5lIGpwZWdfcmVhZF9jb2VmZmljaWVudHMJalJlYWRDb2Vmcw0KLSNkZWZpbmUganBlZ193cml0ZV9jb2VmZmljaWVudHMJaldydENvZWZzDQotI2RlZmluZSBqcGVnX2NvcHlfY3JpdGljYWxfcGFyYW1ldGVycwlqQ29weUNyaXQNCi0jZGVmaW5lIGpwZWdfYWJvcnRfY29tcHJlc3MJakFicnRDb21wcmVzcw0KLSNkZWZpbmUganBlZ19hYm9ydF9kZWNvbXByZXNzCWpBYnJ0RGVjb21wcmVzcw0KLSNkZWZpbmUganBlZ19hYm9ydAkJakFib3J0DQotI2RlZmluZSBqcGVnX2Rlc3Ryb3kJCWpEZXN0cm95DQotI2RlZmluZSBqcGVnX3Jlc3luY190b19yZXN0YXJ0CWpSZXN5bmNSZXN0YXJ0DQotI2VuZGlmIC8qIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMgKi8NCi0NCi0NCi0vKiBEZWZhdWx0IGVycm9yLW1hbmFnZW1lbnQgc2V0dXAgKi8NCi1FWFRFUk4oc3RydWN0IGpwZWdfZXJyb3JfbWdyICopIGpwZWdfc3RkX2Vycm9yDQotCUpQUCgoc3RydWN0IGpwZWdfZXJyb3JfbWdyICogZXJyKSk7DQotDQotLyogSW5pdGlhbGl6YXRpb24gb2YgSlBFRyBjb21wcmVzc2lvbiBvYmplY3RzLg0KLSAqIGpwZWdfY3JlYXRlX2NvbXByZXNzKCkgYW5kIGpwZWdfY3JlYXRlX2RlY29tcHJlc3MoKSBhcmUgdGhlIGV4cG9ydGVkDQotICogbmFtZXMgdGhhdCBhcHBsaWNhdGlvbnMgc2hvdWxkIGNhbGwuICBUaGVzZSBleHBhbmQgdG8gY2FsbHMgb24NCi0gKiBqcGVnX0NyZWF0ZUNvbXByZXNzIGFuZCBqcGVnX0NyZWF0ZURlY29tcHJlc3Mgd2l0aCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcGFzc2VkIGZvciB2ZXJzaW9uIG1pc21hdGNoIGNoZWNraW5nLg0KLSAqIE5COiB5b3UgbXVzdCBzZXQgdXAgdGhlIGVycm9yLW1hbmFnZXIgQkVGT1JFIGNhbGxpbmcganBlZ19jcmVhdGVfeHh4Lg0KLSAqLw0KLSNkZWZpbmUganBlZ19jcmVhdGVfY29tcHJlc3MoY2luZm8pIFwNCi0gICAganBlZ19DcmVhdGVDb21wcmVzcygoY2luZm8pLCBKUEVHX0xJQl9WRVJTSU9OLCBcDQotCQkJKHNpemVfdCkgc2l6ZW9mKHN0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCkpDQotI2RlZmluZSBqcGVnX2NyZWF0ZV9kZWNvbXByZXNzKGNpbmZvKSBcDQotICAgIGpwZWdfQ3JlYXRlRGVjb21wcmVzcygoY2luZm8pLCBKUEVHX0xJQl9WRVJTSU9OLCBcDQotCQkJICAoc2l6ZV90KSBzaXplb2Yoc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QpKQ0KLUVYVEVSTih2b2lkKSBqcGVnX0NyZWF0ZUNvbXByZXNzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sDQotCQkJCSAgICAgIGludCB2ZXJzaW9uLCBzaXplX3Qgc3RydWN0c2l6ZSkpOw0KLUVYVEVSTih2b2lkKSBqcGVnX0NyZWF0ZURlY29tcHJlc3MgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQkJaW50IHZlcnNpb24sIHNpemVfdCBzdHJ1Y3RzaXplKSk7DQotLyogRGVzdHJ1Y3Rpb24gb2YgSlBFRyBjb21wcmVzc2lvbiBvYmplY3RzICovDQotRVhURVJOKHZvaWQpIGpwZWdfZGVzdHJveV9jb21wcmVzcyBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotRVhURVJOKHZvaWQpIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLQ0KLSNpZiAwDQotLyogU3RhbmRhcmQgZGF0YSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG1hbmFnZXJzOiBzdGRpbyBzdHJlYW1zLiAqLw0KLS8qIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3Igb3BlbmluZyB0aGUgZmlsZSBiZWZvcmUgYW5kIGNsb3NpbmcgYWZ0ZXIuICovDQotRVhURVJOKHZvaWQpIGpwZWdfc3RkaW9fZGVzdCBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBGWFNZU19GSUxFICogb3V0ZmlsZSkpOw0KLUVYVEVSTih2b2lkKSBqcGVnX3N0ZGlvX3NyYyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEZYU1lTX0ZJTEUgKiBpbmZpbGUpKTsNCi0jZW5kaWYNCi0NCi0vKiBEZWZhdWx0IHBhcmFtZXRlciBzZXR1cCBmb3IgY29tcHJlc3Npb24gKi8NCi1FWFRFUk4odm9pZCkganBlZ19zZXRfZGVmYXVsdHMgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOw0KLS8qIENvbXByZXNzaW9uIHBhcmFtZXRlciBzZXR1cCBhaWRzICovDQotRVhURVJOKHZvaWQpIGpwZWdfc2V0X2NvbG9yc3BhY2UgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJICAgICAgSl9DT0xPUl9TUEFDRSBjb2xvcnNwYWNlKSk7DQotRVhURVJOKHZvaWQpIGpwZWdfZGVmYXVsdF9jb2xvcnNwYWNlIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4odm9pZCkganBlZ19zZXRfcXVhbGl0eSBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgcXVhbGl0eSwNCi0JCQkJICAgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkpOw0KLUVYVEVSTih2b2lkKSBqcGVnX3NldF9saW5lYXJfcXVhbGl0eSBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQkJICBpbnQgc2NhbGVfZmFjdG9yLA0KLQkJCQkJICBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKSk7DQotRVhURVJOKHZvaWQpIGpwZWdfYWRkX3F1YW50X3RhYmxlIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGludCB3aGljaF90YmwsDQotCQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKmJhc2ljX3RhYmxlLA0KLQkJCQkgICAgICAgaW50IHNjYWxlX2ZhY3RvciwNCi0JCQkJICAgICAgIGJvb2xlYW4gZm9yY2VfYmFzZWxpbmUpKTsNCi1FWFRFUk4oaW50KSBqcGVnX3F1YWxpdHlfc2NhbGluZyBKUFAoKGludCBxdWFsaXR5KSk7DQotRVhURVJOKHZvaWQpIGpwZWdfc2ltcGxlX3Byb2dyZXNzaW9uIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4odm9pZCkganBlZ19zdXBwcmVzc190YWJsZXMgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJICAgICAgIGJvb2xlYW4gc3VwcHJlc3MpKTsNCi1FWFRFUk4oSlFVQU5UX1RCTCAqKSBqcGVnX2FsbG9jX3F1YW50X3RhYmxlIEpQUCgoal9jb21tb25fcHRyIGNpbmZvKSk7DQotRVhURVJOKEpIVUZGX1RCTCAqKSBqcGVnX2FsbG9jX2h1ZmZfdGFibGUgSlBQKChqX2NvbW1vbl9wdHIgY2luZm8pKTsNCi0NCi0vKiBNYWluIGVudHJ5IHBvaW50cyBmb3IgY29tcHJlc3Npb24gKi8NCi1FWFRFUk4odm9pZCkganBlZ19zdGFydF9jb21wcmVzcyBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQkgICAgICBib29sZWFuIHdyaXRlX2FsbF90YWJsZXMpKTsNCi1FWFRFUk4oSkRJTUVOU0lPTikganBlZ193cml0ZV9zY2FubGluZXMgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJCSAgICAgSlNBTVBBUlJBWSBzY2FubGluZXMsDQotCQkJCQkgICAgIEpESU1FTlNJT04gbnVtX2xpbmVzKSk7DQotRVhURVJOKHZvaWQpIGpwZWdfZmluaXNoX2NvbXByZXNzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi0NCi0vKiBSZXBsYWNlcyBqcGVnX3dyaXRlX3NjYW5saW5lcyB3aGVuIHdyaXRpbmcgcmF3IGRvd25zYW1wbGVkIGRhdGEuICovDQotRVhURVJOKEpESU1FTlNJT04pIGpwZWdfd3JpdGVfcmF3X2RhdGEgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJCSAgICBKU0FNUElNQUdFIGRhdGEsDQotCQkJCQkgICAgSkRJTUVOU0lPTiBudW1fbGluZXMpKTsNCi0NCi0vKiBXcml0ZSBhIHNwZWNpYWwgbWFya2VyLiAgU2VlIGxpYmpwZWcuZG9jIGNvbmNlcm5pbmcgc2FmZSB1c2FnZS4gKi8NCi1FWFRFUk4odm9pZCkganBlZ193cml0ZV9tYXJrZXINCi0JSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IG1hcmtlciwNCi0JICAgICBjb25zdCBKT0NURVQgKiBkYXRhcHRyLCB1bnNpZ25lZCBpbnQgZGF0YWxlbikpOw0KLS8qIFNhbWUsIGJ1dCBwaWVjZW1lYWwuICovDQotRVhURVJOKHZvaWQpIGpwZWdfd3JpdGVfbV9oZWFkZXINCi0JSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IG1hcmtlciwgdW5zaWduZWQgaW50IGRhdGFsZW4pKTsNCi1FWFRFUk4odm9pZCkganBlZ193cml0ZV9tX2J5dGUNCi0JSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IHZhbCkpOw0KLQ0KLS8qIEFsdGVybmF0ZSBjb21wcmVzc2lvbiBmdW5jdGlvbjoganVzdCB3cml0ZSBhbiBhYmJyZXZpYXRlZCB0YWJsZSBmaWxlICovDQotRVhURVJOKHZvaWQpIGpwZWdfd3JpdGVfdGFibGVzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi0NCi0vKiBEZWNvbXByZXNzaW9uIHN0YXJ0dXA6IHJlYWQgc3RhcnQgb2YgSlBFRyBkYXRhc3RyZWFtIHRvIHNlZSB3aGF0J3MgdGhlcmUgKi8NCi1FWFRFUk4oaW50KSBqcGVnX3JlYWRfaGVhZGVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJICBib29sZWFuIHJlcXVpcmVfaW1hZ2UpKTsNCi0vKiBSZXR1cm4gdmFsdWUgaXMgb25lIG9mOiAqLw0KLSNkZWZpbmUgSlBFR19TVVNQRU5ERUQJCTAgLyogU3VzcGVuZGVkIGR1ZSB0byBsYWNrIG9mIGlucHV0IGRhdGEgKi8NCi0jZGVmaW5lIEpQRUdfSEVBREVSX09LCQkxIC8qIEZvdW5kIHZhbGlkIGltYWdlIGRhdGFzdHJlYW0gKi8NCi0jZGVmaW5lIEpQRUdfSEVBREVSX1RBQkxFU19PTkxZCTIgLyogRm91bmQgdmFsaWQgdGFibGUtc3BlY3Mtb25seSBkYXRhc3RyZWFtICovDQotLyogSWYgeW91IHBhc3MgcmVxdWlyZV9pbWFnZSA9IFRSVUUgKG5vcm1hbCBjYXNlKSwgeW91IG5lZWQgbm90IGNoZWNrIGZvcg0KLSAqIGEgVEFCTEVTX09OTFkgcmV0dXJuIGNvZGU7IGFuIGFiYnJldmlhdGVkIGZpbGUgd2lsbCBjYXVzZSBhbiBlcnJvciBleGl0Lg0KLSAqIEpQRUdfU1VTUEVOREVEIGlzIG9ubHkgcG9zc2libGUgaWYgeW91IHVzZSBhIGRhdGEgc291cmNlIG1vZHVsZSB0aGF0IGNhbg0KLSAqIGdpdmUgYSBzdXNwZW5zaW9uIHJldHVybiAodGhlIHN0ZGlvIHNvdXJjZSBtb2R1bGUgZG9lc24ndCkuDQotICovDQotDQotLyogTWFpbiBlbnRyeSBwb2ludHMgZm9yIGRlY29tcHJlc3Npb24gKi8NCi1FWFRFUk4oYm9vbGVhbikganBlZ19zdGFydF9kZWNvbXByZXNzIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLUVYVEVSTihKRElNRU5TSU9OKSBqcGVnX3JlYWRfc2NhbmxpbmVzIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJCSAgICBKU0FNUEFSUkFZIHNjYW5saW5lcywNCi0JCQkJCSAgICBKRElNRU5TSU9OIG1heF9saW5lcykpOw0KLUVYVEVSTihib29sZWFuKSBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLQ0KLS8qIFJlcGxhY2VzIGpwZWdfcmVhZF9zY2FubGluZXMgd2hlbiByZWFkaW5nIHJhdyBkb3duc2FtcGxlZCBkYXRhLiAqLw0KLUVYVEVSTihKRElNRU5TSU9OKSBqcGVnX3JlYWRfcmF3X2RhdGEgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQkJICAgSlNBTVBJTUFHRSBkYXRhLA0KLQkJCQkJICAgSkRJTUVOU0lPTiBtYXhfbGluZXMpKTsNCi0NCi0vKiBBZGRpdGlvbmFsIGVudHJ5IHBvaW50cyBmb3IgYnVmZmVyZWQtaW1hZ2UgbW9kZS4gKi8NCi1FWFRFUk4oYm9vbGVhbikganBlZ19oYXNfbXVsdGlwbGVfc2NhbnMgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotRVhURVJOKGJvb2xlYW4pIGpwZWdfc3RhcnRfb3V0cHV0IEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJICAgICAgIGludCBzY2FuX251bWJlcikpOw0KLUVYVEVSTihib29sZWFuKSBqcGVnX2ZpbmlzaF9vdXRwdXQgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotRVhURVJOKGJvb2xlYW4pIGpwZWdfaW5wdXRfY29tcGxldGUgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotRVhURVJOKHZvaWQpIGpwZWdfbmV3X2NvbG9ybWFwIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLUVYVEVSTihpbnQpIGpwZWdfY29uc3VtZV9pbnB1dCBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi0vKiBSZXR1cm4gdmFsdWUgaXMgb25lIG9mOiAqLw0KLS8qICNkZWZpbmUgSlBFR19TVVNQRU5ERUQJMCAgICBTdXNwZW5kZWQgZHVlIHRvIGxhY2sgb2YgaW5wdXQgZGF0YSAqLw0KLSNkZWZpbmUgSlBFR19SRUFDSEVEX1NPUwkxIC8qIFJlYWNoZWQgc3RhcnQgb2YgbmV3IHNjYW4gKi8NCi0jZGVmaW5lIEpQRUdfUkVBQ0hFRF9FT0kJMiAvKiBSZWFjaGVkIGVuZCBvZiBpbWFnZSAqLw0KLSNkZWZpbmUgSlBFR19ST1dfQ09NUExFVEVECTMgLyogQ29tcGxldGVkIG9uZSBpTUNVIHJvdyAqLw0KLSNkZWZpbmUgSlBFR19TQ0FOX0NPTVBMRVRFRAk0IC8qIENvbXBsZXRlZCBsYXN0IGlNQ1Ugcm93IG9mIGEgc2NhbiAqLw0KLQ0KLS8qIFByZWNhbGN1bGF0ZSBvdXRwdXQgZGltZW5zaW9ucyBmb3IgY3VycmVudCBkZWNvbXByZXNzaW9uIHBhcmFtZXRlcnMuICovDQotRVhURVJOKHZvaWQpIGpwZWdfY2FsY19vdXRwdXRfZGltZW5zaW9ucyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi0NCi0vKiBDb250cm9sIHNhdmluZyBvZiBDT00gYW5kIEFQUG4gbWFya2VycyBpbnRvIG1hcmtlcl9saXN0LiAqLw0KLUVYVEVSTih2b2lkKSBqcGVnX3NhdmVfbWFya2Vycw0KLQlKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGludCBtYXJrZXJfY29kZSwNCi0JICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoX2xpbWl0KSk7DQotDQotLyogSW5zdGFsbCBhIHNwZWNpYWwgcHJvY2Vzc2luZyBtZXRob2QgZm9yIENPTSBvciBBUFBuIG1hcmtlcnMuICovDQotRVhURVJOKHZvaWQpIGpwZWdfc2V0X21hcmtlcl9wcm9jZXNzb3INCi0JSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyX2NvZGUsDQotCSAgICAganBlZ19tYXJrZXJfcGFyc2VyX21ldGhvZCByb3V0aW5lKSk7DQotDQotLyogUmVhZCBvciB3cml0ZSByYXcgRENUIGNvZWZmaWNpZW50cyAtLS0gdXNlZnVsIGZvciBsb3NzbGVzcyB0cmFuc2NvZGluZy4gKi8NCi1FWFRFUk4oanZpcnRfYmFycmF5X3B0ciAqKSBqcGVnX3JlYWRfY29lZmZpY2llbnRzIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLUVYVEVSTih2b2lkKSBqcGVnX3dyaXRlX2NvZWZmaWNpZW50cyBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQkJICBqdmlydF9iYXJyYXlfcHRyICogY29lZl9hcnJheXMpKTsNCi1FWFRFUk4odm9pZCkganBlZ19jb3B5X2NyaXRpY2FsX3BhcmFtZXRlcnMgSlBQKChqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8sDQotCQkJCQkJal9jb21wcmVzc19wdHIgZHN0aW5mbykpOw0KLQ0KLS8qIElmIHlvdSBjaG9vc2UgdG8gYWJvcnQgY29tcHJlc3Npb24gb3IgZGVjb21wcmVzc2lvbiBiZWZvcmUgY29tcGxldGluZw0KLSAqIGpwZWdfZmluaXNoXyhkZSljb21wcmVzcywgdGhlbiB5b3UgbmVlZCB0byBjbGVhbiB1cCB0byByZWxlYXNlIG1lbW9yeSwNCi0gKiB0ZW1wb3JhcnkgZmlsZXMsIGV0Yy4gIFlvdSBjYW4ganVzdCBjYWxsIGpwZWdfZGVzdHJveV8oZGUpY29tcHJlc3MNCi0gKiBpZiB5b3UncmUgZG9uZSB3aXRoIHRoZSBKUEVHIG9iamVjdCwgYnV0IGlmIHlvdSB3YW50IHRvIGNsZWFuIGl0IHVwIGFuZA0KLSAqIHJldXNlIGl0LCBjYWxsIHRoaXM6DQotICovDQotRVhURVJOKHZvaWQpIGpwZWdfYWJvcnRfY29tcHJlc3MgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOw0KLUVYVEVSTih2b2lkKSBqcGVnX2Fib3J0X2RlY29tcHJlc3MgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotDQotLyogR2VuZXJpYyB2ZXJzaW9ucyBvZiBqcGVnX2Fib3J0IGFuZCBqcGVnX2Rlc3Ryb3kgdGhhdCB3b3JrIG9uIGVpdGhlcg0KLSAqIGZsYXZvciBvZiBKUEVHIG9iamVjdC4gIFRoZXNlIG1heSBiZSBtb3JlIGNvbnZlbmllbnQgaW4gc29tZSBwbGFjZXMuDQotICovDQotRVhURVJOKHZvaWQpIGpwZWdfYWJvcnQgSlBQKChqX2NvbW1vbl9wdHIgY2luZm8pKTsNCi1FWFRFUk4odm9pZCkganBlZ19kZXN0cm95IEpQUCgoal9jb21tb25fcHRyIGNpbmZvKSk7DQotDQotLyogRGVmYXVsdCByZXN0YXJ0LW1hcmtlci1yZXN5bmMgcHJvY2VkdXJlIGZvciB1c2UgYnkgZGF0YSBzb3VyY2UgbW9kdWxlcyAqLw0KLUVYVEVSTihib29sZWFuKSBqcGVnX3Jlc3luY190b19yZXN0YXJ0IEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJCSAgICBpbnQgZGVzaXJlZCkpOw0KLQ0KLQ0KLS8qIFRoZXNlIG1hcmtlciBjb2RlcyBhcmUgZXhwb3J0ZWQgc2luY2UgYXBwbGljYXRpb25zIGFuZCBkYXRhIHNvdXJjZSBtb2R1bGVzDQotICogYXJlIGxpa2VseSB0byB3YW50IHRvIHVzZSB0aGVtLg0KLSAqLw0KLQ0KLSNkZWZpbmUgSlBFR19SU1QwCTB4RDAJLyogUlNUMCBtYXJrZXIgY29kZSAqLw0KLSNkZWZpbmUgSlBFR19FT0kJMHhEOQkvKiBFT0kgbWFya2VyIGNvZGUgKi8NCi0jZGVmaW5lIEpQRUdfQVBQMAkweEUwCS8qIEFQUDAgbWFya2VyIGNvZGUgKi8NCi0jZGVmaW5lIEpQRUdfQ09NCTB4RkUJLyogQ09NIG1hcmtlciBjb2RlICovDQotDQotDQotLyogSWYgd2UgaGF2ZSBhIGJyYWluLWRhbWFnZWQgY29tcGlsZXIgdGhhdCBlbWl0cyB3YXJuaW5ncyAob3Igd29yc2UsIGVycm9ycykNCi0gKiBmb3Igc3RydWN0dXJlIGRlZmluaXRpb25zIHRoYXQgYXJlIG5ldmVyIGZpbGxlZCBpbiwga2VlcCBpdCBxdWlldCBieQ0KLSAqIHN1cHBseWluZyBkdW1teSBkZWZpbml0aW9ucyBmb3IgdGhlIHZhcmlvdXMgc3Vic3RydWN0dXJlcy4NCi0gKi8NCi0NCi0jaWZkZWYgSU5DT01QTEVURV9UWVBFU19CUk9LRU4NCi0jaWZuZGVmIEpQRUdfSU5URVJOQUxTCQkvKiB3aWxsIGJlIGRlZmluZWQgaW4ganBlZ2ludC5oICovDQotc3RydWN0IGp2aXJ0X3NhcnJheV9jb250cm9sIHsgbG9uZyBkdW1teTsgfTsNCi1zdHJ1Y3QganZpcnRfYmFycmF5X2NvbnRyb2wgeyBsb25nIGR1bW15OyB9Ow0KLXN0cnVjdCBqcGVnX2NvbXBfbWFzdGVyIHsgbG9uZyBkdW1teTsgfTsNCi1zdHJ1Y3QganBlZ19jX21haW5fY29udHJvbGxlciB7IGxvbmcgZHVtbXk7IH07DQotc3RydWN0IGpwZWdfY19wcmVwX2NvbnRyb2xsZXIgeyBsb25nIGR1bW15OyB9Ow0KLXN0cnVjdCBqcGVnX2NfY29lZl9jb250cm9sbGVyIHsgbG9uZyBkdW1teTsgfTsNCi1zdHJ1Y3QganBlZ19tYXJrZXJfd3JpdGVyIHsgbG9uZyBkdW1teTsgfTsNCi1zdHJ1Y3QganBlZ19jb2xvcl9jb252ZXJ0ZXIgeyBsb25nIGR1bW15OyB9Ow0KLXN0cnVjdCBqcGVnX2Rvd25zYW1wbGVyIHsgbG9uZyBkdW1teTsgfTsNCi1zdHJ1Y3QganBlZ19mb3J3YXJkX2RjdCB7IGxvbmcgZHVtbXk7IH07DQotc3RydWN0IGpwZWdfZW50cm9weV9lbmNvZGVyIHsgbG9uZyBkdW1teTsgfTsNCi1zdHJ1Y3QganBlZ19kZWNvbXBfbWFzdGVyIHsgbG9uZyBkdW1teTsgfTsNCi1zdHJ1Y3QganBlZ19kX21haW5fY29udHJvbGxlciB7IGxvbmcgZHVtbXk7IH07DQotc3RydWN0IGpwZWdfZF9jb2VmX2NvbnRyb2xsZXIgeyBsb25nIGR1bW15OyB9Ow0KLXN0cnVjdCBqcGVnX2RfcG9zdF9jb250cm9sbGVyIHsgbG9uZyBkdW1teTsgfTsNCi1zdHJ1Y3QganBlZ19pbnB1dF9jb250cm9sbGVyIHsgbG9uZyBkdW1teTsgfTsNCi1zdHJ1Y3QganBlZ19tYXJrZXJfcmVhZGVyIHsgbG9uZyBkdW1teTsgfTsNCi1zdHJ1Y3QganBlZ19lbnRyb3B5X2RlY29kZXIgeyBsb25nIGR1bW15OyB9Ow0KLXN0cnVjdCBqcGVnX2ludmVyc2VfZGN0IHsgbG9uZyBkdW1teTsgfTsNCi1zdHJ1Y3QganBlZ191cHNhbXBsZXIgeyBsb25nIGR1bW15OyB9Ow0KLXN0cnVjdCBqcGVnX2NvbG9yX2RlY29udmVydGVyIHsgbG9uZyBkdW1teTsgfTsNCi1zdHJ1Y3QganBlZ19jb2xvcl9xdWFudGl6ZXIgeyBsb25nIGR1bW15OyB9Ow0KLSNlbmRpZiAvKiBKUEVHX0lOVEVSTkFMUyAqLw0KLSNlbmRpZiAvKiBJTkNPTVBMRVRFX1RZUEVTX0JST0tFTiAqLw0KLQ0KLQ0KLS8qDQotICogVGhlIEpQRUcgbGlicmFyeSBtb2R1bGVzIGRlZmluZSBKUEVHX0lOVEVSTkFMUyBiZWZvcmUgaW5jbHVkaW5nIHRoaXMgZmlsZS4NCi0gKiBUaGUgaW50ZXJuYWwgc3RydWN0dXJlIGRlY2xhcmF0aW9ucyBhcmUgcmVhZCBvbmx5IHdoZW4gdGhhdCBpcyB0cnVlLg0KLSAqIEFwcGxpY2F0aW9ucyB1c2luZyB0aGUgbGlicmFyeSBzaG91bGQgbm90IGluY2x1ZGUganBlZ2ludC5oLCBidXQgbWF5IHdpc2gNCi0gKiB0byBpbmNsdWRlIGplcnJvci5oLg0KLSAqLw0KLQ0KLSNpZmRlZiBKUEVHX0lOVEVSTkFMUw0KLSNpbmNsdWRlICJqcGVnaW50LmgiCQkvKiBmZXRjaCBwcml2YXRlIGRlY2xhcmF0aW9ucyAqLw0KLSNpbmNsdWRlICJqZXJyb3IuaCIJCS8qIGZldGNoIGVycm9yIGNvZGVzIHRvbyAqLw0KLSNlbmRpZg0KLQ0KLSNlbmRpZiAvKiBKUEVHTElCX0ggKi8NCisvKgorICoganBlZ2xpYi5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTgsIFRob21hcyBHLiBMYW5lLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgYXBwbGljYXRpb24gaW50ZXJmYWNlIGZvciB0aGUgSlBFRyBsaWJyYXJ5LgorICogTW9zdCBhcHBsaWNhdGlvbnMgdXNpbmcgdGhlIGxpYnJhcnkgbmVlZCBvbmx5IGluY2x1ZGUgdGhpcyBmaWxlLAorICogYW5kIHBlcmhhcHMgamVycm9yLmggaWYgdGhleSB3YW50IHRvIGtub3cgdGhlIGV4YWN0IGVycm9yIGNvZGVzLgorICovCisKKyNpZm5kZWYgSlBFR0xJQl9ICisjZGVmaW5lIEpQRUdMSUJfSAorCisjZGVmaW5lIEZPWElUX1BSRUZJWChvcmlnTmFtZSkgIEZQREZBUElKUEVHXyMjb3JpZ05hbWUKKworI2RlZmluZSBqY29weV9ibG9ja19yb3cgRk9YSVRfUFJFRklYKGpjb3B5X2Jsb2NrX3JvdykKKyNkZWZpbmUgamNvcHlfc2FtcGxlX3Jvd3MgRk9YSVRfUFJFRklYKGpjb3B5X3NhbXBsZV9yb3dzKQorI2RlZmluZSBqZGl2X3JvdW5kX3VwIEZPWElUX1BSRUZJWChqZGl2X3JvdW5kX3VwKQorI2RlZmluZSBqaW5pdF8xcGFzc19xdWFudGl6ZXIgRk9YSVRfUFJFRklYKGppbml0XzFwYXNzX3F1YW50aXplcikKKyNkZWZpbmUgamluaXRfMnBhc3NfcXVhbnRpemVyIEZPWElUX1BSRUZJWChqaW5pdF8ycGFzc19xdWFudGl6ZXIpCisjZGVmaW5lIGppbml0X2NvbG9yX2RlY29udmVydGVyIEZPWElUX1BSRUZJWChqaW5pdF9jb2xvcl9kZWNvbnZlcnRlcikKKyNkZWZpbmUgamluaXRfZF9jb2VmX2NvbnRyb2xsZXIgRk9YSVRfUFJFRklYKGppbml0X2RfY29lZl9jb250cm9sbGVyKQorI2RlZmluZSBqaW5pdF9kX21haW5fY29udHJvbGxlciBGT1hJVF9QUkVGSVgoamluaXRfZF9tYWluX2NvbnRyb2xsZXIpCisjZGVmaW5lIGppbml0X2RfcG9zdF9jb250cm9sbGVyIEZPWElUX1BSRUZJWChqaW5pdF9kX3Bvc3RfY29udHJvbGxlcikKKyNkZWZpbmUgamluaXRfaHVmZl9kZWNvZGVyIEZPWElUX1BSRUZJWChqaW5pdF9odWZmX2RlY29kZXIpCisjZGVmaW5lIGppbml0X2lucHV0X2NvbnRyb2xsZXIgRk9YSVRfUFJFRklYKGppbml0X2lucHV0X2NvbnRyb2xsZXIpCisjZGVmaW5lIGppbml0X2ludmVyc2VfZGN0IEZPWElUX1BSRUZJWChqaW5pdF9pbnZlcnNlX2RjdCkKKyNkZWZpbmUgamluaXRfbWFya2VyX3JlYWRlciBGT1hJVF9QUkVGSVgoamluaXRfbWFya2VyX3JlYWRlcikKKyNkZWZpbmUgamluaXRfbWFzdGVyX2RlY29tcHJlc3MgRk9YSVRfUFJFRklYKGppbml0X21hc3Rlcl9kZWNvbXByZXNzKQorI2RlZmluZSBqaW5pdF9tZW1vcnlfbWdyIEZPWElUX1BSRUZJWChqaW5pdF9tZW1vcnlfbWdyKQorI2RlZmluZSBqaW5pdF9tZXJnZWRfdXBzYW1wbGVyIEZPWElUX1BSRUZJWChqaW5pdF9tZXJnZWRfdXBzYW1wbGVyKQorI2RlZmluZSBqaW5pdF9waHVmZl9kZWNvZGVyIEZPWElUX1BSRUZJWChqaW5pdF9waHVmZl9kZWNvZGVyKQorI2RlZmluZSBqaW5pdF91cHNhbXBsZXIgRk9YSVRfUFJFRklYKGppbml0X3Vwc2FtcGxlcikKKyNkZWZpbmUganBlZ19DcmVhdGVEZWNvbXByZXNzIEZPWElUX1BSRUZJWChqcGVnX0NyZWF0ZURlY29tcHJlc3MpCisjZGVmaW5lIGpwZWdfYWJvcnQgRk9YSVRfUFJFRklYKGpwZWdfYWJvcnQpCisjZGVmaW5lIGpwZWdfYWJvcnRfZGVjb21wcmVzcyBGT1hJVF9QUkVGSVgoanBlZ19hYm9ydF9kZWNvbXByZXNzKQorI2RlZmluZSBqcGVnX2FsbG9jX2h1ZmZfdGFibGUgRk9YSVRfUFJFRklYKGpwZWdfYWxsb2NfaHVmZl90YWJsZSkKKyNkZWZpbmUganBlZ19hbGxvY19xdWFudF90YWJsZSBGT1hJVF9QUkVGSVgoanBlZ19hbGxvY19xdWFudF90YWJsZSkKKyNkZWZpbmUganBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zIEZPWElUX1BSRUZJWChqcGVnX2NhbGNfb3V0cHV0X2RpbWVuc2lvbnMpCisjZGVmaW5lIGpwZWdfY29uc3VtZV9pbnB1dCBGT1hJVF9QUkVGSVgoanBlZ19jb25zdW1lX2lucHV0KQorI2RlZmluZSBqcGVnX2Rlc3Ryb3kgRk9YSVRfUFJFRklYKGpwZWdfZGVzdHJveSkKKyNkZWZpbmUganBlZ19kZXN0cm95X2RlY29tcHJlc3MgRk9YSVRfUFJFRklYKGpwZWdfZGVzdHJveV9kZWNvbXByZXNzKQorI2RlZmluZSBqcGVnX2ZpbGxfYml0X2J1ZmZlciBGT1hJVF9QUkVGSVgoanBlZ19maWxsX2JpdF9idWZmZXIpCisjZGVmaW5lIGpwZWdfZmluaXNoX2RlY29tcHJlc3MgRk9YSVRfUFJFRklYKGpwZWdfZmluaXNoX2RlY29tcHJlc3MpCisjZGVmaW5lIGpwZWdfZmluaXNoX291dHB1dCBGT1hJVF9QUkVGSVgoanBlZ19maW5pc2hfb3V0cHV0KQorI2RlZmluZSBqcGVnX2ZyZWVfbGFyZ2UgRk9YSVRfUFJFRklYKGpwZWdfZnJlZV9sYXJnZSkKKyNkZWZpbmUganBlZ19mcmVlX3NtYWxsIEZPWElUX1BSRUZJWChqcGVnX2ZyZWVfc21hbGwpCisjZGVmaW5lIGpwZWdfZ2V0X2xhcmdlIEZPWElUX1BSRUZJWChqcGVnX2dldF9sYXJnZSkKKyNkZWZpbmUganBlZ19nZXRfc21hbGwgRk9YSVRfUFJFRklYKGpwZWdfZ2V0X3NtYWxsKQorI2RlZmluZSBqcGVnX2hhc19tdWx0aXBsZV9zY2FucyBGT1hJVF9QUkVGSVgoanBlZ19oYXNfbXVsdGlwbGVfc2NhbnMpCisjZGVmaW5lIGpwZWdfaHVmZl9kZWNvZGUgRk9YSVRfUFJFRklYKGpwZWdfaHVmZl9kZWNvZGUpCisjZGVmaW5lIGpwZWdfaWRjdF8xeDEgRk9YSVRfUFJFRklYKGpwZWdfaWRjdF8xeDEpCisjZGVmaW5lIGpwZWdfaWRjdF8yeDIgRk9YSVRfUFJFRklYKGpwZWdfaWRjdF8yeDIpCisjZGVmaW5lIGpwZWdfaWRjdF80eDQgRk9YSVRfUFJFRklYKGpwZWdfaWRjdF80eDQpCisjZGVmaW5lIGpwZWdfaWRjdF9mbG9hdCBGT1hJVF9QUkVGSVgoanBlZ19pZGN0X2Zsb2F0KQorI2RlZmluZSBqcGVnX2lkY3RfaWZhc3QgRk9YSVRfUFJFRklYKGpwZWdfaWRjdF9pZmFzdCkKKyNkZWZpbmUganBlZ19pZGN0X2lzbG93IEZPWElUX1BSRUZJWChqcGVnX2lkY3RfaXNsb3cpCisjZGVmaW5lIGpwZWdfaW5wdXRfY29tcGxldGUgRk9YSVRfUFJFRklYKGpwZWdfaW5wdXRfY29tcGxldGUpCisjZGVmaW5lIGpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsIEZPWElUX1BSRUZJWChqcGVnX21ha2VfZF9kZXJpdmVkX3RibCkKKyNkZWZpbmUganBlZ19tZW1fYXZhaWxhYmxlIEZPWElUX1BSRUZJWChqcGVnX21lbV9hdmFpbGFibGUpCisjZGVmaW5lIGpwZWdfbWVtX2luaXQgRk9YSVRfUFJFRklYKGpwZWdfbWVtX2luaXQpCisjZGVmaW5lIGpwZWdfbWVtX3Rlcm0gRk9YSVRfUFJFRklYKGpwZWdfbWVtX3Rlcm0pCisjZGVmaW5lIGpwZWdfbmF0dXJhbF9vcmRlciBGT1hJVF9QUkVGSVgoanBlZ19uYXR1cmFsX29yZGVyKQorI2RlZmluZSBqcGVnX25ld19jb2xvcm1hcCBGT1hJVF9QUkVGSVgoanBlZ19uZXdfY29sb3JtYXApCisjZGVmaW5lIGpwZWdfb3Blbl9iYWNraW5nX3N0b3JlIEZPWElUX1BSRUZJWChqcGVnX29wZW5fYmFja2luZ19zdG9yZSkKKyNkZWZpbmUganBlZ19yZWFkX2NvZWZmaWNpZW50cyBGT1hJVF9QUkVGSVgoanBlZ19yZWFkX2NvZWZmaWNpZW50cykKKyNkZWZpbmUganBlZ19yZWFkX2hlYWRlciBGT1hJVF9QUkVGSVgoanBlZ19yZWFkX2hlYWRlcikKKyNkZWZpbmUganBlZ19yZWFkX3Jhd19kYXRhIEZPWElUX1BSRUZJWChqcGVnX3JlYWRfcmF3X2RhdGEpCisjZGVmaW5lIGpwZWdfcmVhZF9zY2FubGluZXMgRk9YSVRfUFJFRklYKGpwZWdfcmVhZF9zY2FubGluZXMpCisjZGVmaW5lIGpwZWdfcmVzeW5jX3RvX3Jlc3RhcnQgRk9YSVRfUFJFRklYKGpwZWdfcmVzeW5jX3RvX3Jlc3RhcnQpCisjZGVmaW5lIGpwZWdfc2F2ZV9tYXJrZXJzIEZPWElUX1BSRUZJWChqcGVnX3NhdmVfbWFya2VycykKKyNkZWZpbmUganBlZ19zZXRfbWFya2VyX3Byb2Nlc3NvciBGT1hJVF9QUkVGSVgoanBlZ19zZXRfbWFya2VyX3Byb2Nlc3NvcikKKyNkZWZpbmUganBlZ19zdGFydF9kZWNvbXByZXNzIEZPWElUX1BSRUZJWChqcGVnX3N0YXJ0X2RlY29tcHJlc3MpCisjZGVmaW5lIGpwZWdfc3RhcnRfb3V0cHV0IEZPWElUX1BSRUZJWChqcGVnX3N0YXJ0X291dHB1dCkKKyNkZWZpbmUganBlZ19zdGRfZXJyb3IgRk9YSVRfUFJFRklYKGpwZWdfc3RkX2Vycm9yKQorI2RlZmluZSBqcGVnX3N0ZF9tZXNzYWdlX3RhYmxlIEZPWElUX1BSRUZJWChqcGVnX3N0ZF9tZXNzYWdlX3RhYmxlKQorI2RlZmluZSBqcGVnX3N0ZGlvX3NyYyBGT1hJVF9QUkVGSVgoanBlZ19zdGRpb19zcmMpCisjZGVmaW5lIGpyb3VuZF91cCBGT1hJVF9QUkVGSVgoanJvdW5kX3VwKQorI2RlZmluZSBqemVyb19mYXIgRk9YSVRfUFJFRklYKGp6ZXJvX2ZhcikKKworIC8qCisgKiBGaXJzdCB3ZSBpbmNsdWRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgcmVjb3JkIGhvdyB0aGlzCisgKiBpbnN0YWxsYXRpb24gb2YgdGhlIEpQRUcgbGlicmFyeSBpcyBzZXQgdXAuICBqY29uZmlnLmggY2FuIGJlCisgKiBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBmb3IgbWFueSBzeXN0ZW1zLiAgam1vcmVjZmcuaCBjb250YWlucworICogbWFudWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1vc3QgcGVvcGxlIG5lZWQgbm90IHdvcnJ5IGFib3V0LgorICovCisKKyNpZm5kZWYgSkNPTkZJR19JTkNMVURFRAkvKiBpbiBjYXNlIGppbmNsdWRlLmggYWxyZWFkeSBkaWQgKi8KKyNpbmNsdWRlICJqY29uZmlnLmgiCQkvKiB3aWRlbHkgdXNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgKi8KKyNlbmRpZgorI2luY2x1ZGUgImptb3JlY2ZnLmgiCQkvKiBzZWxkb20gY2hhbmdlZCBvcHRpb25zICovCisKKworLyogVmVyc2lvbiBJRCBmb3IgdGhlIEpQRUcgbGlicmFyeS4KKyAqIE1pZ2h0IGJlIHVzZWZ1bCBmb3IgdGVzdHMgbGlrZSAiI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNjAiLgorICovCisKKyNkZWZpbmUgSlBFR19MSUJfVkVSU0lPTiAgNjIJLyogVmVyc2lvbiA2YiAqLworCisKKy8qIFZhcmlvdXMgY29uc3RhbnRzIGRldGVybWluaW5nIHRoZSBzaXplcyBvZiB0aGluZ3MuCisgKiBBbGwgb2YgdGhlc2UgYXJlIHNwZWNpZmllZCBieSB0aGUgSlBFRyBzdGFuZGFyZCwgc28gZG9uJ3QgY2hhbmdlIHRoZW0KKyAqIGlmIHlvdSB3YW50IHRvIGJlIGNvbXBhdGlibGUuCisgKi8KKworI2RlZmluZSBEQ1RTSVpFCQkgICAgOAkvKiBUaGUgYmFzaWMgRENUIGJsb2NrIGlzIDh4OCBzYW1wbGVzICovCisjZGVmaW5lIERDVFNJWkUyCSAgICA2NAkvKiBEQ1RTSVpFIHNxdWFyZWQ7ICMgb2YgZWxlbWVudHMgaW4gYSBibG9jayAqLworI2RlZmluZSBOVU1fUVVBTlRfVEJMUyAgICAgIDQJLyogUXVhbnRpemF0aW9uIHRhYmxlcyBhcmUgbnVtYmVyZWQgMC4uMyAqLworI2RlZmluZSBOVU1fSFVGRl9UQkxTICAgICAgIDQJLyogSHVmZm1hbiB0YWJsZXMgYXJlIG51bWJlcmVkIDAuLjMgKi8KKyNkZWZpbmUgTlVNX0FSSVRIX1RCTFMgICAgICAxNgkvKiBBcml0aC1jb2RpbmcgdGFibGVzIGFyZSBudW1iZXJlZCAwLi4xNSAqLworI2RlZmluZSBNQVhfQ09NUFNfSU5fU0NBTiAgIDQJLyogSlBFRyBsaW1pdCBvbiAjIG9mIGNvbXBvbmVudHMgaW4gb25lIHNjYW4gKi8KKyNkZWZpbmUgTUFYX1NBTVBfRkFDVE9SICAgICA0CS8qIEpQRUcgbGltaXQgb24gc2FtcGxpbmcgZmFjdG9ycyAqLworLyogVW5mb3J0dW5hdGVseSwgc29tZSBib3pvIGF0IEFkb2JlIHNhdyBubyByZWFzb24gdG8gYmUgYm91bmQgYnkgdGhlIHN0YW5kYXJkOworICogdGhlIFBvc3RTY3JpcHQgRENUIGZpbHRlciBjYW4gZW1pdCBmaWxlcyB3aXRoIG1hbnkgbW9yZSB0aGFuIDEwIGJsb2Nrcy9NQ1UuCisgKiBJZiB5b3UgaGFwcGVuIHRvIHJ1biBhY3Jvc3Mgc3VjaCBhIGZpbGUsIHlvdSBjYW4gdXAgRF9NQVhfQkxPQ0tTX0lOX01DVQorICogdG8gaGFuZGxlIGl0LiAgV2UgZXZlbiBsZXQgeW91IGRvIHRoaXMgZnJvbSB0aGUgamNvbmZpZy5oIGZpbGUuICBIb3dldmVyLAorICogd2Ugc3Ryb25nbHkgZGlzY291cmFnZSBjaGFuZ2luZyBDX01BWF9CTE9DS1NfSU5fTUNVOyBqdXN0IGJlY2F1c2UgQWRvYmUKKyAqIHNvbWV0aW1lcyBlbWl0cyBub25jb21wbGlhbnQgZmlsZXMgZG9lc24ndCBtZWFuIHlvdSBzaG91bGQgdG9vLgorICovCisjZGVmaW5lIENfTUFYX0JMT0NLU19JTl9NQ1UgICAxMCAvKiBjb21wcmVzc29yJ3MgbGltaXQgb24gYmxvY2tzIHBlciBNQ1UgKi8KKyNpZm5kZWYgRF9NQVhfQkxPQ0tTX0lOX01DVQorI2RlZmluZSBEX01BWF9CTE9DS1NfSU5fTUNVICAgMTAgLyogZGVjb21wcmVzc29yJ3MgbGltaXQgb24gYmxvY2tzIHBlciBNQ1UgKi8KKyNlbmRpZgorCisKKy8qIERhdGEgc3RydWN0dXJlcyBmb3IgaW1hZ2VzIChhcnJheXMgb2Ygc2FtcGxlcyBhbmQgb2YgRENUIGNvZWZmaWNpZW50cykuCisgKiBPbiA4MHg4NiBtYWNoaW5lcywgdGhlIGltYWdlIGFycmF5cyBhcmUgdG9vIGJpZyBmb3IgbmVhciBwb2ludGVycywKKyAqIGJ1dCB0aGUgcG9pbnRlciBhcnJheXMgY2FuIGZpdCBpbiBuZWFyIG1lbW9yeS4KKyAqLworCit0eXBlZGVmIEpTQU1QTEUgICpKU0FNUFJPVzsJLyogcHRyIHRvIG9uZSBpbWFnZSByb3cgb2YgcGl4ZWwgc2FtcGxlcy4gKi8KK3R5cGVkZWYgSlNBTVBST1cgKkpTQU1QQVJSQVk7CS8qIHB0ciB0byBzb21lIHJvd3MgKGEgMi1EIHNhbXBsZSBhcnJheSkgKi8KK3R5cGVkZWYgSlNBTVBBUlJBWSAqSlNBTVBJTUFHRTsJLyogYSAzLUQgc2FtcGxlIGFycmF5OiB0b3AgaW5kZXggaXMgY29sb3IgKi8KKwordHlwZWRlZiBKQ09FRiBKQkxPQ0tbRENUU0laRTJdOwkvKiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzICovCit0eXBlZGVmIEpCTE9DSyAgKkpCTE9DS1JPVzsJLyogcG9pbnRlciB0byBvbmUgcm93IG9mIGNvZWZmaWNpZW50IGJsb2NrcyAqLwordHlwZWRlZiBKQkxPQ0tST1cgKkpCTE9DS0FSUkFZOwkJLyogYSAyLUQgYXJyYXkgb2YgY29lZmZpY2llbnQgYmxvY2tzICovCit0eXBlZGVmIEpCTE9DS0FSUkFZICpKQkxPQ0tJTUFHRTsJLyogYSAzLUQgYXJyYXkgb2YgY29lZmZpY2llbnQgYmxvY2tzICovCisKK3R5cGVkZWYgSkNPRUYgICpKQ09FRlBUUjsJLyogdXNlZnVsIGluIGEgY291cGxlIG9mIHBsYWNlcyAqLworCisKKy8qIFR5cGVzIGZvciBKUEVHIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgYW5kIHdvcmtpbmcgdGFibGVzLiAqLworCisKKy8qIERDVCBjb2VmZmljaWVudCBxdWFudGl6YXRpb24gdGFibGVzLiAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qIFRoaXMgYXJyYXkgZ2l2ZXMgdGhlIGNvZWZmaWNpZW50IHF1YW50aXplcnMgaW4gbmF0dXJhbCBhcnJheSBvcmRlcgorICAgKiAobm90IHRoZSB6aWd6YWcgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgc3RvcmVkIGluIGEgSlBFRyBEUVQgbWFya2VyKS4KKyAgICogQ0FVVElPTjogSUpHIHZlcnNpb25zIHByaW9yIHRvIHY2YSBrZXB0IHRoaXMgYXJyYXkgaW4gemlnemFnIG9yZGVyLgorICAgKi8KKyAgVUlOVDE2IHF1YW50dmFsW0RDVFNJWkUyXTsJLyogcXVhbnRpemF0aW9uIHN0ZXAgZm9yIGVhY2ggY29lZmZpY2llbnQgKi8KKyAgLyogVGhpcyBmaWVsZCBpcyB1c2VkIG9ubHkgZHVyaW5nIGNvbXByZXNzaW9uLiAgSXQncyBpbml0aWFsaXplZCBGQUxTRSB3aGVuCisgICAqIHRoZSB0YWJsZSBpcyBjcmVhdGVkLCBhbmQgc2V0IFRSVUUgd2hlbiBpdCdzIGJlZW4gb3V0cHV0IHRvIHRoZSBmaWxlLgorICAgKiBZb3UgY291bGQgc3VwcHJlc3Mgb3V0cHV0IG9mIGEgdGFibGUgYnkgc2V0dGluZyB0aGlzIHRvIFRSVUUuCisgICAqIChTZWUganBlZ19zdXBwcmVzc190YWJsZXMgZm9yIGFuIGV4YW1wbGUuKQorICAgKi8KKyAgYm9vbGVhbiBzZW50X3RhYmxlOwkJLyogVFJVRSB3aGVuIHRhYmxlIGhhcyBiZWVuIG91dHB1dCAqLworfSBKUVVBTlRfVEJMOworCisKKy8qIEh1ZmZtYW4gY29kaW5nIHRhYmxlcy4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAvKiBUaGVzZSB0d28gZmllbGRzIGRpcmVjdGx5IHJlcHJlc2VudCB0aGUgY29udGVudHMgb2YgYSBKUEVHIERIVCBtYXJrZXIgKi8KKyAgVUlOVDggYml0c1sxN107CQkvKiBiaXRzW2tdID0gIyBvZiBzeW1ib2xzIHdpdGggY29kZXMgb2YgKi8KKwkJCQkvKiBsZW5ndGggayBiaXRzOyBiaXRzWzBdIGlzIHVudXNlZCAqLworICBVSU5UOCBodWZmdmFsWzI1Nl07CQkvKiBUaGUgc3ltYm9scywgaW4gb3JkZXIgb2YgaW5jciBjb2RlIGxlbmd0aCAqLworICAvKiBUaGlzIGZpZWxkIGlzIHVzZWQgb25seSBkdXJpbmcgY29tcHJlc3Npb24uICBJdCdzIGluaXRpYWxpemVkIEZBTFNFIHdoZW4KKyAgICogdGhlIHRhYmxlIGlzIGNyZWF0ZWQsIGFuZCBzZXQgVFJVRSB3aGVuIGl0J3MgYmVlbiBvdXRwdXQgdG8gdGhlIGZpbGUuCisgICAqIFlvdSBjb3VsZCBzdXBwcmVzcyBvdXRwdXQgb2YgYSB0YWJsZSBieSBzZXR0aW5nIHRoaXMgdG8gVFJVRS4KKyAgICogKFNlZSBqcGVnX3N1cHByZXNzX3RhYmxlcyBmb3IgYW4gZXhhbXBsZS4pCisgICAqLworICBib29sZWFuIHNlbnRfdGFibGU7CQkvKiBUUlVFIHdoZW4gdGFibGUgaGFzIGJlZW4gb3V0cHV0ICovCit9IEpIVUZGX1RCTDsKKworCisvKiBCYXNpYyBpbmZvIGFib3V0IG9uZSBjb21wb25lbnQgKGNvbG9yIGNoYW5uZWwpLiAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qIFRoZXNlIHZhbHVlcyBhcmUgZml4ZWQgb3ZlciB0aGUgd2hvbGUgaW1hZ2UuICovCisgIC8qIEZvciBjb21wcmVzc2lvbiwgdGhleSBtdXN0IGJlIHN1cHBsaWVkIGJ5IHBhcmFtZXRlciBzZXR1cDsgKi8KKyAgLyogZm9yIGRlY29tcHJlc3Npb24sIHRoZXkgYXJlIHJlYWQgZnJvbSB0aGUgU09GIG1hcmtlci4gKi8KKyAgaW50IGNvbXBvbmVudF9pZDsJCS8qIGlkZW50aWZpZXIgZm9yIHRoaXMgY29tcG9uZW50ICgwLi4yNTUpICovCisgIGludCBjb21wb25lbnRfaW5kZXg7CQkvKiBpdHMgaW5kZXggaW4gU09GIG9yIGNpbmZvLT5jb21wX2luZm9bXSAqLworICBpbnQgaF9zYW1wX2ZhY3RvcjsJCS8qIGhvcml6b250YWwgc2FtcGxpbmcgZmFjdG9yICgxLi40KSAqLworICBpbnQgdl9zYW1wX2ZhY3RvcjsJCS8qIHZlcnRpY2FsIHNhbXBsaW5nIGZhY3RvciAoMS4uNCkgKi8KKyAgaW50IHF1YW50X3RibF9ubzsJCS8qIHF1YW50aXphdGlvbiB0YWJsZSBzZWxlY3RvciAoMC4uMykgKi8KKyAgLyogVGhlc2UgdmFsdWVzIG1heSB2YXJ5IGJldHdlZW4gc2NhbnMuICovCisgIC8qIEZvciBjb21wcmVzc2lvbiwgdGhleSBtdXN0IGJlIHN1cHBsaWVkIGJ5IHBhcmFtZXRlciBzZXR1cDsgKi8KKyAgLyogZm9yIGRlY29tcHJlc3Npb24sIHRoZXkgYXJlIHJlYWQgZnJvbSB0aGUgU09TIG1hcmtlci4gKi8KKyAgLyogVGhlIGRlY29tcHJlc3NvciBvdXRwdXQgc2lkZSBtYXkgbm90IHVzZSB0aGVzZSB2YXJpYWJsZXMuICovCisgIGludCBkY190Ymxfbm87CQkvKiBEQyBlbnRyb3B5IHRhYmxlIHNlbGVjdG9yICgwLi4zKSAqLworICBpbnQgYWNfdGJsX25vOwkJLyogQUMgZW50cm9weSB0YWJsZSBzZWxlY3RvciAoMC4uMykgKi8KKyAgCisgIC8qIFJlbWFpbmluZyBmaWVsZHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgcHJpdmF0ZSBieSBhcHBsaWNhdGlvbnMuICovCisgIAorICAvKiBUaGVzZSB2YWx1ZXMgYXJlIGNvbXB1dGVkIGR1cmluZyBjb21wcmVzc2lvbiBvciBkZWNvbXByZXNzaW9uIHN0YXJ0dXA6ICovCisgIC8qIENvbXBvbmVudCdzIHNpemUgaW4gRENUIGJsb2Nrcy4KKyAgICogQW55IGR1bW15IGJsb2NrcyBhZGRlZCB0byBjb21wbGV0ZSBhbiBNQ1UgYXJlIG5vdCBjb3VudGVkOyB0aGVyZWZvcmUKKyAgICogdGhlc2UgdmFsdWVzIGRvIG5vdCBkZXBlbmQgb24gd2hldGhlciBhIHNjYW4gaXMgaW50ZXJsZWF2ZWQgb3Igbm90LgorICAgKi8KKyAgSkRJTUVOU0lPTiB3aWR0aF9pbl9ibG9ja3M7CisgIEpESU1FTlNJT04gaGVpZ2h0X2luX2Jsb2NrczsKKyAgLyogU2l6ZSBvZiBhIERDVCBibG9jayBpbiBzYW1wbGVzLiAgQWx3YXlzIERDVFNJWkUgZm9yIGNvbXByZXNzaW9uLgorICAgKiBGb3IgZGVjb21wcmVzc2lvbiB0aGlzIGlzIHRoZSBzaXplIG9mIHRoZSBvdXRwdXQgZnJvbSBvbmUgRENUIGJsb2NrLAorICAgKiByZWZsZWN0aW5nIGFueSBzY2FsaW5nIHdlIGNob29zZSB0byBhcHBseSBkdXJpbmcgdGhlIElEQ1Qgc3RlcC4KKyAgICogVmFsdWVzIG9mIDEsMiw0LDggYXJlIGxpa2VseSB0byBiZSBzdXBwb3J0ZWQuICBOb3RlIHRoYXQgZGlmZmVyZW50CisgICAqIGNvbXBvbmVudHMgbWF5IHJlY2VpdmUgZGlmZmVyZW50IElEQ1Qgc2NhbGluZ3MuCisgICAqLworICBpbnQgRENUX3NjYWxlZF9zaXplOworICAvKiBUaGUgZG93bnNhbXBsZWQgZGltZW5zaW9ucyBhcmUgdGhlIGNvbXBvbmVudCdzIGFjdHVhbCwgdW5wYWRkZWQgbnVtYmVyCisgICAqIG9mIHNhbXBsZXMgYXQgdGhlIG1haW4gYnVmZmVyIChwcmVwcm9jZXNzaW5nL2NvbXByZXNzaW9uIGludGVyZmFjZSksIHRodXMKKyAgICogZG93bnNhbXBsZWRfd2lkdGggPSBjZWlsKGltYWdlX3dpZHRoICogSGkvSG1heCkKKyAgICogYW5kIHNpbWlsYXJseSBmb3IgaGVpZ2h0LiAgRm9yIGRlY29tcHJlc3Npb24sIElEQ1Qgc2NhbGluZyBpcyBpbmNsdWRlZCwgc28KKyAgICogZG93bnNhbXBsZWRfd2lkdGggPSBjZWlsKGltYWdlX3dpZHRoICogSGkvSG1heCAqIERDVF9zY2FsZWRfc2l6ZS9EQ1RTSVpFKQorICAgKi8KKyAgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aDsJIC8qIGFjdHVhbCB3aWR0aCBpbiBzYW1wbGVzICovCisgIEpESU1FTlNJT04gZG93bnNhbXBsZWRfaGVpZ2h0OyAvKiBhY3R1YWwgaGVpZ2h0IGluIHNhbXBsZXMgKi8KKyAgLyogVGhpcyBmbGFnIGlzIHVzZWQgb25seSBmb3IgZGVjb21wcmVzc2lvbi4gIEluIGNhc2VzIHdoZXJlIHNvbWUgb2YgdGhlCisgICAqIGNvbXBvbmVudHMgd2lsbCBiZSBpZ25vcmVkIChlZyBncmF5c2NhbGUgb3V0cHV0IGZyb20gWUNiQ3IgaW1hZ2UpLAorICAgKiB3ZSBjYW4gc2tpcCBtb3N0IGNvbXB1dGF0aW9ucyBmb3IgdGhlIHVudXNlZCBjb21wb25lbnRzLgorICAgKi8KKyAgYm9vbGVhbiBjb21wb25lbnRfbmVlZGVkOwkvKiBkbyB3ZSBuZWVkIHRoZSB2YWx1ZSBvZiB0aGlzIGNvbXBvbmVudD8gKi8KKworICAvKiBUaGVzZSB2YWx1ZXMgYXJlIGNvbXB1dGVkIGJlZm9yZSBzdGFydGluZyBhIHNjYW4gb2YgdGhlIGNvbXBvbmVudC4gKi8KKyAgLyogVGhlIGRlY29tcHJlc3NvciBvdXRwdXQgc2lkZSBtYXkgbm90IHVzZSB0aGVzZSB2YXJpYWJsZXMuICovCisgIGludCBNQ1Vfd2lkdGg7CQkvKiBudW1iZXIgb2YgYmxvY2tzIHBlciBNQ1UsIGhvcml6b250YWxseSAqLworICBpbnQgTUNVX2hlaWdodDsJCS8qIG51bWJlciBvZiBibG9ja3MgcGVyIE1DVSwgdmVydGljYWxseSAqLworICBpbnQgTUNVX2Jsb2NrczsJCS8qIE1DVV93aWR0aCAqIE1DVV9oZWlnaHQgKi8KKyAgaW50IE1DVV9zYW1wbGVfd2lkdGg7CQkvKiBNQ1Ugd2lkdGggaW4gc2FtcGxlcywgTUNVX3dpZHRoKkRDVF9zY2FsZWRfc2l6ZSAqLworICBpbnQgbGFzdF9jb2xfd2lkdGg7CQkvKiAjIG9mIG5vbi1kdW1teSBibG9ja3MgYWNyb3NzIGluIGxhc3QgTUNVICovCisgIGludCBsYXN0X3Jvd19oZWlnaHQ7CQkvKiAjIG9mIG5vbi1kdW1teSBibG9ja3MgZG93biBpbiBsYXN0IE1DVSAqLworCisgIC8qIFNhdmVkIHF1YW50aXphdGlvbiB0YWJsZSBmb3IgY29tcG9uZW50OyBOVUxMIGlmIG5vbmUgeWV0IHNhdmVkLgorICAgKiBTZWUgamRpbnB1dC5jIGNvbW1lbnRzIGFib3V0IHRoZSBuZWVkIGZvciB0aGlzIGluZm9ybWF0aW9uLgorICAgKiBUaGlzIGZpZWxkIGlzIGN1cnJlbnRseSB1c2VkIG9ubHkgZm9yIGRlY29tcHJlc3Npb24uCisgICAqLworICBKUVVBTlRfVEJMICogcXVhbnRfdGFibGU7CisKKyAgLyogUHJpdmF0ZSBwZXItY29tcG9uZW50IHN0b3JhZ2UgZm9yIERDVCBvciBJRENUIHN1YnN5c3RlbS4gKi8KKyAgdm9pZCAqIGRjdF90YWJsZTsKK30ganBlZ19jb21wb25lbnRfaW5mbzsKKworCisvKiBUaGUgc2NyaXB0IGZvciBlbmNvZGluZyBhIG11bHRpcGxlLXNjYW4gZmlsZSBpcyBhbiBhcnJheSBvZiB0aGVzZTogKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBpbnQgY29tcHNfaW5fc2NhbjsJCS8qIG51bWJlciBvZiBjb21wb25lbnRzIGVuY29kZWQgaW4gdGhpcyBzY2FuICovCisgIGludCBjb21wb25lbnRfaW5kZXhbTUFYX0NPTVBTX0lOX1NDQU5dOyAvKiB0aGVpciBTT0YvY29tcF9pbmZvW10gaW5kZXhlcyAqLworICBpbnQgU3MsIFNlOwkJCS8qIHByb2dyZXNzaXZlIEpQRUcgc3BlY3RyYWwgc2VsZWN0aW9uIHBhcm1zICovCisgIGludCBBaCwgQWw7CQkJLyogcHJvZ3Jlc3NpdmUgSlBFRyBzdWNjZXNzaXZlIGFwcHJveC4gcGFybXMgKi8KK30ganBlZ19zY2FuX2luZm87CisKKy8qIFRoZSBkZWNvbXByZXNzb3IgY2FuIHNhdmUgQVBQbiBhbmQgQ09NIG1hcmtlcnMgaW4gYSBsaXN0IG9mIHRoZXNlOiAqLworCit0eXBlZGVmIHN0cnVjdCBqcGVnX21hcmtlcl9zdHJ1Y3QgICoganBlZ19zYXZlZF9tYXJrZXJfcHRyOworCitzdHJ1Y3QganBlZ19tYXJrZXJfc3RydWN0IHsKKyAganBlZ19zYXZlZF9tYXJrZXJfcHRyIG5leHQ7CS8qIG5leHQgaW4gbGlzdCwgb3IgTlVMTCAqLworICBVSU5UOCBtYXJrZXI7CQkJLyogbWFya2VyIGNvZGU6IEpQRUdfQ09NLCBvciBKUEVHX0FQUDArbiAqLworICB1bnNpZ25lZCBpbnQgb3JpZ2luYWxfbGVuZ3RoOwkvKiAjIGJ5dGVzIG9mIGRhdGEgaW4gdGhlIGZpbGUgKi8KKyAgdW5zaWduZWQgaW50IGRhdGFfbGVuZ3RoOwkvKiAjIGJ5dGVzIG9mIGRhdGEgc2F2ZWQgYXQgZGF0YVtdICovCisgIEpPQ1RFVCAgKiBkYXRhOwkJLyogdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSBtYXJrZXIgKi8KKyAgLyogdGhlIG1hcmtlciBsZW5ndGggd29yZCBpcyBub3QgY291bnRlZCBpbiBkYXRhX2xlbmd0aCBvciBvcmlnaW5hbF9sZW5ndGggKi8KK307CisKKy8qIEtub3duIGNvbG9yIHNwYWNlcy4gKi8KKwordHlwZWRlZiBlbnVtIHsKKwlKQ1NfVU5LTk9XTiwJCS8qIGVycm9yL3Vuc3BlY2lmaWVkICovCisJSkNTX0dSQVlTQ0FMRSwJCS8qIG1vbm9jaHJvbWUgKi8KKwlKQ1NfUkdCLAkJLyogcmVkL2dyZWVuL2JsdWUgKi8KKwlKQ1NfWUNiQ3IsCQkvKiBZL0NiL0NyIChhbHNvIGtub3duIGFzIFlVVikgKi8KKwlKQ1NfQ01ZSywJCS8qIEMvTS9ZL0sgKi8KKwlKQ1NfWUNDSwkJLyogWS9DYi9Dci9LICovCit9IEpfQ09MT1JfU1BBQ0U7CisKKy8qIERDVC9JRENUIGFsZ29yaXRobSBvcHRpb25zLiAqLworCit0eXBlZGVmIGVudW0geworCUpEQ1RfSVNMT1csCQkvKiBzbG93IGJ1dCBhY2N1cmF0ZSBpbnRlZ2VyIGFsZ29yaXRobSAqLworCUpEQ1RfSUZBU1QsCQkvKiBmYXN0ZXIsIGxlc3MgYWNjdXJhdGUgaW50ZWdlciBtZXRob2QgKi8KKwlKRENUX0ZMT0FUCQkvKiBmbG9hdGluZy1wb2ludDogYWNjdXJhdGUsIGZhc3Qgb24gZmFzdCBIVyAqLworfSBKX0RDVF9NRVRIT0Q7CisKKyNpZm5kZWYgSkRDVF9ERUZBVUxUCQkvKiBtYXkgYmUgb3ZlcnJpZGRlbiBpbiBqY29uZmlnLmggKi8KKyNkZWZpbmUgSkRDVF9ERUZBVUxUICBKRENUX0lTTE9XCisjZW5kaWYKKyNpZm5kZWYgSkRDVF9GQVNURVNUCQkvKiBtYXkgYmUgb3ZlcnJpZGRlbiBpbiBqY29uZmlnLmggKi8KKyNkZWZpbmUgSkRDVF9GQVNURVNUICBKRENUX0lGQVNUCisjZW5kaWYKKworLyogRGl0aGVyaW5nIG9wdGlvbnMgZm9yIGRlY29tcHJlc3Npb24uICovCisKK3R5cGVkZWYgZW51bSB7CisJSkRJVEhFUl9OT05FLAkJLyogbm8gZGl0aGVyaW5nICovCisJSkRJVEhFUl9PUkRFUkVELAkvKiBzaW1wbGUgb3JkZXJlZCBkaXRoZXIgKi8KKwlKRElUSEVSX0ZTCQkvKiBGbG95ZC1TdGVpbmJlcmcgZXJyb3IgZGlmZnVzaW9uIGRpdGhlciAqLworfSBKX0RJVEhFUl9NT0RFOworCisKKy8qIENvbW1vbiBmaWVsZHMgYmV0d2VlbiBKUEVHIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIG1hc3RlciBzdHJ1Y3RzLiAqLworCisjZGVmaW5lIGpwZWdfY29tbW9uX2ZpZWxkcyBcCisgIHN0cnVjdCBqcGVnX2Vycm9yX21nciAqIGVycjsJLyogRXJyb3IgaGFuZGxlciBtb2R1bGUgKi9cCisgIHN0cnVjdCBqcGVnX21lbW9yeV9tZ3IgKiBtZW07CS8qIE1lbW9yeSBtYW5hZ2VyIG1vZHVsZSAqL1wKKyAgc3RydWN0IGpwZWdfcHJvZ3Jlc3NfbWdyICogcHJvZ3Jlc3M7IC8qIFByb2dyZXNzIG1vbml0b3IsIG9yIE5VTEwgaWYgbm9uZSAqL1wKKyAgdm9pZCAqIGNsaWVudF9kYXRhOwkJLyogQXZhaWxhYmxlIGZvciB1c2UgYnkgYXBwbGljYXRpb24gKi9cCisgIGJvb2xlYW4gaXNfZGVjb21wcmVzc29yOwkvKiBTbyBjb21tb24gY29kZSBjYW4gdGVsbCB3aGljaCBpcyB3aGljaCAqL1wKKyAgaW50IGdsb2JhbF9zdGF0ZQkJLyogRm9yIGNoZWNraW5nIGNhbGwgc2VxdWVuY2UgdmFsaWRpdHkgKi8KKworLyogUm91dGluZXMgdGhhdCBhcmUgdG8gYmUgdXNlZCBieSBib3RoIGhhbHZlcyBvZiB0aGUgbGlicmFyeSBhcmUgZGVjbGFyZWQKKyAqIHRvIHJlY2VpdmUgYSBwb2ludGVyIHRvIHRoaXMgc3RydWN0dXJlLiAgVGhlcmUgYXJlIG5vIGFjdHVhbCBpbnN0YW5jZXMgb2YKKyAqIGpwZWdfY29tbW9uX3N0cnVjdCwgb25seSBvZiBqcGVnX2NvbXByZXNzX3N0cnVjdCBhbmQganBlZ19kZWNvbXByZXNzX3N0cnVjdC4KKyAqLworc3RydWN0IGpwZWdfY29tbW9uX3N0cnVjdCB7CisgIGpwZWdfY29tbW9uX2ZpZWxkczsJCS8qIEZpZWxkcyBjb21tb24gdG8gYm90aCBtYXN0ZXIgc3RydWN0IHR5cGVzICovCisgIC8qIEFkZGl0aW9uYWwgZmllbGRzIGZvbGxvdyBpbiBhbiBhY3R1YWwganBlZ19jb21wcmVzc19zdHJ1Y3Qgb3IKKyAgICoganBlZ19kZWNvbXByZXNzX3N0cnVjdC4gIEFsbCB0aHJlZSBzdHJ1Y3RzIG11c3QgYWdyZWUgb24gdGhlc2UKKyAgICogaW5pdGlhbCBmaWVsZHMhICAoVGhpcyB3b3VsZCBiZSBhIGxvdCBjbGVhbmVyIGluIEMrKy4pCisgICAqLworfTsKKwordHlwZWRlZiBzdHJ1Y3QganBlZ19jb21tb25fc3RydWN0ICogal9jb21tb25fcHRyOwordHlwZWRlZiBzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3QgKiBqX2NvbXByZXNzX3B0cjsKK3R5cGVkZWYgc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QgKiBqX2RlY29tcHJlc3NfcHRyOworCisKKy8qIE1hc3RlciByZWNvcmQgZm9yIGEgY29tcHJlc3Npb24gaW5zdGFuY2UgKi8KKworc3RydWN0IGpwZWdfY29tcHJlc3Nfc3RydWN0IHsKKyAganBlZ19jb21tb25fZmllbGRzOwkJLyogRmllbGRzIHNoYXJlZCB3aXRoIGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QgKi8KKworICAvKiBEZXN0aW5hdGlvbiBmb3IgY29tcHJlc3NlZCBkYXRhICovCisgIHN0cnVjdCBqcGVnX2Rlc3RpbmF0aW9uX21nciAqIGRlc3Q7CisKKyAgLyogRGVzY3JpcHRpb24gb2Ygc291cmNlIGltYWdlIC0tLSB0aGVzZSBmaWVsZHMgbXVzdCBiZSBmaWxsZWQgaW4gYnkKKyAgICogb3V0ZXIgYXBwbGljYXRpb24gYmVmb3JlIHN0YXJ0aW5nIGNvbXByZXNzaW9uLiAgaW5fY29sb3Jfc3BhY2UgbXVzdAorICAgKiBiZSBjb3JyZWN0IGJlZm9yZSB5b3UgY2FuIGV2ZW4gY2FsbCBqcGVnX3NldF9kZWZhdWx0cygpLgorICAgKi8KKworICBKRElNRU5TSU9OIGltYWdlX3dpZHRoOwkvKiBpbnB1dCBpbWFnZSB3aWR0aCAqLworICBKRElNRU5TSU9OIGltYWdlX2hlaWdodDsJLyogaW5wdXQgaW1hZ2UgaGVpZ2h0ICovCisgIGludCBpbnB1dF9jb21wb25lbnRzOwkJLyogIyBvZiBjb2xvciBjb21wb25lbnRzIGluIGlucHV0IGltYWdlICovCisgIEpfQ09MT1JfU1BBQ0UgaW5fY29sb3Jfc3BhY2U7CS8qIGNvbG9yc3BhY2Ugb2YgaW5wdXQgaW1hZ2UgKi8KKworICBkb3VibGUgaW5wdXRfZ2FtbWE7CQkvKiBpbWFnZSBnYW1tYSBvZiBpbnB1dCBpbWFnZSAqLworCisgIC8qIENvbXByZXNzaW9uIHBhcmFtZXRlcnMgLS0tIHRoZXNlIGZpZWxkcyBtdXN0IGJlIHNldCBiZWZvcmUgY2FsbGluZworICAgKiBqcGVnX3N0YXJ0X2NvbXByZXNzKCkuICBXZSByZWNvbW1lbmQgY2FsbGluZyBqcGVnX3NldF9kZWZhdWx0cygpIHRvCisgICAqIGluaXRpYWxpemUgZXZlcnl0aGluZyB0byByZWFzb25hYmxlIGRlZmF1bHRzLCB0aGVuIGNoYW5naW5nIGFueXRoaW5nCisgICAqIHRoZSBhcHBsaWNhdGlvbiBzcGVjaWZpY2FsbHkgd2FudHMgdG8gY2hhbmdlLiAgVGhhdCB3YXkgeW91IHdvbid0IGdldAorICAgKiBidXJudCB3aGVuIG5ldyBwYXJhbWV0ZXJzIGFyZSBhZGRlZC4gIEFsc28gbm90ZSB0aGF0IHRoZXJlIGFyZSBzZXZlcmFsCisgICAqIGhlbHBlciByb3V0aW5lcyB0byBzaW1wbGlmeSBjaGFuZ2luZyBwYXJhbWV0ZXJzLgorICAgKi8KKworICBpbnQgZGF0YV9wcmVjaXNpb247CQkvKiBiaXRzIG9mIHByZWNpc2lvbiBpbiBpbWFnZSBkYXRhICovCisKKyAgaW50IG51bV9jb21wb25lbnRzOwkJLyogIyBvZiBjb2xvciBjb21wb25lbnRzIGluIEpQRUcgaW1hZ2UgKi8KKyAgSl9DT0xPUl9TUEFDRSBqcGVnX2NvbG9yX3NwYWNlOyAvKiBjb2xvcnNwYWNlIG9mIEpQRUcgaW1hZ2UgKi8KKworICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcF9pbmZvOworICAvKiBjb21wX2luZm9baV0gZGVzY3JpYmVzIGNvbXBvbmVudCB0aGF0IGFwcGVhcnMgaSd0aCBpbiBTT0YgKi8KKyAgCisgIEpRVUFOVF9UQkwgKiBxdWFudF90YmxfcHRyc1tOVU1fUVVBTlRfVEJMU107CisgIC8qIHB0cnMgdG8gY29lZmZpY2llbnQgcXVhbnRpemF0aW9uIHRhYmxlcywgb3IgTlVMTCBpZiBub3QgZGVmaW5lZCAqLworICAKKyAgSkhVRkZfVEJMICogZGNfaHVmZl90YmxfcHRyc1tOVU1fSFVGRl9UQkxTXTsKKyAgSkhVRkZfVEJMICogYWNfaHVmZl90YmxfcHRyc1tOVU1fSFVGRl9UQkxTXTsKKyAgLyogcHRycyB0byBIdWZmbWFuIGNvZGluZyB0YWJsZXMsIG9yIE5VTEwgaWYgbm90IGRlZmluZWQgKi8KKyAgCisgIFVJTlQ4IGFyaXRoX2RjX0xbTlVNX0FSSVRIX1RCTFNdOyAvKiBMIHZhbHVlcyBmb3IgREMgYXJpdGgtY29kaW5nIHRhYmxlcyAqLworICBVSU5UOCBhcml0aF9kY19VW05VTV9BUklUSF9UQkxTXTsgLyogVSB2YWx1ZXMgZm9yIERDIGFyaXRoLWNvZGluZyB0YWJsZXMgKi8KKyAgVUlOVDggYXJpdGhfYWNfS1tOVU1fQVJJVEhfVEJMU107IC8qIEt4IHZhbHVlcyBmb3IgQUMgYXJpdGgtY29kaW5nIHRhYmxlcyAqLworCisgIGludCBudW1fc2NhbnM7CQkvKiAjIG9mIGVudHJpZXMgaW4gc2Nhbl9pbmZvIGFycmF5ICovCisgIGNvbnN0IGpwZWdfc2Nhbl9pbmZvICogc2Nhbl9pbmZvOyAvKiBzY3JpcHQgZm9yIG11bHRpLXNjYW4gZmlsZSwgb3IgTlVMTCAqLworICAvKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBzY2FuX2luZm8gaXMgTlVMTCwgd2hpY2ggY2F1c2VzIGEgc2luZ2xlLXNjYW4KKyAgICogc2VxdWVudGlhbCBKUEVHIGZpbGUgdG8gYmUgZW1pdHRlZC4gIFRvIGNyZWF0ZSBhIG11bHRpLXNjYW4gZmlsZSwKKyAgICogc2V0IG51bV9zY2FucyBhbmQgc2Nhbl9pbmZvIHRvIHBvaW50IHRvIGFuIGFycmF5IG9mIHNjYW4gZGVmaW5pdGlvbnMuCisgICAqLworCisgIGJvb2xlYW4gcmF3X2RhdGFfaW47CQkvKiBUUlVFPWNhbGxlciBzdXBwbGllcyBkb3duc2FtcGxlZCBkYXRhICovCisgIGJvb2xlYW4gYXJpdGhfY29kZTsJCS8qIFRSVUU9YXJpdGhtZXRpYyBjb2RpbmcsIEZBTFNFPUh1ZmZtYW4gKi8KKyAgYm9vbGVhbiBvcHRpbWl6ZV9jb2Rpbmc7CS8qIFRSVUU9b3B0aW1pemUgZW50cm9weSBlbmNvZGluZyBwYXJtcyAqLworICBib29sZWFuIENDSVI2MDFfc2FtcGxpbmc7CS8qIFRSVUU9Zmlyc3Qgc2FtcGxlcyBhcmUgY29zaXRlZCAqLworICBpbnQgc21vb3RoaW5nX2ZhY3RvcjsJCS8qIDEuLjEwMCwgb3IgMCBmb3Igbm8gaW5wdXQgc21vb3RoaW5nICovCisgIEpfRENUX01FVEhPRCBkY3RfbWV0aG9kOwkvKiBEQ1QgYWxnb3JpdGhtIHNlbGVjdG9yICovCisKKyAgLyogVGhlIHJlc3RhcnQgaW50ZXJ2YWwgY2FuIGJlIHNwZWNpZmllZCBpbiBhYnNvbHV0ZSBNQ1VzIGJ5IHNldHRpbmcKKyAgICogcmVzdGFydF9pbnRlcnZhbCwgb3IgaW4gTUNVIHJvd3MgYnkgc2V0dGluZyByZXN0YXJ0X2luX3Jvd3MKKyAgICogKGluIHdoaWNoIGNhc2UgdGhlIGNvcnJlY3QgcmVzdGFydF9pbnRlcnZhbCB3aWxsIGJlIGZpZ3VyZWQKKyAgICogZm9yIGVhY2ggc2NhbikuCisgICAqLworICB1bnNpZ25lZCBpbnQgcmVzdGFydF9pbnRlcnZhbDsgLyogTUNVcyBwZXIgcmVzdGFydCwgb3IgMCBmb3Igbm8gcmVzdGFydCAqLworICBpbnQgcmVzdGFydF9pbl9yb3dzOwkJLyogaWYgPiAwLCBNQ1Ugcm93cyBwZXIgcmVzdGFydCBpbnRlcnZhbCAqLworCisgIC8qIFBhcmFtZXRlcnMgY29udHJvbGxpbmcgZW1pc3Npb24gb2Ygc3BlY2lhbCBtYXJrZXJzLiAqLworCisgIGJvb2xlYW4gd3JpdGVfSkZJRl9oZWFkZXI7CS8qIHNob3VsZCBhIEpGSUYgbWFya2VyIGJlIHdyaXR0ZW4/ICovCisgIFVJTlQ4IEpGSUZfbWFqb3JfdmVyc2lvbjsJLyogV2hhdCB0byB3cml0ZSBmb3IgdGhlIEpGSUYgdmVyc2lvbiBudW1iZXIgKi8KKyAgVUlOVDggSkZJRl9taW5vcl92ZXJzaW9uOworICAvKiBUaGVzZSB0aHJlZSB2YWx1ZXMgYXJlIG5vdCB1c2VkIGJ5IHRoZSBKUEVHIGNvZGUsIG1lcmVseSBjb3BpZWQgKi8KKyAgLyogaW50byB0aGUgSkZJRiBBUFAwIG1hcmtlci4gIGRlbnNpdHlfdW5pdCBjYW4gYmUgMCBmb3IgdW5rbm93biwgKi8KKyAgLyogMSBmb3IgZG90cy9pbmNoLCBvciAyIGZvciBkb3RzL2NtLiAgTm90ZSB0aGF0IHRoZSBwaXhlbCBhc3BlY3QgKi8KKyAgLyogcmF0aW8gaXMgZGVmaW5lZCBieSBYX2RlbnNpdHkvWV9kZW5zaXR5IGV2ZW4gd2hlbiBkZW5zaXR5X3VuaXQ9MC4gKi8KKyAgVUlOVDggZGVuc2l0eV91bml0OwkJLyogSkZJRiBjb2RlIGZvciBwaXhlbCBzaXplIHVuaXRzICovCisgIFVJTlQxNiBYX2RlbnNpdHk7CQkvKiBIb3Jpem9udGFsIHBpeGVsIGRlbnNpdHkgKi8KKyAgVUlOVDE2IFlfZGVuc2l0eTsJCS8qIFZlcnRpY2FsIHBpeGVsIGRlbnNpdHkgKi8KKyAgYm9vbGVhbiB3cml0ZV9BZG9iZV9tYXJrZXI7CS8qIHNob3VsZCBhbiBBZG9iZSBtYXJrZXIgYmUgd3JpdHRlbj8gKi8KKyAgCisgIC8qIFN0YXRlIHZhcmlhYmxlOiBpbmRleCBvZiBuZXh0IHNjYW5saW5lIHRvIGJlIHdyaXR0ZW4gdG8KKyAgICoganBlZ193cml0ZV9zY2FubGluZXMoKS4gIEFwcGxpY2F0aW9uIG1heSB1c2UgdGhpcyB0byBjb250cm9sIGl0cworICAgKiBwcm9jZXNzaW5nIGxvb3AsIGUuZy4sICJ3aGlsZSAobmV4dF9zY2FubGluZSA8IGltYWdlX2hlaWdodCkiLgorICAgKi8KKworICBKRElNRU5TSU9OIG5leHRfc2NhbmxpbmU7CS8qIDAgLi4gaW1hZ2VfaGVpZ2h0LTEgICovCisKKyAgLyogUmVtYWluaW5nIGZpZWxkcyBhcmUga25vd24gdGhyb3VnaG91dCBjb21wcmVzc29yLCBidXQgZ2VuZXJhbGx5CisgICAqIHNob3VsZCBub3QgYmUgdG91Y2hlZCBieSBhIHN1cnJvdW5kaW5nIGFwcGxpY2F0aW9uLgorICAgKi8KKworICAvKgorICAgKiBUaGVzZSBmaWVsZHMgYXJlIGNvbXB1dGVkIGR1cmluZyBjb21wcmVzc2lvbiBzdGFydHVwCisgICAqLworICBib29sZWFuIHByb2dyZXNzaXZlX21vZGU7CS8qIFRSVUUgaWYgc2NhbiBzY3JpcHQgdXNlcyBwcm9ncmVzc2l2ZSBtb2RlICovCisgIGludCBtYXhfaF9zYW1wX2ZhY3RvcjsJLyogbGFyZ2VzdCBoX3NhbXBfZmFjdG9yICovCisgIGludCBtYXhfdl9zYW1wX2ZhY3RvcjsJLyogbGFyZ2VzdCB2X3NhbXBfZmFjdG9yICovCisKKyAgSkRJTUVOU0lPTiB0b3RhbF9pTUNVX3Jvd3M7CS8qICMgb2YgaU1DVSByb3dzIHRvIGJlIGlucHV0IHRvIGNvZWYgY3RsciAqLworICAvKiBUaGUgY29lZmZpY2llbnQgY29udHJvbGxlciByZWNlaXZlcyBkYXRhIGluIHVuaXRzIG9mIE1DVSByb3dzIGFzIGRlZmluZWQKKyAgICogZm9yIGZ1bGx5IGludGVybGVhdmVkIHNjYW5zICh3aGV0aGVyIHRoZSBKUEVHIGZpbGUgaXMgaW50ZXJsZWF2ZWQgb3Igbm90KS4KKyAgICogVGhlcmUgYXJlIHZfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFIHNhbXBsZSByb3dzIG9mIGVhY2ggY29tcG9uZW50IGluIGFuCisgICAqICJpTUNVIiAoaW50ZXJsZWF2ZWQgTUNVKSByb3cuCisgICAqLworICAKKyAgLyoKKyAgICogVGhlc2UgZmllbGRzIGFyZSB2YWxpZCBkdXJpbmcgYW55IG9uZSBzY2FuLgorICAgKiBUaGV5IGRlc2NyaWJlIHRoZSBjb21wb25lbnRzIGFuZCBNQ1VzIGFjdHVhbGx5IGFwcGVhcmluZyBpbiB0aGUgc2Nhbi4KKyAgICovCisgIGludCBjb21wc19pbl9zY2FuOwkJLyogIyBvZiBKUEVHIGNvbXBvbmVudHMgaW4gdGhpcyBzY2FuICovCisgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjdXJfY29tcF9pbmZvW01BWF9DT01QU19JTl9TQ0FOXTsKKyAgLyogKmN1cl9jb21wX2luZm9baV0gZGVzY3JpYmVzIGNvbXBvbmVudCB0aGF0IGFwcGVhcnMgaSd0aCBpbiBTT1MgKi8KKyAgCisgIEpESU1FTlNJT04gTUNVc19wZXJfcm93OwkvKiAjIG9mIE1DVXMgYWNyb3NzIHRoZSBpbWFnZSAqLworICBKRElNRU5TSU9OIE1DVV9yb3dzX2luX3NjYW47CS8qICMgb2YgTUNVIHJvd3MgaW4gdGhlIGltYWdlICovCisgIAorICBpbnQgYmxvY2tzX2luX01DVTsJCS8qICMgb2YgRENUIGJsb2NrcyBwZXIgTUNVICovCisgIGludCBNQ1VfbWVtYmVyc2hpcFtDX01BWF9CTE9DS1NfSU5fTUNVXTsKKyAgLyogTUNVX21lbWJlcnNoaXBbaV0gaXMgaW5kZXggaW4gY3VyX2NvbXBfaW5mbyBvZiBjb21wb25lbnQgb3duaW5nICovCisgIC8qIGkndGggYmxvY2sgaW4gYW4gTUNVICovCisKKyAgaW50IFNzLCBTZSwgQWgsIEFsOwkJLyogcHJvZ3Jlc3NpdmUgSlBFRyBwYXJhbWV0ZXJzIGZvciBzY2FuICovCisKKyAgLyoKKyAgICogTGlua3MgdG8gY29tcHJlc3Npb24gc3Vib2JqZWN0cyAobWV0aG9kcyBhbmQgcHJpdmF0ZSB2YXJpYWJsZXMgb2YgbW9kdWxlcykKKyAgICovCisgIHN0cnVjdCBqcGVnX2NvbXBfbWFzdGVyICogbWFzdGVyOworICBzdHJ1Y3QganBlZ19jX21haW5fY29udHJvbGxlciAqIG1haW47CisgIHN0cnVjdCBqcGVnX2NfcHJlcF9jb250cm9sbGVyICogcHJlcDsKKyAgc3RydWN0IGpwZWdfY19jb2VmX2NvbnRyb2xsZXIgKiBjb2VmOworICBzdHJ1Y3QganBlZ19tYXJrZXJfd3JpdGVyICogbWFya2VyOworICBzdHJ1Y3QganBlZ19jb2xvcl9jb252ZXJ0ZXIgKiBjY29udmVydDsKKyAgc3RydWN0IGpwZWdfZG93bnNhbXBsZXIgKiBkb3duc2FtcGxlOworICBzdHJ1Y3QganBlZ19mb3J3YXJkX2RjdCAqIGZkY3Q7CisgIHN0cnVjdCBqcGVnX2VudHJvcHlfZW5jb2RlciAqIGVudHJvcHk7CisgIGpwZWdfc2Nhbl9pbmZvICogc2NyaXB0X3NwYWNlOyAvKiB3b3Jrc3BhY2UgZm9yIGpwZWdfc2ltcGxlX3Byb2dyZXNzaW9uICovCisgIGludCBzY3JpcHRfc3BhY2Vfc2l6ZTsKK307CisKKworLyogTWFzdGVyIHJlY29yZCBmb3IgYSBkZWNvbXByZXNzaW9uIGluc3RhbmNlICovCisKK3N0cnVjdCBqcGVnX2RlY29tcHJlc3Nfc3RydWN0IHsKKyAganBlZ19jb21tb25fZmllbGRzOwkJLyogRmllbGRzIHNoYXJlZCB3aXRoIGpwZWdfY29tcHJlc3Nfc3RydWN0ICovCisKKyAgLyogU291cmNlIG9mIGNvbXByZXNzZWQgZGF0YSAqLworICBzdHJ1Y3QganBlZ19zb3VyY2VfbWdyICogc3JjOworCisgIC8qIEJhc2ljIGRlc2NyaXB0aW9uIG9mIGltYWdlIC0tLSBmaWxsZWQgaW4gYnkganBlZ19yZWFkX2hlYWRlcigpLiAqLworICAvKiBBcHBsaWNhdGlvbiBtYXkgaW5zcGVjdCB0aGVzZSB2YWx1ZXMgdG8gZGVjaWRlIGhvdyB0byBwcm9jZXNzIGltYWdlLiAqLworCisgIEpESU1FTlNJT04gaW1hZ2Vfd2lkdGg7CS8qIG5vbWluYWwgaW1hZ2Ugd2lkdGggKGZyb20gU09GIG1hcmtlcikgKi8KKyAgSkRJTUVOU0lPTiBpbWFnZV9oZWlnaHQ7CS8qIG5vbWluYWwgaW1hZ2UgaGVpZ2h0ICovCisgIGludCBudW1fY29tcG9uZW50czsJCS8qICMgb2YgY29sb3IgY29tcG9uZW50cyBpbiBKUEVHIGltYWdlICovCisgIEpfQ09MT1JfU1BBQ0UganBlZ19jb2xvcl9zcGFjZTsgLyogY29sb3JzcGFjZSBvZiBKUEVHIGltYWdlICovCisKKyAgLyogRGVjb21wcmVzc2lvbiBwcm9jZXNzaW5nIHBhcmFtZXRlcnMgLS0tIHRoZXNlIGZpZWxkcyBtdXN0IGJlIHNldCBiZWZvcmUKKyAgICogY2FsbGluZyBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKS4gIE5vdGUgdGhhdCBqcGVnX3JlYWRfaGVhZGVyKCkgaW5pdGlhbGl6ZXMKKyAgICogdGhlbSB0byBkZWZhdWx0IHZhbHVlcy4KKyAgICovCisKKyAgSl9DT0xPUl9TUEFDRSBvdXRfY29sb3Jfc3BhY2U7IC8qIGNvbG9yc3BhY2UgZm9yIG91dHB1dCAqLworCisgIHVuc2lnbmVkIGludCBzY2FsZV9udW0sIHNjYWxlX2Rlbm9tOyAvKiBmcmFjdGlvbiBieSB3aGljaCB0byBzY2FsZSBpbWFnZSAqLworCisgIGRvdWJsZSBvdXRwdXRfZ2FtbWE7CQkvKiBpbWFnZSBnYW1tYSB3YW50ZWQgaW4gb3V0cHV0ICovCisKKyAgYm9vbGVhbiBidWZmZXJlZF9pbWFnZTsJLyogVFJVRT1tdWx0aXBsZSBvdXRwdXQgcGFzc2VzICovCisgIGJvb2xlYW4gcmF3X2RhdGFfb3V0OwkJLyogVFJVRT1kb3duc2FtcGxlZCBkYXRhIHdhbnRlZCAqLworCisgIEpfRENUX01FVEhPRCBkY3RfbWV0aG9kOwkvKiBJRENUIGFsZ29yaXRobSBzZWxlY3RvciAqLworICBib29sZWFuIGRvX2ZhbmN5X3Vwc2FtcGxpbmc7CS8qIFRSVUU9YXBwbHkgZmFuY3kgdXBzYW1wbGluZyAqLworICBib29sZWFuIGRvX2Jsb2NrX3Ntb290aGluZzsJLyogVFJVRT1hcHBseSBpbnRlcmJsb2NrIHNtb290aGluZyAqLworCisgIGJvb2xlYW4gcXVhbnRpemVfY29sb3JzOwkvKiBUUlVFPWNvbG9ybWFwcGVkIG91dHB1dCB3YW50ZWQgKi8KKyAgLyogdGhlIGZvbGxvd2luZyBhcmUgaWdub3JlZCBpZiBub3QgcXVhbnRpemVfY29sb3JzOiAqLworICBKX0RJVEhFUl9NT0RFIGRpdGhlcl9tb2RlOwkvKiB0eXBlIG9mIGNvbG9yIGRpdGhlcmluZyB0byB1c2UgKi8KKyAgYm9vbGVhbiB0d29fcGFzc19xdWFudGl6ZTsJLyogVFJVRT11c2UgdHdvLXBhc3MgY29sb3IgcXVhbnRpemF0aW9uICovCisgIGludCBkZXNpcmVkX251bWJlcl9vZl9jb2xvcnM7CS8qIG1heCAjIGNvbG9ycyB0byB1c2UgaW4gY3JlYXRlZCBjb2xvcm1hcCAqLworICAvKiB0aGVzZSBhcmUgc2lnbmlmaWNhbnQgb25seSBpbiBidWZmZXJlZC1pbWFnZSBtb2RlOiAqLworICBib29sZWFuIGVuYWJsZV8xcGFzc19xdWFudDsJLyogZW5hYmxlIGZ1dHVyZSB1c2Ugb2YgMS1wYXNzIHF1YW50aXplciAqLworICBib29sZWFuIGVuYWJsZV9leHRlcm5hbF9xdWFudDsvKiBlbmFibGUgZnV0dXJlIHVzZSBvZiBleHRlcm5hbCBjb2xvcm1hcCAqLworICBib29sZWFuIGVuYWJsZV8ycGFzc19xdWFudDsJLyogZW5hYmxlIGZ1dHVyZSB1c2Ugb2YgMi1wYXNzIHF1YW50aXplciAqLworCisgIC8qIERlc2NyaXB0aW9uIG9mIGFjdHVhbCBvdXRwdXQgaW1hZ2UgdGhhdCB3aWxsIGJlIHJldHVybmVkIHRvIGFwcGxpY2F0aW9uLgorICAgKiBUaGVzZSBmaWVsZHMgYXJlIGNvbXB1dGVkIGJ5IGpwZWdfc3RhcnRfZGVjb21wcmVzcygpLgorICAgKiBZb3UgY2FuIGFsc28gdXNlIGpwZWdfY2FsY19vdXRwdXRfZGltZW5zaW9ucygpIHRvIGRldGVybWluZSB0aGVzZSB2YWx1ZXMKKyAgICogaW4gYWR2YW5jZSBvZiBjYWxsaW5nIGpwZWdfc3RhcnRfZGVjb21wcmVzcygpLgorICAgKi8KKworICBKRElNRU5TSU9OIG91dHB1dF93aWR0aDsJLyogc2NhbGVkIGltYWdlIHdpZHRoICovCisgIEpESU1FTlNJT04gb3V0cHV0X2hlaWdodDsJLyogc2NhbGVkIGltYWdlIGhlaWdodCAqLworICBpbnQgb3V0X2NvbG9yX2NvbXBvbmVudHM7CS8qICMgb2YgY29sb3IgY29tcG9uZW50cyBpbiBvdXRfY29sb3Jfc3BhY2UgKi8KKyAgaW50IG91dHB1dF9jb21wb25lbnRzOwkvKiAjIG9mIGNvbG9yIGNvbXBvbmVudHMgcmV0dXJuZWQgKi8KKyAgLyogb3V0cHV0X2NvbXBvbmVudHMgaXMgMSAoYSBjb2xvcm1hcCBpbmRleCkgd2hlbiBxdWFudGl6aW5nIGNvbG9yczsKKyAgICogb3RoZXJ3aXNlIGl0IGVxdWFscyBvdXRfY29sb3JfY29tcG9uZW50cy4KKyAgICovCisgIGludCByZWNfb3V0YnVmX2hlaWdodDsJLyogbWluIHJlY29tbWVuZGVkIGhlaWdodCBvZiBzY2FubGluZSBidWZmZXIgKi8KKyAgLyogSWYgdGhlIGJ1ZmZlciBwYXNzZWQgdG8ganBlZ19yZWFkX3NjYW5saW5lcygpIGlzIGxlc3MgdGhhbiB0aGlzIG1hbnkgcm93cworICAgKiBoaWdoLCBzcGFjZSBhbmQgdGltZSB3aWxsIGJlIHdhc3RlZCBkdWUgdG8gdW5uZWNlc3NhcnkgZGF0YSBjb3B5aW5nLgorICAgKiBVc3VhbGx5IHJlY19vdXRidWZfaGVpZ2h0IHdpbGwgYmUgMSBvciAyLCBhdCBtb3N0IDQuCisgICAqLworCisgIC8qIFdoZW4gcXVhbnRpemluZyBjb2xvcnMsIHRoZSBvdXRwdXQgY29sb3JtYXAgaXMgZGVzY3JpYmVkIGJ5IHRoZXNlIGZpZWxkcy4KKyAgICogVGhlIGFwcGxpY2F0aW9uIGNhbiBzdXBwbHkgYSBjb2xvcm1hcCBieSBzZXR0aW5nIGNvbG9ybWFwIG5vbi1OVUxMIGJlZm9yZQorICAgKiBjYWxsaW5nIGpwZWdfc3RhcnRfZGVjb21wcmVzczsgb3RoZXJ3aXNlIGEgY29sb3JtYXAgaXMgY3JlYXRlZCBkdXJpbmcKKyAgICoganBlZ19zdGFydF9kZWNvbXByZXNzIG9yIGpwZWdfc3RhcnRfb3V0cHV0LgorICAgKiBUaGUgbWFwIGhhcyBvdXRfY29sb3JfY29tcG9uZW50cyByb3dzIGFuZCBhY3R1YWxfbnVtYmVyX29mX2NvbG9ycyBjb2x1bW5zLgorICAgKi8KKyAgaW50IGFjdHVhbF9udW1iZXJfb2ZfY29sb3JzOwkvKiBudW1iZXIgb2YgZW50cmllcyBpbiB1c2UgKi8KKyAgSlNBTVBBUlJBWSBjb2xvcm1hcDsJCS8qIFRoZSBjb2xvciBtYXAgYXMgYSAyLUQgcGl4ZWwgYXJyYXkgKi8KKworICAvKiBTdGF0ZSB2YXJpYWJsZXM6IHRoZXNlIHZhcmlhYmxlcyBpbmRpY2F0ZSB0aGUgcHJvZ3Jlc3Mgb2YgZGVjb21wcmVzc2lvbi4KKyAgICogVGhlIGFwcGxpY2F0aW9uIG1heSBleGFtaW5lIHRoZXNlIGJ1dCBtdXN0IG5vdCBtb2RpZnkgdGhlbS4KKyAgICovCisKKyAgLyogUm93IGluZGV4IG9mIG5leHQgc2NhbmxpbmUgdG8gYmUgcmVhZCBmcm9tIGpwZWdfcmVhZF9zY2FubGluZXMoKS4KKyAgICogQXBwbGljYXRpb24gbWF5IHVzZSB0aGlzIHRvIGNvbnRyb2wgaXRzIHByb2Nlc3NpbmcgbG9vcCwgZS5nLiwKKyAgICogIndoaWxlIChvdXRwdXRfc2NhbmxpbmUgPCBvdXRwdXRfaGVpZ2h0KSIuCisgICAqLworICBKRElNRU5TSU9OIG91dHB1dF9zY2FubGluZTsJLyogMCAuLiBvdXRwdXRfaGVpZ2h0LTEgICovCisKKyAgLyogQ3VycmVudCBpbnB1dCBzY2FuIG51bWJlciBhbmQgbnVtYmVyIG9mIGlNQ1Ugcm93cyBjb21wbGV0ZWQgaW4gc2Nhbi4KKyAgICogVGhlc2UgaW5kaWNhdGUgdGhlIHByb2dyZXNzIG9mIHRoZSBkZWNvbXByZXNzb3IgaW5wdXQgc2lkZS4KKyAgICovCisgIGludCBpbnB1dF9zY2FuX251bWJlcjsJLyogTnVtYmVyIG9mIFNPUyBtYXJrZXJzIHNlZW4gc28gZmFyICovCisgIEpESU1FTlNJT04gaW5wdXRfaU1DVV9yb3c7CS8qIE51bWJlciBvZiBpTUNVIHJvd3MgY29tcGxldGVkICovCisKKyAgLyogVGhlICJvdXRwdXQgc2NhbiBudW1iZXIiIGlzIHRoZSBub3Rpb25hbCBzY2FuIGJlaW5nIGRpc3BsYXllZCBieSB0aGUKKyAgICogb3V0cHV0IHNpZGUuICBUaGUgZGVjb21wcmVzc29yIHdpbGwgbm90IGFsbG93IG91dHB1dCBzY2FuL3JvdyBudW1iZXIKKyAgICogdG8gZ2V0IGFoZWFkIG9mIGlucHV0IHNjYW4vcm93LCBidXQgaXQgY2FuIGZhbGwgYXJiaXRyYXJpbHkgZmFyIGJlaGluZC4KKyAgICovCisgIGludCBvdXRwdXRfc2Nhbl9udW1iZXI7CS8qIE5vbWluYWwgc2NhbiBudW1iZXIgYmVpbmcgZGlzcGxheWVkICovCisgIEpESU1FTlNJT04gb3V0cHV0X2lNQ1Vfcm93OwkvKiBOdW1iZXIgb2YgaU1DVSByb3dzIHJlYWQgKi8KKworICAvKiBDdXJyZW50IHByb2dyZXNzaW9uIHN0YXR1cy4gIGNvZWZfYml0c1tjXVtpXSBpbmRpY2F0ZXMgdGhlIHByZWNpc2lvbgorICAgKiB3aXRoIHdoaWNoIGNvbXBvbmVudCBjJ3MgRENUIGNvZWZmaWNpZW50IGkgKGluIHppZ3phZyBvcmRlcikgaXMga25vd24uCisgICAqIEl0IGlzIC0xIHdoZW4gbm8gZGF0YSBoYXMgeWV0IGJlZW4gcmVjZWl2ZWQsIG90aGVyd2lzZSBpdCBpcyB0aGUgcG9pbnQKKyAgICogdHJhbnNmb3JtIChzaGlmdCkgdmFsdWUgZm9yIHRoZSBtb3N0IHJlY2VudCBzY2FuIG9mIHRoZSBjb2VmZmljaWVudAorICAgKiAodGh1cywgMCBhdCBjb21wbGV0aW9uIG9mIHRoZSBwcm9ncmVzc2lvbikuCisgICAqIFRoaXMgcG9pbnRlciBpcyBOVUxMIHdoZW4gcmVhZGluZyBhIG5vbi1wcm9ncmVzc2l2ZSBmaWxlLgorICAgKi8KKyAgaW50ICgqY29lZl9iaXRzKVtEQ1RTSVpFMl07CS8qIC0xIG9yIGN1cnJlbnQgQWwgdmFsdWUgZm9yIGVhY2ggY29lZiAqLworCisgIC8qIEludGVybmFsIEpQRUcgcGFyYW1ldGVycyAtLS0gdGhlIGFwcGxpY2F0aW9uIHVzdWFsbHkgbmVlZCBub3QgbG9vayBhdAorICAgKiB0aGVzZSBmaWVsZHMuICBOb3RlIHRoYXQgdGhlIGRlY29tcHJlc3NvciBvdXRwdXQgc2lkZSBtYXkgbm90IHVzZQorICAgKiBhbnkgcGFyYW1ldGVycyB0aGF0IGNhbiBjaGFuZ2UgYmV0d2VlbiBzY2Fucy4KKyAgICovCisKKyAgLyogUXVhbnRpemF0aW9uIGFuZCBIdWZmbWFuIHRhYmxlcyBhcmUgY2FycmllZCBmb3J3YXJkIGFjcm9zcyBpbnB1dAorICAgKiBkYXRhc3RyZWFtcyB3aGVuIHByb2Nlc3NpbmcgYWJicmV2aWF0ZWQgSlBFRyBkYXRhc3RyZWFtcy4KKyAgICovCisKKyAgSlFVQU5UX1RCTCAqIHF1YW50X3RibF9wdHJzW05VTV9RVUFOVF9UQkxTXTsKKyAgLyogcHRycyB0byBjb2VmZmljaWVudCBxdWFudGl6YXRpb24gdGFibGVzLCBvciBOVUxMIGlmIG5vdCBkZWZpbmVkICovCisKKyAgSkhVRkZfVEJMICogZGNfaHVmZl90YmxfcHRyc1tOVU1fSFVGRl9UQkxTXTsKKyAgSkhVRkZfVEJMICogYWNfaHVmZl90YmxfcHRyc1tOVU1fSFVGRl9UQkxTXTsKKyAgLyogcHRycyB0byBIdWZmbWFuIGNvZGluZyB0YWJsZXMsIG9yIE5VTEwgaWYgbm90IGRlZmluZWQgKi8KKworICAvKiBUaGVzZSBwYXJhbWV0ZXJzIGFyZSBuZXZlciBjYXJyaWVkIGFjcm9zcyBkYXRhc3RyZWFtcywgc2luY2UgdGhleQorICAgKiBhcmUgZ2l2ZW4gaW4gU09GL1NPUyBtYXJrZXJzIG9yIGRlZmluZWQgdG8gYmUgcmVzZXQgYnkgU09JLgorICAgKi8KKworICBpbnQgZGF0YV9wcmVjaXNpb247CQkvKiBiaXRzIG9mIHByZWNpc2lvbiBpbiBpbWFnZSBkYXRhICovCisKKyAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBfaW5mbzsKKyAgLyogY29tcF9pbmZvW2ldIGRlc2NyaWJlcyBjb21wb25lbnQgdGhhdCBhcHBlYXJzIGkndGggaW4gU09GICovCisKKyAgYm9vbGVhbiBwcm9ncmVzc2l2ZV9tb2RlOwkvKiBUUlVFIGlmIFNPRm4gc3BlY2lmaWVzIHByb2dyZXNzaXZlIG1vZGUgKi8KKyAgYm9vbGVhbiBhcml0aF9jb2RlOwkJLyogVFJVRT1hcml0aG1ldGljIGNvZGluZywgRkFMU0U9SHVmZm1hbiAqLworCisgIFVJTlQ4IGFyaXRoX2RjX0xbTlVNX0FSSVRIX1RCTFNdOyAvKiBMIHZhbHVlcyBmb3IgREMgYXJpdGgtY29kaW5nIHRhYmxlcyAqLworICBVSU5UOCBhcml0aF9kY19VW05VTV9BUklUSF9UQkxTXTsgLyogVSB2YWx1ZXMgZm9yIERDIGFyaXRoLWNvZGluZyB0YWJsZXMgKi8KKyAgVUlOVDggYXJpdGhfYWNfS1tOVU1fQVJJVEhfVEJMU107IC8qIEt4IHZhbHVlcyBmb3IgQUMgYXJpdGgtY29kaW5nIHRhYmxlcyAqLworCisgIHVuc2lnbmVkIGludCByZXN0YXJ0X2ludGVydmFsOyAvKiBNQ1VzIHBlciByZXN0YXJ0IGludGVydmFsLCBvciAwIGZvciBubyByZXN0YXJ0ICovCisKKyAgLyogVGhlc2UgZmllbGRzIHJlY29yZCBkYXRhIG9idGFpbmVkIGZyb20gb3B0aW9uYWwgbWFya2VycyByZWNvZ25pemVkIGJ5CisgICAqIHRoZSBKUEVHIGxpYnJhcnkuCisgICAqLworICBib29sZWFuIHNhd19KRklGX21hcmtlcjsJLyogVFJVRSBpZmYgYSBKRklGIEFQUDAgbWFya2VyIHdhcyBmb3VuZCAqLworICAvKiBEYXRhIGNvcGllZCBmcm9tIEpGSUYgbWFya2VyOyBvbmx5IHZhbGlkIGlmIHNhd19KRklGX21hcmtlciBpcyBUUlVFOiAqLworICBVSU5UOCBKRklGX21ham9yX3ZlcnNpb247CS8qIEpGSUYgdmVyc2lvbiBudW1iZXIgKi8KKyAgVUlOVDggSkZJRl9taW5vcl92ZXJzaW9uOworICBVSU5UOCBkZW5zaXR5X3VuaXQ7CQkvKiBKRklGIGNvZGUgZm9yIHBpeGVsIHNpemUgdW5pdHMgKi8KKyAgVUlOVDE2IFhfZGVuc2l0eTsJCS8qIEhvcml6b250YWwgcGl4ZWwgZGVuc2l0eSAqLworICBVSU5UMTYgWV9kZW5zaXR5OwkJLyogVmVydGljYWwgcGl4ZWwgZGVuc2l0eSAqLworICBib29sZWFuIHNhd19BZG9iZV9tYXJrZXI7CS8qIFRSVUUgaWZmIGFuIEFkb2JlIEFQUDE0IG1hcmtlciB3YXMgZm91bmQgKi8KKyAgVUlOVDggQWRvYmVfdHJhbnNmb3JtOwkvKiBDb2xvciB0cmFuc2Zvcm0gY29kZSBmcm9tIEFkb2JlIG1hcmtlciAqLworCisgIGJvb2xlYW4gQ0NJUjYwMV9zYW1wbGluZzsJLyogVFJVRT1maXJzdCBzYW1wbGVzIGFyZSBjb3NpdGVkICovCisKKyAgLyogQXNpZGUgZnJvbSB0aGUgc3BlY2lmaWMgZGF0YSByZXRhaW5lZCBmcm9tIEFQUG4gbWFya2VycyBrbm93biB0byB0aGUKKyAgICogbGlicmFyeSwgdGhlIHVuaW50ZXJwcmV0ZWQgY29udGVudHMgb2YgYW55IG9yIGFsbCBBUFBuIGFuZCBDT00gbWFya2VycworICAgKiBjYW4gYmUgc2F2ZWQgaW4gYSBsaXN0IGZvciBleGFtaW5hdGlvbiBieSB0aGUgYXBwbGljYXRpb24uCisgICAqLworICBqcGVnX3NhdmVkX21hcmtlcl9wdHIgbWFya2VyX2xpc3Q7IC8qIEhlYWQgb2YgbGlzdCBvZiBzYXZlZCBtYXJrZXJzICovCisKKyAgLyogUmVtYWluaW5nIGZpZWxkcyBhcmUga25vd24gdGhyb3VnaG91dCBkZWNvbXByZXNzb3IsIGJ1dCBnZW5lcmFsbHkKKyAgICogc2hvdWxkIG5vdCBiZSB0b3VjaGVkIGJ5IGEgc3Vycm91bmRpbmcgYXBwbGljYXRpb24uCisgICAqLworCisgIC8qCisgICAqIFRoZXNlIGZpZWxkcyBhcmUgY29tcHV0ZWQgZHVyaW5nIGRlY29tcHJlc3Npb24gc3RhcnR1cAorICAgKi8KKyAgaW50IG1heF9oX3NhbXBfZmFjdG9yOwkvKiBsYXJnZXN0IGhfc2FtcF9mYWN0b3IgKi8KKyAgaW50IG1heF92X3NhbXBfZmFjdG9yOwkvKiBsYXJnZXN0IHZfc2FtcF9mYWN0b3IgKi8KKworICBpbnQgbWluX0RDVF9zY2FsZWRfc2l6ZTsJLyogc21hbGxlc3QgRENUX3NjYWxlZF9zaXplIG9mIGFueSBjb21wb25lbnQgKi8KKworICBKRElNRU5TSU9OIHRvdGFsX2lNQ1Vfcm93czsJLyogIyBvZiBpTUNVIHJvd3MgaW4gaW1hZ2UgKi8KKyAgLyogVGhlIGNvZWZmaWNpZW50IGNvbnRyb2xsZXIncyBpbnB1dCBhbmQgb3V0cHV0IHByb2dyZXNzIGlzIG1lYXN1cmVkIGluCisgICAqIHVuaXRzIG9mICJpTUNVIiAoaW50ZXJsZWF2ZWQgTUNVKSByb3dzLiAgVGhlc2UgYXJlIHRoZSBzYW1lIGFzIE1DVSByb3dzCisgICAqIGluIGZ1bGx5IGludGVybGVhdmVkIEpQRUcgc2NhbnMsIGJ1dCBhcmUgdXNlZCB3aGV0aGVyIHRoZSBzY2FuIGlzCisgICAqIGludGVybGVhdmVkIG9yIG5vdC4gIFdlIGRlZmluZSBhbiBpTUNVIHJvdyBhcyB2X3NhbXBfZmFjdG9yIERDVCBibG9jaworICAgKiByb3dzIG9mIGVhY2ggY29tcG9uZW50LiAgVGhlcmVmb3JlLCB0aGUgSURDVCBvdXRwdXQgY29udGFpbnMKKyAgICogdl9zYW1wX2ZhY3RvcipEQ1Rfc2NhbGVkX3NpemUgc2FtcGxlIHJvd3Mgb2YgYSBjb21wb25lbnQgcGVyIGlNQ1Ugcm93LgorICAgKi8KKworICBKU0FNUExFICogc2FtcGxlX3JhbmdlX2xpbWl0OyAvKiB0YWJsZSBmb3IgZmFzdCByYW5nZS1saW1pdGluZyAqLworCisgIC8qCisgICAqIFRoZXNlIGZpZWxkcyBhcmUgdmFsaWQgZHVyaW5nIGFueSBvbmUgc2Nhbi4KKyAgICogVGhleSBkZXNjcmliZSB0aGUgY29tcG9uZW50cyBhbmQgTUNVcyBhY3R1YWxseSBhcHBlYXJpbmcgaW4gdGhlIHNjYW4uCisgICAqIE5vdGUgdGhhdCB0aGUgZGVjb21wcmVzc29yIG91dHB1dCBzaWRlIG11c3Qgbm90IHVzZSB0aGVzZSBmaWVsZHMuCisgICAqLworICBpbnQgY29tcHNfaW5fc2NhbjsJCS8qICMgb2YgSlBFRyBjb21wb25lbnRzIGluIHRoaXMgc2NhbiAqLworICBqcGVnX2NvbXBvbmVudF9pbmZvICogY3VyX2NvbXBfaW5mb1tNQVhfQ09NUFNfSU5fU0NBTl07CisgIC8qICpjdXJfY29tcF9pbmZvW2ldIGRlc2NyaWJlcyBjb21wb25lbnQgdGhhdCBhcHBlYXJzIGkndGggaW4gU09TICovCisKKyAgSkRJTUVOU0lPTiBNQ1VzX3Blcl9yb3c7CS8qICMgb2YgTUNVcyBhY3Jvc3MgdGhlIGltYWdlICovCisgIEpESU1FTlNJT04gTUNVX3Jvd3NfaW5fc2NhbjsJLyogIyBvZiBNQ1Ugcm93cyBpbiB0aGUgaW1hZ2UgKi8KKworICBpbnQgYmxvY2tzX2luX01DVTsJCS8qICMgb2YgRENUIGJsb2NrcyBwZXIgTUNVICovCisgIGludCBNQ1VfbWVtYmVyc2hpcFtEX01BWF9CTE9DS1NfSU5fTUNVXTsKKyAgLyogTUNVX21lbWJlcnNoaXBbaV0gaXMgaW5kZXggaW4gY3VyX2NvbXBfaW5mbyBvZiBjb21wb25lbnQgb3duaW5nICovCisgIC8qIGkndGggYmxvY2sgaW4gYW4gTUNVICovCisKKyAgaW50IFNzLCBTZSwgQWgsIEFsOwkJLyogcHJvZ3Jlc3NpdmUgSlBFRyBwYXJhbWV0ZXJzIGZvciBzY2FuICovCisKKyAgLyogVGhpcyBmaWVsZCBpcyBzaGFyZWQgYmV0d2VlbiBlbnRyb3B5IGRlY29kZXIgYW5kIG1hcmtlciBwYXJzZXIuCisgICAqIEl0IGlzIGVpdGhlciB6ZXJvIG9yIHRoZSBjb2RlIG9mIGEgSlBFRyBtYXJrZXIgdGhhdCBoYXMgYmVlbgorICAgKiByZWFkIGZyb20gdGhlIGRhdGEgc291cmNlLCBidXQgaGFzIG5vdCB5ZXQgYmVlbiBwcm9jZXNzZWQuCisgICAqLworICBpbnQgdW5yZWFkX21hcmtlcjsKKworICAvKgorICAgKiBMaW5rcyB0byBkZWNvbXByZXNzaW9uIHN1Ym9iamVjdHMgKG1ldGhvZHMsIHByaXZhdGUgdmFyaWFibGVzIG9mIG1vZHVsZXMpCisgICAqLworICBzdHJ1Y3QganBlZ19kZWNvbXBfbWFzdGVyICogbWFzdGVyOworICBzdHJ1Y3QganBlZ19kX21haW5fY29udHJvbGxlciAqIG1haW47CisgIHN0cnVjdCBqcGVnX2RfY29lZl9jb250cm9sbGVyICogY29lZjsKKyAgc3RydWN0IGpwZWdfZF9wb3N0X2NvbnRyb2xsZXIgKiBwb3N0OworICBzdHJ1Y3QganBlZ19pbnB1dF9jb250cm9sbGVyICogaW5wdXRjdGw7CisgIHN0cnVjdCBqcGVnX21hcmtlcl9yZWFkZXIgKiBtYXJrZXI7CisgIHN0cnVjdCBqcGVnX2VudHJvcHlfZGVjb2RlciAqIGVudHJvcHk7CisgIHN0cnVjdCBqcGVnX2ludmVyc2VfZGN0ICogaWRjdDsKKyAgc3RydWN0IGpwZWdfdXBzYW1wbGVyICogdXBzYW1wbGU7CisgIHN0cnVjdCBqcGVnX2NvbG9yX2RlY29udmVydGVyICogY2NvbnZlcnQ7CisgIHN0cnVjdCBqcGVnX2NvbG9yX3F1YW50aXplciAqIGNxdWFudGl6ZTsKK307CisKKworLyogIk9iamVjdCIgZGVjbGFyYXRpb25zIGZvciBKUEVHIG1vZHVsZXMgdGhhdCBtYXkgYmUgc3VwcGxpZWQgb3IgY2FsbGVkCisgKiBkaXJlY3RseSBieSB0aGUgc3Vycm91bmRpbmcgYXBwbGljYXRpb24uCisgKiBBcyB3aXRoIGFsbCBvYmplY3RzIGluIHRoZSBKUEVHIGxpYnJhcnksIHRoZXNlIHN0cnVjdHMgb25seSBkZWZpbmUgdGhlCisgKiBwdWJsaWNseSB2aXNpYmxlIG1ldGhvZHMgYW5kIHN0YXRlIHZhcmlhYmxlcyBvZiBhIG1vZHVsZS4gIEFkZGl0aW9uYWwKKyAqIHByaXZhdGUgZmllbGRzIG1heSBleGlzdCBhZnRlciB0aGUgcHVibGljIG9uZXMuCisgKi8KKworCisvKiBFcnJvciBoYW5kbGVyIG9iamVjdCAqLworCitzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgeworICAvKiBFcnJvciBleGl0IGhhbmRsZXI6IGRvZXMgbm90IHJldHVybiB0byBjYWxsZXIgKi8KKyAgSk1FVEhPRCh2b2lkLCBlcnJvcl9leGl0LCAoal9jb21tb25fcHRyIGNpbmZvKSk7CisgIC8qIENvbmRpdGlvbmFsbHkgZW1pdCBhIHRyYWNlIG9yIHdhcm5pbmcgbWVzc2FnZSAqLworICBKTUVUSE9EKHZvaWQsIGVtaXRfbWVzc2FnZSwgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IG1zZ19sZXZlbCkpOworICAvKiBSb3V0aW5lIHRoYXQgYWN0dWFsbHkgb3V0cHV0cyBhIHRyYWNlIG9yIGVycm9yIG1lc3NhZ2UgKi8KKyAgSk1FVEhPRCh2b2lkLCBvdXRwdXRfbWVzc2FnZSwgKGpfY29tbW9uX3B0ciBjaW5mbykpOworICAvKiBGb3JtYXQgYSBtZXNzYWdlIHN0cmluZyBmb3IgdGhlIG1vc3QgcmVjZW50IEpQRUcgZXJyb3Igb3IgbWVzc2FnZSAqLworICBKTUVUSE9EKHZvaWQsIGZvcm1hdF9tZXNzYWdlLCAoal9jb21tb25fcHRyIGNpbmZvLCBjaGFyICogYnVmZmVyKSk7CisjZGVmaW5lIEpNU0dfTEVOR1RIX01BWCAgMjAwCS8qIHJlY29tbWVuZGVkIHNpemUgb2YgZm9ybWF0X21lc3NhZ2UgYnVmZmVyICovCisgIC8qIFJlc2V0IGVycm9yIHN0YXRlIHZhcmlhYmxlcyBhdCBzdGFydCBvZiBhIG5ldyBpbWFnZSAqLworICBKTUVUSE9EKHZvaWQsIHJlc2V0X2Vycm9yX21nciwgKGpfY29tbW9uX3B0ciBjaW5mbykpOworICAKKyAgLyogVGhlIG1lc3NhZ2UgSUQgY29kZSBhbmQgYW55IHBhcmFtZXRlcnMgYXJlIHNhdmVkIGhlcmUuCisgICAqIEEgbWVzc2FnZSBjYW4gaGF2ZSBvbmUgc3RyaW5nIHBhcmFtZXRlciBvciB1cCB0byA4IGludCBwYXJhbWV0ZXJzLgorICAgKi8KKyAgaW50IG1zZ19jb2RlOworI2RlZmluZSBKTVNHX1NUUl9QQVJNX01BWCAgODAKKyAgdW5pb24geworICAgIGludCBpWzhdOworICAgIGNoYXIgc1tKTVNHX1NUUl9QQVJNX01BWF07CisgIH0gbXNnX3Bhcm07CisgIAorICAvKiBTdGFuZGFyZCBzdGF0ZSB2YXJpYWJsZXMgZm9yIGVycm9yIGZhY2lsaXR5ICovCisgIAorICBpbnQgdHJhY2VfbGV2ZWw7CQkvKiBtYXggbXNnX2xldmVsIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgKi8KKyAgCisgIC8qIEZvciByZWNvdmVyYWJsZSBjb3JydXB0LWRhdGEgZXJyb3JzLCB3ZSBlbWl0IGEgd2FybmluZyBtZXNzYWdlLAorICAgKiBidXQga2VlcCBnb2luZyB1bmxlc3MgZW1pdF9tZXNzYWdlIGNob29zZXMgdG8gYWJvcnQuICBlbWl0X21lc3NhZ2UKKyAgICogc2hvdWxkIGNvdW50IHdhcm5pbmdzIGluIG51bV93YXJuaW5ncy4gIFRoZSBzdXJyb3VuZGluZyBhcHBsaWNhdGlvbgorICAgKiBjYW4gY2hlY2sgZm9yIGJhZCBkYXRhIGJ5IHNlZWluZyBpZiBudW1fd2FybmluZ3MgaXMgbm9uemVybyBhdCB0aGUKKyAgICogZW5kIG9mIHByb2Nlc3NpbmcuCisgICAqLworICBsb25nIG51bV93YXJuaW5nczsJCS8qIG51bWJlciBvZiBjb3JydXB0LWRhdGEgd2FybmluZ3MgKi8KKworICAvKiBUaGVzZSBmaWVsZHMgcG9pbnQgdG8gdGhlIHRhYmxlKHMpIG9mIGVycm9yIG1lc3NhZ2Ugc3RyaW5ncy4KKyAgICogQW4gYXBwbGljYXRpb24gY2FuIGNoYW5nZSB0aGUgdGFibGUgcG9pbnRlciB0byBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQKKyAgICogbWVzc2FnZSBsaXN0ICh0eXBpY2FsbHksIHRvIGNoYW5nZSB0aGUgbGFuZ3VhZ2UgaW4gd2hpY2ggZXJyb3JzIGFyZQorICAgKiByZXBvcnRlZCkuICBTb21lIGFwcGxpY2F0aW9ucyBtYXkgd2lzaCB0byBhZGQgYWRkaXRpb25hbCBlcnJvciBjb2RlcworICAgKiB0aGF0IHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgSlBFRyBsaWJyYXJ5IGVycm9yIG1lY2hhbmlzbTsgdGhlIHNlY29uZAorICAgKiB0YWJsZSBwb2ludGVyIGlzIHVzZWQgZm9yIHRoaXMgcHVycG9zZS4KKyAgICoKKyAgICogRmlyc3QgdGFibGUgaW5jbHVkZXMgYWxsIGVycm9ycyBnZW5lcmF0ZWQgYnkgSlBFRyBsaWJyYXJ5IGl0c2VsZi4KKyAgICogRXJyb3IgY29kZSAwIGlzIHJlc2VydmVkIGZvciBhICJubyBzdWNoIGVycm9yIHN0cmluZyIgbWVzc2FnZS4KKyAgICovCisgIGNvbnN0IGNoYXIgKiBjb25zdCAqIGpwZWdfbWVzc2FnZV90YWJsZTsgLyogTGlicmFyeSBlcnJvcnMgKi8KKyAgaW50IGxhc3RfanBlZ19tZXNzYWdlOyAgICAvKiBUYWJsZSBjb250YWlucyBzdHJpbmdzIDAuLmxhc3RfanBlZ19tZXNzYWdlICovCisgIC8qIFNlY29uZCB0YWJsZSBjYW4gYmUgYWRkZWQgYnkgYXBwbGljYXRpb24gKHNlZSBjanBlZy9kanBlZyBmb3IgZXhhbXBsZSkuCisgICAqIEl0IGNvbnRhaW5zIHN0cmluZ3MgbnVtYmVyZWQgZmlyc3RfYWRkb25fbWVzc2FnZS4ubGFzdF9hZGRvbl9tZXNzYWdlLgorICAgKi8KKyAgY29uc3QgY2hhciAqIGNvbnN0ICogYWRkb25fbWVzc2FnZV90YWJsZTsgLyogTm9uLWxpYnJhcnkgZXJyb3JzICovCisgIGludCBmaXJzdF9hZGRvbl9tZXNzYWdlOwkvKiBjb2RlIGZvciBmaXJzdCBzdHJpbmcgaW4gYWRkb24gdGFibGUgKi8KKyAgaW50IGxhc3RfYWRkb25fbWVzc2FnZTsJLyogY29kZSBmb3IgbGFzdCBzdHJpbmcgaW4gYWRkb24gdGFibGUgKi8KK307CisKKworLyogUHJvZ3Jlc3MgbW9uaXRvciBvYmplY3QgKi8KKworc3RydWN0IGpwZWdfcHJvZ3Jlc3NfbWdyIHsKKyAgSk1FVEhPRCh2b2lkLCBwcm9ncmVzc19tb25pdG9yLCAoal9jb21tb25fcHRyIGNpbmZvKSk7CisKKyAgbG9uZyBwYXNzX2NvdW50ZXI7CQkvKiB3b3JrIHVuaXRzIGNvbXBsZXRlZCBpbiB0aGlzIHBhc3MgKi8KKyAgbG9uZyBwYXNzX2xpbWl0OwkJLyogdG90YWwgbnVtYmVyIG9mIHdvcmsgdW5pdHMgaW4gdGhpcyBwYXNzICovCisgIGludCBjb21wbGV0ZWRfcGFzc2VzOwkJLyogcGFzc2VzIGNvbXBsZXRlZCBzbyBmYXIgKi8KKyAgaW50IHRvdGFsX3Bhc3NlczsJCS8qIHRvdGFsIG51bWJlciBvZiBwYXNzZXMgZXhwZWN0ZWQgKi8KK307CisKKworLyogRGF0YSBkZXN0aW5hdGlvbiBvYmplY3QgZm9yIGNvbXByZXNzaW9uICovCisKK3N0cnVjdCBqcGVnX2Rlc3RpbmF0aW9uX21nciB7CisgIEpPQ1RFVCAqIG5leHRfb3V0cHV0X2J5dGU7CS8qID0+IG5leHQgYnl0ZSB0byB3cml0ZSBpbiBidWZmZXIgKi8KKyAgc2l6ZV90IGZyZWVfaW5fYnVmZmVyOwkvKiAjIG9mIGJ5dGUgc3BhY2VzIHJlbWFpbmluZyBpbiBidWZmZXIgKi8KKworICBKTUVUSE9EKHZvaWQsIGluaXRfZGVzdGluYXRpb24sIChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworICBKTUVUSE9EKGJvb2xlYW4sIGVtcHR5X291dHB1dF9idWZmZXIsIChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworICBKTUVUSE9EKHZvaWQsIHRlcm1fZGVzdGluYXRpb24sIChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworfTsKKworCisvKiBEYXRhIHNvdXJjZSBvYmplY3QgZm9yIGRlY29tcHJlc3Npb24gKi8KKworc3RydWN0IGpwZWdfc291cmNlX21nciB7CisgIGNvbnN0IEpPQ1RFVCAqIG5leHRfaW5wdXRfYnl0ZTsgLyogPT4gbmV4dCBieXRlIHRvIHJlYWQgZnJvbSBidWZmZXIgKi8KKyAgc2l6ZV90IGJ5dGVzX2luX2J1ZmZlcjsJLyogIyBvZiBieXRlcyByZW1haW5pbmcgaW4gYnVmZmVyICovCisKKyAgSk1FVEhPRCh2b2lkLCBpbml0X3NvdXJjZSwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKKyAgSk1FVEhPRChib29sZWFuLCBmaWxsX2lucHV0X2J1ZmZlciwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKKyAgSk1FVEhPRCh2b2lkLCBza2lwX2lucHV0X2RhdGEsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBsb25nIG51bV9ieXRlcykpOworICBKTUVUSE9EKGJvb2xlYW4sIHJlc3luY190b19yZXN0YXJ0LCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IGRlc2lyZWQpKTsKKyAgSk1FVEhPRCh2b2lkLCB0ZXJtX3NvdXJjZSwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKK307CisKKworLyogTWVtb3J5IG1hbmFnZXIgb2JqZWN0LgorICogQWxsb2NhdGVzICJzbWFsbCIgb2JqZWN0cyAoYSBmZXcgSyB0b3RhbCksICJsYXJnZSIgb2JqZWN0cyAodGVucyBvZiBLKSwKKyAqIGFuZCAicmVhbGx5IGJpZyIgb2JqZWN0cyAodmlydHVhbCBhcnJheXMgd2l0aCBiYWNraW5nIHN0b3JlIGlmIG5lZWRlZCkuCisgKiBUaGUgbWVtb3J5IG1hbmFnZXIgZG9lcyBub3QgYWxsb3cgaW5kaXZpZHVhbCBvYmplY3RzIHRvIGJlIGZyZWVkOyByYXRoZXIsCisgKiBlYWNoIGNyZWF0ZWQgb2JqZWN0IGlzIGFzc2lnbmVkIHRvIGEgcG9vbCwgYW5kIHdob2xlIHBvb2xzIGNhbiBiZSBmcmVlZAorICogYXQgb25jZS4gIFRoaXMgaXMgZmFzdGVyIGFuZCBtb3JlIGNvbnZlbmllbnQgdGhhbiByZW1lbWJlcmluZyBleGFjdGx5IHdoYXQKKyAqIHRvIGZyZWUsIGVzcGVjaWFsbHkgd2hlcmUgbWFsbG9jKCkvZnJlZSgpIGFyZSBub3QgdG9vIHNwZWVkeS4KKyAqIE5COiBhbGxvYyByb3V0aW5lcyBuZXZlciByZXR1cm4gTlVMTC4gIFRoZXkgZXhpdCB0byBlcnJvcl9leGl0IGlmIG5vdAorICogc3VjY2Vzc2Z1bC4KKyAqLworCisjZGVmaW5lIEpQT09MX1BFUk1BTkVOVAkwCS8qIGxhc3RzIHVudGlsIG1hc3RlciByZWNvcmQgaXMgZGVzdHJveWVkICovCisjZGVmaW5lIEpQT09MX0lNQUdFCTEJLyogbGFzdHMgdW50aWwgZG9uZSB3aXRoIGltYWdlL2RhdGFzdHJlYW0gKi8KKyNkZWZpbmUgSlBPT0xfTlVNUE9PTFMJMgorCit0eXBlZGVmIHN0cnVjdCBqdmlydF9zYXJyYXlfY29udHJvbCAqIGp2aXJ0X3NhcnJheV9wdHI7Cit0eXBlZGVmIHN0cnVjdCBqdmlydF9iYXJyYXlfY29udHJvbCAqIGp2aXJ0X2JhcnJheV9wdHI7CisKKworc3RydWN0IGpwZWdfbWVtb3J5X21nciB7CisgIC8qIE1ldGhvZCBwb2ludGVycyAqLworICBKTUVUSE9EKHZvaWQgKiwgYWxsb2Nfc21hbGwsIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkLAorCQkJCXNpemVfdCBzaXplb2ZvYmplY3QpKTsKKyAgSk1FVEhPRCh2b2lkICAqLCBhbGxvY19sYXJnZSwgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQsCisJCQkJICAgICBzaXplX3Qgc2l6ZW9mb2JqZWN0KSk7CisgIEpNRVRIT0QoSlNBTVBBUlJBWSwgYWxsb2Nfc2FycmF5LCAoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgcG9vbF9pZCwKKwkJCQkgICAgIEpESU1FTlNJT04gc2FtcGxlc3BlcnJvdywKKwkJCQkgICAgIEpESU1FTlNJT04gbnVtcm93cykpOworICBKTUVUSE9EKEpCTE9DS0FSUkFZLCBhbGxvY19iYXJyYXksIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkLAorCQkJCSAgICAgIEpESU1FTlNJT04gYmxvY2tzcGVycm93LAorCQkJCSAgICAgIEpESU1FTlNJT04gbnVtcm93cykpOworICBKTUVUSE9EKGp2aXJ0X3NhcnJheV9wdHIsIHJlcXVlc3RfdmlydF9zYXJyYXksIChqX2NvbW1vbl9wdHIgY2luZm8sCisJCQkJCQkgIGludCBwb29sX2lkLAorCQkJCQkJICBib29sZWFuIHByZV96ZXJvLAorCQkJCQkJICBKRElNRU5TSU9OIHNhbXBsZXNwZXJyb3csCisJCQkJCQkgIEpESU1FTlNJT04gbnVtcm93cywKKwkJCQkJCSAgSkRJTUVOU0lPTiBtYXhhY2Nlc3MpKTsKKyAgSk1FVEhPRChqdmlydF9iYXJyYXlfcHRyLCByZXF1ZXN0X3ZpcnRfYmFycmF5LCAoal9jb21tb25fcHRyIGNpbmZvLAorCQkJCQkJICBpbnQgcG9vbF9pZCwKKwkJCQkJCSAgYm9vbGVhbiBwcmVfemVybywKKwkJCQkJCSAgSkRJTUVOU0lPTiBibG9ja3NwZXJyb3csCisJCQkJCQkgIEpESU1FTlNJT04gbnVtcm93cywKKwkJCQkJCSAgSkRJTUVOU0lPTiBtYXhhY2Nlc3MpKTsKKyAgSk1FVEhPRCh2b2lkLCByZWFsaXplX3ZpcnRfYXJyYXlzLCAoal9jb21tb25fcHRyIGNpbmZvKSk7CisgIEpNRVRIT0QoSlNBTVBBUlJBWSwgYWNjZXNzX3ZpcnRfc2FycmF5LCAoal9jb21tb25fcHRyIGNpbmZvLAorCQkJCQkgICBqdmlydF9zYXJyYXlfcHRyIHB0ciwKKwkJCQkJICAgSkRJTUVOU0lPTiBzdGFydF9yb3csCisJCQkJCSAgIEpESU1FTlNJT04gbnVtX3Jvd3MsCisJCQkJCSAgIGJvb2xlYW4gd3JpdGFibGUpKTsKKyAgSk1FVEhPRChKQkxPQ0tBUlJBWSwgYWNjZXNzX3ZpcnRfYmFycmF5LCAoal9jb21tb25fcHRyIGNpbmZvLAorCQkJCQkgICAganZpcnRfYmFycmF5X3B0ciBwdHIsCisJCQkJCSAgICBKRElNRU5TSU9OIHN0YXJ0X3JvdywKKwkJCQkJICAgIEpESU1FTlNJT04gbnVtX3Jvd3MsCisJCQkJCSAgICBib29sZWFuIHdyaXRhYmxlKSk7CisgIEpNRVRIT0Qodm9pZCwgZnJlZV9wb29sLCAoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgcG9vbF9pZCkpOworICBKTUVUSE9EKHZvaWQsIHNlbGZfZGVzdHJ1Y3QsIChqX2NvbW1vbl9wdHIgY2luZm8pKTsKKworICAvKiBMaW1pdCBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgdGhpcyBKUEVHIG9iamVjdC4gIChOb3RlIHRoYXQgdGhpcyBpcworICAgKiBtZXJlbHkgYWR2aXNvcnksIG5vdCBhIGd1YXJhbnRlZWQgbWF4aW11bTsgaXQgb25seSBhZmZlY3RzIHRoZSBzcGFjZQorICAgKiB1c2VkIGZvciB2aXJ0dWFsLWFycmF5IGJ1ZmZlcnMuKSAgTWF5IGJlIGNoYW5nZWQgYnkgb3V0ZXIgYXBwbGljYXRpb24KKyAgICogYWZ0ZXIgY3JlYXRpbmcgdGhlIEpQRUcgb2JqZWN0LgorICAgKi8KKyAgbG9uZyBtYXhfbWVtb3J5X3RvX3VzZTsKKworICAvKiBNYXhpbXVtIGFsbG9jYXRpb24gcmVxdWVzdCBhY2NlcHRlZCBieSBhbGxvY19sYXJnZS4gKi8KKyAgbG9uZyBtYXhfYWxsb2NfY2h1bms7Cit9OworCisKKy8qIFJvdXRpbmUgc2lnbmF0dXJlIGZvciBhcHBsaWNhdGlvbi1zdXBwbGllZCBtYXJrZXIgcHJvY2Vzc2luZyBtZXRob2RzLgorICogTmVlZCBub3QgcGFzcyBtYXJrZXIgY29kZSBzaW5jZSBpdCBpcyBzdG9yZWQgaW4gY2luZm8tPnVucmVhZF9tYXJrZXIuCisgKi8KK3R5cGVkZWYgSk1FVEhPRChib29sZWFuLCBqcGVnX21hcmtlcl9wYXJzZXJfbWV0aG9kLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworCisKKy8qIERlY2xhcmF0aW9ucyBmb3Igcm91dGluZXMgY2FsbGVkIGJ5IGFwcGxpY2F0aW9uLgorICogVGhlIEpQUCBtYWNybyBoaWRlcyBwcm90b3R5cGUgcGFyYW1ldGVycyBmcm9tIGNvbXBpbGVycyB0aGF0IGNhbid0IGNvcGUuCisgKiBOb3RlIEpQUCByZXF1aXJlcyBkb3VibGUgcGFyZW50aGVzZXMuCisgKi8KKworI2lmZGVmIEhBVkVfUFJPVE9UWVBFUworI2RlZmluZSBKUFAoYXJnbGlzdCkJYXJnbGlzdAorI2Vsc2UKKyNkZWZpbmUgSlBQKGFyZ2xpc3QpCSgpCisjZW5kaWYKKworCisvKiBTaG9ydCBmb3JtcyBvZiBleHRlcm5hbCBuYW1lcyBmb3Igc3lzdGVtcyB3aXRoIGJyYWluLWRhbWFnZWQgbGlua2Vycy4KKyAqIFdlIHNob3J0ZW4gZXh0ZXJuYWwgbmFtZXMgdG8gYmUgdW5pcXVlIGluIHRoZSBmaXJzdCBzaXggbGV0dGVycywgd2hpY2gKKyAqIGlzIGdvb2QgZW5vdWdoIGZvciBhbGwga25vd24gc3lzdGVtcy4KKyAqIChJZiB5b3VyIGNvbXBpbGVyIGl0c2VsZiBuZWVkcyBuYW1lcyB0byBiZSB1bmlxdWUgaW4gbGVzcyB0aGFuIDE1IAorICogY2hhcmFjdGVycywgeW91IGFyZSBvdXQgb2YgbHVjay4gIEdldCBhIGJldHRlciBjb21waWxlci4pCisgKi8KKworI2lmZGVmIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMKKyNkZWZpbmUganBlZ19zdGRfZXJyb3IJCWpTdGRFcnJvcgorI2RlZmluZSBqcGVnX0NyZWF0ZUNvbXByZXNzCWpDcmVhQ29tcHJlc3MKKyNkZWZpbmUganBlZ19DcmVhdGVEZWNvbXByZXNzCWpDcmVhRGVjb21wcmVzcworI2RlZmluZSBqcGVnX2Rlc3Ryb3lfY29tcHJlc3MJakRlc3RDb21wcmVzcworI2RlZmluZSBqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcwlqRGVzdERlY29tcHJlc3MKKyNkZWZpbmUganBlZ19zdGRpb19kZXN0CQlqU3RkRGVzdAorI2RlZmluZSBqcGVnX3N0ZGlvX3NyYwkJalN0ZFNyYworI2RlZmluZSBqcGVnX3NldF9kZWZhdWx0cwlqU2V0RGVmYXVsdHMKKyNkZWZpbmUganBlZ19zZXRfY29sb3JzcGFjZQlqU2V0Q29sb3JzcGFjZQorI2RlZmluZSBqcGVnX2RlZmF1bHRfY29sb3JzcGFjZQlqRGVmQ29sb3JzcGFjZQorI2RlZmluZSBqcGVnX3NldF9xdWFsaXR5CWpTZXRRdWFsaXR5CisjZGVmaW5lIGpwZWdfc2V0X2xpbmVhcl9xdWFsaXR5CWpTZXRMUXVhbGl0eQorI2RlZmluZSBqcGVnX2FkZF9xdWFudF90YWJsZQlqQWRkUXVhbnRUYWJsZQorI2RlZmluZSBqcGVnX3F1YWxpdHlfc2NhbGluZwlqUXVhbGl0eVNjYWxpbmcKKyNkZWZpbmUganBlZ19zaW1wbGVfcHJvZ3Jlc3Npb24JalNpbVByb2dyZXNzCisjZGVmaW5lIGpwZWdfc3VwcHJlc3NfdGFibGVzCWpTdXBwcmVzc1RhYmxlcworI2RlZmluZSBqcGVnX2FsbG9jX3F1YW50X3RhYmxlCWpBbGNRVGFibGUKKyNkZWZpbmUganBlZ19hbGxvY19odWZmX3RhYmxlCWpBbGNIVGFibGUKKyNkZWZpbmUganBlZ19zdGFydF9jb21wcmVzcwlqU3RydENvbXByZXNzCisjZGVmaW5lIGpwZWdfd3JpdGVfc2NhbmxpbmVzCWpXcnRTY2FubGluZXMKKyNkZWZpbmUganBlZ19maW5pc2hfY29tcHJlc3MJakZpbkNvbXByZXNzCisjZGVmaW5lIGpwZWdfd3JpdGVfcmF3X2RhdGEJaldydFJhd0RhdGEKKyNkZWZpbmUganBlZ193cml0ZV9tYXJrZXIJaldydE1hcmtlcgorI2RlZmluZSBqcGVnX3dyaXRlX21faGVhZGVyCWpXcnRNSGVhZGVyCisjZGVmaW5lIGpwZWdfd3JpdGVfbV9ieXRlCWpXcnRNQnl0ZQorI2RlZmluZSBqcGVnX3dyaXRlX3RhYmxlcwlqV3J0VGFibGVzCisjZGVmaW5lIGpwZWdfcmVhZF9oZWFkZXIJalJlYWRIZWFkZXIKKyNkZWZpbmUganBlZ19zdGFydF9kZWNvbXByZXNzCWpTdHJ0RGVjb21wcmVzcworI2RlZmluZSBqcGVnX3JlYWRfc2NhbmxpbmVzCWpSZWFkU2NhbmxpbmVzCisjZGVmaW5lIGpwZWdfZmluaXNoX2RlY29tcHJlc3MJakZpbkRlY29tcHJlc3MKKyNkZWZpbmUganBlZ19yZWFkX3Jhd19kYXRhCWpSZWFkUmF3RGF0YQorI2RlZmluZSBqcGVnX2hhc19tdWx0aXBsZV9zY2FucwlqSGFzTXVsdFNjbgorI2RlZmluZSBqcGVnX3N0YXJ0X291dHB1dAlqU3RydE91dHB1dAorI2RlZmluZSBqcGVnX2ZpbmlzaF9vdXRwdXQJakZpbk91dHB1dAorI2RlZmluZSBqcGVnX2lucHV0X2NvbXBsZXRlCWpJbkNvbXBsZXRlCisjZGVmaW5lIGpwZWdfbmV3X2NvbG9ybWFwCWpOZXdDTWFwCisjZGVmaW5lIGpwZWdfY29uc3VtZV9pbnB1dAlqQ29uc3VtZUlucHV0CisjZGVmaW5lIGpwZWdfY2FsY19vdXRwdXRfZGltZW5zaW9ucwlqQ2FsY0RpbWVuc2lvbnMKKyNkZWZpbmUganBlZ19zYXZlX21hcmtlcnMJalNhdmVNYXJrZXJzCisjZGVmaW5lIGpwZWdfc2V0X21hcmtlcl9wcm9jZXNzb3IJalNldE1hcmtlcgorI2RlZmluZSBqcGVnX3JlYWRfY29lZmZpY2llbnRzCWpSZWFkQ29lZnMKKyNkZWZpbmUganBlZ193cml0ZV9jb2VmZmljaWVudHMJaldydENvZWZzCisjZGVmaW5lIGpwZWdfY29weV9jcml0aWNhbF9wYXJhbWV0ZXJzCWpDb3B5Q3JpdAorI2RlZmluZSBqcGVnX2Fib3J0X2NvbXByZXNzCWpBYnJ0Q29tcHJlc3MKKyNkZWZpbmUganBlZ19hYm9ydF9kZWNvbXByZXNzCWpBYnJ0RGVjb21wcmVzcworI2RlZmluZSBqcGVnX2Fib3J0CQlqQWJvcnQKKyNkZWZpbmUganBlZ19kZXN0cm95CQlqRGVzdHJveQorI2RlZmluZSBqcGVnX3Jlc3luY190b19yZXN0YXJ0CWpSZXN5bmNSZXN0YXJ0CisjZW5kaWYgLyogTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUyAqLworCisKKy8qIERlZmF1bHQgZXJyb3ItbWFuYWdlbWVudCBzZXR1cCAqLworRVhURVJOKHN0cnVjdCBqcGVnX2Vycm9yX21nciAqKSBqcGVnX3N0ZF9lcnJvcgorCUpQUCgoc3RydWN0IGpwZWdfZXJyb3JfbWdyICogZXJyKSk7CisKKy8qIEluaXRpYWxpemF0aW9uIG9mIEpQRUcgY29tcHJlc3Npb24gb2JqZWN0cy4KKyAqIGpwZWdfY3JlYXRlX2NvbXByZXNzKCkgYW5kIGpwZWdfY3JlYXRlX2RlY29tcHJlc3MoKSBhcmUgdGhlIGV4cG9ydGVkCisgKiBuYW1lcyB0aGF0IGFwcGxpY2F0aW9ucyBzaG91bGQgY2FsbC4gIFRoZXNlIGV4cGFuZCB0byBjYWxscyBvbgorICoganBlZ19DcmVhdGVDb21wcmVzcyBhbmQganBlZ19DcmVhdGVEZWNvbXByZXNzIHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcGFzc2VkIGZvciB2ZXJzaW9uIG1pc21hdGNoIGNoZWNraW5nLgorICogTkI6IHlvdSBtdXN0IHNldCB1cCB0aGUgZXJyb3ItbWFuYWdlciBCRUZPUkUgY2FsbGluZyBqcGVnX2NyZWF0ZV94eHguCisgKi8KKyNkZWZpbmUganBlZ19jcmVhdGVfY29tcHJlc3MoY2luZm8pIFwKKyAgICBqcGVnX0NyZWF0ZUNvbXByZXNzKChjaW5mbyksIEpQRUdfTElCX1ZFUlNJT04sIFwKKwkJCShzaXplX3QpIHNpemVvZihzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3QpKQorI2RlZmluZSBqcGVnX2NyZWF0ZV9kZWNvbXByZXNzKGNpbmZvKSBcCisgICAganBlZ19DcmVhdGVEZWNvbXByZXNzKChjaW5mbyksIEpQRUdfTElCX1ZFUlNJT04sIFwKKwkJCSAgKHNpemVfdCkgc2l6ZW9mKHN0cnVjdCBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KSkKK0VYVEVSTih2b2lkKSBqcGVnX0NyZWF0ZUNvbXByZXNzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCisJCQkJICAgICAgaW50IHZlcnNpb24sIHNpemVfdCBzdHJ1Y3RzaXplKSk7CitFWFRFUk4odm9pZCkganBlZ19DcmVhdGVEZWNvbXByZXNzIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJaW50IHZlcnNpb24sIHNpemVfdCBzdHJ1Y3RzaXplKSk7CisvKiBEZXN0cnVjdGlvbiBvZiBKUEVHIGNvbXByZXNzaW9uIG9iamVjdHMgKi8KK0VYVEVSTih2b2lkKSBqcGVnX2Rlc3Ryb3lfY29tcHJlc3MgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKHZvaWQpIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworCisjaWYgMAorLyogU3RhbmRhcmQgZGF0YSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG1hbmFnZXJzOiBzdGRpbyBzdHJlYW1zLiAqLworLyogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBvcGVuaW5nIHRoZSBmaWxlIGJlZm9yZSBhbmQgY2xvc2luZyBhZnRlci4gKi8KK0VYVEVSTih2b2lkKSBqcGVnX3N0ZGlvX2Rlc3QgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgRlhTWVNfRklMRSAqIG91dGZpbGUpKTsKK0VYVEVSTih2b2lkKSBqcGVnX3N0ZGlvX3NyYyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEZYU1lTX0ZJTEUgKiBpbmZpbGUpKTsKKyNlbmRpZgorCisvKiBEZWZhdWx0IHBhcmFtZXRlciBzZXR1cCBmb3IgY29tcHJlc3Npb24gKi8KK0VYVEVSTih2b2lkKSBqcGVnX3NldF9kZWZhdWx0cyBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CisvKiBDb21wcmVzc2lvbiBwYXJhbWV0ZXIgc2V0dXAgYWlkcyAqLworRVhURVJOKHZvaWQpIGpwZWdfc2V0X2NvbG9yc3BhY2UgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkgICAgICBKX0NPTE9SX1NQQUNFIGNvbG9yc3BhY2UpKTsKK0VYVEVSTih2b2lkKSBqcGVnX2RlZmF1bHRfY29sb3JzcGFjZSBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CitFWFRFUk4odm9pZCkganBlZ19zZXRfcXVhbGl0eSBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgcXVhbGl0eSwKKwkJCQkgICBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKSk7CitFWFRFUk4odm9pZCkganBlZ19zZXRfbGluZWFyX3F1YWxpdHkgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJICBpbnQgc2NhbGVfZmFjdG9yLAorCQkJCQkgIGJvb2xlYW4gZm9yY2VfYmFzZWxpbmUpKTsKK0VYVEVSTih2b2lkKSBqcGVnX2FkZF9xdWFudF90YWJsZSBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgd2hpY2hfdGJsLAorCQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKmJhc2ljX3RhYmxlLAorCQkJCSAgICAgICBpbnQgc2NhbGVfZmFjdG9yLAorCQkJCSAgICAgICBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKSk7CitFWFRFUk4oaW50KSBqcGVnX3F1YWxpdHlfc2NhbGluZyBKUFAoKGludCBxdWFsaXR5KSk7CitFWFRFUk4odm9pZCkganBlZ19zaW1wbGVfcHJvZ3Jlc3Npb24gSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKHZvaWQpIGpwZWdfc3VwcHJlc3NfdGFibGVzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCisJCQkJICAgICAgIGJvb2xlYW4gc3VwcHJlc3MpKTsKK0VYVEVSTihKUVVBTlRfVEJMICopIGpwZWdfYWxsb2NfcXVhbnRfdGFibGUgSlBQKChqX2NvbW1vbl9wdHIgY2luZm8pKTsKK0VYVEVSTihKSFVGRl9UQkwgKikganBlZ19hbGxvY19odWZmX3RhYmxlIEpQUCgoal9jb21tb25fcHRyIGNpbmZvKSk7CisKKy8qIE1haW4gZW50cnkgcG9pbnRzIGZvciBjb21wcmVzc2lvbiAqLworRVhURVJOKHZvaWQpIGpwZWdfc3RhcnRfY29tcHJlc3MgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkgICAgICBib29sZWFuIHdyaXRlX2FsbF90YWJsZXMpKTsKK0VYVEVSTihKRElNRU5TSU9OKSBqcGVnX3dyaXRlX3NjYW5saW5lcyBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCQkgICAgIEpTQU1QQVJSQVkgc2NhbmxpbmVzLAorCQkJCQkgICAgIEpESU1FTlNJT04gbnVtX2xpbmVzKSk7CitFWFRFUk4odm9pZCkganBlZ19maW5pc2hfY29tcHJlc3MgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworCisvKiBSZXBsYWNlcyBqcGVnX3dyaXRlX3NjYW5saW5lcyB3aGVuIHdyaXRpbmcgcmF3IGRvd25zYW1wbGVkIGRhdGEuICovCitFWFRFUk4oSkRJTUVOU0lPTikganBlZ193cml0ZV9yYXdfZGF0YSBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCQkgICAgSlNBTVBJTUFHRSBkYXRhLAorCQkJCQkgICAgSkRJTUVOU0lPTiBudW1fbGluZXMpKTsKKworLyogV3JpdGUgYSBzcGVjaWFsIG1hcmtlci4gIFNlZSBsaWJqcGVnLmRvYyBjb25jZXJuaW5nIHNhZmUgdXNhZ2UuICovCitFWFRFUk4odm9pZCkganBlZ193cml0ZV9tYXJrZXIKKwlKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyLAorCSAgICAgY29uc3QgSk9DVEVUICogZGF0YXB0ciwgdW5zaWduZWQgaW50IGRhdGFsZW4pKTsKKy8qIFNhbWUsIGJ1dCBwaWVjZW1lYWwuICovCitFWFRFUk4odm9pZCkganBlZ193cml0ZV9tX2hlYWRlcgorCUpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGludCBtYXJrZXIsIHVuc2lnbmVkIGludCBkYXRhbGVuKSk7CitFWFRFUk4odm9pZCkganBlZ193cml0ZV9tX2J5dGUKKwlKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgdmFsKSk7CisKKy8qIEFsdGVybmF0ZSBjb21wcmVzc2lvbiBmdW5jdGlvbjoganVzdCB3cml0ZSBhbiBhYmJyZXZpYXRlZCB0YWJsZSBmaWxlICovCitFWFRFUk4odm9pZCkganBlZ193cml0ZV90YWJsZXMgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworCisvKiBEZWNvbXByZXNzaW9uIHN0YXJ0dXA6IHJlYWQgc3RhcnQgb2YgSlBFRyBkYXRhc3RyZWFtIHRvIHNlZSB3aGF0J3MgdGhlcmUgKi8KK0VYVEVSTihpbnQpIGpwZWdfcmVhZF9oZWFkZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCSAgYm9vbGVhbiByZXF1aXJlX2ltYWdlKSk7CisvKiBSZXR1cm4gdmFsdWUgaXMgb25lIG9mOiAqLworI2RlZmluZSBKUEVHX1NVU1BFTkRFRAkJMCAvKiBTdXNwZW5kZWQgZHVlIHRvIGxhY2sgb2YgaW5wdXQgZGF0YSAqLworI2RlZmluZSBKUEVHX0hFQURFUl9PSwkJMSAvKiBGb3VuZCB2YWxpZCBpbWFnZSBkYXRhc3RyZWFtICovCisjZGVmaW5lIEpQRUdfSEVBREVSX1RBQkxFU19PTkxZCTIgLyogRm91bmQgdmFsaWQgdGFibGUtc3BlY3Mtb25seSBkYXRhc3RyZWFtICovCisvKiBJZiB5b3UgcGFzcyByZXF1aXJlX2ltYWdlID0gVFJVRSAobm9ybWFsIGNhc2UpLCB5b3UgbmVlZCBub3QgY2hlY2sgZm9yCisgKiBhIFRBQkxFU19PTkxZIHJldHVybiBjb2RlOyBhbiBhYmJyZXZpYXRlZCBmaWxlIHdpbGwgY2F1c2UgYW4gZXJyb3IgZXhpdC4KKyAqIEpQRUdfU1VTUEVOREVEIGlzIG9ubHkgcG9zc2libGUgaWYgeW91IHVzZSBhIGRhdGEgc291cmNlIG1vZHVsZSB0aGF0IGNhbgorICogZ2l2ZSBhIHN1c3BlbnNpb24gcmV0dXJuICh0aGUgc3RkaW8gc291cmNlIG1vZHVsZSBkb2Vzbid0KS4KKyAqLworCisvKiBNYWluIGVudHJ5IHBvaW50cyBmb3IgZGVjb21wcmVzc2lvbiAqLworRVhURVJOKGJvb2xlYW4pIGpwZWdfc3RhcnRfZGVjb21wcmVzcyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTihKRElNRU5TSU9OKSBqcGVnX3JlYWRfc2NhbmxpbmVzIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJICAgIEpTQU1QQVJSQVkgc2NhbmxpbmVzLAorCQkJCQkgICAgSkRJTUVOU0lPTiBtYXhfbGluZXMpKTsKK0VYVEVSTihib29sZWFuKSBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworCisvKiBSZXBsYWNlcyBqcGVnX3JlYWRfc2NhbmxpbmVzIHdoZW4gcmVhZGluZyByYXcgZG93bnNhbXBsZWQgZGF0YS4gKi8KK0VYVEVSTihKRElNRU5TSU9OKSBqcGVnX3JlYWRfcmF3X2RhdGEgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCQkgICBKU0FNUElNQUdFIGRhdGEsCisJCQkJCSAgIEpESU1FTlNJT04gbWF4X2xpbmVzKSk7CisKKy8qIEFkZGl0aW9uYWwgZW50cnkgcG9pbnRzIGZvciBidWZmZXJlZC1pbWFnZSBtb2RlLiAqLworRVhURVJOKGJvb2xlYW4pIGpwZWdfaGFzX211bHRpcGxlX3NjYW5zIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKGJvb2xlYW4pIGpwZWdfc3RhcnRfb3V0cHV0IEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkgICAgICAgaW50IHNjYW5fbnVtYmVyKSk7CitFWFRFUk4oYm9vbGVhbikganBlZ19maW5pc2hfb3V0cHV0IEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKGJvb2xlYW4pIGpwZWdfaW5wdXRfY29tcGxldGUgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CitFWFRFUk4odm9pZCkganBlZ19uZXdfY29sb3JtYXAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CitFWFRFUk4oaW50KSBqcGVnX2NvbnN1bWVfaW5wdXQgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CisvKiBSZXR1cm4gdmFsdWUgaXMgb25lIG9mOiAqLworLyogI2RlZmluZSBKUEVHX1NVU1BFTkRFRAkwICAgIFN1c3BlbmRlZCBkdWUgdG8gbGFjayBvZiBpbnB1dCBkYXRhICovCisjZGVmaW5lIEpQRUdfUkVBQ0hFRF9TT1MJMSAvKiBSZWFjaGVkIHN0YXJ0IG9mIG5ldyBzY2FuICovCisjZGVmaW5lIEpQRUdfUkVBQ0hFRF9FT0kJMiAvKiBSZWFjaGVkIGVuZCBvZiBpbWFnZSAqLworI2RlZmluZSBKUEVHX1JPV19DT01QTEVURUQJMyAvKiBDb21wbGV0ZWQgb25lIGlNQ1Ugcm93ICovCisjZGVmaW5lIEpQRUdfU0NBTl9DT01QTEVURUQJNCAvKiBDb21wbGV0ZWQgbGFzdCBpTUNVIHJvdyBvZiBhIHNjYW4gKi8KKworLyogUHJlY2FsY3VsYXRlIG91dHB1dCBkaW1lbnNpb25zIGZvciBjdXJyZW50IGRlY29tcHJlc3Npb24gcGFyYW1ldGVycy4gKi8KK0VYVEVSTih2b2lkKSBqcGVnX2NhbGNfb3V0cHV0X2RpbWVuc2lvbnMgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CisKKy8qIENvbnRyb2wgc2F2aW5nIG9mIENPTSBhbmQgQVBQbiBtYXJrZXJzIGludG8gbWFya2VyX2xpc3QuICovCitFWFRFUk4odm9pZCkganBlZ19zYXZlX21hcmtlcnMKKwlKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGludCBtYXJrZXJfY29kZSwKKwkgICAgIHVuc2lnbmVkIGludCBsZW5ndGhfbGltaXQpKTsKKworLyogSW5zdGFsbCBhIHNwZWNpYWwgcHJvY2Vzc2luZyBtZXRob2QgZm9yIENPTSBvciBBUFBuIG1hcmtlcnMuICovCitFWFRFUk4odm9pZCkganBlZ19zZXRfbWFya2VyX3Byb2Nlc3NvcgorCUpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IG1hcmtlcl9jb2RlLAorCSAgICAganBlZ19tYXJrZXJfcGFyc2VyX21ldGhvZCByb3V0aW5lKSk7CisKKy8qIFJlYWQgb3Igd3JpdGUgcmF3IERDVCBjb2VmZmljaWVudHMgLS0tIHVzZWZ1bCBmb3IgbG9zc2xlc3MgdHJhbnNjb2RpbmcuICovCitFWFRFUk4oanZpcnRfYmFycmF5X3B0ciAqKSBqcGVnX3JlYWRfY29lZmZpY2llbnRzIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKHZvaWQpIGpwZWdfd3JpdGVfY29lZmZpY2llbnRzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCisJCQkJCSAganZpcnRfYmFycmF5X3B0ciAqIGNvZWZfYXJyYXlzKSk7CitFWFRFUk4odm9pZCkganBlZ19jb3B5X2NyaXRpY2FsX3BhcmFtZXRlcnMgSlBQKChqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8sCisJCQkJCQlqX2NvbXByZXNzX3B0ciBkc3RpbmZvKSk7CisKKy8qIElmIHlvdSBjaG9vc2UgdG8gYWJvcnQgY29tcHJlc3Npb24gb3IgZGVjb21wcmVzc2lvbiBiZWZvcmUgY29tcGxldGluZworICoganBlZ19maW5pc2hfKGRlKWNvbXByZXNzLCB0aGVuIHlvdSBuZWVkIHRvIGNsZWFuIHVwIHRvIHJlbGVhc2UgbWVtb3J5LAorICogdGVtcG9yYXJ5IGZpbGVzLCBldGMuICBZb3UgY2FuIGp1c3QgY2FsbCBqcGVnX2Rlc3Ryb3lfKGRlKWNvbXByZXNzCisgKiBpZiB5b3UncmUgZG9uZSB3aXRoIHRoZSBKUEVHIG9iamVjdCwgYnV0IGlmIHlvdSB3YW50IHRvIGNsZWFuIGl0IHVwIGFuZAorICogcmV1c2UgaXQsIGNhbGwgdGhpczoKKyAqLworRVhURVJOKHZvaWQpIGpwZWdfYWJvcnRfY29tcHJlc3MgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKHZvaWQpIGpwZWdfYWJvcnRfZGVjb21wcmVzcyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKKworLyogR2VuZXJpYyB2ZXJzaW9ucyBvZiBqcGVnX2Fib3J0IGFuZCBqcGVnX2Rlc3Ryb3kgdGhhdCB3b3JrIG9uIGVpdGhlcgorICogZmxhdm9yIG9mIEpQRUcgb2JqZWN0LiAgVGhlc2UgbWF5IGJlIG1vcmUgY29udmVuaWVudCBpbiBzb21lIHBsYWNlcy4KKyAqLworRVhURVJOKHZvaWQpIGpwZWdfYWJvcnQgSlBQKChqX2NvbW1vbl9wdHIgY2luZm8pKTsKK0VYVEVSTih2b2lkKSBqcGVnX2Rlc3Ryb3kgSlBQKChqX2NvbW1vbl9wdHIgY2luZm8pKTsKKworLyogRGVmYXVsdCByZXN0YXJ0LW1hcmtlci1yZXN5bmMgcHJvY2VkdXJlIGZvciB1c2UgYnkgZGF0YSBzb3VyY2UgbW9kdWxlcyAqLworRVhURVJOKGJvb2xlYW4pIGpwZWdfcmVzeW5jX3RvX3Jlc3RhcnQgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCQkgICAgaW50IGRlc2lyZWQpKTsKKworCisvKiBUaGVzZSBtYXJrZXIgY29kZXMgYXJlIGV4cG9ydGVkIHNpbmNlIGFwcGxpY2F0aW9ucyBhbmQgZGF0YSBzb3VyY2UgbW9kdWxlcworICogYXJlIGxpa2VseSB0byB3YW50IHRvIHVzZSB0aGVtLgorICovCisKKyNkZWZpbmUgSlBFR19SU1QwCTB4RDAJLyogUlNUMCBtYXJrZXIgY29kZSAqLworI2RlZmluZSBKUEVHX0VPSQkweEQ5CS8qIEVPSSBtYXJrZXIgY29kZSAqLworI2RlZmluZSBKUEVHX0FQUDAJMHhFMAkvKiBBUFAwIG1hcmtlciBjb2RlICovCisjZGVmaW5lIEpQRUdfQ09NCTB4RkUJLyogQ09NIG1hcmtlciBjb2RlICovCisKKworLyogSWYgd2UgaGF2ZSBhIGJyYWluLWRhbWFnZWQgY29tcGlsZXIgdGhhdCBlbWl0cyB3YXJuaW5ncyAob3Igd29yc2UsIGVycm9ycykKKyAqIGZvciBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgdGhhdCBhcmUgbmV2ZXIgZmlsbGVkIGluLCBrZWVwIGl0IHF1aWV0IGJ5CisgKiBzdXBwbHlpbmcgZHVtbXkgZGVmaW5pdGlvbnMgZm9yIHRoZSB2YXJpb3VzIHN1YnN0cnVjdHVyZXMuCisgKi8KKworI2lmZGVmIElOQ09NUExFVEVfVFlQRVNfQlJPS0VOCisjaWZuZGVmIEpQRUdfSU5URVJOQUxTCQkvKiB3aWxsIGJlIGRlZmluZWQgaW4ganBlZ2ludC5oICovCitzdHJ1Y3QganZpcnRfc2FycmF5X2NvbnRyb2wgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGp2aXJ0X2JhcnJheV9jb250cm9sIHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqcGVnX2NvbXBfbWFzdGVyIHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqcGVnX2NfbWFpbl9jb250cm9sbGVyIHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqcGVnX2NfcHJlcF9jb250cm9sbGVyIHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqcGVnX2NfY29lZl9jb250cm9sbGVyIHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqcGVnX21hcmtlcl93cml0ZXIgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGpwZWdfY29sb3JfY29udmVydGVyIHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqcGVnX2Rvd25zYW1wbGVyIHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqcGVnX2ZvcndhcmRfZGN0IHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqcGVnX2VudHJvcHlfZW5jb2RlciB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganBlZ19kZWNvbXBfbWFzdGVyIHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqcGVnX2RfbWFpbl9jb250cm9sbGVyIHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqcGVnX2RfY29lZl9jb250cm9sbGVyIHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqcGVnX2RfcG9zdF9jb250cm9sbGVyIHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqcGVnX2lucHV0X2NvbnRyb2xsZXIgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGpwZWdfbWFya2VyX3JlYWRlciB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganBlZ19lbnRyb3B5X2RlY29kZXIgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGpwZWdfaW52ZXJzZV9kY3QgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGpwZWdfdXBzYW1wbGVyIHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqcGVnX2NvbG9yX2RlY29udmVydGVyIHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqcGVnX2NvbG9yX3F1YW50aXplciB7IGxvbmcgZHVtbXk7IH07CisjZW5kaWYgLyogSlBFR19JTlRFUk5BTFMgKi8KKyNlbmRpZiAvKiBJTkNPTVBMRVRFX1RZUEVTX0JST0tFTiAqLworCisKKy8qCisgKiBUaGUgSlBFRyBsaWJyYXJ5IG1vZHVsZXMgZGVmaW5lIEpQRUdfSU5URVJOQUxTIGJlZm9yZSBpbmNsdWRpbmcgdGhpcyBmaWxlLgorICogVGhlIGludGVybmFsIHN0cnVjdHVyZSBkZWNsYXJhdGlvbnMgYXJlIHJlYWQgb25seSB3aGVuIHRoYXQgaXMgdHJ1ZS4KKyAqIEFwcGxpY2F0aW9ucyB1c2luZyB0aGUgbGlicmFyeSBzaG91bGQgbm90IGluY2x1ZGUganBlZ2ludC5oLCBidXQgbWF5IHdpc2gKKyAqIHRvIGluY2x1ZGUgamVycm9yLmguCisgKi8KKworI2lmZGVmIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAianBlZ2ludC5oIgkJLyogZmV0Y2ggcHJpdmF0ZSBkZWNsYXJhdGlvbnMgKi8KKyNpbmNsdWRlICJqZXJyb3IuaCIJCS8qIGZldGNoIGVycm9yIGNvZGVzIHRvbyAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBKUEVHTElCX0ggKi8KZGlmZiAtLWdpdCBhL2NvcmUvaW5jbHVkZS90aGlyZHBhcnRpZXMvemxpYi96Y29uZi5oIGIvY29yZS9pbmNsdWRlL3RoaXJkcGFydGllcy96bGliL3pjb25mLmgKaW5kZXggM2ExZjk2OS4uNTcwOGEzNyAxMDA2NDQKLS0tIGEvY29yZS9pbmNsdWRlL3RoaXJkcGFydGllcy96bGliL3pjb25mLmgKKysrIGIvY29yZS9pbmNsdWRlL3RoaXJkcGFydGllcy96bGliL3pjb25mLmgKQEAgLTEsNTE5ICsxLDUxOSBAQAotLyogemNvbmYuaCAtLSBjb25maWd1cmF0aW9uIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5Lg0KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgNCi0gKi8NCi0NCi0vKiBAKCMpICRJZCQgKi8NCi0NCi0jaWZuZGVmIFpDT05GX0gNCi0jZGVmaW5lIFpDT05GX0gNCi0NCi0vKg0KLSAqIElmIHlvdSAqcmVhbGx5KiBuZWVkIGEgdW5pcXVlIHByZWZpeCBmb3IgYWxsIHR5cGVzIGFuZCBsaWJyYXJ5IGZ1bmN0aW9ucywNCi0gKiBjb21waWxlIHdpdGggLURaX1BSRUZJWC4gVGhlICJzdGFuZGFyZCIgemxpYiBzaG91bGQgYmUgY29tcGlsZWQgd2l0aG91dCBpdC4NCi0gKiBFdmVuIGJldHRlciB0aGFuIGNvbXBpbGluZyB3aXRoIC1EWl9QUkVGSVggd291bGQgYmUgdG8gdXNlIGNvbmZpZ3VyZSB0byBzZXQNCi0gKiB0aGlzIHBlcm1hbmVudGx5IGluIHpjb25mLmggdXNpbmcgIi4vY29uZmlndXJlIC0tenByZWZpeCIuDQotICovDQotI2lmZGVmIFpfUFJFRklYICAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovDQotIyAgZGVmaW5lIFpfUFJFRklYX1NFVA0KLQ0KLS8qIGFsbCBsaW5rZWQgc3ltYm9scyAqLw0KLSMgIGRlZmluZSBfZGlzdF9jb2RlICAgICAgICAgICAgel9fZGlzdF9jb2RlDQotIyAgZGVmaW5lIF9sZW5ndGhfY29kZSAgICAgICAgICB6X19sZW5ndGhfY29kZQ0KLSMgIGRlZmluZSBfdHJfYWxpZ24gICAgICAgICAgICAgel9fdHJfYWxpZ24NCi0jICBkZWZpbmUgX3RyX2ZsdXNoX2JpdHMgICAgICAgIHpfX3RyX2ZsdXNoX2JpdHMNCi0jICBkZWZpbmUgX3RyX2ZsdXNoX2Jsb2NrICAgICAgIHpfX3RyX2ZsdXNoX2Jsb2NrDQotIyAgZGVmaW5lIF90cl9pbml0ICAgICAgICAgICAgICB6X190cl9pbml0DQotIyAgZGVmaW5lIF90cl9zdG9yZWRfYmxvY2sgICAgICB6X190cl9zdG9yZWRfYmxvY2sNCi0jICBkZWZpbmUgX3RyX3RhbGx5ICAgICAgICAgICAgIHpfX3RyX3RhbGx5DQotIyAgZGVmaW5lIGFkbGVyMzIgICAgICAgICAgICAgICB6X2FkbGVyMzINCi0jICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lICAgICAgIHpfYWRsZXIzMl9jb21iaW5lDQotIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZTY0ICAgICB6X2FkbGVyMzJfY29tYmluZTY0DQotIyAgaWZuZGVmIFpfU09MTw0KLSMgICAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzDQotIyAgICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyDQotIyAgICBkZWZpbmUgY29tcHJlc3NCb3VuZCAgICAgICAgIHpfY29tcHJlc3NCb3VuZA0KLSMgIGVuZGlmDQotIyAgZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyDQotIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmUgICAgICAgICB6X2NyYzMyX2NvbWJpbmUNCi0jICBkZWZpbmUgY3JjMzJfY29tYmluZTY0ICAgICAgIHpfY3JjMzJfY29tYmluZTY0DQotIyAgZGVmaW5lIGRlZmxhdGUgICAgICAgICAgICAgICB6X2RlZmxhdGUNCi0jICBkZWZpbmUgZGVmbGF0ZUJvdW5kICAgICAgICAgIHpfZGVmbGF0ZUJvdW5kDQotIyAgZGVmaW5lIGRlZmxhdGVDb3B5ICAgICAgICAgICB6X2RlZmxhdGVDb3B5DQotIyAgZGVmaW5lIGRlZmxhdGVFbmQgICAgICAgICAgICB6X2RlZmxhdGVFbmQNCi0jICBkZWZpbmUgZGVmbGF0ZUluaXQyXyAgICAgICAgIHpfZGVmbGF0ZUluaXQyXw0KLSMgIGRlZmluZSBkZWZsYXRlSW5pdF8gICAgICAgICAgel9kZWZsYXRlSW5pdF8NCi0jICBkZWZpbmUgZGVmbGF0ZVBhcmFtcyAgICAgICAgIHpfZGVmbGF0ZVBhcmFtcw0KLSMgIGRlZmluZSBkZWZsYXRlUGVuZGluZyAgICAgICAgel9kZWZsYXRlUGVuZGluZw0KLSMgIGRlZmluZSBkZWZsYXRlUHJpbWUgICAgICAgICAgel9kZWZsYXRlUHJpbWUNCi0jICBkZWZpbmUgZGVmbGF0ZVJlc2V0ICAgICAgICAgIHpfZGVmbGF0ZVJlc2V0DQotIyAgZGVmaW5lIGRlZmxhdGVSZXNldEtlZXAgICAgICB6X2RlZmxhdGVSZXNldEtlZXANCi0jICBkZWZpbmUgZGVmbGF0ZVNldERpY3Rpb25hcnkgIHpfZGVmbGF0ZVNldERpY3Rpb25hcnkNCi0jICBkZWZpbmUgZGVmbGF0ZVNldEhlYWRlciAgICAgIHpfZGVmbGF0ZVNldEhlYWRlcg0KLSMgIGRlZmluZSBkZWZsYXRlVHVuZSAgICAgICAgICAgel9kZWZsYXRlVHVuZQ0KLSMgIGRlZmluZSBkZWZsYXRlX2NvcHlyaWdodCAgICAgel9kZWZsYXRlX2NvcHlyaWdodA0KLSMgIGRlZmluZSBnZXRfY3JjX3RhYmxlICAgICAgICAgel9nZXRfY3JjX3RhYmxlDQotIyAgaWZuZGVmIFpfU09MTw0KLSMgICAgZGVmaW5lIGd6X2Vycm9yICAgICAgICAgICAgICB6X2d6X2Vycm9yDQotIyAgICBkZWZpbmUgZ3pfaW50bWF4ICAgICAgICAgICAgIHpfZ3pfaW50bWF4DQotIyAgICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3INCi0jICAgIGRlZmluZSBnemJ1ZmZlciAgICAgICAgICAgICAgel9nemJ1ZmZlcg0KLSMgICAgZGVmaW5lIGd6Y2xlYXJlcnIgICAgICAgICAgICB6X2d6Y2xlYXJlcnINCi0jICAgIGRlZmluZSBnemNsb3NlICAgICAgICAgICAgICAgel9nemNsb3NlDQotIyAgICBkZWZpbmUgZ3pjbG9zZV9yICAgICAgICAgICAgIHpfZ3pjbG9zZV9yDQotIyAgICBkZWZpbmUgZ3pjbG9zZV93ICAgICAgICAgICAgIHpfZ3pjbG9zZV93DQotIyAgICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QNCi0jICAgIGRlZmluZSBnemRvcGVuICAgICAgICAgICAgICAgel9nemRvcGVuDQotIyAgICBkZWZpbmUgZ3plb2YgICAgICAgICAgICAgICAgIHpfZ3plb2YNCi0jICAgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9nemVycm9yDQotIyAgICBkZWZpbmUgZ3pmbHVzaCAgICAgICAgICAgICAgIHpfZ3pmbHVzaA0KLSMgICAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0Yw0KLSMgICAgZGVmaW5lIGd6Z2V0Y18gICAgICAgICAgICAgICB6X2d6Z2V0Y18NCi0jICAgIGRlZmluZSBnemdldHMgICAgICAgICAgICAgICAgel9nemdldHMNCi0jICAgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAgel9nem9mZnNldA0KLSMgICAgZGVmaW5lIGd6b2Zmc2V0NjQgICAgICAgICAgICB6X2d6b2Zmc2V0NjQNCi0jICAgIGRlZmluZSBnem9wZW4gICAgICAgICAgICAgICAgel9nem9wZW4NCi0jICAgIGRlZmluZSBnem9wZW42NCAgICAgICAgICAgICAgel9nem9wZW42NA0KLSMgICAgaWZkZWYgX1dJTjMyDQotIyAgICAgIGRlZmluZSBnem9wZW5fdyAgICAgICAgICAgICAgel9nem9wZW5fdw0KLSMgICAgZW5kaWYNCi0jICAgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50Zg0KLSMgICAgZGVmaW5lIGd6dnByaW50ZiAgICAgICAgICAgICB6X2d6dnByaW50Zg0KLSMgICAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0Yw0KLSMgICAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cw0KLSMgICAgZGVmaW5lIGd6cmVhZCAgICAgICAgICAgICAgICB6X2d6cmVhZA0KLSMgICAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kDQotIyAgICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrDQotIyAgICBkZWZpbmUgZ3pzZWVrNjQgICAgICAgICAgICAgIHpfZ3pzZWVrNjQNCi0jICAgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcw0KLSMgICAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbA0KLSMgICAgZGVmaW5lIGd6dGVsbDY0ICAgICAgICAgICAgICB6X2d6dGVsbDY0DQotIyAgICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMNCi0jICAgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlDQotIyAgZW5kaWYNCi0jICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQ0KLSMgIGRlZmluZSBpbmZsYXRlQmFjayAgICAgICAgICAgel9pbmZsYXRlQmFjaw0KLSMgIGRlZmluZSBpbmZsYXRlQmFja0VuZCAgICAgICAgel9pbmZsYXRlQmFja0VuZA0KLSMgIGRlZmluZSBpbmZsYXRlQmFja0luaXRfICAgICAgel9pbmZsYXRlQmFja0luaXRfDQotIyAgZGVmaW5lIGluZmxhdGVDb3B5ICAgICAgICAgICB6X2luZmxhdGVDb3B5DQotIyAgZGVmaW5lIGluZmxhdGVFbmQgICAgICAgICAgICB6X2luZmxhdGVFbmQNCi0jICBkZWZpbmUgaW5mbGF0ZUdldEhlYWRlciAgICAgIHpfaW5mbGF0ZUdldEhlYWRlcg0KLSMgIGRlZmluZSBpbmZsYXRlSW5pdDJfICAgICAgICAgel9pbmZsYXRlSW5pdDJfDQotIyAgZGVmaW5lIGluZmxhdGVJbml0XyAgICAgICAgICB6X2luZmxhdGVJbml0Xw0KLSMgIGRlZmluZSBpbmZsYXRlTWFyayAgICAgICAgICAgel9pbmZsYXRlTWFyaw0KLSMgIGRlZmluZSBpbmZsYXRlUHJpbWUgICAgICAgICAgel9pbmZsYXRlUHJpbWUNCi0jICBkZWZpbmUgaW5mbGF0ZVJlc2V0ICAgICAgICAgIHpfaW5mbGF0ZVJlc2V0DQotIyAgZGVmaW5lIGluZmxhdGVSZXNldDIgICAgICAgICB6X2luZmxhdGVSZXNldDINCi0jICBkZWZpbmUgaW5mbGF0ZVNldERpY3Rpb25hcnkgIHpfaW5mbGF0ZVNldERpY3Rpb25hcnkNCi0jICBkZWZpbmUgaW5mbGF0ZUdldERpY3Rpb25hcnkgIHpfaW5mbGF0ZUdldERpY3Rpb25hcnkNCi0jICBkZWZpbmUgaW5mbGF0ZVN5bmMgICAgICAgICAgIHpfaW5mbGF0ZVN5bmMNCi0jICBkZWZpbmUgaW5mbGF0ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludA0KLSMgIGRlZmluZSBpbmZsYXRlVW5kZXJtaW5lICAgICAgel9pbmZsYXRlVW5kZXJtaW5lDQotIyAgZGVmaW5lIGluZmxhdGVSZXNldEtlZXAgICAgICB6X2luZmxhdGVSZXNldEtlZXANCi0jICBkZWZpbmUgaW5mbGF0ZV9jb3B5cmlnaHQgICAgIHpfaW5mbGF0ZV9jb3B5cmlnaHQNCi0jICBkZWZpbmUgaW5mbGF0ZV9mYXN0ICAgICAgICAgIHpfaW5mbGF0ZV9mYXN0DQotIyAgZGVmaW5lIGluZmxhdGVfdGFibGUgICAgICAgICB6X2luZmxhdGVfdGFibGUNCi0jICBpZm5kZWYgWl9TT0xPDQotIyAgICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcw0KLSMgIGVuZGlmDQotIyAgZGVmaW5lIHpFcnJvciAgICAgICAgICAgICAgICB6X3pFcnJvcg0KLSMgIGlmbmRlZiBaX1NPTE8NCi0jICAgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jDQotIyAgICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlDQotIyAgZW5kaWYNCi0jICBkZWZpbmUgemxpYkNvbXBpbGVGbGFncyAgICAgIHpfemxpYkNvbXBpbGVGbGFncw0KLSMgIGRlZmluZSB6bGliVmVyc2lvbiAgICAgICAgICAgel96bGliVmVyc2lvbg0KLQ0KLS8qIGFsbCB6bGliIHR5cGVkZWZzIGluIHpsaWIuaCBhbmQgemNvbmYuaCAqLw0KLSMgIGRlZmluZSBCeXRlICAgICAgICAgICAgICAgICAgel9CeXRlDQotIyAgZGVmaW5lIEJ5dGVmICAgICAgICAgICAgICAgICB6X0J5dGVmDQotIyAgZGVmaW5lIGFsbG9jX2Z1bmMgICAgICAgICAgICB6X2FsbG9jX2Z1bmMNCi0jICBkZWZpbmUgY2hhcmYgICAgICAgICAgICAgICAgIHpfY2hhcmYNCi0jICBkZWZpbmUgZnJlZV9mdW5jICAgICAgICAgICAgIHpfZnJlZV9mdW5jDQotIyAgaWZuZGVmIFpfU09MTw0KLSMgICAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQ0KLSMgIGVuZGlmDQotIyAgZGVmaW5lIGd6X2hlYWRlciAgICAgICAgICAgICB6X2d6X2hlYWRlcg0KLSMgIGRlZmluZSBnel9oZWFkZXJwICAgICAgICAgICAgel9nel9oZWFkZXJwDQotIyAgZGVmaW5lIGluX2Z1bmMgICAgICAgICAgICAgICB6X2luX2Z1bmMNCi0jICBkZWZpbmUgaW50ZiAgICAgICAgICAgICAgICAgIHpfaW50Zg0KLSMgIGRlZmluZSBvdXRfZnVuYyAgICAgICAgICAgICAgel9vdXRfZnVuYw0KLSMgIGRlZmluZSB1SW50ICAgICAgICAgICAgICAgICAgel91SW50DQotIyAgZGVmaW5lIHVJbnRmICAgICAgICAgICAgICAgICB6X3VJbnRmDQotIyAgZGVmaW5lIHVMb25nICAgICAgICAgICAgICAgICB6X3VMb25nDQotIyAgZGVmaW5lIHVMb25nZiAgICAgICAgICAgICAgICB6X3VMb25nZg0KLSMgIGRlZmluZSB2b2lkcCAgICAgICAgICAgICAgICAgel92b2lkcA0KLSMgIGRlZmluZSB2b2lkcGMgICAgICAgICAgICAgICAgel92b2lkcGMNCi0jICBkZWZpbmUgdm9pZHBmICAgICAgICAgICAgICAgIHpfdm9pZHBmDQotDQotLyogYWxsIHpsaWIgc3RydWN0cyBpbiB6bGliLmggYW5kIHpjb25mLmggKi8NCi0jICBkZWZpbmUgZ3pfaGVhZGVyX3MgICAgICAgICAgIHpfZ3pfaGVhZGVyX3MNCi0jICBkZWZpbmUgaW50ZXJuYWxfc3RhdGUgICAgICAgIHpfaW50ZXJuYWxfc3RhdGUNCi0NCi0jZW5kaWYNCi0NCi0jaWYgZGVmaW5lZChfX01TRE9TX18pICYmICFkZWZpbmVkKE1TRE9TKQ0KLSMgIGRlZmluZSBNU0RPUw0KLSNlbmRpZg0KLSNpZiAoZGVmaW5lZChPU18yKSB8fCBkZWZpbmVkKF9fT1MyX18pKSAmJiAhZGVmaW5lZChPUzIpDQotIyAgZGVmaW5lIE9TMg0KLSNlbmRpZg0KLSNpZiBkZWZpbmVkKF9XSU5ET1dTKSAmJiAhZGVmaW5lZChXSU5ET1dTKQ0KLSMgIGRlZmluZSBXSU5ET1dTDQotI2VuZGlmDQotI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpIHx8IGRlZmluZWQoX19XSU4zMl9fKQ0KLSMgIGlmbmRlZiBXSU4zMg0KLSMgICAgZGVmaW5lIFdJTjMyDQotIyAgZW5kaWYNCi0jZW5kaWYNCi0jaWYgKGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKFdJTkRPV1MpKSAmJiAhZGVmaW5lZChXSU4zMikNCi0jICBpZiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19GTEFUX18pICYmICFkZWZpbmVkKF9fMzg2X18pDQotIyAgICBpZm5kZWYgU1lTMTZCSVQNCi0jICAgICAgZGVmaW5lIFNZUzE2QklUDQotIyAgICBlbmRpZg0KLSMgIGVuZGlmDQotI2VuZGlmDQotDQotLyoNCi0gKiBDb21waWxlIHdpdGggLURNQVhTRUdfNjRLIGlmIHRoZSBhbGxvYyBmdW5jdGlvbiBjYW5ub3QgYWxsb2NhdGUgbW9yZQ0KLSAqIHRoYW4gNjRrIGJ5dGVzIGF0IGEgdGltZSAobmVlZGVkIG9uIHN5c3RlbXMgd2l0aCAxNi1iaXQgaW50KS4NCi0gKi8NCi0jaWZkZWYgU1lTMTZCSVQNCi0jICBkZWZpbmUgTUFYU0VHXzY0Sw0KLSNlbmRpZg0KLSNpZmRlZiBNU0RPUw0KLSMgIGRlZmluZSBVTkFMSUdORURfT0sNCi0jZW5kaWYNCi0NCi0jaWZkZWYgX19TVERDX1ZFUlNJT05fXw0KLSMgIGlmbmRlZiBTVERDDQotIyAgICBkZWZpbmUgU1REQw0KLSMgIGVuZGlmDQotIyAgaWYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMDQotIyAgICBpZm5kZWYgU1REQzk5DQotIyAgICAgIGRlZmluZSBTVERDOTkNCi0jICAgIGVuZGlmDQotIyAgZW5kaWYNCi0jZW5kaWYNCi0jaWYgIWRlZmluZWQoU1REQykgJiYgKGRlZmluZWQoX19TVERDX18pIHx8IGRlZmluZWQoX19jcGx1c3BsdXMpKQ0KLSMgIGRlZmluZSBTVERDDQotI2VuZGlmDQotI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykpDQotIyAgZGVmaW5lIFNUREMNCi0jZW5kaWYNCi0jaWYgIWRlZmluZWQoU1REQykgJiYgKGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoV0lORE9XUykgfHwgZGVmaW5lZChXSU4zMikpDQotIyAgZGVmaW5lIFNUREMNCi0jZW5kaWYNCi0jaWYgIWRlZmluZWQoU1REQykgJiYgKGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKF9fSE9TX0FJWF9fKSkNCi0jICBkZWZpbmUgU1REQw0KLSNlbmRpZg0KLQ0KLSNpZiBkZWZpbmVkKF9fT1M0MDBfXykgJiYgIWRlZmluZWQoU1REQykgICAgLyogaVNlcmllcyAoZm9ybWVybHkgQVMvNDAwKS4gKi8NCi0jICBkZWZpbmUgU1REQw0KLSNlbmRpZg0KLQ0KLSNpZm5kZWYgU1REQw0KLSMgIGlmbmRlZiBjb25zdCAvKiBjYW5ub3QgdXNlICFkZWZpbmVkKFNUREMpICYmICFkZWZpbmVkKGNvbnN0KSBvbiBNYWMgKi8NCi0jICAgIGRlZmluZSBjb25zdCAgICAgICAvKiBub3RlOiBuZWVkIGEgbW9yZSBnZW50bGUgc29sdXRpb24gaGVyZSAqLw0KLSMgIGVuZGlmDQotI2VuZGlmDQotDQotI2lmIGRlZmluZWQoWkxJQl9DT05TVCkgJiYgIWRlZmluZWQoel9jb25zdCkNCi0jICBkZWZpbmUgel9jb25zdCBjb25zdA0KLSNlbHNlDQotIyAgZGVmaW5lIHpfY29uc3QNCi0jZW5kaWYNCi0NCi0vKiBTb21lIE1hYyBjb21waWxlcnMgbWVyZ2UgYWxsIC5oIGZpbGVzIGluY29ycmVjdGx5OiAqLw0KLSNpZiBkZWZpbmVkKF9fTVdFUktTX18pfHxkZWZpbmVkKGFwcGxlYyl8fGRlZmluZWQoVEhJTktfQyl8fGRlZmluZWQoX19TQ19fKQ0KLSMgIGRlZmluZSBOT19EVU1NWV9ERUNMDQotI2VuZGlmDQotDQotLyogTWF4aW11bSB2YWx1ZSBmb3IgbWVtTGV2ZWwgaW4gZGVmbGF0ZUluaXQyICovDQotI2lmbmRlZiBNQVhfTUVNX0xFVkVMDQotIyAgaWZkZWYgTUFYU0VHXzY0Sw0KLSMgICAgZGVmaW5lIE1BWF9NRU1fTEVWRUwgOA0KLSMgIGVsc2UNCi0jICAgIGRlZmluZSBNQVhfTUVNX0xFVkVMIDkNCi0jICBlbmRpZg0KLSNlbmRpZg0KLQ0KLS8qIE1heGltdW0gdmFsdWUgZm9yIHdpbmRvd0JpdHMgaW4gZGVmbGF0ZUluaXQyIGFuZCBpbmZsYXRlSW5pdDIuDQotICogV0FSTklORzogcmVkdWNpbmcgTUFYX1dCSVRTIG1ha2VzIG1pbmlnemlwIHVuYWJsZSB0byBleHRyYWN0IC5neiBmaWxlcw0KLSAqIGNyZWF0ZWQgYnkgZ3ppcC4gKEZpbGVzIGNyZWF0ZWQgYnkgbWluaWd6aXAgY2FuIHN0aWxsIGJlIGV4dHJhY3RlZCBieQ0KLSAqIGd6aXAuKQ0KLSAqLw0KLSNpZm5kZWYgTUFYX1dCSVRTDQotIyAgZGVmaW5lIE1BWF9XQklUUyAgIDE1IC8qIDMySyBMWjc3IHdpbmRvdyAqLw0KLSNlbmRpZg0KLQ0KLS8qIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBkZWZsYXRlIGFyZSAoaW4gYnl0ZXMpOg0KLSAgICAgICAgICAgICgxIDw8ICh3aW5kb3dCaXRzKzIpKSArICAoMSA8PCAobWVtTGV2ZWwrOSkpDQotIHRoYXQgaXM6IDEyOEsgZm9yIHdpbmRvd0JpdHM9MTUgICsgIDEyOEsgZm9yIG1lbUxldmVsID0gOCAgKGRlZmF1bHQgdmFsdWVzKQ0KLSBwbHVzIGEgZmV3IGtpbG9ieXRlcyBmb3Igc21hbGwgb2JqZWN0cy4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIHJlZHVjZQ0KLSB0aGUgZGVmYXVsdCBtZW1vcnkgcmVxdWlyZW1lbnRzIGZyb20gMjU2SyB0byAxMjhLLCBjb21waWxlIHdpdGgNCi0gICAgIG1ha2UgQ0ZMQUdTPSItTyAtRE1BWF9XQklUUz0xNCAtRE1BWF9NRU1fTEVWRUw9NyINCi0gT2YgY291cnNlIHRoaXMgd2lsbCBnZW5lcmFsbHkgZGVncmFkZSBjb21wcmVzc2lvbiAodGhlcmUncyBubyBmcmVlIGx1bmNoKS4NCi0NCi0gICBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgaW5mbGF0ZSBhcmUgKGluIGJ5dGVzKSAxIDw8IHdpbmRvd0JpdHMNCi0gdGhhdCBpcywgMzJLIGZvciB3aW5kb3dCaXRzPTE1IChkZWZhdWx0IHZhbHVlKSBwbHVzIGEgZmV3IGtpbG9ieXRlcw0KLSBmb3Igc21hbGwgb2JqZWN0cy4NCi0qLw0KLQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR5cGUgZGVjbGFyYXRpb25zICovDQotDQotI2lmbmRlZiBPRiAvKiBmdW5jdGlvbiBwcm90b3R5cGVzICovDQotIyAgaWZkZWYgU1REQw0KLSMgICAgZGVmaW5lIE9GKGFyZ3MpICBhcmdzDQotIyAgZWxzZQ0KLSMgICAgZGVmaW5lIE9GKGFyZ3MpICAoKQ0KLSMgIGVuZGlmDQotI2VuZGlmDQotDQotI2lmbmRlZiBaX0FSRyAvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBzdGRhcmcgKi8NCi0jICBpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQ0KLSMgICAgZGVmaW5lIFpfQVJHKGFyZ3MpICBhcmdzDQotIyAgZWxzZQ0KLSMgICAgZGVmaW5lIFpfQVJHKGFyZ3MpICAoKQ0KLSMgIGVuZGlmDQotI2VuZGlmDQotDQotLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBmb3IgRkFSIGFyZSBuZWVkZWQgb25seSBmb3IgTVNET1MgbWl4ZWQNCi0gKiBtb2RlbCBwcm9ncmFtbWluZyAoc21hbGwgb3IgbWVkaXVtIG1vZGVsIHdpdGggc29tZSBmYXIgYWxsb2NhdGlvbnMpLg0KLSAqIFRoaXMgd2FzIHRlc3RlZCBvbmx5IHdpdGggTVNDOyBmb3Igb3RoZXIgTVNET1MgY29tcGlsZXJzIHlvdSBtYXkgaGF2ZQ0KLSAqIHRvIGRlZmluZSBOT19NRU1DUFkgaW4genV0aWwuaC4gIElmIHlvdSBkb24ndCBuZWVkIHRoZSBtaXhlZCBtb2RlbCwNCi0gKiBqdXN0IGRlZmluZSBGQVIgdG8gYmUgZW1wdHkuDQotICovDQotI2lmZGVmIFNZUzE2QklUDQotIyAgaWYgZGVmaW5lZChNX0k4NlNNKSB8fCBkZWZpbmVkKE1fSTg2TU0pDQotICAgICAvKiBNU0Mgc21hbGwgb3IgbWVkaXVtIG1vZGVsICovDQotIyAgICBkZWZpbmUgU01BTExfTUVESVVNDQotIyAgICBpZmRlZiBfTVNDX1ZFUg0KLSMgICAgICBkZWZpbmUgRkFSIF9mYXINCi0jICAgIGVsc2UNCi0jICAgICAgZGVmaW5lIEZBUiBmYXINCi0jICAgIGVuZGlmDQotIyAgZW5kaWYNCi0jICBpZiAoZGVmaW5lZChfX1NNQUxMX18pIHx8IGRlZmluZWQoX19NRURJVU1fXykpDQotICAgICAvKiBUdXJibyBDIHNtYWxsIG9yIG1lZGl1bSBtb2RlbCAqLw0KLSMgICAgZGVmaW5lIFNNQUxMX01FRElVTQ0KLSMgICAgaWZkZWYgX19CT1JMQU5EQ19fDQotIyAgICAgIGRlZmluZSBGQVIgX2Zhcg0KLSMgICAgZWxzZQ0KLSMgICAgICBkZWZpbmUgRkFSIGZhcg0KLSMgICAgZW5kaWYNCi0jICBlbmRpZg0KLSNlbmRpZg0KLQ0KLSNpZiBkZWZpbmVkKFdJTkRPV1MpIHx8IGRlZmluZWQoV0lOMzIpDQotICAgLyogSWYgYnVpbGRpbmcgb3IgdXNpbmcgemxpYiBhcyBhIERMTCwgZGVmaW5lIFpMSUJfRExMLg0KLSAgICAqIFRoaXMgaXMgbm90IG1hbmRhdG9yeSwgYnV0IGl0IG9mZmVycyBhIGxpdHRsZSBwZXJmb3JtYW5jZSBpbmNyZWFzZS4NCi0gICAgKi8NCi0jICBpZmRlZiBaTElCX0RMTA0KLSMgICAgaWYgZGVmaW5lZChXSU4zMikgJiYgKCFkZWZpbmVkKF9fQk9STEFORENfXykgfHwgKF9fQk9STEFORENfXyA+PSAweDUwMCkpDQotIyAgICAgIGlmZGVmIFpMSUJfSU5URVJOQUwNCi0jICAgICAgICBkZWZpbmUgWkVYVEVSTiBleHRlcm4gX19kZWNsc3BlYyhkbGxleHBvcnQpDQotIyAgICAgIGVsc2UNCi0jICAgICAgICBkZWZpbmUgWkVYVEVSTiBleHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpDQotIyAgICAgIGVuZGlmDQotIyAgICBlbmRpZg0KLSMgIGVuZGlmICAvKiBaTElCX0RMTCAqLw0KLSAgIC8qIElmIGJ1aWxkaW5nIG9yIHVzaW5nIHpsaWIgd2l0aCB0aGUgV0lOQVBJL1dJTkFQSVYgY2FsbGluZyBjb252ZW50aW9uLA0KLSAgICAqIGRlZmluZSBaTElCX1dJTkFQSS4NCi0gICAgKiBDYXV0aW9uOiB0aGUgc3RhbmRhcmQgWkxJQjEuRExMIGlzIE5PVCBjb21waWxlZCB1c2luZyBaTElCX1dJTkFQSS4NCi0gICAgKi8NCi0jICBpZmRlZiBaTElCX1dJTkFQSQ0KLSMgICAgaWZkZWYgRkFSDQotIyAgICAgIHVuZGVmIEZBUg0KLSMgICAgZW5kaWYNCi0jICAgIGluY2x1ZGUgPHdpbmRvd3MuaD4NCi0gICAgIC8qIE5vIG5lZWQgZm9yIF9leHBvcnQsIHVzZSBaTElCLkRFRiBpbnN0ZWFkLiAqLw0KLSAgICAgLyogRm9yIGNvbXBsZXRlIFdpbmRvd3MgY29tcGF0aWJpbGl0eSwgdXNlIFdJTkFQSSwgbm90IF9fc3RkY2FsbC4gKi8NCi0jICAgIGRlZmluZSBaRVhQT1JUIFdJTkFQSQ0KLSMgICAgaWZkZWYgV0lOMzINCi0jICAgICAgZGVmaW5lIFpFWFBPUlRWQSBXSU5BUElWDQotIyAgICBlbHNlDQotIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgRkFSIENERUNMDQotIyAgICBlbmRpZg0KLSMgIGVuZGlmDQotI2VuZGlmDQotDQotI2lmIGRlZmluZWQgKF9fQkVPU19fKQ0KLSMgIGlmZGVmIFpMSUJfRExMDQotIyAgICBpZmRlZiBaTElCX0lOVEVSTkFMDQotIyAgICAgIGRlZmluZSBaRVhQT1JUICAgX19kZWNsc3BlYyhkbGxleHBvcnQpDQotIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgX19kZWNsc3BlYyhkbGxleHBvcnQpDQotIyAgICBlbHNlDQotIyAgICAgIGRlZmluZSBaRVhQT1JUICAgX19kZWNsc3BlYyhkbGxpbXBvcnQpDQotIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgX19kZWNsc3BlYyhkbGxpbXBvcnQpDQotIyAgICBlbmRpZg0KLSMgIGVuZGlmDQotI2VuZGlmDQotDQotI2lmbmRlZiBaRVhURVJODQotIyAgZGVmaW5lIFpFWFRFUk4gZXh0ZXJuDQotI2VuZGlmDQotI2lmbmRlZiBaRVhQT1JUDQotIyAgZGVmaW5lIFpFWFBPUlQNCi0jZW5kaWYNCi0jaWZuZGVmIFpFWFBPUlRWQQ0KLSMgIGRlZmluZSBaRVhQT1JUVkENCi0jZW5kaWYNCi0NCi0jaWZuZGVmIEZBUg0KLSMgIGRlZmluZSBGQVINCi0jZW5kaWYNCi0NCi0jaWYgIWRlZmluZWQoX19NQUNUWVBFU19fKQ0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgQnl0ZTsgIC8qIDggYml0cyAqLw0KLSNlbmRpZg0KLXR5cGVkZWYgdW5zaWduZWQgaW50ICAgdUludDsgIC8qIDE2IGJpdHMgb3IgbW9yZSAqLw0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgdUxvbmc7IC8qIDMyIGJpdHMgb3IgbW9yZSAqLw0KLQ0KLSNpZmRlZiBTTUFMTF9NRURJVU0NCi0gICAvKiBCb3JsYW5kIEMvQysrIGFuZCBzb21lIG9sZCBNU0MgdmVyc2lvbnMgaWdub3JlIEZBUiBpbnNpZGUgdHlwZWRlZiAqLw0KLSMgIGRlZmluZSBCeXRlZiBCeXRlIEZBUg0KLSNlbHNlDQotICAgdHlwZWRlZiBCeXRlICBGQVIgQnl0ZWY7DQotI2VuZGlmDQotdHlwZWRlZiBjaGFyICBGQVIgY2hhcmY7DQotdHlwZWRlZiBpbnQgICBGQVIgaW50ZjsNCi10eXBlZGVmIHVJbnQgIEZBUiB1SW50ZjsNCi10eXBlZGVmIHVMb25nIEZBUiB1TG9uZ2Y7DQotDQotI2lmZGVmIFNUREMNCi0gICB0eXBlZGVmIHZvaWQgY29uc3QgKnZvaWRwYzsNCi0gICB0eXBlZGVmIHZvaWQgRkFSICAgKnZvaWRwZjsNCi0gICB0eXBlZGVmIHZvaWQgICAgICAgKnZvaWRwOw0KLSNlbHNlDQotICAgdHlwZWRlZiBCeXRlIGNvbnN0ICp2b2lkcGM7DQotICAgdHlwZWRlZiBCeXRlIEZBUiAgICp2b2lkcGY7DQotICAgdHlwZWRlZiBCeXRlICAgICAgICp2b2lkcDsNCi0jZW5kaWYNCi0NCi0jaWYgIWRlZmluZWQoWl9VNCkgJiYgIWRlZmluZWQoWl9TT0xPKSAmJiBkZWZpbmVkKFNUREMpDQotIyAgaW5jbHVkZSA8bGltaXRzLmg+DQotIyAgaWYgKFVJTlRfTUFYID09IDB4ZmZmZmZmZmZVTCkNCi0jICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkDQotIyAgZWxpZiAoVUxPTkdfTUFYID09IDB4ZmZmZmZmZmZVTCkNCi0jICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkIGxvbmcNCi0jICBlbGlmIChVU0hSVF9NQVggPT0gMHhmZmZmZmZmZlVMKQ0KLSMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgc2hvcnQNCi0jICBlbmRpZg0KLSNlbmRpZg0KLQ0KLSNpZmRlZiBaX1U0DQotICAgdHlwZWRlZiBaX1U0IHpfY3JjX3Q7DQotI2Vsc2UNCi0gICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgel9jcmNfdDsNCi0jZW5kaWYNCi0NCi0jaWYgMAkJCQkvKiBTdW5saWFuZy5MaXUgMjAxMDA5MDggc3luYyB0aGUgY29uZmlnIHRvIHRoZSBvbGQgcmV2aXNpb24sIG90aGVyd2lzZSwgZXZjIGNvbXBpbGUgZmFpbGVkLiAqLw0KLSNpZmRlZiBIQVZFX1VOSVNURF9IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8NCi0jICBkZWZpbmUgWl9IQVZFX1VOSVNURF9IDQotI2VuZGlmDQotI2VuZGlmIC8qIDAgKi8NCi0NCi0jaWZkZWYgSEFWRV9TVERBUkdfSCAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovDQotIyAgZGVmaW5lIFpfSEFWRV9TVERBUkdfSA0KLSNlbmRpZg0KLQ0KLSNpZiAwCQkJCS8qIFN1bmxpYW5nLkxpdSAyMDEwMDkwOCBzeW5jIHRoZSBjb25maWcgdG8gdGhlIG9sZCByZXZpc2lvbiwgb3RoZXJ3aXNlLCBldmMgY29tcGlsZSBmYWlsZWQuICovDQotI2lmZGVmIFNUREMNCi0jICBpZm5kZWYgWl9TT0xPDQotIyAgICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgICAvKiBmb3Igb2ZmX3QgKi8NCi0jICBlbmRpZg0KLSNlbmRpZg0KLSNlbmRpZiAvKiAwICovDQotDQotI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpDQotIyAgaWZuZGVmIFpfU09MTw0KLSMgICAgaW5jbHVkZSA8c3RkYXJnLmg+ICAgICAgICAgLyogZm9yIHZhX2xpc3QgKi8NCi0jICBlbmRpZg0KLSNlbmRpZg0KLQ0KLSNpZmRlZiBfV0lOMzINCi0jICBpZm5kZWYgWl9TT0xPDQotIyAgICBpbmNsdWRlIDxzdGRkZWYuaD4gICAgICAgICAvKiBmb3Igd2NoYXJfdCAqLw0KLSMgIGVuZGlmDQotI2VuZGlmDQotDQotI2lmIDAJCQkJLyogU3VubGlhbmcuTGl1IDIwMTAwOTA4IHN5bmMgdGhlIGNvbmZpZyB0byB0aGUgb2xkIHJldmlzaW9uLCBvdGhlcndpc2UsIGV2YyBjb21waWxlIGZhaWxlZC4gKi8NCi0vKiBhIGxpdHRsZSB0cmljayB0byBhY2NvbW1vZGF0ZSBib3RoICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZA0KLSAqICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMSIgYXMgcmVxdWVzdGluZyA2NC1iaXQgb3BlcmF0aW9ucywgKGV2ZW4NCi0gKiB0aG91Z2ggdGhlIGZvcm1lciBkb2VzIG5vdCBjb25mb3JtIHRvIHRoZSBMRlMgZG9jdW1lbnQpLCBidXQgY29uc2lkZXJpbmcNCi0gKiBib3RoICIjdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMCIgYXMNCi0gKiBlcXVpdmFsZW50bHkgcmVxdWVzdGluZyBubyA2NC1iaXQgb3BlcmF0aW9ucw0KLSAqLw0KLSNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIC1fTEFSR0VGSUxFNjRfU09VUkNFIC0gLTEgPT0gMQ0KLSMgIHVuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UNCi0jZW5kaWYNCi0jZW5kaWYgLyogMCAqLw0KLQ0KLSNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpDQotIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSA0KLSNlbmRpZg0KLSNpZm5kZWYgWl9TT0xPDQotI2lmIDAJCQkJLyogU3VubGlhbmcuTGl1IDIwMTAwOTA4IHN5bmMgdGhlIGNvbmZpZyB0byB0aGUgb2xkIHJldmlzaW9uLCBvdGhlcndpc2UsIGV2YyBjb21waWxlIGZhaWxlZC4gKi8NCi0jICBpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQ0KLSMgICAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgLyogZm9yIFNFRUtfKiwgb2ZmX3QsIGFuZCBfTEZTNjRfTEFSR0VGSUxFICovDQotIyAgICBpZmRlZiBWTVMNCi0jICAgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAgIC8qIGZvciBvZmZfdCAqLw0KLSMgICAgZW5kaWYNCi0jICAgIGlmbmRlZiB6X29mZl90DQotIyAgICAgIGRlZmluZSB6X29mZl90IG9mZl90DQotIyAgICBlbmRpZg0KLSMgIGVuZGlmDQotI2VuZGlmIC8qIDAgKi8NCi0jZW5kaWYNCi0NCi0jaWYgZGVmaW5lZChfTEZTNjRfTEFSR0VGSUxFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTANCi0jICBkZWZpbmUgWl9MRlM2NA0KLSNlbmRpZg0KLQ0KLSNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIGRlZmluZWQoWl9MRlM2NCkNCi0jICBkZWZpbmUgWl9MQVJHRTY0DQotI2VuZGlmDQotDQotI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTLTAgPT0gNjQgJiYgZGVmaW5lZChaX0xGUzY0KQ0KLSMgIGRlZmluZSBaX1dBTlQ2NA0KLSNlbmRpZg0KLQ0KLSNpZiAhZGVmaW5lZChTRUVLX1NFVCkgJiYgIWRlZmluZWQoWl9TT0xPKQ0KLSMgIGRlZmluZSBTRUVLX1NFVCAgICAgICAgMCAgICAgICAvKiBTZWVrIGZyb20gYmVnaW5uaW5nIG9mIGZpbGUuICAqLw0KLSMgIGRlZmluZSBTRUVLX0NVUiAgICAgICAgMSAgICAgICAvKiBTZWVrIGZyb20gY3VycmVudCBwb3NpdGlvbi4gICovDQotIyAgZGVmaW5lIFNFRUtfRU5EICAgICAgICAyICAgICAgIC8qIFNldCBmaWxlIHBvaW50ZXIgdG8gRU9GIHBsdXMgIm9mZnNldCIgKi8NCi0jZW5kaWYNCi0NCi0jaWZuZGVmIHpfb2ZmX3QNCi0jICBkZWZpbmUgel9vZmZfdCBsb25nDQotI2VuZGlmDQotDQotI2lmICFkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChaX0xBUkdFNjQpDQotIyAgZGVmaW5lIHpfb2ZmNjRfdCBvZmY2NF90DQotI2Vsc2UNCi0jICBpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKFpfU09MTykNCi0jICAgIGRlZmluZSB6X29mZjY0X3QgX19pbnQ2NA0KLSMgIGVsc2UNCi0jICAgIGRlZmluZSB6X29mZjY0X3Qgel9vZmZfdA0KLSMgIGVuZGlmDQotI2VuZGlmDQotDQotLyogTVZTIGxpbmtlciBkb2VzIG5vdCBzdXBwb3J0IGV4dGVybmFsIG5hbWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKi8NCi0jaWYgZGVmaW5lZChfX01WU19fKQ0KLSAgI3ByYWdtYSBtYXAoZGVmbGF0ZUluaXRfLCJERUlOIikNCi0gICNwcmFnbWEgbWFwKGRlZmxhdGVJbml0Ml8sIkRFSU4yIikNCi0gICNwcmFnbWEgbWFwKGRlZmxhdGVFbmQsIkRFRU5EIikNCi0gICNwcmFnbWEgbWFwKGRlZmxhdGVCb3VuZCwiREVCTkQiKQ0KLSAgI3ByYWdtYSBtYXAoaW5mbGF0ZUluaXRfLCJJTklOIikNCi0gICNwcmFnbWEgbWFwKGluZmxhdGVJbml0Ml8sIklOSU4yIikNCi0gICNwcmFnbWEgbWFwKGluZmxhdGVFbmQsIklORU5EIikNCi0gICNwcmFnbWEgbWFwKGluZmxhdGVTeW5jLCJJTlNZIikNCi0gICNwcmFnbWEgbWFwKGluZmxhdGVTZXREaWN0aW9uYXJ5LCJJTlNFREkiKQ0KLSAgI3ByYWdtYSBtYXAoY29tcHJlc3NCb3VuZCwiQ01CTkQiKQ0KLSAgI3ByYWdtYSBtYXAoaW5mbGF0ZV90YWJsZSwiSU5UQUJMIikNCi0gICNwcmFnbWEgbWFwKGluZmxhdGVfZmFzdCwiSU5GQSIpDQotICAjcHJhZ21hIG1hcChpbmZsYXRlX2NvcHlyaWdodCwiSU5DT1BZIikNCi0jZW5kaWYNCi0NCi0jZW5kaWYgLyogWkNPTkZfSCAqLw0KKy8qIHpjb25mLmggLS0gY29uZmlndXJhdGlvbiBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5LgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKy8qIEAoIykgJElkJCAqLworCisjaWZuZGVmIFpDT05GX0gKKyNkZWZpbmUgWkNPTkZfSAorCisvKgorICogSWYgeW91ICpyZWFsbHkqIG5lZWQgYSB1bmlxdWUgcHJlZml4IGZvciBhbGwgdHlwZXMgYW5kIGxpYnJhcnkgZnVuY3Rpb25zLAorICogY29tcGlsZSB3aXRoIC1EWl9QUkVGSVguIFRoZSAic3RhbmRhcmQiIHpsaWIgc2hvdWxkIGJlIGNvbXBpbGVkIHdpdGhvdXQgaXQuCisgKiBFdmVuIGJldHRlciB0aGFuIGNvbXBpbGluZyB3aXRoIC1EWl9QUkVGSVggd291bGQgYmUgdG8gdXNlIGNvbmZpZ3VyZSB0byBzZXQKKyAqIHRoaXMgcGVybWFuZW50bHkgaW4gemNvbmYuaCB1c2luZyAiLi9jb25maWd1cmUgLS16cHJlZml4Ii4KKyAqLworI2lmZGVmIFpfUFJFRklYICAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9QUkVGSVhfU0VUCisKKy8qIGFsbCBsaW5rZWQgc3ltYm9scyAqLworIyAgZGVmaW5lIF9kaXN0X2NvZGUgICAgICAgICAgICB6X19kaXN0X2NvZGUKKyMgIGRlZmluZSBfbGVuZ3RoX2NvZGUgICAgICAgICAgel9fbGVuZ3RoX2NvZGUKKyMgIGRlZmluZSBfdHJfYWxpZ24gICAgICAgICAgICAgel9fdHJfYWxpZ24KKyMgIGRlZmluZSBfdHJfZmx1c2hfYml0cyAgICAgICAgel9fdHJfZmx1c2hfYml0cworIyAgZGVmaW5lIF90cl9mbHVzaF9ibG9jayAgICAgICB6X190cl9mbHVzaF9ibG9jaworIyAgZGVmaW5lIF90cl9pbml0ICAgICAgICAgICAgICB6X190cl9pbml0CisjICBkZWZpbmUgX3RyX3N0b3JlZF9ibG9jayAgICAgIHpfX3RyX3N0b3JlZF9ibG9jaworIyAgZGVmaW5lIF90cl90YWxseSAgICAgICAgICAgICB6X190cl90YWxseQorIyAgZGVmaW5lIGFkbGVyMzIgICAgICAgICAgICAgICB6X2FkbGVyMzIKKyMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmUgICAgICAgel9hZGxlcjMyX2NvbWJpbmUKKyMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmU2NCAgICAgel9hZGxlcjMyX2NvbWJpbmU2NAorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgY29tcHJlc3MgICAgICAgICAgICAgIHpfY29tcHJlc3MKKyMgICAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgorIyAgICBkZWZpbmUgY29tcHJlc3NCb3VuZCAgICAgICAgIHpfY29tcHJlc3NCb3VuZAorIyAgZW5kaWYKKyMgIGRlZmluZSBjcmMzMiAgICAgICAgICAgICAgICAgel9jcmMzMgorIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmUgICAgICAgICB6X2NyYzMyX2NvbWJpbmUKKyMgIGRlZmluZSBjcmMzMl9jb21iaW5lNjQgICAgICAgel9jcmMzMl9jb21iaW5lNjQKKyMgIGRlZmluZSBkZWZsYXRlICAgICAgICAgICAgICAgel9kZWZsYXRlCisjICBkZWZpbmUgZGVmbGF0ZUJvdW5kICAgICAgICAgIHpfZGVmbGF0ZUJvdW5kCisjICBkZWZpbmUgZGVmbGF0ZUNvcHkgICAgICAgICAgIHpfZGVmbGF0ZUNvcHkKKyMgIGRlZmluZSBkZWZsYXRlRW5kICAgICAgICAgICAgel9kZWZsYXRlRW5kCisjICBkZWZpbmUgZGVmbGF0ZUluaXQyXyAgICAgICAgIHpfZGVmbGF0ZUluaXQyXworIyAgZGVmaW5lIGRlZmxhdGVJbml0XyAgICAgICAgICB6X2RlZmxhdGVJbml0XworIyAgZGVmaW5lIGRlZmxhdGVQYXJhbXMgICAgICAgICB6X2RlZmxhdGVQYXJhbXMKKyMgIGRlZmluZSBkZWZsYXRlUGVuZGluZyAgICAgICAgel9kZWZsYXRlUGVuZGluZworIyAgZGVmaW5lIGRlZmxhdGVQcmltZSAgICAgICAgICB6X2RlZmxhdGVQcmltZQorIyAgZGVmaW5lIGRlZmxhdGVSZXNldCAgICAgICAgICB6X2RlZmxhdGVSZXNldAorIyAgZGVmaW5lIGRlZmxhdGVSZXNldEtlZXAgICAgICB6X2RlZmxhdGVSZXNldEtlZXAKKyMgIGRlZmluZSBkZWZsYXRlU2V0RGljdGlvbmFyeSAgel9kZWZsYXRlU2V0RGljdGlvbmFyeQorIyAgZGVmaW5lIGRlZmxhdGVTZXRIZWFkZXIgICAgICB6X2RlZmxhdGVTZXRIZWFkZXIKKyMgIGRlZmluZSBkZWZsYXRlVHVuZSAgICAgICAgICAgel9kZWZsYXRlVHVuZQorIyAgZGVmaW5lIGRlZmxhdGVfY29weXJpZ2h0ICAgICB6X2RlZmxhdGVfY29weXJpZ2h0CisjICBkZWZpbmUgZ2V0X2NyY190YWJsZSAgICAgICAgIHpfZ2V0X2NyY190YWJsZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKKyMgICAgZGVmaW5lIGd6X2ludG1heCAgICAgICAgICAgICB6X2d6X2ludG1heAorIyAgICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3IKKyMgICAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCisjICAgIGRlZmluZSBnemNsZWFyZXJyICAgICAgICAgICAgel9nemNsZWFyZXJyCisjICAgIGRlZmluZSBnemNsb3NlICAgICAgICAgICAgICAgel9nemNsb3NlCisjICAgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKKyMgICAgZGVmaW5lIGd6Y2xvc2VfdyAgICAgICAgICAgICB6X2d6Y2xvc2VfdworIyAgICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QKKyMgICAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KKyMgICAgZGVmaW5lIGd6ZW9mICAgICAgICAgICAgICAgICB6X2d6ZW9mCisjICAgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9nemVycm9yCisjICAgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCisjICAgIGRlZmluZSBnemdldGMgICAgICAgICAgICAgICAgel9nemdldGMKKyMgICAgZGVmaW5lIGd6Z2V0Y18gICAgICAgICAgICAgICB6X2d6Z2V0Y18KKyMgICAgZGVmaW5lIGd6Z2V0cyAgICAgICAgICAgICAgICB6X2d6Z2V0cworIyAgICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKKyMgICAgZGVmaW5lIGd6b2Zmc2V0NjQgICAgICAgICAgICB6X2d6b2Zmc2V0NjQKKyMgICAgZGVmaW5lIGd6b3BlbiAgICAgICAgICAgICAgICB6X2d6b3BlbgorIyAgICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKKyMgICAgaWZkZWYgX1dJTjMyCisjICAgICAgZGVmaW5lIGd6b3Blbl93ICAgICAgICAgICAgICB6X2d6b3Blbl93CisjICAgIGVuZGlmCisjICAgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgorIyAgICBkZWZpbmUgZ3p2cHJpbnRmICAgICAgICAgICAgIHpfZ3p2cHJpbnRmCisjICAgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKKyMgICAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cworIyAgICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpfZ3pyZWFkCisjICAgIGRlZmluZSBnenJld2luZCAgICAgICAgICAgICAgel9nenJld2luZAorIyAgICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCisjICAgIGRlZmluZSBnenNlZWs2NCAgICAgICAgICAgICAgel9nenNlZWs2NAorIyAgICBkZWZpbmUgZ3pzZXRwYXJhbXMgICAgICAgICAgIHpfZ3pzZXRwYXJhbXMKKyMgICAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAorIyAgICBkZWZpbmUgZ3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKKyMgICAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCisjICAgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBlbmRpZgorIyAgZGVmaW5lIGluZmxhdGUgICAgICAgICAgICAgICB6X2luZmxhdGUKKyMgIGRlZmluZSBpbmZsYXRlQmFjayAgICAgICAgICAgel9pbmZsYXRlQmFjaworIyAgZGVmaW5lIGluZmxhdGVCYWNrRW5kICAgICAgICB6X2luZmxhdGVCYWNrRW5kCisjICBkZWZpbmUgaW5mbGF0ZUJhY2tJbml0XyAgICAgIHpfaW5mbGF0ZUJhY2tJbml0XworIyAgZGVmaW5lIGluZmxhdGVDb3B5ICAgICAgICAgICB6X2luZmxhdGVDb3B5CisjICBkZWZpbmUgaW5mbGF0ZUVuZCAgICAgICAgICAgIHpfaW5mbGF0ZUVuZAorIyAgZGVmaW5lIGluZmxhdGVHZXRIZWFkZXIgICAgICB6X2luZmxhdGVHZXRIZWFkZXIKKyMgIGRlZmluZSBpbmZsYXRlSW5pdDJfICAgICAgICAgel9pbmZsYXRlSW5pdDJfCisjICBkZWZpbmUgaW5mbGF0ZUluaXRfICAgICAgICAgIHpfaW5mbGF0ZUluaXRfCisjICBkZWZpbmUgaW5mbGF0ZU1hcmsgICAgICAgICAgIHpfaW5mbGF0ZU1hcmsKKyMgIGRlZmluZSBpbmZsYXRlUHJpbWUgICAgICAgICAgel9pbmZsYXRlUHJpbWUKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXQgICAgICAgICAgel9pbmZsYXRlUmVzZXQKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXQyICAgICAgICAgel9pbmZsYXRlUmVzZXQyCisjICBkZWZpbmUgaW5mbGF0ZVNldERpY3Rpb25hcnkgIHpfaW5mbGF0ZVNldERpY3Rpb25hcnkKKyMgIGRlZmluZSBpbmZsYXRlR2V0RGljdGlvbmFyeSAgel9pbmZsYXRlR2V0RGljdGlvbmFyeQorIyAgZGVmaW5lIGluZmxhdGVTeW5jICAgICAgICAgICB6X2luZmxhdGVTeW5jCisjICBkZWZpbmUgaW5mbGF0ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludAorIyAgZGVmaW5lIGluZmxhdGVVbmRlcm1pbmUgICAgICB6X2luZmxhdGVVbmRlcm1pbmUKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXRLZWVwICAgICAgel9pbmZsYXRlUmVzZXRLZWVwCisjICBkZWZpbmUgaW5mbGF0ZV9jb3B5cmlnaHQgICAgIHpfaW5mbGF0ZV9jb3B5cmlnaHQKKyMgIGRlZmluZSBpbmZsYXRlX2Zhc3QgICAgICAgICAgel9pbmZsYXRlX2Zhc3QKKyMgIGRlZmluZSBpbmZsYXRlX3RhYmxlICAgICAgICAgel9pbmZsYXRlX3RhYmxlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCisjICBlbmRpZgorIyAgZGVmaW5lIHpFcnJvciAgICAgICAgICAgICAgICB6X3pFcnJvcgorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNhbGxvYworIyAgICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBlbmRpZgorIyAgZGVmaW5lIHpsaWJDb21waWxlRmxhZ3MgICAgICB6X3psaWJDb21waWxlRmxhZ3MKKyMgIGRlZmluZSB6bGliVmVyc2lvbiAgICAgICAgICAgel96bGliVmVyc2lvbgorCisvKiBhbGwgemxpYiB0eXBlZGVmcyBpbiB6bGliLmggYW5kIHpjb25mLmggKi8KKyMgIGRlZmluZSBCeXRlICAgICAgICAgICAgICAgICAgel9CeXRlCisjICBkZWZpbmUgQnl0ZWYgICAgICAgICAgICAgICAgIHpfQnl0ZWYKKyMgIGRlZmluZSBhbGxvY19mdW5jICAgICAgICAgICAgel9hbGxvY19mdW5jCisjICBkZWZpbmUgY2hhcmYgICAgICAgICAgICAgICAgIHpfY2hhcmYKKyMgIGRlZmluZSBmcmVlX2Z1bmMgICAgICAgICAgICAgel9mcmVlX2Z1bmMKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgZW5kaWYKKyMgIGRlZmluZSBnel9oZWFkZXIgICAgICAgICAgICAgel9nel9oZWFkZXIKKyMgIGRlZmluZSBnel9oZWFkZXJwICAgICAgICAgICAgel9nel9oZWFkZXJwCisjICBkZWZpbmUgaW5fZnVuYyAgICAgICAgICAgICAgIHpfaW5fZnVuYworIyAgZGVmaW5lIGludGYgICAgICAgICAgICAgICAgICB6X2ludGYKKyMgIGRlZmluZSBvdXRfZnVuYyAgICAgICAgICAgICAgel9vdXRfZnVuYworIyAgZGVmaW5lIHVJbnQgICAgICAgICAgICAgICAgICB6X3VJbnQKKyMgIGRlZmluZSB1SW50ZiAgICAgICAgICAgICAgICAgel91SW50ZgorIyAgZGVmaW5lIHVMb25nICAgICAgICAgICAgICAgICB6X3VMb25nCisjICBkZWZpbmUgdUxvbmdmICAgICAgICAgICAgICAgIHpfdUxvbmdmCisjICBkZWZpbmUgdm9pZHAgICAgICAgICAgICAgICAgIHpfdm9pZHAKKyMgIGRlZmluZSB2b2lkcGMgICAgICAgICAgICAgICAgel92b2lkcGMKKyMgIGRlZmluZSB2b2lkcGYgICAgICAgICAgICAgICAgel92b2lkcGYKKworLyogYWxsIHpsaWIgc3RydWN0cyBpbiB6bGliLmggYW5kIHpjb25mLmggKi8KKyMgIGRlZmluZSBnel9oZWFkZXJfcyAgICAgICAgICAgel9nel9oZWFkZXJfcworIyAgZGVmaW5lIGludGVybmFsX3N0YXRlICAgICAgICB6X2ludGVybmFsX3N0YXRlCisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX01TRE9TX18pICYmICFkZWZpbmVkKE1TRE9TKQorIyAgZGVmaW5lIE1TRE9TCisjZW5kaWYKKyNpZiAoZGVmaW5lZChPU18yKSB8fCBkZWZpbmVkKF9fT1MyX18pKSAmJiAhZGVmaW5lZChPUzIpCisjICBkZWZpbmUgT1MyCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9XSU5ET1dTKSAmJiAhZGVmaW5lZChXSU5ET1dTKQorIyAgZGVmaW5lIFdJTkRPV1MKKyNlbmRpZgorI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpIHx8IGRlZmluZWQoX19XSU4zMl9fKQorIyAgaWZuZGVmIFdJTjMyCisjICAgIGRlZmluZSBXSU4zMgorIyAgZW5kaWYKKyNlbmRpZgorI2lmIChkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChXSU5ET1dTKSkgJiYgIWRlZmluZWQoV0lOMzIpCisjICBpZiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19GTEFUX18pICYmICFkZWZpbmVkKF9fMzg2X18pCisjICAgIGlmbmRlZiBTWVMxNkJJVAorIyAgICAgIGRlZmluZSBTWVMxNkJJVAorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisvKgorICogQ29tcGlsZSB3aXRoIC1ETUFYU0VHXzY0SyBpZiB0aGUgYWxsb2MgZnVuY3Rpb24gY2Fubm90IGFsbG9jYXRlIG1vcmUKKyAqIHRoYW4gNjRrIGJ5dGVzIGF0IGEgdGltZSAobmVlZGVkIG9uIHN5c3RlbXMgd2l0aCAxNi1iaXQgaW50KS4KKyAqLworI2lmZGVmIFNZUzE2QklUCisjICBkZWZpbmUgTUFYU0VHXzY0SworI2VuZGlmCisjaWZkZWYgTVNET1MKKyMgIGRlZmluZSBVTkFMSUdORURfT0sKKyNlbmRpZgorCisjaWZkZWYgX19TVERDX1ZFUlNJT05fXworIyAgaWZuZGVmIFNUREMKKyMgICAgZGVmaW5lIFNUREMKKyMgIGVuZGlmCisjICBpZiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKyMgICAgaWZuZGVmIFNUREM5OQorIyAgICAgIGRlZmluZSBTVERDOTkKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykpCisjICBkZWZpbmUgU1REQworI2VuZGlmCisjaWYgIWRlZmluZWQoU1REQykgJiYgKGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSkKKyMgIGRlZmluZSBTVERDCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChXSU5ET1dTKSB8fCBkZWZpbmVkKFdJTjMyKSkKKyMgIGRlZmluZSBTVERDCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChPUzIpIHx8IGRlZmluZWQoX19IT1NfQUlYX18pKQorIyAgZGVmaW5lIFNUREMKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX09TNDAwX18pICYmICFkZWZpbmVkKFNUREMpICAgIC8qIGlTZXJpZXMgKGZvcm1lcmx5IEFTLzQwMCkuICovCisjICBkZWZpbmUgU1REQworI2VuZGlmCisKKyNpZm5kZWYgU1REQworIyAgaWZuZGVmIGNvbnN0IC8qIGNhbm5vdCB1c2UgIWRlZmluZWQoU1REQykgJiYgIWRlZmluZWQoY29uc3QpIG9uIE1hYyAqLworIyAgICBkZWZpbmUgY29uc3QgICAgICAgLyogbm90ZTogbmVlZCBhIG1vcmUgZ2VudGxlIHNvbHV0aW9uIGhlcmUgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoWkxJQl9DT05TVCkgJiYgIWRlZmluZWQoel9jb25zdCkKKyMgIGRlZmluZSB6X2NvbnN0IGNvbnN0CisjZWxzZQorIyAgZGVmaW5lIHpfY29uc3QKKyNlbmRpZgorCisvKiBTb21lIE1hYyBjb21waWxlcnMgbWVyZ2UgYWxsIC5oIGZpbGVzIGluY29ycmVjdGx5OiAqLworI2lmIGRlZmluZWQoX19NV0VSS1NfXyl8fGRlZmluZWQoYXBwbGVjKXx8ZGVmaW5lZChUSElOS19DKXx8ZGVmaW5lZChfX1NDX18pCisjICBkZWZpbmUgTk9fRFVNTVlfREVDTAorI2VuZGlmCisKKy8qIE1heGltdW0gdmFsdWUgZm9yIG1lbUxldmVsIGluIGRlZmxhdGVJbml0MiAqLworI2lmbmRlZiBNQVhfTUVNX0xFVkVMCisjICBpZmRlZiBNQVhTRUdfNjRLCisjICAgIGRlZmluZSBNQVhfTUVNX0xFVkVMIDgKKyMgIGVsc2UKKyMgICAgZGVmaW5lIE1BWF9NRU1fTEVWRUwgOQorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBNYXhpbXVtIHZhbHVlIGZvciB3aW5kb3dCaXRzIGluIGRlZmxhdGVJbml0MiBhbmQgaW5mbGF0ZUluaXQyLgorICogV0FSTklORzogcmVkdWNpbmcgTUFYX1dCSVRTIG1ha2VzIG1pbmlnemlwIHVuYWJsZSB0byBleHRyYWN0IC5neiBmaWxlcworICogY3JlYXRlZCBieSBnemlwLiAoRmlsZXMgY3JlYXRlZCBieSBtaW5pZ3ppcCBjYW4gc3RpbGwgYmUgZXh0cmFjdGVkIGJ5CisgKiBnemlwLikKKyAqLworI2lmbmRlZiBNQVhfV0JJVFMKKyMgIGRlZmluZSBNQVhfV0JJVFMgICAxNSAvKiAzMksgTFo3NyB3aW5kb3cgKi8KKyNlbmRpZgorCisvKiBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgZGVmbGF0ZSBhcmUgKGluIGJ5dGVzKToKKyAgICAgICAgICAgICgxIDw8ICh3aW5kb3dCaXRzKzIpKSArICAoMSA8PCAobWVtTGV2ZWwrOSkpCisgdGhhdCBpczogMTI4SyBmb3Igd2luZG93Qml0cz0xNSAgKyAgMTI4SyBmb3IgbWVtTGV2ZWwgPSA4ICAoZGVmYXVsdCB2YWx1ZXMpCisgcGx1cyBhIGZldyBraWxvYnl0ZXMgZm9yIHNtYWxsIG9iamVjdHMuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byByZWR1Y2UKKyB0aGUgZGVmYXVsdCBtZW1vcnkgcmVxdWlyZW1lbnRzIGZyb20gMjU2SyB0byAxMjhLLCBjb21waWxlIHdpdGgKKyAgICAgbWFrZSBDRkxBR1M9Ii1PIC1ETUFYX1dCSVRTPTE0IC1ETUFYX01FTV9MRVZFTD03IgorIE9mIGNvdXJzZSB0aGlzIHdpbGwgZ2VuZXJhbGx5IGRlZ3JhZGUgY29tcHJlc3Npb24gKHRoZXJlJ3Mgbm8gZnJlZSBsdW5jaCkuCisKKyAgIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBpbmZsYXRlIGFyZSAoaW4gYnl0ZXMpIDEgPDwgd2luZG93Qml0cworIHRoYXQgaXMsIDMySyBmb3Igd2luZG93Qml0cz0xNSAoZGVmYXVsdCB2YWx1ZSkgcGx1cyBhIGZldyBraWxvYnl0ZXMKKyBmb3Igc21hbGwgb2JqZWN0cy4KKyovCisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR5cGUgZGVjbGFyYXRpb25zICovCisKKyNpZm5kZWYgT0YgLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqLworIyAgaWZkZWYgU1REQworIyAgICBkZWZpbmUgT0YoYXJncykgIGFyZ3MKKyMgIGVsc2UKKyMgICAgZGVmaW5lIE9GKGFyZ3MpICAoKQorIyAgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFpfQVJHIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHN0ZGFyZyAqLworIyAgaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyMgICAgZGVmaW5lIFpfQVJHKGFyZ3MpICBhcmdzCisjICBlbHNlCisjICAgIGRlZmluZSBaX0FSRyhhcmdzKSAgKCkKKyMgIGVuZGlmCisjZW5kaWYKKworLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBmb3IgRkFSIGFyZSBuZWVkZWQgb25seSBmb3IgTVNET1MgbWl4ZWQKKyAqIG1vZGVsIHByb2dyYW1taW5nIChzbWFsbCBvciBtZWRpdW0gbW9kZWwgd2l0aCBzb21lIGZhciBhbGxvY2F0aW9ucykuCisgKiBUaGlzIHdhcyB0ZXN0ZWQgb25seSB3aXRoIE1TQzsgZm9yIG90aGVyIE1TRE9TIGNvbXBpbGVycyB5b3UgbWF5IGhhdmUKKyAqIHRvIGRlZmluZSBOT19NRU1DUFkgaW4genV0aWwuaC4gIElmIHlvdSBkb24ndCBuZWVkIHRoZSBtaXhlZCBtb2RlbCwKKyAqIGp1c3QgZGVmaW5lIEZBUiB0byBiZSBlbXB0eS4KKyAqLworI2lmZGVmIFNZUzE2QklUCisjICBpZiBkZWZpbmVkKE1fSTg2U00pIHx8IGRlZmluZWQoTV9JODZNTSkKKyAgICAgLyogTVNDIHNtYWxsIG9yIG1lZGl1bSBtb2RlbCAqLworIyAgICBkZWZpbmUgU01BTExfTUVESVVNCisjICAgIGlmZGVmIF9NU0NfVkVSCisjICAgICAgZGVmaW5lIEZBUiBfZmFyCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgRkFSIGZhcgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmIChkZWZpbmVkKF9fU01BTExfXykgfHwgZGVmaW5lZChfX01FRElVTV9fKSkKKyAgICAgLyogVHVyYm8gQyBzbWFsbCBvciBtZWRpdW0gbW9kZWwgKi8KKyMgICAgZGVmaW5lIFNNQUxMX01FRElVTQorIyAgICBpZmRlZiBfX0JPUkxBTkRDX18KKyMgICAgICBkZWZpbmUgRkFSIF9mYXIKKyMgICAgZWxzZQorIyAgICAgIGRlZmluZSBGQVIgZmFyCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdJTkRPV1MpIHx8IGRlZmluZWQoV0lOMzIpCisgICAvKiBJZiBidWlsZGluZyBvciB1c2luZyB6bGliIGFzIGEgRExMLCBkZWZpbmUgWkxJQl9ETEwuCisgICAgKiBUaGlzIGlzIG5vdCBtYW5kYXRvcnksIGJ1dCBpdCBvZmZlcnMgYSBsaXR0bGUgcGVyZm9ybWFuY2UgaW5jcmVhc2UuCisgICAgKi8KKyMgIGlmZGVmIFpMSUJfRExMCisjICAgIGlmIGRlZmluZWQoV0lOMzIpICYmICghZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IChfX0JPUkxBTkRDX18gPj0gMHg1MDApKQorIyAgICAgIGlmZGVmIFpMSUJfSU5URVJOQUwKKyMgICAgICAgIGRlZmluZSBaRVhURVJOIGV4dGVybiBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyMgICAgICBlbHNlCisjICAgICAgICBkZWZpbmUgWkVYVEVSTiBleHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmICAvKiBaTElCX0RMTCAqLworICAgLyogSWYgYnVpbGRpbmcgb3IgdXNpbmcgemxpYiB3aXRoIHRoZSBXSU5BUEkvV0lOQVBJViBjYWxsaW5nIGNvbnZlbnRpb24sCisgICAgKiBkZWZpbmUgWkxJQl9XSU5BUEkuCisgICAgKiBDYXV0aW9uOiB0aGUgc3RhbmRhcmQgWkxJQjEuRExMIGlzIE5PVCBjb21waWxlZCB1c2luZyBaTElCX1dJTkFQSS4KKyAgICAqLworIyAgaWZkZWYgWkxJQl9XSU5BUEkKKyMgICAgaWZkZWYgRkFSCisjICAgICAgdW5kZWYgRkFSCisjICAgIGVuZGlmCisjICAgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyAgICAgLyogTm8gbmVlZCBmb3IgX2V4cG9ydCwgdXNlIFpMSUIuREVGIGluc3RlYWQuICovCisgICAgIC8qIEZvciBjb21wbGV0ZSBXaW5kb3dzIGNvbXBhdGliaWxpdHksIHVzZSBXSU5BUEksIG5vdCBfX3N0ZGNhbGwuICovCisjICAgIGRlZmluZSBaRVhQT1JUIFdJTkFQSQorIyAgICBpZmRlZiBXSU4zMgorIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgV0lOQVBJVgorIyAgICBlbHNlCisjICAgICAgZGVmaW5lIFpFWFBPUlRWQSBGQVIgQ0RFQ0wKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fQkVPU19fKQorIyAgaWZkZWYgWkxJQl9ETEwKKyMgICAgaWZkZWYgWkxJQl9JTlRFUk5BTAorIyAgICAgIGRlZmluZSBaRVhQT1JUICAgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjICAgICAgZGVmaW5lIFpFWFBPUlRWQSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyMgICAgZWxzZQorIyAgICAgIGRlZmluZSBaRVhQT1JUICAgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjICAgICAgZGVmaW5lIFpFWFBPUlRWQSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBaRVhURVJOCisjICBkZWZpbmUgWkVYVEVSTiBleHRlcm4KKyNlbmRpZgorI2lmbmRlZiBaRVhQT1JUCisjICBkZWZpbmUgWkVYUE9SVAorI2VuZGlmCisjaWZuZGVmIFpFWFBPUlRWQQorIyAgZGVmaW5lIFpFWFBPUlRWQQorI2VuZGlmCisKKyNpZm5kZWYgRkFSCisjICBkZWZpbmUgRkFSCisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fTUFDVFlQRVNfXykKK3R5cGVkZWYgdW5zaWduZWQgY2hhciAgQnl0ZTsgIC8qIDggYml0cyAqLworI2VuZGlmCit0eXBlZGVmIHVuc2lnbmVkIGludCAgIHVJbnQ7ICAvKiAxNiBiaXRzIG9yIG1vcmUgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgdUxvbmc7IC8qIDMyIGJpdHMgb3IgbW9yZSAqLworCisjaWZkZWYgU01BTExfTUVESVVNCisgICAvKiBCb3JsYW5kIEMvQysrIGFuZCBzb21lIG9sZCBNU0MgdmVyc2lvbnMgaWdub3JlIEZBUiBpbnNpZGUgdHlwZWRlZiAqLworIyAgZGVmaW5lIEJ5dGVmIEJ5dGUgRkFSCisjZWxzZQorICAgdHlwZWRlZiBCeXRlICBGQVIgQnl0ZWY7CisjZW5kaWYKK3R5cGVkZWYgY2hhciAgRkFSIGNoYXJmOwordHlwZWRlZiBpbnQgICBGQVIgaW50ZjsKK3R5cGVkZWYgdUludCAgRkFSIHVJbnRmOwordHlwZWRlZiB1TG9uZyBGQVIgdUxvbmdmOworCisjaWZkZWYgU1REQworICAgdHlwZWRlZiB2b2lkIGNvbnN0ICp2b2lkcGM7CisgICB0eXBlZGVmIHZvaWQgRkFSICAgKnZvaWRwZjsKKyAgIHR5cGVkZWYgdm9pZCAgICAgICAqdm9pZHA7CisjZWxzZQorICAgdHlwZWRlZiBCeXRlIGNvbnN0ICp2b2lkcGM7CisgICB0eXBlZGVmIEJ5dGUgRkFSICAgKnZvaWRwZjsKKyAgIHR5cGVkZWYgQnl0ZSAgICAgICAqdm9pZHA7CisjZW5kaWYKKworI2lmICFkZWZpbmVkKFpfVTQpICYmICFkZWZpbmVkKFpfU09MTykgJiYgZGVmaW5lZChTVERDKQorIyAgaW5jbHVkZSA8bGltaXRzLmg+CisjICBpZiAoVUlOVF9NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZAorIyAgZWxpZiAoVUxPTkdfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgbG9uZworIyAgZWxpZiAoVVNIUlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgc2hvcnQKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIFpfVTQKKyAgIHR5cGVkZWYgWl9VNCB6X2NyY190OworI2Vsc2UKKyAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB6X2NyY190OworI2VuZGlmCisKKyNpZiAwCQkJCS8qIFN1bmxpYW5nLkxpdSAyMDEwMDkwOCBzeW5jIHRoZSBjb25maWcgdG8gdGhlIG9sZCByZXZpc2lvbiwgb3RoZXJ3aXNlLCBldmMgY29tcGlsZSBmYWlsZWQuICovCisjaWZkZWYgSEFWRV9VTklTVERfSCAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICisjZW5kaWYKKyNlbmRpZiAvKiAwICovCisKKyNpZmRlZiBIQVZFX1NUREFSR19IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX0hBVkVfU1REQVJHX0gKKyNlbmRpZgorCisjaWYgMAkJCQkvKiBTdW5saWFuZy5MaXUgMjAxMDA5MDggc3luYyB0aGUgY29uZmlnIHRvIHRoZSBvbGQgcmV2aXNpb24sIG90aGVyd2lzZSwgZXZjIGNvbXBpbGUgZmFpbGVkLiAqLworI2lmZGVmIFNUREMKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgICAgLyogZm9yIG9mZl90ICovCisjICBlbmRpZgorI2VuZGlmCisjZW5kaWYgLyogMCAqLworCisjaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkYXJnLmg+ICAgICAgICAgLyogZm9yIHZhX2xpc3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzdGRkZWYuaD4gICAgICAgICAvKiBmb3Igd2NoYXJfdCAqLworIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgMAkJCQkvKiBTdW5saWFuZy5MaXUgMjAxMDA5MDggc3luYyB0aGUgY29uZmlnIHRvIHRoZSBvbGQgcmV2aXNpb24sIG90aGVyd2lzZSwgZXZjIGNvbXBpbGUgZmFpbGVkLiAqLworLyogYSBsaXR0bGUgdHJpY2sgdG8gYWNjb21tb2RhdGUgYm90aCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIiBhbmQKKyAqICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMSIgYXMgcmVxdWVzdGluZyA2NC1iaXQgb3BlcmF0aW9ucywgKGV2ZW4KKyAqIHRob3VnaCB0aGUgZm9ybWVyIGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIExGUyBkb2N1bWVudCksIGJ1dCBjb25zaWRlcmluZworICogYm90aCAiI3VuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIDAiIGFzCisgKiBlcXVpdmFsZW50bHkgcmVxdWVzdGluZyBubyA2NC1iaXQgb3BlcmF0aW9ucworICovCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKKyMgIHVuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKyNlbmRpZgorI2VuZGlmIC8qIDAgKi8KKworI2lmIGRlZmluZWQoX19XQVRDT01DX18pICYmICFkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkKKyMgIGRlZmluZSBaX0hBVkVfVU5JU1REX0gKKyNlbmRpZgorI2lmbmRlZiBaX1NPTE8KKyNpZiAwCQkJCS8qIFN1bmxpYW5nLkxpdSAyMDEwMDkwOCBzeW5jIHRoZSBjb25maWcgdG8gdGhlIG9sZCByZXZpc2lvbiwgb3RoZXJ3aXNlLCBldmMgY29tcGlsZSBmYWlsZWQuICovCisjICBpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQorIyAgICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAvKiBmb3IgU0VFS18qLCBvZmZfdCwgYW5kIF9MRlM2NF9MQVJHRUZJTEUgKi8KKyMgICAgaWZkZWYgVk1TCisjICAgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAgIC8qIGZvciBvZmZfdCAqLworIyAgICBlbmRpZgorIyAgICBpZm5kZWYgel9vZmZfdAorIyAgICAgIGRlZmluZSB6X29mZl90IG9mZl90CisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmIC8qIDAgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTEZTNjRfTEFSR0VGSUxFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyMgIGRlZmluZSBaX0xGUzY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAgZGVmaW5lIFpfTEFSR0U2NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUy0wID09IDY0ICYmIGRlZmluZWQoWl9MRlM2NCkKKyMgIGRlZmluZSBaX1dBTlQ2NAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChTRUVLX1NFVCkgJiYgIWRlZmluZWQoWl9TT0xPKQorIyAgZGVmaW5lIFNFRUtfU0VUICAgICAgICAwICAgICAgIC8qIFNlZWsgZnJvbSBiZWdpbm5pbmcgb2YgZmlsZS4gICovCisjICBkZWZpbmUgU0VFS19DVVIgICAgICAgIDEgICAgICAgLyogU2VlayBmcm9tIGN1cnJlbnQgcG9zaXRpb24uICAqLworIyAgZGVmaW5lIFNFRUtfRU5EICAgICAgICAyICAgICAgIC8qIFNldCBmaWxlIHBvaW50ZXIgdG8gRU9GIHBsdXMgIm9mZnNldCIgKi8KKyNlbmRpZgorCisjaWZuZGVmIHpfb2ZmX3QKKyMgIGRlZmluZSB6X29mZl90IGxvbmcKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKFpfTEFSR0U2NCkKKyMgIGRlZmluZSB6X29mZjY0X3Qgb2ZmNjRfdAorI2Vsc2UKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoWl9TT0xPKQorIyAgICBkZWZpbmUgel9vZmY2NF90IF9faW50NjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90CisjICBlbmRpZgorI2VuZGlmCisKKy8qIE1WUyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBleHRlcm5hbCBuYW1lcyBsYXJnZXIgdGhhbiA4IGJ5dGVzICovCisjaWYgZGVmaW5lZChfX01WU19fKQorICAjcHJhZ21hIG1hcChkZWZsYXRlSW5pdF8sIkRFSU4iKQorICAjcHJhZ21hIG1hcChkZWZsYXRlSW5pdDJfLCJERUlOMiIpCisgICNwcmFnbWEgbWFwKGRlZmxhdGVFbmQsIkRFRU5EIikKKyAgI3ByYWdtYSBtYXAoZGVmbGF0ZUJvdW5kLCJERUJORCIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVJbml0XywiSU5JTiIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVJbml0Ml8sIklOSU4yIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0ZUVuZCwiSU5FTkQiKQorICAjcHJhZ21hIG1hcChpbmZsYXRlU3luYywiSU5TWSIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVTZXREaWN0aW9uYXJ5LCJJTlNFREkiKQorICAjcHJhZ21hIG1hcChjb21wcmVzc0JvdW5kLCJDTUJORCIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVfdGFibGUsIklOVEFCTCIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVfZmFzdCwiSU5GQSIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVfY29weXJpZ2h0LCJJTkNPUFkiKQorI2VuZGlmCisKKyNlbmRpZiAvKiBaQ09ORl9IICovCmRpZmYgLS1naXQgYS9jb3JlL2luY2x1ZGUvdGhpcmRwYXJ0aWVzL3psaWIvemxpYi5oIGIvY29yZS9pbmNsdWRlL3RoaXJkcGFydGllcy96bGliL3psaWIuaAppbmRleCA1ZTA2OGM0Li41ODUwMDcwIDEwMDY0NAotLS0gYS9jb3JlL2luY2x1ZGUvdGhpcmRwYXJ0aWVzL3psaWIvemxpYi5oCisrKyBiL2NvcmUvaW5jbHVkZS90aGlyZHBhcnRpZXMvemxpYi96bGliLmgKQEAgLTEsMTgyOCArMSwxODI4IEBACi0vKiB6bGliLmggLS0gaW50ZXJmYWNlIG9mIHRoZSAnemxpYicgZ2VuZXJhbCBwdXJwb3NlIGNvbXByZXNzaW9uIGxpYnJhcnkNCi0gIHZlcnNpb24gMS4yLjgsIEFwcmlsIDI4dGgsIDIwMTMNCi0NCi0gIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXINCi0NCi0gIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkDQotICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzDQotICBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLg0KLQ0KLSAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsDQotICBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0DQotICBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6DQotDQotICAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdA0KLSAgICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUNCi0gICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQ0KLSAgICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4NCi0gIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlDQotICAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuDQotICAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLg0KLQ0KLSAgSmVhbi1sb3VwIEdhaWxseSAgICAgICAgTWFyayBBZGxlcg0KLSAgamxvdXBAZ3ppcC5vcmcgICAgICAgICAgbWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdQ0KLQ0KLQ0KLSAgVGhlIGRhdGEgZm9ybWF0IHVzZWQgYnkgdGhlIHpsaWIgbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDcyAoUmVxdWVzdCBmb3INCi0gIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTANCi0gICh6bGliIGZvcm1hdCksIHJmYzE5NTEgKGRlZmxhdGUgZm9ybWF0KSBhbmQgcmZjMTk1MiAoZ3ppcCBmb3JtYXQpLg0KLSovDQotDQotI2lmbmRlZiBaTElCX0gNCi0jZGVmaW5lIFpMSUJfSA0KLQ0KLSNkZWZpbmUgZGVmbGF0ZV9jb3B5cmlnaHQgRlBERkFQSV9kZWZsYXRlX2NvcHlyaWdodA0KLSNkZWZpbmUgYWRsZXIzMiBGUERGQVBJX2FkbGVyMzINCi0jZGVmaW5lIGNvbXByZXNzMiBGUERGQVBJX2NvbXByZXNzMg0KLSNkZWZpbmUgY29tcHJlc3MgRlBERkFQSV9jb21wcmVzcw0KLSNkZWZpbmUgY29tcHJlc3NCb3VuZCBGUERGQVBJX2NvbXByZXNzQm91bmQNCi0jZGVmaW5lIGdldF9jcmNfdGFibGUgRlBERkFQSV9nZXRfY3JjX3RhYmxlDQotI2RlZmluZSBjcmMzMiBGUERGQVBJX2NyYzMyDQotI2RlZmluZSBkZWZsYXRlSW5pdF8gRlBERkFQSV9kZWZsYXRlSW5pdF8NCi0jZGVmaW5lIGRlZmxhdGVJbml0Ml8gRlBERkFQSV9kZWZsYXRlSW5pdDJfDQotI2RlZmluZSBkZWZsYXRlU2V0RGljdGlvbmFyeSBGUERGQVBJX2RlZmxhdGVTZXREaWN0aW9uYXJ5DQotI2RlZmluZSBkZWZsYXRlUmVzZXQgRlBERkFQSV9kZWZsYXRlUmVzZXQNCi0jZGVmaW5lIGRlZmxhdGVQcmltZSBGUERGQVBJX2RlZmxhdGVQcmltZQ0KLSNkZWZpbmUgZGVmbGF0ZVBhcmFtcyBGUERGQVBJX2RlZmxhdGVQYXJhbXMNCi0jZGVmaW5lIGRlZmxhdGVCb3VuZCBGUERGQVBJX2RlZmxhdGVCb3VuZA0KLSNkZWZpbmUgZGVmbGF0ZVNldEhlYWRlciBGUERGQVBJX2RlZmxhdGVTZXRIZWFkZXINCi0jZGVmaW5lIGRlZmxhdGVUdW5lIEZQREZBUElfZGVmbGF0ZVR1bmUNCi0jZGVmaW5lIGRlZmxhdGUgRlBERkFQSV9kZWZsYXRlDQotI2RlZmluZSBkZWZsYXRlRW5kIEZQREZBUElfZGVmbGF0ZUVuZA0KLSNkZWZpbmUgZGVmbGF0ZUNvcHkgRlBERkFQSV9kZWZsYXRlQ29weQ0KLSNkZWZpbmUgaW5mbGF0ZUJhY2tJbml0XyBGUERGQVBJX2luZmxhdGVCYWNrSW5pdF8NCi0jZGVmaW5lIGluZmxhdGVCYWNrIEZQREZBUElfaW5mbGF0ZUJhY2sNCi0jZGVmaW5lIGluZmxhdGVCYWNrRW5kIEZQREZBUElfaW5mbGF0ZUJhY2tFbmQNCi0jZGVmaW5lIGluZmxhdGVSZXNldCBGUERGQVBJX2luZmxhdGVSZXNldA0KLSNkZWZpbmUgaW5mbGF0ZUluaXQyXyBGUERGQVBJX2luZmxhdGVJbml0Ml8NCi0jZGVmaW5lIGluZmxhdGVJbml0XyBGUERGQVBJX2luZmxhdGVJbml0Xw0KLSNkZWZpbmUgaW5mbGF0ZSBGUERGQVBJX2luZmxhdGUNCi0jZGVmaW5lIGluZmxhdGVFbmQgRlBERkFQSV9pbmZsYXRlRW5kDQotI2RlZmluZSBpbmZsYXRlU2V0RGljdGlvbmFyeSBGUERGQVBJX2luZmxhdGVTZXREaWN0aW9uYXJ5DQotI2RlZmluZSBpbmZsYXRlU3luYyBGUERGQVBJX2luZmxhdGVTeW5jDQotI2RlZmluZSBpbmZsYXRlU3luY1BvaW50IEZQREZBUElfaW5mbGF0ZVN5bmNQb2ludA0KLSNkZWZpbmUgaW5mbGF0ZUNvcHkgRlBERkFQSV9pbmZsYXRlQ29weQ0KLSNkZWZpbmUgdW5jb21wcmVzcyBGUERGQVBJX3VuY29tcHJlc3MNCi0jZGVmaW5lIHpsaWJWZXJzaW9uIEZQREZBUElfemxpYlZlcnNpb24NCi0jZGVmaW5lIHpsaWJDb21waWxlRmxhZ3MgRlBERkFQSV96bGliQ29tcGlsZUZsYWdzDQotI2RlZmluZSB6RXJyb3IgRlBERkFQSV96RXJyb3INCi0jZGVmaW5lIHpfZXJybXNnIEZQREZBUElfel9lcnJtc2cNCi0jZGVmaW5lIHpjZnJlZSBGUERGQVBJX3pjZnJlZQ0KLSNkZWZpbmUgemNhbGxvYyBGUERGQVBJX3pjYWxsb2MNCi0jZGVmaW5lIGluZmxhdGVfZmFzdCBGUERGQVBJX2luZmxhdGVfZmFzdA0KLSNkZWZpbmUgaW5mbGF0ZV90YWJsZSBGUERGQVBJX2luZmxhdGVfdGFibGUNCi0jZGVmaW5lIGluZmxhdGVfY29weXJpZ2h0IEZQREZBUElfaW5mbGF0ZV9jb3B5cmlnaHQNCi0jZGVmaW5lIF9sZW5ndGhfY29kZSBGUERGQVBJX2xlbmd0aF9jb2RlDQotI2RlZmluZSBfdHJfZmx1c2hfYmxvY2sgRlBERkFQSV90cl9mbHVzaF9ibG9jaw0KLSNkZWZpbmUgX2Rpc3RfY29kZSBGUERGQVBJX2Rpc3RfY29kZQ0KLSNkZWZpbmUgX3RyX3N0b3JlZF9ibG9jayBGUERGQVBJX3RyX3N0b3JlZF9ibG9jaw0KLSNkZWZpbmUgX3RyX2luaXQgRlBERkFQSV90cl9pbml0DQotI2RlZmluZSBfdHJfYWxpZ24gRlBERkFQSV90cl9hbGlnbg0KLSNkZWZpbmUgX3RyX3RhbGx5IEZQREZBUElfdHJfdGFsbHkNCi0jZGVmaW5lIGFkbGVyMzJfY29tYmluZSBGUERGQVBJX2FkbGVyMzJfY29tYmluZQ0KLSNkZWZpbmUgaW5mbGF0ZVByaW1lIEZQREZBUElfaW5mbGF0ZVByaW1lDQotI2RlZmluZSBpbmZsYXRlR2V0SGVhZGVyIEZQREZBUElfaW5mbGF0ZUdldEhlYWRlcg0KLSNkZWZpbmUgY3JjMzJfY29tYmluZSBGUERGQVBJX2NyYzMyX2NvbWJpbmUNCi0jZGVmaW5lIGluZmxhdGVSZXNldDIgRlBERkFQSV9pbmZsYXRlUmVzZXQyDQotI2RlZmluZSBpbmZsYXRlVW5kZXJtaW5lIEZQREZBUElfaW5mbGF0ZVVuZGVybWluZQ0KLSNkZWZpbmUgaW5mbGF0ZU1hcmsgRlBERkFQSV9pbmZsYXRlTWFyaw0KLSNkZWZpbmUgYWRsZXIzMl9jb21iaW5lNjQgRlBERkFQSV9hZGxlcjMyX2NvbWJpbmU2NA0KLQ0KLSNpbmNsdWRlICJ6Y29uZi5oIg0KLQ0KLS8qIFN1bmxpYW5nLkxpdSAyMDEwMDkwOCBzeW5jIHRoZSBjb25maWcgdG8gdGhlIG9sZCByZXZpc2lvbi4gTk9fR1pJUCAqLw0KLSNkZWZpbmUgTk9fR1pJUAkJLyogWFlRICovDQotDQotI2lmZGVmIF9fY3BsdXNwbHVzDQotZXh0ZXJuICJDIiB7DQotI2VuZGlmDQotDQotI2RlZmluZSBaTElCX1ZFUlNJT04gIjEuMi44Ig0KLSNkZWZpbmUgWkxJQl9WRVJOVU0gMHgxMjgwDQotI2RlZmluZSBaTElCX1ZFUl9NQUpPUiAxDQotI2RlZmluZSBaTElCX1ZFUl9NSU5PUiAyDQotI2RlZmluZSBaTElCX1ZFUl9SRVZJU0lPTiA4DQotI2RlZmluZSBaTElCX1ZFUl9TVUJSRVZJU0lPTiAwDQotDQotLyoNCi0gICAgVGhlICd6bGliJyBjb21wcmVzc2lvbiBsaWJyYXJ5IHByb3ZpZGVzIGluLW1lbW9yeSBjb21wcmVzc2lvbiBhbmQNCi0gIGRlY29tcHJlc3Npb24gZnVuY3Rpb25zLCBpbmNsdWRpbmcgaW50ZWdyaXR5IGNoZWNrcyBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEuDQotICBUaGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgc3VwcG9ydHMgb25seSBvbmUgY29tcHJlc3Npb24gbWV0aG9kIChkZWZsYXRpb24pDQotICBidXQgb3RoZXIgYWxnb3JpdGhtcyB3aWxsIGJlIGFkZGVkIGxhdGVyIGFuZCB3aWxsIGhhdmUgdGhlIHNhbWUgc3RyZWFtDQotICBpbnRlcmZhY2UuDQotDQotICAgIENvbXByZXNzaW9uIGNhbiBiZSBkb25lIGluIGEgc2luZ2xlIHN0ZXAgaWYgdGhlIGJ1ZmZlcnMgYXJlIGxhcmdlIGVub3VnaCwNCi0gIG9yIGNhbiBiZSBkb25lIGJ5IHJlcGVhdGVkIGNhbGxzIG9mIHRoZSBjb21wcmVzc2lvbiBmdW5jdGlvbi4gIEluIHRoZSBsYXR0ZXINCi0gIGNhc2UsIHRoZSBhcHBsaWNhdGlvbiBtdXN0IHByb3ZpZGUgbW9yZSBpbnB1dCBhbmQvb3IgY29uc3VtZSB0aGUgb3V0cHV0DQotICAocHJvdmlkaW5nIG1vcmUgb3V0cHV0IHNwYWNlKSBiZWZvcmUgZWFjaCBjYWxsLg0KLQ0KLSAgICBUaGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCB1c2VkIGJ5IGRlZmF1bHQgYnkgdGhlIGluLW1lbW9yeSBmdW5jdGlvbnMgaXMNCi0gIHRoZSB6bGliIGZvcm1hdCwgd2hpY2ggaXMgYSB6bGliIHdyYXBwZXIgZG9jdW1lbnRlZCBpbiBSRkMgMTk1MCwgd3JhcHBlZA0KLSAgYXJvdW5kIGEgZGVmbGF0ZSBzdHJlYW0sIHdoaWNoIGlzIGl0c2VsZiBkb2N1bWVudGVkIGluIFJGQyAxOTUxLg0KLQ0KLSAgICBUaGUgbGlicmFyeSBhbHNvIHN1cHBvcnRzIHJlYWRpbmcgYW5kIHdyaXRpbmcgZmlsZXMgaW4gZ3ppcCAoLmd6KSBmb3JtYXQNCi0gIHdpdGggYW4gaW50ZXJmYWNlIHNpbWlsYXIgdG8gdGhhdCBvZiBzdGRpbyB1c2luZyB0aGUgZnVuY3Rpb25zIHRoYXQgc3RhcnQNCi0gIHdpdGggImd6Ii4gIFRoZSBnemlwIGZvcm1hdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgemxpYiBmb3JtYXQuICBnemlwIGlzIGENCi0gIGd6aXAgd3JhcHBlciwgZG9jdW1lbnRlZCBpbiBSRkMgMTk1Miwgd3JhcHBlZCBhcm91bmQgYSBkZWZsYXRlIHN0cmVhbS4NCi0NCi0gICAgVGhpcyBsaWJyYXJ5IGNhbiBvcHRpb25hbGx5IHJlYWQgYW5kIHdyaXRlIGd6aXAgc3RyZWFtcyBpbiBtZW1vcnkgYXMgd2VsbC4NCi0NCi0gICAgVGhlIHpsaWIgZm9ybWF0IHdhcyBkZXNpZ25lZCB0byBiZSBjb21wYWN0IGFuZCBmYXN0IGZvciB1c2UgaW4gbWVtb3J5DQotICBhbmQgb24gY29tbXVuaWNhdGlvbnMgY2hhbm5lbHMuICBUaGUgZ3ppcCBmb3JtYXQgd2FzIGRlc2lnbmVkIGZvciBzaW5nbGUtDQotICBmaWxlIGNvbXByZXNzaW9uIG9uIGZpbGUgc3lzdGVtcywgaGFzIGEgbGFyZ2VyIGhlYWRlciB0aGFuIHpsaWIgdG8gbWFpbnRhaW4NCi0gIGRpcmVjdG9yeSBpbmZvcm1hdGlvbiwgYW5kIHVzZXMgYSBkaWZmZXJlbnQsIHNsb3dlciBjaGVjayBtZXRob2QgdGhhbiB6bGliLg0KLQ0KLSAgICBUaGUgbGlicmFyeSBkb2VzIG5vdCBpbnN0YWxsIGFueSBzaWduYWwgaGFuZGxlci4gIFRoZSBkZWNvZGVyIGNoZWNrcw0KLSAgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZSBjb21wcmVzc2VkIGRhdGEsIHNvIHRoZSBsaWJyYXJ5IHNob3VsZCBuZXZlciBjcmFzaA0KLSAgZXZlbiBpbiBjYXNlIG9mIGNvcnJ1cHRlZCBpbnB1dC4NCi0qLw0KLQ0KLXR5cGVkZWYgdm9pZHBmICgqYWxsb2NfZnVuYykgT0YoKHZvaWRwZiBvcGFxdWUsIHVJbnQgaXRlbXMsIHVJbnQgc2l6ZSkpOw0KLXR5cGVkZWYgdm9pZCAgICgqZnJlZV9mdW5jKSAgT0YoKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBhZGRyZXNzKSk7DQotDQotc3RydWN0IGludGVybmFsX3N0YXRlOw0KLQ0KLXR5cGVkZWYgc3RydWN0IHpfc3RyZWFtX3Mgew0KLSAgICB6X2NvbnN0IEJ5dGVmICpuZXh0X2luOyAgICAgLyogbmV4dCBpbnB1dCBieXRlICovDQotICAgIHVJbnQgICAgIGF2YWlsX2luOyAgLyogbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCBuZXh0X2luICovDQotICAgIHVMb25nICAgIHRvdGFsX2luOyAgLyogdG90YWwgbnVtYmVyIG9mIGlucHV0IGJ5dGVzIHJlYWQgc28gZmFyICovDQotDQotICAgIEJ5dGVmICAgICpuZXh0X291dDsgLyogbmV4dCBvdXRwdXQgYnl0ZSBzaG91bGQgYmUgcHV0IHRoZXJlICovDQotICAgIHVJbnQgICAgIGF2YWlsX291dDsgLyogcmVtYWluaW5nIGZyZWUgc3BhY2UgYXQgbmV4dF9vdXQgKi8NCi0gICAgdUxvbmcgICAgdG90YWxfb3V0OyAvKiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgb3V0cHV0IHNvIGZhciAqLw0KLQ0KLSAgICB6X2NvbnN0IGNoYXIgKm1zZzsgIC8qIGxhc3QgZXJyb3IgbWVzc2FnZSwgTlVMTCBpZiBubyBlcnJvciAqLw0KLSAgICBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgRkFSICpzdGF0ZTsgLyogbm90IHZpc2libGUgYnkgYXBwbGljYXRpb25zICovDQotDQotICAgIGFsbG9jX2Z1bmMgemFsbG9jOyAgLyogdXNlZCB0byBhbGxvY2F0ZSB0aGUgaW50ZXJuYWwgc3RhdGUgKi8NCi0gICAgZnJlZV9mdW5jICB6ZnJlZTsgICAvKiB1c2VkIHRvIGZyZWUgdGhlIGludGVybmFsIHN0YXRlICovDQotICAgIHZvaWRwZiAgICAgb3BhcXVlOyAgLyogcHJpdmF0ZSBkYXRhIG9iamVjdCBwYXNzZWQgdG8gemFsbG9jIGFuZCB6ZnJlZSAqLw0KLQ0KLSAgICBpbnQgICAgIGRhdGFfdHlwZTsgIC8qIGJlc3QgZ3Vlc3MgYWJvdXQgdGhlIGRhdGEgdHlwZTogYmluYXJ5IG9yIHRleHQgKi8NCi0gICAgdUxvbmcgICBhZGxlcjsgICAgICAvKiBhZGxlcjMyIHZhbHVlIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSAqLw0KLSAgICB1TG9uZyAgIHJlc2VydmVkOyAgIC8qIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovDQotfSB6X3N0cmVhbTsNCi0NCi10eXBlZGVmIHpfc3RyZWFtIEZBUiAqel9zdHJlYW1wOw0KLQ0KLS8qDQotICAgICBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiBwYXNzZWQgdG8gYW5kIGZyb20gemxpYiByb3V0aW5lcy4gIFNlZSBSRkMgMTk1Mg0KLSAgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgbWVhbmluZ3Mgb2YgdGhlc2UgZmllbGRzLg0KLSovDQotdHlwZWRlZiBzdHJ1Y3QgZ3pfaGVhZGVyX3Mgew0KLSAgICBpbnQgICAgIHRleHQ7ICAgICAgIC8qIHRydWUgaWYgY29tcHJlc3NlZCBkYXRhIGJlbGlldmVkIHRvIGJlIHRleHQgKi8NCi0gICAgdUxvbmcgICB0aW1lOyAgICAgICAvKiBtb2RpZmljYXRpb24gdGltZSAqLw0KLSAgICBpbnQgICAgIHhmbGFnczsgICAgIC8qIGV4dHJhIGZsYWdzIChub3QgdXNlZCB3aGVuIHdyaXRpbmcgYSBnemlwIGZpbGUpICovDQotICAgIGludCAgICAgb3M7ICAgICAgICAgLyogb3BlcmF0aW5nIHN5c3RlbSAqLw0KLSAgICBCeXRlZiAgICpleHRyYTsgICAgIC8qIHBvaW50ZXIgdG8gZXh0cmEgZmllbGQgb3IgWl9OVUxMIGlmIG5vbmUgKi8NCi0gICAgdUludCAgICBleHRyYV9sZW47ICAvKiBleHRyYSBmaWVsZCBsZW5ndGggKHZhbGlkIGlmIGV4dHJhICE9IFpfTlVMTCkgKi8NCi0gICAgdUludCAgICBleHRyYV9tYXg7ICAvKiBzcGFjZSBhdCBleHRyYSAob25seSB3aGVuIHJlYWRpbmcgaGVhZGVyKSAqLw0KLSAgICBCeXRlZiAgICpuYW1lOyAgICAgIC8qIHBvaW50ZXIgdG8gemVyby10ZXJtaW5hdGVkIGZpbGUgbmFtZSBvciBaX05VTEwgKi8NCi0gICAgdUludCAgICBuYW1lX21heDsgICAvKiBzcGFjZSBhdCBuYW1lIChvbmx5IHdoZW4gcmVhZGluZyBoZWFkZXIpICovDQotICAgIEJ5dGVmICAgKmNvbW1lbnQ7ICAgLyogcG9pbnRlciB0byB6ZXJvLXRlcm1pbmF0ZWQgY29tbWVudCBvciBaX05VTEwgKi8NCi0gICAgdUludCAgICBjb21tX21heDsgICAvKiBzcGFjZSBhdCBjb21tZW50IChvbmx5IHdoZW4gcmVhZGluZyBoZWFkZXIpICovDQotICAgIGludCAgICAgaGNyYzsgICAgICAgLyogdHJ1ZSBpZiB0aGVyZSB3YXMgb3Igd2lsbCBiZSBhIGhlYWRlciBjcmMgKi8NCi0gICAgaW50ICAgICBkb25lOyAgICAgICAvKiB0cnVlIHdoZW4gZG9uZSByZWFkaW5nIGd6aXAgaGVhZGVyIChub3QgdXNlZA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gd3JpdGluZyBhIGd6aXAgZmlsZSkgKi8NCi19IGd6X2hlYWRlcjsNCi0NCi10eXBlZGVmIGd6X2hlYWRlciBGQVIgKmd6X2hlYWRlcnA7DQotDQotLyoNCi0gICAgIFRoZSBhcHBsaWNhdGlvbiBtdXN0IHVwZGF0ZSBuZXh0X2luIGFuZCBhdmFpbF9pbiB3aGVuIGF2YWlsX2luIGhhcyBkcm9wcGVkDQotICAgdG8gemVyby4gIEl0IG11c3QgdXBkYXRlIG5leHRfb3V0IGFuZCBhdmFpbF9vdXQgd2hlbiBhdmFpbF9vdXQgaGFzIGRyb3BwZWQNCi0gICB0byB6ZXJvLiAgVGhlIGFwcGxpY2F0aW9uIG11c3QgaW5pdGlhbGl6ZSB6YWxsb2MsIHpmcmVlIGFuZCBvcGFxdWUgYmVmb3JlDQotICAgY2FsbGluZyB0aGUgaW5pdCBmdW5jdGlvbi4gIEFsbCBvdGhlciBmaWVsZHMgYXJlIHNldCBieSB0aGUgY29tcHJlc3Npb24NCi0gICBsaWJyYXJ5IGFuZCBtdXN0IG5vdCBiZSB1cGRhdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4NCi0NCi0gICAgIFRoZSBvcGFxdWUgdmFsdWUgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHdpbGwgYmUgcGFzc2VkIGFzIHRoZSBmaXJzdA0KLSAgIHBhcmFtZXRlciBmb3IgY2FsbHMgb2YgemFsbG9jIGFuZCB6ZnJlZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgY3VzdG9tDQotICAgbWVtb3J5IG1hbmFnZW1lbnQuICBUaGUgY29tcHJlc3Npb24gbGlicmFyeSBhdHRhY2hlcyBubyBtZWFuaW5nIHRvIHRoZQ0KLSAgIG9wYXF1ZSB2YWx1ZS4NCi0NCi0gICAgIHphbGxvYyBtdXN0IHJldHVybiBaX05VTEwgaWYgdGhlcmUgaXMgbm90IGVub3VnaCBtZW1vcnkgZm9yIHRoZSBvYmplY3QuDQotICAgSWYgemxpYiBpcyB1c2VkIGluIGEgbXVsdGktdGhyZWFkZWQgYXBwbGljYXRpb24sIHphbGxvYyBhbmQgemZyZWUgbXVzdCBiZQ0KLSAgIHRocmVhZCBzYWZlLg0KLQ0KLSAgICAgT24gMTYtYml0IHN5c3RlbXMsIHRoZSBmdW5jdGlvbnMgemFsbG9jIGFuZCB6ZnJlZSBtdXN0IGJlIGFibGUgdG8gYWxsb2NhdGUNCi0gICBleGFjdGx5IDY1NTM2IGJ5dGVzLCBidXQgd2lsbCBub3QgYmUgcmVxdWlyZWQgdG8gYWxsb2NhdGUgbW9yZSB0aGFuIHRoaXMgaWYNCi0gICB0aGUgc3ltYm9sIE1BWFNFR182NEsgaXMgZGVmaW5lZCAoc2VlIHpjb25mLmgpLiAgV0FSTklORzogT24gTVNET1MsIHBvaW50ZXJzDQotICAgcmV0dXJuZWQgYnkgemFsbG9jIGZvciBvYmplY3RzIG9mIGV4YWN0bHkgNjU1MzYgYnl0ZXMgKm11c3QqIGhhdmUgdGhlaXINCi0gICBvZmZzZXQgbm9ybWFsaXplZCB0byB6ZXJvLiAgVGhlIGRlZmF1bHQgYWxsb2NhdGlvbiBmdW5jdGlvbiBwcm92aWRlZCBieSB0aGlzDQotICAgbGlicmFyeSBlbnN1cmVzIHRoaXMgKHNlZSB6dXRpbC5jKS4gIFRvIHJlZHVjZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGFuZCBhdm9pZA0KLSAgIGFueSBhbGxvY2F0aW9uIG9mIDY0SyBvYmplY3RzLCBhdCB0aGUgZXhwZW5zZSBvZiBjb21wcmVzc2lvbiByYXRpbywgY29tcGlsZQ0KLSAgIHRoZSBsaWJyYXJ5IHdpdGggLURNQVhfV0JJVFM9MTQgKHNlZSB6Y29uZi5oKS4NCi0NCi0gICAgIFRoZSBmaWVsZHMgdG90YWxfaW4gYW5kIHRvdGFsX291dCBjYW4gYmUgdXNlZCBmb3Igc3RhdGlzdGljcyBvciBwcm9ncmVzcw0KLSAgIHJlcG9ydHMuICBBZnRlciBjb21wcmVzc2lvbiwgdG90YWxfaW4gaG9sZHMgdGhlIHRvdGFsIHNpemUgb2YgdGhlDQotICAgdW5jb21wcmVzc2VkIGRhdGEgYW5kIG1heSBiZSBzYXZlZCBmb3IgdXNlIGluIHRoZSBkZWNvbXByZXNzb3IgKHBhcnRpY3VsYXJseQ0KLSAgIGlmIHRoZSBkZWNvbXByZXNzb3Igd2FudHMgdG8gZGVjb21wcmVzcyBldmVyeXRoaW5nIGluIGEgc2luZ2xlIHN0ZXApLg0KLSovDQotDQotICAgICAgICAgICAgICAgICAgICAgICAgLyogY29uc3RhbnRzICovDQotDQotI2RlZmluZSBaX05PX0ZMVVNIICAgICAgMA0KLSNkZWZpbmUgWl9QQVJUSUFMX0ZMVVNIIDENCi0jZGVmaW5lIFpfU1lOQ19GTFVTSCAgICAyDQotI2RlZmluZSBaX0ZVTExfRkxVU0ggICAgMw0KLSNkZWZpbmUgWl9GSU5JU0ggICAgICAgIDQNCi0jZGVmaW5lIFpfQkxPQ0sgICAgICAgICA1DQotI2RlZmluZSBaX1RSRUVTICAgICAgICAgNg0KLS8qIEFsbG93ZWQgZmx1c2ggdmFsdWVzOyBzZWUgZGVmbGF0ZSgpIGFuZCBpbmZsYXRlKCkgYmVsb3cgZm9yIGRldGFpbHMgKi8NCi0NCi0jZGVmaW5lIFpfT0sgICAgICAgICAgICAwDQotI2RlZmluZSBaX1NUUkVBTV9FTkQgICAgMQ0KLSNkZWZpbmUgWl9ORUVEX0RJQ1QgICAgIDINCi0jZGVmaW5lIFpfRVJSTk8gICAgICAgICgtMSkNCi0jZGVmaW5lIFpfU1RSRUFNX0VSUk9SICgtMikNCi0jZGVmaW5lIFpfREFUQV9FUlJPUiAgICgtMykNCi0jZGVmaW5lIFpfTUVNX0VSUk9SICAgICgtNCkNCi0jZGVmaW5lIFpfQlVGX0VSUk9SICAgICgtNSkNCi0jZGVmaW5lIFpfVkVSU0lPTl9FUlJPUiAoLTYpDQotLyogUmV0dXJuIGNvZGVzIGZvciB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMuIE5lZ2F0aXZlIHZhbHVlcw0KLSAqIGFyZSBlcnJvcnMsIHBvc2l0aXZlIHZhbHVlcyBhcmUgdXNlZCBmb3Igc3BlY2lhbCBidXQgbm9ybWFsIGV2ZW50cy4NCi0gKi8NCi0NCi0jZGVmaW5lIFpfTk9fQ09NUFJFU1NJT04gICAgICAgICAwDQotI2RlZmluZSBaX0JFU1RfU1BFRUQgICAgICAgICAgICAgMQ0KLSNkZWZpbmUgWl9CRVNUX0NPTVBSRVNTSU9OICAgICAgIDkNCi0jZGVmaW5lIFpfREVGQVVMVF9DT01QUkVTU0lPTiAgKC0xKQ0KLS8qIGNvbXByZXNzaW9uIGxldmVscyAqLw0KLQ0KLSNkZWZpbmUgWl9GSUxURVJFRCAgICAgICAgICAgIDENCi0jZGVmaW5lIFpfSFVGRk1BTl9PTkxZICAgICAgICAyDQotI2RlZmluZSBaX1JMRSAgICAgICAgICAgICAgICAgMw0KLSNkZWZpbmUgWl9GSVhFRCAgICAgICAgICAgICAgIDQNCi0jZGVmaW5lIFpfREVGQVVMVF9TVFJBVEVHWSAgICAwDQotLyogY29tcHJlc3Npb24gc3RyYXRlZ3k7IHNlZSBkZWZsYXRlSW5pdDIoKSBiZWxvdyBmb3IgZGV0YWlscyAqLw0KLQ0KLSNkZWZpbmUgWl9CSU5BUlkgICAwDQotI2RlZmluZSBaX1RFWFQgICAgIDENCi0jZGVmaW5lIFpfQVNDSUkgICAgWl9URVhUICAgLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCAxLjIuMiBhbmQgZWFybGllciAqLw0KLSNkZWZpbmUgWl9VTktOT1dOICAyDQotLyogUG9zc2libGUgdmFsdWVzIG9mIHRoZSBkYXRhX3R5cGUgZmllbGQgKHRob3VnaCBzZWUgaW5mbGF0ZSgpKSAqLw0KLQ0KLSNkZWZpbmUgWl9ERUZMQVRFRCAgIDgNCi0vKiBUaGUgZGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKHRoZSBvbmx5IG9uZSBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uKSAqLw0KLQ0KLSNkZWZpbmUgWl9OVUxMICAwICAvKiBmb3IgaW5pdGlhbGl6aW5nIHphbGxvYywgemZyZWUsIG9wYXF1ZSAqLw0KLQ0KLSNkZWZpbmUgemxpYl92ZXJzaW9uIHpsaWJWZXJzaW9uKCkNCi0vKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb25zIDwgMS4wLjIgKi8NCi0NCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBiYXNpYyBmdW5jdGlvbnMgKi8NCi0NCi1aRVhURVJOIGNvbnN0IGNoYXIgKiBaRVhQT1JUIHpsaWJWZXJzaW9uIE9GKCh2b2lkKSk7DQotLyogVGhlIGFwcGxpY2F0aW9uIGNhbiBjb21wYXJlIHpsaWJWZXJzaW9uIGFuZCBaTElCX1ZFUlNJT04gZm9yIGNvbnNpc3RlbmN5Lg0KLSAgIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgZGlmZmVycywgdGhlIGxpYnJhcnkgY29kZSBhY3R1YWxseSB1c2VkIGlzIG5vdA0KLSAgIGNvbXBhdGlibGUgd2l0aCB0aGUgemxpYi5oIGhlYWRlciBmaWxlIHVzZWQgYnkgdGhlIGFwcGxpY2F0aW9uLiAgVGhpcyBjaGVjaw0KLSAgIGlzIGF1dG9tYXRpY2FsbHkgbWFkZSBieSBkZWZsYXRlSW5pdCBhbmQgaW5mbGF0ZUluaXQuDQotICovDQotDQotLyoNCi1aRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVJbml0IE9GKCh6X3N0cmVhbXAgc3RybSwgaW50IGxldmVsKSk7DQotDQotICAgICBJbml0aWFsaXplcyB0aGUgaW50ZXJuYWwgc3RyZWFtIHN0YXRlIGZvciBjb21wcmVzc2lvbi4gIFRoZSBmaWVsZHMNCi0gICB6YWxsb2MsIHpmcmVlIGFuZCBvcGFxdWUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgYnkgdGhlIGNhbGxlci4gIElmDQotICAgemFsbG9jIGFuZCB6ZnJlZSBhcmUgc2V0IHRvIFpfTlVMTCwgZGVmbGF0ZUluaXQgdXBkYXRlcyB0aGVtIHRvIHVzZSBkZWZhdWx0DQotICAgYWxsb2NhdGlvbiBmdW5jdGlvbnMuDQotDQotICAgICBUaGUgY29tcHJlc3Npb24gbGV2ZWwgbXVzdCBiZSBaX0RFRkFVTFRfQ09NUFJFU1NJT04sIG9yIGJldHdlZW4gMCBhbmQgOToNCi0gICAxIGdpdmVzIGJlc3Qgc3BlZWQsIDkgZ2l2ZXMgYmVzdCBjb21wcmVzc2lvbiwgMCBnaXZlcyBubyBjb21wcmVzc2lvbiBhdCBhbGwNCi0gICAodGhlIGlucHV0IGRhdGEgaXMgc2ltcGx5IGNvcGllZCBhIGJsb2NrIGF0IGEgdGltZSkuICBaX0RFRkFVTFRfQ09NUFJFU1NJT04NCi0gICByZXF1ZXN0cyBhIGRlZmF1bHQgY29tcHJvbWlzZSBiZXR3ZWVuIHNwZWVkIGFuZCBjb21wcmVzc2lvbiAoY3VycmVudGx5DQotICAgZXF1aXZhbGVudCB0byBsZXZlbCA2KS4NCi0NCi0gICAgIGRlZmxhdGVJbml0IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaA0KLSAgIG1lbW9yeSwgWl9TVFJFQU1fRVJST1IgaWYgbGV2ZWwgaXMgbm90IGEgdmFsaWQgY29tcHJlc3Npb24gbGV2ZWwsIG9yDQotICAgWl9WRVJTSU9OX0VSUk9SIGlmIHRoZSB6bGliIGxpYnJhcnkgdmVyc2lvbiAoemxpYl92ZXJzaW9uKSBpcyBpbmNvbXBhdGlibGUNCi0gICB3aXRoIHRoZSB2ZXJzaW9uIGFzc3VtZWQgYnkgdGhlIGNhbGxlciAoWkxJQl9WRVJTSU9OKS4gIG1zZyBpcyBzZXQgdG8gbnVsbA0KLSAgIGlmIHRoZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2UuICBkZWZsYXRlSW5pdCBkb2VzIG5vdCBwZXJmb3JtIGFueSBjb21wcmVzc2lvbjoNCi0gICB0aGlzIHdpbGwgYmUgZG9uZSBieSBkZWZsYXRlKCkuDQotKi8NCi0NCi0NCi1aRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGUgT0YoKHpfc3RyZWFtcCBzdHJtLCBpbnQgZmx1c2gpKTsNCi0vKg0KLSAgICBkZWZsYXRlIGNvbXByZXNzZXMgYXMgbXVjaCBkYXRhIGFzIHBvc3NpYmxlLCBhbmQgc3RvcHMgd2hlbiB0aGUgaW5wdXQNCi0gIGJ1ZmZlciBiZWNvbWVzIGVtcHR5IG9yIHRoZSBvdXRwdXQgYnVmZmVyIGJlY29tZXMgZnVsbC4gIEl0IG1heSBpbnRyb2R1Y2UNCi0gIHNvbWUgb3V0cHV0IGxhdGVuY3kgKHJlYWRpbmcgaW5wdXQgd2l0aG91dCBwcm9kdWNpbmcgYW55IG91dHB1dCkgZXhjZXB0IHdoZW4NCi0gIGZvcmNlZCB0byBmbHVzaC4NCi0NCi0gICAgVGhlIGRldGFpbGVkIHNlbWFudGljcyBhcmUgYXMgZm9sbG93cy4gIGRlZmxhdGUgcGVyZm9ybXMgb25lIG9yIGJvdGggb2YgdGhlDQotICBmb2xsb3dpbmcgYWN0aW9uczoNCi0NCi0gIC0gQ29tcHJlc3MgbW9yZSBpbnB1dCBzdGFydGluZyBhdCBuZXh0X2luIGFuZCB1cGRhdGUgbmV4dF9pbiBhbmQgYXZhaWxfaW4NCi0gICAgYWNjb3JkaW5nbHkuICBJZiBub3QgYWxsIGlucHV0IGNhbiBiZSBwcm9jZXNzZWQgKGJlY2F1c2UgdGhlcmUgaXMgbm90DQotICAgIGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQgYnVmZmVyKSwgbmV4dF9pbiBhbmQgYXZhaWxfaW4gYXJlIHVwZGF0ZWQgYW5kDQotICAgIHByb2Nlc3Npbmcgd2lsbCByZXN1bWUgYXQgdGhpcyBwb2ludCBmb3IgdGhlIG5leHQgY2FsbCBvZiBkZWZsYXRlKCkuDQotDQotICAtIFByb3ZpZGUgbW9yZSBvdXRwdXQgc3RhcnRpbmcgYXQgbmV4dF9vdXQgYW5kIHVwZGF0ZSBuZXh0X291dCBhbmQgYXZhaWxfb3V0DQotICAgIGFjY29yZGluZ2x5LiAgVGhpcyBhY3Rpb24gaXMgZm9yY2VkIGlmIHRoZSBwYXJhbWV0ZXIgZmx1c2ggaXMgbm9uIHplcm8uDQotICAgIEZvcmNpbmcgZmx1c2ggZnJlcXVlbnRseSBkZWdyYWRlcyB0aGUgY29tcHJlc3Npb24gcmF0aW8sIHNvIHRoaXMgcGFyYW1ldGVyDQotICAgIHNob3VsZCBiZSBzZXQgb25seSB3aGVuIG5lY2Vzc2FyeSAoaW4gaW50ZXJhY3RpdmUgYXBwbGljYXRpb25zKS4gIFNvbWUNCi0gICAgb3V0cHV0IG1heSBiZSBwcm92aWRlZCBldmVuIGlmIGZsdXNoIGlzIG5vdCBzZXQuDQotDQotICAgIEJlZm9yZSB0aGUgY2FsbCBvZiBkZWZsYXRlKCksIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgZW5zdXJlIHRoYXQgYXQgbGVhc3QNCi0gIG9uZSBvZiB0aGUgYWN0aW9ucyBpcyBwb3NzaWJsZSwgYnkgcHJvdmlkaW5nIG1vcmUgaW5wdXQgYW5kL29yIGNvbnN1bWluZyBtb3JlDQotICBvdXRwdXQsIGFuZCB1cGRhdGluZyBhdmFpbF9pbiBvciBhdmFpbF9vdXQgYWNjb3JkaW5nbHk7IGF2YWlsX291dCBzaG91bGQNCi0gIG5ldmVyIGJlIHplcm8gYmVmb3JlIHRoZSBjYWxsLiAgVGhlIGFwcGxpY2F0aW9uIGNhbiBjb25zdW1lIHRoZSBjb21wcmVzc2VkDQotICBvdXRwdXQgd2hlbiBpdCB3YW50cywgZm9yIGV4YW1wbGUgd2hlbiB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsIChhdmFpbF9vdXQNCi0gID09IDApLCBvciBhZnRlciBlYWNoIGNhbGwgb2YgZGVmbGF0ZSgpLiAgSWYgZGVmbGF0ZSByZXR1cm5zIFpfT0sgYW5kIHdpdGgNCi0gIHplcm8gYXZhaWxfb3V0LCBpdCBtdXN0IGJlIGNhbGxlZCBhZ2FpbiBhZnRlciBtYWtpbmcgcm9vbSBpbiB0aGUgb3V0cHV0DQotICBidWZmZXIgYmVjYXVzZSB0aGVyZSBtaWdodCBiZSBtb3JlIG91dHB1dCBwZW5kaW5nLg0KLQ0KLSAgICBOb3JtYWxseSB0aGUgcGFyYW1ldGVyIGZsdXNoIGlzIHNldCB0byBaX05PX0ZMVVNILCB3aGljaCBhbGxvd3MgZGVmbGF0ZSB0bw0KLSAgZGVjaWRlIGhvdyBtdWNoIGRhdGEgdG8gYWNjdW11bGF0ZSBiZWZvcmUgcHJvZHVjaW5nIG91dHB1dCwgaW4gb3JkZXIgdG8NCi0gIG1heGltaXplIGNvbXByZXNzaW9uLg0KLQ0KLSAgICBJZiB0aGUgcGFyYW1ldGVyIGZsdXNoIGlzIHNldCB0byBaX1NZTkNfRkxVU0gsIGFsbCBwZW5kaW5nIG91dHB1dCBpcw0KLSAgZmx1c2hlZCB0byB0aGUgb3V0cHV0IGJ1ZmZlciBhbmQgdGhlIG91dHB1dCBpcyBhbGlnbmVkIG9uIGEgYnl0ZSBib3VuZGFyeSwgc28NCi0gIHRoYXQgdGhlIGRlY29tcHJlc3NvciBjYW4gZ2V0IGFsbCBpbnB1dCBkYXRhIGF2YWlsYWJsZSBzbyBmYXIuICAoSW4NCi0gIHBhcnRpY3VsYXIgYXZhaWxfaW4gaXMgemVybyBhZnRlciB0aGUgY2FsbCBpZiBlbm91Z2ggb3V0cHV0IHNwYWNlIGhhcyBiZWVuDQotICBwcm92aWRlZCBiZWZvcmUgdGhlIGNhbGwuKSBGbHVzaGluZyBtYXkgZGVncmFkZSBjb21wcmVzc2lvbiBmb3Igc29tZQ0KLSAgY29tcHJlc3Npb24gYWxnb3JpdGhtcyBhbmQgc28gaXQgc2hvdWxkIGJlIHVzZWQgb25seSB3aGVuIG5lY2Vzc2FyeS4gIFRoaXMNCi0gIGNvbXBsZXRlcyB0aGUgY3VycmVudCBkZWZsYXRlIGJsb2NrIGFuZCBmb2xsb3dzIGl0IHdpdGggYW4gZW1wdHkgc3RvcmVkIGJsb2NrDQotICB0aGF0IGlzIHRocmVlIGJpdHMgcGx1cyBmaWxsZXIgYml0cyB0byB0aGUgbmV4dCBieXRlLCBmb2xsb3dlZCBieSBmb3VyIGJ5dGVzDQotICAoMDAgMDAgZmYgZmYpLg0KLQ0KLSAgICBJZiBmbHVzaCBpcyBzZXQgdG8gWl9QQVJUSUFMX0ZMVVNILCBhbGwgcGVuZGluZyBvdXRwdXQgaXMgZmx1c2hlZCB0byB0aGUNCi0gIG91dHB1dCBidWZmZXIsIGJ1dCB0aGUgb3V0cHV0IGlzIG5vdCBhbGlnbmVkIHRvIGEgYnl0ZSBib3VuZGFyeS4gIEFsbCBvZiB0aGUNCi0gIGlucHV0IGRhdGEgc28gZmFyIHdpbGwgYmUgYXZhaWxhYmxlIHRvIHRoZSBkZWNvbXByZXNzb3IsIGFzIGZvciBaX1NZTkNfRkxVU0guDQotICBUaGlzIGNvbXBsZXRlcyB0aGUgY3VycmVudCBkZWZsYXRlIGJsb2NrIGFuZCBmb2xsb3dzIGl0IHdpdGggYW4gZW1wdHkgZml4ZWQNCi0gIGNvZGVzIGJsb2NrIHRoYXQgaXMgMTAgYml0cyBsb25nLiAgVGhpcyBhc3N1cmVzIHRoYXQgZW5vdWdoIGJ5dGVzIGFyZSBvdXRwdXQNCi0gIGluIG9yZGVyIGZvciB0aGUgZGVjb21wcmVzc29yIHRvIGZpbmlzaCB0aGUgYmxvY2sgYmVmb3JlIHRoZSBlbXB0eSBmaXhlZCBjb2RlDQotICBibG9jay4NCi0NCi0gICAgSWYgZmx1c2ggaXMgc2V0IHRvIFpfQkxPQ0ssIGEgZGVmbGF0ZSBibG9jayBpcyBjb21wbGV0ZWQgYW5kIGVtaXR0ZWQsIGFzDQotICBmb3IgWl9TWU5DX0ZMVVNILCBidXQgdGhlIG91dHB1dCBpcyBub3QgYWxpZ25lZCBvbiBhIGJ5dGUgYm91bmRhcnksIGFuZCB1cCB0bw0KLSAgc2V2ZW4gYml0cyBvZiB0aGUgY3VycmVudCBibG9jayBhcmUgaGVsZCB0byBiZSB3cml0dGVuIGFzIHRoZSBuZXh0IGJ5dGUgYWZ0ZXINCi0gIHRoZSBuZXh0IGRlZmxhdGUgYmxvY2sgaXMgY29tcGxldGVkLiAgSW4gdGhpcyBjYXNlLCB0aGUgZGVjb21wcmVzc29yIG1heSBub3QNCi0gIGJlIHByb3ZpZGVkIGVub3VnaCBiaXRzIGF0IHRoaXMgcG9pbnQgaW4gb3JkZXIgdG8gY29tcGxldGUgZGVjb21wcmVzc2lvbiBvZg0KLSAgdGhlIGRhdGEgcHJvdmlkZWQgc28gZmFyIHRvIHRoZSBjb21wcmVzc29yLiAgSXQgbWF5IG5lZWQgdG8gd2FpdCBmb3IgdGhlIG5leHQNCi0gIGJsb2NrIHRvIGJlIGVtaXR0ZWQuICBUaGlzIGlzIGZvciBhZHZhbmNlZCBhcHBsaWNhdGlvbnMgdGhhdCBuZWVkIHRvIGNvbnRyb2wNCi0gIHRoZSBlbWlzc2lvbiBvZiBkZWZsYXRlIGJsb2Nrcy4NCi0NCi0gICAgSWYgZmx1c2ggaXMgc2V0IHRvIFpfRlVMTF9GTFVTSCwgYWxsIG91dHB1dCBpcyBmbHVzaGVkIGFzIHdpdGgNCi0gIFpfU1lOQ19GTFVTSCwgYW5kIHRoZSBjb21wcmVzc2lvbiBzdGF0ZSBpcyByZXNldCBzbyB0aGF0IGRlY29tcHJlc3Npb24gY2FuDQotICByZXN0YXJ0IGZyb20gdGhpcyBwb2ludCBpZiBwcmV2aW91cyBjb21wcmVzc2VkIGRhdGEgaGFzIGJlZW4gZGFtYWdlZCBvciBpZg0KLSAgcmFuZG9tIGFjY2VzcyBpcyBkZXNpcmVkLiAgVXNpbmcgWl9GVUxMX0ZMVVNIIHRvbyBvZnRlbiBjYW4gc2VyaW91c2x5IGRlZ3JhZGUNCi0gIGNvbXByZXNzaW9uLg0KLQ0KLSAgICBJZiBkZWZsYXRlIHJldHVybnMgd2l0aCBhdmFpbF9vdXQgPT0gMCwgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhZ2Fpbg0KLSAgd2l0aCB0aGUgc2FtZSB2YWx1ZSBvZiB0aGUgZmx1c2ggcGFyYW1ldGVyIGFuZCBtb3JlIG91dHB1dCBzcGFjZSAodXBkYXRlZA0KLSAgYXZhaWxfb3V0KSwgdW50aWwgdGhlIGZsdXNoIGlzIGNvbXBsZXRlIChkZWZsYXRlIHJldHVybnMgd2l0aCBub24temVybw0KLSAgYXZhaWxfb3V0KS4gIEluIHRoZSBjYXNlIG9mIGEgWl9GVUxMX0ZMVVNIIG9yIFpfU1lOQ19GTFVTSCwgbWFrZSBzdXJlIHRoYXQNCi0gIGF2YWlsX291dCBpcyBncmVhdGVyIHRoYW4gc2l4IHRvIGF2b2lkIHJlcGVhdGVkIGZsdXNoIG1hcmtlcnMgZHVlIHRvDQotICBhdmFpbF9vdXQgPT0gMCBvbiByZXR1cm4uDQotDQotICAgIElmIHRoZSBwYXJhbWV0ZXIgZmx1c2ggaXMgc2V0IHRvIFpfRklOSVNILCBwZW5kaW5nIGlucHV0IGlzIHByb2Nlc3NlZCwNCi0gIHBlbmRpbmcgb3V0cHV0IGlzIGZsdXNoZWQgYW5kIGRlZmxhdGUgcmV0dXJucyB3aXRoIFpfU1RSRUFNX0VORCBpZiB0aGVyZSB3YXMNCi0gIGVub3VnaCBvdXRwdXQgc3BhY2U7IGlmIGRlZmxhdGUgcmV0dXJucyB3aXRoIFpfT0ssIHRoaXMgZnVuY3Rpb24gbXVzdCBiZQ0KLSAgY2FsbGVkIGFnYWluIHdpdGggWl9GSU5JU0ggYW5kIG1vcmUgb3V0cHV0IHNwYWNlICh1cGRhdGVkIGF2YWlsX291dCkgYnV0IG5vDQotICBtb3JlIGlucHV0IGRhdGEsIHVudGlsIGl0IHJldHVybnMgd2l0aCBaX1NUUkVBTV9FTkQgb3IgYW4gZXJyb3IuICBBZnRlcg0KLSAgZGVmbGF0ZSBoYXMgcmV0dXJuZWQgWl9TVFJFQU1fRU5ELCB0aGUgb25seSBwb3NzaWJsZSBvcGVyYXRpb25zIG9uIHRoZSBzdHJlYW0NCi0gIGFyZSBkZWZsYXRlUmVzZXQgb3IgZGVmbGF0ZUVuZC4NCi0NCi0gICAgWl9GSU5JU0ggY2FuIGJlIHVzZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVmbGF0ZUluaXQgaWYgYWxsIHRoZSBjb21wcmVzc2lvbg0KLSAgaXMgdG8gYmUgZG9uZSBpbiBhIHNpbmdsZSBzdGVwLiAgSW4gdGhpcyBjYXNlLCBhdmFpbF9vdXQgbXVzdCBiZSBhdCBsZWFzdCB0aGUNCi0gIHZhbHVlIHJldHVybmVkIGJ5IGRlZmxhdGVCb3VuZCAoc2VlIGJlbG93KS4gIFRoZW4gZGVmbGF0ZSBpcyBndWFyYW50ZWVkIHRvDQotICByZXR1cm4gWl9TVFJFQU1fRU5ELiAgSWYgbm90IGVub3VnaCBvdXRwdXQgc3BhY2UgaXMgcHJvdmlkZWQsIGRlZmxhdGUgd2lsbA0KLSAgbm90IHJldHVybiBaX1NUUkVBTV9FTkQsIGFuZCBpdCBtdXN0IGJlIGNhbGxlZCBhZ2FpbiBhcyBkZXNjcmliZWQgYWJvdmUuDQotDQotICAgIGRlZmxhdGUoKSBzZXRzIHN0cm0tPmFkbGVyIHRvIHRoZSBhZGxlcjMyIGNoZWNrc3VtIG9mIGFsbCBpbnB1dCByZWFkDQotICBzbyBmYXIgKHRoYXQgaXMsIHRvdGFsX2luIGJ5dGVzKS4NCi0NCi0gICAgZGVmbGF0ZSgpIG1heSB1cGRhdGUgc3RybS0+ZGF0YV90eXBlIGlmIGl0IGNhbiBtYWtlIGEgZ29vZCBndWVzcyBhYm91dA0KLSAgdGhlIGlucHV0IGRhdGEgdHlwZSAoWl9CSU5BUlkgb3IgWl9URVhUKS4gIEluIGRvdWJ0LCB0aGUgZGF0YSBpcyBjb25zaWRlcmVkDQotICBiaW5hcnkuICBUaGlzIGZpZWxkIGlzIG9ubHkgZm9yIGluZm9ybWF0aW9uIHB1cnBvc2VzIGFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlDQotICBjb21wcmVzc2lvbiBhbGdvcml0aG0gaW4gYW55IG1hbm5lci4NCi0NCi0gICAgZGVmbGF0ZSgpIHJldHVybnMgWl9PSyBpZiBzb21lIHByb2dyZXNzIGhhcyBiZWVuIG1hZGUgKG1vcmUgaW5wdXQNCi0gIHByb2Nlc3NlZCBvciBtb3JlIG91dHB1dCBwcm9kdWNlZCksIFpfU1RSRUFNX0VORCBpZiBhbGwgaW5wdXQgaGFzIGJlZW4NCi0gIGNvbnN1bWVkIGFuZCBhbGwgb3V0cHV0IGhhcyBiZWVuIHByb2R1Y2VkIChvbmx5IHdoZW4gZmx1c2ggaXMgc2V0IHRvDQotICBaX0ZJTklTSCksIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudCAoZm9yIGV4YW1wbGUNCi0gIGlmIG5leHRfaW4gb3IgbmV4dF9vdXQgd2FzIFpfTlVMTCksIFpfQlVGX0VSUk9SIGlmIG5vIHByb2dyZXNzIGlzIHBvc3NpYmxlDQotICAoZm9yIGV4YW1wbGUgYXZhaWxfaW4gb3IgYXZhaWxfb3V0IHdhcyB6ZXJvKS4gIE5vdGUgdGhhdCBaX0JVRl9FUlJPUiBpcyBub3QNCi0gIGZhdGFsLCBhbmQgZGVmbGF0ZSgpIGNhbiBiZSBjYWxsZWQgYWdhaW4gd2l0aCBtb3JlIGlucHV0IGFuZCBtb3JlIG91dHB1dA0KLSAgc3BhY2UgdG8gY29udGludWUgY29tcHJlc3NpbmcuDQotKi8NCi0NCi0NCi1aRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVFbmQgT0YoKHpfc3RyZWFtcCBzdHJtKSk7DQotLyoNCi0gICAgIEFsbCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGlzIHN0cmVhbSBhcmUgZnJlZWQuDQotICAgVGhpcyBmdW5jdGlvbiBkaXNjYXJkcyBhbnkgdW5wcm9jZXNzZWQgaW5wdXQgYW5kIGRvZXMgbm90IGZsdXNoIGFueSBwZW5kaW5nDQotICAgb3V0cHV0Lg0KLQ0KLSAgICAgZGVmbGF0ZUVuZCByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgdGhlDQotICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQsIFpfREFUQV9FUlJPUiBpZiB0aGUgc3RyZWFtIHdhcyBmcmVlZA0KLSAgIHByZW1hdHVyZWx5IChzb21lIGlucHV0IG9yIG91dHB1dCB3YXMgZGlzY2FyZGVkKS4gIEluIHRoZSBlcnJvciBjYXNlLCBtc2cNCi0gICBtYXkgYmUgc2V0IGJ1dCB0aGVuIHBvaW50cyB0byBhIHN0YXRpYyBzdHJpbmcgKHdoaWNoIG11c3Qgbm90IGJlDQotICAgZGVhbGxvY2F0ZWQpLg0KLSovDQotDQotDQotLyoNCi1aRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVJbml0IE9GKCh6X3N0cmVhbXAgc3RybSkpOw0KLQ0KLSAgICAgSW5pdGlhbGl6ZXMgdGhlIGludGVybmFsIHN0cmVhbSBzdGF0ZSBmb3IgZGVjb21wcmVzc2lvbi4gIFRoZSBmaWVsZHMNCi0gICBuZXh0X2luLCBhdmFpbF9pbiwgemFsbG9jLCB6ZnJlZSBhbmQgb3BhcXVlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJ5DQotICAgdGhlIGNhbGxlci4gIElmIG5leHRfaW4gaXMgbm90IFpfTlVMTCBhbmQgYXZhaWxfaW4gaXMgbGFyZ2UgZW5vdWdoICh0aGUNCi0gICBleGFjdCB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBjb21wcmVzc2lvbiBtZXRob2QpLCBpbmZsYXRlSW5pdCBkZXRlcm1pbmVzIHRoZQ0KLSAgIGNvbXByZXNzaW9uIG1ldGhvZCBmcm9tIHRoZSB6bGliIGhlYWRlciBhbmQgYWxsb2NhdGVzIGFsbCBkYXRhIHN0cnVjdHVyZXMNCi0gICBhY2NvcmRpbmdseTsgb3RoZXJ3aXNlIHRoZSBhbGxvY2F0aW9uIHdpbGwgYmUgZGVmZXJyZWQgdG8gdGhlIGZpcnN0IGNhbGwgb2YNCi0gICBpbmZsYXRlLiAgSWYgemFsbG9jIGFuZCB6ZnJlZSBhcmUgc2V0IHRvIFpfTlVMTCwgaW5mbGF0ZUluaXQgdXBkYXRlcyB0aGVtIHRvDQotICAgdXNlIGRlZmF1bHQgYWxsb2NhdGlvbiBmdW5jdGlvbnMuDQotDQotICAgICBpbmZsYXRlSW5pdCByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gNCi0gICBtZW1vcnksIFpfVkVSU0lPTl9FUlJPUiBpZiB0aGUgemxpYiBsaWJyYXJ5IHZlcnNpb24gaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlDQotICAgdmVyc2lvbiBhc3N1bWVkIGJ5IHRoZSBjYWxsZXIsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBwYXJhbWV0ZXJzIGFyZQ0KLSAgIGludmFsaWQsIHN1Y2ggYXMgYSBudWxsIHBvaW50ZXIgdG8gdGhlIHN0cnVjdHVyZS4gIG1zZyBpcyBzZXQgdG8gbnVsbCBpZg0KLSAgIHRoZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2UuICBpbmZsYXRlSW5pdCBkb2VzIG5vdCBwZXJmb3JtIGFueSBkZWNvbXByZXNzaW9uDQotICAgYXBhcnQgZnJvbSBwb3NzaWJseSByZWFkaW5nIHRoZSB6bGliIGhlYWRlciBpZiBwcmVzZW50OiBhY3R1YWwgZGVjb21wcmVzc2lvbg0KLSAgIHdpbGwgYmUgZG9uZSBieSBpbmZsYXRlKCkuICAoU28gbmV4dF9pbiBhbmQgYXZhaWxfaW4gbWF5IGJlIG1vZGlmaWVkLCBidXQNCi0gICBuZXh0X291dCBhbmQgYXZhaWxfb3V0IGFyZSB1bnVzZWQgYW5kIHVuY2hhbmdlZC4pIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uDQotICAgb2YgaW5mbGF0ZUluaXQoKSBkb2VzIG5vdCBwcm9jZXNzIGFueSBoZWFkZXIgaW5mb3JtYXRpb24gLS0gdGhhdCBpcyBkZWZlcnJlZA0KLSAgIHVudGlsIGluZmxhdGUoKSBpcyBjYWxsZWQuDQotKi8NCi0NCi0NCi1aRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGUgT0YoKHpfc3RyZWFtcCBzdHJtLCBpbnQgZmx1c2gpKTsNCi0vKg0KLSAgICBpbmZsYXRlIGRlY29tcHJlc3NlcyBhcyBtdWNoIGRhdGEgYXMgcG9zc2libGUsIGFuZCBzdG9wcyB3aGVuIHRoZSBpbnB1dA0KLSAgYnVmZmVyIGJlY29tZXMgZW1wdHkgb3IgdGhlIG91dHB1dCBidWZmZXIgYmVjb21lcyBmdWxsLiAgSXQgbWF5IGludHJvZHVjZQ0KLSAgc29tZSBvdXRwdXQgbGF0ZW5jeSAocmVhZGluZyBpbnB1dCB3aXRob3V0IHByb2R1Y2luZyBhbnkgb3V0cHV0KSBleGNlcHQgd2hlbg0KLSAgZm9yY2VkIHRvIGZsdXNoLg0KLQ0KLSAgVGhlIGRldGFpbGVkIHNlbWFudGljcyBhcmUgYXMgZm9sbG93cy4gIGluZmxhdGUgcGVyZm9ybXMgb25lIG9yIGJvdGggb2YgdGhlDQotICBmb2xsb3dpbmcgYWN0aW9uczoNCi0NCi0gIC0gRGVjb21wcmVzcyBtb3JlIGlucHV0IHN0YXJ0aW5nIGF0IG5leHRfaW4gYW5kIHVwZGF0ZSBuZXh0X2luIGFuZCBhdmFpbF9pbg0KLSAgICBhY2NvcmRpbmdseS4gIElmIG5vdCBhbGwgaW5wdXQgY2FuIGJlIHByb2Nlc3NlZCAoYmVjYXVzZSB0aGVyZSBpcyBub3QNCi0gICAgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIpLCBuZXh0X2luIGlzIHVwZGF0ZWQgYW5kIHByb2Nlc3Npbmcgd2lsbA0KLSAgICByZXN1bWUgYXQgdGhpcyBwb2ludCBmb3IgdGhlIG5leHQgY2FsbCBvZiBpbmZsYXRlKCkuDQotDQotICAtIFByb3ZpZGUgbW9yZSBvdXRwdXQgc3RhcnRpbmcgYXQgbmV4dF9vdXQgYW5kIHVwZGF0ZSBuZXh0X291dCBhbmQgYXZhaWxfb3V0DQotICAgIGFjY29yZGluZ2x5LiAgaW5mbGF0ZSgpIHByb3ZpZGVzIGFzIG11Y2ggb3V0cHV0IGFzIHBvc3NpYmxlLCB1bnRpbCB0aGVyZSBpcw0KLSAgICBubyBtb3JlIGlucHV0IGRhdGEgb3Igbm8gbW9yZSBzcGFjZSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciAoc2VlIGJlbG93IGFib3V0DQotICAgIHRoZSBmbHVzaCBwYXJhbWV0ZXIpLg0KLQ0KLSAgICBCZWZvcmUgdGhlIGNhbGwgb2YgaW5mbGF0ZSgpLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGVuc3VyZSB0aGF0IGF0IGxlYXN0DQotICBvbmUgb2YgdGhlIGFjdGlvbnMgaXMgcG9zc2libGUsIGJ5IHByb3ZpZGluZyBtb3JlIGlucHV0IGFuZC9vciBjb25zdW1pbmcgbW9yZQ0KLSAgb3V0cHV0LCBhbmQgdXBkYXRpbmcgdGhlIG5leHRfKiBhbmQgYXZhaWxfKiB2YWx1ZXMgYWNjb3JkaW5nbHkuICBUaGUNCi0gIGFwcGxpY2F0aW9uIGNhbiBjb25zdW1lIHRoZSB1bmNvbXByZXNzZWQgb3V0cHV0IHdoZW4gaXQgd2FudHMsIGZvciBleGFtcGxlDQotICB3aGVuIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGZ1bGwgKGF2YWlsX291dCA9PSAwKSwgb3IgYWZ0ZXIgZWFjaCBjYWxsIG9mDQotICBpbmZsYXRlKCkuICBJZiBpbmZsYXRlIHJldHVybnMgWl9PSyBhbmQgd2l0aCB6ZXJvIGF2YWlsX291dCwgaXQgbXVzdCBiZQ0KLSAgY2FsbGVkIGFnYWluIGFmdGVyIG1ha2luZyByb29tIGluIHRoZSBvdXRwdXQgYnVmZmVyIGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUNCi0gIG1vcmUgb3V0cHV0IHBlbmRpbmcuDQotDQotICAgIFRoZSBmbHVzaCBwYXJhbWV0ZXIgb2YgaW5mbGF0ZSgpIGNhbiBiZSBaX05PX0ZMVVNILCBaX1NZTkNfRkxVU0gsIFpfRklOSVNILA0KLSAgWl9CTE9DSywgb3IgWl9UUkVFUy4gIFpfU1lOQ19GTFVTSCByZXF1ZXN0cyB0aGF0IGluZmxhdGUoKSBmbHVzaCBhcyBtdWNoDQotICBvdXRwdXQgYXMgcG9zc2libGUgdG8gdGhlIG91dHB1dCBidWZmZXIuICBaX0JMT0NLIHJlcXVlc3RzIHRoYXQgaW5mbGF0ZSgpDQotICBzdG9wIGlmIGFuZCB3aGVuIGl0IGdldHMgdG8gdGhlIG5leHQgZGVmbGF0ZSBibG9jayBib3VuZGFyeS4gIFdoZW4gZGVjb2RpbmcNCi0gIHRoZSB6bGliIG9yIGd6aXAgZm9ybWF0LCB0aGlzIHdpbGwgY2F1c2UgaW5mbGF0ZSgpIHRvIHJldHVybiBpbW1lZGlhdGVseQ0KLSAgYWZ0ZXIgdGhlIGhlYWRlciBhbmQgYmVmb3JlIHRoZSBmaXJzdCBibG9jay4gIFdoZW4gZG9pbmcgYSByYXcgaW5mbGF0ZSwNCi0gIGluZmxhdGUoKSB3aWxsIGdvIGFoZWFkIGFuZCBwcm9jZXNzIHRoZSBmaXJzdCBibG9jaywgYW5kIHdpbGwgcmV0dXJuIHdoZW4gaXQNCi0gIGdldHMgdG8gdGhlIGVuZCBvZiB0aGF0IGJsb2NrLCBvciB3aGVuIGl0IHJ1bnMgb3V0IG9mIGRhdGEuDQotDQotICAgIFRoZSBaX0JMT0NLIG9wdGlvbiBhc3Npc3RzIGluIGFwcGVuZGluZyB0byBvciBjb21iaW5pbmcgZGVmbGF0ZSBzdHJlYW1zLg0KLSAgQWxzbyB0byBhc3Npc3QgaW4gdGhpcywgb24gcmV0dXJuIGluZmxhdGUoKSB3aWxsIHNldCBzdHJtLT5kYXRhX3R5cGUgdG8gdGhlDQotICBudW1iZXIgb2YgdW51c2VkIGJpdHMgaW4gdGhlIGxhc3QgYnl0ZSB0YWtlbiBmcm9tIHN0cm0tPm5leHRfaW4sIHBsdXMgNjQgaWYNCi0gIGluZmxhdGUoKSBpcyBjdXJyZW50bHkgZGVjb2RpbmcgdGhlIGxhc3QgYmxvY2sgaW4gdGhlIGRlZmxhdGUgc3RyZWFtLCBwbHVzDQotICAxMjggaWYgaW5mbGF0ZSgpIHJldHVybmVkIGltbWVkaWF0ZWx5IGFmdGVyIGRlY29kaW5nIGFuIGVuZC1vZi1ibG9jayBjb2RlIG9yDQotICBkZWNvZGluZyB0aGUgY29tcGxldGUgaGVhZGVyIHVwIHRvIGp1c3QgYmVmb3JlIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBkZWZsYXRlDQotICBzdHJlYW0uICBUaGUgZW5kLW9mLWJsb2NrIHdpbGwgbm90IGJlIGluZGljYXRlZCB1bnRpbCBhbGwgb2YgdGhlIHVuY29tcHJlc3NlZA0KLSAgZGF0YSBmcm9tIHRoYXQgYmxvY2sgaGFzIGJlZW4gd3JpdHRlbiB0byBzdHJtLT5uZXh0X291dC4gIFRoZSBudW1iZXIgb2YNCi0gIHVudXNlZCBiaXRzIG1heSBpbiBnZW5lcmFsIGJlIGdyZWF0ZXIgdGhhbiBzZXZlbiwgZXhjZXB0IHdoZW4gYml0IDcgb2YNCi0gIGRhdGFfdHlwZSBpcyBzZXQsIGluIHdoaWNoIGNhc2UgdGhlIG51bWJlciBvZiB1bnVzZWQgYml0cyB3aWxsIGJlIGxlc3MgdGhhbg0KLSAgZWlnaHQuICBkYXRhX3R5cGUgaXMgc2V0IGFzIG5vdGVkIGhlcmUgZXZlcnkgdGltZSBpbmZsYXRlKCkgcmV0dXJucyBmb3IgYWxsDQotICBmbHVzaCBvcHRpb25zLCBhbmQgc28gY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBhbW91bnQgb2YgY3VycmVudGx5DQotICBjb25zdW1lZCBpbnB1dCBpbiBiaXRzLg0KLQ0KLSAgICBUaGUgWl9UUkVFUyBvcHRpb24gYmVoYXZlcyBhcyBaX0JMT0NLIGRvZXMsIGJ1dCBpdCBhbHNvIHJldHVybnMgd2hlbiB0aGUNCi0gIGVuZCBvZiBlYWNoIGRlZmxhdGUgYmxvY2sgaGVhZGVyIGlzIHJlYWNoZWQsIGJlZm9yZSBhbnkgYWN0dWFsIGRhdGEgaW4gdGhhdA0KLSAgYmxvY2sgaXMgZGVjb2RlZC4gIFRoaXMgYWxsb3dzIHRoZSBjYWxsZXIgdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgdGhlDQotICBkZWZsYXRlIGJsb2NrIGhlYWRlciBmb3IgbGF0ZXIgdXNlIGluIHJhbmRvbSBhY2Nlc3Mgd2l0aGluIGEgZGVmbGF0ZSBibG9jay4NCi0gIDI1NiBpcyBhZGRlZCB0byB0aGUgdmFsdWUgb2Ygc3RybS0+ZGF0YV90eXBlIHdoZW4gaW5mbGF0ZSgpIHJldHVybnMNCi0gIGltbWVkaWF0ZWx5IGFmdGVyIHJlYWNoaW5nIHRoZSBlbmQgb2YgdGhlIGRlZmxhdGUgYmxvY2sgaGVhZGVyLg0KLQ0KLSAgICBpbmZsYXRlKCkgc2hvdWxkIG5vcm1hbGx5IGJlIGNhbGxlZCB1bnRpbCBpdCByZXR1cm5zIFpfU1RSRUFNX0VORCBvciBhbg0KLSAgZXJyb3IuICBIb3dldmVyIGlmIGFsbCBkZWNvbXByZXNzaW9uIGlzIHRvIGJlIHBlcmZvcm1lZCBpbiBhIHNpbmdsZSBzdGVwIChhDQotICBzaW5nbGUgY2FsbCBvZiBpbmZsYXRlKSwgdGhlIHBhcmFtZXRlciBmbHVzaCBzaG91bGQgYmUgc2V0IHRvIFpfRklOSVNILiAgSW4NCi0gIHRoaXMgY2FzZSBhbGwgcGVuZGluZyBpbnB1dCBpcyBwcm9jZXNzZWQgYW5kIGFsbCBwZW5kaW5nIG91dHB1dCBpcyBmbHVzaGVkOw0KLSAgYXZhaWxfb3V0IG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBmb3IgdGhlDQotICBvcGVyYXRpb24gdG8gY29tcGxldGUuICAoVGhlIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIG1heSBoYXZlIGJlZW4NCi0gIHNhdmVkIGJ5IHRoZSBjb21wcmVzc29yIGZvciB0aGlzIHB1cnBvc2UuKSBUaGUgdXNlIG9mIFpfRklOSVNIIGlzIG5vdA0KLSAgcmVxdWlyZWQgdG8gcGVyZm9ybSBhbiBpbmZsYXRpb24gaW4gb25lIHN0ZXAuICBIb3dldmVyIGl0IG1heSBiZSB1c2VkIHRvDQotICBpbmZvcm0gaW5mbGF0ZSB0aGF0IGEgZmFzdGVyIGFwcHJvYWNoIGNhbiBiZSB1c2VkIGZvciB0aGUgc2luZ2xlIGluZmxhdGUoKQ0KLSAgY2FsbC4gIFpfRklOSVNIIGFsc28gaW5mb3JtcyBpbmZsYXRlIHRvIG5vdCBtYWludGFpbiBhIHNsaWRpbmcgd2luZG93IGlmIHRoZQ0KLSAgc3RyZWFtIGNvbXBsZXRlcywgd2hpY2ggcmVkdWNlcyBpbmZsYXRlJ3MgbWVtb3J5IGZvb3RwcmludC4gIElmIHRoZSBzdHJlYW0NCi0gIGRvZXMgbm90IGNvbXBsZXRlLCBlaXRoZXIgYmVjYXVzZSBub3QgYWxsIG9mIHRoZSBzdHJlYW0gaXMgcHJvdmlkZWQgb3Igbm90DQotICBlbm91Z2ggb3V0cHV0IHNwYWNlIGlzIHByb3ZpZGVkLCB0aGVuIGEgc2xpZGluZyB3aW5kb3cgd2lsbCBiZSBhbGxvY2F0ZWQgYW5kDQotICBpbmZsYXRlKCkgY2FuIGJlIGNhbGxlZCBhZ2FpbiB0byBjb250aW51ZSB0aGUgb3BlcmF0aW9uIGFzIGlmIFpfTk9fRkxVU0ggaGFkDQotICBiZWVuIHVzZWQuDQotDQotICAgICBJbiB0aGlzIGltcGxlbWVudGF0aW9uLCBpbmZsYXRlKCkgYWx3YXlzIGZsdXNoZXMgYXMgbXVjaCBvdXRwdXQgYXMNCi0gIHBvc3NpYmxlIHRvIHRoZSBvdXRwdXQgYnVmZmVyLCBhbmQgYWx3YXlzIHVzZXMgdGhlIGZhc3RlciBhcHByb2FjaCBvbiB0aGUNCi0gIGZpcnN0IGNhbGwuICBTbyB0aGUgZWZmZWN0cyBvZiB0aGUgZmx1c2ggcGFyYW1ldGVyIGluIHRoaXMgaW1wbGVtZW50YXRpb24gYXJlDQotICBvbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGluZmxhdGUoKSBhcyBub3RlZCBiZWxvdywgd2hlbiBpbmZsYXRlKCkgcmV0dXJucyBlYXJseQ0KLSAgd2hlbiBaX0JMT0NLIG9yIFpfVFJFRVMgaXMgdXNlZCwgYW5kIHdoZW4gaW5mbGF0ZSgpIGF2b2lkcyB0aGUgYWxsb2NhdGlvbiBvZg0KLSAgbWVtb3J5IGZvciBhIHNsaWRpbmcgd2luZG93IHdoZW4gWl9GSU5JU0ggaXMgdXNlZC4NCi0NCi0gICAgIElmIGEgcHJlc2V0IGRpY3Rpb25hcnkgaXMgbmVlZGVkIGFmdGVyIHRoaXMgY2FsbCAoc2VlIGluZmxhdGVTZXREaWN0aW9uYXJ5DQotICBiZWxvdyksIGluZmxhdGUgc2V0cyBzdHJtLT5hZGxlciB0byB0aGUgQWRsZXItMzIgY2hlY2tzdW0gb2YgdGhlIGRpY3Rpb25hcnkNCi0gIGNob3NlbiBieSB0aGUgY29tcHJlc3NvciBhbmQgcmV0dXJucyBaX05FRURfRElDVDsgb3RoZXJ3aXNlIGl0IHNldHMNCi0gIHN0cm0tPmFkbGVyIHRvIHRoZSBBZGxlci0zMiBjaGVja3N1bSBvZiBhbGwgb3V0cHV0IHByb2R1Y2VkIHNvIGZhciAodGhhdCBpcywNCi0gIHRvdGFsX291dCBieXRlcykgYW5kIHJldHVybnMgWl9PSywgWl9TVFJFQU1fRU5EIG9yIGFuIGVycm9yIGNvZGUgYXMgZGVzY3JpYmVkDQotICBiZWxvdy4gIEF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbSwgaW5mbGF0ZSgpIGNoZWNrcyB0aGF0IGl0cyBjb21wdXRlZCBhZGxlcjMyDQotICBjaGVja3N1bSBpcyBlcXVhbCB0byB0aGF0IHNhdmVkIGJ5IHRoZSBjb21wcmVzc29yIGFuZCByZXR1cm5zIFpfU1RSRUFNX0VORA0KLSAgb25seSBpZiB0aGUgY2hlY2tzdW0gaXMgY29ycmVjdC4NCi0NCi0gICAgaW5mbGF0ZSgpIGNhbiBkZWNvbXByZXNzIGFuZCBjaGVjayBlaXRoZXIgemxpYi13cmFwcGVkIG9yIGd6aXAtd3JhcHBlZA0KLSAgZGVmbGF0ZSBkYXRhLiAgVGhlIGhlYWRlciB0eXBlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIGlmIHJlcXVlc3RlZCB3aGVuDQotICBpbml0aWFsaXppbmcgd2l0aCBpbmZsYXRlSW5pdDIoKS4gIEFueSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIGd6aXANCi0gIGhlYWRlciBpcyBub3QgcmV0YWluZWQsIHNvIGFwcGxpY2F0aW9ucyB0aGF0IG5lZWQgdGhhdCBpbmZvcm1hdGlvbiBzaG91bGQNCi0gIGluc3RlYWQgdXNlIHJhdyBpbmZsYXRlLCBzZWUgaW5mbGF0ZUluaXQyKCkgYmVsb3csIG9yIGluZmxhdGVCYWNrKCkgYW5kDQotICBwZXJmb3JtIHRoZWlyIG93biBwcm9jZXNzaW5nIG9mIHRoZSBnemlwIGhlYWRlciBhbmQgdHJhaWxlci4gIFdoZW4gcHJvY2Vzc2luZw0KLSAgZ3ppcC13cmFwcGVkIGRlZmxhdGUgZGF0YSwgc3RybS0+YWRsZXIzMiBpcyBzZXQgdG8gdGhlIENSQy0zMiBvZiB0aGUgb3V0cHV0DQotICBwcm9kdWN0ZWQgc28gZmFyLiAgVGhlIENSQy0zMiBpcyBjaGVja2VkIGFnYWluc3QgdGhlIGd6aXAgdHJhaWxlci4NCi0NCi0gICAgaW5mbGF0ZSgpIHJldHVybnMgWl9PSyBpZiBzb21lIHByb2dyZXNzIGhhcyBiZWVuIG1hZGUgKG1vcmUgaW5wdXQgcHJvY2Vzc2VkDQotICBvciBtb3JlIG91dHB1dCBwcm9kdWNlZCksIFpfU1RSRUFNX0VORCBpZiB0aGUgZW5kIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgaGFzDQotICBiZWVuIHJlYWNoZWQgYW5kIGFsbCB1bmNvbXByZXNzZWQgb3V0cHV0IGhhcyBiZWVuIHByb2R1Y2VkLCBaX05FRURfRElDVCBpZiBhDQotICBwcmVzZXQgZGljdGlvbmFyeSBpcyBuZWVkZWQgYXQgdGhpcyBwb2ludCwgWl9EQVRBX0VSUk9SIGlmIHRoZSBpbnB1dCBkYXRhIHdhcw0KLSAgY29ycnVwdGVkIChpbnB1dCBzdHJlYW0gbm90IGNvbmZvcm1pbmcgdG8gdGhlIHpsaWIgZm9ybWF0IG9yIGluY29ycmVjdCBjaGVjaw0KLSAgdmFsdWUpLCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0cnVjdHVyZSB3YXMgaW5jb25zaXN0ZW50IChmb3IgZXhhbXBsZQ0KLSAgbmV4dF9pbiBvciBuZXh0X291dCB3YXMgWl9OVUxMKSwgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggbWVtb3J5LA0KLSAgWl9CVUZfRVJST1IgaWYgbm8gcHJvZ3Jlc3MgaXMgcG9zc2libGUgb3IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUNCi0gIG91dHB1dCBidWZmZXIgd2hlbiBaX0ZJTklTSCBpcyB1c2VkLiAgTm90ZSB0aGF0IFpfQlVGX0VSUk9SIGlzIG5vdCBmYXRhbCwgYW5kDQotICBpbmZsYXRlKCkgY2FuIGJlIGNhbGxlZCBhZ2FpbiB3aXRoIG1vcmUgaW5wdXQgYW5kIG1vcmUgb3V0cHV0IHNwYWNlIHRvDQotICBjb250aW51ZSBkZWNvbXByZXNzaW5nLiAgSWYgWl9EQVRBX0VSUk9SIGlzIHJldHVybmVkLCB0aGUgYXBwbGljYXRpb24gbWF5DQotICB0aGVuIGNhbGwgaW5mbGF0ZVN5bmMoKSB0byBsb29rIGZvciBhIGdvb2QgY29tcHJlc3Npb24gYmxvY2sgaWYgYSBwYXJ0aWFsDQotICByZWNvdmVyeSBvZiB0aGUgZGF0YSBpcyBkZXNpcmVkLg0KLSovDQotDQotDQotWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlRW5kIE9GKCh6X3N0cmVhbXAgc3RybSkpOw0KLS8qDQotICAgICBBbGwgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhpcyBzdHJlYW0gYXJlIGZyZWVkLg0KLSAgIFRoaXMgZnVuY3Rpb24gZGlzY2FyZHMgYW55IHVucHJvY2Vzc2VkIGlucHV0IGFuZCBkb2VzIG5vdCBmbHVzaCBhbnkgcGVuZGluZw0KLSAgIG91dHB1dC4NCi0NCi0gICAgIGluZmxhdGVFbmQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0gc3RhdGUNCi0gICB3YXMgaW5jb25zaXN0ZW50LiAgSW4gdGhlIGVycm9yIGNhc2UsIG1zZyBtYXkgYmUgc2V0IGJ1dCB0aGVuIHBvaW50cyB0byBhDQotICAgc3RhdGljIHN0cmluZyAod2hpY2ggbXVzdCBub3QgYmUgZGVhbGxvY2F0ZWQpLg0KLSovDQotDQotDQotICAgICAgICAgICAgICAgICAgICAgICAgLyogQWR2YW5jZWQgZnVuY3Rpb25zICovDQotDQotLyoNCi0gICAgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIG5lZWRlZCBvbmx5IGluIHNvbWUgc3BlY2lhbCBhcHBsaWNhdGlvbnMuDQotKi8NCi0NCi0vKg0KLVpFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZUluaXQyIE9GKCh6X3N0cmVhbXAgc3RybSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBsZXZlbCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBtZXRob2QsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgd2luZG93Qml0cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBtZW1MZXZlbCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBzdHJhdGVneSkpOw0KLQ0KLSAgICAgVGhpcyBpcyBhbm90aGVyIHZlcnNpb24gb2YgZGVmbGF0ZUluaXQgd2l0aCBtb3JlIGNvbXByZXNzaW9uIG9wdGlvbnMuICBUaGUNCi0gICBmaWVsZHMgbmV4dF9pbiwgemFsbG9jLCB6ZnJlZSBhbmQgb3BhcXVlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJ5IHRoZQ0KLSAgIGNhbGxlci4NCi0NCi0gICAgIFRoZSBtZXRob2QgcGFyYW1ldGVyIGlzIHRoZSBjb21wcmVzc2lvbiBtZXRob2QuICBJdCBtdXN0IGJlIFpfREVGTEFURUQgaW4NCi0gICB0aGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuDQotDQotICAgICBUaGUgd2luZG93Qml0cyBwYXJhbWV0ZXIgaXMgdGhlIGJhc2UgdHdvIGxvZ2FyaXRobSBvZiB0aGUgd2luZG93IHNpemUNCi0gICAodGhlIHNpemUgb2YgdGhlIGhpc3RvcnkgYnVmZmVyKS4gIEl0IHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgOC4uMTUgZm9yIHRoaXMNCi0gICB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LiAgTGFyZ2VyIHZhbHVlcyBvZiB0aGlzIHBhcmFtZXRlciByZXN1bHQgaW4gYmV0dGVyDQotICAgY29tcHJlc3Npb24gYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTUgaWYNCi0gICBkZWZsYXRlSW5pdCBpcyB1c2VkIGluc3RlYWQuDQotDQotICAgICB3aW5kb3dCaXRzIGNhbiBhbHNvIGJlIC04Li4tMTUgZm9yIHJhdyBkZWZsYXRlLiAgSW4gdGhpcyBjYXNlLCAtd2luZG93Qml0cw0KLSAgIGRldGVybWluZXMgdGhlIHdpbmRvdyBzaXplLiAgZGVmbGF0ZSgpIHdpbGwgdGhlbiBnZW5lcmF0ZSByYXcgZGVmbGF0ZSBkYXRhDQotICAgd2l0aCBubyB6bGliIGhlYWRlciBvciB0cmFpbGVyLCBhbmQgd2lsbCBub3QgY29tcHV0ZSBhbiBhZGxlcjMyIGNoZWNrIHZhbHVlLg0KLQ0KLSAgICAgd2luZG93Qml0cyBjYW4gYWxzbyBiZSBncmVhdGVyIHRoYW4gMTUgZm9yIG9wdGlvbmFsIGd6aXAgZW5jb2RpbmcuICBBZGQNCi0gICAxNiB0byB3aW5kb3dCaXRzIHRvIHdyaXRlIGEgc2ltcGxlIGd6aXAgaGVhZGVyIGFuZCB0cmFpbGVyIGFyb3VuZCB0aGUNCi0gICBjb21wcmVzc2VkIGRhdGEgaW5zdGVhZCBvZiBhIHpsaWIgd3JhcHBlci4gIFRoZSBnemlwIGhlYWRlciB3aWxsIGhhdmUgbm8NCi0gICBmaWxlIG5hbWUsIG5vIGV4dHJhIGRhdGEsIG5vIGNvbW1lbnQsIG5vIG1vZGlmaWNhdGlvbiB0aW1lIChzZXQgdG8gemVybyksIG5vDQotICAgaGVhZGVyIGNyYywgYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpbGwgYmUgc2V0IHRvIDI1NSAodW5rbm93bikuICBJZiBhDQotICAgZ3ppcCBzdHJlYW0gaXMgYmVpbmcgd3JpdHRlbiwgc3RybS0+YWRsZXIgaXMgYSBjcmMzMiBpbnN0ZWFkIG9mIGFuIGFkbGVyMzIuDQotDQotICAgICBUaGUgbWVtTGV2ZWwgcGFyYW1ldGVyIHNwZWNpZmllcyBob3cgbXVjaCBtZW1vcnkgc2hvdWxkIGJlIGFsbG9jYXRlZA0KLSAgIGZvciB0aGUgaW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUuICBtZW1MZXZlbD0xIHVzZXMgbWluaW11bSBtZW1vcnkgYnV0IGlzDQotICAgc2xvdyBhbmQgcmVkdWNlcyBjb21wcmVzc2lvbiByYXRpbzsgbWVtTGV2ZWw9OSB1c2VzIG1heGltdW0gbWVtb3J5IGZvcg0KLSAgIG9wdGltYWwgc3BlZWQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA4LiAgU2VlIHpjb25mLmggZm9yIHRvdGFsIG1lbW9yeSB1c2FnZQ0KLSAgIGFzIGEgZnVuY3Rpb24gb2Ygd2luZG93Qml0cyBhbmQgbWVtTGV2ZWwuDQotDQotICAgICBUaGUgc3RyYXRlZ3kgcGFyYW1ldGVyIGlzIHVzZWQgdG8gdHVuZSB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiAgVXNlIHRoZQ0KLSAgIHZhbHVlIFpfREVGQVVMVF9TVFJBVEVHWSBmb3Igbm9ybWFsIGRhdGEsIFpfRklMVEVSRUQgZm9yIGRhdGEgcHJvZHVjZWQgYnkgYQ0KLSAgIGZpbHRlciAob3IgcHJlZGljdG9yKSwgWl9IVUZGTUFOX09OTFkgdG8gZm9yY2UgSHVmZm1hbiBlbmNvZGluZyBvbmx5IChubw0KLSAgIHN0cmluZyBtYXRjaCksIG9yIFpfUkxFIHRvIGxpbWl0IG1hdGNoIGRpc3RhbmNlcyB0byBvbmUgKHJ1bi1sZW5ndGgNCi0gICBlbmNvZGluZykuICBGaWx0ZXJlZCBkYXRhIGNvbnNpc3RzIG1vc3RseSBvZiBzbWFsbCB2YWx1ZXMgd2l0aCBhIHNvbWV3aGF0DQotICAgcmFuZG9tIGRpc3RyaWJ1dGlvbi4gIEluIHRoaXMgY2FzZSwgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpcyB0dW5lZCB0bw0KLSAgIGNvbXByZXNzIHRoZW0gYmV0dGVyLiAgVGhlIGVmZmVjdCBvZiBaX0ZJTFRFUkVEIGlzIHRvIGZvcmNlIG1vcmUgSHVmZm1hbg0KLSAgIGNvZGluZyBhbmQgbGVzcyBzdHJpbmcgbWF0Y2hpbmc7IGl0IGlzIHNvbWV3aGF0IGludGVybWVkaWF0ZSBiZXR3ZWVuDQotICAgWl9ERUZBVUxUX1NUUkFURUdZIGFuZCBaX0hVRkZNQU5fT05MWS4gIFpfUkxFIGlzIGRlc2lnbmVkIHRvIGJlIGFsbW9zdCBhcw0KLSAgIGZhc3QgYXMgWl9IVUZGTUFOX09OTFksIGJ1dCBnaXZlIGJldHRlciBjb21wcmVzc2lvbiBmb3IgUE5HIGltYWdlIGRhdGEuICBUaGUNCi0gICBzdHJhdGVneSBwYXJhbWV0ZXIgb25seSBhZmZlY3RzIHRoZSBjb21wcmVzc2lvbiByYXRpbyBidXQgbm90IHRoZQ0KLSAgIGNvcnJlY3RuZXNzIG9mIHRoZSBjb21wcmVzc2VkIG91dHB1dCBldmVuIGlmIGl0IGlzIG5vdCBzZXQgYXBwcm9wcmlhdGVseS4NCi0gICBaX0ZJWEVEIHByZXZlbnRzIHRoZSB1c2Ugb2YgZHluYW1pYyBIdWZmbWFuIGNvZGVzLCBhbGxvd2luZyBmb3IgYSBzaW1wbGVyDQotICAgZGVjb2RlciBmb3Igc3BlY2lhbCBhcHBsaWNhdGlvbnMuDQotDQotICAgICBkZWZsYXRlSW5pdDIgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoDQotICAgbWVtb3J5LCBaX1NUUkVBTV9FUlJPUiBpZiBhbnkgcGFyYW1ldGVyIGlzIGludmFsaWQgKHN1Y2ggYXMgYW4gaW52YWxpZA0KLSAgIG1ldGhvZCksIG9yIFpfVkVSU0lPTl9FUlJPUiBpZiB0aGUgemxpYiBsaWJyYXJ5IHZlcnNpb24gKHpsaWJfdmVyc2lvbikgaXMNCi0gICBpbmNvbXBhdGlibGUgd2l0aCB0aGUgdmVyc2lvbiBhc3N1bWVkIGJ5IHRoZSBjYWxsZXIgKFpMSUJfVkVSU0lPTikuICBtc2cgaXMNCi0gICBzZXQgdG8gbnVsbCBpZiB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLiAgZGVmbGF0ZUluaXQyIGRvZXMgbm90IHBlcmZvcm0gYW55DQotICAgY29tcHJlc3Npb246IHRoaXMgd2lsbCBiZSBkb25lIGJ5IGRlZmxhdGUoKS4NCi0qLw0KLQ0KLVpFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVNldERpY3Rpb25hcnkgT0YoKHpfc3RyZWFtcCBzdHJtLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ5dGVmICpkaWN0aW9uYXJ5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQgIGRpY3RMZW5ndGgpKTsNCi0vKg0KLSAgICAgSW5pdGlhbGl6ZXMgdGhlIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkgZnJvbSB0aGUgZ2l2ZW4gYnl0ZSBzZXF1ZW5jZQ0KLSAgIHdpdGhvdXQgcHJvZHVjaW5nIGFueSBjb21wcmVzc2VkIG91dHB1dC4gIFdoZW4gdXNpbmcgdGhlIHpsaWIgZm9ybWF0LCB0aGlzDQotICAgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVmbGF0ZUluaXQsIGRlZmxhdGVJbml0MiBvcg0KLSAgIGRlZmxhdGVSZXNldCwgYW5kIGJlZm9yZSBhbnkgY2FsbCBvZiBkZWZsYXRlLiAgV2hlbiBkb2luZyByYXcgZGVmbGF0ZSwgdGhpcw0KLSAgIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGVpdGhlciBiZWZvcmUgYW55IGNhbGwgb2YgZGVmbGF0ZSwgb3IgaW1tZWRpYXRlbHkNCi0gICBhZnRlciB0aGUgY29tcGxldGlvbiBvZiBhIGRlZmxhdGUgYmxvY2ssIGkuZS4gYWZ0ZXIgYWxsIGlucHV0IGhhcyBiZWVuDQotICAgY29uc3VtZWQgYW5kIGFsbCBvdXRwdXQgaGFzIGJlZW4gZGVsaXZlcmVkIHdoZW4gdXNpbmcgYW55IG9mIHRoZSBmbHVzaA0KLSAgIG9wdGlvbnMgWl9CTE9DSywgWl9QQVJUSUFMX0ZMVVNILCBaX1NZTkNfRkxVU0gsIG9yIFpfRlVMTF9GTFVTSC4gIFRoZQ0KLSAgIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvciBtdXN0IHVzZSBleGFjdGx5IHRoZSBzYW1lIGRpY3Rpb25hcnkgKHNlZQ0KLSAgIGluZmxhdGVTZXREaWN0aW9uYXJ5KS4NCi0NCi0gICAgIFRoZSBkaWN0aW9uYXJ5IHNob3VsZCBjb25zaXN0IG9mIHN0cmluZ3MgKGJ5dGUgc2VxdWVuY2VzKSB0aGF0IGFyZSBsaWtlbHkNCi0gICB0byBiZSBlbmNvdW50ZXJlZCBsYXRlciBpbiB0aGUgZGF0YSB0byBiZSBjb21wcmVzc2VkLCB3aXRoIHRoZSBtb3N0IGNvbW1vbmx5DQotICAgdXNlZCBzdHJpbmdzIHByZWZlcmFibHkgcHV0IHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgZGljdGlvbmFyeS4gIFVzaW5nIGENCi0gICBkaWN0aW9uYXJ5IGlzIG1vc3QgdXNlZnVsIHdoZW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCBpcyBzaG9ydCBhbmQgY2FuIGJlDQotICAgcHJlZGljdGVkIHdpdGggZ29vZCBhY2N1cmFjeTsgdGhlIGRhdGEgY2FuIHRoZW4gYmUgY29tcHJlc3NlZCBiZXR0ZXIgdGhhbg0KLSAgIHdpdGggdGhlIGRlZmF1bHQgZW1wdHkgZGljdGlvbmFyeS4NCi0NCi0gICAgIERlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiB0aGUgY29tcHJlc3Npb24gZGF0YSBzdHJ1Y3R1cmVzIHNlbGVjdGVkIGJ5DQotICAgZGVmbGF0ZUluaXQgb3IgZGVmbGF0ZUluaXQyLCBhIHBhcnQgb2YgdGhlIGRpY3Rpb25hcnkgbWF5IGluIGVmZmVjdCBiZQ0KLSAgIGRpc2NhcmRlZCwgZm9yIGV4YW1wbGUgaWYgdGhlIGRpY3Rpb25hcnkgaXMgbGFyZ2VyIHRoYW4gdGhlIHdpbmRvdyBzaXplDQotICAgcHJvdmlkZWQgaW4gZGVmbGF0ZUluaXQgb3IgZGVmbGF0ZUluaXQyLiAgVGh1cyB0aGUgc3RyaW5ncyBtb3N0IGxpa2VseSB0byBiZQ0KLSAgIHVzZWZ1bCBzaG91bGQgYmUgcHV0IGF0IHRoZSBlbmQgb2YgdGhlIGRpY3Rpb25hcnksIG5vdCBhdCB0aGUgZnJvbnQuICBJbg0KLSAgIGFkZGl0aW9uLCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBkZWZsYXRlIHdpbGwgdXNlIGF0IG1vc3QgdGhlIHdpbmRvdw0KLSAgIHNpemUgbWludXMgMjYyIGJ5dGVzIG9mIHRoZSBwcm92aWRlZCBkaWN0aW9uYXJ5Lg0KLQ0KLSAgICAgVXBvbiByZXR1cm4gb2YgdGhpcyBmdW5jdGlvbiwgc3RybS0+YWRsZXIgaXMgc2V0IHRvIHRoZSBhZGxlcjMyIHZhbHVlDQotICAgb2YgdGhlIGRpY3Rpb25hcnk7IHRoZSBkZWNvbXByZXNzb3IgbWF5IGxhdGVyIHVzZSB0aGlzIHZhbHVlIHRvIGRldGVybWluZQ0KLSAgIHdoaWNoIGRpY3Rpb25hcnkgaGFzIGJlZW4gdXNlZCBieSB0aGUgY29tcHJlc3Nvci4gIChUaGUgYWRsZXIzMiB2YWx1ZQ0KLSAgIGFwcGxpZXMgdG8gdGhlIHdob2xlIGRpY3Rpb25hcnkgZXZlbiBpZiBvbmx5IGEgc3Vic2V0IG9mIHRoZSBkaWN0aW9uYXJ5IGlzDQotICAgYWN0dWFsbHkgdXNlZCBieSB0aGUgY29tcHJlc3Nvci4pIElmIGEgcmF3IGRlZmxhdGUgd2FzIHJlcXVlc3RlZCwgdGhlbiB0aGUNCi0gICBhZGxlcjMyIHZhbHVlIGlzIG5vdCBjb21wdXRlZCBhbmQgc3RybS0+YWRsZXIgaXMgbm90IHNldC4NCi0NCi0gICAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiBhDQotICAgcGFyYW1ldGVyIGlzIGludmFsaWQgKGUuZy4gIGRpY3Rpb25hcnkgYmVpbmcgWl9OVUxMKSBvciB0aGUgc3RyZWFtIHN0YXRlIGlzDQotICAgaW5jb25zaXN0ZW50IChmb3IgZXhhbXBsZSBpZiBkZWZsYXRlIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciB0aGlzIHN0cmVhbQ0KLSAgIG9yIGlmIG5vdCBhdCBhIGJsb2NrIGJvdW5kYXJ5IGZvciByYXcgZGVmbGF0ZSkuICBkZWZsYXRlU2V0RGljdGlvbmFyeSBkb2VzDQotICAgbm90IHBlcmZvcm0gYW55IGNvbXByZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBieSBkZWZsYXRlKCkuDQotKi8NCi0NCi1aRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVDb3B5IE9GKCh6X3N0cmVhbXAgZGVzdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6X3N0cmVhbXAgc291cmNlKSk7DQotLyoNCi0gICAgIFNldHMgdGhlIGRlc3RpbmF0aW9uIHN0cmVhbSBhcyBhIGNvbXBsZXRlIGNvcHkgb2YgdGhlIHNvdXJjZSBzdHJlYW0uDQotDQotICAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VmdWwgd2hlbiBzZXZlcmFsIGNvbXByZXNzaW9uIHN0cmF0ZWdpZXMgd2lsbCBiZQ0KLSAgIHRyaWVkLCBmb3IgZXhhbXBsZSB3aGVuIHRoZXJlIGFyZSBzZXZlcmFsIHdheXMgb2YgcHJlLXByb2Nlc3NpbmcgdGhlIGlucHV0DQotICAgZGF0YSB3aXRoIGEgZmlsdGVyLiAgVGhlIHN0cmVhbXMgdGhhdCB3aWxsIGJlIGRpc2NhcmRlZCBzaG91bGQgdGhlbiBiZSBmcmVlZA0KLSAgIGJ5IGNhbGxpbmcgZGVmbGF0ZUVuZC4gIE5vdGUgdGhhdCBkZWZsYXRlQ29weSBkdXBsaWNhdGVzIHRoZSBpbnRlcm5hbA0KLSAgIGNvbXByZXNzaW9uIHN0YXRlIHdoaWNoIGNhbiBiZSBxdWl0ZSBsYXJnZSwgc28gdGhpcyBzdHJhdGVneSBpcyBzbG93IGFuZCBjYW4NCi0gICBjb25zdW1lIGxvdHMgb2YgbWVtb3J5Lg0KLQ0KLSAgICAgZGVmbGF0ZUNvcHkgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QNCi0gICBlbm91Z2ggbWVtb3J5LCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50DQotICAgKHN1Y2ggYXMgemFsbG9jIGJlaW5nIFpfTlVMTCkuICBtc2cgaXMgbGVmdCB1bmNoYW5nZWQgaW4gYm90aCBzb3VyY2UgYW5kDQotICAgZGVzdGluYXRpb24uDQotKi8NCi0NCi1aRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVSZXNldCBPRigoel9zdHJlYW1wIHN0cm0pKTsNCi0vKg0KLSAgICAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGRlZmxhdGVFbmQgZm9sbG93ZWQgYnkgZGVmbGF0ZUluaXQsDQotICAgYnV0IGRvZXMgbm90IGZyZWUgYW5kIHJlYWxsb2NhdGUgYWxsIHRoZSBpbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZS4gIFRoZQ0KLSAgIHN0cmVhbSB3aWxsIGtlZXAgdGhlIHNhbWUgY29tcHJlc3Npb24gbGV2ZWwgYW5kIGFueSBvdGhlciBhdHRyaWJ1dGVzIHRoYXQNCi0gICBtYXkgaGF2ZSBiZWVuIHNldCBieSBkZWZsYXRlSW5pdDIuDQotDQotICAgICBkZWZsYXRlUmVzZXQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UNCi0gICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudCAoc3VjaCBhcyB6YWxsb2Mgb3Igc3RhdGUgYmVpbmcgWl9OVUxMKS4NCi0qLw0KLQ0KLVpFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVBhcmFtcyBPRigoel9zdHJlYW1wIHN0cm0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyYXRlZ3kpKTsNCi0vKg0KLSAgICAgRHluYW1pY2FsbHkgdXBkYXRlIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBhbmQgY29tcHJlc3Npb24gc3RyYXRlZ3kuICBUaGUNCi0gICBpbnRlcnByZXRhdGlvbiBvZiBsZXZlbCBhbmQgc3RyYXRlZ3kgaXMgYXMgaW4gZGVmbGF0ZUluaXQyLiAgVGhpcyBjYW4gYmUNCi0gICB1c2VkIHRvIHN3aXRjaCBiZXR3ZWVuIGNvbXByZXNzaW9uIGFuZCBzdHJhaWdodCBjb3B5IG9mIHRoZSBpbnB1dCBkYXRhLCBvcg0KLSAgIHRvIHN3aXRjaCB0byBhIGRpZmZlcmVudCBraW5kIG9mIGlucHV0IGRhdGEgcmVxdWlyaW5nIGEgZGlmZmVyZW50IHN0cmF0ZWd5Lg0KLSAgIElmIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBpcyBjaGFuZ2VkLCB0aGUgaW5wdXQgYXZhaWxhYmxlIHNvIGZhciBpcw0KLSAgIGNvbXByZXNzZWQgd2l0aCB0aGUgb2xkIGxldmVsIChhbmQgbWF5IGJlIGZsdXNoZWQpOyB0aGUgbmV3IGxldmVsIHdpbGwgdGFrZQ0KLSAgIGVmZmVjdCBvbmx5IGF0IHRoZSBuZXh0IGNhbGwgb2YgZGVmbGF0ZSgpLg0KLQ0KLSAgICAgQmVmb3JlIHRoZSBjYWxsIG9mIGRlZmxhdGVQYXJhbXMsIHRoZSBzdHJlYW0gc3RhdGUgbXVzdCBiZSBzZXQgYXMgZm9yDQotICAgYSBjYWxsIG9mIGRlZmxhdGUoKSwgc2luY2UgdGhlIGN1cnJlbnRseSBhdmFpbGFibGUgaW5wdXQgbWF5IGhhdmUgdG8gYmUNCi0gICBjb21wcmVzc2VkIGFuZCBmbHVzaGVkLiAgSW4gcGFydGljdWxhciwgc3RybS0+YXZhaWxfb3V0IG11c3QgYmUgbm9uLXplcm8uDQotDQotICAgICBkZWZsYXRlUGFyYW1zIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlDQotICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQgb3IgaWYgYSBwYXJhbWV0ZXIgd2FzIGludmFsaWQsIFpfQlVGX0VSUk9SIGlmDQotICAgc3RybS0+YXZhaWxfb3V0IHdhcyB6ZXJvLg0KLSovDQotDQotWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlVHVuZSBPRigoel9zdHJlYW1wIHN0cm0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGdvb2RfbGVuZ3RoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhfbGF6eSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmljZV9sZW5ndGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heF9jaGFpbikpOw0KLS8qDQotICAgICBGaW5lIHR1bmUgZGVmbGF0ZSdzIGludGVybmFsIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMuICBUaGlzIHNob3VsZCBvbmx5IGJlDQotICAgdXNlZCBieSBzb21lb25lIHdobyB1bmRlcnN0YW5kcyB0aGUgYWxnb3JpdGhtIHVzZWQgYnkgemxpYidzIGRlZmxhdGUgZm9yDQotICAgc2VhcmNoaW5nIGZvciB0aGUgYmVzdCBtYXRjaGluZyBzdHJpbmcsIGFuZCBldmVuIHRoZW4gb25seSBieSB0aGUgbW9zdA0KLSAgIGZhbmF0aWMgb3B0aW1pemVyIHRyeWluZyB0byBzcXVlZXplIG91dCB0aGUgbGFzdCBjb21wcmVzc2VkIGJpdCBmb3IgdGhlaXINCi0gICBzcGVjaWZpYyBpbnB1dCBkYXRhLiAgUmVhZCB0aGUgZGVmbGF0ZS5jIHNvdXJjZSBjb2RlIGZvciB0aGUgbWVhbmluZyBvZiB0aGUNCi0gICBtYXhfbGF6eSwgZ29vZF9sZW5ndGgsIG5pY2VfbGVuZ3RoLCBhbmQgbWF4X2NoYWluIHBhcmFtZXRlcnMuDQotDQotICAgICBkZWZsYXRlVHVuZSgpIGNhbiBiZSBjYWxsZWQgYWZ0ZXIgZGVmbGF0ZUluaXQoKSBvciBkZWZsYXRlSW5pdDIoKSwgYW5kDQotICAgcmV0dXJucyBaX09LIG9uIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGZvciBhbiBpbnZhbGlkIGRlZmxhdGUgc3RyZWFtLg0KLSAqLw0KLQ0KLVpFWFRFUk4gdUxvbmcgWkVYUE9SVCBkZWZsYXRlQm91bmQgT0YoKHpfc3RyZWFtcCBzdHJtLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVMb25nIHNvdXJjZUxlbikpOw0KLS8qDQotICAgICBkZWZsYXRlQm91bmQoKSByZXR1cm5zIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSBjb21wcmVzc2VkIHNpemUgYWZ0ZXINCi0gICBkZWZsYXRpb24gb2Ygc291cmNlTGVuIGJ5dGVzLiAgSXQgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgZGVmbGF0ZUluaXQoKSBvcg0KLSAgIGRlZmxhdGVJbml0MigpLCBhbmQgYWZ0ZXIgZGVmbGF0ZVNldEhlYWRlcigpLCBpZiB1c2VkLiAgVGhpcyB3b3VsZCBiZSB1c2VkDQotICAgdG8gYWxsb2NhdGUgYW4gb3V0cHV0IGJ1ZmZlciBmb3IgZGVmbGF0aW9uIGluIGEgc2luZ2xlIHBhc3MsIGFuZCBzbyB3b3VsZCBiZQ0KLSAgIGNhbGxlZCBiZWZvcmUgZGVmbGF0ZSgpLiAgSWYgdGhhdCBmaXJzdCBkZWZsYXRlKCkgY2FsbCBpcyBwcm92aWRlZCB0aGUNCi0gICBzb3VyY2VMZW4gaW5wdXQgYnl0ZXMsIGFuIG91dHB1dCBidWZmZXIgYWxsb2NhdGVkIHRvIHRoZSBzaXplIHJldHVybmVkIGJ5DQotICAgZGVmbGF0ZUJvdW5kKCksIGFuZCB0aGUgZmx1c2ggdmFsdWUgWl9GSU5JU0gsIHRoZW4gZGVmbGF0ZSgpIGlzIGd1YXJhbnRlZWQNCi0gICB0byByZXR1cm4gWl9TVFJFQU1fRU5ELiAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIGZvciB0aGUgY29tcHJlc3NlZCBzaXplIHRvDQotICAgYmUgbGFyZ2VyIHRoYW4gdGhlIHZhbHVlIHJldHVybmVkIGJ5IGRlZmxhdGVCb3VuZCgpIGlmIGZsdXNoIG9wdGlvbnMgb3RoZXINCi0gICB0aGFuIFpfRklOSVNIIG9yIFpfTk9fRkxVU0ggYXJlIHVzZWQuDQotKi8NCi0NCi1aRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVQZW5kaW5nIE9GKCh6X3N0cmVhbXAgc3RybSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCAqcGVuZGluZywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmJpdHMpKTsNCi0vKg0KLSAgICAgZGVmbGF0ZVBlbmRpbmcoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYW5kIGJpdHMgb2Ygb3V0cHV0IHRoYXQgaGF2ZQ0KLSAgIGJlZW4gZ2VuZXJhdGVkLCBidXQgbm90IHlldCBwcm92aWRlZCBpbiB0aGUgYXZhaWxhYmxlIG91dHB1dC4gIFRoZSBieXRlcyBub3QNCi0gICBwcm92aWRlZCB3b3VsZCBiZSBkdWUgdG8gdGhlIGF2YWlsYWJsZSBvdXRwdXQgc3BhY2UgaGF2aW5nIGJlaW5nIGNvbnN1bWVkLg0KLSAgIFRoZSBudW1iZXIgb2YgYml0cyBvZiBvdXRwdXQgbm90IHByb3ZpZGVkIGFyZSBiZXR3ZWVuIDAgYW5kIDcsIHdoZXJlIHRoZXkNCi0gICBhd2FpdCBtb3JlIGJpdHMgdG8gam9pbiB0aGVtIGluIG9yZGVyIHRvIGZpbGwgb3V0IGEgZnVsbCBieXRlLiAgSWYgcGVuZGluZw0KLSAgIG9yIGJpdHMgYXJlIFpfTlVMTCwgdGhlbiB0aG9zZSB2YWx1ZXMgYXJlIG5vdCBzZXQuDQotDQotICAgICBkZWZsYXRlUGVuZGluZyByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQ0KLSAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50Lg0KLSAqLw0KLQ0KLVpFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVByaW1lIE9GKCh6X3N0cmVhbXAgc3RybSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJpdHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSkpOw0KLS8qDQotICAgICBkZWZsYXRlUHJpbWUoKSBpbnNlcnRzIGJpdHMgaW4gdGhlIGRlZmxhdGUgb3V0cHV0IHN0cmVhbS4gIFRoZSBpbnRlbnQNCi0gICBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzdGFydCBvZmYgdGhlIGRlZmxhdGUgb3V0cHV0IHdpdGggdGhlIGJpdHMNCi0gICBsZWZ0b3ZlciBmcm9tIGEgcHJldmlvdXMgZGVmbGF0ZSBzdHJlYW0gd2hlbiBhcHBlbmRpbmcgdG8gaXQuICBBcyBzdWNoLCB0aGlzDQotICAgZnVuY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBmb3IgcmF3IGRlZmxhdGUsIGFuZCBtdXN0IGJlIHVzZWQgYmVmb3JlIHRoZSBmaXJzdA0KLSAgIGRlZmxhdGUoKSBjYWxsIGFmdGVyIGEgZGVmbGF0ZUluaXQyKCkgb3IgZGVmbGF0ZVJlc2V0KCkuICBiaXRzIG11c3QgYmUgbGVzcw0KLSAgIHRoYW4gb3IgZXF1YWwgdG8gMTYsIGFuZCB0aGF0IG1hbnkgb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgdmFsdWUNCi0gICB3aWxsIGJlIGluc2VydGVkIGluIHRoZSBvdXRwdXQuDQotDQotICAgICBkZWZsYXRlUHJpbWUgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfQlVGX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoDQotICAgcm9vbSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIHRvIGluc2VydCB0aGUgYml0cywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlDQotICAgc291cmNlIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50Lg0KLSovDQotDQotWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlU2V0SGVhZGVyIE9GKCh6X3N0cmVhbXAgc3RybSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd6X2hlYWRlcnAgaGVhZCkpOw0KLS8qDQotICAgICBkZWZsYXRlU2V0SGVhZGVyKCkgcHJvdmlkZXMgZ3ppcCBoZWFkZXIgaW5mb3JtYXRpb24gZm9yIHdoZW4gYSBnemlwDQotICAgc3RyZWFtIGlzIHJlcXVlc3RlZCBieSBkZWZsYXRlSW5pdDIoKS4gIGRlZmxhdGVTZXRIZWFkZXIoKSBtYXkgYmUgY2FsbGVkDQotICAgYWZ0ZXIgZGVmbGF0ZUluaXQyKCkgb3IgZGVmbGF0ZVJlc2V0KCkgYW5kIGJlZm9yZSB0aGUgZmlyc3QgY2FsbCBvZg0KLSAgIGRlZmxhdGUoKS4gIFRoZSB0ZXh0LCB0aW1lLCBvcywgZXh0cmEgZmllbGQsIG5hbWUsIGFuZCBjb21tZW50IGluZm9ybWF0aW9uDQotICAgaW4gdGhlIHByb3ZpZGVkIGd6X2hlYWRlciBzdHJ1Y3R1cmUgYXJlIHdyaXR0ZW4gdG8gdGhlIGd6aXAgaGVhZGVyICh4ZmxhZyBpcw0KLSAgIGlnbm9yZWQgLS0gdGhlIGV4dHJhIGZsYWdzIGFyZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSBjb21wcmVzc2lvbiBsZXZlbCkuICBUaGUNCi0gICBjYWxsZXIgbXVzdCBhc3N1cmUgdGhhdCwgaWYgbm90IFpfTlVMTCwgbmFtZSBhbmQgY29tbWVudCBhcmUgdGVybWluYXRlZCB3aXRoDQotICAgYSB6ZXJvIGJ5dGUsIGFuZCB0aGF0IGlmIGV4dHJhIGlzIG5vdCBaX05VTEwsIHRoYXQgZXh0cmFfbGVuIGJ5dGVzIGFyZQ0KLSAgIGF2YWlsYWJsZSB0aGVyZS4gIElmIGhjcmMgaXMgdHJ1ZSwgYSBnemlwIGhlYWRlciBjcmMgaXMgaW5jbHVkZWQuICBOb3RlIHRoYXQNCi0gICB0aGUgY3VycmVudCB2ZXJzaW9ucyBvZiB0aGUgY29tbWFuZC1saW5lIHZlcnNpb24gb2YgZ3ppcCAodXAgdGhyb3VnaCB2ZXJzaW9uDQotICAgMS4zLngpIGRvIG5vdCBzdXBwb3J0IGhlYWRlciBjcmMncywgYW5kIHdpbGwgcmVwb3J0IHRoYXQgaXQgaXMgYSAibXVsdGktcGFydA0KLSAgIGd6aXAgZmlsZSIgYW5kIGdpdmUgdXAuDQotDQotICAgICBJZiBkZWZsYXRlU2V0SGVhZGVyIGlzIG5vdCB1c2VkLCB0aGUgZGVmYXVsdCBnemlwIGhlYWRlciBoYXMgdGV4dCBmYWxzZSwNCi0gICB0aGUgdGltZSBzZXQgdG8gemVybywgYW5kIG9zIHNldCB0byAyNTUsIHdpdGggbm8gZXh0cmEsIG5hbWUsIG9yIGNvbW1lbnQNCi0gICBmaWVsZHMuICBUaGUgZ3ppcCBoZWFkZXIgaXMgcmV0dXJuZWQgdG8gdGhlIGRlZmF1bHQgc3RhdGUgYnkgZGVmbGF0ZVJlc2V0KCkuDQotDQotICAgICBkZWZsYXRlU2V0SGVhZGVyIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlDQotICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQuDQotKi8NCi0NCi0vKg0KLVpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUluaXQyIE9GKCh6X3N0cmVhbXAgc3RybSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICB3aW5kb3dCaXRzKSk7DQotDQotICAgICBUaGlzIGlzIGFub3RoZXIgdmVyc2lvbiBvZiBpbmZsYXRlSW5pdCB3aXRoIGFuIGV4dHJhIHBhcmFtZXRlci4gIFRoZQ0KLSAgIGZpZWxkcyBuZXh0X2luLCBhdmFpbF9pbiwgemFsbG9jLCB6ZnJlZSBhbmQgb3BhcXVlIG11c3QgYmUgaW5pdGlhbGl6ZWQNCi0gICBiZWZvcmUgYnkgdGhlIGNhbGxlci4NCi0NCi0gICAgIFRoZSB3aW5kb3dCaXRzIHBhcmFtZXRlciBpcyB0aGUgYmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSBtYXhpbXVtIHdpbmRvdw0KLSAgIHNpemUgKHRoZSBzaXplIG9mIHRoZSBoaXN0b3J5IGJ1ZmZlcikuICBJdCBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIDguLjE1IGZvcg0KLSAgIHRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE1IGlmIGluZmxhdGVJbml0IGlzIHVzZWQNCi0gICBpbnN0ZWFkLiAgd2luZG93Qml0cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgd2luZG93Qml0cyB2YWx1ZQ0KLSAgIHByb3ZpZGVkIHRvIGRlZmxhdGVJbml0MigpIHdoaWxlIGNvbXByZXNzaW5nLCBvciBpdCBtdXN0IGJlIGVxdWFsIHRvIDE1IGlmDQotICAgZGVmbGF0ZUluaXQyKCkgd2FzIG5vdCB1c2VkLiAgSWYgYSBjb21wcmVzc2VkIHN0cmVhbSB3aXRoIGEgbGFyZ2VyIHdpbmRvdw0KLSAgIHNpemUgaXMgZ2l2ZW4gYXMgaW5wdXQsIGluZmxhdGUoKSB3aWxsIHJldHVybiB3aXRoIHRoZSBlcnJvciBjb2RlDQotICAgWl9EQVRBX0VSUk9SIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGFsbG9jYXRlIGEgbGFyZ2VyIHdpbmRvdy4NCi0NCi0gICAgIHdpbmRvd0JpdHMgY2FuIGFsc28gYmUgemVybyB0byByZXF1ZXN0IHRoYXQgaW5mbGF0ZSB1c2UgdGhlIHdpbmRvdyBzaXplIGluDQotICAgdGhlIHpsaWIgaGVhZGVyIG9mIHRoZSBjb21wcmVzc2VkIHN0cmVhbS4NCi0NCi0gICAgIHdpbmRvd0JpdHMgY2FuIGFsc28gYmUgLTguLi0xNSBmb3IgcmF3IGluZmxhdGUuICBJbiB0aGlzIGNhc2UsIC13aW5kb3dCaXRzDQotICAgZGV0ZXJtaW5lcyB0aGUgd2luZG93IHNpemUuICBpbmZsYXRlKCkgd2lsbCB0aGVuIHByb2Nlc3MgcmF3IGRlZmxhdGUgZGF0YSwNCi0gICBub3QgbG9va2luZyBmb3IgYSB6bGliIG9yIGd6aXAgaGVhZGVyLCBub3QgZ2VuZXJhdGluZyBhIGNoZWNrIHZhbHVlLCBhbmQgbm90DQotICAgbG9va2luZyBmb3IgYW55IGNoZWNrIHZhbHVlcyBmb3IgY29tcGFyaXNvbiBhdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0uICBUaGlzDQotICAgaXMgZm9yIHVzZSB3aXRoIG90aGVyIGZvcm1hdHMgdGhhdCB1c2UgdGhlIGRlZmxhdGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdA0KLSAgIHN1Y2ggYXMgemlwLiAgVGhvc2UgZm9ybWF0cyBwcm92aWRlIHRoZWlyIG93biBjaGVjayB2YWx1ZXMuICBJZiBhIGN1c3RvbQ0KLSAgIGZvcm1hdCBpcyBkZXZlbG9wZWQgdXNpbmcgdGhlIHJhdyBkZWZsYXRlIGZvcm1hdCBmb3IgY29tcHJlc3NlZCBkYXRhLCBpdCBpcw0KLSAgIHJlY29tbWVuZGVkIHRoYXQgYSBjaGVjayB2YWx1ZSBzdWNoIGFzIGFuIGFkbGVyMzIgb3IgYSBjcmMzMiBiZSBhcHBsaWVkIHRvDQotICAgdGhlIHVuY29tcHJlc3NlZCBkYXRhIGFzIGlzIGRvbmUgaW4gdGhlIHpsaWIsIGd6aXAsIGFuZCB6aXAgZm9ybWF0cy4gIEZvcg0KLSAgIG1vc3QgYXBwbGljYXRpb25zLCB0aGUgemxpYiBmb3JtYXQgc2hvdWxkIGJlIHVzZWQgYXMgaXMuICBOb3RlIHRoYXQgY29tbWVudHMNCi0gICBhYm92ZSBvbiB0aGUgdXNlIGluIGRlZmxhdGVJbml0MigpIGFwcGxpZXMgdG8gdGhlIG1hZ25pdHVkZSBvZiB3aW5kb3dCaXRzLg0KLQ0KLSAgICAgd2luZG93Qml0cyBjYW4gYWxzbyBiZSBncmVhdGVyIHRoYW4gMTUgZm9yIG9wdGlvbmFsIGd6aXAgZGVjb2RpbmcuICBBZGQNCi0gICAzMiB0byB3aW5kb3dCaXRzIHRvIGVuYWJsZSB6bGliIGFuZCBnemlwIGRlY29kaW5nIHdpdGggYXV0b21hdGljIGhlYWRlcg0KLSAgIGRldGVjdGlvbiwgb3IgYWRkIDE2IHRvIGRlY29kZSBvbmx5IHRoZSBnemlwIGZvcm1hdCAodGhlIHpsaWIgZm9ybWF0IHdpbGwNCi0gICByZXR1cm4gYSBaX0RBVEFfRVJST1IpLiAgSWYgYSBnemlwIHN0cmVhbSBpcyBiZWluZyBkZWNvZGVkLCBzdHJtLT5hZGxlciBpcyBhDQotICAgY3JjMzIgaW5zdGVhZCBvZiBhbiBhZGxlcjMyLg0KLQ0KLSAgICAgaW5mbGF0ZUluaXQyIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaA0KLSAgIG1lbW9yeSwgWl9WRVJTSU9OX0VSUk9SIGlmIHRoZSB6bGliIGxpYnJhcnkgdmVyc2lvbiBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUNCi0gICB2ZXJzaW9uIGFzc3VtZWQgYnkgdGhlIGNhbGxlciwgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHBhcmFtZXRlcnMgYXJlDQotICAgaW52YWxpZCwgc3VjaCBhcyBhIG51bGwgcG9pbnRlciB0byB0aGUgc3RydWN0dXJlLiAgbXNnIGlzIHNldCB0byBudWxsIGlmDQotICAgdGhlcmUgaXMgbm8gZXJyb3IgbWVzc2FnZS4gIGluZmxhdGVJbml0MiBkb2VzIG5vdCBwZXJmb3JtIGFueSBkZWNvbXByZXNzaW9uDQotICAgYXBhcnQgZnJvbSBwb3NzaWJseSByZWFkaW5nIHRoZSB6bGliIGhlYWRlciBpZiBwcmVzZW50OiBhY3R1YWwgZGVjb21wcmVzc2lvbg0KLSAgIHdpbGwgYmUgZG9uZSBieSBpbmZsYXRlKCkuICAoU28gbmV4dF9pbiBhbmQgYXZhaWxfaW4gbWF5IGJlIG1vZGlmaWVkLCBidXQNCi0gICBuZXh0X291dCBhbmQgYXZhaWxfb3V0IGFyZSB1bnVzZWQgYW5kIHVuY2hhbmdlZC4pIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uDQotICAgb2YgaW5mbGF0ZUluaXQyKCkgZG9lcyBub3QgcHJvY2VzcyBhbnkgaGVhZGVyIGluZm9ybWF0aW9uIC0tIHRoYXQgaXMNCi0gICBkZWZlcnJlZCB1bnRpbCBpbmZsYXRlKCkgaXMgY2FsbGVkLg0KLSovDQotDQotWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlU2V0RGljdGlvbmFyeSBPRigoel9zdHJlYW1wIHN0cm0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnl0ZWYgKmRpY3Rpb25hcnksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCAgZGljdExlbmd0aCkpOw0KLS8qDQotICAgICBJbml0aWFsaXplcyB0aGUgZGVjb21wcmVzc2lvbiBkaWN0aW9uYXJ5IGZyb20gdGhlIGdpdmVuIHVuY29tcHJlc3NlZCBieXRlDQotICAgc2VxdWVuY2UuICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGEgY2FsbCBvZiBpbmZsYXRlLA0KLSAgIGlmIHRoYXQgY2FsbCByZXR1cm5lZCBaX05FRURfRElDVC4gIFRoZSBkaWN0aW9uYXJ5IGNob3NlbiBieSB0aGUgY29tcHJlc3Nvcg0KLSAgIGNhbiBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIGFkbGVyMzIgdmFsdWUgcmV0dXJuZWQgYnkgdGhhdCBjYWxsIG9mIGluZmxhdGUuDQotICAgVGhlIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvciBtdXN0IHVzZSBleGFjdGx5IHRoZSBzYW1lIGRpY3Rpb25hcnkgKHNlZQ0KLSAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5KS4gIEZvciByYXcgaW5mbGF0ZSwgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGF0IGFueQ0KLSAgIHRpbWUgdG8gc2V0IHRoZSBkaWN0aW9uYXJ5LiAgSWYgdGhlIHByb3ZpZGVkIGRpY3Rpb25hcnkgaXMgc21hbGxlciB0aGFuIHRoZQ0KLSAgIHdpbmRvdyBhbmQgdGhlcmUgaXMgYWxyZWFkeSBkYXRhIGluIHRoZSB3aW5kb3csIHRoZW4gdGhlIHByb3ZpZGVkIGRpY3Rpb25hcnkNCi0gICB3aWxsIGFtZW5kIHdoYXQncyB0aGVyZS4gIFRoZSBhcHBsaWNhdGlvbiBtdXN0IGluc3VyZSB0aGF0IHRoZSBkaWN0aW9uYXJ5DQotICAgdGhhdCB3YXMgdXNlZCBmb3IgY29tcHJlc3Npb24gaXMgcHJvdmlkZWQuDQotDQotICAgICBpbmZsYXRlU2V0RGljdGlvbmFyeSByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgYQ0KLSAgIHBhcmFtZXRlciBpcyBpbnZhbGlkIChlLmcuICBkaWN0aW9uYXJ5IGJlaW5nIFpfTlVMTCkgb3IgdGhlIHN0cmVhbSBzdGF0ZSBpcw0KLSAgIGluY29uc2lzdGVudCwgWl9EQVRBX0VSUk9SIGlmIHRoZSBnaXZlbiBkaWN0aW9uYXJ5IGRvZXNuJ3QgbWF0Y2ggdGhlDQotICAgZXhwZWN0ZWQgb25lIChpbmNvcnJlY3QgYWRsZXIzMiB2YWx1ZSkuICBpbmZsYXRlU2V0RGljdGlvbmFyeSBkb2VzIG5vdA0KLSAgIHBlcmZvcm0gYW55IGRlY29tcHJlc3Npb246IHRoaXMgd2lsbCBiZSBkb25lIGJ5IHN1YnNlcXVlbnQgY2FsbHMgb2YNCi0gICBpbmZsYXRlKCkuDQotKi8NCi0NCi1aRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVHZXREaWN0aW9uYXJ5IE9GKCh6X3N0cmVhbXAgc3RybSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlZiAqZGljdGlvbmFyeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1SW50ICAqZGljdExlbmd0aCkpOw0KLS8qDQotICAgICBSZXR1cm5zIHRoZSBzbGlkaW5nIGRpY3Rpb25hcnkgYmVpbmcgbWFpbnRhaW5lZCBieSBpbmZsYXRlLiAgZGljdExlbmd0aCBpcw0KLSAgIHNldCB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBkaWN0aW9uYXJ5LCBhbmQgdGhhdCBtYW55IGJ5dGVzIGFyZSBjb3BpZWQNCi0gICB0byBkaWN0aW9uYXJ5LiAgZGljdGlvbmFyeSBtdXN0IGhhdmUgZW5vdWdoIHNwYWNlLCB3aGVyZSAzMjc2OCBieXRlcyBpcw0KLSAgIGFsd2F5cyBlbm91Z2guICBJZiBpbmZsYXRlR2V0RGljdGlvbmFyeSgpIGlzIGNhbGxlZCB3aXRoIGRpY3Rpb25hcnkgZXF1YWwgdG8NCi0gICBaX05VTEwsIHRoZW4gb25seSB0aGUgZGljdGlvbmFyeSBsZW5ndGggaXMgcmV0dXJuZWQsIGFuZCBub3RoaW5nIGlzIGNvcGllZC4NCi0gICBTaW1pbGFyeSwgaWYgZGljdExlbmd0aCBpcyBaX05VTEwsIHRoZW4gaXQgaXMgbm90IHNldC4NCi0NCi0gICAgIGluZmxhdGVHZXREaWN0aW9uYXJ5IHJldHVybnMgWl9PSyBvbiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUNCi0gICBzdHJlYW0gc3RhdGUgaXMgaW5jb25zaXN0ZW50Lg0KLSovDQotDQotWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlU3luYyBPRigoel9zdHJlYW1wIHN0cm0pKTsNCi0vKg0KLSAgICAgU2tpcHMgaW52YWxpZCBjb21wcmVzc2VkIGRhdGEgdW50aWwgYSBwb3NzaWJsZSBmdWxsIGZsdXNoIHBvaW50IChzZWUgYWJvdmUNCi0gICBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIGRlZmxhdGUgd2l0aCBaX0ZVTExfRkxVU0gpIGNhbiBiZSBmb3VuZCwgb3IgdW50aWwgYWxsDQotICAgYXZhaWxhYmxlIGlucHV0IGlzIHNraXBwZWQuICBObyBvdXRwdXQgaXMgcHJvdmlkZWQuDQotDQotICAgICBpbmZsYXRlU3luYyBzZWFyY2hlcyBmb3IgYSAwMCAwMCBGRiBGRiBwYXR0ZXJuIGluIHRoZSBjb21wcmVzc2VkIGRhdGEuDQotICAgQWxsIGZ1bGwgZmx1c2ggcG9pbnRzIGhhdmUgdGhpcyBwYXR0ZXJuLCBidXQgbm90IGFsbCBvY2N1cnJlbmNlcyBvZiB0aGlzDQotICAgcGF0dGVybiBhcmUgZnVsbCBmbHVzaCBwb2ludHMuDQotDQotICAgICBpbmZsYXRlU3luYyByZXR1cm5zIFpfT0sgaWYgYSBwb3NzaWJsZSBmdWxsIGZsdXNoIHBvaW50IGhhcyBiZWVuIGZvdW5kLA0KLSAgIFpfQlVGX0VSUk9SIGlmIG5vIG1vcmUgaW5wdXQgd2FzIHByb3ZpZGVkLCBaX0RBVEFfRVJST1IgaWYgbm8gZmx1c2ggcG9pbnQNCi0gICBoYXMgYmVlbiBmb3VuZCwgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSBzdHJ1Y3R1cmUgd2FzIGluY29uc2lzdGVudC4NCi0gICBJbiB0aGUgc3VjY2VzcyBjYXNlLCB0aGUgYXBwbGljYXRpb24gbWF5IHNhdmUgdGhlIGN1cnJlbnQgY3VycmVudCB2YWx1ZSBvZg0KLSAgIHRvdGFsX2luIHdoaWNoIGluZGljYXRlcyB3aGVyZSB2YWxpZCBjb21wcmVzc2VkIGRhdGEgd2FzIGZvdW5kLiAgSW4gdGhlDQotICAgZXJyb3IgY2FzZSwgdGhlIGFwcGxpY2F0aW9uIG1heSByZXBlYXRlZGx5IGNhbGwgaW5mbGF0ZVN5bmMsIHByb3ZpZGluZyBtb3JlDQotICAgaW5wdXQgZWFjaCB0aW1lLCB1bnRpbCBzdWNjZXNzIG9yIGVuZCBvZiB0aGUgaW5wdXQgZGF0YS4NCi0qLw0KLQ0KLVpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUNvcHkgT0YoKHpfc3RyZWFtcCBkZXN0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpfc3RyZWFtcCBzb3VyY2UpKTsNCi0vKg0KLSAgICAgU2V0cyB0aGUgZGVzdGluYXRpb24gc3RyZWFtIGFzIGEgY29tcGxldGUgY29weSBvZiB0aGUgc291cmNlIHN0cmVhbS4NCi0NCi0gICAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWZ1bCB3aGVuIHJhbmRvbWx5IGFjY2Vzc2luZyBhIGxhcmdlIHN0cmVhbS4gIFRoZQ0KLSAgIGZpcnN0IHBhc3MgdGhyb3VnaCB0aGUgc3RyZWFtIGNhbiBwZXJpb2RpY2FsbHkgcmVjb3JkIHRoZSBpbmZsYXRlIHN0YXRlLA0KLSAgIGFsbG93aW5nIHJlc3RhcnRpbmcgaW5mbGF0ZSBhdCB0aG9zZSBwb2ludHMgd2hlbiByYW5kb21seSBhY2Nlc3NpbmcgdGhlDQotICAgc3RyZWFtLg0KLQ0KLSAgICAgaW5mbGF0ZUNvcHkgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QNCi0gICBlbm91Z2ggbWVtb3J5LCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50DQotICAgKHN1Y2ggYXMgemFsbG9jIGJlaW5nIFpfTlVMTCkuICBtc2cgaXMgbGVmdCB1bmNoYW5nZWQgaW4gYm90aCBzb3VyY2UgYW5kDQotICAgZGVzdGluYXRpb24uDQotKi8NCi0NCi1aRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVSZXNldCBPRigoel9zdHJlYW1wIHN0cm0pKTsNCi0vKg0KLSAgICAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGluZmxhdGVFbmQgZm9sbG93ZWQgYnkgaW5mbGF0ZUluaXQsDQotICAgYnV0IGRvZXMgbm90IGZyZWUgYW5kIHJlYWxsb2NhdGUgYWxsIHRoZSBpbnRlcm5hbCBkZWNvbXByZXNzaW9uIHN0YXRlLiAgVGhlDQotICAgc3RyZWFtIHdpbGwga2VlcCBhdHRyaWJ1dGVzIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQgYnkgaW5mbGF0ZUluaXQyLg0KLQ0KLSAgICAgaW5mbGF0ZVJlc2V0IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlDQotICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQgKHN1Y2ggYXMgemFsbG9jIG9yIHN0YXRlIGJlaW5nIFpfTlVMTCkuDQotKi8NCi0NCi1aRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVSZXNldDIgT0YoKHpfc3RyZWFtcCBzdHJtLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpbmRvd0JpdHMpKTsNCi0vKg0KLSAgICAgVGhpcyBmdW5jdGlvbiBpcyB0aGUgc2FtZSBhcyBpbmZsYXRlUmVzZXQsIGJ1dCBpdCBhbHNvIHBlcm1pdHMgY2hhbmdpbmcNCi0gICB0aGUgd3JhcCBhbmQgd2luZG93IHNpemUgcmVxdWVzdHMuICBUaGUgd2luZG93Qml0cyBwYXJhbWV0ZXIgaXMgaW50ZXJwcmV0ZWQNCi0gICB0aGUgc2FtZSBhcyBpdCBpcyBmb3IgaW5mbGF0ZUluaXQyLg0KLQ0KLSAgICAgaW5mbGF0ZVJlc2V0MiByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQ0KLSAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50IChzdWNoIGFzIHphbGxvYyBvciBzdGF0ZSBiZWluZyBaX05VTEwpLCBvciBpZg0KLSAgIHRoZSB3aW5kb3dCaXRzIHBhcmFtZXRlciBpcyBpbnZhbGlkLg0KLSovDQotDQotWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlUHJpbWUgT0YoKHpfc3RyZWFtcCBzdHJtLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYml0cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlKSk7DQotLyoNCi0gICAgIFRoaXMgZnVuY3Rpb24gaW5zZXJ0cyBiaXRzIGluIHRoZSBpbmZsYXRlIGlucHV0IHN0cmVhbS4gIFRoZSBpbnRlbnQgaXMNCi0gICB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzdGFydCBpbmZsYXRpbmcgYXQgYSBiaXQgcG9zaXRpb24gaW4gdGhlDQotICAgbWlkZGxlIG9mIGEgYnl0ZS4gIFRoZSBwcm92aWRlZCBiaXRzIHdpbGwgYmUgdXNlZCBiZWZvcmUgYW55IGJ5dGVzIGFyZSB1c2VkDQotICAgZnJvbSBuZXh0X2luLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIHdpdGggcmF3IGluZmxhdGUsIGFuZA0KLSAgIHNob3VsZCBiZSB1c2VkIGJlZm9yZSB0aGUgZmlyc3QgaW5mbGF0ZSgpIGNhbGwgYWZ0ZXIgaW5mbGF0ZUluaXQyKCkgb3INCi0gICBpbmZsYXRlUmVzZXQoKS4gIGJpdHMgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTYsIGFuZCB0aGF0IG1hbnkgb2YgdGhlDQotICAgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB2YWx1ZSB3aWxsIGJlIGluc2VydGVkIGluIHRoZSBpbnB1dC4NCi0NCi0gICAgIElmIGJpdHMgaXMgbmVnYXRpdmUsIHRoZW4gdGhlIGlucHV0IHN0cmVhbSBiaXQgYnVmZmVyIGlzIGVtcHRpZWQuICBUaGVuDQotICAgaW5mbGF0ZVByaW1lKCkgY2FuIGJlIGNhbGxlZCBhZ2FpbiB0byBwdXQgYml0cyBpbiB0aGUgYnVmZmVyLiAgVGhpcyBpcyB1c2VkDQotICAgdG8gY2xlYXIgb3V0IGJpdHMgbGVmdG92ZXIgYWZ0ZXIgZmVlZGluZyBpbmZsYXRlIGEgYmxvY2sgZGVzY3JpcHRpb24gcHJpb3INCi0gICB0byBmZWVkaW5nIGluZmxhdGUgY29kZXMuDQotDQotICAgICBpbmZsYXRlUHJpbWUgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UNCi0gICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4NCi0qLw0KLQ0KLVpFWFRFUk4gbG9uZyBaRVhQT1JUIGluZmxhdGVNYXJrIE9GKCh6X3N0cmVhbXAgc3RybSkpOw0KLS8qDQotICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHdvIHZhbHVlcywgb25lIGluIHRoZSBsb3dlciAxNiBiaXRzIG9mIHRoZSByZXR1cm4NCi0gICB2YWx1ZSwgYW5kIHRoZSBvdGhlciBpbiB0aGUgcmVtYWluaW5nIHVwcGVyIGJpdHMsIG9idGFpbmVkIGJ5IHNoaWZ0aW5nIHRoZQ0KLSAgIHJldHVybiB2YWx1ZSBkb3duIDE2IGJpdHMuICBJZiB0aGUgdXBwZXIgdmFsdWUgaXMgLTEgYW5kIHRoZSBsb3dlciB2YWx1ZSBpcw0KLSAgIHplcm8sIHRoZW4gaW5mbGF0ZSgpIGlzIGN1cnJlbnRseSBkZWNvZGluZyBpbmZvcm1hdGlvbiBvdXRzaWRlIG9mIGEgYmxvY2suDQotICAgSWYgdGhlIHVwcGVyIHZhbHVlIGlzIC0xIGFuZCB0aGUgbG93ZXIgdmFsdWUgaXMgbm9uLXplcm8sIHRoZW4gaW5mbGF0ZSBpcyBpbg0KLSAgIHRoZSBtaWRkbGUgb2YgYSBzdG9yZWQgYmxvY2ssIHdpdGggdGhlIGxvd2VyIHZhbHVlIGVxdWFsaW5nIHRoZSBudW1iZXIgb2YNCi0gICBieXRlcyBmcm9tIHRoZSBpbnB1dCByZW1haW5pbmcgdG8gY29weS4gIElmIHRoZSB1cHBlciB2YWx1ZSBpcyBub3QgLTEsIHRoZW4NCi0gICBpdCBpcyB0aGUgbnVtYmVyIG9mIGJpdHMgYmFjayBmcm9tIHRoZSBjdXJyZW50IGJpdCBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgb2YNCi0gICB0aGUgY29kZSAobGl0ZXJhbCBvciBsZW5ndGgvZGlzdGFuY2UgcGFpcikgY3VycmVudGx5IGJlaW5nIHByb2Nlc3NlZC4gIEluDQotICAgdGhhdCBjYXNlIHRoZSBsb3dlciB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFscmVhZHkgZW1pdHRlZCBmb3IgdGhhdA0KLSAgIGNvZGUuDQotDQotICAgICBBIGNvZGUgaXMgYmVpbmcgcHJvY2Vzc2VkIGlmIGluZmxhdGUgaXMgd2FpdGluZyBmb3IgbW9yZSBpbnB1dCB0byBjb21wbGV0ZQ0KLSAgIGRlY29kaW5nIG9mIHRoZSBjb2RlLCBvciBpZiBpdCBoYXMgY29tcGxldGVkIGRlY29kaW5nIGJ1dCBpcyB3YWl0aW5nIGZvcg0KLSAgIG1vcmUgb3V0cHV0IHNwYWNlIHRvIHdyaXRlIHRoZSBsaXRlcmFsIG9yIG1hdGNoIGRhdGEuDQotDQotICAgICBpbmZsYXRlTWFyaygpIGlzIHVzZWQgdG8gbWFyayBsb2NhdGlvbnMgaW4gdGhlIGlucHV0IGRhdGEgZm9yIHJhbmRvbQ0KLSAgIGFjY2Vzcywgd2hpY2ggbWF5IGJlIGF0IGJpdCBwb3NpdGlvbnMsIGFuZCB0byBub3RlIHRob3NlIGNhc2VzIHdoZXJlIHRoZQ0KLSAgIG91dHB1dCBvZiBhIGNvZGUgbWF5IHNwYW4gYm91bmRhcmllcyBvZiByYW5kb20gYWNjZXNzIGJsb2Nrcy4gIFRoZSBjdXJyZW50DQotICAgbG9jYXRpb24gaW4gdGhlIGlucHV0IHN0cmVhbSBjYW4gYmUgZGV0ZXJtaW5lZCBmcm9tIGF2YWlsX2luIGFuZCBkYXRhX3R5cGUNCi0gICBhcyBub3RlZCBpbiB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBaX0JMT0NLIGZsdXNoIHBhcmFtZXRlciBmb3IgaW5mbGF0ZS4NCi0NCi0gICAgIGluZmxhdGVNYXJrIHJldHVybnMgdGhlIHZhbHVlIG5vdGVkIGFib3ZlIG9yIC0xIDw8IDE2IGlmIHRoZSBwcm92aWRlZA0KLSAgIHNvdXJjZSBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4NCi0qLw0KLQ0KLVpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUdldEhlYWRlciBPRigoel9zdHJlYW1wIHN0cm0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnel9oZWFkZXJwIGhlYWQpKTsNCi0vKg0KLSAgICAgaW5mbGF0ZUdldEhlYWRlcigpIHJlcXVlc3RzIHRoYXQgZ3ppcCBoZWFkZXIgaW5mb3JtYXRpb24gYmUgc3RvcmVkIGluIHRoZQ0KLSAgIHByb3ZpZGVkIGd6X2hlYWRlciBzdHJ1Y3R1cmUuICBpbmZsYXRlR2V0SGVhZGVyKCkgbWF5IGJlIGNhbGxlZCBhZnRlcg0KLSAgIGluZmxhdGVJbml0MigpIG9yIGluZmxhdGVSZXNldCgpLCBhbmQgYmVmb3JlIHRoZSBmaXJzdCBjYWxsIG9mIGluZmxhdGUoKS4NCi0gICBBcyBpbmZsYXRlKCkgcHJvY2Vzc2VzIHRoZSBnemlwIHN0cmVhbSwgaGVhZC0+ZG9uZSBpcyB6ZXJvIHVudGlsIHRoZSBoZWFkZXINCi0gICBpcyBjb21wbGV0ZWQsIGF0IHdoaWNoIHRpbWUgaGVhZC0+ZG9uZSBpcyBzZXQgdG8gb25lLiAgSWYgYSB6bGliIHN0cmVhbSBpcw0KLSAgIGJlaW5nIGRlY29kZWQsIHRoZW4gaGVhZC0+ZG9uZSBpcyBzZXQgdG8gLTEgdG8gaW5kaWNhdGUgdGhhdCB0aGVyZSB3aWxsIGJlDQotICAgbm8gZ3ppcCBoZWFkZXIgaW5mb3JtYXRpb24gZm9ydGhjb21pbmcuICBOb3RlIHRoYXQgWl9CTE9DSyBvciBaX1RSRUVTIGNhbiBiZQ0KLSAgIHVzZWQgdG8gZm9yY2UgaW5mbGF0ZSgpIHRvIHJldHVybiBpbW1lZGlhdGVseSBhZnRlciBoZWFkZXIgcHJvY2Vzc2luZyBpcw0KLSAgIGNvbXBsZXRlIGFuZCBiZWZvcmUgYW55IGFjdHVhbCBkYXRhIGlzIGRlY29tcHJlc3NlZC4NCi0NCi0gICAgIFRoZSB0ZXh0LCB0aW1lLCB4ZmxhZ3MsIGFuZCBvcyBmaWVsZHMgYXJlIGZpbGxlZCBpbiB3aXRoIHRoZSBnemlwIGhlYWRlcg0KLSAgIGNvbnRlbnRzLiAgaGNyYyBpcyBzZXQgdG8gdHJ1ZSBpZiB0aGVyZSBpcyBhIGhlYWRlciBDUkMuICAoVGhlIGhlYWRlciBDUkMNCi0gICB3YXMgdmFsaWQgaWYgZG9uZSBpcyBzZXQgdG8gb25lLikgSWYgZXh0cmEgaXMgbm90IFpfTlVMTCwgdGhlbiBleHRyYV9tYXgNCi0gICBjb250YWlucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUgdG8gZXh0cmEuICBPbmNlIGRvbmUgaXMgdHJ1ZSwNCi0gICBleHRyYV9sZW4gY29udGFpbnMgdGhlIGFjdHVhbCBleHRyYSBmaWVsZCBsZW5ndGgsIGFuZCBleHRyYSBjb250YWlucyB0aGUNCi0gICBleHRyYSBmaWVsZCwgb3IgdGhhdCBmaWVsZCB0cnVuY2F0ZWQgaWYgZXh0cmFfbWF4IGlzIGxlc3MgdGhhbiBleHRyYV9sZW4uDQotICAgSWYgbmFtZSBpcyBub3QgWl9OVUxMLCB0aGVuIHVwIHRvIG5hbWVfbWF4IGNoYXJhY3RlcnMgYXJlIHdyaXR0ZW4gdGhlcmUsDQotICAgdGVybWluYXRlZCB3aXRoIGEgemVybyB1bmxlc3MgdGhlIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gbmFtZV9tYXguICBJZg0KLSAgIGNvbW1lbnQgaXMgbm90IFpfTlVMTCwgdGhlbiB1cCB0byBjb21tX21heCBjaGFyYWN0ZXJzIGFyZSB3cml0dGVuIHRoZXJlLA0KLSAgIHRlcm1pbmF0ZWQgd2l0aCBhIHplcm8gdW5sZXNzIHRoZSBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIGNvbW1fbWF4LiAgV2hlbiBhbnkNCi0gICBvZiBleHRyYSwgbmFtZSwgb3IgY29tbWVudCBhcmUgbm90IFpfTlVMTCBhbmQgdGhlIHJlc3BlY3RpdmUgZmllbGQgaXMgbm90DQotICAgcHJlc2VudCBpbiB0aGUgaGVhZGVyLCB0aGVuIHRoYXQgZmllbGQgaXMgc2V0IHRvIFpfTlVMTCB0byBzaWduYWwgaXRzDQotICAgYWJzZW5jZS4gIFRoaXMgYWxsb3dzIHRoZSB1c2Ugb2YgZGVmbGF0ZVNldEhlYWRlcigpIHdpdGggdGhlIHJldHVybmVkDQotICAgc3RydWN0dXJlIHRvIGR1cGxpY2F0ZSB0aGUgaGVhZGVyLiAgSG93ZXZlciBpZiB0aG9zZSBmaWVsZHMgYXJlIHNldCB0bw0KLSAgIGFsbG9jYXRlZCBtZW1vcnksIHRoZW4gdGhlIGFwcGxpY2F0aW9uIHdpbGwgbmVlZCB0byBzYXZlIHRob3NlIHBvaW50ZXJzDQotICAgZWxzZXdoZXJlIHNvIHRoYXQgdGhleSBjYW4gYmUgZXZlbnR1YWxseSBmcmVlZC4NCi0NCi0gICAgIElmIGluZmxhdGVHZXRIZWFkZXIgaXMgbm90IHVzZWQsIHRoZW4gdGhlIGhlYWRlciBpbmZvcm1hdGlvbiBpcyBzaW1wbHkNCi0gICBkaXNjYXJkZWQuICBUaGUgaGVhZGVyIGlzIGFsd2F5cyBjaGVja2VkIGZvciB2YWxpZGl0eSwgaW5jbHVkaW5nIHRoZSBoZWFkZXINCi0gICBDUkMgaWYgcHJlc2VudC4gIGluZmxhdGVSZXNldCgpIHdpbGwgcmVzZXQgdGhlIHByb2Nlc3MgdG8gZGlzY2FyZCB0aGUgaGVhZGVyDQotICAgaW5mb3JtYXRpb24uICBUaGUgYXBwbGljYXRpb24gd291bGQgbmVlZCB0byBjYWxsIGluZmxhdGVHZXRIZWFkZXIoKSBhZ2FpbiB0bw0KLSAgIHJldHJpZXZlIHRoZSBoZWFkZXIgZnJvbSB0aGUgbmV4dCBnemlwIHN0cmVhbS4NCi0NCi0gICAgIGluZmxhdGVHZXRIZWFkZXIgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UNCi0gICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4NCi0qLw0KLQ0KLS8qDQotWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlQmFja0luaXQgT0YoKHpfc3RyZWFtcCBzdHJtLCBpbnQgd2luZG93Qml0cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBGQVIgKndpbmRvdykpOw0KLQ0KLSAgICAgSW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgc3RyZWFtIHN0YXRlIGZvciBkZWNvbXByZXNzaW9uIHVzaW5nIGluZmxhdGVCYWNrKCkNCi0gICBjYWxscy4gIFRoZSBmaWVsZHMgemFsbG9jLCB6ZnJlZSBhbmQgb3BhcXVlIGluIHN0cm0gbXVzdCBiZSBpbml0aWFsaXplZA0KLSAgIGJlZm9yZSB0aGUgY2FsbC4gIElmIHphbGxvYyBhbmQgemZyZWUgYXJlIFpfTlVMTCwgdGhlbiB0aGUgZGVmYXVsdCBsaWJyYXJ5LQ0KLSAgIGRlcml2ZWQgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMgYXJlIHVzZWQuICB3aW5kb3dCaXRzIGlzIHRoZSBiYXNlIHR3bw0KLSAgIGxvZ2FyaXRobSBvZiB0aGUgd2luZG93IHNpemUsIGluIHRoZSByYW5nZSA4Li4xNS4gIHdpbmRvdyBpcyBhIGNhbGxlcg0KLSAgIHN1cHBsaWVkIGJ1ZmZlciBvZiB0aGF0IHNpemUuICBFeGNlcHQgZm9yIHNwZWNpYWwgYXBwbGljYXRpb25zIHdoZXJlIGl0IGlzDQotICAgYXNzdXJlZCB0aGF0IGRlZmxhdGUgd2FzIHVzZWQgd2l0aCBzbWFsbCB3aW5kb3cgc2l6ZXMsIHdpbmRvd0JpdHMgbXVzdCBiZSAxNQ0KLSAgIGFuZCBhIDMySyBieXRlIHdpbmRvdyBtdXN0IGJlIHN1cHBsaWVkIHRvIGJlIGFibGUgdG8gZGVjb21wcmVzcyBnZW5lcmFsDQotICAgZGVmbGF0ZSBzdHJlYW1zLg0KLQ0KLSAgICAgU2VlIGluZmxhdGVCYWNrKCkgZm9yIHRoZSB1c2FnZSBvZiB0aGVzZSByb3V0aW5lcy4NCi0NCi0gICAgIGluZmxhdGVCYWNrSW5pdCB3aWxsIHJldHVybiBaX09LIG9uIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIGlmIGFueSBvZg0KLSAgIHRoZSBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLCBaX01FTV9FUlJPUiBpZiB0aGUgaW50ZXJuYWwgc3RhdGUgY291bGQgbm90IGJlDQotICAgYWxsb2NhdGVkLCBvciBaX1ZFUlNJT05fRVJST1IgaWYgdGhlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgZG9lcyBub3QgbWF0Y2gNCi0gICB0aGUgdmVyc2lvbiBvZiB0aGUgaGVhZGVyIGZpbGUuDQotKi8NCi0NCi10eXBlZGVmIHVuc2lnbmVkICgqaW5fZnVuYykgT0YoKHZvaWQgRkFSICosDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICogRkFSICopKTsNCi10eXBlZGVmIGludCAoKm91dF9mdW5jKSBPRigodm9pZCBGQVIgKiwgdW5zaWduZWQgY2hhciBGQVIgKiwgdW5zaWduZWQpKTsNCi0NCi1aRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVCYWNrIE9GKCh6X3N0cmVhbXAgc3RybSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9mdW5jIGluLCB2b2lkIEZBUiAqaW5fZGVzYywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfZnVuYyBvdXQsIHZvaWQgRkFSICpvdXRfZGVzYykpOw0KLS8qDQotICAgICBpbmZsYXRlQmFjaygpIGRvZXMgYSByYXcgaW5mbGF0ZSB3aXRoIGEgc2luZ2xlIGNhbGwgdXNpbmcgYSBjYWxsLWJhY2sNCi0gICBpbnRlcmZhY2UgZm9yIGlucHV0IGFuZCBvdXRwdXQuICBUaGlzIGlzIHBvdGVudGlhbGx5IG1vcmUgZWZmaWNpZW50IHRoYW4NCi0gICBpbmZsYXRlKCkgZm9yIGZpbGUgaS9vIGFwcGxpY2F0aW9ucywgaW4gdGhhdCBpdCBhdm9pZHMgY29weWluZyBiZXR3ZWVuIHRoZQ0KLSAgIG91dHB1dCBhbmQgdGhlIHNsaWRpbmcgd2luZG93IGJ5IHNpbXBseSBtYWtpbmcgdGhlIHdpbmRvdyBpdHNlbGYgdGhlIG91dHB1dA0KLSAgIGJ1ZmZlci4gIGluZmxhdGUoKSBjYW4gYmUgZmFzdGVyIG9uIG1vZGVybiBDUFVzIHdoZW4gdXNlZCB3aXRoIGxhcmdlDQotICAgYnVmZmVycy4gIGluZmxhdGVCYWNrKCkgdHJ1c3RzIHRoZSBhcHBsaWNhdGlvbiB0byBub3QgY2hhbmdlIHRoZSBvdXRwdXQNCi0gICBidWZmZXIgcGFzc2VkIGJ5IHRoZSBvdXRwdXQgZnVuY3Rpb24sIGF0IGxlYXN0IHVudGlsIGluZmxhdGVCYWNrKCkgcmV0dXJucy4NCi0NCi0gICAgIGluZmxhdGVCYWNrSW5pdCgpIG11c3QgYmUgY2FsbGVkIGZpcnN0IHRvIGFsbG9jYXRlIHRoZSBpbnRlcm5hbCBzdGF0ZQ0KLSAgIGFuZCB0byBpbml0aWFsaXplIHRoZSBzdGF0ZSB3aXRoIHRoZSB1c2VyLXByb3ZpZGVkIHdpbmRvdyBidWZmZXIuDQotICAgaW5mbGF0ZUJhY2soKSBtYXkgdGhlbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzIHRvIGluZmxhdGUgYSBjb21wbGV0ZSwgcmF3DQotICAgZGVmbGF0ZSBzdHJlYW0gd2l0aCBlYWNoIGNhbGwuICBpbmZsYXRlQmFja0VuZCgpIGlzIHRoZW4gY2FsbGVkIHRvIGZyZWUgdGhlDQotICAgYWxsb2NhdGVkIHN0YXRlLg0KLQ0KLSAgICAgQSByYXcgZGVmbGF0ZSBzdHJlYW0gaXMgb25lIHdpdGggbm8gemxpYiBvciBnemlwIGhlYWRlciBvciB0cmFpbGVyLg0KLSAgIFRoaXMgcm91dGluZSB3b3VsZCBub3JtYWxseSBiZSB1c2VkIGluIGEgdXRpbGl0eSB0aGF0IHJlYWRzIHppcCBvciBnemlwDQotICAgZmlsZXMgYW5kIHdyaXRlcyBvdXQgdW5jb21wcmVzc2VkIGZpbGVzLiAgVGhlIHV0aWxpdHkgd291bGQgZGVjb2RlIHRoZQ0KLSAgIGhlYWRlciBhbmQgcHJvY2VzcyB0aGUgdHJhaWxlciBvbiBpdHMgb3duLCBoZW5jZSB0aGlzIHJvdXRpbmUgZXhwZWN0cyBvbmx5DQotICAgdGhlIHJhdyBkZWZsYXRlIHN0cmVhbSB0byBkZWNvbXByZXNzLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbm9ybWFsDQotICAgYmVoYXZpb3Igb2YgaW5mbGF0ZSgpLCB3aGljaCBleHBlY3RzIGVpdGhlciBhIHpsaWIgb3IgZ3ppcCBoZWFkZXIgYW5kDQotICAgdHJhaWxlciBhcm91bmQgdGhlIGRlZmxhdGUgc3RyZWFtLg0KLQ0KLSAgICAgaW5mbGF0ZUJhY2soKSB1c2VzIHR3byBzdWJyb3V0aW5lcyBzdXBwbGllZCBieSB0aGUgY2FsbGVyIHRoYXQgYXJlIHRoZW4NCi0gICBjYWxsZWQgYnkgaW5mbGF0ZUJhY2soKSBmb3IgaW5wdXQgYW5kIG91dHB1dC4gIGluZmxhdGVCYWNrKCkgY2FsbHMgdGhvc2UNCi0gICByb3V0aW5lcyB1bnRpbCBpdCByZWFkcyBhIGNvbXBsZXRlIGRlZmxhdGUgc3RyZWFtIGFuZCB3cml0ZXMgb3V0IGFsbCBvZiB0aGUNCi0gICB1bmNvbXByZXNzZWQgZGF0YSwgb3IgdW50aWwgaXQgZW5jb3VudGVycyBhbiBlcnJvci4gIFRoZSBmdW5jdGlvbidzDQotICAgcGFyYW1ldGVycyBhbmQgcmV0dXJuIHR5cGVzIGFyZSBkZWZpbmVkIGFib3ZlIGluIHRoZSBpbl9mdW5jIGFuZCBvdXRfZnVuYw0KLSAgIHR5cGVkZWZzLiAgaW5mbGF0ZUJhY2soKSB3aWxsIGNhbGwgaW4oaW5fZGVzYywgJmJ1Zikgd2hpY2ggc2hvdWxkIHJldHVybiB0aGUNCi0gICBudW1iZXIgb2YgYnl0ZXMgb2YgcHJvdmlkZWQgaW5wdXQsIGFuZCBhIHBvaW50ZXIgdG8gdGhhdCBpbnB1dCBpbiBidWYuICBJZg0KLSAgIHRoZXJlIGlzIG5vIGlucHV0IGF2YWlsYWJsZSwgaW4oKSBtdXN0IHJldHVybiB6ZXJvLS1idWYgaXMgaWdub3JlZCBpbiB0aGF0DQotICAgY2FzZS0tYW5kIGluZmxhdGVCYWNrKCkgd2lsbCByZXR1cm4gYSBidWZmZXIgZXJyb3IuICBpbmZsYXRlQmFjaygpIHdpbGwgY2FsbA0KLSAgIG91dChvdXRfZGVzYywgYnVmLCBsZW4pIHRvIHdyaXRlIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBidWZbMC4ubGVuLTFdLiAgb3V0KCkNCi0gICBzaG91bGQgcmV0dXJuIHplcm8gb24gc3VjY2Vzcywgb3Igbm9uLXplcm8gb24gZmFpbHVyZS4gIElmIG91dCgpIHJldHVybnMNCi0gICBub24temVybywgaW5mbGF0ZUJhY2soKSB3aWxsIHJldHVybiB3aXRoIGFuIGVycm9yLiAgTmVpdGhlciBpbigpIG5vciBvdXQoKQ0KLSAgIGFyZSBwZXJtaXR0ZWQgdG8gY2hhbmdlIHRoZSBjb250ZW50cyBvZiB0aGUgd2luZG93IHByb3ZpZGVkIHRvDQotICAgaW5mbGF0ZUJhY2tJbml0KCksIHdoaWNoIGlzIGFsc28gdGhlIGJ1ZmZlciB0aGF0IG91dCgpIHVzZXMgdG8gd3JpdGUgZnJvbS4NCi0gICBUaGUgbGVuZ3RoIHdyaXR0ZW4gYnkgb3V0KCkgd2lsbCBiZSBhdCBtb3N0IHRoZSB3aW5kb3cgc2l6ZS4gIEFueSBub24temVybw0KLSAgIGFtb3VudCBvZiBpbnB1dCBtYXkgYmUgcHJvdmlkZWQgYnkgaW4oKS4NCi0NCi0gICAgIEZvciBjb252ZW5pZW5jZSwgaW5mbGF0ZUJhY2soKSBjYW4gYmUgcHJvdmlkZWQgaW5wdXQgb24gdGhlIGZpcnN0IGNhbGwgYnkNCi0gICBzZXR0aW5nIHN0cm0tPm5leHRfaW4gYW5kIHN0cm0tPmF2YWlsX2luLiAgSWYgdGhhdCBpbnB1dCBpcyBleGhhdXN0ZWQsIHRoZW4NCi0gICBpbigpIHdpbGwgYmUgY2FsbGVkLiAgVGhlcmVmb3JlIHN0cm0tPm5leHRfaW4gbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUNCi0gICBjYWxsaW5nIGluZmxhdGVCYWNrKCkuICBJZiBzdHJtLT5uZXh0X2luIGlzIFpfTlVMTCwgdGhlbiBpbigpIHdpbGwgYmUgY2FsbGVkDQotICAgaW1tZWRpYXRlbHkgZm9yIGlucHV0LiAgSWYgc3RybS0+bmV4dF9pbiBpcyBub3QgWl9OVUxMLCB0aGVuIHN0cm0tPmF2YWlsX2luDQotICAgbXVzdCBhbHNvIGJlIGluaXRpYWxpemVkLCBhbmQgdGhlbiBpZiBzdHJtLT5hdmFpbF9pbiBpcyBub3QgemVybywgaW5wdXQgd2lsbA0KLSAgIGluaXRpYWxseSBiZSB0YWtlbiBmcm9tIHN0cm0tPm5leHRfaW5bMCAuLiAgc3RybS0+YXZhaWxfaW4gLSAxXS4NCi0NCi0gICAgIFRoZSBpbl9kZXNjIGFuZCBvdXRfZGVzYyBwYXJhbWV0ZXJzIG9mIGluZmxhdGVCYWNrKCkgaXMgcGFzc2VkIGFzIHRoZQ0KLSAgIGZpcnN0IHBhcmFtZXRlciBvZiBpbigpIGFuZCBvdXQoKSByZXNwZWN0aXZlbHkgd2hlbiB0aGV5IGFyZSBjYWxsZWQuICBUaGVzZQ0KLSAgIGRlc2NyaXB0b3JzIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgdG8gcGFzcyBhbnkgaW5mb3JtYXRpb24gdGhhdCB0aGUgY2FsbGVyLQ0KLSAgIHN1cHBsaWVkIGluKCkgYW5kIG91dCgpIGZ1bmN0aW9ucyBuZWVkIHRvIGRvIHRoZWlyIGpvYi4NCi0NCi0gICAgIE9uIHJldHVybiwgaW5mbGF0ZUJhY2soKSB3aWxsIHNldCBzdHJtLT5uZXh0X2luIGFuZCBzdHJtLT5hdmFpbF9pbiB0bw0KLSAgIHBhc3MgYmFjayBhbnkgdW51c2VkIGlucHV0IHRoYXQgd2FzIHByb3ZpZGVkIGJ5IHRoZSBsYXN0IGluKCkgY2FsbC4gIFRoZQ0KLSAgIHJldHVybiB2YWx1ZXMgb2YgaW5mbGF0ZUJhY2soKSBjYW4gYmUgWl9TVFJFQU1fRU5EIG9uIHN1Y2Nlc3MsIFpfQlVGX0VSUk9SDQotICAgaWYgaW4oKSBvciBvdXQoKSByZXR1cm5lZCBhbiBlcnJvciwgWl9EQVRBX0VSUk9SIGlmIHRoZXJlIHdhcyBhIGZvcm1hdCBlcnJvcg0KLSAgIGluIHRoZSBkZWZsYXRlIHN0cmVhbSAoaW4gd2hpY2ggY2FzZSBzdHJtLT5tc2cgaXMgc2V0IHRvIGluZGljYXRlIHRoZSBuYXR1cmUNCi0gICBvZiB0aGUgZXJyb3IpLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHdhcyBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQuDQotICAgSW4gdGhlIGNhc2Ugb2YgWl9CVUZfRVJST1IsIGFuIGlucHV0IG9yIG91dHB1dCBlcnJvciBjYW4gYmUgZGlzdGluZ3Vpc2hlZA0KLSAgIHVzaW5nIHN0cm0tPm5leHRfaW4gd2hpY2ggd2lsbCBiZSBaX05VTEwgb25seSBpZiBpbigpIHJldHVybmVkIGFuIGVycm9yLiAgSWYNCi0gICBzdHJtLT5uZXh0X2luIGlzIG5vdCBaX05VTEwsIHRoZW4gdGhlIFpfQlVGX0VSUk9SIHdhcyBkdWUgdG8gb3V0KCkgcmV0dXJuaW5nDQotICAgbm9uLXplcm8uICAoaW4oKSB3aWxsIGFsd2F5cyBiZSBjYWxsZWQgYmVmb3JlIG91dCgpLCBzbyBzdHJtLT5uZXh0X2luIGlzDQotICAgYXNzdXJlZCB0byBiZSBkZWZpbmVkIGlmIG91dCgpIHJldHVybnMgbm9uLXplcm8uKSBOb3RlIHRoYXQgaW5mbGF0ZUJhY2soKQ0KLSAgIGNhbm5vdCByZXR1cm4gWl9PSy4NCi0qLw0KLQ0KLVpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUJhY2tFbmQgT0YoKHpfc3RyZWFtcCBzdHJtKSk7DQotLyoNCi0gICAgIEFsbCBtZW1vcnkgYWxsb2NhdGVkIGJ5IGluZmxhdGVCYWNrSW5pdCgpIGlzIGZyZWVkLg0KLQ0KLSAgICAgaW5mbGF0ZUJhY2tFbmQoKSByZXR1cm5zIFpfT0sgb24gc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbQ0KLSAgIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQuDQotKi8NCi0NCi1aRVhURVJOIHVMb25nIFpFWFBPUlQgemxpYkNvbXBpbGVGbGFncyBPRigodm9pZCkpOw0KLS8qIFJldHVybiBmbGFncyBpbmRpY2F0aW5nIGNvbXBpbGUtdGltZSBvcHRpb25zLg0KLQ0KLSAgICBUeXBlIHNpemVzLCB0d28gYml0cyBlYWNoLCAwMCA9IDE2IGJpdHMsIDAxID0gMzIsIDEwID0gNjQsIDExID0gb3RoZXI6DQotICAgICAxLjA6IHNpemUgb2YgdUludA0KLSAgICAgMy4yOiBzaXplIG9mIHVMb25nDQotICAgICA1LjQ6IHNpemUgb2Ygdm9pZHBmIChwb2ludGVyKQ0KLSAgICAgNy42OiBzaXplIG9mIHpfb2ZmX3QNCi0NCi0gICAgQ29tcGlsZXIsIGFzc2VtYmxlciwgYW5kIGRlYnVnIG9wdGlvbnM6DQotICAgICA4OiBERUJVRw0KLSAgICAgOTogQVNNViBvciBBU01JTkYgLS0gdXNlIEFTTSBjb2RlDQotICAgICAxMDogWkxJQl9XSU5BUEkgLS0gZXhwb3J0ZWQgZnVuY3Rpb25zIHVzZSB0aGUgV0lOQVBJIGNhbGxpbmcgY29udmVudGlvbg0KLSAgICAgMTE6IDAgKHJlc2VydmVkKQ0KLQ0KLSAgICBPbmUtdGltZSB0YWJsZSBidWlsZGluZyAoc21hbGxlciBjb2RlLCBidXQgbm90IHRocmVhZC1zYWZlIGlmIHRydWUpOg0KLSAgICAgMTI6IEJVSUxERklYRUQgLS0gYnVpbGQgc3RhdGljIGJsb2NrIGRlY29kaW5nIHRhYmxlcyB3aGVuIG5lZWRlZA0KLSAgICAgMTM6IERZTkFNSUNfQ1JDX1RBQkxFIC0tIGJ1aWxkIENSQyBjYWxjdWxhdGlvbiB0YWJsZXMgd2hlbiBuZWVkZWQNCi0gICAgIDE0LDE1OiAwIChyZXNlcnZlZCkNCi0NCi0gICAgTGlicmFyeSBjb250ZW50IChpbmRpY2F0ZXMgbWlzc2luZyBmdW5jdGlvbmFsaXR5KToNCi0gICAgIDE2OiBOT19HWkNPTVBSRVNTIC0tIGd6KiBmdW5jdGlvbnMgY2Fubm90IGNvbXByZXNzICh0byBhdm9pZCBsaW5raW5nDQotICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZsYXRlIGNvZGUgd2hlbiBub3QgbmVlZGVkKQ0KLSAgICAgMTc6IE5PX0daSVAgLS0gZGVmbGF0ZSBjYW4ndCB3cml0ZSBnemlwIHN0cmVhbXMsIGFuZCBpbmZsYXRlIGNhbid0IGRldGVjdA0KLSAgICAgICAgICAgICAgICAgICAgYW5kIGRlY29kZSBnemlwIHN0cmVhbXMgKHRvIGF2b2lkIGxpbmtpbmcgY3JjIGNvZGUpDQotICAgICAxOC0xOTogMCAocmVzZXJ2ZWQpDQotDQotICAgIE9wZXJhdGlvbiB2YXJpYXRpb25zIChjaGFuZ2VzIGluIGxpYnJhcnkgZnVuY3Rpb25hbGl0eSk6DQotICAgICAyMDogUEtaSVBfQlVHX1dPUktBUk9VTkQgLS0gc2xpZ2h0bHkgbW9yZSBwZXJtaXNzaXZlIGluZmxhdGUNCi0gICAgIDIxOiBGQVNURVNUIC0tIGRlZmxhdGUgYWxnb3JpdGhtIHdpdGggb25seSBvbmUsIGxvd2VzdCBjb21wcmVzc2lvbiBsZXZlbA0KLSAgICAgMjIsMjM6IDAgKHJlc2VydmVkKQ0KLQ0KLSAgICBUaGUgc3ByaW50ZiB2YXJpYW50IHVzZWQgYnkgZ3pwcmludGYgKHplcm8gaXMgYmVzdCk6DQotICAgICAyNDogMCA9IHZzKiwgMSA9IHMqIC0tIDEgbWVhbnMgbGltaXRlZCB0byAyMCBhcmd1bWVudHMgYWZ0ZXIgdGhlIGZvcm1hdA0KLSAgICAgMjU6IDAgPSAqbnByaW50ZiwgMSA9ICpwcmludGYgLS0gMSBtZWFucyBnenByaW50ZigpIG5vdCBzZWN1cmUhDQotICAgICAyNjogMCA9IHJldHVybnMgdmFsdWUsIDEgPSB2b2lkIC0tIDEgbWVhbnMgaW5mZXJyZWQgc3RyaW5nIGxlbmd0aCByZXR1cm5lZA0KLQ0KLSAgICBSZW1haW5kZXI6DQotICAgICAyNy0zMTogMCAocmVzZXJ2ZWQpDQotICovDQotDQotI2lmbmRlZiBaX1NPTE8NCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiB1dGlsaXR5IGZ1bmN0aW9ucyAqLw0KLQ0KLS8qDQotICAgICBUaGUgZm9sbG93aW5nIHV0aWxpdHkgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2YgdGhlIGJhc2ljDQotICAgc3RyZWFtLW9yaWVudGVkIGZ1bmN0aW9ucy4gIFRvIHNpbXBsaWZ5IHRoZSBpbnRlcmZhY2UsIHNvbWUgZGVmYXVsdCBvcHRpb25zDQotICAgYXJlIGFzc3VtZWQgKGNvbXByZXNzaW9uIGxldmVsIGFuZCBtZW1vcnkgdXNhZ2UsIHN0YW5kYXJkIG1lbW9yeSBhbGxvY2F0aW9uDQotICAgZnVuY3Rpb25zKS4gIFRoZSBzb3VyY2UgY29kZSBvZiB0aGVzZSB1dGlsaXR5IGZ1bmN0aW9ucyBjYW4gYmUgbW9kaWZpZWQgaWYNCi0gICB5b3UgbmVlZCBzcGVjaWFsIG9wdGlvbnMuDQotKi8NCi0NCi1aRVhURVJOIGludCBaRVhQT1JUIGNvbXByZXNzIE9GKChCeXRlZiAqZGVzdCwgICB1TG9uZ2YgKmRlc3RMZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnl0ZWYgKnNvdXJjZSwgdUxvbmcgc291cmNlTGVuKSk7DQotLyoNCi0gICAgIENvbXByZXNzZXMgdGhlIHNvdXJjZSBidWZmZXIgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyLiAgc291cmNlTGVuIGlzDQotICAgdGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgYnVmZmVyLiAgVXBvbiBlbnRyeSwgZGVzdExlbiBpcyB0aGUgdG90YWwgc2l6ZQ0KLSAgIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIsIHdoaWNoIG11c3QgYmUgYXQgbGVhc3QgdGhlIHZhbHVlIHJldHVybmVkIGJ5DQotICAgY29tcHJlc3NCb3VuZChzb3VyY2VMZW4pLiAgVXBvbiBleGl0LCBkZXN0TGVuIGlzIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUNCi0gICBjb21wcmVzc2VkIGJ1ZmZlci4NCi0NCi0gICAgIGNvbXByZXNzIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90DQotICAgZW5vdWdoIG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0DQotICAgYnVmZmVyLg0KLSovDQotDQotWkVYVEVSTiBpbnQgWkVYUE9SVCBjb21wcmVzczIgT0YoKEJ5dGVmICpkZXN0LCAgIHVMb25nZiAqZGVzdExlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnl0ZWYgKnNvdXJjZSwgdUxvbmcgc291cmNlTGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwpKTsNCi0vKg0KLSAgICAgQ29tcHJlc3NlcyB0aGUgc291cmNlIGJ1ZmZlciBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuICBUaGUgbGV2ZWwNCi0gICBwYXJhbWV0ZXIgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gZGVmbGF0ZUluaXQuICBzb3VyY2VMZW4gaXMgdGhlIGJ5dGUNCi0gICBsZW5ndGggb2YgdGhlIHNvdXJjZSBidWZmZXIuICBVcG9uIGVudHJ5LCBkZXN0TGVuIGlzIHRoZSB0b3RhbCBzaXplIG9mIHRoZQ0KLSAgIGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBhdCBsZWFzdCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkNCi0gICBjb21wcmVzc0JvdW5kKHNvdXJjZUxlbikuICBVcG9uIGV4aXQsIGRlc3RMZW4gaXMgdGhlIGFjdHVhbCBzaXplIG9mIHRoZQ0KLSAgIGNvbXByZXNzZWQgYnVmZmVyLg0KLQ0KLSAgICAgY29tcHJlc3MyIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaA0KLSAgIG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciwNCi0gICBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgbGV2ZWwgcGFyYW1ldGVyIGlzIGludmFsaWQuDQotKi8NCi0NCi1aRVhURVJOIHVMb25nIFpFWFBPUlQgY29tcHJlc3NCb3VuZCBPRigodUxvbmcgc291cmNlTGVuKSk7DQotLyoNCi0gICAgIGNvbXByZXNzQm91bmQoKSByZXR1cm5zIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSBjb21wcmVzc2VkIHNpemUgYWZ0ZXINCi0gICBjb21wcmVzcygpIG9yIGNvbXByZXNzMigpIG9uIHNvdXJjZUxlbiBieXRlcy4gIEl0IHdvdWxkIGJlIHVzZWQgYmVmb3JlIGENCi0gICBjb21wcmVzcygpIG9yIGNvbXByZXNzMigpIGNhbGwgdG8gYWxsb2NhdGUgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4NCi0qLw0KLQ0KLVpFWFRFUk4gaW50IFpFWFBPUlQgdW5jb21wcmVzcyBPRigoQnl0ZWYgKmRlc3QsICAgdUxvbmdmICpkZXN0TGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnl0ZWYgKnNvdXJjZSwgdUxvbmcgc291cmNlTGVuKSk7DQotLyoNCi0gICAgIERlY29tcHJlc3NlcyB0aGUgc291cmNlIGJ1ZmZlciBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuICBzb3VyY2VMZW4gaXMNCi0gICB0aGUgYnl0ZSBsZW5ndGggb2YgdGhlIHNvdXJjZSBidWZmZXIuICBVcG9uIGVudHJ5LCBkZXN0TGVuIGlzIHRoZSB0b3RhbCBzaXplDQotICAgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgZW50aXJlDQotICAgdW5jb21wcmVzc2VkIGRhdGEuICAoVGhlIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIG11c3QgaGF2ZSBiZWVuIHNhdmVkDQotICAgcHJldmlvdXNseSBieSB0aGUgY29tcHJlc3NvciBhbmQgdHJhbnNtaXR0ZWQgdG8gdGhlIGRlY29tcHJlc3NvciBieSBzb21lDQotICAgbWVjaGFuaXNtIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgY29tcHJlc3Npb24gbGlicmFyeS4pIFVwb24gZXhpdCwgZGVzdExlbg0KLSAgIGlzIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGJ1ZmZlci4NCi0NCi0gICAgIHVuY29tcHJlc3MgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QNCi0gICBlbm91Z2ggbWVtb3J5LCBaX0JVRl9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQNCi0gICBidWZmZXIsIG9yIFpfREFUQV9FUlJPUiBpZiB0aGUgaW5wdXQgZGF0YSB3YXMgY29ycnVwdGVkIG9yIGluY29tcGxldGUuICBJbg0KLSAgIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSwgdW5jb21wcmVzcygpIHdpbGwgZmlsbCB0aGUgb3V0cHV0DQotICAgYnVmZmVyIHdpdGggdGhlIHVuY29tcHJlc3NlZCBkYXRhIHVwIHRvIHRoYXQgcG9pbnQuDQotKi8NCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBnemlwIGZpbGUgYWNjZXNzIGZ1bmN0aW9ucyAqLw0KLQ0KLS8qDQotICAgICBUaGlzIGxpYnJhcnkgc3VwcG9ydHMgcmVhZGluZyBhbmQgd3JpdGluZyBmaWxlcyBpbiBnemlwICguZ3opIGZvcm1hdCB3aXRoDQotICAgYW4gaW50ZXJmYWNlIHNpbWlsYXIgdG8gdGhhdCBvZiBzdGRpbywgdXNpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IHN0YXJ0IHdpdGgNCi0gICAiZ3oiLiAgVGhlIGd6aXAgZm9ybWF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSB6bGliIGZvcm1hdC4gIGd6aXAgaXMgYSBnemlwDQotICAgd3JhcHBlciwgZG9jdW1lbnRlZCBpbiBSRkMgMTk1Miwgd3JhcHBlZCBhcm91bmQgYSBkZWZsYXRlIHN0cmVhbS4NCi0qLw0KLQ0KLXR5cGVkZWYgc3RydWN0IGd6RmlsZV9zICpnekZpbGU7ICAgIC8qIHNlbWktb3BhcXVlIGd6aXAgZmlsZSBkZXNjcmlwdG9yICovDQotDQotLyoNCi1aRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6b3BlbiBPRigoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkpOw0KLQ0KLSAgICAgT3BlbnMgYSBnemlwICguZ3opIGZpbGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZy4gIFRoZSBtb2RlIHBhcmFtZXRlciBpcyBhcw0KLSAgIGluIGZvcGVuICgicmIiIG9yICJ3YiIpIGJ1dCBjYW4gYWxzbyBpbmNsdWRlIGEgY29tcHJlc3Npb24gbGV2ZWwgKCJ3YjkiKSBvcg0KLSAgIGEgc3RyYXRlZ3k6ICdmJyBmb3IgZmlsdGVyZWQgZGF0YSBhcyBpbiAid2I2ZiIsICdoJyBmb3IgSHVmZm1hbi1vbmx5DQotICAgY29tcHJlc3Npb24gYXMgaW4gIndiMWgiLCAnUicgZm9yIHJ1bi1sZW5ndGggZW5jb2RpbmcgYXMgaW4gIndiMVIiLCBvciAnRicNCi0gICBmb3IgZml4ZWQgY29kZSBjb21wcmVzc2lvbiBhcyBpbiAid2I5RiIuICAoU2VlIHRoZSBkZXNjcmlwdGlvbiBvZg0KLSAgIGRlZmxhdGVJbml0MiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RyYXRlZ3kgcGFyYW1ldGVyLikgICdUJyB3aWxsDQotICAgcmVxdWVzdCB0cmFuc3BhcmVudCB3cml0aW5nIG9yIGFwcGVuZGluZyB3aXRoIG5vIGNvbXByZXNzaW9uIGFuZCBub3QgdXNpbmcNCi0gICB0aGUgZ3ppcCBmb3JtYXQuDQotDQotICAgICAiYSIgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiAidyIgdG8gcmVxdWVzdCB0aGF0IHRoZSBnemlwIHN0cmVhbSB0aGF0IHdpbGwNCi0gICBiZSB3cml0dGVuIGJlIGFwcGVuZGVkIHRvIHRoZSBmaWxlLiAgIisiIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yLCBzaW5jZQ0KLSAgIHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gdGhlIHNhbWUgZ3ppcCBmaWxlIGlzIG5vdCBzdXBwb3J0ZWQuICBUaGUgYWRkaXRpb24gb2YNCi0gICAieCIgd2hlbiB3cml0aW5nIHdpbGwgY3JlYXRlIHRoZSBmaWxlIGV4Y2x1c2l2ZWx5LCB3aGljaCBmYWlscyBpZiB0aGUgZmlsZQ0KLSAgIGFscmVhZHkgZXhpc3RzLiAgT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgaXQsIHRoZSBhZGRpdGlvbiBvZiAiZSIgd2hlbg0KLSAgIHJlYWRpbmcgb3Igd3JpdGluZyB3aWxsIHNldCB0aGUgZmxhZyB0byBjbG9zZSB0aGUgZmlsZSBvbiBhbiBleGVjdmUoKSBjYWxsLg0KLQ0KLSAgICAgVGhlc2UgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIGd6aXAsIHdpbGwgcmVhZCBhbmQgZGVjb2RlIGEgc2VxdWVuY2Ugb2YgZ3ppcA0KLSAgIHN0cmVhbXMgaW4gYSBmaWxlLiAgVGhlIGFwcGVuZCBmdW5jdGlvbiBvZiBnem9wZW4oKSBjYW4gYmUgdXNlZCB0byBjcmVhdGUNCi0gICBzdWNoIGEgZmlsZS4gIChBbHNvIHNlZSBnemZsdXNoKCkgZm9yIGFub3RoZXIgd2F5IHRvIGRvIHRoaXMuKSAgV2hlbg0KLSAgIGFwcGVuZGluZywgZ3pvcGVuIGRvZXMgbm90IHRlc3Qgd2hldGhlciB0aGUgZmlsZSBiZWdpbnMgd2l0aCBhIGd6aXAgc3RyZWFtLA0KLSAgIG5vciBkb2VzIGl0IGxvb2sgZm9yIHRoZSBlbmQgb2YgdGhlIGd6aXAgc3RyZWFtcyB0byBiZWdpbiBhcHBlbmRpbmcuICBnem9wZW4NCi0gICB3aWxsIHNpbXBseSBhcHBlbmQgYSBnemlwIHN0cmVhbSB0byB0aGUgZXhpc3RpbmcgZmlsZS4NCi0NCi0gICAgIGd6b3BlbiBjYW4gYmUgdXNlZCB0byByZWFkIGEgZmlsZSB3aGljaCBpcyBub3QgaW4gZ3ppcCBmb3JtYXQ7IGluIHRoaXMNCi0gICBjYXNlIGd6cmVhZCB3aWxsIGRpcmVjdGx5IHJlYWQgZnJvbSB0aGUgZmlsZSB3aXRob3V0IGRlY29tcHJlc3Npb24uICBXaGVuDQotICAgcmVhZGluZywgdGhpcyB3aWxsIGJlIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkgYnkgbG9va2luZyBmb3IgdGhlIG1hZ2ljIHR3by0NCi0gICBieXRlIGd6aXAgaGVhZGVyLg0KLQ0KLSAgICAgZ3pvcGVuIHJldHVybnMgTlVMTCBpZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgb3BlbmVkLCBpZiB0aGVyZSB3YXMNCi0gICBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGFsbG9jYXRlIHRoZSBnekZpbGUgc3RhdGUsIG9yIGlmIGFuIGludmFsaWQgbW9kZSB3YXMNCi0gICBzcGVjaWZpZWQgKGFuICdyJywgJ3cnLCBvciAnYScgd2FzIG5vdCBwcm92aWRlZCwgb3IgJysnIHdhcyBwcm92aWRlZCkuDQotICAgZXJybm8gY2FuIGJlIGNoZWNrZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZWFzb24gZ3pvcGVuIGZhaWxlZCB3YXMgdGhhdCB0aGUNCi0gICBmaWxlIGNvdWxkIG5vdCBiZSBvcGVuZWQuDQotKi8NCi0NCi1aRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6ZG9wZW4gT0YoKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSkpOw0KLS8qDQotICAgICBnemRvcGVuIGFzc29jaWF0ZXMgYSBnekZpbGUgd2l0aCB0aGUgZmlsZSBkZXNjcmlwdG9yIGZkLiAgRmlsZSBkZXNjcmlwdG9ycw0KLSAgIGFyZSBvYnRhaW5lZCBmcm9tIGNhbGxzIGxpa2Ugb3BlbiwgZHVwLCBjcmVhdCwgcGlwZSBvciBmaWxlbm8gKGlmIHRoZSBmaWxlDQotICAgaGFzIGJlZW4gcHJldmlvdXNseSBvcGVuZWQgd2l0aCBmb3BlbikuICBUaGUgbW9kZSBwYXJhbWV0ZXIgaXMgYXMgaW4gZ3pvcGVuLg0KLQ0KLSAgICAgVGhlIG5leHQgY2FsbCBvZiBnemNsb3NlIG9uIHRoZSByZXR1cm5lZCBnekZpbGUgd2lsbCBhbHNvIGNsb3NlIHRoZSBmaWxlDQotICAgZGVzY3JpcHRvciBmZCwganVzdCBsaWtlIGZjbG9zZShmZG9wZW4oZmQsIG1vZGUpKSBjbG9zZXMgdGhlIGZpbGUgZGVzY3JpcHRvcg0KLSAgIGZkLiAgSWYgeW91IHdhbnQgdG8ga2VlcCBmZCBvcGVuLCB1c2UgZmQgPSBkdXAoZmRfa2VlcCk7IGd6ID0gZ3pkb3BlbihmZCwNCi0gICBtb2RlKTsuICBUaGUgZHVwbGljYXRlZCBkZXNjcmlwdG9yIHNob3VsZCBiZSBzYXZlZCB0byBhdm9pZCBhIGxlYWssIHNpbmNlDQotICAgZ3pkb3BlbiBkb2VzIG5vdCBjbG9zZSBmZCBpZiBpdCBmYWlscy4gIElmIHlvdSBhcmUgdXNpbmcgZmlsZW5vKCkgdG8gZ2V0IHRoZQ0KLSAgIGZpbGUgZGVzY3JpcHRvciBmcm9tIGEgRklMRSAqLCB0aGVuIHlvdSB3aWxsIGhhdmUgdG8gdXNlIGR1cCgpIHRvIGF2b2lkDQotICAgZG91YmxlLWNsb3NlKClpbmcgdGhlIGZpbGUgZGVzY3JpcHRvci4gIEJvdGggZ3pjbG9zZSgpIGFuZCBmY2xvc2UoKSB3aWxsDQotICAgY2xvc2UgdGhlIGFzc29jaWF0ZWQgZmlsZSBkZXNjcmlwdG9yLCBzbyB0aGV5IG5lZWQgdG8gaGF2ZSBkaWZmZXJlbnQgZmlsZQ0KLSAgIGRlc2NyaXB0b3JzLg0KLQ0KLSAgICAgZ3pkb3BlbiByZXR1cm5zIE5VTEwgaWYgdGhlcmUgd2FzIGluc3VmZmljaWVudCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlDQotICAgZ3pGaWxlIHN0YXRlLCBpZiBhbiBpbnZhbGlkIG1vZGUgd2FzIHNwZWNpZmllZCAoYW4gJ3InLCAndycsIG9yICdhJyB3YXMgbm90DQotICAgcHJvdmlkZWQsIG9yICcrJyB3YXMgcHJvdmlkZWQpLCBvciBpZiBmZCBpcyAtMS4gIFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgbm90DQotICAgdXNlZCB1bnRpbCB0aGUgbmV4dCBneiogcmVhZCwgd3JpdGUsIHNlZWssIG9yIGNsb3NlIG9wZXJhdGlvbiwgc28gZ3pkb3Blbg0KLSAgIHdpbGwgbm90IGRldGVjdCBpZiBmZCBpcyBpbnZhbGlkICh1bmxlc3MgZmQgaXMgLTEpLg0KLSovDQotDQotWkVYVEVSTiBpbnQgWkVYUE9SVCBnemJ1ZmZlciBPRigoZ3pGaWxlIGZpbGUsIHVuc2lnbmVkIHNpemUpKTsNCi0vKg0KLSAgICAgU2V0IHRoZSBpbnRlcm5hbCBidWZmZXIgc2l6ZSB1c2VkIGJ5IHRoaXMgbGlicmFyeSdzIGZ1bmN0aW9ucy4gIFRoZQ0KLSAgIGRlZmF1bHQgYnVmZmVyIHNpemUgaXMgODE5MiBieXRlcy4gIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWZ0ZXINCi0gICBnem9wZW4oKSBvciBnemRvcGVuKCksIGFuZCBiZWZvcmUgYW55IG90aGVyIGNhbGxzIHRoYXQgcmVhZCBvciB3cml0ZSB0aGUNCi0gICBmaWxlLiAgVGhlIGJ1ZmZlciBtZW1vcnkgYWxsb2NhdGlvbiBpcyBhbHdheXMgZGVmZXJyZWQgdG8gdGhlIGZpcnN0IHJlYWQgb3INCi0gICB3cml0ZS4gIFR3byBidWZmZXJzIGFyZSBhbGxvY2F0ZWQsIGVpdGhlciBib3RoIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZSB3aGVuDQotICAgd3JpdGluZywgb3Igb25lIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZSBhbmQgdGhlIG90aGVyIHR3aWNlIHRoYXQgc2l6ZSB3aGVuDQotICAgcmVhZGluZy4gIEEgbGFyZ2VyIGJ1ZmZlciBzaXplIG9mLCBmb3IgZXhhbXBsZSwgNjRLIG9yIDEyOEsgYnl0ZXMgd2lsbA0KLSAgIG5vdGljZWFibHkgaW5jcmVhc2UgdGhlIHNwZWVkIG9mIGRlY29tcHJlc3Npb24gKHJlYWRpbmcpLg0KLQ0KLSAgICAgVGhlIG5ldyBidWZmZXIgc2l6ZSBhbHNvIGFmZmVjdHMgdGhlIG1heGltdW0gbGVuZ3RoIGZvciBnenByaW50ZigpLg0KLQ0KLSAgICAgZ3pidWZmZXIoKSByZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgLTEgb24gZmFpbHVyZSwgc3VjaCBhcyBiZWluZyBjYWxsZWQNCi0gICB0b28gbGF0ZS4NCi0qLw0KLQ0KLVpFWFRFUk4gaW50IFpFWFBPUlQgZ3pzZXRwYXJhbXMgT0YoKGd6RmlsZSBmaWxlLCBpbnQgbGV2ZWwsIGludCBzdHJhdGVneSkpOw0KLS8qDQotICAgICBEeW5hbWljYWxseSB1cGRhdGUgdGhlIGNvbXByZXNzaW9uIGxldmVsIG9yIHN0cmF0ZWd5LiAgU2VlIHRoZSBkZXNjcmlwdGlvbg0KLSAgIG9mIGRlZmxhdGVJbml0MiBmb3IgdGhlIG1lYW5pbmcgb2YgdGhlc2UgcGFyYW1ldGVycy4NCi0NCi0gICAgIGd6c2V0cGFyYW1zIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgZmlsZSB3YXMgbm90DQotICAgb3BlbmVkIGZvciB3cml0aW5nLg0KLSovDQotDQotWkVYVEVSTiBpbnQgWkVYUE9SVCBnenJlYWQgT0YoKGd6RmlsZSBmaWxlLCB2b2lkcCBidWYsIHVuc2lnbmVkIGxlbikpOw0KLS8qDQotICAgICBSZWFkcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUuICBJZg0KLSAgIHRoZSBpbnB1dCBmaWxlIGlzIG5vdCBpbiBnemlwIGZvcm1hdCwgZ3pyZWFkIGNvcGllcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mDQotICAgYnl0ZXMgaW50byB0aGUgYnVmZmVyIGRpcmVjdGx5IGZyb20gdGhlIGZpbGUuDQotDQotICAgICBBZnRlciByZWFjaGluZyB0aGUgZW5kIG9mIGEgZ3ppcCBzdHJlYW0gaW4gdGhlIGlucHV0LCBnenJlYWQgd2lsbCBjb250aW51ZQ0KLSAgIHRvIHJlYWQsIGxvb2tpbmcgZm9yIGFub3RoZXIgZ3ppcCBzdHJlYW0uICBBbnkgbnVtYmVyIG9mIGd6aXAgc3RyZWFtcyBtYXkgYmUNCi0gICBjb25jYXRlbmF0ZWQgaW4gdGhlIGlucHV0IGZpbGUsIGFuZCB3aWxsIGFsbCBiZSBkZWNvbXByZXNzZWQgYnkgZ3pyZWFkKCkuDQotICAgSWYgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBnemlwIHN0cmVhbSBpcyBlbmNvdW50ZXJlZCBhZnRlciBhIGd6aXAgc3RyZWFtLA0KLSAgIHRoYXQgcmVtYWluaW5nIHRyYWlsaW5nIGdhcmJhZ2UgaXMgaWdub3JlZCAoYW5kIG5vIGVycm9yIGlzIHJldHVybmVkKS4NCi0NCi0gICAgIGd6cmVhZCBjYW4gYmUgdXNlZCB0byByZWFkIGEgZ3ppcCBmaWxlIHRoYXQgaXMgYmVpbmcgY29uY3VycmVudGx5IHdyaXR0ZW4uDQotICAgVXBvbiByZWFjaGluZyB0aGUgZW5kIG9mIHRoZSBpbnB1dCwgZ3pyZWFkIHdpbGwgcmV0dXJuIHdpdGggdGhlIGF2YWlsYWJsZQ0KLSAgIGRhdGEuICBJZiB0aGUgZXJyb3IgY29kZSByZXR1cm5lZCBieSBnemVycm9yIGlzIFpfT0sgb3IgWl9CVUZfRVJST1IsIHRoZW4NCi0gICBnemNsZWFyZXJyIGNhbiBiZSB1c2VkIHRvIGNsZWFyIHRoZSBlbmQgb2YgZmlsZSBpbmRpY2F0b3IgaW4gb3JkZXIgdG8gcGVybWl0DQotICAgZ3pyZWFkIHRvIGJlIHRyaWVkIGFnYWluLiAgWl9PSyBpbmRpY2F0ZXMgdGhhdCBhIGd6aXAgc3RyZWFtIHdhcyBjb21wbGV0ZWQNCi0gICBvbiB0aGUgbGFzdCBnenJlYWQuICBaX0JVRl9FUlJPUiBpbmRpY2F0ZXMgdGhhdCB0aGUgaW5wdXQgZmlsZSBlbmRlZCBpbiB0aGUNCi0gICBtaWRkbGUgb2YgYSBnemlwIHN0cmVhbS4gIE5vdGUgdGhhdCBnenJlYWQgZG9lcyBub3QgcmV0dXJuIC0xIGluIHRoZSBldmVudA0KLSAgIG9mIGFuIGluY29tcGxldGUgZ3ppcCBzdHJlYW0uICBUaGlzIGVycm9yIGlzIGRlZmVycmVkIHVudGlsIGd6Y2xvc2UoKSwgd2hpY2gNCi0gICB3aWxsIHJldHVybiBaX0JVRl9FUlJPUiBpZiB0aGUgbGFzdCBnenJlYWQgZW5kZWQgaW4gdGhlIG1pZGRsZSBvZiBhIGd6aXANCi0gICBzdHJlYW0uICBBbHRlcm5hdGl2ZWx5LCBnemVycm9yIGNhbiBiZSB1c2VkIGJlZm9yZSBnemNsb3NlIHRvIGRldGVjdCB0aGlzDQotICAgY2FzZS4NCi0NCi0gICAgIGd6cmVhZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHJlYWQsIGxlc3MgdGhhbg0KLSAgIGxlbiBmb3IgZW5kIG9mIGZpbGUsIG9yIC0xIGZvciBlcnJvci4NCi0qLw0KLQ0KLVpFWFRFUk4gaW50IFpFWFBPUlQgZ3p3cml0ZSBPRigoZ3pGaWxlIGZpbGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkcGMgYnVmLCB1bnNpZ25lZCBsZW4pKTsNCi0vKg0KLSAgICAgV3JpdGVzIHRoZSBnaXZlbiBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4NCi0gICBnendyaXRlIHJldHVybnMgdGhlIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgd3JpdHRlbiBvciAwIGluIGNhc2Ugb2YNCi0gICBlcnJvci4NCi0qLw0KLQ0KLVpFWFRFUk4gaW50IFpFWFBPUlRWQSBnenByaW50ZiBaX0FSRygoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7DQotLyoNCi0gICAgIENvbnZlcnRzLCBmb3JtYXRzLCBhbmQgd3JpdGVzIHRoZSBhcmd1bWVudHMgdG8gdGhlIGNvbXByZXNzZWQgZmlsZSB1bmRlcg0KLSAgIGNvbnRyb2wgb2YgdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGluIGZwcmludGYuICBnenByaW50ZiByZXR1cm5zIHRoZSBudW1iZXIgb2YNCi0gICB1bmNvbXByZXNzZWQgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbiwgb3IgMCBpbiBjYXNlIG9mIGVycm9yLiAgVGhlIG51bWJlciBvZg0KLSAgIHVuY29tcHJlc3NlZCBieXRlcyB3cml0dGVuIGlzIGxpbWl0ZWQgdG8gODE5MSwgb3Igb25lIGxlc3MgdGhhbiB0aGUgYnVmZmVyDQotICAgc2l6ZSBnaXZlbiB0byBnemJ1ZmZlcigpLiAgVGhlIGNhbGxlciBzaG91bGQgYXNzdXJlIHRoYXQgdGhpcyBsaW1pdCBpcyBub3QNCi0gICBleGNlZWRlZC4gIElmIGl0IGlzIGV4Y2VlZGVkLCB0aGVuIGd6cHJpbnRmKCkgd2lsbCByZXR1cm4gYW4gZXJyb3IgKDApIHdpdGgNCi0gICBub3RoaW5nIHdyaXR0ZW4uICBJbiB0aGlzIGNhc2UsIHRoZXJlIG1heSBhbHNvIGJlIGEgYnVmZmVyIG92ZXJmbG93IHdpdGgNCi0gICB1bnByZWRpY3RhYmxlIGNvbnNlcXVlbmNlcywgd2hpY2ggaXMgcG9zc2libGUgb25seSBpZiB6bGliIHdhcyBjb21waWxlZCB3aXRoDQotICAgdGhlIGluc2VjdXJlIGZ1bmN0aW9ucyBzcHJpbnRmKCkgb3IgdnNwcmludGYoKSBiZWNhdXNlIHRoZSBzZWN1cmUgc25wcmludGYoKQ0KLSAgIG9yIHZzbnByaW50ZigpIGZ1bmN0aW9ucyB3ZXJlIG5vdCBhdmFpbGFibGUuICBUaGlzIGNhbiBiZSBkZXRlcm1pbmVkIHVzaW5nDQotICAgemxpYkNvbXBpbGVGbGFncygpLg0KLSovDQotDQotWkVYVEVSTiBpbnQgWkVYUE9SVCBnenB1dHMgT0YoKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpzKSk7DQotLyoNCi0gICAgIFdyaXRlcyB0aGUgZ2l2ZW4gbnVsbC10ZXJtaW5hdGVkIHN0cmluZyB0byB0aGUgY29tcHJlc3NlZCBmaWxlLCBleGNsdWRpbmcNCi0gICB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIuDQotDQotICAgICBnenB1dHMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4NCi0qLw0KLQ0KLVpFWFRFUk4gY2hhciAqIFpFWFBPUlQgZ3pnZXRzIE9GKChnekZpbGUgZmlsZSwgY2hhciAqYnVmLCBpbnQgbGVuKSk7DQotLyoNCi0gICAgIFJlYWRzIGJ5dGVzIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZSB1bnRpbCBsZW4tMSBjaGFyYWN0ZXJzIGFyZSByZWFkLCBvciBhDQotICAgbmV3bGluZSBjaGFyYWN0ZXIgaXMgcmVhZCBhbmQgdHJhbnNmZXJyZWQgdG8gYnVmLCBvciBhbiBlbmQtb2YtZmlsZQ0KLSAgIGNvbmRpdGlvbiBpcyBlbmNvdW50ZXJlZC4gIElmIGFueSBjaGFyYWN0ZXJzIGFyZSByZWFkIG9yIGlmIGxlbiA9PSAxLCB0aGUNCi0gICBzdHJpbmcgaXMgdGVybWluYXRlZCB3aXRoIGEgbnVsbCBjaGFyYWN0ZXIuICBJZiBubyBjaGFyYWN0ZXJzIGFyZSByZWFkIGR1ZQ0KLSAgIHRvIGFuIGVuZC1vZi1maWxlIG9yIGxlbiA8IDEsIHRoZW4gdGhlIGJ1ZmZlciBpcyBsZWZ0IHVudG91Y2hlZC4NCi0NCi0gICAgIGd6Z2V0cyByZXR1cm5zIGJ1ZiB3aGljaCBpcyBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcsIG9yIGl0IHJldHVybnMgTlVMTA0KLSAgIGZvciBlbmQtb2YtZmlsZSBvciBpbiBjYXNlIG9mIGVycm9yLiAgSWYgdGhlcmUgd2FzIGFuIGVycm9yLCB0aGUgY29udGVudHMgYXQNCi0gICBidWYgYXJlIGluZGV0ZXJtaW5hdGUuDQotKi8NCi0NCi1aRVhURVJOIGludCBaRVhQT1JUIGd6cHV0YyBPRigoZ3pGaWxlIGZpbGUsIGludCBjKSk7DQotLyoNCi0gICAgIFdyaXRlcyBjLCBjb252ZXJ0ZWQgdG8gYW4gdW5zaWduZWQgY2hhciwgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLiAgZ3pwdXRjDQotICAgcmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgd3JpdHRlbiwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4NCi0qLw0KLQ0KLVpFWFRFUk4gaW50IFpFWFBPUlQgZ3pnZXRjIE9GKChnekZpbGUgZmlsZSkpOw0KLS8qDQotICAgICBSZWFkcyBvbmUgYnl0ZSBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUuICBnemdldGMgcmV0dXJucyB0aGlzIGJ5dGUgb3IgLTENCi0gICBpbiBjYXNlIG9mIGVuZCBvZiBmaWxlIG9yIGVycm9yLiAgVGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIG1hY3JvIGZvciBzcGVlZC4NCi0gICBBcyBzdWNoLCBpdCBkb2VzIG5vdCBkbyBhbGwgb2YgdGhlIGNoZWNraW5nIHRoZSBvdGhlciBmdW5jdGlvbnMgZG8uICBJLmUuDQotICAgaXQgZG9lcyBub3QgY2hlY2sgdG8gc2VlIGlmIGZpbGUgaXMgTlVMTCwgbm9yIHdoZXRoZXIgdGhlIHN0cnVjdHVyZSBmaWxlDQotICAgcG9pbnRzIHRvIGhhcyBiZWVuIGNsb2JiZXJlZCBvciBub3QuDQotKi8NCi0NCi1aRVhURVJOIGludCBaRVhQT1JUIGd6dW5nZXRjIE9GKChpbnQgYywgZ3pGaWxlIGZpbGUpKTsNCi0vKg0KLSAgICAgUHVzaCBvbmUgY2hhcmFjdGVyIGJhY2sgb250byB0aGUgc3RyZWFtIHRvIGJlIHJlYWQgYXMgdGhlIGZpcnN0IGNoYXJhY3Rlcg0KLSAgIG9uIHRoZSBuZXh0IHJlYWQuICBBdCBsZWFzdCBvbmUgY2hhcmFjdGVyIG9mIHB1c2gtYmFjayBpcyBhbGxvd2VkLg0KLSAgIGd6dW5nZXRjKCkgcmV0dXJucyB0aGUgY2hhcmFjdGVyIHB1c2hlZCwgb3IgLTEgb24gZmFpbHVyZS4gIGd6dW5nZXRjKCkgd2lsbA0KLSAgIGZhaWwgaWYgYyBpcyAtMSwgYW5kIG1heSBmYWlsIGlmIGEgY2hhcmFjdGVyIGhhcyBiZWVuIHB1c2hlZCBidXQgbm90IHJlYWQNCi0gICB5ZXQuICBJZiBnenVuZ2V0YyBpcyB1c2VkIGltbWVkaWF0ZWx5IGFmdGVyIGd6b3BlbiBvciBnemRvcGVuLCBhdCBsZWFzdCB0aGUNCi0gICBvdXRwdXQgYnVmZmVyIHNpemUgb2YgcHVzaGVkIGNoYXJhY3RlcnMgaXMgYWxsb3dlZC4gIChTZWUgZ3pidWZmZXIgYWJvdmUuKQ0KLSAgIFRoZSBwdXNoZWQgY2hhcmFjdGVyIHdpbGwgYmUgZGlzY2FyZGVkIGlmIHRoZSBzdHJlYW0gaXMgcmVwb3NpdGlvbmVkIHdpdGgNCi0gICBnenNlZWsoKSBvciBnenJld2luZCgpLg0KLSovDQotDQotWkVYVEVSTiBpbnQgWkVYUE9SVCBnemZsdXNoIE9GKChnekZpbGUgZmlsZSwgaW50IGZsdXNoKSk7DQotLyoNCi0gICAgIEZsdXNoZXMgYWxsIHBlbmRpbmcgb3V0cHV0IGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4gIFRoZSBwYXJhbWV0ZXIgZmx1c2gNCi0gICBpcyBhcyBpbiB0aGUgZGVmbGF0ZSgpIGZ1bmN0aW9uLiAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgemxpYiBlcnJvciBudW1iZXINCi0gICAoc2VlIGZ1bmN0aW9uIGd6ZXJyb3IgYmVsb3cpLiAgZ3pmbHVzaCBpcyBvbmx5IHBlcm1pdHRlZCB3aGVuIHdyaXRpbmcuDQotDQotICAgICBJZiB0aGUgZmx1c2ggcGFyYW1ldGVyIGlzIFpfRklOSVNILCB0aGUgcmVtYWluaW5nIGRhdGEgaXMgd3JpdHRlbiBhbmQgdGhlDQotICAgZ3ppcCBzdHJlYW0gaXMgY29tcGxldGVkIGluIHRoZSBvdXRwdXQuICBJZiBnendyaXRlKCkgaXMgY2FsbGVkIGFnYWluLCBhIG5ldw0KLSAgIGd6aXAgc3RyZWFtIHdpbGwgYmUgc3RhcnRlZCBpbiB0aGUgb3V0cHV0LiAgZ3pyZWFkKCkgaXMgYWJsZSB0byByZWFkIHN1Y2gNCi0gICBjb25jYXRlbnRlZCBnemlwIHN0cmVhbXMuDQotDQotICAgICBnemZsdXNoIHNob3VsZCBiZSBjYWxsZWQgb25seSB3aGVuIHN0cmljdGx5IG5lY2Vzc2FyeSBiZWNhdXNlIGl0IHdpbGwNCi0gICBkZWdyYWRlIGNvbXByZXNzaW9uIGlmIGNhbGxlZCB0b28gb2Z0ZW4uDQotKi8NCi0NCi0vKg0KLVpFWFRFUk4gel9vZmZfdCBaRVhQT1JUIGd6c2VlayBPRigoZ3pGaWxlIGZpbGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6X29mZl90IG9mZnNldCwgaW50IHdoZW5jZSkpOw0KLQ0KLSAgICAgU2V0cyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gZm9yIHRoZSBuZXh0IGd6cmVhZCBvciBnendyaXRlIG9uIHRoZSBnaXZlbg0KLSAgIGNvbXByZXNzZWQgZmlsZS4gIFRoZSBvZmZzZXQgcmVwcmVzZW50cyBhIG51bWJlciBvZiBieXRlcyBpbiB0aGUNCi0gICB1bmNvbXByZXNzZWQgZGF0YSBzdHJlYW0uICBUaGUgd2hlbmNlIHBhcmFtZXRlciBpcyBkZWZpbmVkIGFzIGluIGxzZWVrKDIpOw0KLSAgIHRoZSB2YWx1ZSBTRUVLX0VORCBpcyBub3Qgc3VwcG9ydGVkLg0KLQ0KLSAgICAgSWYgdGhlIGZpbGUgaXMgb3BlbmVkIGZvciByZWFkaW5nLCB0aGlzIGZ1bmN0aW9uIGlzIGVtdWxhdGVkIGJ1dCBjYW4gYmUNCi0gICBleHRyZW1lbHkgc2xvdy4gIElmIHRoZSBmaWxlIGlzIG9wZW5lZCBmb3Igd3JpdGluZywgb25seSBmb3J3YXJkIHNlZWtzIGFyZQ0KLSAgIHN1cHBvcnRlZDsgZ3pzZWVrIHRoZW4gY29tcHJlc3NlcyBhIHNlcXVlbmNlIG9mIHplcm9lcyB1cCB0byB0aGUgbmV3DQotICAgc3RhcnRpbmcgcG9zaXRpb24uDQotDQotICAgICBnenNlZWsgcmV0dXJucyB0aGUgcmVzdWx0aW5nIG9mZnNldCBsb2NhdGlvbiBhcyBtZWFzdXJlZCBpbiBieXRlcyBmcm9tDQotICAgdGhlIGJlZ2lubmluZyBvZiB0aGUgdW5jb21wcmVzc2VkIHN0cmVhbSwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvciwgaW4NCi0gICBwYXJ0aWN1bGFyIGlmIHRoZSBmaWxlIGlzIG9wZW5lZCBmb3Igd3JpdGluZyBhbmQgdGhlIG5ldyBzdGFydGluZyBwb3NpdGlvbg0KLSAgIHdvdWxkIGJlIGJlZm9yZSB0aGUgY3VycmVudCBwb3NpdGlvbi4NCi0qLw0KLQ0KLVpFWFRFUk4gaW50IFpFWFBPUlQgICAgZ3pyZXdpbmQgT0YoKGd6RmlsZSBmaWxlKSk7DQotLyoNCi0gICAgIFJld2luZHMgdGhlIGdpdmVuIGZpbGUuIFRoaXMgZnVuY3Rpb24gaXMgc3VwcG9ydGVkIG9ubHkgZm9yIHJlYWRpbmcuDQotDQotICAgICBnenJld2luZChmaWxlKSBpcyBlcXVpdmFsZW50IHRvIChpbnQpZ3pzZWVrKGZpbGUsIDBMLCBTRUVLX1NFVCkNCi0qLw0KLQ0KLS8qDQotWkVYVEVSTiB6X29mZl90IFpFWFBPUlQgICAgZ3p0ZWxsIE9GKChnekZpbGUgZmlsZSkpOw0KLQ0KLSAgICAgUmV0dXJucyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gZm9yIHRoZSBuZXh0IGd6cmVhZCBvciBnendyaXRlIG9uIHRoZSBnaXZlbg0KLSAgIGNvbXByZXNzZWQgZmlsZS4gIFRoaXMgcG9zaXRpb24gcmVwcmVzZW50cyBhIG51bWJlciBvZiBieXRlcyBpbiB0aGUNCi0gICB1bmNvbXByZXNzZWQgZGF0YSBzdHJlYW0sIGFuZCBpcyB6ZXJvIHdoZW4gc3RhcnRpbmcsIGV2ZW4gaWYgYXBwZW5kaW5nIG9yDQotICAgcmVhZGluZyBhIGd6aXAgc3RyZWFtIGZyb20gdGhlIG1pZGRsZSBvZiBhIGZpbGUgdXNpbmcgZ3pkb3BlbigpLg0KLQ0KLSAgICAgZ3p0ZWxsKGZpbGUpIGlzIGVxdWl2YWxlbnQgdG8gZ3pzZWVrKGZpbGUsIDBMLCBTRUVLX0NVUikNCi0qLw0KLQ0KLS8qDQotWkVYVEVSTiB6X29mZl90IFpFWFBPUlQgZ3pvZmZzZXQgT0YoKGd6RmlsZSBmaWxlKSk7DQotDQotICAgICBSZXR1cm5zIHRoZSBjdXJyZW50IG9mZnNldCBpbiB0aGUgZmlsZSBiZWluZyByZWFkIG9yIHdyaXR0ZW4uICBUaGlzIG9mZnNldA0KLSAgIGluY2x1ZGVzIHRoZSBjb3VudCBvZiBieXRlcyB0aGF0IHByZWNlZGUgdGhlIGd6aXAgc3RyZWFtLCBmb3IgZXhhbXBsZSB3aGVuDQotICAgYXBwZW5kaW5nIG9yIHdoZW4gdXNpbmcgZ3pkb3BlbigpIGZvciByZWFkaW5nLiAgV2hlbiByZWFkaW5nLCB0aGUgb2Zmc2V0DQotICAgZG9lcyBub3QgaW5jbHVkZSBhcyB5ZXQgdW51c2VkIGJ1ZmZlcmVkIGlucHV0LiAgVGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZA0KLSAgIGZvciBhIHByb2dyZXNzIGluZGljYXRvci4gIE9uIGVycm9yLCBnem9mZnNldCgpIHJldHVybnMgLTEuDQotKi8NCi0NCi1aRVhURVJOIGludCBaRVhQT1JUIGd6ZW9mIE9GKChnekZpbGUgZmlsZSkpOw0KLS8qDQotICAgICBSZXR1cm5zIHRydWUgKDEpIGlmIHRoZSBlbmQtb2YtZmlsZSBpbmRpY2F0b3IgaGFzIGJlZW4gc2V0IHdoaWxlIHJlYWRpbmcsDQotICAgZmFsc2UgKDApIG90aGVyd2lzZS4gIE5vdGUgdGhhdCB0aGUgZW5kLW9mLWZpbGUgaW5kaWNhdG9yIGlzIHNldCBvbmx5IGlmIHRoZQ0KLSAgIHJlYWQgdHJpZWQgdG8gZ28gcGFzdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCwgYnV0IGNhbWUgdXAgc2hvcnQuICBUaGVyZWZvcmUsDQotICAganVzdCBsaWtlIGZlb2YoKSwgZ3plb2YoKSBtYXkgcmV0dXJuIGZhbHNlIGV2ZW4gaWYgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIHRvDQotICAgcmVhZCwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIGxhc3QgcmVhZCByZXF1ZXN0IHdhcyBmb3IgdGhlIGV4YWN0IG51bWJlciBvZg0KLSAgIGJ5dGVzIHJlbWFpbmluZyBpbiB0aGUgaW5wdXQgZmlsZS4gIFRoaXMgd2lsbCBoYXBwZW4gaWYgdGhlIGlucHV0IGZpbGUgc2l6ZQ0KLSAgIGlzIGFuIGV4YWN0IG11bHRpcGxlIG9mIHRoZSBidWZmZXIgc2l6ZS4NCi0NCi0gICAgIElmIGd6ZW9mKCkgcmV0dXJucyB0cnVlLCB0aGVuIHRoZSByZWFkIGZ1bmN0aW9ucyB3aWxsIHJldHVybiBubyBtb3JlIGRhdGEsDQotICAgdW5sZXNzIHRoZSBlbmQtb2YtZmlsZSBpbmRpY2F0b3IgaXMgcmVzZXQgYnkgZ3pjbGVhcmVycigpIGFuZCB0aGUgaW5wdXQgZmlsZQ0KLSAgIGhhcyBncm93biBzaW5jZSB0aGUgcHJldmlvdXMgZW5kIG9mIGZpbGUgd2FzIGRldGVjdGVkLg0KLSovDQotDQotWkVYVEVSTiBpbnQgWkVYUE9SVCBnemRpcmVjdCBPRigoZ3pGaWxlIGZpbGUpKTsNCi0vKg0KLSAgICAgUmV0dXJucyB0cnVlICgxKSBpZiBmaWxlIGlzIGJlaW5nIGNvcGllZCBkaXJlY3RseSB3aGlsZSByZWFkaW5nLCBvciBmYWxzZQ0KLSAgICgwKSBpZiBmaWxlIGlzIGEgZ3ppcCBzdHJlYW0gYmVpbmcgZGVjb21wcmVzc2VkLg0KLQ0KLSAgICAgSWYgdGhlIGlucHV0IGZpbGUgaXMgZW1wdHksIGd6ZGlyZWN0KCkgd2lsbCByZXR1cm4gdHJ1ZSwgc2luY2UgdGhlIGlucHV0DQotICAgZG9lcyBub3QgY29udGFpbiBhIGd6aXAgc3RyZWFtLg0KLQ0KLSAgICAgSWYgZ3pkaXJlY3QoKSBpcyB1c2VkIGltbWVkaWF0ZWx5IGFmdGVyIGd6b3BlbigpIG9yIGd6ZG9wZW4oKSBpdCB3aWxsDQotICAgY2F1c2UgYnVmZmVycyB0byBiZSBhbGxvY2F0ZWQgdG8gYWxsb3cgcmVhZGluZyB0aGUgZmlsZSB0byBkZXRlcm1pbmUgaWYgaXQNCi0gICBpcyBhIGd6aXAgZmlsZS4gIFRoZXJlZm9yZSBpZiBnemJ1ZmZlcigpIGlzIHVzZWQsIGl0IHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlDQotICAgZ3pkaXJlY3QoKS4NCi0NCi0gICAgIFdoZW4gd3JpdGluZywgZ3pkaXJlY3QoKSByZXR1cm5zIHRydWUgKDEpIGlmIHRyYW5zcGFyZW50IHdyaXRpbmcgd2FzDQotICAgcmVxdWVzdGVkICgid1QiIGZvciB0aGUgZ3pvcGVuKCkgbW9kZSksIG9yIGZhbHNlICgwKSBvdGhlcndpc2UuICAoTm90ZToNCi0gICBnemRpcmVjdCgpIGlzIG5vdCBuZWVkZWQgd2hlbiB3cml0aW5nLiAgVHJhbnNwYXJlbnQgd3JpdGluZyBtdXN0IGJlDQotICAgZXhwbGljaXRseSByZXF1ZXN0ZWQsIHNvIHRoZSBhcHBsaWNhdGlvbiBhbHJlYWR5IGtub3dzIHRoZSBhbnN3ZXIuICBXaGVuDQotICAgbGlua2luZyBzdGF0aWNhbGx5LCB1c2luZyBnemRpcmVjdCgpIHdpbGwgaW5jbHVkZSBhbGwgb2YgdGhlIHpsaWIgY29kZSBmb3INCi0gICBnemlwIGZpbGUgcmVhZGluZyBhbmQgZGVjb21wcmVzc2lvbiwgd2hpY2ggbWF5IG5vdCBiZSBkZXNpcmVkLikNCi0qLw0KLQ0KLVpFWFRFUk4gaW50IFpFWFBPUlQgICAgZ3pjbG9zZSBPRigoZ3pGaWxlIGZpbGUpKTsNCi0vKg0KLSAgICAgRmx1c2hlcyBhbGwgcGVuZGluZyBvdXRwdXQgaWYgbmVjZXNzYXJ5LCBjbG9zZXMgdGhlIGNvbXByZXNzZWQgZmlsZSBhbmQNCi0gICBkZWFsbG9jYXRlcyB0aGUgKGRlKWNvbXByZXNzaW9uIHN0YXRlLiAgTm90ZSB0aGF0IG9uY2UgZmlsZSBpcyBjbG9zZWQsIHlvdQ0KLSAgIGNhbm5vdCBjYWxsIGd6ZXJyb3Igd2l0aCBmaWxlLCBzaW5jZSBpdHMgc3RydWN0dXJlcyBoYXZlIGJlZW4gZGVhbGxvY2F0ZWQuDQotICAgZ3pjbG9zZSBtdXN0IG5vdCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgZmlsZSwganVzdCBhcyBmcmVlDQotICAgbXVzdCBub3QgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGFsbG9jYXRpb24uDQotDQotICAgICBnemNsb3NlIHdpbGwgcmV0dXJuIFpfU1RSRUFNX0VSUk9SIGlmIGZpbGUgaXMgbm90IHZhbGlkLCBaX0VSUk5PIG9uIGENCi0gICBmaWxlIG9wZXJhdGlvbiBlcnJvciwgWl9NRU1fRVJST1IgaWYgb3V0IG9mIG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlDQotICAgbGFzdCByZWFkIGVuZGVkIGluIHRoZSBtaWRkbGUgb2YgYSBnemlwIHN0cmVhbSwgb3IgWl9PSyBvbiBzdWNjZXNzLg0KLSovDQotDQotWkVYVEVSTiBpbnQgWkVYUE9SVCBnemNsb3NlX3IgT0YoKGd6RmlsZSBmaWxlKSk7DQotWkVYVEVSTiBpbnQgWkVYUE9SVCBnemNsb3NlX3cgT0YoKGd6RmlsZSBmaWxlKSk7DQotLyoNCi0gICAgIFNhbWUgYXMgZ3pjbG9zZSgpLCBidXQgZ3pjbG9zZV9yKCkgaXMgb25seSBmb3IgdXNlIHdoZW4gcmVhZGluZywgYW5kDQotICAgZ3pjbG9zZV93KCkgaXMgb25seSBmb3IgdXNlIHdoZW4gd3JpdGluZyBvciBhcHBlbmRpbmcuICBUaGUgYWR2YW50YWdlIHRvDQotICAgdXNpbmcgdGhlc2UgaW5zdGVhZCBvZiBnemNsb3NlKCkgaXMgdGhhdCB0aGV5IGF2b2lkIGxpbmtpbmcgaW4gemxpYg0KLSAgIGNvbXByZXNzaW9uIG9yIGRlY29tcHJlc3Npb24gY29kZSB0aGF0IGlzIG5vdCB1c2VkIHdoZW4gb25seSByZWFkaW5nIG9yIG9ubHkNCi0gICB3cml0aW5nIHJlc3BlY3RpdmVseS4gIElmIGd6Y2xvc2UoKSBpcyB1c2VkLCB0aGVuIGJvdGggY29tcHJlc3Npb24gYW5kDQotICAgZGVjb21wcmVzc2lvbiBjb2RlIHdpbGwgYmUgaW5jbHVkZWQgdGhlIGFwcGxpY2F0aW9uIHdoZW4gbGlua2luZyB0byBhIHN0YXRpYw0KLSAgIHpsaWIgbGlicmFyeS4NCi0qLw0KLQ0KLVpFWFRFUk4gY29uc3QgY2hhciAqIFpFWFBPUlQgZ3plcnJvciBPRigoZ3pGaWxlIGZpbGUsIGludCAqZXJybnVtKSk7DQotLyoNCi0gICAgIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBsYXN0IGVycm9yIHdoaWNoIG9jY3VycmVkIG9uIHRoZSBnaXZlbg0KLSAgIGNvbXByZXNzZWQgZmlsZS4gIGVycm51bSBpcyBzZXQgdG8gemxpYiBlcnJvciBudW1iZXIuICBJZiBhbiBlcnJvciBvY2N1cnJlZA0KLSAgIGluIHRoZSBmaWxlIHN5c3RlbSBhbmQgbm90IGluIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5LCBlcnJudW0gaXMgc2V0IHRvDQotICAgWl9FUlJOTyBhbmQgdGhlIGFwcGxpY2F0aW9uIG1heSBjb25zdWx0IGVycm5vIHRvIGdldCB0aGUgZXhhY3QgZXJyb3IgY29kZS4NCi0NCi0gICAgIFRoZSBhcHBsaWNhdGlvbiBtdXN0IG5vdCBtb2RpZnkgdGhlIHJldHVybmVkIHN0cmluZy4gIEZ1dHVyZSBjYWxscyB0bw0KLSAgIHRoaXMgZnVuY3Rpb24gbWF5IGludmFsaWRhdGUgdGhlIHByZXZpb3VzbHkgcmV0dXJuZWQgc3RyaW5nLiAgSWYgZmlsZSBpcw0KLSAgIGNsb3NlZCwgdGhlbiB0aGUgc3RyaW5nIHByZXZpb3VzbHkgcmV0dXJuZWQgYnkgZ3plcnJvciB3aWxsIG5vIGxvbmdlciBiZQ0KLSAgIGF2YWlsYWJsZS4NCi0NCi0gICAgIGd6ZXJyb3IoKSBzaG91bGQgYmUgdXNlZCB0byBkaXN0aW5ndWlzaCBlcnJvcnMgZnJvbSBlbmQtb2YtZmlsZSBmb3IgdGhvc2UNCi0gICBmdW5jdGlvbnMgYWJvdmUgdGhhdCBkbyBub3QgZGlzdGluZ3Vpc2ggdGhvc2UgY2FzZXMgaW4gdGhlaXIgcmV0dXJuIHZhbHVlcy4NCi0qLw0KLQ0KLVpFWFRFUk4gdm9pZCBaRVhQT1JUIGd6Y2xlYXJlcnIgT0YoKGd6RmlsZSBmaWxlKSk7DQotLyoNCi0gICAgIENsZWFycyB0aGUgZXJyb3IgYW5kIGVuZC1vZi1maWxlIGZsYWdzIGZvciBmaWxlLiAgVGhpcyBpcyBhbmFsb2dvdXMgdG8gdGhlDQotICAgY2xlYXJlcnIoKSBmdW5jdGlvbiBpbiBzdGRpby4gIFRoaXMgaXMgdXNlZnVsIGZvciBjb250aW51aW5nIHRvIHJlYWQgYSBnemlwDQotICAgZmlsZSB0aGF0IGlzIGJlaW5nIHdyaXR0ZW4gY29uY3VycmVudGx5Lg0KLSovDQotDQotI2VuZGlmIC8qICFaX1NPTE8gKi8NCi0NCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVja3N1bSBmdW5jdGlvbnMgKi8NCi0NCi0vKg0KLSAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgcmVsYXRlZCB0byBjb21wcmVzc2lvbiBidXQgYXJlIGV4cG9ydGVkDQotICAgYW55d2F5IGJlY2F1c2UgdGhleSBtaWdodCBiZSB1c2VmdWwgaW4gYXBwbGljYXRpb25zIHVzaW5nIHRoZSBjb21wcmVzc2lvbg0KLSAgIGxpYnJhcnkuDQotKi8NCi0NCi1aRVhURVJOIHVMb25nIFpFWFBPUlQgYWRsZXIzMiBPRigodUxvbmcgYWRsZXIsIGNvbnN0IEJ5dGVmICpidWYsIHVJbnQgbGVuKSk7DQotLyoNCi0gICAgIFVwZGF0ZSBhIHJ1bm5pbmcgQWRsZXItMzIgY2hlY2tzdW0gd2l0aCB0aGUgYnl0ZXMgYnVmWzAuLmxlbi0xXSBhbmQNCi0gICByZXR1cm4gdGhlIHVwZGF0ZWQgY2hlY2tzdW0uICBJZiBidWYgaXMgWl9OVUxMLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlDQotICAgcmVxdWlyZWQgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGNoZWNrc3VtLg0KLQ0KLSAgICAgQW4gQWRsZXItMzIgY2hlY2tzdW0gaXMgYWxtb3N0IGFzIHJlbGlhYmxlIGFzIGEgQ1JDMzIgYnV0IGNhbiBiZSBjb21wdXRlZA0KLSAgIG11Y2ggZmFzdGVyLg0KLQ0KLSAgIFVzYWdlIGV4YW1wbGU6DQotDQotICAgICB1TG9uZyBhZGxlciA9IGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7DQotDQotICAgICB3aGlsZSAocmVhZF9idWZmZXIoYnVmZmVyLCBsZW5ndGgpICE9IEVPRikgew0KLSAgICAgICBhZGxlciA9IGFkbGVyMzIoYWRsZXIsIGJ1ZmZlciwgbGVuZ3RoKTsNCi0gICAgIH0NCi0gICAgIGlmIChhZGxlciAhPSBvcmlnaW5hbF9hZGxlcikgZXJyb3IoKTsNCi0qLw0KLQ0KLS8qDQotWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZSBPRigodUxvbmcgYWRsZXIxLCB1TG9uZyBhZGxlcjIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgel9vZmZfdCBsZW4yKSk7DQotDQotICAgICBDb21iaW5lIHR3byBBZGxlci0zMiBjaGVja3N1bXMgaW50byBvbmUuICBGb3IgdHdvIHNlcXVlbmNlcyBvZiBieXRlcywgc2VxMQ0KLSAgIGFuZCBzZXEyIHdpdGggbGVuZ3RocyBsZW4xIGFuZCBsZW4yLCBBZGxlci0zMiBjaGVja3N1bXMgd2VyZSBjYWxjdWxhdGVkIGZvcg0KLSAgIGVhY2gsIGFkbGVyMSBhbmQgYWRsZXIyLiAgYWRsZXIzMl9jb21iaW5lKCkgcmV0dXJucyB0aGUgQWRsZXItMzIgY2hlY2tzdW0gb2YNCi0gICBzZXExIGFuZCBzZXEyIGNvbmNhdGVuYXRlZCwgcmVxdWlyaW5nIG9ubHkgYWRsZXIxLCBhZGxlcjIsIGFuZCBsZW4yLiAgTm90ZQ0KLSAgIHRoYXQgdGhlIHpfb2ZmX3QgdHlwZSAobGlrZSBvZmZfdCkgaXMgYSBzaWduZWQgaW50ZWdlci4gIElmIGxlbjIgaXMNCi0gICBuZWdhdGl2ZSwgdGhlIHJlc3VsdCBoYXMgbm8gbWVhbmluZyBvciB1dGlsaXR5Lg0KLSovDQotDQotWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyICAgT0YoKHVMb25nIGNyYywgY29uc3QgQnl0ZWYgKmJ1ZiwgdUludCBsZW4pKTsNCi0vKg0KLSAgICAgVXBkYXRlIGEgcnVubmluZyBDUkMtMzIgd2l0aCB0aGUgYnl0ZXMgYnVmWzAuLmxlbi0xXSBhbmQgcmV0dXJuIHRoZQ0KLSAgIHVwZGF0ZWQgQ1JDLTMyLiAgSWYgYnVmIGlzIFpfTlVMTCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1aXJlZA0KLSAgIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBjcmMuICBQcmUtIGFuZCBwb3N0LWNvbmRpdGlvbmluZyAob25lJ3MgY29tcGxlbWVudCkgaXMNCi0gICBwZXJmb3JtZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24gc28gaXQgc2hvdWxkbid0IGJlIGRvbmUgYnkgdGhlIGFwcGxpY2F0aW9uLg0KLQ0KLSAgIFVzYWdlIGV4YW1wbGU6DQotDQotICAgICB1TG9uZyBjcmMgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsNCi0NCi0gICAgIHdoaWxlIChyZWFkX2J1ZmZlcihidWZmZXIsIGxlbmd0aCkgIT0gRU9GKSB7DQotICAgICAgIGNyYyA9IGNyYzMyKGNyYywgYnVmZmVyLCBsZW5ndGgpOw0KLSAgICAgfQ0KLSAgICAgaWYgKGNyYyAhPSBvcmlnaW5hbF9jcmMpIGVycm9yKCk7DQotKi8NCi0NCi0vKg0KLVpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lIE9GKCh1TG9uZyBjcmMxLCB1TG9uZyBjcmMyLCB6X29mZl90IGxlbjIpKTsNCi0NCi0gICAgIENvbWJpbmUgdHdvIENSQy0zMiBjaGVjayB2YWx1ZXMgaW50byBvbmUuICBGb3IgdHdvIHNlcXVlbmNlcyBvZiBieXRlcywNCi0gICBzZXExIGFuZCBzZXEyIHdpdGggbGVuZ3RocyBsZW4xIGFuZCBsZW4yLCBDUkMtMzIgY2hlY2sgdmFsdWVzIHdlcmUNCi0gICBjYWxjdWxhdGVkIGZvciBlYWNoLCBjcmMxIGFuZCBjcmMyLiAgY3JjMzJfY29tYmluZSgpIHJldHVybnMgdGhlIENSQy0zMg0KLSAgIGNoZWNrIHZhbHVlIG9mIHNlcTEgYW5kIHNlcTIgY29uY2F0ZW5hdGVkLCByZXF1aXJpbmcgb25seSBjcmMxLCBjcmMyLCBhbmQNCi0gICBsZW4yLg0KLSovDQotDQotDQotICAgICAgICAgICAgICAgICAgICAgICAgLyogdmFyaW91cyBoYWNrcywgZG9uJ3QgbG9vayA6KSAqLw0KLQ0KLS8qIGRlZmxhdGVJbml0IGFuZCBpbmZsYXRlSW5pdCBhcmUgbWFjcm9zIHRvIGFsbG93IGNoZWNraW5nIHRoZSB6bGliIHZlcnNpb24NCi0gKiBhbmQgdGhlIGNvbXBpbGVyJ3MgdmlldyBvZiB6X3N0cmVhbToNCi0gKi8NCi1aRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVJbml0XyBPRigoel9zdHJlYW1wIHN0cm0sIGludCBsZXZlbCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmVyc2lvbiwgaW50IHN0cmVhbV9zaXplKSk7DQotWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlSW5pdF8gT0YoKHpfc3RyZWFtcCBzdHJtLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2ZXJzaW9uLCBpbnQgc3RyZWFtX3NpemUpKTsNCi1aRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVJbml0Ml8gT0YoKHpfc3RyZWFtcCBzdHJtLCBpbnQgIGxldmVsLCBpbnQgIG1ldGhvZCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aW5kb3dCaXRzLCBpbnQgbWVtTGV2ZWwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyYXRlZ3ksIGNvbnN0IGNoYXIgKnZlcnNpb24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyZWFtX3NpemUpKTsNCi1aRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVJbml0Ml8gT0YoKHpfc3RyZWFtcCBzdHJtLCBpbnQgIHdpbmRvd0JpdHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2ZXJzaW9uLCBpbnQgc3RyZWFtX3NpemUpKTsNCi1aRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVCYWNrSW5pdF8gT0YoKHpfc3RyZWFtcCBzdHJtLCBpbnQgd2luZG93Qml0cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgRkFSICp3aW5kb3csDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2ZXJzaW9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmVhbV9zaXplKSk7DQotI2RlZmluZSBkZWZsYXRlSW5pdChzdHJtLCBsZXZlbCkgXA0KLSAgICAgICAgZGVmbGF0ZUluaXRfKChzdHJtKSwgKGxldmVsKSwgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6X3N0cmVhbSkpDQotI2RlZmluZSBpbmZsYXRlSW5pdChzdHJtKSBcDQotICAgICAgICBpbmZsYXRlSW5pdF8oKHN0cm0pLCBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkNCi0jZGVmaW5lIGRlZmxhdGVJbml0MihzdHJtLCBsZXZlbCwgbWV0aG9kLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3kpIFwNCi0gICAgICAgIGRlZmxhdGVJbml0Ml8oKHN0cm0pLChsZXZlbCksKG1ldGhvZCksKHdpbmRvd0JpdHMpLChtZW1MZXZlbCksXA0KLSAgICAgICAgICAgICAgICAgICAgICAoc3RyYXRlZ3kpLCBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkNCi0jZGVmaW5lIGluZmxhdGVJbml0MihzdHJtLCB3aW5kb3dCaXRzKSBcDQotICAgICAgICBpbmZsYXRlSW5pdDJfKChzdHJtKSwgKHdpbmRvd0JpdHMpLCBaTElCX1ZFUlNJT04sIFwNCi0gICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2Yoel9zdHJlYW0pKQ0KLSNkZWZpbmUgaW5mbGF0ZUJhY2tJbml0KHN0cm0sIHdpbmRvd0JpdHMsIHdpbmRvdykgXA0KLSAgICAgICAgaW5mbGF0ZUJhY2tJbml0Xygoc3RybSksICh3aW5kb3dCaXRzKSwgKHdpbmRvdyksIFwNCi0gICAgICAgICAgICAgICAgICAgICAgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6X3N0cmVhbSkpDQotDQotI2lmbmRlZiBaX1NPTE8NCi0NCi0vKiBnemdldGMoKSBtYWNybyBhbmQgaXRzIHN1cHBvcnRpbmcgZnVuY3Rpb24gYW5kIGV4cG9zZWQgZGF0YSBzdHJ1Y3R1cmUuICBOb3RlDQotICogdGhhdCB0aGUgcmVhbCBpbnRlcm5hbCBzdGF0ZSBpcyBtdWNoIGxhcmdlciB0aGFuIHRoZSBleHBvc2VkIHN0cnVjdHVyZS4NCi0gKiBUaGlzIGFiYnJldmlhdGVkIHN0cnVjdHVyZSBleHBvc2VzIGp1c3QgZW5vdWdoIGZvciB0aGUgZ3pnZXRjKCkgbWFjcm8uICBUaGUNCi0gKiB1c2VyIHNob3VsZCBub3QgbWVzcyB3aXRoIHRoZXNlIGV4cG9zZWQgZWxlbWVudHMsIHNpbmNlIHRoZWlyIG5hbWVzIG9yDQotICogYmVoYXZpb3IgY291bGQgY2hhbmdlIGluIHRoZSBmdXR1cmUsIHBlcmhhcHMgZXZlbiBjYXByaWNpb3VzbHkuICBUaGV5IGNhbg0KLSAqIG9ubHkgYmUgdXNlZCBieSB0aGUgZ3pnZXRjKCkgbWFjcm8uICBZb3UgaGF2ZSBiZWVuIHdhcm5lZC4NCi0gKi8NCi1zdHJ1Y3QgZ3pGaWxlX3Mgew0KLSAgICB1bnNpZ25lZCBoYXZlOw0KLSAgICB1bnNpZ25lZCBjaGFyICpuZXh0Ow0KLSAgICB6X29mZjY0X3QgcG9zOw0KLX07DQotWkVYVEVSTiBpbnQgWkVYUE9SVCBnemdldGNfIE9GKChnekZpbGUgZmlsZSkpOyAgLyogYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLw0KLSNpZmRlZiBaX1BSRUZJWF9TRVQNCi0jICB1bmRlZiB6X2d6Z2V0Yw0KLSMgIGRlZmluZSB6X2d6Z2V0YyhnKSBcDQotICAgICAgICAgICgoZyktPmhhdmUgPyAoKGcpLT5oYXZlLS0sIChnKS0+cG9zKyssICooKGcpLT5uZXh0KSsrKSA6IGd6Z2V0YyhnKSkNCi0jZWxzZQ0KLSMgIGRlZmluZSBnemdldGMoZykgXA0KLSAgICAgICAgICAoKGcpLT5oYXZlID8gKChnKS0+aGF2ZS0tLCAoZyktPnBvcysrLCAqKChnKS0+bmV4dCkrKykgOiBnemdldGMoZykpDQotI2VuZGlmDQotDQotLyogcHJvdmlkZSA2NC1iaXQgb2Zmc2V0IGZ1bmN0aW9ucyBpZiBfTEFSR0VGSUxFNjRfU09VUkNFIGRlZmluZWQsIGFuZC9vcg0KLSAqIGNoYW5nZSB0aGUgcmVndWxhciBmdW5jdGlvbnMgdG8gNjQgYml0cyBpZiBfRklMRV9PRkZTRVRfQklUUyBpcyA2NCAoaWYNCi0gKiBib3RoIGFyZSB0cnVlLCB0aGUgYXBwbGljYXRpb24gZ2V0cyB0aGUgKjY0IGZ1bmN0aW9ucywgYW5kIHRoZSByZWd1bGFyDQotICogZnVuY3Rpb25zIGFyZSBjaGFuZ2VkIHRvIDY0IGJpdHMpIC0tIGluIGNhc2UgdGhlc2UgYXJlIHNldCBvbiBzeXN0ZW1zDQotICogd2l0aG91dCBsYXJnZSBmaWxlIHN1cHBvcnQsIF9MRlM2NF9MQVJHRUZJTEUgbXVzdCBhbHNvIGJlIHRydWUNCi0gKi8NCi0jaWZkZWYgWl9MQVJHRTY0DQotICAgWkVYVEVSTiBnekZpbGUgWkVYUE9SVCBnem9wZW42NCBPRigoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsNCi0gICBaRVhURVJOIHpfb2ZmNjRfdCBaRVhQT1JUIGd6c2VlazY0IE9GKChnekZpbGUsIHpfb2ZmNjRfdCwgaW50KSk7DQotICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnenRlbGw2NCBPRigoZ3pGaWxlKSk7DQotICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnem9mZnNldDY0IE9GKChnekZpbGUpKTsNCi0gICBaRVhURVJOIHVMb25nIFpFWFBPUlQgYWRsZXIzMl9jb21iaW5lNjQgT0YoKHVMb25nLCB1TG9uZywgel9vZmY2NF90KSk7DQotICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmU2NCBPRigodUxvbmcsIHVMb25nLCB6X29mZjY0X3QpKTsNCi0jZW5kaWYNCi0NCi0jaWYgIWRlZmluZWQoWkxJQl9JTlRFUk5BTCkgJiYgZGVmaW5lZChaX1dBTlQ2NCkNCi0jICBpZmRlZiBaX1BSRUZJWF9TRVQNCi0jICAgIGRlZmluZSB6X2d6b3BlbiB6X2d6b3BlbjY0DQotIyAgICBkZWZpbmUgel9nenNlZWsgel9nenNlZWs2NA0KLSMgICAgZGVmaW5lIHpfZ3p0ZWxsIHpfZ3p0ZWxsNjQNCi0jICAgIGRlZmluZSB6X2d6b2Zmc2V0IHpfZ3pvZmZzZXQ2NA0KLSMgICAgZGVmaW5lIHpfYWRsZXIzMl9jb21iaW5lIHpfYWRsZXIzMl9jb21iaW5lNjQNCi0jICAgIGRlZmluZSB6X2NyYzMyX2NvbWJpbmUgel9jcmMzMl9jb21iaW5lNjQNCi0jICBlbHNlDQotIyAgICBkZWZpbmUgZ3pvcGVuIGd6b3BlbjY0DQotIyAgICBkZWZpbmUgZ3pzZWVrIGd6c2VlazY0DQotIyAgICBkZWZpbmUgZ3p0ZWxsIGd6dGVsbDY0DQotIyAgICBkZWZpbmUgZ3pvZmZzZXQgZ3pvZmZzZXQ2NA0KLSMgICAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSBhZGxlcjMyX2NvbWJpbmU2NA0KLSMgICAgZGVmaW5lIGNyYzMyX2NvbWJpbmUgY3JjMzJfY29tYmluZTY0DQotIyAgZW5kaWYNCi0jICBpZm5kZWYgWl9MQVJHRTY0DQotICAgICBaRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6b3BlbjY0IE9GKChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOw0KLSAgICAgWkVYVEVSTiBvZmY2NF90IFpFWFBPUlQgZ3pzZWVrNjQgT0YoKGd6RmlsZSwgb2ZmNjRfdCwgaW50KSk7DQotICAgICBaRVhURVJOIG9mZjY0X3QgWkVYUE9SVCBnenRlbGw2NCBPRigoZ3pGaWxlKSk7DQotICAgICBaRVhURVJOIHpfb2ZmNjRfdCBaRVhQT1JUIGd6b2Zmc2V0NjQgT0YoKGd6RmlsZSkpOw0KLSAgICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZTY0IE9GKCh1TG9uZywgdUxvbmcsIG9mZjY0X3QpKTsNCi0gICAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lNjQgT0YoKHVMb25nLCB1TG9uZywgb2ZmNjRfdCkpOw0KLSMgIGVuZGlmDQotI2Vsc2UNCi0gICBaRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6b3BlbiBPRigoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsNCi0gICBaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnenNlZWsgT0YoKGd6RmlsZSwgel9vZmZfdCwgaW50KSk7DQotICAgWkVYVEVSTiB6X29mZl90IFpFWFBPUlQgZ3p0ZWxsIE9GKChnekZpbGUpKTsNCi0gICBaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnem9mZnNldCBPRigoZ3pGaWxlKSk7DQotICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZSBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7DQotICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmUgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkpOw0KLSNlbmRpZg0KLQ0KLSNlbHNlIC8qIFpfU09MTyAqLw0KLQ0KLSAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBhZGxlcjMyX2NvbWJpbmUgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkpOw0KLSAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lIE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsNCi0NCi0jZW5kaWYgLyogIVpfU09MTyAqLw0KLQ0KLS8qIGhhY2sgZm9yIGJ1Z2d5IGNvbXBpbGVycyAqLw0KLSNpZiAhZGVmaW5lZChaVVRJTF9IKSAmJiAhZGVmaW5lZChOT19EVU1NWV9ERUNMKQ0KLSAgICBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUge2ludCBkdW1teTt9Ow0KLSNlbmRpZg0KLQ0KLS8qIHVuZG9jdW1lbnRlZCBmdW5jdGlvbnMgKi8NCi1aRVhURVJOIGNvbnN0IGNoYXIgICAqIFpFWFBPUlQgekVycm9yICAgICAgICAgICBPRigoaW50KSk7DQotWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGluZmxhdGVTeW5jUG9pbnQgT0YoKHpfc3RyZWFtcCkpOw0KLVpFWFRFUk4gY29uc3Qgel9jcmNfdCBGQVIgKiBaRVhQT1JUIGdldF9jcmNfdGFibGUgICAgT0YoKHZvaWQpKTsNCi1aRVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlQgaW5mbGF0ZVVuZGVybWluZSBPRigoel9zdHJlYW1wLCBpbnQpKTsNCi1aRVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlQgaW5mbGF0ZVJlc2V0S2VlcCBPRigoel9zdHJlYW1wKSk7DQotWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGRlZmxhdGVSZXNldEtlZXAgT0YoKHpfc3RyZWFtcCkpOw0KLSNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoWl9TT0xPKQ0KLVpFWFRFUk4gZ3pGaWxlICAgICAgICAgWkVYUE9SVCBnem9wZW5fdyBPRigoY29uc3Qgd2NoYXJfdCAqcGF0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1vZGUpKTsNCi0jZW5kaWYNCi0jaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkNCi0jICBpZm5kZWYgWl9TT0xPDQotWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUVkEgZ3p2cHJpbnRmIFpfQVJHKChnekZpbGUgZmlsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgdmEpKTsNCi0jICBlbmRpZg0KLSNlbmRpZg0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX0NCi0jZW5kaWYNCi0NCi0jZW5kaWYgLyogWkxJQl9IICovDQorLyogemxpYi5oIC0tIGludGVyZmFjZSBvZiB0aGUgJ3psaWInIGdlbmVyYWwgcHVycG9zZSBjb21wcmVzc2lvbiBsaWJyYXJ5CisgIHZlcnNpb24gMS4yLjgsIEFwcmlsIDI4dGgsIDIwMTMKKworICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCisKKyAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKKyAgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorCisgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisgIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworICAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAgICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyAgMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAgICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorICAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorCisgIEplYW4tbG91cCBHYWlsbHkgICAgICAgIE1hcmsgQWRsZXIKKyAgamxvdXBAZ3ppcC5vcmcgICAgICAgICAgbWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdQorCisKKyAgVGhlIGRhdGEgZm9ybWF0IHVzZWQgYnkgdGhlIHpsaWIgbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDcyAoUmVxdWVzdCBmb3IKKyAgQ29tbWVudHMpIDE5NTAgdG8gMTk1MiBpbiB0aGUgZmlsZXMgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MAorICAoemxpYiBmb3JtYXQpLCByZmMxOTUxIChkZWZsYXRlIGZvcm1hdCkgYW5kIHJmYzE5NTIgKGd6aXAgZm9ybWF0KS4KKyovCisKKyNpZm5kZWYgWkxJQl9ICisjZGVmaW5lIFpMSUJfSAorCisjZGVmaW5lIGRlZmxhdGVfY29weXJpZ2h0IEZQREZBUElfZGVmbGF0ZV9jb3B5cmlnaHQKKyNkZWZpbmUgYWRsZXIzMiBGUERGQVBJX2FkbGVyMzIKKyNkZWZpbmUgY29tcHJlc3MyIEZQREZBUElfY29tcHJlc3MyCisjZGVmaW5lIGNvbXByZXNzIEZQREZBUElfY29tcHJlc3MKKyNkZWZpbmUgY29tcHJlc3NCb3VuZCBGUERGQVBJX2NvbXByZXNzQm91bmQKKyNkZWZpbmUgZ2V0X2NyY190YWJsZSBGUERGQVBJX2dldF9jcmNfdGFibGUKKyNkZWZpbmUgY3JjMzIgRlBERkFQSV9jcmMzMgorI2RlZmluZSBkZWZsYXRlSW5pdF8gRlBERkFQSV9kZWZsYXRlSW5pdF8KKyNkZWZpbmUgZGVmbGF0ZUluaXQyXyBGUERGQVBJX2RlZmxhdGVJbml0Ml8KKyNkZWZpbmUgZGVmbGF0ZVNldERpY3Rpb25hcnkgRlBERkFQSV9kZWZsYXRlU2V0RGljdGlvbmFyeQorI2RlZmluZSBkZWZsYXRlUmVzZXQgRlBERkFQSV9kZWZsYXRlUmVzZXQKKyNkZWZpbmUgZGVmbGF0ZVByaW1lIEZQREZBUElfZGVmbGF0ZVByaW1lCisjZGVmaW5lIGRlZmxhdGVQYXJhbXMgRlBERkFQSV9kZWZsYXRlUGFyYW1zCisjZGVmaW5lIGRlZmxhdGVCb3VuZCBGUERGQVBJX2RlZmxhdGVCb3VuZAorI2RlZmluZSBkZWZsYXRlU2V0SGVhZGVyIEZQREZBUElfZGVmbGF0ZVNldEhlYWRlcgorI2RlZmluZSBkZWZsYXRlVHVuZSBGUERGQVBJX2RlZmxhdGVUdW5lCisjZGVmaW5lIGRlZmxhdGUgRlBERkFQSV9kZWZsYXRlCisjZGVmaW5lIGRlZmxhdGVFbmQgRlBERkFQSV9kZWZsYXRlRW5kCisjZGVmaW5lIGRlZmxhdGVDb3B5IEZQREZBUElfZGVmbGF0ZUNvcHkKKyNkZWZpbmUgaW5mbGF0ZUJhY2tJbml0XyBGUERGQVBJX2luZmxhdGVCYWNrSW5pdF8KKyNkZWZpbmUgaW5mbGF0ZUJhY2sgRlBERkFQSV9pbmZsYXRlQmFjaworI2RlZmluZSBpbmZsYXRlQmFja0VuZCBGUERGQVBJX2luZmxhdGVCYWNrRW5kCisjZGVmaW5lIGluZmxhdGVSZXNldCBGUERGQVBJX2luZmxhdGVSZXNldAorI2RlZmluZSBpbmZsYXRlSW5pdDJfIEZQREZBUElfaW5mbGF0ZUluaXQyXworI2RlZmluZSBpbmZsYXRlSW5pdF8gRlBERkFQSV9pbmZsYXRlSW5pdF8KKyNkZWZpbmUgaW5mbGF0ZSBGUERGQVBJX2luZmxhdGUKKyNkZWZpbmUgaW5mbGF0ZUVuZCBGUERGQVBJX2luZmxhdGVFbmQKKyNkZWZpbmUgaW5mbGF0ZVNldERpY3Rpb25hcnkgRlBERkFQSV9pbmZsYXRlU2V0RGljdGlvbmFyeQorI2RlZmluZSBpbmZsYXRlU3luYyBGUERGQVBJX2luZmxhdGVTeW5jCisjZGVmaW5lIGluZmxhdGVTeW5jUG9pbnQgRlBERkFQSV9pbmZsYXRlU3luY1BvaW50CisjZGVmaW5lIGluZmxhdGVDb3B5IEZQREZBUElfaW5mbGF0ZUNvcHkKKyNkZWZpbmUgdW5jb21wcmVzcyBGUERGQVBJX3VuY29tcHJlc3MKKyNkZWZpbmUgemxpYlZlcnNpb24gRlBERkFQSV96bGliVmVyc2lvbgorI2RlZmluZSB6bGliQ29tcGlsZUZsYWdzIEZQREZBUElfemxpYkNvbXBpbGVGbGFncworI2RlZmluZSB6RXJyb3IgRlBERkFQSV96RXJyb3IKKyNkZWZpbmUgel9lcnJtc2cgRlBERkFQSV96X2Vycm1zZworI2RlZmluZSB6Y2ZyZWUgRlBERkFQSV96Y2ZyZWUKKyNkZWZpbmUgemNhbGxvYyBGUERGQVBJX3pjYWxsb2MKKyNkZWZpbmUgaW5mbGF0ZV9mYXN0IEZQREZBUElfaW5mbGF0ZV9mYXN0CisjZGVmaW5lIGluZmxhdGVfdGFibGUgRlBERkFQSV9pbmZsYXRlX3RhYmxlCisjZGVmaW5lIGluZmxhdGVfY29weXJpZ2h0IEZQREZBUElfaW5mbGF0ZV9jb3B5cmlnaHQKKyNkZWZpbmUgX2xlbmd0aF9jb2RlIEZQREZBUElfbGVuZ3RoX2NvZGUKKyNkZWZpbmUgX3RyX2ZsdXNoX2Jsb2NrIEZQREZBUElfdHJfZmx1c2hfYmxvY2sKKyNkZWZpbmUgX2Rpc3RfY29kZSBGUERGQVBJX2Rpc3RfY29kZQorI2RlZmluZSBfdHJfc3RvcmVkX2Jsb2NrIEZQREZBUElfdHJfc3RvcmVkX2Jsb2NrCisjZGVmaW5lIF90cl9pbml0IEZQREZBUElfdHJfaW5pdAorI2RlZmluZSBfdHJfYWxpZ24gRlBERkFQSV90cl9hbGlnbgorI2RlZmluZSBfdHJfdGFsbHkgRlBERkFQSV90cl90YWxseQorI2RlZmluZSBhZGxlcjMyX2NvbWJpbmUgRlBERkFQSV9hZGxlcjMyX2NvbWJpbmUKKyNkZWZpbmUgaW5mbGF0ZVByaW1lIEZQREZBUElfaW5mbGF0ZVByaW1lCisjZGVmaW5lIGluZmxhdGVHZXRIZWFkZXIgRlBERkFQSV9pbmZsYXRlR2V0SGVhZGVyCisjZGVmaW5lIGNyYzMyX2NvbWJpbmUgRlBERkFQSV9jcmMzMl9jb21iaW5lCisjZGVmaW5lIGluZmxhdGVSZXNldDIgRlBERkFQSV9pbmZsYXRlUmVzZXQyCisjZGVmaW5lIGluZmxhdGVVbmRlcm1pbmUgRlBERkFQSV9pbmZsYXRlVW5kZXJtaW5lCisjZGVmaW5lIGluZmxhdGVNYXJrIEZQREZBUElfaW5mbGF0ZU1hcmsKKyNkZWZpbmUgYWRsZXIzMl9jb21iaW5lNjQgRlBERkFQSV9hZGxlcjMyX2NvbWJpbmU2NAorCisjaW5jbHVkZSAiemNvbmYuaCIKKworLyogU3VubGlhbmcuTGl1IDIwMTAwOTA4IHN5bmMgdGhlIGNvbmZpZyB0byB0aGUgb2xkIHJldmlzaW9uLiBOT19HWklQICovCisjZGVmaW5lIE5PX0daSVAJCS8qIFhZUSAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgWkxJQl9WRVJTSU9OICIxLjIuOCIKKyNkZWZpbmUgWkxJQl9WRVJOVU0gMHgxMjgwCisjZGVmaW5lIFpMSUJfVkVSX01BSk9SIDEKKyNkZWZpbmUgWkxJQl9WRVJfTUlOT1IgMgorI2RlZmluZSBaTElCX1ZFUl9SRVZJU0lPTiA4CisjZGVmaW5lIFpMSUJfVkVSX1NVQlJFVklTSU9OIDAKKworLyoKKyAgICBUaGUgJ3psaWInIGNvbXByZXNzaW9uIGxpYnJhcnkgcHJvdmlkZXMgaW4tbWVtb3J5IGNvbXByZXNzaW9uIGFuZAorICBkZWNvbXByZXNzaW9uIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGludGVncml0eSBjaGVja3Mgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhLgorICBUaGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgc3VwcG9ydHMgb25seSBvbmUgY29tcHJlc3Npb24gbWV0aG9kIChkZWZsYXRpb24pCisgIGJ1dCBvdGhlciBhbGdvcml0aG1zIHdpbGwgYmUgYWRkZWQgbGF0ZXIgYW5kIHdpbGwgaGF2ZSB0aGUgc2FtZSBzdHJlYW0KKyAgaW50ZXJmYWNlLgorCisgICAgQ29tcHJlc3Npb24gY2FuIGJlIGRvbmUgaW4gYSBzaW5nbGUgc3RlcCBpZiB0aGUgYnVmZmVycyBhcmUgbGFyZ2UgZW5vdWdoLAorICBvciBjYW4gYmUgZG9uZSBieSByZXBlYXRlZCBjYWxscyBvZiB0aGUgY29tcHJlc3Npb24gZnVuY3Rpb24uICBJbiB0aGUgbGF0dGVyCisgIGNhc2UsIHRoZSBhcHBsaWNhdGlvbiBtdXN0IHByb3ZpZGUgbW9yZSBpbnB1dCBhbmQvb3IgY29uc3VtZSB0aGUgb3V0cHV0CisgIChwcm92aWRpbmcgbW9yZSBvdXRwdXQgc3BhY2UpIGJlZm9yZSBlYWNoIGNhbGwuCisKKyAgICBUaGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCB1c2VkIGJ5IGRlZmF1bHQgYnkgdGhlIGluLW1lbW9yeSBmdW5jdGlvbnMgaXMKKyAgdGhlIHpsaWIgZm9ybWF0LCB3aGljaCBpcyBhIHpsaWIgd3JhcHBlciBkb2N1bWVudGVkIGluIFJGQyAxOTUwLCB3cmFwcGVkCisgIGFyb3VuZCBhIGRlZmxhdGUgc3RyZWFtLCB3aGljaCBpcyBpdHNlbGYgZG9jdW1lbnRlZCBpbiBSRkMgMTk1MS4KKworICAgIFRoZSBsaWJyYXJ5IGFsc28gc3VwcG9ydHMgcmVhZGluZyBhbmQgd3JpdGluZyBmaWxlcyBpbiBnemlwICguZ3opIGZvcm1hdAorICB3aXRoIGFuIGludGVyZmFjZSBzaW1pbGFyIHRvIHRoYXQgb2Ygc3RkaW8gdXNpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IHN0YXJ0CisgIHdpdGggImd6Ii4gIFRoZSBnemlwIGZvcm1hdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgemxpYiBmb3JtYXQuICBnemlwIGlzIGEKKyAgZ3ppcCB3cmFwcGVyLCBkb2N1bWVudGVkIGluIFJGQyAxOTUyLCB3cmFwcGVkIGFyb3VuZCBhIGRlZmxhdGUgc3RyZWFtLgorCisgICAgVGhpcyBsaWJyYXJ5IGNhbiBvcHRpb25hbGx5IHJlYWQgYW5kIHdyaXRlIGd6aXAgc3RyZWFtcyBpbiBtZW1vcnkgYXMgd2VsbC4KKworICAgIFRoZSB6bGliIGZvcm1hdCB3YXMgZGVzaWduZWQgdG8gYmUgY29tcGFjdCBhbmQgZmFzdCBmb3IgdXNlIGluIG1lbW9yeQorICBhbmQgb24gY29tbXVuaWNhdGlvbnMgY2hhbm5lbHMuICBUaGUgZ3ppcCBmb3JtYXQgd2FzIGRlc2lnbmVkIGZvciBzaW5nbGUtCisgIGZpbGUgY29tcHJlc3Npb24gb24gZmlsZSBzeXN0ZW1zLCBoYXMgYSBsYXJnZXIgaGVhZGVyIHRoYW4gemxpYiB0byBtYWludGFpbgorICBkaXJlY3RvcnkgaW5mb3JtYXRpb24sIGFuZCB1c2VzIGEgZGlmZmVyZW50LCBzbG93ZXIgY2hlY2sgbWV0aG9kIHRoYW4gemxpYi4KKworICAgIFRoZSBsaWJyYXJ5IGRvZXMgbm90IGluc3RhbGwgYW55IHNpZ25hbCBoYW5kbGVyLiAgVGhlIGRlY29kZXIgY2hlY2tzCisgIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgY29tcHJlc3NlZCBkYXRhLCBzbyB0aGUgbGlicmFyeSBzaG91bGQgbmV2ZXIgY3Jhc2gKKyAgZXZlbiBpbiBjYXNlIG9mIGNvcnJ1cHRlZCBpbnB1dC4KKyovCisKK3R5cGVkZWYgdm9pZHBmICgqYWxsb2NfZnVuYykgT0YoKHZvaWRwZiBvcGFxdWUsIHVJbnQgaXRlbXMsIHVJbnQgc2l6ZSkpOwordHlwZWRlZiB2b2lkICAgKCpmcmVlX2Z1bmMpICBPRigodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIGFkZHJlc3MpKTsKKworc3RydWN0IGludGVybmFsX3N0YXRlOworCit0eXBlZGVmIHN0cnVjdCB6X3N0cmVhbV9zIHsKKyAgICB6X2NvbnN0IEJ5dGVmICpuZXh0X2luOyAgICAgLyogbmV4dCBpbnB1dCBieXRlICovCisgICAgdUludCAgICAgYXZhaWxfaW47ICAvKiBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IG5leHRfaW4gKi8KKyAgICB1TG9uZyAgICB0b3RhbF9pbjsgIC8qIHRvdGFsIG51bWJlciBvZiBpbnB1dCBieXRlcyByZWFkIHNvIGZhciAqLworCisgICAgQnl0ZWYgICAgKm5leHRfb3V0OyAvKiBuZXh0IG91dHB1dCBieXRlIHNob3VsZCBiZSBwdXQgdGhlcmUgKi8KKyAgICB1SW50ICAgICBhdmFpbF9vdXQ7IC8qIHJlbWFpbmluZyBmcmVlIHNwYWNlIGF0IG5leHRfb3V0ICovCisgICAgdUxvbmcgICAgdG90YWxfb3V0OyAvKiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgb3V0cHV0IHNvIGZhciAqLworCisgICAgel9jb25zdCBjaGFyICptc2c7ICAvKiBsYXN0IGVycm9yIG1lc3NhZ2UsIE5VTEwgaWYgbm8gZXJyb3IgKi8KKyAgICBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgRkFSICpzdGF0ZTsgLyogbm90IHZpc2libGUgYnkgYXBwbGljYXRpb25zICovCisKKyAgICBhbGxvY19mdW5jIHphbGxvYzsgIC8qIHVzZWQgdG8gYWxsb2NhdGUgdGhlIGludGVybmFsIHN0YXRlICovCisgICAgZnJlZV9mdW5jICB6ZnJlZTsgICAvKiB1c2VkIHRvIGZyZWUgdGhlIGludGVybmFsIHN0YXRlICovCisgICAgdm9pZHBmICAgICBvcGFxdWU7ICAvKiBwcml2YXRlIGRhdGEgb2JqZWN0IHBhc3NlZCB0byB6YWxsb2MgYW5kIHpmcmVlICovCisKKyAgICBpbnQgICAgIGRhdGFfdHlwZTsgIC8qIGJlc3QgZ3Vlc3MgYWJvdXQgdGhlIGRhdGEgdHlwZTogYmluYXJ5IG9yIHRleHQgKi8KKyAgICB1TG9uZyAgIGFkbGVyOyAgICAgIC8qIGFkbGVyMzIgdmFsdWUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhICovCisgICAgdUxvbmcgICByZXNlcnZlZDsgICAvKiByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqLworfSB6X3N0cmVhbTsKKwordHlwZWRlZiB6X3N0cmVhbSBGQVIgKnpfc3RyZWFtcDsKKworLyoKKyAgICAgZ3ppcCBoZWFkZXIgaW5mb3JtYXRpb24gcGFzc2VkIHRvIGFuZCBmcm9tIHpsaWIgcm91dGluZXMuICBTZWUgUkZDIDE5NTIKKyAgZm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgbWVhbmluZ3Mgb2YgdGhlc2UgZmllbGRzLgorKi8KK3R5cGVkZWYgc3RydWN0IGd6X2hlYWRlcl9zIHsKKyAgICBpbnQgICAgIHRleHQ7ICAgICAgIC8qIHRydWUgaWYgY29tcHJlc3NlZCBkYXRhIGJlbGlldmVkIHRvIGJlIHRleHQgKi8KKyAgICB1TG9uZyAgIHRpbWU7ICAgICAgIC8qIG1vZGlmaWNhdGlvbiB0aW1lICovCisgICAgaW50ICAgICB4ZmxhZ3M7ICAgICAvKiBleHRyYSBmbGFncyAobm90IHVzZWQgd2hlbiB3cml0aW5nIGEgZ3ppcCBmaWxlKSAqLworICAgIGludCAgICAgb3M7ICAgICAgICAgLyogb3BlcmF0aW5nIHN5c3RlbSAqLworICAgIEJ5dGVmICAgKmV4dHJhOyAgICAgLyogcG9pbnRlciB0byBleHRyYSBmaWVsZCBvciBaX05VTEwgaWYgbm9uZSAqLworICAgIHVJbnQgICAgZXh0cmFfbGVuOyAgLyogZXh0cmEgZmllbGQgbGVuZ3RoICh2YWxpZCBpZiBleHRyYSAhPSBaX05VTEwpICovCisgICAgdUludCAgICBleHRyYV9tYXg7ICAvKiBzcGFjZSBhdCBleHRyYSAob25seSB3aGVuIHJlYWRpbmcgaGVhZGVyKSAqLworICAgIEJ5dGVmICAgKm5hbWU7ICAgICAgLyogcG9pbnRlciB0byB6ZXJvLXRlcm1pbmF0ZWQgZmlsZSBuYW1lIG9yIFpfTlVMTCAqLworICAgIHVJbnQgICAgbmFtZV9tYXg7ICAgLyogc3BhY2UgYXQgbmFtZSAob25seSB3aGVuIHJlYWRpbmcgaGVhZGVyKSAqLworICAgIEJ5dGVmICAgKmNvbW1lbnQ7ICAgLyogcG9pbnRlciB0byB6ZXJvLXRlcm1pbmF0ZWQgY29tbWVudCBvciBaX05VTEwgKi8KKyAgICB1SW50ICAgIGNvbW1fbWF4OyAgIC8qIHNwYWNlIGF0IGNvbW1lbnQgKG9ubHkgd2hlbiByZWFkaW5nIGhlYWRlcikgKi8KKyAgICBpbnQgICAgIGhjcmM7ICAgICAgIC8qIHRydWUgaWYgdGhlcmUgd2FzIG9yIHdpbGwgYmUgYSBoZWFkZXIgY3JjICovCisgICAgaW50ICAgICBkb25lOyAgICAgICAvKiB0cnVlIHdoZW4gZG9uZSByZWFkaW5nIGd6aXAgaGVhZGVyIChub3QgdXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB3cml0aW5nIGEgZ3ppcCBmaWxlKSAqLworfSBnel9oZWFkZXI7CisKK3R5cGVkZWYgZ3pfaGVhZGVyIEZBUiAqZ3pfaGVhZGVycDsKKworLyoKKyAgICAgVGhlIGFwcGxpY2F0aW9uIG11c3QgdXBkYXRlIG5leHRfaW4gYW5kIGF2YWlsX2luIHdoZW4gYXZhaWxfaW4gaGFzIGRyb3BwZWQKKyAgIHRvIHplcm8uICBJdCBtdXN0IHVwZGF0ZSBuZXh0X291dCBhbmQgYXZhaWxfb3V0IHdoZW4gYXZhaWxfb3V0IGhhcyBkcm9wcGVkCisgICB0byB6ZXJvLiAgVGhlIGFwcGxpY2F0aW9uIG11c3QgaW5pdGlhbGl6ZSB6YWxsb2MsIHpmcmVlIGFuZCBvcGFxdWUgYmVmb3JlCisgICBjYWxsaW5nIHRoZSBpbml0IGZ1bmN0aW9uLiAgQWxsIG90aGVyIGZpZWxkcyBhcmUgc2V0IGJ5IHRoZSBjb21wcmVzc2lvbgorICAgbGlicmFyeSBhbmQgbXVzdCBub3QgYmUgdXBkYXRlZCBieSB0aGUgYXBwbGljYXRpb24uCisKKyAgICAgVGhlIG9wYXF1ZSB2YWx1ZSBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24gd2lsbCBiZSBwYXNzZWQgYXMgdGhlIGZpcnN0CisgICBwYXJhbWV0ZXIgZm9yIGNhbGxzIG9mIHphbGxvYyBhbmQgemZyZWUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGN1c3RvbQorICAgbWVtb3J5IG1hbmFnZW1lbnQuICBUaGUgY29tcHJlc3Npb24gbGlicmFyeSBhdHRhY2hlcyBubyBtZWFuaW5nIHRvIHRoZQorICAgb3BhcXVlIHZhbHVlLgorCisgICAgIHphbGxvYyBtdXN0IHJldHVybiBaX05VTEwgaWYgdGhlcmUgaXMgbm90IGVub3VnaCBtZW1vcnkgZm9yIHRoZSBvYmplY3QuCisgICBJZiB6bGliIGlzIHVzZWQgaW4gYSBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbiwgemFsbG9jIGFuZCB6ZnJlZSBtdXN0IGJlCisgICB0aHJlYWQgc2FmZS4KKworICAgICBPbiAxNi1iaXQgc3lzdGVtcywgdGhlIGZ1bmN0aW9ucyB6YWxsb2MgYW5kIHpmcmVlIG11c3QgYmUgYWJsZSB0byBhbGxvY2F0ZQorICAgZXhhY3RseSA2NTUzNiBieXRlcywgYnV0IHdpbGwgbm90IGJlIHJlcXVpcmVkIHRvIGFsbG9jYXRlIG1vcmUgdGhhbiB0aGlzIGlmCisgICB0aGUgc3ltYm9sIE1BWFNFR182NEsgaXMgZGVmaW5lZCAoc2VlIHpjb25mLmgpLiAgV0FSTklORzogT24gTVNET1MsIHBvaW50ZXJzCisgICByZXR1cm5lZCBieSB6YWxsb2MgZm9yIG9iamVjdHMgb2YgZXhhY3RseSA2NTUzNiBieXRlcyAqbXVzdCogaGF2ZSB0aGVpcgorICAgb2Zmc2V0IG5vcm1hbGl6ZWQgdG8gemVyby4gIFRoZSBkZWZhdWx0IGFsbG9jYXRpb24gZnVuY3Rpb24gcHJvdmlkZWQgYnkgdGhpcworICAgbGlicmFyeSBlbnN1cmVzIHRoaXMgKHNlZSB6dXRpbC5jKS4gIFRvIHJlZHVjZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGFuZCBhdm9pZAorICAgYW55IGFsbG9jYXRpb24gb2YgNjRLIG9iamVjdHMsIGF0IHRoZSBleHBlbnNlIG9mIGNvbXByZXNzaW9uIHJhdGlvLCBjb21waWxlCisgICB0aGUgbGlicmFyeSB3aXRoIC1ETUFYX1dCSVRTPTE0IChzZWUgemNvbmYuaCkuCisKKyAgICAgVGhlIGZpZWxkcyB0b3RhbF9pbiBhbmQgdG90YWxfb3V0IGNhbiBiZSB1c2VkIGZvciBzdGF0aXN0aWNzIG9yIHByb2dyZXNzCisgICByZXBvcnRzLiAgQWZ0ZXIgY29tcHJlc3Npb24sIHRvdGFsX2luIGhvbGRzIHRoZSB0b3RhbCBzaXplIG9mIHRoZQorICAgdW5jb21wcmVzc2VkIGRhdGEgYW5kIG1heSBiZSBzYXZlZCBmb3IgdXNlIGluIHRoZSBkZWNvbXByZXNzb3IgKHBhcnRpY3VsYXJseQorICAgaWYgdGhlIGRlY29tcHJlc3NvciB3YW50cyB0byBkZWNvbXByZXNzIGV2ZXJ5dGhpbmcgaW4gYSBzaW5nbGUgc3RlcCkuCisqLworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25zdGFudHMgKi8KKworI2RlZmluZSBaX05PX0ZMVVNIICAgICAgMAorI2RlZmluZSBaX1BBUlRJQUxfRkxVU0ggMQorI2RlZmluZSBaX1NZTkNfRkxVU0ggICAgMgorI2RlZmluZSBaX0ZVTExfRkxVU0ggICAgMworI2RlZmluZSBaX0ZJTklTSCAgICAgICAgNAorI2RlZmluZSBaX0JMT0NLICAgICAgICAgNQorI2RlZmluZSBaX1RSRUVTICAgICAgICAgNgorLyogQWxsb3dlZCBmbHVzaCB2YWx1ZXM7IHNlZSBkZWZsYXRlKCkgYW5kIGluZmxhdGUoKSBiZWxvdyBmb3IgZGV0YWlscyAqLworCisjZGVmaW5lIFpfT0sgICAgICAgICAgICAwCisjZGVmaW5lIFpfU1RSRUFNX0VORCAgICAxCisjZGVmaW5lIFpfTkVFRF9ESUNUICAgICAyCisjZGVmaW5lIFpfRVJSTk8gICAgICAgICgtMSkKKyNkZWZpbmUgWl9TVFJFQU1fRVJST1IgKC0yKQorI2RlZmluZSBaX0RBVEFfRVJST1IgICAoLTMpCisjZGVmaW5lIFpfTUVNX0VSUk9SICAgICgtNCkKKyNkZWZpbmUgWl9CVUZfRVJST1IgICAgKC01KQorI2RlZmluZSBaX1ZFUlNJT05fRVJST1IgKC02KQorLyogUmV0dXJuIGNvZGVzIGZvciB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMuIE5lZ2F0aXZlIHZhbHVlcworICogYXJlIGVycm9ycywgcG9zaXRpdmUgdmFsdWVzIGFyZSB1c2VkIGZvciBzcGVjaWFsIGJ1dCBub3JtYWwgZXZlbnRzLgorICovCisKKyNkZWZpbmUgWl9OT19DT01QUkVTU0lPTiAgICAgICAgIDAKKyNkZWZpbmUgWl9CRVNUX1NQRUVEICAgICAgICAgICAgIDEKKyNkZWZpbmUgWl9CRVNUX0NPTVBSRVNTSU9OICAgICAgIDkKKyNkZWZpbmUgWl9ERUZBVUxUX0NPTVBSRVNTSU9OICAoLTEpCisvKiBjb21wcmVzc2lvbiBsZXZlbHMgKi8KKworI2RlZmluZSBaX0ZJTFRFUkVEICAgICAgICAgICAgMQorI2RlZmluZSBaX0hVRkZNQU5fT05MWSAgICAgICAgMgorI2RlZmluZSBaX1JMRSAgICAgICAgICAgICAgICAgMworI2RlZmluZSBaX0ZJWEVEICAgICAgICAgICAgICAgNAorI2RlZmluZSBaX0RFRkFVTFRfU1RSQVRFR1kgICAgMAorLyogY29tcHJlc3Npb24gc3RyYXRlZ3k7IHNlZSBkZWZsYXRlSW5pdDIoKSBiZWxvdyBmb3IgZGV0YWlscyAqLworCisjZGVmaW5lIFpfQklOQVJZICAgMAorI2RlZmluZSBaX1RFWFQgICAgIDEKKyNkZWZpbmUgWl9BU0NJSSAgICBaX1RFWFQgICAvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIDEuMi4yIGFuZCBlYXJsaWVyICovCisjZGVmaW5lIFpfVU5LTk9XTiAgMgorLyogUG9zc2libGUgdmFsdWVzIG9mIHRoZSBkYXRhX3R5cGUgZmllbGQgKHRob3VnaCBzZWUgaW5mbGF0ZSgpKSAqLworCisjZGVmaW5lIFpfREVGTEFURUQgICA4CisvKiBUaGUgZGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKHRoZSBvbmx5IG9uZSBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uKSAqLworCisjZGVmaW5lIFpfTlVMTCAgMCAgLyogZm9yIGluaXRpYWxpemluZyB6YWxsb2MsIHpmcmVlLCBvcGFxdWUgKi8KKworI2RlZmluZSB6bGliX3ZlcnNpb24gemxpYlZlcnNpb24oKQorLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJzaW9ucyA8IDEuMC4yICovCisKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogYmFzaWMgZnVuY3Rpb25zICovCisKK1pFWFRFUk4gY29uc3QgY2hhciAqIFpFWFBPUlQgemxpYlZlcnNpb24gT0YoKHZvaWQpKTsKKy8qIFRoZSBhcHBsaWNhdGlvbiBjYW4gY29tcGFyZSB6bGliVmVyc2lvbiBhbmQgWkxJQl9WRVJTSU9OIGZvciBjb25zaXN0ZW5jeS4KKyAgIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgZGlmZmVycywgdGhlIGxpYnJhcnkgY29kZSBhY3R1YWxseSB1c2VkIGlzIG5vdAorICAgY29tcGF0aWJsZSB3aXRoIHRoZSB6bGliLmggaGVhZGVyIGZpbGUgdXNlZCBieSB0aGUgYXBwbGljYXRpb24uICBUaGlzIGNoZWNrCisgICBpcyBhdXRvbWF0aWNhbGx5IG1hZGUgYnkgZGVmbGF0ZUluaXQgYW5kIGluZmxhdGVJbml0LgorICovCisKKy8qCitaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVJbml0IE9GKCh6X3N0cmVhbXAgc3RybSwgaW50IGxldmVsKSk7CisKKyAgICAgSW5pdGlhbGl6ZXMgdGhlIGludGVybmFsIHN0cmVhbSBzdGF0ZSBmb3IgY29tcHJlc3Npb24uICBUaGUgZmllbGRzCisgICB6YWxsb2MsIHpmcmVlIGFuZCBvcGFxdWUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgYnkgdGhlIGNhbGxlci4gIElmCisgICB6YWxsb2MgYW5kIHpmcmVlIGFyZSBzZXQgdG8gWl9OVUxMLCBkZWZsYXRlSW5pdCB1cGRhdGVzIHRoZW0gdG8gdXNlIGRlZmF1bHQKKyAgIGFsbG9jYXRpb24gZnVuY3Rpb25zLgorCisgICAgIFRoZSBjb21wcmVzc2lvbiBsZXZlbCBtdXN0IGJlIFpfREVGQVVMVF9DT01QUkVTU0lPTiwgb3IgYmV0d2VlbiAwIGFuZCA5OgorICAgMSBnaXZlcyBiZXN0IHNwZWVkLCA5IGdpdmVzIGJlc3QgY29tcHJlc3Npb24sIDAgZ2l2ZXMgbm8gY29tcHJlc3Npb24gYXQgYWxsCisgICAodGhlIGlucHV0IGRhdGEgaXMgc2ltcGx5IGNvcGllZCBhIGJsb2NrIGF0IGEgdGltZSkuICBaX0RFRkFVTFRfQ09NUFJFU1NJT04KKyAgIHJlcXVlc3RzIGEgZGVmYXVsdCBjb21wcm9taXNlIGJldHdlZW4gc3BlZWQgYW5kIGNvbXByZXNzaW9uIChjdXJyZW50bHkKKyAgIGVxdWl2YWxlbnQgdG8gbGV2ZWwgNikuCisKKyAgICAgZGVmbGF0ZUluaXQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCisgICBtZW1vcnksIFpfU1RSRUFNX0VSUk9SIGlmIGxldmVsIGlzIG5vdCBhIHZhbGlkIGNvbXByZXNzaW9uIGxldmVsLCBvcgorICAgWl9WRVJTSU9OX0VSUk9SIGlmIHRoZSB6bGliIGxpYnJhcnkgdmVyc2lvbiAoemxpYl92ZXJzaW9uKSBpcyBpbmNvbXBhdGlibGUKKyAgIHdpdGggdGhlIHZlcnNpb24gYXNzdW1lZCBieSB0aGUgY2FsbGVyIChaTElCX1ZFUlNJT04pLiAgbXNnIGlzIHNldCB0byBudWxsCisgICBpZiB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLiAgZGVmbGF0ZUluaXQgZG9lcyBub3QgcGVyZm9ybSBhbnkgY29tcHJlc3Npb246CisgICB0aGlzIHdpbGwgYmUgZG9uZSBieSBkZWZsYXRlKCkuCisqLworCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZSBPRigoel9zdHJlYW1wIHN0cm0sIGludCBmbHVzaCkpOworLyoKKyAgICBkZWZsYXRlIGNvbXByZXNzZXMgYXMgbXVjaCBkYXRhIGFzIHBvc3NpYmxlLCBhbmQgc3RvcHMgd2hlbiB0aGUgaW5wdXQKKyAgYnVmZmVyIGJlY29tZXMgZW1wdHkgb3IgdGhlIG91dHB1dCBidWZmZXIgYmVjb21lcyBmdWxsLiAgSXQgbWF5IGludHJvZHVjZQorICBzb21lIG91dHB1dCBsYXRlbmN5IChyZWFkaW5nIGlucHV0IHdpdGhvdXQgcHJvZHVjaW5nIGFueSBvdXRwdXQpIGV4Y2VwdCB3aGVuCisgIGZvcmNlZCB0byBmbHVzaC4KKworICAgIFRoZSBkZXRhaWxlZCBzZW1hbnRpY3MgYXJlIGFzIGZvbGxvd3MuICBkZWZsYXRlIHBlcmZvcm1zIG9uZSBvciBib3RoIG9mIHRoZQorICBmb2xsb3dpbmcgYWN0aW9uczoKKworICAtIENvbXByZXNzIG1vcmUgaW5wdXQgc3RhcnRpbmcgYXQgbmV4dF9pbiBhbmQgdXBkYXRlIG5leHRfaW4gYW5kIGF2YWlsX2luCisgICAgYWNjb3JkaW5nbHkuICBJZiBub3QgYWxsIGlucHV0IGNhbiBiZSBwcm9jZXNzZWQgKGJlY2F1c2UgdGhlcmUgaXMgbm90CisgICAgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIpLCBuZXh0X2luIGFuZCBhdmFpbF9pbiBhcmUgdXBkYXRlZCBhbmQKKyAgICBwcm9jZXNzaW5nIHdpbGwgcmVzdW1lIGF0IHRoaXMgcG9pbnQgZm9yIHRoZSBuZXh0IGNhbGwgb2YgZGVmbGF0ZSgpLgorCisgIC0gUHJvdmlkZSBtb3JlIG91dHB1dCBzdGFydGluZyBhdCBuZXh0X291dCBhbmQgdXBkYXRlIG5leHRfb3V0IGFuZCBhdmFpbF9vdXQKKyAgICBhY2NvcmRpbmdseS4gIFRoaXMgYWN0aW9uIGlzIGZvcmNlZCBpZiB0aGUgcGFyYW1ldGVyIGZsdXNoIGlzIG5vbiB6ZXJvLgorICAgIEZvcmNpbmcgZmx1c2ggZnJlcXVlbnRseSBkZWdyYWRlcyB0aGUgY29tcHJlc3Npb24gcmF0aW8sIHNvIHRoaXMgcGFyYW1ldGVyCisgICAgc2hvdWxkIGJlIHNldCBvbmx5IHdoZW4gbmVjZXNzYXJ5IChpbiBpbnRlcmFjdGl2ZSBhcHBsaWNhdGlvbnMpLiAgU29tZQorICAgIG91dHB1dCBtYXkgYmUgcHJvdmlkZWQgZXZlbiBpZiBmbHVzaCBpcyBub3Qgc2V0LgorCisgICAgQmVmb3JlIHRoZSBjYWxsIG9mIGRlZmxhdGUoKSwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBlbnN1cmUgdGhhdCBhdCBsZWFzdAorICBvbmUgb2YgdGhlIGFjdGlvbnMgaXMgcG9zc2libGUsIGJ5IHByb3ZpZGluZyBtb3JlIGlucHV0IGFuZC9vciBjb25zdW1pbmcgbW9yZQorICBvdXRwdXQsIGFuZCB1cGRhdGluZyBhdmFpbF9pbiBvciBhdmFpbF9vdXQgYWNjb3JkaW5nbHk7IGF2YWlsX291dCBzaG91bGQKKyAgbmV2ZXIgYmUgemVybyBiZWZvcmUgdGhlIGNhbGwuICBUaGUgYXBwbGljYXRpb24gY2FuIGNvbnN1bWUgdGhlIGNvbXByZXNzZWQKKyAgb3V0cHV0IHdoZW4gaXQgd2FudHMsIGZvciBleGFtcGxlIHdoZW4gdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCAoYXZhaWxfb3V0CisgID09IDApLCBvciBhZnRlciBlYWNoIGNhbGwgb2YgZGVmbGF0ZSgpLiAgSWYgZGVmbGF0ZSByZXR1cm5zIFpfT0sgYW5kIHdpdGgKKyAgemVybyBhdmFpbF9vdXQsIGl0IG11c3QgYmUgY2FsbGVkIGFnYWluIGFmdGVyIG1ha2luZyByb29tIGluIHRoZSBvdXRwdXQKKyAgYnVmZmVyIGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQgcGVuZGluZy4KKworICAgIE5vcm1hbGx5IHRoZSBwYXJhbWV0ZXIgZmx1c2ggaXMgc2V0IHRvIFpfTk9fRkxVU0gsIHdoaWNoIGFsbG93cyBkZWZsYXRlIHRvCisgIGRlY2lkZSBob3cgbXVjaCBkYXRhIHRvIGFjY3VtdWxhdGUgYmVmb3JlIHByb2R1Y2luZyBvdXRwdXQsIGluIG9yZGVyIHRvCisgIG1heGltaXplIGNvbXByZXNzaW9uLgorCisgICAgSWYgdGhlIHBhcmFtZXRlciBmbHVzaCBpcyBzZXQgdG8gWl9TWU5DX0ZMVVNILCBhbGwgcGVuZGluZyBvdXRwdXQgaXMKKyAgZmx1c2hlZCB0byB0aGUgb3V0cHV0IGJ1ZmZlciBhbmQgdGhlIG91dHB1dCBpcyBhbGlnbmVkIG9uIGEgYnl0ZSBib3VuZGFyeSwgc28KKyAgdGhhdCB0aGUgZGVjb21wcmVzc29yIGNhbiBnZXQgYWxsIGlucHV0IGRhdGEgYXZhaWxhYmxlIHNvIGZhci4gIChJbgorICBwYXJ0aWN1bGFyIGF2YWlsX2luIGlzIHplcm8gYWZ0ZXIgdGhlIGNhbGwgaWYgZW5vdWdoIG91dHB1dCBzcGFjZSBoYXMgYmVlbgorICBwcm92aWRlZCBiZWZvcmUgdGhlIGNhbGwuKSBGbHVzaGluZyBtYXkgZGVncmFkZSBjb21wcmVzc2lvbiBmb3Igc29tZQorICBjb21wcmVzc2lvbiBhbGdvcml0aG1zIGFuZCBzbyBpdCBzaG91bGQgYmUgdXNlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LiAgVGhpcworICBjb21wbGV0ZXMgdGhlIGN1cnJlbnQgZGVmbGF0ZSBibG9jayBhbmQgZm9sbG93cyBpdCB3aXRoIGFuIGVtcHR5IHN0b3JlZCBibG9jaworICB0aGF0IGlzIHRocmVlIGJpdHMgcGx1cyBmaWxsZXIgYml0cyB0byB0aGUgbmV4dCBieXRlLCBmb2xsb3dlZCBieSBmb3VyIGJ5dGVzCisgICgwMCAwMCBmZiBmZikuCisKKyAgICBJZiBmbHVzaCBpcyBzZXQgdG8gWl9QQVJUSUFMX0ZMVVNILCBhbGwgcGVuZGluZyBvdXRwdXQgaXMgZmx1c2hlZCB0byB0aGUKKyAgb3V0cHV0IGJ1ZmZlciwgYnV0IHRoZSBvdXRwdXQgaXMgbm90IGFsaWduZWQgdG8gYSBieXRlIGJvdW5kYXJ5LiAgQWxsIG9mIHRoZQorICBpbnB1dCBkYXRhIHNvIGZhciB3aWxsIGJlIGF2YWlsYWJsZSB0byB0aGUgZGVjb21wcmVzc29yLCBhcyBmb3IgWl9TWU5DX0ZMVVNILgorICBUaGlzIGNvbXBsZXRlcyB0aGUgY3VycmVudCBkZWZsYXRlIGJsb2NrIGFuZCBmb2xsb3dzIGl0IHdpdGggYW4gZW1wdHkgZml4ZWQKKyAgY29kZXMgYmxvY2sgdGhhdCBpcyAxMCBiaXRzIGxvbmcuICBUaGlzIGFzc3VyZXMgdGhhdCBlbm91Z2ggYnl0ZXMgYXJlIG91dHB1dAorICBpbiBvcmRlciBmb3IgdGhlIGRlY29tcHJlc3NvciB0byBmaW5pc2ggdGhlIGJsb2NrIGJlZm9yZSB0aGUgZW1wdHkgZml4ZWQgY29kZQorICBibG9jay4KKworICAgIElmIGZsdXNoIGlzIHNldCB0byBaX0JMT0NLLCBhIGRlZmxhdGUgYmxvY2sgaXMgY29tcGxldGVkIGFuZCBlbWl0dGVkLCBhcworICBmb3IgWl9TWU5DX0ZMVVNILCBidXQgdGhlIG91dHB1dCBpcyBub3QgYWxpZ25lZCBvbiBhIGJ5dGUgYm91bmRhcnksIGFuZCB1cCB0bworICBzZXZlbiBiaXRzIG9mIHRoZSBjdXJyZW50IGJsb2NrIGFyZSBoZWxkIHRvIGJlIHdyaXR0ZW4gYXMgdGhlIG5leHQgYnl0ZSBhZnRlcgorICB0aGUgbmV4dCBkZWZsYXRlIGJsb2NrIGlzIGNvbXBsZXRlZC4gIEluIHRoaXMgY2FzZSwgdGhlIGRlY29tcHJlc3NvciBtYXkgbm90CisgIGJlIHByb3ZpZGVkIGVub3VnaCBiaXRzIGF0IHRoaXMgcG9pbnQgaW4gb3JkZXIgdG8gY29tcGxldGUgZGVjb21wcmVzc2lvbiBvZgorICB0aGUgZGF0YSBwcm92aWRlZCBzbyBmYXIgdG8gdGhlIGNvbXByZXNzb3IuICBJdCBtYXkgbmVlZCB0byB3YWl0IGZvciB0aGUgbmV4dAorICBibG9jayB0byBiZSBlbWl0dGVkLiAgVGhpcyBpcyBmb3IgYWR2YW5jZWQgYXBwbGljYXRpb25zIHRoYXQgbmVlZCB0byBjb250cm9sCisgIHRoZSBlbWlzc2lvbiBvZiBkZWZsYXRlIGJsb2Nrcy4KKworICAgIElmIGZsdXNoIGlzIHNldCB0byBaX0ZVTExfRkxVU0gsIGFsbCBvdXRwdXQgaXMgZmx1c2hlZCBhcyB3aXRoCisgIFpfU1lOQ19GTFVTSCwgYW5kIHRoZSBjb21wcmVzc2lvbiBzdGF0ZSBpcyByZXNldCBzbyB0aGF0IGRlY29tcHJlc3Npb24gY2FuCisgIHJlc3RhcnQgZnJvbSB0aGlzIHBvaW50IGlmIHByZXZpb3VzIGNvbXByZXNzZWQgZGF0YSBoYXMgYmVlbiBkYW1hZ2VkIG9yIGlmCisgIHJhbmRvbSBhY2Nlc3MgaXMgZGVzaXJlZC4gIFVzaW5nIFpfRlVMTF9GTFVTSCB0b28gb2Z0ZW4gY2FuIHNlcmlvdXNseSBkZWdyYWRlCisgIGNvbXByZXNzaW9uLgorCisgICAgSWYgZGVmbGF0ZSByZXR1cm5zIHdpdGggYXZhaWxfb3V0ID09IDAsIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWdhaW4KKyAgd2l0aCB0aGUgc2FtZSB2YWx1ZSBvZiB0aGUgZmx1c2ggcGFyYW1ldGVyIGFuZCBtb3JlIG91dHB1dCBzcGFjZSAodXBkYXRlZAorICBhdmFpbF9vdXQpLCB1bnRpbCB0aGUgZmx1c2ggaXMgY29tcGxldGUgKGRlZmxhdGUgcmV0dXJucyB3aXRoIG5vbi16ZXJvCisgIGF2YWlsX291dCkuICBJbiB0aGUgY2FzZSBvZiBhIFpfRlVMTF9GTFVTSCBvciBaX1NZTkNfRkxVU0gsIG1ha2Ugc3VyZSB0aGF0CisgIGF2YWlsX291dCBpcyBncmVhdGVyIHRoYW4gc2l4IHRvIGF2b2lkIHJlcGVhdGVkIGZsdXNoIG1hcmtlcnMgZHVlIHRvCisgIGF2YWlsX291dCA9PSAwIG9uIHJldHVybi4KKworICAgIElmIHRoZSBwYXJhbWV0ZXIgZmx1c2ggaXMgc2V0IHRvIFpfRklOSVNILCBwZW5kaW5nIGlucHV0IGlzIHByb2Nlc3NlZCwKKyAgcGVuZGluZyBvdXRwdXQgaXMgZmx1c2hlZCBhbmQgZGVmbGF0ZSByZXR1cm5zIHdpdGggWl9TVFJFQU1fRU5EIGlmIHRoZXJlIHdhcworICBlbm91Z2ggb3V0cHV0IHNwYWNlOyBpZiBkZWZsYXRlIHJldHVybnMgd2l0aCBaX09LLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUKKyAgY2FsbGVkIGFnYWluIHdpdGggWl9GSU5JU0ggYW5kIG1vcmUgb3V0cHV0IHNwYWNlICh1cGRhdGVkIGF2YWlsX291dCkgYnV0IG5vCisgIG1vcmUgaW5wdXQgZGF0YSwgdW50aWwgaXQgcmV0dXJucyB3aXRoIFpfU1RSRUFNX0VORCBvciBhbiBlcnJvci4gIEFmdGVyCisgIGRlZmxhdGUgaGFzIHJldHVybmVkIFpfU1RSRUFNX0VORCwgdGhlIG9ubHkgcG9zc2libGUgb3BlcmF0aW9ucyBvbiB0aGUgc3RyZWFtCisgIGFyZSBkZWZsYXRlUmVzZXQgb3IgZGVmbGF0ZUVuZC4KKworICAgIFpfRklOSVNIIGNhbiBiZSB1c2VkIGltbWVkaWF0ZWx5IGFmdGVyIGRlZmxhdGVJbml0IGlmIGFsbCB0aGUgY29tcHJlc3Npb24KKyAgaXMgdG8gYmUgZG9uZSBpbiBhIHNpbmdsZSBzdGVwLiAgSW4gdGhpcyBjYXNlLCBhdmFpbF9vdXQgbXVzdCBiZSBhdCBsZWFzdCB0aGUKKyAgdmFsdWUgcmV0dXJuZWQgYnkgZGVmbGF0ZUJvdW5kIChzZWUgYmVsb3cpLiAgVGhlbiBkZWZsYXRlIGlzIGd1YXJhbnRlZWQgdG8KKyAgcmV0dXJuIFpfU1RSRUFNX0VORC4gIElmIG5vdCBlbm91Z2ggb3V0cHV0IHNwYWNlIGlzIHByb3ZpZGVkLCBkZWZsYXRlIHdpbGwKKyAgbm90IHJldHVybiBaX1NUUkVBTV9FTkQsIGFuZCBpdCBtdXN0IGJlIGNhbGxlZCBhZ2FpbiBhcyBkZXNjcmliZWQgYWJvdmUuCisKKyAgICBkZWZsYXRlKCkgc2V0cyBzdHJtLT5hZGxlciB0byB0aGUgYWRsZXIzMiBjaGVja3N1bSBvZiBhbGwgaW5wdXQgcmVhZAorICBzbyBmYXIgKHRoYXQgaXMsIHRvdGFsX2luIGJ5dGVzKS4KKworICAgIGRlZmxhdGUoKSBtYXkgdXBkYXRlIHN0cm0tPmRhdGFfdHlwZSBpZiBpdCBjYW4gbWFrZSBhIGdvb2QgZ3Vlc3MgYWJvdXQKKyAgdGhlIGlucHV0IGRhdGEgdHlwZSAoWl9CSU5BUlkgb3IgWl9URVhUKS4gIEluIGRvdWJ0LCB0aGUgZGF0YSBpcyBjb25zaWRlcmVkCisgIGJpbmFyeS4gIFRoaXMgZmllbGQgaXMgb25seSBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMgYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUKKyAgY29tcHJlc3Npb24gYWxnb3JpdGhtIGluIGFueSBtYW5uZXIuCisKKyAgICBkZWZsYXRlKCkgcmV0dXJucyBaX09LIGlmIHNvbWUgcHJvZ3Jlc3MgaGFzIGJlZW4gbWFkZSAobW9yZSBpbnB1dAorICBwcm9jZXNzZWQgb3IgbW9yZSBvdXRwdXQgcHJvZHVjZWQpLCBaX1NUUkVBTV9FTkQgaWYgYWxsIGlucHV0IGhhcyBiZWVuCisgIGNvbnN1bWVkIGFuZCBhbGwgb3V0cHV0IGhhcyBiZWVuIHByb2R1Y2VkIChvbmx5IHdoZW4gZmx1c2ggaXMgc2V0IHRvCisgIFpfRklOSVNIKSwgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50IChmb3IgZXhhbXBsZQorICBpZiBuZXh0X2luIG9yIG5leHRfb3V0IHdhcyBaX05VTEwpLCBaX0JVRl9FUlJPUiBpZiBubyBwcm9ncmVzcyBpcyBwb3NzaWJsZQorICAoZm9yIGV4YW1wbGUgYXZhaWxfaW4gb3IgYXZhaWxfb3V0IHdhcyB6ZXJvKS4gIE5vdGUgdGhhdCBaX0JVRl9FUlJPUiBpcyBub3QKKyAgZmF0YWwsIGFuZCBkZWZsYXRlKCkgY2FuIGJlIGNhbGxlZCBhZ2FpbiB3aXRoIG1vcmUgaW5wdXQgYW5kIG1vcmUgb3V0cHV0CisgIHNwYWNlIHRvIGNvbnRpbnVlIGNvbXByZXNzaW5nLgorKi8KKworCitaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVFbmQgT0YoKHpfc3RyZWFtcCBzdHJtKSk7CisvKgorICAgICBBbGwgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGRhdGEgc3RydWN0dXJlcyBmb3IgdGhpcyBzdHJlYW0gYXJlIGZyZWVkLgorICAgVGhpcyBmdW5jdGlvbiBkaXNjYXJkcyBhbnkgdW5wcm9jZXNzZWQgaW5wdXQgYW5kIGRvZXMgbm90IGZsdXNoIGFueSBwZW5kaW5nCisgICBvdXRwdXQuCisKKyAgICAgZGVmbGF0ZUVuZCByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgdGhlCisgICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudCwgWl9EQVRBX0VSUk9SIGlmIHRoZSBzdHJlYW0gd2FzIGZyZWVkCisgICBwcmVtYXR1cmVseSAoc29tZSBpbnB1dCBvciBvdXRwdXQgd2FzIGRpc2NhcmRlZCkuICBJbiB0aGUgZXJyb3IgY2FzZSwgbXNnCisgICBtYXkgYmUgc2V0IGJ1dCB0aGVuIHBvaW50cyB0byBhIHN0YXRpYyBzdHJpbmcgKHdoaWNoIG11c3Qgbm90IGJlCisgICBkZWFsbG9jYXRlZCkuCisqLworCisKKy8qCitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVJbml0IE9GKCh6X3N0cmVhbXAgc3RybSkpOworCisgICAgIEluaXRpYWxpemVzIHRoZSBpbnRlcm5hbCBzdHJlYW0gc3RhdGUgZm9yIGRlY29tcHJlc3Npb24uICBUaGUgZmllbGRzCisgICBuZXh0X2luLCBhdmFpbF9pbiwgemFsbG9jLCB6ZnJlZSBhbmQgb3BhcXVlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJ5CisgICB0aGUgY2FsbGVyLiAgSWYgbmV4dF9pbiBpcyBub3QgWl9OVUxMIGFuZCBhdmFpbF9pbiBpcyBsYXJnZSBlbm91Z2ggKHRoZQorICAgZXhhY3QgdmFsdWUgZGVwZW5kcyBvbiB0aGUgY29tcHJlc3Npb24gbWV0aG9kKSwgaW5mbGF0ZUluaXQgZGV0ZXJtaW5lcyB0aGUKKyAgIGNvbXByZXNzaW9uIG1ldGhvZCBmcm9tIHRoZSB6bGliIGhlYWRlciBhbmQgYWxsb2NhdGVzIGFsbCBkYXRhIHN0cnVjdHVyZXMKKyAgIGFjY29yZGluZ2x5OyBvdGhlcndpc2UgdGhlIGFsbG9jYXRpb24gd2lsbCBiZSBkZWZlcnJlZCB0byB0aGUgZmlyc3QgY2FsbCBvZgorICAgaW5mbGF0ZS4gIElmIHphbGxvYyBhbmQgemZyZWUgYXJlIHNldCB0byBaX05VTEwsIGluZmxhdGVJbml0IHVwZGF0ZXMgdGhlbSB0bworICAgdXNlIGRlZmF1bHQgYWxsb2NhdGlvbiBmdW5jdGlvbnMuCisKKyAgICAgaW5mbGF0ZUluaXQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCisgICBtZW1vcnksIFpfVkVSU0lPTl9FUlJPUiBpZiB0aGUgemxpYiBsaWJyYXJ5IHZlcnNpb24gaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlCisgICB2ZXJzaW9uIGFzc3VtZWQgYnkgdGhlIGNhbGxlciwgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHBhcmFtZXRlcnMgYXJlCisgICBpbnZhbGlkLCBzdWNoIGFzIGEgbnVsbCBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUuICBtc2cgaXMgc2V0IHRvIG51bGwgaWYKKyAgIHRoZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2UuICBpbmZsYXRlSW5pdCBkb2VzIG5vdCBwZXJmb3JtIGFueSBkZWNvbXByZXNzaW9uCisgICBhcGFydCBmcm9tIHBvc3NpYmx5IHJlYWRpbmcgdGhlIHpsaWIgaGVhZGVyIGlmIHByZXNlbnQ6IGFjdHVhbCBkZWNvbXByZXNzaW9uCisgICB3aWxsIGJlIGRvbmUgYnkgaW5mbGF0ZSgpLiAgKFNvIG5leHRfaW4gYW5kIGF2YWlsX2luIG1heSBiZSBtb2RpZmllZCwgYnV0CisgICBuZXh0X291dCBhbmQgYXZhaWxfb3V0IGFyZSB1bnVzZWQgYW5kIHVuY2hhbmdlZC4pIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uCisgICBvZiBpbmZsYXRlSW5pdCgpIGRvZXMgbm90IHByb2Nlc3MgYW55IGhlYWRlciBpbmZvcm1hdGlvbiAtLSB0aGF0IGlzIGRlZmVycmVkCisgICB1bnRpbCBpbmZsYXRlKCkgaXMgY2FsbGVkLgorKi8KKworCitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGUgT0YoKHpfc3RyZWFtcCBzdHJtLCBpbnQgZmx1c2gpKTsKKy8qCisgICAgaW5mbGF0ZSBkZWNvbXByZXNzZXMgYXMgbXVjaCBkYXRhIGFzIHBvc3NpYmxlLCBhbmQgc3RvcHMgd2hlbiB0aGUgaW5wdXQKKyAgYnVmZmVyIGJlY29tZXMgZW1wdHkgb3IgdGhlIG91dHB1dCBidWZmZXIgYmVjb21lcyBmdWxsLiAgSXQgbWF5IGludHJvZHVjZQorICBzb21lIG91dHB1dCBsYXRlbmN5IChyZWFkaW5nIGlucHV0IHdpdGhvdXQgcHJvZHVjaW5nIGFueSBvdXRwdXQpIGV4Y2VwdCB3aGVuCisgIGZvcmNlZCB0byBmbHVzaC4KKworICBUaGUgZGV0YWlsZWQgc2VtYW50aWNzIGFyZSBhcyBmb2xsb3dzLiAgaW5mbGF0ZSBwZXJmb3JtcyBvbmUgb3IgYm90aCBvZiB0aGUKKyAgZm9sbG93aW5nIGFjdGlvbnM6CisKKyAgLSBEZWNvbXByZXNzIG1vcmUgaW5wdXQgc3RhcnRpbmcgYXQgbmV4dF9pbiBhbmQgdXBkYXRlIG5leHRfaW4gYW5kIGF2YWlsX2luCisgICAgYWNjb3JkaW5nbHkuICBJZiBub3QgYWxsIGlucHV0IGNhbiBiZSBwcm9jZXNzZWQgKGJlY2F1c2UgdGhlcmUgaXMgbm90CisgICAgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIpLCBuZXh0X2luIGlzIHVwZGF0ZWQgYW5kIHByb2Nlc3Npbmcgd2lsbAorICAgIHJlc3VtZSBhdCB0aGlzIHBvaW50IGZvciB0aGUgbmV4dCBjYWxsIG9mIGluZmxhdGUoKS4KKworICAtIFByb3ZpZGUgbW9yZSBvdXRwdXQgc3RhcnRpbmcgYXQgbmV4dF9vdXQgYW5kIHVwZGF0ZSBuZXh0X291dCBhbmQgYXZhaWxfb3V0CisgICAgYWNjb3JkaW5nbHkuICBpbmZsYXRlKCkgcHJvdmlkZXMgYXMgbXVjaCBvdXRwdXQgYXMgcG9zc2libGUsIHVudGlsIHRoZXJlIGlzCisgICAgbm8gbW9yZSBpbnB1dCBkYXRhIG9yIG5vIG1vcmUgc3BhY2UgaW4gdGhlIG91dHB1dCBidWZmZXIgKHNlZSBiZWxvdyBhYm91dAorICAgIHRoZSBmbHVzaCBwYXJhbWV0ZXIpLgorCisgICAgQmVmb3JlIHRoZSBjYWxsIG9mIGluZmxhdGUoKSwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBlbnN1cmUgdGhhdCBhdCBsZWFzdAorICBvbmUgb2YgdGhlIGFjdGlvbnMgaXMgcG9zc2libGUsIGJ5IHByb3ZpZGluZyBtb3JlIGlucHV0IGFuZC9vciBjb25zdW1pbmcgbW9yZQorICBvdXRwdXQsIGFuZCB1cGRhdGluZyB0aGUgbmV4dF8qIGFuZCBhdmFpbF8qIHZhbHVlcyBhY2NvcmRpbmdseS4gIFRoZQorICBhcHBsaWNhdGlvbiBjYW4gY29uc3VtZSB0aGUgdW5jb21wcmVzc2VkIG91dHB1dCB3aGVuIGl0IHdhbnRzLCBmb3IgZXhhbXBsZQorICB3aGVuIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGZ1bGwgKGF2YWlsX291dCA9PSAwKSwgb3IgYWZ0ZXIgZWFjaCBjYWxsIG9mCisgIGluZmxhdGUoKS4gIElmIGluZmxhdGUgcmV0dXJucyBaX09LIGFuZCB3aXRoIHplcm8gYXZhaWxfb3V0LCBpdCBtdXN0IGJlCisgIGNhbGxlZCBhZ2FpbiBhZnRlciBtYWtpbmcgcm9vbSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlCisgIG1vcmUgb3V0cHV0IHBlbmRpbmcuCisKKyAgICBUaGUgZmx1c2ggcGFyYW1ldGVyIG9mIGluZmxhdGUoKSBjYW4gYmUgWl9OT19GTFVTSCwgWl9TWU5DX0ZMVVNILCBaX0ZJTklTSCwKKyAgWl9CTE9DSywgb3IgWl9UUkVFUy4gIFpfU1lOQ19GTFVTSCByZXF1ZXN0cyB0aGF0IGluZmxhdGUoKSBmbHVzaCBhcyBtdWNoCisgIG91dHB1dCBhcyBwb3NzaWJsZSB0byB0aGUgb3V0cHV0IGJ1ZmZlci4gIFpfQkxPQ0sgcmVxdWVzdHMgdGhhdCBpbmZsYXRlKCkKKyAgc3RvcCBpZiBhbmQgd2hlbiBpdCBnZXRzIHRvIHRoZSBuZXh0IGRlZmxhdGUgYmxvY2sgYm91bmRhcnkuICBXaGVuIGRlY29kaW5nCisgIHRoZSB6bGliIG9yIGd6aXAgZm9ybWF0LCB0aGlzIHdpbGwgY2F1c2UgaW5mbGF0ZSgpIHRvIHJldHVybiBpbW1lZGlhdGVseQorICBhZnRlciB0aGUgaGVhZGVyIGFuZCBiZWZvcmUgdGhlIGZpcnN0IGJsb2NrLiAgV2hlbiBkb2luZyBhIHJhdyBpbmZsYXRlLAorICBpbmZsYXRlKCkgd2lsbCBnbyBhaGVhZCBhbmQgcHJvY2VzcyB0aGUgZmlyc3QgYmxvY2ssIGFuZCB3aWxsIHJldHVybiB3aGVuIGl0CisgIGdldHMgdG8gdGhlIGVuZCBvZiB0aGF0IGJsb2NrLCBvciB3aGVuIGl0IHJ1bnMgb3V0IG9mIGRhdGEuCisKKyAgICBUaGUgWl9CTE9DSyBvcHRpb24gYXNzaXN0cyBpbiBhcHBlbmRpbmcgdG8gb3IgY29tYmluaW5nIGRlZmxhdGUgc3RyZWFtcy4KKyAgQWxzbyB0byBhc3Npc3QgaW4gdGhpcywgb24gcmV0dXJuIGluZmxhdGUoKSB3aWxsIHNldCBzdHJtLT5kYXRhX3R5cGUgdG8gdGhlCisgIG51bWJlciBvZiB1bnVzZWQgYml0cyBpbiB0aGUgbGFzdCBieXRlIHRha2VuIGZyb20gc3RybS0+bmV4dF9pbiwgcGx1cyA2NCBpZgorICBpbmZsYXRlKCkgaXMgY3VycmVudGx5IGRlY29kaW5nIHRoZSBsYXN0IGJsb2NrIGluIHRoZSBkZWZsYXRlIHN0cmVhbSwgcGx1cworICAxMjggaWYgaW5mbGF0ZSgpIHJldHVybmVkIGltbWVkaWF0ZWx5IGFmdGVyIGRlY29kaW5nIGFuIGVuZC1vZi1ibG9jayBjb2RlIG9yCisgIGRlY29kaW5nIHRoZSBjb21wbGV0ZSBoZWFkZXIgdXAgdG8ganVzdCBiZWZvcmUgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGRlZmxhdGUKKyAgc3RyZWFtLiAgVGhlIGVuZC1vZi1ibG9jayB3aWxsIG5vdCBiZSBpbmRpY2F0ZWQgdW50aWwgYWxsIG9mIHRoZSB1bmNvbXByZXNzZWQKKyAgZGF0YSBmcm9tIHRoYXQgYmxvY2sgaGFzIGJlZW4gd3JpdHRlbiB0byBzdHJtLT5uZXh0X291dC4gIFRoZSBudW1iZXIgb2YKKyAgdW51c2VkIGJpdHMgbWF5IGluIGdlbmVyYWwgYmUgZ3JlYXRlciB0aGFuIHNldmVuLCBleGNlcHQgd2hlbiBiaXQgNyBvZgorICBkYXRhX3R5cGUgaXMgc2V0LCBpbiB3aGljaCBjYXNlIHRoZSBudW1iZXIgb2YgdW51c2VkIGJpdHMgd2lsbCBiZSBsZXNzIHRoYW4KKyAgZWlnaHQuICBkYXRhX3R5cGUgaXMgc2V0IGFzIG5vdGVkIGhlcmUgZXZlcnkgdGltZSBpbmZsYXRlKCkgcmV0dXJucyBmb3IgYWxsCisgIGZsdXNoIG9wdGlvbnMsIGFuZCBzbyBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGFtb3VudCBvZiBjdXJyZW50bHkKKyAgY29uc3VtZWQgaW5wdXQgaW4gYml0cy4KKworICAgIFRoZSBaX1RSRUVTIG9wdGlvbiBiZWhhdmVzIGFzIFpfQkxPQ0sgZG9lcywgYnV0IGl0IGFsc28gcmV0dXJucyB3aGVuIHRoZQorICBlbmQgb2YgZWFjaCBkZWZsYXRlIGJsb2NrIGhlYWRlciBpcyByZWFjaGVkLCBiZWZvcmUgYW55IGFjdHVhbCBkYXRhIGluIHRoYXQKKyAgYmxvY2sgaXMgZGVjb2RlZC4gIFRoaXMgYWxsb3dzIHRoZSBjYWxsZXIgdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgdGhlCisgIGRlZmxhdGUgYmxvY2sgaGVhZGVyIGZvciBsYXRlciB1c2UgaW4gcmFuZG9tIGFjY2VzcyB3aXRoaW4gYSBkZWZsYXRlIGJsb2NrLgorICAyNTYgaXMgYWRkZWQgdG8gdGhlIHZhbHVlIG9mIHN0cm0tPmRhdGFfdHlwZSB3aGVuIGluZmxhdGUoKSByZXR1cm5zCisgIGltbWVkaWF0ZWx5IGFmdGVyIHJlYWNoaW5nIHRoZSBlbmQgb2YgdGhlIGRlZmxhdGUgYmxvY2sgaGVhZGVyLgorCisgICAgaW5mbGF0ZSgpIHNob3VsZCBub3JtYWxseSBiZSBjYWxsZWQgdW50aWwgaXQgcmV0dXJucyBaX1NUUkVBTV9FTkQgb3IgYW4KKyAgZXJyb3IuICBIb3dldmVyIGlmIGFsbCBkZWNvbXByZXNzaW9uIGlzIHRvIGJlIHBlcmZvcm1lZCBpbiBhIHNpbmdsZSBzdGVwIChhCisgIHNpbmdsZSBjYWxsIG9mIGluZmxhdGUpLCB0aGUgcGFyYW1ldGVyIGZsdXNoIHNob3VsZCBiZSBzZXQgdG8gWl9GSU5JU0guICBJbgorICB0aGlzIGNhc2UgYWxsIHBlbmRpbmcgaW5wdXQgaXMgcHJvY2Vzc2VkIGFuZCBhbGwgcGVuZGluZyBvdXRwdXQgaXMgZmx1c2hlZDsKKyAgYXZhaWxfb3V0IG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBmb3IgdGhlCisgIG9wZXJhdGlvbiB0byBjb21wbGV0ZS4gIChUaGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgbWF5IGhhdmUgYmVlbgorICBzYXZlZCBieSB0aGUgY29tcHJlc3NvciBmb3IgdGhpcyBwdXJwb3NlLikgVGhlIHVzZSBvZiBaX0ZJTklTSCBpcyBub3QKKyAgcmVxdWlyZWQgdG8gcGVyZm9ybSBhbiBpbmZsYXRpb24gaW4gb25lIHN0ZXAuICBIb3dldmVyIGl0IG1heSBiZSB1c2VkIHRvCisgIGluZm9ybSBpbmZsYXRlIHRoYXQgYSBmYXN0ZXIgYXBwcm9hY2ggY2FuIGJlIHVzZWQgZm9yIHRoZSBzaW5nbGUgaW5mbGF0ZSgpCisgIGNhbGwuICBaX0ZJTklTSCBhbHNvIGluZm9ybXMgaW5mbGF0ZSB0byBub3QgbWFpbnRhaW4gYSBzbGlkaW5nIHdpbmRvdyBpZiB0aGUKKyAgc3RyZWFtIGNvbXBsZXRlcywgd2hpY2ggcmVkdWNlcyBpbmZsYXRlJ3MgbWVtb3J5IGZvb3RwcmludC4gIElmIHRoZSBzdHJlYW0KKyAgZG9lcyBub3QgY29tcGxldGUsIGVpdGhlciBiZWNhdXNlIG5vdCBhbGwgb2YgdGhlIHN0cmVhbSBpcyBwcm92aWRlZCBvciBub3QKKyAgZW5vdWdoIG91dHB1dCBzcGFjZSBpcyBwcm92aWRlZCwgdGhlbiBhIHNsaWRpbmcgd2luZG93IHdpbGwgYmUgYWxsb2NhdGVkIGFuZAorICBpbmZsYXRlKCkgY2FuIGJlIGNhbGxlZCBhZ2FpbiB0byBjb250aW51ZSB0aGUgb3BlcmF0aW9uIGFzIGlmIFpfTk9fRkxVU0ggaGFkCisgIGJlZW4gdXNlZC4KKworICAgICBJbiB0aGlzIGltcGxlbWVudGF0aW9uLCBpbmZsYXRlKCkgYWx3YXlzIGZsdXNoZXMgYXMgbXVjaCBvdXRwdXQgYXMKKyAgcG9zc2libGUgdG8gdGhlIG91dHB1dCBidWZmZXIsIGFuZCBhbHdheXMgdXNlcyB0aGUgZmFzdGVyIGFwcHJvYWNoIG9uIHRoZQorICBmaXJzdCBjYWxsLiAgU28gdGhlIGVmZmVjdHMgb2YgdGhlIGZsdXNoIHBhcmFtZXRlciBpbiB0aGlzIGltcGxlbWVudGF0aW9uIGFyZQorICBvbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGluZmxhdGUoKSBhcyBub3RlZCBiZWxvdywgd2hlbiBpbmZsYXRlKCkgcmV0dXJucyBlYXJseQorICB3aGVuIFpfQkxPQ0sgb3IgWl9UUkVFUyBpcyB1c2VkLCBhbmQgd2hlbiBpbmZsYXRlKCkgYXZvaWRzIHRoZSBhbGxvY2F0aW9uIG9mCisgIG1lbW9yeSBmb3IgYSBzbGlkaW5nIHdpbmRvdyB3aGVuIFpfRklOSVNIIGlzIHVzZWQuCisKKyAgICAgSWYgYSBwcmVzZXQgZGljdGlvbmFyeSBpcyBuZWVkZWQgYWZ0ZXIgdGhpcyBjYWxsIChzZWUgaW5mbGF0ZVNldERpY3Rpb25hcnkKKyAgYmVsb3cpLCBpbmZsYXRlIHNldHMgc3RybS0+YWRsZXIgdG8gdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mIHRoZSBkaWN0aW9uYXJ5CisgIGNob3NlbiBieSB0aGUgY29tcHJlc3NvciBhbmQgcmV0dXJucyBaX05FRURfRElDVDsgb3RoZXJ3aXNlIGl0IHNldHMKKyAgc3RybS0+YWRsZXIgdG8gdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mIGFsbCBvdXRwdXQgcHJvZHVjZWQgc28gZmFyICh0aGF0IGlzLAorICB0b3RhbF9vdXQgYnl0ZXMpIGFuZCByZXR1cm5zIFpfT0ssIFpfU1RSRUFNX0VORCBvciBhbiBlcnJvciBjb2RlIGFzIGRlc2NyaWJlZAorICBiZWxvdy4gIEF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbSwgaW5mbGF0ZSgpIGNoZWNrcyB0aGF0IGl0cyBjb21wdXRlZCBhZGxlcjMyCisgIGNoZWNrc3VtIGlzIGVxdWFsIHRvIHRoYXQgc2F2ZWQgYnkgdGhlIGNvbXByZXNzb3IgYW5kIHJldHVybnMgWl9TVFJFQU1fRU5ECisgIG9ubHkgaWYgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QuCisKKyAgICBpbmZsYXRlKCkgY2FuIGRlY29tcHJlc3MgYW5kIGNoZWNrIGVpdGhlciB6bGliLXdyYXBwZWQgb3IgZ3ppcC13cmFwcGVkCisgIGRlZmxhdGUgZGF0YS4gIFRoZSBoZWFkZXIgdHlwZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBpZiByZXF1ZXN0ZWQgd2hlbgorICBpbml0aWFsaXppbmcgd2l0aCBpbmZsYXRlSW5pdDIoKS4gIEFueSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIGd6aXAKKyAgaGVhZGVyIGlzIG5vdCByZXRhaW5lZCwgc28gYXBwbGljYXRpb25zIHRoYXQgbmVlZCB0aGF0IGluZm9ybWF0aW9uIHNob3VsZAorICBpbnN0ZWFkIHVzZSByYXcgaW5mbGF0ZSwgc2VlIGluZmxhdGVJbml0MigpIGJlbG93LCBvciBpbmZsYXRlQmFjaygpIGFuZAorICBwZXJmb3JtIHRoZWlyIG93biBwcm9jZXNzaW5nIG9mIHRoZSBnemlwIGhlYWRlciBhbmQgdHJhaWxlci4gIFdoZW4gcHJvY2Vzc2luZworICBnemlwLXdyYXBwZWQgZGVmbGF0ZSBkYXRhLCBzdHJtLT5hZGxlcjMyIGlzIHNldCB0byB0aGUgQ1JDLTMyIG9mIHRoZSBvdXRwdXQKKyAgcHJvZHVjdGVkIHNvIGZhci4gIFRoZSBDUkMtMzIgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBnemlwIHRyYWlsZXIuCisKKyAgICBpbmZsYXRlKCkgcmV0dXJucyBaX09LIGlmIHNvbWUgcHJvZ3Jlc3MgaGFzIGJlZW4gbWFkZSAobW9yZSBpbnB1dCBwcm9jZXNzZWQKKyAgb3IgbW9yZSBvdXRwdXQgcHJvZHVjZWQpLCBaX1NUUkVBTV9FTkQgaWYgdGhlIGVuZCBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGhhcworICBiZWVuIHJlYWNoZWQgYW5kIGFsbCB1bmNvbXByZXNzZWQgb3V0cHV0IGhhcyBiZWVuIHByb2R1Y2VkLCBaX05FRURfRElDVCBpZiBhCisgIHByZXNldCBkaWN0aW9uYXJ5IGlzIG5lZWRlZCBhdCB0aGlzIHBvaW50LCBaX0RBVEFfRVJST1IgaWYgdGhlIGlucHV0IGRhdGEgd2FzCisgIGNvcnJ1cHRlZCAoaW5wdXQgc3RyZWFtIG5vdCBjb25mb3JtaW5nIHRvIHRoZSB6bGliIGZvcm1hdCBvciBpbmNvcnJlY3QgY2hlY2sKKyAgdmFsdWUpLCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0cnVjdHVyZSB3YXMgaW5jb25zaXN0ZW50IChmb3IgZXhhbXBsZQorICBuZXh0X2luIG9yIG5leHRfb3V0IHdhcyBaX05VTEwpLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCBtZW1vcnksCisgIFpfQlVGX0VSUk9SIGlmIG5vIHByb2dyZXNzIGlzIHBvc3NpYmxlIG9yIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIHJvb20gaW4gdGhlCisgIG91dHB1dCBidWZmZXIgd2hlbiBaX0ZJTklTSCBpcyB1c2VkLiAgTm90ZSB0aGF0IFpfQlVGX0VSUk9SIGlzIG5vdCBmYXRhbCwgYW5kCisgIGluZmxhdGUoKSBjYW4gYmUgY2FsbGVkIGFnYWluIHdpdGggbW9yZSBpbnB1dCBhbmQgbW9yZSBvdXRwdXQgc3BhY2UgdG8KKyAgY29udGludWUgZGVjb21wcmVzc2luZy4gIElmIFpfREFUQV9FUlJPUiBpcyByZXR1cm5lZCwgdGhlIGFwcGxpY2F0aW9uIG1heQorICB0aGVuIGNhbGwgaW5mbGF0ZVN5bmMoKSB0byBsb29rIGZvciBhIGdvb2QgY29tcHJlc3Npb24gYmxvY2sgaWYgYSBwYXJ0aWFsCisgIHJlY292ZXJ5IG9mIHRoZSBkYXRhIGlzIGRlc2lyZWQuCisqLworCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUVuZCBPRigoel9zdHJlYW1wIHN0cm0pKTsKKy8qCisgICAgIEFsbCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGlzIHN0cmVhbSBhcmUgZnJlZWQuCisgICBUaGlzIGZ1bmN0aW9uIGRpc2NhcmRzIGFueSB1bnByb2Nlc3NlZCBpbnB1dCBhbmQgZG9lcyBub3QgZmx1c2ggYW55IHBlbmRpbmcKKyAgIG91dHB1dC4KKworICAgICBpbmZsYXRlRW5kIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0YXRlCisgICB3YXMgaW5jb25zaXN0ZW50LiAgSW4gdGhlIGVycm9yIGNhc2UsIG1zZyBtYXkgYmUgc2V0IGJ1dCB0aGVuIHBvaW50cyB0byBhCisgICBzdGF0aWMgc3RyaW5nICh3aGljaCBtdXN0IG5vdCBiZSBkZWFsbG9jYXRlZCkuCisqLworCisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFkdmFuY2VkIGZ1bmN0aW9ucyAqLworCisvKgorICAgIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBuZWVkZWQgb25seSBpbiBzb21lIHNwZWNpYWwgYXBwbGljYXRpb25zLgorKi8KKworLyoKK1pFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZUluaXQyIE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgd2luZG93Qml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIG1lbUxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgc3RyYXRlZ3kpKTsKKworICAgICBUaGlzIGlzIGFub3RoZXIgdmVyc2lvbiBvZiBkZWZsYXRlSW5pdCB3aXRoIG1vcmUgY29tcHJlc3Npb24gb3B0aW9ucy4gIFRoZQorICAgZmllbGRzIG5leHRfaW4sIHphbGxvYywgemZyZWUgYW5kIG9wYXF1ZSBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBieSB0aGUKKyAgIGNhbGxlci4KKworICAgICBUaGUgbWV0aG9kIHBhcmFtZXRlciBpcyB0aGUgY29tcHJlc3Npb24gbWV0aG9kLiAgSXQgbXVzdCBiZSBaX0RFRkxBVEVEIGluCisgICB0aGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgICAgVGhlIHdpbmRvd0JpdHMgcGFyYW1ldGVyIGlzIHRoZSBiYXNlIHR3byBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBzaXplCisgICAodGhlIHNpemUgb2YgdGhlIGhpc3RvcnkgYnVmZmVyKS4gIEl0IHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgOC4uMTUgZm9yIHRoaXMKKyAgIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuICBMYXJnZXIgdmFsdWVzIG9mIHRoaXMgcGFyYW1ldGVyIHJlc3VsdCBpbiBiZXR0ZXIKKyAgIGNvbXByZXNzaW9uIGF0IHRoZSBleHBlbnNlIG9mIG1lbW9yeSB1c2FnZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE1IGlmCisgICBkZWZsYXRlSW5pdCBpcyB1c2VkIGluc3RlYWQuCisKKyAgICAgd2luZG93Qml0cyBjYW4gYWxzbyBiZSAtOC4uLTE1IGZvciByYXcgZGVmbGF0ZS4gIEluIHRoaXMgY2FzZSwgLXdpbmRvd0JpdHMKKyAgIGRldGVybWluZXMgdGhlIHdpbmRvdyBzaXplLiAgZGVmbGF0ZSgpIHdpbGwgdGhlbiBnZW5lcmF0ZSByYXcgZGVmbGF0ZSBkYXRhCisgICB3aXRoIG5vIHpsaWIgaGVhZGVyIG9yIHRyYWlsZXIsIGFuZCB3aWxsIG5vdCBjb21wdXRlIGFuIGFkbGVyMzIgY2hlY2sgdmFsdWUuCisKKyAgICAgd2luZG93Qml0cyBjYW4gYWxzbyBiZSBncmVhdGVyIHRoYW4gMTUgZm9yIG9wdGlvbmFsIGd6aXAgZW5jb2RpbmcuICBBZGQKKyAgIDE2IHRvIHdpbmRvd0JpdHMgdG8gd3JpdGUgYSBzaW1wbGUgZ3ppcCBoZWFkZXIgYW5kIHRyYWlsZXIgYXJvdW5kIHRoZQorICAgY29tcHJlc3NlZCBkYXRhIGluc3RlYWQgb2YgYSB6bGliIHdyYXBwZXIuICBUaGUgZ3ppcCBoZWFkZXIgd2lsbCBoYXZlIG5vCisgICBmaWxlIG5hbWUsIG5vIGV4dHJhIGRhdGEsIG5vIGNvbW1lbnQsIG5vIG1vZGlmaWNhdGlvbiB0aW1lIChzZXQgdG8gemVybyksIG5vCisgICBoZWFkZXIgY3JjLCBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2lsbCBiZSBzZXQgdG8gMjU1ICh1bmtub3duKS4gIElmIGEKKyAgIGd6aXAgc3RyZWFtIGlzIGJlaW5nIHdyaXR0ZW4sIHN0cm0tPmFkbGVyIGlzIGEgY3JjMzIgaW5zdGVhZCBvZiBhbiBhZGxlcjMyLgorCisgICAgIFRoZSBtZW1MZXZlbCBwYXJhbWV0ZXIgc3BlY2lmaWVzIGhvdyBtdWNoIG1lbW9yeSBzaG91bGQgYmUgYWxsb2NhdGVkCisgICBmb3IgdGhlIGludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLiAgbWVtTGV2ZWw9MSB1c2VzIG1pbmltdW0gbWVtb3J5IGJ1dCBpcworICAgc2xvdyBhbmQgcmVkdWNlcyBjb21wcmVzc2lvbiByYXRpbzsgbWVtTGV2ZWw9OSB1c2VzIG1heGltdW0gbWVtb3J5IGZvcgorICAgb3B0aW1hbCBzcGVlZC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDguICBTZWUgemNvbmYuaCBmb3IgdG90YWwgbWVtb3J5IHVzYWdlCisgICBhcyBhIGZ1bmN0aW9uIG9mIHdpbmRvd0JpdHMgYW5kIG1lbUxldmVsLgorCisgICAgIFRoZSBzdHJhdGVneSBwYXJhbWV0ZXIgaXMgdXNlZCB0byB0dW5lIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uICBVc2UgdGhlCisgICB2YWx1ZSBaX0RFRkFVTFRfU1RSQVRFR1kgZm9yIG5vcm1hbCBkYXRhLCBaX0ZJTFRFUkVEIGZvciBkYXRhIHByb2R1Y2VkIGJ5IGEKKyAgIGZpbHRlciAob3IgcHJlZGljdG9yKSwgWl9IVUZGTUFOX09OTFkgdG8gZm9yY2UgSHVmZm1hbiBlbmNvZGluZyBvbmx5IChubworICAgc3RyaW5nIG1hdGNoKSwgb3IgWl9STEUgdG8gbGltaXQgbWF0Y2ggZGlzdGFuY2VzIHRvIG9uZSAocnVuLWxlbmd0aAorICAgZW5jb2RpbmcpLiAgRmlsdGVyZWQgZGF0YSBjb25zaXN0cyBtb3N0bHkgb2Ygc21hbGwgdmFsdWVzIHdpdGggYSBzb21ld2hhdAorICAgcmFuZG9tIGRpc3RyaWJ1dGlvbi4gIEluIHRoaXMgY2FzZSwgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBpcyB0dW5lZCB0bworICAgY29tcHJlc3MgdGhlbSBiZXR0ZXIuICBUaGUgZWZmZWN0IG9mIFpfRklMVEVSRUQgaXMgdG8gZm9yY2UgbW9yZSBIdWZmbWFuCisgICBjb2RpbmcgYW5kIGxlc3Mgc3RyaW5nIG1hdGNoaW5nOyBpdCBpcyBzb21ld2hhdCBpbnRlcm1lZGlhdGUgYmV0d2VlbgorICAgWl9ERUZBVUxUX1NUUkFURUdZIGFuZCBaX0hVRkZNQU5fT05MWS4gIFpfUkxFIGlzIGRlc2lnbmVkIHRvIGJlIGFsbW9zdCBhcworICAgZmFzdCBhcyBaX0hVRkZNQU5fT05MWSwgYnV0IGdpdmUgYmV0dGVyIGNvbXByZXNzaW9uIGZvciBQTkcgaW1hZ2UgZGF0YS4gIFRoZQorICAgc3RyYXRlZ3kgcGFyYW1ldGVyIG9ubHkgYWZmZWN0cyB0aGUgY29tcHJlc3Npb24gcmF0aW8gYnV0IG5vdCB0aGUKKyAgIGNvcnJlY3RuZXNzIG9mIHRoZSBjb21wcmVzc2VkIG91dHB1dCBldmVuIGlmIGl0IGlzIG5vdCBzZXQgYXBwcm9wcmlhdGVseS4KKyAgIFpfRklYRUQgcHJldmVudHMgdGhlIHVzZSBvZiBkeW5hbWljIEh1ZmZtYW4gY29kZXMsIGFsbG93aW5nIGZvciBhIHNpbXBsZXIKKyAgIGRlY29kZXIgZm9yIHNwZWNpYWwgYXBwbGljYXRpb25zLgorCisgICAgIGRlZmxhdGVJbml0MiByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gKKyAgIG1lbW9yeSwgWl9TVFJFQU1fRVJST1IgaWYgYW55IHBhcmFtZXRlciBpcyBpbnZhbGlkIChzdWNoIGFzIGFuIGludmFsaWQKKyAgIG1ldGhvZCksIG9yIFpfVkVSU0lPTl9FUlJPUiBpZiB0aGUgemxpYiBsaWJyYXJ5IHZlcnNpb24gKHpsaWJfdmVyc2lvbikgaXMKKyAgIGluY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIGFzc3VtZWQgYnkgdGhlIGNhbGxlciAoWkxJQl9WRVJTSU9OKS4gIG1zZyBpcworICAgc2V0IHRvIG51bGwgaWYgdGhlcmUgaXMgbm8gZXJyb3IgbWVzc2FnZS4gIGRlZmxhdGVJbml0MiBkb2VzIG5vdCBwZXJmb3JtIGFueQorICAgY29tcHJlc3Npb246IHRoaXMgd2lsbCBiZSBkb25lIGJ5IGRlZmxhdGUoKS4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVNldERpY3Rpb25hcnkgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnl0ZWYgKmRpY3Rpb25hcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1SW50ICBkaWN0TGVuZ3RoKSk7CisvKgorICAgICBJbml0aWFsaXplcyB0aGUgY29tcHJlc3Npb24gZGljdGlvbmFyeSBmcm9tIHRoZSBnaXZlbiBieXRlIHNlcXVlbmNlCisgICB3aXRob3V0IHByb2R1Y2luZyBhbnkgY29tcHJlc3NlZCBvdXRwdXQuICBXaGVuIHVzaW5nIHRoZSB6bGliIGZvcm1hdCwgdGhpcworICAgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVmbGF0ZUluaXQsIGRlZmxhdGVJbml0MiBvcgorICAgZGVmbGF0ZVJlc2V0LCBhbmQgYmVmb3JlIGFueSBjYWxsIG9mIGRlZmxhdGUuICBXaGVuIGRvaW5nIHJhdyBkZWZsYXRlLCB0aGlzCisgICBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBlaXRoZXIgYmVmb3JlIGFueSBjYWxsIG9mIGRlZmxhdGUsIG9yIGltbWVkaWF0ZWx5CisgICBhZnRlciB0aGUgY29tcGxldGlvbiBvZiBhIGRlZmxhdGUgYmxvY2ssIGkuZS4gYWZ0ZXIgYWxsIGlucHV0IGhhcyBiZWVuCisgICBjb25zdW1lZCBhbmQgYWxsIG91dHB1dCBoYXMgYmVlbiBkZWxpdmVyZWQgd2hlbiB1c2luZyBhbnkgb2YgdGhlIGZsdXNoCisgICBvcHRpb25zIFpfQkxPQ0ssIFpfUEFSVElBTF9GTFVTSCwgWl9TWU5DX0ZMVVNILCBvciBaX0ZVTExfRkxVU0guICBUaGUKKyAgIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvciBtdXN0IHVzZSBleGFjdGx5IHRoZSBzYW1lIGRpY3Rpb25hcnkgKHNlZQorICAgaW5mbGF0ZVNldERpY3Rpb25hcnkpLgorCisgICAgIFRoZSBkaWN0aW9uYXJ5IHNob3VsZCBjb25zaXN0IG9mIHN0cmluZ3MgKGJ5dGUgc2VxdWVuY2VzKSB0aGF0IGFyZSBsaWtlbHkKKyAgIHRvIGJlIGVuY291bnRlcmVkIGxhdGVyIGluIHRoZSBkYXRhIHRvIGJlIGNvbXByZXNzZWQsIHdpdGggdGhlIG1vc3QgY29tbW9ubHkKKyAgIHVzZWQgc3RyaW5ncyBwcmVmZXJhYmx5IHB1dCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGRpY3Rpb25hcnkuICBVc2luZyBhCisgICBkaWN0aW9uYXJ5IGlzIG1vc3QgdXNlZnVsIHdoZW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCBpcyBzaG9ydCBhbmQgY2FuIGJlCisgICBwcmVkaWN0ZWQgd2l0aCBnb29kIGFjY3VyYWN5OyB0aGUgZGF0YSBjYW4gdGhlbiBiZSBjb21wcmVzc2VkIGJldHRlciB0aGFuCisgICB3aXRoIHRoZSBkZWZhdWx0IGVtcHR5IGRpY3Rpb25hcnkuCisKKyAgICAgRGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIHRoZSBjb21wcmVzc2lvbiBkYXRhIHN0cnVjdHVyZXMgc2VsZWN0ZWQgYnkKKyAgIGRlZmxhdGVJbml0IG9yIGRlZmxhdGVJbml0MiwgYSBwYXJ0IG9mIHRoZSBkaWN0aW9uYXJ5IG1heSBpbiBlZmZlY3QgYmUKKyAgIGRpc2NhcmRlZCwgZm9yIGV4YW1wbGUgaWYgdGhlIGRpY3Rpb25hcnkgaXMgbGFyZ2VyIHRoYW4gdGhlIHdpbmRvdyBzaXplCisgICBwcm92aWRlZCBpbiBkZWZsYXRlSW5pdCBvciBkZWZsYXRlSW5pdDIuICBUaHVzIHRoZSBzdHJpbmdzIG1vc3QgbGlrZWx5IHRvIGJlCisgICB1c2VmdWwgc2hvdWxkIGJlIHB1dCBhdCB0aGUgZW5kIG9mIHRoZSBkaWN0aW9uYXJ5LCBub3QgYXQgdGhlIGZyb250LiAgSW4KKyAgIGFkZGl0aW9uLCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBkZWZsYXRlIHdpbGwgdXNlIGF0IG1vc3QgdGhlIHdpbmRvdworICAgc2l6ZSBtaW51cyAyNjIgYnl0ZXMgb2YgdGhlIHByb3ZpZGVkIGRpY3Rpb25hcnkuCisKKyAgICAgVXBvbiByZXR1cm4gb2YgdGhpcyBmdW5jdGlvbiwgc3RybS0+YWRsZXIgaXMgc2V0IHRvIHRoZSBhZGxlcjMyIHZhbHVlCisgICBvZiB0aGUgZGljdGlvbmFyeTsgdGhlIGRlY29tcHJlc3NvciBtYXkgbGF0ZXIgdXNlIHRoaXMgdmFsdWUgdG8gZGV0ZXJtaW5lCisgICB3aGljaCBkaWN0aW9uYXJ5IGhhcyBiZWVuIHVzZWQgYnkgdGhlIGNvbXByZXNzb3IuICAoVGhlIGFkbGVyMzIgdmFsdWUKKyAgIGFwcGxpZXMgdG8gdGhlIHdob2xlIGRpY3Rpb25hcnkgZXZlbiBpZiBvbmx5IGEgc3Vic2V0IG9mIHRoZSBkaWN0aW9uYXJ5IGlzCisgICBhY3R1YWxseSB1c2VkIGJ5IHRoZSBjb21wcmVzc29yLikgSWYgYSByYXcgZGVmbGF0ZSB3YXMgcmVxdWVzdGVkLCB0aGVuIHRoZQorICAgYWRsZXIzMiB2YWx1ZSBpcyBub3QgY29tcHV0ZWQgYW5kIHN0cm0tPmFkbGVyIGlzIG5vdCBzZXQuCisKKyAgICAgZGVmbGF0ZVNldERpY3Rpb25hcnkgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIGEKKyAgIHBhcmFtZXRlciBpcyBpbnZhbGlkIChlLmcuICBkaWN0aW9uYXJ5IGJlaW5nIFpfTlVMTCkgb3IgdGhlIHN0cmVhbSBzdGF0ZSBpcworICAgaW5jb25zaXN0ZW50IChmb3IgZXhhbXBsZSBpZiBkZWZsYXRlIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciB0aGlzIHN0cmVhbQorICAgb3IgaWYgbm90IGF0IGEgYmxvY2sgYm91bmRhcnkgZm9yIHJhdyBkZWZsYXRlKS4gIGRlZmxhdGVTZXREaWN0aW9uYXJ5IGRvZXMKKyAgIG5vdCBwZXJmb3JtIGFueSBjb21wcmVzc2lvbjogdGhpcyB3aWxsIGJlIGRvbmUgYnkgZGVmbGF0ZSgpLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlQ29weSBPRigoel9zdHJlYW1wIGRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6X3N0cmVhbXAgc291cmNlKSk7CisvKgorICAgICBTZXRzIHRoZSBkZXN0aW5hdGlvbiBzdHJlYW0gYXMgYSBjb21wbGV0ZSBjb3B5IG9mIHRoZSBzb3VyY2Ugc3RyZWFtLgorCisgICAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWZ1bCB3aGVuIHNldmVyYWwgY29tcHJlc3Npb24gc3RyYXRlZ2llcyB3aWxsIGJlCisgICB0cmllZCwgZm9yIGV4YW1wbGUgd2hlbiB0aGVyZSBhcmUgc2V2ZXJhbCB3YXlzIG9mIHByZS1wcm9jZXNzaW5nIHRoZSBpbnB1dAorICAgZGF0YSB3aXRoIGEgZmlsdGVyLiAgVGhlIHN0cmVhbXMgdGhhdCB3aWxsIGJlIGRpc2NhcmRlZCBzaG91bGQgdGhlbiBiZSBmcmVlZAorICAgYnkgY2FsbGluZyBkZWZsYXRlRW5kLiAgTm90ZSB0aGF0IGRlZmxhdGVDb3B5IGR1cGxpY2F0ZXMgdGhlIGludGVybmFsCisgICBjb21wcmVzc2lvbiBzdGF0ZSB3aGljaCBjYW4gYmUgcXVpdGUgbGFyZ2UsIHNvIHRoaXMgc3RyYXRlZ3kgaXMgc2xvdyBhbmQgY2FuCisgICBjb25zdW1lIGxvdHMgb2YgbWVtb3J5LgorCisgICAgIGRlZmxhdGVDb3B5IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90CisgICBlbm91Z2ggbWVtb3J5LCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50CisgICAoc3VjaCBhcyB6YWxsb2MgYmVpbmcgWl9OVUxMKS4gIG1zZyBpcyBsZWZ0IHVuY2hhbmdlZCBpbiBib3RoIHNvdXJjZSBhbmQKKyAgIGRlc3RpbmF0aW9uLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlUmVzZXQgT0YoKHpfc3RyZWFtcCBzdHJtKSk7CisvKgorICAgICBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gZGVmbGF0ZUVuZCBmb2xsb3dlZCBieSBkZWZsYXRlSW5pdCwKKyAgIGJ1dCBkb2VzIG5vdCBmcmVlIGFuZCByZWFsbG9jYXRlIGFsbCB0aGUgaW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUuICBUaGUKKyAgIHN0cmVhbSB3aWxsIGtlZXAgdGhlIHNhbWUgY29tcHJlc3Npb24gbGV2ZWwgYW5kIGFueSBvdGhlciBhdHRyaWJ1dGVzIHRoYXQKKyAgIG1heSBoYXZlIGJlZW4gc2V0IGJ5IGRlZmxhdGVJbml0Mi4KKworICAgICBkZWZsYXRlUmVzZXQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UKKyAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50IChzdWNoIGFzIHphbGxvYyBvciBzdGF0ZSBiZWluZyBaX05VTEwpLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlUGFyYW1zIE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyYXRlZ3kpKTsKKy8qCisgICAgIER5bmFtaWNhbGx5IHVwZGF0ZSB0aGUgY29tcHJlc3Npb24gbGV2ZWwgYW5kIGNvbXByZXNzaW9uIHN0cmF0ZWd5LiAgVGhlCisgICBpbnRlcnByZXRhdGlvbiBvZiBsZXZlbCBhbmQgc3RyYXRlZ3kgaXMgYXMgaW4gZGVmbGF0ZUluaXQyLiAgVGhpcyBjYW4gYmUKKyAgIHVzZWQgdG8gc3dpdGNoIGJldHdlZW4gY29tcHJlc3Npb24gYW5kIHN0cmFpZ2h0IGNvcHkgb2YgdGhlIGlucHV0IGRhdGEsIG9yCisgICB0byBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQga2luZCBvZiBpbnB1dCBkYXRhIHJlcXVpcmluZyBhIGRpZmZlcmVudCBzdHJhdGVneS4KKyAgIElmIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBpcyBjaGFuZ2VkLCB0aGUgaW5wdXQgYXZhaWxhYmxlIHNvIGZhciBpcworICAgY29tcHJlc3NlZCB3aXRoIHRoZSBvbGQgbGV2ZWwgKGFuZCBtYXkgYmUgZmx1c2hlZCk7IHRoZSBuZXcgbGV2ZWwgd2lsbCB0YWtlCisgICBlZmZlY3Qgb25seSBhdCB0aGUgbmV4dCBjYWxsIG9mIGRlZmxhdGUoKS4KKworICAgICBCZWZvcmUgdGhlIGNhbGwgb2YgZGVmbGF0ZVBhcmFtcywgdGhlIHN0cmVhbSBzdGF0ZSBtdXN0IGJlIHNldCBhcyBmb3IKKyAgIGEgY2FsbCBvZiBkZWZsYXRlKCksIHNpbmNlIHRoZSBjdXJyZW50bHkgYXZhaWxhYmxlIGlucHV0IG1heSBoYXZlIHRvIGJlCisgICBjb21wcmVzc2VkIGFuZCBmbHVzaGVkLiAgSW4gcGFydGljdWxhciwgc3RybS0+YXZhaWxfb3V0IG11c3QgYmUgbm9uLXplcm8uCisKKyAgICAgZGVmbGF0ZVBhcmFtcyByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQorICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQgb3IgaWYgYSBwYXJhbWV0ZXIgd2FzIGludmFsaWQsIFpfQlVGX0VSUk9SIGlmCisgICBzdHJtLT5hdmFpbF9vdXQgd2FzIHplcm8uCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVUdW5lIE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBnb29kX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhfbGF6eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuaWNlX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXhfY2hhaW4pKTsKKy8qCisgICAgIEZpbmUgdHVuZSBkZWZsYXRlJ3MgaW50ZXJuYWwgY29tcHJlc3Npb24gcGFyYW1ldGVycy4gIFRoaXMgc2hvdWxkIG9ubHkgYmUKKyAgIHVzZWQgYnkgc29tZW9uZSB3aG8gdW5kZXJzdGFuZHMgdGhlIGFsZ29yaXRobSB1c2VkIGJ5IHpsaWIncyBkZWZsYXRlIGZvcgorICAgc2VhcmNoaW5nIGZvciB0aGUgYmVzdCBtYXRjaGluZyBzdHJpbmcsIGFuZCBldmVuIHRoZW4gb25seSBieSB0aGUgbW9zdAorICAgZmFuYXRpYyBvcHRpbWl6ZXIgdHJ5aW5nIHRvIHNxdWVlemUgb3V0IHRoZSBsYXN0IGNvbXByZXNzZWQgYml0IGZvciB0aGVpcgorICAgc3BlY2lmaWMgaW5wdXQgZGF0YS4gIFJlYWQgdGhlIGRlZmxhdGUuYyBzb3VyY2UgY29kZSBmb3IgdGhlIG1lYW5pbmcgb2YgdGhlCisgICBtYXhfbGF6eSwgZ29vZF9sZW5ndGgsIG5pY2VfbGVuZ3RoLCBhbmQgbWF4X2NoYWluIHBhcmFtZXRlcnMuCisKKyAgICAgZGVmbGF0ZVR1bmUoKSBjYW4gYmUgY2FsbGVkIGFmdGVyIGRlZmxhdGVJbml0KCkgb3IgZGVmbGF0ZUluaXQyKCksIGFuZAorICAgcmV0dXJucyBaX09LIG9uIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGZvciBhbiBpbnZhbGlkIGRlZmxhdGUgc3RyZWFtLgorICovCisKK1pFWFRFUk4gdUxvbmcgWkVYUE9SVCBkZWZsYXRlQm91bmQgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUxvbmcgc291cmNlTGVuKSk7CisvKgorICAgICBkZWZsYXRlQm91bmQoKSByZXR1cm5zIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSBjb21wcmVzc2VkIHNpemUgYWZ0ZXIKKyAgIGRlZmxhdGlvbiBvZiBzb3VyY2VMZW4gYnl0ZXMuICBJdCBtdXN0IGJlIGNhbGxlZCBhZnRlciBkZWZsYXRlSW5pdCgpIG9yCisgICBkZWZsYXRlSW5pdDIoKSwgYW5kIGFmdGVyIGRlZmxhdGVTZXRIZWFkZXIoKSwgaWYgdXNlZC4gIFRoaXMgd291bGQgYmUgdXNlZAorICAgdG8gYWxsb2NhdGUgYW4gb3V0cHV0IGJ1ZmZlciBmb3IgZGVmbGF0aW9uIGluIGEgc2luZ2xlIHBhc3MsIGFuZCBzbyB3b3VsZCBiZQorICAgY2FsbGVkIGJlZm9yZSBkZWZsYXRlKCkuICBJZiB0aGF0IGZpcnN0IGRlZmxhdGUoKSBjYWxsIGlzIHByb3ZpZGVkIHRoZQorICAgc291cmNlTGVuIGlucHV0IGJ5dGVzLCBhbiBvdXRwdXQgYnVmZmVyIGFsbG9jYXRlZCB0byB0aGUgc2l6ZSByZXR1cm5lZCBieQorICAgZGVmbGF0ZUJvdW5kKCksIGFuZCB0aGUgZmx1c2ggdmFsdWUgWl9GSU5JU0gsIHRoZW4gZGVmbGF0ZSgpIGlzIGd1YXJhbnRlZWQKKyAgIHRvIHJldHVybiBaX1NUUkVBTV9FTkQuICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIHRoZSBjb21wcmVzc2VkIHNpemUgdG8KKyAgIGJlIGxhcmdlciB0aGFuIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBkZWZsYXRlQm91bmQoKSBpZiBmbHVzaCBvcHRpb25zIG90aGVyCisgICB0aGFuIFpfRklOSVNIIG9yIFpfTk9fRkxVU0ggYXJlIHVzZWQuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVQZW5kaW5nIE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpwZW5kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpiaXRzKSk7CisvKgorICAgICBkZWZsYXRlUGVuZGluZygpIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhbmQgYml0cyBvZiBvdXRwdXQgdGhhdCBoYXZlCisgICBiZWVuIGdlbmVyYXRlZCwgYnV0IG5vdCB5ZXQgcHJvdmlkZWQgaW4gdGhlIGF2YWlsYWJsZSBvdXRwdXQuICBUaGUgYnl0ZXMgbm90CisgICBwcm92aWRlZCB3b3VsZCBiZSBkdWUgdG8gdGhlIGF2YWlsYWJsZSBvdXRwdXQgc3BhY2UgaGF2aW5nIGJlaW5nIGNvbnN1bWVkLgorICAgVGhlIG51bWJlciBvZiBiaXRzIG9mIG91dHB1dCBub3QgcHJvdmlkZWQgYXJlIGJldHdlZW4gMCBhbmQgNywgd2hlcmUgdGhleQorICAgYXdhaXQgbW9yZSBiaXRzIHRvIGpvaW4gdGhlbSBpbiBvcmRlciB0byBmaWxsIG91dCBhIGZ1bGwgYnl0ZS4gIElmIHBlbmRpbmcKKyAgIG9yIGJpdHMgYXJlIFpfTlVMTCwgdGhlbiB0aG9zZSB2YWx1ZXMgYXJlIG5vdCBzZXQuCisKKyAgICAgZGVmbGF0ZVBlbmRpbmcgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UKKyAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50LgorICovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVByaW1lIE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUpKTsKKy8qCisgICAgIGRlZmxhdGVQcmltZSgpIGluc2VydHMgYml0cyBpbiB0aGUgZGVmbGF0ZSBvdXRwdXQgc3RyZWFtLiAgVGhlIGludGVudAorICAgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3RhcnQgb2ZmIHRoZSBkZWZsYXRlIG91dHB1dCB3aXRoIHRoZSBiaXRzCisgICBsZWZ0b3ZlciBmcm9tIGEgcHJldmlvdXMgZGVmbGF0ZSBzdHJlYW0gd2hlbiBhcHBlbmRpbmcgdG8gaXQuICBBcyBzdWNoLCB0aGlzCisgICBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkIGZvciByYXcgZGVmbGF0ZSwgYW5kIG11c3QgYmUgdXNlZCBiZWZvcmUgdGhlIGZpcnN0CisgICBkZWZsYXRlKCkgY2FsbCBhZnRlciBhIGRlZmxhdGVJbml0MigpIG9yIGRlZmxhdGVSZXNldCgpLiAgYml0cyBtdXN0IGJlIGxlc3MKKyAgIHRoYW4gb3IgZXF1YWwgdG8gMTYsIGFuZCB0aGF0IG1hbnkgb2YgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgdmFsdWUKKyAgIHdpbGwgYmUgaW5zZXJ0ZWQgaW4gdGhlIG91dHB1dC4KKworICAgICBkZWZsYXRlUHJpbWUgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfQlVGX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCisgICByb29tIGluIHRoZSBpbnRlcm5hbCBidWZmZXIgdG8gaW5zZXJ0IHRoZSBiaXRzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUKKyAgIHNvdXJjZSBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVNldEhlYWRlciBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd6X2hlYWRlcnAgaGVhZCkpOworLyoKKyAgICAgZGVmbGF0ZVNldEhlYWRlcigpIHByb3ZpZGVzIGd6aXAgaGVhZGVyIGluZm9ybWF0aW9uIGZvciB3aGVuIGEgZ3ppcAorICAgc3RyZWFtIGlzIHJlcXVlc3RlZCBieSBkZWZsYXRlSW5pdDIoKS4gIGRlZmxhdGVTZXRIZWFkZXIoKSBtYXkgYmUgY2FsbGVkCisgICBhZnRlciBkZWZsYXRlSW5pdDIoKSBvciBkZWZsYXRlUmVzZXQoKSBhbmQgYmVmb3JlIHRoZSBmaXJzdCBjYWxsIG9mCisgICBkZWZsYXRlKCkuICBUaGUgdGV4dCwgdGltZSwgb3MsIGV4dHJhIGZpZWxkLCBuYW1lLCBhbmQgY29tbWVudCBpbmZvcm1hdGlvbgorICAgaW4gdGhlIHByb3ZpZGVkIGd6X2hlYWRlciBzdHJ1Y3R1cmUgYXJlIHdyaXR0ZW4gdG8gdGhlIGd6aXAgaGVhZGVyICh4ZmxhZyBpcworICAgaWdub3JlZCAtLSB0aGUgZXh0cmEgZmxhZ3MgYXJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIGNvbXByZXNzaW9uIGxldmVsKS4gIFRoZQorICAgY2FsbGVyIG11c3QgYXNzdXJlIHRoYXQsIGlmIG5vdCBaX05VTEwsIG5hbWUgYW5kIGNvbW1lbnQgYXJlIHRlcm1pbmF0ZWQgd2l0aAorICAgYSB6ZXJvIGJ5dGUsIGFuZCB0aGF0IGlmIGV4dHJhIGlzIG5vdCBaX05VTEwsIHRoYXQgZXh0cmFfbGVuIGJ5dGVzIGFyZQorICAgYXZhaWxhYmxlIHRoZXJlLiAgSWYgaGNyYyBpcyB0cnVlLCBhIGd6aXAgaGVhZGVyIGNyYyBpcyBpbmNsdWRlZC4gIE5vdGUgdGhhdAorICAgdGhlIGN1cnJlbnQgdmVyc2lvbnMgb2YgdGhlIGNvbW1hbmQtbGluZSB2ZXJzaW9uIG9mIGd6aXAgKHVwIHRocm91Z2ggdmVyc2lvbgorICAgMS4zLngpIGRvIG5vdCBzdXBwb3J0IGhlYWRlciBjcmMncywgYW5kIHdpbGwgcmVwb3J0IHRoYXQgaXQgaXMgYSAibXVsdGktcGFydAorICAgZ3ppcCBmaWxlIiBhbmQgZ2l2ZSB1cC4KKworICAgICBJZiBkZWZsYXRlU2V0SGVhZGVyIGlzIG5vdCB1c2VkLCB0aGUgZGVmYXVsdCBnemlwIGhlYWRlciBoYXMgdGV4dCBmYWxzZSwKKyAgIHRoZSB0aW1lIHNldCB0byB6ZXJvLCBhbmQgb3Mgc2V0IHRvIDI1NSwgd2l0aCBubyBleHRyYSwgbmFtZSwgb3IgY29tbWVudAorICAgZmllbGRzLiAgVGhlIGd6aXAgaGVhZGVyIGlzIHJldHVybmVkIHRvIHRoZSBkZWZhdWx0IHN0YXRlIGJ5IGRlZmxhdGVSZXNldCgpLgorCisgICAgIGRlZmxhdGVTZXRIZWFkZXIgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UKKyAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50LgorKi8KKworLyoKK1pFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUluaXQyIE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHdpbmRvd0JpdHMpKTsKKworICAgICBUaGlzIGlzIGFub3RoZXIgdmVyc2lvbiBvZiBpbmZsYXRlSW5pdCB3aXRoIGFuIGV4dHJhIHBhcmFtZXRlci4gIFRoZQorICAgZmllbGRzIG5leHRfaW4sIGF2YWlsX2luLCB6YWxsb2MsIHpmcmVlIGFuZCBvcGFxdWUgbXVzdCBiZSBpbml0aWFsaXplZAorICAgYmVmb3JlIGJ5IHRoZSBjYWxsZXIuCisKKyAgICAgVGhlIHdpbmRvd0JpdHMgcGFyYW1ldGVyIGlzIHRoZSBiYXNlIHR3byBsb2dhcml0aG0gb2YgdGhlIG1heGltdW0gd2luZG93CisgICBzaXplICh0aGUgc2l6ZSBvZiB0aGUgaGlzdG9yeSBidWZmZXIpLiAgSXQgc2hvdWxkIGJlIGluIHRoZSByYW5nZSA4Li4xNSBmb3IKKyAgIHRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE1IGlmIGluZmxhdGVJbml0IGlzIHVzZWQKKyAgIGluc3RlYWQuICB3aW5kb3dCaXRzIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB3aW5kb3dCaXRzIHZhbHVlCisgICBwcm92aWRlZCB0byBkZWZsYXRlSW5pdDIoKSB3aGlsZSBjb21wcmVzc2luZywgb3IgaXQgbXVzdCBiZSBlcXVhbCB0byAxNSBpZgorICAgZGVmbGF0ZUluaXQyKCkgd2FzIG5vdCB1c2VkLiAgSWYgYSBjb21wcmVzc2VkIHN0cmVhbSB3aXRoIGEgbGFyZ2VyIHdpbmRvdworICAgc2l6ZSBpcyBnaXZlbiBhcyBpbnB1dCwgaW5mbGF0ZSgpIHdpbGwgcmV0dXJuIHdpdGggdGhlIGVycm9yIGNvZGUKKyAgIFpfREFUQV9FUlJPUiBpbnN0ZWFkIG9mIHRyeWluZyB0byBhbGxvY2F0ZSBhIGxhcmdlciB3aW5kb3cuCisKKyAgICAgd2luZG93Qml0cyBjYW4gYWxzbyBiZSB6ZXJvIHRvIHJlcXVlc3QgdGhhdCBpbmZsYXRlIHVzZSB0aGUgd2luZG93IHNpemUgaW4KKyAgIHRoZSB6bGliIGhlYWRlciBvZiB0aGUgY29tcHJlc3NlZCBzdHJlYW0uCisKKyAgICAgd2luZG93Qml0cyBjYW4gYWxzbyBiZSAtOC4uLTE1IGZvciByYXcgaW5mbGF0ZS4gIEluIHRoaXMgY2FzZSwgLXdpbmRvd0JpdHMKKyAgIGRldGVybWluZXMgdGhlIHdpbmRvdyBzaXplLiAgaW5mbGF0ZSgpIHdpbGwgdGhlbiBwcm9jZXNzIHJhdyBkZWZsYXRlIGRhdGEsCisgICBub3QgbG9va2luZyBmb3IgYSB6bGliIG9yIGd6aXAgaGVhZGVyLCBub3QgZ2VuZXJhdGluZyBhIGNoZWNrIHZhbHVlLCBhbmQgbm90CisgICBsb29raW5nIGZvciBhbnkgY2hlY2sgdmFsdWVzIGZvciBjb21wYXJpc29uIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbS4gIFRoaXMKKyAgIGlzIGZvciB1c2Ugd2l0aCBvdGhlciBmb3JtYXRzIHRoYXQgdXNlIHRoZSBkZWZsYXRlIGNvbXByZXNzZWQgZGF0YSBmb3JtYXQKKyAgIHN1Y2ggYXMgemlwLiAgVGhvc2UgZm9ybWF0cyBwcm92aWRlIHRoZWlyIG93biBjaGVjayB2YWx1ZXMuICBJZiBhIGN1c3RvbQorICAgZm9ybWF0IGlzIGRldmVsb3BlZCB1c2luZyB0aGUgcmF3IGRlZmxhdGUgZm9ybWF0IGZvciBjb21wcmVzc2VkIGRhdGEsIGl0IGlzCisgICByZWNvbW1lbmRlZCB0aGF0IGEgY2hlY2sgdmFsdWUgc3VjaCBhcyBhbiBhZGxlcjMyIG9yIGEgY3JjMzIgYmUgYXBwbGllZCB0bworICAgdGhlIHVuY29tcHJlc3NlZCBkYXRhIGFzIGlzIGRvbmUgaW4gdGhlIHpsaWIsIGd6aXAsIGFuZCB6aXAgZm9ybWF0cy4gIEZvcgorICAgbW9zdCBhcHBsaWNhdGlvbnMsIHRoZSB6bGliIGZvcm1hdCBzaG91bGQgYmUgdXNlZCBhcyBpcy4gIE5vdGUgdGhhdCBjb21tZW50cworICAgYWJvdmUgb24gdGhlIHVzZSBpbiBkZWZsYXRlSW5pdDIoKSBhcHBsaWVzIHRvIHRoZSBtYWduaXR1ZGUgb2Ygd2luZG93Qml0cy4KKworICAgICB3aW5kb3dCaXRzIGNhbiBhbHNvIGJlIGdyZWF0ZXIgdGhhbiAxNSBmb3Igb3B0aW9uYWwgZ3ppcCBkZWNvZGluZy4gIEFkZAorICAgMzIgdG8gd2luZG93Qml0cyB0byBlbmFibGUgemxpYiBhbmQgZ3ppcCBkZWNvZGluZyB3aXRoIGF1dG9tYXRpYyBoZWFkZXIKKyAgIGRldGVjdGlvbiwgb3IgYWRkIDE2IHRvIGRlY29kZSBvbmx5IHRoZSBnemlwIGZvcm1hdCAodGhlIHpsaWIgZm9ybWF0IHdpbGwKKyAgIHJldHVybiBhIFpfREFUQV9FUlJPUikuICBJZiBhIGd6aXAgc3RyZWFtIGlzIGJlaW5nIGRlY29kZWQsIHN0cm0tPmFkbGVyIGlzIGEKKyAgIGNyYzMyIGluc3RlYWQgb2YgYW4gYWRsZXIzMi4KKworICAgICBpbmZsYXRlSW5pdDIgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCisgICBtZW1vcnksIFpfVkVSU0lPTl9FUlJPUiBpZiB0aGUgemxpYiBsaWJyYXJ5IHZlcnNpb24gaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlCisgICB2ZXJzaW9uIGFzc3VtZWQgYnkgdGhlIGNhbGxlciwgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHBhcmFtZXRlcnMgYXJlCisgICBpbnZhbGlkLCBzdWNoIGFzIGEgbnVsbCBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUuICBtc2cgaXMgc2V0IHRvIG51bGwgaWYKKyAgIHRoZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2UuICBpbmZsYXRlSW5pdDIgZG9lcyBub3QgcGVyZm9ybSBhbnkgZGVjb21wcmVzc2lvbgorICAgYXBhcnQgZnJvbSBwb3NzaWJseSByZWFkaW5nIHRoZSB6bGliIGhlYWRlciBpZiBwcmVzZW50OiBhY3R1YWwgZGVjb21wcmVzc2lvbgorICAgd2lsbCBiZSBkb25lIGJ5IGluZmxhdGUoKS4gIChTbyBuZXh0X2luIGFuZCBhdmFpbF9pbiBtYXkgYmUgbW9kaWZpZWQsIGJ1dAorICAgbmV4dF9vdXQgYW5kIGF2YWlsX291dCBhcmUgdW51c2VkIGFuZCB1bmNoYW5nZWQuKSBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbgorICAgb2YgaW5mbGF0ZUluaXQyKCkgZG9lcyBub3QgcHJvY2VzcyBhbnkgaGVhZGVyIGluZm9ybWF0aW9uIC0tIHRoYXQgaXMKKyAgIGRlZmVycmVkIHVudGlsIGluZmxhdGUoKSBpcyBjYWxsZWQuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVTZXREaWN0aW9uYXJ5IE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ5dGVmICpkaWN0aW9uYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCAgZGljdExlbmd0aCkpOworLyoKKyAgICAgSW5pdGlhbGl6ZXMgdGhlIGRlY29tcHJlc3Npb24gZGljdGlvbmFyeSBmcm9tIHRoZSBnaXZlbiB1bmNvbXByZXNzZWQgYnl0ZQorICAgc2VxdWVuY2UuICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGEgY2FsbCBvZiBpbmZsYXRlLAorICAgaWYgdGhhdCBjYWxsIHJldHVybmVkIFpfTkVFRF9ESUNULiAgVGhlIGRpY3Rpb25hcnkgY2hvc2VuIGJ5IHRoZSBjb21wcmVzc29yCisgICBjYW4gYmUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBhZGxlcjMyIHZhbHVlIHJldHVybmVkIGJ5IHRoYXQgY2FsbCBvZiBpbmZsYXRlLgorICAgVGhlIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvciBtdXN0IHVzZSBleGFjdGx5IHRoZSBzYW1lIGRpY3Rpb25hcnkgKHNlZQorICAgZGVmbGF0ZVNldERpY3Rpb25hcnkpLiAgRm9yIHJhdyBpbmZsYXRlLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYXQgYW55CisgICB0aW1lIHRvIHNldCB0aGUgZGljdGlvbmFyeS4gIElmIHRoZSBwcm92aWRlZCBkaWN0aW9uYXJ5IGlzIHNtYWxsZXIgdGhhbiB0aGUKKyAgIHdpbmRvdyBhbmQgdGhlcmUgaXMgYWxyZWFkeSBkYXRhIGluIHRoZSB3aW5kb3csIHRoZW4gdGhlIHByb3ZpZGVkIGRpY3Rpb25hcnkKKyAgIHdpbGwgYW1lbmQgd2hhdCdzIHRoZXJlLiAgVGhlIGFwcGxpY2F0aW9uIG11c3QgaW5zdXJlIHRoYXQgdGhlIGRpY3Rpb25hcnkKKyAgIHRoYXQgd2FzIHVzZWQgZm9yIGNvbXByZXNzaW9uIGlzIHByb3ZpZGVkLgorCisgICAgIGluZmxhdGVTZXREaWN0aW9uYXJ5IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX1NUUkVBTV9FUlJPUiBpZiBhCisgICBwYXJhbWV0ZXIgaXMgaW52YWxpZCAoZS5nLiAgZGljdGlvbmFyeSBiZWluZyBaX05VTEwpIG9yIHRoZSBzdHJlYW0gc3RhdGUgaXMKKyAgIGluY29uc2lzdGVudCwgWl9EQVRBX0VSUk9SIGlmIHRoZSBnaXZlbiBkaWN0aW9uYXJ5IGRvZXNuJ3QgbWF0Y2ggdGhlCisgICBleHBlY3RlZCBvbmUgKGluY29ycmVjdCBhZGxlcjMyIHZhbHVlKS4gIGluZmxhdGVTZXREaWN0aW9uYXJ5IGRvZXMgbm90CisgICBwZXJmb3JtIGFueSBkZWNvbXByZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBieSBzdWJzZXF1ZW50IGNhbGxzIG9mCisgICBpbmZsYXRlKCkuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVHZXREaWN0aW9uYXJ5IE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVmICpkaWN0aW9uYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCAgKmRpY3RMZW5ndGgpKTsKKy8qCisgICAgIFJldHVybnMgdGhlIHNsaWRpbmcgZGljdGlvbmFyeSBiZWluZyBtYWludGFpbmVkIGJ5IGluZmxhdGUuICBkaWN0TGVuZ3RoIGlzCisgICBzZXQgdG8gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgZGljdGlvbmFyeSwgYW5kIHRoYXQgbWFueSBieXRlcyBhcmUgY29waWVkCisgICB0byBkaWN0aW9uYXJ5LiAgZGljdGlvbmFyeSBtdXN0IGhhdmUgZW5vdWdoIHNwYWNlLCB3aGVyZSAzMjc2OCBieXRlcyBpcworICAgYWx3YXlzIGVub3VnaC4gIElmIGluZmxhdGVHZXREaWN0aW9uYXJ5KCkgaXMgY2FsbGVkIHdpdGggZGljdGlvbmFyeSBlcXVhbCB0bworICAgWl9OVUxMLCB0aGVuIG9ubHkgdGhlIGRpY3Rpb25hcnkgbGVuZ3RoIGlzIHJldHVybmVkLCBhbmQgbm90aGluZyBpcyBjb3BpZWQuCisgICBTaW1pbGFyeSwgaWYgZGljdExlbmd0aCBpcyBaX05VTEwsIHRoZW4gaXQgaXMgbm90IHNldC4KKworICAgICBpbmZsYXRlR2V0RGljdGlvbmFyeSByZXR1cm5zIFpfT0sgb24gc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlCisgICBzdHJlYW0gc3RhdGUgaXMgaW5jb25zaXN0ZW50LgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlU3luYyBPRigoel9zdHJlYW1wIHN0cm0pKTsKKy8qCisgICAgIFNraXBzIGludmFsaWQgY29tcHJlc3NlZCBkYXRhIHVudGlsIGEgcG9zc2libGUgZnVsbCBmbHVzaCBwb2ludCAoc2VlIGFib3ZlCisgICBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIGRlZmxhdGUgd2l0aCBaX0ZVTExfRkxVU0gpIGNhbiBiZSBmb3VuZCwgb3IgdW50aWwgYWxsCisgICBhdmFpbGFibGUgaW5wdXQgaXMgc2tpcHBlZC4gIE5vIG91dHB1dCBpcyBwcm92aWRlZC4KKworICAgICBpbmZsYXRlU3luYyBzZWFyY2hlcyBmb3IgYSAwMCAwMCBGRiBGRiBwYXR0ZXJuIGluIHRoZSBjb21wcmVzc2VkIGRhdGEuCisgICBBbGwgZnVsbCBmbHVzaCBwb2ludHMgaGF2ZSB0aGlzIHBhdHRlcm4sIGJ1dCBub3QgYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMKKyAgIHBhdHRlcm4gYXJlIGZ1bGwgZmx1c2ggcG9pbnRzLgorCisgICAgIGluZmxhdGVTeW5jIHJldHVybnMgWl9PSyBpZiBhIHBvc3NpYmxlIGZ1bGwgZmx1c2ggcG9pbnQgaGFzIGJlZW4gZm91bmQsCisgICBaX0JVRl9FUlJPUiBpZiBubyBtb3JlIGlucHV0IHdhcyBwcm92aWRlZCwgWl9EQVRBX0VSUk9SIGlmIG5vIGZsdXNoIHBvaW50CisgICBoYXMgYmVlbiBmb3VuZCwgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSBzdHJ1Y3R1cmUgd2FzIGluY29uc2lzdGVudC4KKyAgIEluIHRoZSBzdWNjZXNzIGNhc2UsIHRoZSBhcHBsaWNhdGlvbiBtYXkgc2F2ZSB0aGUgY3VycmVudCBjdXJyZW50IHZhbHVlIG9mCisgICB0b3RhbF9pbiB3aGljaCBpbmRpY2F0ZXMgd2hlcmUgdmFsaWQgY29tcHJlc3NlZCBkYXRhIHdhcyBmb3VuZC4gIEluIHRoZQorICAgZXJyb3IgY2FzZSwgdGhlIGFwcGxpY2F0aW9uIG1heSByZXBlYXRlZGx5IGNhbGwgaW5mbGF0ZVN5bmMsIHByb3ZpZGluZyBtb3JlCisgICBpbnB1dCBlYWNoIHRpbWUsIHVudGlsIHN1Y2Nlc3Mgb3IgZW5kIG9mIHRoZSBpbnB1dCBkYXRhLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlQ29weSBPRigoel9zdHJlYW1wIGRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6X3N0cmVhbXAgc291cmNlKSk7CisvKgorICAgICBTZXRzIHRoZSBkZXN0aW5hdGlvbiBzdHJlYW0gYXMgYSBjb21wbGV0ZSBjb3B5IG9mIHRoZSBzb3VyY2Ugc3RyZWFtLgorCisgICAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWZ1bCB3aGVuIHJhbmRvbWx5IGFjY2Vzc2luZyBhIGxhcmdlIHN0cmVhbS4gIFRoZQorICAgZmlyc3QgcGFzcyB0aHJvdWdoIHRoZSBzdHJlYW0gY2FuIHBlcmlvZGljYWxseSByZWNvcmQgdGhlIGluZmxhdGUgc3RhdGUsCisgICBhbGxvd2luZyByZXN0YXJ0aW5nIGluZmxhdGUgYXQgdGhvc2UgcG9pbnRzIHdoZW4gcmFuZG9tbHkgYWNjZXNzaW5nIHRoZQorICAgc3RyZWFtLgorCisgICAgIGluZmxhdGVDb3B5IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90CisgICBlbm91Z2ggbWVtb3J5LCBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50CisgICAoc3VjaCBhcyB6YWxsb2MgYmVpbmcgWl9OVUxMKS4gIG1zZyBpcyBsZWZ0IHVuY2hhbmdlZCBpbiBib3RoIHNvdXJjZSBhbmQKKyAgIGRlc3RpbmF0aW9uLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlUmVzZXQgT0YoKHpfc3RyZWFtcCBzdHJtKSk7CisvKgorICAgICBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gaW5mbGF0ZUVuZCBmb2xsb3dlZCBieSBpbmZsYXRlSW5pdCwKKyAgIGJ1dCBkb2VzIG5vdCBmcmVlIGFuZCByZWFsbG9jYXRlIGFsbCB0aGUgaW50ZXJuYWwgZGVjb21wcmVzc2lvbiBzdGF0ZS4gIFRoZQorICAgc3RyZWFtIHdpbGwga2VlcCBhdHRyaWJ1dGVzIHRoYXQgbWF5IGhhdmUgYmVlbiBzZXQgYnkgaW5mbGF0ZUluaXQyLgorCisgICAgIGluZmxhdGVSZXNldCByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQorICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQgKHN1Y2ggYXMgemFsbG9jIG9yIHN0YXRlIGJlaW5nIFpfTlVMTCkuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVSZXNldDIgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2luZG93Qml0cykpOworLyoKKyAgICAgVGhpcyBmdW5jdGlvbiBpcyB0aGUgc2FtZSBhcyBpbmZsYXRlUmVzZXQsIGJ1dCBpdCBhbHNvIHBlcm1pdHMgY2hhbmdpbmcKKyAgIHRoZSB3cmFwIGFuZCB3aW5kb3cgc2l6ZSByZXF1ZXN0cy4gIFRoZSB3aW5kb3dCaXRzIHBhcmFtZXRlciBpcyBpbnRlcnByZXRlZAorICAgdGhlIHNhbWUgYXMgaXQgaXMgZm9yIGluZmxhdGVJbml0Mi4KKworICAgICBpbmZsYXRlUmVzZXQyIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCisgICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudCAoc3VjaCBhcyB6YWxsb2Mgb3Igc3RhdGUgYmVpbmcgWl9OVUxMKSwgb3IgaWYKKyAgIHRoZSB3aW5kb3dCaXRzIHBhcmFtZXRlciBpcyBpbnZhbGlkLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlUHJpbWUgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSkpOworLyoKKyAgICAgVGhpcyBmdW5jdGlvbiBpbnNlcnRzIGJpdHMgaW4gdGhlIGluZmxhdGUgaW5wdXQgc3RyZWFtLiAgVGhlIGludGVudCBpcworICAgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3RhcnQgaW5mbGF0aW5nIGF0IGEgYml0IHBvc2l0aW9uIGluIHRoZQorICAgbWlkZGxlIG9mIGEgYnl0ZS4gIFRoZSBwcm92aWRlZCBiaXRzIHdpbGwgYmUgdXNlZCBiZWZvcmUgYW55IGJ5dGVzIGFyZSB1c2VkCisgICBmcm9tIG5leHRfaW4uICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgd2l0aCByYXcgaW5mbGF0ZSwgYW5kCisgICBzaG91bGQgYmUgdXNlZCBiZWZvcmUgdGhlIGZpcnN0IGluZmxhdGUoKSBjYWxsIGFmdGVyIGluZmxhdGVJbml0MigpIG9yCisgICBpbmZsYXRlUmVzZXQoKS4gIGJpdHMgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTYsIGFuZCB0aGF0IG1hbnkgb2YgdGhlCisgICBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHZhbHVlIHdpbGwgYmUgaW5zZXJ0ZWQgaW4gdGhlIGlucHV0LgorCisgICAgIElmIGJpdHMgaXMgbmVnYXRpdmUsIHRoZW4gdGhlIGlucHV0IHN0cmVhbSBiaXQgYnVmZmVyIGlzIGVtcHRpZWQuICBUaGVuCisgICBpbmZsYXRlUHJpbWUoKSBjYW4gYmUgY2FsbGVkIGFnYWluIHRvIHB1dCBiaXRzIGluIHRoZSBidWZmZXIuICBUaGlzIGlzIHVzZWQKKyAgIHRvIGNsZWFyIG91dCBiaXRzIGxlZnRvdmVyIGFmdGVyIGZlZWRpbmcgaW5mbGF0ZSBhIGJsb2NrIGRlc2NyaXB0aW9uIHByaW9yCisgICB0byBmZWVkaW5nIGluZmxhdGUgY29kZXMuCisKKyAgICAgaW5mbGF0ZVByaW1lIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCisgICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4KKyovCisKK1pFWFRFUk4gbG9uZyBaRVhQT1JUIGluZmxhdGVNYXJrIE9GKCh6X3N0cmVhbXAgc3RybSkpOworLyoKKyAgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHR3byB2YWx1ZXMsIG9uZSBpbiB0aGUgbG93ZXIgMTYgYml0cyBvZiB0aGUgcmV0dXJuCisgICB2YWx1ZSwgYW5kIHRoZSBvdGhlciBpbiB0aGUgcmVtYWluaW5nIHVwcGVyIGJpdHMsIG9idGFpbmVkIGJ5IHNoaWZ0aW5nIHRoZQorICAgcmV0dXJuIHZhbHVlIGRvd24gMTYgYml0cy4gIElmIHRoZSB1cHBlciB2YWx1ZSBpcyAtMSBhbmQgdGhlIGxvd2VyIHZhbHVlIGlzCisgICB6ZXJvLCB0aGVuIGluZmxhdGUoKSBpcyBjdXJyZW50bHkgZGVjb2RpbmcgaW5mb3JtYXRpb24gb3V0c2lkZSBvZiBhIGJsb2NrLgorICAgSWYgdGhlIHVwcGVyIHZhbHVlIGlzIC0xIGFuZCB0aGUgbG93ZXIgdmFsdWUgaXMgbm9uLXplcm8sIHRoZW4gaW5mbGF0ZSBpcyBpbgorICAgdGhlIG1pZGRsZSBvZiBhIHN0b3JlZCBibG9jaywgd2l0aCB0aGUgbG93ZXIgdmFsdWUgZXF1YWxpbmcgdGhlIG51bWJlciBvZgorICAgYnl0ZXMgZnJvbSB0aGUgaW5wdXQgcmVtYWluaW5nIHRvIGNvcHkuICBJZiB0aGUgdXBwZXIgdmFsdWUgaXMgbm90IC0xLCB0aGVuCisgICBpdCBpcyB0aGUgbnVtYmVyIG9mIGJpdHMgYmFjayBmcm9tIHRoZSBjdXJyZW50IGJpdCBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgb2YKKyAgIHRoZSBjb2RlIChsaXRlcmFsIG9yIGxlbmd0aC9kaXN0YW5jZSBwYWlyKSBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLiAgSW4KKyAgIHRoYXQgY2FzZSB0aGUgbG93ZXIgdmFsdWUgaXMgdGhlIG51bWJlciBvZiBieXRlcyBhbHJlYWR5IGVtaXR0ZWQgZm9yIHRoYXQKKyAgIGNvZGUuCisKKyAgICAgQSBjb2RlIGlzIGJlaW5nIHByb2Nlc3NlZCBpZiBpbmZsYXRlIGlzIHdhaXRpbmcgZm9yIG1vcmUgaW5wdXQgdG8gY29tcGxldGUKKyAgIGRlY29kaW5nIG9mIHRoZSBjb2RlLCBvciBpZiBpdCBoYXMgY29tcGxldGVkIGRlY29kaW5nIGJ1dCBpcyB3YWl0aW5nIGZvcgorICAgbW9yZSBvdXRwdXQgc3BhY2UgdG8gd3JpdGUgdGhlIGxpdGVyYWwgb3IgbWF0Y2ggZGF0YS4KKworICAgICBpbmZsYXRlTWFyaygpIGlzIHVzZWQgdG8gbWFyayBsb2NhdGlvbnMgaW4gdGhlIGlucHV0IGRhdGEgZm9yIHJhbmRvbQorICAgYWNjZXNzLCB3aGljaCBtYXkgYmUgYXQgYml0IHBvc2l0aW9ucywgYW5kIHRvIG5vdGUgdGhvc2UgY2FzZXMgd2hlcmUgdGhlCisgICBvdXRwdXQgb2YgYSBjb2RlIG1heSBzcGFuIGJvdW5kYXJpZXMgb2YgcmFuZG9tIGFjY2VzcyBibG9ja3MuICBUaGUgY3VycmVudAorICAgbG9jYXRpb24gaW4gdGhlIGlucHV0IHN0cmVhbSBjYW4gYmUgZGV0ZXJtaW5lZCBmcm9tIGF2YWlsX2luIGFuZCBkYXRhX3R5cGUKKyAgIGFzIG5vdGVkIGluIHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIFpfQkxPQ0sgZmx1c2ggcGFyYW1ldGVyIGZvciBpbmZsYXRlLgorCisgICAgIGluZmxhdGVNYXJrIHJldHVybnMgdGhlIHZhbHVlIG5vdGVkIGFib3ZlIG9yIC0xIDw8IDE2IGlmIHRoZSBwcm92aWRlZAorICAgc291cmNlIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50LgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlR2V0SGVhZGVyIE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3pfaGVhZGVycCBoZWFkKSk7CisvKgorICAgICBpbmZsYXRlR2V0SGVhZGVyKCkgcmVxdWVzdHMgdGhhdCBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiBiZSBzdG9yZWQgaW4gdGhlCisgICBwcm92aWRlZCBnel9oZWFkZXIgc3RydWN0dXJlLiAgaW5mbGF0ZUdldEhlYWRlcigpIG1heSBiZSBjYWxsZWQgYWZ0ZXIKKyAgIGluZmxhdGVJbml0MigpIG9yIGluZmxhdGVSZXNldCgpLCBhbmQgYmVmb3JlIHRoZSBmaXJzdCBjYWxsIG9mIGluZmxhdGUoKS4KKyAgIEFzIGluZmxhdGUoKSBwcm9jZXNzZXMgdGhlIGd6aXAgc3RyZWFtLCBoZWFkLT5kb25lIGlzIHplcm8gdW50aWwgdGhlIGhlYWRlcgorICAgaXMgY29tcGxldGVkLCBhdCB3aGljaCB0aW1lIGhlYWQtPmRvbmUgaXMgc2V0IHRvIG9uZS4gIElmIGEgemxpYiBzdHJlYW0gaXMKKyAgIGJlaW5nIGRlY29kZWQsIHRoZW4gaGVhZC0+ZG9uZSBpcyBzZXQgdG8gLTEgdG8gaW5kaWNhdGUgdGhhdCB0aGVyZSB3aWxsIGJlCisgICBubyBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiBmb3J0aGNvbWluZy4gIE5vdGUgdGhhdCBaX0JMT0NLIG9yIFpfVFJFRVMgY2FuIGJlCisgICB1c2VkIHRvIGZvcmNlIGluZmxhdGUoKSB0byByZXR1cm4gaW1tZWRpYXRlbHkgYWZ0ZXIgaGVhZGVyIHByb2Nlc3NpbmcgaXMKKyAgIGNvbXBsZXRlIGFuZCBiZWZvcmUgYW55IGFjdHVhbCBkYXRhIGlzIGRlY29tcHJlc3NlZC4KKworICAgICBUaGUgdGV4dCwgdGltZSwgeGZsYWdzLCBhbmQgb3MgZmllbGRzIGFyZSBmaWxsZWQgaW4gd2l0aCB0aGUgZ3ppcCBoZWFkZXIKKyAgIGNvbnRlbnRzLiAgaGNyYyBpcyBzZXQgdG8gdHJ1ZSBpZiB0aGVyZSBpcyBhIGhlYWRlciBDUkMuICAoVGhlIGhlYWRlciBDUkMKKyAgIHdhcyB2YWxpZCBpZiBkb25lIGlzIHNldCB0byBvbmUuKSBJZiBleHRyYSBpcyBub3QgWl9OVUxMLCB0aGVuIGV4dHJhX21heAorICAgY29udGFpbnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlIHRvIGV4dHJhLiAgT25jZSBkb25lIGlzIHRydWUsCisgICBleHRyYV9sZW4gY29udGFpbnMgdGhlIGFjdHVhbCBleHRyYSBmaWVsZCBsZW5ndGgsIGFuZCBleHRyYSBjb250YWlucyB0aGUKKyAgIGV4dHJhIGZpZWxkLCBvciB0aGF0IGZpZWxkIHRydW5jYXRlZCBpZiBleHRyYV9tYXggaXMgbGVzcyB0aGFuIGV4dHJhX2xlbi4KKyAgIElmIG5hbWUgaXMgbm90IFpfTlVMTCwgdGhlbiB1cCB0byBuYW1lX21heCBjaGFyYWN0ZXJzIGFyZSB3cml0dGVuIHRoZXJlLAorICAgdGVybWluYXRlZCB3aXRoIGEgemVybyB1bmxlc3MgdGhlIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gbmFtZV9tYXguICBJZgorICAgY29tbWVudCBpcyBub3QgWl9OVUxMLCB0aGVuIHVwIHRvIGNvbW1fbWF4IGNoYXJhY3RlcnMgYXJlIHdyaXR0ZW4gdGhlcmUsCisgICB0ZXJtaW5hdGVkIHdpdGggYSB6ZXJvIHVubGVzcyB0aGUgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiBjb21tX21heC4gIFdoZW4gYW55CisgICBvZiBleHRyYSwgbmFtZSwgb3IgY29tbWVudCBhcmUgbm90IFpfTlVMTCBhbmQgdGhlIHJlc3BlY3RpdmUgZmllbGQgaXMgbm90CisgICBwcmVzZW50IGluIHRoZSBoZWFkZXIsIHRoZW4gdGhhdCBmaWVsZCBpcyBzZXQgdG8gWl9OVUxMIHRvIHNpZ25hbCBpdHMKKyAgIGFic2VuY2UuICBUaGlzIGFsbG93cyB0aGUgdXNlIG9mIGRlZmxhdGVTZXRIZWFkZXIoKSB3aXRoIHRoZSByZXR1cm5lZAorICAgc3RydWN0dXJlIHRvIGR1cGxpY2F0ZSB0aGUgaGVhZGVyLiAgSG93ZXZlciBpZiB0aG9zZSBmaWVsZHMgYXJlIHNldCB0bworICAgYWxsb2NhdGVkIG1lbW9yeSwgdGhlbiB0aGUgYXBwbGljYXRpb24gd2lsbCBuZWVkIHRvIHNhdmUgdGhvc2UgcG9pbnRlcnMKKyAgIGVsc2V3aGVyZSBzbyB0aGF0IHRoZXkgY2FuIGJlIGV2ZW50dWFsbHkgZnJlZWQuCisKKyAgICAgSWYgaW5mbGF0ZUdldEhlYWRlciBpcyBub3QgdXNlZCwgdGhlbiB0aGUgaGVhZGVyIGluZm9ybWF0aW9uIGlzIHNpbXBseQorICAgZGlzY2FyZGVkLiAgVGhlIGhlYWRlciBpcyBhbHdheXMgY2hlY2tlZCBmb3IgdmFsaWRpdHksIGluY2x1ZGluZyB0aGUgaGVhZGVyCisgICBDUkMgaWYgcHJlc2VudC4gIGluZmxhdGVSZXNldCgpIHdpbGwgcmVzZXQgdGhlIHByb2Nlc3MgdG8gZGlzY2FyZCB0aGUgaGVhZGVyCisgICBpbmZvcm1hdGlvbi4gIFRoZSBhcHBsaWNhdGlvbiB3b3VsZCBuZWVkIHRvIGNhbGwgaW5mbGF0ZUdldEhlYWRlcigpIGFnYWluIHRvCisgICByZXRyaWV2ZSB0aGUgaGVhZGVyIGZyb20gdGhlIG5leHQgZ3ppcCBzdHJlYW0uCisKKyAgICAgaW5mbGF0ZUdldEhlYWRlciByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQorICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQuCisqLworCisvKgorWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlQmFja0luaXQgT0YoKHpfc3RyZWFtcCBzdHJtLCBpbnQgd2luZG93Qml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIEZBUiAqd2luZG93KSk7CisKKyAgICAgSW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgc3RyZWFtIHN0YXRlIGZvciBkZWNvbXByZXNzaW9uIHVzaW5nIGluZmxhdGVCYWNrKCkKKyAgIGNhbGxzLiAgVGhlIGZpZWxkcyB6YWxsb2MsIHpmcmVlIGFuZCBvcGFxdWUgaW4gc3RybSBtdXN0IGJlIGluaXRpYWxpemVkCisgICBiZWZvcmUgdGhlIGNhbGwuICBJZiB6YWxsb2MgYW5kIHpmcmVlIGFyZSBaX05VTEwsIHRoZW4gdGhlIGRlZmF1bHQgbGlicmFyeS0KKyAgIGRlcml2ZWQgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMgYXJlIHVzZWQuICB3aW5kb3dCaXRzIGlzIHRoZSBiYXNlIHR3bworICAgbG9nYXJpdGhtIG9mIHRoZSB3aW5kb3cgc2l6ZSwgaW4gdGhlIHJhbmdlIDguLjE1LiAgd2luZG93IGlzIGEgY2FsbGVyCisgICBzdXBwbGllZCBidWZmZXIgb2YgdGhhdCBzaXplLiAgRXhjZXB0IGZvciBzcGVjaWFsIGFwcGxpY2F0aW9ucyB3aGVyZSBpdCBpcworICAgYXNzdXJlZCB0aGF0IGRlZmxhdGUgd2FzIHVzZWQgd2l0aCBzbWFsbCB3aW5kb3cgc2l6ZXMsIHdpbmRvd0JpdHMgbXVzdCBiZSAxNQorICAgYW5kIGEgMzJLIGJ5dGUgd2luZG93IG11c3QgYmUgc3VwcGxpZWQgdG8gYmUgYWJsZSB0byBkZWNvbXByZXNzIGdlbmVyYWwKKyAgIGRlZmxhdGUgc3RyZWFtcy4KKworICAgICBTZWUgaW5mbGF0ZUJhY2soKSBmb3IgdGhlIHVzYWdlIG9mIHRoZXNlIHJvdXRpbmVzLgorCisgICAgIGluZmxhdGVCYWNrSW5pdCB3aWxsIHJldHVybiBaX09LIG9uIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIGlmIGFueSBvZgorICAgdGhlIHBhcmFtZXRlcnMgYXJlIGludmFsaWQsIFpfTUVNX0VSUk9SIGlmIHRoZSBpbnRlcm5hbCBzdGF0ZSBjb3VsZCBub3QgYmUKKyAgIGFsbG9jYXRlZCwgb3IgWl9WRVJTSU9OX0VSUk9SIGlmIHRoZSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IGRvZXMgbm90IG1hdGNoCisgICB0aGUgdmVyc2lvbiBvZiB0aGUgaGVhZGVyIGZpbGUuCisqLworCit0eXBlZGVmIHVuc2lnbmVkICgqaW5fZnVuYykgT0YoKHZvaWQgRkFSICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKiBGQVIgKikpOwordHlwZWRlZiBpbnQgKCpvdXRfZnVuYykgT0YoKHZvaWQgRkFSICosIHVuc2lnbmVkIGNoYXIgRkFSICosIHVuc2lnbmVkKSk7CisKK1pFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUJhY2sgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fZnVuYyBpbiwgdm9pZCBGQVIgKmluX2Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfZnVuYyBvdXQsIHZvaWQgRkFSICpvdXRfZGVzYykpOworLyoKKyAgICAgaW5mbGF0ZUJhY2soKSBkb2VzIGEgcmF3IGluZmxhdGUgd2l0aCBhIHNpbmdsZSBjYWxsIHVzaW5nIGEgY2FsbC1iYWNrCisgICBpbnRlcmZhY2UgZm9yIGlucHV0IGFuZCBvdXRwdXQuICBUaGlzIGlzIHBvdGVudGlhbGx5IG1vcmUgZWZmaWNpZW50IHRoYW4KKyAgIGluZmxhdGUoKSBmb3IgZmlsZSBpL28gYXBwbGljYXRpb25zLCBpbiB0aGF0IGl0IGF2b2lkcyBjb3B5aW5nIGJldHdlZW4gdGhlCisgICBvdXRwdXQgYW5kIHRoZSBzbGlkaW5nIHdpbmRvdyBieSBzaW1wbHkgbWFraW5nIHRoZSB3aW5kb3cgaXRzZWxmIHRoZSBvdXRwdXQKKyAgIGJ1ZmZlci4gIGluZmxhdGUoKSBjYW4gYmUgZmFzdGVyIG9uIG1vZGVybiBDUFVzIHdoZW4gdXNlZCB3aXRoIGxhcmdlCisgICBidWZmZXJzLiAgaW5mbGF0ZUJhY2soKSB0cnVzdHMgdGhlIGFwcGxpY2F0aW9uIHRvIG5vdCBjaGFuZ2UgdGhlIG91dHB1dAorICAgYnVmZmVyIHBhc3NlZCBieSB0aGUgb3V0cHV0IGZ1bmN0aW9uLCBhdCBsZWFzdCB1bnRpbCBpbmZsYXRlQmFjaygpIHJldHVybnMuCisKKyAgICAgaW5mbGF0ZUJhY2tJbml0KCkgbXVzdCBiZSBjYWxsZWQgZmlyc3QgdG8gYWxsb2NhdGUgdGhlIGludGVybmFsIHN0YXRlCisgICBhbmQgdG8gaW5pdGlhbGl6ZSB0aGUgc3RhdGUgd2l0aCB0aGUgdXNlci1wcm92aWRlZCB3aW5kb3cgYnVmZmVyLgorICAgaW5mbGF0ZUJhY2soKSBtYXkgdGhlbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzIHRvIGluZmxhdGUgYSBjb21wbGV0ZSwgcmF3CisgICBkZWZsYXRlIHN0cmVhbSB3aXRoIGVhY2ggY2FsbC4gIGluZmxhdGVCYWNrRW5kKCkgaXMgdGhlbiBjYWxsZWQgdG8gZnJlZSB0aGUKKyAgIGFsbG9jYXRlZCBzdGF0ZS4KKworICAgICBBIHJhdyBkZWZsYXRlIHN0cmVhbSBpcyBvbmUgd2l0aCBubyB6bGliIG9yIGd6aXAgaGVhZGVyIG9yIHRyYWlsZXIuCisgICBUaGlzIHJvdXRpbmUgd291bGQgbm9ybWFsbHkgYmUgdXNlZCBpbiBhIHV0aWxpdHkgdGhhdCByZWFkcyB6aXAgb3IgZ3ppcAorICAgZmlsZXMgYW5kIHdyaXRlcyBvdXQgdW5jb21wcmVzc2VkIGZpbGVzLiAgVGhlIHV0aWxpdHkgd291bGQgZGVjb2RlIHRoZQorICAgaGVhZGVyIGFuZCBwcm9jZXNzIHRoZSB0cmFpbGVyIG9uIGl0cyBvd24sIGhlbmNlIHRoaXMgcm91dGluZSBleHBlY3RzIG9ubHkKKyAgIHRoZSByYXcgZGVmbGF0ZSBzdHJlYW0gdG8gZGVjb21wcmVzcy4gIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIG5vcm1hbAorICAgYmVoYXZpb3Igb2YgaW5mbGF0ZSgpLCB3aGljaCBleHBlY3RzIGVpdGhlciBhIHpsaWIgb3IgZ3ppcCBoZWFkZXIgYW5kCisgICB0cmFpbGVyIGFyb3VuZCB0aGUgZGVmbGF0ZSBzdHJlYW0uCisKKyAgICAgaW5mbGF0ZUJhY2soKSB1c2VzIHR3byBzdWJyb3V0aW5lcyBzdXBwbGllZCBieSB0aGUgY2FsbGVyIHRoYXQgYXJlIHRoZW4KKyAgIGNhbGxlZCBieSBpbmZsYXRlQmFjaygpIGZvciBpbnB1dCBhbmQgb3V0cHV0LiAgaW5mbGF0ZUJhY2soKSBjYWxscyB0aG9zZQorICAgcm91dGluZXMgdW50aWwgaXQgcmVhZHMgYSBjb21wbGV0ZSBkZWZsYXRlIHN0cmVhbSBhbmQgd3JpdGVzIG91dCBhbGwgb2YgdGhlCisgICB1bmNvbXByZXNzZWQgZGF0YSwgb3IgdW50aWwgaXQgZW5jb3VudGVycyBhbiBlcnJvci4gIFRoZSBmdW5jdGlvbidzCisgICBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gdHlwZXMgYXJlIGRlZmluZWQgYWJvdmUgaW4gdGhlIGluX2Z1bmMgYW5kIG91dF9mdW5jCisgICB0eXBlZGVmcy4gIGluZmxhdGVCYWNrKCkgd2lsbCBjYWxsIGluKGluX2Rlc2MsICZidWYpIHdoaWNoIHNob3VsZCByZXR1cm4gdGhlCisgICBudW1iZXIgb2YgYnl0ZXMgb2YgcHJvdmlkZWQgaW5wdXQsIGFuZCBhIHBvaW50ZXIgdG8gdGhhdCBpbnB1dCBpbiBidWYuICBJZgorICAgdGhlcmUgaXMgbm8gaW5wdXQgYXZhaWxhYmxlLCBpbigpIG11c3QgcmV0dXJuIHplcm8tLWJ1ZiBpcyBpZ25vcmVkIGluIHRoYXQKKyAgIGNhc2UtLWFuZCBpbmZsYXRlQmFjaygpIHdpbGwgcmV0dXJuIGEgYnVmZmVyIGVycm9yLiAgaW5mbGF0ZUJhY2soKSB3aWxsIGNhbGwKKyAgIG91dChvdXRfZGVzYywgYnVmLCBsZW4pIHRvIHdyaXRlIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBidWZbMC4ubGVuLTFdLiAgb3V0KCkKKyAgIHNob3VsZCByZXR1cm4gemVybyBvbiBzdWNjZXNzLCBvciBub24temVybyBvbiBmYWlsdXJlLiAgSWYgb3V0KCkgcmV0dXJucworICAgbm9uLXplcm8sIGluZmxhdGVCYWNrKCkgd2lsbCByZXR1cm4gd2l0aCBhbiBlcnJvci4gIE5laXRoZXIgaW4oKSBub3Igb3V0KCkKKyAgIGFyZSBwZXJtaXR0ZWQgdG8gY2hhbmdlIHRoZSBjb250ZW50cyBvZiB0aGUgd2luZG93IHByb3ZpZGVkIHRvCisgICBpbmZsYXRlQmFja0luaXQoKSwgd2hpY2ggaXMgYWxzbyB0aGUgYnVmZmVyIHRoYXQgb3V0KCkgdXNlcyB0byB3cml0ZSBmcm9tLgorICAgVGhlIGxlbmd0aCB3cml0dGVuIGJ5IG91dCgpIHdpbGwgYmUgYXQgbW9zdCB0aGUgd2luZG93IHNpemUuICBBbnkgbm9uLXplcm8KKyAgIGFtb3VudCBvZiBpbnB1dCBtYXkgYmUgcHJvdmlkZWQgYnkgaW4oKS4KKworICAgICBGb3IgY29udmVuaWVuY2UsIGluZmxhdGVCYWNrKCkgY2FuIGJlIHByb3ZpZGVkIGlucHV0IG9uIHRoZSBmaXJzdCBjYWxsIGJ5CisgICBzZXR0aW5nIHN0cm0tPm5leHRfaW4gYW5kIHN0cm0tPmF2YWlsX2luLiAgSWYgdGhhdCBpbnB1dCBpcyBleGhhdXN0ZWQsIHRoZW4KKyAgIGluKCkgd2lsbCBiZSBjYWxsZWQuICBUaGVyZWZvcmUgc3RybS0+bmV4dF9pbiBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZQorICAgY2FsbGluZyBpbmZsYXRlQmFjaygpLiAgSWYgc3RybS0+bmV4dF9pbiBpcyBaX05VTEwsIHRoZW4gaW4oKSB3aWxsIGJlIGNhbGxlZAorICAgaW1tZWRpYXRlbHkgZm9yIGlucHV0LiAgSWYgc3RybS0+bmV4dF9pbiBpcyBub3QgWl9OVUxMLCB0aGVuIHN0cm0tPmF2YWlsX2luCisgICBtdXN0IGFsc28gYmUgaW5pdGlhbGl6ZWQsIGFuZCB0aGVuIGlmIHN0cm0tPmF2YWlsX2luIGlzIG5vdCB6ZXJvLCBpbnB1dCB3aWxsCisgICBpbml0aWFsbHkgYmUgdGFrZW4gZnJvbSBzdHJtLT5uZXh0X2luWzAgLi4gIHN0cm0tPmF2YWlsX2luIC0gMV0uCisKKyAgICAgVGhlIGluX2Rlc2MgYW5kIG91dF9kZXNjIHBhcmFtZXRlcnMgb2YgaW5mbGF0ZUJhY2soKSBpcyBwYXNzZWQgYXMgdGhlCisgICBmaXJzdCBwYXJhbWV0ZXIgb2YgaW4oKSBhbmQgb3V0KCkgcmVzcGVjdGl2ZWx5IHdoZW4gdGhleSBhcmUgY2FsbGVkLiAgVGhlc2UKKyAgIGRlc2NyaXB0b3JzIGNhbiBiZSBvcHRpb25hbGx5IHVzZWQgdG8gcGFzcyBhbnkgaW5mb3JtYXRpb24gdGhhdCB0aGUgY2FsbGVyLQorICAgc3VwcGxpZWQgaW4oKSBhbmQgb3V0KCkgZnVuY3Rpb25zIG5lZWQgdG8gZG8gdGhlaXIgam9iLgorCisgICAgIE9uIHJldHVybiwgaW5mbGF0ZUJhY2soKSB3aWxsIHNldCBzdHJtLT5uZXh0X2luIGFuZCBzdHJtLT5hdmFpbF9pbiB0bworICAgcGFzcyBiYWNrIGFueSB1bnVzZWQgaW5wdXQgdGhhdCB3YXMgcHJvdmlkZWQgYnkgdGhlIGxhc3QgaW4oKSBjYWxsLiAgVGhlCisgICByZXR1cm4gdmFsdWVzIG9mIGluZmxhdGVCYWNrKCkgY2FuIGJlIFpfU1RSRUFNX0VORCBvbiBzdWNjZXNzLCBaX0JVRl9FUlJPUgorICAgaWYgaW4oKSBvciBvdXQoKSByZXR1cm5lZCBhbiBlcnJvciwgWl9EQVRBX0VSUk9SIGlmIHRoZXJlIHdhcyBhIGZvcm1hdCBlcnJvcgorICAgaW4gdGhlIGRlZmxhdGUgc3RyZWFtIChpbiB3aGljaCBjYXNlIHN0cm0tPm1zZyBpcyBzZXQgdG8gaW5kaWNhdGUgdGhlIG5hdHVyZQorICAgb2YgdGhlIGVycm9yKSwgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSB3YXMgbm90IHByb3Blcmx5IGluaXRpYWxpemVkLgorICAgSW4gdGhlIGNhc2Ugb2YgWl9CVUZfRVJST1IsIGFuIGlucHV0IG9yIG91dHB1dCBlcnJvciBjYW4gYmUgZGlzdGluZ3Vpc2hlZAorICAgdXNpbmcgc3RybS0+bmV4dF9pbiB3aGljaCB3aWxsIGJlIFpfTlVMTCBvbmx5IGlmIGluKCkgcmV0dXJuZWQgYW4gZXJyb3IuICBJZgorICAgc3RybS0+bmV4dF9pbiBpcyBub3QgWl9OVUxMLCB0aGVuIHRoZSBaX0JVRl9FUlJPUiB3YXMgZHVlIHRvIG91dCgpIHJldHVybmluZworICAgbm9uLXplcm8uICAoaW4oKSB3aWxsIGFsd2F5cyBiZSBjYWxsZWQgYmVmb3JlIG91dCgpLCBzbyBzdHJtLT5uZXh0X2luIGlzCisgICBhc3N1cmVkIHRvIGJlIGRlZmluZWQgaWYgb3V0KCkgcmV0dXJucyBub24temVyby4pIE5vdGUgdGhhdCBpbmZsYXRlQmFjaygpCisgICBjYW5ub3QgcmV0dXJuIFpfT0suCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVCYWNrRW5kIE9GKCh6X3N0cmVhbXAgc3RybSkpOworLyoKKyAgICAgQWxsIG1lbW9yeSBhbGxvY2F0ZWQgYnkgaW5mbGF0ZUJhY2tJbml0KCkgaXMgZnJlZWQuCisKKyAgICAgaW5mbGF0ZUJhY2tFbmQoKSByZXR1cm5zIFpfT0sgb24gc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbQorICAgc3RhdGUgd2FzIGluY29uc2lzdGVudC4KKyovCisKK1pFWFRFUk4gdUxvbmcgWkVYUE9SVCB6bGliQ29tcGlsZUZsYWdzIE9GKCh2b2lkKSk7CisvKiBSZXR1cm4gZmxhZ3MgaW5kaWNhdGluZyBjb21waWxlLXRpbWUgb3B0aW9ucy4KKworICAgIFR5cGUgc2l6ZXMsIHR3byBiaXRzIGVhY2gsIDAwID0gMTYgYml0cywgMDEgPSAzMiwgMTAgPSA2NCwgMTEgPSBvdGhlcjoKKyAgICAgMS4wOiBzaXplIG9mIHVJbnQKKyAgICAgMy4yOiBzaXplIG9mIHVMb25nCisgICAgIDUuNDogc2l6ZSBvZiB2b2lkcGYgKHBvaW50ZXIpCisgICAgIDcuNjogc2l6ZSBvZiB6X29mZl90CisKKyAgICBDb21waWxlciwgYXNzZW1ibGVyLCBhbmQgZGVidWcgb3B0aW9uczoKKyAgICAgODogREVCVUcKKyAgICAgOTogQVNNViBvciBBU01JTkYgLS0gdXNlIEFTTSBjb2RlCisgICAgIDEwOiBaTElCX1dJTkFQSSAtLSBleHBvcnRlZCBmdW5jdGlvbnMgdXNlIHRoZSBXSU5BUEkgY2FsbGluZyBjb252ZW50aW9uCisgICAgIDExOiAwIChyZXNlcnZlZCkKKworICAgIE9uZS10aW1lIHRhYmxlIGJ1aWxkaW5nIChzbWFsbGVyIGNvZGUsIGJ1dCBub3QgdGhyZWFkLXNhZmUgaWYgdHJ1ZSk6CisgICAgIDEyOiBCVUlMREZJWEVEIC0tIGJ1aWxkIHN0YXRpYyBibG9jayBkZWNvZGluZyB0YWJsZXMgd2hlbiBuZWVkZWQKKyAgICAgMTM6IERZTkFNSUNfQ1JDX1RBQkxFIC0tIGJ1aWxkIENSQyBjYWxjdWxhdGlvbiB0YWJsZXMgd2hlbiBuZWVkZWQKKyAgICAgMTQsMTU6IDAgKHJlc2VydmVkKQorCisgICAgTGlicmFyeSBjb250ZW50IChpbmRpY2F0ZXMgbWlzc2luZyBmdW5jdGlvbmFsaXR5KToKKyAgICAgMTY6IE5PX0daQ09NUFJFU1MgLS0gZ3oqIGZ1bmN0aW9ucyBjYW5ub3QgY29tcHJlc3MgKHRvIGF2b2lkIGxpbmtpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmbGF0ZSBjb2RlIHdoZW4gbm90IG5lZWRlZCkKKyAgICAgMTc6IE5PX0daSVAgLS0gZGVmbGF0ZSBjYW4ndCB3cml0ZSBnemlwIHN0cmVhbXMsIGFuZCBpbmZsYXRlIGNhbid0IGRldGVjdAorICAgICAgICAgICAgICAgICAgICBhbmQgZGVjb2RlIGd6aXAgc3RyZWFtcyAodG8gYXZvaWQgbGlua2luZyBjcmMgY29kZSkKKyAgICAgMTgtMTk6IDAgKHJlc2VydmVkKQorCisgICAgT3BlcmF0aW9uIHZhcmlhdGlvbnMgKGNoYW5nZXMgaW4gbGlicmFyeSBmdW5jdGlvbmFsaXR5KToKKyAgICAgMjA6IFBLWklQX0JVR19XT1JLQVJPVU5EIC0tIHNsaWdodGx5IG1vcmUgcGVybWlzc2l2ZSBpbmZsYXRlCisgICAgIDIxOiBGQVNURVNUIC0tIGRlZmxhdGUgYWxnb3JpdGhtIHdpdGggb25seSBvbmUsIGxvd2VzdCBjb21wcmVzc2lvbiBsZXZlbAorICAgICAyMiwyMzogMCAocmVzZXJ2ZWQpCisKKyAgICBUaGUgc3ByaW50ZiB2YXJpYW50IHVzZWQgYnkgZ3pwcmludGYgKHplcm8gaXMgYmVzdCk6CisgICAgIDI0OiAwID0gdnMqLCAxID0gcyogLS0gMSBtZWFucyBsaW1pdGVkIHRvIDIwIGFyZ3VtZW50cyBhZnRlciB0aGUgZm9ybWF0CisgICAgIDI1OiAwID0gKm5wcmludGYsIDEgPSAqcHJpbnRmIC0tIDEgbWVhbnMgZ3pwcmludGYoKSBub3Qgc2VjdXJlIQorICAgICAyNjogMCA9IHJldHVybnMgdmFsdWUsIDEgPSB2b2lkIC0tIDEgbWVhbnMgaW5mZXJyZWQgc3RyaW5nIGxlbmd0aCByZXR1cm5lZAorCisgICAgUmVtYWluZGVyOgorICAgICAyNy0zMTogMCAocmVzZXJ2ZWQpCisgKi8KKworI2lmbmRlZiBaX1NPTE8KKworICAgICAgICAgICAgICAgICAgICAgICAgLyogdXRpbGl0eSBmdW5jdGlvbnMgKi8KKworLyoKKyAgICAgVGhlIGZvbGxvd2luZyB1dGlsaXR5IGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mIHRoZSBiYXNpYworICAgc3RyZWFtLW9yaWVudGVkIGZ1bmN0aW9ucy4gIFRvIHNpbXBsaWZ5IHRoZSBpbnRlcmZhY2UsIHNvbWUgZGVmYXVsdCBvcHRpb25zCisgICBhcmUgYXNzdW1lZCAoY29tcHJlc3Npb24gbGV2ZWwgYW5kIG1lbW9yeSB1c2FnZSwgc3RhbmRhcmQgbWVtb3J5IGFsbG9jYXRpb24KKyAgIGZ1bmN0aW9ucykuICBUaGUgc291cmNlIGNvZGUgb2YgdGhlc2UgdXRpbGl0eSBmdW5jdGlvbnMgY2FuIGJlIG1vZGlmaWVkIGlmCisgICB5b3UgbmVlZCBzcGVjaWFsIG9wdGlvbnMuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGNvbXByZXNzIE9GKChCeXRlZiAqZGVzdCwgICB1TG9uZ2YgKmRlc3RMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCeXRlZiAqc291cmNlLCB1TG9uZyBzb3VyY2VMZW4pKTsKKy8qCisgICAgIENvbXByZXNzZXMgdGhlIHNvdXJjZSBidWZmZXIgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyLiAgc291cmNlTGVuIGlzCisgICB0aGUgYnl0ZSBsZW5ndGggb2YgdGhlIHNvdXJjZSBidWZmZXIuICBVcG9uIGVudHJ5LCBkZXN0TGVuIGlzIHRoZSB0b3RhbCBzaXplCisgICBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCB3aGljaCBtdXN0IGJlIGF0IGxlYXN0IHRoZSB2YWx1ZSByZXR1cm5lZCBieQorICAgY29tcHJlc3NCb3VuZChzb3VyY2VMZW4pLiAgVXBvbiBleGl0LCBkZXN0TGVuIGlzIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUKKyAgIGNvbXByZXNzZWQgYnVmZmVyLgorCisgICAgIGNvbXByZXNzIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90CisgICBlbm91Z2ggbWVtb3J5LCBaX0JVRl9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQKKyAgIGJ1ZmZlci4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgY29tcHJlc3MyIE9GKChCeXRlZiAqZGVzdCwgICB1TG9uZ2YgKmRlc3RMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnl0ZWYgKnNvdXJjZSwgdUxvbmcgc291cmNlTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCkpOworLyoKKyAgICAgQ29tcHJlc3NlcyB0aGUgc291cmNlIGJ1ZmZlciBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuICBUaGUgbGV2ZWwKKyAgIHBhcmFtZXRlciBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBpbiBkZWZsYXRlSW5pdC4gIHNvdXJjZUxlbiBpcyB0aGUgYnl0ZQorICAgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgYnVmZmVyLiAgVXBvbiBlbnRyeSwgZGVzdExlbiBpcyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUKKyAgIGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBhdCBsZWFzdCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkKKyAgIGNvbXByZXNzQm91bmQoc291cmNlTGVuKS4gIFVwb24gZXhpdCwgZGVzdExlbiBpcyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlCisgICBjb21wcmVzc2VkIGJ1ZmZlci4KKworICAgICBjb21wcmVzczIgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCisgICBtZW1vcnksIFpfQlVGX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIsCisgICBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgbGV2ZWwgcGFyYW1ldGVyIGlzIGludmFsaWQuCisqLworCitaRVhURVJOIHVMb25nIFpFWFBPUlQgY29tcHJlc3NCb3VuZCBPRigodUxvbmcgc291cmNlTGVuKSk7CisvKgorICAgICBjb21wcmVzc0JvdW5kKCkgcmV0dXJucyBhbiB1cHBlciBib3VuZCBvbiB0aGUgY29tcHJlc3NlZCBzaXplIGFmdGVyCisgICBjb21wcmVzcygpIG9yIGNvbXByZXNzMigpIG9uIHNvdXJjZUxlbiBieXRlcy4gIEl0IHdvdWxkIGJlIHVzZWQgYmVmb3JlIGEKKyAgIGNvbXByZXNzKCkgb3IgY29tcHJlc3MyKCkgY2FsbCB0byBhbGxvY2F0ZSB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCB1bmNvbXByZXNzIE9GKChCeXRlZiAqZGVzdCwgICB1TG9uZ2YgKmRlc3RMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ5dGVmICpzb3VyY2UsIHVMb25nIHNvdXJjZUxlbikpOworLyoKKyAgICAgRGVjb21wcmVzc2VzIHRoZSBzb3VyY2UgYnVmZmVyIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4gIHNvdXJjZUxlbiBpcworICAgdGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgYnVmZmVyLiAgVXBvbiBlbnRyeSwgZGVzdExlbiBpcyB0aGUgdG90YWwgc2l6ZQorICAgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgZW50aXJlCisgICB1bmNvbXByZXNzZWQgZGF0YS4gIChUaGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgbXVzdCBoYXZlIGJlZW4gc2F2ZWQKKyAgIHByZXZpb3VzbHkgYnkgdGhlIGNvbXByZXNzb3IgYW5kIHRyYW5zbWl0dGVkIHRvIHRoZSBkZWNvbXByZXNzb3IgYnkgc29tZQorICAgbWVjaGFuaXNtIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgY29tcHJlc3Npb24gbGlicmFyeS4pIFVwb24gZXhpdCwgZGVzdExlbgorICAgaXMgdGhlIGFjdHVhbCBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgYnVmZmVyLgorCisgICAgIHVuY29tcHJlc3MgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QKKyAgIGVub3VnaCBtZW1vcnksIFpfQlVGX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dAorICAgYnVmZmVyLCBvciBaX0RBVEFfRVJST1IgaWYgdGhlIGlucHV0IGRhdGEgd2FzIGNvcnJ1cHRlZCBvciBpbmNvbXBsZXRlLiAgSW4KKyAgIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSwgdW5jb21wcmVzcygpIHdpbGwgZmlsbCB0aGUgb3V0cHV0CisgICBidWZmZXIgd2l0aCB0aGUgdW5jb21wcmVzc2VkIGRhdGEgdXAgdG8gdGhhdCBwb2ludC4KKyovCisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGd6aXAgZmlsZSBhY2Nlc3MgZnVuY3Rpb25zICovCisKKy8qCisgICAgIFRoaXMgbGlicmFyeSBzdXBwb3J0cyByZWFkaW5nIGFuZCB3cml0aW5nIGZpbGVzIGluIGd6aXAgKC5neikgZm9ybWF0IHdpdGgKKyAgIGFuIGludGVyZmFjZSBzaW1pbGFyIHRvIHRoYXQgb2Ygc3RkaW8sIHVzaW5nIHRoZSBmdW5jdGlvbnMgdGhhdCBzdGFydCB3aXRoCisgICAiZ3oiLiAgVGhlIGd6aXAgZm9ybWF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSB6bGliIGZvcm1hdC4gIGd6aXAgaXMgYSBnemlwCisgICB3cmFwcGVyLCBkb2N1bWVudGVkIGluIFJGQyAxOTUyLCB3cmFwcGVkIGFyb3VuZCBhIGRlZmxhdGUgc3RyZWFtLgorKi8KKwordHlwZWRlZiBzdHJ1Y3QgZ3pGaWxlX3MgKmd6RmlsZTsgICAgLyogc2VtaS1vcGFxdWUgZ3ppcCBmaWxlIGRlc2NyaXB0b3IgKi8KKworLyoKK1pFWFRFUk4gZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuIE9GKChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKSk7CisKKyAgICAgT3BlbnMgYSBnemlwICguZ3opIGZpbGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZy4gIFRoZSBtb2RlIHBhcmFtZXRlciBpcyBhcworICAgaW4gZm9wZW4gKCJyYiIgb3IgIndiIikgYnV0IGNhbiBhbHNvIGluY2x1ZGUgYSBjb21wcmVzc2lvbiBsZXZlbCAoIndiOSIpIG9yCisgICBhIHN0cmF0ZWd5OiAnZicgZm9yIGZpbHRlcmVkIGRhdGEgYXMgaW4gIndiNmYiLCAnaCcgZm9yIEh1ZmZtYW4tb25seQorICAgY29tcHJlc3Npb24gYXMgaW4gIndiMWgiLCAnUicgZm9yIHJ1bi1sZW5ndGggZW5jb2RpbmcgYXMgaW4gIndiMVIiLCBvciAnRicKKyAgIGZvciBmaXhlZCBjb2RlIGNvbXByZXNzaW9uIGFzIGluICJ3YjlGIi4gIChTZWUgdGhlIGRlc2NyaXB0aW9uIG9mCisgICBkZWZsYXRlSW5pdDIgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0cmF0ZWd5IHBhcmFtZXRlci4pICAnVCcgd2lsbAorICAgcmVxdWVzdCB0cmFuc3BhcmVudCB3cml0aW5nIG9yIGFwcGVuZGluZyB3aXRoIG5vIGNvbXByZXNzaW9uIGFuZCBub3QgdXNpbmcKKyAgIHRoZSBnemlwIGZvcm1hdC4KKworICAgICAiYSIgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiAidyIgdG8gcmVxdWVzdCB0aGF0IHRoZSBnemlwIHN0cmVhbSB0aGF0IHdpbGwKKyAgIGJlIHdyaXR0ZW4gYmUgYXBwZW5kZWQgdG8gdGhlIGZpbGUuICAiKyIgd2lsbCByZXN1bHQgaW4gYW4gZXJyb3IsIHNpbmNlCisgICByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHRoZSBzYW1lIGd6aXAgZmlsZSBpcyBub3Qgc3VwcG9ydGVkLiAgVGhlIGFkZGl0aW9uIG9mCisgICAieCIgd2hlbiB3cml0aW5nIHdpbGwgY3JlYXRlIHRoZSBmaWxlIGV4Y2x1c2l2ZWx5LCB3aGljaCBmYWlscyBpZiB0aGUgZmlsZQorICAgYWxyZWFkeSBleGlzdHMuICBPbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBpdCwgdGhlIGFkZGl0aW9uIG9mICJlIiB3aGVuCisgICByZWFkaW5nIG9yIHdyaXRpbmcgd2lsbCBzZXQgdGhlIGZsYWcgdG8gY2xvc2UgdGhlIGZpbGUgb24gYW4gZXhlY3ZlKCkgY2FsbC4KKworICAgICBUaGVzZSBmdW5jdGlvbnMsIGFzIHdlbGwgYXMgZ3ppcCwgd2lsbCByZWFkIGFuZCBkZWNvZGUgYSBzZXF1ZW5jZSBvZiBnemlwCisgICBzdHJlYW1zIGluIGEgZmlsZS4gIFRoZSBhcHBlbmQgZnVuY3Rpb24gb2YgZ3pvcGVuKCkgY2FuIGJlIHVzZWQgdG8gY3JlYXRlCisgICBzdWNoIGEgZmlsZS4gIChBbHNvIHNlZSBnemZsdXNoKCkgZm9yIGFub3RoZXIgd2F5IHRvIGRvIHRoaXMuKSAgV2hlbgorICAgYXBwZW5kaW5nLCBnem9wZW4gZG9lcyBub3QgdGVzdCB3aGV0aGVyIHRoZSBmaWxlIGJlZ2lucyB3aXRoIGEgZ3ppcCBzdHJlYW0sCisgICBub3IgZG9lcyBpdCBsb29rIGZvciB0aGUgZW5kIG9mIHRoZSBnemlwIHN0cmVhbXMgdG8gYmVnaW4gYXBwZW5kaW5nLiAgZ3pvcGVuCisgICB3aWxsIHNpbXBseSBhcHBlbmQgYSBnemlwIHN0cmVhbSB0byB0aGUgZXhpc3RpbmcgZmlsZS4KKworICAgICBnem9wZW4gY2FuIGJlIHVzZWQgdG8gcmVhZCBhIGZpbGUgd2hpY2ggaXMgbm90IGluIGd6aXAgZm9ybWF0OyBpbiB0aGlzCisgICBjYXNlIGd6cmVhZCB3aWxsIGRpcmVjdGx5IHJlYWQgZnJvbSB0aGUgZmlsZSB3aXRob3V0IGRlY29tcHJlc3Npb24uICBXaGVuCisgICByZWFkaW5nLCB0aGlzIHdpbGwgYmUgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSBieSBsb29raW5nIGZvciB0aGUgbWFnaWMgdHdvLQorICAgYnl0ZSBnemlwIGhlYWRlci4KKworICAgICBnem9wZW4gcmV0dXJucyBOVUxMIGlmIHRoZSBmaWxlIGNvdWxkIG5vdCBiZSBvcGVuZWQsIGlmIHRoZXJlIHdhcworICAgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUgZ3pGaWxlIHN0YXRlLCBvciBpZiBhbiBpbnZhbGlkIG1vZGUgd2FzCisgICBzcGVjaWZpZWQgKGFuICdyJywgJ3cnLCBvciAnYScgd2FzIG5vdCBwcm92aWRlZCwgb3IgJysnIHdhcyBwcm92aWRlZCkuCisgICBlcnJubyBjYW4gYmUgY2hlY2tlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHJlYXNvbiBnem9wZW4gZmFpbGVkIHdhcyB0aGF0IHRoZQorICAgZmlsZSBjb3VsZCBub3QgYmUgb3BlbmVkLgorKi8KKworWkVYVEVSTiBnekZpbGUgWkVYUE9SVCBnemRvcGVuIE9GKChpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUpKTsKKy8qCisgICAgIGd6ZG9wZW4gYXNzb2NpYXRlcyBhIGd6RmlsZSB3aXRoIHRoZSBmaWxlIGRlc2NyaXB0b3IgZmQuICBGaWxlIGRlc2NyaXB0b3JzCisgICBhcmUgb2J0YWluZWQgZnJvbSBjYWxscyBsaWtlIG9wZW4sIGR1cCwgY3JlYXQsIHBpcGUgb3IgZmlsZW5vIChpZiB0aGUgZmlsZQorICAgaGFzIGJlZW4gcHJldmlvdXNseSBvcGVuZWQgd2l0aCBmb3BlbikuICBUaGUgbW9kZSBwYXJhbWV0ZXIgaXMgYXMgaW4gZ3pvcGVuLgorCisgICAgIFRoZSBuZXh0IGNhbGwgb2YgZ3pjbG9zZSBvbiB0aGUgcmV0dXJuZWQgZ3pGaWxlIHdpbGwgYWxzbyBjbG9zZSB0aGUgZmlsZQorICAgZGVzY3JpcHRvciBmZCwganVzdCBsaWtlIGZjbG9zZShmZG9wZW4oZmQsIG1vZGUpKSBjbG9zZXMgdGhlIGZpbGUgZGVzY3JpcHRvcgorICAgZmQuICBJZiB5b3Ugd2FudCB0byBrZWVwIGZkIG9wZW4sIHVzZSBmZCA9IGR1cChmZF9rZWVwKTsgZ3ogPSBnemRvcGVuKGZkLAorICAgbW9kZSk7LiAgVGhlIGR1cGxpY2F0ZWQgZGVzY3JpcHRvciBzaG91bGQgYmUgc2F2ZWQgdG8gYXZvaWQgYSBsZWFrLCBzaW5jZQorICAgZ3pkb3BlbiBkb2VzIG5vdCBjbG9zZSBmZCBpZiBpdCBmYWlscy4gIElmIHlvdSBhcmUgdXNpbmcgZmlsZW5vKCkgdG8gZ2V0IHRoZQorICAgZmlsZSBkZXNjcmlwdG9yIGZyb20gYSBGSUxFICosIHRoZW4geW91IHdpbGwgaGF2ZSB0byB1c2UgZHVwKCkgdG8gYXZvaWQKKyAgIGRvdWJsZS1jbG9zZSgpaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IuICBCb3RoIGd6Y2xvc2UoKSBhbmQgZmNsb3NlKCkgd2lsbAorICAgY2xvc2UgdGhlIGFzc29jaWF0ZWQgZmlsZSBkZXNjcmlwdG9yLCBzbyB0aGV5IG5lZWQgdG8gaGF2ZSBkaWZmZXJlbnQgZmlsZQorICAgZGVzY3JpcHRvcnMuCisKKyAgICAgZ3pkb3BlbiByZXR1cm5zIE5VTEwgaWYgdGhlcmUgd2FzIGluc3VmZmljaWVudCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlCisgICBnekZpbGUgc3RhdGUsIGlmIGFuIGludmFsaWQgbW9kZSB3YXMgc3BlY2lmaWVkIChhbiAncicsICd3Jywgb3IgJ2EnIHdhcyBub3QKKyAgIHByb3ZpZGVkLCBvciAnKycgd2FzIHByb3ZpZGVkKSwgb3IgaWYgZmQgaXMgLTEuICBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdAorICAgdXNlZCB1bnRpbCB0aGUgbmV4dCBneiogcmVhZCwgd3JpdGUsIHNlZWssIG9yIGNsb3NlIG9wZXJhdGlvbiwgc28gZ3pkb3BlbgorICAgd2lsbCBub3QgZGV0ZWN0IGlmIGZkIGlzIGludmFsaWQgKHVubGVzcyBmZCBpcyAtMSkuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGd6YnVmZmVyIE9GKChnekZpbGUgZmlsZSwgdW5zaWduZWQgc2l6ZSkpOworLyoKKyAgICAgU2V0IHRoZSBpbnRlcm5hbCBidWZmZXIgc2l6ZSB1c2VkIGJ5IHRoaXMgbGlicmFyeSdzIGZ1bmN0aW9ucy4gIFRoZQorICAgZGVmYXVsdCBidWZmZXIgc2l6ZSBpcyA4MTkyIGJ5dGVzLiAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhZnRlcgorICAgZ3pvcGVuKCkgb3IgZ3pkb3BlbigpLCBhbmQgYmVmb3JlIGFueSBvdGhlciBjYWxscyB0aGF0IHJlYWQgb3Igd3JpdGUgdGhlCisgICBmaWxlLiAgVGhlIGJ1ZmZlciBtZW1vcnkgYWxsb2NhdGlvbiBpcyBhbHdheXMgZGVmZXJyZWQgdG8gdGhlIGZpcnN0IHJlYWQgb3IKKyAgIHdyaXRlLiAgVHdvIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCwgZWl0aGVyIGJvdGggb2YgdGhlIHNwZWNpZmllZCBzaXplIHdoZW4KKyAgIHdyaXRpbmcsIG9yIG9uZSBvZiB0aGUgc3BlY2lmaWVkIHNpemUgYW5kIHRoZSBvdGhlciB0d2ljZSB0aGF0IHNpemUgd2hlbgorICAgcmVhZGluZy4gIEEgbGFyZ2VyIGJ1ZmZlciBzaXplIG9mLCBmb3IgZXhhbXBsZSwgNjRLIG9yIDEyOEsgYnl0ZXMgd2lsbAorICAgbm90aWNlYWJseSBpbmNyZWFzZSB0aGUgc3BlZWQgb2YgZGVjb21wcmVzc2lvbiAocmVhZGluZykuCisKKyAgICAgVGhlIG5ldyBidWZmZXIgc2l6ZSBhbHNvIGFmZmVjdHMgdGhlIG1heGltdW0gbGVuZ3RoIGZvciBnenByaW50ZigpLgorCisgICAgIGd6YnVmZmVyKCkgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG9yIC0xIG9uIGZhaWx1cmUsIHN1Y2ggYXMgYmVpbmcgY2FsbGVkCisgICB0b28gbGF0ZS4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pzZXRwYXJhbXMgT0YoKGd6RmlsZSBmaWxlLCBpbnQgbGV2ZWwsIGludCBzdHJhdGVneSkpOworLyoKKyAgICAgRHluYW1pY2FsbHkgdXBkYXRlIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBvciBzdHJhdGVneS4gIFNlZSB0aGUgZGVzY3JpcHRpb24KKyAgIG9mIGRlZmxhdGVJbml0MiBmb3IgdGhlIG1lYW5pbmcgb2YgdGhlc2UgcGFyYW1ldGVycy4KKworICAgICBnenNldHBhcmFtcyByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIGZpbGUgd2FzIG5vdAorICAgb3BlbmVkIGZvciB3cml0aW5nLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBnenJlYWQgT0YoKGd6RmlsZSBmaWxlLCB2b2lkcCBidWYsIHVuc2lnbmVkIGxlbikpOworLyoKKyAgICAgUmVhZHMgdGhlIGdpdmVuIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLiAgSWYKKyAgIHRoZSBpbnB1dCBmaWxlIGlzIG5vdCBpbiBnemlwIGZvcm1hdCwgZ3pyZWFkIGNvcGllcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mCisgICBieXRlcyBpbnRvIHRoZSBidWZmZXIgZGlyZWN0bHkgZnJvbSB0aGUgZmlsZS4KKworICAgICBBZnRlciByZWFjaGluZyB0aGUgZW5kIG9mIGEgZ3ppcCBzdHJlYW0gaW4gdGhlIGlucHV0LCBnenJlYWQgd2lsbCBjb250aW51ZQorICAgdG8gcmVhZCwgbG9va2luZyBmb3IgYW5vdGhlciBnemlwIHN0cmVhbS4gIEFueSBudW1iZXIgb2YgZ3ppcCBzdHJlYW1zIG1heSBiZQorICAgY29uY2F0ZW5hdGVkIGluIHRoZSBpbnB1dCBmaWxlLCBhbmQgd2lsbCBhbGwgYmUgZGVjb21wcmVzc2VkIGJ5IGd6cmVhZCgpLgorICAgSWYgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBnemlwIHN0cmVhbSBpcyBlbmNvdW50ZXJlZCBhZnRlciBhIGd6aXAgc3RyZWFtLAorICAgdGhhdCByZW1haW5pbmcgdHJhaWxpbmcgZ2FyYmFnZSBpcyBpZ25vcmVkIChhbmQgbm8gZXJyb3IgaXMgcmV0dXJuZWQpLgorCisgICAgIGd6cmVhZCBjYW4gYmUgdXNlZCB0byByZWFkIGEgZ3ppcCBmaWxlIHRoYXQgaXMgYmVpbmcgY29uY3VycmVudGx5IHdyaXR0ZW4uCisgICBVcG9uIHJlYWNoaW5nIHRoZSBlbmQgb2YgdGhlIGlucHV0LCBnenJlYWQgd2lsbCByZXR1cm4gd2l0aCB0aGUgYXZhaWxhYmxlCisgICBkYXRhLiAgSWYgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgZ3plcnJvciBpcyBaX09LIG9yIFpfQlVGX0VSUk9SLCB0aGVuCisgICBnemNsZWFyZXJyIGNhbiBiZSB1c2VkIHRvIGNsZWFyIHRoZSBlbmQgb2YgZmlsZSBpbmRpY2F0b3IgaW4gb3JkZXIgdG8gcGVybWl0CisgICBnenJlYWQgdG8gYmUgdHJpZWQgYWdhaW4uICBaX09LIGluZGljYXRlcyB0aGF0IGEgZ3ppcCBzdHJlYW0gd2FzIGNvbXBsZXRlZAorICAgb24gdGhlIGxhc3QgZ3pyZWFkLiAgWl9CVUZfRVJST1IgaW5kaWNhdGVzIHRoYXQgdGhlIGlucHV0IGZpbGUgZW5kZWQgaW4gdGhlCisgICBtaWRkbGUgb2YgYSBnemlwIHN0cmVhbS4gIE5vdGUgdGhhdCBnenJlYWQgZG9lcyBub3QgcmV0dXJuIC0xIGluIHRoZSBldmVudAorICAgb2YgYW4gaW5jb21wbGV0ZSBnemlwIHN0cmVhbS4gIFRoaXMgZXJyb3IgaXMgZGVmZXJyZWQgdW50aWwgZ3pjbG9zZSgpLCB3aGljaAorICAgd2lsbCByZXR1cm4gWl9CVUZfRVJST1IgaWYgdGhlIGxhc3QgZ3pyZWFkIGVuZGVkIGluIHRoZSBtaWRkbGUgb2YgYSBnemlwCisgICBzdHJlYW0uICBBbHRlcm5hdGl2ZWx5LCBnemVycm9yIGNhbiBiZSB1c2VkIGJlZm9yZSBnemNsb3NlIHRvIGRldGVjdCB0aGlzCisgICBjYXNlLgorCisgICAgIGd6cmVhZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHJlYWQsIGxlc3MgdGhhbgorICAgbGVuIGZvciBlbmQgb2YgZmlsZSwgb3IgLTEgZm9yIGVycm9yLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBnendyaXRlIE9GKChnekZpbGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZHBjIGJ1ZiwgdW5zaWduZWQgbGVuKSk7CisvKgorICAgICBXcml0ZXMgdGhlIGdpdmVuIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLgorICAgZ3p3cml0ZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIHdyaXR0ZW4gb3IgMCBpbiBjYXNlIG9mCisgICBlcnJvci4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlRWQSBnenByaW50ZiBaX0FSRygoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisvKgorICAgICBDb252ZXJ0cywgZm9ybWF0cywgYW5kIHdyaXRlcyB0aGUgYXJndW1lbnRzIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUgdW5kZXIKKyAgIGNvbnRyb2wgb2YgdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGluIGZwcmludGYuICBnenByaW50ZiByZXR1cm5zIHRoZSBudW1iZXIgb2YKKyAgIHVuY29tcHJlc3NlZCBieXRlcyBhY3R1YWxseSB3cml0dGVuLCBvciAwIGluIGNhc2Ugb2YgZXJyb3IuICBUaGUgbnVtYmVyIG9mCisgICB1bmNvbXByZXNzZWQgYnl0ZXMgd3JpdHRlbiBpcyBsaW1pdGVkIHRvIDgxOTEsIG9yIG9uZSBsZXNzIHRoYW4gdGhlIGJ1ZmZlcgorICAgc2l6ZSBnaXZlbiB0byBnemJ1ZmZlcigpLiAgVGhlIGNhbGxlciBzaG91bGQgYXNzdXJlIHRoYXQgdGhpcyBsaW1pdCBpcyBub3QKKyAgIGV4Y2VlZGVkLiAgSWYgaXQgaXMgZXhjZWVkZWQsIHRoZW4gZ3pwcmludGYoKSB3aWxsIHJldHVybiBhbiBlcnJvciAoMCkgd2l0aAorICAgbm90aGluZyB3cml0dGVuLiAgSW4gdGhpcyBjYXNlLCB0aGVyZSBtYXkgYWxzbyBiZSBhIGJ1ZmZlciBvdmVyZmxvdyB3aXRoCisgICB1bnByZWRpY3RhYmxlIGNvbnNlcXVlbmNlcywgd2hpY2ggaXMgcG9zc2libGUgb25seSBpZiB6bGliIHdhcyBjb21waWxlZCB3aXRoCisgICB0aGUgaW5zZWN1cmUgZnVuY3Rpb25zIHNwcmludGYoKSBvciB2c3ByaW50ZigpIGJlY2F1c2UgdGhlIHNlY3VyZSBzbnByaW50ZigpCisgICBvciB2c25wcmludGYoKSBmdW5jdGlvbnMgd2VyZSBub3QgYXZhaWxhYmxlLiAgVGhpcyBjYW4gYmUgZGV0ZXJtaW5lZCB1c2luZworICAgemxpYkNvbXBpbGVGbGFncygpLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBnenB1dHMgT0YoKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpzKSk7CisvKgorICAgICBXcml0ZXMgdGhlIGdpdmVuIG51bGwtdGVybWluYXRlZCBzdHJpbmcgdG8gdGhlIGNvbXByZXNzZWQgZmlsZSwgZXhjbHVkaW5nCisgICB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIuCisKKyAgICAgZ3pwdXRzIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdyaXR0ZW4sIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuCisqLworCitaRVhURVJOIGNoYXIgKiBaRVhQT1JUIGd6Z2V0cyBPRigoZ3pGaWxlIGZpbGUsIGNoYXIgKmJ1ZiwgaW50IGxlbikpOworLyoKKyAgICAgUmVhZHMgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlIHVudGlsIGxlbi0xIGNoYXJhY3RlcnMgYXJlIHJlYWQsIG9yIGEKKyAgIG5ld2xpbmUgY2hhcmFjdGVyIGlzIHJlYWQgYW5kIHRyYW5zZmVycmVkIHRvIGJ1Ziwgb3IgYW4gZW5kLW9mLWZpbGUKKyAgIGNvbmRpdGlvbiBpcyBlbmNvdW50ZXJlZC4gIElmIGFueSBjaGFyYWN0ZXJzIGFyZSByZWFkIG9yIGlmIGxlbiA9PSAxLCB0aGUKKyAgIHN0cmluZyBpcyB0ZXJtaW5hdGVkIHdpdGggYSBudWxsIGNoYXJhY3Rlci4gIElmIG5vIGNoYXJhY3RlcnMgYXJlIHJlYWQgZHVlCisgICB0byBhbiBlbmQtb2YtZmlsZSBvciBsZW4gPCAxLCB0aGVuIHRoZSBidWZmZXIgaXMgbGVmdCB1bnRvdWNoZWQuCisKKyAgICAgZ3pnZXRzIHJldHVybnMgYnVmIHdoaWNoIGlzIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZywgb3IgaXQgcmV0dXJucyBOVUxMCisgICBmb3IgZW5kLW9mLWZpbGUgb3IgaW4gY2FzZSBvZiBlcnJvci4gIElmIHRoZXJlIHdhcyBhbiBlcnJvciwgdGhlIGNvbnRlbnRzIGF0CisgICBidWYgYXJlIGluZGV0ZXJtaW5hdGUuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGd6cHV0YyBPRigoZ3pGaWxlIGZpbGUsIGludCBjKSk7CisvKgorICAgICBXcml0ZXMgYywgY29udmVydGVkIHRvIGFuIHVuc2lnbmVkIGNoYXIsIGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4gIGd6cHV0YworICAgcmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgd3JpdHRlbiwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pnZXRjIE9GKChnekZpbGUgZmlsZSkpOworLyoKKyAgICAgUmVhZHMgb25lIGJ5dGUgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLiAgZ3pnZXRjIHJldHVybnMgdGhpcyBieXRlIG9yIC0xCisgICBpbiBjYXNlIG9mIGVuZCBvZiBmaWxlIG9yIGVycm9yLiAgVGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIG1hY3JvIGZvciBzcGVlZC4KKyAgIEFzIHN1Y2gsIGl0IGRvZXMgbm90IGRvIGFsbCBvZiB0aGUgY2hlY2tpbmcgdGhlIG90aGVyIGZ1bmN0aW9ucyBkby4gIEkuZS4KKyAgIGl0IGRvZXMgbm90IGNoZWNrIHRvIHNlZSBpZiBmaWxlIGlzIE5VTEwsIG5vciB3aGV0aGVyIHRoZSBzdHJ1Y3R1cmUgZmlsZQorICAgcG9pbnRzIHRvIGhhcyBiZWVuIGNsb2JiZXJlZCBvciBub3QuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGd6dW5nZXRjIE9GKChpbnQgYywgZ3pGaWxlIGZpbGUpKTsKKy8qCisgICAgIFB1c2ggb25lIGNoYXJhY3RlciBiYWNrIG9udG8gdGhlIHN0cmVhbSB0byBiZSByZWFkIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIKKyAgIG9uIHRoZSBuZXh0IHJlYWQuICBBdCBsZWFzdCBvbmUgY2hhcmFjdGVyIG9mIHB1c2gtYmFjayBpcyBhbGxvd2VkLgorICAgZ3p1bmdldGMoKSByZXR1cm5zIHRoZSBjaGFyYWN0ZXIgcHVzaGVkLCBvciAtMSBvbiBmYWlsdXJlLiAgZ3p1bmdldGMoKSB3aWxsCisgICBmYWlsIGlmIGMgaXMgLTEsIGFuZCBtYXkgZmFpbCBpZiBhIGNoYXJhY3RlciBoYXMgYmVlbiBwdXNoZWQgYnV0IG5vdCByZWFkCisgICB5ZXQuICBJZiBnenVuZ2V0YyBpcyB1c2VkIGltbWVkaWF0ZWx5IGFmdGVyIGd6b3BlbiBvciBnemRvcGVuLCBhdCBsZWFzdCB0aGUKKyAgIG91dHB1dCBidWZmZXIgc2l6ZSBvZiBwdXNoZWQgY2hhcmFjdGVycyBpcyBhbGxvd2VkLiAgKFNlZSBnemJ1ZmZlciBhYm92ZS4pCisgICBUaGUgcHVzaGVkIGNoYXJhY3RlciB3aWxsIGJlIGRpc2NhcmRlZCBpZiB0aGUgc3RyZWFtIGlzIHJlcG9zaXRpb25lZCB3aXRoCisgICBnenNlZWsoKSBvciBnenJld2luZCgpLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBnemZsdXNoIE9GKChnekZpbGUgZmlsZSwgaW50IGZsdXNoKSk7CisvKgorICAgICBGbHVzaGVzIGFsbCBwZW5kaW5nIG91dHB1dCBpbnRvIHRoZSBjb21wcmVzc2VkIGZpbGUuICBUaGUgcGFyYW1ldGVyIGZsdXNoCisgICBpcyBhcyBpbiB0aGUgZGVmbGF0ZSgpIGZ1bmN0aW9uLiAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgemxpYiBlcnJvciBudW1iZXIKKyAgIChzZWUgZnVuY3Rpb24gZ3plcnJvciBiZWxvdykuICBnemZsdXNoIGlzIG9ubHkgcGVybWl0dGVkIHdoZW4gd3JpdGluZy4KKworICAgICBJZiB0aGUgZmx1c2ggcGFyYW1ldGVyIGlzIFpfRklOSVNILCB0aGUgcmVtYWluaW5nIGRhdGEgaXMgd3JpdHRlbiBhbmQgdGhlCisgICBnemlwIHN0cmVhbSBpcyBjb21wbGV0ZWQgaW4gdGhlIG91dHB1dC4gIElmIGd6d3JpdGUoKSBpcyBjYWxsZWQgYWdhaW4sIGEgbmV3CisgICBnemlwIHN0cmVhbSB3aWxsIGJlIHN0YXJ0ZWQgaW4gdGhlIG91dHB1dC4gIGd6cmVhZCgpIGlzIGFibGUgdG8gcmVhZCBzdWNoCisgICBjb25jYXRlbnRlZCBnemlwIHN0cmVhbXMuCisKKyAgICAgZ3pmbHVzaCBzaG91bGQgYmUgY2FsbGVkIG9ubHkgd2hlbiBzdHJpY3RseSBuZWNlc3NhcnkgYmVjYXVzZSBpdCB3aWxsCisgICBkZWdyYWRlIGNvbXByZXNzaW9uIGlmIGNhbGxlZCB0b28gb2Z0ZW4uCisqLworCisvKgorWkVYVEVSTiB6X29mZl90IFpFWFBPUlQgZ3pzZWVrIE9GKChnekZpbGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgel9vZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpKTsKKworICAgICBTZXRzIHRoZSBzdGFydGluZyBwb3NpdGlvbiBmb3IgdGhlIG5leHQgZ3pyZWFkIG9yIGd6d3JpdGUgb24gdGhlIGdpdmVuCisgICBjb21wcmVzc2VkIGZpbGUuICBUaGUgb2Zmc2V0IHJlcHJlc2VudHMgYSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlCisgICB1bmNvbXByZXNzZWQgZGF0YSBzdHJlYW0uICBUaGUgd2hlbmNlIHBhcmFtZXRlciBpcyBkZWZpbmVkIGFzIGluIGxzZWVrKDIpOworICAgdGhlIHZhbHVlIFNFRUtfRU5EIGlzIG5vdCBzdXBwb3J0ZWQuCisKKyAgICAgSWYgdGhlIGZpbGUgaXMgb3BlbmVkIGZvciByZWFkaW5nLCB0aGlzIGZ1bmN0aW9uIGlzIGVtdWxhdGVkIGJ1dCBjYW4gYmUKKyAgIGV4dHJlbWVseSBzbG93LiAgSWYgdGhlIGZpbGUgaXMgb3BlbmVkIGZvciB3cml0aW5nLCBvbmx5IGZvcndhcmQgc2Vla3MgYXJlCisgICBzdXBwb3J0ZWQ7IGd6c2VlayB0aGVuIGNvbXByZXNzZXMgYSBzZXF1ZW5jZSBvZiB6ZXJvZXMgdXAgdG8gdGhlIG5ldworICAgc3RhcnRpbmcgcG9zaXRpb24uCisKKyAgICAgZ3pzZWVrIHJldHVybnMgdGhlIHJlc3VsdGluZyBvZmZzZXQgbG9jYXRpb24gYXMgbWVhc3VyZWQgaW4gYnl0ZXMgZnJvbQorICAgdGhlIGJlZ2lubmluZyBvZiB0aGUgdW5jb21wcmVzc2VkIHN0cmVhbSwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvciwgaW4KKyAgIHBhcnRpY3VsYXIgaWYgdGhlIGZpbGUgaXMgb3BlbmVkIGZvciB3cml0aW5nIGFuZCB0aGUgbmV3IHN0YXJ0aW5nIHBvc2l0aW9uCisgICB3b3VsZCBiZSBiZWZvcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisqLworCitaRVhURVJOIGludCBaRVhQT1JUICAgIGd6cmV3aW5kIE9GKChnekZpbGUgZmlsZSkpOworLyoKKyAgICAgUmV3aW5kcyB0aGUgZ2l2ZW4gZmlsZS4gVGhpcyBmdW5jdGlvbiBpcyBzdXBwb3J0ZWQgb25seSBmb3IgcmVhZGluZy4KKworICAgICBnenJld2luZChmaWxlKSBpcyBlcXVpdmFsZW50IHRvIChpbnQpZ3pzZWVrKGZpbGUsIDBMLCBTRUVLX1NFVCkKKyovCisKKy8qCitaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCAgICBnenRlbGwgT0YoKGd6RmlsZSBmaWxlKSk7CisKKyAgICAgUmV0dXJucyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gZm9yIHRoZSBuZXh0IGd6cmVhZCBvciBnendyaXRlIG9uIHRoZSBnaXZlbgorICAgY29tcHJlc3NlZCBmaWxlLiAgVGhpcyBwb3NpdGlvbiByZXByZXNlbnRzIGEgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZQorICAgdW5jb21wcmVzc2VkIGRhdGEgc3RyZWFtLCBhbmQgaXMgemVybyB3aGVuIHN0YXJ0aW5nLCBldmVuIGlmIGFwcGVuZGluZyBvcgorICAgcmVhZGluZyBhIGd6aXAgc3RyZWFtIGZyb20gdGhlIG1pZGRsZSBvZiBhIGZpbGUgdXNpbmcgZ3pkb3BlbigpLgorCisgICAgIGd6dGVsbChmaWxlKSBpcyBlcXVpdmFsZW50IHRvIGd6c2VlayhmaWxlLCAwTCwgU0VFS19DVVIpCisqLworCisvKgorWkVYVEVSTiB6X29mZl90IFpFWFBPUlQgZ3pvZmZzZXQgT0YoKGd6RmlsZSBmaWxlKSk7CisKKyAgICAgUmV0dXJucyB0aGUgY3VycmVudCBvZmZzZXQgaW4gdGhlIGZpbGUgYmVpbmcgcmVhZCBvciB3cml0dGVuLiAgVGhpcyBvZmZzZXQKKyAgIGluY2x1ZGVzIHRoZSBjb3VudCBvZiBieXRlcyB0aGF0IHByZWNlZGUgdGhlIGd6aXAgc3RyZWFtLCBmb3IgZXhhbXBsZSB3aGVuCisgICBhcHBlbmRpbmcgb3Igd2hlbiB1c2luZyBnemRvcGVuKCkgZm9yIHJlYWRpbmcuICBXaGVuIHJlYWRpbmcsIHRoZSBvZmZzZXQKKyAgIGRvZXMgbm90IGluY2x1ZGUgYXMgeWV0IHVudXNlZCBidWZmZXJlZCBpbnB1dC4gIFRoaXMgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWQKKyAgIGZvciBhIHByb2dyZXNzIGluZGljYXRvci4gIE9uIGVycm9yLCBnem9mZnNldCgpIHJldHVybnMgLTEuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGd6ZW9mIE9GKChnekZpbGUgZmlsZSkpOworLyoKKyAgICAgUmV0dXJucyB0cnVlICgxKSBpZiB0aGUgZW5kLW9mLWZpbGUgaW5kaWNhdG9yIGhhcyBiZWVuIHNldCB3aGlsZSByZWFkaW5nLAorICAgZmFsc2UgKDApIG90aGVyd2lzZS4gIE5vdGUgdGhhdCB0aGUgZW5kLW9mLWZpbGUgaW5kaWNhdG9yIGlzIHNldCBvbmx5IGlmIHRoZQorICAgcmVhZCB0cmllZCB0byBnbyBwYXN0IHRoZSBlbmQgb2YgdGhlIGlucHV0LCBidXQgY2FtZSB1cCBzaG9ydC4gIFRoZXJlZm9yZSwKKyAgIGp1c3QgbGlrZSBmZW9mKCksIGd6ZW9mKCkgbWF5IHJldHVybiBmYWxzZSBldmVuIGlmIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSB0bworICAgcmVhZCwgaW4gdGhlIGV2ZW50IHRoYXQgdGhlIGxhc3QgcmVhZCByZXF1ZXN0IHdhcyBmb3IgdGhlIGV4YWN0IG51bWJlciBvZgorICAgYnl0ZXMgcmVtYWluaW5nIGluIHRoZSBpbnB1dCBmaWxlLiAgVGhpcyB3aWxsIGhhcHBlbiBpZiB0aGUgaW5wdXQgZmlsZSBzaXplCisgICBpcyBhbiBleGFjdCBtdWx0aXBsZSBvZiB0aGUgYnVmZmVyIHNpemUuCisKKyAgICAgSWYgZ3plb2YoKSByZXR1cm5zIHRydWUsIHRoZW4gdGhlIHJlYWQgZnVuY3Rpb25zIHdpbGwgcmV0dXJuIG5vIG1vcmUgZGF0YSwKKyAgIHVubGVzcyB0aGUgZW5kLW9mLWZpbGUgaW5kaWNhdG9yIGlzIHJlc2V0IGJ5IGd6Y2xlYXJlcnIoKSBhbmQgdGhlIGlucHV0IGZpbGUKKyAgIGhhcyBncm93biBzaW5jZSB0aGUgcHJldmlvdXMgZW5kIG9mIGZpbGUgd2FzIGRldGVjdGVkLgorKi8KKworWkVYVEVSTiBpbnQgWkVYUE9SVCBnemRpcmVjdCBPRigoZ3pGaWxlIGZpbGUpKTsKKy8qCisgICAgIFJldHVybnMgdHJ1ZSAoMSkgaWYgZmlsZSBpcyBiZWluZyBjb3BpZWQgZGlyZWN0bHkgd2hpbGUgcmVhZGluZywgb3IgZmFsc2UKKyAgICgwKSBpZiBmaWxlIGlzIGEgZ3ppcCBzdHJlYW0gYmVpbmcgZGVjb21wcmVzc2VkLgorCisgICAgIElmIHRoZSBpbnB1dCBmaWxlIGlzIGVtcHR5LCBnemRpcmVjdCgpIHdpbGwgcmV0dXJuIHRydWUsIHNpbmNlIHRoZSBpbnB1dAorICAgZG9lcyBub3QgY29udGFpbiBhIGd6aXAgc3RyZWFtLgorCisgICAgIElmIGd6ZGlyZWN0KCkgaXMgdXNlZCBpbW1lZGlhdGVseSBhZnRlciBnem9wZW4oKSBvciBnemRvcGVuKCkgaXQgd2lsbAorICAgY2F1c2UgYnVmZmVycyB0byBiZSBhbGxvY2F0ZWQgdG8gYWxsb3cgcmVhZGluZyB0aGUgZmlsZSB0byBkZXRlcm1pbmUgaWYgaXQKKyAgIGlzIGEgZ3ppcCBmaWxlLiAgVGhlcmVmb3JlIGlmIGd6YnVmZmVyKCkgaXMgdXNlZCwgaXQgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUKKyAgIGd6ZGlyZWN0KCkuCisKKyAgICAgV2hlbiB3cml0aW5nLCBnemRpcmVjdCgpIHJldHVybnMgdHJ1ZSAoMSkgaWYgdHJhbnNwYXJlbnQgd3JpdGluZyB3YXMKKyAgIHJlcXVlc3RlZCAoIndUIiBmb3IgdGhlIGd6b3BlbigpIG1vZGUpLCBvciBmYWxzZSAoMCkgb3RoZXJ3aXNlLiAgKE5vdGU6CisgICBnemRpcmVjdCgpIGlzIG5vdCBuZWVkZWQgd2hlbiB3cml0aW5nLiAgVHJhbnNwYXJlbnQgd3JpdGluZyBtdXN0IGJlCisgICBleHBsaWNpdGx5IHJlcXVlc3RlZCwgc28gdGhlIGFwcGxpY2F0aW9uIGFscmVhZHkga25vd3MgdGhlIGFuc3dlci4gIFdoZW4KKyAgIGxpbmtpbmcgc3RhdGljYWxseSwgdXNpbmcgZ3pkaXJlY3QoKSB3aWxsIGluY2x1ZGUgYWxsIG9mIHRoZSB6bGliIGNvZGUgZm9yCisgICBnemlwIGZpbGUgcmVhZGluZyBhbmQgZGVjb21wcmVzc2lvbiwgd2hpY2ggbWF5IG5vdCBiZSBkZXNpcmVkLikKKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgICAgZ3pjbG9zZSBPRigoZ3pGaWxlIGZpbGUpKTsKKy8qCisgICAgIEZsdXNoZXMgYWxsIHBlbmRpbmcgb3V0cHV0IGlmIG5lY2Vzc2FyeSwgY2xvc2VzIHRoZSBjb21wcmVzc2VkIGZpbGUgYW5kCisgICBkZWFsbG9jYXRlcyB0aGUgKGRlKWNvbXByZXNzaW9uIHN0YXRlLiAgTm90ZSB0aGF0IG9uY2UgZmlsZSBpcyBjbG9zZWQsIHlvdQorICAgY2Fubm90IGNhbGwgZ3plcnJvciB3aXRoIGZpbGUsIHNpbmNlIGl0cyBzdHJ1Y3R1cmVzIGhhdmUgYmVlbiBkZWFsbG9jYXRlZC4KKyAgIGd6Y2xvc2UgbXVzdCBub3QgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGZpbGUsIGp1c3QgYXMgZnJlZQorICAgbXVzdCBub3QgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGFsbG9jYXRpb24uCisKKyAgICAgZ3pjbG9zZSB3aWxsIHJldHVybiBaX1NUUkVBTV9FUlJPUiBpZiBmaWxlIGlzIG5vdCB2YWxpZCwgWl9FUlJOTyBvbiBhCisgICBmaWxlIG9wZXJhdGlvbiBlcnJvciwgWl9NRU1fRVJST1IgaWYgb3V0IG9mIG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlCisgICBsYXN0IHJlYWQgZW5kZWQgaW4gdGhlIG1pZGRsZSBvZiBhIGd6aXAgc3RyZWFtLCBvciBaX09LIG9uIHN1Y2Nlc3MuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGd6Y2xvc2VfciBPRigoZ3pGaWxlIGZpbGUpKTsKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pjbG9zZV93IE9GKChnekZpbGUgZmlsZSkpOworLyoKKyAgICAgU2FtZSBhcyBnemNsb3NlKCksIGJ1dCBnemNsb3NlX3IoKSBpcyBvbmx5IGZvciB1c2Ugd2hlbiByZWFkaW5nLCBhbmQKKyAgIGd6Y2xvc2VfdygpIGlzIG9ubHkgZm9yIHVzZSB3aGVuIHdyaXRpbmcgb3IgYXBwZW5kaW5nLiAgVGhlIGFkdmFudGFnZSB0bworICAgdXNpbmcgdGhlc2UgaW5zdGVhZCBvZiBnemNsb3NlKCkgaXMgdGhhdCB0aGV5IGF2b2lkIGxpbmtpbmcgaW4gemxpYgorICAgY29tcHJlc3Npb24gb3IgZGVjb21wcmVzc2lvbiBjb2RlIHRoYXQgaXMgbm90IHVzZWQgd2hlbiBvbmx5IHJlYWRpbmcgb3Igb25seQorICAgd3JpdGluZyByZXNwZWN0aXZlbHkuICBJZiBnemNsb3NlKCkgaXMgdXNlZCwgdGhlbiBib3RoIGNvbXByZXNzaW9uIGFuZAorICAgZGVjb21wcmVzc2lvbiBjb2RlIHdpbGwgYmUgaW5jbHVkZWQgdGhlIGFwcGxpY2F0aW9uIHdoZW4gbGlua2luZyB0byBhIHN0YXRpYworICAgemxpYiBsaWJyYXJ5LgorKi8KKworWkVYVEVSTiBjb25zdCBjaGFyICogWkVYUE9SVCBnemVycm9yIE9GKChnekZpbGUgZmlsZSwgaW50ICplcnJudW0pKTsKKy8qCisgICAgIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBsYXN0IGVycm9yIHdoaWNoIG9jY3VycmVkIG9uIHRoZSBnaXZlbgorICAgY29tcHJlc3NlZCBmaWxlLiAgZXJybnVtIGlzIHNldCB0byB6bGliIGVycm9yIG51bWJlci4gIElmIGFuIGVycm9yIG9jY3VycmVkCisgICBpbiB0aGUgZmlsZSBzeXN0ZW0gYW5kIG5vdCBpbiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSwgZXJybnVtIGlzIHNldCB0bworICAgWl9FUlJOTyBhbmQgdGhlIGFwcGxpY2F0aW9uIG1heSBjb25zdWx0IGVycm5vIHRvIGdldCB0aGUgZXhhY3QgZXJyb3IgY29kZS4KKworICAgICBUaGUgYXBwbGljYXRpb24gbXVzdCBub3QgbW9kaWZ5IHRoZSByZXR1cm5lZCBzdHJpbmcuICBGdXR1cmUgY2FsbHMgdG8KKyAgIHRoaXMgZnVuY3Rpb24gbWF5IGludmFsaWRhdGUgdGhlIHByZXZpb3VzbHkgcmV0dXJuZWQgc3RyaW5nLiAgSWYgZmlsZSBpcworICAgY2xvc2VkLCB0aGVuIHRoZSBzdHJpbmcgcHJldmlvdXNseSByZXR1cm5lZCBieSBnemVycm9yIHdpbGwgbm8gbG9uZ2VyIGJlCisgICBhdmFpbGFibGUuCisKKyAgICAgZ3plcnJvcigpIHNob3VsZCBiZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIGVycm9ycyBmcm9tIGVuZC1vZi1maWxlIGZvciB0aG9zZQorICAgZnVuY3Rpb25zIGFib3ZlIHRoYXQgZG8gbm90IGRpc3Rpbmd1aXNoIHRob3NlIGNhc2VzIGluIHRoZWlyIHJldHVybiB2YWx1ZXMuCisqLworCitaRVhURVJOIHZvaWQgWkVYUE9SVCBnemNsZWFyZXJyIE9GKChnekZpbGUgZmlsZSkpOworLyoKKyAgICAgQ2xlYXJzIHRoZSBlcnJvciBhbmQgZW5kLW9mLWZpbGUgZmxhZ3MgZm9yIGZpbGUuICBUaGlzIGlzIGFuYWxvZ291cyB0byB0aGUKKyAgIGNsZWFyZXJyKCkgZnVuY3Rpb24gaW4gc3RkaW8uICBUaGlzIGlzIHVzZWZ1bCBmb3IgY29udGludWluZyB0byByZWFkIGEgZ3ppcAorICAgZmlsZSB0aGF0IGlzIGJlaW5nIHdyaXR0ZW4gY29uY3VycmVudGx5LgorKi8KKworI2VuZGlmIC8qICFaX1NPTE8gKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hlY2tzdW0gZnVuY3Rpb25zICovCisKKy8qCisgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IHJlbGF0ZWQgdG8gY29tcHJlc3Npb24gYnV0IGFyZSBleHBvcnRlZAorICAgYW55d2F5IGJlY2F1c2UgdGhleSBtaWdodCBiZSB1c2VmdWwgaW4gYXBwbGljYXRpb25zIHVzaW5nIHRoZSBjb21wcmVzc2lvbgorICAgbGlicmFyeS4KKyovCisKK1pFWFRFUk4gdUxvbmcgWkVYUE9SVCBhZGxlcjMyIE9GKCh1TG9uZyBhZGxlciwgY29uc3QgQnl0ZWYgKmJ1ZiwgdUludCBsZW4pKTsKKy8qCisgICAgIFVwZGF0ZSBhIHJ1bm5pbmcgQWRsZXItMzIgY2hlY2tzdW0gd2l0aCB0aGUgYnl0ZXMgYnVmWzAuLmxlbi0xXSBhbmQKKyAgIHJldHVybiB0aGUgdXBkYXRlZCBjaGVja3N1bS4gIElmIGJ1ZiBpcyBaX05VTEwsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUKKyAgIHJlcXVpcmVkIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBjaGVja3N1bS4KKworICAgICBBbiBBZGxlci0zMiBjaGVja3N1bSBpcyBhbG1vc3QgYXMgcmVsaWFibGUgYXMgYSBDUkMzMiBidXQgY2FuIGJlIGNvbXB1dGVkCisgICBtdWNoIGZhc3Rlci4KKworICAgVXNhZ2UgZXhhbXBsZToKKworICAgICB1TG9uZyBhZGxlciA9IGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7CisKKyAgICAgd2hpbGUgKHJlYWRfYnVmZmVyKGJ1ZmZlciwgbGVuZ3RoKSAhPSBFT0YpIHsKKyAgICAgICBhZGxlciA9IGFkbGVyMzIoYWRsZXIsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgfQorICAgICBpZiAoYWRsZXIgIT0gb3JpZ2luYWxfYWRsZXIpIGVycm9yKCk7CisqLworCisvKgorWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZSBPRigodUxvbmcgYWRsZXIxLCB1TG9uZyBhZGxlcjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6X29mZl90IGxlbjIpKTsKKworICAgICBDb21iaW5lIHR3byBBZGxlci0zMiBjaGVja3N1bXMgaW50byBvbmUuICBGb3IgdHdvIHNlcXVlbmNlcyBvZiBieXRlcywgc2VxMQorICAgYW5kIHNlcTIgd2l0aCBsZW5ndGhzIGxlbjEgYW5kIGxlbjIsIEFkbGVyLTMyIGNoZWNrc3VtcyB3ZXJlIGNhbGN1bGF0ZWQgZm9yCisgICBlYWNoLCBhZGxlcjEgYW5kIGFkbGVyMi4gIGFkbGVyMzJfY29tYmluZSgpIHJldHVybnMgdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mCisgICBzZXExIGFuZCBzZXEyIGNvbmNhdGVuYXRlZCwgcmVxdWlyaW5nIG9ubHkgYWRsZXIxLCBhZGxlcjIsIGFuZCBsZW4yLiAgTm90ZQorICAgdGhhdCB0aGUgel9vZmZfdCB0eXBlIChsaWtlIG9mZl90KSBpcyBhIHNpZ25lZCBpbnRlZ2VyLiAgSWYgbGVuMiBpcworICAgbmVnYXRpdmUsIHRoZSByZXN1bHQgaGFzIG5vIG1lYW5pbmcgb3IgdXRpbGl0eS4KKyovCisKK1pFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMiAgIE9GKCh1TG9uZyBjcmMsIGNvbnN0IEJ5dGVmICpidWYsIHVJbnQgbGVuKSk7CisvKgorICAgICBVcGRhdGUgYSBydW5uaW5nIENSQy0zMiB3aXRoIHRoZSBieXRlcyBidWZbMC4ubGVuLTFdIGFuZCByZXR1cm4gdGhlCisgICB1cGRhdGVkIENSQy0zMi4gIElmIGJ1ZiBpcyBaX05VTEwsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWlyZWQKKyAgIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBjcmMuICBQcmUtIGFuZCBwb3N0LWNvbmRpdGlvbmluZyAob25lJ3MgY29tcGxlbWVudCkgaXMKKyAgIHBlcmZvcm1lZCB3aXRoaW4gdGhpcyBmdW5jdGlvbiBzbyBpdCBzaG91bGRuJ3QgYmUgZG9uZSBieSB0aGUgYXBwbGljYXRpb24uCisKKyAgIFVzYWdlIGV4YW1wbGU6CisKKyAgICAgdUxvbmcgY3JjID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7CisKKyAgICAgd2hpbGUgKHJlYWRfYnVmZmVyKGJ1ZmZlciwgbGVuZ3RoKSAhPSBFT0YpIHsKKyAgICAgICBjcmMgPSBjcmMzMihjcmMsIGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgfQorICAgICBpZiAoY3JjICE9IG9yaWdpbmFsX2NyYykgZXJyb3IoKTsKKyovCisKKy8qCitaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZSBPRigodUxvbmcgY3JjMSwgdUxvbmcgY3JjMiwgel9vZmZfdCBsZW4yKSk7CisKKyAgICAgQ29tYmluZSB0d28gQ1JDLTMyIGNoZWNrIHZhbHVlcyBpbnRvIG9uZS4gIEZvciB0d28gc2VxdWVuY2VzIG9mIGJ5dGVzLAorICAgc2VxMSBhbmQgc2VxMiB3aXRoIGxlbmd0aHMgbGVuMSBhbmQgbGVuMiwgQ1JDLTMyIGNoZWNrIHZhbHVlcyB3ZXJlCisgICBjYWxjdWxhdGVkIGZvciBlYWNoLCBjcmMxIGFuZCBjcmMyLiAgY3JjMzJfY29tYmluZSgpIHJldHVybnMgdGhlIENSQy0zMgorICAgY2hlY2sgdmFsdWUgb2Ygc2VxMSBhbmQgc2VxMiBjb25jYXRlbmF0ZWQsIHJlcXVpcmluZyBvbmx5IGNyYzEsIGNyYzIsIGFuZAorICAgbGVuMi4KKyovCisKKworICAgICAgICAgICAgICAgICAgICAgICAgLyogdmFyaW91cyBoYWNrcywgZG9uJ3QgbG9vayA6KSAqLworCisvKiBkZWZsYXRlSW5pdCBhbmQgaW5mbGF0ZUluaXQgYXJlIG1hY3JvcyB0byBhbGxvdyBjaGVja2luZyB0aGUgemxpYiB2ZXJzaW9uCisgKiBhbmQgdGhlIGNvbXBpbGVyJ3MgdmlldyBvZiB6X3N0cmVhbToKKyAqLworWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlSW5pdF8gT0YoKHpfc3RyZWFtcCBzdHJtLCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmVyc2lvbiwgaW50IHN0cmVhbV9zaXplKSk7CitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVJbml0XyBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmVyc2lvbiwgaW50IHN0cmVhbV9zaXplKSk7CitaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVJbml0Ml8gT0YoKHpfc3RyZWFtcCBzdHJtLCBpbnQgIGxldmVsLCBpbnQgIG1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpbmRvd0JpdHMsIGludCBtZW1MZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmF0ZWd5LCBjb25zdCBjaGFyICp2ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyZWFtX3NpemUpKTsKK1pFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUluaXQyXyBPRigoel9zdHJlYW1wIHN0cm0sIGludCAgd2luZG93Qml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmVyc2lvbiwgaW50IHN0cmVhbV9zaXplKSk7CitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVCYWNrSW5pdF8gT0YoKHpfc3RyZWFtcCBzdHJtLCBpbnQgd2luZG93Qml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBGQVIgKndpbmRvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmVhbV9zaXplKSk7CisjZGVmaW5lIGRlZmxhdGVJbml0KHN0cm0sIGxldmVsKSBcCisgICAgICAgIGRlZmxhdGVJbml0Xygoc3RybSksIChsZXZlbCksIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQorI2RlZmluZSBpbmZsYXRlSW5pdChzdHJtKSBcCisgICAgICAgIGluZmxhdGVJbml0Xygoc3RybSksIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQorI2RlZmluZSBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIG1ldGhvZCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5KSBcCisgICAgICAgIGRlZmxhdGVJbml0Ml8oKHN0cm0pLChsZXZlbCksKG1ldGhvZCksKHdpbmRvd0JpdHMpLChtZW1MZXZlbCksXAorICAgICAgICAgICAgICAgICAgICAgIChzdHJhdGVneSksIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQorI2RlZmluZSBpbmZsYXRlSW5pdDIoc3RybSwgd2luZG93Qml0cykgXAorICAgICAgICBpbmZsYXRlSW5pdDJfKChzdHJtKSwgKHdpbmRvd0JpdHMpLCBaTElCX1ZFUlNJT04sIFwKKyAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZih6X3N0cmVhbSkpCisjZGVmaW5lIGluZmxhdGVCYWNrSW5pdChzdHJtLCB3aW5kb3dCaXRzLCB3aW5kb3cpIFwKKyAgICAgICAgaW5mbGF0ZUJhY2tJbml0Xygoc3RybSksICh3aW5kb3dCaXRzKSwgKHdpbmRvdyksIFwKKyAgICAgICAgICAgICAgICAgICAgICBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKKworI2lmbmRlZiBaX1NPTE8KKworLyogZ3pnZXRjKCkgbWFjcm8gYW5kIGl0cyBzdXBwb3J0aW5nIGZ1bmN0aW9uIGFuZCBleHBvc2VkIGRhdGEgc3RydWN0dXJlLiAgTm90ZQorICogdGhhdCB0aGUgcmVhbCBpbnRlcm5hbCBzdGF0ZSBpcyBtdWNoIGxhcmdlciB0aGFuIHRoZSBleHBvc2VkIHN0cnVjdHVyZS4KKyAqIFRoaXMgYWJicmV2aWF0ZWQgc3RydWN0dXJlIGV4cG9zZXMganVzdCBlbm91Z2ggZm9yIHRoZSBnemdldGMoKSBtYWNyby4gIFRoZQorICogdXNlciBzaG91bGQgbm90IG1lc3Mgd2l0aCB0aGVzZSBleHBvc2VkIGVsZW1lbnRzLCBzaW5jZSB0aGVpciBuYW1lcyBvcgorICogYmVoYXZpb3IgY291bGQgY2hhbmdlIGluIHRoZSBmdXR1cmUsIHBlcmhhcHMgZXZlbiBjYXByaWNpb3VzbHkuICBUaGV5IGNhbgorICogb25seSBiZSB1c2VkIGJ5IHRoZSBnemdldGMoKSBtYWNyby4gIFlvdSBoYXZlIGJlZW4gd2FybmVkLgorICovCitzdHJ1Y3QgZ3pGaWxlX3MgeworICAgIHVuc2lnbmVkIGhhdmU7CisgICAgdW5zaWduZWQgY2hhciAqbmV4dDsKKyAgICB6X29mZjY0X3QgcG9zOworfTsKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pnZXRjXyBPRigoZ3pGaWxlIGZpbGUpKTsgIC8qIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKyNpZmRlZiBaX1BSRUZJWF9TRVQKKyMgIHVuZGVmIHpfZ3pnZXRjCisjICBkZWZpbmUgel9nemdldGMoZykgXAorICAgICAgICAgICgoZyktPmhhdmUgPyAoKGcpLT5oYXZlLS0sIChnKS0+cG9zKyssICooKGcpLT5uZXh0KSsrKSA6IGd6Z2V0YyhnKSkKKyNlbHNlCisjICBkZWZpbmUgZ3pnZXRjKGcpIFwKKyAgICAgICAgICAoKGcpLT5oYXZlID8gKChnKS0+aGF2ZS0tLCAoZyktPnBvcysrLCAqKChnKS0+bmV4dCkrKykgOiBnemdldGMoZykpCisjZW5kaWYKKworLyogcHJvdmlkZSA2NC1iaXQgb2Zmc2V0IGZ1bmN0aW9ucyBpZiBfTEFSR0VGSUxFNjRfU09VUkNFIGRlZmluZWQsIGFuZC9vcgorICogY2hhbmdlIHRoZSByZWd1bGFyIGZ1bmN0aW9ucyB0byA2NCBiaXRzIGlmIF9GSUxFX09GRlNFVF9CSVRTIGlzIDY0IChpZgorICogYm90aCBhcmUgdHJ1ZSwgdGhlIGFwcGxpY2F0aW9uIGdldHMgdGhlICo2NCBmdW5jdGlvbnMsIGFuZCB0aGUgcmVndWxhcgorICogZnVuY3Rpb25zIGFyZSBjaGFuZ2VkIHRvIDY0IGJpdHMpIC0tIGluIGNhc2UgdGhlc2UgYXJlIHNldCBvbiBzeXN0ZW1zCisgKiB3aXRob3V0IGxhcmdlIGZpbGUgc3VwcG9ydCwgX0xGUzY0X0xBUkdFRklMRSBtdXN0IGFsc28gYmUgdHJ1ZQorICovCisjaWZkZWYgWl9MQVJHRTY0CisgICBaRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6b3BlbjY0IE9GKChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOworICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnenNlZWs2NCBPRigoZ3pGaWxlLCB6X29mZjY0X3QsIGludCkpOworICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnenRlbGw2NCBPRigoZ3pGaWxlKSk7CisgICBaRVhURVJOIHpfb2ZmNjRfdCBaRVhQT1JUIGd6b2Zmc2V0NjQgT0YoKGd6RmlsZSkpOworICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZTY0IE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmNjRfdCkpOworICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmU2NCBPRigodUxvbmcsIHVMb25nLCB6X29mZjY0X3QpKTsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoWkxJQl9JTlRFUk5BTCkgJiYgZGVmaW5lZChaX1dBTlQ2NCkKKyMgIGlmZGVmIFpfUFJFRklYX1NFVAorIyAgICBkZWZpbmUgel9nem9wZW4gel9nem9wZW42NAorIyAgICBkZWZpbmUgel9nenNlZWsgel9nenNlZWs2NAorIyAgICBkZWZpbmUgel9nenRlbGwgel9nenRlbGw2NAorIyAgICBkZWZpbmUgel9nem9mZnNldCB6X2d6b2Zmc2V0NjQKKyMgICAgZGVmaW5lIHpfYWRsZXIzMl9jb21iaW5lIHpfYWRsZXIzMl9jb21iaW5lNjQKKyMgICAgZGVmaW5lIHpfY3JjMzJfY29tYmluZSB6X2NyYzMyX2NvbWJpbmU2NAorIyAgZWxzZQorIyAgICBkZWZpbmUgZ3pvcGVuIGd6b3BlbjY0CisjICAgIGRlZmluZSBnenNlZWsgZ3pzZWVrNjQKKyMgICAgZGVmaW5lIGd6dGVsbCBnenRlbGw2NAorIyAgICBkZWZpbmUgZ3pvZmZzZXQgZ3pvZmZzZXQ2NAorIyAgICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lIGFkbGVyMzJfY29tYmluZTY0CisjICAgIGRlZmluZSBjcmMzMl9jb21iaW5lIGNyYzMyX2NvbWJpbmU2NAorIyAgZW5kaWYKKyMgIGlmbmRlZiBaX0xBUkdFNjQKKyAgICAgWkVYVEVSTiBnekZpbGUgWkVYUE9SVCBnem9wZW42NCBPRigoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKKyAgICAgWkVYVEVSTiBvZmY2NF90IFpFWFBPUlQgZ3pzZWVrNjQgT0YoKGd6RmlsZSwgb2ZmNjRfdCwgaW50KSk7CisgICAgIFpFWFRFUk4gb2ZmNjRfdCBaRVhQT1JUIGd6dGVsbDY0IE9GKChnekZpbGUpKTsKKyAgICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnem9mZnNldDY0IE9GKChnekZpbGUpKTsKKyAgICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZTY0IE9GKCh1TG9uZywgdUxvbmcsIG9mZjY0X3QpKTsKKyAgICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmU2NCBPRigodUxvbmcsIHVMb25nLCBvZmY2NF90KSk7CisjICBlbmRpZgorI2Vsc2UKKyAgIFpFWFRFUk4gZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuIE9GKChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOworICAgWkVYVEVSTiB6X29mZl90IFpFWFBPUlQgZ3pzZWVrIE9GKChnekZpbGUsIHpfb2ZmX3QsIGludCkpOworICAgWkVYVEVSTiB6X29mZl90IFpFWFBPUlQgZ3p0ZWxsIE9GKChnekZpbGUpKTsKKyAgIFpFWFRFUk4gel9vZmZfdCBaRVhQT1JUIGd6b2Zmc2V0IE9GKChnekZpbGUpKTsKKyAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBhZGxlcjMyX2NvbWJpbmUgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkpOworICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmUgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkpOworI2VuZGlmCisKKyNlbHNlIC8qIFpfU09MTyAqLworCisgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgYWRsZXIzMl9jb21iaW5lIE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKKyAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lIE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKKworI2VuZGlmIC8qICFaX1NPTE8gKi8KKworLyogaGFjayBmb3IgYnVnZ3kgY29tcGlsZXJzICovCisjaWYgIWRlZmluZWQoWlVUSUxfSCkgJiYgIWRlZmluZWQoTk9fRFVNTVlfREVDTCkKKyAgICBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUge2ludCBkdW1teTt9OworI2VuZGlmCisKKy8qIHVuZG9jdW1lbnRlZCBmdW5jdGlvbnMgKi8KK1pFWFRFUk4gY29uc3QgY2hhciAgICogWkVYUE9SVCB6RXJyb3IgICAgICAgICAgIE9GKChpbnQpKTsKK1pFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVCBpbmZsYXRlU3luY1BvaW50IE9GKCh6X3N0cmVhbXApKTsKK1pFWFRFUk4gY29uc3Qgel9jcmNfdCBGQVIgKiBaRVhQT1JUIGdldF9jcmNfdGFibGUgICAgT0YoKHZvaWQpKTsKK1pFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVCBpbmZsYXRlVW5kZXJtaW5lIE9GKCh6X3N0cmVhbXAsIGludCkpOworWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGluZmxhdGVSZXNldEtlZXAgT0YoKHpfc3RyZWFtcCkpOworWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGRlZmxhdGVSZXNldEtlZXAgT0YoKHpfc3RyZWFtcCkpOworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChaX1NPTE8pCitaRVhURVJOIGd6RmlsZSAgICAgICAgIFpFWFBPUlQgZ3pvcGVuX3cgT0YoKGNvbnN0IHdjaGFyX3QgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1vZGUpKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICBpZm5kZWYgWl9TT0xPCitaRVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlRWQSBnenZwcmludGYgWl9BUkcoKGd6RmlsZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgdmEpKTsKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIFpMSUJfSCAqLwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZmRybS9jcnlwdG8vZnhfY3J5cHQuY3BwIGIvY29yZS9zcmMvZmRybS9jcnlwdG8vZnhfY3J5cHQuY3BwCmluZGV4IDBmMWJmNWYuLjgxMjhmOTEgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Zkcm0vY3J5cHRvL2Z4X2NyeXB0LmNwcAorKysgYi9jb3JlL3NyYy9mZHJtL2NyeXB0by9meF9jcnlwdC5jcHAKQEAgLTEsMjU5ICsxLDI1OSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfYmFzaWMuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mZHJtL2Z4X2NyeXB0LmgiDQotI2lmZGVmIF9fY3BsdXNwbHVzDQotZXh0ZXJuICJDIiB7DQotI2VuZGlmDQotc3RydWN0IHJjNF9zdGF0ZSB7DQotICAgIGludCB4LCB5LCBtWzI1Nl07DQotfTsNCi12b2lkIENSWVBUX0FyY0ZvdXJTZXR1cCh2b2lkKiBjb250ZXh0LCAgRlhfTFBDQllURSBrZXksICBGWF9EV09SRCBsZW5ndGggKQ0KLXsNCi0gICAgcmM0X3N0YXRlICpzID0gKHJjNF9zdGF0ZSopY29udGV4dDsNCi0gICAgaW50IGksIGosIGssICptLCBhOw0KLSAgICBzLT54ID0gMDsNCi0gICAgcy0+eSA9IDA7DQotICAgIG0gPSBzLT5tOw0KLSAgICBmb3IoIGkgPSAwOyBpIDwgMjU2OyBpKysgKSB7DQotICAgICAgICBtW2ldID0gaTsNCi0gICAgfQ0KLSAgICBqID0gayA9IDA7DQotICAgIGZvciggaSA9IDA7IGkgPCAyNTY7IGkrKyApIHsNCi0gICAgICAgIGEgPSBtW2ldOw0KLSAgICAgICAgaiA9ICggaiArIGEgKyBrZXlba10gKSAmIDB4RkY7DQotICAgICAgICBtW2ldID0gbVtqXTsNCi0gICAgICAgIG1bal0gPSBhOw0KLSAgICAgICAgaWYoICsrayA+PSAoaW50KWxlbmd0aCApIHsNCi0gICAgICAgICAgICBrID0gMDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi12b2lkIENSWVBUX0FyY0ZvdXJDcnlwdCh2b2lkKiBjb250ZXh0LCB1bnNpZ25lZCBjaGFyICpkYXRhLCBGWF9EV09SRCBsZW5ndGggKQ0KLXsNCi0gICAgc3RydWN0IHJjNF9zdGF0ZSogcyA9IChzdHJ1Y3QgcmM0X3N0YXRlKiljb250ZXh0Ow0KLSAgICBpbnQgaSwgeCwgeSwgKm0sIGEsIGI7DQotICAgIHggPSBzLT54Ow0KLSAgICB5ID0gcy0+eTsNCi0gICAgbSA9IHMtPm07DQotICAgIGZvciggaSA9IDA7IGkgPCAoaW50KWxlbmd0aDsgaSsrICkgew0KLSAgICAgICAgeCA9ICggeCArIDEgKSAmIDB4RkY7DQotICAgICAgICBhID0gbVt4XTsNCi0gICAgICAgIHkgPSAoIHkgKyBhICkgJiAweEZGOw0KLSAgICAgICAgbVt4XSA9IGIgPSBtW3ldOw0KLSAgICAgICAgbVt5XSA9IGE7DQotICAgICAgICBkYXRhW2ldIF49IG1bKCBhICsgYiApICYgMHhGRl07DQotICAgIH0NCi0gICAgcy0+eCA9IHg7DQotICAgIHMtPnkgPSB5Ow0KLX0NCi12b2lkIENSWVBUX0FyY0ZvdXJDcnlwdEJsb2NrKEZYX0xQQllURSBwRGF0YSwgRlhfRFdPUkQgc2l6ZSwgRlhfTFBDQllURSBrZXksIEZYX0RXT1JEIGtleWxlbikNCi17DQotICAgIHJjNF9zdGF0ZSBzOw0KLSAgICBDUllQVF9BcmNGb3VyU2V0dXAoJnMsIGtleSwga2V5bGVuKTsNCi0gICAgQ1JZUFRfQXJjRm91ckNyeXB0KCZzLCBwRGF0YSwgc2l6ZSk7DQotfQ0KLXN0cnVjdCBtZDVfY29udGV4dCB7DQotICAgIEZYX0RXT1JEIHRvdGFsWzJdOw0KLSAgICBGWF9EV09SRCBzdGF0ZVs0XTsNCi0gICAgRlhfQllURSBidWZmZXJbNjRdOw0KLX07DQotI2RlZmluZSBHRVRfRlhfRFdPUkQobixiLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgKG4pID0gKEZYX0RXT1JEKSAoKEZYX0JZVEUgKikgYilbKGkpXSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICAgICAgIHwgKCgoRlhfRFdPUkQpICgoRlhfQllURSAqKSBiKVsoaSkrMV0pIDw8ICA4KSAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgICAgICAgfCAoKChGWF9EV09SRCkgKChGWF9CWVRFICopIGIpWyhpKSsyXSkgPDwgMTYpICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgICB8ICgoKEZYX0RXT1JEKSAoKEZYX0JZVEUgKikgYilbKGkpKzNdKSA8PCAyNCk7ICAgICAgICAgICAgICAgIFwNCi0gICAgfQ0KLSNkZWZpbmUgUFVUX0ZYX0RXT1JEKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgICgoKEZYX0JZVEUgKikgYilbKGkpXSAgKSA9IChGWF9CWVRFKSAoKChuKSAgICAgICkgJiAweEZGKTsgICAgICBcDQotICAgICAgICAoKChGWF9CWVRFICopIGIpWyhpKSsxXSkgPSAoRlhfQllURSkgKCgobikgPj4gIDgpICYgMHhGRik7ICAgICAgXA0KLSAgICAgICAgKCgoRlhfQllURSAqKSBiKVsoaSkrMl0pID0gKEZYX0JZVEUpICgoKG4pID4+IDE2KSAmIDB4RkYpOyAgICAgIFwNCi0gICAgICAgICgoKEZYX0JZVEUgKikgYilbKGkpKzNdKSA9IChGWF9CWVRFKSAoKChuKSA+PiAyNCkgJiAweEZGKTsgICAgICBcDQotICAgIH0NCi12b2lkIG1kNV9wcm9jZXNzKCBzdHJ1Y3QgbWQ1X2NvbnRleHQgKmN0eCwgY29uc3QgRlhfQllURSBkYXRhWzY0XSApDQotew0KLSAgICBGWF9EV09SRCBBLCBCLCBDLCBELCBYWzE2XTsNCi0gICAgR0VUX0ZYX0RXT1JEKCBYWzBdLCAgZGF0YSwgIDAgKTsNCi0gICAgR0VUX0ZYX0RXT1JEKCBYWzFdLCAgZGF0YSwgIDQgKTsNCi0gICAgR0VUX0ZYX0RXT1JEKCBYWzJdLCAgZGF0YSwgIDggKTsNCi0gICAgR0VUX0ZYX0RXT1JEKCBYWzNdLCAgZGF0YSwgMTIgKTsNCi0gICAgR0VUX0ZYX0RXT1JEKCBYWzRdLCAgZGF0YSwgMTYgKTsNCi0gICAgR0VUX0ZYX0RXT1JEKCBYWzVdLCAgZGF0YSwgMjAgKTsNCi0gICAgR0VUX0ZYX0RXT1JEKCBYWzZdLCAgZGF0YSwgMjQgKTsNCi0gICAgR0VUX0ZYX0RXT1JEKCBYWzddLCAgZGF0YSwgMjggKTsNCi0gICAgR0VUX0ZYX0RXT1JEKCBYWzhdLCAgZGF0YSwgMzIgKTsNCi0gICAgR0VUX0ZYX0RXT1JEKCBYWzldLCAgZGF0YSwgMzYgKTsNCi0gICAgR0VUX0ZYX0RXT1JEKCBYWzEwXSwgZGF0YSwgNDAgKTsNCi0gICAgR0VUX0ZYX0RXT1JEKCBYWzExXSwgZGF0YSwgNDQgKTsNCi0gICAgR0VUX0ZYX0RXT1JEKCBYWzEyXSwgZGF0YSwgNDggKTsNCi0gICAgR0VUX0ZYX0RXT1JEKCBYWzEzXSwgZGF0YSwgNTIgKTsNCi0gICAgR0VUX0ZYX0RXT1JEKCBYWzE0XSwgZGF0YSwgNTYgKTsNCi0gICAgR0VUX0ZYX0RXT1JEKCBYWzE1XSwgZGF0YSwgNjAgKTsNCi0jZGVmaW5lIFMoeCxuKSAoKHggPDwgbikgfCAoKHggJiAweEZGRkZGRkZGKSA+PiAoMzIgLSBuKSkpDQotI2RlZmluZSBQKGEsYixjLGQsayxzLHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgYSArPSBGKGIsYyxkKSArIFhba10gKyB0OyBhID0gUyhhLHMpICsgYjsgICAgICAgICAgIFwNCi0gICAgfQ0KLSAgICBBID0gY3R4LT5zdGF0ZVswXTsNCi0gICAgQiA9IGN0eC0+c3RhdGVbMV07DQotICAgIEMgPSBjdHgtPnN0YXRlWzJdOw0KLSAgICBEID0gY3R4LT5zdGF0ZVszXTsNCi0jZGVmaW5lIEYoeCx5LHopICh6IF4gKHggJiAoeSBeIHopKSkNCi0gICAgUCggQSwgQiwgQywgRCwgIDAsICA3LCAweEQ3NkFBNDc4ICk7DQotICAgIFAoIEQsIEEsIEIsIEMsICAxLCAxMiwgMHhFOEM3Qjc1NiApOw0KLSAgICBQKCBDLCBELCBBLCBCLCAgMiwgMTcsIDB4MjQyMDcwREIgKTsNCi0gICAgUCggQiwgQywgRCwgQSwgIDMsIDIyLCAweEMxQkRDRUVFICk7DQotICAgIFAoIEEsIEIsIEMsIEQsICA0LCAgNywgMHhGNTdDMEZBRiApOw0KLSAgICBQKCBELCBBLCBCLCBDLCAgNSwgMTIsIDB4NDc4N0M2MkEgKTsNCi0gICAgUCggQywgRCwgQSwgQiwgIDYsIDE3LCAweEE4MzA0NjEzICk7DQotICAgIFAoIEIsIEMsIEQsIEEsICA3LCAyMiwgMHhGRDQ2OTUwMSApOw0KLSAgICBQKCBBLCBCLCBDLCBELCAgOCwgIDcsIDB4Njk4MDk4RDggKTsNCi0gICAgUCggRCwgQSwgQiwgQywgIDksIDEyLCAweDhCNDRGN0FGICk7DQotICAgIFAoIEMsIEQsIEEsIEIsIDEwLCAxNywgMHhGRkZGNUJCMSApOw0KLSAgICBQKCBCLCBDLCBELCBBLCAxMSwgMjIsIDB4ODk1Q0Q3QkUgKTsNCi0gICAgUCggQSwgQiwgQywgRCwgMTIsICA3LCAweDZCOTAxMTIyICk7DQotICAgIFAoIEQsIEEsIEIsIEMsIDEzLCAxMiwgMHhGRDk4NzE5MyApOw0KLSAgICBQKCBDLCBELCBBLCBCLCAxNCwgMTcsIDB4QTY3OTQzOEUgKTsNCi0gICAgUCggQiwgQywgRCwgQSwgMTUsIDIyLCAweDQ5QjQwODIxICk7DQotI3VuZGVmIEYNCi0jZGVmaW5lIEYoeCx5LHopICh5IF4gKHogJiAoeCBeIHkpKSkNCi0gICAgUCggQSwgQiwgQywgRCwgIDEsICA1LCAweEY2MUUyNTYyICk7DQotICAgIFAoIEQsIEEsIEIsIEMsICA2LCAgOSwgMHhDMDQwQjM0MCApOw0KLSAgICBQKCBDLCBELCBBLCBCLCAxMSwgMTQsIDB4MjY1RTVBNTEgKTsNCi0gICAgUCggQiwgQywgRCwgQSwgIDAsIDIwLCAweEU5QjZDN0FBICk7DQotICAgIFAoIEEsIEIsIEMsIEQsICA1LCAgNSwgMHhENjJGMTA1RCApOw0KLSAgICBQKCBELCBBLCBCLCBDLCAxMCwgIDksIDB4MDI0NDE0NTMgKTsNCi0gICAgUCggQywgRCwgQSwgQiwgMTUsIDE0LCAweEQ4QTFFNjgxICk7DQotICAgIFAoIEIsIEMsIEQsIEEsICA0LCAyMCwgMHhFN0QzRkJDOCApOw0KLSAgICBQKCBBLCBCLCBDLCBELCAgOSwgIDUsIDB4MjFFMUNERTYgKTsNCi0gICAgUCggRCwgQSwgQiwgQywgMTQsICA5LCAweEMzMzcwN0Q2ICk7DQotICAgIFAoIEMsIEQsIEEsIEIsICAzLCAxNCwgMHhGNEQ1MEQ4NyApOw0KLSAgICBQKCBCLCBDLCBELCBBLCAgOCwgMjAsIDB4NDU1QTE0RUQgKTsNCi0gICAgUCggQSwgQiwgQywgRCwgMTMsICA1LCAweEE5RTNFOTA1ICk7DQotICAgIFAoIEQsIEEsIEIsIEMsICAyLCAgOSwgMHhGQ0VGQTNGOCApOw0KLSAgICBQKCBDLCBELCBBLCBCLCAgNywgMTQsIDB4Njc2RjAyRDkgKTsNCi0gICAgUCggQiwgQywgRCwgQSwgMTIsIDIwLCAweDhEMkE0QzhBICk7DQotI3VuZGVmIEYNCi0jZGVmaW5lIEYoeCx5LHopICh4IF4geSBeIHopDQotICAgIFAoIEEsIEIsIEMsIEQsICA1LCAgNCwgMHhGRkZBMzk0MiApOw0KLSAgICBQKCBELCBBLCBCLCBDLCAgOCwgMTEsIDB4ODc3MUY2ODEgKTsNCi0gICAgUCggQywgRCwgQSwgQiwgMTEsIDE2LCAweDZEOUQ2MTIyICk7DQotICAgIFAoIEIsIEMsIEQsIEEsIDE0LCAyMywgMHhGREU1MzgwQyApOw0KLSAgICBQKCBBLCBCLCBDLCBELCAgMSwgIDQsIDB4QTRCRUVBNDQgKTsNCi0gICAgUCggRCwgQSwgQiwgQywgIDQsIDExLCAweDRCREVDRkE5ICk7DQotICAgIFAoIEMsIEQsIEEsIEIsICA3LCAxNiwgMHhGNkJCNEI2MCApOw0KLSAgICBQKCBCLCBDLCBELCBBLCAxMCwgMjMsIDB4QkVCRkJDNzAgKTsNCi0gICAgUCggQSwgQiwgQywgRCwgMTMsICA0LCAweDI4OUI3RUM2ICk7DQotICAgIFAoIEQsIEEsIEIsIEMsICAwLCAxMSwgMHhFQUExMjdGQSApOw0KLSAgICBQKCBDLCBELCBBLCBCLCAgMywgMTYsIDB4RDRFRjMwODUgKTsNCi0gICAgUCggQiwgQywgRCwgQSwgIDYsIDIzLCAweDA0ODgxRDA1ICk7DQotICAgIFAoIEEsIEIsIEMsIEQsICA5LCAgNCwgMHhEOUQ0RDAzOSApOw0KLSAgICBQKCBELCBBLCBCLCBDLCAxMiwgMTEsIDB4RTZEQjk5RTUgKTsNCi0gICAgUCggQywgRCwgQSwgQiwgMTUsIDE2LCAweDFGQTI3Q0Y4ICk7DQotICAgIFAoIEIsIEMsIEQsIEEsICAyLCAyMywgMHhDNEFDNTY2NSApOw0KLSN1bmRlZiBGDQotI2RlZmluZSBGKHgseSx6KSAoeSBeICh4IHwgfnopKQ0KLSAgICBQKCBBLCBCLCBDLCBELCAgMCwgIDYsIDB4RjQyOTIyNDQgKTsNCi0gICAgUCggRCwgQSwgQiwgQywgIDcsIDEwLCAweDQzMkFGRjk3ICk7DQotICAgIFAoIEMsIEQsIEEsIEIsIDE0LCAxNSwgMHhBQjk0MjNBNyApOw0KLSAgICBQKCBCLCBDLCBELCBBLCAgNSwgMjEsIDB4RkM5M0EwMzkgKTsNCi0gICAgUCggQSwgQiwgQywgRCwgMTIsICA2LCAweDY1NUI1OUMzICk7DQotICAgIFAoIEQsIEEsIEIsIEMsICAzLCAxMCwgMHg4RjBDQ0M5MiApOw0KLSAgICBQKCBDLCBELCBBLCBCLCAxMCwgMTUsIDB4RkZFRkY0N0QgKTsNCi0gICAgUCggQiwgQywgRCwgQSwgIDEsIDIxLCAweDg1ODQ1REQxICk7DQotICAgIFAoIEEsIEIsIEMsIEQsICA4LCAgNiwgMHg2RkE4N0U0RiApOw0KLSAgICBQKCBELCBBLCBCLCBDLCAxNSwgMTAsIDB4RkUyQ0U2RTAgKTsNCi0gICAgUCggQywgRCwgQSwgQiwgIDYsIDE1LCAweEEzMDE0MzE0ICk7DQotICAgIFAoIEIsIEMsIEQsIEEsIDEzLCAyMSwgMHg0RTA4MTFBMSApOw0KLSAgICBQKCBBLCBCLCBDLCBELCAgNCwgIDYsIDB4Rjc1MzdFODIgKTsNCi0gICAgUCggRCwgQSwgQiwgQywgMTEsIDEwLCAweEJEM0FGMjM1ICk7DQotICAgIFAoIEMsIEQsIEEsIEIsICAyLCAxNSwgMHgyQUQ3RDJCQiApOw0KLSAgICBQKCBCLCBDLCBELCBBLCAgOSwgMjEsIDB4RUI4NkQzOTEgKTsNCi0jdW5kZWYgRg0KLSAgICBjdHgtPnN0YXRlWzBdICs9IEE7DQotICAgIGN0eC0+c3RhdGVbMV0gKz0gQjsNCi0gICAgY3R4LT5zdGF0ZVsyXSArPSBDOw0KLSAgICBjdHgtPnN0YXRlWzNdICs9IEQ7DQotfQ0KLXZvaWQgQ1JZUFRfTUQ1U3RhcnQodm9pZCogY29udGV4dCkNCi17DQotICAgIHN0cnVjdCBtZDVfY29udGV4dCAqY3R4ID0gKHN0cnVjdCBtZDVfY29udGV4dCopY29udGV4dDsNCi0gICAgY3R4LT50b3RhbFswXSA9IDA7DQotICAgIGN0eC0+dG90YWxbMV0gPSAwOw0KLSAgICBjdHgtPnN0YXRlWzBdID0gMHg2NzQ1MjMwMTsNCi0gICAgY3R4LT5zdGF0ZVsxXSA9IDB4RUZDREFCODk7DQotICAgIGN0eC0+c3RhdGVbMl0gPSAweDk4QkFEQ0ZFOw0KLSAgICBjdHgtPnN0YXRlWzNdID0gMHgxMDMyNTQ3NjsNCi19DQotdm9pZCBDUllQVF9NRDVVcGRhdGUoRlhfTFBWT0lEIHBjdHgsIEZYX0xQQ0JZVEUgaW5wdXQsIEZYX0RXT1JEIGxlbmd0aCApDQotew0KLSAgICBzdHJ1Y3QgbWQ1X2NvbnRleHQgKmN0eCA9IChzdHJ1Y3QgbWQ1X2NvbnRleHQgKilwY3R4Ow0KLSAgICBGWF9EV09SRCBsZWZ0LCBmaWxsOw0KLSAgICBpZiggISBsZW5ndGggKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbGVmdCA9ICggY3R4LT50b3RhbFswXSA+PiAzICkgJiAweDNGOw0KLSAgICBmaWxsID0gNjQgLSBsZWZ0Ow0KLSAgICBjdHgtPnRvdGFsWzBdICs9IGxlbmd0aCA8PCAgMzsNCi0gICAgY3R4LT50b3RhbFsxXSArPSBsZW5ndGggPj4gMjk7DQotICAgIGN0eC0+dG90YWxbMF0gJj0gMHhGRkZGRkZGRjsNCi0gICAgY3R4LT50b3RhbFsxXSArPSBjdHgtPnRvdGFsWzBdIDwgbGVuZ3RoIDw8IDM7DQotICAgIGlmKCBsZWZ0ICYmIGxlbmd0aCA+PSBmaWxsICkgew0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIoICh2b2lkICopIChjdHgtPmJ1ZmZlciArIGxlZnQpLCAodm9pZCAqKSBpbnB1dCwgZmlsbCApOw0KLSAgICAgICAgbWQ1X3Byb2Nlc3MoIGN0eCwgY3R4LT5idWZmZXIgKTsNCi0gICAgICAgIGxlbmd0aCAtPSBmaWxsOw0KLSAgICAgICAgaW5wdXQgICs9IGZpbGw7DQotICAgICAgICBsZWZ0ID0gMDsNCi0gICAgfQ0KLSAgICB3aGlsZSggbGVuZ3RoID49IDY0ICkgew0KLSAgICAgICAgbWQ1X3Byb2Nlc3MoIGN0eCwgaW5wdXQgKTsNCi0gICAgICAgIGxlbmd0aCAtPSA2NDsNCi0gICAgICAgIGlucHV0ICArPSA2NDsNCi0gICAgfQ0KLSAgICBpZiggbGVuZ3RoICkgew0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIoICh2b2lkICopIChjdHgtPmJ1ZmZlciArIGxlZnQpLCAodm9pZCAqKSBpbnB1dCwgbGVuZ3RoICk7DQotICAgIH0NCi19DQotY29uc3QgRlhfQllURSBtZDVfcGFkZGluZ1s2NF0gPSB7DQotICAgIDB4ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsDQotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsDQotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsDQotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDANCi19Ow0KLXZvaWQgQ1JZUFRfTUQ1RmluaXNoKEZYX0xQVk9JRCBwY3R4LCBGWF9CWVRFIGRpZ2VzdFsxNl0gKQ0KLXsNCi0gICAgc3RydWN0IG1kNV9jb250ZXh0ICpjdHggPSAoc3RydWN0IG1kNV9jb250ZXh0ICopcGN0eDsNCi0gICAgRlhfRFdPUkQgbGFzdCwgcGFkbjsNCi0gICAgRlhfQllURSBtc2dsZW5bOF07DQotICAgIFBVVF9GWF9EV09SRCggY3R4LT50b3RhbFswXSwgbXNnbGVuLCAwICk7DQotICAgIFBVVF9GWF9EV09SRCggY3R4LT50b3RhbFsxXSwgbXNnbGVuLCA0ICk7DQotICAgIGxhc3QgPSAoIGN0eC0+dG90YWxbMF0gPj4gMyApICYgMHgzRjsNCi0gICAgcGFkbiA9ICggbGFzdCA8IDU2ICkgPyAoIDU2IC0gbGFzdCApIDogKCAxMjAgLSBsYXN0ICk7DQotICAgIENSWVBUX01ENVVwZGF0ZSggY3R4LCBtZDVfcGFkZGluZywgcGFkbiApOw0KLSAgICBDUllQVF9NRDVVcGRhdGUoIGN0eCwgbXNnbGVuLCA4ICk7DQotICAgIFBVVF9GWF9EV09SRCggY3R4LT5zdGF0ZVswXSwgZGlnZXN0LCAgMCApOw0KLSAgICBQVVRfRlhfRFdPUkQoIGN0eC0+c3RhdGVbMV0sIGRpZ2VzdCwgIDQgKTsNCi0gICAgUFVUX0ZYX0RXT1JEKCBjdHgtPnN0YXRlWzJdLCBkaWdlc3QsICA4ICk7DQotICAgIFBVVF9GWF9EV09SRCggY3R4LT5zdGF0ZVszXSwgZGlnZXN0LCAxMiApOw0KLX0NCi12b2lkIENSWVBUX01ENUdlbmVyYXRlKEZYX0xQQ0JZVEUgaW5wdXQsIEZYX0RXT1JEIGxlbmd0aCwgRlhfQllURSBkaWdlc3RbMTZdKQ0KLXsNCi0gICAgbWQ1X2NvbnRleHQgY3R4Ow0KLSAgICBDUllQVF9NRDVTdGFydCgmY3R4KTsNCi0gICAgQ1JZUFRfTUQ1VXBkYXRlKCZjdHgsIGlucHV0LCBsZW5ndGgpOw0KLSAgICBDUllQVF9NRDVGaW5pc2goJmN0eCwgZGlnZXN0KTsNCi19DQotc3RhdGljIEZYX0JPT0wgKCpnX1B1YktleURlY3J5cHRvcikoRlhfTFBDQllURSBwRGF0YSwgRlhfRFdPUkQgc2l6ZSwgRlhfTFBCWVRFIGRhdGFfYnVmLCBGWF9EV09SRCYgZGF0YV9sZW4pID0gTlVMTDsNCi12b2lkIENSWVBUX1NldFB1YktleURlY3J5cHRvcihGWF9CT09MICgqZnVuYykoRlhfTFBDQllURSBwRGF0YSwgRlhfRFdPUkQgc2l6ZSwgRlhfTFBCWVRFIGRhdGFfYnVmLCBGWF9EV09SRCYgZGF0YV9sZW4pKQ0KLXsNCi0gICAgZ19QdWJLZXlEZWNyeXB0b3IgPSBmdW5jOw0KLX0NCi0jaWZkZWYgX19jcGx1c3BsdXMNCi19Ow0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2Jhc2ljLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mZHJtL2Z4X2NyeXB0LmgiCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCitzdHJ1Y3QgcmM0X3N0YXRlIHsKKyAgICBpbnQgeCwgeSwgbVsyNTZdOworfTsKK3ZvaWQgQ1JZUFRfQXJjRm91clNldHVwKHZvaWQqIGNvbnRleHQsICBGWF9MUENCWVRFIGtleSwgIEZYX0RXT1JEIGxlbmd0aCApCit7CisgICAgcmM0X3N0YXRlICpzID0gKHJjNF9zdGF0ZSopY29udGV4dDsKKyAgICBpbnQgaSwgaiwgaywgKm0sIGE7CisgICAgcy0+eCA9IDA7CisgICAgcy0+eSA9IDA7CisgICAgbSA9IHMtPm07CisgICAgZm9yKCBpID0gMDsgaSA8IDI1NjsgaSsrICkgeworICAgICAgICBtW2ldID0gaTsKKyAgICB9CisgICAgaiA9IGsgPSAwOworICAgIGZvciggaSA9IDA7IGkgPCAyNTY7IGkrKyApIHsKKyAgICAgICAgYSA9IG1baV07CisgICAgICAgIGogPSAoIGogKyBhICsga2V5W2tdICkgJiAweEZGOworICAgICAgICBtW2ldID0gbVtqXTsKKyAgICAgICAgbVtqXSA9IGE7CisgICAgICAgIGlmKCArK2sgPj0gKGludClsZW5ndGggKSB7CisgICAgICAgICAgICBrID0gMDsKKyAgICAgICAgfQorICAgIH0KK30KK3ZvaWQgQ1JZUFRfQXJjRm91ckNyeXB0KHZvaWQqIGNvbnRleHQsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIEZYX0RXT1JEIGxlbmd0aCApCit7CisgICAgc3RydWN0IHJjNF9zdGF0ZSogcyA9IChzdHJ1Y3QgcmM0X3N0YXRlKiljb250ZXh0OworICAgIGludCBpLCB4LCB5LCAqbSwgYSwgYjsKKyAgICB4ID0gcy0+eDsKKyAgICB5ID0gcy0+eTsKKyAgICBtID0gcy0+bTsKKyAgICBmb3IoIGkgPSAwOyBpIDwgKGludClsZW5ndGg7IGkrKyApIHsKKyAgICAgICAgeCA9ICggeCArIDEgKSAmIDB4RkY7CisgICAgICAgIGEgPSBtW3hdOworICAgICAgICB5ID0gKCB5ICsgYSApICYgMHhGRjsKKyAgICAgICAgbVt4XSA9IGIgPSBtW3ldOworICAgICAgICBtW3ldID0gYTsKKyAgICAgICAgZGF0YVtpXSBePSBtWyggYSArIGIgKSAmIDB4RkZdOworICAgIH0KKyAgICBzLT54ID0geDsKKyAgICBzLT55ID0geTsKK30KK3ZvaWQgQ1JZUFRfQXJjRm91ckNyeXB0QmxvY2soRlhfTFBCWVRFIHBEYXRhLCBGWF9EV09SRCBzaXplLCBGWF9MUENCWVRFIGtleSwgRlhfRFdPUkQga2V5bGVuKQoreworICAgIHJjNF9zdGF0ZSBzOworICAgIENSWVBUX0FyY0ZvdXJTZXR1cCgmcywga2V5LCBrZXlsZW4pOworICAgIENSWVBUX0FyY0ZvdXJDcnlwdCgmcywgcERhdGEsIHNpemUpOworfQorc3RydWN0IG1kNV9jb250ZXh0IHsKKyAgICBGWF9EV09SRCB0b3RhbFsyXTsKKyAgICBGWF9EV09SRCBzdGF0ZVs0XTsKKyAgICBGWF9CWVRFIGJ1ZmZlcls2NF07Cit9OworI2RlZmluZSBHRVRfRlhfRFdPUkQobixiLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChuKSA9IChGWF9EV09SRCkgKChGWF9CWVRFICopIGIpWyhpKV0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIHwgKCgoRlhfRFdPUkQpICgoRlhfQllURSAqKSBiKVsoaSkrMV0pIDw8ICA4KSAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICB8ICgoKEZYX0RXT1JEKSAoKEZYX0JZVEUgKikgYilbKGkpKzJdKSA8PCAxNikgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgfCAoKChGWF9EV09SRCkgKChGWF9CWVRFICopIGIpWyhpKSszXSkgPDwgMjQpOyAgICAgICAgICAgICAgICBcCisgICAgfQorI2RlZmluZSBQVVRfRlhfRFdPUkQobixiLGkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgoKEZYX0JZVEUgKikgYilbKGkpXSAgKSA9IChGWF9CWVRFKSAoKChuKSAgICAgICkgJiAweEZGKTsgICAgICBcCisgICAgICAgICgoKEZYX0JZVEUgKikgYilbKGkpKzFdKSA9IChGWF9CWVRFKSAoKChuKSA+PiAgOCkgJiAweEZGKTsgICAgICBcCisgICAgICAgICgoKEZYX0JZVEUgKikgYilbKGkpKzJdKSA9IChGWF9CWVRFKSAoKChuKSA+PiAxNikgJiAweEZGKTsgICAgICBcCisgICAgICAgICgoKEZYX0JZVEUgKikgYilbKGkpKzNdKSA9IChGWF9CWVRFKSAoKChuKSA+PiAyNCkgJiAweEZGKTsgICAgICBcCisgICAgfQordm9pZCBtZDVfcHJvY2Vzcyggc3RydWN0IG1kNV9jb250ZXh0ICpjdHgsIGNvbnN0IEZYX0JZVEUgZGF0YVs2NF0gKQoreworICAgIEZYX0RXT1JEIEEsIEIsIEMsIEQsIFhbMTZdOworICAgIEdFVF9GWF9EV09SRCggWFswXSwgIGRhdGEsICAwICk7CisgICAgR0VUX0ZYX0RXT1JEKCBYWzFdLCAgZGF0YSwgIDQgKTsKKyAgICBHRVRfRlhfRFdPUkQoIFhbMl0sICBkYXRhLCAgOCApOworICAgIEdFVF9GWF9EV09SRCggWFszXSwgIGRhdGEsIDEyICk7CisgICAgR0VUX0ZYX0RXT1JEKCBYWzRdLCAgZGF0YSwgMTYgKTsKKyAgICBHRVRfRlhfRFdPUkQoIFhbNV0sICBkYXRhLCAyMCApOworICAgIEdFVF9GWF9EV09SRCggWFs2XSwgIGRhdGEsIDI0ICk7CisgICAgR0VUX0ZYX0RXT1JEKCBYWzddLCAgZGF0YSwgMjggKTsKKyAgICBHRVRfRlhfRFdPUkQoIFhbOF0sICBkYXRhLCAzMiApOworICAgIEdFVF9GWF9EV09SRCggWFs5XSwgIGRhdGEsIDM2ICk7CisgICAgR0VUX0ZYX0RXT1JEKCBYWzEwXSwgZGF0YSwgNDAgKTsKKyAgICBHRVRfRlhfRFdPUkQoIFhbMTFdLCBkYXRhLCA0NCApOworICAgIEdFVF9GWF9EV09SRCggWFsxMl0sIGRhdGEsIDQ4ICk7CisgICAgR0VUX0ZYX0RXT1JEKCBYWzEzXSwgZGF0YSwgNTIgKTsKKyAgICBHRVRfRlhfRFdPUkQoIFhbMTRdLCBkYXRhLCA1NiApOworICAgIEdFVF9GWF9EV09SRCggWFsxNV0sIGRhdGEsIDYwICk7CisjZGVmaW5lIFMoeCxuKSAoKHggPDwgbikgfCAoKHggJiAweEZGRkZGRkZGKSA+PiAoMzIgLSBuKSkpCisjZGVmaW5lIFAoYSxiLGMsZCxrLHMsdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYSArPSBGKGIsYyxkKSArIFhba10gKyB0OyBhID0gUyhhLHMpICsgYjsgICAgICAgICAgIFwKKyAgICB9CisgICAgQSA9IGN0eC0+c3RhdGVbMF07CisgICAgQiA9IGN0eC0+c3RhdGVbMV07CisgICAgQyA9IGN0eC0+c3RhdGVbMl07CisgICAgRCA9IGN0eC0+c3RhdGVbM107CisjZGVmaW5lIEYoeCx5LHopICh6IF4gKHggJiAoeSBeIHopKSkKKyAgICBQKCBBLCBCLCBDLCBELCAgMCwgIDcsIDB4RDc2QUE0NzggKTsKKyAgICBQKCBELCBBLCBCLCBDLCAgMSwgMTIsIDB4RThDN0I3NTYgKTsKKyAgICBQKCBDLCBELCBBLCBCLCAgMiwgMTcsIDB4MjQyMDcwREIgKTsKKyAgICBQKCBCLCBDLCBELCBBLCAgMywgMjIsIDB4QzFCRENFRUUgKTsKKyAgICBQKCBBLCBCLCBDLCBELCAgNCwgIDcsIDB4RjU3QzBGQUYgKTsKKyAgICBQKCBELCBBLCBCLCBDLCAgNSwgMTIsIDB4NDc4N0M2MkEgKTsKKyAgICBQKCBDLCBELCBBLCBCLCAgNiwgMTcsIDB4QTgzMDQ2MTMgKTsKKyAgICBQKCBCLCBDLCBELCBBLCAgNywgMjIsIDB4RkQ0Njk1MDEgKTsKKyAgICBQKCBBLCBCLCBDLCBELCAgOCwgIDcsIDB4Njk4MDk4RDggKTsKKyAgICBQKCBELCBBLCBCLCBDLCAgOSwgMTIsIDB4OEI0NEY3QUYgKTsKKyAgICBQKCBDLCBELCBBLCBCLCAxMCwgMTcsIDB4RkZGRjVCQjEgKTsKKyAgICBQKCBCLCBDLCBELCBBLCAxMSwgMjIsIDB4ODk1Q0Q3QkUgKTsKKyAgICBQKCBBLCBCLCBDLCBELCAxMiwgIDcsIDB4NkI5MDExMjIgKTsKKyAgICBQKCBELCBBLCBCLCBDLCAxMywgMTIsIDB4RkQ5ODcxOTMgKTsKKyAgICBQKCBDLCBELCBBLCBCLCAxNCwgMTcsIDB4QTY3OTQzOEUgKTsKKyAgICBQKCBCLCBDLCBELCBBLCAxNSwgMjIsIDB4NDlCNDA4MjEgKTsKKyN1bmRlZiBGCisjZGVmaW5lIEYoeCx5LHopICh5IF4gKHogJiAoeCBeIHkpKSkKKyAgICBQKCBBLCBCLCBDLCBELCAgMSwgIDUsIDB4RjYxRTI1NjIgKTsKKyAgICBQKCBELCBBLCBCLCBDLCAgNiwgIDksIDB4QzA0MEIzNDAgKTsKKyAgICBQKCBDLCBELCBBLCBCLCAxMSwgMTQsIDB4MjY1RTVBNTEgKTsKKyAgICBQKCBCLCBDLCBELCBBLCAgMCwgMjAsIDB4RTlCNkM3QUEgKTsKKyAgICBQKCBBLCBCLCBDLCBELCAgNSwgIDUsIDB4RDYyRjEwNUQgKTsKKyAgICBQKCBELCBBLCBCLCBDLCAxMCwgIDksIDB4MDI0NDE0NTMgKTsKKyAgICBQKCBDLCBELCBBLCBCLCAxNSwgMTQsIDB4RDhBMUU2ODEgKTsKKyAgICBQKCBCLCBDLCBELCBBLCAgNCwgMjAsIDB4RTdEM0ZCQzggKTsKKyAgICBQKCBBLCBCLCBDLCBELCAgOSwgIDUsIDB4MjFFMUNERTYgKTsKKyAgICBQKCBELCBBLCBCLCBDLCAxNCwgIDksIDB4QzMzNzA3RDYgKTsKKyAgICBQKCBDLCBELCBBLCBCLCAgMywgMTQsIDB4RjRENTBEODcgKTsKKyAgICBQKCBCLCBDLCBELCBBLCAgOCwgMjAsIDB4NDU1QTE0RUQgKTsKKyAgICBQKCBBLCBCLCBDLCBELCAxMywgIDUsIDB4QTlFM0U5MDUgKTsKKyAgICBQKCBELCBBLCBCLCBDLCAgMiwgIDksIDB4RkNFRkEzRjggKTsKKyAgICBQKCBDLCBELCBBLCBCLCAgNywgMTQsIDB4Njc2RjAyRDkgKTsKKyAgICBQKCBCLCBDLCBELCBBLCAxMiwgMjAsIDB4OEQyQTRDOEEgKTsKKyN1bmRlZiBGCisjZGVmaW5lIEYoeCx5LHopICh4IF4geSBeIHopCisgICAgUCggQSwgQiwgQywgRCwgIDUsICA0LCAweEZGRkEzOTQyICk7CisgICAgUCggRCwgQSwgQiwgQywgIDgsIDExLCAweDg3NzFGNjgxICk7CisgICAgUCggQywgRCwgQSwgQiwgMTEsIDE2LCAweDZEOUQ2MTIyICk7CisgICAgUCggQiwgQywgRCwgQSwgMTQsIDIzLCAweEZERTUzODBDICk7CisgICAgUCggQSwgQiwgQywgRCwgIDEsICA0LCAweEE0QkVFQTQ0ICk7CisgICAgUCggRCwgQSwgQiwgQywgIDQsIDExLCAweDRCREVDRkE5ICk7CisgICAgUCggQywgRCwgQSwgQiwgIDcsIDE2LCAweEY2QkI0QjYwICk7CisgICAgUCggQiwgQywgRCwgQSwgMTAsIDIzLCAweEJFQkZCQzcwICk7CisgICAgUCggQSwgQiwgQywgRCwgMTMsICA0LCAweDI4OUI3RUM2ICk7CisgICAgUCggRCwgQSwgQiwgQywgIDAsIDExLCAweEVBQTEyN0ZBICk7CisgICAgUCggQywgRCwgQSwgQiwgIDMsIDE2LCAweEQ0RUYzMDg1ICk7CisgICAgUCggQiwgQywgRCwgQSwgIDYsIDIzLCAweDA0ODgxRDA1ICk7CisgICAgUCggQSwgQiwgQywgRCwgIDksICA0LCAweEQ5RDREMDM5ICk7CisgICAgUCggRCwgQSwgQiwgQywgMTIsIDExLCAweEU2REI5OUU1ICk7CisgICAgUCggQywgRCwgQSwgQiwgMTUsIDE2LCAweDFGQTI3Q0Y4ICk7CisgICAgUCggQiwgQywgRCwgQSwgIDIsIDIzLCAweEM0QUM1NjY1ICk7CisjdW5kZWYgRgorI2RlZmluZSBGKHgseSx6KSAoeSBeICh4IHwgfnopKQorICAgIFAoIEEsIEIsIEMsIEQsICAwLCAgNiwgMHhGNDI5MjI0NCApOworICAgIFAoIEQsIEEsIEIsIEMsICA3LCAxMCwgMHg0MzJBRkY5NyApOworICAgIFAoIEMsIEQsIEEsIEIsIDE0LCAxNSwgMHhBQjk0MjNBNyApOworICAgIFAoIEIsIEMsIEQsIEEsICA1LCAyMSwgMHhGQzkzQTAzOSApOworICAgIFAoIEEsIEIsIEMsIEQsIDEyLCAgNiwgMHg2NTVCNTlDMyApOworICAgIFAoIEQsIEEsIEIsIEMsICAzLCAxMCwgMHg4RjBDQ0M5MiApOworICAgIFAoIEMsIEQsIEEsIEIsIDEwLCAxNSwgMHhGRkVGRjQ3RCApOworICAgIFAoIEIsIEMsIEQsIEEsICAxLCAyMSwgMHg4NTg0NUREMSApOworICAgIFAoIEEsIEIsIEMsIEQsICA4LCAgNiwgMHg2RkE4N0U0RiApOworICAgIFAoIEQsIEEsIEIsIEMsIDE1LCAxMCwgMHhGRTJDRTZFMCApOworICAgIFAoIEMsIEQsIEEsIEIsICA2LCAxNSwgMHhBMzAxNDMxNCApOworICAgIFAoIEIsIEMsIEQsIEEsIDEzLCAyMSwgMHg0RTA4MTFBMSApOworICAgIFAoIEEsIEIsIEMsIEQsICA0LCAgNiwgMHhGNzUzN0U4MiApOworICAgIFAoIEQsIEEsIEIsIEMsIDExLCAxMCwgMHhCRDNBRjIzNSApOworICAgIFAoIEMsIEQsIEEsIEIsICAyLCAxNSwgMHgyQUQ3RDJCQiApOworICAgIFAoIEIsIEMsIEQsIEEsICA5LCAyMSwgMHhFQjg2RDM5MSApOworI3VuZGVmIEYKKyAgICBjdHgtPnN0YXRlWzBdICs9IEE7CisgICAgY3R4LT5zdGF0ZVsxXSArPSBCOworICAgIGN0eC0+c3RhdGVbMl0gKz0gQzsKKyAgICBjdHgtPnN0YXRlWzNdICs9IEQ7Cit9Cit2b2lkIENSWVBUX01ENVN0YXJ0KHZvaWQqIGNvbnRleHQpCit7CisgICAgc3RydWN0IG1kNV9jb250ZXh0ICpjdHggPSAoc3RydWN0IG1kNV9jb250ZXh0Kiljb250ZXh0OworICAgIGN0eC0+dG90YWxbMF0gPSAwOworICAgIGN0eC0+dG90YWxbMV0gPSAwOworICAgIGN0eC0+c3RhdGVbMF0gPSAweDY3NDUyMzAxOworICAgIGN0eC0+c3RhdGVbMV0gPSAweEVGQ0RBQjg5OworICAgIGN0eC0+c3RhdGVbMl0gPSAweDk4QkFEQ0ZFOworICAgIGN0eC0+c3RhdGVbM10gPSAweDEwMzI1NDc2OworfQordm9pZCBDUllQVF9NRDVVcGRhdGUoRlhfTFBWT0lEIHBjdHgsIEZYX0xQQ0JZVEUgaW5wdXQsIEZYX0RXT1JEIGxlbmd0aCApCit7CisgICAgc3RydWN0IG1kNV9jb250ZXh0ICpjdHggPSAoc3RydWN0IG1kNV9jb250ZXh0ICopcGN0eDsKKyAgICBGWF9EV09SRCBsZWZ0LCBmaWxsOworICAgIGlmKCAhIGxlbmd0aCApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBsZWZ0ID0gKCBjdHgtPnRvdGFsWzBdID4+IDMgKSAmIDB4M0Y7CisgICAgZmlsbCA9IDY0IC0gbGVmdDsKKyAgICBjdHgtPnRvdGFsWzBdICs9IGxlbmd0aCA8PCAgMzsKKyAgICBjdHgtPnRvdGFsWzFdICs9IGxlbmd0aCA+PiAyOTsKKyAgICBjdHgtPnRvdGFsWzBdICY9IDB4RkZGRkZGRkY7CisgICAgY3R4LT50b3RhbFsxXSArPSBjdHgtPnRvdGFsWzBdIDwgbGVuZ3RoIDw8IDM7CisgICAgaWYoIGxlZnQgJiYgbGVuZ3RoID49IGZpbGwgKSB7CisgICAgICAgIEZYU1lTX21lbWNweTMyKCAodm9pZCAqKSAoY3R4LT5idWZmZXIgKyBsZWZ0KSwgKHZvaWQgKikgaW5wdXQsIGZpbGwgKTsKKyAgICAgICAgbWQ1X3Byb2Nlc3MoIGN0eCwgY3R4LT5idWZmZXIgKTsKKyAgICAgICAgbGVuZ3RoIC09IGZpbGw7CisgICAgICAgIGlucHV0ICArPSBmaWxsOworICAgICAgICBsZWZ0ID0gMDsKKyAgICB9CisgICAgd2hpbGUoIGxlbmd0aCA+PSA2NCApIHsKKyAgICAgICAgbWQ1X3Byb2Nlc3MoIGN0eCwgaW5wdXQgKTsKKyAgICAgICAgbGVuZ3RoIC09IDY0OworICAgICAgICBpbnB1dCAgKz0gNjQ7CisgICAgfQorICAgIGlmKCBsZW5ndGggKSB7CisgICAgICAgIEZYU1lTX21lbWNweTMyKCAodm9pZCAqKSAoY3R4LT5idWZmZXIgKyBsZWZ0KSwgKHZvaWQgKikgaW5wdXQsIGxlbmd0aCApOworICAgIH0KK30KK2NvbnN0IEZYX0JZVEUgbWQ1X3BhZGRpbmdbNjRdID0geworICAgIDB4ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKK307Cit2b2lkIENSWVBUX01ENUZpbmlzaChGWF9MUFZPSUQgcGN0eCwgRlhfQllURSBkaWdlc3RbMTZdICkKK3sKKyAgICBzdHJ1Y3QgbWQ1X2NvbnRleHQgKmN0eCA9IChzdHJ1Y3QgbWQ1X2NvbnRleHQgKilwY3R4OworICAgIEZYX0RXT1JEIGxhc3QsIHBhZG47CisgICAgRlhfQllURSBtc2dsZW5bOF07CisgICAgUFVUX0ZYX0RXT1JEKCBjdHgtPnRvdGFsWzBdLCBtc2dsZW4sIDAgKTsKKyAgICBQVVRfRlhfRFdPUkQoIGN0eC0+dG90YWxbMV0sIG1zZ2xlbiwgNCApOworICAgIGxhc3QgPSAoIGN0eC0+dG90YWxbMF0gPj4gMyApICYgMHgzRjsKKyAgICBwYWRuID0gKCBsYXN0IDwgNTYgKSA/ICggNTYgLSBsYXN0ICkgOiAoIDEyMCAtIGxhc3QgKTsKKyAgICBDUllQVF9NRDVVcGRhdGUoIGN0eCwgbWQ1X3BhZGRpbmcsIHBhZG4gKTsKKyAgICBDUllQVF9NRDVVcGRhdGUoIGN0eCwgbXNnbGVuLCA4ICk7CisgICAgUFVUX0ZYX0RXT1JEKCBjdHgtPnN0YXRlWzBdLCBkaWdlc3QsICAwICk7CisgICAgUFVUX0ZYX0RXT1JEKCBjdHgtPnN0YXRlWzFdLCBkaWdlc3QsICA0ICk7CisgICAgUFVUX0ZYX0RXT1JEKCBjdHgtPnN0YXRlWzJdLCBkaWdlc3QsICA4ICk7CisgICAgUFVUX0ZYX0RXT1JEKCBjdHgtPnN0YXRlWzNdLCBkaWdlc3QsIDEyICk7Cit9Cit2b2lkIENSWVBUX01ENUdlbmVyYXRlKEZYX0xQQ0JZVEUgaW5wdXQsIEZYX0RXT1JEIGxlbmd0aCwgRlhfQllURSBkaWdlc3RbMTZdKQoreworICAgIG1kNV9jb250ZXh0IGN0eDsKKyAgICBDUllQVF9NRDVTdGFydCgmY3R4KTsKKyAgICBDUllQVF9NRDVVcGRhdGUoJmN0eCwgaW5wdXQsIGxlbmd0aCk7CisgICAgQ1JZUFRfTUQ1RmluaXNoKCZjdHgsIGRpZ2VzdCk7Cit9CitzdGF0aWMgRlhfQk9PTCAoKmdfUHViS2V5RGVjcnlwdG9yKShGWF9MUENCWVRFIHBEYXRhLCBGWF9EV09SRCBzaXplLCBGWF9MUEJZVEUgZGF0YV9idWYsIEZYX0RXT1JEJiBkYXRhX2xlbikgPSBOVUxMOwordm9pZCBDUllQVF9TZXRQdWJLZXlEZWNyeXB0b3IoRlhfQk9PTCAoKmZ1bmMpKEZYX0xQQ0JZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUsIEZYX0xQQllURSBkYXRhX2J1ZiwgRlhfRFdPUkQmIGRhdGFfbGVuKSkKK3sKKyAgICBnX1B1YktleURlY3J5cHRvciA9IGZ1bmM7Cit9CisjaWZkZWYgX19jcGx1c3BsdXMKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Zkcm0vY3J5cHRvL2Z4X2NyeXB0X2Flcy5jcHAgYi9jb3JlL3NyYy9mZHJtL2NyeXB0by9meF9jcnlwdF9hZXMuY3BwCmluZGV4IGI4NjQ0ZDEuLjZlZmE5MzUgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Zkcm0vY3J5cHRvL2Z4X2NyeXB0X2Flcy5jcHAKKysrIGIvY29yZS9zcmMvZmRybS9jcnlwdG8vZnhfY3J5cHRfYWVzLmNwcApAQCAtMSwxMDEzICsxLDEwMTMgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2Jhc2ljLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZmRybS9meF9jcnlwdC5oIg0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLWV4dGVybiAiQyIgew0KLSNlbmRpZg0KLSNkZWZpbmUgTUFYX05SIDE0DQotI2RlZmluZSBNQVhfTksgOA0KLSNkZWZpbmUgTUFYX05CIDgNCi0jZGVmaW5lIG11bGJ5Mih4KSAoICgoeCYweDdGKSA8PCAxKSBeICh4ICYgMHg4MCA/IDB4MUIgOiAwKSApDQotI2RlZmluZSBHRVRfMzJCSVRfTVNCX0ZJUlNUKGNwKSBcDQotICAgICgoKHVuc2lnbmVkIGxvbmcpKHVuc2lnbmVkIGNoYXIpKGNwKVszXSkgfCBcDQotICAgICAoKHVuc2lnbmVkIGxvbmcpKHVuc2lnbmVkIGNoYXIpKGNwKVsyXSA8PCA4KSB8IFwNCi0gICAgICgodW5zaWduZWQgbG9uZykodW5zaWduZWQgY2hhcikoY3ApWzFdIDw8IDE2KSB8IFwNCi0gICAgICgodW5zaWduZWQgbG9uZykodW5zaWduZWQgY2hhcikoY3ApWzBdIDw8IDI0KSkNCi0jZGVmaW5lIFBVVF8zMkJJVF9NU0JfRklSU1QoY3AsIHZhbHVlKSBkbyB7IFwNCi0gICAgICAgIChjcClbM10gPSAodmFsdWUpOyBcDQotICAgICAgICAoY3ApWzJdID0gKHZhbHVlKSA+PiA4OyBcDQotICAgICAgICAoY3ApWzFdID0gKHZhbHVlKSA+PiAxNjsgXA0KLSAgICAgICAgKGNwKVswXSA9ICh2YWx1ZSkgPj4gMjQ7IH0gd2hpbGUgKDApDQotc3RydWN0IEFFU0NvbnRleHQgew0KLSAgICB1bnNpZ25lZCBpbnQga2V5c2NoZWRbKE1BWF9OUiArIDEpICogTUFYX05CXTsNCi0gICAgdW5zaWduZWQgaW50IGludmtleXNjaGVkWyhNQVhfTlIgKyAxKSAqIE1BWF9OQl07DQotICAgIHZvaWQgKCplbmNyeXB0KSAoQUVTQ29udGV4dCAqIGN0eCwgdW5zaWduZWQgaW50ICogYmxvY2spOw0KLSAgICB2b2lkICgqZGVjcnlwdCkgKEFFU0NvbnRleHQgKiBjdHgsIHVuc2lnbmVkIGludCAqIGJsb2NrKTsNCi0gICAgdW5zaWduZWQgaW50IGl2W01BWF9OQl07DQotICAgIGludCBOYiwgTnI7DQotfTsNCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBTYm94WzI1Nl0gPSB7DQotICAgIDB4NjMsIDB4N2MsIDB4NzcsIDB4N2IsIDB4ZjIsIDB4NmIsIDB4NmYsIDB4YzUsDQotICAgIDB4MzAsIDB4MDEsIDB4NjcsIDB4MmIsIDB4ZmUsIDB4ZDcsIDB4YWIsIDB4NzYsDQotICAgIDB4Y2EsIDB4ODIsIDB4YzksIDB4N2QsIDB4ZmEsIDB4NTksIDB4NDcsIDB4ZjAsDQotICAgIDB4YWQsIDB4ZDQsIDB4YTIsIDB4YWYsIDB4OWMsIDB4YTQsIDB4NzIsIDB4YzAsDQotICAgIDB4YjcsIDB4ZmQsIDB4OTMsIDB4MjYsIDB4MzYsIDB4M2YsIDB4ZjcsIDB4Y2MsDQotICAgIDB4MzQsIDB4YTUsIDB4ZTUsIDB4ZjEsIDB4NzEsIDB4ZDgsIDB4MzEsIDB4MTUsDQotICAgIDB4MDQsIDB4YzcsIDB4MjMsIDB4YzMsIDB4MTgsIDB4OTYsIDB4MDUsIDB4OWEsDQotICAgIDB4MDcsIDB4MTIsIDB4ODAsIDB4ZTIsIDB4ZWIsIDB4MjcsIDB4YjIsIDB4NzUsDQotICAgIDB4MDksIDB4ODMsIDB4MmMsIDB4MWEsIDB4MWIsIDB4NmUsIDB4NWEsIDB4YTAsDQotICAgIDB4NTIsIDB4M2IsIDB4ZDYsIDB4YjMsIDB4MjksIDB4ZTMsIDB4MmYsIDB4ODQsDQotICAgIDB4NTMsIDB4ZDEsIDB4MDAsIDB4ZWQsIDB4MjAsIDB4ZmMsIDB4YjEsIDB4NWIsDQotICAgIDB4NmEsIDB4Y2IsIDB4YmUsIDB4MzksIDB4NGEsIDB4NGMsIDB4NTgsIDB4Y2YsDQotICAgIDB4ZDAsIDB4ZWYsIDB4YWEsIDB4ZmIsIDB4NDMsIDB4NGQsIDB4MzMsIDB4ODUsDQotICAgIDB4NDUsIDB4ZjksIDB4MDIsIDB4N2YsIDB4NTAsIDB4M2MsIDB4OWYsIDB4YTgsDQotICAgIDB4NTEsIDB4YTMsIDB4NDAsIDB4OGYsIDB4OTIsIDB4OWQsIDB4MzgsIDB4ZjUsDQotICAgIDB4YmMsIDB4YjYsIDB4ZGEsIDB4MjEsIDB4MTAsIDB4ZmYsIDB4ZjMsIDB4ZDIsDQotICAgIDB4Y2QsIDB4MGMsIDB4MTMsIDB4ZWMsIDB4NWYsIDB4OTcsIDB4NDQsIDB4MTcsDQotICAgIDB4YzQsIDB4YTcsIDB4N2UsIDB4M2QsIDB4NjQsIDB4NWQsIDB4MTksIDB4NzMsDQotICAgIDB4NjAsIDB4ODEsIDB4NGYsIDB4ZGMsIDB4MjIsIDB4MmEsIDB4OTAsIDB4ODgsDQotICAgIDB4NDYsIDB4ZWUsIDB4YjgsIDB4MTQsIDB4ZGUsIDB4NWUsIDB4MGIsIDB4ZGIsDQotICAgIDB4ZTAsIDB4MzIsIDB4M2EsIDB4MGEsIDB4NDksIDB4MDYsIDB4MjQsIDB4NWMsDQotICAgIDB4YzIsIDB4ZDMsIDB4YWMsIDB4NjIsIDB4OTEsIDB4OTUsIDB4ZTQsIDB4NzksDQotICAgIDB4ZTcsIDB4YzgsIDB4MzcsIDB4NmQsIDB4OGQsIDB4ZDUsIDB4NGUsIDB4YTksDQotICAgIDB4NmMsIDB4NTYsIDB4ZjQsIDB4ZWEsIDB4NjUsIDB4N2EsIDB4YWUsIDB4MDgsDQotICAgIDB4YmEsIDB4NzgsIDB4MjUsIDB4MmUsIDB4MWMsIDB4YTYsIDB4YjQsIDB4YzYsDQotICAgIDB4ZTgsIDB4ZGQsIDB4NzQsIDB4MWYsIDB4NGIsIDB4YmQsIDB4OGIsIDB4OGEsDQotICAgIDB4NzAsIDB4M2UsIDB4YjUsIDB4NjYsIDB4NDgsIDB4MDMsIDB4ZjYsIDB4MGUsDQotICAgIDB4NjEsIDB4MzUsIDB4NTcsIDB4YjksIDB4ODYsIDB4YzEsIDB4MWQsIDB4OWUsDQotICAgIDB4ZTEsIDB4ZjgsIDB4OTgsIDB4MTEsIDB4NjksIDB4ZDksIDB4OGUsIDB4OTQsDQotICAgIDB4OWIsIDB4MWUsIDB4ODcsIDB4ZTksIDB4Y2UsIDB4NTUsIDB4MjgsIDB4ZGYsDQotICAgIDB4OGMsIDB4YTEsIDB4ODksIDB4MGQsIDB4YmYsIDB4ZTYsIDB4NDIsIDB4NjgsDQotICAgIDB4NDEsIDB4OTksIDB4MmQsIDB4MGYsIDB4YjAsIDB4NTQsIDB4YmIsIDB4MTYNCi19Ow0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFNib3hpbnZbMjU2XSA9IHsNCi0gICAgMHg1MiwgMHgwOSwgMHg2YSwgMHhkNSwgMHgzMCwgMHgzNiwgMHhhNSwgMHgzOCwNCi0gICAgMHhiZiwgMHg0MCwgMHhhMywgMHg5ZSwgMHg4MSwgMHhmMywgMHhkNywgMHhmYiwNCi0gICAgMHg3YywgMHhlMywgMHgzOSwgMHg4MiwgMHg5YiwgMHgyZiwgMHhmZiwgMHg4NywNCi0gICAgMHgzNCwgMHg4ZSwgMHg0MywgMHg0NCwgMHhjNCwgMHhkZSwgMHhlOSwgMHhjYiwNCi0gICAgMHg1NCwgMHg3YiwgMHg5NCwgMHgzMiwgMHhhNiwgMHhjMiwgMHgyMywgMHgzZCwNCi0gICAgMHhlZSwgMHg0YywgMHg5NSwgMHgwYiwgMHg0MiwgMHhmYSwgMHhjMywgMHg0ZSwNCi0gICAgMHgwOCwgMHgyZSwgMHhhMSwgMHg2NiwgMHgyOCwgMHhkOSwgMHgyNCwgMHhiMiwNCi0gICAgMHg3NiwgMHg1YiwgMHhhMiwgMHg0OSwgMHg2ZCwgMHg4YiwgMHhkMSwgMHgyNSwNCi0gICAgMHg3MiwgMHhmOCwgMHhmNiwgMHg2NCwgMHg4NiwgMHg2OCwgMHg5OCwgMHgxNiwNCi0gICAgMHhkNCwgMHhhNCwgMHg1YywgMHhjYywgMHg1ZCwgMHg2NSwgMHhiNiwgMHg5MiwNCi0gICAgMHg2YywgMHg3MCwgMHg0OCwgMHg1MCwgMHhmZCwgMHhlZCwgMHhiOSwgMHhkYSwNCi0gICAgMHg1ZSwgMHgxNSwgMHg0NiwgMHg1NywgMHhhNywgMHg4ZCwgMHg5ZCwgMHg4NCwNCi0gICAgMHg5MCwgMHhkOCwgMHhhYiwgMHgwMCwgMHg4YywgMHhiYywgMHhkMywgMHgwYSwNCi0gICAgMHhmNywgMHhlNCwgMHg1OCwgMHgwNSwgMHhiOCwgMHhiMywgMHg0NSwgMHgwNiwNCi0gICAgMHhkMCwgMHgyYywgMHgxZSwgMHg4ZiwgMHhjYSwgMHgzZiwgMHgwZiwgMHgwMiwNCi0gICAgMHhjMSwgMHhhZiwgMHhiZCwgMHgwMywgMHgwMSwgMHgxMywgMHg4YSwgMHg2YiwNCi0gICAgMHgzYSwgMHg5MSwgMHgxMSwgMHg0MSwgMHg0ZiwgMHg2NywgMHhkYywgMHhlYSwNCi0gICAgMHg5NywgMHhmMiwgMHhjZiwgMHhjZSwgMHhmMCwgMHhiNCwgMHhlNiwgMHg3MywNCi0gICAgMHg5NiwgMHhhYywgMHg3NCwgMHgyMiwgMHhlNywgMHhhZCwgMHgzNSwgMHg4NSwNCi0gICAgMHhlMiwgMHhmOSwgMHgzNywgMHhlOCwgMHgxYywgMHg3NSwgMHhkZiwgMHg2ZSwNCi0gICAgMHg0NywgMHhmMSwgMHgxYSwgMHg3MSwgMHgxZCwgMHgyOSwgMHhjNSwgMHg4OSwNCi0gICAgMHg2ZiwgMHhiNywgMHg2MiwgMHgwZSwgMHhhYSwgMHgxOCwgMHhiZSwgMHgxYiwNCi0gICAgMHhmYywgMHg1NiwgMHgzZSwgMHg0YiwgMHhjNiwgMHhkMiwgMHg3OSwgMHgyMCwNCi0gICAgMHg5YSwgMHhkYiwgMHhjMCwgMHhmZSwgMHg3OCwgMHhjZCwgMHg1YSwgMHhmNCwNCi0gICAgMHgxZiwgMHhkZCwgMHhhOCwgMHgzMywgMHg4OCwgMHgwNywgMHhjNywgMHgzMSwNCi0gICAgMHhiMSwgMHgxMiwgMHgxMCwgMHg1OSwgMHgyNywgMHg4MCwgMHhlYywgMHg1ZiwNCi0gICAgMHg2MCwgMHg1MSwgMHg3ZiwgMHhhOSwgMHgxOSwgMHhiNSwgMHg0YSwgMHgwZCwNCi0gICAgMHgyZCwgMHhlNSwgMHg3YSwgMHg5ZiwgMHg5MywgMHhjOSwgMHg5YywgMHhlZiwNCi0gICAgMHhhMCwgMHhlMCwgMHgzYiwgMHg0ZCwgMHhhZSwgMHgyYSwgMHhmNSwgMHhiMCwNCi0gICAgMHhjOCwgMHhlYiwgMHhiYiwgMHgzYywgMHg4MywgMHg1MywgMHg5OSwgMHg2MSwNCi0gICAgMHgxNywgMHgyYiwgMHgwNCwgMHg3ZSwgMHhiYSwgMHg3NywgMHhkNiwgMHgyNiwNCi0gICAgMHhlMSwgMHg2OSwgMHgxNCwgMHg2MywgMHg1NSwgMHgyMSwgMHgwYywgMHg3ZA0KLX07DQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBFMFsyNTZdID0gew0KLSAgICAweGM2NjM2M2E1LCAweGY4N2M3Yzg0LCAweGVlNzc3Nzk5LCAweGY2N2I3YjhkLA0KLSAgICAweGZmZjJmMjBkLCAweGQ2NmI2YmJkLCAweGRlNmY2ZmIxLCAweDkxYzVjNTU0LA0KLSAgICAweDYwMzAzMDUwLCAweDAyMDEwMTAzLCAweGNlNjc2N2E5LCAweDU2MmIyYjdkLA0KLSAgICAweGU3ZmVmZTE5LCAweGI1ZDdkNzYyLCAweDRkYWJhYmU2LCAweGVjNzY3NjlhLA0KLSAgICAweDhmY2FjYTQ1LCAweDFmODI4MjlkLCAweDg5YzljOTQwLCAweGZhN2Q3ZDg3LA0KLSAgICAweGVmZmFmYTE1LCAweGIyNTk1OWViLCAweDhlNDc0N2M5LCAweGZiZjBmMDBiLA0KLSAgICAweDQxYWRhZGVjLCAweGIzZDRkNDY3LCAweDVmYTJhMmZkLCAweDQ1YWZhZmVhLA0KLSAgICAweDIzOWM5Y2JmLCAweDUzYTRhNGY3LCAweGU0NzI3Mjk2LCAweDliYzBjMDViLA0KLSAgICAweDc1YjdiN2MyLCAweGUxZmRmZDFjLCAweDNkOTM5M2FlLCAweDRjMjYyNjZhLA0KLSAgICAweDZjMzYzNjVhLCAweDdlM2YzZjQxLCAweGY1ZjdmNzAyLCAweDgzY2NjYzRmLA0KLSAgICAweDY4MzQzNDVjLCAweDUxYTVhNWY0LCAweGQxZTVlNTM0LCAweGY5ZjFmMTA4LA0KLSAgICAweGUyNzE3MTkzLCAweGFiZDhkODczLCAweDYyMzEzMTUzLCAweDJhMTUxNTNmLA0KLSAgICAweDA4MDQwNDBjLCAweDk1YzdjNzUyLCAweDQ2MjMyMzY1LCAweDlkYzNjMzVlLA0KLSAgICAweDMwMTgxODI4LCAweDM3OTY5NmExLCAweDBhMDUwNTBmLCAweDJmOWE5YWI1LA0KLSAgICAweDBlMDcwNzA5LCAweDI0MTIxMjM2LCAweDFiODA4MDliLCAweGRmZTJlMjNkLA0KLSAgICAweGNkZWJlYjI2LCAweDRlMjcyNzY5LCAweDdmYjJiMmNkLCAweGVhNzU3NTlmLA0KLSAgICAweDEyMDkwOTFiLCAweDFkODM4MzllLCAweDU4MmMyYzc0LCAweDM0MWExYTJlLA0KLSAgICAweDM2MWIxYjJkLCAweGRjNmU2ZWIyLCAweGI0NWE1YWVlLCAweDViYTBhMGZiLA0KLSAgICAweGE0NTI1MmY2LCAweDc2M2IzYjRkLCAweGI3ZDZkNjYxLCAweDdkYjNiM2NlLA0KLSAgICAweDUyMjkyOTdiLCAweGRkZTNlMzNlLCAweDVlMmYyZjcxLCAweDEzODQ4NDk3LA0KLSAgICAweGE2NTM1M2Y1LCAweGI5ZDFkMTY4LCAweDAwMDAwMDAwLCAweGMxZWRlZDJjLA0KLSAgICAweDQwMjAyMDYwLCAweGUzZmNmYzFmLCAweDc5YjFiMWM4LCAweGI2NWI1YmVkLA0KLSAgICAweGQ0NmE2YWJlLCAweDhkY2JjYjQ2LCAweDY3YmViZWQ5LCAweDcyMzkzOTRiLA0KLSAgICAweDk0NGE0YWRlLCAweDk4NGM0Y2Q0LCAweGIwNTg1OGU4LCAweDg1Y2ZjZjRhLA0KLSAgICAweGJiZDBkMDZiLCAweGM1ZWZlZjJhLCAweDRmYWFhYWU1LCAweGVkZmJmYjE2LA0KLSAgICAweDg2NDM0M2M1LCAweDlhNGQ0ZGQ3LCAweDY2MzMzMzU1LCAweDExODU4NTk0LA0KLSAgICAweDhhNDU0NWNmLCAweGU5ZjlmOTEwLCAweDA0MDIwMjA2LCAweGZlN2Y3ZjgxLA0KLSAgICAweGEwNTA1MGYwLCAweDc4M2MzYzQ0LCAweDI1OWY5ZmJhLCAweDRiYThhOGUzLA0KLSAgICAweGEyNTE1MWYzLCAweDVkYTNhM2ZlLCAweDgwNDA0MGMwLCAweDA1OGY4ZjhhLA0KLSAgICAweDNmOTI5MmFkLCAweDIxOWQ5ZGJjLCAweDcwMzgzODQ4LCAweGYxZjVmNTA0LA0KLSAgICAweDYzYmNiY2RmLCAweDc3YjZiNmMxLCAweGFmZGFkYTc1LCAweDQyMjEyMTYzLA0KLSAgICAweDIwMTAxMDMwLCAweGU1ZmZmZjFhLCAweGZkZjNmMzBlLCAweGJmZDJkMjZkLA0KLSAgICAweDgxY2RjZDRjLCAweDE4MGMwYzE0LCAweDI2MTMxMzM1LCAweGMzZWNlYzJmLA0KLSAgICAweGJlNWY1ZmUxLCAweDM1OTc5N2EyLCAweDg4NDQ0NGNjLCAweDJlMTcxNzM5LA0KLSAgICAweDkzYzRjNDU3LCAweDU1YTdhN2YyLCAweGZjN2U3ZTgyLCAweDdhM2QzZDQ3LA0KLSAgICAweGM4NjQ2NGFjLCAweGJhNWQ1ZGU3LCAweDMyMTkxOTJiLCAweGU2NzM3Mzk1LA0KLSAgICAweGMwNjA2MGEwLCAweDE5ODE4MTk4LCAweDllNGY0ZmQxLCAweGEzZGNkYzdmLA0KLSAgICAweDQ0MjIyMjY2LCAweDU0MmEyYTdlLCAweDNiOTA5MGFiLCAweDBiODg4ODgzLA0KLSAgICAweDhjNDY0NmNhLCAweGM3ZWVlZTI5LCAweDZiYjhiOGQzLCAweDI4MTQxNDNjLA0KLSAgICAweGE3ZGVkZTc5LCAweGJjNWU1ZWUyLCAweDE2MGIwYjFkLCAweGFkZGJkYjc2LA0KLSAgICAweGRiZTBlMDNiLCAweDY0MzIzMjU2LCAweDc0M2EzYTRlLCAweDE0MGEwYTFlLA0KLSAgICAweDkyNDk0OWRiLCAweDBjMDYwNjBhLCAweDQ4MjQyNDZjLCAweGI4NWM1Y2U0LA0KLSAgICAweDlmYzJjMjVkLCAweGJkZDNkMzZlLCAweDQzYWNhY2VmLCAweGM0NjI2MmE2LA0KLSAgICAweDM5OTE5MWE4LCAweDMxOTU5NWE0LCAweGQzZTRlNDM3LCAweGYyNzk3OThiLA0KLSAgICAweGQ1ZTdlNzMyLCAweDhiYzhjODQzLCAweDZlMzczNzU5LCAweGRhNmQ2ZGI3LA0KLSAgICAweDAxOGQ4ZDhjLCAweGIxZDVkNTY0LCAweDljNGU0ZWQyLCAweDQ5YTlhOWUwLA0KLSAgICAweGQ4NmM2Y2I0LCAweGFjNTY1NmZhLCAweGYzZjRmNDA3LCAweGNmZWFlYTI1LA0KLSAgICAweGNhNjU2NWFmLCAweGY0N2E3YThlLCAweDQ3YWVhZWU5LCAweDEwMDgwODE4LA0KLSAgICAweDZmYmFiYWQ1LCAweGYwNzg3ODg4LCAweDRhMjUyNTZmLCAweDVjMmUyZTcyLA0KLSAgICAweDM4MWMxYzI0LCAweDU3YTZhNmYxLCAweDczYjRiNGM3LCAweDk3YzZjNjUxLA0KLSAgICAweGNiZThlODIzLCAweGExZGRkZDdjLCAweGU4NzQ3NDljLCAweDNlMWYxZjIxLA0KLSAgICAweDk2NGI0YmRkLCAweDYxYmRiZGRjLCAweDBkOGI4Yjg2LCAweDBmOGE4YTg1LA0KLSAgICAweGUwNzA3MDkwLCAweDdjM2UzZTQyLCAweDcxYjViNWM0LCAweGNjNjY2NmFhLA0KLSAgICAweDkwNDg0OGQ4LCAweDA2MDMwMzA1LCAweGY3ZjZmNjAxLCAweDFjMGUwZTEyLA0KLSAgICAweGMyNjE2MWEzLCAweDZhMzUzNTVmLCAweGFlNTc1N2Y5LCAweDY5YjliOWQwLA0KLSAgICAweDE3ODY4NjkxLCAweDk5YzFjMTU4LCAweDNhMWQxZDI3LCAweDI3OWU5ZWI5LA0KLSAgICAweGQ5ZTFlMTM4LCAweGViZjhmODEzLCAweDJiOTg5OGIzLCAweDIyMTExMTMzLA0KLSAgICAweGQyNjk2OWJiLCAweGE5ZDlkOTcwLCAweDA3OGU4ZTg5LCAweDMzOTQ5NGE3LA0KLSAgICAweDJkOWI5YmI2LCAweDNjMWUxZTIyLCAweDE1ODc4NzkyLCAweGM5ZTllOTIwLA0KLSAgICAweDg3Y2VjZTQ5LCAweGFhNTU1NWZmLCAweDUwMjgyODc4LCAweGE1ZGZkZjdhLA0KLSAgICAweDAzOGM4YzhmLCAweDU5YTFhMWY4LCAweDA5ODk4OTgwLCAweDFhMGQwZDE3LA0KLSAgICAweDY1YmZiZmRhLCAweGQ3ZTZlNjMxLCAweDg0NDI0MmM2LCAweGQwNjg2OGI4LA0KLSAgICAweDgyNDE0MWMzLCAweDI5OTk5OWIwLCAweDVhMmQyZDc3LCAweDFlMGYwZjExLA0KLSAgICAweDdiYjBiMGNiLCAweGE4NTQ1NGZjLCAweDZkYmJiYmQ2LCAweDJjMTYxNjNhLA0KLX07DQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBFMVsyNTZdID0gew0KLSAgICAweGE1YzY2MzYzLCAweDg0Zjg3YzdjLCAweDk5ZWU3Nzc3LCAweDhkZjY3YjdiLA0KLSAgICAweDBkZmZmMmYyLCAweGJkZDY2YjZiLCAweGIxZGU2ZjZmLCAweDU0OTFjNWM1LA0KLSAgICAweDUwNjAzMDMwLCAweDAzMDIwMTAxLCAweGE5Y2U2NzY3LCAweDdkNTYyYjJiLA0KLSAgICAweDE5ZTdmZWZlLCAweDYyYjVkN2Q3LCAweGU2NGRhYmFiLCAweDlhZWM3Njc2LA0KLSAgICAweDQ1OGZjYWNhLCAweDlkMWY4MjgyLCAweDQwODljOWM5LCAweDg3ZmE3ZDdkLA0KLSAgICAweDE1ZWZmYWZhLCAweGViYjI1OTU5LCAweGM5OGU0NzQ3LCAweDBiZmJmMGYwLA0KLSAgICAweGVjNDFhZGFkLCAweDY3YjNkNGQ0LCAweGZkNWZhMmEyLCAweGVhNDVhZmFmLA0KLSAgICAweGJmMjM5YzljLCAweGY3NTNhNGE0LCAweDk2ZTQ3MjcyLCAweDViOWJjMGMwLA0KLSAgICAweGMyNzViN2I3LCAweDFjZTFmZGZkLCAweGFlM2Q5MzkzLCAweDZhNGMyNjI2LA0KLSAgICAweDVhNmMzNjM2LCAweDQxN2UzZjNmLCAweDAyZjVmN2Y3LCAweDRmODNjY2NjLA0KLSAgICAweDVjNjgzNDM0LCAweGY0NTFhNWE1LCAweDM0ZDFlNWU1LCAweDA4ZjlmMWYxLA0KLSAgICAweDkzZTI3MTcxLCAweDczYWJkOGQ4LCAweDUzNjIzMTMxLCAweDNmMmExNTE1LA0KLSAgICAweDBjMDgwNDA0LCAweDUyOTVjN2M3LCAweDY1NDYyMzIzLCAweDVlOWRjM2MzLA0KLSAgICAweDI4MzAxODE4LCAweGExMzc5Njk2LCAweDBmMGEwNTA1LCAweGI1MmY5YTlhLA0KLSAgICAweDA5MGUwNzA3LCAweDM2MjQxMjEyLCAweDliMWI4MDgwLCAweDNkZGZlMmUyLA0KLSAgICAweDI2Y2RlYmViLCAweDY5NGUyNzI3LCAweGNkN2ZiMmIyLCAweDlmZWE3NTc1LA0KLSAgICAweDFiMTIwOTA5LCAweDllMWQ4MzgzLCAweDc0NTgyYzJjLCAweDJlMzQxYTFhLA0KLSAgICAweDJkMzYxYjFiLCAweGIyZGM2ZTZlLCAweGVlYjQ1YTVhLCAweGZiNWJhMGEwLA0KLSAgICAweGY2YTQ1MjUyLCAweDRkNzYzYjNiLCAweDYxYjdkNmQ2LCAweGNlN2RiM2IzLA0KLSAgICAweDdiNTIyOTI5LCAweDNlZGRlM2UzLCAweDcxNWUyZjJmLCAweDk3MTM4NDg0LA0KLSAgICAweGY1YTY1MzUzLCAweDY4YjlkMWQxLCAweDAwMDAwMDAwLCAweDJjYzFlZGVkLA0KLSAgICAweDYwNDAyMDIwLCAweDFmZTNmY2ZjLCAweGM4NzliMWIxLCAweGVkYjY1YjViLA0KLSAgICAweGJlZDQ2YTZhLCAweDQ2OGRjYmNiLCAweGQ5NjdiZWJlLCAweDRiNzIzOTM5LA0KLSAgICAweGRlOTQ0YTRhLCAweGQ0OTg0YzRjLCAweGU4YjA1ODU4LCAweDRhODVjZmNmLA0KLSAgICAweDZiYmJkMGQwLCAweDJhYzVlZmVmLCAweGU1NGZhYWFhLCAweDE2ZWRmYmZiLA0KLSAgICAweGM1ODY0MzQzLCAweGQ3OWE0ZDRkLCAweDU1NjYzMzMzLCAweDk0MTE4NTg1LA0KLSAgICAweGNmOGE0NTQ1LCAweDEwZTlmOWY5LCAweDA2MDQwMjAyLCAweDgxZmU3ZjdmLA0KLSAgICAweGYwYTA1MDUwLCAweDQ0NzgzYzNjLCAweGJhMjU5ZjlmLCAweGUzNGJhOGE4LA0KLSAgICAweGYzYTI1MTUxLCAweGZlNWRhM2EzLCAweGMwODA0MDQwLCAweDhhMDU4ZjhmLA0KLSAgICAweGFkM2Y5MjkyLCAweGJjMjE5ZDlkLCAweDQ4NzAzODM4LCAweDA0ZjFmNWY1LA0KLSAgICAweGRmNjNiY2JjLCAweGMxNzdiNmI2LCAweDc1YWZkYWRhLCAweDYzNDIyMTIxLA0KLSAgICAweDMwMjAxMDEwLCAweDFhZTVmZmZmLCAweDBlZmRmM2YzLCAweDZkYmZkMmQyLA0KLSAgICAweDRjODFjZGNkLCAweDE0MTgwYzBjLCAweDM1MjYxMzEzLCAweDJmYzNlY2VjLA0KLSAgICAweGUxYmU1ZjVmLCAweGEyMzU5Nzk3LCAweGNjODg0NDQ0LCAweDM5MmUxNzE3LA0KLSAgICAweDU3OTNjNGM0LCAweGYyNTVhN2E3LCAweDgyZmM3ZTdlLCAweDQ3N2EzZDNkLA0KLSAgICAweGFjYzg2NDY0LCAweGU3YmE1ZDVkLCAweDJiMzIxOTE5LCAweDk1ZTY3MzczLA0KLSAgICAweGEwYzA2MDYwLCAweDk4MTk4MTgxLCAweGQxOWU0ZjRmLCAweDdmYTNkY2RjLA0KLSAgICAweDY2NDQyMjIyLCAweDdlNTQyYTJhLCAweGFiM2I5MDkwLCAweDgzMGI4ODg4LA0KLSAgICAweGNhOGM0NjQ2LCAweDI5YzdlZWVlLCAweGQzNmJiOGI4LCAweDNjMjgxNDE0LA0KLSAgICAweDc5YTdkZWRlLCAweGUyYmM1ZTVlLCAweDFkMTYwYjBiLCAweDc2YWRkYmRiLA0KLSAgICAweDNiZGJlMGUwLCAweDU2NjQzMjMyLCAweDRlNzQzYTNhLCAweDFlMTQwYTBhLA0KLSAgICAweGRiOTI0OTQ5LCAweDBhMGMwNjA2LCAweDZjNDgyNDI0LCAweGU0Yjg1YzVjLA0KLSAgICAweDVkOWZjMmMyLCAweDZlYmRkM2QzLCAweGVmNDNhY2FjLCAweGE2YzQ2MjYyLA0KLSAgICAweGE4Mzk5MTkxLCAweGE0MzE5NTk1LCAweDM3ZDNlNGU0LCAweDhiZjI3OTc5LA0KLSAgICAweDMyZDVlN2U3LCAweDQzOGJjOGM4LCAweDU5NmUzNzM3LCAweGI3ZGE2ZDZkLA0KLSAgICAweDhjMDE4ZDhkLCAweDY0YjFkNWQ1LCAweGQyOWM0ZTRlLCAweGUwNDlhOWE5LA0KLSAgICAweGI0ZDg2YzZjLCAweGZhYWM1NjU2LCAweDA3ZjNmNGY0LCAweDI1Y2ZlYWVhLA0KLSAgICAweGFmY2E2NTY1LCAweDhlZjQ3YTdhLCAweGU5NDdhZWFlLCAweDE4MTAwODA4LA0KLSAgICAweGQ1NmZiYWJhLCAweDg4ZjA3ODc4LCAweDZmNGEyNTI1LCAweDcyNWMyZTJlLA0KLSAgICAweDI0MzgxYzFjLCAweGYxNTdhNmE2LCAweGM3NzNiNGI0LCAweDUxOTdjNmM2LA0KLSAgICAweDIzY2JlOGU4LCAweDdjYTFkZGRkLCAweDljZTg3NDc0LCAweDIxM2UxZjFmLA0KLSAgICAweGRkOTY0YjRiLCAweGRjNjFiZGJkLCAweDg2MGQ4YjhiLCAweDg1MGY4YThhLA0KLSAgICAweDkwZTA3MDcwLCAweDQyN2MzZTNlLCAweGM0NzFiNWI1LCAweGFhY2M2NjY2LA0KLSAgICAweGQ4OTA0ODQ4LCAweDA1MDYwMzAzLCAweDAxZjdmNmY2LCAweDEyMWMwZTBlLA0KLSAgICAweGEzYzI2MTYxLCAweDVmNmEzNTM1LCAweGY5YWU1NzU3LCAweGQwNjliOWI5LA0KLSAgICAweDkxMTc4Njg2LCAweDU4OTljMWMxLCAweDI3M2ExZDFkLCAweGI5Mjc5ZTllLA0KLSAgICAweDM4ZDllMWUxLCAweDEzZWJmOGY4LCAweGIzMmI5ODk4LCAweDMzMjIxMTExLA0KLSAgICAweGJiZDI2OTY5LCAweDcwYTlkOWQ5LCAweDg5MDc4ZThlLCAweGE3MzM5NDk0LA0KLSAgICAweGI2MmQ5YjliLCAweDIyM2MxZTFlLCAweDkyMTU4Nzg3LCAweDIwYzllOWU5LA0KLSAgICAweDQ5ODdjZWNlLCAweGZmYWE1NTU1LCAweDc4NTAyODI4LCAweDdhYTVkZmRmLA0KLSAgICAweDhmMDM4YzhjLCAweGY4NTlhMWExLCAweDgwMDk4OTg5LCAweDE3MWEwZDBkLA0KLSAgICAweGRhNjViZmJmLCAweDMxZDdlNmU2LCAweGM2ODQ0MjQyLCAweGI4ZDA2ODY4LA0KLSAgICAweGMzODI0MTQxLCAweGIwMjk5OTk5LCAweDc3NWEyZDJkLCAweDExMWUwZjBmLA0KLSAgICAweGNiN2JiMGIwLCAweGZjYTg1NDU0LCAweGQ2NmRiYmJiLCAweDNhMmMxNjE2LA0KLX07DQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBFMlsyNTZdID0gew0KLSAgICAweDYzYTVjNjYzLCAweDdjODRmODdjLCAweDc3OTllZTc3LCAweDdiOGRmNjdiLA0KLSAgICAweGYyMGRmZmYyLCAweDZiYmRkNjZiLCAweDZmYjFkZTZmLCAweGM1NTQ5MWM1LA0KLSAgICAweDMwNTA2MDMwLCAweDAxMDMwMjAxLCAweDY3YTljZTY3LCAweDJiN2Q1NjJiLA0KLSAgICAweGZlMTllN2ZlLCAweGQ3NjJiNWQ3LCAweGFiZTY0ZGFiLCAweDc2OWFlYzc2LA0KLSAgICAweGNhNDU4ZmNhLCAweDgyOWQxZjgyLCAweGM5NDA4OWM5LCAweDdkODdmYTdkLA0KLSAgICAweGZhMTVlZmZhLCAweDU5ZWJiMjU5LCAweDQ3Yzk4ZTQ3LCAweGYwMGJmYmYwLA0KLSAgICAweGFkZWM0MWFkLCAweGQ0NjdiM2Q0LCAweGEyZmQ1ZmEyLCAweGFmZWE0NWFmLA0KLSAgICAweDljYmYyMzljLCAweGE0Zjc1M2E0LCAweDcyOTZlNDcyLCAweGMwNWI5YmMwLA0KLSAgICAweGI3YzI3NWI3LCAweGZkMWNlMWZkLCAweDkzYWUzZDkzLCAweDI2NmE0YzI2LA0KLSAgICAweDM2NWE2YzM2LCAweDNmNDE3ZTNmLCAweGY3MDJmNWY3LCAweGNjNGY4M2NjLA0KLSAgICAweDM0NWM2ODM0LCAweGE1ZjQ1MWE1LCAweGU1MzRkMWU1LCAweGYxMDhmOWYxLA0KLSAgICAweDcxOTNlMjcxLCAweGQ4NzNhYmQ4LCAweDMxNTM2MjMxLCAweDE1M2YyYTE1LA0KLSAgICAweDA0MGMwODA0LCAweGM3NTI5NWM3LCAweDIzNjU0NjIzLCAweGMzNWU5ZGMzLA0KLSAgICAweDE4MjgzMDE4LCAweDk2YTEzNzk2LCAweDA1MGYwYTA1LCAweDlhYjUyZjlhLA0KLSAgICAweDA3MDkwZTA3LCAweDEyMzYyNDEyLCAweDgwOWIxYjgwLCAweGUyM2RkZmUyLA0KLSAgICAweGViMjZjZGViLCAweDI3Njk0ZTI3LCAweGIyY2Q3ZmIyLCAweDc1OWZlYTc1LA0KLSAgICAweDA5MWIxMjA5LCAweDgzOWUxZDgzLCAweDJjNzQ1ODJjLCAweDFhMmUzNDFhLA0KLSAgICAweDFiMmQzNjFiLCAweDZlYjJkYzZlLCAweDVhZWViNDVhLCAweGEwZmI1YmEwLA0KLSAgICAweDUyZjZhNDUyLCAweDNiNGQ3NjNiLCAweGQ2NjFiN2Q2LCAweGIzY2U3ZGIzLA0KLSAgICAweDI5N2I1MjI5LCAweGUzM2VkZGUzLCAweDJmNzE1ZTJmLCAweDg0OTcxMzg0LA0KLSAgICAweDUzZjVhNjUzLCAweGQxNjhiOWQxLCAweDAwMDAwMDAwLCAweGVkMmNjMWVkLA0KLSAgICAweDIwNjA0MDIwLCAweGZjMWZlM2ZjLCAweGIxYzg3OWIxLCAweDViZWRiNjViLA0KLSAgICAweDZhYmVkNDZhLCAweGNiNDY4ZGNiLCAweGJlZDk2N2JlLCAweDM5NGI3MjM5LA0KLSAgICAweDRhZGU5NDRhLCAweDRjZDQ5ODRjLCAweDU4ZThiMDU4LCAweGNmNGE4NWNmLA0KLSAgICAweGQwNmJiYmQwLCAweGVmMmFjNWVmLCAweGFhZTU0ZmFhLCAweGZiMTZlZGZiLA0KLSAgICAweDQzYzU4NjQzLCAweDRkZDc5YTRkLCAweDMzNTU2NjMzLCAweDg1OTQxMTg1LA0KLSAgICAweDQ1Y2Y4YTQ1LCAweGY5MTBlOWY5LCAweDAyMDYwNDAyLCAweDdmODFmZTdmLA0KLSAgICAweDUwZjBhMDUwLCAweDNjNDQ3ODNjLCAweDlmYmEyNTlmLCAweGE4ZTM0YmE4LA0KLSAgICAweDUxZjNhMjUxLCAweGEzZmU1ZGEzLCAweDQwYzA4MDQwLCAweDhmOGEwNThmLA0KLSAgICAweDkyYWQzZjkyLCAweDlkYmMyMTlkLCAweDM4NDg3MDM4LCAweGY1MDRmMWY1LA0KLSAgICAweGJjZGY2M2JjLCAweGI2YzE3N2I2LCAweGRhNzVhZmRhLCAweDIxNjM0MjIxLA0KLSAgICAweDEwMzAyMDEwLCAweGZmMWFlNWZmLCAweGYzMGVmZGYzLCAweGQyNmRiZmQyLA0KLSAgICAweGNkNGM4MWNkLCAweDBjMTQxODBjLCAweDEzMzUyNjEzLCAweGVjMmZjM2VjLA0KLSAgICAweDVmZTFiZTVmLCAweDk3YTIzNTk3LCAweDQ0Y2M4ODQ0LCAweDE3MzkyZTE3LA0KLSAgICAweGM0NTc5M2M0LCAweGE3ZjI1NWE3LCAweDdlODJmYzdlLCAweDNkNDc3YTNkLA0KLSAgICAweDY0YWNjODY0LCAweDVkZTdiYTVkLCAweDE5MmIzMjE5LCAweDczOTVlNjczLA0KLSAgICAweDYwYTBjMDYwLCAweDgxOTgxOTgxLCAweDRmZDE5ZTRmLCAweGRjN2ZhM2RjLA0KLSAgICAweDIyNjY0NDIyLCAweDJhN2U1NDJhLCAweDkwYWIzYjkwLCAweDg4ODMwYjg4LA0KLSAgICAweDQ2Y2E4YzQ2LCAweGVlMjljN2VlLCAweGI4ZDM2YmI4LCAweDE0M2MyODE0LA0KLSAgICAweGRlNzlhN2RlLCAweDVlZTJiYzVlLCAweDBiMWQxNjBiLCAweGRiNzZhZGRiLA0KLSAgICAweGUwM2JkYmUwLCAweDMyNTY2NDMyLCAweDNhNGU3NDNhLCAweDBhMWUxNDBhLA0KLSAgICAweDQ5ZGI5MjQ5LCAweDA2MGEwYzA2LCAweDI0NmM0ODI0LCAweDVjZTRiODVjLA0KLSAgICAweGMyNWQ5ZmMyLCAweGQzNmViZGQzLCAweGFjZWY0M2FjLCAweDYyYTZjNDYyLA0KLSAgICAweDkxYTgzOTkxLCAweDk1YTQzMTk1LCAweGU0MzdkM2U0LCAweDc5OGJmMjc5LA0KLSAgICAweGU3MzJkNWU3LCAweGM4NDM4YmM4LCAweDM3NTk2ZTM3LCAweDZkYjdkYTZkLA0KLSAgICAweDhkOGMwMThkLCAweGQ1NjRiMWQ1LCAweDRlZDI5YzRlLCAweGE5ZTA0OWE5LA0KLSAgICAweDZjYjRkODZjLCAweDU2ZmFhYzU2LCAweGY0MDdmM2Y0LCAweGVhMjVjZmVhLA0KLSAgICAweDY1YWZjYTY1LCAweDdhOGVmNDdhLCAweGFlZTk0N2FlLCAweDA4MTgxMDA4LA0KLSAgICAweGJhZDU2ZmJhLCAweDc4ODhmMDc4LCAweDI1NmY0YTI1LCAweDJlNzI1YzJlLA0KLSAgICAweDFjMjQzODFjLCAweGE2ZjE1N2E2LCAweGI0Yzc3M2I0LCAweGM2NTE5N2M2LA0KLSAgICAweGU4MjNjYmU4LCAweGRkN2NhMWRkLCAweDc0OWNlODc0LCAweDFmMjEzZTFmLA0KLSAgICAweDRiZGQ5NjRiLCAweGJkZGM2MWJkLCAweDhiODYwZDhiLCAweDhhODUwZjhhLA0KLSAgICAweDcwOTBlMDcwLCAweDNlNDI3YzNlLCAweGI1YzQ3MWI1LCAweDY2YWFjYzY2LA0KLSAgICAweDQ4ZDg5MDQ4LCAweDAzMDUwNjAzLCAweGY2MDFmN2Y2LCAweDBlMTIxYzBlLA0KLSAgICAweDYxYTNjMjYxLCAweDM1NWY2YTM1LCAweDU3ZjlhZTU3LCAweGI5ZDA2OWI5LA0KLSAgICAweDg2OTExNzg2LCAweGMxNTg5OWMxLCAweDFkMjczYTFkLCAweDllYjkyNzllLA0KLSAgICAweGUxMzhkOWUxLCAweGY4MTNlYmY4LCAweDk4YjMyYjk4LCAweDExMzMyMjExLA0KLSAgICAweDY5YmJkMjY5LCAweGQ5NzBhOWQ5LCAweDhlODkwNzhlLCAweDk0YTczMzk0LA0KLSAgICAweDliYjYyZDliLCAweDFlMjIzYzFlLCAweDg3OTIxNTg3LCAweGU5MjBjOWU5LA0KLSAgICAweGNlNDk4N2NlLCAweDU1ZmZhYTU1LCAweDI4Nzg1MDI4LCAweGRmN2FhNWRmLA0KLSAgICAweDhjOGYwMzhjLCAweGExZjg1OWExLCAweDg5ODAwOTg5LCAweDBkMTcxYTBkLA0KLSAgICAweGJmZGE2NWJmLCAweGU2MzFkN2U2LCAweDQyYzY4NDQyLCAweDY4YjhkMDY4LA0KLSAgICAweDQxYzM4MjQxLCAweDk5YjAyOTk5LCAweDJkNzc1YTJkLCAweDBmMTExZTBmLA0KLSAgICAweGIwY2I3YmIwLCAweDU0ZmNhODU0LCAweGJiZDY2ZGJiLCAweDE2M2EyYzE2LA0KLX07DQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBFM1syNTZdID0gew0KLSAgICAweDYzNjNhNWM2LCAweDdjN2M4NGY4LCAweDc3Nzc5OWVlLCAweDdiN2I4ZGY2LA0KLSAgICAweGYyZjIwZGZmLCAweDZiNmJiZGQ2LCAweDZmNmZiMWRlLCAweGM1YzU1NDkxLA0KLSAgICAweDMwMzA1MDYwLCAweDAxMDEwMzAyLCAweDY3NjdhOWNlLCAweDJiMmI3ZDU2LA0KLSAgICAweGZlZmUxOWU3LCAweGQ3ZDc2MmI1LCAweGFiYWJlNjRkLCAweDc2NzY5YWVjLA0KLSAgICAweGNhY2E0NThmLCAweDgyODI5ZDFmLCAweGM5Yzk0MDg5LCAweDdkN2Q4N2ZhLA0KLSAgICAweGZhZmExNWVmLCAweDU5NTllYmIyLCAweDQ3NDdjOThlLCAweGYwZjAwYmZiLA0KLSAgICAweGFkYWRlYzQxLCAweGQ0ZDQ2N2IzLCAweGEyYTJmZDVmLCAweGFmYWZlYTQ1LA0KLSAgICAweDljOWNiZjIzLCAweGE0YTRmNzUzLCAweDcyNzI5NmU0LCAweGMwYzA1YjliLA0KLSAgICAweGI3YjdjMjc1LCAweGZkZmQxY2UxLCAweDkzOTNhZTNkLCAweDI2MjY2YTRjLA0KLSAgICAweDM2MzY1YTZjLCAweDNmM2Y0MTdlLCAweGY3ZjcwMmY1LCAweGNjY2M0ZjgzLA0KLSAgICAweDM0MzQ1YzY4LCAweGE1YTVmNDUxLCAweGU1ZTUzNGQxLCAweGYxZjEwOGY5LA0KLSAgICAweDcxNzE5M2UyLCAweGQ4ZDg3M2FiLCAweDMxMzE1MzYyLCAweDE1MTUzZjJhLA0KLSAgICAweDA0MDQwYzA4LCAweGM3Yzc1Mjk1LCAweDIzMjM2NTQ2LCAweGMzYzM1ZTlkLA0KLSAgICAweDE4MTgyODMwLCAweDk2OTZhMTM3LCAweDA1MDUwZjBhLCAweDlhOWFiNTJmLA0KLSAgICAweDA3MDcwOTBlLCAweDEyMTIzNjI0LCAweDgwODA5YjFiLCAweGUyZTIzZGRmLA0KLSAgICAweGViZWIyNmNkLCAweDI3Mjc2OTRlLCAweGIyYjJjZDdmLCAweDc1NzU5ZmVhLA0KLSAgICAweDA5MDkxYjEyLCAweDgzODM5ZTFkLCAweDJjMmM3NDU4LCAweDFhMWEyZTM0LA0KLSAgICAweDFiMWIyZDM2LCAweDZlNmViMmRjLCAweDVhNWFlZWI0LCAweGEwYTBmYjViLA0KLSAgICAweDUyNTJmNmE0LCAweDNiM2I0ZDc2LCAweGQ2ZDY2MWI3LCAweGIzYjNjZTdkLA0KLSAgICAweDI5Mjk3YjUyLCAweGUzZTMzZWRkLCAweDJmMmY3MTVlLCAweDg0ODQ5NzEzLA0KLSAgICAweDUzNTNmNWE2LCAweGQxZDE2OGI5LCAweDAwMDAwMDAwLCAweGVkZWQyY2MxLA0KLSAgICAweDIwMjA2MDQwLCAweGZjZmMxZmUzLCAweGIxYjFjODc5LCAweDViNWJlZGI2LA0KLSAgICAweDZhNmFiZWQ0LCAweGNiY2I0NjhkLCAweGJlYmVkOTY3LCAweDM5Mzk0YjcyLA0KLSAgICAweDRhNGFkZTk0LCAweDRjNGNkNDk4LCAweDU4NThlOGIwLCAweGNmY2Y0YTg1LA0KLSAgICAweGQwZDA2YmJiLCAweGVmZWYyYWM1LCAweGFhYWFlNTRmLCAweGZiZmIxNmVkLA0KLSAgICAweDQzNDNjNTg2LCAweDRkNGRkNzlhLCAweDMzMzM1NTY2LCAweDg1ODU5NDExLA0KLSAgICAweDQ1NDVjZjhhLCAweGY5ZjkxMGU5LCAweDAyMDIwNjA0LCAweDdmN2Y4MWZlLA0KLSAgICAweDUwNTBmMGEwLCAweDNjM2M0NDc4LCAweDlmOWZiYTI1LCAweGE4YThlMzRiLA0KLSAgICAweDUxNTFmM2EyLCAweGEzYTNmZTVkLCAweDQwNDBjMDgwLCAweDhmOGY4YTA1LA0KLSAgICAweDkyOTJhZDNmLCAweDlkOWRiYzIxLCAweDM4Mzg0ODcwLCAweGY1ZjUwNGYxLA0KLSAgICAweGJjYmNkZjYzLCAweGI2YjZjMTc3LCAweGRhZGE3NWFmLCAweDIxMjE2MzQyLA0KLSAgICAweDEwMTAzMDIwLCAweGZmZmYxYWU1LCAweGYzZjMwZWZkLCAweGQyZDI2ZGJmLA0KLSAgICAweGNkY2Q0YzgxLCAweDBjMGMxNDE4LCAweDEzMTMzNTI2LCAweGVjZWMyZmMzLA0KLSAgICAweDVmNWZlMWJlLCAweDk3OTdhMjM1LCAweDQ0NDRjYzg4LCAweDE3MTczOTJlLA0KLSAgICAweGM0YzQ1NzkzLCAweGE3YTdmMjU1LCAweDdlN2U4MmZjLCAweDNkM2Q0NzdhLA0KLSAgICAweDY0NjRhY2M4LCAweDVkNWRlN2JhLCAweDE5MTkyYjMyLCAweDczNzM5NWU2LA0KLSAgICAweDYwNjBhMGMwLCAweDgxODE5ODE5LCAweDRmNGZkMTllLCAweGRjZGM3ZmEzLA0KLSAgICAweDIyMjI2NjQ0LCAweDJhMmE3ZTU0LCAweDkwOTBhYjNiLCAweDg4ODg4MzBiLA0KLSAgICAweDQ2NDZjYThjLCAweGVlZWUyOWM3LCAweGI4YjhkMzZiLCAweDE0MTQzYzI4LA0KLSAgICAweGRlZGU3OWE3LCAweDVlNWVlMmJjLCAweDBiMGIxZDE2LCAweGRiZGI3NmFkLA0KLSAgICAweGUwZTAzYmRiLCAweDMyMzI1NjY0LCAweDNhM2E0ZTc0LCAweDBhMGExZTE0LA0KLSAgICAweDQ5NDlkYjkyLCAweDA2MDYwYTBjLCAweDI0MjQ2YzQ4LCAweDVjNWNlNGI4LA0KLSAgICAweGMyYzI1ZDlmLCAweGQzZDM2ZWJkLCAweGFjYWNlZjQzLCAweDYyNjJhNmM0LA0KLSAgICAweDkxOTFhODM5LCAweDk1OTVhNDMxLCAweGU0ZTQzN2QzLCAweDc5Nzk4YmYyLA0KLSAgICAweGU3ZTczMmQ1LCAweGM4Yzg0MzhiLCAweDM3Mzc1OTZlLCAweDZkNmRiN2RhLA0KLSAgICAweDhkOGQ4YzAxLCAweGQ1ZDU2NGIxLCAweDRlNGVkMjljLCAweGE5YTllMDQ5LA0KLSAgICAweDZjNmNiNGQ4LCAweDU2NTZmYWFjLCAweGY0ZjQwN2YzLCAweGVhZWEyNWNmLA0KLSAgICAweDY1NjVhZmNhLCAweDdhN2E4ZWY0LCAweGFlYWVlOTQ3LCAweDA4MDgxODEwLA0KLSAgICAweGJhYmFkNTZmLCAweDc4Nzg4OGYwLCAweDI1MjU2ZjRhLCAweDJlMmU3MjVjLA0KLSAgICAweDFjMWMyNDM4LCAweGE2YTZmMTU3LCAweGI0YjRjNzczLCAweGM2YzY1MTk3LA0KLSAgICAweGU4ZTgyM2NiLCAweGRkZGQ3Y2ExLCAweDc0NzQ5Y2U4LCAweDFmMWYyMTNlLA0KLSAgICAweDRiNGJkZDk2LCAweGJkYmRkYzYxLCAweDhiOGI4NjBkLCAweDhhOGE4NTBmLA0KLSAgICAweDcwNzA5MGUwLCAweDNlM2U0MjdjLCAweGI1YjVjNDcxLCAweDY2NjZhYWNjLA0KLSAgICAweDQ4NDhkODkwLCAweDAzMDMwNTA2LCAweGY2ZjYwMWY3LCAweDBlMGUxMjFjLA0KLSAgICAweDYxNjFhM2MyLCAweDM1MzU1ZjZhLCAweDU3NTdmOWFlLCAweGI5YjlkMDY5LA0KLSAgICAweDg2ODY5MTE3LCAweGMxYzE1ODk5LCAweDFkMWQyNzNhLCAweDllOWViOTI3LA0KLSAgICAweGUxZTEzOGQ5LCAweGY4ZjgxM2ViLCAweDk4OThiMzJiLCAweDExMTEzMzIyLA0KLSAgICAweDY5NjliYmQyLCAweGQ5ZDk3MGE5LCAweDhlOGU4OTA3LCAweDk0OTRhNzMzLA0KLSAgICAweDliOWJiNjJkLCAweDFlMWUyMjNjLCAweDg3ODc5MjE1LCAweGU5ZTkyMGM5LA0KLSAgICAweGNlY2U0OTg3LCAweDU1NTVmZmFhLCAweDI4Mjg3ODUwLCAweGRmZGY3YWE1LA0KLSAgICAweDhjOGM4ZjAzLCAweGExYTFmODU5LCAweDg5ODk4MDA5LCAweDBkMGQxNzFhLA0KLSAgICAweGJmYmZkYTY1LCAweGU2ZTYzMWQ3LCAweDQyNDJjNjg0LCAweDY4NjhiOGQwLA0KLSAgICAweDQxNDFjMzgyLCAweDk5OTliMDI5LCAweDJkMmQ3NzVhLCAweDBmMGYxMTFlLA0KLSAgICAweGIwYjBjYjdiLCAweDU0NTRmY2E4LCAweGJiYmJkNjZkLCAweDE2MTYzYTJjLA0KLX07DQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBEMFsyNTZdID0gew0KLSAgICAweDUxZjRhNzUwLCAweDdlNDE2NTUzLCAweDFhMTdhNGMzLCAweDNhMjc1ZTk2LA0KLSAgICAweDNiYWI2YmNiLCAweDFmOWQ0NWYxLCAweGFjZmE1OGFiLCAweDRiZTMwMzkzLA0KLSAgICAweDIwMzBmYTU1LCAweGFkNzY2ZGY2LCAweDg4Y2M3NjkxLCAweGY1MDI0YzI1LA0KLSAgICAweDRmZTVkN2ZjLCAweGM1MmFjYmQ3LCAweDI2MzU0NDgwLCAweGI1NjJhMzhmLA0KLSAgICAweGRlYjE1YTQ5LCAweDI1YmExYjY3LCAweDQ1ZWEwZTk4LCAweDVkZmVjMGUxLA0KLSAgICAweGMzMmY3NTAyLCAweDgxNGNmMDEyLCAweDhkNDY5N2EzLCAweDZiZDNmOWM2LA0KLSAgICAweDAzOGY1ZmU3LCAweDE1OTI5Yzk1LCAweGJmNmQ3YWViLCAweDk1NTI1OWRhLA0KLSAgICAweGQ0YmU4MzJkLCAweDU4NzQyMWQzLCAweDQ5ZTA2OTI5LCAweDhlYzljODQ0LA0KLSAgICAweDc1YzI4OTZhLCAweGY0OGU3OTc4LCAweDk5NTgzZTZiLCAweDI3Yjk3MWRkLA0KLSAgICAweGJlZTE0ZmI2LCAweGYwODhhZDE3LCAweGM5MjBhYzY2LCAweDdkY2UzYWI0LA0KLSAgICAweDYzZGY0YTE4LCAweGU1MWEzMTgyLCAweDk3NTEzMzYwLCAweDYyNTM3ZjQ1LA0KLSAgICAweGIxNjQ3N2UwLCAweGJiNmJhZTg0LCAweGZlODFhMDFjLCAweGY5MDgyYjk0LA0KLSAgICAweDcwNDg2ODU4LCAweDhmNDVmZDE5LCAweDk0ZGU2Yzg3LCAweDUyN2JmOGI3LA0KLSAgICAweGFiNzNkMzIzLCAweDcyNGIwMmUyLCAweGUzMWY4ZjU3LCAweDY2NTVhYjJhLA0KLSAgICAweGIyZWIyODA3LCAweDJmYjVjMjAzLCAweDg2YzU3YjlhLCAweGQzMzcwOGE1LA0KLSAgICAweDMwMjg4N2YyLCAweDIzYmZhNWIyLCAweDAyMDM2YWJhLCAweGVkMTY4MjVjLA0KLSAgICAweDhhY2YxYzJiLCAweGE3NzliNDkyLCAweGYzMDdmMmYwLCAweDRlNjllMmExLA0KLSAgICAweDY1ZGFmNGNkLCAweDA2MDViZWQ1LCAweGQxMzQ2MjFmLCAweGM0YTZmZThhLA0KLSAgICAweDM0MmU1MzlkLCAweGEyZjM1NWEwLCAweDA1OGFlMTMyLCAweGE0ZjZlYjc1LA0KLSAgICAweDBiODNlYzM5LCAweDQwNjBlZmFhLCAweDVlNzE5ZjA2LCAweGJkNmUxMDUxLA0KLSAgICAweDNlMjE4YWY5LCAweDk2ZGQwNjNkLCAweGRkM2UwNWFlLCAweDRkZTZiZDQ2LA0KLSAgICAweDkxNTQ4ZGI1LCAweDcxYzQ1ZDA1LCAweDA0MDZkNDZmLCAweDYwNTAxNWZmLA0KLSAgICAweDE5OThmYjI0LCAweGQ2YmRlOTk3LCAweDg5NDA0M2NjLCAweDY3ZDk5ZTc3LA0KLSAgICAweGIwZTg0MmJkLCAweDA3ODk4Yjg4LCAweGU3MTk1YjM4LCAweDc5YzhlZWRiLA0KLSAgICAweGExN2MwYTQ3LCAweDdjNDIwZmU5LCAweGY4ODQxZWM5LCAweDAwMDAwMDAwLA0KLSAgICAweDA5ODA4NjgzLCAweDMyMmJlZDQ4LCAweDFlMTE3MGFjLCAweDZjNWE3MjRlLA0KLSAgICAweGZkMGVmZmZiLCAweDBmODUzODU2LCAweDNkYWVkNTFlLCAweDM2MmQzOTI3LA0KLSAgICAweDBhMGZkOTY0LCAweDY4NWNhNjIxLCAweDliNWI1NGQxLCAweDI0MzYyZTNhLA0KLSAgICAweDBjMGE2N2IxLCAweDkzNTdlNzBmLCAweGI0ZWU5NmQyLCAweDFiOWI5MTllLA0KLSAgICAweDgwYzBjNTRmLCAweDYxZGMyMGEyLCAweDVhNzc0YjY5LCAweDFjMTIxYTE2LA0KLSAgICAweGUyOTNiYTBhLCAweGMwYTAyYWU1LCAweDNjMjJlMDQzLCAweDEyMWIxNzFkLA0KLSAgICAweDBlMDkwZDBiLCAweGYyOGJjN2FkLCAweDJkYjZhOGI5LCAweDE0MWVhOWM4LA0KLSAgICAweDU3ZjExOTg1LCAweGFmNzUwNzRjLCAweGVlOTlkZGJiLCAweGEzN2Y2MGZkLA0KLSAgICAweGY3MDEyNjlmLCAweDVjNzJmNWJjLCAweDQ0NjYzYmM1LCAweDViZmI3ZTM0LA0KLSAgICAweDhiNDMyOTc2LCAweGNiMjNjNmRjLCAweGI2ZWRmYzY4LCAweGI4ZTRmMTYzLA0KLSAgICAweGQ3MzFkY2NhLCAweDQyNjM4NTEwLCAweDEzOTcyMjQwLCAweDg0YzYxMTIwLA0KLSAgICAweDg1NGEyNDdkLCAweGQyYmIzZGY4LCAweGFlZjkzMjExLCAweGM3MjlhMTZkLA0KLSAgICAweDFkOWUyZjRiLCAweGRjYjIzMGYzLCAweDBkODY1MmVjLCAweDc3YzFlM2QwLA0KLSAgICAweDJiYjMxNjZjLCAweGE5NzBiOTk5LCAweDExOTQ0OGZhLCAweDQ3ZTk2NDIyLA0KLSAgICAweGE4ZmM4Y2M0LCAweGEwZjAzZjFhLCAweDU2N2QyY2Q4LCAweDIyMzM5MGVmLA0KLSAgICAweDg3NDk0ZWM3LCAweGQ5MzhkMWMxLCAweDhjY2FhMmZlLCAweDk4ZDQwYjM2LA0KLSAgICAweGE2ZjU4MWNmLCAweGE1N2FkZTI4LCAweGRhYjc4ZTI2LCAweDNmYWRiZmE0LA0KLSAgICAweDJjM2E5ZGU0LCAweDUwNzg5MjBkLCAweDZhNWZjYzliLCAweDU0N2U0NjYyLA0KLSAgICAweGY2OGQxM2MyLCAweDkwZDhiOGU4LCAweDJlMzlmNzVlLCAweDgyYzNhZmY1LA0KLSAgICAweDlmNWQ4MGJlLCAweDY5ZDA5MzdjLCAweDZmZDUyZGE5LCAweGNmMjUxMmIzLA0KLSAgICAweGM4YWM5OTNiLCAweDEwMTg3ZGE3LCAweGU4OWM2MzZlLCAweGRiM2JiYjdiLA0KLSAgICAweGNkMjY3ODA5LCAweDZlNTkxOGY0LCAweGVjOWFiNzAxLCAweDgzNGY5YWE4LA0KLSAgICAweGU2OTU2ZTY1LCAweGFhZmZlNjdlLCAweDIxYmNjZjA4LCAweGVmMTVlOGU2LA0KLSAgICAweGJhZTc5YmQ5LCAweDRhNmYzNmNlLCAweGVhOWYwOWQ0LCAweDI5YjA3Y2Q2LA0KLSAgICAweDMxYTRiMmFmLCAweDJhM2YyMzMxLCAweGM2YTU5NDMwLCAweDM1YTI2NmMwLA0KLSAgICAweDc0NGViYzM3LCAweGZjODJjYWE2LCAweGUwOTBkMGIwLCAweDMzYTdkODE1LA0KLSAgICAweGYxMDQ5ODRhLCAweDQxZWNkYWY3LCAweDdmY2Q1MDBlLCAweDE3OTFmNjJmLA0KLSAgICAweDc2NGRkNjhkLCAweDQzZWZiMDRkLCAweGNjYWE0ZDU0LCAweGU0OTYwNGRmLA0KLSAgICAweDllZDFiNWUzLCAweDRjNmE4ODFiLCAweGMxMmMxZmI4LCAweDQ2NjU1MTdmLA0KLSAgICAweDlkNWVlYTA0LCAweDAxOGMzNTVkLCAweGZhODc3NDczLCAweGZiMGI0MTJlLA0KLSAgICAweGIzNjcxZDVhLCAweDkyZGJkMjUyLCAweGU5MTA1NjMzLCAweDZkZDY0NzEzLA0KLSAgICAweDlhZDc2MThjLCAweDM3YTEwYzdhLCAweDU5ZjgxNDhlLCAweGViMTMzYzg5LA0KLSAgICAweGNlYTkyN2VlLCAweGI3NjFjOTM1LCAweGUxMWNlNWVkLCAweDdhNDdiMTNjLA0KLSAgICAweDljZDJkZjU5LCAweDU1ZjI3MzNmLCAweDE4MTRjZTc5LCAweDczYzczN2JmLA0KLSAgICAweDUzZjdjZGVhLCAweDVmZmRhYTViLCAweGRmM2Q2ZjE0LCAweDc4NDRkYjg2LA0KLSAgICAweGNhYWZmMzgxLCAweGI5NjhjNDNlLCAweDM4MjQzNDJjLCAweGMyYTM0MDVmLA0KLSAgICAweDE2MWRjMzcyLCAweGJjZTIyNTBjLCAweDI4M2M0OThiLCAweGZmMGQ5NTQxLA0KLSAgICAweDM5YTgwMTcxLCAweDA4MGNiM2RlLCAweGQ4YjRlNDljLCAweDY0NTZjMTkwLA0KLSAgICAweDdiY2I4NDYxLCAweGQ1MzJiNjcwLCAweDQ4NmM1Yzc0LCAweGQwYjg1NzQyLA0KLX07DQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBEMVsyNTZdID0gew0KLSAgICAweDUwNTFmNGE3LCAweDUzN2U0MTY1LCAweGMzMWExN2E0LCAweDk2M2EyNzVlLA0KLSAgICAweGNiM2JhYjZiLCAweGYxMWY5ZDQ1LCAweGFiYWNmYTU4LCAweDkzNGJlMzAzLA0KLSAgICAweDU1MjAzMGZhLCAweGY2YWQ3NjZkLCAweDkxODhjYzc2LCAweDI1ZjUwMjRjLA0KLSAgICAweGZjNGZlNWQ3LCAweGQ3YzUyYWNiLCAweDgwMjYzNTQ0LCAweDhmYjU2MmEzLA0KLSAgICAweDQ5ZGViMTVhLCAweDY3MjViYTFiLCAweDk4NDVlYTBlLCAweGUxNWRmZWMwLA0KLSAgICAweDAyYzMyZjc1LCAweDEyODE0Y2YwLCAweGEzOGQ0Njk3LCAweGM2NmJkM2Y5LA0KLSAgICAweGU3MDM4ZjVmLCAweDk1MTU5MjljLCAweGViYmY2ZDdhLCAweGRhOTU1MjU5LA0KLSAgICAweDJkZDRiZTgzLCAweGQzNTg3NDIxLCAweDI5NDllMDY5LCAweDQ0OGVjOWM4LA0KLSAgICAweDZhNzVjMjg5LCAweDc4ZjQ4ZTc5LCAweDZiOTk1ODNlLCAweGRkMjdiOTcxLA0KLSAgICAweGI2YmVlMTRmLCAweDE3ZjA4OGFkLCAweDY2YzkyMGFjLCAweGI0N2RjZTNhLA0KLSAgICAweDE4NjNkZjRhLCAweDgyZTUxYTMxLCAweDYwOTc1MTMzLCAweDQ1NjI1MzdmLA0KLSAgICAweGUwYjE2NDc3LCAweDg0YmI2YmFlLCAweDFjZmU4MWEwLCAweDk0ZjkwODJiLA0KLSAgICAweDU4NzA0ODY4LCAweDE5OGY0NWZkLCAweDg3OTRkZTZjLCAweGI3NTI3YmY4LA0KLSAgICAweDIzYWI3M2QzLCAweGUyNzI0YjAyLCAweDU3ZTMxZjhmLCAweDJhNjY1NWFiLA0KLSAgICAweDA3YjJlYjI4LCAweDAzMmZiNWMyLCAweDlhODZjNTdiLCAweGE1ZDMzNzA4LA0KLSAgICAweGYyMzAyODg3LCAweGIyMjNiZmE1LCAweGJhMDIwMzZhLCAweDVjZWQxNjgyLA0KLSAgICAweDJiOGFjZjFjLCAweDkyYTc3OWI0LCAweGYwZjMwN2YyLCAweGExNGU2OWUyLA0KLSAgICAweGNkNjVkYWY0LCAweGQ1MDYwNWJlLCAweDFmZDEzNDYyLCAweDhhYzRhNmZlLA0KLSAgICAweDlkMzQyZTUzLCAweGEwYTJmMzU1LCAweDMyMDU4YWUxLCAweDc1YTRmNmViLA0KLSAgICAweDM5MGI4M2VjLCAweGFhNDA2MGVmLCAweDA2NWU3MTlmLCAweDUxYmQ2ZTEwLA0KLSAgICAweGY5M2UyMThhLCAweDNkOTZkZDA2LCAweGFlZGQzZTA1LCAweDQ2NGRlNmJkLA0KLSAgICAweGI1OTE1NDhkLCAweDA1NzFjNDVkLCAweDZmMDQwNmQ0LCAweGZmNjA1MDE1LA0KLSAgICAweDI0MTk5OGZiLCAweDk3ZDZiZGU5LCAweGNjODk0MDQzLCAweDc3NjdkOTllLA0KLSAgICAweGJkYjBlODQyLCAweDg4MDc4OThiLCAweDM4ZTcxOTViLCAweGRiNzljOGVlLA0KLSAgICAweDQ3YTE3YzBhLCAweGU5N2M0MjBmLCAweGM5Zjg4NDFlLCAweDAwMDAwMDAwLA0KLSAgICAweDgzMDk4MDg2LCAweDQ4MzIyYmVkLCAweGFjMWUxMTcwLCAweDRlNmM1YTcyLA0KLSAgICAweGZiZmQwZWZmLCAweDU2MGY4NTM4LCAweDFlM2RhZWQ1LCAweDI3MzYyZDM5LA0KLSAgICAweDY0MGEwZmQ5LCAweDIxNjg1Y2E2LCAweGQxOWI1YjU0LCAweDNhMjQzNjJlLA0KLSAgICAweGIxMGMwYTY3LCAweDBmOTM1N2U3LCAweGQyYjRlZTk2LCAweDllMWI5YjkxLA0KLSAgICAweDRmODBjMGM1LCAweGEyNjFkYzIwLCAweDY5NWE3NzRiLCAweDE2MWMxMjFhLA0KLSAgICAweDBhZTI5M2JhLCAweGU1YzBhMDJhLCAweDQzM2MyMmUwLCAweDFkMTIxYjE3LA0KLSAgICAweDBiMGUwOTBkLCAweGFkZjI4YmM3LCAweGI5MmRiNmE4LCAweGM4MTQxZWE5LA0KLSAgICAweDg1NTdmMTE5LCAweDRjYWY3NTA3LCAweGJiZWU5OWRkLCAweGZkYTM3ZjYwLA0KLSAgICAweDlmZjcwMTI2LCAweGJjNWM3MmY1LCAweGM1NDQ2NjNiLCAweDM0NWJmYjdlLA0KLSAgICAweDc2OGI0MzI5LCAweGRjY2IyM2M2LCAweDY4YjZlZGZjLCAweDYzYjhlNGYxLA0KLSAgICAweGNhZDczMWRjLCAweDEwNDI2Mzg1LCAweDQwMTM5NzIyLCAweDIwODRjNjExLA0KLSAgICAweDdkODU0YTI0LCAweGY4ZDJiYjNkLCAweDExYWVmOTMyLCAweDZkYzcyOWExLA0KLSAgICAweDRiMWQ5ZTJmLCAweGYzZGNiMjMwLCAweGVjMGQ4NjUyLCAweGQwNzdjMWUzLA0KLSAgICAweDZjMmJiMzE2LCAweDk5YTk3MGI5LCAweGZhMTE5NDQ4LCAweDIyNDdlOTY0LA0KLSAgICAweGM0YThmYzhjLCAweDFhYTBmMDNmLCAweGQ4NTY3ZDJjLCAweGVmMjIzMzkwLA0KLSAgICAweGM3ODc0OTRlLCAweGMxZDkzOGQxLCAweGZlOGNjYWEyLCAweDM2OThkNDBiLA0KLSAgICAweGNmYTZmNTgxLCAweDI4YTU3YWRlLCAweDI2ZGFiNzhlLCAweGE0M2ZhZGJmLA0KLSAgICAweGU0MmMzYTlkLCAweDBkNTA3ODkyLCAweDliNmE1ZmNjLCAweDYyNTQ3ZTQ2LA0KLSAgICAweGMyZjY4ZDEzLCAweGU4OTBkOGI4LCAweDVlMmUzOWY3LCAweGY1ODJjM2FmLA0KLSAgICAweGJlOWY1ZDgwLCAweDdjNjlkMDkzLCAweGE5NmZkNTJkLCAweGIzY2YyNTEyLA0KLSAgICAweDNiYzhhYzk5LCAweGE3MTAxODdkLCAweDZlZTg5YzYzLCAweDdiZGIzYmJiLA0KLSAgICAweDA5Y2QyNjc4LCAweGY0NmU1OTE4LCAweDAxZWM5YWI3LCAweGE4ODM0ZjlhLA0KLSAgICAweDY1ZTY5NTZlLCAweDdlYWFmZmU2LCAweDA4MjFiY2NmLCAweGU2ZWYxNWU4LA0KLSAgICAweGQ5YmFlNzliLCAweGNlNGE2ZjM2LCAweGQ0ZWE5ZjA5LCAweGQ2MjliMDdjLA0KLSAgICAweGFmMzFhNGIyLCAweDMxMmEzZjIzLCAweDMwYzZhNTk0LCAweGMwMzVhMjY2LA0KLSAgICAweDM3NzQ0ZWJjLCAweGE2ZmM4MmNhLCAweGIwZTA5MGQwLCAweDE1MzNhN2Q4LA0KLSAgICAweDRhZjEwNDk4LCAweGY3NDFlY2RhLCAweDBlN2ZjZDUwLCAweDJmMTc5MWY2LA0KLSAgICAweDhkNzY0ZGQ2LCAweDRkNDNlZmIwLCAweDU0Y2NhYTRkLCAweGRmZTQ5NjA0LA0KLSAgICAweGUzOWVkMWI1LCAweDFiNGM2YTg4LCAweGI4YzEyYzFmLCAweDdmNDY2NTUxLA0KLSAgICAweDA0OWQ1ZWVhLCAweDVkMDE4YzM1LCAweDczZmE4Nzc0LCAweDJlZmIwYjQxLA0KLSAgICAweDVhYjM2NzFkLCAweDUyOTJkYmQyLCAweDMzZTkxMDU2LCAweDEzNmRkNjQ3LA0KLSAgICAweDhjOWFkNzYxLCAweDdhMzdhMTBjLCAweDhlNTlmODE0LCAweDg5ZWIxMzNjLA0KLSAgICAweGVlY2VhOTI3LCAweDM1Yjc2MWM5LCAweGVkZTExY2U1LCAweDNjN2E0N2IxLA0KLSAgICAweDU5OWNkMmRmLCAweDNmNTVmMjczLCAweDc5MTgxNGNlLCAweGJmNzNjNzM3LA0KLSAgICAweGVhNTNmN2NkLCAweDViNWZmZGFhLCAweDE0ZGYzZDZmLCAweDg2Nzg0NGRiLA0KLSAgICAweDgxY2FhZmYzLCAweDNlYjk2OGM0LCAweDJjMzgyNDM0LCAweDVmYzJhMzQwLA0KLSAgICAweDcyMTYxZGMzLCAweDBjYmNlMjI1LCAweDhiMjgzYzQ5LCAweDQxZmYwZDk1LA0KLSAgICAweDcxMzlhODAxLCAweGRlMDgwY2IzLCAweDljZDhiNGU0LCAweDkwNjQ1NmMxLA0KLSAgICAweDYxN2JjYjg0LCAweDcwZDUzMmI2LCAweDc0NDg2YzVjLCAweDQyZDBiODU3LA0KLX07DQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBEMlsyNTZdID0gew0KLSAgICAweGE3NTA1MWY0LCAweDY1NTM3ZTQxLCAweGE0YzMxYTE3LCAweDVlOTYzYTI3LA0KLSAgICAweDZiY2IzYmFiLCAweDQ1ZjExZjlkLCAweDU4YWJhY2ZhLCAweDAzOTM0YmUzLA0KLSAgICAweGZhNTUyMDMwLCAweDZkZjZhZDc2LCAweDc2OTE4OGNjLCAweDRjMjVmNTAyLA0KLSAgICAweGQ3ZmM0ZmU1LCAweGNiZDdjNTJhLCAweDQ0ODAyNjM1LCAweGEzOGZiNTYyLA0KLSAgICAweDVhNDlkZWIxLCAweDFiNjcyNWJhLCAweDBlOTg0NWVhLCAweGMwZTE1ZGZlLA0KLSAgICAweDc1MDJjMzJmLCAweGYwMTI4MTRjLCAweDk3YTM4ZDQ2LCAweGY5YzY2YmQzLA0KLSAgICAweDVmZTcwMzhmLCAweDljOTUxNTkyLCAweDdhZWJiZjZkLCAweDU5ZGE5NTUyLA0KLSAgICAweDgzMmRkNGJlLCAweDIxZDM1ODc0LCAweDY5Mjk0OWUwLCAweGM4NDQ4ZWM5LA0KLSAgICAweDg5NmE3NWMyLCAweDc5NzhmNDhlLCAweDNlNmI5OTU4LCAweDcxZGQyN2I5LA0KLSAgICAweDRmYjZiZWUxLCAweGFkMTdmMDg4LCAweGFjNjZjOTIwLCAweDNhYjQ3ZGNlLA0KLSAgICAweDRhMTg2M2RmLCAweDMxODJlNTFhLCAweDMzNjA5NzUxLCAweDdmNDU2MjUzLA0KLSAgICAweDc3ZTBiMTY0LCAweGFlODRiYjZiLCAweGEwMWNmZTgxLCAweDJiOTRmOTA4LA0KLSAgICAweDY4NTg3MDQ4LCAweGZkMTk4ZjQ1LCAweDZjODc5NGRlLCAweGY4Yjc1MjdiLA0KLSAgICAweGQzMjNhYjczLCAweDAyZTI3MjRiLCAweDhmNTdlMzFmLCAweGFiMmE2NjU1LA0KLSAgICAweDI4MDdiMmViLCAweGMyMDMyZmI1LCAweDdiOWE4NmM1LCAweDA4YTVkMzM3LA0KLSAgICAweDg3ZjIzMDI4LCAweGE1YjIyM2JmLCAweDZhYmEwMjAzLCAweDgyNWNlZDE2LA0KLSAgICAweDFjMmI4YWNmLCAweGI0OTJhNzc5LCAweGYyZjBmMzA3LCAweGUyYTE0ZTY5LA0KLSAgICAweGY0Y2Q2NWRhLCAweGJlZDUwNjA1LCAweDYyMWZkMTM0LCAweGZlOGFjNGE2LA0KLSAgICAweDUzOWQzNDJlLCAweDU1YTBhMmYzLCAweGUxMzIwNThhLCAweGViNzVhNGY2LA0KLSAgICAweGVjMzkwYjgzLCAweGVmYWE0MDYwLCAweDlmMDY1ZTcxLCAweDEwNTFiZDZlLA0KLSAgICAweDhhZjkzZTIxLCAweDA2M2Q5NmRkLCAweDA1YWVkZDNlLCAweGJkNDY0ZGU2LA0KLSAgICAweDhkYjU5MTU0LCAweDVkMDU3MWM0LCAweGQ0NmYwNDA2LCAweDE1ZmY2MDUwLA0KLSAgICAweGZiMjQxOTk4LCAweGU5OTdkNmJkLCAweDQzY2M4OTQwLCAweDllNzc2N2Q5LA0KLSAgICAweDQyYmRiMGU4LCAweDhiODgwNzg5LCAweDViMzhlNzE5LCAweGVlZGI3OWM4LA0KLSAgICAweDBhNDdhMTdjLCAweDBmZTk3YzQyLCAweDFlYzlmODg0LCAweDAwMDAwMDAwLA0KLSAgICAweDg2ODMwOTgwLCAweGVkNDgzMjJiLCAweDcwYWMxZTExLCAweDcyNGU2YzVhLA0KLSAgICAweGZmZmJmZDBlLCAweDM4NTYwZjg1LCAweGQ1MWUzZGFlLCAweDM5MjczNjJkLA0KLSAgICAweGQ5NjQwYTBmLCAweGE2MjE2ODVjLCAweDU0ZDE5YjViLCAweDJlM2EyNDM2LA0KLSAgICAweDY3YjEwYzBhLCAweGU3MGY5MzU3LCAweDk2ZDJiNGVlLCAweDkxOWUxYjliLA0KLSAgICAweGM1NGY4MGMwLCAweDIwYTI2MWRjLCAweDRiNjk1YTc3LCAweDFhMTYxYzEyLA0KLSAgICAweGJhMGFlMjkzLCAweDJhZTVjMGEwLCAweGUwNDMzYzIyLCAweDE3MWQxMjFiLA0KLSAgICAweDBkMGIwZTA5LCAweGM3YWRmMjhiLCAweGE4YjkyZGI2LCAweGE5YzgxNDFlLA0KLSAgICAweDE5ODU1N2YxLCAweDA3NGNhZjc1LCAweGRkYmJlZTk5LCAweDYwZmRhMzdmLA0KLSAgICAweDI2OWZmNzAxLCAweGY1YmM1YzcyLCAweDNiYzU0NDY2LCAweDdlMzQ1YmZiLA0KLSAgICAweDI5NzY4YjQzLCAweGM2ZGNjYjIzLCAweGZjNjhiNmVkLCAweGYxNjNiOGU0LA0KLSAgICAweGRjY2FkNzMxLCAweDg1MTA0MjYzLCAweDIyNDAxMzk3LCAweDExMjA4NGM2LA0KLSAgICAweDI0N2Q4NTRhLCAweDNkZjhkMmJiLCAweDMyMTFhZWY5LCAweGExNmRjNzI5LA0KLSAgICAweDJmNGIxZDllLCAweDMwZjNkY2IyLCAweDUyZWMwZDg2LCAweGUzZDA3N2MxLA0KLSAgICAweDE2NmMyYmIzLCAweGI5OTlhOTcwLCAweDQ4ZmExMTk0LCAweDY0MjI0N2U5LA0KLSAgICAweDhjYzRhOGZjLCAweDNmMWFhMGYwLCAweDJjZDg1NjdkLCAweDkwZWYyMjMzLA0KLSAgICAweDRlYzc4NzQ5LCAweGQxYzFkOTM4LCAweGEyZmU4Y2NhLCAweDBiMzY5OGQ0LA0KLSAgICAweDgxY2ZhNmY1LCAweGRlMjhhNTdhLCAweDhlMjZkYWI3LCAweGJmYTQzZmFkLA0KLSAgICAweDlkZTQyYzNhLCAweDkyMGQ1MDc4LCAweGNjOWI2YTVmLCAweDQ2NjI1NDdlLA0KLSAgICAweDEzYzJmNjhkLCAweGI4ZTg5MGQ4LCAweGY3NWUyZTM5LCAweGFmZjU4MmMzLA0KLSAgICAweDgwYmU5ZjVkLCAweDkzN2M2OWQwLCAweDJkYTk2ZmQ1LCAweDEyYjNjZjI1LA0KLSAgICAweDk5M2JjOGFjLCAweDdkYTcxMDE4LCAweDYzNmVlODljLCAweGJiN2JkYjNiLA0KLSAgICAweDc4MDljZDI2LCAweDE4ZjQ2ZTU5LCAweGI3MDFlYzlhLCAweDlhYTg4MzRmLA0KLSAgICAweDZlNjVlNjk1LCAweGU2N2VhYWZmLCAweGNmMDgyMWJjLCAweGU4ZTZlZjE1LA0KLSAgICAweDliZDliYWU3LCAweDM2Y2U0YTZmLCAweDA5ZDRlYTlmLCAweDdjZDYyOWIwLA0KLSAgICAweGIyYWYzMWE0LCAweDIzMzEyYTNmLCAweDk0MzBjNmE1LCAweDY2YzAzNWEyLA0KLSAgICAweGJjMzc3NDRlLCAweGNhYTZmYzgyLCAweGQwYjBlMDkwLCAweGQ4MTUzM2E3LA0KLSAgICAweDk4NGFmMTA0LCAweGRhZjc0MWVjLCAweDUwMGU3ZmNkLCAweGY2MmYxNzkxLA0KLSAgICAweGQ2OGQ3NjRkLCAweGIwNGQ0M2VmLCAweDRkNTRjY2FhLCAweDA0ZGZlNDk2LA0KLSAgICAweGI1ZTM5ZWQxLCAweDg4MWI0YzZhLCAweDFmYjhjMTJjLCAweDUxN2Y0NjY1LA0KLSAgICAweGVhMDQ5ZDVlLCAweDM1NWQwMThjLCAweDc0NzNmYTg3LCAweDQxMmVmYjBiLA0KLSAgICAweDFkNWFiMzY3LCAweGQyNTI5MmRiLCAweDU2MzNlOTEwLCAweDQ3MTM2ZGQ2LA0KLSAgICAweDYxOGM5YWQ3LCAweDBjN2EzN2ExLCAweDE0OGU1OWY4LCAweDNjODllYjEzLA0KLSAgICAweDI3ZWVjZWE5LCAweGM5MzViNzYxLCAweGU1ZWRlMTFjLCAweGIxM2M3YTQ3LA0KLSAgICAweGRmNTk5Y2QyLCAweDczM2Y1NWYyLCAweGNlNzkxODE0LCAweDM3YmY3M2M3LA0KLSAgICAweGNkZWE1M2Y3LCAweGFhNWI1ZmZkLCAweDZmMTRkZjNkLCAweGRiODY3ODQ0LA0KLSAgICAweGYzODFjYWFmLCAweGM0M2ViOTY4LCAweDM0MmMzODI0LCAweDQwNWZjMmEzLA0KLSAgICAweGMzNzIxNjFkLCAweDI1MGNiY2UyLCAweDQ5OGIyODNjLCAweDk1NDFmZjBkLA0KLSAgICAweDAxNzEzOWE4LCAweGIzZGUwODBjLCAweGU0OWNkOGI0LCAweGMxOTA2NDU2LA0KLSAgICAweDg0NjE3YmNiLCAweGI2NzBkNTMyLCAweDVjNzQ0ODZjLCAweDU3NDJkMGI4LA0KLX07DQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBEM1syNTZdID0gew0KLSAgICAweGY0YTc1MDUxLCAweDQxNjU1MzdlLCAweDE3YTRjMzFhLCAweDI3NWU5NjNhLA0KLSAgICAweGFiNmJjYjNiLCAweDlkNDVmMTFmLCAweGZhNThhYmFjLCAweGUzMDM5MzRiLA0KLSAgICAweDMwZmE1NTIwLCAweDc2NmRmNmFkLCAweGNjNzY5MTg4LCAweDAyNGMyNWY1LA0KLSAgICAweGU1ZDdmYzRmLCAweDJhY2JkN2M1LCAweDM1NDQ4MDI2LCAweDYyYTM4ZmI1LA0KLSAgICAweGIxNWE0OWRlLCAweGJhMWI2NzI1LCAweGVhMGU5ODQ1LCAweGZlYzBlMTVkLA0KLSAgICAweDJmNzUwMmMzLCAweDRjZjAxMjgxLCAweDQ2OTdhMzhkLCAweGQzZjljNjZiLA0KLSAgICAweDhmNWZlNzAzLCAweDkyOWM5NTE1LCAweDZkN2FlYmJmLCAweDUyNTlkYTk1LA0KLSAgICAweGJlODMyZGQ0LCAweDc0MjFkMzU4LCAweGUwNjkyOTQ5LCAweGM5Yzg0NDhlLA0KLSAgICAweGMyODk2YTc1LCAweDhlNzk3OGY0LCAweDU4M2U2Yjk5LCAweGI5NzFkZDI3LA0KLSAgICAweGUxNGZiNmJlLCAweDg4YWQxN2YwLCAweDIwYWM2NmM5LCAweGNlM2FiNDdkLA0KLSAgICAweGRmNGExODYzLCAweDFhMzE4MmU1LCAweDUxMzM2MDk3LCAweDUzN2Y0NTYyLA0KLSAgICAweDY0NzdlMGIxLCAweDZiYWU4NGJiLCAweDgxYTAxY2ZlLCAweDA4MmI5NGY5LA0KLSAgICAweDQ4Njg1ODcwLCAweDQ1ZmQxOThmLCAweGRlNmM4Nzk0LCAweDdiZjhiNzUyLA0KLSAgICAweDczZDMyM2FiLCAweDRiMDJlMjcyLCAweDFmOGY1N2UzLCAweDU1YWIyYTY2LA0KLSAgICAweGViMjgwN2IyLCAweGI1YzIwMzJmLCAweGM1N2I5YTg2LCAweDM3MDhhNWQzLA0KLSAgICAweDI4ODdmMjMwLCAweGJmYTViMjIzLCAweDAzNmFiYTAyLCAweDE2ODI1Y2VkLA0KLSAgICAweGNmMWMyYjhhLCAweDc5YjQ5MmE3LCAweDA3ZjJmMGYzLCAweDY5ZTJhMTRlLA0KLSAgICAweGRhZjRjZDY1LCAweDA1YmVkNTA2LCAweDM0NjIxZmQxLCAweGE2ZmU4YWM0LA0KLSAgICAweDJlNTM5ZDM0LCAweGYzNTVhMGEyLCAweDhhZTEzMjA1LCAweGY2ZWI3NWE0LA0KLSAgICAweDgzZWMzOTBiLCAweDYwZWZhYTQwLCAweDcxOWYwNjVlLCAweDZlMTA1MWJkLA0KLSAgICAweDIxOGFmOTNlLCAweGRkMDYzZDk2LCAweDNlMDVhZWRkLCAweGU2YmQ0NjRkLA0KLSAgICAweDU0OGRiNTkxLCAweGM0NWQwNTcxLCAweDA2ZDQ2ZjA0LCAweDUwMTVmZjYwLA0KLSAgICAweDk4ZmIyNDE5LCAweGJkZTk5N2Q2LCAweDQwNDNjYzg5LCAweGQ5OWU3NzY3LA0KLSAgICAweGU4NDJiZGIwLCAweDg5OGI4ODA3LCAweDE5NWIzOGU3LCAweGM4ZWVkYjc5LA0KLSAgICAweDdjMGE0N2ExLCAweDQyMGZlOTdjLCAweDg0MWVjOWY4LCAweDAwMDAwMDAwLA0KLSAgICAweDgwODY4MzA5LCAweDJiZWQ0ODMyLCAweDExNzBhYzFlLCAweDVhNzI0ZTZjLA0KLSAgICAweDBlZmZmYmZkLCAweDg1Mzg1NjBmLCAweGFlZDUxZTNkLCAweDJkMzkyNzM2LA0KLSAgICAweDBmZDk2NDBhLCAweDVjYTYyMTY4LCAweDViNTRkMTliLCAweDM2MmUzYTI0LA0KLSAgICAweDBhNjdiMTBjLCAweDU3ZTcwZjkzLCAweGVlOTZkMmI0LCAweDliOTE5ZTFiLA0KLSAgICAweGMwYzU0ZjgwLCAweGRjMjBhMjYxLCAweDc3NGI2OTVhLCAweDEyMWExNjFjLA0KLSAgICAweDkzYmEwYWUyLCAweGEwMmFlNWMwLCAweDIyZTA0MzNjLCAweDFiMTcxZDEyLA0KLSAgICAweDA5MGQwYjBlLCAweDhiYzdhZGYyLCAweGI2YThiOTJkLCAweDFlYTljODE0LA0KLSAgICAweGYxMTk4NTU3LCAweDc1MDc0Y2FmLCAweDk5ZGRiYmVlLCAweDdmNjBmZGEzLA0KLSAgICAweDAxMjY5ZmY3LCAweDcyZjViYzVjLCAweDY2M2JjNTQ0LCAweGZiN2UzNDViLA0KLSAgICAweDQzMjk3NjhiLCAweDIzYzZkY2NiLCAweGVkZmM2OGI2LCAweGU0ZjE2M2I4LA0KLSAgICAweDMxZGNjYWQ3LCAweDYzODUxMDQyLCAweDk3MjI0MDEzLCAweGM2MTEyMDg0LA0KLSAgICAweDRhMjQ3ZDg1LCAweGJiM2RmOGQyLCAweGY5MzIxMWFlLCAweDI5YTE2ZGM3LA0KLSAgICAweDllMmY0YjFkLCAweGIyMzBmM2RjLCAweDg2NTJlYzBkLCAweGMxZTNkMDc3LA0KLSAgICAweGIzMTY2YzJiLCAweDcwYjk5OWE5LCAweDk0NDhmYTExLCAweGU5NjQyMjQ3LA0KLSAgICAweGZjOGNjNGE4LCAweGYwM2YxYWEwLCAweDdkMmNkODU2LCAweDMzOTBlZjIyLA0KLSAgICAweDQ5NGVjNzg3LCAweDM4ZDFjMWQ5LCAweGNhYTJmZThjLCAweGQ0MGIzNjk4LA0KLSAgICAweGY1ODFjZmE2LCAweDdhZGUyOGE1LCAweGI3OGUyNmRhLCAweGFkYmZhNDNmLA0KLSAgICAweDNhOWRlNDJjLCAweDc4OTIwZDUwLCAweDVmY2M5YjZhLCAweDdlNDY2MjU0LA0KLSAgICAweDhkMTNjMmY2LCAweGQ4YjhlODkwLCAweDM5Zjc1ZTJlLCAweGMzYWZmNTgyLA0KLSAgICAweDVkODBiZTlmLCAweGQwOTM3YzY5LCAweGQ1MmRhOTZmLCAweDI1MTJiM2NmLA0KLSAgICAweGFjOTkzYmM4LCAweDE4N2RhNzEwLCAweDljNjM2ZWU4LCAweDNiYmI3YmRiLA0KLSAgICAweDI2NzgwOWNkLCAweDU5MThmNDZlLCAweDlhYjcwMWVjLCAweDRmOWFhODgzLA0KLSAgICAweDk1NmU2NWU2LCAweGZmZTY3ZWFhLCAweGJjY2YwODIxLCAweDE1ZThlNmVmLA0KLSAgICAweGU3OWJkOWJhLCAweDZmMzZjZTRhLCAweDlmMDlkNGVhLCAweGIwN2NkNjI5LA0KLSAgICAweGE0YjJhZjMxLCAweDNmMjMzMTJhLCAweGE1OTQzMGM2LCAweGEyNjZjMDM1LA0KLSAgICAweDRlYmMzNzc0LCAweDgyY2FhNmZjLCAweDkwZDBiMGUwLCAweGE3ZDgxNTMzLA0KLSAgICAweDA0OTg0YWYxLCAweGVjZGFmNzQxLCAweGNkNTAwZTdmLCAweDkxZjYyZjE3LA0KLSAgICAweDRkZDY4ZDc2LCAweGVmYjA0ZDQzLCAweGFhNGQ1NGNjLCAweDk2MDRkZmU0LA0KLSAgICAweGQxYjVlMzllLCAweDZhODgxYjRjLCAweDJjMWZiOGMxLCAweDY1NTE3ZjQ2LA0KLSAgICAweDVlZWEwNDlkLCAweDhjMzU1ZDAxLCAweDg3NzQ3M2ZhLCAweDBiNDEyZWZiLA0KLSAgICAweDY3MWQ1YWIzLCAweGRiZDI1MjkyLCAweDEwNTYzM2U5LCAweGQ2NDcxMzZkLA0KLSAgICAweGQ3NjE4YzlhLCAweGExMGM3YTM3LCAweGY4MTQ4ZTU5LCAweDEzM2M4OWViLA0KLSAgICAweGE5MjdlZWNlLCAweDYxYzkzNWI3LCAweDFjZTVlZGUxLCAweDQ3YjEzYzdhLA0KLSAgICAweGQyZGY1OTljLCAweGYyNzMzZjU1LCAweDE0Y2U3OTE4LCAweGM3MzdiZjczLA0KLSAgICAweGY3Y2RlYTUzLCAweGZkYWE1YjVmLCAweDNkNmYxNGRmLCAweDQ0ZGI4Njc4LA0KLSAgICAweGFmZjM4MWNhLCAweDY4YzQzZWI5LCAweDI0MzQyYzM4LCAweGEzNDA1ZmMyLA0KLSAgICAweDFkYzM3MjE2LCAweGUyMjUwY2JjLCAweDNjNDk4YjI4LCAweDBkOTU0MWZmLA0KLSAgICAweGE4MDE3MTM5LCAweDBjYjNkZTA4LCAweGI0ZTQ5Y2Q4LCAweDU2YzE5MDY0LA0KLSAgICAweGNiODQ2MTdiLCAweDMyYjY3MGQ1LCAweDZjNWM3NDQ4LCAweGI4NTc0MmQwLA0KLX07DQotI2RlZmluZSBBRERfUk9VTkRfS0VZXzQgKGJsb2NrWzBdXj0qa2V5c2NoZWQrKywgYmxvY2tbMV1ePSprZXlzY2hlZCsrLCBcDQotICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrWzJdXj0qa2V5c2NoZWQrKywgYmxvY2tbM11ePSprZXlzY2hlZCsrKQ0KLSNkZWZpbmUgQUREX1JPVU5EX0tFWV82IChibG9ja1swXV49KmtleXNjaGVkKyssIGJsb2NrWzFdXj0qa2V5c2NoZWQrKywgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja1syXV49KmtleXNjaGVkKyssIGJsb2NrWzNdXj0qa2V5c2NoZWQrKywgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja1s0XV49KmtleXNjaGVkKyssIGJsb2NrWzVdXj0qa2V5c2NoZWQrKykNCi0jZGVmaW5lIEFERF9ST1VORF9LRVlfOCAoYmxvY2tbMF1ePSprZXlzY2hlZCsrLCBibG9ja1sxXV49KmtleXNjaGVkKyssIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tbMl1ePSprZXlzY2hlZCsrLCBibG9ja1szXV49KmtleXNjaGVkKyssIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tbNF1ePSprZXlzY2hlZCsrLCBibG9ja1s1XV49KmtleXNjaGVkKyssIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tbNl1ePSprZXlzY2hlZCsrLCBibG9ja1s3XV49KmtleXNjaGVkKyspDQotI2RlZmluZSBNT1ZFV09SRChpKSAoIGJsb2NrW2ldID0gbmV3c3RhdGVbaV0gKQ0KLSN1bmRlZiBNQUtFV09SRA0KLSNkZWZpbmUgTUFLRVdPUkQoaSkgKCBuZXdzdGF0ZVtpXSA9IChFMFsoYmxvY2tbaV0gPj4gMjQpICYgMHhGRl0gXiBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUxWyhibG9ja1soaStDMSklTmJdID4+IDE2KSAmIDB4RkZdIF4gXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFMlsoYmxvY2tbKGkrQzIpJU5iXSA+PiA4KSAmIDB4RkZdIF4gXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFM1tibG9ja1soaStDMyklTmJdICYgMHhGRl0pICkNCi0jZGVmaW5lIExBU1RXT1JEKGkpICggbmV3c3RhdGVbaV0gPSAoU2JveFsoYmxvY2tbaV0gPj4gMjQpICYgMHhGRl0gPDwgMjQpIHwgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTYm94WyhibG9ja1soaStDMSklTmJdID4+IDE2KSAmIDB4RkZdIDw8IDE2KSB8IFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU2JveFsoYmxvY2tbKGkrQzIpJU5iXSA+PiAgOCkgJiAweEZGXSA8PCAgOCkgfCBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNib3hbKGJsb2NrWyhpK0MzKSVOYl0gICAgICApICYgMHhGRl0gICAgICApICkNCi1zdGF0aWMgdm9pZCBhZXNfZW5jcnlwdF9uYl80KEFFU0NvbnRleHQgKiBjdHgsIHVuc2lnbmVkIGludCAqIGJsb2NrKQ0KLXsNCi0gICAgaW50IGk7DQotICAgIHN0YXRpYyBjb25zdCBpbnQgQzEgPSAxLCBDMiA9IDIsIEMzID0gMywgTmIgPSA0Ow0KLSAgICB1bnNpZ25lZCBpbnQgKmtleXNjaGVkID0gY3R4LT5rZXlzY2hlZDsNCi0gICAgdW5zaWduZWQgaW50IG5ld3N0YXRlWzRdOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgY3R4LT5OciAtIDE7IGkrKykgew0KLSAgICAgICAgQUREX1JPVU5EX0tFWV80Ow0KLSAgICAgICAgTUFLRVdPUkQoMCk7DQotICAgICAgICBNQUtFV09SRCgxKTsNCi0gICAgICAgIE1BS0VXT1JEKDIpOw0KLSAgICAgICAgTUFLRVdPUkQoMyk7DQotICAgICAgICBNT1ZFV09SRCgwKTsNCi0gICAgICAgIE1PVkVXT1JEKDEpOw0KLSAgICAgICAgTU9WRVdPUkQoMik7DQotICAgICAgICBNT1ZFV09SRCgzKTsNCi0gICAgfQ0KLSAgICBBRERfUk9VTkRfS0VZXzQ7DQotICAgIExBU1RXT1JEKDApOw0KLSAgICBMQVNUV09SRCgxKTsNCi0gICAgTEFTVFdPUkQoMik7DQotICAgIExBU1RXT1JEKDMpOw0KLSAgICBNT1ZFV09SRCgwKTsNCi0gICAgTU9WRVdPUkQoMSk7DQotICAgIE1PVkVXT1JEKDIpOw0KLSAgICBNT1ZFV09SRCgzKTsNCi0gICAgQUREX1JPVU5EX0tFWV80Ow0KLX0NCi1zdGF0aWMgdm9pZCBhZXNfZW5jcnlwdF9uYl82KEFFU0NvbnRleHQgKiBjdHgsIHVuc2lnbmVkIGludCAqIGJsb2NrKQ0KLXsNCi0gICAgaW50IGk7DQotICAgIHN0YXRpYyBjb25zdCBpbnQgQzEgPSAxLCBDMiA9IDIsIEMzID0gMywgTmIgPSA2Ow0KLSAgICB1bnNpZ25lZCBpbnQgKmtleXNjaGVkID0gY3R4LT5rZXlzY2hlZDsNCi0gICAgdW5zaWduZWQgaW50IG5ld3N0YXRlWzZdOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgY3R4LT5OciAtIDE7IGkrKykgew0KLSAgICAgICAgQUREX1JPVU5EX0tFWV82Ow0KLSAgICAgICAgTUFLRVdPUkQoMCk7DQotICAgICAgICBNQUtFV09SRCgxKTsNCi0gICAgICAgIE1BS0VXT1JEKDIpOw0KLSAgICAgICAgTUFLRVdPUkQoMyk7DQotICAgICAgICBNQUtFV09SRCg0KTsNCi0gICAgICAgIE1BS0VXT1JEKDUpOw0KLSAgICAgICAgTU9WRVdPUkQoMCk7DQotICAgICAgICBNT1ZFV09SRCgxKTsNCi0gICAgICAgIE1PVkVXT1JEKDIpOw0KLSAgICAgICAgTU9WRVdPUkQoMyk7DQotICAgICAgICBNT1ZFV09SRCg0KTsNCi0gICAgICAgIE1PVkVXT1JEKDUpOw0KLSAgICB9DQotICAgIEFERF9ST1VORF9LRVlfNjsNCi0gICAgTEFTVFdPUkQoMCk7DQotICAgIExBU1RXT1JEKDEpOw0KLSAgICBMQVNUV09SRCgyKTsNCi0gICAgTEFTVFdPUkQoMyk7DQotICAgIExBU1RXT1JEKDQpOw0KLSAgICBMQVNUV09SRCg1KTsNCi0gICAgTU9WRVdPUkQoMCk7DQotICAgIE1PVkVXT1JEKDEpOw0KLSAgICBNT1ZFV09SRCgyKTsNCi0gICAgTU9WRVdPUkQoMyk7DQotICAgIE1PVkVXT1JEKDQpOw0KLSAgICBNT1ZFV09SRCg1KTsNCi0gICAgQUREX1JPVU5EX0tFWV82Ow0KLX0NCi1zdGF0aWMgdm9pZCBhZXNfZW5jcnlwdF9uYl84KEFFU0NvbnRleHQgKiBjdHgsIHVuc2lnbmVkIGludCAqIGJsb2NrKQ0KLXsNCi0gICAgaW50IGk7DQotICAgIHN0YXRpYyBjb25zdCBpbnQgQzEgPSAxLCBDMiA9IDMsIEMzID0gNCwgTmIgPSA4Ow0KLSAgICB1bnNpZ25lZCBpbnQgKmtleXNjaGVkID0gY3R4LT5rZXlzY2hlZDsNCi0gICAgdW5zaWduZWQgaW50IG5ld3N0YXRlWzhdOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgY3R4LT5OciAtIDE7IGkrKykgew0KLSAgICAgICAgQUREX1JPVU5EX0tFWV84Ow0KLSAgICAgICAgTUFLRVdPUkQoMCk7DQotICAgICAgICBNQUtFV09SRCgxKTsNCi0gICAgICAgIE1BS0VXT1JEKDIpOw0KLSAgICAgICAgTUFLRVdPUkQoMyk7DQotICAgICAgICBNQUtFV09SRCg0KTsNCi0gICAgICAgIE1BS0VXT1JEKDUpOw0KLSAgICAgICAgTUFLRVdPUkQoNik7DQotICAgICAgICBNQUtFV09SRCg3KTsNCi0gICAgICAgIE1PVkVXT1JEKDApOw0KLSAgICAgICAgTU9WRVdPUkQoMSk7DQotICAgICAgICBNT1ZFV09SRCgyKTsNCi0gICAgICAgIE1PVkVXT1JEKDMpOw0KLSAgICAgICAgTU9WRVdPUkQoNCk7DQotICAgICAgICBNT1ZFV09SRCg1KTsNCi0gICAgICAgIE1PVkVXT1JEKDYpOw0KLSAgICAgICAgTU9WRVdPUkQoNyk7DQotICAgIH0NCi0gICAgQUREX1JPVU5EX0tFWV84Ow0KLSAgICBMQVNUV09SRCgwKTsNCi0gICAgTEFTVFdPUkQoMSk7DQotICAgIExBU1RXT1JEKDIpOw0KLSAgICBMQVNUV09SRCgzKTsNCi0gICAgTEFTVFdPUkQoNCk7DQotICAgIExBU1RXT1JEKDUpOw0KLSAgICBMQVNUV09SRCg2KTsNCi0gICAgTEFTVFdPUkQoNyk7DQotICAgIE1PVkVXT1JEKDApOw0KLSAgICBNT1ZFV09SRCgxKTsNCi0gICAgTU9WRVdPUkQoMik7DQotICAgIE1PVkVXT1JEKDMpOw0KLSAgICBNT1ZFV09SRCg0KTsNCi0gICAgTU9WRVdPUkQoNSk7DQotICAgIE1PVkVXT1JEKDYpOw0KLSAgICBNT1ZFV09SRCg3KTsNCi0gICAgQUREX1JPVU5EX0tFWV84Ow0KLX0NCi0jdW5kZWYgTUFLRVdPUkQNCi0jdW5kZWYgTEFTVFdPUkQNCi0jZGVmaW5lIE1BS0VXT1JEKGkpICggbmV3c3RhdGVbaV0gPSAoRDBbKGJsb2NrW2ldID4+IDI0KSAmIDB4RkZdIF4gXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEMVsoYmxvY2tbKGkrQzEpJU5iXSA+PiAxNikgJiAweEZGXSBeIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDJbKGJsb2NrWyhpK0MyKSVOYl0gPj4gOCkgJiAweEZGXSBeIFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNbYmxvY2tbKGkrQzMpJU5iXSAmIDB4RkZdKSApDQotI2RlZmluZSBMQVNUV09SRChpKSAobmV3c3RhdGVbaV0gPSAoU2JveGludlsoYmxvY2tbaV0gPj4gMjQpICYgMHhGRl0gPDwgMjQpIHwgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNib3hpbnZbKGJsb2NrWyhpK0MxKSVOYl0gPj4gMTYpICYgMHhGRl0gPDwgMTYpIHwgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNib3hpbnZbKGJsb2NrWyhpK0MyKSVOYl0gPj4gIDgpICYgMHhGRl0gPDwgIDgpIHwgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNib3hpbnZbKGJsb2NrWyhpK0MzKSVOYl0gICAgICApICYgMHhGRl0gICAgICApICkNCi1zdGF0aWMgdm9pZCBhZXNfZGVjcnlwdF9uYl80KEFFU0NvbnRleHQgKiBjdHgsIHVuc2lnbmVkIGludCAqIGJsb2NrKQ0KLXsNCi0gICAgaW50IGk7DQotICAgIHN0YXRpYyBjb25zdCBpbnQgQzEgPSA0IC0gMSwgQzIgPSA0IC0gMiwgQzMgPSA0IC0gMywgTmIgPSA0Ow0KLSAgICB1bnNpZ25lZCBpbnQgKmtleXNjaGVkID0gY3R4LT5pbnZrZXlzY2hlZDsNCi0gICAgdW5zaWduZWQgaW50IG5ld3N0YXRlWzRdOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgY3R4LT5OciAtIDE7IGkrKykgew0KLSAgICAgICAgQUREX1JPVU5EX0tFWV80Ow0KLSAgICAgICAgTUFLRVdPUkQoMCk7DQotICAgICAgICBNQUtFV09SRCgxKTsNCi0gICAgICAgIE1BS0VXT1JEKDIpOw0KLSAgICAgICAgTUFLRVdPUkQoMyk7DQotICAgICAgICBNT1ZFV09SRCgwKTsNCi0gICAgICAgIE1PVkVXT1JEKDEpOw0KLSAgICAgICAgTU9WRVdPUkQoMik7DQotICAgICAgICBNT1ZFV09SRCgzKTsNCi0gICAgfQ0KLSAgICBBRERfUk9VTkRfS0VZXzQ7DQotICAgIExBU1RXT1JEKDApOw0KLSAgICBMQVNUV09SRCgxKTsNCi0gICAgTEFTVFdPUkQoMik7DQotICAgIExBU1RXT1JEKDMpOw0KLSAgICBNT1ZFV09SRCgwKTsNCi0gICAgTU9WRVdPUkQoMSk7DQotICAgIE1PVkVXT1JEKDIpOw0KLSAgICBNT1ZFV09SRCgzKTsNCi0gICAgQUREX1JPVU5EX0tFWV80Ow0KLX0NCi1zdGF0aWMgdm9pZCBhZXNfZGVjcnlwdF9uYl82KEFFU0NvbnRleHQgKiBjdHgsIHVuc2lnbmVkIGludCAqIGJsb2NrKQ0KLXsNCi0gICAgaW50IGk7DQotICAgIHN0YXRpYyBjb25zdCBpbnQgQzEgPSA2IC0gMSwgQzIgPSA2IC0gMiwgQzMgPSA2IC0gMywgTmIgPSA2Ow0KLSAgICB1bnNpZ25lZCBpbnQgKmtleXNjaGVkID0gY3R4LT5pbnZrZXlzY2hlZDsNCi0gICAgdW5zaWduZWQgaW50IG5ld3N0YXRlWzZdOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgY3R4LT5OciAtIDE7IGkrKykgew0KLSAgICAgICAgQUREX1JPVU5EX0tFWV82Ow0KLSAgICAgICAgTUFLRVdPUkQoMCk7DQotICAgICAgICBNQUtFV09SRCgxKTsNCi0gICAgICAgIE1BS0VXT1JEKDIpOw0KLSAgICAgICAgTUFLRVdPUkQoMyk7DQotICAgICAgICBNQUtFV09SRCg0KTsNCi0gICAgICAgIE1BS0VXT1JEKDUpOw0KLSAgICAgICAgTU9WRVdPUkQoMCk7DQotICAgICAgICBNT1ZFV09SRCgxKTsNCi0gICAgICAgIE1PVkVXT1JEKDIpOw0KLSAgICAgICAgTU9WRVdPUkQoMyk7DQotICAgICAgICBNT1ZFV09SRCg0KTsNCi0gICAgICAgIE1PVkVXT1JEKDUpOw0KLSAgICB9DQotICAgIEFERF9ST1VORF9LRVlfNjsNCi0gICAgTEFTVFdPUkQoMCk7DQotICAgIExBU1RXT1JEKDEpOw0KLSAgICBMQVNUV09SRCgyKTsNCi0gICAgTEFTVFdPUkQoMyk7DQotICAgIExBU1RXT1JEKDQpOw0KLSAgICBMQVNUV09SRCg1KTsNCi0gICAgTU9WRVdPUkQoMCk7DQotICAgIE1PVkVXT1JEKDEpOw0KLSAgICBNT1ZFV09SRCgyKTsNCi0gICAgTU9WRVdPUkQoMyk7DQotICAgIE1PVkVXT1JEKDQpOw0KLSAgICBNT1ZFV09SRCg1KTsNCi0gICAgQUREX1JPVU5EX0tFWV82Ow0KLX0NCi1zdGF0aWMgdm9pZCBhZXNfZGVjcnlwdF9uYl84KEFFU0NvbnRleHQgKiBjdHgsIHVuc2lnbmVkIGludCAqIGJsb2NrKQ0KLXsNCi0gICAgaW50IGk7DQotICAgIHN0YXRpYyBjb25zdCBpbnQgQzEgPSA4IC0gMSwgQzIgPSA4IC0gMywgQzMgPSA4IC0gNCwgTmIgPSA4Ow0KLSAgICB1bnNpZ25lZCBpbnQgKmtleXNjaGVkID0gY3R4LT5pbnZrZXlzY2hlZDsNCi0gICAgdW5zaWduZWQgaW50IG5ld3N0YXRlWzhdOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgY3R4LT5OciAtIDE7IGkrKykgew0KLSAgICAgICAgQUREX1JPVU5EX0tFWV84Ow0KLSAgICAgICAgTUFLRVdPUkQoMCk7DQotICAgICAgICBNQUtFV09SRCgxKTsNCi0gICAgICAgIE1BS0VXT1JEKDIpOw0KLSAgICAgICAgTUFLRVdPUkQoMyk7DQotICAgICAgICBNQUtFV09SRCg0KTsNCi0gICAgICAgIE1BS0VXT1JEKDUpOw0KLSAgICAgICAgTUFLRVdPUkQoNik7DQotICAgICAgICBNQUtFV09SRCg3KTsNCi0gICAgICAgIE1PVkVXT1JEKDApOw0KLSAgICAgICAgTU9WRVdPUkQoMSk7DQotICAgICAgICBNT1ZFV09SRCgyKTsNCi0gICAgICAgIE1PVkVXT1JEKDMpOw0KLSAgICAgICAgTU9WRVdPUkQoNCk7DQotICAgICAgICBNT1ZFV09SRCg1KTsNCi0gICAgICAgIE1PVkVXT1JEKDYpOw0KLSAgICAgICAgTU9WRVdPUkQoNyk7DQotICAgIH0NCi0gICAgQUREX1JPVU5EX0tFWV84Ow0KLSAgICBMQVNUV09SRCgwKTsNCi0gICAgTEFTVFdPUkQoMSk7DQotICAgIExBU1RXT1JEKDIpOw0KLSAgICBMQVNUV09SRCgzKTsNCi0gICAgTEFTVFdPUkQoNCk7DQotICAgIExBU1RXT1JEKDUpOw0KLSAgICBMQVNUV09SRCg2KTsNCi0gICAgTEFTVFdPUkQoNyk7DQotICAgIE1PVkVXT1JEKDApOw0KLSAgICBNT1ZFV09SRCgxKTsNCi0gICAgTU9WRVdPUkQoMik7DQotICAgIE1PVkVXT1JEKDMpOw0KLSAgICBNT1ZFV09SRCg0KTsNCi0gICAgTU9WRVdPUkQoNSk7DQotICAgIE1PVkVXT1JEKDYpOw0KLSAgICBNT1ZFV09SRCg3KTsNCi0gICAgQUREX1JPVU5EX0tFWV84Ow0KLX0NCi0jdW5kZWYgTUFLRVdPUkQNCi0jdW5kZWYgTEFTVFdPUkQNCi1zdGF0aWMgdm9pZCBhZXNfc2V0dXAoQUVTQ29udGV4dCAqIGN0eCwgaW50IGJsb2NrbGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4pDQotew0KLSAgICBpbnQgaSwgaiwgTmssIHJjb25zdDsNCi0gICAgQVNTRVJUKGJsb2NrbGVuID09IDE2IHx8IGJsb2NrbGVuID09IDI0IHx8IGJsb2NrbGVuID09IDMyKTsNCi0gICAgQVNTRVJUKGtleWxlbiA9PSAxNiB8fCBrZXlsZW4gPT0gMjQgfHwga2V5bGVuID09IDMyKTsNCi0gICAgTmsgPSBrZXlsZW4gLyA0Ow0KLSAgICBjdHgtPk5iID0gYmxvY2tsZW4gLyA0Ow0KLSAgICBjdHgtPk5yID0gNiArIChjdHgtPk5iID4gTmsgPyBjdHgtPk5iIDogTmspOw0KLSAgICBpZiAoY3R4LT5OYiA9PSA4KSB7DQotICAgICAgICBjdHgtPmVuY3J5cHQgPSBhZXNfZW5jcnlwdF9uYl84LCBjdHgtPmRlY3J5cHQgPSBhZXNfZGVjcnlwdF9uYl84Ow0KLSAgICB9IGVsc2UgaWYgKGN0eC0+TmIgPT0gNikgew0KLSAgICAgICAgY3R4LT5lbmNyeXB0ID0gYWVzX2VuY3J5cHRfbmJfNiwgY3R4LT5kZWNyeXB0ID0gYWVzX2RlY3J5cHRfbmJfNjsNCi0gICAgfSBlbHNlIGlmIChjdHgtPk5iID09IDQpIHsNCi0gICAgICAgIGN0eC0+ZW5jcnlwdCA9IGFlc19lbmNyeXB0X25iXzQsIGN0eC0+ZGVjcnlwdCA9IGFlc19kZWNyeXB0X25iXzQ7DQotICAgIH0NCi0gICAgcmNvbnN0ID0gMTsNCi0gICAgZm9yIChpID0gMDsgaSA8IChjdHgtPk5yICsgMSkgKiBjdHgtPk5iOyBpKyspIHsNCi0gICAgICAgIGlmIChpIDwgTmspIHsNCi0gICAgICAgICAgICBjdHgtPmtleXNjaGVkW2ldID0gR0VUXzMyQklUX01TQl9GSVJTVChrZXkgKyA0ICogaSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHVuc2lnbmVkIGludCB0ZW1wID0gY3R4LT5rZXlzY2hlZFtpIC0gMV07DQotICAgICAgICAgICAgaWYgKGkgJSBOayA9PSAwKSB7DQotICAgICAgICAgICAgICAgIGludCBhLCBiLCBjLCBkOw0KLSAgICAgICAgICAgICAgICBhID0gKHRlbXAgPj4gMTYpICYgMHhGRjsNCi0gICAgICAgICAgICAgICAgYiA9ICh0ZW1wID4+IDgpICYgMHhGRjsNCi0gICAgICAgICAgICAgICAgYyA9ICh0ZW1wID4+IDApICYgMHhGRjsNCi0gICAgICAgICAgICAgICAgZCA9ICh0ZW1wID4+IDI0KSAmIDB4RkY7DQotICAgICAgICAgICAgICAgIHRlbXAgPSBTYm94W2FdIF4gcmNvbnN0Ow0KLSAgICAgICAgICAgICAgICB0ZW1wID0gKHRlbXAgPDwgOCkgfCBTYm94W2JdOw0KLSAgICAgICAgICAgICAgICB0ZW1wID0gKHRlbXAgPDwgOCkgfCBTYm94W2NdOw0KLSAgICAgICAgICAgICAgICB0ZW1wID0gKHRlbXAgPDwgOCkgfCBTYm94W2RdOw0KLSAgICAgICAgICAgICAgICByY29uc3QgPSBtdWxieTIocmNvbnN0KTsNCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGkgJSBOayA9PSA0ICYmIE5rID4gNikgew0KLSAgICAgICAgICAgICAgICBpbnQgYSwgYiwgYywgZDsNCi0gICAgICAgICAgICAgICAgYSA9ICh0ZW1wID4+IDI0KSAmIDB4RkY7DQotICAgICAgICAgICAgICAgIGIgPSAodGVtcCA+PiAxNikgJiAweEZGOw0KLSAgICAgICAgICAgICAgICBjID0gKHRlbXAgPj4gOCkgJiAweEZGOw0KLSAgICAgICAgICAgICAgICBkID0gKHRlbXAgPj4gMCkgJiAweEZGOw0KLSAgICAgICAgICAgICAgICB0ZW1wID0gU2JveFthXTsNCi0gICAgICAgICAgICAgICAgdGVtcCA9ICh0ZW1wIDw8IDgpIHwgU2JveFtiXTsNCi0gICAgICAgICAgICAgICAgdGVtcCA9ICh0ZW1wIDw8IDgpIHwgU2JveFtjXTsNCi0gICAgICAgICAgICAgICAgdGVtcCA9ICh0ZW1wIDw8IDgpIHwgU2JveFtkXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgY3R4LT5rZXlzY2hlZFtpXSA9IGN0eC0+a2V5c2NoZWRbaSAtIE5rXSBeIHRlbXA7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgZm9yIChpID0gMDsgaSA8PSBjdHgtPk5yOyBpKyspIHsNCi0gICAgICAgIGZvciAoaiA9IDA7IGogPCBjdHgtPk5iOyBqKyspIHsNCi0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgdGVtcDsNCi0gICAgICAgICAgICB0ZW1wID0gY3R4LT5rZXlzY2hlZFsoY3R4LT5OciAtIGkpICogY3R4LT5OYiArIGpdOw0KLSAgICAgICAgICAgIGlmIChpICE9IDAgJiYgaSAhPSBjdHgtPk5yKSB7DQotICAgICAgICAgICAgICAgIGludCBhLCBiLCBjLCBkOw0KLSAgICAgICAgICAgICAgICBhID0gKHRlbXAgPj4gMjQpICYgMHhGRjsNCi0gICAgICAgICAgICAgICAgYiA9ICh0ZW1wID4+IDE2KSAmIDB4RkY7DQotICAgICAgICAgICAgICAgIGMgPSAodGVtcCA+PiA4KSAmIDB4RkY7DQotICAgICAgICAgICAgICAgIGQgPSAodGVtcCA+PiAwKSAmIDB4RkY7DQotICAgICAgICAgICAgICAgIHRlbXAgPSBEMFtTYm94W2FdXTsNCi0gICAgICAgICAgICAgICAgdGVtcCBePSBEMVtTYm94W2JdXTsNCi0gICAgICAgICAgICAgICAgdGVtcCBePSBEMltTYm94W2NdXTsNCi0gICAgICAgICAgICAgICAgdGVtcCBePSBEM1tTYm94W2RdXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgY3R4LT5pbnZrZXlzY2hlZFtpICogY3R4LT5OYiArIGpdID0gdGVtcDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1zdGF0aWMgdm9pZCBhZXNfZGVjcnlwdChBRVNDb250ZXh0ICogY3R4LCB1bnNpZ25lZCBpbnQgKiBibG9jaykNCi17DQotICAgIGN0eC0+ZGVjcnlwdChjdHgsIGJsb2NrKTsNCi19DQotc3RhdGljIHZvaWQgYWVzX2RlY3J5cHRfY2JjKHVuc2lnbmVkIGNoYXIgKmRlc3QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgaW50IGxlbiwgQUVTQ29udGV4dCAqIGN0eCkNCi17DQotICAgIHVuc2lnbmVkIGludCBpdls0XSwgeFs0XSwgY3RbNF07DQotICAgIGludCBpOw0KLSAgICBBU1NFUlQoKGxlbiAmIDE1KSA9PSAwKTsNCi0gICAgRlhTWVNfbWVtY3B5MzIoaXYsIGN0eC0+aXYsIHNpemVvZihpdikpOw0KLSAgICB3aGlsZSAobGVuID4gMCkgew0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgew0KLSAgICAgICAgICAgIHhbaV0gPSBjdFtpXSA9IEdFVF8zMkJJVF9NU0JfRklSU1Qoc3JjICsgNCAqIGkpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgYWVzX2RlY3J5cHQoY3R4LCB4KTsNCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsNCi0gICAgICAgICAgICBQVVRfMzJCSVRfTVNCX0ZJUlNUKGRlc3QgKyA0ICogaSwgaXZbaV0gXiB4W2ldKTsNCi0gICAgICAgICAgICBpdltpXSA9IGN0W2ldOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdCArPSAxNjsNCi0gICAgICAgIHNyYyArPSAxNjsNCi0gICAgICAgIGxlbiAtPSAxNjsNCi0gICAgfQ0KLSAgICBGWFNZU19tZW1jcHkzMihjdHgtPml2LCBpdiwgc2l6ZW9mKGl2KSk7DQotfQ0KLXN0YXRpYyB2b2lkIGFlc19lbmNyeXB0KEFFU0NvbnRleHQgKiBjdHgsIHVuc2lnbmVkIGludCAqIGJsb2NrKQ0KLXsNCi0gICAgY3R4LT5lbmNyeXB0KGN0eCwgYmxvY2spOw0KLX0NCi1zdGF0aWMgdm9pZCBhZXNfZW5jcnlwdF9jYmModW5zaWduZWQgY2hhciAqZGVzdCwgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCBpbnQgbGVuLCBBRVNDb250ZXh0ICogY3R4KQ0KLXsNCi0gICAgdW5zaWduZWQgaW50IGl2WzRdOw0KLSAgICBpbnQgaTsNCi0gICAgQVNTRVJUKChsZW4gJiAxNSkgPT0gMCk7DQotICAgIEZYU1lTX21lbWNweTMyKGl2LCBjdHgtPml2LCBzaXplb2YoaXYpKTsNCi0gICAgd2hpbGUgKGxlbiA+IDApIHsNCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsNCi0gICAgICAgICAgICBpdltpXSBePSBHRVRfMzJCSVRfTVNCX0ZJUlNUKHNyYyArIDQgKiBpKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGFlc19lbmNyeXB0KGN0eCwgaXYpOw0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgew0KLSAgICAgICAgICAgIFBVVF8zMkJJVF9NU0JfRklSU1QoZGVzdCArIDQgKiBpLCBpdltpXSk7DQotICAgICAgICB9DQotICAgICAgICBkZXN0ICs9IDE2Ow0KLSAgICAgICAgc3JjICs9IDE2Ow0KLSAgICAgICAgbGVuIC09IDE2Ow0KLSAgICB9DQotICAgIEZYU1lTX21lbWNweTMyKGN0eC0+aXYsIGl2LCBzaXplb2YoaXYpKTsNCi19DQotdm9pZCBDUllQVF9BRVNTZXRLZXkoRlhfTFBWT0lEIGNvbnRleHQsIEZYX0RXT1JEIGJsb2NrbGVuLCBGWF9MUENCWVRFIGtleSwgRlhfRFdPUkQga2V5bGVuLCBGWF9CT09MIGJFbmNyeXB0KQ0KLXsNCi0gICAgYWVzX3NldHVwKChBRVNDb250ZXh0Kiljb250ZXh0LCBibG9ja2xlbiwga2V5LCBrZXlsZW4pOw0KLX0NCi12b2lkIENSWVBUX0FFU1NldElWKEZYX0xQVk9JRCBjb250ZXh0LCBGWF9MUENCWVRFIGl2KQ0KLXsNCi0gICAgaW50IGk7DQotICAgIGZvciAoaSA9IDA7IGkgPCAoKEFFU0NvbnRleHQqKWNvbnRleHQpLT5OYjsgaSsrKSB7DQotICAgICAgICAoKEFFU0NvbnRleHQqKWNvbnRleHQpLT5pdltpXSA9IEdFVF8zMkJJVF9NU0JfRklSU1QoaXYgKyA0ICogaSk7DQotICAgIH0NCi19DQotdm9pZCBDUllQVF9BRVNEZWNyeXB0KEZYX0xQVk9JRCBjb250ZXh0LCBGWF9MUEJZVEUgZGVzdCwgRlhfTFBDQllURSBzcmMsIEZYX0RXT1JEIGxlbikNCi17DQotICAgIGFlc19kZWNyeXB0X2NiYyhkZXN0LCBzcmMsIGxlbiwgKEFFU0NvbnRleHQqKWNvbnRleHQpOw0KLX0NCi12b2lkIENSWVBUX0FFU0VuY3J5cHQoRlhfTFBWT0lEIGNvbnRleHQsIEZYX0xQQllURSBkZXN0LCBGWF9MUENCWVRFIHNyYywgRlhfRFdPUkQgbGVuKQ0KLXsNCi0gICAgYWVzX2VuY3J5cHRfY2JjKGRlc3QsIHNyYywgbGVuLCAoQUVTQ29udGV4dCopY29udGV4dCk7DQotfQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX07DQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfYmFzaWMuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Zkcm0vZnhfY3J5cHQuaCIKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKyNkZWZpbmUgTUFYX05SIDE0CisjZGVmaW5lIE1BWF9OSyA4CisjZGVmaW5lIE1BWF9OQiA4CisjZGVmaW5lIG11bGJ5Mih4KSAoICgoeCYweDdGKSA8PCAxKSBeICh4ICYgMHg4MCA/IDB4MUIgOiAwKSApCisjZGVmaW5lIEdFVF8zMkJJVF9NU0JfRklSU1QoY3ApIFwKKyAgICAoKCh1bnNpZ25lZCBsb25nKSh1bnNpZ25lZCBjaGFyKShjcClbM10pIHwgXAorICAgICAoKHVuc2lnbmVkIGxvbmcpKHVuc2lnbmVkIGNoYXIpKGNwKVsyXSA8PCA4KSB8IFwKKyAgICAgKCh1bnNpZ25lZCBsb25nKSh1bnNpZ25lZCBjaGFyKShjcClbMV0gPDwgMTYpIHwgXAorICAgICAoKHVuc2lnbmVkIGxvbmcpKHVuc2lnbmVkIGNoYXIpKGNwKVswXSA8PCAyNCkpCisjZGVmaW5lIFBVVF8zMkJJVF9NU0JfRklSU1QoY3AsIHZhbHVlKSBkbyB7IFwKKyAgICAgICAgKGNwKVszXSA9ICh2YWx1ZSk7IFwKKyAgICAgICAgKGNwKVsyXSA9ICh2YWx1ZSkgPj4gODsgXAorICAgICAgICAoY3ApWzFdID0gKHZhbHVlKSA+PiAxNjsgXAorICAgICAgICAoY3ApWzBdID0gKHZhbHVlKSA+PiAyNDsgfSB3aGlsZSAoMCkKK3N0cnVjdCBBRVNDb250ZXh0IHsKKyAgICB1bnNpZ25lZCBpbnQga2V5c2NoZWRbKE1BWF9OUiArIDEpICogTUFYX05CXTsKKyAgICB1bnNpZ25lZCBpbnQgaW52a2V5c2NoZWRbKE1BWF9OUiArIDEpICogTUFYX05CXTsKKyAgICB2b2lkICgqZW5jcnlwdCkgKEFFU0NvbnRleHQgKiBjdHgsIHVuc2lnbmVkIGludCAqIGJsb2NrKTsKKyAgICB2b2lkICgqZGVjcnlwdCkgKEFFU0NvbnRleHQgKiBjdHgsIHVuc2lnbmVkIGludCAqIGJsb2NrKTsKKyAgICB1bnNpZ25lZCBpbnQgaXZbTUFYX05CXTsKKyAgICBpbnQgTmIsIE5yOworfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFNib3hbMjU2XSA9IHsKKyAgICAweDYzLCAweDdjLCAweDc3LCAweDdiLCAweGYyLCAweDZiLCAweDZmLCAweGM1LAorICAgIDB4MzAsIDB4MDEsIDB4NjcsIDB4MmIsIDB4ZmUsIDB4ZDcsIDB4YWIsIDB4NzYsCisgICAgMHhjYSwgMHg4MiwgMHhjOSwgMHg3ZCwgMHhmYSwgMHg1OSwgMHg0NywgMHhmMCwKKyAgICAweGFkLCAweGQ0LCAweGEyLCAweGFmLCAweDljLCAweGE0LCAweDcyLCAweGMwLAorICAgIDB4YjcsIDB4ZmQsIDB4OTMsIDB4MjYsIDB4MzYsIDB4M2YsIDB4ZjcsIDB4Y2MsCisgICAgMHgzNCwgMHhhNSwgMHhlNSwgMHhmMSwgMHg3MSwgMHhkOCwgMHgzMSwgMHgxNSwKKyAgICAweDA0LCAweGM3LCAweDIzLCAweGMzLCAweDE4LCAweDk2LCAweDA1LCAweDlhLAorICAgIDB4MDcsIDB4MTIsIDB4ODAsIDB4ZTIsIDB4ZWIsIDB4MjcsIDB4YjIsIDB4NzUsCisgICAgMHgwOSwgMHg4MywgMHgyYywgMHgxYSwgMHgxYiwgMHg2ZSwgMHg1YSwgMHhhMCwKKyAgICAweDUyLCAweDNiLCAweGQ2LCAweGIzLCAweDI5LCAweGUzLCAweDJmLCAweDg0LAorICAgIDB4NTMsIDB4ZDEsIDB4MDAsIDB4ZWQsIDB4MjAsIDB4ZmMsIDB4YjEsIDB4NWIsCisgICAgMHg2YSwgMHhjYiwgMHhiZSwgMHgzOSwgMHg0YSwgMHg0YywgMHg1OCwgMHhjZiwKKyAgICAweGQwLCAweGVmLCAweGFhLCAweGZiLCAweDQzLCAweDRkLCAweDMzLCAweDg1LAorICAgIDB4NDUsIDB4ZjksIDB4MDIsIDB4N2YsIDB4NTAsIDB4M2MsIDB4OWYsIDB4YTgsCisgICAgMHg1MSwgMHhhMywgMHg0MCwgMHg4ZiwgMHg5MiwgMHg5ZCwgMHgzOCwgMHhmNSwKKyAgICAweGJjLCAweGI2LCAweGRhLCAweDIxLCAweDEwLCAweGZmLCAweGYzLCAweGQyLAorICAgIDB4Y2QsIDB4MGMsIDB4MTMsIDB4ZWMsIDB4NWYsIDB4OTcsIDB4NDQsIDB4MTcsCisgICAgMHhjNCwgMHhhNywgMHg3ZSwgMHgzZCwgMHg2NCwgMHg1ZCwgMHgxOSwgMHg3MywKKyAgICAweDYwLCAweDgxLCAweDRmLCAweGRjLCAweDIyLCAweDJhLCAweDkwLCAweDg4LAorICAgIDB4NDYsIDB4ZWUsIDB4YjgsIDB4MTQsIDB4ZGUsIDB4NWUsIDB4MGIsIDB4ZGIsCisgICAgMHhlMCwgMHgzMiwgMHgzYSwgMHgwYSwgMHg0OSwgMHgwNiwgMHgyNCwgMHg1YywKKyAgICAweGMyLCAweGQzLCAweGFjLCAweDYyLCAweDkxLCAweDk1LCAweGU0LCAweDc5LAorICAgIDB4ZTcsIDB4YzgsIDB4MzcsIDB4NmQsIDB4OGQsIDB4ZDUsIDB4NGUsIDB4YTksCisgICAgMHg2YywgMHg1NiwgMHhmNCwgMHhlYSwgMHg2NSwgMHg3YSwgMHhhZSwgMHgwOCwKKyAgICAweGJhLCAweDc4LCAweDI1LCAweDJlLCAweDFjLCAweGE2LCAweGI0LCAweGM2LAorICAgIDB4ZTgsIDB4ZGQsIDB4NzQsIDB4MWYsIDB4NGIsIDB4YmQsIDB4OGIsIDB4OGEsCisgICAgMHg3MCwgMHgzZSwgMHhiNSwgMHg2NiwgMHg0OCwgMHgwMywgMHhmNiwgMHgwZSwKKyAgICAweDYxLCAweDM1LCAweDU3LCAweGI5LCAweDg2LCAweGMxLCAweDFkLCAweDllLAorICAgIDB4ZTEsIDB4ZjgsIDB4OTgsIDB4MTEsIDB4NjksIDB4ZDksIDB4OGUsIDB4OTQsCisgICAgMHg5YiwgMHgxZSwgMHg4NywgMHhlOSwgMHhjZSwgMHg1NSwgMHgyOCwgMHhkZiwKKyAgICAweDhjLCAweGExLCAweDg5LCAweDBkLCAweGJmLCAweGU2LCAweDQyLCAweDY4LAorICAgIDB4NDEsIDB4OTksIDB4MmQsIDB4MGYsIDB4YjAsIDB4NTQsIDB4YmIsIDB4MTYKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBTYm94aW52WzI1Nl0gPSB7CisgICAgMHg1MiwgMHgwOSwgMHg2YSwgMHhkNSwgMHgzMCwgMHgzNiwgMHhhNSwgMHgzOCwKKyAgICAweGJmLCAweDQwLCAweGEzLCAweDllLCAweDgxLCAweGYzLCAweGQ3LCAweGZiLAorICAgIDB4N2MsIDB4ZTMsIDB4MzksIDB4ODIsIDB4OWIsIDB4MmYsIDB4ZmYsIDB4ODcsCisgICAgMHgzNCwgMHg4ZSwgMHg0MywgMHg0NCwgMHhjNCwgMHhkZSwgMHhlOSwgMHhjYiwKKyAgICAweDU0LCAweDdiLCAweDk0LCAweDMyLCAweGE2LCAweGMyLCAweDIzLCAweDNkLAorICAgIDB4ZWUsIDB4NGMsIDB4OTUsIDB4MGIsIDB4NDIsIDB4ZmEsIDB4YzMsIDB4NGUsCisgICAgMHgwOCwgMHgyZSwgMHhhMSwgMHg2NiwgMHgyOCwgMHhkOSwgMHgyNCwgMHhiMiwKKyAgICAweDc2LCAweDViLCAweGEyLCAweDQ5LCAweDZkLCAweDhiLCAweGQxLCAweDI1LAorICAgIDB4NzIsIDB4ZjgsIDB4ZjYsIDB4NjQsIDB4ODYsIDB4NjgsIDB4OTgsIDB4MTYsCisgICAgMHhkNCwgMHhhNCwgMHg1YywgMHhjYywgMHg1ZCwgMHg2NSwgMHhiNiwgMHg5MiwKKyAgICAweDZjLCAweDcwLCAweDQ4LCAweDUwLCAweGZkLCAweGVkLCAweGI5LCAweGRhLAorICAgIDB4NWUsIDB4MTUsIDB4NDYsIDB4NTcsIDB4YTcsIDB4OGQsIDB4OWQsIDB4ODQsCisgICAgMHg5MCwgMHhkOCwgMHhhYiwgMHgwMCwgMHg4YywgMHhiYywgMHhkMywgMHgwYSwKKyAgICAweGY3LCAweGU0LCAweDU4LCAweDA1LCAweGI4LCAweGIzLCAweDQ1LCAweDA2LAorICAgIDB4ZDAsIDB4MmMsIDB4MWUsIDB4OGYsIDB4Y2EsIDB4M2YsIDB4MGYsIDB4MDIsCisgICAgMHhjMSwgMHhhZiwgMHhiZCwgMHgwMywgMHgwMSwgMHgxMywgMHg4YSwgMHg2YiwKKyAgICAweDNhLCAweDkxLCAweDExLCAweDQxLCAweDRmLCAweDY3LCAweGRjLCAweGVhLAorICAgIDB4OTcsIDB4ZjIsIDB4Y2YsIDB4Y2UsIDB4ZjAsIDB4YjQsIDB4ZTYsIDB4NzMsCisgICAgMHg5NiwgMHhhYywgMHg3NCwgMHgyMiwgMHhlNywgMHhhZCwgMHgzNSwgMHg4NSwKKyAgICAweGUyLCAweGY5LCAweDM3LCAweGU4LCAweDFjLCAweDc1LCAweGRmLCAweDZlLAorICAgIDB4NDcsIDB4ZjEsIDB4MWEsIDB4NzEsIDB4MWQsIDB4MjksIDB4YzUsIDB4ODksCisgICAgMHg2ZiwgMHhiNywgMHg2MiwgMHgwZSwgMHhhYSwgMHgxOCwgMHhiZSwgMHgxYiwKKyAgICAweGZjLCAweDU2LCAweDNlLCAweDRiLCAweGM2LCAweGQyLCAweDc5LCAweDIwLAorICAgIDB4OWEsIDB4ZGIsIDB4YzAsIDB4ZmUsIDB4NzgsIDB4Y2QsIDB4NWEsIDB4ZjQsCisgICAgMHgxZiwgMHhkZCwgMHhhOCwgMHgzMywgMHg4OCwgMHgwNywgMHhjNywgMHgzMSwKKyAgICAweGIxLCAweDEyLCAweDEwLCAweDU5LCAweDI3LCAweDgwLCAweGVjLCAweDVmLAorICAgIDB4NjAsIDB4NTEsIDB4N2YsIDB4YTksIDB4MTksIDB4YjUsIDB4NGEsIDB4MGQsCisgICAgMHgyZCwgMHhlNSwgMHg3YSwgMHg5ZiwgMHg5MywgMHhjOSwgMHg5YywgMHhlZiwKKyAgICAweGEwLCAweGUwLCAweDNiLCAweDRkLCAweGFlLCAweDJhLCAweGY1LCAweGIwLAorICAgIDB4YzgsIDB4ZWIsIDB4YmIsIDB4M2MsIDB4ODMsIDB4NTMsIDB4OTksIDB4NjEsCisgICAgMHgxNywgMHgyYiwgMHgwNCwgMHg3ZSwgMHhiYSwgMHg3NywgMHhkNiwgMHgyNiwKKyAgICAweGUxLCAweDY5LCAweDE0LCAweDYzLCAweDU1LCAweDIxLCAweDBjLCAweDdkCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBFMFsyNTZdID0geworICAgIDB4YzY2MzYzYTUsIDB4Zjg3YzdjODQsIDB4ZWU3Nzc3OTksIDB4ZjY3YjdiOGQsCisgICAgMHhmZmYyZjIwZCwgMHhkNjZiNmJiZCwgMHhkZTZmNmZiMSwgMHg5MWM1YzU1NCwKKyAgICAweDYwMzAzMDUwLCAweDAyMDEwMTAzLCAweGNlNjc2N2E5LCAweDU2MmIyYjdkLAorICAgIDB4ZTdmZWZlMTksIDB4YjVkN2Q3NjIsIDB4NGRhYmFiZTYsIDB4ZWM3Njc2OWEsCisgICAgMHg4ZmNhY2E0NSwgMHgxZjgyODI5ZCwgMHg4OWM5Yzk0MCwgMHhmYTdkN2Q4NywKKyAgICAweGVmZmFmYTE1LCAweGIyNTk1OWViLCAweDhlNDc0N2M5LCAweGZiZjBmMDBiLAorICAgIDB4NDFhZGFkZWMsIDB4YjNkNGQ0NjcsIDB4NWZhMmEyZmQsIDB4NDVhZmFmZWEsCisgICAgMHgyMzljOWNiZiwgMHg1M2E0YTRmNywgMHhlNDcyNzI5NiwgMHg5YmMwYzA1YiwKKyAgICAweDc1YjdiN2MyLCAweGUxZmRmZDFjLCAweDNkOTM5M2FlLCAweDRjMjYyNjZhLAorICAgIDB4NmMzNjM2NWEsIDB4N2UzZjNmNDEsIDB4ZjVmN2Y3MDIsIDB4ODNjY2NjNGYsCisgICAgMHg2ODM0MzQ1YywgMHg1MWE1YTVmNCwgMHhkMWU1ZTUzNCwgMHhmOWYxZjEwOCwKKyAgICAweGUyNzE3MTkzLCAweGFiZDhkODczLCAweDYyMzEzMTUzLCAweDJhMTUxNTNmLAorICAgIDB4MDgwNDA0MGMsIDB4OTVjN2M3NTIsIDB4NDYyMzIzNjUsIDB4OWRjM2MzNWUsCisgICAgMHgzMDE4MTgyOCwgMHgzNzk2OTZhMSwgMHgwYTA1MDUwZiwgMHgyZjlhOWFiNSwKKyAgICAweDBlMDcwNzA5LCAweDI0MTIxMjM2LCAweDFiODA4MDliLCAweGRmZTJlMjNkLAorICAgIDB4Y2RlYmViMjYsIDB4NGUyNzI3NjksIDB4N2ZiMmIyY2QsIDB4ZWE3NTc1OWYsCisgICAgMHgxMjA5MDkxYiwgMHgxZDgzODM5ZSwgMHg1ODJjMmM3NCwgMHgzNDFhMWEyZSwKKyAgICAweDM2MWIxYjJkLCAweGRjNmU2ZWIyLCAweGI0NWE1YWVlLCAweDViYTBhMGZiLAorICAgIDB4YTQ1MjUyZjYsIDB4NzYzYjNiNGQsIDB4YjdkNmQ2NjEsIDB4N2RiM2IzY2UsCisgICAgMHg1MjI5Mjk3YiwgMHhkZGUzZTMzZSwgMHg1ZTJmMmY3MSwgMHgxMzg0ODQ5NywKKyAgICAweGE2NTM1M2Y1LCAweGI5ZDFkMTY4LCAweDAwMDAwMDAwLCAweGMxZWRlZDJjLAorICAgIDB4NDAyMDIwNjAsIDB4ZTNmY2ZjMWYsIDB4NzliMWIxYzgsIDB4YjY1YjViZWQsCisgICAgMHhkNDZhNmFiZSwgMHg4ZGNiY2I0NiwgMHg2N2JlYmVkOSwgMHg3MjM5Mzk0YiwKKyAgICAweDk0NGE0YWRlLCAweDk4NGM0Y2Q0LCAweGIwNTg1OGU4LCAweDg1Y2ZjZjRhLAorICAgIDB4YmJkMGQwNmIsIDB4YzVlZmVmMmEsIDB4NGZhYWFhZTUsIDB4ZWRmYmZiMTYsCisgICAgMHg4NjQzNDNjNSwgMHg5YTRkNGRkNywgMHg2NjMzMzM1NSwgMHgxMTg1ODU5NCwKKyAgICAweDhhNDU0NWNmLCAweGU5ZjlmOTEwLCAweDA0MDIwMjA2LCAweGZlN2Y3ZjgxLAorICAgIDB4YTA1MDUwZjAsIDB4NzgzYzNjNDQsIDB4MjU5ZjlmYmEsIDB4NGJhOGE4ZTMsCisgICAgMHhhMjUxNTFmMywgMHg1ZGEzYTNmZSwgMHg4MDQwNDBjMCwgMHgwNThmOGY4YSwKKyAgICAweDNmOTI5MmFkLCAweDIxOWQ5ZGJjLCAweDcwMzgzODQ4LCAweGYxZjVmNTA0LAorICAgIDB4NjNiY2JjZGYsIDB4NzdiNmI2YzEsIDB4YWZkYWRhNzUsIDB4NDIyMTIxNjMsCisgICAgMHgyMDEwMTAzMCwgMHhlNWZmZmYxYSwgMHhmZGYzZjMwZSwgMHhiZmQyZDI2ZCwKKyAgICAweDgxY2RjZDRjLCAweDE4MGMwYzE0LCAweDI2MTMxMzM1LCAweGMzZWNlYzJmLAorICAgIDB4YmU1ZjVmZTEsIDB4MzU5Nzk3YTIsIDB4ODg0NDQ0Y2MsIDB4MmUxNzE3MzksCisgICAgMHg5M2M0YzQ1NywgMHg1NWE3YTdmMiwgMHhmYzdlN2U4MiwgMHg3YTNkM2Q0NywKKyAgICAweGM4NjQ2NGFjLCAweGJhNWQ1ZGU3LCAweDMyMTkxOTJiLCAweGU2NzM3Mzk1LAorICAgIDB4YzA2MDYwYTAsIDB4MTk4MTgxOTgsIDB4OWU0ZjRmZDEsIDB4YTNkY2RjN2YsCisgICAgMHg0NDIyMjI2NiwgMHg1NDJhMmE3ZSwgMHgzYjkwOTBhYiwgMHgwYjg4ODg4MywKKyAgICAweDhjNDY0NmNhLCAweGM3ZWVlZTI5LCAweDZiYjhiOGQzLCAweDI4MTQxNDNjLAorICAgIDB4YTdkZWRlNzksIDB4YmM1ZTVlZTIsIDB4MTYwYjBiMWQsIDB4YWRkYmRiNzYsCisgICAgMHhkYmUwZTAzYiwgMHg2NDMyMzI1NiwgMHg3NDNhM2E0ZSwgMHgxNDBhMGExZSwKKyAgICAweDkyNDk0OWRiLCAweDBjMDYwNjBhLCAweDQ4MjQyNDZjLCAweGI4NWM1Y2U0LAorICAgIDB4OWZjMmMyNWQsIDB4YmRkM2QzNmUsIDB4NDNhY2FjZWYsIDB4YzQ2MjYyYTYsCisgICAgMHgzOTkxOTFhOCwgMHgzMTk1OTVhNCwgMHhkM2U0ZTQzNywgMHhmMjc5Nzk4YiwKKyAgICAweGQ1ZTdlNzMyLCAweDhiYzhjODQzLCAweDZlMzczNzU5LCAweGRhNmQ2ZGI3LAorICAgIDB4MDE4ZDhkOGMsIDB4YjFkNWQ1NjQsIDB4OWM0ZTRlZDIsIDB4NDlhOWE5ZTAsCisgICAgMHhkODZjNmNiNCwgMHhhYzU2NTZmYSwgMHhmM2Y0ZjQwNywgMHhjZmVhZWEyNSwKKyAgICAweGNhNjU2NWFmLCAweGY0N2E3YThlLCAweDQ3YWVhZWU5LCAweDEwMDgwODE4LAorICAgIDB4NmZiYWJhZDUsIDB4ZjA3ODc4ODgsIDB4NGEyNTI1NmYsIDB4NWMyZTJlNzIsCisgICAgMHgzODFjMWMyNCwgMHg1N2E2YTZmMSwgMHg3M2I0YjRjNywgMHg5N2M2YzY1MSwKKyAgICAweGNiZThlODIzLCAweGExZGRkZDdjLCAweGU4NzQ3NDljLCAweDNlMWYxZjIxLAorICAgIDB4OTY0YjRiZGQsIDB4NjFiZGJkZGMsIDB4MGQ4YjhiODYsIDB4MGY4YThhODUsCisgICAgMHhlMDcwNzA5MCwgMHg3YzNlM2U0MiwgMHg3MWI1YjVjNCwgMHhjYzY2NjZhYSwKKyAgICAweDkwNDg0OGQ4LCAweDA2MDMwMzA1LCAweGY3ZjZmNjAxLCAweDFjMGUwZTEyLAorICAgIDB4YzI2MTYxYTMsIDB4NmEzNTM1NWYsIDB4YWU1NzU3ZjksIDB4NjliOWI5ZDAsCisgICAgMHgxNzg2ODY5MSwgMHg5OWMxYzE1OCwgMHgzYTFkMWQyNywgMHgyNzllOWViOSwKKyAgICAweGQ5ZTFlMTM4LCAweGViZjhmODEzLCAweDJiOTg5OGIzLCAweDIyMTExMTMzLAorICAgIDB4ZDI2OTY5YmIsIDB4YTlkOWQ5NzAsIDB4MDc4ZThlODksIDB4MzM5NDk0YTcsCisgICAgMHgyZDliOWJiNiwgMHgzYzFlMWUyMiwgMHgxNTg3ODc5MiwgMHhjOWU5ZTkyMCwKKyAgICAweDg3Y2VjZTQ5LCAweGFhNTU1NWZmLCAweDUwMjgyODc4LCAweGE1ZGZkZjdhLAorICAgIDB4MDM4YzhjOGYsIDB4NTlhMWExZjgsIDB4MDk4OTg5ODAsIDB4MWEwZDBkMTcsCisgICAgMHg2NWJmYmZkYSwgMHhkN2U2ZTYzMSwgMHg4NDQyNDJjNiwgMHhkMDY4NjhiOCwKKyAgICAweDgyNDE0MWMzLCAweDI5OTk5OWIwLCAweDVhMmQyZDc3LCAweDFlMGYwZjExLAorICAgIDB4N2JiMGIwY2IsIDB4YTg1NDU0ZmMsIDB4NmRiYmJiZDYsIDB4MmMxNjE2M2EsCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBFMVsyNTZdID0geworICAgIDB4YTVjNjYzNjMsIDB4ODRmODdjN2MsIDB4OTllZTc3NzcsIDB4OGRmNjdiN2IsCisgICAgMHgwZGZmZjJmMiwgMHhiZGQ2NmI2YiwgMHhiMWRlNmY2ZiwgMHg1NDkxYzVjNSwKKyAgICAweDUwNjAzMDMwLCAweDAzMDIwMTAxLCAweGE5Y2U2NzY3LCAweDdkNTYyYjJiLAorICAgIDB4MTllN2ZlZmUsIDB4NjJiNWQ3ZDcsIDB4ZTY0ZGFiYWIsIDB4OWFlYzc2NzYsCisgICAgMHg0NThmY2FjYSwgMHg5ZDFmODI4MiwgMHg0MDg5YzljOSwgMHg4N2ZhN2Q3ZCwKKyAgICAweDE1ZWZmYWZhLCAweGViYjI1OTU5LCAweGM5OGU0NzQ3LCAweDBiZmJmMGYwLAorICAgIDB4ZWM0MWFkYWQsIDB4NjdiM2Q0ZDQsIDB4ZmQ1ZmEyYTIsIDB4ZWE0NWFmYWYsCisgICAgMHhiZjIzOWM5YywgMHhmNzUzYTRhNCwgMHg5NmU0NzI3MiwgMHg1YjliYzBjMCwKKyAgICAweGMyNzViN2I3LCAweDFjZTFmZGZkLCAweGFlM2Q5MzkzLCAweDZhNGMyNjI2LAorICAgIDB4NWE2YzM2MzYsIDB4NDE3ZTNmM2YsIDB4MDJmNWY3ZjcsIDB4NGY4M2NjY2MsCisgICAgMHg1YzY4MzQzNCwgMHhmNDUxYTVhNSwgMHgzNGQxZTVlNSwgMHgwOGY5ZjFmMSwKKyAgICAweDkzZTI3MTcxLCAweDczYWJkOGQ4LCAweDUzNjIzMTMxLCAweDNmMmExNTE1LAorICAgIDB4MGMwODA0MDQsIDB4NTI5NWM3YzcsIDB4NjU0NjIzMjMsIDB4NWU5ZGMzYzMsCisgICAgMHgyODMwMTgxOCwgMHhhMTM3OTY5NiwgMHgwZjBhMDUwNSwgMHhiNTJmOWE5YSwKKyAgICAweDA5MGUwNzA3LCAweDM2MjQxMjEyLCAweDliMWI4MDgwLCAweDNkZGZlMmUyLAorICAgIDB4MjZjZGViZWIsIDB4Njk0ZTI3MjcsIDB4Y2Q3ZmIyYjIsIDB4OWZlYTc1NzUsCisgICAgMHgxYjEyMDkwOSwgMHg5ZTFkODM4MywgMHg3NDU4MmMyYywgMHgyZTM0MWExYSwKKyAgICAweDJkMzYxYjFiLCAweGIyZGM2ZTZlLCAweGVlYjQ1YTVhLCAweGZiNWJhMGEwLAorICAgIDB4ZjZhNDUyNTIsIDB4NGQ3NjNiM2IsIDB4NjFiN2Q2ZDYsIDB4Y2U3ZGIzYjMsCisgICAgMHg3YjUyMjkyOSwgMHgzZWRkZTNlMywgMHg3MTVlMmYyZiwgMHg5NzEzODQ4NCwKKyAgICAweGY1YTY1MzUzLCAweDY4YjlkMWQxLCAweDAwMDAwMDAwLCAweDJjYzFlZGVkLAorICAgIDB4NjA0MDIwMjAsIDB4MWZlM2ZjZmMsIDB4Yzg3OWIxYjEsIDB4ZWRiNjViNWIsCisgICAgMHhiZWQ0NmE2YSwgMHg0NjhkY2JjYiwgMHhkOTY3YmViZSwgMHg0YjcyMzkzOSwKKyAgICAweGRlOTQ0YTRhLCAweGQ0OTg0YzRjLCAweGU4YjA1ODU4LCAweDRhODVjZmNmLAorICAgIDB4NmJiYmQwZDAsIDB4MmFjNWVmZWYsIDB4ZTU0ZmFhYWEsIDB4MTZlZGZiZmIsCisgICAgMHhjNTg2NDM0MywgMHhkNzlhNGQ0ZCwgMHg1NTY2MzMzMywgMHg5NDExODU4NSwKKyAgICAweGNmOGE0NTQ1LCAweDEwZTlmOWY5LCAweDA2MDQwMjAyLCAweDgxZmU3ZjdmLAorICAgIDB4ZjBhMDUwNTAsIDB4NDQ3ODNjM2MsIDB4YmEyNTlmOWYsIDB4ZTM0YmE4YTgsCisgICAgMHhmM2EyNTE1MSwgMHhmZTVkYTNhMywgMHhjMDgwNDA0MCwgMHg4YTA1OGY4ZiwKKyAgICAweGFkM2Y5MjkyLCAweGJjMjE5ZDlkLCAweDQ4NzAzODM4LCAweDA0ZjFmNWY1LAorICAgIDB4ZGY2M2JjYmMsIDB4YzE3N2I2YjYsIDB4NzVhZmRhZGEsIDB4NjM0MjIxMjEsCisgICAgMHgzMDIwMTAxMCwgMHgxYWU1ZmZmZiwgMHgwZWZkZjNmMywgMHg2ZGJmZDJkMiwKKyAgICAweDRjODFjZGNkLCAweDE0MTgwYzBjLCAweDM1MjYxMzEzLCAweDJmYzNlY2VjLAorICAgIDB4ZTFiZTVmNWYsIDB4YTIzNTk3OTcsIDB4Y2M4ODQ0NDQsIDB4MzkyZTE3MTcsCisgICAgMHg1NzkzYzRjNCwgMHhmMjU1YTdhNywgMHg4MmZjN2U3ZSwgMHg0NzdhM2QzZCwKKyAgICAweGFjYzg2NDY0LCAweGU3YmE1ZDVkLCAweDJiMzIxOTE5LCAweDk1ZTY3MzczLAorICAgIDB4YTBjMDYwNjAsIDB4OTgxOTgxODEsIDB4ZDE5ZTRmNGYsIDB4N2ZhM2RjZGMsCisgICAgMHg2NjQ0MjIyMiwgMHg3ZTU0MmEyYSwgMHhhYjNiOTA5MCwgMHg4MzBiODg4OCwKKyAgICAweGNhOGM0NjQ2LCAweDI5YzdlZWVlLCAweGQzNmJiOGI4LCAweDNjMjgxNDE0LAorICAgIDB4NzlhN2RlZGUsIDB4ZTJiYzVlNWUsIDB4MWQxNjBiMGIsIDB4NzZhZGRiZGIsCisgICAgMHgzYmRiZTBlMCwgMHg1NjY0MzIzMiwgMHg0ZTc0M2EzYSwgMHgxZTE0MGEwYSwKKyAgICAweGRiOTI0OTQ5LCAweDBhMGMwNjA2LCAweDZjNDgyNDI0LCAweGU0Yjg1YzVjLAorICAgIDB4NWQ5ZmMyYzIsIDB4NmViZGQzZDMsIDB4ZWY0M2FjYWMsIDB4YTZjNDYyNjIsCisgICAgMHhhODM5OTE5MSwgMHhhNDMxOTU5NSwgMHgzN2QzZTRlNCwgMHg4YmYyNzk3OSwKKyAgICAweDMyZDVlN2U3LCAweDQzOGJjOGM4LCAweDU5NmUzNzM3LCAweGI3ZGE2ZDZkLAorICAgIDB4OGMwMThkOGQsIDB4NjRiMWQ1ZDUsIDB4ZDI5YzRlNGUsIDB4ZTA0OWE5YTksCisgICAgMHhiNGQ4NmM2YywgMHhmYWFjNTY1NiwgMHgwN2YzZjRmNCwgMHgyNWNmZWFlYSwKKyAgICAweGFmY2E2NTY1LCAweDhlZjQ3YTdhLCAweGU5NDdhZWFlLCAweDE4MTAwODA4LAorICAgIDB4ZDU2ZmJhYmEsIDB4ODhmMDc4NzgsIDB4NmY0YTI1MjUsIDB4NzI1YzJlMmUsCisgICAgMHgyNDM4MWMxYywgMHhmMTU3YTZhNiwgMHhjNzczYjRiNCwgMHg1MTk3YzZjNiwKKyAgICAweDIzY2JlOGU4LCAweDdjYTFkZGRkLCAweDljZTg3NDc0LCAweDIxM2UxZjFmLAorICAgIDB4ZGQ5NjRiNGIsIDB4ZGM2MWJkYmQsIDB4ODYwZDhiOGIsIDB4ODUwZjhhOGEsCisgICAgMHg5MGUwNzA3MCwgMHg0MjdjM2UzZSwgMHhjNDcxYjViNSwgMHhhYWNjNjY2NiwKKyAgICAweGQ4OTA0ODQ4LCAweDA1MDYwMzAzLCAweDAxZjdmNmY2LCAweDEyMWMwZTBlLAorICAgIDB4YTNjMjYxNjEsIDB4NWY2YTM1MzUsIDB4ZjlhZTU3NTcsIDB4ZDA2OWI5YjksCisgICAgMHg5MTE3ODY4NiwgMHg1ODk5YzFjMSwgMHgyNzNhMWQxZCwgMHhiOTI3OWU5ZSwKKyAgICAweDM4ZDllMWUxLCAweDEzZWJmOGY4LCAweGIzMmI5ODk4LCAweDMzMjIxMTExLAorICAgIDB4YmJkMjY5NjksIDB4NzBhOWQ5ZDksIDB4ODkwNzhlOGUsIDB4YTczMzk0OTQsCisgICAgMHhiNjJkOWI5YiwgMHgyMjNjMWUxZSwgMHg5MjE1ODc4NywgMHgyMGM5ZTllOSwKKyAgICAweDQ5ODdjZWNlLCAweGZmYWE1NTU1LCAweDc4NTAyODI4LCAweDdhYTVkZmRmLAorICAgIDB4OGYwMzhjOGMsIDB4Zjg1OWExYTEsIDB4ODAwOTg5ODksIDB4MTcxYTBkMGQsCisgICAgMHhkYTY1YmZiZiwgMHgzMWQ3ZTZlNiwgMHhjNjg0NDI0MiwgMHhiOGQwNjg2OCwKKyAgICAweGMzODI0MTQxLCAweGIwMjk5OTk5LCAweDc3NWEyZDJkLCAweDExMWUwZjBmLAorICAgIDB4Y2I3YmIwYjAsIDB4ZmNhODU0NTQsIDB4ZDY2ZGJiYmIsIDB4M2EyYzE2MTYsCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBFMlsyNTZdID0geworICAgIDB4NjNhNWM2NjMsIDB4N2M4NGY4N2MsIDB4Nzc5OWVlNzcsIDB4N2I4ZGY2N2IsCisgICAgMHhmMjBkZmZmMiwgMHg2YmJkZDY2YiwgMHg2ZmIxZGU2ZiwgMHhjNTU0OTFjNSwKKyAgICAweDMwNTA2MDMwLCAweDAxMDMwMjAxLCAweDY3YTljZTY3LCAweDJiN2Q1NjJiLAorICAgIDB4ZmUxOWU3ZmUsIDB4ZDc2MmI1ZDcsIDB4YWJlNjRkYWIsIDB4NzY5YWVjNzYsCisgICAgMHhjYTQ1OGZjYSwgMHg4MjlkMWY4MiwgMHhjOTQwODljOSwgMHg3ZDg3ZmE3ZCwKKyAgICAweGZhMTVlZmZhLCAweDU5ZWJiMjU5LCAweDQ3Yzk4ZTQ3LCAweGYwMGJmYmYwLAorICAgIDB4YWRlYzQxYWQsIDB4ZDQ2N2IzZDQsIDB4YTJmZDVmYTIsIDB4YWZlYTQ1YWYsCisgICAgMHg5Y2JmMjM5YywgMHhhNGY3NTNhNCwgMHg3Mjk2ZTQ3MiwgMHhjMDViOWJjMCwKKyAgICAweGI3YzI3NWI3LCAweGZkMWNlMWZkLCAweDkzYWUzZDkzLCAweDI2NmE0YzI2LAorICAgIDB4MzY1YTZjMzYsIDB4M2Y0MTdlM2YsIDB4ZjcwMmY1ZjcsIDB4Y2M0ZjgzY2MsCisgICAgMHgzNDVjNjgzNCwgMHhhNWY0NTFhNSwgMHhlNTM0ZDFlNSwgMHhmMTA4ZjlmMSwKKyAgICAweDcxOTNlMjcxLCAweGQ4NzNhYmQ4LCAweDMxNTM2MjMxLCAweDE1M2YyYTE1LAorICAgIDB4MDQwYzA4MDQsIDB4Yzc1Mjk1YzcsIDB4MjM2NTQ2MjMsIDB4YzM1ZTlkYzMsCisgICAgMHgxODI4MzAxOCwgMHg5NmExMzc5NiwgMHgwNTBmMGEwNSwgMHg5YWI1MmY5YSwKKyAgICAweDA3MDkwZTA3LCAweDEyMzYyNDEyLCAweDgwOWIxYjgwLCAweGUyM2RkZmUyLAorICAgIDB4ZWIyNmNkZWIsIDB4Mjc2OTRlMjcsIDB4YjJjZDdmYjIsIDB4NzU5ZmVhNzUsCisgICAgMHgwOTFiMTIwOSwgMHg4MzllMWQ4MywgMHgyYzc0NTgyYywgMHgxYTJlMzQxYSwKKyAgICAweDFiMmQzNjFiLCAweDZlYjJkYzZlLCAweDVhZWViNDVhLCAweGEwZmI1YmEwLAorICAgIDB4NTJmNmE0NTIsIDB4M2I0ZDc2M2IsIDB4ZDY2MWI3ZDYsIDB4YjNjZTdkYjMsCisgICAgMHgyOTdiNTIyOSwgMHhlMzNlZGRlMywgMHgyZjcxNWUyZiwgMHg4NDk3MTM4NCwKKyAgICAweDUzZjVhNjUzLCAweGQxNjhiOWQxLCAweDAwMDAwMDAwLCAweGVkMmNjMWVkLAorICAgIDB4MjA2MDQwMjAsIDB4ZmMxZmUzZmMsIDB4YjFjODc5YjEsIDB4NWJlZGI2NWIsCisgICAgMHg2YWJlZDQ2YSwgMHhjYjQ2OGRjYiwgMHhiZWQ5NjdiZSwgMHgzOTRiNzIzOSwKKyAgICAweDRhZGU5NDRhLCAweDRjZDQ5ODRjLCAweDU4ZThiMDU4LCAweGNmNGE4NWNmLAorICAgIDB4ZDA2YmJiZDAsIDB4ZWYyYWM1ZWYsIDB4YWFlNTRmYWEsIDB4ZmIxNmVkZmIsCisgICAgMHg0M2M1ODY0MywgMHg0ZGQ3OWE0ZCwgMHgzMzU1NjYzMywgMHg4NTk0MTE4NSwKKyAgICAweDQ1Y2Y4YTQ1LCAweGY5MTBlOWY5LCAweDAyMDYwNDAyLCAweDdmODFmZTdmLAorICAgIDB4NTBmMGEwNTAsIDB4M2M0NDc4M2MsIDB4OWZiYTI1OWYsIDB4YThlMzRiYTgsCisgICAgMHg1MWYzYTI1MSwgMHhhM2ZlNWRhMywgMHg0MGMwODA0MCwgMHg4ZjhhMDU4ZiwKKyAgICAweDkyYWQzZjkyLCAweDlkYmMyMTlkLCAweDM4NDg3MDM4LCAweGY1MDRmMWY1LAorICAgIDB4YmNkZjYzYmMsIDB4YjZjMTc3YjYsIDB4ZGE3NWFmZGEsIDB4MjE2MzQyMjEsCisgICAgMHgxMDMwMjAxMCwgMHhmZjFhZTVmZiwgMHhmMzBlZmRmMywgMHhkMjZkYmZkMiwKKyAgICAweGNkNGM4MWNkLCAweDBjMTQxODBjLCAweDEzMzUyNjEzLCAweGVjMmZjM2VjLAorICAgIDB4NWZlMWJlNWYsIDB4OTdhMjM1OTcsIDB4NDRjYzg4NDQsIDB4MTczOTJlMTcsCisgICAgMHhjNDU3OTNjNCwgMHhhN2YyNTVhNywgMHg3ZTgyZmM3ZSwgMHgzZDQ3N2EzZCwKKyAgICAweDY0YWNjODY0LCAweDVkZTdiYTVkLCAweDE5MmIzMjE5LCAweDczOTVlNjczLAorICAgIDB4NjBhMGMwNjAsIDB4ODE5ODE5ODEsIDB4NGZkMTllNGYsIDB4ZGM3ZmEzZGMsCisgICAgMHgyMjY2NDQyMiwgMHgyYTdlNTQyYSwgMHg5MGFiM2I5MCwgMHg4ODgzMGI4OCwKKyAgICAweDQ2Y2E4YzQ2LCAweGVlMjljN2VlLCAweGI4ZDM2YmI4LCAweDE0M2MyODE0LAorICAgIDB4ZGU3OWE3ZGUsIDB4NWVlMmJjNWUsIDB4MGIxZDE2MGIsIDB4ZGI3NmFkZGIsCisgICAgMHhlMDNiZGJlMCwgMHgzMjU2NjQzMiwgMHgzYTRlNzQzYSwgMHgwYTFlMTQwYSwKKyAgICAweDQ5ZGI5MjQ5LCAweDA2MGEwYzA2LCAweDI0NmM0ODI0LCAweDVjZTRiODVjLAorICAgIDB4YzI1ZDlmYzIsIDB4ZDM2ZWJkZDMsIDB4YWNlZjQzYWMsIDB4NjJhNmM0NjIsCisgICAgMHg5MWE4Mzk5MSwgMHg5NWE0MzE5NSwgMHhlNDM3ZDNlNCwgMHg3OThiZjI3OSwKKyAgICAweGU3MzJkNWU3LCAweGM4NDM4YmM4LCAweDM3NTk2ZTM3LCAweDZkYjdkYTZkLAorICAgIDB4OGQ4YzAxOGQsIDB4ZDU2NGIxZDUsIDB4NGVkMjljNGUsIDB4YTllMDQ5YTksCisgICAgMHg2Y2I0ZDg2YywgMHg1NmZhYWM1NiwgMHhmNDA3ZjNmNCwgMHhlYTI1Y2ZlYSwKKyAgICAweDY1YWZjYTY1LCAweDdhOGVmNDdhLCAweGFlZTk0N2FlLCAweDA4MTgxMDA4LAorICAgIDB4YmFkNTZmYmEsIDB4Nzg4OGYwNzgsIDB4MjU2ZjRhMjUsIDB4MmU3MjVjMmUsCisgICAgMHgxYzI0MzgxYywgMHhhNmYxNTdhNiwgMHhiNGM3NzNiNCwgMHhjNjUxOTdjNiwKKyAgICAweGU4MjNjYmU4LCAweGRkN2NhMWRkLCAweDc0OWNlODc0LCAweDFmMjEzZTFmLAorICAgIDB4NGJkZDk2NGIsIDB4YmRkYzYxYmQsIDB4OGI4NjBkOGIsIDB4OGE4NTBmOGEsCisgICAgMHg3MDkwZTA3MCwgMHgzZTQyN2MzZSwgMHhiNWM0NzFiNSwgMHg2NmFhY2M2NiwKKyAgICAweDQ4ZDg5MDQ4LCAweDAzMDUwNjAzLCAweGY2MDFmN2Y2LCAweDBlMTIxYzBlLAorICAgIDB4NjFhM2MyNjEsIDB4MzU1ZjZhMzUsIDB4NTdmOWFlNTcsIDB4YjlkMDY5YjksCisgICAgMHg4NjkxMTc4NiwgMHhjMTU4OTljMSwgMHgxZDI3M2ExZCwgMHg5ZWI5Mjc5ZSwKKyAgICAweGUxMzhkOWUxLCAweGY4MTNlYmY4LCAweDk4YjMyYjk4LCAweDExMzMyMjExLAorICAgIDB4NjliYmQyNjksIDB4ZDk3MGE5ZDksIDB4OGU4OTA3OGUsIDB4OTRhNzMzOTQsCisgICAgMHg5YmI2MmQ5YiwgMHgxZTIyM2MxZSwgMHg4NzkyMTU4NywgMHhlOTIwYzllOSwKKyAgICAweGNlNDk4N2NlLCAweDU1ZmZhYTU1LCAweDI4Nzg1MDI4LCAweGRmN2FhNWRmLAorICAgIDB4OGM4ZjAzOGMsIDB4YTFmODU5YTEsIDB4ODk4MDA5ODksIDB4MGQxNzFhMGQsCisgICAgMHhiZmRhNjViZiwgMHhlNjMxZDdlNiwgMHg0MmM2ODQ0MiwgMHg2OGI4ZDA2OCwKKyAgICAweDQxYzM4MjQxLCAweDk5YjAyOTk5LCAweDJkNzc1YTJkLCAweDBmMTExZTBmLAorICAgIDB4YjBjYjdiYjAsIDB4NTRmY2E4NTQsIDB4YmJkNjZkYmIsIDB4MTYzYTJjMTYsCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBFM1syNTZdID0geworICAgIDB4NjM2M2E1YzYsIDB4N2M3Yzg0ZjgsIDB4Nzc3Nzk5ZWUsIDB4N2I3YjhkZjYsCisgICAgMHhmMmYyMGRmZiwgMHg2YjZiYmRkNiwgMHg2ZjZmYjFkZSwgMHhjNWM1NTQ5MSwKKyAgICAweDMwMzA1MDYwLCAweDAxMDEwMzAyLCAweDY3NjdhOWNlLCAweDJiMmI3ZDU2LAorICAgIDB4ZmVmZTE5ZTcsIDB4ZDdkNzYyYjUsIDB4YWJhYmU2NGQsIDB4NzY3NjlhZWMsCisgICAgMHhjYWNhNDU4ZiwgMHg4MjgyOWQxZiwgMHhjOWM5NDA4OSwgMHg3ZDdkODdmYSwKKyAgICAweGZhZmExNWVmLCAweDU5NTllYmIyLCAweDQ3NDdjOThlLCAweGYwZjAwYmZiLAorICAgIDB4YWRhZGVjNDEsIDB4ZDRkNDY3YjMsIDB4YTJhMmZkNWYsIDB4YWZhZmVhNDUsCisgICAgMHg5YzljYmYyMywgMHhhNGE0Zjc1MywgMHg3MjcyOTZlNCwgMHhjMGMwNWI5YiwKKyAgICAweGI3YjdjMjc1LCAweGZkZmQxY2UxLCAweDkzOTNhZTNkLCAweDI2MjY2YTRjLAorICAgIDB4MzYzNjVhNmMsIDB4M2YzZjQxN2UsIDB4ZjdmNzAyZjUsIDB4Y2NjYzRmODMsCisgICAgMHgzNDM0NWM2OCwgMHhhNWE1ZjQ1MSwgMHhlNWU1MzRkMSwgMHhmMWYxMDhmOSwKKyAgICAweDcxNzE5M2UyLCAweGQ4ZDg3M2FiLCAweDMxMzE1MzYyLCAweDE1MTUzZjJhLAorICAgIDB4MDQwNDBjMDgsIDB4YzdjNzUyOTUsIDB4MjMyMzY1NDYsIDB4YzNjMzVlOWQsCisgICAgMHgxODE4MjgzMCwgMHg5Njk2YTEzNywgMHgwNTA1MGYwYSwgMHg5YTlhYjUyZiwKKyAgICAweDA3MDcwOTBlLCAweDEyMTIzNjI0LCAweDgwODA5YjFiLCAweGUyZTIzZGRmLAorICAgIDB4ZWJlYjI2Y2QsIDB4MjcyNzY5NGUsIDB4YjJiMmNkN2YsIDB4NzU3NTlmZWEsCisgICAgMHgwOTA5MWIxMiwgMHg4MzgzOWUxZCwgMHgyYzJjNzQ1OCwgMHgxYTFhMmUzNCwKKyAgICAweDFiMWIyZDM2LCAweDZlNmViMmRjLCAweDVhNWFlZWI0LCAweGEwYTBmYjViLAorICAgIDB4NTI1MmY2YTQsIDB4M2IzYjRkNzYsIDB4ZDZkNjYxYjcsIDB4YjNiM2NlN2QsCisgICAgMHgyOTI5N2I1MiwgMHhlM2UzM2VkZCwgMHgyZjJmNzE1ZSwgMHg4NDg0OTcxMywKKyAgICAweDUzNTNmNWE2LCAweGQxZDE2OGI5LCAweDAwMDAwMDAwLCAweGVkZWQyY2MxLAorICAgIDB4MjAyMDYwNDAsIDB4ZmNmYzFmZTMsIDB4YjFiMWM4NzksIDB4NWI1YmVkYjYsCisgICAgMHg2YTZhYmVkNCwgMHhjYmNiNDY4ZCwgMHhiZWJlZDk2NywgMHgzOTM5NGI3MiwKKyAgICAweDRhNGFkZTk0LCAweDRjNGNkNDk4LCAweDU4NThlOGIwLCAweGNmY2Y0YTg1LAorICAgIDB4ZDBkMDZiYmIsIDB4ZWZlZjJhYzUsIDB4YWFhYWU1NGYsIDB4ZmJmYjE2ZWQsCisgICAgMHg0MzQzYzU4NiwgMHg0ZDRkZDc5YSwgMHgzMzMzNTU2NiwgMHg4NTg1OTQxMSwKKyAgICAweDQ1NDVjZjhhLCAweGY5ZjkxMGU5LCAweDAyMDIwNjA0LCAweDdmN2Y4MWZlLAorICAgIDB4NTA1MGYwYTAsIDB4M2MzYzQ0NzgsIDB4OWY5ZmJhMjUsIDB4YThhOGUzNGIsCisgICAgMHg1MTUxZjNhMiwgMHhhM2EzZmU1ZCwgMHg0MDQwYzA4MCwgMHg4ZjhmOGEwNSwKKyAgICAweDkyOTJhZDNmLCAweDlkOWRiYzIxLCAweDM4Mzg0ODcwLCAweGY1ZjUwNGYxLAorICAgIDB4YmNiY2RmNjMsIDB4YjZiNmMxNzcsIDB4ZGFkYTc1YWYsIDB4MjEyMTYzNDIsCisgICAgMHgxMDEwMzAyMCwgMHhmZmZmMWFlNSwgMHhmM2YzMGVmZCwgMHhkMmQyNmRiZiwKKyAgICAweGNkY2Q0YzgxLCAweDBjMGMxNDE4LCAweDEzMTMzNTI2LCAweGVjZWMyZmMzLAorICAgIDB4NWY1ZmUxYmUsIDB4OTc5N2EyMzUsIDB4NDQ0NGNjODgsIDB4MTcxNzM5MmUsCisgICAgMHhjNGM0NTc5MywgMHhhN2E3ZjI1NSwgMHg3ZTdlODJmYywgMHgzZDNkNDc3YSwKKyAgICAweDY0NjRhY2M4LCAweDVkNWRlN2JhLCAweDE5MTkyYjMyLCAweDczNzM5NWU2LAorICAgIDB4NjA2MGEwYzAsIDB4ODE4MTk4MTksIDB4NGY0ZmQxOWUsIDB4ZGNkYzdmYTMsCisgICAgMHgyMjIyNjY0NCwgMHgyYTJhN2U1NCwgMHg5MDkwYWIzYiwgMHg4ODg4ODMwYiwKKyAgICAweDQ2NDZjYThjLCAweGVlZWUyOWM3LCAweGI4YjhkMzZiLCAweDE0MTQzYzI4LAorICAgIDB4ZGVkZTc5YTcsIDB4NWU1ZWUyYmMsIDB4MGIwYjFkMTYsIDB4ZGJkYjc2YWQsCisgICAgMHhlMGUwM2JkYiwgMHgzMjMyNTY2NCwgMHgzYTNhNGU3NCwgMHgwYTBhMWUxNCwKKyAgICAweDQ5NDlkYjkyLCAweDA2MDYwYTBjLCAweDI0MjQ2YzQ4LCAweDVjNWNlNGI4LAorICAgIDB4YzJjMjVkOWYsIDB4ZDNkMzZlYmQsIDB4YWNhY2VmNDMsIDB4NjI2MmE2YzQsCisgICAgMHg5MTkxYTgzOSwgMHg5NTk1YTQzMSwgMHhlNGU0MzdkMywgMHg3OTc5OGJmMiwKKyAgICAweGU3ZTczMmQ1LCAweGM4Yzg0MzhiLCAweDM3Mzc1OTZlLCAweDZkNmRiN2RhLAorICAgIDB4OGQ4ZDhjMDEsIDB4ZDVkNTY0YjEsIDB4NGU0ZWQyOWMsIDB4YTlhOWUwNDksCisgICAgMHg2YzZjYjRkOCwgMHg1NjU2ZmFhYywgMHhmNGY0MDdmMywgMHhlYWVhMjVjZiwKKyAgICAweDY1NjVhZmNhLCAweDdhN2E4ZWY0LCAweGFlYWVlOTQ3LCAweDA4MDgxODEwLAorICAgIDB4YmFiYWQ1NmYsIDB4Nzg3ODg4ZjAsIDB4MjUyNTZmNGEsIDB4MmUyZTcyNWMsCisgICAgMHgxYzFjMjQzOCwgMHhhNmE2ZjE1NywgMHhiNGI0Yzc3MywgMHhjNmM2NTE5NywKKyAgICAweGU4ZTgyM2NiLCAweGRkZGQ3Y2ExLCAweDc0NzQ5Y2U4LCAweDFmMWYyMTNlLAorICAgIDB4NGI0YmRkOTYsIDB4YmRiZGRjNjEsIDB4OGI4Yjg2MGQsIDB4OGE4YTg1MGYsCisgICAgMHg3MDcwOTBlMCwgMHgzZTNlNDI3YywgMHhiNWI1YzQ3MSwgMHg2NjY2YWFjYywKKyAgICAweDQ4NDhkODkwLCAweDAzMDMwNTA2LCAweGY2ZjYwMWY3LCAweDBlMGUxMjFjLAorICAgIDB4NjE2MWEzYzIsIDB4MzUzNTVmNmEsIDB4NTc1N2Y5YWUsIDB4YjliOWQwNjksCisgICAgMHg4Njg2OTExNywgMHhjMWMxNTg5OSwgMHgxZDFkMjczYSwgMHg5ZTllYjkyNywKKyAgICAweGUxZTEzOGQ5LCAweGY4ZjgxM2ViLCAweDk4OThiMzJiLCAweDExMTEzMzIyLAorICAgIDB4Njk2OWJiZDIsIDB4ZDlkOTcwYTksIDB4OGU4ZTg5MDcsIDB4OTQ5NGE3MzMsCisgICAgMHg5YjliYjYyZCwgMHgxZTFlMjIzYywgMHg4Nzg3OTIxNSwgMHhlOWU5MjBjOSwKKyAgICAweGNlY2U0OTg3LCAweDU1NTVmZmFhLCAweDI4Mjg3ODUwLCAweGRmZGY3YWE1LAorICAgIDB4OGM4YzhmMDMsIDB4YTFhMWY4NTksIDB4ODk4OTgwMDksIDB4MGQwZDE3MWEsCisgICAgMHhiZmJmZGE2NSwgMHhlNmU2MzFkNywgMHg0MjQyYzY4NCwgMHg2ODY4YjhkMCwKKyAgICAweDQxNDFjMzgyLCAweDk5OTliMDI5LCAweDJkMmQ3NzVhLCAweDBmMGYxMTFlLAorICAgIDB4YjBiMGNiN2IsIDB4NTQ1NGZjYTgsIDB4YmJiYmQ2NmQsIDB4MTYxNjNhMmMsCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBEMFsyNTZdID0geworICAgIDB4NTFmNGE3NTAsIDB4N2U0MTY1NTMsIDB4MWExN2E0YzMsIDB4M2EyNzVlOTYsCisgICAgMHgzYmFiNmJjYiwgMHgxZjlkNDVmMSwgMHhhY2ZhNThhYiwgMHg0YmUzMDM5MywKKyAgICAweDIwMzBmYTU1LCAweGFkNzY2ZGY2LCAweDg4Y2M3NjkxLCAweGY1MDI0YzI1LAorICAgIDB4NGZlNWQ3ZmMsIDB4YzUyYWNiZDcsIDB4MjYzNTQ0ODAsIDB4YjU2MmEzOGYsCisgICAgMHhkZWIxNWE0OSwgMHgyNWJhMWI2NywgMHg0NWVhMGU5OCwgMHg1ZGZlYzBlMSwKKyAgICAweGMzMmY3NTAyLCAweDgxNGNmMDEyLCAweDhkNDY5N2EzLCAweDZiZDNmOWM2LAorICAgIDB4MDM4ZjVmZTcsIDB4MTU5MjljOTUsIDB4YmY2ZDdhZWIsIDB4OTU1MjU5ZGEsCisgICAgMHhkNGJlODMyZCwgMHg1ODc0MjFkMywgMHg0OWUwNjkyOSwgMHg4ZWM5Yzg0NCwKKyAgICAweDc1YzI4OTZhLCAweGY0OGU3OTc4LCAweDk5NTgzZTZiLCAweDI3Yjk3MWRkLAorICAgIDB4YmVlMTRmYjYsIDB4ZjA4OGFkMTcsIDB4YzkyMGFjNjYsIDB4N2RjZTNhYjQsCisgICAgMHg2M2RmNGExOCwgMHhlNTFhMzE4MiwgMHg5NzUxMzM2MCwgMHg2MjUzN2Y0NSwKKyAgICAweGIxNjQ3N2UwLCAweGJiNmJhZTg0LCAweGZlODFhMDFjLCAweGY5MDgyYjk0LAorICAgIDB4NzA0ODY4NTgsIDB4OGY0NWZkMTksIDB4OTRkZTZjODcsIDB4NTI3YmY4YjcsCisgICAgMHhhYjczZDMyMywgMHg3MjRiMDJlMiwgMHhlMzFmOGY1NywgMHg2NjU1YWIyYSwKKyAgICAweGIyZWIyODA3LCAweDJmYjVjMjAzLCAweDg2YzU3YjlhLCAweGQzMzcwOGE1LAorICAgIDB4MzAyODg3ZjIsIDB4MjNiZmE1YjIsIDB4MDIwMzZhYmEsIDB4ZWQxNjgyNWMsCisgICAgMHg4YWNmMWMyYiwgMHhhNzc5YjQ5MiwgMHhmMzA3ZjJmMCwgMHg0ZTY5ZTJhMSwKKyAgICAweDY1ZGFmNGNkLCAweDA2MDViZWQ1LCAweGQxMzQ2MjFmLCAweGM0YTZmZThhLAorICAgIDB4MzQyZTUzOWQsIDB4YTJmMzU1YTAsIDB4MDU4YWUxMzIsIDB4YTRmNmViNzUsCisgICAgMHgwYjgzZWMzOSwgMHg0MDYwZWZhYSwgMHg1ZTcxOWYwNiwgMHhiZDZlMTA1MSwKKyAgICAweDNlMjE4YWY5LCAweDk2ZGQwNjNkLCAweGRkM2UwNWFlLCAweDRkZTZiZDQ2LAorICAgIDB4OTE1NDhkYjUsIDB4NzFjNDVkMDUsIDB4MDQwNmQ0NmYsIDB4NjA1MDE1ZmYsCisgICAgMHgxOTk4ZmIyNCwgMHhkNmJkZTk5NywgMHg4OTQwNDNjYywgMHg2N2Q5OWU3NywKKyAgICAweGIwZTg0MmJkLCAweDA3ODk4Yjg4LCAweGU3MTk1YjM4LCAweDc5YzhlZWRiLAorICAgIDB4YTE3YzBhNDcsIDB4N2M0MjBmZTksIDB4Zjg4NDFlYzksIDB4MDAwMDAwMDAsCisgICAgMHgwOTgwODY4MywgMHgzMjJiZWQ0OCwgMHgxZTExNzBhYywgMHg2YzVhNzI0ZSwKKyAgICAweGZkMGVmZmZiLCAweDBmODUzODU2LCAweDNkYWVkNTFlLCAweDM2MmQzOTI3LAorICAgIDB4MGEwZmQ5NjQsIDB4Njg1Y2E2MjEsIDB4OWI1YjU0ZDEsIDB4MjQzNjJlM2EsCisgICAgMHgwYzBhNjdiMSwgMHg5MzU3ZTcwZiwgMHhiNGVlOTZkMiwgMHgxYjliOTE5ZSwKKyAgICAweDgwYzBjNTRmLCAweDYxZGMyMGEyLCAweDVhNzc0YjY5LCAweDFjMTIxYTE2LAorICAgIDB4ZTI5M2JhMGEsIDB4YzBhMDJhZTUsIDB4M2MyMmUwNDMsIDB4MTIxYjE3MWQsCisgICAgMHgwZTA5MGQwYiwgMHhmMjhiYzdhZCwgMHgyZGI2YThiOSwgMHgxNDFlYTljOCwKKyAgICAweDU3ZjExOTg1LCAweGFmNzUwNzRjLCAweGVlOTlkZGJiLCAweGEzN2Y2MGZkLAorICAgIDB4ZjcwMTI2OWYsIDB4NWM3MmY1YmMsIDB4NDQ2NjNiYzUsIDB4NWJmYjdlMzQsCisgICAgMHg4YjQzMjk3NiwgMHhjYjIzYzZkYywgMHhiNmVkZmM2OCwgMHhiOGU0ZjE2MywKKyAgICAweGQ3MzFkY2NhLCAweDQyNjM4NTEwLCAweDEzOTcyMjQwLCAweDg0YzYxMTIwLAorICAgIDB4ODU0YTI0N2QsIDB4ZDJiYjNkZjgsIDB4YWVmOTMyMTEsIDB4YzcyOWExNmQsCisgICAgMHgxZDllMmY0YiwgMHhkY2IyMzBmMywgMHgwZDg2NTJlYywgMHg3N2MxZTNkMCwKKyAgICAweDJiYjMxNjZjLCAweGE5NzBiOTk5LCAweDExOTQ0OGZhLCAweDQ3ZTk2NDIyLAorICAgIDB4YThmYzhjYzQsIDB4YTBmMDNmMWEsIDB4NTY3ZDJjZDgsIDB4MjIzMzkwZWYsCisgICAgMHg4NzQ5NGVjNywgMHhkOTM4ZDFjMSwgMHg4Y2NhYTJmZSwgMHg5OGQ0MGIzNiwKKyAgICAweGE2ZjU4MWNmLCAweGE1N2FkZTI4LCAweGRhYjc4ZTI2LCAweDNmYWRiZmE0LAorICAgIDB4MmMzYTlkZTQsIDB4NTA3ODkyMGQsIDB4NmE1ZmNjOWIsIDB4NTQ3ZTQ2NjIsCisgICAgMHhmNjhkMTNjMiwgMHg5MGQ4YjhlOCwgMHgyZTM5Zjc1ZSwgMHg4MmMzYWZmNSwKKyAgICAweDlmNWQ4MGJlLCAweDY5ZDA5MzdjLCAweDZmZDUyZGE5LCAweGNmMjUxMmIzLAorICAgIDB4YzhhYzk5M2IsIDB4MTAxODdkYTcsIDB4ZTg5YzYzNmUsIDB4ZGIzYmJiN2IsCisgICAgMHhjZDI2NzgwOSwgMHg2ZTU5MThmNCwgMHhlYzlhYjcwMSwgMHg4MzRmOWFhOCwKKyAgICAweGU2OTU2ZTY1LCAweGFhZmZlNjdlLCAweDIxYmNjZjA4LCAweGVmMTVlOGU2LAorICAgIDB4YmFlNzliZDksIDB4NGE2ZjM2Y2UsIDB4ZWE5ZjA5ZDQsIDB4MjliMDdjZDYsCisgICAgMHgzMWE0YjJhZiwgMHgyYTNmMjMzMSwgMHhjNmE1OTQzMCwgMHgzNWEyNjZjMCwKKyAgICAweDc0NGViYzM3LCAweGZjODJjYWE2LCAweGUwOTBkMGIwLCAweDMzYTdkODE1LAorICAgIDB4ZjEwNDk4NGEsIDB4NDFlY2RhZjcsIDB4N2ZjZDUwMGUsIDB4MTc5MWY2MmYsCisgICAgMHg3NjRkZDY4ZCwgMHg0M2VmYjA0ZCwgMHhjY2FhNGQ1NCwgMHhlNDk2MDRkZiwKKyAgICAweDllZDFiNWUzLCAweDRjNmE4ODFiLCAweGMxMmMxZmI4LCAweDQ2NjU1MTdmLAorICAgIDB4OWQ1ZWVhMDQsIDB4MDE4YzM1NWQsIDB4ZmE4Nzc0NzMsIDB4ZmIwYjQxMmUsCisgICAgMHhiMzY3MWQ1YSwgMHg5MmRiZDI1MiwgMHhlOTEwNTYzMywgMHg2ZGQ2NDcxMywKKyAgICAweDlhZDc2MThjLCAweDM3YTEwYzdhLCAweDU5ZjgxNDhlLCAweGViMTMzYzg5LAorICAgIDB4Y2VhOTI3ZWUsIDB4Yjc2MWM5MzUsIDB4ZTExY2U1ZWQsIDB4N2E0N2IxM2MsCisgICAgMHg5Y2QyZGY1OSwgMHg1NWYyNzMzZiwgMHgxODE0Y2U3OSwgMHg3M2M3MzdiZiwKKyAgICAweDUzZjdjZGVhLCAweDVmZmRhYTViLCAweGRmM2Q2ZjE0LCAweDc4NDRkYjg2LAorICAgIDB4Y2FhZmYzODEsIDB4Yjk2OGM0M2UsIDB4MzgyNDM0MmMsIDB4YzJhMzQwNWYsCisgICAgMHgxNjFkYzM3MiwgMHhiY2UyMjUwYywgMHgyODNjNDk4YiwgMHhmZjBkOTU0MSwKKyAgICAweDM5YTgwMTcxLCAweDA4MGNiM2RlLCAweGQ4YjRlNDljLCAweDY0NTZjMTkwLAorICAgIDB4N2JjYjg0NjEsIDB4ZDUzMmI2NzAsIDB4NDg2YzVjNzQsIDB4ZDBiODU3NDIsCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBEMVsyNTZdID0geworICAgIDB4NTA1MWY0YTcsIDB4NTM3ZTQxNjUsIDB4YzMxYTE3YTQsIDB4OTYzYTI3NWUsCisgICAgMHhjYjNiYWI2YiwgMHhmMTFmOWQ0NSwgMHhhYmFjZmE1OCwgMHg5MzRiZTMwMywKKyAgICAweDU1MjAzMGZhLCAweGY2YWQ3NjZkLCAweDkxODhjYzc2LCAweDI1ZjUwMjRjLAorICAgIDB4ZmM0ZmU1ZDcsIDB4ZDdjNTJhY2IsIDB4ODAyNjM1NDQsIDB4OGZiNTYyYTMsCisgICAgMHg0OWRlYjE1YSwgMHg2NzI1YmExYiwgMHg5ODQ1ZWEwZSwgMHhlMTVkZmVjMCwKKyAgICAweDAyYzMyZjc1LCAweDEyODE0Y2YwLCAweGEzOGQ0Njk3LCAweGM2NmJkM2Y5LAorICAgIDB4ZTcwMzhmNWYsIDB4OTUxNTkyOWMsIDB4ZWJiZjZkN2EsIDB4ZGE5NTUyNTksCisgICAgMHgyZGQ0YmU4MywgMHhkMzU4NzQyMSwgMHgyOTQ5ZTA2OSwgMHg0NDhlYzljOCwKKyAgICAweDZhNzVjMjg5LCAweDc4ZjQ4ZTc5LCAweDZiOTk1ODNlLCAweGRkMjdiOTcxLAorICAgIDB4YjZiZWUxNGYsIDB4MTdmMDg4YWQsIDB4NjZjOTIwYWMsIDB4YjQ3ZGNlM2EsCisgICAgMHgxODYzZGY0YSwgMHg4MmU1MWEzMSwgMHg2MDk3NTEzMywgMHg0NTYyNTM3ZiwKKyAgICAweGUwYjE2NDc3LCAweDg0YmI2YmFlLCAweDFjZmU4MWEwLCAweDk0ZjkwODJiLAorICAgIDB4NTg3MDQ4NjgsIDB4MTk4ZjQ1ZmQsIDB4ODc5NGRlNmMsIDB4Yjc1MjdiZjgsCisgICAgMHgyM2FiNzNkMywgMHhlMjcyNGIwMiwgMHg1N2UzMWY4ZiwgMHgyYTY2NTVhYiwKKyAgICAweDA3YjJlYjI4LCAweDAzMmZiNWMyLCAweDlhODZjNTdiLCAweGE1ZDMzNzA4LAorICAgIDB4ZjIzMDI4ODcsIDB4YjIyM2JmYTUsIDB4YmEwMjAzNmEsIDB4NWNlZDE2ODIsCisgICAgMHgyYjhhY2YxYywgMHg5MmE3NzliNCwgMHhmMGYzMDdmMiwgMHhhMTRlNjllMiwKKyAgICAweGNkNjVkYWY0LCAweGQ1MDYwNWJlLCAweDFmZDEzNDYyLCAweDhhYzRhNmZlLAorICAgIDB4OWQzNDJlNTMsIDB4YTBhMmYzNTUsIDB4MzIwNThhZTEsIDB4NzVhNGY2ZWIsCisgICAgMHgzOTBiODNlYywgMHhhYTQwNjBlZiwgMHgwNjVlNzE5ZiwgMHg1MWJkNmUxMCwKKyAgICAweGY5M2UyMThhLCAweDNkOTZkZDA2LCAweGFlZGQzZTA1LCAweDQ2NGRlNmJkLAorICAgIDB4YjU5MTU0OGQsIDB4MDU3MWM0NWQsIDB4NmYwNDA2ZDQsIDB4ZmY2MDUwMTUsCisgICAgMHgyNDE5OThmYiwgMHg5N2Q2YmRlOSwgMHhjYzg5NDA0MywgMHg3NzY3ZDk5ZSwKKyAgICAweGJkYjBlODQyLCAweDg4MDc4OThiLCAweDM4ZTcxOTViLCAweGRiNzljOGVlLAorICAgIDB4NDdhMTdjMGEsIDB4ZTk3YzQyMGYsIDB4YzlmODg0MWUsIDB4MDAwMDAwMDAsCisgICAgMHg4MzA5ODA4NiwgMHg0ODMyMmJlZCwgMHhhYzFlMTE3MCwgMHg0ZTZjNWE3MiwKKyAgICAweGZiZmQwZWZmLCAweDU2MGY4NTM4LCAweDFlM2RhZWQ1LCAweDI3MzYyZDM5LAorICAgIDB4NjQwYTBmZDksIDB4MjE2ODVjYTYsIDB4ZDE5YjViNTQsIDB4M2EyNDM2MmUsCisgICAgMHhiMTBjMGE2NywgMHgwZjkzNTdlNywgMHhkMmI0ZWU5NiwgMHg5ZTFiOWI5MSwKKyAgICAweDRmODBjMGM1LCAweGEyNjFkYzIwLCAweDY5NWE3NzRiLCAweDE2MWMxMjFhLAorICAgIDB4MGFlMjkzYmEsIDB4ZTVjMGEwMmEsIDB4NDMzYzIyZTAsIDB4MWQxMjFiMTcsCisgICAgMHgwYjBlMDkwZCwgMHhhZGYyOGJjNywgMHhiOTJkYjZhOCwgMHhjODE0MWVhOSwKKyAgICAweDg1NTdmMTE5LCAweDRjYWY3NTA3LCAweGJiZWU5OWRkLCAweGZkYTM3ZjYwLAorICAgIDB4OWZmNzAxMjYsIDB4YmM1YzcyZjUsIDB4YzU0NDY2M2IsIDB4MzQ1YmZiN2UsCisgICAgMHg3NjhiNDMyOSwgMHhkY2NiMjNjNiwgMHg2OGI2ZWRmYywgMHg2M2I4ZTRmMSwKKyAgICAweGNhZDczMWRjLCAweDEwNDI2Mzg1LCAweDQwMTM5NzIyLCAweDIwODRjNjExLAorICAgIDB4N2Q4NTRhMjQsIDB4ZjhkMmJiM2QsIDB4MTFhZWY5MzIsIDB4NmRjNzI5YTEsCisgICAgMHg0YjFkOWUyZiwgMHhmM2RjYjIzMCwgMHhlYzBkODY1MiwgMHhkMDc3YzFlMywKKyAgICAweDZjMmJiMzE2LCAweDk5YTk3MGI5LCAweGZhMTE5NDQ4LCAweDIyNDdlOTY0LAorICAgIDB4YzRhOGZjOGMsIDB4MWFhMGYwM2YsIDB4ZDg1NjdkMmMsIDB4ZWYyMjMzOTAsCisgICAgMHhjNzg3NDk0ZSwgMHhjMWQ5MzhkMSwgMHhmZThjY2FhMiwgMHgzNjk4ZDQwYiwKKyAgICAweGNmYTZmNTgxLCAweDI4YTU3YWRlLCAweDI2ZGFiNzhlLCAweGE0M2ZhZGJmLAorICAgIDB4ZTQyYzNhOWQsIDB4MGQ1MDc4OTIsIDB4OWI2YTVmY2MsIDB4NjI1NDdlNDYsCisgICAgMHhjMmY2OGQxMywgMHhlODkwZDhiOCwgMHg1ZTJlMzlmNywgMHhmNTgyYzNhZiwKKyAgICAweGJlOWY1ZDgwLCAweDdjNjlkMDkzLCAweGE5NmZkNTJkLCAweGIzY2YyNTEyLAorICAgIDB4M2JjOGFjOTksIDB4YTcxMDE4N2QsIDB4NmVlODljNjMsIDB4N2JkYjNiYmIsCisgICAgMHgwOWNkMjY3OCwgMHhmNDZlNTkxOCwgMHgwMWVjOWFiNywgMHhhODgzNGY5YSwKKyAgICAweDY1ZTY5NTZlLCAweDdlYWFmZmU2LCAweDA4MjFiY2NmLCAweGU2ZWYxNWU4LAorICAgIDB4ZDliYWU3OWIsIDB4Y2U0YTZmMzYsIDB4ZDRlYTlmMDksIDB4ZDYyOWIwN2MsCisgICAgMHhhZjMxYTRiMiwgMHgzMTJhM2YyMywgMHgzMGM2YTU5NCwgMHhjMDM1YTI2NiwKKyAgICAweDM3NzQ0ZWJjLCAweGE2ZmM4MmNhLCAweGIwZTA5MGQwLCAweDE1MzNhN2Q4LAorICAgIDB4NGFmMTA0OTgsIDB4Zjc0MWVjZGEsIDB4MGU3ZmNkNTAsIDB4MmYxNzkxZjYsCisgICAgMHg4ZDc2NGRkNiwgMHg0ZDQzZWZiMCwgMHg1NGNjYWE0ZCwgMHhkZmU0OTYwNCwKKyAgICAweGUzOWVkMWI1LCAweDFiNGM2YTg4LCAweGI4YzEyYzFmLCAweDdmNDY2NTUxLAorICAgIDB4MDQ5ZDVlZWEsIDB4NWQwMThjMzUsIDB4NzNmYTg3NzQsIDB4MmVmYjBiNDEsCisgICAgMHg1YWIzNjcxZCwgMHg1MjkyZGJkMiwgMHgzM2U5MTA1NiwgMHgxMzZkZDY0NywKKyAgICAweDhjOWFkNzYxLCAweDdhMzdhMTBjLCAweDhlNTlmODE0LCAweDg5ZWIxMzNjLAorICAgIDB4ZWVjZWE5MjcsIDB4MzViNzYxYzksIDB4ZWRlMTFjZTUsIDB4M2M3YTQ3YjEsCisgICAgMHg1OTljZDJkZiwgMHgzZjU1ZjI3MywgMHg3OTE4MTRjZSwgMHhiZjczYzczNywKKyAgICAweGVhNTNmN2NkLCAweDViNWZmZGFhLCAweDE0ZGYzZDZmLCAweDg2Nzg0NGRiLAorICAgIDB4ODFjYWFmZjMsIDB4M2ViOTY4YzQsIDB4MmMzODI0MzQsIDB4NWZjMmEzNDAsCisgICAgMHg3MjE2MWRjMywgMHgwY2JjZTIyNSwgMHg4YjI4M2M0OSwgMHg0MWZmMGQ5NSwKKyAgICAweDcxMzlhODAxLCAweGRlMDgwY2IzLCAweDljZDhiNGU0LCAweDkwNjQ1NmMxLAorICAgIDB4NjE3YmNiODQsIDB4NzBkNTMyYjYsIDB4NzQ0ODZjNWMsIDB4NDJkMGI4NTcsCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBEMlsyNTZdID0geworICAgIDB4YTc1MDUxZjQsIDB4NjU1MzdlNDEsIDB4YTRjMzFhMTcsIDB4NWU5NjNhMjcsCisgICAgMHg2YmNiM2JhYiwgMHg0NWYxMWY5ZCwgMHg1OGFiYWNmYSwgMHgwMzkzNGJlMywKKyAgICAweGZhNTUyMDMwLCAweDZkZjZhZDc2LCAweDc2OTE4OGNjLCAweDRjMjVmNTAyLAorICAgIDB4ZDdmYzRmZTUsIDB4Y2JkN2M1MmEsIDB4NDQ4MDI2MzUsIDB4YTM4ZmI1NjIsCisgICAgMHg1YTQ5ZGViMSwgMHgxYjY3MjViYSwgMHgwZTk4NDVlYSwgMHhjMGUxNWRmZSwKKyAgICAweDc1MDJjMzJmLCAweGYwMTI4MTRjLCAweDk3YTM4ZDQ2LCAweGY5YzY2YmQzLAorICAgIDB4NWZlNzAzOGYsIDB4OWM5NTE1OTIsIDB4N2FlYmJmNmQsIDB4NTlkYTk1NTIsCisgICAgMHg4MzJkZDRiZSwgMHgyMWQzNTg3NCwgMHg2OTI5NDllMCwgMHhjODQ0OGVjOSwKKyAgICAweDg5NmE3NWMyLCAweDc5NzhmNDhlLCAweDNlNmI5OTU4LCAweDcxZGQyN2I5LAorICAgIDB4NGZiNmJlZTEsIDB4YWQxN2YwODgsIDB4YWM2NmM5MjAsIDB4M2FiNDdkY2UsCisgICAgMHg0YTE4NjNkZiwgMHgzMTgyZTUxYSwgMHgzMzYwOTc1MSwgMHg3ZjQ1NjI1MywKKyAgICAweDc3ZTBiMTY0LCAweGFlODRiYjZiLCAweGEwMWNmZTgxLCAweDJiOTRmOTA4LAorICAgIDB4Njg1ODcwNDgsIDB4ZmQxOThmNDUsIDB4NmM4Nzk0ZGUsIDB4ZjhiNzUyN2IsCisgICAgMHhkMzIzYWI3MywgMHgwMmUyNzI0YiwgMHg4ZjU3ZTMxZiwgMHhhYjJhNjY1NSwKKyAgICAweDI4MDdiMmViLCAweGMyMDMyZmI1LCAweDdiOWE4NmM1LCAweDA4YTVkMzM3LAorICAgIDB4ODdmMjMwMjgsIDB4YTViMjIzYmYsIDB4NmFiYTAyMDMsIDB4ODI1Y2VkMTYsCisgICAgMHgxYzJiOGFjZiwgMHhiNDkyYTc3OSwgMHhmMmYwZjMwNywgMHhlMmExNGU2OSwKKyAgICAweGY0Y2Q2NWRhLCAweGJlZDUwNjA1LCAweDYyMWZkMTM0LCAweGZlOGFjNGE2LAorICAgIDB4NTM5ZDM0MmUsIDB4NTVhMGEyZjMsIDB4ZTEzMjA1OGEsIDB4ZWI3NWE0ZjYsCisgICAgMHhlYzM5MGI4MywgMHhlZmFhNDA2MCwgMHg5ZjA2NWU3MSwgMHgxMDUxYmQ2ZSwKKyAgICAweDhhZjkzZTIxLCAweDA2M2Q5NmRkLCAweDA1YWVkZDNlLCAweGJkNDY0ZGU2LAorICAgIDB4OGRiNTkxNTQsIDB4NWQwNTcxYzQsIDB4ZDQ2ZjA0MDYsIDB4MTVmZjYwNTAsCisgICAgMHhmYjI0MTk5OCwgMHhlOTk3ZDZiZCwgMHg0M2NjODk0MCwgMHg5ZTc3NjdkOSwKKyAgICAweDQyYmRiMGU4LCAweDhiODgwNzg5LCAweDViMzhlNzE5LCAweGVlZGI3OWM4LAorICAgIDB4MGE0N2ExN2MsIDB4MGZlOTdjNDIsIDB4MWVjOWY4ODQsIDB4MDAwMDAwMDAsCisgICAgMHg4NjgzMDk4MCwgMHhlZDQ4MzIyYiwgMHg3MGFjMWUxMSwgMHg3MjRlNmM1YSwKKyAgICAweGZmZmJmZDBlLCAweDM4NTYwZjg1LCAweGQ1MWUzZGFlLCAweDM5MjczNjJkLAorICAgIDB4ZDk2NDBhMGYsIDB4YTYyMTY4NWMsIDB4NTRkMTliNWIsIDB4MmUzYTI0MzYsCisgICAgMHg2N2IxMGMwYSwgMHhlNzBmOTM1NywgMHg5NmQyYjRlZSwgMHg5MTllMWI5YiwKKyAgICAweGM1NGY4MGMwLCAweDIwYTI2MWRjLCAweDRiNjk1YTc3LCAweDFhMTYxYzEyLAorICAgIDB4YmEwYWUyOTMsIDB4MmFlNWMwYTAsIDB4ZTA0MzNjMjIsIDB4MTcxZDEyMWIsCisgICAgMHgwZDBiMGUwOSwgMHhjN2FkZjI4YiwgMHhhOGI5MmRiNiwgMHhhOWM4MTQxZSwKKyAgICAweDE5ODU1N2YxLCAweDA3NGNhZjc1LCAweGRkYmJlZTk5LCAweDYwZmRhMzdmLAorICAgIDB4MjY5ZmY3MDEsIDB4ZjViYzVjNzIsIDB4M2JjNTQ0NjYsIDB4N2UzNDViZmIsCisgICAgMHgyOTc2OGI0MywgMHhjNmRjY2IyMywgMHhmYzY4YjZlZCwgMHhmMTYzYjhlNCwKKyAgICAweGRjY2FkNzMxLCAweDg1MTA0MjYzLCAweDIyNDAxMzk3LCAweDExMjA4NGM2LAorICAgIDB4MjQ3ZDg1NGEsIDB4M2RmOGQyYmIsIDB4MzIxMWFlZjksIDB4YTE2ZGM3MjksCisgICAgMHgyZjRiMWQ5ZSwgMHgzMGYzZGNiMiwgMHg1MmVjMGQ4NiwgMHhlM2QwNzdjMSwKKyAgICAweDE2NmMyYmIzLCAweGI5OTlhOTcwLCAweDQ4ZmExMTk0LCAweDY0MjI0N2U5LAorICAgIDB4OGNjNGE4ZmMsIDB4M2YxYWEwZjAsIDB4MmNkODU2N2QsIDB4OTBlZjIyMzMsCisgICAgMHg0ZWM3ODc0OSwgMHhkMWMxZDkzOCwgMHhhMmZlOGNjYSwgMHgwYjM2OThkNCwKKyAgICAweDgxY2ZhNmY1LCAweGRlMjhhNTdhLCAweDhlMjZkYWI3LCAweGJmYTQzZmFkLAorICAgIDB4OWRlNDJjM2EsIDB4OTIwZDUwNzgsIDB4Y2M5YjZhNWYsIDB4NDY2MjU0N2UsCisgICAgMHgxM2MyZjY4ZCwgMHhiOGU4OTBkOCwgMHhmNzVlMmUzOSwgMHhhZmY1ODJjMywKKyAgICAweDgwYmU5ZjVkLCAweDkzN2M2OWQwLCAweDJkYTk2ZmQ1LCAweDEyYjNjZjI1LAorICAgIDB4OTkzYmM4YWMsIDB4N2RhNzEwMTgsIDB4NjM2ZWU4OWMsIDB4YmI3YmRiM2IsCisgICAgMHg3ODA5Y2QyNiwgMHgxOGY0NmU1OSwgMHhiNzAxZWM5YSwgMHg5YWE4ODM0ZiwKKyAgICAweDZlNjVlNjk1LCAweGU2N2VhYWZmLCAweGNmMDgyMWJjLCAweGU4ZTZlZjE1LAorICAgIDB4OWJkOWJhZTcsIDB4MzZjZTRhNmYsIDB4MDlkNGVhOWYsIDB4N2NkNjI5YjAsCisgICAgMHhiMmFmMzFhNCwgMHgyMzMxMmEzZiwgMHg5NDMwYzZhNSwgMHg2NmMwMzVhMiwKKyAgICAweGJjMzc3NDRlLCAweGNhYTZmYzgyLCAweGQwYjBlMDkwLCAweGQ4MTUzM2E3LAorICAgIDB4OTg0YWYxMDQsIDB4ZGFmNzQxZWMsIDB4NTAwZTdmY2QsIDB4ZjYyZjE3OTEsCisgICAgMHhkNjhkNzY0ZCwgMHhiMDRkNDNlZiwgMHg0ZDU0Y2NhYSwgMHgwNGRmZTQ5NiwKKyAgICAweGI1ZTM5ZWQxLCAweDg4MWI0YzZhLCAweDFmYjhjMTJjLCAweDUxN2Y0NjY1LAorICAgIDB4ZWEwNDlkNWUsIDB4MzU1ZDAxOGMsIDB4NzQ3M2ZhODcsIDB4NDEyZWZiMGIsCisgICAgMHgxZDVhYjM2NywgMHhkMjUyOTJkYiwgMHg1NjMzZTkxMCwgMHg0NzEzNmRkNiwKKyAgICAweDYxOGM5YWQ3LCAweDBjN2EzN2ExLCAweDE0OGU1OWY4LCAweDNjODllYjEzLAorICAgIDB4MjdlZWNlYTksIDB4YzkzNWI3NjEsIDB4ZTVlZGUxMWMsIDB4YjEzYzdhNDcsCisgICAgMHhkZjU5OWNkMiwgMHg3MzNmNTVmMiwgMHhjZTc5MTgxNCwgMHgzN2JmNzNjNywKKyAgICAweGNkZWE1M2Y3LCAweGFhNWI1ZmZkLCAweDZmMTRkZjNkLCAweGRiODY3ODQ0LAorICAgIDB4ZjM4MWNhYWYsIDB4YzQzZWI5NjgsIDB4MzQyYzM4MjQsIDB4NDA1ZmMyYTMsCisgICAgMHhjMzcyMTYxZCwgMHgyNTBjYmNlMiwgMHg0OThiMjgzYywgMHg5NTQxZmYwZCwKKyAgICAweDAxNzEzOWE4LCAweGIzZGUwODBjLCAweGU0OWNkOGI0LCAweGMxOTA2NDU2LAorICAgIDB4ODQ2MTdiY2IsIDB4YjY3MGQ1MzIsIDB4NWM3NDQ4NmMsIDB4NTc0MmQwYjgsCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBEM1syNTZdID0geworICAgIDB4ZjRhNzUwNTEsIDB4NDE2NTUzN2UsIDB4MTdhNGMzMWEsIDB4Mjc1ZTk2M2EsCisgICAgMHhhYjZiY2IzYiwgMHg5ZDQ1ZjExZiwgMHhmYTU4YWJhYywgMHhlMzAzOTM0YiwKKyAgICAweDMwZmE1NTIwLCAweDc2NmRmNmFkLCAweGNjNzY5MTg4LCAweDAyNGMyNWY1LAorICAgIDB4ZTVkN2ZjNGYsIDB4MmFjYmQ3YzUsIDB4MzU0NDgwMjYsIDB4NjJhMzhmYjUsCisgICAgMHhiMTVhNDlkZSwgMHhiYTFiNjcyNSwgMHhlYTBlOTg0NSwgMHhmZWMwZTE1ZCwKKyAgICAweDJmNzUwMmMzLCAweDRjZjAxMjgxLCAweDQ2OTdhMzhkLCAweGQzZjljNjZiLAorICAgIDB4OGY1ZmU3MDMsIDB4OTI5Yzk1MTUsIDB4NmQ3YWViYmYsIDB4NTI1OWRhOTUsCisgICAgMHhiZTgzMmRkNCwgMHg3NDIxZDM1OCwgMHhlMDY5Mjk0OSwgMHhjOWM4NDQ4ZSwKKyAgICAweGMyODk2YTc1LCAweDhlNzk3OGY0LCAweDU4M2U2Yjk5LCAweGI5NzFkZDI3LAorICAgIDB4ZTE0ZmI2YmUsIDB4ODhhZDE3ZjAsIDB4MjBhYzY2YzksIDB4Y2UzYWI0N2QsCisgICAgMHhkZjRhMTg2MywgMHgxYTMxODJlNSwgMHg1MTMzNjA5NywgMHg1MzdmNDU2MiwKKyAgICAweDY0NzdlMGIxLCAweDZiYWU4NGJiLCAweDgxYTAxY2ZlLCAweDA4MmI5NGY5LAorICAgIDB4NDg2ODU4NzAsIDB4NDVmZDE5OGYsIDB4ZGU2Yzg3OTQsIDB4N2JmOGI3NTIsCisgICAgMHg3M2QzMjNhYiwgMHg0YjAyZTI3MiwgMHgxZjhmNTdlMywgMHg1NWFiMmE2NiwKKyAgICAweGViMjgwN2IyLCAweGI1YzIwMzJmLCAweGM1N2I5YTg2LCAweDM3MDhhNWQzLAorICAgIDB4Mjg4N2YyMzAsIDB4YmZhNWIyMjMsIDB4MDM2YWJhMDIsIDB4MTY4MjVjZWQsCisgICAgMHhjZjFjMmI4YSwgMHg3OWI0OTJhNywgMHgwN2YyZjBmMywgMHg2OWUyYTE0ZSwKKyAgICAweGRhZjRjZDY1LCAweDA1YmVkNTA2LCAweDM0NjIxZmQxLCAweGE2ZmU4YWM0LAorICAgIDB4MmU1MzlkMzQsIDB4ZjM1NWEwYTIsIDB4OGFlMTMyMDUsIDB4ZjZlYjc1YTQsCisgICAgMHg4M2VjMzkwYiwgMHg2MGVmYWE0MCwgMHg3MTlmMDY1ZSwgMHg2ZTEwNTFiZCwKKyAgICAweDIxOGFmOTNlLCAweGRkMDYzZDk2LCAweDNlMDVhZWRkLCAweGU2YmQ0NjRkLAorICAgIDB4NTQ4ZGI1OTEsIDB4YzQ1ZDA1NzEsIDB4MDZkNDZmMDQsIDB4NTAxNWZmNjAsCisgICAgMHg5OGZiMjQxOSwgMHhiZGU5OTdkNiwgMHg0MDQzY2M4OSwgMHhkOTllNzc2NywKKyAgICAweGU4NDJiZGIwLCAweDg5OGI4ODA3LCAweDE5NWIzOGU3LCAweGM4ZWVkYjc5LAorICAgIDB4N2MwYTQ3YTEsIDB4NDIwZmU5N2MsIDB4ODQxZWM5ZjgsIDB4MDAwMDAwMDAsCisgICAgMHg4MDg2ODMwOSwgMHgyYmVkNDgzMiwgMHgxMTcwYWMxZSwgMHg1YTcyNGU2YywKKyAgICAweDBlZmZmYmZkLCAweDg1Mzg1NjBmLCAweGFlZDUxZTNkLCAweDJkMzkyNzM2LAorICAgIDB4MGZkOTY0MGEsIDB4NWNhNjIxNjgsIDB4NWI1NGQxOWIsIDB4MzYyZTNhMjQsCisgICAgMHgwYTY3YjEwYywgMHg1N2U3MGY5MywgMHhlZTk2ZDJiNCwgMHg5YjkxOWUxYiwKKyAgICAweGMwYzU0ZjgwLCAweGRjMjBhMjYxLCAweDc3NGI2OTVhLCAweDEyMWExNjFjLAorICAgIDB4OTNiYTBhZTIsIDB4YTAyYWU1YzAsIDB4MjJlMDQzM2MsIDB4MWIxNzFkMTIsCisgICAgMHgwOTBkMGIwZSwgMHg4YmM3YWRmMiwgMHhiNmE4YjkyZCwgMHgxZWE5YzgxNCwKKyAgICAweGYxMTk4NTU3LCAweDc1MDc0Y2FmLCAweDk5ZGRiYmVlLCAweDdmNjBmZGEzLAorICAgIDB4MDEyNjlmZjcsIDB4NzJmNWJjNWMsIDB4NjYzYmM1NDQsIDB4ZmI3ZTM0NWIsCisgICAgMHg0MzI5NzY4YiwgMHgyM2M2ZGNjYiwgMHhlZGZjNjhiNiwgMHhlNGYxNjNiOCwKKyAgICAweDMxZGNjYWQ3LCAweDYzODUxMDQyLCAweDk3MjI0MDEzLCAweGM2MTEyMDg0LAorICAgIDB4NGEyNDdkODUsIDB4YmIzZGY4ZDIsIDB4ZjkzMjExYWUsIDB4MjlhMTZkYzcsCisgICAgMHg5ZTJmNGIxZCwgMHhiMjMwZjNkYywgMHg4NjUyZWMwZCwgMHhjMWUzZDA3NywKKyAgICAweGIzMTY2YzJiLCAweDcwYjk5OWE5LCAweDk0NDhmYTExLCAweGU5NjQyMjQ3LAorICAgIDB4ZmM4Y2M0YTgsIDB4ZjAzZjFhYTAsIDB4N2QyY2Q4NTYsIDB4MzM5MGVmMjIsCisgICAgMHg0OTRlYzc4NywgMHgzOGQxYzFkOSwgMHhjYWEyZmU4YywgMHhkNDBiMzY5OCwKKyAgICAweGY1ODFjZmE2LCAweDdhZGUyOGE1LCAweGI3OGUyNmRhLCAweGFkYmZhNDNmLAorICAgIDB4M2E5ZGU0MmMsIDB4Nzg5MjBkNTAsIDB4NWZjYzliNmEsIDB4N2U0NjYyNTQsCisgICAgMHg4ZDEzYzJmNiwgMHhkOGI4ZTg5MCwgMHgzOWY3NWUyZSwgMHhjM2FmZjU4MiwKKyAgICAweDVkODBiZTlmLCAweGQwOTM3YzY5LCAweGQ1MmRhOTZmLCAweDI1MTJiM2NmLAorICAgIDB4YWM5OTNiYzgsIDB4MTg3ZGE3MTAsIDB4OWM2MzZlZTgsIDB4M2JiYjdiZGIsCisgICAgMHgyNjc4MDljZCwgMHg1OTE4ZjQ2ZSwgMHg5YWI3MDFlYywgMHg0ZjlhYTg4MywKKyAgICAweDk1NmU2NWU2LCAweGZmZTY3ZWFhLCAweGJjY2YwODIxLCAweDE1ZThlNmVmLAorICAgIDB4ZTc5YmQ5YmEsIDB4NmYzNmNlNGEsIDB4OWYwOWQ0ZWEsIDB4YjA3Y2Q2MjksCisgICAgMHhhNGIyYWYzMSwgMHgzZjIzMzEyYSwgMHhhNTk0MzBjNiwgMHhhMjY2YzAzNSwKKyAgICAweDRlYmMzNzc0LCAweDgyY2FhNmZjLCAweDkwZDBiMGUwLCAweGE3ZDgxNTMzLAorICAgIDB4MDQ5ODRhZjEsIDB4ZWNkYWY3NDEsIDB4Y2Q1MDBlN2YsIDB4OTFmNjJmMTcsCisgICAgMHg0ZGQ2OGQ3NiwgMHhlZmIwNGQ0MywgMHhhYTRkNTRjYywgMHg5NjA0ZGZlNCwKKyAgICAweGQxYjVlMzllLCAweDZhODgxYjRjLCAweDJjMWZiOGMxLCAweDY1NTE3ZjQ2LAorICAgIDB4NWVlYTA0OWQsIDB4OGMzNTVkMDEsIDB4ODc3NDczZmEsIDB4MGI0MTJlZmIsCisgICAgMHg2NzFkNWFiMywgMHhkYmQyNTI5MiwgMHgxMDU2MzNlOSwgMHhkNjQ3MTM2ZCwKKyAgICAweGQ3NjE4YzlhLCAweGExMGM3YTM3LCAweGY4MTQ4ZTU5LCAweDEzM2M4OWViLAorICAgIDB4YTkyN2VlY2UsIDB4NjFjOTM1YjcsIDB4MWNlNWVkZTEsIDB4NDdiMTNjN2EsCisgICAgMHhkMmRmNTk5YywgMHhmMjczM2Y1NSwgMHgxNGNlNzkxOCwgMHhjNzM3YmY3MywKKyAgICAweGY3Y2RlYTUzLCAweGZkYWE1YjVmLCAweDNkNmYxNGRmLCAweDQ0ZGI4Njc4LAorICAgIDB4YWZmMzgxY2EsIDB4NjhjNDNlYjksIDB4MjQzNDJjMzgsIDB4YTM0MDVmYzIsCisgICAgMHgxZGMzNzIxNiwgMHhlMjI1MGNiYywgMHgzYzQ5OGIyOCwgMHgwZDk1NDFmZiwKKyAgICAweGE4MDE3MTM5LCAweDBjYjNkZTA4LCAweGI0ZTQ5Y2Q4LCAweDU2YzE5MDY0LAorICAgIDB4Y2I4NDYxN2IsIDB4MzJiNjcwZDUsIDB4NmM1Yzc0NDgsIDB4Yjg1NzQyZDAsCit9OworI2RlZmluZSBBRERfUk9VTkRfS0VZXzQgKGJsb2NrWzBdXj0qa2V5c2NoZWQrKywgYmxvY2tbMV1ePSprZXlzY2hlZCsrLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tbMl1ePSprZXlzY2hlZCsrLCBibG9ja1szXV49KmtleXNjaGVkKyspCisjZGVmaW5lIEFERF9ST1VORF9LRVlfNiAoYmxvY2tbMF1ePSprZXlzY2hlZCsrLCBibG9ja1sxXV49KmtleXNjaGVkKyssIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja1syXV49KmtleXNjaGVkKyssIGJsb2NrWzNdXj0qa2V5c2NoZWQrKywgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrWzRdXj0qa2V5c2NoZWQrKywgYmxvY2tbNV1ePSprZXlzY2hlZCsrKQorI2RlZmluZSBBRERfUk9VTkRfS0VZXzggKGJsb2NrWzBdXj0qa2V5c2NoZWQrKywgYmxvY2tbMV1ePSprZXlzY2hlZCsrLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tbMl1ePSprZXlzY2hlZCsrLCBibG9ja1szXV49KmtleXNjaGVkKyssIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja1s0XV49KmtleXNjaGVkKyssIGJsb2NrWzVdXj0qa2V5c2NoZWQrKywgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrWzZdXj0qa2V5c2NoZWQrKywgYmxvY2tbN11ePSprZXlzY2hlZCsrKQorI2RlZmluZSBNT1ZFV09SRChpKSAoIGJsb2NrW2ldID0gbmV3c3RhdGVbaV0gKQorI3VuZGVmIE1BS0VXT1JECisjZGVmaW5lIE1BS0VXT1JEKGkpICggbmV3c3RhdGVbaV0gPSAoRTBbKGJsb2NrW2ldID4+IDI0KSAmIDB4RkZdIF4gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUxWyhibG9ja1soaStDMSklTmJdID4+IDE2KSAmIDB4RkZdIF4gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUyWyhibG9ja1soaStDMiklTmJdID4+IDgpICYgMHhGRl0gXiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTNbYmxvY2tbKGkrQzMpJU5iXSAmIDB4RkZdKSApCisjZGVmaW5lIExBU1RXT1JEKGkpICggbmV3c3RhdGVbaV0gPSAoU2JveFsoYmxvY2tbaV0gPj4gMjQpICYgMHhGRl0gPDwgMjQpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNib3hbKGJsb2NrWyhpK0MxKSVOYl0gPj4gMTYpICYgMHhGRl0gPDwgMTYpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNib3hbKGJsb2NrWyhpK0MyKSVOYl0gPj4gIDgpICYgMHhGRl0gPDwgIDgpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNib3hbKGJsb2NrWyhpK0MzKSVOYl0gICAgICApICYgMHhGRl0gICAgICApICkKK3N0YXRpYyB2b2lkIGFlc19lbmNyeXB0X25iXzQoQUVTQ29udGV4dCAqIGN0eCwgdW5zaWduZWQgaW50ICogYmxvY2spCit7CisgICAgaW50IGk7CisgICAgc3RhdGljIGNvbnN0IGludCBDMSA9IDEsIEMyID0gMiwgQzMgPSAzLCBOYiA9IDQ7CisgICAgdW5zaWduZWQgaW50ICprZXlzY2hlZCA9IGN0eC0+a2V5c2NoZWQ7CisgICAgdW5zaWduZWQgaW50IG5ld3N0YXRlWzRdOworICAgIGZvciAoaSA9IDA7IGkgPCBjdHgtPk5yIC0gMTsgaSsrKSB7CisgICAgICAgIEFERF9ST1VORF9LRVlfNDsKKyAgICAgICAgTUFLRVdPUkQoMCk7CisgICAgICAgIE1BS0VXT1JEKDEpOworICAgICAgICBNQUtFV09SRCgyKTsKKyAgICAgICAgTUFLRVdPUkQoMyk7CisgICAgICAgIE1PVkVXT1JEKDApOworICAgICAgICBNT1ZFV09SRCgxKTsKKyAgICAgICAgTU9WRVdPUkQoMik7CisgICAgICAgIE1PVkVXT1JEKDMpOworICAgIH0KKyAgICBBRERfUk9VTkRfS0VZXzQ7CisgICAgTEFTVFdPUkQoMCk7CisgICAgTEFTVFdPUkQoMSk7CisgICAgTEFTVFdPUkQoMik7CisgICAgTEFTVFdPUkQoMyk7CisgICAgTU9WRVdPUkQoMCk7CisgICAgTU9WRVdPUkQoMSk7CisgICAgTU9WRVdPUkQoMik7CisgICAgTU9WRVdPUkQoMyk7CisgICAgQUREX1JPVU5EX0tFWV80OworfQorc3RhdGljIHZvaWQgYWVzX2VuY3J5cHRfbmJfNihBRVNDb250ZXh0ICogY3R4LCB1bnNpZ25lZCBpbnQgKiBibG9jaykKK3sKKyAgICBpbnQgaTsKKyAgICBzdGF0aWMgY29uc3QgaW50IEMxID0gMSwgQzIgPSAyLCBDMyA9IDMsIE5iID0gNjsKKyAgICB1bnNpZ25lZCBpbnQgKmtleXNjaGVkID0gY3R4LT5rZXlzY2hlZDsKKyAgICB1bnNpZ25lZCBpbnQgbmV3c3RhdGVbNl07CisgICAgZm9yIChpID0gMDsgaSA8IGN0eC0+TnIgLSAxOyBpKyspIHsKKyAgICAgICAgQUREX1JPVU5EX0tFWV82OworICAgICAgICBNQUtFV09SRCgwKTsKKyAgICAgICAgTUFLRVdPUkQoMSk7CisgICAgICAgIE1BS0VXT1JEKDIpOworICAgICAgICBNQUtFV09SRCgzKTsKKyAgICAgICAgTUFLRVdPUkQoNCk7CisgICAgICAgIE1BS0VXT1JEKDUpOworICAgICAgICBNT1ZFV09SRCgwKTsKKyAgICAgICAgTU9WRVdPUkQoMSk7CisgICAgICAgIE1PVkVXT1JEKDIpOworICAgICAgICBNT1ZFV09SRCgzKTsKKyAgICAgICAgTU9WRVdPUkQoNCk7CisgICAgICAgIE1PVkVXT1JEKDUpOworICAgIH0KKyAgICBBRERfUk9VTkRfS0VZXzY7CisgICAgTEFTVFdPUkQoMCk7CisgICAgTEFTVFdPUkQoMSk7CisgICAgTEFTVFdPUkQoMik7CisgICAgTEFTVFdPUkQoMyk7CisgICAgTEFTVFdPUkQoNCk7CisgICAgTEFTVFdPUkQoNSk7CisgICAgTU9WRVdPUkQoMCk7CisgICAgTU9WRVdPUkQoMSk7CisgICAgTU9WRVdPUkQoMik7CisgICAgTU9WRVdPUkQoMyk7CisgICAgTU9WRVdPUkQoNCk7CisgICAgTU9WRVdPUkQoNSk7CisgICAgQUREX1JPVU5EX0tFWV82OworfQorc3RhdGljIHZvaWQgYWVzX2VuY3J5cHRfbmJfOChBRVNDb250ZXh0ICogY3R4LCB1bnNpZ25lZCBpbnQgKiBibG9jaykKK3sKKyAgICBpbnQgaTsKKyAgICBzdGF0aWMgY29uc3QgaW50IEMxID0gMSwgQzIgPSAzLCBDMyA9IDQsIE5iID0gODsKKyAgICB1bnNpZ25lZCBpbnQgKmtleXNjaGVkID0gY3R4LT5rZXlzY2hlZDsKKyAgICB1bnNpZ25lZCBpbnQgbmV3c3RhdGVbOF07CisgICAgZm9yIChpID0gMDsgaSA8IGN0eC0+TnIgLSAxOyBpKyspIHsKKyAgICAgICAgQUREX1JPVU5EX0tFWV84OworICAgICAgICBNQUtFV09SRCgwKTsKKyAgICAgICAgTUFLRVdPUkQoMSk7CisgICAgICAgIE1BS0VXT1JEKDIpOworICAgICAgICBNQUtFV09SRCgzKTsKKyAgICAgICAgTUFLRVdPUkQoNCk7CisgICAgICAgIE1BS0VXT1JEKDUpOworICAgICAgICBNQUtFV09SRCg2KTsKKyAgICAgICAgTUFLRVdPUkQoNyk7CisgICAgICAgIE1PVkVXT1JEKDApOworICAgICAgICBNT1ZFV09SRCgxKTsKKyAgICAgICAgTU9WRVdPUkQoMik7CisgICAgICAgIE1PVkVXT1JEKDMpOworICAgICAgICBNT1ZFV09SRCg0KTsKKyAgICAgICAgTU9WRVdPUkQoNSk7CisgICAgICAgIE1PVkVXT1JEKDYpOworICAgICAgICBNT1ZFV09SRCg3KTsKKyAgICB9CisgICAgQUREX1JPVU5EX0tFWV84OworICAgIExBU1RXT1JEKDApOworICAgIExBU1RXT1JEKDEpOworICAgIExBU1RXT1JEKDIpOworICAgIExBU1RXT1JEKDMpOworICAgIExBU1RXT1JEKDQpOworICAgIExBU1RXT1JEKDUpOworICAgIExBU1RXT1JEKDYpOworICAgIExBU1RXT1JEKDcpOworICAgIE1PVkVXT1JEKDApOworICAgIE1PVkVXT1JEKDEpOworICAgIE1PVkVXT1JEKDIpOworICAgIE1PVkVXT1JEKDMpOworICAgIE1PVkVXT1JEKDQpOworICAgIE1PVkVXT1JEKDUpOworICAgIE1PVkVXT1JEKDYpOworICAgIE1PVkVXT1JEKDcpOworICAgIEFERF9ST1VORF9LRVlfODsKK30KKyN1bmRlZiBNQUtFV09SRAorI3VuZGVmIExBU1RXT1JECisjZGVmaW5lIE1BS0VXT1JEKGkpICggbmV3c3RhdGVbaV0gPSAoRDBbKGJsb2NrW2ldID4+IDI0KSAmIDB4RkZdIF4gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQxWyhibG9ja1soaStDMSklTmJdID4+IDE2KSAmIDB4RkZdIF4gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQyWyhibG9ja1soaStDMiklTmJdID4+IDgpICYgMHhGRl0gXiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNbYmxvY2tbKGkrQzMpJU5iXSAmIDB4RkZdKSApCisjZGVmaW5lIExBU1RXT1JEKGkpIChuZXdzdGF0ZVtpXSA9IChTYm94aW52WyhibG9ja1tpXSA+PiAyNCkgJiAweEZGXSA8PCAyNCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTYm94aW52WyhibG9ja1soaStDMSklTmJdID4+IDE2KSAmIDB4RkZdIDw8IDE2KSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNib3hpbnZbKGJsb2NrWyhpK0MyKSVOYl0gPj4gIDgpICYgMHhGRl0gPDwgIDgpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU2JveGludlsoYmxvY2tbKGkrQzMpJU5iXSAgICAgICkgJiAweEZGXSAgICAgICkgKQorc3RhdGljIHZvaWQgYWVzX2RlY3J5cHRfbmJfNChBRVNDb250ZXh0ICogY3R4LCB1bnNpZ25lZCBpbnQgKiBibG9jaykKK3sKKyAgICBpbnQgaTsKKyAgICBzdGF0aWMgY29uc3QgaW50IEMxID0gNCAtIDEsIEMyID0gNCAtIDIsIEMzID0gNCAtIDMsIE5iID0gNDsKKyAgICB1bnNpZ25lZCBpbnQgKmtleXNjaGVkID0gY3R4LT5pbnZrZXlzY2hlZDsKKyAgICB1bnNpZ25lZCBpbnQgbmV3c3RhdGVbNF07CisgICAgZm9yIChpID0gMDsgaSA8IGN0eC0+TnIgLSAxOyBpKyspIHsKKyAgICAgICAgQUREX1JPVU5EX0tFWV80OworICAgICAgICBNQUtFV09SRCgwKTsKKyAgICAgICAgTUFLRVdPUkQoMSk7CisgICAgICAgIE1BS0VXT1JEKDIpOworICAgICAgICBNQUtFV09SRCgzKTsKKyAgICAgICAgTU9WRVdPUkQoMCk7CisgICAgICAgIE1PVkVXT1JEKDEpOworICAgICAgICBNT1ZFV09SRCgyKTsKKyAgICAgICAgTU9WRVdPUkQoMyk7CisgICAgfQorICAgIEFERF9ST1VORF9LRVlfNDsKKyAgICBMQVNUV09SRCgwKTsKKyAgICBMQVNUV09SRCgxKTsKKyAgICBMQVNUV09SRCgyKTsKKyAgICBMQVNUV09SRCgzKTsKKyAgICBNT1ZFV09SRCgwKTsKKyAgICBNT1ZFV09SRCgxKTsKKyAgICBNT1ZFV09SRCgyKTsKKyAgICBNT1ZFV09SRCgzKTsKKyAgICBBRERfUk9VTkRfS0VZXzQ7Cit9CitzdGF0aWMgdm9pZCBhZXNfZGVjcnlwdF9uYl82KEFFU0NvbnRleHQgKiBjdHgsIHVuc2lnbmVkIGludCAqIGJsb2NrKQoreworICAgIGludCBpOworICAgIHN0YXRpYyBjb25zdCBpbnQgQzEgPSA2IC0gMSwgQzIgPSA2IC0gMiwgQzMgPSA2IC0gMywgTmIgPSA2OworICAgIHVuc2lnbmVkIGludCAqa2V5c2NoZWQgPSBjdHgtPmludmtleXNjaGVkOworICAgIHVuc2lnbmVkIGludCBuZXdzdGF0ZVs2XTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgY3R4LT5OciAtIDE7IGkrKykgeworICAgICAgICBBRERfUk9VTkRfS0VZXzY7CisgICAgICAgIE1BS0VXT1JEKDApOworICAgICAgICBNQUtFV09SRCgxKTsKKyAgICAgICAgTUFLRVdPUkQoMik7CisgICAgICAgIE1BS0VXT1JEKDMpOworICAgICAgICBNQUtFV09SRCg0KTsKKyAgICAgICAgTUFLRVdPUkQoNSk7CisgICAgICAgIE1PVkVXT1JEKDApOworICAgICAgICBNT1ZFV09SRCgxKTsKKyAgICAgICAgTU9WRVdPUkQoMik7CisgICAgICAgIE1PVkVXT1JEKDMpOworICAgICAgICBNT1ZFV09SRCg0KTsKKyAgICAgICAgTU9WRVdPUkQoNSk7CisgICAgfQorICAgIEFERF9ST1VORF9LRVlfNjsKKyAgICBMQVNUV09SRCgwKTsKKyAgICBMQVNUV09SRCgxKTsKKyAgICBMQVNUV09SRCgyKTsKKyAgICBMQVNUV09SRCgzKTsKKyAgICBMQVNUV09SRCg0KTsKKyAgICBMQVNUV09SRCg1KTsKKyAgICBNT1ZFV09SRCgwKTsKKyAgICBNT1ZFV09SRCgxKTsKKyAgICBNT1ZFV09SRCgyKTsKKyAgICBNT1ZFV09SRCgzKTsKKyAgICBNT1ZFV09SRCg0KTsKKyAgICBNT1ZFV09SRCg1KTsKKyAgICBBRERfUk9VTkRfS0VZXzY7Cit9CitzdGF0aWMgdm9pZCBhZXNfZGVjcnlwdF9uYl84KEFFU0NvbnRleHQgKiBjdHgsIHVuc2lnbmVkIGludCAqIGJsb2NrKQoreworICAgIGludCBpOworICAgIHN0YXRpYyBjb25zdCBpbnQgQzEgPSA4IC0gMSwgQzIgPSA4IC0gMywgQzMgPSA4IC0gNCwgTmIgPSA4OworICAgIHVuc2lnbmVkIGludCAqa2V5c2NoZWQgPSBjdHgtPmludmtleXNjaGVkOworICAgIHVuc2lnbmVkIGludCBuZXdzdGF0ZVs4XTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgY3R4LT5OciAtIDE7IGkrKykgeworICAgICAgICBBRERfUk9VTkRfS0VZXzg7CisgICAgICAgIE1BS0VXT1JEKDApOworICAgICAgICBNQUtFV09SRCgxKTsKKyAgICAgICAgTUFLRVdPUkQoMik7CisgICAgICAgIE1BS0VXT1JEKDMpOworICAgICAgICBNQUtFV09SRCg0KTsKKyAgICAgICAgTUFLRVdPUkQoNSk7CisgICAgICAgIE1BS0VXT1JEKDYpOworICAgICAgICBNQUtFV09SRCg3KTsKKyAgICAgICAgTU9WRVdPUkQoMCk7CisgICAgICAgIE1PVkVXT1JEKDEpOworICAgICAgICBNT1ZFV09SRCgyKTsKKyAgICAgICAgTU9WRVdPUkQoMyk7CisgICAgICAgIE1PVkVXT1JEKDQpOworICAgICAgICBNT1ZFV09SRCg1KTsKKyAgICAgICAgTU9WRVdPUkQoNik7CisgICAgICAgIE1PVkVXT1JEKDcpOworICAgIH0KKyAgICBBRERfUk9VTkRfS0VZXzg7CisgICAgTEFTVFdPUkQoMCk7CisgICAgTEFTVFdPUkQoMSk7CisgICAgTEFTVFdPUkQoMik7CisgICAgTEFTVFdPUkQoMyk7CisgICAgTEFTVFdPUkQoNCk7CisgICAgTEFTVFdPUkQoNSk7CisgICAgTEFTVFdPUkQoNik7CisgICAgTEFTVFdPUkQoNyk7CisgICAgTU9WRVdPUkQoMCk7CisgICAgTU9WRVdPUkQoMSk7CisgICAgTU9WRVdPUkQoMik7CisgICAgTU9WRVdPUkQoMyk7CisgICAgTU9WRVdPUkQoNCk7CisgICAgTU9WRVdPUkQoNSk7CisgICAgTU9WRVdPUkQoNik7CisgICAgTU9WRVdPUkQoNyk7CisgICAgQUREX1JPVU5EX0tFWV84OworfQorI3VuZGVmIE1BS0VXT1JECisjdW5kZWYgTEFTVFdPUkQKK3N0YXRpYyB2b2lkIGFlc19zZXR1cChBRVNDb250ZXh0ICogY3R4LCBpbnQgYmxvY2tsZW4sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuKQoreworICAgIGludCBpLCBqLCBOaywgcmNvbnN0OworICAgIEFTU0VSVChibG9ja2xlbiA9PSAxNiB8fCBibG9ja2xlbiA9PSAyNCB8fCBibG9ja2xlbiA9PSAzMik7CisgICAgQVNTRVJUKGtleWxlbiA9PSAxNiB8fCBrZXlsZW4gPT0gMjQgfHwga2V5bGVuID09IDMyKTsKKyAgICBOayA9IGtleWxlbiAvIDQ7CisgICAgY3R4LT5OYiA9IGJsb2NrbGVuIC8gNDsKKyAgICBjdHgtPk5yID0gNiArIChjdHgtPk5iID4gTmsgPyBjdHgtPk5iIDogTmspOworICAgIGlmIChjdHgtPk5iID09IDgpIHsKKyAgICAgICAgY3R4LT5lbmNyeXB0ID0gYWVzX2VuY3J5cHRfbmJfOCwgY3R4LT5kZWNyeXB0ID0gYWVzX2RlY3J5cHRfbmJfODsKKyAgICB9IGVsc2UgaWYgKGN0eC0+TmIgPT0gNikgeworICAgICAgICBjdHgtPmVuY3J5cHQgPSBhZXNfZW5jcnlwdF9uYl82LCBjdHgtPmRlY3J5cHQgPSBhZXNfZGVjcnlwdF9uYl82OworICAgIH0gZWxzZSBpZiAoY3R4LT5OYiA9PSA0KSB7CisgICAgICAgIGN0eC0+ZW5jcnlwdCA9IGFlc19lbmNyeXB0X25iXzQsIGN0eC0+ZGVjcnlwdCA9IGFlc19kZWNyeXB0X25iXzQ7CisgICAgfQorICAgIHJjb25zdCA9IDE7CisgICAgZm9yIChpID0gMDsgaSA8IChjdHgtPk5yICsgMSkgKiBjdHgtPk5iOyBpKyspIHsKKyAgICAgICAgaWYgKGkgPCBOaykgeworICAgICAgICAgICAgY3R4LT5rZXlzY2hlZFtpXSA9IEdFVF8zMkJJVF9NU0JfRklSU1Qoa2V5ICsgNCAqIGkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHRlbXAgPSBjdHgtPmtleXNjaGVkW2kgLSAxXTsKKyAgICAgICAgICAgIGlmIChpICUgTmsgPT0gMCkgeworICAgICAgICAgICAgICAgIGludCBhLCBiLCBjLCBkOworICAgICAgICAgICAgICAgIGEgPSAodGVtcCA+PiAxNikgJiAweEZGOworICAgICAgICAgICAgICAgIGIgPSAodGVtcCA+PiA4KSAmIDB4RkY7CisgICAgICAgICAgICAgICAgYyA9ICh0ZW1wID4+IDApICYgMHhGRjsKKyAgICAgICAgICAgICAgICBkID0gKHRlbXAgPj4gMjQpICYgMHhGRjsKKyAgICAgICAgICAgICAgICB0ZW1wID0gU2JveFthXSBeIHJjb25zdDsKKyAgICAgICAgICAgICAgICB0ZW1wID0gKHRlbXAgPDwgOCkgfCBTYm94W2JdOworICAgICAgICAgICAgICAgIHRlbXAgPSAodGVtcCA8PCA4KSB8IFNib3hbY107CisgICAgICAgICAgICAgICAgdGVtcCA9ICh0ZW1wIDw8IDgpIHwgU2JveFtkXTsKKyAgICAgICAgICAgICAgICByY29uc3QgPSBtdWxieTIocmNvbnN0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaSAlIE5rID09IDQgJiYgTmsgPiA2KSB7CisgICAgICAgICAgICAgICAgaW50IGEsIGIsIGMsIGQ7CisgICAgICAgICAgICAgICAgYSA9ICh0ZW1wID4+IDI0KSAmIDB4RkY7CisgICAgICAgICAgICAgICAgYiA9ICh0ZW1wID4+IDE2KSAmIDB4RkY7CisgICAgICAgICAgICAgICAgYyA9ICh0ZW1wID4+IDgpICYgMHhGRjsKKyAgICAgICAgICAgICAgICBkID0gKHRlbXAgPj4gMCkgJiAweEZGOworICAgICAgICAgICAgICAgIHRlbXAgPSBTYm94W2FdOworICAgICAgICAgICAgICAgIHRlbXAgPSAodGVtcCA8PCA4KSB8IFNib3hbYl07CisgICAgICAgICAgICAgICAgdGVtcCA9ICh0ZW1wIDw8IDgpIHwgU2JveFtjXTsKKyAgICAgICAgICAgICAgICB0ZW1wID0gKHRlbXAgPDwgOCkgfCBTYm94W2RdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LT5rZXlzY2hlZFtpXSA9IGN0eC0+a2V5c2NoZWRbaSAtIE5rXSBeIHRlbXA7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8PSBjdHgtPk5yOyBpKyspIHsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IGN0eC0+TmI7IGorKykgeworICAgICAgICAgICAgdW5zaWduZWQgaW50IHRlbXA7CisgICAgICAgICAgICB0ZW1wID0gY3R4LT5rZXlzY2hlZFsoY3R4LT5OciAtIGkpICogY3R4LT5OYiArIGpdOworICAgICAgICAgICAgaWYgKGkgIT0gMCAmJiBpICE9IGN0eC0+TnIpIHsKKyAgICAgICAgICAgICAgICBpbnQgYSwgYiwgYywgZDsKKyAgICAgICAgICAgICAgICBhID0gKHRlbXAgPj4gMjQpICYgMHhGRjsKKyAgICAgICAgICAgICAgICBiID0gKHRlbXAgPj4gMTYpICYgMHhGRjsKKyAgICAgICAgICAgICAgICBjID0gKHRlbXAgPj4gOCkgJiAweEZGOworICAgICAgICAgICAgICAgIGQgPSAodGVtcCA+PiAwKSAmIDB4RkY7CisgICAgICAgICAgICAgICAgdGVtcCA9IEQwW1Nib3hbYV1dOworICAgICAgICAgICAgICAgIHRlbXAgXj0gRDFbU2JveFtiXV07CisgICAgICAgICAgICAgICAgdGVtcCBePSBEMltTYm94W2NdXTsKKyAgICAgICAgICAgICAgICB0ZW1wIF49IEQzW1Nib3hbZF1dOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LT5pbnZrZXlzY2hlZFtpICogY3R4LT5OYiArIGpdID0gdGVtcDsKKyAgICAgICAgfQorICAgIH0KK30KK3N0YXRpYyB2b2lkIGFlc19kZWNyeXB0KEFFU0NvbnRleHQgKiBjdHgsIHVuc2lnbmVkIGludCAqIGJsb2NrKQoreworICAgIGN0eC0+ZGVjcnlwdChjdHgsIGJsb2NrKTsKK30KK3N0YXRpYyB2b2lkIGFlc19kZWNyeXB0X2NiYyh1bnNpZ25lZCBjaGFyICpkZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIGludCBsZW4sIEFFU0NvbnRleHQgKiBjdHgpCit7CisgICAgdW5zaWduZWQgaW50IGl2WzRdLCB4WzRdLCBjdFs0XTsKKyAgICBpbnQgaTsKKyAgICBBU1NFUlQoKGxlbiAmIDE1KSA9PSAwKTsKKyAgICBGWFNZU19tZW1jcHkzMihpdiwgY3R4LT5pdiwgc2l6ZW9mKGl2KSk7CisgICAgd2hpbGUgKGxlbiA+IDApIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICAgICAgeFtpXSA9IGN0W2ldID0gR0VUXzMyQklUX01TQl9GSVJTVChzcmMgKyA0ICogaSk7CisgICAgICAgIH0KKyAgICAgICAgYWVzX2RlY3J5cHQoY3R4LCB4KTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICAgICAgUFVUXzMyQklUX01TQl9GSVJTVChkZXN0ICsgNCAqIGksIGl2W2ldIF4geFtpXSk7CisgICAgICAgICAgICBpdltpXSA9IGN0W2ldOworICAgICAgICB9CisgICAgICAgIGRlc3QgKz0gMTY7CisgICAgICAgIHNyYyArPSAxNjsKKyAgICAgICAgbGVuIC09IDE2OworICAgIH0KKyAgICBGWFNZU19tZW1jcHkzMihjdHgtPml2LCBpdiwgc2l6ZW9mKGl2KSk7Cit9CitzdGF0aWMgdm9pZCBhZXNfZW5jcnlwdChBRVNDb250ZXh0ICogY3R4LCB1bnNpZ25lZCBpbnQgKiBibG9jaykKK3sKKyAgICBjdHgtPmVuY3J5cHQoY3R4LCBibG9jayk7Cit9CitzdGF0aWMgdm9pZCBhZXNfZW5jcnlwdF9jYmModW5zaWduZWQgY2hhciAqZGVzdCwgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCBpbnQgbGVuLCBBRVNDb250ZXh0ICogY3R4KQoreworICAgIHVuc2lnbmVkIGludCBpdls0XTsKKyAgICBpbnQgaTsKKyAgICBBU1NFUlQoKGxlbiAmIDE1KSA9PSAwKTsKKyAgICBGWFNZU19tZW1jcHkzMihpdiwgY3R4LT5pdiwgc2l6ZW9mKGl2KSk7CisgICAgd2hpbGUgKGxlbiA+IDApIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICAgICAgaXZbaV0gXj0gR0VUXzMyQklUX01TQl9GSVJTVChzcmMgKyA0ICogaSk7CisgICAgICAgIH0KKyAgICAgICAgYWVzX2VuY3J5cHQoY3R4LCBpdik7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICAgICAgIFBVVF8zMkJJVF9NU0JfRklSU1QoZGVzdCArIDQgKiBpLCBpdltpXSk7CisgICAgICAgIH0KKyAgICAgICAgZGVzdCArPSAxNjsKKyAgICAgICAgc3JjICs9IDE2OworICAgICAgICBsZW4gLT0gMTY7CisgICAgfQorICAgIEZYU1lTX21lbWNweTMyKGN0eC0+aXYsIGl2LCBzaXplb2YoaXYpKTsKK30KK3ZvaWQgQ1JZUFRfQUVTU2V0S2V5KEZYX0xQVk9JRCBjb250ZXh0LCBGWF9EV09SRCBibG9ja2xlbiwgRlhfTFBDQllURSBrZXksIEZYX0RXT1JEIGtleWxlbiwgRlhfQk9PTCBiRW5jcnlwdCkKK3sKKyAgICBhZXNfc2V0dXAoKEFFU0NvbnRleHQqKWNvbnRleHQsIGJsb2NrbGVuLCBrZXksIGtleWxlbik7Cit9Cit2b2lkIENSWVBUX0FFU1NldElWKEZYX0xQVk9JRCBjb250ZXh0LCBGWF9MUENCWVRFIGl2KQoreworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCAoKEFFU0NvbnRleHQqKWNvbnRleHQpLT5OYjsgaSsrKSB7CisgICAgICAgICgoQUVTQ29udGV4dCopY29udGV4dCktPml2W2ldID0gR0VUXzMyQklUX01TQl9GSVJTVChpdiArIDQgKiBpKTsKKyAgICB9Cit9Cit2b2lkIENSWVBUX0FFU0RlY3J5cHQoRlhfTFBWT0lEIGNvbnRleHQsIEZYX0xQQllURSBkZXN0LCBGWF9MUENCWVRFIHNyYywgRlhfRFdPUkQgbGVuKQoreworICAgIGFlc19kZWNyeXB0X2NiYyhkZXN0LCBzcmMsIGxlbiwgKEFFU0NvbnRleHQqKWNvbnRleHQpOworfQordm9pZCBDUllQVF9BRVNFbmNyeXB0KEZYX0xQVk9JRCBjb250ZXh0LCBGWF9MUEJZVEUgZGVzdCwgRlhfTFBDQllURSBzcmMsIEZYX0RXT1JEIGxlbikKK3sKKyAgICBhZXNfZW5jcnlwdF9jYmMoZGVzdCwgc3JjLCBsZW4sIChBRVNDb250ZXh0Kiljb250ZXh0KTsKK30KKyNpZmRlZiBfX2NwbHVzcGx1cworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZmRybS9jcnlwdG8vZnhfY3J5cHRfc2hhLmNwcCBiL2NvcmUvc3JjL2Zkcm0vY3J5cHRvL2Z4X2NyeXB0X3NoYS5jcHAKaW5kZXggYWNhYmNiNy4uNGU5MzFiMiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZmRybS9jcnlwdG8vZnhfY3J5cHRfc2hhLmNwcAorKysgYi9jb3JlL3NyYy9mZHJtL2NyeXB0by9meF9jcnlwdF9zaGEuY3BwCkBAIC0xLDc0MiArMSw3NDIgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2Jhc2ljLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZmRybS9meF9jcnlwdC5oIg0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLWV4dGVybiAiQyIgew0KLSNlbmRpZg0KLXR5cGVkZWYgc3RydWN0IHsNCi0gICAgdW5zaWduZWQgaW50IGhbNV07DQotICAgIHVuc2lnbmVkIGNoYXIgYmxvY2tbNjRdOw0KLSAgICBpbnQgYmxrdXNlZDsNCi0gICAgdW5zaWduZWQgaW50IGxlbmhpLCBsZW5sbzsNCi19IFNIQV9TdGF0ZTsNCi0jZGVmaW5lIHJvbCh4LHkpICggKCh4KSA8PCAoeSkpIHwgKCgodW5zaWduZWQgaW50KXgpID4+ICgzMi15KSkgKQ0KLXN0YXRpYyB2b2lkIFNIQV9Db3JlX0luaXQodW5zaWduZWQgaW50IGhbNV0pDQotew0KLSAgICBoWzBdID0gMHg2NzQ1MjMwMTsNCi0gICAgaFsxXSA9IDB4ZWZjZGFiODk7DQotICAgIGhbMl0gPSAweDk4YmFkY2ZlOw0KLSAgICBoWzNdID0gMHgxMDMyNTQ3NjsNCi0gICAgaFs0XSA9IDB4YzNkMmUxZjA7DQotfQ0KLXN0YXRpYyB2b2lkIFNIQVRyYW5zZm9ybSh1bnNpZ25lZCBpbnQgKiBkaWdlc3QsIHVuc2lnbmVkIGludCAqIGJsb2NrKQ0KLXsNCi0gICAgdW5zaWduZWQgaW50IHdbODBdOw0KLSAgICB1bnNpZ25lZCBpbnQgYSwgYiwgYywgZCwgZTsNCi0gICAgaW50IHQ7DQotICAgIGZvciAodCA9IDA7IHQgPCAxNjsgdCsrKSB7DQotICAgICAgICB3W3RdID0gYmxvY2tbdF07DQotICAgIH0NCi0gICAgZm9yICh0ID0gMTY7IHQgPCA4MDsgdCsrKSB7DQotICAgICAgICB1bnNpZ25lZCBpbnQgdG1wID0gd1t0IC0gM10gXiB3W3QgLSA4XSBeIHdbdCAtIDE0XSBeIHdbdCAtIDE2XTsNCi0gICAgICAgIHdbdF0gPSByb2wodG1wLCAxKTsNCi0gICAgfQ0KLSAgICBhID0gZGlnZXN0WzBdOw0KLSAgICBiID0gZGlnZXN0WzFdOw0KLSAgICBjID0gZGlnZXN0WzJdOw0KLSAgICBkID0gZGlnZXN0WzNdOw0KLSAgICBlID0gZGlnZXN0WzRdOw0KLSAgICBmb3IgKHQgPSAwOyB0IDwgMjA7IHQrKykgew0KLSAgICAgICAgdW5zaWduZWQgaW50IHRtcCA9DQotICAgICAgICAgICAgcm9sKGEsIDUpICsgKChiICYgYykgfCAoZCAmIH5iKSkgKyBlICsgd1t0XSArIDB4NWE4Mjc5OTk7DQotICAgICAgICBlID0gZDsNCi0gICAgICAgIGQgPSBjOw0KLSAgICAgICAgYyA9IHJvbChiLCAzMCk7DQotICAgICAgICBiID0gYTsNCi0gICAgICAgIGEgPSB0bXA7DQotICAgIH0NCi0gICAgZm9yICh0ID0gMjA7IHQgPCA0MDsgdCsrKSB7DQotICAgICAgICB1bnNpZ25lZCBpbnQgdG1wID0gcm9sKGEsIDUpICsgKGIgXiBjIF4gZCkgKyBlICsgd1t0XSArIDB4NmVkOWViYTE7DQotICAgICAgICBlID0gZDsNCi0gICAgICAgIGQgPSBjOw0KLSAgICAgICAgYyA9IHJvbChiLCAzMCk7DQotICAgICAgICBiID0gYTsNCi0gICAgICAgIGEgPSB0bXA7DQotICAgIH0NCi0gICAgZm9yICh0ID0gNDA7IHQgPCA2MDsgdCsrKSB7DQotICAgICAgICB1bnNpZ25lZCBpbnQgdG1wID0gcm9sKGEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUpICsgKChiICYgYykgfCAoYiAmIGQpIHwgKGMgJiBkKSkgKyBlICsgd1t0XSArDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ZjFiYmNkYzsNCi0gICAgICAgIGUgPSBkOw0KLSAgICAgICAgZCA9IGM7DQotICAgICAgICBjID0gcm9sKGIsIDMwKTsNCi0gICAgICAgIGIgPSBhOw0KLSAgICAgICAgYSA9IHRtcDsNCi0gICAgfQ0KLSAgICBmb3IgKHQgPSA2MDsgdCA8IDgwOyB0KyspIHsNCi0gICAgICAgIHVuc2lnbmVkIGludCB0bXAgPSByb2woYSwgNSkgKyAoYiBeIGMgXiBkKSArIGUgKyB3W3RdICsgMHhjYTYyYzFkNjsNCi0gICAgICAgIGUgPSBkOw0KLSAgICAgICAgZCA9IGM7DQotICAgICAgICBjID0gcm9sKGIsIDMwKTsNCi0gICAgICAgIGIgPSBhOw0KLSAgICAgICAgYSA9IHRtcDsNCi0gICAgfQ0KLSAgICBkaWdlc3RbMF0gKz0gYTsNCi0gICAgZGlnZXN0WzFdICs9IGI7DQotICAgIGRpZ2VzdFsyXSArPSBjOw0KLSAgICBkaWdlc3RbM10gKz0gZDsNCi0gICAgZGlnZXN0WzRdICs9IGU7DQotfQ0KLXZvaWQgQ1JZUFRfU0hBMVN0YXJ0KEZYX0xQVk9JRCBjb250ZXh0KQ0KLXsNCi0gICAgU0hBX1N0YXRlICogcyA9IChTSEFfU3RhdGUqKWNvbnRleHQ7DQotICAgIFNIQV9Db3JlX0luaXQocy0+aCk7DQotICAgIHMtPmJsa3VzZWQgPSAwOw0KLSAgICBzLT5sZW5oaSA9IHMtPmxlbmxvID0gMDsNCi19DQotdm9pZCBDUllQVF9TSEExVXBkYXRlKEZYX0xQVk9JRCBjb250ZXh0LCBGWF9MUENCWVRFIGRhdGEsIEZYX0RXT1JEIHNpemUpDQotew0KLSAgICBTSEFfU3RhdGUgKiBzID0gKFNIQV9TdGF0ZSopY29udGV4dDsNCi0gICAgdW5zaWduZWQgY2hhciAqcSA9ICh1bnNpZ25lZCBjaGFyICopZGF0YTsNCi0gICAgdW5zaWduZWQgaW50IHdvcmRibG9ja1sxNl07DQotICAgIGludCBsZW4gPSBzaXplOw0KLSAgICB1bnNpZ25lZCBpbnQgbGVudyA9IGxlbjsNCi0gICAgaW50IGk7DQotICAgIHMtPmxlbmxvICs9IGxlbnc7DQotICAgIHMtPmxlbmhpICs9IChzLT5sZW5sbyA8IGxlbncpOw0KLSAgICBpZiAocy0+YmxrdXNlZCAmJiBzLT5ibGt1c2VkICsgbGVuIDwgNjQpIHsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKHMtPmJsb2NrICsgcy0+YmxrdXNlZCwgcSwgbGVuKTsNCi0gICAgICAgIHMtPmJsa3VzZWQgKz0gbGVuOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgd2hpbGUgKHMtPmJsa3VzZWQgKyBsZW4gPj0gNjQpIHsNCi0gICAgICAgICAgICBGWFNZU19tZW1jcHkzMihzLT5ibG9jayArIHMtPmJsa3VzZWQsIHEsIDY0IC0gcy0+YmxrdXNlZCk7DQotICAgICAgICAgICAgcSArPSA2NCAtIHMtPmJsa3VzZWQ7DQotICAgICAgICAgICAgbGVuIC09IDY0IC0gcy0+YmxrdXNlZDsNCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgew0KLSAgICAgICAgICAgICAgICB3b3JkYmxvY2tbaV0gPQ0KLSAgICAgICAgICAgICAgICAgICAgKCgodW5zaWduZWQgaW50KSBzLT5ibG9ja1tpICogNCArIDBdKSA8PCAyNCkgfA0KLSAgICAgICAgICAgICAgICAgICAgKCgodW5zaWduZWQgaW50KSBzLT5ibG9ja1tpICogNCArIDFdKSA8PCAxNikgfA0KLSAgICAgICAgICAgICAgICAgICAgKCgodW5zaWduZWQgaW50KSBzLT5ibG9ja1tpICogNCArIDJdKSA8PCA4KSB8DQotICAgICAgICAgICAgICAgICAgICAoKCh1bnNpZ25lZCBpbnQpIHMtPmJsb2NrW2kgKiA0ICsgM10pIDw8IDApOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBTSEFUcmFuc2Zvcm0ocy0+aCwgd29yZGJsb2NrKTsNCi0gICAgICAgICAgICBzLT5ibGt1c2VkID0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYU1lTX21lbWNweTMyKHMtPmJsb2NrLCBxLCBsZW4pOw0KLSAgICAgICAgcy0+YmxrdXNlZCA9IGxlbjsNCi0gICAgfQ0KLX0NCi12b2lkIENSWVBUX1NIQTFGaW5pc2goRlhfTFBWT0lEIGNvbnRleHQsIEZYX0JZVEUgZGlnZXN0WzIwXSkNCi17DQotICAgIFNIQV9TdGF0ZSAqIHMgPSAoU0hBX1N0YXRlKiljb250ZXh0Ow0KLSAgICBpbnQgaTsNCi0gICAgaW50IHBhZDsNCi0gICAgdW5zaWduZWQgY2hhciBjWzY0XTsNCi0gICAgdW5zaWduZWQgaW50IGxlbmhpLCBsZW5sbzsNCi0gICAgaWYgKHMtPmJsa3VzZWQgPj0gNTYpIHsNCi0gICAgICAgIHBhZCA9IDU2ICsgNjQgLSBzLT5ibGt1c2VkOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcGFkID0gNTYgLSBzLT5ibGt1c2VkOw0KLSAgICB9DQotICAgIGxlbmhpID0gKHMtPmxlbmhpIDw8IDMpIHwgKHMtPmxlbmxvID4+ICgzMiAtIDMpKTsNCi0gICAgbGVubG8gPSAocy0+bGVubG8gPDwgMyk7DQotICAgIEZYU1lTX21lbXNldDMyKGMsIDAsIHBhZCk7DQotICAgIGNbMF0gPSAweDgwOw0KLSAgICBDUllQVF9TSEExVXBkYXRlKHMsIGMsIHBhZCk7DQotICAgIGNbMF0gPSAobGVuaGkgPj4gMjQpICYgMHhGRjsNCi0gICAgY1sxXSA9IChsZW5oaSA+PiAxNikgJiAweEZGOw0KLSAgICBjWzJdID0gKGxlbmhpID4+IDgpICYgMHhGRjsNCi0gICAgY1szXSA9IChsZW5oaSA+PiAwKSAmIDB4RkY7DQotICAgIGNbNF0gPSAobGVubG8gPj4gMjQpICYgMHhGRjsNCi0gICAgY1s1XSA9IChsZW5sbyA+PiAxNikgJiAweEZGOw0KLSAgICBjWzZdID0gKGxlbmxvID4+IDgpICYgMHhGRjsNCi0gICAgY1s3XSA9IChsZW5sbyA+PiAwKSAmIDB4RkY7DQotICAgIENSWVBUX1NIQTFVcGRhdGUocywgYywgOCk7DQotICAgIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsNCi0gICAgICAgIGRpZ2VzdFtpICogNF0gPSAocy0+aFtpXSA+PiAyNCkgJiAweEZGOw0KLSAgICAgICAgZGlnZXN0W2kgKiA0ICsgMV0gPSAocy0+aFtpXSA+PiAxNikgJiAweEZGOw0KLSAgICAgICAgZGlnZXN0W2kgKiA0ICsgMl0gPSAocy0+aFtpXSA+PiA4KSAmIDB4RkY7DQotICAgICAgICBkaWdlc3RbaSAqIDQgKyAzXSA9IChzLT5oW2ldKSAmIDB4RkY7DQotICAgIH0NCi19DQotdm9pZCBDUllQVF9TSEExR2VuZXJhdGUoRlhfTFBDQllURSBkYXRhLCBGWF9EV09SRCBzaXplLCBGWF9CWVRFIGRpZ2VzdFsyMF0pDQotew0KLSAgICBTSEFfU3RhdGUgczsNCi0gICAgQ1JZUFRfU0hBMVN0YXJ0KCZzKTsNCi0gICAgQ1JZUFRfU0hBMVVwZGF0ZSgmcywgZGF0YSwgc2l6ZSk7DQotICAgIENSWVBUX1NIQTFGaW5pc2goJnMsIGRpZ2VzdCk7DQotfQ0KLXR5cGVkZWYgc3RydWN0IHsNCi0gICAgRlhfRFdPUkQgdG90YWxbMl07DQotICAgIEZYX0RXT1JEIHN0YXRlWzhdOw0KLSAgICBGWF9CWVRFIGJ1ZmZlcls2NF07DQotfQ0KLXNoYTI1Nl9jb250ZXh0Ow0KLSNkZWZpbmUgR0VUX0ZYX0RXT1JEKG4sYixpKSAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAobikgPSAoIChGWF9EV09SRCkgKGIpWyhpKSAgICBdIDw8IDI0ICkgICAgICAgXA0KLSAgICAgICAgICAgICAgfCAoIChGWF9EV09SRCkgKGIpWyhpKSArIDFdIDw8IDE2ICkgICAgICAgXA0KLSAgICAgICAgICAgICAgfCAoIChGWF9EV09SRCkgKGIpWyhpKSArIDJdIDw8ICA4ICkgICAgICAgXA0KLSAgICAgICAgICAgICAgfCAoIChGWF9EV09SRCkgKGIpWyhpKSArIDNdICAgICAgICk7ICAgICAgXA0KLSAgICB9DQotI2RlZmluZSBQVVRfRlhfRFdPUkQobixiLGkpICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIChiKVsoaSkgICAgXSA9IChGWF9CWVRFKSAoIChuKSA+PiAyNCApOyAgICAgICBcDQotICAgICAgICAoYilbKGkpICsgMV0gPSAoRlhfQllURSkgKCAobikgPj4gMTYgKTsgICAgICAgXA0KLSAgICAgICAgKGIpWyhpKSArIDJdID0gKEZYX0JZVEUpICggKG4pID4+ICA4ICk7ICAgICAgIFwNCi0gICAgICAgIChiKVsoaSkgKyAzXSA9IChGWF9CWVRFKSAoIChuKSAgICAgICApOyAgICAgICBcDQotICAgIH0NCi12b2lkIENSWVBUX1NIQTI1NlN0YXJ0KCBGWF9MUFZPSUQgY29udGV4dCApDQotew0KLSAgICBzaGEyNTZfY29udGV4dCAqY3R4ID0gKHNoYTI1Nl9jb250ZXh0ICopY29udGV4dDsNCi0gICAgY3R4LT50b3RhbFswXSA9IDA7DQotICAgIGN0eC0+dG90YWxbMV0gPSAwOw0KLSAgICBjdHgtPnN0YXRlWzBdID0gMHg2QTA5RTY2NzsNCi0gICAgY3R4LT5zdGF0ZVsxXSA9IDB4QkI2N0FFODU7DQotICAgIGN0eC0+c3RhdGVbMl0gPSAweDNDNkVGMzcyOw0KLSAgICBjdHgtPnN0YXRlWzNdID0gMHhBNTRGRjUzQTsNCi0gICAgY3R4LT5zdGF0ZVs0XSA9IDB4NTEwRTUyN0Y7DQotICAgIGN0eC0+c3RhdGVbNV0gPSAweDlCMDU2ODhDOw0KLSAgICBjdHgtPnN0YXRlWzZdID0gMHgxRjgzRDlBQjsNCi0gICAgY3R4LT5zdGF0ZVs3XSA9IDB4NUJFMENEMTk7DQotfQ0KLXN0YXRpYyB2b2lkIHNoYTI1Nl9wcm9jZXNzKCBzaGEyNTZfY29udGV4dCAqY3R4LCBjb25zdCBGWF9CWVRFIGRhdGFbNjRdICkNCi17DQotICAgIEZYX0RXT1JEIHRlbXAxLCB0ZW1wMiwgV1s2NF07DQotICAgIEZYX0RXT1JEIEEsIEIsIEMsIEQsIEUsIEYsIEcsIEg7DQotICAgIEdFVF9GWF9EV09SRCggV1swXSwgIGRhdGEsICAwICk7DQotICAgIEdFVF9GWF9EV09SRCggV1sxXSwgIGRhdGEsICA0ICk7DQotICAgIEdFVF9GWF9EV09SRCggV1syXSwgIGRhdGEsICA4ICk7DQotICAgIEdFVF9GWF9EV09SRCggV1szXSwgIGRhdGEsIDEyICk7DQotICAgIEdFVF9GWF9EV09SRCggV1s0XSwgIGRhdGEsIDE2ICk7DQotICAgIEdFVF9GWF9EV09SRCggV1s1XSwgIGRhdGEsIDIwICk7DQotICAgIEdFVF9GWF9EV09SRCggV1s2XSwgIGRhdGEsIDI0ICk7DQotICAgIEdFVF9GWF9EV09SRCggV1s3XSwgIGRhdGEsIDI4ICk7DQotICAgIEdFVF9GWF9EV09SRCggV1s4XSwgIGRhdGEsIDMyICk7DQotICAgIEdFVF9GWF9EV09SRCggV1s5XSwgIGRhdGEsIDM2ICk7DQotICAgIEdFVF9GWF9EV09SRCggV1sxMF0sIGRhdGEsIDQwICk7DQotICAgIEdFVF9GWF9EV09SRCggV1sxMV0sIGRhdGEsIDQ0ICk7DQotICAgIEdFVF9GWF9EV09SRCggV1sxMl0sIGRhdGEsIDQ4ICk7DQotICAgIEdFVF9GWF9EV09SRCggV1sxM10sIGRhdGEsIDUyICk7DQotICAgIEdFVF9GWF9EV09SRCggV1sxNF0sIGRhdGEsIDU2ICk7DQotICAgIEdFVF9GWF9EV09SRCggV1sxNV0sIGRhdGEsIDYwICk7DQotI2RlZmluZSAgU0hSKHgsbikgKCh4ICYgMHhGRkZGRkZGRikgPj4gbikNCi0jZGVmaW5lIFJPVFIoeCxuKSAoU0hSKHgsbikgfCAoeCA8PCAoMzIgLSBuKSkpDQotI2RlZmluZSBTMCh4KSAoUk9UUih4LCA3KSBeIFJPVFIoeCwxOCkgXiAgU0hSKHgsIDMpKQ0KLSNkZWZpbmUgUzEoeCkgKFJPVFIoeCwxNykgXiBST1RSKHgsMTkpIF4gIFNIUih4LDEwKSkNCi0jZGVmaW5lIFMyKHgpIChST1RSKHgsIDIpIF4gUk9UUih4LDEzKSBeIFJPVFIoeCwyMikpDQotI2RlZmluZSBTMyh4KSAoUk9UUih4LCA2KSBeIFJPVFIoeCwxMSkgXiBST1RSKHgsMjUpKQ0KLSNkZWZpbmUgRjAoeCx5LHopICgoeCAmIHkpIHwgKHogJiAoeCB8IHkpKSkNCi0jZGVmaW5lIEYxKHgseSx6KSAoeiBeICh4ICYgKHkgXiB6KSkpDQotI2RlZmluZSBSKHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgICAgICAgICAgV1t0XSA9IFMxKFdbdCAtICAyXSkgKyBXW3QgLSAgN10gKyAgICAgICAgICBcDQotICAgICAgICAgICAgICAgICAgIFMwKFdbdCAtIDE1XSkgKyBXW3QgLSAxNl0gICAgICAgICAgICBcDQotICAgICkNCi0jZGVmaW5lIFAoYSxiLGMsZCxlLGYsZyxoLHgsSykgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIHRlbXAxID0gaCArIFMzKGUpICsgRjEoZSxmLGcpICsgSyArIHg7ICAgICAgXA0KLSAgICAgICAgdGVtcDIgPSBTMihhKSArIEYwKGEsYixjKTsgICAgICAgICAgICAgICAgICBcDQotICAgICAgICBkICs9IHRlbXAxOyBoID0gdGVtcDEgKyB0ZW1wMjsgICAgICAgICAgICAgIFwNCi0gICAgfQ0KLSAgICBBID0gY3R4LT5zdGF0ZVswXTsNCi0gICAgQiA9IGN0eC0+c3RhdGVbMV07DQotICAgIEMgPSBjdHgtPnN0YXRlWzJdOw0KLSAgICBEID0gY3R4LT5zdGF0ZVszXTsNCi0gICAgRSA9IGN0eC0+c3RhdGVbNF07DQotICAgIEYgPSBjdHgtPnN0YXRlWzVdOw0KLSAgICBHID0gY3R4LT5zdGF0ZVs2XTsNCi0gICAgSCA9IGN0eC0+c3RhdGVbN107DQotICAgIFAoIEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIFdbIDBdLCAweDQyOEEyRjk4ICk7DQotICAgIFAoIEgsIEEsIEIsIEMsIEQsIEUsIEYsIEcsIFdbIDFdLCAweDcxMzc0NDkxICk7DQotICAgIFAoIEcsIEgsIEEsIEIsIEMsIEQsIEUsIEYsIFdbIDJdLCAweEI1QzBGQkNGICk7DQotICAgIFAoIEYsIEcsIEgsIEEsIEIsIEMsIEQsIEUsIFdbIDNdLCAweEU5QjVEQkE1ICk7DQotICAgIFAoIEUsIEYsIEcsIEgsIEEsIEIsIEMsIEQsIFdbIDRdLCAweDM5NTZDMjVCICk7DQotICAgIFAoIEQsIEUsIEYsIEcsIEgsIEEsIEIsIEMsIFdbIDVdLCAweDU5RjExMUYxICk7DQotICAgIFAoIEMsIEQsIEUsIEYsIEcsIEgsIEEsIEIsIFdbIDZdLCAweDkyM0Y4MkE0ICk7DQotICAgIFAoIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEEsIFdbIDddLCAweEFCMUM1RUQ1ICk7DQotICAgIFAoIEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIFdbIDhdLCAweEQ4MDdBQTk4ICk7DQotICAgIFAoIEgsIEEsIEIsIEMsIEQsIEUsIEYsIEcsIFdbIDldLCAweDEyODM1QjAxICk7DQotICAgIFAoIEcsIEgsIEEsIEIsIEMsIEQsIEUsIEYsIFdbMTBdLCAweDI0MzE4NUJFICk7DQotICAgIFAoIEYsIEcsIEgsIEEsIEIsIEMsIEQsIEUsIFdbMTFdLCAweDU1MEM3REMzICk7DQotICAgIFAoIEUsIEYsIEcsIEgsIEEsIEIsIEMsIEQsIFdbMTJdLCAweDcyQkU1RDc0ICk7DQotICAgIFAoIEQsIEUsIEYsIEcsIEgsIEEsIEIsIEMsIFdbMTNdLCAweDgwREVCMUZFICk7DQotICAgIFAoIEMsIEQsIEUsIEYsIEcsIEgsIEEsIEIsIFdbMTRdLCAweDlCREMwNkE3ICk7DQotICAgIFAoIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEEsIFdbMTVdLCAweEMxOUJGMTc0ICk7DQotICAgIFAoIEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIFIoMTYpLCAweEU0OUI2OUMxICk7DQotICAgIFAoIEgsIEEsIEIsIEMsIEQsIEUsIEYsIEcsIFIoMTcpLCAweEVGQkU0Nzg2ICk7DQotICAgIFAoIEcsIEgsIEEsIEIsIEMsIEQsIEUsIEYsIFIoMTgpLCAweDBGQzE5REM2ICk7DQotICAgIFAoIEYsIEcsIEgsIEEsIEIsIEMsIEQsIEUsIFIoMTkpLCAweDI0MENBMUNDICk7DQotICAgIFAoIEUsIEYsIEcsIEgsIEEsIEIsIEMsIEQsIFIoMjApLCAweDJERTkyQzZGICk7DQotICAgIFAoIEQsIEUsIEYsIEcsIEgsIEEsIEIsIEMsIFIoMjEpLCAweDRBNzQ4NEFBICk7DQotICAgIFAoIEMsIEQsIEUsIEYsIEcsIEgsIEEsIEIsIFIoMjIpLCAweDVDQjBBOURDICk7DQotICAgIFAoIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEEsIFIoMjMpLCAweDc2Rjk4OERBICk7DQotICAgIFAoIEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIFIoMjQpLCAweDk4M0U1MTUyICk7DQotICAgIFAoIEgsIEEsIEIsIEMsIEQsIEUsIEYsIEcsIFIoMjUpLCAweEE4MzFDNjZEICk7DQotICAgIFAoIEcsIEgsIEEsIEIsIEMsIEQsIEUsIEYsIFIoMjYpLCAweEIwMDMyN0M4ICk7DQotICAgIFAoIEYsIEcsIEgsIEEsIEIsIEMsIEQsIEUsIFIoMjcpLCAweEJGNTk3RkM3ICk7DQotICAgIFAoIEUsIEYsIEcsIEgsIEEsIEIsIEMsIEQsIFIoMjgpLCAweEM2RTAwQkYzICk7DQotICAgIFAoIEQsIEUsIEYsIEcsIEgsIEEsIEIsIEMsIFIoMjkpLCAweEQ1QTc5MTQ3ICk7DQotICAgIFAoIEMsIEQsIEUsIEYsIEcsIEgsIEEsIEIsIFIoMzApLCAweDA2Q0E2MzUxICk7DQotICAgIFAoIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEEsIFIoMzEpLCAweDE0MjkyOTY3ICk7DQotICAgIFAoIEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIFIoMzIpLCAweDI3QjcwQTg1ICk7DQotICAgIFAoIEgsIEEsIEIsIEMsIEQsIEUsIEYsIEcsIFIoMzMpLCAweDJFMUIyMTM4ICk7DQotICAgIFAoIEcsIEgsIEEsIEIsIEMsIEQsIEUsIEYsIFIoMzQpLCAweDREMkM2REZDICk7DQotICAgIFAoIEYsIEcsIEgsIEEsIEIsIEMsIEQsIEUsIFIoMzUpLCAweDUzMzgwRDEzICk7DQotICAgIFAoIEUsIEYsIEcsIEgsIEEsIEIsIEMsIEQsIFIoMzYpLCAweDY1MEE3MzU0ICk7DQotICAgIFAoIEQsIEUsIEYsIEcsIEgsIEEsIEIsIEMsIFIoMzcpLCAweDc2NkEwQUJCICk7DQotICAgIFAoIEMsIEQsIEUsIEYsIEcsIEgsIEEsIEIsIFIoMzgpLCAweDgxQzJDOTJFICk7DQotICAgIFAoIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEEsIFIoMzkpLCAweDkyNzIyQzg1ICk7DQotICAgIFAoIEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIFIoNDApLCAweEEyQkZFOEExICk7DQotICAgIFAoIEgsIEEsIEIsIEMsIEQsIEUsIEYsIEcsIFIoNDEpLCAweEE4MUE2NjRCICk7DQotICAgIFAoIEcsIEgsIEEsIEIsIEMsIEQsIEUsIEYsIFIoNDIpLCAweEMyNEI4QjcwICk7DQotICAgIFAoIEYsIEcsIEgsIEEsIEIsIEMsIEQsIEUsIFIoNDMpLCAweEM3NkM1MUEzICk7DQotICAgIFAoIEUsIEYsIEcsIEgsIEEsIEIsIEMsIEQsIFIoNDQpLCAweEQxOTJFODE5ICk7DQotICAgIFAoIEQsIEUsIEYsIEcsIEgsIEEsIEIsIEMsIFIoNDUpLCAweEQ2OTkwNjI0ICk7DQotICAgIFAoIEMsIEQsIEUsIEYsIEcsIEgsIEEsIEIsIFIoNDYpLCAweEY0MEUzNTg1ICk7DQotICAgIFAoIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEEsIFIoNDcpLCAweDEwNkFBMDcwICk7DQotICAgIFAoIEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIFIoNDgpLCAweDE5QTRDMTE2ICk7DQotICAgIFAoIEgsIEEsIEIsIEMsIEQsIEUsIEYsIEcsIFIoNDkpLCAweDFFMzc2QzA4ICk7DQotICAgIFAoIEcsIEgsIEEsIEIsIEMsIEQsIEUsIEYsIFIoNTApLCAweDI3NDg3NzRDICk7DQotICAgIFAoIEYsIEcsIEgsIEEsIEIsIEMsIEQsIEUsIFIoNTEpLCAweDM0QjBCQ0I1ICk7DQotICAgIFAoIEUsIEYsIEcsIEgsIEEsIEIsIEMsIEQsIFIoNTIpLCAweDM5MUMwQ0IzICk7DQotICAgIFAoIEQsIEUsIEYsIEcsIEgsIEEsIEIsIEMsIFIoNTMpLCAweDRFRDhBQTRBICk7DQotICAgIFAoIEMsIEQsIEUsIEYsIEcsIEgsIEEsIEIsIFIoNTQpLCAweDVCOUNDQTRGICk7DQotICAgIFAoIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEEsIFIoNTUpLCAweDY4MkU2RkYzICk7DQotICAgIFAoIEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIFIoNTYpLCAweDc0OEY4MkVFICk7DQotICAgIFAoIEgsIEEsIEIsIEMsIEQsIEUsIEYsIEcsIFIoNTcpLCAweDc4QTU2MzZGICk7DQotICAgIFAoIEcsIEgsIEEsIEIsIEMsIEQsIEUsIEYsIFIoNTgpLCAweDg0Qzg3ODE0ICk7DQotICAgIFAoIEYsIEcsIEgsIEEsIEIsIEMsIEQsIEUsIFIoNTkpLCAweDhDQzcwMjA4ICk7DQotICAgIFAoIEUsIEYsIEcsIEgsIEEsIEIsIEMsIEQsIFIoNjApLCAweDkwQkVGRkZBICk7DQotICAgIFAoIEQsIEUsIEYsIEcsIEgsIEEsIEIsIEMsIFIoNjEpLCAweEE0NTA2Q0VCICk7DQotICAgIFAoIEMsIEQsIEUsIEYsIEcsIEgsIEEsIEIsIFIoNjIpLCAweEJFRjlBM0Y3ICk7DQotICAgIFAoIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEEsIFIoNjMpLCAweEM2NzE3OEYyICk7DQotICAgIGN0eC0+c3RhdGVbMF0gKz0gQTsNCi0gICAgY3R4LT5zdGF0ZVsxXSArPSBCOw0KLSAgICBjdHgtPnN0YXRlWzJdICs9IEM7DQotICAgIGN0eC0+c3RhdGVbM10gKz0gRDsNCi0gICAgY3R4LT5zdGF0ZVs0XSArPSBFOw0KLSAgICBjdHgtPnN0YXRlWzVdICs9IEY7DQotICAgIGN0eC0+c3RhdGVbNl0gKz0gRzsNCi0gICAgY3R4LT5zdGF0ZVs3XSArPSBIOw0KLX0NCi12b2lkIENSWVBUX1NIQTI1NlVwZGF0ZSggdm9pZCogY29udGV4dCwgRlhfTFBDQllURSBpbnB1dCwgRlhfRFdPUkQgbGVuZ3RoICkNCi17DQotICAgIHNoYTI1Nl9jb250ZXh0ICpjdHggPSAoc2hhMjU2X2NvbnRleHQgKiljb250ZXh0Ow0KLSAgICBGWF9EV09SRCBsZWZ0LCBmaWxsOw0KLSAgICBpZiggISBsZW5ndGggKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbGVmdCA9IGN0eC0+dG90YWxbMF0gJiAweDNGOw0KLSAgICBmaWxsID0gNjQgLSBsZWZ0Ow0KLSAgICBjdHgtPnRvdGFsWzBdICs9IGxlbmd0aDsNCi0gICAgY3R4LT50b3RhbFswXSAmPSAweEZGRkZGRkZGOw0KLSAgICBpZiggY3R4LT50b3RhbFswXSA8IGxlbmd0aCApIHsNCi0gICAgICAgIGN0eC0+dG90YWxbMV0rKzsNCi0gICAgfQ0KLSAgICBpZiggbGVmdCAmJiBsZW5ndGggPj0gZmlsbCApIHsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKCAodm9pZCAqKSAoY3R4LT5idWZmZXIgKyBsZWZ0KSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSBpbnB1dCwgZmlsbCApOw0KLSAgICAgICAgc2hhMjU2X3Byb2Nlc3MoIGN0eCwgY3R4LT5idWZmZXIgKTsNCi0gICAgICAgIGxlbmd0aCAtPSBmaWxsOw0KLSAgICAgICAgaW5wdXQgICs9IGZpbGw7DQotICAgICAgICBsZWZ0ID0gMDsNCi0gICAgfQ0KLSAgICB3aGlsZSggbGVuZ3RoID49IDY0ICkgew0KLSAgICAgICAgc2hhMjU2X3Byb2Nlc3MoIGN0eCwgaW5wdXQgKTsNCi0gICAgICAgIGxlbmd0aCAtPSA2NDsNCi0gICAgICAgIGlucHV0ICArPSA2NDsNCi0gICAgfQ0KLSAgICBpZiggbGVuZ3RoICkgew0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIoICh2b2lkICopIChjdHgtPmJ1ZmZlciArIGxlZnQpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIGlucHV0LCBsZW5ndGggKTsNCi0gICAgfQ0KLX0NCi1zdGF0aWMgY29uc3QgRlhfQllURSBzaGEyNTZfcGFkZGluZ1s2NF0gPSB7DQotICAgIDB4ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsDQotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsDQotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsDQotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDANCi19Ow0KLXZvaWQgQ1JZUFRfU0hBMjU2RmluaXNoKCBGWF9MUFZPSUQgY29udGV4dCwgRlhfQllURSBkaWdlc3RbMzJdICkNCi17DQotICAgIHNoYTI1Nl9jb250ZXh0ICpjdHggPSAoc2hhMjU2X2NvbnRleHQgKiljb250ZXh0Ow0KLSAgICBGWF9EV09SRCBsYXN0LCBwYWRuOw0KLSAgICBGWF9EV09SRCBoaWdoLCBsb3c7DQotICAgIEZYX0JZVEUgbXNnbGVuWzhdOw0KLSAgICBoaWdoID0gKCBjdHgtPnRvdGFsWzBdID4+IDI5ICkNCi0gICAgICAgICAgIHwgKCBjdHgtPnRvdGFsWzFdIDw8ICAzICk7DQotICAgIGxvdyAgPSAoIGN0eC0+dG90YWxbMF0gPDwgIDMgKTsNCi0gICAgUFVUX0ZYX0RXT1JEKCBoaWdoLCBtc2dsZW4sIDAgKTsNCi0gICAgUFVUX0ZYX0RXT1JEKCBsb3csICBtc2dsZW4sIDQgKTsNCi0gICAgbGFzdCA9IGN0eC0+dG90YWxbMF0gJiAweDNGOw0KLSAgICBwYWRuID0gKCBsYXN0IDwgNTYgKSA/ICggNTYgLSBsYXN0ICkgOiAoIDEyMCAtIGxhc3QgKTsNCi0gICAgQ1JZUFRfU0hBMjU2VXBkYXRlKCBjdHgsIHNoYTI1Nl9wYWRkaW5nLCBwYWRuICk7DQotICAgIENSWVBUX1NIQTI1NlVwZGF0ZSggY3R4LCBtc2dsZW4sIDggKTsNCi0gICAgUFVUX0ZYX0RXT1JEKCBjdHgtPnN0YXRlWzBdLCBkaWdlc3QsICAwICk7DQotICAgIFBVVF9GWF9EV09SRCggY3R4LT5zdGF0ZVsxXSwgZGlnZXN0LCAgNCApOw0KLSAgICBQVVRfRlhfRFdPUkQoIGN0eC0+c3RhdGVbMl0sIGRpZ2VzdCwgIDggKTsNCi0gICAgUFVUX0ZYX0RXT1JEKCBjdHgtPnN0YXRlWzNdLCBkaWdlc3QsIDEyICk7DQotICAgIFBVVF9GWF9EV09SRCggY3R4LT5zdGF0ZVs0XSwgZGlnZXN0LCAxNiApOw0KLSAgICBQVVRfRlhfRFdPUkQoIGN0eC0+c3RhdGVbNV0sIGRpZ2VzdCwgMjAgKTsNCi0gICAgUFVUX0ZYX0RXT1JEKCBjdHgtPnN0YXRlWzZdLCBkaWdlc3QsIDI0ICk7DQotICAgIFBVVF9GWF9EV09SRCggY3R4LT5zdGF0ZVs3XSwgZGlnZXN0LCAyOCApOw0KLX0NCi12b2lkIENSWVBUX1NIQTI1NkdlbmVyYXRlKEZYX0xQQ0JZVEUgZGF0YSwgRlhfRFdPUkQgc2l6ZSwgRlhfQllURSBkaWdlc3RbMzJdKQ0KLXsNCi0gICAgc2hhMjU2X2NvbnRleHQgY3R4Ow0KLSAgICBDUllQVF9TSEEyNTZTdGFydCgmY3R4KTsNCi0gICAgQ1JZUFRfU0hBMjU2VXBkYXRlKCZjdHgsIGRhdGEsIHNpemUpOw0KLSAgICBDUllQVF9TSEEyNTZGaW5pc2goJmN0eCwgZGlnZXN0KTsNCi19DQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgICBGWF9VSU5UNjQJdG90YWxbMl07DQotICAgIEZYX1VJTlQ2NAlzdGF0ZVs4XTsNCi0gICAgRlhfQllURQkJYnVmZmVyWzEyOF07DQotfSBzaGEzODRfY29udGV4dDsNCi1GWF9VSU5UNjQgRlhfYXRvNjRpKEZYX0xQQ1NUUiBzdHIpDQotew0KLSAgICBGWFNZU19hc3NlcnQoc3RyICE9IE5VTEwpOw0KLSAgICBGWF9VSU5UNjQgcmV0ID0gMDsNCi0gICAgaW50IGxlbiA9IChpbnQpRlhTWVNfc3RybGVuKHN0cik7DQotICAgIGxlbiA9IGxlbiA+IDE2ID8gMTYgOiBsZW47DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpIHsNCi0gICAgICAgIGlmIChpKSB7DQotICAgICAgICAgICAgcmV0IDw8PSA0Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHN0cltpXSA+PSAnMCcgJiYgc3RyW2ldIDw9ICc5Jykgew0KLSAgICAgICAgICAgIHJldCB8PSAoc3RyW2ldIC0gJzAnKSAmIDB4RkY7DQotICAgICAgICB9IGVsc2UgaWYgKHN0cltpXSA+PSAnYScgJiYgc3RyW2ldIDw9ICdmJykgew0KLSAgICAgICAgICAgIHJldCB8PSAoc3RyW2ldIC0gJ2EnICsgMTApICYgMHhGRjsNCi0gICAgICAgIH0gZWxzZSBpZiAoc3RyW2ldID49ICdBJyAmJiBzdHJbaV0gPD0gJ0YnKSB7DQotICAgICAgICAgICAgcmV0IHw9IChzdHJbaV0gLSAnQScgKyAxMCkgJiAweEZGOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBGWFNZU19hc3NlcnQoRkFMU0UpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiByZXQ7DQotfQ0KLXZvaWQgQ1JZUFRfU0hBMzg0U3RhcnQoRlhfTFBWT0lEIGNvbnRleHQpDQotew0KLSAgICBpZiAoY29udGV4dCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgc2hhMzg0X2NvbnRleHQgKmN0eCA9IChzaGEzODRfY29udGV4dCAqKWNvbnRleHQ7DQotICAgIEZYU1lTX21lbXNldDMyKGN0eCwgMCwgc2l6ZW9mKHNoYTM4NF9jb250ZXh0KSk7DQotICAgIGN0eC0+c3RhdGVbMF0gPSBGWF9hdG82NGkoImNiYmI5ZDVkYzEwNTllZDgiKTsNCi0gICAgY3R4LT5zdGF0ZVsxXSA9IEZYX2F0bzY0aSgiNjI5YTI5MmEzNjdjZDUwNyIpOw0KLSAgICBjdHgtPnN0YXRlWzJdID0gRlhfYXRvNjRpKCI5MTU5MDE1YTMwNzBkZDE3Iik7DQotICAgIGN0eC0+c3RhdGVbM10gPSBGWF9hdG82NGkoIjE1MmZlY2Q4ZjcwZTU5MzkiKTsNCi0gICAgY3R4LT5zdGF0ZVs0XSA9IEZYX2F0bzY0aSgiNjczMzI2NjdmZmMwMGIzMSIpOw0KLSAgICBjdHgtPnN0YXRlWzVdID0gRlhfYXRvNjRpKCI4ZWI0NGE4NzY4NTgxNTExIik7DQotICAgIGN0eC0+c3RhdGVbNl0gPSBGWF9hdG82NGkoImRiMGMyZTBkNjRmOThmYTciKTsNCi0gICAgY3R4LT5zdGF0ZVs3XSA9IEZYX2F0bzY0aSgiNDdiNTQ4MWRiZWZhNGZhNCIpOw0KLX0NCi0jZGVmaW5lIFNIQTM4NF9GMCh4LHkseikgKCh4ICYgeSkgfCAoeiAmICh4IHwgeSkpKQ0KLSNkZWZpbmUgU0hBMzg0X0YxKHgseSx6KSAoeiBeICh4ICYgKHkgXiB6KSkpDQotI2RlZmluZSBTSEEzODRfU0hSKHgsbikgKHggPj4gbikNCi0jZGVmaW5lIFNIQTM4NF9ST1RSKHgsbikgKFNIQTM4NF9TSFIoeCwgbikgfCB4IDw8ICg2NCAtIG4pKQ0KLSNkZWZpbmUgU0hBMzg0X1MwKHgpIChTSEEzODRfUk9UUih4LCAxKSBeIFNIQTM4NF9ST1RSKHgsIDgpIF4gIFNIQTM4NF9TSFIoeCwgNykpDQotI2RlZmluZSBTSEEzODRfUzEoeCkgKFNIQTM4NF9ST1RSKHgsMTkpIF4gU0hBMzg0X1JPVFIoeCwgNjEpIF4gIFNIQTM4NF9TSFIoeCwgNikpDQotI2RlZmluZSBTSEEzODRfUzIoeCkgKFNIQTM4NF9ST1RSKHgsIDI4KSBeIFNIQTM4NF9ST1RSKHgsIDM0KSBeIFNIQTM4NF9ST1RSKHgsIDM5KSkNCi0jZGVmaW5lIFNIQTM4NF9TMyh4KSAoU0hBMzg0X1JPVFIoeCwgMTQpIF4gU0hBMzg0X1JPVFIoeCwxOCkgXiBTSEEzODRfUk9UUih4LCA0MSkpDQotI2RlZmluZSBTSEEzODRfUChhLGIsYyxkLGUsZixnLGgseCxLKQkJCQkJCQlcDQotICAgIHsJCQkJCQkJCQkJCQkJCQkJXA0KLSAgICAgICAgdGVtcDEgPSBoICsgU0hBMzg0X1MzKGUpICsgU0hBMzg0X0YxKGUsZixnKSArIEsgKyB4OwkJXA0KLSAgICAgICAgdGVtcDIgPSBTSEEzODRfUzIoYSkgKyBTSEEzODRfRjAoYSxiLGMpOwkJCQkJXA0KLSAgICAgICAgZCArPSB0ZW1wMTsgaCA9IHRlbXAxICsgdGVtcDI7CQkJCQkJCQlcDQotICAgIH0NCi1zdGF0aWMgY29uc3QgRlhfQllURSBzaGEzODRfcGFkZGluZ1sxMjhdID0gew0KLSAgICAweDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLA0KLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLA0KLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLA0KLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLA0KLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLA0KLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLA0KLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLA0KLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLA0KLX07DQotI2RlZmluZSBTSEEzODRfUih0KSAoV1t0XSA9IFNIQTM4NF9TMShXW3QgLSAgMl0pICsgV1t0IC0gIDddICsgU0hBMzg0X1MwKFdbdCAtIDE1XSkgKyBXW3QgLSAxNl0pDQotc3RhdGljIEZYX0xQQ1NUUiBjb25zdGFudHNbXSA9IHsNCi0gICAgIjQyOGEyZjk4ZDcyOGFlMjIiLA0KLSAgICAiNzEzNzQ0OTEyM2VmNjVjZCIsDQotICAgICJiNWMwZmJjZmVjNGQzYjJmIiwNCi0gICAgImU5YjVkYmE1ODE4OWRiYmMiLA0KLSAgICAiMzk1NmMyNWJmMzQ4YjUzOCIsDQotICAgICI1OWYxMTFmMWI2MDVkMDE5IiwNCi0gICAgIjkyM2Y4MmE0YWYxOTRmOWIiLA0KLSAgICAiYWIxYzVlZDVkYTZkODExOCIsDQotICAgICJkODA3YWE5OGEzMDMwMjQyIiwNCi0gICAgIjEyODM1YjAxNDU3MDZmYmUiLA0KLSAgICAiMjQzMTg1YmU0ZWU0YjI4YyIsDQotICAgICI1NTBjN2RjM2Q1ZmZiNGUyIiwNCi0gICAgIjcyYmU1ZDc0ZjI3Yjg5NmYiLA0KLSAgICAiODBkZWIxZmUzYjE2OTZiMSIsDQotICAgICI5YmRjMDZhNzI1YzcxMjM1IiwNCi0gICAgImMxOWJmMTc0Y2Y2OTI2OTQiLA0KLSAgICAiZTQ5YjY5YzE5ZWYxNGFkMiIsDQotICAgICJlZmJlNDc4NjM4NGYyNWUzIiwNCi0gICAgIjBmYzE5ZGM2OGI4Y2Q1YjUiLA0KLSAgICAiMjQwY2ExY2M3N2FjOWM2NSIsDQotICAgICIyZGU5MmM2ZjU5MmIwMjc1IiwNCi0gICAgIjRhNzQ4NGFhNmVhNmU0ODMiLA0KLSAgICAiNWNiMGE5ZGNiZDQxZmJkNCIsDQotICAgICI3NmY5ODhkYTgzMTE1M2I1IiwNCi0gICAgIjk4M2U1MTUyZWU2NmRmYWIiLA0KLSAgICAiYTgzMWM2NmQyZGI0MzIxMCIsDQotICAgICJiMDAzMjdjODk4ZmIyMTNmIiwNCi0gICAgImJmNTk3ZmM3YmVlZjBlZTQiLA0KLSAgICAiYzZlMDBiZjMzZGE4OGZjMiIsDQotICAgICJkNWE3OTE0NzkzMGFhNzI1IiwNCi0gICAgIjA2Y2E2MzUxZTAwMzgyNmYiLA0KLSAgICAiMTQyOTI5NjcwYTBlNmU3MCIsDQotICAgICIyN2I3MGE4NTQ2ZDIyZmZjIiwNCi0gICAgIjJlMWIyMTM4NWMyNmM5MjYiLA0KLSAgICAiNGQyYzZkZmM1YWM0MmFlZCIsDQotICAgICI1MzM4MGQxMzlkOTViM2RmIiwNCi0gICAgIjY1MGE3MzU0OGJhZjYzZGUiLA0KLSAgICAiNzY2YTBhYmIzYzc3YjJhOCIsDQotICAgICI4MWMyYzkyZTQ3ZWRhZWU2IiwNCi0gICAgIjkyNzIyYzg1MTQ4MjM1M2IiLA0KLSAgICAiYTJiZmU4YTE0Y2YxMDM2NCIsDQotICAgICJhODFhNjY0YmJjNDIzMDAxIiwNCi0gICAgImMyNGI4YjcwZDBmODk3OTEiLA0KLSAgICAiYzc2YzUxYTMwNjU0YmUzMCIsDQotICAgICJkMTkyZTgxOWQ2ZWY1MjE4IiwNCi0gICAgImQ2OTkwNjI0NTU2NWE5MTAiLA0KLSAgICAiZjQwZTM1ODU1NzcxMjAyYSIsDQotICAgICIxMDZhYTA3MDMyYmJkMWI4IiwNCi0gICAgIjE5YTRjMTE2YjhkMmQwYzgiLA0KLSAgICAiMWUzNzZjMDg1MTQxYWI1MyIsDQotICAgICIyNzQ4Nzc0Y2RmOGVlYjk5IiwNCi0gICAgIjM0YjBiY2I1ZTE5YjQ4YTgiLA0KLSAgICAiMzkxYzBjYjNjNWM5NWE2MyIsDQotICAgICI0ZWQ4YWE0YWUzNDE4YWNiIiwNCi0gICAgIjViOWNjYTRmNzc2M2UzNzMiLA0KLSAgICAiNjgyZTZmZjNkNmIyYjhhMyIsDQotICAgICI3NDhmODJlZTVkZWZiMmZjIiwNCi0gICAgIjc4YTU2MzZmNDMxNzJmNjAiLA0KLSAgICAiODRjODc4MTRhMWYwYWI3MiIsDQotICAgICI4Y2M3MDIwODFhNjQzOWVjIiwNCi0gICAgIjkwYmVmZmZhMjM2MzFlMjgiLA0KLSAgICAiYTQ1MDZjZWJkZTgyYmRlOSIsDQotICAgICJiZWY5YTNmN2IyYzY3OTE1IiwNCi0gICAgImM2NzE3OGYyZTM3MjUzMmIiLA0KLSAgICAiY2EyNzNlY2VlYTI2NjE5YyIsDQotICAgICJkMTg2YjhjNzIxYzBjMjA3IiwNCi0gICAgImVhZGE3ZGQ2Y2RlMGViMWUiLA0KLSAgICAiZjU3ZDRmN2ZlZTZlZDE3OCIsDQotICAgICIwNmYwNjdhYTcyMTc2ZmJhIiwNCi0gICAgIjBhNjM3ZGM1YTJjODk4YTYiLA0KLSAgICAiMTEzZjk4MDRiZWY5MGRhZSIsDQotICAgICIxYjcxMGIzNTEzMWM0NzFiIiwNCi0gICAgIjI4ZGI3N2Y1MjMwNDdkODQiLA0KLSAgICAiMzJjYWFiN2I0MGM3MjQ5MyIsDQotICAgICIzYzllYmUwYTE1YzliZWJjIiwNCi0gICAgIjQzMWQ2N2M0OWMxMDBkNGMiLA0KLSAgICAiNGNjNWQ0YmVjYjNlNDJiNiIsDQotICAgICI1OTdmMjk5Y2ZjNjU3ZTJhIiwNCi0gICAgIjVmY2I2ZmFiM2FkNmZhZWMiLA0KLSAgICAiNmM0NDE5OGM0YTQ3NTgxNyIsDQotfTsNCi0jZGVmaW5lIEdFVF9GWF82NFdPUkQobixiLGkpICAgICAgICAgICAgICAgICAgICAgICBcDQotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgICAgIChuKSA9ICggKEZYX1VJTlQ2NCkgKGIpWyhpKSAgICBdIDw8IDU2ICkgICAgICAgXA0KLSAgICAgICAgICAgICAgfCAoIChGWF9VSU5UNjQpIChiKVsoaSkgKyAxXSA8PCA0OCApICAgICAgIFwNCi0gICAgICAgICAgICAgIHwgKCAoRlhfVUlOVDY0KSAoYilbKGkpICsgMl0gPDwgNDAgKSAgICAgICBcDQotICAgICAgICAgICAgICB8ICggKEZYX1VJTlQ2NCkgKGIpWyhpKSArIDNdIDw8IDMyICkgICAgICBcDQotICAgICAgICAgICAgICB8ICggKEZYX1VJTlQ2NCkgKGIpWyhpKSArIDRdIDw8IDI0ICkgICAgICAgXA0KLSAgICAgICAgICAgICAgfCAoIChGWF9VSU5UNjQpIChiKVsoaSkgKyA1XSA8PCAxNiApICAgICAgIFwNCi0gICAgICAgICAgICAgIHwgKCAoRlhfVUlOVDY0KSAoYilbKGkpICsgNl0gPDwgIDggKSAgICAgICBcDQotICAgICAgICAgICAgICB8ICggKEZYX1VJTlQ2NCkgKGIpWyhpKSArIDddICAgICAgICk7ICAgICAgXA0KLSAgICB9DQotI2RlZmluZSBQVVRfRlhfNjREV09SRChuLGIsaSkgICAgICAgICAgICAgICAgICAgICAgIFwNCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KLSAgICAgICAgKGIpWyhpKSAgICBdID0gKEZYX0JZVEUpICggKG4pID4+IDU2ICk7ICAgICAgIFwNCi0gICAgICAgIChiKVsoaSkgKyAxXSA9IChGWF9CWVRFKSAoIChuKSA+PiA0OCApOyAgICAgICBcDQotICAgICAgICAoYilbKGkpICsgMl0gPSAoRlhfQllURSkgKCAobikgPj4gNDAgKTsgICAgICAgXA0KLSAgICAgICAgKGIpWyhpKSArIDNdID0gKEZYX0JZVEUpICggKG4pID4+IDMyICk7ICAgICAgIFwNCi0gICAgICAgIChiKVsoaSkgKyA0XSA9IChGWF9CWVRFKSAoIChuKSA+PiAyNCApOyAgICAgICBcDQotICAgICAgICAoYilbKGkpICsgNV0gPSAoRlhfQllURSkgKCAobikgPj4gMTYgKTsgICAgICAgXA0KLSAgICAgICAgKGIpWyhpKSArIDZdID0gKEZYX0JZVEUpICggKG4pID4+ICA4ICk7ICAgICAgIFwNCi0gICAgICAgIChiKVsoaSkgKyA3XSA9IChGWF9CWVRFKSAoIChuKSApOyAgICAgICBcDQotICAgIH0NCi1zdGF0aWMgdm9pZCBzaGEzODRfcHJvY2Vzcyggc2hhMzg0X2NvbnRleHQgKmN0eCwgY29uc3QgRlhfQllURSBkYXRhWzEyOF0gKQ0KLXsNCi0gICAgRlhfVUlOVDY0IHRlbXAxLCB0ZW1wMjsNCi0gICAgRlhfVUlOVDY0IEEsIEIsIEMsIEQsIEUsIEYsIEcsIEg7DQotICAgIEZYX1VJTlQ2NCBXWzgwXTsNCi0gICAgR0VUX0ZYXzY0V09SRChXWzBdLCBkYXRhLCAwKTsNCi0gICAgR0VUX0ZYXzY0V09SRChXWzFdLCBkYXRhLCA4KTsNCi0gICAgR0VUX0ZYXzY0V09SRChXWzJdLCBkYXRhLCAxNik7DQotICAgIEdFVF9GWF82NFdPUkQoV1szXSwgZGF0YSwgMjQpOw0KLSAgICBHRVRfRlhfNjRXT1JEKFdbNF0sIGRhdGEsIDMyKTsNCi0gICAgR0VUX0ZYXzY0V09SRChXWzVdLCBkYXRhLCA0MCk7DQotICAgIEdFVF9GWF82NFdPUkQoV1s2XSwgZGF0YSwgNDgpOw0KLSAgICBHRVRfRlhfNjRXT1JEKFdbN10sIGRhdGEsIDU2KTsNCi0gICAgR0VUX0ZYXzY0V09SRChXWzhdLCBkYXRhLCA2NCk7DQotICAgIEdFVF9GWF82NFdPUkQoV1s5XSwgZGF0YSwgNzIpOw0KLSAgICBHRVRfRlhfNjRXT1JEKFdbMTBdLCBkYXRhLCA4MCk7DQotICAgIEdFVF9GWF82NFdPUkQoV1sxMV0sIGRhdGEsIDg4KTsNCi0gICAgR0VUX0ZYXzY0V09SRChXWzEyXSwgZGF0YSwgOTYpOw0KLSAgICBHRVRfRlhfNjRXT1JEKFdbMTNdLCBkYXRhLCAxMDQpOw0KLSAgICBHRVRfRlhfNjRXT1JEKFdbMTRdLCBkYXRhLCAxMTIpOw0KLSAgICBHRVRfRlhfNjRXT1JEKFdbMTVdLCBkYXRhLCAxMjApOw0KLSAgICBBID0gY3R4LT5zdGF0ZVswXTsNCi0gICAgQiA9IGN0eC0+c3RhdGVbMV07DQotICAgIEMgPSBjdHgtPnN0YXRlWzJdOw0KLSAgICBEID0gY3R4LT5zdGF0ZVszXTsNCi0gICAgRSA9IGN0eC0+c3RhdGVbNF07DQotICAgIEYgPSBjdHgtPnN0YXRlWzVdOw0KLSAgICBHID0gY3R4LT5zdGF0ZVs2XTsNCi0gICAgSCA9IGN0eC0+c3RhdGVbN107DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkgew0KLSAgICAgICAgRlhfVUlOVDY0IHRlbXBbOF07DQotICAgICAgICBpZiAoaSA8IDIpIHsNCi0gICAgICAgICAgICB0ZW1wWzBdID0gV1tpICogOF07DQotICAgICAgICAgICAgdGVtcFsxXSA9IFdbaSAqIDggKyAxXTsNCi0gICAgICAgICAgICB0ZW1wWzJdID0gV1tpICogOCArIDJdOw0KLSAgICAgICAgICAgIHRlbXBbM10gPSBXW2kgKiA4ICsgM107DQotICAgICAgICAgICAgdGVtcFs0XSA9IFdbaSAqIDggKyA0XTsNCi0gICAgICAgICAgICB0ZW1wWzVdID0gV1tpICogOCArIDVdOw0KLSAgICAgICAgICAgIHRlbXBbNl0gPSBXW2kgKiA4ICsgNl07DQotICAgICAgICAgICAgdGVtcFs3XSA9IFdbaSAqIDggKyA3XTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgdGVtcFswXSA9IFNIQTM4NF9SKGkgKiA4KTsNCi0gICAgICAgICAgICB0ZW1wWzFdID0gU0hBMzg0X1IoaSAqIDggKyAxKTsNCi0gICAgICAgICAgICB0ZW1wWzJdID0gU0hBMzg0X1IoaSAqIDggKyAyKTsNCi0gICAgICAgICAgICB0ZW1wWzNdID0gU0hBMzg0X1IoaSAqIDggKyAzKTsNCi0gICAgICAgICAgICB0ZW1wWzRdID0gU0hBMzg0X1IoaSAqIDggKyA0KTsNCi0gICAgICAgICAgICB0ZW1wWzVdID0gU0hBMzg0X1IoaSAqIDggKyA1KTsNCi0gICAgICAgICAgICB0ZW1wWzZdID0gU0hBMzg0X1IoaSAqIDggKyA2KTsNCi0gICAgICAgICAgICB0ZW1wWzddID0gU0hBMzg0X1IoaSAqIDggKyA3KTsNCi0gICAgICAgIH0NCi0gICAgICAgIFNIQTM4NF9QKCBBLCBCLCBDLCBELCBFLCBGLCBHLCBILCB0ZW1wWyAwXSwgRlhfYXRvNjRpKGNvbnN0YW50c1tpICogOCAgICBdKSApOw0KLSAgICAgICAgU0hBMzg0X1AoIEgsIEEsIEIsIEMsIEQsIEUsIEYsIEcsIHRlbXBbIDFdLCBGWF9hdG82NGkoY29uc3RhbnRzW2kgKiA4ICsgMV0pICk7DQotICAgICAgICBTSEEzODRfUCggRywgSCwgQSwgQiwgQywgRCwgRSwgRiwgdGVtcFsgMl0sIEZYX2F0bzY0aShjb25zdGFudHNbaSAqIDggKyAyXSkgKTsNCi0gICAgICAgIFNIQTM4NF9QKCBGLCBHLCBILCBBLCBCLCBDLCBELCBFLCB0ZW1wWyAzXSwgRlhfYXRvNjRpKGNvbnN0YW50c1tpICogOCArIDNdKSApOw0KLSAgICAgICAgU0hBMzg0X1AoIEUsIEYsIEcsIEgsIEEsIEIsIEMsIEQsIHRlbXBbIDRdLCBGWF9hdG82NGkoY29uc3RhbnRzW2kgKiA4ICsgNF0pICk7DQotICAgICAgICBTSEEzODRfUCggRCwgRSwgRiwgRywgSCwgQSwgQiwgQywgdGVtcFsgNV0sIEZYX2F0bzY0aShjb25zdGFudHNbaSAqIDggKyA1XSkgKTsNCi0gICAgICAgIFNIQTM4NF9QKCBDLCBELCBFLCBGLCBHLCBILCBBLCBCLCB0ZW1wWyA2XSwgRlhfYXRvNjRpKGNvbnN0YW50c1tpICogOCArIDZdKSApOw0KLSAgICAgICAgU0hBMzg0X1AoIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEEsIHRlbXBbIDddLCBGWF9hdG82NGkoY29uc3RhbnRzW2kgKiA4ICsgN10pICk7DQotICAgIH0NCi0gICAgY3R4LT5zdGF0ZVswXSArPSBBOw0KLSAgICBjdHgtPnN0YXRlWzFdICs9IEI7DQotICAgIGN0eC0+c3RhdGVbMl0gKz0gQzsNCi0gICAgY3R4LT5zdGF0ZVszXSArPSBEOw0KLSAgICBjdHgtPnN0YXRlWzRdICs9IEU7DQotICAgIGN0eC0+c3RhdGVbNV0gKz0gRjsNCi0gICAgY3R4LT5zdGF0ZVs2XSArPSBHOw0KLSAgICBjdHgtPnN0YXRlWzddICs9IEg7DQotfQ0KLXZvaWQgQ1JZUFRfU0hBMzg0VXBkYXRlKEZYX0xQVk9JRCBjb250ZXh0LCBGWF9MUENCWVRFIGlucHV0LCBGWF9EV09SRCBsZW5ndGgpDQotew0KLSAgICBzaGEzODRfY29udGV4dCAqY3R4ID0gKHNoYTM4NF9jb250ZXh0ICopY29udGV4dDsNCi0gICAgRlhfRFdPUkQgbGVmdCwgZmlsbDsNCi0gICAgaWYoICEgbGVuZ3RoICkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGxlZnQgPSAoRlhfRFdPUkQpY3R4LT50b3RhbFswXSAmIDB4N0Y7DQotICAgIGZpbGwgPSAxMjggLSBsZWZ0Ow0KLSAgICBjdHgtPnRvdGFsWzBdICs9IGxlbmd0aDsNCi0gICAgaWYoIGN0eC0+dG90YWxbMF0gPCBsZW5ndGggKSB7DQotICAgICAgICBjdHgtPnRvdGFsWzFdKys7DQotICAgIH0NCi0gICAgaWYoIGxlZnQgJiYgbGVuZ3RoID49IGZpbGwgKSB7DQotICAgICAgICBGWFNZU19tZW1jcHkzMiggKHZvaWQgKikgKGN0eC0+YnVmZmVyICsgbGVmdCksDQotICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgaW5wdXQsIGZpbGwgKTsNCi0gICAgICAgIHNoYTM4NF9wcm9jZXNzKCBjdHgsIGN0eC0+YnVmZmVyICk7DQotICAgICAgICBsZW5ndGggLT0gZmlsbDsNCi0gICAgICAgIGlucHV0ICArPSBmaWxsOw0KLSAgICAgICAgbGVmdCA9IDA7DQotICAgIH0NCi0gICAgd2hpbGUoIGxlbmd0aCA+PSAxMjggKSB7DQotICAgICAgICBzaGEzODRfcHJvY2VzcyggY3R4LCBpbnB1dCApOw0KLSAgICAgICAgbGVuZ3RoIC09IDEyODsNCi0gICAgICAgIGlucHV0ICArPSAxMjg7DQotICAgIH0NCi0gICAgaWYoIGxlbmd0aCApIHsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKCAodm9pZCAqKSAoY3R4LT5idWZmZXIgKyBsZWZ0KSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSBpbnB1dCwgbGVuZ3RoICk7DQotICAgIH0NCi19DQotdm9pZCBDUllQVF9TSEEzODRGaW5pc2goRlhfTFBWT0lEIGNvbnRleHQsIEZYX0JZVEUgZGlnZXN0WzQ4XSkNCi17DQotICAgIHNoYTM4NF9jb250ZXh0ICpjdHggPSAoc2hhMzg0X2NvbnRleHQgKiljb250ZXh0Ow0KLSAgICBGWF9EV09SRCBsYXN0LCBwYWRuOw0KLSAgICBGWF9CWVRFIG1zZ2xlblsxNl07DQotICAgIEZYU1lTX21lbXNldDMyKG1zZ2xlbiwgMCwgMTYpOw0KLSAgICBGWF9VSU5UNjQgaGlnaCwgbG93Ow0KLSAgICBoaWdoID0gKCBjdHgtPnRvdGFsWzBdID4+IDI5ICkNCi0gICAgICAgICAgIHwgKCBjdHgtPnRvdGFsWzFdIDw8ICAzICk7DQotICAgIGxvdyAgPSAoIGN0eC0+dG90YWxbMF0gPDwgIDMgKTsNCi0gICAgUFVUX0ZYXzY0RFdPUkQoIGhpZ2gsIG1zZ2xlbiwgMCApOw0KLSAgICBQVVRfRlhfNjREV09SRCggbG93LCAgbXNnbGVuLCA4ICk7DQotICAgIGxhc3QgPSAoRlhfRFdPUkQpY3R4LT50b3RhbFswXSAmIDB4N0Y7DQotICAgIHBhZG4gPSAoIGxhc3QgPCAxMTIgKSA/ICggMTEyIC0gbGFzdCApIDogKCAyNDAgLSBsYXN0ICk7DQotICAgIENSWVBUX1NIQTM4NFVwZGF0ZSggY3R4LCBzaGEzODRfcGFkZGluZywgcGFkbiApOw0KLSAgICBDUllQVF9TSEEzODRVcGRhdGUoIGN0eCwgbXNnbGVuLCAxNiApOw0KLSAgICBQVVRfRlhfNjREV09SRChjdHgtPnN0YXRlWzBdLCBkaWdlc3QsIDApOw0KLSAgICBQVVRfRlhfNjREV09SRChjdHgtPnN0YXRlWzFdLCBkaWdlc3QsIDgpOw0KLSAgICBQVVRfRlhfNjREV09SRChjdHgtPnN0YXRlWzJdLCBkaWdlc3QsIDE2KTsNCi0gICAgUFVUX0ZYXzY0RFdPUkQoY3R4LT5zdGF0ZVszXSwgZGlnZXN0LCAyNCk7DQotICAgIFBVVF9GWF82NERXT1JEKGN0eC0+c3RhdGVbNF0sIGRpZ2VzdCwgMzIpOw0KLSAgICBQVVRfRlhfNjREV09SRChjdHgtPnN0YXRlWzVdLCBkaWdlc3QsIDQwKTsNCi19DQotdm9pZCBDUllQVF9TSEEzODRHZW5lcmF0ZShGWF9MUENCWVRFIGRhdGEsIEZYX0RXT1JEIHNpemUsIEZYX0JZVEUgZGlnZXN0WzY0XSkNCi17DQotICAgIHNoYTM4NF9jb250ZXh0IGNvbnRleHQ7DQotICAgIENSWVBUX1NIQTM4NFN0YXJ0KCZjb250ZXh0KTsNCi0gICAgQ1JZUFRfU0hBMzg0VXBkYXRlKCZjb250ZXh0LCBkYXRhLCBzaXplKTsNCi0gICAgQ1JZUFRfU0hBMzg0RmluaXNoKCZjb250ZXh0LCBkaWdlc3QpOw0KLX0NCi12b2lkIENSWVBUX1NIQTUxMlN0YXJ0KEZYX0xQVk9JRCBjb250ZXh0KQ0KLXsNCi0gICAgaWYgKGNvbnRleHQgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHNoYTM4NF9jb250ZXh0ICpjdHggPSAoc2hhMzg0X2NvbnRleHQgKiljb250ZXh0Ow0KLSAgICBGWFNZU19tZW1zZXQzMihjdHgsIDAsIHNpemVvZihzaGEzODRfY29udGV4dCkpOw0KLSAgICBjdHgtPnN0YXRlWzBdID0gRlhfYXRvNjRpKCI2YTA5ZTY2N2YzYmNjOTA4Iik7DQotICAgIGN0eC0+c3RhdGVbMV0gPSBGWF9hdG82NGkoImJiNjdhZTg1ODRjYWE3M2IiKTsNCi0gICAgY3R4LT5zdGF0ZVsyXSA9IEZYX2F0bzY0aSgiM2M2ZWYzNzJmZTk0ZjgyYiIpOw0KLSAgICBjdHgtPnN0YXRlWzNdID0gRlhfYXRvNjRpKCJhNTRmZjUzYTVmMWQzNmYxIik7DQotICAgIGN0eC0+c3RhdGVbNF0gPSBGWF9hdG82NGkoIjUxMGU1MjdmYWRlNjgyZDEiKTsNCi0gICAgY3R4LT5zdGF0ZVs1XSA9IEZYX2F0bzY0aSgiOWIwNTY4OGMyYjNlNmMxZiIpOw0KLSAgICBjdHgtPnN0YXRlWzZdID0gRlhfYXRvNjRpKCIxZjgzZDlhYmZiNDFiZDZiIik7DQotICAgIGN0eC0+c3RhdGVbN10gPSBGWF9hdG82NGkoIjViZTBjZDE5MTM3ZTIxNzkiKTsNCi19DQotdm9pZCBDUllQVF9TSEE1MTJVcGRhdGUoRlhfTFBWT0lEIGNvbnRleHQsIEZYX0xQQ0JZVEUgZGF0YSwgRlhfRFdPUkQgc2l6ZSkNCi17DQotICAgIENSWVBUX1NIQTM4NFVwZGF0ZShjb250ZXh0LCBkYXRhLCBzaXplKTsNCi19DQotdm9pZCBDUllQVF9TSEE1MTJGaW5pc2goRlhfTFBWT0lEIGNvbnRleHQsIEZYX0JZVEUgZGlnZXN0WzY0XSkNCi17DQotICAgIHNoYTM4NF9jb250ZXh0ICpjdHggPSAoc2hhMzg0X2NvbnRleHQgKiljb250ZXh0Ow0KLSAgICBGWF9EV09SRCBsYXN0LCBwYWRuOw0KLSAgICBGWF9CWVRFIG1zZ2xlblsxNl07DQotICAgIEZYU1lTX21lbXNldDMyKG1zZ2xlbiwgMCwgMTYpOw0KLSAgICBGWF9VSU5UNjQgaGlnaCwgbG93Ow0KLSAgICBoaWdoID0gKCBjdHgtPnRvdGFsWzBdID4+IDI5ICkNCi0gICAgICAgICAgIHwgKCBjdHgtPnRvdGFsWzFdIDw8ICAzICk7DQotICAgIGxvdyAgPSAoIGN0eC0+dG90YWxbMF0gPDwgIDMgKTsNCi0gICAgUFVUX0ZYXzY0RFdPUkQoIGhpZ2gsIG1zZ2xlbiwgMCApOw0KLSAgICBQVVRfRlhfNjREV09SRCggbG93LCAgbXNnbGVuLCA4ICk7DQotICAgIGxhc3QgPSAoRlhfRFdPUkQpY3R4LT50b3RhbFswXSAmIDB4N0Y7DQotICAgIHBhZG4gPSAoIGxhc3QgPCAxMTIgKSA/ICggMTEyIC0gbGFzdCApIDogKCAyNDAgLSBsYXN0ICk7DQotICAgIENSWVBUX1NIQTUxMlVwZGF0ZSggY3R4LCBzaGEzODRfcGFkZGluZywgcGFkbiApOw0KLSAgICBDUllQVF9TSEE1MTJVcGRhdGUoIGN0eCwgbXNnbGVuLCAxNiApOw0KLSAgICBQVVRfRlhfNjREV09SRChjdHgtPnN0YXRlWzBdLCBkaWdlc3QsIDApOw0KLSAgICBQVVRfRlhfNjREV09SRChjdHgtPnN0YXRlWzFdLCBkaWdlc3QsIDgpOw0KLSAgICBQVVRfRlhfNjREV09SRChjdHgtPnN0YXRlWzJdLCBkaWdlc3QsIDE2KTsNCi0gICAgUFVUX0ZYXzY0RFdPUkQoY3R4LT5zdGF0ZVszXSwgZGlnZXN0LCAyNCk7DQotICAgIFBVVF9GWF82NERXT1JEKGN0eC0+c3RhdGVbNF0sIGRpZ2VzdCwgMzIpOw0KLSAgICBQVVRfRlhfNjREV09SRChjdHgtPnN0YXRlWzVdLCBkaWdlc3QsIDQwKTsNCi0gICAgUFVUX0ZYXzY0RFdPUkQoY3R4LT5zdGF0ZVs2XSwgZGlnZXN0LCA0OCk7DQotICAgIFBVVF9GWF82NERXT1JEKGN0eC0+c3RhdGVbN10sIGRpZ2VzdCwgNTYpOw0KLX0NCi12b2lkIENSWVBUX1NIQTUxMkdlbmVyYXRlKEZYX0xQQ0JZVEUgZGF0YSwgRlhfRFdPUkQgc2l6ZSwgRlhfQllURSBkaWdlc3RbNjRdKQ0KLXsNCi0gICAgc2hhMzg0X2NvbnRleHQgY29udGV4dDsNCi0gICAgQ1JZUFRfU0hBNTEyU3RhcnQoJmNvbnRleHQpOw0KLSAgICBDUllQVF9TSEE1MTJVcGRhdGUoJmNvbnRleHQsIGRhdGEsIHNpemUpOw0KLSAgICBDUllQVF9TSEE1MTJGaW5pc2goJmNvbnRleHQsIGRpZ2VzdCk7DQotfQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX07DQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfYmFzaWMuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Zkcm0vZnhfY3J5cHQuaCIKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBpbnQgaFs1XTsKKyAgICB1bnNpZ25lZCBjaGFyIGJsb2NrWzY0XTsKKyAgICBpbnQgYmxrdXNlZDsKKyAgICB1bnNpZ25lZCBpbnQgbGVuaGksIGxlbmxvOworfSBTSEFfU3RhdGU7CisjZGVmaW5lIHJvbCh4LHkpICggKCh4KSA8PCAoeSkpIHwgKCgodW5zaWduZWQgaW50KXgpID4+ICgzMi15KSkgKQorc3RhdGljIHZvaWQgU0hBX0NvcmVfSW5pdCh1bnNpZ25lZCBpbnQgaFs1XSkKK3sKKyAgICBoWzBdID0gMHg2NzQ1MjMwMTsKKyAgICBoWzFdID0gMHhlZmNkYWI4OTsKKyAgICBoWzJdID0gMHg5OGJhZGNmZTsKKyAgICBoWzNdID0gMHgxMDMyNTQ3NjsKKyAgICBoWzRdID0gMHhjM2QyZTFmMDsKK30KK3N0YXRpYyB2b2lkIFNIQVRyYW5zZm9ybSh1bnNpZ25lZCBpbnQgKiBkaWdlc3QsIHVuc2lnbmVkIGludCAqIGJsb2NrKQoreworICAgIHVuc2lnbmVkIGludCB3WzgwXTsKKyAgICB1bnNpZ25lZCBpbnQgYSwgYiwgYywgZCwgZTsKKyAgICBpbnQgdDsKKyAgICBmb3IgKHQgPSAwOyB0IDwgMTY7IHQrKykgeworICAgICAgICB3W3RdID0gYmxvY2tbdF07CisgICAgfQorICAgIGZvciAodCA9IDE2OyB0IDwgODA7IHQrKykgeworICAgICAgICB1bnNpZ25lZCBpbnQgdG1wID0gd1t0IC0gM10gXiB3W3QgLSA4XSBeIHdbdCAtIDE0XSBeIHdbdCAtIDE2XTsKKyAgICAgICAgd1t0XSA9IHJvbCh0bXAsIDEpOworICAgIH0KKyAgICBhID0gZGlnZXN0WzBdOworICAgIGIgPSBkaWdlc3RbMV07CisgICAgYyA9IGRpZ2VzdFsyXTsKKyAgICBkID0gZGlnZXN0WzNdOworICAgIGUgPSBkaWdlc3RbNF07CisgICAgZm9yICh0ID0gMDsgdCA8IDIwOyB0KyspIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHRtcCA9CisgICAgICAgICAgICByb2woYSwgNSkgKyAoKGIgJiBjKSB8IChkICYgfmIpKSArIGUgKyB3W3RdICsgMHg1YTgyNzk5OTsKKyAgICAgICAgZSA9IGQ7CisgICAgICAgIGQgPSBjOworICAgICAgICBjID0gcm9sKGIsIDMwKTsKKyAgICAgICAgYiA9IGE7CisgICAgICAgIGEgPSB0bXA7CisgICAgfQorICAgIGZvciAodCA9IDIwOyB0IDwgNDA7IHQrKykgeworICAgICAgICB1bnNpZ25lZCBpbnQgdG1wID0gcm9sKGEsIDUpICsgKGIgXiBjIF4gZCkgKyBlICsgd1t0XSArIDB4NmVkOWViYTE7CisgICAgICAgIGUgPSBkOworICAgICAgICBkID0gYzsKKyAgICAgICAgYyA9IHJvbChiLCAzMCk7CisgICAgICAgIGIgPSBhOworICAgICAgICBhID0gdG1wOworICAgIH0KKyAgICBmb3IgKHQgPSA0MDsgdCA8IDYwOyB0KyspIHsKKyAgICAgICAgdW5zaWduZWQgaW50IHRtcCA9IHJvbChhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUpICsgKChiICYgYykgfCAoYiAmIGQpIHwgKGMgJiBkKSkgKyBlICsgd1t0XSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhmMWJiY2RjOworICAgICAgICBlID0gZDsKKyAgICAgICAgZCA9IGM7CisgICAgICAgIGMgPSByb2woYiwgMzApOworICAgICAgICBiID0gYTsKKyAgICAgICAgYSA9IHRtcDsKKyAgICB9CisgICAgZm9yICh0ID0gNjA7IHQgPCA4MDsgdCsrKSB7CisgICAgICAgIHVuc2lnbmVkIGludCB0bXAgPSByb2woYSwgNSkgKyAoYiBeIGMgXiBkKSArIGUgKyB3W3RdICsgMHhjYTYyYzFkNjsKKyAgICAgICAgZSA9IGQ7CisgICAgICAgIGQgPSBjOworICAgICAgICBjID0gcm9sKGIsIDMwKTsKKyAgICAgICAgYiA9IGE7CisgICAgICAgIGEgPSB0bXA7CisgICAgfQorICAgIGRpZ2VzdFswXSArPSBhOworICAgIGRpZ2VzdFsxXSArPSBiOworICAgIGRpZ2VzdFsyXSArPSBjOworICAgIGRpZ2VzdFszXSArPSBkOworICAgIGRpZ2VzdFs0XSArPSBlOworfQordm9pZCBDUllQVF9TSEExU3RhcnQoRlhfTFBWT0lEIGNvbnRleHQpCit7CisgICAgU0hBX1N0YXRlICogcyA9IChTSEFfU3RhdGUqKWNvbnRleHQ7CisgICAgU0hBX0NvcmVfSW5pdChzLT5oKTsKKyAgICBzLT5ibGt1c2VkID0gMDsKKyAgICBzLT5sZW5oaSA9IHMtPmxlbmxvID0gMDsKK30KK3ZvaWQgQ1JZUFRfU0hBMVVwZGF0ZShGWF9MUFZPSUQgY29udGV4dCwgRlhfTFBDQllURSBkYXRhLCBGWF9EV09SRCBzaXplKQoreworICAgIFNIQV9TdGF0ZSAqIHMgPSAoU0hBX1N0YXRlKiljb250ZXh0OworICAgIHVuc2lnbmVkIGNoYXIgKnEgPSAodW5zaWduZWQgY2hhciAqKWRhdGE7CisgICAgdW5zaWduZWQgaW50IHdvcmRibG9ja1sxNl07CisgICAgaW50IGxlbiA9IHNpemU7CisgICAgdW5zaWduZWQgaW50IGxlbncgPSBsZW47CisgICAgaW50IGk7CisgICAgcy0+bGVubG8gKz0gbGVudzsKKyAgICBzLT5sZW5oaSArPSAocy0+bGVubG8gPCBsZW53KTsKKyAgICBpZiAocy0+YmxrdXNlZCAmJiBzLT5ibGt1c2VkICsgbGVuIDwgNjQpIHsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIocy0+YmxvY2sgKyBzLT5ibGt1c2VkLCBxLCBsZW4pOworICAgICAgICBzLT5ibGt1c2VkICs9IGxlbjsKKyAgICB9IGVsc2UgeworICAgICAgICB3aGlsZSAocy0+YmxrdXNlZCArIGxlbiA+PSA2NCkgeworICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIocy0+YmxvY2sgKyBzLT5ibGt1c2VkLCBxLCA2NCAtIHMtPmJsa3VzZWQpOworICAgICAgICAgICAgcSArPSA2NCAtIHMtPmJsa3VzZWQ7CisgICAgICAgICAgICBsZW4gLT0gNjQgLSBzLT5ibGt1c2VkOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKyAgICAgICAgICAgICAgICB3b3JkYmxvY2tbaV0gPQorICAgICAgICAgICAgICAgICAgICAoKCh1bnNpZ25lZCBpbnQpIHMtPmJsb2NrW2kgKiA0ICsgMF0pIDw8IDI0KSB8CisgICAgICAgICAgICAgICAgICAgICgoKHVuc2lnbmVkIGludCkgcy0+YmxvY2tbaSAqIDQgKyAxXSkgPDwgMTYpIHwKKyAgICAgICAgICAgICAgICAgICAgKCgodW5zaWduZWQgaW50KSBzLT5ibG9ja1tpICogNCArIDJdKSA8PCA4KSB8CisgICAgICAgICAgICAgICAgICAgICgoKHVuc2lnbmVkIGludCkgcy0+YmxvY2tbaSAqIDQgKyAzXSkgPDwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTSEFUcmFuc2Zvcm0ocy0+aCwgd29yZGJsb2NrKTsKKyAgICAgICAgICAgIHMtPmJsa3VzZWQgPSAwOworICAgICAgICB9CisgICAgICAgIEZYU1lTX21lbWNweTMyKHMtPmJsb2NrLCBxLCBsZW4pOworICAgICAgICBzLT5ibGt1c2VkID0gbGVuOworICAgIH0KK30KK3ZvaWQgQ1JZUFRfU0hBMUZpbmlzaChGWF9MUFZPSUQgY29udGV4dCwgRlhfQllURSBkaWdlc3RbMjBdKQoreworICAgIFNIQV9TdGF0ZSAqIHMgPSAoU0hBX1N0YXRlKiljb250ZXh0OworICAgIGludCBpOworICAgIGludCBwYWQ7CisgICAgdW5zaWduZWQgY2hhciBjWzY0XTsKKyAgICB1bnNpZ25lZCBpbnQgbGVuaGksIGxlbmxvOworICAgIGlmIChzLT5ibGt1c2VkID49IDU2KSB7CisgICAgICAgIHBhZCA9IDU2ICsgNjQgLSBzLT5ibGt1c2VkOworICAgIH0gZWxzZSB7CisgICAgICAgIHBhZCA9IDU2IC0gcy0+YmxrdXNlZDsKKyAgICB9CisgICAgbGVuaGkgPSAocy0+bGVuaGkgPDwgMykgfCAocy0+bGVubG8gPj4gKDMyIC0gMykpOworICAgIGxlbmxvID0gKHMtPmxlbmxvIDw8IDMpOworICAgIEZYU1lTX21lbXNldDMyKGMsIDAsIHBhZCk7CisgICAgY1swXSA9IDB4ODA7CisgICAgQ1JZUFRfU0hBMVVwZGF0ZShzLCBjLCBwYWQpOworICAgIGNbMF0gPSAobGVuaGkgPj4gMjQpICYgMHhGRjsKKyAgICBjWzFdID0gKGxlbmhpID4+IDE2KSAmIDB4RkY7CisgICAgY1syXSA9IChsZW5oaSA+PiA4KSAmIDB4RkY7CisgICAgY1szXSA9IChsZW5oaSA+PiAwKSAmIDB4RkY7CisgICAgY1s0XSA9IChsZW5sbyA+PiAyNCkgJiAweEZGOworICAgIGNbNV0gPSAobGVubG8gPj4gMTYpICYgMHhGRjsKKyAgICBjWzZdID0gKGxlbmxvID4+IDgpICYgMHhGRjsKKyAgICBjWzddID0gKGxlbmxvID4+IDApICYgMHhGRjsKKyAgICBDUllQVF9TSEExVXBkYXRlKHMsIGMsIDgpOworICAgIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKyAgICAgICAgZGlnZXN0W2kgKiA0XSA9IChzLT5oW2ldID4+IDI0KSAmIDB4RkY7CisgICAgICAgIGRpZ2VzdFtpICogNCArIDFdID0gKHMtPmhbaV0gPj4gMTYpICYgMHhGRjsKKyAgICAgICAgZGlnZXN0W2kgKiA0ICsgMl0gPSAocy0+aFtpXSA+PiA4KSAmIDB4RkY7CisgICAgICAgIGRpZ2VzdFtpICogNCArIDNdID0gKHMtPmhbaV0pICYgMHhGRjsKKyAgICB9Cit9Cit2b2lkIENSWVBUX1NIQTFHZW5lcmF0ZShGWF9MUENCWVRFIGRhdGEsIEZYX0RXT1JEIHNpemUsIEZYX0JZVEUgZGlnZXN0WzIwXSkKK3sKKyAgICBTSEFfU3RhdGUgczsKKyAgICBDUllQVF9TSEExU3RhcnQoJnMpOworICAgIENSWVBUX1NIQTFVcGRhdGUoJnMsIGRhdGEsIHNpemUpOworICAgIENSWVBUX1NIQTFGaW5pc2goJnMsIGRpZ2VzdCk7Cit9Cit0eXBlZGVmIHN0cnVjdCB7CisgICAgRlhfRFdPUkQgdG90YWxbMl07CisgICAgRlhfRFdPUkQgc3RhdGVbOF07CisgICAgRlhfQllURSBidWZmZXJbNjRdOworfQorc2hhMjU2X2NvbnRleHQ7CisjZGVmaW5lIEdFVF9GWF9EV09SRChuLGIsaSkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChuKSA9ICggKEZYX0RXT1JEKSAoYilbKGkpICAgIF0gPDwgMjQgKSAgICAgICBcCisgICAgICAgICAgICAgIHwgKCAoRlhfRFdPUkQpIChiKVsoaSkgKyAxXSA8PCAxNiApICAgICAgIFwKKyAgICAgICAgICAgICAgfCAoIChGWF9EV09SRCkgKGIpWyhpKSArIDJdIDw8ICA4ICkgICAgICAgXAorICAgICAgICAgICAgICB8ICggKEZYX0RXT1JEKSAoYilbKGkpICsgM10gICAgICAgKTsgICAgICBcCisgICAgfQorI2RlZmluZSBQVVRfRlhfRFdPUkQobixiLGkpICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYilbKGkpICAgIF0gPSAoRlhfQllURSkgKCAobikgPj4gMjQgKTsgICAgICAgXAorICAgICAgICAoYilbKGkpICsgMV0gPSAoRlhfQllURSkgKCAobikgPj4gMTYgKTsgICAgICAgXAorICAgICAgICAoYilbKGkpICsgMl0gPSAoRlhfQllURSkgKCAobikgPj4gIDggKTsgICAgICAgXAorICAgICAgICAoYilbKGkpICsgM10gPSAoRlhfQllURSkgKCAobikgICAgICAgKTsgICAgICAgXAorICAgIH0KK3ZvaWQgQ1JZUFRfU0hBMjU2U3RhcnQoIEZYX0xQVk9JRCBjb250ZXh0ICkKK3sKKyAgICBzaGEyNTZfY29udGV4dCAqY3R4ID0gKHNoYTI1Nl9jb250ZXh0ICopY29udGV4dDsKKyAgICBjdHgtPnRvdGFsWzBdID0gMDsKKyAgICBjdHgtPnRvdGFsWzFdID0gMDsKKyAgICBjdHgtPnN0YXRlWzBdID0gMHg2QTA5RTY2NzsKKyAgICBjdHgtPnN0YXRlWzFdID0gMHhCQjY3QUU4NTsKKyAgICBjdHgtPnN0YXRlWzJdID0gMHgzQzZFRjM3MjsKKyAgICBjdHgtPnN0YXRlWzNdID0gMHhBNTRGRjUzQTsKKyAgICBjdHgtPnN0YXRlWzRdID0gMHg1MTBFNTI3RjsKKyAgICBjdHgtPnN0YXRlWzVdID0gMHg5QjA1Njg4QzsKKyAgICBjdHgtPnN0YXRlWzZdID0gMHgxRjgzRDlBQjsKKyAgICBjdHgtPnN0YXRlWzddID0gMHg1QkUwQ0QxOTsKK30KK3N0YXRpYyB2b2lkIHNoYTI1Nl9wcm9jZXNzKCBzaGEyNTZfY29udGV4dCAqY3R4LCBjb25zdCBGWF9CWVRFIGRhdGFbNjRdICkKK3sKKyAgICBGWF9EV09SRCB0ZW1wMSwgdGVtcDIsIFdbNjRdOworICAgIEZYX0RXT1JEIEEsIEIsIEMsIEQsIEUsIEYsIEcsIEg7CisgICAgR0VUX0ZYX0RXT1JEKCBXWzBdLCAgZGF0YSwgIDAgKTsKKyAgICBHRVRfRlhfRFdPUkQoIFdbMV0sICBkYXRhLCAgNCApOworICAgIEdFVF9GWF9EV09SRCggV1syXSwgIGRhdGEsICA4ICk7CisgICAgR0VUX0ZYX0RXT1JEKCBXWzNdLCAgZGF0YSwgMTIgKTsKKyAgICBHRVRfRlhfRFdPUkQoIFdbNF0sICBkYXRhLCAxNiApOworICAgIEdFVF9GWF9EV09SRCggV1s1XSwgIGRhdGEsIDIwICk7CisgICAgR0VUX0ZYX0RXT1JEKCBXWzZdLCAgZGF0YSwgMjQgKTsKKyAgICBHRVRfRlhfRFdPUkQoIFdbN10sICBkYXRhLCAyOCApOworICAgIEdFVF9GWF9EV09SRCggV1s4XSwgIGRhdGEsIDMyICk7CisgICAgR0VUX0ZYX0RXT1JEKCBXWzldLCAgZGF0YSwgMzYgKTsKKyAgICBHRVRfRlhfRFdPUkQoIFdbMTBdLCBkYXRhLCA0MCApOworICAgIEdFVF9GWF9EV09SRCggV1sxMV0sIGRhdGEsIDQ0ICk7CisgICAgR0VUX0ZYX0RXT1JEKCBXWzEyXSwgZGF0YSwgNDggKTsKKyAgICBHRVRfRlhfRFdPUkQoIFdbMTNdLCBkYXRhLCA1MiApOworICAgIEdFVF9GWF9EV09SRCggV1sxNF0sIGRhdGEsIDU2ICk7CisgICAgR0VUX0ZYX0RXT1JEKCBXWzE1XSwgZGF0YSwgNjAgKTsKKyNkZWZpbmUgIFNIUih4LG4pICgoeCAmIDB4RkZGRkZGRkYpID4+IG4pCisjZGVmaW5lIFJPVFIoeCxuKSAoU0hSKHgsbikgfCAoeCA8PCAoMzIgLSBuKSkpCisjZGVmaW5lIFMwKHgpIChST1RSKHgsIDcpIF4gUk9UUih4LDE4KSBeICBTSFIoeCwgMykpCisjZGVmaW5lIFMxKHgpIChST1RSKHgsMTcpIF4gUk9UUih4LDE5KSBeICBTSFIoeCwxMCkpCisjZGVmaW5lIFMyKHgpIChST1RSKHgsIDIpIF4gUk9UUih4LDEzKSBeIFJPVFIoeCwyMikpCisjZGVmaW5lIFMzKHgpIChST1RSKHgsIDYpIF4gUk9UUih4LDExKSBeIFJPVFIoeCwyNSkpCisjZGVmaW5lIEYwKHgseSx6KSAoKHggJiB5KSB8ICh6ICYgKHggfCB5KSkpCisjZGVmaW5lIEYxKHgseSx6KSAoeiBeICh4ICYgKHkgXiB6KSkpCisjZGVmaW5lIFIodCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgV1t0XSA9IFMxKFdbdCAtICAyXSkgKyBXW3QgLSAgN10gKyAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgUzAoV1t0IC0gMTVdKSArIFdbdCAtIDE2XSAgICAgICAgICAgIFwKKyAgICApCisjZGVmaW5lIFAoYSxiLGMsZCxlLGYsZyxoLHgsSykgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0ZW1wMSA9IGggKyBTMyhlKSArIEYxKGUsZixnKSArIEsgKyB4OyAgICAgIFwKKyAgICAgICAgdGVtcDIgPSBTMihhKSArIEYwKGEsYixjKTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGQgKz0gdGVtcDE7IGggPSB0ZW1wMSArIHRlbXAyOyAgICAgICAgICAgICAgXAorICAgIH0KKyAgICBBID0gY3R4LT5zdGF0ZVswXTsKKyAgICBCID0gY3R4LT5zdGF0ZVsxXTsKKyAgICBDID0gY3R4LT5zdGF0ZVsyXTsKKyAgICBEID0gY3R4LT5zdGF0ZVszXTsKKyAgICBFID0gY3R4LT5zdGF0ZVs0XTsKKyAgICBGID0gY3R4LT5zdGF0ZVs1XTsKKyAgICBHID0gY3R4LT5zdGF0ZVs2XTsKKyAgICBIID0gY3R4LT5zdGF0ZVs3XTsKKyAgICBQKCBBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBXWyAwXSwgMHg0MjhBMkY5OCApOworICAgIFAoIEgsIEEsIEIsIEMsIEQsIEUsIEYsIEcsIFdbIDFdLCAweDcxMzc0NDkxICk7CisgICAgUCggRywgSCwgQSwgQiwgQywgRCwgRSwgRiwgV1sgMl0sIDB4QjVDMEZCQ0YgKTsKKyAgICBQKCBGLCBHLCBILCBBLCBCLCBDLCBELCBFLCBXWyAzXSwgMHhFOUI1REJBNSApOworICAgIFAoIEUsIEYsIEcsIEgsIEEsIEIsIEMsIEQsIFdbIDRdLCAweDM5NTZDMjVCICk7CisgICAgUCggRCwgRSwgRiwgRywgSCwgQSwgQiwgQywgV1sgNV0sIDB4NTlGMTExRjEgKTsKKyAgICBQKCBDLCBELCBFLCBGLCBHLCBILCBBLCBCLCBXWyA2XSwgMHg5MjNGODJBNCApOworICAgIFAoIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEEsIFdbIDddLCAweEFCMUM1RUQ1ICk7CisgICAgUCggQSwgQiwgQywgRCwgRSwgRiwgRywgSCwgV1sgOF0sIDB4RDgwN0FBOTggKTsKKyAgICBQKCBILCBBLCBCLCBDLCBELCBFLCBGLCBHLCBXWyA5XSwgMHgxMjgzNUIwMSApOworICAgIFAoIEcsIEgsIEEsIEIsIEMsIEQsIEUsIEYsIFdbMTBdLCAweDI0MzE4NUJFICk7CisgICAgUCggRiwgRywgSCwgQSwgQiwgQywgRCwgRSwgV1sxMV0sIDB4NTUwQzdEQzMgKTsKKyAgICBQKCBFLCBGLCBHLCBILCBBLCBCLCBDLCBELCBXWzEyXSwgMHg3MkJFNUQ3NCApOworICAgIFAoIEQsIEUsIEYsIEcsIEgsIEEsIEIsIEMsIFdbMTNdLCAweDgwREVCMUZFICk7CisgICAgUCggQywgRCwgRSwgRiwgRywgSCwgQSwgQiwgV1sxNF0sIDB4OUJEQzA2QTcgKTsKKyAgICBQKCBCLCBDLCBELCBFLCBGLCBHLCBILCBBLCBXWzE1XSwgMHhDMTlCRjE3NCApOworICAgIFAoIEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIFIoMTYpLCAweEU0OUI2OUMxICk7CisgICAgUCggSCwgQSwgQiwgQywgRCwgRSwgRiwgRywgUigxNyksIDB4RUZCRTQ3ODYgKTsKKyAgICBQKCBHLCBILCBBLCBCLCBDLCBELCBFLCBGLCBSKDE4KSwgMHgwRkMxOURDNiApOworICAgIFAoIEYsIEcsIEgsIEEsIEIsIEMsIEQsIEUsIFIoMTkpLCAweDI0MENBMUNDICk7CisgICAgUCggRSwgRiwgRywgSCwgQSwgQiwgQywgRCwgUigyMCksIDB4MkRFOTJDNkYgKTsKKyAgICBQKCBELCBFLCBGLCBHLCBILCBBLCBCLCBDLCBSKDIxKSwgMHg0QTc0ODRBQSApOworICAgIFAoIEMsIEQsIEUsIEYsIEcsIEgsIEEsIEIsIFIoMjIpLCAweDVDQjBBOURDICk7CisgICAgUCggQiwgQywgRCwgRSwgRiwgRywgSCwgQSwgUigyMyksIDB4NzZGOTg4REEgKTsKKyAgICBQKCBBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBSKDI0KSwgMHg5ODNFNTE1MiApOworICAgIFAoIEgsIEEsIEIsIEMsIEQsIEUsIEYsIEcsIFIoMjUpLCAweEE4MzFDNjZEICk7CisgICAgUCggRywgSCwgQSwgQiwgQywgRCwgRSwgRiwgUigyNiksIDB4QjAwMzI3QzggKTsKKyAgICBQKCBGLCBHLCBILCBBLCBCLCBDLCBELCBFLCBSKDI3KSwgMHhCRjU5N0ZDNyApOworICAgIFAoIEUsIEYsIEcsIEgsIEEsIEIsIEMsIEQsIFIoMjgpLCAweEM2RTAwQkYzICk7CisgICAgUCggRCwgRSwgRiwgRywgSCwgQSwgQiwgQywgUigyOSksIDB4RDVBNzkxNDcgKTsKKyAgICBQKCBDLCBELCBFLCBGLCBHLCBILCBBLCBCLCBSKDMwKSwgMHgwNkNBNjM1MSApOworICAgIFAoIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEEsIFIoMzEpLCAweDE0MjkyOTY3ICk7CisgICAgUCggQSwgQiwgQywgRCwgRSwgRiwgRywgSCwgUigzMiksIDB4MjdCNzBBODUgKTsKKyAgICBQKCBILCBBLCBCLCBDLCBELCBFLCBGLCBHLCBSKDMzKSwgMHgyRTFCMjEzOCApOworICAgIFAoIEcsIEgsIEEsIEIsIEMsIEQsIEUsIEYsIFIoMzQpLCAweDREMkM2REZDICk7CisgICAgUCggRiwgRywgSCwgQSwgQiwgQywgRCwgRSwgUigzNSksIDB4NTMzODBEMTMgKTsKKyAgICBQKCBFLCBGLCBHLCBILCBBLCBCLCBDLCBELCBSKDM2KSwgMHg2NTBBNzM1NCApOworICAgIFAoIEQsIEUsIEYsIEcsIEgsIEEsIEIsIEMsIFIoMzcpLCAweDc2NkEwQUJCICk7CisgICAgUCggQywgRCwgRSwgRiwgRywgSCwgQSwgQiwgUigzOCksIDB4ODFDMkM5MkUgKTsKKyAgICBQKCBCLCBDLCBELCBFLCBGLCBHLCBILCBBLCBSKDM5KSwgMHg5MjcyMkM4NSApOworICAgIFAoIEEsIEIsIEMsIEQsIEUsIEYsIEcsIEgsIFIoNDApLCAweEEyQkZFOEExICk7CisgICAgUCggSCwgQSwgQiwgQywgRCwgRSwgRiwgRywgUig0MSksIDB4QTgxQTY2NEIgKTsKKyAgICBQKCBHLCBILCBBLCBCLCBDLCBELCBFLCBGLCBSKDQyKSwgMHhDMjRCOEI3MCApOworICAgIFAoIEYsIEcsIEgsIEEsIEIsIEMsIEQsIEUsIFIoNDMpLCAweEM3NkM1MUEzICk7CisgICAgUCggRSwgRiwgRywgSCwgQSwgQiwgQywgRCwgUig0NCksIDB4RDE5MkU4MTkgKTsKKyAgICBQKCBELCBFLCBGLCBHLCBILCBBLCBCLCBDLCBSKDQ1KSwgMHhENjk5MDYyNCApOworICAgIFAoIEMsIEQsIEUsIEYsIEcsIEgsIEEsIEIsIFIoNDYpLCAweEY0MEUzNTg1ICk7CisgICAgUCggQiwgQywgRCwgRSwgRiwgRywgSCwgQSwgUig0NyksIDB4MTA2QUEwNzAgKTsKKyAgICBQKCBBLCBCLCBDLCBELCBFLCBGLCBHLCBILCBSKDQ4KSwgMHgxOUE0QzExNiApOworICAgIFAoIEgsIEEsIEIsIEMsIEQsIEUsIEYsIEcsIFIoNDkpLCAweDFFMzc2QzA4ICk7CisgICAgUCggRywgSCwgQSwgQiwgQywgRCwgRSwgRiwgUig1MCksIDB4Mjc0ODc3NEMgKTsKKyAgICBQKCBGLCBHLCBILCBBLCBCLCBDLCBELCBFLCBSKDUxKSwgMHgzNEIwQkNCNSApOworICAgIFAoIEUsIEYsIEcsIEgsIEEsIEIsIEMsIEQsIFIoNTIpLCAweDM5MUMwQ0IzICk7CisgICAgUCggRCwgRSwgRiwgRywgSCwgQSwgQiwgQywgUig1MyksIDB4NEVEOEFBNEEgKTsKKyAgICBQKCBDLCBELCBFLCBGLCBHLCBILCBBLCBCLCBSKDU0KSwgMHg1QjlDQ0E0RiApOworICAgIFAoIEIsIEMsIEQsIEUsIEYsIEcsIEgsIEEsIFIoNTUpLCAweDY4MkU2RkYzICk7CisgICAgUCggQSwgQiwgQywgRCwgRSwgRiwgRywgSCwgUig1NiksIDB4NzQ4RjgyRUUgKTsKKyAgICBQKCBILCBBLCBCLCBDLCBELCBFLCBGLCBHLCBSKDU3KSwgMHg3OEE1NjM2RiApOworICAgIFAoIEcsIEgsIEEsIEIsIEMsIEQsIEUsIEYsIFIoNTgpLCAweDg0Qzg3ODE0ICk7CisgICAgUCggRiwgRywgSCwgQSwgQiwgQywgRCwgRSwgUig1OSksIDB4OENDNzAyMDggKTsKKyAgICBQKCBFLCBGLCBHLCBILCBBLCBCLCBDLCBELCBSKDYwKSwgMHg5MEJFRkZGQSApOworICAgIFAoIEQsIEUsIEYsIEcsIEgsIEEsIEIsIEMsIFIoNjEpLCAweEE0NTA2Q0VCICk7CisgICAgUCggQywgRCwgRSwgRiwgRywgSCwgQSwgQiwgUig2MiksIDB4QkVGOUEzRjcgKTsKKyAgICBQKCBCLCBDLCBELCBFLCBGLCBHLCBILCBBLCBSKDYzKSwgMHhDNjcxNzhGMiApOworICAgIGN0eC0+c3RhdGVbMF0gKz0gQTsKKyAgICBjdHgtPnN0YXRlWzFdICs9IEI7CisgICAgY3R4LT5zdGF0ZVsyXSArPSBDOworICAgIGN0eC0+c3RhdGVbM10gKz0gRDsKKyAgICBjdHgtPnN0YXRlWzRdICs9IEU7CisgICAgY3R4LT5zdGF0ZVs1XSArPSBGOworICAgIGN0eC0+c3RhdGVbNl0gKz0gRzsKKyAgICBjdHgtPnN0YXRlWzddICs9IEg7Cit9Cit2b2lkIENSWVBUX1NIQTI1NlVwZGF0ZSggdm9pZCogY29udGV4dCwgRlhfTFBDQllURSBpbnB1dCwgRlhfRFdPUkQgbGVuZ3RoICkKK3sKKyAgICBzaGEyNTZfY29udGV4dCAqY3R4ID0gKHNoYTI1Nl9jb250ZXh0ICopY29udGV4dDsKKyAgICBGWF9EV09SRCBsZWZ0LCBmaWxsOworICAgIGlmKCAhIGxlbmd0aCApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBsZWZ0ID0gY3R4LT50b3RhbFswXSAmIDB4M0Y7CisgICAgZmlsbCA9IDY0IC0gbGVmdDsKKyAgICBjdHgtPnRvdGFsWzBdICs9IGxlbmd0aDsKKyAgICBjdHgtPnRvdGFsWzBdICY9IDB4RkZGRkZGRkY7CisgICAgaWYoIGN0eC0+dG90YWxbMF0gPCBsZW5ndGggKSB7CisgICAgICAgIGN0eC0+dG90YWxbMV0rKzsKKyAgICB9CisgICAgaWYoIGxlZnQgJiYgbGVuZ3RoID49IGZpbGwgKSB7CisgICAgICAgIEZYU1lTX21lbWNweTMyKCAodm9pZCAqKSAoY3R4LT5idWZmZXIgKyBsZWZ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIGlucHV0LCBmaWxsICk7CisgICAgICAgIHNoYTI1Nl9wcm9jZXNzKCBjdHgsIGN0eC0+YnVmZmVyICk7CisgICAgICAgIGxlbmd0aCAtPSBmaWxsOworICAgICAgICBpbnB1dCAgKz0gZmlsbDsKKyAgICAgICAgbGVmdCA9IDA7CisgICAgfQorICAgIHdoaWxlKCBsZW5ndGggPj0gNjQgKSB7CisgICAgICAgIHNoYTI1Nl9wcm9jZXNzKCBjdHgsIGlucHV0ICk7CisgICAgICAgIGxlbmd0aCAtPSA2NDsKKyAgICAgICAgaW5wdXQgICs9IDY0OworICAgIH0KKyAgICBpZiggbGVuZ3RoICkgeworICAgICAgICBGWFNZU19tZW1jcHkzMiggKHZvaWQgKikgKGN0eC0+YnVmZmVyICsgbGVmdCksCisgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSBpbnB1dCwgbGVuZ3RoICk7CisgICAgfQorfQorc3RhdGljIGNvbnN0IEZYX0JZVEUgc2hhMjU2X3BhZGRpbmdbNjRdID0geworICAgIDB4ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKK307Cit2b2lkIENSWVBUX1NIQTI1NkZpbmlzaCggRlhfTFBWT0lEIGNvbnRleHQsIEZYX0JZVEUgZGlnZXN0WzMyXSApCit7CisgICAgc2hhMjU2X2NvbnRleHQgKmN0eCA9IChzaGEyNTZfY29udGV4dCAqKWNvbnRleHQ7CisgICAgRlhfRFdPUkQgbGFzdCwgcGFkbjsKKyAgICBGWF9EV09SRCBoaWdoLCBsb3c7CisgICAgRlhfQllURSBtc2dsZW5bOF07CisgICAgaGlnaCA9ICggY3R4LT50b3RhbFswXSA+PiAyOSApCisgICAgICAgICAgIHwgKCBjdHgtPnRvdGFsWzFdIDw8ICAzICk7CisgICAgbG93ICA9ICggY3R4LT50b3RhbFswXSA8PCAgMyApOworICAgIFBVVF9GWF9EV09SRCggaGlnaCwgbXNnbGVuLCAwICk7CisgICAgUFVUX0ZYX0RXT1JEKCBsb3csICBtc2dsZW4sIDQgKTsKKyAgICBsYXN0ID0gY3R4LT50b3RhbFswXSAmIDB4M0Y7CisgICAgcGFkbiA9ICggbGFzdCA8IDU2ICkgPyAoIDU2IC0gbGFzdCApIDogKCAxMjAgLSBsYXN0ICk7CisgICAgQ1JZUFRfU0hBMjU2VXBkYXRlKCBjdHgsIHNoYTI1Nl9wYWRkaW5nLCBwYWRuICk7CisgICAgQ1JZUFRfU0hBMjU2VXBkYXRlKCBjdHgsIG1zZ2xlbiwgOCApOworICAgIFBVVF9GWF9EV09SRCggY3R4LT5zdGF0ZVswXSwgZGlnZXN0LCAgMCApOworICAgIFBVVF9GWF9EV09SRCggY3R4LT5zdGF0ZVsxXSwgZGlnZXN0LCAgNCApOworICAgIFBVVF9GWF9EV09SRCggY3R4LT5zdGF0ZVsyXSwgZGlnZXN0LCAgOCApOworICAgIFBVVF9GWF9EV09SRCggY3R4LT5zdGF0ZVszXSwgZGlnZXN0LCAxMiApOworICAgIFBVVF9GWF9EV09SRCggY3R4LT5zdGF0ZVs0XSwgZGlnZXN0LCAxNiApOworICAgIFBVVF9GWF9EV09SRCggY3R4LT5zdGF0ZVs1XSwgZGlnZXN0LCAyMCApOworICAgIFBVVF9GWF9EV09SRCggY3R4LT5zdGF0ZVs2XSwgZGlnZXN0LCAyNCApOworICAgIFBVVF9GWF9EV09SRCggY3R4LT5zdGF0ZVs3XSwgZGlnZXN0LCAyOCApOworfQordm9pZCBDUllQVF9TSEEyNTZHZW5lcmF0ZShGWF9MUENCWVRFIGRhdGEsIEZYX0RXT1JEIHNpemUsIEZYX0JZVEUgZGlnZXN0WzMyXSkKK3sKKyAgICBzaGEyNTZfY29udGV4dCBjdHg7CisgICAgQ1JZUFRfU0hBMjU2U3RhcnQoJmN0eCk7CisgICAgQ1JZUFRfU0hBMjU2VXBkYXRlKCZjdHgsIGRhdGEsIHNpemUpOworICAgIENSWVBUX1NIQTI1NkZpbmlzaCgmY3R4LCBkaWdlc3QpOworfQordHlwZWRlZiBzdHJ1Y3QgeworICAgIEZYX1VJTlQ2NAl0b3RhbFsyXTsKKyAgICBGWF9VSU5UNjQJc3RhdGVbOF07CisgICAgRlhfQllURQkJYnVmZmVyWzEyOF07Cit9IHNoYTM4NF9jb250ZXh0OworRlhfVUlOVDY0IEZYX2F0bzY0aShGWF9MUENTVFIgc3RyKQoreworICAgIEZYU1lTX2Fzc2VydChzdHIgIT0gTlVMTCk7CisgICAgRlhfVUlOVDY0IHJldCA9IDA7CisgICAgaW50IGxlbiA9IChpbnQpRlhTWVNfc3RybGVuKHN0cik7CisgICAgbGVuID0gbGVuID4gMTYgPyAxNiA6IGxlbjsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgIGlmIChpKSB7CisgICAgICAgICAgICByZXQgPDw9IDQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0cltpXSA+PSAnMCcgJiYgc3RyW2ldIDw9ICc5JykgeworICAgICAgICAgICAgcmV0IHw9IChzdHJbaV0gLSAnMCcpICYgMHhGRjsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJbaV0gPj0gJ2EnICYmIHN0cltpXSA8PSAnZicpIHsKKyAgICAgICAgICAgIHJldCB8PSAoc3RyW2ldIC0gJ2EnICsgMTApICYgMHhGRjsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJbaV0gPj0gJ0EnICYmIHN0cltpXSA8PSAnRicpIHsKKyAgICAgICAgICAgIHJldCB8PSAoc3RyW2ldIC0gJ0EnICsgMTApICYgMHhGRjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEZYU1lTX2Fzc2VydChGQUxTRSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KK3ZvaWQgQ1JZUFRfU0hBMzg0U3RhcnQoRlhfTFBWT0lEIGNvbnRleHQpCit7CisgICAgaWYgKGNvbnRleHQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNoYTM4NF9jb250ZXh0ICpjdHggPSAoc2hhMzg0X2NvbnRleHQgKiljb250ZXh0OworICAgIEZYU1lTX21lbXNldDMyKGN0eCwgMCwgc2l6ZW9mKHNoYTM4NF9jb250ZXh0KSk7CisgICAgY3R4LT5zdGF0ZVswXSA9IEZYX2F0bzY0aSgiY2JiYjlkNWRjMTA1OWVkOCIpOworICAgIGN0eC0+c3RhdGVbMV0gPSBGWF9hdG82NGkoIjYyOWEyOTJhMzY3Y2Q1MDciKTsKKyAgICBjdHgtPnN0YXRlWzJdID0gRlhfYXRvNjRpKCI5MTU5MDE1YTMwNzBkZDE3Iik7CisgICAgY3R4LT5zdGF0ZVszXSA9IEZYX2F0bzY0aSgiMTUyZmVjZDhmNzBlNTkzOSIpOworICAgIGN0eC0+c3RhdGVbNF0gPSBGWF9hdG82NGkoIjY3MzMyNjY3ZmZjMDBiMzEiKTsKKyAgICBjdHgtPnN0YXRlWzVdID0gRlhfYXRvNjRpKCI4ZWI0NGE4NzY4NTgxNTExIik7CisgICAgY3R4LT5zdGF0ZVs2XSA9IEZYX2F0bzY0aSgiZGIwYzJlMGQ2NGY5OGZhNyIpOworICAgIGN0eC0+c3RhdGVbN10gPSBGWF9hdG82NGkoIjQ3YjU0ODFkYmVmYTRmYTQiKTsKK30KKyNkZWZpbmUgU0hBMzg0X0YwKHgseSx6KSAoKHggJiB5KSB8ICh6ICYgKHggfCB5KSkpCisjZGVmaW5lIFNIQTM4NF9GMSh4LHkseikgKHogXiAoeCAmICh5IF4geikpKQorI2RlZmluZSBTSEEzODRfU0hSKHgsbikgKHggPj4gbikKKyNkZWZpbmUgU0hBMzg0X1JPVFIoeCxuKSAoU0hBMzg0X1NIUih4LCBuKSB8IHggPDwgKDY0IC0gbikpCisjZGVmaW5lIFNIQTM4NF9TMCh4KSAoU0hBMzg0X1JPVFIoeCwgMSkgXiBTSEEzODRfUk9UUih4LCA4KSBeICBTSEEzODRfU0hSKHgsIDcpKQorI2RlZmluZSBTSEEzODRfUzEoeCkgKFNIQTM4NF9ST1RSKHgsMTkpIF4gU0hBMzg0X1JPVFIoeCwgNjEpIF4gIFNIQTM4NF9TSFIoeCwgNikpCisjZGVmaW5lIFNIQTM4NF9TMih4KSAoU0hBMzg0X1JPVFIoeCwgMjgpIF4gU0hBMzg0X1JPVFIoeCwgMzQpIF4gU0hBMzg0X1JPVFIoeCwgMzkpKQorI2RlZmluZSBTSEEzODRfUzMoeCkgKFNIQTM4NF9ST1RSKHgsIDE0KSBeIFNIQTM4NF9ST1RSKHgsMTgpIF4gU0hBMzg0X1JPVFIoeCwgNDEpKQorI2RlZmluZSBTSEEzODRfUChhLGIsYyxkLGUsZixnLGgseCxLKQkJCQkJCQlcCisgICAgewkJCQkJCQkJCQkJCQkJCQlcCisgICAgICAgIHRlbXAxID0gaCArIFNIQTM4NF9TMyhlKSArIFNIQTM4NF9GMShlLGYsZykgKyBLICsgeDsJCVwKKyAgICAgICAgdGVtcDIgPSBTSEEzODRfUzIoYSkgKyBTSEEzODRfRjAoYSxiLGMpOwkJCQkJXAorICAgICAgICBkICs9IHRlbXAxOyBoID0gdGVtcDEgKyB0ZW1wMjsJCQkJCQkJCVwKKyAgICB9CitzdGF0aWMgY29uc3QgRlhfQllURSBzaGEzODRfcGFkZGluZ1sxMjhdID0geworICAgIDB4ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKK307CisjZGVmaW5lIFNIQTM4NF9SKHQpIChXW3RdID0gU0hBMzg0X1MxKFdbdCAtICAyXSkgKyBXW3QgLSAgN10gKyBTSEEzODRfUzAoV1t0IC0gMTVdKSArIFdbdCAtIDE2XSkKK3N0YXRpYyBGWF9MUENTVFIgY29uc3RhbnRzW10gPSB7CisgICAgIjQyOGEyZjk4ZDcyOGFlMjIiLAorICAgICI3MTM3NDQ5MTIzZWY2NWNkIiwKKyAgICAiYjVjMGZiY2ZlYzRkM2IyZiIsCisgICAgImU5YjVkYmE1ODE4OWRiYmMiLAorICAgICIzOTU2YzI1YmYzNDhiNTM4IiwKKyAgICAiNTlmMTExZjFiNjA1ZDAxOSIsCisgICAgIjkyM2Y4MmE0YWYxOTRmOWIiLAorICAgICJhYjFjNWVkNWRhNmQ4MTE4IiwKKyAgICAiZDgwN2FhOThhMzAzMDI0MiIsCisgICAgIjEyODM1YjAxNDU3MDZmYmUiLAorICAgICIyNDMxODViZTRlZTRiMjhjIiwKKyAgICAiNTUwYzdkYzNkNWZmYjRlMiIsCisgICAgIjcyYmU1ZDc0ZjI3Yjg5NmYiLAorICAgICI4MGRlYjFmZTNiMTY5NmIxIiwKKyAgICAiOWJkYzA2YTcyNWM3MTIzNSIsCisgICAgImMxOWJmMTc0Y2Y2OTI2OTQiLAorICAgICJlNDliNjljMTllZjE0YWQyIiwKKyAgICAiZWZiZTQ3ODYzODRmMjVlMyIsCisgICAgIjBmYzE5ZGM2OGI4Y2Q1YjUiLAorICAgICIyNDBjYTFjYzc3YWM5YzY1IiwKKyAgICAiMmRlOTJjNmY1OTJiMDI3NSIsCisgICAgIjRhNzQ4NGFhNmVhNmU0ODMiLAorICAgICI1Y2IwYTlkY2JkNDFmYmQ0IiwKKyAgICAiNzZmOTg4ZGE4MzExNTNiNSIsCisgICAgIjk4M2U1MTUyZWU2NmRmYWIiLAorICAgICJhODMxYzY2ZDJkYjQzMjEwIiwKKyAgICAiYjAwMzI3Yzg5OGZiMjEzZiIsCisgICAgImJmNTk3ZmM3YmVlZjBlZTQiLAorICAgICJjNmUwMGJmMzNkYTg4ZmMyIiwKKyAgICAiZDVhNzkxNDc5MzBhYTcyNSIsCisgICAgIjA2Y2E2MzUxZTAwMzgyNmYiLAorICAgICIxNDI5Mjk2NzBhMGU2ZTcwIiwKKyAgICAiMjdiNzBhODU0NmQyMmZmYyIsCisgICAgIjJlMWIyMTM4NWMyNmM5MjYiLAorICAgICI0ZDJjNmRmYzVhYzQyYWVkIiwKKyAgICAiNTMzODBkMTM5ZDk1YjNkZiIsCisgICAgIjY1MGE3MzU0OGJhZjYzZGUiLAorICAgICI3NjZhMGFiYjNjNzdiMmE4IiwKKyAgICAiODFjMmM5MmU0N2VkYWVlNiIsCisgICAgIjkyNzIyYzg1MTQ4MjM1M2IiLAorICAgICJhMmJmZThhMTRjZjEwMzY0IiwKKyAgICAiYTgxYTY2NGJiYzQyMzAwMSIsCisgICAgImMyNGI4YjcwZDBmODk3OTEiLAorICAgICJjNzZjNTFhMzA2NTRiZTMwIiwKKyAgICAiZDE5MmU4MTlkNmVmNTIxOCIsCisgICAgImQ2OTkwNjI0NTU2NWE5MTAiLAorICAgICJmNDBlMzU4NTU3NzEyMDJhIiwKKyAgICAiMTA2YWEwNzAzMmJiZDFiOCIsCisgICAgIjE5YTRjMTE2YjhkMmQwYzgiLAorICAgICIxZTM3NmMwODUxNDFhYjUzIiwKKyAgICAiMjc0ODc3NGNkZjhlZWI5OSIsCisgICAgIjM0YjBiY2I1ZTE5YjQ4YTgiLAorICAgICIzOTFjMGNiM2M1Yzk1YTYzIiwKKyAgICAiNGVkOGFhNGFlMzQxOGFjYiIsCisgICAgIjViOWNjYTRmNzc2M2UzNzMiLAorICAgICI2ODJlNmZmM2Q2YjJiOGEzIiwKKyAgICAiNzQ4ZjgyZWU1ZGVmYjJmYyIsCisgICAgIjc4YTU2MzZmNDMxNzJmNjAiLAorICAgICI4NGM4NzgxNGExZjBhYjcyIiwKKyAgICAiOGNjNzAyMDgxYTY0MzllYyIsCisgICAgIjkwYmVmZmZhMjM2MzFlMjgiLAorICAgICJhNDUwNmNlYmRlODJiZGU5IiwKKyAgICAiYmVmOWEzZjdiMmM2NzkxNSIsCisgICAgImM2NzE3OGYyZTM3MjUzMmIiLAorICAgICJjYTI3M2VjZWVhMjY2MTljIiwKKyAgICAiZDE4NmI4YzcyMWMwYzIwNyIsCisgICAgImVhZGE3ZGQ2Y2RlMGViMWUiLAorICAgICJmNTdkNGY3ZmVlNmVkMTc4IiwKKyAgICAiMDZmMDY3YWE3MjE3NmZiYSIsCisgICAgIjBhNjM3ZGM1YTJjODk4YTYiLAorICAgICIxMTNmOTgwNGJlZjkwZGFlIiwKKyAgICAiMWI3MTBiMzUxMzFjNDcxYiIsCisgICAgIjI4ZGI3N2Y1MjMwNDdkODQiLAorICAgICIzMmNhYWI3YjQwYzcyNDkzIiwKKyAgICAiM2M5ZWJlMGExNWM5YmViYyIsCisgICAgIjQzMWQ2N2M0OWMxMDBkNGMiLAorICAgICI0Y2M1ZDRiZWNiM2U0MmI2IiwKKyAgICAiNTk3ZjI5OWNmYzY1N2UyYSIsCisgICAgIjVmY2I2ZmFiM2FkNmZhZWMiLAorICAgICI2YzQ0MTk4YzRhNDc1ODE3IiwKK307CisjZGVmaW5lIEdFVF9GWF82NFdPUkQobixiLGkpICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAobikgPSAoIChGWF9VSU5UNjQpIChiKVsoaSkgICAgXSA8PCA1NiApICAgICAgIFwKKyAgICAgICAgICAgICAgfCAoIChGWF9VSU5UNjQpIChiKVsoaSkgKyAxXSA8PCA0OCApICAgICAgIFwKKyAgICAgICAgICAgICAgfCAoIChGWF9VSU5UNjQpIChiKVsoaSkgKyAyXSA8PCA0MCApICAgICAgIFwKKyAgICAgICAgICAgICAgfCAoIChGWF9VSU5UNjQpIChiKVsoaSkgKyAzXSA8PCAzMiApICAgICAgXAorICAgICAgICAgICAgICB8ICggKEZYX1VJTlQ2NCkgKGIpWyhpKSArIDRdIDw8IDI0ICkgICAgICAgXAorICAgICAgICAgICAgICB8ICggKEZYX1VJTlQ2NCkgKGIpWyhpKSArIDVdIDw8IDE2ICkgICAgICAgXAorICAgICAgICAgICAgICB8ICggKEZYX1VJTlQ2NCkgKGIpWyhpKSArIDZdIDw8ICA4ICkgICAgICAgXAorICAgICAgICAgICAgICB8ICggKEZYX1VJTlQ2NCkgKGIpWyhpKSArIDddICAgICAgICk7ICAgICAgXAorICAgIH0KKyNkZWZpbmUgUFVUX0ZYXzY0RFdPUkQobixiLGkpICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYilbKGkpICAgIF0gPSAoRlhfQllURSkgKCAobikgPj4gNTYgKTsgICAgICAgXAorICAgICAgICAoYilbKGkpICsgMV0gPSAoRlhfQllURSkgKCAobikgPj4gNDggKTsgICAgICAgXAorICAgICAgICAoYilbKGkpICsgMl0gPSAoRlhfQllURSkgKCAobikgPj4gNDAgKTsgICAgICAgXAorICAgICAgICAoYilbKGkpICsgM10gPSAoRlhfQllURSkgKCAobikgPj4gMzIgKTsgICAgICAgXAorICAgICAgICAoYilbKGkpICsgNF0gPSAoRlhfQllURSkgKCAobikgPj4gMjQgKTsgICAgICAgXAorICAgICAgICAoYilbKGkpICsgNV0gPSAoRlhfQllURSkgKCAobikgPj4gMTYgKTsgICAgICAgXAorICAgICAgICAoYilbKGkpICsgNl0gPSAoRlhfQllURSkgKCAobikgPj4gIDggKTsgICAgICAgXAorICAgICAgICAoYilbKGkpICsgN10gPSAoRlhfQllURSkgKCAobikgKTsgICAgICAgXAorICAgIH0KK3N0YXRpYyB2b2lkIHNoYTM4NF9wcm9jZXNzKCBzaGEzODRfY29udGV4dCAqY3R4LCBjb25zdCBGWF9CWVRFIGRhdGFbMTI4XSApCit7CisgICAgRlhfVUlOVDY0IHRlbXAxLCB0ZW1wMjsKKyAgICBGWF9VSU5UNjQgQSwgQiwgQywgRCwgRSwgRiwgRywgSDsKKyAgICBGWF9VSU5UNjQgV1s4MF07CisgICAgR0VUX0ZYXzY0V09SRChXWzBdLCBkYXRhLCAwKTsKKyAgICBHRVRfRlhfNjRXT1JEKFdbMV0sIGRhdGEsIDgpOworICAgIEdFVF9GWF82NFdPUkQoV1syXSwgZGF0YSwgMTYpOworICAgIEdFVF9GWF82NFdPUkQoV1szXSwgZGF0YSwgMjQpOworICAgIEdFVF9GWF82NFdPUkQoV1s0XSwgZGF0YSwgMzIpOworICAgIEdFVF9GWF82NFdPUkQoV1s1XSwgZGF0YSwgNDApOworICAgIEdFVF9GWF82NFdPUkQoV1s2XSwgZGF0YSwgNDgpOworICAgIEdFVF9GWF82NFdPUkQoV1s3XSwgZGF0YSwgNTYpOworICAgIEdFVF9GWF82NFdPUkQoV1s4XSwgZGF0YSwgNjQpOworICAgIEdFVF9GWF82NFdPUkQoV1s5XSwgZGF0YSwgNzIpOworICAgIEdFVF9GWF82NFdPUkQoV1sxMF0sIGRhdGEsIDgwKTsKKyAgICBHRVRfRlhfNjRXT1JEKFdbMTFdLCBkYXRhLCA4OCk7CisgICAgR0VUX0ZYXzY0V09SRChXWzEyXSwgZGF0YSwgOTYpOworICAgIEdFVF9GWF82NFdPUkQoV1sxM10sIGRhdGEsIDEwNCk7CisgICAgR0VUX0ZYXzY0V09SRChXWzE0XSwgZGF0YSwgMTEyKTsKKyAgICBHRVRfRlhfNjRXT1JEKFdbMTVdLCBkYXRhLCAxMjApOworICAgIEEgPSBjdHgtPnN0YXRlWzBdOworICAgIEIgPSBjdHgtPnN0YXRlWzFdOworICAgIEMgPSBjdHgtPnN0YXRlWzJdOworICAgIEQgPSBjdHgtPnN0YXRlWzNdOworICAgIEUgPSBjdHgtPnN0YXRlWzRdOworICAgIEYgPSBjdHgtPnN0YXRlWzVdOworICAgIEcgPSBjdHgtPnN0YXRlWzZdOworICAgIEggPSBjdHgtPnN0YXRlWzddOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAgICAgICBGWF9VSU5UNjQgdGVtcFs4XTsKKyAgICAgICAgaWYgKGkgPCAyKSB7CisgICAgICAgICAgICB0ZW1wWzBdID0gV1tpICogOF07CisgICAgICAgICAgICB0ZW1wWzFdID0gV1tpICogOCArIDFdOworICAgICAgICAgICAgdGVtcFsyXSA9IFdbaSAqIDggKyAyXTsKKyAgICAgICAgICAgIHRlbXBbM10gPSBXW2kgKiA4ICsgM107CisgICAgICAgICAgICB0ZW1wWzRdID0gV1tpICogOCArIDRdOworICAgICAgICAgICAgdGVtcFs1XSA9IFdbaSAqIDggKyA1XTsKKyAgICAgICAgICAgIHRlbXBbNl0gPSBXW2kgKiA4ICsgNl07CisgICAgICAgICAgICB0ZW1wWzddID0gV1tpICogOCArIDddOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVtcFswXSA9IFNIQTM4NF9SKGkgKiA4KTsKKyAgICAgICAgICAgIHRlbXBbMV0gPSBTSEEzODRfUihpICogOCArIDEpOworICAgICAgICAgICAgdGVtcFsyXSA9IFNIQTM4NF9SKGkgKiA4ICsgMik7CisgICAgICAgICAgICB0ZW1wWzNdID0gU0hBMzg0X1IoaSAqIDggKyAzKTsKKyAgICAgICAgICAgIHRlbXBbNF0gPSBTSEEzODRfUihpICogOCArIDQpOworICAgICAgICAgICAgdGVtcFs1XSA9IFNIQTM4NF9SKGkgKiA4ICsgNSk7CisgICAgICAgICAgICB0ZW1wWzZdID0gU0hBMzg0X1IoaSAqIDggKyA2KTsKKyAgICAgICAgICAgIHRlbXBbN10gPSBTSEEzODRfUihpICogOCArIDcpOworICAgICAgICB9CisgICAgICAgIFNIQTM4NF9QKCBBLCBCLCBDLCBELCBFLCBGLCBHLCBILCB0ZW1wWyAwXSwgRlhfYXRvNjRpKGNvbnN0YW50c1tpICogOCAgICBdKSApOworICAgICAgICBTSEEzODRfUCggSCwgQSwgQiwgQywgRCwgRSwgRiwgRywgdGVtcFsgMV0sIEZYX2F0bzY0aShjb25zdGFudHNbaSAqIDggKyAxXSkgKTsKKyAgICAgICAgU0hBMzg0X1AoIEcsIEgsIEEsIEIsIEMsIEQsIEUsIEYsIHRlbXBbIDJdLCBGWF9hdG82NGkoY29uc3RhbnRzW2kgKiA4ICsgMl0pICk7CisgICAgICAgIFNIQTM4NF9QKCBGLCBHLCBILCBBLCBCLCBDLCBELCBFLCB0ZW1wWyAzXSwgRlhfYXRvNjRpKGNvbnN0YW50c1tpICogOCArIDNdKSApOworICAgICAgICBTSEEzODRfUCggRSwgRiwgRywgSCwgQSwgQiwgQywgRCwgdGVtcFsgNF0sIEZYX2F0bzY0aShjb25zdGFudHNbaSAqIDggKyA0XSkgKTsKKyAgICAgICAgU0hBMzg0X1AoIEQsIEUsIEYsIEcsIEgsIEEsIEIsIEMsIHRlbXBbIDVdLCBGWF9hdG82NGkoY29uc3RhbnRzW2kgKiA4ICsgNV0pICk7CisgICAgICAgIFNIQTM4NF9QKCBDLCBELCBFLCBGLCBHLCBILCBBLCBCLCB0ZW1wWyA2XSwgRlhfYXRvNjRpKGNvbnN0YW50c1tpICogOCArIDZdKSApOworICAgICAgICBTSEEzODRfUCggQiwgQywgRCwgRSwgRiwgRywgSCwgQSwgdGVtcFsgN10sIEZYX2F0bzY0aShjb25zdGFudHNbaSAqIDggKyA3XSkgKTsKKyAgICB9CisgICAgY3R4LT5zdGF0ZVswXSArPSBBOworICAgIGN0eC0+c3RhdGVbMV0gKz0gQjsKKyAgICBjdHgtPnN0YXRlWzJdICs9IEM7CisgICAgY3R4LT5zdGF0ZVszXSArPSBEOworICAgIGN0eC0+c3RhdGVbNF0gKz0gRTsKKyAgICBjdHgtPnN0YXRlWzVdICs9IEY7CisgICAgY3R4LT5zdGF0ZVs2XSArPSBHOworICAgIGN0eC0+c3RhdGVbN10gKz0gSDsKK30KK3ZvaWQgQ1JZUFRfU0hBMzg0VXBkYXRlKEZYX0xQVk9JRCBjb250ZXh0LCBGWF9MUENCWVRFIGlucHV0LCBGWF9EV09SRCBsZW5ndGgpCit7CisgICAgc2hhMzg0X2NvbnRleHQgKmN0eCA9IChzaGEzODRfY29udGV4dCAqKWNvbnRleHQ7CisgICAgRlhfRFdPUkQgbGVmdCwgZmlsbDsKKyAgICBpZiggISBsZW5ndGggKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbGVmdCA9IChGWF9EV09SRCljdHgtPnRvdGFsWzBdICYgMHg3RjsKKyAgICBmaWxsID0gMTI4IC0gbGVmdDsKKyAgICBjdHgtPnRvdGFsWzBdICs9IGxlbmd0aDsKKyAgICBpZiggY3R4LT50b3RhbFswXSA8IGxlbmd0aCApIHsKKyAgICAgICAgY3R4LT50b3RhbFsxXSsrOworICAgIH0KKyAgICBpZiggbGVmdCAmJiBsZW5ndGggPj0gZmlsbCApIHsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIoICh2b2lkICopIChjdHgtPmJ1ZmZlciArIGxlZnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgaW5wdXQsIGZpbGwgKTsKKyAgICAgICAgc2hhMzg0X3Byb2Nlc3MoIGN0eCwgY3R4LT5idWZmZXIgKTsKKyAgICAgICAgbGVuZ3RoIC09IGZpbGw7CisgICAgICAgIGlucHV0ICArPSBmaWxsOworICAgICAgICBsZWZ0ID0gMDsKKyAgICB9CisgICAgd2hpbGUoIGxlbmd0aCA+PSAxMjggKSB7CisgICAgICAgIHNoYTM4NF9wcm9jZXNzKCBjdHgsIGlucHV0ICk7CisgICAgICAgIGxlbmd0aCAtPSAxMjg7CisgICAgICAgIGlucHV0ICArPSAxMjg7CisgICAgfQorICAgIGlmKCBsZW5ndGggKSB7CisgICAgICAgIEZYU1lTX21lbWNweTMyKCAodm9pZCAqKSAoY3R4LT5idWZmZXIgKyBsZWZ0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIGlucHV0LCBsZW5ndGggKTsKKyAgICB9Cit9Cit2b2lkIENSWVBUX1NIQTM4NEZpbmlzaChGWF9MUFZPSUQgY29udGV4dCwgRlhfQllURSBkaWdlc3RbNDhdKQoreworICAgIHNoYTM4NF9jb250ZXh0ICpjdHggPSAoc2hhMzg0X2NvbnRleHQgKiljb250ZXh0OworICAgIEZYX0RXT1JEIGxhc3QsIHBhZG47CisgICAgRlhfQllURSBtc2dsZW5bMTZdOworICAgIEZYU1lTX21lbXNldDMyKG1zZ2xlbiwgMCwgMTYpOworICAgIEZYX1VJTlQ2NCBoaWdoLCBsb3c7CisgICAgaGlnaCA9ICggY3R4LT50b3RhbFswXSA+PiAyOSApCisgICAgICAgICAgIHwgKCBjdHgtPnRvdGFsWzFdIDw8ICAzICk7CisgICAgbG93ICA9ICggY3R4LT50b3RhbFswXSA8PCAgMyApOworICAgIFBVVF9GWF82NERXT1JEKCBoaWdoLCBtc2dsZW4sIDAgKTsKKyAgICBQVVRfRlhfNjREV09SRCggbG93LCAgbXNnbGVuLCA4ICk7CisgICAgbGFzdCA9IChGWF9EV09SRCljdHgtPnRvdGFsWzBdICYgMHg3RjsKKyAgICBwYWRuID0gKCBsYXN0IDwgMTEyICkgPyAoIDExMiAtIGxhc3QgKSA6ICggMjQwIC0gbGFzdCApOworICAgIENSWVBUX1NIQTM4NFVwZGF0ZSggY3R4LCBzaGEzODRfcGFkZGluZywgcGFkbiApOworICAgIENSWVBUX1NIQTM4NFVwZGF0ZSggY3R4LCBtc2dsZW4sIDE2ICk7CisgICAgUFVUX0ZYXzY0RFdPUkQoY3R4LT5zdGF0ZVswXSwgZGlnZXN0LCAwKTsKKyAgICBQVVRfRlhfNjREV09SRChjdHgtPnN0YXRlWzFdLCBkaWdlc3QsIDgpOworICAgIFBVVF9GWF82NERXT1JEKGN0eC0+c3RhdGVbMl0sIGRpZ2VzdCwgMTYpOworICAgIFBVVF9GWF82NERXT1JEKGN0eC0+c3RhdGVbM10sIGRpZ2VzdCwgMjQpOworICAgIFBVVF9GWF82NERXT1JEKGN0eC0+c3RhdGVbNF0sIGRpZ2VzdCwgMzIpOworICAgIFBVVF9GWF82NERXT1JEKGN0eC0+c3RhdGVbNV0sIGRpZ2VzdCwgNDApOworfQordm9pZCBDUllQVF9TSEEzODRHZW5lcmF0ZShGWF9MUENCWVRFIGRhdGEsIEZYX0RXT1JEIHNpemUsIEZYX0JZVEUgZGlnZXN0WzY0XSkKK3sKKyAgICBzaGEzODRfY29udGV4dCBjb250ZXh0OworICAgIENSWVBUX1NIQTM4NFN0YXJ0KCZjb250ZXh0KTsKKyAgICBDUllQVF9TSEEzODRVcGRhdGUoJmNvbnRleHQsIGRhdGEsIHNpemUpOworICAgIENSWVBUX1NIQTM4NEZpbmlzaCgmY29udGV4dCwgZGlnZXN0KTsKK30KK3ZvaWQgQ1JZUFRfU0hBNTEyU3RhcnQoRlhfTFBWT0lEIGNvbnRleHQpCit7CisgICAgaWYgKGNvbnRleHQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNoYTM4NF9jb250ZXh0ICpjdHggPSAoc2hhMzg0X2NvbnRleHQgKiljb250ZXh0OworICAgIEZYU1lTX21lbXNldDMyKGN0eCwgMCwgc2l6ZW9mKHNoYTM4NF9jb250ZXh0KSk7CisgICAgY3R4LT5zdGF0ZVswXSA9IEZYX2F0bzY0aSgiNmEwOWU2NjdmM2JjYzkwOCIpOworICAgIGN0eC0+c3RhdGVbMV0gPSBGWF9hdG82NGkoImJiNjdhZTg1ODRjYWE3M2IiKTsKKyAgICBjdHgtPnN0YXRlWzJdID0gRlhfYXRvNjRpKCIzYzZlZjM3MmZlOTRmODJiIik7CisgICAgY3R4LT5zdGF0ZVszXSA9IEZYX2F0bzY0aSgiYTU0ZmY1M2E1ZjFkMzZmMSIpOworICAgIGN0eC0+c3RhdGVbNF0gPSBGWF9hdG82NGkoIjUxMGU1MjdmYWRlNjgyZDEiKTsKKyAgICBjdHgtPnN0YXRlWzVdID0gRlhfYXRvNjRpKCI5YjA1Njg4YzJiM2U2YzFmIik7CisgICAgY3R4LT5zdGF0ZVs2XSA9IEZYX2F0bzY0aSgiMWY4M2Q5YWJmYjQxYmQ2YiIpOworICAgIGN0eC0+c3RhdGVbN10gPSBGWF9hdG82NGkoIjViZTBjZDE5MTM3ZTIxNzkiKTsKK30KK3ZvaWQgQ1JZUFRfU0hBNTEyVXBkYXRlKEZYX0xQVk9JRCBjb250ZXh0LCBGWF9MUENCWVRFIGRhdGEsIEZYX0RXT1JEIHNpemUpCit7CisgICAgQ1JZUFRfU0hBMzg0VXBkYXRlKGNvbnRleHQsIGRhdGEsIHNpemUpOworfQordm9pZCBDUllQVF9TSEE1MTJGaW5pc2goRlhfTFBWT0lEIGNvbnRleHQsIEZYX0JZVEUgZGlnZXN0WzY0XSkKK3sKKyAgICBzaGEzODRfY29udGV4dCAqY3R4ID0gKHNoYTM4NF9jb250ZXh0ICopY29udGV4dDsKKyAgICBGWF9EV09SRCBsYXN0LCBwYWRuOworICAgIEZYX0JZVEUgbXNnbGVuWzE2XTsKKyAgICBGWFNZU19tZW1zZXQzMihtc2dsZW4sIDAsIDE2KTsKKyAgICBGWF9VSU5UNjQgaGlnaCwgbG93OworICAgIGhpZ2ggPSAoIGN0eC0+dG90YWxbMF0gPj4gMjkgKQorICAgICAgICAgICB8ICggY3R4LT50b3RhbFsxXSA8PCAgMyApOworICAgIGxvdyAgPSAoIGN0eC0+dG90YWxbMF0gPDwgIDMgKTsKKyAgICBQVVRfRlhfNjREV09SRCggaGlnaCwgbXNnbGVuLCAwICk7CisgICAgUFVUX0ZYXzY0RFdPUkQoIGxvdywgIG1zZ2xlbiwgOCApOworICAgIGxhc3QgPSAoRlhfRFdPUkQpY3R4LT50b3RhbFswXSAmIDB4N0Y7CisgICAgcGFkbiA9ICggbGFzdCA8IDExMiApID8gKCAxMTIgLSBsYXN0ICkgOiAoIDI0MCAtIGxhc3QgKTsKKyAgICBDUllQVF9TSEE1MTJVcGRhdGUoIGN0eCwgc2hhMzg0X3BhZGRpbmcsIHBhZG4gKTsKKyAgICBDUllQVF9TSEE1MTJVcGRhdGUoIGN0eCwgbXNnbGVuLCAxNiApOworICAgIFBVVF9GWF82NERXT1JEKGN0eC0+c3RhdGVbMF0sIGRpZ2VzdCwgMCk7CisgICAgUFVUX0ZYXzY0RFdPUkQoY3R4LT5zdGF0ZVsxXSwgZGlnZXN0LCA4KTsKKyAgICBQVVRfRlhfNjREV09SRChjdHgtPnN0YXRlWzJdLCBkaWdlc3QsIDE2KTsKKyAgICBQVVRfRlhfNjREV09SRChjdHgtPnN0YXRlWzNdLCBkaWdlc3QsIDI0KTsKKyAgICBQVVRfRlhfNjREV09SRChjdHgtPnN0YXRlWzRdLCBkaWdlc3QsIDMyKTsKKyAgICBQVVRfRlhfNjREV09SRChjdHgtPnN0YXRlWzVdLCBkaWdlc3QsIDQwKTsKKyAgICBQVVRfRlhfNjREV09SRChjdHgtPnN0YXRlWzZdLCBkaWdlc3QsIDQ4KTsKKyAgICBQVVRfRlhfNjREV09SRChjdHgtPnN0YXRlWzddLCBkaWdlc3QsIDU2KTsKK30KK3ZvaWQgQ1JZUFRfU0hBNTEyR2VuZXJhdGUoRlhfTFBDQllURSBkYXRhLCBGWF9EV09SRCBzaXplLCBGWF9CWVRFIGRpZ2VzdFs2NF0pCit7CisgICAgc2hhMzg0X2NvbnRleHQgY29udGV4dDsKKyAgICBDUllQVF9TSEE1MTJTdGFydCgmY29udGV4dCk7CisgICAgQ1JZUFRfU0hBNTEyVXBkYXRlKCZjb250ZXh0LCBkYXRhLCBzaXplKTsKKyAgICBDUllQVF9TSEE1MTJGaW5pc2goJmNvbnRleHQsIGRpZ2VzdCk7Cit9CisjaWZkZWYgX19jcGx1c3BsdXMKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9iYXNpY19tb2R1bGUuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2Jhc2ljX21vZHVsZS5jcHAKaW5kZXggNGM2NDhiNC4uYTQ0NmFhNSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2Jhc2ljX21vZHVsZS5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2Jhc2ljX21vZHVsZS5jcHAKQEAgLTEsMTc4ICsxLDE3OCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhjb2RlYy9meF9jb2RlYy5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCINCi1zdGF0aWMgQ1BERl9Nb2R1bGVNZ3IqCWdfRlBERkFQSV9wRGVmYXVsdE1nciA9IE5VTEw7DQotQ1BERl9Nb2R1bGVNZ3IqIENQREZfTW9kdWxlTWdyOjpHZXQoKQ0KLXsNCi0gICAgcmV0dXJuIGdfRlBERkFQSV9wRGVmYXVsdE1ncjsNCi19DQotdm9pZCBDUERGX01vZHVsZU1ncjo6Q3JlYXRlKCkNCi17DQotICAgIGdfRlBERkFQSV9wRGVmYXVsdE1nciA9IEZYX05FVyBDUERGX01vZHVsZU1ncjsNCi0gICAgZ19GUERGQVBJX3BEZWZhdWx0TWdyLT5Jbml0aWFsaXplKCk7DQotfQ0KLXZvaWQgQ1BERl9Nb2R1bGVNZ3I6OkRlc3Ryb3koKQ0KLXsNCi0gICAgaWYgKGdfRlBERkFQSV9wRGVmYXVsdE1ncikgew0KLSAgICAgICAgZGVsZXRlIGdfRlBERkFQSV9wRGVmYXVsdE1ncjsNCi0gICAgfQ0KLSAgICBnX0ZQREZBUElfcERlZmF1bHRNZ3IgPSBOVUxMOw0KLX0NCi1DUERGX01vZHVsZU1ncjo6Q1BERl9Nb2R1bGVNZ3IoKQ0KLXsNCi0gICAgbV9wQ29kZWNNb2R1bGUgPSBOVUxMOw0KLSAgICBtX3BQYWdlTW9kdWxlID0gTlVMTDsNCi0gICAgbV9wUmVuZGVyTW9kdWxlID0gTlVMTDsNCi0gICAgbV9GaWxlQnVmU2l6ZSA9IDUxMjsNCi19DQotdm9pZCBDUERGX01vZHVsZU1ncjo6SW5pdGlhbGl6ZSgpDQotew0KLSAgICBJbml0TW9kdWxlcygpOw0KLSAgICBtX0ZpbGVCdWZTaXplID0gNTEyOw0KLX0NCi12b2lkIENQREZfTW9kdWxlTWdyOjpJbml0TW9kdWxlcygpDQotew0KLSAgICBtX3BDb2RlY01vZHVsZSA9IE5VTEw7DQotICAgIG1fcFBhZ2VNb2R1bGUgPSBGWF9ORVcgQ1BERl9QYWdlTW9kdWxlRGVmOw0KLSAgICBtX3BSZW5kZXJNb2R1bGUgPSBGWF9ORVcgQ1BERl9SZW5kZXJNb2R1bGVEZWY7DQotfQ0KLUNQREZfTW9kdWxlTWdyOjp+Q1BERl9Nb2R1bGVNZ3IoKQ0KLXsNCi0gICAgaWYgKG1fcFBhZ2VNb2R1bGUpIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BQYWdlTW9kdWxlOw0KLSAgICB9DQotICAgIGlmIChtX3BSZW5kZXJNb2R1bGUpIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BSZW5kZXJNb2R1bGU7DQotICAgIH0NCi19DQotdm9pZCBDUERGX01vZHVsZU1ncjo6U2V0RG93bmxvYWRDYWxsYmFjayhGWF9CT09MICgqY2FsbGJhY2spKEZYX0xQQ1NUUiBtb2R1bGVfbmFtZSkpDQotew0KLSAgICBtX3BEb3dubG9hZENhbGxiYWNrID0gY2FsbGJhY2s7DQotfQ0KLUZYX0JPT0wgQ1BERl9Nb2R1bGVNZ3I6OkRvd25sb2FkTW9kdWxlKEZYX0xQQ1NUUiBtb2R1bGVfbmFtZSkNCi17DQotICAgIGlmIChtX3BEb3dubG9hZENhbGxiYWNrID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wRG93bmxvYWRDYWxsYmFjayhtb2R1bGVfbmFtZSk7DQotfQ0KLXN0YXRpYyBDRlhfQnl0ZVN0cmluZyBfR2V0UGF0aChjb25zdCBDRlhfQnl0ZVN0cmluZyYgZm9sZGVyLCBGWF9MUENTVFIgbmFtZSkNCi17DQotICAgIEZYX1NUUlNJWkUgZm9sZGVyX2xlbiA9IGZvbGRlci5HZXRMZW5ndGgoKTsNCi0jaWYgX0ZYX09TXyA9PSBfRlhfU1lNQklBTl8gfHwgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18NCi0gICAgaWYgKGZvbGRlcltmb2xkZXJfbGVuIC0gMV0gPT0gJ1xcJykgew0KLSAgICAgICAgcmV0dXJuIGZvbGRlciArIG5hbWU7DQotICAgIH0gZWxzZSB7DQotICAgICAgICByZXR1cm4gKGZvbGRlciArICJcXCIpICsgbmFtZTsNCi0gICAgfQ0KLSNlbHNlDQotICAgIGlmIChmb2xkZXJbZm9sZGVyX2xlbiAtIDFdID09ICcvJykgew0KLSAgICAgICAgcmV0dXJuIGZvbGRlciArIG5hbWU7DQotICAgIH0gZWxzZSB7DQotICAgICAgICByZXR1cm4gKGZvbGRlciArICIvIikgKyBuYW1lOw0KLSAgICB9DQotI2VuZGlmDQotfQ0KLXZvaWQgQ1BERl9Nb2R1bGVNZ3I6OlNldE1vZHVsZVBhdGgoRlhfTFBDU1RSIG1vZHVsZV9uYW1lLCBGWF9MUENTVFIgcGF0aCkNCi17DQotICAgIGlmIChtb2R1bGVfbmFtZSA9PSBOVUxMIHx8IG1vZHVsZV9uYW1lWzBdID09IDApIHsNCi0gICAgICAgIG1fRGVmYXVsdE1vZHVsZVBhdGggPSBwYXRoOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9Nb2R1bGVQYXRoTGlzdC5TZXRBdChtb2R1bGVfbmFtZSwgRlhfTkVXIENGWF9CeXRlU3RyaW5nKHBhdGgsIC0xKSk7DQotICAgIH0NCi19DQotQ0ZYX0J5dGVTdHJpbmcgQ1BERl9Nb2R1bGVNZ3I6OkdldE1vZHVsZUZpbGVQYXRoKEZYX0xQQ1NUUiBtb2R1bGVfbmFtZSwgRlhfTFBDU1RSIG5hbWUpDQotew0KLSAgICBDRlhfQnl0ZVN0cmluZyogcFBhdGggPSBOVUxMOw0KLSAgICBpZiAobV9Nb2R1bGVQYXRoTGlzdC5Mb29rdXAobW9kdWxlX25hbWUsIChGWF9MUFZPSUQmKXBQYXRoKSkgew0KLSAgICAgICAgcmV0dXJuIF9HZXRQYXRoKCpwUGF0aCwgbmFtZSk7DQotICAgIH0NCi0gICAgaWYgKCFtX0RlZmF1bHRNb2R1bGVQYXRoLklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuIF9HZXRQYXRoKG1fRGVmYXVsdE1vZHVsZVBhdGgsIG5hbWUpOw0KLSAgICB9DQotI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfDQotICAgIEZYX1dDSEFSIGFwcF9wYXRoWzI2MF07DQotICAgIDo6R2V0TW9kdWxlRmlsZU5hbWVXKE5VTEwsIChMUFdTVFIpYXBwX3BhdGgsIDI2MCk7DQotICAgIEZYX0lOVFBUUiBsZW4gPSBGWFNZU193Y3NsZW4oYXBwX3BhdGgpOw0KLSAgICBmb3IgKEZYX0lOVFBUUiBpID0gbGVuOyBpID49IDA7IGkgLS0pDQotICAgICAgICBpZiAoYXBwX3BhdGhbaV0gPT0gJ1xcJykgew0KLSAgICAgICAgICAgIGFwcF9wYXRoW2ldID0gMDsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgcGF0aCA9IENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShhcHBfcGF0aCk7DQotICAgIHBhdGggKz0gJ1xcJzsNCi0gICAgcGF0aCArPSBuYW1lOw0KLSAgICByZXR1cm4gcGF0aDsNCi0jZWxzZQ0KLSAgICByZXR1cm4gbmFtZTsNCi0jZW5kaWYNCi19DQotdm9pZCBDUERGX01vZHVsZU1ncjo6Tm90aWZ5TW9kdWxlQXZhaWxhYmxlKEZYX0xQQ1NUUiBtb2R1bGVfbmFtZSkNCi17DQotICAgIGlmIChGWFNZU19zdHJjbXAobW9kdWxlX25hbWUsIEFERElOX05BTUVfQ0pLKSA9PSAwKSB7DQotICAgICAgICBtX3BQYWdlTW9kdWxlLT5Ob3RpZnlDSktBdmFpbGFibGUoKTsNCi0gICAgfSBlbHNlIGlmIChGWFNZU19zdHJjbXAobW9kdWxlX25hbWUsIEFERElOX05BTUVfREVDT0RFUikgPT0gMCkgew0KLSAgICAgICAgbV9wUmVuZGVyTW9kdWxlLT5Ob3RpZnlEZWNvZGVyQXZhaWxhYmxlKCk7DQotICAgIH0NCi19DQotdm9pZCBDUERGX01vZHVsZU1ncjo6UmVnaXN0ZXJTZWN1cml0eUhhbmRsZXIoRlhfTFBDU1RSIGZpbHRlciwgQ1BERl9TZWN1cml0eUhhbmRsZXIgKiAoKkNyZWF0ZUhhbmRsZXIpKHZvaWQqIHBhcmFtKSwgdm9pZCogcGFyYW0pDQotew0KLSAgICBpZiAoQ3JlYXRlSGFuZGxlciA9PSBOVUxMKSB7DQotICAgICAgICBtX1NlY3VyaXR5SGFuZGxlck1hcC5SZW1vdmVLZXkoZmlsdGVyKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1fU2VjdXJpdHlIYW5kbGVyTWFwLlNldEF0KGZpbHRlciwgKHZvaWQqKUNyZWF0ZUhhbmRsZXIpOw0KLSAgICB9DQotICAgIGlmIChwYXJhbSkgew0KLSAgICAgICAgbV9TZWN1cml0eUhhbmRsZXJNYXAuU2V0QXQoRlhfQlNUUkMoIl9wYXJhbV8iKSArIGZpbHRlciwgcGFyYW0pOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9Nb2R1bGVNZ3I6OlNldFByaXZhdGVEYXRhKEZYX0xQVk9JRCBtb2R1bGVfaWQsIEZYX0xQVk9JRCBwRGF0YSwgUERfQ0FMTEJBQ0tfRlJFRURBVEEgY2FsbGJhY2spDQotew0KLSAgICBtX3ByaXZhdGVEYXRhLlNldFByaXZhdGVEYXRhKG1vZHVsZV9pZCwgcERhdGEsIGNhbGxiYWNrKTsNCi19DQotRlhfTFBWT0lEIENQREZfTW9kdWxlTWdyOjpHZXRQcml2YXRlRGF0YShGWF9MUFZPSUQgbW9kdWxlX2lkKQ0KLXsNCi0gICAgcmV0dXJuIG1fcHJpdmF0ZURhdGEuR2V0UHJpdmF0ZURhdGEobW9kdWxlX2lkKTsNCi19DQotQ1BERl9TZWN1cml0eUhhbmRsZXIqIENQREZfTW9kdWxlTWdyOjpDcmVhdGVTZWN1cml0eUhhbmRsZXIoRlhfTFBDU1RSIGZpbHRlcikNCi17DQotICAgIENQREZfU2VjdXJpdHlIYW5kbGVyKiAoKkNyZWF0ZUhhbmRsZXIpKHZvaWQqKSA9IE5VTEw7DQotICAgIGlmICghbV9TZWN1cml0eUhhbmRsZXJNYXAuTG9va3VwKGZpbHRlciwgKHZvaWQqJilDcmVhdGVIYW5kbGVyKSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKENyZWF0ZUhhbmRsZXIgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgdm9pZCogcGFyYW0gPSBOVUxMOw0KLSAgICBtX1NlY3VyaXR5SGFuZGxlck1hcC5Mb29rdXAoRlhfQlNUUkMoIl9wYXJhbV8iKSArIGZpbHRlciwgcGFyYW0pOw0KLSAgICByZXR1cm4gQ3JlYXRlSGFuZGxlcihwYXJhbSk7DQotfQ0KLUlDb2RlY19GYXhNb2R1bGUqIENQREZfTW9kdWxlTWdyOjpHZXRGYXhNb2R1bGUoKQ0KLXsNCi0gICAgcmV0dXJuIG1fcENvZGVjTW9kdWxlID8gbV9wQ29kZWNNb2R1bGUtPkdldEZheE1vZHVsZSgpIDogTlVMTDsNCi19DQotSUNvZGVjX0pwZWdNb2R1bGUqIENQREZfTW9kdWxlTWdyOjpHZXRKcGVnTW9kdWxlKCkNCi17DQotICAgIHJldHVybiBtX3BDb2RlY01vZHVsZSA/IG1fcENvZGVjTW9kdWxlLT5HZXRKcGVnTW9kdWxlKCkgOiBOVUxMOw0KLX0NCi1JQ29kZWNfSnB4TW9kdWxlKiBDUERGX01vZHVsZU1ncjo6R2V0SnB4TW9kdWxlKCkNCi17DQotICAgIHJldHVybiBtX3BDb2RlY01vZHVsZSA/IG1fcENvZGVjTW9kdWxlLT5HZXRKcHhNb2R1bGUoKSA6IE5VTEw7DQotfQ0KLUlDb2RlY19KYmlnMk1vZHVsZSogQ1BERl9Nb2R1bGVNZ3I6OkdldEpiaWcyTW9kdWxlKCkNCi17DQotICAgIHJldHVybiBtX3BDb2RlY01vZHVsZSA/IG1fcENvZGVjTW9kdWxlLT5HZXRKYmlnMk1vZHVsZSgpIDogTlVMTDsNCi19DQotSUNvZGVjX0ljY01vZHVsZSogQ1BERl9Nb2R1bGVNZ3I6OkdldEljY01vZHVsZSgpDQotew0KLSAgICByZXR1cm4gbV9wQ29kZWNNb2R1bGUgPyBtX3BDb2RlY01vZHVsZS0+R2V0SWNjTW9kdWxlKCkgOiBOVUxMOw0KLX0NCi1JQ29kZWNfRmxhdGVNb2R1bGUqIENQREZfTW9kdWxlTWdyOjpHZXRGbGF0ZU1vZHVsZSgpDQotew0KLSAgICByZXR1cm4gbV9wQ29kZWNNb2R1bGUgPyBtX3BDb2RlY01vZHVsZS0+R2V0RmxhdGVNb2R1bGUoKSA6IE5VTEw7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCIKK3N0YXRpYyBDUERGX01vZHVsZU1ncioJZ19GUERGQVBJX3BEZWZhdWx0TWdyID0gTlVMTDsKK0NQREZfTW9kdWxlTWdyKiBDUERGX01vZHVsZU1ncjo6R2V0KCkKK3sKKyAgICByZXR1cm4gZ19GUERGQVBJX3BEZWZhdWx0TWdyOworfQordm9pZCBDUERGX01vZHVsZU1ncjo6Q3JlYXRlKCkKK3sKKyAgICBnX0ZQREZBUElfcERlZmF1bHRNZ3IgPSBGWF9ORVcgQ1BERl9Nb2R1bGVNZ3I7CisgICAgZ19GUERGQVBJX3BEZWZhdWx0TWdyLT5Jbml0aWFsaXplKCk7Cit9Cit2b2lkIENQREZfTW9kdWxlTWdyOjpEZXN0cm95KCkKK3sKKyAgICBpZiAoZ19GUERGQVBJX3BEZWZhdWx0TWdyKSB7CisgICAgICAgIGRlbGV0ZSBnX0ZQREZBUElfcERlZmF1bHRNZ3I7CisgICAgfQorICAgIGdfRlBERkFQSV9wRGVmYXVsdE1nciA9IE5VTEw7Cit9CitDUERGX01vZHVsZU1ncjo6Q1BERl9Nb2R1bGVNZ3IoKQoreworICAgIG1fcENvZGVjTW9kdWxlID0gTlVMTDsKKyAgICBtX3BQYWdlTW9kdWxlID0gTlVMTDsKKyAgICBtX3BSZW5kZXJNb2R1bGUgPSBOVUxMOworICAgIG1fRmlsZUJ1ZlNpemUgPSA1MTI7Cit9Cit2b2lkIENQREZfTW9kdWxlTWdyOjpJbml0aWFsaXplKCkKK3sKKyAgICBJbml0TW9kdWxlcygpOworICAgIG1fRmlsZUJ1ZlNpemUgPSA1MTI7Cit9Cit2b2lkIENQREZfTW9kdWxlTWdyOjpJbml0TW9kdWxlcygpCit7CisgICAgbV9wQ29kZWNNb2R1bGUgPSBOVUxMOworICAgIG1fcFBhZ2VNb2R1bGUgPSBGWF9ORVcgQ1BERl9QYWdlTW9kdWxlRGVmOworICAgIG1fcFJlbmRlck1vZHVsZSA9IEZYX05FVyBDUERGX1JlbmRlck1vZHVsZURlZjsKK30KK0NQREZfTW9kdWxlTWdyOjp+Q1BERl9Nb2R1bGVNZ3IoKQoreworICAgIGlmIChtX3BQYWdlTW9kdWxlKSB7CisgICAgICAgIGRlbGV0ZSBtX3BQYWdlTW9kdWxlOworICAgIH0KKyAgICBpZiAobV9wUmVuZGVyTW9kdWxlKSB7CisgICAgICAgIGRlbGV0ZSBtX3BSZW5kZXJNb2R1bGU7CisgICAgfQorfQordm9pZCBDUERGX01vZHVsZU1ncjo6U2V0RG93bmxvYWRDYWxsYmFjayhGWF9CT09MICgqY2FsbGJhY2spKEZYX0xQQ1NUUiBtb2R1bGVfbmFtZSkpCit7CisgICAgbV9wRG93bmxvYWRDYWxsYmFjayA9IGNhbGxiYWNrOworfQorRlhfQk9PTCBDUERGX01vZHVsZU1ncjo6RG93bmxvYWRNb2R1bGUoRlhfTFBDU1RSIG1vZHVsZV9uYW1lKQoreworICAgIGlmIChtX3BEb3dubG9hZENhbGxiYWNrID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gbV9wRG93bmxvYWRDYWxsYmFjayhtb2R1bGVfbmFtZSk7Cit9CitzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcgX0dldFBhdGgoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGZvbGRlciwgRlhfTFBDU1RSIG5hbWUpCit7CisgICAgRlhfU1RSU0laRSBmb2xkZXJfbGVuID0gZm9sZGVyLkdldExlbmd0aCgpOworI2lmIF9GWF9PU18gPT0gX0ZYX1NZTUJJQU5fIHx8IF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfCisgICAgaWYgKGZvbGRlcltmb2xkZXJfbGVuIC0gMV0gPT0gJ1xcJykgeworICAgICAgICByZXR1cm4gZm9sZGVyICsgbmFtZTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gKGZvbGRlciArICJcXCIpICsgbmFtZTsKKyAgICB9CisjZWxzZQorICAgIGlmIChmb2xkZXJbZm9sZGVyX2xlbiAtIDFdID09ICcvJykgeworICAgICAgICByZXR1cm4gZm9sZGVyICsgbmFtZTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gKGZvbGRlciArICIvIikgKyBuYW1lOworICAgIH0KKyNlbmRpZgorfQordm9pZCBDUERGX01vZHVsZU1ncjo6U2V0TW9kdWxlUGF0aChGWF9MUENTVFIgbW9kdWxlX25hbWUsIEZYX0xQQ1NUUiBwYXRoKQoreworICAgIGlmIChtb2R1bGVfbmFtZSA9PSBOVUxMIHx8IG1vZHVsZV9uYW1lWzBdID09IDApIHsKKyAgICAgICAgbV9EZWZhdWx0TW9kdWxlUGF0aCA9IHBhdGg7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9Nb2R1bGVQYXRoTGlzdC5TZXRBdChtb2R1bGVfbmFtZSwgRlhfTkVXIENGWF9CeXRlU3RyaW5nKHBhdGgsIC0xKSk7CisgICAgfQorfQorQ0ZYX0J5dGVTdHJpbmcgQ1BERl9Nb2R1bGVNZ3I6OkdldE1vZHVsZUZpbGVQYXRoKEZYX0xQQ1NUUiBtb2R1bGVfbmFtZSwgRlhfTFBDU1RSIG5hbWUpCit7CisgICAgQ0ZYX0J5dGVTdHJpbmcqIHBQYXRoID0gTlVMTDsKKyAgICBpZiAobV9Nb2R1bGVQYXRoTGlzdC5Mb29rdXAobW9kdWxlX25hbWUsIChGWF9MUFZPSUQmKXBQYXRoKSkgeworICAgICAgICByZXR1cm4gX0dldFBhdGgoKnBQYXRoLCBuYW1lKTsKKyAgICB9CisgICAgaWYgKCFtX0RlZmF1bHRNb2R1bGVQYXRoLklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gX0dldFBhdGgobV9EZWZhdWx0TW9kdWxlUGF0aCwgbmFtZSk7CisgICAgfQorI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfCisgICAgRlhfV0NIQVIgYXBwX3BhdGhbMjYwXTsKKyAgICA6OkdldE1vZHVsZUZpbGVOYW1lVyhOVUxMLCAoTFBXU1RSKWFwcF9wYXRoLCAyNjApOworICAgIEZYX0lOVFBUUiBsZW4gPSBGWFNZU193Y3NsZW4oYXBwX3BhdGgpOworICAgIGZvciAoRlhfSU5UUFRSIGkgPSBsZW47IGkgPj0gMDsgaSAtLSkKKyAgICAgICAgaWYgKGFwcF9wYXRoW2ldID09ICdcXCcpIHsKKyAgICAgICAgICAgIGFwcF9wYXRoW2ldID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgcGF0aCA9IENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShhcHBfcGF0aCk7CisgICAgcGF0aCArPSAnXFwnOworICAgIHBhdGggKz0gbmFtZTsKKyAgICByZXR1cm4gcGF0aDsKKyNlbHNlCisgICAgcmV0dXJuIG5hbWU7CisjZW5kaWYKK30KK3ZvaWQgQ1BERl9Nb2R1bGVNZ3I6Ok5vdGlmeU1vZHVsZUF2YWlsYWJsZShGWF9MUENTVFIgbW9kdWxlX25hbWUpCit7CisgICAgaWYgKEZYU1lTX3N0cmNtcChtb2R1bGVfbmFtZSwgQURESU5fTkFNRV9DSkspID09IDApIHsKKyAgICAgICAgbV9wUGFnZU1vZHVsZS0+Tm90aWZ5Q0pLQXZhaWxhYmxlKCk7CisgICAgfSBlbHNlIGlmIChGWFNZU19zdHJjbXAobW9kdWxlX25hbWUsIEFERElOX05BTUVfREVDT0RFUikgPT0gMCkgeworICAgICAgICBtX3BSZW5kZXJNb2R1bGUtPk5vdGlmeURlY29kZXJBdmFpbGFibGUoKTsKKyAgICB9Cit9Cit2b2lkIENQREZfTW9kdWxlTWdyOjpSZWdpc3RlclNlY3VyaXR5SGFuZGxlcihGWF9MUENTVFIgZmlsdGVyLCBDUERGX1NlY3VyaXR5SGFuZGxlciAqICgqQ3JlYXRlSGFuZGxlcikodm9pZCogcGFyYW0pLCB2b2lkKiBwYXJhbSkKK3sKKyAgICBpZiAoQ3JlYXRlSGFuZGxlciA9PSBOVUxMKSB7CisgICAgICAgIG1fU2VjdXJpdHlIYW5kbGVyTWFwLlJlbW92ZUtleShmaWx0ZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fU2VjdXJpdHlIYW5kbGVyTWFwLlNldEF0KGZpbHRlciwgKHZvaWQqKUNyZWF0ZUhhbmRsZXIpOworICAgIH0KKyAgICBpZiAocGFyYW0pIHsKKyAgICAgICAgbV9TZWN1cml0eUhhbmRsZXJNYXAuU2V0QXQoRlhfQlNUUkMoIl9wYXJhbV8iKSArIGZpbHRlciwgcGFyYW0pOworICAgIH0KK30KK3ZvaWQgQ1BERl9Nb2R1bGVNZ3I6OlNldFByaXZhdGVEYXRhKEZYX0xQVk9JRCBtb2R1bGVfaWQsIEZYX0xQVk9JRCBwRGF0YSwgUERfQ0FMTEJBQ0tfRlJFRURBVEEgY2FsbGJhY2spCit7CisgICAgbV9wcml2YXRlRGF0YS5TZXRQcml2YXRlRGF0YShtb2R1bGVfaWQsIHBEYXRhLCBjYWxsYmFjayk7Cit9CitGWF9MUFZPSUQgQ1BERl9Nb2R1bGVNZ3I6OkdldFByaXZhdGVEYXRhKEZYX0xQVk9JRCBtb2R1bGVfaWQpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZURhdGEuR2V0UHJpdmF0ZURhdGEobW9kdWxlX2lkKTsKK30KK0NQREZfU2VjdXJpdHlIYW5kbGVyKiBDUERGX01vZHVsZU1ncjo6Q3JlYXRlU2VjdXJpdHlIYW5kbGVyKEZYX0xQQ1NUUiBmaWx0ZXIpCit7CisgICAgQ1BERl9TZWN1cml0eUhhbmRsZXIqICgqQ3JlYXRlSGFuZGxlcikodm9pZCopID0gTlVMTDsKKyAgICBpZiAoIW1fU2VjdXJpdHlIYW5kbGVyTWFwLkxvb2t1cChmaWx0ZXIsICh2b2lkKiYpQ3JlYXRlSGFuZGxlcikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChDcmVhdGVIYW5kbGVyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHZvaWQqIHBhcmFtID0gTlVMTDsKKyAgICBtX1NlY3VyaXR5SGFuZGxlck1hcC5Mb29rdXAoRlhfQlNUUkMoIl9wYXJhbV8iKSArIGZpbHRlciwgcGFyYW0pOworICAgIHJldHVybiBDcmVhdGVIYW5kbGVyKHBhcmFtKTsKK30KK0lDb2RlY19GYXhNb2R1bGUqIENQREZfTW9kdWxlTWdyOjpHZXRGYXhNb2R1bGUoKQoreworICAgIHJldHVybiBtX3BDb2RlY01vZHVsZSA/IG1fcENvZGVjTW9kdWxlLT5HZXRGYXhNb2R1bGUoKSA6IE5VTEw7Cit9CitJQ29kZWNfSnBlZ01vZHVsZSogQ1BERl9Nb2R1bGVNZ3I6OkdldEpwZWdNb2R1bGUoKQoreworICAgIHJldHVybiBtX3BDb2RlY01vZHVsZSA/IG1fcENvZGVjTW9kdWxlLT5HZXRKcGVnTW9kdWxlKCkgOiBOVUxMOworfQorSUNvZGVjX0pweE1vZHVsZSogQ1BERl9Nb2R1bGVNZ3I6OkdldEpweE1vZHVsZSgpCit7CisgICAgcmV0dXJuIG1fcENvZGVjTW9kdWxlID8gbV9wQ29kZWNNb2R1bGUtPkdldEpweE1vZHVsZSgpIDogTlVMTDsKK30KK0lDb2RlY19KYmlnMk1vZHVsZSogQ1BERl9Nb2R1bGVNZ3I6OkdldEpiaWcyTW9kdWxlKCkKK3sKKyAgICByZXR1cm4gbV9wQ29kZWNNb2R1bGUgPyBtX3BDb2RlY01vZHVsZS0+R2V0SmJpZzJNb2R1bGUoKSA6IE5VTEw7Cit9CitJQ29kZWNfSWNjTW9kdWxlKiBDUERGX01vZHVsZU1ncjo6R2V0SWNjTW9kdWxlKCkKK3sKKyAgICByZXR1cm4gbV9wQ29kZWNNb2R1bGUgPyBtX3BDb2RlY01vZHVsZS0+R2V0SWNjTW9kdWxlKCkgOiBOVUxMOworfQorSUNvZGVjX0ZsYXRlTW9kdWxlKiBDUERGX01vZHVsZU1ncjo6R2V0RmxhdGVNb2R1bGUoKQoreworICAgIHJldHVybiBtX3BDb2RlY01vZHVsZSA/IG1fcENvZGVjTW9kdWxlLT5HZXRGbGF0ZU1vZHVsZSgpIDogTlVMTDsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9DTlMxL0I1cGMtSF8wLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9DTlMxL0I1cGMtSF8wLmNwcAppbmRleCBlMTJhODU5Li5kNzBlMzYxIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvQ05TMS9CNXBjLUhfMC5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0NOUzEvQjVwYy1IXzAuY3BwCkBAIC0xLDkxICsxLDkxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfQjVwY19IXzBbMjQ3ICogM10gPSB7DQotICAgIDB4MDAyMCwgMHgwMDdFLCAweDAwMDEsIDB4MDA4MCwgMHgwMDgwLCAweDAwM0QsIDB4MDBGRCwgMHgwMEZGLCAweDAwNjAsDQotICAgIDB4QTE0MCwgMHhBMTU4LCAweDAwNjMsIDB4QTE1OSwgMHhBMTVDLCAweDM1QUYsIDB4QTE1RCwgMHhBMTdFLCAweDAwODAsDQotICAgIDB4QTFBMSwgMHhBMUY1LCAweDAwQTIsIDB4QTFGNiwgMHhBMUY2LCAweDAwRjgsIDB4QTFGNywgMHhBMUY3LCAweDAwRjcsDQotICAgIDB4QTFGOCwgMHhBMUZFLCAweDAwRjksIDB4QTI0MCwgMHhBMjdFLCAweDAxMDAsIDB4QTJBMSwgMHhBMkZFLCAweDAxM0YsDQotICAgIDB4QTM0MCwgMHhBMzdFLCAweDAxOUQsIDB4QTNBMSwgMHhBM0JCLCAweDAxREMsIDB4QTNCRCwgMHhBM0JGLCAweDAxRjcsDQotICAgIDB4QTNDMCwgMHhBM0UwLCAweDAyMzIsIDB4QTQ0MCwgMHhBNDdFLCAweDAyNTMsIDB4QTRBMSwgMHhBNEZFLCAweDAyOTIsDQotICAgIDB4QTU0MCwgMHhBNTdFLCAweDAyRjAsIDB4QTVBMSwgMHhBNUZFLCAweDAzMkYsIDB4QTY0MCwgMHhBNjdFLCAweDAzOEQsDQotICAgIDB4QTZBMSwgMHhBNkZFLCAweDAzQ0MsIDB4QTc0MCwgMHhBNzdFLCAweDA0MkEsIDB4QTdBMSwgMHhBN0ZFLCAweDA0NjksDQotICAgIDB4QTg0MCwgMHhBODdFLCAweDA0QzcsIDB4QThBMSwgMHhBOEZFLCAweDA1MDYsIDB4QTk0MCwgMHhBOTdFLCAweDA1NjQsDQotICAgIDB4QTlBMSwgMHhBOUZFLCAweDA1QTMsIDB4QUE0MCwgMHhBQTdFLCAweDA2MDEsIDB4QUFBMSwgMHhBQUZFLCAweDA2NDAsDQotICAgIDB4QUI0MCwgMHhBQjdFLCAweDA2OUUsIDB4QUJBMSwgMHhBQkZFLCAweDA2REQsIDB4QUM0MCwgMHhBQzdFLCAweDA3M0IsDQotICAgIDB4QUNBMSwgMHhBQ0ZELCAweDA3N0EsIDB4QUNGRSwgMHhBQ0ZFLCAweDA5N0YsIDB4QUQ0MCwgMHhBRDdFLCAweDA3RDcsDQotICAgIDB4QURBMSwgMHhBREZFLCAweDA4MTYsIDB4QUU0MCwgMHhBRTdFLCAweDA4NzQsIDB4QUVBMSwgMHhBRUZFLCAweDA4QjMsDQotICAgIDB4QUY0MCwgMHhBRjdFLCAweDA5MTEsIDB4QUZBMSwgMHhBRkNGLCAweDA5NTAsIDB4QUZEMCwgMHhBRkZFLCAweDA5ODAsDQotICAgIDB4QjA0MCwgMHhCMDdFLCAweDA5QUYsIDB4QjBBMSwgMHhCMEZFLCAweDA5RUUsIDB4QjE0MCwgMHhCMTdFLCAweDBBNEMsDQotICAgIDB4QjFBMSwgMHhCMUZFLCAweDBBOEIsIDB4QjI0MCwgMHhCMjdFLCAweDBBRTksIDB4QjJBMSwgMHhCMkZFLCAweDBCMjgsDQotICAgIDB4QjM0MCwgMHhCMzdFLCAweDBCODYsIDB4QjNBMSwgMHhCM0ZFLCAweDBCQzUsIDB4QjQ0MCwgMHhCNDdFLCAweDBDMjMsDQotICAgIDB4QjRBMSwgMHhCNEZFLCAweDBDNjIsIDB4QjU0MCwgMHhCNTdFLCAweDBDQzAsIDB4QjVBMSwgMHhCNUZFLCAweDBDRkYsDQotICAgIDB4QjY0MCwgMHhCNjdFLCAweDBENUQsIDB4QjZBMSwgMHhCNkZFLCAweDBEOUMsIDB4Qjc0MCwgMHhCNzdFLCAweDBERkEsDQotICAgIDB4QjdBMSwgMHhCN0ZFLCAweDBFMzksIDB4Qjg0MCwgMHhCODdFLCAweDBFOTcsIDB4QjhBMSwgMHhCOEZFLCAweDBFRDYsDQotICAgIDB4Qjk0MCwgMHhCOTdFLCAweDBGMzQsIDB4QjlBMSwgMHhCOUZFLCAweDBGNzMsIDB4QkE0MCwgMHhCQTdFLCAweDBGRDEsDQotICAgIDB4QkFBMSwgMHhCQUZFLCAweDEwMTAsIDB4QkI0MCwgMHhCQjdFLCAweDEwNkUsIDB4QkJBMSwgMHhCQkM3LCAweDEwQUQsDQotICAgIDB4QkJDOCwgMHhCQkZFLCAweDEwRDUsIDB4QkM0MCwgMHhCQzdFLCAweDExMEMsIDB4QkNBMSwgMHhCQ0ZFLCAweDExNEIsDQotICAgIDB4QkQ0MCwgMHhCRDdFLCAweDExQTksIDB4QkRBMSwgMHhCREZFLCAweDExRTgsIDB4QkU0MCwgMHhCRTUxLCAweDEyNDYsDQotICAgIDB4QkU1MiwgMHhCRTUyLCAweDEwRDQsIDB4QkU1MywgMHhCRTdFLCAweDEyNTgsIDB4QkVBMSwgMHhCRUZFLCAweDEyODQsDQotICAgIDB4QkY0MCwgMHhCRjdFLCAweDEyRTIsIDB4QkZBMSwgMHhCRkZFLCAweDEzMjEsIDB4QzA0MCwgMHhDMDdFLCAweDEzN0YsDQotICAgIDB4QzBBMSwgMHhDMEZFLCAweDEzQkUsIDB4QzE0MCwgMHhDMTdFLCAweDE0MUMsIDB4QzFBMSwgMHhDMUFBLCAweDE0NUIsDQotICAgIDB4QzFBQiwgMHhDMUZFLCAweDE0NjYsIDB4QzI0MCwgMHhDMjdFLCAweDE0QkEsIDB4QzJBMSwgMHhDMkNBLCAweDE0RjksDQotICAgIDB4QzJDQiwgMHhDMkNCLCAweDE0NjUsIDB4QzJDQywgMHhDMkZFLCAweDE1MjMsIDB4QzM0MCwgMHhDMzYwLCAweDE1NTYsDQotICAgIDB4QzM2MSwgMHhDMzdFLCAweDE1NzgsIDB4QzNBMSwgMHhDM0I4LCAweDE1OTYsIDB4QzNCOSwgMHhDM0I5LCAweDE1QUYsDQotICAgIDB4QzNCQSwgMHhDM0JBLCAweDE1QUUsIDB4QzNCQiwgMHhDM0ZFLCAweDE1QjAsIDB4QzQ0MCwgMHhDNDU1LCAweDE1RjQsDQotICAgIDB4QzQ1NiwgMHhDNDU2LCAweDE1NzcsIDB4QzQ1NywgMHhDNDdFLCAweDE2MEEsIDB4QzRBMSwgMHhDNEZFLCAweDE2MzIsDQotICAgIDB4QzU0MCwgMHhDNTdFLCAweDE2OTAsIDB4QzVBMSwgMHhDNUZFLCAweDE2Q0YsIDB4QzY0MCwgMHhDNjdFLCAweDE3MkQsDQotICAgIDB4Qzk0MCwgMHhDOTQ5LCAweDE3NkMsIDB4Qzk0QSwgMHhDOTRBLCAweDAyNzQsIDB4Qzk0QiwgMHhDOTZCLCAweDE3NzYsDQotICAgIDB4Qzk2QywgMHhDOTdFLCAweDE3OTgsIDB4QzlBMSwgMHhDOUJELCAweDE3QUIsIDB4QzlCRSwgMHhDOUJFLCAweDE3OTcsDQotICAgIDB4QzlCRiwgMHhDOUVDLCAweDE3QzgsIDB4QzlFRCwgMHhDOUZFLCAweDE3RjcsIDB4Q0E0MCwgMHhDQTdFLCAweDE4MDksDQotICAgIDB4Q0FBMSwgMHhDQUY2LCAweDE4NDgsIDB4Q0FGNywgMHhDQUY3LCAweDE3RjYsIDB4Q0FGOCwgMHhDQUZFLCAweDE4OUUsDQotICAgIDB4Q0I0MCwgMHhDQjdFLCAweDE4QTUsIDB4Q0JBMSwgMHhDQkZFLCAweDE4RTQsIDB4Q0M0MCwgMHhDQzdFLCAweDE5NDIsDQotICAgIDB4Q0NBMSwgMHhDQ0ZFLCAweDE5ODEsIDB4Q0Q0MCwgMHhDRDdFLCAweDE5REYsIDB4Q0RBMSwgMHhDREZFLCAweDFBMUUsDQotICAgIDB4Q0U0MCwgMHhDRTdFLCAweDFBN0MsIDB4Q0VBMSwgMHhDRUZFLCAweDFBQkIsIDB4Q0Y0MCwgMHhDRjdFLCAweDFCMTksDQotICAgIDB4Q0ZBMSwgMHhDRkZFLCAweDFCNTgsIDB4RDA0MCwgMHhEMDdFLCAweDFCQjYsIDB4RDBBMSwgMHhEMEZFLCAweDFCRjUsDQotICAgIDB4RDE0MCwgMHhEMTdFLCAweDFDNTMsIDB4RDFBMSwgMHhEMUZFLCAweDFDOTIsIDB4RDI0MCwgMHhEMjdFLCAweDFDRjAsDQotICAgIDB4RDJBMSwgMHhEMkZFLCAweDFEMkYsIDB4RDM0MCwgMHhEMzdFLCAweDFEOEQsIDB4RDNBMSwgMHhEM0ZFLCAweDFEQ0MsDQotICAgIDB4RDQ0MCwgMHhENDdFLCAweDFFMkEsIDB4RDRBMSwgMHhENEZFLCAweDFFNjksIDB4RDU0MCwgMHhENTdFLCAweDFFQzcsDQotICAgIDB4RDVBMSwgMHhENUZFLCAweDFGMDYsIDB4RDY0MCwgMHhENjdFLCAweDFGNjQsIDB4RDZBMSwgMHhENkNCLCAweDFGQTMsDQotICAgIDB4RDZDQywgMHhENkNDLCAweDIyNTQsIDB4RDZDRCwgMHhENkZFLCAweDFGQ0YsIDB4RDc0MCwgMHhENzc5LCAweDIwMDEsDQotICAgIDB4RDc3QSwgMHhENzdBLCAweDIyQjksIDB4RDc3QiwgMHhENzdFLCAweDIwM0IsIDB4RDdBMSwgMHhEN0ZFLCAweDIwM0YsDQotICAgIDB4RDg0MCwgMHhEODdFLCAweDIwOUQsIDB4RDhBMSwgMHhEOEZFLCAweDIwREMsIDB4RDk0MCwgMHhEOTdFLCAweDIxM0EsDQotICAgIDB4RDlBMSwgMHhEOUZFLCAweDIxNzksIDB4REE0MCwgMHhEQTdFLCAweDIxRDcsIDB4REFBMSwgMHhEQURFLCAweDIyMTYsDQotICAgIDB4REFERiwgMHhEQURGLCAweDFGQ0UsIDB4REFFMCwgMHhEQUZFLCAweDIyNTUsIDB4REI0MCwgMHhEQjdFLCAweDIyNzQsDQotICAgIDB4REJBMSwgMHhEQkE2LCAweDIyQjMsIDB4REJBNywgMHhEQkZFLCAweDIyQkEsIDB4REM0MCwgMHhEQzdFLCAweDIzMTIsDQotICAgIDB4RENBMSwgMHhEQ0ZFLCAweDIzNTEsIDB4REQ0MCwgMHhERDdFLCAweDIzQUYsIDB4RERBMSwgMHhEREZCLCAweDIzRUUsDQotICAgIDB4RERGQywgMHhEREZDLCAweDIzODEsIDB4RERGRCwgMHhEREZFLCAweDI0NDksIDB4REU0MCwgMHhERTdFLCAweDI0NEIsDQotICAgIDB4REVBMSwgMHhERUZFLCAweDI0OEEsIDB4REY0MCwgMHhERjdFLCAweDI0RTgsIDB4REZBMSwgMHhERkZFLCAweDI1MjcsDQotICAgIDB4RTA0MCwgMHhFMDdFLCAweDI1ODUsIDB4RTBBMSwgMHhFMEZFLCAweDI1QzQsIDB4RTE0MCwgMHhFMTdFLCAweDI2MjIsDQotICAgIDB4RTFBMSwgMHhFMUZFLCAweDI2NjEsIDB4RTI0MCwgMHhFMjdFLCAweDI2QkYsIDB4RTJBMSwgMHhFMkZFLCAweDI2RkUsDQotICAgIDB4RTM0MCwgMHhFMzdFLCAweDI3NUMsIDB4RTNBMSwgMHhFM0ZFLCAweDI3OUIsIDB4RTQ0MCwgMHhFNDdFLCAweDI3RjksDQotICAgIDB4RTRBMSwgMHhFNEZFLCAweDI4MzgsIDB4RTU0MCwgMHhFNTdFLCAweDI4OTYsIDB4RTVBMSwgMHhFNUZFLCAweDI4RDUsDQotICAgIDB4RTY0MCwgMHhFNjdFLCAweDI5MzMsIDB4RTZBMSwgMHhFNkZFLCAweDI5NzIsIDB4RTc0MCwgMHhFNzdFLCAweDI5RDAsDQotICAgIDB4RTdBMSwgMHhFN0ZFLCAweDJBMEYsIDB4RTg0MCwgMHhFODdFLCAweDJBNkQsIDB4RThBMSwgMHhFOEEyLCAweDJBQUMsDQotICAgIDB4RThBMywgMHhFOEZFLCAweDJBQUYsIDB4RTk0MCwgMHhFOTc1LCAweDJCMEIsIDB4RTk3NiwgMHhFOTdFLCAweDJCNDIsDQotICAgIDB4RTlBMSwgMHhFOUZFLCAweDJCNEIsIDB4RUE0MCwgMHhFQTdFLCAweDJCQTksIDB4RUFBMSwgMHhFQUZFLCAweDJCRTgsDQotICAgIDB4RUI0MCwgMHhFQjVBLCAweDJDNDYsIDB4RUI1QiwgMHhFQjdFLCAweDJDNjIsIDB4RUJBMSwgMHhFQkYwLCAweDJDODYsDQotICAgIDB4RUJGMSwgMHhFQkYxLCAweDJBQUUsIDB4RUJGMiwgMHhFQkZFLCAweDJDRDYsIDB4RUM0MCwgMHhFQzdFLCAweDJDRTMsDQotICAgIDB4RUNBMSwgMHhFQ0RELCAweDJEMjIsIDB4RUNERSwgMHhFQ0RFLCAweDJCNDEsIDB4RUNERiwgMHhFQ0ZFLCAweDJENUYsDQotICAgIDB4RUQ0MCwgMHhFRDdFLCAweDJEN0YsIDB4RURBMSwgMHhFREE5LCAweDJEQkUsIDB4RURBQSwgMHhFREZFLCAweDJEQzgsDQotICAgIDB4RUU0MCwgMHhFRTdFLCAweDJFMUQsIDB4RUVBMSwgMHhFRUVBLCAweDJFNUMsIDB4RUVFQiwgMHhFRUVCLCAweDMwMTQsDQotICAgIDB4RUVFQywgMHhFRUZFLCAweDJFQTYsIDB4RUY0MCwgMHhFRjdFLCAweDJFQjksIDB4RUZBMSwgMHhFRkZFLCAweDJFRjgsDQotICAgIDB4RjA0MCwgMHhGMDU1LCAweDJGNTYsIDB4RjA1NiwgMHhGMDU2LCAweDJEQzcsIDB4RjA1NywgMHhGMDdFLCAweDJGNkMsDQotICAgIDB4RjBBMSwgMHhGMENBLCAweDJGOTQsIDB4RjBDQiwgMHhGMENCLCAweDJDNjEsIDB4RjBDQywgMHhGMEZFLCAweDJGQkUsDQotICAgIDB4RjE0MCwgMHhGMTYyLCAweDJGRjEsIDB4RjE2MywgMHhGMTZBLCAweDMwMTUsIDB4RjE2QiwgMHhGMTZCLCAweDMxNjAsDQotICAgIDB4RjE2QywgMHhGMTdFLCAweDMwMUQsIDB4RjFBMSwgMHhGMUZFLCAweDMwMzAsIDB4RjI0MCwgMHhGMjY3LCAweDMwOEUsDQotICAgIDB4RjI2OCwgMHhGMjY4LCAweDMxRUYsIDB4RjI2OSwgMHhGMjdFLCAweDMwQjYsIDB4RjJBMSwgMHhGMkMyLCAweDMwQ0MsDQotICAgIDB4RjJDMywgMHhGMkZFLCAweDMwRUYsIDB4RjM0MCwgMHhGMzc0LCAweDMxMkIsIDB4RjM3NSwgMHhGMzdFLCAweDMxNjEsDQotICAgIDB4RjNBMSwgMHhGM0ZFLCAweDMxNkIsIDB4RjQ0MCwgMHhGNDY1LCAweDMxQzksIDB4RjQ2NiwgMHhGNDdFLCAweDMxRjAsDQotICAgIDB4RjRBMSwgMHhGNEI0LCAweDMyMDksIDB4RjRCNSwgMHhGNEI1LCAweDMwRUUsIDB4RjRCNiwgMHhGNEZDLCAweDMyMUQsDQotICAgIDB4RjRGRCwgMHhGNEZFLCAweDMyNjUsIDB4RjU0MCwgMHhGNTdFLCAweDMyNjcsIDB4RjVBMSwgMHhGNUZFLCAweDMyQTYsDQotICAgIDB4RjY0MCwgMHhGNjYyLCAweDMzMDQsIDB4RjY2MywgMHhGNjYzLCAweDMyNjQsIDB4RjY2NCwgMHhGNjdFLCAweDMzMjcsDQotICAgIDB4RjZBMSwgMHhGNkZFLCAweDMzNDIsIDB4Rjc0MCwgMHhGNzdFLCAweDMzQTAsIDB4RjdBMSwgMHhGN0ZFLCAweDMzREYsDQotICAgIDB4Rjg0MCwgMHhGODdFLCAweDM0M0QsIDB4RjhBMSwgMHhGOEZFLCAweDM0N0MsIDB4Rjk0MCwgMHhGOTc2LCAweDM0REEsDQotICAgIDB4Rjk3NywgMHhGOTdFLCAweDM1MTIsIDB4RjlBMSwgMHhGOUMzLCAweDM1MUEsIDB4RjlDNCwgMHhGOUM0LCAweDM1MTEsDQotICAgIDB4RjlDNSwgMHhGOUM1LCAweDM1M0QsIDB4RjlDNiwgMHhGOUM2LCAweDM1NDksIDB4RjlDNywgMHhGOUQxLCAweDM1M0UsDQotICAgIDB4RjlEMiwgMHhGOUQ1LCAweDM1NEEsDQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfQjVwY19IXzBbMjQ3ICogM10gPSB7CisgICAgMHgwMDIwLCAweDAwN0UsIDB4MDAwMSwgMHgwMDgwLCAweDAwODAsIDB4MDAzRCwgMHgwMEZELCAweDAwRkYsIDB4MDA2MCwKKyAgICAweEExNDAsIDB4QTE1OCwgMHgwMDYzLCAweEExNTksIDB4QTE1QywgMHgzNUFGLCAweEExNUQsIDB4QTE3RSwgMHgwMDgwLAorICAgIDB4QTFBMSwgMHhBMUY1LCAweDAwQTIsIDB4QTFGNiwgMHhBMUY2LCAweDAwRjgsIDB4QTFGNywgMHhBMUY3LCAweDAwRjcsCisgICAgMHhBMUY4LCAweEExRkUsIDB4MDBGOSwgMHhBMjQwLCAweEEyN0UsIDB4MDEwMCwgMHhBMkExLCAweEEyRkUsIDB4MDEzRiwKKyAgICAweEEzNDAsIDB4QTM3RSwgMHgwMTlELCAweEEzQTEsIDB4QTNCQiwgMHgwMURDLCAweEEzQkQsIDB4QTNCRiwgMHgwMUY3LAorICAgIDB4QTNDMCwgMHhBM0UwLCAweDAyMzIsIDB4QTQ0MCwgMHhBNDdFLCAweDAyNTMsIDB4QTRBMSwgMHhBNEZFLCAweDAyOTIsCisgICAgMHhBNTQwLCAweEE1N0UsIDB4MDJGMCwgMHhBNUExLCAweEE1RkUsIDB4MDMyRiwgMHhBNjQwLCAweEE2N0UsIDB4MDM4RCwKKyAgICAweEE2QTEsIDB4QTZGRSwgMHgwM0NDLCAweEE3NDAsIDB4QTc3RSwgMHgwNDJBLCAweEE3QTEsIDB4QTdGRSwgMHgwNDY5LAorICAgIDB4QTg0MCwgMHhBODdFLCAweDA0QzcsIDB4QThBMSwgMHhBOEZFLCAweDA1MDYsIDB4QTk0MCwgMHhBOTdFLCAweDA1NjQsCisgICAgMHhBOUExLCAweEE5RkUsIDB4MDVBMywgMHhBQTQwLCAweEFBN0UsIDB4MDYwMSwgMHhBQUExLCAweEFBRkUsIDB4MDY0MCwKKyAgICAweEFCNDAsIDB4QUI3RSwgMHgwNjlFLCAweEFCQTEsIDB4QUJGRSwgMHgwNkRELCAweEFDNDAsIDB4QUM3RSwgMHgwNzNCLAorICAgIDB4QUNBMSwgMHhBQ0ZELCAweDA3N0EsIDB4QUNGRSwgMHhBQ0ZFLCAweDA5N0YsIDB4QUQ0MCwgMHhBRDdFLCAweDA3RDcsCisgICAgMHhBREExLCAweEFERkUsIDB4MDgxNiwgMHhBRTQwLCAweEFFN0UsIDB4MDg3NCwgMHhBRUExLCAweEFFRkUsIDB4MDhCMywKKyAgICAweEFGNDAsIDB4QUY3RSwgMHgwOTExLCAweEFGQTEsIDB4QUZDRiwgMHgwOTUwLCAweEFGRDAsIDB4QUZGRSwgMHgwOTgwLAorICAgIDB4QjA0MCwgMHhCMDdFLCAweDA5QUYsIDB4QjBBMSwgMHhCMEZFLCAweDA5RUUsIDB4QjE0MCwgMHhCMTdFLCAweDBBNEMsCisgICAgMHhCMUExLCAweEIxRkUsIDB4MEE4QiwgMHhCMjQwLCAweEIyN0UsIDB4MEFFOSwgMHhCMkExLCAweEIyRkUsIDB4MEIyOCwKKyAgICAweEIzNDAsIDB4QjM3RSwgMHgwQjg2LCAweEIzQTEsIDB4QjNGRSwgMHgwQkM1LCAweEI0NDAsIDB4QjQ3RSwgMHgwQzIzLAorICAgIDB4QjRBMSwgMHhCNEZFLCAweDBDNjIsIDB4QjU0MCwgMHhCNTdFLCAweDBDQzAsIDB4QjVBMSwgMHhCNUZFLCAweDBDRkYsCisgICAgMHhCNjQwLCAweEI2N0UsIDB4MEQ1RCwgMHhCNkExLCAweEI2RkUsIDB4MEQ5QywgMHhCNzQwLCAweEI3N0UsIDB4MERGQSwKKyAgICAweEI3QTEsIDB4QjdGRSwgMHgwRTM5LCAweEI4NDAsIDB4Qjg3RSwgMHgwRTk3LCAweEI4QTEsIDB4QjhGRSwgMHgwRUQ2LAorICAgIDB4Qjk0MCwgMHhCOTdFLCAweDBGMzQsIDB4QjlBMSwgMHhCOUZFLCAweDBGNzMsIDB4QkE0MCwgMHhCQTdFLCAweDBGRDEsCisgICAgMHhCQUExLCAweEJBRkUsIDB4MTAxMCwgMHhCQjQwLCAweEJCN0UsIDB4MTA2RSwgMHhCQkExLCAweEJCQzcsIDB4MTBBRCwKKyAgICAweEJCQzgsIDB4QkJGRSwgMHgxMEQ1LCAweEJDNDAsIDB4QkM3RSwgMHgxMTBDLCAweEJDQTEsIDB4QkNGRSwgMHgxMTRCLAorICAgIDB4QkQ0MCwgMHhCRDdFLCAweDExQTksIDB4QkRBMSwgMHhCREZFLCAweDExRTgsIDB4QkU0MCwgMHhCRTUxLCAweDEyNDYsCisgICAgMHhCRTUyLCAweEJFNTIsIDB4MTBENCwgMHhCRTUzLCAweEJFN0UsIDB4MTI1OCwgMHhCRUExLCAweEJFRkUsIDB4MTI4NCwKKyAgICAweEJGNDAsIDB4QkY3RSwgMHgxMkUyLCAweEJGQTEsIDB4QkZGRSwgMHgxMzIxLCAweEMwNDAsIDB4QzA3RSwgMHgxMzdGLAorICAgIDB4QzBBMSwgMHhDMEZFLCAweDEzQkUsIDB4QzE0MCwgMHhDMTdFLCAweDE0MUMsIDB4QzFBMSwgMHhDMUFBLCAweDE0NUIsCisgICAgMHhDMUFCLCAweEMxRkUsIDB4MTQ2NiwgMHhDMjQwLCAweEMyN0UsIDB4MTRCQSwgMHhDMkExLCAweEMyQ0EsIDB4MTRGOSwKKyAgICAweEMyQ0IsIDB4QzJDQiwgMHgxNDY1LCAweEMyQ0MsIDB4QzJGRSwgMHgxNTIzLCAweEMzNDAsIDB4QzM2MCwgMHgxNTU2LAorICAgIDB4QzM2MSwgMHhDMzdFLCAweDE1NzgsIDB4QzNBMSwgMHhDM0I4LCAweDE1OTYsIDB4QzNCOSwgMHhDM0I5LCAweDE1QUYsCisgICAgMHhDM0JBLCAweEMzQkEsIDB4MTVBRSwgMHhDM0JCLCAweEMzRkUsIDB4MTVCMCwgMHhDNDQwLCAweEM0NTUsIDB4MTVGNCwKKyAgICAweEM0NTYsIDB4QzQ1NiwgMHgxNTc3LCAweEM0NTcsIDB4QzQ3RSwgMHgxNjBBLCAweEM0QTEsIDB4QzRGRSwgMHgxNjMyLAorICAgIDB4QzU0MCwgMHhDNTdFLCAweDE2OTAsIDB4QzVBMSwgMHhDNUZFLCAweDE2Q0YsIDB4QzY0MCwgMHhDNjdFLCAweDE3MkQsCisgICAgMHhDOTQwLCAweEM5NDksIDB4MTc2QywgMHhDOTRBLCAweEM5NEEsIDB4MDI3NCwgMHhDOTRCLCAweEM5NkIsIDB4MTc3NiwKKyAgICAweEM5NkMsIDB4Qzk3RSwgMHgxNzk4LCAweEM5QTEsIDB4QzlCRCwgMHgxN0FCLCAweEM5QkUsIDB4QzlCRSwgMHgxNzk3LAorICAgIDB4QzlCRiwgMHhDOUVDLCAweDE3QzgsIDB4QzlFRCwgMHhDOUZFLCAweDE3RjcsIDB4Q0E0MCwgMHhDQTdFLCAweDE4MDksCisgICAgMHhDQUExLCAweENBRjYsIDB4MTg0OCwgMHhDQUY3LCAweENBRjcsIDB4MTdGNiwgMHhDQUY4LCAweENBRkUsIDB4MTg5RSwKKyAgICAweENCNDAsIDB4Q0I3RSwgMHgxOEE1LCAweENCQTEsIDB4Q0JGRSwgMHgxOEU0LCAweENDNDAsIDB4Q0M3RSwgMHgxOTQyLAorICAgIDB4Q0NBMSwgMHhDQ0ZFLCAweDE5ODEsIDB4Q0Q0MCwgMHhDRDdFLCAweDE5REYsIDB4Q0RBMSwgMHhDREZFLCAweDFBMUUsCisgICAgMHhDRTQwLCAweENFN0UsIDB4MUE3QywgMHhDRUExLCAweENFRkUsIDB4MUFCQiwgMHhDRjQwLCAweENGN0UsIDB4MUIxOSwKKyAgICAweENGQTEsIDB4Q0ZGRSwgMHgxQjU4LCAweEQwNDAsIDB4RDA3RSwgMHgxQkI2LCAweEQwQTEsIDB4RDBGRSwgMHgxQkY1LAorICAgIDB4RDE0MCwgMHhEMTdFLCAweDFDNTMsIDB4RDFBMSwgMHhEMUZFLCAweDFDOTIsIDB4RDI0MCwgMHhEMjdFLCAweDFDRjAsCisgICAgMHhEMkExLCAweEQyRkUsIDB4MUQyRiwgMHhEMzQwLCAweEQzN0UsIDB4MUQ4RCwgMHhEM0ExLCAweEQzRkUsIDB4MURDQywKKyAgICAweEQ0NDAsIDB4RDQ3RSwgMHgxRTJBLCAweEQ0QTEsIDB4RDRGRSwgMHgxRTY5LCAweEQ1NDAsIDB4RDU3RSwgMHgxRUM3LAorICAgIDB4RDVBMSwgMHhENUZFLCAweDFGMDYsIDB4RDY0MCwgMHhENjdFLCAweDFGNjQsIDB4RDZBMSwgMHhENkNCLCAweDFGQTMsCisgICAgMHhENkNDLCAweEQ2Q0MsIDB4MjI1NCwgMHhENkNELCAweEQ2RkUsIDB4MUZDRiwgMHhENzQwLCAweEQ3NzksIDB4MjAwMSwKKyAgICAweEQ3N0EsIDB4RDc3QSwgMHgyMkI5LCAweEQ3N0IsIDB4RDc3RSwgMHgyMDNCLCAweEQ3QTEsIDB4RDdGRSwgMHgyMDNGLAorICAgIDB4RDg0MCwgMHhEODdFLCAweDIwOUQsIDB4RDhBMSwgMHhEOEZFLCAweDIwREMsIDB4RDk0MCwgMHhEOTdFLCAweDIxM0EsCisgICAgMHhEOUExLCAweEQ5RkUsIDB4MjE3OSwgMHhEQTQwLCAweERBN0UsIDB4MjFENywgMHhEQUExLCAweERBREUsIDB4MjIxNiwKKyAgICAweERBREYsIDB4REFERiwgMHgxRkNFLCAweERBRTAsIDB4REFGRSwgMHgyMjU1LCAweERCNDAsIDB4REI3RSwgMHgyMjc0LAorICAgIDB4REJBMSwgMHhEQkE2LCAweDIyQjMsIDB4REJBNywgMHhEQkZFLCAweDIyQkEsIDB4REM0MCwgMHhEQzdFLCAweDIzMTIsCisgICAgMHhEQ0ExLCAweERDRkUsIDB4MjM1MSwgMHhERDQwLCAweEREN0UsIDB4MjNBRiwgMHhEREExLCAweERERkIsIDB4MjNFRSwKKyAgICAweERERkMsIDB4RERGQywgMHgyMzgxLCAweERERkQsIDB4RERGRSwgMHgyNDQ5LCAweERFNDAsIDB4REU3RSwgMHgyNDRCLAorICAgIDB4REVBMSwgMHhERUZFLCAweDI0OEEsIDB4REY0MCwgMHhERjdFLCAweDI0RTgsIDB4REZBMSwgMHhERkZFLCAweDI1MjcsCisgICAgMHhFMDQwLCAweEUwN0UsIDB4MjU4NSwgMHhFMEExLCAweEUwRkUsIDB4MjVDNCwgMHhFMTQwLCAweEUxN0UsIDB4MjYyMiwKKyAgICAweEUxQTEsIDB4RTFGRSwgMHgyNjYxLCAweEUyNDAsIDB4RTI3RSwgMHgyNkJGLCAweEUyQTEsIDB4RTJGRSwgMHgyNkZFLAorICAgIDB4RTM0MCwgMHhFMzdFLCAweDI3NUMsIDB4RTNBMSwgMHhFM0ZFLCAweDI3OUIsIDB4RTQ0MCwgMHhFNDdFLCAweDI3RjksCisgICAgMHhFNEExLCAweEU0RkUsIDB4MjgzOCwgMHhFNTQwLCAweEU1N0UsIDB4Mjg5NiwgMHhFNUExLCAweEU1RkUsIDB4MjhENSwKKyAgICAweEU2NDAsIDB4RTY3RSwgMHgyOTMzLCAweEU2QTEsIDB4RTZGRSwgMHgyOTcyLCAweEU3NDAsIDB4RTc3RSwgMHgyOUQwLAorICAgIDB4RTdBMSwgMHhFN0ZFLCAweDJBMEYsIDB4RTg0MCwgMHhFODdFLCAweDJBNkQsIDB4RThBMSwgMHhFOEEyLCAweDJBQUMsCisgICAgMHhFOEEzLCAweEU4RkUsIDB4MkFBRiwgMHhFOTQwLCAweEU5NzUsIDB4MkIwQiwgMHhFOTc2LCAweEU5N0UsIDB4MkI0MiwKKyAgICAweEU5QTEsIDB4RTlGRSwgMHgyQjRCLCAweEVBNDAsIDB4RUE3RSwgMHgyQkE5LCAweEVBQTEsIDB4RUFGRSwgMHgyQkU4LAorICAgIDB4RUI0MCwgMHhFQjVBLCAweDJDNDYsIDB4RUI1QiwgMHhFQjdFLCAweDJDNjIsIDB4RUJBMSwgMHhFQkYwLCAweDJDODYsCisgICAgMHhFQkYxLCAweEVCRjEsIDB4MkFBRSwgMHhFQkYyLCAweEVCRkUsIDB4MkNENiwgMHhFQzQwLCAweEVDN0UsIDB4MkNFMywKKyAgICAweEVDQTEsIDB4RUNERCwgMHgyRDIyLCAweEVDREUsIDB4RUNERSwgMHgyQjQxLCAweEVDREYsIDB4RUNGRSwgMHgyRDVGLAorICAgIDB4RUQ0MCwgMHhFRDdFLCAweDJEN0YsIDB4RURBMSwgMHhFREE5LCAweDJEQkUsIDB4RURBQSwgMHhFREZFLCAweDJEQzgsCisgICAgMHhFRTQwLCAweEVFN0UsIDB4MkUxRCwgMHhFRUExLCAweEVFRUEsIDB4MkU1QywgMHhFRUVCLCAweEVFRUIsIDB4MzAxNCwKKyAgICAweEVFRUMsIDB4RUVGRSwgMHgyRUE2LCAweEVGNDAsIDB4RUY3RSwgMHgyRUI5LCAweEVGQTEsIDB4RUZGRSwgMHgyRUY4LAorICAgIDB4RjA0MCwgMHhGMDU1LCAweDJGNTYsIDB4RjA1NiwgMHhGMDU2LCAweDJEQzcsIDB4RjA1NywgMHhGMDdFLCAweDJGNkMsCisgICAgMHhGMEExLCAweEYwQ0EsIDB4MkY5NCwgMHhGMENCLCAweEYwQ0IsIDB4MkM2MSwgMHhGMENDLCAweEYwRkUsIDB4MkZCRSwKKyAgICAweEYxNDAsIDB4RjE2MiwgMHgyRkYxLCAweEYxNjMsIDB4RjE2QSwgMHgzMDE1LCAweEYxNkIsIDB4RjE2QiwgMHgzMTYwLAorICAgIDB4RjE2QywgMHhGMTdFLCAweDMwMUQsIDB4RjFBMSwgMHhGMUZFLCAweDMwMzAsIDB4RjI0MCwgMHhGMjY3LCAweDMwOEUsCisgICAgMHhGMjY4LCAweEYyNjgsIDB4MzFFRiwgMHhGMjY5LCAweEYyN0UsIDB4MzBCNiwgMHhGMkExLCAweEYyQzIsIDB4MzBDQywKKyAgICAweEYyQzMsIDB4RjJGRSwgMHgzMEVGLCAweEYzNDAsIDB4RjM3NCwgMHgzMTJCLCAweEYzNzUsIDB4RjM3RSwgMHgzMTYxLAorICAgIDB4RjNBMSwgMHhGM0ZFLCAweDMxNkIsIDB4RjQ0MCwgMHhGNDY1LCAweDMxQzksIDB4RjQ2NiwgMHhGNDdFLCAweDMxRjAsCisgICAgMHhGNEExLCAweEY0QjQsIDB4MzIwOSwgMHhGNEI1LCAweEY0QjUsIDB4MzBFRSwgMHhGNEI2LCAweEY0RkMsIDB4MzIxRCwKKyAgICAweEY0RkQsIDB4RjRGRSwgMHgzMjY1LCAweEY1NDAsIDB4RjU3RSwgMHgzMjY3LCAweEY1QTEsIDB4RjVGRSwgMHgzMkE2LAorICAgIDB4RjY0MCwgMHhGNjYyLCAweDMzMDQsIDB4RjY2MywgMHhGNjYzLCAweDMyNjQsIDB4RjY2NCwgMHhGNjdFLCAweDMzMjcsCisgICAgMHhGNkExLCAweEY2RkUsIDB4MzM0MiwgMHhGNzQwLCAweEY3N0UsIDB4MzNBMCwgMHhGN0ExLCAweEY3RkUsIDB4MzNERiwKKyAgICAweEY4NDAsIDB4Rjg3RSwgMHgzNDNELCAweEY4QTEsIDB4RjhGRSwgMHgzNDdDLCAweEY5NDAsIDB4Rjk3NiwgMHgzNERBLAorICAgIDB4Rjk3NywgMHhGOTdFLCAweDM1MTIsIDB4RjlBMSwgMHhGOUMzLCAweDM1MUEsIDB4RjlDNCwgMHhGOUM0LCAweDM1MTEsCisgICAgMHhGOUM1LCAweEY5QzUsIDB4MzUzRCwgMHhGOUM2LCAweEY5QzYsIDB4MzU0OSwgMHhGOUM3LCAweEY5RDEsIDB4MzUzRSwKKyAgICAweEY5RDIsIDB4RjlENSwgMHgzNTRBLAorfTsKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9DTlMxL0I1cGMtVl8wLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9DTlMxL0I1cGMtVl8wLmNwcAppbmRleCAxODhhZWZjLi42NWEwMTZlIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvQ05TMS9CNXBjLVZfMC5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0NOUzEvQjVwYy1WXzAuY3BwCkBAIC0xLDEyICsxLDEyIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfQjVwY19WXzBbMTIgKiAzXSA9IHsNCi0gICAgMHhBMTRCLCAweEExNEIsIDB4MzU0RSwgMHhBMTVBLCAweEExNUEsIDB4MzVBRiwgMHhBMTVDLCAweEExNUMsIDB4MzVCMSwNCi0gICAgMHhBMTVELCAweEExNUUsIDB4MDA4MiwgMHhBMTYxLCAweEExNjIsIDB4MDA4NiwgMHhBMTY1LCAweEExNjYsIDB4MDA4QSwNCi0gICAgMHhBMTY5LCAweEExNkEsIDB4MDA4RSwgMHhBMTZELCAweEExNkUsIDB4MDA5MiwgMHhBMTcxLCAweEExNzIsIDB4MDA5NiwNCi0gICAgMHhBMTc1LCAweEExNzYsIDB4MDA5QSwgMHhBMTc5LCAweEExN0EsIDB4MDA5RSwgMHhBMUUzLCAweEExRTMsIDB4MzU0RiwNCi19Ow0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBzaG9ydCBnX0ZYQ01BUF9CNXBjX1ZfMFsxMiAqIDNdID0geworICAgIDB4QTE0QiwgMHhBMTRCLCAweDM1NEUsIDB4QTE1QSwgMHhBMTVBLCAweDM1QUYsIDB4QTE1QywgMHhBMTVDLCAweDM1QjEsCisgICAgMHhBMTVELCAweEExNUUsIDB4MDA4MiwgMHhBMTYxLCAweEExNjIsIDB4MDA4NiwgMHhBMTY1LCAweEExNjYsIDB4MDA4QSwKKyAgICAweEExNjksIDB4QTE2QSwgMHgwMDhFLCAweEExNkQsIDB4QTE2RSwgMHgwMDkyLCAweEExNzEsIDB4QTE3MiwgMHgwMDk2LAorICAgIDB4QTE3NSwgMHhBMTc2LCAweDAwOUEsIDB4QTE3OSwgMHhBMTdBLCAweDAwOUUsIDB4QTFFMywgMHhBMUUzLCAweDM1NEYsCit9OwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0NOUzEvQ05TLUVVQy1IXzAuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0NOUzEvQ05TLUVVQy1IXzAuY3BwCmluZGV4IDU3YWU4N2MuLjYwNDFmMzQgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9DTlMxL0NOUy1FVUMtSF8wLmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvQ05TMS9DTlMtRVVDLUhfMC5jcHAKQEAgLTEsMTgyICsxLDE4MiBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0NOU19FVUNfSF8wWzE1NyAqIDNdID0gew0KLSAgICAweDAwMjAsIDB4MDA3RSwgMHgzNTUwLCAweEExQTEsIDB4QTFGRSwgMHgwMDYzLCAweEEyQTEsIDB4QTJGRSwgMHgwMEMxLA0KLSAgICAweEEzQTEsIDB4QTNDRSwgMHgwMTFGLCAweEE0QTEsIDB4QTRGRSwgMHgwMTRELCAweEE1QTEsIDB4QTVFQywgMHgwMUFCLA0KLSAgICAweEE1RUUsIDB4QTVGMCwgMHgwMUY3LCAweEE2QTEsIDB4QTZCRSwgMHgwMUZBLCAweEE3QTEsIDB4QTdBMSwgMHgwMjUzLA0KLSAgICAweEE3QTIsIDB4QTdBNCwgMHgwMjE4LCAweEE3QTUsIDB4QTdBNSwgMHgwMjU0LCAweEE3QTYsIDB4QTdBNiwgMHgwMjFCLA0KLSAgICAweEE3QTcsIDB4QTdBNywgMHgwMjVBLCAweEE3QTgsIDB4QTdBOCwgMHgwMjFDLCAweEE3QTksIDB4QTdBQywgMHgwMjVCLA0KLSAgICAweEE3QUQsIDB4QTdBRiwgMHgwMjFELCAweEE3QjAsIDB4QTdCMCwgMHgwMjVGLCAweEE3QjEsIDB4QTdCMSwgMHgxNzZFLA0KLSAgICAweEE3QjIsIDB4QTdCMiwgMHgwMjYwLCAweEE3QjMsIDB4QTdCMywgMHgwMjYyLCAweEE3QjQsIDB4QTdCNCwgMHgwMjIwLA0KLSAgICAweEE3QjUsIDB4QTdCNSwgMHgwMjYzLCAweEE3QjYsIDB4QTdCNiwgMHgxNzZGLCAweEE3QjcsIDB4QTdCNywgMHgwMjIxLA0KLSAgICAweEE3QjgsIDB4QTdCOSwgMHgwMjY0LCAweEE3QkEsIDB4QTdCQSwgMHgwMjIyLCAweEE3QkIsIDB4QTdCQiwgMHgxNzcwLA0KLSAgICAweEE3QkMsIDB4QTdCQywgMHgwMjIzLCAweEE3QkQsIDB4QTdCRCwgMHgwMjY2LCAweEE3QkUsIDB4QTdCRSwgMHgwMjc5LA0KLSAgICAweEE3QkYsIDB4QTdCRiwgMHgxNzc1LCAweEE3QzAsIDB4QTdDMSwgMHgwMjdBLCAweEE3QzIsIDB4QTdDMiwgMHgwMjI0LA0KLSAgICAweEE3QzMsIDB4QTdDNiwgMHgwMjdDLCAweEE3QzcsIDB4QTdDNywgMHgwMjI1LCAweEE3QzgsIDB4QTdDQiwgMHgwMjgyLA0KLSAgICAweEE3Q0MsIDB4QTdDQywgMHgxNzc2LCAweEE3Q0QsIDB4QTdDRCwgMHgwMjg2LCAweEE3Q0UsIDB4QTdDRSwgMHgwMjI2LA0KLSAgICAweEE3Q0YsIDB4QTdEMCwgMHgwMjg4LCAweEE3RDEsIDB4QTdEMiwgMHgwMjhDLCAweEE3RDMsIDB4QTdENSwgMHgwMjI3LA0KLSAgICAweEE3RDYsIDB4QTdEOCwgMHgwMjhFLCAweEE3RDksIDB4QTdEQSwgMHgwMjJBLCAweEE3REIsIDB4QTdEQiwgMHgxNzc3LA0KLSAgICAweEE3REMsIDB4QTdERiwgMHgwMkQwLCAweEE3RTAsIDB4QTdFMCwgMHgwMkQ1LCAweEE3RTEsIDB4QTdFMSwgMHgwMjJDLA0KLSAgICAweEE3RTIsIDB4QTdFNSwgMHgwMkQ2LCAweEE3RTYsIDB4QTdFNiwgMHgwMjJELCAweEE3RTcsIDB4QTdFRCwgMHgwMkRBLA0KLSAgICAweEE3RUUsIDB4QTdFRSwgMHgxNzhBLCAweEE3RUYsIDB4QTdGMiwgMHgwMkUxLCAweEE3RjMsIDB4QTdGMywgMHgxNzhDLA0KLSAgICAweEE3RjQsIDB4QTdGOCwgMHgwMkU1LCAweEE3RjksIDB4QTdGOSwgMHgxNzhELCAweEE3RkEsIDB4QTdGRCwgMHgwMkVBLA0KLSAgICAweEE3RkUsIDB4QTdGRSwgMHgwMzU2LCAweEE4QTEsIDB4QThBNiwgMHgwMzU3LCAweEE4QTcsIDB4QThBNywgMHgwMzVFLA0KLSAgICAweEE4QTgsIDB4QThBOCwgMHgwMzYyLCAweEE4QTksIDB4QThBQSwgMHgwMjJFLCAweEE4QUIsIDB4QThCMiwgMHgwMzYzLA0KLSAgICAweEE4QjMsIDB4QThCMywgMHgxN0IyLCAweEE4QjQsIDB4QThCNiwgMHgwMzZCLCAweEE4QjcsIDB4QThCQSwgMHgwM0Y2LA0KLSAgICAweEE4QkIsIDB4QThCQiwgMHgxODEyLCAweEE4QkMsIDB4QThCRSwgMHgwM0ZBLCAweEE4QkYsIDB4QThDMywgMHgwM0ZFLA0KLSAgICAweEE4QzQsIDB4QThDQywgMHgwNDA1LCAweEE4Q0QsIDB4QThDRCwgMHgxODEzLCAweEE4Q0UsIDB4QThDRSwgMHgxODE4LA0KLSAgICAweEE4Q0YsIDB4QThEMiwgMHgwNDBGLCAweEE4RDMsIDB4QThEMywgMHgxODE5LCAweEE4RDQsIDB4QThEOSwgMHgwNTA4LA0KLSAgICAweEE4REEsIDB4QThEQSwgMHgxOEU3LCAweEE4REIsIDB4QThFMiwgMHgwNTBFLCAweEE4RTMsIDB4QThFMywgMHgwMjMwLA0KLSAgICAweEE4RTQsIDB4QThFNCwgMHgwNTFCLCAweEE4RTUsIDB4QThFNywgMHgwNTIwLCAweEE4RTgsIDB4QThFQiwgMHgwNjk2LA0KLSAgICAweEE4RUMsIDB4QThFQywgMHgwMjMxLCAweEE4RUQsIDB4QThGMCwgMHgwNjlGLCAweEE4RjEsIDB4QThGQiwgMHgwODI2LA0KLSAgICAweEE4RkMsIDB4QThGRSwgMHgwOUY1LCAweEE5QTEsIDB4QTlBMSwgMHgxRTMzLCAweEE5QTIsIDB4QTlBMiwgMHgwOUY4LA0KLSAgICAweEE5QTMsIDB4QTlBMywgMHgxRTM0LCAweEE5QTQsIDB4QTlBNSwgMHgwOUY5LCAweEE5QTYsIDB4QTlBQiwgMHgwQkUxLA0KLSAgICAweEE5QUMsIDB4QTlBRSwgMHgwREJCLCAweEE5QUYsIDB4QTlBRiwgMHgyMzYwLCAweEE5QjAsIDB4QTlCMCwgMHgyNjEyLA0KLSAgICAweEE5QjEsIDB4QTlCMywgMHgwRjdCLCAweEE5QjQsIDB4QTlCNSwgMHgxMTAwLCAweEE5QjYsIDB4QTlCNiwgMHgxMjg5LA0KLSAgICAweEE5QjcsIDB4QTlCOCwgMHgxM0IyLCAweEE5QjksIDB4QTlCOSwgMHgyRjBELCAweEMyQTEsIDB4QzJDMSwgMHgwMjMyLA0KLSAgICAweEM0QTEsIDB4QzRGRSwgMHgwMjUzLCAweEM1QTEsIDB4QzVGRSwgMHgwMkIxLCAweEM2QTEsIDB4QzZGRSwgMHgwMzBGLA0KLSAgICAweEM3QTEsIDB4QzdGRSwgMHgwMzZELCAweEM4QTEsIDB4QzhGRSwgMHgwM0NCLCAweEM5QTEsIDB4QzlGRSwgMHgwNDI5LA0KLSAgICAweENBQTEsIDB4Q0FGRSwgMHgwNDg3LCAweENCQTEsIDB4Q0JGRSwgMHgwNEU1LCAweENDQTEsIDB4Q0NGRSwgMHgwNTQzLA0KLSAgICAweENEQTEsIDB4Q0RGRSwgMHgwNUExLCAweENFQTEsIDB4Q0VGRSwgMHgwNUZGLCAweENGQTEsIDB4Q0ZGRSwgMHgwNjVELA0KLSAgICAweEQwQTEsIDB4RDBGRSwgMHgwNkJCLCAweEQxQTEsIDB4RDFGRSwgMHgwNzE5LCAweEQyQTEsIDB4RDJGRSwgMHgwNzc3LA0KLSAgICAweEQzQTEsIDB4RDNGRSwgMHgwN0Q1LCAweEQ0QTEsIDB4RDRGRSwgMHgwODMzLCAweEQ1QTEsIDB4RDVGRSwgMHgwODkxLA0KLSAgICAweEQ2QTEsIDB4RDZGRSwgMHgwOEVGLCAweEQ3QTEsIDB4RDdGRSwgMHgwOTRELCAweEQ4QTEsIDB4RDhGRSwgMHgwOUFCLA0KLSAgICAweEQ5QTEsIDB4RDlGRSwgMHgwQTA5LCAweERBQTEsIDB4REFGRSwgMHgwQTY3LCAweERCQTEsIDB4REJGRSwgMHgwQUM1LA0KLSAgICAweERDQTEsIDB4RENGRSwgMHgwQjIzLCAweEREQTEsIDB4RERGRSwgMHgwQjgxLCAweERFQTEsIDB4REVGRSwgMHgwQkRGLA0KLSAgICAweERGQTEsIDB4REZGRSwgMHgwQzNELCAweEUwQTEsIDB4RTBGRSwgMHgwQzlCLCAweEUxQTEsIDB4RTFGRSwgMHgwQ0Y5LA0KLSAgICAweEUyQTEsIDB4RTJGRSwgMHgwRDU3LCAweEUzQTEsIDB4RTNGRSwgMHgwREI1LCAweEU0QTEsIDB4RTRGRSwgMHgwRTEzLA0KLSAgICAweEU1QTEsIDB4RTVGRSwgMHgwRTcxLCAweEU2QTEsIDB4RTZGRSwgMHgwRUNGLCAweEU3QTEsIDB4RTdGRSwgMHgwRjJELA0KLSAgICAweEU4QTEsIDB4RThGRSwgMHgwRjhCLCAweEU5QTEsIDB4RTlGRSwgMHgwRkU5LCAweEVBQTEsIDB4RUFGRSwgMHgxMDQ3LA0KLSAgICAweEVCQTEsIDB4RUJGRSwgMHgxMEE1LCAweEVDQTEsIDB4RUNGRSwgMHgxMTAzLCAweEVEQTEsIDB4RURGRSwgMHgxMTYxLA0KLSAgICAweEVFQTEsIDB4RUVGRSwgMHgxMUJGLCAweEVGQTEsIDB4RUZGRSwgMHgxMjFELCAweEYwQTEsIDB4RjBGRSwgMHgxMjdCLA0KLSAgICAweEYxQTEsIDB4RjFGRSwgMHgxMkQ5LCAweEYyQTEsIDB4RjJGRSwgMHgxMzM3LCAweEYzQTEsIDB4RjNGRSwgMHgxMzk1LA0KLSAgICAweEY0QTEsIDB4RjRGRSwgMHgxM0YzLCAweEY1QTEsIDB4RjVGRSwgMHgxNDUxLCAweEY2QTEsIDB4RjZGRSwgMHgxNEFGLA0KLSAgICAweEY3QTEsIDB4RjdGRSwgMHgxNTBELCAweEY4QTEsIDB4RjhGRSwgMHgxNTZCLCAweEY5QTEsIDB4RjlGRSwgMHgxNUM5LA0KLSAgICAweEZBQTEsIDB4RkFGRSwgMHgxNjI3LCAweEZCQTEsIDB4RkJGRSwgMHgxNjg1LCAweEZDQTEsIDB4RkNGRSwgMHgxNkUzLA0KLSAgICAweEZEQTEsIDB4RkRDQiwgMHgxNzQxLA0KLX07DQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0NOU19FVUNfSF8wX0RXb3JkWzIzOCAqIDRdID0gew0KLSAgICAweDhFQTEsIDB4QTFBMSwgMHhBMUZFLCAweDAwNjMsIDB4OEVBMSwgMHhBMkExLCAweEEyRkUsIDB4MDBDMSwNCi0gICAgMHg4RUExLCAweEEzQTEsIDB4QTNDRSwgMHgwMTFGLCAweDhFQTEsIDB4QTRBMSwgMHhBNEZFLCAweDAxNEQsDQotICAgIDB4OEVBMSwgMHhBNUExLCAweEE1RUMsIDB4MDFBQiwgMHg4RUExLCAweEE1RUUsIDB4QTVGMCwgMHgwMUY3LA0KLSAgICAweDhFQTEsIDB4QTZBMSwgMHhBNkJFLCAweDAxRkEsIDB4OEVBMSwgMHhBN0ExLCAweEE3QTEsIDB4MDI1MywNCi0gICAgMHg4RUExLCAweEE3QTIsIDB4QTdBNCwgMHgwMjE4LCAweDhFQTEsIDB4QTdBNSwgMHhBN0E1LCAweDAyNTQsDQotICAgIDB4OEVBMSwgMHhBN0E2LCAweEE3QTYsIDB4MDIxQiwgMHg4RUExLCAweEE3QTcsIDB4QTdBNywgMHgwMjVBLA0KLSAgICAweDhFQTEsIDB4QTdBOCwgMHhBN0E4LCAweDAyMUMsIDB4OEVBMSwgMHhBN0E5LCAweEE3QUMsIDB4MDI1QiwNCi0gICAgMHg4RUExLCAweEE3QUQsIDB4QTdBRiwgMHgwMjFELCAweDhFQTEsIDB4QTdCMCwgMHhBN0IwLCAweDAyNUYsDQotICAgIDB4OEVBMSwgMHhBN0IxLCAweEE3QjEsIDB4MTc2RSwgMHg4RUExLCAweEE3QjIsIDB4QTdCMiwgMHgwMjYwLA0KLSAgICAweDhFQTEsIDB4QTdCMywgMHhBN0IzLCAweDAyNjIsIDB4OEVBMSwgMHhBN0I0LCAweEE3QjQsIDB4MDIyMCwNCi0gICAgMHg4RUExLCAweEE3QjUsIDB4QTdCNSwgMHgwMjYzLCAweDhFQTEsIDB4QTdCNiwgMHhBN0I2LCAweDE3NkYsDQotICAgIDB4OEVBMSwgMHhBN0I3LCAweEE3QjcsIDB4MDIyMSwgMHg4RUExLCAweEE3QjgsIDB4QTdCOSwgMHgwMjY0LA0KLSAgICAweDhFQTEsIDB4QTdCQSwgMHhBN0JBLCAweDAyMjIsIDB4OEVBMSwgMHhBN0JCLCAweEE3QkIsIDB4MTc3MCwNCi0gICAgMHg4RUExLCAweEE3QkMsIDB4QTdCQywgMHgwMjIzLCAweDhFQTEsIDB4QTdCRCwgMHhBN0JELCAweDAyNjYsDQotICAgIDB4OEVBMSwgMHhBN0JFLCAweEE3QkUsIDB4MDI3OSwgMHg4RUExLCAweEE3QkYsIDB4QTdCRiwgMHgxNzc1LA0KLSAgICAweDhFQTEsIDB4QTdDMCwgMHhBN0MxLCAweDAyN0EsIDB4OEVBMSwgMHhBN0MyLCAweEE3QzIsIDB4MDIyNCwNCi0gICAgMHg4RUExLCAweEE3QzMsIDB4QTdDNiwgMHgwMjdDLCAweDhFQTEsIDB4QTdDNywgMHhBN0M3LCAweDAyMjUsDQotICAgIDB4OEVBMSwgMHhBN0M4LCAweEE3Q0IsIDB4MDI4MiwgMHg4RUExLCAweEE3Q0MsIDB4QTdDQywgMHgxNzc2LA0KLSAgICAweDhFQTEsIDB4QTdDRCwgMHhBN0NELCAweDAyODYsIDB4OEVBMSwgMHhBN0NFLCAweEE3Q0UsIDB4MDIyNiwNCi0gICAgMHg4RUExLCAweEE3Q0YsIDB4QTdEMCwgMHgwMjg4LCAweDhFQTEsIDB4QTdEMSwgMHhBN0QyLCAweDAyOEMsDQotICAgIDB4OEVBMSwgMHhBN0QzLCAweEE3RDUsIDB4MDIyNywgMHg4RUExLCAweEE3RDYsIDB4QTdEOCwgMHgwMjhFLA0KLSAgICAweDhFQTEsIDB4QTdEOSwgMHhBN0RBLCAweDAyMkEsIDB4OEVBMSwgMHhBN0RCLCAweEE3REIsIDB4MTc3NywNCi0gICAgMHg4RUExLCAweEE3REMsIDB4QTdERiwgMHgwMkQwLCAweDhFQTEsIDB4QTdFMCwgMHhBN0UwLCAweDAyRDUsDQotICAgIDB4OEVBMSwgMHhBN0UxLCAweEE3RTEsIDB4MDIyQywgMHg4RUExLCAweEE3RTIsIDB4QTdFNSwgMHgwMkQ2LA0KLSAgICAweDhFQTEsIDB4QTdFNiwgMHhBN0U2LCAweDAyMkQsIDB4OEVBMSwgMHhBN0U3LCAweEE3RUQsIDB4MDJEQSwNCi0gICAgMHg4RUExLCAweEE3RUUsIDB4QTdFRSwgMHgxNzhBLCAweDhFQTEsIDB4QTdFRiwgMHhBN0YyLCAweDAyRTEsDQotICAgIDB4OEVBMSwgMHhBN0YzLCAweEE3RjMsIDB4MTc4QywgMHg4RUExLCAweEE3RjQsIDB4QTdGOCwgMHgwMkU1LA0KLSAgICAweDhFQTEsIDB4QTdGOSwgMHhBN0Y5LCAweDE3OEQsIDB4OEVBMSwgMHhBN0ZBLCAweEE3RkQsIDB4MDJFQSwNCi0gICAgMHg4RUExLCAweEE3RkUsIDB4QTdGRSwgMHgwMzU2LCAweDhFQTEsIDB4QThBMSwgMHhBOEE2LCAweDAzNTcsDQotICAgIDB4OEVBMSwgMHhBOEE3LCAweEE4QTcsIDB4MDM1RSwgMHg4RUExLCAweEE4QTgsIDB4QThBOCwgMHgwMzYyLA0KLSAgICAweDhFQTEsIDB4QThBOSwgMHhBOEFBLCAweDAyMkUsIDB4OEVBMSwgMHhBOEFCLCAweEE4QjIsIDB4MDM2MywNCi0gICAgMHg4RUExLCAweEE4QjMsIDB4QThCMywgMHgxN0IyLCAweDhFQTEsIDB4QThCNCwgMHhBOEI2LCAweDAzNkIsDQotICAgIDB4OEVBMSwgMHhBOEI3LCAweEE4QkEsIDB4MDNGNiwgMHg4RUExLCAweEE4QkIsIDB4QThCQiwgMHgxODEyLA0KLSAgICAweDhFQTEsIDB4QThCQywgMHhBOEJFLCAweDAzRkEsIDB4OEVBMSwgMHhBOEJGLCAweEE4QzMsIDB4MDNGRSwNCi0gICAgMHg4RUExLCAweEE4QzQsIDB4QThDQywgMHgwNDA1LCAweDhFQTEsIDB4QThDRCwgMHhBOENELCAweDE4MTMsDQotICAgIDB4OEVBMSwgMHhBOENFLCAweEE4Q0UsIDB4MTgxOCwgMHg4RUExLCAweEE4Q0YsIDB4QThEMiwgMHgwNDBGLA0KLSAgICAweDhFQTEsIDB4QThEMywgMHhBOEQzLCAweDE4MTksIDB4OEVBMSwgMHhBOEQ0LCAweEE4RDksIDB4MDUwOCwNCi0gICAgMHg4RUExLCAweEE4REEsIDB4QThEQSwgMHgxOEU3LCAweDhFQTEsIDB4QThEQiwgMHhBOEUyLCAweDA1MEUsDQotICAgIDB4OEVBMSwgMHhBOEUzLCAweEE4RTMsIDB4MDIzMCwgMHg4RUExLCAweEE4RTQsIDB4QThFNCwgMHgwNTFCLA0KLSAgICAweDhFQTEsIDB4QThFNSwgMHhBOEU3LCAweDA1MjAsIDB4OEVBMSwgMHhBOEU4LCAweEE4RUIsIDB4MDY5NiwNCi0gICAgMHg4RUExLCAweEE4RUMsIDB4QThFQywgMHgwMjMxLCAweDhFQTEsIDB4QThFRCwgMHhBOEYwLCAweDA2OUYsDQotICAgIDB4OEVBMSwgMHhBOEYxLCAweEE4RkIsIDB4MDgyNiwgMHg4RUExLCAweEE4RkMsIDB4QThGRSwgMHgwOUY1LA0KLSAgICAweDhFQTEsIDB4QTlBMSwgMHhBOUExLCAweDFFMzMsIDB4OEVBMSwgMHhBOUEyLCAweEE5QTIsIDB4MDlGOCwNCi0gICAgMHg4RUExLCAweEE5QTMsIDB4QTlBMywgMHgxRTM0LCAweDhFQTEsIDB4QTlBNCwgMHhBOUE1LCAweDA5RjksDQotICAgIDB4OEVBMSwgMHhBOUE2LCAweEE5QUIsIDB4MEJFMSwgMHg4RUExLCAweEE5QUMsIDB4QTlBRSwgMHgwREJCLA0KLSAgICAweDhFQTEsIDB4QTlBRiwgMHhBOUFGLCAweDIzNjAsIDB4OEVBMSwgMHhBOUIwLCAweEE5QjAsIDB4MjYxMiwNCi0gICAgMHg4RUExLCAweEE5QjEsIDB4QTlCMywgMHgwRjdCLCAweDhFQTEsIDB4QTlCNCwgMHhBOUI1LCAweDExMDAsDQotICAgIDB4OEVBMSwgMHhBOUI2LCAweEE5QjYsIDB4MTI4OSwgMHg4RUExLCAweEE5QjcsIDB4QTlCOCwgMHgxM0IyLA0KLSAgICAweDhFQTEsIDB4QTlCOSwgMHhBOUI5LCAweDJGMEQsIDB4OEVBMSwgMHhDMkExLCAweEMyQzEsIDB4MDIzMiwNCi0gICAgMHg4RUExLCAweEM0QTEsIDB4QzRGRSwgMHgwMjUzLCAweDhFQTEsIDB4QzVBMSwgMHhDNUZFLCAweDAyQjEsDQotICAgIDB4OEVBMSwgMHhDNkExLCAweEM2RkUsIDB4MDMwRiwgMHg4RUExLCAweEM3QTEsIDB4QzdGRSwgMHgwMzZELA0KLSAgICAweDhFQTEsIDB4QzhBMSwgMHhDOEZFLCAweDAzQ0IsIDB4OEVBMSwgMHhDOUExLCAweEM5RkUsIDB4MDQyOSwNCi0gICAgMHg4RUExLCAweENBQTEsIDB4Q0FGRSwgMHgwNDg3LCAweDhFQTEsIDB4Q0JBMSwgMHhDQkZFLCAweDA0RTUsDQotICAgIDB4OEVBMSwgMHhDQ0ExLCAweENDRkUsIDB4MDU0MywgMHg4RUExLCAweENEQTEsIDB4Q0RGRSwgMHgwNUExLA0KLSAgICAweDhFQTEsIDB4Q0VBMSwgMHhDRUZFLCAweDA1RkYsIDB4OEVBMSwgMHhDRkExLCAweENGRkUsIDB4MDY1RCwNCi0gICAgMHg4RUExLCAweEQwQTEsIDB4RDBGRSwgMHgwNkJCLCAweDhFQTEsIDB4RDFBMSwgMHhEMUZFLCAweDA3MTksDQotICAgIDB4OEVBMSwgMHhEMkExLCAweEQyRkUsIDB4MDc3NywgMHg4RUExLCAweEQzQTEsIDB4RDNGRSwgMHgwN0Q1LA0KLSAgICAweDhFQTEsIDB4RDRBMSwgMHhENEZFLCAweDA4MzMsIDB4OEVBMSwgMHhENUExLCAweEQ1RkUsIDB4MDg5MSwNCi0gICAgMHg4RUExLCAweEQ2QTEsIDB4RDZGRSwgMHgwOEVGLCAweDhFQTEsIDB4RDdBMSwgMHhEN0ZFLCAweDA5NEQsDQotICAgIDB4OEVBMSwgMHhEOEExLCAweEQ4RkUsIDB4MDlBQiwgMHg4RUExLCAweEQ5QTEsIDB4RDlGRSwgMHgwQTA5LA0KLSAgICAweDhFQTEsIDB4REFBMSwgMHhEQUZFLCAweDBBNjcsIDB4OEVBMSwgMHhEQkExLCAweERCRkUsIDB4MEFDNSwNCi0gICAgMHg4RUExLCAweERDQTEsIDB4RENGRSwgMHgwQjIzLCAweDhFQTEsIDB4RERBMSwgMHhEREZFLCAweDBCODEsDQotICAgIDB4OEVBMSwgMHhERUExLCAweERFRkUsIDB4MEJERiwgMHg4RUExLCAweERGQTEsIDB4REZGRSwgMHgwQzNELA0KLSAgICAweDhFQTEsIDB4RTBBMSwgMHhFMEZFLCAweDBDOUIsIDB4OEVBMSwgMHhFMUExLCAweEUxRkUsIDB4MENGOSwNCi0gICAgMHg4RUExLCAweEUyQTEsIDB4RTJGRSwgMHgwRDU3LCAweDhFQTEsIDB4RTNBMSwgMHhFM0ZFLCAweDBEQjUsDQotICAgIDB4OEVBMSwgMHhFNEExLCAweEU0RkUsIDB4MEUxMywgMHg4RUExLCAweEU1QTEsIDB4RTVGRSwgMHgwRTcxLA0KLSAgICAweDhFQTEsIDB4RTZBMSwgMHhFNkZFLCAweDBFQ0YsIDB4OEVBMSwgMHhFN0ExLCAweEU3RkUsIDB4MEYyRCwNCi0gICAgMHg4RUExLCAweEU4QTEsIDB4RThGRSwgMHgwRjhCLCAweDhFQTEsIDB4RTlBMSwgMHhFOUZFLCAweDBGRTksDQotICAgIDB4OEVBMSwgMHhFQUExLCAweEVBRkUsIDB4MTA0NywgMHg4RUExLCAweEVCQTEsIDB4RUJGRSwgMHgxMEE1LA0KLSAgICAweDhFQTEsIDB4RUNBMSwgMHhFQ0ZFLCAweDExMDMsIDB4OEVBMSwgMHhFREExLCAweEVERkUsIDB4MTE2MSwNCi0gICAgMHg4RUExLCAweEVFQTEsIDB4RUVGRSwgMHgxMUJGLCAweDhFQTEsIDB4RUZBMSwgMHhFRkZFLCAweDEyMUQsDQotICAgIDB4OEVBMSwgMHhGMEExLCAweEYwRkUsIDB4MTI3QiwgMHg4RUExLCAweEYxQTEsIDB4RjFGRSwgMHgxMkQ5LA0KLSAgICAweDhFQTEsIDB4RjJBMSwgMHhGMkZFLCAweDEzMzcsIDB4OEVBMSwgMHhGM0ExLCAweEYzRkUsIDB4MTM5NSwNCi0gICAgMHg4RUExLCAweEY0QTEsIDB4RjRGRSwgMHgxM0YzLCAweDhFQTEsIDB4RjVBMSwgMHhGNUZFLCAweDE0NTEsDQotICAgIDB4OEVBMSwgMHhGNkExLCAweEY2RkUsIDB4MTRBRiwgMHg4RUExLCAweEY3QTEsIDB4RjdGRSwgMHgxNTBELA0KLSAgICAweDhFQTEsIDB4RjhBMSwgMHhGOEZFLCAweDE1NkIsIDB4OEVBMSwgMHhGOUExLCAweEY5RkUsIDB4MTVDOSwNCi0gICAgMHg4RUExLCAweEZBQTEsIDB4RkFGRSwgMHgxNjI3LCAweDhFQTEsIDB4RkJBMSwgMHhGQkZFLCAweDE2ODUsDQotICAgIDB4OEVBMSwgMHhGQ0ExLCAweEZDRkUsIDB4MTZFMywgMHg4RUExLCAweEZEQTEsIDB4RkRDQiwgMHgxNzQxLA0KLSAgICAweDhFQTIsIDB4QTFBMSwgMHhBMUZFLCAweDE3NkMsIDB4OEVBMiwgMHhBMkExLCAweEEyRkUsIDB4MTdDQSwNCi0gICAgMHg4RUEyLCAweEEzQTEsIDB4QTNGRSwgMHgxODI4LCAweDhFQTIsIDB4QTRBMSwgMHhBNEZFLCAweDE4ODYsDQotICAgIDB4OEVBMiwgMHhBNUExLCAweEE1RkUsIDB4MThFNCwgMHg4RUEyLCAweEE2QTEsIDB4QTZGRSwgMHgxOTQyLA0KLSAgICAweDhFQTIsIDB4QTdBMSwgMHhBN0ZFLCAweDE5QTAsIDB4OEVBMiwgMHhBOEExLCAweEE4RkUsIDB4MTlGRSwNCi0gICAgMHg4RUEyLCAweEE5QTEsIDB4QTlGRSwgMHgxQTVDLCAweDhFQTIsIDB4QUFBMSwgMHhBQUZFLCAweDFBQkEsDQotICAgIDB4OEVBMiwgMHhBQkExLCAweEFCRkUsIDB4MUIxOCwgMHg4RUEyLCAweEFDQTEsIDB4QUNGRSwgMHgxQjc2LA0KLSAgICAweDhFQTIsIDB4QURBMSwgMHhBREZFLCAweDFCRDQsIDB4OEVBMiwgMHhBRUExLCAweEFFRkUsIDB4MUMzMiwNCi0gICAgMHg4RUEyLCAweEFGQTEsIDB4QUZGRSwgMHgxQzkwLCAweDhFQTIsIDB4QjBBMSwgMHhCMEZFLCAweDFDRUUsDQotICAgIDB4OEVBMiwgMHhCMUExLCAweEIxRkUsIDB4MUQ0QywgMHg4RUEyLCAweEIyQTEsIDB4QjJGRSwgMHgxREFBLA0KLSAgICAweDhFQTIsIDB4QjNBMSwgMHhCM0ZFLCAweDFFMDgsIDB4OEVBMiwgMHhCNEExLCAweEI0RkUsIDB4MUU2NiwNCi0gICAgMHg4RUEyLCAweEI1QTEsIDB4QjVGRSwgMHgxRUM0LCAweDhFQTIsIDB4QjZBMSwgMHhCNkZFLCAweDFGMjIsDQotICAgIDB4OEVBMiwgMHhCN0ExLCAweEI3RkUsIDB4MUY4MCwgMHg4RUEyLCAweEI4QTEsIDB4QjhGRSwgMHgxRkRFLA0KLSAgICAweDhFQTIsIDB4QjlBMSwgMHhCOUZFLCAweDIwM0MsIDB4OEVBMiwgMHhCQUExLCAweEJBRkUsIDB4MjA5QSwNCi0gICAgMHg4RUEyLCAweEJCQTEsIDB4QkJGRSwgMHgyMEY4LCAweDhFQTIsIDB4QkNBMSwgMHhCQ0ZFLCAweDIxNTYsDQotICAgIDB4OEVBMiwgMHhCREExLCAweEJERkUsIDB4MjFCNCwgMHg4RUEyLCAweEJFQTEsIDB4QkVGRSwgMHgyMjEyLA0KLSAgICAweDhFQTIsIDB4QkZBMSwgMHhCRkZFLCAweDIyNzAsIDB4OEVBMiwgMHhDMEExLCAweEMwRkUsIDB4MjJDRSwNCi0gICAgMHg4RUEyLCAweEMxQTEsIDB4QzFGRSwgMHgyMzJDLCAweDhFQTIsIDB4QzJBMSwgMHhDMkZFLCAweDIzOEEsDQotICAgIDB4OEVBMiwgMHhDM0ExLCAweEMzRkUsIDB4MjNFOCwgMHg4RUEyLCAweEM0QTEsIDB4QzRGRSwgMHgyNDQ2LA0KLSAgICAweDhFQTIsIDB4QzVBMSwgMHhDNUZFLCAweDI0QTQsIDB4OEVBMiwgMHhDNkExLCAweEM2RkUsIDB4MjUwMiwNCi0gICAgMHg4RUEyLCAweEM3QTEsIDB4QzdGRSwgMHgyNTYwLCAweDhFQTIsIDB4QzhBMSwgMHhDOEZFLCAweDI1QkUsDQotICAgIDB4OEVBMiwgMHhDOUExLCAweEM5RkUsIDB4MjYxQywgMHg4RUEyLCAweENBQTEsIDB4Q0FGRSwgMHgyNjdBLA0KLSAgICAweDhFQTIsIDB4Q0JBMSwgMHhDQkZFLCAweDI2RDgsIDB4OEVBMiwgMHhDQ0ExLCAweENDRkUsIDB4MjczNiwNCi0gICAgMHg4RUEyLCAweENEQTEsIDB4Q0RGRSwgMHgyNzk0LCAweDhFQTIsIDB4Q0VBMSwgMHhDRUZFLCAweDI3RjIsDQotICAgIDB4OEVBMiwgMHhDRkExLCAweENGRkUsIDB4Mjg1MCwgMHg4RUEyLCAweEQwQTEsIDB4RDBGRSwgMHgyOEFFLA0KLSAgICAweDhFQTIsIDB4RDFBMSwgMHhEMUZFLCAweDI5MEMsIDB4OEVBMiwgMHhEMkExLCAweEQyRkUsIDB4Mjk2QSwNCi0gICAgMHg4RUEyLCAweEQzQTEsIDB4RDNGRSwgMHgyOUM4LCAweDhFQTIsIDB4RDRBMSwgMHhENEZFLCAweDJBMjYsDQotICAgIDB4OEVBMiwgMHhENUExLCAweEQ1RkUsIDB4MkE4NCwgMHg4RUEyLCAweEQ2QTEsIDB4RDZGRSwgMHgyQUUyLA0KLSAgICAweDhFQTIsIDB4RDdBMSwgMHhEN0ZFLCAweDJCNDAsIDB4OEVBMiwgMHhEOEExLCAweEQ4RkUsIDB4MkI5RSwNCi0gICAgMHg4RUEyLCAweEQ5QTEsIDB4RDlGRSwgMHgyQkZDLCAweDhFQTIsIDB4REFBMSwgMHhEQUZFLCAweDJDNUEsDQotICAgIDB4OEVBMiwgMHhEQkExLCAweERCRkUsIDB4MkNCOCwgMHg4RUEyLCAweERDQTEsIDB4RENGRSwgMHgyRDE2LA0KLSAgICAweDhFQTIsIDB4RERBMSwgMHhEREZFLCAweDJENzQsIDB4OEVBMiwgMHhERUExLCAweERFRkUsIDB4MkREMiwNCi0gICAgMHg4RUEyLCAweERGQTEsIDB4REZGRSwgMHgyRTMwLCAweDhFQTIsIDB4RTBBMSwgMHhFMEZFLCAweDJFOEUsDQotICAgIDB4OEVBMiwgMHhFMUExLCAweEUxRkUsIDB4MkVFQywgMHg4RUEyLCAweEUyQTEsIDB4RTJGRSwgMHgyRjRBLA0KLSAgICAweDhFQTIsIDB4RTNBMSwgMHhFM0ZFLCAweDJGQTgsIDB4OEVBMiwgMHhFNEExLCAweEU0RkUsIDB4MzAwNiwNCi0gICAgMHg4RUEyLCAweEU1QTEsIDB4RTVGRSwgMHgzMDY0LCAweDhFQTIsIDB4RTZBMSwgMHhFNkZFLCAweDMwQzIsDQotICAgIDB4OEVBMiwgMHhFN0ExLCAweEU3RkUsIDB4MzEyMCwgMHg4RUEyLCAweEU4QTEsIDB4RThGRSwgMHgzMTdFLA0KLSAgICAweDhFQTIsIDB4RTlBMSwgMHhFOUZFLCAweDMxREMsIDB4OEVBMiwgMHhFQUExLCAweEVBRkUsIDB4MzIzQSwNCi0gICAgMHg4RUEyLCAweEVCQTEsIDB4RUJGRSwgMHgzMjk4LCAweDhFQTIsIDB4RUNBMSwgMHhFQ0ZFLCAweDMyRjYsDQotICAgIDB4OEVBMiwgMHhFREExLCAweEVERkUsIDB4MzM1NCwgMHg4RUEyLCAweEVFQTEsIDB4RUVGRSwgMHgzM0IyLA0KLSAgICAweDhFQTIsIDB4RUZBMSwgMHhFRkZFLCAweDM0MTAsIDB4OEVBMiwgMHhGMEExLCAweEYwRkUsIDB4MzQ2RSwNCi0gICAgMHg4RUEyLCAweEYxQTEsIDB4RjFGRSwgMHgzNENDLCAweDhFQTIsIDB4RjJBMSwgMHhGMkM0LCAweDM1MkEsDQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfQ05TX0VVQ19IXzBbMTU3ICogM10gPSB7CisgICAgMHgwMDIwLCAweDAwN0UsIDB4MzU1MCwgMHhBMUExLCAweEExRkUsIDB4MDA2MywgMHhBMkExLCAweEEyRkUsIDB4MDBDMSwKKyAgICAweEEzQTEsIDB4QTNDRSwgMHgwMTFGLCAweEE0QTEsIDB4QTRGRSwgMHgwMTRELCAweEE1QTEsIDB4QTVFQywgMHgwMUFCLAorICAgIDB4QTVFRSwgMHhBNUYwLCAweDAxRjcsIDB4QTZBMSwgMHhBNkJFLCAweDAxRkEsIDB4QTdBMSwgMHhBN0ExLCAweDAyNTMsCisgICAgMHhBN0EyLCAweEE3QTQsIDB4MDIxOCwgMHhBN0E1LCAweEE3QTUsIDB4MDI1NCwgMHhBN0E2LCAweEE3QTYsIDB4MDIxQiwKKyAgICAweEE3QTcsIDB4QTdBNywgMHgwMjVBLCAweEE3QTgsIDB4QTdBOCwgMHgwMjFDLCAweEE3QTksIDB4QTdBQywgMHgwMjVCLAorICAgIDB4QTdBRCwgMHhBN0FGLCAweDAyMUQsIDB4QTdCMCwgMHhBN0IwLCAweDAyNUYsIDB4QTdCMSwgMHhBN0IxLCAweDE3NkUsCisgICAgMHhBN0IyLCAweEE3QjIsIDB4MDI2MCwgMHhBN0IzLCAweEE3QjMsIDB4MDI2MiwgMHhBN0I0LCAweEE3QjQsIDB4MDIyMCwKKyAgICAweEE3QjUsIDB4QTdCNSwgMHgwMjYzLCAweEE3QjYsIDB4QTdCNiwgMHgxNzZGLCAweEE3QjcsIDB4QTdCNywgMHgwMjIxLAorICAgIDB4QTdCOCwgMHhBN0I5LCAweDAyNjQsIDB4QTdCQSwgMHhBN0JBLCAweDAyMjIsIDB4QTdCQiwgMHhBN0JCLCAweDE3NzAsCisgICAgMHhBN0JDLCAweEE3QkMsIDB4MDIyMywgMHhBN0JELCAweEE3QkQsIDB4MDI2NiwgMHhBN0JFLCAweEE3QkUsIDB4MDI3OSwKKyAgICAweEE3QkYsIDB4QTdCRiwgMHgxNzc1LCAweEE3QzAsIDB4QTdDMSwgMHgwMjdBLCAweEE3QzIsIDB4QTdDMiwgMHgwMjI0LAorICAgIDB4QTdDMywgMHhBN0M2LCAweDAyN0MsIDB4QTdDNywgMHhBN0M3LCAweDAyMjUsIDB4QTdDOCwgMHhBN0NCLCAweDAyODIsCisgICAgMHhBN0NDLCAweEE3Q0MsIDB4MTc3NiwgMHhBN0NELCAweEE3Q0QsIDB4MDI4NiwgMHhBN0NFLCAweEE3Q0UsIDB4MDIyNiwKKyAgICAweEE3Q0YsIDB4QTdEMCwgMHgwMjg4LCAweEE3RDEsIDB4QTdEMiwgMHgwMjhDLCAweEE3RDMsIDB4QTdENSwgMHgwMjI3LAorICAgIDB4QTdENiwgMHhBN0Q4LCAweDAyOEUsIDB4QTdEOSwgMHhBN0RBLCAweDAyMkEsIDB4QTdEQiwgMHhBN0RCLCAweDE3NzcsCisgICAgMHhBN0RDLCAweEE3REYsIDB4MDJEMCwgMHhBN0UwLCAweEE3RTAsIDB4MDJENSwgMHhBN0UxLCAweEE3RTEsIDB4MDIyQywKKyAgICAweEE3RTIsIDB4QTdFNSwgMHgwMkQ2LCAweEE3RTYsIDB4QTdFNiwgMHgwMjJELCAweEE3RTcsIDB4QTdFRCwgMHgwMkRBLAorICAgIDB4QTdFRSwgMHhBN0VFLCAweDE3OEEsIDB4QTdFRiwgMHhBN0YyLCAweDAyRTEsIDB4QTdGMywgMHhBN0YzLCAweDE3OEMsCisgICAgMHhBN0Y0LCAweEE3RjgsIDB4MDJFNSwgMHhBN0Y5LCAweEE3RjksIDB4MTc4RCwgMHhBN0ZBLCAweEE3RkQsIDB4MDJFQSwKKyAgICAweEE3RkUsIDB4QTdGRSwgMHgwMzU2LCAweEE4QTEsIDB4QThBNiwgMHgwMzU3LCAweEE4QTcsIDB4QThBNywgMHgwMzVFLAorICAgIDB4QThBOCwgMHhBOEE4LCAweDAzNjIsIDB4QThBOSwgMHhBOEFBLCAweDAyMkUsIDB4QThBQiwgMHhBOEIyLCAweDAzNjMsCisgICAgMHhBOEIzLCAweEE4QjMsIDB4MTdCMiwgMHhBOEI0LCAweEE4QjYsIDB4MDM2QiwgMHhBOEI3LCAweEE4QkEsIDB4MDNGNiwKKyAgICAweEE4QkIsIDB4QThCQiwgMHgxODEyLCAweEE4QkMsIDB4QThCRSwgMHgwM0ZBLCAweEE4QkYsIDB4QThDMywgMHgwM0ZFLAorICAgIDB4QThDNCwgMHhBOENDLCAweDA0MDUsIDB4QThDRCwgMHhBOENELCAweDE4MTMsIDB4QThDRSwgMHhBOENFLCAweDE4MTgsCisgICAgMHhBOENGLCAweEE4RDIsIDB4MDQwRiwgMHhBOEQzLCAweEE4RDMsIDB4MTgxOSwgMHhBOEQ0LCAweEE4RDksIDB4MDUwOCwKKyAgICAweEE4REEsIDB4QThEQSwgMHgxOEU3LCAweEE4REIsIDB4QThFMiwgMHgwNTBFLCAweEE4RTMsIDB4QThFMywgMHgwMjMwLAorICAgIDB4QThFNCwgMHhBOEU0LCAweDA1MUIsIDB4QThFNSwgMHhBOEU3LCAweDA1MjAsIDB4QThFOCwgMHhBOEVCLCAweDA2OTYsCisgICAgMHhBOEVDLCAweEE4RUMsIDB4MDIzMSwgMHhBOEVELCAweEE4RjAsIDB4MDY5RiwgMHhBOEYxLCAweEE4RkIsIDB4MDgyNiwKKyAgICAweEE4RkMsIDB4QThGRSwgMHgwOUY1LCAweEE5QTEsIDB4QTlBMSwgMHgxRTMzLCAweEE5QTIsIDB4QTlBMiwgMHgwOUY4LAorICAgIDB4QTlBMywgMHhBOUEzLCAweDFFMzQsIDB4QTlBNCwgMHhBOUE1LCAweDA5RjksIDB4QTlBNiwgMHhBOUFCLCAweDBCRTEsCisgICAgMHhBOUFDLCAweEE5QUUsIDB4MERCQiwgMHhBOUFGLCAweEE5QUYsIDB4MjM2MCwgMHhBOUIwLCAweEE5QjAsIDB4MjYxMiwKKyAgICAweEE5QjEsIDB4QTlCMywgMHgwRjdCLCAweEE5QjQsIDB4QTlCNSwgMHgxMTAwLCAweEE5QjYsIDB4QTlCNiwgMHgxMjg5LAorICAgIDB4QTlCNywgMHhBOUI4LCAweDEzQjIsIDB4QTlCOSwgMHhBOUI5LCAweDJGMEQsIDB4QzJBMSwgMHhDMkMxLCAweDAyMzIsCisgICAgMHhDNEExLCAweEM0RkUsIDB4MDI1MywgMHhDNUExLCAweEM1RkUsIDB4MDJCMSwgMHhDNkExLCAweEM2RkUsIDB4MDMwRiwKKyAgICAweEM3QTEsIDB4QzdGRSwgMHgwMzZELCAweEM4QTEsIDB4QzhGRSwgMHgwM0NCLCAweEM5QTEsIDB4QzlGRSwgMHgwNDI5LAorICAgIDB4Q0FBMSwgMHhDQUZFLCAweDA0ODcsIDB4Q0JBMSwgMHhDQkZFLCAweDA0RTUsIDB4Q0NBMSwgMHhDQ0ZFLCAweDA1NDMsCisgICAgMHhDREExLCAweENERkUsIDB4MDVBMSwgMHhDRUExLCAweENFRkUsIDB4MDVGRiwgMHhDRkExLCAweENGRkUsIDB4MDY1RCwKKyAgICAweEQwQTEsIDB4RDBGRSwgMHgwNkJCLCAweEQxQTEsIDB4RDFGRSwgMHgwNzE5LCAweEQyQTEsIDB4RDJGRSwgMHgwNzc3LAorICAgIDB4RDNBMSwgMHhEM0ZFLCAweDA3RDUsIDB4RDRBMSwgMHhENEZFLCAweDA4MzMsIDB4RDVBMSwgMHhENUZFLCAweDA4OTEsCisgICAgMHhENkExLCAweEQ2RkUsIDB4MDhFRiwgMHhEN0ExLCAweEQ3RkUsIDB4MDk0RCwgMHhEOEExLCAweEQ4RkUsIDB4MDlBQiwKKyAgICAweEQ5QTEsIDB4RDlGRSwgMHgwQTA5LCAweERBQTEsIDB4REFGRSwgMHgwQTY3LCAweERCQTEsIDB4REJGRSwgMHgwQUM1LAorICAgIDB4RENBMSwgMHhEQ0ZFLCAweDBCMjMsIDB4RERBMSwgMHhEREZFLCAweDBCODEsIDB4REVBMSwgMHhERUZFLCAweDBCREYsCisgICAgMHhERkExLCAweERGRkUsIDB4MEMzRCwgMHhFMEExLCAweEUwRkUsIDB4MEM5QiwgMHhFMUExLCAweEUxRkUsIDB4MENGOSwKKyAgICAweEUyQTEsIDB4RTJGRSwgMHgwRDU3LCAweEUzQTEsIDB4RTNGRSwgMHgwREI1LCAweEU0QTEsIDB4RTRGRSwgMHgwRTEzLAorICAgIDB4RTVBMSwgMHhFNUZFLCAweDBFNzEsIDB4RTZBMSwgMHhFNkZFLCAweDBFQ0YsIDB4RTdBMSwgMHhFN0ZFLCAweDBGMkQsCisgICAgMHhFOEExLCAweEU4RkUsIDB4MEY4QiwgMHhFOUExLCAweEU5RkUsIDB4MEZFOSwgMHhFQUExLCAweEVBRkUsIDB4MTA0NywKKyAgICAweEVCQTEsIDB4RUJGRSwgMHgxMEE1LCAweEVDQTEsIDB4RUNGRSwgMHgxMTAzLCAweEVEQTEsIDB4RURGRSwgMHgxMTYxLAorICAgIDB4RUVBMSwgMHhFRUZFLCAweDExQkYsIDB4RUZBMSwgMHhFRkZFLCAweDEyMUQsIDB4RjBBMSwgMHhGMEZFLCAweDEyN0IsCisgICAgMHhGMUExLCAweEYxRkUsIDB4MTJEOSwgMHhGMkExLCAweEYyRkUsIDB4MTMzNywgMHhGM0ExLCAweEYzRkUsIDB4MTM5NSwKKyAgICAweEY0QTEsIDB4RjRGRSwgMHgxM0YzLCAweEY1QTEsIDB4RjVGRSwgMHgxNDUxLCAweEY2QTEsIDB4RjZGRSwgMHgxNEFGLAorICAgIDB4RjdBMSwgMHhGN0ZFLCAweDE1MEQsIDB4RjhBMSwgMHhGOEZFLCAweDE1NkIsIDB4RjlBMSwgMHhGOUZFLCAweDE1QzksCisgICAgMHhGQUExLCAweEZBRkUsIDB4MTYyNywgMHhGQkExLCAweEZCRkUsIDB4MTY4NSwgMHhGQ0ExLCAweEZDRkUsIDB4MTZFMywKKyAgICAweEZEQTEsIDB4RkRDQiwgMHgxNzQxLAorfTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBzaG9ydCBnX0ZYQ01BUF9DTlNfRVVDX0hfMF9EV29yZFsyMzggKiA0XSA9IHsKKyAgICAweDhFQTEsIDB4QTFBMSwgMHhBMUZFLCAweDAwNjMsIDB4OEVBMSwgMHhBMkExLCAweEEyRkUsIDB4MDBDMSwKKyAgICAweDhFQTEsIDB4QTNBMSwgMHhBM0NFLCAweDAxMUYsIDB4OEVBMSwgMHhBNEExLCAweEE0RkUsIDB4MDE0RCwKKyAgICAweDhFQTEsIDB4QTVBMSwgMHhBNUVDLCAweDAxQUIsIDB4OEVBMSwgMHhBNUVFLCAweEE1RjAsIDB4MDFGNywKKyAgICAweDhFQTEsIDB4QTZBMSwgMHhBNkJFLCAweDAxRkEsIDB4OEVBMSwgMHhBN0ExLCAweEE3QTEsIDB4MDI1MywKKyAgICAweDhFQTEsIDB4QTdBMiwgMHhBN0E0LCAweDAyMTgsIDB4OEVBMSwgMHhBN0E1LCAweEE3QTUsIDB4MDI1NCwKKyAgICAweDhFQTEsIDB4QTdBNiwgMHhBN0E2LCAweDAyMUIsIDB4OEVBMSwgMHhBN0E3LCAweEE3QTcsIDB4MDI1QSwKKyAgICAweDhFQTEsIDB4QTdBOCwgMHhBN0E4LCAweDAyMUMsIDB4OEVBMSwgMHhBN0E5LCAweEE3QUMsIDB4MDI1QiwKKyAgICAweDhFQTEsIDB4QTdBRCwgMHhBN0FGLCAweDAyMUQsIDB4OEVBMSwgMHhBN0IwLCAweEE3QjAsIDB4MDI1RiwKKyAgICAweDhFQTEsIDB4QTdCMSwgMHhBN0IxLCAweDE3NkUsIDB4OEVBMSwgMHhBN0IyLCAweEE3QjIsIDB4MDI2MCwKKyAgICAweDhFQTEsIDB4QTdCMywgMHhBN0IzLCAweDAyNjIsIDB4OEVBMSwgMHhBN0I0LCAweEE3QjQsIDB4MDIyMCwKKyAgICAweDhFQTEsIDB4QTdCNSwgMHhBN0I1LCAweDAyNjMsIDB4OEVBMSwgMHhBN0I2LCAweEE3QjYsIDB4MTc2RiwKKyAgICAweDhFQTEsIDB4QTdCNywgMHhBN0I3LCAweDAyMjEsIDB4OEVBMSwgMHhBN0I4LCAweEE3QjksIDB4MDI2NCwKKyAgICAweDhFQTEsIDB4QTdCQSwgMHhBN0JBLCAweDAyMjIsIDB4OEVBMSwgMHhBN0JCLCAweEE3QkIsIDB4MTc3MCwKKyAgICAweDhFQTEsIDB4QTdCQywgMHhBN0JDLCAweDAyMjMsIDB4OEVBMSwgMHhBN0JELCAweEE3QkQsIDB4MDI2NiwKKyAgICAweDhFQTEsIDB4QTdCRSwgMHhBN0JFLCAweDAyNzksIDB4OEVBMSwgMHhBN0JGLCAweEE3QkYsIDB4MTc3NSwKKyAgICAweDhFQTEsIDB4QTdDMCwgMHhBN0MxLCAweDAyN0EsIDB4OEVBMSwgMHhBN0MyLCAweEE3QzIsIDB4MDIyNCwKKyAgICAweDhFQTEsIDB4QTdDMywgMHhBN0M2LCAweDAyN0MsIDB4OEVBMSwgMHhBN0M3LCAweEE3QzcsIDB4MDIyNSwKKyAgICAweDhFQTEsIDB4QTdDOCwgMHhBN0NCLCAweDAyODIsIDB4OEVBMSwgMHhBN0NDLCAweEE3Q0MsIDB4MTc3NiwKKyAgICAweDhFQTEsIDB4QTdDRCwgMHhBN0NELCAweDAyODYsIDB4OEVBMSwgMHhBN0NFLCAweEE3Q0UsIDB4MDIyNiwKKyAgICAweDhFQTEsIDB4QTdDRiwgMHhBN0QwLCAweDAyODgsIDB4OEVBMSwgMHhBN0QxLCAweEE3RDIsIDB4MDI4QywKKyAgICAweDhFQTEsIDB4QTdEMywgMHhBN0Q1LCAweDAyMjcsIDB4OEVBMSwgMHhBN0Q2LCAweEE3RDgsIDB4MDI4RSwKKyAgICAweDhFQTEsIDB4QTdEOSwgMHhBN0RBLCAweDAyMkEsIDB4OEVBMSwgMHhBN0RCLCAweEE3REIsIDB4MTc3NywKKyAgICAweDhFQTEsIDB4QTdEQywgMHhBN0RGLCAweDAyRDAsIDB4OEVBMSwgMHhBN0UwLCAweEE3RTAsIDB4MDJENSwKKyAgICAweDhFQTEsIDB4QTdFMSwgMHhBN0UxLCAweDAyMkMsIDB4OEVBMSwgMHhBN0UyLCAweEE3RTUsIDB4MDJENiwKKyAgICAweDhFQTEsIDB4QTdFNiwgMHhBN0U2LCAweDAyMkQsIDB4OEVBMSwgMHhBN0U3LCAweEE3RUQsIDB4MDJEQSwKKyAgICAweDhFQTEsIDB4QTdFRSwgMHhBN0VFLCAweDE3OEEsIDB4OEVBMSwgMHhBN0VGLCAweEE3RjIsIDB4MDJFMSwKKyAgICAweDhFQTEsIDB4QTdGMywgMHhBN0YzLCAweDE3OEMsIDB4OEVBMSwgMHhBN0Y0LCAweEE3RjgsIDB4MDJFNSwKKyAgICAweDhFQTEsIDB4QTdGOSwgMHhBN0Y5LCAweDE3OEQsIDB4OEVBMSwgMHhBN0ZBLCAweEE3RkQsIDB4MDJFQSwKKyAgICAweDhFQTEsIDB4QTdGRSwgMHhBN0ZFLCAweDAzNTYsIDB4OEVBMSwgMHhBOEExLCAweEE4QTYsIDB4MDM1NywKKyAgICAweDhFQTEsIDB4QThBNywgMHhBOEE3LCAweDAzNUUsIDB4OEVBMSwgMHhBOEE4LCAweEE4QTgsIDB4MDM2MiwKKyAgICAweDhFQTEsIDB4QThBOSwgMHhBOEFBLCAweDAyMkUsIDB4OEVBMSwgMHhBOEFCLCAweEE4QjIsIDB4MDM2MywKKyAgICAweDhFQTEsIDB4QThCMywgMHhBOEIzLCAweDE3QjIsIDB4OEVBMSwgMHhBOEI0LCAweEE4QjYsIDB4MDM2QiwKKyAgICAweDhFQTEsIDB4QThCNywgMHhBOEJBLCAweDAzRjYsIDB4OEVBMSwgMHhBOEJCLCAweEE4QkIsIDB4MTgxMiwKKyAgICAweDhFQTEsIDB4QThCQywgMHhBOEJFLCAweDAzRkEsIDB4OEVBMSwgMHhBOEJGLCAweEE4QzMsIDB4MDNGRSwKKyAgICAweDhFQTEsIDB4QThDNCwgMHhBOENDLCAweDA0MDUsIDB4OEVBMSwgMHhBOENELCAweEE4Q0QsIDB4MTgxMywKKyAgICAweDhFQTEsIDB4QThDRSwgMHhBOENFLCAweDE4MTgsIDB4OEVBMSwgMHhBOENGLCAweEE4RDIsIDB4MDQwRiwKKyAgICAweDhFQTEsIDB4QThEMywgMHhBOEQzLCAweDE4MTksIDB4OEVBMSwgMHhBOEQ0LCAweEE4RDksIDB4MDUwOCwKKyAgICAweDhFQTEsIDB4QThEQSwgMHhBOERBLCAweDE4RTcsIDB4OEVBMSwgMHhBOERCLCAweEE4RTIsIDB4MDUwRSwKKyAgICAweDhFQTEsIDB4QThFMywgMHhBOEUzLCAweDAyMzAsIDB4OEVBMSwgMHhBOEU0LCAweEE4RTQsIDB4MDUxQiwKKyAgICAweDhFQTEsIDB4QThFNSwgMHhBOEU3LCAweDA1MjAsIDB4OEVBMSwgMHhBOEU4LCAweEE4RUIsIDB4MDY5NiwKKyAgICAweDhFQTEsIDB4QThFQywgMHhBOEVDLCAweDAyMzEsIDB4OEVBMSwgMHhBOEVELCAweEE4RjAsIDB4MDY5RiwKKyAgICAweDhFQTEsIDB4QThGMSwgMHhBOEZCLCAweDA4MjYsIDB4OEVBMSwgMHhBOEZDLCAweEE4RkUsIDB4MDlGNSwKKyAgICAweDhFQTEsIDB4QTlBMSwgMHhBOUExLCAweDFFMzMsIDB4OEVBMSwgMHhBOUEyLCAweEE5QTIsIDB4MDlGOCwKKyAgICAweDhFQTEsIDB4QTlBMywgMHhBOUEzLCAweDFFMzQsIDB4OEVBMSwgMHhBOUE0LCAweEE5QTUsIDB4MDlGOSwKKyAgICAweDhFQTEsIDB4QTlBNiwgMHhBOUFCLCAweDBCRTEsIDB4OEVBMSwgMHhBOUFDLCAweEE5QUUsIDB4MERCQiwKKyAgICAweDhFQTEsIDB4QTlBRiwgMHhBOUFGLCAweDIzNjAsIDB4OEVBMSwgMHhBOUIwLCAweEE5QjAsIDB4MjYxMiwKKyAgICAweDhFQTEsIDB4QTlCMSwgMHhBOUIzLCAweDBGN0IsIDB4OEVBMSwgMHhBOUI0LCAweEE5QjUsIDB4MTEwMCwKKyAgICAweDhFQTEsIDB4QTlCNiwgMHhBOUI2LCAweDEyODksIDB4OEVBMSwgMHhBOUI3LCAweEE5QjgsIDB4MTNCMiwKKyAgICAweDhFQTEsIDB4QTlCOSwgMHhBOUI5LCAweDJGMEQsIDB4OEVBMSwgMHhDMkExLCAweEMyQzEsIDB4MDIzMiwKKyAgICAweDhFQTEsIDB4QzRBMSwgMHhDNEZFLCAweDAyNTMsIDB4OEVBMSwgMHhDNUExLCAweEM1RkUsIDB4MDJCMSwKKyAgICAweDhFQTEsIDB4QzZBMSwgMHhDNkZFLCAweDAzMEYsIDB4OEVBMSwgMHhDN0ExLCAweEM3RkUsIDB4MDM2RCwKKyAgICAweDhFQTEsIDB4QzhBMSwgMHhDOEZFLCAweDAzQ0IsIDB4OEVBMSwgMHhDOUExLCAweEM5RkUsIDB4MDQyOSwKKyAgICAweDhFQTEsIDB4Q0FBMSwgMHhDQUZFLCAweDA0ODcsIDB4OEVBMSwgMHhDQkExLCAweENCRkUsIDB4MDRFNSwKKyAgICAweDhFQTEsIDB4Q0NBMSwgMHhDQ0ZFLCAweDA1NDMsIDB4OEVBMSwgMHhDREExLCAweENERkUsIDB4MDVBMSwKKyAgICAweDhFQTEsIDB4Q0VBMSwgMHhDRUZFLCAweDA1RkYsIDB4OEVBMSwgMHhDRkExLCAweENGRkUsIDB4MDY1RCwKKyAgICAweDhFQTEsIDB4RDBBMSwgMHhEMEZFLCAweDA2QkIsIDB4OEVBMSwgMHhEMUExLCAweEQxRkUsIDB4MDcxOSwKKyAgICAweDhFQTEsIDB4RDJBMSwgMHhEMkZFLCAweDA3NzcsIDB4OEVBMSwgMHhEM0ExLCAweEQzRkUsIDB4MDdENSwKKyAgICAweDhFQTEsIDB4RDRBMSwgMHhENEZFLCAweDA4MzMsIDB4OEVBMSwgMHhENUExLCAweEQ1RkUsIDB4MDg5MSwKKyAgICAweDhFQTEsIDB4RDZBMSwgMHhENkZFLCAweDA4RUYsIDB4OEVBMSwgMHhEN0ExLCAweEQ3RkUsIDB4MDk0RCwKKyAgICAweDhFQTEsIDB4RDhBMSwgMHhEOEZFLCAweDA5QUIsIDB4OEVBMSwgMHhEOUExLCAweEQ5RkUsIDB4MEEwOSwKKyAgICAweDhFQTEsIDB4REFBMSwgMHhEQUZFLCAweDBBNjcsIDB4OEVBMSwgMHhEQkExLCAweERCRkUsIDB4MEFDNSwKKyAgICAweDhFQTEsIDB4RENBMSwgMHhEQ0ZFLCAweDBCMjMsIDB4OEVBMSwgMHhEREExLCAweERERkUsIDB4MEI4MSwKKyAgICAweDhFQTEsIDB4REVBMSwgMHhERUZFLCAweDBCREYsIDB4OEVBMSwgMHhERkExLCAweERGRkUsIDB4MEMzRCwKKyAgICAweDhFQTEsIDB4RTBBMSwgMHhFMEZFLCAweDBDOUIsIDB4OEVBMSwgMHhFMUExLCAweEUxRkUsIDB4MENGOSwKKyAgICAweDhFQTEsIDB4RTJBMSwgMHhFMkZFLCAweDBENTcsIDB4OEVBMSwgMHhFM0ExLCAweEUzRkUsIDB4MERCNSwKKyAgICAweDhFQTEsIDB4RTRBMSwgMHhFNEZFLCAweDBFMTMsIDB4OEVBMSwgMHhFNUExLCAweEU1RkUsIDB4MEU3MSwKKyAgICAweDhFQTEsIDB4RTZBMSwgMHhFNkZFLCAweDBFQ0YsIDB4OEVBMSwgMHhFN0ExLCAweEU3RkUsIDB4MEYyRCwKKyAgICAweDhFQTEsIDB4RThBMSwgMHhFOEZFLCAweDBGOEIsIDB4OEVBMSwgMHhFOUExLCAweEU5RkUsIDB4MEZFOSwKKyAgICAweDhFQTEsIDB4RUFBMSwgMHhFQUZFLCAweDEwNDcsIDB4OEVBMSwgMHhFQkExLCAweEVCRkUsIDB4MTBBNSwKKyAgICAweDhFQTEsIDB4RUNBMSwgMHhFQ0ZFLCAweDExMDMsIDB4OEVBMSwgMHhFREExLCAweEVERkUsIDB4MTE2MSwKKyAgICAweDhFQTEsIDB4RUVBMSwgMHhFRUZFLCAweDExQkYsIDB4OEVBMSwgMHhFRkExLCAweEVGRkUsIDB4MTIxRCwKKyAgICAweDhFQTEsIDB4RjBBMSwgMHhGMEZFLCAweDEyN0IsIDB4OEVBMSwgMHhGMUExLCAweEYxRkUsIDB4MTJEOSwKKyAgICAweDhFQTEsIDB4RjJBMSwgMHhGMkZFLCAweDEzMzcsIDB4OEVBMSwgMHhGM0ExLCAweEYzRkUsIDB4MTM5NSwKKyAgICAweDhFQTEsIDB4RjRBMSwgMHhGNEZFLCAweDEzRjMsIDB4OEVBMSwgMHhGNUExLCAweEY1RkUsIDB4MTQ1MSwKKyAgICAweDhFQTEsIDB4RjZBMSwgMHhGNkZFLCAweDE0QUYsIDB4OEVBMSwgMHhGN0ExLCAweEY3RkUsIDB4MTUwRCwKKyAgICAweDhFQTEsIDB4RjhBMSwgMHhGOEZFLCAweDE1NkIsIDB4OEVBMSwgMHhGOUExLCAweEY5RkUsIDB4MTVDOSwKKyAgICAweDhFQTEsIDB4RkFBMSwgMHhGQUZFLCAweDE2MjcsIDB4OEVBMSwgMHhGQkExLCAweEZCRkUsIDB4MTY4NSwKKyAgICAweDhFQTEsIDB4RkNBMSwgMHhGQ0ZFLCAweDE2RTMsIDB4OEVBMSwgMHhGREExLCAweEZEQ0IsIDB4MTc0MSwKKyAgICAweDhFQTIsIDB4QTFBMSwgMHhBMUZFLCAweDE3NkMsIDB4OEVBMiwgMHhBMkExLCAweEEyRkUsIDB4MTdDQSwKKyAgICAweDhFQTIsIDB4QTNBMSwgMHhBM0ZFLCAweDE4MjgsIDB4OEVBMiwgMHhBNEExLCAweEE0RkUsIDB4MTg4NiwKKyAgICAweDhFQTIsIDB4QTVBMSwgMHhBNUZFLCAweDE4RTQsIDB4OEVBMiwgMHhBNkExLCAweEE2RkUsIDB4MTk0MiwKKyAgICAweDhFQTIsIDB4QTdBMSwgMHhBN0ZFLCAweDE5QTAsIDB4OEVBMiwgMHhBOEExLCAweEE4RkUsIDB4MTlGRSwKKyAgICAweDhFQTIsIDB4QTlBMSwgMHhBOUZFLCAweDFBNUMsIDB4OEVBMiwgMHhBQUExLCAweEFBRkUsIDB4MUFCQSwKKyAgICAweDhFQTIsIDB4QUJBMSwgMHhBQkZFLCAweDFCMTgsIDB4OEVBMiwgMHhBQ0ExLCAweEFDRkUsIDB4MUI3NiwKKyAgICAweDhFQTIsIDB4QURBMSwgMHhBREZFLCAweDFCRDQsIDB4OEVBMiwgMHhBRUExLCAweEFFRkUsIDB4MUMzMiwKKyAgICAweDhFQTIsIDB4QUZBMSwgMHhBRkZFLCAweDFDOTAsIDB4OEVBMiwgMHhCMEExLCAweEIwRkUsIDB4MUNFRSwKKyAgICAweDhFQTIsIDB4QjFBMSwgMHhCMUZFLCAweDFENEMsIDB4OEVBMiwgMHhCMkExLCAweEIyRkUsIDB4MURBQSwKKyAgICAweDhFQTIsIDB4QjNBMSwgMHhCM0ZFLCAweDFFMDgsIDB4OEVBMiwgMHhCNEExLCAweEI0RkUsIDB4MUU2NiwKKyAgICAweDhFQTIsIDB4QjVBMSwgMHhCNUZFLCAweDFFQzQsIDB4OEVBMiwgMHhCNkExLCAweEI2RkUsIDB4MUYyMiwKKyAgICAweDhFQTIsIDB4QjdBMSwgMHhCN0ZFLCAweDFGODAsIDB4OEVBMiwgMHhCOEExLCAweEI4RkUsIDB4MUZERSwKKyAgICAweDhFQTIsIDB4QjlBMSwgMHhCOUZFLCAweDIwM0MsIDB4OEVBMiwgMHhCQUExLCAweEJBRkUsIDB4MjA5QSwKKyAgICAweDhFQTIsIDB4QkJBMSwgMHhCQkZFLCAweDIwRjgsIDB4OEVBMiwgMHhCQ0ExLCAweEJDRkUsIDB4MjE1NiwKKyAgICAweDhFQTIsIDB4QkRBMSwgMHhCREZFLCAweDIxQjQsIDB4OEVBMiwgMHhCRUExLCAweEJFRkUsIDB4MjIxMiwKKyAgICAweDhFQTIsIDB4QkZBMSwgMHhCRkZFLCAweDIyNzAsIDB4OEVBMiwgMHhDMEExLCAweEMwRkUsIDB4MjJDRSwKKyAgICAweDhFQTIsIDB4QzFBMSwgMHhDMUZFLCAweDIzMkMsIDB4OEVBMiwgMHhDMkExLCAweEMyRkUsIDB4MjM4QSwKKyAgICAweDhFQTIsIDB4QzNBMSwgMHhDM0ZFLCAweDIzRTgsIDB4OEVBMiwgMHhDNEExLCAweEM0RkUsIDB4MjQ0NiwKKyAgICAweDhFQTIsIDB4QzVBMSwgMHhDNUZFLCAweDI0QTQsIDB4OEVBMiwgMHhDNkExLCAweEM2RkUsIDB4MjUwMiwKKyAgICAweDhFQTIsIDB4QzdBMSwgMHhDN0ZFLCAweDI1NjAsIDB4OEVBMiwgMHhDOEExLCAweEM4RkUsIDB4MjVCRSwKKyAgICAweDhFQTIsIDB4QzlBMSwgMHhDOUZFLCAweDI2MUMsIDB4OEVBMiwgMHhDQUExLCAweENBRkUsIDB4MjY3QSwKKyAgICAweDhFQTIsIDB4Q0JBMSwgMHhDQkZFLCAweDI2RDgsIDB4OEVBMiwgMHhDQ0ExLCAweENDRkUsIDB4MjczNiwKKyAgICAweDhFQTIsIDB4Q0RBMSwgMHhDREZFLCAweDI3OTQsIDB4OEVBMiwgMHhDRUExLCAweENFRkUsIDB4MjdGMiwKKyAgICAweDhFQTIsIDB4Q0ZBMSwgMHhDRkZFLCAweDI4NTAsIDB4OEVBMiwgMHhEMEExLCAweEQwRkUsIDB4MjhBRSwKKyAgICAweDhFQTIsIDB4RDFBMSwgMHhEMUZFLCAweDI5MEMsIDB4OEVBMiwgMHhEMkExLCAweEQyRkUsIDB4Mjk2QSwKKyAgICAweDhFQTIsIDB4RDNBMSwgMHhEM0ZFLCAweDI5QzgsIDB4OEVBMiwgMHhENEExLCAweEQ0RkUsIDB4MkEyNiwKKyAgICAweDhFQTIsIDB4RDVBMSwgMHhENUZFLCAweDJBODQsIDB4OEVBMiwgMHhENkExLCAweEQ2RkUsIDB4MkFFMiwKKyAgICAweDhFQTIsIDB4RDdBMSwgMHhEN0ZFLCAweDJCNDAsIDB4OEVBMiwgMHhEOEExLCAweEQ4RkUsIDB4MkI5RSwKKyAgICAweDhFQTIsIDB4RDlBMSwgMHhEOUZFLCAweDJCRkMsIDB4OEVBMiwgMHhEQUExLCAweERBRkUsIDB4MkM1QSwKKyAgICAweDhFQTIsIDB4REJBMSwgMHhEQkZFLCAweDJDQjgsIDB4OEVBMiwgMHhEQ0ExLCAweERDRkUsIDB4MkQxNiwKKyAgICAweDhFQTIsIDB4RERBMSwgMHhEREZFLCAweDJENzQsIDB4OEVBMiwgMHhERUExLCAweERFRkUsIDB4MkREMiwKKyAgICAweDhFQTIsIDB4REZBMSwgMHhERkZFLCAweDJFMzAsIDB4OEVBMiwgMHhFMEExLCAweEUwRkUsIDB4MkU4RSwKKyAgICAweDhFQTIsIDB4RTFBMSwgMHhFMUZFLCAweDJFRUMsIDB4OEVBMiwgMHhFMkExLCAweEUyRkUsIDB4MkY0QSwKKyAgICAweDhFQTIsIDB4RTNBMSwgMHhFM0ZFLCAweDJGQTgsIDB4OEVBMiwgMHhFNEExLCAweEU0RkUsIDB4MzAwNiwKKyAgICAweDhFQTIsIDB4RTVBMSwgMHhFNUZFLCAweDMwNjQsIDB4OEVBMiwgMHhFNkExLCAweEU2RkUsIDB4MzBDMiwKKyAgICAweDhFQTIsIDB4RTdBMSwgMHhFN0ZFLCAweDMxMjAsIDB4OEVBMiwgMHhFOEExLCAweEU4RkUsIDB4MzE3RSwKKyAgICAweDhFQTIsIDB4RTlBMSwgMHhFOUZFLCAweDMxREMsIDB4OEVBMiwgMHhFQUExLCAweEVBRkUsIDB4MzIzQSwKKyAgICAweDhFQTIsIDB4RUJBMSwgMHhFQkZFLCAweDMyOTgsIDB4OEVBMiwgMHhFQ0ExLCAweEVDRkUsIDB4MzJGNiwKKyAgICAweDhFQTIsIDB4RURBMSwgMHhFREZFLCAweDMzNTQsIDB4OEVBMiwgMHhFRUExLCAweEVFRkUsIDB4MzNCMiwKKyAgICAweDhFQTIsIDB4RUZBMSwgMHhFRkZFLCAweDM0MTAsIDB4OEVBMiwgMHhGMEExLCAweEYwRkUsIDB4MzQ2RSwKKyAgICAweDhFQTIsIDB4RjFBMSwgMHhGMUZFLCAweDM0Q0MsIDB4OEVBMiwgMHhGMkExLCAweEYyQzQsIDB4MzUyQSwKK307CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvQ05TMS9DTlMtRVVDLVZfMC5jcHAgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvQ05TMS9DTlMtRVVDLVZfMC5jcHAKaW5kZXggODczN2NmNC4uZWI3NzNhNyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0NOUzEvQ05TLUVVQy1WXzAuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9DTlMxL0NOUy1FVUMtVl8wLmNwcApAQCAtMSwyMDEgKzEsMjAxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfQ05TX0VVQ19WXzBbMTgwICogM10gPSB7DQotICAgIDB4MDAyMCwgMHgwMDdFLCAweDM1NTAsIDB4QTFBMSwgMHhBMUFCLCAweDAwNjMsIDB4QTFBQywgMHhBMUFDLCAweDM1NEUsDQotICAgIDB4QTFBRCwgMHhBMUJBLCAweDAwNkYsIDB4QTFCQiwgMHhBMUJCLCAweDAwN0MsIDB4QTFCQywgMHhBMUJDLCAweDAwN0UsDQotICAgIDB4QTFCRCwgMHhBMUJELCAweDAwN0UsIDB4QTFCRSwgMHhBMUJGLCAweDAwODIsIDB4QTFDMCwgMHhBMUMxLCAweDAwODIsDQotICAgIDB4QTFDMiwgMHhBMUMzLCAweDAwODYsIDB4QTFDNCwgMHhBMUM1LCAweDAwODYsIDB4QTFDNiwgMHhBMUM3LCAweDAwOEEsDQotICAgIDB4QTFDOCwgMHhBMUM5LCAweDAwOEEsIDB4QTFDQSwgMHhBMUNCLCAweDAwOEUsIDB4QTFDQywgMHhBMUNELCAweDAwOEUsDQotICAgIDB4QTFDRSwgMHhBMUNGLCAweDAwOTIsIDB4QTFEMCwgMHhBMUQxLCAweDAwOTIsIDB4QTFEMiwgMHhBMUQzLCAweDAwOTYsDQotICAgIDB4QTFENCwgMHhBMUQ1LCAweDAwOTYsIDB4QTFENiwgMHhBMUQ3LCAweDAwOUEsIDB4QTFEOCwgMHhBMUQ5LCAweDAwOUEsDQotICAgIDB4QTFEQSwgMHhBMURCLCAweDAwOUUsIDB4QTFEQywgMHhBMUZFLCAweDAwOUUsIDB4QTJBMSwgMHhBMkMzLCAweDAwQzEsDQotICAgIDB4QTJDNCwgMHhBMkM0LCAweDM1NEYsIDB4QTJDNSwgMHhBMkZFLCAweDAwRTUsIDB4QTNBMSwgMHhBM0NFLCAweDAxMUYsDQotICAgIDB4QTRBMSwgMHhBNEZFLCAweDAxNEQsIDB4QTVBMSwgMHhBNUVDLCAweDAxQUIsIDB4QTVFRSwgMHhBNUYwLCAweDAxRjcsDQotICAgIDB4QTZBMSwgMHhBNkJFLCAweDAxRkEsIDB4QTdBMSwgMHhBN0ExLCAweDAyNTMsIDB4QTdBMiwgMHhBN0E0LCAweDAyMTgsDQotICAgIDB4QTdBNSwgMHhBN0E1LCAweDAyNTQsIDB4QTdBNiwgMHhBN0E2LCAweDAyMUIsIDB4QTdBNywgMHhBN0E3LCAweDAyNUEsDQotICAgIDB4QTdBOCwgMHhBN0E4LCAweDAyMUMsIDB4QTdBOSwgMHhBN0FDLCAweDAyNUIsIDB4QTdBRCwgMHhBN0FGLCAweDAyMUQsDQotICAgIDB4QTdCMCwgMHhBN0IwLCAweDAyNUYsIDB4QTdCMSwgMHhBN0IxLCAweDE3NkUsIDB4QTdCMiwgMHhBN0IyLCAweDAyNjAsDQotICAgIDB4QTdCMywgMHhBN0IzLCAweDAyNjIsIDB4QTdCNCwgMHhBN0I0LCAweDAyMjAsIDB4QTdCNSwgMHhBN0I1LCAweDAyNjMsDQotICAgIDB4QTdCNiwgMHhBN0I2LCAweDE3NkYsIDB4QTdCNywgMHhBN0I3LCAweDAyMjEsIDB4QTdCOCwgMHhBN0I5LCAweDAyNjQsDQotICAgIDB4QTdCQSwgMHhBN0JBLCAweDAyMjIsIDB4QTdCQiwgMHhBN0JCLCAweDE3NzAsIDB4QTdCQywgMHhBN0JDLCAweDAyMjMsDQotICAgIDB4QTdCRCwgMHhBN0JELCAweDAyNjYsIDB4QTdCRSwgMHhBN0JFLCAweDAyNzksIDB4QTdCRiwgMHhBN0JGLCAweDE3NzUsDQotICAgIDB4QTdDMCwgMHhBN0MxLCAweDAyN0EsIDB4QTdDMiwgMHhBN0MyLCAweDAyMjQsIDB4QTdDMywgMHhBN0M2LCAweDAyN0MsDQotICAgIDB4QTdDNywgMHhBN0M3LCAweDAyMjUsIDB4QTdDOCwgMHhBN0NCLCAweDAyODIsIDB4QTdDQywgMHhBN0NDLCAweDE3NzYsDQotICAgIDB4QTdDRCwgMHhBN0NELCAweDAyODYsIDB4QTdDRSwgMHhBN0NFLCAweDAyMjYsIDB4QTdDRiwgMHhBN0QwLCAweDAyODgsDQotICAgIDB4QTdEMSwgMHhBN0QyLCAweDAyOEMsIDB4QTdEMywgMHhBN0Q1LCAweDAyMjcsIDB4QTdENiwgMHhBN0Q4LCAweDAyOEUsDQotICAgIDB4QTdEOSwgMHhBN0RBLCAweDAyMkEsIDB4QTdEQiwgMHhBN0RCLCAweDE3NzcsIDB4QTdEQywgMHhBN0RGLCAweDAyRDAsDQotICAgIDB4QTdFMCwgMHhBN0UwLCAweDAyRDUsIDB4QTdFMSwgMHhBN0UxLCAweDAyMkMsIDB4QTdFMiwgMHhBN0U1LCAweDAyRDYsDQotICAgIDB4QTdFNiwgMHhBN0U2LCAweDAyMkQsIDB4QTdFNywgMHhBN0VELCAweDAyREEsIDB4QTdFRSwgMHhBN0VFLCAweDE3OEEsDQotICAgIDB4QTdFRiwgMHhBN0YyLCAweDAyRTEsIDB4QTdGMywgMHhBN0YzLCAweDE3OEMsIDB4QTdGNCwgMHhBN0Y4LCAweDAyRTUsDQotICAgIDB4QTdGOSwgMHhBN0Y5LCAweDE3OEQsIDB4QTdGQSwgMHhBN0ZELCAweDAyRUEsIDB4QTdGRSwgMHhBN0ZFLCAweDAzNTYsDQotICAgIDB4QThBMSwgMHhBOEE2LCAweDAzNTcsIDB4QThBNywgMHhBOEE3LCAweDAzNUUsIDB4QThBOCwgMHhBOEE4LCAweDAzNjIsDQotICAgIDB4QThBOSwgMHhBOEFBLCAweDAyMkUsIDB4QThBQiwgMHhBOEIyLCAweDAzNjMsIDB4QThCMywgMHhBOEIzLCAweDE3QjIsDQotICAgIDB4QThCNCwgMHhBOEI2LCAweDAzNkIsIDB4QThCNywgMHhBOEJBLCAweDAzRjYsIDB4QThCQiwgMHhBOEJCLCAweDE4MTIsDQotICAgIDB4QThCQywgMHhBOEJFLCAweDAzRkEsIDB4QThCRiwgMHhBOEMzLCAweDAzRkUsIDB4QThDNCwgMHhBOENDLCAweDA0MDUsDQotICAgIDB4QThDRCwgMHhBOENELCAweDE4MTMsIDB4QThDRSwgMHhBOENFLCAweDE4MTgsIDB4QThDRiwgMHhBOEQyLCAweDA0MEYsDQotICAgIDB4QThEMywgMHhBOEQzLCAweDE4MTksIDB4QThENCwgMHhBOEQ5LCAweDA1MDgsIDB4QThEQSwgMHhBOERBLCAweDE4RTcsDQotICAgIDB4QThEQiwgMHhBOEUyLCAweDA1MEUsIDB4QThFMywgMHhBOEUzLCAweDAyMzAsIDB4QThFNCwgMHhBOEU0LCAweDA1MUIsDQotICAgIDB4QThFNSwgMHhBOEU3LCAweDA1MjAsIDB4QThFOCwgMHhBOEVCLCAweDA2OTYsIDB4QThFQywgMHhBOEVDLCAweDAyMzEsDQotICAgIDB4QThFRCwgMHhBOEYwLCAweDA2OUYsIDB4QThGMSwgMHhBOEZCLCAweDA4MjYsIDB4QThGQywgMHhBOEZFLCAweDA5RjUsDQotICAgIDB4QTlBMSwgMHhBOUExLCAweDFFMzMsIDB4QTlBMiwgMHhBOUEyLCAweDA5RjgsIDB4QTlBMywgMHhBOUEzLCAweDFFMzQsDQotICAgIDB4QTlBNCwgMHhBOUE1LCAweDA5RjksIDB4QTlBNiwgMHhBOUFCLCAweDBCRTEsIDB4QTlBQywgMHhBOUFFLCAweDBEQkIsDQotICAgIDB4QTlBRiwgMHhBOUFGLCAweDIzNjAsIDB4QTlCMCwgMHhBOUIwLCAweDI2MTIsIDB4QTlCMSwgMHhBOUIzLCAweDBGN0IsDQotICAgIDB4QTlCNCwgMHhBOUI1LCAweDExMDAsIDB4QTlCNiwgMHhBOUI2LCAweDEyODksIDB4QTlCNywgMHhBOUI4LCAweDEzQjIsDQotICAgIDB4QTlCOSwgMHhBOUI5LCAweDJGMEQsIDB4QzJBMSwgMHhDMkMxLCAweDAyMzIsIDB4QzRBMSwgMHhDNEZFLCAweDAyNTMsDQotICAgIDB4QzVBMSwgMHhDNUZFLCAweDAyQjEsIDB4QzZBMSwgMHhDNkZFLCAweDAzMEYsIDB4QzdBMSwgMHhDN0ZFLCAweDAzNkQsDQotICAgIDB4QzhBMSwgMHhDOEZFLCAweDAzQ0IsIDB4QzlBMSwgMHhDOUZFLCAweDA0MjksIDB4Q0FBMSwgMHhDQUZFLCAweDA0ODcsDQotICAgIDB4Q0JBMSwgMHhDQkZFLCAweDA0RTUsIDB4Q0NBMSwgMHhDQ0ZFLCAweDA1NDMsIDB4Q0RBMSwgMHhDREZFLCAweDA1QTEsDQotICAgIDB4Q0VBMSwgMHhDRUZFLCAweDA1RkYsIDB4Q0ZBMSwgMHhDRkZFLCAweDA2NUQsIDB4RDBBMSwgMHhEMEZFLCAweDA2QkIsDQotICAgIDB4RDFBMSwgMHhEMUZFLCAweDA3MTksIDB4RDJBMSwgMHhEMkZFLCAweDA3NzcsIDB4RDNBMSwgMHhEM0ZFLCAweDA3RDUsDQotICAgIDB4RDRBMSwgMHhENEZFLCAweDA4MzMsIDB4RDVBMSwgMHhENUZFLCAweDA4OTEsIDB4RDZBMSwgMHhENkZFLCAweDA4RUYsDQotICAgIDB4RDdBMSwgMHhEN0ZFLCAweDA5NEQsIDB4RDhBMSwgMHhEOEZFLCAweDA5QUIsIDB4RDlBMSwgMHhEOUZFLCAweDBBMDksDQotICAgIDB4REFBMSwgMHhEQUZFLCAweDBBNjcsIDB4REJBMSwgMHhEQkZFLCAweDBBQzUsIDB4RENBMSwgMHhEQ0ZFLCAweDBCMjMsDQotICAgIDB4RERBMSwgMHhEREZFLCAweDBCODEsIDB4REVBMSwgMHhERUZFLCAweDBCREYsIDB4REZBMSwgMHhERkZFLCAweDBDM0QsDQotICAgIDB4RTBBMSwgMHhFMEZFLCAweDBDOUIsIDB4RTFBMSwgMHhFMUZFLCAweDBDRjksIDB4RTJBMSwgMHhFMkZFLCAweDBENTcsDQotICAgIDB4RTNBMSwgMHhFM0ZFLCAweDBEQjUsIDB4RTRBMSwgMHhFNEZFLCAweDBFMTMsIDB4RTVBMSwgMHhFNUZFLCAweDBFNzEsDQotICAgIDB4RTZBMSwgMHhFNkZFLCAweDBFQ0YsIDB4RTdBMSwgMHhFN0ZFLCAweDBGMkQsIDB4RThBMSwgMHhFOEZFLCAweDBGOEIsDQotICAgIDB4RTlBMSwgMHhFOUZFLCAweDBGRTksIDB4RUFBMSwgMHhFQUZFLCAweDEwNDcsIDB4RUJBMSwgMHhFQkZFLCAweDEwQTUsDQotICAgIDB4RUNBMSwgMHhFQ0ZFLCAweDExMDMsIDB4RURBMSwgMHhFREZFLCAweDExNjEsIDB4RUVBMSwgMHhFRUZFLCAweDExQkYsDQotICAgIDB4RUZBMSwgMHhFRkZFLCAweDEyMUQsIDB4RjBBMSwgMHhGMEZFLCAweDEyN0IsIDB4RjFBMSwgMHhGMUZFLCAweDEyRDksDQotICAgIDB4RjJBMSwgMHhGMkZFLCAweDEzMzcsIDB4RjNBMSwgMHhGM0ZFLCAweDEzOTUsIDB4RjRBMSwgMHhGNEZFLCAweDEzRjMsDQotICAgIDB4RjVBMSwgMHhGNUZFLCAweDE0NTEsIDB4RjZBMSwgMHhGNkZFLCAweDE0QUYsIDB4RjdBMSwgMHhGN0ZFLCAweDE1MEQsDQotICAgIDB4RjhBMSwgMHhGOEZFLCAweDE1NkIsIDB4RjlBMSwgMHhGOUZFLCAweDE1QzksIDB4RkFBMSwgMHhGQUZFLCAweDE2MjcsDQotICAgIDB4RkJBMSwgMHhGQkZFLCAweDE2ODUsIDB4RkNBMSwgMHhGQ0ZFLCAweDE2RTMsIDB4RkRBMSwgMHhGRENCLCAweDE3NDEsDQotfTsNCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfQ05TX0VVQ19WXzBfRFdvcmRbMjYxICogNF0gPSB7DQotICAgIDB4OEVBMSwgMHhBMUExLCAweEExQUIsIDB4MDA2MywgMHg4RUExLCAweEExQUMsIDB4QTFBQywgMHgzNTRFLA0KLSAgICAweDhFQTEsIDB4QTFBRCwgMHhBMUJBLCAweDAwNkYsIDB4OEVBMSwgMHhBMUJCLCAweEExQkIsIDB4MDA3QywNCi0gICAgMHg4RUExLCAweEExQkMsIDB4QTFCQywgMHgwMDdFLCAweDhFQTEsIDB4QTFCRCwgMHhBMUJELCAweDAwN0UsDQotICAgIDB4OEVBMSwgMHhBMUJFLCAweEExQkYsIDB4MDA4MiwgMHg4RUExLCAweEExQzAsIDB4QTFDMSwgMHgwMDgyLA0KLSAgICAweDhFQTEsIDB4QTFDMiwgMHhBMUMzLCAweDAwODYsIDB4OEVBMSwgMHhBMUM0LCAweEExQzUsIDB4MDA4NiwNCi0gICAgMHg4RUExLCAweEExQzYsIDB4QTFDNywgMHgwMDhBLCAweDhFQTEsIDB4QTFDOCwgMHhBMUM5LCAweDAwOEEsDQotICAgIDB4OEVBMSwgMHhBMUNBLCAweEExQ0IsIDB4MDA4RSwgMHg4RUExLCAweEExQ0MsIDB4QTFDRCwgMHgwMDhFLA0KLSAgICAweDhFQTEsIDB4QTFDRSwgMHhBMUNGLCAweDAwOTIsIDB4OEVBMSwgMHhBMUQwLCAweEExRDEsIDB4MDA5MiwNCi0gICAgMHg4RUExLCAweEExRDIsIDB4QTFEMywgMHgwMDk2LCAweDhFQTEsIDB4QTFENCwgMHhBMUQ1LCAweDAwOTYsDQotICAgIDB4OEVBMSwgMHhBMUQ2LCAweEExRDcsIDB4MDA5QSwgMHg4RUExLCAweEExRDgsIDB4QTFEOSwgMHgwMDlBLA0KLSAgICAweDhFQTEsIDB4QTFEQSwgMHhBMURCLCAweDAwOUUsIDB4OEVBMSwgMHhBMURDLCAweEExRkUsIDB4MDA5RSwNCi0gICAgMHg4RUExLCAweEEyQTEsIDB4QTJDMywgMHgwMEMxLCAweDhFQTEsIDB4QTJDNCwgMHhBMkM0LCAweDM1NEYsDQotICAgIDB4OEVBMSwgMHhBMkM1LCAweEEyRkUsIDB4MDBFNSwgMHg4RUExLCAweEEzQTEsIDB4QTNDRSwgMHgwMTFGLA0KLSAgICAweDhFQTEsIDB4QTRBMSwgMHhBNEZFLCAweDAxNEQsIDB4OEVBMSwgMHhBNUExLCAweEE1RUMsIDB4MDFBQiwNCi0gICAgMHg4RUExLCAweEE1RUUsIDB4QTVGMCwgMHgwMUY3LCAweDhFQTEsIDB4QTZBMSwgMHhBNkJFLCAweDAxRkEsDQotICAgIDB4OEVBMSwgMHhBN0ExLCAweEE3QTEsIDB4MDI1MywgMHg4RUExLCAweEE3QTIsIDB4QTdBNCwgMHgwMjE4LA0KLSAgICAweDhFQTEsIDB4QTdBNSwgMHhBN0E1LCAweDAyNTQsIDB4OEVBMSwgMHhBN0E2LCAweEE3QTYsIDB4MDIxQiwNCi0gICAgMHg4RUExLCAweEE3QTcsIDB4QTdBNywgMHgwMjVBLCAweDhFQTEsIDB4QTdBOCwgMHhBN0E4LCAweDAyMUMsDQotICAgIDB4OEVBMSwgMHhBN0E5LCAweEE3QUMsIDB4MDI1QiwgMHg4RUExLCAweEE3QUQsIDB4QTdBRiwgMHgwMjFELA0KLSAgICAweDhFQTEsIDB4QTdCMCwgMHhBN0IwLCAweDAyNUYsIDB4OEVBMSwgMHhBN0IxLCAweEE3QjEsIDB4MTc2RSwNCi0gICAgMHg4RUExLCAweEE3QjIsIDB4QTdCMiwgMHgwMjYwLCAweDhFQTEsIDB4QTdCMywgMHhBN0IzLCAweDAyNjIsDQotICAgIDB4OEVBMSwgMHhBN0I0LCAweEE3QjQsIDB4MDIyMCwgMHg4RUExLCAweEE3QjUsIDB4QTdCNSwgMHgwMjYzLA0KLSAgICAweDhFQTEsIDB4QTdCNiwgMHhBN0I2LCAweDE3NkYsIDB4OEVBMSwgMHhBN0I3LCAweEE3QjcsIDB4MDIyMSwNCi0gICAgMHg4RUExLCAweEE3QjgsIDB4QTdCOSwgMHgwMjY0LCAweDhFQTEsIDB4QTdCQSwgMHhBN0JBLCAweDAyMjIsDQotICAgIDB4OEVBMSwgMHhBN0JCLCAweEE3QkIsIDB4MTc3MCwgMHg4RUExLCAweEE3QkMsIDB4QTdCQywgMHgwMjIzLA0KLSAgICAweDhFQTEsIDB4QTdCRCwgMHhBN0JELCAweDAyNjYsIDB4OEVBMSwgMHhBN0JFLCAweEE3QkUsIDB4MDI3OSwNCi0gICAgMHg4RUExLCAweEE3QkYsIDB4QTdCRiwgMHgxNzc1LCAweDhFQTEsIDB4QTdDMCwgMHhBN0MxLCAweDAyN0EsDQotICAgIDB4OEVBMSwgMHhBN0MyLCAweEE3QzIsIDB4MDIyNCwgMHg4RUExLCAweEE3QzMsIDB4QTdDNiwgMHgwMjdDLA0KLSAgICAweDhFQTEsIDB4QTdDNywgMHhBN0M3LCAweDAyMjUsIDB4OEVBMSwgMHhBN0M4LCAweEE3Q0IsIDB4MDI4MiwNCi0gICAgMHg4RUExLCAweEE3Q0MsIDB4QTdDQywgMHgxNzc2LCAweDhFQTEsIDB4QTdDRCwgMHhBN0NELCAweDAyODYsDQotICAgIDB4OEVBMSwgMHhBN0NFLCAweEE3Q0UsIDB4MDIyNiwgMHg4RUExLCAweEE3Q0YsIDB4QTdEMCwgMHgwMjg4LA0KLSAgICAweDhFQTEsIDB4QTdEMSwgMHhBN0QyLCAweDAyOEMsIDB4OEVBMSwgMHhBN0QzLCAweEE3RDUsIDB4MDIyNywNCi0gICAgMHg4RUExLCAweEE3RDYsIDB4QTdEOCwgMHgwMjhFLCAweDhFQTEsIDB4QTdEOSwgMHhBN0RBLCAweDAyMkEsDQotICAgIDB4OEVBMSwgMHhBN0RCLCAweEE3REIsIDB4MTc3NywgMHg4RUExLCAweEE3REMsIDB4QTdERiwgMHgwMkQwLA0KLSAgICAweDhFQTEsIDB4QTdFMCwgMHhBN0UwLCAweDAyRDUsIDB4OEVBMSwgMHhBN0UxLCAweEE3RTEsIDB4MDIyQywNCi0gICAgMHg4RUExLCAweEE3RTIsIDB4QTdFNSwgMHgwMkQ2LCAweDhFQTEsIDB4QTdFNiwgMHhBN0U2LCAweDAyMkQsDQotICAgIDB4OEVBMSwgMHhBN0U3LCAweEE3RUQsIDB4MDJEQSwgMHg4RUExLCAweEE3RUUsIDB4QTdFRSwgMHgxNzhBLA0KLSAgICAweDhFQTEsIDB4QTdFRiwgMHhBN0YyLCAweDAyRTEsIDB4OEVBMSwgMHhBN0YzLCAweEE3RjMsIDB4MTc4QywNCi0gICAgMHg4RUExLCAweEE3RjQsIDB4QTdGOCwgMHgwMkU1LCAweDhFQTEsIDB4QTdGOSwgMHhBN0Y5LCAweDE3OEQsDQotICAgIDB4OEVBMSwgMHhBN0ZBLCAweEE3RkQsIDB4MDJFQSwgMHg4RUExLCAweEE3RkUsIDB4QTdGRSwgMHgwMzU2LA0KLSAgICAweDhFQTEsIDB4QThBMSwgMHhBOEE2LCAweDAzNTcsIDB4OEVBMSwgMHhBOEE3LCAweEE4QTcsIDB4MDM1RSwNCi0gICAgMHg4RUExLCAweEE4QTgsIDB4QThBOCwgMHgwMzYyLCAweDhFQTEsIDB4QThBOSwgMHhBOEFBLCAweDAyMkUsDQotICAgIDB4OEVBMSwgMHhBOEFCLCAweEE4QjIsIDB4MDM2MywgMHg4RUExLCAweEE4QjMsIDB4QThCMywgMHgxN0IyLA0KLSAgICAweDhFQTEsIDB4QThCNCwgMHhBOEI2LCAweDAzNkIsIDB4OEVBMSwgMHhBOEI3LCAweEE4QkEsIDB4MDNGNiwNCi0gICAgMHg4RUExLCAweEE4QkIsIDB4QThCQiwgMHgxODEyLCAweDhFQTEsIDB4QThCQywgMHhBOEJFLCAweDAzRkEsDQotICAgIDB4OEVBMSwgMHhBOEJGLCAweEE4QzMsIDB4MDNGRSwgMHg4RUExLCAweEE4QzQsIDB4QThDQywgMHgwNDA1LA0KLSAgICAweDhFQTEsIDB4QThDRCwgMHhBOENELCAweDE4MTMsIDB4OEVBMSwgMHhBOENFLCAweEE4Q0UsIDB4MTgxOCwNCi0gICAgMHg4RUExLCAweEE4Q0YsIDB4QThEMiwgMHgwNDBGLCAweDhFQTEsIDB4QThEMywgMHhBOEQzLCAweDE4MTksDQotICAgIDB4OEVBMSwgMHhBOEQ0LCAweEE4RDksIDB4MDUwOCwgMHg4RUExLCAweEE4REEsIDB4QThEQSwgMHgxOEU3LA0KLSAgICAweDhFQTEsIDB4QThEQiwgMHhBOEUyLCAweDA1MEUsIDB4OEVBMSwgMHhBOEUzLCAweEE4RTMsIDB4MDIzMCwNCi0gICAgMHg4RUExLCAweEE4RTQsIDB4QThFNCwgMHgwNTFCLCAweDhFQTEsIDB4QThFNSwgMHhBOEU3LCAweDA1MjAsDQotICAgIDB4OEVBMSwgMHhBOEU4LCAweEE4RUIsIDB4MDY5NiwgMHg4RUExLCAweEE4RUMsIDB4QThFQywgMHgwMjMxLA0KLSAgICAweDhFQTEsIDB4QThFRCwgMHhBOEYwLCAweDA2OUYsIDB4OEVBMSwgMHhBOEYxLCAweEE4RkIsIDB4MDgyNiwNCi0gICAgMHg4RUExLCAweEE4RkMsIDB4QThGRSwgMHgwOUY1LCAweDhFQTEsIDB4QTlBMSwgMHhBOUExLCAweDFFMzMsDQotICAgIDB4OEVBMSwgMHhBOUEyLCAweEE5QTIsIDB4MDlGOCwgMHg4RUExLCAweEE5QTMsIDB4QTlBMywgMHgxRTM0LA0KLSAgICAweDhFQTEsIDB4QTlBNCwgMHhBOUE1LCAweDA5RjksIDB4OEVBMSwgMHhBOUE2LCAweEE5QUIsIDB4MEJFMSwNCi0gICAgMHg4RUExLCAweEE5QUMsIDB4QTlBRSwgMHgwREJCLCAweDhFQTEsIDB4QTlBRiwgMHhBOUFGLCAweDIzNjAsDQotICAgIDB4OEVBMSwgMHhBOUIwLCAweEE5QjAsIDB4MjYxMiwgMHg4RUExLCAweEE5QjEsIDB4QTlCMywgMHgwRjdCLA0KLSAgICAweDhFQTEsIDB4QTlCNCwgMHhBOUI1LCAweDExMDAsIDB4OEVBMSwgMHhBOUI2LCAweEE5QjYsIDB4MTI4OSwNCi0gICAgMHg4RUExLCAweEE5QjcsIDB4QTlCOCwgMHgxM0IyLCAweDhFQTEsIDB4QTlCOSwgMHhBOUI5LCAweDJGMEQsDQotICAgIDB4OEVBMSwgMHhDMkExLCAweEMyQzEsIDB4MDIzMiwgMHg4RUExLCAweEM0QTEsIDB4QzRGRSwgMHgwMjUzLA0KLSAgICAweDhFQTEsIDB4QzVBMSwgMHhDNUZFLCAweDAyQjEsIDB4OEVBMSwgMHhDNkExLCAweEM2RkUsIDB4MDMwRiwNCi0gICAgMHg4RUExLCAweEM3QTEsIDB4QzdGRSwgMHgwMzZELCAweDhFQTEsIDB4QzhBMSwgMHhDOEZFLCAweDAzQ0IsDQotICAgIDB4OEVBMSwgMHhDOUExLCAweEM5RkUsIDB4MDQyOSwgMHg4RUExLCAweENBQTEsIDB4Q0FGRSwgMHgwNDg3LA0KLSAgICAweDhFQTEsIDB4Q0JBMSwgMHhDQkZFLCAweDA0RTUsIDB4OEVBMSwgMHhDQ0ExLCAweENDRkUsIDB4MDU0MywNCi0gICAgMHg4RUExLCAweENEQTEsIDB4Q0RGRSwgMHgwNUExLCAweDhFQTEsIDB4Q0VBMSwgMHhDRUZFLCAweDA1RkYsDQotICAgIDB4OEVBMSwgMHhDRkExLCAweENGRkUsIDB4MDY1RCwgMHg4RUExLCAweEQwQTEsIDB4RDBGRSwgMHgwNkJCLA0KLSAgICAweDhFQTEsIDB4RDFBMSwgMHhEMUZFLCAweDA3MTksIDB4OEVBMSwgMHhEMkExLCAweEQyRkUsIDB4MDc3NywNCi0gICAgMHg4RUExLCAweEQzQTEsIDB4RDNGRSwgMHgwN0Q1LCAweDhFQTEsIDB4RDRBMSwgMHhENEZFLCAweDA4MzMsDQotICAgIDB4OEVBMSwgMHhENUExLCAweEQ1RkUsIDB4MDg5MSwgMHg4RUExLCAweEQ2QTEsIDB4RDZGRSwgMHgwOEVGLA0KLSAgICAweDhFQTEsIDB4RDdBMSwgMHhEN0ZFLCAweDA5NEQsIDB4OEVBMSwgMHhEOEExLCAweEQ4RkUsIDB4MDlBQiwNCi0gICAgMHg4RUExLCAweEQ5QTEsIDB4RDlGRSwgMHgwQTA5LCAweDhFQTEsIDB4REFBMSwgMHhEQUZFLCAweDBBNjcsDQotICAgIDB4OEVBMSwgMHhEQkExLCAweERCRkUsIDB4MEFDNSwgMHg4RUExLCAweERDQTEsIDB4RENGRSwgMHgwQjIzLA0KLSAgICAweDhFQTEsIDB4RERBMSwgMHhEREZFLCAweDBCODEsIDB4OEVBMSwgMHhERUExLCAweERFRkUsIDB4MEJERiwNCi0gICAgMHg4RUExLCAweERGQTEsIDB4REZGRSwgMHgwQzNELCAweDhFQTEsIDB4RTBBMSwgMHhFMEZFLCAweDBDOUIsDQotICAgIDB4OEVBMSwgMHhFMUExLCAweEUxRkUsIDB4MENGOSwgMHg4RUExLCAweEUyQTEsIDB4RTJGRSwgMHgwRDU3LA0KLSAgICAweDhFQTEsIDB4RTNBMSwgMHhFM0ZFLCAweDBEQjUsIDB4OEVBMSwgMHhFNEExLCAweEU0RkUsIDB4MEUxMywNCi0gICAgMHg4RUExLCAweEU1QTEsIDB4RTVGRSwgMHgwRTcxLCAweDhFQTEsIDB4RTZBMSwgMHhFNkZFLCAweDBFQ0YsDQotICAgIDB4OEVBMSwgMHhFN0ExLCAweEU3RkUsIDB4MEYyRCwgMHg4RUExLCAweEU4QTEsIDB4RThGRSwgMHgwRjhCLA0KLSAgICAweDhFQTEsIDB4RTlBMSwgMHhFOUZFLCAweDBGRTksIDB4OEVBMSwgMHhFQUExLCAweEVBRkUsIDB4MTA0NywNCi0gICAgMHg4RUExLCAweEVCQTEsIDB4RUJGRSwgMHgxMEE1LCAweDhFQTEsIDB4RUNBMSwgMHhFQ0ZFLCAweDExMDMsDQotICAgIDB4OEVBMSwgMHhFREExLCAweEVERkUsIDB4MTE2MSwgMHg4RUExLCAweEVFQTEsIDB4RUVGRSwgMHgxMUJGLA0KLSAgICAweDhFQTEsIDB4RUZBMSwgMHhFRkZFLCAweDEyMUQsIDB4OEVBMSwgMHhGMEExLCAweEYwRkUsIDB4MTI3QiwNCi0gICAgMHg4RUExLCAweEYxQTEsIDB4RjFGRSwgMHgxMkQ5LCAweDhFQTEsIDB4RjJBMSwgMHhGMkZFLCAweDEzMzcsDQotICAgIDB4OEVBMSwgMHhGM0ExLCAweEYzRkUsIDB4MTM5NSwgMHg4RUExLCAweEY0QTEsIDB4RjRGRSwgMHgxM0YzLA0KLSAgICAweDhFQTEsIDB4RjVBMSwgMHhGNUZFLCAweDE0NTEsIDB4OEVBMSwgMHhGNkExLCAweEY2RkUsIDB4MTRBRiwNCi0gICAgMHg4RUExLCAweEY3QTEsIDB4RjdGRSwgMHgxNTBELCAweDhFQTEsIDB4RjhBMSwgMHhGOEZFLCAweDE1NkIsDQotICAgIDB4OEVBMSwgMHhGOUExLCAweEY5RkUsIDB4MTVDOSwgMHg4RUExLCAweEZBQTEsIDB4RkFGRSwgMHgxNjI3LA0KLSAgICAweDhFQTEsIDB4RkJBMSwgMHhGQkZFLCAweDE2ODUsIDB4OEVBMSwgMHhGQ0ExLCAweEZDRkUsIDB4MTZFMywNCi0gICAgMHg4RUExLCAweEZEQTEsIDB4RkRDQiwgMHgxNzQxLCAweDhFQTIsIDB4QTFBMSwgMHhBMUZFLCAweDE3NkMsDQotICAgIDB4OEVBMiwgMHhBMkExLCAweEEyRkUsIDB4MTdDQSwgMHg4RUEyLCAweEEzQTEsIDB4QTNGRSwgMHgxODI4LA0KLSAgICAweDhFQTIsIDB4QTRBMSwgMHhBNEZFLCAweDE4ODYsIDB4OEVBMiwgMHhBNUExLCAweEE1RkUsIDB4MThFNCwNCi0gICAgMHg4RUEyLCAweEE2QTEsIDB4QTZGRSwgMHgxOTQyLCAweDhFQTIsIDB4QTdBMSwgMHhBN0ZFLCAweDE5QTAsDQotICAgIDB4OEVBMiwgMHhBOEExLCAweEE4RkUsIDB4MTlGRSwgMHg4RUEyLCAweEE5QTEsIDB4QTlGRSwgMHgxQTVDLA0KLSAgICAweDhFQTIsIDB4QUFBMSwgMHhBQUZFLCAweDFBQkEsIDB4OEVBMiwgMHhBQkExLCAweEFCRkUsIDB4MUIxOCwNCi0gICAgMHg4RUEyLCAweEFDQTEsIDB4QUNGRSwgMHgxQjc2LCAweDhFQTIsIDB4QURBMSwgMHhBREZFLCAweDFCRDQsDQotICAgIDB4OEVBMiwgMHhBRUExLCAweEFFRkUsIDB4MUMzMiwgMHg4RUEyLCAweEFGQTEsIDB4QUZGRSwgMHgxQzkwLA0KLSAgICAweDhFQTIsIDB4QjBBMSwgMHhCMEZFLCAweDFDRUUsIDB4OEVBMiwgMHhCMUExLCAweEIxRkUsIDB4MUQ0QywNCi0gICAgMHg4RUEyLCAweEIyQTEsIDB4QjJGRSwgMHgxREFBLCAweDhFQTIsIDB4QjNBMSwgMHhCM0ZFLCAweDFFMDgsDQotICAgIDB4OEVBMiwgMHhCNEExLCAweEI0RkUsIDB4MUU2NiwgMHg4RUEyLCAweEI1QTEsIDB4QjVGRSwgMHgxRUM0LA0KLSAgICAweDhFQTIsIDB4QjZBMSwgMHhCNkZFLCAweDFGMjIsIDB4OEVBMiwgMHhCN0ExLCAweEI3RkUsIDB4MUY4MCwNCi0gICAgMHg4RUEyLCAweEI4QTEsIDB4QjhGRSwgMHgxRkRFLCAweDhFQTIsIDB4QjlBMSwgMHhCOUZFLCAweDIwM0MsDQotICAgIDB4OEVBMiwgMHhCQUExLCAweEJBRkUsIDB4MjA5QSwgMHg4RUEyLCAweEJCQTEsIDB4QkJGRSwgMHgyMEY4LA0KLSAgICAweDhFQTIsIDB4QkNBMSwgMHhCQ0ZFLCAweDIxNTYsIDB4OEVBMiwgMHhCREExLCAweEJERkUsIDB4MjFCNCwNCi0gICAgMHg4RUEyLCAweEJFQTEsIDB4QkVGRSwgMHgyMjEyLCAweDhFQTIsIDB4QkZBMSwgMHhCRkZFLCAweDIyNzAsDQotICAgIDB4OEVBMiwgMHhDMEExLCAweEMwRkUsIDB4MjJDRSwgMHg4RUEyLCAweEMxQTEsIDB4QzFGRSwgMHgyMzJDLA0KLSAgICAweDhFQTIsIDB4QzJBMSwgMHhDMkZFLCAweDIzOEEsIDB4OEVBMiwgMHhDM0ExLCAweEMzRkUsIDB4MjNFOCwNCi0gICAgMHg4RUEyLCAweEM0QTEsIDB4QzRGRSwgMHgyNDQ2LCAweDhFQTIsIDB4QzVBMSwgMHhDNUZFLCAweDI0QTQsDQotICAgIDB4OEVBMiwgMHhDNkExLCAweEM2RkUsIDB4MjUwMiwgMHg4RUEyLCAweEM3QTEsIDB4QzdGRSwgMHgyNTYwLA0KLSAgICAweDhFQTIsIDB4QzhBMSwgMHhDOEZFLCAweDI1QkUsIDB4OEVBMiwgMHhDOUExLCAweEM5RkUsIDB4MjYxQywNCi0gICAgMHg4RUEyLCAweENBQTEsIDB4Q0FGRSwgMHgyNjdBLCAweDhFQTIsIDB4Q0JBMSwgMHhDQkZFLCAweDI2RDgsDQotICAgIDB4OEVBMiwgMHhDQ0ExLCAweENDRkUsIDB4MjczNiwgMHg4RUEyLCAweENEQTEsIDB4Q0RGRSwgMHgyNzk0LA0KLSAgICAweDhFQTIsIDB4Q0VBMSwgMHhDRUZFLCAweDI3RjIsIDB4OEVBMiwgMHhDRkExLCAweENGRkUsIDB4Mjg1MCwNCi0gICAgMHg4RUEyLCAweEQwQTEsIDB4RDBGRSwgMHgyOEFFLCAweDhFQTIsIDB4RDFBMSwgMHhEMUZFLCAweDI5MEMsDQotICAgIDB4OEVBMiwgMHhEMkExLCAweEQyRkUsIDB4Mjk2QSwgMHg4RUEyLCAweEQzQTEsIDB4RDNGRSwgMHgyOUM4LA0KLSAgICAweDhFQTIsIDB4RDRBMSwgMHhENEZFLCAweDJBMjYsIDB4OEVBMiwgMHhENUExLCAweEQ1RkUsIDB4MkE4NCwNCi0gICAgMHg4RUEyLCAweEQ2QTEsIDB4RDZGRSwgMHgyQUUyLCAweDhFQTIsIDB4RDdBMSwgMHhEN0ZFLCAweDJCNDAsDQotICAgIDB4OEVBMiwgMHhEOEExLCAweEQ4RkUsIDB4MkI5RSwgMHg4RUEyLCAweEQ5QTEsIDB4RDlGRSwgMHgyQkZDLA0KLSAgICAweDhFQTIsIDB4REFBMSwgMHhEQUZFLCAweDJDNUEsIDB4OEVBMiwgMHhEQkExLCAweERCRkUsIDB4MkNCOCwNCi0gICAgMHg4RUEyLCAweERDQTEsIDB4RENGRSwgMHgyRDE2LCAweDhFQTIsIDB4RERBMSwgMHhEREZFLCAweDJENzQsDQotICAgIDB4OEVBMiwgMHhERUExLCAweERFRkUsIDB4MkREMiwgMHg4RUEyLCAweERGQTEsIDB4REZGRSwgMHgyRTMwLA0KLSAgICAweDhFQTIsIDB4RTBBMSwgMHhFMEZFLCAweDJFOEUsIDB4OEVBMiwgMHhFMUExLCAweEUxRkUsIDB4MkVFQywNCi0gICAgMHg4RUEyLCAweEUyQTEsIDB4RTJGRSwgMHgyRjRBLCAweDhFQTIsIDB4RTNBMSwgMHhFM0ZFLCAweDJGQTgsDQotICAgIDB4OEVBMiwgMHhFNEExLCAweEU0RkUsIDB4MzAwNiwgMHg4RUEyLCAweEU1QTEsIDB4RTVGRSwgMHgzMDY0LA0KLSAgICAweDhFQTIsIDB4RTZBMSwgMHhFNkZFLCAweDMwQzIsIDB4OEVBMiwgMHhFN0ExLCAweEU3RkUsIDB4MzEyMCwNCi0gICAgMHg4RUEyLCAweEU4QTEsIDB4RThGRSwgMHgzMTdFLCAweDhFQTIsIDB4RTlBMSwgMHhFOUZFLCAweDMxREMsDQotICAgIDB4OEVBMiwgMHhFQUExLCAweEVBRkUsIDB4MzIzQSwgMHg4RUEyLCAweEVCQTEsIDB4RUJGRSwgMHgzMjk4LA0KLSAgICAweDhFQTIsIDB4RUNBMSwgMHhFQ0ZFLCAweDMyRjYsIDB4OEVBMiwgMHhFREExLCAweEVERkUsIDB4MzM1NCwNCi0gICAgMHg4RUEyLCAweEVFQTEsIDB4RUVGRSwgMHgzM0IyLCAweDhFQTIsIDB4RUZBMSwgMHhFRkZFLCAweDM0MTAsDQotICAgIDB4OEVBMiwgMHhGMEExLCAweEYwRkUsIDB4MzQ2RSwgMHg4RUEyLCAweEYxQTEsIDB4RjFGRSwgMHgzNENDLA0KLSAgICAweDhFQTIsIDB4RjJBMSwgMHhGMkM0LCAweDM1MkEsDQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfQ05TX0VVQ19WXzBbMTgwICogM10gPSB7CisgICAgMHgwMDIwLCAweDAwN0UsIDB4MzU1MCwgMHhBMUExLCAweEExQUIsIDB4MDA2MywgMHhBMUFDLCAweEExQUMsIDB4MzU0RSwKKyAgICAweEExQUQsIDB4QTFCQSwgMHgwMDZGLCAweEExQkIsIDB4QTFCQiwgMHgwMDdDLCAweEExQkMsIDB4QTFCQywgMHgwMDdFLAorICAgIDB4QTFCRCwgMHhBMUJELCAweDAwN0UsIDB4QTFCRSwgMHhBMUJGLCAweDAwODIsIDB4QTFDMCwgMHhBMUMxLCAweDAwODIsCisgICAgMHhBMUMyLCAweEExQzMsIDB4MDA4NiwgMHhBMUM0LCAweEExQzUsIDB4MDA4NiwgMHhBMUM2LCAweEExQzcsIDB4MDA4QSwKKyAgICAweEExQzgsIDB4QTFDOSwgMHgwMDhBLCAweEExQ0EsIDB4QTFDQiwgMHgwMDhFLCAweEExQ0MsIDB4QTFDRCwgMHgwMDhFLAorICAgIDB4QTFDRSwgMHhBMUNGLCAweDAwOTIsIDB4QTFEMCwgMHhBMUQxLCAweDAwOTIsIDB4QTFEMiwgMHhBMUQzLCAweDAwOTYsCisgICAgMHhBMUQ0LCAweEExRDUsIDB4MDA5NiwgMHhBMUQ2LCAweEExRDcsIDB4MDA5QSwgMHhBMUQ4LCAweEExRDksIDB4MDA5QSwKKyAgICAweEExREEsIDB4QTFEQiwgMHgwMDlFLCAweEExREMsIDB4QTFGRSwgMHgwMDlFLCAweEEyQTEsIDB4QTJDMywgMHgwMEMxLAorICAgIDB4QTJDNCwgMHhBMkM0LCAweDM1NEYsIDB4QTJDNSwgMHhBMkZFLCAweDAwRTUsIDB4QTNBMSwgMHhBM0NFLCAweDAxMUYsCisgICAgMHhBNEExLCAweEE0RkUsIDB4MDE0RCwgMHhBNUExLCAweEE1RUMsIDB4MDFBQiwgMHhBNUVFLCAweEE1RjAsIDB4MDFGNywKKyAgICAweEE2QTEsIDB4QTZCRSwgMHgwMUZBLCAweEE3QTEsIDB4QTdBMSwgMHgwMjUzLCAweEE3QTIsIDB4QTdBNCwgMHgwMjE4LAorICAgIDB4QTdBNSwgMHhBN0E1LCAweDAyNTQsIDB4QTdBNiwgMHhBN0E2LCAweDAyMUIsIDB4QTdBNywgMHhBN0E3LCAweDAyNUEsCisgICAgMHhBN0E4LCAweEE3QTgsIDB4MDIxQywgMHhBN0E5LCAweEE3QUMsIDB4MDI1QiwgMHhBN0FELCAweEE3QUYsIDB4MDIxRCwKKyAgICAweEE3QjAsIDB4QTdCMCwgMHgwMjVGLCAweEE3QjEsIDB4QTdCMSwgMHgxNzZFLCAweEE3QjIsIDB4QTdCMiwgMHgwMjYwLAorICAgIDB4QTdCMywgMHhBN0IzLCAweDAyNjIsIDB4QTdCNCwgMHhBN0I0LCAweDAyMjAsIDB4QTdCNSwgMHhBN0I1LCAweDAyNjMsCisgICAgMHhBN0I2LCAweEE3QjYsIDB4MTc2RiwgMHhBN0I3LCAweEE3QjcsIDB4MDIyMSwgMHhBN0I4LCAweEE3QjksIDB4MDI2NCwKKyAgICAweEE3QkEsIDB4QTdCQSwgMHgwMjIyLCAweEE3QkIsIDB4QTdCQiwgMHgxNzcwLCAweEE3QkMsIDB4QTdCQywgMHgwMjIzLAorICAgIDB4QTdCRCwgMHhBN0JELCAweDAyNjYsIDB4QTdCRSwgMHhBN0JFLCAweDAyNzksIDB4QTdCRiwgMHhBN0JGLCAweDE3NzUsCisgICAgMHhBN0MwLCAweEE3QzEsIDB4MDI3QSwgMHhBN0MyLCAweEE3QzIsIDB4MDIyNCwgMHhBN0MzLCAweEE3QzYsIDB4MDI3QywKKyAgICAweEE3QzcsIDB4QTdDNywgMHgwMjI1LCAweEE3QzgsIDB4QTdDQiwgMHgwMjgyLCAweEE3Q0MsIDB4QTdDQywgMHgxNzc2LAorICAgIDB4QTdDRCwgMHhBN0NELCAweDAyODYsIDB4QTdDRSwgMHhBN0NFLCAweDAyMjYsIDB4QTdDRiwgMHhBN0QwLCAweDAyODgsCisgICAgMHhBN0QxLCAweEE3RDIsIDB4MDI4QywgMHhBN0QzLCAweEE3RDUsIDB4MDIyNywgMHhBN0Q2LCAweEE3RDgsIDB4MDI4RSwKKyAgICAweEE3RDksIDB4QTdEQSwgMHgwMjJBLCAweEE3REIsIDB4QTdEQiwgMHgxNzc3LCAweEE3REMsIDB4QTdERiwgMHgwMkQwLAorICAgIDB4QTdFMCwgMHhBN0UwLCAweDAyRDUsIDB4QTdFMSwgMHhBN0UxLCAweDAyMkMsIDB4QTdFMiwgMHhBN0U1LCAweDAyRDYsCisgICAgMHhBN0U2LCAweEE3RTYsIDB4MDIyRCwgMHhBN0U3LCAweEE3RUQsIDB4MDJEQSwgMHhBN0VFLCAweEE3RUUsIDB4MTc4QSwKKyAgICAweEE3RUYsIDB4QTdGMiwgMHgwMkUxLCAweEE3RjMsIDB4QTdGMywgMHgxNzhDLCAweEE3RjQsIDB4QTdGOCwgMHgwMkU1LAorICAgIDB4QTdGOSwgMHhBN0Y5LCAweDE3OEQsIDB4QTdGQSwgMHhBN0ZELCAweDAyRUEsIDB4QTdGRSwgMHhBN0ZFLCAweDAzNTYsCisgICAgMHhBOEExLCAweEE4QTYsIDB4MDM1NywgMHhBOEE3LCAweEE4QTcsIDB4MDM1RSwgMHhBOEE4LCAweEE4QTgsIDB4MDM2MiwKKyAgICAweEE4QTksIDB4QThBQSwgMHgwMjJFLCAweEE4QUIsIDB4QThCMiwgMHgwMzYzLCAweEE4QjMsIDB4QThCMywgMHgxN0IyLAorICAgIDB4QThCNCwgMHhBOEI2LCAweDAzNkIsIDB4QThCNywgMHhBOEJBLCAweDAzRjYsIDB4QThCQiwgMHhBOEJCLCAweDE4MTIsCisgICAgMHhBOEJDLCAweEE4QkUsIDB4MDNGQSwgMHhBOEJGLCAweEE4QzMsIDB4MDNGRSwgMHhBOEM0LCAweEE4Q0MsIDB4MDQwNSwKKyAgICAweEE4Q0QsIDB4QThDRCwgMHgxODEzLCAweEE4Q0UsIDB4QThDRSwgMHgxODE4LCAweEE4Q0YsIDB4QThEMiwgMHgwNDBGLAorICAgIDB4QThEMywgMHhBOEQzLCAweDE4MTksIDB4QThENCwgMHhBOEQ5LCAweDA1MDgsIDB4QThEQSwgMHhBOERBLCAweDE4RTcsCisgICAgMHhBOERCLCAweEE4RTIsIDB4MDUwRSwgMHhBOEUzLCAweEE4RTMsIDB4MDIzMCwgMHhBOEU0LCAweEE4RTQsIDB4MDUxQiwKKyAgICAweEE4RTUsIDB4QThFNywgMHgwNTIwLCAweEE4RTgsIDB4QThFQiwgMHgwNjk2LCAweEE4RUMsIDB4QThFQywgMHgwMjMxLAorICAgIDB4QThFRCwgMHhBOEYwLCAweDA2OUYsIDB4QThGMSwgMHhBOEZCLCAweDA4MjYsIDB4QThGQywgMHhBOEZFLCAweDA5RjUsCisgICAgMHhBOUExLCAweEE5QTEsIDB4MUUzMywgMHhBOUEyLCAweEE5QTIsIDB4MDlGOCwgMHhBOUEzLCAweEE5QTMsIDB4MUUzNCwKKyAgICAweEE5QTQsIDB4QTlBNSwgMHgwOUY5LCAweEE5QTYsIDB4QTlBQiwgMHgwQkUxLCAweEE5QUMsIDB4QTlBRSwgMHgwREJCLAorICAgIDB4QTlBRiwgMHhBOUFGLCAweDIzNjAsIDB4QTlCMCwgMHhBOUIwLCAweDI2MTIsIDB4QTlCMSwgMHhBOUIzLCAweDBGN0IsCisgICAgMHhBOUI0LCAweEE5QjUsIDB4MTEwMCwgMHhBOUI2LCAweEE5QjYsIDB4MTI4OSwgMHhBOUI3LCAweEE5QjgsIDB4MTNCMiwKKyAgICAweEE5QjksIDB4QTlCOSwgMHgyRjBELCAweEMyQTEsIDB4QzJDMSwgMHgwMjMyLCAweEM0QTEsIDB4QzRGRSwgMHgwMjUzLAorICAgIDB4QzVBMSwgMHhDNUZFLCAweDAyQjEsIDB4QzZBMSwgMHhDNkZFLCAweDAzMEYsIDB4QzdBMSwgMHhDN0ZFLCAweDAzNkQsCisgICAgMHhDOEExLCAweEM4RkUsIDB4MDNDQiwgMHhDOUExLCAweEM5RkUsIDB4MDQyOSwgMHhDQUExLCAweENBRkUsIDB4MDQ4NywKKyAgICAweENCQTEsIDB4Q0JGRSwgMHgwNEU1LCAweENDQTEsIDB4Q0NGRSwgMHgwNTQzLCAweENEQTEsIDB4Q0RGRSwgMHgwNUExLAorICAgIDB4Q0VBMSwgMHhDRUZFLCAweDA1RkYsIDB4Q0ZBMSwgMHhDRkZFLCAweDA2NUQsIDB4RDBBMSwgMHhEMEZFLCAweDA2QkIsCisgICAgMHhEMUExLCAweEQxRkUsIDB4MDcxOSwgMHhEMkExLCAweEQyRkUsIDB4MDc3NywgMHhEM0ExLCAweEQzRkUsIDB4MDdENSwKKyAgICAweEQ0QTEsIDB4RDRGRSwgMHgwODMzLCAweEQ1QTEsIDB4RDVGRSwgMHgwODkxLCAweEQ2QTEsIDB4RDZGRSwgMHgwOEVGLAorICAgIDB4RDdBMSwgMHhEN0ZFLCAweDA5NEQsIDB4RDhBMSwgMHhEOEZFLCAweDA5QUIsIDB4RDlBMSwgMHhEOUZFLCAweDBBMDksCisgICAgMHhEQUExLCAweERBRkUsIDB4MEE2NywgMHhEQkExLCAweERCRkUsIDB4MEFDNSwgMHhEQ0ExLCAweERDRkUsIDB4MEIyMywKKyAgICAweEREQTEsIDB4RERGRSwgMHgwQjgxLCAweERFQTEsIDB4REVGRSwgMHgwQkRGLCAweERGQTEsIDB4REZGRSwgMHgwQzNELAorICAgIDB4RTBBMSwgMHhFMEZFLCAweDBDOUIsIDB4RTFBMSwgMHhFMUZFLCAweDBDRjksIDB4RTJBMSwgMHhFMkZFLCAweDBENTcsCisgICAgMHhFM0ExLCAweEUzRkUsIDB4MERCNSwgMHhFNEExLCAweEU0RkUsIDB4MEUxMywgMHhFNUExLCAweEU1RkUsIDB4MEU3MSwKKyAgICAweEU2QTEsIDB4RTZGRSwgMHgwRUNGLCAweEU3QTEsIDB4RTdGRSwgMHgwRjJELCAweEU4QTEsIDB4RThGRSwgMHgwRjhCLAorICAgIDB4RTlBMSwgMHhFOUZFLCAweDBGRTksIDB4RUFBMSwgMHhFQUZFLCAweDEwNDcsIDB4RUJBMSwgMHhFQkZFLCAweDEwQTUsCisgICAgMHhFQ0ExLCAweEVDRkUsIDB4MTEwMywgMHhFREExLCAweEVERkUsIDB4MTE2MSwgMHhFRUExLCAweEVFRkUsIDB4MTFCRiwKKyAgICAweEVGQTEsIDB4RUZGRSwgMHgxMjFELCAweEYwQTEsIDB4RjBGRSwgMHgxMjdCLCAweEYxQTEsIDB4RjFGRSwgMHgxMkQ5LAorICAgIDB4RjJBMSwgMHhGMkZFLCAweDEzMzcsIDB4RjNBMSwgMHhGM0ZFLCAweDEzOTUsIDB4RjRBMSwgMHhGNEZFLCAweDEzRjMsCisgICAgMHhGNUExLCAweEY1RkUsIDB4MTQ1MSwgMHhGNkExLCAweEY2RkUsIDB4MTRBRiwgMHhGN0ExLCAweEY3RkUsIDB4MTUwRCwKKyAgICAweEY4QTEsIDB4RjhGRSwgMHgxNTZCLCAweEY5QTEsIDB4RjlGRSwgMHgxNUM5LCAweEZBQTEsIDB4RkFGRSwgMHgxNjI3LAorICAgIDB4RkJBMSwgMHhGQkZFLCAweDE2ODUsIDB4RkNBMSwgMHhGQ0ZFLCAweDE2RTMsIDB4RkRBMSwgMHhGRENCLCAweDE3NDEsCit9OworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0NOU19FVUNfVl8wX0RXb3JkWzI2MSAqIDRdID0geworICAgIDB4OEVBMSwgMHhBMUExLCAweEExQUIsIDB4MDA2MywgMHg4RUExLCAweEExQUMsIDB4QTFBQywgMHgzNTRFLAorICAgIDB4OEVBMSwgMHhBMUFELCAweEExQkEsIDB4MDA2RiwgMHg4RUExLCAweEExQkIsIDB4QTFCQiwgMHgwMDdDLAorICAgIDB4OEVBMSwgMHhBMUJDLCAweEExQkMsIDB4MDA3RSwgMHg4RUExLCAweEExQkQsIDB4QTFCRCwgMHgwMDdFLAorICAgIDB4OEVBMSwgMHhBMUJFLCAweEExQkYsIDB4MDA4MiwgMHg4RUExLCAweEExQzAsIDB4QTFDMSwgMHgwMDgyLAorICAgIDB4OEVBMSwgMHhBMUMyLCAweEExQzMsIDB4MDA4NiwgMHg4RUExLCAweEExQzQsIDB4QTFDNSwgMHgwMDg2LAorICAgIDB4OEVBMSwgMHhBMUM2LCAweEExQzcsIDB4MDA4QSwgMHg4RUExLCAweEExQzgsIDB4QTFDOSwgMHgwMDhBLAorICAgIDB4OEVBMSwgMHhBMUNBLCAweEExQ0IsIDB4MDA4RSwgMHg4RUExLCAweEExQ0MsIDB4QTFDRCwgMHgwMDhFLAorICAgIDB4OEVBMSwgMHhBMUNFLCAweEExQ0YsIDB4MDA5MiwgMHg4RUExLCAweEExRDAsIDB4QTFEMSwgMHgwMDkyLAorICAgIDB4OEVBMSwgMHhBMUQyLCAweEExRDMsIDB4MDA5NiwgMHg4RUExLCAweEExRDQsIDB4QTFENSwgMHgwMDk2LAorICAgIDB4OEVBMSwgMHhBMUQ2LCAweEExRDcsIDB4MDA5QSwgMHg4RUExLCAweEExRDgsIDB4QTFEOSwgMHgwMDlBLAorICAgIDB4OEVBMSwgMHhBMURBLCAweEExREIsIDB4MDA5RSwgMHg4RUExLCAweEExREMsIDB4QTFGRSwgMHgwMDlFLAorICAgIDB4OEVBMSwgMHhBMkExLCAweEEyQzMsIDB4MDBDMSwgMHg4RUExLCAweEEyQzQsIDB4QTJDNCwgMHgzNTRGLAorICAgIDB4OEVBMSwgMHhBMkM1LCAweEEyRkUsIDB4MDBFNSwgMHg4RUExLCAweEEzQTEsIDB4QTNDRSwgMHgwMTFGLAorICAgIDB4OEVBMSwgMHhBNEExLCAweEE0RkUsIDB4MDE0RCwgMHg4RUExLCAweEE1QTEsIDB4QTVFQywgMHgwMUFCLAorICAgIDB4OEVBMSwgMHhBNUVFLCAweEE1RjAsIDB4MDFGNywgMHg4RUExLCAweEE2QTEsIDB4QTZCRSwgMHgwMUZBLAorICAgIDB4OEVBMSwgMHhBN0ExLCAweEE3QTEsIDB4MDI1MywgMHg4RUExLCAweEE3QTIsIDB4QTdBNCwgMHgwMjE4LAorICAgIDB4OEVBMSwgMHhBN0E1LCAweEE3QTUsIDB4MDI1NCwgMHg4RUExLCAweEE3QTYsIDB4QTdBNiwgMHgwMjFCLAorICAgIDB4OEVBMSwgMHhBN0E3LCAweEE3QTcsIDB4MDI1QSwgMHg4RUExLCAweEE3QTgsIDB4QTdBOCwgMHgwMjFDLAorICAgIDB4OEVBMSwgMHhBN0E5LCAweEE3QUMsIDB4MDI1QiwgMHg4RUExLCAweEE3QUQsIDB4QTdBRiwgMHgwMjFELAorICAgIDB4OEVBMSwgMHhBN0IwLCAweEE3QjAsIDB4MDI1RiwgMHg4RUExLCAweEE3QjEsIDB4QTdCMSwgMHgxNzZFLAorICAgIDB4OEVBMSwgMHhBN0IyLCAweEE3QjIsIDB4MDI2MCwgMHg4RUExLCAweEE3QjMsIDB4QTdCMywgMHgwMjYyLAorICAgIDB4OEVBMSwgMHhBN0I0LCAweEE3QjQsIDB4MDIyMCwgMHg4RUExLCAweEE3QjUsIDB4QTdCNSwgMHgwMjYzLAorICAgIDB4OEVBMSwgMHhBN0I2LCAweEE3QjYsIDB4MTc2RiwgMHg4RUExLCAweEE3QjcsIDB4QTdCNywgMHgwMjIxLAorICAgIDB4OEVBMSwgMHhBN0I4LCAweEE3QjksIDB4MDI2NCwgMHg4RUExLCAweEE3QkEsIDB4QTdCQSwgMHgwMjIyLAorICAgIDB4OEVBMSwgMHhBN0JCLCAweEE3QkIsIDB4MTc3MCwgMHg4RUExLCAweEE3QkMsIDB4QTdCQywgMHgwMjIzLAorICAgIDB4OEVBMSwgMHhBN0JELCAweEE3QkQsIDB4MDI2NiwgMHg4RUExLCAweEE3QkUsIDB4QTdCRSwgMHgwMjc5LAorICAgIDB4OEVBMSwgMHhBN0JGLCAweEE3QkYsIDB4MTc3NSwgMHg4RUExLCAweEE3QzAsIDB4QTdDMSwgMHgwMjdBLAorICAgIDB4OEVBMSwgMHhBN0MyLCAweEE3QzIsIDB4MDIyNCwgMHg4RUExLCAweEE3QzMsIDB4QTdDNiwgMHgwMjdDLAorICAgIDB4OEVBMSwgMHhBN0M3LCAweEE3QzcsIDB4MDIyNSwgMHg4RUExLCAweEE3QzgsIDB4QTdDQiwgMHgwMjgyLAorICAgIDB4OEVBMSwgMHhBN0NDLCAweEE3Q0MsIDB4MTc3NiwgMHg4RUExLCAweEE3Q0QsIDB4QTdDRCwgMHgwMjg2LAorICAgIDB4OEVBMSwgMHhBN0NFLCAweEE3Q0UsIDB4MDIyNiwgMHg4RUExLCAweEE3Q0YsIDB4QTdEMCwgMHgwMjg4LAorICAgIDB4OEVBMSwgMHhBN0QxLCAweEE3RDIsIDB4MDI4QywgMHg4RUExLCAweEE3RDMsIDB4QTdENSwgMHgwMjI3LAorICAgIDB4OEVBMSwgMHhBN0Q2LCAweEE3RDgsIDB4MDI4RSwgMHg4RUExLCAweEE3RDksIDB4QTdEQSwgMHgwMjJBLAorICAgIDB4OEVBMSwgMHhBN0RCLCAweEE3REIsIDB4MTc3NywgMHg4RUExLCAweEE3REMsIDB4QTdERiwgMHgwMkQwLAorICAgIDB4OEVBMSwgMHhBN0UwLCAweEE3RTAsIDB4MDJENSwgMHg4RUExLCAweEE3RTEsIDB4QTdFMSwgMHgwMjJDLAorICAgIDB4OEVBMSwgMHhBN0UyLCAweEE3RTUsIDB4MDJENiwgMHg4RUExLCAweEE3RTYsIDB4QTdFNiwgMHgwMjJELAorICAgIDB4OEVBMSwgMHhBN0U3LCAweEE3RUQsIDB4MDJEQSwgMHg4RUExLCAweEE3RUUsIDB4QTdFRSwgMHgxNzhBLAorICAgIDB4OEVBMSwgMHhBN0VGLCAweEE3RjIsIDB4MDJFMSwgMHg4RUExLCAweEE3RjMsIDB4QTdGMywgMHgxNzhDLAorICAgIDB4OEVBMSwgMHhBN0Y0LCAweEE3RjgsIDB4MDJFNSwgMHg4RUExLCAweEE3RjksIDB4QTdGOSwgMHgxNzhELAorICAgIDB4OEVBMSwgMHhBN0ZBLCAweEE3RkQsIDB4MDJFQSwgMHg4RUExLCAweEE3RkUsIDB4QTdGRSwgMHgwMzU2LAorICAgIDB4OEVBMSwgMHhBOEExLCAweEE4QTYsIDB4MDM1NywgMHg4RUExLCAweEE4QTcsIDB4QThBNywgMHgwMzVFLAorICAgIDB4OEVBMSwgMHhBOEE4LCAweEE4QTgsIDB4MDM2MiwgMHg4RUExLCAweEE4QTksIDB4QThBQSwgMHgwMjJFLAorICAgIDB4OEVBMSwgMHhBOEFCLCAweEE4QjIsIDB4MDM2MywgMHg4RUExLCAweEE4QjMsIDB4QThCMywgMHgxN0IyLAorICAgIDB4OEVBMSwgMHhBOEI0LCAweEE4QjYsIDB4MDM2QiwgMHg4RUExLCAweEE4QjcsIDB4QThCQSwgMHgwM0Y2LAorICAgIDB4OEVBMSwgMHhBOEJCLCAweEE4QkIsIDB4MTgxMiwgMHg4RUExLCAweEE4QkMsIDB4QThCRSwgMHgwM0ZBLAorICAgIDB4OEVBMSwgMHhBOEJGLCAweEE4QzMsIDB4MDNGRSwgMHg4RUExLCAweEE4QzQsIDB4QThDQywgMHgwNDA1LAorICAgIDB4OEVBMSwgMHhBOENELCAweEE4Q0QsIDB4MTgxMywgMHg4RUExLCAweEE4Q0UsIDB4QThDRSwgMHgxODE4LAorICAgIDB4OEVBMSwgMHhBOENGLCAweEE4RDIsIDB4MDQwRiwgMHg4RUExLCAweEE4RDMsIDB4QThEMywgMHgxODE5LAorICAgIDB4OEVBMSwgMHhBOEQ0LCAweEE4RDksIDB4MDUwOCwgMHg4RUExLCAweEE4REEsIDB4QThEQSwgMHgxOEU3LAorICAgIDB4OEVBMSwgMHhBOERCLCAweEE4RTIsIDB4MDUwRSwgMHg4RUExLCAweEE4RTMsIDB4QThFMywgMHgwMjMwLAorICAgIDB4OEVBMSwgMHhBOEU0LCAweEE4RTQsIDB4MDUxQiwgMHg4RUExLCAweEE4RTUsIDB4QThFNywgMHgwNTIwLAorICAgIDB4OEVBMSwgMHhBOEU4LCAweEE4RUIsIDB4MDY5NiwgMHg4RUExLCAweEE4RUMsIDB4QThFQywgMHgwMjMxLAorICAgIDB4OEVBMSwgMHhBOEVELCAweEE4RjAsIDB4MDY5RiwgMHg4RUExLCAweEE4RjEsIDB4QThGQiwgMHgwODI2LAorICAgIDB4OEVBMSwgMHhBOEZDLCAweEE4RkUsIDB4MDlGNSwgMHg4RUExLCAweEE5QTEsIDB4QTlBMSwgMHgxRTMzLAorICAgIDB4OEVBMSwgMHhBOUEyLCAweEE5QTIsIDB4MDlGOCwgMHg4RUExLCAweEE5QTMsIDB4QTlBMywgMHgxRTM0LAorICAgIDB4OEVBMSwgMHhBOUE0LCAweEE5QTUsIDB4MDlGOSwgMHg4RUExLCAweEE5QTYsIDB4QTlBQiwgMHgwQkUxLAorICAgIDB4OEVBMSwgMHhBOUFDLCAweEE5QUUsIDB4MERCQiwgMHg4RUExLCAweEE5QUYsIDB4QTlBRiwgMHgyMzYwLAorICAgIDB4OEVBMSwgMHhBOUIwLCAweEE5QjAsIDB4MjYxMiwgMHg4RUExLCAweEE5QjEsIDB4QTlCMywgMHgwRjdCLAorICAgIDB4OEVBMSwgMHhBOUI0LCAweEE5QjUsIDB4MTEwMCwgMHg4RUExLCAweEE5QjYsIDB4QTlCNiwgMHgxMjg5LAorICAgIDB4OEVBMSwgMHhBOUI3LCAweEE5QjgsIDB4MTNCMiwgMHg4RUExLCAweEE5QjksIDB4QTlCOSwgMHgyRjBELAorICAgIDB4OEVBMSwgMHhDMkExLCAweEMyQzEsIDB4MDIzMiwgMHg4RUExLCAweEM0QTEsIDB4QzRGRSwgMHgwMjUzLAorICAgIDB4OEVBMSwgMHhDNUExLCAweEM1RkUsIDB4MDJCMSwgMHg4RUExLCAweEM2QTEsIDB4QzZGRSwgMHgwMzBGLAorICAgIDB4OEVBMSwgMHhDN0ExLCAweEM3RkUsIDB4MDM2RCwgMHg4RUExLCAweEM4QTEsIDB4QzhGRSwgMHgwM0NCLAorICAgIDB4OEVBMSwgMHhDOUExLCAweEM5RkUsIDB4MDQyOSwgMHg4RUExLCAweENBQTEsIDB4Q0FGRSwgMHgwNDg3LAorICAgIDB4OEVBMSwgMHhDQkExLCAweENCRkUsIDB4MDRFNSwgMHg4RUExLCAweENDQTEsIDB4Q0NGRSwgMHgwNTQzLAorICAgIDB4OEVBMSwgMHhDREExLCAweENERkUsIDB4MDVBMSwgMHg4RUExLCAweENFQTEsIDB4Q0VGRSwgMHgwNUZGLAorICAgIDB4OEVBMSwgMHhDRkExLCAweENGRkUsIDB4MDY1RCwgMHg4RUExLCAweEQwQTEsIDB4RDBGRSwgMHgwNkJCLAorICAgIDB4OEVBMSwgMHhEMUExLCAweEQxRkUsIDB4MDcxOSwgMHg4RUExLCAweEQyQTEsIDB4RDJGRSwgMHgwNzc3LAorICAgIDB4OEVBMSwgMHhEM0ExLCAweEQzRkUsIDB4MDdENSwgMHg4RUExLCAweEQ0QTEsIDB4RDRGRSwgMHgwODMzLAorICAgIDB4OEVBMSwgMHhENUExLCAweEQ1RkUsIDB4MDg5MSwgMHg4RUExLCAweEQ2QTEsIDB4RDZGRSwgMHgwOEVGLAorICAgIDB4OEVBMSwgMHhEN0ExLCAweEQ3RkUsIDB4MDk0RCwgMHg4RUExLCAweEQ4QTEsIDB4RDhGRSwgMHgwOUFCLAorICAgIDB4OEVBMSwgMHhEOUExLCAweEQ5RkUsIDB4MEEwOSwgMHg4RUExLCAweERBQTEsIDB4REFGRSwgMHgwQTY3LAorICAgIDB4OEVBMSwgMHhEQkExLCAweERCRkUsIDB4MEFDNSwgMHg4RUExLCAweERDQTEsIDB4RENGRSwgMHgwQjIzLAorICAgIDB4OEVBMSwgMHhEREExLCAweERERkUsIDB4MEI4MSwgMHg4RUExLCAweERFQTEsIDB4REVGRSwgMHgwQkRGLAorICAgIDB4OEVBMSwgMHhERkExLCAweERGRkUsIDB4MEMzRCwgMHg4RUExLCAweEUwQTEsIDB4RTBGRSwgMHgwQzlCLAorICAgIDB4OEVBMSwgMHhFMUExLCAweEUxRkUsIDB4MENGOSwgMHg4RUExLCAweEUyQTEsIDB4RTJGRSwgMHgwRDU3LAorICAgIDB4OEVBMSwgMHhFM0ExLCAweEUzRkUsIDB4MERCNSwgMHg4RUExLCAweEU0QTEsIDB4RTRGRSwgMHgwRTEzLAorICAgIDB4OEVBMSwgMHhFNUExLCAweEU1RkUsIDB4MEU3MSwgMHg4RUExLCAweEU2QTEsIDB4RTZGRSwgMHgwRUNGLAorICAgIDB4OEVBMSwgMHhFN0ExLCAweEU3RkUsIDB4MEYyRCwgMHg4RUExLCAweEU4QTEsIDB4RThGRSwgMHgwRjhCLAorICAgIDB4OEVBMSwgMHhFOUExLCAweEU5RkUsIDB4MEZFOSwgMHg4RUExLCAweEVBQTEsIDB4RUFGRSwgMHgxMDQ3LAorICAgIDB4OEVBMSwgMHhFQkExLCAweEVCRkUsIDB4MTBBNSwgMHg4RUExLCAweEVDQTEsIDB4RUNGRSwgMHgxMTAzLAorICAgIDB4OEVBMSwgMHhFREExLCAweEVERkUsIDB4MTE2MSwgMHg4RUExLCAweEVFQTEsIDB4RUVGRSwgMHgxMUJGLAorICAgIDB4OEVBMSwgMHhFRkExLCAweEVGRkUsIDB4MTIxRCwgMHg4RUExLCAweEYwQTEsIDB4RjBGRSwgMHgxMjdCLAorICAgIDB4OEVBMSwgMHhGMUExLCAweEYxRkUsIDB4MTJEOSwgMHg4RUExLCAweEYyQTEsIDB4RjJGRSwgMHgxMzM3LAorICAgIDB4OEVBMSwgMHhGM0ExLCAweEYzRkUsIDB4MTM5NSwgMHg4RUExLCAweEY0QTEsIDB4RjRGRSwgMHgxM0YzLAorICAgIDB4OEVBMSwgMHhGNUExLCAweEY1RkUsIDB4MTQ1MSwgMHg4RUExLCAweEY2QTEsIDB4RjZGRSwgMHgxNEFGLAorICAgIDB4OEVBMSwgMHhGN0ExLCAweEY3RkUsIDB4MTUwRCwgMHg4RUExLCAweEY4QTEsIDB4RjhGRSwgMHgxNTZCLAorICAgIDB4OEVBMSwgMHhGOUExLCAweEY5RkUsIDB4MTVDOSwgMHg4RUExLCAweEZBQTEsIDB4RkFGRSwgMHgxNjI3LAorICAgIDB4OEVBMSwgMHhGQkExLCAweEZCRkUsIDB4MTY4NSwgMHg4RUExLCAweEZDQTEsIDB4RkNGRSwgMHgxNkUzLAorICAgIDB4OEVBMSwgMHhGREExLCAweEZEQ0IsIDB4MTc0MSwgMHg4RUEyLCAweEExQTEsIDB4QTFGRSwgMHgxNzZDLAorICAgIDB4OEVBMiwgMHhBMkExLCAweEEyRkUsIDB4MTdDQSwgMHg4RUEyLCAweEEzQTEsIDB4QTNGRSwgMHgxODI4LAorICAgIDB4OEVBMiwgMHhBNEExLCAweEE0RkUsIDB4MTg4NiwgMHg4RUEyLCAweEE1QTEsIDB4QTVGRSwgMHgxOEU0LAorICAgIDB4OEVBMiwgMHhBNkExLCAweEE2RkUsIDB4MTk0MiwgMHg4RUEyLCAweEE3QTEsIDB4QTdGRSwgMHgxOUEwLAorICAgIDB4OEVBMiwgMHhBOEExLCAweEE4RkUsIDB4MTlGRSwgMHg4RUEyLCAweEE5QTEsIDB4QTlGRSwgMHgxQTVDLAorICAgIDB4OEVBMiwgMHhBQUExLCAweEFBRkUsIDB4MUFCQSwgMHg4RUEyLCAweEFCQTEsIDB4QUJGRSwgMHgxQjE4LAorICAgIDB4OEVBMiwgMHhBQ0ExLCAweEFDRkUsIDB4MUI3NiwgMHg4RUEyLCAweEFEQTEsIDB4QURGRSwgMHgxQkQ0LAorICAgIDB4OEVBMiwgMHhBRUExLCAweEFFRkUsIDB4MUMzMiwgMHg4RUEyLCAweEFGQTEsIDB4QUZGRSwgMHgxQzkwLAorICAgIDB4OEVBMiwgMHhCMEExLCAweEIwRkUsIDB4MUNFRSwgMHg4RUEyLCAweEIxQTEsIDB4QjFGRSwgMHgxRDRDLAorICAgIDB4OEVBMiwgMHhCMkExLCAweEIyRkUsIDB4MURBQSwgMHg4RUEyLCAweEIzQTEsIDB4QjNGRSwgMHgxRTA4LAorICAgIDB4OEVBMiwgMHhCNEExLCAweEI0RkUsIDB4MUU2NiwgMHg4RUEyLCAweEI1QTEsIDB4QjVGRSwgMHgxRUM0LAorICAgIDB4OEVBMiwgMHhCNkExLCAweEI2RkUsIDB4MUYyMiwgMHg4RUEyLCAweEI3QTEsIDB4QjdGRSwgMHgxRjgwLAorICAgIDB4OEVBMiwgMHhCOEExLCAweEI4RkUsIDB4MUZERSwgMHg4RUEyLCAweEI5QTEsIDB4QjlGRSwgMHgyMDNDLAorICAgIDB4OEVBMiwgMHhCQUExLCAweEJBRkUsIDB4MjA5QSwgMHg4RUEyLCAweEJCQTEsIDB4QkJGRSwgMHgyMEY4LAorICAgIDB4OEVBMiwgMHhCQ0ExLCAweEJDRkUsIDB4MjE1NiwgMHg4RUEyLCAweEJEQTEsIDB4QkRGRSwgMHgyMUI0LAorICAgIDB4OEVBMiwgMHhCRUExLCAweEJFRkUsIDB4MjIxMiwgMHg4RUEyLCAweEJGQTEsIDB4QkZGRSwgMHgyMjcwLAorICAgIDB4OEVBMiwgMHhDMEExLCAweEMwRkUsIDB4MjJDRSwgMHg4RUEyLCAweEMxQTEsIDB4QzFGRSwgMHgyMzJDLAorICAgIDB4OEVBMiwgMHhDMkExLCAweEMyRkUsIDB4MjM4QSwgMHg4RUEyLCAweEMzQTEsIDB4QzNGRSwgMHgyM0U4LAorICAgIDB4OEVBMiwgMHhDNEExLCAweEM0RkUsIDB4MjQ0NiwgMHg4RUEyLCAweEM1QTEsIDB4QzVGRSwgMHgyNEE0LAorICAgIDB4OEVBMiwgMHhDNkExLCAweEM2RkUsIDB4MjUwMiwgMHg4RUEyLCAweEM3QTEsIDB4QzdGRSwgMHgyNTYwLAorICAgIDB4OEVBMiwgMHhDOEExLCAweEM4RkUsIDB4MjVCRSwgMHg4RUEyLCAweEM5QTEsIDB4QzlGRSwgMHgyNjFDLAorICAgIDB4OEVBMiwgMHhDQUExLCAweENBRkUsIDB4MjY3QSwgMHg4RUEyLCAweENCQTEsIDB4Q0JGRSwgMHgyNkQ4LAorICAgIDB4OEVBMiwgMHhDQ0ExLCAweENDRkUsIDB4MjczNiwgMHg4RUEyLCAweENEQTEsIDB4Q0RGRSwgMHgyNzk0LAorICAgIDB4OEVBMiwgMHhDRUExLCAweENFRkUsIDB4MjdGMiwgMHg4RUEyLCAweENGQTEsIDB4Q0ZGRSwgMHgyODUwLAorICAgIDB4OEVBMiwgMHhEMEExLCAweEQwRkUsIDB4MjhBRSwgMHg4RUEyLCAweEQxQTEsIDB4RDFGRSwgMHgyOTBDLAorICAgIDB4OEVBMiwgMHhEMkExLCAweEQyRkUsIDB4Mjk2QSwgMHg4RUEyLCAweEQzQTEsIDB4RDNGRSwgMHgyOUM4LAorICAgIDB4OEVBMiwgMHhENEExLCAweEQ0RkUsIDB4MkEyNiwgMHg4RUEyLCAweEQ1QTEsIDB4RDVGRSwgMHgyQTg0LAorICAgIDB4OEVBMiwgMHhENkExLCAweEQ2RkUsIDB4MkFFMiwgMHg4RUEyLCAweEQ3QTEsIDB4RDdGRSwgMHgyQjQwLAorICAgIDB4OEVBMiwgMHhEOEExLCAweEQ4RkUsIDB4MkI5RSwgMHg4RUEyLCAweEQ5QTEsIDB4RDlGRSwgMHgyQkZDLAorICAgIDB4OEVBMiwgMHhEQUExLCAweERBRkUsIDB4MkM1QSwgMHg4RUEyLCAweERCQTEsIDB4REJGRSwgMHgyQ0I4LAorICAgIDB4OEVBMiwgMHhEQ0ExLCAweERDRkUsIDB4MkQxNiwgMHg4RUEyLCAweEREQTEsIDB4RERGRSwgMHgyRDc0LAorICAgIDB4OEVBMiwgMHhERUExLCAweERFRkUsIDB4MkREMiwgMHg4RUEyLCAweERGQTEsIDB4REZGRSwgMHgyRTMwLAorICAgIDB4OEVBMiwgMHhFMEExLCAweEUwRkUsIDB4MkU4RSwgMHg4RUEyLCAweEUxQTEsIDB4RTFGRSwgMHgyRUVDLAorICAgIDB4OEVBMiwgMHhFMkExLCAweEUyRkUsIDB4MkY0QSwgMHg4RUEyLCAweEUzQTEsIDB4RTNGRSwgMHgyRkE4LAorICAgIDB4OEVBMiwgMHhFNEExLCAweEU0RkUsIDB4MzAwNiwgMHg4RUEyLCAweEU1QTEsIDB4RTVGRSwgMHgzMDY0LAorICAgIDB4OEVBMiwgMHhFNkExLCAweEU2RkUsIDB4MzBDMiwgMHg4RUEyLCAweEU3QTEsIDB4RTdGRSwgMHgzMTIwLAorICAgIDB4OEVBMiwgMHhFOEExLCAweEU4RkUsIDB4MzE3RSwgMHg4RUEyLCAweEU5QTEsIDB4RTlGRSwgMHgzMURDLAorICAgIDB4OEVBMiwgMHhFQUExLCAweEVBRkUsIDB4MzIzQSwgMHg4RUEyLCAweEVCQTEsIDB4RUJGRSwgMHgzMjk4LAorICAgIDB4OEVBMiwgMHhFQ0ExLCAweEVDRkUsIDB4MzJGNiwgMHg4RUEyLCAweEVEQTEsIDB4RURGRSwgMHgzMzU0LAorICAgIDB4OEVBMiwgMHhFRUExLCAweEVFRkUsIDB4MzNCMiwgMHg4RUEyLCAweEVGQTEsIDB4RUZGRSwgMHgzNDEwLAorICAgIDB4OEVBMiwgMHhGMEExLCAweEYwRkUsIDB4MzQ2RSwgMHg4RUEyLCAweEYxQTEsIDB4RjFGRSwgMHgzNENDLAorICAgIDB4OEVBMiwgMHhGMkExLCAweEYyQzQsIDB4MzUyQSwKK307CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvQ05TMS9FVGVuLUI1LUhfMC5jcHAgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvQ05TMS9FVGVuLUI1LUhfMC5jcHAKaW5kZXggZjFjOTQ4My4uMmUwOWE1MCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0NOUzEvRVRlbi1CNS1IXzAuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9DTlMxL0VUZW4tQjUtSF8wLmNwcApAQCAtMSw5MyArMSw5MyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0VUZW5fQjVfSF8wWzI1NCAqIDNdID0gew0KLSAgICAweDAwMjAsIDB4MDA3RSwgMHgzNTUwLCAweEExNDAsIDB4QTE1OCwgMHgwMDYzLCAweEExNTksIDB4QTE1QywgMHgzNUFGLA0KLSAgICAweEExNUQsIDB4QTE3RSwgMHgwMDgwLCAweEExQTEsIDB4QTFGNSwgMHgwMEEyLCAweEExRjYsIDB4QTFGNiwgMHgwMEY4LA0KLSAgICAweEExRjcsIDB4QTFGNywgMHgwMEY3LCAweEExRjgsIDB4QTFGRSwgMHgwMEY5LCAweEEyNDAsIDB4QTI3RSwgMHgwMTAwLA0KLSAgICAweEEyQTEsIDB4QTJGRSwgMHgwMTNGLCAweEEzNDAsIDB4QTM3RSwgMHgwMTlELCAweEEzQTEsIDB4QTNCQiwgMHgwMURDLA0KLSAgICAweEEzQkQsIDB4QTNCRiwgMHgwMUY3LCAweEE0NDAsIDB4QTQ3RSwgMHgwMjUzLCAweEE0QTEsIDB4QTRGRSwgMHgwMjkyLA0KLSAgICAweEE1NDAsIDB4QTU3RSwgMHgwMkYwLCAweEE1QTEsIDB4QTVGRSwgMHgwMzJGLCAweEE2NDAsIDB4QTY3RSwgMHgwMzhELA0KLSAgICAweEE2QTEsIDB4QTZGRSwgMHgwM0NDLCAweEE3NDAsIDB4QTc3RSwgMHgwNDJBLCAweEE3QTEsIDB4QTdGRSwgMHgwNDY5LA0KLSAgICAweEE4NDAsIDB4QTg3RSwgMHgwNEM3LCAweEE4QTEsIDB4QThGRSwgMHgwNTA2LCAweEE5NDAsIDB4QTk3RSwgMHgwNTY0LA0KLSAgICAweEE5QTEsIDB4QTlGRSwgMHgwNUEzLCAweEFBNDAsIDB4QUE3RSwgMHgwNjAxLCAweEFBQTEsIDB4QUFGRSwgMHgwNjQwLA0KLSAgICAweEFCNDAsIDB4QUI3RSwgMHgwNjlFLCAweEFCQTEsIDB4QUJGRSwgMHgwNkRELCAweEFDNDAsIDB4QUM3RSwgMHgwNzNCLA0KLSAgICAweEFDQTEsIDB4QUNGRCwgMHgwNzdBLCAweEFDRkUsIDB4QUNGRSwgMHgwOTdGLCAweEFENDAsIDB4QUQ3RSwgMHgwN0Q3LA0KLSAgICAweEFEQTEsIDB4QURGRSwgMHgwODE2LCAweEFFNDAsIDB4QUU3RSwgMHgwODc0LCAweEFFQTEsIDB4QUVGRSwgMHgwOEIzLA0KLSAgICAweEFGNDAsIDB4QUY3RSwgMHgwOTExLCAweEFGQTEsIDB4QUZDRiwgMHgwOTUwLCAweEFGRDAsIDB4QUZGRSwgMHgwOTgwLA0KLSAgICAweEIwNDAsIDB4QjA3RSwgMHgwOUFGLCAweEIwQTEsIDB4QjBGRSwgMHgwOUVFLCAweEIxNDAsIDB4QjE3RSwgMHgwQTRDLA0KLSAgICAweEIxQTEsIDB4QjFGRSwgMHgwQThCLCAweEIyNDAsIDB4QjI3RSwgMHgwQUU5LCAweEIyQTEsIDB4QjJGRSwgMHgwQjI4LA0KLSAgICAweEIzNDAsIDB4QjM3RSwgMHgwQjg2LCAweEIzQTEsIDB4QjNGRSwgMHgwQkM1LCAweEI0NDAsIDB4QjQ3RSwgMHgwQzIzLA0KLSAgICAweEI0QTEsIDB4QjRGRSwgMHgwQzYyLCAweEI1NDAsIDB4QjU3RSwgMHgwQ0MwLCAweEI1QTEsIDB4QjVGRSwgMHgwQ0ZGLA0KLSAgICAweEI2NDAsIDB4QjY3RSwgMHgwRDVELCAweEI2QTEsIDB4QjZGRSwgMHgwRDlDLCAweEI3NDAsIDB4Qjc3RSwgMHgwREZBLA0KLSAgICAweEI3QTEsIDB4QjdGRSwgMHgwRTM5LCAweEI4NDAsIDB4Qjg3RSwgMHgwRTk3LCAweEI4QTEsIDB4QjhGRSwgMHgwRUQ2LA0KLSAgICAweEI5NDAsIDB4Qjk3RSwgMHgwRjM0LCAweEI5QTEsIDB4QjlGRSwgMHgwRjczLCAweEJBNDAsIDB4QkE3RSwgMHgwRkQxLA0KLSAgICAweEJBQTEsIDB4QkFGRSwgMHgxMDEwLCAweEJCNDAsIDB4QkI3RSwgMHgxMDZFLCAweEJCQTEsIDB4QkJDNywgMHgxMEFELA0KLSAgICAweEJCQzgsIDB4QkJGRSwgMHgxMEQ1LCAweEJDNDAsIDB4QkM3RSwgMHgxMTBDLCAweEJDQTEsIDB4QkNGRSwgMHgxMTRCLA0KLSAgICAweEJENDAsIDB4QkQ3RSwgMHgxMUE5LCAweEJEQTEsIDB4QkRGRSwgMHgxMUU4LCAweEJFNDAsIDB4QkU1MSwgMHgxMjQ2LA0KLSAgICAweEJFNTIsIDB4QkU1MiwgMHgxMEQ0LCAweEJFNTMsIDB4QkU3RSwgMHgxMjU4LCAweEJFQTEsIDB4QkVGRSwgMHgxMjg0LA0KLSAgICAweEJGNDAsIDB4QkY3RSwgMHgxMkUyLCAweEJGQTEsIDB4QkZGRSwgMHgxMzIxLCAweEMwNDAsIDB4QzA3RSwgMHgxMzdGLA0KLSAgICAweEMwQTEsIDB4QzBGRSwgMHgxM0JFLCAweEMxNDAsIDB4QzE3RSwgMHgxNDFDLCAweEMxQTEsIDB4QzFBQSwgMHgxNDVCLA0KLSAgICAweEMxQUIsIDB4QzFGRSwgMHgxNDY2LCAweEMyNDAsIDB4QzI3RSwgMHgxNEJBLCAweEMyQTEsIDB4QzJDQSwgMHgxNEY5LA0KLSAgICAweEMyQ0IsIDB4QzJDQiwgMHgxNDY1LCAweEMyQ0MsIDB4QzJGRSwgMHgxNTIzLCAweEMzNDAsIDB4QzM2MCwgMHgxNTU2LA0KLSAgICAweEMzNjEsIDB4QzM3RSwgMHgxNTc4LCAweEMzQTEsIDB4QzNCOCwgMHgxNTk2LCAweEMzQjksIDB4QzNCOSwgMHgxNUFGLA0KLSAgICAweEMzQkEsIDB4QzNCQSwgMHgxNUFFLCAweEMzQkIsIDB4QzNGRSwgMHgxNUIwLCAweEM0NDAsIDB4QzQ1NSwgMHgxNUY0LA0KLSAgICAweEM0NTYsIDB4QzQ1NiwgMHgxNTc3LCAweEM0NTcsIDB4QzQ3RSwgMHgxNjBBLCAweEM0QTEsIDB4QzRGRSwgMHgxNjMyLA0KLSAgICAweEM1NDAsIDB4QzU3RSwgMHgxNjkwLCAweEM1QTEsIDB4QzVGRSwgMHgxNkNGLCAweEM2NDAsIDB4QzY3RSwgMHgxNzJELA0KLSAgICAweEM2QTEsIDB4QzZCRSwgMHgwMUZBLCAweEM2QkYsIDB4QzZENywgMHgwMjE5LCAweEM2RDgsIDB4QzZERSwgMHgzNUIzLA0KLSAgICAweEM2REYsIDB4QzZERiwgMHgxNzk0LCAweEM2RTAsIDB4QzZGRSwgMHgzNUJBLCAweEM3NDAsIDB4Qzc3RSwgMHgzNUQ5LA0KLSAgICAweEM3QTEsIDB4QzdGRSwgMHgzNjE4LCAweEM4NDAsIDB4Qzg3RSwgMHgzNjc2LCAweEM4QTEsIDB4QzhEMywgMHgzNkI1LA0KLSAgICAweEM5NDAsIDB4Qzk0OSwgMHgxNzZDLCAweEM5NEEsIDB4Qzk0QSwgMHgwMjc0LCAweEM5NEIsIDB4Qzk2QiwgMHgxNzc2LA0KLSAgICAweEM5NkMsIDB4Qzk3RSwgMHgxNzk4LCAweEM5QTEsIDB4QzlCRCwgMHgxN0FCLCAweEM5QkUsIDB4QzlCRSwgMHgxNzk3LA0KLSAgICAweEM5QkYsIDB4QzlFQywgMHgxN0M4LCAweEM5RUQsIDB4QzlGRSwgMHgxN0Y3LCAweENBNDAsIDB4Q0E3RSwgMHgxODA5LA0KLSAgICAweENBQTEsIDB4Q0FGNiwgMHgxODQ4LCAweENBRjcsIDB4Q0FGNywgMHgxN0Y2LCAweENBRjgsIDB4Q0FGRSwgMHgxODlFLA0KLSAgICAweENCNDAsIDB4Q0I3RSwgMHgxOEE1LCAweENCQTEsIDB4Q0JGRSwgMHgxOEU0LCAweENDNDAsIDB4Q0M3RSwgMHgxOTQyLA0KLSAgICAweENDQTEsIDB4Q0NGRSwgMHgxOTgxLCAweENENDAsIDB4Q0Q3RSwgMHgxOURGLCAweENEQTEsIDB4Q0RGRSwgMHgxQTFFLA0KLSAgICAweENFNDAsIDB4Q0U3RSwgMHgxQTdDLCAweENFQTEsIDB4Q0VGRSwgMHgxQUJCLCAweENGNDAsIDB4Q0Y3RSwgMHgxQjE5LA0KLSAgICAweENGQTEsIDB4Q0ZGRSwgMHgxQjU4LCAweEQwNDAsIDB4RDA3RSwgMHgxQkI2LCAweEQwQTEsIDB4RDBGRSwgMHgxQkY1LA0KLSAgICAweEQxNDAsIDB4RDE3RSwgMHgxQzUzLCAweEQxQTEsIDB4RDFGRSwgMHgxQzkyLCAweEQyNDAsIDB4RDI3RSwgMHgxQ0YwLA0KLSAgICAweEQyQTEsIDB4RDJGRSwgMHgxRDJGLCAweEQzNDAsIDB4RDM3RSwgMHgxRDhELCAweEQzQTEsIDB4RDNGRSwgMHgxRENDLA0KLSAgICAweEQ0NDAsIDB4RDQ3RSwgMHgxRTJBLCAweEQ0QTEsIDB4RDRGRSwgMHgxRTY5LCAweEQ1NDAsIDB4RDU3RSwgMHgxRUM3LA0KLSAgICAweEQ1QTEsIDB4RDVGRSwgMHgxRjA2LCAweEQ2NDAsIDB4RDY3RSwgMHgxRjY0LCAweEQ2QTEsIDB4RDZDQiwgMHgxRkEzLA0KLSAgICAweEQ2Q0MsIDB4RDZDQywgMHgyMjU0LCAweEQ2Q0QsIDB4RDZGRSwgMHgxRkNGLCAweEQ3NDAsIDB4RDc3OSwgMHgyMDAxLA0KLSAgICAweEQ3N0EsIDB4RDc3QSwgMHgyMkI5LCAweEQ3N0IsIDB4RDc3RSwgMHgyMDNCLCAweEQ3QTEsIDB4RDdGRSwgMHgyMDNGLA0KLSAgICAweEQ4NDAsIDB4RDg3RSwgMHgyMDlELCAweEQ4QTEsIDB4RDhGRSwgMHgyMERDLCAweEQ5NDAsIDB4RDk3RSwgMHgyMTNBLA0KLSAgICAweEQ5QTEsIDB4RDlGRSwgMHgyMTc5LCAweERBNDAsIDB4REE3RSwgMHgyMUQ3LCAweERBQTEsIDB4REFERSwgMHgyMjE2LA0KLSAgICAweERBREYsIDB4REFERiwgMHgxRkNFLCAweERBRTAsIDB4REFGRSwgMHgyMjU1LCAweERCNDAsIDB4REI3RSwgMHgyMjc0LA0KLSAgICAweERCQTEsIDB4REJBNiwgMHgyMkIzLCAweERCQTcsIDB4REJGRSwgMHgyMkJBLCAweERDNDAsIDB4REM3RSwgMHgyMzEyLA0KLSAgICAweERDQTEsIDB4RENGRSwgMHgyMzUxLCAweERENDAsIDB4REQ3RSwgMHgyM0FGLCAweEREQTEsIDB4RERGQiwgMHgyM0VFLA0KLSAgICAweERERkMsIDB4RERGQywgMHgyMzgxLCAweERERkQsIDB4RERGRSwgMHgyNDQ5LCAweERFNDAsIDB4REU3RSwgMHgyNDRCLA0KLSAgICAweERFQTEsIDB4REVGRSwgMHgyNDhBLCAweERGNDAsIDB4REY3RSwgMHgyNEU4LCAweERGQTEsIDB4REZGRSwgMHgyNTI3LA0KLSAgICAweEUwNDAsIDB4RTA3RSwgMHgyNTg1LCAweEUwQTEsIDB4RTBGRSwgMHgyNUM0LCAweEUxNDAsIDB4RTE3RSwgMHgyNjIyLA0KLSAgICAweEUxQTEsIDB4RTFGRSwgMHgyNjYxLCAweEUyNDAsIDB4RTI3RSwgMHgyNkJGLCAweEUyQTEsIDB4RTJGRSwgMHgyNkZFLA0KLSAgICAweEUzNDAsIDB4RTM3RSwgMHgyNzVDLCAweEUzQTEsIDB4RTNGRSwgMHgyNzlCLCAweEU0NDAsIDB4RTQ3RSwgMHgyN0Y5LA0KLSAgICAweEU0QTEsIDB4RTRGRSwgMHgyODM4LCAweEU1NDAsIDB4RTU3RSwgMHgyODk2LCAweEU1QTEsIDB4RTVGRSwgMHgyOEQ1LA0KLSAgICAweEU2NDAsIDB4RTY3RSwgMHgyOTMzLCAweEU2QTEsIDB4RTZGRSwgMHgyOTcyLCAweEU3NDAsIDB4RTc3RSwgMHgyOUQwLA0KLSAgICAweEU3QTEsIDB4RTdGRSwgMHgyQTBGLCAweEU4NDAsIDB4RTg3RSwgMHgyQTZELCAweEU4QTEsIDB4RThBMiwgMHgyQUFDLA0KLSAgICAweEU4QTMsIDB4RThGRSwgMHgyQUFGLCAweEU5NDAsIDB4RTk3NSwgMHgyQjBCLCAweEU5NzYsIDB4RTk3RSwgMHgyQjQyLA0KLSAgICAweEU5QTEsIDB4RTlGRSwgMHgyQjRCLCAweEVBNDAsIDB4RUE3RSwgMHgyQkE5LCAweEVBQTEsIDB4RUFGRSwgMHgyQkU4LA0KLSAgICAweEVCNDAsIDB4RUI1QSwgMHgyQzQ2LCAweEVCNUIsIDB4RUI3RSwgMHgyQzYyLCAweEVCQTEsIDB4RUJGMCwgMHgyQzg2LA0KLSAgICAweEVCRjEsIDB4RUJGMSwgMHgyQUFFLCAweEVCRjIsIDB4RUJGRSwgMHgyQ0Q2LCAweEVDNDAsIDB4RUM3RSwgMHgyQ0UzLA0KLSAgICAweEVDQTEsIDB4RUNERCwgMHgyRDIyLCAweEVDREUsIDB4RUNERSwgMHgyQjQxLCAweEVDREYsIDB4RUNGRSwgMHgyRDVGLA0KLSAgICAweEVENDAsIDB4RUQ3RSwgMHgyRDdGLCAweEVEQTEsIDB4RURBOSwgMHgyREJFLCAweEVEQUEsIDB4RURGRSwgMHgyREM4LA0KLSAgICAweEVFNDAsIDB4RUU3RSwgMHgyRTFELCAweEVFQTEsIDB4RUVFQSwgMHgyRTVDLCAweEVFRUIsIDB4RUVFQiwgMHgzMDE0LA0KLSAgICAweEVFRUMsIDB4RUVGRSwgMHgyRUE2LCAweEVGNDAsIDB4RUY3RSwgMHgyRUI5LCAweEVGQTEsIDB4RUZGRSwgMHgyRUY4LA0KLSAgICAweEYwNDAsIDB4RjA1NSwgMHgyRjU2LCAweEYwNTYsIDB4RjA1NiwgMHgyREM3LCAweEYwNTcsIDB4RjA3RSwgMHgyRjZDLA0KLSAgICAweEYwQTEsIDB4RjBDQSwgMHgyRjk0LCAweEYwQ0IsIDB4RjBDQiwgMHgyQzYxLCAweEYwQ0MsIDB4RjBGRSwgMHgyRkJFLA0KLSAgICAweEYxNDAsIDB4RjE2MiwgMHgyRkYxLCAweEYxNjMsIDB4RjE2QSwgMHgzMDE1LCAweEYxNkIsIDB4RjE2QiwgMHgzMTYwLA0KLSAgICAweEYxNkMsIDB4RjE3RSwgMHgzMDFELCAweEYxQTEsIDB4RjFGRSwgMHgzMDMwLCAweEYyNDAsIDB4RjI2NywgMHgzMDhFLA0KLSAgICAweEYyNjgsIDB4RjI2OCwgMHgzMUVGLCAweEYyNjksIDB4RjI3RSwgMHgzMEI2LCAweEYyQTEsIDB4RjJDMiwgMHgzMENDLA0KLSAgICAweEYyQzMsIDB4RjJGRSwgMHgzMEVGLCAweEYzNDAsIDB4RjM3NCwgMHgzMTJCLCAweEYzNzUsIDB4RjM3RSwgMHgzMTYxLA0KLSAgICAweEYzQTEsIDB4RjNGRSwgMHgzMTZCLCAweEY0NDAsIDB4RjQ2NSwgMHgzMUM5LCAweEY0NjYsIDB4RjQ3RSwgMHgzMUYwLA0KLSAgICAweEY0QTEsIDB4RjRCNCwgMHgzMjA5LCAweEY0QjUsIDB4RjRCNSwgMHgzMEVFLCAweEY0QjYsIDB4RjRGQywgMHgzMjFELA0KLSAgICAweEY0RkQsIDB4RjRGRSwgMHgzMjY1LCAweEY1NDAsIDB4RjU3RSwgMHgzMjY3LCAweEY1QTEsIDB4RjVGRSwgMHgzMkE2LA0KLSAgICAweEY2NDAsIDB4RjY2MiwgMHgzMzA0LCAweEY2NjMsIDB4RjY2MywgMHgzMjY0LCAweEY2NjQsIDB4RjY3RSwgMHgzMzI3LA0KLSAgICAweEY2QTEsIDB4RjZGRSwgMHgzMzQyLCAweEY3NDAsIDB4Rjc3RSwgMHgzM0EwLCAweEY3QTEsIDB4RjdGRSwgMHgzM0RGLA0KLSAgICAweEY4NDAsIDB4Rjg3RSwgMHgzNDNELCAweEY4QTEsIDB4RjhGRSwgMHgzNDdDLCAweEY5NDAsIDB4Rjk3NiwgMHgzNERBLA0KLSAgICAweEY5NzcsIDB4Rjk3RSwgMHgzNTEyLCAweEY5QTEsIDB4RjlDMywgMHgzNTFBLCAweEY5QzQsIDB4RjlDNCwgMHgzNTExLA0KLSAgICAweEY5QzUsIDB4RjlDNSwgMHgzNTNELCAweEY5QzYsIDB4RjlDNiwgMHgzNTQ5LCAweEY5QzcsIDB4RjlEMSwgMHgzNTNFLA0KLSAgICAweEY5RDIsIDB4RjlENSwgMHgzNTRBLCAweEY5RDYsIDB4RjlGRSwgMHgzNkU4LA0KLX07DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0VUZW5fQjVfSF8wWzI1NCAqIDNdID0geworICAgIDB4MDAyMCwgMHgwMDdFLCAweDM1NTAsIDB4QTE0MCwgMHhBMTU4LCAweDAwNjMsIDB4QTE1OSwgMHhBMTVDLCAweDM1QUYsCisgICAgMHhBMTVELCAweEExN0UsIDB4MDA4MCwgMHhBMUExLCAweEExRjUsIDB4MDBBMiwgMHhBMUY2LCAweEExRjYsIDB4MDBGOCwKKyAgICAweEExRjcsIDB4QTFGNywgMHgwMEY3LCAweEExRjgsIDB4QTFGRSwgMHgwMEY5LCAweEEyNDAsIDB4QTI3RSwgMHgwMTAwLAorICAgIDB4QTJBMSwgMHhBMkZFLCAweDAxM0YsIDB4QTM0MCwgMHhBMzdFLCAweDAxOUQsIDB4QTNBMSwgMHhBM0JCLCAweDAxREMsCisgICAgMHhBM0JELCAweEEzQkYsIDB4MDFGNywgMHhBNDQwLCAweEE0N0UsIDB4MDI1MywgMHhBNEExLCAweEE0RkUsIDB4MDI5MiwKKyAgICAweEE1NDAsIDB4QTU3RSwgMHgwMkYwLCAweEE1QTEsIDB4QTVGRSwgMHgwMzJGLCAweEE2NDAsIDB4QTY3RSwgMHgwMzhELAorICAgIDB4QTZBMSwgMHhBNkZFLCAweDAzQ0MsIDB4QTc0MCwgMHhBNzdFLCAweDA0MkEsIDB4QTdBMSwgMHhBN0ZFLCAweDA0NjksCisgICAgMHhBODQwLCAweEE4N0UsIDB4MDRDNywgMHhBOEExLCAweEE4RkUsIDB4MDUwNiwgMHhBOTQwLCAweEE5N0UsIDB4MDU2NCwKKyAgICAweEE5QTEsIDB4QTlGRSwgMHgwNUEzLCAweEFBNDAsIDB4QUE3RSwgMHgwNjAxLCAweEFBQTEsIDB4QUFGRSwgMHgwNjQwLAorICAgIDB4QUI0MCwgMHhBQjdFLCAweDA2OUUsIDB4QUJBMSwgMHhBQkZFLCAweDA2REQsIDB4QUM0MCwgMHhBQzdFLCAweDA3M0IsCisgICAgMHhBQ0ExLCAweEFDRkQsIDB4MDc3QSwgMHhBQ0ZFLCAweEFDRkUsIDB4MDk3RiwgMHhBRDQwLCAweEFEN0UsIDB4MDdENywKKyAgICAweEFEQTEsIDB4QURGRSwgMHgwODE2LCAweEFFNDAsIDB4QUU3RSwgMHgwODc0LCAweEFFQTEsIDB4QUVGRSwgMHgwOEIzLAorICAgIDB4QUY0MCwgMHhBRjdFLCAweDA5MTEsIDB4QUZBMSwgMHhBRkNGLCAweDA5NTAsIDB4QUZEMCwgMHhBRkZFLCAweDA5ODAsCisgICAgMHhCMDQwLCAweEIwN0UsIDB4MDlBRiwgMHhCMEExLCAweEIwRkUsIDB4MDlFRSwgMHhCMTQwLCAweEIxN0UsIDB4MEE0QywKKyAgICAweEIxQTEsIDB4QjFGRSwgMHgwQThCLCAweEIyNDAsIDB4QjI3RSwgMHgwQUU5LCAweEIyQTEsIDB4QjJGRSwgMHgwQjI4LAorICAgIDB4QjM0MCwgMHhCMzdFLCAweDBCODYsIDB4QjNBMSwgMHhCM0ZFLCAweDBCQzUsIDB4QjQ0MCwgMHhCNDdFLCAweDBDMjMsCisgICAgMHhCNEExLCAweEI0RkUsIDB4MEM2MiwgMHhCNTQwLCAweEI1N0UsIDB4MENDMCwgMHhCNUExLCAweEI1RkUsIDB4MENGRiwKKyAgICAweEI2NDAsIDB4QjY3RSwgMHgwRDVELCAweEI2QTEsIDB4QjZGRSwgMHgwRDlDLCAweEI3NDAsIDB4Qjc3RSwgMHgwREZBLAorICAgIDB4QjdBMSwgMHhCN0ZFLCAweDBFMzksIDB4Qjg0MCwgMHhCODdFLCAweDBFOTcsIDB4QjhBMSwgMHhCOEZFLCAweDBFRDYsCisgICAgMHhCOTQwLCAweEI5N0UsIDB4MEYzNCwgMHhCOUExLCAweEI5RkUsIDB4MEY3MywgMHhCQTQwLCAweEJBN0UsIDB4MEZEMSwKKyAgICAweEJBQTEsIDB4QkFGRSwgMHgxMDEwLCAweEJCNDAsIDB4QkI3RSwgMHgxMDZFLCAweEJCQTEsIDB4QkJDNywgMHgxMEFELAorICAgIDB4QkJDOCwgMHhCQkZFLCAweDEwRDUsIDB4QkM0MCwgMHhCQzdFLCAweDExMEMsIDB4QkNBMSwgMHhCQ0ZFLCAweDExNEIsCisgICAgMHhCRDQwLCAweEJEN0UsIDB4MTFBOSwgMHhCREExLCAweEJERkUsIDB4MTFFOCwgMHhCRTQwLCAweEJFNTEsIDB4MTI0NiwKKyAgICAweEJFNTIsIDB4QkU1MiwgMHgxMEQ0LCAweEJFNTMsIDB4QkU3RSwgMHgxMjU4LCAweEJFQTEsIDB4QkVGRSwgMHgxMjg0LAorICAgIDB4QkY0MCwgMHhCRjdFLCAweDEyRTIsIDB4QkZBMSwgMHhCRkZFLCAweDEzMjEsIDB4QzA0MCwgMHhDMDdFLCAweDEzN0YsCisgICAgMHhDMEExLCAweEMwRkUsIDB4MTNCRSwgMHhDMTQwLCAweEMxN0UsIDB4MTQxQywgMHhDMUExLCAweEMxQUEsIDB4MTQ1QiwKKyAgICAweEMxQUIsIDB4QzFGRSwgMHgxNDY2LCAweEMyNDAsIDB4QzI3RSwgMHgxNEJBLCAweEMyQTEsIDB4QzJDQSwgMHgxNEY5LAorICAgIDB4QzJDQiwgMHhDMkNCLCAweDE0NjUsIDB4QzJDQywgMHhDMkZFLCAweDE1MjMsIDB4QzM0MCwgMHhDMzYwLCAweDE1NTYsCisgICAgMHhDMzYxLCAweEMzN0UsIDB4MTU3OCwgMHhDM0ExLCAweEMzQjgsIDB4MTU5NiwgMHhDM0I5LCAweEMzQjksIDB4MTVBRiwKKyAgICAweEMzQkEsIDB4QzNCQSwgMHgxNUFFLCAweEMzQkIsIDB4QzNGRSwgMHgxNUIwLCAweEM0NDAsIDB4QzQ1NSwgMHgxNUY0LAorICAgIDB4QzQ1NiwgMHhDNDU2LCAweDE1NzcsIDB4QzQ1NywgMHhDNDdFLCAweDE2MEEsIDB4QzRBMSwgMHhDNEZFLCAweDE2MzIsCisgICAgMHhDNTQwLCAweEM1N0UsIDB4MTY5MCwgMHhDNUExLCAweEM1RkUsIDB4MTZDRiwgMHhDNjQwLCAweEM2N0UsIDB4MTcyRCwKKyAgICAweEM2QTEsIDB4QzZCRSwgMHgwMUZBLCAweEM2QkYsIDB4QzZENywgMHgwMjE5LCAweEM2RDgsIDB4QzZERSwgMHgzNUIzLAorICAgIDB4QzZERiwgMHhDNkRGLCAweDE3OTQsIDB4QzZFMCwgMHhDNkZFLCAweDM1QkEsIDB4Qzc0MCwgMHhDNzdFLCAweDM1RDksCisgICAgMHhDN0ExLCAweEM3RkUsIDB4MzYxOCwgMHhDODQwLCAweEM4N0UsIDB4MzY3NiwgMHhDOEExLCAweEM4RDMsIDB4MzZCNSwKKyAgICAweEM5NDAsIDB4Qzk0OSwgMHgxNzZDLCAweEM5NEEsIDB4Qzk0QSwgMHgwMjc0LCAweEM5NEIsIDB4Qzk2QiwgMHgxNzc2LAorICAgIDB4Qzk2QywgMHhDOTdFLCAweDE3OTgsIDB4QzlBMSwgMHhDOUJELCAweDE3QUIsIDB4QzlCRSwgMHhDOUJFLCAweDE3OTcsCisgICAgMHhDOUJGLCAweEM5RUMsIDB4MTdDOCwgMHhDOUVELCAweEM5RkUsIDB4MTdGNywgMHhDQTQwLCAweENBN0UsIDB4MTgwOSwKKyAgICAweENBQTEsIDB4Q0FGNiwgMHgxODQ4LCAweENBRjcsIDB4Q0FGNywgMHgxN0Y2LCAweENBRjgsIDB4Q0FGRSwgMHgxODlFLAorICAgIDB4Q0I0MCwgMHhDQjdFLCAweDE4QTUsIDB4Q0JBMSwgMHhDQkZFLCAweDE4RTQsIDB4Q0M0MCwgMHhDQzdFLCAweDE5NDIsCisgICAgMHhDQ0ExLCAweENDRkUsIDB4MTk4MSwgMHhDRDQwLCAweENEN0UsIDB4MTlERiwgMHhDREExLCAweENERkUsIDB4MUExRSwKKyAgICAweENFNDAsIDB4Q0U3RSwgMHgxQTdDLCAweENFQTEsIDB4Q0VGRSwgMHgxQUJCLCAweENGNDAsIDB4Q0Y3RSwgMHgxQjE5LAorICAgIDB4Q0ZBMSwgMHhDRkZFLCAweDFCNTgsIDB4RDA0MCwgMHhEMDdFLCAweDFCQjYsIDB4RDBBMSwgMHhEMEZFLCAweDFCRjUsCisgICAgMHhEMTQwLCAweEQxN0UsIDB4MUM1MywgMHhEMUExLCAweEQxRkUsIDB4MUM5MiwgMHhEMjQwLCAweEQyN0UsIDB4MUNGMCwKKyAgICAweEQyQTEsIDB4RDJGRSwgMHgxRDJGLCAweEQzNDAsIDB4RDM3RSwgMHgxRDhELCAweEQzQTEsIDB4RDNGRSwgMHgxRENDLAorICAgIDB4RDQ0MCwgMHhENDdFLCAweDFFMkEsIDB4RDRBMSwgMHhENEZFLCAweDFFNjksIDB4RDU0MCwgMHhENTdFLCAweDFFQzcsCisgICAgMHhENUExLCAweEQ1RkUsIDB4MUYwNiwgMHhENjQwLCAweEQ2N0UsIDB4MUY2NCwgMHhENkExLCAweEQ2Q0IsIDB4MUZBMywKKyAgICAweEQ2Q0MsIDB4RDZDQywgMHgyMjU0LCAweEQ2Q0QsIDB4RDZGRSwgMHgxRkNGLCAweEQ3NDAsIDB4RDc3OSwgMHgyMDAxLAorICAgIDB4RDc3QSwgMHhENzdBLCAweDIyQjksIDB4RDc3QiwgMHhENzdFLCAweDIwM0IsIDB4RDdBMSwgMHhEN0ZFLCAweDIwM0YsCisgICAgMHhEODQwLCAweEQ4N0UsIDB4MjA5RCwgMHhEOEExLCAweEQ4RkUsIDB4MjBEQywgMHhEOTQwLCAweEQ5N0UsIDB4MjEzQSwKKyAgICAweEQ5QTEsIDB4RDlGRSwgMHgyMTc5LCAweERBNDAsIDB4REE3RSwgMHgyMUQ3LCAweERBQTEsIDB4REFERSwgMHgyMjE2LAorICAgIDB4REFERiwgMHhEQURGLCAweDFGQ0UsIDB4REFFMCwgMHhEQUZFLCAweDIyNTUsIDB4REI0MCwgMHhEQjdFLCAweDIyNzQsCisgICAgMHhEQkExLCAweERCQTYsIDB4MjJCMywgMHhEQkE3LCAweERCRkUsIDB4MjJCQSwgMHhEQzQwLCAweERDN0UsIDB4MjMxMiwKKyAgICAweERDQTEsIDB4RENGRSwgMHgyMzUxLCAweERENDAsIDB4REQ3RSwgMHgyM0FGLCAweEREQTEsIDB4RERGQiwgMHgyM0VFLAorICAgIDB4RERGQywgMHhEREZDLCAweDIzODEsIDB4RERGRCwgMHhEREZFLCAweDI0NDksIDB4REU0MCwgMHhERTdFLCAweDI0NEIsCisgICAgMHhERUExLCAweERFRkUsIDB4MjQ4QSwgMHhERjQwLCAweERGN0UsIDB4MjRFOCwgMHhERkExLCAweERGRkUsIDB4MjUyNywKKyAgICAweEUwNDAsIDB4RTA3RSwgMHgyNTg1LCAweEUwQTEsIDB4RTBGRSwgMHgyNUM0LCAweEUxNDAsIDB4RTE3RSwgMHgyNjIyLAorICAgIDB4RTFBMSwgMHhFMUZFLCAweDI2NjEsIDB4RTI0MCwgMHhFMjdFLCAweDI2QkYsIDB4RTJBMSwgMHhFMkZFLCAweDI2RkUsCisgICAgMHhFMzQwLCAweEUzN0UsIDB4Mjc1QywgMHhFM0ExLCAweEUzRkUsIDB4Mjc5QiwgMHhFNDQwLCAweEU0N0UsIDB4MjdGOSwKKyAgICAweEU0QTEsIDB4RTRGRSwgMHgyODM4LCAweEU1NDAsIDB4RTU3RSwgMHgyODk2LCAweEU1QTEsIDB4RTVGRSwgMHgyOEQ1LAorICAgIDB4RTY0MCwgMHhFNjdFLCAweDI5MzMsIDB4RTZBMSwgMHhFNkZFLCAweDI5NzIsIDB4RTc0MCwgMHhFNzdFLCAweDI5RDAsCisgICAgMHhFN0ExLCAweEU3RkUsIDB4MkEwRiwgMHhFODQwLCAweEU4N0UsIDB4MkE2RCwgMHhFOEExLCAweEU4QTIsIDB4MkFBQywKKyAgICAweEU4QTMsIDB4RThGRSwgMHgyQUFGLCAweEU5NDAsIDB4RTk3NSwgMHgyQjBCLCAweEU5NzYsIDB4RTk3RSwgMHgyQjQyLAorICAgIDB4RTlBMSwgMHhFOUZFLCAweDJCNEIsIDB4RUE0MCwgMHhFQTdFLCAweDJCQTksIDB4RUFBMSwgMHhFQUZFLCAweDJCRTgsCisgICAgMHhFQjQwLCAweEVCNUEsIDB4MkM0NiwgMHhFQjVCLCAweEVCN0UsIDB4MkM2MiwgMHhFQkExLCAweEVCRjAsIDB4MkM4NiwKKyAgICAweEVCRjEsIDB4RUJGMSwgMHgyQUFFLCAweEVCRjIsIDB4RUJGRSwgMHgyQ0Q2LCAweEVDNDAsIDB4RUM3RSwgMHgyQ0UzLAorICAgIDB4RUNBMSwgMHhFQ0RELCAweDJEMjIsIDB4RUNERSwgMHhFQ0RFLCAweDJCNDEsIDB4RUNERiwgMHhFQ0ZFLCAweDJENUYsCisgICAgMHhFRDQwLCAweEVEN0UsIDB4MkQ3RiwgMHhFREExLCAweEVEQTksIDB4MkRCRSwgMHhFREFBLCAweEVERkUsIDB4MkRDOCwKKyAgICAweEVFNDAsIDB4RUU3RSwgMHgyRTFELCAweEVFQTEsIDB4RUVFQSwgMHgyRTVDLCAweEVFRUIsIDB4RUVFQiwgMHgzMDE0LAorICAgIDB4RUVFQywgMHhFRUZFLCAweDJFQTYsIDB4RUY0MCwgMHhFRjdFLCAweDJFQjksIDB4RUZBMSwgMHhFRkZFLCAweDJFRjgsCisgICAgMHhGMDQwLCAweEYwNTUsIDB4MkY1NiwgMHhGMDU2LCAweEYwNTYsIDB4MkRDNywgMHhGMDU3LCAweEYwN0UsIDB4MkY2QywKKyAgICAweEYwQTEsIDB4RjBDQSwgMHgyRjk0LCAweEYwQ0IsIDB4RjBDQiwgMHgyQzYxLCAweEYwQ0MsIDB4RjBGRSwgMHgyRkJFLAorICAgIDB4RjE0MCwgMHhGMTYyLCAweDJGRjEsIDB4RjE2MywgMHhGMTZBLCAweDMwMTUsIDB4RjE2QiwgMHhGMTZCLCAweDMxNjAsCisgICAgMHhGMTZDLCAweEYxN0UsIDB4MzAxRCwgMHhGMUExLCAweEYxRkUsIDB4MzAzMCwgMHhGMjQwLCAweEYyNjcsIDB4MzA4RSwKKyAgICAweEYyNjgsIDB4RjI2OCwgMHgzMUVGLCAweEYyNjksIDB4RjI3RSwgMHgzMEI2LCAweEYyQTEsIDB4RjJDMiwgMHgzMENDLAorICAgIDB4RjJDMywgMHhGMkZFLCAweDMwRUYsIDB4RjM0MCwgMHhGMzc0LCAweDMxMkIsIDB4RjM3NSwgMHhGMzdFLCAweDMxNjEsCisgICAgMHhGM0ExLCAweEYzRkUsIDB4MzE2QiwgMHhGNDQwLCAweEY0NjUsIDB4MzFDOSwgMHhGNDY2LCAweEY0N0UsIDB4MzFGMCwKKyAgICAweEY0QTEsIDB4RjRCNCwgMHgzMjA5LCAweEY0QjUsIDB4RjRCNSwgMHgzMEVFLCAweEY0QjYsIDB4RjRGQywgMHgzMjFELAorICAgIDB4RjRGRCwgMHhGNEZFLCAweDMyNjUsIDB4RjU0MCwgMHhGNTdFLCAweDMyNjcsIDB4RjVBMSwgMHhGNUZFLCAweDMyQTYsCisgICAgMHhGNjQwLCAweEY2NjIsIDB4MzMwNCwgMHhGNjYzLCAweEY2NjMsIDB4MzI2NCwgMHhGNjY0LCAweEY2N0UsIDB4MzMyNywKKyAgICAweEY2QTEsIDB4RjZGRSwgMHgzMzQyLCAweEY3NDAsIDB4Rjc3RSwgMHgzM0EwLCAweEY3QTEsIDB4RjdGRSwgMHgzM0RGLAorICAgIDB4Rjg0MCwgMHhGODdFLCAweDM0M0QsIDB4RjhBMSwgMHhGOEZFLCAweDM0N0MsIDB4Rjk0MCwgMHhGOTc2LCAweDM0REEsCisgICAgMHhGOTc3LCAweEY5N0UsIDB4MzUxMiwgMHhGOUExLCAweEY5QzMsIDB4MzUxQSwgMHhGOUM0LCAweEY5QzQsIDB4MzUxMSwKKyAgICAweEY5QzUsIDB4RjlDNSwgMHgzNTNELCAweEY5QzYsIDB4RjlDNiwgMHgzNTQ5LCAweEY5QzcsIDB4RjlEMSwgMHgzNTNFLAorICAgIDB4RjlEMiwgMHhGOUQ1LCAweDM1NEEsIDB4RjlENiwgMHhGOUZFLCAweDM2RTgsCit9OwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0NOUzEvRVRlbi1CNS1WXzAuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0NOUzEvRVRlbi1CNS1WXzAuY3BwCmluZGV4IGUxZDllMjMuLjk0MWMxZjIgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9DTlMxL0VUZW4tQjUtVl8wLmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvQ05TMS9FVGVuLUI1LVZfMC5jcHAKQEAgLTEsMTMgKzEsMTMgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLWV4dGVybiBjb25zdCB1bnNpZ25lZCBzaG9ydCBnX0ZYQ01BUF9FVGVuX0I1X1ZfMFsxMyAqIDNdID0gew0KLSAgICAweEExNEIsIDB4QTE0QiwgMHgzNTRFLCAweEExNUEsIDB4QTE1QSwgMHgzNUFGLCAweEExNUMsIDB4QTE1QywgMHgzNUIxLA0KLSAgICAweEExNUQsIDB4QTE1RSwgMHgwMDgyLCAweEExNjEsIDB4QTE2MiwgMHgwMDg2LCAweEExNjUsIDB4QTE2NiwgMHgwMDhBLA0KLSAgICAweEExNjksIDB4QTE2QSwgMHgwMDhFLCAweEExNkQsIDB4QTE2RSwgMHgwMDkyLCAweEExNzEsIDB4QTE3MiwgMHgwMDk2LA0KLSAgICAweEExNzUsIDB4QTE3NiwgMHgwMDlBLCAweEExNzksIDB4QTE3QSwgMHgwMDlFLCAweEExRTMsIDB4QTFFMywgMHgzNTRGLA0KLSAgICAweEM2RTQsIDB4QzZFNSwgMHgzNzExLA0KLX07DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0VUZW5fQjVfVl8wWzEzICogM10gPSB7CisgICAgMHhBMTRCLCAweEExNEIsIDB4MzU0RSwgMHhBMTVBLCAweEExNUEsIDB4MzVBRiwgMHhBMTVDLCAweEExNUMsIDB4MzVCMSwKKyAgICAweEExNUQsIDB4QTE1RSwgMHgwMDgyLCAweEExNjEsIDB4QTE2MiwgMHgwMDg2LCAweEExNjUsIDB4QTE2NiwgMHgwMDhBLAorICAgIDB4QTE2OSwgMHhBMTZBLCAweDAwOEUsIDB4QTE2RCwgMHhBMTZFLCAweDAwOTIsIDB4QTE3MSwgMHhBMTcyLCAweDAwOTYsCisgICAgMHhBMTc1LCAweEExNzYsIDB4MDA5QSwgMHhBMTc5LCAweEExN0EsIDB4MDA5RSwgMHhBMUUzLCAweEExRTMsIDB4MzU0RiwKKyAgICAweEM2RTQsIDB4QzZFNSwgMHgzNzExLAorfTsKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9DTlMxL0VUZW5tcy1CNS1IXzAuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0NOUzEvRVRlbm1zLUI1LUhfMC5jcHAKaW5kZXggMWI1MTM2ZS4uZmFlMjYzMyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0NOUzEvRVRlbm1zLUI1LUhfMC5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0NOUzEvRVRlbm1zLUI1LUhfMC5jcHAKQEAgLTEsOSArMSw5IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfRVRlbm1zX0I1X0hfMFsxICogM10gPSB7DQotICAgIDB4MDAyMCwgMHgwMDdFLCAweDAwMDEsDQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfRVRlbm1zX0I1X0hfMFsxICogM10gPSB7CisgICAgMHgwMDIwLCAweDAwN0UsIDB4MDAwMSwKK307CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvQ05TMS9FVGVubXMtQjUtVl8wLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9DTlMxL0VUZW5tcy1CNS1WXzAuY3BwCmluZGV4IDFiOGFkMGUuLjc5YjhhMzQgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9DTlMxL0VUZW5tcy1CNS1WXzAuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9DTlMxL0VUZW5tcy1CNS1WXzAuY3BwCkBAIC0xLDE0ICsxLDE0IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfRVRlbm1zX0I1X1ZfMFsxOCAqIDNdID0gew0KLSAgICAweEExNEIsIDB4QTE0QiwgMHgzNTRFLCAweEExNEMsIDB4QTE0QywgMHgwMDZELCAweEExNTYsIDB4QTE1NiwgMHgwMTM4LA0KLSAgICAweEExNTgsIDB4QTE1OCwgMHgwMDdBLCAweEExNUEsIDB4QTE1QSwgMHgzNUFGLCAweEExNUMsIDB4QTE1QywgMHgzNUIxLA0KLSAgICAweEExNUQsIDB4QTE1RSwgMHgwMDgyLCAweEExNjEsIDB4QTE2MiwgMHgwMDg2LCAweEExNjUsIDB4QTE2NiwgMHgwMDhBLA0KLSAgICAweEExNjksIDB4QTE2QSwgMHgwMDhFLCAweEExNkQsIDB4QTE2RSwgMHgwMDkyLCAweEExNzEsIDB4QTE3MiwgMHgwMDk2LA0KLSAgICAweEExNzUsIDB4QTE3NiwgMHgwMDlBLCAweEExNzksIDB4QTE3QSwgMHgwMDlFLCAweEExN0QsIDB4QTE3RSwgMHgwMDgyLA0KLSAgICAweEExQTEsIDB4QTFBMiwgMHgwMDg2LCAweEExQTMsIDB4QTFBNCwgMHgwMDhBLCAweEM2RTQsIDB4QzZFNSwgMHgzNzExLA0KLX07DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0VUZW5tc19CNV9WXzBbMTggKiAzXSA9IHsKKyAgICAweEExNEIsIDB4QTE0QiwgMHgzNTRFLCAweEExNEMsIDB4QTE0QywgMHgwMDZELCAweEExNTYsIDB4QTE1NiwgMHgwMTM4LAorICAgIDB4QTE1OCwgMHhBMTU4LCAweDAwN0EsIDB4QTE1QSwgMHhBMTVBLCAweDM1QUYsIDB4QTE1QywgMHhBMTVDLCAweDM1QjEsCisgICAgMHhBMTVELCAweEExNUUsIDB4MDA4MiwgMHhBMTYxLCAweEExNjIsIDB4MDA4NiwgMHhBMTY1LCAweEExNjYsIDB4MDA4QSwKKyAgICAweEExNjksIDB4QTE2QSwgMHgwMDhFLCAweEExNkQsIDB4QTE2RSwgMHgwMDkyLCAweEExNzEsIDB4QTE3MiwgMHgwMDk2LAorICAgIDB4QTE3NSwgMHhBMTc2LCAweDAwOUEsIDB4QTE3OSwgMHhBMTdBLCAweDAwOUUsIDB4QTE3RCwgMHhBMTdFLCAweDAwODIsCisgICAgMHhBMUExLCAweEExQTIsIDB4MDA4NiwgMHhBMUEzLCAweEExQTQsIDB4MDA4QSwgMHhDNkU0LCAweEM2RTUsIDB4MzcxMSwKK307CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvQ05TMS9VbmlDTlMtVVRGMTYtSF8wLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9DTlMxL1VuaUNOUy1VVEYxNi1IXzAuY3BwCmluZGV4IGQyOWE3MjUuLmVhN2YxMTggMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9DTlMxL1VuaUNOUy1VVEYxNi1IXzAuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9DTlMxL1VuaUNOUy1VVEYxNi1IXzAuY3BwCkBAIC0xLDM2NTEgKzEsMzY1MSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX1VuaUNOU19VVEYxNl9IXzBbMTQ1NTcgKiAyXSA9IHsNCi0gICAgMHgwMDIwLCAweDAwMDEsIDB4MDAyMSwgMHgwMDAyLCAweDAwMjIsIDB4MDAwMywgMHgwMDIzLCAweDAwMDQsDQotICAgIDB4MDAyNCwgMHgwMDA1LCAweDAwMjUsIDB4MDAwNiwgMHgwMDI2LCAweDAwMDcsIDB4MDAyNywgMHgwMDA4LA0KLSAgICAweDAwMjgsIDB4MDAwOSwgMHgwMDI5LCAweDAwMEEsIDB4MDAyQSwgMHgwMDBCLCAweDAwMkIsIDB4MDAwQywNCi0gICAgMHgwMDJDLCAweDAwMEQsIDB4MDAyRCwgMHgwMDBFLCAweDAwMkUsIDB4MDAwRiwgMHgwMDJGLCAweDAwMTAsDQotICAgIDB4MDAzMCwgMHgwMDExLCAweDAwMzEsIDB4MDAxMiwgMHgwMDMyLCAweDAwMTMsIDB4MDAzMywgMHgwMDE0LA0KLSAgICAweDAwMzQsIDB4MDAxNSwgMHgwMDM1LCAweDAwMTYsIDB4MDAzNiwgMHgwMDE3LCAweDAwMzcsIDB4MDAxOCwNCi0gICAgMHgwMDM4LCAweDAwMTksIDB4MDAzOSwgMHgwMDFBLCAweDAwM0EsIDB4MDAxQiwgMHgwMDNCLCAweDAwMUMsDQotICAgIDB4MDAzQywgMHgwMDFELCAweDAwM0QsIDB4MDAxRSwgMHgwMDNFLCAweDAwMUYsIDB4MDAzRiwgMHgwMDIwLA0KLSAgICAweDAwNDAsIDB4MDAyMSwgMHgwMDQxLCAweDAwMjIsIDB4MDA0MiwgMHgwMDIzLCAweDAwNDMsIDB4MDAyNCwNCi0gICAgMHgwMDQ0LCAweDAwMjUsIDB4MDA0NSwgMHgwMDI2LCAweDAwNDYsIDB4MDAyNywgMHgwMDQ3LCAweDAwMjgsDQotICAgIDB4MDA0OCwgMHgwMDI5LCAweDAwNDksIDB4MDAyQSwgMHgwMDRBLCAweDAwMkIsIDB4MDA0QiwgMHgwMDJDLA0KLSAgICAweDAwNEMsIDB4MDAyRCwgMHgwMDRELCAweDAwMkUsIDB4MDA0RSwgMHgwMDJGLCAweDAwNEYsIDB4MDAzMCwNCi0gICAgMHgwMDUwLCAweDAwMzEsIDB4MDA1MSwgMHgwMDMyLCAweDAwNTIsIDB4MDAzMywgMHgwMDUzLCAweDAwMzQsDQotICAgIDB4MDA1NCwgMHgwMDM1LCAweDAwNTUsIDB4MDAzNiwgMHgwMDU2LCAweDAwMzcsIDB4MDA1NywgMHgwMDM4LA0KLSAgICAweDAwNTgsIDB4MDAzOSwgMHgwMDU5LCAweDAwM0EsIDB4MDA1QSwgMHgwMDNCLCAweDAwNUIsIDB4MDAzQywNCi0gICAgMHgwMDVDLCAweDAwM0QsIDB4MDA1RCwgMHgwMDNFLCAweDAwNUUsIDB4MDAzRiwgMHgwMDVGLCAweDAwNDAsDQotICAgIDB4MDA2MCwgMHgwMDQxLCAweDAwNjEsIDB4MDA0MiwgMHgwMDYyLCAweDAwNDMsIDB4MDA2MywgMHgwMDQ0LA0KLSAgICAweDAwNjQsIDB4MDA0NSwgMHgwMDY1LCAweDAwNDYsIDB4MDA2NiwgMHgwMDQ3LCAweDAwNjcsIDB4MDA0OCwNCi0gICAgMHgwMDY4LCAweDAwNDksIDB4MDA2OSwgMHgwMDRBLCAweDAwNkEsIDB4MDA0QiwgMHgwMDZCLCAweDAwNEMsDQotICAgIDB4MDA2QywgMHgwMDRELCAweDAwNkQsIDB4MDA0RSwgMHgwMDZFLCAweDAwNEYsIDB4MDA2RiwgMHgwMDUwLA0KLSAgICAweDAwNzAsIDB4MDA1MSwgMHgwMDcxLCAweDAwNTIsIDB4MDA3MiwgMHgwMDUzLCAweDAwNzMsIDB4MDA1NCwNCi0gICAgMHgwMDc0LCAweDAwNTUsIDB4MDA3NSwgMHgwMDU2LCAweDAwNzYsIDB4MDA1NywgMHgwMDc3LCAweDAwNTgsDQotICAgIDB4MDA3OCwgMHgwMDU5LCAweDAwNzksIDB4MDA1QSwgMHgwMDdBLCAweDAwNUIsIDB4MDA3QiwgMHgwMDVDLA0KLSAgICAweDAwN0MsIDB4MDA1RCwgMHgwMDdELCAweDAwNUUsIDB4MDA3RSwgMHgwMDVGLCAweDAwQTIsIDB4MDEwNiwNCi0gICAgMHgwMEEzLCAweDAxMDcsIDB4MDBBNSwgMHgwMTA0LCAweDAwQTcsIDB4MDBCMiwgMHgwMEE4LCAweDM1QjMsDQotICAgIDB4MDBBQywgMHgzNkUxLCAweDAwQUYsIDB4MDBDMywgMHgwMEIwLCAweDAxMTgsIDB4MDBCMSwgMHgwMEQ0LA0KLSAgICAweDAwQjcsIDB4MDA3MywgMHgwMEQ3LCAweDAwRDIsIDB4MDBGNywgMHgwMEQzLCAweDAyQzYsIDB4MzVCNCwNCi0gICAgMHgwMkM3LCAweDAxRjgsIDB4MDJDQSwgMHgwMUY3LCAweDAyQ0IsIDB4MDFGOSwgMHgwMkNELCAweDAwQzYsDQotICAgIDB4MDJEOSwgMHgwMUY2LCAweDAzMDgsIDB4MzVCMywgMHgwMzkxLCAweDAxQTEsIDB4MDM5MiwgMHgwMUEyLA0KLSAgICAweDAzOTMsIDB4MDFBMywgMHgwMzk0LCAweDAxQTQsIDB4MDM5NSwgMHgwMUE1LCAweDAzOTYsIDB4MDFBNiwNCi0gICAgMHgwMzk3LCAweDAxQTcsIDB4MDM5OCwgMHgwMUE4LCAweDAzOTksIDB4MDFBOSwgMHgwMzlBLCAweDAxQUEsDQotICAgIDB4MDM5QiwgMHgwMUFCLCAweDAzOUMsIDB4MDFBQywgMHgwMzlELCAweDAxQUQsIDB4MDM5RSwgMHgwMUFFLA0KLSAgICAweDAzOUYsIDB4MDFBRiwgMHgwM0EwLCAweDAxQjAsIDB4MDNBMSwgMHgwMUIxLCAweDAzQTMsIDB4MDFCMiwNCi0gICAgMHgwM0E0LCAweDAxQjMsIDB4MDNBNSwgMHgwMUI0LCAweDAzQTYsIDB4MDFCNSwgMHgwM0E3LCAweDAxQjYsDQotICAgIDB4MDNBOCwgMHgwMUI3LCAweDAzQTksIDB4MDFCOCwgMHgwM0IxLCAweDAxQjksIDB4MDNCMiwgMHgwMUJBLA0KLSAgICAweDAzQjMsIDB4MDFCQiwgMHgwM0I0LCAweDAxQkMsIDB4MDNCNSwgMHgwMUJELCAweDAzQjYsIDB4MDFCRSwNCi0gICAgMHgwM0I3LCAweDAxQkYsIDB4MDNCOCwgMHgwMUMwLCAweDAzQjksIDB4MDFDMSwgMHgwM0JBLCAweDAxQzIsDQotICAgIDB4MDNCQiwgMHgwMUMzLCAweDAzQkMsIDB4MDFDNCwgMHgwM0JELCAweDAxQzUsIDB4MDNCRSwgMHgwMUM2LA0KLSAgICAweDAzQkYsIDB4MDFDNywgMHgwM0MwLCAweDAxQzgsIDB4MDNDMSwgMHgwMUM5LCAweDAzQzMsIDB4MDFDQSwNCi0gICAgMHgwM0M0LCAweDAxQ0IsIDB4MDNDNSwgMHgwMUNDLCAweDAzQzYsIDB4MDFDRCwgMHgwM0M3LCAweDAxQ0UsDQotICAgIDB4MDNDOCwgMHgwMUNGLCAweDAzQzksIDB4MDFEMCwgMHgwNDAxLCAweDM2NzAsIDB4MDQxMCwgMHgzNjZBLA0KLSAgICAweDA0MTEsIDB4MzY2QiwgMHgwNDEyLCAweDM2NkMsIDB4MDQxMywgMHgzNjZELCAweDA0MTQsIDB4MzY2RSwNCi0gICAgMHgwNDE1LCAweDM2NkYsIDB4MDQxNiwgMHgzNjcxLCAweDA0MTcsIDB4MzY3MiwgMHgwNDE4LCAweDM2NzMsDQotICAgIDB4MDQxOSwgMHgzNjc0LCAweDA0MUEsIDB4MzY3NSwgMHgwNDFCLCAweDM2NzYsIDB4MDQxQywgMHgzNjc3LA0KLSAgICAweDA0MUQsIDB4MzY3OCwgMHgwNDFFLCAweDM2NzksIDB4MDQxRiwgMHgzNjdBLCAweDA0MjAsIDB4MzY3QiwNCi0gICAgMHgwNDIxLCAweDM2N0MsIDB4MDQyMiwgMHgzNjdELCAweDA0MjMsIDB4MzY3RSwgMHgwNDI0LCAweDM2N0YsDQotICAgIDB4MDQyNSwgMHgzNjgwLCAweDA0MjYsIDB4MzY4MSwgMHgwNDI3LCAweDM2ODIsIDB4MDQyOCwgMHgzNjgzLA0KLSAgICAweDA0MjksIDB4MzY4NCwgMHgwNDJBLCAweDM2ODUsIDB4MDQyQiwgMHgzNjg2LCAweDA0MkMsIDB4MzY4NywNCi0gICAgMHgwNDJELCAweDM2ODgsIDB4MDQyRSwgMHgzNjg5LCAweDA0MkYsIDB4MzY4QSwgMHgwNDMwLCAweDM2OEIsDQotICAgIDB4MDQzMSwgMHgzNjhDLCAweDA0MzIsIDB4MzY4RCwgMHgwNDMzLCAweDM2OEUsIDB4MDQzNCwgMHgzNjhGLA0KLSAgICAweDA0MzUsIDB4MzY5MCwgMHgwNDM2LCAweDM2OTIsIDB4MDQzNywgMHgzNjkzLCAweDA0MzgsIDB4MzY5NCwNCi0gICAgMHgwNDM5LCAweDM2OTUsIDB4MDQzQSwgMHgzNjk2LCAweDA0M0IsIDB4MzY5NywgMHgwNDNDLCAweDM2OTgsDQotICAgIDB4MDQzRCwgMHgzNjk5LCAweDA0M0UsIDB4MzY5QSwgMHgwNDNGLCAweDM2OUIsIDB4MDQ0MCwgMHgzNjlDLA0KLSAgICAweDA0NDEsIDB4MzY5RCwgMHgwNDQyLCAweDM2OUUsIDB4MDQ0MywgMHgzNjlGLCAweDA0NDQsIDB4MzZBMCwNCi0gICAgMHgwNDQ1LCAweDM2QTEsIDB4MDQ0NiwgMHgzNkEyLCAweDA0NDcsIDB4MzZBMywgMHgwNDQ4LCAweDM2QTQsDQotICAgIDB4MDQ0OSwgMHgzNkE1LCAweDA0NEEsIDB4MzZBNiwgMHgwNDRCLCAweDM2QTcsIDB4MDQ0QywgMHgzNkE4LA0KLSAgICAweDA0NEQsIDB4MzZBOSwgMHgwNDRFLCAweDM2QUEsIDB4MDQ0RiwgMHgzNkFCLCAweDA0NTEsIDB4MzY5MSwNCi0gICAgMHgyMDEzLCAweDAwNzksIDB4MjAxNCwgMHgwMDdCLCAweDIwMTgsIDB4MDBBNiwgMHgyMDE5LCAweDAwQTcsDQotICAgIDB4MjAxQywgMHgwMEE4LCAweDIwMUQsIDB4MDBBOSwgMHgyMDIyLCAweDAwNjgsIDB4MjAyNSwgMHgwMDZGLA0KLSAgICAweDIwMjYsIDB4MDA2RSwgMHgyMDI3LCAweDAwNjgsIDB4MjAzMiwgMHgwMEFELCAweDIwMzUsIDB4MDBBQywNCi0gICAgMHgyMDNCLCAweDAwQjEsIDB4MjAzRSwgMHgwMEMzLCAweDIxMDMsIDB4MDEwQSwgMHgyMTA1LCAweDAwQzIsDQotICAgIDB4MjEwOSwgMHgwMTBCLCAweDIxMTYsIDB4MzZFNiwgMHgyMTIxLCAweDM2RTcsIDB4MjE2MCwgMHgwMTU3LA0KLSAgICAweDIxNjEsIDB4MDE1OCwgMHgyMTYyLCAweDAxNTksIDB4MjE2MywgMHgwMTVBLCAweDIxNjQsIDB4MDE1QiwNCi0gICAgMHgyMTY1LCAweDAxNUMsIDB4MjE2NiwgMHgwMTVELCAweDIxNjcsIDB4MDE1RSwgMHgyMTY4LCAweDAxNUYsDQotICAgIDB4MjE2OSwgMHgwMTYwLCAweDIxNzAsIDB4MDIwRSwgMHgyMTcxLCAweDAyMEYsIDB4MjE3MiwgMHgwMjEwLA0KLSAgICAweDIxNzMsIDB4MDIxMSwgMHgyMTc0LCAweDAyMTIsIDB4MjE3NSwgMHgwMjEzLCAweDIxNzYsIDB4MDIxNCwNCi0gICAgMHgyMTc3LCAweDAyMTUsIDB4MjE3OCwgMHgwMjE2LCAweDIxNzksIDB4MDIxNywgMHgyMTkwLCAweDAwRjgsDQotICAgIDB4MjE5MSwgMHgwMEY1LCAweDIxOTIsIDB4MDBGNywgMHgyMTkzLCAweDAwRjYsIDB4MjE5NiwgMHgwMEY5LA0KLSAgICAweDIxOTcsIDB4MDBGQSwgMHgyMTk4LCAweDAwRkMsIDB4MjE5OSwgMHgwMEZCLCAweDIxQjgsIDB4MzZBRCwNCi0gICAgMHgyMUI5LCAweDM2QUUsIDB4MjFFNywgMHgzNkFDLCAweDIyMTUsIDB4MDEwMSwgMHgyMjFBLCAweDAwRDUsDQotICAgIDB4MjIxRSwgMHgwMERDLCAweDIyMUYsIDB4MDBFOSwgMHgyMjIwLCAweDAwRTgsIDB4MjIyMywgMHgwMEZFLA0KLSAgICAweDIyMjUsIDB4MDBGRCwgMHgyMjI5LCAweDAwRTUsIDB4MjIyQSwgMHgwMEU2LCAweDIyMkIsIDB4MDBFRCwNCi0gICAgMHgyMjJFLCAweDAwRUUsIDB4MjIzNCwgMHgwMEYwLCAweDIyMzUsIDB4MDBFRiwgMHgyMjNDLCAweDAwRTQsDQotICAgIDB4MjI1MiwgMHgwMERELCAweDIyNjAsIDB4MDBEQiwgMHgyMjYxLCAweDAwREUsIDB4MjI2NiwgMHgwMEQ5LA0KLSAgICAweDIyNjcsIDB4MDBEQSwgMHgyMjk1LCAweDAwRjMsIDB4MjI5OSwgMHgwMEY0LCAweDIyQTUsIDB4MDBFNywNCi0gICAgMHgyMkJGLCAweDAwRUEsIDB4MjJFRiwgMHgwMDZFLCAweDI0MDAsIDB4MDIzMiwgMHgyNDAxLCAweDAyMzMsDQotICAgIDB4MjQwMiwgMHgwMjM0LCAweDI0MDMsIDB4MDIzNSwgMHgyNDA0LCAweDAyMzYsIDB4MjQwNSwgMHgwMjM3LA0KLSAgICAweDI0MDYsIDB4MDIzOCwgMHgyNDA3LCAweDAyMzksIDB4MjQwOCwgMHgwMjNBLCAweDI0MDksIDB4MDIzQiwNCi0gICAgMHgyNDBBLCAweDAyM0MsIDB4MjQwQiwgMHgwMjNELCAweDI0MEMsIDB4MDIzRSwgMHgyNDBELCAweDAyM0YsDQotICAgIDB4MjQwRSwgMHgwMjQwLCAweDI0MEYsIDB4MDI0MSwgMHgyNDEwLCAweDAyNDIsIDB4MjQxMSwgMHgwMjQzLA0KLSAgICAweDI0MTIsIDB4MDI0NCwgMHgyNDEzLCAweDAyNDUsIDB4MjQxNCwgMHgwMjQ2LCAweDI0MTUsIDB4MDI0NywNCi0gICAgMHgyNDE2LCAweDAyNDgsIDB4MjQxNywgMHgwMjQ5LCAweDI0MTgsIDB4MDI0QSwgMHgyNDE5LCAweDAyNEIsDQotICAgIDB4MjQxQSwgMHgwMjRDLCAweDI0MUIsIDB4MDI0RCwgMHgyNDFDLCAweDAyNEUsIDB4MjQxRCwgMHgwMjRGLA0KLSAgICAweDI0MUUsIDB4MDI1MCwgMHgyNDFGLCAweDAyNTEsIDB4MjQyMSwgMHgwMjUyLCAweDI0NjAsIDB4MDFGQSwNCi0gICAgMHgyNDYxLCAweDAxRkIsIDB4MjQ2MiwgMHgwMUZDLCAweDI0NjMsIDB4MDFGRCwgMHgyNDY0LCAweDAxRkUsDQotICAgIDB4MjQ2NSwgMHgwMUZGLCAweDI0NjYsIDB4MDIwMCwgMHgyNDY3LCAweDAyMDEsIDB4MjQ2OCwgMHgwMjAyLA0KLSAgICAweDI0NjksIDB4MDIwMywgMHgyNDc0LCAweDAyMDQsIDB4MjQ3NSwgMHgwMjA1LCAweDI0NzYsIDB4MDIwNiwNCi0gICAgMHgyNDc3LCAweDAyMDcsIDB4MjQ3OCwgMHgwMjA4LCAweDI0NzksIDB4MDIwOSwgMHgyNDdBLCAweDAyMEEsDQotICAgIDB4MjQ3QiwgMHgwMjBCLCAweDI0N0MsIDB4MDIwQywgMHgyNDdELCAweDAyMEQsIDB4MjUwMCwgMHgwMTM3LA0KLSAgICAweDI1MDIsIDB4MDEzOCwgMHgyNTBDLCAweDAxM0EsIDB4MjUxMCwgMHgwMTNCLCAweDI1MTQsIDB4MDEzQywNCi0gICAgMHgyNTE4LCAweDAxM0QsIDB4MjUxQywgMHgwMTM1LCAweDI1MjQsIDB4MDEzNCwgMHgyNTJDLCAweDAxMzMsDQotICAgIDB4MjUzNCwgMHgwMTMyLCAweDI1M0MsIDB4MDEzMSwgMHgyNTUwLCAweDAxNDIsIDB4MjU1MSwgMHgzNzBBLA0KLSAgICAweDI1NTIsIDB4MzZGOCwgMHgyNTUzLCAweDM3MDEsIDB4MjU1NCwgMHgzNkVGLCAweDI1NTUsIDB4MzZGQSwNCi0gICAgMHgyNTU2LCAweDM3MDMsIDB4MjU1NywgMHgzNkYxLCAweDI1NTgsIDB4MzZGRSwgMHgyNTU5LCAweDM3MDcsDQotICAgIDB4MjU1QSwgMHgzNkY1LCAweDI1NUIsIDB4MzcwMCwgMHgyNTVDLCAweDM3MDksIDB4MjU1RCwgMHgzNkY3LA0KLSAgICAweDI1NUUsIDB4MDE0MywgMHgyNTVGLCAweDM3MDQsIDB4MjU2MCwgMHgzNkYyLCAweDI1NjEsIDB4MDE0NSwNCi0gICAgMHgyNTYyLCAweDM3MDYsIDB4MjU2MywgMHgzNkY0LCAweDI1NjQsIDB4MzZGOSwgMHgyNTY1LCAweDM3MDIsDQotICAgIDB4MjU2NiwgMHgzNkYwLCAweDI1NjcsIDB4MzZGRiwgMHgyNTY4LCAweDM3MDgsIDB4MjU2OSwgMHgzNkY2LA0KLSAgICAweDI1NkEsIDB4MDE0NCwgMHgyNTZCLCAweDM3MDUsIDB4MjU2QywgMHgzNkYzLCAweDI1NkQsIDB4MDEzRSwNCi0gICAgMHgyNTZFLCAweDAxM0YsIDB4MjU2RiwgMHgwMTQxLCAweDI1NzAsIDB4MDE0MCwgMHgyNTcxLCAweDAxNEEsDQotICAgIDB4MjU3MiwgMHgwMTRCLCAweDI1NzMsIDB4MDE0QywgMHgyNTc0LCAweDM1QjAsIDB4MjU4MSwgMHgwMTIyLA0KLSAgICAweDI1ODIsIDB4MDEyMywgMHgyNTgzLCAweDAxMjQsIDB4MjU4NCwgMHgwMTI1LCAweDI1ODUsIDB4MDEyNiwNCi0gICAgMHgyNTg2LCAweDAxMjcsIDB4MjU4NywgMHgwMTI4LCAweDI1ODgsIDB4MDEyOSwgMHgyNTg5LCAweDAxMzAsDQotICAgIDB4MjU4QSwgMHgwMTJGLCAweDI1OEIsIDB4MDEyRSwgMHgyNThDLCAweDAxMkQsIDB4MjU4RCwgMHgwMTJDLA0KLSAgICAweDI1OEUsIDB4MDEyQiwgMHgyNThGLCAweDAxMkEsIDB4MjU5MywgMHgzNzEwLCAweDI1OTQsIDB4MDEzNiwNCi0gICAgMHgyNTk1LCAweDAxMzksIDB4MjVBMCwgMHgwMEJFLCAweDI1QTEsIDB4MDBCRCwgMHgyNUIyLCAweDAwQjcsDQotICAgIDB4MjVCMywgMHgwMEI2LCAweDI1QkMsIDB4MDBDMCwgMHgyNUJELCAweDAwQkYsIDB4MjVDNiwgMHgwMEJDLA0KLSAgICAweDI1QzcsIDB4MDBCQiwgMHgyNUNCLCAweDAwQjQsIDB4MjVDRSwgMHgwMEI4LCAweDI1Q0YsIDB4MDBCNSwNCi0gICAgMHgyNUUyLCAweDAxNDYsIDB4MjVFMywgMHgwMTQ3LCAweDI1RTQsIDB4MDE0OSwgMHgyNUU1LCAweDAxNDgsDQotICAgIDB4MjYwNSwgMHgwMEJBLCAweDI2MDYsIDB4MDBCOSwgMHgyNjA5LCAweDAwRjQsIDB4MjY0MCwgMHgwMEYxLA0KLSAgICAweDI2NDEsIDB4MDBGMywgMHgyNjQyLCAweDAwRjIsIDB4MjczRCwgMHgzNUMwLCAweDJGMDAsIDB4MDI1MywNCi0gICAgMHgyRjAxLCAweDAyMTgsIDB4MkYwMiwgMHgwMjE5LCAweDJGMDMsIDB4MDIxQSwgMHgyRjA0LCAweDAyNTQsDQotICAgIDB4MkYwNSwgMHgwMjFCLCAweDJGMDYsIDB4MDI1QSwgMHgyRjA3LCAweDAyMUMsIDB4MkYwOCwgMHgwMjVCLA0KLSAgICAweDJGMDksIDB4MDI1QywgMHgyRjBBLCAweDAyNUQsIDB4MkYwQiwgMHgwMjVFLCAweDJGMEMsIDB4MDIxRCwNCi0gICAgMHgyRjBELCAweDAyMUUsIDB4MkYwRSwgMHgwMjFGLCAweDJGMEYsIDB4MDI1RiwgMHgyRjEwLCAweDE3NkUsDQotICAgIDB4MkYxMSwgMHgwMjYwLCAweDJGMTIsIDB4MDI2MiwgMHgyRjEzLCAweDAyMjAsIDB4MkYxNCwgMHgwMjYzLA0KLSAgICAweDJGMTUsIDB4MTc2RiwgMHgyRjE2LCAweDAyMjEsIDB4MkYxNywgMHgwMjY0LCAweDJGMTgsIDB4MDI2NSwNCi0gICAgMHgyRjE5LCAweDAyMjIsIDB4MkYxQSwgMHgxNzcwLCAweDJGMUIsIDB4MDIyMywgMHgyRjFDLCAweDAyNjYsDQotICAgIDB4MkYxRCwgMHgwMjc5LCAweDJGMUUsIDB4MTc3NSwgMHgyRjFGLCAweDAyN0EsIDB4MkYyMCwgMHgwMjdCLA0KLSAgICAweDJGMjEsIDB4MDIyNCwgMHgyRjIyLCAweDAyMjQsIDB4MkYyMywgMHgwMjdDLCAweDJGMjQsIDB4MDI3RCwNCi0gICAgMHgyRjI1LCAweDAyN0UsIDB4MkYyNiwgMHgwMjdGLCAweDJGMjcsIDB4MDIyNSwgMHgyRjI4LCAweDAyODIsDQotICAgIDB4MkYyOSwgMHgwMjgzLCAweDJGMkEsIDB4MDI4NCwgMHgyRjJCLCAweDAyODUsIDB4MkYyQywgMHgxNzc2LA0KLSAgICAweDJGMkQsIDB4MDI4NiwgMHgyRjJFLCAweDAyMjYsIDB4MkYyRiwgMHgwMjg4LCAweDJGMzAsIDB4MDI4OSwNCi0gICAgMHgyRjMxLCAweDAyOEMsIDB4MkYzMiwgMHgwMjhELCAweDJGMzMsIDB4MDIyNywgMHgyRjM0LCAweDAyMjgsDQotICAgIDB4MkYzNSwgMHgwMjI5LCAweDJGMzYsIDB4MDI4RSwgMHgyRjM3LCAweDAyOEYsIDB4MkYzOCwgMHgwMjkwLA0KLSAgICAweDJGMzksIDB4MDIyQSwgMHgyRjNBLCAweDAyMkIsIDB4MkYzQiwgMHgxNzc3LCAweDJGM0MsIDB4MDJEMCwNCi0gICAgMHgyRjNELCAweDAyRDEsIDB4MkYzRSwgMHgwMkQyLCAweDJGM0YsIDB4MDJEMywgMHgyRjQwLCAweDAyRDUsDQotICAgIDB4MkY0MSwgMHgwMjJDLCAweDJGNDIsIDB4MDJENiwgMHgyRjQzLCAweDAyRDcsIDB4MkY0NCwgMHgwMkQ4LA0KLSAgICAweDJGNDUsIDB4MDJEOSwgMHgyRjQ2LCAweDAyMkQsIDB4MkY0NywgMHgwMkRBLCAweDJGNDgsIDB4MDJEQiwNCi0gICAgMHgyRjQ5LCAweDAyREMsIDB4MkY0QSwgMHgwMkRELCAweDJGNEIsIDB4MDJERSwgMHgyRjRDLCAweDAyREYsDQotICAgIDB4MkY0RCwgMHgwMkUwLCAweDJGNEUsIDB4MTc4QSwgMHgyRjRGLCAweDAyRTEsIDB4MkY1MCwgMHgwMkUyLA0KLSAgICAweDJGNTEsIDB4MDJFMywgMHgyRjUyLCAweDAyRTQsIDB4MkY1MywgMHgxNzhDLCAweDJGNTQsIDB4MDJFNSwNCi0gICAgMHgyRjU1LCAweDAyRTYsIDB4MkY1NiwgMHgwMkU3LCAweDJGNTcsIDB4MDJFOCwgMHgyRjU4LCAweDAyRTksDQotICAgIDB4MkY1OSwgMHgxNzhELCAweDJGNUEsIDB4MDJFQSwgMHgyRjVCLCAweDAyRUIsIDB4MkY1QywgMHgwMkVDLA0KLSAgICAweDJGNUQsIDB4MDJFRCwgMHgyRjVFLCAweDAzNTYsIDB4MkY1RiwgMHgwMzU3LCAweDJGNjAsIDB4MDM1OCwNCi0gICAgMHgyRjYxLCAweDAzNTksIDB4MkY2MiwgMHgwMzVBLCAweDJGNjMsIDB4MDM1QiwgMHgyRjY0LCAweDAzNUMsDQotICAgIDB4MkY2NSwgMHgwMzVFLCAweDJGNjYsIDB4MDM2MiwgMHgyRjY3LCAweDAyMkUsIDB4MkY2OCwgMHgwMjJGLA0KLSAgICAweDJGNjksIDB4MDM2MywgMHgyRjZBLCAweDAzNjQsIDB4MkY2QiwgMHgwMzY1LCAweDJGNkMsIDB4MDM2NiwNCi0gICAgMHgyRjZELCAweDAzNjcsIDB4MkY2RSwgMHgwMzY4LCAweDJGNkYsIDB4MDM2OSwgMHgyRjcwLCAweDAzNkEsDQotICAgIDB4MkY3MSwgMHgxN0IyLCAweDJGNzIsIDB4MDM2QiwgMHgyRjczLCAweDAzNkMsIDB4MkY3NCwgMHgwMzZELA0KLSAgICAweDJGNzUsIDB4MDNGNiwgMHgyRjc2LCAweDAzRjcsIDB4MkY3NywgMHgwM0Y4LCAweDJGNzgsIDB4MDNGOSwNCi0gICAgMHgyRjc5LCAweDE4MTIsIDB4MkY3QSwgMHgwM0ZBLCAweDJGN0IsIDB4MDNGQiwgMHgyRjdDLCAweDAzRkMsDQotICAgIDB4MkY3RCwgMHgwM0ZFLCAweDJGN0UsIDB4MDNGRiwgMHgyRjdGLCAweDA0MDAsIDB4MkY4MCwgMHgwNDAxLA0KLSAgICAweDJGODEsIDB4MDQwMiwgMHgyRjgyLCAweDA0MDUsIDB4MkY4MywgMHgwNDA2LCAweDJGODQsIDB4MDQwNywNCi0gICAgMHgyRjg1LCAweDA0MDgsIDB4MkY4NiwgMHgwNDA5LCAweDJGODcsIDB4MDQwQSwgMHgyRjg4LCAweDA0MEIsDQotICAgIDB4MkY4OSwgMHgwNDBDLCAweDJGOEEsIDB4MDQwRCwgMHgyRjhCLCAweDE4MTMsIDB4MkY4QywgMHgxODE4LA0KLSAgICAweDJGOEQsIDB4MDQwRiwgMHgyRjhFLCAweDA0MTAsIDB4MkY4RiwgMHgwNDExLCAweDJGOTAsIDB4MDQxMiwNCi0gICAgMHgyRjkxLCAweDE4MTksIDB4MkY5MiwgMHgwNTA4LCAweDJGOTMsIDB4MDUwOSwgMHgyRjk0LCAweDA1MEEsDQotICAgIDB4MkY5NSwgMHgwNTBCLCAweDJGOTYsIDB4MDUwQywgMHgyRjk3LCAweDA1MEQsIDB4MkY5OCwgMHgxOEU3LA0KLSAgICAweDJGOTksIDB4MDUwRSwgMHgyRjlBLCAweDA1MEYsIDB4MkY5QiwgMHgwNTEwLCAweDJGOUMsIDB4MDUxMSwNCi0gICAgMHgyRjlELCAweDA1MTIsIDB4MkY5RSwgMHgwNTEzLCAweDJGOUYsIDB4MDUxNCwgMHgyRkEwLCAweDA1MTUsDQotICAgIDB4MkZBMSwgMHgwMjMwLCAweDJGQTIsIDB4MDUxQiwgMHgyRkEzLCAweDA1MjAsIDB4MkZBNCwgMHgwNTIxLA0KLSAgICAweDJGQTUsIDB4MDUyMiwgMHgyRkE2LCAweDA2OTYsIDB4MkZBNywgMHgwNjk3LCAweDJGQTgsIDB4MDY5OCwNCi0gICAgMHgyRkE5LCAweDA2OTksIDB4MkZBQSwgMHgwMjMxLCAweDJGQUIsIDB4MDY5RiwgMHgyRkFDLCAweDA2QTAsDQotICAgIDB4MkZBRSwgMHgwNkEyLCAweDJGQUYsIDB4MDgyNiwgMHgyRkIwLCAweDA4MjcsIDB4MkZCMSwgMHgwODI4LA0KLSAgICAweDJGQjIsIDB4MDgyOSwgMHgyRkIzLCAweDA4MkEsIDB4MkZCNCwgMHgwODJCLCAweDJGQjUsIDB4MDgyQywNCi0gICAgMHgyRkI2LCAweDA4MkQsIDB4MkZCNywgMHgwODJFLCAweDJGQjgsIDB4MDgyRiwgMHgyRkI5LCAweDA4MzAsDQotICAgIDB4MkZCQSwgMHgwOUY1LCAweDJGQkIsIDB4MDlGNiwgMHgyRkJDLCAweDA5RjcsIDB4MkZCRCwgMHgxRTMzLA0KLSAgICAweDJGQkUsIDB4MDlGOCwgMHgyRkJGLCAweDFFMzQsIDB4MkZDMCwgMHgwOUY5LCAweDJGQzEsIDB4MDlGQSwNCi0gICAgMHgyRkMyLCAweDBCRTEsIDB4MkZDMywgMHgwQkUyLCAweDJGQzQsIDB4MEJFMywgMHgyRkM1LCAweDBCRTQsDQotICAgIDB4MkZDNiwgMHgwQkU1LCAweDJGQzcsIDB4MEJFNiwgMHgyRkM4LCAweDBEQkIsIDB4MkZDOSwgMHgwREJDLA0KLSAgICAweDJGQ0EsIDB4MERCRCwgMHgyRkNCLCAweDIzNjAsIDB4MkZDQywgMHgyNjEyLCAweDJGQ0QsIDB4MEY3QiwNCi0gICAgMHgyRkNFLCAweDBGN0MsIDB4MkZDRiwgMHgwRjdELCAweDJGRDAsIDB4MTEwMCwgMHgyRkQxLCAweDExMDEsDQotICAgIDB4MkZEMiwgMHgxMjg5LCAweDJGRDMsIDB4MTNCMiwgMHgyRkQ0LCAweDEzQjMsIDB4MkZENSwgMHgyRjBELA0KLSAgICAweDMwMDAsIDB4MDA2MywgMHgzMDAxLCAweDAwNjUsIDB4MzAwMiwgMHgwMDY2LCAweDMwMDMsIDB4MDBCMywNCi0gICAgMHgzMDA1LCAweDM1QkEsIDB4MzAwNiwgMHgzNUJCLCAweDMwMDcsIDB4MzVCQywgMHgzMDA4LCAweDAwOTQsDQotICAgIDB4MzAwOSwgMHgwMDk1LCAweDMwMEEsIDB4MDA5MCwgMHgzMDBCLCAweDAwOTEsIDB4MzAwQywgMHgwMDk4LA0KLSAgICAweDMwMEQsIDB4MDA5OSwgMHgzMDBFLCAweDAwOUMsIDB4MzAwRiwgMHgwMDlELCAweDMwMTAsIDB4MDA4QywNCi0gICAgMHgzMDExLCAweDAwOEQsIDB4MzAxMiwgMHgwMTA1LCAweDMwMTQsIDB4MDA4OCwgMHgzMDE1LCAweDAwODksDQotICAgIDB4MzAxRCwgMHgwMEFBLCAweDMwMUUsIDB4MDBBQiwgMHgzMDIxLCAweDAxNjEsIDB4MzAyMiwgMHgwMTYyLA0KLSAgICAweDMwMjMsIDB4MDE2MywgMHgzMDI0LCAweDAxNjQsIDB4MzAyNSwgMHgwMTY1LCAweDMwMjYsIDB4MDE2NiwNCi0gICAgMHgzMDI3LCAweDAxNjcsIDB4MzAyOCwgMHgwMTY4LCAweDMwMjksIDB4MDE2OSwgMHgzMDM4LCAweDAxNkEsDQotICAgIDB4MzAzOSwgMHgwMTZCLCAweDMwM0EsIDB4MDE2QywgMHgzMDQxLCAweDM1QzEsIDB4MzA0MiwgMHgzNUMyLA0KLSAgICAweDMwNDMsIDB4MzVDMywgMHgzMDQ0LCAweDM1QzQsIDB4MzA0NSwgMHgzNUM1LCAweDMwNDYsIDB4MzVDNiwNCi0gICAgMHgzMDQ3LCAweDM1QzcsIDB4MzA0OCwgMHgzNUM4LCAweDMwNDksIDB4MzVDOSwgMHgzMDRBLCAweDM1Q0EsDQotICAgIDB4MzA0QiwgMHgzNUNCLCAweDMwNEMsIDB4MzVDQywgMHgzMDRELCAweDM1Q0QsIDB4MzA0RSwgMHgzNUNFLA0KLSAgICAweDMwNEYsIDB4MzVDRiwgMHgzMDUwLCAweDM1RDAsIDB4MzA1MSwgMHgzNUQxLCAweDMwNTIsIDB4MzVEMiwNCi0gICAgMHgzMDUzLCAweDM1RDMsIDB4MzA1NCwgMHgzNUQ0LCAweDMwNTUsIDB4MzVENSwgMHgzMDU2LCAweDM1RDYsDQotICAgIDB4MzA1NywgMHgzNUQ3LCAweDMwNTgsIDB4MzVEOCwgMHgzMDU5LCAweDM1RDksIDB4MzA1QSwgMHgzNURBLA0KLSAgICAweDMwNUIsIDB4MzVEQiwgMHgzMDVDLCAweDM1REMsIDB4MzA1RCwgMHgzNURELCAweDMwNUUsIDB4MzVERSwNCi0gICAgMHgzMDVGLCAweDM1REYsIDB4MzA2MCwgMHgzNUUwLCAweDMwNjEsIDB4MzVFMSwgMHgzMDYyLCAweDM1RTIsDQotICAgIDB4MzA2MywgMHgzNUUzLCAweDMwNjQsIDB4MzVFNCwgMHgzMDY1LCAweDM1RTUsIDB4MzA2NiwgMHgzNUU2LA0KLSAgICAweDMwNjcsIDB4MzVFNywgMHgzMDY4LCAweDM1RTgsIDB4MzA2OSwgMHgzNUU5LCAweDMwNkEsIDB4MzVFQSwNCi0gICAgMHgzMDZCLCAweDM1RUIsIDB4MzA2QywgMHgzNUVDLCAweDMwNkQsIDB4MzVFRCwgMHgzMDZFLCAweDM1RUUsDQotICAgIDB4MzA2RiwgMHgzNUVGLCAweDMwNzAsIDB4MzVGMCwgMHgzMDcxLCAweDM1RjEsIDB4MzA3MiwgMHgzNUYyLA0KLSAgICAweDMwNzMsIDB4MzVGMywgMHgzMDc0LCAweDM1RjQsIDB4MzA3NSwgMHgzNUY1LCAweDMwNzYsIDB4MzVGNiwNCi0gICAgMHgzMDc3LCAweDM1RjcsIDB4MzA3OCwgMHgzNUY4LCAweDMwNzksIDB4MzVGOSwgMHgzMDdBLCAweDM1RkEsDQotICAgIDB4MzA3QiwgMHgzNUZCLCAweDMwN0MsIDB4MzVGQywgMHgzMDdELCAweDM1RkQsIDB4MzA3RSwgMHgzNUZFLA0KLSAgICAweDMwN0YsIDB4MzVGRiwgMHgzMDgwLCAweDM2MDAsIDB4MzA4MSwgMHgzNjAxLCAweDMwODIsIDB4MzYwMiwNCi0gICAgMHgzMDgzLCAweDM2MDMsIDB4MzA4NCwgMHgzNjA0LCAweDMwODUsIDB4MzYwNSwgMHgzMDg2LCAweDM2MDYsDQotICAgIDB4MzA4NywgMHgzNjA3LCAweDMwODgsIDB4MzYwOCwgMHgzMDg5LCAweDM2MDksIDB4MzA4QSwgMHgzNjBBLA0KLSAgICAweDMwOEIsIDB4MzYwQiwgMHgzMDhDLCAweDM2MEMsIDB4MzA4RCwgMHgzNjBELCAweDMwOEUsIDB4MzYwRSwNCi0gICAgMHgzMDhGLCAweDM2MEYsIDB4MzA5MCwgMHgzNjEwLCAweDMwOTEsIDB4MzYxMSwgMHgzMDkyLCAweDM2MTIsDQotICAgIDB4MzA5MywgMHgzNjEzLCAweDMwOUQsIDB4MzVCNywgMHgzMDlFLCAweDM1QjgsIDB4MzBBMSwgMHgzNjE0LA0KLSAgICAweDMwQTIsIDB4MzYxNSwgMHgzMEEzLCAweDM2MTYsIDB4MzBBNCwgMHgzNjE3LCAweDMwQTUsIDB4MzYxOCwNCi0gICAgMHgzMEE2LCAweDM2MTksIDB4MzBBNywgMHgzNjFBLCAweDMwQTgsIDB4MzYxQiwgMHgzMEE5LCAweDM2MUMsDQotICAgIDB4MzBBQSwgMHgzNjFELCAweDMwQUIsIDB4MzYxRSwgMHgzMEFDLCAweDM2MUYsIDB4MzBBRCwgMHgzNjIwLA0KLSAgICAweDMwQUUsIDB4MzYyMSwgMHgzMEFGLCAweDM2MjIsIDB4MzBCMCwgMHgzNjIzLCAweDMwQjEsIDB4MzYyNCwNCi0gICAgMHgzMEIyLCAweDM2MjUsIDB4MzBCMywgMHgzNjI2LCAweDMwQjQsIDB4MzYyNywgMHgzMEI1LCAweDM2MjgsDQotICAgIDB4MzBCNiwgMHgzNjI5LCAweDMwQjcsIDB4MzYyQSwgMHgzMEI4LCAweDM2MkIsIDB4MzBCOSwgMHgzNjJDLA0KLSAgICAweDMwQkEsIDB4MzYyRCwgMHgzMEJCLCAweDM2MkUsIDB4MzBCQywgMHgzNjJGLCAweDMwQkQsIDB4MzYzMCwNCi0gICAgMHgzMEJFLCAweDM2MzEsIDB4MzBCRiwgMHgzNjMyLCAweDMwQzAsIDB4MzYzMywgMHgzMEMxLCAweDM2MzQsDQotICAgIDB4MzBDMiwgMHgzNjM1LCAweDMwQzMsIDB4MzYzNiwgMHgzMEM0LCAweDM2MzcsIDB4MzBDNSwgMHgzNjM4LA0KLSAgICAweDMwQzYsIDB4MzYzOSwgMHgzMEM3LCAweDM2M0EsIDB4MzBDOCwgMHgzNjNCLCAweDMwQzksIDB4MzYzQywNCi0gICAgMHgzMENBLCAweDM2M0QsIDB4MzBDQiwgMHgzNjNFLCAweDMwQ0MsIDB4MzYzRiwgMHgzMENELCAweDM2NDAsDQotICAgIDB4MzBDRSwgMHgzNjQxLCAweDMwQ0YsIDB4MzY0MiwgMHgzMEQwLCAweDM2NDMsIDB4MzBEMSwgMHgzNjQ0LA0KLSAgICAweDMwRDIsIDB4MzY0NSwgMHgzMEQzLCAweDM2NDYsIDB4MzBENCwgMHgzNjQ3LCAweDMwRDUsIDB4MzY0OCwNCi0gICAgMHgzMEQ2LCAweDM2NDksIDB4MzBENywgMHgzNjRBLCAweDMwRDgsIDB4MzY0QiwgMHgzMEQ5LCAweDM2NEMsDQotICAgIDB4MzBEQSwgMHgzNjRELCAweDMwREIsIDB4MzY0RSwgMHgzMERDLCAweDM2NEYsIDB4MzBERCwgMHgzNjUwLA0KLSAgICAweDMwREUsIDB4MzY1MSwgMHgzMERGLCAweDM2NTIsIDB4MzBFMCwgMHgzNjUzLCAweDMwRTEsIDB4MzY1NCwNCi0gICAgMHgzMEUyLCAweDM2NTUsIDB4MzBFMywgMHgzNjU2LCAweDMwRTQsIDB4MzY1NywgMHgzMEU1LCAweDM2NTgsDQotICAgIDB4MzBFNiwgMHgzNjU5LCAweDMwRTcsIDB4MzY1QSwgMHgzMEU4LCAweDM2NUIsIDB4MzBFOSwgMHgzNjVDLA0KLSAgICAweDMwRUEsIDB4MzY1RCwgMHgzMEVCLCAweDM2NUUsIDB4MzBFQywgMHgzNjVGLCAweDMwRUQsIDB4MzY2MCwNCi0gICAgMHgzMEVFLCAweDM2NjEsIDB4MzBFRiwgMHgzNjYyLCAweDMwRjAsIDB4MzY2MywgMHgzMEYxLCAweDM2NjQsDQotICAgIDB4MzBGMiwgMHgzNjY1LCAweDMwRjMsIDB4MzY2NiwgMHgzMEY0LCAweDM2NjcsIDB4MzBGNSwgMHgzNjY4LA0KLSAgICAweDMwRjYsIDB4MzY2OSwgMHgzMEZDLCAweDM1QkQsIDB4MzBGRCwgMHgzNUI1LCAweDMwRkUsIDB4MzVCNiwNCi0gICAgMHgzMTA1LCAweDAxRDEsIDB4MzEwNiwgMHgwMUQyLCAweDMxMDcsIDB4MDFEMywgMHgzMTA4LCAweDAxRDQsDQotICAgIDB4MzEwOSwgMHgwMUQ1LCAweDMxMEEsIDB4MDFENiwgMHgzMTBCLCAweDAxRDcsIDB4MzEwQywgMHgwMUQ4LA0KLSAgICAweDMxMEQsIDB4MDFEOSwgMHgzMTBFLCAweDAxREEsIDB4MzEwRiwgMHgwMURCLCAweDMxMTAsIDB4MDFEQywNCi0gICAgMHgzMTExLCAweDAxREQsIDB4MzExMiwgMHgwMURFLCAweDMxMTMsIDB4MDFERiwgMHgzMTE0LCAweDAxRTAsDQotICAgIDB4MzExNSwgMHgwMUUxLCAweDMxMTYsIDB4MDFFMiwgMHgzMTE3LCAweDAxRTMsIDB4MzExOCwgMHgwMUU0LA0KLSAgICAweDMxMTksIDB4MDFFNSwgMHgzMTFBLCAweDAxRTYsIDB4MzExQiwgMHgwMUU3LCAweDMxMUMsIDB4MDFFOCwNCi0gICAgMHgzMTFELCAweDAxRTksIDB4MzExRSwgMHgwMUVBLCAweDMxMUYsIDB4MDFFQiwgMHgzMTIwLCAweDAxRUMsDQotICAgIDB4MzEyMSwgMHgwMUVELCAweDMxMjIsIDB4MDFFRSwgMHgzMTIzLCAweDAxRUYsIDB4MzEyNCwgMHgwMUYwLA0KLSAgICAweDMxMjUsIDB4MDFGMSwgMHgzMTI2LCAweDAxRjIsIDB4MzEyNywgMHgwMUYzLCAweDMxMjgsIDB4MDFGNCwNCi0gICAgMHgzMTI5LCAweDAxRjUsIDB4MzIzMSwgMHgzNkU1LCAweDMyQTMsIDB4MDBDMSwgMHgzMzhFLCAweDAxMTUsDQotICAgIDB4MzM4RiwgMHgwMTE2LCAweDMzOUMsIDB4MDExMCwgMHgzMzlELCAweDAxMTEsIDB4MzM5RSwgMHgwMTEyLA0KLSAgICAweDMzQTEsIDB4MDExNCwgMHgzM0M0LCAweDAxMTcsIDB4MzNDRSwgMHgwMTEzLCAweDMzRDEsIDB4MDBFQywNCi0gICAgMHgzM0QyLCAweDAwRUIsIDB4MzNENSwgMHgwMTBGLCAweDM2MUQsIDB4MzZCNywgMHg0NDkxLCAweDM2QjQsDQotICAgIDB4NEUwMCwgMHgwMjUzLCAweDRFMDEsIDB4MDI1NSwgMHg0RTAzLCAweDAyNTYsIDB4NEUwNywgMHgxNzcxLA0KLSAgICAweDRFMDgsIDB4MDI2OSwgMHg0RTA5LCAweDAyNjcsIDB4NEUwQSwgMHgwMjZBLCAweDRFMEIsIDB4MDI2OCwNCi0gICAgMHg0RTBDLCAweDE3NzIsIDB4NEUwRCwgMHgwMjk0LCAweDRFMEUsIDB4MTc3QSwgMHg0RTBGLCAweDE3NzgsDQotICAgIDB4NEUxMCwgMHgwMjkzLCAweDRFMTEsIDB4MDI5MiwgMHg0RTE0LCAweDAyRjIsIDB4NEUxNSwgMHgwMkYxLA0KLSAgICAweDRFMTYsIDB4MDJGMCwgMHg0RTE4LCAweDAyRjMsIDB4NEUxOSwgMHgwMkVGLCAweDRFMUUsIDB4MDM2RSwNCi0gICAgMHg0RTFGLCAweDAzNkYsIDB4NEUyNiwgMHgwNTI4LCAweDRFMjgsIDB4MDIxOCwgMHg0RTJCLCAweDAyNkIsDQotICAgIDB4NEUyRCwgMHgwMjk1LCAweDRFMkUsIDB4MTc3QiwgMHg0RTMwLCAweDAyOTYsIDB4NEUzMSwgMHgxNzhFLA0KLSAgICAweDRFMzIsIDB4MDQxNSwgMHg0RTMzLCAweDE4RjQsIDB4NEUzNiwgMHgwMjE5LCAweDRFMzgsIDB4MDI2QywNCi0gICAgMHg0RTM5LCAweDAyOTcsIDB4NEUzQiwgMHgwMkY0LCAweDRFM0MsIDB4MTc4RiwgMHg0RTNGLCAweDAyMUEsDQotICAgIDB4NEU0MSwgMHgzNkFGLCAweDRFNDIsIDB4MTc2QywgMHg0RTQzLCAweDAyNTcsIDB4NEU0NSwgMHgwMjZFLA0KLSAgICAweDRFNDcsIDB4MTc3MywgMHg0RTQ4LCAweDAyNkYsIDB4NEU0QiwgMHgwMjk4LCAweDRFNEQsIDB4MDJGNSwNCi0gICAgMHg0RTRFLCAweDAyRjcsIDB4NEU0RiwgMHgwMkY2LCAweDRFNTIsIDB4MDM3MCwgMHg0RTUzLCAweDAzNzEsDQotICAgIDB4NEU1NiwgMHgwNTI5LCAweDRFNTgsIDB4MDgzMSwgMHg0RTU5LCAweDAyNTQsIDB4NEU1QSwgMHgzNkIxLA0KLSAgICAweDRFNUMsIDB4MTc2RCwgMHg0RTVELCAweDAyNTgsIDB4NEU1RSwgMHgwMjcxLCAweDRFNUYsIDB4MDI3MCwNCi0gICAgMHg0RTY5LCAweDAzNzIsIDB4NEU3MywgMHgwNTJBLCAweDRFN0UsIDB4MDlGQiwgMHg0RTdGLCAweDFFMzUsDQotICAgIDB4NEU4MiwgMHgwREJFLCAweDRFODMsIDB4MjM2MSwgMHg0RTg0LCAweDIzNjIsIDB4NEU4NSwgMHgwMjFCLA0KLSAgICAweDRFODYsIDB4MDI1OSwgMHg0RTg4LCAweDAyOUEsIDB4NEU4QiwgMHgwNTJCLCAweDRFOEMsIDB4MDI1QSwNCi0gICAgMHg0RThELCAweDE3NzQsIDB4NEU4RSwgMHgwMjcyLCAweDRFOTEsIDB4MDI5QiwgMHg0RTkyLCAweDAyOUQsDQotICAgIDB4NEU5MywgMHgxNzdDLCAweDRFOTQsIDB4MDI5RSwgMHg0RTk1LCAweDAyOUMsIDB4NEU5OSwgMHgwMzczLA0KLSAgICAweDRFOUIsIDB4MDUyQywgMHg0RTlFLCAweDA1MkQsIDB4NEU5RiwgMHgwNkEzLCAweDRFQTAsIDB4MDIxQywNCi0gICAgMHg0RUExLCAweDAyNzMsIDB4NEVBMiwgMHgwMjlGLCAweDRFQTQsIDB4MDM3NCwgMHg0RUE1LCAweDAzNzYsDQotICAgIDB4NEVBNiwgMHgwMzc1LCAweDRFQTgsIDB4MDQxNiwgMHg0RUFCLCAweDA1MkUsIDB4NEVBQywgMHgwNTJGLA0KLSAgICAweDRFQUQsIDB4MDZBNCwgMHg0RUFFLCAweDA2QTUsIDB4NEVCMywgMHgwODMyLCAweDRFQjYsIDB4MjM2MywNCi0gICAgMHg0RUI5LCAweDMzNzcsIDB4NEVCQSwgMHgwMjVCLCAweDRFQzAsIDB4MDJBMSwgMHg0RUMxLCAweDAyQTAsDQotICAgIDB4NEVDMiwgMHgxNzdELCAweDRFQzMsIDB4MDJBMiwgMHg0RUM0LCAweDAyQTgsIDB4NEVDNiwgMHgwMkEzLA0KLSAgICAweDRFQzcsIDB4MDJBNCwgMHg0RUM4LCAweDE3N0YsIDB4NEVDOSwgMHgxNzdFLCAweDRFQ0EsIDB4MDJBNiwNCi0gICAgMHg0RUNCLCAweDAyQTcsIDB4NEVDRCwgMHgwMkE1LCAweDRFRDQsIDB4MDJGQSwgMHg0RUQ1LCAweDAyRkIsDQotICAgIDB4NEVENiwgMHgwMkZDLCAweDRFRDcsIDB4MDJGRCwgMHg0RUQ4LCAweDAyRjksIDB4NEVEOSwgMHgwMzAwLA0KLSAgICAweDRFREEsIDB4MTc5NSwgMHg0RURDLCAweDE3OTEsIDB4NEVERCwgMHgxNzk0LCAweDRFREUsIDB4MDMwMSwNCi0gICAgMHg0RURGLCAweDAzMTEsIDB4NEVFMSwgMHgxNzkzLCAweDRFRTMsIDB4MDJGRSwgMHg0RUU0LCAweDAyRkYsDQotICAgIDB4NEVFNSwgMHgwMkY4LCAweDRFRTgsIDB4MTc5MCwgMHg0RUU5LCAweDE3OTIsIDB4NEVGMCwgMHgwMzgzLA0KLSAgICAweDRFRjEsIDB4MTdCQSwgMHg0RUYyLCAweDAzODAsIDB4NEVGMywgMHgwMzg0LCAweDRFRjQsIDB4MTdDNCwNCi0gICAgMHg0RUY1LCAweDE3QjgsIDB4NEVGNiwgMHgwMzgxLCAweDRFRjcsIDB4MTdCQywgMHg0RUZCLCAweDAzODIsDQotICAgIDB4NEVGRCwgMHgwMzg1LCAweDRFRkYsIDB4MDM3NywgMHg0RjAwLCAweDE3QkIsIDB4NEYwMSwgMHgwMzg2LA0KLSAgICAweDRGMDIsIDB4MTdCRiwgMHg0RjA0LCAweDE3QzMsIDB4NEYwNSwgMHgxN0MwLCAweDRGMDgsIDB4MTdCRCwNCi0gICAgMHg0RjA5LCAweDAzNzgsIDB4NEYwQSwgMHgwMzdBLCAweDRGMEIsIDB4MDM4NywgMHg0RjBELCAweDAzN0MsDQotICAgIDB4NEYwRSwgMHgxN0I1LCAweDRGMEYsIDB4MDM3RiwgMHg0RjEwLCAweDAzN0QsIDB4NEYxMSwgMHgwMzdFLA0KLSAgICAweDRGMTIsIDB4MTdDNSwgMHg0RjEzLCAweDE3QzIsIDB4NEYxNCwgMHgxN0I5LCAweDRGMTUsIDB4MDM3QiwNCi0gICAgMHg0RjE4LCAweDE3QjYsIDB4NEYxOSwgMHgwMzc5LCAweDRGMUQsIDB4MTdCRSwgMHg0RjIyLCAweDE3QzEsDQotICAgIDB4NEYyQywgMHgxN0I3LCAweDRGMkQsIDB4MTgyRiwgMHg0RjJGLCAweDA0MkMsIDB4NEYzMCwgMHgwNDFGLA0KLSAgICAweDRGMzMsIDB4MTgzMCwgMHg0RjM0LCAweDA0MUMsIDB4NEYzNiwgMHgwNDJFLCAweDRGMzgsIDB4MDQyNCwNCi0gICAgMHg0RjNBLCAweDA0MjMsIDB4NEYzQiwgMHgxODI0LCAweDRGM0MsIDB4MDQyNywgMHg0RjNELCAweDA0MjIsDQotICAgIDB4NEYzRSwgMHgxODI5LCAweDRGM0YsIDB4MTgzMSwgMHg0RjQxLCAweDE4MkQsIDB4NEY0MywgMHgwNDI1LA0KLSAgICAweDRGNDYsIDB4MDQyOCwgMHg0RjQ3LCAweDA0MTksIDB4NEY0OCwgMHgwNDMxLCAweDRGNDksIDB4MTgyNiwNCi0gICAgMHg0RjRDLCAweDE5MDAsIDB4NEY0RCwgMHgwNDE3LCAweDRGNEUsIDB4MDQyRCwgMHg0RjRGLCAweDA0MTgsDQotICAgIDB4NEY1MCwgMHgwNDIwLCAweDRGNTEsIDB4MDQyMSwgMHg0RjUyLCAweDE4MkIsIDB4NEY1MywgMHgxODI3LA0KLSAgICAweDRGNTQsIDB4MDQyNiwgMHg0RjU1LCAweDA0MUUsIDB4NEY1NiwgMHgxODIzLCAweDRGNTcsIDB4MDQxQSwNCi0gICAgMHg0RjU4LCAweDE4MkUsIDB4NEY1OSwgMHgwNDJGLCAweDRGNUEsIDB4MDQzMiwgMHg0RjVCLCAweDA0MUQsDQotICAgIDB4NEY1QywgMHgwNDJBLCAweDRGNUQsIDB4MDQzMCwgMHg0RjVFLCAweDA0MUIsIDB4NEY1RiwgMHgxODJDLA0KLSAgICAweDRGNjAsIDB4MDQyQiwgMHg0RjYxLCAweDE4MzIsIDB4NEY2MiwgMHgxODI1LCAweDRGNjMsIDB4MDQyOSwNCi0gICAgMHg0RjY0LCAweDE4MjgsIDB4NEY2NywgMHgxODJBLCAweDRGNjksIDB4MDUzRCwgMHg0RjZBLCAweDE5MDIsDQotICAgIDB4NEY2QiwgMHgxOTBFLCAweDRGNkMsIDB4MDUzNSwgMHg0RjZFLCAweDE5MEYsIDB4NEY2RiwgMHgwNTMwLA0KLSAgICAweDRGNzAsIDB4MDUzQSwgMHg0RjczLCAweDA1MzMsIDB4NEY3NCwgMHgxOEZDLCAweDRGNzUsIDB4MDUzQiwNCi0gICAgMHg0Rjc2LCAweDE4RkIsIDB4NEY3NywgMHgxOEZGLCAweDRGNzgsIDB4MTkwNiwgMHg0Rjc5LCAweDE5MDQsDQotICAgIDB4NEY3QSwgMHgwNTQzLCAweDRGN0IsIDB4MDUzRSwgMHg0RjdDLCAweDE4RjYsIDB4NEY3RCwgMHgxOEY4LA0KLSAgICAweDRGN0UsIDB4MDU0MCwgMHg0RjdGLCAweDA1MzQsIDB4NEY4MCwgMHgxOEY5LCAweDRGODEsIDB4MTkwNSwNCi0gICAgMHg0RjgyLCAweDE5MEMsIDB4NEY4MywgMHgwNTM5LCAweDRGODQsIDB4MThGRSwgMHg0Rjg1LCAweDE4RjcsDQotICAgIDB4NEY4NiwgMHgwNTM4LCAweDRGODcsIDB4MThGQSwgMHg0Rjg4LCAweDA1M0MsIDB4NEY4OSwgMHgxOEZELA0KLSAgICAweDRGOEIsIDB4MDUzNywgMHg0RjhELCAweDA1MzIsIDB4NEY4RiwgMHgwNTQxLCAweDRGOTAsIDB4MTkwNywNCi0gICAgMHg0RjkxLCAweDA1NDIsIDB4NEY5MiwgMHgxOTBCLCAweDRGOTQsIDB4MTkwOSwgMHg0Rjk1LCAweDE5MEQsDQotICAgIDB4NEY5NiwgMHgwNTNGLCAweDRGOTcsIDB4MTkwMSwgMHg0Rjk4LCAweDE4RjUsIDB4NEY5QSwgMHgxOTAzLA0KLSAgICAweDRGOUIsIDB4MDUzNiwgMHg0RjlDLCAweDE5MDgsIDB4NEY5RCwgMHgwNTMxLCAweDRGOUUsIDB4MTkwQSwNCi0gICAgMHg0RkFFLCAweDA2QjQsIDB4NEZBRiwgMHgwNkE4LCAweDRGQjIsIDB4MUE1RCwgMHg0RkIzLCAweDFBNjUsDQotICAgIDB4NEZCNSwgMHgwNkE3LCAweDRGQjYsIDB4MDZBRiwgMHg0RkI3LCAweDA2QkIsIDB4NEZCOSwgMHgxQTZCLA0KLSAgICAweDRGQkEsIDB4MUE2OSwgMHg0RkJCLCAweDFBNjQsIDB4NEZCRiwgMHgwNkE5LCAweDRGQzAsIDB4MUE2QSwNCi0gICAgMHg0RkMxLCAweDFBNjAsIDB4NEZDMiwgMHgwNkI3LCAweDRGQzMsIDB4MDZBRSwgMHg0RkM0LCAweDA2QjYsDQotICAgIDB4NEZDNSwgMHgxQTVCLCAweDRGQzcsIDB4MUE2NywgMHg0RkM5LCAweDFBNUUsIDB4NEZDQSwgMHgwNkIyLA0KLSAgICAweDRGQ0IsIDB4MUE1RiwgMHg0RkNELCAweDFBNUEsIDB4NEZDRSwgMHgwNkI5LCAweDRGQ0YsIDB4MDZBQywNCi0gICAgMHg0RkQwLCAweDA2QjUsIDB4NEZEMSwgMHgwNkFCLCAweDRGRDMsIDB4MUE1QywgMHg0RkQ0LCAweDFBNjEsDQotICAgIDB4NEZENiwgMHgxQTY4LCAweDRGRDcsIDB4MDZCMywgMHg0RkQ4LCAweDA2QjAsIDB4NEZEOSwgMHgxQTYzLA0KLSAgICAweDRGREEsIDB4MDZCOCwgMHg0RkRCLCAweDFBNjYsIDB4NEZEQywgMHgxQTYyLCAweDRGREQsIDB4MDZBRCwNCi0gICAgMHg0RkRFLCAweDA2QkEsIDB4NEZERiwgMHgwNkIxLCAweDRGRTAsIDB4MDZBQSwgMHg0RkUxLCAweDA2QTYsDQotICAgIDB4NEZFQywgMHgxQTZDLCAweDRGRUUsIDB4MDg0QywgMHg0RkVGLCAweDA4MzYsIDB4NEZGMSwgMHgwODQ2LA0KLSAgICAweDRGRjMsIDB4MDg0QiwgMHg0RkY0LCAweDFDMjQsIDB4NEZGNSwgMHgxQzIzLCAweDRGRjYsIDB4MUMyOCwNCi0gICAgMHg0RkY3LCAweDFDMjksIDB4NEZGOCwgMHgwODM5LCAweDRGRkEsIDB4MDg0MiwgMHg0RkZFLCAweDA4NEYsDQotICAgIDB4NTAwMCwgMHgwODQzLCAweDUwMDUsIDB4MUMxRCwgMHg1MDA2LCAweDA4M0MsIDB4NTAwNywgMHgxQzFFLA0KLSAgICAweDUwMDksIDB4MDg1MSwgMHg1MDBCLCAweDA4NDgsIDB4NTAwQywgMHgwODMzLCAweDUwMEQsIDB4MDgzNCwNCi0gICAgMHg1MDBFLCAweDFDMzEsIDB4NTAwRiwgMHgwQTBDLCAweDUwMTEsIDB4MDg0MSwgMHg1MDEyLCAweDA4NDAsDQotICAgIDB4NTAxMywgMHgxQzFGLCAweDUwMTQsIDB4MDg0NCwgMHg1MDE1LCAweDFFNDUsIDB4NTAxNiwgMHgwODNCLA0KLSAgICAweDUwMTcsIDB4MUMyQSwgMHg1MDE4LCAweDA4NEEsIDB4NTAxOSwgMHgwODQ5LCAweDUwMUEsIDB4MDgzRiwNCi0gICAgMHg1MDFCLCAweDFDMjIsIDB4NTAxQywgMHgxQzJCLCAweDUwMUUsIDB4MUMxQywgMHg1MDFGLCAweDA4M0UsDQotICAgIDB4NTAyMCwgMHgxQzJDLCAweDUwMjEsIDB4MDg0NywgMHg1MDIyLCAweDFDMjAsIDB4NTAyMywgMHgwODM1LA0KLSAgICAweDUwMjUsIDB4MDgzOCwgMHg1MDI2LCAweDA4MzcsIDB4NTAyNywgMHgxQzJELCAweDUwMjgsIDB4MDg0NSwNCi0gICAgMHg1MDI5LCAweDA4M0EsIDB4NTAyQSwgMHgwODRFLCAweDUwMkIsIDB4MDg1MCwgMHg1MDJDLCAweDFDMjcsDQotICAgIDB4NTAyRCwgMHgwODRELCAweDUwMkYsIDB4MUMyRiwgMHg1MDMwLCAweDFDMjEsIDB4NTAzMSwgMHgxQzMwLA0KLSAgICAweDUwMzMsIDB4MUMyNSwgMHg1MDM1LCAweDFDMkUsIDB4NTAzNywgMHgxQzI2LCAweDUwM0MsIDB4MDgzRCwNCi0gICAgMHg1MDQwLCAweDFFNEQsIDB4NTA0MSwgMHgxRTQxLCAweDUwNDMsIDB4MEEwMCwgMHg1MDQ1LCAweDFFNDYsDQotICAgIDB4NTA0NiwgMHgxRTRDLCAweDUwNDcsIDB4MDlGRiwgMHg1MDQ4LCAweDFFM0YsIDB4NTA0OSwgMHgwQTAzLA0KLSAgICAweDUwNEEsIDB4MUU0MywgMHg1MDRCLCAweDFFM0MsIDB4NTA0QywgMHgwQTAxLCAweDUwNEQsIDB4MUU0MCwNCi0gICAgMHg1MDRFLCAweDBBMDYsIDB4NTA0RiwgMHgwQTBCLCAweDUwNTEsIDB4MUU1MSwgMHg1MDUzLCAweDFFM0IsDQotICAgIDB4NTA1NSwgMHgwQTA3LCAweDUwNTcsIDB4MUU1MCwgMHg1MDVBLCAweDBBMDIsIDB4NTA1QiwgMHgxRTQyLA0KLSAgICAweDUwNUMsIDB4MDlGRSwgMHg1MDVELCAweDFFM0QsIDB4NTA1RSwgMHgxRTM5LCAweDUwNUYsIDB4MUU0NywNCi0gICAgMHg1MDYwLCAweDFFM0EsIDB4NTA2MSwgMHgxRTM4LCAweDUwNjIsIDB4MUU0NCwgMHg1MDYzLCAweDFFNEEsDQotICAgIDB4NTA2NCwgMHgxRTRCLCAweDUwNjUsIDB4MEEwNCwgMHg1MDY4LCAweDIwQjgsIDB4NTA2OSwgMHgxRTQ4LA0KLSAgICAweDUwNkEsIDB4MUUzNywgMHg1MDZCLCAweDFFNDksIDB4NTA2RCwgMHgwQTBFLCAweDUwNkUsIDB4MUU0RSwNCi0gICAgMHg1MDZGLCAweDBBMEQsIDB4NTA3MCwgMHgxRTM2LCAweDUwNzIsIDB4MUUzRSwgMHg1MDczLCAweDFFNEYsDQotICAgIDB4NTA3NCwgMHgwQTA5LCAweDUwNzUsIDB4MEEwOCwgMHg1MDc2LCAweDBBMDUsIDB4NTA3NywgMHgwQTBBLA0KLSAgICAweDUwN0EsIDB4MDlGQywgMHg1MDdELCAweDA5RkQsIDB4NTA4MCwgMHgwQkVDLCAweDUwODIsIDB4MjBCQiwNCi0gICAgMHg1MDgzLCAweDIwQjQsIDB4NTA4NSwgMHgwQkU5LCAweDUwODcsIDB4MjBCQywgMHg1MDhCLCAweDIwQjIsDQotICAgIDB4NTA4QywgMHgyMEI1LCAweDUwOEQsIDB4MEJFOCwgMHg1MDhFLCAweDIwQjYsIDB4NTA5MSwgMHgwQkVCLA0KLSAgICAweDUwOTIsIDB4MjBCQSwgMHg1MDk0LCAweDIwQjAsIDB4NTA5NSwgMHgyMEFGLCAweDUwOTYsIDB4MEJFRCwNCi0gICAgMHg1MDk4LCAweDBCRUUsIDB4NTA5OSwgMHgwQkVBLCAweDUwOUEsIDB4MEJFRiwgMHg1MDlCLCAweDIwQUUsDQotICAgIDB4NTA5QywgMHgyMEI5LCAweDUwOUQsIDB4MjBCNywgMHg1MDlFLCAweDIwQjEsIDB4NTBBMiwgMHgwQkU3LA0KLSAgICAweDUwQTMsIDB4MjBCMywgMHg1MEFDLCAweDBEQzUsIDB4NTBBRCwgMHgwREJGLCAweDUwQUUsIDB4MjM2NywNCi0gICAgMHg1MEFGLCAweDBEQzgsIDB4NTBCMCwgMHgyMzZELCAweDUwQjEsIDB4MjM3MCwgMHg1MEIyLCAweDBEQzEsDQotICAgIDB4NTBCMywgMHgwREMyLCAweDUwQjQsIDB4MjM2QSwgMHg1MEI1LCAweDBEQzAsIDB4NTBCNiwgMHgyMzczLA0KLSAgICAweDUwQjcsIDB4MERDNiwgMHg1MEI4LCAweDIzNzQsIDB4NTBCQSwgMHgyMzZGLCAweDUwQkIsIDB4MERDNywNCi0gICAgMHg1MEJELCAweDIzNjQsIDB4NTBCRSwgMHgwREM0LCAweDUwQkYsIDB4MjM2NSwgMHg1MEMxLCAweDIzNkUsDQotICAgIDB4NTBDMiwgMHgyMzZDLCAweDUwQzQsIDB4MjM2OCwgMHg1MEM1LCAweDBEQzMsIDB4NTBDNiwgMHgyMzY2LA0KLSAgICAweDUwQzcsIDB4MERDOSwgMHg1MEM4LCAweDIzNkIsIDB4NTBDOSwgMHgyMzcyLCAweDUwQ0EsIDB4MjM2OSwNCi0gICAgMHg1MENCLCAweDIzNzEsIDB4NTBDRSwgMHgwRjg4LCAweDUwQ0YsIDB4MEY4NSwgMHg1MEQxLCAweDBGODYsDQotICAgIDB4NTBEMywgMHgyNjFDLCAweDUwRDQsIDB4MjYxNCwgMHg1MEQ1LCAweDBGODQsIDB4NTBENiwgMHgwRjgxLA0KLSAgICAweDUwRDcsIDB4MjYxNSwgMHg1MERBLCAweDBGODMsIDB4NTBEQiwgMHgyNjE4LCAweDUwREQsIDB4MjYxQSwNCi0gICAgMHg1MEUwLCAweDI2MjEsIDB4NTBFMywgMHgyNjIwLCAweDUwRTQsIDB4MjYxQiwgMHg1MEU1LCAweDBGODAsDQotICAgIDB4NTBFNiwgMHgyNjEzLCAweDUwRTcsIDB4MEY3RSwgMHg1MEU4LCAweDI2MTYsIDB4NTBFOSwgMHgwRjg5LA0KLSAgICAweDUwRUEsIDB4MjYxOSwgMHg1MEVDLCAweDI2MUQsIDB4NTBFRCwgMHgwRjgyLCAweDUwRUUsIDB4MEY3RiwNCi0gICAgMHg1MEVGLCAweDI2MUYsIDB4NTBGMCwgMHgyNjFFLCAweDUwRjEsIDB4MEY4NywgMHg1MEYzLCAweDI2MTcsDQotICAgIDB4NTBGNSwgMHgxMTA1LCAweDUwRjYsIDB4Mjg4MywgMHg1MEY4LCAweDI4ODAsIDB4NTBGOSwgMHgxMTA2LA0KLSAgICAweDUwRkIsIDB4MTEwNCwgMHg1MEZELCAweDI4ODcsIDB4NTBGRSwgMHgyODg0LCAweDUwRkYsIDB4Mjg3RCwNCi0gICAgMHg1MTAwLCAweDExMDMsIDB4NTEwMiwgMHgxMTA3LCAweDUxMDMsIDB4Mjg3RSwgMHg1MTA0LCAweDExMDIsDQotICAgIDB4NTEwNSwgMHgxMTBBLCAweDUxMDYsIDB4Mjg4MSwgMHg1MTA3LCAweDI4ODIsIDB4NTEwOCwgMHgxMTA4LA0KLSAgICAweDUxMDksIDB4MTEwOSwgMHg1MTBBLCAweDI4ODgsIDB4NTEwQiwgMHgyODg1LCAweDUxMEMsIDB4Mjg4NiwNCi0gICAgMHg1MTEwLCAweDEyOEQsIDB4NTExMSwgMHgyQjA0LCAweDUxMTIsIDB4MTI4QSwgMHg1MTEzLCAweDJCMDEsDQotICAgIDB4NTExNCwgMHgxMjhDLCAweDUxMTUsIDB4MTI4RSwgMHg1MTE3LCAweDJCMDIsIDB4NTExOCwgMHgxMjhCLA0KLSAgICAweDUxMUEsIDB4MkIwMywgMHg1MTFDLCAweDJCMDAsIDB4NTExRiwgMHgxM0I1LCAweDUxMjAsIDB4MkQzRSwNCi0gICAgMHg1MTIxLCAweDEzQjYsIDB4NTEyMiwgMHgyRDNDLCAweDUxMjQsIDB4MkQzRCwgMHg1MTI1LCAweDJEM0IsDQotICAgIDB4NTEyNiwgMHgyRDNBLCAweDUxMjksIDB4MkQzRiwgMHg1MTJBLCAweDEzQjQsIDB4NTEyRCwgMHgyRjBGLA0KLSAgICAweDUxMkUsIDB4MkYxMCwgMHg1MTMwLCAweDI4N0YsIDB4NTEzMSwgMHgyRjBFLCAweDUxMzIsIDB4MTNCNywNCi0gICAgMHg1MTMzLCAweDE1NzUsIDB4NTEzNCwgMHgzMDdBLCAweDUxMzUsIDB4MzA3QiwgMHg1MTM3LCAweDE2NjgsDQotICAgIDB4NTEzOCwgMHgxNjY5LCAweDUxMzksIDB4MzJDNiwgMHg1MTNBLCAweDMyQzUsIDB4NTEzQiwgMHgxNkJDLA0KLSAgICAweDUxM0MsIDB4MTZCQiwgMHg1MTNELCAweDM0MEUsIDB4NTEzRiwgMHgwMjVDLCAweDUxNDAsIDB4MDI3NCwNCi0gICAgMHg1MTQxLCAweDAyQUEsIDB4NTE0MywgMHgwMkE5LCAweDUxNDQsIDB4MDMwMywgMHg1MTQ1LCAweDAzMDIsDQotICAgIDB4NTE0NiwgMHgwMzhBLCAweDUxNDcsIDB4MDM4OSwgMHg1MTQ4LCAweDAzOEIsIDB4NTE0OSwgMHgwMzg4LA0KLSAgICAweDUxNEIsIDB4MDQzNCwgMHg1MTRDLCAweDA0MzMsIDB4NTE0RCwgMHgwNDM1LCAweDUxNTIsIDB4MDU0NSwNCi0gICAgMHg1MTU0LCAweDA1NDQsIDB4NTE1NSwgMHgwNTQ2LCAweDUxNTcsIDB4MDZCQywgMHg1MTU5LCAweDAxMTksDQotICAgIDB4NTE1QSwgMHgxQzMyLCAweDUxNUIsIDB4MDExQSwgMHg1MTVDLCAweDBBMEYsIDB4NTE1RCwgMHgwMTFDLA0KLSAgICAweDUxNUUsIDB4MDExQiwgMHg1MTVGLCAweDIwQkQsIDB4NTE2MSwgMHgwMTFELCAweDUxNjIsIDB4MEY4QSwNCi0gICAgMHg1MTYzLCAweDAxMUUsIDB4NTE2NSwgMHgwMjVELCAweDUxNjcsIDB4MDJBQiwgMHg1MTY4LCAweDAzOEMsDQotICAgIDB4NTE2OSwgMHgwNTQ3LCAweDUxNkIsIDB4MDI1RSwgMHg1MTZDLCAweDAyQUUsIDB4NTE2RCwgMHgwMkFDLA0KLSAgICAweDUxNkUsIDB4MDJBRCwgMHg1MTcxLCAweDAzOEQsIDB4NTE3NSwgMHgwNDM2LCAweDUxNzYsIDB4MDU0OSwNCi0gICAgMHg1MTc3LCAweDA1NDgsIDB4NTE3OCwgMHgwNTRBLCAweDUxN0MsIDB4MDg1MiwgMHg1MTgwLCAweDEyOEYsDQotICAgIDB4NTE4MiwgMHgwMjFELCAweDUxODcsIDB4MTc3OSwgMHg1MTg4LCAweDM2QjYsIDB4NTE4OSwgMHgwMzA0LA0KLSAgICAweDUxOEEsIDB4MDMwNSwgMHg1MThELCAweDAzOEUsIDB4NTE4RiwgMHgxODMzLCAweDUxOTEsIDB4MDZCRSwNCi0gICAgMHg1MTkyLCAweDA2QkQsIDB4NTE5MywgMHgxQzM0LCAweDUxOTQsIDB4MUMzMywgMHg1MTk1LCAweDBBMTAsDQotICAgIDB4NTE5NiwgMHgwMjFFLCAweDUxOTcsIDB4MDJBRiwgMHg1MTk4LCAweDE3ODAsIDB4NTE5RSwgMHgxOTEwLA0KLSAgICAweDUxQTAsIDB4MDZCRiwgMHg1MUEyLCAweDA4NTUsIDB4NTFBNCwgMHgwODUzLCAweDUxQTUsIDB4MDg1NCwNCi0gICAgMHg1MUFBLCAweDEyOTAsIDB4NTFBQiwgMHgwMjFGLCAweDUxQUMsIDB4MDMwNiwgMHg1MUIwLCAweDAzOEYsDQotICAgIDB4NTFCMSwgMHgxN0M2LCAweDUxQjYsIDB4MDQzNywgMHg1MUI3LCAweDA0MzgsIDB4NTFCOSwgMHgxODM0LA0KLSAgICAweDUxQkMsIDB4MTkxMSwgMHg1MUJELCAweDA1NEIsIDB4NTFCRSwgMHgxOTEyLCAweDUxQzQsIDB4MUMzNiwNCi0gICAgMHg1MUM1LCAweDFDMzcsIDB4NTFDNiwgMHgwODU4LCAweDUxQzgsIDB4MUMzOCwgMHg1MUNBLCAweDFDMzUsDQotICAgIDB4NTFDQiwgMHgwODU5LCAweDUxQ0MsIDB4MDg1NywgMHg1MUNELCAweDA4NTYsIDB4NTFDRSwgMHgxQzM5LA0KLSAgICAweDUxRDAsIDB4MUU1MiwgMHg1MUQ0LCAweDIwQkUsIDB4NTFENywgMHgyMzc1LCAweDUxRDgsIDB4MjYyMiwNCi0gICAgMHg1MURDLCAweDExMEIsIDB4NTFERCwgMHgxMjkxLCAweDUxREUsIDB4MkIwNSwgMHg1MUUwLCAweDAyNUYsDQotICAgIDB4NTFFMSwgMHgwMjZELCAweDUxRjAsIDB4MEExMSwgMHg1MUYxLCAweDBCRjEsIDB4NTFGMywgMHgwRjhCLA0KLSAgICAweDUxRjUsIDB4MTc2RSwgMHg1MUY2LCAweDAyQjAsIDB4NTFGOCwgMHgwMzA5LCAweDUxRjksIDB4MDMwNywNCi0gICAgMHg1MUZBLCAweDAzMDgsIDB4NTFGRCwgMHgwNTRDLCAweDUyMDAsIDB4MDI2MCwgMHg1MjAxLCAweDAyNjEsDQotICAgIDB4NTIwMiwgMHgzNkIzLCAweDUyMDMsIDB4MDI3NSwgMHg1MjA2LCAweDAyQjEsIDB4NTIwNywgMHgwMkIyLA0KLSAgICAweDUyMDgsIDB4MDJCMywgMHg1MjA5LCAweDE3OTcsIDB4NTIwQSwgMHgwMzBBLCAweDUyMEMsIDB4MTc5NiwNCi0gICAgMHg1MjBFLCAweDAzOTMsIDB4NTIxMCwgMHgxN0M4LCAweDUyMTEsIDB4MDM5MSwgMHg1MjEyLCAweDAzOTIsDQotICAgIDB4NTIxMywgMHgxN0M3LCAweDUyMTYsIDB4MDM5NCwgMHg1MjE3LCAweDAzOTAsIDB4NTIxQywgMHgxODM1LA0KLSAgICAweDUyMUQsIDB4MDY4QiwgMHg1MjFFLCAweDE4MzYsIDB4NTIyMSwgMHgxODM3LCAweDUyMjQsIDB4MDQzQSwNCi0gICAgMHg1MjI1LCAweDA0MzksIDB4NTIyOCwgMHgwNDNELCAweDUyMjksIDB4MDQzQiwgMHg1MjJBLCAweDA0M0MsDQotICAgIDB4NTIyRSwgMHgwNTUyLCAweDUyMzAsIDB4MDU1MSwgMHg1MjMxLCAweDE5MTcsIDB4NTIzMiwgMHgxOTE0LA0KLSAgICAweDUyMzMsIDB4MTkxNSwgMHg1MjM1LCAweDE5MTMsIDB4NTIzNiwgMHgwNTUzLCAweDUyMzcsIDB4MDU0RiwNCi0gICAgMHg1MjM4LCAweDA1NEUsIDB4NTIzQSwgMHgwNTUwLCAweDUyM0IsIDB4MDU0RCwgMHg1MjQxLCAweDA1NTQsDQotICAgIDB4NTI0MywgMHgwNkMxLCAweDUyNDQsIDB4MUE2RCwgMHg1MjQ2LCAweDE5MTYsIDB4NTI0NywgMHgwNkM2LA0KLSAgICAweDUyNDksIDB4MUE2RSwgMHg1MjRBLCAweDA2QzIsIDB4NTI0QiwgMHgwNkM1LCAweDUyNEMsIDB4MDZDNCwNCi0gICAgMHg1MjRELCAweDA2QzMsIDB4NTI0RSwgMHgwNkMwLCAweDUyNTIsIDB4MUMzQywgMHg1MjU0LCAweDA4NUMsDQotICAgIDB4NTI1NSwgMHgxQzNGLCAweDUyNTYsIDB4MDg1QSwgMHg1MjVBLCAweDFDM0IsIDB4NTI1QiwgMHgwODVELA0KLSAgICAweDUyNUMsIDB4MDg1QiwgMHg1MjVELCAweDA4NUUsIDB4NTI1RSwgMHgxQzNELCAweDUyNUYsIDB4MUMzRSwNCi0gICAgMHg1MjYxLCAweDFDM0EsIDB4NTI2MiwgMHgxQzQwLCAweDUyNjksIDB4MEJGNSwgMHg1MjZBLCAweDBBMTIsDQotICAgIDB4NTI2QiwgMHgxRTUzLCAweDUyNkMsIDB4MUU1NSwgMHg1MjZELCAweDFFNTQsIDB4NTI2RSwgMHgxRTU2LA0KLSAgICAweDUyNkYsIDB4MEExMywgMHg1MjcyLCAweDBCRjIsIDB4NTI3NCwgMHgwQkYzLCAweDUyNzUsIDB4MEJGNCwNCi0gICAgMHg1Mjc3LCAweDBEQ0IsIDB4NTI3OCwgMHgyMzc3LCAweDUyN0EsIDB4MjM3NiwgMHg1MjdCLCAweDIzNzgsDQotICAgIDB4NTI3QywgMHgyMzc5LCAweDUyN0QsIDB4MERDQywgMHg1MjdGLCAweDBEQ0EsIDB4NTI4MCwgMHgyNjIzLA0KLSAgICAweDUyODEsIDB4MjYyNCwgMHg1MjgyLCAweDBGOEQsIDB4NTI4MywgMHgwRjhDLCAweDUyODQsIDB4Mjc3NiwNCi0gICAgMHg1Mjg3LCAweDExMEMsIDB4NTI4OCwgMHgxMTBELCAweDUyODksIDB4MTEwRSwgMHg1MjhBLCAweDExMTAsDQotICAgIDB4NTI4QiwgMHgyODg5LCAweDUyOEMsIDB4Mjg4QSwgMHg1MjhELCAweDExMEYsIDB4NTI5MSwgMHgxMjkyLA0KLSAgICAweDUyOTMsIDB4MTI5MywgMHg1Mjk2LCAweDMwN0MsIDB4NTI5NywgMHgzMkM4LCAweDUyOTgsIDB4MzJDNywNCi0gICAgMHg1Mjk5LCAweDM0MEYsIDB4NTI5QiwgMHgwMjYyLCAweDUyOUYsIDB4MDMwQywgMHg1MkEwLCAweDAzMEIsDQotICAgIDB4NTJBMywgMHgwMzk1LCAweDUyQTYsIDB4MTdDOSwgMHg1MkE5LCAweDA0M0YsIDB4NTJBQSwgMHgwNDQwLA0KLSAgICAweDUyQUIsIDB4MDQzRSwgMHg1MkFDLCAweDA0NDEsIDB4NTJBRCwgMHgxODM4LCAweDUyQUUsIDB4MTgzOSwNCi0gICAgMHg1MkJCLCAweDA1NTYsIDB4NTJCQywgMHgxOTE4LCAweDUyQkUsIDB4MDU1NSwgMHg1MkMwLCAweDFBNkYsDQotICAgIDB4NTJDMSwgMHgwNkNBLCAweDUyQzIsIDB4MUE3MCwgMHg1MkMzLCAweDA2QzksIDB4NTJDNywgMHgwNkM3LA0KLSAgICAweDUyQzksIDB4MDZDOCwgMHg1MkNELCAweDFDNDEsIDB4NTJEMiwgMHgwQTE0LCAweDUyRDMsIDB4MUU1OCwNCi0gICAgMHg1MkQ1LCAweDBBMTcsIDB4NTJENiwgMHgxRTU3LCAweDUyRDcsIDB4MEFDRiwgMHg1MkQ4LCAweDBBMTYsDQotICAgIDB4NTJEOSwgMHgwQTE1LCAweDUyREIsIDB4MEJGOCwgMHg1MkRELCAweDBCRjcsIDB4NTJERSwgMHgwQkY2LA0KLSAgICAweDUyREYsIDB4MERDRCwgMHg1MkUyLCAweDBERDAsIDB4NTJFMywgMHgwREQxLCAweDUyRTQsIDB4MERDRiwNCi0gICAgMHg1MkU2LCAweDBEQ0UsIDB4NTJFOSwgMHgyNjI1LCAweDUyRUIsIDB4MjYyNiwgMHg1MkVGLCAweDI4OEMsDQotICAgIDB4NTJGMCwgMHgxMTExLCAweDUyRjEsIDB4Mjg4QiwgMHg1MkYzLCAweDEyOTQsIDB4NTJGNCwgMHgyRDQwLA0KLSAgICAweDUyRjUsIDB4MTNCOCwgMHg1MkY3LCAweDMwN0QsIDB4NTJGOCwgMHgxNjA5LCAweDUyRjksIDB4MDIyMCwNCi0gICAgMHg1MkZBLCAweDAyNzYsIDB4NTJGQiwgMHgwMkI0LCAweDUyRkMsIDB4MTc4MSwgMHg1MkZFLCAweDAyQjUsDQotICAgIDB4NTJGRiwgMHgwMkI2LCAweDUzMDUsIDB4MDMwRCwgMHg1MzA2LCAweDAzMEUsIDB4NTMwOCwgMHgwMzk2LA0KLSAgICAweDUzMDksIDB4MTgzQSwgMHg1MzBBLCAweDE5MTksIDB4NTMwQiwgMHgxOTFBLCAweDUzMEQsIDB4MDZDQiwNCi0gICAgMHg1MzBFLCAweDFDNDIsIDB4NTMwRiwgMHgwQTE5LCAweDUzMTAsIDB4MEExOCwgMHg1MzExLCAweDIwQzAsDQotICAgIDB4NTMxMiwgMHgyMEJGLCAweDUzMTUsIDB4MDI2MywgMHg1MzE2LCAweDAyQjcsIDB4NTMxNywgMHgwMzBGLA0KLSAgICAweDUzMTksIDB4MEExQSwgMHg1MzFBLCAweDE3NkYsIDB4NTMxQywgMHgxNzk4LCAweDUzMUQsIDB4MDMxMCwNCi0gICAgMHg1MzFGLCAweDE3Q0IsIDB4NTMyMCwgMHgwMzk4LCAweDUzMjEsIDB4MDM5NywgMHg1MzIyLCAweDE3Q0EsDQotICAgIDB4NTMyMywgMHgwNDQyLCAweDUzMkEsIDB4MDg1RiwgMHg1MzJELCAweDFFNTksIDB4NTMyRiwgMHgwREQyLA0KLSAgICAweDUzMzAsIDB4MjYyNywgMHg1MzMxLCAweDBGOEUsIDB4NTMzNCwgMHgyQjA2LCAweDUzMzcsIDB4MzFDNywNCi0gICAgMHg1MzM4LCAweDAyMjEsIDB4NTMzOSwgMHgwMkI4LCAweDUzM0MsIDB4MTkxQiwgMHg1MzNELCAweDFBNzEsDQotICAgIDB4NTMzRSwgMHgwQTFELCAweDUzM0YsIDB4MEExQiwgMHg1MzQwLCAweDBBMUMsIDB4NTM0MSwgMHgwMjY0LA0KLSAgICAweDUzNDMsIDB4MDI3NywgMHg1MzQ0LCAweDAxNkIsIDB4NTM0NSwgMHgwMkJCLCAweDUzNDcsIDB4MDJCQSwNCi0gICAgMHg1MzQ4LCAweDAyQjksIDB4NTM0OSwgMHgwMzEzLCAweDUzNEEsIDB4MDMxMiwgMHg1MzRDLCAweDE3OTksDQotICAgIDB4NTM0RCwgMHgxN0NDLCAweDUzNTEsIDB4MDU1QSwgMHg1MzUyLCAweDA1NTcsIDB4NTM1MywgMHgwNTU5LA0KLSAgICAweDUzNTQsIDB4MDU1OCwgMHg1MzU3LCAweDA2Q0MsIDB4NTM1QSwgMHgwQkY5LCAweDUzNUMsIDB4MDI2NSwNCi0gICAgMHg1MzVFLCAweDAyQkMsIDB4NTM2MCwgMHgwMzE1LCAweDUzNjEsIDB4MDMxNCwgMHg1MzYzLCAweDE4M0IsDQotICAgIDB4NTM2NiwgMHgwNTVCLCAweDUzNjksIDB4MDIyMiwgMHg1MzZDLCAweDE3ODIsIDB4NTM2RSwgMHgwMzE3LA0KLSAgICAweDUzNkYsIDB4MDMxNiwgMHg1MzcwLCAweDAzOTksIDB4NTM3MSwgMHgwMzlBLCAweDUzNzIsIDB4MTgzQywNCi0gICAgMHg1MzczLCAweDA0NDMsIDB4NTM3NSwgMHgwNDQ0LCAweDUzNzcsIDB4MDU1QywgMHg1Mzc4LCAweDA1NUQsDQotICAgIDB4NTM3OSwgMHgwNTVFLCAweDUzN0IsIDB4MDZDRCwgMHg1MzdDLCAweDFBNzIsIDB4NTM3RiwgMHgwODYwLA0KLSAgICAweDUzODIsIDB4MTc3MCwgMHg1Mzg0LCAweDAyQkQsIDB4NTM4QSwgMHgxN0NELCAweDUzOEUsIDB4MTgzRCwNCi0gICAgMHg1MzhGLCAweDE4M0UsIDB4NTM5MiwgMHgxOTFDLCAweDUzOTQsIDB4MTkxRCwgMHg1Mzk2LCAweDFBNzQsDQotICAgIDB4NTM5NywgMHgxQTczLCAweDUzOTgsIDB4MUE3NiwgMHg1Mzk5LCAweDFBNzUsIDB4NTM5QSwgMHgwNkNFLA0KLSAgICAweDUzOUMsIDB4MUU1QSwgMHg1MzlELCAweDA4NjIsIDB4NTM5RSwgMHgxQzQzLCAweDUzOUYsIDB4MDg2MSwNCi0gICAgMHg1M0E0LCAweDIwQzEsIDB4NTNBNSwgMHgwQkZBLCAweDUzQTcsIDB4MjBDMiwgMHg1M0FDLCAweDI2MjgsDQotICAgIDB4NTNBRCwgMHgwRjhGLCAweDUzQjIsIDB4MTExMiwgMHg1M0I0LCAweDMwN0UsIDB4NTNCNiwgMHgwMjIzLA0KLSAgICAweDUzQjksIDB4MTc4MywgMHg1M0JCLCAweDAzMTgsIDB4NTNDMywgMHgwQTFFLCAweDUzQzgsIDB4MDI2NiwNCi0gICAgMHg1M0M5LCAweDAyNzgsIDB4NTNDQSwgMHgwMkJGLCAweDUzQ0IsIDB4MDJCRSwgMHg1M0NELCAweDAyQzAsDQotICAgIDB4NTNENCwgMHgwNTYwLCAweDUzRDYsIDB4MDU1RiwgMHg1M0Q3LCAweDA1NjEsIDB4NTNEQiwgMHgwNkNGLA0KLSAgICAweDUzREYsIDB4MDg2MywgMHg1M0UxLCAweDJCMDcsIDB4NTNFMiwgMHgxNEM5LCAweDUzRTMsIDB4MDI3OSwNCi0gICAgMHg1M0U0LCAweDAzMUEsIDB4NTNFNSwgMHgwMzI5LCAweDUzRTYsIDB4MDMyNCwgMHg1M0U4LCAweDAzMUYsDQotICAgIDB4NTNFOSwgMHgwMzFFLCAweDUzRUEsIDB4MDMyNSwgMHg1M0VCLCAweDAzMjMsIDB4NTNFQywgMHgwMzFDLA0KLSAgICAweDUzRUQsIDB4MDMyQSwgMHg1M0VFLCAweDAzMUQsIDB4NTNFRiwgMHgwMzE5LCAweDUzRjAsIDB4MDMyOCwNCi0gICAgMHg1M0YxLCAweDAzMjcsIDB4NTNGMiwgMHgwMzI2LCAweDUzRjMsIDB4MDMxQiwgMHg1M0Y1LCAweDAzMjIsDQotICAgIDB4NTNGOCwgMHgwMzIxLCAweDUzRkIsIDB4MDMyQiwgMHg1M0ZDLCAweDAzMjAsIDB4NTQwMSwgMHgwM0EwLA0KLSAgICAweDU0MDMsIDB4MDNBNiwgMHg1NDA0LCAweDAzQTIsIDB4NTQwNiwgMHgwM0E4LCAweDU0MDcsIDB4MTdDRSwNCi0gICAgMHg1NDA4LCAweDAzQTUsIDB4NTQwOSwgMHgwMzlCLCAweDU0MEEsIDB4MDM5RSwgMHg1NDBCLCAweDAzQTEsDQotICAgIDB4NTQwQywgMHgwMzlELCAweDU0MEQsIDB4MDNBNCwgMHg1NDBFLCAweDAzQTcsIDB4NTQwRiwgMHgwMzlDLA0KLSAgICAweDU0MTAsIDB4MDM5RiwgMHg1NDExLCAweDAzQTMsIDB4NTQxMiwgMHgwM0E5LCAweDU0MTgsIDB4MTg0NywNCi0gICAgMHg1NDE5LCAweDE4NDQsIDB4NTQxQiwgMHgwNDUxLCAweDU0MUMsIDB4MTg0NSwgMHg1NDFELCAweDA0NDUsDQotICAgIDB4NTQxRSwgMHgwNDQ3LCAweDU0MUYsIDB4MDQ1RiwgMHg1NDIwLCAweDA0NUEsIDB4NTQyNCwgMHgxODRDLA0KLSAgICAweDU0MjUsIDB4MTg0NiwgMHg1NDI2LCAweDA0NDksIDB4NTQyNywgMHgwNDRCLCAweDU0MjgsIDB4MTg0QiwNCi0gICAgMHg1NDI5LCAweDA0NTIsIDB4NTQyQSwgMHgxODQxLCAweDU0MkIsIDB4MDQ1RSwgMHg1NDJDLCAweDA0NjAsDQotICAgIDB4NTQyRCwgMHgwNDQ2LCAweDU0MkUsIDB4MDQ1NywgMHg1NDMwLCAweDE4M0YsIDB4NTQzMSwgMHgwNDVELA0KLSAgICAweDU0MzMsIDB4MDQ0RSwgMHg1NDM1LCAweDA0NTgsIDB4NTQzNiwgMHgwNDU5LCAweDU0MzcsIDB4MTg0MCwNCi0gICAgMHg1NDM4LCAweDA0NTYsIDB4NTQzOSwgMHgwNDU0LCAweDU0M0IsIDB4MDQ1NSwgMHg1NDNDLCAweDA0NUIsDQotICAgIDB4NTQzRCwgMHgxODQ4LCAweDU0M0UsIDB4MDQ0OCwgMHg1NDQwLCAweDA0NUMsIDB4NTQ0MSwgMHgxODRBLA0KLSAgICAweDU0NDIsIDB4MDQ1MCwgMHg1NDQzLCAweDA0NEQsIDB4NTQ0NSwgMHgxODQzLCAweDU0NDYsIDB4MDQ0QywNCi0gICAgMHg1NDQ3LCAweDE4NEQsIDB4NTQ0OCwgMHgwNDRGLCAweDU0NEEsIDB4MDQ1MywgMHg1NDRFLCAweDA0NEEsDQotICAgIDB4NTQ0RiwgMHgxODQ5LCAweDU0NTQsIDB4MTg0MiwgMHg1NDYwLCAweDE5MkUsIDB4NTQ2MSwgMHgxOTJELA0KLSAgICAweDU0NjIsIDB4MDU3MywgMHg1NDYzLCAweDE5MzAsIDB4NTQ2NCwgMHgxOTMyLCAweDU0NjUsIDB4MTkyNywNCi0gICAgMHg1NDY2LCAweDE5MkEsIDB4NTQ2NywgMHgxOTMxLCAweDU0NjgsIDB4MDU3NCwgMHg1NDZCLCAweDE5MjQsDQotICAgIDB4NTQ2QywgMHgxOTI4LCAweDU0NkYsIDB4MTkyQywgMHg1NDcwLCAweDFBODUsIDB4NTQ3MSwgMHgwNTZGLA0KLSAgICAweDU0NzIsIDB4MUE4OSwgMHg1NDczLCAweDA1NjIsIDB4NTQ3NCwgMHgxOTI5LCAweDU0NzUsIDB4MDU2MywNCi0gICAgMHg1NDc2LCAweDA1NzAsIDB4NTQ3NywgMHgwNTY5LCAweDU0NzgsIDB4MDU2NSwgMHg1NDdBLCAweDE5MjUsDQotICAgIDB4NTQ3QiwgMHgwNTY4LCAweDU0N0MsIDB4MDU2RCwgMHg1NDdELCAweDA1NzYsIDB4NTQ3RSwgMHgxOTI2LA0KLSAgICAweDU0N0YsIDB4MTkxRiwgMHg1NDgwLCAweDA1NjcsIDB4NTQ4MSwgMHgxOTIwLCAweDU0ODIsIDB4MTkyMiwNCi0gICAgMHg1NDg0LCAweDA1NkEsIDB4NTQ4NiwgMHgwNTZDLCAweDU0ODcsIDB4MTkxRSwgMHg1NDg4LCAweDE5MjMsDQotICAgIDB4NTQ4QiwgMHgwNTc1LCAweDU0OEMsIDB4MDU3MSwgMHg1NDhELCAweDE5MkIsIDB4NTQ4RSwgMHgwNTc3LA0KLSAgICAweDU0OTAsIDB4MDU2RSwgMHg1NDkxLCAweDE5MjEsIDB4NTQ5MiwgMHgwNTZCLCAweDU0OTUsIDB4MDU2NiwNCi0gICAgMHg1NDk2LCAweDA1NjQsIDB4NTQ5OCwgMHgxOTJGLCAweDU0OUEsIDB4MDU3MiwgMHg1NEEwLCAweDFBODQsDQotICAgIDB4NTRBMSwgMHgxQTc4LCAweDU0QTIsIDB4MUE4NywgMHg1NEE1LCAweDFBN0EsIDB4NTRBNiwgMHgwNkQ2LA0KLSAgICAweDU0QTcsIDB4MDZFNCwgMHg1NEE4LCAweDA2RDIsIDB4NTRBOSwgMHgwNkUzLCAweDU0QUEsIDB4MDZEQiwNCi0gICAgMHg1NEFCLCAweDA2RTAsIDB4NTRBQywgMHgwNkQwLCAweDU0QUQsIDB4MUE3OSwgMHg1NEFFLCAweDFBN0YsDQotICAgIDB4NTRBRiwgMHgwNkRGLCAweDU0QjAsIDB4MUE4QiwgMHg1NEIxLCAweDA2RTEsIDB4NTRCMywgMHgwNkQ3LA0KLSAgICAweDU0QjYsIDB4MUE4MSwgMHg1NEI3LCAweDFBN0UsIDB4NTRCOCwgMHgwNkQ1LCAweDU0QkEsIDB4MUE3NywNCi0gICAgMHg1NEJCLCAweDA2RTIsIDB4NTRCQywgMHgxQTg2LCAweDU0QkQsIDB4MDZEQSwgMHg1NEJFLCAweDFBODgsDQotICAgIDB4NTRCRiwgMHgwNkU1LCAweDU0QzAsIDB4MDZEMSwgMHg1NEMxLCAweDA2REMsIDB4NTRDMiwgMHgwNkQ5LA0KLSAgICAweDU0QzMsIDB4MUE3QywgMHg1NEM0LCAweDA2REQsIDB4NTRDNSwgMHgxQTgyLCAweDU0QzYsIDB4MUE4MywNCi0gICAgMHg1NEM3LCAweDA2RDgsIDB4NTRDOCwgMHgwNkRFLCAweDU0QzksIDB4MDZENCwgMHg1NENFLCAweDA2RDMsDQotICAgIDB4NTRDRiwgMHgxQTdCLCAweDU0RDYsIDB4MUE4MCwgMHg1NERFLCAweDFBOEEsIDB4NTRFMCwgMHgxQzU3LA0KLSAgICAweDU0RTEsIDB4MDg3MCwgMHg1NEUyLCAweDFDNDUsIDB4NTRFNCwgMHgxQzRBLCAweDU0RTUsIDB4MDg2OSwNCi0gICAgMHg1NEU2LCAweDA4NzQsIDB4NTRFNywgMHgxQzQ4LCAweDU0RTgsIDB4MDg2NCwgMHg1NEU5LCAweDA4NkUsDQotICAgIDB4NTRFQSwgMHgwODczLCAweDU0RUIsIDB4MUM0RiwgMHg1NEVELCAweDA4NkYsIDB4NTRFRSwgMHgwODcyLA0KLSAgICAweDU0RjEsIDB4MUM1MiwgMHg1NEYyLCAweDA4NkEsIDB4NTRGMywgMHgxQzQ5LCAweDU0RjcsIDB4MUM1NSwNCi0gICAgMHg1NEY4LCAweDFDNTYsIDB4NTRGQSwgMHgwODZDLCAweDU0RkIsIDB4MUM1NCwgMHg1NEZDLCAweDA4NjgsDQotICAgIDB4NTRGRCwgMHgwODc3LCAweDU0RkYsIDB4MUM0QywgMHg1NTAxLCAweDA4NjYsIDB4NTUwMywgMHgxQzU5LA0KLSAgICAweDU1MDQsIDB4MUM0RCwgMHg1NTA1LCAweDFDNTEsIDB4NTUwNiwgMHgwODZCLCAweDU1MDcsIDB4MDg3NiwNCi0gICAgMHg1NTA4LCAweDFDNEUsIDB4NTUwOSwgMHgwODcxLCAweDU1MEEsIDB4MUM1MywgMHg1NTBCLCAweDFDNUEsDQotICAgIDB4NTUwQywgMHgxRTY5LCAweDU1MEUsIDB4MUM1OCwgMHg1NTBGLCAweDA4NzgsIDB4NTUxMCwgMHgwODY1LA0KLSAgICAweDU1MTEsIDB4MUM1MCwgMHg1NTEyLCAweDFDNDcsIDB4NTUxNCwgMHgwODZELCAweDU1MTcsIDB4MUM0NiwNCi0gICAgMHg1NTFBLCAweDFDNEIsIDB4NTUyNiwgMHgxQzQ0LCAweDU1MjcsIDB4MDg3NSwgMHg1NTJBLCAweDFFNjEsDQotICAgIDB4NTUyQywgMHgwQTMxLCAweDU1MkQsIDB4MUU2RiwgMHg1NTJFLCAweDBBMkYsIDB4NTUyRiwgMHgwQTJDLA0KLSAgICAweDU1MzAsIDB4MUU2NiwgMHg1NTMxLCAweDBBMjgsIDB4NTUzMiwgMHgxRTZBLCAweDU1MzMsIDB4MEEzMywNCi0gICAgMHg1NTM0LCAweDFFNjAsIDB4NTUzNSwgMHgxRTY1LCAweDU1MzYsIDB4MUU2NCwgMHg1NTM3LCAweDA4NjcsDQotICAgIDB4NTUzOCwgMHgwQTJFLCAweDU1MzksIDB4MUU2RCwgMHg1NTNCLCAweDFFNzAsIDB4NTUzQywgMHgxRTVELA0KLSAgICAweDU1M0UsIDB4MEMwQywgMHg1NTQwLCAweDFFNzEsIDB4NTU0MSwgMHgwQTM0LCAweDU1NDMsIDB4MEEyNiwNCi0gICAgMHg1NTQ0LCAweDBBMjMsIDB4NTU0NSwgMHgxRTY4LCAweDU1NDYsIDB4MEEyMCwgMHg1NTQ4LCAweDFFNkUsDQotICAgIDB4NTU0QSwgMHgwQTI3LCAweDU1NEIsIDB4MUU3MiwgMHg1NTRELCAweDFFNUUsIDB4NTU0RSwgMHgxRTZDLA0KLSAgICAweDU1NEYsIDB4MEEyQSwgMHg1NTUwLCAweDFFNUYsIDB4NTU1MSwgMHgxRTYyLCAweDU1NTIsIDB4MUU2NywNCi0gICAgMHg1NTU1LCAweDBBMkIsIDB4NTU1NiwgMHgwQTI5LCAweDU1NTcsIDB4MEEzNSwgMHg1NTVDLCAweDBBMzAsDQotICAgIDB4NTU1RSwgMHgwQTI0LCAweDU1NUYsIDB4MEFCQywgMHg1NTYxLCAweDBBMjUsIDB4NTU2MiwgMHgxRTYzLA0KLSAgICAweDU1NjMsIDB4MEEzMiwgMHg1NTY0LCAweDBBMkQsIDB4NTU2NSwgMHgxRTZCLCAweDU1NjYsIDB4MEEyMiwNCi0gICAgMHg1NTZBLCAweDBBMjEsIDB4NTU3NSwgMHgxRTVCLCAweDU1NzYsIDB4MUU1QywgMHg1NTc3LCAweDIwQzcsDQotICAgIDB4NTU3QiwgMHgwQkZCLCAweDU1N0MsIDB4MEJGRSwgMHg1NTdELCAweDIwRDIsIDB4NTU3RSwgMHgwQzEyLA0KLSAgICAweDU1N0YsIDB4MjBENSwgMHg1NTgwLCAweDBCRkMsIDB4NTU4MSwgMHgyMENFLCAweDU1ODIsIDB4MEMwMiwNCi0gICAgMHg1NTgzLCAweDBDMDgsIDB4NTU4NCwgMHgwRDFCLCAweDU1ODcsIDB4MEMwNiwgMHg1NTg4LCAweDIwQ0IsDQotICAgIDB4NTU4OSwgMHgwQzEzLCAweDU1OEEsIDB4MEJGRiwgMHg1NThCLCAweDBDMDcsIDB4NTU4QywgMHgyMEQzLA0KLSAgICAweDU1OEQsIDB4MjM4NywgMHg1NThFLCAweDIwRDgsIDB4NTU4RiwgMHgyMENDLCAweDU1OTEsIDB4MjBDMywNCi0gICAgMHg1NTkyLCAweDIwRDAsIDB4NTU5MywgMHgyMENBLCAweDU1OTQsIDB4MEMwNSwgMHg1NTk1LCAweDIwRDYsDQotICAgIDB4NTU5OCwgMHgwQzAxLCAweDU1OTksIDB4MEMxNSwgMHg1NTlBLCAweDBDMEUsIDB4NTU5QywgMHgwQzAzLA0KLSAgICAweDU1OUQsIDB4MEMwMCwgMHg1NTlGLCAweDBDMEIsIDB4NTVBMSwgMHgyMEQ3LCAweDU1QTIsIDB4MjBDOSwNCi0gICAgMHg1NUEzLCAweDIwQ0YsIDB4NTVBNCwgMHgyMEQxLCAweDU1QTUsIDB4MjBDNSwgMHg1NUE2LCAweDIwRDQsDQotICAgIDB4NTVBNywgMHgwQkZELCAweDU1QTgsIDB4MjBDNCwgMHg1NUFBLCAweDBDMDQsIDB4NTVBQiwgMHgwQzE0LA0KLSAgICAweDU1QUMsIDB4MEMxMCwgMHg1NUFELCAweDIwQzYsIDB4NTVBRSwgMHgwQzBBLCAweDU1QjEsIDB4MEMxMSwNCi0gICAgMHg1NUIyLCAweDBDMEQsIDB4NTVCMywgMHgwQzA5LCAweDU1QjUsIDB4MjBDRCwgMHg1NUJCLCAweDBDMEYsDQotICAgIDB4NTVCRiwgMHgyMzg1LCAweDU1QzAsIDB4MjM4MSwgMHg1NUMyLCAweDIzOTAsIDB4NTVDMywgMHgyMzdBLA0KLSAgICAweDU1QzQsIDB4MjM4MywgMHg1NUM1LCAweDBERTAsIDB4NTVDNiwgMHgwREUxLCAweDU1QzcsIDB4MEREOSwNCi0gICAgMHg1NUM4LCAweDIzOEMsIDB4NTVDOSwgMHgwREUzLCAweDU1Q0EsIDB4MjM3RiwgMHg1NUNCLCAweDIzN0UsDQotICAgIDB4NTVDQywgMHgyMzdDLCAweDU1Q0QsIDB4MjM4RSwgMHg1NUNFLCAweDBERDcsIDB4NTVDRiwgMHgyMzg4LA0KLSAgICAweDU1RDAsIDB4MjM3RCwgMHg1NUQxLCAweDBEREEsIDB4NTVEMiwgMHgyMzg2LCAweDU1RDMsIDB4MERENSwNCi0gICAgMHg1NUQ0LCAweDIzODIsIDB4NTVENSwgMHgyMzg5LCAweDU1RDYsIDB4MjM4QiwgMHg1NUQ5LCAweDIzOEYsDQotICAgIDB4NTVEQSwgMHgwRERFLCAweDU1REIsIDB4MjM3QiwgMHg1NURDLCAweDBERDgsIDB4NTVERCwgMHgyMzgwLA0KLSAgICAweDU1REYsIDB4MEREMywgMHg1NUUxLCAweDBEREYsIDB4NTVFMiwgMHgyMzhBLCAweDU1RTMsIDB4MEREQiwNCi0gICAgMHg1NUU0LCAweDBEREMsIDB4NTVFNSwgMHgwREUyLCAweDU1RTYsIDB4MERENiwgMHg1NUU3LCAweDAxMUYsDQotICAgIDB4NTVFOCwgMHgwREQ0LCAweDU1RTksIDB4MjM4NCwgMHg1NUVGLCAweDBEREQsIDB4NTVGMiwgMHgyMzhELA0KLSAgICAweDU1RjYsIDB4MEY5RiwgMHg1NUY3LCAweDBGOUEsIDB4NTVGOSwgMHgyNjM3LCAweDU1RkEsIDB4MjYzMywNCi0gICAgMHg1NUZDLCAweDI2MkQsIDB4NTVGRCwgMHgwRjk0LCAweDU1RkUsIDB4MEY5MCwgMHg1NUZGLCAweDI2MzYsDQotICAgIDB4NTYwMCwgMHgwRjkxLCAweDU2MDEsIDB4MjYzMCwgMHg1NjAyLCAweDI2MzIsIDB4NTYwNCwgMHgyNjM1LA0KLSAgICAweDU2MDYsIDB4MEY5NiwgMHg1NjA4LCAweDBGOUQsIDB4NTYwOSwgMHgwRjk3LCAweDU2MEMsIDB4MjYyQiwNCi0gICAgMHg1NjBELCAweDBGOTgsIDB4NTYwRSwgMHgwRjk5LCAweDU2MEYsIDB4MjYyRSwgMHg1NjEwLCAweDBGOUUsDQotICAgIDB4NTYxMiwgMHgyNjJDLCAweDU2MTMsIDB4MjYzMSwgMHg1NjE0LCAweDBGOTUsIDB4NTYxNSwgMHgyNjJBLA0KLSAgICAweDU2MTYsIDB4MEY5QiwgMHg1NjE3LCAweDBGOTMsIDB4NTYxQiwgMHgwRjkyLCAweDU2MUMsIDB4MjYyRiwNCi0gICAgMHg1NjFELCAweDI2MzQsIDB4NTYxRiwgMHgwRjlDLCAweDU2MjcsIDB4MjYyOSwgMHg1NjI5LCAweDExMTksDQotICAgIDB4NTYyQSwgMHgyODlELCAweDU2MkMsIDB4Mjg5QSwgMHg1NjJFLCAweDExMTMsIDB4NTYyRiwgMHgxMTFGLA0KLSAgICAweDU2MzAsIDB4MTEyMCwgMHg1NjMyLCAweDExMTYsIDB4NTYzMywgMHgyODk4LCAweDU2MzQsIDB4MTExOCwNCi0gICAgMHg1NjM1LCAweDI4OTAsIDB4NTYzNiwgMHgxMTFFLCAweDU2MzgsIDB4Mjg5QywgMHg1NjM5LCAweDExMTUsDQotICAgIDB4NTYzQSwgMHgyODlFLCAweDU2M0IsIDB4MTExNCwgMHg1NjNELCAweDI4OTksIDB4NTYzRSwgMHgyODlCLA0KLSAgICAweDU2M0YsIDB4MTExNywgMHg1NjQwLCAweDI4OTcsIDB4NTY0MSwgMHgyODkxLCAweDU2NDIsIDB4Mjg4RSwNCi0gICAgMHg1NjQ1LCAweDIwQzgsIDB4NTY0NiwgMHgyODk0LCAweDU2NDgsIDB4Mjg4RCwgMHg1NjQ5LCAweDI4OTMsDQotICAgIDB4NTY0QSwgMHgyODkyLCAweDU2NEMsIDB4Mjg4RiwgMHg1NjRFLCAweDExMUIsIDB4NTY1MywgMHgxMTFBLA0KLSAgICAweDU2NTcsIDB4MTExQywgMHg1NjU4LCAweDI4OTUsIDB4NTY1OSwgMHgxMjk1LCAweDU2NUEsIDB4Mjg5NiwNCi0gICAgMHg1NjVFLCAweDJCMTAsIDB4NTY2MCwgMHgyQjA5LCAweDU2NjIsIDB4MTJBMSwgMHg1NjYzLCAweDJCMEQsDQotICAgIDB4NTY2NCwgMHgxMjk5LCAweDU2NjUsIDB4MTI5RCwgMHg1NjY2LCAweDJCMEMsIDB4NTY2OCwgMHgxMjlDLA0KLSAgICAweDU2NjksIDB4MTI5OCwgMHg1NjZBLCAweDEyOUIsIDB4NTY2QiwgMHgxMjk2LCAweDU2NkMsIDB4MTJBMCwNCi0gICAgMHg1NjZELCAweDJCMEUsIDB4NTY2RSwgMHgyQjBBLCAweDU2NkYsIDB4MTI5RiwgMHg1NjcwLCAweDJCMDgsDQotICAgIDB4NTY3MSwgMHgxMjlFLCAweDU2NzIsIDB4MkIwRiwgMHg1NjczLCAweDJCMEIsIDB4NTY3NCwgMHgxMTFELA0KLSAgICAweDU2NzYsIDB4MTJBMiwgMHg1Njc3LCAweDJCMTEsIDB4NTY3OCwgMHgxMjlBLCAweDU2NzksIDB4MTI5NywNCi0gICAgMHg1NjdFLCAweDJENDcsIDB4NTY3RiwgMHgyRDQ5LCAweDU2ODAsIDB4MTNCQSwgMHg1NjgxLCAweDJENEEsDQotICAgIDB4NTY4MiwgMHgyRDQ4LCAweDU2ODMsIDB4MkQ0NiwgMHg1Njg0LCAweDJENDUsIDB4NTY4NSwgMHgxM0JDLA0KLSAgICAweDU2ODYsIDB4MkQ0NCwgMHg1Njg3LCAweDEzQkQsIDB4NTY4QywgMHgyRDQyLCAweDU2OEQsIDB4MkQ0MywNCi0gICAgMHg1NjhFLCAweDEzQjksIDB4NTY4RiwgMHgxM0JFLCAweDU2OTAsIDB4MTNCQiwgMHg1NjkzLCAweDJENDEsDQotICAgIDB4NTY5NSwgMHgxNENBLCAweDU2OTcsIDB4MkYxMywgMHg1Njk4LCAweDJGMTEsIDB4NTY5OSwgMHgyRjE2LA0KLSAgICAweDU2OUEsIDB4MkYxNCwgMHg1NjlDLCAweDJGMTIsIDB4NTY5RCwgMHgyRjE1LCAweDU2QTUsIDB4MTU3NiwNCi0gICAgMHg1NkE2LCAweDMwODEsIDB4NTZBNywgMHgzMDgyLCAweDU2QTgsIDB4MTU3NywgMHg1NkFBLCAweDMwODMsDQotICAgIDB4NTZBQiwgMHgzMDdGLCAweDU2QUMsIDB4MzA4NCwgMHg1NkFELCAweDMwODAsIDB4NTZBRSwgMHgxNENCLA0KLSAgICAweDU2QjIsIDB4MzFDOCwgMHg1NkIzLCAweDMxQ0EsIDB4NTZCNCwgMHgxNjBDLCAweDU2QjUsIDB4MzFDOSwNCi0gICAgMHg1NkI2LCAweDE2MEIsIDB4NTZCNywgMHgxNjBBLCAweDU2QkMsIDB4MTYwRCwgMHg1NkJELCAweDMyQ0EsDQotICAgIDB4NTZCRSwgMHgzMkNCLCAweDU2QzAsIDB4MTY2QiwgMHg1NkMxLCAweDE2NkEsIDB4NTZDMiwgMHgxNjZDLA0KLSAgICAweDU2QzMsIDB4MzJDOSwgMHg1NkM1LCAweDMzNzksIDB4NTZDNiwgMHgzMzc4LCAweDU2QzgsIDB4MTZCRCwNCi0gICAgMHg1NkM5LCAweDE2QkYsIDB4NTZDQSwgMHgxNkJFLCAweDU2Q0IsIDB4MzM3QSwgMHg1NkNDLCAweDE2RjYsDQotICAgIDB4NTZDRCwgMHgzNDgxLCAweDU2RDEsIDB4MTcxRiwgMHg1NkQzLCAweDM0ODAsIDB4NTZENCwgMHgzNEM5LA0KLSAgICAweDU2RDcsIDB4MTc3NSwgMHg1NkRBLCAweDAzMkQsIDB4NTZEQiwgMHgwMzJDLCAweDU2REQsIDB4MDNBQywNCi0gICAgMHg1NkRFLCAweDAzQUIsIDB4NTZERiwgMHgxN0QwLCAweDU2RTAsIDB4MDNBQSwgMHg1NkUxLCAweDE3Q0YsDQotICAgIDB4NTZFNCwgMHgwNDYzLCAweDU2RTUsIDB4MTg1MCwgMHg1NkU3LCAweDE4NEYsIDB4NTZFQSwgMHgwNDYxLA0KLSAgICAweDU2RUIsIDB4MDQ2NCwgMHg1NkVFLCAweDE4NEUsIDB4NTZGMCwgMHgwNDYyLCAweDU2RjcsIDB4MTkzMywNCi0gICAgMHg1NkY5LCAweDE5MzQsIDB4NTZGQSwgMHgwNTc4LCAweDU2RkYsIDB4MDZFNiwgMHg1NzAxLCAweDFDNUIsDQotICAgIDB4NTcwMiwgMHgxQzVDLCAweDU3MDMsIDB4MDg3OSwgMHg1NzA0LCAweDA4N0EsIDB4NTcwNywgMHgxRTc0LA0KLSAgICAweDU3MDgsIDB4MEEzNiwgMHg1NzA5LCAweDBBMzgsIDB4NTcwQSwgMHgxRTczLCAweDU3MEIsIDB4MEEzNywNCi0gICAgMHg1NzBDLCAweDIwRDksIDB4NTcwRCwgMHgwQzE2LCAweDU3MTIsIDB4MERFNCwgMHg1NzEzLCAweDBERTUsDQotICAgIDB4NTcxNCwgMHgyMzkxLCAweDU3MTYsIDB4MEZBMSwgMHg1NzE4LCAweDBGQTAsIDB4NTcxQSwgMHgyODlGLA0KLSAgICAweDU3MUIsIDB4MkIxMywgMHg1NzFDLCAweDJCMTIsIDB4NTcxRSwgMHgzNTA1LCAweDU3MUYsIDB4MDI3QSwNCi0gICAgMHg1NzIwLCAweDE3ODQsIDB4NTcyMiwgMHgxNzlBLCAweDU3MjMsIDB4MTc5QiwgMHg1NzI4LCAweDAzQUYsDQotICAgIDB4NTcyOSwgMHgwM0IzLCAweDU3MkEsIDB4MTdEMiwgMHg1NzJDLCAweDAzQjEsIDB4NTcyRCwgMHgwM0IwLA0KLSAgICAweDU3MkUsIDB4MTdEMSwgMHg1NzJGLCAweDAzQjIsIDB4NTczMCwgMHgwM0FFLCAweDU3MzMsIDB4MDNBRCwNCi0gICAgMHg1NzM0LCAweDE3RDMsIDB4NTczQiwgMHgwNDZFLCAweDU3M0UsIDB4MDQ2QiwgMHg1NzQwLCAweDA0NjcsDQotICAgIDB4NTc0MSwgMHgxODUxLCAweDU3NDUsIDB4MTg1MiwgMHg1NzQ3LCAweDA0NjksIDB4NTc0OSwgMHgxODU0LA0KLSAgICAweDU3NEEsIDB4MDQ2NSwgMHg1NzRCLCAweDE4NTUsIDB4NTc0QywgMHgxODUzLCAweDU3NEQsIDB4MDQ2OCwNCi0gICAgMHg1NzRFLCAweDA0NkEsIDB4NTc0RiwgMHgwNDZELCAweDU3NTAsIDB4MDQ2QywgMHg1NzUxLCAweDA0NjYsDQotICAgIDB4NTc1MiwgMHgxODU2LCAweDU3NjEsIDB4MDU3RCwgMHg1NzYyLCAweDE5NDEsIDB4NTc2NCwgMHgwNTdGLA0KLSAgICAweDU3NjYsIDB4MDU3RSwgMHg1NzY4LCAweDE5NDIsIDB4NTc2OSwgMHgwNTdDLCAweDU3NkEsIDB4MDU3QiwNCi0gICAgMHg1NzZCLCAweDE5MzgsIDB4NTc2RCwgMHgxOTM3LCAweDU3NkYsIDB4MTkzNSwgMHg1NzcwLCAweDE5M0EsDQotICAgIDB4NTc3MSwgMHgxOTM5LCAweDU3NzIsIDB4MTkzNiwgMHg1NzczLCAweDE5M0YsIDB4NTc3NCwgMHgxOTQwLA0KLSAgICAweDU3NzUsIDB4MTkzRCwgMHg1Nzc2LCAweDE5M0IsIDB4NTc3NywgMHgwNTdBLCAweDU3N0IsIDB4MTkzRSwNCi0gICAgMHg1NzdDLCAweDA1ODAsIDB4NTc3RCwgMHgxOTQzLCAweDU3ODAsIDB4MTkzQywgMHg1NzgyLCAweDA2RTcsDQotICAgIDB4NTc4MywgMHgwNTc5LCAweDU3OEIsIDB4MDZFOCwgMHg1NzhDLCAweDFBOTAsIDB4NTc4RiwgMHgxQTk2LA0KLSAgICAweDU3OTMsIDB4MDZFRSwgMHg1Nzk0LCAweDFBOTQsIDB4NTc5NSwgMHgxQTlBLCAweDU3OTcsIDB4MUE5MSwNCi0gICAgMHg1Nzk4LCAweDFBOTUsIDB4NTc5OSwgMHgxQTk3LCAweDU3OUEsIDB4MUE5OSwgMHg1NzlCLCAweDFBOTMsDQotICAgIDB4NTc5RCwgMHgxQTkyLCAweDU3OUUsIDB4MUE4RCwgMHg1NzlGLCAweDFBOEUsIDB4NTdBMCwgMHgwNkU5LA0KLSAgICAweDU3QTIsIDB4MDZFQiwgMHg1N0EzLCAweDA2RUEsIDB4NTdBNCwgMHgxQThGLCAweDU3QTUsIDB4MUE5OCwNCi0gICAgMHg1N0FFLCAweDA2RUQsIDB4NTdCNSwgMHgxQThDLCAweDU3QjYsIDB4MUM2NiwgMHg1N0I4LCAweDFDNjUsDQotICAgIDB4NTdCOSwgMHgxQzZBLCAweDU3QkEsIDB4MUM2MSwgMHg1N0JDLCAweDFDNjQsIDB4NTdCRCwgMHgxQzYzLA0KLSAgICAweDU3QkYsIDB4MUM2NywgMHg1N0MxLCAweDFDNkIsIDB4NTdDMiwgMHgwODdCLCAweDU3QzMsIDB4MDg3RSwNCi0gICAgMHg1N0M2LCAweDFDNjIsIDB4NTdDNywgMHgxQzY4LCAweDU3Q0IsIDB4MDg3RCwgMHg1N0NDLCAweDFDNUQsDQotICAgIDB4NTdDRSwgMHgwNkVDLCAweDU3Q0YsIDB4MUU4MiwgMHg1N0QwLCAweDFDNjksIDB4NTdEMiwgMHgxQzYwLA0KLSAgICAweDU3RDQsIDB4MDg3QywgMHg1N0Q1LCAweDFDNUYsIDB4NTdEQywgMHgxRTc5LCAweDU3REYsIDB4MEEzOSwNCi0gICAgMHg1N0UwLCAweDBBM0QsIDB4NTdFMSwgMHgxRTg5LCAweDU3RTIsIDB4MUU3NywgMHg1N0UzLCAweDFFODUsDQotICAgIDB4NTdFNCwgMHgwQTNFLCAweDU3RTUsIDB4MUU4NywgMHg1N0U3LCAweDFFOEQsIDB4NTdFOSwgMHgxRTkxLA0KLSAgICAweDU3RUMsIDB4MUU4OCwgMHg1N0VELCAweDFFN0MsIDB4NTdFRSwgMHgxRTg0LCAweDU3RjAsIDB4MUU5MiwNCi0gICAgMHg1N0YxLCAweDFFOTAsIDB4NTdGMiwgMHgxRTg2LCAweDU3RjMsIDB4MUU4MSwgMHg1N0Y0LCAweDFFN0EsDQotICAgIDB4NTdGNSwgMHgyMEUxLCAweDU3RjYsIDB4MUU3OCwgMHg1N0Y3LCAweDBBNDIsIDB4NTdGOCwgMHgxRTdGLA0KLSAgICAweDU3RjksIDB4MEE0MywgMHg1N0ZBLCAweDBBM0YsIDB4NTdGQiwgMHgxRTc1LCAweDU3RkMsIDB4MUU4QiwNCi0gICAgMHg1N0ZELCAweDFFN0QsIDB4NTgwMCwgMHgxRTdCLCAweDU4MDEsIDB4MUU4RSwgMHg1ODAyLCAweDBBNDAsDQotICAgIDB4NTgwNCwgMHgxRTk0LCAweDU4MDUsIDB4MEEzQSwgMHg1ODA2LCAweDBBM0MsIDB4NTgwNywgMHgxRTgzLA0KLSAgICAweDU4MDgsIDB4MUU3RSwgMHg1ODA5LCAweDA4N0YsIDB4NTgwQSwgMHgwQTNCLCAweDU4MEIsIDB4MUU4MCwNCi0gICAgMHg1ODBDLCAweDFFOEYsIDB4NTgwRCwgMHgxRTkzLCAweDU4MEUsIDB4MUU4QSwgMHg1ODEwLCAweDFFOEMsDQotICAgIDB4NTgxNCwgMHgxRTc2LCAweDU4MTksIDB4MjBEQywgMHg1ODFCLCAweDIwRTUsIDB4NTgxQywgMHgyMEU0LA0KLSAgICAweDU4MUQsIDB4MEMxRSwgMHg1ODFFLCAweDIwREQsIDB4NTgyMCwgMHgwQzFGLCAweDU4MjEsIDB4MEMxRCwNCi0gICAgMHg1ODIzLCAweDIwREYsIDB4NTgyNCwgMHgwQzFBLCAweDU4MjUsIDB4MjBFMywgMHg1ODI3LCAweDIwREUsDQotICAgIDB4NTgyOCwgMHgyMEUwLCAweDU4MjksIDB4MjBEQSwgMHg1ODJBLCAweDBDMTgsIDB4NTgyQywgMHgyMEVELA0KLSAgICAweDU4MkQsIDB4MjBFQywgMHg1ODJFLCAweDIwRTksIDB4NTgyRiwgMHgwQzE3LCAweDU4MzAsIDB4MEMxQiwNCi0gICAgMHg1ODMxLCAweDBDMUMsIDB4NTgzMiwgMHgxQzVFLCAweDU4MzMsIDB4MjBFNiwgMHg1ODM0LCAweDBDMTksDQotICAgIDB4NTgzNSwgMHgwQTQxLCAweDU4MzYsIDB4MjBFOCwgMHg1ODM3LCAweDIwREIsIDB4NTgzOCwgMHgyMEVCLA0KLSAgICAweDU4MzksIDB4MjBFQSwgMHg1ODNCLCAweDIwRUUsIDB4NTgzRCwgMHgyMzlGLCAweDU4M0YsIDB4MjBFNywNCi0gICAgMHg1ODQ4LCAweDIwRTIsIDB4NTg0OSwgMHgyMzk3LCAweDU4NEEsIDB4MERFRiwgMHg1ODRCLCAweDBERjIsDQotICAgIDB4NTg0QywgMHgwREVELCAweDU4NEQsIDB4MjM5NiwgMHg1ODRFLCAweDIzOUEsIDB4NTg0RiwgMHgyMzk1LA0KLSAgICAweDU4NTEsIDB4MERFNywgMHg1ODUyLCAweDBERjEsIDB4NTg1MywgMHgyMzkyLCAweDU4NTQsIDB4MERFQiwNCi0gICAgMHg1ODU1LCAweDIzOTksIDB4NTg1NywgMHgwREU5LCAweDU4NTgsIDB4MERFOCwgMHg1ODU5LCAweDIzOUMsDQotICAgIDB4NTg1QSwgMHgwREVBLCAweDU4NUIsIDB4MjM5RSwgMHg1ODVELCAweDIzOUIsIDB4NTg1RSwgMHgwREU2LA0KLSAgICAweDU4NjIsIDB4MERGMCwgMHg1ODYzLCAweDIzQTAsIDB4NTg2NCwgMHgyMzk0LCAweDU4NjUsIDB4MjM5RCwNCi0gICAgMHg1ODY4LCAweDIzOTMsIDB4NTg2QiwgMHgwREVDLCAweDU4NkQsIDB4MERFRSwgMHg1ODZGLCAweDIzOTgsDQotICAgIDB4NTg3MSwgMHgyM0ExLCAweDU4NzQsIDB4MjYzRiwgMHg1ODc1LCAweDBGQTIsIDB4NTg3NiwgMHgyNjQ1LA0KLSAgICAweDU4NzksIDB4MEZBNywgMHg1ODdBLCAweDI2NDEsIDB4NTg3QiwgMHgyNjQ4LCAweDU4N0MsIDB4MjYzOSwNCi0gICAgMHg1ODdELCAweDBGQTksIDB4NTg3RSwgMHgwRkEzLCAweDU4N0YsIDB4MjYzRSwgMHg1ODgwLCAweDExMjEsDQotICAgIDB4NTg4MSwgMHgyNjNELCAweDU4ODIsIDB4MjY0NiwgMHg1ODgzLCAweDBGQTQsIDB4NTg4NSwgMHgwRkE4LA0KLSAgICAweDU4ODYsIDB4MjYzQywgMHg1ODg3LCAweDI2NDIsIDB4NTg4OCwgMHgyNjQ3LCAweDU4ODksIDB4MjYzOCwNCi0gICAgMHg1ODhBLCAweDBGQTYsIDB4NTg4QiwgMHgyNjQwLCAweDU4OEUsIDB4MjY0NCwgMHg1ODhGLCAweDI2NEEsDQotICAgIDB4NTg5MCwgMHgyNjNBLCAweDU4OTEsIDB4MjY0MywgMHg1ODkzLCAweDBGQTUsIDB4NTg5NCwgMHgyNjQ5LA0KLSAgICAweDU4OTgsIDB4MjYzQiwgMHg1ODlDLCAweDExMjUsIDB4NTg5RCwgMHgyOEExLCAweDU4OUUsIDB4MTEyMywNCi0gICAgMHg1ODlGLCAweDExMjIsIDB4NThBMCwgMHgyOEEzLCAweDU4QTEsIDB4MjhBOCwgMHg1OEEzLCAweDI4QTQsDQotICAgIDB4NThBNSwgMHgyOEE3LCAweDU4QTYsIDB4MTEyOCwgMHg1OEE4LCAweDEyODgsIDB4NThBOSwgMHgxMTI3LA0KLSAgICAweDU4QUIsIDB4MjhBMCwgMHg1OEFDLCAweDI4QTYsIDB4NThBRSwgMHgxMTI2LCAweDU4QUYsIDB4MjhBNSwNCi0gICAgMHg1OEIxLCAweDI4QTIsIDB4NThCMywgMHgxMTI0LCAweDU4QkEsIDB4MkIxOCwgMHg1OEJCLCAweDM2RUIsDQotICAgIDB4NThCQywgMHgyQjFBLCAweDU4QkQsIDB4MkIxNSwgMHg1OEJFLCAweDEyQTQsIDB4NThCRiwgMHgyQjE3LA0KLSAgICAweDU4QzEsIDB4MTJBMywgMHg1OEMyLCAweDJCMTksIDB4NThDNSwgMHgxMkE2LCAweDU4QzYsIDB4MkIxQiwNCi0gICAgMHg1OEM3LCAweDEyQTUsIDB4NThDOCwgMHgyQjE0LCAweDU4QzksIDB4MkIxNiwgMHg1OENFLCAweDEzQzIsDQotICAgIDB4NThDRiwgMHgyRDRELCAweDU4RDEsIDB4MTNDMSwgMHg1OEQyLCAweDJENEUsIDB4NThEMywgMHgxM0MwLA0KLSAgICAweDU4RDQsIDB4MkQ0QywgMHg1OEQ1LCAweDEzQkYsIDB4NThENiwgMHgyRDRCLCAweDU4RDgsIDB4MTRDRCwNCi0gICAgMHg1OEQ5LCAweDE0Q0MsIDB4NThEQSwgMHgzMDg1LCAweDU4REIsIDB4MzA4NywgMHg1OERELCAweDMwODYsDQotICAgIDB4NThERSwgMHgxNTc4LCAweDU4REYsIDB4MTU3OSwgMHg1OEUyLCAweDE1N0EsIDB4NThFMywgMHgzMUNCLA0KLSAgICAweDU4RTQsIDB4MTYwRSwgMHg1OEU3LCAweDM0MTEsIDB4NThFOCwgMHgzNDEwLCAweDU4RTksIDB4MTcyMCwNCi0gICAgMHg1OEVCLCAweDAyN0IsIDB4NThFQywgMHgwMkMxLCAweDU4RUYsIDB4MDQ2RiwgMHg1OEY0LCAweDFBOUIsDQotICAgIDB4NThGOSwgMHgwQzIwLCAweDU4RkEsIDB4MEMyMSwgMHg1OEZDLCAweDIzQTIsIDB4NThGRCwgMHgwRkFBLA0KLSAgICAweDU4RkUsIDB4MjY0QiwgMHg1OEZGLCAweDI4QTksIDB4NTkwMiwgMHgwMjI0LCAweDU5MDMsIDB4MTc4NSwNCi0gICAgMHg1OTA2LCAweDE4NTcsIDB4NTkwQSwgMHgwMjI0LCAweDU5MEMsIDB4MTk0NCwgMHg1OTBELCAweDFBOUMsDQotICAgIDB4NTkwRSwgMHgxQzZDLCAweDU5MEYsIDB4MDg4MCwgMHg1OTEyLCAweDMwODgsIDB4NTkxNCwgMHgxNjZELA0KLSAgICAweDU5MTUsIDB4MDI3QywgMHg1OTE2LCAweDAzMkUsIDB4NTkxNywgMHgxNzlDLCAweDU5MTksIDB4MDNCNCwNCi0gICAgMHg1OTFBLCAweDAzQjUsIDB4NTkxQywgMHgwNTgxLCAweDU5MjAsIDB4MEE0NCwgMHg1OTIyLCAweDBGQUMsDQotICAgIDB4NTkyNCwgMHgwRkFELCAweDU5MjUsIDB4MEZBQiwgMHg1OTI3LCAweDAyN0QsIDB4NTkyOSwgMHgwMkMyLA0KLSAgICAweDU5MkEsIDB4MDJDNCwgMHg1OTJCLCAweDAyQzMsIDB4NTkyQywgMHgxNzg2LCAweDU5MkQsIDB4MDJDNSwNCi0gICAgMHg1OTJFLCAweDAzMkYsIDB4NTkyRiwgMHgxNzlELCAweDU5MzEsIDB4MDMzMCwgMHg1OTM3LCAweDAzQjYsDQotICAgIDB4NTkzOCwgMHgwM0I3LCAweDU5M0MsIDB4MTdENCwgMHg1OTNFLCAweDA0NzAsIDB4NTk0MCwgMHgxODU4LA0KLSAgICAweDU5NDQsIDB4MDU4NSwgMHg1OTQ1LCAweDE5NDUsIDB4NTk0NywgMHgwNTgzLCAweDU5NDgsIDB4MDU4NCwNCi0gICAgMHg1OTQ5LCAweDA1ODIsIDB4NTk0QSwgMHgxQzZELCAweDU5NEUsIDB4MDZGMiwgMHg1OTRGLCAweDA2RjEsDQotICAgIDB4NTk1MCwgMHgwNkYzLCAweDU5NTEsIDB4MDZGMCwgMHg1OTUzLCAweDFBOUQsIDB4NTk1NCwgMHgwNTg2LA0KLSAgICAweDU5NTUsIDB4MDZFRiwgMHg1OTU3LCAweDA4ODEsIDB4NTk1OCwgMHgwODgyLCAweDU5NUEsIDB4MDg4MywNCi0gICAgMHg1OTVDLCAweDFFOTUsIDB4NTk2MCwgMHgwQzIyLCAweDU5NjEsIDB4MjBFRiwgMHg1OTYyLCAweDBBNDUsDQotICAgIDB4NTk2NywgMHgwREYzLCAweDU5NjksIDB4MEZBRiwgMHg1OTZBLCAweDBGQUUsIDB4NTk2QiwgMHgyNjRDLA0KLSAgICAweDU5NkQsIDB4MTEyOSwgMHg1OTZFLCAweDEyQTcsIDB4NTk3MCwgMHgyRjE3LCAweDU5NzEsIDB4MzM3QiwNCi0gICAgMHg1OTcyLCAweDM0MTIsIDB4NTk3MywgMHgwMjdFLCAweDU5NzQsIDB4MDMzMSwgMHg1OTc2LCAweDAzMzIsDQotICAgIDB4NTk3NywgMHgxN0RBLCAweDU5NzgsIDB4MDNCOSwgMHg1OTc5LCAweDAzQkMsIDB4NTk3QiwgMHgxN0Q4LA0KLSAgICAweDU5N0MsIDB4MTdENiwgMHg1OTdELCAweDAzQkIsIDB4NTk3RSwgMHgxN0Q5LCAweDU5N0YsIDB4MTdEQiwNCi0gICAgMHg1OTgwLCAweDE3RDUsIDB4NTk4MSwgMHgwM0JFLCAweDU5ODIsIDB4MDNCRCwgMHg1OTgzLCAweDAzQkEsDQotICAgIDB4NTk4NCwgMHgwM0I4LCAweDU5ODUsIDB4MTdENywgMHg1OThBLCAweDA0N0IsIDB4NTk4RCwgMHgwNDc4LA0KLSAgICAweDU5OEUsIDB4MTg1RCwgMHg1OThGLCAweDE4NjAsIDB4NTk5MCwgMHgxODVGLCAweDU5OTIsIDB4MDQ3MiwNCi0gICAgMHg1OTkzLCAweDA0N0EsIDB4NTk5NiwgMHgwNDc3LCAweDU5OTcsIDB4MTg1QywgMHg1OTk4LCAweDE4NUEsDQotICAgIDB4NTk5OSwgMHgwNDc2LCAweDU5OUQsIDB4MDQ3MSwgMHg1OTlFLCAweDA0NzQsIDB4NTlBMCwgMHgxODVCLA0KLSAgICAweDU5QTEsIDB4MTg2MiwgMHg1OUEyLCAweDE4NUUsIDB4NTlBMywgMHgwNDc1LCAweDU5QTQsIDB4MDQ3OSwNCi0gICAgMHg1OUE1LCAweDA0N0MsIDB4NTlBNiwgMHgxODU5LCAweDU5QTcsIDB4MTg2MSwgMHg1OUE4LCAweDA0NzMsDQotICAgIDB4NTlBRSwgMHgwNThCLCAweDU5QUYsIDB4MDU5MywgMHg1OUIxLCAweDE5NTEsIDB4NTlCMiwgMHgxOTRBLA0KLSAgICAweDU5QjMsIDB4MDU5NCwgMHg1OUI0LCAweDE5NTUsIDB4NTlCNSwgMHgxOTQ2LCAweDU5QjYsIDB4MTk0RCwNCi0gICAgMHg1OUI5LCAweDA1OEEsIDB4NTlCQSwgMHgxOTQ3LCAweDU5QkIsIDB4MDU4OCwgMHg1OUJDLCAweDE5NEUsDQotICAgIDB4NTlCRCwgMHgxOTUyLCAweDU5QkUsIDB4MDU4NywgMHg1OUMwLCAweDE5NTMsIDB4NTlDMSwgMHgxOTRDLA0KLSAgICAweDU5QzMsIDB4MTk0RiwgMHg1OUM1LCAweDA1OTYsIDB4NTlDNiwgMHgwNThELCAweDU5QzcsIDB4MTk1NiwNCi0gICAgMHg1OUM4LCAweDE5NTQsIDB4NTlDQSwgMHgwNTkyLCAweDU5Q0IsIDB4MDU5MCwgMHg1OUNDLCAweDE5NEIsDQotICAgIDB4NTlDRCwgMHgwNThGLCAweDU5Q0UsIDB4MTk0OSwgMHg1OUNGLCAweDE5NDgsIDB4NTlEMCwgMHgwNThFLA0KLSAgICAweDU5RDEsIDB4MDU4QywgMHg1OUQyLCAweDA1OTUsIDB4NTlEMywgMHgwNTkxLCAweDU5RDQsIDB4MDU4OSwNCi0gICAgMHg1OUQ2LCAweDE5NTAsIDB4NTlEOCwgMHgwNkY1LCAweDU5REEsIDB4MDZGQywgMHg1OURCLCAweDFBQUIsDQotICAgIDB4NTlEQywgMHgwNkY0LCAweDU5REQsIDB4MUFBMywgMHg1OURFLCAweDFBOUYsIDB4NTlFMCwgMHgxQUFGLA0KLSAgICAweDU5RTEsIDB4MUE5RSwgMHg1OUUzLCAweDA2RjcsIDB4NTlFNCwgMHgxQUE4LCAweDU5RTUsIDB4MDZGQSwNCi0gICAgMHg1OUU2LCAweDA2RkQsIDB4NTlFOCwgMHgwNkY4LCAweDU5RTksIDB4MUFBQywgMHg1OUVBLCAweDA2RkIsDQotICAgIDB4NTlFQywgMHgwODhBLCAweDU5RUQsIDB4MUFCMiwgMHg1OUVFLCAweDFBQTAsIDB4NTlGMSwgMHgxQUEyLA0KLSAgICAweDU5RjIsIDB4MUFBOSwgMHg1OUYzLCAweDFBQUQsIDB4NTlGNCwgMHgxQUIxLCAweDU5RjUsIDB4MUFBRSwNCi0gICAgMHg1OUY2LCAweDFBQTcsIDB4NTlGNywgMHgxQUFBLCAweDU5RkEsIDB4MUFBNCwgMHg1OUZCLCAweDA2RkYsDQotICAgIDB4NTlGQywgMHgxQUE2LCAweDU5RkQsIDB4MUFBNSwgMHg1OUZFLCAweDFBQjAsIDB4NTlGRiwgMHgwNkY2LA0KLSAgICAweDVBMDAsIDB4MUFBMSwgMHg1QTAxLCAweDA2RkUsIDB4NUEwMywgMHgwNkY5LCAweDVBMDksIDB4MDg5MCwNCi0gICAgMHg1QTBBLCAweDFDNzUsIDB4NUEwQywgMHgwODhGLCAweDVBMEYsIDB4MUM3MywgMHg1QTExLCAweDA4ODQsDQotICAgIDB4NUExMywgMHgwODg5LCAweDVBMTUsIDB4MUM3MiwgMHg1QTE2LCAweDFDNkYsIDB4NUExNywgMHgxQzc0LA0KLSAgICAweDVBMTgsIDB4MDg4NSwgMHg1QTE5LCAweDFDNkUsIDB4NUExQiwgMHgwODg4LCAweDVBMUMsIDB4MDg4NiwNCi0gICAgMHg1QTFFLCAweDFDNzYsIDB4NUExRiwgMHgwODg3LCAweDVBMjAsIDB4MDg4QiwgMHg1QTIzLCAweDA4OEMsDQotICAgIDB4NUEyNSwgMHgwODhFLCAweDVBMjksIDB4MDg4RCwgMHg1QTJELCAweDFDNzAsIDB4NUEyRSwgMHgxQzcxLA0KLSAgICAweDVBMzMsIDB4MUM3NywgMHg1QTM1LCAweDFFOUMsIDB4NUEzNiwgMHgwQTQ2LCAweDVBMzcsIDB4MjBGRCwNCi0gICAgMHg1QTM4LCAweDFFOUIsIDB4NUEzOSwgMHgxRUFFLCAweDVBM0MsIDB4MEE0QywgMHg1QTNFLCAweDFFQUMsDQotICAgIDB4NUE0MCwgMHgwQTRCLCAweDVBNDEsIDB4MEE0NywgMHg1QTQyLCAweDFFQjUsIDB4NUE0MywgMHgxRUE1LA0KLSAgICAweDVBNDQsIDB4MUVBOCwgMHg1QTQ2LCAweDBBNEYsIDB4NUE0NywgMHgxRUIyLCAweDVBNDgsIDB4MUVBQSwNCi0gICAgMHg1QTQ5LCAweDBBNDgsIDB4NUE0QSwgMHgwQTUwLCAweDVBNEMsIDB4MUVBRiwgMHg1QTRELCAweDFFQUQsDQotICAgIDB4NUE1MCwgMHgxRTlFLCAweDVBNTEsIDB4MUVCMywgMHg1QTUyLCAweDFFQTcsIDB4NUE1MywgMHgxRUEyLA0KLSAgICAweDVBNTUsIDB4MUU5OCwgMHg1QTU2LCAweDFFQjQsIDB4NUE1NywgMHgxRUE0LCAweDVBNTgsIDB4MUU5NywNCi0gICAgMHg1QTVBLCAweDBBNEUsIDB4NUE1QiwgMHgxRUE5LCAweDVBNUMsIDB4MUVCNiwgMHg1QTVELCAweDFFQTYsDQotICAgIDB4NUE1RSwgMHgxRTlBLCAweDVBNUYsIDB4MUU5RiwgMHg1QTYwLCAweDFFOTYsIDB4NUE2MiwgMHgwQTRELA0KLSAgICAweDVBNjQsIDB4MUVBMywgMHg1QTY1LCAweDFFQTAsIDB4NUE2NiwgMHgwQTQ5LCAweDVBNjcsIDB4MUU5OSwNCi0gICAgMHg1QTY5LCAweDFFQjEsIDB4NUE2QSwgMHgwQTRBLCAweDVBNkMsIDB4MUVBMSwgMHg1QTZELCAweDFFOUQsDQotICAgIDB4NUE3MCwgMHgxRUIwLCAweDVBNzcsIDB4MEMyMywgMHg1QTc4LCAweDIwRjYsIDB4NUE3QSwgMHgyMEYzLA0KLSAgICAweDVBN0IsIDB4MjEwNCwgMHg1QTdDLCAweDIwRjgsIDB4NUE3RCwgMHgyMTA1LCAweDVBN0YsIDB4MEMyNSwNCi0gICAgMHg1QTgzLCAweDIxMDEsIDB4NUE4NCwgMHgyMEZFLCAweDVBOEEsIDB4MjBGRiwgMHg1QThCLCAweDIxMDIsDQotICAgIDB4NUE4QywgMHgyMTA2LCAweDVBOEUsIDB4MUVBQiwgMHg1QThGLCAweDIxMDgsIDB4NUE5MCwgMHgyM0I2LA0KLSAgICAweDVBOTIsIDB4MEMyNiwgMHg1QTkzLCAweDIxMDksIDB4NUE5NCwgMHgyMEYxLCAweDVBOTUsIDB4MjBGQiwNCi0gICAgMHg1QTk3LCAweDIxMDAsIDB4NUE5QSwgMHgwQzI0LCAweDVBOUIsIDB4MEMyNywgMHg1QTlDLCAweDIxMDcsDQotICAgIDB4NUE5RCwgMHgyMTBBLCAweDVBOUUsIDB4MjBGNSwgMHg1QTlGLCAweDIwRjIsIDB4NUFBMiwgMHgyMEY0LA0KLSAgICAweDVBQTUsIDB4MjBGOSwgMHg1QUE2LCAweDIwRjcsIDB4NUFBNywgMHgwQzI4LCAweDVBQTksIDB4MjEwMywNCi0gICAgMHg1QUFDLCAweDIwRkEsIDB4NUFBRSwgMHgyMEZDLCAweDVBQUYsIDB4MjBGMCwgMHg1QUIwLCAweDIzQUEsDQotICAgIDB4NUFCMSwgMHgyM0E4LCAweDVBQjIsIDB4MERGQywgMHg1QUIzLCAweDBERkEsIDB4NUFCNCwgMHgyM0IyLA0KLSAgICAweDVBQjUsIDB4MjNBOSwgMHg1QUI2LCAweDIzQjMsIDB4NUFCNywgMHgyM0FGLCAweDVBQjgsIDB4MjNBNywNCi0gICAgMHg1QUI5LCAweDIzQjUsIDB4NUFCQSwgMHgyM0E2LCAweDVBQkIsIDB4MjNBRCwgMHg1QUJDLCAweDBERjksDQotICAgIDB4NUFCRCwgMHgwREY4LCAweDVBQkUsIDB4MERGNywgMHg1QUJGLCAweDIzQUIsIDB4NUFDMCwgMHgyM0IwLA0KLSAgICAweDVBQzEsIDB4MERGNCwgMHg1QUMyLCAweDBERkIsIDB4NUFDNCwgMHgyM0E0LCAweDVBQzYsIDB4MjNBRSwNCi0gICAgMHg1QUM3LCAweDIzQTMsIDB4NUFDOCwgMHgyM0FDLCAweDVBQzksIDB4MERGNSwgMHg1QUNBLCAweDIzQjEsDQotICAgIDB4NUFDQiwgMHgyM0E1LCAweDVBQ0MsIDB4MERGNiwgMHg1QUNELCAweDIzQjQsIDB4NUFENSwgMHgyNjUwLA0KLSAgICAweDVBRDYsIDB4MEZCNCwgMHg1QUQ3LCAweDBGQjMsIDB4NUFEOCwgMHgwRkI1LCAweDVBRDksIDB4MjY1QywNCi0gICAgMHg1QURBLCAweDI2NTIsIDB4NUFEQiwgMHgyNjU4LCAweDVBREMsIDB4MjY0RCwgMHg1QURELCAweDI2NUIsDQotICAgIDB4NUFERSwgMHgyNjVBLCAweDVBREYsIDB4MjY1RSwgMHg1QUUwLCAweDI2NTcsIDB4NUFFMSwgMHgwRkIwLA0KLSAgICAweDVBRTIsIDB4MjY1NiwgMHg1QUUzLCAweDBGQjYsIDB4NUFFNSwgMHgyNjRGLCAweDVBRTYsIDB4MEZCMSwNCi0gICAgMHg1QUU4LCAweDI2NUQsIDB4NUFFOSwgMHgwRkIyLCAweDVBRUEsIDB4MjY1MSwgMHg1QUVCLCAweDI2NTQsDQotICAgIDB4NUFFQywgMHgyNjU5LCAweDVBRUQsIDB4MjY1MywgMHg1QUVFLCAweDI2NEUsIDB4NUFGMywgMHgyNjU1LA0KLSAgICAweDVBRjQsIDB4MjhBQiwgMHg1QUY1LCAweDExMkQsIDB4NUFGNiwgMHgyOEFFLCAweDVBRjcsIDB4MjhBRCwNCi0gICAgMHg1QUY4LCAweDI4QjAsIDB4NUFGOSwgMHgyOEIyLCAweDVBRkEsIDB4MzZFRSwgMHg1QUZCLCAweDExMkIsDQotICAgIDB4NUFGRCwgMHgyOEFDLCAweDVBRkYsIDB4MjhBQSwgMHg1QjAxLCAweDI4QjMsIDB4NUIwMiwgMHgyOEIxLA0KLSAgICAweDVCMDMsIDB4MjhBRiwgMHg1QjA1LCAweDI4QjUsIDB4NUIwNywgMHgyOEI0LCAweDVCMDgsIDB4MTEyRiwNCi0gICAgMHg1QjA5LCAweDExMkEsIDB4NUIwQiwgMHgxMTJDLCAweDVCMEMsIDB4MTEyRSwgMHg1QjBGLCAweDI4QjYsDQotICAgIDB4NUIxMCwgMHgyQjIyLCAweDVCMTMsIDB4MkIyMSwgMHg1QjE0LCAweDJCMjAsIDB4NUIxNiwgMHgyQjIzLA0KLSAgICAweDVCMTcsIDB4MkIxQywgMHg1QjE5LCAweDJCMUQsIDB4NUIxQSwgMHgyQjI1LCAweDVCMUIsIDB4MkIxRSwNCi0gICAgMHg1QjFELCAweDEyQTgsIDB4NUIxRSwgMHgyQjI3LCAweDVCMjAsIDB4MkIyNiwgMHg1QjIxLCAweDJCMUYsDQotICAgIDB4NUIyMywgMHgyRDUyLCAweDVCMjQsIDB4MTNDNSwgMHg1QjI1LCAweDJENTAsIDB4NUIyNiwgMHgyRDU1LA0KLSAgICAweDVCMjcsIDB4MkQ1NCwgMHg1QjI4LCAweDJCMjQsIDB4NUIyQSwgMHgxM0M0LCAweDVCMkMsIDB4MkQ1MywNCi0gICAgMHg1QjJELCAweDJENEYsIDB4NUIyRSwgMHgyRDU3LCAweDVCMkYsIDB4MkQ1NiwgMHg1QjMwLCAweDEzQzMsDQotICAgIDB4NUIzMiwgMHgyRDUxLCAweDVCMzQsIDB4MTJBOSwgMHg1QjM4LCAweDE0Q0UsIDB4NUIzQywgMHgyRjE4LA0KLSAgICAweDVCM0QsIDB4MzA4OSwgMHg1QjNFLCAweDMwOEEsIDB4NUIzRiwgMHgzMDhCLCAweDVCNDAsIDB4MTYwRiwNCi0gICAgMHg1QjQzLCAweDE2MTAsIDB4NUI0NSwgMHgzMUNDLCAweDVCNDcsIDB4MzJDRCwgMHg1QjQ4LCAweDMyQ0MsDQotICAgIDB4NUI0QiwgMHgzMzdDLCAweDVCNEMsIDB4MzM3RCwgMHg1QjRELCAweDM0MTMsIDB4NUI0RSwgMHgzNDgyLA0KLSAgICAweDVCNTAsIDB4MDI3RiwgMHg1QjUxLCAweDAyODAsIDB4NUI1MywgMHgwMjgxLCAweDVCNTQsIDB4MDJDNiwNCi0gICAgMHg1QjU1LCAweDAzMzMsIDB4NUI1NiwgMHgxN0RDLCAweDVCNTcsIDB4MDNCRiwgMHg1QjU4LCAweDAzQzAsDQotICAgIDB4NUI1QSwgMHgwNDdGLCAweDVCNUIsIDB4MDQ4MCwgMHg1QjVDLCAweDA0N0UsIDB4NUI1RCwgMHgwNDdELA0KLSAgICAweDVCNUYsIDB4MDU5NywgMHg1QjYyLCAweDE5NTcsIDB4NUI2MywgMHgwNTk5LCAweDVCNjQsIDB4MDU5OCwNCi0gICAgMHg1QjY1LCAweDE5NTgsIDB4NUI2OSwgMHgwNzAwLCAweDVCNkIsIDB4MDg5MSwgMHg1QjZDLCAweDFDNzgsDQotICAgIDB4NUI2RSwgMHgxRUI4LCAweDVCNzAsIDB4MEE1MSwgMHg1QjcxLCAweDBDMkEsIDB4NUI3MiwgMHgxRUI3LA0KLSAgICAweDVCNzMsIDB4MEMyOSwgMHg1Qjc1LCAweDBGQjcsIDB4NUI3NywgMHgyNjVGLCAweDVCNzgsIDB4MTJBQSwNCi0gICAgMHg1QjdBLCAweDEzQzYsIDB4NUI3QiwgMHgyRDU4LCAweDVCN0QsIDB4MTYxMSwgMHg1QjdGLCAweDE2QzAsDQotICAgIDB4NUI4MCwgMHgwMjI1LCAweDVCODEsIDB4MTc5RSwgMHg1QjgzLCAweDAzMzQsIDB4NUI4NCwgMHgxNzlGLA0KLSAgICAweDVCODUsIDB4MDNDMywgMHg1Qjg3LCAweDAzQzEsIDB4NUI4OCwgMHgwM0MyLCAweDVCODksIDB4MDNDNCwNCi0gICAgMHg1QjhCLCAweDA0ODIsIDB4NUI4QywgMHgwNDgxLCAweDVCOEUsIDB4MTg2MywgMHg1QjhGLCAweDA0ODMsDQotICAgIDB4NUI5MiwgMHgxODY0LCAweDVCOTMsIDB4MTk1OSwgMHg1Qjk1LCAweDE5NUEsIDB4NUI5NywgMHgwNTlBLA0KLSAgICAweDVCOTgsIDB4MDU5QywgMHg1Qjk5LCAweDA1OUUsIDB4NUI5QSwgMHgwNTlCLCAweDVCOUIsIDB4MDU5RiwNCi0gICAgMHg1QjlDLCAweDA1OUQsIDB4NUJBMiwgMHgwNzA0LCAweDVCQTMsIDB4MDcwMSwgMHg1QkE0LCAweDA3MDMsDQotICAgIDB4NUJBNSwgMHgwNzA1LCAweDVCQTYsIDB4MDcwMiwgMHg1QkE3LCAweDFDNzksIDB4NUJBOCwgMHgxQUIzLA0KLSAgICAweDVCQUMsIDB4MUM3QiwgMHg1QkFELCAweDFDN0EsIDB4NUJBRSwgMHgwODk3LCAweDVCQjAsIDB4MDg5MywNCi0gICAgMHg1QkIzLCAweDA4OTQsIDB4NUJCNCwgMHgwODk2LCAweDVCQjUsIDB4MDg5OCwgMHg1QkI2LCAweDA4OTUsDQotICAgIDB4NUJCOCwgMHgwODlBLCAweDVCQjksIDB4MDg5OSwgMHg1QkJGLCAweDBBNTYsIDB4NUJDMCwgMHgxRUJBLA0KLSAgICAweDVCQzEsIDB4MUVCOSwgMHg1QkMyLCAweDBBNTUsIDB4NUJDNCwgMHgwQTU0LCAweDVCQzUsIDB4MEE1MywNCi0gICAgMHg1QkM2LCAweDBBNTcsIDB4NUJDNywgMHgwQTUyLCAweDVCQ0EsIDB4MjExMCwgMHg1QkNCLCAweDIxMEQsDQotICAgIDB4NUJDQywgMHgwQzJDLCAweDVCQ0QsIDB4MjEwQywgMHg1QkNFLCAweDIxMTEsIDB4NUJEMCwgMHgwQzJFLA0KLSAgICAweDVCRDEsIDB4MjEwRiwgMHg1QkQyLCAweDBDMkIsIDB4NUJEMywgMHgwQzJELCAweDVCRDQsIDB4MjEwRSwNCi0gICAgMHg1QkQ2LCAweDIzQjcsIDB4NUJEOCwgMHgyM0I4LCAweDVCRDksIDB4MjNCOSwgMHg1QkRFLCAweDBGQjgsDQotICAgIDB4NUJERiwgMHgwRkMwLCAweDVCRTAsIDB4MjY2MCwgMHg1QkUxLCAweDBGQkEsIDB4NUJFMiwgMHgwRkJFLA0KLSAgICAweDVCRTMsIDB4MjY2MSwgMHg1QkU0LCAweDBGQkYsIDB4NUJFNSwgMHgwRkJCLCAweDVCRTYsIDB4MEZCQywNCi0gICAgMHg1QkU3LCAweDBGQjksIDB4NUJFOCwgMHgwRkJELCAweDVCRTksIDB4MTEzMiwgMHg1QkVBLCAweDIxMEIsDQotICAgIDB4NUJFQiwgMHgxMTMzLCAweDVCRUMsIDB4MTEzMSwgMHg1QkVFLCAweDExMzAsIDB4NUJFRiwgMHgyQjI4LA0KLSAgICAweDVCRjAsIDB4MTJBQiwgMHg1QkYxLCAweDJENTksIDB4NUJGMiwgMHgyRDVBLCAweDVCRjUsIDB4MTU3QiwNCi0gICAgMHg1QkY2LCAweDE2MTIsIDB4NUJGOCwgMHgwMjgyLCAweDVCRkEsIDB4MDNDNSwgMHg1QzAxLCAweDA3MDYsDQotICAgIDB4NUMwMywgMHgxQzdDLCAweDVDMDQsIDB4MDg5QiwgMHg1QzA3LCAweDBBNUEsIDB4NUMwOCwgMHgwQTU5LA0KLSAgICAweDVDMDksIDB4MEE1OCwgMHg1QzBBLCAweDBDMkYsIDB4NUMwQiwgMHgwQzMwLCAweDVDMEMsIDB4MjExMiwNCi0gICAgMHg1QzBELCAweDBGQzEsIDB4NUMwRSwgMHgxMkFDLCAweDVDMEYsIDB4MDI4MywgMHg1QzEwLCAweDE3ODcsDQotICAgIDB4NUMxMSwgMHgwMkM3LCAweDVDMTIsIDB4MTdBMCwgMHg1QzE1LCAweDE3REQsIDB4NUMxNiwgMHgwM0M2LA0KLSAgICAweDVDMUEsIDB4MDVBMCwgMHg1QzFGLCAweDIzQkEsIDB4NUMyMiwgMHgwMjg0LCAweDVDMjQsIDB4MDJDOCwNCi0gICAgMHg1QzI1LCAweDE3REUsIDB4NUMyOCwgMHgxODY1LCAweDVDMkEsIDB4MTg2NiwgMHg1QzJDLCAweDA0ODQsDQotICAgIDB4NUMzMCwgMHgyMTEzLCAweDVDMzEsIDB4MEMzMSwgMHg1QzMzLCAweDIzQkIsIDB4NUMzNywgMHgxM0M3LA0KLSAgICAweDVDMzgsIDB4MDI4NSwgMHg1QzM5LCAweDAyOTksIDB4NUMzQSwgMHgwMkM5LCAweDVDM0IsIDB4MTdBMSwNCi0gICAgMHg1QzNDLCAweDAzMzUsIDB4NUMzRSwgMHgwNDg4LCAweDVDM0YsIDB4MDQ4NywgMHg1QzQwLCAweDA0ODUsDQotICAgIDB4NUM0MSwgMHgwNDg2LCAweDVDNDQsIDB4MTk1QiwgMHg1QzQ1LCAweDA1QTIsIDB4NUM0NiwgMHgwNUEzLA0KLSAgICAweDVDNDcsIDB4MTk1QywgMHg1QzQ4LCAweDA1QTEsIDB4NUM0QiwgMHgwNzBBLCAweDVDNEMsIDB4MUFCNCwNCi0gICAgMHg1QzRELCAweDA3MDksIDB4NUM0RSwgMHgwNzA3LCAweDVDNEYsIDB4MDcwOCwgMHg1QzUwLCAweDA4OUUsDQotICAgIDB4NUM1MSwgMHgwODlDLCAweDVDNTQsIDB4MUM3RSwgMHg1QzU1LCAweDA4OUQsIDB4NUM1NiwgMHgxQzdELA0KLSAgICAweDVDNTgsIDB4MDg5MiwgMHg1QzU5LCAweDFFQkIsIDB4NUM1QywgMHgwQTVDLCAweDVDNUQsIDB4MEE1RCwNCi0gICAgMHg1QzYwLCAweDBBNUIsIDB4NUM2MiwgMHgwRkMyLCAweDVDNjMsIDB4MjY2MiwgMHg1QzY0LCAweDExMzQsDQotICAgIDB4NUM2NSwgMHgxMTM1LCAweDVDNjcsIDB4MjhCNywgMHg1QzY4LCAweDEzQzgsIDB4NUM2OSwgMHgyRjE5LA0KLSAgICAweDVDNkEsIDB4MkYxQSwgMHg1QzZDLCAweDE2NkUsIDB4NUM2RCwgMHgzNDgzLCAweDVDNkUsIDB4MTc3NiwNCi0gICAgMHg1QzZGLCAweDAyQ0EsIDB4NUM3MSwgMHgwMjg2LCAweDVDNzMsIDB4MTdBMywgMHg1Qzc0LCAweDE3QTIsDQotICAgIDB4NUM3OSwgMHgwM0M3LCAweDVDN0EsIDB4MTdFMCwgMHg1QzdCLCAweDE3RTEsIDB4NUM3QywgMHgxN0RGLA0KLSAgICAweDVDN0UsIDB4MTdFMiwgMHg1Qzg2LCAweDE4NkUsIDB4NUM4OCwgMHgxODY5LCAweDVDODksIDB4MTg2QiwNCi0gICAgMHg1QzhBLCAweDE4NkQsIDB4NUM4QiwgMHgxODZBLCAweDVDOEMsIDB4MDQ4QywgMHg1QzhELCAweDE4NjcsDQotICAgIDB4NUM4RiwgMHgxODY4LCAweDVDOTAsIDB4MDQ4OSwgMHg1QzkxLCAweDA0OEEsIDB4NUM5MiwgMHgxODZDLA0KLSAgICAweDVDOTMsIDB4MTg2RiwgMHg1Qzk0LCAweDA0OEIsIDB4NUM5NSwgMHgxODcwLCAweDVDOUQsIDB4MTk2QSwNCi0gICAgMHg1QzlGLCAweDE5NjQsIDB4NUNBMCwgMHgxOTVGLCAweDVDQTEsIDB4MDVBNSwgMHg1Q0EyLCAweDE5NjcsDQotICAgIDB4NUNBMywgMHgxOTY1LCAweDVDQTQsIDB4MTk1RSwgMHg1Q0E1LCAweDE5NkIsIDB4NUNBNiwgMHgxOTZFLA0KLSAgICAweDVDQTcsIDB4MTk2OSwgMHg1Q0E4LCAweDE5NjIsIDB4NUNBOSwgMHgwNUE3LCAweDVDQUEsIDB4MTk2OCwNCi0gICAgMHg1Q0FCLCAweDA1QTgsIDB4NUNBQywgMHgxOTYzLCAweDVDQUQsIDB4MTk2NiwgMHg1Q0FFLCAweDE5NUQsDQotICAgIDB4NUNBRiwgMHgxOTYxLCAweDVDQjAsIDB4MTk2RCwgMHg1Q0IxLCAweDA1QTksIDB4NUNCMywgMHgwNUFBLA0KLSAgICAweDVDQjUsIDB4MTk2MCwgMHg1Q0I2LCAweDE5NkMsIDB4NUNCNywgMHgwNUE0LCAweDVDQjgsIDB4MDVBNiwNCi0gICAgMHg1Q0M2LCAweDFBQzUsIDB4NUNDNywgMHgxQUJFLCAweDVDQzgsIDB4MUFDNCwgMHg1Q0M5LCAweDFBQkQsDQotICAgIDB4NUNDQSwgMHgxQUJGLCAweDVDQ0IsIDB4MUFCOSwgMHg1Q0NDLCAweDFBQjcsIDB4NUNDRSwgMHgxQUM2LA0KLSAgICAweDVDQ0YsIDB4MUFDMywgMHg1Q0QwLCAweDFBQjUsIDB4NUNEMiwgMHgwNzBDLCAweDVDRDMsIDB4MUFDMSwNCi0gICAgMHg1Q0Q0LCAweDFBQzIsIDB4NUNENiwgMHgxQUMwLCAweDVDRDcsIDB4MUFCOCwgMHg1Q0Q4LCAweDFBQjYsDQotICAgIDB4NUNEOSwgMHgwNzBCLCAweDVDREEsIDB4MUFCQywgMHg1Q0RCLCAweDFBQkEsIDB4NUNERSwgMHgxQUJCLA0KLSAgICAweDVDREYsIDB4MUFDNywgMHg1Q0U4LCAweDA4QTMsIDB4NUNFQSwgMHgwOEEyLCAweDVDRUMsIDB4MUM3RiwNCi0gICAgMHg1Q0VELCAweDA4OUYsIDB4NUNFRSwgMHgxQzgxLCAweDVDRjAsIDB4MDhBNCwgMHg1Q0YxLCAweDFDODIsDQotICAgIDB4NUNGNCwgMHgwOEE3LCAweDVDRjYsIDB4MDhBNSwgMHg1Q0Y3LCAweDFDODMsIDB4NUNGOCwgMHgxQUM4LA0KLSAgICAweDVDRjksIDB4MUM4NSwgMHg1Q0ZCLCAweDA4QTEsIDB4NUNGRCwgMHgwOEEwLCAweDVDRkYsIDB4MUM4MCwNCi0gICAgMHg1RDAwLCAweDFDODQsIDB4NUQwMSwgMHgwOEE2LCAweDVEMDYsIDB4MEE1RiwgMHg1RDA3LCAweDBBNUUsDQotICAgIDB4NUQwQiwgMHgxRUJELCAweDVEMEMsIDB4MUVDMSwgMHg1RDBELCAweDFFQzMsIDB4NUQwRSwgMHgwQTYwLA0KLSAgICAweDVEMEYsIDB4MUVDNiwgMHg1RDExLCAweDBBNjQsIDB4NUQxMiwgMHgxRUM4LCAweDVEMTQsIDB4MEE2NiwNCi0gICAgMHg1RDE2LCAweDBBNjIsIDB4NUQxNywgMHgwQTZBLCAweDVEMTksIDB4MEE2NywgMHg1RDFBLCAweDFFQkYsDQotICAgIDB4NUQxQiwgMHgwQTYxLCAweDVEMUQsIDB4MUVCRSwgMHg1RDFFLCAweDFFQkMsIDB4NUQxRiwgMHgxRUNBLA0KLSAgICAweDVEMjAsIDB4MUVDMCwgMHg1RDIyLCAweDBBNjMsIDB4NUQyMywgMHgxRUM5LCAweDVEMjQsIDB4MEE2OCwNCi0gICAgMHg1RDI1LCAweDFFQzUsIDB4NUQyNiwgMHgxRUM0LCAweDVEMjcsIDB4MEE2OSwgMHg1RDI4LCAweDFFQzIsDQotICAgIDB4NUQyOSwgMHgwQTY1LCAweDVEMkUsIDB4MUVDQiwgMHg1RDMwLCAweDFFQzcsIDB4NUQzMSwgMHgyMTIyLA0KLSAgICAweDVEMzIsIDB4MjEyOSwgMHg1RDMzLCAweDIxMUUsIDB4NUQzNCwgMHgwQzM0LCAweDVEMzUsIDB4MjExQSwNCi0gICAgMHg1RDM2LCAweDIxMkEsIDB4NUQzNywgMHgyMTE0LCAweDVEMzgsIDB4MjEyNywgMHg1RDM5LCAweDIxMjUsDQotICAgIDB4NUQzQSwgMHgyMTFGLCAweDVEM0MsIDB4MjEyOCwgMHg1RDNELCAweDIxMjEsIDB4NUQzRiwgMHgyMTE5LA0KLSAgICAweDVENDAsIDB4MjEyQiwgMHg1RDQxLCAweDIxMTcsIDB4NUQ0MiwgMHgyMTI0LCAweDVENDMsIDB4MjExNSwNCi0gICAgMHg1RDQ1LCAweDIxMkMsIDB4NUQ0NywgMHgwQzM1LCAweDVENDksIDB4MjEyNiwgMHg1RDRBLCAweDIzQkUsDQotICAgIDB4NUQ0QiwgMHgyMTE4LCAweDVENEMsIDB4MEMzMiwgMHg1RDRFLCAweDIxMUMsIDB4NUQ1MCwgMHgwQzMzLA0KLSAgICAweDVENTEsIDB4MjExQiwgMHg1RDUyLCAweDIxMjAsIDB4NUQ1NSwgMHgyMTFELCAweDVENTksIDB4MjEyMywNCi0gICAgMHg1RDVFLCAweDIzQzIsIDB4NUQ2MiwgMHgyM0M1LCAweDVENjMsIDB4MjNCRCwgMHg1RDY1LCAweDIzQkYsDQotICAgIDB4NUQ2NywgMHgyM0M0LCAweDVENjgsIDB4MjNDMywgMHg1RDY5LCAweDBERkQsIDB4NUQ2QiwgMHgyMTE2LA0KLSAgICAweDVENkMsIDB4MjNDMSwgMHg1RDZGLCAweDBERkUsIDB4NUQ3MSwgMHgyM0JDLCAweDVENzIsIDB4MjNDMCwNCi0gICAgMHg1RDc3LCAweDI2NjksIDB4NUQ3OSwgMHgyNjcwLCAweDVEN0EsIDB4MjY2NywgMHg1RDdDLCAweDI2NkUsDQotICAgIDB4NUQ3RCwgMHgyNjY1LCAweDVEN0UsIDB4MjY2RCwgMHg1RDdGLCAweDI2NzEsIDB4NUQ4MCwgMHgyNjY0LA0KLSAgICAweDVEODEsIDB4MjY2OCwgMHg1RDgyLCAweDI2NjMsIDB4NUQ4NCwgMHgwRkMzLCAweDVEODYsIDB4MjY2NiwNCi0gICAgMHg1RDg3LCAweDBGQzQsIDB4NUQ4OCwgMHgyNjZDLCAweDVEODksIDB4MjY2QiwgMHg1RDhBLCAweDI2NkEsDQotICAgIDB4NUQ4RCwgMHgyNjZGLCAweDVEOTIsIDB4MjhCQiwgMHg1RDkzLCAweDI4QkQsIDB4NUQ5NCwgMHgxMTM3LA0KLSAgICAweDVEOTUsIDB4MjhCRSwgMHg1RDk3LCAweDI4QjksIDB4NUQ5OSwgMHgyOEI4LCAweDVEOUEsIDB4MjhDMiwNCi0gICAgMHg1RDlDLCAweDI4QzAsIDB4NUQ5RCwgMHgxMTM2LCAweDVEOUUsIDB4MjhDMywgMHg1RDlGLCAweDI4QkEsDQotICAgIDB4NURBMCwgMHgyOEJGLCAweDVEQTEsIDB4MjhDMSwgMHg1REEyLCAweDI4QkMsIDB4NURBNywgMHgyQjJDLA0KLSAgICAweDVEQTgsIDB4MkIzMSwgMHg1REE5LCAweDJCMkIsIDB4NURBQSwgMHgyQjMwLCAweDVEQUMsIDB4MkIyOSwNCi0gICAgMHg1REFELCAweDJCMzMsIDB4NURBRSwgMHgyQjJGLCAweDVEQUYsIDB4MkIzNCwgMHg1REIwLCAweDJCMkUsDQotICAgIDB4NURCMSwgMHgyQjJBLCAweDVEQjIsIDB4MkIzMiwgMHg1REI0LCAweDJCMzUsIDB4NURCNSwgMHgyQjJELA0KLSAgICAweDVEQjcsIDB4MkQ1QiwgMHg1REI4LCAweDEzQ0MsIDB4NURCQSwgMHgxM0NBLCAweDVEQkMsIDB4MTNDOSwNCi0gICAgMHg1REJELCAweDEzQ0IsIDB4NURDMCwgMHgyRjFCLCAweDVEQzIsIDB4MzAyMywgMHg1REMzLCAweDMwOEMsDQotICAgIDB4NURDNiwgMHgzMUNELCAweDVEQzcsIDB4MzFDRSwgMHg1REM5LCAweDE2MTMsIDB4NURDQiwgMHgzMkNFLA0KLSAgICAweDVEQ0QsIDB4MTY2RiwgMHg1RENGLCAweDMyQ0YsIDB4NUREMSwgMHgzMzdGLCAweDVERDIsIDB4MTZDMiwNCi0gICAgMHg1REQ0LCAweDE2QzEsIDB4NURENSwgMHgzMzdFLCAweDVERDYsIDB4MTZGNywgMHg1REQ4LCAweDM0MTQsDQotICAgIDB4NUREQiwgMHgwMjI2LCAweDVEREQsIDB4MDI4NywgMHg1RERFLCAweDAzQzgsIDB4NURERiwgMHgxN0UzLA0KLSAgICAweDVERTAsIDB4MTg3MSwgMHg1REUxLCAweDA1MUEsIDB4NURFMiwgMHgwQTZCLCAweDVERTUsIDB4MDI4OCwNCi0gICAgMHg1REU2LCAweDAzMzgsIDB4NURFNywgMHgwMzM3LCAweDVERTgsIDB4MDMzNiwgMHg1REVCLCAweDA0OEQsDQotICAgIDB4NURFRSwgMHgwOEE4LCAweDVERjAsIDB4MjNDNiwgMHg1REYxLCAweDAyODksIDB4NURGMiwgMHgwMjhBLA0KLSAgICAweDVERjMsIDB4MDI4QiwgMHg1REY0LCAweDAyQ0IsIDB4NURGNywgMHgwNzBELCAweDVERjksIDB4MUFDOSwNCi0gICAgMHg1REZELCAweDBDMzYsIDB4NURGRSwgMHgwMjhDLCAweDVERkYsIDB4MTc4OCwgMHg1RTAyLCAweDAzMzksDQotICAgIDB4NUUwMywgMHgwMzNBLCAweDVFMDQsIDB4MTdBNCwgMHg1RTA2LCAweDAzQzksIDB4NUUwQSwgMHgxODcyLA0KLSAgICAweDVFMEMsIDB4MDQ4RSwgMHg1RTBFLCAweDE4NzMsIDB4NUUxMSwgMHgwNUIwLCAweDVFMTQsIDB4MTk3MCwNCi0gICAgMHg1RTE1LCAweDA1QUUsIDB4NUUxNiwgMHgwNUFELCAweDVFMTcsIDB4MTk2RiwgMHg1RTE4LCAweDA1QUIsDQotICAgIDB4NUUxOSwgMHgxOTcxLCAweDVFMUEsIDB4MDVBQywgMHg1RTFCLCAweDA1QUYsIDB4NUUxRCwgMHgwNzBFLA0KLSAgICAweDVFMUYsIDB4MDcxMCwgMHg1RTIwLCAweDFBQ0QsIDB4NUUyMSwgMHgxQUNBLCAweDVFMjIsIDB4MUFDQiwNCi0gICAgMHg1RTIzLCAweDFBQ0MsIDB4NUUyNCwgMHgxQUNFLCAweDVFMjUsIDB4MDcwRiwgMHg1RTI4LCAweDFDODcsDQotICAgIDB4NUUyOSwgMHgxQzg2LCAweDVFMkIsIDB4MDhBQSwgMHg1RTJELCAweDA4QTksIDB4NUUzMywgMHgwQTZFLA0KLSAgICAweDVFMzQsIDB4MUVDRCwgMHg1RTM2LCAweDBBNkQsIDB4NUUzNywgMHgwQTZGLCAweDVFMzgsIDB4MEE2QywNCi0gICAgMHg1RTNELCAweDBDMzgsIDB4NUUzRSwgMHgxRUNDLCAweDVFNDAsIDB4MEMzOSwgMHg1RTQxLCAweDIxMkUsDQotICAgIDB4NUU0MywgMHgwQzNBLCAweDVFNDQsIDB4MjEyRCwgMHg1RTQ1LCAweDBDMzcsIDB4NUU0QSwgMHgyM0M5LA0KLSAgICAweDVFNEIsIDB4MjNDQiwgMHg1RTRDLCAweDBERkYsIDB4NUU0RCwgMHgyM0NBLCAweDVFNEUsIDB4MjNDOCwNCi0gICAgMHg1RTRGLCAweDIzQzcsIDB4NUU1MywgMHgyNjc0LCAweDVFNTQsIDB4MEZDOSwgMHg1RTU1LCAweDBGQzcsDQotICAgIDB4NUU1NywgMHgwRkM4LCAweDVFNTgsIDB4MjY3MiwgMHg1RTU5LCAweDI2NzMsIDB4NUU1QiwgMHgwRkM1LA0KLSAgICAweDVFNUMsIDB4MjhDNywgMHg1RTVELCAweDI4QzUsIDB4NUU1RiwgMHgxMTM5LCAweDVFNjAsIDB4MjhDNiwNCi0gICAgMHg1RTYxLCAweDExM0EsIDB4NUU2MiwgMHgxMTM4LCAweDVFNjMsIDB4MEZDNiwgMHg1RTY2LCAweDJCMzgsDQotICAgIDB4NUU2NywgMHgyQjM2LCAweDVFNjgsIDB4MkIzNywgMHg1RTY5LCAweDI4QzQsIDB4NUU2QSwgMHgyRDVELA0KLSAgICAweDVFNkIsIDB4MTNDRCwgMHg1RTZDLCAweDJENUMsIDB4NUU2RCwgMHgyRjFDLCAweDVFNkUsIDB4MkYxRCwNCi0gICAgMHg1RTZGLCAweDJCMzksIDB4NUU3MCwgMHgzMDhELCAweDVFNzIsIDB4MDI4RCwgMHg1RTczLCAweDAzM0IsDQotICAgIDB4NUU3NCwgMHgwM0NCLCAweDVFNzUsIDB4MTdFNCwgMHg1RTc2LCAweDAzQ0EsIDB4NUU3OCwgMHgwNUIxLA0KLSAgICAweDVFNzksIDB4MEUwMCwgMHg1RTdBLCAweDAyMjcsIDB4NUU3QiwgMHgwMkNDLCAweDVFN0MsIDB4MDMzQywNCi0gICAgMHg1RTdELCAweDA3MTEsIDB4NUU3RSwgMHgwQzNCLCAweDVFN0YsIDB4MDIyOCwgMHg1RTgwLCAweDE3QTUsDQotICAgIDB4NUU4MiwgMHgxN0E2LCAweDVFODQsIDB4MTdFNSwgMHg1RTg3LCAweDA0OTAsIDB4NUU4OCwgMHgxODc3LA0KLSAgICAweDVFODksIDB4MTg3NSwgMHg1RThBLCAweDA0OTEsIDB4NUU4QiwgMHgxODc0LCAweDVFOEMsIDB4MTg3NiwNCi0gICAgMHg1RThELCAweDE4NzgsIDB4NUU4RiwgMHgwNDhGLCAweDVFOTUsIDB4MDVCNSwgMHg1RTk2LCAweDA1QjYsDQotICAgIDB4NUU5NywgMHgwNUIzLCAweDVFOUEsIDB4MDVCMiwgMHg1RTlCLCAweDFBRDIsIDB4NUU5QywgMHgwNUI0LA0KLSAgICAweDVFQTAsIDB4MDcxMiwgMHg1RUEyLCAweDFBRDEsIDB4NUVBMywgMHgxQUQzLCAweDVFQTQsIDB4MUFEMCwNCi0gICAgMHg1RUE1LCAweDFBRDQsIDB4NUVBNiwgMHgwNzEzLCAweDVFQTcsIDB4MDhBRCwgMHg1RUE4LCAweDFDODgsDQotICAgIDB4NUVBQSwgMHgxQzhBLCAweDVFQUIsIDB4MDhBQiwgMHg1RUFDLCAweDFDOEIsIDB4NUVBRCwgMHgwOEFDLA0KLSAgICAweDVFQUUsIDB4MUM4OSwgMHg1RUIwLCAweDFBQ0YsIDB4NUVCMSwgMHgxRUNFLCAweDVFQjIsIDB4MUVEMSwNCi0gICAgMHg1RUIzLCAweDFFRDIsIDB4NUVCNCwgMHgxRUNGLCAweDVFQjUsIDB4MEE3MywgMHg1RUI2LCAweDBBNzIsDQotICAgIDB4NUVCNywgMHgwQTcwLCAweDVFQjgsIDB4MEE3MSwgMHg1RUI5LCAweDFFRDAsIDB4NUVCRSwgMHgwQTc0LA0KLSAgICAweDVFQzEsIDB4MEMzRCwgMHg1RUMyLCAweDBDM0UsIDB4NUVDNCwgMHgwQzNGLCAweDVFQzUsIDB4MjNDQywNCi0gICAgMHg1RUM2LCAweDIzQ0UsIDB4NUVDNywgMHgyM0QwLCAweDVFQzgsIDB4MEUwMiwgMHg1RUM5LCAweDBFMDEsDQotICAgIDB4NUVDQSwgMHgwQzNDLCAweDVFQ0IsIDB4MjNDRiwgMHg1RUNDLCAweDIzQ0QsIDB4NUVDRSwgMHgyNjc4LA0KLSAgICAweDVFRDEsIDB4MjY3NiwgMHg1RUQyLCAweDI2N0MsIDB4NUVEMywgMHgwRkNBLCAweDVFRDQsIDB4MjY3RCwNCi0gICAgMHg1RUQ1LCAweDI2N0EsIDB4NUVENiwgMHgwRkNCLCAweDVFRDcsIDB4MjY3NywgMHg1RUQ4LCAweDI2NzUsDQotICAgIDB4NUVEOSwgMHgyNjdCLCAweDVFREEsIDB4MTEzQywgMHg1RURCLCAweDI4QzksIDB4NUVEQywgMHgyNjc5LA0KLSAgICAweDVFREQsIDB4MTEzRSwgMHg1RURFLCAweDI4Q0EsIDB4NUVERiwgMHgxMTNELCAweDVFRTAsIDB4MTE0MCwNCi0gICAgMHg1RUUxLCAweDI4Q0IsIDB4NUVFMiwgMHgxMTNCLCAweDVFRTMsIDB4MTEzRiwgMHg1RUU1LCAweDJCM0UsDQotICAgIDB4NUVFNiwgMHgyQjNDLCAweDVFRTcsIDB4MkIzQiwgMHg1RUU4LCAweDJCM0QsIDB4NUVFOSwgMHgyQjNBLA0KLSAgICAweDVFRUMsIDB4MTU3RCwgMHg1RUVFLCAweDMxQ0YsIDB4NUVFRiwgMHgzMUQwLCAweDVFRjEsIDB4MzJEMCwNCi0gICAgMHg1RUYyLCAweDMzODAsIDB4NUVGMywgMHgxNzQyLCAweDVFRjQsIDB4MDIyOSwgMHg1RUY2LCAweDA1QjcsDQotICAgIDB4NUVGNywgMHgwNDkyLCAweDVFRkEsIDB4MDcxNCwgMHg1RUZFLCAweDAyOEUsIDB4NUVGRiwgMHgwMkNELA0KLSAgICAweDVGMDEsIDB4MDMzRCwgMHg1RjAyLCAweDE3RTYsIDB4NUYwNCwgMHgwNDkzLCAweDVGMDUsIDB4MTg3OSwNCi0gICAgMHg1RjA3LCAweDFBRDUsIDB4NUYwOCwgMHgwNzE1LCAweDVGMEEsIDB4MEZDQywgMHg1RjBCLCAweDAyOEYsDQotICAgIDB4NUYwRiwgMHgwM0NDLCAweDVGMTIsIDB4MEUwMywgMHg1RjEzLCAweDAyOTAsIDB4NUYxNCwgMHgwMkNFLA0KLSAgICAweDVGMTUsIDB4MDJDRiwgMHg1RjE3LCAweDAzM0YsIDB4NUYxOCwgMHgwMzNFLCAweDVGMUEsIDB4MTdFNywNCi0gICAgMHg1RjFCLCAweDAzQ0QsIDB4NUYxRCwgMHgxODdBLCAweDVGMUYsIDB4MDQ5NCwgMHg1RjIyLCAweDE5NzMsDQotICAgIDB4NUYyMywgMHgxOTc0LCAweDVGMjQsIDB4MTk3NSwgMHg1RjI2LCAweDA1QjgsIDB4NUYyNywgMHgwNUI5LA0KLSAgICAweDVGMjgsIDB4MTk3MiwgMHg1RjI5LCAweDA1QkEsIDB4NUYyRCwgMHgwNzE2LCAweDVGMkUsIDB4MUFENiwNCi0gICAgMHg1RjMwLCAweDFDOEQsIDB4NUYzMSwgMHgwOEFFLCAweDVGMzMsIDB4MUM4QywgMHg1RjM1LCAweDBBNzUsDQotICAgIDB4NUYzNiwgMHgxRUQzLCAweDVGMzcsIDB4MEE3NiwgMHg1RjM4LCAweDFFRDQsIDB4NUYzQywgMHgwQzQwLA0KLSAgICAweDVGNDAsIDB4MjNEMSwgMHg1RjQzLCAweDI2N0YsIDB4NUY0NCwgMHgyNjdFLCAweDVGNDYsIDB4MEZDRCwNCi0gICAgMHg1RjQ4LCAweDExNDEsIDB4NUY0OSwgMHgyOENDLCAweDVGNEEsIDB4MTJBRCwgMHg1RjRCLCAweDJCM0YsDQotICAgIDB4NUY0QywgMHgxM0NFLCAweDVGNEUsIDB4MTZDMywgMHg1RjRGLCAweDM0MTYsIDB4NUY1MCwgMHgwMjJBLA0KLSAgICAweDVGNTQsIDB4MTk3NiwgMHg1RjU2LCAweDFBRDcsIDB4NUY1NywgMHgwQTc3LCAweDVGNTgsIDB4MjEyRiwNCi0gICAgMHg1RjU5LCAweDBFMDQsIDB4NUY1RCwgMHgxNENGLCAweDVGNjEsIDB4MDIyQiwgMHg1RjYyLCAweDA0OTYsDQotICAgIDB4NUY2NCwgMHgwNDk1LCAweDVGNjUsIDB4MDcxNywgMHg1RjY3LCAweDFDOEUsIDB4NUY2OSwgMHgwQTc5LA0KLSAgICAweDVGNkEsIDB4MEI4OSwgMHg1RjZCLCAweDBBN0EsIDB4NUY2QywgMHgwQTc4LCAweDVGNkQsIDB4MEM0MSwNCi0gICAgMHg1RjZGLCAweDI2ODAsIDB4NUY3MCwgMHgwRkNFLCAweDVGNzEsIDB4MTE0MiwgMHg1RjczLCAweDE3NzcsDQotICAgIDB4NUY3NCwgMHgxN0U4LCAweDVGNzYsIDB4MTg3QywgMHg1Rjc3LCAweDA0OTcsIDB4NUY3OCwgMHgxODdCLA0KLSAgICAweDVGNzksIDB4MDQ5OCwgMHg1RjdDLCAweDA1QkUsIDB4NUY3RCwgMHgxOTc5LCAweDVGN0UsIDB4MTk3OCwNCi0gICAgMHg1RjdGLCAweDA1QkQsIDB4NUY4MCwgMHgwNUJCLCAweDVGODEsIDB4MDVCQywgMHg1RjgyLCAweDE5NzcsDQotICAgIDB4NUY4NSwgMHgwNzE5LCAweDVGODYsIDB4MUFEOCwgMHg1Rjg3LCAweDA3MUMsIDB4NUY4OCwgMHgwNzE4LA0KLSAgICAweDVGODksIDB4MDcxRSwgMHg1RjhBLCAweDA3MUEsIDB4NUY4QiwgMHgwNzFCLCAweDVGOEMsIDB4MDcxRCwNCi0gICAgMHg1RjkwLCAweDA4QjEsIDB4NUY5MSwgMHgwOEIwLCAweDVGOTIsIDB4MDhBRiwgMHg1Rjk2LCAweDFFRDYsDQotICAgIDB4NUY5NywgMHgwQTdCLCAweDVGOTgsIDB4MEE3RSwgMHg1Rjk5LCAweDBBN0MsIDB4NUY5QiwgMHgxRUQ1LA0KLSAgICAweDVGOUMsIDB4MEE4MSwgMHg1RjlFLCAweDBBN0QsIDB4NUY5RiwgMHgxRUQ3LCAweDVGQTAsIDB4MEE4MCwNCi0gICAgMHg1RkExLCAweDBBN0YsIDB4NUZBNSwgMHgyMTMxLCAweDVGQTYsIDB4MjEzMCwgMHg1RkE4LCAweDBDNDQsDQotICAgIDB4NUZBOSwgMHgwQzQyLCAweDVGQUEsIDB4MEM0MywgMHg1RkFCLCAweDIxMzIsIDB4NUZBQywgMHgwRTA1LA0KLSAgICAweDVGQUQsIDB4MjNEMywgMHg1RkFFLCAweDBFMDYsIDB4NUZBRiwgMHgyM0QyLCAweDVGQjIsIDB4MjhDRCwNCi0gICAgMHg1RkI1LCAweDExNDQsIDB4NUZCNiwgMHgyNjgxLCAweDVGQjcsIDB4MTE0MywgMHg1RkI5LCAweDBGQ0YsDQotICAgIDB4NUZCQiwgMHgyQjQxLCAweDVGQkMsIDB4MkI0MCwgMHg1RkJELCAweDEzQ0YsIDB4NUZCRSwgMHgyRDVFLA0KLSAgICAweDVGQkYsIDB4MzA4RSwgMHg1RkMwLCAweDMxRDEsIDB4NUZDMSwgMHgzMUQyLCAweDVGQzMsIDB4MDJEMCwNCi0gICAgMHg1RkM1LCAweDAzNDAsIDB4NUZDOSwgMHgxN0E3LCAweDVGQ0MsIDB4MDQ5QSwgMHg1RkNELCAweDA0OUMsDQotICAgIDB4NUZDRiwgMHgxN0VCLCAweDVGRDAsIDB4MTg3RiwgMHg1RkQxLCAweDE4N0UsIDB4NUZEMiwgMHgxODdELA0KLSAgICAweDVGRDQsIDB4MTdFQSwgMHg1RkQ1LCAweDE3RTksIDB4NUZENiwgMHgwM0NGLCAweDVGRDcsIDB4MDQ5QiwNCi0gICAgMHg1RkQ4LCAweDA0OTksIDB4NUZEOSwgMHgwM0NFLCAweDVGREQsIDB4MDVCRiwgMHg1RkRFLCAweDE5N0EsDQotICAgIDB4NUZFMCwgMHgwNUMwLCAweDVGRTEsIDB4MTg4NCwgMHg1RkUzLCAweDE4ODYsIDB4NUZFNCwgMHgxODg1LA0KLSAgICAweDVGRTUsIDB4MTk3QiwgMHg1RkU4LCAweDE4ODEsIDB4NUZFQSwgMHgwNEEwLCAweDVGRUIsIDB4MDQ5RSwNCi0gICAgMHg1RkVELCAweDE4ODAsIDB4NUZFRSwgMHgxODgyLCAweDVGRUYsIDB4MTg4OCwgMHg1RkYxLCAweDA0OUQsDQotICAgIDB4NUZGMywgMHgxODgzLCAweDVGRjQsIDB4MTg4QywgMHg1RkY1LCAweDA1QzIsIDB4NUZGNywgMHgxODg5LA0KLSAgICAweDVGRjgsIDB4MDQ5RiwgMHg1RkZBLCAweDE4ODcsIDB4NUZGQiwgMHgxODhBLCAweDVGRkQsIDB4MDVDMSwNCi0gICAgMHg1RkZGLCAweDA1QzMsIDB4NjAwMCwgMHgxODhCLCAweDYwMDksIDB4MTk4RiwgMHg2MDBBLCAweDE5ODIsDQotICAgIDB4NjAwQiwgMHgxOTgwLCAweDYwMEMsIDB4MTk4RSwgMHg2MDBELCAweDE5ODksIDB4NjAwRSwgMHgwNzIzLA0KLSAgICAweDYwMEYsIDB4MDVDNCwgMHg2MDEwLCAweDE5OEEsIDB4NjAxMSwgMHgxOThELCAweDYwMTIsIDB4MDcxRiwNCi0gICAgMHg2MDEzLCAweDE5OEMsIDB4NjAxNCwgMHgwNUM1LCAweDYwMTUsIDB4MDVDQSwgMHg2MDE2LCAweDA1QzgsDQotICAgIDB4NjAxNywgMHgxOTgzLCAweDYwMTksIDB4MTk3RSwgMHg2MDFBLCAweDE5ODUsIDB4NjAxQiwgMHgwNUNGLA0KLSAgICAweDYwMUMsIDB4MTk5MCwgMHg2MDFELCAweDA3MjAsIDB4NjAxRSwgMHgxOTg2LCAweDYwMjAsIDB4MDcyMSwNCi0gICAgMHg2MDIxLCAweDA1Q0IsIDB4NjAyMiwgMHgxOTg4LCAweDYwMjQsIDB4MUFFNywgMHg2MDI1LCAweDA3MjIsDQotICAgIDB4NjAyNiwgMHgxOTdELCAweDYwMjcsIDB4MDVDQywgMHg2MDI4LCAweDA3MjQsIDB4NjAyOSwgMHgwNUNELA0KLSAgICAweDYwMkEsIDB4MDVDOSwgMHg2MDJCLCAweDA1Q0UsIDB4NjAyQywgMHgxOTg3LCAweDYwMkQsIDB4MTk3QywNCi0gICAgMHg2MDJFLCAweDE5OEIsIDB4NjAyRiwgMHgwNUM2LCAweDYwMzIsIDB4MTk3RiwgMHg2MDMzLCAweDE5ODQsDQotICAgIDB4NjAzNCwgMHgxOTgxLCAweDYwMzUsIDB4MDVDNywgMHg2MDM3LCAweDFBRDksIDB4NjAzOSwgMHgxQURBLA0KLSAgICAweDYwNDAsIDB4MUFFNCwgMHg2MDQxLCAweDFDOTIsIDB4NjA0MiwgMHgxQUU1LCAweDYwNDMsIDB4MDcyQSwNCi0gICAgMHg2MDQ0LCAweDFBRTgsIDB4NjA0NSwgMHgxQURFLCAweDYwNDYsIDB4MDcyOSwgMHg2MDQ3LCAweDFBRTAsDQotICAgIDB4NjA0OSwgMHgxQUUxLCAweDYwNEMsIDB4MUFFMywgMHg2MDRELCAweDA3MjUsIDB4NjA1MCwgMHgwOEI1LA0KLSAgICAweDYwNTIsIDB4MzZFQywgMHg2MDUzLCAweDFBREYsIDB4NjA1NCwgMHgxQURCLCAweDYwNTUsIDB4MDhCNiwNCi0gICAgMHg2MDU4LCAweDFBRTksIDB4NjA1OSwgMHgwOEIyLCAweDYwNUEsIDB4MUM5MCwgMHg2MDVCLCAweDFBRTIsDQotICAgIDB4NjA1RCwgMHgxQzhGLCAweDYwNUUsIDB4MUFERCwgMHg2MDVGLCAweDFBRTYsIDB4NjA2MiwgMHgwNzI4LA0KLSAgICAweDYwNjMsIDB4MDhCMywgMHg2MDY0LCAweDA3MkUsIDB4NjA2NSwgMHgwOEI0LCAweDYwNjYsIDB4MUFFQSwNCi0gICAgMHg2MDY3LCAweDFDOTEsIDB4NjA2OCwgMHgwNzI3LCAweDYwNjksIDB4MDhCOCwgMHg2MDZBLCAweDA3MkQsDQotICAgIDB4NjA2QiwgMHgwNzJDLCAweDYwNkMsIDB4MDcyQiwgMHg2MDZELCAweDA4QjcsIDB4NjA2RSwgMHgxQUVCLA0KLSAgICAweDYwNkYsIDB4MDhCOSwgMHg2MDcwLCAweDA3MjYsIDB4NjA3MiwgMHgxQURDLCAweDYwN0YsIDB4MEE4MiwNCi0gICAgMHg2MDgwLCAweDFDOTUsIDB4NjA4MSwgMHgxQzk3LCAweDYwODMsIDB4MUM5OSwgMHg2MDg0LCAweDA4QkEsDQotICAgIDB4NjA4NSwgMHgwOEMwLCAweDYwODYsIDB4MUVEQSwgMHg2MDg3LCAweDFDOUQsIDB4NjA4OCwgMHgxQzk0LA0KLSAgICAweDYwODksIDB4MEE4NCwgMHg2MDhBLCAweDFFRDgsIDB4NjA4QywgMHgwOEJGLCAweDYwOEQsIDB4MDhCRCwNCi0gICAgMHg2MDhFLCAweDFDOUYsIDB4NjA5MCwgMHgxRUQ5LCAweDYwOTIsIDB4MUM5NiwgMHg2MDk0LCAweDA4QkUsDQotICAgIDB4NjA5NSwgMHgxQzlBLCAweDYwOTYsIDB4MDhDMSwgMHg2MDk3LCAweDFDOUMsIDB4NjA5QSwgMHgwOEJDLA0KLSAgICAweDYwOUIsIDB4MUM5QiwgMHg2MDlDLCAweDFDOUUsIDB4NjA5RCwgMHgxQzk4LCAweDYwOUYsIDB4MDhCQiwNCi0gICAgMHg2MEEwLCAweDBBODUsIDB4NjBBMiwgMHgxQzkzLCAweDYwQTMsIDB4MEE4MywgMHg2MEE4LCAweDBBODYsDQotICAgIDB4NjBCMCwgMHgxRURDLCAweDYwQjEsIDB4MUVFNSwgMHg2MEIyLCAweDBDNDcsIDB4NjBCNCwgMHgwQTg4LA0KLSAgICAweDYwQjUsIDB4MEE4RCwgMHg2MEI2LCAweDBDNDgsIDB4NjBCNywgMHgxRUU3LCAweDYwQjgsIDB4MEE5NCwNCi0gICAgMHg2MEI5LCAweDIxMzQsIDB4NjBCQSwgMHgxRURELCAweDYwQkIsIDB4MEE4QywgMHg2MEJDLCAweDBBOEYsDQotICAgIDB4NjBCRCwgMHgwQThBLCAweDYwQkUsIDB4MUVEQiwgMHg2MEJGLCAweDFFRTksIDB4NjBDMCwgMHgxRUVDLA0KLSAgICAweDYwQzEsIDB4MjE0MywgMHg2MEMzLCAweDFFRUEsIDB4NjBDNCwgMHgyMTM4LCAweDYwQzUsIDB4MEE4QiwNCi0gICAgMHg2MEM2LCAweDBBOTIsIDB4NjBDNywgMHgwQTk2LCAweDYwQzgsIDB4MUVFNCwgMHg2MEM5LCAweDIxMzMsDQotICAgIDB4NjBDQSwgMHgxRUU4LCAweDYwQ0IsIDB4MEE4NywgMHg2MENDLCAweDIxMzUsIDB4NjBDRCwgMHgxRUVCLA0KLSAgICAweDYwQ0UsIDB4MjEzNywgMHg2MENGLCAweDFFRTAsIDB4NjBEMSwgMHgwQzQ1LCAweDYwRDMsIDB4MUVERSwNCi0gICAgMHg2MEQ0LCAweDFFREYsIDB4NjBENSwgMHgwQTkxLCAweDYwRDgsIDB4MEE5MCwgMHg2MEQ5LCAweDFFRTIsDQotICAgIDB4NjBEQSwgMHgwQTk1LCAweDYwREIsIDB4MUVFNiwgMHg2MERDLCAweDBBOEUsIDB4NjBERCwgMHgxRUUzLA0KLSAgICAweDYwREYsIDB4MEE5MywgMHg2MEUwLCAweDBDNDksIDB4NjBFMSwgMHgwQzQ2LCAweDYwRTIsIDB4MjEzNiwNCi0gICAgMHg2MEU0LCAweDFFRTEsIDB4NjBFNiwgMHgwQTg5LCAweDYwRjAsIDB4MEM0RSwgMHg2MEYxLCAweDBDNTIsDQotICAgIDB4NjBGMiwgMHgyMTNBLCAweDYwRjMsIDB4MEUwQiwgMHg2MEY0LCAweDBDNTAsIDB4NjBGNSwgMHgyMTNFLA0KLSAgICAweDYwRjYsIDB4MEM1NCwgMHg2MEY3LCAweDIzRDQsIDB4NjBGOCwgMHgyMTQwLCAweDYwRjksIDB4MEUwRCwNCi0gICAgMHg2MEZBLCAweDBDNEMsIDB4NjBGQiwgMHgwQzRGLCAweDYwRkMsIDB4MjE0MSwgMHg2MEZFLCAweDIxNDIsDQotICAgIDB4NjBGRiwgMHgyMTQ4LCAweDYxMDAsIDB4MEM1NiwgMHg2MTAxLCAweDBFMEUsIDB4NjEwMywgMHgyMTQ0LA0KLSAgICAweDYxMDQsIDB4MjE0OSwgMHg2MTA1LCAweDIxM0QsIDB4NjEwNiwgMHgwRTE4LCAweDYxMDgsIDB4MEUwRiwNCi0gICAgMHg2MTA5LCAweDBDNTUsIDB4NjEwQSwgMHgyMTNCLCAweDYxMEIsIDB4MjE0QSwgMHg2MTBELCAweDBFMTcsDQotICAgIDB4NjEwRSwgMHgwQzUzLCAweDYxMEYsIDB4MEUwOCwgMHg2MTEwLCAweDIxNDcsIDB4NjExMiwgMHgwQzU3LA0KLSAgICAweDYxMTMsIDB4MjEzRiwgMHg2MTE0LCAweDIxMzksIDB4NjExNSwgMHgwQzRELCAweDYxMTYsIDB4MjEzQywNCi0gICAgMHg2MTE4LCAweDIxNDUsIDB4NjExQSwgMHgwRTA3LCAweDYxMUIsIDB4MEUwQywgMHg2MTFDLCAweDBDNEEsDQotICAgIDB4NjExRCwgMHgyMTQ2LCAweDYxMUYsIDB4MEUwQSwgMHg2MTIzLCAweDBDNEIsIDB4NjEyNywgMHgwRTE2LA0KLSAgICAweDYxMjgsIDB4MjY4MywgMHg2MTI5LCAweDIzREYsIDB4NjEyQiwgMHgyM0Q3LCAweDYxMkMsIDB4MjY4MiwNCi0gICAgMHg2MTJFLCAweDIzREIsIDB4NjEyRiwgMHgyM0RELCAweDYxMzIsIDB4MjNEQSwgMHg2MTM0LCAweDBFMTUsDQotICAgIDB4NjEzNiwgMHgyM0Q5LCAweDYxMzcsIDB4MEUxOSwgMHg2MTNCLCAweDI2OTIsIDB4NjEzRSwgMHgwRTE0LA0KLSAgICAweDYxM0YsIDB4MEZEMSwgMHg2MTQwLCAweDIzRTAsIDB4NjE0MSwgMHgyNjg0LCAweDYxNDQsIDB4MEUxMiwNCi0gICAgMHg2MTQ1LCAweDIzRDgsIDB4NjE0NiwgMHgyM0RDLCAweDYxNDcsIDB4MEZEMCwgMHg2MTQ4LCAweDBFMDksDQotICAgIDB4NjE0OSwgMHgyM0Q1LCAweDYxNEEsIDB4MjNENiwgMHg2MTRCLCAweDBGRDIsIDB4NjE0QywgMHgwRTExLA0KLSAgICAweDYxNEQsIDB4MEUxMywgMHg2MTRFLCAweDBFMTAsIDB4NjE0RiwgMHgyM0RFLCAweDYxNTIsIDB4MjY4OCwNCi0gICAgMHg2MTUzLCAweDI2ODksIDB4NjE1NCwgMHgyNjhFLCAweDYxNTUsIDB4MTE0OSwgMHg2MTU2LCAweDI2OTUsDQotICAgIDB4NjE1OCwgMHgwRkQ4LCAweDYxNUEsIDB4MEZENywgMHg2MTVCLCAweDI2OTAsIDB4NjE1RCwgMHgxMTQ4LA0KLSAgICAweDYxNUUsIDB4MjY4NSwgMHg2MTVGLCAweDBGRDYsIDB4NjE2MSwgMHgyNjk0LCAweDYxNjIsIDB4MEZENCwNCi0gICAgMHg2MTYzLCAweDBGRDUsIDB4NjE2NSwgMHgyNjkxLCAweDYxNjYsIDB4MjhERSwgMHg2MTY3LCAweDExNDYsDQotICAgIDB4NjE2OCwgMHgwQzUxLCAweDYxNkEsIDB4MjY5MywgMHg2MTZCLCAweDExNEQsIDB4NjE2QywgMHgyNjhCLA0KLSAgICAweDYxNkUsIDB4MTE0NywgMHg2MTcwLCAweDExNEMsIDB4NjE3MSwgMHgyNjg2LCAweDYxNzIsIDB4MjY4QSwNCi0gICAgMHg2MTczLCAweDI2ODcsIDB4NjE3NCwgMHgyNjhELCAweDYxNzUsIDB4MEZEOSwgMHg2MTc2LCAweDExNDUsDQotICAgIDB4NjE3NywgMHgwRkQzLCAweDYxNzksIDB4MjhEMCwgMHg2MTdBLCAweDI2OEYsIDB4NjE3QywgMHgxMTRCLA0KLSAgICAweDYxN0UsIDB4MTE0RSwgMHg2MTgwLCAweDI2OEMsIDB4NjE4MiwgMHgxMTRBLCAweDYxODMsIDB4MjhDRiwNCi0gICAgMHg2MTg5LCAweDI4RDQsIDB4NjE4QSwgMHgxMkIxLCAweDYxOEIsIDB4MjhDRSwgMHg2MThDLCAweDJCNEQsDQotICAgIDB4NjE4RCwgMHgyOERELCAweDYxOEUsIDB4MTE1MiwgMHg2MTkwLCAweDExNTAsIDB4NjE5MSwgMHgxMkFGLA0KLSAgICAweDYxOTIsIDB4MjhEQSwgMHg2MTkzLCAweDI4RDYsIDB4NjE5NCwgMHgxMTU2LCAweDYxOTYsIDB4MkI0NCwNCi0gICAgMHg2MTlBLCAweDExNTQsIDB4NjE5QiwgMHgyOEQ1LCAweDYxOUQsIDB4MkI0MiwgMHg2MTlGLCAweDI4RDksDQotICAgIDB4NjFBMSwgMHgyOERDLCAweDYxQTIsIDB4MjhEMywgMHg2MUE0LCAweDExNTUsIDB4NjFBNywgMHgxMTRGLA0KLSAgICAweDYxQTgsIDB4MkI0MywgMHg2MUE5LCAweDEyQjAsIDB4NjFBQSwgMHgyOERCLCAweDYxQUIsIDB4MTE1MSwNCi0gICAgMHg2MUFDLCAweDExNTMsIDB4NjFBRCwgMHgyOEQ4LCAweDYxQUUsIDB4MTE1NywgMHg2MUFGLCAweDI4RDcsDQotICAgIDB4NjFCMCwgMHgyOEQyLCAweDYxQjEsIDB4MjhEMSwgMHg2MUIyLCAweDEyQUUsIDB4NjFCMywgMHgyOERGLA0KLSAgICAweDYxQjQsIDB4MkI0NiwgMHg2MUI1LCAweDJENjAsIDB4NjFCNiwgMHgxMkIzLCAweDYxQjgsIDB4MkI0QywNCi0gICAgMHg2MUJBLCAweDJCNEEsIDB4NjFCQywgMHgyRDYxLCAweDYxQkUsIDB4MTJCNCwgMHg2MUJGLCAweDJCNEIsDQotICAgIDB4NjFDMSwgMHgyQjQ4LCAweDYxQzIsIDB4MTNEMSwgMHg2MUMzLCAweDJENUYsIDB4NjFDNSwgMHgyQjQ1LA0KLSAgICAweDYxQzYsIDB4MkI0NywgMHg2MUM3LCAweDEzRDIsIDB4NjFDOCwgMHgxMkI2LCAweDYxQzksIDB4MTNEMCwNCi0gICAgMHg2MUNBLCAweDEyQjUsIDB4NjFDQiwgMHgxM0Q0LCAweDYxQ0MsIDB4MkI0OSwgMHg2MUNELCAweDEyQjIsDQotICAgIDB4NjFENiwgMHgyRjI2LCAweDYxRDgsIDB4MkYxRSwgMHg2MURFLCAweDJENjcsIDB4NjFERiwgMHgyRjFGLA0KLSAgICAweDYxRTAsIDB4MkQ2MywgMHg2MUUzLCAweDE0RDAsIDB4NjFFNCwgMHgyRDY1LCAweDYxRTUsIDB4MkQ2NCwNCi0gICAgMHg2MUU2LCAweDEzRDMsIDB4NjFFNywgMHgyRDYyLCAweDYxRTgsIDB4MkQ2NiwgMHg2MUU5LCAweDJGMjcsDQotICAgIDB4NjFFQSwgMHgyRjIzLCAweDYxRUIsIDB4MkYyNSwgMHg2MUVELCAweDJGMjAsIDB4NjFFRSwgMHgyRjIxLA0KLSAgICAweDYxRjAsIDB4MkYyNCwgMHg2MUYxLCAweDJGMjIsIDB4NjFGMiwgMHgxNTdFLCAweDYxRjUsIDB4MTU4MSwNCi0gICAgMHg2MUY2LCAweDE1ODAsIDB4NjFGNywgMHgxNTdGLCAweDYxRjgsIDB4MTYxNCwgMHg2MUY5LCAweDMxRDMsDQotICAgIDB4NjFGQSwgMHgxNjE1LCAweDYxRkIsIDB4MzA4RiwgMHg2MUZDLCAweDE2NzAsIDB4NjFGRCwgMHgzMkQxLA0KLSAgICAweDYxRkUsIDB4MTY3MSwgMHg2MUZGLCAweDE2QzQsIDB4NjIwMCwgMHgxNkY4LCAweDYyMDEsIDB4MzQxNywNCi0gICAgMHg2MjAzLCAweDM0MTgsIDB4NjIwNCwgMHgzNDE5LCAweDYyMDcsIDB4MzUzMywgMHg2MjA4LCAweDAyRDEsDQotICAgIDB4NjIwOSwgMHgxN0E4LCAweDYyMEEsIDB4MDM0MSwgMHg2MjBDLCAweDAzRDEsIDB4NjIwRCwgMHgwM0QyLA0KLSAgICAweDYyMEUsIDB4MDNEMCwgMHg2MjEwLCAweDAzRDMsIDB4NjIxMSwgMHgwNEEyLCAweDYyMTIsIDB4MDRBMSwNCi0gICAgMHg2MjE0LCAweDE5OTEsIDB4NjIxNSwgMHgwNUQxLCAweDYyMTYsIDB4MDVEMCwgMHg2MjE5LCAweDFDQTAsDQotICAgIDB4NjIxQSwgMHgwQTk3LCAweDYyMUIsIDB4MEE5OCwgMHg2MjFGLCAweDBDNTgsIDB4NjIyMCwgMHgyM0UxLA0KLSAgICAweDYyMjEsIDB4MEUxQSwgMHg2MjIyLCAweDBFMUIsIDB4NjIyMywgMHgyM0UzLCAweDYyMjQsIDB4MjNFNSwNCi0gICAgMHg2MjI1LCAweDIzRTQsIDB4NjIyNywgMHgyNjk3LCAweDYyMjksIDB4MjY5NiwgMHg2MjJBLCAweDBGREEsDQotICAgIDB4NjIyQiwgMHgyNjk4LCAweDYyMkQsIDB4MjhFMCwgMHg2MjJFLCAweDExNTgsIDB4NjIzMCwgMHgxMkI3LA0KLSAgICAweDYyMzIsIDB4MTNENSwgMHg2MjMzLCAweDE0RDEsIDB4NjIzNCwgMHgxM0Q2LCAweDYyMzYsIDB4MDJEMiwNCi0gICAgMHg2MjNBLCAweDE4OEQsIDB4NjIzRCwgMHgxOTkyLCAweDYyM0UsIDB4MDVEMywgMHg2MjNGLCAweDA1RDIsDQotICAgIDB4NjI0MCwgMHgwNUQ0LCAweDYyNDEsIDB4MDcyRiwgMHg2MjQyLCAweDFBRUMsIDB4NjI0MywgMHgxQUVELA0KLSAgICAweDYyNDYsIDB4MUNBMSwgMHg2MjQ3LCAweDA4QzIsIDB4NjI0OCwgMHgwQTk5LCAweDYyNDksIDB4MEM1OSwNCi0gICAgMHg2MjRBLCAweDIxNEIsIDB4NjI0QiwgMHgwMkQzLCAweDYyNEQsIDB4MDI5MSwgMHg2MjRFLCAweDAyRDQsDQotICAgIDB4NjI1MCwgMHgxN0E5LCAweDYyNTEsIDB4MDM0NSwgMHg2MjUyLCAweDAzNDQsIDB4NjI1MywgMHgwMzQyLA0KLSAgICAweDYyNTQsIDB4MDM0MywgMHg2MjU4LCAweDAzRDYsIDB4NjI1OSwgMHgxN0YyLCAweDYyNUEsIDB4MTdGNCwNCi0gICAgMHg2MjVCLCAweDAzRDUsIDB4NjI1QywgMHgxN0VDLCAweDYyNUUsIDB4MTdFRCwgMHg2MjYwLCAweDE3RjMsDQotICAgIDB4NjI2MSwgMHgxN0VGLCAweDYyNjIsIDB4MTdGMSwgMHg2MjYzLCAweDAzRDQsIDB4NjI2NCwgMHgxN0VFLA0KLSAgICAweDYyNjUsIDB4MTdGNSwgMHg2MjY2LCAweDE3RjAsIDB4NjI2RCwgMHgwNEE5LCAweDYyNkUsIDB4MDRCMiwNCi0gICAgMHg2MjZGLCAweDA0QjAsIDB4NjI3MCwgMHgxODk3LCAweDYyNzEsIDB4MTg5NCwgMHg2MjcyLCAweDE4OUMsDQotICAgIDB4NjI3MywgMHgwNEFFLCAweDYyNzQsIDB4MTg5RCwgMHg2Mjc2LCAweDA0QTcsIDB4NjI3NywgMHgxODlBLA0KLSAgICAweDYyNzksIDB4MDRBRCwgMHg2MjdBLCAweDE4OTYsIDB4NjI3QiwgMHgxODk1LCAweDYyN0MsIDB4MDRBQiwNCi0gICAgMHg2MjdELCAweDE4OUIsIDB4NjI3RSwgMHgwNEFDLCAweDYyN0YsIDB4MDVENSwgMHg2MjgwLCAweDA0QTYsDQotICAgIDB4NjI4MSwgMHgxODk4LCAweDYyODMsIDB4MTg4RSwgMHg2Mjg0LCAweDA0QTMsIDB4NjI4NiwgMHgwNEI2LA0KLSAgICAweDYyODcsIDB4MTg5MywgMHg2Mjg4LCAweDE4OTksIDB4NjI4OSwgMHgwNEE4LCAweDYyOEEsIDB4MDRBQSwNCi0gICAgMHg2MjhDLCAweDE4OEYsIDB4NjI4RSwgMHgxODkwLCAweDYyOEYsIDB4MTg5MSwgMHg2MjkxLCAweDA0QjUsDQotICAgIDB4NjI5MiwgMHgwNEFGLCAweDYyOTMsIDB4MDRCNCwgMHg2Mjk0LCAweDE4OTIsIDB4NjI5NSwgMHgwNEIzLA0KLSAgICAweDYyOTYsIDB4MDRBNSwgMHg2Mjk3LCAweDA0QTQsIDB4NjI5OCwgMHgwNEIxLCAweDYyQTgsIDB4MDVFMywNCi0gICAgMHg2MkE5LCAweDE5OUUsIDB4NjJBQSwgMHgxOTk3LCAweDYyQUIsIDB4MDVERSwgMHg2MkFDLCAweDA1RjEsDQotICAgIDB4NjJBRCwgMHgxOTkzLCAweDYyQUUsIDB4MTk5QSwgMHg2MkFGLCAweDE5OUMsIDB4NjJCMCwgMHgxOTlGLA0KLSAgICAweDYyQjEsIDB4MDVFQywgMHg2MkIzLCAweDE5OUIsIDB4NjJCNCwgMHgxOTk0LCAweDYyQjUsIDB4MDVFQSwNCi0gICAgMHg2MkI2LCAweDE5OTgsIDB4NjJCOCwgMHgxOUEwLCAweDYyQjksIDB4MDVEQiwgMHg2MkJCLCAweDE5OUQsDQotICAgIDB4NjJCQywgMHgwNUU1LCAweDYyQkQsIDB4MDVFNCwgMHg2MkJFLCAweDE5OTYsIDB4NjJCRiwgMHgwNUQ5LA0KLSAgICAweDYyQzIsIDB4MDVEQSwgMHg2MkM0LCAweDA1RDgsIDB4NjJDNiwgMHgwNUYwLCAweDYyQzcsIDB4MDVFOCwNCi0gICAgMHg2MkM4LCAweDA1RTIsIDB4NjJDOSwgMHgwNUQ2LCAweDYyQ0EsIDB4MTk5OSwgMHg2MkNCLCAweDA1RTEsDQotICAgIDB4NjJDQywgMHgwNUQ3LCAweDYyQ0QsIDB4MDVFOSwgMHg2MkNFLCAweDA1RjIsIDB4NjJDRiwgMHgxQUVFLA0KLSAgICAweDYyRDAsIDB4MDVFNiwgMHg2MkQxLCAweDE5OTUsIDB4NjJEMiwgMHgwNURDLCAweDYyRDMsIDB4MDVERiwNCi0gICAgMHg2MkQ0LCAweDA1RTAsIDB4NjJENiwgMHgwNUVFLCAweDYyRDcsIDB4MDVFRiwgMHg2MkQ4LCAweDA1RUQsDQotICAgIDB4NjJEOSwgMHgwNUU3LCAweDYyREEsIDB4MDVFQiwgMHg2MkRCLCAweDA1REQsIDB4NjJEQywgMHgwNzMwLA0KLSAgICAweDYyRUIsIDB4MUFGNCwgMHg2MkVDLCAweDA3M0MsIDB4NjJFRCwgMHgwNzM0LCAweDYyRUUsIDB4MDczNiwNCi0gICAgMHg2MkVGLCAweDA3M0IsIDB4NjJGMCwgMHgxQjAwLCAweDYyRjEsIDB4MDczOSwgMHg2MkYyLCAweDFDQTIsDQotICAgIDB4NjJGMywgMHgwOEMzLCAweDYyRjQsIDB4MDczRSwgMHg2MkY1LCAweDFBRjEsIDB4NjJGNiwgMHgxQUY5LA0KLSAgICAweDYyRjcsIDB4MDczQSwgMHg2MkY4LCAweDFBRjgsIDB4NjJGOSwgMHgxQUY1LCAweDYyRkEsIDB4MUFGRCwNCi0gICAgMHg2MkZCLCAweDFBRkYsIDB4NjJGQywgMHgwNzMzLCAweDYyRkQsIDB4MDczNywgMHg2MkZFLCAweDA3M0QsDQotICAgIDB4NjJGRiwgMHgwOEM1LCAweDYzMDAsIDB4MUFGQSwgMHg2MzAxLCAweDA3MzUsIDB4NjMwMiwgMHgwNzQwLA0KLSAgICAweDYzMDMsIDB4MUFGMywgMHg2MzA3LCAweDA3MzgsIDB4NjMwOCwgMHgwOEM0LCAweDYzMDksIDB4MDczMiwNCi0gICAgMHg2MzBCLCAweDFBRjAsIDB4NjMwQywgMHgxQUY3LCAweDYzMEQsIDB4MUFFRiwgMHg2MzBFLCAweDFBRjIsDQotICAgIDB4NjMwRiwgMHgxQUY2LCAweDYzMTAsIDB4MUNBMywgMHg2MzExLCAweDA3M0YsIDB4NjMxMywgMHgxQUZCLA0KLSAgICAweDYzMTQsIDB4MUFGQywgMHg2MzE1LCAweDFBRkUsIDB4NjMxNiwgMHgwNzMxLCAweDYzMjgsIDB4MDhEMywNCi0gICAgMHg2MzI5LCAweDFDQUYsIDB4NjMyQSwgMHgwOEQxLCAweDYzMkIsIDB4MDhEMiwgMHg2MzJDLCAweDFDQTUsDQotICAgIDB4NjMyRCwgMHgxQ0I1LCAweDYzMkYsIDB4MDhDOCwgMHg2MzMyLCAweDFFRUQsIDB4NjMzMywgMHgxQ0I3LA0KLSAgICAweDYzMzQsIDB4MUNCMSwgMHg2MzM2LCAweDFDQTgsIDB4NjMzOCwgMHgxQ0JBLCAweDYzMzksIDB4MUNBQiwNCi0gICAgMHg2MzNBLCAweDA4Q0UsIDB4NjMzQiwgMHgxRjA0LCAweDYzM0MsIDB4MUNBRSwgMHg2MzNELCAweDA4RDAsDQotICAgIDB4NjMzRSwgMHgwOEM3LCAweDYzNDAsIDB4MUNCQywgMHg2MzQxLCAweDFDQjAsIDB4NjM0MiwgMHgwOENBLA0KLSAgICAweDYzNDMsIDB4MUNBOSwgMHg2MzQ0LCAweDFDQTYsIDB4NjM0NSwgMHgxQ0E3LCAweDYzNDYsIDB4MDhDQiwNCi0gICAgMHg2MzQ3LCAweDFDQjYsIDB4NjM0OCwgMHgxQ0JELCAweDYzNDksIDB4MDhDRCwgMHg2MzRBLCAweDFDQUQsDQotICAgIDB4NjM0QiwgMHgxQ0FDLCAweDYzNEMsIDB4MDhENSwgMHg2MzRELCAweDA4RDQsIDB4NjM0RSwgMHgwOEM2LA0KLSAgICAweDYzNEYsIDB4MDhDQywgMHg2MzUwLCAweDA4Q0YsIDB4NjM1MSwgMHgxQ0I5LCAweDYzNTQsIDB4MUNCMywNCi0gICAgMHg2MzU1LCAweDA4QzksIDB4NjM1NiwgMHgxQ0E0LCAweDYzNTcsIDB4MUNCQiwgMHg2MzU4LCAweDFDQjIsDQotICAgIDB4NjM1OSwgMHgxQ0I0LCAweDYzNUEsIDB4MUNCOCwgMHg2MzY1LCAweDFFRUUsIDB4NjM2NywgMHgwQUExLA0KLSAgICAweDYzNjgsIDB4MEFCNSwgMHg2MzY5LCAweDBBQjQsIDB4NjM2QiwgMHgwQUE5LCAweDYzNkQsIDB4MUYwMCwNCi0gICAgMHg2MzZFLCAweDFFRkMsIDB4NjM2RiwgMHgxRUY5LCAweDYzNzAsIDB4MUYwQiwgMHg2MzcxLCAweDBBQTQsDQotICAgIDB4NjM3MiwgMHgwQTlDLCAweDYzNzUsIDB4MUVGRSwgMHg2Mzc2LCAweDBDNjksIDB4NjM3NywgMHgwQUEwLA0KLSAgICAweDYzNzgsIDB4MUYwNiwgMHg2MzdBLCAweDBBQjYsIDB4NjM3QiwgMHgwQUIzLCAweDYzN0MsIDB4MUYwMiwNCi0gICAgMHg2MzdELCAweDFFRjEsIDB4NjM4MCwgMHgwQUIyLCAweDYzODEsIDB4MUYwOCwgMHg2MzgyLCAweDFFRjAsDQotICAgIDB4NjM4MywgMHgwQUE3LCAweDYzODQsIDB4MEFBQiwgMHg2Mzg1LCAweDFGMDcsIDB4NjM4NywgMHgxRUZBLA0KLSAgICAweDYzODgsIDB4MEFBQywgMHg2Mzg5LCAweDBBQTYsIDB4NjM4QSwgMHgxRUVGLCAweDYzOEMsIDB4MEM1QiwNCi0gICAgMHg2MzhELCAweDFGMEEsIDB4NjM4RSwgMHgxRUY4LCAweDYzOEYsIDB4MEFCMSwgMHg2MzkwLCAweDFFRkIsDQotICAgIDB4NjM5MSwgMHgxRjA5LCAweDYzOTIsIDB4MEFCMCwgMHg2Mzk0LCAweDIxNEMsIDB4NjM5NiwgMHgwQTlELA0KLSAgICAweDYzOTcsIDB4MUVGNiwgMHg2Mzk4LCAweDBBQTIsIDB4NjM5OSwgMHgwQUFELCAweDYzOUIsIDB4MEFBOCwNCi0gICAgMHg2MzlDLCAweDFFRkYsIDB4NjM5RCwgMHgxRUY1LCAweDYzOUUsIDB4MUVGMywgMHg2MzlGLCAweDFGMDUsDQotICAgIDB4NjNBMCwgMHgwQTlBLCAweDYzQTEsIDB4MEFBRSwgMHg2M0EyLCAweDBBOUUsIDB4NjNBMywgMHgwQzVBLA0KLSAgICAweDYzQTQsIDB4MUYwMywgMHg2M0E1LCAweDBBOUYsIDB4NjNBNywgMHgwQTlCLCAweDYzQTgsIDB4MEFBQSwNCi0gICAgMHg2M0E5LCAweDBBQTUsIDB4NjNBQSwgMHgwQUEzLCAweDYzQUIsIDB4MUVGNywgMHg2M0FDLCAweDBBQUYsDQotICAgIDB4NjNBRCwgMHgxRUY0LCAweDYzQUUsIDB4MUYwMSwgMHg2M0FGLCAweDFFRkQsIDB4NjNCMCwgMHgyMTRFLA0KLSAgICAweDYzQjEsIDB4MjE0RCwgMHg2M0JELCAweDFFRjIsIDB4NjNCRSwgMHgyMTVFLCAweDYzQzAsIDB4MEM1RCwNCi0gICAgMHg2M0MyLCAweDIxNjQsIDB4NjNDMywgMHgyMTUzLCAweDYzQzQsIDB4MjE2MSwgMHg2M0M1LCAweDIzRTYsDQotICAgIDB4NjNDNiwgMHgwQzYwLCAweDYzQzcsIDB4MjE2NSwgMHg2M0M4LCAweDIxNjgsIDB4NjNDOSwgMHgwQzVGLA0KLSAgICAweDYzQ0EsIDB4MjE1NiwgMHg2M0NCLCAweDIxNjcsIDB4NjNDQywgMHgyMTY2LCAweDYzQ0QsIDB4MEM2MSwNCi0gICAgMHg2M0NFLCAweDIxNEYsIDB4NjNDRiwgMHgwQzVDLCAweDYzRDAsIDB4MEM2NCwgMHg2M0QyLCAweDBDNjIsDQotICAgIDB4NjNEMywgMHgyMTYzLCAweDYzRDUsIDB4MjE1OSwgMHg2M0Q2LCAweDBDNjYsIDB4NjNENywgMHgyMTZBLA0KLSAgICAweDYzRDgsIDB4MjE2MiwgMHg2M0Q5LCAweDIxNkIsIDB4NjNEQSwgMHgwQzZFLCAweDYzREIsIDB4MEM2QywNCi0gICAgMHg2M0RDLCAweDIxNjAsIDB4NjNERCwgMHgyMTVGLCAweDYzREYsIDB4MjE1RCwgMHg2M0UwLCAweDIxNTcsDQotICAgIDB4NjNFMSwgMHgwQzY1LCAweDYzRTMsIDB4MEM2MywgMHg2M0U0LCAweDFDQUEsIDB4NjNFNSwgMHgyMTUwLA0KLSAgICAweDYzRTcsIDB4MjQwNCwgMHg2M0U4LCAweDIxNTEsIDB4NjNFOSwgMHgwQzVFLCAweDYzRUEsIDB4MEM2QiwNCi0gICAgMHg2M0VCLCAweDIzRTgsIDB4NjNFRCwgMHgwQzY3LCAweDYzRUUsIDB4MEM2OCwgMHg2M0VGLCAweDIxNTIsDQotICAgIDB4NjNGMCwgMHgyMTY5LCAweDYzRjEsIDB4MjNFNywgMHg2M0YyLCAweDIxNUEsIDB4NjNGMywgMHgyMTU1LA0KLSAgICAweDYzRjQsIDB4MEM2QSwgMHg2M0Y1LCAweDIxNUIsIDB4NjNGNiwgMHgyMTU4LCAweDYzRjksIDB4MEM2RiwNCi0gICAgMHg2NDA2LCAweDBFMkEsIDB4NjQwOSwgMHgyM0VCLCAweDY0MEEsIDB4MjNGRSwgMHg2NDBCLCAweDI0MDMsDQotICAgIDB4NjQwQywgMHgyM0Y3LCAweDY0MEQsIDB4MEUyNiwgMHg2NDBFLCAweDI0MDgsIDB4NjQwRiwgMHgwRTIzLA0KLSAgICAweDY0MTAsIDB4MjNFOSwgMHg2NDEyLCAweDIzRUEsIDB4NjQxMywgMHgwRTFDLCAweDY0MTQsIDB4MEUyNSwNCi0gICAgMHg2NDE1LCAweDIzRjEsIDB4NjQxNiwgMHgwRTI4LCAweDY0MTcsIDB4MEUyOSwgMHg2NDE4LCAweDIzRjIsDQotICAgIDB4NjQxQSwgMHgyM0ZGLCAweDY0MUIsIDB4MjQwNSwgMHg2NDFDLCAweDBFMjQsIDB4NjQxRSwgMHgwRTFFLA0KLSAgICAweDY0MUYsIDB4MjNGMCwgMHg2NDIwLCAweDIzRUMsIDB4NjQyMSwgMHgyNDA3LCAweDY0MjIsIDB4MjNGNSwNCi0gICAgMHg2NDIzLCAweDIzRjYsIDB4NjQyNCwgMHgyM0VELCAweDY0MjUsIDB4MjQwMSwgMHg2NDI2LCAweDIzRjgsDQotICAgIDB4NjQyNywgMHgyNDAyLCAweDY0MjgsIDB4MjNGQSwgMHg2NDJBLCAweDBFMUYsIDB4NjQyQiwgMHgyNjk5LA0KLSAgICAweDY0MkMsIDB4MEUyMiwgMHg2NDJELCAweDBFMjAsIDB4NjQyRSwgMHgyNDA2LCAweDY0MkYsIDB4MjNGRCwNCi0gICAgMHg2NDMwLCAweDIzRjksIDB4NjQzMywgMHgyM0VFLCAweDY0MzQsIDB4MEZFNCwgMHg2NDM1LCAweDIzRkMsDQotICAgIDB4NjQzNiwgMHgwRTI3LCAweDY0MzcsIDB4MjNGNCwgMHg2NDM5LCAweDIzRjMsIDB4NjQzRCwgMHgwRTIxLA0KLSAgICAweDY0M0UsIDB4MEUxRCwgMHg2NDNGLCAweDI2QUUsIDB4NjQ0MCwgMHgyNDAwLCAweDY0NDEsIDB4MjNGQiwNCi0gICAgMHg2NDQzLCAweDIzRUYsIDB4NjQ0QiwgMHgyNkE5LCAweDY0NEQsIDB4MjY5QSwgMHg2NDRFLCAweDI2QTUsDQotICAgIDB4NjQ1MCwgMHgyNkFDLCAweDY0NTEsIDB4MEZFMiwgMHg2NDUyLCAweDBDNkQsIDB4NjQ1MywgMHgyNkFBLA0KLSAgICAweDY0NTQsIDB4MEZERCwgMHg2NDU4LCAweDBGREMsIDB4NjQ1OSwgMHgyNkIxLCAweDY0NUIsIDB4MjY5QiwNCi0gICAgMHg2NDVDLCAweDI2QTgsIDB4NjQ1RCwgMHgyNjlDLCAweDY0NUUsIDB4MjZBNywgMHg2NDVGLCAweDBGRTAsDQotICAgIDB4NjQ2MCwgMHgyNkFCLCAweDY0NjEsIDB4MjE1QywgMHg2NDY1LCAweDI2QjIsIDB4NjQ2NiwgMHgyNkEzLA0KLSAgICAweDY0NjcsIDB4MEZFMywgMHg2NDY4LCAweDI4RUUsIDB4NjQ2OSwgMHgxMTU5LCAweDY0NkIsIDB4MjZCMCwNCi0gICAgMHg2NDZDLCAweDI2QUYsIDB4NjQ2RCwgMHgwRkU1LCAweDY0NkUsIDB4MjhFMSwgMHg2NDZGLCAweDExNUEsDQotICAgIDB4NjQ3MCwgMHgyOEUyLCAweDY0NzIsIDB4MjY5RiwgMHg2NDczLCAweDI2QTAsIDB4NjQ3NCwgMHgyNjlELA0KLSAgICAweDY0NzUsIDB4MjZBMiwgMHg2NDc2LCAweDI2OUUsIDB4NjQ3NywgMHgyNkIzLCAweDY0NzgsIDB4MEZERiwNCi0gICAgMHg2NDc5LCAweDExNUIsIDB4NjQ3QSwgMHgwRkUxLCAweDY0N0IsIDB4MEZFNiwgMHg2NDdELCAweDI2QTEsDQotICAgIDB4NjQ3RiwgMHgyNkFELCAweDY0ODIsIDB4MjZBNiwgMHg2NDg1LCAweDI4RTUsIDB4NjQ4NywgMHgwRkRCLA0KLSAgICAweDY0ODgsIDB4MTE1RSwgMHg2NDg5LCAweDJCNTQsIDB4NjQ4QSwgMHgyOEVBLCAweDY0OEIsIDB4MjhFOSwNCi0gICAgMHg2NDhDLCAweDI4RUIsIDB4NjQ4RiwgMHgyOEU4LCAweDY0OTAsIDB4MTE1RiwgMHg2NDkyLCAweDExNjUsDQotICAgIDB4NjQ5MywgMHgxMTYyLCAweDY0OTUsIDB4MTE2MywgMHg2NDk2LCAweDI4RTMsIDB4NjQ5NywgMHgyOEU2LA0KLSAgICAweDY0OTgsIDB4MjhGMCwgMHg2NDk5LCAweDExNkIsIDB4NjQ5QSwgMHgxMTY5LCAweDY0OUMsIDB4MjhFNywNCi0gICAgMHg2NDlELCAweDIxNTQsIDB4NjQ5RSwgMHgxMTVDLCAweDY0OUYsIDB4MjhFRCwgMHg2NEEwLCAweDI4RTQsDQotICAgIDB4NjRBMiwgMHgxMTZDLCAweDY0QTMsIDB4MjhFQywgMHg2NEE0LCAweDBGREUsIDB4NjRBNSwgMHgxMTYxLA0KLSAgICAweDY0QTYsIDB4MjZBNCwgMHg2NEE5LCAweDExNjQsIDB4NjRBQiwgMHgxMTY4LCAweDY0QUMsIDB4MTE2QSwNCi0gICAgMHg2NEFELCAweDExNjcsIDB4NjRBRSwgMHgxMTY2LCAweDY0QjAsIDB4MTE2MCwgMHg2NEIxLCAweDI4RUYsDQotICAgIDB4NjRCMiwgMHgxMTVELCAweDY0QjMsIDB4MTE2RCwgMHg2NEJCLCAweDEyQkIsIDB4NjRCQywgMHgxMkJDLA0KLSAgICAweDY0QkQsIDB4MkI1MywgMHg2NEJFLCAweDEyQzUsIDB4NjRCRiwgMHgxMkMyLCAweDY0QzEsIDB4MTJCOSwNCi0gICAgMHg2NEMyLCAweDEyQzAsIDB4NjRDMywgMHgyQjU1LCAweDY0QzQsIDB4MTJCRSwgMHg2NEM1LCAweDEyQjgsDQotICAgIDB4NjRDNywgMHgxMkJGLCAweDY0QzksIDB4MkI1MiwgMHg2NENBLCAweDEzRDgsIDB4NjRDQiwgMHgxMkJBLA0KLSAgICAweDY0Q0QsIDB4MTJDMSwgMHg2NENFLCAweDEzRDcsIDB4NjRDRiwgMHgyQjUxLCAweDY0RDAsIDB4MkI1MCwNCi0gICAgMHg2NEQyLCAweDEyQzMsIDB4NjRENCwgMHgxMkM0LCAweDY0RDYsIDB4MkI0RiwgMHg2NEQ3LCAweDJCNEUsDQotICAgIDB4NjREOCwgMHgxM0Q5LCAweDY0RDksIDB4MkI1OCwgMHg2NERBLCAweDEyQkQsIDB4NjREQiwgMHgyQjU2LA0KLSAgICAweDY0RTAsIDB4MTNEQSwgMHg2NEUyLCAweDEzREYsIDB4NjRFMywgMHgyRDZBLCAweDY0RTQsIDB4MkQ2QywNCi0gICAgMHg2NEU2LCAweDEzREMsIDB4NjRFOCwgMHgyRDZELCAweDY0RTksIDB4MkQ2OSwgMHg2NEVCLCAweDJENkIsDQotICAgIDB4NjRFQywgMHgxM0RELCAweDY0RUQsIDB4MTNFMCwgMHg2NEVGLCAweDJENjgsIDB4NjRGMCwgMHgxM0RCLA0KLSAgICAweDY0RjEsIDB4MTNERSwgMHg2NEYyLCAweDE0RDMsIDB4NjRGMywgMHgyQjU3LCAweDY0RjQsIDB4MTREMiwNCi0gICAgMHg2NEY3LCAweDE0RDgsIDB4NjRGOCwgMHgyRjJCLCAweDY0RkEsIDB4MTRENiwgMHg2NEZCLCAweDE0RDcsDQotICAgIDB4NjRGQywgMHgyRjJFLCAweDY0RkQsIDB4MkYyQSwgMHg2NEZFLCAweDE0RDQsIDB4NjRGRiwgMHgyRjI4LA0KLSAgICAweDY1MDAsIDB4MTU4MiwgMHg2NTAxLCAweDJGMkMsIDB4NjUwMywgMHgyRjJELCAweDY1MDQsIDB4MkYyOSwNCi0gICAgMHg2NTA2LCAweDE0RDUsIDB4NjUwNywgMHgzMDkwLCAweDY1MDksIDB4MzA5MywgMHg2NTBDLCAweDMwOTQsDQotICAgIDB4NjUwRCwgMHgzMDkyLCAweDY1MEUsIDB4MzA5NSwgMHg2NTBGLCAweDE1ODMsIDB4NjUxMCwgMHgzMDkxLA0KLSAgICAweDY1MTMsIDB4MzFENywgMHg2NTE0LCAweDE2MTcsIDB4NjUxNSwgMHgzMUQ2LCAweDY1MTYsIDB4MzFENSwNCi0gICAgMHg2NTE3LCAweDMxRDQsIDB4NjUxOCwgMHgxNjE2LCAweDY1MTksIDB4MTYxOCwgMHg2NTFCLCAweDMyRDIsDQotICAgIDB4NjUxQywgMHgxNjczLCAweDY1MUQsIDB4MTY3MiwgMHg2NTIwLCAweDMzODIsIDB4NjUyMSwgMHgzMzgxLA0KLSAgICAweDY1MjIsIDB4MzM4NCwgMHg2NTIzLCAweDE2RjksIDB4NjUyNCwgMHgxNkM1LCAweDY1MjUsIDB4MzQxQiwNCi0gICAgMHg2NTI2LCAweDMzODMsIDB4NjUyOSwgMHgzNDFBLCAweDY1MkEsIDB4MTZGQiwgMHg2NTJCLCAweDE2RkEsDQotICAgIDB4NjUyQywgMHgxNzIxLCAweDY1MkQsIDB4MzQ4NCwgMHg2NTJFLCAweDM0Q0EsIDB4NjUyRiwgMHgwMkQ1LA0KLSAgICAweDY1MzIsIDB4MjE2QywgMHg2NTMzLCAweDJCNTksIDB4NjUzNCwgMHgwMjJDLCAweDY1MzYsIDB4MDNENywNCi0gICAgMHg2NTM3LCAweDE3RjYsIDB4NjUzOCwgMHgwNEI5LCAweDY1MzksIDB4MDRCNywgMHg2NTNCLCAweDA0QjgsDQotICAgIDB4NjUzRCwgMHgxOUExLCAweDY1M0UsIDB4MDVGMywgMHg2NTNGLCAweDA3NDEsIDB4NjU0MSwgMHgxQjAxLA0KLSAgICAweDY1NDMsIDB4MUIwMiwgMHg2NTQ1LCAweDA3NDIsIDB4NjU0NiwgMHgxQ0JGLCAweDY1NDgsIDB4MDhENiwNCi0gICAgMHg2NTQ5LCAweDA4RDcsIDB4NjU0QSwgMHgxQ0JFLCAweDY1NEYsIDB4MEFCRCwgMHg2NTUxLCAweDBBQjksDQotICAgIDB4NjU1MywgMHgxRjBDLCAweDY1NTQsIDB4MEFDMCwgMHg2NTU1LCAweDBBQkYsIDB4NjU1NiwgMHgwQUI4LA0KLSAgICAweDY1NTcsIDB4MEFCQiwgMHg2NTU4LCAweDBBQkUsIDB4NjU1OSwgMHgwQUJBLCAweDY1NUMsIDB4MjE3MCwNCi0gICAgMHg2NTVELCAweDBBQjcsIDB4NjU1RSwgMHgwQzcwLCAweDY1NjIsIDB4MEM3MiwgMHg2NTYzLCAweDBDNzMsDQotICAgIDB4NjU2NCwgMHgyMTZGLCAweDY1NjUsIDB4MjE3MiwgMHg2NTY2LCAweDBDNzEsIDB4NjU2NywgMHgyMTZELA0KLSAgICAweDY1NjgsIDB4MjE3MSwgMHg2NTZBLCAweDIxNkUsIDB4NjU2QywgMHgwRTJCLCAweDY1NkYsIDB4MjQwOSwNCi0gICAgMHg2NTcyLCAweDBGRTcsIDB4NjU3MywgMHgyNkI0LCAweDY1NzQsIDB4MTJDNiwgMHg2NTc1LCAweDExNkUsDQotICAgIDB4NjU3NiwgMHgyOEYxLCAweDY1NzcsIDB4MTE2RiwgMHg2NTc4LCAweDExNzAsIDB4NjU3OSwgMHgyOEYzLA0KLSAgICAweDY1N0EsIDB4MjhGMiwgMHg2NTdCLCAweDI4RjQsIDB4NjU3QywgMHgyQjVCLCAweDY1N0YsIDB4MkI1QSwNCi0gICAgMHg2NTgwLCAweDJENkYsIDB4NjU4MSwgMHgyRDZFLCAweDY1ODIsIDB4MTNFMSwgMHg2NTgzLCAweDEzRTIsDQotICAgIDB4NjU4NCwgMHgzMDk2LCAweDY1ODcsIDB4MDJENiwgMHg2NThDLCAweDIxNzMsIDB4NjU5MCwgMHgwQzc1LA0KLSAgICAweDY1OTEsIDB4MEM3NCwgMHg2NTkyLCAweDI0MEEsIDB4NjU5NCwgMHgyRjJGLCAweDY1OTUsIDB4MTY3NCwNCi0gICAgMHg2NTk2LCAweDM0MUMsIDB4NjU5NywgMHgwMkQ3LCAweDY1OTksIDB4MDhEOCwgMHg2NTlCLCAweDBBQzIsDQotICAgIDB4NjU5QywgMHgwQUMxLCAweDY1OUQsIDB4MjE3NCwgMHg2NTlFLCAweDIxNzUsIDB4NjU5RiwgMHgwRTJDLA0KLSAgICAweDY1QTAsIDB4MjZCNSwgMHg2NUExLCAweDBGRTgsIDB4NjVBMiwgMHgyQjVDLCAweDY1QTQsIDB4MDJEOCwNCi0gICAgMHg2NUE1LCAweDAzNDYsIDB4NjVBNywgMHgwNUY0LCAweDY1QTgsIDB4MTlBMiwgMHg2NUFBLCAweDFCMDMsDQotICAgIDB4NjVBQiwgMHgwNzQzLCAweDY1QUMsIDB4MEFDMywgMHg2NUFFLCAweDIxNzYsIDB4NjVBRiwgMHgwQzc2LA0KLSAgICAweDY1QjAsIDB4MEUyRCwgMHg2NUIyLCAweDI4RjUsIDB4NjVCMywgMHgyOEY2LCAweDY1QjYsIDB4MkQ3MCwNCi0gICAgMHg2NUI3LCAweDE0RDksIDB4NjVCOCwgMHgzNENCLCAweDY1QjksIDB4MDJEOSwgMHg2NUJCLCAweDE5QTMsDQotICAgIDB4NjVCQywgMHgwNUY1LCAweDY1QkQsIDB4MDc0NCwgMHg2NUJGLCAweDFCMDQsIDB4NjVDMSwgMHgwOEQ5LA0KLSAgICAweDY1QzIsIDB4MUNDMywgMHg2NUMzLCAweDFDQzEsIDB4NjVDNCwgMHgxQ0MyLCAweDY1QzUsIDB4MDhEQSwNCi0gICAgMHg2NUM2LCAweDFDQzAsIDB4NjVDQiwgMHgwQUM1LCAweDY1Q0MsIDB4MEFDNiwgMHg2NUNELCAweDFGMEQsDQotICAgIDB4NjVDRSwgMHgwQUM3LCAweDY1Q0YsIDB4MEFDNCwgMHg2NUQwLCAweDIxNzcsIDB4NjVEMiwgMHgyMTc4LA0KLSAgICAweDY1RDMsIDB4MjQwQiwgMHg2NUQ2LCAweDBGRUEsIDB4NjVENywgMHgwRkU5LCAweDY1REEsIDB4MkQ3MSwNCi0gICAgMHg2NURCLCAweDJGMzAsIDB4NjVERCwgMHgzMDk4LCAweDY1REUsIDB4MzA5NywgMHg2NURGLCAweDMxRDgsDQotICAgIDB4NjVFMCwgMHgwMjJELCAweDY1RTEsIDB4MTc4OSwgMHg2NUUyLCAweDA3NDUsIDB4NjVFNSwgMHgwMkRBLA0KLSAgICAweDY1RTYsIDB4MDM0NywgMHg2NUU4LCAweDAzRDksIDB4NjVFOSwgMHgwM0Q4LCAweDY1RUMsIDB4MDNEQSwNCi0gICAgMHg2NUVELCAweDAzREIsIDB4NjVFRSwgMHgxN0Y4LCAweDY1RUYsIDB4MTdGNywgMHg2NUYwLCAweDE4OUUsDQotICAgIDB4NjVGMSwgMHgwNEJBLCAweDY1RjIsIDB4MThBMSwgMHg2NUYzLCAweDE4QTAsIDB4NjVGNCwgMHgxODlGLA0KLSAgICAweDY1RjUsIDB4MThBMiwgMHg2NUZBLCAweDA1RjYsIDB4NjVGQiwgMHgxOUE5LCAweDY1RkMsIDB4MTlBNSwNCi0gICAgMHg2NUZELCAweDE5QUUsIDB4NjYwMCwgMHgwNUZELCAweDY2MDIsIDB4MDVGQiwgMHg2NjAzLCAweDE5QUEsDQotICAgIDB4NjYwNCwgMHgxOUE2LCAweDY2MDUsIDB4MTlBRCwgMHg2NjA2LCAweDA1RkEsIDB4NjYwNywgMHgwNjAxLA0KLSAgICAweDY2MDgsIDB4MTlBOCwgMHg2NjA5LCAweDE5QTQsIDB4NjYwQSwgMHgwNjAwLCAweDY2MEIsIDB4MTlBQiwNCi0gICAgMHg2NjBDLCAweDA1RjksIDB4NjYwRCwgMHgxOUFDLCAweDY2MEUsIDB4MDVGQywgMHg2NjBGLCAweDA1RkUsDQotICAgIDB4NjYxMCwgMHgxOUIwLCAweDY2MTEsIDB4MTlBRiwgMHg2NjEyLCAweDE5QTcsIDB4NjYxMywgMHgwNUY4LA0KLSAgICAweDY2MTQsIDB4MDVGNywgMHg2NjE1LCAweDA1RkYsIDB4NjYxQywgMHgxQjA5LCAweDY2MUQsIDB4MUIwRiwNCi0gICAgMHg2NjFGLCAweDA3NEIsIDB4NjYyMCwgMHgwNzQ4LCAweDY2MjEsIDB4MUIwNiwgMHg2NjIyLCAweDFCMEIsDQotICAgIDB4NjYyNCwgMHgwNzRFLCAweDY2MjUsIDB4MDc0NiwgMHg2NjI2LCAweDFCMEEsIDB4NjYyNywgMHgwNzQ5LA0KLSAgICAweDY2MjgsIDB4MDc0QywgMHg2NjJCLCAweDFCMEQsIDB4NjYyRCwgMHgwNzQ3LCAweDY2MkUsIDB4MUIxMiwNCi0gICAgMHg2NjJGLCAweDA3NEEsIDB4NjYzMSwgMHgwNzRELCAweDY2MzIsIDB4MUIwNywgMHg2NjMzLCAweDFCMEMsDQotICAgIDB4NjYzNCwgMHgxQjEwLCAweDY2MzUsIDB4MUIwOCwgMHg2NjM2LCAweDFCMDUsIDB4NjYzOSwgMHgxQjExLA0KLSAgICAweDY2M0EsIDB4MUIwRSwgMHg2NjQxLCAweDA4RTIsIDB4NjY0MiwgMHgwOERCLCAweDY2NDMsIDB4MDhERSwNCi0gICAgMHg2NjQ1LCAweDA4RTEsIDB4NjY0NywgMHgxQ0M2LCAweDY2NDksIDB4MDhEQywgMHg2NjRBLCAweDFDQzQsDQotICAgIDB4NjY0QywgMHgwOEUwLCAweDY2NEYsIDB4MDhERCwgMHg2NjUxLCAweDFDQzcsIDB4NjY1MiwgMHgwOERGLA0KLSAgICAweDY2NTksIDB4MUYxMSwgMHg2NjVBLCAweDBBQzksIDB4NjY1QiwgMHgxRjEwLCAweDY2NUMsIDB4MUYxMiwNCi0gICAgMHg2NjVELCAweDBBQzgsIDB4NjY1RSwgMHgwQUNELCAweDY2NUYsIDB4MUNDNSwgMHg2NjYxLCAweDFGMEYsDQotICAgIDB4NjY2MiwgMHgxRjEzLCAweDY2NjQsIDB4MEFDQSwgMHg2NjY1LCAweDFGMEUsIDB4NjY2NiwgMHgwQUNDLA0KLSAgICAweDY2NjgsIDB4MEFDQiwgMHg2NjZBLCAweDIxN0YsIDB4NjY2QywgMHgyMTdBLCAweDY2NkUsIDB4MEM3NywNCi0gICAgMHg2NjZGLCAweDBDN0IsIDB4NjY3MCwgMHgwQzc4LCAweDY2NzEsIDB4MjE3RCwgMHg2NjcyLCAweDIxODAsDQotICAgIDB4NjY3NCwgMHgwQzc5LCAweDY2NzYsIDB4MEM3QSwgMHg2Njc3LCAweDBDN0YsIDB4NjY3OCwgMHgyNDE0LA0KLSAgICAweDY2NzksIDB4MjE3RSwgMHg2NjdBLCAweDBDN0QsIDB4NjY3QiwgMHgyMTdCLCAweDY2N0MsIDB4MjE3OSwNCi0gICAgMHg2NjdFLCAweDBDN0UsIDB4NjY4MCwgMHgyMTdDLCAweDY2ODQsIDB4MEUzMywgMHg2Njg2LCAweDI0MEMsDQotICAgIDB4NjY4NywgMHgwRTMwLCAweDY2ODgsIDB4MEUzMSwgMHg2Njg5LCAweDBFMkYsIDB4NjY4QSwgMHgyNDExLA0KLSAgICAweDY2OEIsIDB4MjQxMCwgMHg2NjhDLCAweDI0MEQsIDB4NjY4RCwgMHgwRTM1LCAweDY2OTAsIDB4MjQwRiwNCi0gICAgMHg2NjkxLCAweDBDN0MsIDB4NjY5NCwgMHgyNDEzLCAweDY2OTUsIDB4MjQwRSwgMHg2Njk2LCAweDBFMzIsDQotICAgIDB4NjY5NywgMHgwRTJFLCAweDY2OTgsIDB4MEUzNCwgMHg2Njk5LCAweDI0MTIsIDB4NjY5RCwgMHgwRkVELA0KLSAgICAweDY2OUYsIDB4MjZCOCwgMHg2NkEwLCAweDI2QjcsIDB4NjZBMSwgMHgyNkI2LCAweDY2QTIsIDB4MEZFQiwNCi0gICAgMHg2NkE4LCAweDBGRUMsIDB4NjZBOSwgMHgyOEY5LCAweDY2QUEsIDB4MjhGQywgMHg2NkFCLCAweDExNzIsDQotICAgIDB4NjZBRSwgMHgxMTcxLCAweDY2QUYsIDB4MjhGRCwgMHg2NkIwLCAweDI4RjgsIDB4NjZCMSwgMHgxMTc0LA0KLSAgICAweDY2QjIsIDB4MjhGQSwgMHg2NkI0LCAweDExNzMsIDB4NjZCNSwgMHgyOEY3LCAweDY2QjcsIDB4MjhGQiwNCi0gICAgMHg2NkI4LCAweDEyQ0MsIDB4NjZCOSwgMHgxMkM5LCAweDY2QkEsIDB4MkI2NSwgMHg2NkJCLCAweDJCNjQsDQotICAgIDB4NjZCRCwgMHgyQjYzLCAweDY2QkUsIDB4MkI1RSwgMHg2NkMwLCAweDJCNUYsIDB4NjZDNCwgMHgxMkNBLA0KLSAgICAweDY2QzYsIDB4MTJDNywgMHg2NkM3LCAweDEyQ0IsIDB4NjZDOCwgMHgyQjVELCAweDY2QzksIDB4MTJDOCwNCi0gICAgMHg2NkNBLCAweDJCNjAsIDB4NjZDQiwgMHgyQjYxLCAweDY2Q0MsIDB4MkI2NiwgMHg2NkNGLCAweDJCNjIsDQotICAgIDB4NjZEMiwgMHgyRDcyLCAweDY2RDYsIDB4MTNFNCwgMHg2NkQ4LCAweDJGMzMsIDB4NjZEOSwgMHgxM0UzLA0KLSAgICAweDY2REEsIDB4MkYzMSwgMHg2NkRCLCAweDJGMzIsIDB4NjZEQywgMHgxNERBLCAweDY2REQsIDB4MTU4NSwNCi0gICAgMHg2NkRFLCAweDMwOTksIDB4NjZFMCwgMHgxNTg0LCAweDY2RTMsIDB4MzFEQSwgMHg2NkU0LCAweDMxREIsDQotICAgIDB4NjZFNiwgMHgxNjE5LCAweDY2RTgsIDB4MzFEOSwgMHg2NkU5LCAweDE2NzUsIDB4NjZFQiwgMHgzNDFELA0KLSAgICAweDY2RUMsIDB4MTZGQywgMHg2NkVELCAweDM0ODUsIDB4NjZFRSwgMHgzNDg2LCAweDY2RjAsIDB4MDJEQiwNCi0gICAgMHg2NkYyLCAweDAzREMsIDB4NjZGMywgMHgwM0RELCAweDY2RjQsIDB4MDRCQiwgMHg2NkY2LCAweDE5QjEsDQotICAgIDB4NjZGNywgMHgwNzRGLCAweDY2RjgsIDB4MDhFMywgMHg2NkY5LCAweDBBQ0UsIDB4NjZGQywgMHgwQTFGLA0KLSAgICAweDY2RkUsIDB4MEM4MCwgMHg2NkZGLCAweDBDODEsIDB4NjcwMCwgMHgwQkYwLCAweDY3MDEsIDB4MjE4MSwNCi0gICAgMHg2NzAzLCAweDBFMzYsIDB4NjcwNCwgMHgyNkJBLCAweDY3MDUsIDB4MjZCOSwgMHg2NzA4LCAweDAyREMsDQotICAgIDB4NjcwOSwgMHgwM0RFLCAweDY3MEEsIDB4MTlCMiwgMHg2NzBCLCAweDA2MDMsIDB4NjcwRCwgMHgwNjAyLA0KLSAgICAweDY3MEYsIDB4MUIxMywgMHg2NzEwLCAweDFCMTQsIDB4NjcxMiwgMHgxQ0M4LCAweDY3MTMsIDB4MUNDOSwNCi0gICAgMHg2NzE0LCAweDA4RTQsIDB4NjcxNSwgMHgwOEU1LCAweDY3MTcsIDB4MDhFNiwgMHg2NzE4LCAweDFGMTQsDQotICAgIDB4NjcxQiwgMHgwQUQwLCAweDY3MUQsIDB4MEM4MywgMHg2NzFGLCAweDBDODIsIDB4NjcyMCwgMHgyNDE1LA0KLSAgICAweDY3MjEsIDB4MjUyMiwgMHg2NzIyLCAweDI2QkIsIDB4NjcyMywgMHgyQjY3LCAweDY3MjYsIDB4MTREQiwNCi0gICAgMHg2NzI3LCAweDE2MUEsIDB4NjcyOCwgMHgwMkRELCAweDY3MkEsIDB4MDM0QSwgMHg2NzJCLCAweDAzNEIsDQotICAgIDB4NjcyQywgMHgwMzQ5LCAweDY3MkQsIDB4MDM0QywgMHg2NzJFLCAweDAzNDgsIDB4NjczMSwgMHgwM0UxLA0KLSAgICAweDY3MzMsIDB4MTgwMCwgMHg2NzM0LCAweDAzRTAsIDB4NjczNSwgMHgwM0UyLCAweDY3MzgsIDB4MTdGQiwNCi0gICAgMHg2NzM5LCAweDE3RkEsIDB4NjczQSwgMHgxN0ZELCAweDY3M0IsIDB4MTdGQywgMHg2NzNDLCAweDE3RkYsDQotICAgIDB4NjczRCwgMHgwM0RGLCAweDY3M0UsIDB4MTdGOSwgMHg2NzNGLCAweDE3RkUsIDB4Njc0NSwgMHgxOEEzLA0KLSAgICAweDY3NDYsIDB4MDRDNSwgMHg2NzQ3LCAweDE4QTQsIDB4Njc0OCwgMHgxOEE4LCAweDY3NDksIDB4MDRDNCwNCi0gICAgMHg2NzRCLCAweDE4QUMsIDB4Njc0QywgMHgxOEE3LCAweDY3NEQsIDB4MThBQSwgMHg2NzRFLCAweDA0QkQsDQotICAgIDB4Njc0RiwgMHgwNEJFLCAweDY3NTAsIDB4MDRCRiwgMHg2NzUxLCAweDA0QzAsIDB4Njc1MywgMHgwNEM3LA0KLSAgICAweDY3NTUsIDB4MThBNiwgMHg2NzU2LCAweDA0QzIsIDB4Njc1NywgMHgwNEM4LCAweDY3NTksIDB4MThBNSwNCi0gICAgMHg2NzVBLCAweDE4QUIsIDB4Njc1QywgMHgwNEMxLCAweDY3NUQsIDB4MThBOSwgMHg2NzVFLCAweDA0QzMsDQotICAgIDB4Njc1RiwgMHgwNEJDLCAweDY3NjAsIDB4MDRDNiwgMHg2NzZBLCAweDA2MTgsIDB4Njc2QywgMHgxOUI0LA0KLSAgICAweDY3NkQsIDB4MDYwNCwgMHg2NzZGLCAweDA2MEUsIDB4Njc3MCwgMHgwNjBGLCAweDY3NzEsIDB4MDYwNywNCi0gICAgMHg2NzcyLCAweDA2MTksIDB4Njc3MywgMHgwNjA5LCAweDY3NzQsIDB4MTlCQywgMHg2Nzc1LCAweDA2MTQsDQotICAgIDB4Njc3NiwgMHgxOUI3LCAweDY3NzcsIDB4MDYwQSwgMHg2Nzc4LCAweDE5QzYsIDB4Njc3OSwgMHgxOUM3LA0KLSAgICAweDY3N0EsIDB4MTlCRiwgMHg2NzdCLCAweDE5QjgsIDB4Njc3QywgMHgwNjE3LCAweDY3N0QsIDB4MTlDNCwNCi0gICAgMHg2NzdFLCAweDA2MTIsIDB4Njc3RiwgMHgwNjEwLCAweDY3ODEsIDB4MTlDNSwgMHg2NzgzLCAweDE5QzMsDQotICAgIDB4Njc4NCwgMHgxOUJCLCAweDY3ODUsIDB4MTlCMywgMHg2Nzg2LCAweDE5QkEsIDB4Njc4NywgMHgwNjBCLA0KLSAgICAweDY3ODksIDB4MDYxMSwgMHg2NzhCLCAweDA2MDUsIDB4Njc4QywgMHgxOUJFLCAweDY3OEQsIDB4MTlCRCwNCi0gICAgMHg2NzhFLCAweDE5QjUsIDB4Njc5MCwgMHgwNjEzLCAweDY3OTEsIDB4MTlDMSwgMHg2NzkyLCAweDE5QjYsDQotICAgIDB4Njc5MywgMHgwNjE2LCAweDY3OTQsIDB4MTlDOCwgMHg2Nzk1LCAweDA2MDYsIDB4Njc5NywgMHgwNjBELA0KLSAgICAweDY3OTgsIDB4MTlCOSwgMHg2Nzk5LCAweDE5QzIsIDB4Njc5QSwgMHgwNjE1LCAweDY3OUMsIDB4MDYwOCwNCi0gICAgMHg2NzlELCAweDA2MEMsIDB4Njc5RiwgMHgxOUMwLCAweDY3QUUsIDB4MUIzNCwgMHg2N0FGLCAweDA3NTcsDQotICAgIDB4NjdCMCwgMHgwNzY0LCAweDY3QjIsIDB4MUIyRiwgMHg2N0IzLCAweDFCMjUsIDB4NjdCNCwgMHgwNzVELA0KLSAgICAweDY3QjUsIDB4MUIyMywgMHg2N0I2LCAweDA3NTYsIDB4NjdCNywgMHgxQjFFLCAweDY3QjgsIDB4MDc2MCwNCi0gICAgMHg2N0I5LCAweDFCMkIsIDB4NjdCQSwgMHgxQjE4LCAweDY3QkIsIDB4MUIxQSwgMHg2N0MwLCAweDFCMUQsDQotICAgIDB4NjdDMSwgMHgxQjE1LCAweDY3QzIsIDB4MUIyQSwgMHg2N0MzLCAweDFCM0EsIDB4NjdDNCwgMHgwNzVCLA0KLSAgICAweDY3QzUsIDB4MUIxRiwgMHg2N0M2LCAweDFCMzEsIDB4NjdDOCwgMHgxQjE3LCAweDY3QzksIDB4MUIzOCwNCi0gICAgMHg2N0NBLCAweDFCMzksIDB4NjdDQiwgMHgxQjNDLCAweDY3Q0MsIDB4MUIzMywgMHg2N0NELCAweDFCMjQsDQotICAgIDB4NjdDRSwgMHgxQjJDLCAweDY3Q0YsIDB4MDc2MSwgMHg2N0QwLCAweDA3NTQsIDB4NjdEMSwgMHgwNzVDLA0KLSAgICAweDY3RDIsIDB4MDc2OCwgMHg2N0QzLCAweDA3NTEsIDB4NjdENCwgMHgwNzUzLCAweDY3RDgsIDB4MUIxQywNCi0gICAgMHg2N0Q5LCAweDA3NjUsIDB4NjdEQSwgMHgwNzVFLCAweDY3REIsIDB4MUIzNiwgMHg2N0RDLCAweDFCMTksDQotICAgIDB4NjdERCwgMHgwNzY3LCAweDY3REUsIDB4MDc2MiwgMHg2N0RGLCAweDFCMjIsIDB4NjdFMiwgMHgwNzY2LA0KLSAgICAweDY3RTMsIDB4MUIyOSwgMHg2N0U0LCAweDFCMjEsIDB4NjdFNSwgMHgwNzVGLCAweDY3RTYsIDB4MUIzNSwNCi0gICAgMHg2N0U3LCAweDFCMkQsIDB4NjdFOSwgMHgwNzU5LCAweDY3RUEsIDB4MUIzQiwgMHg2N0VCLCAweDFCMjAsDQotICAgIDB4NjdFQywgMHgwNzU1LCAweDY3RUQsIDB4MUIzMiwgMHg2N0VFLCAweDFCMjgsIDB4NjdFRiwgMHgwNzVBLA0KLSAgICAweDY3RjAsIDB4MUIyRSwgMHg2N0YxLCAweDA3NTIsIDB4NjdGMiwgMHgxQjE2LCAweDY3RjMsIDB4MDc2MywNCi0gICAgMHg2N0Y0LCAweDA4RjUsIDB4NjdGNSwgMHgwNzU4LCAweDY3RjYsIDB4MUIyNywgMHg2N0Y3LCAweDFCMjYsDQotICAgIDB4NjdGOCwgMHgxQjFCLCAweDY3RkEsIDB4MUIzNywgMHg2N0ZDLCAweDFCMzAsIDB4NjdGRiwgMHgwNzUwLA0KLSAgICAweDY4MTIsIDB4MUNERCwgMHg2ODEzLCAweDA4RkMsIDB4NjgxNCwgMHgxQ0RFLCAweDY4MTYsIDB4MUNEMiwNCi0gICAgMHg2ODE3LCAweDA4RjEsIDB4NjgxOCwgMHgwOEZELCAweDY4MUEsIDB4MUNDQiwgMHg2ODFDLCAweDFDRDQsDQotICAgIDB4NjgxRCwgMHgxQ0RDLCAweDY4MUYsIDB4MUNDQSwgMHg2ODIwLCAweDFDRTUsIDB4NjgyMSwgMHgwOEU3LA0KLSAgICAweDY4MjUsIDB4MUNFNCwgMHg2ODI2LCAweDFDREYsIDB4NjgyOCwgMHgxQ0UwLCAweDY4MjksIDB4MDhFRiwNCi0gICAgMHg2ODJBLCAweDA4RkEsIDB4NjgyQiwgMHgxQ0Q2LCAweDY4MkQsIDB4MUNENywgMHg2ODJFLCAweDFDRTEsDQotICAgIDB4NjgyRiwgMHgxQ0Q4LCAweDY4MzEsIDB4MUNEMywgMHg2ODMyLCAweDFDQ0QsIDB4NjgzMywgMHgxQ0NFLA0KLSAgICAweDY4MzQsIDB4MUNEQiwgMHg2ODM1LCAweDFDRDUsIDB4NjgzOCwgMHgwOEU4LCAweDY4MzksIDB4MDhFQywNCi0gICAgMHg2ODNBLCAweDFDRTMsIDB4NjgzQiwgMHgxQ0NGLCAweDY4M0MsIDB4MDhGOCwgMHg2ODNELCAweDA4RjQsDQotICAgIDB4Njg0MCwgMHgwOEY3LCAweDY4NDEsIDB4MDhGRSwgMHg2ODQyLCAweDA4RUQsIDB4Njg0MywgMHgwOEY5LA0KLSAgICAweDY4NDQsIDB4MUNEQSwgMHg2ODQ1LCAweDA4RkIsIDB4Njg0NiwgMHgwOEVBLCAweDY4NDgsIDB4MDhFOSwNCi0gICAgMHg2ODQ5LCAweDFDQ0MsIDB4Njg0QiwgMHgxQ0QwLCAweDY4NEMsIDB4MDhGMiwgMHg2ODRELCAweDFDRTIsDQotICAgIDB4Njg0RSwgMHgxQ0Q5LCAweDY4NEYsIDB4MUNEMSwgMHg2ODUwLCAweDA4RjYsIDB4Njg1MSwgMHgwOEYzLA0KLSAgICAweDY4NTMsIDB4MDhFQiwgMHg2ODU0LCAweDA4RUUsIDB4Njg2QiwgMHgxRjI5LCAweDY4NkQsIDB4MUYxOSwNCi0gICAgMHg2ODZFLCAweDFGMUEsIDB4Njg2RiwgMHgxRjFFLCAweDY4NzEsIDB4MUYyRCwgMHg2ODcyLCAweDFGMkEsDQotICAgIDB4Njg3NCwgMHgxRjIzLCAweDY4NzUsIDB4MUYyMiwgMHg2ODc2LCAweDBBRDcsIDB4Njg3NywgMHgxRjI2LA0KLSAgICAweDY4NzgsIDB4MUYzNSwgMHg2ODc5LCAweDFGMTUsIDB4Njg3QiwgMHgxRjM2LCAweDY4N0MsIDB4MUYyOCwNCi0gICAgMHg2ODdELCAweDFGM0EsIDB4Njg3RSwgMHgxRjJFLCAweDY4N0YsIDB4MEFENiwgMHg2ODgwLCAweDFGMkMsDQotICAgIDB4Njg4MSwgMHgwQUQxLCAweDY4ODIsIDB4MEFFNiwgMHg2ODgzLCAweDBBREMsIDB4Njg4NSwgMHgwQUUwLA0KLSAgICAweDY4ODYsIDB4MEFERiwgMHg2ODg3LCAweDFGMTYsIDB4Njg4OSwgMHgxRjMzLCAweDY4OEEsIDB4MUYzOSwNCi0gICAgMHg2ODhCLCAweDFGMzEsIDB4Njg4QywgMHgxRjM4LCAweDY4OEYsIDB4MUYyNSwgMHg2ODkwLCAweDFGMTcsDQotICAgIDB4Njg5MSwgMHgxRjM3LCAweDY4OTIsIDB4MUYyNywgMHg2ODkzLCAweDBBRDQsIDB4Njg5NCwgMHgwQUUxLA0KLSAgICAweDY4OTYsIDB4MUYzMCwgMHg2ODk3LCAweDBBREEsIDB4Njg5QiwgMHgxRjJGLCAweDY4OUMsIDB4MUYxOCwNCi0gICAgMHg2ODlELCAweDBBRTIsIDB4Njg5RiwgMHgwQUU0LCAweDY4QTAsIDB4MUYzMiwgMHg2OEExLCAweDBBRTUsDQotICAgIDB4NjhBMiwgMHgwQUQzLCAweDY4QTMsIDB4MUYxRiwgMHg2OEE0LCAweDFGMzQsIDB4NjhBNywgMHgwQUQ5LA0KLSAgICAweDY4QTgsIDB4MEFFMywgMHg2OEE5LCAweDFGMjEsIDB4NjhBQSwgMHgxRjJCLCAweDY4QUIsIDB4MUYxQywNCi0gICAgMHg2OEFDLCAweDFGMjAsIDB4NjhBRCwgMHgwQURFLCAweDY4QUUsIDB4MUYxQiwgMHg2OEFGLCAweDBBRDIsDQotICAgIDB4NjhCMCwgMHgwQURCLCAweDY4QjEsIDB4MEFEOCwgMHg2OEIyLCAweDFGMjQsIDB4NjhCMywgMHgwOEYwLA0KLSAgICAweDY4QjQsIDB4MjE5OCwgMHg2OEI1LCAweDBBRDUsIDB4NjhDNCwgMHgwQURELCAweDY4QzYsIDB4MjE5QiwNCi0gICAgMHg2OEM3LCAweDIxQjEsIDB4NjhDOCwgMHgyMUE2LCAweDY4QzksIDB4MEM5NywgMHg2OENCLCAweDBDOTIsDQotICAgIDB4NjhDQywgMHgyMTk1LCAweDY4Q0QsIDB4MEM5MywgMHg2OENFLCAweDIxQTUsIDB4NjhEMCwgMHgyMTlFLA0KLSAgICAweDY4RDEsIDB4MjFBQiwgMHg2OEQyLCAweDBDOEYsIDB4NjhEMywgMHgyMTgzLCAweDY4RDQsIDB4MjFBRCwNCi0gICAgMHg2OEQ1LCAweDBDODUsIDB4NjhENiwgMHgyMThCLCAweDY4RDcsIDB4MEM4OCwgMHg2OEQ4LCAweDBDODcsDQotICAgIDB4NjhEQSwgMHgwQzk4LCAweDY4REMsIDB4MjE4NSwgMHg2OERELCAweDIxQTcsIDB4NjhERSwgMHgyMUE4LA0KLSAgICAweDY4REYsIDB4MEM4QSwgMHg2OEUwLCAweDBDODYsIDB4NjhFMSwgMHgyMTkzLCAweDY4RTMsIDB4MEM5MSwNCi0gICAgMHg2OEU0LCAweDIxOEUsIDB4NjhFNiwgMHgyMUE5LCAweDY4RTcsIDB4MEM4RCwgMHg2OEU4LCAweDIxQTEsDQotICAgIDB4NjhFOSwgMHgyMUFFLCAweDY4RUEsIDB4MjE4OCwgMHg2OEVCLCAweDIxOEQsIDB4NjhFQywgMHgyMTg3LA0KLSAgICAweDY4RUUsIDB4MEM4QywgMHg2OEVGLCAweDIxOUEsIDB4NjhGMCwgMHgyNDJCLCAweDY4RjEsIDB4MjE4OSwNCi0gICAgMHg2OEYyLCAweDBDOTAsIDB4NjhGMywgMHgyMTkyLCAweDY4RjQsIDB4MjFBQSwgMHg2OEY1LCAweDBDOEIsDQotICAgIDB4NjhGNiwgMHgyMThGLCAweDY4RjcsIDB4MjE4QywgMHg2OEY4LCAweDIxOUQsIDB4NjhGOSwgMHgwQzhFLA0KLSAgICAweDY4RkEsIDB4MEM4NCwgMHg2OEZCLCAweDBDOUEsIDB4NjhGQywgMHgyMUEwLCAweDY4RkQsIDB4MjE5RiwNCi0gICAgMHg2OTA0LCAweDIxODQsIDB4NjkwNSwgMHgwQzg5LCAweDY5MDYsIDB4MjFBQywgMHg2OTA3LCAweDIxOTQsDQotICAgIDB4NjkwOCwgMHgyMTk2LCAweDY5MEEsIDB4MjFBMywgMHg2OTBCLCAweDIxQTIsIDB4NjkwQywgMHgyMTgyLA0KLSAgICAweDY5MEQsIDB4MEM5NCwgMHg2OTBFLCAweDBDOTYsIDB4NjkwRiwgMHgyMThBLCAweDY5MTAsIDB4MjE5MSwNCi0gICAgMHg2OTExLCAweDIxOTksIDB4NjkxMiwgMHgwQzk1LCAweDY5MTMsIDB4MjE5MCwgMHg2OTE0LCAweDIxOUMsDQotICAgIDB4NjkxNSwgMHgyMUFGLCAweDY5MTcsIDB4MjFBNCwgMHg2OTI1LCAweDIxQjAsIDB4NjkyQSwgMHgyMTg2LA0KLSAgICAweDY5MkYsIDB4MjQzRiwgMHg2OTMwLCAweDBFM0UsIDB4NjkzMiwgMHgyNDNELCAweDY5MzMsIDB4MjQyOCwNCi0gICAgMHg2OTM0LCAweDI0MkQsIDB4NjkzNSwgMHgyNDI2LCAweDY5MzcsIDB4MjQzOSwgMHg2OTM4LCAweDI0MTgsDQotICAgIDB4NjkzOSwgMHgyNDFGLCAweDY5M0IsIDB4MjQzNywgMHg2OTNDLCAweDI0NDEsIDB4NjkzRCwgMHgyNDI5LA0KLSAgICAweDY5M0YsIDB4MjQxQywgMHg2OTQwLCAweDI0MkYsIDB4Njk0MSwgMHgyNDM0LCAweDY5NDIsIDB4MjQyMCwNCi0gICAgMHg2OTQ0LCAweDI0MzEsIDB4Njk0NSwgMHgyNDFELCAweDY5NDgsIDB4MjQyNCwgMHg2OTQ5LCAweDI0MjUsDQotICAgIDB4Njk0QSwgMHgwRTQwLCAweDY5NEIsIDB4MjQzOCwgMHg2OTRDLCAweDI0MzYsIDB4Njk0RSwgMHgyNDE5LA0KLSAgICAweDY5NEYsIDB4MjQzQiwgMHg2OTUxLCAweDI0M0MsIDB4Njk1MiwgMHgyNDNFLCAweDY5NTMsIDB4MEU0NCwNCi0gICAgMHg2OTU0LCAweDBFM0MsIDB4Njk1NiwgMHgxRjFELCAweDY5NTcsIDB4MjQyMSwgMHg2OTU4LCAweDI0MzMsDQotICAgIDB4Njk1OSwgMHgyNDIyLCAweDY5NUEsIDB4MEUzOSwgMHg2OTVCLCAweDBFNDksIDB4Njk1QywgMHgyNDNBLA0KLSAgICAweDY5NUQsIDB4MEU0NywgMHg2OTVFLCAweDBFNDMsIDB4Njk1RiwgMHgyNDE3LCAweDY5NjAsIDB4MEUzQiwNCi0gICAgMHg2OTYyLCAweDI0MUEsIDB4Njk2MywgMHgwRTQ4LCAweDY5NjUsIDB4MjQyQSwgMHg2OTY2LCAweDI0MTYsDQotICAgIDB4Njk2OCwgMHgwRTQxLCAweDY5NjksIDB4MjQyRSwgMHg2OTZBLCAweDI0MUUsIDB4Njk2QiwgMHgwRTQyLA0KLSAgICAweDY5NkMsIDB4MjQyNywgMHg2OTZELCAweDBFMzgsIDB4Njk2RSwgMHgwQzk5LCAweDY5NkYsIDB4MjQzMCwNCi0gICAgMHg2OTcwLCAweDIxOTcsIDB4Njk3MSwgMHgyNDFCLCAweDY5NzQsIDB4MjQzNSwgMHg2OTc1LCAweDBFM0QsDQotICAgIDB4Njk3NiwgMHgyNDMyLCAweDY5NzcsIDB4MEUzQSwgMHg2OTc4LCAweDI0MkMsIDB4Njk3OSwgMHgwRTQ1LA0KLSAgICAweDY5N0EsIDB4MjQyMywgMHg2OTdCLCAweDI0NDAsIDB4Njk4MiwgMHgwRTNGLCAweDY5ODMsIDB4MjRBRiwNCi0gICAgMHg2OTg2LCAweDBFNDYsIDB4Njk4RCwgMHgyNkM5LCAweDY5OEUsIDB4MjZDNywgMHg2OTkwLCAweDI2REQsDQotICAgIDB4Njk5MSwgMHgyNkM1LCAweDY5OTMsIDB4MjZENywgMHg2OTk0LCAweDBFMzcsIDB4Njk5NSwgMHgwRkYwLA0KLSAgICAweDY5OTYsIDB4MjZDMSwgMHg2OTk3LCAweDI2REMsIDB4Njk5OSwgMHgyNkM2LCAweDY5OUEsIDB4MjZENCwNCi0gICAgMHg2OTlCLCAweDBGRjUsIDB4Njk5QywgMHgwRkVFLCAweDY5OUUsIDB4MjZEQSwgMHg2OUEwLCAweDI2QkYsDQotICAgIDB4NjlBMSwgMHgyNkQ5LCAweDY5QTMsIDB4MTAwMCwgMHg2OUE0LCAweDI2RDAsIDB4NjlBNSwgMHgyNkUwLA0KLSAgICAweDY5QTYsIDB4MEZGRSwgMHg2OUE3LCAweDI2QzgsIDB4NjlBOCwgMHgwRkVGLCAweDY5QTksIDB4MjZDQSwNCi0gICAgMHg2OUFBLCAweDI2RDgsIDB4NjlBQiwgMHgwRkY4LCAweDY5QUMsIDB4MjZDMywgMHg2OUFELCAweDBGRkMsDQotICAgIDB4NjlBRSwgMHgwRkYyLCAweDY5QUYsIDB4MjZDQywgMHg2OUIwLCAweDI2QzIsIDB4NjlCMSwgMHgyNkJDLA0KLSAgICAweDY5QjMsIDB4MjZENiwgMHg2OUI0LCAweDBGRjksIDB4NjlCNSwgMHgyNkRGLCAweDY5QjYsIDB4MjZCRCwNCi0gICAgMHg2OUI3LCAweDBGRjYsIDB4NjlCOSwgMHgyNkQyLCAweDY5QkIsIDB4MEZGNywgMHg2OUJDLCAweDI2QzQsDQotICAgIDB4NjlCRCwgMHgyNkNGLCAweDY5QkUsIDB4MjZDQiwgMHg2OUJGLCAweDI2Q0QsIDB4NjlDMSwgMHgwRkYxLA0KLSAgICAweDY5QzIsIDB4MjZERSwgMHg2OUMzLCAweDBGRkYsIDB4NjlDNCwgMHgyNkNFLCAweDY5QzYsIDB4MjZFMSwNCi0gICAgMHg2OUM5LCAweDI2QkUsIDB4NjlDQSwgMHgyNkQzLCAweDY5Q0IsIDB4MEZGNCwgMHg2OUNDLCAweDBGRkQsDQotICAgIDB4NjlDRCwgMHgwRkZCLCAweDY5Q0UsIDB4MjZDMCwgMHg2OUNGLCAweDI2RDUsIDB4NjlEMCwgMHgwRkZBLA0KLSAgICAweDY5RDMsIDB4MEZGMywgMHg2OUQ0LCAweDI2RDEsIDB4NjlEOSwgMHgyNkRCLCAweDY5RTIsIDB4MjkwOSwNCi0gICAgMHg2OUU0LCAweDI5MDUsIDB4NjlFNSwgMHgyOTAxLCAweDY5RTYsIDB4MjkxNSwgMHg2OUU3LCAweDI5MTIsDQotICAgIDB4NjlFOCwgMHgxMTc3LCAweDY5RUIsIDB4MjkxOSwgMHg2OUVDLCAweDI5MDgsIDB4NjlFRCwgMHgxMTgyLA0KLSAgICAweDY5RUUsIDB4MjkwRiwgMHg2OUYxLCAweDI5MDQsIDB4NjlGMiwgMHgyOTBFLCAweDY5RjMsIDB4MTE3RiwNCi0gICAgMHg2OUY0LCAweDI5MjIsIDB4NjlGNiwgMHgyOTFGLCAweDY5RjcsIDB4MjkxMSwgMHg2OUY4LCAweDI5MDIsDQotICAgIDB4NjlGQiwgMHgyOTE2LCAweDY5RkMsIDB4MjkxOCwgMHg2OUZELCAweDExN0IsIDB4NjlGRSwgMHgyOTBDLA0KLSAgICAweDY5RkYsIDB4MjkwNywgMHg2QTAwLCAweDI4RkUsIDB4NkEwMSwgMHgxMTc4LCAweDZBMDIsIDB4MTE4MCwNCi0gICAgMHg2QTA0LCAweDI5MUIsIDB4NkEwNSwgMHgxMTgxLCAweDZBMDYsIDB4MjhGRiwgMHg2QTA3LCAweDI5MjEsDQotICAgIDB4NkEwOCwgMHgyOTE0LCAweDZBMDksIDB4MjkxQSwgMHg2QTBBLCAweDExN0UsIDB4NkEwRCwgMHgyOTE3LA0KLSAgICAweDZBMEYsIDB4MjkxRSwgMHg2QTExLCAweDExODMsIDB4NkExMywgMHgxMTdELCAweDZBMTQsIDB4MjkxMCwNCi0gICAgMHg2QTE1LCAweDI5MDMsIDB4NkExNiwgMHgyOTIzLCAweDZBMTcsIDB4MjkwMCwgMHg2QTE4LCAweDI5MUMsDQotICAgIDB4NkExOSwgMHgxMTdBLCAweDZBMUIsIDB4MjkwQSwgMHg2QTFELCAweDI5MEIsIDB4NkExRSwgMHgxMTc5LA0KLSAgICAweDZBMUYsIDB4MTE3NiwgMHg2QTIwLCAweDI5MDYsIDB4NkEyMSwgMHgxMTdDLCAweDZBMjMsIDB4MTE3NSwNCi0gICAgMHg2QTI1LCAweDI5MUQsIDB4NkEyNiwgMHgyOTIwLCAweDZBMjcsIDB4MjkwRCwgMHg2QTI4LCAweDJCNzQsDQotICAgIDB4NkEzMiwgMHgyQjZDLCAweDZBMzQsIDB4MkI2OCwgMHg2QTM1LCAweDEyRDksIDB4NkEzOCwgMHgxMkNFLA0KLSAgICAweDZBMzksIDB4MTJEMywgMHg2QTNBLCAweDEyQ0YsIDB4NkEzQiwgMHgyQjc2LCAweDZBM0MsIDB4MkI4MSwNCi0gICAgMHg2QTNELCAweDEyQ0QsIDB4NkEzRSwgMHgyQjZFLCAweDZBM0YsIDB4MkI3NywgMHg2QTQwLCAweDI5MTMsDQotICAgIDB4NkE0MSwgMHgyQjc4LCAweDZBNDQsIDB4MTJENCwgMHg2QTQ2LCAweDJCODcsIDB4NkE0NywgMHgxMkQ4LA0KLSAgICAweDZBNDgsIDB4MTJEQiwgMHg2QTQ5LCAweDJCNkEsIDB4NkE0QiwgMHgxMkQ3LCAweDZBNEQsIDB4MkI4NSwNCi0gICAgMHg2QTRFLCAweDJCODYsIDB4NkE0RiwgMHgyQjdDLCAweDZBNTAsIDB4MkI3QiwgMHg2QTUxLCAweDJCNzMsDQotICAgIDB4NkE1NCwgMHgyQjdELCAweDZBNTUsIDB4MkI4NCwgMHg2QTU2LCAweDJCODMsIDB4NkE1OCwgMHgxMkQyLA0KLSAgICAweDZBNTksIDB4MTJEMCwgMHg2QTVBLCAweDJCNzUsIDB4NkE1QiwgMHgyQjcyLCAweDZBNUQsIDB4MkI2RiwNCi0gICAgMHg2QTVFLCAweDJCODIsIDB4NkE1RiwgMHgxMkRBLCAweDZBNjAsIDB4MkI4MCwgMHg2QTYxLCAweDEyRDYsDQotICAgIDB4NkE2MiwgMHgxMkQ1LCAweDZBNjQsIDB4MkI3QSwgMHg2QTY2LCAweDJCNjksIDB4NkE2NywgMHgyQjZCLA0KLSAgICAweDZBNjgsIDB4MkI2RCwgMHg2QTY5LCAweDJCN0YsIDB4NkE2QSwgMHgyQjc5LCAweDZBNkIsIDB4MTJEMSwNCi0gICAgMHg2QTZELCAweDJCNzAsIDB4NkE2RiwgMHgyQjdFLCAweDZBNzYsIDB4MkI3MSwgMHg2QTdFLCAweDEzRUMsDQotICAgIDB4NkE3RiwgMHgyRDg0LCAweDZBODAsIDB4MTNFNSwgMHg2QTgxLCAweDJENzUsIDB4NkE4MywgMHgyRDgwLA0KLSAgICAweDZBODQsIDB4MTNFNywgMHg2QTg1LCAweDJEODcsIDB4NkE4NywgMHgyRDdDLCAweDZBODksIDB4MkQ3NywNCi0gICAgMHg2QThDLCAweDJEODgsIDB4NkE4RCwgMHgyRDczLCAweDZBOEUsIDB4MkQ3RSwgMHg2QTkwLCAweDEzRUUsDQotICAgIDB4NkE5MSwgMHgyRDgzLCAweDZBOTIsIDB4MkQ4OSwgMHg2QTkzLCAweDJEN0QsIDB4NkE5NCwgMHgxM0U2LA0KLSAgICAweDZBOTUsIDB4MkQ3RiwgMHg2QTk2LCAweDJENzQsIDB4NkE5NywgMHgxM0VELCAweDZBOUEsIDB4MkQ4NiwNCi0gICAgMHg2QTlCLCAweDJENzksIDB4NkE5QywgMHgxM0U5LCAweDZBOUUsIDB4MkQ3QiwgMHg2QTlGLCAweDJENzgsDQotICAgIDB4NkFBMCwgMHgxM0VGLCAweDZBQTEsIDB4MkQ3QSwgMHg2QUEyLCAweDEzRTgsIDB4NkFBMywgMHgxM0VCLA0KLSAgICAweDZBQTQsIDB4MkQ4MiwgMHg2QUE1LCAweDJENzYsIDB4NkFBNiwgMHgyRDg1LCAweDZBQTgsIDB4MkQ4MSwNCi0gICAgMHg2QUFDLCAweDE0REQsIDB4NkFBRCwgMHgyRjNFLCAweDZBQUUsIDB4MTRFMiwgMHg2QUFGLCAweDE0RTMsDQotICAgIDB4NkFCMywgMHgxNERDLCAweDZBQjQsIDB4MkYzRCwgMHg2QUI2LCAweDJGM0EsIDB4NkFCNywgMHgyRjNCLA0KLSAgICAweDZBQjgsIDB4MTRFMCwgMHg2QUI5LCAweDJGMzUsIDB4NkFCQSwgMHgyRjM5LCAweDZBQkIsIDB4MTRERiwNCi0gICAgMHg2QUJELCAweDJGMzYsIDB4NkFDMiwgMHgxNEUxLCAweDZBQzMsIDB4MTRERSwgMHg2QUM1LCAweDJGMzQsDQotICAgIDB4NkFDNiwgMHgyRjM4LCAweDZBQzcsIDB4MkYzQywgMHg2QUNCLCAweDMwOUYsIDB4NkFDQywgMHgzMDlDLA0KLSAgICAweDZBQ0QsIDB4MzBBNSwgMHg2QUNGLCAweDMwQTQsIDB4NkFEMCwgMHgzMEEyLCAweDZBRDEsIDB4MzA5RCwNCi0gICAgMHg2QUQzLCAweDE1ODksIDB4NkFEOSwgMHgzMDlFLCAweDZBREEsIDB4MTU4OCwgMHg2QURCLCAweDEzRUEsDQotICAgIDB4NkFEQywgMHgzMEExLCAweDZBREQsIDB4MTU4NywgMHg2QURFLCAweDMwQTYsIDB4NkFERiwgMHgzMEEwLA0KLSAgICAweDZBRTAsIDB4MzA5QiwgMHg2QUUxLCAweDJGMzcsIDB4NkFFNSwgMHgxNTg2LCAweDZBRTcsIDB4MzA5QSwNCi0gICAgMHg2QUU4LCAweDMxREYsIDB4NkFFQSwgMHgzMURFLCAweDZBRUIsIDB4MzBBMywgMHg2QUVDLCAweDE2MUIsDQotICAgIDB4NkFFRSwgMHgzMUUyLCAweDZBRUYsIDB4MzFFMywgMHg2QUYwLCAweDMxREQsIDB4NkFGMSwgMHgzMUUxLA0KLSAgICAweDZBRjMsIDB4MzFEQywgMHg2QUY4LCAweDMyRDYsIDB4NkFGOSwgMHgzMUUwLCAweDZBRkEsIDB4MTY3OCwNCi0gICAgMHg2QUZCLCAweDE2NzYsIDB4NkFGQywgMHgzMkQ0LCAweDZCMDAsIDB4MzJENywgMHg2QjAyLCAweDMyRDMsDQotICAgIDB4NkIwMywgMHgzMkQ1LCAweDZCMDQsIDB4MTY3NywgMHg2QjA4LCAweDMzODYsIDB4NkIwOSwgMHgzMzg3LA0KLSAgICAweDZCMEEsIDB4MTZDNiwgMHg2QjBCLCAweDMzODUsIDB4NkIwRiwgMHgzNDIwLCAweDZCMTAsIDB4MTZGRCwNCi0gICAgMHg2QjExLCAweDM0MUUsIDB4NkIxMiwgMHgzNDFGLCAweDZCMTMsIDB4MzQ4NywgMHg2QjE2LCAweDE3NDMsDQotICAgIDB4NkIxNywgMHgzNENFLCAweDZCMTgsIDB4MzRDQywgMHg2QjE5LCAweDM0Q0QsIDB4NkIxQSwgMHgzNENGLA0KLSAgICAweDZCMUUsIDB4MzUzNCwgMHg2QjIwLCAweDAyREUsIDB4NkIyMSwgMHgwM0UzLCAweDZCMjMsIDB4MDYxQSwNCi0gICAgMHg2QjI1LCAweDE5QzksIDB4NkIyOCwgMHgxQjNELCAweDZCMkMsIDB4MUNFNiwgMHg2QjJELCAweDFDRTgsDQotICAgIDB4NkIyRiwgMHgxQ0U3LCAweDZCMzEsIDB4MUNFOSwgMHg2QjMyLCAweDBBRTcsIDB4NkIzMywgMHgxRjNDLA0KLSAgICAweDZCMzQsIDB4MUNFQSwgMHg2QjM2LCAweDFGM0IsIDB4NkIzNywgMHgxRjNELCAweDZCMzgsIDB4MUYzRSwNCi0gICAgMHg2QjM5LCAweDIxQjIsIDB4NkIzQSwgMHgwQzlDLCAweDZCM0IsIDB4MjFCMywgMHg2QjNDLCAweDIxQjUsDQotICAgIDB4NkIzRCwgMHgwQzlELCAweDZCM0UsIDB4MEM5QiwgMHg2QjNGLCAweDIxQjQsIDB4NkI0MSwgMHgyNDQ3LA0KLSAgICAweDZCNDIsIDB4MjQ0NSwgMHg2QjQzLCAweDI0NDQsIDB4NkI0NSwgMHgyNDQzLCAweDZCNDYsIDB4MjQ0MiwNCi0gICAgMHg2QjQ3LCAweDBFNEEsIDB4NkI0OCwgMHgyNDQ2LCAweDZCNDksIDB4MTAwMSwgMHg2QjRBLCAweDI2RTIsDQotICAgIDB4NkI0QiwgMHgyNkU0LCAweDZCNEMsIDB4MTAwMiwgMHg2QjRELCAweDI2RTMsIDB4NkI0RSwgMHgxMTg1LA0KLSAgICAweDZCNTAsIDB4MTE4NCwgMHg2QjUxLCAweDI5MjQsIDB4NkI1NCwgMHgyQjg5LCAweDZCNTUsIDB4MkI4OCwNCi0gICAgMHg2QjU2LCAweDJCOEEsIDB4NkI1OSwgMHgxMkRDLCAweDZCNUIsIDB4MkQ4QSwgMHg2QjVDLCAweDEzRjAsDQotICAgIDB4NkI1RSwgMHgyRjNGLCAweDZCNUYsIDB4MTRFNCwgMHg2QjYwLCAweDMwQTcsIDB4NkI2MSwgMHgxNkM3LA0KLSAgICAweDZCNjIsIDB4MDJERiwgMHg2QjYzLCAweDAzNEQsIDB4NkI2NCwgMHgwM0U0LCAweDZCNjUsIDB4MDRDOSwNCi0gICAgMHg2QjY2LCAweDA2MUIsIDB4NkI2NywgMHgwNjFDLCAweDZCNkEsIDB4MDc2OSwgMHg2QjZELCAweDFDRUIsDQotICAgIDB4NkI3MiwgMHgwRTRCLCAweDZCNzYsIDB4MjlBMiwgMHg2Qjc3LCAweDEyREQsIDB4NkI3OCwgMHgxNEU1LA0KLSAgICAweDZCNzksIDB4MDJFMCwgMHg2QjdCLCAweDAzRTUsIDB4NkI3RSwgMHgxOUNCLCAweDZCN0YsIDB4MDYxRCwNCi0gICAgMHg2QjgwLCAweDE5Q0EsIDB4NkI4MiwgMHgxQjNFLCAweDZCODMsIDB4MDc2QSwgMHg2Qjg0LCAweDFCM0YsDQotICAgIDB4NkI4NiwgMHgwNzZCLCAweDZCODgsIDB4MUNFRCwgMHg2Qjg5LCAweDA5MDAsIDB4NkI4QSwgMHgwOEZGLA0KLSAgICAweDZCOEMsIDB4MUY0MywgMHg2QjhELCAweDFGNDEsIDB4NkI4RSwgMHgxRjQyLCAweDZCOEYsIDB4MUY0MCwNCi0gICAgMHg2QjkxLCAweDFGM0YsIDB4NkI5NCwgMHgyMUI2LCAweDZCOTUsIDB4MjFCOSwgMHg2Qjk2LCAweDBDOUYsDQotICAgIDB4NkI5NywgMHgyMUI3LCAweDZCOTgsIDB4MEM5RSwgMHg2Qjk5LCAweDIxQjgsIDB4NkI5QiwgMHgyNDQ4LA0KLSAgICAweDZCOUUsIDB4MjZFNSwgMHg2QjlGLCAweDI2RTYsIDB4NkJBMCwgMHgyNkU3LCAweDZCQTIsIDB4MjkyNywNCi0gICAgMHg2QkEzLCAweDI5MjYsIDB4NkJBNCwgMHgxMTg2LCAweDZCQTUsIDB4MjkyNSwgMHg2QkE2LCAweDI5MjgsDQotICAgIDB4NkJBNywgMHgyQjhCLCAweDZCQUEsIDB4MkI4QywgMHg2QkFCLCAweDJCOEQsIDB4NkJBRCwgMHgyRDhCLA0KLSAgICAweDZCQUUsIDB4MTNGMSwgMHg2QkFGLCAweDE0RTYsIDB4NkJCMCwgMHgzMEE4LCAweDZCQjIsIDB4MTY3OSwNCi0gICAgMHg2QkIzLCAweDE3OEEsIDB4NkJCNSwgMHgwNzZDLCAweDZCQjYsIDB4MUI0MCwgMHg2QkI3LCAweDA5MDEsDQotICAgIDB4NkJCQSwgMHgwQUU4LCAweDZCQkMsIDB4MENBMCwgMHg2QkJELCAweDIxQkEsIDB4NkJCRiwgMHgwRTRELA0KLSAgICAweDZCQzAsIDB4MEU0QywgMHg2QkMzLCAweDI2RTgsIDB4NkJDNCwgMHgyNkU5LCAweDZCQzUsIDB4MTE4NywNCi0gICAgMHg2QkM2LCAweDExODgsIDB4NkJDNywgMHgyQjhGLCAweDZCQzgsIDB4MkI4RSwgMHg2QkM5LCAweDJGNDAsDQotICAgIDB4NkJDQSwgMHgzNDIxLCAweDZCQ0IsIDB4MDJFMSwgMHg2QkNDLCAweDE3OEIsIDB4NkJDRCwgMHgwMzRFLA0KLSAgICAweDZCQ0YsIDB4MDRDQSwgMHg2QkQwLCAweDE4QUQsIDB4NkJEMiwgMHgwNzZELCAweDZCRDMsIDB4MEU0RSwNCi0gICAgMHg2QkQ0LCAweDAyRTIsIDB4NkJENiwgMHgxQjQxLCAweDZCRDcsIDB4MDc2RSwgMHg2QkQ4LCAweDFCNDIsDQotICAgIDB4NkJEQSwgMHgxM0YyLCAweDZCREIsIDB4MDJFMywgMHg2QkRFLCAweDE5Q0MsIDB4NkJFMCwgMHgxQjQzLA0KLSAgICAweDZCRTIsIDB4MUNGMiwgMHg2QkUzLCAweDFDRjEsIDB4NkJFNCwgMHgxQ0VGLCAweDZCRTYsIDB4MUNFRSwNCi0gICAgMHg2QkU3LCAweDFDRjMsIDB4NkJFOCwgMHgxQ0YwLCAweDZCRUIsIDB4MEFFOSwgMHg2QkVDLCAweDBBRUEsDQotICAgIDB4NkJFRiwgMHgwQ0ExLCAweDZCRjAsIDB4MjFCQiwgMHg2QkYyLCAweDIxQkMsIDB4NkJGMywgMHgyMUJELA0KLSAgICAweDZCRjcsIDB4MjQ0QywgMHg2QkY4LCAweDI0NEQsIDB4NkJGOSwgMHgyNDRCLCAweDZCRkIsIDB4MjQ0OSwNCi0gICAgMHg2QkZDLCAweDI0NEEsIDB4NkJGRCwgMHgwRTRGLCAweDZCRkUsIDB4MjZFQSwgMHg2QkZGLCAweDI5MkIsDQotICAgIDB4NkMwMCwgMHgyOTJBLCAweDZDMDEsIDB4MjkyOSwgMHg2QzAyLCAweDI5MkMsIDB4NkMwMywgMHgyQjkxLA0KLSAgICAweDZDMDQsIDB4MkI5MCwgMHg2QzA1LCAweDEyREUsIDB4NkMwNiwgMHgyQjkyLCAweDZDMDgsIDB4MTNGMywNCi0gICAgMHg2QzA5LCAweDJEOEMsIDB4NkMwQiwgMHgyRjQxLCAweDZDMEMsIDB4MzBBOSwgMHg2QzBELCAweDMzODgsDQotICAgIDB4NkMwRiwgMHgwMkU0LCAweDZDMTAsIDB4MDM1MCwgMHg2QzExLCAweDAzNEYsIDB4NkMxMywgMHgwNjFFLA0KLSAgICAweDZDMTQsIDB4MTc4QywgMHg2QzE1LCAweDE3QUEsIDB4NkMxNiwgMHgwM0U2LCAweDZDMTgsIDB4MTgwMSwNCi0gICAgMHg2QzE5LCAweDE4QUUsIDB4NkMxQSwgMHgxOEFGLCAweDZDMUIsIDB4MDYxRiwgMHg2QzFELCAweDE5Q0QsDQotICAgIDB4NkMxRiwgMHgwNzZGLCAweDZDMjAsIDB4MUI0NCwgMHg2QzIxLCAweDFCNDUsIDB4NkMyMywgMHgwOTAyLA0KLSAgICAweDZDMjQsIDB4MDkwNiwgMHg2QzI1LCAweDFDRjQsIDB4NkMyNiwgMHgwOTA1LCAweDZDMjcsIDB4MDkwMywNCi0gICAgMHg2QzI4LCAweDA5MDQsIDB4NkMyQSwgMHgxRjQ0LCAweDZDMkIsIDB4MEFFQiwgMHg2QzJDLCAweDBDQTQsDQotICAgIDB4NkMyRSwgMHgwQ0EyLCAweDZDMkYsIDB4MENBMywgMHg2QzMwLCAweDIxQkUsIDB4NkMzMywgMHgxMDAzLA0KLSAgICAweDZDMzQsIDB4MDJFNSwgMHg2QzM2LCAweDE3QUIsIDB4NkMzOCwgMHgwMzUxLCAweDZDM0IsIDB4MTdBRSwNCi0gICAgMHg2QzNFLCAweDAzNTQsIDB4NkMzRiwgMHgxN0FELCAweDZDNDAsIDB4MDM1MywgMHg2QzQxLCAweDAzNTIsDQotICAgIDB4NkM0MiwgMHgwNENCLCAweDZDNDMsIDB4MTdBQywgMHg2QzQ2LCAweDE4MDIsIDB4NkM0QSwgMHgxODA2LA0KLSAgICAweDZDNEIsIDB4MTgwOCwgMHg2QzRDLCAweDE4MDksIDB4NkM0RCwgMHgwM0YwLCAweDZDNEUsIDB4MDNGMSwNCi0gICAgMHg2QzRGLCAweDE4MDUsIDB4NkM1MCwgMHgwM0VDLCAweDZDNTIsIDB4MTgwMywgMHg2QzU0LCAweDE4MDcsDQotICAgIDB4NkM1NSwgMHgwM0VELCAweDZDNTcsIDB4MDNFOCwgMHg2QzU5LCAweDAzRTksIDB4NkM1QiwgMHgwM0VGLA0KLSAgICAweDZDNUMsIDB4MTgwNCwgMHg2QzVELCAweDAzRTcsIDB4NkM1RSwgMHgwNENDLCAweDZDNUYsIDB4MDNFQSwNCi0gICAgMHg2QzYwLCAweDAzRUIsIDB4NkM2MSwgMHgwM0VFLCAweDZDNjUsIDB4MThDMCwgMHg2QzY2LCAweDE4QkUsDQotICAgIDB4NkM2NywgMHgxOEIxLCAweDZDNjgsIDB4MDREOCwgMHg2QzY5LCAweDE4QjgsIDB4NkM2QSwgMHgwNEQzLA0KLSAgICAweDZDNkIsIDB4MThCMiwgMHg2QzZELCAweDE4QkEsIDB4NkM2RiwgMHgxOEI3LCAweDZDNzAsIDB4MDRENiwNCi0gICAgMHg2QzcxLCAweDE4QjYsIDB4NkM3MiwgMHgwNERELCAweDZDNzMsIDB4MThCRiwgMHg2Qzc0LCAweDA0REYsDQotICAgIDB4NkM3NiwgMHgwNEUxLCAweDZDNzgsIDB4MThCMCwgMHg2QzdBLCAweDA0RDQsIDB4NkM3QiwgMHgxOEMxLA0KLSAgICAweDZDN0QsIDB4MDREQiwgMHg2QzdFLCAweDA0REUsIDB4NkM4MCwgMHgxOUU0LCAweDZDODEsIDB4MDRDRSwNCi0gICAgMHg2QzgyLCAweDA0RTUsIDB4NkM4MywgMHgwNERDLCAweDZDODQsIDB4MThCMywgMHg2Qzg1LCAweDA0RDEsDQotICAgIDB4NkM4NiwgMHgwNEUwLCAweDZDODcsIDB4MThCQiwgMHg2Qzg4LCAweDA0Q0YsIDB4NkM4OSwgMHgwNEQwLA0KLSAgICAweDZDOEEsIDB4MTlFMiwgMHg2QzhCLCAweDE4QjQsIDB4NkM4QywgMHgwNEQ3LCAweDZDOEQsIDB4MDRFMiwNCi0gICAgMHg2QzhFLCAweDE4QzIsIDB4NkM4RiwgMHgxOEI1LCAweDZDOTAsIDB4MDRENSwgMHg2QzkyLCAweDA0REEsDQotICAgIDB4NkM5MywgMHgxOUNFLCAweDZDOTQsIDB4MDRFMywgMHg2Qzk1LCAweDE4QkMsIDB4NkM5NiwgMHgwNEQ5LA0KLSAgICAweDZDOTgsIDB4MDRFNCwgMHg2Qzk5LCAweDA0Q0QsIDB4NkM5QSwgMHgxOEI5LCAweDZDOUIsIDB4MDREMiwNCi0gICAgMHg2QzlDLCAweDE4QkQsIDB4NkM5RCwgMHgxOUUzLCAweDZDQUIsIDB4MDYyQiwgMHg2Q0FDLCAweDA2M0IsDQotICAgIDB4NkNBRCwgMHgxOUQ1LCAweDZDQUUsIDB4MDYzMiwgMHg2Q0IwLCAweDE5RUEsIDB4NkNCMSwgMHgwNjIzLA0KLSAgICAweDZDQjMsIDB4MDYyNiwgMHg2Q0I0LCAweDE5RTEsIDB4NkNCNiwgMHgxOUQzLCAweDZDQjcsIDB4MTlENywNCi0gICAgMHg2Q0I4LCAweDA2MkUsIDB4NkNCOSwgMHgwNjMwLCAweDZDQkEsIDB4MTlEQSwgMHg2Q0JCLCAweDA2MzcsDQotICAgIDB4NkNCQywgMHgwNjI5LCAweDZDQkQsIDB4MDYyNywgMHg2Q0JFLCAweDA2MjgsIDB4NkNCRiwgMHgwNjM2LA0KLSAgICAweDZDQzAsIDB4MTlFNiwgMHg2Q0MxLCAweDA2MzEsIDB4NkNDMiwgMHgxOUQ5LCAweDZDQzMsIDB4MTlEQiwNCi0gICAgMHg2Q0M0LCAweDA2MkYsIDB4NkNDNSwgMHgwNjM0LCAweDZDQzYsIDB4MTlEQywgMHg2Q0M3LCAweDE5RTksDQotICAgIDB4NkNDOSwgMHgwNzcwLCAweDZDQ0EsIDB4MDYzQSwgMHg2Q0NDLCAweDA2MjQsIDB4NkNDRCwgMHgxOUU4LA0KLSAgICAweDZDQ0YsIDB4MTlFQywgMHg2Q0QwLCAweDE5RDgsIDB4NkNEMSwgMHgxOUVFLCAweDZDRDIsIDB4MTlERiwNCi0gICAgMHg2Q0QzLCAweDA2MkQsIDB4NkNENCwgMHgxOUQ0LCAweDZDRDUsIDB4MDYyQywgMHg2Q0Q2LCAweDA2M0UsDQotICAgIDB4NkNENywgMHgwNjMzLCAweDZDRDksIDB4MTlEMiwgMHg2Q0RBLCAweDFCNEUsIDB4NkNEQiwgMHgwNjM5LA0KLSAgICAweDZDREMsIDB4MDYzRCwgMHg2Q0RELCAweDE5RTAsIDB4NkNERSwgMHgxOUU1LCAweDZDRTAsIDB4MDYzRiwNCi0gICAgMHg2Q0UxLCAweDA2MzgsIDB4NkNFMiwgMHgwNjJBLCAweDZDRTMsIDB4MDYyMCwgMHg2Q0U1LCAweDA2MjUsDQotICAgIDB4NkNFNywgMHgxOUQ2LCAweDZDRTgsIDB4MDYyMSwgMHg2Q0U5LCAweDE5RUQsIDB4NkNFQiwgMHgxOUQwLA0KLSAgICAweDZDRUMsIDB4MTlDRiwgMHg2Q0VELCAweDE5REQsIDB4NkNFRSwgMHgxOUQxLCAweDZDRUYsIDB4MDYzQywNCi0gICAgMHg2Q0YwLCAweDA5MDcsIDB4NkNGMSwgMHgwNjM1LCAweDZDRjIsIDB4MTlERSwgMHg2Q0YzLCAweDA2MjIsDQotICAgIDB4NkNGNSwgMHgwNzdGLCAweDZDRjksIDB4MTlFQiwgMHg2RDAwLCAweDFCNTUsIDB4NkQwMSwgMHgxQjU4LA0KLSAgICAweDZEMDMsIDB4MUI1QiwgMHg2RDA0LCAweDFCNTAsIDB4NkQwNywgMHgxQjVFLCAweDZEMDgsIDB4MUI2MSwNCi0gICAgMHg2RDA5LCAweDFCNjMsIDB4NkQwQSwgMHgxQjRELCAweDZEMEIsIDB4MDc3MSwgMHg2RDBDLCAweDA3NzYsDQotICAgIDB4NkQwRCwgMHgxQ0Y5LCAweDZEMEUsIDB4MDc4NiwgMHg2RDBGLCAweDFCNUMsIDB4NkQxMCwgMHgxQjY0LA0KLSAgICAweDZEMTEsIDB4MUI1NCwgMHg2RDEyLCAweDFCNEMsIDB4NkQxNiwgMHgxRDE0LCAweDZEMTcsIDB4MDc3OSwNCi0gICAgMHg2RDE4LCAweDFCNTksIDB4NkQxOSwgMHgxQjUxLCAweDZEMUEsIDB4MUI1MywgMHg2RDFCLCAweDA3N0UsDQotICAgIDB4NkQxRCwgMHgxQjU2LCAweDZEMUUsIDB4MDc3OCwgMHg2RDFGLCAweDFCNDksIDB4NkQyMCwgMHgxQjVGLA0KLSAgICAweDZEMjIsIDB4MUI2MiwgMHg2RDI1LCAweDA3NzUsIDB4NkQyNywgMHgwNzgxLCAweDZEMjgsIDB4MUI0NiwNCi0gICAgMHg2RDI5LCAweDA3ODMsIDB4NkQyQSwgMHgwNzczLCAweDZEMkIsIDB4MDc4NywgMHg2RDJDLCAweDFCNjAsDQotICAgIDB4NkQyRCwgMHgxQjQ4LCAweDZEMkUsIDB4MDc4NCwgMHg2RDJGLCAweDFEMEUsIDB4NkQzMCwgMHgxOUU3LA0KLSAgICAweDZEMzEsIDB4MDc3NywgMHg2RDMyLCAweDA3NzIsIDB4NkQzMywgMHgxQjRGLCAweDZEMzQsIDB4MUI0NywNCi0gICAgMHg2RDM1LCAweDA3ODUsIDB4NkQzNiwgMHgwNzdELCAweDZEMzcsIDB4MUI1QSwgMHg2RDM4LCAweDA3ODIsDQotICAgIDB4NkQzOSwgMHgwNzgwLCAweDZEM0EsIDB4MUI1MiwgMHg2RDNCLCAweDA3N0EsIDB4NkQzQywgMHgxQjRBLA0KLSAgICAweDZEM0QsIDB4MDc3QiwgMHg2RDNFLCAweDA3N0MsIDB4NkQzRiwgMHgxQjRCLCAweDZENDAsIDB4MUI1RCwNCi0gICAgMHg2RDQxLCAweDA3NzQsIDB4NkQ0MiwgMHgxQjU3LCAweDZENTgsIDB4MUNGQywgMHg2RDU5LCAweDA5MEYsDQotICAgIDB4NkQ1QSwgMHgwOTE0LCAweDZENUUsIDB4MUQwNSwgMHg2RDVGLCAweDFEMEIsIDB4NkQ2MCwgMHgxRDA3LA0KLSAgICAweDZENjEsIDB4MUNGQSwgMHg2RDYyLCAweDFDRkQsIDB4NkQ2MywgMHgxQ0Y2LCAweDZENjQsIDB4MUNGNywNCi0gICAgMHg2RDY1LCAweDA5MUIsIDB4NkQ2NiwgMHgwOTBDLCAweDZENjcsIDB4MUQwNiwgMHg2RDY4LCAweDFEMEYsDQotICAgIDB4NkQ2OSwgMHgwOTE2LCAweDZENkEsIDB4MDkwOCwgMHg2RDZDLCAweDA5MTEsIDB4NkQ2RCwgMHgxQ0ZFLA0KLSAgICAweDZENkUsIDB4MDkxMywgMHg2RDZGLCAweDFDRkYsIDB4NkQ3MCwgMHgxRDA5LCAweDZENzQsIDB4MDkxNSwNCi0gICAgMHg2RDc1LCAweDFEMTgsIDB4NkQ3NiwgMHgxQ0Y4LCAweDZENzcsIDB4MDkwRSwgMHg2RDc4LCAweDA5MEQsDQotICAgIDB4NkQ3OSwgMHgwOTE5LCAweDZEN0EsIDB4MUNGNSwgMHg2RDdCLCAweDFEMTYsIDB4NkQ3QywgMHgxRDBBLA0KLSAgICAweDZEN0QsIDB4MUQxNywgMHg2RDdFLCAweDFEMTEsIDB4NkQ3RiwgMHgxRDAzLCAweDZEODAsIDB4MUQxMiwNCi0gICAgMHg2RDgyLCAweDFEMEMsIDB4NkQ4MywgMHgxRDE1LCAweDZEODQsIDB4MUQxMywgMHg2RDg1LCAweDA5MUEsDQotICAgIDB4NkQ4NiwgMHgxRDA0LCAweDZEODcsIDB4MDkwQiwgMHg2RDg4LCAweDA5MEEsIDB4NkQ4OSwgMHgwOTEyLA0KLSAgICAweDZEOEEsIDB4MDkxOCwgMHg2RDhCLCAweDFEMTAsIDB4NkQ4QywgMHgwOTE3LCAweDZEOEQsIDB4MUQwMSwNCi0gICAgMHg2RDhFLCAweDBBRUMsIDB4NkQ5MCwgMHgxRDE5LCAweDZEOTEsIDB4MUQwMCwgMHg2RDkyLCAweDFDRkIsDQotICAgIDB4NkQ5MywgMHgwOTEwLCAweDZEOTQsIDB4MDkxQywgMHg2RDk1LCAweDA5MDksIDB4NkQ5NywgMHgxRDA4LA0KLSAgICAweDZEOTgsIDB4MUQwRCwgMHg2REFBLCAweDBCMEUsIDB4NkRBQiwgMHgxRjQ2LCAweDZEQUMsIDB4MUY0QSwNCi0gICAgMHg2REFFLCAweDBBRkIsIDB4NkRBRiwgMHgwQUY5LCAweDZEQjIsIDB4MEFGMCwgMHg2REIzLCAweDFGNDgsDQotICAgIDB4NkRCNCwgMHgxRjQ3LCAweDZEQjUsIDB4MEIwNCwgMHg2REI3LCAweDFGNEQsIDB4NkRCOCwgMHgwQUZFLA0KLSAgICAweDZEQkEsIDB4MUY1RiwgMHg2REJCLCAweDFGNkIsIDB4NkRCQywgMHgwQUVELCAweDZEQkQsIDB4MUY1QywNCi0gICAgMHg2REJFLCAweDFGNTUsIDB4NkRCRiwgMHgwQjEwLCAweDZEQzAsIDB4MUY0NSwgMHg2REMyLCAweDFGNjEsDQotICAgIDB4NkRDNCwgMHgwQjBELCAweDZEQzUsIDB4MEIwMSwgMHg2REM2LCAweDBCMEMsIDB4NkRDNywgMHgwQUY3LA0KLSAgICAweDZEQzgsIDB4MUY1MSwgMHg2REM5LCAweDFGNjMsIDB4NkRDQSwgMHgxRjVCLCAweDZEQ0IsIDB4MEFGOCwNCi0gICAgMHg2RENDLCAweDBBRjIsIDB4NkRDRCwgMHgxRjY5LCAweDZEQ0YsIDB4MUY2MiwgMHg2REQwLCAweDFGNjQsDQotICAgIDB4NkREMSwgMHgwQUZBLCAweDZERDIsIDB4MEIwMiwgMHg2REQzLCAweDFGNjYsIDB4NkRENCwgMHgxRjRGLA0KLSAgICAweDZERDUsIDB4MUY2MCwgMHg2REQ2LCAweDFGNTQsIDB4NkRENywgMHgxRjY4LCAweDZERDgsIDB4MEIwNywNCi0gICAgMHg2REQ5LCAweDBBRUYsIDB4NkREQSwgMHgwQjA1LCAweDZEREIsIDB4MUY1OSwgMHg2RERDLCAweDFGNTcsDQotICAgIDB4NkRERCwgMHgxRjU4LCAweDZEREUsIDB4MEFGQywgMHg2RERGLCAweDFGNTMsIDB4NkRFMCwgMHgxRjUyLA0KLSAgICAweDZERTEsIDB4MEFGMSwgMHg2REUyLCAweDFGNEMsIDB4NkRFMywgMHgxRjZBLCAweDZERTQsIDB4MEFGMywNCi0gICAgMHg2REU1LCAweDFGNTYsIDB4NkRFNiwgMHgwQjExLCAweDZERTgsIDB4MEIwQiwgMHg2REU5LCAweDFGNEIsDQotICAgIDB4NkRFQSwgMHgwQjA4LCAweDZERUIsIDB4MEIwNiwgMHg2REVDLCAweDBCMEYsIDB4NkRFRCwgMHgxRjVELA0KLSAgICAweDZERUUsIDB4MEIwQSwgMHg2REVGLCAweDFEMDIsIDB4NkRGMCwgMHgxRjVFLCAweDZERjEsIDB4MEIwOSwNCi0gICAgMHg2REYyLCAweDFGNjUsIDB4NkRGMywgMHgwQUVFLCAweDZERjQsIDB4MUY1QSwgMHg2REY1LCAweDBCMDAsDQotICAgIDB4NkRGNiwgMHgxRjRFLCAweDZERjcsIDB4MEFGRiwgMHg2REY5LCAweDBBRkQsIDB4NkRGQSwgMHgwQUY1LA0KLSAgICAweDZERkIsIDB4MEFGNCwgMHg2REZDLCAweDIxQkYsIDB4NkRGRCwgMHgxRjY3LCAweDZFMDAsIDB4MUY1MCwNCi0gICAgMHg2RTAzLCAweDIxRDQsIDB4NkUwNSwgMHgwQUY2LCAweDZFMTksIDB4MENDMSwgMHg2RTFBLCAweDBCMDMsDQotICAgIDB4NkUxQiwgMHgwQ0FGLCAweDZFMUMsIDB4MjFDRSwgMHg2RTFELCAweDBDQkQsIDB4NkUxRiwgMHgyMUMyLA0KLSAgICAweDZFMjAsIDB4MENBQywgMHg2RTIxLCAweDBDQTgsIDB4NkUyMiwgMHgyMUUwLCAweDZFMjMsIDB4MENBRSwNCi0gICAgMHg2RTI0LCAweDBDQjIsIDB4NkUyNSwgMHgwQ0FELCAweDZFMjYsIDB4MENCNiwgMHg2RTI3LCAweDIxRTQsDQotICAgIDB4NkUyOCwgMHgyMURCLCAweDZFMkIsIDB4MjFDOSwgMHg2RTJDLCAweDBDQkIsIDB4NkUyRCwgMHgwQ0I1LA0KLSAgICAweDZFMkUsIDB4MjFENSwgMHg2RTJGLCAweDBDQTUsIDB4NkUzMCwgMHgyMUUxLCAweDZFMzEsIDB4MjFEQSwNCi0gICAgMHg2RTMyLCAweDBDQTksIDB4NkUzMywgMHgyMUNGLCAweDZFMzQsIDB4MENCOCwgMHg2RTM1LCAweDIxRUMsDQotICAgIDB4NkUzNiwgMHgyMUVELCAweDZFMzgsIDB4MENBNiwgMHg2RTM5LCAweDIxREYsIDB4NkUzQSwgMHgwQ0JBLA0KLSAgICAweDZFM0IsIDB4MjFEMywgMHg2RTNDLCAweDIxQzUsIDB4NkUzRCwgMHgyMUM2LCAweDZFM0UsIDB4MENCRSwNCi0gICAgMHg2RTNGLCAweDIxQ0EsIDB4NkU0MCwgMHgyMUQxLCAweDZFNDEsIDB4MjFDQiwgMHg2RTQzLCAweDBDQkMsDQotICAgIDB4NkU0NCwgMHgwQ0M0LCAweDZFNDUsIDB4MjFDNywgMHg2RTQ2LCAweDIxQzAsIDB4NkU0NywgMHgyMUMxLA0KLSAgICAweDZFNDksIDB4MjFDMywgMHg2RTRBLCAweDBDQUIsIDB4NkU0QiwgMHgyMUQwLCAweDZFNEQsIDB4MENCOSwNCi0gICAgMHg2RTRFLCAweDBDQzIsIDB4NkU1MSwgMHgyMUQyLCAweDZFNTIsIDB4MjFFQSwgMHg2RTUzLCAweDIxRTIsDQotICAgIDB4NkU1NCwgMHgwQ0E3LCAweDZFNTUsIDB4MjFFOCwgMHg2RTU2LCAweDBDQjMsIDB4NkU1OCwgMHgwQ0IxLA0KLSAgICAweDZFNUEsIDB4MjFFRSwgMHg2RTVCLCAweDBDQjAsIDB4NkU1QywgMHgyMUQ4LCAweDZFNUQsIDB4MjFDQywNCi0gICAgMHg2RTVFLCAweDIxRDYsIDB4NkU1RiwgMHgwQ0M3LCAweDZFNjAsIDB4MjFEQywgMHg2RTYxLCAweDIxRDksDQotICAgIDB4NkU2MiwgMHgyMUM4LCAweDZFNjMsIDB4MENDMywgMHg2RTY0LCAweDIxRTYsIDB4NkU2NSwgMHgyMUUzLA0KLSAgICAweDZFNjYsIDB4MjFFQiwgMHg2RTY3LCAweDBDQUEsIDB4NkU2OCwgMHgyMUQ3LCAweDZFNjksIDB4MENDNiwNCi0gICAgMHg2RTZCLCAweDIxREUsIDB4NkU2RSwgMHgwQ0I0LCAweDZFNkYsIDB4MENCNywgMHg2RTcxLCAweDIxREQsDQotICAgIDB4NkU3MiwgMHgwQ0M1LCAweDZFNzMsIDB4MjFDRCwgMHg2RTc0LCAweDFGNDksIDB4NkU3NywgMHgyMUU3LA0KLSAgICAweDZFNzgsIDB4MjFFNSwgMHg2RTc5LCAweDIxRTksIDB4NkU4OCwgMHgyMUM0LCAweDZFODksIDB4MENDMCwNCi0gICAgMHg2RThELCAweDI0NkMsIDB4NkU4RSwgMHgyNDZCLCAweDZFOEYsIDB4MjQ1MSwgMHg2RTkwLCAweDBFNTUsDQotICAgIDB4NkU5MiwgMHgyNDZBLCAweDZFOTMsIDB4MjQ1NCwgMHg2RTk0LCAweDI0NTUsIDB4NkU5NiwgMHgwRTVGLA0KLSAgICAweDZFOTcsIDB4MjQ3MywgMHg2RTk4LCAweDBFNUEsIDB4NkU5OSwgMHgyNDY5LCAweDZFOUIsIDB4MjQ0RSwNCi0gICAgMHg2RTlDLCAweDBFNjAsIDB4NkU5RCwgMHgwRTU2LCAweDZFOUUsIDB4MjQ1RCwgMHg2RTlGLCAweDI0NTMsDQotICAgIDB4NkVBMCwgMHgyNDU2LCAweDZFQTEsIDB4MjQ2RSwgMHg2RUEyLCAweDBFNTAsIDB4NkVBMywgMHgyNDc1LA0KLSAgICAweDZFQTQsIDB4MjQ2RCwgMHg2RUE1LCAweDBFNTksIDB4NkVBNiwgMHgyNDYyLCAweDZFQTcsIDB4MEU2NCwNCi0gICAgMHg2RUFBLCAweDBFNjMsIDB4NkVBQiwgMHgwRTVELCAweDZFQUUsIDB4MjQ3NCwgMHg2RUFGLCAweDBFNTEsDQotICAgIDB4NkVCMCwgMHgyNDYwLCAweDZFQjEsIDB4MjQ1NywgMHg2RUIyLCAweDI0NjQsIDB4NkVCMywgMHgyNDcwLA0KLSAgICAweDZFQjQsIDB4MEU2NSwgMHg2RUI2LCAweDBFNTMsIDB4NkVCNywgMHgyNDVGLCAweDZFQjksIDB4MjQ1OCwNCi0gICAgMHg2RUJBLCAweDBFNUMsIDB4NkVCQywgMHgwRTVCLCAweDZFQkQsIDB4MjQ1QiwgMHg2RUJFLCAweDI0NjUsDQotICAgIDB4NkVCRiwgMHgyNDZGLCAweDZFQzAsIDB4MjQ1MiwgMHg2RUMxLCAweDI0NUMsIDB4NkVDMiwgMHgwRTU0LA0KLSAgICAweDZFQzMsIDB4MjQ2NiwgMHg2RUM0LCAweDBFNjEsIDB4NkVDNSwgMHgwRTU4LCAweDZFQzYsIDB4MjQ1OSwNCi0gICAgMHg2RUM3LCAweDBFNTcsIDB4NkVDOCwgMHgyNDUwLCAweDZFQzksIDB4MjQ1RSwgMHg2RUNBLCAweDI0NzIsDQotICAgIDB4NkVDQiwgMHgwQ0JGLCAweDZFQ0MsIDB4MTAxRiwgMHg2RUNELCAweDI0NjEsIDB4NkVDRSwgMHgyNkVCLA0KLSAgICAweDZFQ0YsIDB4MjQ2MywgMHg2RUQwLCAweDI0NzEsIDB4NkVEMSwgMHgwRTVFLCAweDZFRDIsIDB4MjQ1QSwNCi0gICAgMHg2RUQzLCAweDBFNTIsIDB4NkVENCwgMHgwRTYyLCAweDZFRDUsIDB4MTE5QSwgMHg2RUQ2LCAweDI0NEYsDQotICAgIDB4NkVEOCwgMHgyNDY4LCAweDZFREMsIDB4MjQ2NywgMHg2RUVCLCAweDI3MDcsIDB4NkVFQywgMHgxMDFDLA0KLSAgICAweDZFRUQsIDB4MjZGQywgMHg2RUVFLCAweDI3MDEsIDB4NkVFRiwgMHgxMDExLCAweDZFRjEsIDB4MjZFRCwNCi0gICAgMHg2RUYyLCAweDEwMUUsIDB4NkVGNCwgMHgxMDA4LCAweDZFRjUsIDB4MjZFQywgMHg2RUY2LCAweDI3MEQsDQotICAgIDB4NkVGNywgMHgxMDIwLCAweDZFRjgsIDB4MjZGMCwgMHg2RUY5LCAweDI3MDAsIDB4NkVGQiwgMHgyNkYyLA0KLSAgICAweDZFRkMsIDB4MjcxMCwgMHg2RUZELCAweDI3MEMsIDB4NkVGRSwgMHgxMDA2LCAweDZFRkYsIDB4MTAxMCwNCi0gICAgMHg2RjAwLCAweDI5NDYsIDB4NkYwMSwgMHgxMDFELCAweDZGMDIsIDB4MTAwRSwgMHg2RjAzLCAweDI2RUUsDQotICAgIDB4NkYwNSwgMHgyNzBCLCAweDZGMDYsIDB4MTAxMiwgMHg2RjA3LCAweDI3MDgsIDB4NkYwOCwgMHgyNzE1LA0KLSAgICAweDZGMDksIDB4MjZGNCwgMHg2RjBBLCAweDI2RkQsIDB4NkYwRCwgMHgyNzEzLCAweDZGMEUsIDB4MjcwOSwNCi0gICAgMHg2RjBGLCAweDEwMEQsIDB4NkYxMiwgMHgyNkZCLCAweDZGMTMsIDB4MTAwNywgMHg2RjE0LCAweDEwMDUsDQotICAgIDB4NkYxNSwgMHgxMDE3LCAweDZGMTgsIDB4MjZGOSwgMHg2RjE5LCAweDI2RjYsIDB4NkYxQSwgMHgyNkY3LA0KLSAgICAweDZGMUMsIDB4MjcwRiwgMHg2RjFFLCAweDI3MTQsIDB4NkYxRiwgMHgyNzEyLCAweDZGMjAsIDB4MTAwQiwNCi0gICAgMHg2RjIxLCAweDI3MTYsIDB4NkYyMiwgMHgxMDBGLCAweDZGMjMsIDB4MTAxNiwgMHg2RjI1LCAweDI2RUYsDQotICAgIDB4NkYyNiwgMHgyOTJFLCAweDZGMjcsIDB4MjZGOCwgMHg2RjI5LCAweDEwMDksIDB4NkYyQSwgMHgxMDFCLA0KLSAgICAweDZGMkIsIDB4MTAxOCwgMHg2RjJDLCAweDEwMEMsIDB4NkYyRCwgMHgyNzAyLCAweDZGMkUsIDB4MjZGMywNCi0gICAgMHg2RjJGLCAweDEwMTksIDB4NkYzMCwgMHgyNzA0LCAweDZGMzEsIDB4MTAxMywgMHg2RjMyLCAweDEwMTUsDQotICAgIDB4NkYzMywgMHgxMDA0LCAweDZGMzUsIDB4MjcwNiwgMHg2RjM2LCAweDI2RkUsIDB4NkYzNywgMHgyNkYxLA0KLSAgICAweDZGMzgsIDB4MTAxNCwgMHg2RjM5LCAweDI3MEUsIDB4NkYzQSwgMHgyNzExLCAweDZGM0IsIDB4MjZGQSwNCi0gICAgMHg2RjNDLCAweDI3MDUsIDB4NkYzRSwgMHgxMDBBLCAweDZGM0YsIDB4MTE4OSwgMHg2RjQwLCAweDI3MDMsDQotICAgIDB4NkY0MSwgMHgyOTJELCAweDZGNDMsIDB4MjcwQSwgMHg2RjRFLCAweDI2RjUsIDB4NkY0RiwgMHgyOTM3LA0KLSAgICAweDZGNTAsIDB4Mjk0MSwgMHg2RjUxLCAweDExOEMsIDB4NkY1MiwgMHgyOTQwLCAweDZGNTMsIDB4Mjk0QywNCi0gICAgMHg2RjU0LCAweDExOEUsIDB4NkY1NSwgMHgyOTNFLCAweDZGNTcsIDB4Mjk0MiwgMHg2RjU4LCAweDExOTksDQotICAgIDB4NkY1QSwgMHgyOTM5LCAweDZGNUIsIDB4MTE5MSwgMHg2RjVELCAweDI5NDUsIDB4NkY1RSwgMHgyQjlBLA0KLSAgICAweDZGNUYsIDB4MTE5RCwgMHg2RjYwLCAweDExOUMsIDB4NkY2MSwgMHgyOTQ3LCAweDZGNjIsIDB4MjkzNiwNCi0gICAgMHg2RjYzLCAweDI5NTEsIDB4NkY2NCwgMHgxMTk3LCAweDZGNjYsIDB4MTE4RCwgMHg2RjY3LCAweDI5NEEsDQotICAgIDB4NkY2OSwgMHgyOTRFLCAweDZGNkEsIDB4Mjk1MywgMHg2RjZCLCAweDI5NDgsIDB4NkY2QywgMHgyOTNDLA0KLSAgICAweDZGNkQsIDB4MTE5MCwgMHg2RjZFLCAweDExOTMsIDB4NkY2RiwgMHgxMTlCLCAweDZGNzAsIDB4MTE5NiwNCi0gICAgMHg2RjcyLCAweDI5M0YsIDB4NkY3MywgMHgyNkZGLCAweDZGNzYsIDB4MjkzQiwgMHg2Rjc3LCAweDI5NTIsDQotICAgIDB4NkY3OCwgMHgxMTkyLCAweDZGN0EsIDB4MTE5NSwgMHg2RjdCLCAweDI5NTQsIDB4NkY3QywgMHgxMThBLA0KLSAgICAweDZGN0QsIDB4Mjk0OSwgMHg2RjdFLCAweDI5MkYsIDB4NkY3RiwgMHgyOTRGLCAweDZGODAsIDB4MTNGQywNCi0gICAgMHg2RjgyLCAweDI5M0QsIDB4NkY4NCwgMHgxMThCLCAweDZGODUsIDB4MjkzOCwgMHg2Rjg2LCAweDExOEYsDQotICAgIDB4NkY4NywgMHgyOTMwLCAweDZGODgsIDB4MTAxQSwgMHg2Rjg5LCAweDI5MzQsIDB4NkY4QiwgMHgyOTRELA0KLSAgICAweDZGOEMsIDB4MjkzNSwgMHg2RjhELCAweDI5MzMsIDB4NkY4RSwgMHgxMTk0LCAweDZGOTAsIDB4Mjk0QiwNCi0gICAgMHg2RjkyLCAweDI5MzIsIDB4NkY5MywgMHgyOTQ0LCAweDZGOTQsIDB4Mjk0MywgMHg2Rjk1LCAweDI5NTAsDQotICAgIDB4NkY5NiwgMHgyOTNBLCAweDZGOTcsIDB4MTE5OCwgMHg2RjlFLCAweDJCOUQsIDB4NkZBMCwgMHgxMkVCLA0KLSAgICAweDZGQTEsIDB4MTJFMSwgMHg2RkEyLCAweDJCQTksIDB4NkZBMywgMHgyQjk1LCAweDZGQTQsIDB4MTJFMywNCi0gICAgMHg2RkE1LCAweDJCQTEsIDB4NkZBNiwgMHgxMkVBLCAweDZGQTcsIDB4MTJFNSwgMHg2RkE4LCAweDJCOUYsDQotICAgIDB4NkZBOSwgMHgyRDhFLCAweDZGQUEsIDB4MkJBNSwgMHg2RkFCLCAweDJCQUIsIDB4NkZBQywgMHgyQkE0LA0KLSAgICAweDZGQUQsIDB4MkI5MywgMHg2RkFFLCAweDJCQTIsIDB4NkZBRiwgMHgyQkFELCAweDZGQjAsIDB4MkJBRiwNCi0gICAgMHg2RkIxLCAweDEyRTAsIDB4NkZCMiwgMHgyQkFFLCAweDZGQjMsIDB4MTJFNiwgMHg2RkI0LCAweDEyRUMsDQotICAgIDB4NkZCNiwgMHgxMkU5LCAweDZGQjgsIDB4MkJBOCwgMHg2RkI5LCAweDEyRTgsIDB4NkZCQSwgMHgyQkEzLA0KLSAgICAweDZGQkMsIDB4MkI5NywgMHg2RkJELCAweDJCOUMsIDB4NkZCRiwgMHgyQkE3LCAweDZGQzAsIDB4MTJFNywNCi0gICAgMHg2RkMxLCAweDEyRTQsIDB4NkZDMiwgMHgxMkRGLCAweDZGQzMsIDB4MTJFMiwgMHg2RkM0LCAweDJCOUIsDQotICAgIDB4NkZDNiwgMHgyOTMxLCAweDZGQzcsIDB4MkI5NiwgMHg2RkM4LCAweDJCOTksIDB4NkZDOSwgMHgyQkFBLA0KLSAgICAweDZGQ0EsIDB4MkI5RSwgMHg2RkNCLCAweDJCOTQsIDB4NkZDQywgMHgyRDhELCAweDZGQ0QsIDB4MkJBQywNCi0gICAgMHg2RkNFLCAweDJCOTgsIDB4NkZDRiwgMHgyQkE2LCAweDZGRDQsIDB4MkQ5MCwgMHg2RkQ1LCAweDE0MDAsDQotICAgIDB4NkZEOCwgMHgxM0Y0LCAweDZGREIsIDB4MTNGOCwgMHg2RkRDLCAweDJEOTIsIDB4NkZERCwgMHgyRDk4LA0KLSAgICAweDZGREUsIDB4MkQ5NiwgMHg2RkRGLCAweDEzRjYsIDB4NkZFMCwgMHgxM0Y3LCAweDZGRTEsIDB4MTNGRSwNCi0gICAgMHg2RkUyLCAweDJEOTksIDB4NkZFMywgMHgyRDkxLCAweDZGRTQsIDB4MTNGOSwgMHg2RkU2LCAweDJEOTUsDQotICAgIDB4NkZFNywgMHgyRDk0LCAweDZGRTgsIDB4MkQ5QSwgMHg2RkU5LCAweDEzRkYsIDB4NkZFQiwgMHgxM0ZBLA0KLSAgICAweDZGRUMsIDB4MTNGRCwgMHg2RkVELCAweDJEOTMsIDB4NkZFRSwgMHgxNDAxLCAweDZGRUYsIDB4MTNGQiwNCi0gICAgMHg2RkYwLCAweDE0MDIsIDB4NkZGMSwgMHgxM0Y1LCAweDZGRjIsIDB4MkQ5NywgMHg2RkY0LCAweDJEOEYsDQotICAgIDB4NkZGNywgMHgyRjRFLCAweDZGRkEsIDB4MTRFQiwgMHg2RkZCLCAweDJGNEIsIDB4NkZGQywgMHgyRjRELA0KLSAgICAweDZGRkUsIDB4MTRFOSwgMHg2RkZGLCAweDJGNDksIDB4NzAwMCwgMHgyRjRBLCAweDcwMDEsIDB4MkY0NSwNCi0gICAgMHg3MDA0LCAweDJCQTAsIDB4NzAwNSwgMHgyRjQ2LCAweDcwMDYsIDB4MTRFQSwgMHg3MDA3LCAweDJGNDIsDQotICAgIDB4NzAwOSwgMHgxNEU3LCAweDcwMEEsIDB4MkY0RiwgMHg3MDBCLCAweDE0RTgsIDB4NzAwQywgMHgyRjQzLA0KLSAgICAweDcwMEQsIDB4MkY0NCwgMHg3MDBFLCAweDJGNDgsIDB4NzAwRiwgMHgxNEVELCAweDcwMTEsIDB4MTRFQywNCi0gICAgMHg3MDE0LCAweDJGNDcsIDB4NzAxNSwgMHgxNThGLCAweDcwMTYsIDB4MzBBRCwgMHg3MDE3LCAweDMwQjMsDQotICAgIDB4NzAxOCwgMHgxNTkwLCAweDcwMTksIDB4MzBBQSwgMHg3MDFBLCAweDE1OEQsIDB4NzAxQiwgMHgxNThBLA0KLSAgICAweDcwMUMsIDB4MzBCNSwgMHg3MDFELCAweDE1OEUsIDB4NzAxRiwgMHgxNThCLCAweDcwMjAsIDB4MzBBQywNCi0gICAgMHg3MDIxLCAweDMwQUYsIDB4NzAyMiwgMHgzMEIwLCAweDcwMjMsIDB4MzBCMSwgMHg3MDI0LCAweDMwQjQsDQotICAgIDB4NzAyNiwgMHgyRjRDLCAweDcwMjcsIDB4MzBBQiwgMHg3MDI4LCAweDE1OEMsIDB4NzAyOSwgMHgzMEIyLA0KLSAgICAweDcwMkEsIDB4MzFFRiwgMHg3MDJCLCAweDMwQUUsIDB4NzAyRiwgMHgzMUU2LCAweDcwMzAsIDB4MTYxRCwNCi0gICAgMHg3MDMxLCAweDMxRTksIDB4NzAzMiwgMHgxNjFFLCAweDcwMzMsIDB4MzFGMiwgMHg3MDM0LCAweDMxRTgsDQotICAgIDB4NzAzNSwgMHgzMUU1LCAweDcwMzcsIDB4MzFFNywgMHg3MDM4LCAweDMxRUIsIDB4NzAzOSwgMHgzMUVFLA0KLSAgICAweDcwM0EsIDB4MzFFRCwgMHg3MDNCLCAweDMxRjEsIDB4NzAzQywgMHgzMUU0LCAweDcwM0UsIDB4MTYxQywNCi0gICAgMHg3MDNGLCAweDMxRUMsIDB4NzA0MCwgMHgzMUYwLCAweDcwNDEsIDB4MzFGMywgMHg3MDQyLCAweDMxRUEsDQotICAgIDB4NzA0MywgMHgzMkQ4LCAweDcwNDQsIDB4MzJEOSwgMHg3MDQ1LCAweDMyREQsIDB4NzA0NiwgMHgzMkRFLA0KLSAgICAweDcwNDgsIDB4MzJEQiwgMHg3MDQ5LCAweDMyREMsIDB4NzA0QSwgMHgzMkRBLCAweDcwNEMsIDB4MTY3QSwNCi0gICAgMHg3MDUxLCAweDE2QzgsIDB4NzA1MiwgMHgzMzhDLCAweDcwNTUsIDB4MzM4OSwgMHg3MDU2LCAweDMzOEEsDQotICAgIDB4NzA1NywgMHgzMzhCLCAweDcwNTgsIDB4MTZDOSwgMHg3MDVBLCAweDM0MjMsIDB4NzA1QiwgMHgzNDIyLA0KLSAgICAweDcwNUQsIDB4MzQ4QSwgMHg3MDVFLCAweDE3MjIsIDB4NzA1RiwgMHgzNDg4LCAweDcwNjAsIDB4MzQ4QiwNCi0gICAgMHg3MDYxLCAweDM0ODksIDB4NzA2MiwgMHgzNEQwLCAweDcwNjMsIDB4MTc0NCwgMHg3MDY0LCAweDE3NTIsDQotICAgIDB4NzA2NSwgMHgzNTFDLCAweDcwNjYsIDB4MzUwNiwgMHg3MDY4LCAweDM1MUIsIDB4NzA2OSwgMHgzNTQ3LA0KLSAgICAweDcwNkEsIDB4MzU0OCwgMHg3MDZCLCAweDAyRTYsIDB4NzA3MCwgMHgwM0YyLCAweDcwNzEsIDB4MTgwQSwNCi0gICAgMHg3MDc0LCAweDE4QzMsIDB4NzA3NiwgMHgwNEU2LCAweDcwNzgsIDB4MDRFOSwgMHg3MDdBLCAweDE4QzQsDQotICAgIDB4NzA3QywgMHgwNEU3LCAweDcwN0QsIDB4MDRFOCwgMHg3MDgyLCAweDE5RjcsIDB4NzA4MywgMHgxOUY5LA0KLSAgICAweDcwODQsIDB4MTlGNCwgMHg3MDg1LCAweDE5RjEsIDB4NzA4NiwgMHgxOUYzLCAweDcwOEEsIDB4MDY0MywNCi0gICAgMHg3MDhFLCAweDA2NDEsIDB4NzA5MSwgMHgxOUY1LCAweDcwOTIsIDB4MDY0MiwgMHg3MDkzLCAweDE5RjIsDQotICAgIDB4NzA5NCwgMHgxOUVGLCAweDcwOTUsIDB4MDY0MCwgMHg3MDk2LCAweDE5RjYsIDB4NzA5OCwgMHgxOUYwLA0KLSAgICAweDcwOTksIDB4MDY0NCwgMHg3MDlBLCAweDE5RjgsIDB4NzA5RiwgMHgxQjY2LCAweDcwQTEsIDB4MUI2QSwNCi0gICAgMHg3MEE0LCAweDA3OTAsIDB4NzBBOSwgMHgxQjZELCAweDcwQUIsIDB4MDc4OCwgMHg3MEFDLCAweDA3OEIsDQotICAgIDB4NzBBRCwgMHgwNzhELCAweDcwQUUsIDB4MDc4RiwgMHg3MEFGLCAweDA3OEMsIDB4NzBCMCwgMHgxQjY5LA0KLSAgICAweDcwQjEsIDB4MUI2OCwgMHg3MEIzLCAweDA3OEEsIDB4NzBCNCwgMHgxQjZCLCAweDcwQjUsIDB4MUI2QywNCi0gICAgMHg3MEI3LCAweDFCNjUsIDB4NzBCOCwgMHgwNzhFLCAweDcwQkEsIDB4MDc4OSwgMHg3MEJFLCAweDFCNjcsDQotICAgIDB4NzBDNSwgMHgxRDI3LCAweDcwQzYsIDB4MUQyOCwgMHg3MEM3LCAweDFEMjksIDB4NzBDOCwgMHgwOTIxLA0KLSAgICAweDcwQ0EsIDB4MDkxRCwgMHg3MENCLCAweDFEMUUsIDB4NzBDRCwgMHgxRDI2LCAweDcwQ0UsIDB4MUQyQiwNCi0gICAgMHg3MENGLCAweDA5MjIsIDB4NzBEMSwgMHgxRDFDLCAweDcwRDIsIDB4MUQyMiwgMHg3MEQzLCAweDFEMUIsDQotICAgIDB4NzBENCwgMHgxRDI1LCAweDcwRDcsIDB4MUQyMSwgMHg3MEQ4LCAweDA5MUUsIDB4NzBEOSwgMHgwOTIwLA0KLSAgICAweDcwREEsIDB4MUQyQSwgMHg3MERDLCAweDFEMUEsIDB4NzBERCwgMHgxRDFELCAweDcwREUsIDB4MUQyMywNCi0gICAgMHg3MEUwLCAweDFEMjQsIDB4NzBFMSwgMHgxRDJDLCAweDcwRTIsIDB4MUQyMCwgMHg3MEU0LCAweDA5MUYsDQotICAgIDB4NzBFRiwgMHgwQjE2LCAweDcwRjAsIDB4MUY3MiwgMHg3MEYzLCAweDFGNzQsIDB4NzBGNCwgMHgxRjcwLA0KLSAgICAweDcwRjYsIDB4MUY3QywgMHg3MEY3LCAweDFGNkUsIDB4NzBGOCwgMHgxRjdCLCAweDcwRjksIDB4MEIxMiwNCi0gICAgMHg3MEZBLCAweDFGNkMsIDB4NzBGQiwgMHgyMUYyLCAweDcwRkMsIDB4MUY3NiwgMHg3MEZELCAweDBCMTUsDQotICAgIDB4NzBGRiwgMHgxRjc3LCAweDcxMDAsIDB4MUY3QSwgMHg3MTAyLCAweDFGN0UsIDB4NzEwNCwgMHgxRjczLA0KLSAgICAweDcxMDYsIDB4MUY3OCwgMHg3MTA5LCAweDBCMTMsIDB4NzEwQSwgMHgwQjE0LCAweDcxMEIsIDB4MUY3RCwNCi0gICAgMHg3MTBDLCAweDFGNzEsIDB4NzEwRCwgMHgxRjZELCAweDcxMEUsIDB4MUY3RiwgMHg3MTEwLCAweDFGNzUsDQotICAgIDB4NzExMywgMHgxRjc5LCAweDcxMTcsIDB4MUY2RiwgMHg3MTE5LCAweDBDQzgsIDB4NzExQSwgMHgwQ0M5LA0KLSAgICAweDcxMUIsIDB4MjFGQywgMHg3MTFDLCAweDBDQ0YsIDB4NzExRSwgMHgyMUYwLCAweDcxMUYsIDB4MjFGOSwNCi0gICAgMHg3MTIwLCAweDIxRUYsIDB4NzEyMSwgMHgwQ0NDLCAweDcxMjIsIDB4MjFGNywgMHg3MTIzLCAweDIxRjUsDQotICAgIDB4NzEyNSwgMHgyMUY2LCAweDcxMjYsIDB4MENDQSwgMHg3MTI4LCAweDIxRkEsIDB4NzEyRSwgMHgyMUYzLA0KLSAgICAweDcxMkYsIDB4MjFGMSwgMHg3MTMwLCAweDBDQ0IsIDB4NzEzMSwgMHgyMUY0LCAweDcxMzIsIDB4MjFGOCwNCi0gICAgMHg3MTM2LCAweDBDQ0QsIDB4NzEzQSwgMHgyMUZCLCAweDcxNDEsIDB4MjQ3QiwgMHg3MTQyLCAweDI0ODIsDQotICAgIDB4NzE0MywgMHgyNDg0LCAweDcxNDQsIDB4MjQ4QSwgMHg3MTQ2LCAweDBFNzIsIDB4NzE0NywgMHgyNDc2LA0KLSAgICAweDcxNDksIDB4MEU2QSwgMHg3MTRCLCAweDI0ODUsIDB4NzE0QywgMHgwRTZGLCAweDcxNEQsIDB4MjQ4QiwNCi0gICAgMHg3MTRFLCAweDBFNjYsIDB4NzE1MCwgMHgyNDg4LCAweDcxNTIsIDB4MjQ3OCwgMHg3MTUzLCAweDI0ODksDQotICAgIDB4NzE1NCwgMHgyNDc3LCAweDcxNTYsIDB4MEU3NCwgMHg3MTU4LCAweDI0ODMsIDB4NzE1OSwgMHgwRTY3LA0KLSAgICAweDcxNUEsIDB4MjQ4QywgMHg3MTVDLCAweDBFNkMsIDB4NzE1RCwgMHgyNDdDLCAweDcxNUUsIDB4MEU3MSwNCi0gICAgMHg3MTVGLCAweDI0ODcsIDB4NzE2MCwgMHgyNDdBLCAweDcxNjEsIDB4MjQ4MSwgMHg3MTYyLCAweDI0N0QsDQotICAgIDB4NzE2MywgMHgyNDc5LCAweDcxNjQsIDB4MEU2OSwgMHg3MTY1LCAweDBFNzAsIDB4NzE2NiwgMHgwRTZFLA0KLSAgICAweDcxNjcsIDB4MEU2QiwgMHg3MTY4LCAweDBFNzMsIDB4NzE2OSwgMHgwRTY4LCAweDcxNkEsIDB4MjQ4MCwNCi0gICAgMHg3MTZDLCAweDBFNkQsIDB4NzE2RSwgMHgwQ0NFLCAweDcxNzAsIDB4MjQ4NiwgMHg3MTcyLCAweDI0N0UsDQotICAgIDB4NzE3OCwgMHgyNDdGLCAweDcxN0IsIDB4MjcxRSwgMHg3MTdELCAweDEwMjMsIDB4NzE4MCwgMHgyNzFBLA0KLSAgICAweDcxODEsIDB4MjcyMCwgMHg3MTgyLCAweDI3MUMsIDB4NzE4NCwgMHgxMDI1LCAweDcxODUsIDB4MjcxQiwNCi0gICAgMHg3MTg2LCAweDI3MUYsIDB4NzE4NywgMHgyNzE3LCAweDcxODksIDB4MjcxOSwgMHg3MThBLCAweDEwMjQsDQotICAgIDB4NzE4RiwgMHgyNzFELCAweDcxOTAsIDB4MjcxOCwgMHg3MTkyLCAweDEwMjYsIDB4NzE5NCwgMHgxMDIxLA0KLSAgICAweDcxOTcsIDB4MjcyMSwgMHg3MTk5LCAweDEwMjIsIDB4NzE5QSwgMHgyOTVBLCAweDcxOUIsIDB4Mjk1NywNCi0gICAgMHg3MTlDLCAweDI5NjMsIDB4NzE5RCwgMHgyOTVELCAweDcxOUUsIDB4Mjk1RiwgMHg3MTlGLCAweDExOUUsDQotICAgIDB4NzFBMCwgMHgyOTU5LCAweDcxQTEsIDB4Mjk2MSwgMHg3MUE0LCAweDI5NjAsIDB4NzFBNSwgMHgyOTVFLA0KLSAgICAweDcxQTcsIDB4Mjk2NCwgMHg3MUE4LCAweDExQTEsIDB4NzFBOSwgMHgyOTVCLCAweDcxQUEsIDB4Mjk2MiwNCi0gICAgMHg3MUFDLCAweDExOUYsIDB4NzFBRiwgMHgyOTU2LCAweDcxQjAsIDB4Mjk1OCwgMHg3MUIxLCAweDExQTAsDQotICAgIDB4NzFCMiwgMHgyOTU1LCAweDcxQjMsIDB4Mjk2NSwgMHg3MUI1LCAweDI5NUMsIDB4NzFCOCwgMHgyQkIzLA0KLSAgICAweDcxQjksIDB4MTJGMywgMHg3MUJDLCAweDJCQkUsIDB4NzFCRCwgMHgyQkJDLCAweDcxQkUsIDB4MTJFRCwNCi0gICAgMHg3MUJGLCAweDJCQjIsIDB4NzFDMCwgMHgyQkI1LCAweDcxQzEsIDB4MkJCNiwgMHg3MUMyLCAweDJCQjEsDQotICAgIDB4NzFDMywgMHgxMkY3LCAweDcxQzQsIDB4MTJGOCwgMHg3MUM1LCAweDJCQjAsIDB4NzFDNiwgMHgyQkJGLA0KLSAgICAweDcxQzcsIDB4MkJCQSwgMHg3MUM4LCAweDEyRjEsIDB4NzFDOSwgMHgxMkVFLCAweDcxQ0EsIDB4MkJCOSwNCi0gICAgMHg3MUNCLCAweDJCQjcsIDB4NzFDRSwgMHgxMkY0LCAweDcxQ0YsIDB4MkJCQiwgMHg3MUQwLCAweDEyRUYsDQotICAgIDB4NzFEMiwgMHgxMkYwLCAweDcxRDQsIDB4MkJCOCwgMHg3MUQ1LCAweDEyRjIsIDB4NzFENiwgMHgyQkI0LA0KLSAgICAweDcxRDgsIDB4MkJCRCwgMHg3MUQ5LCAweDEyRjUsIDB4NzFEQSwgMHgyQkMwLCAweDcxREIsIDB4MkJDMSwNCi0gICAgMHg3MURDLCAweDEyRjYsIDB4NzFERiwgMHgxNDA0LCAweDcxRTAsIDB4MTQwQiwgMHg3MUUxLCAweDJEOUIsDQotICAgIDB4NzFFMiwgMHgyREExLCAweDcxRTQsIDB4MkQ5RiwgMHg3MUU1LCAweDE0MDcsIDB4NzFFNiwgMHgxNDA2LA0KLSAgICAweDcxRTcsIDB4MTQwMywgMHg3MUU4LCAweDJEOUQsIDB4NzFFQywgMHgxNDA5LCAweDcxRUQsIDB4MTQwOCwNCi0gICAgMHg3MUVFLCAweDE0MDUsIDB4NzFGMCwgMHgyREEwLCAweDcxRjEsIDB4MkQ5QywgMHg3MUYyLCAweDJEOUUsDQotICAgIDB4NzFGNCwgMHgxNDBBLCAweDcxRjgsIDB4MTRGMSwgMHg3MUY5LCAweDJGNTIsIDB4NzFGQiwgMHgxNEVFLA0KLSAgICAweDcxRkMsIDB4MTRFRiwgMHg3MUZELCAweDJGNTQsIDB4NzFGRSwgMHgxNEYwLCAweDcxRkYsIDB4MkY1MSwNCi0gICAgMHg3MjAxLCAweDJGNTAsIDB4NzIwMiwgMHgzMEI5LCAweDcyMDMsIDB4MkY1MywgMHg3MjA1LCAweDMwQkEsDQotICAgIDB4NzIwNiwgMHgxNTkxLCAweDcyMDcsIDB4MzBCOCwgMHg3MjBBLCAweDMwQjcsIDB4NzIwQywgMHgzMEI2LA0KLSAgICAweDcyMEQsIDB4MTU5MiwgMHg3MjEwLCAweDE2MUYsIDB4NzIxMywgMHgzMUY0LCAweDcyMTQsIDB4MzFGNSwNCi0gICAgMHg3MjE5LCAweDMyRTEsIDB4NzIxQSwgMHgzMkUwLCAweDcyMUIsIDB4MTY3QiwgMHg3MjFELCAweDMyREYsDQotICAgIDB4NzIxRSwgMHgzMzhELCAweDcyMUYsIDB4MzM4RSwgMHg3MjIyLCAweDM0MjQsIDB4NzIyMywgMHgzNDhDLA0KLSAgICAweDcyMjYsIDB4MzREMSwgMHg3MjI3LCAweDM1MzUsIDB4NzIyOCwgMHgxNzY2LCAweDcyMjksIDB4MzU0OSwNCi0gICAgMHg3MjJBLCAweDAyRTcsIDB4NzIyQywgMHgwNjQ1LCAweDcyMkQsIDB4MDY0NiwgMHg3MjMwLCAweDA3OTEsDQotICAgIDB4NzIzNSwgMHgxNDBDLCAweDcyMzYsIDB4MDJFOCwgMHg3MjM4LCAweDA2NDcsIDB4NzIzOSwgMHgwOTIzLA0KLSAgICAweDcyM0EsIDB4MEU3NSwgMHg3MjNCLCAweDAyRTksIDB4NzIzRCwgMHgwQjE3LCAweDcyM0UsIDB4MTAyNywNCi0gICAgMHg3MjNGLCAweDE3OEQsIDB4NzI0MSwgMHgxQjZFLCAweDcyNDIsIDB4MUQyRCwgMHg3MjQ0LCAweDI3MjIsDQotICAgIDB4NzI0NiwgMHgxNDBELCAweDcyNDcsIDB4MDJFQSwgMHg3MjQ4LCAweDA2NDgsIDB4NzI0OSwgMHgxQjZGLA0KLSAgICAweDcyNEEsIDB4MUI3MCwgMHg3MjRCLCAweDIxRkQsIDB4NzI0QywgMHgwQ0QwLCAweDcyNEYsIDB4MjQ4RCwNCi0gICAgMHg3MjUyLCAweDBFNzYsIDB4NzI1MywgMHgyNzIzLCAweDcyNTYsIDB4MTFBMiwgMHg3MjU4LCAweDE1OTMsDQotICAgIDB4NzI1OSwgMHgwMkVCLCAweDcyNUEsIDB4MjFGRSwgMHg3MjVCLCAweDAyRUMsIDB4NzI1RCwgMHgwM0Y0LA0KLSAgICAweDcyNUUsIDB4MTgwQiwgMHg3MjVGLCAweDAzRjMsIDB4NzI2MCwgMHgwNEVDLCAweDcyNjEsIDB4MDRFQiwNCi0gICAgMHg3MjYyLCAweDA0RUEsIDB4NzI2MywgMHgxOEM1LCAweDcyNjcsIDB4MDY0OSwgMHg3MjY5LCAweDA2NEEsDQotICAgIDB4NzI2QSwgMHgxOUZBLCAweDcyNkMsIDB4MUI3MSwgMHg3MjZFLCAweDFCNzQsIDB4NzI2RiwgMHgwNzkzLA0KLSAgICAweDcyNzAsIDB4MUI3MiwgMHg3MjcyLCAweDA3OTIsIDB4NzI3MywgMHgxQjczLCAweDcyNzQsIDB4MDc5NCwNCi0gICAgMHg3Mjc2LCAweDFEMzAsIDB4NzI3NywgMHgxRDJGLCAweDcyNzgsIDB4MUQyRSwgMHg3Mjc5LCAweDA5MjQsDQotICAgIDB4NzI3QiwgMHgxRjgxLCAweDcyN0MsIDB4MUY4MiwgMHg3MjdELCAweDBCMTgsIDB4NzI3RSwgMHgxRjgwLA0KLSAgICAweDcyN0YsIDB4MUY4MywgMHg3MjgwLCAweDBDRDIsIDB4NzI4MSwgMHgwQjE5LCAweDcyODQsIDB4MENEMSwNCi0gICAgMHg3Mjg1LCAweDIyMDIsIDB4NzI4NiwgMHgyMjAxLCAweDcyODgsIDB4MjFGRiwgMHg3Mjg5LCAweDIyMDAsDQotICAgIDB4NzI4QiwgMHgyMjAzLCAweDcyOEMsIDB4MjQ4RiwgMHg3MjhELCAweDI0OEUsIDB4NzI4RSwgMHgyNDkyLA0KLSAgICAweDcyOTAsIDB4MjQ5MSwgMHg3MjkxLCAweDI0OTAsIDB4NzI5MiwgMHgxMDI4LCAweDcyOTMsIDB4MjcyNiwNCi0gICAgMHg3Mjk1LCAweDI3MjUsIDB4NzI5NiwgMHgxMDI5LCAweDcyOTcsIDB4MjcyNCwgMHg3Mjk4LCAweDI5NjYsDQotICAgIDB4NzI5QSwgMHgyOTY3LCAweDcyOUIsIDB4MTFBMywgMHg3MjlELCAweDJCQzIsIDB4NzI5RSwgMHgyQkMzLA0KLSAgICAweDcyQTEsIDB4MzBCRiwgMHg3MkEyLCAweDE1OTQsIDB4NzJBMywgMHgzMEJFLCAweDcyQTQsIDB4MzBCRCwNCi0gICAgMHg3MkE1LCAweDMwQkIsIDB4NzJBNiwgMHgzMEJDLCAweDcyQTcsIDB4MTY3QywgMHg3MkE4LCAweDMxRjYsDQotICAgIDB4NzJBOSwgMHgzMzhGLCAweDcyQUEsIDB4MzREMiwgMHg3MkFDLCAweDAyRUQsIDB4NzJBRSwgMHgxN0FGLA0KLSAgICAweDcyQUYsIDB4MDM1NSwgMHg3MkIwLCAweDE3QjAsIDB4NzJCNCwgMHgxODBDLCAweDcyQjUsIDB4MTgwRCwNCi0gICAgMHg3MkJBLCAweDE4Q0IsIDB4NzJCRCwgMHgxOEM3LCAweDcyQkYsIDB4MThDNiwgMHg3MkMwLCAweDA2NEIsDQotICAgIDB4NzJDMSwgMHgxOENBLCAweDcyQzIsIDB4MDRFRSwgMHg3MkMzLCAweDE4QzgsIDB4NzJDNCwgMHgwNEVELA0KLSAgICAweDcyQzUsIDB4MThDQywgMHg3MkM2LCAweDE4QzksIDB4NzJDOSwgMHgxOUZFLCAweDcyQ0EsIDB4MUI3NSwNCi0gICAgMHg3MkNCLCAweDE5RkMsIDB4NzJDQywgMHgxQTAzLCAweDcyQ0UsIDB4MDY0QywgMHg3MkQwLCAweDA2NEYsDQotICAgIDB4NzJEMSwgMHgxQTA0LCAweDcyRDIsIDB4MUEwMCwgMHg3MkQ0LCAweDFBMDEsIDB4NzJENiwgMHgxOUZCLA0KLSAgICAweDcyRDcsIDB4MDY0RSwgMHg3MkQ4LCAweDE5RkQsIDB4NzJEOSwgMHgwNjRELCAweDcyREEsIDB4MUEwMiwNCi0gICAgMHg3MkRDLCAweDE5RkYsIDB4NzJERiwgMHgxQjc5LCAweDcyRTAsIDB4MDc5NiwgMHg3MkUxLCAweDA3OTcsDQotICAgIDB4NzJFMywgMHgxQjdDLCAweDcyRTQsIDB4MUI3NiwgMHg3MkU2LCAweDFCN0IsIDB4NzJFOCwgMHgxQjc3LA0KLSAgICAweDcyRTksIDB4MDc5NSwgMHg3MkVBLCAweDFCN0EsIDB4NzJFQiwgMHgxQjc4LCAweDcyRjMsIDB4MUQzNiwNCi0gICAgMHg3MkY0LCAweDFEMzMsIDB4NzJGNiwgMHgxRDM1LCAweDcyRjcsIDB4MDkyOSwgMHg3MkY4LCAweDA5MjgsDQotICAgIDB4NzJGOSwgMHgwOTI2LCAweDcyRkEsIDB4MUQzMiwgMHg3MkZCLCAweDFEMzcsIDB4NzJGQywgMHgwOTI1LA0KLSAgICAweDcyRkQsIDB4MDkyNywgMHg3MkZFLCAweDFEMzQsIDB4NzJGRiwgMHgxRjhCLCAweDczMDAsIDB4MUQzMSwNCi0gICAgMHg3MzAxLCAweDFEMzgsIDB4NzMwNywgMHgxRjg2LCAweDczMDgsIDB4MUY4QSwgMHg3MzBBLCAweDFGODksDQotICAgIDB4NzMwQiwgMHgyMjA1LCAweDczMEMsIDB4MjIxMCwgMHg3MzBGLCAweDFGOEMsIDB4NzMxMSwgMHgxRjg3LA0KLSAgICAweDczMTIsIDB4MjIwNCwgMHg3MzEzLCAweDBCMUQsIDB4NzMxNiwgMHgwQjFDLCAweDczMTcsIDB4MUY4NSwNCi0gICAgMHg3MzE4LCAweDFGODgsIDB4NzMxOSwgMHgwQjFFLCAweDczMUIsIDB4MEIxQiwgMHg3MzFDLCAweDBCMUEsDQotICAgIDB4NzMxRCwgMHgxRjg0LCAweDczMUUsIDB4MUY4RCwgMHg3MzIyLCAweDIyMDcsIDB4NzMyMywgMHgyMjBFLA0KLSAgICAweDczMjUsIDB4MENENCwgMHg3MzI2LCAweDIyMEQsIDB4NzMyNywgMHgyMjBBLCAweDczMjksIDB4MENENiwNCi0gICAgMHg3MzJELCAweDIyMEMsIDB4NzMzMCwgMHgyMjA2LCAweDczMzEsIDB4MjIwOCwgMHg3MzMyLCAweDIyMEIsDQotICAgIDB4NzMzMywgMHgyMjA5LCAweDczMzQsIDB4MENENSwgMHg3MzM1LCAweDIyMEYsIDB4NzMzNiwgMHgwQ0QzLA0KLSAgICAweDczMzcsIDB4MEU3NywgMHg3MzNBLCAweDI0OTYsIDB4NzMzQiwgMHgyNDk1LCAweDczM0MsIDB4MjQ5MywNCi0gICAgMHg3MzNFLCAweDBFN0EsIDB4NzMzRiwgMHgwRTc5LCAweDczNDAsIDB4MjQ5NywgMHg3MzQyLCAweDI0OTQsDQotICAgIDB4NzM0MywgMHgyNzI3LCAweDczNDQsIDB4MTAyQSwgMHg3MzQ1LCAweDBFNzgsIDB4NzM0OSwgMHgyNDk5LA0KLSAgICAweDczNEEsIDB4MjQ5OCwgMHg3MzRDLCAweDI3MkEsIDB4NzM0RCwgMHgyNzI4LCAweDczNEUsIDB4MTFBNCwNCi0gICAgMHg3MzUwLCAweDEwMkIsIDB4NzM1MSwgMHgyNzI5LCAweDczNTIsIDB4Mjk2OSwgMHg3MzU3LCAweDExQTUsDQotICAgIDB4NzM1OCwgMHgyOTY4LCAweDczNTksIDB4Mjk3MSwgMHg3MzVBLCAweDI5NzAsIDB4NzM1QiwgMHgyOTZFLA0KLSAgICAweDczNUQsIDB4Mjk2RCwgMHg3MzVFLCAweDI5NkEsIDB4NzM1RiwgMHgyOTZCLCAweDczNjAsIDB4Mjk2QywNCi0gICAgMHg3MzYxLCAweDI5NkYsIDB4NzM2MiwgMHgyOTcyLCAweDczNjUsIDB4MkJDOCwgMHg3MzY2LCAweDJCQzUsDQotICAgIDB4NzM2NywgMHgyQkM2LCAweDczNjgsIDB4MTJGOSwgMHg3MzY5LCAweDJCQzQsIDB4NzM2QSwgMHgyQkNBLA0KLSAgICAweDczNkIsIDB4MkJDOSwgMHg3MzZDLCAweDJCQzcsIDB4NzM2RSwgMHgyREEzLCAweDczNkYsIDB4MkRBNCwNCi0gICAgMHg3MzcwLCAweDE0MEUsIDB4NzM3MiwgMHgxNDBGLCAweDczNzMsIDB4MkRBMiwgMHg3Mzc1LCAweDE0RjMsDQotICAgIDB4NzM3NiwgMHgyRjU1LCAweDczNzcsIDB4MTRGMiwgMHg3Mzc4LCAweDE1OTUsIDB4NzM3QSwgMHgxNTk2LA0KLSAgICAweDczN0IsIDB4MTYyMCwgMHg3MzdDLCAweDMxRjgsIDB4NzM3RCwgMHgzMUY3LCAweDczN0UsIDB4MzJFMiwNCi0gICAgMHg3MzdGLCAweDMzOTAsIDB4NzM4MCwgMHgxNkNBLCAweDczODEsIDB4MzQyNiwgMHg3MzgyLCAweDM0MjUsDQotICAgIDB4NzM4MywgMHgzNDI3LCAweDczODQsIDB4MDM1NiwgMHg3Mzg1LCAweDFCN0QsIDB4NzM4NiwgMHgwOTJBLA0KLSAgICAweDczODcsIDB4MEIxRiwgMHg3Mzg4LCAweDFGOEUsIDB4NzM4OSwgMHgwMzU3LCAweDczOEEsIDB4MTdCMSwNCi0gICAgMHg3MzhCLCAweDAyRUUsIDB4NzM4RSwgMHgxODBFLCAweDczOTIsIDB4MThEMSwgMHg3MzkzLCAweDE4Q0YsDQotICAgIDB4NzM5NCwgMHgxOEQwLCAweDczOTUsIDB4MThDRCwgMHg3Mzk2LCAweDA0RUYsIDB4NzM5NywgMHgxOENFLA0KLSAgICAweDczOUQsIDB4MUEwQywgMHg3MzlGLCAweDA2NTIsIDB4NzNBMCwgMHgxQTBBLCAweDczQTEsIDB4MUEwNiwNCi0gICAgMHg3M0EyLCAweDFBMDksIDB4NzNBNCwgMHgxQTA1LCAweDczQTUsIDB4MDY1NCwgMHg3M0E2LCAweDFBMDgsDQotICAgIDB4NzNBOCwgMHgwNjUxLCAweDczQTksIDB4MDY1MCwgMHg3M0FCLCAweDA2NTMsIDB4NzNBQywgMHgxQTBCLA0KLSAgICAweDczQUQsIDB4MUEwNywgMHg3M0IyLCAweDA3OUIsIDB4NzNCMywgMHgwNzlFLCAweDczQjQsIDB4MUI4NSwNCi0gICAgMHg3M0I1LCAweDFCODQsIDB4NzNCNiwgMHgxQjgzLCAweDczQjcsIDB4MDc5OCwgMHg3M0I4LCAweDFCOEMsDQotICAgIDB4NzNCOSwgMHgxQjgyLCAweDczQkIsIDB4MDc5QSwgMHg3M0JDLCAweDFEM0QsIDB4NzNCRSwgMHgxQjg5LA0KLSAgICAweDczQkYsIDB4MUI4NywgMHg3M0MwLCAweDA3OUQsIDB4NzNDMiwgMHgxQjdGLCAweDczQzMsIDB4MUI4QSwNCi0gICAgMHg3M0M1LCAweDFCODEsIDB4NzNDNiwgMHgxQjhCLCAweDczQzcsIDB4MUI4OCwgMHg3M0M4LCAweDFCODAsDQotICAgIDB4NzNDQSwgMHgwNzk5LCAweDczQ0IsIDB4MUI4RCwgMHg3M0NDLCAweDFCN0UsIDB4NzNDRCwgMHgwNzlDLA0KLSAgICAweDczRDIsIDB4MUQ0MiwgMHg3M0QzLCAweDFEMzksIDB4NzNENCwgMHgxRDQ0LCAweDczRDYsIDB4MUQzQywNCi0gICAgMHg3M0Q3LCAweDFENDcsIDB4NzNEOCwgMHgxRDQ4LCAweDczRDksIDB4MUQzQSwgMHg3M0RBLCAweDFENDYsDQotICAgIDB4NzNEQiwgMHgxRDQzLCAweDczREMsIDB4MUQ0MSwgMHg3M0RELCAweDFENDUsIDB4NzNERSwgMHgwOTMwLA0KLSAgICAweDczRTAsIDB4MDkyRSwgMHg3M0UzLCAweDFEM0YsIDB4NzNFNSwgMHgxRDNCLCAweDczRTcsIDB4MUQzRSwNCi0gICAgMHg3M0U4LCAweDFENDksIDB4NzNFOSwgMHgxRDQwLCAweDczRUEsIDB4MDkyRiwgMHg3M0VCLCAweDFCODYsDQotICAgIDB4NzNFRCwgMHgwOTJCLCAweDczRUUsIDB4MDkyRCwgMHg3M0Y0LCAweDFGOUMsIDB4NzNGNSwgMHgxRjkxLA0KLSAgICAweDczRjYsIDB4MUY4RiwgMHg3M0Y4LCAweDFGOTAsIDB4NzNGQSwgMHgxRjk3LCAweDczRkMsIDB4MUY5OCwNCi0gICAgMHg3M0ZELCAweDFGOTQsIDB4NzNGRSwgMHgwQjI0LCAweDczRkYsIDB4MUY5OSwgMHg3NDAwLCAweDFGOTYsDQotICAgIDB4NzQwMSwgMHgxRjkzLCAweDc0MDMsIDB4MEIyMiwgMHg3NDA0LCAweDFGOTIsIDB4NzQwNSwgMHgwQjIwLA0KLSAgICAweDc0MDYsIDB4MEIyMywgMHg3NDA3LCAweDFGOTUsIDB4NzQwOCwgMHgxRjlELCAweDc0MDksIDB4MDkyQywNCi0gICAgMHg3NDBBLCAweDBCMjEsIDB4NzQwQiwgMHgxRjlCLCAweDc0MEMsIDB4MUY5QSwgMHg3NDBELCAweDBCMjUsDQotICAgIDB4NzQxNiwgMHgyMjE1LCAweDc0MUEsIDB4MjIxNiwgMHg3NDFCLCAweDBDRTAsIDB4NzQxRCwgMHgyMjFDLA0KLSAgICAweDc0MjAsIDB4MjIxRSwgMHg3NDIxLCAweDIyMTcsIDB4NzQyMiwgMHgwQ0RBLCAweDc0MjMsIDB4MjIxQiwNCi0gICAgMHg3NDI0LCAweDIyMUEsIDB4NzQyNSwgMHgwQ0RCLCAweDc0MjYsIDB4MENFMSwgMHg3NDI4LCAweDBDRTIsDQotICAgIDB4NzQyOSwgMHgyMjFELCAweDc0MkEsIDB4MENEOCwgMHg3NDJCLCAweDIyMTQsIDB4NzQyQywgMHgyMjEyLA0KLSAgICAweDc0MkQsIDB4MjIxOCwgMHg3NDJFLCAweDIyMTEsIDB4NzQyRiwgMHgwQ0RGLCAweDc0MzAsIDB4MjIxMywNCi0gICAgMHg3NDMxLCAweDIyMTksIDB4NzQzMiwgMHgyMjFGLCAweDc0MzMsIDB4MENEOSwgMHg3NDM0LCAweDBDREUsDQotICAgIDB4NzQzNSwgMHgwQ0RDLCAweDc0MzYsIDB4MENERCwgMHg3NDNBLCAweDBDRDcsIDB4NzQzRiwgMHgwRTgxLA0KLSAgICAweDc0NDAsIDB4MjRBMCwgMHg3NDQxLCAweDBFODAsIDB4NzQ0MiwgMHgyNEE0LCAweDc0NDQsIDB4MjQ5QSwNCi0gICAgMHg3NDQ2LCAweDI0QTUsIDB4NzQ0QSwgMHgyNDlCLCAweDc0NEIsIDB4MjQ5QywgMHg3NDRELCAweDI0QTYsDQotICAgIDB4NzQ0RSwgMHgyNEEzLCAweDc0NEYsIDB4MjRBMSwgMHg3NDUwLCAweDI0QTIsIDB4NzQ1MSwgMHgyNDlFLA0KLSAgICAweDc0NTIsIDB4MjQ5RCwgMHg3NDU0LCAweDI0QTcsIDB4NzQ1NSwgMHgwRTdELCAweDc0NTcsIDB4MjQ5RiwNCi0gICAgMHg3NDU5LCAweDBFODIsIDB4NzQ1QSwgMHgwRTdDLCAweDc0NUIsIDB4MEU4MywgMHg3NDVDLCAweDBFODQsDQotICAgIDB4NzQ1RSwgMHgwRTdGLCAweDc0NUYsIDB4MEU3RSwgMHg3NDYyLCAweDI3MkIsIDB4NzQ2MywgMHgxMDJELA0KLSAgICAweDc0NjQsIDB4MTAyQywgMHg3NDY3LCAweDI3MzAsIDB4NzQ2OSwgMHgxMUE2LCAweDc0NkEsIDB4MTAyRSwNCi0gICAgMHg3NDZELCAweDEwMzAsIDB4NzQ2RSwgMHgyNzMxLCAweDc0NkYsIDB4MEU3QiwgMHg3NDcwLCAweDEwMkYsDQotICAgIDB4NzQ3MSwgMHgyNzJELCAweDc0NzIsIDB4MjcyRiwgMHg3NDczLCAweDI3MkMsIDB4NzQ3NSwgMHgyNzJFLA0KLSAgICAweDc0NzksIDB4Mjk3QywgMHg3NDdDLCAweDI5N0IsIDB4NzQ3RCwgMHgyOTc4LCAweDc0N0UsIDB4MTFBOSwNCi0gICAgMHg3NDdGLCAweDJCQ0IsIDB4NzQ4MCwgMHgxMUFBLCAweDc0ODEsIDB4Mjk3NywgMHg3NDgzLCAweDExQTgsDQotICAgIDB4NzQ4NSwgMHgyOTc5LCAweDc0ODYsIDB4Mjk3NiwgMHg3NDg3LCAweDI5NzMsIDB4NzQ4OCwgMHgyOTdBLA0KLSAgICAweDc0ODksIDB4Mjk3NCwgMHg3NDhBLCAweDI5NzUsIDB4NzQ4QiwgMHgxMUE3LCAweDc0OTAsIDB4MkRBOCwNCi0gICAgMHg3NDkyLCAweDJCQ0YsIDB4NzQ5NCwgMHgyQkNFLCAweDc0OTUsIDB4MkJEMCwgMHg3NDk3LCAweDJEQTUsDQotICAgIDB4NzQ5OCwgMHgxMkZDLCAweDc0OUEsIDB4MkJDQywgMHg3NDlDLCAweDEyRkEsIDB4NzQ5RSwgMHgxMkZFLA0KLSAgICAweDc0OUYsIDB4MTJGRCwgMHg3NEEwLCAweDJCQ0QsIDB4NzRBMSwgMHgyQkQxLCAweDc0QTMsIDB4MTJGQiwNCi0gICAgMHg3NEE1LCAweDJEQUMsIDB4NzRBNiwgMHgxNDEyLCAweDc0QTcsIDB4MTRGNCwgMHg3NEE4LCAweDE0MTMsDQotICAgIDB4NzRBOSwgMHgxNDEwLCAweDc0QUEsIDB4MkRBOSwgMHg3NEFCLCAweDJEQTcsIDB4NzRBRCwgMHgyREFBLA0KLSAgICAweDc0QUYsIDB4MkRBRCwgMHg3NEIwLCAweDE0MTEsIDB4NzRCMSwgMHgyREFCLCAweDc0QjIsIDB4MkRBNiwNCi0gICAgMHg3NEI1LCAweDJGNTgsIDB4NzRCNiwgMHgyRjVCLCAweDc0QjcsIDB4MzBDMiwgMHg3NEI4LCAweDJGNTYsDQotICAgIDB4NzRCQSwgMHgzMUY5LCAweDc0QkIsIDB4MkY1QywgMHg3NEJELCAweDE1OTcsIDB4NzRCRSwgMHgyRjVBLA0KLSAgICAweDc0QkYsIDB4MTRGNSwgMHg3NEMwLCAweDJGNTcsIDB4NzRDMSwgMHgyRjU5LCAweDc0QzIsIDB4MkY1RCwNCi0gICAgMHg3NEMzLCAweDMwQzMsIDB4NzRDNSwgMHgzMEMxLCAweDc0Q0EsIDB4MTU5OCwgMHg3NENCLCAweDMwQzAsDQotICAgIDB4NzRDRiwgMHgxNjIxLCAweDc0RDQsIDB4MTY3RSwgMHg3NEQ1LCAweDMzOTIsIDB4NzRENiwgMHgxNjdELA0KLSAgICAweDc0RDcsIDB4MzM5NCwgMHg3NEQ4LCAweDMzOTEsIDB4NzREOSwgMHgzMzkzLCAweDc0REEsIDB4MTZGRSwNCi0gICAgMHg3NERCLCAweDM0OEQsIDB4NzREQywgMHgwMzU4LCAweDc0REQsIDB4MUEwRCwgMHg3NERFLCAweDFENEEsDQotICAgIDB4NzRERiwgMHgxRDRCLCAweDc0RTAsIDB4MEIyNiwgMHg3NEUxLCAweDI0QTgsIDB4NzRFMiwgMHgxMkZGLA0KLSAgICAweDc0RTMsIDB4MTU5OSwgMHg3NEU0LCAweDE2Q0IsIDB4NzRFNSwgMHgzNDhFLCAweDc0RTYsIDB4MDM1OSwNCi0gICAgMHg3NEU4LCAweDFBMEUsIDB4NzRFOSwgMHgwMTIwLCAweDc0RUMsIDB4MUI4RSwgMHg3NEVFLCAweDFCOEYsDQotICAgIDB4NzRGNCwgMHgxRDRDLCAweDc0RjUsIDB4MUQ0RCwgMHg3NEY2LCAweDBCMjcsIDB4NzRGNywgMHgwQjI4LA0KLSAgICAweDc0RkIsIDB4MjIyMCwgMHg3NEZELCAweDI0QUIsIDB4NzRGRSwgMHgyNEFBLCAweDc0RkYsIDB4MjRBOSwNCi0gICAgMHg3NTAwLCAweDI3MzIsIDB4NzUwMiwgMHgyNzMzLCAweDc1MDMsIDB4MjczNCwgMHg3NTA0LCAweDEwMzEsDQotICAgIDB4NzUwNywgMHgyOTdFLCAweDc1MDgsIDB4Mjk3RCwgMHg3NTBCLCAweDJCRDIsIDB4NzUwQywgMHgxMzAwLA0KLSAgICAweDc1MEQsIDB4MTMwMSwgMHg3NTBGLCAweDJEQjEsIDB4NzUxMCwgMHgyREFFLCAweDc1MTEsIDB4MkRBRiwNCi0gICAgMHg3NTEyLCAweDJEQjAsIDB4NzUxMywgMHgyRjVGLCAweDc1MTQsIDB4MkY1RSwgMHg3NTE1LCAweDE0RjYsDQotICAgIDB4NzUxNiwgMHgzMEM0LCAweDc1MTcsIDB4MzJFMywgMHg3NTE4LCAweDAzNUEsIDB4NzUxQSwgMHgwNzlGLA0KLSAgICAweDc1MUMsIDB4MEIyOSwgMHg3NTFELCAweDI0QUMsIDB4NzUxRiwgMHgwMzVCLCAweDc1MjEsIDB4MUQ0RSwNCi0gICAgMHg3NTIyLCAweDBCMkEsIDB4NzUyNSwgMHgwQ0UzLCAweDc1MjYsIDB4MENFNCwgMHg3NTI4LCAweDAzNUMsDQotICAgIDB4NzUyOSwgMHgwMzVELCAweDc1MkEsIDB4MTgwRiwgMHg3NTJCLCAweDA0RjEsIDB4NzUyQywgMHgwNEYwLA0KLSAgICAweDc1MkQsIDB4MDdBMCwgMHg3NTJFLCAweDFCOTAsIDB4NzUyRiwgMHgyMjIxLCAweDc1MzAsIDB4MDM1RSwNCi0gICAgMHg3NTMxLCAweDAzNUYsIDB4NzUzMiwgMHgwMzYwLCAweDc1MzMsIDB4MDM2MSwgMHg3NTM3LCAweDA0RjIsDQotICAgIDB4NzUzOCwgMHgwNEYzLCAweDc1MzksIDB4MThEMywgMHg3NTNBLCAweDE4RDIsIDB4NzUzRCwgMHgwNjU1LA0KLSAgICAweDc1M0UsIDB4MUExMSwgMHg3NTNGLCAweDFBMEYsIDB4NzU0MCwgMHgxQTEwLCAweDc1NDcsIDB4MUI5MSwNCi0gICAgMHg3NTQ4LCAweDFCOTIsIDB4NzU0QiwgMHgwN0E0LCAweDc1NEMsIDB4MDdBMiwgMHg3NTRFLCAweDA3QTMsDQotICAgIDB4NzU0RiwgMHgwN0ExLCAweDc1NTQsIDB4MDkzMSwgMHg3NTU5LCAweDA5MzUsIDB4NzU1QSwgMHgwOTM0LA0KLSAgICAweDc1NUIsIDB4MUQ0RiwgMHg3NTVDLCAweDA5MzMsIDB4NzU1RCwgMHgwOTMyLCAweDc1NUYsIDB4MUQ1MCwNCi0gICAgMHg3NTYyLCAweDBCMkQsIDB4NzU2MywgMHgxRjlGLCAweDc1NjQsIDB4MUY5RSwgMHg3NTY1LCAweDBCMkIsDQotICAgIDB4NzU2NiwgMHgwQjJDLCAweDc1NkEsIDB4MENFNiwgMHg3NTZCLCAweDBDRTUsIDB4NzU2QywgMHgyMjIzLA0KLSAgICAweDc1NkYsIDB4MjIyMiwgMHg3NTcwLCAweDBCMkUsIDB4NzU3NiwgMHgwRTg1LCAweDc1NzcsIDB4MjRBRSwNCi0gICAgMHg3NTc4LCAweDBFODYsIDB4NzU3OSwgMHgyNEFELCAweDc1N0QsIDB4MjczNSwgMHg3NTdFLCAweDI5N0YsDQotICAgIDB4NzU3RiwgMHgxMUFCLCAweDc1ODAsIDB4MkJEMywgMHg3NTg0LCAweDJEQjIsIDB4NzU4NiwgMHgxNTlCLA0KLSAgICAweDc1ODcsIDB4MTU5QSwgMHg3NThBLCAweDE2Q0MsIDB4NzU4QiwgMHgwMzYyLCAweDc1OEMsIDB4MUExMiwNCi0gICAgMHg3NThGLCAweDBCMkYsIDB4NzU5MCwgMHgyNzM2LCAweDc1OTEsIDB4MTAzMiwgMHg3NTkyLCAweDAyMkUsDQotICAgIDB4NzU5NCwgMHgxOEQ0LCAweDc1OTUsIDB4MThENSwgMHg3NTk4LCAweDFBMTMsIDB4NzU5OSwgMHgwNjU3LA0KLSAgICAweDc1OUEsIDB4MDY1OCwgMHg3NTlELCAweDA2NTYsIDB4NzVBMiwgMHgwN0E4LCAweDc1QTMsIDB4MDdBOSwNCi0gICAgMHg3NUE0LCAweDA3QTYsIDB4NzVBNSwgMHgwN0E3LCAweDc1QTcsIDB4MUI5MywgMHg3NUFBLCAweDFCOTQsDQotICAgIDB4NzVBQiwgMHgwN0E1LCAweDc1QjAsIDB4MUQ1MSwgMHg3NUIyLCAweDA5MzksIDB4NzVCMywgMHgwOTNBLA0KLSAgICAweDc1QjUsIDB4MEIzMiwgMHg3NUI2LCAweDFENTcsIDB4NzVCOCwgMHgwOTNGLCAweDc1QjksIDB4MDkzRCwNCi0gICAgMHg3NUJBLCAweDFENTgsIDB4NzVCQiwgMHgxRDUzLCAweDc1QkMsIDB4MDkzQywgMHg3NUJELCAweDA5M0IsDQotICAgIDB4NzVCRSwgMHgwOTM2LCAweDc1QkYsIDB4MUQ1NiwgMHg3NUMwLCAweDFENTUsIDB4NzVDMSwgMHgxRDUyLA0KLSAgICAweDc1QzIsIDB4MDkzRSwgMHg3NUM0LCAweDFENTQsIDB4NzVDNSwgMHgwOTM3LCAweDc1QzcsIDB4MDkzOCwNCi0gICAgMHg3NUNBLCAweDBCMzMsIDB4NzVDQiwgMHgxRkEzLCAweDc1Q0MsIDB4MUZBNCwgMHg3NUNELCAweDBCMzQsDQotICAgIDB4NzVDRSwgMHgxRkEwLCAweDc1Q0YsIDB4MUZBMiwgMHg3NUQwLCAweDFGQTYsIDB4NzVEMSwgMHgxRkE1LA0KLSAgICAweDc1RDIsIDB4MUZBMSwgMHg3NUQ0LCAweDBCMzAsIDB4NzVENSwgMHgwQjMxLCAweDc1RDcsIDB4MjIyQiwNCi0gICAgMHg3NUQ4LCAweDBDRUIsIDB4NzVEOSwgMHgwQ0VBLCAweDc1REEsIDB4MjIyNSwgMHg3NURCLCAweDBDRTgsDQotICAgIDB4NzVERCwgMHgyMjI4LCAweDc1REUsIDB4MENFQywgMHg3NURGLCAweDIyMjksIDB4NzVFMCwgMHgwQ0VELA0KLSAgICAweDc1RTEsIDB4MjIyNiwgMHg3NUUyLCAweDBDRTcsIDB4NzVFMywgMHgwQ0U5LCAweDc1RTQsIDB4MjIyQSwNCi0gICAgMHg3NUU2LCAweDIyMjcsIDB4NzVFNywgMHgyMjI0LCAweDc1RUQsIDB4MjRCQiwgMHg3NUVGLCAweDI0QjAsDQotICAgIDB4NzVGMCwgMHgwRTg4LCAweDc1RjEsIDB4MEU4QiwgMHg3NUYyLCAweDBFOEEsIDB4NzVGMywgMHgwRThGLA0KLSAgICAweDc1RjQsIDB4MEU4RSwgMHg3NUY1LCAweDI0QkMsIDB4NzVGNiwgMHgyNEJBLCAweDc1RjcsIDB4MjRCMywNCi0gICAgMHg3NUY4LCAweDI0QjcsIDB4NzVGOSwgMHgyNEI2LCAweDc1RkEsIDB4MEU4QywgMHg3NUZCLCAweDI0QjksDQotICAgIDB4NzVGQywgMHgyNEI1LCAweDc1RkQsIDB4MjRCRCwgMHg3NUZFLCAweDI0QjQsIDB4NzVGRiwgMHgwRThELA0KLSAgICAweDc2MDAsIDB4MEU4NywgMHg3NjAxLCAweDBFODksIDB4NzYwMywgMHgyNEIyLCAweDc2MDgsIDB4MjczOCwNCi0gICAgMHg3NjA5LCAweDEwMzYsIDB4NzYwQSwgMHgyNzNDLCAweDc2MEIsIDB4MTAzNSwgMHg3NjBDLCAweDI3MzksDQotICAgIDB4NzYwRCwgMHgxMDM0LCAweDc2MEYsIDB4MjRCMSwgMHg3NjEwLCAweDI0QjgsIDB4NzYxMSwgMHgyNzNCLA0KLSAgICAweDc2MTMsIDB4MTAzNywgMHg3NjE0LCAweDI3M0QsIDB4NzYxNSwgMHgyNzNBLCAweDc2MTYsIDB4MjczNywNCi0gICAgMHg3NjE5LCAweDI5ODIsIDB4NzYxQSwgMHgyOTg2LCAweDc2MUIsIDB4Mjk4OCwgMHg3NjFDLCAweDI5ODQsDQotICAgIDB4NzYxRCwgMHgyOTgzLCAweDc2MUUsIDB4Mjk4MSwgMHg3NjFGLCAweDExQUUsIDB4NzYyMCwgMHgxMUFDLA0KLSAgICAweDc2MjEsIDB4MTFCMSwgMHg3NjIyLCAweDExQjIsIDB4NzYyMywgMHgyOTg1LCAweDc2MjQsIDB4MTFBRiwNCi0gICAgMHg3NjI1LCAweDI5ODAsIDB4NzYyNiwgMHgxMUIwLCAweDc2MjcsIDB4MTAzMywgMHg3NjI4LCAweDI5ODcsDQotICAgIDB4NzYyOSwgMHgxMUFELCAweDc2MkQsIDB4MkJENSwgMHg3NjJGLCAweDJCRDQsIDB4NzYzMCwgMHgyQkRDLA0KLSAgICAweDc2MzEsIDB4MkJENiwgMHg3NjMyLCAweDJCREIsIDB4NzYzMywgMHgyQkQ4LCAweDc2MzQsIDB4MTMwMiwNCi0gICAgMHg3NjM1LCAweDJCREEsIDB4NzYzOCwgMHgxMzAzLCAweDc2M0EsIDB4MTMwNCwgMHg3NjNDLCAweDJCRDksDQotICAgIDB4NzYzRCwgMHgyQkQ3LCAweDc2NDIsIDB4MTQxNSwgMHg3NjQzLCAweDJEQjMsIDB4NzY0NiwgMHgxNDE0LA0KLSAgICAweDc2NDcsIDB4MkRCNiwgMHg3NjQ4LCAweDJEQjQsIDB4NzY0OSwgMHgyREI1LCAweDc2NEMsIDB4MTQxNiwNCi0gICAgMHg3NjUwLCAweDJGNjMsIDB4NzY1MiwgMHgxNEY5LCAweDc2NTMsIDB4MkY2NCwgMHg3NjU2LCAweDE0RjcsDQotICAgIDB4NzY1NywgMHgyRjY1LCAweDc2NTgsIDB4MTRGOCwgMHg3NjU5LCAweDJGNjIsIDB4NzY1QSwgMHgyRjY2LA0KLSAgICAweDc2NUMsIDB4MkY2MCwgMHg3NjVGLCAweDE1OUMsIDB4NzY2MCwgMHgzMEM1LCAweDc2NjEsIDB4MTU5RCwNCi0gICAgMHg3NjYyLCAweDE2MjIsIDB4NzY2NCwgMHgyRjYxLCAweDc2NjUsIDB4MTYyMywgMHg3NjY5LCAweDE2N0YsDQotICAgIDB4NzY2QSwgMHgzMkU0LCAweDc2NkMsIDB4MTZDRSwgMHg3NjZELCAweDMzOTUsIDB4NzY2RSwgMHgxNkNELA0KLSAgICAweDc2NzAsIDB4MzQyOCwgMHg3NjcxLCAweDE3MjMsIDB4NzY3MiwgMHgxNzI0LCAweDc2NzUsIDB4MzU0MywNCi0gICAgMHg3Njc2LCAweDAyMkYsIDB4NzY3OCwgMHgwN0FBLCAweDc2NzksIDB4MUI5NSwgMHg3NjdCLCAweDBDRUUsDQotICAgIDB4NzY3QywgMHgwQ0VGLCAweDc2N0QsIDB4MDM2MywgMHg3NjdFLCAweDAzRjUsIDB4NzY3RiwgMHgxODEwLA0KLSAgICAweDc2ODEsIDB4MThENiwgMHg3NjgyLCAweDA0RjQsIDB4NzY4NCwgMHgwNjU5LCAweDc2ODYsIDB4MDdBQiwNCi0gICAgMHg3Njg3LCAweDA3QUMsIDB4NzY4OCwgMHgwN0FELCAweDc2ODksIDB4MUZBOCwgMHg3NjhBLCAweDFENTksDQotICAgIDB4NzY4QiwgMHgwOTQwLCAweDc2OEUsIDB4MEIzNSwgMHg3NjhGLCAweDFGQTcsIDB4NzY5MiwgMHgyMjJELA0KLSAgICAweDc2OTMsIDB4MENGMSwgMHg3Njk1LCAweDIyMkMsIDB4NzY5NiwgMHgwQ0YwLCAweDc2OTksIDB4MjRCRSwNCi0gICAgMHg3NjlBLCAweDExQjMsIDB4NzY5QiwgMHgyOThDLCAweDc2OUMsIDB4Mjk4OSwgMHg3NjlELCAweDI5OEEsDQotICAgIDB4NzY5RSwgMHgyOThCLCAweDc2QTQsIDB4MkRCNywgMHg3NkE2LCAweDJGNjcsIDB4NzZBQSwgMHgzMUZCLA0KLSAgICAweDc2QUIsIDB4MzFGQSwgMHg3NkFELCAweDMzOTYsIDB4NzZBRSwgMHgwMzY0LCAweDc2QUYsIDB4MUExNCwNCi0gICAgMHg3NkIwLCAweDA5NDEsIDB4NzZCNCwgMHgwQ0YyLCAweDc2QjUsIDB4MjRCRiwgMHg3NkI4LCAweDI3M0UsDQotICAgIDB4NzZCQSwgMHgxMUI0LCAweDc2QkIsIDB4MkJERCwgMHg3NkJELCAweDJGNjgsIDB4NzZCRSwgMHgzMUZDLA0KLSAgICAweDc2QkYsIDB4MDM2NSwgMHg3NkMyLCAweDA2NUEsIDB4NzZDMywgMHgwN0IwLCAweDc2QzQsIDB4MUI5NiwNCi0gICAgMHg3NkM1LCAweDA3QjEsIDB4NzZDNiwgMHgwN0FGLCAweDc2QzgsIDB4MDdBRSwgMHg3NkM5LCAweDFENUEsDQotICAgIDB4NzZDQSwgMHgwOTQyLCAweDc2Q0QsIDB4MDk0MywgMHg3NkNFLCAweDA5NDQsIDB4NzZEMiwgMHgwQjM3LA0KLSAgICAweDc2RDMsIDB4MUZBOSwgMHg3NkQ0LCAweDBCMzYsIDB4NzZEQSwgMHgyMjJFLCAweDc2REIsIDB4MEIzOCwNCi0gICAgMHg3NkRDLCAweDBDRjMsIDB4NzZERCwgMHgyNEMwLCAweDc2REUsIDB4MEU5MCwgMHg3NkRGLCAweDBFOTEsDQotICAgIDB4NzZFMSwgMHgxMDM4LCAweDc2RTMsIDB4MTAzOSwgMHg3NkU0LCAweDExQjUsIDB4NzZFNSwgMHgxMzA2LA0KLSAgICAweDc2RTYsIDB4MkJERSwgMHg3NkU3LCAweDEzMDUsIDB4NzZFOSwgMHgyREI4LCAweDc2RUEsIDB4MTQxNywNCi0gICAgMHg3NkVDLCAweDJGNjksIDB4NzZFRCwgMHgzMUZELCAweDc2RUUsIDB4MDM2NiwgMHg3NkVGLCAweDA0RjUsDQotICAgIDB4NzZGMCwgMHgxQTE3LCAweDc2RjEsIDB4MUExNiwgMHg3NkYyLCAweDA2NUIsIDB4NzZGMywgMHgxQTE1LA0KLSAgICAweDc2RjQsIDB4MDY1QywgMHg3NkY1LCAweDFBMTgsIDB4NzZGNywgMHgxQjlDLCAweDc2RjgsIDB4MDdCNCwNCi0gICAgMHg3NkY5LCAweDA3QjMsIDB4NzZGQSwgMHgxQjlFLCAweDc2RkIsIDB4MUI5RCwgMHg3NkZDLCAweDA3QjgsDQotICAgIDB4NzZGRSwgMHgwN0I3LCAweDc3MDEsIDB4MDdCMiwgMHg3NzAzLCAweDFCOTgsIDB4NzcwNCwgMHgxQjk5LA0KLSAgICAweDc3MDUsIDB4MUI5QSwgMHg3NzA3LCAweDA3QjksIDB4NzcwOCwgMHgxQjk3LCAweDc3MDksIDB4MDdCNSwNCi0gICAgMHg3NzBBLCAweDFCOUIsIDB4NzcwQiwgMHgwN0I2LCAweDc3MTAsIDB4MUQ1RCwgMHg3NzExLCAweDFENjEsDQotICAgIDB4NzcxMiwgMHgxRDVGLCAweDc3MTMsIDB4MUQ1RSwgMHg3NzE1LCAweDFENjIsIDB4NzcxOSwgMHgxRDYzLA0KLSAgICAweDc3MUEsIDB4MUQ2NCwgMHg3NzFCLCAweDFENUMsIDB4NzcxRCwgMHgxRDVCLCAweDc3MUYsIDB4MDk0NiwNCi0gICAgMHg3NzIwLCAweDA5NDcsIDB4NzcyMiwgMHgxRDY1LCAweDc3MjMsIDB4MUQ2MCwgMHg3NzI1LCAweDFGQjIsDQotICAgIDB4NzcyNywgMHgxRDY2LCAweDc3MjgsIDB4MDk0OCwgMHg3NzI5LCAweDA5NDUsIDB4NzcyRCwgMHgxRkFDLA0KLSAgICAweDc3MkYsIDB4MUZBQiwgMHg3NzMxLCAweDFGQUQsIDB4NzczMiwgMHgxRkFFLCAweDc3MzMsIDB4MUZCMCwNCi0gICAgMHg3NzM0LCAweDFGQUYsIDB4NzczNSwgMHgxRkI0LCAweDc3MzYsIDB4MEIzQywgMHg3NzM3LCAweDBCMzksDQotICAgIDB4NzczOCwgMHgwQjNELCAweDc3MzksIDB4MUZBQSwgMHg3NzNBLCAweDBCM0UsIDB4NzczQiwgMHgxRkIzLA0KLSAgICAweDc3M0MsIDB4MEIzQiwgMHg3NzNELCAweDFGQjEsIDB4NzczRSwgMHgwQjNBLCAweDc3NDQsIDB4MjIzMSwNCi0gICAgMHg3NzQ1LCAweDIyMzMsIDB4Nzc0NiwgMHgyMjJGLCAweDc3NDcsIDB4MjIzMCwgMHg3NzRBLCAweDIyMzQsDQotICAgIDB4Nzc0QiwgMHgyMjM2LCAweDc3NEMsIDB4MjIzNywgMHg3NzRELCAweDIyMzIsIDB4Nzc0RSwgMHgyMjM1LA0KLSAgICAweDc3NEYsIDB4MENGNCwgMHg3NzUyLCAweDI0QzQsIDB4Nzc1NCwgMHgyNEM5LCAweDc3NTUsIDB4MjRDMSwNCi0gICAgMHg3NzU2LCAweDI0QzUsIDB4Nzc1OSwgMHgyNENBLCAweDc3NUEsIDB4MjRDNiwgMHg3NzVCLCAweDBFOTIsDQotICAgIDB4Nzc1QywgMHgwRTlBLCAweDc3NUUsIDB4MEU5NSwgMHg3NzVGLCAweDI0QzIsIDB4Nzc2MCwgMHgyNEMzLA0KLSAgICAweDc3NjEsIDB4MTAzRCwgMHg3NzYyLCAweDBFOUQsIDB4Nzc2MywgMHgwRTk2LCAweDc3NjUsIDB4MEU5QiwNCi0gICAgMHg3NzY2LCAweDBFOTQsIDB4Nzc2NywgMHgyNEM4LCAweDc3NjgsIDB4MEU5QywgMHg3NzY5LCAweDI0QzcsDQotICAgIDB4Nzc2QSwgMHgwRTk4LCAweDc3NkIsIDB4MEU5MywgMHg3NzZDLCAweDBFOTksIDB4Nzc2RCwgMHgyNENCLA0KLSAgICAweDc3NkUsIDB4Mjc0MywgMHg3NzZGLCAweDI3NDUsIDB4Nzc3OSwgMHgwRTk3LCAweDc3N0MsIDB4Mjc0MCwNCi0gICAgMHg3NzdELCAweDEwM0IsIDB4Nzc3RSwgMHgyNzQ2LCAweDc3N0YsIDB4MTAzQywgMHg3NzgwLCAweDI3NDQsDQotICAgIDB4Nzc4MSwgMHgyNzNGLCAweDc3ODIsIDB4Mjc0MiwgMHg3NzgzLCAweDI3NDcsIDB4Nzc4NCwgMHgxMDNBLA0KLSAgICAweDc3ODUsIDB4Mjc0MSwgMHg3Nzg3LCAweDExQjcsIDB4Nzc4OCwgMHgyOTkwLCAweDc3ODksIDB4Mjk4RiwNCi0gICAgMHg3NzhCLCAweDExQkEsIDB4Nzc4QywgMHgxMUI4LCAweDc3OEQsIDB4Mjk4RCwgMHg3NzhFLCAweDExQjYsDQotICAgIDB4Nzc4RiwgMHgyOThFLCAweDc3OTEsIDB4MTFCOSwgMHg3Nzk1LCAweDJCRTYsIDB4Nzc5NywgMHgyQkU4LA0KLSAgICAweDc3OTksIDB4MkJFNywgMHg3NzlBLCAweDJCREYsIDB4Nzc5QiwgMHgyQkUzLCAweDc3OUMsIDB4MkJFMiwNCi0gICAgMHg3NzlELCAweDJCRTAsIDB4Nzc5RSwgMHgxMzA4LCAweDc3OUYsIDB4MTMwOSwgMHg3N0EwLCAweDEzMDcsDQotICAgIDB4NzdBMSwgMHgyQkUxLCAweDc3QTIsIDB4MkJFNCwgMHg3N0EzLCAweDJCRTUsIDB4NzdBNSwgMHgxMzBBLA0KLSAgICAweDc3QTcsIDB4MTQxQywgMHg3N0E4LCAweDJEQzAsIDB4NzdBQSwgMHgxNDE5LCAweDc3QUIsIDB4MkRCQSwNCi0gICAgMHg3N0FDLCAweDE0MUIsIDB4NzdBRCwgMHgxNDFELCAweDc3QjAsIDB4MTQxQSwgMHg3N0IxLCAweDJEQkYsDQotICAgIDB4NzdCMiwgMHgyREJCLCAweDc3QjMsIDB4MTQxOCwgMHg3N0I0LCAweDJEQkUsIDB4NzdCNSwgMHgyREI5LA0KLSAgICAweDc3QjYsIDB4MkRCRCwgMHg3N0I3LCAweDJEQkMsIDB4NzdCQSwgMHgyRjZCLCAweDc3QkIsIDB4MTRGQywNCi0gICAgMHg3N0JDLCAweDE0RkQsIDB4NzdCRCwgMHgxNEZBLCAweDc3QkYsIDB4MTRGQiwgMHg3N0MyLCAweDJGNkEsDQotICAgIDB4NzdDNCwgMHgzMEM4LCAweDc3QzcsIDB4MTU5RSwgMHg3N0M5LCAweDMwQzYsIDB4NzdDQSwgMHgzMEM3LA0KLSAgICAweDc3Q0MsIDB4MzFGRSwgMHg3N0NELCAweDMyMDEsIDB4NzdDRSwgMHgzMUZGLCAweDc3Q0YsIDB4MzIwMCwNCi0gICAgMHg3N0QwLCAweDMyRTUsIDB4NzdEMywgMHgxNjgwLCAweDc3RDQsIDB4MzQyOSwgMHg3N0Q1LCAweDM0OEYsDQotICAgIDB4NzdENywgMHgxNzI1LCAweDc3RDgsIDB4MzREMywgMHg3N0Q5LCAweDM0RDQsIDB4NzdEQSwgMHgxNzUzLA0KLSAgICAweDc3REIsIDB4MDM2NywgMHg3N0RDLCAweDA3QkEsIDB4NzdERSwgMHgyMjM4LCAweDc3RTAsIDB4MjRDQywNCi0gICAgMHg3N0UyLCAweDAzNjgsIDB4NzdFMywgMHgwNEY2LCAweDc3RTUsIDB4MDY1RCwgMHg3N0U3LCAweDFCOUYsDQotICAgIDB4NzdFOCwgMHgxQkEwLCAweDc3RTksIDB4MDk0OSwgMHg3N0VDLCAweDIyMzksIDB4NzdFRCwgMHgwQ0Y1LA0KLSAgICAweDc3RUUsIDB4MEU5RSwgMHg3N0VGLCAweDE0MUUsIDB4NzdGMCwgMHgyREMxLCAweDc3RjEsIDB4MzBDOSwNCi0gICAgMHg3N0YyLCAweDMyMDIsIDB4NzdGMywgMHgwMzY5LCAweDc3RjcsIDB4MUExRSwgMHg3N0Y4LCAweDFBMTksDQotICAgIDB4NzdGOSwgMHgxQTFCLCAweDc3RkEsIDB4MUExRCwgMHg3N0ZCLCAweDFBMUMsIDB4NzdGQywgMHgxQTFBLA0KLSAgICAweDc3RkQsIDB4MDY1RSwgMHg3ODAyLCAweDA3QkIsIDB4NzgwMywgMHgxQkE5LCAweDc4MDUsIDB4MUJBNCwNCi0gICAgMHg3ODA2LCAweDFCQTEsIDB4NzgwOSwgMHgxQkE4LCAweDc4MEMsIDB4MDdCRCwgMHg3ODBELCAweDA3QkUsDQotICAgIDB4NzgwRSwgMHgxQkE3LCAweDc4MEYsIDB4MUJBNiwgMHg3ODEwLCAweDFCQTUsIDB4NzgxMSwgMHgxQkEyLA0KLSAgICAweDc4MTIsIDB4MUJBMywgMHg3ODEzLCAweDFCQUEsIDB4NzgxNCwgMHgwN0JDLCAweDc4MUQsIDB4MDk0RCwNCi0gICAgMHg3ODFGLCAweDA5NTMsIDB4NzgyMCwgMHgwOTUyLCAweDc4MjEsIDB4MUQ2RiwgMHg3ODIyLCAweDFENjksDQotICAgIDB4NzgyMywgMHgxRDY3LCAweDc4MjUsIDB4MDk1MCwgMHg3ODI2LCAweDFGQkIsIDB4NzgyNywgMHgwOTRCLA0KLSAgICAweDc4MjgsIDB4MUQ2QywgMHg3ODI5LCAweDFENzAsIDB4NzgyQSwgMHgxRDcyLCAweDc4MkIsIDB4MUQ2RSwNCi0gICAgMHg3ODJDLCAweDFENjgsIDB4NzgyRCwgMHgwOTUxLCAweDc4MkUsIDB4MUQ2RCwgMHg3ODJGLCAweDFENkIsDQotICAgIDB4NzgzMCwgMHgwOTRBLCAweDc4MzEsIDB4MUQ3MywgMHg3ODMyLCAweDA5NTQsIDB4NzgzMywgMHgxRDcxLA0KLSAgICAweDc4MzQsIDB4MDk0RSwgMHg3ODM1LCAweDFENkEsIDB4NzgzNywgMHgwOTRGLCAweDc4MzgsIDB4MDk0QywNCi0gICAgMHg3ODQzLCAweDBCNDAsIDB4Nzg0NSwgMHgxRkJDLCAweDc4NDgsIDB4MUZCNSwgMHg3ODQ5LCAweDFGQjcsDQotICAgIDB4Nzg0QSwgMHgxRkI5LCAweDc4NEMsIDB4MUZCQSwgMHg3ODRELCAweDFGQjgsIDB4Nzg0RSwgMHgwQjQxLA0KLSAgICAweDc4NTAsIDB4MUZCRCwgMHg3ODUyLCAweDFGQjYsIDB4Nzg1QywgMHgyMjNELCAweDc4NUQsIDB4MENGNiwNCi0gICAgMHg3ODVFLCAweDIyNDUsIDB4Nzg2MCwgMHgyMjNBLCAweDc4NjIsIDB4MjI0NiwgMHg3ODY0LCAweDIyM0IsDQotICAgIDB4Nzg2NSwgMHgyMjNDLCAweDc4NjgsIDB4MjI0NCwgMHg3ODY5LCAweDIyNDMsIDB4Nzg2QSwgMHgyMjQwLA0KLSAgICAweDc4NkIsIDB4MEIzRiwgMHg3ODZDLCAweDBDRjcsIDB4Nzg2RCwgMHgyMjNFLCAweDc4NkUsIDB4MjI0MSwNCi0gICAgMHg3ODZGLCAweDBDRjgsIDB4Nzg3MCwgMHgyMjQyLCAweDc4NzEsIDB4MjIzRiwgMHg3ODc5LCAweDI0RDcsDQotICAgIDB4Nzg3QiwgMHgyNERCLCAweDc4N0MsIDB4MEVBNSwgMHg3ODdFLCAweDI3NEQsIDB4Nzg3RiwgMHgwRUE4LA0KLSAgICAweDc4ODAsIDB4MjREOSwgMHg3ODgxLCAweDM2RTgsIDB4Nzg4MywgMHgyNEQ2LCAweDc4ODQsIDB4MjREMSwNCi0gICAgMHg3ODg1LCAweDI0RDMsIDB4Nzg4NiwgMHgyNEQ0LCAweDc4ODcsIDB4MjRDRCwgMHg3ODg5LCAweDBFQTQsDQotICAgIDB4Nzg4QywgMHgwRUEzLCAweDc4OEUsIDB4MEU5RiwgMHg3ODhGLCAweDI0RDAsIDB4Nzg5MSwgMHgwRUE2LA0KLSAgICAweDc4OTMsIDB4MEVBNywgMHg3ODk0LCAweDI0Q0YsIDB4Nzg5NSwgMHgyNEQyLCAweDc4OTYsIDB4MjREQSwNCi0gICAgMHg3ODk3LCAweDBFQTEsIDB4Nzg5OCwgMHgwRUEyLCAweDc4OTksIDB4MjREOCwgMHg3ODlBLCAweDI0Q0UsDQotICAgIDB4Nzg5RSwgMHgyNzRGLCAweDc4OUYsIDB4MTAzRiwgMHg3OEEwLCAweDI3NTEsIDB4NzhBMSwgMHgyNEQ1LA0KLSAgICAweDc4QTIsIDB4Mjc1MywgMHg3OEEzLCAweDEwNDMsIDB4NzhBNCwgMHgyNzU0LCAweDc4QTUsIDB4Mjc1MCwNCi0gICAgMHg3OEE3LCAweDEwNDAsIDB4NzhBOCwgMHgyNzRDLCAweDc4QTksIDB4MTA0MiwgMHg3OEFBLCAweDI3NDksDQotICAgIDB4NzhBQiwgMHgyNzRFLCAweDc4QUMsIDB4Mjc1MiwgMHg3OEFELCAweDI3NEIsIDB4NzhCMCwgMHgwRUEwLA0KLSAgICAweDc4QjIsIDB4Mjc0OCwgMHg3OEIzLCAweDEwNDEsIDB4NzhCNCwgMHgyNzRBLCAweDc4QkEsIDB4MTFCRCwNCi0gICAgMHg3OEJCLCAweDI5OTIsIDB4NzhCQywgMHgxMUMxLCAweDc4QkUsIDB4MTFCRiwgMHg3OEMxLCAweDEwM0UsDQotICAgIDB4NzhDMywgMHgyOTk5LCAweDc4QzQsIDB4Mjk5QSwgMHg3OEM1LCAweDExQkMsIDB4NzhDOCwgMHgyOTk4LA0KLSAgICAweDc4QzksIDB4Mjk5QiwgMHg3OENBLCAweDExQkUsIDB4NzhDQiwgMHgxMUJCLCAweDc4Q0MsIDB4Mjk5NCwNCi0gICAgMHg3OENELCAweDI5OTEsIDB4NzhDRSwgMHgyOTk2LCAweDc4Q0YsIDB4Mjk5MywgMHg3OEQwLCAweDExQzIsDQotICAgIDB4NzhEMSwgMHgyOTk1LCAweDc4RDQsIDB4Mjk5NywgMHg3OEQ1LCAweDExQzAsIDB4NzhEQSwgMHgxMzBDLA0KLSAgICAweDc4REIsIDB4MkJFRiwgMHg3OERELCAweDJCRTksIDB4NzhERSwgMHgyQkVELCAweDc4REYsIDB4MkJGMywNCi0gICAgMHg3OEUwLCAweDJCRjQsIDB4NzhFMSwgMHgyQkYwLCAweDc4RTIsIDB4MkJGMSwgMHg3OEUzLCAweDJCRUUsDQotICAgIDB4NzhFNSwgMHgyQkVCLCAweDc4RTcsIDB4MTMwRSwgMHg3OEU4LCAweDEzMEIsIDB4NzhFOSwgMHgyQkVBLA0KLSAgICAweDc4RUEsIDB4MkJFQywgMHg3OEVDLCAweDEzMEQsIDB4NzhFRCwgMHgyQkYyLCAweDc4RUYsIDB4MTQyMiwNCi0gICAgMHg3OEYyLCAweDJEQzgsIDB4NzhGMywgMHgyREMyLCAweDc4RjQsIDB4MTQyMSwgMHg3OEY3LCAweDE0MUYsDQotICAgIDB4NzhGOSwgMHgyRENBLCAweDc4RkEsIDB4MTQyMCwgMHg3OEZCLCAweDJEQzUsIDB4NzhGQywgMHgyREM2LA0KLSAgICAweDc4RkQsIDB4MkRDMywgMHg3OEZFLCAweDJEQ0IsIDB4NzhGRiwgMHgyREM3LCAweDc5MDEsIDB4MTQyMywNCi0gICAgMHg3OTAyLCAweDJEQzQsIDB4NzkwNCwgMHgyRENDLCAweDc5MDUsIDB4MkRDOSwgMHg3OTA5LCAweDJGNkYsDQotICAgIDB4NzkwQywgMHgyRjZDLCAweDc5MEUsIDB4MTRGRSwgMHg3OTEwLCAweDJGNzAsIDB4NzkxMSwgMHgyRjcyLA0KLSAgICAweDc5MTIsIDB4MkY3MSwgMHg3OTEzLCAweDJGNkQsIDB4NzkxNCwgMHgyRjZFLCAweDc5MTcsIDB4MzBDRSwNCi0gICAgMHg3OTE5LCAweDE1OUYsIDB4NzkxQiwgMHgzMENCLCAweDc5MUMsIDB4MzBDRCwgMHg3OTFELCAweDMwQ0EsDQotICAgIDB4NzkxRSwgMHgzMENGLCAweDc5MjEsIDB4MzBDQywgMHg3OTIzLCAweDMyMDQsIDB4NzkyNCwgMHgzMjA3LA0KLSAgICAweDc5MjUsIDB4MzIwMywgMHg3OTI2LCAweDE2MjQsIDB4NzkyNywgMHgzMjA1LCAweDc5MjgsIDB4MzIwNiwNCi0gICAgMHg3OTI5LCAweDMyMDgsIDB4NzkyQSwgMHgxNjI1LCAweDc5MkIsIDB4MTYyNywgMHg3OTJDLCAweDE2MjYsDQotICAgIDB4NzkyRCwgMHgzMkU2LCAweDc5MkYsIDB4MzJFOCwgMHg3OTMxLCAweDMyRTcsIDB4NzkzNSwgMHgzMzk3LA0KLSAgICAweDc5MzgsIDB4MzQ5MCwgMHg3OTM5LCAweDM0RDUsIDB4NzkzQSwgMHgwMzZBLCAweDc5M0QsIDB4MThENywNCi0gICAgMHg3OTNFLCAweDA2NUYsIDB4NzkzRiwgMHgxQTIwLCAweDc5NDAsIDB4MDY2MCwgMHg3OTQxLCAweDA2NjEsDQotICAgIDB4Nzk0MiwgMHgxQTFGLCAweDc5NDQsIDB4MUJBRiwgMHg3OTQ1LCAweDFCQUUsIDB4Nzk0NiwgMHgwN0JGLA0KLSAgICAweDc5NDcsIDB4MDdDMiwgMHg3OTQ4LCAweDA3QzEsIDB4Nzk0OSwgMHgwN0MwLCAweDc5NEEsIDB4MUJBQiwNCi0gICAgMHg3OTRCLCAweDFCQUQsIDB4Nzk0QywgMHgxQkFDLCAweDc5NEYsIDB4MUQ3NiwgMHg3OTUwLCAweDA5NTYsDQotICAgIDB4Nzk1MSwgMHgxRDdBLCAweDc5NTIsIDB4MUQ3OSwgMHg3OTUzLCAweDFENzgsIDB4Nzk1NCwgMHgxRDc0LA0KLSAgICAweDc5NTUsIDB4MDk1NSwgMHg3OTU2LCAweDA5NTksIDB4Nzk1NywgMHgwOTVDLCAweDc5NUEsIDB4MDk1RCwNCi0gICAgMHg3OTVCLCAweDFENzUsIDB4Nzk1QywgMHgxRDc3LCAweDc5NUQsIDB4MDk1QiwgMHg3OTVFLCAweDA5NUEsDQotICAgIDB4Nzk1RiwgMHgwOTU4LCAweDc5NjAsIDB4MDk1NywgMHg3OTYxLCAweDFGQzQsIDB4Nzk2MywgMHgxRkMyLA0KLSAgICAweDc5NjQsIDB4MUZCRSwgMHg3OTY1LCAweDBCNDIsIDB4Nzk2NywgMHgxRkJGLCAweDc5NjgsIDB4MEI0MywNCi0gICAgMHg3OTY5LCAweDFGQzAsIDB4Nzk2QSwgMHgxRkMxLCAweDc5NkIsIDB4MUZDMywgMHg3OTZELCAweDBCNDQsDQotICAgIDB4Nzk3MCwgMHgyMjRBLCAweDc5NzIsIDB4MjI0OSwgMHg3OTczLCAweDIyNDgsIDB4Nzk3NCwgMHgyMjQ3LA0KLSAgICAweDc5NzksIDB4MjRERiwgMHg3OTdBLCAweDBFQTksIDB4Nzk3QywgMHgyNERDLCAweDc5N0QsIDB4MjRERSwNCi0gICAgMHg3OTdGLCAweDBFQUEsIDB4Nzk4MSwgMHgwRUFCLCAweDc5ODIsIDB4MjRERCwgMHg3OTg4LCAweDI3NUQsDQotICAgIDB4Nzk4QSwgMHgyNzU2LCAweDc5OEIsIDB4Mjc1NywgMHg3OThELCAweDEwNDYsIDB4Nzk4RSwgMHgxMDQ0LA0KLSAgICAweDc5OEYsIDB4MTA0NSwgMHg3OTkwLCAweDI3NUYsIDB4Nzk5MiwgMHgyNzVFLCAweDc5OTMsIDB4Mjc1QiwNCi0gICAgMHg3OTk0LCAweDI3NUEsIDB4Nzk5NSwgMHgyNzU5LCAweDc5OTYsIDB4Mjc1OCwgMHg3OTk3LCAweDI3NUMsDQotICAgIDB4Nzk5OCwgMHgyNzU1LCAweDc5OUEsIDB4Mjk5QywgMHg3OTlCLCAweDI5QTEsIDB4Nzk5QywgMHgyOTlGLA0KLSAgICAweDc5QTAsIDB4Mjk5RSwgMHg3OUExLCAweDI5OUQsIDB4NzlBMiwgMHgyOUEwLCAweDc5QTQsIDB4MkJGNSwNCi0gICAgMHg3OUE2LCAweDEzMEYsIDB4NzlBNywgMHgxNDI0LCAweDc5QTgsIDB4MkRDRSwgMHg3OUFBLCAweDE0MjUsDQotICAgIDB4NzlBQiwgMHgyRENELCAweDc5QUMsIDB4MkY3NCwgMHg3OUFELCAweDJGNzMsIDB4NzlBRSwgMHgxNEZGLA0KLSAgICAweDc5QjAsIDB4MzBEMCwgMHg3OUIxLCAweDE1QTAsIDB4NzlCMiwgMHgzMjA5LCAweDc5QjMsIDB4MTZDRiwNCi0gICAgMHg3OUI0LCAweDMzOTgsIDB4NzlCNiwgMHgzNDkyLCAweDc5QjcsIDB4MzQ5MSwgMHg3OUI4LCAweDE3QjIsDQotICAgIDB4NzlCOSwgMHgwN0MzLCAweDc5QkEsIDB4MDdDNCwgMHg3OUJCLCAweDFGQzUsIDB4NzlCRCwgMHgwRUFELA0KLSAgICAweDc5QkUsIDB4MDM2QiwgMHg3OUJGLCAweDA0RjksIDB4NzlDMCwgMHgwNEY4LCAweDc5QzEsIDB4MDRGNywNCi0gICAgMHg3OUM1LCAweDFBMjEsIDB4NzlDOCwgMHgwNjYzLCAweDc5QzksIDB4MDY2MiwgMHg3OUNCLCAweDA3QzcsDQotICAgIDB4NzlDRCwgMHgxQkIxLCAweDc5Q0UsIDB4MUJCNCwgMHg3OUNGLCAweDFCQjIsIDB4NzlEMSwgMHgwN0M1LA0KLSAgICAweDc5RDIsIDB4MDdDNiwgMHg3OUQ1LCAweDFCQjAsIDB4NzlENiwgMHgxQkIzLCAweDc5RDgsIDB4MDk2NCwNCi0gICAgMHg3OURDLCAweDFEODEsIDB4NzlERCwgMHgxRDgzLCAweDc5REUsIDB4MUQ4MiwgMHg3OURGLCAweDA5NjEsDQotICAgIDB4NzlFMCwgMHgxRDdELCAweDc5RTMsIDB4MDk1RiwgMHg3OUU0LCAweDA5NUUsIDB4NzlFNiwgMHgwOTYyLA0KLSAgICAweDc5RTcsIDB4MDk2MCwgMHg3OUU5LCAweDA5NjMsIDB4NzlFQSwgMHgxRDgwLCAweDc5RUIsIDB4MUQ3QiwNCi0gICAgMHg3OUVDLCAweDFEN0MsIDB4NzlFRCwgMHgxRDdGLCAweDc5RUUsIDB4MUQ3RSwgMHg3OUY2LCAweDFGQzgsDQotICAgIDB4NzlGNywgMHgxRkM5LCAweDc5RjgsIDB4MUZDNywgMHg3OUZBLCAweDFGQzYsIDB4NzlGQiwgMHgwQjQ1LA0KLSAgICAweDdBMDAsIDB4MENGRCwgMHg3QTAyLCAweDIyNEIsIDB4N0EwMywgMHgyMjRELCAweDdBMDQsIDB4MjI0RiwNCi0gICAgMHg3QTA1LCAweDBDRkMsIDB4N0EwOCwgMHgwQ0ZBLCAweDdBMEEsIDB4MjI0QywgMHg3QTBCLCAweDBDRkIsDQotICAgIDB4N0EwQywgMHgyMjRFLCAweDdBMEQsIDB4MENGOSwgMHg3QTEwLCAweDI0RTksIDB4N0ExMSwgMHgyNEUwLA0KLSAgICAweDdBMTIsIDB4MjRFMywgMHg3QTEzLCAweDI0RTcsIDB4N0ExNCwgMHgwRUIxLCAweDdBMTUsIDB4MjRFNSwNCi0gICAgMHg3QTE3LCAweDI0RTQsIDB4N0ExOCwgMHgyNEUxLCAweDdBMTksIDB4MjRFMiwgMHg3QTFBLCAweDBFQUYsDQotICAgIDB4N0ExQiwgMHgyNEU4LCAweDdBMUMsIDB4MEVBRSwgMHg3QTFFLCAweDBFQjMsIDB4N0ExRiwgMHgwRUIyLA0KLSAgICAweDdBMjAsIDB4MEVCMCwgMHg3QTIyLCAweDI0RTYsIDB4N0EyNiwgMHgyNzY1LCAweDdBMjgsIDB4Mjc2NCwNCi0gICAgMHg3QTJCLCAweDI3NjAsIDB4N0EyRSwgMHgxMDQ3LCAweDdBMkYsIDB4Mjc2MywgMHg3QTMwLCAweDI3NjIsDQotICAgIDB4N0EzMSwgMHgxMDQ4LCAweDdBMzcsIDB4MTFDNywgMHg3QTM5LCAweDI5QTMsIDB4N0EzQiwgMHgxMUM4LA0KLSAgICAweDdBM0MsIDB4MTFDNCwgMHg3QTNELCAweDExQzYsIDB4N0EzRiwgMHgxMUMzLCAweDdBNDAsIDB4MTFDNSwNCi0gICAgMHg3QTQ0LCAweDJCRjYsIDB4N0E0NiwgMHgxMzEyLCAweDdBNDcsIDB4MkJGOCwgMHg3QTQ4LCAweDJCRjcsDQotICAgIDB4N0E0QSwgMHgyNzYxLCAweDdBNEIsIDB4MTMxNCwgMHg3QTRDLCAweDEzMTMsIDB4N0E0RCwgMHgxMzEwLA0KLSAgICAweDdBNEUsIDB4MTMxMSwgMHg3QTU0LCAweDJERDMsIDB4N0E1NiwgMHgyREQxLCAweDdBNTcsIDB4MTQyNiwNCi0gICAgMHg3QTU4LCAweDJERDIsIDB4N0E1QSwgMHgyREQ0LCAweDdBNUIsIDB4MkREMCwgMHg3QTVDLCAweDJEQ0YsDQotICAgIDB4N0E1RiwgMHgyRjc1LCAweDdBNjAsIDB4MTUwMiwgMHg3QTYxLCAweDE1MDAsIDB4N0E2MiwgMHgxNTAxLA0KLSAgICAweDdBNjcsIDB4MzBEMSwgMHg3QTY4LCAweDMwRDIsIDB4N0E2OSwgMHgxNUEyLCAweDdBNkIsIDB4MTVBMSwNCi0gICAgMHg3QTZDLCAweDMyMEIsIDB4N0E2RCwgMHgzMjBDLCAweDdBNkUsIDB4MzIwQSwgMHg3QTcwLCAweDMzOTksDQotICAgIDB4N0E3MSwgMHgzMzlBLCAweDdBNzQsIDB4MDM2QywgMHg3QTc1LCAweDE4MTEsIDB4N0E3NiwgMHgwNEZBLA0KLSAgICAweDdBNzgsIDB4MUEyMiwgMHg3QTc5LCAweDA2NjUsIDB4N0E3QSwgMHgwNjY0LCAweDdBN0IsIDB4MUEyMywNCi0gICAgMHg3QTdFLCAweDFCQjYsIDB4N0E3RiwgMHgwN0M4LCAweDdBODAsIDB4MUJCNSwgMHg3QTgxLCAweDA3QzksDQotICAgIDB4N0E4NCwgMHgwOTY1LCAweDdBODUsIDB4MUQ4NiwgMHg3QTg2LCAweDFEODQsIDB4N0E4NywgMHgxRDhBLA0KLSAgICAweDdBODgsIDB4MDk2NiwgMHg3QTg5LCAweDFEODUsIDB4N0E4QSwgMHgxRDg5LCAweDdBOEIsIDB4MUQ4NywNCi0gICAgMHg3QThDLCAweDFEODgsIDB4N0E4RiwgMHgxRkNBLCAweDdBOTAsIDB4MUZDQywgMHg3QTkyLCAweDBCNDYsDQotICAgIDB4N0E5NCwgMHgxRkNCLCAweDdBOTUsIDB4MEI0NywgMHg3QTk2LCAweDBEMDAsIDB4N0E5NywgMHgwQ0ZGLA0KLSAgICAweDdBOTgsIDB4MENGRSwgMHg3QTk5LCAweDIyNTAsIDB4N0E5RSwgMHgyNEVDLCAweDdBOUYsIDB4MEVCNCwNCi0gICAgMHg3QUEwLCAweDBFQjUsIDB4N0FBMiwgMHgyNEVCLCAweDdBQTMsIDB4MjRFQSwgMHg3QUE4LCAweDI3NjYsDQotICAgIDB4N0FBOSwgMHgxMDRBLCAweDdBQUEsIDB4MTA0OSwgMHg3QUFCLCAweDI3NjcsIDB4N0FBQywgMHgyNzY4LA0KLSAgICAweDdBQUUsIDB4MTFDQSwgMHg3QUFGLCAweDExQzksIDB4N0FCMSwgMHgyQkZDLCAweDdBQjIsIDB4MjlBNCwNCi0gICAgMHg3QUIzLCAweDI5QTYsIDB4N0FCNCwgMHgyOUE1LCAweDdBQjUsIDB4MkJGQiwgMHg3QUI2LCAweDJCRjksDQotICAgIDB4N0FCNywgMHgyQkZELCAweDdBQjgsIDB4MkJGQSwgMHg3QUJBLCAweDEzMTUsIDB4N0FCRSwgMHgyREQ1LA0KLSAgICAweDdBQkYsIDB4MTQyNywgMHg3QUMwLCAweDJERDYsIDB4N0FDMSwgMHgyREQ3LCAweDdBQzQsIDB4MTUwMywNCi0gICAgMHg3QUM1LCAweDE1MDQsIDB4N0FDNywgMHgxNjI4LCAweDdBQ0EsIDB4MTZGRiwgMHg3QUNCLCAweDAzNkQsDQotICAgIDB4N0FEMSwgMHgxQkI3LCAweDdBRDgsIDB4MUQ4QiwgMHg3QUQ5LCAweDA5NjcsIDB4N0FERiwgMHgwQkRFLA0KLSAgICAweDdBRTAsIDB4MEJERCwgMHg3QUUzLCAweDBEMDIsIDB4N0FFNCwgMHgyMjUyLCAweDdBRTUsIDB4MEQwMSwNCi0gICAgMHg3QUU2LCAweDIyNTEsIDB4N0FFQiwgMHgyNEVELCAweDdBRUQsIDB4MTA0QiwgMHg3QUVFLCAweDI3NjksDQotICAgIDB4N0FFRiwgMHgxMDRDLCAweDdBRjYsIDB4MTYyOSwgMHg3QUY3LCAweDMyMEQsIDB4N0FGOSwgMHgwM0Y2LA0KLSAgICAweDdBRkEsIDB4MDY2NiwgMHg3QUZCLCAweDFBMjQsIDB4N0FGRCwgMHgwN0NCLCAweDdBRkYsIDB4MDdDQSwNCi0gICAgMHg3QjAwLCAweDFCQjgsIDB4N0IwMSwgMHgxQkI5LCAweDdCMDQsIDB4MUQ4RCwgMHg3QjA1LCAweDFEOEYsDQotICAgIDB4N0IwNiwgMHgwOTY4LCAweDdCMDgsIDB4MUQ5MSwgMHg3QjA5LCAweDFEOTQsIDB4N0IwQSwgMHgxRDkyLA0KLSAgICAweDdCMEUsIDB4MUQ5MywgMHg3QjBGLCAweDFEOTAsIDB4N0IxMCwgMHgxRDhDLCAweDdCMTEsIDB4MDk2OSwNCi0gICAgMHg3QjEyLCAweDFEOTUsIDB4N0IxMywgMHgxRDhFLCAweDdCMTgsIDB4MUZENSwgMHg3QjE5LCAweDBCNEQsDQotICAgIDB4N0IxQSwgMHgxRkRFLCAweDdCMUIsIDB4MEI0QSwgMHg3QjFELCAweDFGRDcsIDB4N0IxRSwgMHgwQjRFLA0KLSAgICAweDdCMjAsIDB4MEI0OCwgMHg3QjIyLCAweDFGRDIsIDB4N0IyMywgMHgxRkRGLCAweDdCMjQsIDB4MUZEMywNCi0gICAgMHg3QjI1LCAweDFGRDAsIDB4N0IyNiwgMHgwQjRDLCAweDdCMjgsIDB4MEI0OSwgMHg3QjJBLCAweDFGRDYsDQotICAgIDB4N0IyQiwgMHgxRkQ5LCAweDdCMkMsIDB4MEI0QiwgMHg3QjJELCAweDFGREEsIDB4N0IyRSwgMHgwQjRGLA0KLSAgICAweDdCMkYsIDB4MUZEQiwgMHg3QjMwLCAweDFGRDEsIDB4N0IzMSwgMHgxRkQ4LCAweDdCMzIsIDB4MUZEQywNCi0gICAgMHg3QjMzLCAweDFGRDQsIDB4N0IzNCwgMHgxRkNGLCAweDdCMzUsIDB4MUZDRCwgMHg3QjM4LCAweDFGREQsDQotICAgIDB4N0IzQiwgMHgxRkNFLCAweDdCNDAsIDB4MjI1OSwgMHg3QjQ0LCAweDIyNTUsIDB4N0I0NSwgMHgyMjVCLA0KLSAgICAweDdCNDYsIDB4MEQwNSwgMHg3QjQ3LCAweDIyNTQsIDB4N0I0OCwgMHgyMjU2LCAweDdCNDksIDB4MEQwMywNCi0gICAgMHg3QjRBLCAweDIyNTMsIDB4N0I0QiwgMHgwRDBBLCAweDdCNEMsIDB4MjI1NywgMHg3QjRELCAweDBEMDksDQotICAgIDB4N0I0RSwgMHgyMjU4LCAweDdCNEYsIDB4MEQwQiwgMHg3QjUwLCAweDBEMDYsIDB4N0I1MSwgMHgwRDBDLA0KLSAgICAweDdCNTIsIDB4MEQwNywgMHg3QjU0LCAweDBEMDgsIDB4N0I1NiwgMHgwRDA0LCAweDdCNTgsIDB4MjI1QSwNCi0gICAgMHg3QjYwLCAweDBFQjgsIDB4N0I2MSwgMHgyNEY4LCAweDdCNjMsIDB4MjRGQiwgMHg3QjY0LCAweDI0RUYsDQotICAgIDB4N0I2NSwgMHgyNEY0LCAweDdCNjYsIDB4MjRFRSwgMHg3QjY3LCAweDBFQkEsIDB4N0I2OSwgMHgyNEYyLA0KLSAgICAweDdCNkQsIDB4MjRGMCwgMHg3QjZFLCAweDBFQjksIDB4N0I3MCwgMHgyNEY3LCAweDdCNzEsIDB4MjRGNiwNCi0gICAgMHg3QjcyLCAweDI0RjMsIDB4N0I3MywgMHgyNEY1LCAweDdCNzQsIDB4MjRGMSwgMHg3Qjc1LCAweDEwNTAsDQotICAgIDB4N0I3NiwgMHgyNEZBLCAweDdCNzcsIDB4MEVCNiwgMHg3Qjc4LCAweDI0RjksIDB4N0I4MiwgMHgyNzc5LA0KLSAgICAweDdCODQsIDB4MTA1NywgMHg3Qjg1LCAweDI3NzQsIDB4N0I4NywgMHgxMDU2LCAweDdCODgsIDB4Mjc2QSwNCi0gICAgMHg3QjhBLCAweDI3NkMsIDB4N0I4QiwgMHgxMDRGLCAweDdCOEMsIDB4Mjc3MSwgMHg3QjhELCAweDI3NzAsDQotICAgIDB4N0I4RSwgMHgyNzczLCAweDdCOEYsIDB4MTA1NCwgMHg3QjkwLCAweDI3NkUsIDB4N0I5MSwgMHgyNzZELA0KLSAgICAweDdCOTQsIDB4MTA1MywgMHg3Qjk1LCAweDEwNEUsIDB4N0I5NiwgMHgyNzZGLCAweDdCOTcsIDB4MTA1MSwNCi0gICAgMHg3Qjk4LCAweDI3NzUsIDB4N0I5OSwgMHgyNzc3LCAweDdCOUIsIDB4Mjc3MiwgMHg3QjlDLCAweDI3NkIsDQotICAgIDB4N0I5RCwgMHgxMDUyLCAweDdCQTAsIDB4MTFEMiwgMHg3QkExLCAweDEwNEQsIDB4N0JBNCwgMHgyNzc4LA0KLSAgICAweDdCQUMsIDB4MjlBQSwgMHg3QkFELCAweDExQ0IsIDB4N0JBRiwgMHgyOUFDLCAweDdCQjEsIDB4MTFDQywNCi0gICAgMHg3QkI0LCAweDExQ0UsIDB4N0JCNSwgMHgyOUFGLCAweDdCQjcsIDB4MjlBNywgMHg3QkI4LCAweDEwNTUsDQotICAgIDB4N0JCOSwgMHgyOUFELCAweDdCQkUsIDB4MjlBOSwgMHg3QkMwLCAweDBFQjcsIDB4N0JDMSwgMHgxMUQxLA0KLSAgICAweDdCQzQsIDB4MTFDRCwgMHg3QkM2LCAweDExQ0YsIDB4N0JDNywgMHgxMUQwLCAweDdCQzksIDB4MTMxOCwNCi0gICAgMHg3QkNBLCAweDI5QUUsIDB4N0JDQiwgMHgyOUE4LCAweDdCQ0MsIDB4MTFEMywgMHg3QkNFLCAweDI5QUIsDQotICAgIDB4N0JENCwgMHgyQzA3LCAweDdCRDUsIDB4MkMwMiwgMHg3QkQ4LCAweDJDMEMsIDB4N0JEOSwgMHgxMzE2LA0KLSAgICAweDdCREEsIDB4MkMwNCwgMHg3QkRCLCAweDEzMUEsIDB4N0JEQywgMHgyQzBBLCAweDdCREQsIDB4MkMwMSwNCi0gICAgMHg3QkRFLCAweDJCRkUsIDB4N0JERiwgMHgyQzBELCAweDdCRTAsIDB4MTQyRCwgMHg3QkUxLCAweDEzMUIsDQotICAgIDB4N0JFMiwgMHgyQzA5LCAweDdCRTMsIDB4MkJGRiwgMHg3QkU0LCAweDEzMTksIDB4N0JFNSwgMHgyQzAzLA0KLSAgICAweDdCRTYsIDB4MTMxRCwgMHg3QkU3LCAweDJDMDAsIDB4N0JFOCwgMHgyQzA1LCAweDdCRTksIDB4MTMxQywNCi0gICAgMHg3QkVBLCAweDJDMDgsIDB4N0JFQiwgMHgyQzBCLCAweDdCRjAsIDB4MkRFOSwgMHg3QkYxLCAweDJERUEsDQotICAgIDB4N0JGMiwgMHgyRERBLCAweDdCRjMsIDB4MkRFMSwgMHg3QkY0LCAweDJEREYsIDB4N0JGNywgMHgxNDJCLA0KLSAgICAweDdCRjgsIDB4MkRFNiwgMHg3QkY5LCAweDJDMDYsIDB4N0JGQiwgMHgyRERELCAweDdCRkQsIDB4MkRFNywNCi0gICAgMHg3QkZFLCAweDE0MkEsIDB4N0JGRiwgMHgyRERDLCAweDdDMDAsIDB4MkREQiwgMHg3QzAxLCAweDJERTUsDQotICAgIDB4N0MwMiwgMHgyREUyLCAweDdDMDMsIDB4MkRFNCwgMHg3QzA1LCAweDJERDgsIDB4N0MwNiwgMHgyREU4LA0KLSAgICAweDdDMDcsIDB4MTQyOCwgMHg3QzA5LCAweDJERTMsIDB4N0MwQSwgMHgyREVDLCAweDdDMEIsIDB4MkRFMCwNCi0gICAgMHg3QzBDLCAweDE0MkMsIDB4N0MwRCwgMHgxNDI5LCAweDdDMEUsIDB4MkRERSwgMHg3QzBGLCAweDJERDksDQotICAgIDB4N0MxMCwgMHgyREVCLCAweDdDMTEsIDB4MTMxNywgMHg3QzE5LCAweDJGNzgsIDB4N0MxQywgMHgyRjc2LA0KLSAgICAweDdDMUQsIDB4MkY3QywgMHg3QzFFLCAweDE1MDgsIDB4N0MxRiwgMHgyRjdBLCAweDdDMjAsIDB4MkY3OSwNCi0gICAgMHg3QzIxLCAweDE1MEEsIDB4N0MyMiwgMHgyRjdGLCAweDdDMjMsIDB4MTUwOSwgMHg3QzI1LCAweDJGODAsDQotICAgIDB4N0MyNiwgMHgyRjdELCAweDdDMjcsIDB4MTUwNiwgMHg3QzI4LCAweDJGN0UsIDB4N0MyOSwgMHgyRjc3LA0KLSAgICAweDdDMkEsIDB4MTUwNywgMHg3QzJCLCAweDE1MDUsIDB4N0MyQywgMHgzMEQ2LCAweDdDMkQsIDB4MkY3QiwNCi0gICAgMHg3QzMwLCAweDJGODEsIDB4N0MzMywgMHgzMEQzLCAweDdDMzcsIDB4MTVBNywgMHg3QzM4LCAweDE1QTUsDQotICAgIDB4N0MzOSwgMHgzMEQ1LCAweDdDM0IsIDB4MzBENywgMHg3QzNDLCAweDMwRDQsIDB4N0MzRCwgMHgxNUE2LA0KLSAgICAweDdDM0UsIDB4MTVBMywgMHg3QzNGLCAweDE1QTQsIDB4N0M0MCwgMHgxNUE4LCAweDdDNDMsIDB4MTYyQiwNCi0gICAgMHg3QzQ1LCAweDMyMTIsIDB4N0M0NywgMHgzMjExLCAweDdDNDgsIDB4MzIwRiwgMHg3QzQ5LCAweDMyMEUsDQotICAgIDB4N0M0QSwgMHgzMjEwLCAweDdDNEMsIDB4MTYyQSwgMHg3QzRELCAweDE2MkMsIDB4N0M1MCwgMHgxNjgxLA0KLSAgICAweDdDNTMsIDB4MzJFQSwgMHg3QzU0LCAweDMyRTksIDB4N0M1NywgMHgzMzlCLCAweDdDNTksIDB4MzM5RCwNCi0gICAgMHg3QzVBLCAweDMzOUYsIDB4N0M1QiwgMHgzMzlFLCAweDdDNUMsIDB4MzM5QywgMHg3QzVGLCAweDE2RDEsDQotICAgIDB4N0M2MCwgMHgxNkQwLCAweDdDNjMsIDB4MTcwMSwgMHg3QzY0LCAweDE3MDAsIDB4N0M2NSwgMHgxNzAyLA0KLSAgICAweDdDNjYsIDB4MzQyQiwgMHg3QzY3LCAweDM0MkEsIDB4N0M2OSwgMHgzNEQ2LCAweDdDNkEsIDB4MzQ5MywNCi0gICAgMHg3QzZCLCAweDM0RDcsIDB4N0M2QywgMHgxNzQ1LCAweDdDNkUsIDB4MTc0NiwgMHg3QzZGLCAweDM1MDcsDQotICAgIDB4N0M3MiwgMHgxNzZCLCAweDdDNzMsIDB4MDNGNywgMHg3Qzc1LCAweDFBMjUsIDB4N0M3OCwgMHgxQkJCLA0KLSAgICAweDdDNzksIDB4MUJCQywgMHg3QzdBLCAweDFCQkEsIDB4N0M3RCwgMHgwN0NDLCAweDdDN0YsIDB4MUJCRCwNCi0gICAgMHg3QzgwLCAweDFCQkUsIDB4N0M4MSwgMHgxQkJGLCAweDdDODQsIDB4MUQ5NiwgMHg3Qzg1LCAweDFEOUMsDQotICAgIDB4N0M4OCwgMHgxRDlBLCAweDdDODksIDB4MDk2QSwgMHg3QzhBLCAweDFEOTgsIDB4N0M4QywgMHgxRDk5LA0KLSAgICAweDdDOEQsIDB4MUQ5QiwgMHg3QzkxLCAweDFEOTcsIDB4N0M5MiwgMHgwQjUwLCAweDdDOTQsIDB4MUZFMCwNCi0gICAgMHg3Qzk1LCAweDBCNTIsIDB4N0M5NiwgMHgxRkUyLCAweDdDOTcsIDB4MEI1MSwgMHg3Qzk4LCAweDFGRTEsDQotICAgIDB4N0M5RSwgMHgyMjVELCAweDdDOUYsIDB4MEQwRCwgMHg3Q0ExLCAweDIyNUYsIDB4N0NBMiwgMHgyMjVDLA0KLSAgICAweDdDQTMsIDB4MUZFMywgMHg3Q0E1LCAweDBEMEUsIDB4N0NBNywgMHgzNkVELCAweDdDQTgsIDB4MjI1RSwNCi0gICAgMHg3Q0FGLCAweDI0RkUsIDB4N0NCMSwgMHgwRUJCLCAweDdDQjIsIDB4MjRGQywgMHg3Q0IzLCAweDBFQkMsDQotICAgIDB4N0NCNCwgMHgyNEZELCAweDdDQjUsIDB4MEVCRCwgMHg3Q0I5LCAweDEwNTgsIDB4N0NCQSwgMHgyNzdELA0KLSAgICAweDdDQkIsIDB4Mjc3QSwgMHg3Q0JDLCAweDI3N0MsIDB4N0NCRCwgMHgxMDU5LCAweDdDQkUsIDB4MTA1QSwNCi0gICAgMHg3Q0JGLCAweDI3N0IsIDB4N0NDNSwgMHgyOUIwLCAweDdDQzgsIDB4MjlCMSwgMHg3Q0NBLCAweDExRDQsDQotICAgIDB4N0NDQiwgMHgyOUIzLCAweDdDQ0MsIDB4MjlCMiwgMHg3Q0NFLCAweDAxMjEsIDB4N0NEMCwgMHgyQzExLA0KLSAgICAweDdDRDEsIDB4MkMxMiwgMHg3Q0QyLCAweDJDMEUsIDB4N0NENCwgMHgyQzBGLCAweDdDRDUsIDB4MTMxRSwNCi0gICAgMHg3Q0Q2LCAweDEzMUYsIDB4N0NENywgMHgyQzEwLCAweDdDRDksIDB4MTQzMywgMHg3Q0RDLCAweDE0MkYsDQotICAgIDB4N0NERCwgMHgxNDM0LCAweDdDREUsIDB4MTQzMCwgMHg3Q0RGLCAweDE0MzIsIDB4N0NFMCwgMHgxNDJFLA0KLSAgICAweDdDRTIsIDB4MTQzMSwgMHg3Q0U3LCAweDE1MEIsIDB4N0NFOCwgMHgyREVELCAweDdDRUEsIDB4MzBEOSwNCi0gICAgMHg3Q0VDLCAweDMwRDgsIDB4N0NFRSwgMHgzMjEzLCAweDdDRUYsIDB4MTYyRCwgMHg3Q0YwLCAweDE2MkUsDQotICAgIDB4N0NGMSwgMHgzM0ExLCAweDdDRjIsIDB4MzJFQiwgMHg3Q0Y0LCAweDMzQTAsIDB4N0NGNiwgMHgzNEQ4LA0KLSAgICAweDdDRjcsIDB4MzUxRCwgMHg3Q0Y4LCAweDAzRjgsIDB4N0NGQiwgMHgwNEZCLCAweDdDRkQsIDB4MUEyNiwNCi0gICAgMHg3Q0ZFLCAweDA2NjcsIDB4N0QwMCwgMHgwN0NGLCAweDdEMDEsIDB4MUJDMiwgMHg3RDAyLCAweDA3Q0QsDQotICAgIDB4N0QwMywgMHgxQkMwLCAweDdEMDQsIDB4MDdEMiwgMHg3RDA1LCAweDA3Q0UsIDB4N0QwNiwgMHgwN0QzLA0KLSAgICAweDdEMDcsIDB4MDdEMSwgMHg3RDA4LCAweDFCQzEsIDB4N0QwOSwgMHgwN0QwLCAweDdEMEEsIDB4MDk2RSwNCi0gICAgMHg3RDBCLCAweDA5NkQsIDB4N0QwQywgMHgxREE3LCAweDdEMEQsIDB4MDk3NiwgMHg3RDBFLCAweDFEQTAsDQotICAgIDB4N0QwRiwgMHgxREE2LCAweDdEMTAsIDB4MDk3MiwgMHg3RDExLCAweDFEOUYsIDB4N0QxMiwgMHgxREE1LA0KLSAgICAweDdEMTMsIDB4MURBMywgMHg3RDE0LCAweDA5NzEsIDB4N0QxNSwgMHgwOTczLCAweDdEMTYsIDB4MURBMiwNCi0gICAgMHg3RDE3LCAweDA5NkMsIDB4N0QxOCwgMHgxREExLCAweDdEMTksIDB4MDk3NywgMHg3RDFBLCAweDA5NzQsDQotICAgIDB4N0QxQiwgMHgwOTc4LCAweDdEMUMsIDB4MDk3NSwgMHg3RDFELCAweDFEOUUsIDB4N0QxRSwgMHgxRDlELA0KLSAgICAweDdEMUYsIDB4MURBNCwgMHg3RDIwLCAweDA5NkYsIDB4N0QyMSwgMHgwOTZCLCAweDdEMjIsIDB4MDk3MCwNCi0gICAgMHg3RDI4LCAweDFGRjIsIDB4N0QyOSwgMHgxRkVCLCAweDdEMkIsIDB4MEQxMywgMHg3RDJDLCAweDFGRUEsDQotICAgIDB4N0QyRSwgMHgwQjU2LCAweDdEMkYsIDB4MEI1RCwgMHg3RDMwLCAweDBCNUEsIDB4N0QzMSwgMHgwQjYwLA0KLSAgICAweDdEMzIsIDB4MEI1RiwgMHg3RDMzLCAweDBCNUIsIDB4N0QzNSwgMHgxRkU0LCAweDdEMzYsIDB4MUZFNywNCi0gICAgMHg3RDM4LCAweDFGRTYsIDB4N0QzOSwgMHgwQjU3LCAweDdEM0EsIDB4MUZFOCwgMHg3RDNCLCAweDFGRjEsDQotICAgIDB4N0QzQywgMHgwQjU4LCAweDdEM0QsIDB4MUZFNSwgMHg3RDNFLCAweDFGRUUsIDB4N0QzRiwgMHgxRkVGLA0KLSAgICAweDdENDAsIDB4MEI1OSwgMHg3RDQxLCAweDFGRUMsIDB4N0Q0MiwgMHgwQjVFLCAweDdENDMsIDB4MEI1NCwNCi0gICAgMHg3RDQ0LCAweDBCNUMsIDB4N0Q0NSwgMHgxRkU5LCAweDdENDYsIDB4MEI1MywgMHg3RDQ3LCAweDFGRUQsDQotICAgIDB4N0Q0QSwgMHgxRkYwLCAweDdENEUsIDB4MjI3MCwgMHg3RDRGLCAweDIyNjcsIDB4N0Q1MCwgMHgwRDEwLA0KLSAgICAweDdENTEsIDB4MjI2RSwgMHg3RDUyLCAweDIyNkIsIDB4N0Q1MywgMHgyMjYzLCAweDdENTQsIDB4MjI2QywNCi0gICAgMHg3RDU1LCAweDBEMTIsIDB4N0Q1NiwgMHgyMjY0LCAweDdENTgsIDB4MjI2MCwgMHg3RDVCLCAweDBFQzMsDQotICAgIDB4N0Q1QywgMHgyMjY5LCAweDdENUUsIDB4MEQwRiwgMHg3RDVGLCAweDIyNkYsIDB4N0Q2MSwgMHgwRDE2LA0KLSAgICAweDdENjIsIDB4MEQxOCwgMHg3RDYzLCAweDIyNjIsIDB4N0Q2NiwgMHgwRDE3LCAweDdENjcsIDB4MjI2NSwNCi0gICAgMHg3RDY4LCAweDBEMTEsIDB4N0Q2OSwgMHgyMjZELCAweDdENkEsIDB4MjI2NiwgMHg3RDZCLCAweDIyNkEsDQotICAgIDB4N0Q2RCwgMHgyMjY4LCAweDdENkUsIDB4MEQxNCwgMHg3RDZGLCAweDIyNjEsIDB4N0Q3MCwgMHgwRDE5LA0KLSAgICAweDdENzEsIDB4MEI1NSwgMHg3RDcyLCAweDBEMTUsIDB4N0Q3MywgMHgwRDFBLCAweDdENzksIDB4MEVCRiwNCi0gICAgMHg3RDdBLCAweDI1MDUsIDB4N0Q3QiwgMHgyNTA3LCAweDdEN0MsIDB4MjUwOSwgMHg3RDdELCAweDI1MEQsDQotICAgIDB4N0Q3RiwgMHgyNTAzLCAweDdEODAsIDB4MjUwMSwgMHg3RDgxLCAweDBFQzEsIDB4N0Q4MywgMHgyNTA4LA0KLSAgICAweDdEODQsIDB4MjUwQywgMHg3RDg1LCAweDI1MDQsIDB4N0Q4NiwgMHgyNTAwLCAweDdEODgsIDB4MjRGRiwNCi0gICAgMHg3RDhDLCAweDI1MEEsIDB4N0Q4RCwgMHgyNTAyLCAweDdEOEUsIDB4MjUwNiwgMHg3RDhGLCAweDBFQzIsDQotICAgIDB4N0Q5MSwgMHgwRUMwLCAweDdEOTIsIDB4MjUwRSwgMHg3RDkzLCAweDBFQkUsIDB4N0Q5NCwgMHgyNTBCLA0KLSAgICAweDdEOTYsIDB4Mjc4RSwgMHg3RDlDLCAweDEwNUQsIDB4N0Q5RCwgMHgyNzg2LCAweDdEOUUsIDB4MTFFMSwNCi0gICAgMHg3RDlGLCAweDI3OTAsIDB4N0RBMCwgMHgxMDYwLCAweDdEQTEsIDB4Mjc5NCwgMHg3REEyLCAweDEwNjYsDQotICAgIDB4N0RBMywgMHgyNzgxLCAweDdEQTYsIDB4Mjc5MSwgMHg3REE3LCAweDI3N0UsIDB4N0RBOSwgMHgyNzkzLA0KLSAgICAweDdEQUEsIDB4Mjc4MiwgMHg3REFDLCAweDEwNkQsIDB4N0RBRCwgMHgxMDZBLCAweDdEQUUsIDB4Mjc5MiwNCi0gICAgMHg3REFGLCAweDI3OEMsIDB4N0RCMCwgMHgxMDVDLCAweDdEQjEsIDB4MTA2NCwgMHg3REIyLCAweDEwNjMsDQotICAgIDB4N0RCNCwgMHgxMDYyLCAweDdEQjUsIDB4MTA2OCwgMHg3REI3LCAweDI3N0YsIDB4N0RCOCwgMHgxMDY5LA0KLSAgICAweDdEQjksIDB4Mjc4RCwgMHg3REJBLCAweDEwNjUsIDB4N0RCQiwgMHgxMDVCLCAweDdEQkMsIDB4Mjc4RiwNCi0gICAgMHg3REJELCAweDEwNUUsIDB4N0RCRSwgMHgxMDVGLCAweDdEQkYsIDB4MTA2NywgMHg3REMwLCAweDI3ODQsDQotICAgIDB4N0RDMSwgMHgyNzgzLCAweDdEQzIsIDB4Mjc4MCwgMHg3REM0LCAweDI3ODgsIDB4N0RDNSwgMHgyNzg1LA0KLSAgICAweDdEQzYsIDB4Mjc4OSwgMHg3REM3LCAweDEwNkMsIDB4N0RDOSwgMHgyNzk1LCAweDdEQ0EsIDB4MTA2MSwNCi0gICAgMHg3RENCLCAweDI3OEEsIDB4N0RDQywgMHgyNzhCLCAweDdEQ0UsIDB4Mjc4NywgMHg3REQyLCAweDEwNkIsDQotICAgIDB4N0RENywgMHgyOUI4LCAweDdERDgsIDB4MTFEOSwgMHg3REQ5LCAweDExRTIsIDB4N0REQSwgMHgxMURFLA0KLSAgICAweDdEREIsIDB4MjlCNSwgMHg3RERELCAweDExREIsIDB4N0RERSwgMHgxMURGLCAweDdEREYsIDB4MjlDMSwNCi0gICAgMHg3REUwLCAweDExRDUsIDB4N0RFMSwgMHgyOUI5LCAweDdERTMsIDB4MTFERCwgMHg3REU2LCAweDI5QkMsDQotICAgIDB4N0RFNywgMHgyOUI3LCAweDdERTgsIDB4MTFEQywgMHg3REU5LCAweDExRTAsIDB4N0RFQSwgMHgyOUI2LA0KLSAgICAweDdERUMsIDB4MTFEQSwgMHg3REVFLCAweDI5QzAsIDB4N0RFRiwgMHgxMUQ3LCAweDdERjAsIDB4MjlCRiwNCi0gICAgMHg3REYxLCAweDI5QkUsIDB4N0RGMiwgMHgxMUUzLCAweDdERjMsIDB4MjhDOCwgMHg3REY0LCAweDExRDYsDQotICAgIDB4N0RGNiwgMHgyOUJELCAweDdERjcsIDB4MjlCNCwgMHg3REY5LCAweDExRTQsIDB4N0RGQSwgMHgyOUJCLA0KLSAgICAweDdERkIsIDB4MTFEOCwgMHg3RTAzLCAweDI5QkEsIDB4N0UwOCwgMHgxMzIyLCAweDdFMDksIDB4MTMyNywNCi0gICAgMHg3RTBBLCAweDEzMjAsIDB4N0UwQiwgMHgyQzFGLCAweDdFMEMsIDB4MkMxNiwgMHg3RTBELCAweDJDMjIsDQotICAgIDB4N0UwRSwgMHgyQzFBLCAweDdFMEYsIDB4MkMyMCwgMHg3RTEwLCAweDEzMjgsIDB4N0UxMSwgMHgxMzIxLA0KLSAgICAweDdFMTIsIDB4MkMxMywgMHg3RTEzLCAweDJDMTksIDB4N0UxNCwgMHgyQzIzLCAweDdFMTUsIDB4MkMxQywNCi0gICAgMHg3RTE2LCAweDJDMjEsIDB4N0UxNywgMHgyQzE1LCAweDdFMUEsIDB4MkMxRCwgMHg3RTFCLCAweDEzMjMsDQotICAgIDB4N0UxQywgMHgyQzFCLCAweDdFMUQsIDB4MTMyNiwgMHg3RTFFLCAweDEzMjUsIDB4N0UxRiwgMHgyQzE3LA0KLSAgICAweDdFMjAsIDB4MkMxOCwgMHg3RTIxLCAweDJDMTQsIDB4N0UyMiwgMHgyQzFFLCAweDdFMjMsIDB4MTMyNCwNCi0gICAgMHg3RTI0LCAweDJDMjUsIDB4N0UyNSwgMHgyQzI0LCAweDdFMjksIDB4MkRGOCwgMHg3RTJBLCAweDJERjQsDQotICAgIDB4N0UyQiwgMHgxNDNCLCAweDdFMkQsIDB4MkRFRSwgMHg3RTJFLCAweDE0MzUsIDB4N0UyRiwgMHgxNDQ1LA0KLSAgICAweDdFMzAsIDB4MkRGQSwgMHg3RTMxLCAweDE0M0QsIDB4N0UzMiwgMHgxNDM5LCAweDdFMzMsIDB4MkRGMSwNCi0gICAgMHg3RTM0LCAweDE0NDAsIDB4N0UzNSwgMHgxNDQzLCAweDdFMzYsIDB4MkRGQywgMHg3RTM3LCAweDE0MzgsDQotICAgIDB4N0UzOCwgMHgyREYzLCAweDdFMzksIDB4MTQ0MSwgMHg3RTNBLCAweDJERkUsIDB4N0UzQiwgMHgyREZCLA0KLSAgICAweDdFM0MsIDB4MkRFRiwgMHg3RTNELCAweDE0M0MsIDB4N0UzRSwgMHgxNDM2LCAweDdFM0YsIDB4MTQ0NCwNCi0gICAgMHg3RTQwLCAweDJERjYsIDB4N0U0MSwgMHgxNDNGLCAweDdFNDIsIDB4MkRGMCwgMHg3RTQzLCAweDE0M0EsDQotICAgIDB4N0U0NCwgMHgyREZELCAweDdFNDUsIDB4MTQzRSwgMHg3RTQ2LCAweDE0MzcsIDB4N0U0NywgMHgyREY3LA0KLSAgICAweDdFNDgsIDB4MTQ0MiwgMHg3RTQ5LCAweDJERjUsIDB4N0U0QywgMHgyREY5LCAweDdFNTAsIDB4MkY4MywNCi0gICAgMHg3RTUxLCAweDJGODksIDB4N0U1MiwgMHgxNTExLCAweDdFNTMsIDB4MkY4QywgMHg3RTU0LCAweDE1MEMsDQotICAgIDB4N0U1NSwgMHgxNTBELCAweDdFNTYsIDB4MkY4NCwgMHg3RTU3LCAweDJGOEIsIDB4N0U1OCwgMHgyRjg2LA0KLSAgICAweDdFNTksIDB4MTUxMiwgMHg3RTVBLCAweDE1MEYsIDB4N0U1QywgMHgyRjgyLCAweDdFNUUsIDB4MTUwRSwNCi0gICAgMHg3RTVGLCAweDJGODgsIDB4N0U2MCwgMHgyRjhBLCAweDdFNjEsIDB4MTUxMCwgMHg3RTYyLCAweDJGODcsDQotICAgIDB4N0U2MywgMHgyRjg1LCAweDdFNjgsIDB4MzBFMywgMHg3RTY5LCAweDE1QUMsIDB4N0U2QSwgMHgxNUFELA0KLSAgICAweDdFNkIsIDB4MTVBOSwgMHg3RTZELCAweDE1QUEsIDB4N0U2RiwgMHgzMERGLCAweDdFNzAsIDB4MzBERCwNCi0gICAgMHg3RTcyLCAweDMwRTEsIDB4N0U3MywgMHgxNUFFLCAweDdFNzQsIDB4MzBFMiwgMHg3RTc1LCAweDMwREIsDQotICAgIDB4N0U3NiwgMHgzMERBLCAweDdFNzcsIDB4MzBERSwgMHg3RTc4LCAweDMwREMsIDB4N0U3OSwgMHgxNUFCLA0KLSAgICAweDdFN0EsIDB4MzBFMCwgMHg3RTdCLCAweDMyMTQsIDB4N0U3QywgMHgxNjMxLCAweDdFN0QsIDB4MTYzMCwNCi0gICAgMHg3RTdFLCAweDMyMTUsIDB4N0U4MCwgMHgzMjE3LCAweDdFODEsIDB4MzIxNiwgMHg3RTgyLCAweDE2MzIsDQotICAgIDB4N0U4NiwgMHgzMkYwLCAweDdFODcsIDB4MzJFRCwgMHg3RTg4LCAweDMyRUUsIDB4N0U4QSwgMHgzMkVDLA0KLSAgICAweDdFOEIsIDB4MzJFRiwgMHg3RThDLCAweDE2ODMsIDB4N0U4RCwgMHgzMkYxLCAweDdFOEYsIDB4MTY4MiwNCi0gICAgMHg3RTkxLCAweDMzQTIsIDB4N0U5MywgMHgxNzAzLCAweDdFOTQsIDB4MTcwNSwgMHg3RTk1LCAweDM0MkMsDQotICAgIDB4N0U5NiwgMHgxNzA0LCAweDdFOTcsIDB4MzQ5NCwgMHg3RTk4LCAweDM0REEsIDB4N0U5OSwgMHgzNERDLA0KLSAgICAweDdFOUEsIDB4MzREOSwgMHg3RTlCLCAweDM0REIsIDB4N0U5QywgMHgxNzU5LCAweDdGMzYsIDB4MDNGOSwNCi0gICAgMHg3RjM4LCAweDA3RDQsIDB4N0YzOSwgMHgxRDFGLCAweDdGM0EsIDB4MDk3OSwgMHg3RjNELCAweDBCNjEsDQotICAgIDB4N0YzRSwgMHgyMjcxLCAweDdGM0YsIDB4MjI3MiwgMHg3RjQzLCAweDJDMjYsIDB4N0Y0NCwgMHgxNDQ2LA0KLSAgICAweDdGNDUsIDB4MkRGRiwgMHg3RjQ4LCAweDE1MTMsIDB4N0Y0QSwgMHgzMEU1LCAweDdGNEIsIDB4MzBFNCwNCi0gICAgMHg3RjRDLCAweDE2MzMsIDB4N0Y0RCwgMHgzMkYyLCAweDdGNEYsIDB4MzNBMywgMHg3RjUwLCAweDE3MjYsDQotICAgIDB4N0Y1MSwgMHgxODEyLCAweDdGNTQsIDB4MDY2OCwgMHg3RjU1LCAweDA0RkMsIDB4N0Y1OCwgMHgxQkMzLA0KLSAgICAweDdGNUIsIDB4MURBRCwgMHg3RjVDLCAweDFEQTgsIDB4N0Y1RCwgMHgxREFDLCAweDdGNUUsIDB4MURBQSwNCi0gICAgMHg3RjVGLCAweDA5N0EsIDB4N0Y2MCwgMHgxREFCLCAweDdGNjEsIDB4MURBOSwgMHg3RjYzLCAweDFGRjMsDQotICAgIDB4N0Y2NSwgMHgyMjczLCAweDdGNjYsIDB4MjI3NCwgMHg3RjY3LCAweDI1MTEsIDB4N0Y2OCwgMHgyNTEyLA0KLSAgICAweDdGNjksIDB4MEVDNSwgMHg3RjZBLCAweDBFQzYsIDB4N0Y2QiwgMHgyNTEwLCAweDdGNkMsIDB4MjUxMywNCi0gICAgMHg3RjZELCAweDI1MEYsIDB4N0Y2RSwgMHgwRUM0LCAweDdGNzAsIDB4MTA2RSwgMHg3RjcyLCAweDBFQzcsDQotICAgIDB4N0Y3MywgMHgyNzk2LCAweDdGNzUsIDB4MTFFNSwgMHg3Rjc2LCAweDI5QzIsIDB4N0Y3NywgMHgxMUU2LA0KLSAgICAweDdGNzksIDB4MTMyOSwgMHg3RjdBLCAweDJDMjksIDB4N0Y3QiwgMHgyQzI3LCAweDdGN0MsIDB4MkMyOCwNCi0gICAgMHg3RjdELCAweDJFMDIsIDB4N0Y3RSwgMHgyRTAxLCAweDdGN0YsIDB4MkUwMCwgMHg3RjgzLCAweDMwRTYsDQotICAgIDB4N0Y4NSwgMHgxNUFGLCAweDdGODYsIDB4MzBFNywgMHg3Rjg3LCAweDMzQTQsIDB4N0Y4OCwgMHgxNzI3LA0KLSAgICAweDdGODksIDB4MzQ5NSwgMHg3RjhBLCAweDAzRkEsIDB4N0Y4QiwgMHgwNjZBLCAweDdGOEMsIDB4MDY2OSwNCi0gICAgMHg3RjhELCAweDFCQzUsIDB4N0Y4RSwgMHgwN0Q1LCAweDdGOTEsIDB4MUJDNCwgMHg3RjkyLCAweDFEQUYsDQotICAgIDB4N0Y5NCwgMHgwOTdCLCAweDdGOTUsIDB4MUZGNCwgMHg3Rjk2LCAweDFEQUUsIDB4N0Y5QSwgMHgwQjYzLA0KLSAgICAweDdGOUIsIDB4MUZGNywgMHg3RjlDLCAweDFGRjUsIDB4N0Y5RCwgMHgxRkY2LCAweDdGOUUsIDB4MEI2MiwNCi0gICAgMHg3RkEwLCAweDIyNzYsIDB4N0ZBMSwgMHgyMjc3LCAweDdGQTIsIDB4MjI3NSwgMHg3RkE0LCAweDBFQ0EsDQotICAgIDB4N0ZBNSwgMHgyNTE1LCAweDdGQTYsIDB4MjUxNCwgMHg3RkE3LCAweDI1MTYsIDB4N0ZBOCwgMHgwRUM5LA0KLSAgICAweDdGQTksIDB4MEVDOCwgMHg3RkFDLCAweDI5QzMsIDB4N0ZBRCwgMHgyOUM1LCAweDdGQUYsIDB4MTFFNywNCi0gICAgMHg3RkIwLCAweDI5QzQsIDB4N0ZCMSwgMHgyQzJBLCAweDdGQjIsIDB4MTMyQSwgMHg3RkIzLCAweDJGOEUsDQotICAgIDB4N0ZCNSwgMHgyRjhELCAweDdGQjYsIDB4MTVCMCwgMHg3RkI3LCAweDMwRTgsIDB4N0ZCOCwgMHgxNUIyLA0KLSAgICAweDdGQjksIDB4MTVCMSwgMHg3RkJBLCAweDMyMTgsIDB4N0ZCQiwgMHgzMkYzLCAweDdGQkMsIDB4MTY4NCwNCi0gICAgMHg3RkJELCAweDAzRkIsIDB4N0ZCRSwgMHgxQkM2LCAweDdGQkYsIDB4MDdENiwgMHg3RkMwLCAweDFEQjIsDQotICAgIDB4N0ZDMSwgMHgwOTdELCAweDdGQzIsIDB4MURCMSwgMHg3RkMzLCAweDFEQjAsIDB4N0ZDNSwgMHgwOTdDLA0KLSAgICAweDdGQzcsIDB4MUZGRCwgMHg3RkM5LCAweDFGRkYsIDB4N0ZDQSwgMHgxRkY4LCAweDdGQ0IsIDB4MUZGOSwNCi0gICAgMHg3RkNDLCAweDBCNjQsIDB4N0ZDRCwgMHgxRkZBLCAweDdGQ0UsIDB4MEI2NSwgMHg3RkNGLCAweDFGRkUsDQotICAgIDB4N0ZEMCwgMHgxRkZCLCAweDdGRDEsIDB4MUZGQywgMHg3RkQyLCAweDBCNjYsIDB4N0ZENCwgMHgwRDFDLA0KLSAgICAweDdGRDUsIDB4MEQxRCwgMHg3RkQ3LCAweDIyNzgsIDB4N0ZEQiwgMHgyNTE3LCAweDdGREMsIDB4MjUxOCwNCi0gICAgMHg3RkRFLCAweDI3OUEsIDB4N0ZERiwgMHgxMDcxLCAweDdGRTAsIDB4MTA2RiwgMHg3RkUxLCAweDEwNzAsDQotICAgIDB4N0ZFMiwgMHgyNzk3LCAweDdGRTMsIDB4Mjc5OCwgMHg3RkU1LCAweDI3OTksIDB4N0ZFNiwgMHgyOUNBLA0KLSAgICAweDdGRTgsIDB4MjlDQiwgMHg3RkU5LCAweDExRTgsIDB4N0ZFQSwgMHgyOUM4LCAweDdGRUIsIDB4MjlDNywNCi0gICAgMHg3RkVDLCAweDI5QzksIDB4N0ZFRCwgMHgyOUM2LCAweDdGRUUsIDB4MTMyRCwgMHg3RkVGLCAweDJDMkIsDQotICAgIDB4N0ZGMCwgMHgxMzJCLCAweDdGRjEsIDB4MTMyQywgMHg3RkYyLCAweDJFMDQsIDB4N0ZGMywgMHgxNDQ3LA0KLSAgICAweDdGRjQsIDB4MkUwMywgMHg3RkY1LCAweDJFRkYsIDB4N0ZGNywgMHgyRjhGLCAweDdGRjgsIDB4MkY5MCwNCi0gICAgMHg3RkY5LCAweDE1MTQsIDB4N0ZGQiwgMHgxNTE1LCAweDdGRkMsIDB4MTQ0OCwgMHg3RkZELCAweDMwRTksDQotICAgIDB4N0ZGRSwgMHgzMEVBLCAweDdGRkYsIDB4MzIxOSwgMHg4MDAwLCAweDE2MzQsIDB4ODAwMSwgMHgwM0ZDLA0KLSAgICAweDgwMDMsIDB4MDNGRCwgMHg4MDA0LCAweDA5N0YsIDB4ODAwNSwgMHgwNjZCLCAweDgwMDYsIDB4MDk3RSwNCi0gICAgMHg4MDA3LCAweDFCQzcsIDB4ODAwQiwgMHgwRDFFLCAweDgwMEMsIDB4MDNGRSwgMHg4MDBELCAweDA3RDgsDQotICAgIDB4ODAwRSwgMHgxQkM4LCAweDgwMEYsIDB4MUJDOSwgMHg4MDEwLCAweDA3RDcsIDB4ODAxMSwgMHgwN0Q5LA0KLSAgICAweDgwMTIsIDB4MDNGRiwgMHg4MDE0LCAweDFCQ0EsIDB4ODAxNSwgMHgwOTgxLCAweDgwMTYsIDB4MURCMywNCi0gICAgMHg4MDE3LCAweDA5ODMsIDB4ODAxOCwgMHgwOTgwLCAweDgwMTksIDB4MDk4MiwgMHg4MDFCLCAweDIwMDIsDQotICAgIDB4ODAxQywgMHgwQjY3LCAweDgwMUUsIDB4MjAwMSwgMHg4MDFGLCAweDIwMDAsIDB4ODAyMSwgMHgyNTE5LA0KLSAgICAweDgwMjQsIDB4Mjc5QiwgMHg4MDI2LCAweDExRTksIDB4ODAyOCwgMHgxMzJFLCAweDgwMjksIDB4MkMyRCwNCi0gICAgMHg4MDJBLCAweDJDMkMsIDB4ODAyQywgMHgyRTA1LCAweDgwMzAsIDB4MzJGNCwgMHg4MDMzLCAweDA0MDAsDQotICAgIDB4ODAzNCwgMHgxOEQ4LCAweDgwMzUsIDB4MUEyNywgMHg4MDM2LCAweDA3REEsIDB4ODAzNywgMHgxQkNCLA0KLSAgICAweDgwMzksIDB4MURCNSwgMHg4MDNELCAweDA5ODQsIDB4ODAzRSwgMHgxREI0LCAweDgwM0YsIDB4MDk4NSwNCi0gICAgMHg4MDQzLCAweDIwMDQsIDB4ODA0NiwgMHgwQjY5LCAweDgwNDcsIDB4MjAwMywgMHg4MDQ4LCAweDIwMDUsDQotICAgIDB4ODA0QSwgMHgwQjY4LCAweDgwNEYsIDB4MjI3QSwgMHg4MDUwLCAweDIyN0IsIDB4ODA1MSwgMHgyMjc5LA0KLSAgICAweDgwNTIsIDB4MEQxRiwgMHg4MDU2LCAweDBFQ0IsIDB4ODA1OCwgMHgwRUNDLCAweDgwNUEsIDB4MTA3MywNCi0gICAgMHg4MDVDLCAweDI3OUQsIDB4ODA1RCwgMHgyNzlDLCAweDgwNUUsIDB4MTA3MiwgMHg4MDY0LCAweDI5Q0MsDQotICAgIDB4ODA2NywgMHgyOUNELCAweDgwNkMsIDB4MkMyRSwgMHg4MDZGLCAweDE0NEMsIDB4ODA3MCwgMHgxNDRCLA0KLSAgICAweDgwNzEsIDB4MTQ0OSwgMHg4MDcyLCAweDE0NEEsIDB4ODA3MywgMHgxNDRELCAweDgwNzUsIDB4MkY5MSwNCi0gICAgMHg4MDc2LCAweDE1MTcsIDB4ODA3NywgMHgxNTE2LCAweDgwNzgsIDB4MzBFQiwgMHg4MDc5LCAweDMyMUEsDQotICAgIDB4ODA3RCwgMHgxNkQzLCAweDgwN0UsIDB4MTZEMiwgMHg4MDdGLCAweDA0MDEsIDB4ODA4MiwgMHgxQ0VDLA0KLSAgICAweDgwODQsIDB4MEVDRSwgMHg4MDg1LCAweDBEMjAsIDB4ODA4NiwgMHgwRUNELCAweDgwODcsIDB4MTA3NCwNCi0gICAgMHg4MDg5LCAweDA0MDIsIDB4ODA4QSwgMHgxN0IzLCAweDgwOEIsIDB4MDQwMywgMHg4MDhDLCAweDA0MDQsDQotICAgIDB4ODA4RiwgMHgxQTI4LCAweDgwOTAsIDB4MThEQiwgMHg4MDkyLCAweDE4REMsIDB4ODA5MywgMHgwNEZFLA0KLSAgICAweDgwOTUsIDB4MThEOSwgMHg4MDk2LCAweDA0RkQsIDB4ODA5OCwgMHgwNTAwLCAweDgwOTksIDB4MThEQSwNCi0gICAgMHg4MDlBLCAweDA1MDIsIDB4ODA5QiwgMHgwNTAxLCAweDgwOUMsIDB4MThERCwgMHg4MDlELCAweDA0RkYsDQotICAgIDB4ODBBMSwgMHgwNjcwLCAweDgwQTIsIDB4MDY2RSwgMHg4MEEzLCAweDFBMkEsIDB4ODBBNSwgMHgwNjZELA0KLSAgICAweDgwQTksIDB4MDY3MiwgMHg4MEFBLCAweDA2NzQsIDB4ODBBQiwgMHgwNjcxLCAweDgwQUQsIDB4MUEyRCwNCi0gICAgMHg4MEFFLCAweDFBMjksIDB4ODBBRiwgMHgwNjc1LCAweDgwQjEsIDB4MDY2RiwgMHg4MEIyLCAweDA1MDMsDQotICAgIDB4ODBCNCwgMHgwNjczLCAweDgwQjUsIDB4MUEyQywgMHg4MEI4LCAweDFBMkIsIDB4ODBCQSwgMHgwNjZDLA0KLSAgICAweDgwQzIsIDB4MUJEMSwgMHg4MEMzLCAweDA3REUsIDB4ODBDNCwgMHgwN0RGLCAweDgwQzUsIDB4MUJEMywNCi0gICAgMHg4MEM3LCAweDFCQ0QsIDB4ODBDOCwgMHgxQkQwLCAweDgwQzksIDB4MUJEOSwgMHg4MENBLCAweDFCRDcsDQotICAgIDB4ODBDQywgMHgwN0UwLCAweDgwQ0QsIDB4MUJERCwgMHg4MENFLCAweDA3RTMsIDB4ODBDRiwgMHgxQkRBLA0KLSAgICAweDgwRDAsIDB4MUJEMiwgMHg4MEQxLCAweDFCQ0YsIDB4ODBENCwgMHgyMjdELCAweDgwRDUsIDB4MUJEOCwNCi0gICAgMHg4MEQ2LCAweDA3REIsIDB4ODBENywgMHgxQkRCLCAweDgwRDgsIDB4MUJDQywgMHg4MEQ5LCAweDFCRDUsDQotICAgIDB4ODBEQSwgMHgwN0RELCAweDgwREIsIDB4MDdFMiwgMHg4MERDLCAweDFCRDYsIDB4ODBERCwgMHgwN0U2LA0KLSAgICAweDgwREUsIDB4MDdFNCwgMHg4MEUwLCAweDFCQ0UsIDB4ODBFMSwgMHgwN0UxLCAweDgwRTMsIDB4MUJENCwNCi0gICAgMHg4MEU0LCAweDA3RTUsIDB4ODBFNSwgMHgwN0RDLCAweDgwRTYsIDB4MUJEQywgMHg4MEVELCAweDA5OEEsDQotICAgIDB4ODBFRiwgMHgwOTkzLCAweDgwRjAsIDB4MDk4OCwgMHg4MEYxLCAweDA5ODYsIDB4ODBGMiwgMHgxREI3LA0KLSAgICAweDgwRjMsIDB4MDk4RSwgMHg4MEY0LCAweDA5OEIsIDB4ODBGNSwgMHgxREI5LCAweDgwRjgsIDB4MDk4RCwNCi0gICAgMHg4MEY5LCAweDFEQjgsIDB4ODBGQSwgMHgxREI2LCAweDgwRkIsIDB4MURCQiwgMHg4MEZDLCAweDA5OTIsDQotICAgIDB4ODBGRCwgMHgwOTkwLCAweDgwRkUsIDB4MjI3QywgMHg4MTAwLCAweDFEQkMsIDB4ODEwMSwgMHgxREJBLA0KLSAgICAweDgxMDIsIDB4MDk4NywgMHg4MTA1LCAweDA5ODksIDB4ODEwNiwgMHgwOThDLCAweDgxMDgsIDB4MDk4RiwNCi0gICAgMHg4MTBBLCAweDA5OTEsIDB4ODExNSwgMHgyMDBGLCAweDgxMTYsIDB4MEI2QiwgMHg4MTE4LCAweDIwMDYsDQotICAgIDB4ODExOSwgMHgyMDA4LCAweDgxMUIsIDB4MjAwOSwgMHg4MTFELCAweDIwMTEsIDB4ODExRSwgMHgyMDBELA0KLSAgICAweDgxMUYsIDB4MjAwQiwgMHg4MTIxLCAweDIwMEUsIDB4ODEyMiwgMHgyMDEyLCAweDgxMjMsIDB4MEI2QywNCi0gICAgMHg4MTI0LCAweDBCNzAsIDB4ODEyNSwgMHgyMDA3LCAweDgxMjcsIDB4MjAxMCwgMHg4MTI5LCAweDBCNkUsDQotICAgIDB4ODEyQiwgMHgwQjZELCAweDgxMkMsIDB4MjAwQywgMHg4MTJELCAweDIwMEEsIDB4ODEyRiwgMHgwQjZBLA0KLSAgICAweDgxMzAsIDB4MEI2RiwgMHg4MTM5LCAweDBEMjYsIDB4ODEzQSwgMHgyMjg1LCAweDgxM0QsIDB4MjI4MywNCi0gICAgMHg4MTNFLCAweDBEMjgsIDB4ODE0MywgMHgyMjdFLCAweDgxNDQsIDB4MjUyNywgMHg4MTQ2LCAweDBEMjcsDQotICAgIDB4ODE0NywgMHgyMjgyLCAweDgxNEEsIDB4MjI3RiwgMHg4MTRCLCAweDBEMjMsIDB4ODE0QywgMHgwRDI5LA0KLSAgICAweDgxNEQsIDB4MjI4NCwgMHg4MTRFLCAweDBEMjUsIDB4ODE0RiwgMHgyMjgxLCAweDgxNTAsIDB4MTA3NSwNCi0gICAgMHg4MTUxLCAweDBEMjQsIDB4ODE1MiwgMHgyMjgwLCAweDgxNTMsIDB4MEQyQSwgMHg4MTU0LCAweDBEMjIsDQotICAgIDB4ODE1NSwgMHgwRDIxLCAweDgxNUIsIDB4MjUxRiwgMHg4MTVDLCAweDI1MUQsIDB4ODE1RSwgMHgyNTIzLA0KLSAgICAweDgxNjAsIDB4MjUxQiwgMHg4MTYxLCAweDI1MjgsIDB4ODE2MiwgMHgyNTIwLCAweDgxNjQsIDB4MjUxQSwNCi0gICAgMHg4MTY1LCAweDBFRDIsIDB4ODE2NiwgMHgwRUQ4LCAweDgxNjcsIDB4MjUyNSwgMHg4MTY5LCAweDI1MUUsDQotICAgIDB4ODE2QiwgMHgwRUQ1LCAweDgxNkUsIDB4MEVEMywgMHg4MTZGLCAweDI1MjYsIDB4ODE3MCwgMHgwRUQwLA0KLSAgICAweDgxNzEsIDB4MEVDRiwgMHg4MTcyLCAweDI1MjEsIDB4ODE3MywgMHgwRUQ0LCAweDgxNzQsIDB4MEQyQiwNCi0gICAgMHg4MTc2LCAweDI1MjQsIDB4ODE3NywgMHgyNTFDLCAweDgxNzgsIDB4MEVEMSwgMHg4MTc5LCAweDBFRDYsDQotICAgIDB4ODE3QSwgMHgwRUQ3LCAweDgxN0YsIDB4MTA3QSwgMHg4MTgwLCAweDEwNzYsIDB4ODE4MiwgMHgxMDdCLA0KLSAgICAweDgxODMsIDB4MjdBMCwgMHg4MTg2LCAweDI3OUYsIDB4ODE4NywgMHgyN0ExLCAweDgxODgsIDB4MTA3OCwNCi0gICAgMHg4MTg5LCAweDI3OUUsIDB4ODE4QSwgMHgxMDc5LCAweDgxOEIsIDB4MjdBNCwgMHg4MThDLCAweDI3QTMsDQotICAgIDB4ODE4RCwgMHgyN0EyLCAweDgxOEYsIDB4MTA3NywgMHg4MTk1LCAweDI5RDEsIDB4ODE5NywgMHgyOUQ0LA0KLSAgICAweDgxOTgsIDB4MTFFRiwgMHg4MTk5LCAweDI5RDMsIDB4ODE5QSwgMHgxMUVFLCAweDgxOUIsIDB4MTFFQSwNCi0gICAgMHg4MTlDLCAweDExRUIsIDB4ODE5RCwgMHgxMUVDLCAweDgxOUUsIDB4MjlEMCwgMHg4MTlGLCAweDI5Q0YsDQotICAgIDB4ODFBMCwgMHgxMUVELCAweDgxQTIsIDB4MjlEMiwgMHg4MUEzLCAweDI5Q0UsIDB4ODFBNiwgMHgyQzMwLA0KLSAgICAweDgxQTcsIDB4MkMzQSwgMHg4MUE4LCAweDEzMzEsIDB4ODFBOSwgMHgxMzMwLCAweDgxQUIsIDB4MkMzNCwNCi0gICAgMHg4MUFDLCAweDJDMzYsIDB4ODFBRSwgMHgyQzMxLCAweDgxQjAsIDB4MkMzNSwgMHg4MUIxLCAweDJDMkYsDQotICAgIDB4ODFCMiwgMHgyQzM4LCAweDgxQjMsIDB4MTMyRiwgMHg4MUI0LCAweDJDMzcsIDB4ODFCNSwgMHgyQzMzLA0KLSAgICAweDgxQjcsIDB4MkMzOSwgMHg4MUI5LCAweDJDMzIsIDB4ODFCQSwgMHgxNDUwLCAweDgxQkIsIDB4MkUwNiwNCi0gICAgMHg4MUJDLCAweDJFMEMsIDB4ODFCRCwgMHgxNDU0LCAweDgxQkUsIDB4MTQ1NiwgMHg4MUJGLCAweDE0NTMsDQotICAgIDB4ODFDMCwgMHgxNDUyLCAweDgxQzIsIDB4MTQ1MSwgMHg4MUMzLCAweDE0NEYsIDB4ODFDNCwgMHgyRTA3LA0KLSAgICAweDgxQzUsIDB4MkUwQSwgMHg4MUM2LCAweDE0NEUsIDB4ODFDNywgMHgyRTBCLCAweDgxQzksIDB4MTQ1NSwNCi0gICAgMHg4MUNBLCAweDJFMDksIDB4ODFDQywgMHgyRTA4LCAweDgxQ0QsIDB4MTUxOCwgMHg4MUNGLCAweDE1MTksDQotICAgIDB4ODFEMCwgMHgyRjk0LCAweDgxRDEsIDB4MkY5MiwgMHg4MUQyLCAweDJGOTMsIDB4ODFENSwgMHgzMEVELA0KLSAgICAweDgxRDcsIDB4MzBFQywgMHg4MUQ4LCAweDE1QjMsIDB4ODFEOSwgMHgzMjFDLCAweDgxREEsIDB4MTYzNSwNCi0gICAgMHg4MURCLCAweDMyMUIsIDB4ODFERCwgMHgzMkY1LCAweDgxREUsIDB4MzNBNSwgMHg4MURGLCAweDE2RDQsDQotICAgIDB4ODFFMCwgMHgzNERELCAweDgxRTEsIDB4MzRERSwgMHg4MUUyLCAweDE3MDYsIDB4ODFFMywgMHgwNDA1LA0KLSAgICAweDgxRTUsIDB4MDY3NiwgMHg4MUU2LCAweDIyODYsIDB4ODFFNywgMHgxMDdDLCAweDgxRTgsIDB4MTQ1NywNCi0gICAgMHg4MUU5LCAweDJFMEQsIDB4ODFFQSwgMHgwNDA2LCAweDgxRUMsIDB4MDk5NSwgMHg4MUVELCAweDA5OTQsDQotICAgIDB4ODFFRSwgMHgyMjg3LCAweDgxRjIsIDB4MkMzQiwgMHg4MUYzLCAweDA0MDcsIDB4ODFGNCwgMHgwN0U3LA0KLSAgICAweDgxRjcsIDB4MjI4OCwgMHg4MUY4LCAweDIyODksIDB4ODFGOSwgMHgyMjhBLCAweDgxRkEsIDB4MTA3RCwNCi0gICAgMHg4MUZCLCAweDEzMzIsIDB4ODFGQywgMHgwNDA4LCAweDgxRkUsIDB4MDY3NywgMHg4MUZGLCAweDFCREUsDQotICAgIDB4ODIwMCwgMHgwOTk2LCAweDgyMDEsIDB4MURCRCwgMHg4MjAyLCAweDBCNzEsIDB4ODIwNCwgMHgyMjhCLA0KLSAgICAweDgyMDUsIDB4MEVEOSwgMHg4MjA3LCAweDEwN0UsIDB4ODIwOCwgMHgxMzMzLCAweDgyMDksIDB4MTQ1OCwNCi0gICAgMHg4MjBBLCAweDE1MUEsIDB4ODIwQiwgMHgzMEVFLCAweDgyMEMsIDB4MDQwOSwgMHg4MjBELCAweDA2NzgsDQotICAgIDB4ODIxMCwgMHgwOTk3LCAweDgyMTEsIDB4MjAxMywgMHg4MjEyLCAweDBEMkMsIDB4ODIxNCwgMHgxMDdGLA0KLSAgICAweDgyMTUsIDB4MjdBNSwgMHg4MjE2LCAweDI5RDUsIDB4ODIxQiwgMHgwNDBBLCAweDgyMUMsIDB4MEQyRCwNCi0gICAgMHg4MjFELCAweDI1MjksIDB4ODIxRSwgMHgxMDgwLCAweDgyMUYsIDB4MDQwQiwgMHg4MjIwLCAweDFBMkUsDQotICAgIDB4ODIyMSwgMHgxQkRGLCAweDgyMjIsIDB4MDdFOCwgMHg4MjI1LCAweDFEQkYsIDB4ODIyOCwgMHgwOTlBLA0KLSAgICAweDgyMkEsIDB4MDk5OCwgMHg4MjJCLCAweDA5OTksIDB4ODIyQywgMHgwOTlCLCAweDgyMkYsIDB4MURCRSwNCi0gICAgMHg4MjMyLCAweDIwMTgsIDB4ODIzMywgMHgyMDE1LCAweDgyMzQsIDB4MjAxNywgMHg4MjM1LCAweDBCNzIsDQotICAgIDB4ODIzNiwgMHgwQjc0LCAweDgyMzcsIDB4MEI3MywgMHg4MjM4LCAweDIwMTQsIDB4ODIzOSwgMHgwQjc1LA0KLSAgICAweDgyM0EsIDB4MjAxNiwgMHg4MjNDLCAweDIyOEMsIDB4ODIzRCwgMHgyMjhELCAweDgyM0YsIDB4MjI4RSwNCi0gICAgMHg4MjQwLCAweDI1MkMsIDB4ODI0MiwgMHgyNTJELCAweDgyNDQsIDB4MjUyQiwgMHg4MjQ1LCAweDI1MkUsDQotICAgIDB4ODI0NywgMHgwRURBLCAweDgyNDksIDB4MjUyQSwgMHg4MjRCLCAweDEwODEsIDB4ODI0RSwgMHgyOURBLA0KLSAgICAweDgyNEYsIDB4MjlENiwgMHg4MjUwLCAweDI5RDksIDB4ODI1MSwgMHgyOURCLCAweDgyNTIsIDB4MjlEOCwNCi0gICAgMHg4MjUzLCAweDI5RDcsIDB4ODI1NSwgMHgyQzNDLCAweDgyNTYsIDB4MkMzRCwgMHg4MjU3LCAweDJDM0UsDQotICAgIDB4ODI1OCwgMHgxMzM0LCAweDgyNTksIDB4MTMzNSwgMHg4MjVBLCAweDJFMEYsIDB4ODI1QiwgMHgyRTBFLA0KLSAgICAweDgyNUMsIDB4MkUxMCwgMHg4MjVFLCAweDJGOTYsIDB4ODI1RiwgMHgyRjk1LCAweDgyNjEsIDB4MzBGMCwNCi0gICAgMHg4MjYzLCAweDMwRjEsIDB4ODI2NCwgMHgzMEVGLCAweDgyNjYsIDB4MTYzNiwgMHg4MjY4LCAweDMyMUQsDQotICAgIDB4ODI2OSwgMHgzMjFFLCAweDgyNkIsIDB4MzNBNiwgMHg4MjZDLCAweDM0MkQsIDB4ODI2RCwgMHgzNDk2LA0KLSAgICAweDgyNkUsIDB4MDQwQywgMHg4MjZGLCAweDA1MDQsIDB4ODI3MSwgMHgxNDU5LCAweDgyNzIsIDB4MDQwRCwNCi0gICAgMHg4Mjc0LCAweDIwMTksIDB4ODI3NSwgMHgyMjhGLCAweDgyNzcsIDB4MTcyRSwgMHg4Mjc4LCAweDE4MTMsDQotICAgIDB4ODI3QywgMHgxODE0LCAweDgyN0QsIDB4MTgxNiwgMHg4MjdFLCAweDA0MEUsIDB4ODI3RiwgMHgxODE3LA0KLSAgICAweDgyODAsIDB4MTgxNSwgMHg4MjgzLCAweDE4RTUsIDB4ODI4NCwgMHgxOEU2LCAweDgyODUsIDB4MThFMCwNCi0gICAgMHg4MjhBLCAweDE4RTQsIDB4ODI4QiwgMHgwNTA2LCAweDgyOEQsIDB4MDUwNywgMHg4MjhFLCAweDE4RTEsDQotICAgIDB4ODI4RiwgMHgxOERGLCAweDgyOTAsIDB4MThERSwgMHg4MjkxLCAweDE4RTIsIDB4ODI5MiwgMHgwNTA1LA0KLSAgICAweDgyOTMsIDB4MThFMywgMHg4Mjk0LCAweDFCRTAsIDB4ODI5OCwgMHgxQTMzLCAweDgyOTksIDB4MDY3QiwNCi0gICAgMHg4MjlBLCAweDFBMzIsIDB4ODI5QiwgMHgxQTM0LCAweDgyOUQsIDB4MDY3QSwgMHg4MjlFLCAweDFBMzksDQotICAgIDB4ODI5RiwgMHgwNjdFLCAweDgyQTAsIDB4MUEyRiwgMHg4MkExLCAweDFBM0QsIDB4ODJBMiwgMHgxQTQzLA0KLSAgICAweDgyQTMsIDB4MDY4NSwgMHg4MkE0LCAweDFBNDAsIDB4ODJBNSwgMHgwNjgyLCAweDgyQTcsIDB4MUEzNiwNCi0gICAgMHg4MkE4LCAweDFBM0MsIDB4ODJBOSwgMHgxQTNFLCAweDgyQUIsIDB4MUEzMSwgMHg4MkFDLCAweDA2ODEsDQotICAgIDB4ODJBRCwgMHgwNjdDLCAweDgyQUUsIDB4MUEzNywgMHg4MkFGLCAweDA2ODMsIDB4ODJCMCwgMHgwNjg2LA0KLSAgICAweDgyQjEsIDB4MDY4MCwgMHg4MkIzLCAweDA2NzksIDB4ODJCNCwgMHgxQTNCLCAweDgyQjUsIDB4MUEzNSwNCi0gICAgMHg4MkI2LCAweDFBNDIsIDB4ODJCNywgMHgwNjg4LCAweDgyQjgsIDB4MDY4NCwgMHg4MkI5LCAweDA2N0YsDQotICAgIDB4ODJCQSwgMHgxQTNBLCAweDgyQkIsIDB4MDk5QywgMHg4MkJDLCAweDFBMzgsIDB4ODJCRCwgMHgwNjdELA0KLSAgICAweDgyQkUsIDB4MDY4NywgMHg4MkMwLCAweDFBMzAsIDB4ODJDMiwgMHgxQTNGLCAweDgyQzMsIDB4MUE0MSwNCi0gICAgMHg4MkQxLCAweDA3RjksIDB4ODJEMiwgMHgwN0YzLCAweDgyRDMsIDB4MDdGQiwgMHg4MkQ0LCAweDA3RjgsDQotICAgIDB4ODJENSwgMHgxQkU3LCAweDgyRDYsIDB4MUJFQSwgMHg4MkQ3LCAweDA3RjQsIDB4ODJEOSwgMHgxQkUxLA0KLSAgICAweDgyREIsIDB4MDdFRCwgMHg4MkRDLCAweDA3RjcsIDB4ODJERSwgMHgwN0ZBLCAweDgyREYsIDB4MDdGQywNCi0gICAgMHg4MkUwLCAweDFCRjYsIDB4ODJFMSwgMHgxQkVELCAweDgyRTMsIDB4MDdFQywgMHg4MkU0LCAweDFCRjUsDQotICAgIDB4ODJFNSwgMHgwN0YwLCAweDgyRTYsIDB4MDdFRSwgMHg4MkU3LCAweDA3RTksIDB4ODJFOCwgMHgxQkU1LA0KLSAgICAweDgyRUEsIDB4MUJGNCwgMHg4MkVCLCAweDFCRTksIDB4ODJFQywgMHgxQkVDLCAweDgyRUQsIDB4MUJGOSwNCi0gICAgMHg4MkVGLCAweDA3RkQsIDB4ODJGMCwgMHgxQkYzLCAweDgyRjEsIDB4MDdGNSwgMHg4MkYyLCAweDFCRUUsDQotICAgIDB4ODJGMywgMHgxQkY4LCAweDgyRjQsIDB4MUJFQiwgMHg4MkY1LCAweDFCRUYsIDB4ODJGNiwgMHgxQkYyLA0KLSAgICAweDgyRjksIDB4MUJFMywgMHg4MkZBLCAweDFCRjcsIDB4ODJGQiwgMHgxQkYxLCAweDgyRkUsIDB4MUJFMiwNCi0gICAgMHg4MzAwLCAweDFCRTYsIDB4ODMwMSwgMHgwN0Y2LCAweDgzMDIsIDB4MDdGMSwgMHg4MzAzLCAweDA3RUEsDQotICAgIDB4ODMwNCwgMHgwN0VGLCAweDgzMDUsIDB4MDdFQiwgMHg4MzA2LCAweDA3RkUsIDB4ODMwNywgMHgxQkU0LA0KLSAgICAweDgzMDgsIDB4MUREMCwgMHg4MzA5LCAweDA3RjIsIDB4ODMwQywgMHgxQkYwLCAweDgzMEQsIDB4MUE3RCwNCi0gICAgMHg4MzE2LCAweDFERDMsIDB4ODMxNywgMHgwOUFBLCAweDgzMTksIDB4MURDMywgMHg4MzFCLCAweDFEQ0UsDQotICAgIDB4ODMxQywgMHgxRENBLCAweDgzMUUsIDB4MURERCwgMHg4MzIwLCAweDFERDUsIDB4ODMyMiwgMHgxRENCLA0KLSAgICAweDgzMjQsIDB4MURENCwgMHg4MzI1LCAweDFEQzUsIDB4ODMyNiwgMHgxREM5LCAweDgzMjcsIDB4MURFMCwNCi0gICAgMHg4MzI4LCAweDA5QUQsIDB4ODMyOSwgMHgxREQ4LCAweDgzMkEsIDB4MURDRiwgMHg4MzJCLCAweDA5OUQsDQotICAgIDB4ODMyQywgMHgxRERFLCAweDgzMkQsIDB4MURDMSwgMHg4MzJGLCAweDFERDcsIDB4ODMzMSwgMHgwOUFDLA0KLSAgICAweDgzMzIsIDB4MDlBNywgMHg4MzMzLCAweDFEQzAsIDB4ODMzNCwgMHgwOUE1LCAweDgzMzUsIDB4MDlBNCwNCi0gICAgMHg4MzM2LCAweDA5QTksIDB4ODMzNywgMHgxREQ2LCAweDgzMzgsIDB4MDlBMSwgMHg4MzM5LCAweDA5QTgsDQotICAgIDB4ODMzQSwgMHgxQkU4LCAweDgzM0IsIDB4MjI5MCwgMHg4MzNDLCAweDFERDEsIDB4ODMzRiwgMHgxREM3LA0KLSAgICAweDgzNDAsIDB4MDlBQiwgMHg4MzQxLCAweDFEQzgsIDB4ODM0MiwgMHgxRENDLCAweDgzNDMsIDB4MDlBRSwNCi0gICAgMHg4MzQ0LCAweDFEQzIsIDB4ODM0NSwgMHgxRERBLCAweDgzNDcsIDB4MUREOSwgMHg4MzQ4LCAweDFERTEsDQotICAgIDB4ODM0OSwgMHgwOUEzLCAweDgzNEEsIDB4MDlBMCwgMHg4MzRCLCAweDFEREYsIDB4ODM0QywgMHgxRERCLA0KLSAgICAweDgzNEQsIDB4MUREMiwgMHg4MzRFLCAweDFEQ0QsIDB4ODM0RiwgMHgwOUE2LCAweDgzNTAsIDB4MDlBMiwNCi0gICAgMHg4MzUxLCAweDFEQzQsIDB4ODM1MiwgMHgwOTlFLCAweDgzNTMsIDB4MUREQywgMHg4MzU0LCAweDA5OUYsDQotICAgIDB4ODM1NiwgMHgxREM2LCAweDgzNzMsIDB4MjAxRiwgMHg4Mzc0LCAweDIwMjEsIDB4ODM3NSwgMHgyMDI2LA0KLSAgICAweDgzNzYsIDB4MjAzQSwgMHg4Mzc3LCAweDBCODMsIDB4ODM3OCwgMHgwQjc5LCAweDgzN0EsIDB4MjAxRSwNCi0gICAgMHg4MzdCLCAweDBCODQsIDB4ODM3QywgMHgwQjg1LCAweDgzN0QsIDB4MjAyOSwgMHg4MzdFLCAweDIwMzAsDQotICAgIDB4ODM3RiwgMHgyMDM2LCAweDgzODEsIDB4MjAyMywgMHg4MzgzLCAweDIwMkEsIDB4ODM4NiwgMHgwQjg2LA0KLSAgICAweDgzODcsIDB4MjAzOCwgMHg4Mzg4LCAweDIwMzMsIDB4ODM4OSwgMHgwQjgxLCAweDgzOEEsIDB4MEI3RiwNCi0gICAgMHg4MzhCLCAweDIwMkYsIDB4ODM4QywgMHgyMDJCLCAweDgzOEQsIDB4MjAxRCwgMHg4MzhFLCAweDBCNzYsDQotICAgIDB4ODM4RiwgMHgyMDIyLCAweDgzOTAsIDB4MjAxQSwgMHg4MzkyLCAweDBCN0UsIDB4ODM5MywgMHgwQjgwLA0KLSAgICAweDgzOTQsIDB4MjAyNywgMHg4Mzk1LCAweDIwMjQsIDB4ODM5NiwgMHgwQjdCLCAweDgzOTcsIDB4MjAzNCwNCi0gICAgMHg4Mzk4LCAweDBCNzgsIDB4ODM5OSwgMHgyMDI1LCAweDgzOUEsIDB4MjJCOSwgMHg4MzlCLCAweDIwMkQsDQotICAgIDB4ODM5RCwgMHgyMDJDLCAweDgzOUUsIDB4MEI3NywgMHg4M0EwLCAweDBCODIsIDB4ODNBMiwgMHgwQjdBLA0KLSAgICAweDgzQTMsIDB4MjAxQiwgMHg4M0E0LCAweDIwMjAsIDB4ODNBNSwgMHgyMDMxLCAweDgzQTYsIDB4MjAzNywNCi0gICAgMHg4M0E3LCAweDBCODcsIDB4ODNBOCwgMHgyMDFDLCAweDgzQTksIDB4MjAyOCwgMHg4M0FBLCAweDIwMkUsDQotICAgIDB4ODNBQiwgMHgwQjdELCAweDgzQUUsIDB4MjAzOSwgMHg4M0FGLCAweDIwMzIsIDB4ODNCMCwgMHgyMDM1LA0KLSAgICAweDgzQkQsIDB4MEI3QywgMHg4M0JGLCAweDIyQTAsIDB4ODNDMCwgMHgyMjk0LCAweDgzQzEsIDB4MEQzNSwNCi0gICAgMHg4M0MyLCAweDIyQjEsIDB4ODNDMywgMHgyMkJBLCAweDgzQzQsIDB4MjJCRCwgMHg4M0M1LCAweDBEMzMsDQotICAgIDB4ODNDNiwgMHgyMjlDLCAweDgzQzcsIDB4MjJCNSwgMHg4M0M4LCAweDIyOUQsIDB4ODNDOSwgMHgyMkFCLA0KLSAgICAweDgzQ0EsIDB4MEQ0MCwgMHg4M0NCLCAweDIyQTcsIDB4ODNDQywgMHgwRDNELCAweDgzQ0UsIDB4MjJBOCwNCi0gICAgMHg4M0NGLCAweDIyOTEsIDB4ODNEMSwgMHgyMkI2LCAweDgzRDQsIDB4MEQ0NiwgMHg4M0Q1LCAweDIyQjMsDQotICAgIDB4ODNENiwgMHgyMkE5LCAweDgzRDcsIDB4MjJCRiwgMHg4M0Q4LCAweDIyQTQsIDB4ODNEOSwgMHgyNTRFLA0KLSAgICAweDgzREIsIDB4MjJDMiwgMHg4M0RDLCAweDBENDQsIDB4ODNERCwgMHgyMkEyLCAweDgzREUsIDB4MjJBRSwNCi0gICAgMHg4M0RGLCAweDBENDcsIDB4ODNFMCwgMHgwRDMyLCAweDgzRTEsIDB4MjJBNiwgMHg4M0UyLCAweDIyQzAsDQotICAgIDB4ODNFMywgMHgyMjlGLCAweDgzRTQsIDB4MjI5OCwgMHg4M0U1LCAweDIyQTMsIDB4ODNFNywgMHgyMjk3LA0KLSAgICAweDgzRTgsIDB4MjI5NSwgMHg4M0U5LCAweDBEMkUsIDB4ODNFQSwgMHgyMkI3LCAweDgzRUIsIDB4MjI5RSwNCi0gICAgMHg4M0VDLCAweDIyQkIsIDB4ODNFRSwgMHgyMkJDLCAweDgzRUYsIDB4MEQzNiwgMHg4M0YwLCAweDBEM0IsDQotICAgIDB4ODNGMSwgMHgwRDM3LCAweDgzRjIsIDB4MEQzRiwgMHg4M0YzLCAweDIyQjIsIDB4ODNGNCwgMHgwRDM4LA0KLSAgICAweDgzRjUsIDB4MjJBQSwgMHg4M0Y2LCAweDIyOUEsIDB4ODNGOCwgMHgwRDMwLCAweDgzRjksIDB4MjI5MiwNCi0gICAgMHg4M0ZBLCAweDIyQjQsIDB4ODNGQiwgMHgyMkJFLCAweDgzRkMsIDB4MjI5OSwgMHg4M0ZELCAweDBEM0UsDQotICAgIDB4ODNGRSwgMHgyMkMzLCAweDgzRkYsIDB4MjJBNSwgMHg4NDAxLCAweDIyQTEsIDB4ODQwMywgMHgwRDJGLA0KLSAgICAweDg0MDQsIDB4MEQ0MywgMHg4NDA2LCAweDIyQjAsIDB4ODQwNywgMHgwRDQ1LCAweDg0MDksIDB4MjJBQywNCi0gICAgMHg4NDBBLCAweDBEM0EsIDB4ODQwQiwgMHgwRDM0LCAweDg0MEMsIDB4MEQzQywgMHg4NDBELCAweDBEMzEsDQotICAgIDB4ODQwRSwgMHgwRDQyLCAweDg0MEYsIDB4MjJBRCwgMHg4NDEwLCAweDIyOUIsIDB4ODQxMSwgMHgyMkFGLA0KLSAgICAweDg0MTIsIDB4MjI5NiwgMHg4NDEzLCAweDIyQjgsIDB4ODQxQiwgMHgyMkMxLCAweDg0MjMsIDB4MjI5MywNCi0gICAgMHg4NDI5LCAweDI1NEQsIDB4ODQyQiwgMHgyNTYzLCAweDg0MkMsIDB4MEVBQywgMHg4NDJELCAweDI1NTIsDQotICAgIDB4ODQyRiwgMHgyNTUwLCAweDg0MzAsIDB4MjUzQiwgMHg4NDMxLCAweDBFREUsIDB4ODQzMiwgMHgyNTRCLA0KLSAgICAweDg0MzMsIDB4MjU1RiwgMHg4NDM0LCAweDI1NDcsIDB4ODQzNSwgMHgwRUU2LCAweDg0MzYsIDB4MjU1RSwNCi0gICAgMHg4NDM3LCAweDI1NDUsIDB4ODQzOCwgMHgwRDQxLCAweDg0MzksIDB4MjU1NSwgMHg4NDNBLCAweDI1NDYsDQotICAgIDB4ODQzQiwgMHgyNTVDLCAweDg0M0MsIDB4MEVFNSwgMHg4NDNELCAweDBFREQsIDB4ODQzRiwgMHgyNTMwLA0KLSAgICAweDg0NDAsIDB4MjUzOCwgMHg4NDQyLCAweDI1NTEsIDB4ODQ0MywgMHgyNTQ5LCAweDg0NDQsIDB4MjU2MiwNCi0gICAgMHg4NDQ1LCAweDI1NEMsIDB4ODQ0NiwgMHgwRUVCLCAweDg0NDcsIDB4MjU1RCwgMHg4NDQ5LCAweDBFRTIsDQotICAgIDB4ODQ0QiwgMHgyNTRGLCAweDg0NEMsIDB4MjU1NywgMHg4NDRELCAweDI1M0MsIDB4ODQ0RSwgMHgyNTU2LA0KLSAgICAweDg0NTAsIDB4MjU2NywgMHg4NDUxLCAweDI1MzcsIDB4ODQ1MiwgMHgyNTU4LCAweDg0NTQsIDB4MjU2NSwNCi0gICAgMHg4NDU2LCAweDI1MzEsIDB4ODQ1NywgMHgwRDM5LCAweDg0NTksIDB4MjUzRiwgMHg4NDVBLCAweDI1M0UsDQotICAgIDB4ODQ1QiwgMHgwRUU0LCAweDg0NUQsIDB4MjU0MiwgMHg4NDVFLCAweDI1NDQsIDB4ODQ1RiwgMHgyNTUzLA0KLSAgICAweDg0NjAsIDB4MjU2NCwgMHg4NDYxLCAweDBFRTcsIDB4ODQ2MywgMHgwRUU4LCAweDg0NjUsIDB4MjUzNiwNCi0gICAgMHg4NDY2LCAweDBFRTAsIDB4ODQ2NywgMHgyNTNBLCAweDg0NjgsIDB4MjU2MCwgMHg4NDY5LCAweDBFRTksDQotICAgIDB4ODQ2QiwgMHgwRUUxLCAweDg0NkMsIDB4MEVFMywgMHg4NDZELCAweDBFRUEsIDB4ODQ2RSwgMHgyNTY2LA0KLSAgICAweDg0NkYsIDB4MjU1OSwgMHg4NDcwLCAweDI1NTQsIDB4ODQ3MywgMHgyNTQxLCAweDg0NzQsIDB4MjU0MCwNCi0gICAgMHg4NDc1LCAweDBFREYsIDB4ODQ3NiwgMHgyNTMyLCAweDg0NzcsIDB4MEVEQywgMHg4NDc4LCAweDI1NEEsDQotICAgIDB4ODQ3OSwgMHgyNTMzLCAweDg0N0EsIDB4MjU0OCwgMHg4NDdELCAweDI1M0QsIDB4ODQ3RSwgMHgyNTYxLA0KLSAgICAweDg0ODIsIDB4MEVEQiwgMHg4NDg2LCAweDI1MzksIDB4ODQ4RCwgMHgyNTM1LCAweDg0OEUsIDB4MjU1QiwNCi0gICAgMHg4NDhGLCAweDI1MzQsIDB4ODQ5MCwgMHgxMDhFLCAweDg0OTEsIDB4MjdDRCwgMHg4NDk0LCAweDI3QkMsDQotICAgIDB4ODQ5NywgMHgyN0E2LCAweDg0OTgsIDB4MjdDNCwgMHg4NDk5LCAweDEwODYsIDB4ODQ5QSwgMHgyN0I1LA0KLSAgICAweDg0OUIsIDB4MjdCRiwgMHg4NDlDLCAweDEwODksIDB4ODQ5RCwgMHgyN0I4LCAweDg0OUUsIDB4MTA4NywNCi0gICAgMHg4NDlGLCAweDI3QTksIDB4ODRBMCwgMHgyN0M3LCAweDg0QTEsIDB4MjdBOCwgMHg4NEEyLCAweDI3QkIsDQotICAgIDB4ODRBNCwgMHgyN0E3LCAweDg0QTcsIDB4MjdCOSwgMHg4NEE4LCAweDI3QzIsIDB4ODRBOSwgMHgyN0MwLA0KLSAgICAweDg0QUEsIDB4MjdCNCwgMHg4NEFCLCAweDI3QUYsIDB4ODRBQywgMHgyN0FELCAweDg0QUUsIDB4MjdBRSwNCi0gICAgMHg4NEFGLCAweDI3QzEsIDB4ODRCMCwgMHgyN0NDLCAweDg0QjEsIDB4MjdCNiwgMHg4NEIyLCAweDEwODgsDQotICAgIDB4ODRCNCwgMHgyN0IxLCAweDg0QjYsIDB4MjdDNSwgMHg4NEI4LCAweDEwOEIsIDB4ODRCOSwgMHgyN0IwLA0KLSAgICAweDg0QkEsIDB4MjdBQSwgMHg4NEJCLCAweDI3QkEsIDB4ODRCQywgMHgxMDhGLCAweDg0QkYsIDB4MTA4MywNCi0gICAgMHg4NEMwLCAweDEwOEMsIDB4ODRDMSwgMHgyN0IyLCAweDg0QzIsIDB4MjdBQywgMHg4NEM0LCAweDEwODUsDQotICAgIDB4ODRDNSwgMHgyNTVBLCAweDg0QzYsIDB4MTA4NCwgMHg4NEM3LCAweDI3QkQsIDB4ODRDOSwgMHgxMDgyLA0KLSAgICAweDg0Q0EsIDB4MTA5MSwgMHg4NENCLCAweDEwOEEsIDB4ODRDQywgMHgyN0JFLCAweDg0Q0QsIDB4MjdCMywNCi0gICAgMHg4NENFLCAweDI3QUIsIDB4ODRDRiwgMHgyN0M2LCAweDg0RDAsIDB4MjdCNywgMHg4NEQxLCAweDEwOTAsDQotICAgIDB4ODREMiwgMHgyN0NBLCAweDg0RDMsIDB4MTA4RCwgMHg4NEQ0LCAweDI3QzksIDB4ODRENiwgMHgyN0MzLA0KLSAgICAweDg0RDcsIDB4MjdDOCwgMHg4NERCLCAweDI3Q0IsIDB4ODRFNywgMHgyQTAzLCAweDg0RTgsIDB4MkEwNCwNCi0gICAgMHg4NEU5LCAweDI5RjcsIDB4ODRFQSwgMHgyOUY2LCAweDg0RUIsIDB4MjlGMiwgMHg4NEVDLCAweDExRkIsDQotICAgIDB4ODRFRSwgMHgxMUYzLCAweDg0RUYsIDB4MkEwNiwgMHg4NEYwLCAweDJBMDUsIDB4ODRGMSwgMHgyNTJGLA0KLSAgICAweDg0RjIsIDB4MjlFRiwgMHg4NEYzLCAweDI5RjMsIDB4ODRGNCwgMHgyOUVELCAweDg0RjYsIDB4MkEwMCwNCi0gICAgMHg4NEY3LCAweDI5RjEsIDB4ODRGOSwgMHgyQTA3LCAweDg0RkEsIDB4MjlFQSwgMHg4NEZCLCAweDI5RTgsDQotICAgIDB4ODRGQywgMHgyOUY0LCAweDg0RkQsIDB4MjlGRSwgMHg4NEZFLCAweDI5RjksIDB4ODRGRiwgMHgxMUZELA0KLSAgICAweDg1MDAsIDB4MjlERiwgMHg4NTAyLCAweDI5RkQsIDB4ODUwNiwgMHgxMUZFLCAweDg1MDcsIDB4MjU0MywNCi0gICAgMHg4NTA4LCAweDI5RUIsIDB4ODUwOSwgMHgyOUUyLCAweDg1MEEsIDB4MjlFNSwgMHg4NTBCLCAweDJBMEIsDQotICAgIDB4ODUwQywgMHgyOUVDLCAweDg1MEQsIDB4MjlFMywgMHg4NTBFLCAweDI5RTEsIDB4ODUwRiwgMHgyOURFLA0KLSAgICAweDg1MTEsIDB4MTFGNywgMHg4NTEyLCAweDI5RjUsIDB4ODUxMywgMHgxMUY2LCAweDg1MTQsIDB4MTFGQSwNCi0gICAgMHg4NTE1LCAweDI5RjAsIDB4ODUxNiwgMHgyOUY4LCAweDg1MTcsIDB4MTFGMCwgMHg4NTE4LCAweDJBMDgsDQotICAgIDB4ODUxOSwgMHgyQTBDLCAweDg1MUEsIDB4MTFGMiwgMHg4NTFDLCAweDI5RTcsIDB4ODUxRCwgMHgyOUZCLA0KLSAgICAweDg1MUUsIDB4MjlGRiwgMHg4NTFGLCAweDI5RTQsIDB4ODUyMCwgMHgyQTA5LCAweDg1MjEsIDB4MTFGOSwNCi0gICAgMHg4NTIzLCAweDExRjgsIDB4ODUyNCwgMHgyOURDLCAweDg1MjUsIDB4MTFGQywgMHg4NTI2LCAweDJBMDIsDQotICAgIDB4ODUyNywgMHgyOUU2LCAweDg1MjgsIDB4MjlGQSwgMHg4NTI5LCAweDI5RTAsIDB4ODUyQSwgMHgyOUVFLA0KLSAgICAweDg1MkIsIDB4MjlFOSwgMHg4NTJDLCAweDExRjQsIDB4ODUyRCwgMHgxMUY1LCAweDg1MkUsIDB4MjlGQywNCi0gICAgMHg4NTJGLCAweDJBMEQsIDB4ODUzMCwgMHgyQTBBLCAweDg1MzEsIDB4MkEwMSwgMHg4NTNCLCAweDI5REQsDQotICAgIDB4ODUzRCwgMHgxMUYxLCAweDg1M0UsIDB4MkM0RiwgMHg4NTQwLCAweDJDNDYsIDB4ODU0MSwgMHgyQzQ5LA0KLSAgICAweDg1NDMsIDB4MTMzQiwgMHg4NTQ0LCAweDJDNEIsIDB4ODU0NSwgMHgyQzQwLCAweDg1NDYsIDB4MkM0NywNCi0gICAgMHg4NTQ3LCAweDJDNEQsIDB4ODU0OCwgMHgxMzM4LCAweDg1NDksIDB4MTMzQywgMHg4NTRBLCAweDEzMzYsDQotICAgIDB4ODU0RCwgMHgyQzQyLCAweDg1NEUsIDB4MkM1MiwgMHg4NTUxLCAweDJDNEMsIDB4ODU1MywgMHgyQzQzLA0KLSAgICAweDg1NTQsIDB4MkM1QiwgMHg4NTU1LCAweDJDNTUsIDB4ODU1NiwgMHgyQzNGLCAweDg1NTcsIDB4MkUyMywNCi0gICAgMHg4NTU4LCAweDJDNDUsIDB4ODU1OSwgMHgxMzM3LCAweDg1NUIsIDB4MkM1MCwgMHg4NTVELCAweDJDNUEsDQotICAgIDB4ODU1RSwgMHgxMzNGLCAweDg1NjAsIDB4MkM1NywgMHg4NTYxLCAweDJDNDQsIDB4ODU2MiwgMHgyQzRBLA0KLSAgICAweDg1NjMsIDB4MkM0RSwgMHg4NTY0LCAweDJDNDgsIDB4ODU2NSwgMHgyQzVDLCAweDg1NjYsIDB4MkM1OSwNCi0gICAgMHg4NTY3LCAweDJDNTYsIDB4ODU2OCwgMHgxMzM5LCAweDg1NjksIDB4MTMzQSwgMHg4NTZBLCAweDEzM0UsDQotICAgIDB4ODU2QiwgMHgyQzQxLCAweDg1NkMsIDB4MkM1RCwgMHg4NTZELCAweDEzM0QsIDB4ODU2RSwgMHgyQzUzLA0KLSAgICAweDg1NzEsIDB4MkM1MSwgMHg4NTc1LCAweDJDNTQsIDB4ODU3NiwgMHgyRTMwLCAweDg1NzcsIDB4MkUxRCwNCi0gICAgMHg4NTc4LCAweDJFMjIsIDB4ODU3OSwgMHgyRTJGLCAweDg1N0EsIDB4MkUyMSwgMHg4NTdCLCAweDJFMTksDQotICAgIDB4ODU3QywgMHgyRTFFLCAweDg1N0UsIDB4MTQ1QywgMHg4NTgwLCAweDJFMTIsIDB4ODU4MSwgMHgyRTJBLA0KLSAgICAweDg1ODIsIDB4MkUyQywgMHg4NTgzLCAweDJFMTEsIDB4ODU4NCwgMHgxNDVCLCAweDg1ODUsIDB4MkUyRSwNCi0gICAgMHg4NTg2LCAweDJFMjYsIDB4ODU4NywgMHgxNDYyLCAweDg1ODgsIDB4MkUyRCwgMHg4NTg5LCAweDJFMUYsDQotICAgIDB4ODU4QSwgMHgxNDY0LCAweDg1OEIsIDB4MkUxNywgMHg4NThDLCAweDJDNTgsIDB4ODU4RCwgMHgyRTI3LA0KLSAgICAweDg1OEUsIDB4MkUyNCwgMHg4NThGLCAweDJFMTMsIDB4ODU5MCwgMHgyRTMyLCAweDg1OTEsIDB4MTQ1RSwNCi0gICAgMHg4NTk0LCAweDE0NUYsIDB4ODU5NSwgMHgyRTE1LCAweDg1OTYsIDB4MkUyNSwgMHg4NTk4LCAweDJFMzEsDQotICAgIDB4ODU5OSwgMHgyRTI4LCAweDg1OUEsIDB4MkUxQiwgMHg4NTlCLCAweDE0NjEsIDB4ODU5QywgMHgxNDVELA0KLSAgICAweDg1OUQsIDB4MkUyOSwgMHg4NTlFLCAweDJFMUMsIDB4ODU5RiwgMHgyRTMzLCAweDg1QTAsIDB4MkUxNiwNCi0gICAgMHg4NUExLCAweDJFMjAsIDB4ODVBMiwgMHgyRTJCLCAweDg1QTMsIDB4MkUxOCwgMHg4NUE0LCAweDJFMUEsDQotICAgIDB4ODVBNiwgMHgxNDY1LCAweDg1QTcsIDB4MkUxNCwgMHg4NUE4LCAweDE0NjMsIDB4ODVBOSwgMHgxNTFDLA0KLSAgICAweDg1QUEsIDB4MTQ1QSwgMHg4NUFGLCAweDE0NjAsIDB4ODVCMCwgMHgxNTIwLCAweDg1QjEsIDB4MkZBNiwNCi0gICAgMHg4NUIzLCAweDJGOUMsIDB4ODVCNCwgMHgyRjk3LCAweDg1QjUsIDB4MkY5RCwgMHg4NUI2LCAweDJGQTcsDQotICAgIDB4ODVCNywgMHgyRkFCLCAweDg1QjgsIDB4MkZBQSwgMHg4NUI5LCAweDE1MjIsIDB4ODVCQSwgMHgxNTIxLA0KLSAgICAweDg1QkQsIDB4MkY5RSwgMHg4NUJFLCAweDJGQUMsIDB4ODVCRiwgMHgyRkExLCAweDg1QzAsIDB4MkY5OSwNCi0gICAgMHg4NUMyLCAweDJGOUIsIDB4ODVDMywgMHgyRjlBLCAweDg1QzQsIDB4MkZBMCwgMHg4NUM1LCAweDJGQTUsDQotICAgIDB4ODVDNiwgMHgyRjk4LCAweDg1QzcsIDB4MkY5RiwgMHg4NUM4LCAweDJGQTQsIDB4ODVDOSwgMHgxNTFGLA0KLSAgICAweDg1Q0IsIDB4MkZBMiwgMHg4NUNELCAweDE1MUQsIDB4ODVDRSwgMHgyRkEzLCAweDg1Q0YsIDB4MTUxQiwNCi0gICAgMHg4NUQwLCAweDE1MUUsIDB4ODVEMSwgMHgzMTAxLCAweDg1RDIsIDB4MkZBOCwgMHg4NUQ1LCAweDE1QjcsDQotICAgIDB4ODVENywgMHgzMEY5LCAweDg1RDgsIDB4MzBGRCwgMHg4NUQ5LCAweDMwRjUsIDB4ODVEQSwgMHgzMEY4LA0KLSAgICAweDg1REMsIDB4MzEwMCwgMHg4NURELCAweDE1QjUsIDB4ODVERSwgMHgzMTA1LCAweDg1REYsIDB4MzBGRSwNCi0gICAgMHg4NUUxLCAweDMwRjYsIDB4ODVFMiwgMHgzMTA2LCAweDg1RTMsIDB4MzBGRiwgMHg4NUU0LCAweDE1QjgsDQotICAgIDB4ODVFNSwgMHgxNUI5LCAweDg1RTYsIDB4MzEwMywgMHg4NUU4LCAweDMwRjcsIDB4ODVFOSwgMHgxNUI0LA0KLSAgICAweDg1RUEsIDB4MTVCNiwgMHg4NUVCLCAweDMwRjIsIDB4ODVFQywgMHgzMEZBLCAweDg1RUQsIDB4MzBGNCwNCi0gICAgMHg4NUVGLCAweDMxMDQsIDB4ODVGMCwgMHgzMTAyLCAweDg1RjEsIDB4MzBGMywgMHg4NUYyLCAweDMwRkIsDQotICAgIDB4ODVGNiwgMHgzMjI1LCAweDg1RjcsIDB4MTVCQSwgMHg4NUY4LCAweDMwRkMsIDB4ODVGOSwgMHgxNjM4LA0KLSAgICAweDg1RkEsIDB4MTYzQSwgMHg4NUZCLCAweDE2MzcsIDB4ODVGRCwgMHgzMjJBLCAweDg1RkUsIDB4MzIyMiwNCi0gICAgMHg4NUZGLCAweDMyMjAsIDB4ODYwMCwgMHgzMjI0LCAweDg2MDEsIDB4MzIyMSwgMHg4NjA0LCAweDMyMjYsDQotICAgIDB4ODYwNSwgMHgzMjI4LCAweDg2MDYsIDB4MTYzQiwgMHg4NjA3LCAweDE2M0QsIDB4ODYwOSwgMHgzMjI3LA0KLSAgICAweDg2MEEsIDB4MTYzRSwgMHg4NjBCLCAweDE2M0MsIDB4ODYwQywgMHgzMjI5LCAweDg2MTEsIDB4MTYzOSwNCi0gICAgMHg4NjE3LCAweDE2ODUsIDB4ODYxOCwgMHgzMkY2LCAweDg2MTksIDB4MzJGQywgMHg4NjFBLCAweDE2ODcsDQotICAgIDB4ODYxQiwgMHgzMjIzLCAweDg2MUMsIDB4MzJGQiwgMHg4NjFFLCAweDMzMDIsIDB4ODYxRiwgMHgzMkY5LA0KLSAgICAweDg2MjAsIDB4MzMwMCwgMHg4NjIxLCAweDMyRkYsIDB4ODYyMiwgMHgzMjFGLCAweDg2MjMsIDB4MzJGQSwNCi0gICAgMHg4NjI0LCAweDJGQTksIDB4ODYyNSwgMHgzMzAzLCAweDg2MjYsIDB4MzJGOCwgMHg4NjI3LCAweDMyRkQsDQotICAgIDB4ODYyOSwgMHgzMzAxLCAweDg2MkEsIDB4MzJGNywgMHg4NjJDLCAweDMzQUEsIDB4ODYyRCwgMHgxNjg2LA0KLSAgICAweDg2MkUsIDB4MzJGRSwgMHg4NjMxLCAweDM0MzIsIDB4ODYzMiwgMHgzM0FCLCAweDg2MzMsIDB4MzNBOSwNCi0gICAgMHg4NjM0LCAweDMzQTcsIDB4ODYzNSwgMHgzM0E4LCAweDg2MzYsIDB4MzNBQywgMHg4NjM4LCAweDE3MDcsDQotICAgIDB4ODYzOSwgMHgzNDMwLCAweDg2M0EsIDB4MzQyRSwgMHg4NjNCLCAweDM0MzMsIDB4ODYzQywgMHgzNDMxLA0KLSAgICAweDg2M0UsIDB4MzQzNCwgMHg4NjNGLCAweDE3MDgsIDB4ODY0MCwgMHgzNDJGLCAweDg2NDMsIDB4MzQ5NywNCi0gICAgMHg4NjQ2LCAweDM0REYsIDB4ODY0NywgMHgzNEUwLCAweDg2NDgsIDB4MzRFMSwgMHg4NjRCLCAweDM1M0UsDQotICAgIDB4ODY0QywgMHgzNTM2LCAweDg2NEQsIDB4MTgxOCwgMHg4NjRFLCAweDA2ODksIDB4ODY1MCwgMHgwN0ZGLA0KLSAgICAweDg2NTIsIDB4MURFMywgMHg4NjUzLCAweDFERTIsIDB4ODY1NCwgMHgwOUFGLCAweDg2NTUsIDB4MEI4OCwNCi0gICAgMHg4NjU2LCAweDIwM0MsIDB4ODY1OSwgMHgyMDNCLCAweDg2NUIsIDB4MEQ0OCwgMHg4NjVDLCAweDBFRUQsDQotICAgIDB4ODY1RSwgMHgwRUVDLCAweDg2NUYsIDB4MEVFRSwgMHg4NjYxLCAweDI3Q0UsIDB4ODY2MiwgMHgyQTBFLA0KLSAgICAweDg2NjMsIDB4MkM1RSwgMHg4NjY0LCAweDJDNjAsIDB4ODY2NSwgMHgyQzVGLCAweDg2NjcsIDB4MTQ2NiwNCi0gICAgMHg4NjY4LCAweDJFMzQsIDB4ODY2OSwgMHgyRkFELCAweDg2NkEsIDB4MzUxRSwgMHg4NjZCLCAweDA0MEYsDQotICAgIDB4ODY2RCwgMHgxQTQ2LCAweDg2NkUsIDB4MUE0NywgMHg4NjZGLCAweDFBNDUsIDB4ODY3MCwgMHgxQTQ0LA0KLSAgICAweDg2NzEsIDB4MDY4QSwgMHg4NjczLCAweDFCRkQsIDB4ODY3NCwgMHgxQkZCLCAweDg2NzcsIDB4MUJGQSwNCi0gICAgMHg4Njc5LCAweDA4MDAsIDB4ODY3QSwgMHgwODAyLCAweDg2N0IsIDB4MDgwMSwgMHg4NjdDLCAweDFCRkMsDQotICAgIDB4ODY4NSwgMHgxREVGLCAweDg2ODYsIDB4MURFQywgMHg4Njg3LCAweDFERUEsIDB4ODY4QSwgMHgwOUIwLA0KLSAgICAweDg2OEIsIDB4MURFRCwgMHg4NjhDLCAweDA5QjUsIDB4ODY4RCwgMHgxREU3LCAweDg2OEUsIDB4MURGNiwNCi0gICAgMHg4NjkwLCAweDFERjgsIDB4ODY5MSwgMHgxREU4LCAweDg2OTMsIDB4MDlCMiwgMHg4Njk0LCAweDFERjksDQotICAgIDB4ODY5NSwgMHgxREY0LCAweDg2OTYsIDB4MURFNiwgMHg4Njk3LCAweDFERUIsIDB4ODY5OCwgMHgxREY1LA0KLSAgICAweDg2OTksIDB4MURGMSwgMHg4NjlBLCAweDFERUUsIDB4ODY5QywgMHgwOUI3LCAweDg2OUQsIDB4MURGNywNCi0gICAgMHg4NjlFLCAweDFERTksIDB4ODZBMSwgMHgxREYyLCAweDg2QTIsIDB4MURFNCwgMHg4NkEzLCAweDA5QjYsDQotICAgIDB4ODZBNCwgMHgwOUIzLCAweDg2QTUsIDB4MURGMCwgMHg4NkE3LCAweDFERjMsIDB4ODZBOCwgMHgxREU1LA0KLSAgICAweDg2QTksIDB4MDlCNCwgMHg4NkFBLCAweDA5QjEsIDB4ODZBRiwgMHgwQjkyLCAweDg2QjAsIDB4MjA0MywNCi0gICAgMHg4NkIxLCAweDBCOTEsIDB4ODZCMywgMHgyMDQ2LCAweDg2QjQsIDB4MjA0OSwgMHg4NkI1LCAweDBCOEUsDQotICAgIDB4ODZCNiwgMHgwQjhDLCAweDg2QjcsIDB4MjAzRSwgMHg4NkI4LCAweDIwNDcsIDB4ODZCOSwgMHgyMDQ1LA0KLSAgICAweDg2QkEsIDB4MjA0MiwgMHg4NkJCLCAweDIwNEEsIDB4ODZCQywgMHgyMDRCLCAweDg2QkQsIDB4MjA0RCwNCi0gICAgMHg4NkJFLCAweDIwNEUsIDB4ODZCRiwgMHgyMDNELCAweDg2QzAsIDB4MEI4QiwgMHg4NkMxLCAweDIwNDAsDQotICAgIDB4ODZDMiwgMHgyMDNGLCAweDg2QzMsIDB4MjA0QywgMHg4NkM0LCAweDBCOEQsIDB4ODZDNSwgMHgyMDQxLA0KLSAgICAweDg2QzYsIDB4MEI4RiwgMHg4NkM3LCAweDBCOEEsIDB4ODZDOCwgMHgyMDQ0LCAweDg2QzksIDB4MEI5MywNCi0gICAgMHg4NkNCLCAweDBCOTAsIDB4ODZDQywgMHgyMDQ4LCAweDg2RDAsIDB4MEQ0RiwgMHg4NkQxLCAweDIyRDIsDQotICAgIDB4ODZEMywgMHgyMkM3LCAweDg2RDQsIDB4MEQ0QywgMHg4NkQ2LCAweDI1NkQsIDB4ODZENywgMHgyMkQwLA0KLSAgICAweDg2RDgsIDB4MjJDNCwgMHg4NkQ5LCAweDBENEEsIDB4ODZEQSwgMHgyMkM5LCAweDg2REIsIDB4MEQ0RCwNCi0gICAgMHg4NkRDLCAweDIyQ0QsIDB4ODZERCwgMHgyMkNCLCAweDg2REUsIDB4MEQ1MCwgMHg4NkRGLCAweDBENDksDQotICAgIDB4ODZFMiwgMHgyMkM1LCAweDg2RTMsIDB4MjJDOCwgMHg4NkU0LCAweDBENEUsIDB4ODZFNiwgMHgyMkM2LA0KLSAgICAweDg2RTgsIDB4MjJEMSwgMHg4NkU5LCAweDIyQ0YsIDB4ODZFQSwgMHgyMkNBLCAweDg2RUIsIDB4MjJDQywNCi0gICAgMHg4NkVDLCAweDIyQ0UsIDB4ODZFRCwgMHgwRDRCLCAweDg2RjUsIDB4MjU2RSwgMHg4NkY2LCAweDI1NzQsDQotICAgIDB4ODZGNywgMHgyNTZBLCAweDg2RjgsIDB4MjU3MCwgMHg4NkY5LCAweDBFRUYsIDB4ODZGQSwgMHgyNTZDLA0KLSAgICAweDg2RkIsIDB4MEVGNSwgMHg4NkZFLCAweDBFRjQsIDB4ODcwMCwgMHgwRUYzLCAweDg3MDEsIDB4MjU3MywNCi0gICAgMHg4NzAyLCAweDBFRjYsIDB4ODcwMywgMHgwRUY3LCAweDg3MDQsIDB4MjU2OSwgMHg4NzA1LCAweDI1NzYsDQotICAgIDB4ODcwNiwgMHgwRUY4LCAweDg3MDcsIDB4MEVGMiwgMHg4NzA4LCAweDBFRjEsIDB4ODcwOSwgMHgyNTcyLA0KLSAgICAweDg3MEEsIDB4MEVGOSwgMHg4NzBCLCAweDI1NjgsIDB4ODcwQywgMHgyNTZCLCAweDg3MEQsIDB4MjU3NSwNCi0gICAgMHg4NzBFLCAweDI1NzEsIDB4ODcxMSwgMHgyN0VFLCAweDg3MTIsIDB4MjdFMywgMHg4NzEzLCAweDBFRjAsDQotICAgIDB4ODcxOCwgMHgxMDk4LCAweDg3MTksIDB4MjdENywgMHg4NzFBLCAweDI3RUMsIDB4ODcxQiwgMHgyN0Q4LA0KLSAgICAweDg3MUMsIDB4MTA5MywgMHg4NzFFLCAweDI3RDUsIDB4ODcyMCwgMHgyN0RFLCAweDg3MjEsIDB4MjdENiwNCi0gICAgMHg4NzIyLCAweDEwOTUsIDB4ODcyMywgMHgyN0QwLCAweDg3MjQsIDB4MjdFQiwgMHg4NzI1LCAweDEwOTYsDQotICAgIDB4ODcyNiwgMHgyN0U4LCAweDg3MjcsIDB4MjdFOSwgMHg4NzI4LCAweDI3RDEsIDB4ODcyOSwgMHgxMDlCLA0KLSAgICAweDg3MkEsIDB4MjdFMCwgMHg4NzJDLCAweDI3REEsIDB4ODcyRCwgMHgyN0UxLCAweDg3MkUsIDB4MjdENCwNCi0gICAgMHg4NzMwLCAweDI3RUQsIDB4ODczMSwgMHgyN0U1LCAweDg3MzIsIDB4MjdERiwgMHg4NzMzLCAweDI3Q0YsDQotICAgIDB4ODczNCwgMHgxMDk3LCAweDg3MzUsIDB4MjdFNiwgMHg4NzM3LCAweDEwOUEsIDB4ODczOCwgMHgyN0VBLA0KLSAgICAweDg3M0EsIDB4MjdFNCwgMHg4NzNCLCAweDEwOTQsIDB4ODczQywgMHgyN0UyLCAweDg3M0UsIDB4MjdEQywNCi0gICAgMHg4NzNGLCAweDEwOTIsIDB4ODc0MCwgMHgyN0QzLCAweDg3NDEsIDB4MjdEQiwgMHg4NzQyLCAweDI3RTcsDQotICAgIDB4ODc0MywgMHgyN0Q5LCAweDg3NDYsIDB4MjdERCwgMHg4NzRDLCAweDEyMDgsIDB4ODc0RCwgMHgyNTZGLA0KLSAgICAweDg3NEUsIDB4MkEyMCwgMHg4NzRGLCAweDJBMjksIDB4ODc1MCwgMHgyQTFGLCAweDg3NTEsIDB4MkExQiwNCi0gICAgMHg4NzUyLCAweDJBMTgsIDB4ODc1MywgMHgxMjA5LCAweDg3NTQsIDB4MkExNiwgMHg4NzU1LCAweDEwOTksDQotICAgIDB4ODc1NiwgMHgyQTBGLCAweDg3NTcsIDB4MTIwNywgMHg4NzU4LCAweDJBMTUsIDB4ODc1OSwgMHgxMjA2LA0KLSAgICAweDg3NUEsIDB4MkExQSwgMHg4NzVCLCAweDJBMTcsIDB4ODc1QywgMHgyQTI3LCAweDg3NUQsIDB4MkEyMiwNCi0gICAgMHg4NzVFLCAweDJBMUMsIDB4ODc1RiwgMHgyQTIxLCAweDg3NjAsIDB4MTIwMiwgMHg4NzYxLCAweDJBMTksDQotICAgIDB4ODc2MiwgMHgyQTJDLCAweDg3NjMsIDB4MkExMCwgMHg4NzY0LCAweDJBMTEsIDB4ODc2NSwgMHgyQTI4LA0KLSAgICAweDg3NjYsIDB4MTIwMywgMHg4NzY3LCAweDJBMkQsIDB4ODc2OCwgMHgxMjA1LCAweDg3NjksIDB4MkEyRSwNCi0gICAgMHg4NzZBLCAweDJBMUUsIDB4ODc2QiwgMHgyN0QyLCAweDg3NkMsIDB4MkEyNCwgMHg4NzZELCAweDJBMUQsDQotICAgIDB4ODc2RSwgMHgyQTI2LCAweDg3NkYsIDB4MkEyMywgMHg4NzczLCAweDJBMTQsIDB4ODc3NCwgMHgxMjAwLA0KLSAgICAweDg3NzUsIDB4MkEyQiwgMHg4Nzc2LCAweDEyMDEsIDB4ODc3NywgMHgyQTEyLCAweDg3NzgsIDB4MTIwNCwNCi0gICAgMHg4Nzc5LCAweDJDNkIsIDB4ODc3QSwgMHgyQTI1LCAweDg3N0IsIDB4MkEyQSwgMHg4NzgxLCAweDJDNjgsDQotICAgIDB4ODc4MiwgMHgxMUZGLCAweDg3ODMsIDB4MTM0MCwgMHg4Nzg0LCAweDJDNzIsIDB4ODc4NSwgMHgyQzZFLA0KLSAgICAweDg3ODcsIDB4MkM2QywgMHg4Nzg4LCAweDJDNjcsIDB4ODc4OSwgMHgyQzc2LCAweDg3OEQsIDB4MTM0NCwNCi0gICAgMHg4NzhGLCAweDJDNjMsIDB4ODc5MCwgMHgyQzZGLCAweDg3OTEsIDB4MkM3MCwgMHg4NzkyLCAweDJDNjYsDQotICAgIDB4ODc5MywgMHgyQzY1LCAweDg3OTQsIDB4MkM3MywgMHg4Nzk2LCAweDJDNjksIDB4ODc5NywgMHgyQzY0LA0KLSAgICAweDg3OTgsIDB4MkM2QSwgMHg4NzlBLCAweDJDNzUsIDB4ODc5QiwgMHgyQzYyLCAweDg3OUMsIDB4MkM3NCwNCi0gICAgMHg4NzlELCAweDJDNzEsIDB4ODc5RSwgMHgxMzQyLCAweDg3OUYsIDB4MTM0MSwgMHg4N0EyLCAweDEzNDMsDQotICAgIDB4ODdBMywgMHgyQzZELCAweDg3QTQsIDB4MkM2MSwgMHg4N0FBLCAweDJFMzYsIDB4ODdBQiwgMHgxNDZDLA0KLSAgICAweDg3QUMsIDB4MkUzQSwgMHg4N0FELCAweDJFMzcsIDB4ODdBRSwgMHgyRTNFLCAweDg3QUYsIDB4MkU0NCwNCi0gICAgMHg4N0IwLCAweDJFMzksIDB4ODdCMiwgMHgyRTRELCAweDg3QjMsIDB4MTQ2OSwgMHg4N0I0LCAweDJFNDcsDQotICAgIDB4ODdCNSwgMHgyRTNDLCAweDg3QjYsIDB4MkU0OCwgMHg4N0I3LCAweDJFNDMsIDB4ODdCOCwgMHgyRTRBLA0KLSAgICAweDg3QjksIDB4MkUzQiwgMHg4N0JBLCAweDE0NkUsIDB4ODdCQiwgMHgxNDZELCAweDg3QkMsIDB4MkUzRCwNCi0gICAgMHg4N0JELCAweDJFNEIsIDB4ODdCRSwgMHgyRTM1LCAweDg3QkYsIDB4MkU0OSwgMHg4N0MwLCAweDE0NjcsDQotICAgIDB4ODdDMiwgMHgyRTQxLCAweDg3QzMsIDB4MkU0MCwgMHg4N0M0LCAweDJFNDUsIDB4ODdDNSwgMHgyRTM4LA0KLSAgICAweDg3QzYsIDB4MTQ2QiwgMHg4N0M4LCAweDE0NkYsIDB4ODdDOSwgMHgyRTNGLCAweDg3Q0EsIDB4MkU0NiwNCi0gICAgMHg4N0NCLCAweDE0NzAsIDB4ODdDQywgMHgyRTQyLCAweDg3RDEsIDB4MTQ2OCwgMHg4N0QyLCAweDE0NkEsDQotICAgIDB4ODdEMywgMHgyRkJBLCAweDg3RDQsIDB4MkZCOCwgMHg4N0Q3LCAweDJGQkUsIDB4ODdEOCwgMHgyRkJDLA0KLSAgICAweDg3RDksIDB4MkZCRiwgMHg4N0RCLCAweDJGQjEsIDB4ODdEQywgMHgyRkI5LCAweDg3REQsIDB4MkZDMywNCi0gICAgMHg4N0RFLCAweDJFNEMsIDB4ODdERiwgMHgyRkI1LCAweDg3RTAsIDB4MTUyNiwgMHg4N0UxLCAweDJBMTMsDQotICAgIDB4ODdFMiwgMHgyRkIwLCAweDg3RTMsIDB4MkZCRCwgMHg4N0U0LCAweDJGQjcsIDB4ODdFNSwgMHgyRkI0LA0KLSAgICAweDg3RTYsIDB4MkZBRiwgMHg4N0U3LCAweDJGQUUsIDB4ODdFOCwgMHgyRkMyLCAweDg3RUEsIDB4MkZCMywNCi0gICAgMHg4N0VCLCAweDJGQjIsIDB4ODdFQywgMHgxNTI0LCAweDg3RUQsIDB4MkZCQiwgMHg4N0VGLCAweDE1MjMsDQotICAgIDB4ODdGMiwgMHgxNTI1LCAweDg3RjMsIDB4MkZCNiwgMHg4N0Y0LCAweDJGQzEsIDB4ODdGNiwgMHgzMTBBLA0KLSAgICAweDg3RjcsIDB4MzEwQiwgMHg4N0Y5LCAweDE1QkUsIDB4ODdGQSwgMHgzMTA4LCAweDg3RkIsIDB4MTVCQiwNCi0gICAgMHg4N0ZDLCAweDMxMTAsIDB4ODdGRSwgMHgxNUJGLCAweDg3RkYsIDB4MzExMiwgMHg4ODAwLCAweDMxMDcsDQotICAgIDB4ODgwMSwgMHgyRkMwLCAweDg4MDIsIDB4MzExNCwgMHg4ODAzLCAweDMxMDksIDB4ODgwNSwgMHgxNUJDLA0KLSAgICAweDg4MDYsIDB4MzEwRiwgMHg4ODA4LCAweDMxMTEsIDB4ODgwOSwgMHgzMTBDLCAweDg4MEEsIDB4MzExMywNCi0gICAgMHg4ODBCLCAweDMxMEUsIDB4ODgwQywgMHgzMTBELCAweDg4MEQsIDB4MTVCRCwgMHg4ODEwLCAweDMyMkMsDQotICAgIDB4ODgxMSwgMHgzMjJELCAweDg4MTMsIDB4MzIyRiwgMHg4ODE0LCAweDE2M0YsIDB4ODgxNSwgMHgxNjQwLA0KLSAgICAweDg4MTYsIDB4MzIzMCwgMHg4ODE3LCAweDMyMkUsIDB4ODgxOSwgMHgzMjJCLCAweDg4MUIsIDB4MzMwNiwNCi0gICAgMHg4ODFDLCAweDMzMDksIDB4ODgxRCwgMHgzMzA1LCAweDg4MUYsIDB4MTY4QiwgMHg4ODIwLCAweDMzMDcsDQotICAgIDB4ODgyMSwgMHgxNjhBLCAweDg4MjIsIDB4MTY4OSwgMHg4ODIzLCAweDE2ODgsIDB4ODgyNCwgMHgzMzA4LA0KLSAgICAweDg4MjUsIDB4MzNCMSwgMHg4ODI2LCAweDMzQUYsIDB4ODgyOCwgMHgzM0FFLCAweDg4MjksIDB4MzMwNCwNCi0gICAgMHg4ODJBLCAweDMzQjAsIDB4ODgyQiwgMHgzMzBBLCAweDg4MkMsIDB4MzNBRCwgMHg4ODJFLCAweDM0MzcsDQotICAgIDB4ODgyRiwgMHgzNDE1LCAweDg4MzAsIDB4MzQzNSwgMHg4ODMxLCAweDE3MDksIDB4ODgzMiwgMHgzNDM2LA0KLSAgICAweDg4MzMsIDB4MzQzOCwgMHg4ODM1LCAweDM0OUEsIDB4ODgzNiwgMHgxNzI4LCAweDg4MzcsIDB4MzQ5OSwNCi0gICAgMHg4ODM4LCAweDM0OTgsIDB4ODgzOSwgMHgxNzI5LCAweDg4M0IsIDB4MTc0NywgMHg4ODNDLCAweDM1MDgsDQotICAgIDB4ODgzRCwgMHgzNTIwLCAweDg4M0UsIDB4MzUxRiwgMHg4ODNGLCAweDM1MjEsIDB4ODg0MCwgMHgwNDEwLA0KLSAgICAweDg4NDEsIDB4MUJGRSwgMHg4ODQzLCAweDFERkEsIDB4ODg0NCwgMHgxREZCLCAweDg4NDgsIDB4MjJEMywNCi0gICAgMHg4ODRBLCAweDMzMEIsIDB4ODg0QiwgMHgzNDlCLCAweDg4NEMsIDB4MDQxMSwgMHg4ODRELCAweDA4MDMsDQotICAgIDB4ODg0RSwgMHgxQkZGLCAweDg4NTIsIDB4MjA0RiwgMHg4ODUzLCAweDBCOTQsIDB4ODg1NSwgMHgyMkQ1LA0KLSAgICAweDg4NTYsIDB4MjJENCwgMHg4ODU3LCAweDBENTEsIDB4ODg1OSwgMHgwRUZBLCAweDg4NUEsIDB4MkEyRiwNCi0gICAgMHg4ODVCLCAweDEyMEEsIDB4ODg1RCwgMHgxMjBCLCAweDg4NjEsIDB4MTM0NSwgMHg4ODYyLCAweDE3MkEsDQotICAgIDB4ODg2MywgMHgwNDEyLCAweDg4NjcsIDB4MUMwMCwgMHg4ODY4LCAweDA2OEMsIDB4ODg2OSwgMHgxQzAyLA0KLSAgICAweDg4NkEsIDB4MUMwMSwgMHg4ODZCLCAweDA4MDQsIDB4ODg2RCwgMHgxREZDLCAweDg4NkYsIDB4MUUwMywNCi0gICAgMHg4ODcwLCAweDA5QjgsIDB4ODg3MSwgMHgxRTAxLCAweDg4NzIsIDB4MURGRiwgMHg4ODc0LCAweDFFMDYsDQotICAgIDB4ODg3NSwgMHgxREZELCAweDg4NzYsIDB4MURGRSwgMHg4ODc3LCAweDA5QjksIDB4ODg3OSwgMHgwOUJELA0KLSAgICAweDg4N0MsIDB4MUUwNywgMHg4ODdELCAweDA5QkMsIDB4ODg3RSwgMHgxRTA1LCAweDg4N0YsIDB4MUUwMiwNCi0gICAgMHg4ODgwLCAweDFFMDAsIDB4ODg4MSwgMHgwOUJBLCAweDg4ODIsIDB4MDlCQiwgMHg4ODgzLCAweDFFMDQsDQotICAgIDB4ODg4OCwgMHgwQjk2LCAweDg4ODksIDB4MjA1MCwgMHg4ODhCLCAweDBCOUIsIDB4ODg4QywgMHgyMDYwLA0KLSAgICAweDg4OEQsIDB4MEI5QSwgMHg4ODhFLCAweDIwNjIsIDB4ODg5MSwgMHgyMDU2LCAweDg4OTIsIDB4MEI5OCwNCi0gICAgMHg4ODkzLCAweDIwNjEsIDB4ODg5NSwgMHgyMDUxLCAweDg4OTYsIDB4MEI5OSwgMHg4ODk3LCAweDIwNUQsDQotICAgIDB4ODg5OCwgMHgyMDU5LCAweDg4OTksIDB4MjA1QiwgMHg4ODlBLCAweDIwNTUsIDB4ODg5QiwgMHgyMDVDLA0KLSAgICAweDg4OUUsIDB4MEI5NSwgMHg4ODlGLCAweDIwNTgsIDB4ODhBMSwgMHgyMDU3LCAweDg4QTIsIDB4MjA1MywNCi0gICAgMHg4OEE0LCAweDIwNUUsIDB4ODhBNywgMHgyMDVBLCAweDg4QTgsIDB4MjA1MiwgMHg4OEFBLCAweDIwNTQsDQotICAgIDB4ODhBQiwgMHgwQjk3LCAweDg4QUMsIDB4MjA1RiwgMHg4OEIxLCAweDBENTQsIDB4ODhCMiwgMHgyMkUwLA0KLSAgICAweDg4QjYsIDB4MjJEQywgMHg4OEI3LCAweDIyREUsIDB4ODhCOCwgMHgyMkQ5LCAweDg4QjksIDB4MjJEOCwNCi0gICAgMHg4OEJBLCAweDIyRDYsIDB4ODhCQywgMHgyMkRELCAweDg4QkQsIDB4MjJERiwgMHg4OEJFLCAweDIyREIsDQotICAgIDB4ODhDMCwgMHgyMkRBLCAweDg4QzEsIDB4MEQ1MiwgMHg4OEMyLCAweDBENTMsIDB4ODhDOSwgMHgyMkUyLA0KLSAgICAweDg4Q0EsIDB4MEYwMiwgMHg4OENCLCAweDI1NzgsIDB4ODhDQywgMHgyNTdFLCAweDg4Q0QsIDB4MjU3OSwNCi0gICAgMHg4OENFLCAweDI1N0EsIDB4ODhDRiwgMHgzNkVBLCAweDg4RDAsIDB4MjU3RiwgMHg4OEQyLCAweDBGMDQsDQotICAgIDB4ODhENCwgMHgwRUZDLCAweDg4RDUsIDB4MEYwMywgMHg4OEQ2LCAweDI1NzcsIDB4ODhENywgMHgyMkQ3LA0KLSAgICAweDg4RDgsIDB4MEVGRiwgMHg4OEQ5LCAweDBFRkQsIDB4ODhEQSwgMHgyNTdELCAweDg4REIsIDB4MjU3QywNCi0gICAgMHg4OERDLCAweDBFRkUsIDB4ODhERCwgMHgwRjAwLCAweDg4REUsIDB4MjU3QiwgMHg4OERGLCAweDBFRkIsDQotICAgIDB4ODhFMSwgMHgwRjAxLCAweDg4RTcsIDB4MjdGMCwgMHg4OEU4LCAweDEwQTIsIDB4ODhFQiwgMHgyN0ZCLA0KLSAgICAweDg4RUMsIDB4MjdGQSwgMHg4OEVFLCAweDI3RjUsIDB4ODhFRiwgMHgxMEE0LCAweDg4RjAsIDB4MjdGOSwNCi0gICAgMHg4OEYxLCAweDI3RjEsIDB4ODhGMiwgMHgyN0YyLCAweDg4RjMsIDB4MTA5QywgMHg4OEY0LCAweDEwOUUsDQotICAgIDB4ODhGNiwgMHgyN0Y3LCAweDg4RjcsIDB4MjdFRiwgMHg4OEY4LCAweDEwQTAsIDB4ODhGOSwgMHgxMDlGLA0KLSAgICAweDg4RkEsIDB4MjdGMywgMHg4OEZCLCAweDI3RjgsIDB4ODhGQywgMHgyN0Y2LCAweDg4RkQsIDB4MTBBMSwNCi0gICAgMHg4OEZFLCAweDI3RjQsIDB4ODkwMSwgMHgyMkUxLCAweDg5MDIsIDB4MTA5RCwgMHg4OTA1LCAweDJBMzAsDQotICAgIDB4ODkwNiwgMHgyQTM3LCAweDg5MDcsIDB4MTIwRCwgMHg4OTA5LCAweDJBM0IsIDB4ODkwQSwgMHgxMjExLA0KLSAgICAweDg5MEIsIDB4MkEzMywgMHg4OTBDLCAweDJBMzEsIDB4ODkwRSwgMHgyQTNBLCAweDg5MTAsIDB4MTIwQywNCi0gICAgMHg4OTExLCAweDJBMzksIDB4ODkxMiwgMHgxMjBFLCAweDg5MTMsIDB4MTIwRiwgMHg4OTE0LCAweDJBMzIsDQotICAgIDB4ODkxNSwgMHgxMjEwLCAweDg5MTYsIDB4MkEzOCwgMHg4OTE3LCAweDJBMzQsIDB4ODkxOCwgMHgyQTM1LA0KLSAgICAweDg5MTksIDB4MkEzNiwgMHg4OTFBLCAweDEwQTMsIDB4ODkxRSwgMHgyQzc3LCAweDg5MUYsIDB4MkM4MywNCi0gICAgMHg4OTIxLCAweDEzNEEsIDB4ODkyMiwgMHgyQzdFLCAweDg5MjMsIDB4MkM4MCwgMHg4OTI1LCAweDEzNDgsDQotICAgIDB4ODkyNiwgMHgyQzc4LCAweDg5MjcsIDB4MkM3QywgMHg4OTI5LCAweDJDN0YsIDB4ODkyQSwgMHgxMzQ2LA0KLSAgICAweDg5MkIsIDB4MTM0OSwgMHg4OTJDLCAweDJDODIsIDB4ODkyRCwgMHgyQzdBLCAweDg5MkUsIDB4MkM3QiwNCi0gICAgMHg4OTJGLCAweDJDODEsIDB4ODkzMCwgMHgyQzc5LCAweDg5MzEsIDB4MkM3RCwgMHg4OTMyLCAweDEzNDcsDQotICAgIDB4ODkzMywgMHgyRTRGLCAweDg5MzUsIDB4MkU0RSwgMHg4OTM2LCAweDE0NzIsIDB4ODkzNywgMHgyRTU0LA0KLSAgICAweDg5MzgsIDB4MTQ3NCwgMHg4OTNCLCAweDE0NzEsIDB4ODkzQywgMHgyRTUwLCAweDg5M0QsIDB4MTQ3NSwNCi0gICAgMHg4OTNFLCAweDJFNTEsIDB4ODk0MSwgMHgyRTUyLCAweDg5NDIsIDB4MkU1NSwgMHg4OTQ0LCAweDE0NzMsDQotICAgIDB4ODk0NiwgMHgyRkM4LCAweDg5NDksIDB4MkZDQiwgMHg4OTRCLCAweDJGQzUsIDB4ODk0QywgMHgyRkM3LA0KLSAgICAweDg5NEYsIDB4MkZDNiwgMHg4OTUwLCAweDJGQzksIDB4ODk1MSwgMHgyRkNBLCAweDg5NTIsIDB4MkU1MywNCi0gICAgMHg4OTUzLCAweDJGQzQsIDB4ODk1NiwgMHgxNUMyLCAweDg5NTcsIDB4MzExOCwgMHg4OTU4LCAweDMxMUIsDQotICAgIDB4ODk1OSwgMHgzMTFELCAweDg5NUEsIDB4MzExNiwgMHg4OTVCLCAweDMxMTcsIDB4ODk1QywgMHgzMTFBLA0KLSAgICAweDg5NUQsIDB4MzExQywgMHg4OTVFLCAweDE1QzMsIDB4ODk1RiwgMHgxNUMxLCAweDg5NjAsIDB4MTVDMCwNCi0gICAgMHg4OTYxLCAweDMxMTksIDB4ODk2MiwgMHgzMTE1LCAweDg5NjMsIDB4MzIzMSwgMHg4OTY0LCAweDE2NDEsDQotICAgIDB4ODk2NiwgMHgzMjMyLCAweDg5NjksIDB4MzMwRCwgMHg4OTZBLCAweDE2OEMsIDB4ODk2QiwgMHgzMzBGLA0KLSAgICAweDg5NkMsIDB4MTY4RCwgMHg4OTZELCAweDMzMEMsIDB4ODk2RSwgMHgzMzBFLCAweDg5NkYsIDB4MTZENiwNCi0gICAgMHg4OTcxLCAweDMzQjIsIDB4ODk3MiwgMHgxNkQ1LCAweDg5NzMsIDB4MzQzQiwgMHg4OTc0LCAweDM0M0EsDQotICAgIDB4ODk3NiwgMHgzNDM5LCAweDg5NzksIDB4MzRFMiwgMHg4OTdBLCAweDM0RTMsIDB4ODk3QiwgMHgzNEU1LA0KLSAgICAweDg5N0MsIDB4MzRFNCwgMHg4OTdFLCAweDE4MTksIDB4ODk3RiwgMHgwNDEzLCAweDg5ODEsIDB4MDgwNSwNCi0gICAgMHg4OTgyLCAweDIwNjMsIDB4ODk4MywgMHgwRDU1LCAweDg5ODUsIDB4MjU4MCwgMHg4OTg2LCAweDE1MjcsDQotICAgIDB4ODk4OCwgMHgzMTFFLCAweDg5OEIsIDB4MDUwOCwgMHg4OThGLCAweDBCOUQsIDB4ODk5MywgMHgwQjlDLA0KLSAgICAweDg5OTUsIDB4MjJFMywgMHg4OTk2LCAweDBENTYsIDB4ODk5NywgMHgyMkU1LCAweDg5OTgsIDB4MjJFNCwNCi0gICAgMHg4OTlCLCAweDI1ODEsIDB4ODk5QywgMHgwRjA1LCAweDg5OUQsIDB4MjdGQywgMHg4OTlFLCAweDI3RkYsDQotICAgIDB4ODk5RiwgMHgyN0ZFLCAweDg5QTEsIDB4MjdGRCwgMHg4OUEyLCAweDJBM0MsIDB4ODlBMywgMHgyQTNFLA0KLSAgICAweDg5QTQsIDB4MkEzRCwgMHg4OUE2LCAweDEzNEMsIDB4ODlBQSwgMHgxMzRCLCAweDg5QUMsIDB4MTQ3NiwNCi0gICAgMHg4OUFELCAweDJFNTYsIDB4ODlBRSwgMHgyRTU4LCAweDg5QUYsIDB4MkU1NywgMHg4OUIyLCAweDE1MjgsDQotICAgIDB4ODlCNiwgMHgzMTIwLCAweDg5QjcsIDB4MzExRiwgMHg4OUI5LCAweDMyMzMsIDB4ODlCQSwgMHgxNjQyLA0KLSAgICAweDg5QkQsIDB4MTY4RSwgMHg4OUJFLCAweDMzQjQsIDB4ODlCRiwgMHgzM0IzLCAweDg5QzAsIDB4MTc0OCwNCi0gICAgMHg4OUQyLCAweDA1MDksIDB4ODlEMywgMHgxQzAzLCAweDg5RDQsIDB4MDgwNiwgMHg4OUQ1LCAweDIwNjYsDQotICAgIDB4ODlENiwgMHgyMDY0LCAweDg5RDksIDB4MjA2NSwgMHg4OURBLCAweDIyRTcsIDB4ODlEQiwgMHgyMkU4LA0KLSAgICAweDg5REMsIDB4MjU4OCwgMHg4OURELCAweDIyRTYsIDB4ODlERiwgMHgyNTgyLCAweDg5RTAsIDB4MjU4NiwNCi0gICAgMHg4OUUxLCAweDI1ODUsIDB4ODlFMiwgMHgyNTg3LCAweDg5RTMsIDB4MEYwNiwgMHg4OUU0LCAweDI1ODQsDQotICAgIDB4ODlFNSwgMHgyNTgzLCAweDg5RTYsIDB4MjU4OSwgMHg4OUU4LCAweDI4MDIsIDB4ODlFOSwgMHgyODAwLA0KLSAgICAweDg5RUIsIDB4MjgwMSwgMHg4OUVDLCAweDJBNDEsIDB4ODlFRCwgMHgyQTNGLCAweDg5RjAsIDB4MkE0MCwNCi0gICAgMHg4OUYxLCAweDJDODQsIDB4ODlGMiwgMHgyRTU5LCAweDg5RjMsIDB4MkU1QSwgMHg4OUY0LCAweDE1MjksDQotICAgIDB4ODlGNiwgMHgzMTIxLCAweDg5RjcsIDB4MzIzNCwgMHg4OUY4LCAweDE2NDMsIDB4ODlGQSwgMHgzMzEwLA0KLSAgICAweDg5RkIsIDB4MzNCNSwgMHg4OUZDLCAweDE2RDcsIDB4ODlGRSwgMHgzNDNDLCAweDg5RkYsIDB4MzRFNiwNCi0gICAgMHg4QTAwLCAweDA1MEEsIDB4OEEwMiwgMHgwODA4LCAweDhBMDMsIDB4MDgwOSwgMHg4QTA0LCAweDFDMDQsDQotICAgIDB4OEEwNywgMHgxQzA1LCAweDhBMDgsIDB4MDgwNywgMHg4QTBBLCAweDA5QzMsIDB4OEEwQywgMHgwOUMxLA0KLSAgICAweDhBMEUsIDB4MDlDMCwgMHg4QTBGLCAweDA5QzcsIDB4OEExMCwgMHgwOUJGLCAweDhBMTEsIDB4MDlDOCwNCi0gICAgMHg4QTEyLCAweDFFMDgsIDB4OEExMywgMHgwOUM1LCAweDhBMTUsIDB4MDlDMiwgMHg4QTE2LCAweDA5QzYsDQotICAgIDB4OEExNywgMHgwOUM0LCAweDhBMTgsIDB4MDlCRSwgMHg4QTFCLCAweDBCQTUsIDB4OEExRCwgMHgwQjlGLA0KLSAgICAweDhBMUUsIDB4MjA2QSwgMHg4QTFGLCAweDBCQTQsIDB4OEEyMiwgMHgwQkE2LCAweDhBMjMsIDB4MEJBMCwNCi0gICAgMHg4QTI1LCAweDBCQTEsIDB4OEEyNywgMHgyMDY4LCAweDhBMkEsIDB4MEI5RSwgMHg4QTJDLCAweDIwNjksDQotICAgIDB4OEEyRCwgMHgwQkEzLCAweDhBMzAsIDB4MjA2NywgMHg4QTMxLCAweDBCQTIsIDB4OEEzNCwgMHgwRDYxLA0KLSAgICAweDhBMzYsIDB4MEQ2MywgMHg4QTM5LCAweDIyRUIsIDB4OEEzQSwgMHgwRDYyLCAweDhBM0IsIDB4MEQ1NywNCi0gICAgMHg4QTNDLCAweDBENUIsIDB4OEEzRSwgMHgwRjE5LCAweDhBM0YsIDB4MjU4RSwgMHg4QTQwLCAweDIyRUQsDQotICAgIDB4OEE0MSwgMHgwRDVDLCAweDhBNDQsIDB4MjJGMCwgMHg4QTQ1LCAweDIyRjEsIDB4OEE0NiwgMHgwRDYwLA0KLSAgICAweDhBNDgsIDB4MjJGMywgMHg4QTRBLCAweDIyRjUsIDB4OEE0QywgMHgyMkY2LCAweDhBNEQsIDB4MjJFQSwNCi0gICAgMHg4QTRFLCAweDIyRTksIDB4OEE0RiwgMHgyMkY3LCAweDhBNTAsIDB4MEQ1RiwgMHg4QTUxLCAweDIyRjQsDQotICAgIDB4OEE1MiwgMHgyMkYyLCAweDhBNTQsIDB4MEQ1RCwgMHg4QTU1LCAweDBENTksIDB4OEE1NiwgMHgwRDY0LA0KLSAgICAweDhBNTcsIDB4MjJFRSwgMHg4QTU4LCAweDIyRUYsIDB4OEE1OSwgMHgyMkVDLCAweDhBNUIsIDB4MEQ1RSwNCi0gICAgMHg4QTVFLCAweDBENUEsIDB4OEE2MCwgMHgwRDU4LCAweDhBNjEsIDB4MjU4RCwgMHg4QTYyLCAweDBGMTQsDQotICAgIDB4OEE2MywgMHgwRjBGLCAweDhBNjYsIDB4MEYwQSwgMHg4QTY4LCAweDBGMUEsIDB4OEE2OSwgMHgwRjBCLA0KLSAgICAweDhBNkIsIDB4MEYwNywgMHg4QTZDLCAweDBGMTYsIDB4OEE2RCwgMHgwRjEzLCAweDhBNkUsIDB4MEYxNSwNCi0gICAgMHg4QTcwLCAweDBGMEMsIDB4OEE3MSwgMHgwRjExLCAweDhBNzIsIDB4MEYwOCwgMHg4QTczLCAweDBGMDksDQotICAgIDB4OEE3NCwgMHgyNTk1LCAweDhBNzUsIDB4MjU5MiwgMHg4QTc2LCAweDI1OEEsIDB4OEE3NywgMHgyNThGLA0KLSAgICAweDhBNzksIDB4MEYxNywgMHg4QTdBLCAweDI1OTYsIDB4OEE3QiwgMHgwRjE4LCAweDhBN0MsIDB4MEYwRSwNCi0gICAgMHg4QTdGLCAweDI1OEMsIDB4OEE4MSwgMHgyNTk0LCAweDhBODIsIDB4MjU5MCwgMHg4QTgzLCAweDI1OTMsDQotICAgIDB4OEE4NCwgMHgyNTkxLCAweDhBODUsIDB4MEYxMiwgMHg4QTg2LCAweDI1OEIsIDB4OEE4NywgMHgwRjBELA0KLSAgICAweDhBOEIsIDB4MjgwNSwgMHg4QThDLCAweDEwQTYsIDB4OEE4RCwgMHgxMEE5LCAweDhBOEYsIDB4MjgwNywNCi0gICAgMHg4QTkxLCAweDEwQjEsIDB4OEE5MiwgMHgyODA2LCAweDhBOTMsIDB4MTBBQiwgMHg4QTk1LCAweDEyMTYsDQotICAgIDB4OEE5NiwgMHgyODA4LCAweDhBOTgsIDB4MTBCMCwgMHg4QTk5LCAweDI4MDQsIDB4OEE5QSwgMHgxMEIyLA0KLSAgICAweDhBOUUsIDB4MTBBNywgMHg4QUEwLCAweDBGMTAsIDB4OEFBMSwgMHgxMEFBLCAweDhBQTMsIDB4MTBBOCwNCi0gICAgMHg4QUE0LCAweDEwQUMsIDB4OEFBNSwgMHgxMEFFLCAweDhBQTYsIDB4MTBBNSwgMHg4QUE3LCAweDEwQjMsDQotICAgIDB4OEFBOCwgMHgxMEFGLCAweDhBQUEsIDB4MTBBRCwgMHg4QUFCLCAweDI4MDMsIDB4OEFCMCwgMHgxMjFELA0KLSAgICAweDhBQjIsIDB4MTIxOSwgMHg4QUI2LCAweDEyMjAsIDB4OEFCOCwgMHgyQTQ0LCAweDhBQjksIDB4MTIyMSwNCi0gICAgMHg4QUJBLCAweDJBNTAsIDB4OEFCQiwgMHgyQTQ5LCAweDhBQkMsIDB4MTIxMiwgMHg4QUJELCAweDJBNTEsDQotICAgIDB4OEFCRSwgMHgyQTRCLCAweDhBQkYsIDB4MTIxQywgMHg4QUMwLCAweDJBNEMsIDB4OEFDMiwgMHgxMjFCLA0KLSAgICAweDhBQzMsIDB4MkE0RiwgMHg4QUM0LCAweDEyMTUsIDB4OEFDNSwgMHgyQTRELCAweDhBQzYsIDB4MkE0MywNCi0gICAgMHg4QUM3LCAweDEyMTQsIDB4OEFDOCwgMHgyQzhGLCAweDhBQzksIDB4MTIxQSwgMHg4QUNCLCAweDEyMTcsDQotICAgIDB4OEFDRCwgMHgxMjFGLCAweDhBQ0YsIDB4MkE0MiwgMHg4QUQxLCAweDJBNDYsIDB4OEFEMiwgMHgxMjEzLA0KLSAgICAweDhBRDMsIDB4MkE0NSwgMHg4QUQ0LCAweDJBNDcsIDB4OEFENSwgMHgyQTQ4LCAweDhBRDYsIDB4MTIxRSwNCi0gICAgMHg4QUQ3LCAweDJBNEEsIDB4OEFEOCwgMHgyQTRFLCAweDhBRDksIDB4MkE1MiwgMHg4QURCLCAweDEyMjIsDQotICAgIDB4OEFEQywgMHgxMzUyLCAweDhBREQsIDB4MkM4QSwgMHg4QURFLCAweDJDOTAsIDB4OEFERiwgMHgyQzhELA0KLSAgICAweDhBRTAsIDB4MkM4NSwgMHg4QUUxLCAweDJDOTEsIDB4OEFFMiwgMHgyQzg2LCAweDhBRTQsIDB4MkM4QywNCi0gICAgMHg4QUU2LCAweDEzNEQsIDB4OEFFNywgMHgxMzUzLCAweDhBRTgsIDB4MkM5MiwgMHg4QUVCLCAweDEzNEYsDQotICAgIDB4OEFFRCwgMHgxMzU5LCAweDhBRUUsIDB4MTM1NCwgMHg4QUVGLCAweDJDOTQsIDB4OEFGMCwgMHgyQzhFLA0KLSAgICAweDhBRjEsIDB4MTM1MCwgMHg4QUYyLCAweDJDODcsIDB4OEFGMywgMHgxMzVBLCAweDhBRjQsIDB4MkM4OCwNCi0gICAgMHg4QUY1LCAweDJDODksIDB4OEFGNiwgMHgxMzVCLCAweDhBRjcsIDB4MTM1OCwgMHg4QUY4LCAweDEyMTgsDQotICAgIDB4OEFGQSwgMHgxMzRFLCAweDhBRkIsIDB4MkM5NSwgMHg4QUZDLCAweDEzNUMsIDB4OEFGRSwgMHgxMzU1LA0KLSAgICAweDhBRkYsIDB4MkM5MywgMHg4QjAwLCAweDEzNTEsIDB4OEIwMSwgMHgxMzU2LCAweDhCMDIsIDB4MTM1NywNCi0gICAgMHg4QjA0LCAweDE0N0UsIDB4OEIwNSwgMHgyRTVGLCAweDhCMDYsIDB4MkU2OCwgMHg4QjA3LCAweDJFNjUsDQotICAgIDB4OEIwOCwgMHgyRTY3LCAweDhCMEEsIDB4MTQ3QiwgMHg4QjBCLCAweDJFNjAsIDB4OEIwRCwgMHgyRTY2LA0KLSAgICAweDhCMEUsIDB4MTQ3NywgMHg4QjBGLCAweDJFNjIsIDB4OEIxMCwgMHgxNDdGLCAweDhCMTEsIDB4MkU1RSwNCi0gICAgMHg4QjEyLCAweDJFNjMsIDB4OEIxMywgMHgyRTZBLCAweDhCMTQsIDB4MkM4QiwgMHg4QjE1LCAweDJFNjQsDQotICAgIDB4OEIxNiwgMHgyRTVELCAweDhCMTcsIDB4MTQ3OCwgMHg4QjE4LCAweDJFNUMsIDB4OEIxOSwgMHgxNDc5LA0KLSAgICAweDhCMUEsIDB4MkU2QiwgMHg4QjFCLCAweDE0N0EsIDB4OEIxQywgMHgyRTY5LCAweDhCMUQsIDB4MTQ3RCwNCi0gICAgMHg4QjFFLCAweDJFNUIsIDB4OEIyMCwgMHgxNDdDLCAweDhCMjIsIDB4MkU2MSwgMHg4QjIzLCAweDJGQ0UsDQotICAgIDB4OEIyNCwgMHgyRkRDLCAweDhCMjUsIDB4MkZENywgMHg4QjI2LCAweDJGRDksIDB4OEIyNywgMHgyRkNELA0KLSAgICAweDhCMjgsIDB4MTUyQSwgMHg4QjJBLCAweDJGQ0MsIDB4OEIyQiwgMHgxNTJELCAweDhCMkMsIDB4MTUyQywNCi0gICAgMHg4QjJFLCAweDJGREIsIDB4OEIyRiwgMHgyRkQzLCAweDhCMzAsIDB4MkZEMCwgMHg4QjMxLCAweDJGRDYsDQotICAgIDB4OEIzMywgMHgyRkNGLCAweDhCMzUsIDB4MkZEMSwgMHg4QjM2LCAweDJGREEsIDB4OEIzNywgMHgyRkQ4LA0KLSAgICAweDhCMzksIDB4MTUyQiwgMHg4QjNBLCAweDJGREYsIDB4OEIzQiwgMHgyRkRELCAweDhCM0MsIDB4MkZENCwNCi0gICAgMHg4QjNELCAweDJGREUsIDB4OEIzRSwgMHgyRkQ1LCAweDhCNDAsIDB4MzEyNSwgMHg4QjQxLCAweDE1QzQsDQotICAgIDB4OEI0MiwgMHgzMTJDLCAweDhCNDUsIDB4MzMxMywgMHg4QjQ2LCAweDE1Q0IsIDB4OEI0NywgMHgyRkQyLA0KLSAgICAweDhCNDgsIDB4MzEyMywgMHg4QjQ5LCAweDE1QzcsIDB4OEI0QSwgMHgzMTI0LCAweDhCNEIsIDB4MzEyOSwNCi0gICAgMHg4QjRFLCAweDE1QzksIDB4OEI0RiwgMHgxNUNBLCAweDhCNTAsIDB4MzEyMiwgMHg4QjUxLCAweDMxMkIsDQotICAgIDB4OEI1MiwgMHgzMTJELCAweDhCNTMsIDB4MzEyNiwgMHg4QjU0LCAweDMxMjgsIDB4OEI1NSwgMHgzMTJBLA0KLSAgICAweDhCNTYsIDB4MzEyNywgMHg4QjU3LCAweDMxMkUsIDB4OEI1OCwgMHgxNUM2LCAweDhCNTksIDB4MTVDQywNCi0gICAgMHg4QjVBLCAweDE1QzgsIDB4OEI1QywgMHgxNUM1LCAweDhCNUQsIDB4MzIzNywgMHg4QjVGLCAweDE2NDgsDQotICAgIDB4OEI2MCwgMHgzMjM1LCAweDhCNjMsIDB4MzIzOSwgMHg4QjY1LCAweDMyM0EsIDB4OEI2NiwgMHgxNjQ2LA0KLSAgICAweDhCNjcsIDB4MzIzQiwgMHg4QjY4LCAweDMyMzgsIDB4OEI2QSwgMHgzMjM2LCAweDhCNkIsIDB4MTY0OSwNCi0gICAgMHg4QjZDLCAweDE2NDUsIDB4OEI2RCwgMHgzMjNDLCAweDhCNkYsIDB4MTY0NywgMHg4QjcwLCAweDE2NDQsDQotICAgIDB4OEI3NCwgMHgxNjhGLCAweDhCNzcsIDB4MTY5MCwgMHg4Qjc4LCAweDMzMTIsIDB4OEI3OSwgMHgzMzExLA0KLSAgICAweDhCN0EsIDB4MzMxNCwgMHg4QjdCLCAweDMzMTUsIDB4OEI3RCwgMHgxNjkxLCAweDhCN0UsIDB4MzNCNiwNCi0gICAgMHg4QjdGLCAweDMzQkIsIDB4OEI4MCwgMHgxNkQ4LCAweDhCODIsIDB4MzNCOCwgMHg4Qjg0LCAweDMzQjcsDQotICAgIDB4OEI4NSwgMHgzM0JBLCAweDhCODYsIDB4MzNCOSwgMHg4Qjg4LCAweDM0NDAsIDB4OEI4QSwgMHgxNzBBLA0KLSAgICAweDhCOEIsIDB4MzQzRiwgMHg4QjhDLCAweDM0M0QsIDB4OEI4RSwgMHgzNDNFLCAweDhCOTIsIDB4MTcyQywNCi0gICAgMHg4QjkzLCAweDE3MkIsIDB4OEI5NCwgMHgzNDlDLCAweDhCOTUsIDB4MzQ5RCwgMHg4Qjk2LCAweDE3MkQsDQotICAgIDB4OEI5OCwgMHgzNEU3LCAweDhCOTksIDB4MzRFOCwgMHg4QjlBLCAweDE3NTQsIDB4OEI5QywgMHgxNzVBLA0KLSAgICAweDhCOUUsIDB4MzUyMiwgMHg4QjlGLCAweDM1M0YsIDB4OEMzNywgMHgwNTBCLCAweDhDMzksIDB4MjA2QiwNCi0gICAgMHg4QzNCLCAweDIwNkMsIDB4OEMzQywgMHgyNTk3LCAweDhDM0QsIDB4MjgwOSwgMHg4QzNFLCAweDJBNTMsDQotICAgIDB4OEMzRiwgMHgxNDgxLCAweDhDNDEsIDB4MTQ4MCwgMHg4QzQyLCAweDJGRTAsIDB4OEM0MywgMHgzMTJGLA0KLSAgICAweDhDNDUsIDB4MzQ0MSwgMHg4QzQ2LCAweDA1MEMsIDB4OEM0NywgMHgxRTA5LCAweDhDNDgsIDB4MDlDOSwNCi0gICAgMHg4QzQ5LCAweDBCQTcsIDB4OEM0QSwgMHgyNTk5LCAweDhDNEIsIDB4MjU5OCwgMHg4QzRDLCAweDEyMjMsDQotICAgIDB4OEM0RCwgMHgyQTU0LCAweDhDNEUsIDB4MTIyNCwgMHg4QzRGLCAweDJFNkMsIDB4OEM1MCwgMHgxNTJFLA0KLSAgICAweDhDNTQsIDB4MTc2MywgMHg4QzU1LCAweDA1MEQsIDB4OEM1NiwgMHgxQTQ4LCAweDhDNTcsIDB4MUUwQSwNCi0gICAgMHg4QzVBLCAweDBCQTgsIDB4OEM1QywgMHgyMDZELCAweDhDNUQsIDB4MjA2RSwgMHg4QzVGLCAweDIyRjgsDQotICAgIDB4OEM2MSwgMHgwRDY1LCAweDhDNjIsIDB4MEYxQiwgMHg4QzY0LCAweDI1OUIsIDB4OEM2NSwgMHgyNTlBLA0KLSAgICAweDhDNjYsIDB4MjU5QywgMHg4QzY4LCAweDI4MEEsIDB4OEM2OSwgMHgyODBCLCAweDhDNkEsIDB4MTBCNCwNCi0gICAgMHg4QzZCLCAweDEzNUQsIDB4OEM2QywgMHgxMjI1LCAweDhDNkQsIDB4MTM1RSwgMHg4QzZGLCAweDJFNzAsDQotICAgIDB4OEM3MCwgMHgyRTZELCAweDhDNzEsIDB4MkU2RiwgMHg4QzcyLCAweDJFNkUsIDB4OEM3MywgMHgxNDgyLA0KLSAgICAweDhDNzUsIDB4MkZFMSwgMHg4Qzc2LCAweDMxMzEsIDB4OEM3NywgMHgzMTMwLCAweDhDNzgsIDB4MThFNywNCi0gICAgMHg4Qzc5LCAweDA5Q0IsIDB4OEM3QSwgMHgwOUNBLCAweDhDN0IsIDB4MUUwQiwgMHg4QzdELCAweDIwNkYsDQotICAgIDB4OEM4MCwgMHgyMkZBLCAweDhDODEsIDB4MjJGOSwgMHg4QzgyLCAweDBENjYsIDB4OEM4NCwgMHgyNTlFLA0KLSAgICAweDhDODUsIDB4MjU5RiwgMHg4Qzg2LCAweDI1OUQsIDB4OEM4OSwgMHgwRjFELCAweDhDOEEsIDB4MEYxQywNCi0gICAgMHg4QzhDLCAweDEwQjYsIDB4OEM4RCwgMHgxMEI1LCAweDhDOEYsIDB4MkE1NSwgMHg4QzkwLCAweDJDOTgsDQotICAgIDB4OEM5MSwgMHgyQzk2LCAweDhDOTIsIDB4MkM5NywgMHg4QzkzLCAweDEzNUYsIDB4OEM5NCwgMHgyRTcyLA0KLSAgICAweDhDOTUsIDB4MkU3MSwgMHg4Qzk3LCAweDJGRTQsIDB4OEM5OCwgMHgyRkUzLCAweDhDOTksIDB4MkZFMiwNCi0gICAgMHg4QzlBLCAweDMxMzIsIDB4OEM5QywgMHgzNTIzLCAweDhDOUQsIDB4MDUwRSwgMHg4QzlFLCAweDA4MEEsDQotICAgIDB4OENBMCwgMHgwODBCLCAweDhDQTEsIDB4MDlDQywgMHg4Q0EyLCAweDA5Q0QsIDB4OENBMywgMHgxRTBELA0KLSAgICAweDhDQTQsIDB4MUUwQywgMHg4Q0E1LCAweDIwNzAsIDB4OENBNywgMHgwQkFFLCAweDhDQTgsIDB4MEJBQywNCi0gICAgMHg4Q0E5LCAweDBCQTksIDB4OENBQSwgMHgwQkFELCAweDhDQUIsIDB4MEJBQiwgMHg4Q0FDLCAweDBCQUEsDQotICAgIDB4OENBRiwgMHgwRDY3LCAweDhDQjAsIDB4MjJGRCwgMHg4Q0IyLCAweDBGMjIsIDB4OENCMywgMHgwRDY5LA0KLSAgICAweDhDQjQsIDB4MEQ2RSwgMHg4Q0I1LCAweDIyRkYsIDB4OENCNiwgMHgwRDcwLCAweDhDQjcsIDB4MEQ2RiwNCi0gICAgMHg4Q0I4LCAweDBENzIsIDB4OENCOSwgMHgyMkZFLCAweDhDQkEsIDB4MjJGQiwgMHg4Q0JCLCAweDBENkMsDQotICAgIDB4OENCQywgMHgwRDY4LCAweDhDQkQsIDB4MEQ2QSwgMHg4Q0JFLCAweDIyRkMsIDB4OENCRiwgMHgwRDcxLA0KLSAgICAweDhDQzAsIDB4MEQ2RCwgMHg4Q0MxLCAweDBENkIsIDB4OENDMiwgMHgwRjI0LCAweDhDQzMsIDB4MEYyMywNCi0gICAgMHg4Q0M0LCAweDBGMjEsIDB4OENDNSwgMHgwRjI1LCAweDhDQzcsIDB4MEYxRiwgMHg4Q0M4LCAweDBGMjAsDQotICAgIDB4OENDQSwgMHgwRjFFLCAweDhDQ0MsIDB4MjVBMCwgMHg4Q0NGLCAweDI4MEQsIDB4OENEMSwgMHgxMEI4LA0KLSAgICAweDhDRDIsIDB4MTBCOSwgMHg4Q0QzLCAweDEwQjcsIDB4OENENSwgMHgyODBDLCAweDhDRDcsIDB4MjgwRSwNCi0gICAgMHg4Q0Q5LCAweDJBNTgsIDB4OENEQSwgMHgyQTVBLCAweDhDREMsIDB4MTIyRSwgMHg4Q0RELCAweDJBNUIsDQotICAgIDB4OENERSwgMHgxMjI3LCAweDhDREYsIDB4MkE1NywgMHg4Q0UwLCAweDEyMjYsIDB4OENFMSwgMHgxMjMwLA0KLSAgICAweDhDRTIsIDB4MTIyQywgMHg4Q0UzLCAweDEyMkQsIDB4OENFNCwgMHgxMjI5LCAweDhDRTUsIDB4MkE1NiwNCi0gICAgMHg4Q0U2LCAweDEyMjgsIDB4OENFNywgMHgyQTVDLCAweDhDRTgsIDB4MkE1OSwgMHg4Q0VBLCAweDEyMkYsDQotICAgIDB4OENFQywgMHgxMjJBLCAweDhDRUQsIDB4MTIyQiwgMHg4Q0VFLCAweDJDOUEsIDB4OENGMCwgMHgyQzlDLA0KLSAgICAweDhDRjEsIDB4MkM5QiwgMHg4Q0YzLCAweDJDOUQsIDB4OENGNCwgMHgxMzYwLCAweDhDRjUsIDB4MkM5OSwNCi0gICAgMHg4Q0Y4LCAweDE0ODYsIDB4OENGOSwgMHgyRTczLCAweDhDRkEsIDB4MTQ4MywgMHg4Q0ZCLCAweDE0ODcsDQotICAgIDB4OENGQywgMHgxNDg1LCAweDhDRkQsIDB4MTQ4NCwgMHg4Q0ZFLCAweDJGRTUsIDB4OEQwMCwgMHgyRkU4LA0KLSAgICAweDhEMDIsIDB4MkZFNywgMHg4RDA0LCAweDJGRTYsIDB4OEQwNSwgMHgxNTJGLCAweDhEMDYsIDB4MzEzMywNCi0gICAgMHg4RDA3LCAweDMxMzQsIDB4OEQwOCwgMHgxNUNELCAweDhEMDksIDB4MzEzNSwgMHg4RDBBLCAweDE1Q0UsDQotICAgIDB4OEQwRCwgMHgxNjRCLCAweDhEMEYsIDB4MTY0QSwgMHg4RDEwLCAweDMzMTYsIDB4OEQxMywgMHgxNjkyLA0KLSAgICAweDhEMTQsIDB4MzMxNywgMHg4RDE1LCAweDMzQkMsIDB4OEQxNiwgMHgxNkQ5LCAweDhEMTcsIDB4MTZEQSwNCi0gICAgMHg4RDE5LCAweDM0NDIsIDB4OEQxQiwgMHgxNzJGLCAweDhENjQsIDB4MDUwRiwgMHg4RDY2LCAweDBCQjAsDQotICAgIDB4OEQ2NywgMHgwQkFGLCAweDhENjgsIDB4MjVBMSwgMHg4RDY5LCAweDI1QTIsIDB4OEQ2QiwgMHgxMEJBLA0KLSAgICAweDhENkMsIDB4MkM5RSwgMHg4RDZELCAweDEyMzEsIDB4OEQ2RSwgMHgyQzlGLCAweDhENkYsIDB4MkU3NCwNCi0gICAgMHg4RDcwLCAweDA1MTAsIDB4OEQ3MiwgMHgxQzA2LCAweDhENzMsIDB4MDgwRCwgMHg4RDc0LCAweDA4MEMsDQotICAgIDB4OEQ3NiwgMHgxRTBFLCAweDhENzcsIDB4MDlDRSwgMHg4RDc4LCAweDFFMEYsIDB4OEQ3OSwgMHgyMDczLA0KLSAgICAweDhEN0IsIDB4MjA3MiwgMHg4RDdELCAweDIwNzEsIDB4OEQ4MCwgMHgyMzAxLCAweDhEODEsIDB4MEQ3NSwNCi0gICAgMHg4RDg0LCAweDIzMDAsIDB4OEQ4NSwgMHgwRDc0LCAweDhEODksIDB4MjMwMiwgMHg4RDhBLCAweDBENzMsDQotICAgIDB4OEQ4QywgMHgyNUE0LCAweDhEOEQsIDB4MjVBNywgMHg4RDhFLCAweDI1QTUsIDB4OEQ4RiwgMHgyNUE2LA0KLSAgICAweDhEOTAsIDB4MjVBQSwgMHg4RDkxLCAweDI1QTMsIDB4OEQ5MiwgMHgyNUFCLCAweDhEOTMsIDB4MjVBOCwNCi0gICAgMHg4RDk0LCAweDI1QTksIDB4OEQ5NSwgMHgxMEJDLCAweDhEOTYsIDB4MjgwRiwgMHg4RDk5LCAweDEwQkIsDQotICAgIDB4OEQ5QiwgMHgyQTYwLCAweDhEOUMsIDB4MkE1RSwgMHg4RDlGLCAweDEyMzIsIDB4OERBMCwgMHgyQTVELA0KLSAgICAweDhEQTEsIDB4MkE1RiwgMHg4REEzLCAweDEyMzMsIDB4OERBNSwgMHgyQ0EwLCAweDhEQTcsIDB4MkNBMSwNCi0gICAgMHg4REE4LCAweDE0ODgsIDB4OERBQSwgMHgzMTM3LCAweDhEQUIsIDB4MzEzOSwgMHg4REFDLCAweDMxMzYsDQotICAgIDB4OERBRCwgMHgzMTM4LCAweDhEQUUsIDB4MzIzRCwgMHg4REFGLCAweDMzMTgsIDB4OERCMiwgMHgzNTA5LA0KLSAgICAweDhEQjMsIDB4MDUxMSwgMHg4REI0LCAweDA4MEUsIDB4OERCNSwgMHgxRTEwLCAweDhEQjYsIDB4MUUxMiwNCi0gICAgMHg4REI3LCAweDFFMTEsIDB4OERCOSwgMHgyMDc2LCAweDhEQkEsIDB4MEJCMiwgMHg4REJDLCAweDIwNzQsDQotICAgIDB4OERCRSwgMHgwQkIxLCAweDhEQkYsIDB4MjA3NywgMHg4REMxLCAweDIwNzgsIDB4OERDMiwgMHgyMDc1LA0KLSAgICAweDhEQzUsIDB4MjMwRSwgMHg4REM2LCAweDBEN0QsIDB4OERDNywgMHgyMzA2LCAweDhEQzgsIDB4MjMwQywNCi0gICAgMHg4RENCLCAweDBENzgsIDB4OERDQywgMHgwRDdCLCAweDhEQ0QsIDB4MjMwNSwgMHg4RENFLCAweDBENzYsDQotICAgIDB4OERDRiwgMHgyMzA5LCAweDhERDAsIDB4MjVCMSwgMHg4REQxLCAweDBEN0EsIDB4OEREMywgMHgyMzA0LA0KLSAgICAweDhERDUsIDB4MjMwQSwgMHg4REQ2LCAweDIzMDcsIDB4OERENywgMHgyMzBELCAweDhERDgsIDB4MjMwMywNCi0gICAgMHg4REQ5LCAweDIzMEIsIDB4OEREQSwgMHgwRDc5LCAweDhEREIsIDB4MEQ3QywgMHg4RERDLCAweDIzMDgsDQotICAgIDB4OERERCwgMHgwRDc3LCAweDhEREYsIDB4MEYyNywgMHg4REUwLCAweDI1QUQsIDB4OERFMSwgMHgwRjI2LA0KLSAgICAweDhERTIsIDB4MjVCNCwgMHg4REUzLCAweDI1QjMsIDB4OERFNCwgMHgwRjJELCAweDhERTYsIDB4MEYyRSwNCi0gICAgMHg4REU3LCAweDI1QjUsIDB4OERFOCwgMHgwRjI4LCAweDhERTksIDB4MjVCMiwgMHg4REVBLCAweDBGMkMsDQotICAgIDB4OERFQiwgMHgyNUI3LCAweDhERUMsIDB4MjVBRSwgMHg4REVFLCAweDI1QjAsIDB4OERFRiwgMHgwRjI5LA0KLSAgICAweDhERjAsIDB4MjVBQywgMHg4REYxLCAweDI1QUYsIDB4OERGMiwgMHgyNUI2LCAweDhERjMsIDB4MEYyQSwNCi0gICAgMHg4REY0LCAweDI1QjgsIDB4OERGQSwgMHgwRjJCLCAweDhERkMsIDB4MTBCRCwgMHg4REZELCAweDI4MTQsDQotICAgIDB4OERGRSwgMHgyODFBLCAweDhERkYsIDB4MjgxMiwgMHg4RTAwLCAweDI4MUIsIDB4OEUwMiwgMHgyODExLA0KLSAgICAweDhFMDMsIDB4MjgxNiwgMHg4RTA0LCAweDI4MUMsIDB4OEUwNSwgMHgyODE5LCAweDhFMDYsIDB4MjgxOCwNCi0gICAgMHg4RTA3LCAweDI4MTcsIDB4OEUwOSwgMHgyODEwLCAweDhFMEEsIDB4MjgxNSwgMHg4RTBELCAweDI4MTMsDQotICAgIDB4OEUwRiwgMHgxMjM4LCAweDhFMTAsIDB4MTIzNSwgMHg4RTExLCAweDJBNjksIDB4OEUxMiwgMHgyQTZFLA0KLSAgICAweDhFMTMsIDB4MkE3MCwgMHg4RTE0LCAweDJBNkQsIDB4OEUxNSwgMHgyQTY2LCAweDhFMTYsIDB4MkE2OCwNCi0gICAgMHg4RTE3LCAweDJBNzIsIDB4OEUxOCwgMHgyQTZGLCAweDhFMTksIDB4MkE2QSwgMHg4RTFBLCAweDJBNzMsDQotICAgIDB4OEUxQiwgMHgyQTY3LCAweDhFMUMsIDB4MkE3MSwgMHg4RTFELCAweDEyMzYsIDB4OEUxRSwgMHgxMjNDLA0KLSAgICAweDhFMUYsIDB4MTIzQSwgMHg4RTIwLCAweDJBNjEsIDB4OEUyMSwgMHgxMjNCLCAweDhFMjIsIDB4MTIzNywNCi0gICAgMHg4RTIzLCAweDJBNjIsIDB4OEUyNCwgMHgyQTY0LCAweDhFMjUsIDB4MkE2MywgMHg4RTI2LCAweDJBNkIsDQotICAgIDB4OEUyNywgMHgyQTZDLCAweDhFMjksIDB4MTIzOSwgMHg4RTJCLCAweDEyMzQsIDB4OEUyRSwgMHgyQTY1LA0KLSAgICAweDhFMzAsIDB4MkNBQiwgMHg4RTMxLCAweDEzNjIsIDB4OEUzMywgMHgyQ0EyLCAweDhFMzQsIDB4MTM2MywNCi0gICAgMHg4RTM1LCAweDEzNjYsIDB4OEUzNiwgMHgyQ0E3LCAweDhFMzgsIDB4MkNBNCwgMHg4RTM5LCAweDEzNjUsDQotICAgIDB4OEUzQywgMHgyQ0E4LCAweDhFM0QsIDB4MkNBOSwgMHg4RTNFLCAweDJDQTMsIDB4OEUzRiwgMHgyQ0FDLA0KLSAgICAweDhFNDAsIDB4MkNBNSwgMHg4RTQxLCAweDJDQUEsIDB4OEU0MiwgMHgxMzY0LCAweDhFNDQsIDB4MTM2MSwNCi0gICAgMHg4RTQ1LCAweDJDQTYsIDB4OEU0NywgMHgyRTdBLCAweDhFNDgsIDB4MTQ4QiwgMHg4RTQ5LCAweDE0ODksDQotICAgIDB4OEU0QSwgMHgxNDhDLCAweDhFNEIsIDB4MTQ4QSwgMHg4RTRDLCAweDJFNzksIDB4OEU0RCwgMHgyRTc2LA0KLSAgICAweDhFNEUsIDB4MkU3NSwgMHg4RTUwLCAweDJFNzgsIDB4OEU1MywgMHgyRTc3LCAweDhFNTQsIDB4MkZGNiwNCi0gICAgMHg4RTU1LCAweDE1MzUsIDB4OEU1NiwgMHgyRkVELCAweDhFNTcsIDB4MkZFQywgMHg4RTU5LCAweDE1MzAsDQotICAgIDB4OEU1QSwgMHgyRkYyLCAweDhFNUIsIDB4MkZGMSwgMHg4RTVDLCAweDJGRTksIDB4OEU1RCwgMHgyRkY0LA0KLSAgICAweDhFNUUsIDB4MkZFRSwgMHg4RTVGLCAweDE1MzQsIDB4OEU2MCwgMHgyRkVCLCAweDhFNjEsIDB4MkZGMywNCi0gICAgMHg4RTYyLCAweDJGRUEsIDB4OEU2MywgMHgxNTMxLCAweDhFNjQsIDB4MTUzMywgMHg4RTY1LCAweDJGRUYsDQotICAgIDB4OEU2NiwgMHgxNTMyLCAweDhFNjcsIDB4MkZGMCwgMHg4RTY5LCAweDJGRjUsIDB4OEU2QSwgMHgzMTNELA0KLSAgICAweDhFNkMsIDB4MTVEMywgMHg4RTZELCAweDMxM0EsIDB4OEU2RiwgMHgzMTNFLCAweDhFNzIsIDB4MTVEMCwNCi0gICAgMHg4RTczLCAweDMxM0MsIDB4OEU3NCwgMHgxNUQ1LCAweDhFNzYsIDB4MTVEMiwgMHg4RTc4LCAweDMxM0IsDQotICAgIDB4OEU3QSwgMHgxNUQ0LCAweDhFN0IsIDB4MzEzRiwgMHg4RTdDLCAweDE1Q0YsIDB4OEU4MSwgMHgxNjRELA0KLSAgICAweDhFODIsIDB4MTY0RiwgMHg4RTg0LCAweDMyNDAsIDB4OEU4NSwgMHgxNjRFLCAweDhFODYsIDB4MzIzRSwNCi0gICAgMHg4RTg3LCAweDE1RDEsIDB4OEU4OCwgMHgzMjNGLCAweDhFODksIDB4MTY0QywgMHg4RThBLCAweDE2OTMsDQotICAgIDB4OEU4QiwgMHgxNjk1LCAweDhFOEMsIDB4MzMxQSwgMHg4RThELCAweDE2OTQsIDB4OEU4RSwgMHgzMzE5LA0KLSAgICAweDhFOTAsIDB4MzNDMSwgMHg4RTkxLCAweDE2REIsIDB4OEU5MiwgMHgzM0MwLCAweDhFOTMsIDB4MTZEQywNCi0gICAgMHg4RTk0LCAweDMzQkUsIDB4OEU5NSwgMHgzM0JELCAweDhFOTYsIDB4MzNDMiwgMHg4RTk3LCAweDMzQzMsDQotICAgIDB4OEU5OCwgMHgzNDQzLCAweDhFOUEsIDB4MzNCRiwgMHg4RTlELCAweDM0QTEsIDB4OEU5RSwgMHgzNDlFLA0KLSAgICAweDhFOUYsIDB4MzQ5RiwgMHg4RUEwLCAweDM0QTAsIDB4OEVBMSwgMHgxNzQ5LCAweDhFQTMsIDB4MzRFQiwNCi0gICAgMHg4RUE0LCAweDM0RUEsIDB4OEVBNSwgMHgzNEU5LCAweDhFQTYsIDB4MzUwQSwgMHg4RUE4LCAweDM1MzcsDQotICAgIDB4OEVBOSwgMHgzNTI0LCAweDhFQUEsIDB4MTc1QiwgMHg4RUFCLCAweDA1MTIsIDB4OEVBQywgMHgwOUNGLA0KLSAgICAweDhFQjIsIDB4MEYyRiwgMHg4RUJBLCAweDEyM0QsIDB4OEVCRCwgMHgyQ0FELCAweDhFQzAsIDB4MTUzNiwNCi0gICAgMHg4RUMyLCAweDMxNDAsIDB4OEVDOSwgMHgzNTI1LCAweDhFQ0EsIDB4MDUxMywgMHg4RUNCLCAweDA2OEQsDQotICAgIDB4OEVDQywgMHgwODEwLCAweDhFQ0QsIDB4MDgwRiwgMHg4RUNGLCAweDA5RDIsIDB4OEVEMSwgMHgxRTEzLA0KLSAgICAweDhFRDIsIDB4MDlEMCwgMHg4RUQzLCAweDFFMTQsIDB4OEVENCwgMHgwOUQxLCAweDhFRDcsIDB4MjA3RCwNCi0gICAgMHg4RUQ4LCAweDIwNzksIDB4OEVEQiwgMHgwQkIzLCAweDhFREMsIDB4MjA3QywgMHg4RURELCAweDIwN0IsDQotICAgIDB4OEVERSwgMHgyMDdBLCAweDhFREYsIDB4MEJCNCwgMHg4RUUwLCAweDIwN0UsIDB4OEVFMSwgMHgyMDdGLA0KLSAgICAweDhFRTUsIDB4MjMxNSwgMHg4RUU2LCAweDIzMTMsIDB4OEVFNywgMHgyMzE3LCAweDhFRTgsIDB4MjMxOCwNCi0gICAgMHg4RUU5LCAweDIzMUUsIDB4OEVFQiwgMHgyMzFBLCAweDhFRUMsIDB4MjMxQywgMHg4RUVFLCAweDIzMTQsDQotICAgIDB4OEVFRiwgMHgyMzBGLCAweDhFRjEsIDB4MjMxQiwgMHg4RUY0LCAweDIzMUQsIDB4OEVGNSwgMHgyMzE2LA0KLSAgICAweDhFRjYsIDB4MjMxOSwgMHg4RUY3LCAweDIzMTAsIDB4OEVGOCwgMHgwRDdGLCAweDhFRjksIDB4MjMxMiwNCi0gICAgMHg4RUZBLCAweDIzMTEsIDB4OEVGQiwgMHgwRDdFLCAweDhFRkMsIDB4MEQ4MCwgMHg4RUZFLCAweDBGMzIsDQotICAgIDB4OEVGRiwgMHgyNUJBLCAweDhGMDAsIDB4MjVCQywgMHg4RjAxLCAweDI1QkIsIDB4OEYwMiwgMHgyNUMwLA0KLSAgICAweDhGMDMsIDB4MEYzMCwgMHg4RjA1LCAweDI1QkQsIDB4OEYwNiwgMHgyNUI5LCAweDhGMDcsIDB4MjVCRSwNCi0gICAgMHg4RjA4LCAweDI1QkYsIDB4OEYwOSwgMHgwRjMxLCAweDhGMEEsIDB4MEYzMywgMHg4RjBCLCAweDI1QzEsDQotICAgIDB4OEYwRCwgMHgyODIwLCAweDhGMEUsIDB4MjgxRiwgMHg4RjEwLCAweDI4MUQsIDB4OEYxMSwgMHgyODFFLA0KLSAgICAweDhGMTIsIDB4MTBCRiwgMHg4RjEzLCAweDEwQzEsIDB4OEYxNCwgMHgxMEJFLCAweDhGMTUsIDB4MTBDMCwNCi0gICAgMHg4RjE2LCAweDJBN0EsIDB4OEYxNywgMHgyQTdCLCAweDhGMTgsIDB4MkE3NiwgMHg4RjFBLCAweDJBNzcsDQotICAgIDB4OEYxQiwgMHgxMjNGLCAweDhGMUMsIDB4MTI0NCwgMHg4RjFELCAweDEyM0UsIDB4OEYxRSwgMHgxMjQ1LA0KLSAgICAweDhGMUYsIDB4MTI0MCwgMHg4RjIwLCAweDJBNzgsIDB4OEYyMywgMHgyQTc5LCAweDhGMjQsIDB4MkE3NSwNCi0gICAgMHg4RjI1LCAweDEyNDYsIDB4OEYyNiwgMHgxMjQyLCAweDhGMjksIDB4MTI0MSwgMHg4RjJBLCAweDEyNDMsDQotICAgIDB4OEYyQywgMHgyQTc0LCAweDhGMkUsIDB4MkNBRiwgMHg4RjJGLCAweDEzNjgsIDB4OEYzMiwgMHgyQ0IxLA0KLSAgICAweDhGMzMsIDB4MTM2QSwgMHg4RjM0LCAweDJDQjQsIDB4OEYzNSwgMHgyQ0IwLCAweDhGMzYsIDB4MkNBRSwNCi0gICAgMHg4RjM3LCAweDJDQjMsIDB4OEYzOCwgMHgxMzY5LCAweDhGMzksIDB4MkNCMiwgMHg4RjNCLCAweDEzNjcsDQotICAgIDB4OEYzRSwgMHgxNDhFLCAweDhGM0YsIDB4MTQ5MSwgMHg4RjQwLCAweDJFN0MsIDB4OEY0MiwgMHgxNDhGLA0KLSAgICAweDhGNDMsIDB4MkU3QiwgMHg4RjQ0LCAweDE0OEQsIDB4OEY0NSwgMHgxNDkwLCAweDhGNDYsIDB4MkZGNywNCi0gICAgMHg4RjQ3LCAweDJGRjgsIDB4OEY0OCwgMHgyRkY5LCAweDhGNDksIDB4MTUzNywgMHg4RjRCLCAweDJGRkEsDQotICAgIDB4OEY0RCwgMHgxNTM4LCAweDhGNEUsIDB4MTVENywgMHg4RjRGLCAweDMxNDMsIDB4OEY1MCwgMHgzMTQ0LA0KLSAgICAweDhGNTEsIDB4MzE0MiwgMHg4RjUyLCAweDMxNDEsIDB4OEY1MywgMHgzMTQ1LCAweDhGNTQsIDB4MTVENiwNCi0gICAgMHg4RjU1LCAweDMyNDQsIDB4OEY1NiwgMHgzMjQyLCAweDhGNTcsIDB4MzI0MywgMHg4RjU4LCAweDMyNDUsDQotICAgIDB4OEY1OSwgMHgzMjQxLCAweDhGNUEsIDB4MzI0NiwgMHg4RjVCLCAweDMzMUMsIDB4OEY1RCwgMHgzMzFELA0KLSAgICAweDhGNUUsIDB4MzMxQiwgMHg4RjVGLCAweDE2OTYsIDB4OEY2MCwgMHgzM0M0LCAweDhGNjEsIDB4MTZERCwNCi0gICAgMHg4RjYyLCAweDMzQzUsIDB4OEY2MywgMHgzNDQ1LCAweDhGNjQsIDB4MzQ0NCwgMHg4RjlCLCAweDA1MTQsDQotICAgIDB4OEY5QywgMHgwRDgxLCAweDhGOUYsIDB4MEYzNCwgMHg4RkEzLCAweDEwQzIsIDB4OEZBNiwgMHgxMzZDLA0KLSAgICAweDhGQTgsIDB4MTM2QiwgMHg4RkFELCAweDE1RDgsIDB4OEZBRSwgMHgxNjJGLCAweDhGQUYsIDB4MTY5NywNCi0gICAgMHg4RkIwLCAweDA1MTUsIDB4OEZCMSwgMHgwOUQzLCAweDhGQjIsIDB4MEYzNSwgMHg4RkI0LCAweDMxNDYsDQotICAgIDB4OEZCNSwgMHgwMjMwLCAweDhGQkYsIDB4MThFOSwgMHg4RkMyLCAweDA1MTYsIDB4OEZDNCwgMHgwNTE5LA0KLSAgICAweDhGQzUsIDB4MDUxOCwgMHg4RkM2LCAweDA1MTcsIDB4OEZDOSwgMHgxOEU4LCAweDhGQ0IsIDB4MUE0QSwNCi0gICAgMHg4RkNELCAweDFBNEMsIDB4OEZDRSwgMHgwNjhFLCAweDhGRDEsIDB4MDY5MCwgMHg4RkQyLCAweDFBNDksDQotICAgIDB4OEZEMywgMHgxQTRCLCAweDhGRDQsIDB4MDY4RiwgMHg4RkQ1LCAweDFBNEUsIDB4OEZENiwgMHgxQTRELA0KLSAgICAweDhGRDcsIDB4MUE0RiwgMHg4RkUwLCAweDFDMEEsIDB4OEZFMSwgMHgxQzA4LCAweDhGRTIsIDB4MDgxMywNCi0gICAgMHg4RkUzLCAweDFDMDcsIDB4OEZFNCwgMHgwODE4LCAweDhGRTUsIDB4MDgxNSwgMHg4RkU2LCAweDA4MTIsDQotICAgIDB4OEZFOCwgMHgwODE5LCAweDhGRUEsIDB4MDgxNCwgMHg4RkVCLCAweDA4MTcsIDB4OEZFRCwgMHgwODE2LA0KLSAgICAweDhGRUUsIDB4MUMwOSwgMHg4RkYwLCAweDA4MTEsIDB4OEZGNCwgMHgwOUQ5LCAweDhGRjUsIDB4MUUxNiwNCi0gICAgMHg4RkY2LCAweDFFMUMsIDB4OEZGNywgMHgwOUQ2LCAweDhGRjgsIDB4MDlERCwgMHg4RkZBLCAweDA5RDgsDQotICAgIDB4OEZGQiwgMHgxRTE5LCAweDhGRkMsIDB4MUUxQiwgMHg4RkZELCAweDA5REIsIDB4OEZGRSwgMHgxRTE1LA0KLSAgICAweDhGRkYsIDB4MUUxOCwgMHg5MDAwLCAweDA5RDcsIDB4OTAwMSwgMHgwOUQ0LCAweDkwMDIsIDB4MUUxNywNCi0gICAgMHg5MDAzLCAweDA5REEsIDB4OTAwNCwgMHgxRTFBLCAweDkwMDUsIDB4MDlEQywgMHg5MDA2LCAweDA5RDUsDQotICAgIDB4OTAwQiwgMHgyMDgxLCAweDkwMEMsIDB4MjA4NCwgMHg5MDBELCAweDBCQjYsIDB4OTAwRiwgMHgwQkMwLA0KLSAgICAweDkwMTAsIDB4MEJCQywgMHg5MDExLCAweDIwODIsIDB4OTAxNCwgMHgwQkM0LCAweDkwMTUsIDB4MEJCRCwNCi0gICAgMHg5MDE2LCAweDBCQzIsIDB4OTAxNywgMHgwQkI4LCAweDkwMTksIDB4MEJCNSwgMHg5MDFBLCAweDBCQjcsDQotICAgIDB4OTAxQiwgMHgwQkMzLCAweDkwMUMsIDB4MjA4MywgMHg5MDFELCAweDBCQkIsIDB4OTAxRSwgMHgwQkJFLA0KLSAgICAweDkwMUYsIDB4MEJCQSwgMHg5MDIwLCAweDBCQkYsIDB4OTAyMSwgMHgyMDg1LCAweDkwMjIsIDB4MEJDMSwNCi0gICAgMHg5MDIzLCAweDBCQjksIDB4OTAyNCwgMHgyMDgwLCAweDkwMkQsIDB4MjMxRiwgMHg5MDJFLCAweDBEODIsDQotICAgIDB4OTAyRiwgMHgyMzIxLCAweDkwMzEsIDB4MEQ4NCwgMHg5MDMyLCAweDBEODYsIDB4OTAzNCwgMHgyMzIwLA0KLSAgICAweDkwMzUsIDB4MEQ4MywgMHg5MDM2LCAweDBEODcsIDB4OTAzOCwgMHgwRDg1LCAweDkwM0MsIDB4MEYzQiwNCi0gICAgMHg5MDNELCAweDI1QzYsIDB4OTAzRSwgMHgwRjQzLCAweDkwM0YsIDB4MjVDMywgMHg5MDQxLCAweDBGNDQsDQotICAgIDB4OTA0MiwgMHgwRjM5LCAweDkwNDQsIDB4MjVDNCwgMHg5MDQ3LCAweDBGM0UsIDB4OTA0OSwgMHgyNUM1LA0KLSAgICAweDkwNEEsIDB4MEYzNywgMHg5MDRCLCAweDBGMzYsIDB4OTA0RCwgMHgwRjQxLCAweDkwNEUsIDB4MEY0MCwNCi0gICAgMHg5MDRGLCAweDBGM0YsIDB4OTA1MCwgMHgwRjNELCAweDkwNTEsIDB4MEY0MiwgMHg5MDUyLCAweDI1QzIsDQotICAgIDB4OTA1MywgMHgwRjM4LCAweDkwNTQsIDB4MEYzQSwgMHg5MDU1LCAweDBGM0MsIDB4OTA1OCwgMHgxMEM0LA0KLSAgICAweDkwNTksIDB4MTBDNywgMHg5MDVCLCAweDEwQ0IsIDB4OTA1QywgMHgxMEM1LCAweDkwNUQsIDB4MTBDQSwNCi0gICAgMHg5MDVFLCAweDEwQzgsIDB4OTA2MCwgMHgxMEMzLCAweDkwNjIsIDB4MTBDOSwgMHg5MDYzLCAweDEwQzYsDQotICAgIDB4OTA2NywgMHgyQTdGLCAweDkwNjgsIDB4MTI0OSwgMHg5MDY5LCAweDEyNDcsIDB4OTA2QiwgMHgyQTgwLA0KLSAgICAweDkwNkQsIDB4MTI0QSwgMHg5MDZFLCAweDEyNDgsIDB4OTA2RiwgMHgyQTdFLCAweDkwNzAsIDB4MkE3RCwNCi0gICAgMHg5MDcyLCAweDEzNzAsIDB4OTA3MywgMHgyQTdDLCAweDkwNzQsIDB4MTM2RSwgMHg5MDc1LCAweDEzNkQsDQotICAgIDB4OTA3NiwgMHgyQ0I1LCAweDkwNzcsIDB4MTI0QiwgMHg5MDc4LCAweDEzNkYsIDB4OTA3OSwgMHgyQ0I2LA0KLSAgICAweDkwN0EsIDB4MTM3MiwgMHg5MDdCLCAweDJDQjcsIDB4OTA3QywgMHgxMzcxLCAweDkwN0QsIDB4MTQ5MywNCi0gICAgMHg5MDdFLCAweDJFN0UsIDB4OTA3RiwgMHgxNDkyLCAweDkwODAsIDB4MTQ5NywgMHg5MDgxLCAweDE0OTUsDQotICAgIDB4OTA4MiwgMHgxNDk2LCAweDkwODMsIDB4MTUzQSwgMHg5MDg0LCAweDE0OTQsIDB4OTA4NSwgMHgyRTdELA0KLSAgICAweDkwODYsIDB4MkNCOCwgMHg5MDg3LCAweDE1MzksIDB4OTA4OCwgMHgxNTNCLCAweDkwOEEsIDB4MTVEOSwNCi0gICAgMHg5MDhCLCAweDE1REEsIDB4OTA4RCwgMHgzMjQ3LCAweDkwOEYsIDB4MTcwQywgMHg5MDkwLCAweDE3MEIsDQotICAgIDB4OTA5MSwgMHgwNTFCLCAweDkwOTQsIDB4MTgxRSwgMHg5MDk1LCAweDA5REUsIDB4OTA5NywgMHgxODFCLA0KLSAgICAweDkwOTgsIDB4MTgxQywgMHg5MDk5LCAweDE4MUEsIDB4OTA5QiwgMHgxODFELCAweDkwOUUsIDB4MThFRCwNCi0gICAgMHg5MDlGLCAweDE4RUEsIDB4OTBBMCwgMHgxOEVGLCAweDkwQTEsIDB4MThFQiwgMHg5MEEyLCAweDA1MUMsDQotICAgIDB4OTBBMywgMHgwNTFGLCAweDkwQTUsIDB4MThFQywgMHg5MEE2LCAweDA1MUUsIDB4OTBBNywgMHgxOEVFLA0KLSAgICAweDkwQUEsIDB4MDUxRCwgMHg5MEFGLCAweDFBNTIsIDB4OTBCMCwgMHgxQTU0LCAweDkwQjEsIDB4MDY5MywNCi0gICAgMHg5MEIyLCAweDFBNTAsIDB4OTBCMywgMHgxQTUzLCAweDkwQjQsIDB4MUE1MSwgMHg5MEI1LCAweDA2OTEsDQotICAgIDB4OTBCNiwgMHgwNjk0LCAweDkwQjgsIDB4MDY5MiwgMHg5MEJELCAweDFDMEMsIDB4OTBCRSwgMHgxQzEwLA0KLSAgICAweDkwQkYsIDB4MUMwRCwgMHg5MEMxLCAweDA4MUMsIDB4OTBDMywgMHgwODFELCAweDkwQzUsIDB4MUMwRiwNCi0gICAgMHg5MEM3LCAweDFDMTEsIDB4OTBDOCwgMHgxQzEzLCAweDkwQ0EsIDB4MDgxQSwgMHg5MENCLCAweDFDMTIsDQotICAgIDB4OTBDRSwgMHgwODFCLCAweDkwRDQsIDB4MjA4QywgMHg5MEQ1LCAweDFDMEUsIDB4OTBENiwgMHgxRTFELA0KLSAgICAweDkwRDcsIDB4MUUyNiwgMHg5MEQ4LCAweDFFMjQsIDB4OTBEOSwgMHgxRTFGLCAweDkwREEsIDB4MUUyMCwNCi0gICAgMHg5MERCLCAweDFFMjUsIDB4OTBEQywgMHgxRTI3LCAweDkwREQsIDB4MDlFMCwgMHg5MERGLCAweDFFMjIsDQotICAgIDB4OTBFMCwgMHgxRTFFLCAweDkwRTEsIDB4MDlERiwgMHg5MEUyLCAweDA5RTEsIDB4OTBFMywgMHgxRTIxLA0KLSAgICAweDkwRTQsIDB4MUUyOCwgMHg5MEU1LCAweDFFMjMsIDB4OTBFOCwgMHgwQkM1LCAweDkwRTksIDB4MjA4RiwNCi0gICAgMHg5MEVBLCAweDIwODcsIDB4OTBFQiwgMHgyMDhELCAweDkwRUMsIDB4MjA4RSwgMHg5MEVELCAweDBCQzYsDQotICAgIDB4OTBFRiwgMHgyMDg2LCAweDkwRjAsIDB4MjA4OCwgMHg5MEYxLCAweDFDMEIsIDB4OTBGMiwgMHgyMDhBLA0KLSAgICAweDkwRjMsIDB4MjA4QiwgMHg5MEY0LCAweDIwODksIDB4OTBGNSwgMHgwRDg5LCAweDkwRjksIDB4MjMyOCwNCi0gICAgMHg5MEZBLCAweDJDQjksIDB4OTBGQiwgMHgyMzI5LCAweDkwRkMsIDB4MjMyNiwgMHg5MEZELCAweDBCQzcsDQotICAgIDB4OTBGRSwgMHgwRDhCLCAweDkwRkYsIDB4MjMyNSwgMHg5MTAwLCAweDIzMkIsIDB4OTEwMSwgMHgyMzJBLA0KLSAgICAweDkxMDIsIDB4MEQ4OCwgMHg5MTAzLCAweDIzMkUsIDB4OTEwNCwgMHgyMzI0LCAweDkxMDUsIDB4MjMyRCwNCi0gICAgMHg5MTA2LCAweDIzMjIsIDB4OTEwNywgMHgyMzJDLCAweDkxMDgsIDB4MjMyNywgMHg5MTA5LCAweDBEOEEsDQotICAgIDB4OTEwQiwgMHgyNUNELCAweDkxMEQsIDB4MjVDOCwgMHg5MTBFLCAweDI1Q0UsIDB4OTEwRiwgMHgyNUM5LA0KLSAgICAweDkxMTAsIDB4MjVDNywgMHg5MTExLCAweDI1Q0EsIDB4OTExMiwgMHgwRjQ1LCAweDkxMTQsIDB4MjVDQywNCi0gICAgMHg5MTE2LCAweDI1Q0IsIDB4OTExNywgMHgwRjQ2LCAweDkxMTgsIDB4MTBDRCwgMHg5MTE5LCAweDEwQ0MsDQotICAgIDB4OTExQSwgMHgyODI3LCAweDkxMUIsIDB4MjgyQSwgMHg5MTFDLCAweDI4MjIsIDB4OTExRCwgMHgyODI2LA0KLSAgICAweDkxMUUsIDB4MTBDRSwgMHg5MTFGLCAweDI4MjUsIDB4OTEyMCwgMHgyODIzLCAweDkxMjEsIDB4MjgyOSwNCi0gICAgMHg5MTIyLCAweDI4MjQsIDB4OTEyMywgMHgyODIxLCAweDkxMjQsIDB4MjgyOCwgMHg5MTI2LCAweDJBODYsDQotICAgIDB4OTEyNywgMHgxMjRFLCAweDkxMjgsIDB4MkZGQiwgMHg5MTI5LCAweDJBODMsIDB4OTEyQSwgMHgyQTg0LA0KLSAgICAweDkxMkIsIDB4MkE4MiwgMHg5MTJDLCAweDIzMjMsIDB4OTEyRCwgMHgxMjRELCAweDkxMkUsIDB4MkE4NywNCi0gICAgMHg5MTJGLCAweDJBODEsIDB4OTEzMCwgMHgxMjRDLCAweDkxMzEsIDB4MTI0RiwgMHg5MTMyLCAweDJBODUsDQotICAgIDB4OTEzMywgMHgyQ0JBLCAweDkxMzQsIDB4MTM3MywgMHg5MTM1LCAweDJDQkIsIDB4OTEzNiwgMHgyQ0JDLA0KLSAgICAweDkxMzgsIDB4MkU3RiwgMHg5MTM5LCAweDE0OTgsIDB4OTEzQSwgMHgyRkZDLCAweDkxM0IsIDB4MkZGRCwNCi0gICAgMHg5MTNFLCAweDJGRkUsIDB4OTEzRiwgMHgzMTQ4LCAweDkxNDAsIDB4MzE0NywgMHg5MTQxLCAweDMyNDksDQotICAgIDB4OTE0MywgMHgzMjQ4LCAweDkxNDQsIDB4MzMxRiwgMHg5MTQ1LCAweDMzMjAsIDB4OTE0NiwgMHgzMzFFLA0KLSAgICAweDkxNDcsIDB4MzNDNiwgMHg5MTQ4LCAweDE2REUsIDB4OTE0OSwgMHgwNTIwLCAweDkxNEEsIDB4MDgxRiwNCi0gICAgMHg5MTRCLCAweDA4MUUsIDB4OTE0QywgMHgwOUU0LCAweDkxNEQsIDB4MDlFMywgMHg5MTRFLCAweDFFMkEsDQotICAgIDB4OTE0RiwgMHgxRTJCLCAweDkxNTAsIDB4MUUyOSwgMHg5MTUyLCAweDA5RTIsIDB4OTE1MywgMHgyMDkzLA0KLSAgICAweDkxNTUsIDB4MjA5NCwgMHg5MTU2LCAweDIwOTAsIDB4OTE1NywgMHgwQkM4LCAweDkxNTgsIDB4MjA5MSwNCi0gICAgMHg5MTVBLCAweDIwOTIsIDB4OTE1RiwgMHgyMzMxLCAweDkxNjAsIDB4MjMzMywgMHg5MTYxLCAweDIzMkYsDQotICAgIDB4OTE2MiwgMHgyMzMyLCAweDkxNjMsIDB4MEQ4QywgMHg5MTY0LCAweDIzMzAsIDB4OTE2NSwgMHgwRDhELA0KLSAgICAweDkxNjgsIDB4MjNFMiwgMHg5MTY5LCAweDBGNDksIDB4OTE2QSwgMHgwRjQ4LCAweDkxNkMsIDB4MEY0NywNCi0gICAgMHg5MTZFLCAweDI1Q0YsIDB4OTE2RiwgMHgyNUQwLCAweDkxNzIsIDB4MjgyQywgMHg5MTczLCAweDI4MkUsDQotICAgIDB4OTE3NCwgMHgxMEQyLCAweDkxNzUsIDB4MTBDRiwgMHg5MTc3LCAweDEwRDEsIDB4OTE3OCwgMHgxMEQwLA0KLSAgICAweDkxNzksIDB4MjgyRCwgMHg5MTdBLCAweDI4MkIsIDB4OTE4MCwgMHgyQThFLCAweDkxODEsIDB4MkE4QiwNCi0gICAgMHg5MTgyLCAweDJBOEMsIDB4OTE4MywgMHgxMjUzLCAweDkxODQsIDB4MkE4RCwgMHg5MTg1LCAweDJBODgsDQotICAgIDB4OTE4NiwgMHgyQTg5LCAweDkxODcsIDB4MTI1MCwgMHg5MTg5LCAweDEyNTEsIDB4OTE4QSwgMHgyQThBLA0KLSAgICAweDkxOEIsIDB4MTI1MiwgMHg5MThELCAweDJDQzAsIDB4OTE4RiwgMHgyQ0MxLCAweDkxOTAsIDB4MkNCRSwNCi0gICAgMHg5MTkxLCAweDJDQkYsIDB4OTE5MiwgMHgxMzc0LCAweDkxOTMsIDB4MkNCRCwgMHg5MTk5LCAweDJFODMsDQotICAgIDB4OTE5QSwgMHgyRTgwLCAweDkxOUIsIDB4MkU4MiwgMHg5MTlDLCAweDE0OUIsIDB4OTE5RCwgMHgyRTg2LA0KLSAgICAweDkxOUUsIDB4MTQ5QSwgMHg5MTlGLCAweDJFODQsIDB4OTFBMCwgMHgyRTg3LCAweDkxQTEsIDB4MkU4NSwNCi0gICAgMHg5MUEyLCAweDJFODEsIDB4OTFBMywgMHgxNDk5LCAweDkxQTUsIDB4MzAwMCwgMHg5MUE3LCAweDMwMDEsDQotICAgIDB4OTFBOCwgMHgyRkZGLCAweDkxQUEsIDB4MzAwMywgMHg5MUFCLCAweDE1M0MsIDB4OTFBQywgMHgxNTNELA0KLSAgICAweDkxQUQsIDB4MzE0QSwgMHg5MUFFLCAweDE1REMsIDB4OTFBRiwgMHgzMDAyLCAweDkxQjAsIDB4MzE0OSwNCi0gICAgMHg5MUIxLCAweDE1REIsIDB4OTFCMiwgMHgzMjRDLCAweDkxQjMsIDB4MzI0RCwgMHg5MUI0LCAweDE2NTAsDQotICAgIDB4OTFCNSwgMHgzMjRCLCAweDkxQjcsIDB4MzI0QSwgMHg5MUI5LCAweDMzMjEsIDB4OTFCQSwgMHgxNjk4LA0KLSAgICAweDkxQkMsIDB4MzQ0NiwgMHg5MUJELCAweDM0QTMsIDB4OTFCRSwgMHgzNEEyLCAweDkxQzAsIDB4MTczMCwNCi0gICAgMHg5MUMxLCAweDE3NEEsIDB4OTFDMiwgMHgzNEE0LCAweDkxQzMsIDB4MzUwQiwgMHg5MUM1LCAweDE3NUMsDQotICAgIDB4OTFDNiwgMHgwNTIxLCAweDkxQzcsIDB4MDY5NSwgMHg5MUM5LCAweDBGNEEsIDB4OTFDQiwgMHgxNjUxLA0KLSAgICAweDkxQ0MsIDB4MDUyMiwgMHg5MUNELCAweDA4MjAsIDB4OTFDRSwgMHgwQkM5LCAweDkxQ0YsIDB4MEQ4RSwNCi0gICAgMHg5MUQwLCAweDE1M0UsIDB4OTFEMSwgMHgwNjk2LCAweDkxRDMsIDB4MUMxNSwgMHg5MUQ0LCAweDFDMTQsDQotICAgIDB4OTFENSwgMHgxRTJDLCAweDkxRDcsIDB4MDlFNywgMHg5MUQ4LCAweDA5RTUsIDB4OTFEOSwgMHgwOUU5LA0KLSAgICAweDkxREEsIDB4MUUyRSwgMHg5MURDLCAweDA5RTgsIDB4OTFERCwgMHgwOUU2LCAweDkxRTIsIDB4MUUyRCwNCi0gICAgMHg5MUUzLCAweDBCQ0MsIDB4OTFFNCwgMHgyMDlBLCAweDkxRTYsIDB4MEJDQiwgMHg5MUU3LCAweDBCQ0QsDQotICAgIDB4OTFFOCwgMHgyMDlGLCAweDkxRTksIDB4MEJDRiwgMHg5MUVBLCAweDIwOUMsIDB4OTFFQiwgMHgyMDlELA0KLSAgICAweDkxRUMsIDB4MjA5NSwgMHg5MUVELCAweDBCQ0UsIDB4OTFFRSwgMHgyMEEwLCAweDkxRjEsIDB4MjA5NywNCi0gICAgMHg5MUYzLCAweDIwOTgsIDB4OTFGNCwgMHgyMDk2LCAweDkxRjUsIDB4MEJDQSwgMHg5MUY3LCAweDIwOUUsDQotICAgIDB4OTFGOCwgMHgyMDk5LCAweDkxRjksIDB4MjA5QiwgMHg5MUZELCAweDIzM0YsIDB4OTFGRiwgMHgyMzNFLA0KLSAgICAweDkyMDAsIDB4MjMzQywgMHg5MjAxLCAweDIzMzQsIDB4OTIwMiwgMHgyMzQzLCAweDkyMDMsIDB4MjMzNywNCi0gICAgMHg5MjA0LCAweDIzNDEsIDB4OTIwNSwgMHgyMzQ4LCAweDkyMDYsIDB4MjM0MCwgMHg5MjA3LCAweDBEOTYsDQotICAgIDB4OTIwOSwgMHgwRDkyLCAweDkyMEEsIDB4MjMzNSwgMHg5MjBDLCAweDIzM0IsIDB4OTIwRCwgMHgwRDk0LA0KLSAgICAweDkyMEYsIDB4MjMzQSwgMHg5MjEwLCAweDBEOTUsIDB4OTIxMSwgMHgwRDk3LCAweDkyMTIsIDB4MjMzRCwNCi0gICAgMHg5MjE0LCAweDBEOEYsIDB4OTIxNSwgMHgwRDkwLCAweDkyMTYsIDB4MjM0OSwgMHg5MjE3LCAweDIzNDcsDQotICAgIDB4OTIxOSwgMHgyMzQ2LCAweDkyMUEsIDB4MjMzOCwgMHg5MjFDLCAweDIzNDQsIDB4OTIxRSwgMHgwRDkzLA0KLSAgICAweDkyMjMsIDB4MEQ5MSwgMHg5MjI0LCAweDIzNDUsIDB4OTIyNSwgMHgyMzM2LCAweDkyMjYsIDB4MjMzOSwNCi0gICAgMHg5MjI3LCAweDIzNDIsIDB4OTIyRCwgMHgyODUxLCAweDkyMkUsIDB4MjVEQSwgMHg5MjMwLCAweDI1RDMsDQotICAgIDB4OTIzMSwgMHgyNUU2LCAweDkyMzIsIDB4MjVFRiwgMHg5MjMzLCAweDI1RDYsIDB4OTIzNCwgMHgwRjU1LA0KLSAgICAweDkyMzYsIDB4MjVFMywgMHg5MjM3LCAweDBGNEIsIDB4OTIzOCwgMHgwRjRELCAweDkyMzksIDB4MEY1OSwNCi0gICAgMHg5MjNBLCAweDI1RDQsIDB4OTIzRCwgMHgwRjRFLCAweDkyM0UsIDB4MEY1MCwgMHg5MjNGLCAweDBGNUEsDQotICAgIDB4OTI0MCwgMHgwRjRGLCAweDkyNDUsIDB4MEY1OCwgMHg5MjQ2LCAweDI1REMsIDB4OTI0OCwgMHgyNUQxLA0KLSAgICAweDkyNDksIDB4MEY1NiwgMHg5MjRBLCAweDI1REIsIDB4OTI0QiwgMHgwRjUyLCAweDkyNEMsIDB4MjVFRCwNCi0gICAgMHg5MjRELCAweDBGNTcsIDB4OTI0RSwgMHgyNUVCLCAweDkyNEYsIDB4MjVERiwgMHg5MjUwLCAweDI1RTksDQotICAgIDB4OTI1MSwgMHgwRjU0LCAweDkyNTIsIDB4MjVEMiwgMHg5MjUzLCAweDI1RUMsIDB4OTI1NCwgMHgyNUU3LA0KLSAgICAweDkyNTYsIDB4MjVFRSwgMHg5MjU3LCAweDBGNEMsIDB4OTI1QSwgMHgwRjVCLCAweDkyNUIsIDB4MEY1MSwNCi0gICAgMHg5MjVFLCAweDI1RDgsIDB4OTI2MCwgMHgyNUUwLCAweDkyNjEsIDB4MjVFNCwgMHg5MjYzLCAweDI1RTgsDQotICAgIDB4OTI2NCwgMHgwRjUzLCAweDkyNjUsIDB4MjVENywgMHg5MjY2LCAweDI1RDUsIDB4OTI2NywgMHgyNUUxLA0KLSAgICAweDkyNkMsIDB4MjVERSwgMHg5MjZELCAweDI1REQsIDB4OTI2RiwgMHgyNUUyLCAweDkyNzAsIDB4MjVFNSwNCi0gICAgMHg5MjcyLCAweDI1RUEsIDB4OTI3NiwgMHgyODMxLCAweDkyNzgsIDB4MTBEMywgMHg5Mjc5LCAweDI4M0IsDQotICAgIDB4OTI3QSwgMHgyODMzLCAweDkyN0IsIDB4MTBEOSwgMHg5MjdDLCAweDEwREQsIDB4OTI3RCwgMHgyODQ0LA0KLSAgICAweDkyN0UsIDB4Mjg0QywgMHg5MjdGLCAweDI4M0QsIDB4OTI4MCwgMHgxMEQ1LCAweDkyODIsIDB4Mjg0MSwNCi0gICAgMHg5MjgzLCAweDI1RDksIDB4OTI4NSwgMHgxMEQ2LCAweDkyODYsIDB4Mjg0OCwgMHg5Mjg3LCAweDI4NEQsDQotICAgIDB4OTI4OCwgMHgyODQ1LCAweDkyOEEsIDB4Mjg0NywgMHg5MjhCLCAweDI4NTAsIDB4OTI4QywgMHgyODQ5LA0KLSAgICAweDkyOEQsIDB4MjgzNywgMHg5MjhFLCAweDI4NDAsIDB4OTI5MSwgMHgxMERFLCAweDkyOTMsIDB4MTBEQSwNCi0gICAgMHg5Mjk0LCAweDI4MzUsIDB4OTI5NSwgMHgyODQyLCAweDkyOTYsIDB4MTBEOCwgMHg5Mjk3LCAweDI4M0MsDQotICAgIDB4OTI5OCwgMHgxMEQ3LCAweDkyOTksIDB4Mjg0QSwgMHg5MjlBLCAweDI4MzksIDB4OTI5QiwgMHgyODMyLA0KLSAgICAweDkyOUMsIDB4MTBEQiwgMHg5MjlELCAweDI4NEYsIDB4OTJBMCwgMHgyODM0LCAweDkyQTEsIDB4Mjg0NiwNCi0gICAgMHg5MkEyLCAweDI4NDMsIDB4OTJBMywgMHgyODNFLCAweDkyQTQsIDB4MjgzMCwgMHg5MkE1LCAweDI4MkYsDQotICAgIDB4OTJBNiwgMHgyODM4LCAweDkyQTcsIDB4Mjg0QiwgMHg5MkE4LCAweDEwREMsIDB4OTJBOSwgMHgyODRFLA0KLSAgICAweDkyQUEsIDB4MjgzNiwgMHg5MkFCLCAweDI4M0EsIDB4OTJBQywgMHgxMEQ0LCAweDkyQjIsIDB4MTI1RiwNCi0gICAgMHg5MkIzLCAweDEyNUEsIDB4OTJCNCwgMHgyQUIwLCAweDkyQjUsIDB4MkFBQywgMHg5MkI2LCAweDJBOTQsDQotICAgIDB4OTJCNywgMHgxMjU2LCAweDkyQjksIDB4MzZFOSwgMHg5MkJCLCAweDEyNTUsIDB4OTJCQywgMHgxMjVCLA0KLSAgICAweDkyQzAsIDB4MkE5MiwgMHg5MkMxLCAweDEyNTksIDB4OTJDMiwgMHgyQTlFLCAweDkyQzMsIDB4MkE5MCwNCi0gICAgMHg5MkM0LCAweDJBOTEsIDB4OTJDNSwgMHgxMjU0LCAweDkyQzYsIDB4MkFBRiwgMHg5MkM3LCAweDEyNUQsDQotICAgIDB4OTJDOCwgMHgyQUExLCAweDkyQzksIDB4MkFBNiwgMHg5MkNBLCAweDJBQTAsIDB4OTJDQiwgMHgyQ0QzLA0KLSAgICAweDkyQ0MsIDB4MkE5QywgMHg5MkNELCAweDJBQTQsIDB4OTJDRSwgMHgyQUEyLCAweDkyQ0YsIDB4MkE5NSwNCi0gICAgMHg5MkQwLCAweDJBOEYsIDB4OTJEMSwgMHgyQUFBLCAweDkyRDIsIDB4MTI1QywgMHg5MkQzLCAweDJBQUIsDQotICAgIDB4OTJENSwgMHgyQUE1LCAweDkyRDcsIDB4MkE5QSwgMHg5MkQ4LCAweDJBOTgsIDB4OTJEOSwgMHgyQTkzLA0KLSAgICAweDkyREQsIDB4MkE5QiwgMHg5MkRFLCAweDJBQTgsIDB4OTJERiwgMHgyQTk3LCAweDkyRTAsIDB4MkFBNywNCi0gICAgMHg5MkUxLCAweDJBQUQsIDB4OTJFNCwgMHgxMjU4LCAweDkyRTYsIDB4MkFBMywgMHg5MkU3LCAweDJBQTksDQotICAgIDB4OTJFOCwgMHgyQTlGLCAweDkyRTksIDB4MkE5OSwgMHg5MkVBLCAweDEyNTcsIDB4OTJFRSwgMHgyODNGLA0KLSAgICAweDkyRUYsIDB4MkE5RCwgMHg5MkYwLCAweDEyNUUsIDB4OTJGMSwgMHgyQTk2LCAweDkyRjcsIDB4MkNEOCwNCi0gICAgMHg5MkY4LCAweDEzNzcsIDB4OTJGOSwgMHgyQ0Q3LCAweDkyRkEsIDB4MkNENSwgMHg5MkZCLCAweDJDRTcsDQotICAgIDB4OTJGQywgMHgxMzdCLCAweDkyRkUsIDB4MkNFNCwgMHg5MkZGLCAweDJDREMsIDB4OTMwMCwgMHgyQ0U2LA0KLSAgICAweDkzMDEsIDB4MkNDRSwgMHg5MzAyLCAweDJDREEsIDB4OTMwNCwgMHgxMzdELCAweDkzMDYsIDB4MkNDNiwNCi0gICAgMHg5MzA4LCAweDJDQzQsIDB4OTMwOSwgMHgyQ0U1LCAweDkzMEIsIDB4MkNFMywgMHg5MzBDLCAweDJDRTIsDQotICAgIDB4OTMwRCwgMHgyQ0QyLCAweDkzMEUsIDB4MkNEMSwgMHg5MzBGLCAweDJDQzcsIDB4OTMxMCwgMHgxMzdGLA0KLSAgICAweDkzMTIsIDB4MkNDRCwgMHg5MzEzLCAweDJDRDYsIDB4OTMxNCwgMHgyQ0UxLCAweDkzMTUsIDB4MTM4MiwNCi0gICAgMHg5MzE2LCAweDJDRTgsIDB4OTMxOCwgMHgxNEEzLCAweDkzMTksIDB4MTM4NCwgMHg5MzFBLCAweDEzN0UsDQotICAgIDB4OTMxQiwgMHgyQ0NCLCAweDkzMUQsIDB4MkNENCwgMHg5MzFFLCAweDJDQzMsIDB4OTMxRiwgMHgyQ0M1LA0KLSAgICAweDkzMjAsIDB4MTM3NSwgMHg5MzIxLCAweDEzODEsIDB4OTMyMiwgMHgxMzdBLCAweDkzMjMsIDB4MkNDQywNCi0gICAgMHg5MzI0LCAweDJDREIsIDB4OTMyNSwgMHgyQUFFLCAweDkzMjYsIDB4MTM4MCwgMHg5MzI3LCAweDJDQzIsDQotICAgIDB4OTMyOCwgMHgxNDlFLCAweDkzMjksIDB4MkNERCwgMHg5MzJBLCAweDJDRTAsIDB4OTMyQiwgMHgxMzdDLA0KLSAgICAweDkzMkQsIDB4MkNEMCwgMHg5MzJFLCAweDEzODMsIDB4OTMyRiwgMHgxMzc5LCAweDkzMzMsIDB4MTM3OCwNCi0gICAgMHg5MzM0LCAweDJDRDksIDB4OTMzNSwgMHgyQ0RGLCAweDkzMzYsIDB4MTM3NiwgMHg5MzM4LCAweDJDQzksDQotICAgIDB4OTMzOSwgMHgyQ0RFLCAweDkzM0MsIDB4MkNDQSwgMHg5MzQ2LCAweDJDQ0YsIDB4OTM0NywgMHgyRThELA0KLSAgICAweDkzNDksIDB4MkU5MiwgMHg5MzRBLCAweDE0QTAsIDB4OTM0QiwgMHgxNEEyLCAweDkzNEMsIDB4MkU5OCwNCi0gICAgMHg5MzRELCAweDE0OUMsIDB4OTM0RSwgMHgyRUE2LCAweDkzNEYsIDB4MkU5RSwgMHg5MzUwLCAweDJFOTMsDQotICAgIDB4OTM1MSwgMHgyRTk0LCAweDkzNTIsIDB4MkU5RCwgMHg5MzU0LCAweDE0QTksIDB4OTM1NSwgMHgyRTlDLA0KLSAgICAweDkzNTYsIDB4MkU4QywgMHg5MzU3LCAweDJFOUIsIDB4OTM1OCwgMHgyRThGLCAweDkzNTksIDB4MkVBNywNCi0gICAgMHg5MzVBLCAweDE0QTgsIDB4OTM1QiwgMHgxNEE2LCAweDkzNUMsIDB4MkU5MCwgMHg5MzVFLCAweDJFQTMsDQotICAgIDB4OTM2MCwgMHgyRTk1LCAweDkzNjEsIDB4MkVBMiwgMHg5MzYzLCAweDJFQTQsIDB4OTM2NCwgMHgyRThCLA0KLSAgICAweDkzNjUsIDB4MTRBMSwgMHg5MzY3LCAweDJFQTUsIDB4OTM2QSwgMHgyRTk5LCAweDkzNkMsIDB4MTRBNSwNCi0gICAgMHg5MzZELCAweDJFOTYsIDB4OTM3MCwgMHgxNEE3LCAweDkzNzEsIDB4MkU5RiwgMHg5Mzc1LCAweDE0OUYsDQotICAgIDB4OTM3NiwgMHgyRTkxLCAweDkzNzcsIDB4MkVBMCwgMHg5Mzc5LCAweDJFOUEsIDB4OTM3QSwgMHgyQ0M4LA0KLSAgICAweDkzN0IsIDB4MkVBMSwgMHg5MzdDLCAweDJFOEUsIDB4OTM3RSwgMHgxNEE0LCAweDkzODAsIDB4MzAxNCwNCi0gICAgMHg5MzgyLCAweDE0OUQsIDB4OTM4MywgMHgyRTg5LCAweDkzODgsIDB4MzAxMSwgMHg5Mzg5LCAweDMwMEEsDQotICAgIDB4OTM4QSwgMHgxNTQwLCAweDkzOEMsIDB4MzAwNSwgMHg5MzhELCAweDMwMTUsIDB4OTM4RSwgMHgzMDBDLA0KLSAgICAweDkzOEYsIDB4MkU5NywgMHg5MzkxLCAweDMwMTcsIDB4OTM5MiwgMHgzMDA2LCAweDkzOTQsIDB4MTUzRiwNCi0gICAgMHg5Mzk1LCAweDMwMTAsIDB4OTM5NiwgMHgxNTQxLCAweDkzOTcsIDB4MTU0OSwgMHg5Mzk4LCAweDE1NDcsDQotICAgIDB4OTM5OSwgMHgzMDEyLCAweDkzOUEsIDB4MTU0OCwgMHg5MzlCLCAweDMwMDgsIDB4OTM5RCwgMHgzMDA5LA0KLSAgICAweDkzOUUsIDB4MzAwRSwgMHg5MzlGLCAweDMwMTMsIDB4OTNBMSwgMHgyRTg4LCAweDkzQTIsIDB4MTU0MiwNCi0gICAgMHg5M0EzLCAweDMwMUMsIDB4OTNBNCwgMHgzMDE5LCAweDkzQTUsIDB4MzE2MCwgMHg5M0E2LCAweDMwMEYsDQotICAgIDB4OTNBNywgMHgzMDBCLCAweDkzQTgsIDB4MzAxQSwgMHg5M0E5LCAweDMxNTUsIDB4OTNBQSwgMHgzMDBELA0KLSAgICAweDkzQUMsIDB4MTU0NSwgMHg5M0FFLCAweDE1NDQsIDB4OTNBRiwgMHgyRThBLCAweDkzQjAsIDB4MTU0NiwNCi0gICAgMHg5M0IxLCAweDMwMTYsIDB4OTNCMiwgMHgzMDE4LCAweDkzQjMsIDB4MTU0MywgMHg5M0I0LCAweDMwMUIsDQotICAgIDB4OTNCNSwgMHgzMDA0LCAweDkzQjcsIDB4MzAwNywgMHg5M0MwLCAweDMxNUUsIDB4OTNDMiwgMHgzMTRFLA0KLSAgICAweDkzQzMsIDB4MTVFMCwgMHg5M0M0LCAweDMxNUMsIDB4OTNDNywgMHgzMTRDLCAweDkzQzgsIDB4MTVFMSwNCi0gICAgMHg5M0NBLCAweDMxNTcsIDB4OTNDQywgMHgzMTUzLCAweDkzQ0QsIDB4MTVFNiwgMHg5M0NFLCAweDMxNUQsDQotICAgIDB4OTNDRiwgMHgzMTRELCAweDkzRDAsIDB4MzE1MCwgMHg5M0QxLCAweDE1REUsIDB4OTNEMiwgMHgzMTVGLA0KLSAgICAweDkzRDQsIDB4MzE1OCwgMHg5M0Q1LCAweDMxNUIsIDB4OTNENiwgMHgxNUU0LCAweDkzRDcsIDB4MTVFOSwNCi0gICAgMHg5M0Q4LCAweDE1RTcsIDB4OTNEOSwgMHgzMTU0LCAweDkzREEsIDB4MzE0RiwgMHg5M0RDLCAweDE1RTIsDQotICAgIDB4OTNERCwgMHgxNUUzLCAweDkzREUsIDB4MzE0QiwgMHg5M0RGLCAweDE1REYsIDB4OTNFMSwgMHgxNURELA0KLSAgICAweDkzRTIsIDB4MTVFNSwgMHg5M0UzLCAweDMxNUEsIDB4OTNFNCwgMHgxNUU4LCAweDkzRTYsIDB4MzE1NiwNCi0gICAgMHg5M0U3LCAweDMxNjEsIDB4OTNFOCwgMHgxNUVBLCAweDkzRUMsIDB4MzE1MiwgMHg5M0VFLCAweDMxNTksDQotICAgIDB4OTNGNSwgMHgzMjVBLCAweDkzRjYsIDB4MzI2OSwgMHg5M0Y3LCAweDMyNUMsIDB4OTNGOCwgMHgzMjYzLA0KLSAgICAweDkzRjksIDB4MzE1MSwgMHg5M0ZBLCAweDMyNjEsIDB4OTNGQiwgMHgzMjUwLCAweDkzRkMsIDB4MzI2NywNCi0gICAgMHg5M0ZELCAweDE2NTQsIDB4OTNGRSwgMHgzMjU0LCAweDkzRkYsIDB4MzI2NiwgMHg5NDAwLCAweDMyNUIsDQotICAgIDB4OTQwMywgMHgxNjUzLCAweDk0MDYsIDB4MzI2QiwgMHg5NDA3LCAweDMyNUQsIDB4OTQwOSwgMHgzMjYyLA0KLSAgICAweDk0MEEsIDB4MzI2NSwgMHg5NDBCLCAweDMyNEUsIDB4OTQwQywgMHgzMjY4LCAweDk0MEQsIDB4MzI1OSwNCi0gICAgMHg5NDBFLCAweDMyNUUsIDB4OTQwRiwgMHgzMjUyLCAweDk0MTAsIDB4MzI1NiwgMHg5NDExLCAweDMyNkEsDQotICAgIDB4OTQxMiwgMHgzMjYwLCAweDk0MTMsIDB4MzI0RiwgMHg5NDE0LCAweDMyNTMsIDB4OTQxNSwgMHgzMjU1LA0KLSAgICAweDk0MTYsIDB4MzI1RiwgMHg5NDE4LCAweDE2NTIsIDB4OTQxOSwgMHgzMjU4LCAweDk0MjAsIDB4MzI1MSwNCi0gICAgMHg5NDI4LCAweDMyNTcsIDB4OTQyOSwgMHgzMzI1LCAweDk0MkEsIDB4MzMyOSwgMHg5NDJCLCAweDE2OUYsDQotICAgIDB4OTQyQywgMHgzMzJCLCAweDk0MkUsIDB4MTY5OSwgMHg5NDMwLCAweDMzMjcsIDB4OTQzMSwgMHgzMzJELA0KLSAgICAweDk0MzIsIDB4MTY5RSwgMHg5NDMzLCAweDE2OUEsIDB4OTQzNSwgMHgxNjlCLCAweDk0MzYsIDB4MzMyNCwNCi0gICAgMHg5NDM3LCAweDMzMkEsIDB4OTQzOCwgMHgxNjlELCAweDk0MzksIDB4MzMyOCwgMHg5NDNBLCAweDE2OUMsDQotICAgIDB4OTQzQiwgMHgzMzIzLCAweDk0M0MsIDB4MzI2NCwgMHg5NDNELCAweDMzMjYsIDB4OTQzRiwgMHgzMzIyLA0KLSAgICAweDk0NDAsIDB4MzMyQywgMHg5NDQ0LCAweDE2REYsIDB4OTQ0NSwgMHgzM0NELCAweDk0NDYsIDB4MzNEMCwNCi0gICAgMHg5NDQ3LCAweDMzQ0MsIDB4OTQ0OCwgMHgzM0NFLCAweDk0NDksIDB4MzNDRiwgMHg5NDRBLCAweDMzQzksDQotICAgIDB4OTQ0QiwgMHgzM0NBLCAweDk0NEMsIDB4MzNDNywgMHg5NDRGLCAweDMzQ0IsIDB4OTQ1MCwgMHgzM0M4LA0KLSAgICAweDk0NTEsIDB4MTZFMCwgMHg5NDUyLCAweDE2RTEsIDB4OTQ1NSwgMHgzNDQ4LCAweDk0NTcsIDB4MzQ0QSwNCi0gICAgMHg5NDVELCAweDM0NDksIDB4OTQ1RSwgMHgzNDRCLCAweDk0NjAsIDB4MTcwRSwgMHg5NDYyLCAweDM0NDcsDQotICAgIDB4OTQ2MywgMHgxNzBELCAweDk0NjQsIDB4MTcwRiwgMHg5NDY4LCAweDM0QTYsIDB4OTQ2OSwgMHgzNEE3LA0KLSAgICAweDk0NkEsIDB4MTczMSwgMHg5NDZCLCAweDM0QTUsIDB4OTQ2RCwgMHgzNEVELCAweDk0NkUsIDB4MzRFQywNCi0gICAgMHg5NDZGLCAweDM0RUUsIDB4OTQ3MCwgMHgxNzRDLCAweDk0NzEsIDB4MzRFRiwgMHg5NDcyLCAweDE3NEIsDQotICAgIDB4OTQ3MywgMHgzNEYwLCAweDk0NzQsIDB4MzUwQywgMHg5NDc1LCAweDM1MEYsIDB4OTQ3NiwgMHgzNTBFLA0KLSAgICAweDk0NzcsIDB4MTc1NSwgMHg5NDc4LCAweDM1MEQsIDB4OTQ3QywgMHgxNzVGLCAweDk0N0QsIDB4MTc1RCwNCi0gICAgMHg5NDdFLCAweDE3NUUsIDB4OTQ3RiwgMHgxNzY0LCAweDk0ODAsIDB4MzUzOSwgMHg5NDgxLCAweDM1M0EsDQotICAgIDB4OTQ4MiwgMHgzNTM4LCAweDk0ODMsIDB4MzU0MCwgMHg5NTc3LCAweDA2OTcsIDB4OTU3QSwgMHgyMEExLA0KLSAgICAweDk1N0IsIDB4MjM0QSwgMHg5NTdDLCAweDJBQjEsIDB4OTU3RCwgMHgzMTYyLCAweDk1ODAsIDB4MDY5OCwNCi0gICAgMHg5NTgyLCAweDA4MjEsIDB4OTU4MywgMHgwOUVBLCAweDk1ODYsIDB4MjBBMiwgMHg5NTg4LCAweDIwQTMsDQotICAgIDB4OTU4OSwgMHgwQkQwLCAweDk1OEIsIDB4MEQ5QSwgMHg5NThDLCAweDIzNEMsIDB4OTU4RCwgMHgyMzRCLA0KLSAgICAweDk1OEUsIDB4MEQ5RSwgMHg5NThGLCAweDBEOTksIDB4OTU5MCwgMHgyMzRELCAweDk1OTEsIDB4MEQ5QiwNCi0gICAgMHg5NTkyLCAweDBEOUQsIDB4OTU5MywgMHgwRDlDLCAweDk1OTQsIDB4MEQ5OCwgMHg5NTk4LCAweDBGNUMsDQotICAgIDB4OTU5QiwgMHgyNUYzLCAweDk1OUMsIDB4MjVGMSwgMHg5NTlFLCAweDI1RjIsIDB4OTU5RiwgMHgyNUYwLA0KLSAgICAweDk1QTEsIDB4MTBERiwgMHg5NUEzLCAweDEwRTIsIDB4OTVBNCwgMHgxMEU0LCAweDk1QTUsIDB4MTBFMywNCi0gICAgMHg5NUE4LCAweDEwRTAsIDB4OTVBOSwgMHgxMEUxLCAweDk1QUIsIDB4MkFCMywgMHg5NUFDLCAweDJBQjIsDQotICAgIDB4OTVBRCwgMHgxMjYwLCAweDk1QUUsIDB4MkFCNCwgMHg5NUIwLCAweDJBQjUsIDB4OTVCMSwgMHgxMjYxLA0KLSAgICAweDk1QjUsIDB4MkNGMCwgMHg5NUI2LCAweDJDRUUsIDB4OTVCNywgMHgyRUFELCAweDk1QjksIDB4MkNFQywNCi0gICAgMHg5NUJBLCAweDJDRUQsIDB4OTVCQiwgMHgxMzg1LCAweDk1QkMsIDB4MkNFOSwgMHg5NUJELCAweDJDRjEsDQotICAgIDB4OTVCRSwgMHgyQ0VCLCAweDk1QkYsIDB4MkNFRiwgMHg5NUMwLCAweDJFQTksIDB4OTVDMywgMHgyRUFCLA0KLSAgICAweDk1QzUsIDB4MkVBQywgMHg5NUM2LCAweDE0QUUsIDB4OTVDNywgMHgyRUE4LCAweDk1QzgsIDB4MTRBRCwNCi0gICAgMHg5NUM5LCAweDJFQUEsIDB4OTVDQSwgMHgxNEFBLCAweDk1Q0IsIDB4MTRBQiwgMHg5NUNDLCAweDE0QUMsDQotICAgIDB4OTVDRCwgMHgyQ0VBLCAweDk1RDAsIDB4MTU0QywgMHg5NUQxLCAweDMwMUYsIDB4OTVEMiwgMHgzMDFELA0KLSAgICAweDk1RDMsIDB4MzAxRSwgMHg5NUQ0LCAweDE1NEEsIDB4OTVENSwgMHgxNTRELCAweDk1RDYsIDB4MTU0QiwNCi0gICAgMHg5NURBLCAweDMxNjMsIDB4OTVEQiwgMHgzMTY0LCAweDk1REMsIDB4MTVFQiwgMHg5NURFLCAweDMyNkMsDQotICAgIDB4OTVERiwgMHgzMjZFLCAweDk1RTAsIDB4MzI2RCwgMHg5NUUxLCAweDE2NTUsIDB4OTVFMiwgMHgxNkEwLA0KLSAgICAweDk1RTMsIDB4MzMzMCwgMHg5NUU0LCAweDMzMkYsIDB4OTVFNSwgMHgzMzJFLCAweDk2MUMsIDB4MDY5OSwNCi0gICAgMHg5NjFFLCAweDE3QjQsIDB4OTYyMCwgMHgxODIxLCAweDk2MjEsIDB4MDQxNCwgMHg5NjIyLCAweDE4MUYsDQotICAgIDB4OTYyMywgMHgxODIyLCAweDk2MjQsIDB4MTgyMCwgMHg5NjI4LCAweDE4RjEsIDB4OTYyQSwgMHgwNTI2LA0KLSAgICAweDk2MkMsIDB4MDUyNywgMHg5NjJELCAweDE4RjMsIDB4OTYyRSwgMHgwNTI0LCAweDk2MkYsIDB4MThGMiwNCi0gICAgMHg5NjMwLCAweDE4RjAsIDB4OTYzMSwgMHgwNTI1LCAweDk2MzIsIDB4MDUyMywgMHg5NjM5LCAweDFBNTUsDQotICAgIDB4OTYzQSwgMHgxQTU4LCAweDk2M0IsIDB4MDY5QywgMHg5NjNDLCAweDFBNTcsIDB4OTYzRCwgMHgxQTU2LA0KLSAgICAweDk2M0YsIDB4MDY5QiwgMHg5NjQwLCAweDA2OUEsIDB4OTY0MiwgMHgwNjlFLCAweDk2NDMsIDB4MUE1OSwNCi0gICAgMHg5NjQ0LCAweDA2OUQsIDB4OTY0QSwgMHgxQzFBLCAweDk2NEIsIDB4MDgyMywgMHg5NjRDLCAweDA4MjQsDQotICAgIDB4OTY0RCwgMHgwODI1LCAweDk2NEUsIDB4MUMxQiwgMHg5NjRGLCAweDFDMTcsIDB4OTY1MCwgMHgwODIyLA0KLSAgICAweDk2NTEsIDB4MUMxOCwgMHg5NjUzLCAweDFDMTksIDB4OTY1NCwgMHgxQzE2LCAweDk2NTgsIDB4MDlGMSwNCi0gICAgMHg5NjVCLCAweDA5RUUsIDB4OTY1QywgMHgxRTJGLCAweDk2NUQsIDB4MDlFRiwgMHg5NjVFLCAweDA5RjIsDQotICAgIDB4OTY1RiwgMHgxRTMwLCAweDk2NjEsIDB4MDlFRCwgMHg5NjYyLCAweDA5RUIsIDB4OTY2MywgMHgwOUVDLA0KLSAgICAweDk2NjQsIDB4MDlGMCwgMHg5NjZBLCAweDBCRDEsIDB4OTY2QiwgMHgyMEE2LCAweDk2NkMsIDB4MEJEOSwNCi0gICAgMHg5NjZELCAweDIwQTUsIDB4OTY2RiwgMHgyMEE4LCAweDk2NzAsIDB4MEJENSwgMHg5NjcxLCAweDIwQTcsDQotICAgIDB4OTY3MiwgMHgwREE2LCAweDk2NzMsIDB4MEJEMywgMHg5Njc0LCAweDBCRDYsIDB4OTY3NSwgMHgwQkQyLA0KLSAgICAweDk2NzYsIDB4MEJENywgMHg5Njc3LCAweDBCRDgsIDB4OTY3OCwgMHgwQkQ0LCAweDk2N0MsIDB4MjBBNCwNCi0gICAgMHg5NjdELCAweDBEQTIsIDB4OTY3RSwgMHgyMzRGLCAweDk2ODAsIDB4MjM1MywgMHg5NjgzLCAweDIzNTIsDQotICAgIDB4OTY4NCwgMHgwREE3LCAweDk2ODUsIDB4MERBMywgMHg5Njg2LCAweDBEQTQsIDB4OTY4NywgMHgyMzRFLA0KLSAgICAweDk2ODgsIDB4MjM1MCwgMHg5Njg5LCAweDIzNTEsIDB4OTY4QSwgMHgwRDlGLCAweDk2OEIsIDB4MERBMSwNCi0gICAgMHg5NjhELCAweDBEQTUsIDB4OTY4RSwgMHgwREEwLCAweDk2OTEsIDB4MjVGNiwgMHg5NjkyLCAweDI1RjQsDQotICAgIDB4OTY5MywgMHgyNUY1LCAweDk2OTQsIDB4MEY1RSwgMHg5Njk1LCAweDBGNUYsIDB4OTY5NywgMHgyNUY3LA0KLSAgICAweDk2OTgsIDB4MEY1RCwgMHg5Njk5LCAweDEwRTUsIDB4OTY5QiwgMHgxMEU3LCAweDk2OUMsIDB4MTBFNiwNCi0gICAgMHg5NjlFLCAweDI4NTIsIDB4OTZBMSwgMHgyODUzLCAweDk2QTIsIDB4MkFCNywgMHg5NkE0LCAweDJBQjYsDQotICAgIDB4OTZBNywgMHgxMzg2LCAweDk2QTgsIDB4MTM4NywgMHg5NkE5LCAweDJDRjIsIDB4OTZBQSwgMHgxMzg4LA0KLSAgICAweDk2QUMsIDB4MkVCMCwgMHg5NkFFLCAweDJFQUUsIDB4OTZCMCwgMHgyRUFGLCAweDk2QjEsIDB4MTRBRiwNCi0gICAgMHg5NkIzLCAweDMwMjAsIDB4OTZCNCwgMHgxNUVDLCAweDk2QjYsIDB4MDIzMSwgMHg5NkI4LCAweDE0QjAsDQotICAgIDB4OTZCOSwgMHgwNjlGLCAweDk2QkIsIDB4MDlGMywgMHg5NkJDLCAweDFFMzEsIDB4OTZCRiwgMHgyMEE5LA0KLSAgICAweDk2QzAsIDB4MEJEQSwgMHg5NkMxLCAweDBEQTgsIDB4OTZDMiwgMHgyMzU0LCAweDk2QzMsIDB4MjM1NiwNCi0gICAgMHg5NkM0LCAweDBEQUEsIDB4OTZDNSwgMHgwREE5LCAweDk2QzYsIDB4MERBQiwgMHg5NkM3LCAweDBEQUMsDQotICAgIDB4OTZDOCwgMHgyMzU1LCAweDk2QzksIDB4MEY2MiwgMHg5NkNBLCAweDBGNjMsIDB4OTZDQiwgMHgwRjYxLA0KLSAgICAweDk2Q0MsIDB4MTBFOCwgMHg5NkNELCAweDBGNjAsIDB4OTZDRSwgMHgyNUY4LCAweDk2RDIsIDB4MTBFOSwNCi0gICAgMHg5NkQzLCAweDJBQjgsIDB4OTZENCwgMHgyQ0YzLCAweDk2RDUsIDB4MTM4OSwgMHg5NkQ2LCAweDE0QjEsDQotICAgIDB4OTZENywgMHgzMDIxLCAweDk2RDgsIDB4MzAyNSwgMHg5NkQ5LCAweDE1NTAsIDB4OTZEQSwgMHgzMDIyLA0KLSAgICAweDk2REIsIDB4MTU1MSwgMHg5NkRDLCAweDE1NEYsIDB4OTZERCwgMHgzMDI2LCAweDk2REUsIDB4MTU1MiwNCi0gICAgMHg5NkRGLCAweDMwMjQsIDB4OTZFMSwgMHgzMTY1LCAweDk2RTIsIDB4MTU0RSwgMHg5NkUzLCAweDE1RUQsDQotICAgIDB4OTZFNSwgMHgzNEE4LCAweDk2RTgsIDB4MDZBMCwgMHg5NkU5LCAweDBCREMsIDB4OTZFQSwgMHgwQkRCLA0KLSAgICAweDk2RUYsIDB4MERBRCwgMHg5NkYwLCAweDIzNTgsIDB4OTZGMSwgMHgyMzU3LCAweDk2RjIsIDB4MERBRSwNCi0gICAgMHg5NkY1LCAweDI1RkMsIDB4OTZGNiwgMHgwRjY3LCAweDk2RjcsIDB4MEY2NCwgMHg5NkY4LCAweDI1RkIsDQotICAgIDB4OTZGOSwgMHgwRjY2LCAweDk2RkEsIDB4MjVGOSwgMHg5NkZCLCAweDBGNjUsIDB4OTZGRCwgMHgyNUZBLA0KLSAgICAweDk2RkYsIDB4Mjg1NCwgMHg5NzAwLCAweDEwRUEsIDB4OTcwMiwgMHgyQUJCLCAweDk3MDQsIDB4MTI2MiwNCi0gICAgMHg5NzA1LCAweDJBQjksIDB4OTcwNiwgMHgxMjYzLCAweDk3MDcsIDB4MTI2NCwgMHg5NzA4LCAweDJBQkEsDQotICAgIDB4OTcwOSwgMHgxMjY1LCAweDk3MEIsIDB4MkNGNCwgMHg5NzBELCAweDEzOEQsIDB4OTcwRSwgMHgxMzhBLA0KLSAgICAweDk3MEYsIDB4MTM4RiwgMHg5NzEwLCAweDJDRjYsIDB4OTcxMSwgMHgxMzhCLCAweDk3MTIsIDB4MkNGNSwNCi0gICAgMHg5NzEzLCAweDEzOEUsIDB4OTcxNiwgMHgxMzhDLCAweDk3MTgsIDB4MkVCMywgMHg5NzE5LCAweDJFQjUsDQotICAgIDB4OTcxQywgMHgxNEIyLCAweDk3MUQsIDB4MkVCNCwgMHg5NzFFLCAweDE0QjMsIDB4OTcxRiwgMHgyRUIyLA0KLSAgICAweDk3MjAsIDB4MkVCMSwgMHg5NzIyLCAweDMwMjgsIDB4OTcyMywgMHgzMDI3LCAweDk3MjQsIDB4MTU1MywNCi0gICAgMHg5NzI1LCAweDMwMjksIDB4OTcyNiwgMHgzMTZBLCAweDk3MjcsIDB4MTVFRiwgMHg5NzI4LCAweDMxNjksDQotICAgIDB4OTcyOSwgMHgzMTY2LCAweDk3MkEsIDB4MTVFRSwgMHg5NzJCLCAweDMxNjcsIDB4OTcyQywgMHgzMTY4LA0KLSAgICAweDk3MkUsIDB4MzI2RiwgMHg5NzJGLCAweDMyNzAsIDB4OTczMCwgMHgxNjU2LCAweDk3MzIsIDB4MTZBMywNCi0gICAgMHg5NzM1LCAweDMzMzEsIDB4OTczOCwgMHgxNkExLCAweDk3MzksIDB4MTZBMiwgMHg5NzNBLCAweDMzMzIsDQotICAgIDB4OTczRCwgMHgxNkUyLCAweDk3M0UsIDB4MTZFMywgMHg5NzNGLCAweDMzRDEsIDB4OTc0MiwgMHgxNzMyLA0KLSAgICAweDk3NDMsIDB4MzRBQSwgMHg5NzQ0LCAweDE3MzQsIDB4OTc0NiwgMHgzNEE5LCAweDk3NDcsIDB4MzRBQiwNCi0gICAgMHg5NzQ4LCAweDE3MzMsIDB4OTc0OSwgMHgzNEYxLCAweDk3NEIsIDB4MzUyNiwgMHg5NzUyLCAweDA2QTEsDQotICAgIDB4OTc1NiwgMHgwRjY4LCAweDk3NTgsIDB4Mjg1NSwgMHg5NzVBLCAweDJBQkMsIDB4OTc1QiwgMHgxMzkwLA0KLSAgICAweDk3NUMsIDB4MTM5MSwgMHg5NzVFLCAweDA2QTIsIDB4OTc2MCwgMHgxMjY2LCAweDk3NjEsIDB4MTVGMCwNCi0gICAgMHg5NzYyLCAweDA4MjYsIDB4OTc2NiwgMHgxMzkyLCAweDk3NjgsIDB4MTcxMCwgMHg5NzY5LCAweDA4MjcsDQotICAgIDB4OTc2QSwgMHgyMEFBLCAweDk3NkMsIDB4MjM1OSwgMHg5NzZFLCAweDIzNUIsIDB4OTc3MCwgMHgyMzVBLA0KLSAgICAweDk3NzIsIDB4MjYwMCwgMHg5NzczLCAweDI1RkQsIDB4OTc3NCwgMHgwRjY5LCAweDk3NzYsIDB4MEY2QSwNCi0gICAgMHg5Nzc3LCAweDI1RkUsIDB4OTc3OCwgMHgyNUZGLCAweDk3N0EsIDB4Mjg1NywgMHg5NzdCLCAweDI4NUMsDQotICAgIDB4OTc3QywgMHgxMEVCLCAweDk3N0QsIDB4Mjg1NiwgMHg5NzdFLCAweDI4NTgsIDB4OTc3RiwgMHgyODVGLA0KLSAgICAweDk3ODAsIDB4Mjg1QSwgMHg5NzgxLCAweDI4NUUsIDB4OTc4MiwgMHgyODVCLCAweDk3ODMsIDB4Mjg1OSwNCi0gICAgMHg5Nzg0LCAweDI4NUQsIDB4OTc4NSwgMHgxMEVDLCAweDk3ODgsIDB4MkFCRiwgMHg5NzhBLCAweDJBQkQsDQotICAgIDB4OTc4QiwgMHgxMjY4LCAweDk3OEQsIDB4MTI2NywgMHg5NzhFLCAweDJBQkUsIDB4OTc4RiwgMHgxMjY5LA0KLSAgICAweDk3OTQsIDB4MkNGOSwgMHg5Nzk3LCAweDJDRjgsIDB4OTc5OCwgMHgxMzkzLCAweDk3OTksIDB4MkNGNywNCi0gICAgMHg5NzlBLCAweDJFQjYsIDB4OTc5QywgMHgyRUI4LCAweDk3OUQsIDB4MkVCQSwgMHg5NzlFLCAweDJFQjksDQotICAgIDB4OTdBMCwgMHgxNEI0LCAweDk3QTEsIDB4MkVCNywgMHg5N0EyLCAweDMwMzAsIDB4OTdBMywgMHgxNTU0LA0KLSAgICAweDk3QTQsIDB4MzAyRSwgMHg5N0E1LCAweDMwMzEsIDB4OTdBNiwgMHgxNTU1LCAweDk3QTgsIDB4MzAyQywNCi0gICAgMHg5N0FBLCAweDMwMkYsIDB4OTdBQiwgMHgzMDJELCAweDk3QUMsIDB4MzAyQSwgMHg5N0FELCAweDE1NTYsDQotICAgIDB4OTdBRSwgMHgzMDJCLCAweDk3QjMsIDB4MzE2QiwgMHg5N0I2LCAweDMxNkQsIDB4OTdCNywgMHgzMTZDLA0KLSAgICAweDk3QjksIDB4MzI3MSwgMHg5N0JCLCAweDMyNzIsIDB4OTdCRiwgMHgzMzMzLCAweDk3QzEsIDB4MTZFNSwNCi0gICAgMHg5N0MzLCAweDE2RTQsIDB4OTdDNCwgMHgzNDRDLCAweDk3QzUsIDB4MzQ0RCwgMHg5N0M2LCAweDE3MzUsDQotICAgIDB4OTdDNywgMHgzNEFDLCAweDk3QzksIDB4MTc1NiwgMHg5N0NCLCAweDA4MjgsIDB4OTdDQywgMHgwREFGLA0KLSAgICAweDk3Q0QsIDB4Mjg2MSwgMHg5N0NFLCAweDI4NjAsIDB4OTdDRiwgMHgyQUMxLCAweDk3RDAsIDB4MkFDMCwNCi0gICAgMHg5N0QzLCAweDE0QjUsIDB4OTdENCwgMHgyRUJDLCAweDk3RDUsIDB4MkVCQiwgMHg5N0Q2LCAweDMwMzQsDQotICAgIDB4OTdENywgMHgzMDMyLCAweDk3RDgsIDB4MzAzNSwgMHg5N0Q5LCAweDMwMzMsIDB4OTdEQywgMHgxNUYxLA0KLSAgICAweDk3REQsIDB4MzE2RSwgMHg5N0RFLCAweDMxNkYsIDB4OTdERiwgMHgzMTcwLCAweDk3RTEsIDB4MzMzNCwNCi0gICAgMHg5N0UzLCAweDMzRDIsIDB4OTdFNSwgMHgzNEFELCAweDk3RUQsIDB4MDgyOSwgMHg5N0YwLCAweDJDRkEsDQotICAgIDB4OTdGMSwgMHgyRUJELCAweDk3RjMsIDB4MDgyQSwgMHg5N0Y2LCAweDEwRUQsIDB4OTdGOCwgMHgyQ0ZCLA0KLSAgICAweDk3RjksIDB4MTU1NywgMHg5N0ZBLCAweDMwMzYsIDB4OTdGQiwgMHgxNUYyLCAweDk3RkQsIDB4MzI3MywNCi0gICAgMHg5N0ZFLCAweDMyNzQsIDB4OTdGRiwgMHgxNkE0LCAweDk4MDAsIDB4MzQ0RSwgMHg5ODAxLCAweDA4MkIsDQotICAgIDB4OTgwMiwgMHgwQkRGLCAweDk4MDMsIDB4MEJFMCwgMHg5ODA0LCAweDIwQUIsIDB4OTgwNSwgMHgwREIwLA0KLSAgICAweDk4MDYsIDB4MERCMSwgMHg5ODA3LCAweDIzNUMsIDB4OTgwOCwgMHgwREIyLCAweDk4MEEsIDB4MEY2RSwNCi0gICAgMHg5ODBDLCAweDBGNzAsIDB4OTgwRCwgMHgyNjAyLCAweDk4MEUsIDB4MjYwMywgMHg5ODBGLCAweDI2MDEsDQotICAgIDB4OTgxMCwgMHgwRjZCLCAweDk4MTEsIDB4MEY2QywgMHg5ODEyLCAweDBGNkYsIDB4OTgxMywgMHgwRjZELA0KLSAgICAweDk4MTYsIDB4Mjg2MiwgMHg5ODE3LCAweDEwRUUsIDB4OTgxOCwgMHgxMEVGLCAweDk4MUIsIDB4MkFDOCwNCi0gICAgMHg5ODFDLCAweDEyNkMsIDB4OTgxRCwgMHgyQUMzLCAweDk4MUUsIDB4MkFDMiwgMHg5ODIwLCAweDJBQzcsDQotICAgIDB4OTgyMSwgMHgxMjZBLCAweDk4MjQsIDB4MTM5QSwgMHg5ODI2LCAweDJBQzQsIDB4OTgyNywgMHgyQUM5LA0KLSAgICAweDk4MjgsIDB4MkFDNiwgMHg5ODI5LCAweDJBQzUsIDB4OTgyQiwgMHgxMjZCLCAweDk4MkQsIDB4MTM5OCwNCi0gICAgMHg5ODJGLCAweDJDRkQsIDB4OTgzMCwgMHgxMzk0LCAweDk4MzIsIDB4MkNGRSwgMHg5ODM1LCAweDJDRkMsDQotICAgIDB4OTgzNywgMHgxMzk3LCAweDk4MzgsIDB4MTM5NSwgMHg5ODM5LCAweDEzOTksIDB4OTgzQiwgMHgxMzk2LA0KLSAgICAweDk4NDEsIDB4MkVCRSwgMHg5ODQzLCAweDJFQzMsIDB4OTg0NCwgMHgyRUJGLCAweDk4NDUsIDB4MkVDMiwNCi0gICAgMHg5ODQ2LCAweDE0QjYsIDB4OTg0OCwgMHgyREYyLCAweDk4NDksIDB4MkVDMSwgMHg5ODRBLCAweDJFQzAsDQotICAgIDB4OTg0QywgMHgxNTVBLCAweDk4NEQsIDB4MTU1OCwgMHg5ODRFLCAweDE1NUIsIDB4OTg0RiwgMHgxNTU5LA0KLSAgICAweDk4NTAsIDB4MzAzNywgMHg5ODUxLCAweDMwMzgsIDB4OTg1MiwgMHgzMDM5LCAweDk4NTMsIDB4MTU1QywNCi0gICAgMHg5ODU3LCAweDMxNzQsIDB4OTg1OCwgMHgxNUY0LCAweDk4NTksIDB4MzE3MiwgMHg5ODVCLCAweDE1RjUsDQotICAgIDB4OTg1QywgMHgzMTcxLCAweDk4NUQsIDB4MzE3MywgMHg5ODVFLCAweDE1RjMsIDB4OTg1RiwgMHgzMjc4LA0KLSAgICAweDk4NjAsIDB4MzI3NSwgMHg5ODYyLCAweDMyNzYsIDB4OTg2MywgMHgzMjc3LCAweDk4NjQsIDB4MzMzNSwNCi0gICAgMHg5ODY1LCAweDE2QTYsIDB4OTg2NywgMHgxNkE1LCAweDk4NjksIDB4MzNENCwgMHg5ODZBLCAweDMzRDMsDQotICAgIDB4OTg2QiwgMHgxNkU2LCAweDk4NkYsIDB4MTcxMSwgMHg5ODcwLCAweDE3MzYsIDB4OTg3MSwgMHgxNzRELA0KLSAgICAweDk4NzIsIDB4MzRGMiwgMHg5ODczLCAweDM1MjcsIDB4OTg3NCwgMHgzNTI4LCAweDk4QTgsIDB4MDgyQywNCi0gICAgMHg5OEE5LCAweDIzNUQsIDB4OThBQywgMHgyNjA0LCAweDk4QUQsIDB4Mjg2MywgMHg5OEFFLCAweDI4NjQsDQotICAgIDB4OThBRiwgMHgxMEYwLCAweDk4QjEsIDB4MTBGMSwgMHg5OEIyLCAweDJBQ0EsIDB4OThCMywgMHgxMjZELA0KLSAgICAweDk4QjYsIDB4MTRCNywgMHg5OEI4LCAweDMwM0EsIDB4OThCQSwgMHgxNTVELCAweDk4QkIsIDB4MzE3NywNCi0gICAgMHg5OEJDLCAweDE1RjYsIDB4OThCRCwgMHgzMTc2LCAweDk4QkUsIDB4MzE3OCwgMHg5OEJGLCAweDMxNzUsDQotICAgIDB4OThDMCwgMHgzMzM4LCAweDk4QzEsIDB4MzI3OSwgMHg5OEMyLCAweDMyN0EsIDB4OThDNCwgMHgxNjU3LA0KLSAgICAweDk4QzYsIDB4MzMzNywgMHg5OEM5LCAweDMzMzYsIDB4OThDQiwgMHgzM0Q1LCAweDk4Q0MsIDB4MzUyOSwNCi0gICAgMHg5OERCLCAweDA4MkQsIDB4OThERiwgMHgwODJFLCAweDk4RTIsIDB4MDlGNCwgMHg5OEUzLCAweDFFMzIsDQotICAgIDB4OThFNSwgMHgyMEFDLCAweDk4RTcsIDB4MERCMywgMHg5OEU5LCAweDBEQjYsIDB4OThFQSwgMHgwREI0LA0KLSAgICAweDk4RUIsIDB4MjM1RSwgMHg5OEVELCAweDBEQjgsIDB4OThFRiwgMHgwREI1LCAweDk4RjIsIDB4MERCNywNCi0gICAgMHg5OEY0LCAweDBGNzIsIDB4OThGNiwgMHgyNjA1LCAweDk4RjksIDB4MjYwNiwgMHg5OEZBLCAweDJBQ0MsDQotICAgIDB4OThGQywgMHgwRjcxLCAweDk4RkQsIDB4MEY3MywgMHg5OEZFLCAweDBGNzQsIDB4OTkwMCwgMHgyODY2LA0KLSAgICAweDk5MDIsIDB4Mjg2NSwgMHg5OTAzLCAweDEwRjIsIDB4OTkwNSwgMHgxMEYzLCAweDk5MDcsIDB4Mjg2NywNCi0gICAgMHg5OTA4LCAweDJBQ0IsIDB4OTkwOSwgMHgxMEY1LCAweDk5MEEsIDB4MTI2RSwgMHg5OTBDLCAweDEwRjQsDQotICAgIDB4OTkxMCwgMHgxMzlCLCAweDk5MTEsIDB4MkFDRCwgMHg5OTEyLCAweDEyNzAsIDB4OTkxMywgMHgxMjZGLA0KLSAgICAweDk5MTQsIDB4MkFDRSwgMHg5OTE1LCAweDJBRDEsIDB4OTkxNiwgMHgyQUNGLCAweDk5MTcsIDB4MkFEMCwNCi0gICAgMHg5OTE4LCAweDEyNzEsIDB4OTkxQSwgMHgxM0EwLCAweDk5MUIsIDB4MTM5RSwgMHg5OTFFLCAweDEzOUQsDQotICAgIDB4OTkxRiwgMHgyRDAwLCAweDk5MjEsIDB4MTM5RiwgMHg5OTI0LCAweDJDRkYsIDB4OTkyNSwgMHgyRUM0LA0KLSAgICAweDk5MjcsIDB4MkQwMSwgMHg5OTI4LCAweDEzOUMsIDB4OTkyOSwgMHgyRDAyLCAweDk5MkEsIDB4MkVDNywNCi0gICAgMHg5OTJCLCAweDJFQzUsIDB4OTkyQywgMHgyRUM2LCAweDk5MkQsIDB4MkVDQiwgMHg5OTJFLCAweDE1NjEsDQotICAgIDB4OTkyRiwgMHgyRUNBLCAweDk5MzAsIDB4MkVDRCwgMHg5OTMxLCAweDJFQ0MsIDB4OTkzMiwgMHgyRUM5LA0KLSAgICAweDk5MzMsIDB4MkVDOCwgMHg5OTM1LCAweDE0QjgsIDB4OTkzQSwgMHgzMDNELCAweDk5M0MsIDB4MzAzQywNCi0gICAgMHg5OTNELCAweDE1NjAsIDB4OTkzRSwgMHgxNTVFLCAweDk5M0YsIDB4MTU1RiwgMHg5OTQxLCAweDMwM0IsDQotICAgIDB4OTk0MywgMHgzMTdCLCAweDk5NDUsIDB4MTVGNywgMHg5OTQ3LCAweDMxN0EsIDB4OTk0OCwgMHgzMTc5LA0KLSAgICAweDk5NDksIDB4MTVGOCwgMHg5OTRCLCAweDMyN0YsIDB4OTk0QywgMHgzMjdFLCAweDk5NEUsIDB4MzI3QywNCi0gICAgMHg5OTUwLCAweDMyN0IsIDB4OTk1MSwgMHgxNjU5LCAweDk5NTIsIDB4MTY1OCwgMHg5OTUzLCAweDMyODAsDQotICAgIDB4OTk1NCwgMHgzM0Q2LCAweDk5NTUsIDB4MTZFNywgMHg5OTU2LCAweDMzM0EsIDB4OTk1NywgMHgxNkE3LA0KLSAgICAweDk5NTgsIDB4MzMzOSwgMHg5OTU5LCAweDMyN0QsIDB4OTk1QiwgMHgzM0Q3LCAweDk5NUMsIDB4MTcxMiwNCi0gICAgMHg5OTVFLCAweDE3NEUsIDB4OTk1RiwgMHgzNEYzLCAweDk5NjEsIDB4MzUyQSwgMHg5OTk2LCAweDA4MkYsDQotICAgIDB4OTk5NywgMHgyMEFELCAweDk5OTgsIDB4MkVDRSwgMHg5OTk5LCAweDA4MzAsIDB4OTk5QywgMHgyODY5LA0KLSAgICAweDk5OUQsIDB4Mjg2OCwgMHg5OTlFLCAweDJEMDMsIDB4OTlBMSwgMHgyRUQwLCAweDk5QTMsIDB4MkVDRiwNCi0gICAgMHg5OUE1LCAweDE1NjIsIDB4OTlBNiwgMHgzMTdDLCAweDk5QTcsIDB4MzE3RCwgMHg5OUE4LCAweDE2NUEsDQotICAgIDB4OTlBQiwgMHgzNTJCLCAweDk5QUMsIDB4MDlGNSwgMHg5OUFELCAweDBEQkEsIDB4OTlBRSwgMHgwREI5LA0KLSAgICAweDk5QUYsIDB4MjYwNywgMHg5OUIwLCAweDI2MDksIDB4OTlCMSwgMHgwRjc2LCAweDk5QjIsIDB4MjYwOCwNCi0gICAgMHg5OUIzLCAweDBGNzUsIDB4OTlCNCwgMHgwRjc3LCAweDk5QjUsIDB4MjYwQSwgMHg5OUI5LCAweDI4NkIsDQotICAgIDB4OTlCQSwgMHgyODZELCAweDk5QkIsIDB4Mjg2QywgMHg5OUJELCAweDI4NkYsIDB4OTlDMSwgMHgxMEY2LA0KLSAgICAweDk5QzIsIDB4Mjg2RSwgMHg5OUMzLCAweDI4NkEsIDB4OTlDNywgMHgyODcwLCAweDk5QzksIDB4MkFEOCwNCi0gICAgMHg5OUNCLCAweDJBREIsIDB4OTlDQywgMHgyQURELCAweDk5Q0QsIDB4MkFEMywgMHg5OUNFLCAweDJBRDcsDQotICAgIDB4OTlDRiwgMHgyQUQ0LCAweDk5RDAsIDB4MTI3MywgMHg5OUQxLCAweDEyNzYsIDB4OTlEMiwgMHgxMjc4LA0KLSAgICAweDk5RDMsIDB4MkFENSwgMHg5OUQ0LCAweDJBRDYsIDB4OTlENSwgMHgxMjc3LCAweDk5RDYsIDB4MkFEOSwNCi0gICAgMHg5OUQ3LCAweDJBREMsIDB4OTlEOCwgMHgyQURBLCAweDk5RDksIDB4MTI3OSwgMHg5OURCLCAweDEyNzUsDQotICAgIDB4OTlEQywgMHgyQUQyLCAweDk5REQsIDB4MTI3MiwgMHg5OURGLCAweDEyNzQsIDB4OTlFMiwgMHgxM0EyLA0KLSAgICAweDk5RTMsIDB4MkQwOSwgMHg5OUU0LCAweDJEMDcsIDB4OTlFNSwgMHgyRDA2LCAweDk5RTcsIDB4MkQwQywNCi0gICAgMHg5OUU5LCAweDJEMEIsIDB4OTlFQSwgMHgyRDBBLCAweDk5RUMsIDB4MkQwNSwgMHg5OUVELCAweDEzQTEsDQotICAgIDB4OTlFRSwgMHgyRDA0LCAweDk5RjAsIDB4MkQwOCwgMHg5OUYxLCAweDEzQTMsIDB4OTlGNCwgMHgyRUQzLA0KLSAgICAweDk5RjYsIDB4MkVENywgMHg5OUY3LCAweDJFRDQsIDB4OTlGOCwgMHgyRUQ2LCAweDk5RjksIDB4MkVENSwNCi0gICAgMHg5OUZBLCAweDJFRDIsIDB4OTlGQiwgMHgyRUQ4LCAweDk5RkMsIDB4MkVEQiwgMHg5OUZELCAweDJFRDksDQotICAgIDB4OTlGRSwgMHgyRURBLCAweDk5RkYsIDB4MTRCQSwgMHg5QTAxLCAweDE0QjksIDB4OUEwMiwgMHgyRUQxLA0KLSAgICAweDlBMDMsIDB4MkVEQywgMHg5QTA0LCAweDMwNDIsIDB4OUEwNSwgMHgzMDQ1LCAweDlBMDYsIDB4MzA0NywNCi0gICAgMHg5QTA3LCAweDMwNDYsIDB4OUEwOSwgMHgzMDQwLCAweDlBMEEsIDB4MzA0NCwgMHg5QTBCLCAweDMwM0YsDQotICAgIDB4OUEwRCwgMHgzMDQxLCAweDlBMEUsIDB4MTU2MywgMHg5QTBGLCAweDMwM0UsIDB4OUExMSwgMHgzMDQzLA0KLSAgICAweDlBMTQsIDB4MzE4QSwgMHg5QTE1LCAweDMxN0YsIDB4OUExNiwgMHgxNUY5LCAweDlBMTksIDB4MTVGQSwNCi0gICAgMHg5QTFBLCAweDMxN0UsIDB4OUExQiwgMHgzMTgzLCAweDlBMUMsIDB4MzE4OSwgMHg5QTFELCAweDMxODEsDQotICAgIDB4OUExRSwgMHgzMTg4LCAweDlBMjAsIDB4MzE4NSwgMHg5QTIyLCAweDMxODQsIDB4OUEyMywgMHgzMTg3LA0KLSAgICAweDlBMjQsIDB4MzE4MiwgMHg5QTI1LCAweDMxODAsIDB4OUEyNywgMHgzMTg2LCAweDlBMjksIDB4MzI4NywNCi0gICAgMHg5QTJBLCAweDMyODUsIDB4OUEyQiwgMHgxNjVCLCAweDlBMkMsIDB4MzI4NCwgMHg5QTJELCAweDMyOEEsDQotICAgIDB4OUEyRSwgMHgzMjg4LCAweDlBMzAsIDB4MTY1QywgMHg5QTMxLCAweDMyODMsIDB4OUEzMiwgMHgzMjgxLA0KLSAgICAweDlBMzQsIDB4MzI4MiwgMHg5QTM1LCAweDE2NUUsIDB4OUEzNiwgMHgzMjg2LCAweDlBMzcsIDB4MTY1RCwNCi0gICAgMHg5QTM4LCAweDMyODksIDB4OUEzOSwgMHgzMzNCLCAweDlBM0EsIDB4MzM0MSwgMHg5QTNELCAweDMzM0MsDQotICAgIDB4OUEzRSwgMHgxNkFCLCAweDlBM0YsIDB4MzM0MiwgMHg5QTQwLCAweDE2QUEsIDB4OUE0MSwgMHgzMzQwLA0KLSAgICAweDlBNDIsIDB4MzMzRiwgMHg5QTQzLCAweDE2QTksIDB4OUE0NCwgMHgzMzNFLCAweDlBNDUsIDB4MTZBOCwNCi0gICAgMHg5QTQ2LCAweDMzM0QsIDB4OUE0OCwgMHgzM0RELCAweDlBNDksIDB4MzNERiwgMHg5QTRBLCAweDMzREUsDQotICAgIDB4OUE0QywgMHgzM0RCLCAweDlBNEQsIDB4MTZFOSwgMHg5QTRFLCAweDMzRDgsIDB4OUE0RiwgMHgzM0RDLA0KLSAgICAweDlBNTAsIDB4MzNFMSwgMHg5QTUyLCAweDMzRTAsIDB4OUE1MywgMHgzM0Q5LCAweDlBNTQsIDB4MzNEQSwNCi0gICAgMHg5QTU1LCAweDE2RTgsIDB4OUE1NiwgMHgzNDRGLCAweDlBNTcsIDB4MTcxNSwgMHg5QTU5LCAweDM0NTAsDQotICAgIDB4OUE1QSwgMHgxNzEzLCAweDlBNUIsIDB4MTcxNCwgMHg5QTVFLCAweDM0QUUsIDB4OUE1RiwgMHgxNzM3LA0KLSAgICAweDlBNjAsIDB4MzUxMCwgMHg5QTYyLCAweDE3NTcsIDB4OUE2NCwgMHgzNTJDLCAweDlBNjUsIDB4MTc1OCwNCi0gICAgMHg5QTY2LCAweDM1MkQsIDB4OUE2NywgMHgzNTJFLCAweDlBNjgsIDB4MzUzQywgMHg5QTY5LCAweDM1M0IsDQotICAgIDB4OUE2QSwgMHgxNzY3LCAweDlBNkIsIDB4MzU0NCwgMHg5QUE4LCAweDA5RjYsIDB4OUFBQiwgMHgyNjBDLA0KLSAgICAweDlBQUQsIDB4MjYwQiwgMHg5QUFGLCAweDEwRjcsIDB4OUFCMCwgMHgxMEY4LCAweDlBQjEsIDB4Mjg3MSwNCi0gICAgMHg5QUIzLCAweDJBREUsIDB4OUFCNCwgMHgyRDBGLCAweDlBQjcsIDB4MTI3QSwgMHg5QUI4LCAweDEzQTQsDQotICAgIDB4OUFCOSwgMHgyRDBELCAweDlBQkIsIDB4MkQxMCwgMHg5QUJDLCAweDEzQTUsIDB4OUFCRSwgMHgyRURELA0KLSAgICAweDlBQkYsIDB4MkQwRSwgMHg5QUMwLCAweDMwNDgsIDB4OUFDMSwgMHgxNTY0LCAweDlBQzIsIDB4MzE4QiwNCi0gICAgMHg5QUM2LCAweDMyOEQsIDB4OUFDNywgMHgzMjhCLCAweDlBQ0EsIDB4MzI4QywgMHg5QUNELCAweDMzNDMsDQotICAgIDB4OUFDRiwgMHgxNkFDLCAweDlBRDAsIDB4MzNFMiwgMHg5QUQxLCAweDE3MTgsIDB4OUFEMiwgMHgxNkVBLA0KLSAgICAweDlBRDMsIDB4MTcxNiwgMHg5QUQ0LCAweDE3MTcsIDB4OUFENSwgMHgzNEFGLCAweDlBRDYsIDB4MTc0RiwNCi0gICAgMHg5QUQ4LCAweDA5RjcsIDB4OUFEQywgMHgzMDQ5LCAweDlBREYsIDB4MUUzMywgMHg5QUUxLCAweDBGNzgsDQotICAgIDB4OUFFMywgMHgyODcyLCAweDlBRTYsIDB4MTBGOSwgMHg5QUU3LCAweDI4NzMsIDB4OUFFQiwgMHgyQUUwLA0KLSAgICAweDlBRUMsIDB4MkFERiwgMHg5QUVELCAweDEzQTcsIDB4OUFFRSwgMHgxMjdCLCAweDlBRUYsIDB4MTI3QywNCi0gICAgMHg5QUYxLCAweDJBRTMsIDB4OUFGMiwgMHgyQUUyLCAweDlBRjMsIDB4MkFFMSwgMHg5QUY2LCAweDJEMTEsDQotICAgIDB4OUFGNywgMHgyRDE0LCAweDlBRjksIDB4MkQxMywgMHg5QUZBLCAweDJEMTIsIDB4OUFGQiwgMHgxM0E2LA0KLSAgICAweDlBRkMsIDB4MkVFMSwgMHg5QUZELCAweDJFREYsIDB4OUFGRSwgMHgyRURFLCAweDlCMDEsIDB4MkVFMCwNCi0gICAgMHg5QjAzLCAweDE1NjUsIDB4OUIwNCwgMHgzMDRCLCAweDlCMDUsIDB4MzA0QywgMHg5QjA2LCAweDE1NjYsDQotICAgIDB4OUIwOCwgMHgzMDRBLCAweDlCMEEsIDB4MzE4RCwgMHg5QjBCLCAweDMxOEMsIDB4OUIwQywgMHgzMThGLA0KLSAgICAweDlCMEQsIDB4MTVGQiwgMHg5QjBFLCAweDMxOEUsIDB4OUIxMCwgMHgzMjhFLCAweDlCMTEsIDB4MzI5MCwNCi0gICAgMHg5QjEyLCAweDMyOEYsIDB4OUIxNSwgMHgzMzQ0LCAweDlCMTYsIDB4MzM0NywgMHg5QjE3LCAweDMzNDUsDQotICAgIDB4OUIxOCwgMHgzMzQ2LCAweDlCMTksIDB4MzNFMywgMHg5QjFBLCAweDE2RUIsIDB4OUIxRSwgMHgzNDUxLA0KLSAgICAweDlCMUYsIDB4MzQ1MiwgMHg5QjIwLCAweDM0NTMsIDB4OUIyMiwgMHgxNzM4LCAweDlCMjMsIDB4MTc1MCwNCi0gICAgMHg5QjI0LCAweDM1MkYsIDB4OUIyNSwgMHgwOUY4LCAweDlCMjcsIDB4MTI3RCwgMHg5QjI4LCAweDEzQTgsDQotICAgIDB4OUIyOSwgMHgzMDRELCAweDlCMkIsIDB4MzNFNCwgMHg5QjJFLCAweDM1MTEsIDB4OUIyRiwgMHgxRTM0LA0KLSAgICAweDlCMzEsIDB4MTc2OCwgMHg5QjMyLCAweDA5RjksIDB4OUIzMywgMHgyRDE1LCAweDlCMzUsIDB4MzA0RSwNCi0gICAgMHg5QjM3LCAweDMxOTAsIDB4OUIzQSwgMHgzMzQ4LCAweDlCM0IsIDB4MzNFNSwgMHg5QjNDLCAweDA5RkEsDQotICAgIDB4OUIzRSwgMHgyODc0LCAweDlCM0YsIDB4Mjg3NSwgMHg5QjQxLCAweDEwRkEsIDB4OUI0MiwgMHgxMEZCLA0KLSAgICAweDlCNDMsIDB4MkFFNSwgMHg5QjQ0LCAweDEyN0YsIDB4OUI0NSwgMHgxMjdFLCAweDlCNDYsIDB4MkFFNCwNCi0gICAgMHg5QjQ4LCAweDJFRTIsIDB4OUI0QSwgMHgzMDRGLCAweDlCNEIsIDB4MzA1MSwgMHg5QjRDLCAweDMwNTAsDQotICAgIDB4OUI0RCwgMHgxNTY5LCAweDlCNEUsIDB4MTU2OCwgMHg5QjRGLCAweDE1NjcsIDB4OUI1MSwgMHgxNkFFLA0KLSAgICAweDlCNTIsIDB4MzM0OSwgMHg5QjU0LCAweDE2QUQsIDB4OUI1NSwgMHgzM0U3LCAweDlCNTYsIDB4MzNFNiwNCi0gICAgMHg5QjU4LCAweDE3MzksIDB4OUI1OSwgMHgzNEIwLCAweDlCNUEsIDB4MEJFMSwgMHg5QjVCLCAweDI2MEQsDQotICAgIDB4OUI1RiwgMHgyODc4LCAweDlCNjAsIDB4Mjg3NiwgMHg5QjYxLCAweDI4NzcsIDB4OUI2NCwgMHgyQUVFLA0KLSAgICAweDlCNjYsIDB4MkFFOSwgMHg5QjY3LCAweDJBRTYsIDB4OUI2OCwgMHgyQUVELCAweDlCNkMsIDB4MkFFRiwNCi0gICAgMHg5QjZGLCAweDEyODEsIDB4OUI3MCwgMHgyQUVDLCAweDlCNzEsIDB4MkFFOCwgMHg5Qjc0LCAweDJBRTcsDQotICAgIDB4OUI3NSwgMHgyQUVCLCAweDlCNzYsIDB4MkFFQSwgMHg5Qjc3LCAweDEyODAsIDB4OUI3QSwgMHgyRDIwLA0KLSAgICAweDlCN0IsIDB4MkQxQiwgMHg5QjdDLCAweDJEMTksIDB4OUI3RCwgMHgyRDIyLCAweDlCN0UsIDB4MkQxQSwNCi0gICAgMHg5QjgwLCAweDJEMTYsIDB4OUI4MiwgMHgyRDFDLCAweDlCODUsIDB4MkQxNywgMHg5Qjg2LCAweDJFRUIsDQotICAgIDB4OUI4NywgMHgyRDE4LCAweDlCODgsIDB4MkQyMywgMHg5QjkwLCAweDJEMUYsIDB4OUI5MSwgMHgxM0E5LA0KLSAgICAweDlCOTIsIDB4MkQxRSwgMHg5QjkzLCAweDJEMUQsIDB4OUI5NSwgMHgyRDIxLCAweDlCOUEsIDB4MkVFMywNCi0gICAgMHg5QjlCLCAweDJFRTYsIDB4OUI5RSwgMHgyRUU1LCAweDlCQTAsIDB4MkVFRCwgMHg5QkExLCAweDJFRTgsDQotICAgIDB4OUJBMiwgMHgyRUVDLCAweDlCQTQsIDB4MkVFQSwgMHg5QkE1LCAweDJFRTksIDB4OUJBNiwgMHgyRUU3LA0KLSAgICAweDlCQTgsIDB4MkVFNCwgMHg5QkFBLCAweDE0QkQsIDB4OUJBQiwgMHgxNEJDLCAweDlCQUQsIDB4MTRCRSwNCi0gICAgMHg5QkFFLCAweDE0QkIsIDB4OUJBRiwgMHgyRUVFLCAweDlCQjUsIDB4MzA1NywgMHg5QkI2LCAweDMwNUEsDQotICAgIDB4OUJCOCwgMHgzMDU4LCAweDlCQjksIDB4MzA1QywgMHg5QkJELCAweDMwNUQsIDB4OUJCRiwgMHgzMDU1LA0KLSAgICAweDlCQzAsIDB4MTU2RSwgMHg5QkMxLCAweDMwNTYsIDB4OUJDMywgMHgzMDU0LCAweDlCQzQsIDB4MzA1QiwNCi0gICAgMHg5QkM2LCAweDMwNTMsIDB4OUJDNywgMHgzMDUyLCAweDlCQzgsIDB4MTU2RCwgMHg5QkM5LCAweDE1NkIsDQotICAgIDB4OUJDQSwgMHgxNTZBLCAweDlCRDMsIDB4MzA1OSwgMHg5QkQ0LCAweDMxOTksIDB4OUJENSwgMHgzMTlGLA0KLSAgICAweDlCRDYsIDB4MTVGRSwgMHg5QkQ3LCAweDMxOUEsIDB4OUJEOSwgMHgzMTlELCAweDlCREEsIDB4MzFBMSwNCi0gICAgMHg5QkRCLCAweDE1RkYsIDB4OUJEQywgMHgzMTlDLCAweDlCREUsIDB4MzE5NCwgMHg5QkUwLCAweDMxOTMsDQotICAgIDB4OUJFMSwgMHgzMUEwLCAweDlCRTIsIDB4MzE5NywgMHg5QkU0LCAweDMxOTUsIDB4OUJFNSwgMHgzMTlFLA0KLSAgICAweDlCRTYsIDB4MzE5NiwgMHg5QkU3LCAweDE1RkQsIDB4OUJFOCwgMHgxNUZDLCAweDlCRUEsIDB4MzE5MSwNCi0gICAgMHg5QkVCLCAweDMxOTIsIDB4OUJFQywgMHgzMTlCLCAweDlCRjAsIDB4MzE5OCwgMHg5QkY3LCAweDMyOTMsDQotICAgIDB4OUJGOCwgMHgzMjk2LCAweDlCRkQsIDB4MTU2QywgMHg5QzA1LCAweDMyOTQsIDB4OUMwNiwgMHgzMjlBLA0KLSAgICAweDlDMDcsIDB4MzI5OCwgMHg5QzA4LCAweDMyOTIsIDB4OUMwOSwgMHgzMjlELCAweDlDMEIsIDB4MzI5MSwNCi0gICAgMHg5QzBELCAweDE2NjAsIDB4OUMwRSwgMHgzMjk5LCAweDlDMTIsIDB4MzI5NSwgMHg5QzEzLCAweDE2NUYsDQotICAgIDB4OUMxNCwgMHgzMjlDLCAweDlDMTcsIDB4MzI5QiwgMHg5QzFDLCAweDMzNEMsIDB4OUMxRCwgMHgzMzRCLA0KLSAgICAweDlDMjEsIDB4MzM1MiwgMHg5QzIzLCAweDMzNEUsIDB4OUMyNCwgMHgzMzUxLCAweDlDMjUsIDB4MTZCMCwNCi0gICAgMHg5QzI4LCAweDMzNEYsIDB4OUMyOSwgMHgzMzUwLCAweDlDMkIsIDB4MzM0QSwgMHg5QzJDLCAweDMzNEQsDQotICAgIDB4OUMyRCwgMHgxNkFGLCAweDlDMzEsIDB4MTZFRCwgMHg5QzMyLCAweDMzRjIsIDB4OUMzMywgMHgzM0VELA0KLSAgICAweDlDMzQsIDB4MzNGMSwgMHg5QzM2LCAweDMzRjQsIDB4OUMzNywgMHgzM0YwLCAweDlDMzksIDB4MzNFQywNCi0gICAgMHg5QzNCLCAweDE2RUYsIDB4OUMzQywgMHgzM0VGLCAweDlDM0QsIDB4MzNGMywgMHg5QzNFLCAweDE2RUUsDQotICAgIDB4OUMzRiwgMHgzM0VBLCAweDlDNDAsIDB4MzI5NywgMHg5QzQxLCAweDMzRUUsIDB4OUM0NCwgMHgzM0VCLA0KLSAgICAweDlDNDYsIDB4MzNFOCwgMHg5QzQ4LCAweDMzRTksIDB4OUM0OSwgMHgxNkVDLCAweDlDNEEsIDB4MzQ1NywNCi0gICAgMHg5QzRCLCAweDM0NTksIDB4OUM0QywgMHgzNDVDLCAweDlDNEQsIDB4MzQ1OCwgMHg5QzRFLCAweDM0NUQsDQotICAgIDB4OUM1MCwgMHgzNDU2LCAweDlDNTIsIDB4MzQ1NCwgMHg5QzU0LCAweDE3MTksIDB4OUM1NSwgMHgzNDVBLA0KLSAgICAweDlDNTYsIDB4MTcxQiwgMHg5QzU3LCAweDE3MUEsIDB4OUM1OCwgMHgzNDU1LCAweDlDNTksIDB4MzQ1QiwNCi0gICAgMHg5QzVFLCAweDM0QjUsIDB4OUM1RiwgMHgxNzNBLCAweDlDNjAsIDB4MzRCNiwgMHg5QzYyLCAweDM0QjQsDQotICAgIDB4OUM2MywgMHgzNEIxLCAweDlDNjYsIDB4MzRCMywgMHg5QzY3LCAweDM0QjIsIDB4OUM2OCwgMHgzNEY0LA0KLSAgICAweDlDNkQsIDB4MzRGNiwgMHg5QzZFLCAweDM0RjUsIDB4OUM3MSwgMHgzNTE0LCAweDlDNzMsIDB4MzUxMywNCi0gICAgMHg5Qzc0LCAweDM1MTIsIDB4OUM3NSwgMHgzNTE1LCAweDlDNzcsIDB4MTc2MCwgMHg5Qzc4LCAweDE3NjEsDQotICAgIDB4OUM3OSwgMHgzNTQxLCAweDlDN0EsIDB4MzU0NSwgMHg5Q0U1LCAweDBCRTIsIDB4OUNFNiwgMHgyMzVGLA0KLSAgICAweDlDRTcsIDB4MjYxMCwgMHg5Q0U5LCAweDBGNzksIDB4OUNFQSwgMHgyNjBFLCAweDlDRUQsIDB4MjYwRiwNCi0gICAgMHg5Q0YxLCAweDI4NzksIDB4OUNGMiwgMHgyODdBLCAweDlDRjMsIDB4MTBGRSwgMHg5Q0Y0LCAweDEwRkMsDQotICAgIDB4OUNGNSwgMHgyODdCLCAweDlDRjYsIDB4MTBGRCwgMHg5Q0Y3LCAweDJBRjQsIDB4OUNGOSwgMHgyQUY3LA0KLSAgICAweDlDRkEsIDB4MkFGMSwgMHg5Q0ZCLCAweDJBRjgsIDB4OUNGQywgMHgyQUYwLCAweDlDRkQsIDB4MkFGMiwNCi0gICAgMHg5Q0ZGLCAweDJBRjMsIDB4OUQwMCwgMHgyQUY2LCAweDlEMDMsIDB4MTI4NCwgMHg5RDA0LCAweDJBRkIsDQotICAgIDB4OUQwNSwgMHgyQUZBLCAweDlEMDYsIDB4MTI4MiwgMHg5RDA3LCAweDJBRjUsIDB4OUQwOCwgMHgyQUY5LA0KLSAgICAweDlEMDksIDB4MTI4MywgMHg5RDEwLCAweDJEMkQsIDB4OUQxMiwgMHgxM0FFLCAweDlEMTQsIDB4MkQyOCwNCi0gICAgMHg5RDE1LCAweDEzQUEsIDB4OUQxNywgMHgyRDI1LCAweDlEMTgsIDB4MkQyQiwgMHg5RDE5LCAweDJEMkUsDQotICAgIDB4OUQxQiwgMHgxM0FGLCAweDlEMUQsIDB4MkQyQSwgMHg5RDFFLCAweDJEMjcsIDB4OUQxRiwgMHgyRDJGLA0KLSAgICAweDlEMjAsIDB4MkQyNiwgMHg5RDIyLCAweDJEMkMsIDB4OUQyMywgMHgxM0FCLCAweDlEMjUsIDB4MkQyNCwNCi0gICAgMHg5RDI2LCAweDEzQUMsIDB4OUQyOCwgMHgxM0FELCAweDlEMjksIDB4MkQyOSwgMHg5RDJELCAweDJGMDAsDQotICAgIDB4OUQyRSwgMHgyRUYzLCAweDlEMkYsIDB4MkVGNCwgMHg5RDMwLCAweDJFRjcsIDB4OUQzMSwgMHgyRUY1LA0KLSAgICAweDlEMzMsIDB4MkVFRiwgMHg5RDM2LCAweDJFRjIsIDB4OUQzNywgMHgyRUZDLCAweDlEMzgsIDB4MkVGNiwNCi0gICAgMHg5RDNCLCAweDE0QkYsIDB4OUQzRCwgMHgyRUZFLCAweDlEM0UsIDB4MkVGQiwgMHg5RDNGLCAweDE0QzAsDQotICAgIDB4OUQ0MCwgMHgyRUZELCAweDlENDEsIDB4MkVGMCwgMHg5RDQyLCAweDJFRjksIDB4OUQ0MywgMHgyRUZBLA0KLSAgICAweDlENDUsIDB4MkVGOCwgMHg5RDRBLCAweDMwNjEsIDB4OUQ0QiwgMHgzMDYzLCAweDlENEMsIDB4MzA2NiwNCi0gICAgMHg5RDRGLCAweDMwNjAsIDB4OUQ1MSwgMHgxNTZGLCAweDlENTIsIDB4MzA2OCwgMHg5RDUzLCAweDMwNUYsDQotICAgIDB4OUQ1NCwgMHgzMDY5LCAweDlENTYsIDB4MzA2NSwgMHg5RDU3LCAweDMwNjcsIDB4OUQ1OCwgMHgzMDZCLA0KLSAgICAweDlENTksIDB4MzA2NCwgMHg5RDVBLCAweDMwNkMsIDB4OUQ1QiwgMHgzMDYyLCAweDlENUMsIDB4MzA1RSwNCi0gICAgMHg5RDVELCAweDE1NzAsIDB4OUQ1RiwgMHgzMDZBLCAweDlENjAsIDB4MTU3MSwgMHg5RDYxLCAweDE2MDEsDQotICAgIDB4OUQ2NywgMHgyRUYxLCAweDlENjgsIDB4MzFCQiwgMHg5RDY5LCAweDMxQjIsIDB4OUQ2QSwgMHgxNjAzLA0KLSAgICAweDlENkIsIDB4MzFBRSwgMHg5RDZDLCAweDE2MDQsIDB4OUQ2RiwgMHgzMUI3LCAweDlENzAsIDB4MzFCMSwNCi0gICAgMHg5RDcxLCAweDMxQTcsIDB4OUQ3MiwgMHgxNjAyLCAweDlENzMsIDB4MzFCNCwgMHg5RDc0LCAweDMxQUYsDQotICAgIDB4OUQ3NSwgMHgzMUIwLCAweDlENzcsIDB4MzFBMiwgMHg5RDc4LCAweDMxQTksIDB4OUQ3OSwgMHgzMUI4LA0KLSAgICAweDlEN0IsIDB4MzFCNSwgMHg5RDdELCAweDMxQUQsIDB4OUQ3RiwgMHgzMUI5LCAweDlEODAsIDB4MzFBOCwNCi0gICAgMHg5RDgxLCAweDMxQTMsIDB4OUQ4MiwgMHgzMUI2LCAweDlEODQsIDB4MzFBNSwgMHg5RDg1LCAweDMxQjMsDQotICAgIDB4OUQ4NiwgMHgzMUFBLCAweDlEODcsIDB4MzFCQSwgMHg5RDg4LCAweDMxQTYsIDB4OUQ4OSwgMHgxNjAwLA0KLSAgICAweDlEOEEsIDB4MzFBNCwgMHg5RDhCLCAweDMxQUIsIDB4OUQ4QywgMHgzMUFDLCAweDlEOTAsIDB4MzJBNCwNCi0gICAgMHg5RDkyLCAweDMyQTIsIDB4OUQ5NCwgMHgzMkE3LCAweDlEOTYsIDB4MzJCMywgMHg5RDk3LCAweDMyQUEsDQotICAgIDB4OUQ5OCwgMHgzMkEzLCAweDlEOTksIDB4MzI5RiwgMHg5RDlBLCAweDMyQUMsIDB4OUQ5QiwgMHgzMkE1LA0KLSAgICAweDlEOUMsIDB4MzJBOCwgMHg5RDlELCAweDMyQTEsIDB4OUQ5RSwgMHgzMkFGLCAweDlEOUYsIDB4MzI5RSwNCi0gICAgMHg5REEwLCAweDMyQTYsIDB4OURBMSwgMHgzMkFCLCAweDlEQTIsIDB4MzJBRCwgMHg5REEzLCAweDMyQjAsDQotICAgIDB4OURBNCwgMHgzMkEwLCAweDlEQTYsIDB4MzJCNCwgMHg5REE3LCAweDMyQjUsIDB4OURBOCwgMHgzMkFFLA0KLSAgICAweDlEQTksIDB4MzJCMiwgMHg5REFBLCAweDMyQTksIDB4OURBQywgMHgzMzYyLCAweDlEQUQsIDB4MzM2NSwNCi0gICAgMHg5REFGLCAweDE2QjEsIDB4OURCMSwgMHgzMzY0LCAweDlEQjIsIDB4MzM2OSwgMHg5REIzLCAweDMzNjcsDQotICAgIDB4OURCNCwgMHgxNkIyLCAweDlEQjUsIDB4MzM1RSwgMHg5REI2LCAweDMzNTQsIDB4OURCNywgMHgzMzUzLA0KLSAgICAweDlEQjgsIDB4MTZCNCwgMHg5REI5LCAweDMzNjAsIDB4OURCQSwgMHgzMzYxLCAweDlEQkIsIDB4MzM1RCwNCi0gICAgMHg5REJDLCAweDMzNTUsIDB4OURCRSwgMHgzMzVBLCAweDlEQkYsIDB4MzJCMSwgMHg5REMxLCAweDMzNTYsDQotICAgIDB4OURDMiwgMHgxNkIzLCAweDlEQzMsIDB4MzM1QywgMHg5REM1LCAweDMzNUIsIDB4OURDNywgMHgzMzU3LA0KLSAgICAweDlEQzgsIDB4MzM2MywgMHg5RENBLCAweDMzNTgsIDB4OURDQiwgMHgzM0Y5LCAweDlEQ0MsIDB4MzM2NiwNCi0gICAgMHg5RENELCAweDMzNjgsIDB4OURDRSwgMHgzMzVGLCAweDlEQ0YsIDB4MzM1OSwgMHg5REQwLCAweDMzRkEsDQotICAgIDB4OUREMSwgMHgzM0ZDLCAweDlERDIsIDB4MzNGNiwgMHg5REQzLCAweDE2RjAsIDB4OURENSwgMHgzNDAzLA0KLSAgICAweDlERDYsIDB4MzQwMSwgMHg5REQ3LCAweDE2RjEsIDB4OUREOCwgMHgzNDAwLCAweDlERDksIDB4MzNGRiwNCi0gICAgMHg5RERBLCAweDMzRjgsIDB4OUREQiwgMHgzM0Y1LCAweDlEREMsIDB4MzNGQiwgMHg5RERELCAweDM0MDQsDQotICAgIDB4OURERSwgMHgzM0Y3LCAweDlEREYsIDB4MzNGRCwgMHg5REUxLCAweDM0NjYsIDB4OURFMiwgMHgzNDZCLA0KLSAgICAweDlERTMsIDB4MzQ2MSwgMHg5REU0LCAweDM0NjQsIDB4OURFNSwgMHgxNzFDLCAweDlERTYsIDB4MzQ2OCwNCi0gICAgMHg5REU4LCAweDM0NkYsIDB4OURFOSwgMHgzM0ZFLCAweDlERUIsIDB4MzQ2MiwgMHg5REVDLCAweDM0NkMsDQotICAgIDB4OURFRCwgMHgzNDcwLCAweDlERUUsIDB4MzQ2NywgMHg5REVGLCAweDM0NjAsIDB4OURGMCwgMHgzNDZBLA0KLSAgICAweDlERjIsIDB4MzQ2OSwgMHg5REYzLCAweDM0NkUsIDB4OURGNCwgMHgzNDZELCAweDlERjUsIDB4MzQwMiwNCi0gICAgMHg5REY2LCAweDM0NjUsIDB4OURGNywgMHgzNDVGLCAweDlERjgsIDB4MzQ2MywgMHg5REY5LCAweDE3M0IsDQotICAgIDB4OURGQSwgMHgxNzNDLCAweDlERkIsIDB4MzQ1RSwgMHg5REZELCAweDM0QzEsIDB4OURGRSwgMHgzNEI4LA0KLSAgICAweDlERkYsIDB4MzRDMCwgMHg5RTAwLCAweDM0QkQsIDB4OUUwMSwgMHgzNEJFLCAweDlFMDIsIDB4MzRCNywNCi0gICAgMHg5RTAzLCAweDM0QkEsIDB4OUUwNCwgMHgzNEMyLCAweDlFMDUsIDB4MzRCQywgMHg5RTA2LCAweDM0QkIsDQotICAgIDB4OUUwNywgMHgzNEI5LCAweDlFMDksIDB4MzRCRiwgMHg5RTBCLCAweDM0RjcsIDB4OUUwRCwgMHgzNEY4LA0KLSAgICAweDlFMEYsIDB4MzRGQSwgMHg5RTEwLCAweDM0RjksIDB4OUUxMSwgMHgzNEZDLCAweDlFMTIsIDB4MzRGQiwNCi0gICAgMHg5RTEzLCAweDM1MTcsIDB4OUUxNCwgMHgzNTE2LCAweDlFMTUsIDB4MzUzMCwgMHg5RTE3LCAweDM1MzEsDQotICAgIDB4OUUxOSwgMHgzNTNELCAweDlFMUEsIDB4MTc2NSwgMHg5RTFCLCAweDE3NjksIDB4OUUxRCwgMHgzNTQ2LA0KLSAgICAweDlFMUUsIDB4MTc2QSwgMHg5RTc1LCAweDBCRTMsIDB4OUU3OSwgMHgxNjYxLCAweDlFN0EsIDB4MzM2QSwNCi0gICAgMHg5RTdDLCAweDE3M0QsIDB4OUU3RCwgMHgxNzNFLCAweDlFN0YsIDB4MEJFNCwgMHg5RTgwLCAweDI2MTEsDQotICAgIDB4OUU4MiwgMHgwRjdBLCAweDlFODMsIDB4MkFGQywgMHg5RTg2LCAweDJEMzEsIDB4OUU4NywgMHgyRDMyLA0KLSAgICAweDlFODgsIDB4MkQzMCwgMHg5RTg5LCAweDJGMDIsIDB4OUU4QSwgMHgyRjAxLCAweDlFOEIsIDB4MTRDMSwNCi0gICAgMHg5RThDLCAweDMwNkUsIDB4OUU4RCwgMHgyRjAzLCAweDlFOEUsIDB4MzA2RCwgMHg5RTkxLCAweDMxQkQsDQotICAgIDB4OUU5MiwgMHgxNjA1LCAweDlFOTMsIDB4MTYwNywgMHg5RTk0LCAweDMxQkMsIDB4OUU5NywgMHgxNjA2LA0KLSAgICAweDlFOTksIDB4MzJCNiwgMHg5RTlBLCAweDMyQjgsIDB4OUU5QiwgMHgzMkI3LCAweDlFOUMsIDB4MzM2QiwNCi0gICAgMHg5RTlELCAweDE2QjUsIDB4OUU5RiwgMHgxNzFELCAweDlFQTAsIDB4MzRDMywgMHg5RUExLCAweDM0RkQsDQotICAgIDB4OUVBNCwgMHgzNTRBLCAweDlFQTUsIDB4MEJFNSwgMHg5RUE3LCAweDI4N0MsIDB4OUVBOSwgMHgxMjg1LA0KLSAgICAweDlFQUQsIDB4MkQzNCwgMHg5RUFFLCAweDJEMzMsIDB4OUVCMCwgMHgyRjA0LCAweDlFQjQsIDB4MTYwOCwNCi0gICAgMHg5RUI1LCAweDE2NjIsIDB4OUVCNiwgMHgzNDA1LCAweDlFQjcsIDB4MzU0MiwgMHg5RUJCLCAweDBCRTYsDQotICAgIDB4OUVCQywgMHgxMEZGLCAweDlFQkUsIDB4MTI4NiwgMHg5RUMwLCAweDMxQkUsIDB4OUVDMiwgMHgzNDcxLA0KLSAgICAweDlFQzMsIDB4MERCQiwgMHg5RUM4LCAweDJGMDUsIDB4OUVDQywgMHgxNzUxLCAweDlFQ0QsIDB4MERCQywNCi0gICAgMHg5RUNFLCAweDEyODcsIDB4OUVDRiwgMHgxNEMyLCAweDlFRDAsIDB4MzQ3MiwgMHg5RUQxLCAweDBEQkQsDQotICAgIDB4OUVEMywgMHgyQUZELCAweDlFRDQsIDB4MTNCMSwgMHg5RUQ1LCAweDJEMzUsIDB4OUVENiwgMHgyRDM2LA0KLSAgICAweDlFRDgsIDB4MTNCMCwgMHg5RURBLCAweDJGMDYsIDB4OUVEQiwgMHgxNEM2LCAweDlFREMsIDB4MTRDNCwNCi0gICAgMHg5RURELCAweDE0QzUsIDB4OUVERSwgMHgxNEMzLCAweDlFREYsIDB4MzA2RiwgMHg5RUUwLCAweDE1NzIsDQotICAgIDB4OUVFNCwgMHgzMkJBLCAweDlFRTUsIDB4MzJCOSwgMHg5RUU2LCAweDMyQkMsIDB4OUVFNywgMHgzMkJCLA0KLSAgICAweDlFRTgsIDB4MTY2MywgMHg5RUVCLCAweDMzNkMsIDB4OUVFRCwgMHgzMzZFLCAweDlFRUUsIDB4MzM2RCwNCi0gICAgMHg5RUVGLCAweDE2QjYsIDB4OUVGMCwgMHgzNDA2LCAweDlFRjIsIDB4MzQ3MywgMHg5RUYzLCAweDM0NzQsDQotICAgIDB4OUVGNCwgMHgxNzFFLCAweDlFRjUsIDB4MzRGRSwgMHg5RUY2LCAweDM1MTgsIDB4OUVGNywgMHgxNzYyLA0KLSAgICAweDlFRjksIDB4MjM2MCwgMHg5RUZBLCAweDJEMzcsIDB4OUVGQiwgMHgyRjA3LCAweDlFRkMsIDB4MzFCRiwNCi0gICAgMHg5RUZELCAweDI2MTIsIDB4OUVGRiwgMHgyRjA4LCAweDlGMDAsIDB4MzA3MSwgMHg5RjAxLCAweDMwNzAsDQotICAgIDB4OUYwNiwgMHgzNDc1LCAweDlGMDcsIDB4MTczRiwgMHg5RjA5LCAweDM0RkYsIDB4OUYwQSwgMHgzNTE5LA0KLSAgICAweDlGMEUsIDB4MEY3QiwgMHg5RjBGLCAweDJBRkUsIDB4OUYxMCwgMHgyQUZGLCAweDlGMTIsIDB4MkQzOCwNCi0gICAgMHg5RjEzLCAweDBGN0MsIDB4OUYxNSwgMHgxNTczLCAweDlGMTYsIDB4MzA3MiwgMHg5RjE4LCAweDMzNzAsDQotICAgIDB4OUYxOSwgMHgxNkI3LCAweDlGMUEsIDB4MzM3MSwgMHg5RjFCLCAweDMzNkYsIDB4OUYxQywgMHgzNDc2LA0KLSAgICAweDlGMUUsIDB4MzRDNCwgMHg5RjIwLCAweDBGN0QsIDB4OUYyMiwgMHgyRjBCLCAweDlGMjMsIDB4MkYwQSwNCi0gICAgMHg5RjI0LCAweDJGMDksIDB4OUYyNSwgMHgzMDczLCAweDlGMjgsIDB4MzA3NywgMHg5RjI5LCAweDMwNzYsDQotICAgIDB4OUYyQSwgMHgzMDc1LCAweDlGMkIsIDB4MzA3NCwgMHg5RjJDLCAweDE1NzQsIDB4OUYyRCwgMHgzMUMwLA0KLSAgICAweDlGMkUsIDB4MzJCRSwgMHg5RjJGLCAweDE2NjQsIDB4OUYzMCwgMHgzMkJELCAweDlGMzEsIDB4MzM3MiwNCi0gICAgMHg5RjMyLCAweDM0MDksIDB4OUYzMywgMHgzNDA4LCAweDlGMzQsIDB4MTZGMiwgMHg5RjM1LCAweDM0MDcsDQotICAgIDB4OUYzNiwgMHgzNDc5LCAweDlGMzcsIDB4MzQ3OCwgMHg5RjM4LCAweDM0NzcsIDB4OUYzQiwgMHgxMTAwLA0KLSAgICAweDlGM0QsIDB4MkQzOSwgMHg5RjNFLCAweDE0QzcsIDB4OUY0MCwgMHgzMUMxLCAweDlGNDEsIDB4MzFDMiwNCi0gICAgMHg5RjQyLCAweDM0MEEsIDB4OUY0MywgMHgzNDdBLCAweDlGNDYsIDB4MzRDNSwgMHg5RjQ3LCAweDM1MDAsDQotICAgIDB4OUY0OCwgMHgzNTMyLCAweDlGNDksIDB4MzU0QywgMHg5RjRBLCAweDExMDEsIDB4OUY0QiwgMHgxNEM4LA0KLSAgICAweDlGNEMsIDB4MzA3OCwgMHg5RjRELCAweDMxQzMsIDB4OUY0RSwgMHgzMzczLCAweDlGNEYsIDB4MzQ3QiwNCi0gICAgMHg5RjUyLCAweDEyODksIDB4OUY1NCwgMHgyRjBDLCAweDlGNTUsIDB4MzA3OSwgMHg5RjU2LCAweDMxQzQsDQotICAgIDB4OUY1NywgMHgzMUM1LCAweDlGNTgsIDB4MzFDNiwgMHg5RjU5LCAweDMyQzMsIDB4OUY1QiwgMHgzMkJGLA0KLSAgICAweDlGNUMsIDB4MTZCOCwgMHg5RjVELCAweDMyQzIsIDB4OUY1RSwgMHgzMkMxLCAweDlGNUYsIDB4MTY2NSwNCi0gICAgMHg5RjYwLCAweDMyQzAsIDB4OUY2MSwgMHgxNjY3LCAweDlGNjMsIDB4MTY2NiwgMHg5RjY0LCAweDMzNzUsDQotICAgIDB4OUY2NSwgMHgzMzc0LCAweDlGNjYsIDB4MTZCOSwgMHg5RjY3LCAweDE2QkEsIDB4OUY2QSwgMHgxNkY0LA0KLSAgICAweDlGNkIsIDB4MzQwQiwgMHg5RjZDLCAweDE2RjMsIDB4OUY2RSwgMHgzNDdFLCAweDlGNkYsIDB4MzQ3RiwNCi0gICAgMHg5RjcwLCAweDM0N0QsIDB4OUY3MSwgMHgzNDdDLCAweDlGNzIsIDB4MTc0MSwgMHg5Rjc0LCAweDM0QzYsDQotICAgIDB4OUY3NSwgMHgzNEM3LCAweDlGNzYsIDB4MzRDOCwgMHg5Rjc3LCAweDE3NDAsIDB4OUY3OCwgMHgzNTAxLA0KLSAgICAweDlGNzksIDB4MzUwNCwgMHg5RjdBLCAweDM1MDMsIDB4OUY3QiwgMHgzNTAyLCAweDlGN0UsIDB4MzU0QiwNCi0gICAgMHg5RjhELCAweDEzQjIsIDB4OUY5MCwgMHgxNTdDLCAweDlGOTEsIDB4MzJDNCwgMHg5RjkyLCAweDMzNzYsDQotICAgIDB4OUY5NCwgMHgxNkY1LCAweDlGOTUsIDB4MzQwQywgMHg5Rjk4LCAweDM1NEQsIDB4OUY5QywgMHgxM0IzLA0KLSAgICAweDlGQTAsIDB4MkYwRCwgMHg5RkEyLCAweDM0MEQsIDB4OUZBNCwgMHgzNTFBLCAweEUwMUYsIDB4MDgzQSwNCi0gICAgMHhFMDI2LCAweDA5RkQsIDB4RTA1QiwgMHgwMzBELCAweEUwNjMsIDB4MDE2QiwgMHhFMDczLCAweDA4NjAsDQotICAgIDB4RTBGMywgMHgwQzIzLCAweEUxMkUsIDB4MTdFNCwgMHhFMTQ5LCAweDIxMkYsIDB4RTE5MSwgMHgxMTVGLA0KLSAgICAweEUxQkEsIDB4MEM3OSwgMHhFMUM5LCAweDA0QzMsIDB4RTIyQywgMHgxOEJELCAweEUyMkQsIDB4MENCRCwNCi0gICAgMHhFMjMwLCAweDBDQTUsIDB4RTI2NiwgMHgwQ0NFLCAweEUyQTMsIDB4MEU4NCwgMHhFMkJDLCAweDAxMjAsDQotICAgIDB4RTJFRiwgMHgxQkE4LCAweEUzM0EsIDB4MTA1NSwgMHhFMzQwLCAweDJERTgsIDB4RTM0RiwgMHgwMTIxLA0KLSAgICAweEUzNUEsIDB4MTA2QiwgMHhFMzYzLCAweDEzMjYsIDB4RTM3QywgMHgwNjZCLCAweEUzN0YsIDB4MTMyRSwNCi0gICAgMHhFM0M1LCAweDBEMzUsIDB4RTNENywgMHgyN0MyLCAweEUzREMsIDB4MjJBRCwgMHhFNDE3LCAweDEzNEMsDQotICAgIDB4RTQ0QSwgMHgwOUNFLCAweEU0NzgsIDB4MEJDNywgMHhFNDg1LCAweDM2RTksIDB4RTRDNSwgMHgxMzkxLA0KLSAgICAweEU0REEsIDB4MTZBNCwgMHhFNTQ1LCAweDMwNzIsIDB4RTVEMiwgMHgwMTE5LCAweEU1RDMsIDB4MDExQSwNCi0gICAgMHhFNUQ0LCAweDAxMUMsIDB4RTVENSwgMHgwMTFCLCAweEU1RjQsIDB4Mjk3QywgMHhFNkM2LCAweDFEMDYsDQotICAgIDB4RTcyNywgMHgyOUExLCAweEU3RDMsIDB4MTgxQiwgMHhFODkzLCAweDJCMjQsIDB4RUI0MCwgMHgyRjUwLA0KLSAgICAweEVCNDIsIDB4MTcyNSwgMHhFQjQ1LCAweDMyRUQsIDB4RUI2RSwgMHgyQUQ5LCAweEVCODYsIDB4MUMxNCwNCi0gICAgMHhFQjlFLCAweDEyRTksIDB4RUJBOSwgMHgyQ0FFLCAweEVCQkEsIDB4MUE2NCwgMHhFQkM5LCAweDE0MDQsDQotICAgIDB4RUJDRiwgMHgyMzI0LCAweEVCRDIsIDB4MzQ2QSwgMHhFQkRFLCAweDIyOTEsIDB4RUMwMSwgMHgxNzg3LA0KLSAgICAweEVDMDIsIDB4MDk1RiwgMHhFQzE1LCAweDFFOTksIDB4RUM1QiwgMHgyNUMxLCAweEVDNUUsIDB4MEQwQywNCi0gICAgMHhFQ0E2LCAweDA1RTYsIDB4RUQyOCwgMHgwNzI4LCAweEVENkUsIDB4MjRCNiwgMHhFRDdDLCAweDE4MDYsDQotICAgIDB4RUQ5RSwgMHgzNTExLCAweEVERTcsIDB4MEY4MiwgMHhFRTUyLCAweDA1RjIsIDB4RUU5OCwgMHgyNDdELA0KLSAgICAweEY2QjEsIDB4MDFGQSwgMHhGNkIyLCAweDAxRkIsIDB4RjZCMywgMHgwMUZDLCAweEY2QjQsIDB4MDFGRCwNCi0gICAgMHhGNkI1LCAweDAxRkUsIDB4RjZCNiwgMHgwMUZGLCAweEY2QjcsIDB4MDIwMCwgMHhGNkI4LCAweDAyMDEsDQotICAgIDB4RjZCOSwgMHgwMjAyLCAweEY2QkEsIDB4MDIwMywgMHhGNkJCLCAweDAyMDQsIDB4RjZCQywgMHgwMjA1LA0KLSAgICAweEY2QkQsIDB4MDIwNiwgMHhGNkJFLCAweDAyMDcsIDB4RjZCRiwgMHgwMjA4LCAweEY2QzAsIDB4MDIwOSwNCi0gICAgMHhGNkMxLCAweDAyMEEsIDB4RjZDMiwgMHgwMjBCLCAweEY2QzMsIDB4MDIwQywgMHhGNkM0LCAweDAyMEQsDQotICAgIDB4RjZDNSwgMHgwMjBFLCAweEY2QzYsIDB4MDIwRiwgMHhGNkM3LCAweDAyMTAsIDB4RjZDOCwgMHgwMjExLA0KLSAgICAweEY2QzksIDB4MDIxMiwgMHhGNkNBLCAweDAyMTMsIDB4RjZDQiwgMHgwMjE0LCAweEY2Q0MsIDB4MDIxNSwNCi0gICAgMHhGNkNELCAweDAyMTYsIDB4RjZDRSwgMHgwMjE3LCAweEY2Q0YsIDB4MDIxOSwgMHhGNkQwLCAweDAyMUEsDQotICAgIDB4RjZEMSwgMHgwMjFCLCAweEY2RDIsIDB4MDIxQywgMHhGNkQzLCAweDAyMUQsIDB4RjZENCwgMHgwMjFFLA0KLSAgICAweEY2RDUsIDB4MDIxRiwgMHhGNkQ2LCAweDAyMjAsIDB4RjZENywgMHgwMjIxLCAweEY2RDgsIDB4MDIyMiwNCi0gICAgMHhGNkQ5LCAweDAyMjMsIDB4RjZEQSwgMHgwMjI0LCAweEY2REIsIDB4MDIyNSwgMHhGNkRDLCAweDAyMjYsDQotICAgIDB4RjZERCwgMHgwMjI3LCAweEY2REUsIDB4MDIyOCwgMHhGNkUwLCAweDAyMkEsIDB4RjZFMSwgMHgwMjJCLA0KLSAgICAweEY2RTIsIDB4MDIyQywgMHhGNkU0LCAweDAyMkUsIDB4RjZFNiwgMHgwMjMwLCAweEY2RTgsIDB4MzVCMywNCi0gICAgMHhGNkU5LCAweDM1QjQsIDB4RjZFQSwgMHgzNUI1LCAweEY2RUIsIDB4MzVCNiwgMHhGNkVDLCAweDM1QjcsDQotICAgIDB4RjZFRCwgMHgzNUI4LCAweEY2RjAsIDB4MzVCQSwgMHhGNkYxLCAweDM1QkIsIDB4RjZGMiwgMHgzNUJDLA0KLSAgICAweEY2RjMsIDB4MzVCRCwgMHhGNkY0LCAweDM1QkUsIDB4RjZGNSwgMHgzNUJGLCAweEY2RjYsIDB4MzVDMCwNCi0gICAgMHhGNkY3LCAweDM1QzEsIDB4RjZGOCwgMHgzNUMyLCAweEY2RjksIDB4MzVDMywgMHhGNkZBLCAweDM1QzQsDQotICAgIDB4RjZGQiwgMHgzNUM1LCAweEY2RkMsIDB4MzVDNiwgMHhGNkZELCAweDM1QzcsIDB4RjZGRSwgMHgzNUM4LA0KLSAgICAweEY2RkYsIDB4MzVDOSwgMHhGNzAwLCAweDM1Q0EsIDB4RjcwMSwgMHgzNUNCLCAweEY3MDIsIDB4MzVDQywNCi0gICAgMHhGNzAzLCAweDM1Q0QsIDB4RjcwNCwgMHgzNUNFLCAweEY3MDUsIDB4MzVDRiwgMHhGNzA2LCAweDM1RDAsDQotICAgIDB4RjcwNywgMHgzNUQxLCAweEY3MDgsIDB4MzVEMiwgMHhGNzA5LCAweDM1RDMsIDB4RjcwQSwgMHgzNUQ0LA0KLSAgICAweEY3MEIsIDB4MzVENSwgMHhGNzBDLCAweDM1RDYsIDB4RjcwRCwgMHgzNUQ3LCAweEY3MEUsIDB4MzVEOCwNCi0gICAgMHhGNzBGLCAweDM1RDksIDB4RjcxMCwgMHgzNURBLCAweEY3MTEsIDB4MzVEQiwgMHhGNzEyLCAweDM1REMsDQotICAgIDB4RjcxMywgMHgzNURELCAweEY3MTQsIDB4MzVERSwgMHhGNzE1LCAweDM1REYsIDB4RjcxNiwgMHgzNUUwLA0KLSAgICAweEY3MTcsIDB4MzVFMSwgMHhGNzE4LCAweDM1RTIsIDB4RjcxOSwgMHgzNUUzLCAweEY3MUEsIDB4MzVFNCwNCi0gICAgMHhGNzFCLCAweDM1RTUsIDB4RjcxQywgMHgzNUU2LCAweEY3MUQsIDB4MzVFNywgMHhGNzFFLCAweDM1RTgsDQotICAgIDB4RjcxRiwgMHgzNUU5LCAweEY3MjAsIDB4MzVFQSwgMHhGNzIxLCAweDM1RUIsIDB4RjcyMiwgMHgzNUVDLA0KLSAgICAweEY3MjMsIDB4MzVFRCwgMHhGNzI0LCAweDM1RUUsIDB4RjcyNSwgMHgzNUVGLCAweEY3MjYsIDB4MzVGMCwNCi0gICAgMHhGNzI3LCAweDM1RjEsIDB4RjcyOCwgMHgzNUYyLCAweEY3MjksIDB4MzVGMywgMHhGNzJBLCAweDM1RjQsDQotICAgIDB4RjcyQiwgMHgzNUY1LCAweEY3MkMsIDB4MzVGNiwgMHhGNzJELCAweDM1RjcsIDB4RjcyRSwgMHgzNUY4LA0KLSAgICAweEY3MkYsIDB4MzVGOSwgMHhGNzMwLCAweDM1RkEsIDB4RjczMSwgMHgzNUZCLCAweEY3MzIsIDB4MzVGQywNCi0gICAgMHhGNzMzLCAweDM1RkQsIDB4RjczNCwgMHgzNUZFLCAweEY3MzUsIDB4MzVGRiwgMHhGNzM2LCAweDM2MDAsDQotICAgIDB4RjczNywgMHgzNjAxLCAweEY3MzgsIDB4MzYwMiwgMHhGNzM5LCAweDM2MDMsIDB4RjczQSwgMHgzNjA0LA0KLSAgICAweEY3M0IsIDB4MzYwNSwgMHhGNzNDLCAweDM2MDYsIDB4RjczRCwgMHgzNjA3LCAweEY3M0UsIDB4MzYwOCwNCi0gICAgMHhGNzNGLCAweDM2MDksIDB4Rjc0MCwgMHgzNjBBLCAweEY3NDEsIDB4MzYwQiwgMHhGNzQyLCAweDM2MEMsDQotICAgIDB4Rjc0MywgMHgzNjBELCAweEY3NDQsIDB4MzYwRSwgMHhGNzQ1LCAweDM2MEYsIDB4Rjc0NiwgMHgzNjEwLA0KLSAgICAweEY3NDcsIDB4MzYxMSwgMHhGNzQ4LCAweDM2MTIsIDB4Rjc0OSwgMHgzNjEzLCAweEY3NEEsIDB4MzYxNCwNCi0gICAgMHhGNzRCLCAweDM2MTUsIDB4Rjc0QywgMHgzNjE2LCAweEY3NEQsIDB4MzYxNywgMHhGNzRFLCAweDM2MTgsDQotICAgIDB4Rjc0RiwgMHgzNjE5LCAweEY3NTAsIDB4MzYxQSwgMHhGNzUxLCAweDM2MUIsIDB4Rjc1MiwgMHgzNjFDLA0KLSAgICAweEY3NTMsIDB4MzYxRCwgMHhGNzU0LCAweDM2MUUsIDB4Rjc1NSwgMHgzNjFGLCAweEY3NTYsIDB4MzYyMCwNCi0gICAgMHhGNzU3LCAweDM2MjEsIDB4Rjc1OCwgMHgzNjIyLCAweEY3NTksIDB4MzYyMywgMHhGNzVBLCAweDM2MjQsDQotICAgIDB4Rjc1QiwgMHgzNjI1LCAweEY3NUMsIDB4MzYyNiwgMHhGNzVELCAweDM2MjcsIDB4Rjc1RSwgMHgzNjI4LA0KLSAgICAweEY3NUYsIDB4MzYyOSwgMHhGNzYwLCAweDM2MkEsIDB4Rjc2MSwgMHgzNjJCLCAweEY3NjIsIDB4MzYyQywNCi0gICAgMHhGNzYzLCAweDM2MkQsIDB4Rjc2NCwgMHgzNjJFLCAweEY3NjUsIDB4MzYyRiwgMHhGNzY2LCAweDM2MzAsDQotICAgIDB4Rjc2NywgMHgzNjMxLCAweEY3NjgsIDB4MzYzMiwgMHhGNzY5LCAweDM2MzMsIDB4Rjc2QSwgMHgzNjM0LA0KLSAgICAweEY3NkIsIDB4MzYzNSwgMHhGNzZDLCAweDM2MzYsIDB4Rjc2RCwgMHgzNjM3LCAweEY3NkUsIDB4MzYzOCwNCi0gICAgMHhGNzZGLCAweDM2MzksIDB4Rjc3MCwgMHgzNjNBLCAweEY3NzEsIDB4MzYzQiwgMHhGNzcyLCAweDM2M0MsDQotICAgIDB4Rjc3MywgMHgzNjNELCAweEY3NzQsIDB4MzYzRSwgMHhGNzc1LCAweDM2M0YsIDB4Rjc3NiwgMHgzNjQwLA0KLSAgICAweEY3NzcsIDB4MzY0MSwgMHhGNzc4LCAweDM2NDIsIDB4Rjc3OSwgMHgzNjQzLCAweEY3N0EsIDB4MzY0NCwNCi0gICAgMHhGNzdCLCAweDM2NDUsIDB4Rjc3QywgMHgzNjQ2LCAweEY3N0QsIDB4MzY0NywgMHhGNzdFLCAweDM2NDgsDQotICAgIDB4Rjc3RiwgMHgzNjQ5LCAweEY3ODAsIDB4MzY0QSwgMHhGNzgxLCAweDM2NEIsIDB4Rjc4MiwgMHgzNjRDLA0KLSAgICAweEY3ODMsIDB4MzY0RCwgMHhGNzg0LCAweDM2NEUsIDB4Rjc4NSwgMHgzNjRGLCAweEY3ODYsIDB4MzY1MCwNCi0gICAgMHhGNzg3LCAweDM2NTEsIDB4Rjc4OCwgMHgzNjUyLCAweEY3ODksIDB4MzY1MywgMHhGNzhBLCAweDM2NTQsDQotICAgIDB4Rjc4QiwgMHgzNjU1LCAweEY3OEMsIDB4MzY1NiwgMHhGNzhELCAweDM2NTcsIDB4Rjc4RSwgMHgzNjU4LA0KLSAgICAweEY3OEYsIDB4MzY1OSwgMHhGNzkwLCAweDM2NUEsIDB4Rjc5MSwgMHgzNjVCLCAweEY3OTIsIDB4MzY1QywNCi0gICAgMHhGNzkzLCAweDM2NUQsIDB4Rjc5NCwgMHgzNjVFLCAweEY3OTUsIDB4MzY1RiwgMHhGNzk2LCAweDM2NjAsDQotICAgIDB4Rjc5NywgMHgzNjYxLCAweEY3OTgsIDB4MzY2MiwgMHhGNzk5LCAweDM2NjMsIDB4Rjc5QSwgMHgzNjY0LA0KLSAgICAweEY3OUIsIDB4MzY2NSwgMHhGNzlDLCAweDM2NjYsIDB4Rjc5RCwgMHgzNjY3LCAweEY3OUUsIDB4MzY2OCwNCi0gICAgMHhGNzlGLCAweDM2NjksIDB4RjdBMCwgMHgzNjZBLCAweEY3QTEsIDB4MzY2QiwgMHhGN0EyLCAweDM2NkMsDQotICAgIDB4RjdBMywgMHgzNjZELCAweEY3QTQsIDB4MzY2RSwgMHhGN0E1LCAweDM2NkYsIDB4RjdBNiwgMHgzNjcwLA0KLSAgICAweEY3QTcsIDB4MzY3MSwgMHhGN0E4LCAweDM2NzIsIDB4RjdBOSwgMHgzNjczLCAweEY3QUEsIDB4MzY3NCwNCi0gICAgMHhGN0FCLCAweDM2NzUsIDB4RjdBQywgMHgzNjc2LCAweEY3QUQsIDB4MzY3NywgMHhGN0FFLCAweDM2NzgsDQotICAgIDB4RjdBRiwgMHgzNjc5LCAweEY3QjAsIDB4MzY3QSwgMHhGN0IxLCAweDM2N0IsIDB4RjdCMiwgMHgzNjdDLA0KLSAgICAweEY3QjMsIDB4MzY3RCwgMHhGN0I0LCAweDM2N0UsIDB4RjdCNSwgMHgzNjdGLCAweEY3QjYsIDB4MzY4MCwNCi0gICAgMHhGN0I3LCAweDM2ODEsIDB4RjdCOCwgMHgzNjgyLCAweEY3QjksIDB4MzY4MywgMHhGN0JBLCAweDM2ODQsDQotICAgIDB4RjdCQiwgMHgzNjg1LCAweEY3QkMsIDB4MzY4NiwgMHhGN0JELCAweDM2ODcsIDB4RjdCRSwgMHgzNjg4LA0KLSAgICAweEY3QkYsIDB4MzY4OSwgMHhGN0MwLCAweDM2OEEsIDB4RjdDMSwgMHgzNjhCLCAweEY3QzIsIDB4MzY4QywNCi0gICAgMHhGN0MzLCAweDM2OEQsIDB4RjdDNCwgMHgzNjhFLCAweEY3QzUsIDB4MzY4RiwgMHhGN0M2LCAweDM2OTAsDQotICAgIDB4RjdDNywgMHgzNjkxLCAweEY3QzgsIDB4MzY5MiwgMHhGN0M5LCAweDM2OTMsIDB4RjdDQSwgMHgzNjk0LA0KLSAgICAweEY3Q0IsIDB4MzY5NSwgMHhGN0NDLCAweDM2OTYsIDB4RjdDRCwgMHgzNjk3LCAweEY3Q0UsIDB4MzY5OCwNCi0gICAgMHhGN0NGLCAweDM2OTksIDB4RjdEMCwgMHgzNjlBLCAweEY3RDEsIDB4MzY5QiwgMHhGN0QyLCAweDM2OUMsDQotICAgIDB4RjdEMywgMHgzNjlELCAweEY3RDQsIDB4MzY5RSwgMHhGN0Q1LCAweDM2OUYsIDB4RjdENiwgMHgzNkEwLA0KLSAgICAweEY3RDcsIDB4MzZBMSwgMHhGN0Q4LCAweDM2QTIsIDB4RjdEOSwgMHgzNkEzLCAweEY3REEsIDB4MzZBNCwNCi0gICAgMHhGN0RCLCAweDM2QTUsIDB4RjdEQywgMHgzNkE2LCAweEY3REQsIDB4MzZBNywgMHhGN0RFLCAweDM2QTgsDQotICAgIDB4RjdERiwgMHgzNkE5LCAweEY3RTAsIDB4MzZBQSwgMHhGN0UxLCAweDM2QUIsIDB4RjdFMiwgMHgzNkFDLA0KLSAgICAweEY3RTMsIDB4MzZBRCwgMHhGN0U0LCAweDM2QUUsIDB4RjdFNSwgMHgzNkFGLCAweEY3RTYsIDB4MzZCMCwNCi0gICAgMHhGN0U3LCAweDM2QjEsIDB4RjdFOCwgMHgzNkIyLCAweEY3RTksIDB4MzZCMywgMHhGN0VBLCAweDM2QjQsDQotICAgIDB4RjdFQiwgMHgzNkI1LCAweEY3RUMsIDB4MzZCNiwgMHhGN0VELCAweDM2QjcsIDB4RjdFRSwgMHgzNkI4LA0KLSAgICAweEY4MTcsIDB4MzZFMSwgMHhGODE4LCAweDM2RTIsIDB4RjgxOSwgMHgzNkUzLCAweEY4MUEsIDB4MzZFNCwNCi0gICAgMHhGODFCLCAweDM2RTUsIDB4RjgxQywgMHgzNkU2LCAweEY4MUQsIDB4MzZFNywgMHhGQTBDLCAweDAyNzQsDQotICAgIDB4RkEwRCwgMHgyMzgxLCAweEZFMzAsIDB4MDA2RCwgMHhGRTMxLCAweDAwN0EsIDB4RkUzMywgMHgzNUFGLA0KLSAgICAweEZFMzQsIDB4MzVCMSwgMHhGRTM1LCAweDAwODIsIDB4RkUzNiwgMHgwMDgzLCAweEZFMzcsIDB4MDA4NiwNCi0gICAgMHhGRTM4LCAweDAwODcsIDB4RkUzOSwgMHgwMDhBLCAweEZFM0EsIDB4MDA4QiwgMHhGRTNCLCAweDAwOEUsDQotICAgIDB4RkUzQywgMHgwMDhGLCAweEZFM0QsIDB4MDA5MiwgMHhGRTNFLCAweDAwOTMsIDB4RkUzRiwgMHgwMDk2LA0KLSAgICAweEZFNDAsIDB4MDA5NywgMHhGRTQxLCAweDAwOUEsIDB4RkU0MiwgMHgwMDlCLCAweEZFNDMsIDB4MDA5RSwNCi0gICAgMHhGRTQ0LCAweDAwOUYsIDB4RkU0OSwgMHgwMEM3LCAweEZFNEEsIDB4MDBDOCwgMHhGRTRCLCAweDAwQ0IsDQotICAgIDB4RkU0QywgMHgwMENDLCAweEZFNEQsIDB4MDBDOSwgMHhGRTRFLCAweDAwQ0EsIDB4RkU0RiwgMHgzNUIyLA0KLSAgICAweEZFNTAsIDB4MDA3MCwgMHhGRTUxLCAweDAwNzEsIDB4RkU1MiwgMHgwMDcyLCAweEZFNTQsIDB4MDA3NCwNCi0gICAgMHhGRTU1LCAweDAwNzUsIDB4RkU1NiwgMHgwMDc2LCAweEZFNTcsIDB4MDA3NywgMHhGRTU5LCAweDAwQTAsDQotICAgIDB4RkU1QSwgMHgwMEExLCAweEZFNUIsIDB4MDBBMiwgMHhGRTVDLCAweDAwQTMsIDB4RkU1RCwgMHgwMEE0LA0KLSAgICAweEZFNUUsIDB4MDBBNSwgMHhGRTVGLCAweDAwQ0QsIDB4RkU2MCwgMHgwMENFLCAweEZFNjEsIDB4MDBDRiwNCi0gICAgMHhGRTYyLCAweDAwREYsIDB4RkU2MywgMHgwMEUwLCAweEZFNjQsIDB4MDBFMSwgMHhGRTY1LCAweDAwRTIsDQotICAgIDB4RkU2NiwgMHgwMEUzLCAweEZFNjgsIDB4MDEwMiwgMHhGRTY5LCAweDAxMEMsIDB4RkU2QSwgMHgwMTBELA0KLSAgICAweEZFNkIsIDB4MDEwRSwgMHhGRjAxLCAweDAwNkMsIDB4RkYwMiwgMHgzNkU0LCAweEZGMDMsIDB4MDBBRSwNCi0gICAgMHhGRjA0LCAweDAxMDMsIDB4RkYwNSwgMHgwMTA4LCAweEZGMDYsIDB4MDBBRiwgMHhGRjA3LCAweDM2RTMsDQotICAgIDB4RkYwOCwgMHgwMDgwLCAweEZGMDksIDB4MDA4MSwgMHhGRjBBLCAweDAwQjAsIDB4RkYwQiwgMHgwMEQwLA0KLSAgICAweEZGMEMsIDB4MDA2NCwgMHhGRjBELCAweDAwRDEsIDB4RkYwRSwgMHgwMDY3LCAweEZGMEYsIDB4MDEwMSwNCi0gICAgMHhGRjEwLCAweDAxNEQsIDB4RkYxMSwgMHgwMTRFLCAweEZGMTIsIDB4MDE0RiwgMHhGRjEzLCAweDAxNTAsDQotICAgIDB4RkYxNCwgMHgwMTUxLCAweEZGMTUsIDB4MDE1MiwgMHhGRjE2LCAweDAxNTMsIDB4RkYxNywgMHgwMTU0LA0KLSAgICAweEZGMTgsIDB4MDE1NSwgMHhGRjE5LCAweDAxNTYsIDB4RkYxQSwgMHgwMDZBLCAweEZGMUIsIDB4MDA2OSwNCi0gICAgMHhGRjFDLCAweDAwRDYsIDB4RkYxRCwgMHgwMEQ4LCAweEZGMUUsIDB4MDBENywgMHhGRjFGLCAweDAwNkIsDQotICAgIDB4RkYyMCwgMHgwMTA5LCAweEZGMjEsIDB4MDE2RCwgMHhGRjIyLCAweDAxNkUsIDB4RkYyMywgMHgwMTZGLA0KLSAgICAweEZGMjQsIDB4MDE3MCwgMHhGRjI1LCAweDAxNzEsIDB4RkYyNiwgMHgwMTcyLCAweEZGMjcsIDB4MDE3MywNCi0gICAgMHhGRjI4LCAweDAxNzQsIDB4RkYyOSwgMHgwMTc1LCAweEZGMkEsIDB4MDE3NiwgMHhGRjJCLCAweDAxNzcsDQotICAgIDB4RkYyQywgMHgwMTc4LCAweEZGMkQsIDB4MDE3OSwgMHhGRjJFLCAweDAxN0EsIDB4RkYyRiwgMHgwMTdCLA0KLSAgICAweEZGMzAsIDB4MDE3QywgMHhGRjMxLCAweDAxN0QsIDB4RkYzMiwgMHgwMTdFLCAweEZGMzMsIDB4MDE3RiwNCi0gICAgMHhGRjM0LCAweDAxODAsIDB4RkYzNSwgMHgwMTgxLCAweEZGMzYsIDB4MDE4MiwgMHhGRjM3LCAweDAxODMsDQotICAgIDB4RkYzOCwgMHgwMTg0LCAweEZGMzksIDB4MDE4NSwgMHhGRjNBLCAweDAxODYsIDB4RkYzQiwgMHgzNUJFLA0KLSAgICAweEZGM0MsIDB4MDEwMiwgMHhGRjNELCAweDM1QkYsIDB4RkYzRSwgMHgzNUI0LCAweEZGM0YsIDB4MDBDNSwNCi0gICAgMHhGRjQxLCAweDAxODcsIDB4RkY0MiwgMHgwMTg4LCAweEZGNDMsIDB4MDE4OSwgMHhGRjQ0LCAweDAxOEEsDQotICAgIDB4RkY0NSwgMHgwMThCLCAweEZGNDYsIDB4MDE4QywgMHhGRjQ3LCAweDAxOEQsIDB4RkY0OCwgMHgwMThFLA0KLSAgICAweEZGNDksIDB4MDE4RiwgMHhGRjRBLCAweDAxOTAsIDB4RkY0QiwgMHgwMTkxLCAweEZGNEMsIDB4MDE5MiwNCi0gICAgMHhGRjRELCAweDAxOTMsIDB4RkY0RSwgMHgwMTk0LCAweEZGNEYsIDB4MDE5NSwgMHhGRjUwLCAweDAxOTYsDQotICAgIDB4RkY1MSwgMHgwMTk3LCAweEZGNTIsIDB4MDE5OCwgMHhGRjUzLCAweDAxOTksIDB4RkY1NCwgMHgwMTlBLA0KLSAgICAweEZGNTUsIDB4MDE5QiwgMHhGRjU2LCAweDAxOUMsIDB4RkY1NywgMHgwMTlELCAweEZGNTgsIDB4MDE5RSwNCi0gICAgMHhGRjU5LCAweDAxOUYsIDB4RkY1QSwgMHgwMUEwLCAweEZGNUIsIDB4MDA4NCwgMHhGRjVDLCAweDAwNzgsDQotICAgIDB4RkY1RCwgMHgwMDg1LCAweEZGNUUsIDB4MDBFNCwgMHhGRjY0LCAweDAwNzEsIDB4RkZFMCwgMHgwMTA2LA0KLSAgICAweEZGRTEsIDB4MDEwNywgMHhGRkUyLCAweDM2RTEsIDB4RkZFMywgMHgwMEM0LCAweEZGRTQsIDB4MzZFMiwNCi0gICAgMHhGRkU1LCAweDAxMDQsDQotfTsNCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfVW5pQ05TX1VURjE2X0hfMF9EV29yZFszICogM10gPSB7DQotICAgIDB4RDg0MCwgMHhEQzhBLCAweDM2QjIsIDB4RDg0MCwgMHhEQ0NDLCAweDM2QjAsIDB4RDg1RCwgMHhERTA3LCAweDM2QjgsDQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfVW5pQ05TX1VURjE2X0hfMFsxNDU1NyAqIDJdID0geworICAgIDB4MDAyMCwgMHgwMDAxLCAweDAwMjEsIDB4MDAwMiwgMHgwMDIyLCAweDAwMDMsIDB4MDAyMywgMHgwMDA0LAorICAgIDB4MDAyNCwgMHgwMDA1LCAweDAwMjUsIDB4MDAwNiwgMHgwMDI2LCAweDAwMDcsIDB4MDAyNywgMHgwMDA4LAorICAgIDB4MDAyOCwgMHgwMDA5LCAweDAwMjksIDB4MDAwQSwgMHgwMDJBLCAweDAwMEIsIDB4MDAyQiwgMHgwMDBDLAorICAgIDB4MDAyQywgMHgwMDBELCAweDAwMkQsIDB4MDAwRSwgMHgwMDJFLCAweDAwMEYsIDB4MDAyRiwgMHgwMDEwLAorICAgIDB4MDAzMCwgMHgwMDExLCAweDAwMzEsIDB4MDAxMiwgMHgwMDMyLCAweDAwMTMsIDB4MDAzMywgMHgwMDE0LAorICAgIDB4MDAzNCwgMHgwMDE1LCAweDAwMzUsIDB4MDAxNiwgMHgwMDM2LCAweDAwMTcsIDB4MDAzNywgMHgwMDE4LAorICAgIDB4MDAzOCwgMHgwMDE5LCAweDAwMzksIDB4MDAxQSwgMHgwMDNBLCAweDAwMUIsIDB4MDAzQiwgMHgwMDFDLAorICAgIDB4MDAzQywgMHgwMDFELCAweDAwM0QsIDB4MDAxRSwgMHgwMDNFLCAweDAwMUYsIDB4MDAzRiwgMHgwMDIwLAorICAgIDB4MDA0MCwgMHgwMDIxLCAweDAwNDEsIDB4MDAyMiwgMHgwMDQyLCAweDAwMjMsIDB4MDA0MywgMHgwMDI0LAorICAgIDB4MDA0NCwgMHgwMDI1LCAweDAwNDUsIDB4MDAyNiwgMHgwMDQ2LCAweDAwMjcsIDB4MDA0NywgMHgwMDI4LAorICAgIDB4MDA0OCwgMHgwMDI5LCAweDAwNDksIDB4MDAyQSwgMHgwMDRBLCAweDAwMkIsIDB4MDA0QiwgMHgwMDJDLAorICAgIDB4MDA0QywgMHgwMDJELCAweDAwNEQsIDB4MDAyRSwgMHgwMDRFLCAweDAwMkYsIDB4MDA0RiwgMHgwMDMwLAorICAgIDB4MDA1MCwgMHgwMDMxLCAweDAwNTEsIDB4MDAzMiwgMHgwMDUyLCAweDAwMzMsIDB4MDA1MywgMHgwMDM0LAorICAgIDB4MDA1NCwgMHgwMDM1LCAweDAwNTUsIDB4MDAzNiwgMHgwMDU2LCAweDAwMzcsIDB4MDA1NywgMHgwMDM4LAorICAgIDB4MDA1OCwgMHgwMDM5LCAweDAwNTksIDB4MDAzQSwgMHgwMDVBLCAweDAwM0IsIDB4MDA1QiwgMHgwMDNDLAorICAgIDB4MDA1QywgMHgwMDNELCAweDAwNUQsIDB4MDAzRSwgMHgwMDVFLCAweDAwM0YsIDB4MDA1RiwgMHgwMDQwLAorICAgIDB4MDA2MCwgMHgwMDQxLCAweDAwNjEsIDB4MDA0MiwgMHgwMDYyLCAweDAwNDMsIDB4MDA2MywgMHgwMDQ0LAorICAgIDB4MDA2NCwgMHgwMDQ1LCAweDAwNjUsIDB4MDA0NiwgMHgwMDY2LCAweDAwNDcsIDB4MDA2NywgMHgwMDQ4LAorICAgIDB4MDA2OCwgMHgwMDQ5LCAweDAwNjksIDB4MDA0QSwgMHgwMDZBLCAweDAwNEIsIDB4MDA2QiwgMHgwMDRDLAorICAgIDB4MDA2QywgMHgwMDRELCAweDAwNkQsIDB4MDA0RSwgMHgwMDZFLCAweDAwNEYsIDB4MDA2RiwgMHgwMDUwLAorICAgIDB4MDA3MCwgMHgwMDUxLCAweDAwNzEsIDB4MDA1MiwgMHgwMDcyLCAweDAwNTMsIDB4MDA3MywgMHgwMDU0LAorICAgIDB4MDA3NCwgMHgwMDU1LCAweDAwNzUsIDB4MDA1NiwgMHgwMDc2LCAweDAwNTcsIDB4MDA3NywgMHgwMDU4LAorICAgIDB4MDA3OCwgMHgwMDU5LCAweDAwNzksIDB4MDA1QSwgMHgwMDdBLCAweDAwNUIsIDB4MDA3QiwgMHgwMDVDLAorICAgIDB4MDA3QywgMHgwMDVELCAweDAwN0QsIDB4MDA1RSwgMHgwMDdFLCAweDAwNUYsIDB4MDBBMiwgMHgwMTA2LAorICAgIDB4MDBBMywgMHgwMTA3LCAweDAwQTUsIDB4MDEwNCwgMHgwMEE3LCAweDAwQjIsIDB4MDBBOCwgMHgzNUIzLAorICAgIDB4MDBBQywgMHgzNkUxLCAweDAwQUYsIDB4MDBDMywgMHgwMEIwLCAweDAxMTgsIDB4MDBCMSwgMHgwMEQ0LAorICAgIDB4MDBCNywgMHgwMDczLCAweDAwRDcsIDB4MDBEMiwgMHgwMEY3LCAweDAwRDMsIDB4MDJDNiwgMHgzNUI0LAorICAgIDB4MDJDNywgMHgwMUY4LCAweDAyQ0EsIDB4MDFGNywgMHgwMkNCLCAweDAxRjksIDB4MDJDRCwgMHgwMEM2LAorICAgIDB4MDJEOSwgMHgwMUY2LCAweDAzMDgsIDB4MzVCMywgMHgwMzkxLCAweDAxQTEsIDB4MDM5MiwgMHgwMUEyLAorICAgIDB4MDM5MywgMHgwMUEzLCAweDAzOTQsIDB4MDFBNCwgMHgwMzk1LCAweDAxQTUsIDB4MDM5NiwgMHgwMUE2LAorICAgIDB4MDM5NywgMHgwMUE3LCAweDAzOTgsIDB4MDFBOCwgMHgwMzk5LCAweDAxQTksIDB4MDM5QSwgMHgwMUFBLAorICAgIDB4MDM5QiwgMHgwMUFCLCAweDAzOUMsIDB4MDFBQywgMHgwMzlELCAweDAxQUQsIDB4MDM5RSwgMHgwMUFFLAorICAgIDB4MDM5RiwgMHgwMUFGLCAweDAzQTAsIDB4MDFCMCwgMHgwM0ExLCAweDAxQjEsIDB4MDNBMywgMHgwMUIyLAorICAgIDB4MDNBNCwgMHgwMUIzLCAweDAzQTUsIDB4MDFCNCwgMHgwM0E2LCAweDAxQjUsIDB4MDNBNywgMHgwMUI2LAorICAgIDB4MDNBOCwgMHgwMUI3LCAweDAzQTksIDB4MDFCOCwgMHgwM0IxLCAweDAxQjksIDB4MDNCMiwgMHgwMUJBLAorICAgIDB4MDNCMywgMHgwMUJCLCAweDAzQjQsIDB4MDFCQywgMHgwM0I1LCAweDAxQkQsIDB4MDNCNiwgMHgwMUJFLAorICAgIDB4MDNCNywgMHgwMUJGLCAweDAzQjgsIDB4MDFDMCwgMHgwM0I5LCAweDAxQzEsIDB4MDNCQSwgMHgwMUMyLAorICAgIDB4MDNCQiwgMHgwMUMzLCAweDAzQkMsIDB4MDFDNCwgMHgwM0JELCAweDAxQzUsIDB4MDNCRSwgMHgwMUM2LAorICAgIDB4MDNCRiwgMHgwMUM3LCAweDAzQzAsIDB4MDFDOCwgMHgwM0MxLCAweDAxQzksIDB4MDNDMywgMHgwMUNBLAorICAgIDB4MDNDNCwgMHgwMUNCLCAweDAzQzUsIDB4MDFDQywgMHgwM0M2LCAweDAxQ0QsIDB4MDNDNywgMHgwMUNFLAorICAgIDB4MDNDOCwgMHgwMUNGLCAweDAzQzksIDB4MDFEMCwgMHgwNDAxLCAweDM2NzAsIDB4MDQxMCwgMHgzNjZBLAorICAgIDB4MDQxMSwgMHgzNjZCLCAweDA0MTIsIDB4MzY2QywgMHgwNDEzLCAweDM2NkQsIDB4MDQxNCwgMHgzNjZFLAorICAgIDB4MDQxNSwgMHgzNjZGLCAweDA0MTYsIDB4MzY3MSwgMHgwNDE3LCAweDM2NzIsIDB4MDQxOCwgMHgzNjczLAorICAgIDB4MDQxOSwgMHgzNjc0LCAweDA0MUEsIDB4MzY3NSwgMHgwNDFCLCAweDM2NzYsIDB4MDQxQywgMHgzNjc3LAorICAgIDB4MDQxRCwgMHgzNjc4LCAweDA0MUUsIDB4MzY3OSwgMHgwNDFGLCAweDM2N0EsIDB4MDQyMCwgMHgzNjdCLAorICAgIDB4MDQyMSwgMHgzNjdDLCAweDA0MjIsIDB4MzY3RCwgMHgwNDIzLCAweDM2N0UsIDB4MDQyNCwgMHgzNjdGLAorICAgIDB4MDQyNSwgMHgzNjgwLCAweDA0MjYsIDB4MzY4MSwgMHgwNDI3LCAweDM2ODIsIDB4MDQyOCwgMHgzNjgzLAorICAgIDB4MDQyOSwgMHgzNjg0LCAweDA0MkEsIDB4MzY4NSwgMHgwNDJCLCAweDM2ODYsIDB4MDQyQywgMHgzNjg3LAorICAgIDB4MDQyRCwgMHgzNjg4LCAweDA0MkUsIDB4MzY4OSwgMHgwNDJGLCAweDM2OEEsIDB4MDQzMCwgMHgzNjhCLAorICAgIDB4MDQzMSwgMHgzNjhDLCAweDA0MzIsIDB4MzY4RCwgMHgwNDMzLCAweDM2OEUsIDB4MDQzNCwgMHgzNjhGLAorICAgIDB4MDQzNSwgMHgzNjkwLCAweDA0MzYsIDB4MzY5MiwgMHgwNDM3LCAweDM2OTMsIDB4MDQzOCwgMHgzNjk0LAorICAgIDB4MDQzOSwgMHgzNjk1LCAweDA0M0EsIDB4MzY5NiwgMHgwNDNCLCAweDM2OTcsIDB4MDQzQywgMHgzNjk4LAorICAgIDB4MDQzRCwgMHgzNjk5LCAweDA0M0UsIDB4MzY5QSwgMHgwNDNGLCAweDM2OUIsIDB4MDQ0MCwgMHgzNjlDLAorICAgIDB4MDQ0MSwgMHgzNjlELCAweDA0NDIsIDB4MzY5RSwgMHgwNDQzLCAweDM2OUYsIDB4MDQ0NCwgMHgzNkEwLAorICAgIDB4MDQ0NSwgMHgzNkExLCAweDA0NDYsIDB4MzZBMiwgMHgwNDQ3LCAweDM2QTMsIDB4MDQ0OCwgMHgzNkE0LAorICAgIDB4MDQ0OSwgMHgzNkE1LCAweDA0NEEsIDB4MzZBNiwgMHgwNDRCLCAweDM2QTcsIDB4MDQ0QywgMHgzNkE4LAorICAgIDB4MDQ0RCwgMHgzNkE5LCAweDA0NEUsIDB4MzZBQSwgMHgwNDRGLCAweDM2QUIsIDB4MDQ1MSwgMHgzNjkxLAorICAgIDB4MjAxMywgMHgwMDc5LCAweDIwMTQsIDB4MDA3QiwgMHgyMDE4LCAweDAwQTYsIDB4MjAxOSwgMHgwMEE3LAorICAgIDB4MjAxQywgMHgwMEE4LCAweDIwMUQsIDB4MDBBOSwgMHgyMDIyLCAweDAwNjgsIDB4MjAyNSwgMHgwMDZGLAorICAgIDB4MjAyNiwgMHgwMDZFLCAweDIwMjcsIDB4MDA2OCwgMHgyMDMyLCAweDAwQUQsIDB4MjAzNSwgMHgwMEFDLAorICAgIDB4MjAzQiwgMHgwMEIxLCAweDIwM0UsIDB4MDBDMywgMHgyMTAzLCAweDAxMEEsIDB4MjEwNSwgMHgwMEMyLAorICAgIDB4MjEwOSwgMHgwMTBCLCAweDIxMTYsIDB4MzZFNiwgMHgyMTIxLCAweDM2RTcsIDB4MjE2MCwgMHgwMTU3LAorICAgIDB4MjE2MSwgMHgwMTU4LCAweDIxNjIsIDB4MDE1OSwgMHgyMTYzLCAweDAxNUEsIDB4MjE2NCwgMHgwMTVCLAorICAgIDB4MjE2NSwgMHgwMTVDLCAweDIxNjYsIDB4MDE1RCwgMHgyMTY3LCAweDAxNUUsIDB4MjE2OCwgMHgwMTVGLAorICAgIDB4MjE2OSwgMHgwMTYwLCAweDIxNzAsIDB4MDIwRSwgMHgyMTcxLCAweDAyMEYsIDB4MjE3MiwgMHgwMjEwLAorICAgIDB4MjE3MywgMHgwMjExLCAweDIxNzQsIDB4MDIxMiwgMHgyMTc1LCAweDAyMTMsIDB4MjE3NiwgMHgwMjE0LAorICAgIDB4MjE3NywgMHgwMjE1LCAweDIxNzgsIDB4MDIxNiwgMHgyMTc5LCAweDAyMTcsIDB4MjE5MCwgMHgwMEY4LAorICAgIDB4MjE5MSwgMHgwMEY1LCAweDIxOTIsIDB4MDBGNywgMHgyMTkzLCAweDAwRjYsIDB4MjE5NiwgMHgwMEY5LAorICAgIDB4MjE5NywgMHgwMEZBLCAweDIxOTgsIDB4MDBGQywgMHgyMTk5LCAweDAwRkIsIDB4MjFCOCwgMHgzNkFELAorICAgIDB4MjFCOSwgMHgzNkFFLCAweDIxRTcsIDB4MzZBQywgMHgyMjE1LCAweDAxMDEsIDB4MjIxQSwgMHgwMEQ1LAorICAgIDB4MjIxRSwgMHgwMERDLCAweDIyMUYsIDB4MDBFOSwgMHgyMjIwLCAweDAwRTgsIDB4MjIyMywgMHgwMEZFLAorICAgIDB4MjIyNSwgMHgwMEZELCAweDIyMjksIDB4MDBFNSwgMHgyMjJBLCAweDAwRTYsIDB4MjIyQiwgMHgwMEVELAorICAgIDB4MjIyRSwgMHgwMEVFLCAweDIyMzQsIDB4MDBGMCwgMHgyMjM1LCAweDAwRUYsIDB4MjIzQywgMHgwMEU0LAorICAgIDB4MjI1MiwgMHgwMERELCAweDIyNjAsIDB4MDBEQiwgMHgyMjYxLCAweDAwREUsIDB4MjI2NiwgMHgwMEQ5LAorICAgIDB4MjI2NywgMHgwMERBLCAweDIyOTUsIDB4MDBGMywgMHgyMjk5LCAweDAwRjQsIDB4MjJBNSwgMHgwMEU3LAorICAgIDB4MjJCRiwgMHgwMEVBLCAweDIyRUYsIDB4MDA2RSwgMHgyNDAwLCAweDAyMzIsIDB4MjQwMSwgMHgwMjMzLAorICAgIDB4MjQwMiwgMHgwMjM0LCAweDI0MDMsIDB4MDIzNSwgMHgyNDA0LCAweDAyMzYsIDB4MjQwNSwgMHgwMjM3LAorICAgIDB4MjQwNiwgMHgwMjM4LCAweDI0MDcsIDB4MDIzOSwgMHgyNDA4LCAweDAyM0EsIDB4MjQwOSwgMHgwMjNCLAorICAgIDB4MjQwQSwgMHgwMjNDLCAweDI0MEIsIDB4MDIzRCwgMHgyNDBDLCAweDAyM0UsIDB4MjQwRCwgMHgwMjNGLAorICAgIDB4MjQwRSwgMHgwMjQwLCAweDI0MEYsIDB4MDI0MSwgMHgyNDEwLCAweDAyNDIsIDB4MjQxMSwgMHgwMjQzLAorICAgIDB4MjQxMiwgMHgwMjQ0LCAweDI0MTMsIDB4MDI0NSwgMHgyNDE0LCAweDAyNDYsIDB4MjQxNSwgMHgwMjQ3LAorICAgIDB4MjQxNiwgMHgwMjQ4LCAweDI0MTcsIDB4MDI0OSwgMHgyNDE4LCAweDAyNEEsIDB4MjQxOSwgMHgwMjRCLAorICAgIDB4MjQxQSwgMHgwMjRDLCAweDI0MUIsIDB4MDI0RCwgMHgyNDFDLCAweDAyNEUsIDB4MjQxRCwgMHgwMjRGLAorICAgIDB4MjQxRSwgMHgwMjUwLCAweDI0MUYsIDB4MDI1MSwgMHgyNDIxLCAweDAyNTIsIDB4MjQ2MCwgMHgwMUZBLAorICAgIDB4MjQ2MSwgMHgwMUZCLCAweDI0NjIsIDB4MDFGQywgMHgyNDYzLCAweDAxRkQsIDB4MjQ2NCwgMHgwMUZFLAorICAgIDB4MjQ2NSwgMHgwMUZGLCAweDI0NjYsIDB4MDIwMCwgMHgyNDY3LCAweDAyMDEsIDB4MjQ2OCwgMHgwMjAyLAorICAgIDB4MjQ2OSwgMHgwMjAzLCAweDI0NzQsIDB4MDIwNCwgMHgyNDc1LCAweDAyMDUsIDB4MjQ3NiwgMHgwMjA2LAorICAgIDB4MjQ3NywgMHgwMjA3LCAweDI0NzgsIDB4MDIwOCwgMHgyNDc5LCAweDAyMDksIDB4MjQ3QSwgMHgwMjBBLAorICAgIDB4MjQ3QiwgMHgwMjBCLCAweDI0N0MsIDB4MDIwQywgMHgyNDdELCAweDAyMEQsIDB4MjUwMCwgMHgwMTM3LAorICAgIDB4MjUwMiwgMHgwMTM4LCAweDI1MEMsIDB4MDEzQSwgMHgyNTEwLCAweDAxM0IsIDB4MjUxNCwgMHgwMTNDLAorICAgIDB4MjUxOCwgMHgwMTNELCAweDI1MUMsIDB4MDEzNSwgMHgyNTI0LCAweDAxMzQsIDB4MjUyQywgMHgwMTMzLAorICAgIDB4MjUzNCwgMHgwMTMyLCAweDI1M0MsIDB4MDEzMSwgMHgyNTUwLCAweDAxNDIsIDB4MjU1MSwgMHgzNzBBLAorICAgIDB4MjU1MiwgMHgzNkY4LCAweDI1NTMsIDB4MzcwMSwgMHgyNTU0LCAweDM2RUYsIDB4MjU1NSwgMHgzNkZBLAorICAgIDB4MjU1NiwgMHgzNzAzLCAweDI1NTcsIDB4MzZGMSwgMHgyNTU4LCAweDM2RkUsIDB4MjU1OSwgMHgzNzA3LAorICAgIDB4MjU1QSwgMHgzNkY1LCAweDI1NUIsIDB4MzcwMCwgMHgyNTVDLCAweDM3MDksIDB4MjU1RCwgMHgzNkY3LAorICAgIDB4MjU1RSwgMHgwMTQzLCAweDI1NUYsIDB4MzcwNCwgMHgyNTYwLCAweDM2RjIsIDB4MjU2MSwgMHgwMTQ1LAorICAgIDB4MjU2MiwgMHgzNzA2LCAweDI1NjMsIDB4MzZGNCwgMHgyNTY0LCAweDM2RjksIDB4MjU2NSwgMHgzNzAyLAorICAgIDB4MjU2NiwgMHgzNkYwLCAweDI1NjcsIDB4MzZGRiwgMHgyNTY4LCAweDM3MDgsIDB4MjU2OSwgMHgzNkY2LAorICAgIDB4MjU2QSwgMHgwMTQ0LCAweDI1NkIsIDB4MzcwNSwgMHgyNTZDLCAweDM2RjMsIDB4MjU2RCwgMHgwMTNFLAorICAgIDB4MjU2RSwgMHgwMTNGLCAweDI1NkYsIDB4MDE0MSwgMHgyNTcwLCAweDAxNDAsIDB4MjU3MSwgMHgwMTRBLAorICAgIDB4MjU3MiwgMHgwMTRCLCAweDI1NzMsIDB4MDE0QywgMHgyNTc0LCAweDM1QjAsIDB4MjU4MSwgMHgwMTIyLAorICAgIDB4MjU4MiwgMHgwMTIzLCAweDI1ODMsIDB4MDEyNCwgMHgyNTg0LCAweDAxMjUsIDB4MjU4NSwgMHgwMTI2LAorICAgIDB4MjU4NiwgMHgwMTI3LCAweDI1ODcsIDB4MDEyOCwgMHgyNTg4LCAweDAxMjksIDB4MjU4OSwgMHgwMTMwLAorICAgIDB4MjU4QSwgMHgwMTJGLCAweDI1OEIsIDB4MDEyRSwgMHgyNThDLCAweDAxMkQsIDB4MjU4RCwgMHgwMTJDLAorICAgIDB4MjU4RSwgMHgwMTJCLCAweDI1OEYsIDB4MDEyQSwgMHgyNTkzLCAweDM3MTAsIDB4MjU5NCwgMHgwMTM2LAorICAgIDB4MjU5NSwgMHgwMTM5LCAweDI1QTAsIDB4MDBCRSwgMHgyNUExLCAweDAwQkQsIDB4MjVCMiwgMHgwMEI3LAorICAgIDB4MjVCMywgMHgwMEI2LCAweDI1QkMsIDB4MDBDMCwgMHgyNUJELCAweDAwQkYsIDB4MjVDNiwgMHgwMEJDLAorICAgIDB4MjVDNywgMHgwMEJCLCAweDI1Q0IsIDB4MDBCNCwgMHgyNUNFLCAweDAwQjgsIDB4MjVDRiwgMHgwMEI1LAorICAgIDB4MjVFMiwgMHgwMTQ2LCAweDI1RTMsIDB4MDE0NywgMHgyNUU0LCAweDAxNDksIDB4MjVFNSwgMHgwMTQ4LAorICAgIDB4MjYwNSwgMHgwMEJBLCAweDI2MDYsIDB4MDBCOSwgMHgyNjA5LCAweDAwRjQsIDB4MjY0MCwgMHgwMEYxLAorICAgIDB4MjY0MSwgMHgwMEYzLCAweDI2NDIsIDB4MDBGMiwgMHgyNzNELCAweDM1QzAsIDB4MkYwMCwgMHgwMjUzLAorICAgIDB4MkYwMSwgMHgwMjE4LCAweDJGMDIsIDB4MDIxOSwgMHgyRjAzLCAweDAyMUEsIDB4MkYwNCwgMHgwMjU0LAorICAgIDB4MkYwNSwgMHgwMjFCLCAweDJGMDYsIDB4MDI1QSwgMHgyRjA3LCAweDAyMUMsIDB4MkYwOCwgMHgwMjVCLAorICAgIDB4MkYwOSwgMHgwMjVDLCAweDJGMEEsIDB4MDI1RCwgMHgyRjBCLCAweDAyNUUsIDB4MkYwQywgMHgwMjFELAorICAgIDB4MkYwRCwgMHgwMjFFLCAweDJGMEUsIDB4MDIxRiwgMHgyRjBGLCAweDAyNUYsIDB4MkYxMCwgMHgxNzZFLAorICAgIDB4MkYxMSwgMHgwMjYwLCAweDJGMTIsIDB4MDI2MiwgMHgyRjEzLCAweDAyMjAsIDB4MkYxNCwgMHgwMjYzLAorICAgIDB4MkYxNSwgMHgxNzZGLCAweDJGMTYsIDB4MDIyMSwgMHgyRjE3LCAweDAyNjQsIDB4MkYxOCwgMHgwMjY1LAorICAgIDB4MkYxOSwgMHgwMjIyLCAweDJGMUEsIDB4MTc3MCwgMHgyRjFCLCAweDAyMjMsIDB4MkYxQywgMHgwMjY2LAorICAgIDB4MkYxRCwgMHgwMjc5LCAweDJGMUUsIDB4MTc3NSwgMHgyRjFGLCAweDAyN0EsIDB4MkYyMCwgMHgwMjdCLAorICAgIDB4MkYyMSwgMHgwMjI0LCAweDJGMjIsIDB4MDIyNCwgMHgyRjIzLCAweDAyN0MsIDB4MkYyNCwgMHgwMjdELAorICAgIDB4MkYyNSwgMHgwMjdFLCAweDJGMjYsIDB4MDI3RiwgMHgyRjI3LCAweDAyMjUsIDB4MkYyOCwgMHgwMjgyLAorICAgIDB4MkYyOSwgMHgwMjgzLCAweDJGMkEsIDB4MDI4NCwgMHgyRjJCLCAweDAyODUsIDB4MkYyQywgMHgxNzc2LAorICAgIDB4MkYyRCwgMHgwMjg2LCAweDJGMkUsIDB4MDIyNiwgMHgyRjJGLCAweDAyODgsIDB4MkYzMCwgMHgwMjg5LAorICAgIDB4MkYzMSwgMHgwMjhDLCAweDJGMzIsIDB4MDI4RCwgMHgyRjMzLCAweDAyMjcsIDB4MkYzNCwgMHgwMjI4LAorICAgIDB4MkYzNSwgMHgwMjI5LCAweDJGMzYsIDB4MDI4RSwgMHgyRjM3LCAweDAyOEYsIDB4MkYzOCwgMHgwMjkwLAorICAgIDB4MkYzOSwgMHgwMjJBLCAweDJGM0EsIDB4MDIyQiwgMHgyRjNCLCAweDE3NzcsIDB4MkYzQywgMHgwMkQwLAorICAgIDB4MkYzRCwgMHgwMkQxLCAweDJGM0UsIDB4MDJEMiwgMHgyRjNGLCAweDAyRDMsIDB4MkY0MCwgMHgwMkQ1LAorICAgIDB4MkY0MSwgMHgwMjJDLCAweDJGNDIsIDB4MDJENiwgMHgyRjQzLCAweDAyRDcsIDB4MkY0NCwgMHgwMkQ4LAorICAgIDB4MkY0NSwgMHgwMkQ5LCAweDJGNDYsIDB4MDIyRCwgMHgyRjQ3LCAweDAyREEsIDB4MkY0OCwgMHgwMkRCLAorICAgIDB4MkY0OSwgMHgwMkRDLCAweDJGNEEsIDB4MDJERCwgMHgyRjRCLCAweDAyREUsIDB4MkY0QywgMHgwMkRGLAorICAgIDB4MkY0RCwgMHgwMkUwLCAweDJGNEUsIDB4MTc4QSwgMHgyRjRGLCAweDAyRTEsIDB4MkY1MCwgMHgwMkUyLAorICAgIDB4MkY1MSwgMHgwMkUzLCAweDJGNTIsIDB4MDJFNCwgMHgyRjUzLCAweDE3OEMsIDB4MkY1NCwgMHgwMkU1LAorICAgIDB4MkY1NSwgMHgwMkU2LCAweDJGNTYsIDB4MDJFNywgMHgyRjU3LCAweDAyRTgsIDB4MkY1OCwgMHgwMkU5LAorICAgIDB4MkY1OSwgMHgxNzhELCAweDJGNUEsIDB4MDJFQSwgMHgyRjVCLCAweDAyRUIsIDB4MkY1QywgMHgwMkVDLAorICAgIDB4MkY1RCwgMHgwMkVELCAweDJGNUUsIDB4MDM1NiwgMHgyRjVGLCAweDAzNTcsIDB4MkY2MCwgMHgwMzU4LAorICAgIDB4MkY2MSwgMHgwMzU5LCAweDJGNjIsIDB4MDM1QSwgMHgyRjYzLCAweDAzNUIsIDB4MkY2NCwgMHgwMzVDLAorICAgIDB4MkY2NSwgMHgwMzVFLCAweDJGNjYsIDB4MDM2MiwgMHgyRjY3LCAweDAyMkUsIDB4MkY2OCwgMHgwMjJGLAorICAgIDB4MkY2OSwgMHgwMzYzLCAweDJGNkEsIDB4MDM2NCwgMHgyRjZCLCAweDAzNjUsIDB4MkY2QywgMHgwMzY2LAorICAgIDB4MkY2RCwgMHgwMzY3LCAweDJGNkUsIDB4MDM2OCwgMHgyRjZGLCAweDAzNjksIDB4MkY3MCwgMHgwMzZBLAorICAgIDB4MkY3MSwgMHgxN0IyLCAweDJGNzIsIDB4MDM2QiwgMHgyRjczLCAweDAzNkMsIDB4MkY3NCwgMHgwMzZELAorICAgIDB4MkY3NSwgMHgwM0Y2LCAweDJGNzYsIDB4MDNGNywgMHgyRjc3LCAweDAzRjgsIDB4MkY3OCwgMHgwM0Y5LAorICAgIDB4MkY3OSwgMHgxODEyLCAweDJGN0EsIDB4MDNGQSwgMHgyRjdCLCAweDAzRkIsIDB4MkY3QywgMHgwM0ZDLAorICAgIDB4MkY3RCwgMHgwM0ZFLCAweDJGN0UsIDB4MDNGRiwgMHgyRjdGLCAweDA0MDAsIDB4MkY4MCwgMHgwNDAxLAorICAgIDB4MkY4MSwgMHgwNDAyLCAweDJGODIsIDB4MDQwNSwgMHgyRjgzLCAweDA0MDYsIDB4MkY4NCwgMHgwNDA3LAorICAgIDB4MkY4NSwgMHgwNDA4LCAweDJGODYsIDB4MDQwOSwgMHgyRjg3LCAweDA0MEEsIDB4MkY4OCwgMHgwNDBCLAorICAgIDB4MkY4OSwgMHgwNDBDLCAweDJGOEEsIDB4MDQwRCwgMHgyRjhCLCAweDE4MTMsIDB4MkY4QywgMHgxODE4LAorICAgIDB4MkY4RCwgMHgwNDBGLCAweDJGOEUsIDB4MDQxMCwgMHgyRjhGLCAweDA0MTEsIDB4MkY5MCwgMHgwNDEyLAorICAgIDB4MkY5MSwgMHgxODE5LCAweDJGOTIsIDB4MDUwOCwgMHgyRjkzLCAweDA1MDksIDB4MkY5NCwgMHgwNTBBLAorICAgIDB4MkY5NSwgMHgwNTBCLCAweDJGOTYsIDB4MDUwQywgMHgyRjk3LCAweDA1MEQsIDB4MkY5OCwgMHgxOEU3LAorICAgIDB4MkY5OSwgMHgwNTBFLCAweDJGOUEsIDB4MDUwRiwgMHgyRjlCLCAweDA1MTAsIDB4MkY5QywgMHgwNTExLAorICAgIDB4MkY5RCwgMHgwNTEyLCAweDJGOUUsIDB4MDUxMywgMHgyRjlGLCAweDA1MTQsIDB4MkZBMCwgMHgwNTE1LAorICAgIDB4MkZBMSwgMHgwMjMwLCAweDJGQTIsIDB4MDUxQiwgMHgyRkEzLCAweDA1MjAsIDB4MkZBNCwgMHgwNTIxLAorICAgIDB4MkZBNSwgMHgwNTIyLCAweDJGQTYsIDB4MDY5NiwgMHgyRkE3LCAweDA2OTcsIDB4MkZBOCwgMHgwNjk4LAorICAgIDB4MkZBOSwgMHgwNjk5LCAweDJGQUEsIDB4MDIzMSwgMHgyRkFCLCAweDA2OUYsIDB4MkZBQywgMHgwNkEwLAorICAgIDB4MkZBRSwgMHgwNkEyLCAweDJGQUYsIDB4MDgyNiwgMHgyRkIwLCAweDA4MjcsIDB4MkZCMSwgMHgwODI4LAorICAgIDB4MkZCMiwgMHgwODI5LCAweDJGQjMsIDB4MDgyQSwgMHgyRkI0LCAweDA4MkIsIDB4MkZCNSwgMHgwODJDLAorICAgIDB4MkZCNiwgMHgwODJELCAweDJGQjcsIDB4MDgyRSwgMHgyRkI4LCAweDA4MkYsIDB4MkZCOSwgMHgwODMwLAorICAgIDB4MkZCQSwgMHgwOUY1LCAweDJGQkIsIDB4MDlGNiwgMHgyRkJDLCAweDA5RjcsIDB4MkZCRCwgMHgxRTMzLAorICAgIDB4MkZCRSwgMHgwOUY4LCAweDJGQkYsIDB4MUUzNCwgMHgyRkMwLCAweDA5RjksIDB4MkZDMSwgMHgwOUZBLAorICAgIDB4MkZDMiwgMHgwQkUxLCAweDJGQzMsIDB4MEJFMiwgMHgyRkM0LCAweDBCRTMsIDB4MkZDNSwgMHgwQkU0LAorICAgIDB4MkZDNiwgMHgwQkU1LCAweDJGQzcsIDB4MEJFNiwgMHgyRkM4LCAweDBEQkIsIDB4MkZDOSwgMHgwREJDLAorICAgIDB4MkZDQSwgMHgwREJELCAweDJGQ0IsIDB4MjM2MCwgMHgyRkNDLCAweDI2MTIsIDB4MkZDRCwgMHgwRjdCLAorICAgIDB4MkZDRSwgMHgwRjdDLCAweDJGQ0YsIDB4MEY3RCwgMHgyRkQwLCAweDExMDAsIDB4MkZEMSwgMHgxMTAxLAorICAgIDB4MkZEMiwgMHgxMjg5LCAweDJGRDMsIDB4MTNCMiwgMHgyRkQ0LCAweDEzQjMsIDB4MkZENSwgMHgyRjBELAorICAgIDB4MzAwMCwgMHgwMDYzLCAweDMwMDEsIDB4MDA2NSwgMHgzMDAyLCAweDAwNjYsIDB4MzAwMywgMHgwMEIzLAorICAgIDB4MzAwNSwgMHgzNUJBLCAweDMwMDYsIDB4MzVCQiwgMHgzMDA3LCAweDM1QkMsIDB4MzAwOCwgMHgwMDk0LAorICAgIDB4MzAwOSwgMHgwMDk1LCAweDMwMEEsIDB4MDA5MCwgMHgzMDBCLCAweDAwOTEsIDB4MzAwQywgMHgwMDk4LAorICAgIDB4MzAwRCwgMHgwMDk5LCAweDMwMEUsIDB4MDA5QywgMHgzMDBGLCAweDAwOUQsIDB4MzAxMCwgMHgwMDhDLAorICAgIDB4MzAxMSwgMHgwMDhELCAweDMwMTIsIDB4MDEwNSwgMHgzMDE0LCAweDAwODgsIDB4MzAxNSwgMHgwMDg5LAorICAgIDB4MzAxRCwgMHgwMEFBLCAweDMwMUUsIDB4MDBBQiwgMHgzMDIxLCAweDAxNjEsIDB4MzAyMiwgMHgwMTYyLAorICAgIDB4MzAyMywgMHgwMTYzLCAweDMwMjQsIDB4MDE2NCwgMHgzMDI1LCAweDAxNjUsIDB4MzAyNiwgMHgwMTY2LAorICAgIDB4MzAyNywgMHgwMTY3LCAweDMwMjgsIDB4MDE2OCwgMHgzMDI5LCAweDAxNjksIDB4MzAzOCwgMHgwMTZBLAorICAgIDB4MzAzOSwgMHgwMTZCLCAweDMwM0EsIDB4MDE2QywgMHgzMDQxLCAweDM1QzEsIDB4MzA0MiwgMHgzNUMyLAorICAgIDB4MzA0MywgMHgzNUMzLCAweDMwNDQsIDB4MzVDNCwgMHgzMDQ1LCAweDM1QzUsIDB4MzA0NiwgMHgzNUM2LAorICAgIDB4MzA0NywgMHgzNUM3LCAweDMwNDgsIDB4MzVDOCwgMHgzMDQ5LCAweDM1QzksIDB4MzA0QSwgMHgzNUNBLAorICAgIDB4MzA0QiwgMHgzNUNCLCAweDMwNEMsIDB4MzVDQywgMHgzMDRELCAweDM1Q0QsIDB4MzA0RSwgMHgzNUNFLAorICAgIDB4MzA0RiwgMHgzNUNGLCAweDMwNTAsIDB4MzVEMCwgMHgzMDUxLCAweDM1RDEsIDB4MzA1MiwgMHgzNUQyLAorICAgIDB4MzA1MywgMHgzNUQzLCAweDMwNTQsIDB4MzVENCwgMHgzMDU1LCAweDM1RDUsIDB4MzA1NiwgMHgzNUQ2LAorICAgIDB4MzA1NywgMHgzNUQ3LCAweDMwNTgsIDB4MzVEOCwgMHgzMDU5LCAweDM1RDksIDB4MzA1QSwgMHgzNURBLAorICAgIDB4MzA1QiwgMHgzNURCLCAweDMwNUMsIDB4MzVEQywgMHgzMDVELCAweDM1REQsIDB4MzA1RSwgMHgzNURFLAorICAgIDB4MzA1RiwgMHgzNURGLCAweDMwNjAsIDB4MzVFMCwgMHgzMDYxLCAweDM1RTEsIDB4MzA2MiwgMHgzNUUyLAorICAgIDB4MzA2MywgMHgzNUUzLCAweDMwNjQsIDB4MzVFNCwgMHgzMDY1LCAweDM1RTUsIDB4MzA2NiwgMHgzNUU2LAorICAgIDB4MzA2NywgMHgzNUU3LCAweDMwNjgsIDB4MzVFOCwgMHgzMDY5LCAweDM1RTksIDB4MzA2QSwgMHgzNUVBLAorICAgIDB4MzA2QiwgMHgzNUVCLCAweDMwNkMsIDB4MzVFQywgMHgzMDZELCAweDM1RUQsIDB4MzA2RSwgMHgzNUVFLAorICAgIDB4MzA2RiwgMHgzNUVGLCAweDMwNzAsIDB4MzVGMCwgMHgzMDcxLCAweDM1RjEsIDB4MzA3MiwgMHgzNUYyLAorICAgIDB4MzA3MywgMHgzNUYzLCAweDMwNzQsIDB4MzVGNCwgMHgzMDc1LCAweDM1RjUsIDB4MzA3NiwgMHgzNUY2LAorICAgIDB4MzA3NywgMHgzNUY3LCAweDMwNzgsIDB4MzVGOCwgMHgzMDc5LCAweDM1RjksIDB4MzA3QSwgMHgzNUZBLAorICAgIDB4MzA3QiwgMHgzNUZCLCAweDMwN0MsIDB4MzVGQywgMHgzMDdELCAweDM1RkQsIDB4MzA3RSwgMHgzNUZFLAorICAgIDB4MzA3RiwgMHgzNUZGLCAweDMwODAsIDB4MzYwMCwgMHgzMDgxLCAweDM2MDEsIDB4MzA4MiwgMHgzNjAyLAorICAgIDB4MzA4MywgMHgzNjAzLCAweDMwODQsIDB4MzYwNCwgMHgzMDg1LCAweDM2MDUsIDB4MzA4NiwgMHgzNjA2LAorICAgIDB4MzA4NywgMHgzNjA3LCAweDMwODgsIDB4MzYwOCwgMHgzMDg5LCAweDM2MDksIDB4MzA4QSwgMHgzNjBBLAorICAgIDB4MzA4QiwgMHgzNjBCLCAweDMwOEMsIDB4MzYwQywgMHgzMDhELCAweDM2MEQsIDB4MzA4RSwgMHgzNjBFLAorICAgIDB4MzA4RiwgMHgzNjBGLCAweDMwOTAsIDB4MzYxMCwgMHgzMDkxLCAweDM2MTEsIDB4MzA5MiwgMHgzNjEyLAorICAgIDB4MzA5MywgMHgzNjEzLCAweDMwOUQsIDB4MzVCNywgMHgzMDlFLCAweDM1QjgsIDB4MzBBMSwgMHgzNjE0LAorICAgIDB4MzBBMiwgMHgzNjE1LCAweDMwQTMsIDB4MzYxNiwgMHgzMEE0LCAweDM2MTcsIDB4MzBBNSwgMHgzNjE4LAorICAgIDB4MzBBNiwgMHgzNjE5LCAweDMwQTcsIDB4MzYxQSwgMHgzMEE4LCAweDM2MUIsIDB4MzBBOSwgMHgzNjFDLAorICAgIDB4MzBBQSwgMHgzNjFELCAweDMwQUIsIDB4MzYxRSwgMHgzMEFDLCAweDM2MUYsIDB4MzBBRCwgMHgzNjIwLAorICAgIDB4MzBBRSwgMHgzNjIxLCAweDMwQUYsIDB4MzYyMiwgMHgzMEIwLCAweDM2MjMsIDB4MzBCMSwgMHgzNjI0LAorICAgIDB4MzBCMiwgMHgzNjI1LCAweDMwQjMsIDB4MzYyNiwgMHgzMEI0LCAweDM2MjcsIDB4MzBCNSwgMHgzNjI4LAorICAgIDB4MzBCNiwgMHgzNjI5LCAweDMwQjcsIDB4MzYyQSwgMHgzMEI4LCAweDM2MkIsIDB4MzBCOSwgMHgzNjJDLAorICAgIDB4MzBCQSwgMHgzNjJELCAweDMwQkIsIDB4MzYyRSwgMHgzMEJDLCAweDM2MkYsIDB4MzBCRCwgMHgzNjMwLAorICAgIDB4MzBCRSwgMHgzNjMxLCAweDMwQkYsIDB4MzYzMiwgMHgzMEMwLCAweDM2MzMsIDB4MzBDMSwgMHgzNjM0LAorICAgIDB4MzBDMiwgMHgzNjM1LCAweDMwQzMsIDB4MzYzNiwgMHgzMEM0LCAweDM2MzcsIDB4MzBDNSwgMHgzNjM4LAorICAgIDB4MzBDNiwgMHgzNjM5LCAweDMwQzcsIDB4MzYzQSwgMHgzMEM4LCAweDM2M0IsIDB4MzBDOSwgMHgzNjNDLAorICAgIDB4MzBDQSwgMHgzNjNELCAweDMwQ0IsIDB4MzYzRSwgMHgzMENDLCAweDM2M0YsIDB4MzBDRCwgMHgzNjQwLAorICAgIDB4MzBDRSwgMHgzNjQxLCAweDMwQ0YsIDB4MzY0MiwgMHgzMEQwLCAweDM2NDMsIDB4MzBEMSwgMHgzNjQ0LAorICAgIDB4MzBEMiwgMHgzNjQ1LCAweDMwRDMsIDB4MzY0NiwgMHgzMEQ0LCAweDM2NDcsIDB4MzBENSwgMHgzNjQ4LAorICAgIDB4MzBENiwgMHgzNjQ5LCAweDMwRDcsIDB4MzY0QSwgMHgzMEQ4LCAweDM2NEIsIDB4MzBEOSwgMHgzNjRDLAorICAgIDB4MzBEQSwgMHgzNjRELCAweDMwREIsIDB4MzY0RSwgMHgzMERDLCAweDM2NEYsIDB4MzBERCwgMHgzNjUwLAorICAgIDB4MzBERSwgMHgzNjUxLCAweDMwREYsIDB4MzY1MiwgMHgzMEUwLCAweDM2NTMsIDB4MzBFMSwgMHgzNjU0LAorICAgIDB4MzBFMiwgMHgzNjU1LCAweDMwRTMsIDB4MzY1NiwgMHgzMEU0LCAweDM2NTcsIDB4MzBFNSwgMHgzNjU4LAorICAgIDB4MzBFNiwgMHgzNjU5LCAweDMwRTcsIDB4MzY1QSwgMHgzMEU4LCAweDM2NUIsIDB4MzBFOSwgMHgzNjVDLAorICAgIDB4MzBFQSwgMHgzNjVELCAweDMwRUIsIDB4MzY1RSwgMHgzMEVDLCAweDM2NUYsIDB4MzBFRCwgMHgzNjYwLAorICAgIDB4MzBFRSwgMHgzNjYxLCAweDMwRUYsIDB4MzY2MiwgMHgzMEYwLCAweDM2NjMsIDB4MzBGMSwgMHgzNjY0LAorICAgIDB4MzBGMiwgMHgzNjY1LCAweDMwRjMsIDB4MzY2NiwgMHgzMEY0LCAweDM2NjcsIDB4MzBGNSwgMHgzNjY4LAorICAgIDB4MzBGNiwgMHgzNjY5LCAweDMwRkMsIDB4MzVCRCwgMHgzMEZELCAweDM1QjUsIDB4MzBGRSwgMHgzNUI2LAorICAgIDB4MzEwNSwgMHgwMUQxLCAweDMxMDYsIDB4MDFEMiwgMHgzMTA3LCAweDAxRDMsIDB4MzEwOCwgMHgwMUQ0LAorICAgIDB4MzEwOSwgMHgwMUQ1LCAweDMxMEEsIDB4MDFENiwgMHgzMTBCLCAweDAxRDcsIDB4MzEwQywgMHgwMUQ4LAorICAgIDB4MzEwRCwgMHgwMUQ5LCAweDMxMEUsIDB4MDFEQSwgMHgzMTBGLCAweDAxREIsIDB4MzExMCwgMHgwMURDLAorICAgIDB4MzExMSwgMHgwMURELCAweDMxMTIsIDB4MDFERSwgMHgzMTEzLCAweDAxREYsIDB4MzExNCwgMHgwMUUwLAorICAgIDB4MzExNSwgMHgwMUUxLCAweDMxMTYsIDB4MDFFMiwgMHgzMTE3LCAweDAxRTMsIDB4MzExOCwgMHgwMUU0LAorICAgIDB4MzExOSwgMHgwMUU1LCAweDMxMUEsIDB4MDFFNiwgMHgzMTFCLCAweDAxRTcsIDB4MzExQywgMHgwMUU4LAorICAgIDB4MzExRCwgMHgwMUU5LCAweDMxMUUsIDB4MDFFQSwgMHgzMTFGLCAweDAxRUIsIDB4MzEyMCwgMHgwMUVDLAorICAgIDB4MzEyMSwgMHgwMUVELCAweDMxMjIsIDB4MDFFRSwgMHgzMTIzLCAweDAxRUYsIDB4MzEyNCwgMHgwMUYwLAorICAgIDB4MzEyNSwgMHgwMUYxLCAweDMxMjYsIDB4MDFGMiwgMHgzMTI3LCAweDAxRjMsIDB4MzEyOCwgMHgwMUY0LAorICAgIDB4MzEyOSwgMHgwMUY1LCAweDMyMzEsIDB4MzZFNSwgMHgzMkEzLCAweDAwQzEsIDB4MzM4RSwgMHgwMTE1LAorICAgIDB4MzM4RiwgMHgwMTE2LCAweDMzOUMsIDB4MDExMCwgMHgzMzlELCAweDAxMTEsIDB4MzM5RSwgMHgwMTEyLAorICAgIDB4MzNBMSwgMHgwMTE0LCAweDMzQzQsIDB4MDExNywgMHgzM0NFLCAweDAxMTMsIDB4MzNEMSwgMHgwMEVDLAorICAgIDB4MzNEMiwgMHgwMEVCLCAweDMzRDUsIDB4MDEwRiwgMHgzNjFELCAweDM2QjcsIDB4NDQ5MSwgMHgzNkI0LAorICAgIDB4NEUwMCwgMHgwMjUzLCAweDRFMDEsIDB4MDI1NSwgMHg0RTAzLCAweDAyNTYsIDB4NEUwNywgMHgxNzcxLAorICAgIDB4NEUwOCwgMHgwMjY5LCAweDRFMDksIDB4MDI2NywgMHg0RTBBLCAweDAyNkEsIDB4NEUwQiwgMHgwMjY4LAorICAgIDB4NEUwQywgMHgxNzcyLCAweDRFMEQsIDB4MDI5NCwgMHg0RTBFLCAweDE3N0EsIDB4NEUwRiwgMHgxNzc4LAorICAgIDB4NEUxMCwgMHgwMjkzLCAweDRFMTEsIDB4MDI5MiwgMHg0RTE0LCAweDAyRjIsIDB4NEUxNSwgMHgwMkYxLAorICAgIDB4NEUxNiwgMHgwMkYwLCAweDRFMTgsIDB4MDJGMywgMHg0RTE5LCAweDAyRUYsIDB4NEUxRSwgMHgwMzZFLAorICAgIDB4NEUxRiwgMHgwMzZGLCAweDRFMjYsIDB4MDUyOCwgMHg0RTI4LCAweDAyMTgsIDB4NEUyQiwgMHgwMjZCLAorICAgIDB4NEUyRCwgMHgwMjk1LCAweDRFMkUsIDB4MTc3QiwgMHg0RTMwLCAweDAyOTYsIDB4NEUzMSwgMHgxNzhFLAorICAgIDB4NEUzMiwgMHgwNDE1LCAweDRFMzMsIDB4MThGNCwgMHg0RTM2LCAweDAyMTksIDB4NEUzOCwgMHgwMjZDLAorICAgIDB4NEUzOSwgMHgwMjk3LCAweDRFM0IsIDB4MDJGNCwgMHg0RTNDLCAweDE3OEYsIDB4NEUzRiwgMHgwMjFBLAorICAgIDB4NEU0MSwgMHgzNkFGLCAweDRFNDIsIDB4MTc2QywgMHg0RTQzLCAweDAyNTcsIDB4NEU0NSwgMHgwMjZFLAorICAgIDB4NEU0NywgMHgxNzczLCAweDRFNDgsIDB4MDI2RiwgMHg0RTRCLCAweDAyOTgsIDB4NEU0RCwgMHgwMkY1LAorICAgIDB4NEU0RSwgMHgwMkY3LCAweDRFNEYsIDB4MDJGNiwgMHg0RTUyLCAweDAzNzAsIDB4NEU1MywgMHgwMzcxLAorICAgIDB4NEU1NiwgMHgwNTI5LCAweDRFNTgsIDB4MDgzMSwgMHg0RTU5LCAweDAyNTQsIDB4NEU1QSwgMHgzNkIxLAorICAgIDB4NEU1QywgMHgxNzZELCAweDRFNUQsIDB4MDI1OCwgMHg0RTVFLCAweDAyNzEsIDB4NEU1RiwgMHgwMjcwLAorICAgIDB4NEU2OSwgMHgwMzcyLCAweDRFNzMsIDB4MDUyQSwgMHg0RTdFLCAweDA5RkIsIDB4NEU3RiwgMHgxRTM1LAorICAgIDB4NEU4MiwgMHgwREJFLCAweDRFODMsIDB4MjM2MSwgMHg0RTg0LCAweDIzNjIsIDB4NEU4NSwgMHgwMjFCLAorICAgIDB4NEU4NiwgMHgwMjU5LCAweDRFODgsIDB4MDI5QSwgMHg0RThCLCAweDA1MkIsIDB4NEU4QywgMHgwMjVBLAorICAgIDB4NEU4RCwgMHgxNzc0LCAweDRFOEUsIDB4MDI3MiwgMHg0RTkxLCAweDAyOUIsIDB4NEU5MiwgMHgwMjlELAorICAgIDB4NEU5MywgMHgxNzdDLCAweDRFOTQsIDB4MDI5RSwgMHg0RTk1LCAweDAyOUMsIDB4NEU5OSwgMHgwMzczLAorICAgIDB4NEU5QiwgMHgwNTJDLCAweDRFOUUsIDB4MDUyRCwgMHg0RTlGLCAweDA2QTMsIDB4NEVBMCwgMHgwMjFDLAorICAgIDB4NEVBMSwgMHgwMjczLCAweDRFQTIsIDB4MDI5RiwgMHg0RUE0LCAweDAzNzQsIDB4NEVBNSwgMHgwMzc2LAorICAgIDB4NEVBNiwgMHgwMzc1LCAweDRFQTgsIDB4MDQxNiwgMHg0RUFCLCAweDA1MkUsIDB4NEVBQywgMHgwNTJGLAorICAgIDB4NEVBRCwgMHgwNkE0LCAweDRFQUUsIDB4MDZBNSwgMHg0RUIzLCAweDA4MzIsIDB4NEVCNiwgMHgyMzYzLAorICAgIDB4NEVCOSwgMHgzMzc3LCAweDRFQkEsIDB4MDI1QiwgMHg0RUMwLCAweDAyQTEsIDB4NEVDMSwgMHgwMkEwLAorICAgIDB4NEVDMiwgMHgxNzdELCAweDRFQzMsIDB4MDJBMiwgMHg0RUM0LCAweDAyQTgsIDB4NEVDNiwgMHgwMkEzLAorICAgIDB4NEVDNywgMHgwMkE0LCAweDRFQzgsIDB4MTc3RiwgMHg0RUM5LCAweDE3N0UsIDB4NEVDQSwgMHgwMkE2LAorICAgIDB4NEVDQiwgMHgwMkE3LCAweDRFQ0QsIDB4MDJBNSwgMHg0RUQ0LCAweDAyRkEsIDB4NEVENSwgMHgwMkZCLAorICAgIDB4NEVENiwgMHgwMkZDLCAweDRFRDcsIDB4MDJGRCwgMHg0RUQ4LCAweDAyRjksIDB4NEVEOSwgMHgwMzAwLAorICAgIDB4NEVEQSwgMHgxNzk1LCAweDRFREMsIDB4MTc5MSwgMHg0RURELCAweDE3OTQsIDB4NEVERSwgMHgwMzAxLAorICAgIDB4NEVERiwgMHgwMzExLCAweDRFRTEsIDB4MTc5MywgMHg0RUUzLCAweDAyRkUsIDB4NEVFNCwgMHgwMkZGLAorICAgIDB4NEVFNSwgMHgwMkY4LCAweDRFRTgsIDB4MTc5MCwgMHg0RUU5LCAweDE3OTIsIDB4NEVGMCwgMHgwMzgzLAorICAgIDB4NEVGMSwgMHgxN0JBLCAweDRFRjIsIDB4MDM4MCwgMHg0RUYzLCAweDAzODQsIDB4NEVGNCwgMHgxN0M0LAorICAgIDB4NEVGNSwgMHgxN0I4LCAweDRFRjYsIDB4MDM4MSwgMHg0RUY3LCAweDE3QkMsIDB4NEVGQiwgMHgwMzgyLAorICAgIDB4NEVGRCwgMHgwMzg1LCAweDRFRkYsIDB4MDM3NywgMHg0RjAwLCAweDE3QkIsIDB4NEYwMSwgMHgwMzg2LAorICAgIDB4NEYwMiwgMHgxN0JGLCAweDRGMDQsIDB4MTdDMywgMHg0RjA1LCAweDE3QzAsIDB4NEYwOCwgMHgxN0JELAorICAgIDB4NEYwOSwgMHgwMzc4LCAweDRGMEEsIDB4MDM3QSwgMHg0RjBCLCAweDAzODcsIDB4NEYwRCwgMHgwMzdDLAorICAgIDB4NEYwRSwgMHgxN0I1LCAweDRGMEYsIDB4MDM3RiwgMHg0RjEwLCAweDAzN0QsIDB4NEYxMSwgMHgwMzdFLAorICAgIDB4NEYxMiwgMHgxN0M1LCAweDRGMTMsIDB4MTdDMiwgMHg0RjE0LCAweDE3QjksIDB4NEYxNSwgMHgwMzdCLAorICAgIDB4NEYxOCwgMHgxN0I2LCAweDRGMTksIDB4MDM3OSwgMHg0RjFELCAweDE3QkUsIDB4NEYyMiwgMHgxN0MxLAorICAgIDB4NEYyQywgMHgxN0I3LCAweDRGMkQsIDB4MTgyRiwgMHg0RjJGLCAweDA0MkMsIDB4NEYzMCwgMHgwNDFGLAorICAgIDB4NEYzMywgMHgxODMwLCAweDRGMzQsIDB4MDQxQywgMHg0RjM2LCAweDA0MkUsIDB4NEYzOCwgMHgwNDI0LAorICAgIDB4NEYzQSwgMHgwNDIzLCAweDRGM0IsIDB4MTgyNCwgMHg0RjNDLCAweDA0MjcsIDB4NEYzRCwgMHgwNDIyLAorICAgIDB4NEYzRSwgMHgxODI5LCAweDRGM0YsIDB4MTgzMSwgMHg0RjQxLCAweDE4MkQsIDB4NEY0MywgMHgwNDI1LAorICAgIDB4NEY0NiwgMHgwNDI4LCAweDRGNDcsIDB4MDQxOSwgMHg0RjQ4LCAweDA0MzEsIDB4NEY0OSwgMHgxODI2LAorICAgIDB4NEY0QywgMHgxOTAwLCAweDRGNEQsIDB4MDQxNywgMHg0RjRFLCAweDA0MkQsIDB4NEY0RiwgMHgwNDE4LAorICAgIDB4NEY1MCwgMHgwNDIwLCAweDRGNTEsIDB4MDQyMSwgMHg0RjUyLCAweDE4MkIsIDB4NEY1MywgMHgxODI3LAorICAgIDB4NEY1NCwgMHgwNDI2LCAweDRGNTUsIDB4MDQxRSwgMHg0RjU2LCAweDE4MjMsIDB4NEY1NywgMHgwNDFBLAorICAgIDB4NEY1OCwgMHgxODJFLCAweDRGNTksIDB4MDQyRiwgMHg0RjVBLCAweDA0MzIsIDB4NEY1QiwgMHgwNDFELAorICAgIDB4NEY1QywgMHgwNDJBLCAweDRGNUQsIDB4MDQzMCwgMHg0RjVFLCAweDA0MUIsIDB4NEY1RiwgMHgxODJDLAorICAgIDB4NEY2MCwgMHgwNDJCLCAweDRGNjEsIDB4MTgzMiwgMHg0RjYyLCAweDE4MjUsIDB4NEY2MywgMHgwNDI5LAorICAgIDB4NEY2NCwgMHgxODI4LCAweDRGNjcsIDB4MTgyQSwgMHg0RjY5LCAweDA1M0QsIDB4NEY2QSwgMHgxOTAyLAorICAgIDB4NEY2QiwgMHgxOTBFLCAweDRGNkMsIDB4MDUzNSwgMHg0RjZFLCAweDE5MEYsIDB4NEY2RiwgMHgwNTMwLAorICAgIDB4NEY3MCwgMHgwNTNBLCAweDRGNzMsIDB4MDUzMywgMHg0Rjc0LCAweDE4RkMsIDB4NEY3NSwgMHgwNTNCLAorICAgIDB4NEY3NiwgMHgxOEZCLCAweDRGNzcsIDB4MThGRiwgMHg0Rjc4LCAweDE5MDYsIDB4NEY3OSwgMHgxOTA0LAorICAgIDB4NEY3QSwgMHgwNTQzLCAweDRGN0IsIDB4MDUzRSwgMHg0RjdDLCAweDE4RjYsIDB4NEY3RCwgMHgxOEY4LAorICAgIDB4NEY3RSwgMHgwNTQwLCAweDRGN0YsIDB4MDUzNCwgMHg0RjgwLCAweDE4RjksIDB4NEY4MSwgMHgxOTA1LAorICAgIDB4NEY4MiwgMHgxOTBDLCAweDRGODMsIDB4MDUzOSwgMHg0Rjg0LCAweDE4RkUsIDB4NEY4NSwgMHgxOEY3LAorICAgIDB4NEY4NiwgMHgwNTM4LCAweDRGODcsIDB4MThGQSwgMHg0Rjg4LCAweDA1M0MsIDB4NEY4OSwgMHgxOEZELAorICAgIDB4NEY4QiwgMHgwNTM3LCAweDRGOEQsIDB4MDUzMiwgMHg0RjhGLCAweDA1NDEsIDB4NEY5MCwgMHgxOTA3LAorICAgIDB4NEY5MSwgMHgwNTQyLCAweDRGOTIsIDB4MTkwQiwgMHg0Rjk0LCAweDE5MDksIDB4NEY5NSwgMHgxOTBELAorICAgIDB4NEY5NiwgMHgwNTNGLCAweDRGOTcsIDB4MTkwMSwgMHg0Rjk4LCAweDE4RjUsIDB4NEY5QSwgMHgxOTAzLAorICAgIDB4NEY5QiwgMHgwNTM2LCAweDRGOUMsIDB4MTkwOCwgMHg0RjlELCAweDA1MzEsIDB4NEY5RSwgMHgxOTBBLAorICAgIDB4NEZBRSwgMHgwNkI0LCAweDRGQUYsIDB4MDZBOCwgMHg0RkIyLCAweDFBNUQsIDB4NEZCMywgMHgxQTY1LAorICAgIDB4NEZCNSwgMHgwNkE3LCAweDRGQjYsIDB4MDZBRiwgMHg0RkI3LCAweDA2QkIsIDB4NEZCOSwgMHgxQTZCLAorICAgIDB4NEZCQSwgMHgxQTY5LCAweDRGQkIsIDB4MUE2NCwgMHg0RkJGLCAweDA2QTksIDB4NEZDMCwgMHgxQTZBLAorICAgIDB4NEZDMSwgMHgxQTYwLCAweDRGQzIsIDB4MDZCNywgMHg0RkMzLCAweDA2QUUsIDB4NEZDNCwgMHgwNkI2LAorICAgIDB4NEZDNSwgMHgxQTVCLCAweDRGQzcsIDB4MUE2NywgMHg0RkM5LCAweDFBNUUsIDB4NEZDQSwgMHgwNkIyLAorICAgIDB4NEZDQiwgMHgxQTVGLCAweDRGQ0QsIDB4MUE1QSwgMHg0RkNFLCAweDA2QjksIDB4NEZDRiwgMHgwNkFDLAorICAgIDB4NEZEMCwgMHgwNkI1LCAweDRGRDEsIDB4MDZBQiwgMHg0RkQzLCAweDFBNUMsIDB4NEZENCwgMHgxQTYxLAorICAgIDB4NEZENiwgMHgxQTY4LCAweDRGRDcsIDB4MDZCMywgMHg0RkQ4LCAweDA2QjAsIDB4NEZEOSwgMHgxQTYzLAorICAgIDB4NEZEQSwgMHgwNkI4LCAweDRGREIsIDB4MUE2NiwgMHg0RkRDLCAweDFBNjIsIDB4NEZERCwgMHgwNkFELAorICAgIDB4NEZERSwgMHgwNkJBLCAweDRGREYsIDB4MDZCMSwgMHg0RkUwLCAweDA2QUEsIDB4NEZFMSwgMHgwNkE2LAorICAgIDB4NEZFQywgMHgxQTZDLCAweDRGRUUsIDB4MDg0QywgMHg0RkVGLCAweDA4MzYsIDB4NEZGMSwgMHgwODQ2LAorICAgIDB4NEZGMywgMHgwODRCLCAweDRGRjQsIDB4MUMyNCwgMHg0RkY1LCAweDFDMjMsIDB4NEZGNiwgMHgxQzI4LAorICAgIDB4NEZGNywgMHgxQzI5LCAweDRGRjgsIDB4MDgzOSwgMHg0RkZBLCAweDA4NDIsIDB4NEZGRSwgMHgwODRGLAorICAgIDB4NTAwMCwgMHgwODQzLCAweDUwMDUsIDB4MUMxRCwgMHg1MDA2LCAweDA4M0MsIDB4NTAwNywgMHgxQzFFLAorICAgIDB4NTAwOSwgMHgwODUxLCAweDUwMEIsIDB4MDg0OCwgMHg1MDBDLCAweDA4MzMsIDB4NTAwRCwgMHgwODM0LAorICAgIDB4NTAwRSwgMHgxQzMxLCAweDUwMEYsIDB4MEEwQywgMHg1MDExLCAweDA4NDEsIDB4NTAxMiwgMHgwODQwLAorICAgIDB4NTAxMywgMHgxQzFGLCAweDUwMTQsIDB4MDg0NCwgMHg1MDE1LCAweDFFNDUsIDB4NTAxNiwgMHgwODNCLAorICAgIDB4NTAxNywgMHgxQzJBLCAweDUwMTgsIDB4MDg0QSwgMHg1MDE5LCAweDA4NDksIDB4NTAxQSwgMHgwODNGLAorICAgIDB4NTAxQiwgMHgxQzIyLCAweDUwMUMsIDB4MUMyQiwgMHg1MDFFLCAweDFDMUMsIDB4NTAxRiwgMHgwODNFLAorICAgIDB4NTAyMCwgMHgxQzJDLCAweDUwMjEsIDB4MDg0NywgMHg1MDIyLCAweDFDMjAsIDB4NTAyMywgMHgwODM1LAorICAgIDB4NTAyNSwgMHgwODM4LCAweDUwMjYsIDB4MDgzNywgMHg1MDI3LCAweDFDMkQsIDB4NTAyOCwgMHgwODQ1LAorICAgIDB4NTAyOSwgMHgwODNBLCAweDUwMkEsIDB4MDg0RSwgMHg1MDJCLCAweDA4NTAsIDB4NTAyQywgMHgxQzI3LAorICAgIDB4NTAyRCwgMHgwODRELCAweDUwMkYsIDB4MUMyRiwgMHg1MDMwLCAweDFDMjEsIDB4NTAzMSwgMHgxQzMwLAorICAgIDB4NTAzMywgMHgxQzI1LCAweDUwMzUsIDB4MUMyRSwgMHg1MDM3LCAweDFDMjYsIDB4NTAzQywgMHgwODNELAorICAgIDB4NTA0MCwgMHgxRTRELCAweDUwNDEsIDB4MUU0MSwgMHg1MDQzLCAweDBBMDAsIDB4NTA0NSwgMHgxRTQ2LAorICAgIDB4NTA0NiwgMHgxRTRDLCAweDUwNDcsIDB4MDlGRiwgMHg1MDQ4LCAweDFFM0YsIDB4NTA0OSwgMHgwQTAzLAorICAgIDB4NTA0QSwgMHgxRTQzLCAweDUwNEIsIDB4MUUzQywgMHg1MDRDLCAweDBBMDEsIDB4NTA0RCwgMHgxRTQwLAorICAgIDB4NTA0RSwgMHgwQTA2LCAweDUwNEYsIDB4MEEwQiwgMHg1MDUxLCAweDFFNTEsIDB4NTA1MywgMHgxRTNCLAorICAgIDB4NTA1NSwgMHgwQTA3LCAweDUwNTcsIDB4MUU1MCwgMHg1MDVBLCAweDBBMDIsIDB4NTA1QiwgMHgxRTQyLAorICAgIDB4NTA1QywgMHgwOUZFLCAweDUwNUQsIDB4MUUzRCwgMHg1MDVFLCAweDFFMzksIDB4NTA1RiwgMHgxRTQ3LAorICAgIDB4NTA2MCwgMHgxRTNBLCAweDUwNjEsIDB4MUUzOCwgMHg1MDYyLCAweDFFNDQsIDB4NTA2MywgMHgxRTRBLAorICAgIDB4NTA2NCwgMHgxRTRCLCAweDUwNjUsIDB4MEEwNCwgMHg1MDY4LCAweDIwQjgsIDB4NTA2OSwgMHgxRTQ4LAorICAgIDB4NTA2QSwgMHgxRTM3LCAweDUwNkIsIDB4MUU0OSwgMHg1MDZELCAweDBBMEUsIDB4NTA2RSwgMHgxRTRFLAorICAgIDB4NTA2RiwgMHgwQTBELCAweDUwNzAsIDB4MUUzNiwgMHg1MDcyLCAweDFFM0UsIDB4NTA3MywgMHgxRTRGLAorICAgIDB4NTA3NCwgMHgwQTA5LCAweDUwNzUsIDB4MEEwOCwgMHg1MDc2LCAweDBBMDUsIDB4NTA3NywgMHgwQTBBLAorICAgIDB4NTA3QSwgMHgwOUZDLCAweDUwN0QsIDB4MDlGRCwgMHg1MDgwLCAweDBCRUMsIDB4NTA4MiwgMHgyMEJCLAorICAgIDB4NTA4MywgMHgyMEI0LCAweDUwODUsIDB4MEJFOSwgMHg1MDg3LCAweDIwQkMsIDB4NTA4QiwgMHgyMEIyLAorICAgIDB4NTA4QywgMHgyMEI1LCAweDUwOEQsIDB4MEJFOCwgMHg1MDhFLCAweDIwQjYsIDB4NTA5MSwgMHgwQkVCLAorICAgIDB4NTA5MiwgMHgyMEJBLCAweDUwOTQsIDB4MjBCMCwgMHg1MDk1LCAweDIwQUYsIDB4NTA5NiwgMHgwQkVELAorICAgIDB4NTA5OCwgMHgwQkVFLCAweDUwOTksIDB4MEJFQSwgMHg1MDlBLCAweDBCRUYsIDB4NTA5QiwgMHgyMEFFLAorICAgIDB4NTA5QywgMHgyMEI5LCAweDUwOUQsIDB4MjBCNywgMHg1MDlFLCAweDIwQjEsIDB4NTBBMiwgMHgwQkU3LAorICAgIDB4NTBBMywgMHgyMEIzLCAweDUwQUMsIDB4MERDNSwgMHg1MEFELCAweDBEQkYsIDB4NTBBRSwgMHgyMzY3LAorICAgIDB4NTBBRiwgMHgwREM4LCAweDUwQjAsIDB4MjM2RCwgMHg1MEIxLCAweDIzNzAsIDB4NTBCMiwgMHgwREMxLAorICAgIDB4NTBCMywgMHgwREMyLCAweDUwQjQsIDB4MjM2QSwgMHg1MEI1LCAweDBEQzAsIDB4NTBCNiwgMHgyMzczLAorICAgIDB4NTBCNywgMHgwREM2LCAweDUwQjgsIDB4MjM3NCwgMHg1MEJBLCAweDIzNkYsIDB4NTBCQiwgMHgwREM3LAorICAgIDB4NTBCRCwgMHgyMzY0LCAweDUwQkUsIDB4MERDNCwgMHg1MEJGLCAweDIzNjUsIDB4NTBDMSwgMHgyMzZFLAorICAgIDB4NTBDMiwgMHgyMzZDLCAweDUwQzQsIDB4MjM2OCwgMHg1MEM1LCAweDBEQzMsIDB4NTBDNiwgMHgyMzY2LAorICAgIDB4NTBDNywgMHgwREM5LCAweDUwQzgsIDB4MjM2QiwgMHg1MEM5LCAweDIzNzIsIDB4NTBDQSwgMHgyMzY5LAorICAgIDB4NTBDQiwgMHgyMzcxLCAweDUwQ0UsIDB4MEY4OCwgMHg1MENGLCAweDBGODUsIDB4NTBEMSwgMHgwRjg2LAorICAgIDB4NTBEMywgMHgyNjFDLCAweDUwRDQsIDB4MjYxNCwgMHg1MEQ1LCAweDBGODQsIDB4NTBENiwgMHgwRjgxLAorICAgIDB4NTBENywgMHgyNjE1LCAweDUwREEsIDB4MEY4MywgMHg1MERCLCAweDI2MTgsIDB4NTBERCwgMHgyNjFBLAorICAgIDB4NTBFMCwgMHgyNjIxLCAweDUwRTMsIDB4MjYyMCwgMHg1MEU0LCAweDI2MUIsIDB4NTBFNSwgMHgwRjgwLAorICAgIDB4NTBFNiwgMHgyNjEzLCAweDUwRTcsIDB4MEY3RSwgMHg1MEU4LCAweDI2MTYsIDB4NTBFOSwgMHgwRjg5LAorICAgIDB4NTBFQSwgMHgyNjE5LCAweDUwRUMsIDB4MjYxRCwgMHg1MEVELCAweDBGODIsIDB4NTBFRSwgMHgwRjdGLAorICAgIDB4NTBFRiwgMHgyNjFGLCAweDUwRjAsIDB4MjYxRSwgMHg1MEYxLCAweDBGODcsIDB4NTBGMywgMHgyNjE3LAorICAgIDB4NTBGNSwgMHgxMTA1LCAweDUwRjYsIDB4Mjg4MywgMHg1MEY4LCAweDI4ODAsIDB4NTBGOSwgMHgxMTA2LAorICAgIDB4NTBGQiwgMHgxMTA0LCAweDUwRkQsIDB4Mjg4NywgMHg1MEZFLCAweDI4ODQsIDB4NTBGRiwgMHgyODdELAorICAgIDB4NTEwMCwgMHgxMTAzLCAweDUxMDIsIDB4MTEwNywgMHg1MTAzLCAweDI4N0UsIDB4NTEwNCwgMHgxMTAyLAorICAgIDB4NTEwNSwgMHgxMTBBLCAweDUxMDYsIDB4Mjg4MSwgMHg1MTA3LCAweDI4ODIsIDB4NTEwOCwgMHgxMTA4LAorICAgIDB4NTEwOSwgMHgxMTA5LCAweDUxMEEsIDB4Mjg4OCwgMHg1MTBCLCAweDI4ODUsIDB4NTEwQywgMHgyODg2LAorICAgIDB4NTExMCwgMHgxMjhELCAweDUxMTEsIDB4MkIwNCwgMHg1MTEyLCAweDEyOEEsIDB4NTExMywgMHgyQjAxLAorICAgIDB4NTExNCwgMHgxMjhDLCAweDUxMTUsIDB4MTI4RSwgMHg1MTE3LCAweDJCMDIsIDB4NTExOCwgMHgxMjhCLAorICAgIDB4NTExQSwgMHgyQjAzLCAweDUxMUMsIDB4MkIwMCwgMHg1MTFGLCAweDEzQjUsIDB4NTEyMCwgMHgyRDNFLAorICAgIDB4NTEyMSwgMHgxM0I2LCAweDUxMjIsIDB4MkQzQywgMHg1MTI0LCAweDJEM0QsIDB4NTEyNSwgMHgyRDNCLAorICAgIDB4NTEyNiwgMHgyRDNBLCAweDUxMjksIDB4MkQzRiwgMHg1MTJBLCAweDEzQjQsIDB4NTEyRCwgMHgyRjBGLAorICAgIDB4NTEyRSwgMHgyRjEwLCAweDUxMzAsIDB4Mjg3RiwgMHg1MTMxLCAweDJGMEUsIDB4NTEzMiwgMHgxM0I3LAorICAgIDB4NTEzMywgMHgxNTc1LCAweDUxMzQsIDB4MzA3QSwgMHg1MTM1LCAweDMwN0IsIDB4NTEzNywgMHgxNjY4LAorICAgIDB4NTEzOCwgMHgxNjY5LCAweDUxMzksIDB4MzJDNiwgMHg1MTNBLCAweDMyQzUsIDB4NTEzQiwgMHgxNkJDLAorICAgIDB4NTEzQywgMHgxNkJCLCAweDUxM0QsIDB4MzQwRSwgMHg1MTNGLCAweDAyNUMsIDB4NTE0MCwgMHgwMjc0LAorICAgIDB4NTE0MSwgMHgwMkFBLCAweDUxNDMsIDB4MDJBOSwgMHg1MTQ0LCAweDAzMDMsIDB4NTE0NSwgMHgwMzAyLAorICAgIDB4NTE0NiwgMHgwMzhBLCAweDUxNDcsIDB4MDM4OSwgMHg1MTQ4LCAweDAzOEIsIDB4NTE0OSwgMHgwMzg4LAorICAgIDB4NTE0QiwgMHgwNDM0LCAweDUxNEMsIDB4MDQzMywgMHg1MTRELCAweDA0MzUsIDB4NTE1MiwgMHgwNTQ1LAorICAgIDB4NTE1NCwgMHgwNTQ0LCAweDUxNTUsIDB4MDU0NiwgMHg1MTU3LCAweDA2QkMsIDB4NTE1OSwgMHgwMTE5LAorICAgIDB4NTE1QSwgMHgxQzMyLCAweDUxNUIsIDB4MDExQSwgMHg1MTVDLCAweDBBMEYsIDB4NTE1RCwgMHgwMTFDLAorICAgIDB4NTE1RSwgMHgwMTFCLCAweDUxNUYsIDB4MjBCRCwgMHg1MTYxLCAweDAxMUQsIDB4NTE2MiwgMHgwRjhBLAorICAgIDB4NTE2MywgMHgwMTFFLCAweDUxNjUsIDB4MDI1RCwgMHg1MTY3LCAweDAyQUIsIDB4NTE2OCwgMHgwMzhDLAorICAgIDB4NTE2OSwgMHgwNTQ3LCAweDUxNkIsIDB4MDI1RSwgMHg1MTZDLCAweDAyQUUsIDB4NTE2RCwgMHgwMkFDLAorICAgIDB4NTE2RSwgMHgwMkFELCAweDUxNzEsIDB4MDM4RCwgMHg1MTc1LCAweDA0MzYsIDB4NTE3NiwgMHgwNTQ5LAorICAgIDB4NTE3NywgMHgwNTQ4LCAweDUxNzgsIDB4MDU0QSwgMHg1MTdDLCAweDA4NTIsIDB4NTE4MCwgMHgxMjhGLAorICAgIDB4NTE4MiwgMHgwMjFELCAweDUxODcsIDB4MTc3OSwgMHg1MTg4LCAweDM2QjYsIDB4NTE4OSwgMHgwMzA0LAorICAgIDB4NTE4QSwgMHgwMzA1LCAweDUxOEQsIDB4MDM4RSwgMHg1MThGLCAweDE4MzMsIDB4NTE5MSwgMHgwNkJFLAorICAgIDB4NTE5MiwgMHgwNkJELCAweDUxOTMsIDB4MUMzNCwgMHg1MTk0LCAweDFDMzMsIDB4NTE5NSwgMHgwQTEwLAorICAgIDB4NTE5NiwgMHgwMjFFLCAweDUxOTcsIDB4MDJBRiwgMHg1MTk4LCAweDE3ODAsIDB4NTE5RSwgMHgxOTEwLAorICAgIDB4NTFBMCwgMHgwNkJGLCAweDUxQTIsIDB4MDg1NSwgMHg1MUE0LCAweDA4NTMsIDB4NTFBNSwgMHgwODU0LAorICAgIDB4NTFBQSwgMHgxMjkwLCAweDUxQUIsIDB4MDIxRiwgMHg1MUFDLCAweDAzMDYsIDB4NTFCMCwgMHgwMzhGLAorICAgIDB4NTFCMSwgMHgxN0M2LCAweDUxQjYsIDB4MDQzNywgMHg1MUI3LCAweDA0MzgsIDB4NTFCOSwgMHgxODM0LAorICAgIDB4NTFCQywgMHgxOTExLCAweDUxQkQsIDB4MDU0QiwgMHg1MUJFLCAweDE5MTIsIDB4NTFDNCwgMHgxQzM2LAorICAgIDB4NTFDNSwgMHgxQzM3LCAweDUxQzYsIDB4MDg1OCwgMHg1MUM4LCAweDFDMzgsIDB4NTFDQSwgMHgxQzM1LAorICAgIDB4NTFDQiwgMHgwODU5LCAweDUxQ0MsIDB4MDg1NywgMHg1MUNELCAweDA4NTYsIDB4NTFDRSwgMHgxQzM5LAorICAgIDB4NTFEMCwgMHgxRTUyLCAweDUxRDQsIDB4MjBCRSwgMHg1MUQ3LCAweDIzNzUsIDB4NTFEOCwgMHgyNjIyLAorICAgIDB4NTFEQywgMHgxMTBCLCAweDUxREQsIDB4MTI5MSwgMHg1MURFLCAweDJCMDUsIDB4NTFFMCwgMHgwMjVGLAorICAgIDB4NTFFMSwgMHgwMjZELCAweDUxRjAsIDB4MEExMSwgMHg1MUYxLCAweDBCRjEsIDB4NTFGMywgMHgwRjhCLAorICAgIDB4NTFGNSwgMHgxNzZFLCAweDUxRjYsIDB4MDJCMCwgMHg1MUY4LCAweDAzMDksIDB4NTFGOSwgMHgwMzA3LAorICAgIDB4NTFGQSwgMHgwMzA4LCAweDUxRkQsIDB4MDU0QywgMHg1MjAwLCAweDAyNjAsIDB4NTIwMSwgMHgwMjYxLAorICAgIDB4NTIwMiwgMHgzNkIzLCAweDUyMDMsIDB4MDI3NSwgMHg1MjA2LCAweDAyQjEsIDB4NTIwNywgMHgwMkIyLAorICAgIDB4NTIwOCwgMHgwMkIzLCAweDUyMDksIDB4MTc5NywgMHg1MjBBLCAweDAzMEEsIDB4NTIwQywgMHgxNzk2LAorICAgIDB4NTIwRSwgMHgwMzkzLCAweDUyMTAsIDB4MTdDOCwgMHg1MjExLCAweDAzOTEsIDB4NTIxMiwgMHgwMzkyLAorICAgIDB4NTIxMywgMHgxN0M3LCAweDUyMTYsIDB4MDM5NCwgMHg1MjE3LCAweDAzOTAsIDB4NTIxQywgMHgxODM1LAorICAgIDB4NTIxRCwgMHgwNjhCLCAweDUyMUUsIDB4MTgzNiwgMHg1MjIxLCAweDE4MzcsIDB4NTIyNCwgMHgwNDNBLAorICAgIDB4NTIyNSwgMHgwNDM5LCAweDUyMjgsIDB4MDQzRCwgMHg1MjI5LCAweDA0M0IsIDB4NTIyQSwgMHgwNDNDLAorICAgIDB4NTIyRSwgMHgwNTUyLCAweDUyMzAsIDB4MDU1MSwgMHg1MjMxLCAweDE5MTcsIDB4NTIzMiwgMHgxOTE0LAorICAgIDB4NTIzMywgMHgxOTE1LCAweDUyMzUsIDB4MTkxMywgMHg1MjM2LCAweDA1NTMsIDB4NTIzNywgMHgwNTRGLAorICAgIDB4NTIzOCwgMHgwNTRFLCAweDUyM0EsIDB4MDU1MCwgMHg1MjNCLCAweDA1NEQsIDB4NTI0MSwgMHgwNTU0LAorICAgIDB4NTI0MywgMHgwNkMxLCAweDUyNDQsIDB4MUE2RCwgMHg1MjQ2LCAweDE5MTYsIDB4NTI0NywgMHgwNkM2LAorICAgIDB4NTI0OSwgMHgxQTZFLCAweDUyNEEsIDB4MDZDMiwgMHg1MjRCLCAweDA2QzUsIDB4NTI0QywgMHgwNkM0LAorICAgIDB4NTI0RCwgMHgwNkMzLCAweDUyNEUsIDB4MDZDMCwgMHg1MjUyLCAweDFDM0MsIDB4NTI1NCwgMHgwODVDLAorICAgIDB4NTI1NSwgMHgxQzNGLCAweDUyNTYsIDB4MDg1QSwgMHg1MjVBLCAweDFDM0IsIDB4NTI1QiwgMHgwODVELAorICAgIDB4NTI1QywgMHgwODVCLCAweDUyNUQsIDB4MDg1RSwgMHg1MjVFLCAweDFDM0QsIDB4NTI1RiwgMHgxQzNFLAorICAgIDB4NTI2MSwgMHgxQzNBLCAweDUyNjIsIDB4MUM0MCwgMHg1MjY5LCAweDBCRjUsIDB4NTI2QSwgMHgwQTEyLAorICAgIDB4NTI2QiwgMHgxRTUzLCAweDUyNkMsIDB4MUU1NSwgMHg1MjZELCAweDFFNTQsIDB4NTI2RSwgMHgxRTU2LAorICAgIDB4NTI2RiwgMHgwQTEzLCAweDUyNzIsIDB4MEJGMiwgMHg1Mjc0LCAweDBCRjMsIDB4NTI3NSwgMHgwQkY0LAorICAgIDB4NTI3NywgMHgwRENCLCAweDUyNzgsIDB4MjM3NywgMHg1MjdBLCAweDIzNzYsIDB4NTI3QiwgMHgyMzc4LAorICAgIDB4NTI3QywgMHgyMzc5LCAweDUyN0QsIDB4MERDQywgMHg1MjdGLCAweDBEQ0EsIDB4NTI4MCwgMHgyNjIzLAorICAgIDB4NTI4MSwgMHgyNjI0LCAweDUyODIsIDB4MEY4RCwgMHg1MjgzLCAweDBGOEMsIDB4NTI4NCwgMHgyNzc2LAorICAgIDB4NTI4NywgMHgxMTBDLCAweDUyODgsIDB4MTEwRCwgMHg1Mjg5LCAweDExMEUsIDB4NTI4QSwgMHgxMTEwLAorICAgIDB4NTI4QiwgMHgyODg5LCAweDUyOEMsIDB4Mjg4QSwgMHg1MjhELCAweDExMEYsIDB4NTI5MSwgMHgxMjkyLAorICAgIDB4NTI5MywgMHgxMjkzLCAweDUyOTYsIDB4MzA3QywgMHg1Mjk3LCAweDMyQzgsIDB4NTI5OCwgMHgzMkM3LAorICAgIDB4NTI5OSwgMHgzNDBGLCAweDUyOUIsIDB4MDI2MiwgMHg1MjlGLCAweDAzMEMsIDB4NTJBMCwgMHgwMzBCLAorICAgIDB4NTJBMywgMHgwMzk1LCAweDUyQTYsIDB4MTdDOSwgMHg1MkE5LCAweDA0M0YsIDB4NTJBQSwgMHgwNDQwLAorICAgIDB4NTJBQiwgMHgwNDNFLCAweDUyQUMsIDB4MDQ0MSwgMHg1MkFELCAweDE4MzgsIDB4NTJBRSwgMHgxODM5LAorICAgIDB4NTJCQiwgMHgwNTU2LCAweDUyQkMsIDB4MTkxOCwgMHg1MkJFLCAweDA1NTUsIDB4NTJDMCwgMHgxQTZGLAorICAgIDB4NTJDMSwgMHgwNkNBLCAweDUyQzIsIDB4MUE3MCwgMHg1MkMzLCAweDA2QzksIDB4NTJDNywgMHgwNkM3LAorICAgIDB4NTJDOSwgMHgwNkM4LCAweDUyQ0QsIDB4MUM0MSwgMHg1MkQyLCAweDBBMTQsIDB4NTJEMywgMHgxRTU4LAorICAgIDB4NTJENSwgMHgwQTE3LCAweDUyRDYsIDB4MUU1NywgMHg1MkQ3LCAweDBBQ0YsIDB4NTJEOCwgMHgwQTE2LAorICAgIDB4NTJEOSwgMHgwQTE1LCAweDUyREIsIDB4MEJGOCwgMHg1MkRELCAweDBCRjcsIDB4NTJERSwgMHgwQkY2LAorICAgIDB4NTJERiwgMHgwRENELCAweDUyRTIsIDB4MEREMCwgMHg1MkUzLCAweDBERDEsIDB4NTJFNCwgMHgwRENGLAorICAgIDB4NTJFNiwgMHgwRENFLCAweDUyRTksIDB4MjYyNSwgMHg1MkVCLCAweDI2MjYsIDB4NTJFRiwgMHgyODhDLAorICAgIDB4NTJGMCwgMHgxMTExLCAweDUyRjEsIDB4Mjg4QiwgMHg1MkYzLCAweDEyOTQsIDB4NTJGNCwgMHgyRDQwLAorICAgIDB4NTJGNSwgMHgxM0I4LCAweDUyRjcsIDB4MzA3RCwgMHg1MkY4LCAweDE2MDksIDB4NTJGOSwgMHgwMjIwLAorICAgIDB4NTJGQSwgMHgwMjc2LCAweDUyRkIsIDB4MDJCNCwgMHg1MkZDLCAweDE3ODEsIDB4NTJGRSwgMHgwMkI1LAorICAgIDB4NTJGRiwgMHgwMkI2LCAweDUzMDUsIDB4MDMwRCwgMHg1MzA2LCAweDAzMEUsIDB4NTMwOCwgMHgwMzk2LAorICAgIDB4NTMwOSwgMHgxODNBLCAweDUzMEEsIDB4MTkxOSwgMHg1MzBCLCAweDE5MUEsIDB4NTMwRCwgMHgwNkNCLAorICAgIDB4NTMwRSwgMHgxQzQyLCAweDUzMEYsIDB4MEExOSwgMHg1MzEwLCAweDBBMTgsIDB4NTMxMSwgMHgyMEMwLAorICAgIDB4NTMxMiwgMHgyMEJGLCAweDUzMTUsIDB4MDI2MywgMHg1MzE2LCAweDAyQjcsIDB4NTMxNywgMHgwMzBGLAorICAgIDB4NTMxOSwgMHgwQTFBLCAweDUzMUEsIDB4MTc2RiwgMHg1MzFDLCAweDE3OTgsIDB4NTMxRCwgMHgwMzEwLAorICAgIDB4NTMxRiwgMHgxN0NCLCAweDUzMjAsIDB4MDM5OCwgMHg1MzIxLCAweDAzOTcsIDB4NTMyMiwgMHgxN0NBLAorICAgIDB4NTMyMywgMHgwNDQyLCAweDUzMkEsIDB4MDg1RiwgMHg1MzJELCAweDFFNTksIDB4NTMyRiwgMHgwREQyLAorICAgIDB4NTMzMCwgMHgyNjI3LCAweDUzMzEsIDB4MEY4RSwgMHg1MzM0LCAweDJCMDYsIDB4NTMzNywgMHgzMUM3LAorICAgIDB4NTMzOCwgMHgwMjIxLCAweDUzMzksIDB4MDJCOCwgMHg1MzNDLCAweDE5MUIsIDB4NTMzRCwgMHgxQTcxLAorICAgIDB4NTMzRSwgMHgwQTFELCAweDUzM0YsIDB4MEExQiwgMHg1MzQwLCAweDBBMUMsIDB4NTM0MSwgMHgwMjY0LAorICAgIDB4NTM0MywgMHgwMjc3LCAweDUzNDQsIDB4MDE2QiwgMHg1MzQ1LCAweDAyQkIsIDB4NTM0NywgMHgwMkJBLAorICAgIDB4NTM0OCwgMHgwMkI5LCAweDUzNDksIDB4MDMxMywgMHg1MzRBLCAweDAzMTIsIDB4NTM0QywgMHgxNzk5LAorICAgIDB4NTM0RCwgMHgxN0NDLCAweDUzNTEsIDB4MDU1QSwgMHg1MzUyLCAweDA1NTcsIDB4NTM1MywgMHgwNTU5LAorICAgIDB4NTM1NCwgMHgwNTU4LCAweDUzNTcsIDB4MDZDQywgMHg1MzVBLCAweDBCRjksIDB4NTM1QywgMHgwMjY1LAorICAgIDB4NTM1RSwgMHgwMkJDLCAweDUzNjAsIDB4MDMxNSwgMHg1MzYxLCAweDAzMTQsIDB4NTM2MywgMHgxODNCLAorICAgIDB4NTM2NiwgMHgwNTVCLCAweDUzNjksIDB4MDIyMiwgMHg1MzZDLCAweDE3ODIsIDB4NTM2RSwgMHgwMzE3LAorICAgIDB4NTM2RiwgMHgwMzE2LCAweDUzNzAsIDB4MDM5OSwgMHg1MzcxLCAweDAzOUEsIDB4NTM3MiwgMHgxODNDLAorICAgIDB4NTM3MywgMHgwNDQzLCAweDUzNzUsIDB4MDQ0NCwgMHg1Mzc3LCAweDA1NUMsIDB4NTM3OCwgMHgwNTVELAorICAgIDB4NTM3OSwgMHgwNTVFLCAweDUzN0IsIDB4MDZDRCwgMHg1MzdDLCAweDFBNzIsIDB4NTM3RiwgMHgwODYwLAorICAgIDB4NTM4MiwgMHgxNzcwLCAweDUzODQsIDB4MDJCRCwgMHg1MzhBLCAweDE3Q0QsIDB4NTM4RSwgMHgxODNELAorICAgIDB4NTM4RiwgMHgxODNFLCAweDUzOTIsIDB4MTkxQywgMHg1Mzk0LCAweDE5MUQsIDB4NTM5NiwgMHgxQTc0LAorICAgIDB4NTM5NywgMHgxQTczLCAweDUzOTgsIDB4MUE3NiwgMHg1Mzk5LCAweDFBNzUsIDB4NTM5QSwgMHgwNkNFLAorICAgIDB4NTM5QywgMHgxRTVBLCAweDUzOUQsIDB4MDg2MiwgMHg1MzlFLCAweDFDNDMsIDB4NTM5RiwgMHgwODYxLAorICAgIDB4NTNBNCwgMHgyMEMxLCAweDUzQTUsIDB4MEJGQSwgMHg1M0E3LCAweDIwQzIsIDB4NTNBQywgMHgyNjI4LAorICAgIDB4NTNBRCwgMHgwRjhGLCAweDUzQjIsIDB4MTExMiwgMHg1M0I0LCAweDMwN0UsIDB4NTNCNiwgMHgwMjIzLAorICAgIDB4NTNCOSwgMHgxNzgzLCAweDUzQkIsIDB4MDMxOCwgMHg1M0MzLCAweDBBMUUsIDB4NTNDOCwgMHgwMjY2LAorICAgIDB4NTNDOSwgMHgwMjc4LCAweDUzQ0EsIDB4MDJCRiwgMHg1M0NCLCAweDAyQkUsIDB4NTNDRCwgMHgwMkMwLAorICAgIDB4NTNENCwgMHgwNTYwLCAweDUzRDYsIDB4MDU1RiwgMHg1M0Q3LCAweDA1NjEsIDB4NTNEQiwgMHgwNkNGLAorICAgIDB4NTNERiwgMHgwODYzLCAweDUzRTEsIDB4MkIwNywgMHg1M0UyLCAweDE0QzksIDB4NTNFMywgMHgwMjc5LAorICAgIDB4NTNFNCwgMHgwMzFBLCAweDUzRTUsIDB4MDMyOSwgMHg1M0U2LCAweDAzMjQsIDB4NTNFOCwgMHgwMzFGLAorICAgIDB4NTNFOSwgMHgwMzFFLCAweDUzRUEsIDB4MDMyNSwgMHg1M0VCLCAweDAzMjMsIDB4NTNFQywgMHgwMzFDLAorICAgIDB4NTNFRCwgMHgwMzJBLCAweDUzRUUsIDB4MDMxRCwgMHg1M0VGLCAweDAzMTksIDB4NTNGMCwgMHgwMzI4LAorICAgIDB4NTNGMSwgMHgwMzI3LCAweDUzRjIsIDB4MDMyNiwgMHg1M0YzLCAweDAzMUIsIDB4NTNGNSwgMHgwMzIyLAorICAgIDB4NTNGOCwgMHgwMzIxLCAweDUzRkIsIDB4MDMyQiwgMHg1M0ZDLCAweDAzMjAsIDB4NTQwMSwgMHgwM0EwLAorICAgIDB4NTQwMywgMHgwM0E2LCAweDU0MDQsIDB4MDNBMiwgMHg1NDA2LCAweDAzQTgsIDB4NTQwNywgMHgxN0NFLAorICAgIDB4NTQwOCwgMHgwM0E1LCAweDU0MDksIDB4MDM5QiwgMHg1NDBBLCAweDAzOUUsIDB4NTQwQiwgMHgwM0ExLAorICAgIDB4NTQwQywgMHgwMzlELCAweDU0MEQsIDB4MDNBNCwgMHg1NDBFLCAweDAzQTcsIDB4NTQwRiwgMHgwMzlDLAorICAgIDB4NTQxMCwgMHgwMzlGLCAweDU0MTEsIDB4MDNBMywgMHg1NDEyLCAweDAzQTksIDB4NTQxOCwgMHgxODQ3LAorICAgIDB4NTQxOSwgMHgxODQ0LCAweDU0MUIsIDB4MDQ1MSwgMHg1NDFDLCAweDE4NDUsIDB4NTQxRCwgMHgwNDQ1LAorICAgIDB4NTQxRSwgMHgwNDQ3LCAweDU0MUYsIDB4MDQ1RiwgMHg1NDIwLCAweDA0NUEsIDB4NTQyNCwgMHgxODRDLAorICAgIDB4NTQyNSwgMHgxODQ2LCAweDU0MjYsIDB4MDQ0OSwgMHg1NDI3LCAweDA0NEIsIDB4NTQyOCwgMHgxODRCLAorICAgIDB4NTQyOSwgMHgwNDUyLCAweDU0MkEsIDB4MTg0MSwgMHg1NDJCLCAweDA0NUUsIDB4NTQyQywgMHgwNDYwLAorICAgIDB4NTQyRCwgMHgwNDQ2LCAweDU0MkUsIDB4MDQ1NywgMHg1NDMwLCAweDE4M0YsIDB4NTQzMSwgMHgwNDVELAorICAgIDB4NTQzMywgMHgwNDRFLCAweDU0MzUsIDB4MDQ1OCwgMHg1NDM2LCAweDA0NTksIDB4NTQzNywgMHgxODQwLAorICAgIDB4NTQzOCwgMHgwNDU2LCAweDU0MzksIDB4MDQ1NCwgMHg1NDNCLCAweDA0NTUsIDB4NTQzQywgMHgwNDVCLAorICAgIDB4NTQzRCwgMHgxODQ4LCAweDU0M0UsIDB4MDQ0OCwgMHg1NDQwLCAweDA0NUMsIDB4NTQ0MSwgMHgxODRBLAorICAgIDB4NTQ0MiwgMHgwNDUwLCAweDU0NDMsIDB4MDQ0RCwgMHg1NDQ1LCAweDE4NDMsIDB4NTQ0NiwgMHgwNDRDLAorICAgIDB4NTQ0NywgMHgxODRELCAweDU0NDgsIDB4MDQ0RiwgMHg1NDRBLCAweDA0NTMsIDB4NTQ0RSwgMHgwNDRBLAorICAgIDB4NTQ0RiwgMHgxODQ5LCAweDU0NTQsIDB4MTg0MiwgMHg1NDYwLCAweDE5MkUsIDB4NTQ2MSwgMHgxOTJELAorICAgIDB4NTQ2MiwgMHgwNTczLCAweDU0NjMsIDB4MTkzMCwgMHg1NDY0LCAweDE5MzIsIDB4NTQ2NSwgMHgxOTI3LAorICAgIDB4NTQ2NiwgMHgxOTJBLCAweDU0NjcsIDB4MTkzMSwgMHg1NDY4LCAweDA1NzQsIDB4NTQ2QiwgMHgxOTI0LAorICAgIDB4NTQ2QywgMHgxOTI4LCAweDU0NkYsIDB4MTkyQywgMHg1NDcwLCAweDFBODUsIDB4NTQ3MSwgMHgwNTZGLAorICAgIDB4NTQ3MiwgMHgxQTg5LCAweDU0NzMsIDB4MDU2MiwgMHg1NDc0LCAweDE5MjksIDB4NTQ3NSwgMHgwNTYzLAorICAgIDB4NTQ3NiwgMHgwNTcwLCAweDU0NzcsIDB4MDU2OSwgMHg1NDc4LCAweDA1NjUsIDB4NTQ3QSwgMHgxOTI1LAorICAgIDB4NTQ3QiwgMHgwNTY4LCAweDU0N0MsIDB4MDU2RCwgMHg1NDdELCAweDA1NzYsIDB4NTQ3RSwgMHgxOTI2LAorICAgIDB4NTQ3RiwgMHgxOTFGLCAweDU0ODAsIDB4MDU2NywgMHg1NDgxLCAweDE5MjAsIDB4NTQ4MiwgMHgxOTIyLAorICAgIDB4NTQ4NCwgMHgwNTZBLCAweDU0ODYsIDB4MDU2QywgMHg1NDg3LCAweDE5MUUsIDB4NTQ4OCwgMHgxOTIzLAorICAgIDB4NTQ4QiwgMHgwNTc1LCAweDU0OEMsIDB4MDU3MSwgMHg1NDhELCAweDE5MkIsIDB4NTQ4RSwgMHgwNTc3LAorICAgIDB4NTQ5MCwgMHgwNTZFLCAweDU0OTEsIDB4MTkyMSwgMHg1NDkyLCAweDA1NkIsIDB4NTQ5NSwgMHgwNTY2LAorICAgIDB4NTQ5NiwgMHgwNTY0LCAweDU0OTgsIDB4MTkyRiwgMHg1NDlBLCAweDA1NzIsIDB4NTRBMCwgMHgxQTg0LAorICAgIDB4NTRBMSwgMHgxQTc4LCAweDU0QTIsIDB4MUE4NywgMHg1NEE1LCAweDFBN0EsIDB4NTRBNiwgMHgwNkQ2LAorICAgIDB4NTRBNywgMHgwNkU0LCAweDU0QTgsIDB4MDZEMiwgMHg1NEE5LCAweDA2RTMsIDB4NTRBQSwgMHgwNkRCLAorICAgIDB4NTRBQiwgMHgwNkUwLCAweDU0QUMsIDB4MDZEMCwgMHg1NEFELCAweDFBNzksIDB4NTRBRSwgMHgxQTdGLAorICAgIDB4NTRBRiwgMHgwNkRGLCAweDU0QjAsIDB4MUE4QiwgMHg1NEIxLCAweDA2RTEsIDB4NTRCMywgMHgwNkQ3LAorICAgIDB4NTRCNiwgMHgxQTgxLCAweDU0QjcsIDB4MUE3RSwgMHg1NEI4LCAweDA2RDUsIDB4NTRCQSwgMHgxQTc3LAorICAgIDB4NTRCQiwgMHgwNkUyLCAweDU0QkMsIDB4MUE4NiwgMHg1NEJELCAweDA2REEsIDB4NTRCRSwgMHgxQTg4LAorICAgIDB4NTRCRiwgMHgwNkU1LCAweDU0QzAsIDB4MDZEMSwgMHg1NEMxLCAweDA2REMsIDB4NTRDMiwgMHgwNkQ5LAorICAgIDB4NTRDMywgMHgxQTdDLCAweDU0QzQsIDB4MDZERCwgMHg1NEM1LCAweDFBODIsIDB4NTRDNiwgMHgxQTgzLAorICAgIDB4NTRDNywgMHgwNkQ4LCAweDU0QzgsIDB4MDZERSwgMHg1NEM5LCAweDA2RDQsIDB4NTRDRSwgMHgwNkQzLAorICAgIDB4NTRDRiwgMHgxQTdCLCAweDU0RDYsIDB4MUE4MCwgMHg1NERFLCAweDFBOEEsIDB4NTRFMCwgMHgxQzU3LAorICAgIDB4NTRFMSwgMHgwODcwLCAweDU0RTIsIDB4MUM0NSwgMHg1NEU0LCAweDFDNEEsIDB4NTRFNSwgMHgwODY5LAorICAgIDB4NTRFNiwgMHgwODc0LCAweDU0RTcsIDB4MUM0OCwgMHg1NEU4LCAweDA4NjQsIDB4NTRFOSwgMHgwODZFLAorICAgIDB4NTRFQSwgMHgwODczLCAweDU0RUIsIDB4MUM0RiwgMHg1NEVELCAweDA4NkYsIDB4NTRFRSwgMHgwODcyLAorICAgIDB4NTRGMSwgMHgxQzUyLCAweDU0RjIsIDB4MDg2QSwgMHg1NEYzLCAweDFDNDksIDB4NTRGNywgMHgxQzU1LAorICAgIDB4NTRGOCwgMHgxQzU2LCAweDU0RkEsIDB4MDg2QywgMHg1NEZCLCAweDFDNTQsIDB4NTRGQywgMHgwODY4LAorICAgIDB4NTRGRCwgMHgwODc3LCAweDU0RkYsIDB4MUM0QywgMHg1NTAxLCAweDA4NjYsIDB4NTUwMywgMHgxQzU5LAorICAgIDB4NTUwNCwgMHgxQzRELCAweDU1MDUsIDB4MUM1MSwgMHg1NTA2LCAweDA4NkIsIDB4NTUwNywgMHgwODc2LAorICAgIDB4NTUwOCwgMHgxQzRFLCAweDU1MDksIDB4MDg3MSwgMHg1NTBBLCAweDFDNTMsIDB4NTUwQiwgMHgxQzVBLAorICAgIDB4NTUwQywgMHgxRTY5LCAweDU1MEUsIDB4MUM1OCwgMHg1NTBGLCAweDA4NzgsIDB4NTUxMCwgMHgwODY1LAorICAgIDB4NTUxMSwgMHgxQzUwLCAweDU1MTIsIDB4MUM0NywgMHg1NTE0LCAweDA4NkQsIDB4NTUxNywgMHgxQzQ2LAorICAgIDB4NTUxQSwgMHgxQzRCLCAweDU1MjYsIDB4MUM0NCwgMHg1NTI3LCAweDA4NzUsIDB4NTUyQSwgMHgxRTYxLAorICAgIDB4NTUyQywgMHgwQTMxLCAweDU1MkQsIDB4MUU2RiwgMHg1NTJFLCAweDBBMkYsIDB4NTUyRiwgMHgwQTJDLAorICAgIDB4NTUzMCwgMHgxRTY2LCAweDU1MzEsIDB4MEEyOCwgMHg1NTMyLCAweDFFNkEsIDB4NTUzMywgMHgwQTMzLAorICAgIDB4NTUzNCwgMHgxRTYwLCAweDU1MzUsIDB4MUU2NSwgMHg1NTM2LCAweDFFNjQsIDB4NTUzNywgMHgwODY3LAorICAgIDB4NTUzOCwgMHgwQTJFLCAweDU1MzksIDB4MUU2RCwgMHg1NTNCLCAweDFFNzAsIDB4NTUzQywgMHgxRTVELAorICAgIDB4NTUzRSwgMHgwQzBDLCAweDU1NDAsIDB4MUU3MSwgMHg1NTQxLCAweDBBMzQsIDB4NTU0MywgMHgwQTI2LAorICAgIDB4NTU0NCwgMHgwQTIzLCAweDU1NDUsIDB4MUU2OCwgMHg1NTQ2LCAweDBBMjAsIDB4NTU0OCwgMHgxRTZFLAorICAgIDB4NTU0QSwgMHgwQTI3LCAweDU1NEIsIDB4MUU3MiwgMHg1NTRELCAweDFFNUUsIDB4NTU0RSwgMHgxRTZDLAorICAgIDB4NTU0RiwgMHgwQTJBLCAweDU1NTAsIDB4MUU1RiwgMHg1NTUxLCAweDFFNjIsIDB4NTU1MiwgMHgxRTY3LAorICAgIDB4NTU1NSwgMHgwQTJCLCAweDU1NTYsIDB4MEEyOSwgMHg1NTU3LCAweDBBMzUsIDB4NTU1QywgMHgwQTMwLAorICAgIDB4NTU1RSwgMHgwQTI0LCAweDU1NUYsIDB4MEFCQywgMHg1NTYxLCAweDBBMjUsIDB4NTU2MiwgMHgxRTYzLAorICAgIDB4NTU2MywgMHgwQTMyLCAweDU1NjQsIDB4MEEyRCwgMHg1NTY1LCAweDFFNkIsIDB4NTU2NiwgMHgwQTIyLAorICAgIDB4NTU2QSwgMHgwQTIxLCAweDU1NzUsIDB4MUU1QiwgMHg1NTc2LCAweDFFNUMsIDB4NTU3NywgMHgyMEM3LAorICAgIDB4NTU3QiwgMHgwQkZCLCAweDU1N0MsIDB4MEJGRSwgMHg1NTdELCAweDIwRDIsIDB4NTU3RSwgMHgwQzEyLAorICAgIDB4NTU3RiwgMHgyMEQ1LCAweDU1ODAsIDB4MEJGQywgMHg1NTgxLCAweDIwQ0UsIDB4NTU4MiwgMHgwQzAyLAorICAgIDB4NTU4MywgMHgwQzA4LCAweDU1ODQsIDB4MEQxQiwgMHg1NTg3LCAweDBDMDYsIDB4NTU4OCwgMHgyMENCLAorICAgIDB4NTU4OSwgMHgwQzEzLCAweDU1OEEsIDB4MEJGRiwgMHg1NThCLCAweDBDMDcsIDB4NTU4QywgMHgyMEQzLAorICAgIDB4NTU4RCwgMHgyMzg3LCAweDU1OEUsIDB4MjBEOCwgMHg1NThGLCAweDIwQ0MsIDB4NTU5MSwgMHgyMEMzLAorICAgIDB4NTU5MiwgMHgyMEQwLCAweDU1OTMsIDB4MjBDQSwgMHg1NTk0LCAweDBDMDUsIDB4NTU5NSwgMHgyMEQ2LAorICAgIDB4NTU5OCwgMHgwQzAxLCAweDU1OTksIDB4MEMxNSwgMHg1NTlBLCAweDBDMEUsIDB4NTU5QywgMHgwQzAzLAorICAgIDB4NTU5RCwgMHgwQzAwLCAweDU1OUYsIDB4MEMwQiwgMHg1NUExLCAweDIwRDcsIDB4NTVBMiwgMHgyMEM5LAorICAgIDB4NTVBMywgMHgyMENGLCAweDU1QTQsIDB4MjBEMSwgMHg1NUE1LCAweDIwQzUsIDB4NTVBNiwgMHgyMEQ0LAorICAgIDB4NTVBNywgMHgwQkZELCAweDU1QTgsIDB4MjBDNCwgMHg1NUFBLCAweDBDMDQsIDB4NTVBQiwgMHgwQzE0LAorICAgIDB4NTVBQywgMHgwQzEwLCAweDU1QUQsIDB4MjBDNiwgMHg1NUFFLCAweDBDMEEsIDB4NTVCMSwgMHgwQzExLAorICAgIDB4NTVCMiwgMHgwQzBELCAweDU1QjMsIDB4MEMwOSwgMHg1NUI1LCAweDIwQ0QsIDB4NTVCQiwgMHgwQzBGLAorICAgIDB4NTVCRiwgMHgyMzg1LCAweDU1QzAsIDB4MjM4MSwgMHg1NUMyLCAweDIzOTAsIDB4NTVDMywgMHgyMzdBLAorICAgIDB4NTVDNCwgMHgyMzgzLCAweDU1QzUsIDB4MERFMCwgMHg1NUM2LCAweDBERTEsIDB4NTVDNywgMHgwREQ5LAorICAgIDB4NTVDOCwgMHgyMzhDLCAweDU1QzksIDB4MERFMywgMHg1NUNBLCAweDIzN0YsIDB4NTVDQiwgMHgyMzdFLAorICAgIDB4NTVDQywgMHgyMzdDLCAweDU1Q0QsIDB4MjM4RSwgMHg1NUNFLCAweDBERDcsIDB4NTVDRiwgMHgyMzg4LAorICAgIDB4NTVEMCwgMHgyMzdELCAweDU1RDEsIDB4MEREQSwgMHg1NUQyLCAweDIzODYsIDB4NTVEMywgMHgwREQ1LAorICAgIDB4NTVENCwgMHgyMzgyLCAweDU1RDUsIDB4MjM4OSwgMHg1NUQ2LCAweDIzOEIsIDB4NTVEOSwgMHgyMzhGLAorICAgIDB4NTVEQSwgMHgwRERFLCAweDU1REIsIDB4MjM3QiwgMHg1NURDLCAweDBERDgsIDB4NTVERCwgMHgyMzgwLAorICAgIDB4NTVERiwgMHgwREQzLCAweDU1RTEsIDB4MERERiwgMHg1NUUyLCAweDIzOEEsIDB4NTVFMywgMHgwRERCLAorICAgIDB4NTVFNCwgMHgwRERDLCAweDU1RTUsIDB4MERFMiwgMHg1NUU2LCAweDBERDYsIDB4NTVFNywgMHgwMTFGLAorICAgIDB4NTVFOCwgMHgwREQ0LCAweDU1RTksIDB4MjM4NCwgMHg1NUVGLCAweDBEREQsIDB4NTVGMiwgMHgyMzhELAorICAgIDB4NTVGNiwgMHgwRjlGLCAweDU1RjcsIDB4MEY5QSwgMHg1NUY5LCAweDI2MzcsIDB4NTVGQSwgMHgyNjMzLAorICAgIDB4NTVGQywgMHgyNjJELCAweDU1RkQsIDB4MEY5NCwgMHg1NUZFLCAweDBGOTAsIDB4NTVGRiwgMHgyNjM2LAorICAgIDB4NTYwMCwgMHgwRjkxLCAweDU2MDEsIDB4MjYzMCwgMHg1NjAyLCAweDI2MzIsIDB4NTYwNCwgMHgyNjM1LAorICAgIDB4NTYwNiwgMHgwRjk2LCAweDU2MDgsIDB4MEY5RCwgMHg1NjA5LCAweDBGOTcsIDB4NTYwQywgMHgyNjJCLAorICAgIDB4NTYwRCwgMHgwRjk4LCAweDU2MEUsIDB4MEY5OSwgMHg1NjBGLCAweDI2MkUsIDB4NTYxMCwgMHgwRjlFLAorICAgIDB4NTYxMiwgMHgyNjJDLCAweDU2MTMsIDB4MjYzMSwgMHg1NjE0LCAweDBGOTUsIDB4NTYxNSwgMHgyNjJBLAorICAgIDB4NTYxNiwgMHgwRjlCLCAweDU2MTcsIDB4MEY5MywgMHg1NjFCLCAweDBGOTIsIDB4NTYxQywgMHgyNjJGLAorICAgIDB4NTYxRCwgMHgyNjM0LCAweDU2MUYsIDB4MEY5QywgMHg1NjI3LCAweDI2MjksIDB4NTYyOSwgMHgxMTE5LAorICAgIDB4NTYyQSwgMHgyODlELCAweDU2MkMsIDB4Mjg5QSwgMHg1NjJFLCAweDExMTMsIDB4NTYyRiwgMHgxMTFGLAorICAgIDB4NTYzMCwgMHgxMTIwLCAweDU2MzIsIDB4MTExNiwgMHg1NjMzLCAweDI4OTgsIDB4NTYzNCwgMHgxMTE4LAorICAgIDB4NTYzNSwgMHgyODkwLCAweDU2MzYsIDB4MTExRSwgMHg1NjM4LCAweDI4OUMsIDB4NTYzOSwgMHgxMTE1LAorICAgIDB4NTYzQSwgMHgyODlFLCAweDU2M0IsIDB4MTExNCwgMHg1NjNELCAweDI4OTksIDB4NTYzRSwgMHgyODlCLAorICAgIDB4NTYzRiwgMHgxMTE3LCAweDU2NDAsIDB4Mjg5NywgMHg1NjQxLCAweDI4OTEsIDB4NTY0MiwgMHgyODhFLAorICAgIDB4NTY0NSwgMHgyMEM4LCAweDU2NDYsIDB4Mjg5NCwgMHg1NjQ4LCAweDI4OEQsIDB4NTY0OSwgMHgyODkzLAorICAgIDB4NTY0QSwgMHgyODkyLCAweDU2NEMsIDB4Mjg4RiwgMHg1NjRFLCAweDExMUIsIDB4NTY1MywgMHgxMTFBLAorICAgIDB4NTY1NywgMHgxMTFDLCAweDU2NTgsIDB4Mjg5NSwgMHg1NjU5LCAweDEyOTUsIDB4NTY1QSwgMHgyODk2LAorICAgIDB4NTY1RSwgMHgyQjEwLCAweDU2NjAsIDB4MkIwOSwgMHg1NjYyLCAweDEyQTEsIDB4NTY2MywgMHgyQjBELAorICAgIDB4NTY2NCwgMHgxMjk5LCAweDU2NjUsIDB4MTI5RCwgMHg1NjY2LCAweDJCMEMsIDB4NTY2OCwgMHgxMjlDLAorICAgIDB4NTY2OSwgMHgxMjk4LCAweDU2NkEsIDB4MTI5QiwgMHg1NjZCLCAweDEyOTYsIDB4NTY2QywgMHgxMkEwLAorICAgIDB4NTY2RCwgMHgyQjBFLCAweDU2NkUsIDB4MkIwQSwgMHg1NjZGLCAweDEyOUYsIDB4NTY3MCwgMHgyQjA4LAorICAgIDB4NTY3MSwgMHgxMjlFLCAweDU2NzIsIDB4MkIwRiwgMHg1NjczLCAweDJCMEIsIDB4NTY3NCwgMHgxMTFELAorICAgIDB4NTY3NiwgMHgxMkEyLCAweDU2NzcsIDB4MkIxMSwgMHg1Njc4LCAweDEyOUEsIDB4NTY3OSwgMHgxMjk3LAorICAgIDB4NTY3RSwgMHgyRDQ3LCAweDU2N0YsIDB4MkQ0OSwgMHg1NjgwLCAweDEzQkEsIDB4NTY4MSwgMHgyRDRBLAorICAgIDB4NTY4MiwgMHgyRDQ4LCAweDU2ODMsIDB4MkQ0NiwgMHg1Njg0LCAweDJENDUsIDB4NTY4NSwgMHgxM0JDLAorICAgIDB4NTY4NiwgMHgyRDQ0LCAweDU2ODcsIDB4MTNCRCwgMHg1NjhDLCAweDJENDIsIDB4NTY4RCwgMHgyRDQzLAorICAgIDB4NTY4RSwgMHgxM0I5LCAweDU2OEYsIDB4MTNCRSwgMHg1NjkwLCAweDEzQkIsIDB4NTY5MywgMHgyRDQxLAorICAgIDB4NTY5NSwgMHgxNENBLCAweDU2OTcsIDB4MkYxMywgMHg1Njk4LCAweDJGMTEsIDB4NTY5OSwgMHgyRjE2LAorICAgIDB4NTY5QSwgMHgyRjE0LCAweDU2OUMsIDB4MkYxMiwgMHg1NjlELCAweDJGMTUsIDB4NTZBNSwgMHgxNTc2LAorICAgIDB4NTZBNiwgMHgzMDgxLCAweDU2QTcsIDB4MzA4MiwgMHg1NkE4LCAweDE1NzcsIDB4NTZBQSwgMHgzMDgzLAorICAgIDB4NTZBQiwgMHgzMDdGLCAweDU2QUMsIDB4MzA4NCwgMHg1NkFELCAweDMwODAsIDB4NTZBRSwgMHgxNENCLAorICAgIDB4NTZCMiwgMHgzMUM4LCAweDU2QjMsIDB4MzFDQSwgMHg1NkI0LCAweDE2MEMsIDB4NTZCNSwgMHgzMUM5LAorICAgIDB4NTZCNiwgMHgxNjBCLCAweDU2QjcsIDB4MTYwQSwgMHg1NkJDLCAweDE2MEQsIDB4NTZCRCwgMHgzMkNBLAorICAgIDB4NTZCRSwgMHgzMkNCLCAweDU2QzAsIDB4MTY2QiwgMHg1NkMxLCAweDE2NkEsIDB4NTZDMiwgMHgxNjZDLAorICAgIDB4NTZDMywgMHgzMkM5LCAweDU2QzUsIDB4MzM3OSwgMHg1NkM2LCAweDMzNzgsIDB4NTZDOCwgMHgxNkJELAorICAgIDB4NTZDOSwgMHgxNkJGLCAweDU2Q0EsIDB4MTZCRSwgMHg1NkNCLCAweDMzN0EsIDB4NTZDQywgMHgxNkY2LAorICAgIDB4NTZDRCwgMHgzNDgxLCAweDU2RDEsIDB4MTcxRiwgMHg1NkQzLCAweDM0ODAsIDB4NTZENCwgMHgzNEM5LAorICAgIDB4NTZENywgMHgxNzc1LCAweDU2REEsIDB4MDMyRCwgMHg1NkRCLCAweDAzMkMsIDB4NTZERCwgMHgwM0FDLAorICAgIDB4NTZERSwgMHgwM0FCLCAweDU2REYsIDB4MTdEMCwgMHg1NkUwLCAweDAzQUEsIDB4NTZFMSwgMHgxN0NGLAorICAgIDB4NTZFNCwgMHgwNDYzLCAweDU2RTUsIDB4MTg1MCwgMHg1NkU3LCAweDE4NEYsIDB4NTZFQSwgMHgwNDYxLAorICAgIDB4NTZFQiwgMHgwNDY0LCAweDU2RUUsIDB4MTg0RSwgMHg1NkYwLCAweDA0NjIsIDB4NTZGNywgMHgxOTMzLAorICAgIDB4NTZGOSwgMHgxOTM0LCAweDU2RkEsIDB4MDU3OCwgMHg1NkZGLCAweDA2RTYsIDB4NTcwMSwgMHgxQzVCLAorICAgIDB4NTcwMiwgMHgxQzVDLCAweDU3MDMsIDB4MDg3OSwgMHg1NzA0LCAweDA4N0EsIDB4NTcwNywgMHgxRTc0LAorICAgIDB4NTcwOCwgMHgwQTM2LCAweDU3MDksIDB4MEEzOCwgMHg1NzBBLCAweDFFNzMsIDB4NTcwQiwgMHgwQTM3LAorICAgIDB4NTcwQywgMHgyMEQ5LCAweDU3MEQsIDB4MEMxNiwgMHg1NzEyLCAweDBERTQsIDB4NTcxMywgMHgwREU1LAorICAgIDB4NTcxNCwgMHgyMzkxLCAweDU3MTYsIDB4MEZBMSwgMHg1NzE4LCAweDBGQTAsIDB4NTcxQSwgMHgyODlGLAorICAgIDB4NTcxQiwgMHgyQjEzLCAweDU3MUMsIDB4MkIxMiwgMHg1NzFFLCAweDM1MDUsIDB4NTcxRiwgMHgwMjdBLAorICAgIDB4NTcyMCwgMHgxNzg0LCAweDU3MjIsIDB4MTc5QSwgMHg1NzIzLCAweDE3OUIsIDB4NTcyOCwgMHgwM0FGLAorICAgIDB4NTcyOSwgMHgwM0IzLCAweDU3MkEsIDB4MTdEMiwgMHg1NzJDLCAweDAzQjEsIDB4NTcyRCwgMHgwM0IwLAorICAgIDB4NTcyRSwgMHgxN0QxLCAweDU3MkYsIDB4MDNCMiwgMHg1NzMwLCAweDAzQUUsIDB4NTczMywgMHgwM0FELAorICAgIDB4NTczNCwgMHgxN0QzLCAweDU3M0IsIDB4MDQ2RSwgMHg1NzNFLCAweDA0NkIsIDB4NTc0MCwgMHgwNDY3LAorICAgIDB4NTc0MSwgMHgxODUxLCAweDU3NDUsIDB4MTg1MiwgMHg1NzQ3LCAweDA0NjksIDB4NTc0OSwgMHgxODU0LAorICAgIDB4NTc0QSwgMHgwNDY1LCAweDU3NEIsIDB4MTg1NSwgMHg1NzRDLCAweDE4NTMsIDB4NTc0RCwgMHgwNDY4LAorICAgIDB4NTc0RSwgMHgwNDZBLCAweDU3NEYsIDB4MDQ2RCwgMHg1NzUwLCAweDA0NkMsIDB4NTc1MSwgMHgwNDY2LAorICAgIDB4NTc1MiwgMHgxODU2LCAweDU3NjEsIDB4MDU3RCwgMHg1NzYyLCAweDE5NDEsIDB4NTc2NCwgMHgwNTdGLAorICAgIDB4NTc2NiwgMHgwNTdFLCAweDU3NjgsIDB4MTk0MiwgMHg1NzY5LCAweDA1N0MsIDB4NTc2QSwgMHgwNTdCLAorICAgIDB4NTc2QiwgMHgxOTM4LCAweDU3NkQsIDB4MTkzNywgMHg1NzZGLCAweDE5MzUsIDB4NTc3MCwgMHgxOTNBLAorICAgIDB4NTc3MSwgMHgxOTM5LCAweDU3NzIsIDB4MTkzNiwgMHg1NzczLCAweDE5M0YsIDB4NTc3NCwgMHgxOTQwLAorICAgIDB4NTc3NSwgMHgxOTNELCAweDU3NzYsIDB4MTkzQiwgMHg1Nzc3LCAweDA1N0EsIDB4NTc3QiwgMHgxOTNFLAorICAgIDB4NTc3QywgMHgwNTgwLCAweDU3N0QsIDB4MTk0MywgMHg1NzgwLCAweDE5M0MsIDB4NTc4MiwgMHgwNkU3LAorICAgIDB4NTc4MywgMHgwNTc5LCAweDU3OEIsIDB4MDZFOCwgMHg1NzhDLCAweDFBOTAsIDB4NTc4RiwgMHgxQTk2LAorICAgIDB4NTc5MywgMHgwNkVFLCAweDU3OTQsIDB4MUE5NCwgMHg1Nzk1LCAweDFBOUEsIDB4NTc5NywgMHgxQTkxLAorICAgIDB4NTc5OCwgMHgxQTk1LCAweDU3OTksIDB4MUE5NywgMHg1NzlBLCAweDFBOTksIDB4NTc5QiwgMHgxQTkzLAorICAgIDB4NTc5RCwgMHgxQTkyLCAweDU3OUUsIDB4MUE4RCwgMHg1NzlGLCAweDFBOEUsIDB4NTdBMCwgMHgwNkU5LAorICAgIDB4NTdBMiwgMHgwNkVCLCAweDU3QTMsIDB4MDZFQSwgMHg1N0E0LCAweDFBOEYsIDB4NTdBNSwgMHgxQTk4LAorICAgIDB4NTdBRSwgMHgwNkVELCAweDU3QjUsIDB4MUE4QywgMHg1N0I2LCAweDFDNjYsIDB4NTdCOCwgMHgxQzY1LAorICAgIDB4NTdCOSwgMHgxQzZBLCAweDU3QkEsIDB4MUM2MSwgMHg1N0JDLCAweDFDNjQsIDB4NTdCRCwgMHgxQzYzLAorICAgIDB4NTdCRiwgMHgxQzY3LCAweDU3QzEsIDB4MUM2QiwgMHg1N0MyLCAweDA4N0IsIDB4NTdDMywgMHgwODdFLAorICAgIDB4NTdDNiwgMHgxQzYyLCAweDU3QzcsIDB4MUM2OCwgMHg1N0NCLCAweDA4N0QsIDB4NTdDQywgMHgxQzVELAorICAgIDB4NTdDRSwgMHgwNkVDLCAweDU3Q0YsIDB4MUU4MiwgMHg1N0QwLCAweDFDNjksIDB4NTdEMiwgMHgxQzYwLAorICAgIDB4NTdENCwgMHgwODdDLCAweDU3RDUsIDB4MUM1RiwgMHg1N0RDLCAweDFFNzksIDB4NTdERiwgMHgwQTM5LAorICAgIDB4NTdFMCwgMHgwQTNELCAweDU3RTEsIDB4MUU4OSwgMHg1N0UyLCAweDFFNzcsIDB4NTdFMywgMHgxRTg1LAorICAgIDB4NTdFNCwgMHgwQTNFLCAweDU3RTUsIDB4MUU4NywgMHg1N0U3LCAweDFFOEQsIDB4NTdFOSwgMHgxRTkxLAorICAgIDB4NTdFQywgMHgxRTg4LCAweDU3RUQsIDB4MUU3QywgMHg1N0VFLCAweDFFODQsIDB4NTdGMCwgMHgxRTkyLAorICAgIDB4NTdGMSwgMHgxRTkwLCAweDU3RjIsIDB4MUU4NiwgMHg1N0YzLCAweDFFODEsIDB4NTdGNCwgMHgxRTdBLAorICAgIDB4NTdGNSwgMHgyMEUxLCAweDU3RjYsIDB4MUU3OCwgMHg1N0Y3LCAweDBBNDIsIDB4NTdGOCwgMHgxRTdGLAorICAgIDB4NTdGOSwgMHgwQTQzLCAweDU3RkEsIDB4MEEzRiwgMHg1N0ZCLCAweDFFNzUsIDB4NTdGQywgMHgxRThCLAorICAgIDB4NTdGRCwgMHgxRTdELCAweDU4MDAsIDB4MUU3QiwgMHg1ODAxLCAweDFFOEUsIDB4NTgwMiwgMHgwQTQwLAorICAgIDB4NTgwNCwgMHgxRTk0LCAweDU4MDUsIDB4MEEzQSwgMHg1ODA2LCAweDBBM0MsIDB4NTgwNywgMHgxRTgzLAorICAgIDB4NTgwOCwgMHgxRTdFLCAweDU4MDksIDB4MDg3RiwgMHg1ODBBLCAweDBBM0IsIDB4NTgwQiwgMHgxRTgwLAorICAgIDB4NTgwQywgMHgxRThGLCAweDU4MEQsIDB4MUU5MywgMHg1ODBFLCAweDFFOEEsIDB4NTgxMCwgMHgxRThDLAorICAgIDB4NTgxNCwgMHgxRTc2LCAweDU4MTksIDB4MjBEQywgMHg1ODFCLCAweDIwRTUsIDB4NTgxQywgMHgyMEU0LAorICAgIDB4NTgxRCwgMHgwQzFFLCAweDU4MUUsIDB4MjBERCwgMHg1ODIwLCAweDBDMUYsIDB4NTgyMSwgMHgwQzFELAorICAgIDB4NTgyMywgMHgyMERGLCAweDU4MjQsIDB4MEMxQSwgMHg1ODI1LCAweDIwRTMsIDB4NTgyNywgMHgyMERFLAorICAgIDB4NTgyOCwgMHgyMEUwLCAweDU4MjksIDB4MjBEQSwgMHg1ODJBLCAweDBDMTgsIDB4NTgyQywgMHgyMEVELAorICAgIDB4NTgyRCwgMHgyMEVDLCAweDU4MkUsIDB4MjBFOSwgMHg1ODJGLCAweDBDMTcsIDB4NTgzMCwgMHgwQzFCLAorICAgIDB4NTgzMSwgMHgwQzFDLCAweDU4MzIsIDB4MUM1RSwgMHg1ODMzLCAweDIwRTYsIDB4NTgzNCwgMHgwQzE5LAorICAgIDB4NTgzNSwgMHgwQTQxLCAweDU4MzYsIDB4MjBFOCwgMHg1ODM3LCAweDIwREIsIDB4NTgzOCwgMHgyMEVCLAorICAgIDB4NTgzOSwgMHgyMEVBLCAweDU4M0IsIDB4MjBFRSwgMHg1ODNELCAweDIzOUYsIDB4NTgzRiwgMHgyMEU3LAorICAgIDB4NTg0OCwgMHgyMEUyLCAweDU4NDksIDB4MjM5NywgMHg1ODRBLCAweDBERUYsIDB4NTg0QiwgMHgwREYyLAorICAgIDB4NTg0QywgMHgwREVELCAweDU4NEQsIDB4MjM5NiwgMHg1ODRFLCAweDIzOUEsIDB4NTg0RiwgMHgyMzk1LAorICAgIDB4NTg1MSwgMHgwREU3LCAweDU4NTIsIDB4MERGMSwgMHg1ODUzLCAweDIzOTIsIDB4NTg1NCwgMHgwREVCLAorICAgIDB4NTg1NSwgMHgyMzk5LCAweDU4NTcsIDB4MERFOSwgMHg1ODU4LCAweDBERTgsIDB4NTg1OSwgMHgyMzlDLAorICAgIDB4NTg1QSwgMHgwREVBLCAweDU4NUIsIDB4MjM5RSwgMHg1ODVELCAweDIzOUIsIDB4NTg1RSwgMHgwREU2LAorICAgIDB4NTg2MiwgMHgwREYwLCAweDU4NjMsIDB4MjNBMCwgMHg1ODY0LCAweDIzOTQsIDB4NTg2NSwgMHgyMzlELAorICAgIDB4NTg2OCwgMHgyMzkzLCAweDU4NkIsIDB4MERFQywgMHg1ODZELCAweDBERUUsIDB4NTg2RiwgMHgyMzk4LAorICAgIDB4NTg3MSwgMHgyM0ExLCAweDU4NzQsIDB4MjYzRiwgMHg1ODc1LCAweDBGQTIsIDB4NTg3NiwgMHgyNjQ1LAorICAgIDB4NTg3OSwgMHgwRkE3LCAweDU4N0EsIDB4MjY0MSwgMHg1ODdCLCAweDI2NDgsIDB4NTg3QywgMHgyNjM5LAorICAgIDB4NTg3RCwgMHgwRkE5LCAweDU4N0UsIDB4MEZBMywgMHg1ODdGLCAweDI2M0UsIDB4NTg4MCwgMHgxMTIxLAorICAgIDB4NTg4MSwgMHgyNjNELCAweDU4ODIsIDB4MjY0NiwgMHg1ODgzLCAweDBGQTQsIDB4NTg4NSwgMHgwRkE4LAorICAgIDB4NTg4NiwgMHgyNjNDLCAweDU4ODcsIDB4MjY0MiwgMHg1ODg4LCAweDI2NDcsIDB4NTg4OSwgMHgyNjM4LAorICAgIDB4NTg4QSwgMHgwRkE2LCAweDU4OEIsIDB4MjY0MCwgMHg1ODhFLCAweDI2NDQsIDB4NTg4RiwgMHgyNjRBLAorICAgIDB4NTg5MCwgMHgyNjNBLCAweDU4OTEsIDB4MjY0MywgMHg1ODkzLCAweDBGQTUsIDB4NTg5NCwgMHgyNjQ5LAorICAgIDB4NTg5OCwgMHgyNjNCLCAweDU4OUMsIDB4MTEyNSwgMHg1ODlELCAweDI4QTEsIDB4NTg5RSwgMHgxMTIzLAorICAgIDB4NTg5RiwgMHgxMTIyLCAweDU4QTAsIDB4MjhBMywgMHg1OEExLCAweDI4QTgsIDB4NThBMywgMHgyOEE0LAorICAgIDB4NThBNSwgMHgyOEE3LCAweDU4QTYsIDB4MTEyOCwgMHg1OEE4LCAweDEyODgsIDB4NThBOSwgMHgxMTI3LAorICAgIDB4NThBQiwgMHgyOEEwLCAweDU4QUMsIDB4MjhBNiwgMHg1OEFFLCAweDExMjYsIDB4NThBRiwgMHgyOEE1LAorICAgIDB4NThCMSwgMHgyOEEyLCAweDU4QjMsIDB4MTEyNCwgMHg1OEJBLCAweDJCMTgsIDB4NThCQiwgMHgzNkVCLAorICAgIDB4NThCQywgMHgyQjFBLCAweDU4QkQsIDB4MkIxNSwgMHg1OEJFLCAweDEyQTQsIDB4NThCRiwgMHgyQjE3LAorICAgIDB4NThDMSwgMHgxMkEzLCAweDU4QzIsIDB4MkIxOSwgMHg1OEM1LCAweDEyQTYsIDB4NThDNiwgMHgyQjFCLAorICAgIDB4NThDNywgMHgxMkE1LCAweDU4QzgsIDB4MkIxNCwgMHg1OEM5LCAweDJCMTYsIDB4NThDRSwgMHgxM0MyLAorICAgIDB4NThDRiwgMHgyRDRELCAweDU4RDEsIDB4MTNDMSwgMHg1OEQyLCAweDJENEUsIDB4NThEMywgMHgxM0MwLAorICAgIDB4NThENCwgMHgyRDRDLCAweDU4RDUsIDB4MTNCRiwgMHg1OEQ2LCAweDJENEIsIDB4NThEOCwgMHgxNENELAorICAgIDB4NThEOSwgMHgxNENDLCAweDU4REEsIDB4MzA4NSwgMHg1OERCLCAweDMwODcsIDB4NThERCwgMHgzMDg2LAorICAgIDB4NThERSwgMHgxNTc4LCAweDU4REYsIDB4MTU3OSwgMHg1OEUyLCAweDE1N0EsIDB4NThFMywgMHgzMUNCLAorICAgIDB4NThFNCwgMHgxNjBFLCAweDU4RTcsIDB4MzQxMSwgMHg1OEU4LCAweDM0MTAsIDB4NThFOSwgMHgxNzIwLAorICAgIDB4NThFQiwgMHgwMjdCLCAweDU4RUMsIDB4MDJDMSwgMHg1OEVGLCAweDA0NkYsIDB4NThGNCwgMHgxQTlCLAorICAgIDB4NThGOSwgMHgwQzIwLCAweDU4RkEsIDB4MEMyMSwgMHg1OEZDLCAweDIzQTIsIDB4NThGRCwgMHgwRkFBLAorICAgIDB4NThGRSwgMHgyNjRCLCAweDU4RkYsIDB4MjhBOSwgMHg1OTAyLCAweDAyMjQsIDB4NTkwMywgMHgxNzg1LAorICAgIDB4NTkwNiwgMHgxODU3LCAweDU5MEEsIDB4MDIyNCwgMHg1OTBDLCAweDE5NDQsIDB4NTkwRCwgMHgxQTlDLAorICAgIDB4NTkwRSwgMHgxQzZDLCAweDU5MEYsIDB4MDg4MCwgMHg1OTEyLCAweDMwODgsIDB4NTkxNCwgMHgxNjZELAorICAgIDB4NTkxNSwgMHgwMjdDLCAweDU5MTYsIDB4MDMyRSwgMHg1OTE3LCAweDE3OUMsIDB4NTkxOSwgMHgwM0I0LAorICAgIDB4NTkxQSwgMHgwM0I1LCAweDU5MUMsIDB4MDU4MSwgMHg1OTIwLCAweDBBNDQsIDB4NTkyMiwgMHgwRkFDLAorICAgIDB4NTkyNCwgMHgwRkFELCAweDU5MjUsIDB4MEZBQiwgMHg1OTI3LCAweDAyN0QsIDB4NTkyOSwgMHgwMkMyLAorICAgIDB4NTkyQSwgMHgwMkM0LCAweDU5MkIsIDB4MDJDMywgMHg1OTJDLCAweDE3ODYsIDB4NTkyRCwgMHgwMkM1LAorICAgIDB4NTkyRSwgMHgwMzJGLCAweDU5MkYsIDB4MTc5RCwgMHg1OTMxLCAweDAzMzAsIDB4NTkzNywgMHgwM0I2LAorICAgIDB4NTkzOCwgMHgwM0I3LCAweDU5M0MsIDB4MTdENCwgMHg1OTNFLCAweDA0NzAsIDB4NTk0MCwgMHgxODU4LAorICAgIDB4NTk0NCwgMHgwNTg1LCAweDU5NDUsIDB4MTk0NSwgMHg1OTQ3LCAweDA1ODMsIDB4NTk0OCwgMHgwNTg0LAorICAgIDB4NTk0OSwgMHgwNTgyLCAweDU5NEEsIDB4MUM2RCwgMHg1OTRFLCAweDA2RjIsIDB4NTk0RiwgMHgwNkYxLAorICAgIDB4NTk1MCwgMHgwNkYzLCAweDU5NTEsIDB4MDZGMCwgMHg1OTUzLCAweDFBOUQsIDB4NTk1NCwgMHgwNTg2LAorICAgIDB4NTk1NSwgMHgwNkVGLCAweDU5NTcsIDB4MDg4MSwgMHg1OTU4LCAweDA4ODIsIDB4NTk1QSwgMHgwODgzLAorICAgIDB4NTk1QywgMHgxRTk1LCAweDU5NjAsIDB4MEMyMiwgMHg1OTYxLCAweDIwRUYsIDB4NTk2MiwgMHgwQTQ1LAorICAgIDB4NTk2NywgMHgwREYzLCAweDU5NjksIDB4MEZBRiwgMHg1OTZBLCAweDBGQUUsIDB4NTk2QiwgMHgyNjRDLAorICAgIDB4NTk2RCwgMHgxMTI5LCAweDU5NkUsIDB4MTJBNywgMHg1OTcwLCAweDJGMTcsIDB4NTk3MSwgMHgzMzdCLAorICAgIDB4NTk3MiwgMHgzNDEyLCAweDU5NzMsIDB4MDI3RSwgMHg1OTc0LCAweDAzMzEsIDB4NTk3NiwgMHgwMzMyLAorICAgIDB4NTk3NywgMHgxN0RBLCAweDU5NzgsIDB4MDNCOSwgMHg1OTc5LCAweDAzQkMsIDB4NTk3QiwgMHgxN0Q4LAorICAgIDB4NTk3QywgMHgxN0Q2LCAweDU5N0QsIDB4MDNCQiwgMHg1OTdFLCAweDE3RDksIDB4NTk3RiwgMHgxN0RCLAorICAgIDB4NTk4MCwgMHgxN0Q1LCAweDU5ODEsIDB4MDNCRSwgMHg1OTgyLCAweDAzQkQsIDB4NTk4MywgMHgwM0JBLAorICAgIDB4NTk4NCwgMHgwM0I4LCAweDU5ODUsIDB4MTdENywgMHg1OThBLCAweDA0N0IsIDB4NTk4RCwgMHgwNDc4LAorICAgIDB4NTk4RSwgMHgxODVELCAweDU5OEYsIDB4MTg2MCwgMHg1OTkwLCAweDE4NUYsIDB4NTk5MiwgMHgwNDcyLAorICAgIDB4NTk5MywgMHgwNDdBLCAweDU5OTYsIDB4MDQ3NywgMHg1OTk3LCAweDE4NUMsIDB4NTk5OCwgMHgxODVBLAorICAgIDB4NTk5OSwgMHgwNDc2LCAweDU5OUQsIDB4MDQ3MSwgMHg1OTlFLCAweDA0NzQsIDB4NTlBMCwgMHgxODVCLAorICAgIDB4NTlBMSwgMHgxODYyLCAweDU5QTIsIDB4MTg1RSwgMHg1OUEzLCAweDA0NzUsIDB4NTlBNCwgMHgwNDc5LAorICAgIDB4NTlBNSwgMHgwNDdDLCAweDU5QTYsIDB4MTg1OSwgMHg1OUE3LCAweDE4NjEsIDB4NTlBOCwgMHgwNDczLAorICAgIDB4NTlBRSwgMHgwNThCLCAweDU5QUYsIDB4MDU5MywgMHg1OUIxLCAweDE5NTEsIDB4NTlCMiwgMHgxOTRBLAorICAgIDB4NTlCMywgMHgwNTk0LCAweDU5QjQsIDB4MTk1NSwgMHg1OUI1LCAweDE5NDYsIDB4NTlCNiwgMHgxOTRELAorICAgIDB4NTlCOSwgMHgwNThBLCAweDU5QkEsIDB4MTk0NywgMHg1OUJCLCAweDA1ODgsIDB4NTlCQywgMHgxOTRFLAorICAgIDB4NTlCRCwgMHgxOTUyLCAweDU5QkUsIDB4MDU4NywgMHg1OUMwLCAweDE5NTMsIDB4NTlDMSwgMHgxOTRDLAorICAgIDB4NTlDMywgMHgxOTRGLCAweDU5QzUsIDB4MDU5NiwgMHg1OUM2LCAweDA1OEQsIDB4NTlDNywgMHgxOTU2LAorICAgIDB4NTlDOCwgMHgxOTU0LCAweDU5Q0EsIDB4MDU5MiwgMHg1OUNCLCAweDA1OTAsIDB4NTlDQywgMHgxOTRCLAorICAgIDB4NTlDRCwgMHgwNThGLCAweDU5Q0UsIDB4MTk0OSwgMHg1OUNGLCAweDE5NDgsIDB4NTlEMCwgMHgwNThFLAorICAgIDB4NTlEMSwgMHgwNThDLCAweDU5RDIsIDB4MDU5NSwgMHg1OUQzLCAweDA1OTEsIDB4NTlENCwgMHgwNTg5LAorICAgIDB4NTlENiwgMHgxOTUwLCAweDU5RDgsIDB4MDZGNSwgMHg1OURBLCAweDA2RkMsIDB4NTlEQiwgMHgxQUFCLAorICAgIDB4NTlEQywgMHgwNkY0LCAweDU5REQsIDB4MUFBMywgMHg1OURFLCAweDFBOUYsIDB4NTlFMCwgMHgxQUFGLAorICAgIDB4NTlFMSwgMHgxQTlFLCAweDU5RTMsIDB4MDZGNywgMHg1OUU0LCAweDFBQTgsIDB4NTlFNSwgMHgwNkZBLAorICAgIDB4NTlFNiwgMHgwNkZELCAweDU5RTgsIDB4MDZGOCwgMHg1OUU5LCAweDFBQUMsIDB4NTlFQSwgMHgwNkZCLAorICAgIDB4NTlFQywgMHgwODhBLCAweDU5RUQsIDB4MUFCMiwgMHg1OUVFLCAweDFBQTAsIDB4NTlGMSwgMHgxQUEyLAorICAgIDB4NTlGMiwgMHgxQUE5LCAweDU5RjMsIDB4MUFBRCwgMHg1OUY0LCAweDFBQjEsIDB4NTlGNSwgMHgxQUFFLAorICAgIDB4NTlGNiwgMHgxQUE3LCAweDU5RjcsIDB4MUFBQSwgMHg1OUZBLCAweDFBQTQsIDB4NTlGQiwgMHgwNkZGLAorICAgIDB4NTlGQywgMHgxQUE2LCAweDU5RkQsIDB4MUFBNSwgMHg1OUZFLCAweDFBQjAsIDB4NTlGRiwgMHgwNkY2LAorICAgIDB4NUEwMCwgMHgxQUExLCAweDVBMDEsIDB4MDZGRSwgMHg1QTAzLCAweDA2RjksIDB4NUEwOSwgMHgwODkwLAorICAgIDB4NUEwQSwgMHgxQzc1LCAweDVBMEMsIDB4MDg4RiwgMHg1QTBGLCAweDFDNzMsIDB4NUExMSwgMHgwODg0LAorICAgIDB4NUExMywgMHgwODg5LCAweDVBMTUsIDB4MUM3MiwgMHg1QTE2LCAweDFDNkYsIDB4NUExNywgMHgxQzc0LAorICAgIDB4NUExOCwgMHgwODg1LCAweDVBMTksIDB4MUM2RSwgMHg1QTFCLCAweDA4ODgsIDB4NUExQywgMHgwODg2LAorICAgIDB4NUExRSwgMHgxQzc2LCAweDVBMUYsIDB4MDg4NywgMHg1QTIwLCAweDA4OEIsIDB4NUEyMywgMHgwODhDLAorICAgIDB4NUEyNSwgMHgwODhFLCAweDVBMjksIDB4MDg4RCwgMHg1QTJELCAweDFDNzAsIDB4NUEyRSwgMHgxQzcxLAorICAgIDB4NUEzMywgMHgxQzc3LCAweDVBMzUsIDB4MUU5QywgMHg1QTM2LCAweDBBNDYsIDB4NUEzNywgMHgyMEZELAorICAgIDB4NUEzOCwgMHgxRTlCLCAweDVBMzksIDB4MUVBRSwgMHg1QTNDLCAweDBBNEMsIDB4NUEzRSwgMHgxRUFDLAorICAgIDB4NUE0MCwgMHgwQTRCLCAweDVBNDEsIDB4MEE0NywgMHg1QTQyLCAweDFFQjUsIDB4NUE0MywgMHgxRUE1LAorICAgIDB4NUE0NCwgMHgxRUE4LCAweDVBNDYsIDB4MEE0RiwgMHg1QTQ3LCAweDFFQjIsIDB4NUE0OCwgMHgxRUFBLAorICAgIDB4NUE0OSwgMHgwQTQ4LCAweDVBNEEsIDB4MEE1MCwgMHg1QTRDLCAweDFFQUYsIDB4NUE0RCwgMHgxRUFELAorICAgIDB4NUE1MCwgMHgxRTlFLCAweDVBNTEsIDB4MUVCMywgMHg1QTUyLCAweDFFQTcsIDB4NUE1MywgMHgxRUEyLAorICAgIDB4NUE1NSwgMHgxRTk4LCAweDVBNTYsIDB4MUVCNCwgMHg1QTU3LCAweDFFQTQsIDB4NUE1OCwgMHgxRTk3LAorICAgIDB4NUE1QSwgMHgwQTRFLCAweDVBNUIsIDB4MUVBOSwgMHg1QTVDLCAweDFFQjYsIDB4NUE1RCwgMHgxRUE2LAorICAgIDB4NUE1RSwgMHgxRTlBLCAweDVBNUYsIDB4MUU5RiwgMHg1QTYwLCAweDFFOTYsIDB4NUE2MiwgMHgwQTRELAorICAgIDB4NUE2NCwgMHgxRUEzLCAweDVBNjUsIDB4MUVBMCwgMHg1QTY2LCAweDBBNDksIDB4NUE2NywgMHgxRTk5LAorICAgIDB4NUE2OSwgMHgxRUIxLCAweDVBNkEsIDB4MEE0QSwgMHg1QTZDLCAweDFFQTEsIDB4NUE2RCwgMHgxRTlELAorICAgIDB4NUE3MCwgMHgxRUIwLCAweDVBNzcsIDB4MEMyMywgMHg1QTc4LCAweDIwRjYsIDB4NUE3QSwgMHgyMEYzLAorICAgIDB4NUE3QiwgMHgyMTA0LCAweDVBN0MsIDB4MjBGOCwgMHg1QTdELCAweDIxMDUsIDB4NUE3RiwgMHgwQzI1LAorICAgIDB4NUE4MywgMHgyMTAxLCAweDVBODQsIDB4MjBGRSwgMHg1QThBLCAweDIwRkYsIDB4NUE4QiwgMHgyMTAyLAorICAgIDB4NUE4QywgMHgyMTA2LCAweDVBOEUsIDB4MUVBQiwgMHg1QThGLCAweDIxMDgsIDB4NUE5MCwgMHgyM0I2LAorICAgIDB4NUE5MiwgMHgwQzI2LCAweDVBOTMsIDB4MjEwOSwgMHg1QTk0LCAweDIwRjEsIDB4NUE5NSwgMHgyMEZCLAorICAgIDB4NUE5NywgMHgyMTAwLCAweDVBOUEsIDB4MEMyNCwgMHg1QTlCLCAweDBDMjcsIDB4NUE5QywgMHgyMTA3LAorICAgIDB4NUE5RCwgMHgyMTBBLCAweDVBOUUsIDB4MjBGNSwgMHg1QTlGLCAweDIwRjIsIDB4NUFBMiwgMHgyMEY0LAorICAgIDB4NUFBNSwgMHgyMEY5LCAweDVBQTYsIDB4MjBGNywgMHg1QUE3LCAweDBDMjgsIDB4NUFBOSwgMHgyMTAzLAorICAgIDB4NUFBQywgMHgyMEZBLCAweDVBQUUsIDB4MjBGQywgMHg1QUFGLCAweDIwRjAsIDB4NUFCMCwgMHgyM0FBLAorICAgIDB4NUFCMSwgMHgyM0E4LCAweDVBQjIsIDB4MERGQywgMHg1QUIzLCAweDBERkEsIDB4NUFCNCwgMHgyM0IyLAorICAgIDB4NUFCNSwgMHgyM0E5LCAweDVBQjYsIDB4MjNCMywgMHg1QUI3LCAweDIzQUYsIDB4NUFCOCwgMHgyM0E3LAorICAgIDB4NUFCOSwgMHgyM0I1LCAweDVBQkEsIDB4MjNBNiwgMHg1QUJCLCAweDIzQUQsIDB4NUFCQywgMHgwREY5LAorICAgIDB4NUFCRCwgMHgwREY4LCAweDVBQkUsIDB4MERGNywgMHg1QUJGLCAweDIzQUIsIDB4NUFDMCwgMHgyM0IwLAorICAgIDB4NUFDMSwgMHgwREY0LCAweDVBQzIsIDB4MERGQiwgMHg1QUM0LCAweDIzQTQsIDB4NUFDNiwgMHgyM0FFLAorICAgIDB4NUFDNywgMHgyM0EzLCAweDVBQzgsIDB4MjNBQywgMHg1QUM5LCAweDBERjUsIDB4NUFDQSwgMHgyM0IxLAorICAgIDB4NUFDQiwgMHgyM0E1LCAweDVBQ0MsIDB4MERGNiwgMHg1QUNELCAweDIzQjQsIDB4NUFENSwgMHgyNjUwLAorICAgIDB4NUFENiwgMHgwRkI0LCAweDVBRDcsIDB4MEZCMywgMHg1QUQ4LCAweDBGQjUsIDB4NUFEOSwgMHgyNjVDLAorICAgIDB4NUFEQSwgMHgyNjUyLCAweDVBREIsIDB4MjY1OCwgMHg1QURDLCAweDI2NEQsIDB4NUFERCwgMHgyNjVCLAorICAgIDB4NUFERSwgMHgyNjVBLCAweDVBREYsIDB4MjY1RSwgMHg1QUUwLCAweDI2NTcsIDB4NUFFMSwgMHgwRkIwLAorICAgIDB4NUFFMiwgMHgyNjU2LCAweDVBRTMsIDB4MEZCNiwgMHg1QUU1LCAweDI2NEYsIDB4NUFFNiwgMHgwRkIxLAorICAgIDB4NUFFOCwgMHgyNjVELCAweDVBRTksIDB4MEZCMiwgMHg1QUVBLCAweDI2NTEsIDB4NUFFQiwgMHgyNjU0LAorICAgIDB4NUFFQywgMHgyNjU5LCAweDVBRUQsIDB4MjY1MywgMHg1QUVFLCAweDI2NEUsIDB4NUFGMywgMHgyNjU1LAorICAgIDB4NUFGNCwgMHgyOEFCLCAweDVBRjUsIDB4MTEyRCwgMHg1QUY2LCAweDI4QUUsIDB4NUFGNywgMHgyOEFELAorICAgIDB4NUFGOCwgMHgyOEIwLCAweDVBRjksIDB4MjhCMiwgMHg1QUZBLCAweDM2RUUsIDB4NUFGQiwgMHgxMTJCLAorICAgIDB4NUFGRCwgMHgyOEFDLCAweDVBRkYsIDB4MjhBQSwgMHg1QjAxLCAweDI4QjMsIDB4NUIwMiwgMHgyOEIxLAorICAgIDB4NUIwMywgMHgyOEFGLCAweDVCMDUsIDB4MjhCNSwgMHg1QjA3LCAweDI4QjQsIDB4NUIwOCwgMHgxMTJGLAorICAgIDB4NUIwOSwgMHgxMTJBLCAweDVCMEIsIDB4MTEyQywgMHg1QjBDLCAweDExMkUsIDB4NUIwRiwgMHgyOEI2LAorICAgIDB4NUIxMCwgMHgyQjIyLCAweDVCMTMsIDB4MkIyMSwgMHg1QjE0LCAweDJCMjAsIDB4NUIxNiwgMHgyQjIzLAorICAgIDB4NUIxNywgMHgyQjFDLCAweDVCMTksIDB4MkIxRCwgMHg1QjFBLCAweDJCMjUsIDB4NUIxQiwgMHgyQjFFLAorICAgIDB4NUIxRCwgMHgxMkE4LCAweDVCMUUsIDB4MkIyNywgMHg1QjIwLCAweDJCMjYsIDB4NUIyMSwgMHgyQjFGLAorICAgIDB4NUIyMywgMHgyRDUyLCAweDVCMjQsIDB4MTNDNSwgMHg1QjI1LCAweDJENTAsIDB4NUIyNiwgMHgyRDU1LAorICAgIDB4NUIyNywgMHgyRDU0LCAweDVCMjgsIDB4MkIyNCwgMHg1QjJBLCAweDEzQzQsIDB4NUIyQywgMHgyRDUzLAorICAgIDB4NUIyRCwgMHgyRDRGLCAweDVCMkUsIDB4MkQ1NywgMHg1QjJGLCAweDJENTYsIDB4NUIzMCwgMHgxM0MzLAorICAgIDB4NUIzMiwgMHgyRDUxLCAweDVCMzQsIDB4MTJBOSwgMHg1QjM4LCAweDE0Q0UsIDB4NUIzQywgMHgyRjE4LAorICAgIDB4NUIzRCwgMHgzMDg5LCAweDVCM0UsIDB4MzA4QSwgMHg1QjNGLCAweDMwOEIsIDB4NUI0MCwgMHgxNjBGLAorICAgIDB4NUI0MywgMHgxNjEwLCAweDVCNDUsIDB4MzFDQywgMHg1QjQ3LCAweDMyQ0QsIDB4NUI0OCwgMHgzMkNDLAorICAgIDB4NUI0QiwgMHgzMzdDLCAweDVCNEMsIDB4MzM3RCwgMHg1QjRELCAweDM0MTMsIDB4NUI0RSwgMHgzNDgyLAorICAgIDB4NUI1MCwgMHgwMjdGLCAweDVCNTEsIDB4MDI4MCwgMHg1QjUzLCAweDAyODEsIDB4NUI1NCwgMHgwMkM2LAorICAgIDB4NUI1NSwgMHgwMzMzLCAweDVCNTYsIDB4MTdEQywgMHg1QjU3LCAweDAzQkYsIDB4NUI1OCwgMHgwM0MwLAorICAgIDB4NUI1QSwgMHgwNDdGLCAweDVCNUIsIDB4MDQ4MCwgMHg1QjVDLCAweDA0N0UsIDB4NUI1RCwgMHgwNDdELAorICAgIDB4NUI1RiwgMHgwNTk3LCAweDVCNjIsIDB4MTk1NywgMHg1QjYzLCAweDA1OTksIDB4NUI2NCwgMHgwNTk4LAorICAgIDB4NUI2NSwgMHgxOTU4LCAweDVCNjksIDB4MDcwMCwgMHg1QjZCLCAweDA4OTEsIDB4NUI2QywgMHgxQzc4LAorICAgIDB4NUI2RSwgMHgxRUI4LCAweDVCNzAsIDB4MEE1MSwgMHg1QjcxLCAweDBDMkEsIDB4NUI3MiwgMHgxRUI3LAorICAgIDB4NUI3MywgMHgwQzI5LCAweDVCNzUsIDB4MEZCNywgMHg1Qjc3LCAweDI2NUYsIDB4NUI3OCwgMHgxMkFBLAorICAgIDB4NUI3QSwgMHgxM0M2LCAweDVCN0IsIDB4MkQ1OCwgMHg1QjdELCAweDE2MTEsIDB4NUI3RiwgMHgxNkMwLAorICAgIDB4NUI4MCwgMHgwMjI1LCAweDVCODEsIDB4MTc5RSwgMHg1QjgzLCAweDAzMzQsIDB4NUI4NCwgMHgxNzlGLAorICAgIDB4NUI4NSwgMHgwM0MzLCAweDVCODcsIDB4MDNDMSwgMHg1Qjg4LCAweDAzQzIsIDB4NUI4OSwgMHgwM0M0LAorICAgIDB4NUI4QiwgMHgwNDgyLCAweDVCOEMsIDB4MDQ4MSwgMHg1QjhFLCAweDE4NjMsIDB4NUI4RiwgMHgwNDgzLAorICAgIDB4NUI5MiwgMHgxODY0LCAweDVCOTMsIDB4MTk1OSwgMHg1Qjk1LCAweDE5NUEsIDB4NUI5NywgMHgwNTlBLAorICAgIDB4NUI5OCwgMHgwNTlDLCAweDVCOTksIDB4MDU5RSwgMHg1QjlBLCAweDA1OUIsIDB4NUI5QiwgMHgwNTlGLAorICAgIDB4NUI5QywgMHgwNTlELCAweDVCQTIsIDB4MDcwNCwgMHg1QkEzLCAweDA3MDEsIDB4NUJBNCwgMHgwNzAzLAorICAgIDB4NUJBNSwgMHgwNzA1LCAweDVCQTYsIDB4MDcwMiwgMHg1QkE3LCAweDFDNzksIDB4NUJBOCwgMHgxQUIzLAorICAgIDB4NUJBQywgMHgxQzdCLCAweDVCQUQsIDB4MUM3QSwgMHg1QkFFLCAweDA4OTcsIDB4NUJCMCwgMHgwODkzLAorICAgIDB4NUJCMywgMHgwODk0LCAweDVCQjQsIDB4MDg5NiwgMHg1QkI1LCAweDA4OTgsIDB4NUJCNiwgMHgwODk1LAorICAgIDB4NUJCOCwgMHgwODlBLCAweDVCQjksIDB4MDg5OSwgMHg1QkJGLCAweDBBNTYsIDB4NUJDMCwgMHgxRUJBLAorICAgIDB4NUJDMSwgMHgxRUI5LCAweDVCQzIsIDB4MEE1NSwgMHg1QkM0LCAweDBBNTQsIDB4NUJDNSwgMHgwQTUzLAorICAgIDB4NUJDNiwgMHgwQTU3LCAweDVCQzcsIDB4MEE1MiwgMHg1QkNBLCAweDIxMTAsIDB4NUJDQiwgMHgyMTBELAorICAgIDB4NUJDQywgMHgwQzJDLCAweDVCQ0QsIDB4MjEwQywgMHg1QkNFLCAweDIxMTEsIDB4NUJEMCwgMHgwQzJFLAorICAgIDB4NUJEMSwgMHgyMTBGLCAweDVCRDIsIDB4MEMyQiwgMHg1QkQzLCAweDBDMkQsIDB4NUJENCwgMHgyMTBFLAorICAgIDB4NUJENiwgMHgyM0I3LCAweDVCRDgsIDB4MjNCOCwgMHg1QkQ5LCAweDIzQjksIDB4NUJERSwgMHgwRkI4LAorICAgIDB4NUJERiwgMHgwRkMwLCAweDVCRTAsIDB4MjY2MCwgMHg1QkUxLCAweDBGQkEsIDB4NUJFMiwgMHgwRkJFLAorICAgIDB4NUJFMywgMHgyNjYxLCAweDVCRTQsIDB4MEZCRiwgMHg1QkU1LCAweDBGQkIsIDB4NUJFNiwgMHgwRkJDLAorICAgIDB4NUJFNywgMHgwRkI5LCAweDVCRTgsIDB4MEZCRCwgMHg1QkU5LCAweDExMzIsIDB4NUJFQSwgMHgyMTBCLAorICAgIDB4NUJFQiwgMHgxMTMzLCAweDVCRUMsIDB4MTEzMSwgMHg1QkVFLCAweDExMzAsIDB4NUJFRiwgMHgyQjI4LAorICAgIDB4NUJGMCwgMHgxMkFCLCAweDVCRjEsIDB4MkQ1OSwgMHg1QkYyLCAweDJENUEsIDB4NUJGNSwgMHgxNTdCLAorICAgIDB4NUJGNiwgMHgxNjEyLCAweDVCRjgsIDB4MDI4MiwgMHg1QkZBLCAweDAzQzUsIDB4NUMwMSwgMHgwNzA2LAorICAgIDB4NUMwMywgMHgxQzdDLCAweDVDMDQsIDB4MDg5QiwgMHg1QzA3LCAweDBBNUEsIDB4NUMwOCwgMHgwQTU5LAorICAgIDB4NUMwOSwgMHgwQTU4LCAweDVDMEEsIDB4MEMyRiwgMHg1QzBCLCAweDBDMzAsIDB4NUMwQywgMHgyMTEyLAorICAgIDB4NUMwRCwgMHgwRkMxLCAweDVDMEUsIDB4MTJBQywgMHg1QzBGLCAweDAyODMsIDB4NUMxMCwgMHgxNzg3LAorICAgIDB4NUMxMSwgMHgwMkM3LCAweDVDMTIsIDB4MTdBMCwgMHg1QzE1LCAweDE3REQsIDB4NUMxNiwgMHgwM0M2LAorICAgIDB4NUMxQSwgMHgwNUEwLCAweDVDMUYsIDB4MjNCQSwgMHg1QzIyLCAweDAyODQsIDB4NUMyNCwgMHgwMkM4LAorICAgIDB4NUMyNSwgMHgxN0RFLCAweDVDMjgsIDB4MTg2NSwgMHg1QzJBLCAweDE4NjYsIDB4NUMyQywgMHgwNDg0LAorICAgIDB4NUMzMCwgMHgyMTEzLCAweDVDMzEsIDB4MEMzMSwgMHg1QzMzLCAweDIzQkIsIDB4NUMzNywgMHgxM0M3LAorICAgIDB4NUMzOCwgMHgwMjg1LCAweDVDMzksIDB4MDI5OSwgMHg1QzNBLCAweDAyQzksIDB4NUMzQiwgMHgxN0ExLAorICAgIDB4NUMzQywgMHgwMzM1LCAweDVDM0UsIDB4MDQ4OCwgMHg1QzNGLCAweDA0ODcsIDB4NUM0MCwgMHgwNDg1LAorICAgIDB4NUM0MSwgMHgwNDg2LCAweDVDNDQsIDB4MTk1QiwgMHg1QzQ1LCAweDA1QTIsIDB4NUM0NiwgMHgwNUEzLAorICAgIDB4NUM0NywgMHgxOTVDLCAweDVDNDgsIDB4MDVBMSwgMHg1QzRCLCAweDA3MEEsIDB4NUM0QywgMHgxQUI0LAorICAgIDB4NUM0RCwgMHgwNzA5LCAweDVDNEUsIDB4MDcwNywgMHg1QzRGLCAweDA3MDgsIDB4NUM1MCwgMHgwODlFLAorICAgIDB4NUM1MSwgMHgwODlDLCAweDVDNTQsIDB4MUM3RSwgMHg1QzU1LCAweDA4OUQsIDB4NUM1NiwgMHgxQzdELAorICAgIDB4NUM1OCwgMHgwODkyLCAweDVDNTksIDB4MUVCQiwgMHg1QzVDLCAweDBBNUMsIDB4NUM1RCwgMHgwQTVELAorICAgIDB4NUM2MCwgMHgwQTVCLCAweDVDNjIsIDB4MEZDMiwgMHg1QzYzLCAweDI2NjIsIDB4NUM2NCwgMHgxMTM0LAorICAgIDB4NUM2NSwgMHgxMTM1LCAweDVDNjcsIDB4MjhCNywgMHg1QzY4LCAweDEzQzgsIDB4NUM2OSwgMHgyRjE5LAorICAgIDB4NUM2QSwgMHgyRjFBLCAweDVDNkMsIDB4MTY2RSwgMHg1QzZELCAweDM0ODMsIDB4NUM2RSwgMHgxNzc2LAorICAgIDB4NUM2RiwgMHgwMkNBLCAweDVDNzEsIDB4MDI4NiwgMHg1QzczLCAweDE3QTMsIDB4NUM3NCwgMHgxN0EyLAorICAgIDB4NUM3OSwgMHgwM0M3LCAweDVDN0EsIDB4MTdFMCwgMHg1QzdCLCAweDE3RTEsIDB4NUM3QywgMHgxN0RGLAorICAgIDB4NUM3RSwgMHgxN0UyLCAweDVDODYsIDB4MTg2RSwgMHg1Qzg4LCAweDE4NjksIDB4NUM4OSwgMHgxODZCLAorICAgIDB4NUM4QSwgMHgxODZELCAweDVDOEIsIDB4MTg2QSwgMHg1QzhDLCAweDA0OEMsIDB4NUM4RCwgMHgxODY3LAorICAgIDB4NUM4RiwgMHgxODY4LCAweDVDOTAsIDB4MDQ4OSwgMHg1QzkxLCAweDA0OEEsIDB4NUM5MiwgMHgxODZDLAorICAgIDB4NUM5MywgMHgxODZGLCAweDVDOTQsIDB4MDQ4QiwgMHg1Qzk1LCAweDE4NzAsIDB4NUM5RCwgMHgxOTZBLAorICAgIDB4NUM5RiwgMHgxOTY0LCAweDVDQTAsIDB4MTk1RiwgMHg1Q0ExLCAweDA1QTUsIDB4NUNBMiwgMHgxOTY3LAorICAgIDB4NUNBMywgMHgxOTY1LCAweDVDQTQsIDB4MTk1RSwgMHg1Q0E1LCAweDE5NkIsIDB4NUNBNiwgMHgxOTZFLAorICAgIDB4NUNBNywgMHgxOTY5LCAweDVDQTgsIDB4MTk2MiwgMHg1Q0E5LCAweDA1QTcsIDB4NUNBQSwgMHgxOTY4LAorICAgIDB4NUNBQiwgMHgwNUE4LCAweDVDQUMsIDB4MTk2MywgMHg1Q0FELCAweDE5NjYsIDB4NUNBRSwgMHgxOTVELAorICAgIDB4NUNBRiwgMHgxOTYxLCAweDVDQjAsIDB4MTk2RCwgMHg1Q0IxLCAweDA1QTksIDB4NUNCMywgMHgwNUFBLAorICAgIDB4NUNCNSwgMHgxOTYwLCAweDVDQjYsIDB4MTk2QywgMHg1Q0I3LCAweDA1QTQsIDB4NUNCOCwgMHgwNUE2LAorICAgIDB4NUNDNiwgMHgxQUM1LCAweDVDQzcsIDB4MUFCRSwgMHg1Q0M4LCAweDFBQzQsIDB4NUNDOSwgMHgxQUJELAorICAgIDB4NUNDQSwgMHgxQUJGLCAweDVDQ0IsIDB4MUFCOSwgMHg1Q0NDLCAweDFBQjcsIDB4NUNDRSwgMHgxQUM2LAorICAgIDB4NUNDRiwgMHgxQUMzLCAweDVDRDAsIDB4MUFCNSwgMHg1Q0QyLCAweDA3MEMsIDB4NUNEMywgMHgxQUMxLAorICAgIDB4NUNENCwgMHgxQUMyLCAweDVDRDYsIDB4MUFDMCwgMHg1Q0Q3LCAweDFBQjgsIDB4NUNEOCwgMHgxQUI2LAorICAgIDB4NUNEOSwgMHgwNzBCLCAweDVDREEsIDB4MUFCQywgMHg1Q0RCLCAweDFBQkEsIDB4NUNERSwgMHgxQUJCLAorICAgIDB4NUNERiwgMHgxQUM3LCAweDVDRTgsIDB4MDhBMywgMHg1Q0VBLCAweDA4QTIsIDB4NUNFQywgMHgxQzdGLAorICAgIDB4NUNFRCwgMHgwODlGLCAweDVDRUUsIDB4MUM4MSwgMHg1Q0YwLCAweDA4QTQsIDB4NUNGMSwgMHgxQzgyLAorICAgIDB4NUNGNCwgMHgwOEE3LCAweDVDRjYsIDB4MDhBNSwgMHg1Q0Y3LCAweDFDODMsIDB4NUNGOCwgMHgxQUM4LAorICAgIDB4NUNGOSwgMHgxQzg1LCAweDVDRkIsIDB4MDhBMSwgMHg1Q0ZELCAweDA4QTAsIDB4NUNGRiwgMHgxQzgwLAorICAgIDB4NUQwMCwgMHgxQzg0LCAweDVEMDEsIDB4MDhBNiwgMHg1RDA2LCAweDBBNUYsIDB4NUQwNywgMHgwQTVFLAorICAgIDB4NUQwQiwgMHgxRUJELCAweDVEMEMsIDB4MUVDMSwgMHg1RDBELCAweDFFQzMsIDB4NUQwRSwgMHgwQTYwLAorICAgIDB4NUQwRiwgMHgxRUM2LCAweDVEMTEsIDB4MEE2NCwgMHg1RDEyLCAweDFFQzgsIDB4NUQxNCwgMHgwQTY2LAorICAgIDB4NUQxNiwgMHgwQTYyLCAweDVEMTcsIDB4MEE2QSwgMHg1RDE5LCAweDBBNjcsIDB4NUQxQSwgMHgxRUJGLAorICAgIDB4NUQxQiwgMHgwQTYxLCAweDVEMUQsIDB4MUVCRSwgMHg1RDFFLCAweDFFQkMsIDB4NUQxRiwgMHgxRUNBLAorICAgIDB4NUQyMCwgMHgxRUMwLCAweDVEMjIsIDB4MEE2MywgMHg1RDIzLCAweDFFQzksIDB4NUQyNCwgMHgwQTY4LAorICAgIDB4NUQyNSwgMHgxRUM1LCAweDVEMjYsIDB4MUVDNCwgMHg1RDI3LCAweDBBNjksIDB4NUQyOCwgMHgxRUMyLAorICAgIDB4NUQyOSwgMHgwQTY1LCAweDVEMkUsIDB4MUVDQiwgMHg1RDMwLCAweDFFQzcsIDB4NUQzMSwgMHgyMTIyLAorICAgIDB4NUQzMiwgMHgyMTI5LCAweDVEMzMsIDB4MjExRSwgMHg1RDM0LCAweDBDMzQsIDB4NUQzNSwgMHgyMTFBLAorICAgIDB4NUQzNiwgMHgyMTJBLCAweDVEMzcsIDB4MjExNCwgMHg1RDM4LCAweDIxMjcsIDB4NUQzOSwgMHgyMTI1LAorICAgIDB4NUQzQSwgMHgyMTFGLCAweDVEM0MsIDB4MjEyOCwgMHg1RDNELCAweDIxMjEsIDB4NUQzRiwgMHgyMTE5LAorICAgIDB4NUQ0MCwgMHgyMTJCLCAweDVENDEsIDB4MjExNywgMHg1RDQyLCAweDIxMjQsIDB4NUQ0MywgMHgyMTE1LAorICAgIDB4NUQ0NSwgMHgyMTJDLCAweDVENDcsIDB4MEMzNSwgMHg1RDQ5LCAweDIxMjYsIDB4NUQ0QSwgMHgyM0JFLAorICAgIDB4NUQ0QiwgMHgyMTE4LCAweDVENEMsIDB4MEMzMiwgMHg1RDRFLCAweDIxMUMsIDB4NUQ1MCwgMHgwQzMzLAorICAgIDB4NUQ1MSwgMHgyMTFCLCAweDVENTIsIDB4MjEyMCwgMHg1RDU1LCAweDIxMUQsIDB4NUQ1OSwgMHgyMTIzLAorICAgIDB4NUQ1RSwgMHgyM0MyLCAweDVENjIsIDB4MjNDNSwgMHg1RDYzLCAweDIzQkQsIDB4NUQ2NSwgMHgyM0JGLAorICAgIDB4NUQ2NywgMHgyM0M0LCAweDVENjgsIDB4MjNDMywgMHg1RDY5LCAweDBERkQsIDB4NUQ2QiwgMHgyMTE2LAorICAgIDB4NUQ2QywgMHgyM0MxLCAweDVENkYsIDB4MERGRSwgMHg1RDcxLCAweDIzQkMsIDB4NUQ3MiwgMHgyM0MwLAorICAgIDB4NUQ3NywgMHgyNjY5LCAweDVENzksIDB4MjY3MCwgMHg1RDdBLCAweDI2NjcsIDB4NUQ3QywgMHgyNjZFLAorICAgIDB4NUQ3RCwgMHgyNjY1LCAweDVEN0UsIDB4MjY2RCwgMHg1RDdGLCAweDI2NzEsIDB4NUQ4MCwgMHgyNjY0LAorICAgIDB4NUQ4MSwgMHgyNjY4LCAweDVEODIsIDB4MjY2MywgMHg1RDg0LCAweDBGQzMsIDB4NUQ4NiwgMHgyNjY2LAorICAgIDB4NUQ4NywgMHgwRkM0LCAweDVEODgsIDB4MjY2QywgMHg1RDg5LCAweDI2NkIsIDB4NUQ4QSwgMHgyNjZBLAorICAgIDB4NUQ4RCwgMHgyNjZGLCAweDVEOTIsIDB4MjhCQiwgMHg1RDkzLCAweDI4QkQsIDB4NUQ5NCwgMHgxMTM3LAorICAgIDB4NUQ5NSwgMHgyOEJFLCAweDVEOTcsIDB4MjhCOSwgMHg1RDk5LCAweDI4QjgsIDB4NUQ5QSwgMHgyOEMyLAorICAgIDB4NUQ5QywgMHgyOEMwLCAweDVEOUQsIDB4MTEzNiwgMHg1RDlFLCAweDI4QzMsIDB4NUQ5RiwgMHgyOEJBLAorICAgIDB4NURBMCwgMHgyOEJGLCAweDVEQTEsIDB4MjhDMSwgMHg1REEyLCAweDI4QkMsIDB4NURBNywgMHgyQjJDLAorICAgIDB4NURBOCwgMHgyQjMxLCAweDVEQTksIDB4MkIyQiwgMHg1REFBLCAweDJCMzAsIDB4NURBQywgMHgyQjI5LAorICAgIDB4NURBRCwgMHgyQjMzLCAweDVEQUUsIDB4MkIyRiwgMHg1REFGLCAweDJCMzQsIDB4NURCMCwgMHgyQjJFLAorICAgIDB4NURCMSwgMHgyQjJBLCAweDVEQjIsIDB4MkIzMiwgMHg1REI0LCAweDJCMzUsIDB4NURCNSwgMHgyQjJELAorICAgIDB4NURCNywgMHgyRDVCLCAweDVEQjgsIDB4MTNDQywgMHg1REJBLCAweDEzQ0EsIDB4NURCQywgMHgxM0M5LAorICAgIDB4NURCRCwgMHgxM0NCLCAweDVEQzAsIDB4MkYxQiwgMHg1REMyLCAweDMwMjMsIDB4NURDMywgMHgzMDhDLAorICAgIDB4NURDNiwgMHgzMUNELCAweDVEQzcsIDB4MzFDRSwgMHg1REM5LCAweDE2MTMsIDB4NURDQiwgMHgzMkNFLAorICAgIDB4NURDRCwgMHgxNjZGLCAweDVEQ0YsIDB4MzJDRiwgMHg1REQxLCAweDMzN0YsIDB4NUREMiwgMHgxNkMyLAorICAgIDB4NURENCwgMHgxNkMxLCAweDVERDUsIDB4MzM3RSwgMHg1REQ2LCAweDE2RjcsIDB4NUREOCwgMHgzNDE0LAorICAgIDB4NUREQiwgMHgwMjI2LCAweDVEREQsIDB4MDI4NywgMHg1RERFLCAweDAzQzgsIDB4NURERiwgMHgxN0UzLAorICAgIDB4NURFMCwgMHgxODcxLCAweDVERTEsIDB4MDUxQSwgMHg1REUyLCAweDBBNkIsIDB4NURFNSwgMHgwMjg4LAorICAgIDB4NURFNiwgMHgwMzM4LCAweDVERTcsIDB4MDMzNywgMHg1REU4LCAweDAzMzYsIDB4NURFQiwgMHgwNDhELAorICAgIDB4NURFRSwgMHgwOEE4LCAweDVERjAsIDB4MjNDNiwgMHg1REYxLCAweDAyODksIDB4NURGMiwgMHgwMjhBLAorICAgIDB4NURGMywgMHgwMjhCLCAweDVERjQsIDB4MDJDQiwgMHg1REY3LCAweDA3MEQsIDB4NURGOSwgMHgxQUM5LAorICAgIDB4NURGRCwgMHgwQzM2LCAweDVERkUsIDB4MDI4QywgMHg1REZGLCAweDE3ODgsIDB4NUUwMiwgMHgwMzM5LAorICAgIDB4NUUwMywgMHgwMzNBLCAweDVFMDQsIDB4MTdBNCwgMHg1RTA2LCAweDAzQzksIDB4NUUwQSwgMHgxODcyLAorICAgIDB4NUUwQywgMHgwNDhFLCAweDVFMEUsIDB4MTg3MywgMHg1RTExLCAweDA1QjAsIDB4NUUxNCwgMHgxOTcwLAorICAgIDB4NUUxNSwgMHgwNUFFLCAweDVFMTYsIDB4MDVBRCwgMHg1RTE3LCAweDE5NkYsIDB4NUUxOCwgMHgwNUFCLAorICAgIDB4NUUxOSwgMHgxOTcxLCAweDVFMUEsIDB4MDVBQywgMHg1RTFCLCAweDA1QUYsIDB4NUUxRCwgMHgwNzBFLAorICAgIDB4NUUxRiwgMHgwNzEwLCAweDVFMjAsIDB4MUFDRCwgMHg1RTIxLCAweDFBQ0EsIDB4NUUyMiwgMHgxQUNCLAorICAgIDB4NUUyMywgMHgxQUNDLCAweDVFMjQsIDB4MUFDRSwgMHg1RTI1LCAweDA3MEYsIDB4NUUyOCwgMHgxQzg3LAorICAgIDB4NUUyOSwgMHgxQzg2LCAweDVFMkIsIDB4MDhBQSwgMHg1RTJELCAweDA4QTksIDB4NUUzMywgMHgwQTZFLAorICAgIDB4NUUzNCwgMHgxRUNELCAweDVFMzYsIDB4MEE2RCwgMHg1RTM3LCAweDBBNkYsIDB4NUUzOCwgMHgwQTZDLAorICAgIDB4NUUzRCwgMHgwQzM4LCAweDVFM0UsIDB4MUVDQywgMHg1RTQwLCAweDBDMzksIDB4NUU0MSwgMHgyMTJFLAorICAgIDB4NUU0MywgMHgwQzNBLCAweDVFNDQsIDB4MjEyRCwgMHg1RTQ1LCAweDBDMzcsIDB4NUU0QSwgMHgyM0M5LAorICAgIDB4NUU0QiwgMHgyM0NCLCAweDVFNEMsIDB4MERGRiwgMHg1RTRELCAweDIzQ0EsIDB4NUU0RSwgMHgyM0M4LAorICAgIDB4NUU0RiwgMHgyM0M3LCAweDVFNTMsIDB4MjY3NCwgMHg1RTU0LCAweDBGQzksIDB4NUU1NSwgMHgwRkM3LAorICAgIDB4NUU1NywgMHgwRkM4LCAweDVFNTgsIDB4MjY3MiwgMHg1RTU5LCAweDI2NzMsIDB4NUU1QiwgMHgwRkM1LAorICAgIDB4NUU1QywgMHgyOEM3LCAweDVFNUQsIDB4MjhDNSwgMHg1RTVGLCAweDExMzksIDB4NUU2MCwgMHgyOEM2LAorICAgIDB4NUU2MSwgMHgxMTNBLCAweDVFNjIsIDB4MTEzOCwgMHg1RTYzLCAweDBGQzYsIDB4NUU2NiwgMHgyQjM4LAorICAgIDB4NUU2NywgMHgyQjM2LCAweDVFNjgsIDB4MkIzNywgMHg1RTY5LCAweDI4QzQsIDB4NUU2QSwgMHgyRDVELAorICAgIDB4NUU2QiwgMHgxM0NELCAweDVFNkMsIDB4MkQ1QywgMHg1RTZELCAweDJGMUMsIDB4NUU2RSwgMHgyRjFELAorICAgIDB4NUU2RiwgMHgyQjM5LCAweDVFNzAsIDB4MzA4RCwgMHg1RTcyLCAweDAyOEQsIDB4NUU3MywgMHgwMzNCLAorICAgIDB4NUU3NCwgMHgwM0NCLCAweDVFNzUsIDB4MTdFNCwgMHg1RTc2LCAweDAzQ0EsIDB4NUU3OCwgMHgwNUIxLAorICAgIDB4NUU3OSwgMHgwRTAwLCAweDVFN0EsIDB4MDIyNywgMHg1RTdCLCAweDAyQ0MsIDB4NUU3QywgMHgwMzNDLAorICAgIDB4NUU3RCwgMHgwNzExLCAweDVFN0UsIDB4MEMzQiwgMHg1RTdGLCAweDAyMjgsIDB4NUU4MCwgMHgxN0E1LAorICAgIDB4NUU4MiwgMHgxN0E2LCAweDVFODQsIDB4MTdFNSwgMHg1RTg3LCAweDA0OTAsIDB4NUU4OCwgMHgxODc3LAorICAgIDB4NUU4OSwgMHgxODc1LCAweDVFOEEsIDB4MDQ5MSwgMHg1RThCLCAweDE4NzQsIDB4NUU4QywgMHgxODc2LAorICAgIDB4NUU4RCwgMHgxODc4LCAweDVFOEYsIDB4MDQ4RiwgMHg1RTk1LCAweDA1QjUsIDB4NUU5NiwgMHgwNUI2LAorICAgIDB4NUU5NywgMHgwNUIzLCAweDVFOUEsIDB4MDVCMiwgMHg1RTlCLCAweDFBRDIsIDB4NUU5QywgMHgwNUI0LAorICAgIDB4NUVBMCwgMHgwNzEyLCAweDVFQTIsIDB4MUFEMSwgMHg1RUEzLCAweDFBRDMsIDB4NUVBNCwgMHgxQUQwLAorICAgIDB4NUVBNSwgMHgxQUQ0LCAweDVFQTYsIDB4MDcxMywgMHg1RUE3LCAweDA4QUQsIDB4NUVBOCwgMHgxQzg4LAorICAgIDB4NUVBQSwgMHgxQzhBLCAweDVFQUIsIDB4MDhBQiwgMHg1RUFDLCAweDFDOEIsIDB4NUVBRCwgMHgwOEFDLAorICAgIDB4NUVBRSwgMHgxQzg5LCAweDVFQjAsIDB4MUFDRiwgMHg1RUIxLCAweDFFQ0UsIDB4NUVCMiwgMHgxRUQxLAorICAgIDB4NUVCMywgMHgxRUQyLCAweDVFQjQsIDB4MUVDRiwgMHg1RUI1LCAweDBBNzMsIDB4NUVCNiwgMHgwQTcyLAorICAgIDB4NUVCNywgMHgwQTcwLCAweDVFQjgsIDB4MEE3MSwgMHg1RUI5LCAweDFFRDAsIDB4NUVCRSwgMHgwQTc0LAorICAgIDB4NUVDMSwgMHgwQzNELCAweDVFQzIsIDB4MEMzRSwgMHg1RUM0LCAweDBDM0YsIDB4NUVDNSwgMHgyM0NDLAorICAgIDB4NUVDNiwgMHgyM0NFLCAweDVFQzcsIDB4MjNEMCwgMHg1RUM4LCAweDBFMDIsIDB4NUVDOSwgMHgwRTAxLAorICAgIDB4NUVDQSwgMHgwQzNDLCAweDVFQ0IsIDB4MjNDRiwgMHg1RUNDLCAweDIzQ0QsIDB4NUVDRSwgMHgyNjc4LAorICAgIDB4NUVEMSwgMHgyNjc2LCAweDVFRDIsIDB4MjY3QywgMHg1RUQzLCAweDBGQ0EsIDB4NUVENCwgMHgyNjdELAorICAgIDB4NUVENSwgMHgyNjdBLCAweDVFRDYsIDB4MEZDQiwgMHg1RUQ3LCAweDI2NzcsIDB4NUVEOCwgMHgyNjc1LAorICAgIDB4NUVEOSwgMHgyNjdCLCAweDVFREEsIDB4MTEzQywgMHg1RURCLCAweDI4QzksIDB4NUVEQywgMHgyNjc5LAorICAgIDB4NUVERCwgMHgxMTNFLCAweDVFREUsIDB4MjhDQSwgMHg1RURGLCAweDExM0QsIDB4NUVFMCwgMHgxMTQwLAorICAgIDB4NUVFMSwgMHgyOENCLCAweDVFRTIsIDB4MTEzQiwgMHg1RUUzLCAweDExM0YsIDB4NUVFNSwgMHgyQjNFLAorICAgIDB4NUVFNiwgMHgyQjNDLCAweDVFRTcsIDB4MkIzQiwgMHg1RUU4LCAweDJCM0QsIDB4NUVFOSwgMHgyQjNBLAorICAgIDB4NUVFQywgMHgxNTdELCAweDVFRUUsIDB4MzFDRiwgMHg1RUVGLCAweDMxRDAsIDB4NUVGMSwgMHgzMkQwLAorICAgIDB4NUVGMiwgMHgzMzgwLCAweDVFRjMsIDB4MTc0MiwgMHg1RUY0LCAweDAyMjksIDB4NUVGNiwgMHgwNUI3LAorICAgIDB4NUVGNywgMHgwNDkyLCAweDVFRkEsIDB4MDcxNCwgMHg1RUZFLCAweDAyOEUsIDB4NUVGRiwgMHgwMkNELAorICAgIDB4NUYwMSwgMHgwMzNELCAweDVGMDIsIDB4MTdFNiwgMHg1RjA0LCAweDA0OTMsIDB4NUYwNSwgMHgxODc5LAorICAgIDB4NUYwNywgMHgxQUQ1LCAweDVGMDgsIDB4MDcxNSwgMHg1RjBBLCAweDBGQ0MsIDB4NUYwQiwgMHgwMjhGLAorICAgIDB4NUYwRiwgMHgwM0NDLCAweDVGMTIsIDB4MEUwMywgMHg1RjEzLCAweDAyOTAsIDB4NUYxNCwgMHgwMkNFLAorICAgIDB4NUYxNSwgMHgwMkNGLCAweDVGMTcsIDB4MDMzRiwgMHg1RjE4LCAweDAzM0UsIDB4NUYxQSwgMHgxN0U3LAorICAgIDB4NUYxQiwgMHgwM0NELCAweDVGMUQsIDB4MTg3QSwgMHg1RjFGLCAweDA0OTQsIDB4NUYyMiwgMHgxOTczLAorICAgIDB4NUYyMywgMHgxOTc0LCAweDVGMjQsIDB4MTk3NSwgMHg1RjI2LCAweDA1QjgsIDB4NUYyNywgMHgwNUI5LAorICAgIDB4NUYyOCwgMHgxOTcyLCAweDVGMjksIDB4MDVCQSwgMHg1RjJELCAweDA3MTYsIDB4NUYyRSwgMHgxQUQ2LAorICAgIDB4NUYzMCwgMHgxQzhELCAweDVGMzEsIDB4MDhBRSwgMHg1RjMzLCAweDFDOEMsIDB4NUYzNSwgMHgwQTc1LAorICAgIDB4NUYzNiwgMHgxRUQzLCAweDVGMzcsIDB4MEE3NiwgMHg1RjM4LCAweDFFRDQsIDB4NUYzQywgMHgwQzQwLAorICAgIDB4NUY0MCwgMHgyM0QxLCAweDVGNDMsIDB4MjY3RiwgMHg1RjQ0LCAweDI2N0UsIDB4NUY0NiwgMHgwRkNELAorICAgIDB4NUY0OCwgMHgxMTQxLCAweDVGNDksIDB4MjhDQywgMHg1RjRBLCAweDEyQUQsIDB4NUY0QiwgMHgyQjNGLAorICAgIDB4NUY0QywgMHgxM0NFLCAweDVGNEUsIDB4MTZDMywgMHg1RjRGLCAweDM0MTYsIDB4NUY1MCwgMHgwMjJBLAorICAgIDB4NUY1NCwgMHgxOTc2LCAweDVGNTYsIDB4MUFENywgMHg1RjU3LCAweDBBNzcsIDB4NUY1OCwgMHgyMTJGLAorICAgIDB4NUY1OSwgMHgwRTA0LCAweDVGNUQsIDB4MTRDRiwgMHg1RjYxLCAweDAyMkIsIDB4NUY2MiwgMHgwNDk2LAorICAgIDB4NUY2NCwgMHgwNDk1LCAweDVGNjUsIDB4MDcxNywgMHg1RjY3LCAweDFDOEUsIDB4NUY2OSwgMHgwQTc5LAorICAgIDB4NUY2QSwgMHgwQjg5LCAweDVGNkIsIDB4MEE3QSwgMHg1RjZDLCAweDBBNzgsIDB4NUY2RCwgMHgwQzQxLAorICAgIDB4NUY2RiwgMHgyNjgwLCAweDVGNzAsIDB4MEZDRSwgMHg1RjcxLCAweDExNDIsIDB4NUY3MywgMHgxNzc3LAorICAgIDB4NUY3NCwgMHgxN0U4LCAweDVGNzYsIDB4MTg3QywgMHg1Rjc3LCAweDA0OTcsIDB4NUY3OCwgMHgxODdCLAorICAgIDB4NUY3OSwgMHgwNDk4LCAweDVGN0MsIDB4MDVCRSwgMHg1RjdELCAweDE5NzksIDB4NUY3RSwgMHgxOTc4LAorICAgIDB4NUY3RiwgMHgwNUJELCAweDVGODAsIDB4MDVCQiwgMHg1RjgxLCAweDA1QkMsIDB4NUY4MiwgMHgxOTc3LAorICAgIDB4NUY4NSwgMHgwNzE5LCAweDVGODYsIDB4MUFEOCwgMHg1Rjg3LCAweDA3MUMsIDB4NUY4OCwgMHgwNzE4LAorICAgIDB4NUY4OSwgMHgwNzFFLCAweDVGOEEsIDB4MDcxQSwgMHg1RjhCLCAweDA3MUIsIDB4NUY4QywgMHgwNzFELAorICAgIDB4NUY5MCwgMHgwOEIxLCAweDVGOTEsIDB4MDhCMCwgMHg1RjkyLCAweDA4QUYsIDB4NUY5NiwgMHgxRUQ2LAorICAgIDB4NUY5NywgMHgwQTdCLCAweDVGOTgsIDB4MEE3RSwgMHg1Rjk5LCAweDBBN0MsIDB4NUY5QiwgMHgxRUQ1LAorICAgIDB4NUY5QywgMHgwQTgxLCAweDVGOUUsIDB4MEE3RCwgMHg1RjlGLCAweDFFRDcsIDB4NUZBMCwgMHgwQTgwLAorICAgIDB4NUZBMSwgMHgwQTdGLCAweDVGQTUsIDB4MjEzMSwgMHg1RkE2LCAweDIxMzAsIDB4NUZBOCwgMHgwQzQ0LAorICAgIDB4NUZBOSwgMHgwQzQyLCAweDVGQUEsIDB4MEM0MywgMHg1RkFCLCAweDIxMzIsIDB4NUZBQywgMHgwRTA1LAorICAgIDB4NUZBRCwgMHgyM0QzLCAweDVGQUUsIDB4MEUwNiwgMHg1RkFGLCAweDIzRDIsIDB4NUZCMiwgMHgyOENELAorICAgIDB4NUZCNSwgMHgxMTQ0LCAweDVGQjYsIDB4MjY4MSwgMHg1RkI3LCAweDExNDMsIDB4NUZCOSwgMHgwRkNGLAorICAgIDB4NUZCQiwgMHgyQjQxLCAweDVGQkMsIDB4MkI0MCwgMHg1RkJELCAweDEzQ0YsIDB4NUZCRSwgMHgyRDVFLAorICAgIDB4NUZCRiwgMHgzMDhFLCAweDVGQzAsIDB4MzFEMSwgMHg1RkMxLCAweDMxRDIsIDB4NUZDMywgMHgwMkQwLAorICAgIDB4NUZDNSwgMHgwMzQwLCAweDVGQzksIDB4MTdBNywgMHg1RkNDLCAweDA0OUEsIDB4NUZDRCwgMHgwNDlDLAorICAgIDB4NUZDRiwgMHgxN0VCLCAweDVGRDAsIDB4MTg3RiwgMHg1RkQxLCAweDE4N0UsIDB4NUZEMiwgMHgxODdELAorICAgIDB4NUZENCwgMHgxN0VBLCAweDVGRDUsIDB4MTdFOSwgMHg1RkQ2LCAweDAzQ0YsIDB4NUZENywgMHgwNDlCLAorICAgIDB4NUZEOCwgMHgwNDk5LCAweDVGRDksIDB4MDNDRSwgMHg1RkRELCAweDA1QkYsIDB4NUZERSwgMHgxOTdBLAorICAgIDB4NUZFMCwgMHgwNUMwLCAweDVGRTEsIDB4MTg4NCwgMHg1RkUzLCAweDE4ODYsIDB4NUZFNCwgMHgxODg1LAorICAgIDB4NUZFNSwgMHgxOTdCLCAweDVGRTgsIDB4MTg4MSwgMHg1RkVBLCAweDA0QTAsIDB4NUZFQiwgMHgwNDlFLAorICAgIDB4NUZFRCwgMHgxODgwLCAweDVGRUUsIDB4MTg4MiwgMHg1RkVGLCAweDE4ODgsIDB4NUZGMSwgMHgwNDlELAorICAgIDB4NUZGMywgMHgxODgzLCAweDVGRjQsIDB4MTg4QywgMHg1RkY1LCAweDA1QzIsIDB4NUZGNywgMHgxODg5LAorICAgIDB4NUZGOCwgMHgwNDlGLCAweDVGRkEsIDB4MTg4NywgMHg1RkZCLCAweDE4OEEsIDB4NUZGRCwgMHgwNUMxLAorICAgIDB4NUZGRiwgMHgwNUMzLCAweDYwMDAsIDB4MTg4QiwgMHg2MDA5LCAweDE5OEYsIDB4NjAwQSwgMHgxOTgyLAorICAgIDB4NjAwQiwgMHgxOTgwLCAweDYwMEMsIDB4MTk4RSwgMHg2MDBELCAweDE5ODksIDB4NjAwRSwgMHgwNzIzLAorICAgIDB4NjAwRiwgMHgwNUM0LCAweDYwMTAsIDB4MTk4QSwgMHg2MDExLCAweDE5OEQsIDB4NjAxMiwgMHgwNzFGLAorICAgIDB4NjAxMywgMHgxOThDLCAweDYwMTQsIDB4MDVDNSwgMHg2MDE1LCAweDA1Q0EsIDB4NjAxNiwgMHgwNUM4LAorICAgIDB4NjAxNywgMHgxOTgzLCAweDYwMTksIDB4MTk3RSwgMHg2MDFBLCAweDE5ODUsIDB4NjAxQiwgMHgwNUNGLAorICAgIDB4NjAxQywgMHgxOTkwLCAweDYwMUQsIDB4MDcyMCwgMHg2MDFFLCAweDE5ODYsIDB4NjAyMCwgMHgwNzIxLAorICAgIDB4NjAyMSwgMHgwNUNCLCAweDYwMjIsIDB4MTk4OCwgMHg2MDI0LCAweDFBRTcsIDB4NjAyNSwgMHgwNzIyLAorICAgIDB4NjAyNiwgMHgxOTdELCAweDYwMjcsIDB4MDVDQywgMHg2MDI4LCAweDA3MjQsIDB4NjAyOSwgMHgwNUNELAorICAgIDB4NjAyQSwgMHgwNUM5LCAweDYwMkIsIDB4MDVDRSwgMHg2MDJDLCAweDE5ODcsIDB4NjAyRCwgMHgxOTdDLAorICAgIDB4NjAyRSwgMHgxOThCLCAweDYwMkYsIDB4MDVDNiwgMHg2MDMyLCAweDE5N0YsIDB4NjAzMywgMHgxOTg0LAorICAgIDB4NjAzNCwgMHgxOTgxLCAweDYwMzUsIDB4MDVDNywgMHg2MDM3LCAweDFBRDksIDB4NjAzOSwgMHgxQURBLAorICAgIDB4NjA0MCwgMHgxQUU0LCAweDYwNDEsIDB4MUM5MiwgMHg2MDQyLCAweDFBRTUsIDB4NjA0MywgMHgwNzJBLAorICAgIDB4NjA0NCwgMHgxQUU4LCAweDYwNDUsIDB4MUFERSwgMHg2MDQ2LCAweDA3MjksIDB4NjA0NywgMHgxQUUwLAorICAgIDB4NjA0OSwgMHgxQUUxLCAweDYwNEMsIDB4MUFFMywgMHg2MDRELCAweDA3MjUsIDB4NjA1MCwgMHgwOEI1LAorICAgIDB4NjA1MiwgMHgzNkVDLCAweDYwNTMsIDB4MUFERiwgMHg2MDU0LCAweDFBREIsIDB4NjA1NSwgMHgwOEI2LAorICAgIDB4NjA1OCwgMHgxQUU5LCAweDYwNTksIDB4MDhCMiwgMHg2MDVBLCAweDFDOTAsIDB4NjA1QiwgMHgxQUUyLAorICAgIDB4NjA1RCwgMHgxQzhGLCAweDYwNUUsIDB4MUFERCwgMHg2MDVGLCAweDFBRTYsIDB4NjA2MiwgMHgwNzI4LAorICAgIDB4NjA2MywgMHgwOEIzLCAweDYwNjQsIDB4MDcyRSwgMHg2MDY1LCAweDA4QjQsIDB4NjA2NiwgMHgxQUVBLAorICAgIDB4NjA2NywgMHgxQzkxLCAweDYwNjgsIDB4MDcyNywgMHg2MDY5LCAweDA4QjgsIDB4NjA2QSwgMHgwNzJELAorICAgIDB4NjA2QiwgMHgwNzJDLCAweDYwNkMsIDB4MDcyQiwgMHg2MDZELCAweDA4QjcsIDB4NjA2RSwgMHgxQUVCLAorICAgIDB4NjA2RiwgMHgwOEI5LCAweDYwNzAsIDB4MDcyNiwgMHg2MDcyLCAweDFBREMsIDB4NjA3RiwgMHgwQTgyLAorICAgIDB4NjA4MCwgMHgxQzk1LCAweDYwODEsIDB4MUM5NywgMHg2MDgzLCAweDFDOTksIDB4NjA4NCwgMHgwOEJBLAorICAgIDB4NjA4NSwgMHgwOEMwLCAweDYwODYsIDB4MUVEQSwgMHg2MDg3LCAweDFDOUQsIDB4NjA4OCwgMHgxQzk0LAorICAgIDB4NjA4OSwgMHgwQTg0LCAweDYwOEEsIDB4MUVEOCwgMHg2MDhDLCAweDA4QkYsIDB4NjA4RCwgMHgwOEJELAorICAgIDB4NjA4RSwgMHgxQzlGLCAweDYwOTAsIDB4MUVEOSwgMHg2MDkyLCAweDFDOTYsIDB4NjA5NCwgMHgwOEJFLAorICAgIDB4NjA5NSwgMHgxQzlBLCAweDYwOTYsIDB4MDhDMSwgMHg2MDk3LCAweDFDOUMsIDB4NjA5QSwgMHgwOEJDLAorICAgIDB4NjA5QiwgMHgxQzlCLCAweDYwOUMsIDB4MUM5RSwgMHg2MDlELCAweDFDOTgsIDB4NjA5RiwgMHgwOEJCLAorICAgIDB4NjBBMCwgMHgwQTg1LCAweDYwQTIsIDB4MUM5MywgMHg2MEEzLCAweDBBODMsIDB4NjBBOCwgMHgwQTg2LAorICAgIDB4NjBCMCwgMHgxRURDLCAweDYwQjEsIDB4MUVFNSwgMHg2MEIyLCAweDBDNDcsIDB4NjBCNCwgMHgwQTg4LAorICAgIDB4NjBCNSwgMHgwQThELCAweDYwQjYsIDB4MEM0OCwgMHg2MEI3LCAweDFFRTcsIDB4NjBCOCwgMHgwQTk0LAorICAgIDB4NjBCOSwgMHgyMTM0LCAweDYwQkEsIDB4MUVERCwgMHg2MEJCLCAweDBBOEMsIDB4NjBCQywgMHgwQThGLAorICAgIDB4NjBCRCwgMHgwQThBLCAweDYwQkUsIDB4MUVEQiwgMHg2MEJGLCAweDFFRTksIDB4NjBDMCwgMHgxRUVDLAorICAgIDB4NjBDMSwgMHgyMTQzLCAweDYwQzMsIDB4MUVFQSwgMHg2MEM0LCAweDIxMzgsIDB4NjBDNSwgMHgwQThCLAorICAgIDB4NjBDNiwgMHgwQTkyLCAweDYwQzcsIDB4MEE5NiwgMHg2MEM4LCAweDFFRTQsIDB4NjBDOSwgMHgyMTMzLAorICAgIDB4NjBDQSwgMHgxRUU4LCAweDYwQ0IsIDB4MEE4NywgMHg2MENDLCAweDIxMzUsIDB4NjBDRCwgMHgxRUVCLAorICAgIDB4NjBDRSwgMHgyMTM3LCAweDYwQ0YsIDB4MUVFMCwgMHg2MEQxLCAweDBDNDUsIDB4NjBEMywgMHgxRURFLAorICAgIDB4NjBENCwgMHgxRURGLCAweDYwRDUsIDB4MEE5MSwgMHg2MEQ4LCAweDBBOTAsIDB4NjBEOSwgMHgxRUUyLAorICAgIDB4NjBEQSwgMHgwQTk1LCAweDYwREIsIDB4MUVFNiwgMHg2MERDLCAweDBBOEUsIDB4NjBERCwgMHgxRUUzLAorICAgIDB4NjBERiwgMHgwQTkzLCAweDYwRTAsIDB4MEM0OSwgMHg2MEUxLCAweDBDNDYsIDB4NjBFMiwgMHgyMTM2LAorICAgIDB4NjBFNCwgMHgxRUUxLCAweDYwRTYsIDB4MEE4OSwgMHg2MEYwLCAweDBDNEUsIDB4NjBGMSwgMHgwQzUyLAorICAgIDB4NjBGMiwgMHgyMTNBLCAweDYwRjMsIDB4MEUwQiwgMHg2MEY0LCAweDBDNTAsIDB4NjBGNSwgMHgyMTNFLAorICAgIDB4NjBGNiwgMHgwQzU0LCAweDYwRjcsIDB4MjNENCwgMHg2MEY4LCAweDIxNDAsIDB4NjBGOSwgMHgwRTBELAorICAgIDB4NjBGQSwgMHgwQzRDLCAweDYwRkIsIDB4MEM0RiwgMHg2MEZDLCAweDIxNDEsIDB4NjBGRSwgMHgyMTQyLAorICAgIDB4NjBGRiwgMHgyMTQ4LCAweDYxMDAsIDB4MEM1NiwgMHg2MTAxLCAweDBFMEUsIDB4NjEwMywgMHgyMTQ0LAorICAgIDB4NjEwNCwgMHgyMTQ5LCAweDYxMDUsIDB4MjEzRCwgMHg2MTA2LCAweDBFMTgsIDB4NjEwOCwgMHgwRTBGLAorICAgIDB4NjEwOSwgMHgwQzU1LCAweDYxMEEsIDB4MjEzQiwgMHg2MTBCLCAweDIxNEEsIDB4NjEwRCwgMHgwRTE3LAorICAgIDB4NjEwRSwgMHgwQzUzLCAweDYxMEYsIDB4MEUwOCwgMHg2MTEwLCAweDIxNDcsIDB4NjExMiwgMHgwQzU3LAorICAgIDB4NjExMywgMHgyMTNGLCAweDYxMTQsIDB4MjEzOSwgMHg2MTE1LCAweDBDNEQsIDB4NjExNiwgMHgyMTNDLAorICAgIDB4NjExOCwgMHgyMTQ1LCAweDYxMUEsIDB4MEUwNywgMHg2MTFCLCAweDBFMEMsIDB4NjExQywgMHgwQzRBLAorICAgIDB4NjExRCwgMHgyMTQ2LCAweDYxMUYsIDB4MEUwQSwgMHg2MTIzLCAweDBDNEIsIDB4NjEyNywgMHgwRTE2LAorICAgIDB4NjEyOCwgMHgyNjgzLCAweDYxMjksIDB4MjNERiwgMHg2MTJCLCAweDIzRDcsIDB4NjEyQywgMHgyNjgyLAorICAgIDB4NjEyRSwgMHgyM0RCLCAweDYxMkYsIDB4MjNERCwgMHg2MTMyLCAweDIzREEsIDB4NjEzNCwgMHgwRTE1LAorICAgIDB4NjEzNiwgMHgyM0Q5LCAweDYxMzcsIDB4MEUxOSwgMHg2MTNCLCAweDI2OTIsIDB4NjEzRSwgMHgwRTE0LAorICAgIDB4NjEzRiwgMHgwRkQxLCAweDYxNDAsIDB4MjNFMCwgMHg2MTQxLCAweDI2ODQsIDB4NjE0NCwgMHgwRTEyLAorICAgIDB4NjE0NSwgMHgyM0Q4LCAweDYxNDYsIDB4MjNEQywgMHg2MTQ3LCAweDBGRDAsIDB4NjE0OCwgMHgwRTA5LAorICAgIDB4NjE0OSwgMHgyM0Q1LCAweDYxNEEsIDB4MjNENiwgMHg2MTRCLCAweDBGRDIsIDB4NjE0QywgMHgwRTExLAorICAgIDB4NjE0RCwgMHgwRTEzLCAweDYxNEUsIDB4MEUxMCwgMHg2MTRGLCAweDIzREUsIDB4NjE1MiwgMHgyNjg4LAorICAgIDB4NjE1MywgMHgyNjg5LCAweDYxNTQsIDB4MjY4RSwgMHg2MTU1LCAweDExNDksIDB4NjE1NiwgMHgyNjk1LAorICAgIDB4NjE1OCwgMHgwRkQ4LCAweDYxNUEsIDB4MEZENywgMHg2MTVCLCAweDI2OTAsIDB4NjE1RCwgMHgxMTQ4LAorICAgIDB4NjE1RSwgMHgyNjg1LCAweDYxNUYsIDB4MEZENiwgMHg2MTYxLCAweDI2OTQsIDB4NjE2MiwgMHgwRkQ0LAorICAgIDB4NjE2MywgMHgwRkQ1LCAweDYxNjUsIDB4MjY5MSwgMHg2MTY2LCAweDI4REUsIDB4NjE2NywgMHgxMTQ2LAorICAgIDB4NjE2OCwgMHgwQzUxLCAweDYxNkEsIDB4MjY5MywgMHg2MTZCLCAweDExNEQsIDB4NjE2QywgMHgyNjhCLAorICAgIDB4NjE2RSwgMHgxMTQ3LCAweDYxNzAsIDB4MTE0QywgMHg2MTcxLCAweDI2ODYsIDB4NjE3MiwgMHgyNjhBLAorICAgIDB4NjE3MywgMHgyNjg3LCAweDYxNzQsIDB4MjY4RCwgMHg2MTc1LCAweDBGRDksIDB4NjE3NiwgMHgxMTQ1LAorICAgIDB4NjE3NywgMHgwRkQzLCAweDYxNzksIDB4MjhEMCwgMHg2MTdBLCAweDI2OEYsIDB4NjE3QywgMHgxMTRCLAorICAgIDB4NjE3RSwgMHgxMTRFLCAweDYxODAsIDB4MjY4QywgMHg2MTgyLCAweDExNEEsIDB4NjE4MywgMHgyOENGLAorICAgIDB4NjE4OSwgMHgyOEQ0LCAweDYxOEEsIDB4MTJCMSwgMHg2MThCLCAweDI4Q0UsIDB4NjE4QywgMHgyQjRELAorICAgIDB4NjE4RCwgMHgyOERELCAweDYxOEUsIDB4MTE1MiwgMHg2MTkwLCAweDExNTAsIDB4NjE5MSwgMHgxMkFGLAorICAgIDB4NjE5MiwgMHgyOERBLCAweDYxOTMsIDB4MjhENiwgMHg2MTk0LCAweDExNTYsIDB4NjE5NiwgMHgyQjQ0LAorICAgIDB4NjE5QSwgMHgxMTU0LCAweDYxOUIsIDB4MjhENSwgMHg2MTlELCAweDJCNDIsIDB4NjE5RiwgMHgyOEQ5LAorICAgIDB4NjFBMSwgMHgyOERDLCAweDYxQTIsIDB4MjhEMywgMHg2MUE0LCAweDExNTUsIDB4NjFBNywgMHgxMTRGLAorICAgIDB4NjFBOCwgMHgyQjQzLCAweDYxQTksIDB4MTJCMCwgMHg2MUFBLCAweDI4REIsIDB4NjFBQiwgMHgxMTUxLAorICAgIDB4NjFBQywgMHgxMTUzLCAweDYxQUQsIDB4MjhEOCwgMHg2MUFFLCAweDExNTcsIDB4NjFBRiwgMHgyOEQ3LAorICAgIDB4NjFCMCwgMHgyOEQyLCAweDYxQjEsIDB4MjhEMSwgMHg2MUIyLCAweDEyQUUsIDB4NjFCMywgMHgyOERGLAorICAgIDB4NjFCNCwgMHgyQjQ2LCAweDYxQjUsIDB4MkQ2MCwgMHg2MUI2LCAweDEyQjMsIDB4NjFCOCwgMHgyQjRDLAorICAgIDB4NjFCQSwgMHgyQjRBLCAweDYxQkMsIDB4MkQ2MSwgMHg2MUJFLCAweDEyQjQsIDB4NjFCRiwgMHgyQjRCLAorICAgIDB4NjFDMSwgMHgyQjQ4LCAweDYxQzIsIDB4MTNEMSwgMHg2MUMzLCAweDJENUYsIDB4NjFDNSwgMHgyQjQ1LAorICAgIDB4NjFDNiwgMHgyQjQ3LCAweDYxQzcsIDB4MTNEMiwgMHg2MUM4LCAweDEyQjYsIDB4NjFDOSwgMHgxM0QwLAorICAgIDB4NjFDQSwgMHgxMkI1LCAweDYxQ0IsIDB4MTNENCwgMHg2MUNDLCAweDJCNDksIDB4NjFDRCwgMHgxMkIyLAorICAgIDB4NjFENiwgMHgyRjI2LCAweDYxRDgsIDB4MkYxRSwgMHg2MURFLCAweDJENjcsIDB4NjFERiwgMHgyRjFGLAorICAgIDB4NjFFMCwgMHgyRDYzLCAweDYxRTMsIDB4MTREMCwgMHg2MUU0LCAweDJENjUsIDB4NjFFNSwgMHgyRDY0LAorICAgIDB4NjFFNiwgMHgxM0QzLCAweDYxRTcsIDB4MkQ2MiwgMHg2MUU4LCAweDJENjYsIDB4NjFFOSwgMHgyRjI3LAorICAgIDB4NjFFQSwgMHgyRjIzLCAweDYxRUIsIDB4MkYyNSwgMHg2MUVELCAweDJGMjAsIDB4NjFFRSwgMHgyRjIxLAorICAgIDB4NjFGMCwgMHgyRjI0LCAweDYxRjEsIDB4MkYyMiwgMHg2MUYyLCAweDE1N0UsIDB4NjFGNSwgMHgxNTgxLAorICAgIDB4NjFGNiwgMHgxNTgwLCAweDYxRjcsIDB4MTU3RiwgMHg2MUY4LCAweDE2MTQsIDB4NjFGOSwgMHgzMUQzLAorICAgIDB4NjFGQSwgMHgxNjE1LCAweDYxRkIsIDB4MzA4RiwgMHg2MUZDLCAweDE2NzAsIDB4NjFGRCwgMHgzMkQxLAorICAgIDB4NjFGRSwgMHgxNjcxLCAweDYxRkYsIDB4MTZDNCwgMHg2MjAwLCAweDE2RjgsIDB4NjIwMSwgMHgzNDE3LAorICAgIDB4NjIwMywgMHgzNDE4LCAweDYyMDQsIDB4MzQxOSwgMHg2MjA3LCAweDM1MzMsIDB4NjIwOCwgMHgwMkQxLAorICAgIDB4NjIwOSwgMHgxN0E4LCAweDYyMEEsIDB4MDM0MSwgMHg2MjBDLCAweDAzRDEsIDB4NjIwRCwgMHgwM0QyLAorICAgIDB4NjIwRSwgMHgwM0QwLCAweDYyMTAsIDB4MDNEMywgMHg2MjExLCAweDA0QTIsIDB4NjIxMiwgMHgwNEExLAorICAgIDB4NjIxNCwgMHgxOTkxLCAweDYyMTUsIDB4MDVEMSwgMHg2MjE2LCAweDA1RDAsIDB4NjIxOSwgMHgxQ0EwLAorICAgIDB4NjIxQSwgMHgwQTk3LCAweDYyMUIsIDB4MEE5OCwgMHg2MjFGLCAweDBDNTgsIDB4NjIyMCwgMHgyM0UxLAorICAgIDB4NjIyMSwgMHgwRTFBLCAweDYyMjIsIDB4MEUxQiwgMHg2MjIzLCAweDIzRTMsIDB4NjIyNCwgMHgyM0U1LAorICAgIDB4NjIyNSwgMHgyM0U0LCAweDYyMjcsIDB4MjY5NywgMHg2MjI5LCAweDI2OTYsIDB4NjIyQSwgMHgwRkRBLAorICAgIDB4NjIyQiwgMHgyNjk4LCAweDYyMkQsIDB4MjhFMCwgMHg2MjJFLCAweDExNTgsIDB4NjIzMCwgMHgxMkI3LAorICAgIDB4NjIzMiwgMHgxM0Q1LCAweDYyMzMsIDB4MTREMSwgMHg2MjM0LCAweDEzRDYsIDB4NjIzNiwgMHgwMkQyLAorICAgIDB4NjIzQSwgMHgxODhELCAweDYyM0QsIDB4MTk5MiwgMHg2MjNFLCAweDA1RDMsIDB4NjIzRiwgMHgwNUQyLAorICAgIDB4NjI0MCwgMHgwNUQ0LCAweDYyNDEsIDB4MDcyRiwgMHg2MjQyLCAweDFBRUMsIDB4NjI0MywgMHgxQUVELAorICAgIDB4NjI0NiwgMHgxQ0ExLCAweDYyNDcsIDB4MDhDMiwgMHg2MjQ4LCAweDBBOTksIDB4NjI0OSwgMHgwQzU5LAorICAgIDB4NjI0QSwgMHgyMTRCLCAweDYyNEIsIDB4MDJEMywgMHg2MjRELCAweDAyOTEsIDB4NjI0RSwgMHgwMkQ0LAorICAgIDB4NjI1MCwgMHgxN0E5LCAweDYyNTEsIDB4MDM0NSwgMHg2MjUyLCAweDAzNDQsIDB4NjI1MywgMHgwMzQyLAorICAgIDB4NjI1NCwgMHgwMzQzLCAweDYyNTgsIDB4MDNENiwgMHg2MjU5LCAweDE3RjIsIDB4NjI1QSwgMHgxN0Y0LAorICAgIDB4NjI1QiwgMHgwM0Q1LCAweDYyNUMsIDB4MTdFQywgMHg2MjVFLCAweDE3RUQsIDB4NjI2MCwgMHgxN0YzLAorICAgIDB4NjI2MSwgMHgxN0VGLCAweDYyNjIsIDB4MTdGMSwgMHg2MjYzLCAweDAzRDQsIDB4NjI2NCwgMHgxN0VFLAorICAgIDB4NjI2NSwgMHgxN0Y1LCAweDYyNjYsIDB4MTdGMCwgMHg2MjZELCAweDA0QTksIDB4NjI2RSwgMHgwNEIyLAorICAgIDB4NjI2RiwgMHgwNEIwLCAweDYyNzAsIDB4MTg5NywgMHg2MjcxLCAweDE4OTQsIDB4NjI3MiwgMHgxODlDLAorICAgIDB4NjI3MywgMHgwNEFFLCAweDYyNzQsIDB4MTg5RCwgMHg2Mjc2LCAweDA0QTcsIDB4NjI3NywgMHgxODlBLAorICAgIDB4NjI3OSwgMHgwNEFELCAweDYyN0EsIDB4MTg5NiwgMHg2MjdCLCAweDE4OTUsIDB4NjI3QywgMHgwNEFCLAorICAgIDB4NjI3RCwgMHgxODlCLCAweDYyN0UsIDB4MDRBQywgMHg2MjdGLCAweDA1RDUsIDB4NjI4MCwgMHgwNEE2LAorICAgIDB4NjI4MSwgMHgxODk4LCAweDYyODMsIDB4MTg4RSwgMHg2Mjg0LCAweDA0QTMsIDB4NjI4NiwgMHgwNEI2LAorICAgIDB4NjI4NywgMHgxODkzLCAweDYyODgsIDB4MTg5OSwgMHg2Mjg5LCAweDA0QTgsIDB4NjI4QSwgMHgwNEFBLAorICAgIDB4NjI4QywgMHgxODhGLCAweDYyOEUsIDB4MTg5MCwgMHg2MjhGLCAweDE4OTEsIDB4NjI5MSwgMHgwNEI1LAorICAgIDB4NjI5MiwgMHgwNEFGLCAweDYyOTMsIDB4MDRCNCwgMHg2Mjk0LCAweDE4OTIsIDB4NjI5NSwgMHgwNEIzLAorICAgIDB4NjI5NiwgMHgwNEE1LCAweDYyOTcsIDB4MDRBNCwgMHg2Mjk4LCAweDA0QjEsIDB4NjJBOCwgMHgwNUUzLAorICAgIDB4NjJBOSwgMHgxOTlFLCAweDYyQUEsIDB4MTk5NywgMHg2MkFCLCAweDA1REUsIDB4NjJBQywgMHgwNUYxLAorICAgIDB4NjJBRCwgMHgxOTkzLCAweDYyQUUsIDB4MTk5QSwgMHg2MkFGLCAweDE5OUMsIDB4NjJCMCwgMHgxOTlGLAorICAgIDB4NjJCMSwgMHgwNUVDLCAweDYyQjMsIDB4MTk5QiwgMHg2MkI0LCAweDE5OTQsIDB4NjJCNSwgMHgwNUVBLAorICAgIDB4NjJCNiwgMHgxOTk4LCAweDYyQjgsIDB4MTlBMCwgMHg2MkI5LCAweDA1REIsIDB4NjJCQiwgMHgxOTlELAorICAgIDB4NjJCQywgMHgwNUU1LCAweDYyQkQsIDB4MDVFNCwgMHg2MkJFLCAweDE5OTYsIDB4NjJCRiwgMHgwNUQ5LAorICAgIDB4NjJDMiwgMHgwNURBLCAweDYyQzQsIDB4MDVEOCwgMHg2MkM2LCAweDA1RjAsIDB4NjJDNywgMHgwNUU4LAorICAgIDB4NjJDOCwgMHgwNUUyLCAweDYyQzksIDB4MDVENiwgMHg2MkNBLCAweDE5OTksIDB4NjJDQiwgMHgwNUUxLAorICAgIDB4NjJDQywgMHgwNUQ3LCAweDYyQ0QsIDB4MDVFOSwgMHg2MkNFLCAweDA1RjIsIDB4NjJDRiwgMHgxQUVFLAorICAgIDB4NjJEMCwgMHgwNUU2LCAweDYyRDEsIDB4MTk5NSwgMHg2MkQyLCAweDA1REMsIDB4NjJEMywgMHgwNURGLAorICAgIDB4NjJENCwgMHgwNUUwLCAweDYyRDYsIDB4MDVFRSwgMHg2MkQ3LCAweDA1RUYsIDB4NjJEOCwgMHgwNUVELAorICAgIDB4NjJEOSwgMHgwNUU3LCAweDYyREEsIDB4MDVFQiwgMHg2MkRCLCAweDA1REQsIDB4NjJEQywgMHgwNzMwLAorICAgIDB4NjJFQiwgMHgxQUY0LCAweDYyRUMsIDB4MDczQywgMHg2MkVELCAweDA3MzQsIDB4NjJFRSwgMHgwNzM2LAorICAgIDB4NjJFRiwgMHgwNzNCLCAweDYyRjAsIDB4MUIwMCwgMHg2MkYxLCAweDA3MzksIDB4NjJGMiwgMHgxQ0EyLAorICAgIDB4NjJGMywgMHgwOEMzLCAweDYyRjQsIDB4MDczRSwgMHg2MkY1LCAweDFBRjEsIDB4NjJGNiwgMHgxQUY5LAorICAgIDB4NjJGNywgMHgwNzNBLCAweDYyRjgsIDB4MUFGOCwgMHg2MkY5LCAweDFBRjUsIDB4NjJGQSwgMHgxQUZELAorICAgIDB4NjJGQiwgMHgxQUZGLCAweDYyRkMsIDB4MDczMywgMHg2MkZELCAweDA3MzcsIDB4NjJGRSwgMHgwNzNELAorICAgIDB4NjJGRiwgMHgwOEM1LCAweDYzMDAsIDB4MUFGQSwgMHg2MzAxLCAweDA3MzUsIDB4NjMwMiwgMHgwNzQwLAorICAgIDB4NjMwMywgMHgxQUYzLCAweDYzMDcsIDB4MDczOCwgMHg2MzA4LCAweDA4QzQsIDB4NjMwOSwgMHgwNzMyLAorICAgIDB4NjMwQiwgMHgxQUYwLCAweDYzMEMsIDB4MUFGNywgMHg2MzBELCAweDFBRUYsIDB4NjMwRSwgMHgxQUYyLAorICAgIDB4NjMwRiwgMHgxQUY2LCAweDYzMTAsIDB4MUNBMywgMHg2MzExLCAweDA3M0YsIDB4NjMxMywgMHgxQUZCLAorICAgIDB4NjMxNCwgMHgxQUZDLCAweDYzMTUsIDB4MUFGRSwgMHg2MzE2LCAweDA3MzEsIDB4NjMyOCwgMHgwOEQzLAorICAgIDB4NjMyOSwgMHgxQ0FGLCAweDYzMkEsIDB4MDhEMSwgMHg2MzJCLCAweDA4RDIsIDB4NjMyQywgMHgxQ0E1LAorICAgIDB4NjMyRCwgMHgxQ0I1LCAweDYzMkYsIDB4MDhDOCwgMHg2MzMyLCAweDFFRUQsIDB4NjMzMywgMHgxQ0I3LAorICAgIDB4NjMzNCwgMHgxQ0IxLCAweDYzMzYsIDB4MUNBOCwgMHg2MzM4LCAweDFDQkEsIDB4NjMzOSwgMHgxQ0FCLAorICAgIDB4NjMzQSwgMHgwOENFLCAweDYzM0IsIDB4MUYwNCwgMHg2MzNDLCAweDFDQUUsIDB4NjMzRCwgMHgwOEQwLAorICAgIDB4NjMzRSwgMHgwOEM3LCAweDYzNDAsIDB4MUNCQywgMHg2MzQxLCAweDFDQjAsIDB4NjM0MiwgMHgwOENBLAorICAgIDB4NjM0MywgMHgxQ0E5LCAweDYzNDQsIDB4MUNBNiwgMHg2MzQ1LCAweDFDQTcsIDB4NjM0NiwgMHgwOENCLAorICAgIDB4NjM0NywgMHgxQ0I2LCAweDYzNDgsIDB4MUNCRCwgMHg2MzQ5LCAweDA4Q0QsIDB4NjM0QSwgMHgxQ0FELAorICAgIDB4NjM0QiwgMHgxQ0FDLCAweDYzNEMsIDB4MDhENSwgMHg2MzRELCAweDA4RDQsIDB4NjM0RSwgMHgwOEM2LAorICAgIDB4NjM0RiwgMHgwOENDLCAweDYzNTAsIDB4MDhDRiwgMHg2MzUxLCAweDFDQjksIDB4NjM1NCwgMHgxQ0IzLAorICAgIDB4NjM1NSwgMHgwOEM5LCAweDYzNTYsIDB4MUNBNCwgMHg2MzU3LCAweDFDQkIsIDB4NjM1OCwgMHgxQ0IyLAorICAgIDB4NjM1OSwgMHgxQ0I0LCAweDYzNUEsIDB4MUNCOCwgMHg2MzY1LCAweDFFRUUsIDB4NjM2NywgMHgwQUExLAorICAgIDB4NjM2OCwgMHgwQUI1LCAweDYzNjksIDB4MEFCNCwgMHg2MzZCLCAweDBBQTksIDB4NjM2RCwgMHgxRjAwLAorICAgIDB4NjM2RSwgMHgxRUZDLCAweDYzNkYsIDB4MUVGOSwgMHg2MzcwLCAweDFGMEIsIDB4NjM3MSwgMHgwQUE0LAorICAgIDB4NjM3MiwgMHgwQTlDLCAweDYzNzUsIDB4MUVGRSwgMHg2Mzc2LCAweDBDNjksIDB4NjM3NywgMHgwQUEwLAorICAgIDB4NjM3OCwgMHgxRjA2LCAweDYzN0EsIDB4MEFCNiwgMHg2MzdCLCAweDBBQjMsIDB4NjM3QywgMHgxRjAyLAorICAgIDB4NjM3RCwgMHgxRUYxLCAweDYzODAsIDB4MEFCMiwgMHg2MzgxLCAweDFGMDgsIDB4NjM4MiwgMHgxRUYwLAorICAgIDB4NjM4MywgMHgwQUE3LCAweDYzODQsIDB4MEFBQiwgMHg2Mzg1LCAweDFGMDcsIDB4NjM4NywgMHgxRUZBLAorICAgIDB4NjM4OCwgMHgwQUFDLCAweDYzODksIDB4MEFBNiwgMHg2MzhBLCAweDFFRUYsIDB4NjM4QywgMHgwQzVCLAorICAgIDB4NjM4RCwgMHgxRjBBLCAweDYzOEUsIDB4MUVGOCwgMHg2MzhGLCAweDBBQjEsIDB4NjM5MCwgMHgxRUZCLAorICAgIDB4NjM5MSwgMHgxRjA5LCAweDYzOTIsIDB4MEFCMCwgMHg2Mzk0LCAweDIxNEMsIDB4NjM5NiwgMHgwQTlELAorICAgIDB4NjM5NywgMHgxRUY2LCAweDYzOTgsIDB4MEFBMiwgMHg2Mzk5LCAweDBBQUQsIDB4NjM5QiwgMHgwQUE4LAorICAgIDB4NjM5QywgMHgxRUZGLCAweDYzOUQsIDB4MUVGNSwgMHg2MzlFLCAweDFFRjMsIDB4NjM5RiwgMHgxRjA1LAorICAgIDB4NjNBMCwgMHgwQTlBLCAweDYzQTEsIDB4MEFBRSwgMHg2M0EyLCAweDBBOUUsIDB4NjNBMywgMHgwQzVBLAorICAgIDB4NjNBNCwgMHgxRjAzLCAweDYzQTUsIDB4MEE5RiwgMHg2M0E3LCAweDBBOUIsIDB4NjNBOCwgMHgwQUFBLAorICAgIDB4NjNBOSwgMHgwQUE1LCAweDYzQUEsIDB4MEFBMywgMHg2M0FCLCAweDFFRjcsIDB4NjNBQywgMHgwQUFGLAorICAgIDB4NjNBRCwgMHgxRUY0LCAweDYzQUUsIDB4MUYwMSwgMHg2M0FGLCAweDFFRkQsIDB4NjNCMCwgMHgyMTRFLAorICAgIDB4NjNCMSwgMHgyMTRELCAweDYzQkQsIDB4MUVGMiwgMHg2M0JFLCAweDIxNUUsIDB4NjNDMCwgMHgwQzVELAorICAgIDB4NjNDMiwgMHgyMTY0LCAweDYzQzMsIDB4MjE1MywgMHg2M0M0LCAweDIxNjEsIDB4NjNDNSwgMHgyM0U2LAorICAgIDB4NjNDNiwgMHgwQzYwLCAweDYzQzcsIDB4MjE2NSwgMHg2M0M4LCAweDIxNjgsIDB4NjNDOSwgMHgwQzVGLAorICAgIDB4NjNDQSwgMHgyMTU2LCAweDYzQ0IsIDB4MjE2NywgMHg2M0NDLCAweDIxNjYsIDB4NjNDRCwgMHgwQzYxLAorICAgIDB4NjNDRSwgMHgyMTRGLCAweDYzQ0YsIDB4MEM1QywgMHg2M0QwLCAweDBDNjQsIDB4NjNEMiwgMHgwQzYyLAorICAgIDB4NjNEMywgMHgyMTYzLCAweDYzRDUsIDB4MjE1OSwgMHg2M0Q2LCAweDBDNjYsIDB4NjNENywgMHgyMTZBLAorICAgIDB4NjNEOCwgMHgyMTYyLCAweDYzRDksIDB4MjE2QiwgMHg2M0RBLCAweDBDNkUsIDB4NjNEQiwgMHgwQzZDLAorICAgIDB4NjNEQywgMHgyMTYwLCAweDYzREQsIDB4MjE1RiwgMHg2M0RGLCAweDIxNUQsIDB4NjNFMCwgMHgyMTU3LAorICAgIDB4NjNFMSwgMHgwQzY1LCAweDYzRTMsIDB4MEM2MywgMHg2M0U0LCAweDFDQUEsIDB4NjNFNSwgMHgyMTUwLAorICAgIDB4NjNFNywgMHgyNDA0LCAweDYzRTgsIDB4MjE1MSwgMHg2M0U5LCAweDBDNUUsIDB4NjNFQSwgMHgwQzZCLAorICAgIDB4NjNFQiwgMHgyM0U4LCAweDYzRUQsIDB4MEM2NywgMHg2M0VFLCAweDBDNjgsIDB4NjNFRiwgMHgyMTUyLAorICAgIDB4NjNGMCwgMHgyMTY5LCAweDYzRjEsIDB4MjNFNywgMHg2M0YyLCAweDIxNUEsIDB4NjNGMywgMHgyMTU1LAorICAgIDB4NjNGNCwgMHgwQzZBLCAweDYzRjUsIDB4MjE1QiwgMHg2M0Y2LCAweDIxNTgsIDB4NjNGOSwgMHgwQzZGLAorICAgIDB4NjQwNiwgMHgwRTJBLCAweDY0MDksIDB4MjNFQiwgMHg2NDBBLCAweDIzRkUsIDB4NjQwQiwgMHgyNDAzLAorICAgIDB4NjQwQywgMHgyM0Y3LCAweDY0MEQsIDB4MEUyNiwgMHg2NDBFLCAweDI0MDgsIDB4NjQwRiwgMHgwRTIzLAorICAgIDB4NjQxMCwgMHgyM0U5LCAweDY0MTIsIDB4MjNFQSwgMHg2NDEzLCAweDBFMUMsIDB4NjQxNCwgMHgwRTI1LAorICAgIDB4NjQxNSwgMHgyM0YxLCAweDY0MTYsIDB4MEUyOCwgMHg2NDE3LCAweDBFMjksIDB4NjQxOCwgMHgyM0YyLAorICAgIDB4NjQxQSwgMHgyM0ZGLCAweDY0MUIsIDB4MjQwNSwgMHg2NDFDLCAweDBFMjQsIDB4NjQxRSwgMHgwRTFFLAorICAgIDB4NjQxRiwgMHgyM0YwLCAweDY0MjAsIDB4MjNFQywgMHg2NDIxLCAweDI0MDcsIDB4NjQyMiwgMHgyM0Y1LAorICAgIDB4NjQyMywgMHgyM0Y2LCAweDY0MjQsIDB4MjNFRCwgMHg2NDI1LCAweDI0MDEsIDB4NjQyNiwgMHgyM0Y4LAorICAgIDB4NjQyNywgMHgyNDAyLCAweDY0MjgsIDB4MjNGQSwgMHg2NDJBLCAweDBFMUYsIDB4NjQyQiwgMHgyNjk5LAorICAgIDB4NjQyQywgMHgwRTIyLCAweDY0MkQsIDB4MEUyMCwgMHg2NDJFLCAweDI0MDYsIDB4NjQyRiwgMHgyM0ZELAorICAgIDB4NjQzMCwgMHgyM0Y5LCAweDY0MzMsIDB4MjNFRSwgMHg2NDM0LCAweDBGRTQsIDB4NjQzNSwgMHgyM0ZDLAorICAgIDB4NjQzNiwgMHgwRTI3LCAweDY0MzcsIDB4MjNGNCwgMHg2NDM5LCAweDIzRjMsIDB4NjQzRCwgMHgwRTIxLAorICAgIDB4NjQzRSwgMHgwRTFELCAweDY0M0YsIDB4MjZBRSwgMHg2NDQwLCAweDI0MDAsIDB4NjQ0MSwgMHgyM0ZCLAorICAgIDB4NjQ0MywgMHgyM0VGLCAweDY0NEIsIDB4MjZBOSwgMHg2NDRELCAweDI2OUEsIDB4NjQ0RSwgMHgyNkE1LAorICAgIDB4NjQ1MCwgMHgyNkFDLCAweDY0NTEsIDB4MEZFMiwgMHg2NDUyLCAweDBDNkQsIDB4NjQ1MywgMHgyNkFBLAorICAgIDB4NjQ1NCwgMHgwRkRELCAweDY0NTgsIDB4MEZEQywgMHg2NDU5LCAweDI2QjEsIDB4NjQ1QiwgMHgyNjlCLAorICAgIDB4NjQ1QywgMHgyNkE4LCAweDY0NUQsIDB4MjY5QywgMHg2NDVFLCAweDI2QTcsIDB4NjQ1RiwgMHgwRkUwLAorICAgIDB4NjQ2MCwgMHgyNkFCLCAweDY0NjEsIDB4MjE1QywgMHg2NDY1LCAweDI2QjIsIDB4NjQ2NiwgMHgyNkEzLAorICAgIDB4NjQ2NywgMHgwRkUzLCAweDY0NjgsIDB4MjhFRSwgMHg2NDY5LCAweDExNTksIDB4NjQ2QiwgMHgyNkIwLAorICAgIDB4NjQ2QywgMHgyNkFGLCAweDY0NkQsIDB4MEZFNSwgMHg2NDZFLCAweDI4RTEsIDB4NjQ2RiwgMHgxMTVBLAorICAgIDB4NjQ3MCwgMHgyOEUyLCAweDY0NzIsIDB4MjY5RiwgMHg2NDczLCAweDI2QTAsIDB4NjQ3NCwgMHgyNjlELAorICAgIDB4NjQ3NSwgMHgyNkEyLCAweDY0NzYsIDB4MjY5RSwgMHg2NDc3LCAweDI2QjMsIDB4NjQ3OCwgMHgwRkRGLAorICAgIDB4NjQ3OSwgMHgxMTVCLCAweDY0N0EsIDB4MEZFMSwgMHg2NDdCLCAweDBGRTYsIDB4NjQ3RCwgMHgyNkExLAorICAgIDB4NjQ3RiwgMHgyNkFELCAweDY0ODIsIDB4MjZBNiwgMHg2NDg1LCAweDI4RTUsIDB4NjQ4NywgMHgwRkRCLAorICAgIDB4NjQ4OCwgMHgxMTVFLCAweDY0ODksIDB4MkI1NCwgMHg2NDhBLCAweDI4RUEsIDB4NjQ4QiwgMHgyOEU5LAorICAgIDB4NjQ4QywgMHgyOEVCLCAweDY0OEYsIDB4MjhFOCwgMHg2NDkwLCAweDExNUYsIDB4NjQ5MiwgMHgxMTY1LAorICAgIDB4NjQ5MywgMHgxMTYyLCAweDY0OTUsIDB4MTE2MywgMHg2NDk2LCAweDI4RTMsIDB4NjQ5NywgMHgyOEU2LAorICAgIDB4NjQ5OCwgMHgyOEYwLCAweDY0OTksIDB4MTE2QiwgMHg2NDlBLCAweDExNjksIDB4NjQ5QywgMHgyOEU3LAorICAgIDB4NjQ5RCwgMHgyMTU0LCAweDY0OUUsIDB4MTE1QywgMHg2NDlGLCAweDI4RUQsIDB4NjRBMCwgMHgyOEU0LAorICAgIDB4NjRBMiwgMHgxMTZDLCAweDY0QTMsIDB4MjhFQywgMHg2NEE0LCAweDBGREUsIDB4NjRBNSwgMHgxMTYxLAorICAgIDB4NjRBNiwgMHgyNkE0LCAweDY0QTksIDB4MTE2NCwgMHg2NEFCLCAweDExNjgsIDB4NjRBQywgMHgxMTZBLAorICAgIDB4NjRBRCwgMHgxMTY3LCAweDY0QUUsIDB4MTE2NiwgMHg2NEIwLCAweDExNjAsIDB4NjRCMSwgMHgyOEVGLAorICAgIDB4NjRCMiwgMHgxMTVELCAweDY0QjMsIDB4MTE2RCwgMHg2NEJCLCAweDEyQkIsIDB4NjRCQywgMHgxMkJDLAorICAgIDB4NjRCRCwgMHgyQjUzLCAweDY0QkUsIDB4MTJDNSwgMHg2NEJGLCAweDEyQzIsIDB4NjRDMSwgMHgxMkI5LAorICAgIDB4NjRDMiwgMHgxMkMwLCAweDY0QzMsIDB4MkI1NSwgMHg2NEM0LCAweDEyQkUsIDB4NjRDNSwgMHgxMkI4LAorICAgIDB4NjRDNywgMHgxMkJGLCAweDY0QzksIDB4MkI1MiwgMHg2NENBLCAweDEzRDgsIDB4NjRDQiwgMHgxMkJBLAorICAgIDB4NjRDRCwgMHgxMkMxLCAweDY0Q0UsIDB4MTNENywgMHg2NENGLCAweDJCNTEsIDB4NjREMCwgMHgyQjUwLAorICAgIDB4NjREMiwgMHgxMkMzLCAweDY0RDQsIDB4MTJDNCwgMHg2NEQ2LCAweDJCNEYsIDB4NjRENywgMHgyQjRFLAorICAgIDB4NjREOCwgMHgxM0Q5LCAweDY0RDksIDB4MkI1OCwgMHg2NERBLCAweDEyQkQsIDB4NjREQiwgMHgyQjU2LAorICAgIDB4NjRFMCwgMHgxM0RBLCAweDY0RTIsIDB4MTNERiwgMHg2NEUzLCAweDJENkEsIDB4NjRFNCwgMHgyRDZDLAorICAgIDB4NjRFNiwgMHgxM0RDLCAweDY0RTgsIDB4MkQ2RCwgMHg2NEU5LCAweDJENjksIDB4NjRFQiwgMHgyRDZCLAorICAgIDB4NjRFQywgMHgxM0RELCAweDY0RUQsIDB4MTNFMCwgMHg2NEVGLCAweDJENjgsIDB4NjRGMCwgMHgxM0RCLAorICAgIDB4NjRGMSwgMHgxM0RFLCAweDY0RjIsIDB4MTREMywgMHg2NEYzLCAweDJCNTcsIDB4NjRGNCwgMHgxNEQyLAorICAgIDB4NjRGNywgMHgxNEQ4LCAweDY0RjgsIDB4MkYyQiwgMHg2NEZBLCAweDE0RDYsIDB4NjRGQiwgMHgxNEQ3LAorICAgIDB4NjRGQywgMHgyRjJFLCAweDY0RkQsIDB4MkYyQSwgMHg2NEZFLCAweDE0RDQsIDB4NjRGRiwgMHgyRjI4LAorICAgIDB4NjUwMCwgMHgxNTgyLCAweDY1MDEsIDB4MkYyQywgMHg2NTAzLCAweDJGMkQsIDB4NjUwNCwgMHgyRjI5LAorICAgIDB4NjUwNiwgMHgxNEQ1LCAweDY1MDcsIDB4MzA5MCwgMHg2NTA5LCAweDMwOTMsIDB4NjUwQywgMHgzMDk0LAorICAgIDB4NjUwRCwgMHgzMDkyLCAweDY1MEUsIDB4MzA5NSwgMHg2NTBGLCAweDE1ODMsIDB4NjUxMCwgMHgzMDkxLAorICAgIDB4NjUxMywgMHgzMUQ3LCAweDY1MTQsIDB4MTYxNywgMHg2NTE1LCAweDMxRDYsIDB4NjUxNiwgMHgzMUQ1LAorICAgIDB4NjUxNywgMHgzMUQ0LCAweDY1MTgsIDB4MTYxNiwgMHg2NTE5LCAweDE2MTgsIDB4NjUxQiwgMHgzMkQyLAorICAgIDB4NjUxQywgMHgxNjczLCAweDY1MUQsIDB4MTY3MiwgMHg2NTIwLCAweDMzODIsIDB4NjUyMSwgMHgzMzgxLAorICAgIDB4NjUyMiwgMHgzMzg0LCAweDY1MjMsIDB4MTZGOSwgMHg2NTI0LCAweDE2QzUsIDB4NjUyNSwgMHgzNDFCLAorICAgIDB4NjUyNiwgMHgzMzgzLCAweDY1MjksIDB4MzQxQSwgMHg2NTJBLCAweDE2RkIsIDB4NjUyQiwgMHgxNkZBLAorICAgIDB4NjUyQywgMHgxNzIxLCAweDY1MkQsIDB4MzQ4NCwgMHg2NTJFLCAweDM0Q0EsIDB4NjUyRiwgMHgwMkQ1LAorICAgIDB4NjUzMiwgMHgyMTZDLCAweDY1MzMsIDB4MkI1OSwgMHg2NTM0LCAweDAyMkMsIDB4NjUzNiwgMHgwM0Q3LAorICAgIDB4NjUzNywgMHgxN0Y2LCAweDY1MzgsIDB4MDRCOSwgMHg2NTM5LCAweDA0QjcsIDB4NjUzQiwgMHgwNEI4LAorICAgIDB4NjUzRCwgMHgxOUExLCAweDY1M0UsIDB4MDVGMywgMHg2NTNGLCAweDA3NDEsIDB4NjU0MSwgMHgxQjAxLAorICAgIDB4NjU0MywgMHgxQjAyLCAweDY1NDUsIDB4MDc0MiwgMHg2NTQ2LCAweDFDQkYsIDB4NjU0OCwgMHgwOEQ2LAorICAgIDB4NjU0OSwgMHgwOEQ3LCAweDY1NEEsIDB4MUNCRSwgMHg2NTRGLCAweDBBQkQsIDB4NjU1MSwgMHgwQUI5LAorICAgIDB4NjU1MywgMHgxRjBDLCAweDY1NTQsIDB4MEFDMCwgMHg2NTU1LCAweDBBQkYsIDB4NjU1NiwgMHgwQUI4LAorICAgIDB4NjU1NywgMHgwQUJCLCAweDY1NTgsIDB4MEFCRSwgMHg2NTU5LCAweDBBQkEsIDB4NjU1QywgMHgyMTcwLAorICAgIDB4NjU1RCwgMHgwQUI3LCAweDY1NUUsIDB4MEM3MCwgMHg2NTYyLCAweDBDNzIsIDB4NjU2MywgMHgwQzczLAorICAgIDB4NjU2NCwgMHgyMTZGLCAweDY1NjUsIDB4MjE3MiwgMHg2NTY2LCAweDBDNzEsIDB4NjU2NywgMHgyMTZELAorICAgIDB4NjU2OCwgMHgyMTcxLCAweDY1NkEsIDB4MjE2RSwgMHg2NTZDLCAweDBFMkIsIDB4NjU2RiwgMHgyNDA5LAorICAgIDB4NjU3MiwgMHgwRkU3LCAweDY1NzMsIDB4MjZCNCwgMHg2NTc0LCAweDEyQzYsIDB4NjU3NSwgMHgxMTZFLAorICAgIDB4NjU3NiwgMHgyOEYxLCAweDY1NzcsIDB4MTE2RiwgMHg2NTc4LCAweDExNzAsIDB4NjU3OSwgMHgyOEYzLAorICAgIDB4NjU3QSwgMHgyOEYyLCAweDY1N0IsIDB4MjhGNCwgMHg2NTdDLCAweDJCNUIsIDB4NjU3RiwgMHgyQjVBLAorICAgIDB4NjU4MCwgMHgyRDZGLCAweDY1ODEsIDB4MkQ2RSwgMHg2NTgyLCAweDEzRTEsIDB4NjU4MywgMHgxM0UyLAorICAgIDB4NjU4NCwgMHgzMDk2LCAweDY1ODcsIDB4MDJENiwgMHg2NThDLCAweDIxNzMsIDB4NjU5MCwgMHgwQzc1LAorICAgIDB4NjU5MSwgMHgwQzc0LCAweDY1OTIsIDB4MjQwQSwgMHg2NTk0LCAweDJGMkYsIDB4NjU5NSwgMHgxNjc0LAorICAgIDB4NjU5NiwgMHgzNDFDLCAweDY1OTcsIDB4MDJENywgMHg2NTk5LCAweDA4RDgsIDB4NjU5QiwgMHgwQUMyLAorICAgIDB4NjU5QywgMHgwQUMxLCAweDY1OUQsIDB4MjE3NCwgMHg2NTlFLCAweDIxNzUsIDB4NjU5RiwgMHgwRTJDLAorICAgIDB4NjVBMCwgMHgyNkI1LCAweDY1QTEsIDB4MEZFOCwgMHg2NUEyLCAweDJCNUMsIDB4NjVBNCwgMHgwMkQ4LAorICAgIDB4NjVBNSwgMHgwMzQ2LCAweDY1QTcsIDB4MDVGNCwgMHg2NUE4LCAweDE5QTIsIDB4NjVBQSwgMHgxQjAzLAorICAgIDB4NjVBQiwgMHgwNzQzLCAweDY1QUMsIDB4MEFDMywgMHg2NUFFLCAweDIxNzYsIDB4NjVBRiwgMHgwQzc2LAorICAgIDB4NjVCMCwgMHgwRTJELCAweDY1QjIsIDB4MjhGNSwgMHg2NUIzLCAweDI4RjYsIDB4NjVCNiwgMHgyRDcwLAorICAgIDB4NjVCNywgMHgxNEQ5LCAweDY1QjgsIDB4MzRDQiwgMHg2NUI5LCAweDAyRDksIDB4NjVCQiwgMHgxOUEzLAorICAgIDB4NjVCQywgMHgwNUY1LCAweDY1QkQsIDB4MDc0NCwgMHg2NUJGLCAweDFCMDQsIDB4NjVDMSwgMHgwOEQ5LAorICAgIDB4NjVDMiwgMHgxQ0MzLCAweDY1QzMsIDB4MUNDMSwgMHg2NUM0LCAweDFDQzIsIDB4NjVDNSwgMHgwOERBLAorICAgIDB4NjVDNiwgMHgxQ0MwLCAweDY1Q0IsIDB4MEFDNSwgMHg2NUNDLCAweDBBQzYsIDB4NjVDRCwgMHgxRjBELAorICAgIDB4NjVDRSwgMHgwQUM3LCAweDY1Q0YsIDB4MEFDNCwgMHg2NUQwLCAweDIxNzcsIDB4NjVEMiwgMHgyMTc4LAorICAgIDB4NjVEMywgMHgyNDBCLCAweDY1RDYsIDB4MEZFQSwgMHg2NUQ3LCAweDBGRTksIDB4NjVEQSwgMHgyRDcxLAorICAgIDB4NjVEQiwgMHgyRjMwLCAweDY1REQsIDB4MzA5OCwgMHg2NURFLCAweDMwOTcsIDB4NjVERiwgMHgzMUQ4LAorICAgIDB4NjVFMCwgMHgwMjJELCAweDY1RTEsIDB4MTc4OSwgMHg2NUUyLCAweDA3NDUsIDB4NjVFNSwgMHgwMkRBLAorICAgIDB4NjVFNiwgMHgwMzQ3LCAweDY1RTgsIDB4MDNEOSwgMHg2NUU5LCAweDAzRDgsIDB4NjVFQywgMHgwM0RBLAorICAgIDB4NjVFRCwgMHgwM0RCLCAweDY1RUUsIDB4MTdGOCwgMHg2NUVGLCAweDE3RjcsIDB4NjVGMCwgMHgxODlFLAorICAgIDB4NjVGMSwgMHgwNEJBLCAweDY1RjIsIDB4MThBMSwgMHg2NUYzLCAweDE4QTAsIDB4NjVGNCwgMHgxODlGLAorICAgIDB4NjVGNSwgMHgxOEEyLCAweDY1RkEsIDB4MDVGNiwgMHg2NUZCLCAweDE5QTksIDB4NjVGQywgMHgxOUE1LAorICAgIDB4NjVGRCwgMHgxOUFFLCAweDY2MDAsIDB4MDVGRCwgMHg2NjAyLCAweDA1RkIsIDB4NjYwMywgMHgxOUFBLAorICAgIDB4NjYwNCwgMHgxOUE2LCAweDY2MDUsIDB4MTlBRCwgMHg2NjA2LCAweDA1RkEsIDB4NjYwNywgMHgwNjAxLAorICAgIDB4NjYwOCwgMHgxOUE4LCAweDY2MDksIDB4MTlBNCwgMHg2NjBBLCAweDA2MDAsIDB4NjYwQiwgMHgxOUFCLAorICAgIDB4NjYwQywgMHgwNUY5LCAweDY2MEQsIDB4MTlBQywgMHg2NjBFLCAweDA1RkMsIDB4NjYwRiwgMHgwNUZFLAorICAgIDB4NjYxMCwgMHgxOUIwLCAweDY2MTEsIDB4MTlBRiwgMHg2NjEyLCAweDE5QTcsIDB4NjYxMywgMHgwNUY4LAorICAgIDB4NjYxNCwgMHgwNUY3LCAweDY2MTUsIDB4MDVGRiwgMHg2NjFDLCAweDFCMDksIDB4NjYxRCwgMHgxQjBGLAorICAgIDB4NjYxRiwgMHgwNzRCLCAweDY2MjAsIDB4MDc0OCwgMHg2NjIxLCAweDFCMDYsIDB4NjYyMiwgMHgxQjBCLAorICAgIDB4NjYyNCwgMHgwNzRFLCAweDY2MjUsIDB4MDc0NiwgMHg2NjI2LCAweDFCMEEsIDB4NjYyNywgMHgwNzQ5LAorICAgIDB4NjYyOCwgMHgwNzRDLCAweDY2MkIsIDB4MUIwRCwgMHg2NjJELCAweDA3NDcsIDB4NjYyRSwgMHgxQjEyLAorICAgIDB4NjYyRiwgMHgwNzRBLCAweDY2MzEsIDB4MDc0RCwgMHg2NjMyLCAweDFCMDcsIDB4NjYzMywgMHgxQjBDLAorICAgIDB4NjYzNCwgMHgxQjEwLCAweDY2MzUsIDB4MUIwOCwgMHg2NjM2LCAweDFCMDUsIDB4NjYzOSwgMHgxQjExLAorICAgIDB4NjYzQSwgMHgxQjBFLCAweDY2NDEsIDB4MDhFMiwgMHg2NjQyLCAweDA4REIsIDB4NjY0MywgMHgwOERFLAorICAgIDB4NjY0NSwgMHgwOEUxLCAweDY2NDcsIDB4MUNDNiwgMHg2NjQ5LCAweDA4REMsIDB4NjY0QSwgMHgxQ0M0LAorICAgIDB4NjY0QywgMHgwOEUwLCAweDY2NEYsIDB4MDhERCwgMHg2NjUxLCAweDFDQzcsIDB4NjY1MiwgMHgwOERGLAorICAgIDB4NjY1OSwgMHgxRjExLCAweDY2NUEsIDB4MEFDOSwgMHg2NjVCLCAweDFGMTAsIDB4NjY1QywgMHgxRjEyLAorICAgIDB4NjY1RCwgMHgwQUM4LCAweDY2NUUsIDB4MEFDRCwgMHg2NjVGLCAweDFDQzUsIDB4NjY2MSwgMHgxRjBGLAorICAgIDB4NjY2MiwgMHgxRjEzLCAweDY2NjQsIDB4MEFDQSwgMHg2NjY1LCAweDFGMEUsIDB4NjY2NiwgMHgwQUNDLAorICAgIDB4NjY2OCwgMHgwQUNCLCAweDY2NkEsIDB4MjE3RiwgMHg2NjZDLCAweDIxN0EsIDB4NjY2RSwgMHgwQzc3LAorICAgIDB4NjY2RiwgMHgwQzdCLCAweDY2NzAsIDB4MEM3OCwgMHg2NjcxLCAweDIxN0QsIDB4NjY3MiwgMHgyMTgwLAorICAgIDB4NjY3NCwgMHgwQzc5LCAweDY2NzYsIDB4MEM3QSwgMHg2Njc3LCAweDBDN0YsIDB4NjY3OCwgMHgyNDE0LAorICAgIDB4NjY3OSwgMHgyMTdFLCAweDY2N0EsIDB4MEM3RCwgMHg2NjdCLCAweDIxN0IsIDB4NjY3QywgMHgyMTc5LAorICAgIDB4NjY3RSwgMHgwQzdFLCAweDY2ODAsIDB4MjE3QywgMHg2Njg0LCAweDBFMzMsIDB4NjY4NiwgMHgyNDBDLAorICAgIDB4NjY4NywgMHgwRTMwLCAweDY2ODgsIDB4MEUzMSwgMHg2Njg5LCAweDBFMkYsIDB4NjY4QSwgMHgyNDExLAorICAgIDB4NjY4QiwgMHgyNDEwLCAweDY2OEMsIDB4MjQwRCwgMHg2NjhELCAweDBFMzUsIDB4NjY5MCwgMHgyNDBGLAorICAgIDB4NjY5MSwgMHgwQzdDLCAweDY2OTQsIDB4MjQxMywgMHg2Njk1LCAweDI0MEUsIDB4NjY5NiwgMHgwRTMyLAorICAgIDB4NjY5NywgMHgwRTJFLCAweDY2OTgsIDB4MEUzNCwgMHg2Njk5LCAweDI0MTIsIDB4NjY5RCwgMHgwRkVELAorICAgIDB4NjY5RiwgMHgyNkI4LCAweDY2QTAsIDB4MjZCNywgMHg2NkExLCAweDI2QjYsIDB4NjZBMiwgMHgwRkVCLAorICAgIDB4NjZBOCwgMHgwRkVDLCAweDY2QTksIDB4MjhGOSwgMHg2NkFBLCAweDI4RkMsIDB4NjZBQiwgMHgxMTcyLAorICAgIDB4NjZBRSwgMHgxMTcxLCAweDY2QUYsIDB4MjhGRCwgMHg2NkIwLCAweDI4RjgsIDB4NjZCMSwgMHgxMTc0LAorICAgIDB4NjZCMiwgMHgyOEZBLCAweDY2QjQsIDB4MTE3MywgMHg2NkI1LCAweDI4RjcsIDB4NjZCNywgMHgyOEZCLAorICAgIDB4NjZCOCwgMHgxMkNDLCAweDY2QjksIDB4MTJDOSwgMHg2NkJBLCAweDJCNjUsIDB4NjZCQiwgMHgyQjY0LAorICAgIDB4NjZCRCwgMHgyQjYzLCAweDY2QkUsIDB4MkI1RSwgMHg2NkMwLCAweDJCNUYsIDB4NjZDNCwgMHgxMkNBLAorICAgIDB4NjZDNiwgMHgxMkM3LCAweDY2QzcsIDB4MTJDQiwgMHg2NkM4LCAweDJCNUQsIDB4NjZDOSwgMHgxMkM4LAorICAgIDB4NjZDQSwgMHgyQjYwLCAweDY2Q0IsIDB4MkI2MSwgMHg2NkNDLCAweDJCNjYsIDB4NjZDRiwgMHgyQjYyLAorICAgIDB4NjZEMiwgMHgyRDcyLCAweDY2RDYsIDB4MTNFNCwgMHg2NkQ4LCAweDJGMzMsIDB4NjZEOSwgMHgxM0UzLAorICAgIDB4NjZEQSwgMHgyRjMxLCAweDY2REIsIDB4MkYzMiwgMHg2NkRDLCAweDE0REEsIDB4NjZERCwgMHgxNTg1LAorICAgIDB4NjZERSwgMHgzMDk5LCAweDY2RTAsIDB4MTU4NCwgMHg2NkUzLCAweDMxREEsIDB4NjZFNCwgMHgzMURCLAorICAgIDB4NjZFNiwgMHgxNjE5LCAweDY2RTgsIDB4MzFEOSwgMHg2NkU5LCAweDE2NzUsIDB4NjZFQiwgMHgzNDFELAorICAgIDB4NjZFQywgMHgxNkZDLCAweDY2RUQsIDB4MzQ4NSwgMHg2NkVFLCAweDM0ODYsIDB4NjZGMCwgMHgwMkRCLAorICAgIDB4NjZGMiwgMHgwM0RDLCAweDY2RjMsIDB4MDNERCwgMHg2NkY0LCAweDA0QkIsIDB4NjZGNiwgMHgxOUIxLAorICAgIDB4NjZGNywgMHgwNzRGLCAweDY2RjgsIDB4MDhFMywgMHg2NkY5LCAweDBBQ0UsIDB4NjZGQywgMHgwQTFGLAorICAgIDB4NjZGRSwgMHgwQzgwLCAweDY2RkYsIDB4MEM4MSwgMHg2NzAwLCAweDBCRjAsIDB4NjcwMSwgMHgyMTgxLAorICAgIDB4NjcwMywgMHgwRTM2LCAweDY3MDQsIDB4MjZCQSwgMHg2NzA1LCAweDI2QjksIDB4NjcwOCwgMHgwMkRDLAorICAgIDB4NjcwOSwgMHgwM0RFLCAweDY3MEEsIDB4MTlCMiwgMHg2NzBCLCAweDA2MDMsIDB4NjcwRCwgMHgwNjAyLAorICAgIDB4NjcwRiwgMHgxQjEzLCAweDY3MTAsIDB4MUIxNCwgMHg2NzEyLCAweDFDQzgsIDB4NjcxMywgMHgxQ0M5LAorICAgIDB4NjcxNCwgMHgwOEU0LCAweDY3MTUsIDB4MDhFNSwgMHg2NzE3LCAweDA4RTYsIDB4NjcxOCwgMHgxRjE0LAorICAgIDB4NjcxQiwgMHgwQUQwLCAweDY3MUQsIDB4MEM4MywgMHg2NzFGLCAweDBDODIsIDB4NjcyMCwgMHgyNDE1LAorICAgIDB4NjcyMSwgMHgyNTIyLCAweDY3MjIsIDB4MjZCQiwgMHg2NzIzLCAweDJCNjcsIDB4NjcyNiwgMHgxNERCLAorICAgIDB4NjcyNywgMHgxNjFBLCAweDY3MjgsIDB4MDJERCwgMHg2NzJBLCAweDAzNEEsIDB4NjcyQiwgMHgwMzRCLAorICAgIDB4NjcyQywgMHgwMzQ5LCAweDY3MkQsIDB4MDM0QywgMHg2NzJFLCAweDAzNDgsIDB4NjczMSwgMHgwM0UxLAorICAgIDB4NjczMywgMHgxODAwLCAweDY3MzQsIDB4MDNFMCwgMHg2NzM1LCAweDAzRTIsIDB4NjczOCwgMHgxN0ZCLAorICAgIDB4NjczOSwgMHgxN0ZBLCAweDY3M0EsIDB4MTdGRCwgMHg2NzNCLCAweDE3RkMsIDB4NjczQywgMHgxN0ZGLAorICAgIDB4NjczRCwgMHgwM0RGLCAweDY3M0UsIDB4MTdGOSwgMHg2NzNGLCAweDE3RkUsIDB4Njc0NSwgMHgxOEEzLAorICAgIDB4Njc0NiwgMHgwNEM1LCAweDY3NDcsIDB4MThBNCwgMHg2NzQ4LCAweDE4QTgsIDB4Njc0OSwgMHgwNEM0LAorICAgIDB4Njc0QiwgMHgxOEFDLCAweDY3NEMsIDB4MThBNywgMHg2NzRELCAweDE4QUEsIDB4Njc0RSwgMHgwNEJELAorICAgIDB4Njc0RiwgMHgwNEJFLCAweDY3NTAsIDB4MDRCRiwgMHg2NzUxLCAweDA0QzAsIDB4Njc1MywgMHgwNEM3LAorICAgIDB4Njc1NSwgMHgxOEE2LCAweDY3NTYsIDB4MDRDMiwgMHg2NzU3LCAweDA0QzgsIDB4Njc1OSwgMHgxOEE1LAorICAgIDB4Njc1QSwgMHgxOEFCLCAweDY3NUMsIDB4MDRDMSwgMHg2NzVELCAweDE4QTksIDB4Njc1RSwgMHgwNEMzLAorICAgIDB4Njc1RiwgMHgwNEJDLCAweDY3NjAsIDB4MDRDNiwgMHg2NzZBLCAweDA2MTgsIDB4Njc2QywgMHgxOUI0LAorICAgIDB4Njc2RCwgMHgwNjA0LCAweDY3NkYsIDB4MDYwRSwgMHg2NzcwLCAweDA2MEYsIDB4Njc3MSwgMHgwNjA3LAorICAgIDB4Njc3MiwgMHgwNjE5LCAweDY3NzMsIDB4MDYwOSwgMHg2Nzc0LCAweDE5QkMsIDB4Njc3NSwgMHgwNjE0LAorICAgIDB4Njc3NiwgMHgxOUI3LCAweDY3NzcsIDB4MDYwQSwgMHg2Nzc4LCAweDE5QzYsIDB4Njc3OSwgMHgxOUM3LAorICAgIDB4Njc3QSwgMHgxOUJGLCAweDY3N0IsIDB4MTlCOCwgMHg2NzdDLCAweDA2MTcsIDB4Njc3RCwgMHgxOUM0LAorICAgIDB4Njc3RSwgMHgwNjEyLCAweDY3N0YsIDB4MDYxMCwgMHg2NzgxLCAweDE5QzUsIDB4Njc4MywgMHgxOUMzLAorICAgIDB4Njc4NCwgMHgxOUJCLCAweDY3ODUsIDB4MTlCMywgMHg2Nzg2LCAweDE5QkEsIDB4Njc4NywgMHgwNjBCLAorICAgIDB4Njc4OSwgMHgwNjExLCAweDY3OEIsIDB4MDYwNSwgMHg2NzhDLCAweDE5QkUsIDB4Njc4RCwgMHgxOUJELAorICAgIDB4Njc4RSwgMHgxOUI1LCAweDY3OTAsIDB4MDYxMywgMHg2NzkxLCAweDE5QzEsIDB4Njc5MiwgMHgxOUI2LAorICAgIDB4Njc5MywgMHgwNjE2LCAweDY3OTQsIDB4MTlDOCwgMHg2Nzk1LCAweDA2MDYsIDB4Njc5NywgMHgwNjBELAorICAgIDB4Njc5OCwgMHgxOUI5LCAweDY3OTksIDB4MTlDMiwgMHg2NzlBLCAweDA2MTUsIDB4Njc5QywgMHgwNjA4LAorICAgIDB4Njc5RCwgMHgwNjBDLCAweDY3OUYsIDB4MTlDMCwgMHg2N0FFLCAweDFCMzQsIDB4NjdBRiwgMHgwNzU3LAorICAgIDB4NjdCMCwgMHgwNzY0LCAweDY3QjIsIDB4MUIyRiwgMHg2N0IzLCAweDFCMjUsIDB4NjdCNCwgMHgwNzVELAorICAgIDB4NjdCNSwgMHgxQjIzLCAweDY3QjYsIDB4MDc1NiwgMHg2N0I3LCAweDFCMUUsIDB4NjdCOCwgMHgwNzYwLAorICAgIDB4NjdCOSwgMHgxQjJCLCAweDY3QkEsIDB4MUIxOCwgMHg2N0JCLCAweDFCMUEsIDB4NjdDMCwgMHgxQjFELAorICAgIDB4NjdDMSwgMHgxQjE1LCAweDY3QzIsIDB4MUIyQSwgMHg2N0MzLCAweDFCM0EsIDB4NjdDNCwgMHgwNzVCLAorICAgIDB4NjdDNSwgMHgxQjFGLCAweDY3QzYsIDB4MUIzMSwgMHg2N0M4LCAweDFCMTcsIDB4NjdDOSwgMHgxQjM4LAorICAgIDB4NjdDQSwgMHgxQjM5LCAweDY3Q0IsIDB4MUIzQywgMHg2N0NDLCAweDFCMzMsIDB4NjdDRCwgMHgxQjI0LAorICAgIDB4NjdDRSwgMHgxQjJDLCAweDY3Q0YsIDB4MDc2MSwgMHg2N0QwLCAweDA3NTQsIDB4NjdEMSwgMHgwNzVDLAorICAgIDB4NjdEMiwgMHgwNzY4LCAweDY3RDMsIDB4MDc1MSwgMHg2N0Q0LCAweDA3NTMsIDB4NjdEOCwgMHgxQjFDLAorICAgIDB4NjdEOSwgMHgwNzY1LCAweDY3REEsIDB4MDc1RSwgMHg2N0RCLCAweDFCMzYsIDB4NjdEQywgMHgxQjE5LAorICAgIDB4NjdERCwgMHgwNzY3LCAweDY3REUsIDB4MDc2MiwgMHg2N0RGLCAweDFCMjIsIDB4NjdFMiwgMHgwNzY2LAorICAgIDB4NjdFMywgMHgxQjI5LCAweDY3RTQsIDB4MUIyMSwgMHg2N0U1LCAweDA3NUYsIDB4NjdFNiwgMHgxQjM1LAorICAgIDB4NjdFNywgMHgxQjJELCAweDY3RTksIDB4MDc1OSwgMHg2N0VBLCAweDFCM0IsIDB4NjdFQiwgMHgxQjIwLAorICAgIDB4NjdFQywgMHgwNzU1LCAweDY3RUQsIDB4MUIzMiwgMHg2N0VFLCAweDFCMjgsIDB4NjdFRiwgMHgwNzVBLAorICAgIDB4NjdGMCwgMHgxQjJFLCAweDY3RjEsIDB4MDc1MiwgMHg2N0YyLCAweDFCMTYsIDB4NjdGMywgMHgwNzYzLAorICAgIDB4NjdGNCwgMHgwOEY1LCAweDY3RjUsIDB4MDc1OCwgMHg2N0Y2LCAweDFCMjcsIDB4NjdGNywgMHgxQjI2LAorICAgIDB4NjdGOCwgMHgxQjFCLCAweDY3RkEsIDB4MUIzNywgMHg2N0ZDLCAweDFCMzAsIDB4NjdGRiwgMHgwNzUwLAorICAgIDB4NjgxMiwgMHgxQ0RELCAweDY4MTMsIDB4MDhGQywgMHg2ODE0LCAweDFDREUsIDB4NjgxNiwgMHgxQ0QyLAorICAgIDB4NjgxNywgMHgwOEYxLCAweDY4MTgsIDB4MDhGRCwgMHg2ODFBLCAweDFDQ0IsIDB4NjgxQywgMHgxQ0Q0LAorICAgIDB4NjgxRCwgMHgxQ0RDLCAweDY4MUYsIDB4MUNDQSwgMHg2ODIwLCAweDFDRTUsIDB4NjgyMSwgMHgwOEU3LAorICAgIDB4NjgyNSwgMHgxQ0U0LCAweDY4MjYsIDB4MUNERiwgMHg2ODI4LCAweDFDRTAsIDB4NjgyOSwgMHgwOEVGLAorICAgIDB4NjgyQSwgMHgwOEZBLCAweDY4MkIsIDB4MUNENiwgMHg2ODJELCAweDFDRDcsIDB4NjgyRSwgMHgxQ0UxLAorICAgIDB4NjgyRiwgMHgxQ0Q4LCAweDY4MzEsIDB4MUNEMywgMHg2ODMyLCAweDFDQ0QsIDB4NjgzMywgMHgxQ0NFLAorICAgIDB4NjgzNCwgMHgxQ0RCLCAweDY4MzUsIDB4MUNENSwgMHg2ODM4LCAweDA4RTgsIDB4NjgzOSwgMHgwOEVDLAorICAgIDB4NjgzQSwgMHgxQ0UzLCAweDY4M0IsIDB4MUNDRiwgMHg2ODNDLCAweDA4RjgsIDB4NjgzRCwgMHgwOEY0LAorICAgIDB4Njg0MCwgMHgwOEY3LCAweDY4NDEsIDB4MDhGRSwgMHg2ODQyLCAweDA4RUQsIDB4Njg0MywgMHgwOEY5LAorICAgIDB4Njg0NCwgMHgxQ0RBLCAweDY4NDUsIDB4MDhGQiwgMHg2ODQ2LCAweDA4RUEsIDB4Njg0OCwgMHgwOEU5LAorICAgIDB4Njg0OSwgMHgxQ0NDLCAweDY4NEIsIDB4MUNEMCwgMHg2ODRDLCAweDA4RjIsIDB4Njg0RCwgMHgxQ0UyLAorICAgIDB4Njg0RSwgMHgxQ0Q5LCAweDY4NEYsIDB4MUNEMSwgMHg2ODUwLCAweDA4RjYsIDB4Njg1MSwgMHgwOEYzLAorICAgIDB4Njg1MywgMHgwOEVCLCAweDY4NTQsIDB4MDhFRSwgMHg2ODZCLCAweDFGMjksIDB4Njg2RCwgMHgxRjE5LAorICAgIDB4Njg2RSwgMHgxRjFBLCAweDY4NkYsIDB4MUYxRSwgMHg2ODcxLCAweDFGMkQsIDB4Njg3MiwgMHgxRjJBLAorICAgIDB4Njg3NCwgMHgxRjIzLCAweDY4NzUsIDB4MUYyMiwgMHg2ODc2LCAweDBBRDcsIDB4Njg3NywgMHgxRjI2LAorICAgIDB4Njg3OCwgMHgxRjM1LCAweDY4NzksIDB4MUYxNSwgMHg2ODdCLCAweDFGMzYsIDB4Njg3QywgMHgxRjI4LAorICAgIDB4Njg3RCwgMHgxRjNBLCAweDY4N0UsIDB4MUYyRSwgMHg2ODdGLCAweDBBRDYsIDB4Njg4MCwgMHgxRjJDLAorICAgIDB4Njg4MSwgMHgwQUQxLCAweDY4ODIsIDB4MEFFNiwgMHg2ODgzLCAweDBBREMsIDB4Njg4NSwgMHgwQUUwLAorICAgIDB4Njg4NiwgMHgwQURGLCAweDY4ODcsIDB4MUYxNiwgMHg2ODg5LCAweDFGMzMsIDB4Njg4QSwgMHgxRjM5LAorICAgIDB4Njg4QiwgMHgxRjMxLCAweDY4OEMsIDB4MUYzOCwgMHg2ODhGLCAweDFGMjUsIDB4Njg5MCwgMHgxRjE3LAorICAgIDB4Njg5MSwgMHgxRjM3LCAweDY4OTIsIDB4MUYyNywgMHg2ODkzLCAweDBBRDQsIDB4Njg5NCwgMHgwQUUxLAorICAgIDB4Njg5NiwgMHgxRjMwLCAweDY4OTcsIDB4MEFEQSwgMHg2ODlCLCAweDFGMkYsIDB4Njg5QywgMHgxRjE4LAorICAgIDB4Njg5RCwgMHgwQUUyLCAweDY4OUYsIDB4MEFFNCwgMHg2OEEwLCAweDFGMzIsIDB4NjhBMSwgMHgwQUU1LAorICAgIDB4NjhBMiwgMHgwQUQzLCAweDY4QTMsIDB4MUYxRiwgMHg2OEE0LCAweDFGMzQsIDB4NjhBNywgMHgwQUQ5LAorICAgIDB4NjhBOCwgMHgwQUUzLCAweDY4QTksIDB4MUYyMSwgMHg2OEFBLCAweDFGMkIsIDB4NjhBQiwgMHgxRjFDLAorICAgIDB4NjhBQywgMHgxRjIwLCAweDY4QUQsIDB4MEFERSwgMHg2OEFFLCAweDFGMUIsIDB4NjhBRiwgMHgwQUQyLAorICAgIDB4NjhCMCwgMHgwQURCLCAweDY4QjEsIDB4MEFEOCwgMHg2OEIyLCAweDFGMjQsIDB4NjhCMywgMHgwOEYwLAorICAgIDB4NjhCNCwgMHgyMTk4LCAweDY4QjUsIDB4MEFENSwgMHg2OEM0LCAweDBBREQsIDB4NjhDNiwgMHgyMTlCLAorICAgIDB4NjhDNywgMHgyMUIxLCAweDY4QzgsIDB4MjFBNiwgMHg2OEM5LCAweDBDOTcsIDB4NjhDQiwgMHgwQzkyLAorICAgIDB4NjhDQywgMHgyMTk1LCAweDY4Q0QsIDB4MEM5MywgMHg2OENFLCAweDIxQTUsIDB4NjhEMCwgMHgyMTlFLAorICAgIDB4NjhEMSwgMHgyMUFCLCAweDY4RDIsIDB4MEM4RiwgMHg2OEQzLCAweDIxODMsIDB4NjhENCwgMHgyMUFELAorICAgIDB4NjhENSwgMHgwQzg1LCAweDY4RDYsIDB4MjE4QiwgMHg2OEQ3LCAweDBDODgsIDB4NjhEOCwgMHgwQzg3LAorICAgIDB4NjhEQSwgMHgwQzk4LCAweDY4REMsIDB4MjE4NSwgMHg2OERELCAweDIxQTcsIDB4NjhERSwgMHgyMUE4LAorICAgIDB4NjhERiwgMHgwQzhBLCAweDY4RTAsIDB4MEM4NiwgMHg2OEUxLCAweDIxOTMsIDB4NjhFMywgMHgwQzkxLAorICAgIDB4NjhFNCwgMHgyMThFLCAweDY4RTYsIDB4MjFBOSwgMHg2OEU3LCAweDBDOEQsIDB4NjhFOCwgMHgyMUExLAorICAgIDB4NjhFOSwgMHgyMUFFLCAweDY4RUEsIDB4MjE4OCwgMHg2OEVCLCAweDIxOEQsIDB4NjhFQywgMHgyMTg3LAorICAgIDB4NjhFRSwgMHgwQzhDLCAweDY4RUYsIDB4MjE5QSwgMHg2OEYwLCAweDI0MkIsIDB4NjhGMSwgMHgyMTg5LAorICAgIDB4NjhGMiwgMHgwQzkwLCAweDY4RjMsIDB4MjE5MiwgMHg2OEY0LCAweDIxQUEsIDB4NjhGNSwgMHgwQzhCLAorICAgIDB4NjhGNiwgMHgyMThGLCAweDY4RjcsIDB4MjE4QywgMHg2OEY4LCAweDIxOUQsIDB4NjhGOSwgMHgwQzhFLAorICAgIDB4NjhGQSwgMHgwQzg0LCAweDY4RkIsIDB4MEM5QSwgMHg2OEZDLCAweDIxQTAsIDB4NjhGRCwgMHgyMTlGLAorICAgIDB4NjkwNCwgMHgyMTg0LCAweDY5MDUsIDB4MEM4OSwgMHg2OTA2LCAweDIxQUMsIDB4NjkwNywgMHgyMTk0LAorICAgIDB4NjkwOCwgMHgyMTk2LCAweDY5MEEsIDB4MjFBMywgMHg2OTBCLCAweDIxQTIsIDB4NjkwQywgMHgyMTgyLAorICAgIDB4NjkwRCwgMHgwQzk0LCAweDY5MEUsIDB4MEM5NiwgMHg2OTBGLCAweDIxOEEsIDB4NjkxMCwgMHgyMTkxLAorICAgIDB4NjkxMSwgMHgyMTk5LCAweDY5MTIsIDB4MEM5NSwgMHg2OTEzLCAweDIxOTAsIDB4NjkxNCwgMHgyMTlDLAorICAgIDB4NjkxNSwgMHgyMUFGLCAweDY5MTcsIDB4MjFBNCwgMHg2OTI1LCAweDIxQjAsIDB4NjkyQSwgMHgyMTg2LAorICAgIDB4NjkyRiwgMHgyNDNGLCAweDY5MzAsIDB4MEUzRSwgMHg2OTMyLCAweDI0M0QsIDB4NjkzMywgMHgyNDI4LAorICAgIDB4NjkzNCwgMHgyNDJELCAweDY5MzUsIDB4MjQyNiwgMHg2OTM3LCAweDI0MzksIDB4NjkzOCwgMHgyNDE4LAorICAgIDB4NjkzOSwgMHgyNDFGLCAweDY5M0IsIDB4MjQzNywgMHg2OTNDLCAweDI0NDEsIDB4NjkzRCwgMHgyNDI5LAorICAgIDB4NjkzRiwgMHgyNDFDLCAweDY5NDAsIDB4MjQyRiwgMHg2OTQxLCAweDI0MzQsIDB4Njk0MiwgMHgyNDIwLAorICAgIDB4Njk0NCwgMHgyNDMxLCAweDY5NDUsIDB4MjQxRCwgMHg2OTQ4LCAweDI0MjQsIDB4Njk0OSwgMHgyNDI1LAorICAgIDB4Njk0QSwgMHgwRTQwLCAweDY5NEIsIDB4MjQzOCwgMHg2OTRDLCAweDI0MzYsIDB4Njk0RSwgMHgyNDE5LAorICAgIDB4Njk0RiwgMHgyNDNCLCAweDY5NTEsIDB4MjQzQywgMHg2OTUyLCAweDI0M0UsIDB4Njk1MywgMHgwRTQ0LAorICAgIDB4Njk1NCwgMHgwRTNDLCAweDY5NTYsIDB4MUYxRCwgMHg2OTU3LCAweDI0MjEsIDB4Njk1OCwgMHgyNDMzLAorICAgIDB4Njk1OSwgMHgyNDIyLCAweDY5NUEsIDB4MEUzOSwgMHg2OTVCLCAweDBFNDksIDB4Njk1QywgMHgyNDNBLAorICAgIDB4Njk1RCwgMHgwRTQ3LCAweDY5NUUsIDB4MEU0MywgMHg2OTVGLCAweDI0MTcsIDB4Njk2MCwgMHgwRTNCLAorICAgIDB4Njk2MiwgMHgyNDFBLCAweDY5NjMsIDB4MEU0OCwgMHg2OTY1LCAweDI0MkEsIDB4Njk2NiwgMHgyNDE2LAorICAgIDB4Njk2OCwgMHgwRTQxLCAweDY5NjksIDB4MjQyRSwgMHg2OTZBLCAweDI0MUUsIDB4Njk2QiwgMHgwRTQyLAorICAgIDB4Njk2QywgMHgyNDI3LCAweDY5NkQsIDB4MEUzOCwgMHg2OTZFLCAweDBDOTksIDB4Njk2RiwgMHgyNDMwLAorICAgIDB4Njk3MCwgMHgyMTk3LCAweDY5NzEsIDB4MjQxQiwgMHg2OTc0LCAweDI0MzUsIDB4Njk3NSwgMHgwRTNELAorICAgIDB4Njk3NiwgMHgyNDMyLCAweDY5NzcsIDB4MEUzQSwgMHg2OTc4LCAweDI0MkMsIDB4Njk3OSwgMHgwRTQ1LAorICAgIDB4Njk3QSwgMHgyNDIzLCAweDY5N0IsIDB4MjQ0MCwgMHg2OTgyLCAweDBFM0YsIDB4Njk4MywgMHgyNEFGLAorICAgIDB4Njk4NiwgMHgwRTQ2LCAweDY5OEQsIDB4MjZDOSwgMHg2OThFLCAweDI2QzcsIDB4Njk5MCwgMHgyNkRELAorICAgIDB4Njk5MSwgMHgyNkM1LCAweDY5OTMsIDB4MjZENywgMHg2OTk0LCAweDBFMzcsIDB4Njk5NSwgMHgwRkYwLAorICAgIDB4Njk5NiwgMHgyNkMxLCAweDY5OTcsIDB4MjZEQywgMHg2OTk5LCAweDI2QzYsIDB4Njk5QSwgMHgyNkQ0LAorICAgIDB4Njk5QiwgMHgwRkY1LCAweDY5OUMsIDB4MEZFRSwgMHg2OTlFLCAweDI2REEsIDB4NjlBMCwgMHgyNkJGLAorICAgIDB4NjlBMSwgMHgyNkQ5LCAweDY5QTMsIDB4MTAwMCwgMHg2OUE0LCAweDI2RDAsIDB4NjlBNSwgMHgyNkUwLAorICAgIDB4NjlBNiwgMHgwRkZFLCAweDY5QTcsIDB4MjZDOCwgMHg2OUE4LCAweDBGRUYsIDB4NjlBOSwgMHgyNkNBLAorICAgIDB4NjlBQSwgMHgyNkQ4LCAweDY5QUIsIDB4MEZGOCwgMHg2OUFDLCAweDI2QzMsIDB4NjlBRCwgMHgwRkZDLAorICAgIDB4NjlBRSwgMHgwRkYyLCAweDY5QUYsIDB4MjZDQywgMHg2OUIwLCAweDI2QzIsIDB4NjlCMSwgMHgyNkJDLAorICAgIDB4NjlCMywgMHgyNkQ2LCAweDY5QjQsIDB4MEZGOSwgMHg2OUI1LCAweDI2REYsIDB4NjlCNiwgMHgyNkJELAorICAgIDB4NjlCNywgMHgwRkY2LCAweDY5QjksIDB4MjZEMiwgMHg2OUJCLCAweDBGRjcsIDB4NjlCQywgMHgyNkM0LAorICAgIDB4NjlCRCwgMHgyNkNGLCAweDY5QkUsIDB4MjZDQiwgMHg2OUJGLCAweDI2Q0QsIDB4NjlDMSwgMHgwRkYxLAorICAgIDB4NjlDMiwgMHgyNkRFLCAweDY5QzMsIDB4MEZGRiwgMHg2OUM0LCAweDI2Q0UsIDB4NjlDNiwgMHgyNkUxLAorICAgIDB4NjlDOSwgMHgyNkJFLCAweDY5Q0EsIDB4MjZEMywgMHg2OUNCLCAweDBGRjQsIDB4NjlDQywgMHgwRkZELAorICAgIDB4NjlDRCwgMHgwRkZCLCAweDY5Q0UsIDB4MjZDMCwgMHg2OUNGLCAweDI2RDUsIDB4NjlEMCwgMHgwRkZBLAorICAgIDB4NjlEMywgMHgwRkYzLCAweDY5RDQsIDB4MjZEMSwgMHg2OUQ5LCAweDI2REIsIDB4NjlFMiwgMHgyOTA5LAorICAgIDB4NjlFNCwgMHgyOTA1LCAweDY5RTUsIDB4MjkwMSwgMHg2OUU2LCAweDI5MTUsIDB4NjlFNywgMHgyOTEyLAorICAgIDB4NjlFOCwgMHgxMTc3LCAweDY5RUIsIDB4MjkxOSwgMHg2OUVDLCAweDI5MDgsIDB4NjlFRCwgMHgxMTgyLAorICAgIDB4NjlFRSwgMHgyOTBGLCAweDY5RjEsIDB4MjkwNCwgMHg2OUYyLCAweDI5MEUsIDB4NjlGMywgMHgxMTdGLAorICAgIDB4NjlGNCwgMHgyOTIyLCAweDY5RjYsIDB4MjkxRiwgMHg2OUY3LCAweDI5MTEsIDB4NjlGOCwgMHgyOTAyLAorICAgIDB4NjlGQiwgMHgyOTE2LCAweDY5RkMsIDB4MjkxOCwgMHg2OUZELCAweDExN0IsIDB4NjlGRSwgMHgyOTBDLAorICAgIDB4NjlGRiwgMHgyOTA3LCAweDZBMDAsIDB4MjhGRSwgMHg2QTAxLCAweDExNzgsIDB4NkEwMiwgMHgxMTgwLAorICAgIDB4NkEwNCwgMHgyOTFCLCAweDZBMDUsIDB4MTE4MSwgMHg2QTA2LCAweDI4RkYsIDB4NkEwNywgMHgyOTIxLAorICAgIDB4NkEwOCwgMHgyOTE0LCAweDZBMDksIDB4MjkxQSwgMHg2QTBBLCAweDExN0UsIDB4NkEwRCwgMHgyOTE3LAorICAgIDB4NkEwRiwgMHgyOTFFLCAweDZBMTEsIDB4MTE4MywgMHg2QTEzLCAweDExN0QsIDB4NkExNCwgMHgyOTEwLAorICAgIDB4NkExNSwgMHgyOTAzLCAweDZBMTYsIDB4MjkyMywgMHg2QTE3LCAweDI5MDAsIDB4NkExOCwgMHgyOTFDLAorICAgIDB4NkExOSwgMHgxMTdBLCAweDZBMUIsIDB4MjkwQSwgMHg2QTFELCAweDI5MEIsIDB4NkExRSwgMHgxMTc5LAorICAgIDB4NkExRiwgMHgxMTc2LCAweDZBMjAsIDB4MjkwNiwgMHg2QTIxLCAweDExN0MsIDB4NkEyMywgMHgxMTc1LAorICAgIDB4NkEyNSwgMHgyOTFELCAweDZBMjYsIDB4MjkyMCwgMHg2QTI3LCAweDI5MEQsIDB4NkEyOCwgMHgyQjc0LAorICAgIDB4NkEzMiwgMHgyQjZDLCAweDZBMzQsIDB4MkI2OCwgMHg2QTM1LCAweDEyRDksIDB4NkEzOCwgMHgxMkNFLAorICAgIDB4NkEzOSwgMHgxMkQzLCAweDZBM0EsIDB4MTJDRiwgMHg2QTNCLCAweDJCNzYsIDB4NkEzQywgMHgyQjgxLAorICAgIDB4NkEzRCwgMHgxMkNELCAweDZBM0UsIDB4MkI2RSwgMHg2QTNGLCAweDJCNzcsIDB4NkE0MCwgMHgyOTEzLAorICAgIDB4NkE0MSwgMHgyQjc4LCAweDZBNDQsIDB4MTJENCwgMHg2QTQ2LCAweDJCODcsIDB4NkE0NywgMHgxMkQ4LAorICAgIDB4NkE0OCwgMHgxMkRCLCAweDZBNDksIDB4MkI2QSwgMHg2QTRCLCAweDEyRDcsIDB4NkE0RCwgMHgyQjg1LAorICAgIDB4NkE0RSwgMHgyQjg2LCAweDZBNEYsIDB4MkI3QywgMHg2QTUwLCAweDJCN0IsIDB4NkE1MSwgMHgyQjczLAorICAgIDB4NkE1NCwgMHgyQjdELCAweDZBNTUsIDB4MkI4NCwgMHg2QTU2LCAweDJCODMsIDB4NkE1OCwgMHgxMkQyLAorICAgIDB4NkE1OSwgMHgxMkQwLCAweDZBNUEsIDB4MkI3NSwgMHg2QTVCLCAweDJCNzIsIDB4NkE1RCwgMHgyQjZGLAorICAgIDB4NkE1RSwgMHgyQjgyLCAweDZBNUYsIDB4MTJEQSwgMHg2QTYwLCAweDJCODAsIDB4NkE2MSwgMHgxMkQ2LAorICAgIDB4NkE2MiwgMHgxMkQ1LCAweDZBNjQsIDB4MkI3QSwgMHg2QTY2LCAweDJCNjksIDB4NkE2NywgMHgyQjZCLAorICAgIDB4NkE2OCwgMHgyQjZELCAweDZBNjksIDB4MkI3RiwgMHg2QTZBLCAweDJCNzksIDB4NkE2QiwgMHgxMkQxLAorICAgIDB4NkE2RCwgMHgyQjcwLCAweDZBNkYsIDB4MkI3RSwgMHg2QTc2LCAweDJCNzEsIDB4NkE3RSwgMHgxM0VDLAorICAgIDB4NkE3RiwgMHgyRDg0LCAweDZBODAsIDB4MTNFNSwgMHg2QTgxLCAweDJENzUsIDB4NkE4MywgMHgyRDgwLAorICAgIDB4NkE4NCwgMHgxM0U3LCAweDZBODUsIDB4MkQ4NywgMHg2QTg3LCAweDJEN0MsIDB4NkE4OSwgMHgyRDc3LAorICAgIDB4NkE4QywgMHgyRDg4LCAweDZBOEQsIDB4MkQ3MywgMHg2QThFLCAweDJEN0UsIDB4NkE5MCwgMHgxM0VFLAorICAgIDB4NkE5MSwgMHgyRDgzLCAweDZBOTIsIDB4MkQ4OSwgMHg2QTkzLCAweDJEN0QsIDB4NkE5NCwgMHgxM0U2LAorICAgIDB4NkE5NSwgMHgyRDdGLCAweDZBOTYsIDB4MkQ3NCwgMHg2QTk3LCAweDEzRUQsIDB4NkE5QSwgMHgyRDg2LAorICAgIDB4NkE5QiwgMHgyRDc5LCAweDZBOUMsIDB4MTNFOSwgMHg2QTlFLCAweDJEN0IsIDB4NkE5RiwgMHgyRDc4LAorICAgIDB4NkFBMCwgMHgxM0VGLCAweDZBQTEsIDB4MkQ3QSwgMHg2QUEyLCAweDEzRTgsIDB4NkFBMywgMHgxM0VCLAorICAgIDB4NkFBNCwgMHgyRDgyLCAweDZBQTUsIDB4MkQ3NiwgMHg2QUE2LCAweDJEODUsIDB4NkFBOCwgMHgyRDgxLAorICAgIDB4NkFBQywgMHgxNERELCAweDZBQUQsIDB4MkYzRSwgMHg2QUFFLCAweDE0RTIsIDB4NkFBRiwgMHgxNEUzLAorICAgIDB4NkFCMywgMHgxNERDLCAweDZBQjQsIDB4MkYzRCwgMHg2QUI2LCAweDJGM0EsIDB4NkFCNywgMHgyRjNCLAorICAgIDB4NkFCOCwgMHgxNEUwLCAweDZBQjksIDB4MkYzNSwgMHg2QUJBLCAweDJGMzksIDB4NkFCQiwgMHgxNERGLAorICAgIDB4NkFCRCwgMHgyRjM2LCAweDZBQzIsIDB4MTRFMSwgMHg2QUMzLCAweDE0REUsIDB4NkFDNSwgMHgyRjM0LAorICAgIDB4NkFDNiwgMHgyRjM4LCAweDZBQzcsIDB4MkYzQywgMHg2QUNCLCAweDMwOUYsIDB4NkFDQywgMHgzMDlDLAorICAgIDB4NkFDRCwgMHgzMEE1LCAweDZBQ0YsIDB4MzBBNCwgMHg2QUQwLCAweDMwQTIsIDB4NkFEMSwgMHgzMDlELAorICAgIDB4NkFEMywgMHgxNTg5LCAweDZBRDksIDB4MzA5RSwgMHg2QURBLCAweDE1ODgsIDB4NkFEQiwgMHgxM0VBLAorICAgIDB4NkFEQywgMHgzMEExLCAweDZBREQsIDB4MTU4NywgMHg2QURFLCAweDMwQTYsIDB4NkFERiwgMHgzMEEwLAorICAgIDB4NkFFMCwgMHgzMDlCLCAweDZBRTEsIDB4MkYzNywgMHg2QUU1LCAweDE1ODYsIDB4NkFFNywgMHgzMDlBLAorICAgIDB4NkFFOCwgMHgzMURGLCAweDZBRUEsIDB4MzFERSwgMHg2QUVCLCAweDMwQTMsIDB4NkFFQywgMHgxNjFCLAorICAgIDB4NkFFRSwgMHgzMUUyLCAweDZBRUYsIDB4MzFFMywgMHg2QUYwLCAweDMxREQsIDB4NkFGMSwgMHgzMUUxLAorICAgIDB4NkFGMywgMHgzMURDLCAweDZBRjgsIDB4MzJENiwgMHg2QUY5LCAweDMxRTAsIDB4NkFGQSwgMHgxNjc4LAorICAgIDB4NkFGQiwgMHgxNjc2LCAweDZBRkMsIDB4MzJENCwgMHg2QjAwLCAweDMyRDcsIDB4NkIwMiwgMHgzMkQzLAorICAgIDB4NkIwMywgMHgzMkQ1LCAweDZCMDQsIDB4MTY3NywgMHg2QjA4LCAweDMzODYsIDB4NkIwOSwgMHgzMzg3LAorICAgIDB4NkIwQSwgMHgxNkM2LCAweDZCMEIsIDB4MzM4NSwgMHg2QjBGLCAweDM0MjAsIDB4NkIxMCwgMHgxNkZELAorICAgIDB4NkIxMSwgMHgzNDFFLCAweDZCMTIsIDB4MzQxRiwgMHg2QjEzLCAweDM0ODcsIDB4NkIxNiwgMHgxNzQzLAorICAgIDB4NkIxNywgMHgzNENFLCAweDZCMTgsIDB4MzRDQywgMHg2QjE5LCAweDM0Q0QsIDB4NkIxQSwgMHgzNENGLAorICAgIDB4NkIxRSwgMHgzNTM0LCAweDZCMjAsIDB4MDJERSwgMHg2QjIxLCAweDAzRTMsIDB4NkIyMywgMHgwNjFBLAorICAgIDB4NkIyNSwgMHgxOUM5LCAweDZCMjgsIDB4MUIzRCwgMHg2QjJDLCAweDFDRTYsIDB4NkIyRCwgMHgxQ0U4LAorICAgIDB4NkIyRiwgMHgxQ0U3LCAweDZCMzEsIDB4MUNFOSwgMHg2QjMyLCAweDBBRTcsIDB4NkIzMywgMHgxRjNDLAorICAgIDB4NkIzNCwgMHgxQ0VBLCAweDZCMzYsIDB4MUYzQiwgMHg2QjM3LCAweDFGM0QsIDB4NkIzOCwgMHgxRjNFLAorICAgIDB4NkIzOSwgMHgyMUIyLCAweDZCM0EsIDB4MEM5QywgMHg2QjNCLCAweDIxQjMsIDB4NkIzQywgMHgyMUI1LAorICAgIDB4NkIzRCwgMHgwQzlELCAweDZCM0UsIDB4MEM5QiwgMHg2QjNGLCAweDIxQjQsIDB4NkI0MSwgMHgyNDQ3LAorICAgIDB4NkI0MiwgMHgyNDQ1LCAweDZCNDMsIDB4MjQ0NCwgMHg2QjQ1LCAweDI0NDMsIDB4NkI0NiwgMHgyNDQyLAorICAgIDB4NkI0NywgMHgwRTRBLCAweDZCNDgsIDB4MjQ0NiwgMHg2QjQ5LCAweDEwMDEsIDB4NkI0QSwgMHgyNkUyLAorICAgIDB4NkI0QiwgMHgyNkU0LCAweDZCNEMsIDB4MTAwMiwgMHg2QjRELCAweDI2RTMsIDB4NkI0RSwgMHgxMTg1LAorICAgIDB4NkI1MCwgMHgxMTg0LCAweDZCNTEsIDB4MjkyNCwgMHg2QjU0LCAweDJCODksIDB4NkI1NSwgMHgyQjg4LAorICAgIDB4NkI1NiwgMHgyQjhBLCAweDZCNTksIDB4MTJEQywgMHg2QjVCLCAweDJEOEEsIDB4NkI1QywgMHgxM0YwLAorICAgIDB4NkI1RSwgMHgyRjNGLCAweDZCNUYsIDB4MTRFNCwgMHg2QjYwLCAweDMwQTcsIDB4NkI2MSwgMHgxNkM3LAorICAgIDB4NkI2MiwgMHgwMkRGLCAweDZCNjMsIDB4MDM0RCwgMHg2QjY0LCAweDAzRTQsIDB4NkI2NSwgMHgwNEM5LAorICAgIDB4NkI2NiwgMHgwNjFCLCAweDZCNjcsIDB4MDYxQywgMHg2QjZBLCAweDA3NjksIDB4NkI2RCwgMHgxQ0VCLAorICAgIDB4NkI3MiwgMHgwRTRCLCAweDZCNzYsIDB4MjlBMiwgMHg2Qjc3LCAweDEyREQsIDB4NkI3OCwgMHgxNEU1LAorICAgIDB4NkI3OSwgMHgwMkUwLCAweDZCN0IsIDB4MDNFNSwgMHg2QjdFLCAweDE5Q0IsIDB4NkI3RiwgMHgwNjFELAorICAgIDB4NkI4MCwgMHgxOUNBLCAweDZCODIsIDB4MUIzRSwgMHg2QjgzLCAweDA3NkEsIDB4NkI4NCwgMHgxQjNGLAorICAgIDB4NkI4NiwgMHgwNzZCLCAweDZCODgsIDB4MUNFRCwgMHg2Qjg5LCAweDA5MDAsIDB4NkI4QSwgMHgwOEZGLAorICAgIDB4NkI4QywgMHgxRjQzLCAweDZCOEQsIDB4MUY0MSwgMHg2QjhFLCAweDFGNDIsIDB4NkI4RiwgMHgxRjQwLAorICAgIDB4NkI5MSwgMHgxRjNGLCAweDZCOTQsIDB4MjFCNiwgMHg2Qjk1LCAweDIxQjksIDB4NkI5NiwgMHgwQzlGLAorICAgIDB4NkI5NywgMHgyMUI3LCAweDZCOTgsIDB4MEM5RSwgMHg2Qjk5LCAweDIxQjgsIDB4NkI5QiwgMHgyNDQ4LAorICAgIDB4NkI5RSwgMHgyNkU1LCAweDZCOUYsIDB4MjZFNiwgMHg2QkEwLCAweDI2RTcsIDB4NkJBMiwgMHgyOTI3LAorICAgIDB4NkJBMywgMHgyOTI2LCAweDZCQTQsIDB4MTE4NiwgMHg2QkE1LCAweDI5MjUsIDB4NkJBNiwgMHgyOTI4LAorICAgIDB4NkJBNywgMHgyQjhCLCAweDZCQUEsIDB4MkI4QywgMHg2QkFCLCAweDJCOEQsIDB4NkJBRCwgMHgyRDhCLAorICAgIDB4NkJBRSwgMHgxM0YxLCAweDZCQUYsIDB4MTRFNiwgMHg2QkIwLCAweDMwQTgsIDB4NkJCMiwgMHgxNjc5LAorICAgIDB4NkJCMywgMHgxNzhBLCAweDZCQjUsIDB4MDc2QywgMHg2QkI2LCAweDFCNDAsIDB4NkJCNywgMHgwOTAxLAorICAgIDB4NkJCQSwgMHgwQUU4LCAweDZCQkMsIDB4MENBMCwgMHg2QkJELCAweDIxQkEsIDB4NkJCRiwgMHgwRTRELAorICAgIDB4NkJDMCwgMHgwRTRDLCAweDZCQzMsIDB4MjZFOCwgMHg2QkM0LCAweDI2RTksIDB4NkJDNSwgMHgxMTg3LAorICAgIDB4NkJDNiwgMHgxMTg4LCAweDZCQzcsIDB4MkI4RiwgMHg2QkM4LCAweDJCOEUsIDB4NkJDOSwgMHgyRjQwLAorICAgIDB4NkJDQSwgMHgzNDIxLCAweDZCQ0IsIDB4MDJFMSwgMHg2QkNDLCAweDE3OEIsIDB4NkJDRCwgMHgwMzRFLAorICAgIDB4NkJDRiwgMHgwNENBLCAweDZCRDAsIDB4MThBRCwgMHg2QkQyLCAweDA3NkQsIDB4NkJEMywgMHgwRTRFLAorICAgIDB4NkJENCwgMHgwMkUyLCAweDZCRDYsIDB4MUI0MSwgMHg2QkQ3LCAweDA3NkUsIDB4NkJEOCwgMHgxQjQyLAorICAgIDB4NkJEQSwgMHgxM0YyLCAweDZCREIsIDB4MDJFMywgMHg2QkRFLCAweDE5Q0MsIDB4NkJFMCwgMHgxQjQzLAorICAgIDB4NkJFMiwgMHgxQ0YyLCAweDZCRTMsIDB4MUNGMSwgMHg2QkU0LCAweDFDRUYsIDB4NkJFNiwgMHgxQ0VFLAorICAgIDB4NkJFNywgMHgxQ0YzLCAweDZCRTgsIDB4MUNGMCwgMHg2QkVCLCAweDBBRTksIDB4NkJFQywgMHgwQUVBLAorICAgIDB4NkJFRiwgMHgwQ0ExLCAweDZCRjAsIDB4MjFCQiwgMHg2QkYyLCAweDIxQkMsIDB4NkJGMywgMHgyMUJELAorICAgIDB4NkJGNywgMHgyNDRDLCAweDZCRjgsIDB4MjQ0RCwgMHg2QkY5LCAweDI0NEIsIDB4NkJGQiwgMHgyNDQ5LAorICAgIDB4NkJGQywgMHgyNDRBLCAweDZCRkQsIDB4MEU0RiwgMHg2QkZFLCAweDI2RUEsIDB4NkJGRiwgMHgyOTJCLAorICAgIDB4NkMwMCwgMHgyOTJBLCAweDZDMDEsIDB4MjkyOSwgMHg2QzAyLCAweDI5MkMsIDB4NkMwMywgMHgyQjkxLAorICAgIDB4NkMwNCwgMHgyQjkwLCAweDZDMDUsIDB4MTJERSwgMHg2QzA2LCAweDJCOTIsIDB4NkMwOCwgMHgxM0YzLAorICAgIDB4NkMwOSwgMHgyRDhDLCAweDZDMEIsIDB4MkY0MSwgMHg2QzBDLCAweDMwQTksIDB4NkMwRCwgMHgzMzg4LAorICAgIDB4NkMwRiwgMHgwMkU0LCAweDZDMTAsIDB4MDM1MCwgMHg2QzExLCAweDAzNEYsIDB4NkMxMywgMHgwNjFFLAorICAgIDB4NkMxNCwgMHgxNzhDLCAweDZDMTUsIDB4MTdBQSwgMHg2QzE2LCAweDAzRTYsIDB4NkMxOCwgMHgxODAxLAorICAgIDB4NkMxOSwgMHgxOEFFLCAweDZDMUEsIDB4MThBRiwgMHg2QzFCLCAweDA2MUYsIDB4NkMxRCwgMHgxOUNELAorICAgIDB4NkMxRiwgMHgwNzZGLCAweDZDMjAsIDB4MUI0NCwgMHg2QzIxLCAweDFCNDUsIDB4NkMyMywgMHgwOTAyLAorICAgIDB4NkMyNCwgMHgwOTA2LCAweDZDMjUsIDB4MUNGNCwgMHg2QzI2LCAweDA5MDUsIDB4NkMyNywgMHgwOTAzLAorICAgIDB4NkMyOCwgMHgwOTA0LCAweDZDMkEsIDB4MUY0NCwgMHg2QzJCLCAweDBBRUIsIDB4NkMyQywgMHgwQ0E0LAorICAgIDB4NkMyRSwgMHgwQ0EyLCAweDZDMkYsIDB4MENBMywgMHg2QzMwLCAweDIxQkUsIDB4NkMzMywgMHgxMDAzLAorICAgIDB4NkMzNCwgMHgwMkU1LCAweDZDMzYsIDB4MTdBQiwgMHg2QzM4LCAweDAzNTEsIDB4NkMzQiwgMHgxN0FFLAorICAgIDB4NkMzRSwgMHgwMzU0LCAweDZDM0YsIDB4MTdBRCwgMHg2QzQwLCAweDAzNTMsIDB4NkM0MSwgMHgwMzUyLAorICAgIDB4NkM0MiwgMHgwNENCLCAweDZDNDMsIDB4MTdBQywgMHg2QzQ2LCAweDE4MDIsIDB4NkM0QSwgMHgxODA2LAorICAgIDB4NkM0QiwgMHgxODA4LCAweDZDNEMsIDB4MTgwOSwgMHg2QzRELCAweDAzRjAsIDB4NkM0RSwgMHgwM0YxLAorICAgIDB4NkM0RiwgMHgxODA1LCAweDZDNTAsIDB4MDNFQywgMHg2QzUyLCAweDE4MDMsIDB4NkM1NCwgMHgxODA3LAorICAgIDB4NkM1NSwgMHgwM0VELCAweDZDNTcsIDB4MDNFOCwgMHg2QzU5LCAweDAzRTksIDB4NkM1QiwgMHgwM0VGLAorICAgIDB4NkM1QywgMHgxODA0LCAweDZDNUQsIDB4MDNFNywgMHg2QzVFLCAweDA0Q0MsIDB4NkM1RiwgMHgwM0VBLAorICAgIDB4NkM2MCwgMHgwM0VCLCAweDZDNjEsIDB4MDNFRSwgMHg2QzY1LCAweDE4QzAsIDB4NkM2NiwgMHgxOEJFLAorICAgIDB4NkM2NywgMHgxOEIxLCAweDZDNjgsIDB4MDREOCwgMHg2QzY5LCAweDE4QjgsIDB4NkM2QSwgMHgwNEQzLAorICAgIDB4NkM2QiwgMHgxOEIyLCAweDZDNkQsIDB4MThCQSwgMHg2QzZGLCAweDE4QjcsIDB4NkM3MCwgMHgwNEQ2LAorICAgIDB4NkM3MSwgMHgxOEI2LCAweDZDNzIsIDB4MDRERCwgMHg2QzczLCAweDE4QkYsIDB4NkM3NCwgMHgwNERGLAorICAgIDB4NkM3NiwgMHgwNEUxLCAweDZDNzgsIDB4MThCMCwgMHg2QzdBLCAweDA0RDQsIDB4NkM3QiwgMHgxOEMxLAorICAgIDB4NkM3RCwgMHgwNERCLCAweDZDN0UsIDB4MDRERSwgMHg2QzgwLCAweDE5RTQsIDB4NkM4MSwgMHgwNENFLAorICAgIDB4NkM4MiwgMHgwNEU1LCAweDZDODMsIDB4MDREQywgMHg2Qzg0LCAweDE4QjMsIDB4NkM4NSwgMHgwNEQxLAorICAgIDB4NkM4NiwgMHgwNEUwLCAweDZDODcsIDB4MThCQiwgMHg2Qzg4LCAweDA0Q0YsIDB4NkM4OSwgMHgwNEQwLAorICAgIDB4NkM4QSwgMHgxOUUyLCAweDZDOEIsIDB4MThCNCwgMHg2QzhDLCAweDA0RDcsIDB4NkM4RCwgMHgwNEUyLAorICAgIDB4NkM4RSwgMHgxOEMyLCAweDZDOEYsIDB4MThCNSwgMHg2QzkwLCAweDA0RDUsIDB4NkM5MiwgMHgwNERBLAorICAgIDB4NkM5MywgMHgxOUNFLCAweDZDOTQsIDB4MDRFMywgMHg2Qzk1LCAweDE4QkMsIDB4NkM5NiwgMHgwNEQ5LAorICAgIDB4NkM5OCwgMHgwNEU0LCAweDZDOTksIDB4MDRDRCwgMHg2QzlBLCAweDE4QjksIDB4NkM5QiwgMHgwNEQyLAorICAgIDB4NkM5QywgMHgxOEJELCAweDZDOUQsIDB4MTlFMywgMHg2Q0FCLCAweDA2MkIsIDB4NkNBQywgMHgwNjNCLAorICAgIDB4NkNBRCwgMHgxOUQ1LCAweDZDQUUsIDB4MDYzMiwgMHg2Q0IwLCAweDE5RUEsIDB4NkNCMSwgMHgwNjIzLAorICAgIDB4NkNCMywgMHgwNjI2LCAweDZDQjQsIDB4MTlFMSwgMHg2Q0I2LCAweDE5RDMsIDB4NkNCNywgMHgxOUQ3LAorICAgIDB4NkNCOCwgMHgwNjJFLCAweDZDQjksIDB4MDYzMCwgMHg2Q0JBLCAweDE5REEsIDB4NkNCQiwgMHgwNjM3LAorICAgIDB4NkNCQywgMHgwNjI5LCAweDZDQkQsIDB4MDYyNywgMHg2Q0JFLCAweDA2MjgsIDB4NkNCRiwgMHgwNjM2LAorICAgIDB4NkNDMCwgMHgxOUU2LCAweDZDQzEsIDB4MDYzMSwgMHg2Q0MyLCAweDE5RDksIDB4NkNDMywgMHgxOURCLAorICAgIDB4NkNDNCwgMHgwNjJGLCAweDZDQzUsIDB4MDYzNCwgMHg2Q0M2LCAweDE5REMsIDB4NkNDNywgMHgxOUU5LAorICAgIDB4NkNDOSwgMHgwNzcwLCAweDZDQ0EsIDB4MDYzQSwgMHg2Q0NDLCAweDA2MjQsIDB4NkNDRCwgMHgxOUU4LAorICAgIDB4NkNDRiwgMHgxOUVDLCAweDZDRDAsIDB4MTlEOCwgMHg2Q0QxLCAweDE5RUUsIDB4NkNEMiwgMHgxOURGLAorICAgIDB4NkNEMywgMHgwNjJELCAweDZDRDQsIDB4MTlENCwgMHg2Q0Q1LCAweDA2MkMsIDB4NkNENiwgMHgwNjNFLAorICAgIDB4NkNENywgMHgwNjMzLCAweDZDRDksIDB4MTlEMiwgMHg2Q0RBLCAweDFCNEUsIDB4NkNEQiwgMHgwNjM5LAorICAgIDB4NkNEQywgMHgwNjNELCAweDZDREQsIDB4MTlFMCwgMHg2Q0RFLCAweDE5RTUsIDB4NkNFMCwgMHgwNjNGLAorICAgIDB4NkNFMSwgMHgwNjM4LCAweDZDRTIsIDB4MDYyQSwgMHg2Q0UzLCAweDA2MjAsIDB4NkNFNSwgMHgwNjI1LAorICAgIDB4NkNFNywgMHgxOUQ2LCAweDZDRTgsIDB4MDYyMSwgMHg2Q0U5LCAweDE5RUQsIDB4NkNFQiwgMHgxOUQwLAorICAgIDB4NkNFQywgMHgxOUNGLCAweDZDRUQsIDB4MTlERCwgMHg2Q0VFLCAweDE5RDEsIDB4NkNFRiwgMHgwNjNDLAorICAgIDB4NkNGMCwgMHgwOTA3LCAweDZDRjEsIDB4MDYzNSwgMHg2Q0YyLCAweDE5REUsIDB4NkNGMywgMHgwNjIyLAorICAgIDB4NkNGNSwgMHgwNzdGLCAweDZDRjksIDB4MTlFQiwgMHg2RDAwLCAweDFCNTUsIDB4NkQwMSwgMHgxQjU4LAorICAgIDB4NkQwMywgMHgxQjVCLCAweDZEMDQsIDB4MUI1MCwgMHg2RDA3LCAweDFCNUUsIDB4NkQwOCwgMHgxQjYxLAorICAgIDB4NkQwOSwgMHgxQjYzLCAweDZEMEEsIDB4MUI0RCwgMHg2RDBCLCAweDA3NzEsIDB4NkQwQywgMHgwNzc2LAorICAgIDB4NkQwRCwgMHgxQ0Y5LCAweDZEMEUsIDB4MDc4NiwgMHg2RDBGLCAweDFCNUMsIDB4NkQxMCwgMHgxQjY0LAorICAgIDB4NkQxMSwgMHgxQjU0LCAweDZEMTIsIDB4MUI0QywgMHg2RDE2LCAweDFEMTQsIDB4NkQxNywgMHgwNzc5LAorICAgIDB4NkQxOCwgMHgxQjU5LCAweDZEMTksIDB4MUI1MSwgMHg2RDFBLCAweDFCNTMsIDB4NkQxQiwgMHgwNzdFLAorICAgIDB4NkQxRCwgMHgxQjU2LCAweDZEMUUsIDB4MDc3OCwgMHg2RDFGLCAweDFCNDksIDB4NkQyMCwgMHgxQjVGLAorICAgIDB4NkQyMiwgMHgxQjYyLCAweDZEMjUsIDB4MDc3NSwgMHg2RDI3LCAweDA3ODEsIDB4NkQyOCwgMHgxQjQ2LAorICAgIDB4NkQyOSwgMHgwNzgzLCAweDZEMkEsIDB4MDc3MywgMHg2RDJCLCAweDA3ODcsIDB4NkQyQywgMHgxQjYwLAorICAgIDB4NkQyRCwgMHgxQjQ4LCAweDZEMkUsIDB4MDc4NCwgMHg2RDJGLCAweDFEMEUsIDB4NkQzMCwgMHgxOUU3LAorICAgIDB4NkQzMSwgMHgwNzc3LCAweDZEMzIsIDB4MDc3MiwgMHg2RDMzLCAweDFCNEYsIDB4NkQzNCwgMHgxQjQ3LAorICAgIDB4NkQzNSwgMHgwNzg1LCAweDZEMzYsIDB4MDc3RCwgMHg2RDM3LCAweDFCNUEsIDB4NkQzOCwgMHgwNzgyLAorICAgIDB4NkQzOSwgMHgwNzgwLCAweDZEM0EsIDB4MUI1MiwgMHg2RDNCLCAweDA3N0EsIDB4NkQzQywgMHgxQjRBLAorICAgIDB4NkQzRCwgMHgwNzdCLCAweDZEM0UsIDB4MDc3QywgMHg2RDNGLCAweDFCNEIsIDB4NkQ0MCwgMHgxQjVELAorICAgIDB4NkQ0MSwgMHgwNzc0LCAweDZENDIsIDB4MUI1NywgMHg2RDU4LCAweDFDRkMsIDB4NkQ1OSwgMHgwOTBGLAorICAgIDB4NkQ1QSwgMHgwOTE0LCAweDZENUUsIDB4MUQwNSwgMHg2RDVGLCAweDFEMEIsIDB4NkQ2MCwgMHgxRDA3LAorICAgIDB4NkQ2MSwgMHgxQ0ZBLCAweDZENjIsIDB4MUNGRCwgMHg2RDYzLCAweDFDRjYsIDB4NkQ2NCwgMHgxQ0Y3LAorICAgIDB4NkQ2NSwgMHgwOTFCLCAweDZENjYsIDB4MDkwQywgMHg2RDY3LCAweDFEMDYsIDB4NkQ2OCwgMHgxRDBGLAorICAgIDB4NkQ2OSwgMHgwOTE2LCAweDZENkEsIDB4MDkwOCwgMHg2RDZDLCAweDA5MTEsIDB4NkQ2RCwgMHgxQ0ZFLAorICAgIDB4NkQ2RSwgMHgwOTEzLCAweDZENkYsIDB4MUNGRiwgMHg2RDcwLCAweDFEMDksIDB4NkQ3NCwgMHgwOTE1LAorICAgIDB4NkQ3NSwgMHgxRDE4LCAweDZENzYsIDB4MUNGOCwgMHg2RDc3LCAweDA5MEUsIDB4NkQ3OCwgMHgwOTBELAorICAgIDB4NkQ3OSwgMHgwOTE5LCAweDZEN0EsIDB4MUNGNSwgMHg2RDdCLCAweDFEMTYsIDB4NkQ3QywgMHgxRDBBLAorICAgIDB4NkQ3RCwgMHgxRDE3LCAweDZEN0UsIDB4MUQxMSwgMHg2RDdGLCAweDFEMDMsIDB4NkQ4MCwgMHgxRDEyLAorICAgIDB4NkQ4MiwgMHgxRDBDLCAweDZEODMsIDB4MUQxNSwgMHg2RDg0LCAweDFEMTMsIDB4NkQ4NSwgMHgwOTFBLAorICAgIDB4NkQ4NiwgMHgxRDA0LCAweDZEODcsIDB4MDkwQiwgMHg2RDg4LCAweDA5MEEsIDB4NkQ4OSwgMHgwOTEyLAorICAgIDB4NkQ4QSwgMHgwOTE4LCAweDZEOEIsIDB4MUQxMCwgMHg2RDhDLCAweDA5MTcsIDB4NkQ4RCwgMHgxRDAxLAorICAgIDB4NkQ4RSwgMHgwQUVDLCAweDZEOTAsIDB4MUQxOSwgMHg2RDkxLCAweDFEMDAsIDB4NkQ5MiwgMHgxQ0ZCLAorICAgIDB4NkQ5MywgMHgwOTEwLCAweDZEOTQsIDB4MDkxQywgMHg2RDk1LCAweDA5MDksIDB4NkQ5NywgMHgxRDA4LAorICAgIDB4NkQ5OCwgMHgxRDBELCAweDZEQUEsIDB4MEIwRSwgMHg2REFCLCAweDFGNDYsIDB4NkRBQywgMHgxRjRBLAorICAgIDB4NkRBRSwgMHgwQUZCLCAweDZEQUYsIDB4MEFGOSwgMHg2REIyLCAweDBBRjAsIDB4NkRCMywgMHgxRjQ4LAorICAgIDB4NkRCNCwgMHgxRjQ3LCAweDZEQjUsIDB4MEIwNCwgMHg2REI3LCAweDFGNEQsIDB4NkRCOCwgMHgwQUZFLAorICAgIDB4NkRCQSwgMHgxRjVGLCAweDZEQkIsIDB4MUY2QiwgMHg2REJDLCAweDBBRUQsIDB4NkRCRCwgMHgxRjVDLAorICAgIDB4NkRCRSwgMHgxRjU1LCAweDZEQkYsIDB4MEIxMCwgMHg2REMwLCAweDFGNDUsIDB4NkRDMiwgMHgxRjYxLAorICAgIDB4NkRDNCwgMHgwQjBELCAweDZEQzUsIDB4MEIwMSwgMHg2REM2LCAweDBCMEMsIDB4NkRDNywgMHgwQUY3LAorICAgIDB4NkRDOCwgMHgxRjUxLCAweDZEQzksIDB4MUY2MywgMHg2RENBLCAweDFGNUIsIDB4NkRDQiwgMHgwQUY4LAorICAgIDB4NkRDQywgMHgwQUYyLCAweDZEQ0QsIDB4MUY2OSwgMHg2RENGLCAweDFGNjIsIDB4NkREMCwgMHgxRjY0LAorICAgIDB4NkREMSwgMHgwQUZBLCAweDZERDIsIDB4MEIwMiwgMHg2REQzLCAweDFGNjYsIDB4NkRENCwgMHgxRjRGLAorICAgIDB4NkRENSwgMHgxRjYwLCAweDZERDYsIDB4MUY1NCwgMHg2REQ3LCAweDFGNjgsIDB4NkREOCwgMHgwQjA3LAorICAgIDB4NkREOSwgMHgwQUVGLCAweDZEREEsIDB4MEIwNSwgMHg2RERCLCAweDFGNTksIDB4NkREQywgMHgxRjU3LAorICAgIDB4NkRERCwgMHgxRjU4LCAweDZEREUsIDB4MEFGQywgMHg2RERGLCAweDFGNTMsIDB4NkRFMCwgMHgxRjUyLAorICAgIDB4NkRFMSwgMHgwQUYxLCAweDZERTIsIDB4MUY0QywgMHg2REUzLCAweDFGNkEsIDB4NkRFNCwgMHgwQUYzLAorICAgIDB4NkRFNSwgMHgxRjU2LCAweDZERTYsIDB4MEIxMSwgMHg2REU4LCAweDBCMEIsIDB4NkRFOSwgMHgxRjRCLAorICAgIDB4NkRFQSwgMHgwQjA4LCAweDZERUIsIDB4MEIwNiwgMHg2REVDLCAweDBCMEYsIDB4NkRFRCwgMHgxRjVELAorICAgIDB4NkRFRSwgMHgwQjBBLCAweDZERUYsIDB4MUQwMiwgMHg2REYwLCAweDFGNUUsIDB4NkRGMSwgMHgwQjA5LAorICAgIDB4NkRGMiwgMHgxRjY1LCAweDZERjMsIDB4MEFFRSwgMHg2REY0LCAweDFGNUEsIDB4NkRGNSwgMHgwQjAwLAorICAgIDB4NkRGNiwgMHgxRjRFLCAweDZERjcsIDB4MEFGRiwgMHg2REY5LCAweDBBRkQsIDB4NkRGQSwgMHgwQUY1LAorICAgIDB4NkRGQiwgMHgwQUY0LCAweDZERkMsIDB4MjFCRiwgMHg2REZELCAweDFGNjcsIDB4NkUwMCwgMHgxRjUwLAorICAgIDB4NkUwMywgMHgyMUQ0LCAweDZFMDUsIDB4MEFGNiwgMHg2RTE5LCAweDBDQzEsIDB4NkUxQSwgMHgwQjAzLAorICAgIDB4NkUxQiwgMHgwQ0FGLCAweDZFMUMsIDB4MjFDRSwgMHg2RTFELCAweDBDQkQsIDB4NkUxRiwgMHgyMUMyLAorICAgIDB4NkUyMCwgMHgwQ0FDLCAweDZFMjEsIDB4MENBOCwgMHg2RTIyLCAweDIxRTAsIDB4NkUyMywgMHgwQ0FFLAorICAgIDB4NkUyNCwgMHgwQ0IyLCAweDZFMjUsIDB4MENBRCwgMHg2RTI2LCAweDBDQjYsIDB4NkUyNywgMHgyMUU0LAorICAgIDB4NkUyOCwgMHgyMURCLCAweDZFMkIsIDB4MjFDOSwgMHg2RTJDLCAweDBDQkIsIDB4NkUyRCwgMHgwQ0I1LAorICAgIDB4NkUyRSwgMHgyMUQ1LCAweDZFMkYsIDB4MENBNSwgMHg2RTMwLCAweDIxRTEsIDB4NkUzMSwgMHgyMURBLAorICAgIDB4NkUzMiwgMHgwQ0E5LCAweDZFMzMsIDB4MjFDRiwgMHg2RTM0LCAweDBDQjgsIDB4NkUzNSwgMHgyMUVDLAorICAgIDB4NkUzNiwgMHgyMUVELCAweDZFMzgsIDB4MENBNiwgMHg2RTM5LCAweDIxREYsIDB4NkUzQSwgMHgwQ0JBLAorICAgIDB4NkUzQiwgMHgyMUQzLCAweDZFM0MsIDB4MjFDNSwgMHg2RTNELCAweDIxQzYsIDB4NkUzRSwgMHgwQ0JFLAorICAgIDB4NkUzRiwgMHgyMUNBLCAweDZFNDAsIDB4MjFEMSwgMHg2RTQxLCAweDIxQ0IsIDB4NkU0MywgMHgwQ0JDLAorICAgIDB4NkU0NCwgMHgwQ0M0LCAweDZFNDUsIDB4MjFDNywgMHg2RTQ2LCAweDIxQzAsIDB4NkU0NywgMHgyMUMxLAorICAgIDB4NkU0OSwgMHgyMUMzLCAweDZFNEEsIDB4MENBQiwgMHg2RTRCLCAweDIxRDAsIDB4NkU0RCwgMHgwQ0I5LAorICAgIDB4NkU0RSwgMHgwQ0MyLCAweDZFNTEsIDB4MjFEMiwgMHg2RTUyLCAweDIxRUEsIDB4NkU1MywgMHgyMUUyLAorICAgIDB4NkU1NCwgMHgwQ0E3LCAweDZFNTUsIDB4MjFFOCwgMHg2RTU2LCAweDBDQjMsIDB4NkU1OCwgMHgwQ0IxLAorICAgIDB4NkU1QSwgMHgyMUVFLCAweDZFNUIsIDB4MENCMCwgMHg2RTVDLCAweDIxRDgsIDB4NkU1RCwgMHgyMUNDLAorICAgIDB4NkU1RSwgMHgyMUQ2LCAweDZFNUYsIDB4MENDNywgMHg2RTYwLCAweDIxREMsIDB4NkU2MSwgMHgyMUQ5LAorICAgIDB4NkU2MiwgMHgyMUM4LCAweDZFNjMsIDB4MENDMywgMHg2RTY0LCAweDIxRTYsIDB4NkU2NSwgMHgyMUUzLAorICAgIDB4NkU2NiwgMHgyMUVCLCAweDZFNjcsIDB4MENBQSwgMHg2RTY4LCAweDIxRDcsIDB4NkU2OSwgMHgwQ0M2LAorICAgIDB4NkU2QiwgMHgyMURFLCAweDZFNkUsIDB4MENCNCwgMHg2RTZGLCAweDBDQjcsIDB4NkU3MSwgMHgyMURELAorICAgIDB4NkU3MiwgMHgwQ0M1LCAweDZFNzMsIDB4MjFDRCwgMHg2RTc0LCAweDFGNDksIDB4NkU3NywgMHgyMUU3LAorICAgIDB4NkU3OCwgMHgyMUU1LCAweDZFNzksIDB4MjFFOSwgMHg2RTg4LCAweDIxQzQsIDB4NkU4OSwgMHgwQ0MwLAorICAgIDB4NkU4RCwgMHgyNDZDLCAweDZFOEUsIDB4MjQ2QiwgMHg2RThGLCAweDI0NTEsIDB4NkU5MCwgMHgwRTU1LAorICAgIDB4NkU5MiwgMHgyNDZBLCAweDZFOTMsIDB4MjQ1NCwgMHg2RTk0LCAweDI0NTUsIDB4NkU5NiwgMHgwRTVGLAorICAgIDB4NkU5NywgMHgyNDczLCAweDZFOTgsIDB4MEU1QSwgMHg2RTk5LCAweDI0NjksIDB4NkU5QiwgMHgyNDRFLAorICAgIDB4NkU5QywgMHgwRTYwLCAweDZFOUQsIDB4MEU1NiwgMHg2RTlFLCAweDI0NUQsIDB4NkU5RiwgMHgyNDUzLAorICAgIDB4NkVBMCwgMHgyNDU2LCAweDZFQTEsIDB4MjQ2RSwgMHg2RUEyLCAweDBFNTAsIDB4NkVBMywgMHgyNDc1LAorICAgIDB4NkVBNCwgMHgyNDZELCAweDZFQTUsIDB4MEU1OSwgMHg2RUE2LCAweDI0NjIsIDB4NkVBNywgMHgwRTY0LAorICAgIDB4NkVBQSwgMHgwRTYzLCAweDZFQUIsIDB4MEU1RCwgMHg2RUFFLCAweDI0NzQsIDB4NkVBRiwgMHgwRTUxLAorICAgIDB4NkVCMCwgMHgyNDYwLCAweDZFQjEsIDB4MjQ1NywgMHg2RUIyLCAweDI0NjQsIDB4NkVCMywgMHgyNDcwLAorICAgIDB4NkVCNCwgMHgwRTY1LCAweDZFQjYsIDB4MEU1MywgMHg2RUI3LCAweDI0NUYsIDB4NkVCOSwgMHgyNDU4LAorICAgIDB4NkVCQSwgMHgwRTVDLCAweDZFQkMsIDB4MEU1QiwgMHg2RUJELCAweDI0NUIsIDB4NkVCRSwgMHgyNDY1LAorICAgIDB4NkVCRiwgMHgyNDZGLCAweDZFQzAsIDB4MjQ1MiwgMHg2RUMxLCAweDI0NUMsIDB4NkVDMiwgMHgwRTU0LAorICAgIDB4NkVDMywgMHgyNDY2LCAweDZFQzQsIDB4MEU2MSwgMHg2RUM1LCAweDBFNTgsIDB4NkVDNiwgMHgyNDU5LAorICAgIDB4NkVDNywgMHgwRTU3LCAweDZFQzgsIDB4MjQ1MCwgMHg2RUM5LCAweDI0NUUsIDB4NkVDQSwgMHgyNDcyLAorICAgIDB4NkVDQiwgMHgwQ0JGLCAweDZFQ0MsIDB4MTAxRiwgMHg2RUNELCAweDI0NjEsIDB4NkVDRSwgMHgyNkVCLAorICAgIDB4NkVDRiwgMHgyNDYzLCAweDZFRDAsIDB4MjQ3MSwgMHg2RUQxLCAweDBFNUUsIDB4NkVEMiwgMHgyNDVBLAorICAgIDB4NkVEMywgMHgwRTUyLCAweDZFRDQsIDB4MEU2MiwgMHg2RUQ1LCAweDExOUEsIDB4NkVENiwgMHgyNDRGLAorICAgIDB4NkVEOCwgMHgyNDY4LCAweDZFREMsIDB4MjQ2NywgMHg2RUVCLCAweDI3MDcsIDB4NkVFQywgMHgxMDFDLAorICAgIDB4NkVFRCwgMHgyNkZDLCAweDZFRUUsIDB4MjcwMSwgMHg2RUVGLCAweDEwMTEsIDB4NkVGMSwgMHgyNkVELAorICAgIDB4NkVGMiwgMHgxMDFFLCAweDZFRjQsIDB4MTAwOCwgMHg2RUY1LCAweDI2RUMsIDB4NkVGNiwgMHgyNzBELAorICAgIDB4NkVGNywgMHgxMDIwLCAweDZFRjgsIDB4MjZGMCwgMHg2RUY5LCAweDI3MDAsIDB4NkVGQiwgMHgyNkYyLAorICAgIDB4NkVGQywgMHgyNzEwLCAweDZFRkQsIDB4MjcwQywgMHg2RUZFLCAweDEwMDYsIDB4NkVGRiwgMHgxMDEwLAorICAgIDB4NkYwMCwgMHgyOTQ2LCAweDZGMDEsIDB4MTAxRCwgMHg2RjAyLCAweDEwMEUsIDB4NkYwMywgMHgyNkVFLAorICAgIDB4NkYwNSwgMHgyNzBCLCAweDZGMDYsIDB4MTAxMiwgMHg2RjA3LCAweDI3MDgsIDB4NkYwOCwgMHgyNzE1LAorICAgIDB4NkYwOSwgMHgyNkY0LCAweDZGMEEsIDB4MjZGRCwgMHg2RjBELCAweDI3MTMsIDB4NkYwRSwgMHgyNzA5LAorICAgIDB4NkYwRiwgMHgxMDBELCAweDZGMTIsIDB4MjZGQiwgMHg2RjEzLCAweDEwMDcsIDB4NkYxNCwgMHgxMDA1LAorICAgIDB4NkYxNSwgMHgxMDE3LCAweDZGMTgsIDB4MjZGOSwgMHg2RjE5LCAweDI2RjYsIDB4NkYxQSwgMHgyNkY3LAorICAgIDB4NkYxQywgMHgyNzBGLCAweDZGMUUsIDB4MjcxNCwgMHg2RjFGLCAweDI3MTIsIDB4NkYyMCwgMHgxMDBCLAorICAgIDB4NkYyMSwgMHgyNzE2LCAweDZGMjIsIDB4MTAwRiwgMHg2RjIzLCAweDEwMTYsIDB4NkYyNSwgMHgyNkVGLAorICAgIDB4NkYyNiwgMHgyOTJFLCAweDZGMjcsIDB4MjZGOCwgMHg2RjI5LCAweDEwMDksIDB4NkYyQSwgMHgxMDFCLAorICAgIDB4NkYyQiwgMHgxMDE4LCAweDZGMkMsIDB4MTAwQywgMHg2RjJELCAweDI3MDIsIDB4NkYyRSwgMHgyNkYzLAorICAgIDB4NkYyRiwgMHgxMDE5LCAweDZGMzAsIDB4MjcwNCwgMHg2RjMxLCAweDEwMTMsIDB4NkYzMiwgMHgxMDE1LAorICAgIDB4NkYzMywgMHgxMDA0LCAweDZGMzUsIDB4MjcwNiwgMHg2RjM2LCAweDI2RkUsIDB4NkYzNywgMHgyNkYxLAorICAgIDB4NkYzOCwgMHgxMDE0LCAweDZGMzksIDB4MjcwRSwgMHg2RjNBLCAweDI3MTEsIDB4NkYzQiwgMHgyNkZBLAorICAgIDB4NkYzQywgMHgyNzA1LCAweDZGM0UsIDB4MTAwQSwgMHg2RjNGLCAweDExODksIDB4NkY0MCwgMHgyNzAzLAorICAgIDB4NkY0MSwgMHgyOTJELCAweDZGNDMsIDB4MjcwQSwgMHg2RjRFLCAweDI2RjUsIDB4NkY0RiwgMHgyOTM3LAorICAgIDB4NkY1MCwgMHgyOTQxLCAweDZGNTEsIDB4MTE4QywgMHg2RjUyLCAweDI5NDAsIDB4NkY1MywgMHgyOTRDLAorICAgIDB4NkY1NCwgMHgxMThFLCAweDZGNTUsIDB4MjkzRSwgMHg2RjU3LCAweDI5NDIsIDB4NkY1OCwgMHgxMTk5LAorICAgIDB4NkY1QSwgMHgyOTM5LCAweDZGNUIsIDB4MTE5MSwgMHg2RjVELCAweDI5NDUsIDB4NkY1RSwgMHgyQjlBLAorICAgIDB4NkY1RiwgMHgxMTlELCAweDZGNjAsIDB4MTE5QywgMHg2RjYxLCAweDI5NDcsIDB4NkY2MiwgMHgyOTM2LAorICAgIDB4NkY2MywgMHgyOTUxLCAweDZGNjQsIDB4MTE5NywgMHg2RjY2LCAweDExOEQsIDB4NkY2NywgMHgyOTRBLAorICAgIDB4NkY2OSwgMHgyOTRFLCAweDZGNkEsIDB4Mjk1MywgMHg2RjZCLCAweDI5NDgsIDB4NkY2QywgMHgyOTNDLAorICAgIDB4NkY2RCwgMHgxMTkwLCAweDZGNkUsIDB4MTE5MywgMHg2RjZGLCAweDExOUIsIDB4NkY3MCwgMHgxMTk2LAorICAgIDB4NkY3MiwgMHgyOTNGLCAweDZGNzMsIDB4MjZGRiwgMHg2Rjc2LCAweDI5M0IsIDB4NkY3NywgMHgyOTUyLAorICAgIDB4NkY3OCwgMHgxMTkyLCAweDZGN0EsIDB4MTE5NSwgMHg2RjdCLCAweDI5NTQsIDB4NkY3QywgMHgxMThBLAorICAgIDB4NkY3RCwgMHgyOTQ5LCAweDZGN0UsIDB4MjkyRiwgMHg2RjdGLCAweDI5NEYsIDB4NkY4MCwgMHgxM0ZDLAorICAgIDB4NkY4MiwgMHgyOTNELCAweDZGODQsIDB4MTE4QiwgMHg2Rjg1LCAweDI5MzgsIDB4NkY4NiwgMHgxMThGLAorICAgIDB4NkY4NywgMHgyOTMwLCAweDZGODgsIDB4MTAxQSwgMHg2Rjg5LCAweDI5MzQsIDB4NkY4QiwgMHgyOTRELAorICAgIDB4NkY4QywgMHgyOTM1LCAweDZGOEQsIDB4MjkzMywgMHg2RjhFLCAweDExOTQsIDB4NkY5MCwgMHgyOTRCLAorICAgIDB4NkY5MiwgMHgyOTMyLCAweDZGOTMsIDB4Mjk0NCwgMHg2Rjk0LCAweDI5NDMsIDB4NkY5NSwgMHgyOTUwLAorICAgIDB4NkY5NiwgMHgyOTNBLCAweDZGOTcsIDB4MTE5OCwgMHg2RjlFLCAweDJCOUQsIDB4NkZBMCwgMHgxMkVCLAorICAgIDB4NkZBMSwgMHgxMkUxLCAweDZGQTIsIDB4MkJBOSwgMHg2RkEzLCAweDJCOTUsIDB4NkZBNCwgMHgxMkUzLAorICAgIDB4NkZBNSwgMHgyQkExLCAweDZGQTYsIDB4MTJFQSwgMHg2RkE3LCAweDEyRTUsIDB4NkZBOCwgMHgyQjlGLAorICAgIDB4NkZBOSwgMHgyRDhFLCAweDZGQUEsIDB4MkJBNSwgMHg2RkFCLCAweDJCQUIsIDB4NkZBQywgMHgyQkE0LAorICAgIDB4NkZBRCwgMHgyQjkzLCAweDZGQUUsIDB4MkJBMiwgMHg2RkFGLCAweDJCQUQsIDB4NkZCMCwgMHgyQkFGLAorICAgIDB4NkZCMSwgMHgxMkUwLCAweDZGQjIsIDB4MkJBRSwgMHg2RkIzLCAweDEyRTYsIDB4NkZCNCwgMHgxMkVDLAorICAgIDB4NkZCNiwgMHgxMkU5LCAweDZGQjgsIDB4MkJBOCwgMHg2RkI5LCAweDEyRTgsIDB4NkZCQSwgMHgyQkEzLAorICAgIDB4NkZCQywgMHgyQjk3LCAweDZGQkQsIDB4MkI5QywgMHg2RkJGLCAweDJCQTcsIDB4NkZDMCwgMHgxMkU3LAorICAgIDB4NkZDMSwgMHgxMkU0LCAweDZGQzIsIDB4MTJERiwgMHg2RkMzLCAweDEyRTIsIDB4NkZDNCwgMHgyQjlCLAorICAgIDB4NkZDNiwgMHgyOTMxLCAweDZGQzcsIDB4MkI5NiwgMHg2RkM4LCAweDJCOTksIDB4NkZDOSwgMHgyQkFBLAorICAgIDB4NkZDQSwgMHgyQjlFLCAweDZGQ0IsIDB4MkI5NCwgMHg2RkNDLCAweDJEOEQsIDB4NkZDRCwgMHgyQkFDLAorICAgIDB4NkZDRSwgMHgyQjk4LCAweDZGQ0YsIDB4MkJBNiwgMHg2RkQ0LCAweDJEOTAsIDB4NkZENSwgMHgxNDAwLAorICAgIDB4NkZEOCwgMHgxM0Y0LCAweDZGREIsIDB4MTNGOCwgMHg2RkRDLCAweDJEOTIsIDB4NkZERCwgMHgyRDk4LAorICAgIDB4NkZERSwgMHgyRDk2LCAweDZGREYsIDB4MTNGNiwgMHg2RkUwLCAweDEzRjcsIDB4NkZFMSwgMHgxM0ZFLAorICAgIDB4NkZFMiwgMHgyRDk5LCAweDZGRTMsIDB4MkQ5MSwgMHg2RkU0LCAweDEzRjksIDB4NkZFNiwgMHgyRDk1LAorICAgIDB4NkZFNywgMHgyRDk0LCAweDZGRTgsIDB4MkQ5QSwgMHg2RkU5LCAweDEzRkYsIDB4NkZFQiwgMHgxM0ZBLAorICAgIDB4NkZFQywgMHgxM0ZELCAweDZGRUQsIDB4MkQ5MywgMHg2RkVFLCAweDE0MDEsIDB4NkZFRiwgMHgxM0ZCLAorICAgIDB4NkZGMCwgMHgxNDAyLCAweDZGRjEsIDB4MTNGNSwgMHg2RkYyLCAweDJEOTcsIDB4NkZGNCwgMHgyRDhGLAorICAgIDB4NkZGNywgMHgyRjRFLCAweDZGRkEsIDB4MTRFQiwgMHg2RkZCLCAweDJGNEIsIDB4NkZGQywgMHgyRjRELAorICAgIDB4NkZGRSwgMHgxNEU5LCAweDZGRkYsIDB4MkY0OSwgMHg3MDAwLCAweDJGNEEsIDB4NzAwMSwgMHgyRjQ1LAorICAgIDB4NzAwNCwgMHgyQkEwLCAweDcwMDUsIDB4MkY0NiwgMHg3MDA2LCAweDE0RUEsIDB4NzAwNywgMHgyRjQyLAorICAgIDB4NzAwOSwgMHgxNEU3LCAweDcwMEEsIDB4MkY0RiwgMHg3MDBCLCAweDE0RTgsIDB4NzAwQywgMHgyRjQzLAorICAgIDB4NzAwRCwgMHgyRjQ0LCAweDcwMEUsIDB4MkY0OCwgMHg3MDBGLCAweDE0RUQsIDB4NzAxMSwgMHgxNEVDLAorICAgIDB4NzAxNCwgMHgyRjQ3LCAweDcwMTUsIDB4MTU4RiwgMHg3MDE2LCAweDMwQUQsIDB4NzAxNywgMHgzMEIzLAorICAgIDB4NzAxOCwgMHgxNTkwLCAweDcwMTksIDB4MzBBQSwgMHg3MDFBLCAweDE1OEQsIDB4NzAxQiwgMHgxNThBLAorICAgIDB4NzAxQywgMHgzMEI1LCAweDcwMUQsIDB4MTU4RSwgMHg3MDFGLCAweDE1OEIsIDB4NzAyMCwgMHgzMEFDLAorICAgIDB4NzAyMSwgMHgzMEFGLCAweDcwMjIsIDB4MzBCMCwgMHg3MDIzLCAweDMwQjEsIDB4NzAyNCwgMHgzMEI0LAorICAgIDB4NzAyNiwgMHgyRjRDLCAweDcwMjcsIDB4MzBBQiwgMHg3MDI4LCAweDE1OEMsIDB4NzAyOSwgMHgzMEIyLAorICAgIDB4NzAyQSwgMHgzMUVGLCAweDcwMkIsIDB4MzBBRSwgMHg3MDJGLCAweDMxRTYsIDB4NzAzMCwgMHgxNjFELAorICAgIDB4NzAzMSwgMHgzMUU5LCAweDcwMzIsIDB4MTYxRSwgMHg3MDMzLCAweDMxRjIsIDB4NzAzNCwgMHgzMUU4LAorICAgIDB4NzAzNSwgMHgzMUU1LCAweDcwMzcsIDB4MzFFNywgMHg3MDM4LCAweDMxRUIsIDB4NzAzOSwgMHgzMUVFLAorICAgIDB4NzAzQSwgMHgzMUVELCAweDcwM0IsIDB4MzFGMSwgMHg3MDNDLCAweDMxRTQsIDB4NzAzRSwgMHgxNjFDLAorICAgIDB4NzAzRiwgMHgzMUVDLCAweDcwNDAsIDB4MzFGMCwgMHg3MDQxLCAweDMxRjMsIDB4NzA0MiwgMHgzMUVBLAorICAgIDB4NzA0MywgMHgzMkQ4LCAweDcwNDQsIDB4MzJEOSwgMHg3MDQ1LCAweDMyREQsIDB4NzA0NiwgMHgzMkRFLAorICAgIDB4NzA0OCwgMHgzMkRCLCAweDcwNDksIDB4MzJEQywgMHg3MDRBLCAweDMyREEsIDB4NzA0QywgMHgxNjdBLAorICAgIDB4NzA1MSwgMHgxNkM4LCAweDcwNTIsIDB4MzM4QywgMHg3MDU1LCAweDMzODksIDB4NzA1NiwgMHgzMzhBLAorICAgIDB4NzA1NywgMHgzMzhCLCAweDcwNTgsIDB4MTZDOSwgMHg3MDVBLCAweDM0MjMsIDB4NzA1QiwgMHgzNDIyLAorICAgIDB4NzA1RCwgMHgzNDhBLCAweDcwNUUsIDB4MTcyMiwgMHg3MDVGLCAweDM0ODgsIDB4NzA2MCwgMHgzNDhCLAorICAgIDB4NzA2MSwgMHgzNDg5LCAweDcwNjIsIDB4MzREMCwgMHg3MDYzLCAweDE3NDQsIDB4NzA2NCwgMHgxNzUyLAorICAgIDB4NzA2NSwgMHgzNTFDLCAweDcwNjYsIDB4MzUwNiwgMHg3MDY4LCAweDM1MUIsIDB4NzA2OSwgMHgzNTQ3LAorICAgIDB4NzA2QSwgMHgzNTQ4LCAweDcwNkIsIDB4MDJFNiwgMHg3MDcwLCAweDAzRjIsIDB4NzA3MSwgMHgxODBBLAorICAgIDB4NzA3NCwgMHgxOEMzLCAweDcwNzYsIDB4MDRFNiwgMHg3MDc4LCAweDA0RTksIDB4NzA3QSwgMHgxOEM0LAorICAgIDB4NzA3QywgMHgwNEU3LCAweDcwN0QsIDB4MDRFOCwgMHg3MDgyLCAweDE5RjcsIDB4NzA4MywgMHgxOUY5LAorICAgIDB4NzA4NCwgMHgxOUY0LCAweDcwODUsIDB4MTlGMSwgMHg3MDg2LCAweDE5RjMsIDB4NzA4QSwgMHgwNjQzLAorICAgIDB4NzA4RSwgMHgwNjQxLCAweDcwOTEsIDB4MTlGNSwgMHg3MDkyLCAweDA2NDIsIDB4NzA5MywgMHgxOUYyLAorICAgIDB4NzA5NCwgMHgxOUVGLCAweDcwOTUsIDB4MDY0MCwgMHg3MDk2LCAweDE5RjYsIDB4NzA5OCwgMHgxOUYwLAorICAgIDB4NzA5OSwgMHgwNjQ0LCAweDcwOUEsIDB4MTlGOCwgMHg3MDlGLCAweDFCNjYsIDB4NzBBMSwgMHgxQjZBLAorICAgIDB4NzBBNCwgMHgwNzkwLCAweDcwQTksIDB4MUI2RCwgMHg3MEFCLCAweDA3ODgsIDB4NzBBQywgMHgwNzhCLAorICAgIDB4NzBBRCwgMHgwNzhELCAweDcwQUUsIDB4MDc4RiwgMHg3MEFGLCAweDA3OEMsIDB4NzBCMCwgMHgxQjY5LAorICAgIDB4NzBCMSwgMHgxQjY4LCAweDcwQjMsIDB4MDc4QSwgMHg3MEI0LCAweDFCNkIsIDB4NzBCNSwgMHgxQjZDLAorICAgIDB4NzBCNywgMHgxQjY1LCAweDcwQjgsIDB4MDc4RSwgMHg3MEJBLCAweDA3ODksIDB4NzBCRSwgMHgxQjY3LAorICAgIDB4NzBDNSwgMHgxRDI3LCAweDcwQzYsIDB4MUQyOCwgMHg3MEM3LCAweDFEMjksIDB4NzBDOCwgMHgwOTIxLAorICAgIDB4NzBDQSwgMHgwOTFELCAweDcwQ0IsIDB4MUQxRSwgMHg3MENELCAweDFEMjYsIDB4NzBDRSwgMHgxRDJCLAorICAgIDB4NzBDRiwgMHgwOTIyLCAweDcwRDEsIDB4MUQxQywgMHg3MEQyLCAweDFEMjIsIDB4NzBEMywgMHgxRDFCLAorICAgIDB4NzBENCwgMHgxRDI1LCAweDcwRDcsIDB4MUQyMSwgMHg3MEQ4LCAweDA5MUUsIDB4NzBEOSwgMHgwOTIwLAorICAgIDB4NzBEQSwgMHgxRDJBLCAweDcwREMsIDB4MUQxQSwgMHg3MERELCAweDFEMUQsIDB4NzBERSwgMHgxRDIzLAorICAgIDB4NzBFMCwgMHgxRDI0LCAweDcwRTEsIDB4MUQyQywgMHg3MEUyLCAweDFEMjAsIDB4NzBFNCwgMHgwOTFGLAorICAgIDB4NzBFRiwgMHgwQjE2LCAweDcwRjAsIDB4MUY3MiwgMHg3MEYzLCAweDFGNzQsIDB4NzBGNCwgMHgxRjcwLAorICAgIDB4NzBGNiwgMHgxRjdDLCAweDcwRjcsIDB4MUY2RSwgMHg3MEY4LCAweDFGN0IsIDB4NzBGOSwgMHgwQjEyLAorICAgIDB4NzBGQSwgMHgxRjZDLCAweDcwRkIsIDB4MjFGMiwgMHg3MEZDLCAweDFGNzYsIDB4NzBGRCwgMHgwQjE1LAorICAgIDB4NzBGRiwgMHgxRjc3LCAweDcxMDAsIDB4MUY3QSwgMHg3MTAyLCAweDFGN0UsIDB4NzEwNCwgMHgxRjczLAorICAgIDB4NzEwNiwgMHgxRjc4LCAweDcxMDksIDB4MEIxMywgMHg3MTBBLCAweDBCMTQsIDB4NzEwQiwgMHgxRjdELAorICAgIDB4NzEwQywgMHgxRjcxLCAweDcxMEQsIDB4MUY2RCwgMHg3MTBFLCAweDFGN0YsIDB4NzExMCwgMHgxRjc1LAorICAgIDB4NzExMywgMHgxRjc5LCAweDcxMTcsIDB4MUY2RiwgMHg3MTE5LCAweDBDQzgsIDB4NzExQSwgMHgwQ0M5LAorICAgIDB4NzExQiwgMHgyMUZDLCAweDcxMUMsIDB4MENDRiwgMHg3MTFFLCAweDIxRjAsIDB4NzExRiwgMHgyMUY5LAorICAgIDB4NzEyMCwgMHgyMUVGLCAweDcxMjEsIDB4MENDQywgMHg3MTIyLCAweDIxRjcsIDB4NzEyMywgMHgyMUY1LAorICAgIDB4NzEyNSwgMHgyMUY2LCAweDcxMjYsIDB4MENDQSwgMHg3MTI4LCAweDIxRkEsIDB4NzEyRSwgMHgyMUYzLAorICAgIDB4NzEyRiwgMHgyMUYxLCAweDcxMzAsIDB4MENDQiwgMHg3MTMxLCAweDIxRjQsIDB4NzEzMiwgMHgyMUY4LAorICAgIDB4NzEzNiwgMHgwQ0NELCAweDcxM0EsIDB4MjFGQiwgMHg3MTQxLCAweDI0N0IsIDB4NzE0MiwgMHgyNDgyLAorICAgIDB4NzE0MywgMHgyNDg0LCAweDcxNDQsIDB4MjQ4QSwgMHg3MTQ2LCAweDBFNzIsIDB4NzE0NywgMHgyNDc2LAorICAgIDB4NzE0OSwgMHgwRTZBLCAweDcxNEIsIDB4MjQ4NSwgMHg3MTRDLCAweDBFNkYsIDB4NzE0RCwgMHgyNDhCLAorICAgIDB4NzE0RSwgMHgwRTY2LCAweDcxNTAsIDB4MjQ4OCwgMHg3MTUyLCAweDI0NzgsIDB4NzE1MywgMHgyNDg5LAorICAgIDB4NzE1NCwgMHgyNDc3LCAweDcxNTYsIDB4MEU3NCwgMHg3MTU4LCAweDI0ODMsIDB4NzE1OSwgMHgwRTY3LAorICAgIDB4NzE1QSwgMHgyNDhDLCAweDcxNUMsIDB4MEU2QywgMHg3MTVELCAweDI0N0MsIDB4NzE1RSwgMHgwRTcxLAorICAgIDB4NzE1RiwgMHgyNDg3LCAweDcxNjAsIDB4MjQ3QSwgMHg3MTYxLCAweDI0ODEsIDB4NzE2MiwgMHgyNDdELAorICAgIDB4NzE2MywgMHgyNDc5LCAweDcxNjQsIDB4MEU2OSwgMHg3MTY1LCAweDBFNzAsIDB4NzE2NiwgMHgwRTZFLAorICAgIDB4NzE2NywgMHgwRTZCLCAweDcxNjgsIDB4MEU3MywgMHg3MTY5LCAweDBFNjgsIDB4NzE2QSwgMHgyNDgwLAorICAgIDB4NzE2QywgMHgwRTZELCAweDcxNkUsIDB4MENDRSwgMHg3MTcwLCAweDI0ODYsIDB4NzE3MiwgMHgyNDdFLAorICAgIDB4NzE3OCwgMHgyNDdGLCAweDcxN0IsIDB4MjcxRSwgMHg3MTdELCAweDEwMjMsIDB4NzE4MCwgMHgyNzFBLAorICAgIDB4NzE4MSwgMHgyNzIwLCAweDcxODIsIDB4MjcxQywgMHg3MTg0LCAweDEwMjUsIDB4NzE4NSwgMHgyNzFCLAorICAgIDB4NzE4NiwgMHgyNzFGLCAweDcxODcsIDB4MjcxNywgMHg3MTg5LCAweDI3MTksIDB4NzE4QSwgMHgxMDI0LAorICAgIDB4NzE4RiwgMHgyNzFELCAweDcxOTAsIDB4MjcxOCwgMHg3MTkyLCAweDEwMjYsIDB4NzE5NCwgMHgxMDIxLAorICAgIDB4NzE5NywgMHgyNzIxLCAweDcxOTksIDB4MTAyMiwgMHg3MTlBLCAweDI5NUEsIDB4NzE5QiwgMHgyOTU3LAorICAgIDB4NzE5QywgMHgyOTYzLCAweDcxOUQsIDB4Mjk1RCwgMHg3MTlFLCAweDI5NUYsIDB4NzE5RiwgMHgxMTlFLAorICAgIDB4NzFBMCwgMHgyOTU5LCAweDcxQTEsIDB4Mjk2MSwgMHg3MUE0LCAweDI5NjAsIDB4NzFBNSwgMHgyOTVFLAorICAgIDB4NzFBNywgMHgyOTY0LCAweDcxQTgsIDB4MTFBMSwgMHg3MUE5LCAweDI5NUIsIDB4NzFBQSwgMHgyOTYyLAorICAgIDB4NzFBQywgMHgxMTlGLCAweDcxQUYsIDB4Mjk1NiwgMHg3MUIwLCAweDI5NTgsIDB4NzFCMSwgMHgxMUEwLAorICAgIDB4NzFCMiwgMHgyOTU1LCAweDcxQjMsIDB4Mjk2NSwgMHg3MUI1LCAweDI5NUMsIDB4NzFCOCwgMHgyQkIzLAorICAgIDB4NzFCOSwgMHgxMkYzLCAweDcxQkMsIDB4MkJCRSwgMHg3MUJELCAweDJCQkMsIDB4NzFCRSwgMHgxMkVELAorICAgIDB4NzFCRiwgMHgyQkIyLCAweDcxQzAsIDB4MkJCNSwgMHg3MUMxLCAweDJCQjYsIDB4NzFDMiwgMHgyQkIxLAorICAgIDB4NzFDMywgMHgxMkY3LCAweDcxQzQsIDB4MTJGOCwgMHg3MUM1LCAweDJCQjAsIDB4NzFDNiwgMHgyQkJGLAorICAgIDB4NzFDNywgMHgyQkJBLCAweDcxQzgsIDB4MTJGMSwgMHg3MUM5LCAweDEyRUUsIDB4NzFDQSwgMHgyQkI5LAorICAgIDB4NzFDQiwgMHgyQkI3LCAweDcxQ0UsIDB4MTJGNCwgMHg3MUNGLCAweDJCQkIsIDB4NzFEMCwgMHgxMkVGLAorICAgIDB4NzFEMiwgMHgxMkYwLCAweDcxRDQsIDB4MkJCOCwgMHg3MUQ1LCAweDEyRjIsIDB4NzFENiwgMHgyQkI0LAorICAgIDB4NzFEOCwgMHgyQkJELCAweDcxRDksIDB4MTJGNSwgMHg3MURBLCAweDJCQzAsIDB4NzFEQiwgMHgyQkMxLAorICAgIDB4NzFEQywgMHgxMkY2LCAweDcxREYsIDB4MTQwNCwgMHg3MUUwLCAweDE0MEIsIDB4NzFFMSwgMHgyRDlCLAorICAgIDB4NzFFMiwgMHgyREExLCAweDcxRTQsIDB4MkQ5RiwgMHg3MUU1LCAweDE0MDcsIDB4NzFFNiwgMHgxNDA2LAorICAgIDB4NzFFNywgMHgxNDAzLCAweDcxRTgsIDB4MkQ5RCwgMHg3MUVDLCAweDE0MDksIDB4NzFFRCwgMHgxNDA4LAorICAgIDB4NzFFRSwgMHgxNDA1LCAweDcxRjAsIDB4MkRBMCwgMHg3MUYxLCAweDJEOUMsIDB4NzFGMiwgMHgyRDlFLAorICAgIDB4NzFGNCwgMHgxNDBBLCAweDcxRjgsIDB4MTRGMSwgMHg3MUY5LCAweDJGNTIsIDB4NzFGQiwgMHgxNEVFLAorICAgIDB4NzFGQywgMHgxNEVGLCAweDcxRkQsIDB4MkY1NCwgMHg3MUZFLCAweDE0RjAsIDB4NzFGRiwgMHgyRjUxLAorICAgIDB4NzIwMSwgMHgyRjUwLCAweDcyMDIsIDB4MzBCOSwgMHg3MjAzLCAweDJGNTMsIDB4NzIwNSwgMHgzMEJBLAorICAgIDB4NzIwNiwgMHgxNTkxLCAweDcyMDcsIDB4MzBCOCwgMHg3MjBBLCAweDMwQjcsIDB4NzIwQywgMHgzMEI2LAorICAgIDB4NzIwRCwgMHgxNTkyLCAweDcyMTAsIDB4MTYxRiwgMHg3MjEzLCAweDMxRjQsIDB4NzIxNCwgMHgzMUY1LAorICAgIDB4NzIxOSwgMHgzMkUxLCAweDcyMUEsIDB4MzJFMCwgMHg3MjFCLCAweDE2N0IsIDB4NzIxRCwgMHgzMkRGLAorICAgIDB4NzIxRSwgMHgzMzhELCAweDcyMUYsIDB4MzM4RSwgMHg3MjIyLCAweDM0MjQsIDB4NzIyMywgMHgzNDhDLAorICAgIDB4NzIyNiwgMHgzNEQxLCAweDcyMjcsIDB4MzUzNSwgMHg3MjI4LCAweDE3NjYsIDB4NzIyOSwgMHgzNTQ5LAorICAgIDB4NzIyQSwgMHgwMkU3LCAweDcyMkMsIDB4MDY0NSwgMHg3MjJELCAweDA2NDYsIDB4NzIzMCwgMHgwNzkxLAorICAgIDB4NzIzNSwgMHgxNDBDLCAweDcyMzYsIDB4MDJFOCwgMHg3MjM4LCAweDA2NDcsIDB4NzIzOSwgMHgwOTIzLAorICAgIDB4NzIzQSwgMHgwRTc1LCAweDcyM0IsIDB4MDJFOSwgMHg3MjNELCAweDBCMTcsIDB4NzIzRSwgMHgxMDI3LAorICAgIDB4NzIzRiwgMHgxNzhELCAweDcyNDEsIDB4MUI2RSwgMHg3MjQyLCAweDFEMkQsIDB4NzI0NCwgMHgyNzIyLAorICAgIDB4NzI0NiwgMHgxNDBELCAweDcyNDcsIDB4MDJFQSwgMHg3MjQ4LCAweDA2NDgsIDB4NzI0OSwgMHgxQjZGLAorICAgIDB4NzI0QSwgMHgxQjcwLCAweDcyNEIsIDB4MjFGRCwgMHg3MjRDLCAweDBDRDAsIDB4NzI0RiwgMHgyNDhELAorICAgIDB4NzI1MiwgMHgwRTc2LCAweDcyNTMsIDB4MjcyMywgMHg3MjU2LCAweDExQTIsIDB4NzI1OCwgMHgxNTkzLAorICAgIDB4NzI1OSwgMHgwMkVCLCAweDcyNUEsIDB4MjFGRSwgMHg3MjVCLCAweDAyRUMsIDB4NzI1RCwgMHgwM0Y0LAorICAgIDB4NzI1RSwgMHgxODBCLCAweDcyNUYsIDB4MDNGMywgMHg3MjYwLCAweDA0RUMsIDB4NzI2MSwgMHgwNEVCLAorICAgIDB4NzI2MiwgMHgwNEVBLCAweDcyNjMsIDB4MThDNSwgMHg3MjY3LCAweDA2NDksIDB4NzI2OSwgMHgwNjRBLAorICAgIDB4NzI2QSwgMHgxOUZBLCAweDcyNkMsIDB4MUI3MSwgMHg3MjZFLCAweDFCNzQsIDB4NzI2RiwgMHgwNzkzLAorICAgIDB4NzI3MCwgMHgxQjcyLCAweDcyNzIsIDB4MDc5MiwgMHg3MjczLCAweDFCNzMsIDB4NzI3NCwgMHgwNzk0LAorICAgIDB4NzI3NiwgMHgxRDMwLCAweDcyNzcsIDB4MUQyRiwgMHg3Mjc4LCAweDFEMkUsIDB4NzI3OSwgMHgwOTI0LAorICAgIDB4NzI3QiwgMHgxRjgxLCAweDcyN0MsIDB4MUY4MiwgMHg3MjdELCAweDBCMTgsIDB4NzI3RSwgMHgxRjgwLAorICAgIDB4NzI3RiwgMHgxRjgzLCAweDcyODAsIDB4MENEMiwgMHg3MjgxLCAweDBCMTksIDB4NzI4NCwgMHgwQ0QxLAorICAgIDB4NzI4NSwgMHgyMjAyLCAweDcyODYsIDB4MjIwMSwgMHg3Mjg4LCAweDIxRkYsIDB4NzI4OSwgMHgyMjAwLAorICAgIDB4NzI4QiwgMHgyMjAzLCAweDcyOEMsIDB4MjQ4RiwgMHg3MjhELCAweDI0OEUsIDB4NzI4RSwgMHgyNDkyLAorICAgIDB4NzI5MCwgMHgyNDkxLCAweDcyOTEsIDB4MjQ5MCwgMHg3MjkyLCAweDEwMjgsIDB4NzI5MywgMHgyNzI2LAorICAgIDB4NzI5NSwgMHgyNzI1LCAweDcyOTYsIDB4MTAyOSwgMHg3Mjk3LCAweDI3MjQsIDB4NzI5OCwgMHgyOTY2LAorICAgIDB4NzI5QSwgMHgyOTY3LCAweDcyOUIsIDB4MTFBMywgMHg3MjlELCAweDJCQzIsIDB4NzI5RSwgMHgyQkMzLAorICAgIDB4NzJBMSwgMHgzMEJGLCAweDcyQTIsIDB4MTU5NCwgMHg3MkEzLCAweDMwQkUsIDB4NzJBNCwgMHgzMEJELAorICAgIDB4NzJBNSwgMHgzMEJCLCAweDcyQTYsIDB4MzBCQywgMHg3MkE3LCAweDE2N0MsIDB4NzJBOCwgMHgzMUY2LAorICAgIDB4NzJBOSwgMHgzMzhGLCAweDcyQUEsIDB4MzREMiwgMHg3MkFDLCAweDAyRUQsIDB4NzJBRSwgMHgxN0FGLAorICAgIDB4NzJBRiwgMHgwMzU1LCAweDcyQjAsIDB4MTdCMCwgMHg3MkI0LCAweDE4MEMsIDB4NzJCNSwgMHgxODBELAorICAgIDB4NzJCQSwgMHgxOENCLCAweDcyQkQsIDB4MThDNywgMHg3MkJGLCAweDE4QzYsIDB4NzJDMCwgMHgwNjRCLAorICAgIDB4NzJDMSwgMHgxOENBLCAweDcyQzIsIDB4MDRFRSwgMHg3MkMzLCAweDE4QzgsIDB4NzJDNCwgMHgwNEVELAorICAgIDB4NzJDNSwgMHgxOENDLCAweDcyQzYsIDB4MThDOSwgMHg3MkM5LCAweDE5RkUsIDB4NzJDQSwgMHgxQjc1LAorICAgIDB4NzJDQiwgMHgxOUZDLCAweDcyQ0MsIDB4MUEwMywgMHg3MkNFLCAweDA2NEMsIDB4NzJEMCwgMHgwNjRGLAorICAgIDB4NzJEMSwgMHgxQTA0LCAweDcyRDIsIDB4MUEwMCwgMHg3MkQ0LCAweDFBMDEsIDB4NzJENiwgMHgxOUZCLAorICAgIDB4NzJENywgMHgwNjRFLCAweDcyRDgsIDB4MTlGRCwgMHg3MkQ5LCAweDA2NEQsIDB4NzJEQSwgMHgxQTAyLAorICAgIDB4NzJEQywgMHgxOUZGLCAweDcyREYsIDB4MUI3OSwgMHg3MkUwLCAweDA3OTYsIDB4NzJFMSwgMHgwNzk3LAorICAgIDB4NzJFMywgMHgxQjdDLCAweDcyRTQsIDB4MUI3NiwgMHg3MkU2LCAweDFCN0IsIDB4NzJFOCwgMHgxQjc3LAorICAgIDB4NzJFOSwgMHgwNzk1LCAweDcyRUEsIDB4MUI3QSwgMHg3MkVCLCAweDFCNzgsIDB4NzJGMywgMHgxRDM2LAorICAgIDB4NzJGNCwgMHgxRDMzLCAweDcyRjYsIDB4MUQzNSwgMHg3MkY3LCAweDA5MjksIDB4NzJGOCwgMHgwOTI4LAorICAgIDB4NzJGOSwgMHgwOTI2LCAweDcyRkEsIDB4MUQzMiwgMHg3MkZCLCAweDFEMzcsIDB4NzJGQywgMHgwOTI1LAorICAgIDB4NzJGRCwgMHgwOTI3LCAweDcyRkUsIDB4MUQzNCwgMHg3MkZGLCAweDFGOEIsIDB4NzMwMCwgMHgxRDMxLAorICAgIDB4NzMwMSwgMHgxRDM4LCAweDczMDcsIDB4MUY4NiwgMHg3MzA4LCAweDFGOEEsIDB4NzMwQSwgMHgxRjg5LAorICAgIDB4NzMwQiwgMHgyMjA1LCAweDczMEMsIDB4MjIxMCwgMHg3MzBGLCAweDFGOEMsIDB4NzMxMSwgMHgxRjg3LAorICAgIDB4NzMxMiwgMHgyMjA0LCAweDczMTMsIDB4MEIxRCwgMHg3MzE2LCAweDBCMUMsIDB4NzMxNywgMHgxRjg1LAorICAgIDB4NzMxOCwgMHgxRjg4LCAweDczMTksIDB4MEIxRSwgMHg3MzFCLCAweDBCMUIsIDB4NzMxQywgMHgwQjFBLAorICAgIDB4NzMxRCwgMHgxRjg0LCAweDczMUUsIDB4MUY4RCwgMHg3MzIyLCAweDIyMDcsIDB4NzMyMywgMHgyMjBFLAorICAgIDB4NzMyNSwgMHgwQ0Q0LCAweDczMjYsIDB4MjIwRCwgMHg3MzI3LCAweDIyMEEsIDB4NzMyOSwgMHgwQ0Q2LAorICAgIDB4NzMyRCwgMHgyMjBDLCAweDczMzAsIDB4MjIwNiwgMHg3MzMxLCAweDIyMDgsIDB4NzMzMiwgMHgyMjBCLAorICAgIDB4NzMzMywgMHgyMjA5LCAweDczMzQsIDB4MENENSwgMHg3MzM1LCAweDIyMEYsIDB4NzMzNiwgMHgwQ0QzLAorICAgIDB4NzMzNywgMHgwRTc3LCAweDczM0EsIDB4MjQ5NiwgMHg3MzNCLCAweDI0OTUsIDB4NzMzQywgMHgyNDkzLAorICAgIDB4NzMzRSwgMHgwRTdBLCAweDczM0YsIDB4MEU3OSwgMHg3MzQwLCAweDI0OTcsIDB4NzM0MiwgMHgyNDk0LAorICAgIDB4NzM0MywgMHgyNzI3LCAweDczNDQsIDB4MTAyQSwgMHg3MzQ1LCAweDBFNzgsIDB4NzM0OSwgMHgyNDk5LAorICAgIDB4NzM0QSwgMHgyNDk4LCAweDczNEMsIDB4MjcyQSwgMHg3MzRELCAweDI3MjgsIDB4NzM0RSwgMHgxMUE0LAorICAgIDB4NzM1MCwgMHgxMDJCLCAweDczNTEsIDB4MjcyOSwgMHg3MzUyLCAweDI5NjksIDB4NzM1NywgMHgxMUE1LAorICAgIDB4NzM1OCwgMHgyOTY4LCAweDczNTksIDB4Mjk3MSwgMHg3MzVBLCAweDI5NzAsIDB4NzM1QiwgMHgyOTZFLAorICAgIDB4NzM1RCwgMHgyOTZELCAweDczNUUsIDB4Mjk2QSwgMHg3MzVGLCAweDI5NkIsIDB4NzM2MCwgMHgyOTZDLAorICAgIDB4NzM2MSwgMHgyOTZGLCAweDczNjIsIDB4Mjk3MiwgMHg3MzY1LCAweDJCQzgsIDB4NzM2NiwgMHgyQkM1LAorICAgIDB4NzM2NywgMHgyQkM2LCAweDczNjgsIDB4MTJGOSwgMHg3MzY5LCAweDJCQzQsIDB4NzM2QSwgMHgyQkNBLAorICAgIDB4NzM2QiwgMHgyQkM5LCAweDczNkMsIDB4MkJDNywgMHg3MzZFLCAweDJEQTMsIDB4NzM2RiwgMHgyREE0LAorICAgIDB4NzM3MCwgMHgxNDBFLCAweDczNzIsIDB4MTQwRiwgMHg3MzczLCAweDJEQTIsIDB4NzM3NSwgMHgxNEYzLAorICAgIDB4NzM3NiwgMHgyRjU1LCAweDczNzcsIDB4MTRGMiwgMHg3Mzc4LCAweDE1OTUsIDB4NzM3QSwgMHgxNTk2LAorICAgIDB4NzM3QiwgMHgxNjIwLCAweDczN0MsIDB4MzFGOCwgMHg3MzdELCAweDMxRjcsIDB4NzM3RSwgMHgzMkUyLAorICAgIDB4NzM3RiwgMHgzMzkwLCAweDczODAsIDB4MTZDQSwgMHg3MzgxLCAweDM0MjYsIDB4NzM4MiwgMHgzNDI1LAorICAgIDB4NzM4MywgMHgzNDI3LCAweDczODQsIDB4MDM1NiwgMHg3Mzg1LCAweDFCN0QsIDB4NzM4NiwgMHgwOTJBLAorICAgIDB4NzM4NywgMHgwQjFGLCAweDczODgsIDB4MUY4RSwgMHg3Mzg5LCAweDAzNTcsIDB4NzM4QSwgMHgxN0IxLAorICAgIDB4NzM4QiwgMHgwMkVFLCAweDczOEUsIDB4MTgwRSwgMHg3MzkyLCAweDE4RDEsIDB4NzM5MywgMHgxOENGLAorICAgIDB4NzM5NCwgMHgxOEQwLCAweDczOTUsIDB4MThDRCwgMHg3Mzk2LCAweDA0RUYsIDB4NzM5NywgMHgxOENFLAorICAgIDB4NzM5RCwgMHgxQTBDLCAweDczOUYsIDB4MDY1MiwgMHg3M0EwLCAweDFBMEEsIDB4NzNBMSwgMHgxQTA2LAorICAgIDB4NzNBMiwgMHgxQTA5LCAweDczQTQsIDB4MUEwNSwgMHg3M0E1LCAweDA2NTQsIDB4NzNBNiwgMHgxQTA4LAorICAgIDB4NzNBOCwgMHgwNjUxLCAweDczQTksIDB4MDY1MCwgMHg3M0FCLCAweDA2NTMsIDB4NzNBQywgMHgxQTBCLAorICAgIDB4NzNBRCwgMHgxQTA3LCAweDczQjIsIDB4MDc5QiwgMHg3M0IzLCAweDA3OUUsIDB4NzNCNCwgMHgxQjg1LAorICAgIDB4NzNCNSwgMHgxQjg0LCAweDczQjYsIDB4MUI4MywgMHg3M0I3LCAweDA3OTgsIDB4NzNCOCwgMHgxQjhDLAorICAgIDB4NzNCOSwgMHgxQjgyLCAweDczQkIsIDB4MDc5QSwgMHg3M0JDLCAweDFEM0QsIDB4NzNCRSwgMHgxQjg5LAorICAgIDB4NzNCRiwgMHgxQjg3LCAweDczQzAsIDB4MDc5RCwgMHg3M0MyLCAweDFCN0YsIDB4NzNDMywgMHgxQjhBLAorICAgIDB4NzNDNSwgMHgxQjgxLCAweDczQzYsIDB4MUI4QiwgMHg3M0M3LCAweDFCODgsIDB4NzNDOCwgMHgxQjgwLAorICAgIDB4NzNDQSwgMHgwNzk5LCAweDczQ0IsIDB4MUI4RCwgMHg3M0NDLCAweDFCN0UsIDB4NzNDRCwgMHgwNzlDLAorICAgIDB4NzNEMiwgMHgxRDQyLCAweDczRDMsIDB4MUQzOSwgMHg3M0Q0LCAweDFENDQsIDB4NzNENiwgMHgxRDNDLAorICAgIDB4NzNENywgMHgxRDQ3LCAweDczRDgsIDB4MUQ0OCwgMHg3M0Q5LCAweDFEM0EsIDB4NzNEQSwgMHgxRDQ2LAorICAgIDB4NzNEQiwgMHgxRDQzLCAweDczREMsIDB4MUQ0MSwgMHg3M0RELCAweDFENDUsIDB4NzNERSwgMHgwOTMwLAorICAgIDB4NzNFMCwgMHgwOTJFLCAweDczRTMsIDB4MUQzRiwgMHg3M0U1LCAweDFEM0IsIDB4NzNFNywgMHgxRDNFLAorICAgIDB4NzNFOCwgMHgxRDQ5LCAweDczRTksIDB4MUQ0MCwgMHg3M0VBLCAweDA5MkYsIDB4NzNFQiwgMHgxQjg2LAorICAgIDB4NzNFRCwgMHgwOTJCLCAweDczRUUsIDB4MDkyRCwgMHg3M0Y0LCAweDFGOUMsIDB4NzNGNSwgMHgxRjkxLAorICAgIDB4NzNGNiwgMHgxRjhGLCAweDczRjgsIDB4MUY5MCwgMHg3M0ZBLCAweDFGOTcsIDB4NzNGQywgMHgxRjk4LAorICAgIDB4NzNGRCwgMHgxRjk0LCAweDczRkUsIDB4MEIyNCwgMHg3M0ZGLCAweDFGOTksIDB4NzQwMCwgMHgxRjk2LAorICAgIDB4NzQwMSwgMHgxRjkzLCAweDc0MDMsIDB4MEIyMiwgMHg3NDA0LCAweDFGOTIsIDB4NzQwNSwgMHgwQjIwLAorICAgIDB4NzQwNiwgMHgwQjIzLCAweDc0MDcsIDB4MUY5NSwgMHg3NDA4LCAweDFGOUQsIDB4NzQwOSwgMHgwOTJDLAorICAgIDB4NzQwQSwgMHgwQjIxLCAweDc0MEIsIDB4MUY5QiwgMHg3NDBDLCAweDFGOUEsIDB4NzQwRCwgMHgwQjI1LAorICAgIDB4NzQxNiwgMHgyMjE1LCAweDc0MUEsIDB4MjIxNiwgMHg3NDFCLCAweDBDRTAsIDB4NzQxRCwgMHgyMjFDLAorICAgIDB4NzQyMCwgMHgyMjFFLCAweDc0MjEsIDB4MjIxNywgMHg3NDIyLCAweDBDREEsIDB4NzQyMywgMHgyMjFCLAorICAgIDB4NzQyNCwgMHgyMjFBLCAweDc0MjUsIDB4MENEQiwgMHg3NDI2LCAweDBDRTEsIDB4NzQyOCwgMHgwQ0UyLAorICAgIDB4NzQyOSwgMHgyMjFELCAweDc0MkEsIDB4MENEOCwgMHg3NDJCLCAweDIyMTQsIDB4NzQyQywgMHgyMjEyLAorICAgIDB4NzQyRCwgMHgyMjE4LCAweDc0MkUsIDB4MjIxMSwgMHg3NDJGLCAweDBDREYsIDB4NzQzMCwgMHgyMjEzLAorICAgIDB4NzQzMSwgMHgyMjE5LCAweDc0MzIsIDB4MjIxRiwgMHg3NDMzLCAweDBDRDksIDB4NzQzNCwgMHgwQ0RFLAorICAgIDB4NzQzNSwgMHgwQ0RDLCAweDc0MzYsIDB4MENERCwgMHg3NDNBLCAweDBDRDcsIDB4NzQzRiwgMHgwRTgxLAorICAgIDB4NzQ0MCwgMHgyNEEwLCAweDc0NDEsIDB4MEU4MCwgMHg3NDQyLCAweDI0QTQsIDB4NzQ0NCwgMHgyNDlBLAorICAgIDB4NzQ0NiwgMHgyNEE1LCAweDc0NEEsIDB4MjQ5QiwgMHg3NDRCLCAweDI0OUMsIDB4NzQ0RCwgMHgyNEE2LAorICAgIDB4NzQ0RSwgMHgyNEEzLCAweDc0NEYsIDB4MjRBMSwgMHg3NDUwLCAweDI0QTIsIDB4NzQ1MSwgMHgyNDlFLAorICAgIDB4NzQ1MiwgMHgyNDlELCAweDc0NTQsIDB4MjRBNywgMHg3NDU1LCAweDBFN0QsIDB4NzQ1NywgMHgyNDlGLAorICAgIDB4NzQ1OSwgMHgwRTgyLCAweDc0NUEsIDB4MEU3QywgMHg3NDVCLCAweDBFODMsIDB4NzQ1QywgMHgwRTg0LAorICAgIDB4NzQ1RSwgMHgwRTdGLCAweDc0NUYsIDB4MEU3RSwgMHg3NDYyLCAweDI3MkIsIDB4NzQ2MywgMHgxMDJELAorICAgIDB4NzQ2NCwgMHgxMDJDLCAweDc0NjcsIDB4MjczMCwgMHg3NDY5LCAweDExQTYsIDB4NzQ2QSwgMHgxMDJFLAorICAgIDB4NzQ2RCwgMHgxMDMwLCAweDc0NkUsIDB4MjczMSwgMHg3NDZGLCAweDBFN0IsIDB4NzQ3MCwgMHgxMDJGLAorICAgIDB4NzQ3MSwgMHgyNzJELCAweDc0NzIsIDB4MjcyRiwgMHg3NDczLCAweDI3MkMsIDB4NzQ3NSwgMHgyNzJFLAorICAgIDB4NzQ3OSwgMHgyOTdDLCAweDc0N0MsIDB4Mjk3QiwgMHg3NDdELCAweDI5NzgsIDB4NzQ3RSwgMHgxMUE5LAorICAgIDB4NzQ3RiwgMHgyQkNCLCAweDc0ODAsIDB4MTFBQSwgMHg3NDgxLCAweDI5NzcsIDB4NzQ4MywgMHgxMUE4LAorICAgIDB4NzQ4NSwgMHgyOTc5LCAweDc0ODYsIDB4Mjk3NiwgMHg3NDg3LCAweDI5NzMsIDB4NzQ4OCwgMHgyOTdBLAorICAgIDB4NzQ4OSwgMHgyOTc0LCAweDc0OEEsIDB4Mjk3NSwgMHg3NDhCLCAweDExQTcsIDB4NzQ5MCwgMHgyREE4LAorICAgIDB4NzQ5MiwgMHgyQkNGLCAweDc0OTQsIDB4MkJDRSwgMHg3NDk1LCAweDJCRDAsIDB4NzQ5NywgMHgyREE1LAorICAgIDB4NzQ5OCwgMHgxMkZDLCAweDc0OUEsIDB4MkJDQywgMHg3NDlDLCAweDEyRkEsIDB4NzQ5RSwgMHgxMkZFLAorICAgIDB4NzQ5RiwgMHgxMkZELCAweDc0QTAsIDB4MkJDRCwgMHg3NEExLCAweDJCRDEsIDB4NzRBMywgMHgxMkZCLAorICAgIDB4NzRBNSwgMHgyREFDLCAweDc0QTYsIDB4MTQxMiwgMHg3NEE3LCAweDE0RjQsIDB4NzRBOCwgMHgxNDEzLAorICAgIDB4NzRBOSwgMHgxNDEwLCAweDc0QUEsIDB4MkRBOSwgMHg3NEFCLCAweDJEQTcsIDB4NzRBRCwgMHgyREFBLAorICAgIDB4NzRBRiwgMHgyREFELCAweDc0QjAsIDB4MTQxMSwgMHg3NEIxLCAweDJEQUIsIDB4NzRCMiwgMHgyREE2LAorICAgIDB4NzRCNSwgMHgyRjU4LCAweDc0QjYsIDB4MkY1QiwgMHg3NEI3LCAweDMwQzIsIDB4NzRCOCwgMHgyRjU2LAorICAgIDB4NzRCQSwgMHgzMUY5LCAweDc0QkIsIDB4MkY1QywgMHg3NEJELCAweDE1OTcsIDB4NzRCRSwgMHgyRjVBLAorICAgIDB4NzRCRiwgMHgxNEY1LCAweDc0QzAsIDB4MkY1NywgMHg3NEMxLCAweDJGNTksIDB4NzRDMiwgMHgyRjVELAorICAgIDB4NzRDMywgMHgzMEMzLCAweDc0QzUsIDB4MzBDMSwgMHg3NENBLCAweDE1OTgsIDB4NzRDQiwgMHgzMEMwLAorICAgIDB4NzRDRiwgMHgxNjIxLCAweDc0RDQsIDB4MTY3RSwgMHg3NEQ1LCAweDMzOTIsIDB4NzRENiwgMHgxNjdELAorICAgIDB4NzRENywgMHgzMzk0LCAweDc0RDgsIDB4MzM5MSwgMHg3NEQ5LCAweDMzOTMsIDB4NzREQSwgMHgxNkZFLAorICAgIDB4NzREQiwgMHgzNDhELCAweDc0REMsIDB4MDM1OCwgMHg3NERELCAweDFBMEQsIDB4NzRERSwgMHgxRDRBLAorICAgIDB4NzRERiwgMHgxRDRCLCAweDc0RTAsIDB4MEIyNiwgMHg3NEUxLCAweDI0QTgsIDB4NzRFMiwgMHgxMkZGLAorICAgIDB4NzRFMywgMHgxNTk5LCAweDc0RTQsIDB4MTZDQiwgMHg3NEU1LCAweDM0OEUsIDB4NzRFNiwgMHgwMzU5LAorICAgIDB4NzRFOCwgMHgxQTBFLCAweDc0RTksIDB4MDEyMCwgMHg3NEVDLCAweDFCOEUsIDB4NzRFRSwgMHgxQjhGLAorICAgIDB4NzRGNCwgMHgxRDRDLCAweDc0RjUsIDB4MUQ0RCwgMHg3NEY2LCAweDBCMjcsIDB4NzRGNywgMHgwQjI4LAorICAgIDB4NzRGQiwgMHgyMjIwLCAweDc0RkQsIDB4MjRBQiwgMHg3NEZFLCAweDI0QUEsIDB4NzRGRiwgMHgyNEE5LAorICAgIDB4NzUwMCwgMHgyNzMyLCAweDc1MDIsIDB4MjczMywgMHg3NTAzLCAweDI3MzQsIDB4NzUwNCwgMHgxMDMxLAorICAgIDB4NzUwNywgMHgyOTdFLCAweDc1MDgsIDB4Mjk3RCwgMHg3NTBCLCAweDJCRDIsIDB4NzUwQywgMHgxMzAwLAorICAgIDB4NzUwRCwgMHgxMzAxLCAweDc1MEYsIDB4MkRCMSwgMHg3NTEwLCAweDJEQUUsIDB4NzUxMSwgMHgyREFGLAorICAgIDB4NzUxMiwgMHgyREIwLCAweDc1MTMsIDB4MkY1RiwgMHg3NTE0LCAweDJGNUUsIDB4NzUxNSwgMHgxNEY2LAorICAgIDB4NzUxNiwgMHgzMEM0LCAweDc1MTcsIDB4MzJFMywgMHg3NTE4LCAweDAzNUEsIDB4NzUxQSwgMHgwNzlGLAorICAgIDB4NzUxQywgMHgwQjI5LCAweDc1MUQsIDB4MjRBQywgMHg3NTFGLCAweDAzNUIsIDB4NzUyMSwgMHgxRDRFLAorICAgIDB4NzUyMiwgMHgwQjJBLCAweDc1MjUsIDB4MENFMywgMHg3NTI2LCAweDBDRTQsIDB4NzUyOCwgMHgwMzVDLAorICAgIDB4NzUyOSwgMHgwMzVELCAweDc1MkEsIDB4MTgwRiwgMHg3NTJCLCAweDA0RjEsIDB4NzUyQywgMHgwNEYwLAorICAgIDB4NzUyRCwgMHgwN0EwLCAweDc1MkUsIDB4MUI5MCwgMHg3NTJGLCAweDIyMjEsIDB4NzUzMCwgMHgwMzVFLAorICAgIDB4NzUzMSwgMHgwMzVGLCAweDc1MzIsIDB4MDM2MCwgMHg3NTMzLCAweDAzNjEsIDB4NzUzNywgMHgwNEYyLAorICAgIDB4NzUzOCwgMHgwNEYzLCAweDc1MzksIDB4MThEMywgMHg3NTNBLCAweDE4RDIsIDB4NzUzRCwgMHgwNjU1LAorICAgIDB4NzUzRSwgMHgxQTExLCAweDc1M0YsIDB4MUEwRiwgMHg3NTQwLCAweDFBMTAsIDB4NzU0NywgMHgxQjkxLAorICAgIDB4NzU0OCwgMHgxQjkyLCAweDc1NEIsIDB4MDdBNCwgMHg3NTRDLCAweDA3QTIsIDB4NzU0RSwgMHgwN0EzLAorICAgIDB4NzU0RiwgMHgwN0ExLCAweDc1NTQsIDB4MDkzMSwgMHg3NTU5LCAweDA5MzUsIDB4NzU1QSwgMHgwOTM0LAorICAgIDB4NzU1QiwgMHgxRDRGLCAweDc1NUMsIDB4MDkzMywgMHg3NTVELCAweDA5MzIsIDB4NzU1RiwgMHgxRDUwLAorICAgIDB4NzU2MiwgMHgwQjJELCAweDc1NjMsIDB4MUY5RiwgMHg3NTY0LCAweDFGOUUsIDB4NzU2NSwgMHgwQjJCLAorICAgIDB4NzU2NiwgMHgwQjJDLCAweDc1NkEsIDB4MENFNiwgMHg3NTZCLCAweDBDRTUsIDB4NzU2QywgMHgyMjIzLAorICAgIDB4NzU2RiwgMHgyMjIyLCAweDc1NzAsIDB4MEIyRSwgMHg3NTc2LCAweDBFODUsIDB4NzU3NywgMHgyNEFFLAorICAgIDB4NzU3OCwgMHgwRTg2LCAweDc1NzksIDB4MjRBRCwgMHg3NTdELCAweDI3MzUsIDB4NzU3RSwgMHgyOTdGLAorICAgIDB4NzU3RiwgMHgxMUFCLCAweDc1ODAsIDB4MkJEMywgMHg3NTg0LCAweDJEQjIsIDB4NzU4NiwgMHgxNTlCLAorICAgIDB4NzU4NywgMHgxNTlBLCAweDc1OEEsIDB4MTZDQywgMHg3NThCLCAweDAzNjIsIDB4NzU4QywgMHgxQTEyLAorICAgIDB4NzU4RiwgMHgwQjJGLCAweDc1OTAsIDB4MjczNiwgMHg3NTkxLCAweDEwMzIsIDB4NzU5MiwgMHgwMjJFLAorICAgIDB4NzU5NCwgMHgxOEQ0LCAweDc1OTUsIDB4MThENSwgMHg3NTk4LCAweDFBMTMsIDB4NzU5OSwgMHgwNjU3LAorICAgIDB4NzU5QSwgMHgwNjU4LCAweDc1OUQsIDB4MDY1NiwgMHg3NUEyLCAweDA3QTgsIDB4NzVBMywgMHgwN0E5LAorICAgIDB4NzVBNCwgMHgwN0E2LCAweDc1QTUsIDB4MDdBNywgMHg3NUE3LCAweDFCOTMsIDB4NzVBQSwgMHgxQjk0LAorICAgIDB4NzVBQiwgMHgwN0E1LCAweDc1QjAsIDB4MUQ1MSwgMHg3NUIyLCAweDA5MzksIDB4NzVCMywgMHgwOTNBLAorICAgIDB4NzVCNSwgMHgwQjMyLCAweDc1QjYsIDB4MUQ1NywgMHg3NUI4LCAweDA5M0YsIDB4NzVCOSwgMHgwOTNELAorICAgIDB4NzVCQSwgMHgxRDU4LCAweDc1QkIsIDB4MUQ1MywgMHg3NUJDLCAweDA5M0MsIDB4NzVCRCwgMHgwOTNCLAorICAgIDB4NzVCRSwgMHgwOTM2LCAweDc1QkYsIDB4MUQ1NiwgMHg3NUMwLCAweDFENTUsIDB4NzVDMSwgMHgxRDUyLAorICAgIDB4NzVDMiwgMHgwOTNFLCAweDc1QzQsIDB4MUQ1NCwgMHg3NUM1LCAweDA5MzcsIDB4NzVDNywgMHgwOTM4LAorICAgIDB4NzVDQSwgMHgwQjMzLCAweDc1Q0IsIDB4MUZBMywgMHg3NUNDLCAweDFGQTQsIDB4NzVDRCwgMHgwQjM0LAorICAgIDB4NzVDRSwgMHgxRkEwLCAweDc1Q0YsIDB4MUZBMiwgMHg3NUQwLCAweDFGQTYsIDB4NzVEMSwgMHgxRkE1LAorICAgIDB4NzVEMiwgMHgxRkExLCAweDc1RDQsIDB4MEIzMCwgMHg3NUQ1LCAweDBCMzEsIDB4NzVENywgMHgyMjJCLAorICAgIDB4NzVEOCwgMHgwQ0VCLCAweDc1RDksIDB4MENFQSwgMHg3NURBLCAweDIyMjUsIDB4NzVEQiwgMHgwQ0U4LAorICAgIDB4NzVERCwgMHgyMjI4LCAweDc1REUsIDB4MENFQywgMHg3NURGLCAweDIyMjksIDB4NzVFMCwgMHgwQ0VELAorICAgIDB4NzVFMSwgMHgyMjI2LCAweDc1RTIsIDB4MENFNywgMHg3NUUzLCAweDBDRTksIDB4NzVFNCwgMHgyMjJBLAorICAgIDB4NzVFNiwgMHgyMjI3LCAweDc1RTcsIDB4MjIyNCwgMHg3NUVELCAweDI0QkIsIDB4NzVFRiwgMHgyNEIwLAorICAgIDB4NzVGMCwgMHgwRTg4LCAweDc1RjEsIDB4MEU4QiwgMHg3NUYyLCAweDBFOEEsIDB4NzVGMywgMHgwRThGLAorICAgIDB4NzVGNCwgMHgwRThFLCAweDc1RjUsIDB4MjRCQywgMHg3NUY2LCAweDI0QkEsIDB4NzVGNywgMHgyNEIzLAorICAgIDB4NzVGOCwgMHgyNEI3LCAweDc1RjksIDB4MjRCNiwgMHg3NUZBLCAweDBFOEMsIDB4NzVGQiwgMHgyNEI5LAorICAgIDB4NzVGQywgMHgyNEI1LCAweDc1RkQsIDB4MjRCRCwgMHg3NUZFLCAweDI0QjQsIDB4NzVGRiwgMHgwRThELAorICAgIDB4NzYwMCwgMHgwRTg3LCAweDc2MDEsIDB4MEU4OSwgMHg3NjAzLCAweDI0QjIsIDB4NzYwOCwgMHgyNzM4LAorICAgIDB4NzYwOSwgMHgxMDM2LCAweDc2MEEsIDB4MjczQywgMHg3NjBCLCAweDEwMzUsIDB4NzYwQywgMHgyNzM5LAorICAgIDB4NzYwRCwgMHgxMDM0LCAweDc2MEYsIDB4MjRCMSwgMHg3NjEwLCAweDI0QjgsIDB4NzYxMSwgMHgyNzNCLAorICAgIDB4NzYxMywgMHgxMDM3LCAweDc2MTQsIDB4MjczRCwgMHg3NjE1LCAweDI3M0EsIDB4NzYxNiwgMHgyNzM3LAorICAgIDB4NzYxOSwgMHgyOTgyLCAweDc2MUEsIDB4Mjk4NiwgMHg3NjFCLCAweDI5ODgsIDB4NzYxQywgMHgyOTg0LAorICAgIDB4NzYxRCwgMHgyOTgzLCAweDc2MUUsIDB4Mjk4MSwgMHg3NjFGLCAweDExQUUsIDB4NzYyMCwgMHgxMUFDLAorICAgIDB4NzYyMSwgMHgxMUIxLCAweDc2MjIsIDB4MTFCMiwgMHg3NjIzLCAweDI5ODUsIDB4NzYyNCwgMHgxMUFGLAorICAgIDB4NzYyNSwgMHgyOTgwLCAweDc2MjYsIDB4MTFCMCwgMHg3NjI3LCAweDEwMzMsIDB4NzYyOCwgMHgyOTg3LAorICAgIDB4NzYyOSwgMHgxMUFELCAweDc2MkQsIDB4MkJENSwgMHg3NjJGLCAweDJCRDQsIDB4NzYzMCwgMHgyQkRDLAorICAgIDB4NzYzMSwgMHgyQkQ2LCAweDc2MzIsIDB4MkJEQiwgMHg3NjMzLCAweDJCRDgsIDB4NzYzNCwgMHgxMzAyLAorICAgIDB4NzYzNSwgMHgyQkRBLCAweDc2MzgsIDB4MTMwMywgMHg3NjNBLCAweDEzMDQsIDB4NzYzQywgMHgyQkQ5LAorICAgIDB4NzYzRCwgMHgyQkQ3LCAweDc2NDIsIDB4MTQxNSwgMHg3NjQzLCAweDJEQjMsIDB4NzY0NiwgMHgxNDE0LAorICAgIDB4NzY0NywgMHgyREI2LCAweDc2NDgsIDB4MkRCNCwgMHg3NjQ5LCAweDJEQjUsIDB4NzY0QywgMHgxNDE2LAorICAgIDB4NzY1MCwgMHgyRjYzLCAweDc2NTIsIDB4MTRGOSwgMHg3NjUzLCAweDJGNjQsIDB4NzY1NiwgMHgxNEY3LAorICAgIDB4NzY1NywgMHgyRjY1LCAweDc2NTgsIDB4MTRGOCwgMHg3NjU5LCAweDJGNjIsIDB4NzY1QSwgMHgyRjY2LAorICAgIDB4NzY1QywgMHgyRjYwLCAweDc2NUYsIDB4MTU5QywgMHg3NjYwLCAweDMwQzUsIDB4NzY2MSwgMHgxNTlELAorICAgIDB4NzY2MiwgMHgxNjIyLCAweDc2NjQsIDB4MkY2MSwgMHg3NjY1LCAweDE2MjMsIDB4NzY2OSwgMHgxNjdGLAorICAgIDB4NzY2QSwgMHgzMkU0LCAweDc2NkMsIDB4MTZDRSwgMHg3NjZELCAweDMzOTUsIDB4NzY2RSwgMHgxNkNELAorICAgIDB4NzY3MCwgMHgzNDI4LCAweDc2NzEsIDB4MTcyMywgMHg3NjcyLCAweDE3MjQsIDB4NzY3NSwgMHgzNTQzLAorICAgIDB4NzY3NiwgMHgwMjJGLCAweDc2NzgsIDB4MDdBQSwgMHg3Njc5LCAweDFCOTUsIDB4NzY3QiwgMHgwQ0VFLAorICAgIDB4NzY3QywgMHgwQ0VGLCAweDc2N0QsIDB4MDM2MywgMHg3NjdFLCAweDAzRjUsIDB4NzY3RiwgMHgxODEwLAorICAgIDB4NzY4MSwgMHgxOEQ2LCAweDc2ODIsIDB4MDRGNCwgMHg3Njg0LCAweDA2NTksIDB4NzY4NiwgMHgwN0FCLAorICAgIDB4NzY4NywgMHgwN0FDLCAweDc2ODgsIDB4MDdBRCwgMHg3Njg5LCAweDFGQTgsIDB4NzY4QSwgMHgxRDU5LAorICAgIDB4NzY4QiwgMHgwOTQwLCAweDc2OEUsIDB4MEIzNSwgMHg3NjhGLCAweDFGQTcsIDB4NzY5MiwgMHgyMjJELAorICAgIDB4NzY5MywgMHgwQ0YxLCAweDc2OTUsIDB4MjIyQywgMHg3Njk2LCAweDBDRjAsIDB4NzY5OSwgMHgyNEJFLAorICAgIDB4NzY5QSwgMHgxMUIzLCAweDc2OUIsIDB4Mjk4QywgMHg3NjlDLCAweDI5ODksIDB4NzY5RCwgMHgyOThBLAorICAgIDB4NzY5RSwgMHgyOThCLCAweDc2QTQsIDB4MkRCNywgMHg3NkE2LCAweDJGNjcsIDB4NzZBQSwgMHgzMUZCLAorICAgIDB4NzZBQiwgMHgzMUZBLCAweDc2QUQsIDB4MzM5NiwgMHg3NkFFLCAweDAzNjQsIDB4NzZBRiwgMHgxQTE0LAorICAgIDB4NzZCMCwgMHgwOTQxLCAweDc2QjQsIDB4MENGMiwgMHg3NkI1LCAweDI0QkYsIDB4NzZCOCwgMHgyNzNFLAorICAgIDB4NzZCQSwgMHgxMUI0LCAweDc2QkIsIDB4MkJERCwgMHg3NkJELCAweDJGNjgsIDB4NzZCRSwgMHgzMUZDLAorICAgIDB4NzZCRiwgMHgwMzY1LCAweDc2QzIsIDB4MDY1QSwgMHg3NkMzLCAweDA3QjAsIDB4NzZDNCwgMHgxQjk2LAorICAgIDB4NzZDNSwgMHgwN0IxLCAweDc2QzYsIDB4MDdBRiwgMHg3NkM4LCAweDA3QUUsIDB4NzZDOSwgMHgxRDVBLAorICAgIDB4NzZDQSwgMHgwOTQyLCAweDc2Q0QsIDB4MDk0MywgMHg3NkNFLCAweDA5NDQsIDB4NzZEMiwgMHgwQjM3LAorICAgIDB4NzZEMywgMHgxRkE5LCAweDc2RDQsIDB4MEIzNiwgMHg3NkRBLCAweDIyMkUsIDB4NzZEQiwgMHgwQjM4LAorICAgIDB4NzZEQywgMHgwQ0YzLCAweDc2REQsIDB4MjRDMCwgMHg3NkRFLCAweDBFOTAsIDB4NzZERiwgMHgwRTkxLAorICAgIDB4NzZFMSwgMHgxMDM4LCAweDc2RTMsIDB4MTAzOSwgMHg3NkU0LCAweDExQjUsIDB4NzZFNSwgMHgxMzA2LAorICAgIDB4NzZFNiwgMHgyQkRFLCAweDc2RTcsIDB4MTMwNSwgMHg3NkU5LCAweDJEQjgsIDB4NzZFQSwgMHgxNDE3LAorICAgIDB4NzZFQywgMHgyRjY5LCAweDc2RUQsIDB4MzFGRCwgMHg3NkVFLCAweDAzNjYsIDB4NzZFRiwgMHgwNEY1LAorICAgIDB4NzZGMCwgMHgxQTE3LCAweDc2RjEsIDB4MUExNiwgMHg3NkYyLCAweDA2NUIsIDB4NzZGMywgMHgxQTE1LAorICAgIDB4NzZGNCwgMHgwNjVDLCAweDc2RjUsIDB4MUExOCwgMHg3NkY3LCAweDFCOUMsIDB4NzZGOCwgMHgwN0I0LAorICAgIDB4NzZGOSwgMHgwN0IzLCAweDc2RkEsIDB4MUI5RSwgMHg3NkZCLCAweDFCOUQsIDB4NzZGQywgMHgwN0I4LAorICAgIDB4NzZGRSwgMHgwN0I3LCAweDc3MDEsIDB4MDdCMiwgMHg3NzAzLCAweDFCOTgsIDB4NzcwNCwgMHgxQjk5LAorICAgIDB4NzcwNSwgMHgxQjlBLCAweDc3MDcsIDB4MDdCOSwgMHg3NzA4LCAweDFCOTcsIDB4NzcwOSwgMHgwN0I1LAorICAgIDB4NzcwQSwgMHgxQjlCLCAweDc3MEIsIDB4MDdCNiwgMHg3NzEwLCAweDFENUQsIDB4NzcxMSwgMHgxRDYxLAorICAgIDB4NzcxMiwgMHgxRDVGLCAweDc3MTMsIDB4MUQ1RSwgMHg3NzE1LCAweDFENjIsIDB4NzcxOSwgMHgxRDYzLAorICAgIDB4NzcxQSwgMHgxRDY0LCAweDc3MUIsIDB4MUQ1QywgMHg3NzFELCAweDFENUIsIDB4NzcxRiwgMHgwOTQ2LAorICAgIDB4NzcyMCwgMHgwOTQ3LCAweDc3MjIsIDB4MUQ2NSwgMHg3NzIzLCAweDFENjAsIDB4NzcyNSwgMHgxRkIyLAorICAgIDB4NzcyNywgMHgxRDY2LCAweDc3MjgsIDB4MDk0OCwgMHg3NzI5LCAweDA5NDUsIDB4NzcyRCwgMHgxRkFDLAorICAgIDB4NzcyRiwgMHgxRkFCLCAweDc3MzEsIDB4MUZBRCwgMHg3NzMyLCAweDFGQUUsIDB4NzczMywgMHgxRkIwLAorICAgIDB4NzczNCwgMHgxRkFGLCAweDc3MzUsIDB4MUZCNCwgMHg3NzM2LCAweDBCM0MsIDB4NzczNywgMHgwQjM5LAorICAgIDB4NzczOCwgMHgwQjNELCAweDc3MzksIDB4MUZBQSwgMHg3NzNBLCAweDBCM0UsIDB4NzczQiwgMHgxRkIzLAorICAgIDB4NzczQywgMHgwQjNCLCAweDc3M0QsIDB4MUZCMSwgMHg3NzNFLCAweDBCM0EsIDB4Nzc0NCwgMHgyMjMxLAorICAgIDB4Nzc0NSwgMHgyMjMzLCAweDc3NDYsIDB4MjIyRiwgMHg3NzQ3LCAweDIyMzAsIDB4Nzc0QSwgMHgyMjM0LAorICAgIDB4Nzc0QiwgMHgyMjM2LCAweDc3NEMsIDB4MjIzNywgMHg3NzRELCAweDIyMzIsIDB4Nzc0RSwgMHgyMjM1LAorICAgIDB4Nzc0RiwgMHgwQ0Y0LCAweDc3NTIsIDB4MjRDNCwgMHg3NzU0LCAweDI0QzksIDB4Nzc1NSwgMHgyNEMxLAorICAgIDB4Nzc1NiwgMHgyNEM1LCAweDc3NTksIDB4MjRDQSwgMHg3NzVBLCAweDI0QzYsIDB4Nzc1QiwgMHgwRTkyLAorICAgIDB4Nzc1QywgMHgwRTlBLCAweDc3NUUsIDB4MEU5NSwgMHg3NzVGLCAweDI0QzIsIDB4Nzc2MCwgMHgyNEMzLAorICAgIDB4Nzc2MSwgMHgxMDNELCAweDc3NjIsIDB4MEU5RCwgMHg3NzYzLCAweDBFOTYsIDB4Nzc2NSwgMHgwRTlCLAorICAgIDB4Nzc2NiwgMHgwRTk0LCAweDc3NjcsIDB4MjRDOCwgMHg3NzY4LCAweDBFOUMsIDB4Nzc2OSwgMHgyNEM3LAorICAgIDB4Nzc2QSwgMHgwRTk4LCAweDc3NkIsIDB4MEU5MywgMHg3NzZDLCAweDBFOTksIDB4Nzc2RCwgMHgyNENCLAorICAgIDB4Nzc2RSwgMHgyNzQzLCAweDc3NkYsIDB4Mjc0NSwgMHg3Nzc5LCAweDBFOTcsIDB4Nzc3QywgMHgyNzQwLAorICAgIDB4Nzc3RCwgMHgxMDNCLCAweDc3N0UsIDB4Mjc0NiwgMHg3NzdGLCAweDEwM0MsIDB4Nzc4MCwgMHgyNzQ0LAorICAgIDB4Nzc4MSwgMHgyNzNGLCAweDc3ODIsIDB4Mjc0MiwgMHg3NzgzLCAweDI3NDcsIDB4Nzc4NCwgMHgxMDNBLAorICAgIDB4Nzc4NSwgMHgyNzQxLCAweDc3ODcsIDB4MTFCNywgMHg3Nzg4LCAweDI5OTAsIDB4Nzc4OSwgMHgyOThGLAorICAgIDB4Nzc4QiwgMHgxMUJBLCAweDc3OEMsIDB4MTFCOCwgMHg3NzhELCAweDI5OEQsIDB4Nzc4RSwgMHgxMUI2LAorICAgIDB4Nzc4RiwgMHgyOThFLCAweDc3OTEsIDB4MTFCOSwgMHg3Nzk1LCAweDJCRTYsIDB4Nzc5NywgMHgyQkU4LAorICAgIDB4Nzc5OSwgMHgyQkU3LCAweDc3OUEsIDB4MkJERiwgMHg3NzlCLCAweDJCRTMsIDB4Nzc5QywgMHgyQkUyLAorICAgIDB4Nzc5RCwgMHgyQkUwLCAweDc3OUUsIDB4MTMwOCwgMHg3NzlGLCAweDEzMDksIDB4NzdBMCwgMHgxMzA3LAorICAgIDB4NzdBMSwgMHgyQkUxLCAweDc3QTIsIDB4MkJFNCwgMHg3N0EzLCAweDJCRTUsIDB4NzdBNSwgMHgxMzBBLAorICAgIDB4NzdBNywgMHgxNDFDLCAweDc3QTgsIDB4MkRDMCwgMHg3N0FBLCAweDE0MTksIDB4NzdBQiwgMHgyREJBLAorICAgIDB4NzdBQywgMHgxNDFCLCAweDc3QUQsIDB4MTQxRCwgMHg3N0IwLCAweDE0MUEsIDB4NzdCMSwgMHgyREJGLAorICAgIDB4NzdCMiwgMHgyREJCLCAweDc3QjMsIDB4MTQxOCwgMHg3N0I0LCAweDJEQkUsIDB4NzdCNSwgMHgyREI5LAorICAgIDB4NzdCNiwgMHgyREJELCAweDc3QjcsIDB4MkRCQywgMHg3N0JBLCAweDJGNkIsIDB4NzdCQiwgMHgxNEZDLAorICAgIDB4NzdCQywgMHgxNEZELCAweDc3QkQsIDB4MTRGQSwgMHg3N0JGLCAweDE0RkIsIDB4NzdDMiwgMHgyRjZBLAorICAgIDB4NzdDNCwgMHgzMEM4LCAweDc3QzcsIDB4MTU5RSwgMHg3N0M5LCAweDMwQzYsIDB4NzdDQSwgMHgzMEM3LAorICAgIDB4NzdDQywgMHgzMUZFLCAweDc3Q0QsIDB4MzIwMSwgMHg3N0NFLCAweDMxRkYsIDB4NzdDRiwgMHgzMjAwLAorICAgIDB4NzdEMCwgMHgzMkU1LCAweDc3RDMsIDB4MTY4MCwgMHg3N0Q0LCAweDM0MjksIDB4NzdENSwgMHgzNDhGLAorICAgIDB4NzdENywgMHgxNzI1LCAweDc3RDgsIDB4MzREMywgMHg3N0Q5LCAweDM0RDQsIDB4NzdEQSwgMHgxNzUzLAorICAgIDB4NzdEQiwgMHgwMzY3LCAweDc3REMsIDB4MDdCQSwgMHg3N0RFLCAweDIyMzgsIDB4NzdFMCwgMHgyNENDLAorICAgIDB4NzdFMiwgMHgwMzY4LCAweDc3RTMsIDB4MDRGNiwgMHg3N0U1LCAweDA2NUQsIDB4NzdFNywgMHgxQjlGLAorICAgIDB4NzdFOCwgMHgxQkEwLCAweDc3RTksIDB4MDk0OSwgMHg3N0VDLCAweDIyMzksIDB4NzdFRCwgMHgwQ0Y1LAorICAgIDB4NzdFRSwgMHgwRTlFLCAweDc3RUYsIDB4MTQxRSwgMHg3N0YwLCAweDJEQzEsIDB4NzdGMSwgMHgzMEM5LAorICAgIDB4NzdGMiwgMHgzMjAyLCAweDc3RjMsIDB4MDM2OSwgMHg3N0Y3LCAweDFBMUUsIDB4NzdGOCwgMHgxQTE5LAorICAgIDB4NzdGOSwgMHgxQTFCLCAweDc3RkEsIDB4MUExRCwgMHg3N0ZCLCAweDFBMUMsIDB4NzdGQywgMHgxQTFBLAorICAgIDB4NzdGRCwgMHgwNjVFLCAweDc4MDIsIDB4MDdCQiwgMHg3ODAzLCAweDFCQTksIDB4NzgwNSwgMHgxQkE0LAorICAgIDB4NzgwNiwgMHgxQkExLCAweDc4MDksIDB4MUJBOCwgMHg3ODBDLCAweDA3QkQsIDB4NzgwRCwgMHgwN0JFLAorICAgIDB4NzgwRSwgMHgxQkE3LCAweDc4MEYsIDB4MUJBNiwgMHg3ODEwLCAweDFCQTUsIDB4NzgxMSwgMHgxQkEyLAorICAgIDB4NzgxMiwgMHgxQkEzLCAweDc4MTMsIDB4MUJBQSwgMHg3ODE0LCAweDA3QkMsIDB4NzgxRCwgMHgwOTRELAorICAgIDB4NzgxRiwgMHgwOTUzLCAweDc4MjAsIDB4MDk1MiwgMHg3ODIxLCAweDFENkYsIDB4NzgyMiwgMHgxRDY5LAorICAgIDB4NzgyMywgMHgxRDY3LCAweDc4MjUsIDB4MDk1MCwgMHg3ODI2LCAweDFGQkIsIDB4NzgyNywgMHgwOTRCLAorICAgIDB4NzgyOCwgMHgxRDZDLCAweDc4MjksIDB4MUQ3MCwgMHg3ODJBLCAweDFENzIsIDB4NzgyQiwgMHgxRDZFLAorICAgIDB4NzgyQywgMHgxRDY4LCAweDc4MkQsIDB4MDk1MSwgMHg3ODJFLCAweDFENkQsIDB4NzgyRiwgMHgxRDZCLAorICAgIDB4NzgzMCwgMHgwOTRBLCAweDc4MzEsIDB4MUQ3MywgMHg3ODMyLCAweDA5NTQsIDB4NzgzMywgMHgxRDcxLAorICAgIDB4NzgzNCwgMHgwOTRFLCAweDc4MzUsIDB4MUQ2QSwgMHg3ODM3LCAweDA5NEYsIDB4NzgzOCwgMHgwOTRDLAorICAgIDB4Nzg0MywgMHgwQjQwLCAweDc4NDUsIDB4MUZCQywgMHg3ODQ4LCAweDFGQjUsIDB4Nzg0OSwgMHgxRkI3LAorICAgIDB4Nzg0QSwgMHgxRkI5LCAweDc4NEMsIDB4MUZCQSwgMHg3ODRELCAweDFGQjgsIDB4Nzg0RSwgMHgwQjQxLAorICAgIDB4Nzg1MCwgMHgxRkJELCAweDc4NTIsIDB4MUZCNiwgMHg3ODVDLCAweDIyM0QsIDB4Nzg1RCwgMHgwQ0Y2LAorICAgIDB4Nzg1RSwgMHgyMjQ1LCAweDc4NjAsIDB4MjIzQSwgMHg3ODYyLCAweDIyNDYsIDB4Nzg2NCwgMHgyMjNCLAorICAgIDB4Nzg2NSwgMHgyMjNDLCAweDc4NjgsIDB4MjI0NCwgMHg3ODY5LCAweDIyNDMsIDB4Nzg2QSwgMHgyMjQwLAorICAgIDB4Nzg2QiwgMHgwQjNGLCAweDc4NkMsIDB4MENGNywgMHg3ODZELCAweDIyM0UsIDB4Nzg2RSwgMHgyMjQxLAorICAgIDB4Nzg2RiwgMHgwQ0Y4LCAweDc4NzAsIDB4MjI0MiwgMHg3ODcxLCAweDIyM0YsIDB4Nzg3OSwgMHgyNEQ3LAorICAgIDB4Nzg3QiwgMHgyNERCLCAweDc4N0MsIDB4MEVBNSwgMHg3ODdFLCAweDI3NEQsIDB4Nzg3RiwgMHgwRUE4LAorICAgIDB4Nzg4MCwgMHgyNEQ5LCAweDc4ODEsIDB4MzZFOCwgMHg3ODgzLCAweDI0RDYsIDB4Nzg4NCwgMHgyNEQxLAorICAgIDB4Nzg4NSwgMHgyNEQzLCAweDc4ODYsIDB4MjRENCwgMHg3ODg3LCAweDI0Q0QsIDB4Nzg4OSwgMHgwRUE0LAorICAgIDB4Nzg4QywgMHgwRUEzLCAweDc4OEUsIDB4MEU5RiwgMHg3ODhGLCAweDI0RDAsIDB4Nzg5MSwgMHgwRUE2LAorICAgIDB4Nzg5MywgMHgwRUE3LCAweDc4OTQsIDB4MjRDRiwgMHg3ODk1LCAweDI0RDIsIDB4Nzg5NiwgMHgyNERBLAorICAgIDB4Nzg5NywgMHgwRUExLCAweDc4OTgsIDB4MEVBMiwgMHg3ODk5LCAweDI0RDgsIDB4Nzg5QSwgMHgyNENFLAorICAgIDB4Nzg5RSwgMHgyNzRGLCAweDc4OUYsIDB4MTAzRiwgMHg3OEEwLCAweDI3NTEsIDB4NzhBMSwgMHgyNEQ1LAorICAgIDB4NzhBMiwgMHgyNzUzLCAweDc4QTMsIDB4MTA0MywgMHg3OEE0LCAweDI3NTQsIDB4NzhBNSwgMHgyNzUwLAorICAgIDB4NzhBNywgMHgxMDQwLCAweDc4QTgsIDB4Mjc0QywgMHg3OEE5LCAweDEwNDIsIDB4NzhBQSwgMHgyNzQ5LAorICAgIDB4NzhBQiwgMHgyNzRFLCAweDc4QUMsIDB4Mjc1MiwgMHg3OEFELCAweDI3NEIsIDB4NzhCMCwgMHgwRUEwLAorICAgIDB4NzhCMiwgMHgyNzQ4LCAweDc4QjMsIDB4MTA0MSwgMHg3OEI0LCAweDI3NEEsIDB4NzhCQSwgMHgxMUJELAorICAgIDB4NzhCQiwgMHgyOTkyLCAweDc4QkMsIDB4MTFDMSwgMHg3OEJFLCAweDExQkYsIDB4NzhDMSwgMHgxMDNFLAorICAgIDB4NzhDMywgMHgyOTk5LCAweDc4QzQsIDB4Mjk5QSwgMHg3OEM1LCAweDExQkMsIDB4NzhDOCwgMHgyOTk4LAorICAgIDB4NzhDOSwgMHgyOTlCLCAweDc4Q0EsIDB4MTFCRSwgMHg3OENCLCAweDExQkIsIDB4NzhDQywgMHgyOTk0LAorICAgIDB4NzhDRCwgMHgyOTkxLCAweDc4Q0UsIDB4Mjk5NiwgMHg3OENGLCAweDI5OTMsIDB4NzhEMCwgMHgxMUMyLAorICAgIDB4NzhEMSwgMHgyOTk1LCAweDc4RDQsIDB4Mjk5NywgMHg3OEQ1LCAweDExQzAsIDB4NzhEQSwgMHgxMzBDLAorICAgIDB4NzhEQiwgMHgyQkVGLCAweDc4REQsIDB4MkJFOSwgMHg3OERFLCAweDJCRUQsIDB4NzhERiwgMHgyQkYzLAorICAgIDB4NzhFMCwgMHgyQkY0LCAweDc4RTEsIDB4MkJGMCwgMHg3OEUyLCAweDJCRjEsIDB4NzhFMywgMHgyQkVFLAorICAgIDB4NzhFNSwgMHgyQkVCLCAweDc4RTcsIDB4MTMwRSwgMHg3OEU4LCAweDEzMEIsIDB4NzhFOSwgMHgyQkVBLAorICAgIDB4NzhFQSwgMHgyQkVDLCAweDc4RUMsIDB4MTMwRCwgMHg3OEVELCAweDJCRjIsIDB4NzhFRiwgMHgxNDIyLAorICAgIDB4NzhGMiwgMHgyREM4LCAweDc4RjMsIDB4MkRDMiwgMHg3OEY0LCAweDE0MjEsIDB4NzhGNywgMHgxNDFGLAorICAgIDB4NzhGOSwgMHgyRENBLCAweDc4RkEsIDB4MTQyMCwgMHg3OEZCLCAweDJEQzUsIDB4NzhGQywgMHgyREM2LAorICAgIDB4NzhGRCwgMHgyREMzLCAweDc4RkUsIDB4MkRDQiwgMHg3OEZGLCAweDJEQzcsIDB4NzkwMSwgMHgxNDIzLAorICAgIDB4NzkwMiwgMHgyREM0LCAweDc5MDQsIDB4MkRDQywgMHg3OTA1LCAweDJEQzksIDB4NzkwOSwgMHgyRjZGLAorICAgIDB4NzkwQywgMHgyRjZDLCAweDc5MEUsIDB4MTRGRSwgMHg3OTEwLCAweDJGNzAsIDB4NzkxMSwgMHgyRjcyLAorICAgIDB4NzkxMiwgMHgyRjcxLCAweDc5MTMsIDB4MkY2RCwgMHg3OTE0LCAweDJGNkUsIDB4NzkxNywgMHgzMENFLAorICAgIDB4NzkxOSwgMHgxNTlGLCAweDc5MUIsIDB4MzBDQiwgMHg3OTFDLCAweDMwQ0QsIDB4NzkxRCwgMHgzMENBLAorICAgIDB4NzkxRSwgMHgzMENGLCAweDc5MjEsIDB4MzBDQywgMHg3OTIzLCAweDMyMDQsIDB4NzkyNCwgMHgzMjA3LAorICAgIDB4NzkyNSwgMHgzMjAzLCAweDc5MjYsIDB4MTYyNCwgMHg3OTI3LCAweDMyMDUsIDB4NzkyOCwgMHgzMjA2LAorICAgIDB4NzkyOSwgMHgzMjA4LCAweDc5MkEsIDB4MTYyNSwgMHg3OTJCLCAweDE2MjcsIDB4NzkyQywgMHgxNjI2LAorICAgIDB4NzkyRCwgMHgzMkU2LCAweDc5MkYsIDB4MzJFOCwgMHg3OTMxLCAweDMyRTcsIDB4NzkzNSwgMHgzMzk3LAorICAgIDB4NzkzOCwgMHgzNDkwLCAweDc5MzksIDB4MzRENSwgMHg3OTNBLCAweDAzNkEsIDB4NzkzRCwgMHgxOEQ3LAorICAgIDB4NzkzRSwgMHgwNjVGLCAweDc5M0YsIDB4MUEyMCwgMHg3OTQwLCAweDA2NjAsIDB4Nzk0MSwgMHgwNjYxLAorICAgIDB4Nzk0MiwgMHgxQTFGLCAweDc5NDQsIDB4MUJBRiwgMHg3OTQ1LCAweDFCQUUsIDB4Nzk0NiwgMHgwN0JGLAorICAgIDB4Nzk0NywgMHgwN0MyLCAweDc5NDgsIDB4MDdDMSwgMHg3OTQ5LCAweDA3QzAsIDB4Nzk0QSwgMHgxQkFCLAorICAgIDB4Nzk0QiwgMHgxQkFELCAweDc5NEMsIDB4MUJBQywgMHg3OTRGLCAweDFENzYsIDB4Nzk1MCwgMHgwOTU2LAorICAgIDB4Nzk1MSwgMHgxRDdBLCAweDc5NTIsIDB4MUQ3OSwgMHg3OTUzLCAweDFENzgsIDB4Nzk1NCwgMHgxRDc0LAorICAgIDB4Nzk1NSwgMHgwOTU1LCAweDc5NTYsIDB4MDk1OSwgMHg3OTU3LCAweDA5NUMsIDB4Nzk1QSwgMHgwOTVELAorICAgIDB4Nzk1QiwgMHgxRDc1LCAweDc5NUMsIDB4MUQ3NywgMHg3OTVELCAweDA5NUIsIDB4Nzk1RSwgMHgwOTVBLAorICAgIDB4Nzk1RiwgMHgwOTU4LCAweDc5NjAsIDB4MDk1NywgMHg3OTYxLCAweDFGQzQsIDB4Nzk2MywgMHgxRkMyLAorICAgIDB4Nzk2NCwgMHgxRkJFLCAweDc5NjUsIDB4MEI0MiwgMHg3OTY3LCAweDFGQkYsIDB4Nzk2OCwgMHgwQjQzLAorICAgIDB4Nzk2OSwgMHgxRkMwLCAweDc5NkEsIDB4MUZDMSwgMHg3OTZCLCAweDFGQzMsIDB4Nzk2RCwgMHgwQjQ0LAorICAgIDB4Nzk3MCwgMHgyMjRBLCAweDc5NzIsIDB4MjI0OSwgMHg3OTczLCAweDIyNDgsIDB4Nzk3NCwgMHgyMjQ3LAorICAgIDB4Nzk3OSwgMHgyNERGLCAweDc5N0EsIDB4MEVBOSwgMHg3OTdDLCAweDI0REMsIDB4Nzk3RCwgMHgyNERFLAorICAgIDB4Nzk3RiwgMHgwRUFBLCAweDc5ODEsIDB4MEVBQiwgMHg3OTgyLCAweDI0REQsIDB4Nzk4OCwgMHgyNzVELAorICAgIDB4Nzk4QSwgMHgyNzU2LCAweDc5OEIsIDB4Mjc1NywgMHg3OThELCAweDEwNDYsIDB4Nzk4RSwgMHgxMDQ0LAorICAgIDB4Nzk4RiwgMHgxMDQ1LCAweDc5OTAsIDB4Mjc1RiwgMHg3OTkyLCAweDI3NUUsIDB4Nzk5MywgMHgyNzVCLAorICAgIDB4Nzk5NCwgMHgyNzVBLCAweDc5OTUsIDB4Mjc1OSwgMHg3OTk2LCAweDI3NTgsIDB4Nzk5NywgMHgyNzVDLAorICAgIDB4Nzk5OCwgMHgyNzU1LCAweDc5OUEsIDB4Mjk5QywgMHg3OTlCLCAweDI5QTEsIDB4Nzk5QywgMHgyOTlGLAorICAgIDB4NzlBMCwgMHgyOTlFLCAweDc5QTEsIDB4Mjk5RCwgMHg3OUEyLCAweDI5QTAsIDB4NzlBNCwgMHgyQkY1LAorICAgIDB4NzlBNiwgMHgxMzBGLCAweDc5QTcsIDB4MTQyNCwgMHg3OUE4LCAweDJEQ0UsIDB4NzlBQSwgMHgxNDI1LAorICAgIDB4NzlBQiwgMHgyRENELCAweDc5QUMsIDB4MkY3NCwgMHg3OUFELCAweDJGNzMsIDB4NzlBRSwgMHgxNEZGLAorICAgIDB4NzlCMCwgMHgzMEQwLCAweDc5QjEsIDB4MTVBMCwgMHg3OUIyLCAweDMyMDksIDB4NzlCMywgMHgxNkNGLAorICAgIDB4NzlCNCwgMHgzMzk4LCAweDc5QjYsIDB4MzQ5MiwgMHg3OUI3LCAweDM0OTEsIDB4NzlCOCwgMHgxN0IyLAorICAgIDB4NzlCOSwgMHgwN0MzLCAweDc5QkEsIDB4MDdDNCwgMHg3OUJCLCAweDFGQzUsIDB4NzlCRCwgMHgwRUFELAorICAgIDB4NzlCRSwgMHgwMzZCLCAweDc5QkYsIDB4MDRGOSwgMHg3OUMwLCAweDA0RjgsIDB4NzlDMSwgMHgwNEY3LAorICAgIDB4NzlDNSwgMHgxQTIxLCAweDc5QzgsIDB4MDY2MywgMHg3OUM5LCAweDA2NjIsIDB4NzlDQiwgMHgwN0M3LAorICAgIDB4NzlDRCwgMHgxQkIxLCAweDc5Q0UsIDB4MUJCNCwgMHg3OUNGLCAweDFCQjIsIDB4NzlEMSwgMHgwN0M1LAorICAgIDB4NzlEMiwgMHgwN0M2LCAweDc5RDUsIDB4MUJCMCwgMHg3OUQ2LCAweDFCQjMsIDB4NzlEOCwgMHgwOTY0LAorICAgIDB4NzlEQywgMHgxRDgxLCAweDc5REQsIDB4MUQ4MywgMHg3OURFLCAweDFEODIsIDB4NzlERiwgMHgwOTYxLAorICAgIDB4NzlFMCwgMHgxRDdELCAweDc5RTMsIDB4MDk1RiwgMHg3OUU0LCAweDA5NUUsIDB4NzlFNiwgMHgwOTYyLAorICAgIDB4NzlFNywgMHgwOTYwLCAweDc5RTksIDB4MDk2MywgMHg3OUVBLCAweDFEODAsIDB4NzlFQiwgMHgxRDdCLAorICAgIDB4NzlFQywgMHgxRDdDLCAweDc5RUQsIDB4MUQ3RiwgMHg3OUVFLCAweDFEN0UsIDB4NzlGNiwgMHgxRkM4LAorICAgIDB4NzlGNywgMHgxRkM5LCAweDc5RjgsIDB4MUZDNywgMHg3OUZBLCAweDFGQzYsIDB4NzlGQiwgMHgwQjQ1LAorICAgIDB4N0EwMCwgMHgwQ0ZELCAweDdBMDIsIDB4MjI0QiwgMHg3QTAzLCAweDIyNEQsIDB4N0EwNCwgMHgyMjRGLAorICAgIDB4N0EwNSwgMHgwQ0ZDLCAweDdBMDgsIDB4MENGQSwgMHg3QTBBLCAweDIyNEMsIDB4N0EwQiwgMHgwQ0ZCLAorICAgIDB4N0EwQywgMHgyMjRFLCAweDdBMEQsIDB4MENGOSwgMHg3QTEwLCAweDI0RTksIDB4N0ExMSwgMHgyNEUwLAorICAgIDB4N0ExMiwgMHgyNEUzLCAweDdBMTMsIDB4MjRFNywgMHg3QTE0LCAweDBFQjEsIDB4N0ExNSwgMHgyNEU1LAorICAgIDB4N0ExNywgMHgyNEU0LCAweDdBMTgsIDB4MjRFMSwgMHg3QTE5LCAweDI0RTIsIDB4N0ExQSwgMHgwRUFGLAorICAgIDB4N0ExQiwgMHgyNEU4LCAweDdBMUMsIDB4MEVBRSwgMHg3QTFFLCAweDBFQjMsIDB4N0ExRiwgMHgwRUIyLAorICAgIDB4N0EyMCwgMHgwRUIwLCAweDdBMjIsIDB4MjRFNiwgMHg3QTI2LCAweDI3NjUsIDB4N0EyOCwgMHgyNzY0LAorICAgIDB4N0EyQiwgMHgyNzYwLCAweDdBMkUsIDB4MTA0NywgMHg3QTJGLCAweDI3NjMsIDB4N0EzMCwgMHgyNzYyLAorICAgIDB4N0EzMSwgMHgxMDQ4LCAweDdBMzcsIDB4MTFDNywgMHg3QTM5LCAweDI5QTMsIDB4N0EzQiwgMHgxMUM4LAorICAgIDB4N0EzQywgMHgxMUM0LCAweDdBM0QsIDB4MTFDNiwgMHg3QTNGLCAweDExQzMsIDB4N0E0MCwgMHgxMUM1LAorICAgIDB4N0E0NCwgMHgyQkY2LCAweDdBNDYsIDB4MTMxMiwgMHg3QTQ3LCAweDJCRjgsIDB4N0E0OCwgMHgyQkY3LAorICAgIDB4N0E0QSwgMHgyNzYxLCAweDdBNEIsIDB4MTMxNCwgMHg3QTRDLCAweDEzMTMsIDB4N0E0RCwgMHgxMzEwLAorICAgIDB4N0E0RSwgMHgxMzExLCAweDdBNTQsIDB4MkREMywgMHg3QTU2LCAweDJERDEsIDB4N0E1NywgMHgxNDI2LAorICAgIDB4N0E1OCwgMHgyREQyLCAweDdBNUEsIDB4MkRENCwgMHg3QTVCLCAweDJERDAsIDB4N0E1QywgMHgyRENGLAorICAgIDB4N0E1RiwgMHgyRjc1LCAweDdBNjAsIDB4MTUwMiwgMHg3QTYxLCAweDE1MDAsIDB4N0E2MiwgMHgxNTAxLAorICAgIDB4N0E2NywgMHgzMEQxLCAweDdBNjgsIDB4MzBEMiwgMHg3QTY5LCAweDE1QTIsIDB4N0E2QiwgMHgxNUExLAorICAgIDB4N0E2QywgMHgzMjBCLCAweDdBNkQsIDB4MzIwQywgMHg3QTZFLCAweDMyMEEsIDB4N0E3MCwgMHgzMzk5LAorICAgIDB4N0E3MSwgMHgzMzlBLCAweDdBNzQsIDB4MDM2QywgMHg3QTc1LCAweDE4MTEsIDB4N0E3NiwgMHgwNEZBLAorICAgIDB4N0E3OCwgMHgxQTIyLCAweDdBNzksIDB4MDY2NSwgMHg3QTdBLCAweDA2NjQsIDB4N0E3QiwgMHgxQTIzLAorICAgIDB4N0E3RSwgMHgxQkI2LCAweDdBN0YsIDB4MDdDOCwgMHg3QTgwLCAweDFCQjUsIDB4N0E4MSwgMHgwN0M5LAorICAgIDB4N0E4NCwgMHgwOTY1LCAweDdBODUsIDB4MUQ4NiwgMHg3QTg2LCAweDFEODQsIDB4N0E4NywgMHgxRDhBLAorICAgIDB4N0E4OCwgMHgwOTY2LCAweDdBODksIDB4MUQ4NSwgMHg3QThBLCAweDFEODksIDB4N0E4QiwgMHgxRDg3LAorICAgIDB4N0E4QywgMHgxRDg4LCAweDdBOEYsIDB4MUZDQSwgMHg3QTkwLCAweDFGQ0MsIDB4N0E5MiwgMHgwQjQ2LAorICAgIDB4N0E5NCwgMHgxRkNCLCAweDdBOTUsIDB4MEI0NywgMHg3QTk2LCAweDBEMDAsIDB4N0E5NywgMHgwQ0ZGLAorICAgIDB4N0E5OCwgMHgwQ0ZFLCAweDdBOTksIDB4MjI1MCwgMHg3QTlFLCAweDI0RUMsIDB4N0E5RiwgMHgwRUI0LAorICAgIDB4N0FBMCwgMHgwRUI1LCAweDdBQTIsIDB4MjRFQiwgMHg3QUEzLCAweDI0RUEsIDB4N0FBOCwgMHgyNzY2LAorICAgIDB4N0FBOSwgMHgxMDRBLCAweDdBQUEsIDB4MTA0OSwgMHg3QUFCLCAweDI3NjcsIDB4N0FBQywgMHgyNzY4LAorICAgIDB4N0FBRSwgMHgxMUNBLCAweDdBQUYsIDB4MTFDOSwgMHg3QUIxLCAweDJCRkMsIDB4N0FCMiwgMHgyOUE0LAorICAgIDB4N0FCMywgMHgyOUE2LCAweDdBQjQsIDB4MjlBNSwgMHg3QUI1LCAweDJCRkIsIDB4N0FCNiwgMHgyQkY5LAorICAgIDB4N0FCNywgMHgyQkZELCAweDdBQjgsIDB4MkJGQSwgMHg3QUJBLCAweDEzMTUsIDB4N0FCRSwgMHgyREQ1LAorICAgIDB4N0FCRiwgMHgxNDI3LCAweDdBQzAsIDB4MkRENiwgMHg3QUMxLCAweDJERDcsIDB4N0FDNCwgMHgxNTAzLAorICAgIDB4N0FDNSwgMHgxNTA0LCAweDdBQzcsIDB4MTYyOCwgMHg3QUNBLCAweDE2RkYsIDB4N0FDQiwgMHgwMzZELAorICAgIDB4N0FEMSwgMHgxQkI3LCAweDdBRDgsIDB4MUQ4QiwgMHg3QUQ5LCAweDA5NjcsIDB4N0FERiwgMHgwQkRFLAorICAgIDB4N0FFMCwgMHgwQkRELCAweDdBRTMsIDB4MEQwMiwgMHg3QUU0LCAweDIyNTIsIDB4N0FFNSwgMHgwRDAxLAorICAgIDB4N0FFNiwgMHgyMjUxLCAweDdBRUIsIDB4MjRFRCwgMHg3QUVELCAweDEwNEIsIDB4N0FFRSwgMHgyNzY5LAorICAgIDB4N0FFRiwgMHgxMDRDLCAweDdBRjYsIDB4MTYyOSwgMHg3QUY3LCAweDMyMEQsIDB4N0FGOSwgMHgwM0Y2LAorICAgIDB4N0FGQSwgMHgwNjY2LCAweDdBRkIsIDB4MUEyNCwgMHg3QUZELCAweDA3Q0IsIDB4N0FGRiwgMHgwN0NBLAorICAgIDB4N0IwMCwgMHgxQkI4LCAweDdCMDEsIDB4MUJCOSwgMHg3QjA0LCAweDFEOEQsIDB4N0IwNSwgMHgxRDhGLAorICAgIDB4N0IwNiwgMHgwOTY4LCAweDdCMDgsIDB4MUQ5MSwgMHg3QjA5LCAweDFEOTQsIDB4N0IwQSwgMHgxRDkyLAorICAgIDB4N0IwRSwgMHgxRDkzLCAweDdCMEYsIDB4MUQ5MCwgMHg3QjEwLCAweDFEOEMsIDB4N0IxMSwgMHgwOTY5LAorICAgIDB4N0IxMiwgMHgxRDk1LCAweDdCMTMsIDB4MUQ4RSwgMHg3QjE4LCAweDFGRDUsIDB4N0IxOSwgMHgwQjRELAorICAgIDB4N0IxQSwgMHgxRkRFLCAweDdCMUIsIDB4MEI0QSwgMHg3QjFELCAweDFGRDcsIDB4N0IxRSwgMHgwQjRFLAorICAgIDB4N0IyMCwgMHgwQjQ4LCAweDdCMjIsIDB4MUZEMiwgMHg3QjIzLCAweDFGREYsIDB4N0IyNCwgMHgxRkQzLAorICAgIDB4N0IyNSwgMHgxRkQwLCAweDdCMjYsIDB4MEI0QywgMHg3QjI4LCAweDBCNDksIDB4N0IyQSwgMHgxRkQ2LAorICAgIDB4N0IyQiwgMHgxRkQ5LCAweDdCMkMsIDB4MEI0QiwgMHg3QjJELCAweDFGREEsIDB4N0IyRSwgMHgwQjRGLAorICAgIDB4N0IyRiwgMHgxRkRCLCAweDdCMzAsIDB4MUZEMSwgMHg3QjMxLCAweDFGRDgsIDB4N0IzMiwgMHgxRkRDLAorICAgIDB4N0IzMywgMHgxRkQ0LCAweDdCMzQsIDB4MUZDRiwgMHg3QjM1LCAweDFGQ0QsIDB4N0IzOCwgMHgxRkRELAorICAgIDB4N0IzQiwgMHgxRkNFLCAweDdCNDAsIDB4MjI1OSwgMHg3QjQ0LCAweDIyNTUsIDB4N0I0NSwgMHgyMjVCLAorICAgIDB4N0I0NiwgMHgwRDA1LCAweDdCNDcsIDB4MjI1NCwgMHg3QjQ4LCAweDIyNTYsIDB4N0I0OSwgMHgwRDAzLAorICAgIDB4N0I0QSwgMHgyMjUzLCAweDdCNEIsIDB4MEQwQSwgMHg3QjRDLCAweDIyNTcsIDB4N0I0RCwgMHgwRDA5LAorICAgIDB4N0I0RSwgMHgyMjU4LCAweDdCNEYsIDB4MEQwQiwgMHg3QjUwLCAweDBEMDYsIDB4N0I1MSwgMHgwRDBDLAorICAgIDB4N0I1MiwgMHgwRDA3LCAweDdCNTQsIDB4MEQwOCwgMHg3QjU2LCAweDBEMDQsIDB4N0I1OCwgMHgyMjVBLAorICAgIDB4N0I2MCwgMHgwRUI4LCAweDdCNjEsIDB4MjRGOCwgMHg3QjYzLCAweDI0RkIsIDB4N0I2NCwgMHgyNEVGLAorICAgIDB4N0I2NSwgMHgyNEY0LCAweDdCNjYsIDB4MjRFRSwgMHg3QjY3LCAweDBFQkEsIDB4N0I2OSwgMHgyNEYyLAorICAgIDB4N0I2RCwgMHgyNEYwLCAweDdCNkUsIDB4MEVCOSwgMHg3QjcwLCAweDI0RjcsIDB4N0I3MSwgMHgyNEY2LAorICAgIDB4N0I3MiwgMHgyNEYzLCAweDdCNzMsIDB4MjRGNSwgMHg3Qjc0LCAweDI0RjEsIDB4N0I3NSwgMHgxMDUwLAorICAgIDB4N0I3NiwgMHgyNEZBLCAweDdCNzcsIDB4MEVCNiwgMHg3Qjc4LCAweDI0RjksIDB4N0I4MiwgMHgyNzc5LAorICAgIDB4N0I4NCwgMHgxMDU3LCAweDdCODUsIDB4Mjc3NCwgMHg3Qjg3LCAweDEwNTYsIDB4N0I4OCwgMHgyNzZBLAorICAgIDB4N0I4QSwgMHgyNzZDLCAweDdCOEIsIDB4MTA0RiwgMHg3QjhDLCAweDI3NzEsIDB4N0I4RCwgMHgyNzcwLAorICAgIDB4N0I4RSwgMHgyNzczLCAweDdCOEYsIDB4MTA1NCwgMHg3QjkwLCAweDI3NkUsIDB4N0I5MSwgMHgyNzZELAorICAgIDB4N0I5NCwgMHgxMDUzLCAweDdCOTUsIDB4MTA0RSwgMHg3Qjk2LCAweDI3NkYsIDB4N0I5NywgMHgxMDUxLAorICAgIDB4N0I5OCwgMHgyNzc1LCAweDdCOTksIDB4Mjc3NywgMHg3QjlCLCAweDI3NzIsIDB4N0I5QywgMHgyNzZCLAorICAgIDB4N0I5RCwgMHgxMDUyLCAweDdCQTAsIDB4MTFEMiwgMHg3QkExLCAweDEwNEQsIDB4N0JBNCwgMHgyNzc4LAorICAgIDB4N0JBQywgMHgyOUFBLCAweDdCQUQsIDB4MTFDQiwgMHg3QkFGLCAweDI5QUMsIDB4N0JCMSwgMHgxMUNDLAorICAgIDB4N0JCNCwgMHgxMUNFLCAweDdCQjUsIDB4MjlBRiwgMHg3QkI3LCAweDI5QTcsIDB4N0JCOCwgMHgxMDU1LAorICAgIDB4N0JCOSwgMHgyOUFELCAweDdCQkUsIDB4MjlBOSwgMHg3QkMwLCAweDBFQjcsIDB4N0JDMSwgMHgxMUQxLAorICAgIDB4N0JDNCwgMHgxMUNELCAweDdCQzYsIDB4MTFDRiwgMHg3QkM3LCAweDExRDAsIDB4N0JDOSwgMHgxMzE4LAorICAgIDB4N0JDQSwgMHgyOUFFLCAweDdCQ0IsIDB4MjlBOCwgMHg3QkNDLCAweDExRDMsIDB4N0JDRSwgMHgyOUFCLAorICAgIDB4N0JENCwgMHgyQzA3LCAweDdCRDUsIDB4MkMwMiwgMHg3QkQ4LCAweDJDMEMsIDB4N0JEOSwgMHgxMzE2LAorICAgIDB4N0JEQSwgMHgyQzA0LCAweDdCREIsIDB4MTMxQSwgMHg3QkRDLCAweDJDMEEsIDB4N0JERCwgMHgyQzAxLAorICAgIDB4N0JERSwgMHgyQkZFLCAweDdCREYsIDB4MkMwRCwgMHg3QkUwLCAweDE0MkQsIDB4N0JFMSwgMHgxMzFCLAorICAgIDB4N0JFMiwgMHgyQzA5LCAweDdCRTMsIDB4MkJGRiwgMHg3QkU0LCAweDEzMTksIDB4N0JFNSwgMHgyQzAzLAorICAgIDB4N0JFNiwgMHgxMzFELCAweDdCRTcsIDB4MkMwMCwgMHg3QkU4LCAweDJDMDUsIDB4N0JFOSwgMHgxMzFDLAorICAgIDB4N0JFQSwgMHgyQzA4LCAweDdCRUIsIDB4MkMwQiwgMHg3QkYwLCAweDJERTksIDB4N0JGMSwgMHgyREVBLAorICAgIDB4N0JGMiwgMHgyRERBLCAweDdCRjMsIDB4MkRFMSwgMHg3QkY0LCAweDJEREYsIDB4N0JGNywgMHgxNDJCLAorICAgIDB4N0JGOCwgMHgyREU2LCAweDdCRjksIDB4MkMwNiwgMHg3QkZCLCAweDJEREQsIDB4N0JGRCwgMHgyREU3LAorICAgIDB4N0JGRSwgMHgxNDJBLCAweDdCRkYsIDB4MkREQywgMHg3QzAwLCAweDJEREIsIDB4N0MwMSwgMHgyREU1LAorICAgIDB4N0MwMiwgMHgyREUyLCAweDdDMDMsIDB4MkRFNCwgMHg3QzA1LCAweDJERDgsIDB4N0MwNiwgMHgyREU4LAorICAgIDB4N0MwNywgMHgxNDI4LCAweDdDMDksIDB4MkRFMywgMHg3QzBBLCAweDJERUMsIDB4N0MwQiwgMHgyREUwLAorICAgIDB4N0MwQywgMHgxNDJDLCAweDdDMEQsIDB4MTQyOSwgMHg3QzBFLCAweDJEREUsIDB4N0MwRiwgMHgyREQ5LAorICAgIDB4N0MxMCwgMHgyREVCLCAweDdDMTEsIDB4MTMxNywgMHg3QzE5LCAweDJGNzgsIDB4N0MxQywgMHgyRjc2LAorICAgIDB4N0MxRCwgMHgyRjdDLCAweDdDMUUsIDB4MTUwOCwgMHg3QzFGLCAweDJGN0EsIDB4N0MyMCwgMHgyRjc5LAorICAgIDB4N0MyMSwgMHgxNTBBLCAweDdDMjIsIDB4MkY3RiwgMHg3QzIzLCAweDE1MDksIDB4N0MyNSwgMHgyRjgwLAorICAgIDB4N0MyNiwgMHgyRjdELCAweDdDMjcsIDB4MTUwNiwgMHg3QzI4LCAweDJGN0UsIDB4N0MyOSwgMHgyRjc3LAorICAgIDB4N0MyQSwgMHgxNTA3LCAweDdDMkIsIDB4MTUwNSwgMHg3QzJDLCAweDMwRDYsIDB4N0MyRCwgMHgyRjdCLAorICAgIDB4N0MzMCwgMHgyRjgxLCAweDdDMzMsIDB4MzBEMywgMHg3QzM3LCAweDE1QTcsIDB4N0MzOCwgMHgxNUE1LAorICAgIDB4N0MzOSwgMHgzMEQ1LCAweDdDM0IsIDB4MzBENywgMHg3QzNDLCAweDMwRDQsIDB4N0MzRCwgMHgxNUE2LAorICAgIDB4N0MzRSwgMHgxNUEzLCAweDdDM0YsIDB4MTVBNCwgMHg3QzQwLCAweDE1QTgsIDB4N0M0MywgMHgxNjJCLAorICAgIDB4N0M0NSwgMHgzMjEyLCAweDdDNDcsIDB4MzIxMSwgMHg3QzQ4LCAweDMyMEYsIDB4N0M0OSwgMHgzMjBFLAorICAgIDB4N0M0QSwgMHgzMjEwLCAweDdDNEMsIDB4MTYyQSwgMHg3QzRELCAweDE2MkMsIDB4N0M1MCwgMHgxNjgxLAorICAgIDB4N0M1MywgMHgzMkVBLCAweDdDNTQsIDB4MzJFOSwgMHg3QzU3LCAweDMzOUIsIDB4N0M1OSwgMHgzMzlELAorICAgIDB4N0M1QSwgMHgzMzlGLCAweDdDNUIsIDB4MzM5RSwgMHg3QzVDLCAweDMzOUMsIDB4N0M1RiwgMHgxNkQxLAorICAgIDB4N0M2MCwgMHgxNkQwLCAweDdDNjMsIDB4MTcwMSwgMHg3QzY0LCAweDE3MDAsIDB4N0M2NSwgMHgxNzAyLAorICAgIDB4N0M2NiwgMHgzNDJCLCAweDdDNjcsIDB4MzQyQSwgMHg3QzY5LCAweDM0RDYsIDB4N0M2QSwgMHgzNDkzLAorICAgIDB4N0M2QiwgMHgzNEQ3LCAweDdDNkMsIDB4MTc0NSwgMHg3QzZFLCAweDE3NDYsIDB4N0M2RiwgMHgzNTA3LAorICAgIDB4N0M3MiwgMHgxNzZCLCAweDdDNzMsIDB4MDNGNywgMHg3Qzc1LCAweDFBMjUsIDB4N0M3OCwgMHgxQkJCLAorICAgIDB4N0M3OSwgMHgxQkJDLCAweDdDN0EsIDB4MUJCQSwgMHg3QzdELCAweDA3Q0MsIDB4N0M3RiwgMHgxQkJELAorICAgIDB4N0M4MCwgMHgxQkJFLCAweDdDODEsIDB4MUJCRiwgMHg3Qzg0LCAweDFEOTYsIDB4N0M4NSwgMHgxRDlDLAorICAgIDB4N0M4OCwgMHgxRDlBLCAweDdDODksIDB4MDk2QSwgMHg3QzhBLCAweDFEOTgsIDB4N0M4QywgMHgxRDk5LAorICAgIDB4N0M4RCwgMHgxRDlCLCAweDdDOTEsIDB4MUQ5NywgMHg3QzkyLCAweDBCNTAsIDB4N0M5NCwgMHgxRkUwLAorICAgIDB4N0M5NSwgMHgwQjUyLCAweDdDOTYsIDB4MUZFMiwgMHg3Qzk3LCAweDBCNTEsIDB4N0M5OCwgMHgxRkUxLAorICAgIDB4N0M5RSwgMHgyMjVELCAweDdDOUYsIDB4MEQwRCwgMHg3Q0ExLCAweDIyNUYsIDB4N0NBMiwgMHgyMjVDLAorICAgIDB4N0NBMywgMHgxRkUzLCAweDdDQTUsIDB4MEQwRSwgMHg3Q0E3LCAweDM2RUQsIDB4N0NBOCwgMHgyMjVFLAorICAgIDB4N0NBRiwgMHgyNEZFLCAweDdDQjEsIDB4MEVCQiwgMHg3Q0IyLCAweDI0RkMsIDB4N0NCMywgMHgwRUJDLAorICAgIDB4N0NCNCwgMHgyNEZELCAweDdDQjUsIDB4MEVCRCwgMHg3Q0I5LCAweDEwNTgsIDB4N0NCQSwgMHgyNzdELAorICAgIDB4N0NCQiwgMHgyNzdBLCAweDdDQkMsIDB4Mjc3QywgMHg3Q0JELCAweDEwNTksIDB4N0NCRSwgMHgxMDVBLAorICAgIDB4N0NCRiwgMHgyNzdCLCAweDdDQzUsIDB4MjlCMCwgMHg3Q0M4LCAweDI5QjEsIDB4N0NDQSwgMHgxMUQ0LAorICAgIDB4N0NDQiwgMHgyOUIzLCAweDdDQ0MsIDB4MjlCMiwgMHg3Q0NFLCAweDAxMjEsIDB4N0NEMCwgMHgyQzExLAorICAgIDB4N0NEMSwgMHgyQzEyLCAweDdDRDIsIDB4MkMwRSwgMHg3Q0Q0LCAweDJDMEYsIDB4N0NENSwgMHgxMzFFLAorICAgIDB4N0NENiwgMHgxMzFGLCAweDdDRDcsIDB4MkMxMCwgMHg3Q0Q5LCAweDE0MzMsIDB4N0NEQywgMHgxNDJGLAorICAgIDB4N0NERCwgMHgxNDM0LCAweDdDREUsIDB4MTQzMCwgMHg3Q0RGLCAweDE0MzIsIDB4N0NFMCwgMHgxNDJFLAorICAgIDB4N0NFMiwgMHgxNDMxLCAweDdDRTcsIDB4MTUwQiwgMHg3Q0U4LCAweDJERUQsIDB4N0NFQSwgMHgzMEQ5LAorICAgIDB4N0NFQywgMHgzMEQ4LCAweDdDRUUsIDB4MzIxMywgMHg3Q0VGLCAweDE2MkQsIDB4N0NGMCwgMHgxNjJFLAorICAgIDB4N0NGMSwgMHgzM0ExLCAweDdDRjIsIDB4MzJFQiwgMHg3Q0Y0LCAweDMzQTAsIDB4N0NGNiwgMHgzNEQ4LAorICAgIDB4N0NGNywgMHgzNTFELCAweDdDRjgsIDB4MDNGOCwgMHg3Q0ZCLCAweDA0RkIsIDB4N0NGRCwgMHgxQTI2LAorICAgIDB4N0NGRSwgMHgwNjY3LCAweDdEMDAsIDB4MDdDRiwgMHg3RDAxLCAweDFCQzIsIDB4N0QwMiwgMHgwN0NELAorICAgIDB4N0QwMywgMHgxQkMwLCAweDdEMDQsIDB4MDdEMiwgMHg3RDA1LCAweDA3Q0UsIDB4N0QwNiwgMHgwN0QzLAorICAgIDB4N0QwNywgMHgwN0QxLCAweDdEMDgsIDB4MUJDMSwgMHg3RDA5LCAweDA3RDAsIDB4N0QwQSwgMHgwOTZFLAorICAgIDB4N0QwQiwgMHgwOTZELCAweDdEMEMsIDB4MURBNywgMHg3RDBELCAweDA5NzYsIDB4N0QwRSwgMHgxREEwLAorICAgIDB4N0QwRiwgMHgxREE2LCAweDdEMTAsIDB4MDk3MiwgMHg3RDExLCAweDFEOUYsIDB4N0QxMiwgMHgxREE1LAorICAgIDB4N0QxMywgMHgxREEzLCAweDdEMTQsIDB4MDk3MSwgMHg3RDE1LCAweDA5NzMsIDB4N0QxNiwgMHgxREEyLAorICAgIDB4N0QxNywgMHgwOTZDLCAweDdEMTgsIDB4MURBMSwgMHg3RDE5LCAweDA5NzcsIDB4N0QxQSwgMHgwOTc0LAorICAgIDB4N0QxQiwgMHgwOTc4LCAweDdEMUMsIDB4MDk3NSwgMHg3RDFELCAweDFEOUUsIDB4N0QxRSwgMHgxRDlELAorICAgIDB4N0QxRiwgMHgxREE0LCAweDdEMjAsIDB4MDk2RiwgMHg3RDIxLCAweDA5NkIsIDB4N0QyMiwgMHgwOTcwLAorICAgIDB4N0QyOCwgMHgxRkYyLCAweDdEMjksIDB4MUZFQiwgMHg3RDJCLCAweDBEMTMsIDB4N0QyQywgMHgxRkVBLAorICAgIDB4N0QyRSwgMHgwQjU2LCAweDdEMkYsIDB4MEI1RCwgMHg3RDMwLCAweDBCNUEsIDB4N0QzMSwgMHgwQjYwLAorICAgIDB4N0QzMiwgMHgwQjVGLCAweDdEMzMsIDB4MEI1QiwgMHg3RDM1LCAweDFGRTQsIDB4N0QzNiwgMHgxRkU3LAorICAgIDB4N0QzOCwgMHgxRkU2LCAweDdEMzksIDB4MEI1NywgMHg3RDNBLCAweDFGRTgsIDB4N0QzQiwgMHgxRkYxLAorICAgIDB4N0QzQywgMHgwQjU4LCAweDdEM0QsIDB4MUZFNSwgMHg3RDNFLCAweDFGRUUsIDB4N0QzRiwgMHgxRkVGLAorICAgIDB4N0Q0MCwgMHgwQjU5LCAweDdENDEsIDB4MUZFQywgMHg3RDQyLCAweDBCNUUsIDB4N0Q0MywgMHgwQjU0LAorICAgIDB4N0Q0NCwgMHgwQjVDLCAweDdENDUsIDB4MUZFOSwgMHg3RDQ2LCAweDBCNTMsIDB4N0Q0NywgMHgxRkVELAorICAgIDB4N0Q0QSwgMHgxRkYwLCAweDdENEUsIDB4MjI3MCwgMHg3RDRGLCAweDIyNjcsIDB4N0Q1MCwgMHgwRDEwLAorICAgIDB4N0Q1MSwgMHgyMjZFLCAweDdENTIsIDB4MjI2QiwgMHg3RDUzLCAweDIyNjMsIDB4N0Q1NCwgMHgyMjZDLAorICAgIDB4N0Q1NSwgMHgwRDEyLCAweDdENTYsIDB4MjI2NCwgMHg3RDU4LCAweDIyNjAsIDB4N0Q1QiwgMHgwRUMzLAorICAgIDB4N0Q1QywgMHgyMjY5LCAweDdENUUsIDB4MEQwRiwgMHg3RDVGLCAweDIyNkYsIDB4N0Q2MSwgMHgwRDE2LAorICAgIDB4N0Q2MiwgMHgwRDE4LCAweDdENjMsIDB4MjI2MiwgMHg3RDY2LCAweDBEMTcsIDB4N0Q2NywgMHgyMjY1LAorICAgIDB4N0Q2OCwgMHgwRDExLCAweDdENjksIDB4MjI2RCwgMHg3RDZBLCAweDIyNjYsIDB4N0Q2QiwgMHgyMjZBLAorICAgIDB4N0Q2RCwgMHgyMjY4LCAweDdENkUsIDB4MEQxNCwgMHg3RDZGLCAweDIyNjEsIDB4N0Q3MCwgMHgwRDE5LAorICAgIDB4N0Q3MSwgMHgwQjU1LCAweDdENzIsIDB4MEQxNSwgMHg3RDczLCAweDBEMUEsIDB4N0Q3OSwgMHgwRUJGLAorICAgIDB4N0Q3QSwgMHgyNTA1LCAweDdEN0IsIDB4MjUwNywgMHg3RDdDLCAweDI1MDksIDB4N0Q3RCwgMHgyNTBELAorICAgIDB4N0Q3RiwgMHgyNTAzLCAweDdEODAsIDB4MjUwMSwgMHg3RDgxLCAweDBFQzEsIDB4N0Q4MywgMHgyNTA4LAorICAgIDB4N0Q4NCwgMHgyNTBDLCAweDdEODUsIDB4MjUwNCwgMHg3RDg2LCAweDI1MDAsIDB4N0Q4OCwgMHgyNEZGLAorICAgIDB4N0Q4QywgMHgyNTBBLCAweDdEOEQsIDB4MjUwMiwgMHg3RDhFLCAweDI1MDYsIDB4N0Q4RiwgMHgwRUMyLAorICAgIDB4N0Q5MSwgMHgwRUMwLCAweDdEOTIsIDB4MjUwRSwgMHg3RDkzLCAweDBFQkUsIDB4N0Q5NCwgMHgyNTBCLAorICAgIDB4N0Q5NiwgMHgyNzhFLCAweDdEOUMsIDB4MTA1RCwgMHg3RDlELCAweDI3ODYsIDB4N0Q5RSwgMHgxMUUxLAorICAgIDB4N0Q5RiwgMHgyNzkwLCAweDdEQTAsIDB4MTA2MCwgMHg3REExLCAweDI3OTQsIDB4N0RBMiwgMHgxMDY2LAorICAgIDB4N0RBMywgMHgyNzgxLCAweDdEQTYsIDB4Mjc5MSwgMHg3REE3LCAweDI3N0UsIDB4N0RBOSwgMHgyNzkzLAorICAgIDB4N0RBQSwgMHgyNzgyLCAweDdEQUMsIDB4MTA2RCwgMHg3REFELCAweDEwNkEsIDB4N0RBRSwgMHgyNzkyLAorICAgIDB4N0RBRiwgMHgyNzhDLCAweDdEQjAsIDB4MTA1QywgMHg3REIxLCAweDEwNjQsIDB4N0RCMiwgMHgxMDYzLAorICAgIDB4N0RCNCwgMHgxMDYyLCAweDdEQjUsIDB4MTA2OCwgMHg3REI3LCAweDI3N0YsIDB4N0RCOCwgMHgxMDY5LAorICAgIDB4N0RCOSwgMHgyNzhELCAweDdEQkEsIDB4MTA2NSwgMHg3REJCLCAweDEwNUIsIDB4N0RCQywgMHgyNzhGLAorICAgIDB4N0RCRCwgMHgxMDVFLCAweDdEQkUsIDB4MTA1RiwgMHg3REJGLCAweDEwNjcsIDB4N0RDMCwgMHgyNzg0LAorICAgIDB4N0RDMSwgMHgyNzgzLCAweDdEQzIsIDB4Mjc4MCwgMHg3REM0LCAweDI3ODgsIDB4N0RDNSwgMHgyNzg1LAorICAgIDB4N0RDNiwgMHgyNzg5LCAweDdEQzcsIDB4MTA2QywgMHg3REM5LCAweDI3OTUsIDB4N0RDQSwgMHgxMDYxLAorICAgIDB4N0RDQiwgMHgyNzhBLCAweDdEQ0MsIDB4Mjc4QiwgMHg3RENFLCAweDI3ODcsIDB4N0REMiwgMHgxMDZCLAorICAgIDB4N0RENywgMHgyOUI4LCAweDdERDgsIDB4MTFEOSwgMHg3REQ5LCAweDExRTIsIDB4N0REQSwgMHgxMURFLAorICAgIDB4N0REQiwgMHgyOUI1LCAweDdEREQsIDB4MTFEQiwgMHg3RERFLCAweDExREYsIDB4N0RERiwgMHgyOUMxLAorICAgIDB4N0RFMCwgMHgxMUQ1LCAweDdERTEsIDB4MjlCOSwgMHg3REUzLCAweDExREQsIDB4N0RFNiwgMHgyOUJDLAorICAgIDB4N0RFNywgMHgyOUI3LCAweDdERTgsIDB4MTFEQywgMHg3REU5LCAweDExRTAsIDB4N0RFQSwgMHgyOUI2LAorICAgIDB4N0RFQywgMHgxMURBLCAweDdERUUsIDB4MjlDMCwgMHg3REVGLCAweDExRDcsIDB4N0RGMCwgMHgyOUJGLAorICAgIDB4N0RGMSwgMHgyOUJFLCAweDdERjIsIDB4MTFFMywgMHg3REYzLCAweDI4QzgsIDB4N0RGNCwgMHgxMUQ2LAorICAgIDB4N0RGNiwgMHgyOUJELCAweDdERjcsIDB4MjlCNCwgMHg3REY5LCAweDExRTQsIDB4N0RGQSwgMHgyOUJCLAorICAgIDB4N0RGQiwgMHgxMUQ4LCAweDdFMDMsIDB4MjlCQSwgMHg3RTA4LCAweDEzMjIsIDB4N0UwOSwgMHgxMzI3LAorICAgIDB4N0UwQSwgMHgxMzIwLCAweDdFMEIsIDB4MkMxRiwgMHg3RTBDLCAweDJDMTYsIDB4N0UwRCwgMHgyQzIyLAorICAgIDB4N0UwRSwgMHgyQzFBLCAweDdFMEYsIDB4MkMyMCwgMHg3RTEwLCAweDEzMjgsIDB4N0UxMSwgMHgxMzIxLAorICAgIDB4N0UxMiwgMHgyQzEzLCAweDdFMTMsIDB4MkMxOSwgMHg3RTE0LCAweDJDMjMsIDB4N0UxNSwgMHgyQzFDLAorICAgIDB4N0UxNiwgMHgyQzIxLCAweDdFMTcsIDB4MkMxNSwgMHg3RTFBLCAweDJDMUQsIDB4N0UxQiwgMHgxMzIzLAorICAgIDB4N0UxQywgMHgyQzFCLCAweDdFMUQsIDB4MTMyNiwgMHg3RTFFLCAweDEzMjUsIDB4N0UxRiwgMHgyQzE3LAorICAgIDB4N0UyMCwgMHgyQzE4LCAweDdFMjEsIDB4MkMxNCwgMHg3RTIyLCAweDJDMUUsIDB4N0UyMywgMHgxMzI0LAorICAgIDB4N0UyNCwgMHgyQzI1LCAweDdFMjUsIDB4MkMyNCwgMHg3RTI5LCAweDJERjgsIDB4N0UyQSwgMHgyREY0LAorICAgIDB4N0UyQiwgMHgxNDNCLCAweDdFMkQsIDB4MkRFRSwgMHg3RTJFLCAweDE0MzUsIDB4N0UyRiwgMHgxNDQ1LAorICAgIDB4N0UzMCwgMHgyREZBLCAweDdFMzEsIDB4MTQzRCwgMHg3RTMyLCAweDE0MzksIDB4N0UzMywgMHgyREYxLAorICAgIDB4N0UzNCwgMHgxNDQwLCAweDdFMzUsIDB4MTQ0MywgMHg3RTM2LCAweDJERkMsIDB4N0UzNywgMHgxNDM4LAorICAgIDB4N0UzOCwgMHgyREYzLCAweDdFMzksIDB4MTQ0MSwgMHg3RTNBLCAweDJERkUsIDB4N0UzQiwgMHgyREZCLAorICAgIDB4N0UzQywgMHgyREVGLCAweDdFM0QsIDB4MTQzQywgMHg3RTNFLCAweDE0MzYsIDB4N0UzRiwgMHgxNDQ0LAorICAgIDB4N0U0MCwgMHgyREY2LCAweDdFNDEsIDB4MTQzRiwgMHg3RTQyLCAweDJERjAsIDB4N0U0MywgMHgxNDNBLAorICAgIDB4N0U0NCwgMHgyREZELCAweDdFNDUsIDB4MTQzRSwgMHg3RTQ2LCAweDE0MzcsIDB4N0U0NywgMHgyREY3LAorICAgIDB4N0U0OCwgMHgxNDQyLCAweDdFNDksIDB4MkRGNSwgMHg3RTRDLCAweDJERjksIDB4N0U1MCwgMHgyRjgzLAorICAgIDB4N0U1MSwgMHgyRjg5LCAweDdFNTIsIDB4MTUxMSwgMHg3RTUzLCAweDJGOEMsIDB4N0U1NCwgMHgxNTBDLAorICAgIDB4N0U1NSwgMHgxNTBELCAweDdFNTYsIDB4MkY4NCwgMHg3RTU3LCAweDJGOEIsIDB4N0U1OCwgMHgyRjg2LAorICAgIDB4N0U1OSwgMHgxNTEyLCAweDdFNUEsIDB4MTUwRiwgMHg3RTVDLCAweDJGODIsIDB4N0U1RSwgMHgxNTBFLAorICAgIDB4N0U1RiwgMHgyRjg4LCAweDdFNjAsIDB4MkY4QSwgMHg3RTYxLCAweDE1MTAsIDB4N0U2MiwgMHgyRjg3LAorICAgIDB4N0U2MywgMHgyRjg1LCAweDdFNjgsIDB4MzBFMywgMHg3RTY5LCAweDE1QUMsIDB4N0U2QSwgMHgxNUFELAorICAgIDB4N0U2QiwgMHgxNUE5LCAweDdFNkQsIDB4MTVBQSwgMHg3RTZGLCAweDMwREYsIDB4N0U3MCwgMHgzMERELAorICAgIDB4N0U3MiwgMHgzMEUxLCAweDdFNzMsIDB4MTVBRSwgMHg3RTc0LCAweDMwRTIsIDB4N0U3NSwgMHgzMERCLAorICAgIDB4N0U3NiwgMHgzMERBLCAweDdFNzcsIDB4MzBERSwgMHg3RTc4LCAweDMwREMsIDB4N0U3OSwgMHgxNUFCLAorICAgIDB4N0U3QSwgMHgzMEUwLCAweDdFN0IsIDB4MzIxNCwgMHg3RTdDLCAweDE2MzEsIDB4N0U3RCwgMHgxNjMwLAorICAgIDB4N0U3RSwgMHgzMjE1LCAweDdFODAsIDB4MzIxNywgMHg3RTgxLCAweDMyMTYsIDB4N0U4MiwgMHgxNjMyLAorICAgIDB4N0U4NiwgMHgzMkYwLCAweDdFODcsIDB4MzJFRCwgMHg3RTg4LCAweDMyRUUsIDB4N0U4QSwgMHgzMkVDLAorICAgIDB4N0U4QiwgMHgzMkVGLCAweDdFOEMsIDB4MTY4MywgMHg3RThELCAweDMyRjEsIDB4N0U4RiwgMHgxNjgyLAorICAgIDB4N0U5MSwgMHgzM0EyLCAweDdFOTMsIDB4MTcwMywgMHg3RTk0LCAweDE3MDUsIDB4N0U5NSwgMHgzNDJDLAorICAgIDB4N0U5NiwgMHgxNzA0LCAweDdFOTcsIDB4MzQ5NCwgMHg3RTk4LCAweDM0REEsIDB4N0U5OSwgMHgzNERDLAorICAgIDB4N0U5QSwgMHgzNEQ5LCAweDdFOUIsIDB4MzREQiwgMHg3RTlDLCAweDE3NTksIDB4N0YzNiwgMHgwM0Y5LAorICAgIDB4N0YzOCwgMHgwN0Q0LCAweDdGMzksIDB4MUQxRiwgMHg3RjNBLCAweDA5NzksIDB4N0YzRCwgMHgwQjYxLAorICAgIDB4N0YzRSwgMHgyMjcxLCAweDdGM0YsIDB4MjI3MiwgMHg3RjQzLCAweDJDMjYsIDB4N0Y0NCwgMHgxNDQ2LAorICAgIDB4N0Y0NSwgMHgyREZGLCAweDdGNDgsIDB4MTUxMywgMHg3RjRBLCAweDMwRTUsIDB4N0Y0QiwgMHgzMEU0LAorICAgIDB4N0Y0QywgMHgxNjMzLCAweDdGNEQsIDB4MzJGMiwgMHg3RjRGLCAweDMzQTMsIDB4N0Y1MCwgMHgxNzI2LAorICAgIDB4N0Y1MSwgMHgxODEyLCAweDdGNTQsIDB4MDY2OCwgMHg3RjU1LCAweDA0RkMsIDB4N0Y1OCwgMHgxQkMzLAorICAgIDB4N0Y1QiwgMHgxREFELCAweDdGNUMsIDB4MURBOCwgMHg3RjVELCAweDFEQUMsIDB4N0Y1RSwgMHgxREFBLAorICAgIDB4N0Y1RiwgMHgwOTdBLCAweDdGNjAsIDB4MURBQiwgMHg3RjYxLCAweDFEQTksIDB4N0Y2MywgMHgxRkYzLAorICAgIDB4N0Y2NSwgMHgyMjczLCAweDdGNjYsIDB4MjI3NCwgMHg3RjY3LCAweDI1MTEsIDB4N0Y2OCwgMHgyNTEyLAorICAgIDB4N0Y2OSwgMHgwRUM1LCAweDdGNkEsIDB4MEVDNiwgMHg3RjZCLCAweDI1MTAsIDB4N0Y2QywgMHgyNTEzLAorICAgIDB4N0Y2RCwgMHgyNTBGLCAweDdGNkUsIDB4MEVDNCwgMHg3RjcwLCAweDEwNkUsIDB4N0Y3MiwgMHgwRUM3LAorICAgIDB4N0Y3MywgMHgyNzk2LCAweDdGNzUsIDB4MTFFNSwgMHg3Rjc2LCAweDI5QzIsIDB4N0Y3NywgMHgxMUU2LAorICAgIDB4N0Y3OSwgMHgxMzI5LCAweDdGN0EsIDB4MkMyOSwgMHg3RjdCLCAweDJDMjcsIDB4N0Y3QywgMHgyQzI4LAorICAgIDB4N0Y3RCwgMHgyRTAyLCAweDdGN0UsIDB4MkUwMSwgMHg3RjdGLCAweDJFMDAsIDB4N0Y4MywgMHgzMEU2LAorICAgIDB4N0Y4NSwgMHgxNUFGLCAweDdGODYsIDB4MzBFNywgMHg3Rjg3LCAweDMzQTQsIDB4N0Y4OCwgMHgxNzI3LAorICAgIDB4N0Y4OSwgMHgzNDk1LCAweDdGOEEsIDB4MDNGQSwgMHg3RjhCLCAweDA2NkEsIDB4N0Y4QywgMHgwNjY5LAorICAgIDB4N0Y4RCwgMHgxQkM1LCAweDdGOEUsIDB4MDdENSwgMHg3RjkxLCAweDFCQzQsIDB4N0Y5MiwgMHgxREFGLAorICAgIDB4N0Y5NCwgMHgwOTdCLCAweDdGOTUsIDB4MUZGNCwgMHg3Rjk2LCAweDFEQUUsIDB4N0Y5QSwgMHgwQjYzLAorICAgIDB4N0Y5QiwgMHgxRkY3LCAweDdGOUMsIDB4MUZGNSwgMHg3RjlELCAweDFGRjYsIDB4N0Y5RSwgMHgwQjYyLAorICAgIDB4N0ZBMCwgMHgyMjc2LCAweDdGQTEsIDB4MjI3NywgMHg3RkEyLCAweDIyNzUsIDB4N0ZBNCwgMHgwRUNBLAorICAgIDB4N0ZBNSwgMHgyNTE1LCAweDdGQTYsIDB4MjUxNCwgMHg3RkE3LCAweDI1MTYsIDB4N0ZBOCwgMHgwRUM5LAorICAgIDB4N0ZBOSwgMHgwRUM4LCAweDdGQUMsIDB4MjlDMywgMHg3RkFELCAweDI5QzUsIDB4N0ZBRiwgMHgxMUU3LAorICAgIDB4N0ZCMCwgMHgyOUM0LCAweDdGQjEsIDB4MkMyQSwgMHg3RkIyLCAweDEzMkEsIDB4N0ZCMywgMHgyRjhFLAorICAgIDB4N0ZCNSwgMHgyRjhELCAweDdGQjYsIDB4MTVCMCwgMHg3RkI3LCAweDMwRTgsIDB4N0ZCOCwgMHgxNUIyLAorICAgIDB4N0ZCOSwgMHgxNUIxLCAweDdGQkEsIDB4MzIxOCwgMHg3RkJCLCAweDMyRjMsIDB4N0ZCQywgMHgxNjg0LAorICAgIDB4N0ZCRCwgMHgwM0ZCLCAweDdGQkUsIDB4MUJDNiwgMHg3RkJGLCAweDA3RDYsIDB4N0ZDMCwgMHgxREIyLAorICAgIDB4N0ZDMSwgMHgwOTdELCAweDdGQzIsIDB4MURCMSwgMHg3RkMzLCAweDFEQjAsIDB4N0ZDNSwgMHgwOTdDLAorICAgIDB4N0ZDNywgMHgxRkZELCAweDdGQzksIDB4MUZGRiwgMHg3RkNBLCAweDFGRjgsIDB4N0ZDQiwgMHgxRkY5LAorICAgIDB4N0ZDQywgMHgwQjY0LCAweDdGQ0QsIDB4MUZGQSwgMHg3RkNFLCAweDBCNjUsIDB4N0ZDRiwgMHgxRkZFLAorICAgIDB4N0ZEMCwgMHgxRkZCLCAweDdGRDEsIDB4MUZGQywgMHg3RkQyLCAweDBCNjYsIDB4N0ZENCwgMHgwRDFDLAorICAgIDB4N0ZENSwgMHgwRDFELCAweDdGRDcsIDB4MjI3OCwgMHg3RkRCLCAweDI1MTcsIDB4N0ZEQywgMHgyNTE4LAorICAgIDB4N0ZERSwgMHgyNzlBLCAweDdGREYsIDB4MTA3MSwgMHg3RkUwLCAweDEwNkYsIDB4N0ZFMSwgMHgxMDcwLAorICAgIDB4N0ZFMiwgMHgyNzk3LCAweDdGRTMsIDB4Mjc5OCwgMHg3RkU1LCAweDI3OTksIDB4N0ZFNiwgMHgyOUNBLAorICAgIDB4N0ZFOCwgMHgyOUNCLCAweDdGRTksIDB4MTFFOCwgMHg3RkVBLCAweDI5QzgsIDB4N0ZFQiwgMHgyOUM3LAorICAgIDB4N0ZFQywgMHgyOUM5LCAweDdGRUQsIDB4MjlDNiwgMHg3RkVFLCAweDEzMkQsIDB4N0ZFRiwgMHgyQzJCLAorICAgIDB4N0ZGMCwgMHgxMzJCLCAweDdGRjEsIDB4MTMyQywgMHg3RkYyLCAweDJFMDQsIDB4N0ZGMywgMHgxNDQ3LAorICAgIDB4N0ZGNCwgMHgyRTAzLCAweDdGRjUsIDB4MkVGRiwgMHg3RkY3LCAweDJGOEYsIDB4N0ZGOCwgMHgyRjkwLAorICAgIDB4N0ZGOSwgMHgxNTE0LCAweDdGRkIsIDB4MTUxNSwgMHg3RkZDLCAweDE0NDgsIDB4N0ZGRCwgMHgzMEU5LAorICAgIDB4N0ZGRSwgMHgzMEVBLCAweDdGRkYsIDB4MzIxOSwgMHg4MDAwLCAweDE2MzQsIDB4ODAwMSwgMHgwM0ZDLAorICAgIDB4ODAwMywgMHgwM0ZELCAweDgwMDQsIDB4MDk3RiwgMHg4MDA1LCAweDA2NkIsIDB4ODAwNiwgMHgwOTdFLAorICAgIDB4ODAwNywgMHgxQkM3LCAweDgwMEIsIDB4MEQxRSwgMHg4MDBDLCAweDAzRkUsIDB4ODAwRCwgMHgwN0Q4LAorICAgIDB4ODAwRSwgMHgxQkM4LCAweDgwMEYsIDB4MUJDOSwgMHg4MDEwLCAweDA3RDcsIDB4ODAxMSwgMHgwN0Q5LAorICAgIDB4ODAxMiwgMHgwM0ZGLCAweDgwMTQsIDB4MUJDQSwgMHg4MDE1LCAweDA5ODEsIDB4ODAxNiwgMHgxREIzLAorICAgIDB4ODAxNywgMHgwOTgzLCAweDgwMTgsIDB4MDk4MCwgMHg4MDE5LCAweDA5ODIsIDB4ODAxQiwgMHgyMDAyLAorICAgIDB4ODAxQywgMHgwQjY3LCAweDgwMUUsIDB4MjAwMSwgMHg4MDFGLCAweDIwMDAsIDB4ODAyMSwgMHgyNTE5LAorICAgIDB4ODAyNCwgMHgyNzlCLCAweDgwMjYsIDB4MTFFOSwgMHg4MDI4LCAweDEzMkUsIDB4ODAyOSwgMHgyQzJELAorICAgIDB4ODAyQSwgMHgyQzJDLCAweDgwMkMsIDB4MkUwNSwgMHg4MDMwLCAweDMyRjQsIDB4ODAzMywgMHgwNDAwLAorICAgIDB4ODAzNCwgMHgxOEQ4LCAweDgwMzUsIDB4MUEyNywgMHg4MDM2LCAweDA3REEsIDB4ODAzNywgMHgxQkNCLAorICAgIDB4ODAzOSwgMHgxREI1LCAweDgwM0QsIDB4MDk4NCwgMHg4MDNFLCAweDFEQjQsIDB4ODAzRiwgMHgwOTg1LAorICAgIDB4ODA0MywgMHgyMDA0LCAweDgwNDYsIDB4MEI2OSwgMHg4MDQ3LCAweDIwMDMsIDB4ODA0OCwgMHgyMDA1LAorICAgIDB4ODA0QSwgMHgwQjY4LCAweDgwNEYsIDB4MjI3QSwgMHg4MDUwLCAweDIyN0IsIDB4ODA1MSwgMHgyMjc5LAorICAgIDB4ODA1MiwgMHgwRDFGLCAweDgwNTYsIDB4MEVDQiwgMHg4MDU4LCAweDBFQ0MsIDB4ODA1QSwgMHgxMDczLAorICAgIDB4ODA1QywgMHgyNzlELCAweDgwNUQsIDB4Mjc5QywgMHg4MDVFLCAweDEwNzIsIDB4ODA2NCwgMHgyOUNDLAorICAgIDB4ODA2NywgMHgyOUNELCAweDgwNkMsIDB4MkMyRSwgMHg4MDZGLCAweDE0NEMsIDB4ODA3MCwgMHgxNDRCLAorICAgIDB4ODA3MSwgMHgxNDQ5LCAweDgwNzIsIDB4MTQ0QSwgMHg4MDczLCAweDE0NEQsIDB4ODA3NSwgMHgyRjkxLAorICAgIDB4ODA3NiwgMHgxNTE3LCAweDgwNzcsIDB4MTUxNiwgMHg4MDc4LCAweDMwRUIsIDB4ODA3OSwgMHgzMjFBLAorICAgIDB4ODA3RCwgMHgxNkQzLCAweDgwN0UsIDB4MTZEMiwgMHg4MDdGLCAweDA0MDEsIDB4ODA4MiwgMHgxQ0VDLAorICAgIDB4ODA4NCwgMHgwRUNFLCAweDgwODUsIDB4MEQyMCwgMHg4MDg2LCAweDBFQ0QsIDB4ODA4NywgMHgxMDc0LAorICAgIDB4ODA4OSwgMHgwNDAyLCAweDgwOEEsIDB4MTdCMywgMHg4MDhCLCAweDA0MDMsIDB4ODA4QywgMHgwNDA0LAorICAgIDB4ODA4RiwgMHgxQTI4LCAweDgwOTAsIDB4MThEQiwgMHg4MDkyLCAweDE4REMsIDB4ODA5MywgMHgwNEZFLAorICAgIDB4ODA5NSwgMHgxOEQ5LCAweDgwOTYsIDB4MDRGRCwgMHg4MDk4LCAweDA1MDAsIDB4ODA5OSwgMHgxOERBLAorICAgIDB4ODA5QSwgMHgwNTAyLCAweDgwOUIsIDB4MDUwMSwgMHg4MDlDLCAweDE4REQsIDB4ODA5RCwgMHgwNEZGLAorICAgIDB4ODBBMSwgMHgwNjcwLCAweDgwQTIsIDB4MDY2RSwgMHg4MEEzLCAweDFBMkEsIDB4ODBBNSwgMHgwNjZELAorICAgIDB4ODBBOSwgMHgwNjcyLCAweDgwQUEsIDB4MDY3NCwgMHg4MEFCLCAweDA2NzEsIDB4ODBBRCwgMHgxQTJELAorICAgIDB4ODBBRSwgMHgxQTI5LCAweDgwQUYsIDB4MDY3NSwgMHg4MEIxLCAweDA2NkYsIDB4ODBCMiwgMHgwNTAzLAorICAgIDB4ODBCNCwgMHgwNjczLCAweDgwQjUsIDB4MUEyQywgMHg4MEI4LCAweDFBMkIsIDB4ODBCQSwgMHgwNjZDLAorICAgIDB4ODBDMiwgMHgxQkQxLCAweDgwQzMsIDB4MDdERSwgMHg4MEM0LCAweDA3REYsIDB4ODBDNSwgMHgxQkQzLAorICAgIDB4ODBDNywgMHgxQkNELCAweDgwQzgsIDB4MUJEMCwgMHg4MEM5LCAweDFCRDksIDB4ODBDQSwgMHgxQkQ3LAorICAgIDB4ODBDQywgMHgwN0UwLCAweDgwQ0QsIDB4MUJERCwgMHg4MENFLCAweDA3RTMsIDB4ODBDRiwgMHgxQkRBLAorICAgIDB4ODBEMCwgMHgxQkQyLCAweDgwRDEsIDB4MUJDRiwgMHg4MEQ0LCAweDIyN0QsIDB4ODBENSwgMHgxQkQ4LAorICAgIDB4ODBENiwgMHgwN0RCLCAweDgwRDcsIDB4MUJEQiwgMHg4MEQ4LCAweDFCQ0MsIDB4ODBEOSwgMHgxQkQ1LAorICAgIDB4ODBEQSwgMHgwN0RELCAweDgwREIsIDB4MDdFMiwgMHg4MERDLCAweDFCRDYsIDB4ODBERCwgMHgwN0U2LAorICAgIDB4ODBERSwgMHgwN0U0LCAweDgwRTAsIDB4MUJDRSwgMHg4MEUxLCAweDA3RTEsIDB4ODBFMywgMHgxQkQ0LAorICAgIDB4ODBFNCwgMHgwN0U1LCAweDgwRTUsIDB4MDdEQywgMHg4MEU2LCAweDFCREMsIDB4ODBFRCwgMHgwOThBLAorICAgIDB4ODBFRiwgMHgwOTkzLCAweDgwRjAsIDB4MDk4OCwgMHg4MEYxLCAweDA5ODYsIDB4ODBGMiwgMHgxREI3LAorICAgIDB4ODBGMywgMHgwOThFLCAweDgwRjQsIDB4MDk4QiwgMHg4MEY1LCAweDFEQjksIDB4ODBGOCwgMHgwOThELAorICAgIDB4ODBGOSwgMHgxREI4LCAweDgwRkEsIDB4MURCNiwgMHg4MEZCLCAweDFEQkIsIDB4ODBGQywgMHgwOTkyLAorICAgIDB4ODBGRCwgMHgwOTkwLCAweDgwRkUsIDB4MjI3QywgMHg4MTAwLCAweDFEQkMsIDB4ODEwMSwgMHgxREJBLAorICAgIDB4ODEwMiwgMHgwOTg3LCAweDgxMDUsIDB4MDk4OSwgMHg4MTA2LCAweDA5OEMsIDB4ODEwOCwgMHgwOThGLAorICAgIDB4ODEwQSwgMHgwOTkxLCAweDgxMTUsIDB4MjAwRiwgMHg4MTE2LCAweDBCNkIsIDB4ODExOCwgMHgyMDA2LAorICAgIDB4ODExOSwgMHgyMDA4LCAweDgxMUIsIDB4MjAwOSwgMHg4MTFELCAweDIwMTEsIDB4ODExRSwgMHgyMDBELAorICAgIDB4ODExRiwgMHgyMDBCLCAweDgxMjEsIDB4MjAwRSwgMHg4MTIyLCAweDIwMTIsIDB4ODEyMywgMHgwQjZDLAorICAgIDB4ODEyNCwgMHgwQjcwLCAweDgxMjUsIDB4MjAwNywgMHg4MTI3LCAweDIwMTAsIDB4ODEyOSwgMHgwQjZFLAorICAgIDB4ODEyQiwgMHgwQjZELCAweDgxMkMsIDB4MjAwQywgMHg4MTJELCAweDIwMEEsIDB4ODEyRiwgMHgwQjZBLAorICAgIDB4ODEzMCwgMHgwQjZGLCAweDgxMzksIDB4MEQyNiwgMHg4MTNBLCAweDIyODUsIDB4ODEzRCwgMHgyMjgzLAorICAgIDB4ODEzRSwgMHgwRDI4LCAweDgxNDMsIDB4MjI3RSwgMHg4MTQ0LCAweDI1MjcsIDB4ODE0NiwgMHgwRDI3LAorICAgIDB4ODE0NywgMHgyMjgyLCAweDgxNEEsIDB4MjI3RiwgMHg4MTRCLCAweDBEMjMsIDB4ODE0QywgMHgwRDI5LAorICAgIDB4ODE0RCwgMHgyMjg0LCAweDgxNEUsIDB4MEQyNSwgMHg4MTRGLCAweDIyODEsIDB4ODE1MCwgMHgxMDc1LAorICAgIDB4ODE1MSwgMHgwRDI0LCAweDgxNTIsIDB4MjI4MCwgMHg4MTUzLCAweDBEMkEsIDB4ODE1NCwgMHgwRDIyLAorICAgIDB4ODE1NSwgMHgwRDIxLCAweDgxNUIsIDB4MjUxRiwgMHg4MTVDLCAweDI1MUQsIDB4ODE1RSwgMHgyNTIzLAorICAgIDB4ODE2MCwgMHgyNTFCLCAweDgxNjEsIDB4MjUyOCwgMHg4MTYyLCAweDI1MjAsIDB4ODE2NCwgMHgyNTFBLAorICAgIDB4ODE2NSwgMHgwRUQyLCAweDgxNjYsIDB4MEVEOCwgMHg4MTY3LCAweDI1MjUsIDB4ODE2OSwgMHgyNTFFLAorICAgIDB4ODE2QiwgMHgwRUQ1LCAweDgxNkUsIDB4MEVEMywgMHg4MTZGLCAweDI1MjYsIDB4ODE3MCwgMHgwRUQwLAorICAgIDB4ODE3MSwgMHgwRUNGLCAweDgxNzIsIDB4MjUyMSwgMHg4MTczLCAweDBFRDQsIDB4ODE3NCwgMHgwRDJCLAorICAgIDB4ODE3NiwgMHgyNTI0LCAweDgxNzcsIDB4MjUxQywgMHg4MTc4LCAweDBFRDEsIDB4ODE3OSwgMHgwRUQ2LAorICAgIDB4ODE3QSwgMHgwRUQ3LCAweDgxN0YsIDB4MTA3QSwgMHg4MTgwLCAweDEwNzYsIDB4ODE4MiwgMHgxMDdCLAorICAgIDB4ODE4MywgMHgyN0EwLCAweDgxODYsIDB4Mjc5RiwgMHg4MTg3LCAweDI3QTEsIDB4ODE4OCwgMHgxMDc4LAorICAgIDB4ODE4OSwgMHgyNzlFLCAweDgxOEEsIDB4MTA3OSwgMHg4MThCLCAweDI3QTQsIDB4ODE4QywgMHgyN0EzLAorICAgIDB4ODE4RCwgMHgyN0EyLCAweDgxOEYsIDB4MTA3NywgMHg4MTk1LCAweDI5RDEsIDB4ODE5NywgMHgyOUQ0LAorICAgIDB4ODE5OCwgMHgxMUVGLCAweDgxOTksIDB4MjlEMywgMHg4MTlBLCAweDExRUUsIDB4ODE5QiwgMHgxMUVBLAorICAgIDB4ODE5QywgMHgxMUVCLCAweDgxOUQsIDB4MTFFQywgMHg4MTlFLCAweDI5RDAsIDB4ODE5RiwgMHgyOUNGLAorICAgIDB4ODFBMCwgMHgxMUVELCAweDgxQTIsIDB4MjlEMiwgMHg4MUEzLCAweDI5Q0UsIDB4ODFBNiwgMHgyQzMwLAorICAgIDB4ODFBNywgMHgyQzNBLCAweDgxQTgsIDB4MTMzMSwgMHg4MUE5LCAweDEzMzAsIDB4ODFBQiwgMHgyQzM0LAorICAgIDB4ODFBQywgMHgyQzM2LCAweDgxQUUsIDB4MkMzMSwgMHg4MUIwLCAweDJDMzUsIDB4ODFCMSwgMHgyQzJGLAorICAgIDB4ODFCMiwgMHgyQzM4LCAweDgxQjMsIDB4MTMyRiwgMHg4MUI0LCAweDJDMzcsIDB4ODFCNSwgMHgyQzMzLAorICAgIDB4ODFCNywgMHgyQzM5LCAweDgxQjksIDB4MkMzMiwgMHg4MUJBLCAweDE0NTAsIDB4ODFCQiwgMHgyRTA2LAorICAgIDB4ODFCQywgMHgyRTBDLCAweDgxQkQsIDB4MTQ1NCwgMHg4MUJFLCAweDE0NTYsIDB4ODFCRiwgMHgxNDUzLAorICAgIDB4ODFDMCwgMHgxNDUyLCAweDgxQzIsIDB4MTQ1MSwgMHg4MUMzLCAweDE0NEYsIDB4ODFDNCwgMHgyRTA3LAorICAgIDB4ODFDNSwgMHgyRTBBLCAweDgxQzYsIDB4MTQ0RSwgMHg4MUM3LCAweDJFMEIsIDB4ODFDOSwgMHgxNDU1LAorICAgIDB4ODFDQSwgMHgyRTA5LCAweDgxQ0MsIDB4MkUwOCwgMHg4MUNELCAweDE1MTgsIDB4ODFDRiwgMHgxNTE5LAorICAgIDB4ODFEMCwgMHgyRjk0LCAweDgxRDEsIDB4MkY5MiwgMHg4MUQyLCAweDJGOTMsIDB4ODFENSwgMHgzMEVELAorICAgIDB4ODFENywgMHgzMEVDLCAweDgxRDgsIDB4MTVCMywgMHg4MUQ5LCAweDMyMUMsIDB4ODFEQSwgMHgxNjM1LAorICAgIDB4ODFEQiwgMHgzMjFCLCAweDgxREQsIDB4MzJGNSwgMHg4MURFLCAweDMzQTUsIDB4ODFERiwgMHgxNkQ0LAorICAgIDB4ODFFMCwgMHgzNERELCAweDgxRTEsIDB4MzRERSwgMHg4MUUyLCAweDE3MDYsIDB4ODFFMywgMHgwNDA1LAorICAgIDB4ODFFNSwgMHgwNjc2LCAweDgxRTYsIDB4MjI4NiwgMHg4MUU3LCAweDEwN0MsIDB4ODFFOCwgMHgxNDU3LAorICAgIDB4ODFFOSwgMHgyRTBELCAweDgxRUEsIDB4MDQwNiwgMHg4MUVDLCAweDA5OTUsIDB4ODFFRCwgMHgwOTk0LAorICAgIDB4ODFFRSwgMHgyMjg3LCAweDgxRjIsIDB4MkMzQiwgMHg4MUYzLCAweDA0MDcsIDB4ODFGNCwgMHgwN0U3LAorICAgIDB4ODFGNywgMHgyMjg4LCAweDgxRjgsIDB4MjI4OSwgMHg4MUY5LCAweDIyOEEsIDB4ODFGQSwgMHgxMDdELAorICAgIDB4ODFGQiwgMHgxMzMyLCAweDgxRkMsIDB4MDQwOCwgMHg4MUZFLCAweDA2NzcsIDB4ODFGRiwgMHgxQkRFLAorICAgIDB4ODIwMCwgMHgwOTk2LCAweDgyMDEsIDB4MURCRCwgMHg4MjAyLCAweDBCNzEsIDB4ODIwNCwgMHgyMjhCLAorICAgIDB4ODIwNSwgMHgwRUQ5LCAweDgyMDcsIDB4MTA3RSwgMHg4MjA4LCAweDEzMzMsIDB4ODIwOSwgMHgxNDU4LAorICAgIDB4ODIwQSwgMHgxNTFBLCAweDgyMEIsIDB4MzBFRSwgMHg4MjBDLCAweDA0MDksIDB4ODIwRCwgMHgwNjc4LAorICAgIDB4ODIxMCwgMHgwOTk3LCAweDgyMTEsIDB4MjAxMywgMHg4MjEyLCAweDBEMkMsIDB4ODIxNCwgMHgxMDdGLAorICAgIDB4ODIxNSwgMHgyN0E1LCAweDgyMTYsIDB4MjlENSwgMHg4MjFCLCAweDA0MEEsIDB4ODIxQywgMHgwRDJELAorICAgIDB4ODIxRCwgMHgyNTI5LCAweDgyMUUsIDB4MTA4MCwgMHg4MjFGLCAweDA0MEIsIDB4ODIyMCwgMHgxQTJFLAorICAgIDB4ODIyMSwgMHgxQkRGLCAweDgyMjIsIDB4MDdFOCwgMHg4MjI1LCAweDFEQkYsIDB4ODIyOCwgMHgwOTlBLAorICAgIDB4ODIyQSwgMHgwOTk4LCAweDgyMkIsIDB4MDk5OSwgMHg4MjJDLCAweDA5OUIsIDB4ODIyRiwgMHgxREJFLAorICAgIDB4ODIzMiwgMHgyMDE4LCAweDgyMzMsIDB4MjAxNSwgMHg4MjM0LCAweDIwMTcsIDB4ODIzNSwgMHgwQjcyLAorICAgIDB4ODIzNiwgMHgwQjc0LCAweDgyMzcsIDB4MEI3MywgMHg4MjM4LCAweDIwMTQsIDB4ODIzOSwgMHgwQjc1LAorICAgIDB4ODIzQSwgMHgyMDE2LCAweDgyM0MsIDB4MjI4QywgMHg4MjNELCAweDIyOEQsIDB4ODIzRiwgMHgyMjhFLAorICAgIDB4ODI0MCwgMHgyNTJDLCAweDgyNDIsIDB4MjUyRCwgMHg4MjQ0LCAweDI1MkIsIDB4ODI0NSwgMHgyNTJFLAorICAgIDB4ODI0NywgMHgwRURBLCAweDgyNDksIDB4MjUyQSwgMHg4MjRCLCAweDEwODEsIDB4ODI0RSwgMHgyOURBLAorICAgIDB4ODI0RiwgMHgyOUQ2LCAweDgyNTAsIDB4MjlEOSwgMHg4MjUxLCAweDI5REIsIDB4ODI1MiwgMHgyOUQ4LAorICAgIDB4ODI1MywgMHgyOUQ3LCAweDgyNTUsIDB4MkMzQywgMHg4MjU2LCAweDJDM0QsIDB4ODI1NywgMHgyQzNFLAorICAgIDB4ODI1OCwgMHgxMzM0LCAweDgyNTksIDB4MTMzNSwgMHg4MjVBLCAweDJFMEYsIDB4ODI1QiwgMHgyRTBFLAorICAgIDB4ODI1QywgMHgyRTEwLCAweDgyNUUsIDB4MkY5NiwgMHg4MjVGLCAweDJGOTUsIDB4ODI2MSwgMHgzMEYwLAorICAgIDB4ODI2MywgMHgzMEYxLCAweDgyNjQsIDB4MzBFRiwgMHg4MjY2LCAweDE2MzYsIDB4ODI2OCwgMHgzMjFELAorICAgIDB4ODI2OSwgMHgzMjFFLCAweDgyNkIsIDB4MzNBNiwgMHg4MjZDLCAweDM0MkQsIDB4ODI2RCwgMHgzNDk2LAorICAgIDB4ODI2RSwgMHgwNDBDLCAweDgyNkYsIDB4MDUwNCwgMHg4MjcxLCAweDE0NTksIDB4ODI3MiwgMHgwNDBELAorICAgIDB4ODI3NCwgMHgyMDE5LCAweDgyNzUsIDB4MjI4RiwgMHg4Mjc3LCAweDE3MkUsIDB4ODI3OCwgMHgxODEzLAorICAgIDB4ODI3QywgMHgxODE0LCAweDgyN0QsIDB4MTgxNiwgMHg4MjdFLCAweDA0MEUsIDB4ODI3RiwgMHgxODE3LAorICAgIDB4ODI4MCwgMHgxODE1LCAweDgyODMsIDB4MThFNSwgMHg4Mjg0LCAweDE4RTYsIDB4ODI4NSwgMHgxOEUwLAorICAgIDB4ODI4QSwgMHgxOEU0LCAweDgyOEIsIDB4MDUwNiwgMHg4MjhELCAweDA1MDcsIDB4ODI4RSwgMHgxOEUxLAorICAgIDB4ODI4RiwgMHgxOERGLCAweDgyOTAsIDB4MThERSwgMHg4MjkxLCAweDE4RTIsIDB4ODI5MiwgMHgwNTA1LAorICAgIDB4ODI5MywgMHgxOEUzLCAweDgyOTQsIDB4MUJFMCwgMHg4Mjk4LCAweDFBMzMsIDB4ODI5OSwgMHgwNjdCLAorICAgIDB4ODI5QSwgMHgxQTMyLCAweDgyOUIsIDB4MUEzNCwgMHg4MjlELCAweDA2N0EsIDB4ODI5RSwgMHgxQTM5LAorICAgIDB4ODI5RiwgMHgwNjdFLCAweDgyQTAsIDB4MUEyRiwgMHg4MkExLCAweDFBM0QsIDB4ODJBMiwgMHgxQTQzLAorICAgIDB4ODJBMywgMHgwNjg1LCAweDgyQTQsIDB4MUE0MCwgMHg4MkE1LCAweDA2ODIsIDB4ODJBNywgMHgxQTM2LAorICAgIDB4ODJBOCwgMHgxQTNDLCAweDgyQTksIDB4MUEzRSwgMHg4MkFCLCAweDFBMzEsIDB4ODJBQywgMHgwNjgxLAorICAgIDB4ODJBRCwgMHgwNjdDLCAweDgyQUUsIDB4MUEzNywgMHg4MkFGLCAweDA2ODMsIDB4ODJCMCwgMHgwNjg2LAorICAgIDB4ODJCMSwgMHgwNjgwLCAweDgyQjMsIDB4MDY3OSwgMHg4MkI0LCAweDFBM0IsIDB4ODJCNSwgMHgxQTM1LAorICAgIDB4ODJCNiwgMHgxQTQyLCAweDgyQjcsIDB4MDY4OCwgMHg4MkI4LCAweDA2ODQsIDB4ODJCOSwgMHgwNjdGLAorICAgIDB4ODJCQSwgMHgxQTNBLCAweDgyQkIsIDB4MDk5QywgMHg4MkJDLCAweDFBMzgsIDB4ODJCRCwgMHgwNjdELAorICAgIDB4ODJCRSwgMHgwNjg3LCAweDgyQzAsIDB4MUEzMCwgMHg4MkMyLCAweDFBM0YsIDB4ODJDMywgMHgxQTQxLAorICAgIDB4ODJEMSwgMHgwN0Y5LCAweDgyRDIsIDB4MDdGMywgMHg4MkQzLCAweDA3RkIsIDB4ODJENCwgMHgwN0Y4LAorICAgIDB4ODJENSwgMHgxQkU3LCAweDgyRDYsIDB4MUJFQSwgMHg4MkQ3LCAweDA3RjQsIDB4ODJEOSwgMHgxQkUxLAorICAgIDB4ODJEQiwgMHgwN0VELCAweDgyREMsIDB4MDdGNywgMHg4MkRFLCAweDA3RkEsIDB4ODJERiwgMHgwN0ZDLAorICAgIDB4ODJFMCwgMHgxQkY2LCAweDgyRTEsIDB4MUJFRCwgMHg4MkUzLCAweDA3RUMsIDB4ODJFNCwgMHgxQkY1LAorICAgIDB4ODJFNSwgMHgwN0YwLCAweDgyRTYsIDB4MDdFRSwgMHg4MkU3LCAweDA3RTksIDB4ODJFOCwgMHgxQkU1LAorICAgIDB4ODJFQSwgMHgxQkY0LCAweDgyRUIsIDB4MUJFOSwgMHg4MkVDLCAweDFCRUMsIDB4ODJFRCwgMHgxQkY5LAorICAgIDB4ODJFRiwgMHgwN0ZELCAweDgyRjAsIDB4MUJGMywgMHg4MkYxLCAweDA3RjUsIDB4ODJGMiwgMHgxQkVFLAorICAgIDB4ODJGMywgMHgxQkY4LCAweDgyRjQsIDB4MUJFQiwgMHg4MkY1LCAweDFCRUYsIDB4ODJGNiwgMHgxQkYyLAorICAgIDB4ODJGOSwgMHgxQkUzLCAweDgyRkEsIDB4MUJGNywgMHg4MkZCLCAweDFCRjEsIDB4ODJGRSwgMHgxQkUyLAorICAgIDB4ODMwMCwgMHgxQkU2LCAweDgzMDEsIDB4MDdGNiwgMHg4MzAyLCAweDA3RjEsIDB4ODMwMywgMHgwN0VBLAorICAgIDB4ODMwNCwgMHgwN0VGLCAweDgzMDUsIDB4MDdFQiwgMHg4MzA2LCAweDA3RkUsIDB4ODMwNywgMHgxQkU0LAorICAgIDB4ODMwOCwgMHgxREQwLCAweDgzMDksIDB4MDdGMiwgMHg4MzBDLCAweDFCRjAsIDB4ODMwRCwgMHgxQTdELAorICAgIDB4ODMxNiwgMHgxREQzLCAweDgzMTcsIDB4MDlBQSwgMHg4MzE5LCAweDFEQzMsIDB4ODMxQiwgMHgxRENFLAorICAgIDB4ODMxQywgMHgxRENBLCAweDgzMUUsIDB4MURERCwgMHg4MzIwLCAweDFERDUsIDB4ODMyMiwgMHgxRENCLAorICAgIDB4ODMyNCwgMHgxREQ0LCAweDgzMjUsIDB4MURDNSwgMHg4MzI2LCAweDFEQzksIDB4ODMyNywgMHgxREUwLAorICAgIDB4ODMyOCwgMHgwOUFELCAweDgzMjksIDB4MUREOCwgMHg4MzJBLCAweDFEQ0YsIDB4ODMyQiwgMHgwOTlELAorICAgIDB4ODMyQywgMHgxRERFLCAweDgzMkQsIDB4MURDMSwgMHg4MzJGLCAweDFERDcsIDB4ODMzMSwgMHgwOUFDLAorICAgIDB4ODMzMiwgMHgwOUE3LCAweDgzMzMsIDB4MURDMCwgMHg4MzM0LCAweDA5QTUsIDB4ODMzNSwgMHgwOUE0LAorICAgIDB4ODMzNiwgMHgwOUE5LCAweDgzMzcsIDB4MURENiwgMHg4MzM4LCAweDA5QTEsIDB4ODMzOSwgMHgwOUE4LAorICAgIDB4ODMzQSwgMHgxQkU4LCAweDgzM0IsIDB4MjI5MCwgMHg4MzNDLCAweDFERDEsIDB4ODMzRiwgMHgxREM3LAorICAgIDB4ODM0MCwgMHgwOUFCLCAweDgzNDEsIDB4MURDOCwgMHg4MzQyLCAweDFEQ0MsIDB4ODM0MywgMHgwOUFFLAorICAgIDB4ODM0NCwgMHgxREMyLCAweDgzNDUsIDB4MUREQSwgMHg4MzQ3LCAweDFERDksIDB4ODM0OCwgMHgxREUxLAorICAgIDB4ODM0OSwgMHgwOUEzLCAweDgzNEEsIDB4MDlBMCwgMHg4MzRCLCAweDFEREYsIDB4ODM0QywgMHgxRERCLAorICAgIDB4ODM0RCwgMHgxREQyLCAweDgzNEUsIDB4MURDRCwgMHg4MzRGLCAweDA5QTYsIDB4ODM1MCwgMHgwOUEyLAorICAgIDB4ODM1MSwgMHgxREM0LCAweDgzNTIsIDB4MDk5RSwgMHg4MzUzLCAweDFEREMsIDB4ODM1NCwgMHgwOTlGLAorICAgIDB4ODM1NiwgMHgxREM2LCAweDgzNzMsIDB4MjAxRiwgMHg4Mzc0LCAweDIwMjEsIDB4ODM3NSwgMHgyMDI2LAorICAgIDB4ODM3NiwgMHgyMDNBLCAweDgzNzcsIDB4MEI4MywgMHg4Mzc4LCAweDBCNzksIDB4ODM3QSwgMHgyMDFFLAorICAgIDB4ODM3QiwgMHgwQjg0LCAweDgzN0MsIDB4MEI4NSwgMHg4MzdELCAweDIwMjksIDB4ODM3RSwgMHgyMDMwLAorICAgIDB4ODM3RiwgMHgyMDM2LCAweDgzODEsIDB4MjAyMywgMHg4MzgzLCAweDIwMkEsIDB4ODM4NiwgMHgwQjg2LAorICAgIDB4ODM4NywgMHgyMDM4LCAweDgzODgsIDB4MjAzMywgMHg4Mzg5LCAweDBCODEsIDB4ODM4QSwgMHgwQjdGLAorICAgIDB4ODM4QiwgMHgyMDJGLCAweDgzOEMsIDB4MjAyQiwgMHg4MzhELCAweDIwMUQsIDB4ODM4RSwgMHgwQjc2LAorICAgIDB4ODM4RiwgMHgyMDIyLCAweDgzOTAsIDB4MjAxQSwgMHg4MzkyLCAweDBCN0UsIDB4ODM5MywgMHgwQjgwLAorICAgIDB4ODM5NCwgMHgyMDI3LCAweDgzOTUsIDB4MjAyNCwgMHg4Mzk2LCAweDBCN0IsIDB4ODM5NywgMHgyMDM0LAorICAgIDB4ODM5OCwgMHgwQjc4LCAweDgzOTksIDB4MjAyNSwgMHg4MzlBLCAweDIyQjksIDB4ODM5QiwgMHgyMDJELAorICAgIDB4ODM5RCwgMHgyMDJDLCAweDgzOUUsIDB4MEI3NywgMHg4M0EwLCAweDBCODIsIDB4ODNBMiwgMHgwQjdBLAorICAgIDB4ODNBMywgMHgyMDFCLCAweDgzQTQsIDB4MjAyMCwgMHg4M0E1LCAweDIwMzEsIDB4ODNBNiwgMHgyMDM3LAorICAgIDB4ODNBNywgMHgwQjg3LCAweDgzQTgsIDB4MjAxQywgMHg4M0E5LCAweDIwMjgsIDB4ODNBQSwgMHgyMDJFLAorICAgIDB4ODNBQiwgMHgwQjdELCAweDgzQUUsIDB4MjAzOSwgMHg4M0FGLCAweDIwMzIsIDB4ODNCMCwgMHgyMDM1LAorICAgIDB4ODNCRCwgMHgwQjdDLCAweDgzQkYsIDB4MjJBMCwgMHg4M0MwLCAweDIyOTQsIDB4ODNDMSwgMHgwRDM1LAorICAgIDB4ODNDMiwgMHgyMkIxLCAweDgzQzMsIDB4MjJCQSwgMHg4M0M0LCAweDIyQkQsIDB4ODNDNSwgMHgwRDMzLAorICAgIDB4ODNDNiwgMHgyMjlDLCAweDgzQzcsIDB4MjJCNSwgMHg4M0M4LCAweDIyOUQsIDB4ODNDOSwgMHgyMkFCLAorICAgIDB4ODNDQSwgMHgwRDQwLCAweDgzQ0IsIDB4MjJBNywgMHg4M0NDLCAweDBEM0QsIDB4ODNDRSwgMHgyMkE4LAorICAgIDB4ODNDRiwgMHgyMjkxLCAweDgzRDEsIDB4MjJCNiwgMHg4M0Q0LCAweDBENDYsIDB4ODNENSwgMHgyMkIzLAorICAgIDB4ODNENiwgMHgyMkE5LCAweDgzRDcsIDB4MjJCRiwgMHg4M0Q4LCAweDIyQTQsIDB4ODNEOSwgMHgyNTRFLAorICAgIDB4ODNEQiwgMHgyMkMyLCAweDgzREMsIDB4MEQ0NCwgMHg4M0RELCAweDIyQTIsIDB4ODNERSwgMHgyMkFFLAorICAgIDB4ODNERiwgMHgwRDQ3LCAweDgzRTAsIDB4MEQzMiwgMHg4M0UxLCAweDIyQTYsIDB4ODNFMiwgMHgyMkMwLAorICAgIDB4ODNFMywgMHgyMjlGLCAweDgzRTQsIDB4MjI5OCwgMHg4M0U1LCAweDIyQTMsIDB4ODNFNywgMHgyMjk3LAorICAgIDB4ODNFOCwgMHgyMjk1LCAweDgzRTksIDB4MEQyRSwgMHg4M0VBLCAweDIyQjcsIDB4ODNFQiwgMHgyMjlFLAorICAgIDB4ODNFQywgMHgyMkJCLCAweDgzRUUsIDB4MjJCQywgMHg4M0VGLCAweDBEMzYsIDB4ODNGMCwgMHgwRDNCLAorICAgIDB4ODNGMSwgMHgwRDM3LCAweDgzRjIsIDB4MEQzRiwgMHg4M0YzLCAweDIyQjIsIDB4ODNGNCwgMHgwRDM4LAorICAgIDB4ODNGNSwgMHgyMkFBLCAweDgzRjYsIDB4MjI5QSwgMHg4M0Y4LCAweDBEMzAsIDB4ODNGOSwgMHgyMjkyLAorICAgIDB4ODNGQSwgMHgyMkI0LCAweDgzRkIsIDB4MjJCRSwgMHg4M0ZDLCAweDIyOTksIDB4ODNGRCwgMHgwRDNFLAorICAgIDB4ODNGRSwgMHgyMkMzLCAweDgzRkYsIDB4MjJBNSwgMHg4NDAxLCAweDIyQTEsIDB4ODQwMywgMHgwRDJGLAorICAgIDB4ODQwNCwgMHgwRDQzLCAweDg0MDYsIDB4MjJCMCwgMHg4NDA3LCAweDBENDUsIDB4ODQwOSwgMHgyMkFDLAorICAgIDB4ODQwQSwgMHgwRDNBLCAweDg0MEIsIDB4MEQzNCwgMHg4NDBDLCAweDBEM0MsIDB4ODQwRCwgMHgwRDMxLAorICAgIDB4ODQwRSwgMHgwRDQyLCAweDg0MEYsIDB4MjJBRCwgMHg4NDEwLCAweDIyOUIsIDB4ODQxMSwgMHgyMkFGLAorICAgIDB4ODQxMiwgMHgyMjk2LCAweDg0MTMsIDB4MjJCOCwgMHg4NDFCLCAweDIyQzEsIDB4ODQyMywgMHgyMjkzLAorICAgIDB4ODQyOSwgMHgyNTRELCAweDg0MkIsIDB4MjU2MywgMHg4NDJDLCAweDBFQUMsIDB4ODQyRCwgMHgyNTUyLAorICAgIDB4ODQyRiwgMHgyNTUwLCAweDg0MzAsIDB4MjUzQiwgMHg4NDMxLCAweDBFREUsIDB4ODQzMiwgMHgyNTRCLAorICAgIDB4ODQzMywgMHgyNTVGLCAweDg0MzQsIDB4MjU0NywgMHg4NDM1LCAweDBFRTYsIDB4ODQzNiwgMHgyNTVFLAorICAgIDB4ODQzNywgMHgyNTQ1LCAweDg0MzgsIDB4MEQ0MSwgMHg4NDM5LCAweDI1NTUsIDB4ODQzQSwgMHgyNTQ2LAorICAgIDB4ODQzQiwgMHgyNTVDLCAweDg0M0MsIDB4MEVFNSwgMHg4NDNELCAweDBFREQsIDB4ODQzRiwgMHgyNTMwLAorICAgIDB4ODQ0MCwgMHgyNTM4LCAweDg0NDIsIDB4MjU1MSwgMHg4NDQzLCAweDI1NDksIDB4ODQ0NCwgMHgyNTYyLAorICAgIDB4ODQ0NSwgMHgyNTRDLCAweDg0NDYsIDB4MEVFQiwgMHg4NDQ3LCAweDI1NUQsIDB4ODQ0OSwgMHgwRUUyLAorICAgIDB4ODQ0QiwgMHgyNTRGLCAweDg0NEMsIDB4MjU1NywgMHg4NDRELCAweDI1M0MsIDB4ODQ0RSwgMHgyNTU2LAorICAgIDB4ODQ1MCwgMHgyNTY3LCAweDg0NTEsIDB4MjUzNywgMHg4NDUyLCAweDI1NTgsIDB4ODQ1NCwgMHgyNTY1LAorICAgIDB4ODQ1NiwgMHgyNTMxLCAweDg0NTcsIDB4MEQzOSwgMHg4NDU5LCAweDI1M0YsIDB4ODQ1QSwgMHgyNTNFLAorICAgIDB4ODQ1QiwgMHgwRUU0LCAweDg0NUQsIDB4MjU0MiwgMHg4NDVFLCAweDI1NDQsIDB4ODQ1RiwgMHgyNTUzLAorICAgIDB4ODQ2MCwgMHgyNTY0LCAweDg0NjEsIDB4MEVFNywgMHg4NDYzLCAweDBFRTgsIDB4ODQ2NSwgMHgyNTM2LAorICAgIDB4ODQ2NiwgMHgwRUUwLCAweDg0NjcsIDB4MjUzQSwgMHg4NDY4LCAweDI1NjAsIDB4ODQ2OSwgMHgwRUU5LAorICAgIDB4ODQ2QiwgMHgwRUUxLCAweDg0NkMsIDB4MEVFMywgMHg4NDZELCAweDBFRUEsIDB4ODQ2RSwgMHgyNTY2LAorICAgIDB4ODQ2RiwgMHgyNTU5LCAweDg0NzAsIDB4MjU1NCwgMHg4NDczLCAweDI1NDEsIDB4ODQ3NCwgMHgyNTQwLAorICAgIDB4ODQ3NSwgMHgwRURGLCAweDg0NzYsIDB4MjUzMiwgMHg4NDc3LCAweDBFREMsIDB4ODQ3OCwgMHgyNTRBLAorICAgIDB4ODQ3OSwgMHgyNTMzLCAweDg0N0EsIDB4MjU0OCwgMHg4NDdELCAweDI1M0QsIDB4ODQ3RSwgMHgyNTYxLAorICAgIDB4ODQ4MiwgMHgwRURCLCAweDg0ODYsIDB4MjUzOSwgMHg4NDhELCAweDI1MzUsIDB4ODQ4RSwgMHgyNTVCLAorICAgIDB4ODQ4RiwgMHgyNTM0LCAweDg0OTAsIDB4MTA4RSwgMHg4NDkxLCAweDI3Q0QsIDB4ODQ5NCwgMHgyN0JDLAorICAgIDB4ODQ5NywgMHgyN0E2LCAweDg0OTgsIDB4MjdDNCwgMHg4NDk5LCAweDEwODYsIDB4ODQ5QSwgMHgyN0I1LAorICAgIDB4ODQ5QiwgMHgyN0JGLCAweDg0OUMsIDB4MTA4OSwgMHg4NDlELCAweDI3QjgsIDB4ODQ5RSwgMHgxMDg3LAorICAgIDB4ODQ5RiwgMHgyN0E5LCAweDg0QTAsIDB4MjdDNywgMHg4NEExLCAweDI3QTgsIDB4ODRBMiwgMHgyN0JCLAorICAgIDB4ODRBNCwgMHgyN0E3LCAweDg0QTcsIDB4MjdCOSwgMHg4NEE4LCAweDI3QzIsIDB4ODRBOSwgMHgyN0MwLAorICAgIDB4ODRBQSwgMHgyN0I0LCAweDg0QUIsIDB4MjdBRiwgMHg4NEFDLCAweDI3QUQsIDB4ODRBRSwgMHgyN0FFLAorICAgIDB4ODRBRiwgMHgyN0MxLCAweDg0QjAsIDB4MjdDQywgMHg4NEIxLCAweDI3QjYsIDB4ODRCMiwgMHgxMDg4LAorICAgIDB4ODRCNCwgMHgyN0IxLCAweDg0QjYsIDB4MjdDNSwgMHg4NEI4LCAweDEwOEIsIDB4ODRCOSwgMHgyN0IwLAorICAgIDB4ODRCQSwgMHgyN0FBLCAweDg0QkIsIDB4MjdCQSwgMHg4NEJDLCAweDEwOEYsIDB4ODRCRiwgMHgxMDgzLAorICAgIDB4ODRDMCwgMHgxMDhDLCAweDg0QzEsIDB4MjdCMiwgMHg4NEMyLCAweDI3QUMsIDB4ODRDNCwgMHgxMDg1LAorICAgIDB4ODRDNSwgMHgyNTVBLCAweDg0QzYsIDB4MTA4NCwgMHg4NEM3LCAweDI3QkQsIDB4ODRDOSwgMHgxMDgyLAorICAgIDB4ODRDQSwgMHgxMDkxLCAweDg0Q0IsIDB4MTA4QSwgMHg4NENDLCAweDI3QkUsIDB4ODRDRCwgMHgyN0IzLAorICAgIDB4ODRDRSwgMHgyN0FCLCAweDg0Q0YsIDB4MjdDNiwgMHg4NEQwLCAweDI3QjcsIDB4ODREMSwgMHgxMDkwLAorICAgIDB4ODREMiwgMHgyN0NBLCAweDg0RDMsIDB4MTA4RCwgMHg4NEQ0LCAweDI3QzksIDB4ODRENiwgMHgyN0MzLAorICAgIDB4ODRENywgMHgyN0M4LCAweDg0REIsIDB4MjdDQiwgMHg4NEU3LCAweDJBMDMsIDB4ODRFOCwgMHgyQTA0LAorICAgIDB4ODRFOSwgMHgyOUY3LCAweDg0RUEsIDB4MjlGNiwgMHg4NEVCLCAweDI5RjIsIDB4ODRFQywgMHgxMUZCLAorICAgIDB4ODRFRSwgMHgxMUYzLCAweDg0RUYsIDB4MkEwNiwgMHg4NEYwLCAweDJBMDUsIDB4ODRGMSwgMHgyNTJGLAorICAgIDB4ODRGMiwgMHgyOUVGLCAweDg0RjMsIDB4MjlGMywgMHg4NEY0LCAweDI5RUQsIDB4ODRGNiwgMHgyQTAwLAorICAgIDB4ODRGNywgMHgyOUYxLCAweDg0RjksIDB4MkEwNywgMHg4NEZBLCAweDI5RUEsIDB4ODRGQiwgMHgyOUU4LAorICAgIDB4ODRGQywgMHgyOUY0LCAweDg0RkQsIDB4MjlGRSwgMHg4NEZFLCAweDI5RjksIDB4ODRGRiwgMHgxMUZELAorICAgIDB4ODUwMCwgMHgyOURGLCAweDg1MDIsIDB4MjlGRCwgMHg4NTA2LCAweDExRkUsIDB4ODUwNywgMHgyNTQzLAorICAgIDB4ODUwOCwgMHgyOUVCLCAweDg1MDksIDB4MjlFMiwgMHg4NTBBLCAweDI5RTUsIDB4ODUwQiwgMHgyQTBCLAorICAgIDB4ODUwQywgMHgyOUVDLCAweDg1MEQsIDB4MjlFMywgMHg4NTBFLCAweDI5RTEsIDB4ODUwRiwgMHgyOURFLAorICAgIDB4ODUxMSwgMHgxMUY3LCAweDg1MTIsIDB4MjlGNSwgMHg4NTEzLCAweDExRjYsIDB4ODUxNCwgMHgxMUZBLAorICAgIDB4ODUxNSwgMHgyOUYwLCAweDg1MTYsIDB4MjlGOCwgMHg4NTE3LCAweDExRjAsIDB4ODUxOCwgMHgyQTA4LAorICAgIDB4ODUxOSwgMHgyQTBDLCAweDg1MUEsIDB4MTFGMiwgMHg4NTFDLCAweDI5RTcsIDB4ODUxRCwgMHgyOUZCLAorICAgIDB4ODUxRSwgMHgyOUZGLCAweDg1MUYsIDB4MjlFNCwgMHg4NTIwLCAweDJBMDksIDB4ODUyMSwgMHgxMUY5LAorICAgIDB4ODUyMywgMHgxMUY4LCAweDg1MjQsIDB4MjlEQywgMHg4NTI1LCAweDExRkMsIDB4ODUyNiwgMHgyQTAyLAorICAgIDB4ODUyNywgMHgyOUU2LCAweDg1MjgsIDB4MjlGQSwgMHg4NTI5LCAweDI5RTAsIDB4ODUyQSwgMHgyOUVFLAorICAgIDB4ODUyQiwgMHgyOUU5LCAweDg1MkMsIDB4MTFGNCwgMHg4NTJELCAweDExRjUsIDB4ODUyRSwgMHgyOUZDLAorICAgIDB4ODUyRiwgMHgyQTBELCAweDg1MzAsIDB4MkEwQSwgMHg4NTMxLCAweDJBMDEsIDB4ODUzQiwgMHgyOURELAorICAgIDB4ODUzRCwgMHgxMUYxLCAweDg1M0UsIDB4MkM0RiwgMHg4NTQwLCAweDJDNDYsIDB4ODU0MSwgMHgyQzQ5LAorICAgIDB4ODU0MywgMHgxMzNCLCAweDg1NDQsIDB4MkM0QiwgMHg4NTQ1LCAweDJDNDAsIDB4ODU0NiwgMHgyQzQ3LAorICAgIDB4ODU0NywgMHgyQzRELCAweDg1NDgsIDB4MTMzOCwgMHg4NTQ5LCAweDEzM0MsIDB4ODU0QSwgMHgxMzM2LAorICAgIDB4ODU0RCwgMHgyQzQyLCAweDg1NEUsIDB4MkM1MiwgMHg4NTUxLCAweDJDNEMsIDB4ODU1MywgMHgyQzQzLAorICAgIDB4ODU1NCwgMHgyQzVCLCAweDg1NTUsIDB4MkM1NSwgMHg4NTU2LCAweDJDM0YsIDB4ODU1NywgMHgyRTIzLAorICAgIDB4ODU1OCwgMHgyQzQ1LCAweDg1NTksIDB4MTMzNywgMHg4NTVCLCAweDJDNTAsIDB4ODU1RCwgMHgyQzVBLAorICAgIDB4ODU1RSwgMHgxMzNGLCAweDg1NjAsIDB4MkM1NywgMHg4NTYxLCAweDJDNDQsIDB4ODU2MiwgMHgyQzRBLAorICAgIDB4ODU2MywgMHgyQzRFLCAweDg1NjQsIDB4MkM0OCwgMHg4NTY1LCAweDJDNUMsIDB4ODU2NiwgMHgyQzU5LAorICAgIDB4ODU2NywgMHgyQzU2LCAweDg1NjgsIDB4MTMzOSwgMHg4NTY5LCAweDEzM0EsIDB4ODU2QSwgMHgxMzNFLAorICAgIDB4ODU2QiwgMHgyQzQxLCAweDg1NkMsIDB4MkM1RCwgMHg4NTZELCAweDEzM0QsIDB4ODU2RSwgMHgyQzUzLAorICAgIDB4ODU3MSwgMHgyQzUxLCAweDg1NzUsIDB4MkM1NCwgMHg4NTc2LCAweDJFMzAsIDB4ODU3NywgMHgyRTFELAorICAgIDB4ODU3OCwgMHgyRTIyLCAweDg1NzksIDB4MkUyRiwgMHg4NTdBLCAweDJFMjEsIDB4ODU3QiwgMHgyRTE5LAorICAgIDB4ODU3QywgMHgyRTFFLCAweDg1N0UsIDB4MTQ1QywgMHg4NTgwLCAweDJFMTIsIDB4ODU4MSwgMHgyRTJBLAorICAgIDB4ODU4MiwgMHgyRTJDLCAweDg1ODMsIDB4MkUxMSwgMHg4NTg0LCAweDE0NUIsIDB4ODU4NSwgMHgyRTJFLAorICAgIDB4ODU4NiwgMHgyRTI2LCAweDg1ODcsIDB4MTQ2MiwgMHg4NTg4LCAweDJFMkQsIDB4ODU4OSwgMHgyRTFGLAorICAgIDB4ODU4QSwgMHgxNDY0LCAweDg1OEIsIDB4MkUxNywgMHg4NThDLCAweDJDNTgsIDB4ODU4RCwgMHgyRTI3LAorICAgIDB4ODU4RSwgMHgyRTI0LCAweDg1OEYsIDB4MkUxMywgMHg4NTkwLCAweDJFMzIsIDB4ODU5MSwgMHgxNDVFLAorICAgIDB4ODU5NCwgMHgxNDVGLCAweDg1OTUsIDB4MkUxNSwgMHg4NTk2LCAweDJFMjUsIDB4ODU5OCwgMHgyRTMxLAorICAgIDB4ODU5OSwgMHgyRTI4LCAweDg1OUEsIDB4MkUxQiwgMHg4NTlCLCAweDE0NjEsIDB4ODU5QywgMHgxNDVELAorICAgIDB4ODU5RCwgMHgyRTI5LCAweDg1OUUsIDB4MkUxQywgMHg4NTlGLCAweDJFMzMsIDB4ODVBMCwgMHgyRTE2LAorICAgIDB4ODVBMSwgMHgyRTIwLCAweDg1QTIsIDB4MkUyQiwgMHg4NUEzLCAweDJFMTgsIDB4ODVBNCwgMHgyRTFBLAorICAgIDB4ODVBNiwgMHgxNDY1LCAweDg1QTcsIDB4MkUxNCwgMHg4NUE4LCAweDE0NjMsIDB4ODVBOSwgMHgxNTFDLAorICAgIDB4ODVBQSwgMHgxNDVBLCAweDg1QUYsIDB4MTQ2MCwgMHg4NUIwLCAweDE1MjAsIDB4ODVCMSwgMHgyRkE2LAorICAgIDB4ODVCMywgMHgyRjlDLCAweDg1QjQsIDB4MkY5NywgMHg4NUI1LCAweDJGOUQsIDB4ODVCNiwgMHgyRkE3LAorICAgIDB4ODVCNywgMHgyRkFCLCAweDg1QjgsIDB4MkZBQSwgMHg4NUI5LCAweDE1MjIsIDB4ODVCQSwgMHgxNTIxLAorICAgIDB4ODVCRCwgMHgyRjlFLCAweDg1QkUsIDB4MkZBQywgMHg4NUJGLCAweDJGQTEsIDB4ODVDMCwgMHgyRjk5LAorICAgIDB4ODVDMiwgMHgyRjlCLCAweDg1QzMsIDB4MkY5QSwgMHg4NUM0LCAweDJGQTAsIDB4ODVDNSwgMHgyRkE1LAorICAgIDB4ODVDNiwgMHgyRjk4LCAweDg1QzcsIDB4MkY5RiwgMHg4NUM4LCAweDJGQTQsIDB4ODVDOSwgMHgxNTFGLAorICAgIDB4ODVDQiwgMHgyRkEyLCAweDg1Q0QsIDB4MTUxRCwgMHg4NUNFLCAweDJGQTMsIDB4ODVDRiwgMHgxNTFCLAorICAgIDB4ODVEMCwgMHgxNTFFLCAweDg1RDEsIDB4MzEwMSwgMHg4NUQyLCAweDJGQTgsIDB4ODVENSwgMHgxNUI3LAorICAgIDB4ODVENywgMHgzMEY5LCAweDg1RDgsIDB4MzBGRCwgMHg4NUQ5LCAweDMwRjUsIDB4ODVEQSwgMHgzMEY4LAorICAgIDB4ODVEQywgMHgzMTAwLCAweDg1REQsIDB4MTVCNSwgMHg4NURFLCAweDMxMDUsIDB4ODVERiwgMHgzMEZFLAorICAgIDB4ODVFMSwgMHgzMEY2LCAweDg1RTIsIDB4MzEwNiwgMHg4NUUzLCAweDMwRkYsIDB4ODVFNCwgMHgxNUI4LAorICAgIDB4ODVFNSwgMHgxNUI5LCAweDg1RTYsIDB4MzEwMywgMHg4NUU4LCAweDMwRjcsIDB4ODVFOSwgMHgxNUI0LAorICAgIDB4ODVFQSwgMHgxNUI2LCAweDg1RUIsIDB4MzBGMiwgMHg4NUVDLCAweDMwRkEsIDB4ODVFRCwgMHgzMEY0LAorICAgIDB4ODVFRiwgMHgzMTA0LCAweDg1RjAsIDB4MzEwMiwgMHg4NUYxLCAweDMwRjMsIDB4ODVGMiwgMHgzMEZCLAorICAgIDB4ODVGNiwgMHgzMjI1LCAweDg1RjcsIDB4MTVCQSwgMHg4NUY4LCAweDMwRkMsIDB4ODVGOSwgMHgxNjM4LAorICAgIDB4ODVGQSwgMHgxNjNBLCAweDg1RkIsIDB4MTYzNywgMHg4NUZELCAweDMyMkEsIDB4ODVGRSwgMHgzMjIyLAorICAgIDB4ODVGRiwgMHgzMjIwLCAweDg2MDAsIDB4MzIyNCwgMHg4NjAxLCAweDMyMjEsIDB4ODYwNCwgMHgzMjI2LAorICAgIDB4ODYwNSwgMHgzMjI4LCAweDg2MDYsIDB4MTYzQiwgMHg4NjA3LCAweDE2M0QsIDB4ODYwOSwgMHgzMjI3LAorICAgIDB4ODYwQSwgMHgxNjNFLCAweDg2MEIsIDB4MTYzQywgMHg4NjBDLCAweDMyMjksIDB4ODYxMSwgMHgxNjM5LAorICAgIDB4ODYxNywgMHgxNjg1LCAweDg2MTgsIDB4MzJGNiwgMHg4NjE5LCAweDMyRkMsIDB4ODYxQSwgMHgxNjg3LAorICAgIDB4ODYxQiwgMHgzMjIzLCAweDg2MUMsIDB4MzJGQiwgMHg4NjFFLCAweDMzMDIsIDB4ODYxRiwgMHgzMkY5LAorICAgIDB4ODYyMCwgMHgzMzAwLCAweDg2MjEsIDB4MzJGRiwgMHg4NjIyLCAweDMyMUYsIDB4ODYyMywgMHgzMkZBLAorICAgIDB4ODYyNCwgMHgyRkE5LCAweDg2MjUsIDB4MzMwMywgMHg4NjI2LCAweDMyRjgsIDB4ODYyNywgMHgzMkZELAorICAgIDB4ODYyOSwgMHgzMzAxLCAweDg2MkEsIDB4MzJGNywgMHg4NjJDLCAweDMzQUEsIDB4ODYyRCwgMHgxNjg2LAorICAgIDB4ODYyRSwgMHgzMkZFLCAweDg2MzEsIDB4MzQzMiwgMHg4NjMyLCAweDMzQUIsIDB4ODYzMywgMHgzM0E5LAorICAgIDB4ODYzNCwgMHgzM0E3LCAweDg2MzUsIDB4MzNBOCwgMHg4NjM2LCAweDMzQUMsIDB4ODYzOCwgMHgxNzA3LAorICAgIDB4ODYzOSwgMHgzNDMwLCAweDg2M0EsIDB4MzQyRSwgMHg4NjNCLCAweDM0MzMsIDB4ODYzQywgMHgzNDMxLAorICAgIDB4ODYzRSwgMHgzNDM0LCAweDg2M0YsIDB4MTcwOCwgMHg4NjQwLCAweDM0MkYsIDB4ODY0MywgMHgzNDk3LAorICAgIDB4ODY0NiwgMHgzNERGLCAweDg2NDcsIDB4MzRFMCwgMHg4NjQ4LCAweDM0RTEsIDB4ODY0QiwgMHgzNTNFLAorICAgIDB4ODY0QywgMHgzNTM2LCAweDg2NEQsIDB4MTgxOCwgMHg4NjRFLCAweDA2ODksIDB4ODY1MCwgMHgwN0ZGLAorICAgIDB4ODY1MiwgMHgxREUzLCAweDg2NTMsIDB4MURFMiwgMHg4NjU0LCAweDA5QUYsIDB4ODY1NSwgMHgwQjg4LAorICAgIDB4ODY1NiwgMHgyMDNDLCAweDg2NTksIDB4MjAzQiwgMHg4NjVCLCAweDBENDgsIDB4ODY1QywgMHgwRUVELAorICAgIDB4ODY1RSwgMHgwRUVDLCAweDg2NUYsIDB4MEVFRSwgMHg4NjYxLCAweDI3Q0UsIDB4ODY2MiwgMHgyQTBFLAorICAgIDB4ODY2MywgMHgyQzVFLCAweDg2NjQsIDB4MkM2MCwgMHg4NjY1LCAweDJDNUYsIDB4ODY2NywgMHgxNDY2LAorICAgIDB4ODY2OCwgMHgyRTM0LCAweDg2NjksIDB4MkZBRCwgMHg4NjZBLCAweDM1MUUsIDB4ODY2QiwgMHgwNDBGLAorICAgIDB4ODY2RCwgMHgxQTQ2LCAweDg2NkUsIDB4MUE0NywgMHg4NjZGLCAweDFBNDUsIDB4ODY3MCwgMHgxQTQ0LAorICAgIDB4ODY3MSwgMHgwNjhBLCAweDg2NzMsIDB4MUJGRCwgMHg4Njc0LCAweDFCRkIsIDB4ODY3NywgMHgxQkZBLAorICAgIDB4ODY3OSwgMHgwODAwLCAweDg2N0EsIDB4MDgwMiwgMHg4NjdCLCAweDA4MDEsIDB4ODY3QywgMHgxQkZDLAorICAgIDB4ODY4NSwgMHgxREVGLCAweDg2ODYsIDB4MURFQywgMHg4Njg3LCAweDFERUEsIDB4ODY4QSwgMHgwOUIwLAorICAgIDB4ODY4QiwgMHgxREVELCAweDg2OEMsIDB4MDlCNSwgMHg4NjhELCAweDFERTcsIDB4ODY4RSwgMHgxREY2LAorICAgIDB4ODY5MCwgMHgxREY4LCAweDg2OTEsIDB4MURFOCwgMHg4NjkzLCAweDA5QjIsIDB4ODY5NCwgMHgxREY5LAorICAgIDB4ODY5NSwgMHgxREY0LCAweDg2OTYsIDB4MURFNiwgMHg4Njk3LCAweDFERUIsIDB4ODY5OCwgMHgxREY1LAorICAgIDB4ODY5OSwgMHgxREYxLCAweDg2OUEsIDB4MURFRSwgMHg4NjlDLCAweDA5QjcsIDB4ODY5RCwgMHgxREY3LAorICAgIDB4ODY5RSwgMHgxREU5LCAweDg2QTEsIDB4MURGMiwgMHg4NkEyLCAweDFERTQsIDB4ODZBMywgMHgwOUI2LAorICAgIDB4ODZBNCwgMHgwOUIzLCAweDg2QTUsIDB4MURGMCwgMHg4NkE3LCAweDFERjMsIDB4ODZBOCwgMHgxREU1LAorICAgIDB4ODZBOSwgMHgwOUI0LCAweDg2QUEsIDB4MDlCMSwgMHg4NkFGLCAweDBCOTIsIDB4ODZCMCwgMHgyMDQzLAorICAgIDB4ODZCMSwgMHgwQjkxLCAweDg2QjMsIDB4MjA0NiwgMHg4NkI0LCAweDIwNDksIDB4ODZCNSwgMHgwQjhFLAorICAgIDB4ODZCNiwgMHgwQjhDLCAweDg2QjcsIDB4MjAzRSwgMHg4NkI4LCAweDIwNDcsIDB4ODZCOSwgMHgyMDQ1LAorICAgIDB4ODZCQSwgMHgyMDQyLCAweDg2QkIsIDB4MjA0QSwgMHg4NkJDLCAweDIwNEIsIDB4ODZCRCwgMHgyMDRELAorICAgIDB4ODZCRSwgMHgyMDRFLCAweDg2QkYsIDB4MjAzRCwgMHg4NkMwLCAweDBCOEIsIDB4ODZDMSwgMHgyMDQwLAorICAgIDB4ODZDMiwgMHgyMDNGLCAweDg2QzMsIDB4MjA0QywgMHg4NkM0LCAweDBCOEQsIDB4ODZDNSwgMHgyMDQxLAorICAgIDB4ODZDNiwgMHgwQjhGLCAweDg2QzcsIDB4MEI4QSwgMHg4NkM4LCAweDIwNDQsIDB4ODZDOSwgMHgwQjkzLAorICAgIDB4ODZDQiwgMHgwQjkwLCAweDg2Q0MsIDB4MjA0OCwgMHg4NkQwLCAweDBENEYsIDB4ODZEMSwgMHgyMkQyLAorICAgIDB4ODZEMywgMHgyMkM3LCAweDg2RDQsIDB4MEQ0QywgMHg4NkQ2LCAweDI1NkQsIDB4ODZENywgMHgyMkQwLAorICAgIDB4ODZEOCwgMHgyMkM0LCAweDg2RDksIDB4MEQ0QSwgMHg4NkRBLCAweDIyQzksIDB4ODZEQiwgMHgwRDRELAorICAgIDB4ODZEQywgMHgyMkNELCAweDg2REQsIDB4MjJDQiwgMHg4NkRFLCAweDBENTAsIDB4ODZERiwgMHgwRDQ5LAorICAgIDB4ODZFMiwgMHgyMkM1LCAweDg2RTMsIDB4MjJDOCwgMHg4NkU0LCAweDBENEUsIDB4ODZFNiwgMHgyMkM2LAorICAgIDB4ODZFOCwgMHgyMkQxLCAweDg2RTksIDB4MjJDRiwgMHg4NkVBLCAweDIyQ0EsIDB4ODZFQiwgMHgyMkNDLAorICAgIDB4ODZFQywgMHgyMkNFLCAweDg2RUQsIDB4MEQ0QiwgMHg4NkY1LCAweDI1NkUsIDB4ODZGNiwgMHgyNTc0LAorICAgIDB4ODZGNywgMHgyNTZBLCAweDg2RjgsIDB4MjU3MCwgMHg4NkY5LCAweDBFRUYsIDB4ODZGQSwgMHgyNTZDLAorICAgIDB4ODZGQiwgMHgwRUY1LCAweDg2RkUsIDB4MEVGNCwgMHg4NzAwLCAweDBFRjMsIDB4ODcwMSwgMHgyNTczLAorICAgIDB4ODcwMiwgMHgwRUY2LCAweDg3MDMsIDB4MEVGNywgMHg4NzA0LCAweDI1NjksIDB4ODcwNSwgMHgyNTc2LAorICAgIDB4ODcwNiwgMHgwRUY4LCAweDg3MDcsIDB4MEVGMiwgMHg4NzA4LCAweDBFRjEsIDB4ODcwOSwgMHgyNTcyLAorICAgIDB4ODcwQSwgMHgwRUY5LCAweDg3MEIsIDB4MjU2OCwgMHg4NzBDLCAweDI1NkIsIDB4ODcwRCwgMHgyNTc1LAorICAgIDB4ODcwRSwgMHgyNTcxLCAweDg3MTEsIDB4MjdFRSwgMHg4NzEyLCAweDI3RTMsIDB4ODcxMywgMHgwRUYwLAorICAgIDB4ODcxOCwgMHgxMDk4LCAweDg3MTksIDB4MjdENywgMHg4NzFBLCAweDI3RUMsIDB4ODcxQiwgMHgyN0Q4LAorICAgIDB4ODcxQywgMHgxMDkzLCAweDg3MUUsIDB4MjdENSwgMHg4NzIwLCAweDI3REUsIDB4ODcyMSwgMHgyN0Q2LAorICAgIDB4ODcyMiwgMHgxMDk1LCAweDg3MjMsIDB4MjdEMCwgMHg4NzI0LCAweDI3RUIsIDB4ODcyNSwgMHgxMDk2LAorICAgIDB4ODcyNiwgMHgyN0U4LCAweDg3MjcsIDB4MjdFOSwgMHg4NzI4LCAweDI3RDEsIDB4ODcyOSwgMHgxMDlCLAorICAgIDB4ODcyQSwgMHgyN0UwLCAweDg3MkMsIDB4MjdEQSwgMHg4NzJELCAweDI3RTEsIDB4ODcyRSwgMHgyN0Q0LAorICAgIDB4ODczMCwgMHgyN0VELCAweDg3MzEsIDB4MjdFNSwgMHg4NzMyLCAweDI3REYsIDB4ODczMywgMHgyN0NGLAorICAgIDB4ODczNCwgMHgxMDk3LCAweDg3MzUsIDB4MjdFNiwgMHg4NzM3LCAweDEwOUEsIDB4ODczOCwgMHgyN0VBLAorICAgIDB4ODczQSwgMHgyN0U0LCAweDg3M0IsIDB4MTA5NCwgMHg4NzNDLCAweDI3RTIsIDB4ODczRSwgMHgyN0RDLAorICAgIDB4ODczRiwgMHgxMDkyLCAweDg3NDAsIDB4MjdEMywgMHg4NzQxLCAweDI3REIsIDB4ODc0MiwgMHgyN0U3LAorICAgIDB4ODc0MywgMHgyN0Q5LCAweDg3NDYsIDB4MjdERCwgMHg4NzRDLCAweDEyMDgsIDB4ODc0RCwgMHgyNTZGLAorICAgIDB4ODc0RSwgMHgyQTIwLCAweDg3NEYsIDB4MkEyOSwgMHg4NzUwLCAweDJBMUYsIDB4ODc1MSwgMHgyQTFCLAorICAgIDB4ODc1MiwgMHgyQTE4LCAweDg3NTMsIDB4MTIwOSwgMHg4NzU0LCAweDJBMTYsIDB4ODc1NSwgMHgxMDk5LAorICAgIDB4ODc1NiwgMHgyQTBGLCAweDg3NTcsIDB4MTIwNywgMHg4NzU4LCAweDJBMTUsIDB4ODc1OSwgMHgxMjA2LAorICAgIDB4ODc1QSwgMHgyQTFBLCAweDg3NUIsIDB4MkExNywgMHg4NzVDLCAweDJBMjcsIDB4ODc1RCwgMHgyQTIyLAorICAgIDB4ODc1RSwgMHgyQTFDLCAweDg3NUYsIDB4MkEyMSwgMHg4NzYwLCAweDEyMDIsIDB4ODc2MSwgMHgyQTE5LAorICAgIDB4ODc2MiwgMHgyQTJDLCAweDg3NjMsIDB4MkExMCwgMHg4NzY0LCAweDJBMTEsIDB4ODc2NSwgMHgyQTI4LAorICAgIDB4ODc2NiwgMHgxMjAzLCAweDg3NjcsIDB4MkEyRCwgMHg4NzY4LCAweDEyMDUsIDB4ODc2OSwgMHgyQTJFLAorICAgIDB4ODc2QSwgMHgyQTFFLCAweDg3NkIsIDB4MjdEMiwgMHg4NzZDLCAweDJBMjQsIDB4ODc2RCwgMHgyQTFELAorICAgIDB4ODc2RSwgMHgyQTI2LCAweDg3NkYsIDB4MkEyMywgMHg4NzczLCAweDJBMTQsIDB4ODc3NCwgMHgxMjAwLAorICAgIDB4ODc3NSwgMHgyQTJCLCAweDg3NzYsIDB4MTIwMSwgMHg4Nzc3LCAweDJBMTIsIDB4ODc3OCwgMHgxMjA0LAorICAgIDB4ODc3OSwgMHgyQzZCLCAweDg3N0EsIDB4MkEyNSwgMHg4NzdCLCAweDJBMkEsIDB4ODc4MSwgMHgyQzY4LAorICAgIDB4ODc4MiwgMHgxMUZGLCAweDg3ODMsIDB4MTM0MCwgMHg4Nzg0LCAweDJDNzIsIDB4ODc4NSwgMHgyQzZFLAorICAgIDB4ODc4NywgMHgyQzZDLCAweDg3ODgsIDB4MkM2NywgMHg4Nzg5LCAweDJDNzYsIDB4ODc4RCwgMHgxMzQ0LAorICAgIDB4ODc4RiwgMHgyQzYzLCAweDg3OTAsIDB4MkM2RiwgMHg4NzkxLCAweDJDNzAsIDB4ODc5MiwgMHgyQzY2LAorICAgIDB4ODc5MywgMHgyQzY1LCAweDg3OTQsIDB4MkM3MywgMHg4Nzk2LCAweDJDNjksIDB4ODc5NywgMHgyQzY0LAorICAgIDB4ODc5OCwgMHgyQzZBLCAweDg3OUEsIDB4MkM3NSwgMHg4NzlCLCAweDJDNjIsIDB4ODc5QywgMHgyQzc0LAorICAgIDB4ODc5RCwgMHgyQzcxLCAweDg3OUUsIDB4MTM0MiwgMHg4NzlGLCAweDEzNDEsIDB4ODdBMiwgMHgxMzQzLAorICAgIDB4ODdBMywgMHgyQzZELCAweDg3QTQsIDB4MkM2MSwgMHg4N0FBLCAweDJFMzYsIDB4ODdBQiwgMHgxNDZDLAorICAgIDB4ODdBQywgMHgyRTNBLCAweDg3QUQsIDB4MkUzNywgMHg4N0FFLCAweDJFM0UsIDB4ODdBRiwgMHgyRTQ0LAorICAgIDB4ODdCMCwgMHgyRTM5LCAweDg3QjIsIDB4MkU0RCwgMHg4N0IzLCAweDE0NjksIDB4ODdCNCwgMHgyRTQ3LAorICAgIDB4ODdCNSwgMHgyRTNDLCAweDg3QjYsIDB4MkU0OCwgMHg4N0I3LCAweDJFNDMsIDB4ODdCOCwgMHgyRTRBLAorICAgIDB4ODdCOSwgMHgyRTNCLCAweDg3QkEsIDB4MTQ2RSwgMHg4N0JCLCAweDE0NkQsIDB4ODdCQywgMHgyRTNELAorICAgIDB4ODdCRCwgMHgyRTRCLCAweDg3QkUsIDB4MkUzNSwgMHg4N0JGLCAweDJFNDksIDB4ODdDMCwgMHgxNDY3LAorICAgIDB4ODdDMiwgMHgyRTQxLCAweDg3QzMsIDB4MkU0MCwgMHg4N0M0LCAweDJFNDUsIDB4ODdDNSwgMHgyRTM4LAorICAgIDB4ODdDNiwgMHgxNDZCLCAweDg3QzgsIDB4MTQ2RiwgMHg4N0M5LCAweDJFM0YsIDB4ODdDQSwgMHgyRTQ2LAorICAgIDB4ODdDQiwgMHgxNDcwLCAweDg3Q0MsIDB4MkU0MiwgMHg4N0QxLCAweDE0NjgsIDB4ODdEMiwgMHgxNDZBLAorICAgIDB4ODdEMywgMHgyRkJBLCAweDg3RDQsIDB4MkZCOCwgMHg4N0Q3LCAweDJGQkUsIDB4ODdEOCwgMHgyRkJDLAorICAgIDB4ODdEOSwgMHgyRkJGLCAweDg3REIsIDB4MkZCMSwgMHg4N0RDLCAweDJGQjksIDB4ODdERCwgMHgyRkMzLAorICAgIDB4ODdERSwgMHgyRTRDLCAweDg3REYsIDB4MkZCNSwgMHg4N0UwLCAweDE1MjYsIDB4ODdFMSwgMHgyQTEzLAorICAgIDB4ODdFMiwgMHgyRkIwLCAweDg3RTMsIDB4MkZCRCwgMHg4N0U0LCAweDJGQjcsIDB4ODdFNSwgMHgyRkI0LAorICAgIDB4ODdFNiwgMHgyRkFGLCAweDg3RTcsIDB4MkZBRSwgMHg4N0U4LCAweDJGQzIsIDB4ODdFQSwgMHgyRkIzLAorICAgIDB4ODdFQiwgMHgyRkIyLCAweDg3RUMsIDB4MTUyNCwgMHg4N0VELCAweDJGQkIsIDB4ODdFRiwgMHgxNTIzLAorICAgIDB4ODdGMiwgMHgxNTI1LCAweDg3RjMsIDB4MkZCNiwgMHg4N0Y0LCAweDJGQzEsIDB4ODdGNiwgMHgzMTBBLAorICAgIDB4ODdGNywgMHgzMTBCLCAweDg3RjksIDB4MTVCRSwgMHg4N0ZBLCAweDMxMDgsIDB4ODdGQiwgMHgxNUJCLAorICAgIDB4ODdGQywgMHgzMTEwLCAweDg3RkUsIDB4MTVCRiwgMHg4N0ZGLCAweDMxMTIsIDB4ODgwMCwgMHgzMTA3LAorICAgIDB4ODgwMSwgMHgyRkMwLCAweDg4MDIsIDB4MzExNCwgMHg4ODAzLCAweDMxMDksIDB4ODgwNSwgMHgxNUJDLAorICAgIDB4ODgwNiwgMHgzMTBGLCAweDg4MDgsIDB4MzExMSwgMHg4ODA5LCAweDMxMEMsIDB4ODgwQSwgMHgzMTEzLAorICAgIDB4ODgwQiwgMHgzMTBFLCAweDg4MEMsIDB4MzEwRCwgMHg4ODBELCAweDE1QkQsIDB4ODgxMCwgMHgzMjJDLAorICAgIDB4ODgxMSwgMHgzMjJELCAweDg4MTMsIDB4MzIyRiwgMHg4ODE0LCAweDE2M0YsIDB4ODgxNSwgMHgxNjQwLAorICAgIDB4ODgxNiwgMHgzMjMwLCAweDg4MTcsIDB4MzIyRSwgMHg4ODE5LCAweDMyMkIsIDB4ODgxQiwgMHgzMzA2LAorICAgIDB4ODgxQywgMHgzMzA5LCAweDg4MUQsIDB4MzMwNSwgMHg4ODFGLCAweDE2OEIsIDB4ODgyMCwgMHgzMzA3LAorICAgIDB4ODgyMSwgMHgxNjhBLCAweDg4MjIsIDB4MTY4OSwgMHg4ODIzLCAweDE2ODgsIDB4ODgyNCwgMHgzMzA4LAorICAgIDB4ODgyNSwgMHgzM0IxLCAweDg4MjYsIDB4MzNBRiwgMHg4ODI4LCAweDMzQUUsIDB4ODgyOSwgMHgzMzA0LAorICAgIDB4ODgyQSwgMHgzM0IwLCAweDg4MkIsIDB4MzMwQSwgMHg4ODJDLCAweDMzQUQsIDB4ODgyRSwgMHgzNDM3LAorICAgIDB4ODgyRiwgMHgzNDE1LCAweDg4MzAsIDB4MzQzNSwgMHg4ODMxLCAweDE3MDksIDB4ODgzMiwgMHgzNDM2LAorICAgIDB4ODgzMywgMHgzNDM4LCAweDg4MzUsIDB4MzQ5QSwgMHg4ODM2LCAweDE3MjgsIDB4ODgzNywgMHgzNDk5LAorICAgIDB4ODgzOCwgMHgzNDk4LCAweDg4MzksIDB4MTcyOSwgMHg4ODNCLCAweDE3NDcsIDB4ODgzQywgMHgzNTA4LAorICAgIDB4ODgzRCwgMHgzNTIwLCAweDg4M0UsIDB4MzUxRiwgMHg4ODNGLCAweDM1MjEsIDB4ODg0MCwgMHgwNDEwLAorICAgIDB4ODg0MSwgMHgxQkZFLCAweDg4NDMsIDB4MURGQSwgMHg4ODQ0LCAweDFERkIsIDB4ODg0OCwgMHgyMkQzLAorICAgIDB4ODg0QSwgMHgzMzBCLCAweDg4NEIsIDB4MzQ5QiwgMHg4ODRDLCAweDA0MTEsIDB4ODg0RCwgMHgwODAzLAorICAgIDB4ODg0RSwgMHgxQkZGLCAweDg4NTIsIDB4MjA0RiwgMHg4ODUzLCAweDBCOTQsIDB4ODg1NSwgMHgyMkQ1LAorICAgIDB4ODg1NiwgMHgyMkQ0LCAweDg4NTcsIDB4MEQ1MSwgMHg4ODU5LCAweDBFRkEsIDB4ODg1QSwgMHgyQTJGLAorICAgIDB4ODg1QiwgMHgxMjBBLCAweDg4NUQsIDB4MTIwQiwgMHg4ODYxLCAweDEzNDUsIDB4ODg2MiwgMHgxNzJBLAorICAgIDB4ODg2MywgMHgwNDEyLCAweDg4NjcsIDB4MUMwMCwgMHg4ODY4LCAweDA2OEMsIDB4ODg2OSwgMHgxQzAyLAorICAgIDB4ODg2QSwgMHgxQzAxLCAweDg4NkIsIDB4MDgwNCwgMHg4ODZELCAweDFERkMsIDB4ODg2RiwgMHgxRTAzLAorICAgIDB4ODg3MCwgMHgwOUI4LCAweDg4NzEsIDB4MUUwMSwgMHg4ODcyLCAweDFERkYsIDB4ODg3NCwgMHgxRTA2LAorICAgIDB4ODg3NSwgMHgxREZELCAweDg4NzYsIDB4MURGRSwgMHg4ODc3LCAweDA5QjksIDB4ODg3OSwgMHgwOUJELAorICAgIDB4ODg3QywgMHgxRTA3LCAweDg4N0QsIDB4MDlCQywgMHg4ODdFLCAweDFFMDUsIDB4ODg3RiwgMHgxRTAyLAorICAgIDB4ODg4MCwgMHgxRTAwLCAweDg4ODEsIDB4MDlCQSwgMHg4ODgyLCAweDA5QkIsIDB4ODg4MywgMHgxRTA0LAorICAgIDB4ODg4OCwgMHgwQjk2LCAweDg4ODksIDB4MjA1MCwgMHg4ODhCLCAweDBCOUIsIDB4ODg4QywgMHgyMDYwLAorICAgIDB4ODg4RCwgMHgwQjlBLCAweDg4OEUsIDB4MjA2MiwgMHg4ODkxLCAweDIwNTYsIDB4ODg5MiwgMHgwQjk4LAorICAgIDB4ODg5MywgMHgyMDYxLCAweDg4OTUsIDB4MjA1MSwgMHg4ODk2LCAweDBCOTksIDB4ODg5NywgMHgyMDVELAorICAgIDB4ODg5OCwgMHgyMDU5LCAweDg4OTksIDB4MjA1QiwgMHg4ODlBLCAweDIwNTUsIDB4ODg5QiwgMHgyMDVDLAorICAgIDB4ODg5RSwgMHgwQjk1LCAweDg4OUYsIDB4MjA1OCwgMHg4OEExLCAweDIwNTcsIDB4ODhBMiwgMHgyMDUzLAorICAgIDB4ODhBNCwgMHgyMDVFLCAweDg4QTcsIDB4MjA1QSwgMHg4OEE4LCAweDIwNTIsIDB4ODhBQSwgMHgyMDU0LAorICAgIDB4ODhBQiwgMHgwQjk3LCAweDg4QUMsIDB4MjA1RiwgMHg4OEIxLCAweDBENTQsIDB4ODhCMiwgMHgyMkUwLAorICAgIDB4ODhCNiwgMHgyMkRDLCAweDg4QjcsIDB4MjJERSwgMHg4OEI4LCAweDIyRDksIDB4ODhCOSwgMHgyMkQ4LAorICAgIDB4ODhCQSwgMHgyMkQ2LCAweDg4QkMsIDB4MjJERCwgMHg4OEJELCAweDIyREYsIDB4ODhCRSwgMHgyMkRCLAorICAgIDB4ODhDMCwgMHgyMkRBLCAweDg4QzEsIDB4MEQ1MiwgMHg4OEMyLCAweDBENTMsIDB4ODhDOSwgMHgyMkUyLAorICAgIDB4ODhDQSwgMHgwRjAyLCAweDg4Q0IsIDB4MjU3OCwgMHg4OENDLCAweDI1N0UsIDB4ODhDRCwgMHgyNTc5LAorICAgIDB4ODhDRSwgMHgyNTdBLCAweDg4Q0YsIDB4MzZFQSwgMHg4OEQwLCAweDI1N0YsIDB4ODhEMiwgMHgwRjA0LAorICAgIDB4ODhENCwgMHgwRUZDLCAweDg4RDUsIDB4MEYwMywgMHg4OEQ2LCAweDI1NzcsIDB4ODhENywgMHgyMkQ3LAorICAgIDB4ODhEOCwgMHgwRUZGLCAweDg4RDksIDB4MEVGRCwgMHg4OERBLCAweDI1N0QsIDB4ODhEQiwgMHgyNTdDLAorICAgIDB4ODhEQywgMHgwRUZFLCAweDg4REQsIDB4MEYwMCwgMHg4OERFLCAweDI1N0IsIDB4ODhERiwgMHgwRUZCLAorICAgIDB4ODhFMSwgMHgwRjAxLCAweDg4RTcsIDB4MjdGMCwgMHg4OEU4LCAweDEwQTIsIDB4ODhFQiwgMHgyN0ZCLAorICAgIDB4ODhFQywgMHgyN0ZBLCAweDg4RUUsIDB4MjdGNSwgMHg4OEVGLCAweDEwQTQsIDB4ODhGMCwgMHgyN0Y5LAorICAgIDB4ODhGMSwgMHgyN0YxLCAweDg4RjIsIDB4MjdGMiwgMHg4OEYzLCAweDEwOUMsIDB4ODhGNCwgMHgxMDlFLAorICAgIDB4ODhGNiwgMHgyN0Y3LCAweDg4RjcsIDB4MjdFRiwgMHg4OEY4LCAweDEwQTAsIDB4ODhGOSwgMHgxMDlGLAorICAgIDB4ODhGQSwgMHgyN0YzLCAweDg4RkIsIDB4MjdGOCwgMHg4OEZDLCAweDI3RjYsIDB4ODhGRCwgMHgxMEExLAorICAgIDB4ODhGRSwgMHgyN0Y0LCAweDg5MDEsIDB4MjJFMSwgMHg4OTAyLCAweDEwOUQsIDB4ODkwNSwgMHgyQTMwLAorICAgIDB4ODkwNiwgMHgyQTM3LCAweDg5MDcsIDB4MTIwRCwgMHg4OTA5LCAweDJBM0IsIDB4ODkwQSwgMHgxMjExLAorICAgIDB4ODkwQiwgMHgyQTMzLCAweDg5MEMsIDB4MkEzMSwgMHg4OTBFLCAweDJBM0EsIDB4ODkxMCwgMHgxMjBDLAorICAgIDB4ODkxMSwgMHgyQTM5LCAweDg5MTIsIDB4MTIwRSwgMHg4OTEzLCAweDEyMEYsIDB4ODkxNCwgMHgyQTMyLAorICAgIDB4ODkxNSwgMHgxMjEwLCAweDg5MTYsIDB4MkEzOCwgMHg4OTE3LCAweDJBMzQsIDB4ODkxOCwgMHgyQTM1LAorICAgIDB4ODkxOSwgMHgyQTM2LCAweDg5MUEsIDB4MTBBMywgMHg4OTFFLCAweDJDNzcsIDB4ODkxRiwgMHgyQzgzLAorICAgIDB4ODkyMSwgMHgxMzRBLCAweDg5MjIsIDB4MkM3RSwgMHg4OTIzLCAweDJDODAsIDB4ODkyNSwgMHgxMzQ4LAorICAgIDB4ODkyNiwgMHgyQzc4LCAweDg5MjcsIDB4MkM3QywgMHg4OTI5LCAweDJDN0YsIDB4ODkyQSwgMHgxMzQ2LAorICAgIDB4ODkyQiwgMHgxMzQ5LCAweDg5MkMsIDB4MkM4MiwgMHg4OTJELCAweDJDN0EsIDB4ODkyRSwgMHgyQzdCLAorICAgIDB4ODkyRiwgMHgyQzgxLCAweDg5MzAsIDB4MkM3OSwgMHg4OTMxLCAweDJDN0QsIDB4ODkzMiwgMHgxMzQ3LAorICAgIDB4ODkzMywgMHgyRTRGLCAweDg5MzUsIDB4MkU0RSwgMHg4OTM2LCAweDE0NzIsIDB4ODkzNywgMHgyRTU0LAorICAgIDB4ODkzOCwgMHgxNDc0LCAweDg5M0IsIDB4MTQ3MSwgMHg4OTNDLCAweDJFNTAsIDB4ODkzRCwgMHgxNDc1LAorICAgIDB4ODkzRSwgMHgyRTUxLCAweDg5NDEsIDB4MkU1MiwgMHg4OTQyLCAweDJFNTUsIDB4ODk0NCwgMHgxNDczLAorICAgIDB4ODk0NiwgMHgyRkM4LCAweDg5NDksIDB4MkZDQiwgMHg4OTRCLCAweDJGQzUsIDB4ODk0QywgMHgyRkM3LAorICAgIDB4ODk0RiwgMHgyRkM2LCAweDg5NTAsIDB4MkZDOSwgMHg4OTUxLCAweDJGQ0EsIDB4ODk1MiwgMHgyRTUzLAorICAgIDB4ODk1MywgMHgyRkM0LCAweDg5NTYsIDB4MTVDMiwgMHg4OTU3LCAweDMxMTgsIDB4ODk1OCwgMHgzMTFCLAorICAgIDB4ODk1OSwgMHgzMTFELCAweDg5NUEsIDB4MzExNiwgMHg4OTVCLCAweDMxMTcsIDB4ODk1QywgMHgzMTFBLAorICAgIDB4ODk1RCwgMHgzMTFDLCAweDg5NUUsIDB4MTVDMywgMHg4OTVGLCAweDE1QzEsIDB4ODk2MCwgMHgxNUMwLAorICAgIDB4ODk2MSwgMHgzMTE5LCAweDg5NjIsIDB4MzExNSwgMHg4OTYzLCAweDMyMzEsIDB4ODk2NCwgMHgxNjQxLAorICAgIDB4ODk2NiwgMHgzMjMyLCAweDg5NjksIDB4MzMwRCwgMHg4OTZBLCAweDE2OEMsIDB4ODk2QiwgMHgzMzBGLAorICAgIDB4ODk2QywgMHgxNjhELCAweDg5NkQsIDB4MzMwQywgMHg4OTZFLCAweDMzMEUsIDB4ODk2RiwgMHgxNkQ2LAorICAgIDB4ODk3MSwgMHgzM0IyLCAweDg5NzIsIDB4MTZENSwgMHg4OTczLCAweDM0M0IsIDB4ODk3NCwgMHgzNDNBLAorICAgIDB4ODk3NiwgMHgzNDM5LCAweDg5NzksIDB4MzRFMiwgMHg4OTdBLCAweDM0RTMsIDB4ODk3QiwgMHgzNEU1LAorICAgIDB4ODk3QywgMHgzNEU0LCAweDg5N0UsIDB4MTgxOSwgMHg4OTdGLCAweDA0MTMsIDB4ODk4MSwgMHgwODA1LAorICAgIDB4ODk4MiwgMHgyMDYzLCAweDg5ODMsIDB4MEQ1NSwgMHg4OTg1LCAweDI1ODAsIDB4ODk4NiwgMHgxNTI3LAorICAgIDB4ODk4OCwgMHgzMTFFLCAweDg5OEIsIDB4MDUwOCwgMHg4OThGLCAweDBCOUQsIDB4ODk5MywgMHgwQjlDLAorICAgIDB4ODk5NSwgMHgyMkUzLCAweDg5OTYsIDB4MEQ1NiwgMHg4OTk3LCAweDIyRTUsIDB4ODk5OCwgMHgyMkU0LAorICAgIDB4ODk5QiwgMHgyNTgxLCAweDg5OUMsIDB4MEYwNSwgMHg4OTlELCAweDI3RkMsIDB4ODk5RSwgMHgyN0ZGLAorICAgIDB4ODk5RiwgMHgyN0ZFLCAweDg5QTEsIDB4MjdGRCwgMHg4OUEyLCAweDJBM0MsIDB4ODlBMywgMHgyQTNFLAorICAgIDB4ODlBNCwgMHgyQTNELCAweDg5QTYsIDB4MTM0QywgMHg4OUFBLCAweDEzNEIsIDB4ODlBQywgMHgxNDc2LAorICAgIDB4ODlBRCwgMHgyRTU2LCAweDg5QUUsIDB4MkU1OCwgMHg4OUFGLCAweDJFNTcsIDB4ODlCMiwgMHgxNTI4LAorICAgIDB4ODlCNiwgMHgzMTIwLCAweDg5QjcsIDB4MzExRiwgMHg4OUI5LCAweDMyMzMsIDB4ODlCQSwgMHgxNjQyLAorICAgIDB4ODlCRCwgMHgxNjhFLCAweDg5QkUsIDB4MzNCNCwgMHg4OUJGLCAweDMzQjMsIDB4ODlDMCwgMHgxNzQ4LAorICAgIDB4ODlEMiwgMHgwNTA5LCAweDg5RDMsIDB4MUMwMywgMHg4OUQ0LCAweDA4MDYsIDB4ODlENSwgMHgyMDY2LAorICAgIDB4ODlENiwgMHgyMDY0LCAweDg5RDksIDB4MjA2NSwgMHg4OURBLCAweDIyRTcsIDB4ODlEQiwgMHgyMkU4LAorICAgIDB4ODlEQywgMHgyNTg4LCAweDg5REQsIDB4MjJFNiwgMHg4OURGLCAweDI1ODIsIDB4ODlFMCwgMHgyNTg2LAorICAgIDB4ODlFMSwgMHgyNTg1LCAweDg5RTIsIDB4MjU4NywgMHg4OUUzLCAweDBGMDYsIDB4ODlFNCwgMHgyNTg0LAorICAgIDB4ODlFNSwgMHgyNTgzLCAweDg5RTYsIDB4MjU4OSwgMHg4OUU4LCAweDI4MDIsIDB4ODlFOSwgMHgyODAwLAorICAgIDB4ODlFQiwgMHgyODAxLCAweDg5RUMsIDB4MkE0MSwgMHg4OUVELCAweDJBM0YsIDB4ODlGMCwgMHgyQTQwLAorICAgIDB4ODlGMSwgMHgyQzg0LCAweDg5RjIsIDB4MkU1OSwgMHg4OUYzLCAweDJFNUEsIDB4ODlGNCwgMHgxNTI5LAorICAgIDB4ODlGNiwgMHgzMTIxLCAweDg5RjcsIDB4MzIzNCwgMHg4OUY4LCAweDE2NDMsIDB4ODlGQSwgMHgzMzEwLAorICAgIDB4ODlGQiwgMHgzM0I1LCAweDg5RkMsIDB4MTZENywgMHg4OUZFLCAweDM0M0MsIDB4ODlGRiwgMHgzNEU2LAorICAgIDB4OEEwMCwgMHgwNTBBLCAweDhBMDIsIDB4MDgwOCwgMHg4QTAzLCAweDA4MDksIDB4OEEwNCwgMHgxQzA0LAorICAgIDB4OEEwNywgMHgxQzA1LCAweDhBMDgsIDB4MDgwNywgMHg4QTBBLCAweDA5QzMsIDB4OEEwQywgMHgwOUMxLAorICAgIDB4OEEwRSwgMHgwOUMwLCAweDhBMEYsIDB4MDlDNywgMHg4QTEwLCAweDA5QkYsIDB4OEExMSwgMHgwOUM4LAorICAgIDB4OEExMiwgMHgxRTA4LCAweDhBMTMsIDB4MDlDNSwgMHg4QTE1LCAweDA5QzIsIDB4OEExNiwgMHgwOUM2LAorICAgIDB4OEExNywgMHgwOUM0LCAweDhBMTgsIDB4MDlCRSwgMHg4QTFCLCAweDBCQTUsIDB4OEExRCwgMHgwQjlGLAorICAgIDB4OEExRSwgMHgyMDZBLCAweDhBMUYsIDB4MEJBNCwgMHg4QTIyLCAweDBCQTYsIDB4OEEyMywgMHgwQkEwLAorICAgIDB4OEEyNSwgMHgwQkExLCAweDhBMjcsIDB4MjA2OCwgMHg4QTJBLCAweDBCOUUsIDB4OEEyQywgMHgyMDY5LAorICAgIDB4OEEyRCwgMHgwQkEzLCAweDhBMzAsIDB4MjA2NywgMHg4QTMxLCAweDBCQTIsIDB4OEEzNCwgMHgwRDYxLAorICAgIDB4OEEzNiwgMHgwRDYzLCAweDhBMzksIDB4MjJFQiwgMHg4QTNBLCAweDBENjIsIDB4OEEzQiwgMHgwRDU3LAorICAgIDB4OEEzQywgMHgwRDVCLCAweDhBM0UsIDB4MEYxOSwgMHg4QTNGLCAweDI1OEUsIDB4OEE0MCwgMHgyMkVELAorICAgIDB4OEE0MSwgMHgwRDVDLCAweDhBNDQsIDB4MjJGMCwgMHg4QTQ1LCAweDIyRjEsIDB4OEE0NiwgMHgwRDYwLAorICAgIDB4OEE0OCwgMHgyMkYzLCAweDhBNEEsIDB4MjJGNSwgMHg4QTRDLCAweDIyRjYsIDB4OEE0RCwgMHgyMkVBLAorICAgIDB4OEE0RSwgMHgyMkU5LCAweDhBNEYsIDB4MjJGNywgMHg4QTUwLCAweDBENUYsIDB4OEE1MSwgMHgyMkY0LAorICAgIDB4OEE1MiwgMHgyMkYyLCAweDhBNTQsIDB4MEQ1RCwgMHg4QTU1LCAweDBENTksIDB4OEE1NiwgMHgwRDY0LAorICAgIDB4OEE1NywgMHgyMkVFLCAweDhBNTgsIDB4MjJFRiwgMHg4QTU5LCAweDIyRUMsIDB4OEE1QiwgMHgwRDVFLAorICAgIDB4OEE1RSwgMHgwRDVBLCAweDhBNjAsIDB4MEQ1OCwgMHg4QTYxLCAweDI1OEQsIDB4OEE2MiwgMHgwRjE0LAorICAgIDB4OEE2MywgMHgwRjBGLCAweDhBNjYsIDB4MEYwQSwgMHg4QTY4LCAweDBGMUEsIDB4OEE2OSwgMHgwRjBCLAorICAgIDB4OEE2QiwgMHgwRjA3LCAweDhBNkMsIDB4MEYxNiwgMHg4QTZELCAweDBGMTMsIDB4OEE2RSwgMHgwRjE1LAorICAgIDB4OEE3MCwgMHgwRjBDLCAweDhBNzEsIDB4MEYxMSwgMHg4QTcyLCAweDBGMDgsIDB4OEE3MywgMHgwRjA5LAorICAgIDB4OEE3NCwgMHgyNTk1LCAweDhBNzUsIDB4MjU5MiwgMHg4QTc2LCAweDI1OEEsIDB4OEE3NywgMHgyNThGLAorICAgIDB4OEE3OSwgMHgwRjE3LCAweDhBN0EsIDB4MjU5NiwgMHg4QTdCLCAweDBGMTgsIDB4OEE3QywgMHgwRjBFLAorICAgIDB4OEE3RiwgMHgyNThDLCAweDhBODEsIDB4MjU5NCwgMHg4QTgyLCAweDI1OTAsIDB4OEE4MywgMHgyNTkzLAorICAgIDB4OEE4NCwgMHgyNTkxLCAweDhBODUsIDB4MEYxMiwgMHg4QTg2LCAweDI1OEIsIDB4OEE4NywgMHgwRjBELAorICAgIDB4OEE4QiwgMHgyODA1LCAweDhBOEMsIDB4MTBBNiwgMHg4QThELCAweDEwQTksIDB4OEE4RiwgMHgyODA3LAorICAgIDB4OEE5MSwgMHgxMEIxLCAweDhBOTIsIDB4MjgwNiwgMHg4QTkzLCAweDEwQUIsIDB4OEE5NSwgMHgxMjE2LAorICAgIDB4OEE5NiwgMHgyODA4LCAweDhBOTgsIDB4MTBCMCwgMHg4QTk5LCAweDI4MDQsIDB4OEE5QSwgMHgxMEIyLAorICAgIDB4OEE5RSwgMHgxMEE3LCAweDhBQTAsIDB4MEYxMCwgMHg4QUExLCAweDEwQUEsIDB4OEFBMywgMHgxMEE4LAorICAgIDB4OEFBNCwgMHgxMEFDLCAweDhBQTUsIDB4MTBBRSwgMHg4QUE2LCAweDEwQTUsIDB4OEFBNywgMHgxMEIzLAorICAgIDB4OEFBOCwgMHgxMEFGLCAweDhBQUEsIDB4MTBBRCwgMHg4QUFCLCAweDI4MDMsIDB4OEFCMCwgMHgxMjFELAorICAgIDB4OEFCMiwgMHgxMjE5LCAweDhBQjYsIDB4MTIyMCwgMHg4QUI4LCAweDJBNDQsIDB4OEFCOSwgMHgxMjIxLAorICAgIDB4OEFCQSwgMHgyQTUwLCAweDhBQkIsIDB4MkE0OSwgMHg4QUJDLCAweDEyMTIsIDB4OEFCRCwgMHgyQTUxLAorICAgIDB4OEFCRSwgMHgyQTRCLCAweDhBQkYsIDB4MTIxQywgMHg4QUMwLCAweDJBNEMsIDB4OEFDMiwgMHgxMjFCLAorICAgIDB4OEFDMywgMHgyQTRGLCAweDhBQzQsIDB4MTIxNSwgMHg4QUM1LCAweDJBNEQsIDB4OEFDNiwgMHgyQTQzLAorICAgIDB4OEFDNywgMHgxMjE0LCAweDhBQzgsIDB4MkM4RiwgMHg4QUM5LCAweDEyMUEsIDB4OEFDQiwgMHgxMjE3LAorICAgIDB4OEFDRCwgMHgxMjFGLCAweDhBQ0YsIDB4MkE0MiwgMHg4QUQxLCAweDJBNDYsIDB4OEFEMiwgMHgxMjEzLAorICAgIDB4OEFEMywgMHgyQTQ1LCAweDhBRDQsIDB4MkE0NywgMHg4QUQ1LCAweDJBNDgsIDB4OEFENiwgMHgxMjFFLAorICAgIDB4OEFENywgMHgyQTRBLCAweDhBRDgsIDB4MkE0RSwgMHg4QUQ5LCAweDJBNTIsIDB4OEFEQiwgMHgxMjIyLAorICAgIDB4OEFEQywgMHgxMzUyLCAweDhBREQsIDB4MkM4QSwgMHg4QURFLCAweDJDOTAsIDB4OEFERiwgMHgyQzhELAorICAgIDB4OEFFMCwgMHgyQzg1LCAweDhBRTEsIDB4MkM5MSwgMHg4QUUyLCAweDJDODYsIDB4OEFFNCwgMHgyQzhDLAorICAgIDB4OEFFNiwgMHgxMzRELCAweDhBRTcsIDB4MTM1MywgMHg4QUU4LCAweDJDOTIsIDB4OEFFQiwgMHgxMzRGLAorICAgIDB4OEFFRCwgMHgxMzU5LCAweDhBRUUsIDB4MTM1NCwgMHg4QUVGLCAweDJDOTQsIDB4OEFGMCwgMHgyQzhFLAorICAgIDB4OEFGMSwgMHgxMzUwLCAweDhBRjIsIDB4MkM4NywgMHg4QUYzLCAweDEzNUEsIDB4OEFGNCwgMHgyQzg4LAorICAgIDB4OEFGNSwgMHgyQzg5LCAweDhBRjYsIDB4MTM1QiwgMHg4QUY3LCAweDEzNTgsIDB4OEFGOCwgMHgxMjE4LAorICAgIDB4OEFGQSwgMHgxMzRFLCAweDhBRkIsIDB4MkM5NSwgMHg4QUZDLCAweDEzNUMsIDB4OEFGRSwgMHgxMzU1LAorICAgIDB4OEFGRiwgMHgyQzkzLCAweDhCMDAsIDB4MTM1MSwgMHg4QjAxLCAweDEzNTYsIDB4OEIwMiwgMHgxMzU3LAorICAgIDB4OEIwNCwgMHgxNDdFLCAweDhCMDUsIDB4MkU1RiwgMHg4QjA2LCAweDJFNjgsIDB4OEIwNywgMHgyRTY1LAorICAgIDB4OEIwOCwgMHgyRTY3LCAweDhCMEEsIDB4MTQ3QiwgMHg4QjBCLCAweDJFNjAsIDB4OEIwRCwgMHgyRTY2LAorICAgIDB4OEIwRSwgMHgxNDc3LCAweDhCMEYsIDB4MkU2MiwgMHg4QjEwLCAweDE0N0YsIDB4OEIxMSwgMHgyRTVFLAorICAgIDB4OEIxMiwgMHgyRTYzLCAweDhCMTMsIDB4MkU2QSwgMHg4QjE0LCAweDJDOEIsIDB4OEIxNSwgMHgyRTY0LAorICAgIDB4OEIxNiwgMHgyRTVELCAweDhCMTcsIDB4MTQ3OCwgMHg4QjE4LCAweDJFNUMsIDB4OEIxOSwgMHgxNDc5LAorICAgIDB4OEIxQSwgMHgyRTZCLCAweDhCMUIsIDB4MTQ3QSwgMHg4QjFDLCAweDJFNjksIDB4OEIxRCwgMHgxNDdELAorICAgIDB4OEIxRSwgMHgyRTVCLCAweDhCMjAsIDB4MTQ3QywgMHg4QjIyLCAweDJFNjEsIDB4OEIyMywgMHgyRkNFLAorICAgIDB4OEIyNCwgMHgyRkRDLCAweDhCMjUsIDB4MkZENywgMHg4QjI2LCAweDJGRDksIDB4OEIyNywgMHgyRkNELAorICAgIDB4OEIyOCwgMHgxNTJBLCAweDhCMkEsIDB4MkZDQywgMHg4QjJCLCAweDE1MkQsIDB4OEIyQywgMHgxNTJDLAorICAgIDB4OEIyRSwgMHgyRkRCLCAweDhCMkYsIDB4MkZEMywgMHg4QjMwLCAweDJGRDAsIDB4OEIzMSwgMHgyRkQ2LAorICAgIDB4OEIzMywgMHgyRkNGLCAweDhCMzUsIDB4MkZEMSwgMHg4QjM2LCAweDJGREEsIDB4OEIzNywgMHgyRkQ4LAorICAgIDB4OEIzOSwgMHgxNTJCLCAweDhCM0EsIDB4MkZERiwgMHg4QjNCLCAweDJGREQsIDB4OEIzQywgMHgyRkQ0LAorICAgIDB4OEIzRCwgMHgyRkRFLCAweDhCM0UsIDB4MkZENSwgMHg4QjQwLCAweDMxMjUsIDB4OEI0MSwgMHgxNUM0LAorICAgIDB4OEI0MiwgMHgzMTJDLCAweDhCNDUsIDB4MzMxMywgMHg4QjQ2LCAweDE1Q0IsIDB4OEI0NywgMHgyRkQyLAorICAgIDB4OEI0OCwgMHgzMTIzLCAweDhCNDksIDB4MTVDNywgMHg4QjRBLCAweDMxMjQsIDB4OEI0QiwgMHgzMTI5LAorICAgIDB4OEI0RSwgMHgxNUM5LCAweDhCNEYsIDB4MTVDQSwgMHg4QjUwLCAweDMxMjIsIDB4OEI1MSwgMHgzMTJCLAorICAgIDB4OEI1MiwgMHgzMTJELCAweDhCNTMsIDB4MzEyNiwgMHg4QjU0LCAweDMxMjgsIDB4OEI1NSwgMHgzMTJBLAorICAgIDB4OEI1NiwgMHgzMTI3LCAweDhCNTcsIDB4MzEyRSwgMHg4QjU4LCAweDE1QzYsIDB4OEI1OSwgMHgxNUNDLAorICAgIDB4OEI1QSwgMHgxNUM4LCAweDhCNUMsIDB4MTVDNSwgMHg4QjVELCAweDMyMzcsIDB4OEI1RiwgMHgxNjQ4LAorICAgIDB4OEI2MCwgMHgzMjM1LCAweDhCNjMsIDB4MzIzOSwgMHg4QjY1LCAweDMyM0EsIDB4OEI2NiwgMHgxNjQ2LAorICAgIDB4OEI2NywgMHgzMjNCLCAweDhCNjgsIDB4MzIzOCwgMHg4QjZBLCAweDMyMzYsIDB4OEI2QiwgMHgxNjQ5LAorICAgIDB4OEI2QywgMHgxNjQ1LCAweDhCNkQsIDB4MzIzQywgMHg4QjZGLCAweDE2NDcsIDB4OEI3MCwgMHgxNjQ0LAorICAgIDB4OEI3NCwgMHgxNjhGLCAweDhCNzcsIDB4MTY5MCwgMHg4Qjc4LCAweDMzMTIsIDB4OEI3OSwgMHgzMzExLAorICAgIDB4OEI3QSwgMHgzMzE0LCAweDhCN0IsIDB4MzMxNSwgMHg4QjdELCAweDE2OTEsIDB4OEI3RSwgMHgzM0I2LAorICAgIDB4OEI3RiwgMHgzM0JCLCAweDhCODAsIDB4MTZEOCwgMHg4QjgyLCAweDMzQjgsIDB4OEI4NCwgMHgzM0I3LAorICAgIDB4OEI4NSwgMHgzM0JBLCAweDhCODYsIDB4MzNCOSwgMHg4Qjg4LCAweDM0NDAsIDB4OEI4QSwgMHgxNzBBLAorICAgIDB4OEI4QiwgMHgzNDNGLCAweDhCOEMsIDB4MzQzRCwgMHg4QjhFLCAweDM0M0UsIDB4OEI5MiwgMHgxNzJDLAorICAgIDB4OEI5MywgMHgxNzJCLCAweDhCOTQsIDB4MzQ5QywgMHg4Qjk1LCAweDM0OUQsIDB4OEI5NiwgMHgxNzJELAorICAgIDB4OEI5OCwgMHgzNEU3LCAweDhCOTksIDB4MzRFOCwgMHg4QjlBLCAweDE3NTQsIDB4OEI5QywgMHgxNzVBLAorICAgIDB4OEI5RSwgMHgzNTIyLCAweDhCOUYsIDB4MzUzRiwgMHg4QzM3LCAweDA1MEIsIDB4OEMzOSwgMHgyMDZCLAorICAgIDB4OEMzQiwgMHgyMDZDLCAweDhDM0MsIDB4MjU5NywgMHg4QzNELCAweDI4MDksIDB4OEMzRSwgMHgyQTUzLAorICAgIDB4OEMzRiwgMHgxNDgxLCAweDhDNDEsIDB4MTQ4MCwgMHg4QzQyLCAweDJGRTAsIDB4OEM0MywgMHgzMTJGLAorICAgIDB4OEM0NSwgMHgzNDQxLCAweDhDNDYsIDB4MDUwQywgMHg4QzQ3LCAweDFFMDksIDB4OEM0OCwgMHgwOUM5LAorICAgIDB4OEM0OSwgMHgwQkE3LCAweDhDNEEsIDB4MjU5OSwgMHg4QzRCLCAweDI1OTgsIDB4OEM0QywgMHgxMjIzLAorICAgIDB4OEM0RCwgMHgyQTU0LCAweDhDNEUsIDB4MTIyNCwgMHg4QzRGLCAweDJFNkMsIDB4OEM1MCwgMHgxNTJFLAorICAgIDB4OEM1NCwgMHgxNzYzLCAweDhDNTUsIDB4MDUwRCwgMHg4QzU2LCAweDFBNDgsIDB4OEM1NywgMHgxRTBBLAorICAgIDB4OEM1QSwgMHgwQkE4LCAweDhDNUMsIDB4MjA2RCwgMHg4QzVELCAweDIwNkUsIDB4OEM1RiwgMHgyMkY4LAorICAgIDB4OEM2MSwgMHgwRDY1LCAweDhDNjIsIDB4MEYxQiwgMHg4QzY0LCAweDI1OUIsIDB4OEM2NSwgMHgyNTlBLAorICAgIDB4OEM2NiwgMHgyNTlDLCAweDhDNjgsIDB4MjgwQSwgMHg4QzY5LCAweDI4MEIsIDB4OEM2QSwgMHgxMEI0LAorICAgIDB4OEM2QiwgMHgxMzVELCAweDhDNkMsIDB4MTIyNSwgMHg4QzZELCAweDEzNUUsIDB4OEM2RiwgMHgyRTcwLAorICAgIDB4OEM3MCwgMHgyRTZELCAweDhDNzEsIDB4MkU2RiwgMHg4QzcyLCAweDJFNkUsIDB4OEM3MywgMHgxNDgyLAorICAgIDB4OEM3NSwgMHgyRkUxLCAweDhDNzYsIDB4MzEzMSwgMHg4Qzc3LCAweDMxMzAsIDB4OEM3OCwgMHgxOEU3LAorICAgIDB4OEM3OSwgMHgwOUNCLCAweDhDN0EsIDB4MDlDQSwgMHg4QzdCLCAweDFFMEIsIDB4OEM3RCwgMHgyMDZGLAorICAgIDB4OEM4MCwgMHgyMkZBLCAweDhDODEsIDB4MjJGOSwgMHg4QzgyLCAweDBENjYsIDB4OEM4NCwgMHgyNTlFLAorICAgIDB4OEM4NSwgMHgyNTlGLCAweDhDODYsIDB4MjU5RCwgMHg4Qzg5LCAweDBGMUQsIDB4OEM4QSwgMHgwRjFDLAorICAgIDB4OEM4QywgMHgxMEI2LCAweDhDOEQsIDB4MTBCNSwgMHg4QzhGLCAweDJBNTUsIDB4OEM5MCwgMHgyQzk4LAorICAgIDB4OEM5MSwgMHgyQzk2LCAweDhDOTIsIDB4MkM5NywgMHg4QzkzLCAweDEzNUYsIDB4OEM5NCwgMHgyRTcyLAorICAgIDB4OEM5NSwgMHgyRTcxLCAweDhDOTcsIDB4MkZFNCwgMHg4Qzk4LCAweDJGRTMsIDB4OEM5OSwgMHgyRkUyLAorICAgIDB4OEM5QSwgMHgzMTMyLCAweDhDOUMsIDB4MzUyMywgMHg4QzlELCAweDA1MEUsIDB4OEM5RSwgMHgwODBBLAorICAgIDB4OENBMCwgMHgwODBCLCAweDhDQTEsIDB4MDlDQywgMHg4Q0EyLCAweDA5Q0QsIDB4OENBMywgMHgxRTBELAorICAgIDB4OENBNCwgMHgxRTBDLCAweDhDQTUsIDB4MjA3MCwgMHg4Q0E3LCAweDBCQUUsIDB4OENBOCwgMHgwQkFDLAorICAgIDB4OENBOSwgMHgwQkE5LCAweDhDQUEsIDB4MEJBRCwgMHg4Q0FCLCAweDBCQUIsIDB4OENBQywgMHgwQkFBLAorICAgIDB4OENBRiwgMHgwRDY3LCAweDhDQjAsIDB4MjJGRCwgMHg4Q0IyLCAweDBGMjIsIDB4OENCMywgMHgwRDY5LAorICAgIDB4OENCNCwgMHgwRDZFLCAweDhDQjUsIDB4MjJGRiwgMHg4Q0I2LCAweDBENzAsIDB4OENCNywgMHgwRDZGLAorICAgIDB4OENCOCwgMHgwRDcyLCAweDhDQjksIDB4MjJGRSwgMHg4Q0JBLCAweDIyRkIsIDB4OENCQiwgMHgwRDZDLAorICAgIDB4OENCQywgMHgwRDY4LCAweDhDQkQsIDB4MEQ2QSwgMHg4Q0JFLCAweDIyRkMsIDB4OENCRiwgMHgwRDcxLAorICAgIDB4OENDMCwgMHgwRDZELCAweDhDQzEsIDB4MEQ2QiwgMHg4Q0MyLCAweDBGMjQsIDB4OENDMywgMHgwRjIzLAorICAgIDB4OENDNCwgMHgwRjIxLCAweDhDQzUsIDB4MEYyNSwgMHg4Q0M3LCAweDBGMUYsIDB4OENDOCwgMHgwRjIwLAorICAgIDB4OENDQSwgMHgwRjFFLCAweDhDQ0MsIDB4MjVBMCwgMHg4Q0NGLCAweDI4MEQsIDB4OENEMSwgMHgxMEI4LAorICAgIDB4OENEMiwgMHgxMEI5LCAweDhDRDMsIDB4MTBCNywgMHg4Q0Q1LCAweDI4MEMsIDB4OENENywgMHgyODBFLAorICAgIDB4OENEOSwgMHgyQTU4LCAweDhDREEsIDB4MkE1QSwgMHg4Q0RDLCAweDEyMkUsIDB4OENERCwgMHgyQTVCLAorICAgIDB4OENERSwgMHgxMjI3LCAweDhDREYsIDB4MkE1NywgMHg4Q0UwLCAweDEyMjYsIDB4OENFMSwgMHgxMjMwLAorICAgIDB4OENFMiwgMHgxMjJDLCAweDhDRTMsIDB4MTIyRCwgMHg4Q0U0LCAweDEyMjksIDB4OENFNSwgMHgyQTU2LAorICAgIDB4OENFNiwgMHgxMjI4LCAweDhDRTcsIDB4MkE1QywgMHg4Q0U4LCAweDJBNTksIDB4OENFQSwgMHgxMjJGLAorICAgIDB4OENFQywgMHgxMjJBLCAweDhDRUQsIDB4MTIyQiwgMHg4Q0VFLCAweDJDOUEsIDB4OENGMCwgMHgyQzlDLAorICAgIDB4OENGMSwgMHgyQzlCLCAweDhDRjMsIDB4MkM5RCwgMHg4Q0Y0LCAweDEzNjAsIDB4OENGNSwgMHgyQzk5LAorICAgIDB4OENGOCwgMHgxNDg2LCAweDhDRjksIDB4MkU3MywgMHg4Q0ZBLCAweDE0ODMsIDB4OENGQiwgMHgxNDg3LAorICAgIDB4OENGQywgMHgxNDg1LCAweDhDRkQsIDB4MTQ4NCwgMHg4Q0ZFLCAweDJGRTUsIDB4OEQwMCwgMHgyRkU4LAorICAgIDB4OEQwMiwgMHgyRkU3LCAweDhEMDQsIDB4MkZFNiwgMHg4RDA1LCAweDE1MkYsIDB4OEQwNiwgMHgzMTMzLAorICAgIDB4OEQwNywgMHgzMTM0LCAweDhEMDgsIDB4MTVDRCwgMHg4RDA5LCAweDMxMzUsIDB4OEQwQSwgMHgxNUNFLAorICAgIDB4OEQwRCwgMHgxNjRCLCAweDhEMEYsIDB4MTY0QSwgMHg4RDEwLCAweDMzMTYsIDB4OEQxMywgMHgxNjkyLAorICAgIDB4OEQxNCwgMHgzMzE3LCAweDhEMTUsIDB4MzNCQywgMHg4RDE2LCAweDE2RDksIDB4OEQxNywgMHgxNkRBLAorICAgIDB4OEQxOSwgMHgzNDQyLCAweDhEMUIsIDB4MTcyRiwgMHg4RDY0LCAweDA1MEYsIDB4OEQ2NiwgMHgwQkIwLAorICAgIDB4OEQ2NywgMHgwQkFGLCAweDhENjgsIDB4MjVBMSwgMHg4RDY5LCAweDI1QTIsIDB4OEQ2QiwgMHgxMEJBLAorICAgIDB4OEQ2QywgMHgyQzlFLCAweDhENkQsIDB4MTIzMSwgMHg4RDZFLCAweDJDOUYsIDB4OEQ2RiwgMHgyRTc0LAorICAgIDB4OEQ3MCwgMHgwNTEwLCAweDhENzIsIDB4MUMwNiwgMHg4RDczLCAweDA4MEQsIDB4OEQ3NCwgMHgwODBDLAorICAgIDB4OEQ3NiwgMHgxRTBFLCAweDhENzcsIDB4MDlDRSwgMHg4RDc4LCAweDFFMEYsIDB4OEQ3OSwgMHgyMDczLAorICAgIDB4OEQ3QiwgMHgyMDcyLCAweDhEN0QsIDB4MjA3MSwgMHg4RDgwLCAweDIzMDEsIDB4OEQ4MSwgMHgwRDc1LAorICAgIDB4OEQ4NCwgMHgyMzAwLCAweDhEODUsIDB4MEQ3NCwgMHg4RDg5LCAweDIzMDIsIDB4OEQ4QSwgMHgwRDczLAorICAgIDB4OEQ4QywgMHgyNUE0LCAweDhEOEQsIDB4MjVBNywgMHg4RDhFLCAweDI1QTUsIDB4OEQ4RiwgMHgyNUE2LAorICAgIDB4OEQ5MCwgMHgyNUFBLCAweDhEOTEsIDB4MjVBMywgMHg4RDkyLCAweDI1QUIsIDB4OEQ5MywgMHgyNUE4LAorICAgIDB4OEQ5NCwgMHgyNUE5LCAweDhEOTUsIDB4MTBCQywgMHg4RDk2LCAweDI4MEYsIDB4OEQ5OSwgMHgxMEJCLAorICAgIDB4OEQ5QiwgMHgyQTYwLCAweDhEOUMsIDB4MkE1RSwgMHg4RDlGLCAweDEyMzIsIDB4OERBMCwgMHgyQTVELAorICAgIDB4OERBMSwgMHgyQTVGLCAweDhEQTMsIDB4MTIzMywgMHg4REE1LCAweDJDQTAsIDB4OERBNywgMHgyQ0ExLAorICAgIDB4OERBOCwgMHgxNDg4LCAweDhEQUEsIDB4MzEzNywgMHg4REFCLCAweDMxMzksIDB4OERBQywgMHgzMTM2LAorICAgIDB4OERBRCwgMHgzMTM4LCAweDhEQUUsIDB4MzIzRCwgMHg4REFGLCAweDMzMTgsIDB4OERCMiwgMHgzNTA5LAorICAgIDB4OERCMywgMHgwNTExLCAweDhEQjQsIDB4MDgwRSwgMHg4REI1LCAweDFFMTAsIDB4OERCNiwgMHgxRTEyLAorICAgIDB4OERCNywgMHgxRTExLCAweDhEQjksIDB4MjA3NiwgMHg4REJBLCAweDBCQjIsIDB4OERCQywgMHgyMDc0LAorICAgIDB4OERCRSwgMHgwQkIxLCAweDhEQkYsIDB4MjA3NywgMHg4REMxLCAweDIwNzgsIDB4OERDMiwgMHgyMDc1LAorICAgIDB4OERDNSwgMHgyMzBFLCAweDhEQzYsIDB4MEQ3RCwgMHg4REM3LCAweDIzMDYsIDB4OERDOCwgMHgyMzBDLAorICAgIDB4OERDQiwgMHgwRDc4LCAweDhEQ0MsIDB4MEQ3QiwgMHg4RENELCAweDIzMDUsIDB4OERDRSwgMHgwRDc2LAorICAgIDB4OERDRiwgMHgyMzA5LCAweDhERDAsIDB4MjVCMSwgMHg4REQxLCAweDBEN0EsIDB4OEREMywgMHgyMzA0LAorICAgIDB4OERENSwgMHgyMzBBLCAweDhERDYsIDB4MjMwNywgMHg4REQ3LCAweDIzMEQsIDB4OEREOCwgMHgyMzAzLAorICAgIDB4OEREOSwgMHgyMzBCLCAweDhEREEsIDB4MEQ3OSwgMHg4RERCLCAweDBEN0MsIDB4OEREQywgMHgyMzA4LAorICAgIDB4OERERCwgMHgwRDc3LCAweDhEREYsIDB4MEYyNywgMHg4REUwLCAweDI1QUQsIDB4OERFMSwgMHgwRjI2LAorICAgIDB4OERFMiwgMHgyNUI0LCAweDhERTMsIDB4MjVCMywgMHg4REU0LCAweDBGMkQsIDB4OERFNiwgMHgwRjJFLAorICAgIDB4OERFNywgMHgyNUI1LCAweDhERTgsIDB4MEYyOCwgMHg4REU5LCAweDI1QjIsIDB4OERFQSwgMHgwRjJDLAorICAgIDB4OERFQiwgMHgyNUI3LCAweDhERUMsIDB4MjVBRSwgMHg4REVFLCAweDI1QjAsIDB4OERFRiwgMHgwRjI5LAorICAgIDB4OERGMCwgMHgyNUFDLCAweDhERjEsIDB4MjVBRiwgMHg4REYyLCAweDI1QjYsIDB4OERGMywgMHgwRjJBLAorICAgIDB4OERGNCwgMHgyNUI4LCAweDhERkEsIDB4MEYyQiwgMHg4REZDLCAweDEwQkQsIDB4OERGRCwgMHgyODE0LAorICAgIDB4OERGRSwgMHgyODFBLCAweDhERkYsIDB4MjgxMiwgMHg4RTAwLCAweDI4MUIsIDB4OEUwMiwgMHgyODExLAorICAgIDB4OEUwMywgMHgyODE2LCAweDhFMDQsIDB4MjgxQywgMHg4RTA1LCAweDI4MTksIDB4OEUwNiwgMHgyODE4LAorICAgIDB4OEUwNywgMHgyODE3LCAweDhFMDksIDB4MjgxMCwgMHg4RTBBLCAweDI4MTUsIDB4OEUwRCwgMHgyODEzLAorICAgIDB4OEUwRiwgMHgxMjM4LCAweDhFMTAsIDB4MTIzNSwgMHg4RTExLCAweDJBNjksIDB4OEUxMiwgMHgyQTZFLAorICAgIDB4OEUxMywgMHgyQTcwLCAweDhFMTQsIDB4MkE2RCwgMHg4RTE1LCAweDJBNjYsIDB4OEUxNiwgMHgyQTY4LAorICAgIDB4OEUxNywgMHgyQTcyLCAweDhFMTgsIDB4MkE2RiwgMHg4RTE5LCAweDJBNkEsIDB4OEUxQSwgMHgyQTczLAorICAgIDB4OEUxQiwgMHgyQTY3LCAweDhFMUMsIDB4MkE3MSwgMHg4RTFELCAweDEyMzYsIDB4OEUxRSwgMHgxMjNDLAorICAgIDB4OEUxRiwgMHgxMjNBLCAweDhFMjAsIDB4MkE2MSwgMHg4RTIxLCAweDEyM0IsIDB4OEUyMiwgMHgxMjM3LAorICAgIDB4OEUyMywgMHgyQTYyLCAweDhFMjQsIDB4MkE2NCwgMHg4RTI1LCAweDJBNjMsIDB4OEUyNiwgMHgyQTZCLAorICAgIDB4OEUyNywgMHgyQTZDLCAweDhFMjksIDB4MTIzOSwgMHg4RTJCLCAweDEyMzQsIDB4OEUyRSwgMHgyQTY1LAorICAgIDB4OEUzMCwgMHgyQ0FCLCAweDhFMzEsIDB4MTM2MiwgMHg4RTMzLCAweDJDQTIsIDB4OEUzNCwgMHgxMzYzLAorICAgIDB4OEUzNSwgMHgxMzY2LCAweDhFMzYsIDB4MkNBNywgMHg4RTM4LCAweDJDQTQsIDB4OEUzOSwgMHgxMzY1LAorICAgIDB4OEUzQywgMHgyQ0E4LCAweDhFM0QsIDB4MkNBOSwgMHg4RTNFLCAweDJDQTMsIDB4OEUzRiwgMHgyQ0FDLAorICAgIDB4OEU0MCwgMHgyQ0E1LCAweDhFNDEsIDB4MkNBQSwgMHg4RTQyLCAweDEzNjQsIDB4OEU0NCwgMHgxMzYxLAorICAgIDB4OEU0NSwgMHgyQ0E2LCAweDhFNDcsIDB4MkU3QSwgMHg4RTQ4LCAweDE0OEIsIDB4OEU0OSwgMHgxNDg5LAorICAgIDB4OEU0QSwgMHgxNDhDLCAweDhFNEIsIDB4MTQ4QSwgMHg4RTRDLCAweDJFNzksIDB4OEU0RCwgMHgyRTc2LAorICAgIDB4OEU0RSwgMHgyRTc1LCAweDhFNTAsIDB4MkU3OCwgMHg4RTUzLCAweDJFNzcsIDB4OEU1NCwgMHgyRkY2LAorICAgIDB4OEU1NSwgMHgxNTM1LCAweDhFNTYsIDB4MkZFRCwgMHg4RTU3LCAweDJGRUMsIDB4OEU1OSwgMHgxNTMwLAorICAgIDB4OEU1QSwgMHgyRkYyLCAweDhFNUIsIDB4MkZGMSwgMHg4RTVDLCAweDJGRTksIDB4OEU1RCwgMHgyRkY0LAorICAgIDB4OEU1RSwgMHgyRkVFLCAweDhFNUYsIDB4MTUzNCwgMHg4RTYwLCAweDJGRUIsIDB4OEU2MSwgMHgyRkYzLAorICAgIDB4OEU2MiwgMHgyRkVBLCAweDhFNjMsIDB4MTUzMSwgMHg4RTY0LCAweDE1MzMsIDB4OEU2NSwgMHgyRkVGLAorICAgIDB4OEU2NiwgMHgxNTMyLCAweDhFNjcsIDB4MkZGMCwgMHg4RTY5LCAweDJGRjUsIDB4OEU2QSwgMHgzMTNELAorICAgIDB4OEU2QywgMHgxNUQzLCAweDhFNkQsIDB4MzEzQSwgMHg4RTZGLCAweDMxM0UsIDB4OEU3MiwgMHgxNUQwLAorICAgIDB4OEU3MywgMHgzMTNDLCAweDhFNzQsIDB4MTVENSwgMHg4RTc2LCAweDE1RDIsIDB4OEU3OCwgMHgzMTNCLAorICAgIDB4OEU3QSwgMHgxNUQ0LCAweDhFN0IsIDB4MzEzRiwgMHg4RTdDLCAweDE1Q0YsIDB4OEU4MSwgMHgxNjRELAorICAgIDB4OEU4MiwgMHgxNjRGLCAweDhFODQsIDB4MzI0MCwgMHg4RTg1LCAweDE2NEUsIDB4OEU4NiwgMHgzMjNFLAorICAgIDB4OEU4NywgMHgxNUQxLCAweDhFODgsIDB4MzIzRiwgMHg4RTg5LCAweDE2NEMsIDB4OEU4QSwgMHgxNjkzLAorICAgIDB4OEU4QiwgMHgxNjk1LCAweDhFOEMsIDB4MzMxQSwgMHg4RThELCAweDE2OTQsIDB4OEU4RSwgMHgzMzE5LAorICAgIDB4OEU5MCwgMHgzM0MxLCAweDhFOTEsIDB4MTZEQiwgMHg4RTkyLCAweDMzQzAsIDB4OEU5MywgMHgxNkRDLAorICAgIDB4OEU5NCwgMHgzM0JFLCAweDhFOTUsIDB4MzNCRCwgMHg4RTk2LCAweDMzQzIsIDB4OEU5NywgMHgzM0MzLAorICAgIDB4OEU5OCwgMHgzNDQzLCAweDhFOUEsIDB4MzNCRiwgMHg4RTlELCAweDM0QTEsIDB4OEU5RSwgMHgzNDlFLAorICAgIDB4OEU5RiwgMHgzNDlGLCAweDhFQTAsIDB4MzRBMCwgMHg4RUExLCAweDE3NDksIDB4OEVBMywgMHgzNEVCLAorICAgIDB4OEVBNCwgMHgzNEVBLCAweDhFQTUsIDB4MzRFOSwgMHg4RUE2LCAweDM1MEEsIDB4OEVBOCwgMHgzNTM3LAorICAgIDB4OEVBOSwgMHgzNTI0LCAweDhFQUEsIDB4MTc1QiwgMHg4RUFCLCAweDA1MTIsIDB4OEVBQywgMHgwOUNGLAorICAgIDB4OEVCMiwgMHgwRjJGLCAweDhFQkEsIDB4MTIzRCwgMHg4RUJELCAweDJDQUQsIDB4OEVDMCwgMHgxNTM2LAorICAgIDB4OEVDMiwgMHgzMTQwLCAweDhFQzksIDB4MzUyNSwgMHg4RUNBLCAweDA1MTMsIDB4OEVDQiwgMHgwNjhELAorICAgIDB4OEVDQywgMHgwODEwLCAweDhFQ0QsIDB4MDgwRiwgMHg4RUNGLCAweDA5RDIsIDB4OEVEMSwgMHgxRTEzLAorICAgIDB4OEVEMiwgMHgwOUQwLCAweDhFRDMsIDB4MUUxNCwgMHg4RUQ0LCAweDA5RDEsIDB4OEVENywgMHgyMDdELAorICAgIDB4OEVEOCwgMHgyMDc5LCAweDhFREIsIDB4MEJCMywgMHg4RURDLCAweDIwN0MsIDB4OEVERCwgMHgyMDdCLAorICAgIDB4OEVERSwgMHgyMDdBLCAweDhFREYsIDB4MEJCNCwgMHg4RUUwLCAweDIwN0UsIDB4OEVFMSwgMHgyMDdGLAorICAgIDB4OEVFNSwgMHgyMzE1LCAweDhFRTYsIDB4MjMxMywgMHg4RUU3LCAweDIzMTcsIDB4OEVFOCwgMHgyMzE4LAorICAgIDB4OEVFOSwgMHgyMzFFLCAweDhFRUIsIDB4MjMxQSwgMHg4RUVDLCAweDIzMUMsIDB4OEVFRSwgMHgyMzE0LAorICAgIDB4OEVFRiwgMHgyMzBGLCAweDhFRjEsIDB4MjMxQiwgMHg4RUY0LCAweDIzMUQsIDB4OEVGNSwgMHgyMzE2LAorICAgIDB4OEVGNiwgMHgyMzE5LCAweDhFRjcsIDB4MjMxMCwgMHg4RUY4LCAweDBEN0YsIDB4OEVGOSwgMHgyMzEyLAorICAgIDB4OEVGQSwgMHgyMzExLCAweDhFRkIsIDB4MEQ3RSwgMHg4RUZDLCAweDBEODAsIDB4OEVGRSwgMHgwRjMyLAorICAgIDB4OEVGRiwgMHgyNUJBLCAweDhGMDAsIDB4MjVCQywgMHg4RjAxLCAweDI1QkIsIDB4OEYwMiwgMHgyNUMwLAorICAgIDB4OEYwMywgMHgwRjMwLCAweDhGMDUsIDB4MjVCRCwgMHg4RjA2LCAweDI1QjksIDB4OEYwNywgMHgyNUJFLAorICAgIDB4OEYwOCwgMHgyNUJGLCAweDhGMDksIDB4MEYzMSwgMHg4RjBBLCAweDBGMzMsIDB4OEYwQiwgMHgyNUMxLAorICAgIDB4OEYwRCwgMHgyODIwLCAweDhGMEUsIDB4MjgxRiwgMHg4RjEwLCAweDI4MUQsIDB4OEYxMSwgMHgyODFFLAorICAgIDB4OEYxMiwgMHgxMEJGLCAweDhGMTMsIDB4MTBDMSwgMHg4RjE0LCAweDEwQkUsIDB4OEYxNSwgMHgxMEMwLAorICAgIDB4OEYxNiwgMHgyQTdBLCAweDhGMTcsIDB4MkE3QiwgMHg4RjE4LCAweDJBNzYsIDB4OEYxQSwgMHgyQTc3LAorICAgIDB4OEYxQiwgMHgxMjNGLCAweDhGMUMsIDB4MTI0NCwgMHg4RjFELCAweDEyM0UsIDB4OEYxRSwgMHgxMjQ1LAorICAgIDB4OEYxRiwgMHgxMjQwLCAweDhGMjAsIDB4MkE3OCwgMHg4RjIzLCAweDJBNzksIDB4OEYyNCwgMHgyQTc1LAorICAgIDB4OEYyNSwgMHgxMjQ2LCAweDhGMjYsIDB4MTI0MiwgMHg4RjI5LCAweDEyNDEsIDB4OEYyQSwgMHgxMjQzLAorICAgIDB4OEYyQywgMHgyQTc0LCAweDhGMkUsIDB4MkNBRiwgMHg4RjJGLCAweDEzNjgsIDB4OEYzMiwgMHgyQ0IxLAorICAgIDB4OEYzMywgMHgxMzZBLCAweDhGMzQsIDB4MkNCNCwgMHg4RjM1LCAweDJDQjAsIDB4OEYzNiwgMHgyQ0FFLAorICAgIDB4OEYzNywgMHgyQ0IzLCAweDhGMzgsIDB4MTM2OSwgMHg4RjM5LCAweDJDQjIsIDB4OEYzQiwgMHgxMzY3LAorICAgIDB4OEYzRSwgMHgxNDhFLCAweDhGM0YsIDB4MTQ5MSwgMHg4RjQwLCAweDJFN0MsIDB4OEY0MiwgMHgxNDhGLAorICAgIDB4OEY0MywgMHgyRTdCLCAweDhGNDQsIDB4MTQ4RCwgMHg4RjQ1LCAweDE0OTAsIDB4OEY0NiwgMHgyRkY3LAorICAgIDB4OEY0NywgMHgyRkY4LCAweDhGNDgsIDB4MkZGOSwgMHg4RjQ5LCAweDE1MzcsIDB4OEY0QiwgMHgyRkZBLAorICAgIDB4OEY0RCwgMHgxNTM4LCAweDhGNEUsIDB4MTVENywgMHg4RjRGLCAweDMxNDMsIDB4OEY1MCwgMHgzMTQ0LAorICAgIDB4OEY1MSwgMHgzMTQyLCAweDhGNTIsIDB4MzE0MSwgMHg4RjUzLCAweDMxNDUsIDB4OEY1NCwgMHgxNUQ2LAorICAgIDB4OEY1NSwgMHgzMjQ0LCAweDhGNTYsIDB4MzI0MiwgMHg4RjU3LCAweDMyNDMsIDB4OEY1OCwgMHgzMjQ1LAorICAgIDB4OEY1OSwgMHgzMjQxLCAweDhGNUEsIDB4MzI0NiwgMHg4RjVCLCAweDMzMUMsIDB4OEY1RCwgMHgzMzFELAorICAgIDB4OEY1RSwgMHgzMzFCLCAweDhGNUYsIDB4MTY5NiwgMHg4RjYwLCAweDMzQzQsIDB4OEY2MSwgMHgxNkRELAorICAgIDB4OEY2MiwgMHgzM0M1LCAweDhGNjMsIDB4MzQ0NSwgMHg4RjY0LCAweDM0NDQsIDB4OEY5QiwgMHgwNTE0LAorICAgIDB4OEY5QywgMHgwRDgxLCAweDhGOUYsIDB4MEYzNCwgMHg4RkEzLCAweDEwQzIsIDB4OEZBNiwgMHgxMzZDLAorICAgIDB4OEZBOCwgMHgxMzZCLCAweDhGQUQsIDB4MTVEOCwgMHg4RkFFLCAweDE2MkYsIDB4OEZBRiwgMHgxNjk3LAorICAgIDB4OEZCMCwgMHgwNTE1LCAweDhGQjEsIDB4MDlEMywgMHg4RkIyLCAweDBGMzUsIDB4OEZCNCwgMHgzMTQ2LAorICAgIDB4OEZCNSwgMHgwMjMwLCAweDhGQkYsIDB4MThFOSwgMHg4RkMyLCAweDA1MTYsIDB4OEZDNCwgMHgwNTE5LAorICAgIDB4OEZDNSwgMHgwNTE4LCAweDhGQzYsIDB4MDUxNywgMHg4RkM5LCAweDE4RTgsIDB4OEZDQiwgMHgxQTRBLAorICAgIDB4OEZDRCwgMHgxQTRDLCAweDhGQ0UsIDB4MDY4RSwgMHg4RkQxLCAweDA2OTAsIDB4OEZEMiwgMHgxQTQ5LAorICAgIDB4OEZEMywgMHgxQTRCLCAweDhGRDQsIDB4MDY4RiwgMHg4RkQ1LCAweDFBNEUsIDB4OEZENiwgMHgxQTRELAorICAgIDB4OEZENywgMHgxQTRGLCAweDhGRTAsIDB4MUMwQSwgMHg4RkUxLCAweDFDMDgsIDB4OEZFMiwgMHgwODEzLAorICAgIDB4OEZFMywgMHgxQzA3LCAweDhGRTQsIDB4MDgxOCwgMHg4RkU1LCAweDA4MTUsIDB4OEZFNiwgMHgwODEyLAorICAgIDB4OEZFOCwgMHgwODE5LCAweDhGRUEsIDB4MDgxNCwgMHg4RkVCLCAweDA4MTcsIDB4OEZFRCwgMHgwODE2LAorICAgIDB4OEZFRSwgMHgxQzA5LCAweDhGRjAsIDB4MDgxMSwgMHg4RkY0LCAweDA5RDksIDB4OEZGNSwgMHgxRTE2LAorICAgIDB4OEZGNiwgMHgxRTFDLCAweDhGRjcsIDB4MDlENiwgMHg4RkY4LCAweDA5REQsIDB4OEZGQSwgMHgwOUQ4LAorICAgIDB4OEZGQiwgMHgxRTE5LCAweDhGRkMsIDB4MUUxQiwgMHg4RkZELCAweDA5REIsIDB4OEZGRSwgMHgxRTE1LAorICAgIDB4OEZGRiwgMHgxRTE4LCAweDkwMDAsIDB4MDlENywgMHg5MDAxLCAweDA5RDQsIDB4OTAwMiwgMHgxRTE3LAorICAgIDB4OTAwMywgMHgwOURBLCAweDkwMDQsIDB4MUUxQSwgMHg5MDA1LCAweDA5REMsIDB4OTAwNiwgMHgwOUQ1LAorICAgIDB4OTAwQiwgMHgyMDgxLCAweDkwMEMsIDB4MjA4NCwgMHg5MDBELCAweDBCQjYsIDB4OTAwRiwgMHgwQkMwLAorICAgIDB4OTAxMCwgMHgwQkJDLCAweDkwMTEsIDB4MjA4MiwgMHg5MDE0LCAweDBCQzQsIDB4OTAxNSwgMHgwQkJELAorICAgIDB4OTAxNiwgMHgwQkMyLCAweDkwMTcsIDB4MEJCOCwgMHg5MDE5LCAweDBCQjUsIDB4OTAxQSwgMHgwQkI3LAorICAgIDB4OTAxQiwgMHgwQkMzLCAweDkwMUMsIDB4MjA4MywgMHg5MDFELCAweDBCQkIsIDB4OTAxRSwgMHgwQkJFLAorICAgIDB4OTAxRiwgMHgwQkJBLCAweDkwMjAsIDB4MEJCRiwgMHg5MDIxLCAweDIwODUsIDB4OTAyMiwgMHgwQkMxLAorICAgIDB4OTAyMywgMHgwQkI5LCAweDkwMjQsIDB4MjA4MCwgMHg5MDJELCAweDIzMUYsIDB4OTAyRSwgMHgwRDgyLAorICAgIDB4OTAyRiwgMHgyMzIxLCAweDkwMzEsIDB4MEQ4NCwgMHg5MDMyLCAweDBEODYsIDB4OTAzNCwgMHgyMzIwLAorICAgIDB4OTAzNSwgMHgwRDgzLCAweDkwMzYsIDB4MEQ4NywgMHg5MDM4LCAweDBEODUsIDB4OTAzQywgMHgwRjNCLAorICAgIDB4OTAzRCwgMHgyNUM2LCAweDkwM0UsIDB4MEY0MywgMHg5MDNGLCAweDI1QzMsIDB4OTA0MSwgMHgwRjQ0LAorICAgIDB4OTA0MiwgMHgwRjM5LCAweDkwNDQsIDB4MjVDNCwgMHg5MDQ3LCAweDBGM0UsIDB4OTA0OSwgMHgyNUM1LAorICAgIDB4OTA0QSwgMHgwRjM3LCAweDkwNEIsIDB4MEYzNiwgMHg5MDRELCAweDBGNDEsIDB4OTA0RSwgMHgwRjQwLAorICAgIDB4OTA0RiwgMHgwRjNGLCAweDkwNTAsIDB4MEYzRCwgMHg5MDUxLCAweDBGNDIsIDB4OTA1MiwgMHgyNUMyLAorICAgIDB4OTA1MywgMHgwRjM4LCAweDkwNTQsIDB4MEYzQSwgMHg5MDU1LCAweDBGM0MsIDB4OTA1OCwgMHgxMEM0LAorICAgIDB4OTA1OSwgMHgxMEM3LCAweDkwNUIsIDB4MTBDQiwgMHg5MDVDLCAweDEwQzUsIDB4OTA1RCwgMHgxMENBLAorICAgIDB4OTA1RSwgMHgxMEM4LCAweDkwNjAsIDB4MTBDMywgMHg5MDYyLCAweDEwQzksIDB4OTA2MywgMHgxMEM2LAorICAgIDB4OTA2NywgMHgyQTdGLCAweDkwNjgsIDB4MTI0OSwgMHg5MDY5LCAweDEyNDcsIDB4OTA2QiwgMHgyQTgwLAorICAgIDB4OTA2RCwgMHgxMjRBLCAweDkwNkUsIDB4MTI0OCwgMHg5MDZGLCAweDJBN0UsIDB4OTA3MCwgMHgyQTdELAorICAgIDB4OTA3MiwgMHgxMzcwLCAweDkwNzMsIDB4MkE3QywgMHg5MDc0LCAweDEzNkUsIDB4OTA3NSwgMHgxMzZELAorICAgIDB4OTA3NiwgMHgyQ0I1LCAweDkwNzcsIDB4MTI0QiwgMHg5MDc4LCAweDEzNkYsIDB4OTA3OSwgMHgyQ0I2LAorICAgIDB4OTA3QSwgMHgxMzcyLCAweDkwN0IsIDB4MkNCNywgMHg5MDdDLCAweDEzNzEsIDB4OTA3RCwgMHgxNDkzLAorICAgIDB4OTA3RSwgMHgyRTdFLCAweDkwN0YsIDB4MTQ5MiwgMHg5MDgwLCAweDE0OTcsIDB4OTA4MSwgMHgxNDk1LAorICAgIDB4OTA4MiwgMHgxNDk2LCAweDkwODMsIDB4MTUzQSwgMHg5MDg0LCAweDE0OTQsIDB4OTA4NSwgMHgyRTdELAorICAgIDB4OTA4NiwgMHgyQ0I4LCAweDkwODcsIDB4MTUzOSwgMHg5MDg4LCAweDE1M0IsIDB4OTA4QSwgMHgxNUQ5LAorICAgIDB4OTA4QiwgMHgxNURBLCAweDkwOEQsIDB4MzI0NywgMHg5MDhGLCAweDE3MEMsIDB4OTA5MCwgMHgxNzBCLAorICAgIDB4OTA5MSwgMHgwNTFCLCAweDkwOTQsIDB4MTgxRSwgMHg5MDk1LCAweDA5REUsIDB4OTA5NywgMHgxODFCLAorICAgIDB4OTA5OCwgMHgxODFDLCAweDkwOTksIDB4MTgxQSwgMHg5MDlCLCAweDE4MUQsIDB4OTA5RSwgMHgxOEVELAorICAgIDB4OTA5RiwgMHgxOEVBLCAweDkwQTAsIDB4MThFRiwgMHg5MEExLCAweDE4RUIsIDB4OTBBMiwgMHgwNTFDLAorICAgIDB4OTBBMywgMHgwNTFGLCAweDkwQTUsIDB4MThFQywgMHg5MEE2LCAweDA1MUUsIDB4OTBBNywgMHgxOEVFLAorICAgIDB4OTBBQSwgMHgwNTFELCAweDkwQUYsIDB4MUE1MiwgMHg5MEIwLCAweDFBNTQsIDB4OTBCMSwgMHgwNjkzLAorICAgIDB4OTBCMiwgMHgxQTUwLCAweDkwQjMsIDB4MUE1MywgMHg5MEI0LCAweDFBNTEsIDB4OTBCNSwgMHgwNjkxLAorICAgIDB4OTBCNiwgMHgwNjk0LCAweDkwQjgsIDB4MDY5MiwgMHg5MEJELCAweDFDMEMsIDB4OTBCRSwgMHgxQzEwLAorICAgIDB4OTBCRiwgMHgxQzBELCAweDkwQzEsIDB4MDgxQywgMHg5MEMzLCAweDA4MUQsIDB4OTBDNSwgMHgxQzBGLAorICAgIDB4OTBDNywgMHgxQzExLCAweDkwQzgsIDB4MUMxMywgMHg5MENBLCAweDA4MUEsIDB4OTBDQiwgMHgxQzEyLAorICAgIDB4OTBDRSwgMHgwODFCLCAweDkwRDQsIDB4MjA4QywgMHg5MEQ1LCAweDFDMEUsIDB4OTBENiwgMHgxRTFELAorICAgIDB4OTBENywgMHgxRTI2LCAweDkwRDgsIDB4MUUyNCwgMHg5MEQ5LCAweDFFMUYsIDB4OTBEQSwgMHgxRTIwLAorICAgIDB4OTBEQiwgMHgxRTI1LCAweDkwREMsIDB4MUUyNywgMHg5MERELCAweDA5RTAsIDB4OTBERiwgMHgxRTIyLAorICAgIDB4OTBFMCwgMHgxRTFFLCAweDkwRTEsIDB4MDlERiwgMHg5MEUyLCAweDA5RTEsIDB4OTBFMywgMHgxRTIxLAorICAgIDB4OTBFNCwgMHgxRTI4LCAweDkwRTUsIDB4MUUyMywgMHg5MEU4LCAweDBCQzUsIDB4OTBFOSwgMHgyMDhGLAorICAgIDB4OTBFQSwgMHgyMDg3LCAweDkwRUIsIDB4MjA4RCwgMHg5MEVDLCAweDIwOEUsIDB4OTBFRCwgMHgwQkM2LAorICAgIDB4OTBFRiwgMHgyMDg2LCAweDkwRjAsIDB4MjA4OCwgMHg5MEYxLCAweDFDMEIsIDB4OTBGMiwgMHgyMDhBLAorICAgIDB4OTBGMywgMHgyMDhCLCAweDkwRjQsIDB4MjA4OSwgMHg5MEY1LCAweDBEODksIDB4OTBGOSwgMHgyMzI4LAorICAgIDB4OTBGQSwgMHgyQ0I5LCAweDkwRkIsIDB4MjMyOSwgMHg5MEZDLCAweDIzMjYsIDB4OTBGRCwgMHgwQkM3LAorICAgIDB4OTBGRSwgMHgwRDhCLCAweDkwRkYsIDB4MjMyNSwgMHg5MTAwLCAweDIzMkIsIDB4OTEwMSwgMHgyMzJBLAorICAgIDB4OTEwMiwgMHgwRDg4LCAweDkxMDMsIDB4MjMyRSwgMHg5MTA0LCAweDIzMjQsIDB4OTEwNSwgMHgyMzJELAorICAgIDB4OTEwNiwgMHgyMzIyLCAweDkxMDcsIDB4MjMyQywgMHg5MTA4LCAweDIzMjcsIDB4OTEwOSwgMHgwRDhBLAorICAgIDB4OTEwQiwgMHgyNUNELCAweDkxMEQsIDB4MjVDOCwgMHg5MTBFLCAweDI1Q0UsIDB4OTEwRiwgMHgyNUM5LAorICAgIDB4OTExMCwgMHgyNUM3LCAweDkxMTEsIDB4MjVDQSwgMHg5MTEyLCAweDBGNDUsIDB4OTExNCwgMHgyNUNDLAorICAgIDB4OTExNiwgMHgyNUNCLCAweDkxMTcsIDB4MEY0NiwgMHg5MTE4LCAweDEwQ0QsIDB4OTExOSwgMHgxMENDLAorICAgIDB4OTExQSwgMHgyODI3LCAweDkxMUIsIDB4MjgyQSwgMHg5MTFDLCAweDI4MjIsIDB4OTExRCwgMHgyODI2LAorICAgIDB4OTExRSwgMHgxMENFLCAweDkxMUYsIDB4MjgyNSwgMHg5MTIwLCAweDI4MjMsIDB4OTEyMSwgMHgyODI5LAorICAgIDB4OTEyMiwgMHgyODI0LCAweDkxMjMsIDB4MjgyMSwgMHg5MTI0LCAweDI4MjgsIDB4OTEyNiwgMHgyQTg2LAorICAgIDB4OTEyNywgMHgxMjRFLCAweDkxMjgsIDB4MkZGQiwgMHg5MTI5LCAweDJBODMsIDB4OTEyQSwgMHgyQTg0LAorICAgIDB4OTEyQiwgMHgyQTgyLCAweDkxMkMsIDB4MjMyMywgMHg5MTJELCAweDEyNEQsIDB4OTEyRSwgMHgyQTg3LAorICAgIDB4OTEyRiwgMHgyQTgxLCAweDkxMzAsIDB4MTI0QywgMHg5MTMxLCAweDEyNEYsIDB4OTEzMiwgMHgyQTg1LAorICAgIDB4OTEzMywgMHgyQ0JBLCAweDkxMzQsIDB4MTM3MywgMHg5MTM1LCAweDJDQkIsIDB4OTEzNiwgMHgyQ0JDLAorICAgIDB4OTEzOCwgMHgyRTdGLCAweDkxMzksIDB4MTQ5OCwgMHg5MTNBLCAweDJGRkMsIDB4OTEzQiwgMHgyRkZELAorICAgIDB4OTEzRSwgMHgyRkZFLCAweDkxM0YsIDB4MzE0OCwgMHg5MTQwLCAweDMxNDcsIDB4OTE0MSwgMHgzMjQ5LAorICAgIDB4OTE0MywgMHgzMjQ4LCAweDkxNDQsIDB4MzMxRiwgMHg5MTQ1LCAweDMzMjAsIDB4OTE0NiwgMHgzMzFFLAorICAgIDB4OTE0NywgMHgzM0M2LCAweDkxNDgsIDB4MTZERSwgMHg5MTQ5LCAweDA1MjAsIDB4OTE0QSwgMHgwODFGLAorICAgIDB4OTE0QiwgMHgwODFFLCAweDkxNEMsIDB4MDlFNCwgMHg5MTRELCAweDA5RTMsIDB4OTE0RSwgMHgxRTJBLAorICAgIDB4OTE0RiwgMHgxRTJCLCAweDkxNTAsIDB4MUUyOSwgMHg5MTUyLCAweDA5RTIsIDB4OTE1MywgMHgyMDkzLAorICAgIDB4OTE1NSwgMHgyMDk0LCAweDkxNTYsIDB4MjA5MCwgMHg5MTU3LCAweDBCQzgsIDB4OTE1OCwgMHgyMDkxLAorICAgIDB4OTE1QSwgMHgyMDkyLCAweDkxNUYsIDB4MjMzMSwgMHg5MTYwLCAweDIzMzMsIDB4OTE2MSwgMHgyMzJGLAorICAgIDB4OTE2MiwgMHgyMzMyLCAweDkxNjMsIDB4MEQ4QywgMHg5MTY0LCAweDIzMzAsIDB4OTE2NSwgMHgwRDhELAorICAgIDB4OTE2OCwgMHgyM0UyLCAweDkxNjksIDB4MEY0OSwgMHg5MTZBLCAweDBGNDgsIDB4OTE2QywgMHgwRjQ3LAorICAgIDB4OTE2RSwgMHgyNUNGLCAweDkxNkYsIDB4MjVEMCwgMHg5MTcyLCAweDI4MkMsIDB4OTE3MywgMHgyODJFLAorICAgIDB4OTE3NCwgMHgxMEQyLCAweDkxNzUsIDB4MTBDRiwgMHg5MTc3LCAweDEwRDEsIDB4OTE3OCwgMHgxMEQwLAorICAgIDB4OTE3OSwgMHgyODJELCAweDkxN0EsIDB4MjgyQiwgMHg5MTgwLCAweDJBOEUsIDB4OTE4MSwgMHgyQThCLAorICAgIDB4OTE4MiwgMHgyQThDLCAweDkxODMsIDB4MTI1MywgMHg5MTg0LCAweDJBOEQsIDB4OTE4NSwgMHgyQTg4LAorICAgIDB4OTE4NiwgMHgyQTg5LCAweDkxODcsIDB4MTI1MCwgMHg5MTg5LCAweDEyNTEsIDB4OTE4QSwgMHgyQThBLAorICAgIDB4OTE4QiwgMHgxMjUyLCAweDkxOEQsIDB4MkNDMCwgMHg5MThGLCAweDJDQzEsIDB4OTE5MCwgMHgyQ0JFLAorICAgIDB4OTE5MSwgMHgyQ0JGLCAweDkxOTIsIDB4MTM3NCwgMHg5MTkzLCAweDJDQkQsIDB4OTE5OSwgMHgyRTgzLAorICAgIDB4OTE5QSwgMHgyRTgwLCAweDkxOUIsIDB4MkU4MiwgMHg5MTlDLCAweDE0OUIsIDB4OTE5RCwgMHgyRTg2LAorICAgIDB4OTE5RSwgMHgxNDlBLCAweDkxOUYsIDB4MkU4NCwgMHg5MUEwLCAweDJFODcsIDB4OTFBMSwgMHgyRTg1LAorICAgIDB4OTFBMiwgMHgyRTgxLCAweDkxQTMsIDB4MTQ5OSwgMHg5MUE1LCAweDMwMDAsIDB4OTFBNywgMHgzMDAxLAorICAgIDB4OTFBOCwgMHgyRkZGLCAweDkxQUEsIDB4MzAwMywgMHg5MUFCLCAweDE1M0MsIDB4OTFBQywgMHgxNTNELAorICAgIDB4OTFBRCwgMHgzMTRBLCAweDkxQUUsIDB4MTVEQywgMHg5MUFGLCAweDMwMDIsIDB4OTFCMCwgMHgzMTQ5LAorICAgIDB4OTFCMSwgMHgxNURCLCAweDkxQjIsIDB4MzI0QywgMHg5MUIzLCAweDMyNEQsIDB4OTFCNCwgMHgxNjUwLAorICAgIDB4OTFCNSwgMHgzMjRCLCAweDkxQjcsIDB4MzI0QSwgMHg5MUI5LCAweDMzMjEsIDB4OTFCQSwgMHgxNjk4LAorICAgIDB4OTFCQywgMHgzNDQ2LCAweDkxQkQsIDB4MzRBMywgMHg5MUJFLCAweDM0QTIsIDB4OTFDMCwgMHgxNzMwLAorICAgIDB4OTFDMSwgMHgxNzRBLCAweDkxQzIsIDB4MzRBNCwgMHg5MUMzLCAweDM1MEIsIDB4OTFDNSwgMHgxNzVDLAorICAgIDB4OTFDNiwgMHgwNTIxLCAweDkxQzcsIDB4MDY5NSwgMHg5MUM5LCAweDBGNEEsIDB4OTFDQiwgMHgxNjUxLAorICAgIDB4OTFDQywgMHgwNTIyLCAweDkxQ0QsIDB4MDgyMCwgMHg5MUNFLCAweDBCQzksIDB4OTFDRiwgMHgwRDhFLAorICAgIDB4OTFEMCwgMHgxNTNFLCAweDkxRDEsIDB4MDY5NiwgMHg5MUQzLCAweDFDMTUsIDB4OTFENCwgMHgxQzE0LAorICAgIDB4OTFENSwgMHgxRTJDLCAweDkxRDcsIDB4MDlFNywgMHg5MUQ4LCAweDA5RTUsIDB4OTFEOSwgMHgwOUU5LAorICAgIDB4OTFEQSwgMHgxRTJFLCAweDkxREMsIDB4MDlFOCwgMHg5MURELCAweDA5RTYsIDB4OTFFMiwgMHgxRTJELAorICAgIDB4OTFFMywgMHgwQkNDLCAweDkxRTQsIDB4MjA5QSwgMHg5MUU2LCAweDBCQ0IsIDB4OTFFNywgMHgwQkNELAorICAgIDB4OTFFOCwgMHgyMDlGLCAweDkxRTksIDB4MEJDRiwgMHg5MUVBLCAweDIwOUMsIDB4OTFFQiwgMHgyMDlELAorICAgIDB4OTFFQywgMHgyMDk1LCAweDkxRUQsIDB4MEJDRSwgMHg5MUVFLCAweDIwQTAsIDB4OTFGMSwgMHgyMDk3LAorICAgIDB4OTFGMywgMHgyMDk4LCAweDkxRjQsIDB4MjA5NiwgMHg5MUY1LCAweDBCQ0EsIDB4OTFGNywgMHgyMDlFLAorICAgIDB4OTFGOCwgMHgyMDk5LCAweDkxRjksIDB4MjA5QiwgMHg5MUZELCAweDIzM0YsIDB4OTFGRiwgMHgyMzNFLAorICAgIDB4OTIwMCwgMHgyMzNDLCAweDkyMDEsIDB4MjMzNCwgMHg5MjAyLCAweDIzNDMsIDB4OTIwMywgMHgyMzM3LAorICAgIDB4OTIwNCwgMHgyMzQxLCAweDkyMDUsIDB4MjM0OCwgMHg5MjA2LCAweDIzNDAsIDB4OTIwNywgMHgwRDk2LAorICAgIDB4OTIwOSwgMHgwRDkyLCAweDkyMEEsIDB4MjMzNSwgMHg5MjBDLCAweDIzM0IsIDB4OTIwRCwgMHgwRDk0LAorICAgIDB4OTIwRiwgMHgyMzNBLCAweDkyMTAsIDB4MEQ5NSwgMHg5MjExLCAweDBEOTcsIDB4OTIxMiwgMHgyMzNELAorICAgIDB4OTIxNCwgMHgwRDhGLCAweDkyMTUsIDB4MEQ5MCwgMHg5MjE2LCAweDIzNDksIDB4OTIxNywgMHgyMzQ3LAorICAgIDB4OTIxOSwgMHgyMzQ2LCAweDkyMUEsIDB4MjMzOCwgMHg5MjFDLCAweDIzNDQsIDB4OTIxRSwgMHgwRDkzLAorICAgIDB4OTIyMywgMHgwRDkxLCAweDkyMjQsIDB4MjM0NSwgMHg5MjI1LCAweDIzMzYsIDB4OTIyNiwgMHgyMzM5LAorICAgIDB4OTIyNywgMHgyMzQyLCAweDkyMkQsIDB4Mjg1MSwgMHg5MjJFLCAweDI1REEsIDB4OTIzMCwgMHgyNUQzLAorICAgIDB4OTIzMSwgMHgyNUU2LCAweDkyMzIsIDB4MjVFRiwgMHg5MjMzLCAweDI1RDYsIDB4OTIzNCwgMHgwRjU1LAorICAgIDB4OTIzNiwgMHgyNUUzLCAweDkyMzcsIDB4MEY0QiwgMHg5MjM4LCAweDBGNEQsIDB4OTIzOSwgMHgwRjU5LAorICAgIDB4OTIzQSwgMHgyNUQ0LCAweDkyM0QsIDB4MEY0RSwgMHg5MjNFLCAweDBGNTAsIDB4OTIzRiwgMHgwRjVBLAorICAgIDB4OTI0MCwgMHgwRjRGLCAweDkyNDUsIDB4MEY1OCwgMHg5MjQ2LCAweDI1REMsIDB4OTI0OCwgMHgyNUQxLAorICAgIDB4OTI0OSwgMHgwRjU2LCAweDkyNEEsIDB4MjVEQiwgMHg5MjRCLCAweDBGNTIsIDB4OTI0QywgMHgyNUVELAorICAgIDB4OTI0RCwgMHgwRjU3LCAweDkyNEUsIDB4MjVFQiwgMHg5MjRGLCAweDI1REYsIDB4OTI1MCwgMHgyNUU5LAorICAgIDB4OTI1MSwgMHgwRjU0LCAweDkyNTIsIDB4MjVEMiwgMHg5MjUzLCAweDI1RUMsIDB4OTI1NCwgMHgyNUU3LAorICAgIDB4OTI1NiwgMHgyNUVFLCAweDkyNTcsIDB4MEY0QywgMHg5MjVBLCAweDBGNUIsIDB4OTI1QiwgMHgwRjUxLAorICAgIDB4OTI1RSwgMHgyNUQ4LCAweDkyNjAsIDB4MjVFMCwgMHg5MjYxLCAweDI1RTQsIDB4OTI2MywgMHgyNUU4LAorICAgIDB4OTI2NCwgMHgwRjUzLCAweDkyNjUsIDB4MjVENywgMHg5MjY2LCAweDI1RDUsIDB4OTI2NywgMHgyNUUxLAorICAgIDB4OTI2QywgMHgyNURFLCAweDkyNkQsIDB4MjVERCwgMHg5MjZGLCAweDI1RTIsIDB4OTI3MCwgMHgyNUU1LAorICAgIDB4OTI3MiwgMHgyNUVBLCAweDkyNzYsIDB4MjgzMSwgMHg5Mjc4LCAweDEwRDMsIDB4OTI3OSwgMHgyODNCLAorICAgIDB4OTI3QSwgMHgyODMzLCAweDkyN0IsIDB4MTBEOSwgMHg5MjdDLCAweDEwREQsIDB4OTI3RCwgMHgyODQ0LAorICAgIDB4OTI3RSwgMHgyODRDLCAweDkyN0YsIDB4MjgzRCwgMHg5MjgwLCAweDEwRDUsIDB4OTI4MiwgMHgyODQxLAorICAgIDB4OTI4MywgMHgyNUQ5LCAweDkyODUsIDB4MTBENiwgMHg5Mjg2LCAweDI4NDgsIDB4OTI4NywgMHgyODRELAorICAgIDB4OTI4OCwgMHgyODQ1LCAweDkyOEEsIDB4Mjg0NywgMHg5MjhCLCAweDI4NTAsIDB4OTI4QywgMHgyODQ5LAorICAgIDB4OTI4RCwgMHgyODM3LCAweDkyOEUsIDB4Mjg0MCwgMHg5MjkxLCAweDEwREUsIDB4OTI5MywgMHgxMERBLAorICAgIDB4OTI5NCwgMHgyODM1LCAweDkyOTUsIDB4Mjg0MiwgMHg5Mjk2LCAweDEwRDgsIDB4OTI5NywgMHgyODNDLAorICAgIDB4OTI5OCwgMHgxMEQ3LCAweDkyOTksIDB4Mjg0QSwgMHg5MjlBLCAweDI4MzksIDB4OTI5QiwgMHgyODMyLAorICAgIDB4OTI5QywgMHgxMERCLCAweDkyOUQsIDB4Mjg0RiwgMHg5MkEwLCAweDI4MzQsIDB4OTJBMSwgMHgyODQ2LAorICAgIDB4OTJBMiwgMHgyODQzLCAweDkyQTMsIDB4MjgzRSwgMHg5MkE0LCAweDI4MzAsIDB4OTJBNSwgMHgyODJGLAorICAgIDB4OTJBNiwgMHgyODM4LCAweDkyQTcsIDB4Mjg0QiwgMHg5MkE4LCAweDEwREMsIDB4OTJBOSwgMHgyODRFLAorICAgIDB4OTJBQSwgMHgyODM2LCAweDkyQUIsIDB4MjgzQSwgMHg5MkFDLCAweDEwRDQsIDB4OTJCMiwgMHgxMjVGLAorICAgIDB4OTJCMywgMHgxMjVBLCAweDkyQjQsIDB4MkFCMCwgMHg5MkI1LCAweDJBQUMsIDB4OTJCNiwgMHgyQTk0LAorICAgIDB4OTJCNywgMHgxMjU2LCAweDkyQjksIDB4MzZFOSwgMHg5MkJCLCAweDEyNTUsIDB4OTJCQywgMHgxMjVCLAorICAgIDB4OTJDMCwgMHgyQTkyLCAweDkyQzEsIDB4MTI1OSwgMHg5MkMyLCAweDJBOUUsIDB4OTJDMywgMHgyQTkwLAorICAgIDB4OTJDNCwgMHgyQTkxLCAweDkyQzUsIDB4MTI1NCwgMHg5MkM2LCAweDJBQUYsIDB4OTJDNywgMHgxMjVELAorICAgIDB4OTJDOCwgMHgyQUExLCAweDkyQzksIDB4MkFBNiwgMHg5MkNBLCAweDJBQTAsIDB4OTJDQiwgMHgyQ0QzLAorICAgIDB4OTJDQywgMHgyQTlDLCAweDkyQ0QsIDB4MkFBNCwgMHg5MkNFLCAweDJBQTIsIDB4OTJDRiwgMHgyQTk1LAorICAgIDB4OTJEMCwgMHgyQThGLCAweDkyRDEsIDB4MkFBQSwgMHg5MkQyLCAweDEyNUMsIDB4OTJEMywgMHgyQUFCLAorICAgIDB4OTJENSwgMHgyQUE1LCAweDkyRDcsIDB4MkE5QSwgMHg5MkQ4LCAweDJBOTgsIDB4OTJEOSwgMHgyQTkzLAorICAgIDB4OTJERCwgMHgyQTlCLCAweDkyREUsIDB4MkFBOCwgMHg5MkRGLCAweDJBOTcsIDB4OTJFMCwgMHgyQUE3LAorICAgIDB4OTJFMSwgMHgyQUFELCAweDkyRTQsIDB4MTI1OCwgMHg5MkU2LCAweDJBQTMsIDB4OTJFNywgMHgyQUE5LAorICAgIDB4OTJFOCwgMHgyQTlGLCAweDkyRTksIDB4MkE5OSwgMHg5MkVBLCAweDEyNTcsIDB4OTJFRSwgMHgyODNGLAorICAgIDB4OTJFRiwgMHgyQTlELCAweDkyRjAsIDB4MTI1RSwgMHg5MkYxLCAweDJBOTYsIDB4OTJGNywgMHgyQ0Q4LAorICAgIDB4OTJGOCwgMHgxMzc3LCAweDkyRjksIDB4MkNENywgMHg5MkZBLCAweDJDRDUsIDB4OTJGQiwgMHgyQ0U3LAorICAgIDB4OTJGQywgMHgxMzdCLCAweDkyRkUsIDB4MkNFNCwgMHg5MkZGLCAweDJDREMsIDB4OTMwMCwgMHgyQ0U2LAorICAgIDB4OTMwMSwgMHgyQ0NFLCAweDkzMDIsIDB4MkNEQSwgMHg5MzA0LCAweDEzN0QsIDB4OTMwNiwgMHgyQ0M2LAorICAgIDB4OTMwOCwgMHgyQ0M0LCAweDkzMDksIDB4MkNFNSwgMHg5MzBCLCAweDJDRTMsIDB4OTMwQywgMHgyQ0UyLAorICAgIDB4OTMwRCwgMHgyQ0QyLCAweDkzMEUsIDB4MkNEMSwgMHg5MzBGLCAweDJDQzcsIDB4OTMxMCwgMHgxMzdGLAorICAgIDB4OTMxMiwgMHgyQ0NELCAweDkzMTMsIDB4MkNENiwgMHg5MzE0LCAweDJDRTEsIDB4OTMxNSwgMHgxMzgyLAorICAgIDB4OTMxNiwgMHgyQ0U4LCAweDkzMTgsIDB4MTRBMywgMHg5MzE5LCAweDEzODQsIDB4OTMxQSwgMHgxMzdFLAorICAgIDB4OTMxQiwgMHgyQ0NCLCAweDkzMUQsIDB4MkNENCwgMHg5MzFFLCAweDJDQzMsIDB4OTMxRiwgMHgyQ0M1LAorICAgIDB4OTMyMCwgMHgxMzc1LCAweDkzMjEsIDB4MTM4MSwgMHg5MzIyLCAweDEzN0EsIDB4OTMyMywgMHgyQ0NDLAorICAgIDB4OTMyNCwgMHgyQ0RCLCAweDkzMjUsIDB4MkFBRSwgMHg5MzI2LCAweDEzODAsIDB4OTMyNywgMHgyQ0MyLAorICAgIDB4OTMyOCwgMHgxNDlFLCAweDkzMjksIDB4MkNERCwgMHg5MzJBLCAweDJDRTAsIDB4OTMyQiwgMHgxMzdDLAorICAgIDB4OTMyRCwgMHgyQ0QwLCAweDkzMkUsIDB4MTM4MywgMHg5MzJGLCAweDEzNzksIDB4OTMzMywgMHgxMzc4LAorICAgIDB4OTMzNCwgMHgyQ0Q5LCAweDkzMzUsIDB4MkNERiwgMHg5MzM2LCAweDEzNzYsIDB4OTMzOCwgMHgyQ0M5LAorICAgIDB4OTMzOSwgMHgyQ0RFLCAweDkzM0MsIDB4MkNDQSwgMHg5MzQ2LCAweDJDQ0YsIDB4OTM0NywgMHgyRThELAorICAgIDB4OTM0OSwgMHgyRTkyLCAweDkzNEEsIDB4MTRBMCwgMHg5MzRCLCAweDE0QTIsIDB4OTM0QywgMHgyRTk4LAorICAgIDB4OTM0RCwgMHgxNDlDLCAweDkzNEUsIDB4MkVBNiwgMHg5MzRGLCAweDJFOUUsIDB4OTM1MCwgMHgyRTkzLAorICAgIDB4OTM1MSwgMHgyRTk0LCAweDkzNTIsIDB4MkU5RCwgMHg5MzU0LCAweDE0QTksIDB4OTM1NSwgMHgyRTlDLAorICAgIDB4OTM1NiwgMHgyRThDLCAweDkzNTcsIDB4MkU5QiwgMHg5MzU4LCAweDJFOEYsIDB4OTM1OSwgMHgyRUE3LAorICAgIDB4OTM1QSwgMHgxNEE4LCAweDkzNUIsIDB4MTRBNiwgMHg5MzVDLCAweDJFOTAsIDB4OTM1RSwgMHgyRUEzLAorICAgIDB4OTM2MCwgMHgyRTk1LCAweDkzNjEsIDB4MkVBMiwgMHg5MzYzLCAweDJFQTQsIDB4OTM2NCwgMHgyRThCLAorICAgIDB4OTM2NSwgMHgxNEExLCAweDkzNjcsIDB4MkVBNSwgMHg5MzZBLCAweDJFOTksIDB4OTM2QywgMHgxNEE1LAorICAgIDB4OTM2RCwgMHgyRTk2LCAweDkzNzAsIDB4MTRBNywgMHg5MzcxLCAweDJFOUYsIDB4OTM3NSwgMHgxNDlGLAorICAgIDB4OTM3NiwgMHgyRTkxLCAweDkzNzcsIDB4MkVBMCwgMHg5Mzc5LCAweDJFOUEsIDB4OTM3QSwgMHgyQ0M4LAorICAgIDB4OTM3QiwgMHgyRUExLCAweDkzN0MsIDB4MkU4RSwgMHg5MzdFLCAweDE0QTQsIDB4OTM4MCwgMHgzMDE0LAorICAgIDB4OTM4MiwgMHgxNDlELCAweDkzODMsIDB4MkU4OSwgMHg5Mzg4LCAweDMwMTEsIDB4OTM4OSwgMHgzMDBBLAorICAgIDB4OTM4QSwgMHgxNTQwLCAweDkzOEMsIDB4MzAwNSwgMHg5MzhELCAweDMwMTUsIDB4OTM4RSwgMHgzMDBDLAorICAgIDB4OTM4RiwgMHgyRTk3LCAweDkzOTEsIDB4MzAxNywgMHg5MzkyLCAweDMwMDYsIDB4OTM5NCwgMHgxNTNGLAorICAgIDB4OTM5NSwgMHgzMDEwLCAweDkzOTYsIDB4MTU0MSwgMHg5Mzk3LCAweDE1NDksIDB4OTM5OCwgMHgxNTQ3LAorICAgIDB4OTM5OSwgMHgzMDEyLCAweDkzOUEsIDB4MTU0OCwgMHg5MzlCLCAweDMwMDgsIDB4OTM5RCwgMHgzMDA5LAorICAgIDB4OTM5RSwgMHgzMDBFLCAweDkzOUYsIDB4MzAxMywgMHg5M0ExLCAweDJFODgsIDB4OTNBMiwgMHgxNTQyLAorICAgIDB4OTNBMywgMHgzMDFDLCAweDkzQTQsIDB4MzAxOSwgMHg5M0E1LCAweDMxNjAsIDB4OTNBNiwgMHgzMDBGLAorICAgIDB4OTNBNywgMHgzMDBCLCAweDkzQTgsIDB4MzAxQSwgMHg5M0E5LCAweDMxNTUsIDB4OTNBQSwgMHgzMDBELAorICAgIDB4OTNBQywgMHgxNTQ1LCAweDkzQUUsIDB4MTU0NCwgMHg5M0FGLCAweDJFOEEsIDB4OTNCMCwgMHgxNTQ2LAorICAgIDB4OTNCMSwgMHgzMDE2LCAweDkzQjIsIDB4MzAxOCwgMHg5M0IzLCAweDE1NDMsIDB4OTNCNCwgMHgzMDFCLAorICAgIDB4OTNCNSwgMHgzMDA0LCAweDkzQjcsIDB4MzAwNywgMHg5M0MwLCAweDMxNUUsIDB4OTNDMiwgMHgzMTRFLAorICAgIDB4OTNDMywgMHgxNUUwLCAweDkzQzQsIDB4MzE1QywgMHg5M0M3LCAweDMxNEMsIDB4OTNDOCwgMHgxNUUxLAorICAgIDB4OTNDQSwgMHgzMTU3LCAweDkzQ0MsIDB4MzE1MywgMHg5M0NELCAweDE1RTYsIDB4OTNDRSwgMHgzMTVELAorICAgIDB4OTNDRiwgMHgzMTRELCAweDkzRDAsIDB4MzE1MCwgMHg5M0QxLCAweDE1REUsIDB4OTNEMiwgMHgzMTVGLAorICAgIDB4OTNENCwgMHgzMTU4LCAweDkzRDUsIDB4MzE1QiwgMHg5M0Q2LCAweDE1RTQsIDB4OTNENywgMHgxNUU5LAorICAgIDB4OTNEOCwgMHgxNUU3LCAweDkzRDksIDB4MzE1NCwgMHg5M0RBLCAweDMxNEYsIDB4OTNEQywgMHgxNUUyLAorICAgIDB4OTNERCwgMHgxNUUzLCAweDkzREUsIDB4MzE0QiwgMHg5M0RGLCAweDE1REYsIDB4OTNFMSwgMHgxNURELAorICAgIDB4OTNFMiwgMHgxNUU1LCAweDkzRTMsIDB4MzE1QSwgMHg5M0U0LCAweDE1RTgsIDB4OTNFNiwgMHgzMTU2LAorICAgIDB4OTNFNywgMHgzMTYxLCAweDkzRTgsIDB4MTVFQSwgMHg5M0VDLCAweDMxNTIsIDB4OTNFRSwgMHgzMTU5LAorICAgIDB4OTNGNSwgMHgzMjVBLCAweDkzRjYsIDB4MzI2OSwgMHg5M0Y3LCAweDMyNUMsIDB4OTNGOCwgMHgzMjYzLAorICAgIDB4OTNGOSwgMHgzMTUxLCAweDkzRkEsIDB4MzI2MSwgMHg5M0ZCLCAweDMyNTAsIDB4OTNGQywgMHgzMjY3LAorICAgIDB4OTNGRCwgMHgxNjU0LCAweDkzRkUsIDB4MzI1NCwgMHg5M0ZGLCAweDMyNjYsIDB4OTQwMCwgMHgzMjVCLAorICAgIDB4OTQwMywgMHgxNjUzLCAweDk0MDYsIDB4MzI2QiwgMHg5NDA3LCAweDMyNUQsIDB4OTQwOSwgMHgzMjYyLAorICAgIDB4OTQwQSwgMHgzMjY1LCAweDk0MEIsIDB4MzI0RSwgMHg5NDBDLCAweDMyNjgsIDB4OTQwRCwgMHgzMjU5LAorICAgIDB4OTQwRSwgMHgzMjVFLCAweDk0MEYsIDB4MzI1MiwgMHg5NDEwLCAweDMyNTYsIDB4OTQxMSwgMHgzMjZBLAorICAgIDB4OTQxMiwgMHgzMjYwLCAweDk0MTMsIDB4MzI0RiwgMHg5NDE0LCAweDMyNTMsIDB4OTQxNSwgMHgzMjU1LAorICAgIDB4OTQxNiwgMHgzMjVGLCAweDk0MTgsIDB4MTY1MiwgMHg5NDE5LCAweDMyNTgsIDB4OTQyMCwgMHgzMjUxLAorICAgIDB4OTQyOCwgMHgzMjU3LCAweDk0MjksIDB4MzMyNSwgMHg5NDJBLCAweDMzMjksIDB4OTQyQiwgMHgxNjlGLAorICAgIDB4OTQyQywgMHgzMzJCLCAweDk0MkUsIDB4MTY5OSwgMHg5NDMwLCAweDMzMjcsIDB4OTQzMSwgMHgzMzJELAorICAgIDB4OTQzMiwgMHgxNjlFLCAweDk0MzMsIDB4MTY5QSwgMHg5NDM1LCAweDE2OUIsIDB4OTQzNiwgMHgzMzI0LAorICAgIDB4OTQzNywgMHgzMzJBLCAweDk0MzgsIDB4MTY5RCwgMHg5NDM5LCAweDMzMjgsIDB4OTQzQSwgMHgxNjlDLAorICAgIDB4OTQzQiwgMHgzMzIzLCAweDk0M0MsIDB4MzI2NCwgMHg5NDNELCAweDMzMjYsIDB4OTQzRiwgMHgzMzIyLAorICAgIDB4OTQ0MCwgMHgzMzJDLCAweDk0NDQsIDB4MTZERiwgMHg5NDQ1LCAweDMzQ0QsIDB4OTQ0NiwgMHgzM0QwLAorICAgIDB4OTQ0NywgMHgzM0NDLCAweDk0NDgsIDB4MzNDRSwgMHg5NDQ5LCAweDMzQ0YsIDB4OTQ0QSwgMHgzM0M5LAorICAgIDB4OTQ0QiwgMHgzM0NBLCAweDk0NEMsIDB4MzNDNywgMHg5NDRGLCAweDMzQ0IsIDB4OTQ1MCwgMHgzM0M4LAorICAgIDB4OTQ1MSwgMHgxNkUwLCAweDk0NTIsIDB4MTZFMSwgMHg5NDU1LCAweDM0NDgsIDB4OTQ1NywgMHgzNDRBLAorICAgIDB4OTQ1RCwgMHgzNDQ5LCAweDk0NUUsIDB4MzQ0QiwgMHg5NDYwLCAweDE3MEUsIDB4OTQ2MiwgMHgzNDQ3LAorICAgIDB4OTQ2MywgMHgxNzBELCAweDk0NjQsIDB4MTcwRiwgMHg5NDY4LCAweDM0QTYsIDB4OTQ2OSwgMHgzNEE3LAorICAgIDB4OTQ2QSwgMHgxNzMxLCAweDk0NkIsIDB4MzRBNSwgMHg5NDZELCAweDM0RUQsIDB4OTQ2RSwgMHgzNEVDLAorICAgIDB4OTQ2RiwgMHgzNEVFLCAweDk0NzAsIDB4MTc0QywgMHg5NDcxLCAweDM0RUYsIDB4OTQ3MiwgMHgxNzRCLAorICAgIDB4OTQ3MywgMHgzNEYwLCAweDk0NzQsIDB4MzUwQywgMHg5NDc1LCAweDM1MEYsIDB4OTQ3NiwgMHgzNTBFLAorICAgIDB4OTQ3NywgMHgxNzU1LCAweDk0NzgsIDB4MzUwRCwgMHg5NDdDLCAweDE3NUYsIDB4OTQ3RCwgMHgxNzVELAorICAgIDB4OTQ3RSwgMHgxNzVFLCAweDk0N0YsIDB4MTc2NCwgMHg5NDgwLCAweDM1MzksIDB4OTQ4MSwgMHgzNTNBLAorICAgIDB4OTQ4MiwgMHgzNTM4LCAweDk0ODMsIDB4MzU0MCwgMHg5NTc3LCAweDA2OTcsIDB4OTU3QSwgMHgyMEExLAorICAgIDB4OTU3QiwgMHgyMzRBLCAweDk1N0MsIDB4MkFCMSwgMHg5NTdELCAweDMxNjIsIDB4OTU4MCwgMHgwNjk4LAorICAgIDB4OTU4MiwgMHgwODIxLCAweDk1ODMsIDB4MDlFQSwgMHg5NTg2LCAweDIwQTIsIDB4OTU4OCwgMHgyMEEzLAorICAgIDB4OTU4OSwgMHgwQkQwLCAweDk1OEIsIDB4MEQ5QSwgMHg5NThDLCAweDIzNEMsIDB4OTU4RCwgMHgyMzRCLAorICAgIDB4OTU4RSwgMHgwRDlFLCAweDk1OEYsIDB4MEQ5OSwgMHg5NTkwLCAweDIzNEQsIDB4OTU5MSwgMHgwRDlCLAorICAgIDB4OTU5MiwgMHgwRDlELCAweDk1OTMsIDB4MEQ5QywgMHg5NTk0LCAweDBEOTgsIDB4OTU5OCwgMHgwRjVDLAorICAgIDB4OTU5QiwgMHgyNUYzLCAweDk1OUMsIDB4MjVGMSwgMHg5NTlFLCAweDI1RjIsIDB4OTU5RiwgMHgyNUYwLAorICAgIDB4OTVBMSwgMHgxMERGLCAweDk1QTMsIDB4MTBFMiwgMHg5NUE0LCAweDEwRTQsIDB4OTVBNSwgMHgxMEUzLAorICAgIDB4OTVBOCwgMHgxMEUwLCAweDk1QTksIDB4MTBFMSwgMHg5NUFCLCAweDJBQjMsIDB4OTVBQywgMHgyQUIyLAorICAgIDB4OTVBRCwgMHgxMjYwLCAweDk1QUUsIDB4MkFCNCwgMHg5NUIwLCAweDJBQjUsIDB4OTVCMSwgMHgxMjYxLAorICAgIDB4OTVCNSwgMHgyQ0YwLCAweDk1QjYsIDB4MkNFRSwgMHg5NUI3LCAweDJFQUQsIDB4OTVCOSwgMHgyQ0VDLAorICAgIDB4OTVCQSwgMHgyQ0VELCAweDk1QkIsIDB4MTM4NSwgMHg5NUJDLCAweDJDRTksIDB4OTVCRCwgMHgyQ0YxLAorICAgIDB4OTVCRSwgMHgyQ0VCLCAweDk1QkYsIDB4MkNFRiwgMHg5NUMwLCAweDJFQTksIDB4OTVDMywgMHgyRUFCLAorICAgIDB4OTVDNSwgMHgyRUFDLCAweDk1QzYsIDB4MTRBRSwgMHg5NUM3LCAweDJFQTgsIDB4OTVDOCwgMHgxNEFELAorICAgIDB4OTVDOSwgMHgyRUFBLCAweDk1Q0EsIDB4MTRBQSwgMHg5NUNCLCAweDE0QUIsIDB4OTVDQywgMHgxNEFDLAorICAgIDB4OTVDRCwgMHgyQ0VBLCAweDk1RDAsIDB4MTU0QywgMHg5NUQxLCAweDMwMUYsIDB4OTVEMiwgMHgzMDFELAorICAgIDB4OTVEMywgMHgzMDFFLCAweDk1RDQsIDB4MTU0QSwgMHg5NUQ1LCAweDE1NEQsIDB4OTVENiwgMHgxNTRCLAorICAgIDB4OTVEQSwgMHgzMTYzLCAweDk1REIsIDB4MzE2NCwgMHg5NURDLCAweDE1RUIsIDB4OTVERSwgMHgzMjZDLAorICAgIDB4OTVERiwgMHgzMjZFLCAweDk1RTAsIDB4MzI2RCwgMHg5NUUxLCAweDE2NTUsIDB4OTVFMiwgMHgxNkEwLAorICAgIDB4OTVFMywgMHgzMzMwLCAweDk1RTQsIDB4MzMyRiwgMHg5NUU1LCAweDMzMkUsIDB4OTYxQywgMHgwNjk5LAorICAgIDB4OTYxRSwgMHgxN0I0LCAweDk2MjAsIDB4MTgyMSwgMHg5NjIxLCAweDA0MTQsIDB4OTYyMiwgMHgxODFGLAorICAgIDB4OTYyMywgMHgxODIyLCAweDk2MjQsIDB4MTgyMCwgMHg5NjI4LCAweDE4RjEsIDB4OTYyQSwgMHgwNTI2LAorICAgIDB4OTYyQywgMHgwNTI3LCAweDk2MkQsIDB4MThGMywgMHg5NjJFLCAweDA1MjQsIDB4OTYyRiwgMHgxOEYyLAorICAgIDB4OTYzMCwgMHgxOEYwLCAweDk2MzEsIDB4MDUyNSwgMHg5NjMyLCAweDA1MjMsIDB4OTYzOSwgMHgxQTU1LAorICAgIDB4OTYzQSwgMHgxQTU4LCAweDk2M0IsIDB4MDY5QywgMHg5NjNDLCAweDFBNTcsIDB4OTYzRCwgMHgxQTU2LAorICAgIDB4OTYzRiwgMHgwNjlCLCAweDk2NDAsIDB4MDY5QSwgMHg5NjQyLCAweDA2OUUsIDB4OTY0MywgMHgxQTU5LAorICAgIDB4OTY0NCwgMHgwNjlELCAweDk2NEEsIDB4MUMxQSwgMHg5NjRCLCAweDA4MjMsIDB4OTY0QywgMHgwODI0LAorICAgIDB4OTY0RCwgMHgwODI1LCAweDk2NEUsIDB4MUMxQiwgMHg5NjRGLCAweDFDMTcsIDB4OTY1MCwgMHgwODIyLAorICAgIDB4OTY1MSwgMHgxQzE4LCAweDk2NTMsIDB4MUMxOSwgMHg5NjU0LCAweDFDMTYsIDB4OTY1OCwgMHgwOUYxLAorICAgIDB4OTY1QiwgMHgwOUVFLCAweDk2NUMsIDB4MUUyRiwgMHg5NjVELCAweDA5RUYsIDB4OTY1RSwgMHgwOUYyLAorICAgIDB4OTY1RiwgMHgxRTMwLCAweDk2NjEsIDB4MDlFRCwgMHg5NjYyLCAweDA5RUIsIDB4OTY2MywgMHgwOUVDLAorICAgIDB4OTY2NCwgMHgwOUYwLCAweDk2NkEsIDB4MEJEMSwgMHg5NjZCLCAweDIwQTYsIDB4OTY2QywgMHgwQkQ5LAorICAgIDB4OTY2RCwgMHgyMEE1LCAweDk2NkYsIDB4MjBBOCwgMHg5NjcwLCAweDBCRDUsIDB4OTY3MSwgMHgyMEE3LAorICAgIDB4OTY3MiwgMHgwREE2LCAweDk2NzMsIDB4MEJEMywgMHg5Njc0LCAweDBCRDYsIDB4OTY3NSwgMHgwQkQyLAorICAgIDB4OTY3NiwgMHgwQkQ3LCAweDk2NzcsIDB4MEJEOCwgMHg5Njc4LCAweDBCRDQsIDB4OTY3QywgMHgyMEE0LAorICAgIDB4OTY3RCwgMHgwREEyLCAweDk2N0UsIDB4MjM0RiwgMHg5NjgwLCAweDIzNTMsIDB4OTY4MywgMHgyMzUyLAorICAgIDB4OTY4NCwgMHgwREE3LCAweDk2ODUsIDB4MERBMywgMHg5Njg2LCAweDBEQTQsIDB4OTY4NywgMHgyMzRFLAorICAgIDB4OTY4OCwgMHgyMzUwLCAweDk2ODksIDB4MjM1MSwgMHg5NjhBLCAweDBEOUYsIDB4OTY4QiwgMHgwREExLAorICAgIDB4OTY4RCwgMHgwREE1LCAweDk2OEUsIDB4MERBMCwgMHg5NjkxLCAweDI1RjYsIDB4OTY5MiwgMHgyNUY0LAorICAgIDB4OTY5MywgMHgyNUY1LCAweDk2OTQsIDB4MEY1RSwgMHg5Njk1LCAweDBGNUYsIDB4OTY5NywgMHgyNUY3LAorICAgIDB4OTY5OCwgMHgwRjVELCAweDk2OTksIDB4MTBFNSwgMHg5NjlCLCAweDEwRTcsIDB4OTY5QywgMHgxMEU2LAorICAgIDB4OTY5RSwgMHgyODUyLCAweDk2QTEsIDB4Mjg1MywgMHg5NkEyLCAweDJBQjcsIDB4OTZBNCwgMHgyQUI2LAorICAgIDB4OTZBNywgMHgxMzg2LCAweDk2QTgsIDB4MTM4NywgMHg5NkE5LCAweDJDRjIsIDB4OTZBQSwgMHgxMzg4LAorICAgIDB4OTZBQywgMHgyRUIwLCAweDk2QUUsIDB4MkVBRSwgMHg5NkIwLCAweDJFQUYsIDB4OTZCMSwgMHgxNEFGLAorICAgIDB4OTZCMywgMHgzMDIwLCAweDk2QjQsIDB4MTVFQywgMHg5NkI2LCAweDAyMzEsIDB4OTZCOCwgMHgxNEIwLAorICAgIDB4OTZCOSwgMHgwNjlGLCAweDk2QkIsIDB4MDlGMywgMHg5NkJDLCAweDFFMzEsIDB4OTZCRiwgMHgyMEE5LAorICAgIDB4OTZDMCwgMHgwQkRBLCAweDk2QzEsIDB4MERBOCwgMHg5NkMyLCAweDIzNTQsIDB4OTZDMywgMHgyMzU2LAorICAgIDB4OTZDNCwgMHgwREFBLCAweDk2QzUsIDB4MERBOSwgMHg5NkM2LCAweDBEQUIsIDB4OTZDNywgMHgwREFDLAorICAgIDB4OTZDOCwgMHgyMzU1LCAweDk2QzksIDB4MEY2MiwgMHg5NkNBLCAweDBGNjMsIDB4OTZDQiwgMHgwRjYxLAorICAgIDB4OTZDQywgMHgxMEU4LCAweDk2Q0QsIDB4MEY2MCwgMHg5NkNFLCAweDI1RjgsIDB4OTZEMiwgMHgxMEU5LAorICAgIDB4OTZEMywgMHgyQUI4LCAweDk2RDQsIDB4MkNGMywgMHg5NkQ1LCAweDEzODksIDB4OTZENiwgMHgxNEIxLAorICAgIDB4OTZENywgMHgzMDIxLCAweDk2RDgsIDB4MzAyNSwgMHg5NkQ5LCAweDE1NTAsIDB4OTZEQSwgMHgzMDIyLAorICAgIDB4OTZEQiwgMHgxNTUxLCAweDk2REMsIDB4MTU0RiwgMHg5NkRELCAweDMwMjYsIDB4OTZERSwgMHgxNTUyLAorICAgIDB4OTZERiwgMHgzMDI0LCAweDk2RTEsIDB4MzE2NSwgMHg5NkUyLCAweDE1NEUsIDB4OTZFMywgMHgxNUVELAorICAgIDB4OTZFNSwgMHgzNEE4LCAweDk2RTgsIDB4MDZBMCwgMHg5NkU5LCAweDBCREMsIDB4OTZFQSwgMHgwQkRCLAorICAgIDB4OTZFRiwgMHgwREFELCAweDk2RjAsIDB4MjM1OCwgMHg5NkYxLCAweDIzNTcsIDB4OTZGMiwgMHgwREFFLAorICAgIDB4OTZGNSwgMHgyNUZDLCAweDk2RjYsIDB4MEY2NywgMHg5NkY3LCAweDBGNjQsIDB4OTZGOCwgMHgyNUZCLAorICAgIDB4OTZGOSwgMHgwRjY2LCAweDk2RkEsIDB4MjVGOSwgMHg5NkZCLCAweDBGNjUsIDB4OTZGRCwgMHgyNUZBLAorICAgIDB4OTZGRiwgMHgyODU0LCAweDk3MDAsIDB4MTBFQSwgMHg5NzAyLCAweDJBQkIsIDB4OTcwNCwgMHgxMjYyLAorICAgIDB4OTcwNSwgMHgyQUI5LCAweDk3MDYsIDB4MTI2MywgMHg5NzA3LCAweDEyNjQsIDB4OTcwOCwgMHgyQUJBLAorICAgIDB4OTcwOSwgMHgxMjY1LCAweDk3MEIsIDB4MkNGNCwgMHg5NzBELCAweDEzOEQsIDB4OTcwRSwgMHgxMzhBLAorICAgIDB4OTcwRiwgMHgxMzhGLCAweDk3MTAsIDB4MkNGNiwgMHg5NzExLCAweDEzOEIsIDB4OTcxMiwgMHgyQ0Y1LAorICAgIDB4OTcxMywgMHgxMzhFLCAweDk3MTYsIDB4MTM4QywgMHg5NzE4LCAweDJFQjMsIDB4OTcxOSwgMHgyRUI1LAorICAgIDB4OTcxQywgMHgxNEIyLCAweDk3MUQsIDB4MkVCNCwgMHg5NzFFLCAweDE0QjMsIDB4OTcxRiwgMHgyRUIyLAorICAgIDB4OTcyMCwgMHgyRUIxLCAweDk3MjIsIDB4MzAyOCwgMHg5NzIzLCAweDMwMjcsIDB4OTcyNCwgMHgxNTUzLAorICAgIDB4OTcyNSwgMHgzMDI5LCAweDk3MjYsIDB4MzE2QSwgMHg5NzI3LCAweDE1RUYsIDB4OTcyOCwgMHgzMTY5LAorICAgIDB4OTcyOSwgMHgzMTY2LCAweDk3MkEsIDB4MTVFRSwgMHg5NzJCLCAweDMxNjcsIDB4OTcyQywgMHgzMTY4LAorICAgIDB4OTcyRSwgMHgzMjZGLCAweDk3MkYsIDB4MzI3MCwgMHg5NzMwLCAweDE2NTYsIDB4OTczMiwgMHgxNkEzLAorICAgIDB4OTczNSwgMHgzMzMxLCAweDk3MzgsIDB4MTZBMSwgMHg5NzM5LCAweDE2QTIsIDB4OTczQSwgMHgzMzMyLAorICAgIDB4OTczRCwgMHgxNkUyLCAweDk3M0UsIDB4MTZFMywgMHg5NzNGLCAweDMzRDEsIDB4OTc0MiwgMHgxNzMyLAorICAgIDB4OTc0MywgMHgzNEFBLCAweDk3NDQsIDB4MTczNCwgMHg5NzQ2LCAweDM0QTksIDB4OTc0NywgMHgzNEFCLAorICAgIDB4OTc0OCwgMHgxNzMzLCAweDk3NDksIDB4MzRGMSwgMHg5NzRCLCAweDM1MjYsIDB4OTc1MiwgMHgwNkExLAorICAgIDB4OTc1NiwgMHgwRjY4LCAweDk3NTgsIDB4Mjg1NSwgMHg5NzVBLCAweDJBQkMsIDB4OTc1QiwgMHgxMzkwLAorICAgIDB4OTc1QywgMHgxMzkxLCAweDk3NUUsIDB4MDZBMiwgMHg5NzYwLCAweDEyNjYsIDB4OTc2MSwgMHgxNUYwLAorICAgIDB4OTc2MiwgMHgwODI2LCAweDk3NjYsIDB4MTM5MiwgMHg5NzY4LCAweDE3MTAsIDB4OTc2OSwgMHgwODI3LAorICAgIDB4OTc2QSwgMHgyMEFBLCAweDk3NkMsIDB4MjM1OSwgMHg5NzZFLCAweDIzNUIsIDB4OTc3MCwgMHgyMzVBLAorICAgIDB4OTc3MiwgMHgyNjAwLCAweDk3NzMsIDB4MjVGRCwgMHg5Nzc0LCAweDBGNjksIDB4OTc3NiwgMHgwRjZBLAorICAgIDB4OTc3NywgMHgyNUZFLCAweDk3NzgsIDB4MjVGRiwgMHg5NzdBLCAweDI4NTcsIDB4OTc3QiwgMHgyODVDLAorICAgIDB4OTc3QywgMHgxMEVCLCAweDk3N0QsIDB4Mjg1NiwgMHg5NzdFLCAweDI4NTgsIDB4OTc3RiwgMHgyODVGLAorICAgIDB4OTc4MCwgMHgyODVBLCAweDk3ODEsIDB4Mjg1RSwgMHg5NzgyLCAweDI4NUIsIDB4OTc4MywgMHgyODU5LAorICAgIDB4OTc4NCwgMHgyODVELCAweDk3ODUsIDB4MTBFQywgMHg5Nzg4LCAweDJBQkYsIDB4OTc4QSwgMHgyQUJELAorICAgIDB4OTc4QiwgMHgxMjY4LCAweDk3OEQsIDB4MTI2NywgMHg5NzhFLCAweDJBQkUsIDB4OTc4RiwgMHgxMjY5LAorICAgIDB4OTc5NCwgMHgyQ0Y5LCAweDk3OTcsIDB4MkNGOCwgMHg5Nzk4LCAweDEzOTMsIDB4OTc5OSwgMHgyQ0Y3LAorICAgIDB4OTc5QSwgMHgyRUI2LCAweDk3OUMsIDB4MkVCOCwgMHg5NzlELCAweDJFQkEsIDB4OTc5RSwgMHgyRUI5LAorICAgIDB4OTdBMCwgMHgxNEI0LCAweDk3QTEsIDB4MkVCNywgMHg5N0EyLCAweDMwMzAsIDB4OTdBMywgMHgxNTU0LAorICAgIDB4OTdBNCwgMHgzMDJFLCAweDk3QTUsIDB4MzAzMSwgMHg5N0E2LCAweDE1NTUsIDB4OTdBOCwgMHgzMDJDLAorICAgIDB4OTdBQSwgMHgzMDJGLCAweDk3QUIsIDB4MzAyRCwgMHg5N0FDLCAweDMwMkEsIDB4OTdBRCwgMHgxNTU2LAorICAgIDB4OTdBRSwgMHgzMDJCLCAweDk3QjMsIDB4MzE2QiwgMHg5N0I2LCAweDMxNkQsIDB4OTdCNywgMHgzMTZDLAorICAgIDB4OTdCOSwgMHgzMjcxLCAweDk3QkIsIDB4MzI3MiwgMHg5N0JGLCAweDMzMzMsIDB4OTdDMSwgMHgxNkU1LAorICAgIDB4OTdDMywgMHgxNkU0LCAweDk3QzQsIDB4MzQ0QywgMHg5N0M1LCAweDM0NEQsIDB4OTdDNiwgMHgxNzM1LAorICAgIDB4OTdDNywgMHgzNEFDLCAweDk3QzksIDB4MTc1NiwgMHg5N0NCLCAweDA4MjgsIDB4OTdDQywgMHgwREFGLAorICAgIDB4OTdDRCwgMHgyODYxLCAweDk3Q0UsIDB4Mjg2MCwgMHg5N0NGLCAweDJBQzEsIDB4OTdEMCwgMHgyQUMwLAorICAgIDB4OTdEMywgMHgxNEI1LCAweDk3RDQsIDB4MkVCQywgMHg5N0Q1LCAweDJFQkIsIDB4OTdENiwgMHgzMDM0LAorICAgIDB4OTdENywgMHgzMDMyLCAweDk3RDgsIDB4MzAzNSwgMHg5N0Q5LCAweDMwMzMsIDB4OTdEQywgMHgxNUYxLAorICAgIDB4OTdERCwgMHgzMTZFLCAweDk3REUsIDB4MzE2RiwgMHg5N0RGLCAweDMxNzAsIDB4OTdFMSwgMHgzMzM0LAorICAgIDB4OTdFMywgMHgzM0QyLCAweDk3RTUsIDB4MzRBRCwgMHg5N0VELCAweDA4MjksIDB4OTdGMCwgMHgyQ0ZBLAorICAgIDB4OTdGMSwgMHgyRUJELCAweDk3RjMsIDB4MDgyQSwgMHg5N0Y2LCAweDEwRUQsIDB4OTdGOCwgMHgyQ0ZCLAorICAgIDB4OTdGOSwgMHgxNTU3LCAweDk3RkEsIDB4MzAzNiwgMHg5N0ZCLCAweDE1RjIsIDB4OTdGRCwgMHgzMjczLAorICAgIDB4OTdGRSwgMHgzMjc0LCAweDk3RkYsIDB4MTZBNCwgMHg5ODAwLCAweDM0NEUsIDB4OTgwMSwgMHgwODJCLAorICAgIDB4OTgwMiwgMHgwQkRGLCAweDk4MDMsIDB4MEJFMCwgMHg5ODA0LCAweDIwQUIsIDB4OTgwNSwgMHgwREIwLAorICAgIDB4OTgwNiwgMHgwREIxLCAweDk4MDcsIDB4MjM1QywgMHg5ODA4LCAweDBEQjIsIDB4OTgwQSwgMHgwRjZFLAorICAgIDB4OTgwQywgMHgwRjcwLCAweDk4MEQsIDB4MjYwMiwgMHg5ODBFLCAweDI2MDMsIDB4OTgwRiwgMHgyNjAxLAorICAgIDB4OTgxMCwgMHgwRjZCLCAweDk4MTEsIDB4MEY2QywgMHg5ODEyLCAweDBGNkYsIDB4OTgxMywgMHgwRjZELAorICAgIDB4OTgxNiwgMHgyODYyLCAweDk4MTcsIDB4MTBFRSwgMHg5ODE4LCAweDEwRUYsIDB4OTgxQiwgMHgyQUM4LAorICAgIDB4OTgxQywgMHgxMjZDLCAweDk4MUQsIDB4MkFDMywgMHg5ODFFLCAweDJBQzIsIDB4OTgyMCwgMHgyQUM3LAorICAgIDB4OTgyMSwgMHgxMjZBLCAweDk4MjQsIDB4MTM5QSwgMHg5ODI2LCAweDJBQzQsIDB4OTgyNywgMHgyQUM5LAorICAgIDB4OTgyOCwgMHgyQUM2LCAweDk4MjksIDB4MkFDNSwgMHg5ODJCLCAweDEyNkIsIDB4OTgyRCwgMHgxMzk4LAorICAgIDB4OTgyRiwgMHgyQ0ZELCAweDk4MzAsIDB4MTM5NCwgMHg5ODMyLCAweDJDRkUsIDB4OTgzNSwgMHgyQ0ZDLAorICAgIDB4OTgzNywgMHgxMzk3LCAweDk4MzgsIDB4MTM5NSwgMHg5ODM5LCAweDEzOTksIDB4OTgzQiwgMHgxMzk2LAorICAgIDB4OTg0MSwgMHgyRUJFLCAweDk4NDMsIDB4MkVDMywgMHg5ODQ0LCAweDJFQkYsIDB4OTg0NSwgMHgyRUMyLAorICAgIDB4OTg0NiwgMHgxNEI2LCAweDk4NDgsIDB4MkRGMiwgMHg5ODQ5LCAweDJFQzEsIDB4OTg0QSwgMHgyRUMwLAorICAgIDB4OTg0QywgMHgxNTVBLCAweDk4NEQsIDB4MTU1OCwgMHg5ODRFLCAweDE1NUIsIDB4OTg0RiwgMHgxNTU5LAorICAgIDB4OTg1MCwgMHgzMDM3LCAweDk4NTEsIDB4MzAzOCwgMHg5ODUyLCAweDMwMzksIDB4OTg1MywgMHgxNTVDLAorICAgIDB4OTg1NywgMHgzMTc0LCAweDk4NTgsIDB4MTVGNCwgMHg5ODU5LCAweDMxNzIsIDB4OTg1QiwgMHgxNUY1LAorICAgIDB4OTg1QywgMHgzMTcxLCAweDk4NUQsIDB4MzE3MywgMHg5ODVFLCAweDE1RjMsIDB4OTg1RiwgMHgzMjc4LAorICAgIDB4OTg2MCwgMHgzMjc1LCAweDk4NjIsIDB4MzI3NiwgMHg5ODYzLCAweDMyNzcsIDB4OTg2NCwgMHgzMzM1LAorICAgIDB4OTg2NSwgMHgxNkE2LCAweDk4NjcsIDB4MTZBNSwgMHg5ODY5LCAweDMzRDQsIDB4OTg2QSwgMHgzM0QzLAorICAgIDB4OTg2QiwgMHgxNkU2LCAweDk4NkYsIDB4MTcxMSwgMHg5ODcwLCAweDE3MzYsIDB4OTg3MSwgMHgxNzRELAorICAgIDB4OTg3MiwgMHgzNEYyLCAweDk4NzMsIDB4MzUyNywgMHg5ODc0LCAweDM1MjgsIDB4OThBOCwgMHgwODJDLAorICAgIDB4OThBOSwgMHgyMzVELCAweDk4QUMsIDB4MjYwNCwgMHg5OEFELCAweDI4NjMsIDB4OThBRSwgMHgyODY0LAorICAgIDB4OThBRiwgMHgxMEYwLCAweDk4QjEsIDB4MTBGMSwgMHg5OEIyLCAweDJBQ0EsIDB4OThCMywgMHgxMjZELAorICAgIDB4OThCNiwgMHgxNEI3LCAweDk4QjgsIDB4MzAzQSwgMHg5OEJBLCAweDE1NUQsIDB4OThCQiwgMHgzMTc3LAorICAgIDB4OThCQywgMHgxNUY2LCAweDk4QkQsIDB4MzE3NiwgMHg5OEJFLCAweDMxNzgsIDB4OThCRiwgMHgzMTc1LAorICAgIDB4OThDMCwgMHgzMzM4LCAweDk4QzEsIDB4MzI3OSwgMHg5OEMyLCAweDMyN0EsIDB4OThDNCwgMHgxNjU3LAorICAgIDB4OThDNiwgMHgzMzM3LCAweDk4QzksIDB4MzMzNiwgMHg5OENCLCAweDMzRDUsIDB4OThDQywgMHgzNTI5LAorICAgIDB4OThEQiwgMHgwODJELCAweDk4REYsIDB4MDgyRSwgMHg5OEUyLCAweDA5RjQsIDB4OThFMywgMHgxRTMyLAorICAgIDB4OThFNSwgMHgyMEFDLCAweDk4RTcsIDB4MERCMywgMHg5OEU5LCAweDBEQjYsIDB4OThFQSwgMHgwREI0LAorICAgIDB4OThFQiwgMHgyMzVFLCAweDk4RUQsIDB4MERCOCwgMHg5OEVGLCAweDBEQjUsIDB4OThGMiwgMHgwREI3LAorICAgIDB4OThGNCwgMHgwRjcyLCAweDk4RjYsIDB4MjYwNSwgMHg5OEY5LCAweDI2MDYsIDB4OThGQSwgMHgyQUNDLAorICAgIDB4OThGQywgMHgwRjcxLCAweDk4RkQsIDB4MEY3MywgMHg5OEZFLCAweDBGNzQsIDB4OTkwMCwgMHgyODY2LAorICAgIDB4OTkwMiwgMHgyODY1LCAweDk5MDMsIDB4MTBGMiwgMHg5OTA1LCAweDEwRjMsIDB4OTkwNywgMHgyODY3LAorICAgIDB4OTkwOCwgMHgyQUNCLCAweDk5MDksIDB4MTBGNSwgMHg5OTBBLCAweDEyNkUsIDB4OTkwQywgMHgxMEY0LAorICAgIDB4OTkxMCwgMHgxMzlCLCAweDk5MTEsIDB4MkFDRCwgMHg5OTEyLCAweDEyNzAsIDB4OTkxMywgMHgxMjZGLAorICAgIDB4OTkxNCwgMHgyQUNFLCAweDk5MTUsIDB4MkFEMSwgMHg5OTE2LCAweDJBQ0YsIDB4OTkxNywgMHgyQUQwLAorICAgIDB4OTkxOCwgMHgxMjcxLCAweDk5MUEsIDB4MTNBMCwgMHg5OTFCLCAweDEzOUUsIDB4OTkxRSwgMHgxMzlELAorICAgIDB4OTkxRiwgMHgyRDAwLCAweDk5MjEsIDB4MTM5RiwgMHg5OTI0LCAweDJDRkYsIDB4OTkyNSwgMHgyRUM0LAorICAgIDB4OTkyNywgMHgyRDAxLCAweDk5MjgsIDB4MTM5QywgMHg5OTI5LCAweDJEMDIsIDB4OTkyQSwgMHgyRUM3LAorICAgIDB4OTkyQiwgMHgyRUM1LCAweDk5MkMsIDB4MkVDNiwgMHg5OTJELCAweDJFQ0IsIDB4OTkyRSwgMHgxNTYxLAorICAgIDB4OTkyRiwgMHgyRUNBLCAweDk5MzAsIDB4MkVDRCwgMHg5OTMxLCAweDJFQ0MsIDB4OTkzMiwgMHgyRUM5LAorICAgIDB4OTkzMywgMHgyRUM4LCAweDk5MzUsIDB4MTRCOCwgMHg5OTNBLCAweDMwM0QsIDB4OTkzQywgMHgzMDNDLAorICAgIDB4OTkzRCwgMHgxNTYwLCAweDk5M0UsIDB4MTU1RSwgMHg5OTNGLCAweDE1NUYsIDB4OTk0MSwgMHgzMDNCLAorICAgIDB4OTk0MywgMHgzMTdCLCAweDk5NDUsIDB4MTVGNywgMHg5OTQ3LCAweDMxN0EsIDB4OTk0OCwgMHgzMTc5LAorICAgIDB4OTk0OSwgMHgxNUY4LCAweDk5NEIsIDB4MzI3RiwgMHg5OTRDLCAweDMyN0UsIDB4OTk0RSwgMHgzMjdDLAorICAgIDB4OTk1MCwgMHgzMjdCLCAweDk5NTEsIDB4MTY1OSwgMHg5OTUyLCAweDE2NTgsIDB4OTk1MywgMHgzMjgwLAorICAgIDB4OTk1NCwgMHgzM0Q2LCAweDk5NTUsIDB4MTZFNywgMHg5OTU2LCAweDMzM0EsIDB4OTk1NywgMHgxNkE3LAorICAgIDB4OTk1OCwgMHgzMzM5LCAweDk5NTksIDB4MzI3RCwgMHg5OTVCLCAweDMzRDcsIDB4OTk1QywgMHgxNzEyLAorICAgIDB4OTk1RSwgMHgxNzRFLCAweDk5NUYsIDB4MzRGMywgMHg5OTYxLCAweDM1MkEsIDB4OTk5NiwgMHgwODJGLAorICAgIDB4OTk5NywgMHgyMEFELCAweDk5OTgsIDB4MkVDRSwgMHg5OTk5LCAweDA4MzAsIDB4OTk5QywgMHgyODY5LAorICAgIDB4OTk5RCwgMHgyODY4LCAweDk5OUUsIDB4MkQwMywgMHg5OUExLCAweDJFRDAsIDB4OTlBMywgMHgyRUNGLAorICAgIDB4OTlBNSwgMHgxNTYyLCAweDk5QTYsIDB4MzE3QywgMHg5OUE3LCAweDMxN0QsIDB4OTlBOCwgMHgxNjVBLAorICAgIDB4OTlBQiwgMHgzNTJCLCAweDk5QUMsIDB4MDlGNSwgMHg5OUFELCAweDBEQkEsIDB4OTlBRSwgMHgwREI5LAorICAgIDB4OTlBRiwgMHgyNjA3LCAweDk5QjAsIDB4MjYwOSwgMHg5OUIxLCAweDBGNzYsIDB4OTlCMiwgMHgyNjA4LAorICAgIDB4OTlCMywgMHgwRjc1LCAweDk5QjQsIDB4MEY3NywgMHg5OUI1LCAweDI2MEEsIDB4OTlCOSwgMHgyODZCLAorICAgIDB4OTlCQSwgMHgyODZELCAweDk5QkIsIDB4Mjg2QywgMHg5OUJELCAweDI4NkYsIDB4OTlDMSwgMHgxMEY2LAorICAgIDB4OTlDMiwgMHgyODZFLCAweDk5QzMsIDB4Mjg2QSwgMHg5OUM3LCAweDI4NzAsIDB4OTlDOSwgMHgyQUQ4LAorICAgIDB4OTlDQiwgMHgyQURCLCAweDk5Q0MsIDB4MkFERCwgMHg5OUNELCAweDJBRDMsIDB4OTlDRSwgMHgyQUQ3LAorICAgIDB4OTlDRiwgMHgyQUQ0LCAweDk5RDAsIDB4MTI3MywgMHg5OUQxLCAweDEyNzYsIDB4OTlEMiwgMHgxMjc4LAorICAgIDB4OTlEMywgMHgyQUQ1LCAweDk5RDQsIDB4MkFENiwgMHg5OUQ1LCAweDEyNzcsIDB4OTlENiwgMHgyQUQ5LAorICAgIDB4OTlENywgMHgyQURDLCAweDk5RDgsIDB4MkFEQSwgMHg5OUQ5LCAweDEyNzksIDB4OTlEQiwgMHgxMjc1LAorICAgIDB4OTlEQywgMHgyQUQyLCAweDk5REQsIDB4MTI3MiwgMHg5OURGLCAweDEyNzQsIDB4OTlFMiwgMHgxM0EyLAorICAgIDB4OTlFMywgMHgyRDA5LCAweDk5RTQsIDB4MkQwNywgMHg5OUU1LCAweDJEMDYsIDB4OTlFNywgMHgyRDBDLAorICAgIDB4OTlFOSwgMHgyRDBCLCAweDk5RUEsIDB4MkQwQSwgMHg5OUVDLCAweDJEMDUsIDB4OTlFRCwgMHgxM0ExLAorICAgIDB4OTlFRSwgMHgyRDA0LCAweDk5RjAsIDB4MkQwOCwgMHg5OUYxLCAweDEzQTMsIDB4OTlGNCwgMHgyRUQzLAorICAgIDB4OTlGNiwgMHgyRUQ3LCAweDk5RjcsIDB4MkVENCwgMHg5OUY4LCAweDJFRDYsIDB4OTlGOSwgMHgyRUQ1LAorICAgIDB4OTlGQSwgMHgyRUQyLCAweDk5RkIsIDB4MkVEOCwgMHg5OUZDLCAweDJFREIsIDB4OTlGRCwgMHgyRUQ5LAorICAgIDB4OTlGRSwgMHgyRURBLCAweDk5RkYsIDB4MTRCQSwgMHg5QTAxLCAweDE0QjksIDB4OUEwMiwgMHgyRUQxLAorICAgIDB4OUEwMywgMHgyRURDLCAweDlBMDQsIDB4MzA0MiwgMHg5QTA1LCAweDMwNDUsIDB4OUEwNiwgMHgzMDQ3LAorICAgIDB4OUEwNywgMHgzMDQ2LCAweDlBMDksIDB4MzA0MCwgMHg5QTBBLCAweDMwNDQsIDB4OUEwQiwgMHgzMDNGLAorICAgIDB4OUEwRCwgMHgzMDQxLCAweDlBMEUsIDB4MTU2MywgMHg5QTBGLCAweDMwM0UsIDB4OUExMSwgMHgzMDQzLAorICAgIDB4OUExNCwgMHgzMThBLCAweDlBMTUsIDB4MzE3RiwgMHg5QTE2LCAweDE1RjksIDB4OUExOSwgMHgxNUZBLAorICAgIDB4OUExQSwgMHgzMTdFLCAweDlBMUIsIDB4MzE4MywgMHg5QTFDLCAweDMxODksIDB4OUExRCwgMHgzMTgxLAorICAgIDB4OUExRSwgMHgzMTg4LCAweDlBMjAsIDB4MzE4NSwgMHg5QTIyLCAweDMxODQsIDB4OUEyMywgMHgzMTg3LAorICAgIDB4OUEyNCwgMHgzMTgyLCAweDlBMjUsIDB4MzE4MCwgMHg5QTI3LCAweDMxODYsIDB4OUEyOSwgMHgzMjg3LAorICAgIDB4OUEyQSwgMHgzMjg1LCAweDlBMkIsIDB4MTY1QiwgMHg5QTJDLCAweDMyODQsIDB4OUEyRCwgMHgzMjhBLAorICAgIDB4OUEyRSwgMHgzMjg4LCAweDlBMzAsIDB4MTY1QywgMHg5QTMxLCAweDMyODMsIDB4OUEzMiwgMHgzMjgxLAorICAgIDB4OUEzNCwgMHgzMjgyLCAweDlBMzUsIDB4MTY1RSwgMHg5QTM2LCAweDMyODYsIDB4OUEzNywgMHgxNjVELAorICAgIDB4OUEzOCwgMHgzMjg5LCAweDlBMzksIDB4MzMzQiwgMHg5QTNBLCAweDMzNDEsIDB4OUEzRCwgMHgzMzNDLAorICAgIDB4OUEzRSwgMHgxNkFCLCAweDlBM0YsIDB4MzM0MiwgMHg5QTQwLCAweDE2QUEsIDB4OUE0MSwgMHgzMzQwLAorICAgIDB4OUE0MiwgMHgzMzNGLCAweDlBNDMsIDB4MTZBOSwgMHg5QTQ0LCAweDMzM0UsIDB4OUE0NSwgMHgxNkE4LAorICAgIDB4OUE0NiwgMHgzMzNELCAweDlBNDgsIDB4MzNERCwgMHg5QTQ5LCAweDMzREYsIDB4OUE0QSwgMHgzM0RFLAorICAgIDB4OUE0QywgMHgzM0RCLCAweDlBNEQsIDB4MTZFOSwgMHg5QTRFLCAweDMzRDgsIDB4OUE0RiwgMHgzM0RDLAorICAgIDB4OUE1MCwgMHgzM0UxLCAweDlBNTIsIDB4MzNFMCwgMHg5QTUzLCAweDMzRDksIDB4OUE1NCwgMHgzM0RBLAorICAgIDB4OUE1NSwgMHgxNkU4LCAweDlBNTYsIDB4MzQ0RiwgMHg5QTU3LCAweDE3MTUsIDB4OUE1OSwgMHgzNDUwLAorICAgIDB4OUE1QSwgMHgxNzEzLCAweDlBNUIsIDB4MTcxNCwgMHg5QTVFLCAweDM0QUUsIDB4OUE1RiwgMHgxNzM3LAorICAgIDB4OUE2MCwgMHgzNTEwLCAweDlBNjIsIDB4MTc1NywgMHg5QTY0LCAweDM1MkMsIDB4OUE2NSwgMHgxNzU4LAorICAgIDB4OUE2NiwgMHgzNTJELCAweDlBNjcsIDB4MzUyRSwgMHg5QTY4LCAweDM1M0MsIDB4OUE2OSwgMHgzNTNCLAorICAgIDB4OUE2QSwgMHgxNzY3LCAweDlBNkIsIDB4MzU0NCwgMHg5QUE4LCAweDA5RjYsIDB4OUFBQiwgMHgyNjBDLAorICAgIDB4OUFBRCwgMHgyNjBCLCAweDlBQUYsIDB4MTBGNywgMHg5QUIwLCAweDEwRjgsIDB4OUFCMSwgMHgyODcxLAorICAgIDB4OUFCMywgMHgyQURFLCAweDlBQjQsIDB4MkQwRiwgMHg5QUI3LCAweDEyN0EsIDB4OUFCOCwgMHgxM0E0LAorICAgIDB4OUFCOSwgMHgyRDBELCAweDlBQkIsIDB4MkQxMCwgMHg5QUJDLCAweDEzQTUsIDB4OUFCRSwgMHgyRURELAorICAgIDB4OUFCRiwgMHgyRDBFLCAweDlBQzAsIDB4MzA0OCwgMHg5QUMxLCAweDE1NjQsIDB4OUFDMiwgMHgzMThCLAorICAgIDB4OUFDNiwgMHgzMjhELCAweDlBQzcsIDB4MzI4QiwgMHg5QUNBLCAweDMyOEMsIDB4OUFDRCwgMHgzMzQzLAorICAgIDB4OUFDRiwgMHgxNkFDLCAweDlBRDAsIDB4MzNFMiwgMHg5QUQxLCAweDE3MTgsIDB4OUFEMiwgMHgxNkVBLAorICAgIDB4OUFEMywgMHgxNzE2LCAweDlBRDQsIDB4MTcxNywgMHg5QUQ1LCAweDM0QUYsIDB4OUFENiwgMHgxNzRGLAorICAgIDB4OUFEOCwgMHgwOUY3LCAweDlBREMsIDB4MzA0OSwgMHg5QURGLCAweDFFMzMsIDB4OUFFMSwgMHgwRjc4LAorICAgIDB4OUFFMywgMHgyODcyLCAweDlBRTYsIDB4MTBGOSwgMHg5QUU3LCAweDI4NzMsIDB4OUFFQiwgMHgyQUUwLAorICAgIDB4OUFFQywgMHgyQURGLCAweDlBRUQsIDB4MTNBNywgMHg5QUVFLCAweDEyN0IsIDB4OUFFRiwgMHgxMjdDLAorICAgIDB4OUFGMSwgMHgyQUUzLCAweDlBRjIsIDB4MkFFMiwgMHg5QUYzLCAweDJBRTEsIDB4OUFGNiwgMHgyRDExLAorICAgIDB4OUFGNywgMHgyRDE0LCAweDlBRjksIDB4MkQxMywgMHg5QUZBLCAweDJEMTIsIDB4OUFGQiwgMHgxM0E2LAorICAgIDB4OUFGQywgMHgyRUUxLCAweDlBRkQsIDB4MkVERiwgMHg5QUZFLCAweDJFREUsIDB4OUIwMSwgMHgyRUUwLAorICAgIDB4OUIwMywgMHgxNTY1LCAweDlCMDQsIDB4MzA0QiwgMHg5QjA1LCAweDMwNEMsIDB4OUIwNiwgMHgxNTY2LAorICAgIDB4OUIwOCwgMHgzMDRBLCAweDlCMEEsIDB4MzE4RCwgMHg5QjBCLCAweDMxOEMsIDB4OUIwQywgMHgzMThGLAorICAgIDB4OUIwRCwgMHgxNUZCLCAweDlCMEUsIDB4MzE4RSwgMHg5QjEwLCAweDMyOEUsIDB4OUIxMSwgMHgzMjkwLAorICAgIDB4OUIxMiwgMHgzMjhGLCAweDlCMTUsIDB4MzM0NCwgMHg5QjE2LCAweDMzNDcsIDB4OUIxNywgMHgzMzQ1LAorICAgIDB4OUIxOCwgMHgzMzQ2LCAweDlCMTksIDB4MzNFMywgMHg5QjFBLCAweDE2RUIsIDB4OUIxRSwgMHgzNDUxLAorICAgIDB4OUIxRiwgMHgzNDUyLCAweDlCMjAsIDB4MzQ1MywgMHg5QjIyLCAweDE3MzgsIDB4OUIyMywgMHgxNzUwLAorICAgIDB4OUIyNCwgMHgzNTJGLCAweDlCMjUsIDB4MDlGOCwgMHg5QjI3LCAweDEyN0QsIDB4OUIyOCwgMHgxM0E4LAorICAgIDB4OUIyOSwgMHgzMDRELCAweDlCMkIsIDB4MzNFNCwgMHg5QjJFLCAweDM1MTEsIDB4OUIyRiwgMHgxRTM0LAorICAgIDB4OUIzMSwgMHgxNzY4LCAweDlCMzIsIDB4MDlGOSwgMHg5QjMzLCAweDJEMTUsIDB4OUIzNSwgMHgzMDRFLAorICAgIDB4OUIzNywgMHgzMTkwLCAweDlCM0EsIDB4MzM0OCwgMHg5QjNCLCAweDMzRTUsIDB4OUIzQywgMHgwOUZBLAorICAgIDB4OUIzRSwgMHgyODc0LCAweDlCM0YsIDB4Mjg3NSwgMHg5QjQxLCAweDEwRkEsIDB4OUI0MiwgMHgxMEZCLAorICAgIDB4OUI0MywgMHgyQUU1LCAweDlCNDQsIDB4MTI3RiwgMHg5QjQ1LCAweDEyN0UsIDB4OUI0NiwgMHgyQUU0LAorICAgIDB4OUI0OCwgMHgyRUUyLCAweDlCNEEsIDB4MzA0RiwgMHg5QjRCLCAweDMwNTEsIDB4OUI0QywgMHgzMDUwLAorICAgIDB4OUI0RCwgMHgxNTY5LCAweDlCNEUsIDB4MTU2OCwgMHg5QjRGLCAweDE1NjcsIDB4OUI1MSwgMHgxNkFFLAorICAgIDB4OUI1MiwgMHgzMzQ5LCAweDlCNTQsIDB4MTZBRCwgMHg5QjU1LCAweDMzRTcsIDB4OUI1NiwgMHgzM0U2LAorICAgIDB4OUI1OCwgMHgxNzM5LCAweDlCNTksIDB4MzRCMCwgMHg5QjVBLCAweDBCRTEsIDB4OUI1QiwgMHgyNjBELAorICAgIDB4OUI1RiwgMHgyODc4LCAweDlCNjAsIDB4Mjg3NiwgMHg5QjYxLCAweDI4NzcsIDB4OUI2NCwgMHgyQUVFLAorICAgIDB4OUI2NiwgMHgyQUU5LCAweDlCNjcsIDB4MkFFNiwgMHg5QjY4LCAweDJBRUQsIDB4OUI2QywgMHgyQUVGLAorICAgIDB4OUI2RiwgMHgxMjgxLCAweDlCNzAsIDB4MkFFQywgMHg5QjcxLCAweDJBRTgsIDB4OUI3NCwgMHgyQUU3LAorICAgIDB4OUI3NSwgMHgyQUVCLCAweDlCNzYsIDB4MkFFQSwgMHg5Qjc3LCAweDEyODAsIDB4OUI3QSwgMHgyRDIwLAorICAgIDB4OUI3QiwgMHgyRDFCLCAweDlCN0MsIDB4MkQxOSwgMHg5QjdELCAweDJEMjIsIDB4OUI3RSwgMHgyRDFBLAorICAgIDB4OUI4MCwgMHgyRDE2LCAweDlCODIsIDB4MkQxQywgMHg5Qjg1LCAweDJEMTcsIDB4OUI4NiwgMHgyRUVCLAorICAgIDB4OUI4NywgMHgyRDE4LCAweDlCODgsIDB4MkQyMywgMHg5QjkwLCAweDJEMUYsIDB4OUI5MSwgMHgxM0E5LAorICAgIDB4OUI5MiwgMHgyRDFFLCAweDlCOTMsIDB4MkQxRCwgMHg5Qjk1LCAweDJEMjEsIDB4OUI5QSwgMHgyRUUzLAorICAgIDB4OUI5QiwgMHgyRUU2LCAweDlCOUUsIDB4MkVFNSwgMHg5QkEwLCAweDJFRUQsIDB4OUJBMSwgMHgyRUU4LAorICAgIDB4OUJBMiwgMHgyRUVDLCAweDlCQTQsIDB4MkVFQSwgMHg5QkE1LCAweDJFRTksIDB4OUJBNiwgMHgyRUU3LAorICAgIDB4OUJBOCwgMHgyRUU0LCAweDlCQUEsIDB4MTRCRCwgMHg5QkFCLCAweDE0QkMsIDB4OUJBRCwgMHgxNEJFLAorICAgIDB4OUJBRSwgMHgxNEJCLCAweDlCQUYsIDB4MkVFRSwgMHg5QkI1LCAweDMwNTcsIDB4OUJCNiwgMHgzMDVBLAorICAgIDB4OUJCOCwgMHgzMDU4LCAweDlCQjksIDB4MzA1QywgMHg5QkJELCAweDMwNUQsIDB4OUJCRiwgMHgzMDU1LAorICAgIDB4OUJDMCwgMHgxNTZFLCAweDlCQzEsIDB4MzA1NiwgMHg5QkMzLCAweDMwNTQsIDB4OUJDNCwgMHgzMDVCLAorICAgIDB4OUJDNiwgMHgzMDUzLCAweDlCQzcsIDB4MzA1MiwgMHg5QkM4LCAweDE1NkQsIDB4OUJDOSwgMHgxNTZCLAorICAgIDB4OUJDQSwgMHgxNTZBLCAweDlCRDMsIDB4MzA1OSwgMHg5QkQ0LCAweDMxOTksIDB4OUJENSwgMHgzMTlGLAorICAgIDB4OUJENiwgMHgxNUZFLCAweDlCRDcsIDB4MzE5QSwgMHg5QkQ5LCAweDMxOUQsIDB4OUJEQSwgMHgzMUExLAorICAgIDB4OUJEQiwgMHgxNUZGLCAweDlCREMsIDB4MzE5QywgMHg5QkRFLCAweDMxOTQsIDB4OUJFMCwgMHgzMTkzLAorICAgIDB4OUJFMSwgMHgzMUEwLCAweDlCRTIsIDB4MzE5NywgMHg5QkU0LCAweDMxOTUsIDB4OUJFNSwgMHgzMTlFLAorICAgIDB4OUJFNiwgMHgzMTk2LCAweDlCRTcsIDB4MTVGRCwgMHg5QkU4LCAweDE1RkMsIDB4OUJFQSwgMHgzMTkxLAorICAgIDB4OUJFQiwgMHgzMTkyLCAweDlCRUMsIDB4MzE5QiwgMHg5QkYwLCAweDMxOTgsIDB4OUJGNywgMHgzMjkzLAorICAgIDB4OUJGOCwgMHgzMjk2LCAweDlCRkQsIDB4MTU2QywgMHg5QzA1LCAweDMyOTQsIDB4OUMwNiwgMHgzMjlBLAorICAgIDB4OUMwNywgMHgzMjk4LCAweDlDMDgsIDB4MzI5MiwgMHg5QzA5LCAweDMyOUQsIDB4OUMwQiwgMHgzMjkxLAorICAgIDB4OUMwRCwgMHgxNjYwLCAweDlDMEUsIDB4MzI5OSwgMHg5QzEyLCAweDMyOTUsIDB4OUMxMywgMHgxNjVGLAorICAgIDB4OUMxNCwgMHgzMjlDLCAweDlDMTcsIDB4MzI5QiwgMHg5QzFDLCAweDMzNEMsIDB4OUMxRCwgMHgzMzRCLAorICAgIDB4OUMyMSwgMHgzMzUyLCAweDlDMjMsIDB4MzM0RSwgMHg5QzI0LCAweDMzNTEsIDB4OUMyNSwgMHgxNkIwLAorICAgIDB4OUMyOCwgMHgzMzRGLCAweDlDMjksIDB4MzM1MCwgMHg5QzJCLCAweDMzNEEsIDB4OUMyQywgMHgzMzRELAorICAgIDB4OUMyRCwgMHgxNkFGLCAweDlDMzEsIDB4MTZFRCwgMHg5QzMyLCAweDMzRjIsIDB4OUMzMywgMHgzM0VELAorICAgIDB4OUMzNCwgMHgzM0YxLCAweDlDMzYsIDB4MzNGNCwgMHg5QzM3LCAweDMzRjAsIDB4OUMzOSwgMHgzM0VDLAorICAgIDB4OUMzQiwgMHgxNkVGLCAweDlDM0MsIDB4MzNFRiwgMHg5QzNELCAweDMzRjMsIDB4OUMzRSwgMHgxNkVFLAorICAgIDB4OUMzRiwgMHgzM0VBLCAweDlDNDAsIDB4MzI5NywgMHg5QzQxLCAweDMzRUUsIDB4OUM0NCwgMHgzM0VCLAorICAgIDB4OUM0NiwgMHgzM0U4LCAweDlDNDgsIDB4MzNFOSwgMHg5QzQ5LCAweDE2RUMsIDB4OUM0QSwgMHgzNDU3LAorICAgIDB4OUM0QiwgMHgzNDU5LCAweDlDNEMsIDB4MzQ1QywgMHg5QzRELCAweDM0NTgsIDB4OUM0RSwgMHgzNDVELAorICAgIDB4OUM1MCwgMHgzNDU2LCAweDlDNTIsIDB4MzQ1NCwgMHg5QzU0LCAweDE3MTksIDB4OUM1NSwgMHgzNDVBLAorICAgIDB4OUM1NiwgMHgxNzFCLCAweDlDNTcsIDB4MTcxQSwgMHg5QzU4LCAweDM0NTUsIDB4OUM1OSwgMHgzNDVCLAorICAgIDB4OUM1RSwgMHgzNEI1LCAweDlDNUYsIDB4MTczQSwgMHg5QzYwLCAweDM0QjYsIDB4OUM2MiwgMHgzNEI0LAorICAgIDB4OUM2MywgMHgzNEIxLCAweDlDNjYsIDB4MzRCMywgMHg5QzY3LCAweDM0QjIsIDB4OUM2OCwgMHgzNEY0LAorICAgIDB4OUM2RCwgMHgzNEY2LCAweDlDNkUsIDB4MzRGNSwgMHg5QzcxLCAweDM1MTQsIDB4OUM3MywgMHgzNTEzLAorICAgIDB4OUM3NCwgMHgzNTEyLCAweDlDNzUsIDB4MzUxNSwgMHg5Qzc3LCAweDE3NjAsIDB4OUM3OCwgMHgxNzYxLAorICAgIDB4OUM3OSwgMHgzNTQxLCAweDlDN0EsIDB4MzU0NSwgMHg5Q0U1LCAweDBCRTIsIDB4OUNFNiwgMHgyMzVGLAorICAgIDB4OUNFNywgMHgyNjEwLCAweDlDRTksIDB4MEY3OSwgMHg5Q0VBLCAweDI2MEUsIDB4OUNFRCwgMHgyNjBGLAorICAgIDB4OUNGMSwgMHgyODc5LCAweDlDRjIsIDB4Mjg3QSwgMHg5Q0YzLCAweDEwRkUsIDB4OUNGNCwgMHgxMEZDLAorICAgIDB4OUNGNSwgMHgyODdCLCAweDlDRjYsIDB4MTBGRCwgMHg5Q0Y3LCAweDJBRjQsIDB4OUNGOSwgMHgyQUY3LAorICAgIDB4OUNGQSwgMHgyQUYxLCAweDlDRkIsIDB4MkFGOCwgMHg5Q0ZDLCAweDJBRjAsIDB4OUNGRCwgMHgyQUYyLAorICAgIDB4OUNGRiwgMHgyQUYzLCAweDlEMDAsIDB4MkFGNiwgMHg5RDAzLCAweDEyODQsIDB4OUQwNCwgMHgyQUZCLAorICAgIDB4OUQwNSwgMHgyQUZBLCAweDlEMDYsIDB4MTI4MiwgMHg5RDA3LCAweDJBRjUsIDB4OUQwOCwgMHgyQUY5LAorICAgIDB4OUQwOSwgMHgxMjgzLCAweDlEMTAsIDB4MkQyRCwgMHg5RDEyLCAweDEzQUUsIDB4OUQxNCwgMHgyRDI4LAorICAgIDB4OUQxNSwgMHgxM0FBLCAweDlEMTcsIDB4MkQyNSwgMHg5RDE4LCAweDJEMkIsIDB4OUQxOSwgMHgyRDJFLAorICAgIDB4OUQxQiwgMHgxM0FGLCAweDlEMUQsIDB4MkQyQSwgMHg5RDFFLCAweDJEMjcsIDB4OUQxRiwgMHgyRDJGLAorICAgIDB4OUQyMCwgMHgyRDI2LCAweDlEMjIsIDB4MkQyQywgMHg5RDIzLCAweDEzQUIsIDB4OUQyNSwgMHgyRDI0LAorICAgIDB4OUQyNiwgMHgxM0FDLCAweDlEMjgsIDB4MTNBRCwgMHg5RDI5LCAweDJEMjksIDB4OUQyRCwgMHgyRjAwLAorICAgIDB4OUQyRSwgMHgyRUYzLCAweDlEMkYsIDB4MkVGNCwgMHg5RDMwLCAweDJFRjcsIDB4OUQzMSwgMHgyRUY1LAorICAgIDB4OUQzMywgMHgyRUVGLCAweDlEMzYsIDB4MkVGMiwgMHg5RDM3LCAweDJFRkMsIDB4OUQzOCwgMHgyRUY2LAorICAgIDB4OUQzQiwgMHgxNEJGLCAweDlEM0QsIDB4MkVGRSwgMHg5RDNFLCAweDJFRkIsIDB4OUQzRiwgMHgxNEMwLAorICAgIDB4OUQ0MCwgMHgyRUZELCAweDlENDEsIDB4MkVGMCwgMHg5RDQyLCAweDJFRjksIDB4OUQ0MywgMHgyRUZBLAorICAgIDB4OUQ0NSwgMHgyRUY4LCAweDlENEEsIDB4MzA2MSwgMHg5RDRCLCAweDMwNjMsIDB4OUQ0QywgMHgzMDY2LAorICAgIDB4OUQ0RiwgMHgzMDYwLCAweDlENTEsIDB4MTU2RiwgMHg5RDUyLCAweDMwNjgsIDB4OUQ1MywgMHgzMDVGLAorICAgIDB4OUQ1NCwgMHgzMDY5LCAweDlENTYsIDB4MzA2NSwgMHg5RDU3LCAweDMwNjcsIDB4OUQ1OCwgMHgzMDZCLAorICAgIDB4OUQ1OSwgMHgzMDY0LCAweDlENUEsIDB4MzA2QywgMHg5RDVCLCAweDMwNjIsIDB4OUQ1QywgMHgzMDVFLAorICAgIDB4OUQ1RCwgMHgxNTcwLCAweDlENUYsIDB4MzA2QSwgMHg5RDYwLCAweDE1NzEsIDB4OUQ2MSwgMHgxNjAxLAorICAgIDB4OUQ2NywgMHgyRUYxLCAweDlENjgsIDB4MzFCQiwgMHg5RDY5LCAweDMxQjIsIDB4OUQ2QSwgMHgxNjAzLAorICAgIDB4OUQ2QiwgMHgzMUFFLCAweDlENkMsIDB4MTYwNCwgMHg5RDZGLCAweDMxQjcsIDB4OUQ3MCwgMHgzMUIxLAorICAgIDB4OUQ3MSwgMHgzMUE3LCAweDlENzIsIDB4MTYwMiwgMHg5RDczLCAweDMxQjQsIDB4OUQ3NCwgMHgzMUFGLAorICAgIDB4OUQ3NSwgMHgzMUIwLCAweDlENzcsIDB4MzFBMiwgMHg5RDc4LCAweDMxQTksIDB4OUQ3OSwgMHgzMUI4LAorICAgIDB4OUQ3QiwgMHgzMUI1LCAweDlEN0QsIDB4MzFBRCwgMHg5RDdGLCAweDMxQjksIDB4OUQ4MCwgMHgzMUE4LAorICAgIDB4OUQ4MSwgMHgzMUEzLCAweDlEODIsIDB4MzFCNiwgMHg5RDg0LCAweDMxQTUsIDB4OUQ4NSwgMHgzMUIzLAorICAgIDB4OUQ4NiwgMHgzMUFBLCAweDlEODcsIDB4MzFCQSwgMHg5RDg4LCAweDMxQTYsIDB4OUQ4OSwgMHgxNjAwLAorICAgIDB4OUQ4QSwgMHgzMUE0LCAweDlEOEIsIDB4MzFBQiwgMHg5RDhDLCAweDMxQUMsIDB4OUQ5MCwgMHgzMkE0LAorICAgIDB4OUQ5MiwgMHgzMkEyLCAweDlEOTQsIDB4MzJBNywgMHg5RDk2LCAweDMyQjMsIDB4OUQ5NywgMHgzMkFBLAorICAgIDB4OUQ5OCwgMHgzMkEzLCAweDlEOTksIDB4MzI5RiwgMHg5RDlBLCAweDMyQUMsIDB4OUQ5QiwgMHgzMkE1LAorICAgIDB4OUQ5QywgMHgzMkE4LCAweDlEOUQsIDB4MzJBMSwgMHg5RDlFLCAweDMyQUYsIDB4OUQ5RiwgMHgzMjlFLAorICAgIDB4OURBMCwgMHgzMkE2LCAweDlEQTEsIDB4MzJBQiwgMHg5REEyLCAweDMyQUQsIDB4OURBMywgMHgzMkIwLAorICAgIDB4OURBNCwgMHgzMkEwLCAweDlEQTYsIDB4MzJCNCwgMHg5REE3LCAweDMyQjUsIDB4OURBOCwgMHgzMkFFLAorICAgIDB4OURBOSwgMHgzMkIyLCAweDlEQUEsIDB4MzJBOSwgMHg5REFDLCAweDMzNjIsIDB4OURBRCwgMHgzMzY1LAorICAgIDB4OURBRiwgMHgxNkIxLCAweDlEQjEsIDB4MzM2NCwgMHg5REIyLCAweDMzNjksIDB4OURCMywgMHgzMzY3LAorICAgIDB4OURCNCwgMHgxNkIyLCAweDlEQjUsIDB4MzM1RSwgMHg5REI2LCAweDMzNTQsIDB4OURCNywgMHgzMzUzLAorICAgIDB4OURCOCwgMHgxNkI0LCAweDlEQjksIDB4MzM2MCwgMHg5REJBLCAweDMzNjEsIDB4OURCQiwgMHgzMzVELAorICAgIDB4OURCQywgMHgzMzU1LCAweDlEQkUsIDB4MzM1QSwgMHg5REJGLCAweDMyQjEsIDB4OURDMSwgMHgzMzU2LAorICAgIDB4OURDMiwgMHgxNkIzLCAweDlEQzMsIDB4MzM1QywgMHg5REM1LCAweDMzNUIsIDB4OURDNywgMHgzMzU3LAorICAgIDB4OURDOCwgMHgzMzYzLCAweDlEQ0EsIDB4MzM1OCwgMHg5RENCLCAweDMzRjksIDB4OURDQywgMHgzMzY2LAorICAgIDB4OURDRCwgMHgzMzY4LCAweDlEQ0UsIDB4MzM1RiwgMHg5RENGLCAweDMzNTksIDB4OUREMCwgMHgzM0ZBLAorICAgIDB4OUREMSwgMHgzM0ZDLCAweDlERDIsIDB4MzNGNiwgMHg5REQzLCAweDE2RjAsIDB4OURENSwgMHgzNDAzLAorICAgIDB4OURENiwgMHgzNDAxLCAweDlERDcsIDB4MTZGMSwgMHg5REQ4LCAweDM0MDAsIDB4OUREOSwgMHgzM0ZGLAorICAgIDB4OUREQSwgMHgzM0Y4LCAweDlEREIsIDB4MzNGNSwgMHg5RERDLCAweDMzRkIsIDB4OURERCwgMHgzNDA0LAorICAgIDB4OURERSwgMHgzM0Y3LCAweDlEREYsIDB4MzNGRCwgMHg5REUxLCAweDM0NjYsIDB4OURFMiwgMHgzNDZCLAorICAgIDB4OURFMywgMHgzNDYxLCAweDlERTQsIDB4MzQ2NCwgMHg5REU1LCAweDE3MUMsIDB4OURFNiwgMHgzNDY4LAorICAgIDB4OURFOCwgMHgzNDZGLCAweDlERTksIDB4MzNGRSwgMHg5REVCLCAweDM0NjIsIDB4OURFQywgMHgzNDZDLAorICAgIDB4OURFRCwgMHgzNDcwLCAweDlERUUsIDB4MzQ2NywgMHg5REVGLCAweDM0NjAsIDB4OURGMCwgMHgzNDZBLAorICAgIDB4OURGMiwgMHgzNDY5LCAweDlERjMsIDB4MzQ2RSwgMHg5REY0LCAweDM0NkQsIDB4OURGNSwgMHgzNDAyLAorICAgIDB4OURGNiwgMHgzNDY1LCAweDlERjcsIDB4MzQ1RiwgMHg5REY4LCAweDM0NjMsIDB4OURGOSwgMHgxNzNCLAorICAgIDB4OURGQSwgMHgxNzNDLCAweDlERkIsIDB4MzQ1RSwgMHg5REZELCAweDM0QzEsIDB4OURGRSwgMHgzNEI4LAorICAgIDB4OURGRiwgMHgzNEMwLCAweDlFMDAsIDB4MzRCRCwgMHg5RTAxLCAweDM0QkUsIDB4OUUwMiwgMHgzNEI3LAorICAgIDB4OUUwMywgMHgzNEJBLCAweDlFMDQsIDB4MzRDMiwgMHg5RTA1LCAweDM0QkMsIDB4OUUwNiwgMHgzNEJCLAorICAgIDB4OUUwNywgMHgzNEI5LCAweDlFMDksIDB4MzRCRiwgMHg5RTBCLCAweDM0RjcsIDB4OUUwRCwgMHgzNEY4LAorICAgIDB4OUUwRiwgMHgzNEZBLCAweDlFMTAsIDB4MzRGOSwgMHg5RTExLCAweDM0RkMsIDB4OUUxMiwgMHgzNEZCLAorICAgIDB4OUUxMywgMHgzNTE3LCAweDlFMTQsIDB4MzUxNiwgMHg5RTE1LCAweDM1MzAsIDB4OUUxNywgMHgzNTMxLAorICAgIDB4OUUxOSwgMHgzNTNELCAweDlFMUEsIDB4MTc2NSwgMHg5RTFCLCAweDE3NjksIDB4OUUxRCwgMHgzNTQ2LAorICAgIDB4OUUxRSwgMHgxNzZBLCAweDlFNzUsIDB4MEJFMywgMHg5RTc5LCAweDE2NjEsIDB4OUU3QSwgMHgzMzZBLAorICAgIDB4OUU3QywgMHgxNzNELCAweDlFN0QsIDB4MTczRSwgMHg5RTdGLCAweDBCRTQsIDB4OUU4MCwgMHgyNjExLAorICAgIDB4OUU4MiwgMHgwRjdBLCAweDlFODMsIDB4MkFGQywgMHg5RTg2LCAweDJEMzEsIDB4OUU4NywgMHgyRDMyLAorICAgIDB4OUU4OCwgMHgyRDMwLCAweDlFODksIDB4MkYwMiwgMHg5RThBLCAweDJGMDEsIDB4OUU4QiwgMHgxNEMxLAorICAgIDB4OUU4QywgMHgzMDZFLCAweDlFOEQsIDB4MkYwMywgMHg5RThFLCAweDMwNkQsIDB4OUU5MSwgMHgzMUJELAorICAgIDB4OUU5MiwgMHgxNjA1LCAweDlFOTMsIDB4MTYwNywgMHg5RTk0LCAweDMxQkMsIDB4OUU5NywgMHgxNjA2LAorICAgIDB4OUU5OSwgMHgzMkI2LCAweDlFOUEsIDB4MzJCOCwgMHg5RTlCLCAweDMyQjcsIDB4OUU5QywgMHgzMzZCLAorICAgIDB4OUU5RCwgMHgxNkI1LCAweDlFOUYsIDB4MTcxRCwgMHg5RUEwLCAweDM0QzMsIDB4OUVBMSwgMHgzNEZELAorICAgIDB4OUVBNCwgMHgzNTRBLCAweDlFQTUsIDB4MEJFNSwgMHg5RUE3LCAweDI4N0MsIDB4OUVBOSwgMHgxMjg1LAorICAgIDB4OUVBRCwgMHgyRDM0LCAweDlFQUUsIDB4MkQzMywgMHg5RUIwLCAweDJGMDQsIDB4OUVCNCwgMHgxNjA4LAorICAgIDB4OUVCNSwgMHgxNjYyLCAweDlFQjYsIDB4MzQwNSwgMHg5RUI3LCAweDM1NDIsIDB4OUVCQiwgMHgwQkU2LAorICAgIDB4OUVCQywgMHgxMEZGLCAweDlFQkUsIDB4MTI4NiwgMHg5RUMwLCAweDMxQkUsIDB4OUVDMiwgMHgzNDcxLAorICAgIDB4OUVDMywgMHgwREJCLCAweDlFQzgsIDB4MkYwNSwgMHg5RUNDLCAweDE3NTEsIDB4OUVDRCwgMHgwREJDLAorICAgIDB4OUVDRSwgMHgxMjg3LCAweDlFQ0YsIDB4MTRDMiwgMHg5RUQwLCAweDM0NzIsIDB4OUVEMSwgMHgwREJELAorICAgIDB4OUVEMywgMHgyQUZELCAweDlFRDQsIDB4MTNCMSwgMHg5RUQ1LCAweDJEMzUsIDB4OUVENiwgMHgyRDM2LAorICAgIDB4OUVEOCwgMHgxM0IwLCAweDlFREEsIDB4MkYwNiwgMHg5RURCLCAweDE0QzYsIDB4OUVEQywgMHgxNEM0LAorICAgIDB4OUVERCwgMHgxNEM1LCAweDlFREUsIDB4MTRDMywgMHg5RURGLCAweDMwNkYsIDB4OUVFMCwgMHgxNTcyLAorICAgIDB4OUVFNCwgMHgzMkJBLCAweDlFRTUsIDB4MzJCOSwgMHg5RUU2LCAweDMyQkMsIDB4OUVFNywgMHgzMkJCLAorICAgIDB4OUVFOCwgMHgxNjYzLCAweDlFRUIsIDB4MzM2QywgMHg5RUVELCAweDMzNkUsIDB4OUVFRSwgMHgzMzZELAorICAgIDB4OUVFRiwgMHgxNkI2LCAweDlFRjAsIDB4MzQwNiwgMHg5RUYyLCAweDM0NzMsIDB4OUVGMywgMHgzNDc0LAorICAgIDB4OUVGNCwgMHgxNzFFLCAweDlFRjUsIDB4MzRGRSwgMHg5RUY2LCAweDM1MTgsIDB4OUVGNywgMHgxNzYyLAorICAgIDB4OUVGOSwgMHgyMzYwLCAweDlFRkEsIDB4MkQzNywgMHg5RUZCLCAweDJGMDcsIDB4OUVGQywgMHgzMUJGLAorICAgIDB4OUVGRCwgMHgyNjEyLCAweDlFRkYsIDB4MkYwOCwgMHg5RjAwLCAweDMwNzEsIDB4OUYwMSwgMHgzMDcwLAorICAgIDB4OUYwNiwgMHgzNDc1LCAweDlGMDcsIDB4MTczRiwgMHg5RjA5LCAweDM0RkYsIDB4OUYwQSwgMHgzNTE5LAorICAgIDB4OUYwRSwgMHgwRjdCLCAweDlGMEYsIDB4MkFGRSwgMHg5RjEwLCAweDJBRkYsIDB4OUYxMiwgMHgyRDM4LAorICAgIDB4OUYxMywgMHgwRjdDLCAweDlGMTUsIDB4MTU3MywgMHg5RjE2LCAweDMwNzIsIDB4OUYxOCwgMHgzMzcwLAorICAgIDB4OUYxOSwgMHgxNkI3LCAweDlGMUEsIDB4MzM3MSwgMHg5RjFCLCAweDMzNkYsIDB4OUYxQywgMHgzNDc2LAorICAgIDB4OUYxRSwgMHgzNEM0LCAweDlGMjAsIDB4MEY3RCwgMHg5RjIyLCAweDJGMEIsIDB4OUYyMywgMHgyRjBBLAorICAgIDB4OUYyNCwgMHgyRjA5LCAweDlGMjUsIDB4MzA3MywgMHg5RjI4LCAweDMwNzcsIDB4OUYyOSwgMHgzMDc2LAorICAgIDB4OUYyQSwgMHgzMDc1LCAweDlGMkIsIDB4MzA3NCwgMHg5RjJDLCAweDE1NzQsIDB4OUYyRCwgMHgzMUMwLAorICAgIDB4OUYyRSwgMHgzMkJFLCAweDlGMkYsIDB4MTY2NCwgMHg5RjMwLCAweDMyQkQsIDB4OUYzMSwgMHgzMzcyLAorICAgIDB4OUYzMiwgMHgzNDA5LCAweDlGMzMsIDB4MzQwOCwgMHg5RjM0LCAweDE2RjIsIDB4OUYzNSwgMHgzNDA3LAorICAgIDB4OUYzNiwgMHgzNDc5LCAweDlGMzcsIDB4MzQ3OCwgMHg5RjM4LCAweDM0NzcsIDB4OUYzQiwgMHgxMTAwLAorICAgIDB4OUYzRCwgMHgyRDM5LCAweDlGM0UsIDB4MTRDNywgMHg5RjQwLCAweDMxQzEsIDB4OUY0MSwgMHgzMUMyLAorICAgIDB4OUY0MiwgMHgzNDBBLCAweDlGNDMsIDB4MzQ3QSwgMHg5RjQ2LCAweDM0QzUsIDB4OUY0NywgMHgzNTAwLAorICAgIDB4OUY0OCwgMHgzNTMyLCAweDlGNDksIDB4MzU0QywgMHg5RjRBLCAweDExMDEsIDB4OUY0QiwgMHgxNEM4LAorICAgIDB4OUY0QywgMHgzMDc4LCAweDlGNEQsIDB4MzFDMywgMHg5RjRFLCAweDMzNzMsIDB4OUY0RiwgMHgzNDdCLAorICAgIDB4OUY1MiwgMHgxMjg5LCAweDlGNTQsIDB4MkYwQywgMHg5RjU1LCAweDMwNzksIDB4OUY1NiwgMHgzMUM0LAorICAgIDB4OUY1NywgMHgzMUM1LCAweDlGNTgsIDB4MzFDNiwgMHg5RjU5LCAweDMyQzMsIDB4OUY1QiwgMHgzMkJGLAorICAgIDB4OUY1QywgMHgxNkI4LCAweDlGNUQsIDB4MzJDMiwgMHg5RjVFLCAweDMyQzEsIDB4OUY1RiwgMHgxNjY1LAorICAgIDB4OUY2MCwgMHgzMkMwLCAweDlGNjEsIDB4MTY2NywgMHg5RjYzLCAweDE2NjYsIDB4OUY2NCwgMHgzMzc1LAorICAgIDB4OUY2NSwgMHgzMzc0LCAweDlGNjYsIDB4MTZCOSwgMHg5RjY3LCAweDE2QkEsIDB4OUY2QSwgMHgxNkY0LAorICAgIDB4OUY2QiwgMHgzNDBCLCAweDlGNkMsIDB4MTZGMywgMHg5RjZFLCAweDM0N0UsIDB4OUY2RiwgMHgzNDdGLAorICAgIDB4OUY3MCwgMHgzNDdELCAweDlGNzEsIDB4MzQ3QywgMHg5RjcyLCAweDE3NDEsIDB4OUY3NCwgMHgzNEM2LAorICAgIDB4OUY3NSwgMHgzNEM3LCAweDlGNzYsIDB4MzRDOCwgMHg5Rjc3LCAweDE3NDAsIDB4OUY3OCwgMHgzNTAxLAorICAgIDB4OUY3OSwgMHgzNTA0LCAweDlGN0EsIDB4MzUwMywgMHg5RjdCLCAweDM1MDIsIDB4OUY3RSwgMHgzNTRCLAorICAgIDB4OUY4RCwgMHgxM0IyLCAweDlGOTAsIDB4MTU3QywgMHg5RjkxLCAweDMyQzQsIDB4OUY5MiwgMHgzMzc2LAorICAgIDB4OUY5NCwgMHgxNkY1LCAweDlGOTUsIDB4MzQwQywgMHg5Rjk4LCAweDM1NEQsIDB4OUY5QywgMHgxM0IzLAorICAgIDB4OUZBMCwgMHgyRjBELCAweDlGQTIsIDB4MzQwRCwgMHg5RkE0LCAweDM1MUEsIDB4RTAxRiwgMHgwODNBLAorICAgIDB4RTAyNiwgMHgwOUZELCAweEUwNUIsIDB4MDMwRCwgMHhFMDYzLCAweDAxNkIsIDB4RTA3MywgMHgwODYwLAorICAgIDB4RTBGMywgMHgwQzIzLCAweEUxMkUsIDB4MTdFNCwgMHhFMTQ5LCAweDIxMkYsIDB4RTE5MSwgMHgxMTVGLAorICAgIDB4RTFCQSwgMHgwQzc5LCAweEUxQzksIDB4MDRDMywgMHhFMjJDLCAweDE4QkQsIDB4RTIyRCwgMHgwQ0JELAorICAgIDB4RTIzMCwgMHgwQ0E1LCAweEUyNjYsIDB4MENDRSwgMHhFMkEzLCAweDBFODQsIDB4RTJCQywgMHgwMTIwLAorICAgIDB4RTJFRiwgMHgxQkE4LCAweEUzM0EsIDB4MTA1NSwgMHhFMzQwLCAweDJERTgsIDB4RTM0RiwgMHgwMTIxLAorICAgIDB4RTM1QSwgMHgxMDZCLCAweEUzNjMsIDB4MTMyNiwgMHhFMzdDLCAweDA2NkIsIDB4RTM3RiwgMHgxMzJFLAorICAgIDB4RTNDNSwgMHgwRDM1LCAweEUzRDcsIDB4MjdDMiwgMHhFM0RDLCAweDIyQUQsIDB4RTQxNywgMHgxMzRDLAorICAgIDB4RTQ0QSwgMHgwOUNFLCAweEU0NzgsIDB4MEJDNywgMHhFNDg1LCAweDM2RTksIDB4RTRDNSwgMHgxMzkxLAorICAgIDB4RTREQSwgMHgxNkE0LCAweEU1NDUsIDB4MzA3MiwgMHhFNUQyLCAweDAxMTksIDB4RTVEMywgMHgwMTFBLAorICAgIDB4RTVENCwgMHgwMTFDLCAweEU1RDUsIDB4MDExQiwgMHhFNUY0LCAweDI5N0MsIDB4RTZDNiwgMHgxRDA2LAorICAgIDB4RTcyNywgMHgyOUExLCAweEU3RDMsIDB4MTgxQiwgMHhFODkzLCAweDJCMjQsIDB4RUI0MCwgMHgyRjUwLAorICAgIDB4RUI0MiwgMHgxNzI1LCAweEVCNDUsIDB4MzJFRCwgMHhFQjZFLCAweDJBRDksIDB4RUI4NiwgMHgxQzE0LAorICAgIDB4RUI5RSwgMHgxMkU5LCAweEVCQTksIDB4MkNBRSwgMHhFQkJBLCAweDFBNjQsIDB4RUJDOSwgMHgxNDA0LAorICAgIDB4RUJDRiwgMHgyMzI0LCAweEVCRDIsIDB4MzQ2QSwgMHhFQkRFLCAweDIyOTEsIDB4RUMwMSwgMHgxNzg3LAorICAgIDB4RUMwMiwgMHgwOTVGLCAweEVDMTUsIDB4MUU5OSwgMHhFQzVCLCAweDI1QzEsIDB4RUM1RSwgMHgwRDBDLAorICAgIDB4RUNBNiwgMHgwNUU2LCAweEVEMjgsIDB4MDcyOCwgMHhFRDZFLCAweDI0QjYsIDB4RUQ3QywgMHgxODA2LAorICAgIDB4RUQ5RSwgMHgzNTExLCAweEVERTcsIDB4MEY4MiwgMHhFRTUyLCAweDA1RjIsIDB4RUU5OCwgMHgyNDdELAorICAgIDB4RjZCMSwgMHgwMUZBLCAweEY2QjIsIDB4MDFGQiwgMHhGNkIzLCAweDAxRkMsIDB4RjZCNCwgMHgwMUZELAorICAgIDB4RjZCNSwgMHgwMUZFLCAweEY2QjYsIDB4MDFGRiwgMHhGNkI3LCAweDAyMDAsIDB4RjZCOCwgMHgwMjAxLAorICAgIDB4RjZCOSwgMHgwMjAyLCAweEY2QkEsIDB4MDIwMywgMHhGNkJCLCAweDAyMDQsIDB4RjZCQywgMHgwMjA1LAorICAgIDB4RjZCRCwgMHgwMjA2LCAweEY2QkUsIDB4MDIwNywgMHhGNkJGLCAweDAyMDgsIDB4RjZDMCwgMHgwMjA5LAorICAgIDB4RjZDMSwgMHgwMjBBLCAweEY2QzIsIDB4MDIwQiwgMHhGNkMzLCAweDAyMEMsIDB4RjZDNCwgMHgwMjBELAorICAgIDB4RjZDNSwgMHgwMjBFLCAweEY2QzYsIDB4MDIwRiwgMHhGNkM3LCAweDAyMTAsIDB4RjZDOCwgMHgwMjExLAorICAgIDB4RjZDOSwgMHgwMjEyLCAweEY2Q0EsIDB4MDIxMywgMHhGNkNCLCAweDAyMTQsIDB4RjZDQywgMHgwMjE1LAorICAgIDB4RjZDRCwgMHgwMjE2LCAweEY2Q0UsIDB4MDIxNywgMHhGNkNGLCAweDAyMTksIDB4RjZEMCwgMHgwMjFBLAorICAgIDB4RjZEMSwgMHgwMjFCLCAweEY2RDIsIDB4MDIxQywgMHhGNkQzLCAweDAyMUQsIDB4RjZENCwgMHgwMjFFLAorICAgIDB4RjZENSwgMHgwMjFGLCAweEY2RDYsIDB4MDIyMCwgMHhGNkQ3LCAweDAyMjEsIDB4RjZEOCwgMHgwMjIyLAorICAgIDB4RjZEOSwgMHgwMjIzLCAweEY2REEsIDB4MDIyNCwgMHhGNkRCLCAweDAyMjUsIDB4RjZEQywgMHgwMjI2LAorICAgIDB4RjZERCwgMHgwMjI3LCAweEY2REUsIDB4MDIyOCwgMHhGNkUwLCAweDAyMkEsIDB4RjZFMSwgMHgwMjJCLAorICAgIDB4RjZFMiwgMHgwMjJDLCAweEY2RTQsIDB4MDIyRSwgMHhGNkU2LCAweDAyMzAsIDB4RjZFOCwgMHgzNUIzLAorICAgIDB4RjZFOSwgMHgzNUI0LCAweEY2RUEsIDB4MzVCNSwgMHhGNkVCLCAweDM1QjYsIDB4RjZFQywgMHgzNUI3LAorICAgIDB4RjZFRCwgMHgzNUI4LCAweEY2RjAsIDB4MzVCQSwgMHhGNkYxLCAweDM1QkIsIDB4RjZGMiwgMHgzNUJDLAorICAgIDB4RjZGMywgMHgzNUJELCAweEY2RjQsIDB4MzVCRSwgMHhGNkY1LCAweDM1QkYsIDB4RjZGNiwgMHgzNUMwLAorICAgIDB4RjZGNywgMHgzNUMxLCAweEY2RjgsIDB4MzVDMiwgMHhGNkY5LCAweDM1QzMsIDB4RjZGQSwgMHgzNUM0LAorICAgIDB4RjZGQiwgMHgzNUM1LCAweEY2RkMsIDB4MzVDNiwgMHhGNkZELCAweDM1QzcsIDB4RjZGRSwgMHgzNUM4LAorICAgIDB4RjZGRiwgMHgzNUM5LCAweEY3MDAsIDB4MzVDQSwgMHhGNzAxLCAweDM1Q0IsIDB4RjcwMiwgMHgzNUNDLAorICAgIDB4RjcwMywgMHgzNUNELCAweEY3MDQsIDB4MzVDRSwgMHhGNzA1LCAweDM1Q0YsIDB4RjcwNiwgMHgzNUQwLAorICAgIDB4RjcwNywgMHgzNUQxLCAweEY3MDgsIDB4MzVEMiwgMHhGNzA5LCAweDM1RDMsIDB4RjcwQSwgMHgzNUQ0LAorICAgIDB4RjcwQiwgMHgzNUQ1LCAweEY3MEMsIDB4MzVENiwgMHhGNzBELCAweDM1RDcsIDB4RjcwRSwgMHgzNUQ4LAorICAgIDB4RjcwRiwgMHgzNUQ5LCAweEY3MTAsIDB4MzVEQSwgMHhGNzExLCAweDM1REIsIDB4RjcxMiwgMHgzNURDLAorICAgIDB4RjcxMywgMHgzNURELCAweEY3MTQsIDB4MzVERSwgMHhGNzE1LCAweDM1REYsIDB4RjcxNiwgMHgzNUUwLAorICAgIDB4RjcxNywgMHgzNUUxLCAweEY3MTgsIDB4MzVFMiwgMHhGNzE5LCAweDM1RTMsIDB4RjcxQSwgMHgzNUU0LAorICAgIDB4RjcxQiwgMHgzNUU1LCAweEY3MUMsIDB4MzVFNiwgMHhGNzFELCAweDM1RTcsIDB4RjcxRSwgMHgzNUU4LAorICAgIDB4RjcxRiwgMHgzNUU5LCAweEY3MjAsIDB4MzVFQSwgMHhGNzIxLCAweDM1RUIsIDB4RjcyMiwgMHgzNUVDLAorICAgIDB4RjcyMywgMHgzNUVELCAweEY3MjQsIDB4MzVFRSwgMHhGNzI1LCAweDM1RUYsIDB4RjcyNiwgMHgzNUYwLAorICAgIDB4RjcyNywgMHgzNUYxLCAweEY3MjgsIDB4MzVGMiwgMHhGNzI5LCAweDM1RjMsIDB4RjcyQSwgMHgzNUY0LAorICAgIDB4RjcyQiwgMHgzNUY1LCAweEY3MkMsIDB4MzVGNiwgMHhGNzJELCAweDM1RjcsIDB4RjcyRSwgMHgzNUY4LAorICAgIDB4RjcyRiwgMHgzNUY5LCAweEY3MzAsIDB4MzVGQSwgMHhGNzMxLCAweDM1RkIsIDB4RjczMiwgMHgzNUZDLAorICAgIDB4RjczMywgMHgzNUZELCAweEY3MzQsIDB4MzVGRSwgMHhGNzM1LCAweDM1RkYsIDB4RjczNiwgMHgzNjAwLAorICAgIDB4RjczNywgMHgzNjAxLCAweEY3MzgsIDB4MzYwMiwgMHhGNzM5LCAweDM2MDMsIDB4RjczQSwgMHgzNjA0LAorICAgIDB4RjczQiwgMHgzNjA1LCAweEY3M0MsIDB4MzYwNiwgMHhGNzNELCAweDM2MDcsIDB4RjczRSwgMHgzNjA4LAorICAgIDB4RjczRiwgMHgzNjA5LCAweEY3NDAsIDB4MzYwQSwgMHhGNzQxLCAweDM2MEIsIDB4Rjc0MiwgMHgzNjBDLAorICAgIDB4Rjc0MywgMHgzNjBELCAweEY3NDQsIDB4MzYwRSwgMHhGNzQ1LCAweDM2MEYsIDB4Rjc0NiwgMHgzNjEwLAorICAgIDB4Rjc0NywgMHgzNjExLCAweEY3NDgsIDB4MzYxMiwgMHhGNzQ5LCAweDM2MTMsIDB4Rjc0QSwgMHgzNjE0LAorICAgIDB4Rjc0QiwgMHgzNjE1LCAweEY3NEMsIDB4MzYxNiwgMHhGNzRELCAweDM2MTcsIDB4Rjc0RSwgMHgzNjE4LAorICAgIDB4Rjc0RiwgMHgzNjE5LCAweEY3NTAsIDB4MzYxQSwgMHhGNzUxLCAweDM2MUIsIDB4Rjc1MiwgMHgzNjFDLAorICAgIDB4Rjc1MywgMHgzNjFELCAweEY3NTQsIDB4MzYxRSwgMHhGNzU1LCAweDM2MUYsIDB4Rjc1NiwgMHgzNjIwLAorICAgIDB4Rjc1NywgMHgzNjIxLCAweEY3NTgsIDB4MzYyMiwgMHhGNzU5LCAweDM2MjMsIDB4Rjc1QSwgMHgzNjI0LAorICAgIDB4Rjc1QiwgMHgzNjI1LCAweEY3NUMsIDB4MzYyNiwgMHhGNzVELCAweDM2MjcsIDB4Rjc1RSwgMHgzNjI4LAorICAgIDB4Rjc1RiwgMHgzNjI5LCAweEY3NjAsIDB4MzYyQSwgMHhGNzYxLCAweDM2MkIsIDB4Rjc2MiwgMHgzNjJDLAorICAgIDB4Rjc2MywgMHgzNjJELCAweEY3NjQsIDB4MzYyRSwgMHhGNzY1LCAweDM2MkYsIDB4Rjc2NiwgMHgzNjMwLAorICAgIDB4Rjc2NywgMHgzNjMxLCAweEY3NjgsIDB4MzYzMiwgMHhGNzY5LCAweDM2MzMsIDB4Rjc2QSwgMHgzNjM0LAorICAgIDB4Rjc2QiwgMHgzNjM1LCAweEY3NkMsIDB4MzYzNiwgMHhGNzZELCAweDM2MzcsIDB4Rjc2RSwgMHgzNjM4LAorICAgIDB4Rjc2RiwgMHgzNjM5LCAweEY3NzAsIDB4MzYzQSwgMHhGNzcxLCAweDM2M0IsIDB4Rjc3MiwgMHgzNjNDLAorICAgIDB4Rjc3MywgMHgzNjNELCAweEY3NzQsIDB4MzYzRSwgMHhGNzc1LCAweDM2M0YsIDB4Rjc3NiwgMHgzNjQwLAorICAgIDB4Rjc3NywgMHgzNjQxLCAweEY3NzgsIDB4MzY0MiwgMHhGNzc5LCAweDM2NDMsIDB4Rjc3QSwgMHgzNjQ0LAorICAgIDB4Rjc3QiwgMHgzNjQ1LCAweEY3N0MsIDB4MzY0NiwgMHhGNzdELCAweDM2NDcsIDB4Rjc3RSwgMHgzNjQ4LAorICAgIDB4Rjc3RiwgMHgzNjQ5LCAweEY3ODAsIDB4MzY0QSwgMHhGNzgxLCAweDM2NEIsIDB4Rjc4MiwgMHgzNjRDLAorICAgIDB4Rjc4MywgMHgzNjRELCAweEY3ODQsIDB4MzY0RSwgMHhGNzg1LCAweDM2NEYsIDB4Rjc4NiwgMHgzNjUwLAorICAgIDB4Rjc4NywgMHgzNjUxLCAweEY3ODgsIDB4MzY1MiwgMHhGNzg5LCAweDM2NTMsIDB4Rjc4QSwgMHgzNjU0LAorICAgIDB4Rjc4QiwgMHgzNjU1LCAweEY3OEMsIDB4MzY1NiwgMHhGNzhELCAweDM2NTcsIDB4Rjc4RSwgMHgzNjU4LAorICAgIDB4Rjc4RiwgMHgzNjU5LCAweEY3OTAsIDB4MzY1QSwgMHhGNzkxLCAweDM2NUIsIDB4Rjc5MiwgMHgzNjVDLAorICAgIDB4Rjc5MywgMHgzNjVELCAweEY3OTQsIDB4MzY1RSwgMHhGNzk1LCAweDM2NUYsIDB4Rjc5NiwgMHgzNjYwLAorICAgIDB4Rjc5NywgMHgzNjYxLCAweEY3OTgsIDB4MzY2MiwgMHhGNzk5LCAweDM2NjMsIDB4Rjc5QSwgMHgzNjY0LAorICAgIDB4Rjc5QiwgMHgzNjY1LCAweEY3OUMsIDB4MzY2NiwgMHhGNzlELCAweDM2NjcsIDB4Rjc5RSwgMHgzNjY4LAorICAgIDB4Rjc5RiwgMHgzNjY5LCAweEY3QTAsIDB4MzY2QSwgMHhGN0ExLCAweDM2NkIsIDB4RjdBMiwgMHgzNjZDLAorICAgIDB4RjdBMywgMHgzNjZELCAweEY3QTQsIDB4MzY2RSwgMHhGN0E1LCAweDM2NkYsIDB4RjdBNiwgMHgzNjcwLAorICAgIDB4RjdBNywgMHgzNjcxLCAweEY3QTgsIDB4MzY3MiwgMHhGN0E5LCAweDM2NzMsIDB4RjdBQSwgMHgzNjc0LAorICAgIDB4RjdBQiwgMHgzNjc1LCAweEY3QUMsIDB4MzY3NiwgMHhGN0FELCAweDM2NzcsIDB4RjdBRSwgMHgzNjc4LAorICAgIDB4RjdBRiwgMHgzNjc5LCAweEY3QjAsIDB4MzY3QSwgMHhGN0IxLCAweDM2N0IsIDB4RjdCMiwgMHgzNjdDLAorICAgIDB4RjdCMywgMHgzNjdELCAweEY3QjQsIDB4MzY3RSwgMHhGN0I1LCAweDM2N0YsIDB4RjdCNiwgMHgzNjgwLAorICAgIDB4RjdCNywgMHgzNjgxLCAweEY3QjgsIDB4MzY4MiwgMHhGN0I5LCAweDM2ODMsIDB4RjdCQSwgMHgzNjg0LAorICAgIDB4RjdCQiwgMHgzNjg1LCAweEY3QkMsIDB4MzY4NiwgMHhGN0JELCAweDM2ODcsIDB4RjdCRSwgMHgzNjg4LAorICAgIDB4RjdCRiwgMHgzNjg5LCAweEY3QzAsIDB4MzY4QSwgMHhGN0MxLCAweDM2OEIsIDB4RjdDMiwgMHgzNjhDLAorICAgIDB4RjdDMywgMHgzNjhELCAweEY3QzQsIDB4MzY4RSwgMHhGN0M1LCAweDM2OEYsIDB4RjdDNiwgMHgzNjkwLAorICAgIDB4RjdDNywgMHgzNjkxLCAweEY3QzgsIDB4MzY5MiwgMHhGN0M5LCAweDM2OTMsIDB4RjdDQSwgMHgzNjk0LAorICAgIDB4RjdDQiwgMHgzNjk1LCAweEY3Q0MsIDB4MzY5NiwgMHhGN0NELCAweDM2OTcsIDB4RjdDRSwgMHgzNjk4LAorICAgIDB4RjdDRiwgMHgzNjk5LCAweEY3RDAsIDB4MzY5QSwgMHhGN0QxLCAweDM2OUIsIDB4RjdEMiwgMHgzNjlDLAorICAgIDB4RjdEMywgMHgzNjlELCAweEY3RDQsIDB4MzY5RSwgMHhGN0Q1LCAweDM2OUYsIDB4RjdENiwgMHgzNkEwLAorICAgIDB4RjdENywgMHgzNkExLCAweEY3RDgsIDB4MzZBMiwgMHhGN0Q5LCAweDM2QTMsIDB4RjdEQSwgMHgzNkE0LAorICAgIDB4RjdEQiwgMHgzNkE1LCAweEY3REMsIDB4MzZBNiwgMHhGN0RELCAweDM2QTcsIDB4RjdERSwgMHgzNkE4LAorICAgIDB4RjdERiwgMHgzNkE5LCAweEY3RTAsIDB4MzZBQSwgMHhGN0UxLCAweDM2QUIsIDB4RjdFMiwgMHgzNkFDLAorICAgIDB4RjdFMywgMHgzNkFELCAweEY3RTQsIDB4MzZBRSwgMHhGN0U1LCAweDM2QUYsIDB4RjdFNiwgMHgzNkIwLAorICAgIDB4RjdFNywgMHgzNkIxLCAweEY3RTgsIDB4MzZCMiwgMHhGN0U5LCAweDM2QjMsIDB4RjdFQSwgMHgzNkI0LAorICAgIDB4RjdFQiwgMHgzNkI1LCAweEY3RUMsIDB4MzZCNiwgMHhGN0VELCAweDM2QjcsIDB4RjdFRSwgMHgzNkI4LAorICAgIDB4RjgxNywgMHgzNkUxLCAweEY4MTgsIDB4MzZFMiwgMHhGODE5LCAweDM2RTMsIDB4RjgxQSwgMHgzNkU0LAorICAgIDB4RjgxQiwgMHgzNkU1LCAweEY4MUMsIDB4MzZFNiwgMHhGODFELCAweDM2RTcsIDB4RkEwQywgMHgwMjc0LAorICAgIDB4RkEwRCwgMHgyMzgxLCAweEZFMzAsIDB4MDA2RCwgMHhGRTMxLCAweDAwN0EsIDB4RkUzMywgMHgzNUFGLAorICAgIDB4RkUzNCwgMHgzNUIxLCAweEZFMzUsIDB4MDA4MiwgMHhGRTM2LCAweDAwODMsIDB4RkUzNywgMHgwMDg2LAorICAgIDB4RkUzOCwgMHgwMDg3LCAweEZFMzksIDB4MDA4QSwgMHhGRTNBLCAweDAwOEIsIDB4RkUzQiwgMHgwMDhFLAorICAgIDB4RkUzQywgMHgwMDhGLCAweEZFM0QsIDB4MDA5MiwgMHhGRTNFLCAweDAwOTMsIDB4RkUzRiwgMHgwMDk2LAorICAgIDB4RkU0MCwgMHgwMDk3LCAweEZFNDEsIDB4MDA5QSwgMHhGRTQyLCAweDAwOUIsIDB4RkU0MywgMHgwMDlFLAorICAgIDB4RkU0NCwgMHgwMDlGLCAweEZFNDksIDB4MDBDNywgMHhGRTRBLCAweDAwQzgsIDB4RkU0QiwgMHgwMENCLAorICAgIDB4RkU0QywgMHgwMENDLCAweEZFNEQsIDB4MDBDOSwgMHhGRTRFLCAweDAwQ0EsIDB4RkU0RiwgMHgzNUIyLAorICAgIDB4RkU1MCwgMHgwMDcwLCAweEZFNTEsIDB4MDA3MSwgMHhGRTUyLCAweDAwNzIsIDB4RkU1NCwgMHgwMDc0LAorICAgIDB4RkU1NSwgMHgwMDc1LCAweEZFNTYsIDB4MDA3NiwgMHhGRTU3LCAweDAwNzcsIDB4RkU1OSwgMHgwMEEwLAorICAgIDB4RkU1QSwgMHgwMEExLCAweEZFNUIsIDB4MDBBMiwgMHhGRTVDLCAweDAwQTMsIDB4RkU1RCwgMHgwMEE0LAorICAgIDB4RkU1RSwgMHgwMEE1LCAweEZFNUYsIDB4MDBDRCwgMHhGRTYwLCAweDAwQ0UsIDB4RkU2MSwgMHgwMENGLAorICAgIDB4RkU2MiwgMHgwMERGLCAweEZFNjMsIDB4MDBFMCwgMHhGRTY0LCAweDAwRTEsIDB4RkU2NSwgMHgwMEUyLAorICAgIDB4RkU2NiwgMHgwMEUzLCAweEZFNjgsIDB4MDEwMiwgMHhGRTY5LCAweDAxMEMsIDB4RkU2QSwgMHgwMTBELAorICAgIDB4RkU2QiwgMHgwMTBFLCAweEZGMDEsIDB4MDA2QywgMHhGRjAyLCAweDM2RTQsIDB4RkYwMywgMHgwMEFFLAorICAgIDB4RkYwNCwgMHgwMTAzLCAweEZGMDUsIDB4MDEwOCwgMHhGRjA2LCAweDAwQUYsIDB4RkYwNywgMHgzNkUzLAorICAgIDB4RkYwOCwgMHgwMDgwLCAweEZGMDksIDB4MDA4MSwgMHhGRjBBLCAweDAwQjAsIDB4RkYwQiwgMHgwMEQwLAorICAgIDB4RkYwQywgMHgwMDY0LCAweEZGMEQsIDB4MDBEMSwgMHhGRjBFLCAweDAwNjcsIDB4RkYwRiwgMHgwMTAxLAorICAgIDB4RkYxMCwgMHgwMTRELCAweEZGMTEsIDB4MDE0RSwgMHhGRjEyLCAweDAxNEYsIDB4RkYxMywgMHgwMTUwLAorICAgIDB4RkYxNCwgMHgwMTUxLCAweEZGMTUsIDB4MDE1MiwgMHhGRjE2LCAweDAxNTMsIDB4RkYxNywgMHgwMTU0LAorICAgIDB4RkYxOCwgMHgwMTU1LCAweEZGMTksIDB4MDE1NiwgMHhGRjFBLCAweDAwNkEsIDB4RkYxQiwgMHgwMDY5LAorICAgIDB4RkYxQywgMHgwMEQ2LCAweEZGMUQsIDB4MDBEOCwgMHhGRjFFLCAweDAwRDcsIDB4RkYxRiwgMHgwMDZCLAorICAgIDB4RkYyMCwgMHgwMTA5LCAweEZGMjEsIDB4MDE2RCwgMHhGRjIyLCAweDAxNkUsIDB4RkYyMywgMHgwMTZGLAorICAgIDB4RkYyNCwgMHgwMTcwLCAweEZGMjUsIDB4MDE3MSwgMHhGRjI2LCAweDAxNzIsIDB4RkYyNywgMHgwMTczLAorICAgIDB4RkYyOCwgMHgwMTc0LCAweEZGMjksIDB4MDE3NSwgMHhGRjJBLCAweDAxNzYsIDB4RkYyQiwgMHgwMTc3LAorICAgIDB4RkYyQywgMHgwMTc4LCAweEZGMkQsIDB4MDE3OSwgMHhGRjJFLCAweDAxN0EsIDB4RkYyRiwgMHgwMTdCLAorICAgIDB4RkYzMCwgMHgwMTdDLCAweEZGMzEsIDB4MDE3RCwgMHhGRjMyLCAweDAxN0UsIDB4RkYzMywgMHgwMTdGLAorICAgIDB4RkYzNCwgMHgwMTgwLCAweEZGMzUsIDB4MDE4MSwgMHhGRjM2LCAweDAxODIsIDB4RkYzNywgMHgwMTgzLAorICAgIDB4RkYzOCwgMHgwMTg0LCAweEZGMzksIDB4MDE4NSwgMHhGRjNBLCAweDAxODYsIDB4RkYzQiwgMHgzNUJFLAorICAgIDB4RkYzQywgMHgwMTAyLCAweEZGM0QsIDB4MzVCRiwgMHhGRjNFLCAweDM1QjQsIDB4RkYzRiwgMHgwMEM1LAorICAgIDB4RkY0MSwgMHgwMTg3LCAweEZGNDIsIDB4MDE4OCwgMHhGRjQzLCAweDAxODksIDB4RkY0NCwgMHgwMThBLAorICAgIDB4RkY0NSwgMHgwMThCLCAweEZGNDYsIDB4MDE4QywgMHhGRjQ3LCAweDAxOEQsIDB4RkY0OCwgMHgwMThFLAorICAgIDB4RkY0OSwgMHgwMThGLCAweEZGNEEsIDB4MDE5MCwgMHhGRjRCLCAweDAxOTEsIDB4RkY0QywgMHgwMTkyLAorICAgIDB4RkY0RCwgMHgwMTkzLCAweEZGNEUsIDB4MDE5NCwgMHhGRjRGLCAweDAxOTUsIDB4RkY1MCwgMHgwMTk2LAorICAgIDB4RkY1MSwgMHgwMTk3LCAweEZGNTIsIDB4MDE5OCwgMHhGRjUzLCAweDAxOTksIDB4RkY1NCwgMHgwMTlBLAorICAgIDB4RkY1NSwgMHgwMTlCLCAweEZGNTYsIDB4MDE5QywgMHhGRjU3LCAweDAxOUQsIDB4RkY1OCwgMHgwMTlFLAorICAgIDB4RkY1OSwgMHgwMTlGLCAweEZGNUEsIDB4MDFBMCwgMHhGRjVCLCAweDAwODQsIDB4RkY1QywgMHgwMDc4LAorICAgIDB4RkY1RCwgMHgwMDg1LCAweEZGNUUsIDB4MDBFNCwgMHhGRjY0LCAweDAwNzEsIDB4RkZFMCwgMHgwMTA2LAorICAgIDB4RkZFMSwgMHgwMTA3LCAweEZGRTIsIDB4MzZFMSwgMHhGRkUzLCAweDAwQzQsIDB4RkZFNCwgMHgzNkUyLAorICAgIDB4RkZFNSwgMHgwMTA0LAorfTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBzaG9ydCBnX0ZYQ01BUF9VbmlDTlNfVVRGMTZfSF8wX0RXb3JkWzMgKiAzXSA9IHsKKyAgICAweEQ4NDAsIDB4REM4QSwgMHgzNkIyLCAweEQ4NDAsIDB4RENDQywgMHgzNkIwLCAweEQ4NUQsIDB4REUwNywgMHgzNkI4LAorfTsKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9HQjEvR0ItRVVDLUhfMC5jcHAgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvR0IxL0dCLUVVQy1IXzAuY3BwCmluZGV4IGYyMTZmOGEuLmQ1NDcyZjggMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9HQjEvR0ItRVVDLUhfMC5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0dCMS9HQi1FVUMtSF8wLmNwcApAQCAtMSwzOCArMSwzOCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0dCX0VVQ19IXzBbOTAgKiAzXSA9IHsNCi0gICAgMHgwMDIwLCAweDAwMjAsIDB4MUUyNCwgMHgwMDIxLCAweDAwN0UsIDB4MDMyRSwgMHhBMUExLCAweEExRkUsIDB4MDA2MCwNCi0gICAgMHhBMkIxLCAweEEyRTIsIDB4MDBCRSwgMHhBMkU1LCAweEEyRUUsIDB4MDBGMCwgMHhBMkYxLCAweEEyRkMsIDB4MDBGQSwNCi0gICAgMHhBM0ExLCAweEEzRkUsIDB4MDEwNiwgMHhBNEExLCAweEE0RjMsIDB4MDE2NCwgMHhBNUExLCAweEE1RjYsIDB4MDFCNywNCi0gICAgMHhBNkExLCAweEE2QjgsIDB4MDIwRCwgMHhBNkMxLCAweEE2RjUsIDB4MDIyNSwgMHhBN0ExLCAweEE3QzEsIDB4MDI1QSwNCi0gICAgMHhBN0QxLCAweEE3RjEsIDB4MDI3QiwgMHhBOEExLCAweEE4QzAsIDB4MDI5QywgMHhBOEM1LCAweEE4RUEsIDB4MDJCQywNCi0gICAgMHhBOUE0LCAweEE5RUYsIDB4MDJFMiwgMHhBQUExLCAweEFBRkUsIDB4MDMyRSwgMHhBQkExLCAweEFCQzAsIDB4MDM4QywNCi0gICAgMHhCMEExLCAweEIwRkUsIDB4MDNBQywgMHhCMUExLCAweEIxRkUsIDB4MDQwQSwgMHhCMkExLCAweEIyRkUsIDB4MDQ2OCwNCi0gICAgMHhCM0ExLCAweEIzRkUsIDB4MDRDNiwgMHhCNEExLCAweEI0RkUsIDB4MDUyNCwgMHhCNUExLCAweEI1RkUsIDB4MDU4MiwNCi0gICAgMHhCNkExLCAweEI2RkUsIDB4MDVFMCwgMHhCN0ExLCAweEI3RkUsIDB4MDYzRSwgMHhCOEExLCAweEI4RkUsIDB4MDY5QywNCi0gICAgMHhCOUExLCAweEI5RkUsIDB4MDZGQSwgMHhCQUExLCAweEJBRkUsIDB4MDc1OCwgMHhCQkExLCAweEJCRkUsIDB4MDdCNiwNCi0gICAgMHhCQ0ExLCAweEJDRkUsIDB4MDgxNCwgMHhCREExLCAweEJERkUsIDB4MDg3MiwgMHhCRUExLCAweEJFRkUsIDB4MDhEMCwNCi0gICAgMHhCRkExLCAweEJGRkUsIDB4MDkyRSwgMHhDMEExLCAweEMwRkUsIDB4MDk4QywgMHhDMUExLCAweEMxRkUsIDB4MDlFQSwNCi0gICAgMHhDMkExLCAweEMyRkUsIDB4MEE0OCwgMHhDM0ExLCAweEMzRkUsIDB4MEFBNiwgMHhDNEExLCAweEM0RkUsIDB4MEIwNCwNCi0gICAgMHhDNUExLCAweEM1RkUsIDB4MEI2MiwgMHhDNkExLCAweEM2RkUsIDB4MEJDMCwgMHhDN0ExLCAweEM3RkUsIDB4MEMxRSwNCi0gICAgMHhDOEExLCAweEM4RkUsIDB4MEM3QywgMHhDOUExLCAweEM5RkUsIDB4MENEQSwgMHhDQUExLCAweENBRkUsIDB4MEQzOCwNCi0gICAgMHhDQkExLCAweENCRkUsIDB4MEQ5NiwgMHhDQ0ExLCAweENDRkUsIDB4MERGNCwgMHhDREExLCAweENERkUsIDB4MEU1MiwNCi0gICAgMHhDRUExLCAweENFRkUsIDB4MEVCMCwgMHhDRkExLCAweENGRkUsIDB4MEYwRSwgMHhEMEExLCAweEQwRkUsIDB4MEY2QywNCi0gICAgMHhEMUExLCAweEQxRkUsIDB4MEZDQSwgMHhEMkExLCAweEQyRkUsIDB4MTAyOCwgMHhEM0ExLCAweEQzRkUsIDB4MTA4NiwNCi0gICAgMHhENEExLCAweEQ0RkUsIDB4MTBFNCwgMHhENUExLCAweEQ1RkUsIDB4MTE0MiwgMHhENkExLCAweEQ2RkUsIDB4MTFBMCwNCi0gICAgMHhEN0ExLCAweEQ3RjksIDB4MTFGRSwgMHhEOEExLCAweEQ4RkUsIDB4MTI1NywgMHhEOUExLCAweEQ5RkUsIDB4MTJCNSwNCi0gICAgMHhEQUExLCAweERBRkUsIDB4MTMxMywgMHhEQkExLCAweERCRkUsIDB4MTM3MSwgMHhEQ0ExLCAweERDRkUsIDB4MTNDRiwNCi0gICAgMHhEREExLCAweERERkUsIDB4MTQyRCwgMHhERUExLCAweERFRkUsIDB4MTQ4QiwgMHhERkExLCAweERGRkUsIDB4MTRFOSwNCi0gICAgMHhFMEExLCAweEUwRkUsIDB4MTU0NywgMHhFMUExLCAweEUxRkUsIDB4MTVBNSwgMHhFMkExLCAweEUyRkUsIDB4MTYwMywNCi0gICAgMHhFM0ExLCAweEUzRkUsIDB4MTY2MSwgMHhFNEExLCAweEU0RkUsIDB4MTZCRiwgMHhFNUExLCAweEU1RkUsIDB4MTcxRCwNCi0gICAgMHhFNkExLCAweEU2RkUsIDB4MTc3QiwgMHhFN0ExLCAweEU3RkUsIDB4MTdEOSwgMHhFOEExLCAweEU4RkUsIDB4MTgzNywNCi0gICAgMHhFOUExLCAweEU5RkUsIDB4MTg5NSwgMHhFQUExLCAweEVBRkUsIDB4MThGMywgMHhFQkExLCAweEVCRkUsIDB4MTk1MSwNCi0gICAgMHhFQ0ExLCAweEVDRkUsIDB4MTlBRiwgMHhFREExLCAweEVERkUsIDB4MUEwRCwgMHhFRUExLCAweEVFRkUsIDB4MUE2QiwNCi0gICAgMHhFRkExLCAweEVGRkUsIDB4MUFDOSwgMHhGMEExLCAweEYwRkUsIDB4MUIyNywgMHhGMUExLCAweEYxRkUsIDB4MUI4NSwNCi0gICAgMHhGMkExLCAweEYyRkUsIDB4MUJFMywgMHhGM0ExLCAweEYzRkUsIDB4MUM0MSwgMHhGNEExLCAweEY0RkUsIDB4MUM5RiwNCi0gICAgMHhGNUExLCAweEY1RkUsIDB4MUNGRCwgMHhGNkExLCAweEY2RkUsIDB4MUQ1QiwgMHhGN0ExLCAweEY3RkUsIDB4MURCOSwNCi19Ow0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBzaG9ydCBnX0ZYQ01BUF9HQl9FVUNfSF8wWzkwICogM10gPSB7CisgICAgMHgwMDIwLCAweDAwMjAsIDB4MUUyNCwgMHgwMDIxLCAweDAwN0UsIDB4MDMyRSwgMHhBMUExLCAweEExRkUsIDB4MDA2MCwKKyAgICAweEEyQjEsIDB4QTJFMiwgMHgwMEJFLCAweEEyRTUsIDB4QTJFRSwgMHgwMEYwLCAweEEyRjEsIDB4QTJGQywgMHgwMEZBLAorICAgIDB4QTNBMSwgMHhBM0ZFLCAweDAxMDYsIDB4QTRBMSwgMHhBNEYzLCAweDAxNjQsIDB4QTVBMSwgMHhBNUY2LCAweDAxQjcsCisgICAgMHhBNkExLCAweEE2QjgsIDB4MDIwRCwgMHhBNkMxLCAweEE2RjUsIDB4MDIyNSwgMHhBN0ExLCAweEE3QzEsIDB4MDI1QSwKKyAgICAweEE3RDEsIDB4QTdGMSwgMHgwMjdCLCAweEE4QTEsIDB4QThDMCwgMHgwMjlDLCAweEE4QzUsIDB4QThFQSwgMHgwMkJDLAorICAgIDB4QTlBNCwgMHhBOUVGLCAweDAyRTIsIDB4QUFBMSwgMHhBQUZFLCAweDAzMkUsIDB4QUJBMSwgMHhBQkMwLCAweDAzOEMsCisgICAgMHhCMEExLCAweEIwRkUsIDB4MDNBQywgMHhCMUExLCAweEIxRkUsIDB4MDQwQSwgMHhCMkExLCAweEIyRkUsIDB4MDQ2OCwKKyAgICAweEIzQTEsIDB4QjNGRSwgMHgwNEM2LCAweEI0QTEsIDB4QjRGRSwgMHgwNTI0LCAweEI1QTEsIDB4QjVGRSwgMHgwNTgyLAorICAgIDB4QjZBMSwgMHhCNkZFLCAweDA1RTAsIDB4QjdBMSwgMHhCN0ZFLCAweDA2M0UsIDB4QjhBMSwgMHhCOEZFLCAweDA2OUMsCisgICAgMHhCOUExLCAweEI5RkUsIDB4MDZGQSwgMHhCQUExLCAweEJBRkUsIDB4MDc1OCwgMHhCQkExLCAweEJCRkUsIDB4MDdCNiwKKyAgICAweEJDQTEsIDB4QkNGRSwgMHgwODE0LCAweEJEQTEsIDB4QkRGRSwgMHgwODcyLCAweEJFQTEsIDB4QkVGRSwgMHgwOEQwLAorICAgIDB4QkZBMSwgMHhCRkZFLCAweDA5MkUsIDB4QzBBMSwgMHhDMEZFLCAweDA5OEMsIDB4QzFBMSwgMHhDMUZFLCAweDA5RUEsCisgICAgMHhDMkExLCAweEMyRkUsIDB4MEE0OCwgMHhDM0ExLCAweEMzRkUsIDB4MEFBNiwgMHhDNEExLCAweEM0RkUsIDB4MEIwNCwKKyAgICAweEM1QTEsIDB4QzVGRSwgMHgwQjYyLCAweEM2QTEsIDB4QzZGRSwgMHgwQkMwLCAweEM3QTEsIDB4QzdGRSwgMHgwQzFFLAorICAgIDB4QzhBMSwgMHhDOEZFLCAweDBDN0MsIDB4QzlBMSwgMHhDOUZFLCAweDBDREEsIDB4Q0FBMSwgMHhDQUZFLCAweDBEMzgsCisgICAgMHhDQkExLCAweENCRkUsIDB4MEQ5NiwgMHhDQ0ExLCAweENDRkUsIDB4MERGNCwgMHhDREExLCAweENERkUsIDB4MEU1MiwKKyAgICAweENFQTEsIDB4Q0VGRSwgMHgwRUIwLCAweENGQTEsIDB4Q0ZGRSwgMHgwRjBFLCAweEQwQTEsIDB4RDBGRSwgMHgwRjZDLAorICAgIDB4RDFBMSwgMHhEMUZFLCAweDBGQ0EsIDB4RDJBMSwgMHhEMkZFLCAweDEwMjgsIDB4RDNBMSwgMHhEM0ZFLCAweDEwODYsCisgICAgMHhENEExLCAweEQ0RkUsIDB4MTBFNCwgMHhENUExLCAweEQ1RkUsIDB4MTE0MiwgMHhENkExLCAweEQ2RkUsIDB4MTFBMCwKKyAgICAweEQ3QTEsIDB4RDdGOSwgMHgxMUZFLCAweEQ4QTEsIDB4RDhGRSwgMHgxMjU3LCAweEQ5QTEsIDB4RDlGRSwgMHgxMkI1LAorICAgIDB4REFBMSwgMHhEQUZFLCAweDEzMTMsIDB4REJBMSwgMHhEQkZFLCAweDEzNzEsIDB4RENBMSwgMHhEQ0ZFLCAweDEzQ0YsCisgICAgMHhEREExLCAweERERkUsIDB4MTQyRCwgMHhERUExLCAweERFRkUsIDB4MTQ4QiwgMHhERkExLCAweERGRkUsIDB4MTRFOSwKKyAgICAweEUwQTEsIDB4RTBGRSwgMHgxNTQ3LCAweEUxQTEsIDB4RTFGRSwgMHgxNUE1LCAweEUyQTEsIDB4RTJGRSwgMHgxNjAzLAorICAgIDB4RTNBMSwgMHhFM0ZFLCAweDE2NjEsIDB4RTRBMSwgMHhFNEZFLCAweDE2QkYsIDB4RTVBMSwgMHhFNUZFLCAweDE3MUQsCisgICAgMHhFNkExLCAweEU2RkUsIDB4MTc3QiwgMHhFN0ExLCAweEU3RkUsIDB4MTdEOSwgMHhFOEExLCAweEU4RkUsIDB4MTgzNywKKyAgICAweEU5QTEsIDB4RTlGRSwgMHgxODk1LCAweEVBQTEsIDB4RUFGRSwgMHgxOEYzLCAweEVCQTEsIDB4RUJGRSwgMHgxOTUxLAorICAgIDB4RUNBMSwgMHhFQ0ZFLCAweDE5QUYsIDB4RURBMSwgMHhFREZFLCAweDFBMEQsIDB4RUVBMSwgMHhFRUZFLCAweDFBNkIsCisgICAgMHhFRkExLCAweEVGRkUsIDB4MUFDOSwgMHhGMEExLCAweEYwRkUsIDB4MUIyNywgMHhGMUExLCAweEYxRkUsIDB4MUI4NSwKKyAgICAweEYyQTEsIDB4RjJGRSwgMHgxQkUzLCAweEYzQTEsIDB4RjNGRSwgMHgxQzQxLCAweEY0QTEsIDB4RjRGRSwgMHgxQzlGLAorICAgIDB4RjVBMSwgMHhGNUZFLCAweDFDRkQsIDB4RjZBMSwgMHhGNkZFLCAweDFENUIsIDB4RjdBMSwgMHhGN0ZFLCAweDFEQjksCit9OwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0dCMS9HQi1FVUMtVl8wLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9HQjEvR0ItRVVDLVZfMC5jcHAKaW5kZXggZDcxY2QzNS4uYmYyYmQ0NSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0dCMS9HQi1FVUMtVl8wLmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvR0IxL0dCLUVVQy1WXzAuY3BwCkBAIC0xLDE1ICsxLDE1IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfR0JfRVVDX1ZfMFsyMCAqIDNdID0gew0KLSAgICAweEExQTIsIDB4QTFBMiwgMHgwMjNGLCAweEExQTMsIDB4QTFBMywgMHgwMjNFLCAweEExQUEsIDB4QTFBQSwgMHgwMjU2LA0KLSAgICAweEExQUIsIDB4QTFBQywgMHgxRTE4LCAweEExQUQsIDB4QTFBRCwgMHgwMjU3LCAweEExQjIsIDB4QTFCRiwgMHgwMjQ2LA0KLSAgICAweEExRkUsIDB4QTFGRSwgMHgxRTFBLCAweEEzQTEsIDB4QTNBMSwgMHgwMjQyLCAweEEzQTgsIDB4QTNBOSwgMHgwMjQ0LA0KLSAgICAweEEzQUMsIDB4QTNBQywgMHgwMjNELCAweEEzQUUsIDB4QTNBRSwgMHgxRTFCLCAweEEzQkEsIDB4QTNCQiwgMHgwMjQwLA0KLSAgICAweEEzQkQsIDB4QTNCRCwgMHgxRTFDLCAweEEzQkYsIDB4QTNCRiwgMHgwMjQzLCAweEEzREIsIDB4QTNEQiwgMHgxRTFELA0KLSAgICAweEEzREQsIDB4QTNERCwgMHgxRTFFLCAweEEzREYsIDB4QTNERiwgMHgwMjU4LCAweEEzRkIsIDB4QTNGQiwgMHgwMjU0LA0KLSAgICAweEEzRkQsIDB4QTNGRCwgMHgwMjU1LCAweEEzRkUsIDB4QTNGRSwgMHgxRTFGLA0KLX07DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0dCX0VVQ19WXzBbMjAgKiAzXSA9IHsKKyAgICAweEExQTIsIDB4QTFBMiwgMHgwMjNGLCAweEExQTMsIDB4QTFBMywgMHgwMjNFLCAweEExQUEsIDB4QTFBQSwgMHgwMjU2LAorICAgIDB4QTFBQiwgMHhBMUFDLCAweDFFMTgsIDB4QTFBRCwgMHhBMUFELCAweDAyNTcsIDB4QTFCMiwgMHhBMUJGLCAweDAyNDYsCisgICAgMHhBMUZFLCAweEExRkUsIDB4MUUxQSwgMHhBM0ExLCAweEEzQTEsIDB4MDI0MiwgMHhBM0E4LCAweEEzQTksIDB4MDI0NCwKKyAgICAweEEzQUMsIDB4QTNBQywgMHgwMjNELCAweEEzQUUsIDB4QTNBRSwgMHgxRTFCLCAweEEzQkEsIDB4QTNCQiwgMHgwMjQwLAorICAgIDB4QTNCRCwgMHhBM0JELCAweDFFMUMsIDB4QTNCRiwgMHhBM0JGLCAweDAyNDMsIDB4QTNEQiwgMHhBM0RCLCAweDFFMUQsCisgICAgMHhBM0RELCAweEEzREQsIDB4MUUxRSwgMHhBM0RGLCAweEEzREYsIDB4MDI1OCwgMHhBM0ZCLCAweEEzRkIsIDB4MDI1NCwKKyAgICAweEEzRkQsIDB4QTNGRCwgMHgwMjU1LCAweEEzRkUsIDB4QTNGRSwgMHgxRTFGLAorfTsKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9HQjEvR0JLLUVVQy1IXzIuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0dCMS9HQkstRVVDLUhfMi5jcHAKaW5kZXggYzdjNDg2Yi4uM2YzODc0ZiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0dCMS9HQkstRVVDLUhfMi5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0dCMS9HQkstRVVDLUhfMi5jcHAKQEAgLTEsMTM2NSArMSwxMzY1IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfR0JLX0VVQ19IXzJbNDA3MSAqIDNdID0gew0KLSAgICAweDAwMjAsIDB4MDAyMCwgMHgxRTI0LCAweDAwMjEsIDB4MDA3RSwgMHgwMzJFLCAweDgxNDAsIDB4ODE3OCwgMHgyNzU4LA0KLSAgICAweDgxNzksIDB4ODE3OSwgMHgyMDU5LCAweDgxN0EsIDB4ODE3RSwgMHgyNzkxLCAweDgxODAsIDB4ODE4NSwgMHgyNzk2LA0KLSAgICAweDgxODYsIDB4ODE4NiwgMHgyMUYxLCAweDgxODcsIDB4ODFFQywgMHgyNzlDLCAweDgxRUQsIDB4ODFFRCwgMHgxRkYyLA0KLSAgICAweDgxRUUsIDB4ODFGNSwgMHgyODAyLCAweDgxRjYsIDB4ODFGNiwgMHgyMDVELCAweDgxRjcsIDB4ODFGRSwgMHgyODBBLA0KLSAgICAweDgyNDAsIDB4ODI1MiwgMHgyODEyLCAweDgyNTMsIDB4ODI1MywgMHgyNjlDLCAweDgyNTQsIDB4ODI2MSwgMHgyODI1LA0KLSAgICAweDgyNjIsIDB4ODI2MiwgMHgyMUI1LCAweDgyNjMsIDB4ODI3MywgMHgyODMzLCAweDgyNzQsIDB4ODI3NCwgMHgyMkNDLA0KLSAgICAweDgyNzUsIDB4ODI3OSwgMHgyODQ0LCAweDgyN0EsIDB4ODI3QSwgMHgyMDE2LCAweDgyN0IsIDB4ODI3QywgMHgyODQ5LA0KLSAgICAweDgyN0QsIDB4ODI3RCwgMHgxRTYyLCAweDgyN0UsIDB4ODI3RSwgMHgyODRCLCAweDgyODAsIDB4ODI4MCwgMHgxRjIwLA0KLSAgICAweDgyODEsIDB4ODI4MiwgMHgyODRDLCAweDgyODMsIDB4ODI4MywgMHgyMDdGLCAweDgyODQsIDB4ODI4RiwgMHgyODRFLA0KLSAgICAweDgyOTAsIDB4ODI5MCwgMHgyMDVDLCAweDgyOTEsIDB4ODJBNCwgMHgyODVBLCAweDgyQTUsIDB4ODJBNSwgMHgyMTk0LA0KLSAgICAweDgyQTYsIDB4ODJDNywgMHgyODZFLCAweDgyQzgsIDB4ODJDOCwgMHgxRTY1LCAweDgyQzksIDB4ODJDOSwgMHgyMjgxLA0KLSAgICAweDgyQ0EsIDB4ODJFMCwgMHgyODkwLCAweDgyRTEsIDB4ODJFMSwgMHgyMkNELCAweDgyRTIsIDB4ODJFMiwgMHgyOEE3LA0KLSAgICAweDgyRTMsIDB4ODJFMywgMHgyMTBBLCAweDgyRTQsIDB4ODJFNCwgMHgxRTNFLCAweDgyRTUsIDB4ODJFQywgMHgyOEE4LA0KLSAgICAweDgyRUQsIDB4ODJFRCwgMHgyNjdGLCAweDgyRUUsIDB4ODJGMSwgMHgyOEIwLCAweDgyRjIsIDB4ODJGMiwgMHgyMjJFLA0KLSAgICAweDgyRjMsIDB4ODJGNiwgMHgyOEI0LCAweDgyRjcsIDB4ODJGNywgMHgxRTk2LCAweDgyRjgsIDB4ODJGOCwgMHgyMkNCLA0KLSAgICAweDgyRjksIDB4ODJGOSwgMHgyMjZDLCAweDgyRkEsIDB4ODJGQSwgMHgyOEI4LCAweDgyRkIsIDB4ODJGQiwgMHgyMTE3LA0KLSAgICAweDgyRkMsIDB4ODJGRSwgMHgyOEI5LCAweDgzNDAsIDB4ODM0MCwgMHgyOEJDLCAweDgzNDEsIDB4ODM0MSwgMHgyMEU4LA0KLSAgICAweDgzNDIsIDB4ODM0NCwgMHgyOEJELCAweDgzNDUsIDB4ODM0NSwgMHgyMkQ0LCAweDgzNDYsIDB4ODM0NywgMHgyOEMwLA0KLSAgICAweDgzNDgsIDB4ODM0OCwgMHgxRkI5LCAweDgzNDksIDB4ODM0QiwgMHgyOEMyLCAweDgzNEMsIDB4ODM0QywgMHgyMkQ4LA0KLSAgICAweDgzNEQsIDB4ODM1MiwgMHgyOEM1LCAweDgzNTMsIDB4ODM1MywgMHgyMERGLCAweDgzNTQsIDB4ODM1NiwgMHgyOENCLA0KLSAgICAweDgzNTcsIDB4ODM1NywgMHgyMEMyLCAweDgzNTgsIDB4ODM1RCwgMHgyOENFLCAweDgzNUUsIDB4ODM1RSwgMHgyMTk1LA0KLSAgICAweDgzNUYsIDB4ODM2NCwgMHgyOEQ0LCAweDgzNjUsIDB4ODM2NSwgMHgxRkFDLCAweDgzNjYsIDB4ODM2NiwgMHgyMkQzLA0KLSAgICAweDgzNjcsIDB4ODM3MSwgMHgyOERBLCAweDgzNzIsIDB4ODM3MiwgMHgxRjgxLCAweDgzNzMsIDB4ODM3NywgMHgyOEU1LA0KLSAgICAweDgzNzgsIDB4ODM3OCwgMHgyMjEwLCAweDgzNzksIDB4ODM3OSwgMHgyOEVBLCAweDgzN0EsIDB4ODM3QSwgMHgyMkNGLA0KLSAgICAweDgzN0IsIDB4ODM3QiwgMHgyOEVCLCAweDgzN0MsIDB4ODM3QywgMHgyMjEzLCAweDgzN0QsIDB4ODM3RCwgMHgyOEVDLA0KLSAgICAweDgzN0UsIDB4ODM3RSwgMHgxRkU0LCAweDgzODAsIDB4ODM4MCwgMHgxRjkwLCAweDgzODEsIDB4ODM4NSwgMHgyOEVELA0KLSAgICAweDgzODYsIDB4ODM4NiwgMHgyMkQ2LCAweDgzODcsIDB4ODM4OCwgMHgyOEYyLCAweDgzODksIDB4ODM4OSwgMHgyMkQwLA0KLSAgICAweDgzOEEsIDB4ODM4QSwgMHgyMkNFLCAweDgzOEIsIDB4ODM4QywgMHgyOEY0LCAweDgzOEQsIDB4ODM4RCwgMHgyNjgxLA0KLSAgICAweDgzOEUsIDB4ODM5MywgMHgyOEY2LCAweDgzOTQsIDB4ODM5NCwgMHgxRTc2LCAweDgzOTUsIDB4ODM5RCwgMHgyOEZDLA0KLSAgICAweDgzOUUsIDB4ODM5RSwgMHgyMjMxLCAweDgzOUYsIDB4ODNBNSwgMHgyOTA1LCAweDgzQTYsIDB4ODNBNiwgMHgxRTkzLA0KLSAgICAweDgzQTcsIDB4ODNBQSwgMHgyOTBDLCAweDgzQUIsIDB4ODNBQiwgMHgyMkQyLCAweDgzQUMsIDB4ODNBRCwgMHgyOTEwLA0KLSAgICAweDgzQUUsIDB4ODNBRSwgMHgyMkQ3LCAweDgzQUYsIDB4ODNBRiwgMHgyMkQ1LCAweDgzQjAsIDB4ODNCMCwgMHgyMkQxLA0KLSAgICAweDgzQjEsIDB4ODNCOSwgMHgyOTEyLCAweDgzQkEsIDB4ODNCQSwgMHgxRUU1LCAweDgzQkIsIDB4ODNDOCwgMHgyOTFCLA0KLSAgICAweDgzQzksIDB4ODNDOSwgMHgyMDI1LCAweDgzQ0EsIDB4ODNGNSwgMHgyOTI5LCAweDgzRjYsIDB4ODNGNiwgMHgxRUNGLA0KLSAgICAweDgzRjcsIDB4ODNGRSwgMHgyOTU1LCAweDg0NDAsIDB4ODQ0RiwgMHgyOTVELCAweDg0NTAsIDB4ODQ1MCwgMHgxRkQ5LA0KLSAgICAweDg0NTEsIDB4ODQ3MCwgMHgyOTZELCAweDg0NzEsIDB4ODQ3MSwgMHgyMkM4LCAweDg0NzIsIDB4ODQ3MywgMHgyOThELA0KLSAgICAweDg0NzQsIDB4ODQ3NCwgMHgyMjYzLCAweDg0NzUsIDB4ODQ3NiwgMHgyOThGLCAweDg0NzcsIDB4ODQ3NywgMHgyNjgzLA0KLSAgICAweDg0NzgsIDB4ODQ3RSwgMHgyOTkxLCAweDg0ODAsIDB4ODQ4MSwgMHgyOTk4LCAweDg0ODIsIDB4ODQ4MiwgMHgxRjE3LA0KLSAgICAweDg0ODMsIDB4ODQ4RCwgMHgyOTlBLCAweDg0OEUsIDB4ODQ4RSwgMHgxRjJCLCAweDg0OEYsIDB4ODQ5MSwgMHgyOUE1LA0KLSAgICAweDg0OTIsIDB4ODQ5MiwgMHgyMkNBLCAweDg0OTMsIDB4ODQ5MywgMHgxRTk5LCAweDg0OTQsIDB4ODQ5QywgMHgyOUE4LA0KLSAgICAweDg0OUQsIDB4ODQ5RCwgMHgxRjRGLCAweDg0OUUsIDB4ODRBMCwgMHgyOUIxLCAweDg0QTEsIDB4ODRBMSwgMHgxRkNGLA0KLSAgICAweDg0QTIsIDB4ODRBMiwgMHgyMDM2LCAweDg0QTMsIDB4ODRBMywgMHgxRjNBLCAweDg0QTQsIDB4ODRBNCwgMHgyOUI0LA0KLSAgICAweDg0QTUsIDB4ODRBNSwgMHgyMkM5LCAweDg0QTYsIDB4ODRBNiwgMHgxRjk5LCAweDg0QTcsIDB4ODRBOCwgMHgyOUI1LA0KLSAgICAweDg0QTksIDB4ODRBOSwgMHgxRjc1LCAweDg0QUEsIDB4ODRDNCwgMHgyOUI3LCAweDg0QzUsIDB4ODRDNSwgMHgxRkJFLA0KLSAgICAweDg0QzYsIDB4ODREMiwgMHgyOUQyLCAweDg0RDMsIDB4ODREMywgMHgxRUNELCAweDg0RDQsIDB4ODRENCwgMHgyOURGLA0KLSAgICAweDg0RDUsIDB4ODRENSwgMHgyMUE5LCAweDg0RDYsIDB4ODRENiwgMHgyOUUwLCAweDg0RDcsIDB4ODRENywgMHgyMUU2LA0KLSAgICAweDg0RDgsIDB4ODREOCwgMHgyOUUxLCAweDg0RDksIDB4ODREOSwgMHgyMTI3LCAweDg0REEsIDB4ODREQSwgMHgyMDAzLA0KLSAgICAweDg0REIsIDB4ODREQywgMHgyOUUyLCAweDg0REQsIDB4ODRERCwgMHgyMTMyLCAweDg0REUsIDB4ODRFOSwgMHgyOUU0LA0KLSAgICAweDg0RUEsIDB4ODRFQSwgMHgyMzIzLCAweDg0RUIsIDB4ODRFRCwgMHgyOUYwLCAweDg0RUUsIDB4ODRFRSwgMHgyMDExLA0KLSAgICAweDg0RUYsIDB4ODRGMCwgMHgyOUYzLCAweDg0RjEsIDB4ODRGMSwgMHgyMEY1LCAweDg0RjIsIDB4ODRGRSwgMHgyOUY1LA0KLSAgICAweDg1NDAsIDB4ODU1MCwgMHgyQTAyLCAweDg1NTEsIDB4ODU1MSwgMHgyMkM1LCAweDg1NTIsIDB4ODU1MiwgMHgxRjVFLA0KLSAgICAweDg1NTMsIDB4ODU1MywgMHgyQTEzLCAweDg1NTQsIDB4ODU1NCwgMHgyMkM2LCAweDg1NTUsIDB4ODU1RCwgMHgyQTE0LA0KLSAgICAweDg1NUUsIDB4ODU1RSwgMHgyMEVGLCAweDg1NUYsIDB4ODU2NSwgMHgyQTFELCAweDg1NjYsIDB4ODU2NiwgMHgyMUQwLA0KLSAgICAweDg1NjcsIDB4ODU3RSwgMHgyQTI0LCAweDg1ODAsIDB4ODU4NiwgMHgyQTNDLCAweDg1ODcsIDB4ODU4NywgMHgyMkMxLA0KLSAgICAweDg1ODgsIDB4ODU4QSwgMHgyQTQzLCAweDg1OEIsIDB4ODU4QiwgMHgxRTY0LCAweDg1OEMsIDB4ODU5MSwgMHgyQTQ2LA0KLSAgICAweDg1OTIsIDB4ODU5MiwgMHgyMUY5LCAweDg1OTMsIDB4ODU5NSwgMHgyQTRDLCAweDg1OTYsIDB4ODU5NiwgMHgyMDEwLA0KLSAgICAweDg1OTcsIDB4ODU5NywgMHgyQTRGLCAweDg1OTgsIDB4ODU5OCwgMHgyMkMyLCAweDg1OTksIDB4ODVBMSwgMHgyQTUwLA0KLSAgICAweDg1QTIsIDB4ODVBMiwgMHgxRTVBLCAweDg1QTMsIDB4ODVCMSwgMHgyQTU5LCAweDg1QjIsIDB4ODVCMiwgMHgxRUEyLA0KLSAgICAweDg1QjMsIDB4ODVGRSwgMHgyQTY4LCAweDg2NDAsIDB4ODY0OSwgMHgyQUI0LCAweDg2NEEsIDB4ODY0QSwgMHgyMzZELA0KLSAgICAweDg2NEIsIDB4ODY1MywgMHgyQUJFLCAweDg2NTQsIDB4ODY1NCwgMHgyMjQ3LCAweDg2NTUsIDB4ODY2NywgMHgyQUM3LA0KLSAgICAweDg2NjgsIDB4ODY2OCwgMHgyMzZDLCAweDg2NjksIDB4ODY3RSwgMHgyQURBLCAweDg2ODAsIDB4ODY5NSwgMHgyQUYwLA0KLSAgICAweDg2OTYsIDB4ODY5NiwgMHgyMTlDLCAweDg2OTcsIDB4ODY5OCwgMHgyQjA2LCAweDg2OTksIDB4ODY5OSwgMHgyMEM5LA0KLSAgICAweDg2OUEsIDB4ODZBMCwgMHgyQjA4LCAweDg2QTEsIDB4ODZBMSwgMHgyMUYwLCAweDg2QTIsIDB4ODZDOSwgMHgyQjBGLA0KLSAgICAweDg2Q0EsIDB4ODZDQSwgMHgyMTBCLCAweDg2Q0IsIDB4ODZDQiwgMHgyQjM3LCAweDg2Q0MsIDB4ODZDQywgMHgyMERFLA0KLSAgICAweDg2Q0QsIDB4ODZDRCwgMHgyQjM4LCAweDg2Q0UsIDB4ODZDRSwgMHgxRUFBLCAweDg2Q0YsIDB4ODZEMCwgMHgyQjM5LA0KLSAgICAweDg2RDEsIDB4ODZEMSwgMHgyMjJDLCAweDg2RDIsIDB4ODZEQiwgMHgyQjNCLCAweDg2REMsIDB4ODZEQywgMHgyMEQ4LA0KLSAgICAweDg2REQsIDB4ODZERCwgMHgyMkMwLCAweDg2REUsIDB4ODZFMCwgMHgyQjQ1LCAweDg2RTEsIDB4ODZFMSwgMHgyMDZGLA0KLSAgICAweDg2RTIsIDB4ODZFNywgMHgyQjQ4LCAweDg2RTgsIDB4ODZFOCwgMHgyMUExLCAweDg2RTksIDB4ODZFRCwgMHgyQjRFLA0KLSAgICAweDg2RUUsIDB4ODZFRSwgMHgyMzc5LCAweDg2RUYsIDB4ODZGMywgMHgyQjUzLCAweDg2RjQsIDB4ODZGNCwgMHgyMzcyLA0KLSAgICAweDg2RjUsIDB4ODZGRSwgMHgyQjU4LCAweDg3NDAsIDB4ODc0MCwgMHgyMTZBLCAweDg3NDEsIDB4ODc0MywgMHgyQjYyLA0KLSAgICAweDg3NDQsIDB4ODc0NCwgMHgyMzdDLCAweDg3NDUsIDB4ODc0OCwgMHgyQjY1LCAweDg3NDksIDB4ODc0OSwgMHgyMEIwLA0KLSAgICAweDg3NEEsIDB4ODc0QSwgMHgyQjY5LCAweDg3NEIsIDB4ODc0QiwgMHgyMzdBLCAweDg3NEMsIDB4ODc0QywgMHgxRTc0LA0KLSAgICAweDg3NEQsIDB4ODc0RSwgMHgyQjZBLCAweDg3NEYsIDB4ODc0RiwgMHgyMzc3LCAweDg3NTAsIDB4ODc1NiwgMHgyQjZDLA0KLSAgICAweDg3NTcsIDB4ODc1NywgMHgxRjRDLCAweDg3NTgsIDB4ODc1OSwgMHgyQjczLCAweDg3NUEsIDB4ODc1QSwgMHgyMzc4LA0KLSAgICAweDg3NUIsIDB4ODc1QiwgMHgyMUNGLCAweDg3NUMsIDB4ODc1QywgMHgyMzY4LCAweDg3NUQsIDB4ODc1RCwgMHgyQjc1LA0KLSAgICAweDg3NUUsIDB4ODc1RSwgMHgyMzcxLCAweDg3NUYsIDB4ODc1RiwgMHgyQjc2LCAweDg3NjAsIDB4ODc2MCwgMHgyMzY5LA0KLSAgICAweDg3NjEsIDB4ODc2NSwgMHgyQjc3LCAweDg3NjYsIDB4ODc2NiwgMHgyNjc0LCAweDg3NjcsIDB4ODc3OSwgMHgyQjdDLA0KLSAgICAweDg3N0EsIDB4ODc3QSwgMHgyMzZGLCAweDg3N0IsIDB4ODc3QywgMHgyQjhGLCAweDg3N0QsIDB4ODc3RCwgMHgyMzcwLA0KLSAgICAweDg3N0UsIDB4ODc3RSwgMHgyQjkxLCAweDg3ODAsIDB4ODc4MCwgMHgyQjkyLCAweDg3ODEsIDB4ODc4MSwgMHgyMzc2LA0KLSAgICAweDg3ODIsIDB4ODc4MiwgMHgyMzczLCAweDg3ODMsIDB4ODc4NSwgMHgyQjkzLCAweDg3ODYsIDB4ODc4NiwgMHgyMzdGLA0KLSAgICAweDg3ODcsIDB4ODc4NywgMHgyQjk2LCAweDg3ODgsIDB4ODc4OCwgMHgyMzc0LCAweDg3ODksIDB4ODc4OSwgMHgyQjk3LA0KLSAgICAweDg3OEEsIDB4ODc4QSwgMHgyMEI1LCAweDg3OEIsIDB4ODc4QywgMHgyQjk4LCAweDg3OEQsIDB4ODc4RCwgMHgxRURCLA0KLSAgICAweDg3OEUsIDB4ODc4RSwgMHgyNjcyLCAweDg3OEYsIDB4ODc5MiwgMHgyQjlBLCAweDg3OTMsIDB4ODc5MywgMHgyMzZFLA0KLSAgICAweDg3OTQsIDB4ODc5NywgMHgyQjlFLCAweDg3OTgsIDB4ODc5OCwgMHgyMUI3LCAweDg3OTksIDB4ODc5QywgMHgyQkEyLA0KLSAgICAweDg3OUQsIDB4ODc5RCwgMHgyMzc1LCAweDg3OUUsIDB4ODdBMiwgMHgyQkE2LCAweDg3QTMsIDB4ODdBMywgMHgyMzgyLA0KLSAgICAweDg3QTQsIDB4ODdBNiwgMHgyQkFCLCAweDg3QTcsIDB4ODdBNywgMHgyMDlFLCAweDg3QTgsIDB4ODdCMiwgMHgyQkFFLA0KLSAgICAweDg3QjMsIDB4ODdCMywgMHgyMzZCLCAweDg3QjQsIDB4ODdCNCwgMHgyQkI5LCAweDg3QjUsIDB4ODdCNSwgMHgyMDM5LA0KLSAgICAweDg3QjYsIDB4ODdCQSwgMHgyQkJBLCAweDg3QkIsIDB4ODdCQiwgMHgyNjlGLCAweDg3QkMsIDB4ODdCRSwgMHgyQkJGLA0KLSAgICAweDg3QkYsIDB4ODdCRiwgMHgyMzdELCAweDg3QzAsIDB4ODdDMCwgMHgyMUY1LCAweDg3QzEsIDB4ODdDMSwgMHgyQkMyLA0KLSAgICAweDg3QzIsIDB4ODdDMiwgMHgyMzgxLCAweDg3QzMsIDB4ODdDOSwgMHgyQkMzLCAweDg3Q0EsIDB4ODdDQSwgMHgyMzdCLA0KLSAgICAweDg3Q0IsIDB4ODdDQiwgMHgyMzdFLCAweDg3Q0MsIDB4ODdDQywgMHgyMUNDLCAweDg3Q0QsIDB4ODdDRSwgMHgyQkNBLA0KLSAgICAweDg3Q0YsIDB4ODdDRiwgMHgyMkRCLCAweDg3RDAsIDB4ODdEMSwgMHgyQkNDLCAweDg3RDIsIDB4ODdEMiwgMHgyMzZBLA0KLSAgICAweDg3RDMsIDB4ODdEMywgMHgyNjg5LCAweDg3RDQsIDB4ODdENCwgMHgyQkNFLCAweDg3RDUsIDB4ODdENSwgMHgyNjk3LA0KLSAgICAweDg3RDYsIDB4ODdEOSwgMHgyQkNGLCAweDg3REEsIDB4ODdEQSwgMHgyMkExLCAweDg3REIsIDB4ODdGNiwgMHgyQkQzLA0KLSAgICAweDg3RjcsIDB4ODdGNywgMHgyMzgzLCAweDg3RjgsIDB4ODdGOCwgMHgxRjNELCAweDg3RjksIDB4ODdGOSwgMHgyQkVGLA0KLSAgICAweDg3RkEsIDB4ODdGQSwgMHgyMThGLCAweDg3RkIsIDB4ODdGRSwgMHgyQkYwLCAweDg4NDAsIDB4ODg0MCwgMHgyMjQ2LA0KLSAgICAweDg4NDEsIDB4ODg0MSwgMHgyMjQ4LCAweDg4NDIsIDB4ODg0MywgMHgyQkY0LCAweDg4NDQsIDB4ODg0NCwgMHgyMTdFLA0KLSAgICAweDg4NDUsIDB4ODg0NSwgMHgyQkY2LCAweDg4NDYsIDB4ODg0NiwgMHgyMTgwLCAweDg4NDcsIDB4ODg3RSwgMHgyQkY3LA0KLSAgICAweDg4ODAsIDB4ODhCOSwgMHgyQzJGLCAweDg4QkEsIDB4ODhCQSwgMHgyMzJBLCAweDg4QkIsIDB4ODhDQiwgMHgyQzY5LA0KLSAgICAweDg4Q0MsIDB4ODhDQywgMHgyMjhCLCAweDg4Q0QsIDB4ODhEMywgMHgyQzdBLCAweDg4RDQsIDB4ODhENCwgMHgxRjg1LA0KLSAgICAweDg4RDUsIDB4ODhENiwgMHgyQzgxLCAweDg4RDcsIDB4ODhENywgMHgyMzI1LCAweDg4RDgsIDB4ODhERSwgMHgyQzgzLA0KLSAgICAweDg4REYsIDB4ODhERiwgMHgyMzJDLCAweDg4RTAsIDB4ODhFNCwgMHgyQzhBLCAweDg4RTUsIDB4ODhFNSwgMHgyMzJFLA0KLSAgICAweDg4RTYsIDB4ODhGMSwgMHgyQzhGLCAweDg4RjIsIDB4ODhGMiwgMHgyMjA1LCAweDg4RjMsIDB4ODhGMywgMHgxRTM4LA0KLSAgICAweDg4RjQsIDB4ODhGNSwgMHgyQzlCLCAweDg4RjYsIDB4ODhGNiwgMHgxRTczLCAweDg4RjcsIDB4ODhGRSwgMHgyQzlELA0KLSAgICAweDg5NDAsIDB4ODk0QSwgMHgyQ0E1LCAweDg5NEIsIDB4ODk0QiwgMHgxRkUzLCAweDg5NEMsIDB4ODk0QywgMHgyMzM5LA0KLSAgICAweDg5NEQsIDB4ODk0RCwgMHgyQ0IwLCAweDg5NEUsIDB4ODk0RSwgMHgyMzJCLCAweDg5NEYsIDB4ODk0RiwgMHgyQ0IxLA0KLSAgICAweDg5NTAsIDB4ODk1MCwgMHgyMzJELCAweDg5NTEsIDB4ODk1MywgMHgyQ0IyLCAweDg5NTQsIDB4ODk1NCwgMHgyMTdGLA0KLSAgICAweDg5NTUsIDB4ODk1QywgMHgyQ0I1LCAweDg5NUQsIDB4ODk1RCwgMHgyMUE3LCAweDg5NUUsIDB4ODk1RSwgMHgyQ0JELA0KLSAgICAweDg5NUYsIDB4ODk1RiwgMHgyMzJGLCAweDg5NjAsIDB4ODk2QywgMHgyQ0JFLCAweDg5NkQsIDB4ODk2RCwgMHgxRTdELA0KLSAgICAweDg5NkUsIDB4ODk3MCwgMHgyQ0NCLCAweDg5NzEsIDB4ODk3MSwgMHgyMEQ2LCAweDg5NzIsIDB4ODk3QiwgMHgyQ0NFLA0KLSAgICAweDg5N0MsIDB4ODk3QywgMHgxRUMyLCAweDg5N0QsIDB4ODk3RSwgMHgyQ0Q4LCAweDg5ODAsIDB4ODk4QSwgMHgyQ0RBLA0KLSAgICAweDg5OEIsIDB4ODk4QiwgMHgyMkIyLCAweDg5OEMsIDB4ODk5OCwgMHgyQ0U1LCAweDg5OTksIDB4ODk5OSwgMHgxRURGLA0KLSAgICAweDg5OUEsIDB4ODk5RCwgMHgyQ0YyLCAweDg5OUUsIDB4ODk5RSwgMHgxRUY5LCAweDg5OUYsIDB4ODlBNSwgMHgyQ0Y2LA0KLSAgICAweDg5QTYsIDB4ODlBNiwgMHgyMEQ5LCAweDg5QTcsIDB4ODlBNywgMHgyQ0ZELCAweDg5QTgsIDB4ODlBOCwgMHgxRkRELA0KLSAgICAweDg5QTksIDB4ODlBRSwgMHgyQ0ZFLCAweDg5QUYsIDB4ODlBRiwgMHgyMTY3LCAweDg5QjAsIDB4ODlCOSwgMHgyRDA0LA0KLSAgICAweDg5QkEsIDB4ODlCQSwgMHgyMUVELCAweDg5QkIsIDB4ODlCRCwgMHgyRDBFLCAweDg5QkUsIDB4ODlCRSwgMHgyMDA3LA0KLSAgICAweDg5QkYsIDB4ODlCRiwgMHgyMzI2LCAweDg5QzAsIDB4ODlDMCwgMHgyMzI5LCAweDg5QzEsIDB4ODlDMywgMHgyRDExLA0KLSAgICAweDg5QzQsIDB4ODlDNCwgMHgxRjUyLCAweDg5QzUsIDB4ODlDNSwgMHgyMDNCLCAweDg5QzYsIDB4ODlDNiwgMHgyMzI4LA0KLSAgICAweDg5QzcsIDB4ODlDNywgMHgyRDE0LCAweDg5QzgsIDB4ODlDOCwgMHgyMzI3LCAweDg5QzksIDB4ODlDRCwgMHgyRDE1LA0KLSAgICAweDg5Q0UsIDB4ODlDRSwgMHgxRTJCLCAweDg5Q0YsIDB4ODlEMCwgMHgyRDFBLCAweDg5RDEsIDB4ODlEMSwgMHgyMkFFLA0KLSAgICAweDg5RDIsIDB4ODlENywgMHgyRDFDLCAweDg5RDgsIDB4ODlEOCwgMHgxRjQ5LCAweDg5RDksIDB4ODlEQSwgMHgyRDIyLA0KLSAgICAweDg5REIsIDB4ODlEQiwgMHgyMTM4LCAweDg5REMsIDB4ODlGMywgMHgyRDI0LCAweDg5RjQsIDB4ODlGNCwgMHgyMDgxLA0KLSAgICAweDg5RjUsIDB4ODlGRSwgMHgyRDNDLCAweDhBNDAsIDB4OEE0MCwgMHgyRDQ2LCAweDhBNDEsIDB4OEE0MSwgMHgxRjdDLA0KLSAgICAweDhBNDIsIDB4OEE1OCwgMHgyRDQ3LCAweDhBNTksIDB4OEE1OSwgMHgyMzVCLCAweDhBNUEsIDB4OEE1QSwgMHgxRURFLA0KLSAgICAweDhBNUIsIDB4OEE1QiwgMHgyRDVFLCAweDhBNUMsIDB4OEE1QywgMHgxRkEyLCAweDhBNUQsIDB4OEE1RCwgMHgyRDVGLA0KLSAgICAweDhBNUUsIDB4OEE1RSwgMHgxRUZBLCAweDhBNUYsIDB4OEE3OCwgMHgyRDYwLCAweDhBNzksIDB4OEE3OSwgMHgyMkFELA0KLSAgICAweDhBN0EsIDB4OEE3RSwgMHgyRDdBLCAweDhBODAsIDB4OEFFMywgMHgyRDdGLCAweDhBRTQsIDB4OEFFNCwgMHgyMDNGLA0KLSAgICAweDhBRTUsIDB4OEFGRSwgMHgyREUzLCAweDhCNDAsIDB4OEI0MywgMHgyREZELCAweDhCNDQsIDB4OEI0NCwgMHgxRjBFLA0KLSAgICAweDhCNDUsIDB4OEI0OCwgMHgyRTAxLCAweDhCNDksIDB4OEI0OSwgMHgyM0Y5LCAweDhCNEEsIDB4OEI3OSwgMHgyRTA1LA0KLSAgICAweDhCN0EsIDB4OEI3QSwgMHgyM0ZDLCAweDhCN0IsIDB4OEI3RSwgMHgyRTM1LCAweDhCODAsIDB4OEI4QiwgMHgyRTM5LA0KLSAgICAweDhCOEMsIDB4OEI4QywgMHgyMDY5LCAweDhCOEQsIDB4OEI5RCwgMHgyRTQ1LCAweDhCOUUsIDB4OEI5RSwgMHgyM0Y3LA0KLSAgICAweDhCOUYsIDB4OEJCMiwgMHgyRTU2LCAweDhCQjMsIDB4OEJCMywgMHgyM0Y2LCAweDhCQjQsIDB4OEJCOCwgMHgyRTZBLA0KLSAgICAweDhCQjksIDB4OEJCOSwgMHgyM0ZELCAweDhCQkEsIDB4OEJCRCwgMHgyRTZGLCAweDhCQkUsIDB4OEJCRSwgMHgyM0Y4LA0KLSAgICAweDhCQkYsIDB4OEJDNSwgMHgyRTczLCAweDhCQzYsIDB4OEJDNiwgMHgyM0ZBLCAweDhCQzcsIDB4OEJDNywgMHgyRTdBLA0KLSAgICAweDhCQzgsIDB4OEJDOCwgMHgyM0ZFLCAweDhCQzksIDB4OEJDOSwgMHgxRkE4LCAweDhCQ0EsIDB4OEJEMywgMHgyRTdCLA0KLSAgICAweDhCRDQsIDB4OEJENCwgMHgyNDAxLCAweDhCRDUsIDB4OEJEQiwgMHgyRTg1LCAweDhCREMsIDB4OEJEQywgMHgyM0ZGLA0KLSAgICAweDhCREQsIDB4OEJFNCwgMHgyRThDLCAweDhCRTUsIDB4OEJFNSwgMHgyNDAwLCAweDhCRTYsIDB4OEJFQSwgMHgyRTk0LA0KLSAgICAweDhCRUIsIDB4OEJFQiwgMHgyMjIxLCAweDhCRUMsIDB4OEJFRiwgMHgyRTk5LCAweDhCRjAsIDB4OEJGMCwgMHgyMTIyLA0KLSAgICAweDhCRjEsIDB4OEJGRSwgMHgyRTlELCAweDhDNDAsIDB4OEM0MywgMHgyRUFCLCAweDhDNDQsIDB4OEM0NCwgMHgyM0ZCLA0KLSAgICAweDhDNDUsIDB4OEM0RSwgMHgyRUFGLCAweDhDNEYsIDB4OEM0RiwgMHgyMTVBLCAweDhDNTAsIDB4OEM1NiwgMHgyRUI5LA0KLSAgICAweDhDNTcsIDB4OEM1NywgMHgyMUU1LCAweDhDNTgsIDB4OEM1QiwgMHgyRUMwLCAweDhDNUMsIDB4OEM1QywgMHgyMDU3LA0KLSAgICAweDhDNUQsIDB4OEM3RSwgMHgyRUM0LCAweDhDODAsIDB4OEM4QSwgMHgyRUU2LCAweDhDOEIsIDB4OEM4QiwgMHgyMEU1LA0KLSAgICAweDhDOEMsIDB4OEM4QywgMHgyRUYxLCAweDhDOEQsIDB4OEM4RCwgMHgyMTJGLCAweDhDOEUsIDB4OEM4RSwgMHgyMEEzLA0KLSAgICAweDhDOEYsIDB4OEM4RiwgMHgyMTIxLCAweDhDOTAsIDB4OEM5MCwgMHgyRUYyLCAweDhDOTEsIDB4OEM5MSwgMHgyMUQ0LA0KLSAgICAweDhDOTIsIDB4OEM5MiwgMHgxRkU1LCAweDhDOTMsIDB4OEM5OCwgMHgyRUYzLCAweDhDOTksIDB4OEM5OSwgMHgxRThBLA0KLSAgICAweDhDOUEsIDB4OEM5QSwgMHgxRTM3LCAweDhDOUIsIDB4OENBMSwgMHgyRUY5LCAweDhDQTIsIDB4OENBMiwgMHgxRjlFLA0KLSAgICAweDhDQTMsIDB4OENBMywgMHgyMkE2LCAweDhDQTQsIDB4OENBNCwgMHgyMUU4LCAweDhDQTUsIDB4OENBNSwgMHgyRjAwLA0KLSAgICAweDhDQTYsIDB4OENBNiwgMHgxRURBLCAweDhDQTcsIDB4OENBNywgMHgxRUI5LCAweDhDQTgsIDB4OENCRiwgMHgyRjAxLA0KLSAgICAweDhDQzAsIDB4OENDMCwgMHgyMzVDLCAweDhDQzEsIDB4OENEMSwgMHgyRjE5LCAweDhDRDIsIDB4OENEMiwgMHgyMDUwLA0KLSAgICAweDhDRDMsIDB4OENEMywgMHgxRTY3LCAweDhDRDQsIDB4OENENCwgMHgyRjJBLCAweDhDRDUsIDB4OENENSwgMHgyM0Y0LA0KLSAgICAweDhDRDYsIDB4OENEOCwgMHgyRjJCLCAweDhDRDksIDB4OENEOSwgMHgyMTNFLCAweDhDREEsIDB4OENGOCwgMHgyRjJFLA0KLSAgICAweDhDRjksIDB4OENGOSwgMHgxRjE2LCAweDhDRkEsIDB4OENGRSwgMHgyRjRELCAweDhENDAsIDB4OEQ3MiwgMHgyRjUyLA0KLSAgICAweDhENzMsIDB4OEQ3MywgMHgyMzg5LCAweDhENzQsIDB4OEQ3NCwgMHgyRjg1LCAweDhENzUsIDB4OEQ3NSwgMHgxRUI3LA0KLSAgICAweDhENzYsIDB4OEQ3QSwgMHgyRjg2LCAweDhEN0IsIDB4OEQ3QiwgMHgyMUI0LCAweDhEN0MsIDB4OEQ3RSwgMHgyRjhCLA0KLSAgICAweDhEODAsIDB4OEQ4NywgMHgyRjhFLCAweDhEODgsIDB4OEQ4OCwgMHgyMzhGLCAweDhEODksIDB4OEQ4RSwgMHgyRjk2LA0KLSAgICAweDhEOEYsIDB4OEQ4RiwgMHgxRjFBLCAweDhEOTAsIDB4OEQ5RCwgMHgyRjlDLCAweDhEOUUsIDB4OEQ5RSwgMHgyMzhCLA0KLSAgICAweDhEOUYsIDB4OERCOCwgMHgyRkFBLCAweDhEQjksIDB4OERCOSwgMHgyMzhBLCAweDhEQkEsIDB4OERFMSwgMHgyRkM0LA0KLSAgICAweDhERTIsIDB4OERFMiwgMHgyMzkxLCAweDhERTMsIDB4OERFMywgMHgyRkVDLCAweDhERTQsIDB4OERFNCwgMHgyMjcxLA0KLSAgICAweDhERTUsIDB4OERFNiwgMHgyRkVELCAweDhERTcsIDB4OERFNywgMHgyMzg4LCAweDhERTgsIDB4OERGNiwgMHgyRkVGLA0KLSAgICAweDhERjcsIDB4OERGNywgMHgyMzhFLCAweDhERjgsIDB4OERGRCwgMHgyRkZFLCAweDhERkUsIDB4OERGRSwgMHgyMzhELA0KLSAgICAweDhFNDAsIDB4OEU0NSwgMHgzMDA0LCAweDhFNDYsIDB4OEU0NiwgMHgyMzhDLCAweDhFNDcsIDB4OEU1NSwgMHgzMDBBLA0KLSAgICAweDhFNTYsIDB4OEU1NiwgMHgyMzkwLCAweDhFNTcsIDB4OEU1NywgMHgzMDE5LCAweDhFNTgsIDB4OEU1OCwgMHgyMDMzLA0KLSAgICAweDhFNTksIDB4OEU1OSwgMHgzMDFBLCAweDhFNUEsIDB4OEU1QSwgMHgyMjNDLCAweDhFNUIsIDB4OEU2NywgMHgzMDFCLA0KLSAgICAweDhFNjgsIDB4OEU2OCwgMHgxRkU5LCAweDhFNjksIDB4OEU2RCwgMHgzMDI4LCAweDhFNkUsIDB4OEU2RSwgMHgyMDU1LA0KLSAgICAweDhFNkYsIDB4OEU2RiwgMHgzMDJELCAweDhFNzAsIDB4OEU3MCwgMHgyMzkyLCAweDhFNzEsIDB4OEU3RSwgMHgzMDJFLA0KLSAgICAweDhFODAsIDB4OEU4MCwgMHgyMzI0LCAweDhFODEsIDB4OEU5QSwgMHgzMDNDLCAweDhFOUIsIDB4OEU5QiwgMHgyMTQzLA0KLSAgICAweDhFOUMsIDB4OEU5RSwgMHgzMDU2LCAweDhFOUYsIDB4OEU5RiwgMHgyMTI5LCAweDhFQTAsIDB4OEVBMywgMHgzMDU5LA0KLSAgICAweDhFQTQsIDB4OEVBNCwgMHgyMjc3LCAweDhFQTUsIDB4OEVBNiwgMHgzMDVELCAweDhFQTcsIDB4OEVBNywgMHgxRUE3LA0KLSAgICAweDhFQTgsIDB4OEVBQiwgMHgzMDVGLCAweDhFQUMsIDB4OEVBQywgMHgyMjg1LCAweDhFQUQsIDB4OEVBRCwgMHgzMDYzLA0KLSAgICAweDhFQUUsIDB4OEVBRSwgMHgyMzg0LCAweDhFQUYsIDB4OEVCQywgMHgzMDY0LCAweDhFQkQsIDB4OEVCRCwgMHgyMzg3LA0KLSAgICAweDhFQkUsIDB4OEVCRSwgMHgyMzg2LCAweDhFQkYsIDB4OEVDMiwgMHgzMDcyLCAweDhFQzMsIDB4OEVDMywgMHgyMjkwLA0KLSAgICAweDhFQzQsIDB4OEVDNCwgMHgzMDc2LCAweDhFQzUsIDB4OEVDNSwgMHgxRTQ0LCAweDhFQzYsIDB4OEVDQywgMHgzMDc3LA0KLSAgICAweDhFQ0QsIDB4OEVDRCwgMHgxRTMyLCAweDhFQ0UsIDB4OEVDRSwgMHgyMzg1LCAweDhFQ0YsIDB4OEVENSwgMHgzMDdFLA0KLSAgICAweDhFRDYsIDB4OEVENiwgMHgxRjEzLCAweDhFRDcsIDB4OEVENywgMHgxRjczLCAweDhFRDgsIDB4OEVFQiwgMHgzMDg1LA0KLSAgICAweDhFRUMsIDB4OEVFQywgMHgxRkUwLCAweDhFRUQsIDB4OEVGRSwgMHgzMDk5LCAweDhGNDAsIDB4OEY1MSwgMHgzMEFCLA0KLSAgICAweDhGNTIsIDB4OEY1MiwgMHgyMDg3LCAweDhGNTMsIDB4OEY1MywgMHgxRTc4LCAweDhGNTQsIDB4OEY1NCwgMHgyM0FFLA0KLSAgICAweDhGNTUsIDB4OEY1NSwgMHgxRUY2LCAweDhGNTYsIDB4OEY1NiwgMHgxRjMxLCAweDhGNTcsIDB4OEY1QywgMHgzMEJELA0KLSAgICAweDhGNUQsIDB4OEY1RCwgMHgyMDQ1LCAweDhGNUUsIDB4OEY2MywgMHgzMEMzLCAweDhGNjQsIDB4OEY2NCwgMHgyMTc4LA0KLSAgICAweDhGNjUsIDB4OEY3RSwgMHgzMEM5LCAweDhGODAsIDB4OEY4NSwgMHgzMEUzLCAweDhGODYsIDB4OEY4NiwgMHgyM0Y1LA0KLSAgICAweDhGODcsIDB4OEY4NywgMHgzMEU5LCAweDhGODgsIDB4OEY4OCwgMHgyMjc1LCAweDhGODksIDB4OEY5NCwgMHgzMEVBLA0KLSAgICAweDhGOTUsIDB4OEY5NSwgMHgyNjZFLCAweDhGOTYsIDB4OEY5NiwgMHgzMEY2LCAweDhGOTcsIDB4OEY5NywgMHgxRUIwLA0KLSAgICAweDhGOTgsIDB4OEY5QSwgMHgzMEY3LCAweDhGOUIsIDB4OEY5QiwgMHgyMDgzLCAweDhGOUMsIDB4OEY5QywgMHgzMEZBLA0KLSAgICAweDhGOUQsIDB4OEY5RCwgMHgyMTg4LCAweDhGOUUsIDB4OEZBMCwgMHgzMEZCLCAweDhGQTEsIDB4OEZBMSwgMHgyNjdDLA0KLSAgICAweDhGQTIsIDB4OEZCQywgMHgzMEZFLCAweDhGQkQsIDB4OEZCRCwgMHgxRkM1LCAweDhGQkUsIDB4OEZDMywgMHgzMTE5LA0KLSAgICAweDhGQzQsIDB4OEZDNCwgMHgxRUExLCAweDhGQzUsIDB4OEZDNSwgMHgzMTFGLCAweDhGQzYsIDB4OEZDNiwgMHgyMzkzLA0KLSAgICAweDhGQzcsIDB4OEZDQywgMHgzMTIwLCAweDhGQ0QsIDB4OEZDRCwgMHgxRjBCLCAweDhGQ0UsIDB4OEZENywgMHgzMTI2LA0KLSAgICAweDhGRDgsIDB4OEZEOCwgMHgxRTdDLCAweDhGRDksIDB4OEZGRSwgMHgzMTMwLCAweDkwNDAsIDB4OTA3RSwgMHgzMTU2LA0KLSAgICAweDkwODAsIDB4OTA5QywgMHgzMTk1LCAweDkwOUQsIDB4OTA5RCwgMHgyM0I0LCAweDkwOUUsIDB4OTA5RSwgMHgyMDdFLA0KLSAgICAweDkwOUYsIDB4OTBCOSwgMHgzMUIyLCAweDkwQkEsIDB4OTBCQSwgMHgxRUUzLCAweDkwQkIsIDB4OTBCRiwgMHgzMUNELA0KLSAgICAweDkwQzAsIDB4OTBDMCwgMHgyMDk1LCAweDkwQzEsIDB4OTBDMSwgMHgyM0JCLCAweDkwQzIsIDB4OTBDNCwgMHgzMUQyLA0KLSAgICAweDkwQzUsIDB4OTBDNSwgMHgyM0I5LCAweDkwQzYsIDB4OTBEQSwgMHgzMUQ1LCAweDkwREIsIDB4OTBEQiwgMHgxRTI4LA0KLSAgICAweDkwREMsIDB4OTBEQywgMHgyM0JELCAweDkwREQsIDB4OTBFQywgMHgzMUVBLCAweDkwRUQsIDB4OTBFRCwgMHgyM0I1LA0KLSAgICAweDkwRUUsIDB4OTBFRiwgMHgzMUZBLCAweDkwRjAsIDB4OTBGMCwgMHgyM0JBLCAweDkwRjEsIDB4OTBGNiwgMHgzMUZDLA0KLSAgICAweDkwRjcsIDB4OTBGNywgMHgyM0IzLCAweDkwRjgsIDB4OTBGRSwgMHgzMjAyLCAweDkxNDAsIDB4OTE0MSwgMHgzMjA5LA0KLSAgICAweDkxNDIsIDB4OTE0MiwgMHgyMTYyLCAweDkxNDMsIDB4OTE0QSwgMHgzMjBCLCAweDkxNEIsIDB4OTE0QiwgMHgxRTVFLA0KLSAgICAweDkxNEMsIDB4OTE0QywgMHgzMjEzLCAweDkxNEQsIDB4OTE0RCwgMHgxRTVELCAweDkxNEUsIDB4OTE1MCwgMHgzMjE0LA0KLSAgICAweDkxNTEsIDB4OTE1MSwgMHgyM0I3LCAweDkxNTIsIDB4OTE1MywgMHgzMjE3LCAweDkxNTQsIDB4OTE1NCwgMHgxRjJGLA0KLSAgICAweDkxNTUsIDB4OTE1NSwgMHgyNERGLCAweDkxNTYsIDB4OTE1OCwgMHgzMjE5LCAweDkxNTksIDB4OTE1OSwgMHgyM0IyLA0KLSAgICAweDkxNUEsIDB4OTE1QSwgMHgyMTRFLCAweDkxNUIsIDB4OTE1QywgMHgzMjFDLCAweDkxNUQsIDB4OTE1RCwgMHgyMDUyLA0KLSAgICAweDkxNUUsIDB4OTE2MCwgMHgzMjFFLCAweDkxNjEsIDB4OTE2MSwgMHgyM0JDLCAweDkxNjIsIDB4OTE2MiwgMHgzMjIxLA0KLSAgICAweDkxNjMsIDB4OTE2MywgMHgyMEVCLCAweDkxNjQsIDB4OTE2RCwgMHgzMjIyLCAweDkxNkUsIDB4OTE2RSwgMHgyMjMyLA0KLSAgICAweDkxNkYsIDB4OTE3NSwgMHgzMjJDLCAweDkxNzYsIDB4OTE3NiwgMHgxRTNGLCAweDkxNzcsIDB4OTE3OSwgMHgzMjMzLA0KLSAgICAweDkxN0EsIDB4OTE3QSwgMHgyMDFCLCAweDkxN0IsIDB4OTE3QiwgMHgyMEJDLCAweDkxN0MsIDB4OTE3QywgMHgyM0JFLA0KLSAgICAweDkxN0QsIDB4OTE3RSwgMHgzMjM2LCAweDkxODAsIDB4OTE4MywgMHgzMjM4LCAweDkxODQsIDB4OTE4NCwgMHgxRUFFLA0KLSAgICAweDkxODUsIDB4OTE4QywgMHgzMjNDLCAweDkxOEQsIDB4OTE4RCwgMHgxRUZCLCAweDkxOEUsIDB4OTE5MCwgMHgzMjQ0LA0KLSAgICAweDkxOTEsIDB4OTE5MSwgMHgyMDg5LCAweDkxOTIsIDB4OTE5MiwgMHgzMjQ3LCAweDkxOTMsIDB4OTE5MywgMHgyM0IxLA0KLSAgICAweDkxOTQsIDB4OTE5NiwgMHgzMjQ4LCAweDkxOTcsIDB4OTE5NywgMHgyMUM0LCAweDkxOTgsIDB4OTE5QSwgMHgzMjRCLA0KLSAgICAweDkxOUIsIDB4OTE5QiwgMHgyMjE0LCAweDkxOUMsIDB4OTFBOCwgMHgzMjRFLCAweDkxQTksIDB4OTFBOSwgMHgxRkRFLA0KLSAgICAweDkxQUEsIDB4OTFBQSwgMHgyMjIzLCAweDkxQUIsIDB4OTFBQiwgMHgyM0I2LCAweDkxQUMsIDB4OTFCOSwgMHgzMjVCLA0KLSAgICAweDkxQkEsIDB4OTFCQSwgMHgyNjhDLCAweDkxQkIsIDB4OTFCQiwgMHgyNERFLCAweDkxQkMsIDB4OTFCRSwgMHgzMjY5LA0KLSAgICAweDkxQkYsIDB4OTFCRiwgMHgyNEUwLCAweDkxQzAsIDB4OTFDMiwgMHgzMjZDLCAweDkxQzMsIDB4OTFDMywgMHgyM0I4LA0KLSAgICAweDkxQzQsIDB4OTFDQywgMHgzMjZGLCAweDkxQ0QsIDB4OTFDRCwgMHgxRTgxLCAweDkxQ0UsIDB4OTFDRiwgMHgzMjc4LA0KLSAgICAweDkxRDAsIDB4OTFEMCwgMHgxRkZFLCAweDkxRDEsIDB4OTFEMSwgMHgxRjUxLCAweDkxRDIsIDB4OTFEMiwgMHgyMUUxLA0KLSAgICAweDkxRDMsIDB4OTFEMywgMHgzMjdBLCAweDkxRDQsIDB4OTFENCwgMHgyM0IwLCAweDkxRDUsIDB4OTFENSwgMHgzMjdCLA0KLSAgICAweDkxRDYsIDB4OTFENiwgMHgxRkNFLCAweDkxRDcsIDB4OTFENywgMHgzMjdDLCAweDkxRDgsIDB4OTFEOCwgMHgyMTFFLA0KLSAgICAweDkxRDksIDB4OTFEOSwgMHgyMDIxLCAweDkxREEsIDB4OTFERSwgMHgzMjdELCAweDkxREYsIDB4OTFERiwgMHgyNEUxLA0KLSAgICAweDkxRTAsIDB4OTFFMSwgMHgzMjgyLCAweDkxRTIsIDB4OTFFMiwgMHgyNEEzLCAweDkxRTMsIDB4OTFFOSwgMHgzMjg0LA0KLSAgICAweDkxRUEsIDB4OTFFQSwgMHgyNEE0LCAweDkxRUIsIDB4OTFFRiwgMHgzMjhCLCAweDkxRjAsIDB4OTFGMCwgMHgyMjczLA0KLSAgICAweDkxRjEsIDB4OTFGMSwgMHgzMjkwLCAweDkxRjIsIDB4OTFGMiwgMHgyMUIwLCAweDkxRjMsIDB4OTFGRSwgMHgzMjkxLA0KLSAgICAweDkyNDAsIDB4OTI3RSwgMHgzMjlELCAweDkyODAsIDB4OTJCNSwgMHgzMkRDLCAweDkyQjYsIDB4OTJCNiwgMHgyMUQxLA0KLSAgICAweDkyQjcsIDB4OTJDRCwgMHgzMzEyLCAweDkyQ0UsIDB4OTJDRSwgMHgyMTFDLCAweDkyQ0YsIDB4OTJDRiwgMHgzMzI5LA0KLSAgICAweDkyRDAsIDB4OTJEMCwgMHgyMzVELCAweDkyRDEsIDB4OTJEMywgMHgzMzJBLCAweDkyRDQsIDB4OTJENCwgMHgyNjgyLA0KLSAgICAweDkyRDUsIDB4OTJERSwgMHgzMzJELCAweDkyREYsIDB4OTJERiwgMHgyMTBELCAweDkyRTAsIDB4OTJFMCwgMHgyMDVBLA0KLSAgICAweDkyRTEsIDB4OTJGRCwgMHgzMzM3LCAweDkyRkUsIDB4OTJGRSwgMHgxRjhELCAweDkzNDAsIDB4OTM0RiwgMHgzMzU0LA0KLSAgICAweDkzNTAsIDB4OTM1MCwgMHgyMUZGLCAweDkzNTEsIDB4OTM1QywgMHgzMzY0LCAweDkzNUQsIDB4OTM1RCwgMHgxRjU4LA0KLSAgICAweDkzNUUsIDB4OTM2RiwgMHgzMzcwLCAweDkzNzAsIDB4OTM3MCwgMHgyMTVCLCAweDkzNzEsIDB4OTM3NSwgMHgzMzgyLA0KLSAgICAweDkzNzYsIDB4OTM3NiwgMHgxRUI2LCAweDkzNzcsIDB4OTM3RSwgMHgzMzg3LCAweDkzODAsIDB4OTM4QiwgMHgzMzhGLA0KLSAgICAweDkzOEMsIDB4OTM4QywgMHgyMERCLCAweDkzOEQsIDB4OTM5QywgMHgzMzlCLCAweDkzOUQsIDB4OTM5RCwgMHgyMzYwLA0KLSAgICAweDkzOUUsIDB4OTNBNCwgMHgzM0FCLCAweDkzQTUsIDB4OTNBNSwgMHgyMzYxLCAweDkzQTYsIDB4OTNBNiwgMHgzM0IyLA0KLSAgICAweDkzQTcsIDB4OTNBNywgMHgyMDQwLCAweDkzQTgsIDB4OTNCMywgMHgzM0IzLCAweDkzQjQsIDB4OTNCNCwgMHgyMjhFLA0KLSAgICAweDkzQjUsIDB4OTNCNywgMHgzM0JGLCAweDkzQjgsIDB4OTNCOCwgMHgxRkRGLCAweDkzQjksIDB4OTNCQSwgMHgzM0MyLA0KLSAgICAweDkzQkIsIDB4OTNCQiwgMHgyMzVFLCAweDkzQkMsIDB4OTNCQywgMHgzM0M0LCAweDkzQkQsIDB4OTNCRCwgMHgxRTZBLA0KLSAgICAweDkzQkUsIDB4OTNDNSwgMHgzM0M1LCAweDkzQzYsIDB4OTNDNiwgMHgyMDAyLCAweDkzQzcsIDB4OTNDRSwgMHgzM0NELA0KLSAgICAweDkzQ0YsIDB4OTNDRiwgMHgyMDkzLCAweDkzRDAsIDB4OTNENiwgMHgzM0Q1LCAweDkzRDcsIDB4OTNENywgMHgyMzVGLA0KLSAgICAweDkzRDgsIDB4OTNEQSwgMHgzM0RDLCAweDkzREIsIDB4OTNEQiwgMHgxRUFDLCAweDkzREMsIDB4OTNEQywgMHgxRTU0LA0KLSAgICAweDkzREQsIDB4OTNFMCwgMHgzM0RGLCAweDkzRTEsIDB4OTNFMSwgMHgxRjA4LCAweDkzRTIsIDB4OTNFMywgMHgzM0UzLA0KLSAgICAweDkzRTQsIDB4OTNFNCwgMHgyMEMwLCAweDkzRTUsIDB4OTNFNSwgMHgyMzYyLCAweDkzRTYsIDB4OTNFOCwgMHgzM0U1LA0KLSAgICAweDkzRTksIDB4OTNFOSwgMHgyMTYwLCAweDkzRUEsIDB4OTNFQSwgMHgzM0U4LCAweDkzRUIsIDB4OTNFQiwgMHgyMTlELA0KLSAgICAweDkzRUMsIDB4OTNFQywgMHgxRjhFLCAweDkzRUQsIDB4OTNFRCwgMHgyMjJELCAweDkzRUUsIDB4OTNFRSwgMHgzM0U5LA0KLSAgICAweDkzRUYsIDB4OTNFRiwgMHgyMDQ3LCAweDkzRjAsIDB4OTNGMCwgMHgzM0VBLCAweDkzRjEsIDB4OTNGMSwgMHgyMjYyLA0KLSAgICAweDkzRjIsIDB4OTNGMywgMHgzM0VCLCAweDkzRjQsIDB4OTNGNCwgMHgxRjY3LCAweDkzRjUsIDB4OTNGNSwgMHgxRUIyLA0KLSAgICAweDkzRjYsIDB4OTNGOSwgMHgzM0VELCAweDkzRkEsIDB4OTNGQSwgMHgxRUE5LCAweDkzRkIsIDB4OTNGRCwgMHgzM0YxLA0KLSAgICAweDkzRkUsIDB4OTNGRSwgMHgxRkNDLCAweDk0NDAsIDB4OTQ0MywgMHgzM0Y0LCAweDk0NDQsIDB4OTQ0NCwgMHgxRjcyLA0KLSAgICAweDk0NDUsIDB4OTQ0QywgMHgzM0Y4LCAweDk0NEQsIDB4OTQ0RCwgMHgyMDk4LCAweDk0NEUsIDB4OTQ0RiwgMHgzNDAwLA0KLSAgICAweDk0NTAsIDB4OTQ1MCwgMHgxRTUyLCAweDk0NTEsIDB4OTQ1MSwgMHgyMEE0LCAweDk0NTIsIDB4OTQ1MiwgMHgxRjFDLA0KLSAgICAweDk0NTMsIDB4OTQ1MywgMHgyMjhGLCAweDk0NTQsIDB4OTQ1NCwgMHgzNDAyLCAweDk0NTUsIDB4OTQ1NSwgMHgxRkVELA0KLSAgICAweDk0NTYsIDB4OTQ1NywgMHgzNDAzLCAweDk0NTgsIDB4OTQ1OCwgMHgyMzY1LCAweDk0NTksIDB4OTQ1QSwgMHgzNDA1LA0KLSAgICAweDk0NUIsIDB4OTQ1QiwgMHgxRTJELCAweDk0NUMsIDB4OTQ1QywgMHgyMTUyLCAweDk0NUQsIDB4OTQ1RCwgMHgyMzY2LA0KLSAgICAweDk0NUUsIDB4OTQ1RSwgMHgzNDA3LCAweDk0NUYsIDB4OTQ1RiwgMHgyMEZBLCAweDk0NjAsIDB4OTQ2MywgMHgzNDA4LA0KLSAgICAweDk0NjQsIDB4OTQ2NCwgMHgyMzYzLCAweDk0NjUsIDB4OTQ2NSwgMHgzNDBDLCAweDk0NjYsIDB4OTQ2NiwgMHgyMDlBLA0KLSAgICAweDk0NjcsIDB4OTQ2RCwgMHgzNDBELCAweDk0NkUsIDB4OTQ2RSwgMHgyMDNDLCAweDk0NkYsIDB4OTQ3MSwgMHgzNDE0LA0KLSAgICAweDk0NzIsIDB4OTQ3MiwgMHgxRkY2LCAweDk0NzMsIDB4OTQ3MywgMHgzNDE3LCAweDk0NzQsIDB4OTQ3NCwgMHgyMzY0LA0KLSAgICAweDk0NzUsIDB4OTQ3NSwgMHgzNDE4LCAweDk0NzYsIDB4OTQ3NiwgMHgxRTY5LCAweDk0NzcsIDB4OTQ3NywgMHgzNDE5LA0KLSAgICAweDk0NzgsIDB4OTQ3OCwgMHgyMzY3LCAweDk0NzksIDB4OTQ3OSwgMHgzNDFBLCAweDk0N0EsIDB4OTQ3QSwgMHgyMTFELA0KLSAgICAweDk0N0IsIDB4OTQ3RSwgMHgzNDFCLCAweDk0ODAsIDB4OTQ4MCwgMHgyMjU5LCAweDk0ODEsIDB4OTQ4MSwgMHgyMDU2LA0KLSAgICAweDk0ODIsIDB4OTQ4MiwgMHgyMTYzLCAweDk0ODMsIDB4OTQ4NiwgMHgzNDFGLCAweDk0ODcsIDB4OTQ4NywgMHgxRkE5LA0KLSAgICAweDk0ODgsIDB4OTQ4OCwgMHgxRkZDLCAweDk0ODksIDB4OTRBMCwgMHgzNDIzLCAweDk0QTEsIDB4OTRBMSwgMHgxRTJFLA0KLSAgICAweDk0QTIsIDB4OTRCMiwgMHgzNDNCLCAweDk0QjMsIDB4OTRCMywgMHgxRUJDLCAweDk0QjQsIDB4OTRCNCwgMHgzNDRDLA0KLSAgICAweDk0QjUsIDB4OTRCNSwgMHgyMTQyLCAweDk0QjYsIDB4OTRCRSwgMHgzNDRELCAweDk0QkYsIDB4OTRCRiwgMHgyMDFFLA0KLSAgICAweDk0QzAsIDB4OTRDMCwgMHgxRTQzLCAweDk0QzEsIDB4OTRDQiwgMHgzNDU2LCAweDk0Q0MsIDB4OTRDQywgMHgyNEQ0LA0KLSAgICAweDk0Q0QsIDB4OTRENywgMHgzNDYxLCAweDk0RDgsIDB4OTREOCwgMHgyMjZGLCAweDk0RDksIDB4OTRERiwgMHgzNDZDLA0KLSAgICAweDk0RTAsIDB4OTRFMCwgMHgxRUQ3LCAweDk0RTEsIDB4OTRGRSwgMHgzNDczLCAweDk1NDAsIDB4OTU3MSwgMHgzNDkxLA0KLSAgICAweDk1NzIsIDB4OTU3MiwgMHgyMTJELCAweDk1NzMsIDB4OTU3RSwgMHgzNEMzLCAweDk1ODAsIDB4OTU4MiwgMHgzNENGLA0KLSAgICAweDk1ODMsIDB4OTU4MywgMHgyMjlCLCAweDk1ODQsIDB4OTU5RCwgMHgzNEQyLCAweDk1OUUsIDB4OTU5RSwgMHgyMjU2LA0KLSAgICAweDk1OUYsIDB4OTU5RiwgMHgyNEE4LCAweDk1QTAsIDB4OTVCMiwgMHgzNEVDLCAweDk1QjMsIDB4OTVCMywgMHgxRTc5LA0KLSAgICAweDk1QjQsIDB4OTVCOSwgMHgzNEZGLCAweDk1QkEsIDB4OTVCQSwgMHgyMjVBLCAweDk1QkIsIDB4OTVDRSwgMHgzNTA1LA0KLSAgICAweDk1Q0YsIDB4OTVDRiwgMHgyNEE3LCAweDk1RDAsIDB4OTVEMCwgMHgzNTE5LCAweDk1RDEsIDB4OTVEMSwgMHgyNjg2LA0KLSAgICAweDk1RDIsIDB4OTVEMiwgMHgyNEE2LCAweDk1RDMsIDB4OTVEMywgMHgzNTFBLCAweDk1RDQsIDB4OTVENCwgMHgyMUNFLA0KLSAgICAweDk1RDUsIDB4OTVFMCwgMHgzNTFCLCAweDk1RTEsIDB4OTVFMSwgMHgyNEE5LCAweDk1RTIsIDB4OTVFNiwgMHgzNTI3LA0KLSAgICAweDk1RTcsIDB4OTVFNywgMHgxRkU3LCAweDk1RTgsIDB4OTVGMCwgMHgzNTJDLCAweDk1RjEsIDB4OTVGMSwgMHgyMTEyLA0KLSAgICAweDk1RjIsIDB4OTVGNywgMHgzNTM1LCAweDk1RjgsIDB4OTVGOCwgMHgyMTNDLCAweDk1RjksIDB4OTVGRCwgMHgzNTNCLA0KLSAgICAweDk1RkUsIDB4OTVGRSwgMHgxRjVDLCAweDk2NDAsIDB4OTY1NSwgMHgzNTQwLCAweDk2NTYsIDB4OTY1NiwgMHgyNEM0LA0KLSAgICAweDk2NTcsIDB4OTY3QiwgMHgzNTU2LCAweDk2N0MsIDB4OTY3QywgMHgxRUNDLCAweDk2N0QsIDB4OTY3RSwgMHgzNTdCLA0KLSAgICAweDk2ODAsIDB4OTZGRSwgMHgzNTdELCAweDk3NDAsIDB4OTc2NiwgMHgzNUZDLCAweDk3NjcsIDB4OTc2NywgMHgyNDZBLA0KLSAgICAweDk3NjgsIDB4OTc2QiwgMHgzNjIzLCAweDk3NkMsIDB4OTc2QywgMHgyMTc1LCAweDk3NkQsIDB4OTc2RCwgMHgzNjI3LA0KLSAgICAweDk3NkUsIDB4OTc2RSwgMHgyNDZELCAweDk3NkYsIDB4OTc3RSwgMHgzNjI4LCAweDk3ODAsIDB4OTc5NSwgMHgzNjM4LA0KLSAgICAweDk3OTYsIDB4OTc5NiwgMHgyNDZCLCAweDk3OTcsIDB4OTc5NywgMHgyMjVGLCAweDk3OTgsIDB4OTc5QywgMHgzNjRFLA0KLSAgICAweDk3OUQsIDB4OTc5RCwgMHgxRUNFLCAweDk3OUUsIDB4OTdBMiwgMHgzNjUzLCAweDk3QTMsIDB4OTdBMywgMHgyMjcyLA0KLSAgICAweDk3QTQsIDB4OTdCRSwgMHgzNjU4LCAweDk3QkYsIDB4OTdCRiwgMHgyNDczLCAweDk3QzAsIDB4OTdFRCwgMHgzNjczLA0KLSAgICAweDk3RUUsIDB4OTdFRSwgMHgyMUZFLCAweDk3RUYsIDB4OTdGNiwgMHgzNkExLCAweDk3RjcsIDB4OTdGNywgMHgxRUZFLA0KLSAgICAweDk3RjgsIDB4OTdGRSwgMHgzNkE5LCAweDk4NDAsIDB4OTg0NCwgMHgzNkIwLCAweDk4NDUsIDB4OTg0NSwgMHgyNDc1LA0KLSAgICAweDk4NDYsIDB4OTg0OCwgMHgzNkI1LCAweDk4NDksIDB4OTg0OSwgMHgyMjBBLCAweDk4NEEsIDB4OTg0RSwgMHgzNkI4LA0KLSAgICAweDk4NEYsIDB4OTg0RiwgMHgxRjZGLCAweDk4NTAsIDB4OTg3MCwgMHgzNkJELCAweDk4NzEsIDB4OTg3MSwgMHgyNDY4LA0KLSAgICAweDk4NzIsIDB4OTg3MiwgMHgzNkRFLCAweDk4NzMsIDB4OTg3MywgMHgyMTAwLCAweDk4NzQsIDB4OTg3RSwgMHgzNkRGLA0KLSAgICAweDk4ODAsIDB4OTg4MCwgMHgzNkVBLCAweDk4ODEsIDB4OTg4MSwgMHgyNDc2LCAweDk4ODIsIDB4OTg4QSwgMHgzNkVCLA0KLSAgICAweDk4OEIsIDB4OTg4QiwgMHgxRjI3LCAweDk4OEMsIDB4OTg4QywgMHgyMEQ3LCAweDk4OEQsIDB4OTg5RiwgMHgzNkY0LA0KLSAgICAweDk4QTAsIDB4OThBMCwgMHgyNDdDLCAweDk4QTEsIDB4OThBOSwgMHgzNzA3LCAweDk4QUEsIDB4OThBQSwgMHgxRkExLA0KLSAgICAweDk4QUIsIDB4OThCNSwgMHgzNzEwLCAweDk4QjYsIDB4OThCNiwgMHgyMkFBLCAweDk4QjcsIDB4OThCNywgMHgyMDA1LA0KLSAgICAweDk4QjgsIDB4OThCOSwgMHgzNzFCLCAweDk4QkEsIDB4OThCQSwgMHgyNDZDLCAweDk4QkIsIDB4OThDNiwgMHgzNzFELA0KLSAgICAweDk4QzcsIDB4OThDNywgMHgyMDNFLCAweDk4QzgsIDB4OThDQSwgMHgzNzI5LCAweDk4Q0IsIDB4OThDQiwgMHgxRTRDLA0KLSAgICAweDk4Q0MsIDB4OThDRiwgMHgzNzJDLCAweDk4RDAsIDB4OThEMCwgMHgyMTNBLCAweDk4RDEsIDB4OThEMiwgMHgzNzMwLA0KLSAgICAweDk4RDMsIDB4OThEMywgMHgyMjA0LCAweDk4RDQsIDB4OThFMiwgMHgzNzMyLCAweDk4RTMsIDB4OThFMywgMHgyMEMzLA0KLSAgICAweDk4RTQsIDB4OThFNCwgMHgyMTQwLCAweDk4RTUsIDB4OThFNSwgMHgyNDc3LCAweDk4RTYsIDB4OThFRSwgMHgzNzQxLA0KLSAgICAweDk4RUYsIDB4OThFRiwgMHgyNDc0LCAweDk4RjAsIDB4OThGMSwgMHgzNzRBLCAweDk4RjIsIDB4OThGMiwgMHgyMERELA0KLSAgICAweDk4RjMsIDB4OThGRSwgMHgzNzRDLCAweDk5NDAsIDB4OTk0MiwgMHgzNzU4LCAweDk5NDMsIDB4OTk0MywgMHgxRjY4LA0KLSAgICAweDk5NDQsIDB4OTk0NCwgMHgzNzVCLCAweDk5NDUsIDB4OTk0NSwgMHgyMTg1LCAweDk5NDYsIDB4OTk2NSwgMHgzNzVDLA0KLSAgICAweDk5NjYsIDB4OTk2NiwgMHgyNDcyLCAweDk5NjcsIDB4OTk2RCwgMHgzNzdDLCAweDk5NkUsIDB4OTk2RSwgMHgxRUI1LA0KLSAgICAweDk5NkYsIDB4OTk3NCwgMHgzNzgzLCAweDk5NzUsIDB4OTk3NSwgMHgyNDc4LCAweDk5NzYsIDB4OTk3OSwgMHgzNzg5LA0KLSAgICAweDk5N0EsIDB4OTk3QSwgMHgxRjhCLCAweDk5N0IsIDB4OTk3QiwgMHgyNDg0LCAweDk5N0MsIDB4OTk3RSwgMHgzNzhELA0KLSAgICAweDk5ODAsIDB4OTk4NCwgMHgzNzkwLCAweDk5ODUsIDB4OTk4NSwgMHgyNjk5LCAweDk5ODYsIDB4OTk4OCwgMHgzNzk1LA0KLSAgICAweDk5ODksIDB4OTk4OSwgMHgyNDgyLCAweDk5OEEsIDB4OTk4RCwgMHgzNzk4LCAweDk5OEUsIDB4OTk4RSwgMHgyMEExLA0KLSAgICAweDk5OEYsIDB4OTk5MCwgMHgzNzlDLCAweDk5OTEsIDB4OTk5MSwgMHgxRjkyLCAweDk5OTIsIDB4OTk5OCwgMHgzNzlFLA0KLSAgICAweDk5OTksIDB4OTk5OSwgMHgxRjM4LCAweDk5OUEsIDB4OTlBOCwgMHgzN0E1LCAweDk5QTksIDB4OTlBOSwgMHgyNDg1LA0KLSAgICAweDk5QUEsIDB4OTlBRiwgMHgzN0I0LCAweDk5QjAsIDB4OTlCMCwgMHgyNDgwLCAweDk5QjEsIDB4OTlCMSwgMHgyNDZFLA0KLSAgICAweDk5QjIsIDB4OTlCMiwgMHgzN0JBLCAweDk5QjMsIDB4OTlCMywgMHgyNDdCLCAweDk5QjQsIDB4OTlCNCwgMHgyNDg2LA0KLSAgICAweDk5QjUsIDB4OTlCNSwgMHgyNDcxLCAweDk5QjYsIDB4OTlCQywgMHgzN0JCLCAweDk5QkQsIDB4OTlCRCwgMHgyNDgzLA0KLSAgICAweDk5QkUsIDB4OTlCRSwgMHgyNDcwLCAweDk5QkYsIDB4OTlCRiwgMHgzN0MyLCAweDk5QzAsIDB4OTlDMCwgMHgyNDY5LA0KLSAgICAweDk5QzEsIDB4OTlDMSwgMHgzN0MzLCAweDk5QzIsIDB4OTlDMiwgMHgyNDdGLCAweDk5QzMsIDB4OTlDOCwgMHgzN0M0LA0KLSAgICAweDk5QzksIDB4OTlDOSwgMHgyNDZGLCAweDk5Q0EsIDB4OTlDRCwgMHgzN0NBLCAweDk5Q0UsIDB4OTlDRSwgMHgyNDgxLA0KLSAgICAweDk5Q0YsIDB4OTlEMCwgMHgzN0NFLCAweDk5RDEsIDB4OTlEMSwgMHgyMjIwLCAweDk5RDIsIDB4OTlEOSwgMHgzN0QwLA0KLSAgICAweDk5REEsIDB4OTlEQSwgMHgxRkY1LCAweDk5REIsIDB4OTlERiwgMHgzN0Q4LCAweDk5RTAsIDB4OTlFMCwgMHgyMEY0LA0KLSAgICAweDk5RTEsIDB4OTlFNCwgMHgzN0RELCAweDk5RTUsIDB4OTlFNSwgMHgyNDdELCAweDk5RTYsIDB4OTlFNywgMHgzN0UxLA0KLSAgICAweDk5RTgsIDB4OTlFOCwgMHgyNDc5LCAweDk5RTksIDB4OTlFQiwgMHgzN0UzLCAweDk5RUMsIDB4OTlFQywgMHgyNDdFLA0KLSAgICAweDk5RUQsIDB4OTlGMywgMHgzN0U2LCAweDk5RjQsIDB4OTlGNCwgMHgyNDdBLCAweDk5RjUsIDB4OTlGRSwgMHgzN0VELA0KLSAgICAweDlBNDAsIDB4OUE0OSwgMHgzN0Y3LCAweDlBNEEsIDB4OUE0QSwgMHgyMEUzLCAweDlBNEIsIDB4OUE1NiwgMHgzODAxLA0KLSAgICAweDlBNTcsIDB4OUE1NywgMHgyMEFELCAweDlBNTgsIDB4OUE2NCwgMHgzODBELCAweDlBNjUsIDB4OUE2NSwgMHgyNENCLA0KLSAgICAweDlBNjYsIDB4OUE2NiwgMHgzODFBLCAweDlBNjcsIDB4OUE2NywgMHgxRjUzLCAweDlBNjgsIDB4OUE3MCwgMHgzODFCLA0KLSAgICAweDlBNzEsIDB4OUE3MSwgMHgyMTU5LCAweDlBNzIsIDB4OUE3NSwgMHgzODI0LCAweDlBNzYsIDB4OUE3NiwgMHgyMDEzLA0KLSAgICAweDlBNzcsIDB4OUE3NywgMHgxRjMzLCAweDlBNzgsIDB4OUE3RSwgMHgzODI4LCAweDlBODAsIDB4OUE4NywgMHgzODJGLA0KLSAgICAweDlBODgsIDB4OUE4OCwgMHgxRTVDLCAweDlBODksIDB4OUE4QiwgMHgzODM3LCAweDlBOEMsIDB4OUE4QywgMHgyNDg4LA0KLSAgICAweDlBOEQsIDB4OUE5MCwgMHgzODNBLCAweDlBOTEsIDB4OUE5MSwgMHgyNDg3LCAweDlBOTIsIDB4OUE5NiwgMHgzODNFLA0KLSAgICAweDlBOTcsIDB4OUE5NywgMHgyNDhBLCAweDlBOTgsIDB4OUE5OSwgMHgzODQzLCAweDlBOUEsIDB4OUE5QSwgMHgyNDg5LA0KLSAgICAweDlBOUIsIDB4OUE5QiwgMHgyNDhCLCAweDlBOUMsIDB4OUE5RCwgMHgzODQ1LCAweDlBOUUsIDB4OUE5RSwgMHgxRjgzLA0KLSAgICAweDlBOUYsIDB4OUFBMSwgMHgzODQ3LCAweDlBQTIsIDB4OUFBMiwgMHgyMTBGLCAweDlBQTMsIDB4OUFBMywgMHgxRkRCLA0KLSAgICAweDlBQTQsIDB4OUFBOSwgMHgzODRBLCAweDlBQUEsIDB4OUFBQSwgMHgyMEFGLCAweDlBQUIsIDB4OUFDRiwgMHgzODUwLA0KLSAgICAweDlBRDAsIDB4OUFEMCwgMHgyNEMwLCAweDlBRDEsIDB4OUFENSwgMHgzODc1LCAweDlBRDYsIDB4OUFENiwgMHgyMjZELA0KLSAgICAweDlBRDcsIDB4OUFEOSwgMHgzODdBLCAweDlBREEsIDB4OUFEQSwgMHgyNEMxLCAweDlBREIsIDB4OUFFMSwgMHgzODdELA0KLSAgICAweDlBRTIsIDB4OUFFMiwgMHgyMENBLCAweDlBRTMsIDB4OUFFMywgMHgzODg0LCAweDlBRTQsIDB4OUFFNCwgMHgyMEU3LA0KLSAgICAweDlBRTUsIDB4OUFFNSwgMHgyNEMyLCAweDlBRTYsIDB4OUFGRSwgMHgzODg1LCAweDlCNDAsIDB4OUI3RSwgMHgzODlFLA0KLSAgICAweDlCODAsIDB4OUJEMCwgMHgzOERELCAweDlCRDEsIDB4OUJEMSwgMHgyM0RDLCAweDlCRDIsIDB4OUJEQiwgMHgzOTJFLA0KLSAgICAweDlCREMsIDB4OUJEQywgMHgyM0RCLCAweDlCREQsIDB4OUJGRSwgMHgzOTM4LCAweDlDNDAsIDB4OUM1MiwgMHgzOTVBLA0KLSAgICAweDlDNTMsIDB4OUM1MywgMHgyMDVFLCAweDlDNTQsIDB4OUM1OCwgMHgzOTZELCAweDlDNTksIDB4OUM1OSwgMHgyMjQ0LA0KLSAgICAweDlDNUEsIDB4OUM1QSwgMHgyM0UyLCAweDlDNUIsIDB4OUM1QiwgMHgzOTcyLCAweDlDNUMsIDB4OUM1QywgMHgyMEQ0LA0KLSAgICAweDlDNUQsIDB4OUM3NCwgMHgzOTczLCAweDlDNzUsIDB4OUM3NSwgMHgyMTlGLCAweDlDNzYsIDB4OUM3OCwgMHgzOThCLA0KLSAgICAweDlDNzksIDB4OUM3OSwgMHgxRTY2LCAweDlDN0EsIDB4OUM3RSwgMHgzOThFLCAweDlDODAsIDB4OUM4NSwgMHgzOTkzLA0KLSAgICAweDlDODYsIDB4OUM4NiwgMHgxRjYzLCAweDlDODcsIDB4OUM5QywgMHgzOTk5LCAweDlDOUQsIDB4OUM5RCwgMHgyM0RELA0KLSAgICAweDlDOUUsIDB4OUNBQSwgMHgzOUFGLCAweDlDQUIsIDB4OUNBQiwgMHgyMTZCLCAweDlDQUMsIDB4OUNDOSwgMHgzOUJDLA0KLSAgICAweDlDQ0EsIDB4OUNDQSwgMHgyMkI1LCAweDlDQ0IsIDB4OUNDRSwgMHgzOURBLCAweDlDQ0YsIDB4OUNDRiwgMHgxRjI2LA0KLSAgICAweDlDRDAsIDB4OUNFNSwgMHgzOURFLCAweDlDRTYsIDB4OUNFNiwgMHgxRTYzLCAweDlDRTcsIDB4OUNFNywgMHgyMDg4LA0KLSAgICAweDlDRTgsIDB4OUNFQiwgMHgzOUY0LCAweDlDRUMsIDB4OUNFQywgMHgxRUJELCAweDlDRUQsIDB4OUNFRCwgMHgzOUY4LA0KLSAgICAweDlDRUUsIDB4OUNFRSwgMHgyMzQxLCAweDlDRUYsIDB4OUNGQSwgMHgzOUY5LCAweDlDRkIsIDB4OUNGQiwgMHgxRjRCLA0KLSAgICAweDlDRkMsIDB4OUNGRCwgMHgzQTA1LCAweDlDRkUsIDB4OUNGRSwgMHgyMjkyLCAweDlENDAsIDB4OUQ0MSwgMHgzQTA3LA0KLSAgICAweDlENDIsIDB4OUQ0MiwgMHgyMTI0LCAweDlENDMsIDB4OUQ0NSwgMHgzQTA5LCAweDlENDYsIDB4OUQ0NiwgMHgyMDQ4LA0KLSAgICAweDlENDcsIDB4OUQ0NywgMHgyM0UwLCAweDlENDgsIDB4OUQ0QywgMHgzQTBDLCAweDlENEQsIDB4OUQ0RCwgMHgyMDc3LA0KLSAgICAweDlENEUsIDB4OUQ0RSwgMHgzQTExLCAweDlENEYsIDB4OUQ0RiwgMHgyMjNBLCAweDlENTAsIDB4OUQ2MCwgMHgzQTEyLA0KLSAgICAweDlENjEsIDB4OUQ2MSwgMHgyMEIxLCAweDlENjIsIDB4OUQ2NywgMHgzQTIzLCAweDlENjgsIDB4OUQ2OCwgMHgxRjQxLA0KLSAgICAweDlENjksIDB4OUQ2OSwgMHgyMDFDLCAweDlENkEsIDB4OUQ2RCwgMHgzQTI5LCAweDlENkUsIDB4OUQ2RSwgMHgyMkI4LA0KLSAgICAweDlENkYsIDB4OUQ3MCwgMHgzQTJELCAweDlENzEsIDB4OUQ3MSwgMHgyMjc2LCAweDlENzIsIDB4OUQ3NCwgMHgzQTJGLA0KLSAgICAweDlENzUsIDB4OUQ3NSwgMHgxRjlCLCAweDlENzYsIDB4OUQ3QSwgMHgzQTMyLCAweDlEN0IsIDB4OUQ3QiwgMHgxRjlGLA0KLSAgICAweDlEN0MsIDB4OUQ3QywgMHgzQTM3LCAweDlEN0QsIDB4OUQ3RCwgMHgyNUNBLCAweDlEN0UsIDB4OUQ3RSwgMHgzQTM4LA0KLSAgICAweDlEODAsIDB4OUQ4OSwgMHgzQTM5LCAweDlEOEEsIDB4OUQ4QSwgMHgyMEJFLCAweDlEOEIsIDB4OUQ4QywgMHgzQTQzLA0KLSAgICAweDlEOEQsIDB4OUQ4RCwgMHgxRkI0LCAweDlEOEUsIDB4OUQ5MCwgMHgzQTQ1LCAweDlEOTEsIDB4OUQ5MSwgMHgyM0Q3LA0KLSAgICAweDlEOTIsIDB4OUQ5OCwgMHgzQTQ4LCAweDlEOTksIDB4OUQ5OSwgMHgyMTA1LCAweDlEOUEsIDB4OURBMCwgMHgzQTRGLA0KLSAgICAweDlEQTEsIDB4OURBMSwgMHgyM0UxLCAweDlEQTIsIDB4OURBMiwgMHgxRkVDLCAweDlEQTMsIDB4OURBNiwgMHgzQTU2LA0KLSAgICAweDlEQTcsIDB4OURBNywgMHgyM0VBLCAweDlEQTgsIDB4OURBQiwgMHgzQTVBLCAweDlEQUMsIDB4OURBQywgMHgyM0UzLA0KLSAgICAweDlEQUQsIDB4OURBRCwgMHgyMTBFLCAweDlEQUUsIDB4OURCMSwgMHgzQTVFLCAweDlEQjIsIDB4OURCMiwgMHgxRkE2LA0KLSAgICAweDlEQjMsIDB4OURCMywgMHgyMDA0LCAweDlEQjQsIDB4OURCRCwgMHgzQTYyLCAweDlEQkUsIDB4OURCRSwgMHgxRjlELA0KLSAgICAweDlEQkYsIDB4OURDNSwgMHgzQTZDLCAweDlEQzYsIDB4OURDNiwgMHgyM0U1LCAweDlEQzcsIDB4OURDOCwgMHgzQTczLA0KLSAgICAweDlEQzksIDB4OURDOSwgMHgyMjY0LCAweDlEQ0EsIDB4OURDQywgMHgzQTc1LCAweDlEQ0QsIDB4OURDRCwgMHgyNEUyLA0KLSAgICAweDlEQ0UsIDB4OUREMSwgMHgzQTc4LCAweDlERDIsIDB4OUREMiwgMHgyM0RFLCAweDlERDMsIDB4OURENCwgMHgzQTdDLA0KLSAgICAweDlERDUsIDB4OURENSwgMHgxRUM0LCAweDlERDYsIDB4OURFMCwgMHgzQTdFLCAweDlERTEsIDB4OURFMSwgMHgyMkI2LA0KLSAgICAweDlERTIsIDB4OURFMiwgMHgyMEE5LCAweDlERTMsIDB4OURGMCwgMHgzQTg5LCAweDlERjEsIDB4OURGMSwgMHgyMTJCLA0KLSAgICAweDlERjIsIDB4OURGMywgMHgzQTk3LCAweDlERjQsIDB4OURGNCwgMHgyMEE1LCAweDlERjUsIDB4OURGNiwgMHgzQTk5LA0KLSAgICAweDlERjcsIDB4OURGNywgMHgyNjhCLCAweDlERjgsIDB4OURGOSwgMHgzQTlCLCAweDlERkEsIDB4OURGQSwgMHgxRjc2LA0KLSAgICAweDlERkIsIDB4OURGQywgMHgzQTlELCAweDlERkQsIDB4OURGRCwgMHgyMTZELCAweDlERkUsIDB4OURGRSwgMHgzQTlGLA0KLSAgICAweDlFNDAsIDB4OUU0NCwgMHgzQUEwLCAweDlFNDUsIDB4OUU0NSwgMHgyMDAxLCAweDlFNDYsIDB4OUU0NywgMHgzQUE1LA0KLSAgICAweDlFNDgsIDB4OUU0OCwgMHgyMTkxLCAweDlFNDksIDB4OUU0OSwgMHgxRTUwLCAweDlFNEEsIDB4OUU1MSwgMHgzQUE3LA0KLSAgICAweDlFNTIsIDB4OUU1MiwgMHgxRjlDLCAweDlFNTMsIDB4OUU1MywgMHgzQUFGLCAweDlFNTQsIDB4OUU1NCwgMHgyM0RBLA0KLSAgICAweDlFNTUsIDB4OUU1NSwgMHgzQUIwLCAweDlFNTYsIDB4OUU1NiwgMHgyMDUzLCAweDlFNTcsIDB4OUU1QywgMHgzQUIxLA0KLSAgICAweDlFNUQsIDB4OUU1RCwgMHgyM0U5LCAweDlFNUUsIDB4OUU1RSwgMHgyM0U0LCAweDlFNUYsIDB4OUU2MCwgMHgzQUI3LA0KLSAgICAweDlFNjEsIDB4OUU2MSwgMHgyMUQ1LCAweDlFNjIsIDB4OUU2MiwgMHgzQUI5LCAweDlFNjMsIDB4OUU2MywgMHgyM0U2LA0KLSAgICAweDlFNjQsIDB4OUU2NiwgMHgzQUJBLCAweDlFNjcsIDB4OUU2NywgMHgyM0RGLCAweDlFNjgsIDB4OUU2QiwgMHgzQUJELA0KLSAgICAweDlFNkMsIDB4OUU2QywgMHgxRTRGLCAweDlFNkQsIDB4OUU2RSwgMHgzQUMxLCAweDlFNkYsIDB4OUU2RiwgMHgyM0Q5LA0KLSAgICAweDlFNzAsIDB4OUU3MSwgMHgzQUMzLCAweDlFNzIsIDB4OUU3MiwgMHgyMDE0LCAweDlFNzMsIDB4OUU3MywgMHgzQUM1LA0KLSAgICAweDlFNzQsIDB4OUU3NCwgMHgyM0VDLCAweDlFNzUsIDB4OUU3NSwgMHgyM0VCLCAweDlFNzYsIDB4OUU3QSwgMHgzQUM2LA0KLSAgICAweDlFN0IsIDB4OUU3QiwgMHgyM0Q4LCAweDlFN0MsIDB4OUU3QywgMHgyM0VFLCAweDlFN0QsIDB4OUU3RSwgMHgzQUNCLA0KLSAgICAweDlFODAsIDB4OUU4NCwgMHgzQUNELCAweDlFODUsIDB4OUU4NSwgMHgyNjhFLCAweDlFODYsIDB4OUU4NiwgMHgzQUQyLA0KLSAgICAweDlFODcsIDB4OUU4NywgMHgyM0VELCAweDlFODgsIDB4OUU5MCwgMHgzQUQzLCAweDlFOTEsIDB4OUU5MSwgMHgxRkZBLA0KLSAgICAweDlFOTIsIDB4OUU5NSwgMHgzQURDLCAweDlFOTYsIDB4OUU5NiwgMHgyM0Q2LCAweDlFOTcsIDB4OUU5NywgMHgyM0U4LA0KLSAgICAweDlFOTgsIDB4OUVBMSwgMHgzQUUwLCAweDlFQTIsIDB4OUVBMiwgMHgyMTA2LCAweDlFQTMsIDB4OUVBNSwgMHgzQUVBLA0KLSAgICAweDlFQTYsIDB4OUVBNiwgMHgyMDBCLCAweDlFQTcsIDB4OUVBOCwgMHgzQUVELCAweDlFQTksIDB4OUVBOSwgMHgyMTY2LA0KLSAgICAweDlFQUEsIDB4OUVBRCwgMHgzQUVGLCAweDlFQUUsIDB4OUVBRSwgMHgyM0VGLCAweDlFQUYsIDB4OUVCMiwgMHgzQUYzLA0KLSAgICAweDlFQjMsIDB4OUVCMywgMHgyMTg5LCAweDlFQjQsIDB4OUVCNCwgMHgyMDU4LCAweDlFQjUsIDB4OUVCNiwgMHgzQUY3LA0KLSAgICAweDlFQjcsIDB4OUVCNywgMHgyM0U3LCAweDlFQjgsIDB4OUVGNCwgMHgzQUY5LCAweDlFRjUsIDB4OUVGNSwgMHgyMUEzLA0KLSAgICAweDlFRjYsIDB4OUVGRSwgMHgzQjM2LCAweDlGNDAsIDB4OUY0RCwgMHgzQjNGLCAweDlGNEUsIDB4OUY0RSwgMHgyMTdBLA0KLSAgICAweDlGNEYsIDB4OUY2RSwgMHgzQjRELCAweDlGNkYsIDB4OUY2RiwgMHgyMUE1LCAweDlGNzAsIDB4OUY3RSwgMHgzQjZELA0KLSAgICAweDlGODAsIDB4OUY5MSwgMHgzQjdDLCAweDlGOTIsIDB4OUY5MiwgMHgyMDIyLCAweDlGOTMsIDB4OUY5NywgMHgzQjhFLA0KLSAgICAweDlGOTgsIDB4OUY5OCwgMHgyNEQ2LCAweDlGOTksIDB4OUZBNSwgMHgzQjkzLCAweDlGQTYsIDB4OUZBNiwgMHgyMzNBLA0KLSAgICAweDlGQTcsIDB4OUZBOCwgMHgzQkEwLCAweDlGQTksIDB4OUZBOSwgMHgxRUVFLCAweDlGQUEsIDB4OUZBQiwgMHgzQkEyLA0KLSAgICAweDlGQUMsIDB4OUZBQywgMHgyNEQ1LCAweDlGQUQsIDB4OUZDOCwgMHgzQkE0LCAweDlGQzksIDB4OUZDOSwgMHgyMjI4LA0KLSAgICAweDlGQ0EsIDB4OUZDQywgMHgzQkMwLCAweDlGQ0QsIDB4OUZDRCwgMHgyNEQ3LCAweDlGQ0UsIDB4OUZFMCwgMHgzQkMzLA0KLSAgICAweDlGRTEsIDB4OUZFMSwgMHgyMEZDLCAweDlGRTIsIDB4OUZFQSwgMHgzQkQ2LCAweDlGRUIsIDB4OUZFQiwgMHgxRTg3LA0KLSAgICAweDlGRUMsIDB4OUZFRCwgMHgzQkRGLCAweDlGRUUsIDB4OUZFRSwgMHgyNEQ4LCAweDlGRUYsIDB4OUZGMywgMHgzQkUxLA0KLSAgICAweDlGRjQsIDB4OUZGNCwgMHgxRUJBLCAweDlGRjUsIDB4OUZGQywgMHgzQkU2LCAweDlGRkQsIDB4OUZGRCwgMHgyMTE5LA0KLSAgICAweDlGRkUsIDB4OUZGRSwgMHgzQkVFLCAweEEwNDAsIDB4QTA0MiwgMHgzQkVGLCAweEEwNDMsIDB4QTA0MywgMHgyMTZDLA0KLSAgICAweEEwNDQsIDB4QTA0NSwgMHgzQkYyLCAweEEwNDYsIDB4QTA0NiwgMHgyNEQ5LCAweEEwNDcsIDB4QTA0OCwgMHgzQkY0LA0KLSAgICAweEEwNDksIDB4QTA0OSwgMHgyMjI3LCAweEEwNEEsIDB4QTA0RCwgMHgzQkY2LCAweEEwNEUsIDB4QTA0RSwgMHgxRTVGLA0KLSAgICAweEEwNEYsIDB4QTA1MywgMHgzQkZBLCAweEEwNTQsIDB4QTA1NCwgMHgyMjlGLCAweEEwNTUsIDB4QTA1OSwgMHgzQkZGLA0KLSAgICAweEEwNUEsIDB4QTA1QSwgMHgxRjVELCAweEEwNUIsIDB4QTA2MCwgMHgzQzA0LCAweEEwNjEsIDB4QTA2MSwgMHgxRkJDLA0KLSAgICAweEEwNjIsIDB4QTA2MiwgMHgzQzBBLCAweEEwNjMsIDB4QTA2MywgMHgyNERBLCAweEEwNjQsIDB4QTA3MCwgMHgzQzBCLA0KLSAgICAweEEwNzEsIDB4QTA3MSwgMHgyMTQ5LCAweEEwNzIsIDB4QTA3MywgMHgzQzE4LCAweEEwNzQsIDB4QTA3NCwgMHgyMDQ2LA0KLSAgICAweEEwNzUsIDB4QTA3RSwgMHgzQzFBLCAweEEwODAsIDB4QTA4MCwgMHgyMDAwLCAweEEwODEsIDB4QTA5MCwgMHgzQzI0LA0KLSAgICAweEEwOTEsIDB4QTA5MSwgMHgyMTkwLCAweEEwOTIsIDB4QTA5MywgMHgzQzM0LCAweEEwOTQsIDB4QTA5NCwgMHgyMjA4LA0KLSAgICAweEEwOTUsIDB4QTA5NSwgMHgzQzM2LCAweEEwOTYsIDB4QTA5NiwgMHgxRUU2LCAweEEwOTcsIDB4QTBBOCwgMHgzQzM3LA0KLSAgICAweEEwQTksIDB4QTBBOSwgMHgyNEMzLCAweEEwQUEsIDB4QTBCRSwgMHgzQzQ5LCAweEEwQkYsIDB4QTBCRiwgMHgyMENDLA0KLSAgICAweEEwQzAsIDB4QTBDRCwgMHgzQzVFLCAweEEwQ0UsIDB4QTBDRSwgMHgyMzQwLCAweEEwQ0YsIDB4QTBEOCwgMHgzQzZDLA0KLSAgICAweEEwRDksIDB4QTBEOSwgMHgxRUQxLCAweEEwREEsIDB4QTBERCwgMHgzQzc2LCAweEEwREUsIDB4QTBERSwgMHgyMUFDLA0KLSAgICAweEEwREYsIDB4QTBFRCwgMHgzQzdBLCAweEEwRUUsIDB4QTBFRSwgMHgyMkFGLCAweEEwRUYsIDB4QTBGRSwgMHgzQzg5LA0KLSAgICAweEExQTEsIDB4QTFGRSwgMHgwMDYwLCAweEEyQTEsIDB4QTJBQSwgMHgyNkE5LCAweEEyQjEsIDB4QTJFMiwgMHgwMEJFLA0KLSAgICAweEEyRTUsIDB4QTJFRSwgMHgwMEYwLCAweEEyRjEsIDB4QTJGQywgMHgwMEZBLCAweEEzQTEsIDB4QTNGRSwgMHgwMTA2LA0KLSAgICAweEE0QTEsIDB4QTRGMywgMHgwMTY0LCAweEE1QTEsIDB4QTVGNiwgMHgwMUI3LCAweEE2QTEsIDB4QTZCOCwgMHgwMjBELA0KLSAgICAweEE2QzEsIDB4QTZGNSwgMHgwMjI1LCAweEE3QTEsIDB4QTdDMSwgMHgwMjVBLCAweEE3RDEsIDB4QTdGMSwgMHgwMjdCLA0KLSAgICAweEE4NDAsIDB4QTg3RSwgMHgyNkIzLCAweEE4ODAsIDB4QTg5NSwgMHgyNkYyLCAweEE4QTEsIDB4QThDMCwgMHgwMjlDLA0KLSAgICAweEE4QzUsIDB4QThFQSwgMHgwMkJDLCAweEE5NDAsIDB4QTk1NywgMHgyNzA4LCAweEE5NTksIDB4QTk1QSwgMHgyNzIwLA0KLSAgICAweEE5NUMsIDB4QTk1QywgMHgyNzIyLCAweEE5NjAsIDB4QTk3RSwgMHgyNzIzLCAweEE5ODAsIDB4QTk5NSwgMHgyNzQyLA0KLSAgICAweEE5OTYsIDB4QTk5NiwgMHgxRTE3LCAweEE5QTQsIDB4QTlFRiwgMHgwMkUyLCAweEFBNDAsIDB4QUE0QywgMHgzQzk5LA0KLSAgICAweEFBNEQsIDB4QUE0RCwgMHgyMUI2LCAweEFBNEUsIDB4QUE0RSwgMHgxRTNELCAweEFBNEYsIDB4QUE3MCwgMHgzQ0E2LA0KLSAgICAweEFBNzEsIDB4QUE3MSwgMHgyMjM1LCAweEFBNzIsIDB4QUE3MiwgMHgzQ0M4LCAweEFBNzMsIDB4QUE3MywgMHgyMzk3LA0KLSAgICAweEFBNzQsIDB4QUE3NiwgMHgzQ0M5LCAweEFBNzcsIDB4QUE3NywgMHgyMzk1LCAweEFBNzgsIDB4QUE3OSwgMHgzQ0NDLA0KLSAgICAweEFBN0EsIDB4QUE3QSwgMHgyMjNGLCAweEFBN0IsIDB4QUE3QiwgMHgyMTJBLCAweEFBN0MsIDB4QUE3RSwgMHgzQ0NFLA0KLSAgICAweEFBODAsIDB4QUE5OSwgMHgzQ0QxLCAweEFBOUEsIDB4QUE5QSwgMHgxRUQyLCAweEFBOUIsIDB4QUE5QiwgMHgzQ0VCLA0KLSAgICAweEFBOUMsIDB4QUE5QywgMHgyMzk2LCAweEFBOUQsIDB4QUE5RCwgMHgyMzk4LCAweEFBOUUsIDB4QUE5RSwgMHgzQ0VDLA0KLSAgICAweEFBOUYsIDB4QUE5RiwgMHgyMEEyLCAweEFBQTAsIDB4QUFBMCwgMHgzQ0VELCAweEFBQTEsIDB4QUFGRSwgMHgwMzJFLA0KLSAgICAweEFCNDAsIDB4QUI0MCwgMHgxRjY0LCAweEFCNDEsIDB4QUI0MiwgMHgzQ0VFLCAweEFCNDMsIDB4QUI0MywgMHgyMDJCLA0KLSAgICAweEFCNDQsIDB4QUI0NCwgMHgzQ0YwLCAweEFCNDUsIDB4QUI0NSwgMHgyMzk0LCAweEFCNDYsIDB4QUI0NiwgMHgyMTM5LA0KLSAgICAweEFCNDcsIDB4QUI0NywgMHgzQ0YxLCAweEFCNDgsIDB4QUI0OCwgMHgyMTVGLCAweEFCNDksIDB4QUI0OSwgMHgyMUMxLA0KLSAgICAweEFCNEEsIDB4QUI0QSwgMHgyMzlBLCAweEFCNEIsIDB4QUI0QywgMHgzQ0YyLCAweEFCNEQsIDB4QUI0RCwgMHgyMzk5LA0KLSAgICAweEFCNEUsIDB4QUI3RSwgMHgzQ0Y0LCAweEFCODAsIDB4QUJBMCwgMHgzRDI1LCAweEFCQTEsIDB4QUJDMCwgMHgwMzhDLA0KLSAgICAweEFDNDAsIDB4QUM0NSwgMHgzRDQ2LCAweEFDNDYsIDB4QUM0NiwgMHgyMUMwLCAweEFDNDcsIDB4QUM3MCwgMHgzRDRDLA0KLSAgICAweEFDNzEsIDB4QUM3MSwgMHgyNDYwLCAweEFDNzIsIDB4QUM3QiwgMHgzRDc2LCAweEFDN0MsIDB4QUM3QywgMHgyNDVDLA0KLSAgICAweEFDN0QsIDB4QUM3RSwgMHgzRDgwLCAweEFDODAsIDB4QUM4QywgMHgzRDgyLCAweEFDOEQsIDB4QUM4RCwgMHgyMTVELA0KLSAgICAweEFDOEUsIDB4QUM5MiwgMHgzRDhGLCAweEFDOTMsIDB4QUM5MywgMHgyMjI1LCAweEFDOTQsIDB4QUM5NCwgMHgyMDZBLA0KLSAgICAweEFDOTUsIDB4QUNBMCwgMHgzRDk0LCAweEFENDAsIDB4QUQ0OCwgMHgzREEwLCAweEFENDksIDB4QUQ0OSwgMHgyNDYxLA0KLSAgICAweEFENEEsIDB4QUQ1RCwgMHgzREE5LCAweEFENUUsIDB4QUQ1RSwgMHgyNDVCLCAweEFENUYsIDB4QUQ2MCwgMHgzREJELA0KLSAgICAweEFENjEsIDB4QUQ2MSwgMHgyNDYyLCAweEFENjIsIDB4QUQ2NywgMHgzREJGLCAweEFENjgsIDB4QUQ2OCwgMHgxRjU0LA0KLSAgICAweEFENjksIDB4QUQ3MywgMHgzREM1LCAweEFENzQsIDB4QUQ3NCwgMHgyNDVGLCAweEFENzUsIDB4QUQ3RSwgMHgzREQwLA0KLSAgICAweEFEODAsIDB4QUQ4MSwgMHgzRERBLCAweEFEODIsIDB4QUQ4MiwgMHgyMEVDLCAweEFEODMsIDB4QUQ4NiwgMHgzRERDLA0KLSAgICAweEFEODcsIDB4QUQ4NywgMHgyNDVELCAweEFEODgsIDB4QUQ4QSwgMHgzREUwLCAweEFEOEIsIDB4QUQ4QiwgMHgyNDYzLA0KLSAgICAweEFEOEMsIDB4QUQ5MCwgMHgzREUzLCAweEFEOTEsIDB4QUQ5MSwgMHgyNDY0LCAweEFEOTIsIDB4QURBMCwgMHgzREU4LA0KLSAgICAweEFFNDAsIDB4QUU1MywgMHgzREY3LCAweEFFNTQsIDB4QUU1NCwgMHgyNEE1LCAweEFFNTUsIDB4QUU2MSwgMHgzRTBCLA0KLSAgICAweEFFNjIsIDB4QUU2MiwgMHgxRTcwLCAweEFFNjMsIDB4QUU3RSwgMHgzRTE4LCAweEFFODAsIDB4QUU4MCwgMHgyMDhGLA0KLSAgICAweEFFODEsIDB4QUU4NCwgMHgzRTM0LCAweEFFODUsIDB4QUU4NSwgMHgxRTQyLCAweEFFODYsIDB4QUU4QSwgMHgzRTM4LA0KLSAgICAweEFFOEIsIDB4QUU4QiwgMHgxRjRFLCAweEFFOEMsIDB4QUU5MywgMHgzRTNELCAweEFFOTQsIDB4QUU5NCwgMHgxRUIxLA0KLSAgICAweEFFOTUsIDB4QUU5RiwgMHgzRTQ1LCAweEFFQTAsIDB4QUVBMCwgMHgxRThCLCAweEFGNDAsIDB4QUY2MywgMHgzRTUwLA0KLSAgICAweEFGNjQsIDB4QUY2NCwgMHgxRkM2LCAweEFGNjUsIDB4QUY3QSwgMHgzRTc0LCAweEFGN0IsIDB4QUY3QiwgMHgyNUFFLA0KLSAgICAweEFGN0MsIDB4QUY3RSwgMHgzRThBLCAweEFGODAsIDB4QUY4MSwgMHgzRThELCAweEFGODIsIDB4QUY4MiwgMHgxRjAxLA0KLSAgICAweEFGODMsIDB4QUY4MywgMHgyMjAwLCAweEFGODQsIDB4QUY4RCwgMHgzRThGLCAweEFGOEUsIDB4QUY4RSwgMHgyNUIyLA0KLSAgICAweEFGOEYsIDB4QUY4RiwgMHgxRTk3LCAweEFGOTAsIDB4QUY5MCwgMHgzRTk5LCAweEFGOTEsIDB4QUY5MSwgMHgyMEFCLA0KLSAgICAweEFGOTIsIDB4QUY5QiwgMHgzRTlBLCAweEFGOUMsIDB4QUY5QywgMHgyNUIzLCAweEFGOUQsIDB4QUY5RSwgMHgzRUE0LA0KLSAgICAweEFGOUYsIDB4QUY5RiwgMHgyMDI4LCAweEFGQTAsIDB4QUZBMCwgMHgzRUE2LCAweEIwNDAsIDB4QjA0MCwgMHgzRUE3LA0KLSAgICAweEIwNDEsIDB4QjA0MiwgMHgyNUFGLCAweEIwNDMsIDB4QjA0MywgMHgzRUE4LCAweEIwNDQsIDB4QjA0NCwgMHgyNUIxLA0KLSAgICAweEIwNDUsIDB4QjA0RSwgMHgzRUE5LCAweEIwNEYsIDB4QjA0RiwgMHgyNUFDLCAweEIwNTAsIDB4QjA1MywgMHgzRUIzLA0KLSAgICAweEIwNTQsIDB4QjA1NCwgMHgxRTRFLCAweEIwNTUsIDB4QjA1NiwgMHgzRUI3LCAweEIwNTcsIDB4QjA1NywgMHgyMjAyLA0KLSAgICAweEIwNTgsIDB4QjA1OCwgMHgyNUFCLCAweEIwNTksIDB4QjA1OSwgMHgyMjg2LCAweEIwNUEsIDB4QjA1QSwgMHgzRUI5LA0KLSAgICAweEIwNUIsIDB4QjA1QiwgMHgyNUFELCAweEIwNUMsIDB4QjA1QywgMHgzRUJBLCAweEIwNUQsIDB4QjA1RCwgMHgyNUI2LA0KLSAgICAweEIwNUUsIDB4QjA1RSwgMHgzRUJCLCAweEIwNUYsIDB4QjA1RiwgMHgyMUUzLCAweEIwNjAsIDB4QjA2MSwgMHgyNUI0LA0KLSAgICAweEIwNjIsIDB4QjA2MiwgMHgyMjJGLCAweEIwNjMsIDB4QjA2MywgMHgyMTY1LCAweEIwNjQsIDB4QjA2NCwgMHgyNUI3LA0KLSAgICAweEIwNjUsIDB4QjA2QiwgMHgzRUJDLCAweEIwNkMsIDB4QjA2QywgMHgxRUU5LCAweEIwNkQsIDB4QjA3QywgMHgzRUMzLA0KLSAgICAweEIwN0QsIDB4QjA3RCwgMHgxRTI1LCAweEIwN0UsIDB4QjA3RSwgMHgzRUQzLCAweEIwODAsIDB4QjA5NiwgMHgzRUQ0LA0KLSAgICAweEIwOTcsIDB4QjA5NywgMHgyNUMwLCAweEIwOTgsIDB4QjA5OCwgMHgzRUVCLCAweEIwOTksIDB4QjA5OSwgMHgyMjlBLA0KLSAgICAweEIwOUEsIDB4QjBBMCwgMHgzRUVDLCAweEIwQTEsIDB4QjBGRSwgMHgwM0FDLCAweEIxNDAsIDB4QjE0QSwgMHgzRUYzLA0KLSAgICAweEIxNEIsIDB4QjE0QiwgMHgyMjZFLCAweEIxNEMsIDB4QjE0QywgMHgzRUZFLCAweEIxNEQsIDB4QjE0RCwgMHgxRkJELA0KLSAgICAweEIxNEUsIDB4QjE0RSwgMHgzRUZGLCAweEIxNEYsIDB4QjE0RiwgMHgxRjg0LCAweEIxNTAsIDB4QjE1MCwgMHgyMEIyLA0KLSAgICAweEIxNTEsIDB4QjE1MSwgMHgzRjAwLCAweEIxNTIsIDB4QjE1MiwgMHgyMDQzLCAweEIxNTMsIDB4QjE3RSwgMHgzRjAxLA0KLSAgICAweEIxODAsIDB4QjE5NiwgMHgzRjJELCAweEIxOTcsIDB4QjE5NywgMHgyNjg0LCAweEIxOTgsIDB4QjFBMCwgMHgzRjQ0LA0KLSAgICAweEIxQTEsIDB4QjFGRSwgMHgwNDBBLCAweEIyNDAsIDB4QjI0MCwgMHgzRjRELCAweEIyNDEsIDB4QjI0MSwgMHgyNEVGLA0KLSAgICAweEIyNDIsIDB4QjI2NiwgMHgzRjRFLCAweEIyNjcsIDB4QjI2NywgMHgyNEVFLCAweEIyNjgsIDB4QjI2QywgMHgzRjczLA0KLSAgICAweEIyNkQsIDB4QjI2RCwgMHgyMDc0LCAweEIyNkUsIDB4QjI3MywgMHgzRjc4LCAweEIyNzQsIDB4QjI3NCwgMHgyNjg3LA0KLSAgICAweEIyNzUsIDB4QjI3RSwgMHgzRjdFLCAweEIyODAsIDB4QjI4MCwgMHgyNEYwLCAweEIyODEsIDB4QjI4OCwgMHgzRjg4LA0KLSAgICAweEIyODksIDB4QjI4OSwgMHgyNjhELCAweEIyOEEsIDB4QjI5OSwgMHgzRjkwLCAweEIyOUEsIDB4QjI5QSwgMHgyMkEwLA0KLSAgICAweEIyOUIsIDB4QjJBMCwgMHgzRkEwLCAweEIyQTEsIDB4QjJGRSwgMHgwNDY4LCAweEIzNDAsIDB4QjM0MiwgMHgzRkE2LA0KLSAgICAweEIzNDMsIDB4QjM0MywgMHgxRkFCLCAweEIzNDQsIDB4QjM2RiwgMHgzRkE5LCAweEIzNzAsIDB4QjM3MCwgMHgyNkE4LA0KLSAgICAweEIzNzEsIDB4QjM3RSwgMHgzRkQ1LCAweEIzODAsIDB4QjM4NywgMHgzRkUzLCAweEIzODgsIDB4QjM4OCwgMHgyNEU5LA0KLSAgICAweEIzODksIDB4QjM4QiwgMHgzRkVCLCAweEIzOEMsIDB4QjM4QywgMHgyNEU1LCAweEIzOEQsIDB4QjM4RCwgMHgzRkVFLA0KLSAgICAweEIzOEUsIDB4QjM4RSwgMHgyMUZBLCAweEIzOEYsIDB4QjNBMCwgMHgzRkVGLCAweEIzQTEsIDB4QjNGRSwgMHgwNEM2LA0KLSAgICAweEI0NDAsIDB4QjQ1MywgMHg0MDAxLCAweEI0NTQsIDB4QjQ1NCwgMHgyMTQ4LCAweEI0NTUsIDB4QjQ1NywgMHg0MDE1LA0KLSAgICAweEI0NTgsIDB4QjQ1OCwgMHgyNEU0LCAweEI0NTksIDB4QjQ1RCwgMHg0MDE4LCAweEI0NUUsIDB4QjQ1RSwgMHgyNEU2LA0KLSAgICAweEI0NUYsIDB4QjQ1RiwgMHgyMEY3LCAweEI0NjAsIDB4QjQ2MCwgMHg0MDFELCAweEI0NjEsIDB4QjQ2MSwgMHgyMDZCLA0KLSAgICAweEI0NjIsIDB4QjQ3NCwgMHg0MDFFLCAweEI0NzUsIDB4QjQ3NSwgMHgyMkE3LCAweEI0NzYsIDB4QjQ3RCwgMHg0MDMxLA0KLSAgICAweEI0N0UsIDB4QjQ3RSwgMHgyNEVDLCAweEI0ODAsIDB4QjQ4MiwgMHg0MDM5LCAweEI0ODMsIDB4QjQ4MywgMHgyNEVCLA0KLSAgICAweEI0ODQsIDB4QjQ4OCwgMHg0MDNDLCAweEI0ODksIDB4QjQ4OSwgMHgyNEUzLCAweEI0OEEsIDB4QjQ5MiwgMHg0MDQxLA0KLSAgICAweEI0OTMsIDB4QjQ5MywgMHgyNEVBLCAweEI0OTQsIDB4QjRBMCwgMHg0MDRBLCAweEI0QTEsIDB4QjRGRSwgMHgwNTI0LA0KLSAgICAweEI1NDAsIDB4QjU0MCwgMHg0MDU3LCAweEI1NDEsIDB4QjU0MSwgMHgxRTkyLCAweEI1NDIsIDB4QjU0QSwgMHg0MDU4LA0KLSAgICAweEI1NEIsIDB4QjU0QiwgMHgxRTI3LCAweEI1NEMsIDB4QjU1NSwgMHg0MDYxLCAweEI1NTYsIDB4QjU1NiwgMHgxRkU2LA0KLSAgICAweEI1NTcsIDB4QjU1OSwgMHg0MDZCLCAweEI1NUEsIDB4QjU1QSwgMHgyNEU3LCAweEI1NUIsIDB4QjU1QiwgMHgyMDEyLA0KLSAgICAweEI1NUMsIDB4QjU1QywgMHgxRUVDLCAweEI1NUQsIDB4QjU2MCwgMHg0MDZFLCAweEI1NjEsIDB4QjU2MSwgMHgyNEU4LA0KLSAgICAweEI1NjIsIDB4QjU3RSwgMHg0MDcyLCAweEI1ODAsIDB4QjU5QiwgMHg0MDhGLCAweEI1OUMsIDB4QjU5QywgMHgxRjY2LA0KLSAgICAweEI1OUQsIDB4QjU5RCwgMHgyNERDLCAweEI1OUUsIDB4QjVBMCwgMHg0MEFCLCAweEI1QTEsIDB4QjVGRSwgMHgwNTgyLA0KLSAgICAweEI2NDAsIDB4QjY1MSwgMHg0MEFFLCAweEI2NTIsIDB4QjY1MiwgMHgyNkEyLCAweEI2NTMsIDB4QjY1NCwgMHg0MEMwLA0KLSAgICAweEI2NTUsIDB4QjY1NSwgMHgyNERELCAweEI2NTYsIDB4QjY1OCwgMHg0MEMyLCAweEI2NTksIDB4QjY1OSwgMHgyMDBFLA0KLSAgICAweEI2NUEsIDB4QjY1QSwgMHg0MEM1LCAweEI2NUIsIDB4QjY1QiwgMHgyNERCLCAweEI2NUMsIDB4QjY1QywgMHgxRUI4LA0KLSAgICAweEI2NUQsIDB4QjY3RSwgMHg0MEM2LCAweEI2ODAsIDB4QjZBMCwgMHg0MEU4LCAweEI2QTEsIDB4QjZGRSwgMHgwNUUwLA0KLSAgICAweEI3NDAsIDB4Qjc0RCwgMHg0MTA5LCAweEI3NEUsIDB4Qjc0RSwgMHgyMjk1LCAweEI3NEYsIDB4Qjc1MCwgMHg0MTE3LA0KLSAgICAweEI3NTEsIDB4Qjc1MSwgMHgxRTgwLCAweEI3NTIsIDB4Qjc1OCwgMHg0MTE5LCAweEI3NTksIDB4Qjc1OSwgMHgyNjc3LA0KLSAgICAweEI3NUEsIDB4Qjc2MywgMHg0MTIwLCAweEI3NjQsIDB4Qjc2NCwgMHgyNjI0LCAweEI3NjUsIDB4Qjc2NSwgMHgxRjY5LA0KLSAgICAweEI3NjYsIDB4Qjc2NiwgMHgyMjJCLCAweEI3NjcsIDB4Qjc3NiwgMHg0MTJBLCAweEI3NzcsIDB4Qjc3NywgMHgyNTdGLA0KLSAgICAweEI3NzgsIDB4Qjc3OCwgMHgxRjVCLCAweEI3NzksIDB4Qjc3RSwgMHg0MTNBLCAweEI3ODAsIDB4Qjc4MCwgMHgyMTlCLA0KLSAgICAweEI3ODEsIDB4Qjc4MSwgMHg0MTQwLCAweEI3ODIsIDB4Qjc4MiwgMHgyNjdELCAweEI3ODMsIDB4QjdBMCwgMHg0MTQxLA0KLSAgICAweEI3QTEsIDB4QjdGRSwgMHgwNjNFLCAweEI4NDAsIDB4Qjg0MiwgMHg0MTVGLCAweEI4NDMsIDB4Qjg0MywgMHgyMUEwLA0KLSAgICAweEI4NDQsIDB4Qjg0NCwgMHgyMTg2LCAweEI4NDUsIDB4Qjg0NSwgMHg0MTYyLCAweEI4NDYsIDB4Qjg0NiwgMHgyMEVELA0KLSAgICAweEI4NDcsIDB4Qjg0QywgMHg0MTYzLCAweEI4NEQsIDB4Qjg0RCwgMHgyNUI5LCAweEI4NEUsIDB4Qjg1MCwgMHg0MTY5LA0KLSAgICAweEI4NTEsIDB4Qjg1MSwgMHgxRkVBLCAweEI4NTIsIDB4Qjg1OSwgMHg0MTZDLCAweEI4NUEsIDB4Qjg1QSwgMHgxRUE0LA0KLSAgICAweEI4NUIsIDB4Qjg1QiwgMHgyMEUxLCAweEI4NUMsIDB4Qjg1QywgMHg0MTc0LCAweEI4NUQsIDB4Qjg1RCwgMHgyNUI4LA0KLSAgICAweEI4NUUsIDB4Qjg1RSwgMHgyMjYwLCAweEI4NUYsIDB4Qjg1RiwgMHg0MTc1LCAweEI4NjAsIDB4Qjg2MCwgMHgyMEUyLA0KLSAgICAweEI4NjEsIDB4Qjg3NiwgMHg0MTc2LCAweEI4NzcsIDB4Qjg3NywgMHgyMTQxLCAweEI4NzgsIDB4Qjg3RSwgMHg0MThDLA0KLSAgICAweEI4ODAsIDB4Qjg4MSwgMHg0MTkzLCAweEI4ODIsIDB4Qjg4MiwgMHgxRkM3LCAweEI4ODMsIDB4QjhBMCwgMHg0MTk1LA0KLSAgICAweEI4QTEsIDB4QjhGRSwgMHgwNjlDLCAweEI5NDAsIDB4Qjk0RiwgMHg0MUIzLCAweEI5NTAsIDB4Qjk1MCwgMHgxRTQxLA0KLSAgICAweEI5NTEsIDB4Qjk2MCwgMHg0MUMzLCAweEI5NjEsIDB4Qjk2MSwgMHgyNUU0LCAweEI5NjIsIDB4Qjk3QSwgMHg0MUQzLA0KLSAgICAweEI5N0IsIDB4Qjk3QiwgMHgxRjg2LCAweEI5N0MsIDB4Qjk3RSwgMHg0MUVDLCAweEI5ODAsIDB4Qjk5QywgMHg0MUVGLA0KLSAgICAweEI5OUQsIDB4Qjk5RCwgMHgxRkIzLCAweEI5OUUsIDB4Qjk5RiwgMHg0MjBDLCAweEI5QTAsIDB4QjlBMCwgMHgxRUVGLA0KLSAgICAweEI5QTEsIDB4QjlGRSwgMHgwNkZBLCAweEJBNDAsIDB4QkE0MSwgMHg0MjBFLCAweEJBNDIsIDB4QkE0MiwgMHgyMkE0LA0KLSAgICAweEJBNDMsIDB4QkE0MywgMHg0MjEwLCAweEJBNDQsIDB4QkE0NCwgMHgyNUU4LCAweEJBNDUsIDB4QkE1NSwgMHg0MjExLA0KLSAgICAweEJBNTYsIDB4QkE1NiwgMHgyNUUzLCAweEJBNTcsIDB4QkE1OCwgMHg0MjIyLCAweEJBNTksIDB4QkE1OSwgMHgyMTExLA0KLSAgICAweEJBNUEsIDB4QkE1RiwgMHg0MjI0LCAweEJBNjAsIDB4QkE2MCwgMHgyNUU2LCAweEJBNjEsIDB4QkE2OSwgMHg0MjJBLA0KLSAgICAweEJBNkEsIDB4QkE2QSwgMHgyNUU3LCAweEJBNkIsIDB4QkE3MywgMHg0MjMzLCAweEJBNzQsIDB4QkE3NCwgMHgyMDQxLA0KLSAgICAweEJBNzUsIDB4QkE3RSwgMHg0MjNDLCAweEJBODAsIDB4QkE4MywgMHg0MjQ2LCAweEJBODQsIDB4QkE4NCwgMHgyNUVBLA0KLSAgICAweEJBODUsIDB4QkE4NSwgMHg0MjRBLCAweEJBODYsIDB4QkE4NiwgMHgxRjhGLCAweEJBODcsIDB4QkE4NywgMHg0MjRCLA0KLSAgICAweEJBODgsIDB4QkE4OCwgMHgyNUVDLCAweEJBODksIDB4QkE4QywgMHg0MjRDLCAweEJBOEQsIDB4QkE4RCwgMHgyNUVCLA0KLSAgICAweEJBOEUsIDB4QkE5RCwgMHg0MjUwLCAweEJBOUUsIDB4QkE5RSwgMHgyMEQwLCAweEJBOUYsIDB4QkE5RiwgMHgyMDFELA0KLSAgICAweEJBQTAsIDB4QkFBMCwgMHg0MjYwLCAweEJBQTEsIDB4QkFGRSwgMHgwNzU4LCAweEJCNDAsIDB4QkI0MCwgMHgxRkY3LA0KLSAgICAweEJCNDEsIDB4QkI0OCwgMHg0MjYxLCAweEJCNDksIDB4QkI0OSwgMHgxRThELCAweEJCNEEsIDB4QkI1NywgMHg0MjY5LA0KLSAgICAweEJCNTgsIDB4QkI1OCwgMHgyNUU5LCAweEJCNTksIDB4QkI1QSwgMHg0Mjc3LCAweEJCNUIsIDB4QkI1QiwgMHgyNUVFLA0KLSAgICAweEJCNUMsIDB4QkI1QywgMHgyMDNBLCAweEJCNUQsIDB4QkI1RiwgMHg0Mjc5LCAweEJCNjAsIDB4QkI2MCwgMHgyNjkzLA0KLSAgICAweEJCNjEsIDB4QkI2NCwgMHg0MjdDLCAweEJCNjUsIDB4QkI2NSwgMHgyNUU1LCAweEJCNjYsIDB4QkI2NiwgMHgyNUVELA0KLSAgICAweEJCNjcsIDB4QkI2NywgMHg0MjgwLCAweEJCNjgsIDB4QkI2OCwgMHgyMDA5LCAweEJCNjksIDB4QkI2OSwgMHg0MjgxLA0KLSAgICAweEJCNkEsIDB4QkI2QSwgMHgyMDY1LCAweEJCNkIsIDB4QkI2RCwgMHg0MjgyLCAweEJCNkUsIDB4QkI2RSwgMHgyNkEzLA0KLSAgICAweEJCNkYsIDB4QkI3RSwgMHg0Mjg1LCAweEJCODAsIDB4QkJBMCwgMHg0Mjk1LCAweEJCQTEsIDB4QkJGRSwgMHgwN0I2LA0KLSAgICAweEJDNDAsIDB4QkM1MSwgMHg0MkI2LCAweEJDNTIsIDB4QkM1MiwgMHgyNUY1LCAweEJDNTMsIDB4QkM1MywgMHgxRUZDLA0KLSAgICAweEJDNTQsIDB4QkM1OSwgMHg0MkM4LCAweEJDNUEsIDB4QkM1QSwgMHgyMDI0LCAweEJDNUIsIDB4QkM2MCwgMHg0MkNFLA0KLSAgICAweEJDNjEsIDB4QkM2MSwgMHgyNjlCLCAweEJDNjIsIDB4QkM2MiwgMHg0MkQ0LCAweEJDNjMsIDB4QkM2MywgMHgyNUYzLA0KLSAgICAweEJDNjQsIDB4QkM2NCwgMHg0MkQ1LCAweEJDNjUsIDB4QkM2NSwgMHgyMkQ5LCAweEJDNjYsIDB4QkM2NiwgMHg0MkQ2LA0KLSAgICAweEJDNjcsIDB4QkM2NywgMHgyNUY0LCAweEJDNjgsIDB4QkM2OCwgMHg0MkQ3LCAweEJDNjksIDB4QkM2OSwgMHgyNDFCLA0KLSAgICAweEJDNkEsIDB4QkM2QywgMHg0MkQ4LCAweEJDNkQsIDB4QkM2RCwgMHgxRkM4LCAweEJDNkUsIDB4QkM2RSwgMHg0MkRCLA0KLSAgICAweEJDNkYsIDB4QkM2RiwgMHgxRjdCLCAweEJDNzAsIDB4QkM3MCwgMHg0MkRDLCAweEJDNzEsIDB4QkM3MSwgMHgyNDFELA0KLSAgICAweEJDNzIsIDB4QkM3MiwgMHg0MkRELCAweEJDNzMsIDB4QkM3MywgMHgyMjRDLCAweEJDNzQsIDB4QkM3NCwgMHgxRjQ4LA0KLSAgICAweEJDNzUsIDB4QkM3NSwgMHgyNDFDLCAweEJDNzYsIDB4QkM3NywgMHgyNDFFLCAweEJDNzgsIDB4QkM3OCwgMHgyMEZGLA0KLSAgICAweEJDNzksIDB4QkM3OSwgMHgyMTlBLCAweEJDN0EsIDB4QkM3QSwgMHg0MkRFLCAweEJDN0IsIDB4QkM3QiwgMHgyMDkxLA0KLSAgICAweEJDN0MsIDB4QkM3RCwgMHg0MkRGLCAweEJDN0UsIDB4QkM3RSwgMHgyMEE3LCAweEJDODAsIDB4QkM4MSwgMHg0MkUxLA0KLSAgICAweEJDODIsIDB4QkM4MiwgMHgyNDIzLCAweEJDODMsIDB4QkM4MywgMHgxRTlCLCAweEJDODQsIDB4QkM4NCwgMHgyNDIyLA0KLSAgICAweEJDODUsIDB4QkM4NSwgMHg0MkUzLCAweEJDODYsIDB4QkM4NiwgMHgyMTEwLCAweEJDODcsIDB4QkM4NywgMHg0MkU0LA0KLSAgICAweEJDODgsIDB4QkM4OCwgMHgyMjhELCAweEJDODksIDB4QkM4OSwgMHgxRjcxLCAweEJDOEEsIDB4QkM4QSwgMHgxRUY4LA0KLSAgICAweEJDOEIsIDB4QkM4QiwgMHgyNDIxLCAweEJDOEMsIDB4QkM4RSwgMHg0MkU1LCAweEJDOEYsIDB4QkM4RiwgMHgxRUYzLA0KLSAgICAweEJDOTAsIDB4QkM5OSwgMHg0MkU4LCAweEJDOUEsIDB4QkM5QSwgMHgyMUIxLCAweEJDOUIsIDB4QkM5QiwgMHgyNDI2LA0KLSAgICAweEJDOUMsIDB4QkM5QywgMHgyNDI1LCAweEJDOUQsIDB4QkM5RCwgMHgyMTIwLCAweEJDOUUsIDB4QkNBMCwgMHg0MkYyLA0KLSAgICAweEJDQTEsIDB4QkNGRSwgMHgwODE0LCAweEJENDAsIDB4QkQ0MSwgMHg0MkY1LCAweEJENDIsIDB4QkQ0MiwgMHgyMTFBLA0KLSAgICAweEJENDMsIDB4QkQ0MywgMHgyNDI0LCAweEJENDQsIDB4QkQ0NCwgMHg0MkY3LCAweEJENDUsIDB4QkQ0NSwgMHgyNDI4LA0KLSAgICAweEJENDYsIDB4QkQ0NywgMHg0MkY4LCAweEJENDgsIDB4QkQ0OCwgMHgyNDJBLCAweEJENDksIDB4QkQ0OSwgMHgyNDI5LA0KLSAgICAweEJENEEsIDB4QkQ0QSwgMHg0MkZBLCAweEJENEIsIDB4QkQ0QiwgMHgyMjk0LCAweEJENEMsIDB4QkQ0QywgMHg0MkZCLA0KLSAgICAweEJENEQsIDB4QkQ0RCwgMHgyMkJFLCAweEJENEUsIDB4QkQ0RSwgMHg0MkZDLCAweEJENEYsIDB4QkQ0RiwgMHgxRTMxLA0KLSAgICAweEJENTAsIDB4QkQ1NiwgMHg0MkZELCAweEJENTcsIDB4QkQ1NywgMHgyNDJDLCAweEJENTgsIDB4QkQ1OCwgMHg0MzA0LA0KLSAgICAweEJENTksIDB4QkQ1OSwgMHgxRkI1LCAweEJENUEsIDB4QkQ2NSwgMHg0MzA1LCAweEJENjYsIDB4QkQ2NiwgMHgyNDJCLA0KLSAgICAweEJENjcsIDB4QkQ2NywgMHgxRkFGLCAweEJENjgsIDB4QkQ2OSwgMHg0MzExLCAweEJENkEsIDB4QkQ2QSwgMHgyMDY4LA0KLSAgICAweEJENkIsIDB4QkQ2QiwgMHgyMUU0LCAweEJENkMsIDB4QkQ2RSwgMHg0MzEzLCAweEJENkYsIDB4QkQ2RiwgMHgxRjIxLA0KLSAgICAweEJENzAsIDB4QkQ3MCwgMHg0MzE2LCAweEJENzEsIDB4QkQ3MSwgMHgyMTAxLCAweEJENzIsIDB4QkQ3OCwgMHg0MzE3LA0KLSAgICAweEJENzksIDB4QkQ3OSwgMHgyMTdDLCAweEJEN0EsIDB4QkQ3QSwgMHgyMTRBLCAweEJEN0IsIDB4QkQ3QiwgMHgyNDJELA0KLSAgICAweEJEN0MsIDB4QkQ3RCwgMHg0MzFFLCAweEJEN0UsIDB4QkQ3RSwgMHgxRkQ0LCAweEJEODAsIDB4QkQ4MCwgMHg0MzIwLA0KLSAgICAweEJEODEsIDB4QkQ4MSwgMHgxRkQxLCAweEJEODIsIDB4QkQ4OCwgMHg0MzIxLCAweEJEODksIDB4QkQ4OSwgMHgxRTMzLA0KLSAgICAweEJEOEEsIDB4QkQ4QSwgMHg0MzI4LCAweEJEOEIsIDB4QkQ4QiwgMHgyNDJGLCAweEJEOEMsIDB4QkQ4RCwgMHg0MzI5LA0KLSAgICAweEJEOEUsIDB4QkQ4RSwgMHgyNDJFLCAweEJEOEYsIDB4QkQ4RiwgMHg0MzJCLCAweEJEOTAsIDB4QkQ5MCwgMHgyNDMwLA0KLSAgICAweEJEOTEsIDB4QkQ5MSwgMHgyMURCLCAweEJEOTIsIDB4QkQ5NiwgMHg0MzJDLCAweEJEOTcsIDB4QkQ5NywgMHgyMTU4LA0KLSAgICAweEJEOTgsIDB4QkQ5QSwgMHg0MzMxLCAweEJEOUIsIDB4QkQ5QiwgMHgxRkMyLCAweEJEOUMsIDB4QkRBMCwgMHg0MzM0LA0KLSAgICAweEJEQTEsIDB4QkRGRSwgMHgwODcyLCAweEJFNDAsIDB4QkU0MiwgMHg0MzM5LCAweEJFNDMsIDB4QkU0MywgMHgyMkI5LA0KLSAgICAweEJFNDQsIDB4QkU0NCwgMHg0MzNDLCAweEJFNDUsIDB4QkU0NSwgMHgyNDM2LCAweEJFNDYsIDB4QkU0OCwgMHg0MzNELA0KLSAgICAweEJFNDksIDB4QkU0OSwgMHgxRThFLCAweEJFNEEsIDB4QkU0QSwgMHgyNDM5LCAweEJFNEIsIDB4QkU1MCwgMHg0MzQwLA0KLSAgICAweEJFNTEsIDB4QkU1MSwgMHgyMUM1LCAweEJFNTIsIDB4QkU1MiwgMHgyNDM3LCAweEJFNTMsIDB4QkU1MywgMHgyMTkyLA0KLSAgICAweEJFNTQsIDB4QkU1NCwgMHg0MzQ2LCAweEJFNTUsIDB4QkU1NSwgMHgyNDNBLCAweEJFNTYsIDB4QkU1NiwgMHgxRjE5LA0KLSAgICAweEJFNTcsIDB4QkU1NywgMHgyMThDLCAweEJFNTgsIDB4QkU1OCwgMHgxRTQwLCAweEJFNTksIDB4QkU1OSwgMHgyMkIzLA0KLSAgICAweEJFNUEsIDB4QkU1QywgMHg0MzQ3LCAweEJFNUQsIDB4QkU1RCwgMHgyMDVGLCAweEJFNUUsIDB4QkU1RSwgMHgyNDM4LA0KLSAgICAweEJFNUYsIDB4QkU1RiwgMHgyNDMyLCAweEJFNjAsIDB4QkU2MCwgMHgyMjc0LCAweEJFNjEsIDB4QkU2MSwgMHg0MzRBLA0KLSAgICAweEJFNjIsIDB4QkU2MiwgMHgxRTlDLCAweEJFNjMsIDB4QkU2MywgMHgyNDMxLCAweEJFNjQsIDB4QkU2NCwgMHgyMDg1LA0KLSAgICAweEJFNjUsIDB4QkU2OCwgMHg0MzRCLCAweEJFNjksIDB4QkU2OSwgMHgyNDM1LCAweEJFNkEsIDB4QkU2QiwgMHg0MzRGLA0KLSAgICAweEJFNkMsIDB4QkU2QywgMHgyNDNCLCAweEJFNkQsIDB4QkU2RSwgMHg0MzUxLCAweEJFNkYsIDB4QkU2RiwgMHgxRkI3LA0KLSAgICAweEJFNzAsIDB4QkU3MCwgMHgyNDMzLCAweEJFNzEsIDB4QkU3NSwgMHg0MzUzLCAweEJFNzYsIDB4QkU3NiwgMHgyMDU0LA0KLSAgICAweEJFNzcsIDB4QkU3NywgMHgyMURFLCAweEJFNzgsIDB4QkU3OCwgMHg0MzU4LCAweEJFNzksIDB4QkU3OSwgMHgyNDM0LA0KLSAgICAweEJFN0EsIDB4QkU3QiwgMHg0MzU5LCAweEJFN0MsIDB4QkU3QywgMHgyNDNELCAweEJFN0QsIDB4QkU3RCwgMHgxRjg5LA0KLSAgICAweEJFN0UsIDB4QkU3RSwgMHgyNDNDLCAweEJFODAsIDB4QkU4MiwgMHg0MzVCLCAweEJFODMsIDB4QkU4MywgMHgxRjZFLA0KLSAgICAweEJFODQsIDB4QkU4NCwgMHgxRUQ4LCAweEJFODUsIDB4QkU4NSwgMHg0MzVFLCAweEJFODYsIDB4QkU4NiwgMHgxRUJGLA0KLSAgICAweEJFODcsIDB4QkU4NywgMHgyNDQ1LCAweEJFODgsIDB4QkU4OCwgMHg0MzVGLCAweEJFODksIDB4QkU4OSwgMHgyMjQ5LA0KLSAgICAweEJFOEEsIDB4QkU4QiwgMHg0MzYwLCAweEJFOEMsIDB4QkU4QywgMHgyNDQxLCAweEJFOEQsIDB4QkU4RCwgMHg0MzYyLA0KLSAgICAweEJFOEUsIDB4QkU4RSwgMHgxRTQ3LCAweEJFOEYsIDB4QkU4RiwgMHgxRjU2LCAweEJFOTAsIDB4QkU5MSwgMHg0MzYzLA0KLSAgICAweEJFOTIsIDB4QkU5MiwgMHgyMDg2LCAweEJFOTMsIDB4QkU5NCwgMHg0MzY1LCAweEJFOTUsIDB4QkU5NSwgMHgyMTk2LA0KLSAgICAweEJFOTYsIDB4QkU5NiwgMHg0MzY3LCAweEJFOTcsIDB4QkU5NywgMHgyNDQzLCAweEJFOTgsIDB4QkU5OCwgMHgyNDNGLA0KLSAgICAweEJFOTksIDB4QkU5OSwgMHg0MzY4LCAweEJFOUEsIDB4QkU5QSwgMHgyMDIzLCAweEJFOUIsIDB4QkU5QiwgMHg0MzY5LA0KLSAgICAweEJFOUMsIDB4QkU5QywgMHgyNDQyLCAweEJFOUQsIDB4QkU5RSwgMHg0MzZBLCAweEJFOUYsIDB4QkU5RiwgMHgyNDNFLA0KLSAgICAweEJFQTAsIDB4QkVBMCwgMHg0MzZDLCAweEJFQTEsIDB4QkVGRSwgMHgwOEQwLCAweEJGNDAsIDB4QkY0MCwgMHgyNkE2LA0KLSAgICAweEJGNDEsIDB4QkY0QywgMHg0MzZELCAweEJGNEQsIDB4QkY0RCwgMHgyMzRFLCAweEJGNEUsIDB4QkY0RSwgMHgyNDQ2LA0KLSAgICAweEJGNEYsIDB4QkY0RiwgMHgyNDRCLCAweEJGNTAsIDB4QkY1MCwgMHgyNDQ0LCAweEJGNTEsIDB4QkY1NCwgMHg0Mzc5LA0KLSAgICAweEJGNTUsIDB4QkY1NSwgMHgyNDI3LCAweEJGNTYsIDB4QkY1NiwgMHgyNDRDLCAweEJGNTcsIDB4QkY1RiwgMHg0MzdELA0KLSAgICAweEJGNjAsIDB4QkY2MCwgMHgxRjBGLCAweEJGNjEsIDB4QkY2MSwgMHg0Mzg2LCAweEJGNjIsIDB4QkY2MiwgMHgyNDQ3LA0KLSAgICAweEJGNjMsIDB4QkY2MywgMHgyNDQ5LCAweEJGNjQsIDB4QkY2NCwgMHgyNDQ4LCAweEJGNjUsIDB4QkY2NywgMHg0Mzg3LA0KLSAgICAweEJGNjgsIDB4QkY2OCwgMHgyMUMyLCAweEJGNjksIDB4QkY2QiwgMHg0MzhBLCAweEJGNkMsIDB4QkY2QywgMHgyMTZFLA0KLSAgICAweEJGNkQsIDB4QkY2RiwgMHg0MzhELCAweEJGNzAsIDB4QkY3MCwgMHgxRjAzLCAweEJGNzEsIDB4QkY3MSwgMHg0MzkwLA0KLSAgICAweEJGNzIsIDB4QkY3MiwgMHgyNDRBLCAweEJGNzMsIDB4QkY3MywgMHgyMTVDLCAweEJGNzQsIDB4QkY3NSwgMHg0MzkxLA0KLSAgICAweEJGNzYsIDB4QkY3NiwgMHgyMkJCLCAweEJGNzcsIDB4QkY3NywgMHgyNDUwLCAweEJGNzgsIDB4QkY3OCwgMHg0MzkzLA0KLSAgICAweEJGNzksIDB4QkY3OSwgMHgyNjk0LCAweEJGN0EsIDB4QkY3QSwgMHgyNDRGLCAweEJGN0IsIDB4QkY3QiwgMHgyNUY2LA0KLSAgICAweEJGN0MsIDB4QkY3QywgMHgyMDUxLCAweEJGN0QsIDB4QkY3RCwgMHg0Mzk0LCAweEJGN0UsIDB4QkY3RSwgMHgyNDRFLA0KLSAgICAweEJGODAsIDB4QkY4MSwgMHg0Mzk1LCAweEJGODIsIDB4QkY4MiwgMHgyMkJBLCAweEJGODMsIDB4QkY4MywgMHgxRjZELA0KLSAgICAweEJGODQsIDB4QkY4OCwgMHg0Mzk3LCAweEJGODksIDB4QkY4OSwgMHgyNDUyLCAweEJGOEEsIDB4QkY4QSwgMHgyNDUxLA0KLSAgICAweEJGOEIsIDB4QkY5NCwgMHg0MzlDLCAweEJGOTUsIDB4QkY5NSwgMHgyNDU1LCAweEJGOTYsIDB4QkY5NiwgMHg0M0E2LA0KLSAgICAweEJGOTcsIDB4QkY5NywgMHgyMjg5LCAweEJGOTgsIDB4QkY5OCwgMHgyMTE2LCAweEJGOTksIDB4QkY5QywgMHg0M0E3LA0KLSAgICAweEJGOUQsIDB4QkY5RCwgMHgyNDU0LCAweEJGOUUsIDB4QkZBMCwgMHg0M0FCLCAweEJGQTEsIDB4QkZGRSwgMHgwOTJFLA0KLSAgICAweEMwNDAsIDB4QzA0MCwgMHgyMEZCLCAweEMwNDEsIDB4QzA0MywgMHg0M0FFLCAweEMwNDQsIDB4QzA0NCwgMHgyNDQwLA0KLSAgICAweEMwNDUsIDB4QzA0QSwgMHg0M0IxLCAweEMwNEIsIDB4QzA0QiwgMHgyMTI2LCAweEMwNEMsIDB4QzA0QywgMHgxRjYxLA0KLSAgICAweEMwNEQsIDB4QzA0RCwgMHgyNjlELCAweEMwNEUsIDB4QzA0RSwgMHg0M0I3LCAweEMwNEYsIDB4QzA0RiwgMHgxRjhBLA0KLSAgICAweEMwNTAsIDB4QzA1MCwgMHgyNDU2LCAweEMwNTEsIDB4QzA1MSwgMHgyNDU5LCAweEMwNTIsIDB4QzA1MiwgMHgyNDU4LA0KLSAgICAweEMwNTMsIDB4QzA1NCwgMHg0M0I4LCAweEMwNTUsIDB4QzA1NSwgMHgxRkFFLCAweEMwNTYsIDB4QzA1QSwgMHg0M0JBLA0KLSAgICAweEMwNUIsIDB4QzA1QiwgMHgyMjFBLCAweEMwNUMsIDB4QzA1RCwgMHg0M0JGLCAweEMwNUUsIDB4QzA1RSwgMHgxRjdBLA0KLSAgICAweEMwNUYsIDB4QzA1RiwgMHgyNDRELCAweEMwNjAsIDB4QzA2MCwgMHgyNDU3LCAweEMwNjEsIDB4QzA2OCwgMHg0M0MxLA0KLSAgICAweEMwNjksIDB4QzA2OSwgMHgyNDUzLCAweEMwNkEsIDB4QzA2QSwgMHg0M0M5LCAweEMwNkIsIDB4QzA2QiwgMHgyNDIwLA0KLSAgICAweEMwNkMsIDB4QzA2QywgMHg0M0NBLCAweEMwNkQsIDB4QzA2RCwgMHgyMURGLCAweEMwNkUsIDB4QzA2RSwgMHgyNjg1LA0KLSAgICAweEMwNkYsIDB4QzA2RiwgMHg0M0NCLCAweEMwNzAsIDB4QzA3MCwgMHgxRTZFLCAweEMwNzEsIDB4QzA3MywgMHg0M0NDLA0KLSAgICAweEMwNzQsIDB4QzA3NCwgMHgyMjI0LCAweEMwNzUsIDB4QzA3NSwgMHgyNjcwLCAweEMwNzYsIDB4QzA3NiwgMHg0M0NGLA0KLSAgICAweEMwNzcsIDB4QzA3NywgMHgyMUJBLCAweEMwNzgsIDB4QzA3OCwgMHg0M0QwLCAweEMwNzksIDB4QzA3OSwgMHgyNDVBLA0KLSAgICAweEMwN0EsIDB4QzA3QiwgMHg0M0QxLCAweEMwN0MsIDB4QzA3QywgMHgxRkZGLCAweEMwN0QsIDB4QzA3RSwgMHg0M0QzLA0KLSAgICAweEMwODAsIDB4QzA5QSwgMHg0M0Q1LCAweEMwOUIsIDB4QzA5QiwgMHgyNUUyLCAweEMwOUMsIDB4QzA5QywgMHg0M0YwLA0KLSAgICAweEMwOUQsIDB4QzA5RCwgMHgyNjlBLCAweEMwOUUsIDB4QzBBMCwgMHg0M0YxLCAweEMwQTEsIDB4QzBGRSwgMHgwOThDLA0KLSAgICAweEMxNDAsIDB4QzE0RiwgMHg0M0Y0LCAweEMxNTAsIDB4QzE1MCwgMHgxRUVBLCAweEMxNTEsIDB4QzE1MywgMHg0NDA0LA0KLSAgICAweEMxNTQsIDB4QzE1NCwgMHgxRTJDLCAweEMxNTUsIDB4QzE1RSwgMHg0NDA3LCAweEMxNUYsIDB4QzE1RiwgMHgyMDYyLA0KLSAgICAweEMxNjAsIDB4QzE2MCwgMHgyNEYxLCAweEMxNjEsIDB4QzE2MSwgMHg0NDExLCAweEMxNjIsIDB4QzE2MiwgMHgyNEYyLA0KLSAgICAweEMxNjMsIDB4QzE3NCwgMHg0NDEyLCAweEMxNzUsIDB4QzE3NSwgMHgyNUYyLCAweEMxNzYsIDB4QzE3NywgMHg0NDI0LA0KLSAgICAweEMxNzgsIDB4QzE3OCwgMHgyMjE1LCAweEMxNzksIDB4QzE3RSwgMHg0NDI2LCAweEMxODAsIDB4QzE5NCwgMHg0NDJDLA0KLSAgICAweEMxOTUsIDB4QzE5NSwgMHgyMUFFLCAweEMxOTYsIDB4QzFBMCwgMHg0NDQxLCAweEMxQTEsIDB4QzFGRSwgMHgwOUVBLA0KLSAgICAweEMyNDAsIDB4QzI0RCwgMHg0NDRDLCAweEMyNEUsIDB4QzI0RSwgMHgyMEUwLCAweEMyNEYsIDB4QzI2NCwgMHg0NDVBLA0KLSAgICAweEMyNjUsIDB4QzI2NSwgMHgyNUMyLCAweEMyNjYsIDB4QzI2NiwgMHg0NDcwLCAweEMyNjcsIDB4QzI2NywgMHgyNUMxLA0KLSAgICAweEMyNjgsIDB4QzI3QywgMHg0NDcxLCAweEMyN0QsIDB4QzI3RCwgMHgyMTI4LCAweEMyN0UsIDB4QzI3RSwgMHg0NDg2LA0KLSAgICAweEMyODAsIDB4QzI4MywgMHg0NDg3LCAweEMyODQsIDB4QzI4NCwgMHgyMTk5LCAweEMyODUsIDB4QzI5MiwgMHg0NDhCLA0KLSAgICAweEMyOTMsIDB4QzI5MywgMHgyMDE3LCAweEMyOTQsIDB4QzI5NCwgMHgxRUEwLCAweEMyOTUsIDB4QzI5NSwgMHgyMTI1LA0KLSAgICAweEMyOTYsIDB4QzI5NiwgMHgyMTRELCAweEMyOTcsIDB4QzI5NywgMHg0NDk5LCAweEMyOTgsIDB4QzI5OCwgMHgyNUM0LA0KLSAgICAweEMyOTksIDB4QzI5OSwgMHgyMDlELCAweEMyOUEsIDB4QzI5QSwgMHgyMjhBLCAweEMyOUIsIDB4QzI5QiwgMHg0NDlBLA0KLSAgICAweEMyOUMsIDB4QzI5QywgMHgyNUMzLCAweEMyOUQsIDB4QzI5RiwgMHg0NDlCLCAweEMyQTAsIDB4QzJBMCwgMHgyMTc5LA0KLSAgICAweEMyQTEsIDB4QzJGRSwgMHgwQTQ4LCAweEMzNDAsIDB4QzM0MCwgMHgyMDM4LCAweEMzNDEsIDB4QzM0MiwgMHg0NDlFLA0KLSAgICAweEMzNDMsIDB4QzM0MywgMHgyMTU1LCAweEMzNDQsIDB4QzM3QSwgMHg0NEEwLCAweEMzN0IsIDB4QzM3QiwgMHgyMUQyLA0KLSAgICAweEMzN0MsIDB4QzM3RSwgMHg0NEQ3LCAweEMzODAsIDB4QzM4MywgMHg0NERBLCAweEMzODQsIDB4QzM4NCwgMHgyNEM3LA0KLSAgICAweEMzODUsIDB4QzM5QSwgMHg0NERFLCAweEMzOUIsIDB4QzM5QiwgMHgyMjc5LCAweEMzOUMsIDB4QzNBMCwgMHg0NEY0LA0KLSAgICAweEMzQTEsIDB4QzNGRSwgMHgwQUE2LCAweEM0NDAsIDB4QzQ0OCwgMHg0NEY5LCAweEM0NDksIDB4QzQ0OSwgMHgyMTIzLA0KLSAgICAweEM0NEEsIDB4QzQ0QiwgMHg0NTAyLCAweEM0NEMsIDB4QzQ0QywgMHgyNEM1LCAweEM0NEQsIDB4QzQ1MywgMHg0NTA0LA0KLSAgICAweEM0NTQsIDB4QzQ1NCwgMHgyNEM5LCAweEM0NTUsIDB4QzQ1NywgMHg0NTBCLCAweEM0NTgsIDB4QzQ1OCwgMHgyMDk0LA0KLSAgICAweEM0NTksIDB4QzQ1QSwgMHg0NTBFLCAweEM0NUIsIDB4QzQ1QiwgMHgyMjk2LCAweEM0NUMsIDB4QzQ2MiwgMHg0NTEwLA0KLSAgICAweEM0NjMsIDB4QzQ2MywgMHgxRTc3LCAweEM0NjQsIDB4QzQ3NiwgMHg0NTE3LCAweEM0NzcsIDB4QzQ3NywgMHgxRjA2LA0KLSAgICAweEM0NzgsIDB4QzQ3OSwgMHg0NTJBLCAweEM0N0EsIDB4QzQ3QSwgMHgxRkE1LCAweEM0N0IsIDB4QzQ3RSwgMHg0NTJDLA0KLSAgICAweEM0ODAsIDB4QzQ4MCwgMHg0NTMwLCAweEM0ODEsIDB4QzQ4MSwgMHgyMDk5LCAweEM0ODIsIDB4QzQ5MCwgMHg0NTMxLA0KLSAgICAweEM0OTEsIDB4QzQ5MSwgMHgxRUFELCAweEM0OTIsIDB4QzQ5MiwgMHgyNEM4LCAweEM0OTMsIDB4QzQ5MywgMHgyMEE4LA0KLSAgICAweEM0OTQsIDB4QzQ5NywgMHg0NTQwLCAweEM0OTgsIDB4QzQ5OCwgMHgyMDFGLCAweEM0OTksIDB4QzQ5OSwgMHg0NTQ0LA0KLSAgICAweEM0OUEsIDB4QzQ5QSwgMHgyMEM1LCAweEM0OUIsIDB4QzQ5QiwgMHg0NTQ1LCAweEM0OUMsIDB4QzQ5QywgMHgyNENBLA0KLSAgICAweEM0OUQsIDB4QzRBMCwgMHg0NTQ2LCAweEM0QTEsIDB4QzRGRSwgMHgwQjA0LCAweEM1NDAsIDB4QzU0MywgMHg0NTRBLA0KLSAgICAweEM1NDQsIDB4QzU0NCwgMHgxRkYwLCAweEM1NDUsIDB4QzU0NSwgMHg0NTRFLCAweEM1NDYsIDB4QzU0NiwgMHgyNEM2LA0KLSAgICAweEM1NDcsIDB4QzU0QSwgMHg0NTRGLCAweEM1NEIsIDB4QzU0QiwgMHgyMjVELCAweEM1NEMsIDB4QzU0QywgMHgyMkRFLA0KLSAgICAweEM1NEQsIDB4QzU1MSwgMHg0NTUzLCAweEM1NTIsIDB4QzU1MiwgMHgyMDJDLCAweEM1NTMsIDB4QzU1RSwgMHg0NTU4LA0KLSAgICAweEM1NUYsIDB4QzU1RiwgMHgyMTYxLCAweEM1NjAsIDB4QzU2MiwgMHg0NTY0LCAweEM1NjMsIDB4QzU2MywgMHgyMjNCLA0KLSAgICAweEM1NjQsIDB4QzU2NCwgMHgyMUQ5LCAweEM1NjUsIDB4QzU2NSwgMHgxRkNCLCAweEM1NjYsIDB4QzU2NiwgMHgxRkM5LA0KLSAgICAweEM1NjcsIDB4QzU3RSwgMHg0NTY3LCAweEM1ODAsIDB4QzU5MiwgMHg0NTdGLCAweEM1OTMsIDB4QzU5MywgMHgxRTYxLA0KLSAgICAweEM1OTQsIDB4QzU5QiwgMHg0NTkyLCAweEM1OUMsIDB4QzU5QywgMHgyNUVGLCAweEM1OUQsIDB4QzU5RCwgMHg0NTlBLA0KLSAgICAweEM1OUUsIDB4QzU5RSwgMHgxRjk4LCAweEM1OUYsIDB4QzVBMCwgMHg0NTlCLCAweEM1QTEsIDB4QzVGRSwgMHgwQjYyLA0KLSAgICAweEM2NDAsIDB4QzY0MCwgMHg0NTlELCAweEM2NDEsIDB4QzY0MSwgMHgyNUYwLCAweEM2NDIsIDB4QzY0MywgMHg0NTlFLA0KLSAgICAweEM2NDQsIDB4QzY0NCwgMHgxRjg4LCAweEM2NDUsIDB4QzY0NiwgMHg0NUEwLCAweEM2NDcsIDB4QzY0NywgMHgyMUY4LA0KLSAgICAweEM2NDgsIDB4QzY2MiwgMHg0NUEyLCAweEM2NjMsIDB4QzY2MywgMHgyMzIyLCAweEM2NjQsIDB4QzY3MSwgMHg0NUJELA0KLSAgICAweEM2NzIsIDB4QzY3MiwgMHgyMzM2LCAweEM2NzMsIDB4QzY3RSwgMHg0NUNCLCAweEM2ODAsIDB4QzZBMCwgMHg0NUQ3LA0KLSAgICAweEM2QTEsIDB4QzZGRSwgMHgwQkMwLCAweEM3NDAsIDB4Qzc2NSwgMHg0NUY4LCAweEM3NjYsIDB4Qzc2NiwgMHgyMkFCLA0KLSAgICAweEM3NjcsIDB4Qzc2RSwgMHg0NjFFLCAweEM3NkYsIDB4Qzc2RiwgMHgxRkJGLCAweEM3NzAsIDB4Qzc3NSwgMHg0NjI2LA0KLSAgICAweEM3NzYsIDB4Qzc3NiwgMHgxRjdELCAweEM3NzcsIDB4Qzc3QSwgMHg0NjJDLCAweEM3N0IsIDB4Qzc3QiwgMHgyMzMzLA0KLSAgICAweEM3N0MsIDB4Qzc3RSwgMHg0NjMwLCAweEM3ODAsIDB4QzdBMCwgMHg0NjMzLCAweEM3QTEsIDB4QzdGRSwgMHgwQzFFLA0KLSAgICAweEM4NDAsIDB4Qzg0MCwgMHg0NjU0LCAweEM4NDEsIDB4Qzg0MSwgMHgxRjRELCAweEM4NDIsIDB4Qzg0RSwgMHg0NjU1LA0KLSAgICAweEM4NEYsIDB4Qzg0RiwgMHgyMzM0LCAweEM4NTAsIDB4Qzg1MSwgMHg0NjYyLCAweEM4NTIsIDB4Qzg1MiwgMHgxRkYxLA0KLSAgICAweEM4NTMsIDB4Qzg2NSwgMHg0NjY0LCAweEM4NjYsIDB4Qzg2NiwgMHgyMThCLCAweEM4NjcsIDB4Qzg2RCwgMHg0Njc3LA0KLSAgICAweEM4NkUsIDB4Qzg2RSwgMHgyMzQ5LCAweEM4NkYsIDB4Qzg3RCwgMHg0NjdFLCAweEM4N0UsIDB4Qzg3RSwgMHgyMjBCLA0KLSAgICAweEM4ODAsIDB4Qzg4NiwgMHg0NjhELCAweEM4ODcsIDB4Qzg4NywgMHgyMzQ2LCAweEM4ODgsIDB4Qzg5MSwgMHg0Njk0LA0KLSAgICAweEM4OTIsIDB4Qzg5MiwgMHgyMzQ3LCAweEM4OTMsIDB4Qzg5MywgMHg0NjlFLCAweEM4OTQsIDB4Qzg5NCwgMHgyMTkzLA0KLSAgICAweEM4OTUsIDB4Qzg5OCwgMHg0NjlGLCAweEM4OTksIDB4Qzg5OSwgMHgyNkExLCAweEM4OUEsIDB4Qzg5QywgMHg0NkEzLA0KLSAgICAweEM4OUQsIDB4Qzg5RCwgMHgxRjYyLCAweEM4OUUsIDB4QzhBMCwgMHg0NkE2LCAweEM4QTEsIDB4QzhGRSwgMHgwQzdDLA0KLSAgICAweEM5NDAsIDB4Qzk0RSwgMHg0NkE5LCAweEM5NEYsIDB4Qzk0RiwgMHgyMzRELCAweEM5NTAsIDB4Qzk1MCwgMHgyMzQ4LA0KLSAgICAweEM5NTEsIDB4Qzk2RCwgMHg0NkI4LCAweEM5NkUsIDB4Qzk2RSwgMHgxRTYwLCAweEM5NkYsIDB4Qzk2RiwgMHg0NkQ1LA0KLSAgICAweEM5NzAsIDB4Qzk3MCwgMHgyMzQ1LCAweEM5NzEsIDB4Qzk3NiwgMHg0NkQ2LCAweEM5NzcsIDB4Qzk3NywgMHgxRjEyLA0KLSAgICAweEM5NzgsIDB4Qzk3RSwgMHg0NkRDLCAweEM5ODAsIDB4Qzk4RSwgMHg0NkUzLCAweEM5OEYsIDB4Qzk4RiwgMHgyMDE4LA0KLSAgICAweEM5OTAsIDB4Qzk5MCwgMHgyMzM1LCAweEM5OTEsIDB4Qzk5QiwgMHg0NkYyLCAweEM5OUMsIDB4Qzk5QywgMHgyMzNDLA0KLSAgICAweEM5OUQsIDB4QzlBMCwgMHg0NkZELCAweEM5QTEsIDB4QzlGRSwgMHgwQ0RBLCAweENBNDAsIDB4Q0E0RCwgMHg0NzAxLA0KLSAgICAweENBNEUsIDB4Q0E0RSwgMHgyNjZGLCAweENBNEYsIDB4Q0E1NSwgMHg0NzBGLCAweENBNTYsIDB4Q0E1NiwgMHgyMzUxLA0KLSAgICAweENBNTcsIDB4Q0E1OCwgMHg0NzE2LCAweENBNTksIDB4Q0E1OSwgMHgxRkEwLCAweENBNUEsIDB4Q0E1QiwgMHg0NzE4LA0KLSAgICAweENBNUMsIDB4Q0E1QywgMHgyMzM4LCAweENBNUQsIDB4Q0E2MCwgMHg0NzFBLCAweENBNjEsIDB4Q0E2MSwgMHgyMjFCLA0KLSAgICAweENBNjIsIDB4Q0E2RCwgMHg0NzFFLCAweENBNkUsIDB4Q0E2RSwgMHgyMzQyLCAweENBNkYsIDB4Q0E3MSwgMHg0NzJBLA0KLSAgICAweENBNzIsIDB4Q0E3MiwgMHgyMzRGLCAweENBNzMsIDB4Q0E3NiwgMHg0NzJELCAweENBNzcsIDB4Q0E3NywgMHgyMzNELA0KLSAgICAweENBNzgsIDB4Q0E3QSwgMHg0NzMxLCAweENBN0IsIDB4Q0E3QiwgMHgyMzQ0LCAweENBN0MsIDB4Q0E3QywgMHgyMzMxLA0KLSAgICAweENBN0QsIDB4Q0E3RCwgMHg0NzM0LCAweENBN0UsIDB4Q0E3RSwgMHgyMzRCLCAweENBODAsIDB4Q0E4MCwgMHg0NzM1LA0KLSAgICAweENBODEsIDB4Q0E4MSwgMHgyMzNCLCAweENBODIsIDB4Q0E4OCwgMHg0NzM2LCAweENBODksIDB4Q0E4OSwgMHgyMzUwLA0KLSAgICAweENBOEEsIDB4Q0E4RCwgMHg0NzNELCAweENBOEUsIDB4Q0E4RSwgMHgxRUI0LCAweENBOEYsIDB4Q0E4RiwgMHgyMUE2LA0KLSAgICAweENBOTAsIDB4Q0E5MSwgMHg0NzQxLCAweENBOTIsIDB4Q0E5MiwgMHgyMUNCLCAweENBOTMsIDB4Q0E5OSwgMHg0NzQzLA0KLSAgICAweENBOUEsIDB4Q0E5QSwgMHgyMzU1LCAweENBOUIsIDB4Q0FBMCwgMHg0NzRBLCAweENBQTEsIDB4Q0FGRSwgMHgwRDM4LA0KLSAgICAweENCNDAsIDB4Q0I0MiwgMHg0NzUwLCAweENCNDMsIDB4Q0I0MywgMHgyMzNFLCAweENCNDQsIDB4Q0I0NCwgMHg0NzUzLA0KLSAgICAweENCNDUsIDB4Q0I0NSwgMHgxRjc0LCAweENCNDYsIDB4Q0I0NiwgMHg0NzU0LCAweENCNDcsIDB4Q0I0NywgMHgyMzMwLA0KLSAgICAweENCNDgsIDB4Q0I0QSwgMHg0NzU1LCAweENCNEIsIDB4Q0I0QiwgMHgyNjgwLCAweENCNEMsIDB4Q0I0RCwgMHg0NzU4LA0KLSAgICAweENCNEUsIDB4Q0I0RSwgMHgyMERBLCAweENCNEYsIDB4Q0I1NiwgMHg0NzVBLCAweENCNTcsIDB4Q0I1NywgMHgyMzRBLA0KLSAgICAweENCNTgsIDB4Q0I1QywgMHg0NzYyLCAweENCNUQsIDB4Q0I1RCwgMHgxRjkxLCAweENCNUUsIDB4Q0I1RSwgMHg0NzY3LA0KLSAgICAweENCNUYsIDB4Q0I1RiwgMHgyMTA3LCAweENCNjAsIDB4Q0I2OSwgMHg0NzY4LCAweENCNkEsIDB4Q0I2QSwgMHgyMzNGLA0KLSAgICAweENCNkIsIDB4Q0I3QSwgMHg0NzcyLCAweENCN0IsIDB4Q0I3QiwgMHgxRkY0LCAweENCN0MsIDB4Q0I3QywgMHgyMzQzLA0KLSAgICAweENCN0QsIDB4Q0I3RSwgMHg0NzgyLCAweENCODAsIDB4Q0I4NiwgMHg0Nzg0LCAweENCODcsIDB4Q0I4NywgMHgyMjEyLA0KLSAgICAweENCODgsIDB4Q0I4RCwgMHg0NzhCLCAweENCOEUsIDB4Q0I4RSwgMHgyMjA3LCAweENCOEYsIDB4Q0I5MSwgMHg0NzkxLA0KLSAgICAweENCOTIsIDB4Q0I5MiwgMHgyMzU5LCAweENCOTMsIDB4Q0I5QiwgMHg0Nzk0LCAweENCOUMsIDB4Q0I5QywgMHgyMjU0LA0KLSAgICAweENCOUQsIDB4Q0I5RCwgMHg0NzlELCAweENCOUUsIDB4Q0I5RSwgMHgyMzMyLCAweENCOUYsIDB4Q0JBMCwgMHg0NzlFLA0KLSAgICAweENCQTEsIDB4Q0JGRSwgMHgwRDk2LCAweENDNDAsIDB4Q0M0MCwgMHgxRTI2LCAweENDNDEsIDB4Q0M0MSwgMHgyMzU3LA0KLSAgICAweENDNDIsIDB4Q0M0OCwgMHg0N0EwLCAweENDNDksIDB4Q0M0OSwgMHgyMzU4LCAweENDNEEsIDB4Q0M0QSwgMHgyMDQyLA0KLSAgICAweENDNEIsIDB4Q0M0QiwgMHgyMTUzLCAweENDNEMsIDB4Q0M0RSwgMHg0N0E3LCAweENDNEYsIDB4Q0M0RiwgMHgyMEJCLA0KLSAgICAweENDNTAsIDB4Q0M1QiwgMHg0N0FBLCAweENDNUMsIDB4Q0M1QywgMHgyMzVBLCAweENDNUQsIDB4Q0M1RiwgMHg0N0I2LA0KLSAgICAweENDNjAsIDB4Q0M2MCwgMHgyMzU2LCAweENDNjEsIDB4Q0M2MywgMHg0N0I5LCAweENDNjQsIDB4Q0M2NCwgMHgyMzM3LA0KLSAgICAweENDNjUsIDB4Q0M2QywgMHg0N0JDLCAweENDNkQsIDB4Q0M2RCwgMHgxRkY5LCAweENDNkUsIDB4Q0M3OCwgMHg0N0M0LA0KLSAgICAweENDNzksIDB4Q0M3OSwgMHgyMzUzLCAweENDN0EsIDB4Q0M3QywgMHg0N0NGLCAweENDN0QsIDB4Q0M3RCwgMHgyMDYxLA0KLSAgICAweENDN0UsIDB4Q0M3RSwgMHg0N0QyLCAweENDODAsIDB4Q0M4RCwgMHg0N0QzLCAweENDOEUsIDB4Q0M4RSwgMHgxRTk1LA0KLSAgICAweENDOEYsIDB4Q0M5MywgMHg0N0UxLCAweENDOTQsIDB4Q0M5NCwgMHgyMDQ5LCAweENDOTUsIDB4Q0M5NSwgMHg0N0U2LA0KLSAgICAweENDOTYsIDB4Q0M5NiwgMHgxRjQyLCAweENDOTcsIDB4Q0M5QywgMHg0N0U3LCAweENDOUQsIDB4Q0M5RCwgMHgxRkU4LA0KLSAgICAweENDOUUsIDB4Q0NBMCwgMHg0N0VELCAweENDQTEsIDB4Q0NGRSwgMHgwREY0LCAweENENDAsIDB4Q0Q3RSwgMHg0N0YwLA0KLSAgICAweENEODAsIDB4Q0Q4RiwgMHg0ODJGLCAweENEOTAsIDB4Q0Q5MCwgMHgyNURBLCAweENEOTEsIDB4Q0Q5NywgMHg0ODNGLA0KLSAgICAweENEOTgsIDB4Q0Q5OCwgMHgyNUQ3LCAweENEOTksIDB4Q0RBMCwgMHg0ODQ2LCAweENEQTEsIDB4Q0RGRSwgMHgwRTUyLA0KLSAgICAweENFNDAsIDB4Q0U2NiwgMHg0ODRFLCAweENFNjcsIDB4Q0U2NywgMHgyMTJFLCAweENFNjgsIDB4Q0U3MSwgMHg0ODc1LA0KLSAgICAweENFNzIsIDB4Q0U3MiwgMHgyMUIyLCAweENFNzMsIDB4Q0U3RSwgMHg0ODdGLCAweENFODAsIDB4Q0U4MCwgMHg0ODhCLA0KLSAgICAweENFODEsIDB4Q0U4MSwgMHgyMTlFLCAweENFODIsIDB4Q0U4NiwgMHg0ODhDLCAweENFODcsIDB4Q0U4NywgMHgyNURDLA0KLSAgICAweENFODgsIDB4Q0U5QSwgMHg0ODkxLCAweENFOUIsIDB4Q0U5QiwgMHgyMDZDLCAweENFOUMsIDB4Q0U5RCwgMHg0OEE0LA0KLSAgICAweENFOUUsIDB4Q0U5RSwgMHgyMjI2LCAweENFOUYsIDB4Q0VBMCwgMHg0OEE2LCAweENFQTEsIDB4Q0VGRSwgMHgwRUIwLA0KLSAgICAweENGNDAsIDB4Q0Y0RCwgMHg0OEE4LCAweENGNEUsIDB4Q0Y0RSwgMHgyNUUwLCAweENGNEYsIDB4Q0Y1NCwgMHg0OEI2LA0KLSAgICAweENGNTUsIDB4Q0Y1NSwgMHgyMjdCLCAweENGNTYsIDB4Q0Y1NywgMHg0OEJDLCAweENGNTgsIDB4Q0Y1OCwgMHgyNURFLA0KLSAgICAweENGNTksIDB4Q0Y1QiwgMHg0OEJFLCAweENGNUMsIDB4Q0Y1QywgMHgyNUUxLCAweENGNUQsIDB4Q0Y2QiwgMHg0OEMxLA0KLSAgICAweENGNkMsIDB4Q0Y2QywgMHgyNUQ1LCAweENGNkQsIDB4Q0Y3MiwgMHg0OEQwLCAweENGNzMsIDB4Q0Y3MywgMHgxRTZCLA0KLSAgICAweENGNzQsIDB4Q0Y3NCwgMHg0OEQ2LCAweENGNzUsIDB4Q0Y3NSwgMHgyNURCLCAweENGNzYsIDB4Q0Y3NywgMHg0OEQ3LA0KLSAgICAweENGNzgsIDB4Q0Y3OCwgMHgxRTg5LCAweENGNzksIDB4Q0Y3QiwgMHg0OEQ5LCAweENGN0MsIDB4Q0Y3QywgMHgyNUQ5LA0KLSAgICAweENGN0QsIDB4Q0Y3RSwgMHg0OERDLCAweENGODAsIDB4Q0Y4MCwgMHg0OERFLCAweENGODEsIDB4Q0Y4MSwgMHgyMjExLA0KLSAgICAweENGODIsIDB4Q0Y4OCwgMHg0OERGLCAweENGODksIDB4Q0Y4OSwgMHgyMjI5LCAweENGOEEsIDB4Q0Y4QSwgMHgyNUQ2LA0KLSAgICAweENGOEIsIDB4Q0Y5MiwgMHg0OEU2LCAweENGOTMsIDB4Q0Y5MywgMHgyNURELCAweENGOTQsIDB4Q0Y5NCwgMHgyNURGLA0KLSAgICAweENGOTUsIDB4Q0Y5RCwgMHg0OEVFLCAweENGOUUsIDB4Q0Y5RSwgMHgxRkVGLCAweENGOUYsIDB4Q0Y5RiwgMHg0OEY3LA0KLSAgICAweENGQTAsIDB4Q0ZBMCwgMHgyNUQ4LCAweENGQTEsIDB4Q0ZGRSwgMHgwRjBFLCAweEQwNDAsIDB4RDA0QywgMHg0OEY4LA0KLSAgICAweEQwNEQsIDB4RDA0RCwgMHgxRjI5LCAweEQwNEUsIDB4RDA1MCwgMHg0OTA1LCAweEQwNTEsIDB4RDA1MSwgMHgxRTVCLA0KLSAgICAweEQwNTIsIDB4RDA1NCwgMHg0OTA4LCAweEQwNTUsIDB4RDA1NSwgMHgyMDc2LCAweEQwNTYsIDB4RDA1QiwgMHg0OTBCLA0KLSAgICAweEQwNUMsIDB4RDA1QywgMHgyMjk3LCAweEQwNUQsIDB4RDA1RiwgMHg0OTExLCAweEQwNjAsIDB4RDA2MCwgMHgyNjkwLA0KLSAgICAweEQwNjEsIDB4RDA2NiwgMHg0OTE0LCAweEQwNjcsIDB4RDA2NywgMHgyMTNGLCAweEQwNjgsIDB4RDA2QiwgMHg0OTFBLA0KLSAgICAweEQwNkMsIDB4RDA2QywgMHgyMTk4LCAweEQwNkQsIDB4RDA2RCwgMHg0OTFFLCAweEQwNkUsIDB4RDA2RSwgMHgxRTg4LA0KLSAgICAweEQwNkYsIDB4RDA3QywgMHg0OTFGLCAweEQwN0QsIDB4RDA3RCwgMHgyMjhDLCAweEQwN0UsIDB4RDA3RSwgMHg0OTJELA0KLSAgICAweEQwODAsIDB4RDBBMCwgMHg0OTJFLCAweEQwQTEsIDB4RDBGRSwgMHgwRjZDLCAweEQxNDAsIDB4RDE1NCwgMHg0OTRGLA0KLSAgICAweEQxNTUsIDB4RDE1NSwgMHgyNUYxLCAweEQxNTYsIDB4RDE1OCwgMHg0OTY0LCAweEQxNTksIDB4RDE1OSwgMHgyMDBDLA0KLSAgICAweEQxNUEsIDB4RDE2MCwgMHg0OTY3LCAweEQxNjEsIDB4RDE2MSwgMHgxRTU4LCAweEQxNjIsIDB4RDE2MiwgMHgyMkFDLA0KLSAgICAweEQxNjMsIDB4RDE3NCwgMHg0OTZFLCAweEQxNzUsIDB4RDE3NSwgMHgyNkE3LCAweEQxNzYsIDB4RDE3QywgMHg0OTgwLA0KLSAgICAweEQxN0QsIDB4RDE3RCwgMHgyNjc2LCAweEQxN0UsIDB4RDE3RSwgMHg0OTg3LCAweEQxODAsIDB4RDE5QywgMHg0OTg4LA0KLSAgICAweEQxOUQsIDB4RDE5RCwgMHgxRkUxLCAweEQxOUUsIDB4RDE5RSwgMHgyNUJCLCAweEQxOUYsIDB4RDFBMCwgMHg0OUE1LA0KLSAgICAweEQxQTEsIDB4RDFGRSwgMHgwRkNBLCAweEQyNDAsIDB4RDI0MCwgMHgyNUJFLCAweEQyNDEsIDB4RDI0MiwgMHg0OUE3LA0KLSAgICAweEQyNDMsIDB4RDI0MywgMHgyMkRELCAweEQyNDQsIDB4RDI0QywgMHg0OUE5LCAweEQyNEQsIDB4RDI0RCwgMHgyNUJELA0KLSAgICAweEQyNEUsIDB4RDI1QiwgMHg0OUIyLCAweEQyNUMsIDB4RDI1QywgMHgxRTJBLCAweEQyNUQsIDB4RDI2MiwgMHg0OUMwLA0KLSAgICAweEQyNjMsIDB4RDI2MywgMHgyNUJDLCAweEQyNjQsIDB4RDI2NCwgMHgyNUJBLCAweEQyNjUsIDB4RDI2NywgMHg0OUM2LA0KLSAgICAweEQyNjgsIDB4RDI2OCwgMHgyNUJGLCAweEQyNjksIDB4RDI2QywgMHg0OUM5LCAweEQyNkQsIDB4RDI2RCwgMHgyMTg3LA0KLSAgICAweEQyNkUsIDB4RDI2RSwgMHg0OUNELCAweEQyNkYsIDB4RDI2RiwgMHgyNjZCLCAweEQyNzAsIDB4RDI3MSwgMHg0OUNFLA0KLSAgICAweEQyNzIsIDB4RDI3MiwgMHgxRTdGLCAweEQyNzMsIDB4RDI3NCwgMHg0OUQwLCAweEQyNzUsIDB4RDI3NSwgMHgyMUFELA0KLSAgICAweEQyNzYsIDB4RDI3RSwgMHg0OUQyLCAweEQyODAsIDB4RDI4OSwgMHg0OURCLCAweEQyOEEsIDB4RDI4QSwgMHgxRjk2LA0KLSAgICAweEQyOEIsIDB4RDI4RCwgMHg0OUU1LCAweEQyOEUsIDB4RDI4RSwgMHgxRjMyLCAweEQyOEYsIDB4RDI5MSwgMHg0OUU4LA0KLSAgICAweEQyOTIsIDB4RDI5MiwgMHgyMDg0LCAweEQyOTMsIDB4RDI5NCwgMHg0OUVCLCAweEQyOTUsIDB4RDI5NSwgMHgyMTM2LA0KLSAgICAweEQyOTYsIDB4RDI5NiwgMHg0OUVELCAweEQyOTcsIDB4RDI5NywgMHgyNEI4LCAweEQyOTgsIDB4RDI5RiwgMHg0OUVFLA0KLSAgICAweEQyQTAsIDB4RDJBMCwgMHgyNEJBLCAweEQyQTEsIDB4RDJGRSwgMHgxMDI4LCAweEQzNDAsIDB4RDM0MywgMHg0OUY2LA0KLSAgICAweEQzNDQsIDB4RDM0NCwgMHgyNEJDLCAweEQzNDUsIDB4RDM0NywgMHg0OUZBLCAweEQzNDgsIDB4RDM0OCwgMHgyMEU0LA0KLSAgICAweEQzNDksIDB4RDM0OSwgMHg0OUZELCAweEQzNEEsIDB4RDM0QSwgMHgyNEI5LCAweEQzNEIsIDB4RDM0QywgMHg0OUZFLA0KLSAgICAweEQzNEQsIDB4RDM0RCwgMHgyNEJELCAweEQzNEUsIDB4RDM0RiwgMHg0QTAwLCAweEQzNTAsIDB4RDM1MCwgMHgyNEJFLA0KLSAgICAweEQzNTEsIDB4RDM1NCwgMHg0QTAyLCAweEQzNTUsIDB4RDM1NSwgMHgyNEJGLCAweEQzNTYsIDB4RDM1NywgMHg0QTA2LA0KLSAgICAweEQzNTgsIDB4RDM1OCwgMHgxRkQyLCAweEQzNTksIDB4RDM1QSwgMHg0QTA4LCAweEQzNUIsIDB4RDM1QiwgMHgxRkZELA0KLSAgICAweEQzNUMsIDB4RDM1QywgMHg0QTBBLCAweEQzNUQsIDB4RDM1RCwgMHgyNEJCLCAweEQzNUUsIDB4RDM1RSwgMHgxRjJELA0KLSAgICAweEQzNUYsIDB4RDM3NywgMHg0QTBCLCAweEQzNzgsIDB4RDM3OCwgMHgyNjA5LCAweEQzNzksIDB4RDM3OSwgMHg0QTI0LA0KLSAgICAweEQzN0EsIDB4RDM3QSwgMHgyNjBBLCAweEQzN0IsIDB4RDM3QiwgMHg0QTI1LCAweEQzN0MsIDB4RDM3QywgMHgxRTk0LA0KLSAgICAweEQzN0QsIDB4RDM3RSwgMHg0QTI2LCAweEQzODAsIDB4RDM4NCwgMHg0QTI4LCAweEQzODUsIDB4RDM4NSwgMHgyMkRGLA0KLSAgICAweEQzODYsIDB4RDM4NiwgMHgxRUNCLCAweEQzODcsIDB4RDM4NywgMHgxRjBELCAweEQzODgsIDB4RDM4QSwgMHg0QTJELA0KLSAgICAweEQzOEIsIDB4RDM4QiwgMHgxRjc3LCAweEQzOEMsIDB4RDM4QywgMHg0QTMwLCAweEQzOEQsIDB4RDM4RCwgMHgyMUVCLA0KLSAgICAweEQzOEUsIDB4RDM4RSwgMHg0QTMxLCAweEQzOEYsIDB4RDM4RiwgMHgyMkUxLCAweEQzOTAsIDB4RDM5MCwgMHg0QTMyLA0KLSAgICAweEQzOTEsIDB4RDM5MSwgMHgyMTZGLCAweEQzOTIsIDB4RDM5MiwgMHg0QTMzLCAweEQzOTMsIDB4RDM5MywgMHgyMkUwLA0KLSAgICAweEQzOTQsIDB4RDM5NSwgMHg0QTM0LCAweEQzOTYsIDB4RDM5NiwgMHgyMUVBLCAweEQzOTcsIDB4RDM5NywgMHg0QTM2LA0KLSAgICAweEQzOTgsIDB4RDM5OCwgMHgyMkUyLCAweEQzOTksIDB4RDM5OSwgMHgyMENCLCAweEQzOUEsIDB4RDM5QSwgMHg0QTM3LA0KLSAgICAweEQzOUIsIDB4RDM5QiwgMHgxRjc4LCAweEQzOUMsIDB4RDM5RCwgMHg0QTM4LCAweEQzOUUsIDB4RDM5RSwgMHgxRUUyLA0KLSAgICAweEQzOUYsIDB4RDM5RiwgMHg0QTNBLCAweEQzQTAsIDB4RDNBMCwgMHgyMUYyLCAweEQzQTEsIDB4RDNGRSwgMHgxMDg2LA0KLSAgICAweEQ0NDAsIDB4RDQ0MCwgMHg0QTNCLCAweEQ0NDEsIDB4RDQ0MSwgMHgyMTUwLCAweEQ0NDIsIDB4RDQ0NCwgMHg0QTNDLA0KLSAgICAweEQ0NDUsIDB4RDQ0NSwgMHgxRkQzLCAweEQ0NDYsIDB4RDQ0NiwgMHg0QTNGLCAweEQ0NDcsIDB4RDQ0NywgMHgyMkU1LA0KLSAgICAweEQ0NDgsIDB4RDQ0QiwgMHg0QTQwLCAweEQ0NEMsIDB4RDQ0QywgMHgxRUYyLCAweEQ0NEQsIDB4RDQ0RSwgMHg0QTQ0LA0KLSAgICAweEQ0NEYsIDB4RDQ0RiwgMHgyMTFGLCAweEQ0NTAsIDB4RDQ1MiwgMHg0QTQ2LCAweEQ0NTMsIDB4RDQ1MywgMHgyMURELA0KLSAgICAweEQ0NTQsIDB4RDQ1NSwgMHg0QTQ5LCAweEQ0NTYsIDB4RDQ1NiwgMHgyMTU0LCAweEQ0NTcsIDB4RDQ1NywgMHg0QTRCLA0KLSAgICAweEQ0NTgsIDB4RDQ1OCwgMHgyMkU3LCAweEQ0NTksIDB4RDQ1QiwgMHg0QTRDLCAweEQ0NUMsIDB4RDQ1QywgMHgyMjgyLA0KLSAgICAweEQ0NUQsIDB4RDQ2MSwgMHg0QTRGLCAweEQ0NjIsIDB4RDQ2MiwgMHgyMkU2LCAweEQ0NjMsIDB4RDQ2NiwgMHg0QTU0LA0KLSAgICAweEQ0NjcsIDB4RDQ2NywgMHgyMkU4LCAweEQ0NjgsIDB4RDQ2RCwgMHg0QTU4LCAweEQ0NkUsIDB4RDQ2RSwgMHgyMkU0LA0KLSAgICAweEQ0NkYsIDB4RDQ2RiwgMHg0QTVFLCAweEQ0NzAsIDB4RDQ3MCwgMHgyMjZBLCAweEQ0NzEsIDB4RDQ3MSwgMHg0QTVGLA0KLSAgICAweEQ0NzIsIDB4RDQ3MiwgMHgyMkVCLCAweEQ0NzMsIDB4RDQ3MywgMHg0QTYwLCAweEQ0NzQsIDB4RDQ3NCwgMHgyMkU5LA0KLSAgICAweEQ0NzUsIDB4RDQ3NSwgMHgyMEJELCAweEQ0NzYsIDB4RDQ3NywgMHg0QTYxLCAweEQ0NzgsIDB4RDQ3OCwgMHgyMkVBLA0KLSAgICAweEQ0NzksIDB4RDQ3QSwgMHg0QTYzLCAweEQ0N0IsIDB4RDQ3QiwgMHgyMkJELCAweEQ0N0MsIDB4RDQ3RCwgMHg0QTY1LA0KLSAgICAweEQ0N0UsIDB4RDQ3RSwgMHgxRTlFLCAweEQ0ODAsIDB4RDQ4MSwgMHg0QTY3LCAweEQ0ODIsIDB4RDQ4MiwgMHgyMkY2LA0KLSAgICAweEQ0ODMsIDB4RDQ4MywgMHgyMUU3LCAweEQ0ODQsIDB4RDQ4NCwgMHgyMjE2LCAweEQ0ODUsIDB4RDQ4NiwgMHg0QTY5LA0KLSAgICAweEQ0ODcsIDB4RDQ4NywgMHgyMTM3LCAweEQ0ODgsIDB4RDQ4OSwgMHg0QTZCLCAweEQ0OEEsIDB4RDQ4QSwgMHgyMTJDLA0KLSAgICAweEQ0OEIsIDB4RDQ4QiwgMHg0QTZELCAweEQ0OEMsIDB4RDQ4QywgMHgxRTY4LCAweEQ0OEQsIDB4RDQ4RCwgMHgyMkYyLA0KLSAgICAweEQ0OEUsIDB4RDQ4RSwgMHgxRjM3LCAweEQ0OEYsIDB4RDQ4RiwgMHgyMkYzLCAweEQ0OTAsIDB4RDQ5MCwgMHg0QTZFLA0KLSAgICAweEQ0OTEsIDB4RDQ5MSwgMHgyMkVGLCAweEQ0OTIsIDB4RDQ5MiwgMHgxRjUwLCAweEQ0OTMsIDB4RDQ5MywgMHgxRjEwLA0KLSAgICAweEQ0OTQsIDB4RDQ5NCwgMHgyMUM4LCAweEQ0OTUsIDB4RDQ5NSwgMHg0QTZGLCAweEQ0OTYsIDB4RDQ5NiwgMHgyMkYxLA0KLSAgICAweEQ0OTcsIDB4RDQ5QiwgMHg0QTcwLCAweEQ0OUMsIDB4RDQ5QywgMHgyMkYwLCAweEQ0OUQsIDB4RDQ5RSwgMHg0QTc1LA0KLSAgICAweEQ0OUYsIDB4RDQ5RiwgMHgyMkVFLCAweEQ0QTAsIDB4RDRBMCwgMHg0QTc3LCAweEQ0QTEsIDB4RDRGRSwgMHgxMEU0LA0KLSAgICAweEQ1NDAsIDB4RDU0MiwgMHg0QTc4LCAweEQ1NDMsIDB4RDU0MywgMHgyMkVELCAweEQ1NDQsIDB4RDU0NCwgMHgyMjlFLA0KLSAgICAweEQ1NDUsIDB4RDU0NSwgMHgyMkVDLCAweEQ1NDYsIDB4RDU0NiwgMHgxRkUyLCAweEQ1NDcsIDB4RDU0OSwgMHg0QTdCLA0KLSAgICAweEQ1NEEsIDB4RDU0QSwgMHgyMEZFLCAweEQ1NEIsIDB4RDU0RCwgMHg0QTdFLCAweEQ1NEUsIDB4RDU0RiwgMHgyMkY5LA0KLSAgICAweEQ1NTAsIDB4RDU1MCwgMHg0QTgxLCAweEQ1NTEsIDB4RDU1MSwgMHgxRUFGLCAweEQ1NTIsIDB4RDU1MywgMHg0QTgyLA0KLSAgICAweEQ1NTQsIDB4RDU1NCwgMHgyMjM2LCAweEQ1NTUsIDB4RDU1NSwgMHg0QTg0LCAweEQ1NTYsIDB4RDU1NiwgMHgyMkY3LA0KLSAgICAweEQ1NTcsIDB4RDU1OSwgMHg0QTg1LCAweEQ1NUEsIDB4RDU1QSwgMHgyMjNELCAweEQ1NUIsIDB4RDU1QiwgMHg0QTg4LA0KLSAgICAweEQ1NUMsIDB4RDU1QywgMHgxRTgyLCAweEQ1NUQsIDB4RDU1RCwgMHgxRkI2LCAweEQ1NUUsIDB4RDU1RSwgMHg0QTg5LA0KLSAgICAweEQ1NUYsIDB4RDU1RiwgMHgyMUE0LCAweEQ1NjAsIDB4RDU2MCwgMHgyMUFBLCAweEQ1NjEsIDB4RDU2MSwgMHgyMkY4LA0KLSAgICAweEQ1NjIsIDB4RDU2MiwgMHgyMTUxLCAweEQ1NjMsIDB4RDU2MywgMHg0QThBLCAweEQ1NjQsIDB4RDU2NCwgMHgxRjYwLA0KLSAgICAweEQ1NjUsIDB4RDU2NywgMHg0QThCLCAweEQ1NjgsIDB4RDU2OCwgMHgyMTQ3LCAweEQ1NjksIDB4RDU2QiwgMHg0QThFLA0KLSAgICAweEQ1NkMsIDB4RDU2QywgMHgyMTQ1LCAweEQ1NkQsIDB4RDU2RCwgMHg0QTkxLCAweEQ1NkUsIDB4RDU2RSwgMHgxRkRDLA0KLSAgICAweEQ1NkYsIDB4RDU3MSwgMHg0QTkyLCAweEQ1NzIsIDB4RDU3MiwgMHgyMzAxLCAweEQ1NzMsIDB4RDU3NCwgMHg0QTk1LA0KLSAgICAweEQ1NzUsIDB4RDU3NSwgMHgxRUY1LCAweEQ1NzYsIDB4RDU3NywgMHg0QTk3LCAweEQ1NzgsIDB4RDU3OCwgMHgyMjE4LA0KLSAgICAweEQ1NzksIDB4RDU3QSwgMHg0QTk5LCAweEQ1N0IsIDB4RDU3QiwgMHgxRUM2LCAweEQ1N0MsIDB4RDU3RCwgMHg0QTlCLA0KLSAgICAweEQ1N0UsIDB4RDU3RSwgMHgyMzAwLCAweEQ1ODAsIDB4RDU4MCwgMHg0QTlELCAweEQ1ODEsIDB4RDU4MSwgMHgyMkI0LA0KLSAgICAweEQ1ODIsIDB4RDU4MywgMHg0QTlFLCAweEQ1ODQsIDB4RDU4NCwgMHgyMTY5LCAweEQ1ODUsIDB4RDU4NSwgMHg0QUEwLA0KLSAgICAweEQ1ODYsIDB4RDU4NiwgMHgyMkZELCAweEQ1ODcsIDB4RDU4NywgMHg0QUExLCAweEQ1ODgsIDB4RDU4OCwgMHgyMEVBLA0KLSAgICAweEQ1ODksIDB4RDU4OSwgMHg0QUEyLCAweEQ1OEEsIDB4RDU4QSwgMHgyMkY0LCAweEQ1OEIsIDB4RDU4QiwgMHg0QUEzLA0KLSAgICAweEQ1OEMsIDB4RDU4QywgMHgyMkZCLCAweEQ1OEQsIDB4RDU4RCwgMHg0QUE0LCAweEQ1OEUsIDB4RDU4RSwgMHgyMkZDLA0KLSAgICAweEQ1OEYsIDB4RDU4RiwgMHgyMDI3LCAweEQ1OTAsIDB4RDU5MiwgMHg0QUE1LCAweEQ1OTMsIDB4RDU5MywgMHgyMDYwLA0KLSAgICAweEQ1OTQsIDB4RDU5NCwgMHgyMkZGLCAweEQ1OTUsIDB4RDU5NywgMHg0QUE4LCAweEQ1OTgsIDB4RDU5OCwgMHgyMkZFLA0KLSAgICAweEQ1OTksIDB4RDU5OSwgMHgxRUM3LCAweEQ1OUEsIDB4RDU5QSwgMHg0QUFCLCAweEQ1OUIsIDB4RDU5QiwgMHgyMzBDLA0KLSAgICAweEQ1OUMsIDB4RDU5RSwgMHg0QUFDLCAweEQ1OUYsIDB4RDU5RiwgMHgyMkY1LCAweEQ1QTAsIDB4RDVBMCwgMHg0QUFGLA0KLSAgICAweEQ1QTEsIDB4RDVGRSwgMHgxMTQyLCAweEQ2NDAsIDB4RDY0MCwgMHgyMzA2LCAweEQ2NDEsIDB4RDY0MSwgMHg0QUIwLA0KLSAgICAweEQ2NDIsIDB4RDY0MiwgMHgyMzBBLCAweEQ2NDMsIDB4RDY0MywgMHgyMUQzLCAweEQ2NDQsIDB4RDY0NiwgMHg0QUIxLA0KLSAgICAweEQ2NDcsIDB4RDY0NywgMHgyMzAzLCAweEQ2NDgsIDB4RDY0OCwgMHg0QUI0LCAweEQ2NDksIDB4RDY0OSwgMHgyMzA3LA0KLSAgICAweEQ2NEEsIDB4RDY0QSwgMHgyMzBCLCAweEQ2NEIsIDB4RDY0QywgMHg0QUI1LCAweEQ2NEQsIDB4RDY0RCwgMHgxRjVGLA0KLSAgICAweEQ2NEUsIDB4RDY0RSwgMHg0QUI3LCAweEQ2NEYsIDB4RDY0RiwgMHgyMzA5LCAweEQ2NTAsIDB4RDY1MSwgMHg0QUI4LA0KLSAgICAweEQ2NTIsIDB4RDY1MiwgMHgyMzAyLCAweEQ2NTMsIDB4RDY1MywgMHgxRjA0LCAweEQ2NTQsIDB4RDY1NCwgMHgyMjlELA0KLSAgICAweEQ2NTUsIDB4RDY1NSwgMHg0QUJBLCAweEQ2NTYsIDB4RDY1NiwgMHgyMUZCLCAweEQ2NTcsIDB4RDY1NywgMHg0QUJCLA0KLSAgICAweEQ2NTgsIDB4RDY1OCwgMHgyMzA4LCAweEQ2NTksIDB4RDY1OSwgMHg0QUJDLCAweEQ2NUEsIDB4RDY1QSwgMHgyMEFDLA0KLSAgICAweEQ2NUIsIDB4RDY1QiwgMHg0QUJELCAweEQ2NUMsIDB4RDY1QywgMHgyMDhFLCAweEQ2NUQsIDB4RDY1RCwgMHgyMzA1LA0KLSAgICAweEQ2NUUsIDB4RDY1RSwgMHgyMTk3LCAweEQ2NUYsIDB4RDY1RiwgMHg0QUJFLCAweEQ2NjAsIDB4RDY2MCwgMHgyMTcxLA0KLSAgICAweEQ2NjEsIDB4RDY2MSwgMHgyMjk4LCAweEQ2NjIsIDB4RDY2NCwgMHg0QUJGLCAweEQ2NjUsIDB4RDY2NSwgMHgxRjU3LA0KLSAgICAweEQ2NjYsIDB4RDY2OCwgMHg0QUMyLCAweEQ2NjksIDB4RDY2OSwgMHgyMDgyLCAweEQ2NkEsIDB4RDY2QSwgMHg0QUM1LA0KLSAgICAweEQ2NkIsIDB4RDY2QiwgMHgyMzExLCAweEQ2NkMsIDB4RDY2RSwgMHg0QUM2LCAweEQ2NkYsIDB4RDY2RiwgMHgyMzA0LA0KLSAgICAweEQ2NzAsIDB4RDY3MCwgMHg0QUM5LCAweEQ2NzEsIDB4RDY3MSwgMHgyMzBGLCAweEQ2NzIsIDB4RDY3MiwgMHgxRTM1LA0KLSAgICAweEQ2NzMsIDB4RDY3MywgMHg0QUNBLCAweEQ2NzQsIDB4RDY3NCwgMHgyMEQxLCAweEQ2NzUsIDB4RDY3NSwgMHgyMzEwLA0KLSAgICAweEQ2NzYsIDB4RDY3NiwgMHgxRkEzLCAweEQ2NzcsIDB4RDY3NywgMHg0QUNCLCAweEQ2NzgsIDB4RDY3OCwgMHgyMUQ2LA0KLSAgICAweEQ2NzksIDB4RDY3QiwgMHg0QUNDLCAweEQ2N0MsIDB4RDY3QywgMHgyMjA2LCAweEQ2N0QsIDB4RDY3RSwgMHg0QUNGLA0KLSAgICAweEQ2ODAsIDB4RDY4MiwgMHg0QUQxLCAweEQ2ODMsIDB4RDY4MywgMHgyMzBELCAweEQ2ODQsIDB4RDY4NSwgMHg0QUQ0LA0KLSAgICAweEQ2ODYsIDB4RDY4NiwgMHgyMzEyLCAweEQ2ODcsIDB4RDY4NywgMHgyMDhELCAweEQ2ODgsIDB4RDY4OCwgMHgyMzEzLA0KLSAgICAweEQ2ODksIDB4RDY4RCwgMHg0QUQ2LCAweEQ2OEUsIDB4RDY4RSwgMHgyMkUzLCAweEQ2OEYsIDB4RDY5MywgMHg0QURCLA0KLSAgICAweEQ2OTQsIDB4RDY5NCwgMHgxRkJBLCAweEQ2OTUsIDB4RDY5OCwgMHg0QUUwLCAweEQ2OTksIDB4RDY5OSwgMHgyMDc4LA0KLSAgICAweEQ2OUEsIDB4RDZBMCwgMHg0QUU0LCAweEQ2QTEsIDB4RDZGRSwgMHgxMUEwLCAweEQ3NDAsIDB4RDc0MiwgMHg0QUVCLA0KLSAgICAweEQ3NDMsIDB4RDc0MywgMHgyMjg4LCAweEQ3NDQsIDB4RDc0NywgMHg0QUVFLCAweEQ3NDgsIDB4RDc0OCwgMHgyMzE2LA0KLSAgICAweEQ3NDksIDB4RDc0OSwgMHgxRjZCLCAweEQ3NEEsIDB4RDc0RiwgMHg0QUYyLCAweEQ3NTAsIDB4RDc1MCwgMHgyMzE0LA0KLSAgICAweEQ3NTEsIDB4RDc1MSwgMHg0QUY4LCAweEQ3NTIsIDB4RDc1MiwgMHgyMTMwLCAweEQ3NTMsIDB4RDc1MywgMHgyMzE1LA0KLSAgICAweEQ3NTQsIDB4RDc1NCwgMHgyMTY4LCAweEQ3NTUsIDB4RDc1NSwgMHg0QUY5LCAweEQ3NTYsIDB4RDc1NiwgMHgyMEM0LA0KLSAgICAweEQ3NTcsIDB4RDc2MywgMHg0QUZBLCAweEQ3NjQsIDB4RDc2NCwgMHgyMzE4LCAweEQ3NjUsIDB4RDc2NiwgMHg0QjA3LA0KLSAgICAweEQ3NjcsIDB4RDc2NywgMHgyMjE5LCAweEQ3NjgsIDB4RDc2OCwgMHgyMjE3LCAweEQ3NjksIDB4RDc2QiwgMHg0QjA5LA0KLSAgICAweEQ3NkMsIDB4RDc2QywgMHgyMEQ1LCAweEQ3NkQsIDB4RDc2RSwgMHg0QjBDLCAweEQ3NkYsIDB4RDc2RiwgMHgxRjRBLA0KLSAgICAweEQ3NzAsIDB4RDc3NCwgMHg0QjBFLCAweEQ3NzUsIDB4RDc3NSwgMHgyMjQwLCAweEQ3NzYsIDB4RDc3NywgMHg0QjEzLA0KLSAgICAweEQ3NzgsIDB4RDc3OCwgMHgxRUQzLCAweEQ3NzksIDB4RDc3RSwgMHg0QjE1LCAweEQ3ODAsIDB4RDc4MiwgMHg0QjFCLA0KLSAgICAweEQ3ODMsIDB4RDc4MywgMHgxRTQ5LCAweEQ3ODQsIDB4RDc4NiwgMHg0QjFFLCAweEQ3ODcsIDB4RDc4NywgMHgyNjFCLA0KLSAgICAweEQ3ODgsIDB4RDc4QSwgMHg0QjIxLCAweEQ3OEIsIDB4RDc4QiwgMHgxRTZELCAweEQ3OEMsIDB4RDc4QywgMHgyMEY4LA0KLSAgICAweEQ3OEQsIDB4RDc4RCwgMHg0QjI0LCAweEQ3OEUsIDB4RDc4RSwgMHgxRkZCLCAweEQ3OEYsIDB4RDc4RiwgMHgyMzE5LA0KLSAgICAweEQ3OTAsIDB4RDc5NCwgMHg0QjI1LCAweEQ3OTUsIDB4RDc5NSwgMHgyMzBFLCAweEQ3OTYsIDB4RDc5NiwgMHg0QjJBLA0KLSAgICAweEQ3OTcsIDB4RDc5NywgMHgyMzE3LCAweEQ3OTgsIDB4RDdBMCwgMHg0QjJCLCAweEQ3QTEsIDB4RDdGOSwgMHgxMUZFLA0KLSAgICAweEQ4NDAsIDB4RDg0QywgMHg0QjM0LCAweEQ4NEQsIDB4RDg0RCwgMHgyMEM4LCAweEQ4NEUsIDB4RDg1MiwgMHg0QjQxLA0KLSAgICAweEQ4NTMsIDB4RDg1MywgMHgxRUZELCAweEQ4NTQsIDB4RDg3RSwgMHg0QjQ2LCAweEQ4ODAsIDB4RDg4RiwgMHg0QjcxLA0KLSAgICAweEQ4OTAsIDB4RDg5MCwgMHgxRTNCLCAweEQ4OTEsIDB4RDg5MSwgMHgyMjdGLCAweEQ4OTIsIDB4RDg5MiwgMHg0QjgxLA0KLSAgICAweEQ4OTMsIDB4RDg5MywgMHgxRjBDLCAweEQ4OTQsIDB4RDg5NCwgMHgxRTU5LCAweEQ4OTUsIDB4RDg5NSwgMHgxRjI0LA0KLSAgICAweEQ4OTYsIDB4RDg5OSwgMHg0QjgyLCAweEQ4OUEsIDB4RDg5QSwgMHgyMEJBLCAweEQ4OUIsIDB4RDg5QiwgMHgxRjY1LA0KLSAgICAweEQ4OUMsIDB4RDg5QywgMHgxRUYwLCAweEQ4OUQsIDB4RDg5RCwgMHgyMTY0LCAweEQ4OUUsIDB4RDg5RSwgMHgxRjMwLA0KLSAgICAweEQ4OUYsIDB4RDg5RiwgMHgyMjYxLCAweEQ4QTAsIDB4RDhBMCwgMHg0Qjg2LCAweEQ4QTEsIDB4RDhGRSwgMHgxMjU3LA0KLSAgICAweEQ5NDAsIDB4RDk0MCwgMHg0Qjg3LCAweEQ5NDEsIDB4RDk0MSwgMHgyMkEyLCAweEQ5NDIsIDB4RDk0MiwgMHgyNEFCLA0KLSAgICAweEQ5NDMsIDB4RDk0MywgMHg0Qjg4LCAweEQ5NDQsIDB4RDk0NCwgMHgyNEFGLCAweEQ5NDUsIDB4RDk0NSwgMHgxRUU4LA0KLSAgICAweEQ5NDYsIDB4RDk0NiwgMHgxRjM5LCAweEQ5NDcsIDB4RDk0NywgMHg0Qjg5LCAweEQ5NDgsIDB4RDk0OCwgMHgxRTQ4LA0KLSAgICAweEQ5NDksIDB4RDk0OSwgMHgyMDcwLCAweEQ5NEEsIDB4RDk0QSwgMHgxRUE4LCAweEQ5NEIsIDB4RDk0QiwgMHg0QjhBLA0KLSAgICAweEQ5NEMsIDB4RDk0QywgMHgyNEFDLCAweEQ5NEQsIDB4RDk0RCwgMHgxRUY3LCAweEQ5NEUsIDB4RDk0RSwgMHgyMTc2LA0KLSAgICAweEQ5NEYsIDB4RDk0RiwgMHgyNEFELCAweEQ5NTAsIDB4RDk1MCwgMHg0QjhCLCAweEQ5NTEsIDB4RDk1MSwgMHgyMDdCLA0KLSAgICAweEQ5NTIsIDB4RDk1MiwgMHgxRjQ1LCAweEQ5NTMsIDB4RDk1MywgMHgyNEFBLCAweEQ5NTQsIDB4RDk1NCwgMHgyMDRCLA0KLSAgICAweEQ5NTUsIDB4RDk1NSwgMHgyMDJGLCAweEQ5NTYsIDB4RDk1NiwgMHgxRjVBLCAweEQ5NTcsIDB4RDk1NywgMHgyNEIwLA0KLSAgICAweEQ5NTgsIDB4RDk1OCwgMHg0QjhDLCAweEQ5NTksIDB4RDk1OSwgMHgyMkI3LCAweEQ5NUEsIDB4RDk1QSwgMHgxRjdGLA0KLSAgICAweEQ5NUIsIDB4RDk1QiwgMHg0QjhELCAweEQ5NUMsIDB4RDk1QywgMHgyMjY1LCAweEQ5NUQsIDB4RDk2MiwgMHg0QjhFLA0KLSAgICAweEQ5NjMsIDB4RDk2MywgMHgyNEIyLCAweEQ5NjQsIDB4RDk2NCwgMHgyMTFCLCAweEQ5NjUsIDB4RDk2NSwgMHgxRTUxLA0KLSAgICAweEQ5NjYsIDB4RDk2NiwgMHg0Qjk0LCAweEQ5NjcsIDB4RDk2NywgMHgyNEI0LCAweEQ5NjgsIDB4RDk2QiwgMHg0Qjk1LA0KLSAgICAweEQ5NkMsIDB4RDk2QywgMHgyNEIzLCAweEQ5NkQsIDB4RDk2RCwgMHg0Qjk5LCAweEQ5NkUsIDB4RDk2RSwgMHgxRTlGLA0KLSAgICAweEQ5NkYsIDB4RDk2RiwgMHg0QjlBLCAweEQ5NzAsIDB4RDk3MCwgMHgyMTE4LCAweEQ5NzEsIDB4RDk3MSwgMHg0QjlCLA0KLSAgICAweEQ5NzIsIDB4RDk3MiwgMHgyMEI0LCAweEQ5NzMsIDB4RDk3MywgMHgyM0FGLCAweEQ5NzQsIDB4RDk3NCwgMHgyMUJCLA0KLSAgICAweEQ5NzUsIDB4RDk3NSwgMHgyMDcyLCAweEQ5NzYsIDB4RDk3NiwgMHgxRjk1LCAweEQ5NzcsIDB4RDk3NywgMHg0QjlDLA0KLSAgICAweEQ5NzgsIDB4RDk3OCwgMHgxRjBBLCAweEQ5NzksIDB4RDk3OSwgMHgyNEI2LCAweEQ5N0EsIDB4RDk3QiwgMHg0QjlELA0KLSAgICAweEQ5N0MsIDB4RDk3QywgMHgyMjkxLCAweEQ5N0QsIDB4RDk3RCwgMHgyNEI1LCAweEQ5N0UsIDB4RDk3RSwgMHgyMjc4LA0KLSAgICAweEQ5ODAsIDB4RDk4MCwgMHgxRUQ0LCAweEQ5ODEsIDB4RDk4NiwgMHg0QjlGLCAweEQ5ODcsIDB4RDk4NywgMHgxRkYzLA0KLSAgICAweEQ5ODgsIDB4RDk4QywgMHg0QkE1LCAweEQ5OEQsIDB4RDk4RCwgMHgyMkE5LCAweEQ5OEUsIDB4RDk4RSwgMHgyNEI3LA0KLSAgICAweEQ5OEYsIDB4RDk4RiwgMHgxRjI4LCAweEQ5OTAsIDB4RDk5MCwgMHgyMTA5LCAweEQ5OTEsIDB4RDk5MSwgMHgyMkM3LA0KLSAgICAweEQ5OTIsIDB4RDk5NiwgMHg0QkFBLCAweEQ5OTcsIDB4RDk5NywgMHgyNEFFLCAweEQ5OTgsIDB4RDk5OCwgMHgyMkIxLA0KLSAgICAweEQ5OTksIDB4RDk5QSwgMHg0QkFGLCAweEQ5OUIsIDB4RDk5QiwgMHgyMjY2LCAweEQ5OUMsIDB4RDk5QywgMHg0QkIxLA0KLSAgICAweEQ5OUQsIDB4RDk5RCwgMHgyMjVCLCAweEQ5OUUsIDB4RDk5RSwgMHgyMkM0LCAweEQ5OUYsIDB4RDk5RiwgMHg0QkIyLA0KLSAgICAweEQ5QTAsIDB4RDlBMCwgMHgyMTE1LCAweEQ5QTEsIDB4RDlGRSwgMHgxMkI1LCAweERBNDAsIDB4REE0MCwgMHg0QkIzLA0KLSAgICAweERBNDEsIDB4REE0MSwgMHgyMjJBLCAweERBNDIsIDB4REE0MiwgMHgyNEIxLCAweERBNDMsIDB4REE0NywgMHg0QkI0LA0KLSAgICAweERBNDgsIDB4REE0OCwgMHgyMTNELCAweERBNDksIDB4REE0QywgMHg0QkI5LCAweERBNEQsIDB4REE0RCwgMHgxRjE1LA0KLSAgICAweERBNEUsIDB4REE0RSwgMHgyMjVDLCAweERBNEYsIDB4REE3MiwgMHg0QkJELCAweERBNzMsIDB4REE3MywgMHgxRjE0LA0KLSAgICAweERBNzQsIDB4REE3NiwgMHg0QkUxLCAweERBNzcsIDB4REE3NywgMHgyMjdBLCAweERBNzgsIDB4REE3RSwgMHg0QkU0LA0KLSAgICAweERBODAsIDB4REE4NCwgMHg0QkVCLCAweERBODUsIDB4REE4NSwgMHgyMEVFLCAweERBODYsIDB4REE4RCwgMHg0QkYwLA0KLSAgICAweERBOEUsIDB4REE4RSwgMHgyNUY4LCAweERBOEYsIDB4REFBMCwgMHg0QkY4LCAweERBQTEsIDB4REFGRSwgMHgxMzEzLA0KLSAgICAweERCNDAsIDB4REI1RiwgMHg0QzBBLCAweERCNjAsIDB4REI2MCwgMHgxRjk0LCAweERCNjEsIDB4REI3NywgMHg0QzJBLA0KLSAgICAweERCNzgsIDB4REI3OCwgMHgyMjMwLCAweERCNzksIDB4REI3RSwgMHg0QzQxLCAweERCODAsIDB4REI4MywgMHg0QzQ3LA0KLSAgICAweERCODQsIDB4REI4NCwgMHgyNUZELCAweERCODUsIDB4REI4QSwgMHg0QzRCLCAweERCOEIsIDB4REI4QiwgMHgyNjAwLA0KLSAgICAweERCOEMsIDB4REI5NywgMHg0QzUxLCAweERCOTgsIDB4REI5OCwgMHgyNjA2LCAweERCOTksIDB4REJBMCwgMHg0QzVELA0KLSAgICAweERCQTEsIDB4REJGRSwgMHgxMzcxLCAweERDNDAsIDB4REM0NCwgMHg0QzY1LCAweERDNDUsIDB4REM0NSwgMHgyNUZGLA0KLSAgICAweERDNDYsIDB4REM0RSwgMHg0QzZBLCAweERDNEYsIDB4REM0RiwgMHgyNUZDLCAweERDNTAsIDB4REM1MCwgMHgxRThDLA0KLSAgICAweERDNTEsIDB4REM1MSwgMHgyNjAyLCAweERDNTIsIDB4REM1MiwgMHg0QzczLCAweERDNTMsIDB4REM1MywgMHgyMjRELA0KLSAgICAweERDNTQsIDB4REM1NCwgMHg0Qzc0LCAweERDNTUsIDB4REM1NSwgMHgyNjA0LCAweERDNTYsIDB4REM1NiwgMHgyNUZFLA0KLSAgICAweERDNTcsIDB4REM1NywgMHgyNjAzLCAweERDNTgsIDB4REM1QywgMHg0Qzc1LCAweERDNUQsIDB4REM1RCwgMHgyNjAxLA0KLSAgICAweERDNUUsIDB4REM2MSwgMHg0QzdBLCAweERDNjIsIDB4REM2MiwgMHgyNjA1LCAweERDNjMsIDB4REM2NSwgMHg0QzdFLA0KLSAgICAweERDNjYsIDB4REM2NiwgMHgxRUEzLCAweERDNjcsIDB4REM2NywgMHgyNjA4LCAweERDNjgsIDB4REM2QSwgMHg0QzgxLA0KLSAgICAweERDNkIsIDB4REM2QiwgMHgyNjA3LCAweERDNkMsIDB4REM3QiwgMHg0Qzg0LCAweERDN0MsIDB4REM3QywgMHgyMEYwLA0KLSAgICAweERDN0QsIDB4REM3RSwgMHg0Qzk0LCAweERDODAsIDB4REM4NiwgMHg0Qzk2LCAweERDODcsIDB4REM4NywgMHgxRTdCLA0KLSAgICAweERDODgsIDB4REM4OCwgMHgyMjY3LCAweERDODksIDB4REM4OSwgMHgxRjM2LCAweERDOEEsIDB4REM4QSwgMHgxRkQ2LA0KLSAgICAweERDOEIsIDB4REM4RCwgMHg0QzlELCAweERDOEUsIDB4REM4RSwgMHgyMUUwLCAweERDOEYsIDB4REM4RiwgMHg0Q0EwLA0KLSAgICAweERDOTAsIDB4REM5MCwgMHgyNDhDLCAweERDOTEsIDB4REM5NiwgMHg0Q0ExLCAweERDOTcsIDB4REM5NywgMHgyNDhELA0KLSAgICAweERDOTgsIDB4REM5QSwgMHg0Q0E3LCAweERDOUIsIDB4REM5QiwgMHgyMTAyLCAweERDOUMsIDB4REM5RiwgMHg0Q0FBLA0KLSAgICAweERDQTAsIDB4RENBMCwgMHgyNDk0LCAweERDQTEsIDB4RENGRSwgMHgxM0NGLCAweERENDAsIDB4REQ0NSwgMHg0Q0FFLA0KLSAgICAweERENDYsIDB4REQ0NiwgMHgyNDkzLCAweERENDcsIDB4REQ0QywgMHg0Q0I0LCAweERENEQsIDB4REQ0RCwgMHgyNDhFLA0KLSAgICAweERENEUsIDB4REQ1MiwgMHg0Q0JBLCAweERENTMsIDB4REQ1MywgMHgyMjk5LCAweERENTQsIDB4REQ1NCwgMHgyNDkxLA0KLSAgICAweERENTUsIDB4REQ1NSwgMHgyNDk2LCAweERENTYsIDB4REQ1NiwgMHgyNDhGLCAweERENTcsIDB4REQ1NywgMHgyNDkyLA0KLSAgICAweERENTgsIDB4REQ1OCwgMHg0Q0JGLCAweERENTksIDB4REQ1OSwgMHgyNDk3LCAweERENUEsIDB4REQ1RCwgMHg0Q0MwLA0KLSAgICAweERENUUsIDB4REQ1RSwgMHgxRkIxLCAweERENUYsIDB4REQ1RiwgMHg0Q0M0LCAweERENjAsIDB4REQ2MCwgMHgyNDlBLA0KLSAgICAweERENjEsIDB4REQ2MSwgMHg0Q0M1LCAweERENjIsIDB4REQ2MiwgMHgyNDk5LCAweERENjMsIDB4REQ2MywgMHg0Q0M2LA0KLSAgICAweERENjQsIDB4REQ2NCwgMHgyMjU4LCAweERENjUsIDB4REQ2NSwgMHgyNDk4LCAweERENjYsIDB4REQ2QywgMHg0Q0M3LA0KLSAgICAweERENkQsIDB4REQ2RCwgMHgyNDlCLCAweERENkUsIDB4REQ2RSwgMHg0Q0NFLCAweERENkYsIDB4REQ2RiwgMHgxRjA5LA0KLSAgICAweERENzAsIDB4REQ3MCwgMHgyMEU2LCAweERENzEsIDB4REQ3NSwgMHg0Q0NGLCAweERENzYsIDB4REQ3NiwgMHgyMDI2LA0KLSAgICAweERENzcsIDB4REQ3NywgMHgyNDlGLCAweERENzgsIDB4REQ3OCwgMHgxRjU5LCAweERENzksIDB4REQ3QSwgMHgyNDlELA0KLSAgICAweEREN0IsIDB4REQ3RSwgMHg0Q0Q0LCAweEREODAsIDB4REQ4MCwgMHg0Q0Q4LCAweEREODEsIDB4REQ4MSwgMHgxRjNCLA0KLSAgICAweEREODIsIDB4REQ4MiwgMHgyNDlDLCAweEREODMsIDB4REQ4NCwgMHg0Q0Q5LCAweEREODUsIDB4REQ4NSwgMHgxRTNBLA0KLSAgICAweEREODYsIDB4REQ4NiwgMHgyMDVCLCAweEREODcsIDB4REQ4QSwgMHg0Q0RCLCAweEREOEIsIDB4REQ4QiwgMHgxRjcwLA0KLSAgICAweEREOEMsIDB4REQ4RSwgMHg0Q0RGLCAweEREOEYsIDB4REQ4RiwgMHgyNEEwLCAweEREOTAsIDB4REQ5MywgMHg0Q0UyLA0KLSAgICAweEREOTQsIDB4REQ5NCwgMHgyMTNCLCAweEREOTUsIDB4REQ5NiwgMHg0Q0U2LCAweEREOTcsIDB4REQ5NywgMHgxRjA3LA0KLSAgICAweEREOTgsIDB4REQ5OSwgMHg0Q0U4LCAweEREOUEsIDB4REQ5QSwgMHgyMjcwLCAweEREOUIsIDB4REQ5QiwgMHgyMjM3LA0KLSAgICAweEREOUMsIDB4REQ5RCwgMHg0Q0VBLCAweEREOUUsIDB4REQ5RSwgMHgyNEQyLCAweEREOUYsIDB4REQ5RiwgMHg0Q0VDLA0KLSAgICAweEREQTAsIDB4RERBMCwgMHgyMUIzLCAweEREQTEsIDB4RERGRSwgMHgxNDJELCAweERFNDAsIDB4REU0MCwgMHgyMjQ1LA0KLSAgICAweERFNDEsIDB4REU0MSwgMHgyNEExLCAweERFNDIsIDB4REU0MywgMHg0Q0VELCAweERFNDQsIDB4REU0NCwgMHgyMkE4LA0KLSAgICAweERFNDUsIDB4REU0NywgMHg0Q0VGLCAweERFNDgsIDB4REU0OCwgMHgyMjdDLCAweERFNDksIDB4REU0OSwgMHgxRkIwLA0KLSAgICAweERFNEEsIDB4REU0RSwgMHg0Q0YyLCAweERFNEYsIDB4REU0RiwgMHgyNEEyLCAweERFNTAsIDB4REU1OSwgMHg0Q0Y3LA0KLSAgICAweERFNUEsIDB4REU1QSwgMHgxRjQ2LCAweERFNUIsIDB4REU1QiwgMHg0RDAxLCAweERFNUMsIDB4REU1QywgMHgyMzgwLA0KLSAgICAweERFNUQsIDB4REU1RCwgMHgyNDk1LCAweERFNUUsIDB4REU1RSwgMHg0RDAyLCAweERFNUYsIDB4REU1RiwgMHgyNDkwLA0KLSAgICAweERFNjAsIDB4REU2QSwgMHg0RDAzLCAweERFNkIsIDB4REU2QiwgMHgxRTMwLCAweERFNkMsIDB4REU2RSwgMHg0RDBFLA0KLSAgICAweERFNkYsIDB4REU2RiwgMHgxRTlELCAweERFNzAsIDB4REU3MCwgMHgxRTRCLCAweERFNzEsIDB4REU3MSwgMHgxRTRBLA0KLSAgICAweERFNzIsIDB4REU3MiwgMHgyMEFBLCAweERFNzMsIDB4REU3RSwgMHg0RDExLCAweERFODAsIDB4REU5MSwgMHg0RDFELA0KLSAgICAweERFOTIsIDB4REU5MiwgMHgyNjdCLCAweERFOTMsIDB4REU5RSwgMHg0RDJGLCAweERFOUYsIDB4REU5RiwgMHgyM0YyLA0KLSAgICAweERFQTAsIDB4REVBMCwgMHg0RDNCLCAweERFQTEsIDB4REVGRSwgMHgxNDhCLCAweERGNDAsIDB4REY0MCwgMHgyMjdFLA0KLSAgICAweERGNDEsIDB4REY0MSwgMHg0RDNDLCAweERGNDIsIDB4REY0MiwgMHgyMDE5LCAweERGNDMsIDB4REY0QywgMHg0RDNELA0KLSAgICAweERGNEQsIDB4REY0RCwgMHgxRkJCLCAweERGNEUsIDB4REY1QiwgMHg0RDQ3LCAweERGNUMsIDB4REY1QywgMHgyMjUzLA0KLSAgICAweERGNUQsIDB4REY1RCwgMHg0RDU1LCAweERGNUUsIDB4REY1RSwgMHgxRjNFLCAweERGNUYsIDB4REY1RiwgMHgxRUE2LA0KLSAgICAweERGNjAsIDB4REY2MCwgMHgyMThFLCAweERGNjEsIDB4REY2MywgMHg0RDU2LCAweERGNjQsIDB4REY2NCwgMHgyMUVDLA0KLSAgICAweERGNjUsIDB4REY2NSwgMHg0RDU5LCAweERGNjYsIDB4REY2NiwgMHgxRUJFLCAweERGNjcsIDB4REY2NywgMHg0RDVBLA0KLSAgICAweERGNjgsIDB4REY2OCwgMHgyMjRBLCAweERGNjksIDB4REY2QywgMHg0RDVCLCAweERGNkQsIDB4REY2RCwgMHgyMTMzLA0KLSAgICAweERGNkUsIDB4REY3MywgMHg0RDVGLCAweERGNzQsIDB4REY3NCwgMHgxRTg0LCAweERGNzUsIDB4REY3NiwgMHg0RDY1LA0KLSAgICAweERGNzcsIDB4REY3NywgMHgyMENGLCAweERGNzgsIDB4REY3OCwgMHgyMUUyLCAweERGNzksIDB4REY3OSwgMHg0RDY3LA0KLSAgICAweERGN0EsIDB4REY3QSwgMHgyMjBGLCAweERGN0IsIDB4REY3QiwgMHg0RDY4LCAweERGN0MsIDB4REY3QywgMHgyMDI5LA0KLSAgICAweERGN0QsIDB4REY3RCwgMHg0RDY5LCAweERGN0UsIDB4REY3RSwgMHgyMDczLCAweERGODAsIDB4REY4MCwgMHgxRjU1LA0KLSAgICAweERGODEsIDB4REY4MiwgMHg0RDZBLCAweERGODMsIDB4REY4MywgMHgyM0YxLCAweERGODQsIDB4REY4NCwgMHg0RDZDLA0KLSAgICAweERGODUsIDB4REY4NSwgMHgxRTQ2LCAweERGODYsIDB4REY4OCwgMHg0RDZELCAweERGODksIDB4REY4OSwgMHgyMDYzLA0KLSAgICAweERGOEEsIDB4REY4QSwgMHgyM0YzLCAweERGOEIsIDB4REZBMCwgMHg0RDcwLCAweERGQTEsIDB4REZGRSwgMHgxNEU5LA0KLSAgICAweEUwNDAsIDB4RTA0RiwgMHg0RDg2LCAweEUwNTAsIDB4RTA1MCwgMHgyMzFFLCAweEUwNTEsIDB4RTA1QywgMHg0RDk2LA0KLSAgICAweEUwNUQsIDB4RTA1RCwgMHgyMjMzLCAweEUwNUUsIDB4RTA2OCwgMHg0REEyLCAweEUwNjksIDB4RTA2OSwgMHgyMzIwLA0KLSAgICAweEUwNkEsIDB4RTA2QiwgMHg0REFELCAweEUwNkMsIDB4RTA2QywgMHgyMUM3LCAweEUwNkQsIDB4RTA3NCwgMHg0REFGLA0KLSAgICAweEUwNzUsIDB4RTA3NSwgMHgyMkJDLCAweEUwNzYsIDB4RTA3NiwgMHg0REI3LCAweEUwNzcsIDB4RTA3NywgMHgyMzFDLA0KLSAgICAweEUwNzgsIDB4RTA3OCwgMHg0REI4LCAweEUwNzksIDB4RTA3OSwgMHgyMjUxLCAweEUwN0EsIDB4RTA3RSwgMHg0REI5LA0KLSAgICAweEUwODAsIDB4RTA4NiwgMHg0REJFLCAweEUwODcsIDB4RTA4NywgMHgxRUJCLCAweEUwODgsIDB4RTA4QywgMHg0REM1LA0KLSAgICAweEUwOEQsIDB4RTA4RCwgMHgyMjg3LCAweEUwOEUsIDB4RTA4RSwgMHg0RENBLCAweEUwOEYsIDB4RTA4RiwgMHgyMDJELA0KLSAgICAweEUwOTAsIDB4RTA5MCwgMHgxRUFCLCAweEUwOTEsIDB4RTA5MSwgMHg0RENCLCAweEUwOTIsIDB4RTA5MiwgMHgyMzFELA0KLSAgICAweEUwOTMsIDB4RTA5MywgMHg0RENDLCAweEUwOTQsIDB4RTA5NCwgMHgyMzFGLCAweEUwOTUsIDB4RTA5NiwgMHg0RENELA0KLSAgICAweEUwOTcsIDB4RTA5NywgMHgyMzFCLCAweEUwOTgsIDB4RTBBMCwgMHg0RENGLCAweEUwQTEsIDB4RTBGRSwgMHgxNTQ3LA0KLSAgICAweEUxNDAsIDB4RTE0MSwgMHg0REQ4LCAweEUxNDIsIDB4RTE0MiwgMHgyMzIxLCAweEUxNDMsIDB4RTE2MywgMHg0RERBLA0KLSAgICAweEUxNjQsIDB4RTE2NCwgMHgyMjU1LCAweEUxNjUsIDB4RTE2NywgMHg0REZCLCAweEUxNjgsIDB4RTE2OCwgMHgxRThGLA0KLSAgICAweEUxNjksIDB4RTE3MywgMHg0REZFLCAweEUxNzQsIDB4RTE3NCwgMHgyMjBDLCAweEUxNzUsIDB4RTE3NSwgMHgxRkE0LA0KLSAgICAweEUxNzYsIDB4RTE3RSwgMHg0RTA5LCAweEUxODAsIDB4RTE4MywgMHg0RTEyLCAweEUxODQsIDB4RTE4NCwgMHgyMDlCLA0KLSAgICAweEUxODUsIDB4RTE4NSwgMHgyMUQ4LCAweEUxODYsIDB4RTE4NiwgMHg0RTE2LCAweEUxODcsIDB4RTE4NywgMHgyNUZBLA0KLSAgICAweEUxODgsIDB4RTE4OCwgMHg0RTE3LCAweEUxODksIDB4RTE4OSwgMHgyNUY5LCAweEUxOEEsIDB4RTE4QiwgMHg0RTE4LA0KLSAgICAweEUxOEMsIDB4RTE4QywgMHgyMTM0LCAweEUxOEQsIDB4RTE4RCwgMHg0RTFBLCAweEUxOEUsIDB4RTE5MCwgMHgyNEYzLA0KLSAgICAweEUxOTEsIDB4RTE5MSwgMHgyNEY4LCAweEUxOTIsIDB4RTE5MiwgMHg0RTFCLCAweEUxOTMsIDB4RTE5MywgMHgyNEY3LA0KLSAgICAweEUxOTQsIDB4RTE5NCwgMHgxRUM4LCAweEUxOTUsIDB4RTE5NSwgMHgyNEY2LCAweEUxOTYsIDB4RTE5NywgMHg0RTFDLA0KLSAgICAweEUxOTgsIDB4RTE5OCwgMHgyMjgwLCAweEUxOTksIDB4RTE5RCwgMHg0RTFFLCAweEUxOUUsIDB4RTE5RSwgMHgxRUM1LA0KLSAgICAweEUxOUYsIDB4RTE5RiwgMHgyNEZCLCAweEUxQTAsIDB4RTFBMCwgMHg0RTIzLCAweEUxQTEsIDB4RTFGRSwgMHgxNUE1LA0KLSAgICAweEUyNDAsIDB4RTI0MCwgMHg0RTI0LCAweEUyNDEsIDB4RTI0MSwgMHgyNEZBLCAweEUyNDIsIDB4RTI0MiwgMHg0RTI1LA0KLSAgICAweEUyNDMsIDB4RTI0MywgMHgxRUVELCAweEUyNDQsIDB4RTI0RSwgMHg0RTI2LCAweEUyNEYsIDB4RTI0RiwgMHgyNEZELA0KLSAgICAweEUyNTAsIDB4RTI1MCwgMHg0RTMxLCAweEUyNTEsIDB4RTI1MSwgMHgyNEY5LCAweEUyNTIsIDB4RTI1MiwgMHg0RTMyLA0KLSAgICAweEUyNTMsIDB4RTI1MywgMHgyNEZFLCAweEUyNTQsIDB4RTI1NCwgMHgyMENELCAweEUyNTUsIDB4RTI1OSwgMHg0RTMzLA0KLSAgICAweEUyNUEsIDB4RTI1QSwgMHgyNTA4LCAweEUyNUIsIDB4RTI1QiwgMHgyNTA0LCAweEUyNUMsIDB4RTI1RCwgMHg0RTM4LA0KLSAgICAweEUyNUUsIDB4RTI1RSwgMHgyNTA2LCAweEUyNUYsIDB4RTI2MSwgMHg0RTNBLCAweEUyNjIsIDB4RTI2MiwgMHgyNEZGLA0KLSAgICAweEUyNjMsIDB4RTI2MywgMHgyMDkwLCAweEUyNjQsIDB4RTI2NiwgMHg0RTNELCAweEUyNjcsIDB4RTI2NywgMHgxRURELA0KLSAgICAweEUyNjgsIDB4RTI2OCwgMHgxRjI1LCAweEUyNjksIDB4RTI2OSwgMHg0RTQwLCAweEUyNkEsIDB4RTI2QSwgMHgyNTAzLA0KLSAgICAweEUyNkIsIDB4RTI2QiwgMHgyNTAyLCAweEUyNkMsIDB4RTI2RCwgMHg0RTQxLCAweEUyNkUsIDB4RTI2RSwgMHgxRTdBLA0KLSAgICAweEUyNkYsIDB4RTI2RiwgMHgyMEE2LCAweEUyNzAsIDB4RTI3NywgMHg0RTQzLCAweEUyNzgsIDB4RTI3OCwgMHgxRkQ1LA0KLSAgICAweEUyNzksIDB4RTI3QywgMHg0RTRCLCAweEUyN0QsIDB4RTI3RCwgMHgxRjExLCAweEUyN0UsIDB4RTI3RSwgMHg0RTRGLA0KLSAgICAweEUyODAsIDB4RTI4MCwgMHgyNTA3LCAweEUyODEsIDB4RTI4MSwgMHgyNTAwLCAweEUyODIsIDB4RTI4MiwgMHgyNTA1LA0KLSAgICAweEUyODMsIDB4RTI4OCwgMHg0RTUwLCAweEUyODksIDB4RTI4OSwgMHgyNTE5LCAweEUyOEEsIDB4RTI4QSwgMHg0RTU2LA0KLSAgICAweEUyOEIsIDB4RTI4QiwgMHgyNTE1LCAweEUyOEMsIDB4RTI4RCwgMHg0RTU3LCAweEUyOEUsIDB4RTI4RSwgMHgyNTBDLA0KLSAgICAweEUyOEYsIDB4RTI4RiwgMHgyMDMxLCAweEUyOTAsIDB4RTI5MSwgMHg0RTU5LCAweEUyOTIsIDB4RTI5MiwgMHgyNTBCLA0KLSAgICAweEUyOTMsIDB4RTI5MywgMHgyNTBGLCAweEUyOTQsIDB4RTI5NCwgMHgyNTFBLCAweEUyOTUsIDB4RTI5NSwgMHgyNTA5LA0KLSAgICAweEUyOTYsIDB4RTI5NywgMHg0RTVCLCAweEUyOTgsIDB4RTI5OCwgMHgyNTBFLCAweEUyOTksIDB4RTI5OSwgMHgyMjM0LA0KLSAgICAweEUyOUEsIDB4RTI5QSwgMHgyNTEzLCAweEUyOUIsIDB4RTI5QiwgMHgxRjgwLCAweEUyOUMsIDB4RTI5RiwgMHg0RTVELA0KLSAgICAweEUyQTAsIDB4RTJBMCwgMHgyNTAxLCAweEUyQTEsIDB4RTJGRSwgMHgxNjAzLCAweEUzNDAsIDB4RTM0MSwgMHg0RTYxLA0KLSAgICAweEUzNDIsIDB4RTM0MiwgMHgyNTE3LCAweEUzNDMsIDB4RTM0MywgMHgyNTE2LCAweEUzNDQsIDB4RTM0NiwgMHg0RTYzLA0KLSAgICAweEUzNDcsIDB4RTM0NywgMHgyNTE4LCAweEUzNDgsIDB4RTM0QSwgMHg0RTY2LCAweEUzNEIsIDB4RTM0QiwgMHgxRTU2LA0KLSAgICAweEUzNEMsIDB4RTM0RSwgMHg0RTY5LCAweEUzNEYsIDB4RTM0RiwgMHgyNTBELCAweEUzNTAsIDB4RTM1MCwgMHg0RTZDLA0KLSAgICAweEUzNTEsIDB4RTM1MSwgMHgyMEQzLCAweEUzNTIsIDB4RTM1MywgMHg0RTZELCAweEUzNTQsIDB4RTM1NCwgMHgyMDdBLA0KLSAgICAweEUzNTUsIDB4RTM1NSwgMHgyMENFLCAweEUzNTYsIDB4RTM1NywgMHg0RTZGLCAweEUzNTgsIDB4RTM1OCwgMHgyNTEwLA0KLSAgICAweEUzNTksIDB4RTM1QiwgMHg0RTcxLCAweEUzNUMsIDB4RTM1QywgMHgxRTU1LCAweEUzNUQsIDB4RTM1RiwgMHg0RTc0LA0KLSAgICAweEUzNjAsIDB4RTM2MCwgMHgyNTBBLCAweEUzNjEsIDB4RTM2NSwgMHg0RTc3LCAweEUzNjYsIDB4RTM2NywgMHgyNTExLA0KLSAgICAweEUzNjgsIDB4RTM3MCwgMHg0RTdDLCAweEUzNzEsIDB4RTM3MSwgMHgxRkFBLCAweEUzNzIsIDB4RTM3MiwgMHg0RTg1LA0KLSAgICAweEUzNzMsIDB4RTM3MywgMHgyNTFFLCAweEUzNzQsIDB4RTM3NCwgMHgxRjFGLCAweEUzNzUsIDB4RTM3NywgMHg0RTg2LA0KLSAgICAweEUzNzgsIDB4RTM3OCwgMHgyNTJELCAweEUzNzksIDB4RTM3OSwgMHgyMjFELCAweEUzN0EsIDB4RTM3QiwgMHg0RTg5LA0KLSAgICAweEUzN0MsIDB4RTM3QywgMHgyNTMyLCAweEUzN0QsIDB4RTM3RCwgMHg0RThCLCAweEUzN0UsIDB4RTM3RSwgMHgyMTdCLA0KLSAgICAweEUzODAsIDB4RTM4OSwgMHg0RThDLCAweEUzOEEsIDB4RTM4QSwgMHgyMUFGLCAweEUzOEIsIDB4RTM4QiwgMHg0RTk2LA0KLSAgICAweEUzOEMsIDB4RTM4QywgMHgyNTJDLCAweEUzOEQsIDB4RTM4RSwgMHg0RTk3LCAweEUzOEYsIDB4RTM4RiwgMHgyNTI4LA0KLSAgICAweEUzOTAsIDB4RTM5MCwgMHg0RTk5LCAweEUzOTEsIDB4RTM5MSwgMHgyMDhDLCAweEUzOTIsIDB4RTM5MiwgMHg0RTlBLA0KLSAgICAweEUzOTMsIDB4RTM5MywgMHgyNTJGLCAweEUzOTQsIDB4RTM5NCwgMHg0RTlCLCAweEUzOTUsIDB4RTM5NSwgMHgyMUJDLA0KLSAgICAweEUzOTYsIDB4RTM5OCwgMHg0RTlDLCAweEUzOTksIDB4RTM5OSwgMHgyNTFELCAweEUzOUEsIDB4RTM5QiwgMHg0RTlGLA0KLSAgICAweEUzOUMsIDB4RTM5QywgMHgyNTM1LCAweEUzOUQsIDB4RTM5RCwgMHg0RUExLCAweEUzOUUsIDB4RTM5RSwgMHgyMjBELA0KLSAgICAweEUzOUYsIDB4RTM5RiwgMHgyNTI2LCAweEUzQTAsIDB4RTNBMCwgMHg0RUEyLCAweEUzQTEsIDB4RTNGRSwgMHgxNjYxLA0KLSAgICAweEU0NDAsIDB4RTQ0MCwgMHgyNTM0LCAweEU0NDEsIDB4RTQ0MSwgMHgyNTJBLCAweEU0NDIsIDB4RTQ0MiwgMHgyNTFGLA0KLSAgICAweEU0NDMsIDB4RTQ0MywgMHgyNTMxLCAweEU0NDQsIDB4RTQ0NCwgMHgyNTFDLCAweEU0NDUsIDB4RTQ0NywgMHg0RUEzLA0KLSAgICAweEU0NDgsIDB4RTQ0OCwgMHgyNTI1LCAweEU0NDksIDB4RTQ0RCwgMHg0RUE2LCAweEU0NEUsIDB4RTQ0RSwgMHgyMUNELA0KLSAgICAweEU0NEYsIDB4RTQ0RiwgMHg0RUFCLCAweEU0NTAsIDB4RTQ1MCwgMHgyMURBLCAweEU0NTEsIDB4RTQ1MSwgMHg0RUFDLA0KLSAgICAweEU0NTIsIDB4RTQ1MiwgMHgyMTcyLCAweEU0NTMsIDB4RTQ1MywgMHgyNTNFLCAweEU0NTQsIDB4RTQ1NywgMHg0RUFELA0KLSAgICAweEU0NTgsIDB4RTQ1OCwgMHgyMDRGLCAweEU0NTksIDB4RTQ1OSwgMHg0RUIxLCAweEU0NUEsIDB4RTQ1QSwgMHgyNTQzLA0KLSAgICAweEU0NUIsIDB4RTQ1QiwgMHg0RUIyLCAweEU0NUMsIDB4RTQ1QywgMHgyMUQ3LCAweEU0NUQsIDB4RTQ1RCwgMHg0RUIzLA0KLSAgICAweEU0NUUsIDB4RTQ1RSwgMHgxRTNDLCAweEU0NUYsIDB4RTQ2MSwgMHg0RUI0LCAweEU0NjIsIDB4RTQ2MiwgMHgyNTI5LA0KLSAgICAweEU0NjMsIDB4RTQ2NCwgMHg0RUI3LCAweEU0NjUsIDB4RTQ2NSwgMHgyNTIxLCAweEU0NjYsIDB4RTQ2NywgMHg0RUI5LA0KLSAgICAweEU0NjgsIDB4RTQ2OCwgMHgxRUZGLCAweEU0NjksIDB4RTQ3MiwgMHg0RUJCLCAweEU0NzMsIDB4RTQ3MywgMHgyNTNGLA0KLSAgICAweEU0NzQsIDB4RTQ3NCwgMHg0RUM1LCAweEU0NzUsIDB4RTQ3NSwgMHgyNTQ0LCAweEU0NzYsIDB4RTQ3OCwgMHg0RUM2LA0KLSAgICAweEU0NzksIDB4RTQ3OSwgMHgyNTIzLCAweEU0N0EsIDB4RTQ3QSwgMHgxRTkwLCAweEU0N0IsIDB4RTQ3QiwgMHgyNTNBLA0KLSAgICAweEU0N0MsIDB4RTQ3QywgMHgyNTQ1LCAweEU0N0QsIDB4RTQ3RCwgMHg0RUM5LCAweEU0N0UsIDB4RTQ3RSwgMHgyNTNELA0KLSAgICAweEU0ODAsIDB4RTQ4MCwgMHg0RUNBLCAweEU0ODEsIDB4RTQ4MSwgMHgyMEMxLCAweEU0ODIsIDB4RTQ4MywgMHg0RUNCLA0KLSAgICAweEU0ODQsIDB4RTQ4NCwgMHgyMTAzLCAweEU0ODUsIDB4RTQ4NSwgMHgyNTIwLCAweEU0ODYsIDB4RTQ4NiwgMHgyNTNDLA0KLSAgICAweEU0ODcsIDB4RTQ4NywgMHgyNTNCLCAweEU0ODgsIDB4RTQ4OCwgMHgyNTM4LCAweEU0ODksIDB4RTQ4QywgMHg0RUNELA0KLSAgICAweEU0OEQsIDB4RTQ4RCwgMHgyNTQwLCAweEU0OEUsIDB4RTQ4RSwgMHg0RUQxLCAweEU0OEYsIDB4RTQ4RiwgMHgxRkNELA0KLSAgICAweEU0OTAsIDB4RTQ5MiwgMHg0RUQyLCAweEU0OTMsIDB4RTQ5MywgMHgxRjE4LCAweEU0OTQsIDB4RTQ5NywgMHg0RUQ1LA0KLSAgICAweEU0OTgsIDB4RTQ5OCwgMHgyNTRCLCAweEU0OTksIDB4RTQ5QywgMHg0RUQ5LCAweEU0OUQsIDB4RTQ5RCwgMHgyNTQ3LA0KLSAgICAweEU0OUUsIDB4RTQ5RiwgMHgyNTRGLCAweEU0QTAsIDB4RTRBMCwgMHg0RURELCAweEU0QTEsIDB4RTRGRSwgMHgxNkJGLA0KLSAgICAweEU1NDAsIDB4RTU0NSwgMHg0RURFLCAweEU1NDYsIDB4RTU0NiwgMHgyMkIwLCAweEU1NDcsIDB4RTU0NywgMHg0RUU0LA0KLSAgICAweEU1NDgsIDB4RTU0OCwgMHgyNTQ2LCAweEU1NDksIDB4RTU0QSwgMHg0RUU1LCAweEU1NEIsIDB4RTU0QiwgMHgyNTRDLA0KLSAgICAweEU1NEMsIDB4RTU0RCwgMHg0RUU3LCAweEU1NEUsIDB4RTU0RSwgMHgxRTlBLCAweEU1NEYsIDB4RTU0RiwgMHgyNTUyLA0KLSAgICAweEU1NTAsIDB4RTU1MCwgMHgyNTMwLCAweEU1NTEsIDB4RTU1MSwgMHgyNTQ5LCAweEU1NTIsIDB4RTU1NCwgMHg0RUU5LA0KLSAgICAweEU1NTUsIDB4RTU1NSwgMHgyNTUxLCAweEU1NTYsIDB4RTU1NiwgMHgxRUNBLCAweEU1NTcsIDB4RTU1NywgMHg0RUVDLA0KLSAgICAweEU1NTgsIDB4RTU1OCwgMHgyMEQyLCAweEU1NTksIDB4RTU1QiwgMHg0RUVELCAweEU1NUMsIDB4RTU1QywgMHgxRkI4LA0KLSAgICAweEU1NUQsIDB4RTU1RCwgMHg0RUYwLCAweEU1NUUsIDB4RTU1RSwgMHgyMDc5LCAweEU1NUYsIDB4RTU2MCwgMHg0RUYxLA0KLSAgICAweEU1NjEsIDB4RTU2MSwgMHgyMUFCLCAweEU1NjIsIDB4RTU2MywgMHg0RUYzLCAweEU1NjQsIDB4RTU2NCwgMHgyNTRELA0KLSAgICAweEU1NjUsIDB4RTU2NSwgMHgxRUE1LCAweEU1NjYsIDB4RTU2NywgMHg0RUY1LCAweEU1NjgsIDB4RTU2OCwgMHgyMDRDLA0KLSAgICAweEU1NjksIDB4RTU2OSwgMHgyMDgwLCAweEU1NkEsIDB4RTU2QiwgMHg0RUY3LCAweEU1NkMsIDB4RTU2QywgMHgyNjZELA0KLSAgICAweEU1NkQsIDB4RTU2RCwgMHg0RUY5LCAweEU1NkUsIDB4RTU2RSwgMHgyNTM3LCAweEU1NkYsIDB4RTU3NCwgMHg0RUZBLA0KLSAgICAweEU1NzUsIDB4RTU3NSwgMHgyNTRBLCAweEU1NzYsIDB4RTU3NiwgMHgyMUI4LCAweEU1NzcsIDB4RTU3NywgMHg0RjAwLA0KLSAgICAweEU1NzgsIDB4RTU3OCwgMHgyNTRFLCAweEU1NzksIDB4RTU3QSwgMHg0RjAxLCAweEU1N0IsIDB4RTU3QiwgMHgyNEZDLA0KLSAgICAweEU1N0MsIDB4RTU3QywgMHgyNTU0LCAweEU1N0QsIDB4RTU3RSwgMHg0RjAzLCAweEU1ODAsIDB4RTU4MCwgMHg0RjA1LA0KLSAgICAweEU1ODEsIDB4RTU4MSwgMHgxRjNDLCAweEU1ODIsIDB4RTU4MiwgMHg0RjA2LCAweEU1ODMsIDB4RTU4MywgMHgxRUQ1LA0KLSAgICAweEU1ODQsIDB4RTU4OSwgMHg0RjA3LCAweEU1OEEsIDB4RTU4QSwgMHgyNTU2LCAweEU1OEIsIDB4RTU4RCwgMHg0RjBELA0KLSAgICAweEU1OEUsIDB4RTU4RSwgMHgyMjY4LCAweEU1OEYsIDB4RTU5MCwgMHg0RjEwLCAweEU1OTEsIDB4RTU5MSwgMHgxRUQ2LA0KLSAgICAweEU1OTIsIDB4RTU5OSwgMHg0RjEyLCAweEU1OUEsIDB4RTU5QSwgMHgyNTU3LCAweEU1OUIsIDB4RTU5QiwgMHgyNTUzLA0KLSAgICAweEU1OUMsIDB4RTU5RSwgMHg0RjFBLCAweEU1OUYsIDB4RTU5RiwgMHgyNTQ4LCAweEU1QTAsIDB4RTVBMCwgMHg0RjFELA0KLSAgICAweEU1QTEsIDB4RTVGRSwgMHgxNzFELCAweEU2NDAsIDB4RTY0MCwgMHgyMERDLCAweEU2NDEsIDB4RTY0MywgMHg0RjFFLA0KLSAgICAweEU2NDQsIDB4RTY0NCwgMHgyNTU5LCAweEU2NDUsIDB4RTY0OCwgMHg0RjIxLCAweEU2NDksIDB4RTY0OSwgMHgxRjk3LA0KLSAgICAweEU2NEEsIDB4RTY0QSwgMHgyNTU1LCAweEU2NEIsIDB4RTY0RCwgMHg0RjI1LCAweEU2NEUsIDB4RTY0RSwgMHgyMjdELA0KLSAgICAweEU2NEYsIDB4RTY1MSwgMHg0RjI4LCAweEU2NTIsIDB4RTY1MiwgMHgyNTdFLCAweEU2NTMsIDB4RTY1NSwgMHg0RjJCLA0KLSAgICAweEU2NTYsIDB4RTY1NiwgMHgyMDdDLCAweEU2NTcsIDB4RTY1NywgMHg0RjJFLCAweEU2NTgsIDB4RTY1OCwgMHgyNTVBLA0KLSAgICAweEU2NTksIDB4RTY1QSwgMHg0RjJGLCAweEU2NUIsIDB4RTY1QiwgMHgyNTVFLCAweEU2NUMsIDB4RTY1RCwgMHg0RjMxLA0KLSAgICAweEU2NUUsIDB4RTY1RSwgMHgxRTM0LCAweEU2NUYsIDB4RTY2OCwgMHg0RjMzLCAweEU2NjksIDB4RTY2OSwgMHgyMTVFLA0KLSAgICAweEU2NkEsIDB4RTY2QSwgMHg0RjNELCAweEU2NkIsIDB4RTY2QiwgMHgyNTYwLCAweEU2NkMsIDB4RTY3NCwgMHg0RjNFLA0KLSAgICAweEU2NzUsIDB4RTY3NSwgMHgyMUEyLCAweEU2NzYsIDB4RTY3NiwgMHgyMzU0LCAweEU2NzcsIDB4RTY3OCwgMHg0RjQ3LA0KLSAgICAweEU2NzksIDB4RTY3OSwgMHgyNTYzLCAweEU2N0EsIDB4RTY3QSwgMHgyNTI3LCAweEU2N0IsIDB4RTY3QiwgMHg0RjQ5LA0KLSAgICAweEU2N0MsIDB4RTY3QywgMHgyNTJFLCAweEU2N0QsIDB4RTY3RCwgMHgyNTU4LCAweEU2N0UsIDB4RTY3RSwgMHg0RjRBLA0KLSAgICAweEU2ODAsIDB4RTY4MCwgMHgxRjFCLCAweEU2ODEsIDB4RTY4MSwgMHg0RjRCLCAweEU2ODIsIDB4RTY4MiwgMHgyMjgzLA0KLSAgICAweEU2ODMsIDB4RTY4MywgMHg0RjRDLCAweEU2ODQsIDB4RTY4NCwgMHgyNTY0LCAweEU2ODUsIDB4RTY4NiwgMHg0RjRELA0KLSAgICAweEU2ODcsIDB4RTY4NywgMHgyMEEwLCAweEU2ODgsIDB4RTY4OCwgMHg0RjRGLCAweEU2ODksIDB4RTY4OSwgMHgyNTY1LA0KLSAgICAweEU2OEEsIDB4RTY4QiwgMHg0RjUwLCAweEU2OEMsIDB4RTY4QywgMHgyNTYxLCAweEU2OEQsIDB4RTY5MiwgMHg0RjUyLA0KLSAgICAweEU2OTMsIDB4RTY5MywgMHgyNTYyLCAweEU2OTQsIDB4RTY5NiwgMHg0RjU4LCAweEU2OTcsIDB4RTY5NywgMHgyNTZDLA0KLSAgICAweEU2OTgsIDB4RTY5QSwgMHg0RjVCLCAweEU2OUIsIDB4RTY5QiwgMHgyNTZELCAweEU2OUMsIDB4RTY5QywgMHgyMDIwLA0KLSAgICAweEU2OUQsIDB4RTY5RSwgMHg0RjVFLCAweEU2OUYsIDB4RTY5RiwgMHgyNTVGLCAweEU2QTAsIDB4RTZBMCwgMHgyNTZBLA0KLSAgICAweEU2QTEsIDB4RTZGRSwgMHgxNzdCLCAweEU3NDAsIDB4RTc0MiwgMHg0RjYwLCAweEU3NDMsIDB4RTc0MywgMHgyNTZFLA0KLSAgICAweEU3NDQsIDB4RTc0NywgMHg0RjYzLCAweEU3NDgsIDB4RTc0OCwgMHgyNTM5LCAweEU3NDksIDB4RTc0OSwgMHgyNTVDLA0KLSAgICAweEU3NEEsIDB4RTc0QywgMHg0RjY3LCAweEU3NEQsIDB4RTc0RSwgMHgyNTY4LCAweEU3NEYsIDB4RTc0RiwgMHgyNTZCLA0KLSAgICAweEU3NTAsIDB4RTc1MCwgMHgxRTZGLCAweEU3NTEsIDB4RTc1MSwgMHg0RjZBLCAweEU3NTIsIDB4RTc1MiwgMHgxRkM0LA0KLSAgICAweEU3NTMsIDB4RTc1MywgMHgyNTY3LCAweEU3NTQsIDB4RTc1NCwgMHg0RjZCLCAweEU3NTUsIDB4RTc1NSwgMHgyNTVCLA0KLSAgICAweEU3NTYsIDB4RTc1OCwgMHg0RjZDLCAweEU3NTksIDB4RTc1OSwgMHgyNjFELCAweEU3NUEsIDB4RTc2NSwgMHg0RjZGLA0KLSAgICAweEU3NjYsIDB4RTc2NiwgMHgyNTJCLCAweEU3NjcsIDB4RTc2NywgMHg0RjdCLCAweEU3NjgsIDB4RTc2OCwgMHgyNTcxLA0KLSAgICAweEU3NjksIDB4RTc2OSwgMHg0RjdDLCAweEU3NkEsIDB4RTc2QSwgMHgyNTc3LCAweEU3NkIsIDB4RTc3MywgMHg0RjdELA0KLSAgICAweEU3NzQsIDB4RTc3NCwgMHgyNTIyLCAweEU3NzUsIDB4RTc3QiwgMHg0Rjg2LCAweEU3N0MsIDB4RTc3QywgMHgyNTMzLA0KLSAgICAweEU3N0QsIDB4RTc3RSwgMHg0RjhELCAweEU3ODAsIDB4RTc4MSwgMHg0RjhGLCAweEU3ODIsIDB4RTc4MiwgMHgyMDJBLA0KLSAgICAweEU3ODMsIDB4RTc4MywgMHg0RjkxLCAweEU3ODQsIDB4RTc4NCwgMHgyNTM2LCAweEU3ODUsIDB4RTc4NSwgMHgyNTczLA0KLSAgICAweEU3ODYsIDB4RTc4NiwgMHgyNTZGLCAweEU3ODcsIDB4RTc4OSwgMHg0RjkyLCAweEU3OEEsIDB4RTc4QSwgMHgyMjkzLA0KLSAgICAweEU3OEIsIDB4RTc4QiwgMHgyNTc4LCAweEU3OEMsIDB4RTc4RSwgMHg0Rjk1LCAweEU3OEYsIDB4RTc4RiwgMHgyNTcwLA0KLSAgICAweEU3OTAsIDB4RTc5MSwgMHg0Rjk4LCAweEU3OTIsIDB4RTc5MiwgMHgyNTc1LCAweEU3OTMsIDB4RTc5NywgMHg0RjlBLA0KLSAgICAweEU3OTgsIDB4RTc5OSwgMHgyNTQxLCAweEU3OUEsIDB4RTc5QSwgMHgyNTVELCAweEU3OUIsIDB4RTc5RiwgMHg0RjlGLA0KLSAgICAweEU3QTAsIDB4RTdBMCwgMHgyMDFBLCAweEU3QTEsIDB4RTdGRSwgMHgxN0Q5LCAweEU4NDAsIDB4RTg0MiwgMHg0RkE0LA0KLSAgICAweEU4NDMsIDB4RTg0MywgMHgyNTdBLCAweEU4NDQsIDB4RTg0NCwgMHgyMDA2LCAweEU4NDUsIDB4RTg0NSwgMHg0RkE3LA0KLSAgICAweEU4NDYsIDB4RTg0NiwgMHgyMTc3LCAweEU4NDcsIDB4RTg0OCwgMHg0RkE4LCAweEU4NDksIDB4RTg0OSwgMHgyNTFCLA0KLSAgICAweEU4NEEsIDB4RTg0QSwgMHg0RkFBLCAweEU4NEIsIDB4RTg0QiwgMHgyNTI0LCAweEU4NEMsIDB4RTg0RSwgMHg0RkFCLA0KLSAgICAweEU4NEYsIDB4RTg0RiwgMHgyNTdCLCAweEU4NTAsIDB4RTg1MywgMHg0RkFFLCAweEU4NTQsIDB4RTg1NCwgMHgyMkEzLA0KLSAgICAweEU4NTUsIDB4RTg1OSwgMHg0RkIyLCAweEU4NUEsIDB4RTg1QSwgMHgyNTc5LCAweEU4NUIsIDB4RTg1QiwgMHg0RkI3LA0KLSAgICAweEU4NUMsIDB4RTg1QywgMHgyNTY2LCAweEU4NUQsIDB4RTg2MSwgMHg0RkI4LCAweEU4NjIsIDB4RTg2MiwgMHgxRjkzLA0KLSAgICAweEU4NjMsIDB4RTg2MywgMHg0RkJELCAweEU4NjQsIDB4RTg2NCwgMHgyNTdDLCAweEU4NjUsIDB4RTg2RiwgMHg0RkJFLA0KLSAgICAweEU4NzAsIDB4RTg3MCwgMHgyNTE0LCAweEU4NzEsIDB4RTg3MiwgMHg0RkM5LCAweEU4NzMsIDB4RTg3MywgMHgyNTdELA0KLSAgICAweEU4NzQsIDB4RTg3NCwgMHg0RkNCLCAweEU4NzUsIDB4RTg3NSwgMHgyNTcyLCAweEU4NzYsIDB4RTg3QiwgMHg0RkNDLA0KLSAgICAweEU4N0MsIDB4RTg3QywgMHgyNTc0LCAweEU4N0QsIDB4RTg3RSwgMHg0RkQyLCAweEU4ODAsIDB4RTg4MCwgMHgyMjRFLA0KLSAgICAweEU4ODEsIDB4RTg4MSwgMHg0RkQ0LCAweEU4ODIsIDB4RTg4MiwgMHgyMUM2LCAweEU4ODMsIDB4RTg4NiwgMHg0RkQ1LA0KLSAgICAweEU4ODcsIDB4RTg4NywgMHgyMDlGLCAweEU4ODgsIDB4RTg4OCwgMHg0RkQ5LCAweEU4ODksIDB4RTg4OSwgMHgyNTc2LA0KLSAgICAweEU4OEEsIDB4RTg4QiwgMHg0RkRBLCAweEU4OEMsIDB4RTg4QywgMHgyMDY0LCAweEU4OEQsIDB4RTg4RCwgMHgyMkJGLA0KLSAgICAweEU4OEUsIDB4RTg4RSwgMHgyNjFDLCAweEU4OEYsIDB4RTg4RiwgMHgyMjVFLCAweEU4OTAsIDB4RThBMCwgMHg0RkRDLA0KLSAgICAweEU4QTEsIDB4RThGRSwgMHgxODM3LCAweEU5NDAsIDB4RTk0QiwgMHg0RkVELCAweEU5NEMsIDB4RTk0QywgMHgxRTc1LA0KLSAgICAweEU5NEQsIDB4RTk1MywgMHg0RkY5LCAweEU5NTQsIDB4RTk1NCwgMHgyMDdELCAweEU5NTUsIDB4RTk1NSwgMHg1MDAwLA0KLSAgICAweEU5NTYsIDB4RTk1NiwgMHgyM0JGLCAweEU5NTcsIDB4RTk1NywgMHgyMTEzLCAweEU5NTgsIDB4RTk1OSwgMHg1MDAxLA0KLSAgICAweEU5NUEsIDB4RTk1QSwgMHgyM0MwLCAweEU5NUIsIDB4RTk1QywgMHg1MDAzLCAweEU5NUQsIDB4RTk1RCwgMHgxRTQ1LA0KLSAgICAweEU5NUUsIDB4RTk1RSwgMHg1MDA1LCAweEU5NUYsIDB4RTk1RiwgMHgxRkQ4LCAweEU5NjAsIDB4RTk2MCwgMHgyM0M0LA0KLSAgICAweEU5NjEsIDB4RTk2MSwgMHg1MDA2LCAweEU5NjIsIDB4RTk2MiwgMHgyM0MyLCAweEU5NjMsIDB4RTk2MywgMHgyMTA0LA0KLSAgICAweEU5NjQsIDB4RTk2NCwgMHg1MDA3LCAweEU5NjUsIDB4RTk2NSwgMHgyMUJELCAweEU5NjYsIDB4RTk2NiwgMHg1MDA4LA0KLSAgICAweEU5NjcsIDB4RTk2NywgMHgxRjg3LCAweEU5NjgsIDB4RTk2OCwgMHgyM0MzLCAweEU5NjksIDB4RTk2QiwgMHg1MDA5LA0KLSAgICAweEU5NkMsIDB4RTk2QywgMHgyMjY5LCAweEU5NkQsIDB4RTk3NCwgMHg1MDBDLCAweEU5NzUsIDB4RTk3NSwgMHgxRjQzLA0KLSAgICAweEU5NzYsIDB4RTk3NiwgMHg1MDE0LCAweEU5NzcsIDB4RTk3NywgMHgxRjFFLCAweEU5NzgsIDB4RTk3OCwgMHgyNjc5LA0KLSAgICAweEU5NzksIDB4RTk3OSwgMHgxRUVCLCAweEU5N0EsIDB4RTk3QiwgMHg1MDE1LCAweEU5N0MsIDB4RTk3QywgMHgxRjM1LA0KLSAgICAweEU5N0QsIDB4RTk3RCwgMHgyMDhBLCAweEU5N0UsIDB4RTk3RSwgMHg1MDE3LCAweEU5ODAsIDB4RTk4MCwgMHgyM0M3LA0KLSAgICAweEU5ODEsIDB4RTk4MSwgMHgyM0M5LCAweEU5ODIsIDB4RTk4MiwgMHgyM0M2LCAweEU5ODMsIDB4RTk4NiwgMHg1MDE4LA0KLSAgICAweEU5ODcsIDB4RTk4NywgMHgyMjRGLCAweEU5ODgsIDB4RTk4QSwgMHg1MDFDLCAweEU5OEIsIDB4RTk4QiwgMHgyM0NCLA0KLSAgICAweEU5OEMsIDB4RTk4RCwgMHg1MDFGLCAweEU5OEUsIDB4RTk4RSwgMHgyMUYzLCAweEU5OEYsIDB4RTk4RiwgMHg1MDIxLA0KLSAgICAweEU5OTAsIDB4RTk5MCwgMHgyMUY3LCAweEU5OTEsIDB4RTk5MSwgMHgyM0NGLCAweEU5OTIsIDB4RTk5MiwgMHgyM0NFLA0KLSAgICAweEU5OTMsIDB4RTk5MywgMHgyM0NBLCAweEU5OTQsIDB4RTk5NCwgMHgyM0NELCAweEU5OTUsIDB4RTk5NywgMHg1MDIyLA0KLSAgICAweEU5OTgsIDB4RTk5OCwgMHgyM0QwLCAweEU5OTksIDB4RTk5QSwgMHg1MDI1LCAweEU5OUIsIDB4RTk5QiwgMHgyNjZDLA0KLSAgICAweEU5OUMsIDB4RTk5QywgMHg1MDI3LCAweEU5OUQsIDB4RTk5RCwgMHgyM0MxLCAweEU5OUUsIDB4RTk5RSwgMHg1MDI4LA0KLSAgICAweEU5OUYsIDB4RTk5RiwgMHgxRkVFLCAweEU5QTAsIDB4RTlBMCwgMHgyM0QxLCAweEU5QTEsIDB4RTlGRSwgMHgxODk1LA0KLSAgICAweEVBNDAsIDB4RUE0MCwgMHgxRkY4LCAweEVBNDEsIDB4RUE0MywgMHg1MDI5LCAweEVBNDQsIDB4RUE0NCwgMHgyM0QzLA0KLSAgICAweEVBNDUsIDB4RUE0NywgMHg1MDJDLCAweEVBNDgsIDB4RUE0OCwgMHgyM0QyLCAweEVBNDksIDB4RUE0OSwgMHgyM0Q0LA0KLSAgICAweEVBNEEsIDB4RUE0QSwgMHgxRTk4LCAweEVBNEIsIDB4RUE0RiwgMHg1MDJGLCAweEVBNTAsIDB4RUE1MCwgMHgxRjJDLA0KLSAgICAweEVBNTEsIDB4RUE1MSwgMHg1MDM0LCAweEVBNTIsIDB4RUE1MiwgMHgyM0Q1LCAweEVBNTMsIDB4RUE1NCwgMHg1MDM1LA0KLSAgICAweEVBNTUsIDB4RUE1NSwgMHgxRTcxLCAweEVBNTYsIDB4RUE1NiwgMHgyNjkxLCAweEVBNTcsIDB4RUE1OCwgMHg1MDM3LA0KLSAgICAweEVBNTksIDB4RUE1OSwgMHgyM0M1LCAweEVBNUEsIDB4RUE3RSwgMHg1MDM5LCAweEVBODAsIDB4RUE4MCwgMHgyMzFBLA0KLSAgICAweEVBODEsIDB4RUE4MywgMHg1MDVFLCAweEVBODQsIDB4RUE4NCwgMHgyMTE0LCAweEVBODUsIDB4RUE4NiwgMHg1MDYxLA0KLSAgICAweEVBODcsIDB4RUE4NywgMHgyMjg0LCAweEVBODgsIDB4RUE4RCwgMHg1MDYzLCAweEVBOEUsIDB4RUE4RSwgMHgyMjFDLA0KLSAgICAweEVBOEYsIDB4RUE4RiwgMHg1MDY5LCAweEVBOTAsIDB4RUE5MCwgMHgxRTdFLCAweEVBOTEsIDB4RUE5MSwgMHgyMDRELA0KLSAgICAweEVBOTIsIDB4RUE5NSwgMHg1MDZBLCAweEVBOTYsIDB4RUE5NiwgMHgyMjAxLCAweEVBOTcsIDB4RUE5RiwgMHg1MDZFLA0KLSAgICAweEVBQTAsIDB4RUFBMCwgMHgxRUQ5LCAweEVBQTEsIDB4RUFGRSwgMHgxOEYzLCAweEVCNDAsIDB4RUI0MCwgMHg1MDc3LA0KLSAgICAweEVCNDEsIDB4RUI0MSwgMHgxRkIyLCAweEVCNDIsIDB4RUI0NCwgMHg1MDc4LCAweEVCNDUsIDB4RUI0NSwgMHgyMjUyLA0KLSAgICAweEVCNDYsIDB4RUI0NywgMHg1MDdCLCAweEVCNDgsIDB4RUI0OCwgMHgxRjc5LCAweEVCNDksIDB4RUI1MiwgMHg1MDdELA0KLSAgICAweEVCNTMsIDB4RUI1MywgMHgyMTU3LCAweEVCNTQsIDB4RUI1NCwgMHg1MDg3LCAweEVCNTUsIDB4RUI1NSwgMHgyMUJGLA0KLSAgICAweEVCNTYsIDB4RUI1QSwgMHg1MDg4LCAweEVCNUIsIDB4RUI1QiwgMHgyMjFGLCAweEVCNUMsIDB4RUI1QywgMHg1MDhELA0KLSAgICAweEVCNUQsIDB4RUI1RCwgMHgyMDNELCAweEVCNUUsIDB4RUI1RiwgMHg1MDhFLCAweEVCNjAsIDB4RUI2MCwgMHgyMDE1LA0KLSAgICAweEVCNjEsIDB4RUI2MSwgMHg1MDkwLCAweEVCNjIsIDB4RUI2MiwgMHgyNkE1LCAweEVCNjMsIDB4RUI2QywgMHg1MDkxLA0KLSAgICAweEVCNkQsIDB4RUI2RCwgMHgyMTU2LCAweEVCNkUsIDB4RUI2RiwgMHg1MDlCLCAweEVCNzAsIDB4RUI3MCwgMHgyMTQ0LA0KLSAgICAweEVCNzEsIDB4RUI3MSwgMHg1MDlELCAweEVCNzIsIDB4RUI3MiwgMHgxRTkxLCAweEVCNzMsIDB4RUI3MywgMHgyMjU3LA0KLSAgICAweEVCNzQsIDB4RUI3NywgMHg1MDlFLCAweEVCNzgsIDB4RUI3OCwgMHgyMDBBLCAweEVCNzksIDB4RUI3OSwgMHgyMDkyLA0KLSAgICAweEVCN0EsIDB4RUI3RSwgMHg1MEEyLCAweEVCODAsIDB4RUI4NCwgMHg1MEE3LCAweEVCODUsIDB4RUI4NSwgMHgyMjUwLA0KLSAgICAweEVCODYsIDB4RUI4OSwgMHg1MEFDLCAweEVCOEEsIDB4RUI4QSwgMHgxRUMzLCAweEVCOEIsIDB4RUJBMCwgMHg1MEIwLA0KLSAgICAweEVCQTEsIDB4RUJGRSwgMHgxOTUxLCAweEVDNDAsIDB4RUM0NSwgMHg1MEM2LCAweEVDNDYsIDB4RUM0NiwgMHgyMUE4LA0KLSAgICAweEVDNDcsIDB4RUM1NSwgMHg1MENDLCAweEVDNTYsIDB4RUM1NiwgMHgyNjBELCAweEVDNTcsIDB4RUM1OSwgMHg1MERCLA0KLSAgICAweEVDNUEsIDB4RUM1QSwgMHgyNjBDLCAweEVDNUIsIDB4RUM1QiwgMHg1MERFLCAweEVDNUMsIDB4RUM1QywgMHgyNjBFLA0KLSAgICAweEVDNUQsIDB4RUM1RiwgMHg1MERGLCAweEVDNjAsIDB4RUM2MCwgMHgyMDMyLCAweEVDNjEsIDB4RUM2RCwgMHg1MEUyLA0KLSAgICAweEVDNkUsIDB4RUM2RSwgMHgyNjBCLCAweEVDNkYsIDB4RUM3NSwgMHg1MEVGLCAweEVDNzYsIDB4RUM3NiwgMHgyMkMzLA0KLSAgICAweEVDNzcsIDB4RUM3RSwgMHg1MEY2LCAweEVDODAsIDB4RUM5NSwgMHg1MEZFLCAweEVDOTYsIDB4RUM5NiwgMHgxRjIzLA0KLSAgICAweEVDOTcsIDB4RUNBMCwgMHg1MTE0LCAweEVDQTEsIDB4RUNGRSwgMHgxOUFGLCAweEVENDAsIDB4RUQ0NSwgMHg1MTFFLA0KLSAgICAweEVENDYsIDB4RUQ0NiwgMHgyNjk1LCAweEVENDcsIDB4RUQ1NywgMHg1MTI0LCAweEVENTgsIDB4RUQ1OCwgMHgyNjVFLA0KLSAgICAweEVENTksIDB4RUQ1RCwgMHg1MTM1LCAweEVENUUsIDB4RUQ1RSwgMHgyNjVELCAweEVENUYsIDB4RUQ2MCwgMHg1MTNBLA0KLSAgICAweEVENjEsIDB4RUQ2MSwgMHgyNjkyLCAweEVENjIsIDB4RUQ2MywgMHg1MTNDLCAweEVENjQsIDB4RUQ2NCwgMHgyNjVGLA0KLSAgICAweEVENjUsIDB4RUQ2NSwgMHg1MTNFLCAweEVENjYsIDB4RUQ2NiwgMHgyMThELCAweEVENjcsIDB4RUQ2NywgMHgyMEZELA0KLSAgICAweEVENjgsIDB4RUQ2RCwgMHg1MTNGLCAweEVENkUsIDB4RUQ2RSwgMHgxRjQwLCAweEVENkYsIDB4RUQ3MywgMHg1MTQ1LA0KLSAgICAweEVENzQsIDB4RUQ3NCwgMHgyNDY1LCAweEVENzUsIDB4RUQ3NiwgMHg1MTRBLCAweEVENzcsIDB4RUQ3NywgMHgyNDY3LA0KLSAgICAweEVENzgsIDB4RUQ3OCwgMHg1MTRDLCAweEVENzksIDB4RUQ3OSwgMHgyNDY2LCAweEVEN0EsIDB4RUQ3RSwgMHg1MTRELA0KLSAgICAweEVEODAsIDB4RUQ5MCwgMHg1MTUyLCAweEVEOTEsIDB4RUQ5MSwgMHgyMUM5LCAweEVEOTIsIDB4RUQ5MiwgMHg1MTYzLA0KLSAgICAweEVEOTMsIDB4RUQ5MywgMHgyMjA5LCAweEVEOTQsIDB4RUQ5NCwgMHgxRUM5LCAweEVEOTUsIDB4RUQ5NSwgMHgyMEU5LA0KLSAgICAweEVEOTYsIDB4RUQ5NiwgMHg1MTY0LCAweEVEOTcsIDB4RUQ5NywgMHgyMUNBLCAweEVEOTgsIDB4RUQ5OCwgMHgyMTQ2LA0KLSAgICAweEVEOTksIDB4RUQ5OSwgMHgyNUM1LCAweEVEOUEsIDB4RUQ5QSwgMHgyMURDLCAweEVEOUIsIDB4RUQ5QiwgMHg1MTY1LA0KLSAgICAweEVEOUMsIDB4RUQ5QywgMHgyNDVFLCAweEVEOUQsIDB4RUQ5RCwgMHg1MTY2LCAweEVEOUUsIDB4RUQ5RSwgMHgyMTRGLA0KLSAgICAweEVEOUYsIDB4RUQ5RiwgMHg1MTY3LCAweEVEQTAsIDB4RURBMCwgMHgyNUM2LCAweEVEQTEsIDB4RURGRSwgMHgxQTBELA0KLSAgICAweEVFNDAsIDB4RUU0MCwgMHgyNUM3LCAweEVFNDEsIDB4RUU0MSwgMHgyMjQxLCAweEVFNDIsIDB4RUU0MiwgMHgyMThBLA0KLSAgICAweEVFNDMsIDB4RUU0MywgMHgxRTJGLCAweEVFNDQsIDB4RUU0NCwgMHgxRURDLCAweEVFNDUsIDB4RUU0NywgMHg1MTY4LA0KLSAgICAweEVFNDgsIDB4RUU0OCwgMHgyMEJGLCAweEVFNDksIDB4RUU0OSwgMHgyMDM0LCAweEVFNEEsIDB4RUU0QywgMHg1MTZCLA0KLSAgICAweEVFNEQsIDB4RUU0RCwgMHgyNUM5LCAweEVFNEUsIDB4RUU1MSwgMHg1MTZFLCAweEVFNTIsIDB4RUU1MiwgMHgyNUM4LA0KLSAgICAweEVFNTMsIDB4RUU1NCwgMHg1MTcyLCAweEVFNTUsIDB4RUU1NSwgMHgyMjBFLCAweEVFNTYsIDB4RUU1NiwgMHg1MTc0LA0KLSAgICAweEVFNTcsIDB4RUU1NywgMHgyNUNCLCAweEVFNTgsIDB4RUU1RCwgMHg1MTc1LCAweEVFNUUsIDB4RUU1RSwgMHgyMTdELA0KLSAgICAweEVFNUYsIDB4RUU2MCwgMHg1MTdCLCAweEVFNjEsIDB4RUU2MSwgMHgxRjdFLCAweEVFNjIsIDB4RUU2NywgMHg1MTdELA0KLSAgICAweEVFNjgsIDB4RUU2OCwgMHgyNUNDLCAweEVFNjksIDB4RUU2OSwgMHgxRkMzLCAweEVFNkEsIDB4RUU2QiwgMHg1MTgzLA0KLSAgICAweEVFNkMsIDB4RUU2QywgMHgyMEI5LCAweEVFNkQsIDB4RUU2RCwgMHg1MTg1LCAweEVFNkUsIDB4RUU2RSwgMHgyMTgxLA0KLSAgICAweEVFNkYsIDB4RUU3NiwgMHg1MTg2LCAweEVFNzcsIDB4RUU3NywgMHgxRkRBLCAweEVFNzgsIDB4RUU3QywgMHg1MThFLA0KLSAgICAweEVFN0QsIDB4RUU3RCwgMHgyMTczLCAweEVFN0UsIDB4RUU3RSwgMHgxRUUxLCAweEVFODAsIDB4RUU4MCwgMHgyNUNELA0KLSAgICAweEVFODEsIDB4RUU4NCwgMHg1MTkzLCAweEVFODUsIDB4RUU4NSwgMHgyNUNFLCAweEVFODYsIDB4RUU4NiwgMHgyMUY2LA0KLSAgICAweEVFODcsIDB4RUU4OSwgMHg1MTk3LCAweEVFOEEsIDB4RUU4QSwgMHgyMjRCLCAweEVFOEIsIDB4RUU4QiwgMHgyNUQxLA0KLSAgICAweEVFOEMsIDB4RUU4QywgMHg1MTlBLCAweEVFOEQsIDB4RUU4RCwgMHgxRUMwLCAweEVFOEUsIDB4RUU4RiwgMHg1MTlCLA0KLSAgICAweEVFOTAsIDB4RUU5MCwgMHgyMDA4LCAweEVFOTEsIDB4RUU5MywgMHg1MTlELCAweEVFOTQsIDB4RUU5NCwgMHgyNUQwLA0KLSAgICAweEVFOTUsIDB4RUU5NiwgMHg1MUEwLCAweEVFOTcsIDB4RUU5NywgMHgyNUQyLCAweEVFOTgsIDB4RUU5OCwgMHg1MUEyLA0KLSAgICAweEVFOTksIDB4RUU5OSwgMHgxRjJBLCAweEVFOUEsIDB4RUU5QywgMHg1MUEzLCAweEVFOUQsIDB4RUU5RCwgMHgxRTcyLA0KLSAgICAweEVFOUUsIDB4RUU5RSwgMHgyNUQzLCAweEVFOUYsIDB4RUVBMCwgMHg1MUE2LCAweEVFQTEsIDB4RUVGRSwgMHgxQTZCLA0KLSAgICAweEVGNDAsIDB4RUY0MCwgMHgyMUJFLCAweEVGNDEsIDB4RUY0MSwgMHgyNUQ0LCAweEVGNDIsIDB4RUY0MiwgMHgyMDQ0LA0KLSAgICAweEVGNDMsIDB4RUY0MywgMHg1MUE4LCAweEVGNDQsIDB4RUY0NCwgMHgyNUNGLCAweEVGNDUsIDB4RUY0NSwgMHgyMEYzLA0KLSAgICAweEVGNDYsIDB4RUY0QiwgMHg1MUE5LCAweEVGNEMsIDB4RUY0QywgMHgxRjAwLCAweEVGNEQsIDB4RUY1MSwgMHg1MUFGLA0KLSAgICAweEVGNTIsIDB4RUY1MywgMHgyNENDLCAweEVGNTQsIDB4RUY1NCwgMHg1MUI0LCAweEVGNTUsIDB4RUY1NSwgMHgyNjk4LA0KLSAgICAweEVGNTYsIDB4RUY1NiwgMHg1MUI1LCAweEVGNTcsIDB4RUY1NywgMHgyNjc4LCAweEVGNTgsIDB4RUY1OSwgMHg1MUI2LA0KLSAgICAweEVGNUEsIDB4RUY1QSwgMHgyNENFLCAweEVGNUIsIDB4RUY1RiwgMHg1MUI4LCAweEVGNjAsIDB4RUY2MCwgMHgyNENGLA0KLSAgICAweEVGNjEsIDB4RUY2NywgMHg1MUJELCAweEVGNjgsIDB4RUY2OCwgMHgyMEI4LCAweEVGNjksIDB4RUY2OSwgMHg1MUM0LA0KLSAgICAweEVGNkEsIDB4RUY2QSwgMHgyNEQwLCAweEVGNkIsIDB4RUY2QiwgMHg1MUM1LCAweEVGNkMsIDB4RUY2QywgMHgyNEQxLA0KLSAgICAweEVGNkQsIDB4RUY3NiwgMHg1MUM2LCAweEVGNzcsIDB4RUY3NywgMHgxRUY0LCAweEVGNzgsIDB4RUY3OSwgMHg1MUQwLA0KLSAgICAweEVGN0EsIDB4RUY3QSwgMHgyMzlCLCAweEVGN0IsIDB4RUY3QiwgMHg1MUQyLCAweEVGN0MsIDB4RUY3QywgMHgyNjdFLA0KLSAgICAweEVGN0QsIDB4RUY3RSwgMHg1MUQzLCAweEVGODAsIDB4RUY4MSwgMHg1MUQ1LCAweEVGODIsIDB4RUY4MiwgMHgyMzlELA0KLSAgICAweEVGODMsIDB4RUY4NCwgMHgyMzlGLCAweEVGODUsIDB4RUY4NSwgMHg1MUQ3LCAweEVGODYsIDB4RUY4NiwgMHgyM0ExLA0KLSAgICAweEVGODcsIDB4RUY4NywgMHg1MUQ4LCAweEVGODgsIDB4RUY4OCwgMHgxRUYxLCAweEVGODksIDB4RUY4QSwgMHg1MUQ5LA0KLSAgICAweEVGOEIsIDB4RUY4QiwgMHgyMjFFLCAweEVGOEMsIDB4RUY4QywgMHg1MURCLCAweEVGOEQsIDB4RUY4RCwgMHgyM0EyLA0KLSAgICAweEVGOEUsIDB4RUY5NCwgMHg1MURDLCAweEVGOTUsIDB4RUY5NSwgMHgyMTRCLCAweEVGOTYsIDB4RUY5NiwgMHgxRTM2LA0KLSAgICAweEVGOTcsIDB4RUY5NywgMHgyMTM1LCAweEVGOTgsIDB4RUY5QiwgMHg1MUUzLCAweEVGOUMsIDB4RUY5QywgMHgxRkFELA0KLSAgICAweEVGOUQsIDB4RUY5RCwgMHg1MUU3LCAweEVGOUUsIDB4RUY5RSwgMHgxRTUzLCAweEVGOUYsIDB4RUZBMCwgMHg1MUU4LA0KLSAgICAweEVGQTEsIDB4RUZGRSwgMHgxQUM5LCAweEYwNDAsIDB4RjA0MCwgMHg1MUVBLCAweEYwNDEsIDB4RjA0MSwgMHgyM0EzLA0KLSAgICAweEYwNDIsIDB4RjA0MiwgMHgyMjAzLCAweEYwNDMsIDB4RjA0MywgMHg1MUVCLCAweEYwNDQsIDB4RjA0NCwgMHgxRUU3LA0KLSAgICAweEYwNDUsIDB4RjA0NiwgMHg1MUVDLCAweEYwNDcsIDB4RjA0NywgMHgyM0E0LCAweEYwNDgsIDB4RjA0OCwgMHgyMDk3LA0KLSAgICAweEYwNDksIDB4RjA0OSwgMHgxRUU0LCAweEYwNEEsIDB4RjA0RCwgMHg1MUVFLCAweEYwNEUsIDB4RjA0RSwgMHgyMjM4LA0KLSAgICAweEYwNEYsIDB4RjA1MCwgMHg1MUYyLCAweEYwNTEsIDB4RjA1MSwgMHgyM0E1LCAweEYwNTIsIDB4RjA1MywgMHg1MUY0LA0KLSAgICAweEYwNTQsIDB4RjA1NCwgMHgxRjlBLCAweEYwNTUsIDB4RjA1NiwgMHg1MUY2LCAweEYwNTcsIDB4RjA1NywgMHgyMUMzLA0KLSAgICAweEYwNTgsIDB4RjA1RCwgMHg1MUY4LCAweEYwNUUsIDB4RjA1RSwgMHgxRjJFLCAweEYwNUYsIDB4RjA2NywgMHg1MUZFLA0KLSAgICAweEYwNjgsIDB4RjA2OCwgMHgyMzlDLCAweEYwNjksIDB4RjA2QiwgMHg1MjA3LCAweEYwNkMsIDB4RjA2QywgMHgyM0E2LA0KLSAgICAweEYwNkQsIDB4RjA3MCwgMHg1MjBBLCAweEYwNzEsIDB4RjA3MSwgMHgyMzlFLCAweEYwNzIsIDB4RjA3MiwgMHg1MjBFLA0KLSAgICAweEYwNzMsIDB4RjA3MywgMHgyMDM1LCAweEYwNzQsIDB4RjA3NCwgMHgyM0E3LCAweEYwNzUsIDB4RjA3NywgMHg1MjBGLA0KLSAgICAweEYwNzgsIDB4RjA3OCwgMHgyM0E4LCAweEYwNzksIDB4RjA3OSwgMHg1MjEyLCAweEYwN0EsIDB4RjA3QSwgMHgyMDc1LA0KLSAgICAweEYwN0IsIDB4RjA3QywgMHg1MjEzLCAweEYwN0QsIDB4RjA3RSwgMHgyM0E5LCAweEYwODAsIDB4RjA4MCwgMHgyM0FCLA0KLSAgICAweEYwODEsIDB4RjA4MSwgMHgxRkVCLCAweEYwODIsIDB4RjA4MiwgMHgyM0FDLCAweEYwODMsIDB4RjA4NiwgMHg1MjE1LA0KLSAgICAweEYwODcsIDB4RjA4NywgMHgxRjZBLCAweEYwODgsIDB4RjA4OCwgMHgyMEY5LCAweEYwODksIDB4RjA4QSwgMHg1MjE5LA0KLSAgICAweEYwOEIsIDB4RjA4QiwgMHgyNjY2LCAweEYwOEMsIDB4RjA4RiwgMHg1MjFCLCAweEYwOTAsIDB4RjA5MCwgMHgyNjY3LA0KLSAgICAweEYwOTEsIDB4RjA5MSwgMHg1MjFGLCAweEYwOTIsIDB4RjA5MiwgMHgxRTZDLCAweEYwOTMsIDB4RjA5NSwgMHg1MjIwLA0KLSAgICAweEYwOTYsIDB4RjA5NiwgMHgyM0FELCAweEYwOTcsIDB4RjBBMCwgMHg1MjIzLCAweEYwQTEsIDB4RjBGRSwgMHgxQjI3LA0KLSAgICAweEYxNDAsIDB4RjE1MSwgMHg1MjJELCAweEYxNTIsIDB4RjE1MiwgMHgyMDZELCAweEYxNTMsIDB4RjE1MywgMHgyMjQyLA0KLSAgICAweEYxNTQsIDB4RjE1NCwgMHgxRjAyLCAweEYxNTUsIDB4RjE1NiwgMHg1MjNGLCAweEYxNTcsIDB4RjE1NywgMHgyMTgzLA0KLSAgICAweEYxNTgsIDB4RjE1OCwgMHg1MjQxLCAweEYxNTksIDB4RjE1OSwgMHgxRTg1LCAweEYxNUEsIDB4RjE1QSwgMHgyMUU5LA0KLSAgICAweEYxNUIsIDB4RjE2NiwgMHg1MjQyLCAweEYxNjcsIDB4RjE2NywgMHgxRTU3LCAweEYxNjgsIDB4RjE3NSwgMHg1MjRFLA0KLSAgICAweEYxNzYsIDB4RjE3NiwgMHgyMkE1LCAweEYxNzcsIDB4RjE3NywgMHgyNDA3LCAweEYxNzgsIDB4RjE3OCwgMHgxRkNBLA0KLSAgICAweEYxNzksIDB4RjE3OSwgMHg1MjVDLCAweEYxN0EsIDB4RjE3QSwgMHgyNDAyLCAweEYxN0IsIDB4RjE3QiwgMHgxRjgyLA0KLSAgICAweEYxN0MsIDB4RjE3RCwgMHg1MjVELCAweEYxN0UsIDB4RjE3RSwgMHgyNDA4LCAweEYxODAsIDB4RjE4MCwgMHgyNDA0LA0KLSAgICAweEYxODEsIDB4RjE4MSwgMHg1MjVGLCAweEYxODIsIDB4RjE4MiwgMHgyMTMxLCAweEYxODMsIDB4RjE4MywgMHg1MjYwLA0KLSAgICAweEYxODQsIDB4RjE4NCwgMHgyMTg0LCAweEYxODUsIDB4RjE4NSwgMHg1MjYxLCAweEYxODYsIDB4RjE4NiwgMHgyNDAzLA0KLSAgICAweEYxODcsIDB4RjE4NywgMHg1MjYyLCAweEYxODgsIDB4RjE4OCwgMHgyMDZFLCAweEYxODksIDB4RjE4OSwgMHgyNDBCLA0KLSAgICAweEYxOEEsIDB4RjE5MywgMHg1MjYzLCAweEYxOTQsIDB4RjE5NCwgMHgxRjNGLCAweEYxOTUsIDB4RjE5NywgMHg1MjZELA0KLSAgICAweEYxOTgsIDB4RjE5OCwgMHgyMDY3LCAweEYxOTksIDB4RjFBMCwgMHg1MjcwLCAweEYxQTEsIDB4RjFGRSwgMHgxQjg1LA0KLSAgICAweEYyNDAsIDB4RjI0NCwgMHg1Mjc4LCAweEYyNDUsIDB4RjI0NSwgMHgxRkQ3LCAweEYyNDYsIDB4RjI0NiwgMHg1MjdELA0KLSAgICAweEYyNDcsIDB4RjI0NywgMHgxRTgzLCAweEYyNDgsIDB4RjI0QSwgMHg1MjdFLCAweEYyNEIsIDB4RjI0QiwgMHgyNDBGLA0KLSAgICAweEYyNEMsIDB4RjI1MiwgMHg1MjgxLCAweEYyNTMsIDB4RjI1MywgMHgyNDBFLCAweEYyNTQsIDB4RjI1NCwgMHgyMEM3LA0KLSAgICAweEYyNTUsIDB4RjI1NSwgMHgyNDBELCAweEYyNTYsIDB4RjI1QiwgMHg1Mjg4LCAweEYyNUMsIDB4RjI1QywgMHgyNDEyLA0KLSAgICAweEYyNUQsIDB4RjI1RSwgMHg1MjhFLCAweEYyNUYsIDB4RjI1RiwgMHgyMEI3LCAweEYyNjAsIDB4RjI3MCwgMHg1MjkwLA0KLSAgICAweEYyNzEsIDB4RjI3MSwgMHgyM0YwLCAweEYyNzIsIDB4RjI3MiwgMHg1MkExLCAweEYyNzMsIDB4RjI3MywgMHgyNDExLA0KLSAgICAweEYyNzQsIDB4RjI3NCwgMHgyNDE0LCAweEYyNzUsIDB4RjI3NSwgMHg1MkEyLCAweEYyNzYsIDB4RjI3NiwgMHgyMTcwLA0KLSAgICAweEYyNzcsIDB4RjI3QiwgMHg1MkEzLCAweEYyN0MsIDB4RjI3QywgMHgyNDA1LCAweEYyN0QsIDB4RjI3RCwgMHgyMTBDLA0KLSAgICAweEYyN0UsIDB4RjI3RSwgMHgyNDE1LCAweEYyODAsIDB4RjI4NCwgMHg1MkE4LCAweEYyODUsIDB4RjI4NSwgMHgyMDY2LA0KLSAgICAweEYyODYsIDB4RjI4NiwgMHg1MkFELCAweEYyODcsIDB4RjI4NywgMHgyMzUyLCAweEYyODgsIDB4RjI4OCwgMHgyNDEzLA0KLSAgICAweEYyODksIDB4RjI4OSwgMHgyNDEwLCAweEYyOEEsIDB4RjI4QiwgMHgyNDE2LCAweEYyOEMsIDB4RjI4QywgMHgyMEYxLA0KLSAgICAweEYyOEQsIDB4RjI5MCwgMHg1MkFFLCAweEYyOTEsIDB4RjI5MSwgMHgyNDBBLCAweEYyOTIsIDB4RjI5MywgMHg1MkIyLA0KLSAgICAweEYyOTQsIDB4RjI5NCwgMHgyNDA5LCAweEYyOTUsIDB4RjI5NSwgMHg1MkI0LCAweEYyOTYsIDB4RjI5NiwgMHgyNDE4LA0KLSAgICAweEYyOTcsIDB4RjI5QiwgMHg1MkI1LCAweEYyOUMsIDB4RjI5QywgMHgxRkE3LCAweEYyOUQsIDB4RjI5RCwgMHg1MkJBLA0KLSAgICAweEYyOUUsIDB4RjI5RSwgMHgyMUZDLCAweEYyOUYsIDB4RjJBMCwgMHg1MkJCLCAweEYyQTEsIDB4RjJGRSwgMHgxQkUzLA0KLSAgICAweEYzNDAsIDB4RjM0MCwgMHgxRkMxLCAweEYzNDEsIDB4RjM0MSwgMHgyNDA2LCAweEYzNDIsIDB4RjM0NCwgMHg1MkJELA0KLSAgICAweEYzNDUsIDB4RjM0NSwgMHgyMjlDLCAweEYzNDYsIDB4RjM0NywgMHg1MkMwLCAweEYzNDgsIDB4RjM0OCwgMHgyMDRFLA0KLSAgICAweEYzNDksIDB4RjM0OSwgMHg1MkMyLCAweEYzNEEsIDB4RjM0QSwgMHgyNDFBLCAweEYzNEIsIDB4RjM0QiwgMHgyNDE5LA0KLSAgICAweEYzNEMsIDB4RjM0RiwgMHg1MkMzLCAweEYzNTAsIDB4RjM1MCwgMHgyNDBDLCAweEYzNTEsIDB4RjM2MCwgMHg1MkM3LA0KLSAgICAweEYzNjEsIDB4RjM2MSwgMHgxRTI5LCAweEYzNjIsIDB4RjM3MywgMHg1MkQ3LCAweEYzNzQsIDB4RjM3NCwgMHgyNjYxLA0KLSAgICAweEYzNzUsIDB4RjM3NSwgMHg1MkU5LCAweEYzNzYsIDB4RjM3NiwgMHgyNkE0LCAweEYzNzcsIDB4RjM3NywgMHgyMTc0LA0KLSAgICAweEYzNzgsIDB4RjM3OCwgMHgyNjYzLCAweEYzNzksIDB4RjM3OSwgMHgyNjYyLCAweEYzN0EsIDB4RjM3RSwgMHg1MkVBLA0KLSAgICAweEYzODAsIDB4RjM4QiwgMHg1MkVGLCAweEYzOEMsIDB4RjM4QywgMHgyNjc1LCAweEYzOEQsIDB4RjM5RiwgMHg1MkZCLA0KLSAgICAweEYzQTAsIDB4RjNBMCwgMHgyMTRDLCAweEYzQTEsIDB4RjNGRSwgMHgxQzQxLCAweEY0NDAsIDB4RjQ0NCwgMHg1MzBFLA0KLSAgICAweEY0NDUsIDB4RjQ0NSwgMHgyNjdBLCAweEY0NDYsIDB4RjQ0RiwgMHg1MzEzLCAweEY0NTAsIDB4RjQ1MCwgMHgyNkEwLA0KLSAgICAweEY0NTEsIDB4RjQ1NiwgMHg1MzFELCAweEY0NTcsIDB4RjQ1NywgMHgyNjY4LCAweEY0NTgsIDB4RjQ1OCwgMHg1MzIzLA0KLSAgICAweEY0NTksIDB4RjQ1OSwgMHgxRUQwLCAweEY0NUEsIDB4RjQ1QSwgMHg1MzI0LCAweEY0NUIsIDB4RjQ1QiwgMHgyMDk2LA0KLSAgICAweEY0NUMsIDB4RjQ1QywgMHg1MzI1LCAweEY0NUQsIDB4RjQ1RCwgMHgyM0NDLCAweEY0NUUsIDB4RjQ2MSwgMHg1MzI2LA0KLSAgICAweEY0NjIsIDB4RjQ2MiwgMHgyM0M4LCAweEY0NjMsIDB4RjQ2MywgMHg1MzJBLCAweEY0NjQsIDB4RjQ2NCwgMHgyMjNFLA0KLSAgICAweEY0NjUsIDB4RjQ3NCwgMHg1MzJCLCAweEY0NzUsIDB4RjQ3NSwgMHgyNjY1LCAweEY0NzYsIDB4RjQ3QiwgMHg1MzNCLA0KLSAgICAweEY0N0MsIDB4RjQ3QywgMHgyNjY0LCAweEY0N0QsIDB4RjQ3RCwgMHg1MzQxLCAweEY0N0UsIDB4RjQ3RSwgMHgyMjM5LA0KLSAgICAweEY0ODAsIDB4RjQ5MywgMHg1MzQyLCAweEY0OTQsIDB4RjQ5NCwgMHgyMDRBLCAweEY0OTUsIDB4RjQ5OCwgMHg1MzU2LA0KLSAgICAweEY0OTksIDB4RjQ5OSwgMHgyNjFGLCAweEY0OUEsIDB4RjQ5QiwgMHg1MzVBLCAweEY0OUMsIDB4RjQ5QywgMHgyNjFFLA0KLSAgICAweEY0OUQsIDB4RjRBMCwgMHg1MzVDLCAweEY0QTEsIDB4RjRGRSwgMHgxQzlGLCAweEY1NDAsIDB4RjU0NCwgMHg1MzYwLA0KLSAgICAweEY1NDUsIDB4RjU0NSwgMHgyNjIwLCAweEY1NDYsIDB4RjU0NiwgMHg1MzY1LCAweEY1NDcsIDB4RjU0NywgMHgyNjIxLA0KLSAgICAweEY1NDgsIDB4RjU1MSwgMHg1MzY2LCAweEY1NTIsIDB4RjU1MiwgMHgyNjIyLCAweEY1NTMsIDB4RjU1MywgMHg1MzcwLA0KLSAgICAweEY1NTQsIDB4RjU1NCwgMHgyNjI3LCAweEY1NTUsIDB4RjU1NSwgMHgxRTM5LCAweEY1NTYsIDB4RjU1NiwgMHgyNjI1LA0KLSAgICAweEY1NTcsIDB4RjU1RCwgMHg1MzcxLCAweEY1NUUsIDB4RjU1RSwgMHgyNjI5LCAweEY1NUYsIDB4RjU2MCwgMHg1Mzc4LA0KLSAgICAweEY1NjEsIDB4RjU2MSwgMHgyNjJFLCAweEY1NjIsIDB4RjU2MiwgMHgyNjJCLCAweEY1NjMsIDB4RjU2RCwgMHg1MzdBLA0KLSAgICAweEY1NkUsIDB4RjU2RSwgMHgyNjJBLCAweEY1NkYsIDB4RjU2RiwgMHgyNjJELCAweEY1NzAsIDB4RjU3MCwgMHg1Mzg1LA0KLSAgICAweEY1NzEsIDB4RjU3MSwgMHgyNjI4LCAweEY1NzIsIDB4RjU3MiwgMHgyMUI5LCAweEY1NzMsIDB4RjU3RSwgMHg1Mzg2LA0KLSAgICAweEY1ODAsIDB4RjU4NCwgMHg1MzkyLCAweEY1ODUsIDB4RjU4NSwgMHgyNjM2LCAweEY1ODYsIDB4RjU4NiwgMHgyNjMwLA0KLSAgICAweEY1ODcsIDB4RjU4QiwgMHg1Mzk3LCAweEY1OEMsIDB4RjU4QywgMHgyNjM4LCAweEY1OEQsIDB4RjU4RCwgMHg1MzlDLA0KLSAgICAweEY1OEUsIDB4RjU4RSwgMHgyMDBELCAweEY1OEYsIDB4RjU4RiwgMHgyNjM3LCAweEY1OTAsIDB4RjU5OCwgMHg1MzlELA0KLSAgICAweEY1OTksIDB4RjU5OSwgMHgyNjQ1LCAweEY1OUEsIDB4RjU5QSwgMHg1M0E2LCAweEY1OUIsIDB4RjU5QiwgMHgyNjNBLA0KLSAgICAweEY1OUMsIDB4RjU5RiwgMHg1M0E3LCAweEY1QTAsIDB4RjVBMCwgMHgyNjQzLCAweEY1QTEsIDB4RjVGRSwgMHgxQ0ZELA0KLSAgICAweEY2NDAsIDB4RjY0MCwgMHg1M0FCLCAweEY2NDEsIDB4RjY0MSwgMHgyNjQwLCAweEY2NDIsIDB4RjY0NCwgMHg1M0FDLA0KLSAgICAweEY2NDUsIDB4RjY0NSwgMHgyNjNELCAweEY2NDYsIDB4RjY0NiwgMHgyNjQxLCAweEY2NDcsIDB4RjY0NywgMHg1M0FGLA0KLSAgICAweEY2NDgsIDB4RjY0OCwgMHgyNjNFLCAweEY2NDksIDB4RjY0QSwgMHg1M0IwLCAweEY2NEIsIDB4RjY0QiwgMHgyNjNGLA0KLSAgICAweEY2NEMsIDB4RjY0QywgMHgxRkMwLCAweEY2NEQsIDB4RjY0RCwgMHg1M0IyLCAweEY2NEUsIDB4RjY0RiwgMHgyNjNCLA0KLSAgICAweEY2NTAsIDB4RjY1MywgMHg1M0IzLCAweEY2NTQsIDB4RjY1NCwgMHgyNjQyLCAweEY2NTUsIDB4RjY1NywgMHg1M0I3LA0KLSAgICAweEY2NTgsIDB4RjY1OCwgMHgyNjQ0LCAweEY2NTksIDB4RjY2MCwgMHg1M0JBLCAweEY2NjEsIDB4RjY2MSwgMHgyNjM5LA0KLSAgICAweEY2NjIsIDB4RjY2MiwgMHg1M0MyLCAweEY2NjMsIDB4RjY2MywgMHgyNjRDLCAweEY2NjQsIDB4RjY2QiwgMHg1M0MzLA0KLSAgICAweEY2NkMsIDB4RjY2QywgMHgyNjQ3LCAweEY2NkQsIDB4RjY2RCwgMHgyNjRCLCAweEY2NkUsIDB4RjY3MCwgMHg1M0NCLA0KLSAgICAweEY2NzEsIDB4RjY3MSwgMHgyNjQ5LCAweEY2NzIsIDB4RjY3MywgMHg1M0NFLCAweEY2NzQsIDB4RjY3NCwgMHgyNjQ4LA0KLSAgICAweEY2NzUsIDB4RjY3NSwgMHg1M0QwLCAweEY2NzYsIDB4RjY3NiwgMHgyNjRBLCAweEY2NzcsIDB4RjY3NywgMHgyMTA4LA0KLSAgICAweEY2NzgsIDB4RjY3RSwgMHg1M0QxLCAweEY2ODAsIDB4RjY4NCwgMHg1M0Q4LCAweEY2ODUsIDB4RjY4NSwgMHgyNjRELA0KLSAgICAweEY2ODYsIDB4RjY4NywgMHg1M0RELCAweEY2ODgsIDB4RjY4OCwgMHgyNjM0LCAweEY2ODksIDB4RjY4OSwgMHg1M0RGLA0KLSAgICAweEY2OEEsIDB4RjY4QSwgMHgyNjUxLCAweEY2OEIsIDB4RjY4QywgMHg1M0UwLCAweEY2OEQsIDB4RjY4RCwgMHgyNjUwLA0KLSAgICAweEY2OEUsIDB4RjY4RSwgMHgyNjUyLCAweEY2OEYsIDB4RjY5MSwgMHg1M0UyLCAweEY2OTIsIDB4RjY5MiwgMHgyNjRGLA0KLSAgICAweEY2OTMsIDB4RjY5NSwgMHg1M0U1LCAweEY2OTYsIDB4RjY5NiwgMHgyNjMyLCAweEY2OTcsIDB4RjY5NywgMHgyNjRFLA0KLSAgICAweEY2OTgsIDB4RjY5OCwgMHgyNjUzLCAweEY2OTksIDB4RjY5OSwgMHg1M0U4LCAweEY2OUEsIDB4RjY5QSwgMHgyNjU3LA0KLSAgICAweEY2OUIsIDB4RjY5QiwgMHg1M0U5LCAweEY2OUMsIDB4RjY5QywgMHgyNjM1LCAweEY2OUQsIDB4RjY5RCwgMHg1M0VBLA0KLSAgICAweEY2OUUsIDB4RjY5RSwgMHgyNjMzLCAweEY2OUYsIDB4RjY5RiwgMHg1M0VCLCAweEY2QTAsIDB4RjZBMCwgMHgyNjU2LA0KLSAgICAweEY2QTEsIDB4RjZGRSwgMHgxRDVCLCAweEY3NDAsIDB4Rjc0MSwgMHg1M0VDLCAweEY3NDIsIDB4Rjc0MiwgMHgyNjU0LA0KLSAgICAweEY3NDMsIDB4Rjc0OCwgMHg1M0VFLCAweEY3NDksIDB4Rjc0OSwgMHgyNjU4LCAweEY3NEEsIDB4Rjc0QiwgMHg1M0Y0LA0KLSAgICAweEY3NEMsIDB4Rjc0QywgMHgyNjU1LCAweEY3NEQsIDB4Rjc0RCwgMHgxRTRELCAweEY3NEUsIDB4Rjc1NSwgMHg1M0Y2LA0KLSAgICAweEY3NTYsIDB4Rjc1NiwgMHgyNjVCLCAweEY3NTcsIDB4Rjc1NywgMHg1M0ZFLCAweEY3NTgsIDB4Rjc1OCwgMHgyNjVBLA0KLSAgICAweEY3NTksIDB4Rjc1OSwgMHg1M0ZGLCAweEY3NUEsIDB4Rjc1QSwgMHgyNjU5LCAweEY3NUIsIDB4Rjc1QiwgMHgyMDJFLA0KLSAgICAweEY3NUMsIDB4Rjc1QywgMHgyNjJGLCAweEY3NUQsIDB4Rjc2MCwgMHg1NDAwLCAweEY3NjEsIDB4Rjc2MSwgMHgyNjQ2LA0KLSAgICAweEY3NjIsIDB4Rjc2MiwgMHg1NDA0LCAweEY3NjMsIDB4Rjc2MywgMHgyNjI2LCAweEY3NjQsIDB4Rjc2QSwgMHg1NDA1LA0KLSAgICAweEY3NkIsIDB4Rjc2QiwgMHgyNjVDLCAweEY3NkMsIDB4Rjc3MCwgMHg1NDBDLCAweEY3NzEsIDB4Rjc3MSwgMHgyNjJDLA0KLSAgICAweEY3NzIsIDB4Rjc3QiwgMHg1NDExLCAweEY3N0MsIDB4Rjc3QywgMHgyNjIzLCAweEY3N0QsIDB4Rjc3RCwgMHg1NDFCLA0KLSAgICAweEY3N0UsIDB4Rjc3RSwgMHgyNjMxLCAweEY3ODAsIDB4RjdBMCwgMHg1NDFDLCAweEY3QTEsIDB4RjdGRSwgMHgxREI5LA0KLSAgICAweEY4NDAsIDB4Rjg0MSwgMHg1NDNELCAweEY4NDIsIDB4Rjg0MiwgMHgyMDlDLCAweEY4NDMsIDB4Rjg0NSwgMHg1NDNGLA0KLSAgICAweEY4NDYsIDB4Rjg0NiwgMHgyNTgwLCAweEY4NDcsIDB4Rjg0OCwgMHg1NDQyLCAweEY4NDksIDB4Rjg0OSwgMHgyMkRDLA0KLSAgICAweEY4NEEsIDB4Rjg0RiwgMHg1NDQ0LCAweEY4NTAsIDB4Rjg1MCwgMHgxRjA1LCAweEY4NTEsIDB4Rjg1MSwgMHgyMDhCLA0KLSAgICAweEY4NTIsIDB4Rjg1MiwgMHg1NDRBLCAweEY4NTMsIDB4Rjg1MywgMHgyNTgxLCAweEY4NTQsIDB4Rjg2MiwgMHg1NDRCLA0KLSAgICAweEY4NjMsIDB4Rjg2MywgMHgyNTgzLCAweEY4NjQsIDB4Rjg2NCwgMHgyNTgyLCAweEY4NjUsIDB4Rjg2NSwgMHg1NDVBLA0KLSAgICAweEY4NjYsIDB4Rjg2NiwgMHgyMUVFLCAweEY4NjcsIDB4Rjg3MSwgMHg1NDVCLCAweEY4NzIsIDB4Rjg3MiwgMHgyMTgyLA0KLSAgICAweEY4NzMsIDB4Rjg3NywgMHg1NDY2LCAweEY4NzgsIDB4Rjg3OCwgMHgyMjQzLCAweEY4NzksIDB4Rjg3OSwgMHg1NDZCLA0KLSAgICAweEY4N0EsIDB4Rjg3QSwgMHgyNTg3LCAweEY4N0IsIDB4Rjg3QiwgMHg1NDZDLCAweEY4N0MsIDB4Rjg3QywgMHgyNTg4LA0KLSAgICAweEY4N0QsIDB4Rjg3RSwgMHg1NDZELCAweEY4ODAsIDB4Rjg4MCwgMHg1NDZGLCAweEY4ODEsIDB4Rjg4MSwgMHgyNTg0LA0KLSAgICAweEY4ODIsIDB4Rjg4MywgMHg1NDcwLCAweEY4ODQsIDB4Rjg4NCwgMHgyMUZELCAweEY4ODUsIDB4Rjg4NSwgMHg1NDcyLA0KLSAgICAweEY4ODYsIDB4Rjg4NiwgMHgyMUVGLCAweEY4ODcsIDB4Rjg4QywgMHg1NDczLCAweEY4OEQsIDB4Rjg4RCwgMHgyNThBLA0KLSAgICAweEY4OEUsIDB4Rjg4RSwgMHgyNThDLCAweEY4OEYsIDB4Rjg5OCwgMHg1NDc5LCAweEY4OTksIDB4Rjg5OSwgMHgxRjQ3LA0KLSAgICAweEY4OUEsIDB4Rjg5QywgMHg1NDgzLCAweEY4OUQsIDB4Rjg5RCwgMHgxRjFELCAweEY4OUUsIDB4Rjg5RiwgMHg1NDg2LA0KLSAgICAweEY4QTAsIDB4RjhBMCwgMHgyNThELCAweEY5NDAsIDB4Rjk0RCwgMHg1NDg4LCAweEY5NEUsIDB4Rjk0RSwgMHgxRkQwLA0KLSAgICAweEY5NEYsIDB4Rjk0RiwgMHgyNTkyLCAweEY5NTAsIDB4Rjk1MCwgMHgyNThGLCAweEY5NTEsIDB4Rjk1OCwgMHg1NDk2LA0KLSAgICAweEY5NTksIDB4Rjk1OSwgMHgyNTk0LCAweEY5NUEsIDB4Rjk1QSwgMHgxRUUwLCAweEY5NUIsIDB4Rjk1QywgMHg1NDlFLA0KLSAgICAweEY5NUQsIDB4Rjk1RCwgMHgyNTkxLCAweEY5NUUsIDB4Rjk1RSwgMHgyNTk1LCAweEY5NUYsIDB4Rjk2NiwgMHg1NEEwLA0KLSAgICAweEY5NjcsIDB4Rjk2NywgMHgyNTk3LCAweEY5NjgsIDB4Rjk2OCwgMHg1NEE4LCAweEY5NjksIDB4Rjk2OSwgMHgyMEI2LA0KLSAgICAweEY5NkEsIDB4Rjk2QiwgMHg1NEE5LCAweEY5NkMsIDB4Rjk2QywgMHgyNTk4LCAweEY5NkQsIDB4Rjk2RSwgMHg1NEFCLA0KLSAgICAweEY5NkYsIDB4Rjk2RiwgMHgyMEY2LCAweEY5NzAsIDB4Rjk3RSwgMHg1NEFELCAweEY5ODAsIDB4Rjk4NCwgMHg1NEJDLA0KLSAgICAweEY5ODUsIDB4Rjk4NSwgMHgyNTg1LCAweEY5ODYsIDB4Rjk4NiwgMHg1NEMxLCAweEY5ODcsIDB4Rjk4NywgMHgyNTk5LA0KLSAgICAweEY5ODgsIDB4Rjk5MCwgMHg1NEMyLCAweEY5OTEsIDB4Rjk5MSwgMHgyNTk2LCAweEY5OTIsIDB4Rjk5NSwgMHg1NENCLA0KLSAgICAweEY5OTYsIDB4Rjk5NiwgMHgyNTlBLCAweEY5OTcsIDB4Rjk5NywgMHg1NENGLCAweEY5OTgsIDB4Rjk5OCwgMHgyNTlCLA0KLSAgICAweEY5OTksIDB4RjlBMCwgMHg1NEQwLCAweEZBNDAsIDB4RkE0MSwgMHg1NEQ4LCAweEZBNDIsIDB4RkE0MiwgMHgyNTlELA0KLSAgICAweEZBNDMsIDB4RkE0NSwgMHg1NERBLCAweEZBNDYsIDB4RkE0NiwgMHgyNTlFLCAweEZBNDcsIDB4RkE0QiwgMHg1NERELA0KLSAgICAweEZBNEMsIDB4RkE0QywgMHgyMzRDLCAweEZBNEQsIDB4RkE1MCwgMHg1NEUyLCAweEZBNTEsIDB4RkE1MSwgMHgxRjQ0LA0KLSAgICAweEZBNTIsIDB4RkE1NywgMHg1NEU2LCAweEZBNTgsIDB4RkE1OCwgMHgyNjYwLCAweEZBNTksIDB4RkE1OSwgMHgyNUEwLA0KLSAgICAweEZBNUEsIDB4RkE1QywgMHg1NEVDLCAweEZBNUQsIDB4RkE1RCwgMHgyNTlDLCAweEZBNUUsIDB4RkE1RSwgMHg1NEVGLA0KLSAgICAweEZBNUYsIDB4RkE1RiwgMHgyNTlGLCAweEZBNjAsIDB4RkE2MCwgMHg1NEYwLCAweEZBNjEsIDB4RkE2MSwgMHgxRjZDLA0KLSAgICAweEZBNjIsIDB4RkE2RiwgMHg1NEYxLCAweEZBNzAsIDB4RkE3MCwgMHgyNUEyLCAweEZBNzEsIDB4RkE3MywgMHg1NEZGLA0KLSAgICAweEZBNzQsIDB4RkE3NCwgMHgyMEFFLCAweEZBNzUsIDB4RkE3NSwgMHg1NTAyLCAweEZBNzYsIDB4RkE3NiwgMHgyNThCLA0KLSAgICAweEZBNzcsIDB4RkE3NywgMHgyNUEzLCAweEZBNzgsIDB4RkE3RSwgMHg1NTAzLCAweEZBODAsIDB4RkE4MiwgMHg1NTBBLA0KLSAgICAweEZBODMsIDB4RkE4MywgMHgyNTg5LCAweEZBODQsIDB4RkE4NCwgMHgyNUE1LCAweEZBODUsIDB4RkE4QywgMHg1NTBELA0KLSAgICAweEZBOEQsIDB4RkE4RCwgMHgyNUE0LCAweEZBOEUsIDB4RkE4RiwgMHg1NTE1LCAweEZBOTAsIDB4RkE5MCwgMHgyNUE2LA0KLSAgICAweEZBOTEsIDB4RkE5MSwgMHgyNTkzLCAweEZBOTIsIDB4RkE5NSwgMHg1NTE3LCAweEZBOTYsIDB4RkE5NiwgMHgyNUE3LA0KLSAgICAweEZBOTcsIDB4RkE5NywgMHgyMjIyLCAweEZBOTgsIDB4RkE5OCwgMHgyNUE5LCAweEZBOTksIDB4RkFBMCwgMHg1NTFCLA0KLSAgICAweEZCNDAsIDB4RkI0OCwgMHg1NTIzLCAweEZCNDksIDB4RkI0OSwgMHgyNUE4LCAweEZCNEEsIDB4RkI1MSwgMHg1NTJDLA0KLSAgICAweEZCNTIsIDB4RkI1MiwgMHgyNTg2LCAweEZCNTMsIDB4RkI1NiwgMHg1NTM0LCAweEZCNTcsIDB4RkI1NywgMHgyNUExLA0KLSAgICAweEZCNTgsIDB4RkI1OCwgMHgyNUFBLCAweEZCNTksIDB4RkI1OSwgMHg1NTM4LCAweEZCNUEsIDB4RkI1QSwgMHgyNTkwLA0KLSAgICAweEZCNUIsIDB4RkI1QiwgMHgyNThFLCAweEZCNUMsIDB4RkI3NCwgMHg1NTM5LCAweEZCNzUsIDB4RkI3NSwgMHgyNjg4LA0KLSAgICAweEZCNzYsIDB4RkI3OCwgMHg1NTUyLCAweEZCNzksIDB4RkI3OSwgMHgyNjlFLCAweEZCN0EsIDB4RkI3QSwgMHgyNUZCLA0KLSAgICAweEZCN0IsIDB4RkI3QiwgMHg1NTU1LCAweEZCN0MsIDB4RkI3QywgMHgxRjhDLCAweEZCN0QsIDB4RkI3RCwgMHgyMUY0LA0KLSAgICAweEZCN0UsIDB4RkI3RSwgMHg1NTU2LCAweEZCODAsIDB4RkI4RiwgMHg1NTU3LCAweEZCOTAsIDB4RkI5MCwgMHgyMDBGLA0KLSAgICAweEZCOTEsIDB4RkI5QiwgMHg1NTY3LCAweEZCOUMsIDB4RkI5QywgMHgyMDcxLCAweEZCOUQsIDB4RkI5RSwgMHg1NTcyLA0KLSAgICAweEZCOUYsIDB4RkI5RiwgMHgyNUY3LCAweEZCQTAsIDB4RkJBMCwgMHg1NTc0LCAweEZDNDAsIDB4RkM0MywgMHg1NTc1LA0KLSAgICAweEZDNDQsIDB4RkM0NCwgMHgyNjk2LCAweEZDNDUsIDB4RkM0OCwgMHg1NTc5LCAweEZDNDksIDB4RkM0OSwgMHgyNjhGLA0KLSAgICAweEZDNEEsIDB4RkM1OSwgMHg1NTdELCAweEZDNUEsIDB4RkM1QSwgMHgyMkRBLCAweEZDNUIsIDB4RkM2MiwgMHg1NThELA0KLSAgICAweEZDNjMsIDB4RkM2MywgMHgxRUMxLCAweEZDNjQsIDB4RkM2NywgMHg1NTk1LCAweEZDNjgsIDB4RkM2OCwgMHgxRUIzLA0KLSAgICAweEZDNjksIDB4RkM2RSwgMHg1NTk5LCAweEZDNkYsIDB4RkM2RiwgMHgyNjZBLCAweEZDNzAsIDB4RkM3MCwgMHg1NTlGLA0KLSAgICAweEZDNzEsIDB4RkM3MSwgMHgyNjhBLCAweEZDNzIsIDB4RkM3MywgMHg1NUEwLCAweEZDNzQsIDB4RkM3NCwgMHgyNjY5LA0KLSAgICAweEZDNzUsIDB4RkM3NiwgMHg1NUEyLCAweEZDNzcsIDB4RkM3OCwgMHgyNjE4LCAweEZDNzksIDB4RkM3RSwgMHg1NUE0LA0KLSAgICAweEZDODAsIDB4RkM4MiwgMHg1NUFBLCAweEZDODMsIDB4RkM4MywgMHgyNjFBLCAweEZDODQsIDB4RkM4OSwgMHg1NUFELA0KLSAgICAweEZDOEEsIDB4RkM4QSwgMHgyNjczLCAweEZDOEIsIDB4RkNBMCwgMHg1NUIzLCAweEZENDAsIDB4RkQ1MSwgMHg1NUM5LA0KLSAgICAweEZENTIsIDB4RkQ1MiwgMHgyMEM2LCAweEZENTMsIDB4RkQ1MywgMHgyMjZCLCAweEZENTQsIDB4RkQ1NiwgMHg1NURCLA0KLSAgICAweEZENTcsIDB4RkQ1NywgMHgyNEQzLCAweEZENTgsIDB4RkQ1OCwgMHgxRTg2LCAweEZENTksIDB4RkQ1OSwgMHg1NURFLA0KLSAgICAweEZENUEsIDB4RkQ1QSwgMHgyNjBGLCAweEZENUIsIDB4RkQ1RSwgMHg1NURGLCAweEZENUYsIDB4RkQ1RiwgMHgyNjExLA0KLSAgICAweEZENjAsIDB4RkQ2MSwgMHg1NUUzLCAweEZENjIsIDB4RkQ2MiwgMHgyNjEzLCAweEZENjMsIDB4RkQ2NCwgMHg1NUU1LA0KLSAgICAweEZENjUsIDB4RkQ2NSwgMHgyNjEwLCAweEZENjYsIDB4RkQ2NiwgMHgyNjEyLCAweEZENjcsIDB4RkQ2NywgMHgyMDMwLA0KLSAgICAweEZENjgsIDB4RkQ2OCwgMHg1NUU3LCAweEZENjksIDB4RkQ2OSwgMHgyNjcxLCAweEZENkEsIDB4RkQ2QiwgMHg1NUU4LA0KLSAgICAweEZENkMsIDB4RkQ2QywgMHgyNjE0LCAweEZENkQsIDB4RkQ2RiwgMHg1NUVBLCAweEZENzAsIDB4RkQ3MCwgMHgyNjE2LA0KLSAgICAweEZENzEsIDB4RkQ3MSwgMHg1NUVELCAweEZENzIsIDB4RkQ3MiwgMHgyNjE1LCAweEZENzMsIDB4RkQ3NywgMHg1NUVFLA0KLSAgICAweEZENzgsIDB4RkQ3OCwgMHgyMEYyLCAweEZENzksIDB4RkQ3QywgMHg1NUYzLCAweEZEN0QsIDB4RkQ3RCwgMHgyNjE3LA0KLSAgICAweEZEN0UsIDB4RkQ3RSwgMHg1NUY3LCAweEZEODAsIDB4RkQ4NywgMHg1NUY4LCAweEZEODgsIDB4RkQ4OCwgMHgyMDM3LA0KLSAgICAweEZEODksIDB4RkQ4QSwgMHg1NjAwLCAweEZEOEIsIDB4RkQ4QiwgMHgyMEIzLCAweEZEOEMsIDB4RkQ4RSwgMHg1NjAyLA0KLSAgICAweEZEOEYsIDB4RkQ4RiwgMHgxRjIyLCAweEZEOTAsIDB4RkQ5MCwgMHgyNEVELCAweEZEOTEsIDB4RkQ5MywgMHg1NjA1LA0KLSAgICAweEZEOTQsIDB4RkQ5NCwgMHgxRjM0LCAweEZEOTUsIDB4RkQ5QywgMHg1NjA4LCAweEZEOUQsIDB4RkQ5RCwgMHgwQTAyLA0KLSAgICAweEZEOUUsIDB4RkQ5RSwgMHg0MEQzLCAweEZEOUYsIDB4RkQ5RiwgMHgyMDBDLCAweEZEQTAsIDB4RkRBMCwgMHg1MDgzLA0KLSAgICAweEZFNDAsIDB4RkU0MCwgMHgxMjU5LCAweEZFNDEsIDB4RkU3RSwgMHg1NjEwLCAweEZFODAsIDB4RkVBMCwgMHg1NjRFLA0KLX07DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0dCS19FVUNfSF8yWzQwNzEgKiAzXSA9IHsKKyAgICAweDAwMjAsIDB4MDAyMCwgMHgxRTI0LCAweDAwMjEsIDB4MDA3RSwgMHgwMzJFLCAweDgxNDAsIDB4ODE3OCwgMHgyNzU4LAorICAgIDB4ODE3OSwgMHg4MTc5LCAweDIwNTksIDB4ODE3QSwgMHg4MTdFLCAweDI3OTEsIDB4ODE4MCwgMHg4MTg1LCAweDI3OTYsCisgICAgMHg4MTg2LCAweDgxODYsIDB4MjFGMSwgMHg4MTg3LCAweDgxRUMsIDB4Mjc5QywgMHg4MUVELCAweDgxRUQsIDB4MUZGMiwKKyAgICAweDgxRUUsIDB4ODFGNSwgMHgyODAyLCAweDgxRjYsIDB4ODFGNiwgMHgyMDVELCAweDgxRjcsIDB4ODFGRSwgMHgyODBBLAorICAgIDB4ODI0MCwgMHg4MjUyLCAweDI4MTIsIDB4ODI1MywgMHg4MjUzLCAweDI2OUMsIDB4ODI1NCwgMHg4MjYxLCAweDI4MjUsCisgICAgMHg4MjYyLCAweDgyNjIsIDB4MjFCNSwgMHg4MjYzLCAweDgyNzMsIDB4MjgzMywgMHg4Mjc0LCAweDgyNzQsIDB4MjJDQywKKyAgICAweDgyNzUsIDB4ODI3OSwgMHgyODQ0LCAweDgyN0EsIDB4ODI3QSwgMHgyMDE2LCAweDgyN0IsIDB4ODI3QywgMHgyODQ5LAorICAgIDB4ODI3RCwgMHg4MjdELCAweDFFNjIsIDB4ODI3RSwgMHg4MjdFLCAweDI4NEIsIDB4ODI4MCwgMHg4MjgwLCAweDFGMjAsCisgICAgMHg4MjgxLCAweDgyODIsIDB4Mjg0QywgMHg4MjgzLCAweDgyODMsIDB4MjA3RiwgMHg4Mjg0LCAweDgyOEYsIDB4Mjg0RSwKKyAgICAweDgyOTAsIDB4ODI5MCwgMHgyMDVDLCAweDgyOTEsIDB4ODJBNCwgMHgyODVBLCAweDgyQTUsIDB4ODJBNSwgMHgyMTk0LAorICAgIDB4ODJBNiwgMHg4MkM3LCAweDI4NkUsIDB4ODJDOCwgMHg4MkM4LCAweDFFNjUsIDB4ODJDOSwgMHg4MkM5LCAweDIyODEsCisgICAgMHg4MkNBLCAweDgyRTAsIDB4Mjg5MCwgMHg4MkUxLCAweDgyRTEsIDB4MjJDRCwgMHg4MkUyLCAweDgyRTIsIDB4MjhBNywKKyAgICAweDgyRTMsIDB4ODJFMywgMHgyMTBBLCAweDgyRTQsIDB4ODJFNCwgMHgxRTNFLCAweDgyRTUsIDB4ODJFQywgMHgyOEE4LAorICAgIDB4ODJFRCwgMHg4MkVELCAweDI2N0YsIDB4ODJFRSwgMHg4MkYxLCAweDI4QjAsIDB4ODJGMiwgMHg4MkYyLCAweDIyMkUsCisgICAgMHg4MkYzLCAweDgyRjYsIDB4MjhCNCwgMHg4MkY3LCAweDgyRjcsIDB4MUU5NiwgMHg4MkY4LCAweDgyRjgsIDB4MjJDQiwKKyAgICAweDgyRjksIDB4ODJGOSwgMHgyMjZDLCAweDgyRkEsIDB4ODJGQSwgMHgyOEI4LCAweDgyRkIsIDB4ODJGQiwgMHgyMTE3LAorICAgIDB4ODJGQywgMHg4MkZFLCAweDI4QjksIDB4ODM0MCwgMHg4MzQwLCAweDI4QkMsIDB4ODM0MSwgMHg4MzQxLCAweDIwRTgsCisgICAgMHg4MzQyLCAweDgzNDQsIDB4MjhCRCwgMHg4MzQ1LCAweDgzNDUsIDB4MjJENCwgMHg4MzQ2LCAweDgzNDcsIDB4MjhDMCwKKyAgICAweDgzNDgsIDB4ODM0OCwgMHgxRkI5LCAweDgzNDksIDB4ODM0QiwgMHgyOEMyLCAweDgzNEMsIDB4ODM0QywgMHgyMkQ4LAorICAgIDB4ODM0RCwgMHg4MzUyLCAweDI4QzUsIDB4ODM1MywgMHg4MzUzLCAweDIwREYsIDB4ODM1NCwgMHg4MzU2LCAweDI4Q0IsCisgICAgMHg4MzU3LCAweDgzNTcsIDB4MjBDMiwgMHg4MzU4LCAweDgzNUQsIDB4MjhDRSwgMHg4MzVFLCAweDgzNUUsIDB4MjE5NSwKKyAgICAweDgzNUYsIDB4ODM2NCwgMHgyOEQ0LCAweDgzNjUsIDB4ODM2NSwgMHgxRkFDLCAweDgzNjYsIDB4ODM2NiwgMHgyMkQzLAorICAgIDB4ODM2NywgMHg4MzcxLCAweDI4REEsIDB4ODM3MiwgMHg4MzcyLCAweDFGODEsIDB4ODM3MywgMHg4Mzc3LCAweDI4RTUsCisgICAgMHg4Mzc4LCAweDgzNzgsIDB4MjIxMCwgMHg4Mzc5LCAweDgzNzksIDB4MjhFQSwgMHg4MzdBLCAweDgzN0EsIDB4MjJDRiwKKyAgICAweDgzN0IsIDB4ODM3QiwgMHgyOEVCLCAweDgzN0MsIDB4ODM3QywgMHgyMjEzLCAweDgzN0QsIDB4ODM3RCwgMHgyOEVDLAorICAgIDB4ODM3RSwgMHg4MzdFLCAweDFGRTQsIDB4ODM4MCwgMHg4MzgwLCAweDFGOTAsIDB4ODM4MSwgMHg4Mzg1LCAweDI4RUQsCisgICAgMHg4Mzg2LCAweDgzODYsIDB4MjJENiwgMHg4Mzg3LCAweDgzODgsIDB4MjhGMiwgMHg4Mzg5LCAweDgzODksIDB4MjJEMCwKKyAgICAweDgzOEEsIDB4ODM4QSwgMHgyMkNFLCAweDgzOEIsIDB4ODM4QywgMHgyOEY0LCAweDgzOEQsIDB4ODM4RCwgMHgyNjgxLAorICAgIDB4ODM4RSwgMHg4MzkzLCAweDI4RjYsIDB4ODM5NCwgMHg4Mzk0LCAweDFFNzYsIDB4ODM5NSwgMHg4MzlELCAweDI4RkMsCisgICAgMHg4MzlFLCAweDgzOUUsIDB4MjIzMSwgMHg4MzlGLCAweDgzQTUsIDB4MjkwNSwgMHg4M0E2LCAweDgzQTYsIDB4MUU5MywKKyAgICAweDgzQTcsIDB4ODNBQSwgMHgyOTBDLCAweDgzQUIsIDB4ODNBQiwgMHgyMkQyLCAweDgzQUMsIDB4ODNBRCwgMHgyOTEwLAorICAgIDB4ODNBRSwgMHg4M0FFLCAweDIyRDcsIDB4ODNBRiwgMHg4M0FGLCAweDIyRDUsIDB4ODNCMCwgMHg4M0IwLCAweDIyRDEsCisgICAgMHg4M0IxLCAweDgzQjksIDB4MjkxMiwgMHg4M0JBLCAweDgzQkEsIDB4MUVFNSwgMHg4M0JCLCAweDgzQzgsIDB4MjkxQiwKKyAgICAweDgzQzksIDB4ODNDOSwgMHgyMDI1LCAweDgzQ0EsIDB4ODNGNSwgMHgyOTI5LCAweDgzRjYsIDB4ODNGNiwgMHgxRUNGLAorICAgIDB4ODNGNywgMHg4M0ZFLCAweDI5NTUsIDB4ODQ0MCwgMHg4NDRGLCAweDI5NUQsIDB4ODQ1MCwgMHg4NDUwLCAweDFGRDksCisgICAgMHg4NDUxLCAweDg0NzAsIDB4Mjk2RCwgMHg4NDcxLCAweDg0NzEsIDB4MjJDOCwgMHg4NDcyLCAweDg0NzMsIDB4Mjk4RCwKKyAgICAweDg0NzQsIDB4ODQ3NCwgMHgyMjYzLCAweDg0NzUsIDB4ODQ3NiwgMHgyOThGLCAweDg0NzcsIDB4ODQ3NywgMHgyNjgzLAorICAgIDB4ODQ3OCwgMHg4NDdFLCAweDI5OTEsIDB4ODQ4MCwgMHg4NDgxLCAweDI5OTgsIDB4ODQ4MiwgMHg4NDgyLCAweDFGMTcsCisgICAgMHg4NDgzLCAweDg0OEQsIDB4Mjk5QSwgMHg4NDhFLCAweDg0OEUsIDB4MUYyQiwgMHg4NDhGLCAweDg0OTEsIDB4MjlBNSwKKyAgICAweDg0OTIsIDB4ODQ5MiwgMHgyMkNBLCAweDg0OTMsIDB4ODQ5MywgMHgxRTk5LCAweDg0OTQsIDB4ODQ5QywgMHgyOUE4LAorICAgIDB4ODQ5RCwgMHg4NDlELCAweDFGNEYsIDB4ODQ5RSwgMHg4NEEwLCAweDI5QjEsIDB4ODRBMSwgMHg4NEExLCAweDFGQ0YsCisgICAgMHg4NEEyLCAweDg0QTIsIDB4MjAzNiwgMHg4NEEzLCAweDg0QTMsIDB4MUYzQSwgMHg4NEE0LCAweDg0QTQsIDB4MjlCNCwKKyAgICAweDg0QTUsIDB4ODRBNSwgMHgyMkM5LCAweDg0QTYsIDB4ODRBNiwgMHgxRjk5LCAweDg0QTcsIDB4ODRBOCwgMHgyOUI1LAorICAgIDB4ODRBOSwgMHg4NEE5LCAweDFGNzUsIDB4ODRBQSwgMHg4NEM0LCAweDI5QjcsIDB4ODRDNSwgMHg4NEM1LCAweDFGQkUsCisgICAgMHg4NEM2LCAweDg0RDIsIDB4MjlEMiwgMHg4NEQzLCAweDg0RDMsIDB4MUVDRCwgMHg4NEQ0LCAweDg0RDQsIDB4MjlERiwKKyAgICAweDg0RDUsIDB4ODRENSwgMHgyMUE5LCAweDg0RDYsIDB4ODRENiwgMHgyOUUwLCAweDg0RDcsIDB4ODRENywgMHgyMUU2LAorICAgIDB4ODREOCwgMHg4NEQ4LCAweDI5RTEsIDB4ODREOSwgMHg4NEQ5LCAweDIxMjcsIDB4ODREQSwgMHg4NERBLCAweDIwMDMsCisgICAgMHg4NERCLCAweDg0REMsIDB4MjlFMiwgMHg4NERELCAweDg0REQsIDB4MjEzMiwgMHg4NERFLCAweDg0RTksIDB4MjlFNCwKKyAgICAweDg0RUEsIDB4ODRFQSwgMHgyMzIzLCAweDg0RUIsIDB4ODRFRCwgMHgyOUYwLCAweDg0RUUsIDB4ODRFRSwgMHgyMDExLAorICAgIDB4ODRFRiwgMHg4NEYwLCAweDI5RjMsIDB4ODRGMSwgMHg4NEYxLCAweDIwRjUsIDB4ODRGMiwgMHg4NEZFLCAweDI5RjUsCisgICAgMHg4NTQwLCAweDg1NTAsIDB4MkEwMiwgMHg4NTUxLCAweDg1NTEsIDB4MjJDNSwgMHg4NTUyLCAweDg1NTIsIDB4MUY1RSwKKyAgICAweDg1NTMsIDB4ODU1MywgMHgyQTEzLCAweDg1NTQsIDB4ODU1NCwgMHgyMkM2LCAweDg1NTUsIDB4ODU1RCwgMHgyQTE0LAorICAgIDB4ODU1RSwgMHg4NTVFLCAweDIwRUYsIDB4ODU1RiwgMHg4NTY1LCAweDJBMUQsIDB4ODU2NiwgMHg4NTY2LCAweDIxRDAsCisgICAgMHg4NTY3LCAweDg1N0UsIDB4MkEyNCwgMHg4NTgwLCAweDg1ODYsIDB4MkEzQywgMHg4NTg3LCAweDg1ODcsIDB4MjJDMSwKKyAgICAweDg1ODgsIDB4ODU4QSwgMHgyQTQzLCAweDg1OEIsIDB4ODU4QiwgMHgxRTY0LCAweDg1OEMsIDB4ODU5MSwgMHgyQTQ2LAorICAgIDB4ODU5MiwgMHg4NTkyLCAweDIxRjksIDB4ODU5MywgMHg4NTk1LCAweDJBNEMsIDB4ODU5NiwgMHg4NTk2LCAweDIwMTAsCisgICAgMHg4NTk3LCAweDg1OTcsIDB4MkE0RiwgMHg4NTk4LCAweDg1OTgsIDB4MjJDMiwgMHg4NTk5LCAweDg1QTEsIDB4MkE1MCwKKyAgICAweDg1QTIsIDB4ODVBMiwgMHgxRTVBLCAweDg1QTMsIDB4ODVCMSwgMHgyQTU5LCAweDg1QjIsIDB4ODVCMiwgMHgxRUEyLAorICAgIDB4ODVCMywgMHg4NUZFLCAweDJBNjgsIDB4ODY0MCwgMHg4NjQ5LCAweDJBQjQsIDB4ODY0QSwgMHg4NjRBLCAweDIzNkQsCisgICAgMHg4NjRCLCAweDg2NTMsIDB4MkFCRSwgMHg4NjU0LCAweDg2NTQsIDB4MjI0NywgMHg4NjU1LCAweDg2NjcsIDB4MkFDNywKKyAgICAweDg2NjgsIDB4ODY2OCwgMHgyMzZDLCAweDg2NjksIDB4ODY3RSwgMHgyQURBLCAweDg2ODAsIDB4ODY5NSwgMHgyQUYwLAorICAgIDB4ODY5NiwgMHg4Njk2LCAweDIxOUMsIDB4ODY5NywgMHg4Njk4LCAweDJCMDYsIDB4ODY5OSwgMHg4Njk5LCAweDIwQzksCisgICAgMHg4NjlBLCAweDg2QTAsIDB4MkIwOCwgMHg4NkExLCAweDg2QTEsIDB4MjFGMCwgMHg4NkEyLCAweDg2QzksIDB4MkIwRiwKKyAgICAweDg2Q0EsIDB4ODZDQSwgMHgyMTBCLCAweDg2Q0IsIDB4ODZDQiwgMHgyQjM3LCAweDg2Q0MsIDB4ODZDQywgMHgyMERFLAorICAgIDB4ODZDRCwgMHg4NkNELCAweDJCMzgsIDB4ODZDRSwgMHg4NkNFLCAweDFFQUEsIDB4ODZDRiwgMHg4NkQwLCAweDJCMzksCisgICAgMHg4NkQxLCAweDg2RDEsIDB4MjIyQywgMHg4NkQyLCAweDg2REIsIDB4MkIzQiwgMHg4NkRDLCAweDg2REMsIDB4MjBEOCwKKyAgICAweDg2REQsIDB4ODZERCwgMHgyMkMwLCAweDg2REUsIDB4ODZFMCwgMHgyQjQ1LCAweDg2RTEsIDB4ODZFMSwgMHgyMDZGLAorICAgIDB4ODZFMiwgMHg4NkU3LCAweDJCNDgsIDB4ODZFOCwgMHg4NkU4LCAweDIxQTEsIDB4ODZFOSwgMHg4NkVELCAweDJCNEUsCisgICAgMHg4NkVFLCAweDg2RUUsIDB4MjM3OSwgMHg4NkVGLCAweDg2RjMsIDB4MkI1MywgMHg4NkY0LCAweDg2RjQsIDB4MjM3MiwKKyAgICAweDg2RjUsIDB4ODZGRSwgMHgyQjU4LCAweDg3NDAsIDB4ODc0MCwgMHgyMTZBLCAweDg3NDEsIDB4ODc0MywgMHgyQjYyLAorICAgIDB4ODc0NCwgMHg4NzQ0LCAweDIzN0MsIDB4ODc0NSwgMHg4NzQ4LCAweDJCNjUsIDB4ODc0OSwgMHg4NzQ5LCAweDIwQjAsCisgICAgMHg4NzRBLCAweDg3NEEsIDB4MkI2OSwgMHg4NzRCLCAweDg3NEIsIDB4MjM3QSwgMHg4NzRDLCAweDg3NEMsIDB4MUU3NCwKKyAgICAweDg3NEQsIDB4ODc0RSwgMHgyQjZBLCAweDg3NEYsIDB4ODc0RiwgMHgyMzc3LCAweDg3NTAsIDB4ODc1NiwgMHgyQjZDLAorICAgIDB4ODc1NywgMHg4NzU3LCAweDFGNEMsIDB4ODc1OCwgMHg4NzU5LCAweDJCNzMsIDB4ODc1QSwgMHg4NzVBLCAweDIzNzgsCisgICAgMHg4NzVCLCAweDg3NUIsIDB4MjFDRiwgMHg4NzVDLCAweDg3NUMsIDB4MjM2OCwgMHg4NzVELCAweDg3NUQsIDB4MkI3NSwKKyAgICAweDg3NUUsIDB4ODc1RSwgMHgyMzcxLCAweDg3NUYsIDB4ODc1RiwgMHgyQjc2LCAweDg3NjAsIDB4ODc2MCwgMHgyMzY5LAorICAgIDB4ODc2MSwgMHg4NzY1LCAweDJCNzcsIDB4ODc2NiwgMHg4NzY2LCAweDI2NzQsIDB4ODc2NywgMHg4Nzc5LCAweDJCN0MsCisgICAgMHg4NzdBLCAweDg3N0EsIDB4MjM2RiwgMHg4NzdCLCAweDg3N0MsIDB4MkI4RiwgMHg4NzdELCAweDg3N0QsIDB4MjM3MCwKKyAgICAweDg3N0UsIDB4ODc3RSwgMHgyQjkxLCAweDg3ODAsIDB4ODc4MCwgMHgyQjkyLCAweDg3ODEsIDB4ODc4MSwgMHgyMzc2LAorICAgIDB4ODc4MiwgMHg4NzgyLCAweDIzNzMsIDB4ODc4MywgMHg4Nzg1LCAweDJCOTMsIDB4ODc4NiwgMHg4Nzg2LCAweDIzN0YsCisgICAgMHg4Nzg3LCAweDg3ODcsIDB4MkI5NiwgMHg4Nzg4LCAweDg3ODgsIDB4MjM3NCwgMHg4Nzg5LCAweDg3ODksIDB4MkI5NywKKyAgICAweDg3OEEsIDB4ODc4QSwgMHgyMEI1LCAweDg3OEIsIDB4ODc4QywgMHgyQjk4LCAweDg3OEQsIDB4ODc4RCwgMHgxRURCLAorICAgIDB4ODc4RSwgMHg4NzhFLCAweDI2NzIsIDB4ODc4RiwgMHg4NzkyLCAweDJCOUEsIDB4ODc5MywgMHg4NzkzLCAweDIzNkUsCisgICAgMHg4Nzk0LCAweDg3OTcsIDB4MkI5RSwgMHg4Nzk4LCAweDg3OTgsIDB4MjFCNywgMHg4Nzk5LCAweDg3OUMsIDB4MkJBMiwKKyAgICAweDg3OUQsIDB4ODc5RCwgMHgyMzc1LCAweDg3OUUsIDB4ODdBMiwgMHgyQkE2LCAweDg3QTMsIDB4ODdBMywgMHgyMzgyLAorICAgIDB4ODdBNCwgMHg4N0E2LCAweDJCQUIsIDB4ODdBNywgMHg4N0E3LCAweDIwOUUsIDB4ODdBOCwgMHg4N0IyLCAweDJCQUUsCisgICAgMHg4N0IzLCAweDg3QjMsIDB4MjM2QiwgMHg4N0I0LCAweDg3QjQsIDB4MkJCOSwgMHg4N0I1LCAweDg3QjUsIDB4MjAzOSwKKyAgICAweDg3QjYsIDB4ODdCQSwgMHgyQkJBLCAweDg3QkIsIDB4ODdCQiwgMHgyNjlGLCAweDg3QkMsIDB4ODdCRSwgMHgyQkJGLAorICAgIDB4ODdCRiwgMHg4N0JGLCAweDIzN0QsIDB4ODdDMCwgMHg4N0MwLCAweDIxRjUsIDB4ODdDMSwgMHg4N0MxLCAweDJCQzIsCisgICAgMHg4N0MyLCAweDg3QzIsIDB4MjM4MSwgMHg4N0MzLCAweDg3QzksIDB4MkJDMywgMHg4N0NBLCAweDg3Q0EsIDB4MjM3QiwKKyAgICAweDg3Q0IsIDB4ODdDQiwgMHgyMzdFLCAweDg3Q0MsIDB4ODdDQywgMHgyMUNDLCAweDg3Q0QsIDB4ODdDRSwgMHgyQkNBLAorICAgIDB4ODdDRiwgMHg4N0NGLCAweDIyREIsIDB4ODdEMCwgMHg4N0QxLCAweDJCQ0MsIDB4ODdEMiwgMHg4N0QyLCAweDIzNkEsCisgICAgMHg4N0QzLCAweDg3RDMsIDB4MjY4OSwgMHg4N0Q0LCAweDg3RDQsIDB4MkJDRSwgMHg4N0Q1LCAweDg3RDUsIDB4MjY5NywKKyAgICAweDg3RDYsIDB4ODdEOSwgMHgyQkNGLCAweDg3REEsIDB4ODdEQSwgMHgyMkExLCAweDg3REIsIDB4ODdGNiwgMHgyQkQzLAorICAgIDB4ODdGNywgMHg4N0Y3LCAweDIzODMsIDB4ODdGOCwgMHg4N0Y4LCAweDFGM0QsIDB4ODdGOSwgMHg4N0Y5LCAweDJCRUYsCisgICAgMHg4N0ZBLCAweDg3RkEsIDB4MjE4RiwgMHg4N0ZCLCAweDg3RkUsIDB4MkJGMCwgMHg4ODQwLCAweDg4NDAsIDB4MjI0NiwKKyAgICAweDg4NDEsIDB4ODg0MSwgMHgyMjQ4LCAweDg4NDIsIDB4ODg0MywgMHgyQkY0LCAweDg4NDQsIDB4ODg0NCwgMHgyMTdFLAorICAgIDB4ODg0NSwgMHg4ODQ1LCAweDJCRjYsIDB4ODg0NiwgMHg4ODQ2LCAweDIxODAsIDB4ODg0NywgMHg4ODdFLCAweDJCRjcsCisgICAgMHg4ODgwLCAweDg4QjksIDB4MkMyRiwgMHg4OEJBLCAweDg4QkEsIDB4MjMyQSwgMHg4OEJCLCAweDg4Q0IsIDB4MkM2OSwKKyAgICAweDg4Q0MsIDB4ODhDQywgMHgyMjhCLCAweDg4Q0QsIDB4ODhEMywgMHgyQzdBLCAweDg4RDQsIDB4ODhENCwgMHgxRjg1LAorICAgIDB4ODhENSwgMHg4OEQ2LCAweDJDODEsIDB4ODhENywgMHg4OEQ3LCAweDIzMjUsIDB4ODhEOCwgMHg4OERFLCAweDJDODMsCisgICAgMHg4OERGLCAweDg4REYsIDB4MjMyQywgMHg4OEUwLCAweDg4RTQsIDB4MkM4QSwgMHg4OEU1LCAweDg4RTUsIDB4MjMyRSwKKyAgICAweDg4RTYsIDB4ODhGMSwgMHgyQzhGLCAweDg4RjIsIDB4ODhGMiwgMHgyMjA1LCAweDg4RjMsIDB4ODhGMywgMHgxRTM4LAorICAgIDB4ODhGNCwgMHg4OEY1LCAweDJDOUIsIDB4ODhGNiwgMHg4OEY2LCAweDFFNzMsIDB4ODhGNywgMHg4OEZFLCAweDJDOUQsCisgICAgMHg4OTQwLCAweDg5NEEsIDB4MkNBNSwgMHg4OTRCLCAweDg5NEIsIDB4MUZFMywgMHg4OTRDLCAweDg5NEMsIDB4MjMzOSwKKyAgICAweDg5NEQsIDB4ODk0RCwgMHgyQ0IwLCAweDg5NEUsIDB4ODk0RSwgMHgyMzJCLCAweDg5NEYsIDB4ODk0RiwgMHgyQ0IxLAorICAgIDB4ODk1MCwgMHg4OTUwLCAweDIzMkQsIDB4ODk1MSwgMHg4OTUzLCAweDJDQjIsIDB4ODk1NCwgMHg4OTU0LCAweDIxN0YsCisgICAgMHg4OTU1LCAweDg5NUMsIDB4MkNCNSwgMHg4OTVELCAweDg5NUQsIDB4MjFBNywgMHg4OTVFLCAweDg5NUUsIDB4MkNCRCwKKyAgICAweDg5NUYsIDB4ODk1RiwgMHgyMzJGLCAweDg5NjAsIDB4ODk2QywgMHgyQ0JFLCAweDg5NkQsIDB4ODk2RCwgMHgxRTdELAorICAgIDB4ODk2RSwgMHg4OTcwLCAweDJDQ0IsIDB4ODk3MSwgMHg4OTcxLCAweDIwRDYsIDB4ODk3MiwgMHg4OTdCLCAweDJDQ0UsCisgICAgMHg4OTdDLCAweDg5N0MsIDB4MUVDMiwgMHg4OTdELCAweDg5N0UsIDB4MkNEOCwgMHg4OTgwLCAweDg5OEEsIDB4MkNEQSwKKyAgICAweDg5OEIsIDB4ODk4QiwgMHgyMkIyLCAweDg5OEMsIDB4ODk5OCwgMHgyQ0U1LCAweDg5OTksIDB4ODk5OSwgMHgxRURGLAorICAgIDB4ODk5QSwgMHg4OTlELCAweDJDRjIsIDB4ODk5RSwgMHg4OTlFLCAweDFFRjksIDB4ODk5RiwgMHg4OUE1LCAweDJDRjYsCisgICAgMHg4OUE2LCAweDg5QTYsIDB4MjBEOSwgMHg4OUE3LCAweDg5QTcsIDB4MkNGRCwgMHg4OUE4LCAweDg5QTgsIDB4MUZERCwKKyAgICAweDg5QTksIDB4ODlBRSwgMHgyQ0ZFLCAweDg5QUYsIDB4ODlBRiwgMHgyMTY3LCAweDg5QjAsIDB4ODlCOSwgMHgyRDA0LAorICAgIDB4ODlCQSwgMHg4OUJBLCAweDIxRUQsIDB4ODlCQiwgMHg4OUJELCAweDJEMEUsIDB4ODlCRSwgMHg4OUJFLCAweDIwMDcsCisgICAgMHg4OUJGLCAweDg5QkYsIDB4MjMyNiwgMHg4OUMwLCAweDg5QzAsIDB4MjMyOSwgMHg4OUMxLCAweDg5QzMsIDB4MkQxMSwKKyAgICAweDg5QzQsIDB4ODlDNCwgMHgxRjUyLCAweDg5QzUsIDB4ODlDNSwgMHgyMDNCLCAweDg5QzYsIDB4ODlDNiwgMHgyMzI4LAorICAgIDB4ODlDNywgMHg4OUM3LCAweDJEMTQsIDB4ODlDOCwgMHg4OUM4LCAweDIzMjcsIDB4ODlDOSwgMHg4OUNELCAweDJEMTUsCisgICAgMHg4OUNFLCAweDg5Q0UsIDB4MUUyQiwgMHg4OUNGLCAweDg5RDAsIDB4MkQxQSwgMHg4OUQxLCAweDg5RDEsIDB4MjJBRSwKKyAgICAweDg5RDIsIDB4ODlENywgMHgyRDFDLCAweDg5RDgsIDB4ODlEOCwgMHgxRjQ5LCAweDg5RDksIDB4ODlEQSwgMHgyRDIyLAorICAgIDB4ODlEQiwgMHg4OURCLCAweDIxMzgsIDB4ODlEQywgMHg4OUYzLCAweDJEMjQsIDB4ODlGNCwgMHg4OUY0LCAweDIwODEsCisgICAgMHg4OUY1LCAweDg5RkUsIDB4MkQzQywgMHg4QTQwLCAweDhBNDAsIDB4MkQ0NiwgMHg4QTQxLCAweDhBNDEsIDB4MUY3QywKKyAgICAweDhBNDIsIDB4OEE1OCwgMHgyRDQ3LCAweDhBNTksIDB4OEE1OSwgMHgyMzVCLCAweDhBNUEsIDB4OEE1QSwgMHgxRURFLAorICAgIDB4OEE1QiwgMHg4QTVCLCAweDJENUUsIDB4OEE1QywgMHg4QTVDLCAweDFGQTIsIDB4OEE1RCwgMHg4QTVELCAweDJENUYsCisgICAgMHg4QTVFLCAweDhBNUUsIDB4MUVGQSwgMHg4QTVGLCAweDhBNzgsIDB4MkQ2MCwgMHg4QTc5LCAweDhBNzksIDB4MjJBRCwKKyAgICAweDhBN0EsIDB4OEE3RSwgMHgyRDdBLCAweDhBODAsIDB4OEFFMywgMHgyRDdGLCAweDhBRTQsIDB4OEFFNCwgMHgyMDNGLAorICAgIDB4OEFFNSwgMHg4QUZFLCAweDJERTMsIDB4OEI0MCwgMHg4QjQzLCAweDJERkQsIDB4OEI0NCwgMHg4QjQ0LCAweDFGMEUsCisgICAgMHg4QjQ1LCAweDhCNDgsIDB4MkUwMSwgMHg4QjQ5LCAweDhCNDksIDB4MjNGOSwgMHg4QjRBLCAweDhCNzksIDB4MkUwNSwKKyAgICAweDhCN0EsIDB4OEI3QSwgMHgyM0ZDLCAweDhCN0IsIDB4OEI3RSwgMHgyRTM1LCAweDhCODAsIDB4OEI4QiwgMHgyRTM5LAorICAgIDB4OEI4QywgMHg4QjhDLCAweDIwNjksIDB4OEI4RCwgMHg4QjlELCAweDJFNDUsIDB4OEI5RSwgMHg4QjlFLCAweDIzRjcsCisgICAgMHg4QjlGLCAweDhCQjIsIDB4MkU1NiwgMHg4QkIzLCAweDhCQjMsIDB4MjNGNiwgMHg4QkI0LCAweDhCQjgsIDB4MkU2QSwKKyAgICAweDhCQjksIDB4OEJCOSwgMHgyM0ZELCAweDhCQkEsIDB4OEJCRCwgMHgyRTZGLCAweDhCQkUsIDB4OEJCRSwgMHgyM0Y4LAorICAgIDB4OEJCRiwgMHg4QkM1LCAweDJFNzMsIDB4OEJDNiwgMHg4QkM2LCAweDIzRkEsIDB4OEJDNywgMHg4QkM3LCAweDJFN0EsCisgICAgMHg4QkM4LCAweDhCQzgsIDB4MjNGRSwgMHg4QkM5LCAweDhCQzksIDB4MUZBOCwgMHg4QkNBLCAweDhCRDMsIDB4MkU3QiwKKyAgICAweDhCRDQsIDB4OEJENCwgMHgyNDAxLCAweDhCRDUsIDB4OEJEQiwgMHgyRTg1LCAweDhCREMsIDB4OEJEQywgMHgyM0ZGLAorICAgIDB4OEJERCwgMHg4QkU0LCAweDJFOEMsIDB4OEJFNSwgMHg4QkU1LCAweDI0MDAsIDB4OEJFNiwgMHg4QkVBLCAweDJFOTQsCisgICAgMHg4QkVCLCAweDhCRUIsIDB4MjIyMSwgMHg4QkVDLCAweDhCRUYsIDB4MkU5OSwgMHg4QkYwLCAweDhCRjAsIDB4MjEyMiwKKyAgICAweDhCRjEsIDB4OEJGRSwgMHgyRTlELCAweDhDNDAsIDB4OEM0MywgMHgyRUFCLCAweDhDNDQsIDB4OEM0NCwgMHgyM0ZCLAorICAgIDB4OEM0NSwgMHg4QzRFLCAweDJFQUYsIDB4OEM0RiwgMHg4QzRGLCAweDIxNUEsIDB4OEM1MCwgMHg4QzU2LCAweDJFQjksCisgICAgMHg4QzU3LCAweDhDNTcsIDB4MjFFNSwgMHg4QzU4LCAweDhDNUIsIDB4MkVDMCwgMHg4QzVDLCAweDhDNUMsIDB4MjA1NywKKyAgICAweDhDNUQsIDB4OEM3RSwgMHgyRUM0LCAweDhDODAsIDB4OEM4QSwgMHgyRUU2LCAweDhDOEIsIDB4OEM4QiwgMHgyMEU1LAorICAgIDB4OEM4QywgMHg4QzhDLCAweDJFRjEsIDB4OEM4RCwgMHg4QzhELCAweDIxMkYsIDB4OEM4RSwgMHg4QzhFLCAweDIwQTMsCisgICAgMHg4QzhGLCAweDhDOEYsIDB4MjEyMSwgMHg4QzkwLCAweDhDOTAsIDB4MkVGMiwgMHg4QzkxLCAweDhDOTEsIDB4MjFENCwKKyAgICAweDhDOTIsIDB4OEM5MiwgMHgxRkU1LCAweDhDOTMsIDB4OEM5OCwgMHgyRUYzLCAweDhDOTksIDB4OEM5OSwgMHgxRThBLAorICAgIDB4OEM5QSwgMHg4QzlBLCAweDFFMzcsIDB4OEM5QiwgMHg4Q0ExLCAweDJFRjksIDB4OENBMiwgMHg4Q0EyLCAweDFGOUUsCisgICAgMHg4Q0EzLCAweDhDQTMsIDB4MjJBNiwgMHg4Q0E0LCAweDhDQTQsIDB4MjFFOCwgMHg4Q0E1LCAweDhDQTUsIDB4MkYwMCwKKyAgICAweDhDQTYsIDB4OENBNiwgMHgxRURBLCAweDhDQTcsIDB4OENBNywgMHgxRUI5LCAweDhDQTgsIDB4OENCRiwgMHgyRjAxLAorICAgIDB4OENDMCwgMHg4Q0MwLCAweDIzNUMsIDB4OENDMSwgMHg4Q0QxLCAweDJGMTksIDB4OENEMiwgMHg4Q0QyLCAweDIwNTAsCisgICAgMHg4Q0QzLCAweDhDRDMsIDB4MUU2NywgMHg4Q0Q0LCAweDhDRDQsIDB4MkYyQSwgMHg4Q0Q1LCAweDhDRDUsIDB4MjNGNCwKKyAgICAweDhDRDYsIDB4OENEOCwgMHgyRjJCLCAweDhDRDksIDB4OENEOSwgMHgyMTNFLCAweDhDREEsIDB4OENGOCwgMHgyRjJFLAorICAgIDB4OENGOSwgMHg4Q0Y5LCAweDFGMTYsIDB4OENGQSwgMHg4Q0ZFLCAweDJGNEQsIDB4OEQ0MCwgMHg4RDcyLCAweDJGNTIsCisgICAgMHg4RDczLCAweDhENzMsIDB4MjM4OSwgMHg4RDc0LCAweDhENzQsIDB4MkY4NSwgMHg4RDc1LCAweDhENzUsIDB4MUVCNywKKyAgICAweDhENzYsIDB4OEQ3QSwgMHgyRjg2LCAweDhEN0IsIDB4OEQ3QiwgMHgyMUI0LCAweDhEN0MsIDB4OEQ3RSwgMHgyRjhCLAorICAgIDB4OEQ4MCwgMHg4RDg3LCAweDJGOEUsIDB4OEQ4OCwgMHg4RDg4LCAweDIzOEYsIDB4OEQ4OSwgMHg4RDhFLCAweDJGOTYsCisgICAgMHg4RDhGLCAweDhEOEYsIDB4MUYxQSwgMHg4RDkwLCAweDhEOUQsIDB4MkY5QywgMHg4RDlFLCAweDhEOUUsIDB4MjM4QiwKKyAgICAweDhEOUYsIDB4OERCOCwgMHgyRkFBLCAweDhEQjksIDB4OERCOSwgMHgyMzhBLCAweDhEQkEsIDB4OERFMSwgMHgyRkM0LAorICAgIDB4OERFMiwgMHg4REUyLCAweDIzOTEsIDB4OERFMywgMHg4REUzLCAweDJGRUMsIDB4OERFNCwgMHg4REU0LCAweDIyNzEsCisgICAgMHg4REU1LCAweDhERTYsIDB4MkZFRCwgMHg4REU3LCAweDhERTcsIDB4MjM4OCwgMHg4REU4LCAweDhERjYsIDB4MkZFRiwKKyAgICAweDhERjcsIDB4OERGNywgMHgyMzhFLCAweDhERjgsIDB4OERGRCwgMHgyRkZFLCAweDhERkUsIDB4OERGRSwgMHgyMzhELAorICAgIDB4OEU0MCwgMHg4RTQ1LCAweDMwMDQsIDB4OEU0NiwgMHg4RTQ2LCAweDIzOEMsIDB4OEU0NywgMHg4RTU1LCAweDMwMEEsCisgICAgMHg4RTU2LCAweDhFNTYsIDB4MjM5MCwgMHg4RTU3LCAweDhFNTcsIDB4MzAxOSwgMHg4RTU4LCAweDhFNTgsIDB4MjAzMywKKyAgICAweDhFNTksIDB4OEU1OSwgMHgzMDFBLCAweDhFNUEsIDB4OEU1QSwgMHgyMjNDLCAweDhFNUIsIDB4OEU2NywgMHgzMDFCLAorICAgIDB4OEU2OCwgMHg4RTY4LCAweDFGRTksIDB4OEU2OSwgMHg4RTZELCAweDMwMjgsIDB4OEU2RSwgMHg4RTZFLCAweDIwNTUsCisgICAgMHg4RTZGLCAweDhFNkYsIDB4MzAyRCwgMHg4RTcwLCAweDhFNzAsIDB4MjM5MiwgMHg4RTcxLCAweDhFN0UsIDB4MzAyRSwKKyAgICAweDhFODAsIDB4OEU4MCwgMHgyMzI0LCAweDhFODEsIDB4OEU5QSwgMHgzMDNDLCAweDhFOUIsIDB4OEU5QiwgMHgyMTQzLAorICAgIDB4OEU5QywgMHg4RTlFLCAweDMwNTYsIDB4OEU5RiwgMHg4RTlGLCAweDIxMjksIDB4OEVBMCwgMHg4RUEzLCAweDMwNTksCisgICAgMHg4RUE0LCAweDhFQTQsIDB4MjI3NywgMHg4RUE1LCAweDhFQTYsIDB4MzA1RCwgMHg4RUE3LCAweDhFQTcsIDB4MUVBNywKKyAgICAweDhFQTgsIDB4OEVBQiwgMHgzMDVGLCAweDhFQUMsIDB4OEVBQywgMHgyMjg1LCAweDhFQUQsIDB4OEVBRCwgMHgzMDYzLAorICAgIDB4OEVBRSwgMHg4RUFFLCAweDIzODQsIDB4OEVBRiwgMHg4RUJDLCAweDMwNjQsIDB4OEVCRCwgMHg4RUJELCAweDIzODcsCisgICAgMHg4RUJFLCAweDhFQkUsIDB4MjM4NiwgMHg4RUJGLCAweDhFQzIsIDB4MzA3MiwgMHg4RUMzLCAweDhFQzMsIDB4MjI5MCwKKyAgICAweDhFQzQsIDB4OEVDNCwgMHgzMDc2LCAweDhFQzUsIDB4OEVDNSwgMHgxRTQ0LCAweDhFQzYsIDB4OEVDQywgMHgzMDc3LAorICAgIDB4OEVDRCwgMHg4RUNELCAweDFFMzIsIDB4OEVDRSwgMHg4RUNFLCAweDIzODUsIDB4OEVDRiwgMHg4RUQ1LCAweDMwN0UsCisgICAgMHg4RUQ2LCAweDhFRDYsIDB4MUYxMywgMHg4RUQ3LCAweDhFRDcsIDB4MUY3MywgMHg4RUQ4LCAweDhFRUIsIDB4MzA4NSwKKyAgICAweDhFRUMsIDB4OEVFQywgMHgxRkUwLCAweDhFRUQsIDB4OEVGRSwgMHgzMDk5LCAweDhGNDAsIDB4OEY1MSwgMHgzMEFCLAorICAgIDB4OEY1MiwgMHg4RjUyLCAweDIwODcsIDB4OEY1MywgMHg4RjUzLCAweDFFNzgsIDB4OEY1NCwgMHg4RjU0LCAweDIzQUUsCisgICAgMHg4RjU1LCAweDhGNTUsIDB4MUVGNiwgMHg4RjU2LCAweDhGNTYsIDB4MUYzMSwgMHg4RjU3LCAweDhGNUMsIDB4MzBCRCwKKyAgICAweDhGNUQsIDB4OEY1RCwgMHgyMDQ1LCAweDhGNUUsIDB4OEY2MywgMHgzMEMzLCAweDhGNjQsIDB4OEY2NCwgMHgyMTc4LAorICAgIDB4OEY2NSwgMHg4RjdFLCAweDMwQzksIDB4OEY4MCwgMHg4Rjg1LCAweDMwRTMsIDB4OEY4NiwgMHg4Rjg2LCAweDIzRjUsCisgICAgMHg4Rjg3LCAweDhGODcsIDB4MzBFOSwgMHg4Rjg4LCAweDhGODgsIDB4MjI3NSwgMHg4Rjg5LCAweDhGOTQsIDB4MzBFQSwKKyAgICAweDhGOTUsIDB4OEY5NSwgMHgyNjZFLCAweDhGOTYsIDB4OEY5NiwgMHgzMEY2LCAweDhGOTcsIDB4OEY5NywgMHgxRUIwLAorICAgIDB4OEY5OCwgMHg4RjlBLCAweDMwRjcsIDB4OEY5QiwgMHg4RjlCLCAweDIwODMsIDB4OEY5QywgMHg4RjlDLCAweDMwRkEsCisgICAgMHg4RjlELCAweDhGOUQsIDB4MjE4OCwgMHg4RjlFLCAweDhGQTAsIDB4MzBGQiwgMHg4RkExLCAweDhGQTEsIDB4MjY3QywKKyAgICAweDhGQTIsIDB4OEZCQywgMHgzMEZFLCAweDhGQkQsIDB4OEZCRCwgMHgxRkM1LCAweDhGQkUsIDB4OEZDMywgMHgzMTE5LAorICAgIDB4OEZDNCwgMHg4RkM0LCAweDFFQTEsIDB4OEZDNSwgMHg4RkM1LCAweDMxMUYsIDB4OEZDNiwgMHg4RkM2LCAweDIzOTMsCisgICAgMHg4RkM3LCAweDhGQ0MsIDB4MzEyMCwgMHg4RkNELCAweDhGQ0QsIDB4MUYwQiwgMHg4RkNFLCAweDhGRDcsIDB4MzEyNiwKKyAgICAweDhGRDgsIDB4OEZEOCwgMHgxRTdDLCAweDhGRDksIDB4OEZGRSwgMHgzMTMwLCAweDkwNDAsIDB4OTA3RSwgMHgzMTU2LAorICAgIDB4OTA4MCwgMHg5MDlDLCAweDMxOTUsIDB4OTA5RCwgMHg5MDlELCAweDIzQjQsIDB4OTA5RSwgMHg5MDlFLCAweDIwN0UsCisgICAgMHg5MDlGLCAweDkwQjksIDB4MzFCMiwgMHg5MEJBLCAweDkwQkEsIDB4MUVFMywgMHg5MEJCLCAweDkwQkYsIDB4MzFDRCwKKyAgICAweDkwQzAsIDB4OTBDMCwgMHgyMDk1LCAweDkwQzEsIDB4OTBDMSwgMHgyM0JCLCAweDkwQzIsIDB4OTBDNCwgMHgzMUQyLAorICAgIDB4OTBDNSwgMHg5MEM1LCAweDIzQjksIDB4OTBDNiwgMHg5MERBLCAweDMxRDUsIDB4OTBEQiwgMHg5MERCLCAweDFFMjgsCisgICAgMHg5MERDLCAweDkwREMsIDB4MjNCRCwgMHg5MERELCAweDkwRUMsIDB4MzFFQSwgMHg5MEVELCAweDkwRUQsIDB4MjNCNSwKKyAgICAweDkwRUUsIDB4OTBFRiwgMHgzMUZBLCAweDkwRjAsIDB4OTBGMCwgMHgyM0JBLCAweDkwRjEsIDB4OTBGNiwgMHgzMUZDLAorICAgIDB4OTBGNywgMHg5MEY3LCAweDIzQjMsIDB4OTBGOCwgMHg5MEZFLCAweDMyMDIsIDB4OTE0MCwgMHg5MTQxLCAweDMyMDksCisgICAgMHg5MTQyLCAweDkxNDIsIDB4MjE2MiwgMHg5MTQzLCAweDkxNEEsIDB4MzIwQiwgMHg5MTRCLCAweDkxNEIsIDB4MUU1RSwKKyAgICAweDkxNEMsIDB4OTE0QywgMHgzMjEzLCAweDkxNEQsIDB4OTE0RCwgMHgxRTVELCAweDkxNEUsIDB4OTE1MCwgMHgzMjE0LAorICAgIDB4OTE1MSwgMHg5MTUxLCAweDIzQjcsIDB4OTE1MiwgMHg5MTUzLCAweDMyMTcsIDB4OTE1NCwgMHg5MTU0LCAweDFGMkYsCisgICAgMHg5MTU1LCAweDkxNTUsIDB4MjRERiwgMHg5MTU2LCAweDkxNTgsIDB4MzIxOSwgMHg5MTU5LCAweDkxNTksIDB4MjNCMiwKKyAgICAweDkxNUEsIDB4OTE1QSwgMHgyMTRFLCAweDkxNUIsIDB4OTE1QywgMHgzMjFDLCAweDkxNUQsIDB4OTE1RCwgMHgyMDUyLAorICAgIDB4OTE1RSwgMHg5MTYwLCAweDMyMUUsIDB4OTE2MSwgMHg5MTYxLCAweDIzQkMsIDB4OTE2MiwgMHg5MTYyLCAweDMyMjEsCisgICAgMHg5MTYzLCAweDkxNjMsIDB4MjBFQiwgMHg5MTY0LCAweDkxNkQsIDB4MzIyMiwgMHg5MTZFLCAweDkxNkUsIDB4MjIzMiwKKyAgICAweDkxNkYsIDB4OTE3NSwgMHgzMjJDLCAweDkxNzYsIDB4OTE3NiwgMHgxRTNGLCAweDkxNzcsIDB4OTE3OSwgMHgzMjMzLAorICAgIDB4OTE3QSwgMHg5MTdBLCAweDIwMUIsIDB4OTE3QiwgMHg5MTdCLCAweDIwQkMsIDB4OTE3QywgMHg5MTdDLCAweDIzQkUsCisgICAgMHg5MTdELCAweDkxN0UsIDB4MzIzNiwgMHg5MTgwLCAweDkxODMsIDB4MzIzOCwgMHg5MTg0LCAweDkxODQsIDB4MUVBRSwKKyAgICAweDkxODUsIDB4OTE4QywgMHgzMjNDLCAweDkxOEQsIDB4OTE4RCwgMHgxRUZCLCAweDkxOEUsIDB4OTE5MCwgMHgzMjQ0LAorICAgIDB4OTE5MSwgMHg5MTkxLCAweDIwODksIDB4OTE5MiwgMHg5MTkyLCAweDMyNDcsIDB4OTE5MywgMHg5MTkzLCAweDIzQjEsCisgICAgMHg5MTk0LCAweDkxOTYsIDB4MzI0OCwgMHg5MTk3LCAweDkxOTcsIDB4MjFDNCwgMHg5MTk4LCAweDkxOUEsIDB4MzI0QiwKKyAgICAweDkxOUIsIDB4OTE5QiwgMHgyMjE0LCAweDkxOUMsIDB4OTFBOCwgMHgzMjRFLCAweDkxQTksIDB4OTFBOSwgMHgxRkRFLAorICAgIDB4OTFBQSwgMHg5MUFBLCAweDIyMjMsIDB4OTFBQiwgMHg5MUFCLCAweDIzQjYsIDB4OTFBQywgMHg5MUI5LCAweDMyNUIsCisgICAgMHg5MUJBLCAweDkxQkEsIDB4MjY4QywgMHg5MUJCLCAweDkxQkIsIDB4MjRERSwgMHg5MUJDLCAweDkxQkUsIDB4MzI2OSwKKyAgICAweDkxQkYsIDB4OTFCRiwgMHgyNEUwLCAweDkxQzAsIDB4OTFDMiwgMHgzMjZDLCAweDkxQzMsIDB4OTFDMywgMHgyM0I4LAorICAgIDB4OTFDNCwgMHg5MUNDLCAweDMyNkYsIDB4OTFDRCwgMHg5MUNELCAweDFFODEsIDB4OTFDRSwgMHg5MUNGLCAweDMyNzgsCisgICAgMHg5MUQwLCAweDkxRDAsIDB4MUZGRSwgMHg5MUQxLCAweDkxRDEsIDB4MUY1MSwgMHg5MUQyLCAweDkxRDIsIDB4MjFFMSwKKyAgICAweDkxRDMsIDB4OTFEMywgMHgzMjdBLCAweDkxRDQsIDB4OTFENCwgMHgyM0IwLCAweDkxRDUsIDB4OTFENSwgMHgzMjdCLAorICAgIDB4OTFENiwgMHg5MUQ2LCAweDFGQ0UsIDB4OTFENywgMHg5MUQ3LCAweDMyN0MsIDB4OTFEOCwgMHg5MUQ4LCAweDIxMUUsCisgICAgMHg5MUQ5LCAweDkxRDksIDB4MjAyMSwgMHg5MURBLCAweDkxREUsIDB4MzI3RCwgMHg5MURGLCAweDkxREYsIDB4MjRFMSwKKyAgICAweDkxRTAsIDB4OTFFMSwgMHgzMjgyLCAweDkxRTIsIDB4OTFFMiwgMHgyNEEzLCAweDkxRTMsIDB4OTFFOSwgMHgzMjg0LAorICAgIDB4OTFFQSwgMHg5MUVBLCAweDI0QTQsIDB4OTFFQiwgMHg5MUVGLCAweDMyOEIsIDB4OTFGMCwgMHg5MUYwLCAweDIyNzMsCisgICAgMHg5MUYxLCAweDkxRjEsIDB4MzI5MCwgMHg5MUYyLCAweDkxRjIsIDB4MjFCMCwgMHg5MUYzLCAweDkxRkUsIDB4MzI5MSwKKyAgICAweDkyNDAsIDB4OTI3RSwgMHgzMjlELCAweDkyODAsIDB4OTJCNSwgMHgzMkRDLCAweDkyQjYsIDB4OTJCNiwgMHgyMUQxLAorICAgIDB4OTJCNywgMHg5MkNELCAweDMzMTIsIDB4OTJDRSwgMHg5MkNFLCAweDIxMUMsIDB4OTJDRiwgMHg5MkNGLCAweDMzMjksCisgICAgMHg5MkQwLCAweDkyRDAsIDB4MjM1RCwgMHg5MkQxLCAweDkyRDMsIDB4MzMyQSwgMHg5MkQ0LCAweDkyRDQsIDB4MjY4MiwKKyAgICAweDkyRDUsIDB4OTJERSwgMHgzMzJELCAweDkyREYsIDB4OTJERiwgMHgyMTBELCAweDkyRTAsIDB4OTJFMCwgMHgyMDVBLAorICAgIDB4OTJFMSwgMHg5MkZELCAweDMzMzcsIDB4OTJGRSwgMHg5MkZFLCAweDFGOEQsIDB4OTM0MCwgMHg5MzRGLCAweDMzNTQsCisgICAgMHg5MzUwLCAweDkzNTAsIDB4MjFGRiwgMHg5MzUxLCAweDkzNUMsIDB4MzM2NCwgMHg5MzVELCAweDkzNUQsIDB4MUY1OCwKKyAgICAweDkzNUUsIDB4OTM2RiwgMHgzMzcwLCAweDkzNzAsIDB4OTM3MCwgMHgyMTVCLCAweDkzNzEsIDB4OTM3NSwgMHgzMzgyLAorICAgIDB4OTM3NiwgMHg5Mzc2LCAweDFFQjYsIDB4OTM3NywgMHg5MzdFLCAweDMzODcsIDB4OTM4MCwgMHg5MzhCLCAweDMzOEYsCisgICAgMHg5MzhDLCAweDkzOEMsIDB4MjBEQiwgMHg5MzhELCAweDkzOUMsIDB4MzM5QiwgMHg5MzlELCAweDkzOUQsIDB4MjM2MCwKKyAgICAweDkzOUUsIDB4OTNBNCwgMHgzM0FCLCAweDkzQTUsIDB4OTNBNSwgMHgyMzYxLCAweDkzQTYsIDB4OTNBNiwgMHgzM0IyLAorICAgIDB4OTNBNywgMHg5M0E3LCAweDIwNDAsIDB4OTNBOCwgMHg5M0IzLCAweDMzQjMsIDB4OTNCNCwgMHg5M0I0LCAweDIyOEUsCisgICAgMHg5M0I1LCAweDkzQjcsIDB4MzNCRiwgMHg5M0I4LCAweDkzQjgsIDB4MUZERiwgMHg5M0I5LCAweDkzQkEsIDB4MzNDMiwKKyAgICAweDkzQkIsIDB4OTNCQiwgMHgyMzVFLCAweDkzQkMsIDB4OTNCQywgMHgzM0M0LCAweDkzQkQsIDB4OTNCRCwgMHgxRTZBLAorICAgIDB4OTNCRSwgMHg5M0M1LCAweDMzQzUsIDB4OTNDNiwgMHg5M0M2LCAweDIwMDIsIDB4OTNDNywgMHg5M0NFLCAweDMzQ0QsCisgICAgMHg5M0NGLCAweDkzQ0YsIDB4MjA5MywgMHg5M0QwLCAweDkzRDYsIDB4MzNENSwgMHg5M0Q3LCAweDkzRDcsIDB4MjM1RiwKKyAgICAweDkzRDgsIDB4OTNEQSwgMHgzM0RDLCAweDkzREIsIDB4OTNEQiwgMHgxRUFDLCAweDkzREMsIDB4OTNEQywgMHgxRTU0LAorICAgIDB4OTNERCwgMHg5M0UwLCAweDMzREYsIDB4OTNFMSwgMHg5M0UxLCAweDFGMDgsIDB4OTNFMiwgMHg5M0UzLCAweDMzRTMsCisgICAgMHg5M0U0LCAweDkzRTQsIDB4MjBDMCwgMHg5M0U1LCAweDkzRTUsIDB4MjM2MiwgMHg5M0U2LCAweDkzRTgsIDB4MzNFNSwKKyAgICAweDkzRTksIDB4OTNFOSwgMHgyMTYwLCAweDkzRUEsIDB4OTNFQSwgMHgzM0U4LCAweDkzRUIsIDB4OTNFQiwgMHgyMTlELAorICAgIDB4OTNFQywgMHg5M0VDLCAweDFGOEUsIDB4OTNFRCwgMHg5M0VELCAweDIyMkQsIDB4OTNFRSwgMHg5M0VFLCAweDMzRTksCisgICAgMHg5M0VGLCAweDkzRUYsIDB4MjA0NywgMHg5M0YwLCAweDkzRjAsIDB4MzNFQSwgMHg5M0YxLCAweDkzRjEsIDB4MjI2MiwKKyAgICAweDkzRjIsIDB4OTNGMywgMHgzM0VCLCAweDkzRjQsIDB4OTNGNCwgMHgxRjY3LCAweDkzRjUsIDB4OTNGNSwgMHgxRUIyLAorICAgIDB4OTNGNiwgMHg5M0Y5LCAweDMzRUQsIDB4OTNGQSwgMHg5M0ZBLCAweDFFQTksIDB4OTNGQiwgMHg5M0ZELCAweDMzRjEsCisgICAgMHg5M0ZFLCAweDkzRkUsIDB4MUZDQywgMHg5NDQwLCAweDk0NDMsIDB4MzNGNCwgMHg5NDQ0LCAweDk0NDQsIDB4MUY3MiwKKyAgICAweDk0NDUsIDB4OTQ0QywgMHgzM0Y4LCAweDk0NEQsIDB4OTQ0RCwgMHgyMDk4LCAweDk0NEUsIDB4OTQ0RiwgMHgzNDAwLAorICAgIDB4OTQ1MCwgMHg5NDUwLCAweDFFNTIsIDB4OTQ1MSwgMHg5NDUxLCAweDIwQTQsIDB4OTQ1MiwgMHg5NDUyLCAweDFGMUMsCisgICAgMHg5NDUzLCAweDk0NTMsIDB4MjI4RiwgMHg5NDU0LCAweDk0NTQsIDB4MzQwMiwgMHg5NDU1LCAweDk0NTUsIDB4MUZFRCwKKyAgICAweDk0NTYsIDB4OTQ1NywgMHgzNDAzLCAweDk0NTgsIDB4OTQ1OCwgMHgyMzY1LCAweDk0NTksIDB4OTQ1QSwgMHgzNDA1LAorICAgIDB4OTQ1QiwgMHg5NDVCLCAweDFFMkQsIDB4OTQ1QywgMHg5NDVDLCAweDIxNTIsIDB4OTQ1RCwgMHg5NDVELCAweDIzNjYsCisgICAgMHg5NDVFLCAweDk0NUUsIDB4MzQwNywgMHg5NDVGLCAweDk0NUYsIDB4MjBGQSwgMHg5NDYwLCAweDk0NjMsIDB4MzQwOCwKKyAgICAweDk0NjQsIDB4OTQ2NCwgMHgyMzYzLCAweDk0NjUsIDB4OTQ2NSwgMHgzNDBDLCAweDk0NjYsIDB4OTQ2NiwgMHgyMDlBLAorICAgIDB4OTQ2NywgMHg5NDZELCAweDM0MEQsIDB4OTQ2RSwgMHg5NDZFLCAweDIwM0MsIDB4OTQ2RiwgMHg5NDcxLCAweDM0MTQsCisgICAgMHg5NDcyLCAweDk0NzIsIDB4MUZGNiwgMHg5NDczLCAweDk0NzMsIDB4MzQxNywgMHg5NDc0LCAweDk0NzQsIDB4MjM2NCwKKyAgICAweDk0NzUsIDB4OTQ3NSwgMHgzNDE4LCAweDk0NzYsIDB4OTQ3NiwgMHgxRTY5LCAweDk0NzcsIDB4OTQ3NywgMHgzNDE5LAorICAgIDB4OTQ3OCwgMHg5NDc4LCAweDIzNjcsIDB4OTQ3OSwgMHg5NDc5LCAweDM0MUEsIDB4OTQ3QSwgMHg5NDdBLCAweDIxMUQsCisgICAgMHg5NDdCLCAweDk0N0UsIDB4MzQxQiwgMHg5NDgwLCAweDk0ODAsIDB4MjI1OSwgMHg5NDgxLCAweDk0ODEsIDB4MjA1NiwKKyAgICAweDk0ODIsIDB4OTQ4MiwgMHgyMTYzLCAweDk0ODMsIDB4OTQ4NiwgMHgzNDFGLCAweDk0ODcsIDB4OTQ4NywgMHgxRkE5LAorICAgIDB4OTQ4OCwgMHg5NDg4LCAweDFGRkMsIDB4OTQ4OSwgMHg5NEEwLCAweDM0MjMsIDB4OTRBMSwgMHg5NEExLCAweDFFMkUsCisgICAgMHg5NEEyLCAweDk0QjIsIDB4MzQzQiwgMHg5NEIzLCAweDk0QjMsIDB4MUVCQywgMHg5NEI0LCAweDk0QjQsIDB4MzQ0QywKKyAgICAweDk0QjUsIDB4OTRCNSwgMHgyMTQyLCAweDk0QjYsIDB4OTRCRSwgMHgzNDRELCAweDk0QkYsIDB4OTRCRiwgMHgyMDFFLAorICAgIDB4OTRDMCwgMHg5NEMwLCAweDFFNDMsIDB4OTRDMSwgMHg5NENCLCAweDM0NTYsIDB4OTRDQywgMHg5NENDLCAweDI0RDQsCisgICAgMHg5NENELCAweDk0RDcsIDB4MzQ2MSwgMHg5NEQ4LCAweDk0RDgsIDB4MjI2RiwgMHg5NEQ5LCAweDk0REYsIDB4MzQ2QywKKyAgICAweDk0RTAsIDB4OTRFMCwgMHgxRUQ3LCAweDk0RTEsIDB4OTRGRSwgMHgzNDczLCAweDk1NDAsIDB4OTU3MSwgMHgzNDkxLAorICAgIDB4OTU3MiwgMHg5NTcyLCAweDIxMkQsIDB4OTU3MywgMHg5NTdFLCAweDM0QzMsIDB4OTU4MCwgMHg5NTgyLCAweDM0Q0YsCisgICAgMHg5NTgzLCAweDk1ODMsIDB4MjI5QiwgMHg5NTg0LCAweDk1OUQsIDB4MzREMiwgMHg5NTlFLCAweDk1OUUsIDB4MjI1NiwKKyAgICAweDk1OUYsIDB4OTU5RiwgMHgyNEE4LCAweDk1QTAsIDB4OTVCMiwgMHgzNEVDLCAweDk1QjMsIDB4OTVCMywgMHgxRTc5LAorICAgIDB4OTVCNCwgMHg5NUI5LCAweDM0RkYsIDB4OTVCQSwgMHg5NUJBLCAweDIyNUEsIDB4OTVCQiwgMHg5NUNFLCAweDM1MDUsCisgICAgMHg5NUNGLCAweDk1Q0YsIDB4MjRBNywgMHg5NUQwLCAweDk1RDAsIDB4MzUxOSwgMHg5NUQxLCAweDk1RDEsIDB4MjY4NiwKKyAgICAweDk1RDIsIDB4OTVEMiwgMHgyNEE2LCAweDk1RDMsIDB4OTVEMywgMHgzNTFBLCAweDk1RDQsIDB4OTVENCwgMHgyMUNFLAorICAgIDB4OTVENSwgMHg5NUUwLCAweDM1MUIsIDB4OTVFMSwgMHg5NUUxLCAweDI0QTksIDB4OTVFMiwgMHg5NUU2LCAweDM1MjcsCisgICAgMHg5NUU3LCAweDk1RTcsIDB4MUZFNywgMHg5NUU4LCAweDk1RjAsIDB4MzUyQywgMHg5NUYxLCAweDk1RjEsIDB4MjExMiwKKyAgICAweDk1RjIsIDB4OTVGNywgMHgzNTM1LCAweDk1RjgsIDB4OTVGOCwgMHgyMTNDLCAweDk1RjksIDB4OTVGRCwgMHgzNTNCLAorICAgIDB4OTVGRSwgMHg5NUZFLCAweDFGNUMsIDB4OTY0MCwgMHg5NjU1LCAweDM1NDAsIDB4OTY1NiwgMHg5NjU2LCAweDI0QzQsCisgICAgMHg5NjU3LCAweDk2N0IsIDB4MzU1NiwgMHg5NjdDLCAweDk2N0MsIDB4MUVDQywgMHg5NjdELCAweDk2N0UsIDB4MzU3QiwKKyAgICAweDk2ODAsIDB4OTZGRSwgMHgzNTdELCAweDk3NDAsIDB4OTc2NiwgMHgzNUZDLCAweDk3NjcsIDB4OTc2NywgMHgyNDZBLAorICAgIDB4OTc2OCwgMHg5NzZCLCAweDM2MjMsIDB4OTc2QywgMHg5NzZDLCAweDIxNzUsIDB4OTc2RCwgMHg5NzZELCAweDM2MjcsCisgICAgMHg5NzZFLCAweDk3NkUsIDB4MjQ2RCwgMHg5NzZGLCAweDk3N0UsIDB4MzYyOCwgMHg5NzgwLCAweDk3OTUsIDB4MzYzOCwKKyAgICAweDk3OTYsIDB4OTc5NiwgMHgyNDZCLCAweDk3OTcsIDB4OTc5NywgMHgyMjVGLCAweDk3OTgsIDB4OTc5QywgMHgzNjRFLAorICAgIDB4OTc5RCwgMHg5NzlELCAweDFFQ0UsIDB4OTc5RSwgMHg5N0EyLCAweDM2NTMsIDB4OTdBMywgMHg5N0EzLCAweDIyNzIsCisgICAgMHg5N0E0LCAweDk3QkUsIDB4MzY1OCwgMHg5N0JGLCAweDk3QkYsIDB4MjQ3MywgMHg5N0MwLCAweDk3RUQsIDB4MzY3MywKKyAgICAweDk3RUUsIDB4OTdFRSwgMHgyMUZFLCAweDk3RUYsIDB4OTdGNiwgMHgzNkExLCAweDk3RjcsIDB4OTdGNywgMHgxRUZFLAorICAgIDB4OTdGOCwgMHg5N0ZFLCAweDM2QTksIDB4OTg0MCwgMHg5ODQ0LCAweDM2QjAsIDB4OTg0NSwgMHg5ODQ1LCAweDI0NzUsCisgICAgMHg5ODQ2LCAweDk4NDgsIDB4MzZCNSwgMHg5ODQ5LCAweDk4NDksIDB4MjIwQSwgMHg5ODRBLCAweDk4NEUsIDB4MzZCOCwKKyAgICAweDk4NEYsIDB4OTg0RiwgMHgxRjZGLCAweDk4NTAsIDB4OTg3MCwgMHgzNkJELCAweDk4NzEsIDB4OTg3MSwgMHgyNDY4LAorICAgIDB4OTg3MiwgMHg5ODcyLCAweDM2REUsIDB4OTg3MywgMHg5ODczLCAweDIxMDAsIDB4OTg3NCwgMHg5ODdFLCAweDM2REYsCisgICAgMHg5ODgwLCAweDk4ODAsIDB4MzZFQSwgMHg5ODgxLCAweDk4ODEsIDB4MjQ3NiwgMHg5ODgyLCAweDk4OEEsIDB4MzZFQiwKKyAgICAweDk4OEIsIDB4OTg4QiwgMHgxRjI3LCAweDk4OEMsIDB4OTg4QywgMHgyMEQ3LCAweDk4OEQsIDB4OTg5RiwgMHgzNkY0LAorICAgIDB4OThBMCwgMHg5OEEwLCAweDI0N0MsIDB4OThBMSwgMHg5OEE5LCAweDM3MDcsIDB4OThBQSwgMHg5OEFBLCAweDFGQTEsCisgICAgMHg5OEFCLCAweDk4QjUsIDB4MzcxMCwgMHg5OEI2LCAweDk4QjYsIDB4MjJBQSwgMHg5OEI3LCAweDk4QjcsIDB4MjAwNSwKKyAgICAweDk4QjgsIDB4OThCOSwgMHgzNzFCLCAweDk4QkEsIDB4OThCQSwgMHgyNDZDLCAweDk4QkIsIDB4OThDNiwgMHgzNzFELAorICAgIDB4OThDNywgMHg5OEM3LCAweDIwM0UsIDB4OThDOCwgMHg5OENBLCAweDM3MjksIDB4OThDQiwgMHg5OENCLCAweDFFNEMsCisgICAgMHg5OENDLCAweDk4Q0YsIDB4MzcyQywgMHg5OEQwLCAweDk4RDAsIDB4MjEzQSwgMHg5OEQxLCAweDk4RDIsIDB4MzczMCwKKyAgICAweDk4RDMsIDB4OThEMywgMHgyMjA0LCAweDk4RDQsIDB4OThFMiwgMHgzNzMyLCAweDk4RTMsIDB4OThFMywgMHgyMEMzLAorICAgIDB4OThFNCwgMHg5OEU0LCAweDIxNDAsIDB4OThFNSwgMHg5OEU1LCAweDI0NzcsIDB4OThFNiwgMHg5OEVFLCAweDM3NDEsCisgICAgMHg5OEVGLCAweDk4RUYsIDB4MjQ3NCwgMHg5OEYwLCAweDk4RjEsIDB4Mzc0QSwgMHg5OEYyLCAweDk4RjIsIDB4MjBERCwKKyAgICAweDk4RjMsIDB4OThGRSwgMHgzNzRDLCAweDk5NDAsIDB4OTk0MiwgMHgzNzU4LCAweDk5NDMsIDB4OTk0MywgMHgxRjY4LAorICAgIDB4OTk0NCwgMHg5OTQ0LCAweDM3NUIsIDB4OTk0NSwgMHg5OTQ1LCAweDIxODUsIDB4OTk0NiwgMHg5OTY1LCAweDM3NUMsCisgICAgMHg5OTY2LCAweDk5NjYsIDB4MjQ3MiwgMHg5OTY3LCAweDk5NkQsIDB4Mzc3QywgMHg5OTZFLCAweDk5NkUsIDB4MUVCNSwKKyAgICAweDk5NkYsIDB4OTk3NCwgMHgzNzgzLCAweDk5NzUsIDB4OTk3NSwgMHgyNDc4LCAweDk5NzYsIDB4OTk3OSwgMHgzNzg5LAorICAgIDB4OTk3QSwgMHg5OTdBLCAweDFGOEIsIDB4OTk3QiwgMHg5OTdCLCAweDI0ODQsIDB4OTk3QywgMHg5OTdFLCAweDM3OEQsCisgICAgMHg5OTgwLCAweDk5ODQsIDB4Mzc5MCwgMHg5OTg1LCAweDk5ODUsIDB4MjY5OSwgMHg5OTg2LCAweDk5ODgsIDB4Mzc5NSwKKyAgICAweDk5ODksIDB4OTk4OSwgMHgyNDgyLCAweDk5OEEsIDB4OTk4RCwgMHgzNzk4LCAweDk5OEUsIDB4OTk4RSwgMHgyMEExLAorICAgIDB4OTk4RiwgMHg5OTkwLCAweDM3OUMsIDB4OTk5MSwgMHg5OTkxLCAweDFGOTIsIDB4OTk5MiwgMHg5OTk4LCAweDM3OUUsCisgICAgMHg5OTk5LCAweDk5OTksIDB4MUYzOCwgMHg5OTlBLCAweDk5QTgsIDB4MzdBNSwgMHg5OUE5LCAweDk5QTksIDB4MjQ4NSwKKyAgICAweDk5QUEsIDB4OTlBRiwgMHgzN0I0LCAweDk5QjAsIDB4OTlCMCwgMHgyNDgwLCAweDk5QjEsIDB4OTlCMSwgMHgyNDZFLAorICAgIDB4OTlCMiwgMHg5OUIyLCAweDM3QkEsIDB4OTlCMywgMHg5OUIzLCAweDI0N0IsIDB4OTlCNCwgMHg5OUI0LCAweDI0ODYsCisgICAgMHg5OUI1LCAweDk5QjUsIDB4MjQ3MSwgMHg5OUI2LCAweDk5QkMsIDB4MzdCQiwgMHg5OUJELCAweDk5QkQsIDB4MjQ4MywKKyAgICAweDk5QkUsIDB4OTlCRSwgMHgyNDcwLCAweDk5QkYsIDB4OTlCRiwgMHgzN0MyLCAweDk5QzAsIDB4OTlDMCwgMHgyNDY5LAorICAgIDB4OTlDMSwgMHg5OUMxLCAweDM3QzMsIDB4OTlDMiwgMHg5OUMyLCAweDI0N0YsIDB4OTlDMywgMHg5OUM4LCAweDM3QzQsCisgICAgMHg5OUM5LCAweDk5QzksIDB4MjQ2RiwgMHg5OUNBLCAweDk5Q0QsIDB4MzdDQSwgMHg5OUNFLCAweDk5Q0UsIDB4MjQ4MSwKKyAgICAweDk5Q0YsIDB4OTlEMCwgMHgzN0NFLCAweDk5RDEsIDB4OTlEMSwgMHgyMjIwLCAweDk5RDIsIDB4OTlEOSwgMHgzN0QwLAorICAgIDB4OTlEQSwgMHg5OURBLCAweDFGRjUsIDB4OTlEQiwgMHg5OURGLCAweDM3RDgsIDB4OTlFMCwgMHg5OUUwLCAweDIwRjQsCisgICAgMHg5OUUxLCAweDk5RTQsIDB4MzdERCwgMHg5OUU1LCAweDk5RTUsIDB4MjQ3RCwgMHg5OUU2LCAweDk5RTcsIDB4MzdFMSwKKyAgICAweDk5RTgsIDB4OTlFOCwgMHgyNDc5LCAweDk5RTksIDB4OTlFQiwgMHgzN0UzLCAweDk5RUMsIDB4OTlFQywgMHgyNDdFLAorICAgIDB4OTlFRCwgMHg5OUYzLCAweDM3RTYsIDB4OTlGNCwgMHg5OUY0LCAweDI0N0EsIDB4OTlGNSwgMHg5OUZFLCAweDM3RUQsCisgICAgMHg5QTQwLCAweDlBNDksIDB4MzdGNywgMHg5QTRBLCAweDlBNEEsIDB4MjBFMywgMHg5QTRCLCAweDlBNTYsIDB4MzgwMSwKKyAgICAweDlBNTcsIDB4OUE1NywgMHgyMEFELCAweDlBNTgsIDB4OUE2NCwgMHgzODBELCAweDlBNjUsIDB4OUE2NSwgMHgyNENCLAorICAgIDB4OUE2NiwgMHg5QTY2LCAweDM4MUEsIDB4OUE2NywgMHg5QTY3LCAweDFGNTMsIDB4OUE2OCwgMHg5QTcwLCAweDM4MUIsCisgICAgMHg5QTcxLCAweDlBNzEsIDB4MjE1OSwgMHg5QTcyLCAweDlBNzUsIDB4MzgyNCwgMHg5QTc2LCAweDlBNzYsIDB4MjAxMywKKyAgICAweDlBNzcsIDB4OUE3NywgMHgxRjMzLCAweDlBNzgsIDB4OUE3RSwgMHgzODI4LCAweDlBODAsIDB4OUE4NywgMHgzODJGLAorICAgIDB4OUE4OCwgMHg5QTg4LCAweDFFNUMsIDB4OUE4OSwgMHg5QThCLCAweDM4MzcsIDB4OUE4QywgMHg5QThDLCAweDI0ODgsCisgICAgMHg5QThELCAweDlBOTAsIDB4MzgzQSwgMHg5QTkxLCAweDlBOTEsIDB4MjQ4NywgMHg5QTkyLCAweDlBOTYsIDB4MzgzRSwKKyAgICAweDlBOTcsIDB4OUE5NywgMHgyNDhBLCAweDlBOTgsIDB4OUE5OSwgMHgzODQzLCAweDlBOUEsIDB4OUE5QSwgMHgyNDg5LAorICAgIDB4OUE5QiwgMHg5QTlCLCAweDI0OEIsIDB4OUE5QywgMHg5QTlELCAweDM4NDUsIDB4OUE5RSwgMHg5QTlFLCAweDFGODMsCisgICAgMHg5QTlGLCAweDlBQTEsIDB4Mzg0NywgMHg5QUEyLCAweDlBQTIsIDB4MjEwRiwgMHg5QUEzLCAweDlBQTMsIDB4MUZEQiwKKyAgICAweDlBQTQsIDB4OUFBOSwgMHgzODRBLCAweDlBQUEsIDB4OUFBQSwgMHgyMEFGLCAweDlBQUIsIDB4OUFDRiwgMHgzODUwLAorICAgIDB4OUFEMCwgMHg5QUQwLCAweDI0QzAsIDB4OUFEMSwgMHg5QUQ1LCAweDM4NzUsIDB4OUFENiwgMHg5QUQ2LCAweDIyNkQsCisgICAgMHg5QUQ3LCAweDlBRDksIDB4Mzg3QSwgMHg5QURBLCAweDlBREEsIDB4MjRDMSwgMHg5QURCLCAweDlBRTEsIDB4Mzg3RCwKKyAgICAweDlBRTIsIDB4OUFFMiwgMHgyMENBLCAweDlBRTMsIDB4OUFFMywgMHgzODg0LCAweDlBRTQsIDB4OUFFNCwgMHgyMEU3LAorICAgIDB4OUFFNSwgMHg5QUU1LCAweDI0QzIsIDB4OUFFNiwgMHg5QUZFLCAweDM4ODUsIDB4OUI0MCwgMHg5QjdFLCAweDM4OUUsCisgICAgMHg5QjgwLCAweDlCRDAsIDB4MzhERCwgMHg5QkQxLCAweDlCRDEsIDB4MjNEQywgMHg5QkQyLCAweDlCREIsIDB4MzkyRSwKKyAgICAweDlCREMsIDB4OUJEQywgMHgyM0RCLCAweDlCREQsIDB4OUJGRSwgMHgzOTM4LCAweDlDNDAsIDB4OUM1MiwgMHgzOTVBLAorICAgIDB4OUM1MywgMHg5QzUzLCAweDIwNUUsIDB4OUM1NCwgMHg5QzU4LCAweDM5NkQsIDB4OUM1OSwgMHg5QzU5LCAweDIyNDQsCisgICAgMHg5QzVBLCAweDlDNUEsIDB4MjNFMiwgMHg5QzVCLCAweDlDNUIsIDB4Mzk3MiwgMHg5QzVDLCAweDlDNUMsIDB4MjBENCwKKyAgICAweDlDNUQsIDB4OUM3NCwgMHgzOTczLCAweDlDNzUsIDB4OUM3NSwgMHgyMTlGLCAweDlDNzYsIDB4OUM3OCwgMHgzOThCLAorICAgIDB4OUM3OSwgMHg5Qzc5LCAweDFFNjYsIDB4OUM3QSwgMHg5QzdFLCAweDM5OEUsIDB4OUM4MCwgMHg5Qzg1LCAweDM5OTMsCisgICAgMHg5Qzg2LCAweDlDODYsIDB4MUY2MywgMHg5Qzg3LCAweDlDOUMsIDB4Mzk5OSwgMHg5QzlELCAweDlDOUQsIDB4MjNERCwKKyAgICAweDlDOUUsIDB4OUNBQSwgMHgzOUFGLCAweDlDQUIsIDB4OUNBQiwgMHgyMTZCLCAweDlDQUMsIDB4OUNDOSwgMHgzOUJDLAorICAgIDB4OUNDQSwgMHg5Q0NBLCAweDIyQjUsIDB4OUNDQiwgMHg5Q0NFLCAweDM5REEsIDB4OUNDRiwgMHg5Q0NGLCAweDFGMjYsCisgICAgMHg5Q0QwLCAweDlDRTUsIDB4MzlERSwgMHg5Q0U2LCAweDlDRTYsIDB4MUU2MywgMHg5Q0U3LCAweDlDRTcsIDB4MjA4OCwKKyAgICAweDlDRTgsIDB4OUNFQiwgMHgzOUY0LCAweDlDRUMsIDB4OUNFQywgMHgxRUJELCAweDlDRUQsIDB4OUNFRCwgMHgzOUY4LAorICAgIDB4OUNFRSwgMHg5Q0VFLCAweDIzNDEsIDB4OUNFRiwgMHg5Q0ZBLCAweDM5RjksIDB4OUNGQiwgMHg5Q0ZCLCAweDFGNEIsCisgICAgMHg5Q0ZDLCAweDlDRkQsIDB4M0EwNSwgMHg5Q0ZFLCAweDlDRkUsIDB4MjI5MiwgMHg5RDQwLCAweDlENDEsIDB4M0EwNywKKyAgICAweDlENDIsIDB4OUQ0MiwgMHgyMTI0LCAweDlENDMsIDB4OUQ0NSwgMHgzQTA5LCAweDlENDYsIDB4OUQ0NiwgMHgyMDQ4LAorICAgIDB4OUQ0NywgMHg5RDQ3LCAweDIzRTAsIDB4OUQ0OCwgMHg5RDRDLCAweDNBMEMsIDB4OUQ0RCwgMHg5RDRELCAweDIwNzcsCisgICAgMHg5RDRFLCAweDlENEUsIDB4M0ExMSwgMHg5RDRGLCAweDlENEYsIDB4MjIzQSwgMHg5RDUwLCAweDlENjAsIDB4M0ExMiwKKyAgICAweDlENjEsIDB4OUQ2MSwgMHgyMEIxLCAweDlENjIsIDB4OUQ2NywgMHgzQTIzLCAweDlENjgsIDB4OUQ2OCwgMHgxRjQxLAorICAgIDB4OUQ2OSwgMHg5RDY5LCAweDIwMUMsIDB4OUQ2QSwgMHg5RDZELCAweDNBMjksIDB4OUQ2RSwgMHg5RDZFLCAweDIyQjgsCisgICAgMHg5RDZGLCAweDlENzAsIDB4M0EyRCwgMHg5RDcxLCAweDlENzEsIDB4MjI3NiwgMHg5RDcyLCAweDlENzQsIDB4M0EyRiwKKyAgICAweDlENzUsIDB4OUQ3NSwgMHgxRjlCLCAweDlENzYsIDB4OUQ3QSwgMHgzQTMyLCAweDlEN0IsIDB4OUQ3QiwgMHgxRjlGLAorICAgIDB4OUQ3QywgMHg5RDdDLCAweDNBMzcsIDB4OUQ3RCwgMHg5RDdELCAweDI1Q0EsIDB4OUQ3RSwgMHg5RDdFLCAweDNBMzgsCisgICAgMHg5RDgwLCAweDlEODksIDB4M0EzOSwgMHg5RDhBLCAweDlEOEEsIDB4MjBCRSwgMHg5RDhCLCAweDlEOEMsIDB4M0E0MywKKyAgICAweDlEOEQsIDB4OUQ4RCwgMHgxRkI0LCAweDlEOEUsIDB4OUQ5MCwgMHgzQTQ1LCAweDlEOTEsIDB4OUQ5MSwgMHgyM0Q3LAorICAgIDB4OUQ5MiwgMHg5RDk4LCAweDNBNDgsIDB4OUQ5OSwgMHg5RDk5LCAweDIxMDUsIDB4OUQ5QSwgMHg5REEwLCAweDNBNEYsCisgICAgMHg5REExLCAweDlEQTEsIDB4MjNFMSwgMHg5REEyLCAweDlEQTIsIDB4MUZFQywgMHg5REEzLCAweDlEQTYsIDB4M0E1NiwKKyAgICAweDlEQTcsIDB4OURBNywgMHgyM0VBLCAweDlEQTgsIDB4OURBQiwgMHgzQTVBLCAweDlEQUMsIDB4OURBQywgMHgyM0UzLAorICAgIDB4OURBRCwgMHg5REFELCAweDIxMEUsIDB4OURBRSwgMHg5REIxLCAweDNBNUUsIDB4OURCMiwgMHg5REIyLCAweDFGQTYsCisgICAgMHg5REIzLCAweDlEQjMsIDB4MjAwNCwgMHg5REI0LCAweDlEQkQsIDB4M0E2MiwgMHg5REJFLCAweDlEQkUsIDB4MUY5RCwKKyAgICAweDlEQkYsIDB4OURDNSwgMHgzQTZDLCAweDlEQzYsIDB4OURDNiwgMHgyM0U1LCAweDlEQzcsIDB4OURDOCwgMHgzQTczLAorICAgIDB4OURDOSwgMHg5REM5LCAweDIyNjQsIDB4OURDQSwgMHg5RENDLCAweDNBNzUsIDB4OURDRCwgMHg5RENELCAweDI0RTIsCisgICAgMHg5RENFLCAweDlERDEsIDB4M0E3OCwgMHg5REQyLCAweDlERDIsIDB4MjNERSwgMHg5REQzLCAweDlERDQsIDB4M0E3QywKKyAgICAweDlERDUsIDB4OURENSwgMHgxRUM0LCAweDlERDYsIDB4OURFMCwgMHgzQTdFLCAweDlERTEsIDB4OURFMSwgMHgyMkI2LAorICAgIDB4OURFMiwgMHg5REUyLCAweDIwQTksIDB4OURFMywgMHg5REYwLCAweDNBODksIDB4OURGMSwgMHg5REYxLCAweDIxMkIsCisgICAgMHg5REYyLCAweDlERjMsIDB4M0E5NywgMHg5REY0LCAweDlERjQsIDB4MjBBNSwgMHg5REY1LCAweDlERjYsIDB4M0E5OSwKKyAgICAweDlERjcsIDB4OURGNywgMHgyNjhCLCAweDlERjgsIDB4OURGOSwgMHgzQTlCLCAweDlERkEsIDB4OURGQSwgMHgxRjc2LAorICAgIDB4OURGQiwgMHg5REZDLCAweDNBOUQsIDB4OURGRCwgMHg5REZELCAweDIxNkQsIDB4OURGRSwgMHg5REZFLCAweDNBOUYsCisgICAgMHg5RTQwLCAweDlFNDQsIDB4M0FBMCwgMHg5RTQ1LCAweDlFNDUsIDB4MjAwMSwgMHg5RTQ2LCAweDlFNDcsIDB4M0FBNSwKKyAgICAweDlFNDgsIDB4OUU0OCwgMHgyMTkxLCAweDlFNDksIDB4OUU0OSwgMHgxRTUwLCAweDlFNEEsIDB4OUU1MSwgMHgzQUE3LAorICAgIDB4OUU1MiwgMHg5RTUyLCAweDFGOUMsIDB4OUU1MywgMHg5RTUzLCAweDNBQUYsIDB4OUU1NCwgMHg5RTU0LCAweDIzREEsCisgICAgMHg5RTU1LCAweDlFNTUsIDB4M0FCMCwgMHg5RTU2LCAweDlFNTYsIDB4MjA1MywgMHg5RTU3LCAweDlFNUMsIDB4M0FCMSwKKyAgICAweDlFNUQsIDB4OUU1RCwgMHgyM0U5LCAweDlFNUUsIDB4OUU1RSwgMHgyM0U0LCAweDlFNUYsIDB4OUU2MCwgMHgzQUI3LAorICAgIDB4OUU2MSwgMHg5RTYxLCAweDIxRDUsIDB4OUU2MiwgMHg5RTYyLCAweDNBQjksIDB4OUU2MywgMHg5RTYzLCAweDIzRTYsCisgICAgMHg5RTY0LCAweDlFNjYsIDB4M0FCQSwgMHg5RTY3LCAweDlFNjcsIDB4MjNERiwgMHg5RTY4LCAweDlFNkIsIDB4M0FCRCwKKyAgICAweDlFNkMsIDB4OUU2QywgMHgxRTRGLCAweDlFNkQsIDB4OUU2RSwgMHgzQUMxLCAweDlFNkYsIDB4OUU2RiwgMHgyM0Q5LAorICAgIDB4OUU3MCwgMHg5RTcxLCAweDNBQzMsIDB4OUU3MiwgMHg5RTcyLCAweDIwMTQsIDB4OUU3MywgMHg5RTczLCAweDNBQzUsCisgICAgMHg5RTc0LCAweDlFNzQsIDB4MjNFQywgMHg5RTc1LCAweDlFNzUsIDB4MjNFQiwgMHg5RTc2LCAweDlFN0EsIDB4M0FDNiwKKyAgICAweDlFN0IsIDB4OUU3QiwgMHgyM0Q4LCAweDlFN0MsIDB4OUU3QywgMHgyM0VFLCAweDlFN0QsIDB4OUU3RSwgMHgzQUNCLAorICAgIDB4OUU4MCwgMHg5RTg0LCAweDNBQ0QsIDB4OUU4NSwgMHg5RTg1LCAweDI2OEUsIDB4OUU4NiwgMHg5RTg2LCAweDNBRDIsCisgICAgMHg5RTg3LCAweDlFODcsIDB4MjNFRCwgMHg5RTg4LCAweDlFOTAsIDB4M0FEMywgMHg5RTkxLCAweDlFOTEsIDB4MUZGQSwKKyAgICAweDlFOTIsIDB4OUU5NSwgMHgzQURDLCAweDlFOTYsIDB4OUU5NiwgMHgyM0Q2LCAweDlFOTcsIDB4OUU5NywgMHgyM0U4LAorICAgIDB4OUU5OCwgMHg5RUExLCAweDNBRTAsIDB4OUVBMiwgMHg5RUEyLCAweDIxMDYsIDB4OUVBMywgMHg5RUE1LCAweDNBRUEsCisgICAgMHg5RUE2LCAweDlFQTYsIDB4MjAwQiwgMHg5RUE3LCAweDlFQTgsIDB4M0FFRCwgMHg5RUE5LCAweDlFQTksIDB4MjE2NiwKKyAgICAweDlFQUEsIDB4OUVBRCwgMHgzQUVGLCAweDlFQUUsIDB4OUVBRSwgMHgyM0VGLCAweDlFQUYsIDB4OUVCMiwgMHgzQUYzLAorICAgIDB4OUVCMywgMHg5RUIzLCAweDIxODksIDB4OUVCNCwgMHg5RUI0LCAweDIwNTgsIDB4OUVCNSwgMHg5RUI2LCAweDNBRjcsCisgICAgMHg5RUI3LCAweDlFQjcsIDB4MjNFNywgMHg5RUI4LCAweDlFRjQsIDB4M0FGOSwgMHg5RUY1LCAweDlFRjUsIDB4MjFBMywKKyAgICAweDlFRjYsIDB4OUVGRSwgMHgzQjM2LCAweDlGNDAsIDB4OUY0RCwgMHgzQjNGLCAweDlGNEUsIDB4OUY0RSwgMHgyMTdBLAorICAgIDB4OUY0RiwgMHg5RjZFLCAweDNCNEQsIDB4OUY2RiwgMHg5RjZGLCAweDIxQTUsIDB4OUY3MCwgMHg5RjdFLCAweDNCNkQsCisgICAgMHg5RjgwLCAweDlGOTEsIDB4M0I3QywgMHg5RjkyLCAweDlGOTIsIDB4MjAyMiwgMHg5RjkzLCAweDlGOTcsIDB4M0I4RSwKKyAgICAweDlGOTgsIDB4OUY5OCwgMHgyNEQ2LCAweDlGOTksIDB4OUZBNSwgMHgzQjkzLCAweDlGQTYsIDB4OUZBNiwgMHgyMzNBLAorICAgIDB4OUZBNywgMHg5RkE4LCAweDNCQTAsIDB4OUZBOSwgMHg5RkE5LCAweDFFRUUsIDB4OUZBQSwgMHg5RkFCLCAweDNCQTIsCisgICAgMHg5RkFDLCAweDlGQUMsIDB4MjRENSwgMHg5RkFELCAweDlGQzgsIDB4M0JBNCwgMHg5RkM5LCAweDlGQzksIDB4MjIyOCwKKyAgICAweDlGQ0EsIDB4OUZDQywgMHgzQkMwLCAweDlGQ0QsIDB4OUZDRCwgMHgyNEQ3LCAweDlGQ0UsIDB4OUZFMCwgMHgzQkMzLAorICAgIDB4OUZFMSwgMHg5RkUxLCAweDIwRkMsIDB4OUZFMiwgMHg5RkVBLCAweDNCRDYsIDB4OUZFQiwgMHg5RkVCLCAweDFFODcsCisgICAgMHg5RkVDLCAweDlGRUQsIDB4M0JERiwgMHg5RkVFLCAweDlGRUUsIDB4MjREOCwgMHg5RkVGLCAweDlGRjMsIDB4M0JFMSwKKyAgICAweDlGRjQsIDB4OUZGNCwgMHgxRUJBLCAweDlGRjUsIDB4OUZGQywgMHgzQkU2LCAweDlGRkQsIDB4OUZGRCwgMHgyMTE5LAorICAgIDB4OUZGRSwgMHg5RkZFLCAweDNCRUUsIDB4QTA0MCwgMHhBMDQyLCAweDNCRUYsIDB4QTA0MywgMHhBMDQzLCAweDIxNkMsCisgICAgMHhBMDQ0LCAweEEwNDUsIDB4M0JGMiwgMHhBMDQ2LCAweEEwNDYsIDB4MjREOSwgMHhBMDQ3LCAweEEwNDgsIDB4M0JGNCwKKyAgICAweEEwNDksIDB4QTA0OSwgMHgyMjI3LCAweEEwNEEsIDB4QTA0RCwgMHgzQkY2LCAweEEwNEUsIDB4QTA0RSwgMHgxRTVGLAorICAgIDB4QTA0RiwgMHhBMDUzLCAweDNCRkEsIDB4QTA1NCwgMHhBMDU0LCAweDIyOUYsIDB4QTA1NSwgMHhBMDU5LCAweDNCRkYsCisgICAgMHhBMDVBLCAweEEwNUEsIDB4MUY1RCwgMHhBMDVCLCAweEEwNjAsIDB4M0MwNCwgMHhBMDYxLCAweEEwNjEsIDB4MUZCQywKKyAgICAweEEwNjIsIDB4QTA2MiwgMHgzQzBBLCAweEEwNjMsIDB4QTA2MywgMHgyNERBLCAweEEwNjQsIDB4QTA3MCwgMHgzQzBCLAorICAgIDB4QTA3MSwgMHhBMDcxLCAweDIxNDksIDB4QTA3MiwgMHhBMDczLCAweDNDMTgsIDB4QTA3NCwgMHhBMDc0LCAweDIwNDYsCisgICAgMHhBMDc1LCAweEEwN0UsIDB4M0MxQSwgMHhBMDgwLCAweEEwODAsIDB4MjAwMCwgMHhBMDgxLCAweEEwOTAsIDB4M0MyNCwKKyAgICAweEEwOTEsIDB4QTA5MSwgMHgyMTkwLCAweEEwOTIsIDB4QTA5MywgMHgzQzM0LCAweEEwOTQsIDB4QTA5NCwgMHgyMjA4LAorICAgIDB4QTA5NSwgMHhBMDk1LCAweDNDMzYsIDB4QTA5NiwgMHhBMDk2LCAweDFFRTYsIDB4QTA5NywgMHhBMEE4LCAweDNDMzcsCisgICAgMHhBMEE5LCAweEEwQTksIDB4MjRDMywgMHhBMEFBLCAweEEwQkUsIDB4M0M0OSwgMHhBMEJGLCAweEEwQkYsIDB4MjBDQywKKyAgICAweEEwQzAsIDB4QTBDRCwgMHgzQzVFLCAweEEwQ0UsIDB4QTBDRSwgMHgyMzQwLCAweEEwQ0YsIDB4QTBEOCwgMHgzQzZDLAorICAgIDB4QTBEOSwgMHhBMEQ5LCAweDFFRDEsIDB4QTBEQSwgMHhBMERELCAweDNDNzYsIDB4QTBERSwgMHhBMERFLCAweDIxQUMsCisgICAgMHhBMERGLCAweEEwRUQsIDB4M0M3QSwgMHhBMEVFLCAweEEwRUUsIDB4MjJBRiwgMHhBMEVGLCAweEEwRkUsIDB4M0M4OSwKKyAgICAweEExQTEsIDB4QTFGRSwgMHgwMDYwLCAweEEyQTEsIDB4QTJBQSwgMHgyNkE5LCAweEEyQjEsIDB4QTJFMiwgMHgwMEJFLAorICAgIDB4QTJFNSwgMHhBMkVFLCAweDAwRjAsIDB4QTJGMSwgMHhBMkZDLCAweDAwRkEsIDB4QTNBMSwgMHhBM0ZFLCAweDAxMDYsCisgICAgMHhBNEExLCAweEE0RjMsIDB4MDE2NCwgMHhBNUExLCAweEE1RjYsIDB4MDFCNywgMHhBNkExLCAweEE2QjgsIDB4MDIwRCwKKyAgICAweEE2QzEsIDB4QTZGNSwgMHgwMjI1LCAweEE3QTEsIDB4QTdDMSwgMHgwMjVBLCAweEE3RDEsIDB4QTdGMSwgMHgwMjdCLAorICAgIDB4QTg0MCwgMHhBODdFLCAweDI2QjMsIDB4QTg4MCwgMHhBODk1LCAweDI2RjIsIDB4QThBMSwgMHhBOEMwLCAweDAyOUMsCisgICAgMHhBOEM1LCAweEE4RUEsIDB4MDJCQywgMHhBOTQwLCAweEE5NTcsIDB4MjcwOCwgMHhBOTU5LCAweEE5NUEsIDB4MjcyMCwKKyAgICAweEE5NUMsIDB4QTk1QywgMHgyNzIyLCAweEE5NjAsIDB4QTk3RSwgMHgyNzIzLCAweEE5ODAsIDB4QTk5NSwgMHgyNzQyLAorICAgIDB4QTk5NiwgMHhBOTk2LCAweDFFMTcsIDB4QTlBNCwgMHhBOUVGLCAweDAyRTIsIDB4QUE0MCwgMHhBQTRDLCAweDNDOTksCisgICAgMHhBQTRELCAweEFBNEQsIDB4MjFCNiwgMHhBQTRFLCAweEFBNEUsIDB4MUUzRCwgMHhBQTRGLCAweEFBNzAsIDB4M0NBNiwKKyAgICAweEFBNzEsIDB4QUE3MSwgMHgyMjM1LCAweEFBNzIsIDB4QUE3MiwgMHgzQ0M4LCAweEFBNzMsIDB4QUE3MywgMHgyMzk3LAorICAgIDB4QUE3NCwgMHhBQTc2LCAweDNDQzksIDB4QUE3NywgMHhBQTc3LCAweDIzOTUsIDB4QUE3OCwgMHhBQTc5LCAweDNDQ0MsCisgICAgMHhBQTdBLCAweEFBN0EsIDB4MjIzRiwgMHhBQTdCLCAweEFBN0IsIDB4MjEyQSwgMHhBQTdDLCAweEFBN0UsIDB4M0NDRSwKKyAgICAweEFBODAsIDB4QUE5OSwgMHgzQ0QxLCAweEFBOUEsIDB4QUE5QSwgMHgxRUQyLCAweEFBOUIsIDB4QUE5QiwgMHgzQ0VCLAorICAgIDB4QUE5QywgMHhBQTlDLCAweDIzOTYsIDB4QUE5RCwgMHhBQTlELCAweDIzOTgsIDB4QUE5RSwgMHhBQTlFLCAweDNDRUMsCisgICAgMHhBQTlGLCAweEFBOUYsIDB4MjBBMiwgMHhBQUEwLCAweEFBQTAsIDB4M0NFRCwgMHhBQUExLCAweEFBRkUsIDB4MDMyRSwKKyAgICAweEFCNDAsIDB4QUI0MCwgMHgxRjY0LCAweEFCNDEsIDB4QUI0MiwgMHgzQ0VFLCAweEFCNDMsIDB4QUI0MywgMHgyMDJCLAorICAgIDB4QUI0NCwgMHhBQjQ0LCAweDNDRjAsIDB4QUI0NSwgMHhBQjQ1LCAweDIzOTQsIDB4QUI0NiwgMHhBQjQ2LCAweDIxMzksCisgICAgMHhBQjQ3LCAweEFCNDcsIDB4M0NGMSwgMHhBQjQ4LCAweEFCNDgsIDB4MjE1RiwgMHhBQjQ5LCAweEFCNDksIDB4MjFDMSwKKyAgICAweEFCNEEsIDB4QUI0QSwgMHgyMzlBLCAweEFCNEIsIDB4QUI0QywgMHgzQ0YyLCAweEFCNEQsIDB4QUI0RCwgMHgyMzk5LAorICAgIDB4QUI0RSwgMHhBQjdFLCAweDNDRjQsIDB4QUI4MCwgMHhBQkEwLCAweDNEMjUsIDB4QUJBMSwgMHhBQkMwLCAweDAzOEMsCisgICAgMHhBQzQwLCAweEFDNDUsIDB4M0Q0NiwgMHhBQzQ2LCAweEFDNDYsIDB4MjFDMCwgMHhBQzQ3LCAweEFDNzAsIDB4M0Q0QywKKyAgICAweEFDNzEsIDB4QUM3MSwgMHgyNDYwLCAweEFDNzIsIDB4QUM3QiwgMHgzRDc2LCAweEFDN0MsIDB4QUM3QywgMHgyNDVDLAorICAgIDB4QUM3RCwgMHhBQzdFLCAweDNEODAsIDB4QUM4MCwgMHhBQzhDLCAweDNEODIsIDB4QUM4RCwgMHhBQzhELCAweDIxNUQsCisgICAgMHhBQzhFLCAweEFDOTIsIDB4M0Q4RiwgMHhBQzkzLCAweEFDOTMsIDB4MjIyNSwgMHhBQzk0LCAweEFDOTQsIDB4MjA2QSwKKyAgICAweEFDOTUsIDB4QUNBMCwgMHgzRDk0LCAweEFENDAsIDB4QUQ0OCwgMHgzREEwLCAweEFENDksIDB4QUQ0OSwgMHgyNDYxLAorICAgIDB4QUQ0QSwgMHhBRDVELCAweDNEQTksIDB4QUQ1RSwgMHhBRDVFLCAweDI0NUIsIDB4QUQ1RiwgMHhBRDYwLCAweDNEQkQsCisgICAgMHhBRDYxLCAweEFENjEsIDB4MjQ2MiwgMHhBRDYyLCAweEFENjcsIDB4M0RCRiwgMHhBRDY4LCAweEFENjgsIDB4MUY1NCwKKyAgICAweEFENjksIDB4QUQ3MywgMHgzREM1LCAweEFENzQsIDB4QUQ3NCwgMHgyNDVGLCAweEFENzUsIDB4QUQ3RSwgMHgzREQwLAorICAgIDB4QUQ4MCwgMHhBRDgxLCAweDNEREEsIDB4QUQ4MiwgMHhBRDgyLCAweDIwRUMsIDB4QUQ4MywgMHhBRDg2LCAweDNEREMsCisgICAgMHhBRDg3LCAweEFEODcsIDB4MjQ1RCwgMHhBRDg4LCAweEFEOEEsIDB4M0RFMCwgMHhBRDhCLCAweEFEOEIsIDB4MjQ2MywKKyAgICAweEFEOEMsIDB4QUQ5MCwgMHgzREUzLCAweEFEOTEsIDB4QUQ5MSwgMHgyNDY0LCAweEFEOTIsIDB4QURBMCwgMHgzREU4LAorICAgIDB4QUU0MCwgMHhBRTUzLCAweDNERjcsIDB4QUU1NCwgMHhBRTU0LCAweDI0QTUsIDB4QUU1NSwgMHhBRTYxLCAweDNFMEIsCisgICAgMHhBRTYyLCAweEFFNjIsIDB4MUU3MCwgMHhBRTYzLCAweEFFN0UsIDB4M0UxOCwgMHhBRTgwLCAweEFFODAsIDB4MjA4RiwKKyAgICAweEFFODEsIDB4QUU4NCwgMHgzRTM0LCAweEFFODUsIDB4QUU4NSwgMHgxRTQyLCAweEFFODYsIDB4QUU4QSwgMHgzRTM4LAorICAgIDB4QUU4QiwgMHhBRThCLCAweDFGNEUsIDB4QUU4QywgMHhBRTkzLCAweDNFM0QsIDB4QUU5NCwgMHhBRTk0LCAweDFFQjEsCisgICAgMHhBRTk1LCAweEFFOUYsIDB4M0U0NSwgMHhBRUEwLCAweEFFQTAsIDB4MUU4QiwgMHhBRjQwLCAweEFGNjMsIDB4M0U1MCwKKyAgICAweEFGNjQsIDB4QUY2NCwgMHgxRkM2LCAweEFGNjUsIDB4QUY3QSwgMHgzRTc0LCAweEFGN0IsIDB4QUY3QiwgMHgyNUFFLAorICAgIDB4QUY3QywgMHhBRjdFLCAweDNFOEEsIDB4QUY4MCwgMHhBRjgxLCAweDNFOEQsIDB4QUY4MiwgMHhBRjgyLCAweDFGMDEsCisgICAgMHhBRjgzLCAweEFGODMsIDB4MjIwMCwgMHhBRjg0LCAweEFGOEQsIDB4M0U4RiwgMHhBRjhFLCAweEFGOEUsIDB4MjVCMiwKKyAgICAweEFGOEYsIDB4QUY4RiwgMHgxRTk3LCAweEFGOTAsIDB4QUY5MCwgMHgzRTk5LCAweEFGOTEsIDB4QUY5MSwgMHgyMEFCLAorICAgIDB4QUY5MiwgMHhBRjlCLCAweDNFOUEsIDB4QUY5QywgMHhBRjlDLCAweDI1QjMsIDB4QUY5RCwgMHhBRjlFLCAweDNFQTQsCisgICAgMHhBRjlGLCAweEFGOUYsIDB4MjAyOCwgMHhBRkEwLCAweEFGQTAsIDB4M0VBNiwgMHhCMDQwLCAweEIwNDAsIDB4M0VBNywKKyAgICAweEIwNDEsIDB4QjA0MiwgMHgyNUFGLCAweEIwNDMsIDB4QjA0MywgMHgzRUE4LCAweEIwNDQsIDB4QjA0NCwgMHgyNUIxLAorICAgIDB4QjA0NSwgMHhCMDRFLCAweDNFQTksIDB4QjA0RiwgMHhCMDRGLCAweDI1QUMsIDB4QjA1MCwgMHhCMDUzLCAweDNFQjMsCisgICAgMHhCMDU0LCAweEIwNTQsIDB4MUU0RSwgMHhCMDU1LCAweEIwNTYsIDB4M0VCNywgMHhCMDU3LCAweEIwNTcsIDB4MjIwMiwKKyAgICAweEIwNTgsIDB4QjA1OCwgMHgyNUFCLCAweEIwNTksIDB4QjA1OSwgMHgyMjg2LCAweEIwNUEsIDB4QjA1QSwgMHgzRUI5LAorICAgIDB4QjA1QiwgMHhCMDVCLCAweDI1QUQsIDB4QjA1QywgMHhCMDVDLCAweDNFQkEsIDB4QjA1RCwgMHhCMDVELCAweDI1QjYsCisgICAgMHhCMDVFLCAweEIwNUUsIDB4M0VCQiwgMHhCMDVGLCAweEIwNUYsIDB4MjFFMywgMHhCMDYwLCAweEIwNjEsIDB4MjVCNCwKKyAgICAweEIwNjIsIDB4QjA2MiwgMHgyMjJGLCAweEIwNjMsIDB4QjA2MywgMHgyMTY1LCAweEIwNjQsIDB4QjA2NCwgMHgyNUI3LAorICAgIDB4QjA2NSwgMHhCMDZCLCAweDNFQkMsIDB4QjA2QywgMHhCMDZDLCAweDFFRTksIDB4QjA2RCwgMHhCMDdDLCAweDNFQzMsCisgICAgMHhCMDdELCAweEIwN0QsIDB4MUUyNSwgMHhCMDdFLCAweEIwN0UsIDB4M0VEMywgMHhCMDgwLCAweEIwOTYsIDB4M0VENCwKKyAgICAweEIwOTcsIDB4QjA5NywgMHgyNUMwLCAweEIwOTgsIDB4QjA5OCwgMHgzRUVCLCAweEIwOTksIDB4QjA5OSwgMHgyMjlBLAorICAgIDB4QjA5QSwgMHhCMEEwLCAweDNFRUMsIDB4QjBBMSwgMHhCMEZFLCAweDAzQUMsIDB4QjE0MCwgMHhCMTRBLCAweDNFRjMsCisgICAgMHhCMTRCLCAweEIxNEIsIDB4MjI2RSwgMHhCMTRDLCAweEIxNEMsIDB4M0VGRSwgMHhCMTRELCAweEIxNEQsIDB4MUZCRCwKKyAgICAweEIxNEUsIDB4QjE0RSwgMHgzRUZGLCAweEIxNEYsIDB4QjE0RiwgMHgxRjg0LCAweEIxNTAsIDB4QjE1MCwgMHgyMEIyLAorICAgIDB4QjE1MSwgMHhCMTUxLCAweDNGMDAsIDB4QjE1MiwgMHhCMTUyLCAweDIwNDMsIDB4QjE1MywgMHhCMTdFLCAweDNGMDEsCisgICAgMHhCMTgwLCAweEIxOTYsIDB4M0YyRCwgMHhCMTk3LCAweEIxOTcsIDB4MjY4NCwgMHhCMTk4LCAweEIxQTAsIDB4M0Y0NCwKKyAgICAweEIxQTEsIDB4QjFGRSwgMHgwNDBBLCAweEIyNDAsIDB4QjI0MCwgMHgzRjRELCAweEIyNDEsIDB4QjI0MSwgMHgyNEVGLAorICAgIDB4QjI0MiwgMHhCMjY2LCAweDNGNEUsIDB4QjI2NywgMHhCMjY3LCAweDI0RUUsIDB4QjI2OCwgMHhCMjZDLCAweDNGNzMsCisgICAgMHhCMjZELCAweEIyNkQsIDB4MjA3NCwgMHhCMjZFLCAweEIyNzMsIDB4M0Y3OCwgMHhCMjc0LCAweEIyNzQsIDB4MjY4NywKKyAgICAweEIyNzUsIDB4QjI3RSwgMHgzRjdFLCAweEIyODAsIDB4QjI4MCwgMHgyNEYwLCAweEIyODEsIDB4QjI4OCwgMHgzRjg4LAorICAgIDB4QjI4OSwgMHhCMjg5LCAweDI2OEQsIDB4QjI4QSwgMHhCMjk5LCAweDNGOTAsIDB4QjI5QSwgMHhCMjlBLCAweDIyQTAsCisgICAgMHhCMjlCLCAweEIyQTAsIDB4M0ZBMCwgMHhCMkExLCAweEIyRkUsIDB4MDQ2OCwgMHhCMzQwLCAweEIzNDIsIDB4M0ZBNiwKKyAgICAweEIzNDMsIDB4QjM0MywgMHgxRkFCLCAweEIzNDQsIDB4QjM2RiwgMHgzRkE5LCAweEIzNzAsIDB4QjM3MCwgMHgyNkE4LAorICAgIDB4QjM3MSwgMHhCMzdFLCAweDNGRDUsIDB4QjM4MCwgMHhCMzg3LCAweDNGRTMsIDB4QjM4OCwgMHhCMzg4LCAweDI0RTksCisgICAgMHhCMzg5LCAweEIzOEIsIDB4M0ZFQiwgMHhCMzhDLCAweEIzOEMsIDB4MjRFNSwgMHhCMzhELCAweEIzOEQsIDB4M0ZFRSwKKyAgICAweEIzOEUsIDB4QjM4RSwgMHgyMUZBLCAweEIzOEYsIDB4QjNBMCwgMHgzRkVGLCAweEIzQTEsIDB4QjNGRSwgMHgwNEM2LAorICAgIDB4QjQ0MCwgMHhCNDUzLCAweDQwMDEsIDB4QjQ1NCwgMHhCNDU0LCAweDIxNDgsIDB4QjQ1NSwgMHhCNDU3LCAweDQwMTUsCisgICAgMHhCNDU4LCAweEI0NTgsIDB4MjRFNCwgMHhCNDU5LCAweEI0NUQsIDB4NDAxOCwgMHhCNDVFLCAweEI0NUUsIDB4MjRFNiwKKyAgICAweEI0NUYsIDB4QjQ1RiwgMHgyMEY3LCAweEI0NjAsIDB4QjQ2MCwgMHg0MDFELCAweEI0NjEsIDB4QjQ2MSwgMHgyMDZCLAorICAgIDB4QjQ2MiwgMHhCNDc0LCAweDQwMUUsIDB4QjQ3NSwgMHhCNDc1LCAweDIyQTcsIDB4QjQ3NiwgMHhCNDdELCAweDQwMzEsCisgICAgMHhCNDdFLCAweEI0N0UsIDB4MjRFQywgMHhCNDgwLCAweEI0ODIsIDB4NDAzOSwgMHhCNDgzLCAweEI0ODMsIDB4MjRFQiwKKyAgICAweEI0ODQsIDB4QjQ4OCwgMHg0MDNDLCAweEI0ODksIDB4QjQ4OSwgMHgyNEUzLCAweEI0OEEsIDB4QjQ5MiwgMHg0MDQxLAorICAgIDB4QjQ5MywgMHhCNDkzLCAweDI0RUEsIDB4QjQ5NCwgMHhCNEEwLCAweDQwNEEsIDB4QjRBMSwgMHhCNEZFLCAweDA1MjQsCisgICAgMHhCNTQwLCAweEI1NDAsIDB4NDA1NywgMHhCNTQxLCAweEI1NDEsIDB4MUU5MiwgMHhCNTQyLCAweEI1NEEsIDB4NDA1OCwKKyAgICAweEI1NEIsIDB4QjU0QiwgMHgxRTI3LCAweEI1NEMsIDB4QjU1NSwgMHg0MDYxLCAweEI1NTYsIDB4QjU1NiwgMHgxRkU2LAorICAgIDB4QjU1NywgMHhCNTU5LCAweDQwNkIsIDB4QjU1QSwgMHhCNTVBLCAweDI0RTcsIDB4QjU1QiwgMHhCNTVCLCAweDIwMTIsCisgICAgMHhCNTVDLCAweEI1NUMsIDB4MUVFQywgMHhCNTVELCAweEI1NjAsIDB4NDA2RSwgMHhCNTYxLCAweEI1NjEsIDB4MjRFOCwKKyAgICAweEI1NjIsIDB4QjU3RSwgMHg0MDcyLCAweEI1ODAsIDB4QjU5QiwgMHg0MDhGLCAweEI1OUMsIDB4QjU5QywgMHgxRjY2LAorICAgIDB4QjU5RCwgMHhCNTlELCAweDI0REMsIDB4QjU5RSwgMHhCNUEwLCAweDQwQUIsIDB4QjVBMSwgMHhCNUZFLCAweDA1ODIsCisgICAgMHhCNjQwLCAweEI2NTEsIDB4NDBBRSwgMHhCNjUyLCAweEI2NTIsIDB4MjZBMiwgMHhCNjUzLCAweEI2NTQsIDB4NDBDMCwKKyAgICAweEI2NTUsIDB4QjY1NSwgMHgyNERELCAweEI2NTYsIDB4QjY1OCwgMHg0MEMyLCAweEI2NTksIDB4QjY1OSwgMHgyMDBFLAorICAgIDB4QjY1QSwgMHhCNjVBLCAweDQwQzUsIDB4QjY1QiwgMHhCNjVCLCAweDI0REIsIDB4QjY1QywgMHhCNjVDLCAweDFFQjgsCisgICAgMHhCNjVELCAweEI2N0UsIDB4NDBDNiwgMHhCNjgwLCAweEI2QTAsIDB4NDBFOCwgMHhCNkExLCAweEI2RkUsIDB4MDVFMCwKKyAgICAweEI3NDAsIDB4Qjc0RCwgMHg0MTA5LCAweEI3NEUsIDB4Qjc0RSwgMHgyMjk1LCAweEI3NEYsIDB4Qjc1MCwgMHg0MTE3LAorICAgIDB4Qjc1MSwgMHhCNzUxLCAweDFFODAsIDB4Qjc1MiwgMHhCNzU4LCAweDQxMTksIDB4Qjc1OSwgMHhCNzU5LCAweDI2NzcsCisgICAgMHhCNzVBLCAweEI3NjMsIDB4NDEyMCwgMHhCNzY0LCAweEI3NjQsIDB4MjYyNCwgMHhCNzY1LCAweEI3NjUsIDB4MUY2OSwKKyAgICAweEI3NjYsIDB4Qjc2NiwgMHgyMjJCLCAweEI3NjcsIDB4Qjc3NiwgMHg0MTJBLCAweEI3NzcsIDB4Qjc3NywgMHgyNTdGLAorICAgIDB4Qjc3OCwgMHhCNzc4LCAweDFGNUIsIDB4Qjc3OSwgMHhCNzdFLCAweDQxM0EsIDB4Qjc4MCwgMHhCNzgwLCAweDIxOUIsCisgICAgMHhCNzgxLCAweEI3ODEsIDB4NDE0MCwgMHhCNzgyLCAweEI3ODIsIDB4MjY3RCwgMHhCNzgzLCAweEI3QTAsIDB4NDE0MSwKKyAgICAweEI3QTEsIDB4QjdGRSwgMHgwNjNFLCAweEI4NDAsIDB4Qjg0MiwgMHg0MTVGLCAweEI4NDMsIDB4Qjg0MywgMHgyMUEwLAorICAgIDB4Qjg0NCwgMHhCODQ0LCAweDIxODYsIDB4Qjg0NSwgMHhCODQ1LCAweDQxNjIsIDB4Qjg0NiwgMHhCODQ2LCAweDIwRUQsCisgICAgMHhCODQ3LCAweEI4NEMsIDB4NDE2MywgMHhCODRELCAweEI4NEQsIDB4MjVCOSwgMHhCODRFLCAweEI4NTAsIDB4NDE2OSwKKyAgICAweEI4NTEsIDB4Qjg1MSwgMHgxRkVBLCAweEI4NTIsIDB4Qjg1OSwgMHg0MTZDLCAweEI4NUEsIDB4Qjg1QSwgMHgxRUE0LAorICAgIDB4Qjg1QiwgMHhCODVCLCAweDIwRTEsIDB4Qjg1QywgMHhCODVDLCAweDQxNzQsIDB4Qjg1RCwgMHhCODVELCAweDI1QjgsCisgICAgMHhCODVFLCAweEI4NUUsIDB4MjI2MCwgMHhCODVGLCAweEI4NUYsIDB4NDE3NSwgMHhCODYwLCAweEI4NjAsIDB4MjBFMiwKKyAgICAweEI4NjEsIDB4Qjg3NiwgMHg0MTc2LCAweEI4NzcsIDB4Qjg3NywgMHgyMTQxLCAweEI4NzgsIDB4Qjg3RSwgMHg0MThDLAorICAgIDB4Qjg4MCwgMHhCODgxLCAweDQxOTMsIDB4Qjg4MiwgMHhCODgyLCAweDFGQzcsIDB4Qjg4MywgMHhCOEEwLCAweDQxOTUsCisgICAgMHhCOEExLCAweEI4RkUsIDB4MDY5QywgMHhCOTQwLCAweEI5NEYsIDB4NDFCMywgMHhCOTUwLCAweEI5NTAsIDB4MUU0MSwKKyAgICAweEI5NTEsIDB4Qjk2MCwgMHg0MUMzLCAweEI5NjEsIDB4Qjk2MSwgMHgyNUU0LCAweEI5NjIsIDB4Qjk3QSwgMHg0MUQzLAorICAgIDB4Qjk3QiwgMHhCOTdCLCAweDFGODYsIDB4Qjk3QywgMHhCOTdFLCAweDQxRUMsIDB4Qjk4MCwgMHhCOTlDLCAweDQxRUYsCisgICAgMHhCOTlELCAweEI5OUQsIDB4MUZCMywgMHhCOTlFLCAweEI5OUYsIDB4NDIwQywgMHhCOUEwLCAweEI5QTAsIDB4MUVFRiwKKyAgICAweEI5QTEsIDB4QjlGRSwgMHgwNkZBLCAweEJBNDAsIDB4QkE0MSwgMHg0MjBFLCAweEJBNDIsIDB4QkE0MiwgMHgyMkE0LAorICAgIDB4QkE0MywgMHhCQTQzLCAweDQyMTAsIDB4QkE0NCwgMHhCQTQ0LCAweDI1RTgsIDB4QkE0NSwgMHhCQTU1LCAweDQyMTEsCisgICAgMHhCQTU2LCAweEJBNTYsIDB4MjVFMywgMHhCQTU3LCAweEJBNTgsIDB4NDIyMiwgMHhCQTU5LCAweEJBNTksIDB4MjExMSwKKyAgICAweEJBNUEsIDB4QkE1RiwgMHg0MjI0LCAweEJBNjAsIDB4QkE2MCwgMHgyNUU2LCAweEJBNjEsIDB4QkE2OSwgMHg0MjJBLAorICAgIDB4QkE2QSwgMHhCQTZBLCAweDI1RTcsIDB4QkE2QiwgMHhCQTczLCAweDQyMzMsIDB4QkE3NCwgMHhCQTc0LCAweDIwNDEsCisgICAgMHhCQTc1LCAweEJBN0UsIDB4NDIzQywgMHhCQTgwLCAweEJBODMsIDB4NDI0NiwgMHhCQTg0LCAweEJBODQsIDB4MjVFQSwKKyAgICAweEJBODUsIDB4QkE4NSwgMHg0MjRBLCAweEJBODYsIDB4QkE4NiwgMHgxRjhGLCAweEJBODcsIDB4QkE4NywgMHg0MjRCLAorICAgIDB4QkE4OCwgMHhCQTg4LCAweDI1RUMsIDB4QkE4OSwgMHhCQThDLCAweDQyNEMsIDB4QkE4RCwgMHhCQThELCAweDI1RUIsCisgICAgMHhCQThFLCAweEJBOUQsIDB4NDI1MCwgMHhCQTlFLCAweEJBOUUsIDB4MjBEMCwgMHhCQTlGLCAweEJBOUYsIDB4MjAxRCwKKyAgICAweEJBQTAsIDB4QkFBMCwgMHg0MjYwLCAweEJBQTEsIDB4QkFGRSwgMHgwNzU4LCAweEJCNDAsIDB4QkI0MCwgMHgxRkY3LAorICAgIDB4QkI0MSwgMHhCQjQ4LCAweDQyNjEsIDB4QkI0OSwgMHhCQjQ5LCAweDFFOEQsIDB4QkI0QSwgMHhCQjU3LCAweDQyNjksCisgICAgMHhCQjU4LCAweEJCNTgsIDB4MjVFOSwgMHhCQjU5LCAweEJCNUEsIDB4NDI3NywgMHhCQjVCLCAweEJCNUIsIDB4MjVFRSwKKyAgICAweEJCNUMsIDB4QkI1QywgMHgyMDNBLCAweEJCNUQsIDB4QkI1RiwgMHg0Mjc5LCAweEJCNjAsIDB4QkI2MCwgMHgyNjkzLAorICAgIDB4QkI2MSwgMHhCQjY0LCAweDQyN0MsIDB4QkI2NSwgMHhCQjY1LCAweDI1RTUsIDB4QkI2NiwgMHhCQjY2LCAweDI1RUQsCisgICAgMHhCQjY3LCAweEJCNjcsIDB4NDI4MCwgMHhCQjY4LCAweEJCNjgsIDB4MjAwOSwgMHhCQjY5LCAweEJCNjksIDB4NDI4MSwKKyAgICAweEJCNkEsIDB4QkI2QSwgMHgyMDY1LCAweEJCNkIsIDB4QkI2RCwgMHg0MjgyLCAweEJCNkUsIDB4QkI2RSwgMHgyNkEzLAorICAgIDB4QkI2RiwgMHhCQjdFLCAweDQyODUsIDB4QkI4MCwgMHhCQkEwLCAweDQyOTUsIDB4QkJBMSwgMHhCQkZFLCAweDA3QjYsCisgICAgMHhCQzQwLCAweEJDNTEsIDB4NDJCNiwgMHhCQzUyLCAweEJDNTIsIDB4MjVGNSwgMHhCQzUzLCAweEJDNTMsIDB4MUVGQywKKyAgICAweEJDNTQsIDB4QkM1OSwgMHg0MkM4LCAweEJDNUEsIDB4QkM1QSwgMHgyMDI0LCAweEJDNUIsIDB4QkM2MCwgMHg0MkNFLAorICAgIDB4QkM2MSwgMHhCQzYxLCAweDI2OUIsIDB4QkM2MiwgMHhCQzYyLCAweDQyRDQsIDB4QkM2MywgMHhCQzYzLCAweDI1RjMsCisgICAgMHhCQzY0LCAweEJDNjQsIDB4NDJENSwgMHhCQzY1LCAweEJDNjUsIDB4MjJEOSwgMHhCQzY2LCAweEJDNjYsIDB4NDJENiwKKyAgICAweEJDNjcsIDB4QkM2NywgMHgyNUY0LCAweEJDNjgsIDB4QkM2OCwgMHg0MkQ3LCAweEJDNjksIDB4QkM2OSwgMHgyNDFCLAorICAgIDB4QkM2QSwgMHhCQzZDLCAweDQyRDgsIDB4QkM2RCwgMHhCQzZELCAweDFGQzgsIDB4QkM2RSwgMHhCQzZFLCAweDQyREIsCisgICAgMHhCQzZGLCAweEJDNkYsIDB4MUY3QiwgMHhCQzcwLCAweEJDNzAsIDB4NDJEQywgMHhCQzcxLCAweEJDNzEsIDB4MjQxRCwKKyAgICAweEJDNzIsIDB4QkM3MiwgMHg0MkRELCAweEJDNzMsIDB4QkM3MywgMHgyMjRDLCAweEJDNzQsIDB4QkM3NCwgMHgxRjQ4LAorICAgIDB4QkM3NSwgMHhCQzc1LCAweDI0MUMsIDB4QkM3NiwgMHhCQzc3LCAweDI0MUUsIDB4QkM3OCwgMHhCQzc4LCAweDIwRkYsCisgICAgMHhCQzc5LCAweEJDNzksIDB4MjE5QSwgMHhCQzdBLCAweEJDN0EsIDB4NDJERSwgMHhCQzdCLCAweEJDN0IsIDB4MjA5MSwKKyAgICAweEJDN0MsIDB4QkM3RCwgMHg0MkRGLCAweEJDN0UsIDB4QkM3RSwgMHgyMEE3LCAweEJDODAsIDB4QkM4MSwgMHg0MkUxLAorICAgIDB4QkM4MiwgMHhCQzgyLCAweDI0MjMsIDB4QkM4MywgMHhCQzgzLCAweDFFOUIsIDB4QkM4NCwgMHhCQzg0LCAweDI0MjIsCisgICAgMHhCQzg1LCAweEJDODUsIDB4NDJFMywgMHhCQzg2LCAweEJDODYsIDB4MjExMCwgMHhCQzg3LCAweEJDODcsIDB4NDJFNCwKKyAgICAweEJDODgsIDB4QkM4OCwgMHgyMjhELCAweEJDODksIDB4QkM4OSwgMHgxRjcxLCAweEJDOEEsIDB4QkM4QSwgMHgxRUY4LAorICAgIDB4QkM4QiwgMHhCQzhCLCAweDI0MjEsIDB4QkM4QywgMHhCQzhFLCAweDQyRTUsIDB4QkM4RiwgMHhCQzhGLCAweDFFRjMsCisgICAgMHhCQzkwLCAweEJDOTksIDB4NDJFOCwgMHhCQzlBLCAweEJDOUEsIDB4MjFCMSwgMHhCQzlCLCAweEJDOUIsIDB4MjQyNiwKKyAgICAweEJDOUMsIDB4QkM5QywgMHgyNDI1LCAweEJDOUQsIDB4QkM5RCwgMHgyMTIwLCAweEJDOUUsIDB4QkNBMCwgMHg0MkYyLAorICAgIDB4QkNBMSwgMHhCQ0ZFLCAweDA4MTQsIDB4QkQ0MCwgMHhCRDQxLCAweDQyRjUsIDB4QkQ0MiwgMHhCRDQyLCAweDIxMUEsCisgICAgMHhCRDQzLCAweEJENDMsIDB4MjQyNCwgMHhCRDQ0LCAweEJENDQsIDB4NDJGNywgMHhCRDQ1LCAweEJENDUsIDB4MjQyOCwKKyAgICAweEJENDYsIDB4QkQ0NywgMHg0MkY4LCAweEJENDgsIDB4QkQ0OCwgMHgyNDJBLCAweEJENDksIDB4QkQ0OSwgMHgyNDI5LAorICAgIDB4QkQ0QSwgMHhCRDRBLCAweDQyRkEsIDB4QkQ0QiwgMHhCRDRCLCAweDIyOTQsIDB4QkQ0QywgMHhCRDRDLCAweDQyRkIsCisgICAgMHhCRDRELCAweEJENEQsIDB4MjJCRSwgMHhCRDRFLCAweEJENEUsIDB4NDJGQywgMHhCRDRGLCAweEJENEYsIDB4MUUzMSwKKyAgICAweEJENTAsIDB4QkQ1NiwgMHg0MkZELCAweEJENTcsIDB4QkQ1NywgMHgyNDJDLCAweEJENTgsIDB4QkQ1OCwgMHg0MzA0LAorICAgIDB4QkQ1OSwgMHhCRDU5LCAweDFGQjUsIDB4QkQ1QSwgMHhCRDY1LCAweDQzMDUsIDB4QkQ2NiwgMHhCRDY2LCAweDI0MkIsCisgICAgMHhCRDY3LCAweEJENjcsIDB4MUZBRiwgMHhCRDY4LCAweEJENjksIDB4NDMxMSwgMHhCRDZBLCAweEJENkEsIDB4MjA2OCwKKyAgICAweEJENkIsIDB4QkQ2QiwgMHgyMUU0LCAweEJENkMsIDB4QkQ2RSwgMHg0MzEzLCAweEJENkYsIDB4QkQ2RiwgMHgxRjIxLAorICAgIDB4QkQ3MCwgMHhCRDcwLCAweDQzMTYsIDB4QkQ3MSwgMHhCRDcxLCAweDIxMDEsIDB4QkQ3MiwgMHhCRDc4LCAweDQzMTcsCisgICAgMHhCRDc5LCAweEJENzksIDB4MjE3QywgMHhCRDdBLCAweEJEN0EsIDB4MjE0QSwgMHhCRDdCLCAweEJEN0IsIDB4MjQyRCwKKyAgICAweEJEN0MsIDB4QkQ3RCwgMHg0MzFFLCAweEJEN0UsIDB4QkQ3RSwgMHgxRkQ0LCAweEJEODAsIDB4QkQ4MCwgMHg0MzIwLAorICAgIDB4QkQ4MSwgMHhCRDgxLCAweDFGRDEsIDB4QkQ4MiwgMHhCRDg4LCAweDQzMjEsIDB4QkQ4OSwgMHhCRDg5LCAweDFFMzMsCisgICAgMHhCRDhBLCAweEJEOEEsIDB4NDMyOCwgMHhCRDhCLCAweEJEOEIsIDB4MjQyRiwgMHhCRDhDLCAweEJEOEQsIDB4NDMyOSwKKyAgICAweEJEOEUsIDB4QkQ4RSwgMHgyNDJFLCAweEJEOEYsIDB4QkQ4RiwgMHg0MzJCLCAweEJEOTAsIDB4QkQ5MCwgMHgyNDMwLAorICAgIDB4QkQ5MSwgMHhCRDkxLCAweDIxREIsIDB4QkQ5MiwgMHhCRDk2LCAweDQzMkMsIDB4QkQ5NywgMHhCRDk3LCAweDIxNTgsCisgICAgMHhCRDk4LCAweEJEOUEsIDB4NDMzMSwgMHhCRDlCLCAweEJEOUIsIDB4MUZDMiwgMHhCRDlDLCAweEJEQTAsIDB4NDMzNCwKKyAgICAweEJEQTEsIDB4QkRGRSwgMHgwODcyLCAweEJFNDAsIDB4QkU0MiwgMHg0MzM5LCAweEJFNDMsIDB4QkU0MywgMHgyMkI5LAorICAgIDB4QkU0NCwgMHhCRTQ0LCAweDQzM0MsIDB4QkU0NSwgMHhCRTQ1LCAweDI0MzYsIDB4QkU0NiwgMHhCRTQ4LCAweDQzM0QsCisgICAgMHhCRTQ5LCAweEJFNDksIDB4MUU4RSwgMHhCRTRBLCAweEJFNEEsIDB4MjQzOSwgMHhCRTRCLCAweEJFNTAsIDB4NDM0MCwKKyAgICAweEJFNTEsIDB4QkU1MSwgMHgyMUM1LCAweEJFNTIsIDB4QkU1MiwgMHgyNDM3LCAweEJFNTMsIDB4QkU1MywgMHgyMTkyLAorICAgIDB4QkU1NCwgMHhCRTU0LCAweDQzNDYsIDB4QkU1NSwgMHhCRTU1LCAweDI0M0EsIDB4QkU1NiwgMHhCRTU2LCAweDFGMTksCisgICAgMHhCRTU3LCAweEJFNTcsIDB4MjE4QywgMHhCRTU4LCAweEJFNTgsIDB4MUU0MCwgMHhCRTU5LCAweEJFNTksIDB4MjJCMywKKyAgICAweEJFNUEsIDB4QkU1QywgMHg0MzQ3LCAweEJFNUQsIDB4QkU1RCwgMHgyMDVGLCAweEJFNUUsIDB4QkU1RSwgMHgyNDM4LAorICAgIDB4QkU1RiwgMHhCRTVGLCAweDI0MzIsIDB4QkU2MCwgMHhCRTYwLCAweDIyNzQsIDB4QkU2MSwgMHhCRTYxLCAweDQzNEEsCisgICAgMHhCRTYyLCAweEJFNjIsIDB4MUU5QywgMHhCRTYzLCAweEJFNjMsIDB4MjQzMSwgMHhCRTY0LCAweEJFNjQsIDB4MjA4NSwKKyAgICAweEJFNjUsIDB4QkU2OCwgMHg0MzRCLCAweEJFNjksIDB4QkU2OSwgMHgyNDM1LCAweEJFNkEsIDB4QkU2QiwgMHg0MzRGLAorICAgIDB4QkU2QywgMHhCRTZDLCAweDI0M0IsIDB4QkU2RCwgMHhCRTZFLCAweDQzNTEsIDB4QkU2RiwgMHhCRTZGLCAweDFGQjcsCisgICAgMHhCRTcwLCAweEJFNzAsIDB4MjQzMywgMHhCRTcxLCAweEJFNzUsIDB4NDM1MywgMHhCRTc2LCAweEJFNzYsIDB4MjA1NCwKKyAgICAweEJFNzcsIDB4QkU3NywgMHgyMURFLCAweEJFNzgsIDB4QkU3OCwgMHg0MzU4LCAweEJFNzksIDB4QkU3OSwgMHgyNDM0LAorICAgIDB4QkU3QSwgMHhCRTdCLCAweDQzNTksIDB4QkU3QywgMHhCRTdDLCAweDI0M0QsIDB4QkU3RCwgMHhCRTdELCAweDFGODksCisgICAgMHhCRTdFLCAweEJFN0UsIDB4MjQzQywgMHhCRTgwLCAweEJFODIsIDB4NDM1QiwgMHhCRTgzLCAweEJFODMsIDB4MUY2RSwKKyAgICAweEJFODQsIDB4QkU4NCwgMHgxRUQ4LCAweEJFODUsIDB4QkU4NSwgMHg0MzVFLCAweEJFODYsIDB4QkU4NiwgMHgxRUJGLAorICAgIDB4QkU4NywgMHhCRTg3LCAweDI0NDUsIDB4QkU4OCwgMHhCRTg4LCAweDQzNUYsIDB4QkU4OSwgMHhCRTg5LCAweDIyNDksCisgICAgMHhCRThBLCAweEJFOEIsIDB4NDM2MCwgMHhCRThDLCAweEJFOEMsIDB4MjQ0MSwgMHhCRThELCAweEJFOEQsIDB4NDM2MiwKKyAgICAweEJFOEUsIDB4QkU4RSwgMHgxRTQ3LCAweEJFOEYsIDB4QkU4RiwgMHgxRjU2LCAweEJFOTAsIDB4QkU5MSwgMHg0MzYzLAorICAgIDB4QkU5MiwgMHhCRTkyLCAweDIwODYsIDB4QkU5MywgMHhCRTk0LCAweDQzNjUsIDB4QkU5NSwgMHhCRTk1LCAweDIxOTYsCisgICAgMHhCRTk2LCAweEJFOTYsIDB4NDM2NywgMHhCRTk3LCAweEJFOTcsIDB4MjQ0MywgMHhCRTk4LCAweEJFOTgsIDB4MjQzRiwKKyAgICAweEJFOTksIDB4QkU5OSwgMHg0MzY4LCAweEJFOUEsIDB4QkU5QSwgMHgyMDIzLCAweEJFOUIsIDB4QkU5QiwgMHg0MzY5LAorICAgIDB4QkU5QywgMHhCRTlDLCAweDI0NDIsIDB4QkU5RCwgMHhCRTlFLCAweDQzNkEsIDB4QkU5RiwgMHhCRTlGLCAweDI0M0UsCisgICAgMHhCRUEwLCAweEJFQTAsIDB4NDM2QywgMHhCRUExLCAweEJFRkUsIDB4MDhEMCwgMHhCRjQwLCAweEJGNDAsIDB4MjZBNiwKKyAgICAweEJGNDEsIDB4QkY0QywgMHg0MzZELCAweEJGNEQsIDB4QkY0RCwgMHgyMzRFLCAweEJGNEUsIDB4QkY0RSwgMHgyNDQ2LAorICAgIDB4QkY0RiwgMHhCRjRGLCAweDI0NEIsIDB4QkY1MCwgMHhCRjUwLCAweDI0NDQsIDB4QkY1MSwgMHhCRjU0LCAweDQzNzksCisgICAgMHhCRjU1LCAweEJGNTUsIDB4MjQyNywgMHhCRjU2LCAweEJGNTYsIDB4MjQ0QywgMHhCRjU3LCAweEJGNUYsIDB4NDM3RCwKKyAgICAweEJGNjAsIDB4QkY2MCwgMHgxRjBGLCAweEJGNjEsIDB4QkY2MSwgMHg0Mzg2LCAweEJGNjIsIDB4QkY2MiwgMHgyNDQ3LAorICAgIDB4QkY2MywgMHhCRjYzLCAweDI0NDksIDB4QkY2NCwgMHhCRjY0LCAweDI0NDgsIDB4QkY2NSwgMHhCRjY3LCAweDQzODcsCisgICAgMHhCRjY4LCAweEJGNjgsIDB4MjFDMiwgMHhCRjY5LCAweEJGNkIsIDB4NDM4QSwgMHhCRjZDLCAweEJGNkMsIDB4MjE2RSwKKyAgICAweEJGNkQsIDB4QkY2RiwgMHg0MzhELCAweEJGNzAsIDB4QkY3MCwgMHgxRjAzLCAweEJGNzEsIDB4QkY3MSwgMHg0MzkwLAorICAgIDB4QkY3MiwgMHhCRjcyLCAweDI0NEEsIDB4QkY3MywgMHhCRjczLCAweDIxNUMsIDB4QkY3NCwgMHhCRjc1LCAweDQzOTEsCisgICAgMHhCRjc2LCAweEJGNzYsIDB4MjJCQiwgMHhCRjc3LCAweEJGNzcsIDB4MjQ1MCwgMHhCRjc4LCAweEJGNzgsIDB4NDM5MywKKyAgICAweEJGNzksIDB4QkY3OSwgMHgyNjk0LCAweEJGN0EsIDB4QkY3QSwgMHgyNDRGLCAweEJGN0IsIDB4QkY3QiwgMHgyNUY2LAorICAgIDB4QkY3QywgMHhCRjdDLCAweDIwNTEsIDB4QkY3RCwgMHhCRjdELCAweDQzOTQsIDB4QkY3RSwgMHhCRjdFLCAweDI0NEUsCisgICAgMHhCRjgwLCAweEJGODEsIDB4NDM5NSwgMHhCRjgyLCAweEJGODIsIDB4MjJCQSwgMHhCRjgzLCAweEJGODMsIDB4MUY2RCwKKyAgICAweEJGODQsIDB4QkY4OCwgMHg0Mzk3LCAweEJGODksIDB4QkY4OSwgMHgyNDUyLCAweEJGOEEsIDB4QkY4QSwgMHgyNDUxLAorICAgIDB4QkY4QiwgMHhCRjk0LCAweDQzOUMsIDB4QkY5NSwgMHhCRjk1LCAweDI0NTUsIDB4QkY5NiwgMHhCRjk2LCAweDQzQTYsCisgICAgMHhCRjk3LCAweEJGOTcsIDB4MjI4OSwgMHhCRjk4LCAweEJGOTgsIDB4MjExNiwgMHhCRjk5LCAweEJGOUMsIDB4NDNBNywKKyAgICAweEJGOUQsIDB4QkY5RCwgMHgyNDU0LCAweEJGOUUsIDB4QkZBMCwgMHg0M0FCLCAweEJGQTEsIDB4QkZGRSwgMHgwOTJFLAorICAgIDB4QzA0MCwgMHhDMDQwLCAweDIwRkIsIDB4QzA0MSwgMHhDMDQzLCAweDQzQUUsIDB4QzA0NCwgMHhDMDQ0LCAweDI0NDAsCisgICAgMHhDMDQ1LCAweEMwNEEsIDB4NDNCMSwgMHhDMDRCLCAweEMwNEIsIDB4MjEyNiwgMHhDMDRDLCAweEMwNEMsIDB4MUY2MSwKKyAgICAweEMwNEQsIDB4QzA0RCwgMHgyNjlELCAweEMwNEUsIDB4QzA0RSwgMHg0M0I3LCAweEMwNEYsIDB4QzA0RiwgMHgxRjhBLAorICAgIDB4QzA1MCwgMHhDMDUwLCAweDI0NTYsIDB4QzA1MSwgMHhDMDUxLCAweDI0NTksIDB4QzA1MiwgMHhDMDUyLCAweDI0NTgsCisgICAgMHhDMDUzLCAweEMwNTQsIDB4NDNCOCwgMHhDMDU1LCAweEMwNTUsIDB4MUZBRSwgMHhDMDU2LCAweEMwNUEsIDB4NDNCQSwKKyAgICAweEMwNUIsIDB4QzA1QiwgMHgyMjFBLCAweEMwNUMsIDB4QzA1RCwgMHg0M0JGLCAweEMwNUUsIDB4QzA1RSwgMHgxRjdBLAorICAgIDB4QzA1RiwgMHhDMDVGLCAweDI0NEQsIDB4QzA2MCwgMHhDMDYwLCAweDI0NTcsIDB4QzA2MSwgMHhDMDY4LCAweDQzQzEsCisgICAgMHhDMDY5LCAweEMwNjksIDB4MjQ1MywgMHhDMDZBLCAweEMwNkEsIDB4NDNDOSwgMHhDMDZCLCAweEMwNkIsIDB4MjQyMCwKKyAgICAweEMwNkMsIDB4QzA2QywgMHg0M0NBLCAweEMwNkQsIDB4QzA2RCwgMHgyMURGLCAweEMwNkUsIDB4QzA2RSwgMHgyNjg1LAorICAgIDB4QzA2RiwgMHhDMDZGLCAweDQzQ0IsIDB4QzA3MCwgMHhDMDcwLCAweDFFNkUsIDB4QzA3MSwgMHhDMDczLCAweDQzQ0MsCisgICAgMHhDMDc0LCAweEMwNzQsIDB4MjIyNCwgMHhDMDc1LCAweEMwNzUsIDB4MjY3MCwgMHhDMDc2LCAweEMwNzYsIDB4NDNDRiwKKyAgICAweEMwNzcsIDB4QzA3NywgMHgyMUJBLCAweEMwNzgsIDB4QzA3OCwgMHg0M0QwLCAweEMwNzksIDB4QzA3OSwgMHgyNDVBLAorICAgIDB4QzA3QSwgMHhDMDdCLCAweDQzRDEsIDB4QzA3QywgMHhDMDdDLCAweDFGRkYsIDB4QzA3RCwgMHhDMDdFLCAweDQzRDMsCisgICAgMHhDMDgwLCAweEMwOUEsIDB4NDNENSwgMHhDMDlCLCAweEMwOUIsIDB4MjVFMiwgMHhDMDlDLCAweEMwOUMsIDB4NDNGMCwKKyAgICAweEMwOUQsIDB4QzA5RCwgMHgyNjlBLCAweEMwOUUsIDB4QzBBMCwgMHg0M0YxLCAweEMwQTEsIDB4QzBGRSwgMHgwOThDLAorICAgIDB4QzE0MCwgMHhDMTRGLCAweDQzRjQsIDB4QzE1MCwgMHhDMTUwLCAweDFFRUEsIDB4QzE1MSwgMHhDMTUzLCAweDQ0MDQsCisgICAgMHhDMTU0LCAweEMxNTQsIDB4MUUyQywgMHhDMTU1LCAweEMxNUUsIDB4NDQwNywgMHhDMTVGLCAweEMxNUYsIDB4MjA2MiwKKyAgICAweEMxNjAsIDB4QzE2MCwgMHgyNEYxLCAweEMxNjEsIDB4QzE2MSwgMHg0NDExLCAweEMxNjIsIDB4QzE2MiwgMHgyNEYyLAorICAgIDB4QzE2MywgMHhDMTc0LCAweDQ0MTIsIDB4QzE3NSwgMHhDMTc1LCAweDI1RjIsIDB4QzE3NiwgMHhDMTc3LCAweDQ0MjQsCisgICAgMHhDMTc4LCAweEMxNzgsIDB4MjIxNSwgMHhDMTc5LCAweEMxN0UsIDB4NDQyNiwgMHhDMTgwLCAweEMxOTQsIDB4NDQyQywKKyAgICAweEMxOTUsIDB4QzE5NSwgMHgyMUFFLCAweEMxOTYsIDB4QzFBMCwgMHg0NDQxLCAweEMxQTEsIDB4QzFGRSwgMHgwOUVBLAorICAgIDB4QzI0MCwgMHhDMjRELCAweDQ0NEMsIDB4QzI0RSwgMHhDMjRFLCAweDIwRTAsIDB4QzI0RiwgMHhDMjY0LCAweDQ0NUEsCisgICAgMHhDMjY1LCAweEMyNjUsIDB4MjVDMiwgMHhDMjY2LCAweEMyNjYsIDB4NDQ3MCwgMHhDMjY3LCAweEMyNjcsIDB4MjVDMSwKKyAgICAweEMyNjgsIDB4QzI3QywgMHg0NDcxLCAweEMyN0QsIDB4QzI3RCwgMHgyMTI4LCAweEMyN0UsIDB4QzI3RSwgMHg0NDg2LAorICAgIDB4QzI4MCwgMHhDMjgzLCAweDQ0ODcsIDB4QzI4NCwgMHhDMjg0LCAweDIxOTksIDB4QzI4NSwgMHhDMjkyLCAweDQ0OEIsCisgICAgMHhDMjkzLCAweEMyOTMsIDB4MjAxNywgMHhDMjk0LCAweEMyOTQsIDB4MUVBMCwgMHhDMjk1LCAweEMyOTUsIDB4MjEyNSwKKyAgICAweEMyOTYsIDB4QzI5NiwgMHgyMTRELCAweEMyOTcsIDB4QzI5NywgMHg0NDk5LCAweEMyOTgsIDB4QzI5OCwgMHgyNUM0LAorICAgIDB4QzI5OSwgMHhDMjk5LCAweDIwOUQsIDB4QzI5QSwgMHhDMjlBLCAweDIyOEEsIDB4QzI5QiwgMHhDMjlCLCAweDQ0OUEsCisgICAgMHhDMjlDLCAweEMyOUMsIDB4MjVDMywgMHhDMjlELCAweEMyOUYsIDB4NDQ5QiwgMHhDMkEwLCAweEMyQTAsIDB4MjE3OSwKKyAgICAweEMyQTEsIDB4QzJGRSwgMHgwQTQ4LCAweEMzNDAsIDB4QzM0MCwgMHgyMDM4LCAweEMzNDEsIDB4QzM0MiwgMHg0NDlFLAorICAgIDB4QzM0MywgMHhDMzQzLCAweDIxNTUsIDB4QzM0NCwgMHhDMzdBLCAweDQ0QTAsIDB4QzM3QiwgMHhDMzdCLCAweDIxRDIsCisgICAgMHhDMzdDLCAweEMzN0UsIDB4NDRENywgMHhDMzgwLCAweEMzODMsIDB4NDREQSwgMHhDMzg0LCAweEMzODQsIDB4MjRDNywKKyAgICAweEMzODUsIDB4QzM5QSwgMHg0NERFLCAweEMzOUIsIDB4QzM5QiwgMHgyMjc5LCAweEMzOUMsIDB4QzNBMCwgMHg0NEY0LAorICAgIDB4QzNBMSwgMHhDM0ZFLCAweDBBQTYsIDB4QzQ0MCwgMHhDNDQ4LCAweDQ0RjksIDB4QzQ0OSwgMHhDNDQ5LCAweDIxMjMsCisgICAgMHhDNDRBLCAweEM0NEIsIDB4NDUwMiwgMHhDNDRDLCAweEM0NEMsIDB4MjRDNSwgMHhDNDRELCAweEM0NTMsIDB4NDUwNCwKKyAgICAweEM0NTQsIDB4QzQ1NCwgMHgyNEM5LCAweEM0NTUsIDB4QzQ1NywgMHg0NTBCLCAweEM0NTgsIDB4QzQ1OCwgMHgyMDk0LAorICAgIDB4QzQ1OSwgMHhDNDVBLCAweDQ1MEUsIDB4QzQ1QiwgMHhDNDVCLCAweDIyOTYsIDB4QzQ1QywgMHhDNDYyLCAweDQ1MTAsCisgICAgMHhDNDYzLCAweEM0NjMsIDB4MUU3NywgMHhDNDY0LCAweEM0NzYsIDB4NDUxNywgMHhDNDc3LCAweEM0NzcsIDB4MUYwNiwKKyAgICAweEM0NzgsIDB4QzQ3OSwgMHg0NTJBLCAweEM0N0EsIDB4QzQ3QSwgMHgxRkE1LCAweEM0N0IsIDB4QzQ3RSwgMHg0NTJDLAorICAgIDB4QzQ4MCwgMHhDNDgwLCAweDQ1MzAsIDB4QzQ4MSwgMHhDNDgxLCAweDIwOTksIDB4QzQ4MiwgMHhDNDkwLCAweDQ1MzEsCisgICAgMHhDNDkxLCAweEM0OTEsIDB4MUVBRCwgMHhDNDkyLCAweEM0OTIsIDB4MjRDOCwgMHhDNDkzLCAweEM0OTMsIDB4MjBBOCwKKyAgICAweEM0OTQsIDB4QzQ5NywgMHg0NTQwLCAweEM0OTgsIDB4QzQ5OCwgMHgyMDFGLCAweEM0OTksIDB4QzQ5OSwgMHg0NTQ0LAorICAgIDB4QzQ5QSwgMHhDNDlBLCAweDIwQzUsIDB4QzQ5QiwgMHhDNDlCLCAweDQ1NDUsIDB4QzQ5QywgMHhDNDlDLCAweDI0Q0EsCisgICAgMHhDNDlELCAweEM0QTAsIDB4NDU0NiwgMHhDNEExLCAweEM0RkUsIDB4MEIwNCwgMHhDNTQwLCAweEM1NDMsIDB4NDU0QSwKKyAgICAweEM1NDQsIDB4QzU0NCwgMHgxRkYwLCAweEM1NDUsIDB4QzU0NSwgMHg0NTRFLCAweEM1NDYsIDB4QzU0NiwgMHgyNEM2LAorICAgIDB4QzU0NywgMHhDNTRBLCAweDQ1NEYsIDB4QzU0QiwgMHhDNTRCLCAweDIyNUQsIDB4QzU0QywgMHhDNTRDLCAweDIyREUsCisgICAgMHhDNTRELCAweEM1NTEsIDB4NDU1MywgMHhDNTUyLCAweEM1NTIsIDB4MjAyQywgMHhDNTUzLCAweEM1NUUsIDB4NDU1OCwKKyAgICAweEM1NUYsIDB4QzU1RiwgMHgyMTYxLCAweEM1NjAsIDB4QzU2MiwgMHg0NTY0LCAweEM1NjMsIDB4QzU2MywgMHgyMjNCLAorICAgIDB4QzU2NCwgMHhDNTY0LCAweDIxRDksIDB4QzU2NSwgMHhDNTY1LCAweDFGQ0IsIDB4QzU2NiwgMHhDNTY2LCAweDFGQzksCisgICAgMHhDNTY3LCAweEM1N0UsIDB4NDU2NywgMHhDNTgwLCAweEM1OTIsIDB4NDU3RiwgMHhDNTkzLCAweEM1OTMsIDB4MUU2MSwKKyAgICAweEM1OTQsIDB4QzU5QiwgMHg0NTkyLCAweEM1OUMsIDB4QzU5QywgMHgyNUVGLCAweEM1OUQsIDB4QzU5RCwgMHg0NTlBLAorICAgIDB4QzU5RSwgMHhDNTlFLCAweDFGOTgsIDB4QzU5RiwgMHhDNUEwLCAweDQ1OUIsIDB4QzVBMSwgMHhDNUZFLCAweDBCNjIsCisgICAgMHhDNjQwLCAweEM2NDAsIDB4NDU5RCwgMHhDNjQxLCAweEM2NDEsIDB4MjVGMCwgMHhDNjQyLCAweEM2NDMsIDB4NDU5RSwKKyAgICAweEM2NDQsIDB4QzY0NCwgMHgxRjg4LCAweEM2NDUsIDB4QzY0NiwgMHg0NUEwLCAweEM2NDcsIDB4QzY0NywgMHgyMUY4LAorICAgIDB4QzY0OCwgMHhDNjYyLCAweDQ1QTIsIDB4QzY2MywgMHhDNjYzLCAweDIzMjIsIDB4QzY2NCwgMHhDNjcxLCAweDQ1QkQsCisgICAgMHhDNjcyLCAweEM2NzIsIDB4MjMzNiwgMHhDNjczLCAweEM2N0UsIDB4NDVDQiwgMHhDNjgwLCAweEM2QTAsIDB4NDVENywKKyAgICAweEM2QTEsIDB4QzZGRSwgMHgwQkMwLCAweEM3NDAsIDB4Qzc2NSwgMHg0NUY4LCAweEM3NjYsIDB4Qzc2NiwgMHgyMkFCLAorICAgIDB4Qzc2NywgMHhDNzZFLCAweDQ2MUUsIDB4Qzc2RiwgMHhDNzZGLCAweDFGQkYsIDB4Qzc3MCwgMHhDNzc1LCAweDQ2MjYsCisgICAgMHhDNzc2LCAweEM3NzYsIDB4MUY3RCwgMHhDNzc3LCAweEM3N0EsIDB4NDYyQywgMHhDNzdCLCAweEM3N0IsIDB4MjMzMywKKyAgICAweEM3N0MsIDB4Qzc3RSwgMHg0NjMwLCAweEM3ODAsIDB4QzdBMCwgMHg0NjMzLCAweEM3QTEsIDB4QzdGRSwgMHgwQzFFLAorICAgIDB4Qzg0MCwgMHhDODQwLCAweDQ2NTQsIDB4Qzg0MSwgMHhDODQxLCAweDFGNEQsIDB4Qzg0MiwgMHhDODRFLCAweDQ2NTUsCisgICAgMHhDODRGLCAweEM4NEYsIDB4MjMzNCwgMHhDODUwLCAweEM4NTEsIDB4NDY2MiwgMHhDODUyLCAweEM4NTIsIDB4MUZGMSwKKyAgICAweEM4NTMsIDB4Qzg2NSwgMHg0NjY0LCAweEM4NjYsIDB4Qzg2NiwgMHgyMThCLCAweEM4NjcsIDB4Qzg2RCwgMHg0Njc3LAorICAgIDB4Qzg2RSwgMHhDODZFLCAweDIzNDksIDB4Qzg2RiwgMHhDODdELCAweDQ2N0UsIDB4Qzg3RSwgMHhDODdFLCAweDIyMEIsCisgICAgMHhDODgwLCAweEM4ODYsIDB4NDY4RCwgMHhDODg3LCAweEM4ODcsIDB4MjM0NiwgMHhDODg4LCAweEM4OTEsIDB4NDY5NCwKKyAgICAweEM4OTIsIDB4Qzg5MiwgMHgyMzQ3LCAweEM4OTMsIDB4Qzg5MywgMHg0NjlFLCAweEM4OTQsIDB4Qzg5NCwgMHgyMTkzLAorICAgIDB4Qzg5NSwgMHhDODk4LCAweDQ2OUYsIDB4Qzg5OSwgMHhDODk5LCAweDI2QTEsIDB4Qzg5QSwgMHhDODlDLCAweDQ2QTMsCisgICAgMHhDODlELCAweEM4OUQsIDB4MUY2MiwgMHhDODlFLCAweEM4QTAsIDB4NDZBNiwgMHhDOEExLCAweEM4RkUsIDB4MEM3QywKKyAgICAweEM5NDAsIDB4Qzk0RSwgMHg0NkE5LCAweEM5NEYsIDB4Qzk0RiwgMHgyMzRELCAweEM5NTAsIDB4Qzk1MCwgMHgyMzQ4LAorICAgIDB4Qzk1MSwgMHhDOTZELCAweDQ2QjgsIDB4Qzk2RSwgMHhDOTZFLCAweDFFNjAsIDB4Qzk2RiwgMHhDOTZGLCAweDQ2RDUsCisgICAgMHhDOTcwLCAweEM5NzAsIDB4MjM0NSwgMHhDOTcxLCAweEM5NzYsIDB4NDZENiwgMHhDOTc3LCAweEM5NzcsIDB4MUYxMiwKKyAgICAweEM5NzgsIDB4Qzk3RSwgMHg0NkRDLCAweEM5ODAsIDB4Qzk4RSwgMHg0NkUzLCAweEM5OEYsIDB4Qzk4RiwgMHgyMDE4LAorICAgIDB4Qzk5MCwgMHhDOTkwLCAweDIzMzUsIDB4Qzk5MSwgMHhDOTlCLCAweDQ2RjIsIDB4Qzk5QywgMHhDOTlDLCAweDIzM0MsCisgICAgMHhDOTlELCAweEM5QTAsIDB4NDZGRCwgMHhDOUExLCAweEM5RkUsIDB4MENEQSwgMHhDQTQwLCAweENBNEQsIDB4NDcwMSwKKyAgICAweENBNEUsIDB4Q0E0RSwgMHgyNjZGLCAweENBNEYsIDB4Q0E1NSwgMHg0NzBGLCAweENBNTYsIDB4Q0E1NiwgMHgyMzUxLAorICAgIDB4Q0E1NywgMHhDQTU4LCAweDQ3MTYsIDB4Q0E1OSwgMHhDQTU5LCAweDFGQTAsIDB4Q0E1QSwgMHhDQTVCLCAweDQ3MTgsCisgICAgMHhDQTVDLCAweENBNUMsIDB4MjMzOCwgMHhDQTVELCAweENBNjAsIDB4NDcxQSwgMHhDQTYxLCAweENBNjEsIDB4MjIxQiwKKyAgICAweENBNjIsIDB4Q0E2RCwgMHg0NzFFLCAweENBNkUsIDB4Q0E2RSwgMHgyMzQyLCAweENBNkYsIDB4Q0E3MSwgMHg0NzJBLAorICAgIDB4Q0E3MiwgMHhDQTcyLCAweDIzNEYsIDB4Q0E3MywgMHhDQTc2LCAweDQ3MkQsIDB4Q0E3NywgMHhDQTc3LCAweDIzM0QsCisgICAgMHhDQTc4LCAweENBN0EsIDB4NDczMSwgMHhDQTdCLCAweENBN0IsIDB4MjM0NCwgMHhDQTdDLCAweENBN0MsIDB4MjMzMSwKKyAgICAweENBN0QsIDB4Q0E3RCwgMHg0NzM0LCAweENBN0UsIDB4Q0E3RSwgMHgyMzRCLCAweENBODAsIDB4Q0E4MCwgMHg0NzM1LAorICAgIDB4Q0E4MSwgMHhDQTgxLCAweDIzM0IsIDB4Q0E4MiwgMHhDQTg4LCAweDQ3MzYsIDB4Q0E4OSwgMHhDQTg5LCAweDIzNTAsCisgICAgMHhDQThBLCAweENBOEQsIDB4NDczRCwgMHhDQThFLCAweENBOEUsIDB4MUVCNCwgMHhDQThGLCAweENBOEYsIDB4MjFBNiwKKyAgICAweENBOTAsIDB4Q0E5MSwgMHg0NzQxLCAweENBOTIsIDB4Q0E5MiwgMHgyMUNCLCAweENBOTMsIDB4Q0E5OSwgMHg0NzQzLAorICAgIDB4Q0E5QSwgMHhDQTlBLCAweDIzNTUsIDB4Q0E5QiwgMHhDQUEwLCAweDQ3NEEsIDB4Q0FBMSwgMHhDQUZFLCAweDBEMzgsCisgICAgMHhDQjQwLCAweENCNDIsIDB4NDc1MCwgMHhDQjQzLCAweENCNDMsIDB4MjMzRSwgMHhDQjQ0LCAweENCNDQsIDB4NDc1MywKKyAgICAweENCNDUsIDB4Q0I0NSwgMHgxRjc0LCAweENCNDYsIDB4Q0I0NiwgMHg0NzU0LCAweENCNDcsIDB4Q0I0NywgMHgyMzMwLAorICAgIDB4Q0I0OCwgMHhDQjRBLCAweDQ3NTUsIDB4Q0I0QiwgMHhDQjRCLCAweDI2ODAsIDB4Q0I0QywgMHhDQjRELCAweDQ3NTgsCisgICAgMHhDQjRFLCAweENCNEUsIDB4MjBEQSwgMHhDQjRGLCAweENCNTYsIDB4NDc1QSwgMHhDQjU3LCAweENCNTcsIDB4MjM0QSwKKyAgICAweENCNTgsIDB4Q0I1QywgMHg0NzYyLCAweENCNUQsIDB4Q0I1RCwgMHgxRjkxLCAweENCNUUsIDB4Q0I1RSwgMHg0NzY3LAorICAgIDB4Q0I1RiwgMHhDQjVGLCAweDIxMDcsIDB4Q0I2MCwgMHhDQjY5LCAweDQ3NjgsIDB4Q0I2QSwgMHhDQjZBLCAweDIzM0YsCisgICAgMHhDQjZCLCAweENCN0EsIDB4NDc3MiwgMHhDQjdCLCAweENCN0IsIDB4MUZGNCwgMHhDQjdDLCAweENCN0MsIDB4MjM0MywKKyAgICAweENCN0QsIDB4Q0I3RSwgMHg0NzgyLCAweENCODAsIDB4Q0I4NiwgMHg0Nzg0LCAweENCODcsIDB4Q0I4NywgMHgyMjEyLAorICAgIDB4Q0I4OCwgMHhDQjhELCAweDQ3OEIsIDB4Q0I4RSwgMHhDQjhFLCAweDIyMDcsIDB4Q0I4RiwgMHhDQjkxLCAweDQ3OTEsCisgICAgMHhDQjkyLCAweENCOTIsIDB4MjM1OSwgMHhDQjkzLCAweENCOUIsIDB4NDc5NCwgMHhDQjlDLCAweENCOUMsIDB4MjI1NCwKKyAgICAweENCOUQsIDB4Q0I5RCwgMHg0NzlELCAweENCOUUsIDB4Q0I5RSwgMHgyMzMyLCAweENCOUYsIDB4Q0JBMCwgMHg0NzlFLAorICAgIDB4Q0JBMSwgMHhDQkZFLCAweDBEOTYsIDB4Q0M0MCwgMHhDQzQwLCAweDFFMjYsIDB4Q0M0MSwgMHhDQzQxLCAweDIzNTcsCisgICAgMHhDQzQyLCAweENDNDgsIDB4NDdBMCwgMHhDQzQ5LCAweENDNDksIDB4MjM1OCwgMHhDQzRBLCAweENDNEEsIDB4MjA0MiwKKyAgICAweENDNEIsIDB4Q0M0QiwgMHgyMTUzLCAweENDNEMsIDB4Q0M0RSwgMHg0N0E3LCAweENDNEYsIDB4Q0M0RiwgMHgyMEJCLAorICAgIDB4Q0M1MCwgMHhDQzVCLCAweDQ3QUEsIDB4Q0M1QywgMHhDQzVDLCAweDIzNUEsIDB4Q0M1RCwgMHhDQzVGLCAweDQ3QjYsCisgICAgMHhDQzYwLCAweENDNjAsIDB4MjM1NiwgMHhDQzYxLCAweENDNjMsIDB4NDdCOSwgMHhDQzY0LCAweENDNjQsIDB4MjMzNywKKyAgICAweENDNjUsIDB4Q0M2QywgMHg0N0JDLCAweENDNkQsIDB4Q0M2RCwgMHgxRkY5LCAweENDNkUsIDB4Q0M3OCwgMHg0N0M0LAorICAgIDB4Q0M3OSwgMHhDQzc5LCAweDIzNTMsIDB4Q0M3QSwgMHhDQzdDLCAweDQ3Q0YsIDB4Q0M3RCwgMHhDQzdELCAweDIwNjEsCisgICAgMHhDQzdFLCAweENDN0UsIDB4NDdEMiwgMHhDQzgwLCAweENDOEQsIDB4NDdEMywgMHhDQzhFLCAweENDOEUsIDB4MUU5NSwKKyAgICAweENDOEYsIDB4Q0M5MywgMHg0N0UxLCAweENDOTQsIDB4Q0M5NCwgMHgyMDQ5LCAweENDOTUsIDB4Q0M5NSwgMHg0N0U2LAorICAgIDB4Q0M5NiwgMHhDQzk2LCAweDFGNDIsIDB4Q0M5NywgMHhDQzlDLCAweDQ3RTcsIDB4Q0M5RCwgMHhDQzlELCAweDFGRTgsCisgICAgMHhDQzlFLCAweENDQTAsIDB4NDdFRCwgMHhDQ0ExLCAweENDRkUsIDB4MERGNCwgMHhDRDQwLCAweENEN0UsIDB4NDdGMCwKKyAgICAweENEODAsIDB4Q0Q4RiwgMHg0ODJGLCAweENEOTAsIDB4Q0Q5MCwgMHgyNURBLCAweENEOTEsIDB4Q0Q5NywgMHg0ODNGLAorICAgIDB4Q0Q5OCwgMHhDRDk4LCAweDI1RDcsIDB4Q0Q5OSwgMHhDREEwLCAweDQ4NDYsIDB4Q0RBMSwgMHhDREZFLCAweDBFNTIsCisgICAgMHhDRTQwLCAweENFNjYsIDB4NDg0RSwgMHhDRTY3LCAweENFNjcsIDB4MjEyRSwgMHhDRTY4LCAweENFNzEsIDB4NDg3NSwKKyAgICAweENFNzIsIDB4Q0U3MiwgMHgyMUIyLCAweENFNzMsIDB4Q0U3RSwgMHg0ODdGLCAweENFODAsIDB4Q0U4MCwgMHg0ODhCLAorICAgIDB4Q0U4MSwgMHhDRTgxLCAweDIxOUUsIDB4Q0U4MiwgMHhDRTg2LCAweDQ4OEMsIDB4Q0U4NywgMHhDRTg3LCAweDI1REMsCisgICAgMHhDRTg4LCAweENFOUEsIDB4NDg5MSwgMHhDRTlCLCAweENFOUIsIDB4MjA2QywgMHhDRTlDLCAweENFOUQsIDB4NDhBNCwKKyAgICAweENFOUUsIDB4Q0U5RSwgMHgyMjI2LCAweENFOUYsIDB4Q0VBMCwgMHg0OEE2LCAweENFQTEsIDB4Q0VGRSwgMHgwRUIwLAorICAgIDB4Q0Y0MCwgMHhDRjRELCAweDQ4QTgsIDB4Q0Y0RSwgMHhDRjRFLCAweDI1RTAsIDB4Q0Y0RiwgMHhDRjU0LCAweDQ4QjYsCisgICAgMHhDRjU1LCAweENGNTUsIDB4MjI3QiwgMHhDRjU2LCAweENGNTcsIDB4NDhCQywgMHhDRjU4LCAweENGNTgsIDB4MjVERSwKKyAgICAweENGNTksIDB4Q0Y1QiwgMHg0OEJFLCAweENGNUMsIDB4Q0Y1QywgMHgyNUUxLCAweENGNUQsIDB4Q0Y2QiwgMHg0OEMxLAorICAgIDB4Q0Y2QywgMHhDRjZDLCAweDI1RDUsIDB4Q0Y2RCwgMHhDRjcyLCAweDQ4RDAsIDB4Q0Y3MywgMHhDRjczLCAweDFFNkIsCisgICAgMHhDRjc0LCAweENGNzQsIDB4NDhENiwgMHhDRjc1LCAweENGNzUsIDB4MjVEQiwgMHhDRjc2LCAweENGNzcsIDB4NDhENywKKyAgICAweENGNzgsIDB4Q0Y3OCwgMHgxRTg5LCAweENGNzksIDB4Q0Y3QiwgMHg0OEQ5LCAweENGN0MsIDB4Q0Y3QywgMHgyNUQ5LAorICAgIDB4Q0Y3RCwgMHhDRjdFLCAweDQ4REMsIDB4Q0Y4MCwgMHhDRjgwLCAweDQ4REUsIDB4Q0Y4MSwgMHhDRjgxLCAweDIyMTEsCisgICAgMHhDRjgyLCAweENGODgsIDB4NDhERiwgMHhDRjg5LCAweENGODksIDB4MjIyOSwgMHhDRjhBLCAweENGOEEsIDB4MjVENiwKKyAgICAweENGOEIsIDB4Q0Y5MiwgMHg0OEU2LCAweENGOTMsIDB4Q0Y5MywgMHgyNURELCAweENGOTQsIDB4Q0Y5NCwgMHgyNURGLAorICAgIDB4Q0Y5NSwgMHhDRjlELCAweDQ4RUUsIDB4Q0Y5RSwgMHhDRjlFLCAweDFGRUYsIDB4Q0Y5RiwgMHhDRjlGLCAweDQ4RjcsCisgICAgMHhDRkEwLCAweENGQTAsIDB4MjVEOCwgMHhDRkExLCAweENGRkUsIDB4MEYwRSwgMHhEMDQwLCAweEQwNEMsIDB4NDhGOCwKKyAgICAweEQwNEQsIDB4RDA0RCwgMHgxRjI5LCAweEQwNEUsIDB4RDA1MCwgMHg0OTA1LCAweEQwNTEsIDB4RDA1MSwgMHgxRTVCLAorICAgIDB4RDA1MiwgMHhEMDU0LCAweDQ5MDgsIDB4RDA1NSwgMHhEMDU1LCAweDIwNzYsIDB4RDA1NiwgMHhEMDVCLCAweDQ5MEIsCisgICAgMHhEMDVDLCAweEQwNUMsIDB4MjI5NywgMHhEMDVELCAweEQwNUYsIDB4NDkxMSwgMHhEMDYwLCAweEQwNjAsIDB4MjY5MCwKKyAgICAweEQwNjEsIDB4RDA2NiwgMHg0OTE0LCAweEQwNjcsIDB4RDA2NywgMHgyMTNGLCAweEQwNjgsIDB4RDA2QiwgMHg0OTFBLAorICAgIDB4RDA2QywgMHhEMDZDLCAweDIxOTgsIDB4RDA2RCwgMHhEMDZELCAweDQ5MUUsIDB4RDA2RSwgMHhEMDZFLCAweDFFODgsCisgICAgMHhEMDZGLCAweEQwN0MsIDB4NDkxRiwgMHhEMDdELCAweEQwN0QsIDB4MjI4QywgMHhEMDdFLCAweEQwN0UsIDB4NDkyRCwKKyAgICAweEQwODAsIDB4RDBBMCwgMHg0OTJFLCAweEQwQTEsIDB4RDBGRSwgMHgwRjZDLCAweEQxNDAsIDB4RDE1NCwgMHg0OTRGLAorICAgIDB4RDE1NSwgMHhEMTU1LCAweDI1RjEsIDB4RDE1NiwgMHhEMTU4LCAweDQ5NjQsIDB4RDE1OSwgMHhEMTU5LCAweDIwMEMsCisgICAgMHhEMTVBLCAweEQxNjAsIDB4NDk2NywgMHhEMTYxLCAweEQxNjEsIDB4MUU1OCwgMHhEMTYyLCAweEQxNjIsIDB4MjJBQywKKyAgICAweEQxNjMsIDB4RDE3NCwgMHg0OTZFLCAweEQxNzUsIDB4RDE3NSwgMHgyNkE3LCAweEQxNzYsIDB4RDE3QywgMHg0OTgwLAorICAgIDB4RDE3RCwgMHhEMTdELCAweDI2NzYsIDB4RDE3RSwgMHhEMTdFLCAweDQ5ODcsIDB4RDE4MCwgMHhEMTlDLCAweDQ5ODgsCisgICAgMHhEMTlELCAweEQxOUQsIDB4MUZFMSwgMHhEMTlFLCAweEQxOUUsIDB4MjVCQiwgMHhEMTlGLCAweEQxQTAsIDB4NDlBNSwKKyAgICAweEQxQTEsIDB4RDFGRSwgMHgwRkNBLCAweEQyNDAsIDB4RDI0MCwgMHgyNUJFLCAweEQyNDEsIDB4RDI0MiwgMHg0OUE3LAorICAgIDB4RDI0MywgMHhEMjQzLCAweDIyREQsIDB4RDI0NCwgMHhEMjRDLCAweDQ5QTksIDB4RDI0RCwgMHhEMjRELCAweDI1QkQsCisgICAgMHhEMjRFLCAweEQyNUIsIDB4NDlCMiwgMHhEMjVDLCAweEQyNUMsIDB4MUUyQSwgMHhEMjVELCAweEQyNjIsIDB4NDlDMCwKKyAgICAweEQyNjMsIDB4RDI2MywgMHgyNUJDLCAweEQyNjQsIDB4RDI2NCwgMHgyNUJBLCAweEQyNjUsIDB4RDI2NywgMHg0OUM2LAorICAgIDB4RDI2OCwgMHhEMjY4LCAweDI1QkYsIDB4RDI2OSwgMHhEMjZDLCAweDQ5QzksIDB4RDI2RCwgMHhEMjZELCAweDIxODcsCisgICAgMHhEMjZFLCAweEQyNkUsIDB4NDlDRCwgMHhEMjZGLCAweEQyNkYsIDB4MjY2QiwgMHhEMjcwLCAweEQyNzEsIDB4NDlDRSwKKyAgICAweEQyNzIsIDB4RDI3MiwgMHgxRTdGLCAweEQyNzMsIDB4RDI3NCwgMHg0OUQwLCAweEQyNzUsIDB4RDI3NSwgMHgyMUFELAorICAgIDB4RDI3NiwgMHhEMjdFLCAweDQ5RDIsIDB4RDI4MCwgMHhEMjg5LCAweDQ5REIsIDB4RDI4QSwgMHhEMjhBLCAweDFGOTYsCisgICAgMHhEMjhCLCAweEQyOEQsIDB4NDlFNSwgMHhEMjhFLCAweEQyOEUsIDB4MUYzMiwgMHhEMjhGLCAweEQyOTEsIDB4NDlFOCwKKyAgICAweEQyOTIsIDB4RDI5MiwgMHgyMDg0LCAweEQyOTMsIDB4RDI5NCwgMHg0OUVCLCAweEQyOTUsIDB4RDI5NSwgMHgyMTM2LAorICAgIDB4RDI5NiwgMHhEMjk2LCAweDQ5RUQsIDB4RDI5NywgMHhEMjk3LCAweDI0QjgsIDB4RDI5OCwgMHhEMjlGLCAweDQ5RUUsCisgICAgMHhEMkEwLCAweEQyQTAsIDB4MjRCQSwgMHhEMkExLCAweEQyRkUsIDB4MTAyOCwgMHhEMzQwLCAweEQzNDMsIDB4NDlGNiwKKyAgICAweEQzNDQsIDB4RDM0NCwgMHgyNEJDLCAweEQzNDUsIDB4RDM0NywgMHg0OUZBLCAweEQzNDgsIDB4RDM0OCwgMHgyMEU0LAorICAgIDB4RDM0OSwgMHhEMzQ5LCAweDQ5RkQsIDB4RDM0QSwgMHhEMzRBLCAweDI0QjksIDB4RDM0QiwgMHhEMzRDLCAweDQ5RkUsCisgICAgMHhEMzRELCAweEQzNEQsIDB4MjRCRCwgMHhEMzRFLCAweEQzNEYsIDB4NEEwMCwgMHhEMzUwLCAweEQzNTAsIDB4MjRCRSwKKyAgICAweEQzNTEsIDB4RDM1NCwgMHg0QTAyLCAweEQzNTUsIDB4RDM1NSwgMHgyNEJGLCAweEQzNTYsIDB4RDM1NywgMHg0QTA2LAorICAgIDB4RDM1OCwgMHhEMzU4LCAweDFGRDIsIDB4RDM1OSwgMHhEMzVBLCAweDRBMDgsIDB4RDM1QiwgMHhEMzVCLCAweDFGRkQsCisgICAgMHhEMzVDLCAweEQzNUMsIDB4NEEwQSwgMHhEMzVELCAweEQzNUQsIDB4MjRCQiwgMHhEMzVFLCAweEQzNUUsIDB4MUYyRCwKKyAgICAweEQzNUYsIDB4RDM3NywgMHg0QTBCLCAweEQzNzgsIDB4RDM3OCwgMHgyNjA5LCAweEQzNzksIDB4RDM3OSwgMHg0QTI0LAorICAgIDB4RDM3QSwgMHhEMzdBLCAweDI2MEEsIDB4RDM3QiwgMHhEMzdCLCAweDRBMjUsIDB4RDM3QywgMHhEMzdDLCAweDFFOTQsCisgICAgMHhEMzdELCAweEQzN0UsIDB4NEEyNiwgMHhEMzgwLCAweEQzODQsIDB4NEEyOCwgMHhEMzg1LCAweEQzODUsIDB4MjJERiwKKyAgICAweEQzODYsIDB4RDM4NiwgMHgxRUNCLCAweEQzODcsIDB4RDM4NywgMHgxRjBELCAweEQzODgsIDB4RDM4QSwgMHg0QTJELAorICAgIDB4RDM4QiwgMHhEMzhCLCAweDFGNzcsIDB4RDM4QywgMHhEMzhDLCAweDRBMzAsIDB4RDM4RCwgMHhEMzhELCAweDIxRUIsCisgICAgMHhEMzhFLCAweEQzOEUsIDB4NEEzMSwgMHhEMzhGLCAweEQzOEYsIDB4MjJFMSwgMHhEMzkwLCAweEQzOTAsIDB4NEEzMiwKKyAgICAweEQzOTEsIDB4RDM5MSwgMHgyMTZGLCAweEQzOTIsIDB4RDM5MiwgMHg0QTMzLCAweEQzOTMsIDB4RDM5MywgMHgyMkUwLAorICAgIDB4RDM5NCwgMHhEMzk1LCAweDRBMzQsIDB4RDM5NiwgMHhEMzk2LCAweDIxRUEsIDB4RDM5NywgMHhEMzk3LCAweDRBMzYsCisgICAgMHhEMzk4LCAweEQzOTgsIDB4MjJFMiwgMHhEMzk5LCAweEQzOTksIDB4MjBDQiwgMHhEMzlBLCAweEQzOUEsIDB4NEEzNywKKyAgICAweEQzOUIsIDB4RDM5QiwgMHgxRjc4LCAweEQzOUMsIDB4RDM5RCwgMHg0QTM4LCAweEQzOUUsIDB4RDM5RSwgMHgxRUUyLAorICAgIDB4RDM5RiwgMHhEMzlGLCAweDRBM0EsIDB4RDNBMCwgMHhEM0EwLCAweDIxRjIsIDB4RDNBMSwgMHhEM0ZFLCAweDEwODYsCisgICAgMHhENDQwLCAweEQ0NDAsIDB4NEEzQiwgMHhENDQxLCAweEQ0NDEsIDB4MjE1MCwgMHhENDQyLCAweEQ0NDQsIDB4NEEzQywKKyAgICAweEQ0NDUsIDB4RDQ0NSwgMHgxRkQzLCAweEQ0NDYsIDB4RDQ0NiwgMHg0QTNGLCAweEQ0NDcsIDB4RDQ0NywgMHgyMkU1LAorICAgIDB4RDQ0OCwgMHhENDRCLCAweDRBNDAsIDB4RDQ0QywgMHhENDRDLCAweDFFRjIsIDB4RDQ0RCwgMHhENDRFLCAweDRBNDQsCisgICAgMHhENDRGLCAweEQ0NEYsIDB4MjExRiwgMHhENDUwLCAweEQ0NTIsIDB4NEE0NiwgMHhENDUzLCAweEQ0NTMsIDB4MjFERCwKKyAgICAweEQ0NTQsIDB4RDQ1NSwgMHg0QTQ5LCAweEQ0NTYsIDB4RDQ1NiwgMHgyMTU0LCAweEQ0NTcsIDB4RDQ1NywgMHg0QTRCLAorICAgIDB4RDQ1OCwgMHhENDU4LCAweDIyRTcsIDB4RDQ1OSwgMHhENDVCLCAweDRBNEMsIDB4RDQ1QywgMHhENDVDLCAweDIyODIsCisgICAgMHhENDVELCAweEQ0NjEsIDB4NEE0RiwgMHhENDYyLCAweEQ0NjIsIDB4MjJFNiwgMHhENDYzLCAweEQ0NjYsIDB4NEE1NCwKKyAgICAweEQ0NjcsIDB4RDQ2NywgMHgyMkU4LCAweEQ0NjgsIDB4RDQ2RCwgMHg0QTU4LCAweEQ0NkUsIDB4RDQ2RSwgMHgyMkU0LAorICAgIDB4RDQ2RiwgMHhENDZGLCAweDRBNUUsIDB4RDQ3MCwgMHhENDcwLCAweDIyNkEsIDB4RDQ3MSwgMHhENDcxLCAweDRBNUYsCisgICAgMHhENDcyLCAweEQ0NzIsIDB4MjJFQiwgMHhENDczLCAweEQ0NzMsIDB4NEE2MCwgMHhENDc0LCAweEQ0NzQsIDB4MjJFOSwKKyAgICAweEQ0NzUsIDB4RDQ3NSwgMHgyMEJELCAweEQ0NzYsIDB4RDQ3NywgMHg0QTYxLCAweEQ0NzgsIDB4RDQ3OCwgMHgyMkVBLAorICAgIDB4RDQ3OSwgMHhENDdBLCAweDRBNjMsIDB4RDQ3QiwgMHhENDdCLCAweDIyQkQsIDB4RDQ3QywgMHhENDdELCAweDRBNjUsCisgICAgMHhENDdFLCAweEQ0N0UsIDB4MUU5RSwgMHhENDgwLCAweEQ0ODEsIDB4NEE2NywgMHhENDgyLCAweEQ0ODIsIDB4MjJGNiwKKyAgICAweEQ0ODMsIDB4RDQ4MywgMHgyMUU3LCAweEQ0ODQsIDB4RDQ4NCwgMHgyMjE2LCAweEQ0ODUsIDB4RDQ4NiwgMHg0QTY5LAorICAgIDB4RDQ4NywgMHhENDg3LCAweDIxMzcsIDB4RDQ4OCwgMHhENDg5LCAweDRBNkIsIDB4RDQ4QSwgMHhENDhBLCAweDIxMkMsCisgICAgMHhENDhCLCAweEQ0OEIsIDB4NEE2RCwgMHhENDhDLCAweEQ0OEMsIDB4MUU2OCwgMHhENDhELCAweEQ0OEQsIDB4MjJGMiwKKyAgICAweEQ0OEUsIDB4RDQ4RSwgMHgxRjM3LCAweEQ0OEYsIDB4RDQ4RiwgMHgyMkYzLCAweEQ0OTAsIDB4RDQ5MCwgMHg0QTZFLAorICAgIDB4RDQ5MSwgMHhENDkxLCAweDIyRUYsIDB4RDQ5MiwgMHhENDkyLCAweDFGNTAsIDB4RDQ5MywgMHhENDkzLCAweDFGMTAsCisgICAgMHhENDk0LCAweEQ0OTQsIDB4MjFDOCwgMHhENDk1LCAweEQ0OTUsIDB4NEE2RiwgMHhENDk2LCAweEQ0OTYsIDB4MjJGMSwKKyAgICAweEQ0OTcsIDB4RDQ5QiwgMHg0QTcwLCAweEQ0OUMsIDB4RDQ5QywgMHgyMkYwLCAweEQ0OUQsIDB4RDQ5RSwgMHg0QTc1LAorICAgIDB4RDQ5RiwgMHhENDlGLCAweDIyRUUsIDB4RDRBMCwgMHhENEEwLCAweDRBNzcsIDB4RDRBMSwgMHhENEZFLCAweDEwRTQsCisgICAgMHhENTQwLCAweEQ1NDIsIDB4NEE3OCwgMHhENTQzLCAweEQ1NDMsIDB4MjJFRCwgMHhENTQ0LCAweEQ1NDQsIDB4MjI5RSwKKyAgICAweEQ1NDUsIDB4RDU0NSwgMHgyMkVDLCAweEQ1NDYsIDB4RDU0NiwgMHgxRkUyLCAweEQ1NDcsIDB4RDU0OSwgMHg0QTdCLAorICAgIDB4RDU0QSwgMHhENTRBLCAweDIwRkUsIDB4RDU0QiwgMHhENTRELCAweDRBN0UsIDB4RDU0RSwgMHhENTRGLCAweDIyRjksCisgICAgMHhENTUwLCAweEQ1NTAsIDB4NEE4MSwgMHhENTUxLCAweEQ1NTEsIDB4MUVBRiwgMHhENTUyLCAweEQ1NTMsIDB4NEE4MiwKKyAgICAweEQ1NTQsIDB4RDU1NCwgMHgyMjM2LCAweEQ1NTUsIDB4RDU1NSwgMHg0QTg0LCAweEQ1NTYsIDB4RDU1NiwgMHgyMkY3LAorICAgIDB4RDU1NywgMHhENTU5LCAweDRBODUsIDB4RDU1QSwgMHhENTVBLCAweDIyM0QsIDB4RDU1QiwgMHhENTVCLCAweDRBODgsCisgICAgMHhENTVDLCAweEQ1NUMsIDB4MUU4MiwgMHhENTVELCAweEQ1NUQsIDB4MUZCNiwgMHhENTVFLCAweEQ1NUUsIDB4NEE4OSwKKyAgICAweEQ1NUYsIDB4RDU1RiwgMHgyMUE0LCAweEQ1NjAsIDB4RDU2MCwgMHgyMUFBLCAweEQ1NjEsIDB4RDU2MSwgMHgyMkY4LAorICAgIDB4RDU2MiwgMHhENTYyLCAweDIxNTEsIDB4RDU2MywgMHhENTYzLCAweDRBOEEsIDB4RDU2NCwgMHhENTY0LCAweDFGNjAsCisgICAgMHhENTY1LCAweEQ1NjcsIDB4NEE4QiwgMHhENTY4LCAweEQ1NjgsIDB4MjE0NywgMHhENTY5LCAweEQ1NkIsIDB4NEE4RSwKKyAgICAweEQ1NkMsIDB4RDU2QywgMHgyMTQ1LCAweEQ1NkQsIDB4RDU2RCwgMHg0QTkxLCAweEQ1NkUsIDB4RDU2RSwgMHgxRkRDLAorICAgIDB4RDU2RiwgMHhENTcxLCAweDRBOTIsIDB4RDU3MiwgMHhENTcyLCAweDIzMDEsIDB4RDU3MywgMHhENTc0LCAweDRBOTUsCisgICAgMHhENTc1LCAweEQ1NzUsIDB4MUVGNSwgMHhENTc2LCAweEQ1NzcsIDB4NEE5NywgMHhENTc4LCAweEQ1NzgsIDB4MjIxOCwKKyAgICAweEQ1NzksIDB4RDU3QSwgMHg0QTk5LCAweEQ1N0IsIDB4RDU3QiwgMHgxRUM2LCAweEQ1N0MsIDB4RDU3RCwgMHg0QTlCLAorICAgIDB4RDU3RSwgMHhENTdFLCAweDIzMDAsIDB4RDU4MCwgMHhENTgwLCAweDRBOUQsIDB4RDU4MSwgMHhENTgxLCAweDIyQjQsCisgICAgMHhENTgyLCAweEQ1ODMsIDB4NEE5RSwgMHhENTg0LCAweEQ1ODQsIDB4MjE2OSwgMHhENTg1LCAweEQ1ODUsIDB4NEFBMCwKKyAgICAweEQ1ODYsIDB4RDU4NiwgMHgyMkZELCAweEQ1ODcsIDB4RDU4NywgMHg0QUExLCAweEQ1ODgsIDB4RDU4OCwgMHgyMEVBLAorICAgIDB4RDU4OSwgMHhENTg5LCAweDRBQTIsIDB4RDU4QSwgMHhENThBLCAweDIyRjQsIDB4RDU4QiwgMHhENThCLCAweDRBQTMsCisgICAgMHhENThDLCAweEQ1OEMsIDB4MjJGQiwgMHhENThELCAweEQ1OEQsIDB4NEFBNCwgMHhENThFLCAweEQ1OEUsIDB4MjJGQywKKyAgICAweEQ1OEYsIDB4RDU4RiwgMHgyMDI3LCAweEQ1OTAsIDB4RDU5MiwgMHg0QUE1LCAweEQ1OTMsIDB4RDU5MywgMHgyMDYwLAorICAgIDB4RDU5NCwgMHhENTk0LCAweDIyRkYsIDB4RDU5NSwgMHhENTk3LCAweDRBQTgsIDB4RDU5OCwgMHhENTk4LCAweDIyRkUsCisgICAgMHhENTk5LCAweEQ1OTksIDB4MUVDNywgMHhENTlBLCAweEQ1OUEsIDB4NEFBQiwgMHhENTlCLCAweEQ1OUIsIDB4MjMwQywKKyAgICAweEQ1OUMsIDB4RDU5RSwgMHg0QUFDLCAweEQ1OUYsIDB4RDU5RiwgMHgyMkY1LCAweEQ1QTAsIDB4RDVBMCwgMHg0QUFGLAorICAgIDB4RDVBMSwgMHhENUZFLCAweDExNDIsIDB4RDY0MCwgMHhENjQwLCAweDIzMDYsIDB4RDY0MSwgMHhENjQxLCAweDRBQjAsCisgICAgMHhENjQyLCAweEQ2NDIsIDB4MjMwQSwgMHhENjQzLCAweEQ2NDMsIDB4MjFEMywgMHhENjQ0LCAweEQ2NDYsIDB4NEFCMSwKKyAgICAweEQ2NDcsIDB4RDY0NywgMHgyMzAzLCAweEQ2NDgsIDB4RDY0OCwgMHg0QUI0LCAweEQ2NDksIDB4RDY0OSwgMHgyMzA3LAorICAgIDB4RDY0QSwgMHhENjRBLCAweDIzMEIsIDB4RDY0QiwgMHhENjRDLCAweDRBQjUsIDB4RDY0RCwgMHhENjRELCAweDFGNUYsCisgICAgMHhENjRFLCAweEQ2NEUsIDB4NEFCNywgMHhENjRGLCAweEQ2NEYsIDB4MjMwOSwgMHhENjUwLCAweEQ2NTEsIDB4NEFCOCwKKyAgICAweEQ2NTIsIDB4RDY1MiwgMHgyMzAyLCAweEQ2NTMsIDB4RDY1MywgMHgxRjA0LCAweEQ2NTQsIDB4RDY1NCwgMHgyMjlELAorICAgIDB4RDY1NSwgMHhENjU1LCAweDRBQkEsIDB4RDY1NiwgMHhENjU2LCAweDIxRkIsIDB4RDY1NywgMHhENjU3LCAweDRBQkIsCisgICAgMHhENjU4LCAweEQ2NTgsIDB4MjMwOCwgMHhENjU5LCAweEQ2NTksIDB4NEFCQywgMHhENjVBLCAweEQ2NUEsIDB4MjBBQywKKyAgICAweEQ2NUIsIDB4RDY1QiwgMHg0QUJELCAweEQ2NUMsIDB4RDY1QywgMHgyMDhFLCAweEQ2NUQsIDB4RDY1RCwgMHgyMzA1LAorICAgIDB4RDY1RSwgMHhENjVFLCAweDIxOTcsIDB4RDY1RiwgMHhENjVGLCAweDRBQkUsIDB4RDY2MCwgMHhENjYwLCAweDIxNzEsCisgICAgMHhENjYxLCAweEQ2NjEsIDB4MjI5OCwgMHhENjYyLCAweEQ2NjQsIDB4NEFCRiwgMHhENjY1LCAweEQ2NjUsIDB4MUY1NywKKyAgICAweEQ2NjYsIDB4RDY2OCwgMHg0QUMyLCAweEQ2NjksIDB4RDY2OSwgMHgyMDgyLCAweEQ2NkEsIDB4RDY2QSwgMHg0QUM1LAorICAgIDB4RDY2QiwgMHhENjZCLCAweDIzMTEsIDB4RDY2QywgMHhENjZFLCAweDRBQzYsIDB4RDY2RiwgMHhENjZGLCAweDIzMDQsCisgICAgMHhENjcwLCAweEQ2NzAsIDB4NEFDOSwgMHhENjcxLCAweEQ2NzEsIDB4MjMwRiwgMHhENjcyLCAweEQ2NzIsIDB4MUUzNSwKKyAgICAweEQ2NzMsIDB4RDY3MywgMHg0QUNBLCAweEQ2NzQsIDB4RDY3NCwgMHgyMEQxLCAweEQ2NzUsIDB4RDY3NSwgMHgyMzEwLAorICAgIDB4RDY3NiwgMHhENjc2LCAweDFGQTMsIDB4RDY3NywgMHhENjc3LCAweDRBQ0IsIDB4RDY3OCwgMHhENjc4LCAweDIxRDYsCisgICAgMHhENjc5LCAweEQ2N0IsIDB4NEFDQywgMHhENjdDLCAweEQ2N0MsIDB4MjIwNiwgMHhENjdELCAweEQ2N0UsIDB4NEFDRiwKKyAgICAweEQ2ODAsIDB4RDY4MiwgMHg0QUQxLCAweEQ2ODMsIDB4RDY4MywgMHgyMzBELCAweEQ2ODQsIDB4RDY4NSwgMHg0QUQ0LAorICAgIDB4RDY4NiwgMHhENjg2LCAweDIzMTIsIDB4RDY4NywgMHhENjg3LCAweDIwOEQsIDB4RDY4OCwgMHhENjg4LCAweDIzMTMsCisgICAgMHhENjg5LCAweEQ2OEQsIDB4NEFENiwgMHhENjhFLCAweEQ2OEUsIDB4MjJFMywgMHhENjhGLCAweEQ2OTMsIDB4NEFEQiwKKyAgICAweEQ2OTQsIDB4RDY5NCwgMHgxRkJBLCAweEQ2OTUsIDB4RDY5OCwgMHg0QUUwLCAweEQ2OTksIDB4RDY5OSwgMHgyMDc4LAorICAgIDB4RDY5QSwgMHhENkEwLCAweDRBRTQsIDB4RDZBMSwgMHhENkZFLCAweDExQTAsIDB4RDc0MCwgMHhENzQyLCAweDRBRUIsCisgICAgMHhENzQzLCAweEQ3NDMsIDB4MjI4OCwgMHhENzQ0LCAweEQ3NDcsIDB4NEFFRSwgMHhENzQ4LCAweEQ3NDgsIDB4MjMxNiwKKyAgICAweEQ3NDksIDB4RDc0OSwgMHgxRjZCLCAweEQ3NEEsIDB4RDc0RiwgMHg0QUYyLCAweEQ3NTAsIDB4RDc1MCwgMHgyMzE0LAorICAgIDB4RDc1MSwgMHhENzUxLCAweDRBRjgsIDB4RDc1MiwgMHhENzUyLCAweDIxMzAsIDB4RDc1MywgMHhENzUzLCAweDIzMTUsCisgICAgMHhENzU0LCAweEQ3NTQsIDB4MjE2OCwgMHhENzU1LCAweEQ3NTUsIDB4NEFGOSwgMHhENzU2LCAweEQ3NTYsIDB4MjBDNCwKKyAgICAweEQ3NTcsIDB4RDc2MywgMHg0QUZBLCAweEQ3NjQsIDB4RDc2NCwgMHgyMzE4LCAweEQ3NjUsIDB4RDc2NiwgMHg0QjA3LAorICAgIDB4RDc2NywgMHhENzY3LCAweDIyMTksIDB4RDc2OCwgMHhENzY4LCAweDIyMTcsIDB4RDc2OSwgMHhENzZCLCAweDRCMDksCisgICAgMHhENzZDLCAweEQ3NkMsIDB4MjBENSwgMHhENzZELCAweEQ3NkUsIDB4NEIwQywgMHhENzZGLCAweEQ3NkYsIDB4MUY0QSwKKyAgICAweEQ3NzAsIDB4RDc3NCwgMHg0QjBFLCAweEQ3NzUsIDB4RDc3NSwgMHgyMjQwLCAweEQ3NzYsIDB4RDc3NywgMHg0QjEzLAorICAgIDB4RDc3OCwgMHhENzc4LCAweDFFRDMsIDB4RDc3OSwgMHhENzdFLCAweDRCMTUsIDB4RDc4MCwgMHhENzgyLCAweDRCMUIsCisgICAgMHhENzgzLCAweEQ3ODMsIDB4MUU0OSwgMHhENzg0LCAweEQ3ODYsIDB4NEIxRSwgMHhENzg3LCAweEQ3ODcsIDB4MjYxQiwKKyAgICAweEQ3ODgsIDB4RDc4QSwgMHg0QjIxLCAweEQ3OEIsIDB4RDc4QiwgMHgxRTZELCAweEQ3OEMsIDB4RDc4QywgMHgyMEY4LAorICAgIDB4RDc4RCwgMHhENzhELCAweDRCMjQsIDB4RDc4RSwgMHhENzhFLCAweDFGRkIsIDB4RDc4RiwgMHhENzhGLCAweDIzMTksCisgICAgMHhENzkwLCAweEQ3OTQsIDB4NEIyNSwgMHhENzk1LCAweEQ3OTUsIDB4MjMwRSwgMHhENzk2LCAweEQ3OTYsIDB4NEIyQSwKKyAgICAweEQ3OTcsIDB4RDc5NywgMHgyMzE3LCAweEQ3OTgsIDB4RDdBMCwgMHg0QjJCLCAweEQ3QTEsIDB4RDdGOSwgMHgxMUZFLAorICAgIDB4RDg0MCwgMHhEODRDLCAweDRCMzQsIDB4RDg0RCwgMHhEODRELCAweDIwQzgsIDB4RDg0RSwgMHhEODUyLCAweDRCNDEsCisgICAgMHhEODUzLCAweEQ4NTMsIDB4MUVGRCwgMHhEODU0LCAweEQ4N0UsIDB4NEI0NiwgMHhEODgwLCAweEQ4OEYsIDB4NEI3MSwKKyAgICAweEQ4OTAsIDB4RDg5MCwgMHgxRTNCLCAweEQ4OTEsIDB4RDg5MSwgMHgyMjdGLCAweEQ4OTIsIDB4RDg5MiwgMHg0QjgxLAorICAgIDB4RDg5MywgMHhEODkzLCAweDFGMEMsIDB4RDg5NCwgMHhEODk0LCAweDFFNTksIDB4RDg5NSwgMHhEODk1LCAweDFGMjQsCisgICAgMHhEODk2LCAweEQ4OTksIDB4NEI4MiwgMHhEODlBLCAweEQ4OUEsIDB4MjBCQSwgMHhEODlCLCAweEQ4OUIsIDB4MUY2NSwKKyAgICAweEQ4OUMsIDB4RDg5QywgMHgxRUYwLCAweEQ4OUQsIDB4RDg5RCwgMHgyMTY0LCAweEQ4OUUsIDB4RDg5RSwgMHgxRjMwLAorICAgIDB4RDg5RiwgMHhEODlGLCAweDIyNjEsIDB4RDhBMCwgMHhEOEEwLCAweDRCODYsIDB4RDhBMSwgMHhEOEZFLCAweDEyNTcsCisgICAgMHhEOTQwLCAweEQ5NDAsIDB4NEI4NywgMHhEOTQxLCAweEQ5NDEsIDB4MjJBMiwgMHhEOTQyLCAweEQ5NDIsIDB4MjRBQiwKKyAgICAweEQ5NDMsIDB4RDk0MywgMHg0Qjg4LCAweEQ5NDQsIDB4RDk0NCwgMHgyNEFGLCAweEQ5NDUsIDB4RDk0NSwgMHgxRUU4LAorICAgIDB4RDk0NiwgMHhEOTQ2LCAweDFGMzksIDB4RDk0NywgMHhEOTQ3LCAweDRCODksIDB4RDk0OCwgMHhEOTQ4LCAweDFFNDgsCisgICAgMHhEOTQ5LCAweEQ5NDksIDB4MjA3MCwgMHhEOTRBLCAweEQ5NEEsIDB4MUVBOCwgMHhEOTRCLCAweEQ5NEIsIDB4NEI4QSwKKyAgICAweEQ5NEMsIDB4RDk0QywgMHgyNEFDLCAweEQ5NEQsIDB4RDk0RCwgMHgxRUY3LCAweEQ5NEUsIDB4RDk0RSwgMHgyMTc2LAorICAgIDB4RDk0RiwgMHhEOTRGLCAweDI0QUQsIDB4RDk1MCwgMHhEOTUwLCAweDRCOEIsIDB4RDk1MSwgMHhEOTUxLCAweDIwN0IsCisgICAgMHhEOTUyLCAweEQ5NTIsIDB4MUY0NSwgMHhEOTUzLCAweEQ5NTMsIDB4MjRBQSwgMHhEOTU0LCAweEQ5NTQsIDB4MjA0QiwKKyAgICAweEQ5NTUsIDB4RDk1NSwgMHgyMDJGLCAweEQ5NTYsIDB4RDk1NiwgMHgxRjVBLCAweEQ5NTcsIDB4RDk1NywgMHgyNEIwLAorICAgIDB4RDk1OCwgMHhEOTU4LCAweDRCOEMsIDB4RDk1OSwgMHhEOTU5LCAweDIyQjcsIDB4RDk1QSwgMHhEOTVBLCAweDFGN0YsCisgICAgMHhEOTVCLCAweEQ5NUIsIDB4NEI4RCwgMHhEOTVDLCAweEQ5NUMsIDB4MjI2NSwgMHhEOTVELCAweEQ5NjIsIDB4NEI4RSwKKyAgICAweEQ5NjMsIDB4RDk2MywgMHgyNEIyLCAweEQ5NjQsIDB4RDk2NCwgMHgyMTFCLCAweEQ5NjUsIDB4RDk2NSwgMHgxRTUxLAorICAgIDB4RDk2NiwgMHhEOTY2LCAweDRCOTQsIDB4RDk2NywgMHhEOTY3LCAweDI0QjQsIDB4RDk2OCwgMHhEOTZCLCAweDRCOTUsCisgICAgMHhEOTZDLCAweEQ5NkMsIDB4MjRCMywgMHhEOTZELCAweEQ5NkQsIDB4NEI5OSwgMHhEOTZFLCAweEQ5NkUsIDB4MUU5RiwKKyAgICAweEQ5NkYsIDB4RDk2RiwgMHg0QjlBLCAweEQ5NzAsIDB4RDk3MCwgMHgyMTE4LCAweEQ5NzEsIDB4RDk3MSwgMHg0QjlCLAorICAgIDB4RDk3MiwgMHhEOTcyLCAweDIwQjQsIDB4RDk3MywgMHhEOTczLCAweDIzQUYsIDB4RDk3NCwgMHhEOTc0LCAweDIxQkIsCisgICAgMHhEOTc1LCAweEQ5NzUsIDB4MjA3MiwgMHhEOTc2LCAweEQ5NzYsIDB4MUY5NSwgMHhEOTc3LCAweEQ5NzcsIDB4NEI5QywKKyAgICAweEQ5NzgsIDB4RDk3OCwgMHgxRjBBLCAweEQ5NzksIDB4RDk3OSwgMHgyNEI2LCAweEQ5N0EsIDB4RDk3QiwgMHg0QjlELAorICAgIDB4RDk3QywgMHhEOTdDLCAweDIyOTEsIDB4RDk3RCwgMHhEOTdELCAweDI0QjUsIDB4RDk3RSwgMHhEOTdFLCAweDIyNzgsCisgICAgMHhEOTgwLCAweEQ5ODAsIDB4MUVENCwgMHhEOTgxLCAweEQ5ODYsIDB4NEI5RiwgMHhEOTg3LCAweEQ5ODcsIDB4MUZGMywKKyAgICAweEQ5ODgsIDB4RDk4QywgMHg0QkE1LCAweEQ5OEQsIDB4RDk4RCwgMHgyMkE5LCAweEQ5OEUsIDB4RDk4RSwgMHgyNEI3LAorICAgIDB4RDk4RiwgMHhEOThGLCAweDFGMjgsIDB4RDk5MCwgMHhEOTkwLCAweDIxMDksIDB4RDk5MSwgMHhEOTkxLCAweDIyQzcsCisgICAgMHhEOTkyLCAweEQ5OTYsIDB4NEJBQSwgMHhEOTk3LCAweEQ5OTcsIDB4MjRBRSwgMHhEOTk4LCAweEQ5OTgsIDB4MjJCMSwKKyAgICAweEQ5OTksIDB4RDk5QSwgMHg0QkFGLCAweEQ5OUIsIDB4RDk5QiwgMHgyMjY2LCAweEQ5OUMsIDB4RDk5QywgMHg0QkIxLAorICAgIDB4RDk5RCwgMHhEOTlELCAweDIyNUIsIDB4RDk5RSwgMHhEOTlFLCAweDIyQzQsIDB4RDk5RiwgMHhEOTlGLCAweDRCQjIsCisgICAgMHhEOUEwLCAweEQ5QTAsIDB4MjExNSwgMHhEOUExLCAweEQ5RkUsIDB4MTJCNSwgMHhEQTQwLCAweERBNDAsIDB4NEJCMywKKyAgICAweERBNDEsIDB4REE0MSwgMHgyMjJBLCAweERBNDIsIDB4REE0MiwgMHgyNEIxLCAweERBNDMsIDB4REE0NywgMHg0QkI0LAorICAgIDB4REE0OCwgMHhEQTQ4LCAweDIxM0QsIDB4REE0OSwgMHhEQTRDLCAweDRCQjksIDB4REE0RCwgMHhEQTRELCAweDFGMTUsCisgICAgMHhEQTRFLCAweERBNEUsIDB4MjI1QywgMHhEQTRGLCAweERBNzIsIDB4NEJCRCwgMHhEQTczLCAweERBNzMsIDB4MUYxNCwKKyAgICAweERBNzQsIDB4REE3NiwgMHg0QkUxLCAweERBNzcsIDB4REE3NywgMHgyMjdBLCAweERBNzgsIDB4REE3RSwgMHg0QkU0LAorICAgIDB4REE4MCwgMHhEQTg0LCAweDRCRUIsIDB4REE4NSwgMHhEQTg1LCAweDIwRUUsIDB4REE4NiwgMHhEQThELCAweDRCRjAsCisgICAgMHhEQThFLCAweERBOEUsIDB4MjVGOCwgMHhEQThGLCAweERBQTAsIDB4NEJGOCwgMHhEQUExLCAweERBRkUsIDB4MTMxMywKKyAgICAweERCNDAsIDB4REI1RiwgMHg0QzBBLCAweERCNjAsIDB4REI2MCwgMHgxRjk0LCAweERCNjEsIDB4REI3NywgMHg0QzJBLAorICAgIDB4REI3OCwgMHhEQjc4LCAweDIyMzAsIDB4REI3OSwgMHhEQjdFLCAweDRDNDEsIDB4REI4MCwgMHhEQjgzLCAweDRDNDcsCisgICAgMHhEQjg0LCAweERCODQsIDB4MjVGRCwgMHhEQjg1LCAweERCOEEsIDB4NEM0QiwgMHhEQjhCLCAweERCOEIsIDB4MjYwMCwKKyAgICAweERCOEMsIDB4REI5NywgMHg0QzUxLCAweERCOTgsIDB4REI5OCwgMHgyNjA2LCAweERCOTksIDB4REJBMCwgMHg0QzVELAorICAgIDB4REJBMSwgMHhEQkZFLCAweDEzNzEsIDB4REM0MCwgMHhEQzQ0LCAweDRDNjUsIDB4REM0NSwgMHhEQzQ1LCAweDI1RkYsCisgICAgMHhEQzQ2LCAweERDNEUsIDB4NEM2QSwgMHhEQzRGLCAweERDNEYsIDB4MjVGQywgMHhEQzUwLCAweERDNTAsIDB4MUU4QywKKyAgICAweERDNTEsIDB4REM1MSwgMHgyNjAyLCAweERDNTIsIDB4REM1MiwgMHg0QzczLCAweERDNTMsIDB4REM1MywgMHgyMjRELAorICAgIDB4REM1NCwgMHhEQzU0LCAweDRDNzQsIDB4REM1NSwgMHhEQzU1LCAweDI2MDQsIDB4REM1NiwgMHhEQzU2LCAweDI1RkUsCisgICAgMHhEQzU3LCAweERDNTcsIDB4MjYwMywgMHhEQzU4LCAweERDNUMsIDB4NEM3NSwgMHhEQzVELCAweERDNUQsIDB4MjYwMSwKKyAgICAweERDNUUsIDB4REM2MSwgMHg0QzdBLCAweERDNjIsIDB4REM2MiwgMHgyNjA1LCAweERDNjMsIDB4REM2NSwgMHg0QzdFLAorICAgIDB4REM2NiwgMHhEQzY2LCAweDFFQTMsIDB4REM2NywgMHhEQzY3LCAweDI2MDgsIDB4REM2OCwgMHhEQzZBLCAweDRDODEsCisgICAgMHhEQzZCLCAweERDNkIsIDB4MjYwNywgMHhEQzZDLCAweERDN0IsIDB4NEM4NCwgMHhEQzdDLCAweERDN0MsIDB4MjBGMCwKKyAgICAweERDN0QsIDB4REM3RSwgMHg0Qzk0LCAweERDODAsIDB4REM4NiwgMHg0Qzk2LCAweERDODcsIDB4REM4NywgMHgxRTdCLAorICAgIDB4REM4OCwgMHhEQzg4LCAweDIyNjcsIDB4REM4OSwgMHhEQzg5LCAweDFGMzYsIDB4REM4QSwgMHhEQzhBLCAweDFGRDYsCisgICAgMHhEQzhCLCAweERDOEQsIDB4NEM5RCwgMHhEQzhFLCAweERDOEUsIDB4MjFFMCwgMHhEQzhGLCAweERDOEYsIDB4NENBMCwKKyAgICAweERDOTAsIDB4REM5MCwgMHgyNDhDLCAweERDOTEsIDB4REM5NiwgMHg0Q0ExLCAweERDOTcsIDB4REM5NywgMHgyNDhELAorICAgIDB4REM5OCwgMHhEQzlBLCAweDRDQTcsIDB4REM5QiwgMHhEQzlCLCAweDIxMDIsIDB4REM5QywgMHhEQzlGLCAweDRDQUEsCisgICAgMHhEQ0EwLCAweERDQTAsIDB4MjQ5NCwgMHhEQ0ExLCAweERDRkUsIDB4MTNDRiwgMHhERDQwLCAweERENDUsIDB4NENBRSwKKyAgICAweERENDYsIDB4REQ0NiwgMHgyNDkzLCAweERENDcsIDB4REQ0QywgMHg0Q0I0LCAweERENEQsIDB4REQ0RCwgMHgyNDhFLAorICAgIDB4REQ0RSwgMHhERDUyLCAweDRDQkEsIDB4REQ1MywgMHhERDUzLCAweDIyOTksIDB4REQ1NCwgMHhERDU0LCAweDI0OTEsCisgICAgMHhERDU1LCAweERENTUsIDB4MjQ5NiwgMHhERDU2LCAweERENTYsIDB4MjQ4RiwgMHhERDU3LCAweERENTcsIDB4MjQ5MiwKKyAgICAweERENTgsIDB4REQ1OCwgMHg0Q0JGLCAweERENTksIDB4REQ1OSwgMHgyNDk3LCAweERENUEsIDB4REQ1RCwgMHg0Q0MwLAorICAgIDB4REQ1RSwgMHhERDVFLCAweDFGQjEsIDB4REQ1RiwgMHhERDVGLCAweDRDQzQsIDB4REQ2MCwgMHhERDYwLCAweDI0OUEsCisgICAgMHhERDYxLCAweERENjEsIDB4NENDNSwgMHhERDYyLCAweERENjIsIDB4MjQ5OSwgMHhERDYzLCAweERENjMsIDB4NENDNiwKKyAgICAweERENjQsIDB4REQ2NCwgMHgyMjU4LCAweERENjUsIDB4REQ2NSwgMHgyNDk4LCAweERENjYsIDB4REQ2QywgMHg0Q0M3LAorICAgIDB4REQ2RCwgMHhERDZELCAweDI0OUIsIDB4REQ2RSwgMHhERDZFLCAweDRDQ0UsIDB4REQ2RiwgMHhERDZGLCAweDFGMDksCisgICAgMHhERDcwLCAweERENzAsIDB4MjBFNiwgMHhERDcxLCAweERENzUsIDB4NENDRiwgMHhERDc2LCAweERENzYsIDB4MjAyNiwKKyAgICAweERENzcsIDB4REQ3NywgMHgyNDlGLCAweERENzgsIDB4REQ3OCwgMHgxRjU5LCAweERENzksIDB4REQ3QSwgMHgyNDlELAorICAgIDB4REQ3QiwgMHhERDdFLCAweDRDRDQsIDB4REQ4MCwgMHhERDgwLCAweDRDRDgsIDB4REQ4MSwgMHhERDgxLCAweDFGM0IsCisgICAgMHhERDgyLCAweEREODIsIDB4MjQ5QywgMHhERDgzLCAweEREODQsIDB4NENEOSwgMHhERDg1LCAweEREODUsIDB4MUUzQSwKKyAgICAweEREODYsIDB4REQ4NiwgMHgyMDVCLCAweEREODcsIDB4REQ4QSwgMHg0Q0RCLCAweEREOEIsIDB4REQ4QiwgMHgxRjcwLAorICAgIDB4REQ4QywgMHhERDhFLCAweDRDREYsIDB4REQ4RiwgMHhERDhGLCAweDI0QTAsIDB4REQ5MCwgMHhERDkzLCAweDRDRTIsCisgICAgMHhERDk0LCAweEREOTQsIDB4MjEzQiwgMHhERDk1LCAweEREOTYsIDB4NENFNiwgMHhERDk3LCAweEREOTcsIDB4MUYwNywKKyAgICAweEREOTgsIDB4REQ5OSwgMHg0Q0U4LCAweEREOUEsIDB4REQ5QSwgMHgyMjcwLCAweEREOUIsIDB4REQ5QiwgMHgyMjM3LAorICAgIDB4REQ5QywgMHhERDlELCAweDRDRUEsIDB4REQ5RSwgMHhERDlFLCAweDI0RDIsIDB4REQ5RiwgMHhERDlGLCAweDRDRUMsCisgICAgMHhEREEwLCAweEREQTAsIDB4MjFCMywgMHhEREExLCAweERERkUsIDB4MTQyRCwgMHhERTQwLCAweERFNDAsIDB4MjI0NSwKKyAgICAweERFNDEsIDB4REU0MSwgMHgyNEExLCAweERFNDIsIDB4REU0MywgMHg0Q0VELCAweERFNDQsIDB4REU0NCwgMHgyMkE4LAorICAgIDB4REU0NSwgMHhERTQ3LCAweDRDRUYsIDB4REU0OCwgMHhERTQ4LCAweDIyN0MsIDB4REU0OSwgMHhERTQ5LCAweDFGQjAsCisgICAgMHhERTRBLCAweERFNEUsIDB4NENGMiwgMHhERTRGLCAweERFNEYsIDB4MjRBMiwgMHhERTUwLCAweERFNTksIDB4NENGNywKKyAgICAweERFNUEsIDB4REU1QSwgMHgxRjQ2LCAweERFNUIsIDB4REU1QiwgMHg0RDAxLCAweERFNUMsIDB4REU1QywgMHgyMzgwLAorICAgIDB4REU1RCwgMHhERTVELCAweDI0OTUsIDB4REU1RSwgMHhERTVFLCAweDREMDIsIDB4REU1RiwgMHhERTVGLCAweDI0OTAsCisgICAgMHhERTYwLCAweERFNkEsIDB4NEQwMywgMHhERTZCLCAweERFNkIsIDB4MUUzMCwgMHhERTZDLCAweERFNkUsIDB4NEQwRSwKKyAgICAweERFNkYsIDB4REU2RiwgMHgxRTlELCAweERFNzAsIDB4REU3MCwgMHgxRTRCLCAweERFNzEsIDB4REU3MSwgMHgxRTRBLAorICAgIDB4REU3MiwgMHhERTcyLCAweDIwQUEsIDB4REU3MywgMHhERTdFLCAweDREMTEsIDB4REU4MCwgMHhERTkxLCAweDREMUQsCisgICAgMHhERTkyLCAweERFOTIsIDB4MjY3QiwgMHhERTkzLCAweERFOUUsIDB4NEQyRiwgMHhERTlGLCAweERFOUYsIDB4MjNGMiwKKyAgICAweERFQTAsIDB4REVBMCwgMHg0RDNCLCAweERFQTEsIDB4REVGRSwgMHgxNDhCLCAweERGNDAsIDB4REY0MCwgMHgyMjdFLAorICAgIDB4REY0MSwgMHhERjQxLCAweDREM0MsIDB4REY0MiwgMHhERjQyLCAweDIwMTksIDB4REY0MywgMHhERjRDLCAweDREM0QsCisgICAgMHhERjRELCAweERGNEQsIDB4MUZCQiwgMHhERjRFLCAweERGNUIsIDB4NEQ0NywgMHhERjVDLCAweERGNUMsIDB4MjI1MywKKyAgICAweERGNUQsIDB4REY1RCwgMHg0RDU1LCAweERGNUUsIDB4REY1RSwgMHgxRjNFLCAweERGNUYsIDB4REY1RiwgMHgxRUE2LAorICAgIDB4REY2MCwgMHhERjYwLCAweDIxOEUsIDB4REY2MSwgMHhERjYzLCAweDRENTYsIDB4REY2NCwgMHhERjY0LCAweDIxRUMsCisgICAgMHhERjY1LCAweERGNjUsIDB4NEQ1OSwgMHhERjY2LCAweERGNjYsIDB4MUVCRSwgMHhERjY3LCAweERGNjcsIDB4NEQ1QSwKKyAgICAweERGNjgsIDB4REY2OCwgMHgyMjRBLCAweERGNjksIDB4REY2QywgMHg0RDVCLCAweERGNkQsIDB4REY2RCwgMHgyMTMzLAorICAgIDB4REY2RSwgMHhERjczLCAweDRENUYsIDB4REY3NCwgMHhERjc0LCAweDFFODQsIDB4REY3NSwgMHhERjc2LCAweDRENjUsCisgICAgMHhERjc3LCAweERGNzcsIDB4MjBDRiwgMHhERjc4LCAweERGNzgsIDB4MjFFMiwgMHhERjc5LCAweERGNzksIDB4NEQ2NywKKyAgICAweERGN0EsIDB4REY3QSwgMHgyMjBGLCAweERGN0IsIDB4REY3QiwgMHg0RDY4LCAweERGN0MsIDB4REY3QywgMHgyMDI5LAorICAgIDB4REY3RCwgMHhERjdELCAweDRENjksIDB4REY3RSwgMHhERjdFLCAweDIwNzMsIDB4REY4MCwgMHhERjgwLCAweDFGNTUsCisgICAgMHhERjgxLCAweERGODIsIDB4NEQ2QSwgMHhERjgzLCAweERGODMsIDB4MjNGMSwgMHhERjg0LCAweERGODQsIDB4NEQ2QywKKyAgICAweERGODUsIDB4REY4NSwgMHgxRTQ2LCAweERGODYsIDB4REY4OCwgMHg0RDZELCAweERGODksIDB4REY4OSwgMHgyMDYzLAorICAgIDB4REY4QSwgMHhERjhBLCAweDIzRjMsIDB4REY4QiwgMHhERkEwLCAweDRENzAsIDB4REZBMSwgMHhERkZFLCAweDE0RTksCisgICAgMHhFMDQwLCAweEUwNEYsIDB4NEQ4NiwgMHhFMDUwLCAweEUwNTAsIDB4MjMxRSwgMHhFMDUxLCAweEUwNUMsIDB4NEQ5NiwKKyAgICAweEUwNUQsIDB4RTA1RCwgMHgyMjMzLCAweEUwNUUsIDB4RTA2OCwgMHg0REEyLCAweEUwNjksIDB4RTA2OSwgMHgyMzIwLAorICAgIDB4RTA2QSwgMHhFMDZCLCAweDREQUQsIDB4RTA2QywgMHhFMDZDLCAweDIxQzcsIDB4RTA2RCwgMHhFMDc0LCAweDREQUYsCisgICAgMHhFMDc1LCAweEUwNzUsIDB4MjJCQywgMHhFMDc2LCAweEUwNzYsIDB4NERCNywgMHhFMDc3LCAweEUwNzcsIDB4MjMxQywKKyAgICAweEUwNzgsIDB4RTA3OCwgMHg0REI4LCAweEUwNzksIDB4RTA3OSwgMHgyMjUxLCAweEUwN0EsIDB4RTA3RSwgMHg0REI5LAorICAgIDB4RTA4MCwgMHhFMDg2LCAweDREQkUsIDB4RTA4NywgMHhFMDg3LCAweDFFQkIsIDB4RTA4OCwgMHhFMDhDLCAweDREQzUsCisgICAgMHhFMDhELCAweEUwOEQsIDB4MjI4NywgMHhFMDhFLCAweEUwOEUsIDB4NERDQSwgMHhFMDhGLCAweEUwOEYsIDB4MjAyRCwKKyAgICAweEUwOTAsIDB4RTA5MCwgMHgxRUFCLCAweEUwOTEsIDB4RTA5MSwgMHg0RENCLCAweEUwOTIsIDB4RTA5MiwgMHgyMzFELAorICAgIDB4RTA5MywgMHhFMDkzLCAweDREQ0MsIDB4RTA5NCwgMHhFMDk0LCAweDIzMUYsIDB4RTA5NSwgMHhFMDk2LCAweDREQ0QsCisgICAgMHhFMDk3LCAweEUwOTcsIDB4MjMxQiwgMHhFMDk4LCAweEUwQTAsIDB4NERDRiwgMHhFMEExLCAweEUwRkUsIDB4MTU0NywKKyAgICAweEUxNDAsIDB4RTE0MSwgMHg0REQ4LCAweEUxNDIsIDB4RTE0MiwgMHgyMzIxLCAweEUxNDMsIDB4RTE2MywgMHg0RERBLAorICAgIDB4RTE2NCwgMHhFMTY0LCAweDIyNTUsIDB4RTE2NSwgMHhFMTY3LCAweDRERkIsIDB4RTE2OCwgMHhFMTY4LCAweDFFOEYsCisgICAgMHhFMTY5LCAweEUxNzMsIDB4NERGRSwgMHhFMTc0LCAweEUxNzQsIDB4MjIwQywgMHhFMTc1LCAweEUxNzUsIDB4MUZBNCwKKyAgICAweEUxNzYsIDB4RTE3RSwgMHg0RTA5LCAweEUxODAsIDB4RTE4MywgMHg0RTEyLCAweEUxODQsIDB4RTE4NCwgMHgyMDlCLAorICAgIDB4RTE4NSwgMHhFMTg1LCAweDIxRDgsIDB4RTE4NiwgMHhFMTg2LCAweDRFMTYsIDB4RTE4NywgMHhFMTg3LCAweDI1RkEsCisgICAgMHhFMTg4LCAweEUxODgsIDB4NEUxNywgMHhFMTg5LCAweEUxODksIDB4MjVGOSwgMHhFMThBLCAweEUxOEIsIDB4NEUxOCwKKyAgICAweEUxOEMsIDB4RTE4QywgMHgyMTM0LCAweEUxOEQsIDB4RTE4RCwgMHg0RTFBLCAweEUxOEUsIDB4RTE5MCwgMHgyNEYzLAorICAgIDB4RTE5MSwgMHhFMTkxLCAweDI0RjgsIDB4RTE5MiwgMHhFMTkyLCAweDRFMUIsIDB4RTE5MywgMHhFMTkzLCAweDI0RjcsCisgICAgMHhFMTk0LCAweEUxOTQsIDB4MUVDOCwgMHhFMTk1LCAweEUxOTUsIDB4MjRGNiwgMHhFMTk2LCAweEUxOTcsIDB4NEUxQywKKyAgICAweEUxOTgsIDB4RTE5OCwgMHgyMjgwLCAweEUxOTksIDB4RTE5RCwgMHg0RTFFLCAweEUxOUUsIDB4RTE5RSwgMHgxRUM1LAorICAgIDB4RTE5RiwgMHhFMTlGLCAweDI0RkIsIDB4RTFBMCwgMHhFMUEwLCAweDRFMjMsIDB4RTFBMSwgMHhFMUZFLCAweDE1QTUsCisgICAgMHhFMjQwLCAweEUyNDAsIDB4NEUyNCwgMHhFMjQxLCAweEUyNDEsIDB4MjRGQSwgMHhFMjQyLCAweEUyNDIsIDB4NEUyNSwKKyAgICAweEUyNDMsIDB4RTI0MywgMHgxRUVELCAweEUyNDQsIDB4RTI0RSwgMHg0RTI2LCAweEUyNEYsIDB4RTI0RiwgMHgyNEZELAorICAgIDB4RTI1MCwgMHhFMjUwLCAweDRFMzEsIDB4RTI1MSwgMHhFMjUxLCAweDI0RjksIDB4RTI1MiwgMHhFMjUyLCAweDRFMzIsCisgICAgMHhFMjUzLCAweEUyNTMsIDB4MjRGRSwgMHhFMjU0LCAweEUyNTQsIDB4MjBDRCwgMHhFMjU1LCAweEUyNTksIDB4NEUzMywKKyAgICAweEUyNUEsIDB4RTI1QSwgMHgyNTA4LCAweEUyNUIsIDB4RTI1QiwgMHgyNTA0LCAweEUyNUMsIDB4RTI1RCwgMHg0RTM4LAorICAgIDB4RTI1RSwgMHhFMjVFLCAweDI1MDYsIDB4RTI1RiwgMHhFMjYxLCAweDRFM0EsIDB4RTI2MiwgMHhFMjYyLCAweDI0RkYsCisgICAgMHhFMjYzLCAweEUyNjMsIDB4MjA5MCwgMHhFMjY0LCAweEUyNjYsIDB4NEUzRCwgMHhFMjY3LCAweEUyNjcsIDB4MUVERCwKKyAgICAweEUyNjgsIDB4RTI2OCwgMHgxRjI1LCAweEUyNjksIDB4RTI2OSwgMHg0RTQwLCAweEUyNkEsIDB4RTI2QSwgMHgyNTAzLAorICAgIDB4RTI2QiwgMHhFMjZCLCAweDI1MDIsIDB4RTI2QywgMHhFMjZELCAweDRFNDEsIDB4RTI2RSwgMHhFMjZFLCAweDFFN0EsCisgICAgMHhFMjZGLCAweEUyNkYsIDB4MjBBNiwgMHhFMjcwLCAweEUyNzcsIDB4NEU0MywgMHhFMjc4LCAweEUyNzgsIDB4MUZENSwKKyAgICAweEUyNzksIDB4RTI3QywgMHg0RTRCLCAweEUyN0QsIDB4RTI3RCwgMHgxRjExLCAweEUyN0UsIDB4RTI3RSwgMHg0RTRGLAorICAgIDB4RTI4MCwgMHhFMjgwLCAweDI1MDcsIDB4RTI4MSwgMHhFMjgxLCAweDI1MDAsIDB4RTI4MiwgMHhFMjgyLCAweDI1MDUsCisgICAgMHhFMjgzLCAweEUyODgsIDB4NEU1MCwgMHhFMjg5LCAweEUyODksIDB4MjUxOSwgMHhFMjhBLCAweEUyOEEsIDB4NEU1NiwKKyAgICAweEUyOEIsIDB4RTI4QiwgMHgyNTE1LCAweEUyOEMsIDB4RTI4RCwgMHg0RTU3LCAweEUyOEUsIDB4RTI4RSwgMHgyNTBDLAorICAgIDB4RTI4RiwgMHhFMjhGLCAweDIwMzEsIDB4RTI5MCwgMHhFMjkxLCAweDRFNTksIDB4RTI5MiwgMHhFMjkyLCAweDI1MEIsCisgICAgMHhFMjkzLCAweEUyOTMsIDB4MjUwRiwgMHhFMjk0LCAweEUyOTQsIDB4MjUxQSwgMHhFMjk1LCAweEUyOTUsIDB4MjUwOSwKKyAgICAweEUyOTYsIDB4RTI5NywgMHg0RTVCLCAweEUyOTgsIDB4RTI5OCwgMHgyNTBFLCAweEUyOTksIDB4RTI5OSwgMHgyMjM0LAorICAgIDB4RTI5QSwgMHhFMjlBLCAweDI1MTMsIDB4RTI5QiwgMHhFMjlCLCAweDFGODAsIDB4RTI5QywgMHhFMjlGLCAweDRFNUQsCisgICAgMHhFMkEwLCAweEUyQTAsIDB4MjUwMSwgMHhFMkExLCAweEUyRkUsIDB4MTYwMywgMHhFMzQwLCAweEUzNDEsIDB4NEU2MSwKKyAgICAweEUzNDIsIDB4RTM0MiwgMHgyNTE3LCAweEUzNDMsIDB4RTM0MywgMHgyNTE2LCAweEUzNDQsIDB4RTM0NiwgMHg0RTYzLAorICAgIDB4RTM0NywgMHhFMzQ3LCAweDI1MTgsIDB4RTM0OCwgMHhFMzRBLCAweDRFNjYsIDB4RTM0QiwgMHhFMzRCLCAweDFFNTYsCisgICAgMHhFMzRDLCAweEUzNEUsIDB4NEU2OSwgMHhFMzRGLCAweEUzNEYsIDB4MjUwRCwgMHhFMzUwLCAweEUzNTAsIDB4NEU2QywKKyAgICAweEUzNTEsIDB4RTM1MSwgMHgyMEQzLCAweEUzNTIsIDB4RTM1MywgMHg0RTZELCAweEUzNTQsIDB4RTM1NCwgMHgyMDdBLAorICAgIDB4RTM1NSwgMHhFMzU1LCAweDIwQ0UsIDB4RTM1NiwgMHhFMzU3LCAweDRFNkYsIDB4RTM1OCwgMHhFMzU4LCAweDI1MTAsCisgICAgMHhFMzU5LCAweEUzNUIsIDB4NEU3MSwgMHhFMzVDLCAweEUzNUMsIDB4MUU1NSwgMHhFMzVELCAweEUzNUYsIDB4NEU3NCwKKyAgICAweEUzNjAsIDB4RTM2MCwgMHgyNTBBLCAweEUzNjEsIDB4RTM2NSwgMHg0RTc3LCAweEUzNjYsIDB4RTM2NywgMHgyNTExLAorICAgIDB4RTM2OCwgMHhFMzcwLCAweDRFN0MsIDB4RTM3MSwgMHhFMzcxLCAweDFGQUEsIDB4RTM3MiwgMHhFMzcyLCAweDRFODUsCisgICAgMHhFMzczLCAweEUzNzMsIDB4MjUxRSwgMHhFMzc0LCAweEUzNzQsIDB4MUYxRiwgMHhFMzc1LCAweEUzNzcsIDB4NEU4NiwKKyAgICAweEUzNzgsIDB4RTM3OCwgMHgyNTJELCAweEUzNzksIDB4RTM3OSwgMHgyMjFELCAweEUzN0EsIDB4RTM3QiwgMHg0RTg5LAorICAgIDB4RTM3QywgMHhFMzdDLCAweDI1MzIsIDB4RTM3RCwgMHhFMzdELCAweDRFOEIsIDB4RTM3RSwgMHhFMzdFLCAweDIxN0IsCisgICAgMHhFMzgwLCAweEUzODksIDB4NEU4QywgMHhFMzhBLCAweEUzOEEsIDB4MjFBRiwgMHhFMzhCLCAweEUzOEIsIDB4NEU5NiwKKyAgICAweEUzOEMsIDB4RTM4QywgMHgyNTJDLCAweEUzOEQsIDB4RTM4RSwgMHg0RTk3LCAweEUzOEYsIDB4RTM4RiwgMHgyNTI4LAorICAgIDB4RTM5MCwgMHhFMzkwLCAweDRFOTksIDB4RTM5MSwgMHhFMzkxLCAweDIwOEMsIDB4RTM5MiwgMHhFMzkyLCAweDRFOUEsCisgICAgMHhFMzkzLCAweEUzOTMsIDB4MjUyRiwgMHhFMzk0LCAweEUzOTQsIDB4NEU5QiwgMHhFMzk1LCAweEUzOTUsIDB4MjFCQywKKyAgICAweEUzOTYsIDB4RTM5OCwgMHg0RTlDLCAweEUzOTksIDB4RTM5OSwgMHgyNTFELCAweEUzOUEsIDB4RTM5QiwgMHg0RTlGLAorICAgIDB4RTM5QywgMHhFMzlDLCAweDI1MzUsIDB4RTM5RCwgMHhFMzlELCAweDRFQTEsIDB4RTM5RSwgMHhFMzlFLCAweDIyMEQsCisgICAgMHhFMzlGLCAweEUzOUYsIDB4MjUyNiwgMHhFM0EwLCAweEUzQTAsIDB4NEVBMiwgMHhFM0ExLCAweEUzRkUsIDB4MTY2MSwKKyAgICAweEU0NDAsIDB4RTQ0MCwgMHgyNTM0LCAweEU0NDEsIDB4RTQ0MSwgMHgyNTJBLCAweEU0NDIsIDB4RTQ0MiwgMHgyNTFGLAorICAgIDB4RTQ0MywgMHhFNDQzLCAweDI1MzEsIDB4RTQ0NCwgMHhFNDQ0LCAweDI1MUMsIDB4RTQ0NSwgMHhFNDQ3LCAweDRFQTMsCisgICAgMHhFNDQ4LCAweEU0NDgsIDB4MjUyNSwgMHhFNDQ5LCAweEU0NEQsIDB4NEVBNiwgMHhFNDRFLCAweEU0NEUsIDB4MjFDRCwKKyAgICAweEU0NEYsIDB4RTQ0RiwgMHg0RUFCLCAweEU0NTAsIDB4RTQ1MCwgMHgyMURBLCAweEU0NTEsIDB4RTQ1MSwgMHg0RUFDLAorICAgIDB4RTQ1MiwgMHhFNDUyLCAweDIxNzIsIDB4RTQ1MywgMHhFNDUzLCAweDI1M0UsIDB4RTQ1NCwgMHhFNDU3LCAweDRFQUQsCisgICAgMHhFNDU4LCAweEU0NTgsIDB4MjA0RiwgMHhFNDU5LCAweEU0NTksIDB4NEVCMSwgMHhFNDVBLCAweEU0NUEsIDB4MjU0MywKKyAgICAweEU0NUIsIDB4RTQ1QiwgMHg0RUIyLCAweEU0NUMsIDB4RTQ1QywgMHgyMUQ3LCAweEU0NUQsIDB4RTQ1RCwgMHg0RUIzLAorICAgIDB4RTQ1RSwgMHhFNDVFLCAweDFFM0MsIDB4RTQ1RiwgMHhFNDYxLCAweDRFQjQsIDB4RTQ2MiwgMHhFNDYyLCAweDI1MjksCisgICAgMHhFNDYzLCAweEU0NjQsIDB4NEVCNywgMHhFNDY1LCAweEU0NjUsIDB4MjUyMSwgMHhFNDY2LCAweEU0NjcsIDB4NEVCOSwKKyAgICAweEU0NjgsIDB4RTQ2OCwgMHgxRUZGLCAweEU0NjksIDB4RTQ3MiwgMHg0RUJCLCAweEU0NzMsIDB4RTQ3MywgMHgyNTNGLAorICAgIDB4RTQ3NCwgMHhFNDc0LCAweDRFQzUsIDB4RTQ3NSwgMHhFNDc1LCAweDI1NDQsIDB4RTQ3NiwgMHhFNDc4LCAweDRFQzYsCisgICAgMHhFNDc5LCAweEU0NzksIDB4MjUyMywgMHhFNDdBLCAweEU0N0EsIDB4MUU5MCwgMHhFNDdCLCAweEU0N0IsIDB4MjUzQSwKKyAgICAweEU0N0MsIDB4RTQ3QywgMHgyNTQ1LCAweEU0N0QsIDB4RTQ3RCwgMHg0RUM5LCAweEU0N0UsIDB4RTQ3RSwgMHgyNTNELAorICAgIDB4RTQ4MCwgMHhFNDgwLCAweDRFQ0EsIDB4RTQ4MSwgMHhFNDgxLCAweDIwQzEsIDB4RTQ4MiwgMHhFNDgzLCAweDRFQ0IsCisgICAgMHhFNDg0LCAweEU0ODQsIDB4MjEwMywgMHhFNDg1LCAweEU0ODUsIDB4MjUyMCwgMHhFNDg2LCAweEU0ODYsIDB4MjUzQywKKyAgICAweEU0ODcsIDB4RTQ4NywgMHgyNTNCLCAweEU0ODgsIDB4RTQ4OCwgMHgyNTM4LCAweEU0ODksIDB4RTQ4QywgMHg0RUNELAorICAgIDB4RTQ4RCwgMHhFNDhELCAweDI1NDAsIDB4RTQ4RSwgMHhFNDhFLCAweDRFRDEsIDB4RTQ4RiwgMHhFNDhGLCAweDFGQ0QsCisgICAgMHhFNDkwLCAweEU0OTIsIDB4NEVEMiwgMHhFNDkzLCAweEU0OTMsIDB4MUYxOCwgMHhFNDk0LCAweEU0OTcsIDB4NEVENSwKKyAgICAweEU0OTgsIDB4RTQ5OCwgMHgyNTRCLCAweEU0OTksIDB4RTQ5QywgMHg0RUQ5LCAweEU0OUQsIDB4RTQ5RCwgMHgyNTQ3LAorICAgIDB4RTQ5RSwgMHhFNDlGLCAweDI1NEYsIDB4RTRBMCwgMHhFNEEwLCAweDRFREQsIDB4RTRBMSwgMHhFNEZFLCAweDE2QkYsCisgICAgMHhFNTQwLCAweEU1NDUsIDB4NEVERSwgMHhFNTQ2LCAweEU1NDYsIDB4MjJCMCwgMHhFNTQ3LCAweEU1NDcsIDB4NEVFNCwKKyAgICAweEU1NDgsIDB4RTU0OCwgMHgyNTQ2LCAweEU1NDksIDB4RTU0QSwgMHg0RUU1LCAweEU1NEIsIDB4RTU0QiwgMHgyNTRDLAorICAgIDB4RTU0QywgMHhFNTRELCAweDRFRTcsIDB4RTU0RSwgMHhFNTRFLCAweDFFOUEsIDB4RTU0RiwgMHhFNTRGLCAweDI1NTIsCisgICAgMHhFNTUwLCAweEU1NTAsIDB4MjUzMCwgMHhFNTUxLCAweEU1NTEsIDB4MjU0OSwgMHhFNTUyLCAweEU1NTQsIDB4NEVFOSwKKyAgICAweEU1NTUsIDB4RTU1NSwgMHgyNTUxLCAweEU1NTYsIDB4RTU1NiwgMHgxRUNBLCAweEU1NTcsIDB4RTU1NywgMHg0RUVDLAorICAgIDB4RTU1OCwgMHhFNTU4LCAweDIwRDIsIDB4RTU1OSwgMHhFNTVCLCAweDRFRUQsIDB4RTU1QywgMHhFNTVDLCAweDFGQjgsCisgICAgMHhFNTVELCAweEU1NUQsIDB4NEVGMCwgMHhFNTVFLCAweEU1NUUsIDB4MjA3OSwgMHhFNTVGLCAweEU1NjAsIDB4NEVGMSwKKyAgICAweEU1NjEsIDB4RTU2MSwgMHgyMUFCLCAweEU1NjIsIDB4RTU2MywgMHg0RUYzLCAweEU1NjQsIDB4RTU2NCwgMHgyNTRELAorICAgIDB4RTU2NSwgMHhFNTY1LCAweDFFQTUsIDB4RTU2NiwgMHhFNTY3LCAweDRFRjUsIDB4RTU2OCwgMHhFNTY4LCAweDIwNEMsCisgICAgMHhFNTY5LCAweEU1NjksIDB4MjA4MCwgMHhFNTZBLCAweEU1NkIsIDB4NEVGNywgMHhFNTZDLCAweEU1NkMsIDB4MjY2RCwKKyAgICAweEU1NkQsIDB4RTU2RCwgMHg0RUY5LCAweEU1NkUsIDB4RTU2RSwgMHgyNTM3LCAweEU1NkYsIDB4RTU3NCwgMHg0RUZBLAorICAgIDB4RTU3NSwgMHhFNTc1LCAweDI1NEEsIDB4RTU3NiwgMHhFNTc2LCAweDIxQjgsIDB4RTU3NywgMHhFNTc3LCAweDRGMDAsCisgICAgMHhFNTc4LCAweEU1NzgsIDB4MjU0RSwgMHhFNTc5LCAweEU1N0EsIDB4NEYwMSwgMHhFNTdCLCAweEU1N0IsIDB4MjRGQywKKyAgICAweEU1N0MsIDB4RTU3QywgMHgyNTU0LCAweEU1N0QsIDB4RTU3RSwgMHg0RjAzLCAweEU1ODAsIDB4RTU4MCwgMHg0RjA1LAorICAgIDB4RTU4MSwgMHhFNTgxLCAweDFGM0MsIDB4RTU4MiwgMHhFNTgyLCAweDRGMDYsIDB4RTU4MywgMHhFNTgzLCAweDFFRDUsCisgICAgMHhFNTg0LCAweEU1ODksIDB4NEYwNywgMHhFNThBLCAweEU1OEEsIDB4MjU1NiwgMHhFNThCLCAweEU1OEQsIDB4NEYwRCwKKyAgICAweEU1OEUsIDB4RTU4RSwgMHgyMjY4LCAweEU1OEYsIDB4RTU5MCwgMHg0RjEwLCAweEU1OTEsIDB4RTU5MSwgMHgxRUQ2LAorICAgIDB4RTU5MiwgMHhFNTk5LCAweDRGMTIsIDB4RTU5QSwgMHhFNTlBLCAweDI1NTcsIDB4RTU5QiwgMHhFNTlCLCAweDI1NTMsCisgICAgMHhFNTlDLCAweEU1OUUsIDB4NEYxQSwgMHhFNTlGLCAweEU1OUYsIDB4MjU0OCwgMHhFNUEwLCAweEU1QTAsIDB4NEYxRCwKKyAgICAweEU1QTEsIDB4RTVGRSwgMHgxNzFELCAweEU2NDAsIDB4RTY0MCwgMHgyMERDLCAweEU2NDEsIDB4RTY0MywgMHg0RjFFLAorICAgIDB4RTY0NCwgMHhFNjQ0LCAweDI1NTksIDB4RTY0NSwgMHhFNjQ4LCAweDRGMjEsIDB4RTY0OSwgMHhFNjQ5LCAweDFGOTcsCisgICAgMHhFNjRBLCAweEU2NEEsIDB4MjU1NSwgMHhFNjRCLCAweEU2NEQsIDB4NEYyNSwgMHhFNjRFLCAweEU2NEUsIDB4MjI3RCwKKyAgICAweEU2NEYsIDB4RTY1MSwgMHg0RjI4LCAweEU2NTIsIDB4RTY1MiwgMHgyNTdFLCAweEU2NTMsIDB4RTY1NSwgMHg0RjJCLAorICAgIDB4RTY1NiwgMHhFNjU2LCAweDIwN0MsIDB4RTY1NywgMHhFNjU3LCAweDRGMkUsIDB4RTY1OCwgMHhFNjU4LCAweDI1NUEsCisgICAgMHhFNjU5LCAweEU2NUEsIDB4NEYyRiwgMHhFNjVCLCAweEU2NUIsIDB4MjU1RSwgMHhFNjVDLCAweEU2NUQsIDB4NEYzMSwKKyAgICAweEU2NUUsIDB4RTY1RSwgMHgxRTM0LCAweEU2NUYsIDB4RTY2OCwgMHg0RjMzLCAweEU2NjksIDB4RTY2OSwgMHgyMTVFLAorICAgIDB4RTY2QSwgMHhFNjZBLCAweDRGM0QsIDB4RTY2QiwgMHhFNjZCLCAweDI1NjAsIDB4RTY2QywgMHhFNjc0LCAweDRGM0UsCisgICAgMHhFNjc1LCAweEU2NzUsIDB4MjFBMiwgMHhFNjc2LCAweEU2NzYsIDB4MjM1NCwgMHhFNjc3LCAweEU2NzgsIDB4NEY0NywKKyAgICAweEU2NzksIDB4RTY3OSwgMHgyNTYzLCAweEU2N0EsIDB4RTY3QSwgMHgyNTI3LCAweEU2N0IsIDB4RTY3QiwgMHg0RjQ5LAorICAgIDB4RTY3QywgMHhFNjdDLCAweDI1MkUsIDB4RTY3RCwgMHhFNjdELCAweDI1NTgsIDB4RTY3RSwgMHhFNjdFLCAweDRGNEEsCisgICAgMHhFNjgwLCAweEU2ODAsIDB4MUYxQiwgMHhFNjgxLCAweEU2ODEsIDB4NEY0QiwgMHhFNjgyLCAweEU2ODIsIDB4MjI4MywKKyAgICAweEU2ODMsIDB4RTY4MywgMHg0RjRDLCAweEU2ODQsIDB4RTY4NCwgMHgyNTY0LCAweEU2ODUsIDB4RTY4NiwgMHg0RjRELAorICAgIDB4RTY4NywgMHhFNjg3LCAweDIwQTAsIDB4RTY4OCwgMHhFNjg4LCAweDRGNEYsIDB4RTY4OSwgMHhFNjg5LCAweDI1NjUsCisgICAgMHhFNjhBLCAweEU2OEIsIDB4NEY1MCwgMHhFNjhDLCAweEU2OEMsIDB4MjU2MSwgMHhFNjhELCAweEU2OTIsIDB4NEY1MiwKKyAgICAweEU2OTMsIDB4RTY5MywgMHgyNTYyLCAweEU2OTQsIDB4RTY5NiwgMHg0RjU4LCAweEU2OTcsIDB4RTY5NywgMHgyNTZDLAorICAgIDB4RTY5OCwgMHhFNjlBLCAweDRGNUIsIDB4RTY5QiwgMHhFNjlCLCAweDI1NkQsIDB4RTY5QywgMHhFNjlDLCAweDIwMjAsCisgICAgMHhFNjlELCAweEU2OUUsIDB4NEY1RSwgMHhFNjlGLCAweEU2OUYsIDB4MjU1RiwgMHhFNkEwLCAweEU2QTAsIDB4MjU2QSwKKyAgICAweEU2QTEsIDB4RTZGRSwgMHgxNzdCLCAweEU3NDAsIDB4RTc0MiwgMHg0RjYwLCAweEU3NDMsIDB4RTc0MywgMHgyNTZFLAorICAgIDB4RTc0NCwgMHhFNzQ3LCAweDRGNjMsIDB4RTc0OCwgMHhFNzQ4LCAweDI1MzksIDB4RTc0OSwgMHhFNzQ5LCAweDI1NUMsCisgICAgMHhFNzRBLCAweEU3NEMsIDB4NEY2NywgMHhFNzRELCAweEU3NEUsIDB4MjU2OCwgMHhFNzRGLCAweEU3NEYsIDB4MjU2QiwKKyAgICAweEU3NTAsIDB4RTc1MCwgMHgxRTZGLCAweEU3NTEsIDB4RTc1MSwgMHg0RjZBLCAweEU3NTIsIDB4RTc1MiwgMHgxRkM0LAorICAgIDB4RTc1MywgMHhFNzUzLCAweDI1NjcsIDB4RTc1NCwgMHhFNzU0LCAweDRGNkIsIDB4RTc1NSwgMHhFNzU1LCAweDI1NUIsCisgICAgMHhFNzU2LCAweEU3NTgsIDB4NEY2QywgMHhFNzU5LCAweEU3NTksIDB4MjYxRCwgMHhFNzVBLCAweEU3NjUsIDB4NEY2RiwKKyAgICAweEU3NjYsIDB4RTc2NiwgMHgyNTJCLCAweEU3NjcsIDB4RTc2NywgMHg0RjdCLCAweEU3NjgsIDB4RTc2OCwgMHgyNTcxLAorICAgIDB4RTc2OSwgMHhFNzY5LCAweDRGN0MsIDB4RTc2QSwgMHhFNzZBLCAweDI1NzcsIDB4RTc2QiwgMHhFNzczLCAweDRGN0QsCisgICAgMHhFNzc0LCAweEU3NzQsIDB4MjUyMiwgMHhFNzc1LCAweEU3N0IsIDB4NEY4NiwgMHhFNzdDLCAweEU3N0MsIDB4MjUzMywKKyAgICAweEU3N0QsIDB4RTc3RSwgMHg0RjhELCAweEU3ODAsIDB4RTc4MSwgMHg0RjhGLCAweEU3ODIsIDB4RTc4MiwgMHgyMDJBLAorICAgIDB4RTc4MywgMHhFNzgzLCAweDRGOTEsIDB4RTc4NCwgMHhFNzg0LCAweDI1MzYsIDB4RTc4NSwgMHhFNzg1LCAweDI1NzMsCisgICAgMHhFNzg2LCAweEU3ODYsIDB4MjU2RiwgMHhFNzg3LCAweEU3ODksIDB4NEY5MiwgMHhFNzhBLCAweEU3OEEsIDB4MjI5MywKKyAgICAweEU3OEIsIDB4RTc4QiwgMHgyNTc4LCAweEU3OEMsIDB4RTc4RSwgMHg0Rjk1LCAweEU3OEYsIDB4RTc4RiwgMHgyNTcwLAorICAgIDB4RTc5MCwgMHhFNzkxLCAweDRGOTgsIDB4RTc5MiwgMHhFNzkyLCAweDI1NzUsIDB4RTc5MywgMHhFNzk3LCAweDRGOUEsCisgICAgMHhFNzk4LCAweEU3OTksIDB4MjU0MSwgMHhFNzlBLCAweEU3OUEsIDB4MjU1RCwgMHhFNzlCLCAweEU3OUYsIDB4NEY5RiwKKyAgICAweEU3QTAsIDB4RTdBMCwgMHgyMDFBLCAweEU3QTEsIDB4RTdGRSwgMHgxN0Q5LCAweEU4NDAsIDB4RTg0MiwgMHg0RkE0LAorICAgIDB4RTg0MywgMHhFODQzLCAweDI1N0EsIDB4RTg0NCwgMHhFODQ0LCAweDIwMDYsIDB4RTg0NSwgMHhFODQ1LCAweDRGQTcsCisgICAgMHhFODQ2LCAweEU4NDYsIDB4MjE3NywgMHhFODQ3LCAweEU4NDgsIDB4NEZBOCwgMHhFODQ5LCAweEU4NDksIDB4MjUxQiwKKyAgICAweEU4NEEsIDB4RTg0QSwgMHg0RkFBLCAweEU4NEIsIDB4RTg0QiwgMHgyNTI0LCAweEU4NEMsIDB4RTg0RSwgMHg0RkFCLAorICAgIDB4RTg0RiwgMHhFODRGLCAweDI1N0IsIDB4RTg1MCwgMHhFODUzLCAweDRGQUUsIDB4RTg1NCwgMHhFODU0LCAweDIyQTMsCisgICAgMHhFODU1LCAweEU4NTksIDB4NEZCMiwgMHhFODVBLCAweEU4NUEsIDB4MjU3OSwgMHhFODVCLCAweEU4NUIsIDB4NEZCNywKKyAgICAweEU4NUMsIDB4RTg1QywgMHgyNTY2LCAweEU4NUQsIDB4RTg2MSwgMHg0RkI4LCAweEU4NjIsIDB4RTg2MiwgMHgxRjkzLAorICAgIDB4RTg2MywgMHhFODYzLCAweDRGQkQsIDB4RTg2NCwgMHhFODY0LCAweDI1N0MsIDB4RTg2NSwgMHhFODZGLCAweDRGQkUsCisgICAgMHhFODcwLCAweEU4NzAsIDB4MjUxNCwgMHhFODcxLCAweEU4NzIsIDB4NEZDOSwgMHhFODczLCAweEU4NzMsIDB4MjU3RCwKKyAgICAweEU4NzQsIDB4RTg3NCwgMHg0RkNCLCAweEU4NzUsIDB4RTg3NSwgMHgyNTcyLCAweEU4NzYsIDB4RTg3QiwgMHg0RkNDLAorICAgIDB4RTg3QywgMHhFODdDLCAweDI1NzQsIDB4RTg3RCwgMHhFODdFLCAweDRGRDIsIDB4RTg4MCwgMHhFODgwLCAweDIyNEUsCisgICAgMHhFODgxLCAweEU4ODEsIDB4NEZENCwgMHhFODgyLCAweEU4ODIsIDB4MjFDNiwgMHhFODgzLCAweEU4ODYsIDB4NEZENSwKKyAgICAweEU4ODcsIDB4RTg4NywgMHgyMDlGLCAweEU4ODgsIDB4RTg4OCwgMHg0RkQ5LCAweEU4ODksIDB4RTg4OSwgMHgyNTc2LAorICAgIDB4RTg4QSwgMHhFODhCLCAweDRGREEsIDB4RTg4QywgMHhFODhDLCAweDIwNjQsIDB4RTg4RCwgMHhFODhELCAweDIyQkYsCisgICAgMHhFODhFLCAweEU4OEUsIDB4MjYxQywgMHhFODhGLCAweEU4OEYsIDB4MjI1RSwgMHhFODkwLCAweEU4QTAsIDB4NEZEQywKKyAgICAweEU4QTEsIDB4RThGRSwgMHgxODM3LCAweEU5NDAsIDB4RTk0QiwgMHg0RkVELCAweEU5NEMsIDB4RTk0QywgMHgxRTc1LAorICAgIDB4RTk0RCwgMHhFOTUzLCAweDRGRjksIDB4RTk1NCwgMHhFOTU0LCAweDIwN0QsIDB4RTk1NSwgMHhFOTU1LCAweDUwMDAsCisgICAgMHhFOTU2LCAweEU5NTYsIDB4MjNCRiwgMHhFOTU3LCAweEU5NTcsIDB4MjExMywgMHhFOTU4LCAweEU5NTksIDB4NTAwMSwKKyAgICAweEU5NUEsIDB4RTk1QSwgMHgyM0MwLCAweEU5NUIsIDB4RTk1QywgMHg1MDAzLCAweEU5NUQsIDB4RTk1RCwgMHgxRTQ1LAorICAgIDB4RTk1RSwgMHhFOTVFLCAweDUwMDUsIDB4RTk1RiwgMHhFOTVGLCAweDFGRDgsIDB4RTk2MCwgMHhFOTYwLCAweDIzQzQsCisgICAgMHhFOTYxLCAweEU5NjEsIDB4NTAwNiwgMHhFOTYyLCAweEU5NjIsIDB4MjNDMiwgMHhFOTYzLCAweEU5NjMsIDB4MjEwNCwKKyAgICAweEU5NjQsIDB4RTk2NCwgMHg1MDA3LCAweEU5NjUsIDB4RTk2NSwgMHgyMUJELCAweEU5NjYsIDB4RTk2NiwgMHg1MDA4LAorICAgIDB4RTk2NywgMHhFOTY3LCAweDFGODcsIDB4RTk2OCwgMHhFOTY4LCAweDIzQzMsIDB4RTk2OSwgMHhFOTZCLCAweDUwMDksCisgICAgMHhFOTZDLCAweEU5NkMsIDB4MjI2OSwgMHhFOTZELCAweEU5NzQsIDB4NTAwQywgMHhFOTc1LCAweEU5NzUsIDB4MUY0MywKKyAgICAweEU5NzYsIDB4RTk3NiwgMHg1MDE0LCAweEU5NzcsIDB4RTk3NywgMHgxRjFFLCAweEU5NzgsIDB4RTk3OCwgMHgyNjc5LAorICAgIDB4RTk3OSwgMHhFOTc5LCAweDFFRUIsIDB4RTk3QSwgMHhFOTdCLCAweDUwMTUsIDB4RTk3QywgMHhFOTdDLCAweDFGMzUsCisgICAgMHhFOTdELCAweEU5N0QsIDB4MjA4QSwgMHhFOTdFLCAweEU5N0UsIDB4NTAxNywgMHhFOTgwLCAweEU5ODAsIDB4MjNDNywKKyAgICAweEU5ODEsIDB4RTk4MSwgMHgyM0M5LCAweEU5ODIsIDB4RTk4MiwgMHgyM0M2LCAweEU5ODMsIDB4RTk4NiwgMHg1MDE4LAorICAgIDB4RTk4NywgMHhFOTg3LCAweDIyNEYsIDB4RTk4OCwgMHhFOThBLCAweDUwMUMsIDB4RTk4QiwgMHhFOThCLCAweDIzQ0IsCisgICAgMHhFOThDLCAweEU5OEQsIDB4NTAxRiwgMHhFOThFLCAweEU5OEUsIDB4MjFGMywgMHhFOThGLCAweEU5OEYsIDB4NTAyMSwKKyAgICAweEU5OTAsIDB4RTk5MCwgMHgyMUY3LCAweEU5OTEsIDB4RTk5MSwgMHgyM0NGLCAweEU5OTIsIDB4RTk5MiwgMHgyM0NFLAorICAgIDB4RTk5MywgMHhFOTkzLCAweDIzQ0EsIDB4RTk5NCwgMHhFOTk0LCAweDIzQ0QsIDB4RTk5NSwgMHhFOTk3LCAweDUwMjIsCisgICAgMHhFOTk4LCAweEU5OTgsIDB4MjNEMCwgMHhFOTk5LCAweEU5OUEsIDB4NTAyNSwgMHhFOTlCLCAweEU5OUIsIDB4MjY2QywKKyAgICAweEU5OUMsIDB4RTk5QywgMHg1MDI3LCAweEU5OUQsIDB4RTk5RCwgMHgyM0MxLCAweEU5OUUsIDB4RTk5RSwgMHg1MDI4LAorICAgIDB4RTk5RiwgMHhFOTlGLCAweDFGRUUsIDB4RTlBMCwgMHhFOUEwLCAweDIzRDEsIDB4RTlBMSwgMHhFOUZFLCAweDE4OTUsCisgICAgMHhFQTQwLCAweEVBNDAsIDB4MUZGOCwgMHhFQTQxLCAweEVBNDMsIDB4NTAyOSwgMHhFQTQ0LCAweEVBNDQsIDB4MjNEMywKKyAgICAweEVBNDUsIDB4RUE0NywgMHg1MDJDLCAweEVBNDgsIDB4RUE0OCwgMHgyM0QyLCAweEVBNDksIDB4RUE0OSwgMHgyM0Q0LAorICAgIDB4RUE0QSwgMHhFQTRBLCAweDFFOTgsIDB4RUE0QiwgMHhFQTRGLCAweDUwMkYsIDB4RUE1MCwgMHhFQTUwLCAweDFGMkMsCisgICAgMHhFQTUxLCAweEVBNTEsIDB4NTAzNCwgMHhFQTUyLCAweEVBNTIsIDB4MjNENSwgMHhFQTUzLCAweEVBNTQsIDB4NTAzNSwKKyAgICAweEVBNTUsIDB4RUE1NSwgMHgxRTcxLCAweEVBNTYsIDB4RUE1NiwgMHgyNjkxLCAweEVBNTcsIDB4RUE1OCwgMHg1MDM3LAorICAgIDB4RUE1OSwgMHhFQTU5LCAweDIzQzUsIDB4RUE1QSwgMHhFQTdFLCAweDUwMzksIDB4RUE4MCwgMHhFQTgwLCAweDIzMUEsCisgICAgMHhFQTgxLCAweEVBODMsIDB4NTA1RSwgMHhFQTg0LCAweEVBODQsIDB4MjExNCwgMHhFQTg1LCAweEVBODYsIDB4NTA2MSwKKyAgICAweEVBODcsIDB4RUE4NywgMHgyMjg0LCAweEVBODgsIDB4RUE4RCwgMHg1MDYzLCAweEVBOEUsIDB4RUE4RSwgMHgyMjFDLAorICAgIDB4RUE4RiwgMHhFQThGLCAweDUwNjksIDB4RUE5MCwgMHhFQTkwLCAweDFFN0UsIDB4RUE5MSwgMHhFQTkxLCAweDIwNEQsCisgICAgMHhFQTkyLCAweEVBOTUsIDB4NTA2QSwgMHhFQTk2LCAweEVBOTYsIDB4MjIwMSwgMHhFQTk3LCAweEVBOUYsIDB4NTA2RSwKKyAgICAweEVBQTAsIDB4RUFBMCwgMHgxRUQ5LCAweEVBQTEsIDB4RUFGRSwgMHgxOEYzLCAweEVCNDAsIDB4RUI0MCwgMHg1MDc3LAorICAgIDB4RUI0MSwgMHhFQjQxLCAweDFGQjIsIDB4RUI0MiwgMHhFQjQ0LCAweDUwNzgsIDB4RUI0NSwgMHhFQjQ1LCAweDIyNTIsCisgICAgMHhFQjQ2LCAweEVCNDcsIDB4NTA3QiwgMHhFQjQ4LCAweEVCNDgsIDB4MUY3OSwgMHhFQjQ5LCAweEVCNTIsIDB4NTA3RCwKKyAgICAweEVCNTMsIDB4RUI1MywgMHgyMTU3LCAweEVCNTQsIDB4RUI1NCwgMHg1MDg3LCAweEVCNTUsIDB4RUI1NSwgMHgyMUJGLAorICAgIDB4RUI1NiwgMHhFQjVBLCAweDUwODgsIDB4RUI1QiwgMHhFQjVCLCAweDIyMUYsIDB4RUI1QywgMHhFQjVDLCAweDUwOEQsCisgICAgMHhFQjVELCAweEVCNUQsIDB4MjAzRCwgMHhFQjVFLCAweEVCNUYsIDB4NTA4RSwgMHhFQjYwLCAweEVCNjAsIDB4MjAxNSwKKyAgICAweEVCNjEsIDB4RUI2MSwgMHg1MDkwLCAweEVCNjIsIDB4RUI2MiwgMHgyNkE1LCAweEVCNjMsIDB4RUI2QywgMHg1MDkxLAorICAgIDB4RUI2RCwgMHhFQjZELCAweDIxNTYsIDB4RUI2RSwgMHhFQjZGLCAweDUwOUIsIDB4RUI3MCwgMHhFQjcwLCAweDIxNDQsCisgICAgMHhFQjcxLCAweEVCNzEsIDB4NTA5RCwgMHhFQjcyLCAweEVCNzIsIDB4MUU5MSwgMHhFQjczLCAweEVCNzMsIDB4MjI1NywKKyAgICAweEVCNzQsIDB4RUI3NywgMHg1MDlFLCAweEVCNzgsIDB4RUI3OCwgMHgyMDBBLCAweEVCNzksIDB4RUI3OSwgMHgyMDkyLAorICAgIDB4RUI3QSwgMHhFQjdFLCAweDUwQTIsIDB4RUI4MCwgMHhFQjg0LCAweDUwQTcsIDB4RUI4NSwgMHhFQjg1LCAweDIyNTAsCisgICAgMHhFQjg2LCAweEVCODksIDB4NTBBQywgMHhFQjhBLCAweEVCOEEsIDB4MUVDMywgMHhFQjhCLCAweEVCQTAsIDB4NTBCMCwKKyAgICAweEVCQTEsIDB4RUJGRSwgMHgxOTUxLCAweEVDNDAsIDB4RUM0NSwgMHg1MEM2LCAweEVDNDYsIDB4RUM0NiwgMHgyMUE4LAorICAgIDB4RUM0NywgMHhFQzU1LCAweDUwQ0MsIDB4RUM1NiwgMHhFQzU2LCAweDI2MEQsIDB4RUM1NywgMHhFQzU5LCAweDUwREIsCisgICAgMHhFQzVBLCAweEVDNUEsIDB4MjYwQywgMHhFQzVCLCAweEVDNUIsIDB4NTBERSwgMHhFQzVDLCAweEVDNUMsIDB4MjYwRSwKKyAgICAweEVDNUQsIDB4RUM1RiwgMHg1MERGLCAweEVDNjAsIDB4RUM2MCwgMHgyMDMyLCAweEVDNjEsIDB4RUM2RCwgMHg1MEUyLAorICAgIDB4RUM2RSwgMHhFQzZFLCAweDI2MEIsIDB4RUM2RiwgMHhFQzc1LCAweDUwRUYsIDB4RUM3NiwgMHhFQzc2LCAweDIyQzMsCisgICAgMHhFQzc3LCAweEVDN0UsIDB4NTBGNiwgMHhFQzgwLCAweEVDOTUsIDB4NTBGRSwgMHhFQzk2LCAweEVDOTYsIDB4MUYyMywKKyAgICAweEVDOTcsIDB4RUNBMCwgMHg1MTE0LCAweEVDQTEsIDB4RUNGRSwgMHgxOUFGLCAweEVENDAsIDB4RUQ0NSwgMHg1MTFFLAorICAgIDB4RUQ0NiwgMHhFRDQ2LCAweDI2OTUsIDB4RUQ0NywgMHhFRDU3LCAweDUxMjQsIDB4RUQ1OCwgMHhFRDU4LCAweDI2NUUsCisgICAgMHhFRDU5LCAweEVENUQsIDB4NTEzNSwgMHhFRDVFLCAweEVENUUsIDB4MjY1RCwgMHhFRDVGLCAweEVENjAsIDB4NTEzQSwKKyAgICAweEVENjEsIDB4RUQ2MSwgMHgyNjkyLCAweEVENjIsIDB4RUQ2MywgMHg1MTNDLCAweEVENjQsIDB4RUQ2NCwgMHgyNjVGLAorICAgIDB4RUQ2NSwgMHhFRDY1LCAweDUxM0UsIDB4RUQ2NiwgMHhFRDY2LCAweDIxOEQsIDB4RUQ2NywgMHhFRDY3LCAweDIwRkQsCisgICAgMHhFRDY4LCAweEVENkQsIDB4NTEzRiwgMHhFRDZFLCAweEVENkUsIDB4MUY0MCwgMHhFRDZGLCAweEVENzMsIDB4NTE0NSwKKyAgICAweEVENzQsIDB4RUQ3NCwgMHgyNDY1LCAweEVENzUsIDB4RUQ3NiwgMHg1MTRBLCAweEVENzcsIDB4RUQ3NywgMHgyNDY3LAorICAgIDB4RUQ3OCwgMHhFRDc4LCAweDUxNEMsIDB4RUQ3OSwgMHhFRDc5LCAweDI0NjYsIDB4RUQ3QSwgMHhFRDdFLCAweDUxNEQsCisgICAgMHhFRDgwLCAweEVEOTAsIDB4NTE1MiwgMHhFRDkxLCAweEVEOTEsIDB4MjFDOSwgMHhFRDkyLCAweEVEOTIsIDB4NTE2MywKKyAgICAweEVEOTMsIDB4RUQ5MywgMHgyMjA5LCAweEVEOTQsIDB4RUQ5NCwgMHgxRUM5LCAweEVEOTUsIDB4RUQ5NSwgMHgyMEU5LAorICAgIDB4RUQ5NiwgMHhFRDk2LCAweDUxNjQsIDB4RUQ5NywgMHhFRDk3LCAweDIxQ0EsIDB4RUQ5OCwgMHhFRDk4LCAweDIxNDYsCisgICAgMHhFRDk5LCAweEVEOTksIDB4MjVDNSwgMHhFRDlBLCAweEVEOUEsIDB4MjFEQywgMHhFRDlCLCAweEVEOUIsIDB4NTE2NSwKKyAgICAweEVEOUMsIDB4RUQ5QywgMHgyNDVFLCAweEVEOUQsIDB4RUQ5RCwgMHg1MTY2LCAweEVEOUUsIDB4RUQ5RSwgMHgyMTRGLAorICAgIDB4RUQ5RiwgMHhFRDlGLCAweDUxNjcsIDB4RURBMCwgMHhFREEwLCAweDI1QzYsIDB4RURBMSwgMHhFREZFLCAweDFBMEQsCisgICAgMHhFRTQwLCAweEVFNDAsIDB4MjVDNywgMHhFRTQxLCAweEVFNDEsIDB4MjI0MSwgMHhFRTQyLCAweEVFNDIsIDB4MjE4QSwKKyAgICAweEVFNDMsIDB4RUU0MywgMHgxRTJGLCAweEVFNDQsIDB4RUU0NCwgMHgxRURDLCAweEVFNDUsIDB4RUU0NywgMHg1MTY4LAorICAgIDB4RUU0OCwgMHhFRTQ4LCAweDIwQkYsIDB4RUU0OSwgMHhFRTQ5LCAweDIwMzQsIDB4RUU0QSwgMHhFRTRDLCAweDUxNkIsCisgICAgMHhFRTRELCAweEVFNEQsIDB4MjVDOSwgMHhFRTRFLCAweEVFNTEsIDB4NTE2RSwgMHhFRTUyLCAweEVFNTIsIDB4MjVDOCwKKyAgICAweEVFNTMsIDB4RUU1NCwgMHg1MTcyLCAweEVFNTUsIDB4RUU1NSwgMHgyMjBFLCAweEVFNTYsIDB4RUU1NiwgMHg1MTc0LAorICAgIDB4RUU1NywgMHhFRTU3LCAweDI1Q0IsIDB4RUU1OCwgMHhFRTVELCAweDUxNzUsIDB4RUU1RSwgMHhFRTVFLCAweDIxN0QsCisgICAgMHhFRTVGLCAweEVFNjAsIDB4NTE3QiwgMHhFRTYxLCAweEVFNjEsIDB4MUY3RSwgMHhFRTYyLCAweEVFNjcsIDB4NTE3RCwKKyAgICAweEVFNjgsIDB4RUU2OCwgMHgyNUNDLCAweEVFNjksIDB4RUU2OSwgMHgxRkMzLCAweEVFNkEsIDB4RUU2QiwgMHg1MTgzLAorICAgIDB4RUU2QywgMHhFRTZDLCAweDIwQjksIDB4RUU2RCwgMHhFRTZELCAweDUxODUsIDB4RUU2RSwgMHhFRTZFLCAweDIxODEsCisgICAgMHhFRTZGLCAweEVFNzYsIDB4NTE4NiwgMHhFRTc3LCAweEVFNzcsIDB4MUZEQSwgMHhFRTc4LCAweEVFN0MsIDB4NTE4RSwKKyAgICAweEVFN0QsIDB4RUU3RCwgMHgyMTczLCAweEVFN0UsIDB4RUU3RSwgMHgxRUUxLCAweEVFODAsIDB4RUU4MCwgMHgyNUNELAorICAgIDB4RUU4MSwgMHhFRTg0LCAweDUxOTMsIDB4RUU4NSwgMHhFRTg1LCAweDI1Q0UsIDB4RUU4NiwgMHhFRTg2LCAweDIxRjYsCisgICAgMHhFRTg3LCAweEVFODksIDB4NTE5NywgMHhFRThBLCAweEVFOEEsIDB4MjI0QiwgMHhFRThCLCAweEVFOEIsIDB4MjVEMSwKKyAgICAweEVFOEMsIDB4RUU4QywgMHg1MTlBLCAweEVFOEQsIDB4RUU4RCwgMHgxRUMwLCAweEVFOEUsIDB4RUU4RiwgMHg1MTlCLAorICAgIDB4RUU5MCwgMHhFRTkwLCAweDIwMDgsIDB4RUU5MSwgMHhFRTkzLCAweDUxOUQsIDB4RUU5NCwgMHhFRTk0LCAweDI1RDAsCisgICAgMHhFRTk1LCAweEVFOTYsIDB4NTFBMCwgMHhFRTk3LCAweEVFOTcsIDB4MjVEMiwgMHhFRTk4LCAweEVFOTgsIDB4NTFBMiwKKyAgICAweEVFOTksIDB4RUU5OSwgMHgxRjJBLCAweEVFOUEsIDB4RUU5QywgMHg1MUEzLCAweEVFOUQsIDB4RUU5RCwgMHgxRTcyLAorICAgIDB4RUU5RSwgMHhFRTlFLCAweDI1RDMsIDB4RUU5RiwgMHhFRUEwLCAweDUxQTYsIDB4RUVBMSwgMHhFRUZFLCAweDFBNkIsCisgICAgMHhFRjQwLCAweEVGNDAsIDB4MjFCRSwgMHhFRjQxLCAweEVGNDEsIDB4MjVENCwgMHhFRjQyLCAweEVGNDIsIDB4MjA0NCwKKyAgICAweEVGNDMsIDB4RUY0MywgMHg1MUE4LCAweEVGNDQsIDB4RUY0NCwgMHgyNUNGLCAweEVGNDUsIDB4RUY0NSwgMHgyMEYzLAorICAgIDB4RUY0NiwgMHhFRjRCLCAweDUxQTksIDB4RUY0QywgMHhFRjRDLCAweDFGMDAsIDB4RUY0RCwgMHhFRjUxLCAweDUxQUYsCisgICAgMHhFRjUyLCAweEVGNTMsIDB4MjRDQywgMHhFRjU0LCAweEVGNTQsIDB4NTFCNCwgMHhFRjU1LCAweEVGNTUsIDB4MjY5OCwKKyAgICAweEVGNTYsIDB4RUY1NiwgMHg1MUI1LCAweEVGNTcsIDB4RUY1NywgMHgyNjc4LCAweEVGNTgsIDB4RUY1OSwgMHg1MUI2LAorICAgIDB4RUY1QSwgMHhFRjVBLCAweDI0Q0UsIDB4RUY1QiwgMHhFRjVGLCAweDUxQjgsIDB4RUY2MCwgMHhFRjYwLCAweDI0Q0YsCisgICAgMHhFRjYxLCAweEVGNjcsIDB4NTFCRCwgMHhFRjY4LCAweEVGNjgsIDB4MjBCOCwgMHhFRjY5LCAweEVGNjksIDB4NTFDNCwKKyAgICAweEVGNkEsIDB4RUY2QSwgMHgyNEQwLCAweEVGNkIsIDB4RUY2QiwgMHg1MUM1LCAweEVGNkMsIDB4RUY2QywgMHgyNEQxLAorICAgIDB4RUY2RCwgMHhFRjc2LCAweDUxQzYsIDB4RUY3NywgMHhFRjc3LCAweDFFRjQsIDB4RUY3OCwgMHhFRjc5LCAweDUxRDAsCisgICAgMHhFRjdBLCAweEVGN0EsIDB4MjM5QiwgMHhFRjdCLCAweEVGN0IsIDB4NTFEMiwgMHhFRjdDLCAweEVGN0MsIDB4MjY3RSwKKyAgICAweEVGN0QsIDB4RUY3RSwgMHg1MUQzLCAweEVGODAsIDB4RUY4MSwgMHg1MUQ1LCAweEVGODIsIDB4RUY4MiwgMHgyMzlELAorICAgIDB4RUY4MywgMHhFRjg0LCAweDIzOUYsIDB4RUY4NSwgMHhFRjg1LCAweDUxRDcsIDB4RUY4NiwgMHhFRjg2LCAweDIzQTEsCisgICAgMHhFRjg3LCAweEVGODcsIDB4NTFEOCwgMHhFRjg4LCAweEVGODgsIDB4MUVGMSwgMHhFRjg5LCAweEVGOEEsIDB4NTFEOSwKKyAgICAweEVGOEIsIDB4RUY4QiwgMHgyMjFFLCAweEVGOEMsIDB4RUY4QywgMHg1MURCLCAweEVGOEQsIDB4RUY4RCwgMHgyM0EyLAorICAgIDB4RUY4RSwgMHhFRjk0LCAweDUxREMsIDB4RUY5NSwgMHhFRjk1LCAweDIxNEIsIDB4RUY5NiwgMHhFRjk2LCAweDFFMzYsCisgICAgMHhFRjk3LCAweEVGOTcsIDB4MjEzNSwgMHhFRjk4LCAweEVGOUIsIDB4NTFFMywgMHhFRjlDLCAweEVGOUMsIDB4MUZBRCwKKyAgICAweEVGOUQsIDB4RUY5RCwgMHg1MUU3LCAweEVGOUUsIDB4RUY5RSwgMHgxRTUzLCAweEVGOUYsIDB4RUZBMCwgMHg1MUU4LAorICAgIDB4RUZBMSwgMHhFRkZFLCAweDFBQzksIDB4RjA0MCwgMHhGMDQwLCAweDUxRUEsIDB4RjA0MSwgMHhGMDQxLCAweDIzQTMsCisgICAgMHhGMDQyLCAweEYwNDIsIDB4MjIwMywgMHhGMDQzLCAweEYwNDMsIDB4NTFFQiwgMHhGMDQ0LCAweEYwNDQsIDB4MUVFNywKKyAgICAweEYwNDUsIDB4RjA0NiwgMHg1MUVDLCAweEYwNDcsIDB4RjA0NywgMHgyM0E0LCAweEYwNDgsIDB4RjA0OCwgMHgyMDk3LAorICAgIDB4RjA0OSwgMHhGMDQ5LCAweDFFRTQsIDB4RjA0QSwgMHhGMDRELCAweDUxRUUsIDB4RjA0RSwgMHhGMDRFLCAweDIyMzgsCisgICAgMHhGMDRGLCAweEYwNTAsIDB4NTFGMiwgMHhGMDUxLCAweEYwNTEsIDB4MjNBNSwgMHhGMDUyLCAweEYwNTMsIDB4NTFGNCwKKyAgICAweEYwNTQsIDB4RjA1NCwgMHgxRjlBLCAweEYwNTUsIDB4RjA1NiwgMHg1MUY2LCAweEYwNTcsIDB4RjA1NywgMHgyMUMzLAorICAgIDB4RjA1OCwgMHhGMDVELCAweDUxRjgsIDB4RjA1RSwgMHhGMDVFLCAweDFGMkUsIDB4RjA1RiwgMHhGMDY3LCAweDUxRkUsCisgICAgMHhGMDY4LCAweEYwNjgsIDB4MjM5QywgMHhGMDY5LCAweEYwNkIsIDB4NTIwNywgMHhGMDZDLCAweEYwNkMsIDB4MjNBNiwKKyAgICAweEYwNkQsIDB4RjA3MCwgMHg1MjBBLCAweEYwNzEsIDB4RjA3MSwgMHgyMzlFLCAweEYwNzIsIDB4RjA3MiwgMHg1MjBFLAorICAgIDB4RjA3MywgMHhGMDczLCAweDIwMzUsIDB4RjA3NCwgMHhGMDc0LCAweDIzQTcsIDB4RjA3NSwgMHhGMDc3LCAweDUyMEYsCisgICAgMHhGMDc4LCAweEYwNzgsIDB4MjNBOCwgMHhGMDc5LCAweEYwNzksIDB4NTIxMiwgMHhGMDdBLCAweEYwN0EsIDB4MjA3NSwKKyAgICAweEYwN0IsIDB4RjA3QywgMHg1MjEzLCAweEYwN0QsIDB4RjA3RSwgMHgyM0E5LCAweEYwODAsIDB4RjA4MCwgMHgyM0FCLAorICAgIDB4RjA4MSwgMHhGMDgxLCAweDFGRUIsIDB4RjA4MiwgMHhGMDgyLCAweDIzQUMsIDB4RjA4MywgMHhGMDg2LCAweDUyMTUsCisgICAgMHhGMDg3LCAweEYwODcsIDB4MUY2QSwgMHhGMDg4LCAweEYwODgsIDB4MjBGOSwgMHhGMDg5LCAweEYwOEEsIDB4NTIxOSwKKyAgICAweEYwOEIsIDB4RjA4QiwgMHgyNjY2LCAweEYwOEMsIDB4RjA4RiwgMHg1MjFCLCAweEYwOTAsIDB4RjA5MCwgMHgyNjY3LAorICAgIDB4RjA5MSwgMHhGMDkxLCAweDUyMUYsIDB4RjA5MiwgMHhGMDkyLCAweDFFNkMsIDB4RjA5MywgMHhGMDk1LCAweDUyMjAsCisgICAgMHhGMDk2LCAweEYwOTYsIDB4MjNBRCwgMHhGMDk3LCAweEYwQTAsIDB4NTIyMywgMHhGMEExLCAweEYwRkUsIDB4MUIyNywKKyAgICAweEYxNDAsIDB4RjE1MSwgMHg1MjJELCAweEYxNTIsIDB4RjE1MiwgMHgyMDZELCAweEYxNTMsIDB4RjE1MywgMHgyMjQyLAorICAgIDB4RjE1NCwgMHhGMTU0LCAweDFGMDIsIDB4RjE1NSwgMHhGMTU2LCAweDUyM0YsIDB4RjE1NywgMHhGMTU3LCAweDIxODMsCisgICAgMHhGMTU4LCAweEYxNTgsIDB4NTI0MSwgMHhGMTU5LCAweEYxNTksIDB4MUU4NSwgMHhGMTVBLCAweEYxNUEsIDB4MjFFOSwKKyAgICAweEYxNUIsIDB4RjE2NiwgMHg1MjQyLCAweEYxNjcsIDB4RjE2NywgMHgxRTU3LCAweEYxNjgsIDB4RjE3NSwgMHg1MjRFLAorICAgIDB4RjE3NiwgMHhGMTc2LCAweDIyQTUsIDB4RjE3NywgMHhGMTc3LCAweDI0MDcsIDB4RjE3OCwgMHhGMTc4LCAweDFGQ0EsCisgICAgMHhGMTc5LCAweEYxNzksIDB4NTI1QywgMHhGMTdBLCAweEYxN0EsIDB4MjQwMiwgMHhGMTdCLCAweEYxN0IsIDB4MUY4MiwKKyAgICAweEYxN0MsIDB4RjE3RCwgMHg1MjVELCAweEYxN0UsIDB4RjE3RSwgMHgyNDA4LCAweEYxODAsIDB4RjE4MCwgMHgyNDA0LAorICAgIDB4RjE4MSwgMHhGMTgxLCAweDUyNUYsIDB4RjE4MiwgMHhGMTgyLCAweDIxMzEsIDB4RjE4MywgMHhGMTgzLCAweDUyNjAsCisgICAgMHhGMTg0LCAweEYxODQsIDB4MjE4NCwgMHhGMTg1LCAweEYxODUsIDB4NTI2MSwgMHhGMTg2LCAweEYxODYsIDB4MjQwMywKKyAgICAweEYxODcsIDB4RjE4NywgMHg1MjYyLCAweEYxODgsIDB4RjE4OCwgMHgyMDZFLCAweEYxODksIDB4RjE4OSwgMHgyNDBCLAorICAgIDB4RjE4QSwgMHhGMTkzLCAweDUyNjMsIDB4RjE5NCwgMHhGMTk0LCAweDFGM0YsIDB4RjE5NSwgMHhGMTk3LCAweDUyNkQsCisgICAgMHhGMTk4LCAweEYxOTgsIDB4MjA2NywgMHhGMTk5LCAweEYxQTAsIDB4NTI3MCwgMHhGMUExLCAweEYxRkUsIDB4MUI4NSwKKyAgICAweEYyNDAsIDB4RjI0NCwgMHg1Mjc4LCAweEYyNDUsIDB4RjI0NSwgMHgxRkQ3LCAweEYyNDYsIDB4RjI0NiwgMHg1MjdELAorICAgIDB4RjI0NywgMHhGMjQ3LCAweDFFODMsIDB4RjI0OCwgMHhGMjRBLCAweDUyN0UsIDB4RjI0QiwgMHhGMjRCLCAweDI0MEYsCisgICAgMHhGMjRDLCAweEYyNTIsIDB4NTI4MSwgMHhGMjUzLCAweEYyNTMsIDB4MjQwRSwgMHhGMjU0LCAweEYyNTQsIDB4MjBDNywKKyAgICAweEYyNTUsIDB4RjI1NSwgMHgyNDBELCAweEYyNTYsIDB4RjI1QiwgMHg1Mjg4LCAweEYyNUMsIDB4RjI1QywgMHgyNDEyLAorICAgIDB4RjI1RCwgMHhGMjVFLCAweDUyOEUsIDB4RjI1RiwgMHhGMjVGLCAweDIwQjcsIDB4RjI2MCwgMHhGMjcwLCAweDUyOTAsCisgICAgMHhGMjcxLCAweEYyNzEsIDB4MjNGMCwgMHhGMjcyLCAweEYyNzIsIDB4NTJBMSwgMHhGMjczLCAweEYyNzMsIDB4MjQxMSwKKyAgICAweEYyNzQsIDB4RjI3NCwgMHgyNDE0LCAweEYyNzUsIDB4RjI3NSwgMHg1MkEyLCAweEYyNzYsIDB4RjI3NiwgMHgyMTcwLAorICAgIDB4RjI3NywgMHhGMjdCLCAweDUyQTMsIDB4RjI3QywgMHhGMjdDLCAweDI0MDUsIDB4RjI3RCwgMHhGMjdELCAweDIxMEMsCisgICAgMHhGMjdFLCAweEYyN0UsIDB4MjQxNSwgMHhGMjgwLCAweEYyODQsIDB4NTJBOCwgMHhGMjg1LCAweEYyODUsIDB4MjA2NiwKKyAgICAweEYyODYsIDB4RjI4NiwgMHg1MkFELCAweEYyODcsIDB4RjI4NywgMHgyMzUyLCAweEYyODgsIDB4RjI4OCwgMHgyNDEzLAorICAgIDB4RjI4OSwgMHhGMjg5LCAweDI0MTAsIDB4RjI4QSwgMHhGMjhCLCAweDI0MTYsIDB4RjI4QywgMHhGMjhDLCAweDIwRjEsCisgICAgMHhGMjhELCAweEYyOTAsIDB4NTJBRSwgMHhGMjkxLCAweEYyOTEsIDB4MjQwQSwgMHhGMjkyLCAweEYyOTMsIDB4NTJCMiwKKyAgICAweEYyOTQsIDB4RjI5NCwgMHgyNDA5LCAweEYyOTUsIDB4RjI5NSwgMHg1MkI0LCAweEYyOTYsIDB4RjI5NiwgMHgyNDE4LAorICAgIDB4RjI5NywgMHhGMjlCLCAweDUyQjUsIDB4RjI5QywgMHhGMjlDLCAweDFGQTcsIDB4RjI5RCwgMHhGMjlELCAweDUyQkEsCisgICAgMHhGMjlFLCAweEYyOUUsIDB4MjFGQywgMHhGMjlGLCAweEYyQTAsIDB4NTJCQiwgMHhGMkExLCAweEYyRkUsIDB4MUJFMywKKyAgICAweEYzNDAsIDB4RjM0MCwgMHgxRkMxLCAweEYzNDEsIDB4RjM0MSwgMHgyNDA2LCAweEYzNDIsIDB4RjM0NCwgMHg1MkJELAorICAgIDB4RjM0NSwgMHhGMzQ1LCAweDIyOUMsIDB4RjM0NiwgMHhGMzQ3LCAweDUyQzAsIDB4RjM0OCwgMHhGMzQ4LCAweDIwNEUsCisgICAgMHhGMzQ5LCAweEYzNDksIDB4NTJDMiwgMHhGMzRBLCAweEYzNEEsIDB4MjQxQSwgMHhGMzRCLCAweEYzNEIsIDB4MjQxOSwKKyAgICAweEYzNEMsIDB4RjM0RiwgMHg1MkMzLCAweEYzNTAsIDB4RjM1MCwgMHgyNDBDLCAweEYzNTEsIDB4RjM2MCwgMHg1MkM3LAorICAgIDB4RjM2MSwgMHhGMzYxLCAweDFFMjksIDB4RjM2MiwgMHhGMzczLCAweDUyRDcsIDB4RjM3NCwgMHhGMzc0LCAweDI2NjEsCisgICAgMHhGMzc1LCAweEYzNzUsIDB4NTJFOSwgMHhGMzc2LCAweEYzNzYsIDB4MjZBNCwgMHhGMzc3LCAweEYzNzcsIDB4MjE3NCwKKyAgICAweEYzNzgsIDB4RjM3OCwgMHgyNjYzLCAweEYzNzksIDB4RjM3OSwgMHgyNjYyLCAweEYzN0EsIDB4RjM3RSwgMHg1MkVBLAorICAgIDB4RjM4MCwgMHhGMzhCLCAweDUyRUYsIDB4RjM4QywgMHhGMzhDLCAweDI2NzUsIDB4RjM4RCwgMHhGMzlGLCAweDUyRkIsCisgICAgMHhGM0EwLCAweEYzQTAsIDB4MjE0QywgMHhGM0ExLCAweEYzRkUsIDB4MUM0MSwgMHhGNDQwLCAweEY0NDQsIDB4NTMwRSwKKyAgICAweEY0NDUsIDB4RjQ0NSwgMHgyNjdBLCAweEY0NDYsIDB4RjQ0RiwgMHg1MzEzLCAweEY0NTAsIDB4RjQ1MCwgMHgyNkEwLAorICAgIDB4RjQ1MSwgMHhGNDU2LCAweDUzMUQsIDB4RjQ1NywgMHhGNDU3LCAweDI2NjgsIDB4RjQ1OCwgMHhGNDU4LCAweDUzMjMsCisgICAgMHhGNDU5LCAweEY0NTksIDB4MUVEMCwgMHhGNDVBLCAweEY0NUEsIDB4NTMyNCwgMHhGNDVCLCAweEY0NUIsIDB4MjA5NiwKKyAgICAweEY0NUMsIDB4RjQ1QywgMHg1MzI1LCAweEY0NUQsIDB4RjQ1RCwgMHgyM0NDLCAweEY0NUUsIDB4RjQ2MSwgMHg1MzI2LAorICAgIDB4RjQ2MiwgMHhGNDYyLCAweDIzQzgsIDB4RjQ2MywgMHhGNDYzLCAweDUzMkEsIDB4RjQ2NCwgMHhGNDY0LCAweDIyM0UsCisgICAgMHhGNDY1LCAweEY0NzQsIDB4NTMyQiwgMHhGNDc1LCAweEY0NzUsIDB4MjY2NSwgMHhGNDc2LCAweEY0N0IsIDB4NTMzQiwKKyAgICAweEY0N0MsIDB4RjQ3QywgMHgyNjY0LCAweEY0N0QsIDB4RjQ3RCwgMHg1MzQxLCAweEY0N0UsIDB4RjQ3RSwgMHgyMjM5LAorICAgIDB4RjQ4MCwgMHhGNDkzLCAweDUzNDIsIDB4RjQ5NCwgMHhGNDk0LCAweDIwNEEsIDB4RjQ5NSwgMHhGNDk4LCAweDUzNTYsCisgICAgMHhGNDk5LCAweEY0OTksIDB4MjYxRiwgMHhGNDlBLCAweEY0OUIsIDB4NTM1QSwgMHhGNDlDLCAweEY0OUMsIDB4MjYxRSwKKyAgICAweEY0OUQsIDB4RjRBMCwgMHg1MzVDLCAweEY0QTEsIDB4RjRGRSwgMHgxQzlGLCAweEY1NDAsIDB4RjU0NCwgMHg1MzYwLAorICAgIDB4RjU0NSwgMHhGNTQ1LCAweDI2MjAsIDB4RjU0NiwgMHhGNTQ2LCAweDUzNjUsIDB4RjU0NywgMHhGNTQ3LCAweDI2MjEsCisgICAgMHhGNTQ4LCAweEY1NTEsIDB4NTM2NiwgMHhGNTUyLCAweEY1NTIsIDB4MjYyMiwgMHhGNTUzLCAweEY1NTMsIDB4NTM3MCwKKyAgICAweEY1NTQsIDB4RjU1NCwgMHgyNjI3LCAweEY1NTUsIDB4RjU1NSwgMHgxRTM5LCAweEY1NTYsIDB4RjU1NiwgMHgyNjI1LAorICAgIDB4RjU1NywgMHhGNTVELCAweDUzNzEsIDB4RjU1RSwgMHhGNTVFLCAweDI2MjksIDB4RjU1RiwgMHhGNTYwLCAweDUzNzgsCisgICAgMHhGNTYxLCAweEY1NjEsIDB4MjYyRSwgMHhGNTYyLCAweEY1NjIsIDB4MjYyQiwgMHhGNTYzLCAweEY1NkQsIDB4NTM3QSwKKyAgICAweEY1NkUsIDB4RjU2RSwgMHgyNjJBLCAweEY1NkYsIDB4RjU2RiwgMHgyNjJELCAweEY1NzAsIDB4RjU3MCwgMHg1Mzg1LAorICAgIDB4RjU3MSwgMHhGNTcxLCAweDI2MjgsIDB4RjU3MiwgMHhGNTcyLCAweDIxQjksIDB4RjU3MywgMHhGNTdFLCAweDUzODYsCisgICAgMHhGNTgwLCAweEY1ODQsIDB4NTM5MiwgMHhGNTg1LCAweEY1ODUsIDB4MjYzNiwgMHhGNTg2LCAweEY1ODYsIDB4MjYzMCwKKyAgICAweEY1ODcsIDB4RjU4QiwgMHg1Mzk3LCAweEY1OEMsIDB4RjU4QywgMHgyNjM4LCAweEY1OEQsIDB4RjU4RCwgMHg1MzlDLAorICAgIDB4RjU4RSwgMHhGNThFLCAweDIwMEQsIDB4RjU4RiwgMHhGNThGLCAweDI2MzcsIDB4RjU5MCwgMHhGNTk4LCAweDUzOUQsCisgICAgMHhGNTk5LCAweEY1OTksIDB4MjY0NSwgMHhGNTlBLCAweEY1OUEsIDB4NTNBNiwgMHhGNTlCLCAweEY1OUIsIDB4MjYzQSwKKyAgICAweEY1OUMsIDB4RjU5RiwgMHg1M0E3LCAweEY1QTAsIDB4RjVBMCwgMHgyNjQzLCAweEY1QTEsIDB4RjVGRSwgMHgxQ0ZELAorICAgIDB4RjY0MCwgMHhGNjQwLCAweDUzQUIsIDB4RjY0MSwgMHhGNjQxLCAweDI2NDAsIDB4RjY0MiwgMHhGNjQ0LCAweDUzQUMsCisgICAgMHhGNjQ1LCAweEY2NDUsIDB4MjYzRCwgMHhGNjQ2LCAweEY2NDYsIDB4MjY0MSwgMHhGNjQ3LCAweEY2NDcsIDB4NTNBRiwKKyAgICAweEY2NDgsIDB4RjY0OCwgMHgyNjNFLCAweEY2NDksIDB4RjY0QSwgMHg1M0IwLCAweEY2NEIsIDB4RjY0QiwgMHgyNjNGLAorICAgIDB4RjY0QywgMHhGNjRDLCAweDFGQzAsIDB4RjY0RCwgMHhGNjRELCAweDUzQjIsIDB4RjY0RSwgMHhGNjRGLCAweDI2M0IsCisgICAgMHhGNjUwLCAweEY2NTMsIDB4NTNCMywgMHhGNjU0LCAweEY2NTQsIDB4MjY0MiwgMHhGNjU1LCAweEY2NTcsIDB4NTNCNywKKyAgICAweEY2NTgsIDB4RjY1OCwgMHgyNjQ0LCAweEY2NTksIDB4RjY2MCwgMHg1M0JBLCAweEY2NjEsIDB4RjY2MSwgMHgyNjM5LAorICAgIDB4RjY2MiwgMHhGNjYyLCAweDUzQzIsIDB4RjY2MywgMHhGNjYzLCAweDI2NEMsIDB4RjY2NCwgMHhGNjZCLCAweDUzQzMsCisgICAgMHhGNjZDLCAweEY2NkMsIDB4MjY0NywgMHhGNjZELCAweEY2NkQsIDB4MjY0QiwgMHhGNjZFLCAweEY2NzAsIDB4NTNDQiwKKyAgICAweEY2NzEsIDB4RjY3MSwgMHgyNjQ5LCAweEY2NzIsIDB4RjY3MywgMHg1M0NFLCAweEY2NzQsIDB4RjY3NCwgMHgyNjQ4LAorICAgIDB4RjY3NSwgMHhGNjc1LCAweDUzRDAsIDB4RjY3NiwgMHhGNjc2LCAweDI2NEEsIDB4RjY3NywgMHhGNjc3LCAweDIxMDgsCisgICAgMHhGNjc4LCAweEY2N0UsIDB4NTNEMSwgMHhGNjgwLCAweEY2ODQsIDB4NTNEOCwgMHhGNjg1LCAweEY2ODUsIDB4MjY0RCwKKyAgICAweEY2ODYsIDB4RjY4NywgMHg1M0RELCAweEY2ODgsIDB4RjY4OCwgMHgyNjM0LCAweEY2ODksIDB4RjY4OSwgMHg1M0RGLAorICAgIDB4RjY4QSwgMHhGNjhBLCAweDI2NTEsIDB4RjY4QiwgMHhGNjhDLCAweDUzRTAsIDB4RjY4RCwgMHhGNjhELCAweDI2NTAsCisgICAgMHhGNjhFLCAweEY2OEUsIDB4MjY1MiwgMHhGNjhGLCAweEY2OTEsIDB4NTNFMiwgMHhGNjkyLCAweEY2OTIsIDB4MjY0RiwKKyAgICAweEY2OTMsIDB4RjY5NSwgMHg1M0U1LCAweEY2OTYsIDB4RjY5NiwgMHgyNjMyLCAweEY2OTcsIDB4RjY5NywgMHgyNjRFLAorICAgIDB4RjY5OCwgMHhGNjk4LCAweDI2NTMsIDB4RjY5OSwgMHhGNjk5LCAweDUzRTgsIDB4RjY5QSwgMHhGNjlBLCAweDI2NTcsCisgICAgMHhGNjlCLCAweEY2OUIsIDB4NTNFOSwgMHhGNjlDLCAweEY2OUMsIDB4MjYzNSwgMHhGNjlELCAweEY2OUQsIDB4NTNFQSwKKyAgICAweEY2OUUsIDB4RjY5RSwgMHgyNjMzLCAweEY2OUYsIDB4RjY5RiwgMHg1M0VCLCAweEY2QTAsIDB4RjZBMCwgMHgyNjU2LAorICAgIDB4RjZBMSwgMHhGNkZFLCAweDFENUIsIDB4Rjc0MCwgMHhGNzQxLCAweDUzRUMsIDB4Rjc0MiwgMHhGNzQyLCAweDI2NTQsCisgICAgMHhGNzQzLCAweEY3NDgsIDB4NTNFRSwgMHhGNzQ5LCAweEY3NDksIDB4MjY1OCwgMHhGNzRBLCAweEY3NEIsIDB4NTNGNCwKKyAgICAweEY3NEMsIDB4Rjc0QywgMHgyNjU1LCAweEY3NEQsIDB4Rjc0RCwgMHgxRTRELCAweEY3NEUsIDB4Rjc1NSwgMHg1M0Y2LAorICAgIDB4Rjc1NiwgMHhGNzU2LCAweDI2NUIsIDB4Rjc1NywgMHhGNzU3LCAweDUzRkUsIDB4Rjc1OCwgMHhGNzU4LCAweDI2NUEsCisgICAgMHhGNzU5LCAweEY3NTksIDB4NTNGRiwgMHhGNzVBLCAweEY3NUEsIDB4MjY1OSwgMHhGNzVCLCAweEY3NUIsIDB4MjAyRSwKKyAgICAweEY3NUMsIDB4Rjc1QywgMHgyNjJGLCAweEY3NUQsIDB4Rjc2MCwgMHg1NDAwLCAweEY3NjEsIDB4Rjc2MSwgMHgyNjQ2LAorICAgIDB4Rjc2MiwgMHhGNzYyLCAweDU0MDQsIDB4Rjc2MywgMHhGNzYzLCAweDI2MjYsIDB4Rjc2NCwgMHhGNzZBLCAweDU0MDUsCisgICAgMHhGNzZCLCAweEY3NkIsIDB4MjY1QywgMHhGNzZDLCAweEY3NzAsIDB4NTQwQywgMHhGNzcxLCAweEY3NzEsIDB4MjYyQywKKyAgICAweEY3NzIsIDB4Rjc3QiwgMHg1NDExLCAweEY3N0MsIDB4Rjc3QywgMHgyNjIzLCAweEY3N0QsIDB4Rjc3RCwgMHg1NDFCLAorICAgIDB4Rjc3RSwgMHhGNzdFLCAweDI2MzEsIDB4Rjc4MCwgMHhGN0EwLCAweDU0MUMsIDB4RjdBMSwgMHhGN0ZFLCAweDFEQjksCisgICAgMHhGODQwLCAweEY4NDEsIDB4NTQzRCwgMHhGODQyLCAweEY4NDIsIDB4MjA5QywgMHhGODQzLCAweEY4NDUsIDB4NTQzRiwKKyAgICAweEY4NDYsIDB4Rjg0NiwgMHgyNTgwLCAweEY4NDcsIDB4Rjg0OCwgMHg1NDQyLCAweEY4NDksIDB4Rjg0OSwgMHgyMkRDLAorICAgIDB4Rjg0QSwgMHhGODRGLCAweDU0NDQsIDB4Rjg1MCwgMHhGODUwLCAweDFGMDUsIDB4Rjg1MSwgMHhGODUxLCAweDIwOEIsCisgICAgMHhGODUyLCAweEY4NTIsIDB4NTQ0QSwgMHhGODUzLCAweEY4NTMsIDB4MjU4MSwgMHhGODU0LCAweEY4NjIsIDB4NTQ0QiwKKyAgICAweEY4NjMsIDB4Rjg2MywgMHgyNTgzLCAweEY4NjQsIDB4Rjg2NCwgMHgyNTgyLCAweEY4NjUsIDB4Rjg2NSwgMHg1NDVBLAorICAgIDB4Rjg2NiwgMHhGODY2LCAweDIxRUUsIDB4Rjg2NywgMHhGODcxLCAweDU0NUIsIDB4Rjg3MiwgMHhGODcyLCAweDIxODIsCisgICAgMHhGODczLCAweEY4NzcsIDB4NTQ2NiwgMHhGODc4LCAweEY4NzgsIDB4MjI0MywgMHhGODc5LCAweEY4NzksIDB4NTQ2QiwKKyAgICAweEY4N0EsIDB4Rjg3QSwgMHgyNTg3LCAweEY4N0IsIDB4Rjg3QiwgMHg1NDZDLCAweEY4N0MsIDB4Rjg3QywgMHgyNTg4LAorICAgIDB4Rjg3RCwgMHhGODdFLCAweDU0NkQsIDB4Rjg4MCwgMHhGODgwLCAweDU0NkYsIDB4Rjg4MSwgMHhGODgxLCAweDI1ODQsCisgICAgMHhGODgyLCAweEY4ODMsIDB4NTQ3MCwgMHhGODg0LCAweEY4ODQsIDB4MjFGRCwgMHhGODg1LCAweEY4ODUsIDB4NTQ3MiwKKyAgICAweEY4ODYsIDB4Rjg4NiwgMHgyMUVGLCAweEY4ODcsIDB4Rjg4QywgMHg1NDczLCAweEY4OEQsIDB4Rjg4RCwgMHgyNThBLAorICAgIDB4Rjg4RSwgMHhGODhFLCAweDI1OEMsIDB4Rjg4RiwgMHhGODk4LCAweDU0NzksIDB4Rjg5OSwgMHhGODk5LCAweDFGNDcsCisgICAgMHhGODlBLCAweEY4OUMsIDB4NTQ4MywgMHhGODlELCAweEY4OUQsIDB4MUYxRCwgMHhGODlFLCAweEY4OUYsIDB4NTQ4NiwKKyAgICAweEY4QTAsIDB4RjhBMCwgMHgyNThELCAweEY5NDAsIDB4Rjk0RCwgMHg1NDg4LCAweEY5NEUsIDB4Rjk0RSwgMHgxRkQwLAorICAgIDB4Rjk0RiwgMHhGOTRGLCAweDI1OTIsIDB4Rjk1MCwgMHhGOTUwLCAweDI1OEYsIDB4Rjk1MSwgMHhGOTU4LCAweDU0OTYsCisgICAgMHhGOTU5LCAweEY5NTksIDB4MjU5NCwgMHhGOTVBLCAweEY5NUEsIDB4MUVFMCwgMHhGOTVCLCAweEY5NUMsIDB4NTQ5RSwKKyAgICAweEY5NUQsIDB4Rjk1RCwgMHgyNTkxLCAweEY5NUUsIDB4Rjk1RSwgMHgyNTk1LCAweEY5NUYsIDB4Rjk2NiwgMHg1NEEwLAorICAgIDB4Rjk2NywgMHhGOTY3LCAweDI1OTcsIDB4Rjk2OCwgMHhGOTY4LCAweDU0QTgsIDB4Rjk2OSwgMHhGOTY5LCAweDIwQjYsCisgICAgMHhGOTZBLCAweEY5NkIsIDB4NTRBOSwgMHhGOTZDLCAweEY5NkMsIDB4MjU5OCwgMHhGOTZELCAweEY5NkUsIDB4NTRBQiwKKyAgICAweEY5NkYsIDB4Rjk2RiwgMHgyMEY2LCAweEY5NzAsIDB4Rjk3RSwgMHg1NEFELCAweEY5ODAsIDB4Rjk4NCwgMHg1NEJDLAorICAgIDB4Rjk4NSwgMHhGOTg1LCAweDI1ODUsIDB4Rjk4NiwgMHhGOTg2LCAweDU0QzEsIDB4Rjk4NywgMHhGOTg3LCAweDI1OTksCisgICAgMHhGOTg4LCAweEY5OTAsIDB4NTRDMiwgMHhGOTkxLCAweEY5OTEsIDB4MjU5NiwgMHhGOTkyLCAweEY5OTUsIDB4NTRDQiwKKyAgICAweEY5OTYsIDB4Rjk5NiwgMHgyNTlBLCAweEY5OTcsIDB4Rjk5NywgMHg1NENGLCAweEY5OTgsIDB4Rjk5OCwgMHgyNTlCLAorICAgIDB4Rjk5OSwgMHhGOUEwLCAweDU0RDAsIDB4RkE0MCwgMHhGQTQxLCAweDU0RDgsIDB4RkE0MiwgMHhGQTQyLCAweDI1OUQsCisgICAgMHhGQTQzLCAweEZBNDUsIDB4NTREQSwgMHhGQTQ2LCAweEZBNDYsIDB4MjU5RSwgMHhGQTQ3LCAweEZBNEIsIDB4NTRERCwKKyAgICAweEZBNEMsIDB4RkE0QywgMHgyMzRDLCAweEZBNEQsIDB4RkE1MCwgMHg1NEUyLCAweEZBNTEsIDB4RkE1MSwgMHgxRjQ0LAorICAgIDB4RkE1MiwgMHhGQTU3LCAweDU0RTYsIDB4RkE1OCwgMHhGQTU4LCAweDI2NjAsIDB4RkE1OSwgMHhGQTU5LCAweDI1QTAsCisgICAgMHhGQTVBLCAweEZBNUMsIDB4NTRFQywgMHhGQTVELCAweEZBNUQsIDB4MjU5QywgMHhGQTVFLCAweEZBNUUsIDB4NTRFRiwKKyAgICAweEZBNUYsIDB4RkE1RiwgMHgyNTlGLCAweEZBNjAsIDB4RkE2MCwgMHg1NEYwLCAweEZBNjEsIDB4RkE2MSwgMHgxRjZDLAorICAgIDB4RkE2MiwgMHhGQTZGLCAweDU0RjEsIDB4RkE3MCwgMHhGQTcwLCAweDI1QTIsIDB4RkE3MSwgMHhGQTczLCAweDU0RkYsCisgICAgMHhGQTc0LCAweEZBNzQsIDB4MjBBRSwgMHhGQTc1LCAweEZBNzUsIDB4NTUwMiwgMHhGQTc2LCAweEZBNzYsIDB4MjU4QiwKKyAgICAweEZBNzcsIDB4RkE3NywgMHgyNUEzLCAweEZBNzgsIDB4RkE3RSwgMHg1NTAzLCAweEZBODAsIDB4RkE4MiwgMHg1NTBBLAorICAgIDB4RkE4MywgMHhGQTgzLCAweDI1ODksIDB4RkE4NCwgMHhGQTg0LCAweDI1QTUsIDB4RkE4NSwgMHhGQThDLCAweDU1MEQsCisgICAgMHhGQThELCAweEZBOEQsIDB4MjVBNCwgMHhGQThFLCAweEZBOEYsIDB4NTUxNSwgMHhGQTkwLCAweEZBOTAsIDB4MjVBNiwKKyAgICAweEZBOTEsIDB4RkE5MSwgMHgyNTkzLCAweEZBOTIsIDB4RkE5NSwgMHg1NTE3LCAweEZBOTYsIDB4RkE5NiwgMHgyNUE3LAorICAgIDB4RkE5NywgMHhGQTk3LCAweDIyMjIsIDB4RkE5OCwgMHhGQTk4LCAweDI1QTksIDB4RkE5OSwgMHhGQUEwLCAweDU1MUIsCisgICAgMHhGQjQwLCAweEZCNDgsIDB4NTUyMywgMHhGQjQ5LCAweEZCNDksIDB4MjVBOCwgMHhGQjRBLCAweEZCNTEsIDB4NTUyQywKKyAgICAweEZCNTIsIDB4RkI1MiwgMHgyNTg2LCAweEZCNTMsIDB4RkI1NiwgMHg1NTM0LCAweEZCNTcsIDB4RkI1NywgMHgyNUExLAorICAgIDB4RkI1OCwgMHhGQjU4LCAweDI1QUEsIDB4RkI1OSwgMHhGQjU5LCAweDU1MzgsIDB4RkI1QSwgMHhGQjVBLCAweDI1OTAsCisgICAgMHhGQjVCLCAweEZCNUIsIDB4MjU4RSwgMHhGQjVDLCAweEZCNzQsIDB4NTUzOSwgMHhGQjc1LCAweEZCNzUsIDB4MjY4OCwKKyAgICAweEZCNzYsIDB4RkI3OCwgMHg1NTUyLCAweEZCNzksIDB4RkI3OSwgMHgyNjlFLCAweEZCN0EsIDB4RkI3QSwgMHgyNUZCLAorICAgIDB4RkI3QiwgMHhGQjdCLCAweDU1NTUsIDB4RkI3QywgMHhGQjdDLCAweDFGOEMsIDB4RkI3RCwgMHhGQjdELCAweDIxRjQsCisgICAgMHhGQjdFLCAweEZCN0UsIDB4NTU1NiwgMHhGQjgwLCAweEZCOEYsIDB4NTU1NywgMHhGQjkwLCAweEZCOTAsIDB4MjAwRiwKKyAgICAweEZCOTEsIDB4RkI5QiwgMHg1NTY3LCAweEZCOUMsIDB4RkI5QywgMHgyMDcxLCAweEZCOUQsIDB4RkI5RSwgMHg1NTcyLAorICAgIDB4RkI5RiwgMHhGQjlGLCAweDI1RjcsIDB4RkJBMCwgMHhGQkEwLCAweDU1NzQsIDB4RkM0MCwgMHhGQzQzLCAweDU1NzUsCisgICAgMHhGQzQ0LCAweEZDNDQsIDB4MjY5NiwgMHhGQzQ1LCAweEZDNDgsIDB4NTU3OSwgMHhGQzQ5LCAweEZDNDksIDB4MjY4RiwKKyAgICAweEZDNEEsIDB4RkM1OSwgMHg1NTdELCAweEZDNUEsIDB4RkM1QSwgMHgyMkRBLCAweEZDNUIsIDB4RkM2MiwgMHg1NThELAorICAgIDB4RkM2MywgMHhGQzYzLCAweDFFQzEsIDB4RkM2NCwgMHhGQzY3LCAweDU1OTUsIDB4RkM2OCwgMHhGQzY4LCAweDFFQjMsCisgICAgMHhGQzY5LCAweEZDNkUsIDB4NTU5OSwgMHhGQzZGLCAweEZDNkYsIDB4MjY2QSwgMHhGQzcwLCAweEZDNzAsIDB4NTU5RiwKKyAgICAweEZDNzEsIDB4RkM3MSwgMHgyNjhBLCAweEZDNzIsIDB4RkM3MywgMHg1NUEwLCAweEZDNzQsIDB4RkM3NCwgMHgyNjY5LAorICAgIDB4RkM3NSwgMHhGQzc2LCAweDU1QTIsIDB4RkM3NywgMHhGQzc4LCAweDI2MTgsIDB4RkM3OSwgMHhGQzdFLCAweDU1QTQsCisgICAgMHhGQzgwLCAweEZDODIsIDB4NTVBQSwgMHhGQzgzLCAweEZDODMsIDB4MjYxQSwgMHhGQzg0LCAweEZDODksIDB4NTVBRCwKKyAgICAweEZDOEEsIDB4RkM4QSwgMHgyNjczLCAweEZDOEIsIDB4RkNBMCwgMHg1NUIzLCAweEZENDAsIDB4RkQ1MSwgMHg1NUM5LAorICAgIDB4RkQ1MiwgMHhGRDUyLCAweDIwQzYsIDB4RkQ1MywgMHhGRDUzLCAweDIyNkIsIDB4RkQ1NCwgMHhGRDU2LCAweDU1REIsCisgICAgMHhGRDU3LCAweEZENTcsIDB4MjREMywgMHhGRDU4LCAweEZENTgsIDB4MUU4NiwgMHhGRDU5LCAweEZENTksIDB4NTVERSwKKyAgICAweEZENUEsIDB4RkQ1QSwgMHgyNjBGLCAweEZENUIsIDB4RkQ1RSwgMHg1NURGLCAweEZENUYsIDB4RkQ1RiwgMHgyNjExLAorICAgIDB4RkQ2MCwgMHhGRDYxLCAweDU1RTMsIDB4RkQ2MiwgMHhGRDYyLCAweDI2MTMsIDB4RkQ2MywgMHhGRDY0LCAweDU1RTUsCisgICAgMHhGRDY1LCAweEZENjUsIDB4MjYxMCwgMHhGRDY2LCAweEZENjYsIDB4MjYxMiwgMHhGRDY3LCAweEZENjcsIDB4MjAzMCwKKyAgICAweEZENjgsIDB4RkQ2OCwgMHg1NUU3LCAweEZENjksIDB4RkQ2OSwgMHgyNjcxLCAweEZENkEsIDB4RkQ2QiwgMHg1NUU4LAorICAgIDB4RkQ2QywgMHhGRDZDLCAweDI2MTQsIDB4RkQ2RCwgMHhGRDZGLCAweDU1RUEsIDB4RkQ3MCwgMHhGRDcwLCAweDI2MTYsCisgICAgMHhGRDcxLCAweEZENzEsIDB4NTVFRCwgMHhGRDcyLCAweEZENzIsIDB4MjYxNSwgMHhGRDczLCAweEZENzcsIDB4NTVFRSwKKyAgICAweEZENzgsIDB4RkQ3OCwgMHgyMEYyLCAweEZENzksIDB4RkQ3QywgMHg1NUYzLCAweEZEN0QsIDB4RkQ3RCwgMHgyNjE3LAorICAgIDB4RkQ3RSwgMHhGRDdFLCAweDU1RjcsIDB4RkQ4MCwgMHhGRDg3LCAweDU1RjgsIDB4RkQ4OCwgMHhGRDg4LCAweDIwMzcsCisgICAgMHhGRDg5LCAweEZEOEEsIDB4NTYwMCwgMHhGRDhCLCAweEZEOEIsIDB4MjBCMywgMHhGRDhDLCAweEZEOEUsIDB4NTYwMiwKKyAgICAweEZEOEYsIDB4RkQ4RiwgMHgxRjIyLCAweEZEOTAsIDB4RkQ5MCwgMHgyNEVELCAweEZEOTEsIDB4RkQ5MywgMHg1NjA1LAorICAgIDB4RkQ5NCwgMHhGRDk0LCAweDFGMzQsIDB4RkQ5NSwgMHhGRDlDLCAweDU2MDgsIDB4RkQ5RCwgMHhGRDlELCAweDBBMDIsCisgICAgMHhGRDlFLCAweEZEOUUsIDB4NDBEMywgMHhGRDlGLCAweEZEOUYsIDB4MjAwQywgMHhGREEwLCAweEZEQTAsIDB4NTA4MywKKyAgICAweEZFNDAsIDB4RkU0MCwgMHgxMjU5LCAweEZFNDEsIDB4RkU3RSwgMHg1NjEwLCAweEZFODAsIDB4RkVBMCwgMHg1NjRFLAorfTsKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9HQjEvR0JLcC1FVUMtSF8yLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9HQjEvR0JLcC1FVUMtSF8yLmNwcAppbmRleCBlYmIxNjU5Li4yMjZjOTUwIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvR0IxL0dCS3AtRVVDLUhfMi5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0dCMS9HQktwLUVVQy1IXzIuY3BwCkBAIC0xLDEzNjUgKzEsMTM2NSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0dCS3BfRVVDX0hfMls0MDcwICogM10gPSB7DQotICAgIDB4MDAyMCwgMHgwMDdFLCAweDAwMDEsIDB4ODE0MCwgMHg4MTc4LCAweDI3NTgsIDB4ODE3OSwgMHg4MTc5LCAweDIwNTksDQotICAgIDB4ODE3QSwgMHg4MTdFLCAweDI3OTEsIDB4ODE4MCwgMHg4MTg1LCAweDI3OTYsIDB4ODE4NiwgMHg4MTg2LCAweDIxRjEsDQotICAgIDB4ODE4NywgMHg4MUVDLCAweDI3OUMsIDB4ODFFRCwgMHg4MUVELCAweDFGRjIsIDB4ODFFRSwgMHg4MUY1LCAweDI4MDIsDQotICAgIDB4ODFGNiwgMHg4MUY2LCAweDIwNUQsIDB4ODFGNywgMHg4MUZFLCAweDI4MEEsIDB4ODI0MCwgMHg4MjUyLCAweDI4MTIsDQotICAgIDB4ODI1MywgMHg4MjUzLCAweDI2OUMsIDB4ODI1NCwgMHg4MjYxLCAweDI4MjUsIDB4ODI2MiwgMHg4MjYyLCAweDIxQjUsDQotICAgIDB4ODI2MywgMHg4MjczLCAweDI4MzMsIDB4ODI3NCwgMHg4Mjc0LCAweDIyQ0MsIDB4ODI3NSwgMHg4Mjc5LCAweDI4NDQsDQotICAgIDB4ODI3QSwgMHg4MjdBLCAweDIwMTYsIDB4ODI3QiwgMHg4MjdDLCAweDI4NDksIDB4ODI3RCwgMHg4MjdELCAweDFFNjIsDQotICAgIDB4ODI3RSwgMHg4MjdFLCAweDI4NEIsIDB4ODI4MCwgMHg4MjgwLCAweDFGMjAsIDB4ODI4MSwgMHg4MjgyLCAweDI4NEMsDQotICAgIDB4ODI4MywgMHg4MjgzLCAweDIwN0YsIDB4ODI4NCwgMHg4MjhGLCAweDI4NEUsIDB4ODI5MCwgMHg4MjkwLCAweDIwNUMsDQotICAgIDB4ODI5MSwgMHg4MkE0LCAweDI4NUEsIDB4ODJBNSwgMHg4MkE1LCAweDIxOTQsIDB4ODJBNiwgMHg4MkM3LCAweDI4NkUsDQotICAgIDB4ODJDOCwgMHg4MkM4LCAweDFFNjUsIDB4ODJDOSwgMHg4MkM5LCAweDIyODEsIDB4ODJDQSwgMHg4MkUwLCAweDI4OTAsDQotICAgIDB4ODJFMSwgMHg4MkUxLCAweDIyQ0QsIDB4ODJFMiwgMHg4MkUyLCAweDI4QTcsIDB4ODJFMywgMHg4MkUzLCAweDIxMEEsDQotICAgIDB4ODJFNCwgMHg4MkU0LCAweDFFM0UsIDB4ODJFNSwgMHg4MkVDLCAweDI4QTgsIDB4ODJFRCwgMHg4MkVELCAweDI2N0YsDQotICAgIDB4ODJFRSwgMHg4MkYxLCAweDI4QjAsIDB4ODJGMiwgMHg4MkYyLCAweDIyMkUsIDB4ODJGMywgMHg4MkY2LCAweDI4QjQsDQotICAgIDB4ODJGNywgMHg4MkY3LCAweDFFOTYsIDB4ODJGOCwgMHg4MkY4LCAweDIyQ0IsIDB4ODJGOSwgMHg4MkY5LCAweDIyNkMsDQotICAgIDB4ODJGQSwgMHg4MkZBLCAweDI4QjgsIDB4ODJGQiwgMHg4MkZCLCAweDIxMTcsIDB4ODJGQywgMHg4MkZFLCAweDI4QjksDQotICAgIDB4ODM0MCwgMHg4MzQwLCAweDI4QkMsIDB4ODM0MSwgMHg4MzQxLCAweDIwRTgsIDB4ODM0MiwgMHg4MzQ0LCAweDI4QkQsDQotICAgIDB4ODM0NSwgMHg4MzQ1LCAweDIyRDQsIDB4ODM0NiwgMHg4MzQ3LCAweDI4QzAsIDB4ODM0OCwgMHg4MzQ4LCAweDFGQjksDQotICAgIDB4ODM0OSwgMHg4MzRCLCAweDI4QzIsIDB4ODM0QywgMHg4MzRDLCAweDIyRDgsIDB4ODM0RCwgMHg4MzUyLCAweDI4QzUsDQotICAgIDB4ODM1MywgMHg4MzUzLCAweDIwREYsIDB4ODM1NCwgMHg4MzU2LCAweDI4Q0IsIDB4ODM1NywgMHg4MzU3LCAweDIwQzIsDQotICAgIDB4ODM1OCwgMHg4MzVELCAweDI4Q0UsIDB4ODM1RSwgMHg4MzVFLCAweDIxOTUsIDB4ODM1RiwgMHg4MzY0LCAweDI4RDQsDQotICAgIDB4ODM2NSwgMHg4MzY1LCAweDFGQUMsIDB4ODM2NiwgMHg4MzY2LCAweDIyRDMsIDB4ODM2NywgMHg4MzcxLCAweDI4REEsDQotICAgIDB4ODM3MiwgMHg4MzcyLCAweDFGODEsIDB4ODM3MywgMHg4Mzc3LCAweDI4RTUsIDB4ODM3OCwgMHg4Mzc4LCAweDIyMTAsDQotICAgIDB4ODM3OSwgMHg4Mzc5LCAweDI4RUEsIDB4ODM3QSwgMHg4MzdBLCAweDIyQ0YsIDB4ODM3QiwgMHg4MzdCLCAweDI4RUIsDQotICAgIDB4ODM3QywgMHg4MzdDLCAweDIyMTMsIDB4ODM3RCwgMHg4MzdELCAweDI4RUMsIDB4ODM3RSwgMHg4MzdFLCAweDFGRTQsDQotICAgIDB4ODM4MCwgMHg4MzgwLCAweDFGOTAsIDB4ODM4MSwgMHg4Mzg1LCAweDI4RUQsIDB4ODM4NiwgMHg4Mzg2LCAweDIyRDYsDQotICAgIDB4ODM4NywgMHg4Mzg4LCAweDI4RjIsIDB4ODM4OSwgMHg4Mzg5LCAweDIyRDAsIDB4ODM4QSwgMHg4MzhBLCAweDIyQ0UsDQotICAgIDB4ODM4QiwgMHg4MzhDLCAweDI4RjQsIDB4ODM4RCwgMHg4MzhELCAweDI2ODEsIDB4ODM4RSwgMHg4MzkzLCAweDI4RjYsDQotICAgIDB4ODM5NCwgMHg4Mzk0LCAweDFFNzYsIDB4ODM5NSwgMHg4MzlELCAweDI4RkMsIDB4ODM5RSwgMHg4MzlFLCAweDIyMzEsDQotICAgIDB4ODM5RiwgMHg4M0E1LCAweDI5MDUsIDB4ODNBNiwgMHg4M0E2LCAweDFFOTMsIDB4ODNBNywgMHg4M0FBLCAweDI5MEMsDQotICAgIDB4ODNBQiwgMHg4M0FCLCAweDIyRDIsIDB4ODNBQywgMHg4M0FELCAweDI5MTAsIDB4ODNBRSwgMHg4M0FFLCAweDIyRDcsDQotICAgIDB4ODNBRiwgMHg4M0FGLCAweDIyRDUsIDB4ODNCMCwgMHg4M0IwLCAweDIyRDEsIDB4ODNCMSwgMHg4M0I5LCAweDI5MTIsDQotICAgIDB4ODNCQSwgMHg4M0JBLCAweDFFRTUsIDB4ODNCQiwgMHg4M0M4LCAweDI5MUIsIDB4ODNDOSwgMHg4M0M5LCAweDIwMjUsDQotICAgIDB4ODNDQSwgMHg4M0Y1LCAweDI5MjksIDB4ODNGNiwgMHg4M0Y2LCAweDFFQ0YsIDB4ODNGNywgMHg4M0ZFLCAweDI5NTUsDQotICAgIDB4ODQ0MCwgMHg4NDRGLCAweDI5NUQsIDB4ODQ1MCwgMHg4NDUwLCAweDFGRDksIDB4ODQ1MSwgMHg4NDcwLCAweDI5NkQsDQotICAgIDB4ODQ3MSwgMHg4NDcxLCAweDIyQzgsIDB4ODQ3MiwgMHg4NDczLCAweDI5OEQsIDB4ODQ3NCwgMHg4NDc0LCAweDIyNjMsDQotICAgIDB4ODQ3NSwgMHg4NDc2LCAweDI5OEYsIDB4ODQ3NywgMHg4NDc3LCAweDI2ODMsIDB4ODQ3OCwgMHg4NDdFLCAweDI5OTEsDQotICAgIDB4ODQ4MCwgMHg4NDgxLCAweDI5OTgsIDB4ODQ4MiwgMHg4NDgyLCAweDFGMTcsIDB4ODQ4MywgMHg4NDhELCAweDI5OUEsDQotICAgIDB4ODQ4RSwgMHg4NDhFLCAweDFGMkIsIDB4ODQ4RiwgMHg4NDkxLCAweDI5QTUsIDB4ODQ5MiwgMHg4NDkyLCAweDIyQ0EsDQotICAgIDB4ODQ5MywgMHg4NDkzLCAweDFFOTksIDB4ODQ5NCwgMHg4NDlDLCAweDI5QTgsIDB4ODQ5RCwgMHg4NDlELCAweDFGNEYsDQotICAgIDB4ODQ5RSwgMHg4NEEwLCAweDI5QjEsIDB4ODRBMSwgMHg4NEExLCAweDFGQ0YsIDB4ODRBMiwgMHg4NEEyLCAweDIwMzYsDQotICAgIDB4ODRBMywgMHg4NEEzLCAweDFGM0EsIDB4ODRBNCwgMHg4NEE0LCAweDI5QjQsIDB4ODRBNSwgMHg4NEE1LCAweDIyQzksDQotICAgIDB4ODRBNiwgMHg4NEE2LCAweDFGOTksIDB4ODRBNywgMHg4NEE4LCAweDI5QjUsIDB4ODRBOSwgMHg4NEE5LCAweDFGNzUsDQotICAgIDB4ODRBQSwgMHg4NEM0LCAweDI5QjcsIDB4ODRDNSwgMHg4NEM1LCAweDFGQkUsIDB4ODRDNiwgMHg4NEQyLCAweDI5RDIsDQotICAgIDB4ODREMywgMHg4NEQzLCAweDFFQ0QsIDB4ODRENCwgMHg4NEQ0LCAweDI5REYsIDB4ODRENSwgMHg4NEQ1LCAweDIxQTksDQotICAgIDB4ODRENiwgMHg4NEQ2LCAweDI5RTAsIDB4ODRENywgMHg4NEQ3LCAweDIxRTYsIDB4ODREOCwgMHg4NEQ4LCAweDI5RTEsDQotICAgIDB4ODREOSwgMHg4NEQ5LCAweDIxMjcsIDB4ODREQSwgMHg4NERBLCAweDIwMDMsIDB4ODREQiwgMHg4NERDLCAweDI5RTIsDQotICAgIDB4ODRERCwgMHg4NERELCAweDIxMzIsIDB4ODRERSwgMHg4NEU5LCAweDI5RTQsIDB4ODRFQSwgMHg4NEVBLCAweDIzMjMsDQotICAgIDB4ODRFQiwgMHg4NEVELCAweDI5RjAsIDB4ODRFRSwgMHg4NEVFLCAweDIwMTEsIDB4ODRFRiwgMHg4NEYwLCAweDI5RjMsDQotICAgIDB4ODRGMSwgMHg4NEYxLCAweDIwRjUsIDB4ODRGMiwgMHg4NEZFLCAweDI5RjUsIDB4ODU0MCwgMHg4NTUwLCAweDJBMDIsDQotICAgIDB4ODU1MSwgMHg4NTUxLCAweDIyQzUsIDB4ODU1MiwgMHg4NTUyLCAweDFGNUUsIDB4ODU1MywgMHg4NTUzLCAweDJBMTMsDQotICAgIDB4ODU1NCwgMHg4NTU0LCAweDIyQzYsIDB4ODU1NSwgMHg4NTVELCAweDJBMTQsIDB4ODU1RSwgMHg4NTVFLCAweDIwRUYsDQotICAgIDB4ODU1RiwgMHg4NTY1LCAweDJBMUQsIDB4ODU2NiwgMHg4NTY2LCAweDIxRDAsIDB4ODU2NywgMHg4NTdFLCAweDJBMjQsDQotICAgIDB4ODU4MCwgMHg4NTg2LCAweDJBM0MsIDB4ODU4NywgMHg4NTg3LCAweDIyQzEsIDB4ODU4OCwgMHg4NThBLCAweDJBNDMsDQotICAgIDB4ODU4QiwgMHg4NThCLCAweDFFNjQsIDB4ODU4QywgMHg4NTkxLCAweDJBNDYsIDB4ODU5MiwgMHg4NTkyLCAweDIxRjksDQotICAgIDB4ODU5MywgMHg4NTk1LCAweDJBNEMsIDB4ODU5NiwgMHg4NTk2LCAweDIwMTAsIDB4ODU5NywgMHg4NTk3LCAweDJBNEYsDQotICAgIDB4ODU5OCwgMHg4NTk4LCAweDIyQzIsIDB4ODU5OSwgMHg4NUExLCAweDJBNTAsIDB4ODVBMiwgMHg4NUEyLCAweDFFNUEsDQotICAgIDB4ODVBMywgMHg4NUIxLCAweDJBNTksIDB4ODVCMiwgMHg4NUIyLCAweDFFQTIsIDB4ODVCMywgMHg4NUZFLCAweDJBNjgsDQotICAgIDB4ODY0MCwgMHg4NjQ5LCAweDJBQjQsIDB4ODY0QSwgMHg4NjRBLCAweDIzNkQsIDB4ODY0QiwgMHg4NjUzLCAweDJBQkUsDQotICAgIDB4ODY1NCwgMHg4NjU0LCAweDIyNDcsIDB4ODY1NSwgMHg4NjY3LCAweDJBQzcsIDB4ODY2OCwgMHg4NjY4LCAweDIzNkMsDQotICAgIDB4ODY2OSwgMHg4NjdFLCAweDJBREEsIDB4ODY4MCwgMHg4Njk1LCAweDJBRjAsIDB4ODY5NiwgMHg4Njk2LCAweDIxOUMsDQotICAgIDB4ODY5NywgMHg4Njk4LCAweDJCMDYsIDB4ODY5OSwgMHg4Njk5LCAweDIwQzksIDB4ODY5QSwgMHg4NkEwLCAweDJCMDgsDQotICAgIDB4ODZBMSwgMHg4NkExLCAweDIxRjAsIDB4ODZBMiwgMHg4NkM5LCAweDJCMEYsIDB4ODZDQSwgMHg4NkNBLCAweDIxMEIsDQotICAgIDB4ODZDQiwgMHg4NkNCLCAweDJCMzcsIDB4ODZDQywgMHg4NkNDLCAweDIwREUsIDB4ODZDRCwgMHg4NkNELCAweDJCMzgsDQotICAgIDB4ODZDRSwgMHg4NkNFLCAweDFFQUEsIDB4ODZDRiwgMHg4NkQwLCAweDJCMzksIDB4ODZEMSwgMHg4NkQxLCAweDIyMkMsDQotICAgIDB4ODZEMiwgMHg4NkRCLCAweDJCM0IsIDB4ODZEQywgMHg4NkRDLCAweDIwRDgsIDB4ODZERCwgMHg4NkRELCAweDIyQzAsDQotICAgIDB4ODZERSwgMHg4NkUwLCAweDJCNDUsIDB4ODZFMSwgMHg4NkUxLCAweDIwNkYsIDB4ODZFMiwgMHg4NkU3LCAweDJCNDgsDQotICAgIDB4ODZFOCwgMHg4NkU4LCAweDIxQTEsIDB4ODZFOSwgMHg4NkVELCAweDJCNEUsIDB4ODZFRSwgMHg4NkVFLCAweDIzNzksDQotICAgIDB4ODZFRiwgMHg4NkYzLCAweDJCNTMsIDB4ODZGNCwgMHg4NkY0LCAweDIzNzIsIDB4ODZGNSwgMHg4NkZFLCAweDJCNTgsDQotICAgIDB4ODc0MCwgMHg4NzQwLCAweDIxNkEsIDB4ODc0MSwgMHg4NzQzLCAweDJCNjIsIDB4ODc0NCwgMHg4NzQ0LCAweDIzN0MsDQotICAgIDB4ODc0NSwgMHg4NzQ4LCAweDJCNjUsIDB4ODc0OSwgMHg4NzQ5LCAweDIwQjAsIDB4ODc0QSwgMHg4NzRBLCAweDJCNjksDQotICAgIDB4ODc0QiwgMHg4NzRCLCAweDIzN0EsIDB4ODc0QywgMHg4NzRDLCAweDFFNzQsIDB4ODc0RCwgMHg4NzRFLCAweDJCNkEsDQotICAgIDB4ODc0RiwgMHg4NzRGLCAweDIzNzcsIDB4ODc1MCwgMHg4NzU2LCAweDJCNkMsIDB4ODc1NywgMHg4NzU3LCAweDFGNEMsDQotICAgIDB4ODc1OCwgMHg4NzU5LCAweDJCNzMsIDB4ODc1QSwgMHg4NzVBLCAweDIzNzgsIDB4ODc1QiwgMHg4NzVCLCAweDIxQ0YsDQotICAgIDB4ODc1QywgMHg4NzVDLCAweDIzNjgsIDB4ODc1RCwgMHg4NzVELCAweDJCNzUsIDB4ODc1RSwgMHg4NzVFLCAweDIzNzEsDQotICAgIDB4ODc1RiwgMHg4NzVGLCAweDJCNzYsIDB4ODc2MCwgMHg4NzYwLCAweDIzNjksIDB4ODc2MSwgMHg4NzY1LCAweDJCNzcsDQotICAgIDB4ODc2NiwgMHg4NzY2LCAweDI2NzQsIDB4ODc2NywgMHg4Nzc5LCAweDJCN0MsIDB4ODc3QSwgMHg4NzdBLCAweDIzNkYsDQotICAgIDB4ODc3QiwgMHg4NzdDLCAweDJCOEYsIDB4ODc3RCwgMHg4NzdELCAweDIzNzAsIDB4ODc3RSwgMHg4NzdFLCAweDJCOTEsDQotICAgIDB4ODc4MCwgMHg4NzgwLCAweDJCOTIsIDB4ODc4MSwgMHg4NzgxLCAweDIzNzYsIDB4ODc4MiwgMHg4NzgyLCAweDIzNzMsDQotICAgIDB4ODc4MywgMHg4Nzg1LCAweDJCOTMsIDB4ODc4NiwgMHg4Nzg2LCAweDIzN0YsIDB4ODc4NywgMHg4Nzg3LCAweDJCOTYsDQotICAgIDB4ODc4OCwgMHg4Nzg4LCAweDIzNzQsIDB4ODc4OSwgMHg4Nzg5LCAweDJCOTcsIDB4ODc4QSwgMHg4NzhBLCAweDIwQjUsDQotICAgIDB4ODc4QiwgMHg4NzhDLCAweDJCOTgsIDB4ODc4RCwgMHg4NzhELCAweDFFREIsIDB4ODc4RSwgMHg4NzhFLCAweDI2NzIsDQotICAgIDB4ODc4RiwgMHg4NzkyLCAweDJCOUEsIDB4ODc5MywgMHg4NzkzLCAweDIzNkUsIDB4ODc5NCwgMHg4Nzk3LCAweDJCOUUsDQotICAgIDB4ODc5OCwgMHg4Nzk4LCAweDIxQjcsIDB4ODc5OSwgMHg4NzlDLCAweDJCQTIsIDB4ODc5RCwgMHg4NzlELCAweDIzNzUsDQotICAgIDB4ODc5RSwgMHg4N0EyLCAweDJCQTYsIDB4ODdBMywgMHg4N0EzLCAweDIzODIsIDB4ODdBNCwgMHg4N0E2LCAweDJCQUIsDQotICAgIDB4ODdBNywgMHg4N0E3LCAweDIwOUUsIDB4ODdBOCwgMHg4N0IyLCAweDJCQUUsIDB4ODdCMywgMHg4N0IzLCAweDIzNkIsDQotICAgIDB4ODdCNCwgMHg4N0I0LCAweDJCQjksIDB4ODdCNSwgMHg4N0I1LCAweDIwMzksIDB4ODdCNiwgMHg4N0JBLCAweDJCQkEsDQotICAgIDB4ODdCQiwgMHg4N0JCLCAweDI2OUYsIDB4ODdCQywgMHg4N0JFLCAweDJCQkYsIDB4ODdCRiwgMHg4N0JGLCAweDIzN0QsDQotICAgIDB4ODdDMCwgMHg4N0MwLCAweDIxRjUsIDB4ODdDMSwgMHg4N0MxLCAweDJCQzIsIDB4ODdDMiwgMHg4N0MyLCAweDIzODEsDQotICAgIDB4ODdDMywgMHg4N0M5LCAweDJCQzMsIDB4ODdDQSwgMHg4N0NBLCAweDIzN0IsIDB4ODdDQiwgMHg4N0NCLCAweDIzN0UsDQotICAgIDB4ODdDQywgMHg4N0NDLCAweDIxQ0MsIDB4ODdDRCwgMHg4N0NFLCAweDJCQ0EsIDB4ODdDRiwgMHg4N0NGLCAweDIyREIsDQotICAgIDB4ODdEMCwgMHg4N0QxLCAweDJCQ0MsIDB4ODdEMiwgMHg4N0QyLCAweDIzNkEsIDB4ODdEMywgMHg4N0QzLCAweDI2ODksDQotICAgIDB4ODdENCwgMHg4N0Q0LCAweDJCQ0UsIDB4ODdENSwgMHg4N0Q1LCAweDI2OTcsIDB4ODdENiwgMHg4N0Q5LCAweDJCQ0YsDQotICAgIDB4ODdEQSwgMHg4N0RBLCAweDIyQTEsIDB4ODdEQiwgMHg4N0Y2LCAweDJCRDMsIDB4ODdGNywgMHg4N0Y3LCAweDIzODMsDQotICAgIDB4ODdGOCwgMHg4N0Y4LCAweDFGM0QsIDB4ODdGOSwgMHg4N0Y5LCAweDJCRUYsIDB4ODdGQSwgMHg4N0ZBLCAweDIxOEYsDQotICAgIDB4ODdGQiwgMHg4N0ZFLCAweDJCRjAsIDB4ODg0MCwgMHg4ODQwLCAweDIyNDYsIDB4ODg0MSwgMHg4ODQxLCAweDIyNDgsDQotICAgIDB4ODg0MiwgMHg4ODQzLCAweDJCRjQsIDB4ODg0NCwgMHg4ODQ0LCAweDIxN0UsIDB4ODg0NSwgMHg4ODQ1LCAweDJCRjYsDQotICAgIDB4ODg0NiwgMHg4ODQ2LCAweDIxODAsIDB4ODg0NywgMHg4ODdFLCAweDJCRjcsIDB4ODg4MCwgMHg4OEI5LCAweDJDMkYsDQotICAgIDB4ODhCQSwgMHg4OEJBLCAweDIzMkEsIDB4ODhCQiwgMHg4OENCLCAweDJDNjksIDB4ODhDQywgMHg4OENDLCAweDIyOEIsDQotICAgIDB4ODhDRCwgMHg4OEQzLCAweDJDN0EsIDB4ODhENCwgMHg4OEQ0LCAweDFGODUsIDB4ODhENSwgMHg4OEQ2LCAweDJDODEsDQotICAgIDB4ODhENywgMHg4OEQ3LCAweDIzMjUsIDB4ODhEOCwgMHg4OERFLCAweDJDODMsIDB4ODhERiwgMHg4OERGLCAweDIzMkMsDQotICAgIDB4ODhFMCwgMHg4OEU0LCAweDJDOEEsIDB4ODhFNSwgMHg4OEU1LCAweDIzMkUsIDB4ODhFNiwgMHg4OEYxLCAweDJDOEYsDQotICAgIDB4ODhGMiwgMHg4OEYyLCAweDIyMDUsIDB4ODhGMywgMHg4OEYzLCAweDFFMzgsIDB4ODhGNCwgMHg4OEY1LCAweDJDOUIsDQotICAgIDB4ODhGNiwgMHg4OEY2LCAweDFFNzMsIDB4ODhGNywgMHg4OEZFLCAweDJDOUQsIDB4ODk0MCwgMHg4OTRBLCAweDJDQTUsDQotICAgIDB4ODk0QiwgMHg4OTRCLCAweDFGRTMsIDB4ODk0QywgMHg4OTRDLCAweDIzMzksIDB4ODk0RCwgMHg4OTRELCAweDJDQjAsDQotICAgIDB4ODk0RSwgMHg4OTRFLCAweDIzMkIsIDB4ODk0RiwgMHg4OTRGLCAweDJDQjEsIDB4ODk1MCwgMHg4OTUwLCAweDIzMkQsDQotICAgIDB4ODk1MSwgMHg4OTUzLCAweDJDQjIsIDB4ODk1NCwgMHg4OTU0LCAweDIxN0YsIDB4ODk1NSwgMHg4OTVDLCAweDJDQjUsDQotICAgIDB4ODk1RCwgMHg4OTVELCAweDIxQTcsIDB4ODk1RSwgMHg4OTVFLCAweDJDQkQsIDB4ODk1RiwgMHg4OTVGLCAweDIzMkYsDQotICAgIDB4ODk2MCwgMHg4OTZDLCAweDJDQkUsIDB4ODk2RCwgMHg4OTZELCAweDFFN0QsIDB4ODk2RSwgMHg4OTcwLCAweDJDQ0IsDQotICAgIDB4ODk3MSwgMHg4OTcxLCAweDIwRDYsIDB4ODk3MiwgMHg4OTdCLCAweDJDQ0UsIDB4ODk3QywgMHg4OTdDLCAweDFFQzIsDQotICAgIDB4ODk3RCwgMHg4OTdFLCAweDJDRDgsIDB4ODk4MCwgMHg4OThBLCAweDJDREEsIDB4ODk4QiwgMHg4OThCLCAweDIyQjIsDQotICAgIDB4ODk4QywgMHg4OTk4LCAweDJDRTUsIDB4ODk5OSwgMHg4OTk5LCAweDFFREYsIDB4ODk5QSwgMHg4OTlELCAweDJDRjIsDQotICAgIDB4ODk5RSwgMHg4OTlFLCAweDFFRjksIDB4ODk5RiwgMHg4OUE1LCAweDJDRjYsIDB4ODlBNiwgMHg4OUE2LCAweDIwRDksDQotICAgIDB4ODlBNywgMHg4OUE3LCAweDJDRkQsIDB4ODlBOCwgMHg4OUE4LCAweDFGREQsIDB4ODlBOSwgMHg4OUFFLCAweDJDRkUsDQotICAgIDB4ODlBRiwgMHg4OUFGLCAweDIxNjcsIDB4ODlCMCwgMHg4OUI5LCAweDJEMDQsIDB4ODlCQSwgMHg4OUJBLCAweDIxRUQsDQotICAgIDB4ODlCQiwgMHg4OUJELCAweDJEMEUsIDB4ODlCRSwgMHg4OUJFLCAweDIwMDcsIDB4ODlCRiwgMHg4OUJGLCAweDIzMjYsDQotICAgIDB4ODlDMCwgMHg4OUMwLCAweDIzMjksIDB4ODlDMSwgMHg4OUMzLCAweDJEMTEsIDB4ODlDNCwgMHg4OUM0LCAweDFGNTIsDQotICAgIDB4ODlDNSwgMHg4OUM1LCAweDIwM0IsIDB4ODlDNiwgMHg4OUM2LCAweDIzMjgsIDB4ODlDNywgMHg4OUM3LCAweDJEMTQsDQotICAgIDB4ODlDOCwgMHg4OUM4LCAweDIzMjcsIDB4ODlDOSwgMHg4OUNELCAweDJEMTUsIDB4ODlDRSwgMHg4OUNFLCAweDFFMkIsDQotICAgIDB4ODlDRiwgMHg4OUQwLCAweDJEMUEsIDB4ODlEMSwgMHg4OUQxLCAweDIyQUUsIDB4ODlEMiwgMHg4OUQ3LCAweDJEMUMsDQotICAgIDB4ODlEOCwgMHg4OUQ4LCAweDFGNDksIDB4ODlEOSwgMHg4OURBLCAweDJEMjIsIDB4ODlEQiwgMHg4OURCLCAweDIxMzgsDQotICAgIDB4ODlEQywgMHg4OUYzLCAweDJEMjQsIDB4ODlGNCwgMHg4OUY0LCAweDIwODEsIDB4ODlGNSwgMHg4OUZFLCAweDJEM0MsDQotICAgIDB4OEE0MCwgMHg4QTQwLCAweDJENDYsIDB4OEE0MSwgMHg4QTQxLCAweDFGN0MsIDB4OEE0MiwgMHg4QTU4LCAweDJENDcsDQotICAgIDB4OEE1OSwgMHg4QTU5LCAweDIzNUIsIDB4OEE1QSwgMHg4QTVBLCAweDFFREUsIDB4OEE1QiwgMHg4QTVCLCAweDJENUUsDQotICAgIDB4OEE1QywgMHg4QTVDLCAweDFGQTIsIDB4OEE1RCwgMHg4QTVELCAweDJENUYsIDB4OEE1RSwgMHg4QTVFLCAweDFFRkEsDQotICAgIDB4OEE1RiwgMHg4QTc4LCAweDJENjAsIDB4OEE3OSwgMHg4QTc5LCAweDIyQUQsIDB4OEE3QSwgMHg4QTdFLCAweDJEN0EsDQotICAgIDB4OEE4MCwgMHg4QUUzLCAweDJEN0YsIDB4OEFFNCwgMHg4QUU0LCAweDIwM0YsIDB4OEFFNSwgMHg4QUZFLCAweDJERTMsDQotICAgIDB4OEI0MCwgMHg4QjQzLCAweDJERkQsIDB4OEI0NCwgMHg4QjQ0LCAweDFGMEUsIDB4OEI0NSwgMHg4QjQ4LCAweDJFMDEsDQotICAgIDB4OEI0OSwgMHg4QjQ5LCAweDIzRjksIDB4OEI0QSwgMHg4Qjc5LCAweDJFMDUsIDB4OEI3QSwgMHg4QjdBLCAweDIzRkMsDQotICAgIDB4OEI3QiwgMHg4QjdFLCAweDJFMzUsIDB4OEI4MCwgMHg4QjhCLCAweDJFMzksIDB4OEI4QywgMHg4QjhDLCAweDIwNjksDQotICAgIDB4OEI4RCwgMHg4QjlELCAweDJFNDUsIDB4OEI5RSwgMHg4QjlFLCAweDIzRjcsIDB4OEI5RiwgMHg4QkIyLCAweDJFNTYsDQotICAgIDB4OEJCMywgMHg4QkIzLCAweDIzRjYsIDB4OEJCNCwgMHg4QkI4LCAweDJFNkEsIDB4OEJCOSwgMHg4QkI5LCAweDIzRkQsDQotICAgIDB4OEJCQSwgMHg4QkJELCAweDJFNkYsIDB4OEJCRSwgMHg4QkJFLCAweDIzRjgsIDB4OEJCRiwgMHg4QkM1LCAweDJFNzMsDQotICAgIDB4OEJDNiwgMHg4QkM2LCAweDIzRkEsIDB4OEJDNywgMHg4QkM3LCAweDJFN0EsIDB4OEJDOCwgMHg4QkM4LCAweDIzRkUsDQotICAgIDB4OEJDOSwgMHg4QkM5LCAweDFGQTgsIDB4OEJDQSwgMHg4QkQzLCAweDJFN0IsIDB4OEJENCwgMHg4QkQ0LCAweDI0MDEsDQotICAgIDB4OEJENSwgMHg4QkRCLCAweDJFODUsIDB4OEJEQywgMHg4QkRDLCAweDIzRkYsIDB4OEJERCwgMHg4QkU0LCAweDJFOEMsDQotICAgIDB4OEJFNSwgMHg4QkU1LCAweDI0MDAsIDB4OEJFNiwgMHg4QkVBLCAweDJFOTQsIDB4OEJFQiwgMHg4QkVCLCAweDIyMjEsDQotICAgIDB4OEJFQywgMHg4QkVGLCAweDJFOTksIDB4OEJGMCwgMHg4QkYwLCAweDIxMjIsIDB4OEJGMSwgMHg4QkZFLCAweDJFOUQsDQotICAgIDB4OEM0MCwgMHg4QzQzLCAweDJFQUIsIDB4OEM0NCwgMHg4QzQ0LCAweDIzRkIsIDB4OEM0NSwgMHg4QzRFLCAweDJFQUYsDQotICAgIDB4OEM0RiwgMHg4QzRGLCAweDIxNUEsIDB4OEM1MCwgMHg4QzU2LCAweDJFQjksIDB4OEM1NywgMHg4QzU3LCAweDIxRTUsDQotICAgIDB4OEM1OCwgMHg4QzVCLCAweDJFQzAsIDB4OEM1QywgMHg4QzVDLCAweDIwNTcsIDB4OEM1RCwgMHg4QzdFLCAweDJFQzQsDQotICAgIDB4OEM4MCwgMHg4QzhBLCAweDJFRTYsIDB4OEM4QiwgMHg4QzhCLCAweDIwRTUsIDB4OEM4QywgMHg4QzhDLCAweDJFRjEsDQotICAgIDB4OEM4RCwgMHg4QzhELCAweDIxMkYsIDB4OEM4RSwgMHg4QzhFLCAweDIwQTMsIDB4OEM4RiwgMHg4QzhGLCAweDIxMjEsDQotICAgIDB4OEM5MCwgMHg4QzkwLCAweDJFRjIsIDB4OEM5MSwgMHg4QzkxLCAweDIxRDQsIDB4OEM5MiwgMHg4QzkyLCAweDFGRTUsDQotICAgIDB4OEM5MywgMHg4Qzk4LCAweDJFRjMsIDB4OEM5OSwgMHg4Qzk5LCAweDFFOEEsIDB4OEM5QSwgMHg4QzlBLCAweDFFMzcsDQotICAgIDB4OEM5QiwgMHg4Q0ExLCAweDJFRjksIDB4OENBMiwgMHg4Q0EyLCAweDFGOUUsIDB4OENBMywgMHg4Q0EzLCAweDIyQTYsDQotICAgIDB4OENBNCwgMHg4Q0E0LCAweDIxRTgsIDB4OENBNSwgMHg4Q0E1LCAweDJGMDAsIDB4OENBNiwgMHg4Q0E2LCAweDFFREEsDQotICAgIDB4OENBNywgMHg4Q0E3LCAweDFFQjksIDB4OENBOCwgMHg4Q0JGLCAweDJGMDEsIDB4OENDMCwgMHg4Q0MwLCAweDIzNUMsDQotICAgIDB4OENDMSwgMHg4Q0QxLCAweDJGMTksIDB4OENEMiwgMHg4Q0QyLCAweDIwNTAsIDB4OENEMywgMHg4Q0QzLCAweDFFNjcsDQotICAgIDB4OENENCwgMHg4Q0Q0LCAweDJGMkEsIDB4OENENSwgMHg4Q0Q1LCAweDIzRjQsIDB4OENENiwgMHg4Q0Q4LCAweDJGMkIsDQotICAgIDB4OENEOSwgMHg4Q0Q5LCAweDIxM0UsIDB4OENEQSwgMHg4Q0Y4LCAweDJGMkUsIDB4OENGOSwgMHg4Q0Y5LCAweDFGMTYsDQotICAgIDB4OENGQSwgMHg4Q0ZFLCAweDJGNEQsIDB4OEQ0MCwgMHg4RDcyLCAweDJGNTIsIDB4OEQ3MywgMHg4RDczLCAweDIzODksDQotICAgIDB4OEQ3NCwgMHg4RDc0LCAweDJGODUsIDB4OEQ3NSwgMHg4RDc1LCAweDFFQjcsIDB4OEQ3NiwgMHg4RDdBLCAweDJGODYsDQotICAgIDB4OEQ3QiwgMHg4RDdCLCAweDIxQjQsIDB4OEQ3QywgMHg4RDdFLCAweDJGOEIsIDB4OEQ4MCwgMHg4RDg3LCAweDJGOEUsDQotICAgIDB4OEQ4OCwgMHg4RDg4LCAweDIzOEYsIDB4OEQ4OSwgMHg4RDhFLCAweDJGOTYsIDB4OEQ4RiwgMHg4RDhGLCAweDFGMUEsDQotICAgIDB4OEQ5MCwgMHg4RDlELCAweDJGOUMsIDB4OEQ5RSwgMHg4RDlFLCAweDIzOEIsIDB4OEQ5RiwgMHg4REI4LCAweDJGQUEsDQotICAgIDB4OERCOSwgMHg4REI5LCAweDIzOEEsIDB4OERCQSwgMHg4REUxLCAweDJGQzQsIDB4OERFMiwgMHg4REUyLCAweDIzOTEsDQotICAgIDB4OERFMywgMHg4REUzLCAweDJGRUMsIDB4OERFNCwgMHg4REU0LCAweDIyNzEsIDB4OERFNSwgMHg4REU2LCAweDJGRUQsDQotICAgIDB4OERFNywgMHg4REU3LCAweDIzODgsIDB4OERFOCwgMHg4REY2LCAweDJGRUYsIDB4OERGNywgMHg4REY3LCAweDIzOEUsDQotICAgIDB4OERGOCwgMHg4REZELCAweDJGRkUsIDB4OERGRSwgMHg4REZFLCAweDIzOEQsIDB4OEU0MCwgMHg4RTQ1LCAweDMwMDQsDQotICAgIDB4OEU0NiwgMHg4RTQ2LCAweDIzOEMsIDB4OEU0NywgMHg4RTU1LCAweDMwMEEsIDB4OEU1NiwgMHg4RTU2LCAweDIzOTAsDQotICAgIDB4OEU1NywgMHg4RTU3LCAweDMwMTksIDB4OEU1OCwgMHg4RTU4LCAweDIwMzMsIDB4OEU1OSwgMHg4RTU5LCAweDMwMUEsDQotICAgIDB4OEU1QSwgMHg4RTVBLCAweDIyM0MsIDB4OEU1QiwgMHg4RTY3LCAweDMwMUIsIDB4OEU2OCwgMHg4RTY4LCAweDFGRTksDQotICAgIDB4OEU2OSwgMHg4RTZELCAweDMwMjgsIDB4OEU2RSwgMHg4RTZFLCAweDIwNTUsIDB4OEU2RiwgMHg4RTZGLCAweDMwMkQsDQotICAgIDB4OEU3MCwgMHg4RTcwLCAweDIzOTIsIDB4OEU3MSwgMHg4RTdFLCAweDMwMkUsIDB4OEU4MCwgMHg4RTgwLCAweDIzMjQsDQotICAgIDB4OEU4MSwgMHg4RTlBLCAweDMwM0MsIDB4OEU5QiwgMHg4RTlCLCAweDIxNDMsIDB4OEU5QywgMHg4RTlFLCAweDMwNTYsDQotICAgIDB4OEU5RiwgMHg4RTlGLCAweDIxMjksIDB4OEVBMCwgMHg4RUEzLCAweDMwNTksIDB4OEVBNCwgMHg4RUE0LCAweDIyNzcsDQotICAgIDB4OEVBNSwgMHg4RUE2LCAweDMwNUQsIDB4OEVBNywgMHg4RUE3LCAweDFFQTcsIDB4OEVBOCwgMHg4RUFCLCAweDMwNUYsDQotICAgIDB4OEVBQywgMHg4RUFDLCAweDIyODUsIDB4OEVBRCwgMHg4RUFELCAweDMwNjMsIDB4OEVBRSwgMHg4RUFFLCAweDIzODQsDQotICAgIDB4OEVBRiwgMHg4RUJDLCAweDMwNjQsIDB4OEVCRCwgMHg4RUJELCAweDIzODcsIDB4OEVCRSwgMHg4RUJFLCAweDIzODYsDQotICAgIDB4OEVCRiwgMHg4RUMyLCAweDMwNzIsIDB4OEVDMywgMHg4RUMzLCAweDIyOTAsIDB4OEVDNCwgMHg4RUM0LCAweDMwNzYsDQotICAgIDB4OEVDNSwgMHg4RUM1LCAweDFFNDQsIDB4OEVDNiwgMHg4RUNDLCAweDMwNzcsIDB4OEVDRCwgMHg4RUNELCAweDFFMzIsDQotICAgIDB4OEVDRSwgMHg4RUNFLCAweDIzODUsIDB4OEVDRiwgMHg4RUQ1LCAweDMwN0UsIDB4OEVENiwgMHg4RUQ2LCAweDFGMTMsDQotICAgIDB4OEVENywgMHg4RUQ3LCAweDFGNzMsIDB4OEVEOCwgMHg4RUVCLCAweDMwODUsIDB4OEVFQywgMHg4RUVDLCAweDFGRTAsDQotICAgIDB4OEVFRCwgMHg4RUZFLCAweDMwOTksIDB4OEY0MCwgMHg4RjUxLCAweDMwQUIsIDB4OEY1MiwgMHg4RjUyLCAweDIwODcsDQotICAgIDB4OEY1MywgMHg4RjUzLCAweDFFNzgsIDB4OEY1NCwgMHg4RjU0LCAweDIzQUUsIDB4OEY1NSwgMHg4RjU1LCAweDFFRjYsDQotICAgIDB4OEY1NiwgMHg4RjU2LCAweDFGMzEsIDB4OEY1NywgMHg4RjVDLCAweDMwQkQsIDB4OEY1RCwgMHg4RjVELCAweDIwNDUsDQotICAgIDB4OEY1RSwgMHg4RjYzLCAweDMwQzMsIDB4OEY2NCwgMHg4RjY0LCAweDIxNzgsIDB4OEY2NSwgMHg4RjdFLCAweDMwQzksDQotICAgIDB4OEY4MCwgMHg4Rjg1LCAweDMwRTMsIDB4OEY4NiwgMHg4Rjg2LCAweDIzRjUsIDB4OEY4NywgMHg4Rjg3LCAweDMwRTksDQotICAgIDB4OEY4OCwgMHg4Rjg4LCAweDIyNzUsIDB4OEY4OSwgMHg4Rjk0LCAweDMwRUEsIDB4OEY5NSwgMHg4Rjk1LCAweDI2NkUsDQotICAgIDB4OEY5NiwgMHg4Rjk2LCAweDMwRjYsIDB4OEY5NywgMHg4Rjk3LCAweDFFQjAsIDB4OEY5OCwgMHg4RjlBLCAweDMwRjcsDQotICAgIDB4OEY5QiwgMHg4RjlCLCAweDIwODMsIDB4OEY5QywgMHg4RjlDLCAweDMwRkEsIDB4OEY5RCwgMHg4RjlELCAweDIxODgsDQotICAgIDB4OEY5RSwgMHg4RkEwLCAweDMwRkIsIDB4OEZBMSwgMHg4RkExLCAweDI2N0MsIDB4OEZBMiwgMHg4RkJDLCAweDMwRkUsDQotICAgIDB4OEZCRCwgMHg4RkJELCAweDFGQzUsIDB4OEZCRSwgMHg4RkMzLCAweDMxMTksIDB4OEZDNCwgMHg4RkM0LCAweDFFQTEsDQotICAgIDB4OEZDNSwgMHg4RkM1LCAweDMxMUYsIDB4OEZDNiwgMHg4RkM2LCAweDIzOTMsIDB4OEZDNywgMHg4RkNDLCAweDMxMjAsDQotICAgIDB4OEZDRCwgMHg4RkNELCAweDFGMEIsIDB4OEZDRSwgMHg4RkQ3LCAweDMxMjYsIDB4OEZEOCwgMHg4RkQ4LCAweDFFN0MsDQotICAgIDB4OEZEOSwgMHg4RkZFLCAweDMxMzAsIDB4OTA0MCwgMHg5MDdFLCAweDMxNTYsIDB4OTA4MCwgMHg5MDlDLCAweDMxOTUsDQotICAgIDB4OTA5RCwgMHg5MDlELCAweDIzQjQsIDB4OTA5RSwgMHg5MDlFLCAweDIwN0UsIDB4OTA5RiwgMHg5MEI5LCAweDMxQjIsDQotICAgIDB4OTBCQSwgMHg5MEJBLCAweDFFRTMsIDB4OTBCQiwgMHg5MEJGLCAweDMxQ0QsIDB4OTBDMCwgMHg5MEMwLCAweDIwOTUsDQotICAgIDB4OTBDMSwgMHg5MEMxLCAweDIzQkIsIDB4OTBDMiwgMHg5MEM0LCAweDMxRDIsIDB4OTBDNSwgMHg5MEM1LCAweDIzQjksDQotICAgIDB4OTBDNiwgMHg5MERBLCAweDMxRDUsIDB4OTBEQiwgMHg5MERCLCAweDFFMjgsIDB4OTBEQywgMHg5MERDLCAweDIzQkQsDQotICAgIDB4OTBERCwgMHg5MEVDLCAweDMxRUEsIDB4OTBFRCwgMHg5MEVELCAweDIzQjUsIDB4OTBFRSwgMHg5MEVGLCAweDMxRkEsDQotICAgIDB4OTBGMCwgMHg5MEYwLCAweDIzQkEsIDB4OTBGMSwgMHg5MEY2LCAweDMxRkMsIDB4OTBGNywgMHg5MEY3LCAweDIzQjMsDQotICAgIDB4OTBGOCwgMHg5MEZFLCAweDMyMDIsIDB4OTE0MCwgMHg5MTQxLCAweDMyMDksIDB4OTE0MiwgMHg5MTQyLCAweDIxNjIsDQotICAgIDB4OTE0MywgMHg5MTRBLCAweDMyMEIsIDB4OTE0QiwgMHg5MTRCLCAweDFFNUUsIDB4OTE0QywgMHg5MTRDLCAweDMyMTMsDQotICAgIDB4OTE0RCwgMHg5MTRELCAweDFFNUQsIDB4OTE0RSwgMHg5MTUwLCAweDMyMTQsIDB4OTE1MSwgMHg5MTUxLCAweDIzQjcsDQotICAgIDB4OTE1MiwgMHg5MTUzLCAweDMyMTcsIDB4OTE1NCwgMHg5MTU0LCAweDFGMkYsIDB4OTE1NSwgMHg5MTU1LCAweDI0REYsDQotICAgIDB4OTE1NiwgMHg5MTU4LCAweDMyMTksIDB4OTE1OSwgMHg5MTU5LCAweDIzQjIsIDB4OTE1QSwgMHg5MTVBLCAweDIxNEUsDQotICAgIDB4OTE1QiwgMHg5MTVDLCAweDMyMUMsIDB4OTE1RCwgMHg5MTVELCAweDIwNTIsIDB4OTE1RSwgMHg5MTYwLCAweDMyMUUsDQotICAgIDB4OTE2MSwgMHg5MTYxLCAweDIzQkMsIDB4OTE2MiwgMHg5MTYyLCAweDMyMjEsIDB4OTE2MywgMHg5MTYzLCAweDIwRUIsDQotICAgIDB4OTE2NCwgMHg5MTZELCAweDMyMjIsIDB4OTE2RSwgMHg5MTZFLCAweDIyMzIsIDB4OTE2RiwgMHg5MTc1LCAweDMyMkMsDQotICAgIDB4OTE3NiwgMHg5MTc2LCAweDFFM0YsIDB4OTE3NywgMHg5MTc5LCAweDMyMzMsIDB4OTE3QSwgMHg5MTdBLCAweDIwMUIsDQotICAgIDB4OTE3QiwgMHg5MTdCLCAweDIwQkMsIDB4OTE3QywgMHg5MTdDLCAweDIzQkUsIDB4OTE3RCwgMHg5MTdFLCAweDMyMzYsDQotICAgIDB4OTE4MCwgMHg5MTgzLCAweDMyMzgsIDB4OTE4NCwgMHg5MTg0LCAweDFFQUUsIDB4OTE4NSwgMHg5MThDLCAweDMyM0MsDQotICAgIDB4OTE4RCwgMHg5MThELCAweDFFRkIsIDB4OTE4RSwgMHg5MTkwLCAweDMyNDQsIDB4OTE5MSwgMHg5MTkxLCAweDIwODksDQotICAgIDB4OTE5MiwgMHg5MTkyLCAweDMyNDcsIDB4OTE5MywgMHg5MTkzLCAweDIzQjEsIDB4OTE5NCwgMHg5MTk2LCAweDMyNDgsDQotICAgIDB4OTE5NywgMHg5MTk3LCAweDIxQzQsIDB4OTE5OCwgMHg5MTlBLCAweDMyNEIsIDB4OTE5QiwgMHg5MTlCLCAweDIyMTQsDQotICAgIDB4OTE5QywgMHg5MUE4LCAweDMyNEUsIDB4OTFBOSwgMHg5MUE5LCAweDFGREUsIDB4OTFBQSwgMHg5MUFBLCAweDIyMjMsDQotICAgIDB4OTFBQiwgMHg5MUFCLCAweDIzQjYsIDB4OTFBQywgMHg5MUI5LCAweDMyNUIsIDB4OTFCQSwgMHg5MUJBLCAweDI2OEMsDQotICAgIDB4OTFCQiwgMHg5MUJCLCAweDI0REUsIDB4OTFCQywgMHg5MUJFLCAweDMyNjksIDB4OTFCRiwgMHg5MUJGLCAweDI0RTAsDQotICAgIDB4OTFDMCwgMHg5MUMyLCAweDMyNkMsIDB4OTFDMywgMHg5MUMzLCAweDIzQjgsIDB4OTFDNCwgMHg5MUNDLCAweDMyNkYsDQotICAgIDB4OTFDRCwgMHg5MUNELCAweDFFODEsIDB4OTFDRSwgMHg5MUNGLCAweDMyNzgsIDB4OTFEMCwgMHg5MUQwLCAweDFGRkUsDQotICAgIDB4OTFEMSwgMHg5MUQxLCAweDFGNTEsIDB4OTFEMiwgMHg5MUQyLCAweDIxRTEsIDB4OTFEMywgMHg5MUQzLCAweDMyN0EsDQotICAgIDB4OTFENCwgMHg5MUQ0LCAweDIzQjAsIDB4OTFENSwgMHg5MUQ1LCAweDMyN0IsIDB4OTFENiwgMHg5MUQ2LCAweDFGQ0UsDQotICAgIDB4OTFENywgMHg5MUQ3LCAweDMyN0MsIDB4OTFEOCwgMHg5MUQ4LCAweDIxMUUsIDB4OTFEOSwgMHg5MUQ5LCAweDIwMjEsDQotICAgIDB4OTFEQSwgMHg5MURFLCAweDMyN0QsIDB4OTFERiwgMHg5MURGLCAweDI0RTEsIDB4OTFFMCwgMHg5MUUxLCAweDMyODIsDQotICAgIDB4OTFFMiwgMHg5MUUyLCAweDI0QTMsIDB4OTFFMywgMHg5MUU5LCAweDMyODQsIDB4OTFFQSwgMHg5MUVBLCAweDI0QTQsDQotICAgIDB4OTFFQiwgMHg5MUVGLCAweDMyOEIsIDB4OTFGMCwgMHg5MUYwLCAweDIyNzMsIDB4OTFGMSwgMHg5MUYxLCAweDMyOTAsDQotICAgIDB4OTFGMiwgMHg5MUYyLCAweDIxQjAsIDB4OTFGMywgMHg5MUZFLCAweDMyOTEsIDB4OTI0MCwgMHg5MjdFLCAweDMyOUQsDQotICAgIDB4OTI4MCwgMHg5MkI1LCAweDMyREMsIDB4OTJCNiwgMHg5MkI2LCAweDIxRDEsIDB4OTJCNywgMHg5MkNELCAweDMzMTIsDQotICAgIDB4OTJDRSwgMHg5MkNFLCAweDIxMUMsIDB4OTJDRiwgMHg5MkNGLCAweDMzMjksIDB4OTJEMCwgMHg5MkQwLCAweDIzNUQsDQotICAgIDB4OTJEMSwgMHg5MkQzLCAweDMzMkEsIDB4OTJENCwgMHg5MkQ0LCAweDI2ODIsIDB4OTJENSwgMHg5MkRFLCAweDMzMkQsDQotICAgIDB4OTJERiwgMHg5MkRGLCAweDIxMEQsIDB4OTJFMCwgMHg5MkUwLCAweDIwNUEsIDB4OTJFMSwgMHg5MkZELCAweDMzMzcsDQotICAgIDB4OTJGRSwgMHg5MkZFLCAweDFGOEQsIDB4OTM0MCwgMHg5MzRGLCAweDMzNTQsIDB4OTM1MCwgMHg5MzUwLCAweDIxRkYsDQotICAgIDB4OTM1MSwgMHg5MzVDLCAweDMzNjQsIDB4OTM1RCwgMHg5MzVELCAweDFGNTgsIDB4OTM1RSwgMHg5MzZGLCAweDMzNzAsDQotICAgIDB4OTM3MCwgMHg5MzcwLCAweDIxNUIsIDB4OTM3MSwgMHg5Mzc1LCAweDMzODIsIDB4OTM3NiwgMHg5Mzc2LCAweDFFQjYsDQotICAgIDB4OTM3NywgMHg5MzdFLCAweDMzODcsIDB4OTM4MCwgMHg5MzhCLCAweDMzOEYsIDB4OTM4QywgMHg5MzhDLCAweDIwREIsDQotICAgIDB4OTM4RCwgMHg5MzlDLCAweDMzOUIsIDB4OTM5RCwgMHg5MzlELCAweDIzNjAsIDB4OTM5RSwgMHg5M0E0LCAweDMzQUIsDQotICAgIDB4OTNBNSwgMHg5M0E1LCAweDIzNjEsIDB4OTNBNiwgMHg5M0E2LCAweDMzQjIsIDB4OTNBNywgMHg5M0E3LCAweDIwNDAsDQotICAgIDB4OTNBOCwgMHg5M0IzLCAweDMzQjMsIDB4OTNCNCwgMHg5M0I0LCAweDIyOEUsIDB4OTNCNSwgMHg5M0I3LCAweDMzQkYsDQotICAgIDB4OTNCOCwgMHg5M0I4LCAweDFGREYsIDB4OTNCOSwgMHg5M0JBLCAweDMzQzIsIDB4OTNCQiwgMHg5M0JCLCAweDIzNUUsDQotICAgIDB4OTNCQywgMHg5M0JDLCAweDMzQzQsIDB4OTNCRCwgMHg5M0JELCAweDFFNkEsIDB4OTNCRSwgMHg5M0M1LCAweDMzQzUsDQotICAgIDB4OTNDNiwgMHg5M0M2LCAweDIwMDIsIDB4OTNDNywgMHg5M0NFLCAweDMzQ0QsIDB4OTNDRiwgMHg5M0NGLCAweDIwOTMsDQotICAgIDB4OTNEMCwgMHg5M0Q2LCAweDMzRDUsIDB4OTNENywgMHg5M0Q3LCAweDIzNUYsIDB4OTNEOCwgMHg5M0RBLCAweDMzREMsDQotICAgIDB4OTNEQiwgMHg5M0RCLCAweDFFQUMsIDB4OTNEQywgMHg5M0RDLCAweDFFNTQsIDB4OTNERCwgMHg5M0UwLCAweDMzREYsDQotICAgIDB4OTNFMSwgMHg5M0UxLCAweDFGMDgsIDB4OTNFMiwgMHg5M0UzLCAweDMzRTMsIDB4OTNFNCwgMHg5M0U0LCAweDIwQzAsDQotICAgIDB4OTNFNSwgMHg5M0U1LCAweDIzNjIsIDB4OTNFNiwgMHg5M0U4LCAweDMzRTUsIDB4OTNFOSwgMHg5M0U5LCAweDIxNjAsDQotICAgIDB4OTNFQSwgMHg5M0VBLCAweDMzRTgsIDB4OTNFQiwgMHg5M0VCLCAweDIxOUQsIDB4OTNFQywgMHg5M0VDLCAweDFGOEUsDQotICAgIDB4OTNFRCwgMHg5M0VELCAweDIyMkQsIDB4OTNFRSwgMHg5M0VFLCAweDMzRTksIDB4OTNFRiwgMHg5M0VGLCAweDIwNDcsDQotICAgIDB4OTNGMCwgMHg5M0YwLCAweDMzRUEsIDB4OTNGMSwgMHg5M0YxLCAweDIyNjIsIDB4OTNGMiwgMHg5M0YzLCAweDMzRUIsDQotICAgIDB4OTNGNCwgMHg5M0Y0LCAweDFGNjcsIDB4OTNGNSwgMHg5M0Y1LCAweDFFQjIsIDB4OTNGNiwgMHg5M0Y5LCAweDMzRUQsDQotICAgIDB4OTNGQSwgMHg5M0ZBLCAweDFFQTksIDB4OTNGQiwgMHg5M0ZELCAweDMzRjEsIDB4OTNGRSwgMHg5M0ZFLCAweDFGQ0MsDQotICAgIDB4OTQ0MCwgMHg5NDQzLCAweDMzRjQsIDB4OTQ0NCwgMHg5NDQ0LCAweDFGNzIsIDB4OTQ0NSwgMHg5NDRDLCAweDMzRjgsDQotICAgIDB4OTQ0RCwgMHg5NDRELCAweDIwOTgsIDB4OTQ0RSwgMHg5NDRGLCAweDM0MDAsIDB4OTQ1MCwgMHg5NDUwLCAweDFFNTIsDQotICAgIDB4OTQ1MSwgMHg5NDUxLCAweDIwQTQsIDB4OTQ1MiwgMHg5NDUyLCAweDFGMUMsIDB4OTQ1MywgMHg5NDUzLCAweDIyOEYsDQotICAgIDB4OTQ1NCwgMHg5NDU0LCAweDM0MDIsIDB4OTQ1NSwgMHg5NDU1LCAweDFGRUQsIDB4OTQ1NiwgMHg5NDU3LCAweDM0MDMsDQotICAgIDB4OTQ1OCwgMHg5NDU4LCAweDIzNjUsIDB4OTQ1OSwgMHg5NDVBLCAweDM0MDUsIDB4OTQ1QiwgMHg5NDVCLCAweDFFMkQsDQotICAgIDB4OTQ1QywgMHg5NDVDLCAweDIxNTIsIDB4OTQ1RCwgMHg5NDVELCAweDIzNjYsIDB4OTQ1RSwgMHg5NDVFLCAweDM0MDcsDQotICAgIDB4OTQ1RiwgMHg5NDVGLCAweDIwRkEsIDB4OTQ2MCwgMHg5NDYzLCAweDM0MDgsIDB4OTQ2NCwgMHg5NDY0LCAweDIzNjMsDQotICAgIDB4OTQ2NSwgMHg5NDY1LCAweDM0MEMsIDB4OTQ2NiwgMHg5NDY2LCAweDIwOUEsIDB4OTQ2NywgMHg5NDZELCAweDM0MEQsDQotICAgIDB4OTQ2RSwgMHg5NDZFLCAweDIwM0MsIDB4OTQ2RiwgMHg5NDcxLCAweDM0MTQsIDB4OTQ3MiwgMHg5NDcyLCAweDFGRjYsDQotICAgIDB4OTQ3MywgMHg5NDczLCAweDM0MTcsIDB4OTQ3NCwgMHg5NDc0LCAweDIzNjQsIDB4OTQ3NSwgMHg5NDc1LCAweDM0MTgsDQotICAgIDB4OTQ3NiwgMHg5NDc2LCAweDFFNjksIDB4OTQ3NywgMHg5NDc3LCAweDM0MTksIDB4OTQ3OCwgMHg5NDc4LCAweDIzNjcsDQotICAgIDB4OTQ3OSwgMHg5NDc5LCAweDM0MUEsIDB4OTQ3QSwgMHg5NDdBLCAweDIxMUQsIDB4OTQ3QiwgMHg5NDdFLCAweDM0MUIsDQotICAgIDB4OTQ4MCwgMHg5NDgwLCAweDIyNTksIDB4OTQ4MSwgMHg5NDgxLCAweDIwNTYsIDB4OTQ4MiwgMHg5NDgyLCAweDIxNjMsDQotICAgIDB4OTQ4MywgMHg5NDg2LCAweDM0MUYsIDB4OTQ4NywgMHg5NDg3LCAweDFGQTksIDB4OTQ4OCwgMHg5NDg4LCAweDFGRkMsDQotICAgIDB4OTQ4OSwgMHg5NEEwLCAweDM0MjMsIDB4OTRBMSwgMHg5NEExLCAweDFFMkUsIDB4OTRBMiwgMHg5NEIyLCAweDM0M0IsDQotICAgIDB4OTRCMywgMHg5NEIzLCAweDFFQkMsIDB4OTRCNCwgMHg5NEI0LCAweDM0NEMsIDB4OTRCNSwgMHg5NEI1LCAweDIxNDIsDQotICAgIDB4OTRCNiwgMHg5NEJFLCAweDM0NEQsIDB4OTRCRiwgMHg5NEJGLCAweDIwMUUsIDB4OTRDMCwgMHg5NEMwLCAweDFFNDMsDQotICAgIDB4OTRDMSwgMHg5NENCLCAweDM0NTYsIDB4OTRDQywgMHg5NENDLCAweDI0RDQsIDB4OTRDRCwgMHg5NEQ3LCAweDM0NjEsDQotICAgIDB4OTREOCwgMHg5NEQ4LCAweDIyNkYsIDB4OTREOSwgMHg5NERGLCAweDM0NkMsIDB4OTRFMCwgMHg5NEUwLCAweDFFRDcsDQotICAgIDB4OTRFMSwgMHg5NEZFLCAweDM0NzMsIDB4OTU0MCwgMHg5NTcxLCAweDM0OTEsIDB4OTU3MiwgMHg5NTcyLCAweDIxMkQsDQotICAgIDB4OTU3MywgMHg5NTdFLCAweDM0QzMsIDB4OTU4MCwgMHg5NTgyLCAweDM0Q0YsIDB4OTU4MywgMHg5NTgzLCAweDIyOUIsDQotICAgIDB4OTU4NCwgMHg5NTlELCAweDM0RDIsIDB4OTU5RSwgMHg5NTlFLCAweDIyNTYsIDB4OTU5RiwgMHg5NTlGLCAweDI0QTgsDQotICAgIDB4OTVBMCwgMHg5NUIyLCAweDM0RUMsIDB4OTVCMywgMHg5NUIzLCAweDFFNzksIDB4OTVCNCwgMHg5NUI5LCAweDM0RkYsDQotICAgIDB4OTVCQSwgMHg5NUJBLCAweDIyNUEsIDB4OTVCQiwgMHg5NUNFLCAweDM1MDUsIDB4OTVDRiwgMHg5NUNGLCAweDI0QTcsDQotICAgIDB4OTVEMCwgMHg5NUQwLCAweDM1MTksIDB4OTVEMSwgMHg5NUQxLCAweDI2ODYsIDB4OTVEMiwgMHg5NUQyLCAweDI0QTYsDQotICAgIDB4OTVEMywgMHg5NUQzLCAweDM1MUEsIDB4OTVENCwgMHg5NUQ0LCAweDIxQ0UsIDB4OTVENSwgMHg5NUUwLCAweDM1MUIsDQotICAgIDB4OTVFMSwgMHg5NUUxLCAweDI0QTksIDB4OTVFMiwgMHg5NUU2LCAweDM1MjcsIDB4OTVFNywgMHg5NUU3LCAweDFGRTcsDQotICAgIDB4OTVFOCwgMHg5NUYwLCAweDM1MkMsIDB4OTVGMSwgMHg5NUYxLCAweDIxMTIsIDB4OTVGMiwgMHg5NUY3LCAweDM1MzUsDQotICAgIDB4OTVGOCwgMHg5NUY4LCAweDIxM0MsIDB4OTVGOSwgMHg5NUZELCAweDM1M0IsIDB4OTVGRSwgMHg5NUZFLCAweDFGNUMsDQotICAgIDB4OTY0MCwgMHg5NjU1LCAweDM1NDAsIDB4OTY1NiwgMHg5NjU2LCAweDI0QzQsIDB4OTY1NywgMHg5NjdCLCAweDM1NTYsDQotICAgIDB4OTY3QywgMHg5NjdDLCAweDFFQ0MsIDB4OTY3RCwgMHg5NjdFLCAweDM1N0IsIDB4OTY4MCwgMHg5NkZFLCAweDM1N0QsDQotICAgIDB4OTc0MCwgMHg5NzY2LCAweDM1RkMsIDB4OTc2NywgMHg5NzY3LCAweDI0NkEsIDB4OTc2OCwgMHg5NzZCLCAweDM2MjMsDQotICAgIDB4OTc2QywgMHg5NzZDLCAweDIxNzUsIDB4OTc2RCwgMHg5NzZELCAweDM2MjcsIDB4OTc2RSwgMHg5NzZFLCAweDI0NkQsDQotICAgIDB4OTc2RiwgMHg5NzdFLCAweDM2MjgsIDB4OTc4MCwgMHg5Nzk1LCAweDM2MzgsIDB4OTc5NiwgMHg5Nzk2LCAweDI0NkIsDQotICAgIDB4OTc5NywgMHg5Nzk3LCAweDIyNUYsIDB4OTc5OCwgMHg5NzlDLCAweDM2NEUsIDB4OTc5RCwgMHg5NzlELCAweDFFQ0UsDQotICAgIDB4OTc5RSwgMHg5N0EyLCAweDM2NTMsIDB4OTdBMywgMHg5N0EzLCAweDIyNzIsIDB4OTdBNCwgMHg5N0JFLCAweDM2NTgsDQotICAgIDB4OTdCRiwgMHg5N0JGLCAweDI0NzMsIDB4OTdDMCwgMHg5N0VELCAweDM2NzMsIDB4OTdFRSwgMHg5N0VFLCAweDIxRkUsDQotICAgIDB4OTdFRiwgMHg5N0Y2LCAweDM2QTEsIDB4OTdGNywgMHg5N0Y3LCAweDFFRkUsIDB4OTdGOCwgMHg5N0ZFLCAweDM2QTksDQotICAgIDB4OTg0MCwgMHg5ODQ0LCAweDM2QjAsIDB4OTg0NSwgMHg5ODQ1LCAweDI0NzUsIDB4OTg0NiwgMHg5ODQ4LCAweDM2QjUsDQotICAgIDB4OTg0OSwgMHg5ODQ5LCAweDIyMEEsIDB4OTg0QSwgMHg5ODRFLCAweDM2QjgsIDB4OTg0RiwgMHg5ODRGLCAweDFGNkYsDQotICAgIDB4OTg1MCwgMHg5ODcwLCAweDM2QkQsIDB4OTg3MSwgMHg5ODcxLCAweDI0NjgsIDB4OTg3MiwgMHg5ODcyLCAweDM2REUsDQotICAgIDB4OTg3MywgMHg5ODczLCAweDIxMDAsIDB4OTg3NCwgMHg5ODdFLCAweDM2REYsIDB4OTg4MCwgMHg5ODgwLCAweDM2RUEsDQotICAgIDB4OTg4MSwgMHg5ODgxLCAweDI0NzYsIDB4OTg4MiwgMHg5ODhBLCAweDM2RUIsIDB4OTg4QiwgMHg5ODhCLCAweDFGMjcsDQotICAgIDB4OTg4QywgMHg5ODhDLCAweDIwRDcsIDB4OTg4RCwgMHg5ODlGLCAweDM2RjQsIDB4OThBMCwgMHg5OEEwLCAweDI0N0MsDQotICAgIDB4OThBMSwgMHg5OEE5LCAweDM3MDcsIDB4OThBQSwgMHg5OEFBLCAweDFGQTEsIDB4OThBQiwgMHg5OEI1LCAweDM3MTAsDQotICAgIDB4OThCNiwgMHg5OEI2LCAweDIyQUEsIDB4OThCNywgMHg5OEI3LCAweDIwMDUsIDB4OThCOCwgMHg5OEI5LCAweDM3MUIsDQotICAgIDB4OThCQSwgMHg5OEJBLCAweDI0NkMsIDB4OThCQiwgMHg5OEM2LCAweDM3MUQsIDB4OThDNywgMHg5OEM3LCAweDIwM0UsDQotICAgIDB4OThDOCwgMHg5OENBLCAweDM3MjksIDB4OThDQiwgMHg5OENCLCAweDFFNEMsIDB4OThDQywgMHg5OENGLCAweDM3MkMsDQotICAgIDB4OThEMCwgMHg5OEQwLCAweDIxM0EsIDB4OThEMSwgMHg5OEQyLCAweDM3MzAsIDB4OThEMywgMHg5OEQzLCAweDIyMDQsDQotICAgIDB4OThENCwgMHg5OEUyLCAweDM3MzIsIDB4OThFMywgMHg5OEUzLCAweDIwQzMsIDB4OThFNCwgMHg5OEU0LCAweDIxNDAsDQotICAgIDB4OThFNSwgMHg5OEU1LCAweDI0NzcsIDB4OThFNiwgMHg5OEVFLCAweDM3NDEsIDB4OThFRiwgMHg5OEVGLCAweDI0NzQsDQotICAgIDB4OThGMCwgMHg5OEYxLCAweDM3NEEsIDB4OThGMiwgMHg5OEYyLCAweDIwREQsIDB4OThGMywgMHg5OEZFLCAweDM3NEMsDQotICAgIDB4OTk0MCwgMHg5OTQyLCAweDM3NTgsIDB4OTk0MywgMHg5OTQzLCAweDFGNjgsIDB4OTk0NCwgMHg5OTQ0LCAweDM3NUIsDQotICAgIDB4OTk0NSwgMHg5OTQ1LCAweDIxODUsIDB4OTk0NiwgMHg5OTY1LCAweDM3NUMsIDB4OTk2NiwgMHg5OTY2LCAweDI0NzIsDQotICAgIDB4OTk2NywgMHg5OTZELCAweDM3N0MsIDB4OTk2RSwgMHg5OTZFLCAweDFFQjUsIDB4OTk2RiwgMHg5OTc0LCAweDM3ODMsDQotICAgIDB4OTk3NSwgMHg5OTc1LCAweDI0NzgsIDB4OTk3NiwgMHg5OTc5LCAweDM3ODksIDB4OTk3QSwgMHg5OTdBLCAweDFGOEIsDQotICAgIDB4OTk3QiwgMHg5OTdCLCAweDI0ODQsIDB4OTk3QywgMHg5OTdFLCAweDM3OEQsIDB4OTk4MCwgMHg5OTg0LCAweDM3OTAsDQotICAgIDB4OTk4NSwgMHg5OTg1LCAweDI2OTksIDB4OTk4NiwgMHg5OTg4LCAweDM3OTUsIDB4OTk4OSwgMHg5OTg5LCAweDI0ODIsDQotICAgIDB4OTk4QSwgMHg5OThELCAweDM3OTgsIDB4OTk4RSwgMHg5OThFLCAweDIwQTEsIDB4OTk4RiwgMHg5OTkwLCAweDM3OUMsDQotICAgIDB4OTk5MSwgMHg5OTkxLCAweDFGOTIsIDB4OTk5MiwgMHg5OTk4LCAweDM3OUUsIDB4OTk5OSwgMHg5OTk5LCAweDFGMzgsDQotICAgIDB4OTk5QSwgMHg5OUE4LCAweDM3QTUsIDB4OTlBOSwgMHg5OUE5LCAweDI0ODUsIDB4OTlBQSwgMHg5OUFGLCAweDM3QjQsDQotICAgIDB4OTlCMCwgMHg5OUIwLCAweDI0ODAsIDB4OTlCMSwgMHg5OUIxLCAweDI0NkUsIDB4OTlCMiwgMHg5OUIyLCAweDM3QkEsDQotICAgIDB4OTlCMywgMHg5OUIzLCAweDI0N0IsIDB4OTlCNCwgMHg5OUI0LCAweDI0ODYsIDB4OTlCNSwgMHg5OUI1LCAweDI0NzEsDQotICAgIDB4OTlCNiwgMHg5OUJDLCAweDM3QkIsIDB4OTlCRCwgMHg5OUJELCAweDI0ODMsIDB4OTlCRSwgMHg5OUJFLCAweDI0NzAsDQotICAgIDB4OTlCRiwgMHg5OUJGLCAweDM3QzIsIDB4OTlDMCwgMHg5OUMwLCAweDI0NjksIDB4OTlDMSwgMHg5OUMxLCAweDM3QzMsDQotICAgIDB4OTlDMiwgMHg5OUMyLCAweDI0N0YsIDB4OTlDMywgMHg5OUM4LCAweDM3QzQsIDB4OTlDOSwgMHg5OUM5LCAweDI0NkYsDQotICAgIDB4OTlDQSwgMHg5OUNELCAweDM3Q0EsIDB4OTlDRSwgMHg5OUNFLCAweDI0ODEsIDB4OTlDRiwgMHg5OUQwLCAweDM3Q0UsDQotICAgIDB4OTlEMSwgMHg5OUQxLCAweDIyMjAsIDB4OTlEMiwgMHg5OUQ5LCAweDM3RDAsIDB4OTlEQSwgMHg5OURBLCAweDFGRjUsDQotICAgIDB4OTlEQiwgMHg5OURGLCAweDM3RDgsIDB4OTlFMCwgMHg5OUUwLCAweDIwRjQsIDB4OTlFMSwgMHg5OUU0LCAweDM3REQsDQotICAgIDB4OTlFNSwgMHg5OUU1LCAweDI0N0QsIDB4OTlFNiwgMHg5OUU3LCAweDM3RTEsIDB4OTlFOCwgMHg5OUU4LCAweDI0NzksDQotICAgIDB4OTlFOSwgMHg5OUVCLCAweDM3RTMsIDB4OTlFQywgMHg5OUVDLCAweDI0N0UsIDB4OTlFRCwgMHg5OUYzLCAweDM3RTYsDQotICAgIDB4OTlGNCwgMHg5OUY0LCAweDI0N0EsIDB4OTlGNSwgMHg5OUZFLCAweDM3RUQsIDB4OUE0MCwgMHg5QTQ5LCAweDM3RjcsDQotICAgIDB4OUE0QSwgMHg5QTRBLCAweDIwRTMsIDB4OUE0QiwgMHg5QTU2LCAweDM4MDEsIDB4OUE1NywgMHg5QTU3LCAweDIwQUQsDQotICAgIDB4OUE1OCwgMHg5QTY0LCAweDM4MEQsIDB4OUE2NSwgMHg5QTY1LCAweDI0Q0IsIDB4OUE2NiwgMHg5QTY2LCAweDM4MUEsDQotICAgIDB4OUE2NywgMHg5QTY3LCAweDFGNTMsIDB4OUE2OCwgMHg5QTcwLCAweDM4MUIsIDB4OUE3MSwgMHg5QTcxLCAweDIxNTksDQotICAgIDB4OUE3MiwgMHg5QTc1LCAweDM4MjQsIDB4OUE3NiwgMHg5QTc2LCAweDIwMTMsIDB4OUE3NywgMHg5QTc3LCAweDFGMzMsDQotICAgIDB4OUE3OCwgMHg5QTdFLCAweDM4MjgsIDB4OUE4MCwgMHg5QTg3LCAweDM4MkYsIDB4OUE4OCwgMHg5QTg4LCAweDFFNUMsDQotICAgIDB4OUE4OSwgMHg5QThCLCAweDM4MzcsIDB4OUE4QywgMHg5QThDLCAweDI0ODgsIDB4OUE4RCwgMHg5QTkwLCAweDM4M0EsDQotICAgIDB4OUE5MSwgMHg5QTkxLCAweDI0ODcsIDB4OUE5MiwgMHg5QTk2LCAweDM4M0UsIDB4OUE5NywgMHg5QTk3LCAweDI0OEEsDQotICAgIDB4OUE5OCwgMHg5QTk5LCAweDM4NDMsIDB4OUE5QSwgMHg5QTlBLCAweDI0ODksIDB4OUE5QiwgMHg5QTlCLCAweDI0OEIsDQotICAgIDB4OUE5QywgMHg5QTlELCAweDM4NDUsIDB4OUE5RSwgMHg5QTlFLCAweDFGODMsIDB4OUE5RiwgMHg5QUExLCAweDM4NDcsDQotICAgIDB4OUFBMiwgMHg5QUEyLCAweDIxMEYsIDB4OUFBMywgMHg5QUEzLCAweDFGREIsIDB4OUFBNCwgMHg5QUE5LCAweDM4NEEsDQotICAgIDB4OUFBQSwgMHg5QUFBLCAweDIwQUYsIDB4OUFBQiwgMHg5QUNGLCAweDM4NTAsIDB4OUFEMCwgMHg5QUQwLCAweDI0QzAsDQotICAgIDB4OUFEMSwgMHg5QUQ1LCAweDM4NzUsIDB4OUFENiwgMHg5QUQ2LCAweDIyNkQsIDB4OUFENywgMHg5QUQ5LCAweDM4N0EsDQotICAgIDB4OUFEQSwgMHg5QURBLCAweDI0QzEsIDB4OUFEQiwgMHg5QUUxLCAweDM4N0QsIDB4OUFFMiwgMHg5QUUyLCAweDIwQ0EsDQotICAgIDB4OUFFMywgMHg5QUUzLCAweDM4ODQsIDB4OUFFNCwgMHg5QUU0LCAweDIwRTcsIDB4OUFFNSwgMHg5QUU1LCAweDI0QzIsDQotICAgIDB4OUFFNiwgMHg5QUZFLCAweDM4ODUsIDB4OUI0MCwgMHg5QjdFLCAweDM4OUUsIDB4OUI4MCwgMHg5QkQwLCAweDM4REQsDQotICAgIDB4OUJEMSwgMHg5QkQxLCAweDIzREMsIDB4OUJEMiwgMHg5QkRCLCAweDM5MkUsIDB4OUJEQywgMHg5QkRDLCAweDIzREIsDQotICAgIDB4OUJERCwgMHg5QkZFLCAweDM5MzgsIDB4OUM0MCwgMHg5QzUyLCAweDM5NUEsIDB4OUM1MywgMHg5QzUzLCAweDIwNUUsDQotICAgIDB4OUM1NCwgMHg5QzU4LCAweDM5NkQsIDB4OUM1OSwgMHg5QzU5LCAweDIyNDQsIDB4OUM1QSwgMHg5QzVBLCAweDIzRTIsDQotICAgIDB4OUM1QiwgMHg5QzVCLCAweDM5NzIsIDB4OUM1QywgMHg5QzVDLCAweDIwRDQsIDB4OUM1RCwgMHg5Qzc0LCAweDM5NzMsDQotICAgIDB4OUM3NSwgMHg5Qzc1LCAweDIxOUYsIDB4OUM3NiwgMHg5Qzc4LCAweDM5OEIsIDB4OUM3OSwgMHg5Qzc5LCAweDFFNjYsDQotICAgIDB4OUM3QSwgMHg5QzdFLCAweDM5OEUsIDB4OUM4MCwgMHg5Qzg1LCAweDM5OTMsIDB4OUM4NiwgMHg5Qzg2LCAweDFGNjMsDQotICAgIDB4OUM4NywgMHg5QzlDLCAweDM5OTksIDB4OUM5RCwgMHg5QzlELCAweDIzREQsIDB4OUM5RSwgMHg5Q0FBLCAweDM5QUYsDQotICAgIDB4OUNBQiwgMHg5Q0FCLCAweDIxNkIsIDB4OUNBQywgMHg5Q0M5LCAweDM5QkMsIDB4OUNDQSwgMHg5Q0NBLCAweDIyQjUsDQotICAgIDB4OUNDQiwgMHg5Q0NFLCAweDM5REEsIDB4OUNDRiwgMHg5Q0NGLCAweDFGMjYsIDB4OUNEMCwgMHg5Q0U1LCAweDM5REUsDQotICAgIDB4OUNFNiwgMHg5Q0U2LCAweDFFNjMsIDB4OUNFNywgMHg5Q0U3LCAweDIwODgsIDB4OUNFOCwgMHg5Q0VCLCAweDM5RjQsDQotICAgIDB4OUNFQywgMHg5Q0VDLCAweDFFQkQsIDB4OUNFRCwgMHg5Q0VELCAweDM5RjgsIDB4OUNFRSwgMHg5Q0VFLCAweDIzNDEsDQotICAgIDB4OUNFRiwgMHg5Q0ZBLCAweDM5RjksIDB4OUNGQiwgMHg5Q0ZCLCAweDFGNEIsIDB4OUNGQywgMHg5Q0ZELCAweDNBMDUsDQotICAgIDB4OUNGRSwgMHg5Q0ZFLCAweDIyOTIsIDB4OUQ0MCwgMHg5RDQxLCAweDNBMDcsIDB4OUQ0MiwgMHg5RDQyLCAweDIxMjQsDQotICAgIDB4OUQ0MywgMHg5RDQ1LCAweDNBMDksIDB4OUQ0NiwgMHg5RDQ2LCAweDIwNDgsIDB4OUQ0NywgMHg5RDQ3LCAweDIzRTAsDQotICAgIDB4OUQ0OCwgMHg5RDRDLCAweDNBMEMsIDB4OUQ0RCwgMHg5RDRELCAweDIwNzcsIDB4OUQ0RSwgMHg5RDRFLCAweDNBMTEsDQotICAgIDB4OUQ0RiwgMHg5RDRGLCAweDIyM0EsIDB4OUQ1MCwgMHg5RDYwLCAweDNBMTIsIDB4OUQ2MSwgMHg5RDYxLCAweDIwQjEsDQotICAgIDB4OUQ2MiwgMHg5RDY3LCAweDNBMjMsIDB4OUQ2OCwgMHg5RDY4LCAweDFGNDEsIDB4OUQ2OSwgMHg5RDY5LCAweDIwMUMsDQotICAgIDB4OUQ2QSwgMHg5RDZELCAweDNBMjksIDB4OUQ2RSwgMHg5RDZFLCAweDIyQjgsIDB4OUQ2RiwgMHg5RDcwLCAweDNBMkQsDQotICAgIDB4OUQ3MSwgMHg5RDcxLCAweDIyNzYsIDB4OUQ3MiwgMHg5RDc0LCAweDNBMkYsIDB4OUQ3NSwgMHg5RDc1LCAweDFGOUIsDQotICAgIDB4OUQ3NiwgMHg5RDdBLCAweDNBMzIsIDB4OUQ3QiwgMHg5RDdCLCAweDFGOUYsIDB4OUQ3QywgMHg5RDdDLCAweDNBMzcsDQotICAgIDB4OUQ3RCwgMHg5RDdELCAweDI1Q0EsIDB4OUQ3RSwgMHg5RDdFLCAweDNBMzgsIDB4OUQ4MCwgMHg5RDg5LCAweDNBMzksDQotICAgIDB4OUQ4QSwgMHg5RDhBLCAweDIwQkUsIDB4OUQ4QiwgMHg5RDhDLCAweDNBNDMsIDB4OUQ4RCwgMHg5RDhELCAweDFGQjQsDQotICAgIDB4OUQ4RSwgMHg5RDkwLCAweDNBNDUsIDB4OUQ5MSwgMHg5RDkxLCAweDIzRDcsIDB4OUQ5MiwgMHg5RDk4LCAweDNBNDgsDQotICAgIDB4OUQ5OSwgMHg5RDk5LCAweDIxMDUsIDB4OUQ5QSwgMHg5REEwLCAweDNBNEYsIDB4OURBMSwgMHg5REExLCAweDIzRTEsDQotICAgIDB4OURBMiwgMHg5REEyLCAweDFGRUMsIDB4OURBMywgMHg5REE2LCAweDNBNTYsIDB4OURBNywgMHg5REE3LCAweDIzRUEsDQotICAgIDB4OURBOCwgMHg5REFCLCAweDNBNUEsIDB4OURBQywgMHg5REFDLCAweDIzRTMsIDB4OURBRCwgMHg5REFELCAweDIxMEUsDQotICAgIDB4OURBRSwgMHg5REIxLCAweDNBNUUsIDB4OURCMiwgMHg5REIyLCAweDFGQTYsIDB4OURCMywgMHg5REIzLCAweDIwMDQsDQotICAgIDB4OURCNCwgMHg5REJELCAweDNBNjIsIDB4OURCRSwgMHg5REJFLCAweDFGOUQsIDB4OURCRiwgMHg5REM1LCAweDNBNkMsDQotICAgIDB4OURDNiwgMHg5REM2LCAweDIzRTUsIDB4OURDNywgMHg5REM4LCAweDNBNzMsIDB4OURDOSwgMHg5REM5LCAweDIyNjQsDQotICAgIDB4OURDQSwgMHg5RENDLCAweDNBNzUsIDB4OURDRCwgMHg5RENELCAweDI0RTIsIDB4OURDRSwgMHg5REQxLCAweDNBNzgsDQotICAgIDB4OUREMiwgMHg5REQyLCAweDIzREUsIDB4OUREMywgMHg5REQ0LCAweDNBN0MsIDB4OURENSwgMHg5REQ1LCAweDFFQzQsDQotICAgIDB4OURENiwgMHg5REUwLCAweDNBN0UsIDB4OURFMSwgMHg5REUxLCAweDIyQjYsIDB4OURFMiwgMHg5REUyLCAweDIwQTksDQotICAgIDB4OURFMywgMHg5REYwLCAweDNBODksIDB4OURGMSwgMHg5REYxLCAweDIxMkIsIDB4OURGMiwgMHg5REYzLCAweDNBOTcsDQotICAgIDB4OURGNCwgMHg5REY0LCAweDIwQTUsIDB4OURGNSwgMHg5REY2LCAweDNBOTksIDB4OURGNywgMHg5REY3LCAweDI2OEIsDQotICAgIDB4OURGOCwgMHg5REY5LCAweDNBOUIsIDB4OURGQSwgMHg5REZBLCAweDFGNzYsIDB4OURGQiwgMHg5REZDLCAweDNBOUQsDQotICAgIDB4OURGRCwgMHg5REZELCAweDIxNkQsIDB4OURGRSwgMHg5REZFLCAweDNBOUYsIDB4OUU0MCwgMHg5RTQ0LCAweDNBQTAsDQotICAgIDB4OUU0NSwgMHg5RTQ1LCAweDIwMDEsIDB4OUU0NiwgMHg5RTQ3LCAweDNBQTUsIDB4OUU0OCwgMHg5RTQ4LCAweDIxOTEsDQotICAgIDB4OUU0OSwgMHg5RTQ5LCAweDFFNTAsIDB4OUU0QSwgMHg5RTUxLCAweDNBQTcsIDB4OUU1MiwgMHg5RTUyLCAweDFGOUMsDQotICAgIDB4OUU1MywgMHg5RTUzLCAweDNBQUYsIDB4OUU1NCwgMHg5RTU0LCAweDIzREEsIDB4OUU1NSwgMHg5RTU1LCAweDNBQjAsDQotICAgIDB4OUU1NiwgMHg5RTU2LCAweDIwNTMsIDB4OUU1NywgMHg5RTVDLCAweDNBQjEsIDB4OUU1RCwgMHg5RTVELCAweDIzRTksDQotICAgIDB4OUU1RSwgMHg5RTVFLCAweDIzRTQsIDB4OUU1RiwgMHg5RTYwLCAweDNBQjcsIDB4OUU2MSwgMHg5RTYxLCAweDIxRDUsDQotICAgIDB4OUU2MiwgMHg5RTYyLCAweDNBQjksIDB4OUU2MywgMHg5RTYzLCAweDIzRTYsIDB4OUU2NCwgMHg5RTY2LCAweDNBQkEsDQotICAgIDB4OUU2NywgMHg5RTY3LCAweDIzREYsIDB4OUU2OCwgMHg5RTZCLCAweDNBQkQsIDB4OUU2QywgMHg5RTZDLCAweDFFNEYsDQotICAgIDB4OUU2RCwgMHg5RTZFLCAweDNBQzEsIDB4OUU2RiwgMHg5RTZGLCAweDIzRDksIDB4OUU3MCwgMHg5RTcxLCAweDNBQzMsDQotICAgIDB4OUU3MiwgMHg5RTcyLCAweDIwMTQsIDB4OUU3MywgMHg5RTczLCAweDNBQzUsIDB4OUU3NCwgMHg5RTc0LCAweDIzRUMsDQotICAgIDB4OUU3NSwgMHg5RTc1LCAweDIzRUIsIDB4OUU3NiwgMHg5RTdBLCAweDNBQzYsIDB4OUU3QiwgMHg5RTdCLCAweDIzRDgsDQotICAgIDB4OUU3QywgMHg5RTdDLCAweDIzRUUsIDB4OUU3RCwgMHg5RTdFLCAweDNBQ0IsIDB4OUU4MCwgMHg5RTg0LCAweDNBQ0QsDQotICAgIDB4OUU4NSwgMHg5RTg1LCAweDI2OEUsIDB4OUU4NiwgMHg5RTg2LCAweDNBRDIsIDB4OUU4NywgMHg5RTg3LCAweDIzRUQsDQotICAgIDB4OUU4OCwgMHg5RTkwLCAweDNBRDMsIDB4OUU5MSwgMHg5RTkxLCAweDFGRkEsIDB4OUU5MiwgMHg5RTk1LCAweDNBREMsDQotICAgIDB4OUU5NiwgMHg5RTk2LCAweDIzRDYsIDB4OUU5NywgMHg5RTk3LCAweDIzRTgsIDB4OUU5OCwgMHg5RUExLCAweDNBRTAsDQotICAgIDB4OUVBMiwgMHg5RUEyLCAweDIxMDYsIDB4OUVBMywgMHg5RUE1LCAweDNBRUEsIDB4OUVBNiwgMHg5RUE2LCAweDIwMEIsDQotICAgIDB4OUVBNywgMHg5RUE4LCAweDNBRUQsIDB4OUVBOSwgMHg5RUE5LCAweDIxNjYsIDB4OUVBQSwgMHg5RUFELCAweDNBRUYsDQotICAgIDB4OUVBRSwgMHg5RUFFLCAweDIzRUYsIDB4OUVBRiwgMHg5RUIyLCAweDNBRjMsIDB4OUVCMywgMHg5RUIzLCAweDIxODksDQotICAgIDB4OUVCNCwgMHg5RUI0LCAweDIwNTgsIDB4OUVCNSwgMHg5RUI2LCAweDNBRjcsIDB4OUVCNywgMHg5RUI3LCAweDIzRTcsDQotICAgIDB4OUVCOCwgMHg5RUY0LCAweDNBRjksIDB4OUVGNSwgMHg5RUY1LCAweDIxQTMsIDB4OUVGNiwgMHg5RUZFLCAweDNCMzYsDQotICAgIDB4OUY0MCwgMHg5RjRELCAweDNCM0YsIDB4OUY0RSwgMHg5RjRFLCAweDIxN0EsIDB4OUY0RiwgMHg5RjZFLCAweDNCNEQsDQotICAgIDB4OUY2RiwgMHg5RjZGLCAweDIxQTUsIDB4OUY3MCwgMHg5RjdFLCAweDNCNkQsIDB4OUY4MCwgMHg5RjkxLCAweDNCN0MsDQotICAgIDB4OUY5MiwgMHg5RjkyLCAweDIwMjIsIDB4OUY5MywgMHg5Rjk3LCAweDNCOEUsIDB4OUY5OCwgMHg5Rjk4LCAweDI0RDYsDQotICAgIDB4OUY5OSwgMHg5RkE1LCAweDNCOTMsIDB4OUZBNiwgMHg5RkE2LCAweDIzM0EsIDB4OUZBNywgMHg5RkE4LCAweDNCQTAsDQotICAgIDB4OUZBOSwgMHg5RkE5LCAweDFFRUUsIDB4OUZBQSwgMHg5RkFCLCAweDNCQTIsIDB4OUZBQywgMHg5RkFDLCAweDI0RDUsDQotICAgIDB4OUZBRCwgMHg5RkM4LCAweDNCQTQsIDB4OUZDOSwgMHg5RkM5LCAweDIyMjgsIDB4OUZDQSwgMHg5RkNDLCAweDNCQzAsDQotICAgIDB4OUZDRCwgMHg5RkNELCAweDI0RDcsIDB4OUZDRSwgMHg5RkUwLCAweDNCQzMsIDB4OUZFMSwgMHg5RkUxLCAweDIwRkMsDQotICAgIDB4OUZFMiwgMHg5RkVBLCAweDNCRDYsIDB4OUZFQiwgMHg5RkVCLCAweDFFODcsIDB4OUZFQywgMHg5RkVELCAweDNCREYsDQotICAgIDB4OUZFRSwgMHg5RkVFLCAweDI0RDgsIDB4OUZFRiwgMHg5RkYzLCAweDNCRTEsIDB4OUZGNCwgMHg5RkY0LCAweDFFQkEsDQotICAgIDB4OUZGNSwgMHg5RkZDLCAweDNCRTYsIDB4OUZGRCwgMHg5RkZELCAweDIxMTksIDB4OUZGRSwgMHg5RkZFLCAweDNCRUUsDQotICAgIDB4QTA0MCwgMHhBMDQyLCAweDNCRUYsIDB4QTA0MywgMHhBMDQzLCAweDIxNkMsIDB4QTA0NCwgMHhBMDQ1LCAweDNCRjIsDQotICAgIDB4QTA0NiwgMHhBMDQ2LCAweDI0RDksIDB4QTA0NywgMHhBMDQ4LCAweDNCRjQsIDB4QTA0OSwgMHhBMDQ5LCAweDIyMjcsDQotICAgIDB4QTA0QSwgMHhBMDRELCAweDNCRjYsIDB4QTA0RSwgMHhBMDRFLCAweDFFNUYsIDB4QTA0RiwgMHhBMDUzLCAweDNCRkEsDQotICAgIDB4QTA1NCwgMHhBMDU0LCAweDIyOUYsIDB4QTA1NSwgMHhBMDU5LCAweDNCRkYsIDB4QTA1QSwgMHhBMDVBLCAweDFGNUQsDQotICAgIDB4QTA1QiwgMHhBMDYwLCAweDNDMDQsIDB4QTA2MSwgMHhBMDYxLCAweDFGQkMsIDB4QTA2MiwgMHhBMDYyLCAweDNDMEEsDQotICAgIDB4QTA2MywgMHhBMDYzLCAweDI0REEsIDB4QTA2NCwgMHhBMDcwLCAweDNDMEIsIDB4QTA3MSwgMHhBMDcxLCAweDIxNDksDQotICAgIDB4QTA3MiwgMHhBMDczLCAweDNDMTgsIDB4QTA3NCwgMHhBMDc0LCAweDIwNDYsIDB4QTA3NSwgMHhBMDdFLCAweDNDMUEsDQotICAgIDB4QTA4MCwgMHhBMDgwLCAweDIwMDAsIDB4QTA4MSwgMHhBMDkwLCAweDNDMjQsIDB4QTA5MSwgMHhBMDkxLCAweDIxOTAsDQotICAgIDB4QTA5MiwgMHhBMDkzLCAweDNDMzQsIDB4QTA5NCwgMHhBMDk0LCAweDIyMDgsIDB4QTA5NSwgMHhBMDk1LCAweDNDMzYsDQotICAgIDB4QTA5NiwgMHhBMDk2LCAweDFFRTYsIDB4QTA5NywgMHhBMEE4LCAweDNDMzcsIDB4QTBBOSwgMHhBMEE5LCAweDI0QzMsDQotICAgIDB4QTBBQSwgMHhBMEJFLCAweDNDNDksIDB4QTBCRiwgMHhBMEJGLCAweDIwQ0MsIDB4QTBDMCwgMHhBMENELCAweDNDNUUsDQotICAgIDB4QTBDRSwgMHhBMENFLCAweDIzNDAsIDB4QTBDRiwgMHhBMEQ4LCAweDNDNkMsIDB4QTBEOSwgMHhBMEQ5LCAweDFFRDEsDQotICAgIDB4QTBEQSwgMHhBMERELCAweDNDNzYsIDB4QTBERSwgMHhBMERFLCAweDIxQUMsIDB4QTBERiwgMHhBMEVELCAweDNDN0EsDQotICAgIDB4QTBFRSwgMHhBMEVFLCAweDIyQUYsIDB4QTBFRiwgMHhBMEZFLCAweDNDODksIDB4QTFBMSwgMHhBMUZFLCAweDAwNjAsDQotICAgIDB4QTJBMSwgMHhBMkFBLCAweDI2QTksIDB4QTJCMSwgMHhBMkUyLCAweDAwQkUsIDB4QTJFNSwgMHhBMkVFLCAweDAwRjAsDQotICAgIDB4QTJGMSwgMHhBMkZDLCAweDAwRkEsIDB4QTNBMSwgMHhBM0ZFLCAweDAxMDYsIDB4QTRBMSwgMHhBNEYzLCAweDAxNjQsDQotICAgIDB4QTVBMSwgMHhBNUY2LCAweDAxQjcsIDB4QTZBMSwgMHhBNkI4LCAweDAyMEQsIDB4QTZDMSwgMHhBNkY1LCAweDAyMjUsDQotICAgIDB4QTdBMSwgMHhBN0MxLCAweDAyNUEsIDB4QTdEMSwgMHhBN0YxLCAweDAyN0IsIDB4QTg0MCwgMHhBODdFLCAweDI2QjMsDQotICAgIDB4QTg4MCwgMHhBODk1LCAweDI2RjIsIDB4QThBMSwgMHhBOEMwLCAweDAyOUMsIDB4QThDNSwgMHhBOEVBLCAweDAyQkMsDQotICAgIDB4QTk0MCwgMHhBOTU3LCAweDI3MDgsIDB4QTk1OSwgMHhBOTVBLCAweDI3MjAsIDB4QTk1QywgMHhBOTVDLCAweDI3MjIsDQotICAgIDB4QTk2MCwgMHhBOTdFLCAweDI3MjMsIDB4QTk4MCwgMHhBOTk1LCAweDI3NDIsIDB4QTk5NiwgMHhBOTk2LCAweDFFMTcsDQotICAgIDB4QTlBNCwgMHhBOUVGLCAweDAyRTIsIDB4QUE0MCwgMHhBQTRDLCAweDNDOTksIDB4QUE0RCwgMHhBQTRELCAweDIxQjYsDQotICAgIDB4QUE0RSwgMHhBQTRFLCAweDFFM0QsIDB4QUE0RiwgMHhBQTcwLCAweDNDQTYsIDB4QUE3MSwgMHhBQTcxLCAweDIyMzUsDQotICAgIDB4QUE3MiwgMHhBQTcyLCAweDNDQzgsIDB4QUE3MywgMHhBQTczLCAweDIzOTcsIDB4QUE3NCwgMHhBQTc2LCAweDNDQzksDQotICAgIDB4QUE3NywgMHhBQTc3LCAweDIzOTUsIDB4QUE3OCwgMHhBQTc5LCAweDNDQ0MsIDB4QUE3QSwgMHhBQTdBLCAweDIyM0YsDQotICAgIDB4QUE3QiwgMHhBQTdCLCAweDIxMkEsIDB4QUE3QywgMHhBQTdFLCAweDNDQ0UsIDB4QUE4MCwgMHhBQTk5LCAweDNDRDEsDQotICAgIDB4QUE5QSwgMHhBQTlBLCAweDFFRDIsIDB4QUE5QiwgMHhBQTlCLCAweDNDRUIsIDB4QUE5QywgMHhBQTlDLCAweDIzOTYsDQotICAgIDB4QUE5RCwgMHhBQTlELCAweDIzOTgsIDB4QUE5RSwgMHhBQTlFLCAweDNDRUMsIDB4QUE5RiwgMHhBQTlGLCAweDIwQTIsDQotICAgIDB4QUFBMCwgMHhBQUEwLCAweDNDRUQsIDB4QUFBMSwgMHhBQUZFLCAweDAzMkUsIDB4QUI0MCwgMHhBQjQwLCAweDFGNjQsDQotICAgIDB4QUI0MSwgMHhBQjQyLCAweDNDRUUsIDB4QUI0MywgMHhBQjQzLCAweDIwMkIsIDB4QUI0NCwgMHhBQjQ0LCAweDNDRjAsDQotICAgIDB4QUI0NSwgMHhBQjQ1LCAweDIzOTQsIDB4QUI0NiwgMHhBQjQ2LCAweDIxMzksIDB4QUI0NywgMHhBQjQ3LCAweDNDRjEsDQotICAgIDB4QUI0OCwgMHhBQjQ4LCAweDIxNUYsIDB4QUI0OSwgMHhBQjQ5LCAweDIxQzEsIDB4QUI0QSwgMHhBQjRBLCAweDIzOUEsDQotICAgIDB4QUI0QiwgMHhBQjRDLCAweDNDRjIsIDB4QUI0RCwgMHhBQjRELCAweDIzOTksIDB4QUI0RSwgMHhBQjdFLCAweDNDRjQsDQotICAgIDB4QUI4MCwgMHhBQkEwLCAweDNEMjUsIDB4QUJBMSwgMHhBQkMwLCAweDAzOEMsIDB4QUM0MCwgMHhBQzQ1LCAweDNENDYsDQotICAgIDB4QUM0NiwgMHhBQzQ2LCAweDIxQzAsIDB4QUM0NywgMHhBQzcwLCAweDNENEMsIDB4QUM3MSwgMHhBQzcxLCAweDI0NjAsDQotICAgIDB4QUM3MiwgMHhBQzdCLCAweDNENzYsIDB4QUM3QywgMHhBQzdDLCAweDI0NUMsIDB4QUM3RCwgMHhBQzdFLCAweDNEODAsDQotICAgIDB4QUM4MCwgMHhBQzhDLCAweDNEODIsIDB4QUM4RCwgMHhBQzhELCAweDIxNUQsIDB4QUM4RSwgMHhBQzkyLCAweDNEOEYsDQotICAgIDB4QUM5MywgMHhBQzkzLCAweDIyMjUsIDB4QUM5NCwgMHhBQzk0LCAweDIwNkEsIDB4QUM5NSwgMHhBQ0EwLCAweDNEOTQsDQotICAgIDB4QUQ0MCwgMHhBRDQ4LCAweDNEQTAsIDB4QUQ0OSwgMHhBRDQ5LCAweDI0NjEsIDB4QUQ0QSwgMHhBRDVELCAweDNEQTksDQotICAgIDB4QUQ1RSwgMHhBRDVFLCAweDI0NUIsIDB4QUQ1RiwgMHhBRDYwLCAweDNEQkQsIDB4QUQ2MSwgMHhBRDYxLCAweDI0NjIsDQotICAgIDB4QUQ2MiwgMHhBRDY3LCAweDNEQkYsIDB4QUQ2OCwgMHhBRDY4LCAweDFGNTQsIDB4QUQ2OSwgMHhBRDczLCAweDNEQzUsDQotICAgIDB4QUQ3NCwgMHhBRDc0LCAweDI0NUYsIDB4QUQ3NSwgMHhBRDdFLCAweDNERDAsIDB4QUQ4MCwgMHhBRDgxLCAweDNEREEsDQotICAgIDB4QUQ4MiwgMHhBRDgyLCAweDIwRUMsIDB4QUQ4MywgMHhBRDg2LCAweDNEREMsIDB4QUQ4NywgMHhBRDg3LCAweDI0NUQsDQotICAgIDB4QUQ4OCwgMHhBRDhBLCAweDNERTAsIDB4QUQ4QiwgMHhBRDhCLCAweDI0NjMsIDB4QUQ4QywgMHhBRDkwLCAweDNERTMsDQotICAgIDB4QUQ5MSwgMHhBRDkxLCAweDI0NjQsIDB4QUQ5MiwgMHhBREEwLCAweDNERTgsIDB4QUU0MCwgMHhBRTUzLCAweDNERjcsDQotICAgIDB4QUU1NCwgMHhBRTU0LCAweDI0QTUsIDB4QUU1NSwgMHhBRTYxLCAweDNFMEIsIDB4QUU2MiwgMHhBRTYyLCAweDFFNzAsDQotICAgIDB4QUU2MywgMHhBRTdFLCAweDNFMTgsIDB4QUU4MCwgMHhBRTgwLCAweDIwOEYsIDB4QUU4MSwgMHhBRTg0LCAweDNFMzQsDQotICAgIDB4QUU4NSwgMHhBRTg1LCAweDFFNDIsIDB4QUU4NiwgMHhBRThBLCAweDNFMzgsIDB4QUU4QiwgMHhBRThCLCAweDFGNEUsDQotICAgIDB4QUU4QywgMHhBRTkzLCAweDNFM0QsIDB4QUU5NCwgMHhBRTk0LCAweDFFQjEsIDB4QUU5NSwgMHhBRTlGLCAweDNFNDUsDQotICAgIDB4QUVBMCwgMHhBRUEwLCAweDFFOEIsIDB4QUY0MCwgMHhBRjYzLCAweDNFNTAsIDB4QUY2NCwgMHhBRjY0LCAweDFGQzYsDQotICAgIDB4QUY2NSwgMHhBRjdBLCAweDNFNzQsIDB4QUY3QiwgMHhBRjdCLCAweDI1QUUsIDB4QUY3QywgMHhBRjdFLCAweDNFOEEsDQotICAgIDB4QUY4MCwgMHhBRjgxLCAweDNFOEQsIDB4QUY4MiwgMHhBRjgyLCAweDFGMDEsIDB4QUY4MywgMHhBRjgzLCAweDIyMDAsDQotICAgIDB4QUY4NCwgMHhBRjhELCAweDNFOEYsIDB4QUY4RSwgMHhBRjhFLCAweDI1QjIsIDB4QUY4RiwgMHhBRjhGLCAweDFFOTcsDQotICAgIDB4QUY5MCwgMHhBRjkwLCAweDNFOTksIDB4QUY5MSwgMHhBRjkxLCAweDIwQUIsIDB4QUY5MiwgMHhBRjlCLCAweDNFOUEsDQotICAgIDB4QUY5QywgMHhBRjlDLCAweDI1QjMsIDB4QUY5RCwgMHhBRjlFLCAweDNFQTQsIDB4QUY5RiwgMHhBRjlGLCAweDIwMjgsDQotICAgIDB4QUZBMCwgMHhBRkEwLCAweDNFQTYsIDB4QjA0MCwgMHhCMDQwLCAweDNFQTcsIDB4QjA0MSwgMHhCMDQyLCAweDI1QUYsDQotICAgIDB4QjA0MywgMHhCMDQzLCAweDNFQTgsIDB4QjA0NCwgMHhCMDQ0LCAweDI1QjEsIDB4QjA0NSwgMHhCMDRFLCAweDNFQTksDQotICAgIDB4QjA0RiwgMHhCMDRGLCAweDI1QUMsIDB4QjA1MCwgMHhCMDUzLCAweDNFQjMsIDB4QjA1NCwgMHhCMDU0LCAweDFFNEUsDQotICAgIDB4QjA1NSwgMHhCMDU2LCAweDNFQjcsIDB4QjA1NywgMHhCMDU3LCAweDIyMDIsIDB4QjA1OCwgMHhCMDU4LCAweDI1QUIsDQotICAgIDB4QjA1OSwgMHhCMDU5LCAweDIyODYsIDB4QjA1QSwgMHhCMDVBLCAweDNFQjksIDB4QjA1QiwgMHhCMDVCLCAweDI1QUQsDQotICAgIDB4QjA1QywgMHhCMDVDLCAweDNFQkEsIDB4QjA1RCwgMHhCMDVELCAweDI1QjYsIDB4QjA1RSwgMHhCMDVFLCAweDNFQkIsDQotICAgIDB4QjA1RiwgMHhCMDVGLCAweDIxRTMsIDB4QjA2MCwgMHhCMDYxLCAweDI1QjQsIDB4QjA2MiwgMHhCMDYyLCAweDIyMkYsDQotICAgIDB4QjA2MywgMHhCMDYzLCAweDIxNjUsIDB4QjA2NCwgMHhCMDY0LCAweDI1QjcsIDB4QjA2NSwgMHhCMDZCLCAweDNFQkMsDQotICAgIDB4QjA2QywgMHhCMDZDLCAweDFFRTksIDB4QjA2RCwgMHhCMDdDLCAweDNFQzMsIDB4QjA3RCwgMHhCMDdELCAweDFFMjUsDQotICAgIDB4QjA3RSwgMHhCMDdFLCAweDNFRDMsIDB4QjA4MCwgMHhCMDk2LCAweDNFRDQsIDB4QjA5NywgMHhCMDk3LCAweDI1QzAsDQotICAgIDB4QjA5OCwgMHhCMDk4LCAweDNFRUIsIDB4QjA5OSwgMHhCMDk5LCAweDIyOUEsIDB4QjA5QSwgMHhCMEEwLCAweDNFRUMsDQotICAgIDB4QjBBMSwgMHhCMEZFLCAweDAzQUMsIDB4QjE0MCwgMHhCMTRBLCAweDNFRjMsIDB4QjE0QiwgMHhCMTRCLCAweDIyNkUsDQotICAgIDB4QjE0QywgMHhCMTRDLCAweDNFRkUsIDB4QjE0RCwgMHhCMTRELCAweDFGQkQsIDB4QjE0RSwgMHhCMTRFLCAweDNFRkYsDQotICAgIDB4QjE0RiwgMHhCMTRGLCAweDFGODQsIDB4QjE1MCwgMHhCMTUwLCAweDIwQjIsIDB4QjE1MSwgMHhCMTUxLCAweDNGMDAsDQotICAgIDB4QjE1MiwgMHhCMTUyLCAweDIwNDMsIDB4QjE1MywgMHhCMTdFLCAweDNGMDEsIDB4QjE4MCwgMHhCMTk2LCAweDNGMkQsDQotICAgIDB4QjE5NywgMHhCMTk3LCAweDI2ODQsIDB4QjE5OCwgMHhCMUEwLCAweDNGNDQsIDB4QjFBMSwgMHhCMUZFLCAweDA0MEEsDQotICAgIDB4QjI0MCwgMHhCMjQwLCAweDNGNEQsIDB4QjI0MSwgMHhCMjQxLCAweDI0RUYsIDB4QjI0MiwgMHhCMjY2LCAweDNGNEUsDQotICAgIDB4QjI2NywgMHhCMjY3LCAweDI0RUUsIDB4QjI2OCwgMHhCMjZDLCAweDNGNzMsIDB4QjI2RCwgMHhCMjZELCAweDIwNzQsDQotICAgIDB4QjI2RSwgMHhCMjczLCAweDNGNzgsIDB4QjI3NCwgMHhCMjc0LCAweDI2ODcsIDB4QjI3NSwgMHhCMjdFLCAweDNGN0UsDQotICAgIDB4QjI4MCwgMHhCMjgwLCAweDI0RjAsIDB4QjI4MSwgMHhCMjg4LCAweDNGODgsIDB4QjI4OSwgMHhCMjg5LCAweDI2OEQsDQotICAgIDB4QjI4QSwgMHhCMjk5LCAweDNGOTAsIDB4QjI5QSwgMHhCMjlBLCAweDIyQTAsIDB4QjI5QiwgMHhCMkEwLCAweDNGQTAsDQotICAgIDB4QjJBMSwgMHhCMkZFLCAweDA0NjgsIDB4QjM0MCwgMHhCMzQyLCAweDNGQTYsIDB4QjM0MywgMHhCMzQzLCAweDFGQUIsDQotICAgIDB4QjM0NCwgMHhCMzZGLCAweDNGQTksIDB4QjM3MCwgMHhCMzcwLCAweDI2QTgsIDB4QjM3MSwgMHhCMzdFLCAweDNGRDUsDQotICAgIDB4QjM4MCwgMHhCMzg3LCAweDNGRTMsIDB4QjM4OCwgMHhCMzg4LCAweDI0RTksIDB4QjM4OSwgMHhCMzhCLCAweDNGRUIsDQotICAgIDB4QjM4QywgMHhCMzhDLCAweDI0RTUsIDB4QjM4RCwgMHhCMzhELCAweDNGRUUsIDB4QjM4RSwgMHhCMzhFLCAweDIxRkEsDQotICAgIDB4QjM4RiwgMHhCM0EwLCAweDNGRUYsIDB4QjNBMSwgMHhCM0ZFLCAweDA0QzYsIDB4QjQ0MCwgMHhCNDUzLCAweDQwMDEsDQotICAgIDB4QjQ1NCwgMHhCNDU0LCAweDIxNDgsIDB4QjQ1NSwgMHhCNDU3LCAweDQwMTUsIDB4QjQ1OCwgMHhCNDU4LCAweDI0RTQsDQotICAgIDB4QjQ1OSwgMHhCNDVELCAweDQwMTgsIDB4QjQ1RSwgMHhCNDVFLCAweDI0RTYsIDB4QjQ1RiwgMHhCNDVGLCAweDIwRjcsDQotICAgIDB4QjQ2MCwgMHhCNDYwLCAweDQwMUQsIDB4QjQ2MSwgMHhCNDYxLCAweDIwNkIsIDB4QjQ2MiwgMHhCNDc0LCAweDQwMUUsDQotICAgIDB4QjQ3NSwgMHhCNDc1LCAweDIyQTcsIDB4QjQ3NiwgMHhCNDdELCAweDQwMzEsIDB4QjQ3RSwgMHhCNDdFLCAweDI0RUMsDQotICAgIDB4QjQ4MCwgMHhCNDgyLCAweDQwMzksIDB4QjQ4MywgMHhCNDgzLCAweDI0RUIsIDB4QjQ4NCwgMHhCNDg4LCAweDQwM0MsDQotICAgIDB4QjQ4OSwgMHhCNDg5LCAweDI0RTMsIDB4QjQ4QSwgMHhCNDkyLCAweDQwNDEsIDB4QjQ5MywgMHhCNDkzLCAweDI0RUEsDQotICAgIDB4QjQ5NCwgMHhCNEEwLCAweDQwNEEsIDB4QjRBMSwgMHhCNEZFLCAweDA1MjQsIDB4QjU0MCwgMHhCNTQwLCAweDQwNTcsDQotICAgIDB4QjU0MSwgMHhCNTQxLCAweDFFOTIsIDB4QjU0MiwgMHhCNTRBLCAweDQwNTgsIDB4QjU0QiwgMHhCNTRCLCAweDFFMjcsDQotICAgIDB4QjU0QywgMHhCNTU1LCAweDQwNjEsIDB4QjU1NiwgMHhCNTU2LCAweDFGRTYsIDB4QjU1NywgMHhCNTU5LCAweDQwNkIsDQotICAgIDB4QjU1QSwgMHhCNTVBLCAweDI0RTcsIDB4QjU1QiwgMHhCNTVCLCAweDIwMTIsIDB4QjU1QywgMHhCNTVDLCAweDFFRUMsDQotICAgIDB4QjU1RCwgMHhCNTYwLCAweDQwNkUsIDB4QjU2MSwgMHhCNTYxLCAweDI0RTgsIDB4QjU2MiwgMHhCNTdFLCAweDQwNzIsDQotICAgIDB4QjU4MCwgMHhCNTlCLCAweDQwOEYsIDB4QjU5QywgMHhCNTlDLCAweDFGNjYsIDB4QjU5RCwgMHhCNTlELCAweDI0REMsDQotICAgIDB4QjU5RSwgMHhCNUEwLCAweDQwQUIsIDB4QjVBMSwgMHhCNUZFLCAweDA1ODIsIDB4QjY0MCwgMHhCNjUxLCAweDQwQUUsDQotICAgIDB4QjY1MiwgMHhCNjUyLCAweDI2QTIsIDB4QjY1MywgMHhCNjU0LCAweDQwQzAsIDB4QjY1NSwgMHhCNjU1LCAweDI0REQsDQotICAgIDB4QjY1NiwgMHhCNjU4LCAweDQwQzIsIDB4QjY1OSwgMHhCNjU5LCAweDIwMEUsIDB4QjY1QSwgMHhCNjVBLCAweDQwQzUsDQotICAgIDB4QjY1QiwgMHhCNjVCLCAweDI0REIsIDB4QjY1QywgMHhCNjVDLCAweDFFQjgsIDB4QjY1RCwgMHhCNjdFLCAweDQwQzYsDQotICAgIDB4QjY4MCwgMHhCNkEwLCAweDQwRTgsIDB4QjZBMSwgMHhCNkZFLCAweDA1RTAsIDB4Qjc0MCwgMHhCNzRELCAweDQxMDksDQotICAgIDB4Qjc0RSwgMHhCNzRFLCAweDIyOTUsIDB4Qjc0RiwgMHhCNzUwLCAweDQxMTcsIDB4Qjc1MSwgMHhCNzUxLCAweDFFODAsDQotICAgIDB4Qjc1MiwgMHhCNzU4LCAweDQxMTksIDB4Qjc1OSwgMHhCNzU5LCAweDI2NzcsIDB4Qjc1QSwgMHhCNzYzLCAweDQxMjAsDQotICAgIDB4Qjc2NCwgMHhCNzY0LCAweDI2MjQsIDB4Qjc2NSwgMHhCNzY1LCAweDFGNjksIDB4Qjc2NiwgMHhCNzY2LCAweDIyMkIsDQotICAgIDB4Qjc2NywgMHhCNzc2LCAweDQxMkEsIDB4Qjc3NywgMHhCNzc3LCAweDI1N0YsIDB4Qjc3OCwgMHhCNzc4LCAweDFGNUIsDQotICAgIDB4Qjc3OSwgMHhCNzdFLCAweDQxM0EsIDB4Qjc4MCwgMHhCNzgwLCAweDIxOUIsIDB4Qjc4MSwgMHhCNzgxLCAweDQxNDAsDQotICAgIDB4Qjc4MiwgMHhCNzgyLCAweDI2N0QsIDB4Qjc4MywgMHhCN0EwLCAweDQxNDEsIDB4QjdBMSwgMHhCN0ZFLCAweDA2M0UsDQotICAgIDB4Qjg0MCwgMHhCODQyLCAweDQxNUYsIDB4Qjg0MywgMHhCODQzLCAweDIxQTAsIDB4Qjg0NCwgMHhCODQ0LCAweDIxODYsDQotICAgIDB4Qjg0NSwgMHhCODQ1LCAweDQxNjIsIDB4Qjg0NiwgMHhCODQ2LCAweDIwRUQsIDB4Qjg0NywgMHhCODRDLCAweDQxNjMsDQotICAgIDB4Qjg0RCwgMHhCODRELCAweDI1QjksIDB4Qjg0RSwgMHhCODUwLCAweDQxNjksIDB4Qjg1MSwgMHhCODUxLCAweDFGRUEsDQotICAgIDB4Qjg1MiwgMHhCODU5LCAweDQxNkMsIDB4Qjg1QSwgMHhCODVBLCAweDFFQTQsIDB4Qjg1QiwgMHhCODVCLCAweDIwRTEsDQotICAgIDB4Qjg1QywgMHhCODVDLCAweDQxNzQsIDB4Qjg1RCwgMHhCODVELCAweDI1QjgsIDB4Qjg1RSwgMHhCODVFLCAweDIyNjAsDQotICAgIDB4Qjg1RiwgMHhCODVGLCAweDQxNzUsIDB4Qjg2MCwgMHhCODYwLCAweDIwRTIsIDB4Qjg2MSwgMHhCODc2LCAweDQxNzYsDQotICAgIDB4Qjg3NywgMHhCODc3LCAweDIxNDEsIDB4Qjg3OCwgMHhCODdFLCAweDQxOEMsIDB4Qjg4MCwgMHhCODgxLCAweDQxOTMsDQotICAgIDB4Qjg4MiwgMHhCODgyLCAweDFGQzcsIDB4Qjg4MywgMHhCOEEwLCAweDQxOTUsIDB4QjhBMSwgMHhCOEZFLCAweDA2OUMsDQotICAgIDB4Qjk0MCwgMHhCOTRGLCAweDQxQjMsIDB4Qjk1MCwgMHhCOTUwLCAweDFFNDEsIDB4Qjk1MSwgMHhCOTYwLCAweDQxQzMsDQotICAgIDB4Qjk2MSwgMHhCOTYxLCAweDI1RTQsIDB4Qjk2MiwgMHhCOTdBLCAweDQxRDMsIDB4Qjk3QiwgMHhCOTdCLCAweDFGODYsDQotICAgIDB4Qjk3QywgMHhCOTdFLCAweDQxRUMsIDB4Qjk4MCwgMHhCOTlDLCAweDQxRUYsIDB4Qjk5RCwgMHhCOTlELCAweDFGQjMsDQotICAgIDB4Qjk5RSwgMHhCOTlGLCAweDQyMEMsIDB4QjlBMCwgMHhCOUEwLCAweDFFRUYsIDB4QjlBMSwgMHhCOUZFLCAweDA2RkEsDQotICAgIDB4QkE0MCwgMHhCQTQxLCAweDQyMEUsIDB4QkE0MiwgMHhCQTQyLCAweDIyQTQsIDB4QkE0MywgMHhCQTQzLCAweDQyMTAsDQotICAgIDB4QkE0NCwgMHhCQTQ0LCAweDI1RTgsIDB4QkE0NSwgMHhCQTU1LCAweDQyMTEsIDB4QkE1NiwgMHhCQTU2LCAweDI1RTMsDQotICAgIDB4QkE1NywgMHhCQTU4LCAweDQyMjIsIDB4QkE1OSwgMHhCQTU5LCAweDIxMTEsIDB4QkE1QSwgMHhCQTVGLCAweDQyMjQsDQotICAgIDB4QkE2MCwgMHhCQTYwLCAweDI1RTYsIDB4QkE2MSwgMHhCQTY5LCAweDQyMkEsIDB4QkE2QSwgMHhCQTZBLCAweDI1RTcsDQotICAgIDB4QkE2QiwgMHhCQTczLCAweDQyMzMsIDB4QkE3NCwgMHhCQTc0LCAweDIwNDEsIDB4QkE3NSwgMHhCQTdFLCAweDQyM0MsDQotICAgIDB4QkE4MCwgMHhCQTgzLCAweDQyNDYsIDB4QkE4NCwgMHhCQTg0LCAweDI1RUEsIDB4QkE4NSwgMHhCQTg1LCAweDQyNEEsDQotICAgIDB4QkE4NiwgMHhCQTg2LCAweDFGOEYsIDB4QkE4NywgMHhCQTg3LCAweDQyNEIsIDB4QkE4OCwgMHhCQTg4LCAweDI1RUMsDQotICAgIDB4QkE4OSwgMHhCQThDLCAweDQyNEMsIDB4QkE4RCwgMHhCQThELCAweDI1RUIsIDB4QkE4RSwgMHhCQTlELCAweDQyNTAsDQotICAgIDB4QkE5RSwgMHhCQTlFLCAweDIwRDAsIDB4QkE5RiwgMHhCQTlGLCAweDIwMUQsIDB4QkFBMCwgMHhCQUEwLCAweDQyNjAsDQotICAgIDB4QkFBMSwgMHhCQUZFLCAweDA3NTgsIDB4QkI0MCwgMHhCQjQwLCAweDFGRjcsIDB4QkI0MSwgMHhCQjQ4LCAweDQyNjEsDQotICAgIDB4QkI0OSwgMHhCQjQ5LCAweDFFOEQsIDB4QkI0QSwgMHhCQjU3LCAweDQyNjksIDB4QkI1OCwgMHhCQjU4LCAweDI1RTksDQotICAgIDB4QkI1OSwgMHhCQjVBLCAweDQyNzcsIDB4QkI1QiwgMHhCQjVCLCAweDI1RUUsIDB4QkI1QywgMHhCQjVDLCAweDIwM0EsDQotICAgIDB4QkI1RCwgMHhCQjVGLCAweDQyNzksIDB4QkI2MCwgMHhCQjYwLCAweDI2OTMsIDB4QkI2MSwgMHhCQjY0LCAweDQyN0MsDQotICAgIDB4QkI2NSwgMHhCQjY1LCAweDI1RTUsIDB4QkI2NiwgMHhCQjY2LCAweDI1RUQsIDB4QkI2NywgMHhCQjY3LCAweDQyODAsDQotICAgIDB4QkI2OCwgMHhCQjY4LCAweDIwMDksIDB4QkI2OSwgMHhCQjY5LCAweDQyODEsIDB4QkI2QSwgMHhCQjZBLCAweDIwNjUsDQotICAgIDB4QkI2QiwgMHhCQjZELCAweDQyODIsIDB4QkI2RSwgMHhCQjZFLCAweDI2QTMsIDB4QkI2RiwgMHhCQjdFLCAweDQyODUsDQotICAgIDB4QkI4MCwgMHhCQkEwLCAweDQyOTUsIDB4QkJBMSwgMHhCQkZFLCAweDA3QjYsIDB4QkM0MCwgMHhCQzUxLCAweDQyQjYsDQotICAgIDB4QkM1MiwgMHhCQzUyLCAweDI1RjUsIDB4QkM1MywgMHhCQzUzLCAweDFFRkMsIDB4QkM1NCwgMHhCQzU5LCAweDQyQzgsDQotICAgIDB4QkM1QSwgMHhCQzVBLCAweDIwMjQsIDB4QkM1QiwgMHhCQzYwLCAweDQyQ0UsIDB4QkM2MSwgMHhCQzYxLCAweDI2OUIsDQotICAgIDB4QkM2MiwgMHhCQzYyLCAweDQyRDQsIDB4QkM2MywgMHhCQzYzLCAweDI1RjMsIDB4QkM2NCwgMHhCQzY0LCAweDQyRDUsDQotICAgIDB4QkM2NSwgMHhCQzY1LCAweDIyRDksIDB4QkM2NiwgMHhCQzY2LCAweDQyRDYsIDB4QkM2NywgMHhCQzY3LCAweDI1RjQsDQotICAgIDB4QkM2OCwgMHhCQzY4LCAweDQyRDcsIDB4QkM2OSwgMHhCQzY5LCAweDI0MUIsIDB4QkM2QSwgMHhCQzZDLCAweDQyRDgsDQotICAgIDB4QkM2RCwgMHhCQzZELCAweDFGQzgsIDB4QkM2RSwgMHhCQzZFLCAweDQyREIsIDB4QkM2RiwgMHhCQzZGLCAweDFGN0IsDQotICAgIDB4QkM3MCwgMHhCQzcwLCAweDQyREMsIDB4QkM3MSwgMHhCQzcxLCAweDI0MUQsIDB4QkM3MiwgMHhCQzcyLCAweDQyREQsDQotICAgIDB4QkM3MywgMHhCQzczLCAweDIyNEMsIDB4QkM3NCwgMHhCQzc0LCAweDFGNDgsIDB4QkM3NSwgMHhCQzc1LCAweDI0MUMsDQotICAgIDB4QkM3NiwgMHhCQzc3LCAweDI0MUUsIDB4QkM3OCwgMHhCQzc4LCAweDIwRkYsIDB4QkM3OSwgMHhCQzc5LCAweDIxOUEsDQotICAgIDB4QkM3QSwgMHhCQzdBLCAweDQyREUsIDB4QkM3QiwgMHhCQzdCLCAweDIwOTEsIDB4QkM3QywgMHhCQzdELCAweDQyREYsDQotICAgIDB4QkM3RSwgMHhCQzdFLCAweDIwQTcsIDB4QkM4MCwgMHhCQzgxLCAweDQyRTEsIDB4QkM4MiwgMHhCQzgyLCAweDI0MjMsDQotICAgIDB4QkM4MywgMHhCQzgzLCAweDFFOUIsIDB4QkM4NCwgMHhCQzg0LCAweDI0MjIsIDB4QkM4NSwgMHhCQzg1LCAweDQyRTMsDQotICAgIDB4QkM4NiwgMHhCQzg2LCAweDIxMTAsIDB4QkM4NywgMHhCQzg3LCAweDQyRTQsIDB4QkM4OCwgMHhCQzg4LCAweDIyOEQsDQotICAgIDB4QkM4OSwgMHhCQzg5LCAweDFGNzEsIDB4QkM4QSwgMHhCQzhBLCAweDFFRjgsIDB4QkM4QiwgMHhCQzhCLCAweDI0MjEsDQotICAgIDB4QkM4QywgMHhCQzhFLCAweDQyRTUsIDB4QkM4RiwgMHhCQzhGLCAweDFFRjMsIDB4QkM5MCwgMHhCQzk5LCAweDQyRTgsDQotICAgIDB4QkM5QSwgMHhCQzlBLCAweDIxQjEsIDB4QkM5QiwgMHhCQzlCLCAweDI0MjYsIDB4QkM5QywgMHhCQzlDLCAweDI0MjUsDQotICAgIDB4QkM5RCwgMHhCQzlELCAweDIxMjAsIDB4QkM5RSwgMHhCQ0EwLCAweDQyRjIsIDB4QkNBMSwgMHhCQ0ZFLCAweDA4MTQsDQotICAgIDB4QkQ0MCwgMHhCRDQxLCAweDQyRjUsIDB4QkQ0MiwgMHhCRDQyLCAweDIxMUEsIDB4QkQ0MywgMHhCRDQzLCAweDI0MjQsDQotICAgIDB4QkQ0NCwgMHhCRDQ0LCAweDQyRjcsIDB4QkQ0NSwgMHhCRDQ1LCAweDI0MjgsIDB4QkQ0NiwgMHhCRDQ3LCAweDQyRjgsDQotICAgIDB4QkQ0OCwgMHhCRDQ4LCAweDI0MkEsIDB4QkQ0OSwgMHhCRDQ5LCAweDI0MjksIDB4QkQ0QSwgMHhCRDRBLCAweDQyRkEsDQotICAgIDB4QkQ0QiwgMHhCRDRCLCAweDIyOTQsIDB4QkQ0QywgMHhCRDRDLCAweDQyRkIsIDB4QkQ0RCwgMHhCRDRELCAweDIyQkUsDQotICAgIDB4QkQ0RSwgMHhCRDRFLCAweDQyRkMsIDB4QkQ0RiwgMHhCRDRGLCAweDFFMzEsIDB4QkQ1MCwgMHhCRDU2LCAweDQyRkQsDQotICAgIDB4QkQ1NywgMHhCRDU3LCAweDI0MkMsIDB4QkQ1OCwgMHhCRDU4LCAweDQzMDQsIDB4QkQ1OSwgMHhCRDU5LCAweDFGQjUsDQotICAgIDB4QkQ1QSwgMHhCRDY1LCAweDQzMDUsIDB4QkQ2NiwgMHhCRDY2LCAweDI0MkIsIDB4QkQ2NywgMHhCRDY3LCAweDFGQUYsDQotICAgIDB4QkQ2OCwgMHhCRDY5LCAweDQzMTEsIDB4QkQ2QSwgMHhCRDZBLCAweDIwNjgsIDB4QkQ2QiwgMHhCRDZCLCAweDIxRTQsDQotICAgIDB4QkQ2QywgMHhCRDZFLCAweDQzMTMsIDB4QkQ2RiwgMHhCRDZGLCAweDFGMjEsIDB4QkQ3MCwgMHhCRDcwLCAweDQzMTYsDQotICAgIDB4QkQ3MSwgMHhCRDcxLCAweDIxMDEsIDB4QkQ3MiwgMHhCRDc4LCAweDQzMTcsIDB4QkQ3OSwgMHhCRDc5LCAweDIxN0MsDQotICAgIDB4QkQ3QSwgMHhCRDdBLCAweDIxNEEsIDB4QkQ3QiwgMHhCRDdCLCAweDI0MkQsIDB4QkQ3QywgMHhCRDdELCAweDQzMUUsDQotICAgIDB4QkQ3RSwgMHhCRDdFLCAweDFGRDQsIDB4QkQ4MCwgMHhCRDgwLCAweDQzMjAsIDB4QkQ4MSwgMHhCRDgxLCAweDFGRDEsDQotICAgIDB4QkQ4MiwgMHhCRDg4LCAweDQzMjEsIDB4QkQ4OSwgMHhCRDg5LCAweDFFMzMsIDB4QkQ4QSwgMHhCRDhBLCAweDQzMjgsDQotICAgIDB4QkQ4QiwgMHhCRDhCLCAweDI0MkYsIDB4QkQ4QywgMHhCRDhELCAweDQzMjksIDB4QkQ4RSwgMHhCRDhFLCAweDI0MkUsDQotICAgIDB4QkQ4RiwgMHhCRDhGLCAweDQzMkIsIDB4QkQ5MCwgMHhCRDkwLCAweDI0MzAsIDB4QkQ5MSwgMHhCRDkxLCAweDIxREIsDQotICAgIDB4QkQ5MiwgMHhCRDk2LCAweDQzMkMsIDB4QkQ5NywgMHhCRDk3LCAweDIxNTgsIDB4QkQ5OCwgMHhCRDlBLCAweDQzMzEsDQotICAgIDB4QkQ5QiwgMHhCRDlCLCAweDFGQzIsIDB4QkQ5QywgMHhCREEwLCAweDQzMzQsIDB4QkRBMSwgMHhCREZFLCAweDA4NzIsDQotICAgIDB4QkU0MCwgMHhCRTQyLCAweDQzMzksIDB4QkU0MywgMHhCRTQzLCAweDIyQjksIDB4QkU0NCwgMHhCRTQ0LCAweDQzM0MsDQotICAgIDB4QkU0NSwgMHhCRTQ1LCAweDI0MzYsIDB4QkU0NiwgMHhCRTQ4LCAweDQzM0QsIDB4QkU0OSwgMHhCRTQ5LCAweDFFOEUsDQotICAgIDB4QkU0QSwgMHhCRTRBLCAweDI0MzksIDB4QkU0QiwgMHhCRTUwLCAweDQzNDAsIDB4QkU1MSwgMHhCRTUxLCAweDIxQzUsDQotICAgIDB4QkU1MiwgMHhCRTUyLCAweDI0MzcsIDB4QkU1MywgMHhCRTUzLCAweDIxOTIsIDB4QkU1NCwgMHhCRTU0LCAweDQzNDYsDQotICAgIDB4QkU1NSwgMHhCRTU1LCAweDI0M0EsIDB4QkU1NiwgMHhCRTU2LCAweDFGMTksIDB4QkU1NywgMHhCRTU3LCAweDIxOEMsDQotICAgIDB4QkU1OCwgMHhCRTU4LCAweDFFNDAsIDB4QkU1OSwgMHhCRTU5LCAweDIyQjMsIDB4QkU1QSwgMHhCRTVDLCAweDQzNDcsDQotICAgIDB4QkU1RCwgMHhCRTVELCAweDIwNUYsIDB4QkU1RSwgMHhCRTVFLCAweDI0MzgsIDB4QkU1RiwgMHhCRTVGLCAweDI0MzIsDQotICAgIDB4QkU2MCwgMHhCRTYwLCAweDIyNzQsIDB4QkU2MSwgMHhCRTYxLCAweDQzNEEsIDB4QkU2MiwgMHhCRTYyLCAweDFFOUMsDQotICAgIDB4QkU2MywgMHhCRTYzLCAweDI0MzEsIDB4QkU2NCwgMHhCRTY0LCAweDIwODUsIDB4QkU2NSwgMHhCRTY4LCAweDQzNEIsDQotICAgIDB4QkU2OSwgMHhCRTY5LCAweDI0MzUsIDB4QkU2QSwgMHhCRTZCLCAweDQzNEYsIDB4QkU2QywgMHhCRTZDLCAweDI0M0IsDQotICAgIDB4QkU2RCwgMHhCRTZFLCAweDQzNTEsIDB4QkU2RiwgMHhCRTZGLCAweDFGQjcsIDB4QkU3MCwgMHhCRTcwLCAweDI0MzMsDQotICAgIDB4QkU3MSwgMHhCRTc1LCAweDQzNTMsIDB4QkU3NiwgMHhCRTc2LCAweDIwNTQsIDB4QkU3NywgMHhCRTc3LCAweDIxREUsDQotICAgIDB4QkU3OCwgMHhCRTc4LCAweDQzNTgsIDB4QkU3OSwgMHhCRTc5LCAweDI0MzQsIDB4QkU3QSwgMHhCRTdCLCAweDQzNTksDQotICAgIDB4QkU3QywgMHhCRTdDLCAweDI0M0QsIDB4QkU3RCwgMHhCRTdELCAweDFGODksIDB4QkU3RSwgMHhCRTdFLCAweDI0M0MsDQotICAgIDB4QkU4MCwgMHhCRTgyLCAweDQzNUIsIDB4QkU4MywgMHhCRTgzLCAweDFGNkUsIDB4QkU4NCwgMHhCRTg0LCAweDFFRDgsDQotICAgIDB4QkU4NSwgMHhCRTg1LCAweDQzNUUsIDB4QkU4NiwgMHhCRTg2LCAweDFFQkYsIDB4QkU4NywgMHhCRTg3LCAweDI0NDUsDQotICAgIDB4QkU4OCwgMHhCRTg4LCAweDQzNUYsIDB4QkU4OSwgMHhCRTg5LCAweDIyNDksIDB4QkU4QSwgMHhCRThCLCAweDQzNjAsDQotICAgIDB4QkU4QywgMHhCRThDLCAweDI0NDEsIDB4QkU4RCwgMHhCRThELCAweDQzNjIsIDB4QkU4RSwgMHhCRThFLCAweDFFNDcsDQotICAgIDB4QkU4RiwgMHhCRThGLCAweDFGNTYsIDB4QkU5MCwgMHhCRTkxLCAweDQzNjMsIDB4QkU5MiwgMHhCRTkyLCAweDIwODYsDQotICAgIDB4QkU5MywgMHhCRTk0LCAweDQzNjUsIDB4QkU5NSwgMHhCRTk1LCAweDIxOTYsIDB4QkU5NiwgMHhCRTk2LCAweDQzNjcsDQotICAgIDB4QkU5NywgMHhCRTk3LCAweDI0NDMsIDB4QkU5OCwgMHhCRTk4LCAweDI0M0YsIDB4QkU5OSwgMHhCRTk5LCAweDQzNjgsDQotICAgIDB4QkU5QSwgMHhCRTlBLCAweDIwMjMsIDB4QkU5QiwgMHhCRTlCLCAweDQzNjksIDB4QkU5QywgMHhCRTlDLCAweDI0NDIsDQotICAgIDB4QkU5RCwgMHhCRTlFLCAweDQzNkEsIDB4QkU5RiwgMHhCRTlGLCAweDI0M0UsIDB4QkVBMCwgMHhCRUEwLCAweDQzNkMsDQotICAgIDB4QkVBMSwgMHhCRUZFLCAweDA4RDAsIDB4QkY0MCwgMHhCRjQwLCAweDI2QTYsIDB4QkY0MSwgMHhCRjRDLCAweDQzNkQsDQotICAgIDB4QkY0RCwgMHhCRjRELCAweDIzNEUsIDB4QkY0RSwgMHhCRjRFLCAweDI0NDYsIDB4QkY0RiwgMHhCRjRGLCAweDI0NEIsDQotICAgIDB4QkY1MCwgMHhCRjUwLCAweDI0NDQsIDB4QkY1MSwgMHhCRjU0LCAweDQzNzksIDB4QkY1NSwgMHhCRjU1LCAweDI0MjcsDQotICAgIDB4QkY1NiwgMHhCRjU2LCAweDI0NEMsIDB4QkY1NywgMHhCRjVGLCAweDQzN0QsIDB4QkY2MCwgMHhCRjYwLCAweDFGMEYsDQotICAgIDB4QkY2MSwgMHhCRjYxLCAweDQzODYsIDB4QkY2MiwgMHhCRjYyLCAweDI0NDcsIDB4QkY2MywgMHhCRjYzLCAweDI0NDksDQotICAgIDB4QkY2NCwgMHhCRjY0LCAweDI0NDgsIDB4QkY2NSwgMHhCRjY3LCAweDQzODcsIDB4QkY2OCwgMHhCRjY4LCAweDIxQzIsDQotICAgIDB4QkY2OSwgMHhCRjZCLCAweDQzOEEsIDB4QkY2QywgMHhCRjZDLCAweDIxNkUsIDB4QkY2RCwgMHhCRjZGLCAweDQzOEQsDQotICAgIDB4QkY3MCwgMHhCRjcwLCAweDFGMDMsIDB4QkY3MSwgMHhCRjcxLCAweDQzOTAsIDB4QkY3MiwgMHhCRjcyLCAweDI0NEEsDQotICAgIDB4QkY3MywgMHhCRjczLCAweDIxNUMsIDB4QkY3NCwgMHhCRjc1LCAweDQzOTEsIDB4QkY3NiwgMHhCRjc2LCAweDIyQkIsDQotICAgIDB4QkY3NywgMHhCRjc3LCAweDI0NTAsIDB4QkY3OCwgMHhCRjc4LCAweDQzOTMsIDB4QkY3OSwgMHhCRjc5LCAweDI2OTQsDQotICAgIDB4QkY3QSwgMHhCRjdBLCAweDI0NEYsIDB4QkY3QiwgMHhCRjdCLCAweDI1RjYsIDB4QkY3QywgMHhCRjdDLCAweDIwNTEsDQotICAgIDB4QkY3RCwgMHhCRjdELCAweDQzOTQsIDB4QkY3RSwgMHhCRjdFLCAweDI0NEUsIDB4QkY4MCwgMHhCRjgxLCAweDQzOTUsDQotICAgIDB4QkY4MiwgMHhCRjgyLCAweDIyQkEsIDB4QkY4MywgMHhCRjgzLCAweDFGNkQsIDB4QkY4NCwgMHhCRjg4LCAweDQzOTcsDQotICAgIDB4QkY4OSwgMHhCRjg5LCAweDI0NTIsIDB4QkY4QSwgMHhCRjhBLCAweDI0NTEsIDB4QkY4QiwgMHhCRjk0LCAweDQzOUMsDQotICAgIDB4QkY5NSwgMHhCRjk1LCAweDI0NTUsIDB4QkY5NiwgMHhCRjk2LCAweDQzQTYsIDB4QkY5NywgMHhCRjk3LCAweDIyODksDQotICAgIDB4QkY5OCwgMHhCRjk4LCAweDIxMTYsIDB4QkY5OSwgMHhCRjlDLCAweDQzQTcsIDB4QkY5RCwgMHhCRjlELCAweDI0NTQsDQotICAgIDB4QkY5RSwgMHhCRkEwLCAweDQzQUIsIDB4QkZBMSwgMHhCRkZFLCAweDA5MkUsIDB4QzA0MCwgMHhDMDQwLCAweDIwRkIsDQotICAgIDB4QzA0MSwgMHhDMDQzLCAweDQzQUUsIDB4QzA0NCwgMHhDMDQ0LCAweDI0NDAsIDB4QzA0NSwgMHhDMDRBLCAweDQzQjEsDQotICAgIDB4QzA0QiwgMHhDMDRCLCAweDIxMjYsIDB4QzA0QywgMHhDMDRDLCAweDFGNjEsIDB4QzA0RCwgMHhDMDRELCAweDI2OUQsDQotICAgIDB4QzA0RSwgMHhDMDRFLCAweDQzQjcsIDB4QzA0RiwgMHhDMDRGLCAweDFGOEEsIDB4QzA1MCwgMHhDMDUwLCAweDI0NTYsDQotICAgIDB4QzA1MSwgMHhDMDUxLCAweDI0NTksIDB4QzA1MiwgMHhDMDUyLCAweDI0NTgsIDB4QzA1MywgMHhDMDU0LCAweDQzQjgsDQotICAgIDB4QzA1NSwgMHhDMDU1LCAweDFGQUUsIDB4QzA1NiwgMHhDMDVBLCAweDQzQkEsIDB4QzA1QiwgMHhDMDVCLCAweDIyMUEsDQotICAgIDB4QzA1QywgMHhDMDVELCAweDQzQkYsIDB4QzA1RSwgMHhDMDVFLCAweDFGN0EsIDB4QzA1RiwgMHhDMDVGLCAweDI0NEQsDQotICAgIDB4QzA2MCwgMHhDMDYwLCAweDI0NTcsIDB4QzA2MSwgMHhDMDY4LCAweDQzQzEsIDB4QzA2OSwgMHhDMDY5LCAweDI0NTMsDQotICAgIDB4QzA2QSwgMHhDMDZBLCAweDQzQzksIDB4QzA2QiwgMHhDMDZCLCAweDI0MjAsIDB4QzA2QywgMHhDMDZDLCAweDQzQ0EsDQotICAgIDB4QzA2RCwgMHhDMDZELCAweDIxREYsIDB4QzA2RSwgMHhDMDZFLCAweDI2ODUsIDB4QzA2RiwgMHhDMDZGLCAweDQzQ0IsDQotICAgIDB4QzA3MCwgMHhDMDcwLCAweDFFNkUsIDB4QzA3MSwgMHhDMDczLCAweDQzQ0MsIDB4QzA3NCwgMHhDMDc0LCAweDIyMjQsDQotICAgIDB4QzA3NSwgMHhDMDc1LCAweDI2NzAsIDB4QzA3NiwgMHhDMDc2LCAweDQzQ0YsIDB4QzA3NywgMHhDMDc3LCAweDIxQkEsDQotICAgIDB4QzA3OCwgMHhDMDc4LCAweDQzRDAsIDB4QzA3OSwgMHhDMDc5LCAweDI0NUEsIDB4QzA3QSwgMHhDMDdCLCAweDQzRDEsDQotICAgIDB4QzA3QywgMHhDMDdDLCAweDFGRkYsIDB4QzA3RCwgMHhDMDdFLCAweDQzRDMsIDB4QzA4MCwgMHhDMDlBLCAweDQzRDUsDQotICAgIDB4QzA5QiwgMHhDMDlCLCAweDI1RTIsIDB4QzA5QywgMHhDMDlDLCAweDQzRjAsIDB4QzA5RCwgMHhDMDlELCAweDI2OUEsDQotICAgIDB4QzA5RSwgMHhDMEEwLCAweDQzRjEsIDB4QzBBMSwgMHhDMEZFLCAweDA5OEMsIDB4QzE0MCwgMHhDMTRGLCAweDQzRjQsDQotICAgIDB4QzE1MCwgMHhDMTUwLCAweDFFRUEsIDB4QzE1MSwgMHhDMTUzLCAweDQ0MDQsIDB4QzE1NCwgMHhDMTU0LCAweDFFMkMsDQotICAgIDB4QzE1NSwgMHhDMTVFLCAweDQ0MDcsIDB4QzE1RiwgMHhDMTVGLCAweDIwNjIsIDB4QzE2MCwgMHhDMTYwLCAweDI0RjEsDQotICAgIDB4QzE2MSwgMHhDMTYxLCAweDQ0MTEsIDB4QzE2MiwgMHhDMTYyLCAweDI0RjIsIDB4QzE2MywgMHhDMTc0LCAweDQ0MTIsDQotICAgIDB4QzE3NSwgMHhDMTc1LCAweDI1RjIsIDB4QzE3NiwgMHhDMTc3LCAweDQ0MjQsIDB4QzE3OCwgMHhDMTc4LCAweDIyMTUsDQotICAgIDB4QzE3OSwgMHhDMTdFLCAweDQ0MjYsIDB4QzE4MCwgMHhDMTk0LCAweDQ0MkMsIDB4QzE5NSwgMHhDMTk1LCAweDIxQUUsDQotICAgIDB4QzE5NiwgMHhDMUEwLCAweDQ0NDEsIDB4QzFBMSwgMHhDMUZFLCAweDA5RUEsIDB4QzI0MCwgMHhDMjRELCAweDQ0NEMsDQotICAgIDB4QzI0RSwgMHhDMjRFLCAweDIwRTAsIDB4QzI0RiwgMHhDMjY0LCAweDQ0NUEsIDB4QzI2NSwgMHhDMjY1LCAweDI1QzIsDQotICAgIDB4QzI2NiwgMHhDMjY2LCAweDQ0NzAsIDB4QzI2NywgMHhDMjY3LCAweDI1QzEsIDB4QzI2OCwgMHhDMjdDLCAweDQ0NzEsDQotICAgIDB4QzI3RCwgMHhDMjdELCAweDIxMjgsIDB4QzI3RSwgMHhDMjdFLCAweDQ0ODYsIDB4QzI4MCwgMHhDMjgzLCAweDQ0ODcsDQotICAgIDB4QzI4NCwgMHhDMjg0LCAweDIxOTksIDB4QzI4NSwgMHhDMjkyLCAweDQ0OEIsIDB4QzI5MywgMHhDMjkzLCAweDIwMTcsDQotICAgIDB4QzI5NCwgMHhDMjk0LCAweDFFQTAsIDB4QzI5NSwgMHhDMjk1LCAweDIxMjUsIDB4QzI5NiwgMHhDMjk2LCAweDIxNEQsDQotICAgIDB4QzI5NywgMHhDMjk3LCAweDQ0OTksIDB4QzI5OCwgMHhDMjk4LCAweDI1QzQsIDB4QzI5OSwgMHhDMjk5LCAweDIwOUQsDQotICAgIDB4QzI5QSwgMHhDMjlBLCAweDIyOEEsIDB4QzI5QiwgMHhDMjlCLCAweDQ0OUEsIDB4QzI5QywgMHhDMjlDLCAweDI1QzMsDQotICAgIDB4QzI5RCwgMHhDMjlGLCAweDQ0OUIsIDB4QzJBMCwgMHhDMkEwLCAweDIxNzksIDB4QzJBMSwgMHhDMkZFLCAweDBBNDgsDQotICAgIDB4QzM0MCwgMHhDMzQwLCAweDIwMzgsIDB4QzM0MSwgMHhDMzQyLCAweDQ0OUUsIDB4QzM0MywgMHhDMzQzLCAweDIxNTUsDQotICAgIDB4QzM0NCwgMHhDMzdBLCAweDQ0QTAsIDB4QzM3QiwgMHhDMzdCLCAweDIxRDIsIDB4QzM3QywgMHhDMzdFLCAweDQ0RDcsDQotICAgIDB4QzM4MCwgMHhDMzgzLCAweDQ0REEsIDB4QzM4NCwgMHhDMzg0LCAweDI0QzcsIDB4QzM4NSwgMHhDMzlBLCAweDQ0REUsDQotICAgIDB4QzM5QiwgMHhDMzlCLCAweDIyNzksIDB4QzM5QywgMHhDM0EwLCAweDQ0RjQsIDB4QzNBMSwgMHhDM0ZFLCAweDBBQTYsDQotICAgIDB4QzQ0MCwgMHhDNDQ4LCAweDQ0RjksIDB4QzQ0OSwgMHhDNDQ5LCAweDIxMjMsIDB4QzQ0QSwgMHhDNDRCLCAweDQ1MDIsDQotICAgIDB4QzQ0QywgMHhDNDRDLCAweDI0QzUsIDB4QzQ0RCwgMHhDNDUzLCAweDQ1MDQsIDB4QzQ1NCwgMHhDNDU0LCAweDI0QzksDQotICAgIDB4QzQ1NSwgMHhDNDU3LCAweDQ1MEIsIDB4QzQ1OCwgMHhDNDU4LCAweDIwOTQsIDB4QzQ1OSwgMHhDNDVBLCAweDQ1MEUsDQotICAgIDB4QzQ1QiwgMHhDNDVCLCAweDIyOTYsIDB4QzQ1QywgMHhDNDYyLCAweDQ1MTAsIDB4QzQ2MywgMHhDNDYzLCAweDFFNzcsDQotICAgIDB4QzQ2NCwgMHhDNDc2LCAweDQ1MTcsIDB4QzQ3NywgMHhDNDc3LCAweDFGMDYsIDB4QzQ3OCwgMHhDNDc5LCAweDQ1MkEsDQotICAgIDB4QzQ3QSwgMHhDNDdBLCAweDFGQTUsIDB4QzQ3QiwgMHhDNDdFLCAweDQ1MkMsIDB4QzQ4MCwgMHhDNDgwLCAweDQ1MzAsDQotICAgIDB4QzQ4MSwgMHhDNDgxLCAweDIwOTksIDB4QzQ4MiwgMHhDNDkwLCAweDQ1MzEsIDB4QzQ5MSwgMHhDNDkxLCAweDFFQUQsDQotICAgIDB4QzQ5MiwgMHhDNDkyLCAweDI0QzgsIDB4QzQ5MywgMHhDNDkzLCAweDIwQTgsIDB4QzQ5NCwgMHhDNDk3LCAweDQ1NDAsDQotICAgIDB4QzQ5OCwgMHhDNDk4LCAweDIwMUYsIDB4QzQ5OSwgMHhDNDk5LCAweDQ1NDQsIDB4QzQ5QSwgMHhDNDlBLCAweDIwQzUsDQotICAgIDB4QzQ5QiwgMHhDNDlCLCAweDQ1NDUsIDB4QzQ5QywgMHhDNDlDLCAweDI0Q0EsIDB4QzQ5RCwgMHhDNEEwLCAweDQ1NDYsDQotICAgIDB4QzRBMSwgMHhDNEZFLCAweDBCMDQsIDB4QzU0MCwgMHhDNTQzLCAweDQ1NEEsIDB4QzU0NCwgMHhDNTQ0LCAweDFGRjAsDQotICAgIDB4QzU0NSwgMHhDNTQ1LCAweDQ1NEUsIDB4QzU0NiwgMHhDNTQ2LCAweDI0QzYsIDB4QzU0NywgMHhDNTRBLCAweDQ1NEYsDQotICAgIDB4QzU0QiwgMHhDNTRCLCAweDIyNUQsIDB4QzU0QywgMHhDNTRDLCAweDIyREUsIDB4QzU0RCwgMHhDNTUxLCAweDQ1NTMsDQotICAgIDB4QzU1MiwgMHhDNTUyLCAweDIwMkMsIDB4QzU1MywgMHhDNTVFLCAweDQ1NTgsIDB4QzU1RiwgMHhDNTVGLCAweDIxNjEsDQotICAgIDB4QzU2MCwgMHhDNTYyLCAweDQ1NjQsIDB4QzU2MywgMHhDNTYzLCAweDIyM0IsIDB4QzU2NCwgMHhDNTY0LCAweDIxRDksDQotICAgIDB4QzU2NSwgMHhDNTY1LCAweDFGQ0IsIDB4QzU2NiwgMHhDNTY2LCAweDFGQzksIDB4QzU2NywgMHhDNTdFLCAweDQ1NjcsDQotICAgIDB4QzU4MCwgMHhDNTkyLCAweDQ1N0YsIDB4QzU5MywgMHhDNTkzLCAweDFFNjEsIDB4QzU5NCwgMHhDNTlCLCAweDQ1OTIsDQotICAgIDB4QzU5QywgMHhDNTlDLCAweDI1RUYsIDB4QzU5RCwgMHhDNTlELCAweDQ1OUEsIDB4QzU5RSwgMHhDNTlFLCAweDFGOTgsDQotICAgIDB4QzU5RiwgMHhDNUEwLCAweDQ1OUIsIDB4QzVBMSwgMHhDNUZFLCAweDBCNjIsIDB4QzY0MCwgMHhDNjQwLCAweDQ1OUQsDQotICAgIDB4QzY0MSwgMHhDNjQxLCAweDI1RjAsIDB4QzY0MiwgMHhDNjQzLCAweDQ1OUUsIDB4QzY0NCwgMHhDNjQ0LCAweDFGODgsDQotICAgIDB4QzY0NSwgMHhDNjQ2LCAweDQ1QTAsIDB4QzY0NywgMHhDNjQ3LCAweDIxRjgsIDB4QzY0OCwgMHhDNjYyLCAweDQ1QTIsDQotICAgIDB4QzY2MywgMHhDNjYzLCAweDIzMjIsIDB4QzY2NCwgMHhDNjcxLCAweDQ1QkQsIDB4QzY3MiwgMHhDNjcyLCAweDIzMzYsDQotICAgIDB4QzY3MywgMHhDNjdFLCAweDQ1Q0IsIDB4QzY4MCwgMHhDNkEwLCAweDQ1RDcsIDB4QzZBMSwgMHhDNkZFLCAweDBCQzAsDQotICAgIDB4Qzc0MCwgMHhDNzY1LCAweDQ1RjgsIDB4Qzc2NiwgMHhDNzY2LCAweDIyQUIsIDB4Qzc2NywgMHhDNzZFLCAweDQ2MUUsDQotICAgIDB4Qzc2RiwgMHhDNzZGLCAweDFGQkYsIDB4Qzc3MCwgMHhDNzc1LCAweDQ2MjYsIDB4Qzc3NiwgMHhDNzc2LCAweDFGN0QsDQotICAgIDB4Qzc3NywgMHhDNzdBLCAweDQ2MkMsIDB4Qzc3QiwgMHhDNzdCLCAweDIzMzMsIDB4Qzc3QywgMHhDNzdFLCAweDQ2MzAsDQotICAgIDB4Qzc4MCwgMHhDN0EwLCAweDQ2MzMsIDB4QzdBMSwgMHhDN0ZFLCAweDBDMUUsIDB4Qzg0MCwgMHhDODQwLCAweDQ2NTQsDQotICAgIDB4Qzg0MSwgMHhDODQxLCAweDFGNEQsIDB4Qzg0MiwgMHhDODRFLCAweDQ2NTUsIDB4Qzg0RiwgMHhDODRGLCAweDIzMzQsDQotICAgIDB4Qzg1MCwgMHhDODUxLCAweDQ2NjIsIDB4Qzg1MiwgMHhDODUyLCAweDFGRjEsIDB4Qzg1MywgMHhDODY1LCAweDQ2NjQsDQotICAgIDB4Qzg2NiwgMHhDODY2LCAweDIxOEIsIDB4Qzg2NywgMHhDODZELCAweDQ2NzcsIDB4Qzg2RSwgMHhDODZFLCAweDIzNDksDQotICAgIDB4Qzg2RiwgMHhDODdELCAweDQ2N0UsIDB4Qzg3RSwgMHhDODdFLCAweDIyMEIsIDB4Qzg4MCwgMHhDODg2LCAweDQ2OEQsDQotICAgIDB4Qzg4NywgMHhDODg3LCAweDIzNDYsIDB4Qzg4OCwgMHhDODkxLCAweDQ2OTQsIDB4Qzg5MiwgMHhDODkyLCAweDIzNDcsDQotICAgIDB4Qzg5MywgMHhDODkzLCAweDQ2OUUsIDB4Qzg5NCwgMHhDODk0LCAweDIxOTMsIDB4Qzg5NSwgMHhDODk4LCAweDQ2OUYsDQotICAgIDB4Qzg5OSwgMHhDODk5LCAweDI2QTEsIDB4Qzg5QSwgMHhDODlDLCAweDQ2QTMsIDB4Qzg5RCwgMHhDODlELCAweDFGNjIsDQotICAgIDB4Qzg5RSwgMHhDOEEwLCAweDQ2QTYsIDB4QzhBMSwgMHhDOEZFLCAweDBDN0MsIDB4Qzk0MCwgMHhDOTRFLCAweDQ2QTksDQotICAgIDB4Qzk0RiwgMHhDOTRGLCAweDIzNEQsIDB4Qzk1MCwgMHhDOTUwLCAweDIzNDgsIDB4Qzk1MSwgMHhDOTZELCAweDQ2QjgsDQotICAgIDB4Qzk2RSwgMHhDOTZFLCAweDFFNjAsIDB4Qzk2RiwgMHhDOTZGLCAweDQ2RDUsIDB4Qzk3MCwgMHhDOTcwLCAweDIzNDUsDQotICAgIDB4Qzk3MSwgMHhDOTc2LCAweDQ2RDYsIDB4Qzk3NywgMHhDOTc3LCAweDFGMTIsIDB4Qzk3OCwgMHhDOTdFLCAweDQ2REMsDQotICAgIDB4Qzk4MCwgMHhDOThFLCAweDQ2RTMsIDB4Qzk4RiwgMHhDOThGLCAweDIwMTgsIDB4Qzk5MCwgMHhDOTkwLCAweDIzMzUsDQotICAgIDB4Qzk5MSwgMHhDOTlCLCAweDQ2RjIsIDB4Qzk5QywgMHhDOTlDLCAweDIzM0MsIDB4Qzk5RCwgMHhDOUEwLCAweDQ2RkQsDQotICAgIDB4QzlBMSwgMHhDOUZFLCAweDBDREEsIDB4Q0E0MCwgMHhDQTRELCAweDQ3MDEsIDB4Q0E0RSwgMHhDQTRFLCAweDI2NkYsDQotICAgIDB4Q0E0RiwgMHhDQTU1LCAweDQ3MEYsIDB4Q0E1NiwgMHhDQTU2LCAweDIzNTEsIDB4Q0E1NywgMHhDQTU4LCAweDQ3MTYsDQotICAgIDB4Q0E1OSwgMHhDQTU5LCAweDFGQTAsIDB4Q0E1QSwgMHhDQTVCLCAweDQ3MTgsIDB4Q0E1QywgMHhDQTVDLCAweDIzMzgsDQotICAgIDB4Q0E1RCwgMHhDQTYwLCAweDQ3MUEsIDB4Q0E2MSwgMHhDQTYxLCAweDIyMUIsIDB4Q0E2MiwgMHhDQTZELCAweDQ3MUUsDQotICAgIDB4Q0E2RSwgMHhDQTZFLCAweDIzNDIsIDB4Q0E2RiwgMHhDQTcxLCAweDQ3MkEsIDB4Q0E3MiwgMHhDQTcyLCAweDIzNEYsDQotICAgIDB4Q0E3MywgMHhDQTc2LCAweDQ3MkQsIDB4Q0E3NywgMHhDQTc3LCAweDIzM0QsIDB4Q0E3OCwgMHhDQTdBLCAweDQ3MzEsDQotICAgIDB4Q0E3QiwgMHhDQTdCLCAweDIzNDQsIDB4Q0E3QywgMHhDQTdDLCAweDIzMzEsIDB4Q0E3RCwgMHhDQTdELCAweDQ3MzQsDQotICAgIDB4Q0E3RSwgMHhDQTdFLCAweDIzNEIsIDB4Q0E4MCwgMHhDQTgwLCAweDQ3MzUsIDB4Q0E4MSwgMHhDQTgxLCAweDIzM0IsDQotICAgIDB4Q0E4MiwgMHhDQTg4LCAweDQ3MzYsIDB4Q0E4OSwgMHhDQTg5LCAweDIzNTAsIDB4Q0E4QSwgMHhDQThELCAweDQ3M0QsDQotICAgIDB4Q0E4RSwgMHhDQThFLCAweDFFQjQsIDB4Q0E4RiwgMHhDQThGLCAweDIxQTYsIDB4Q0E5MCwgMHhDQTkxLCAweDQ3NDEsDQotICAgIDB4Q0E5MiwgMHhDQTkyLCAweDIxQ0IsIDB4Q0E5MywgMHhDQTk5LCAweDQ3NDMsIDB4Q0E5QSwgMHhDQTlBLCAweDIzNTUsDQotICAgIDB4Q0E5QiwgMHhDQUEwLCAweDQ3NEEsIDB4Q0FBMSwgMHhDQUZFLCAweDBEMzgsIDB4Q0I0MCwgMHhDQjQyLCAweDQ3NTAsDQotICAgIDB4Q0I0MywgMHhDQjQzLCAweDIzM0UsIDB4Q0I0NCwgMHhDQjQ0LCAweDQ3NTMsIDB4Q0I0NSwgMHhDQjQ1LCAweDFGNzQsDQotICAgIDB4Q0I0NiwgMHhDQjQ2LCAweDQ3NTQsIDB4Q0I0NywgMHhDQjQ3LCAweDIzMzAsIDB4Q0I0OCwgMHhDQjRBLCAweDQ3NTUsDQotICAgIDB4Q0I0QiwgMHhDQjRCLCAweDI2ODAsIDB4Q0I0QywgMHhDQjRELCAweDQ3NTgsIDB4Q0I0RSwgMHhDQjRFLCAweDIwREEsDQotICAgIDB4Q0I0RiwgMHhDQjU2LCAweDQ3NUEsIDB4Q0I1NywgMHhDQjU3LCAweDIzNEEsIDB4Q0I1OCwgMHhDQjVDLCAweDQ3NjIsDQotICAgIDB4Q0I1RCwgMHhDQjVELCAweDFGOTEsIDB4Q0I1RSwgMHhDQjVFLCAweDQ3NjcsIDB4Q0I1RiwgMHhDQjVGLCAweDIxMDcsDQotICAgIDB4Q0I2MCwgMHhDQjY5LCAweDQ3NjgsIDB4Q0I2QSwgMHhDQjZBLCAweDIzM0YsIDB4Q0I2QiwgMHhDQjdBLCAweDQ3NzIsDQotICAgIDB4Q0I3QiwgMHhDQjdCLCAweDFGRjQsIDB4Q0I3QywgMHhDQjdDLCAweDIzNDMsIDB4Q0I3RCwgMHhDQjdFLCAweDQ3ODIsDQotICAgIDB4Q0I4MCwgMHhDQjg2LCAweDQ3ODQsIDB4Q0I4NywgMHhDQjg3LCAweDIyMTIsIDB4Q0I4OCwgMHhDQjhELCAweDQ3OEIsDQotICAgIDB4Q0I4RSwgMHhDQjhFLCAweDIyMDcsIDB4Q0I4RiwgMHhDQjkxLCAweDQ3OTEsIDB4Q0I5MiwgMHhDQjkyLCAweDIzNTksDQotICAgIDB4Q0I5MywgMHhDQjlCLCAweDQ3OTQsIDB4Q0I5QywgMHhDQjlDLCAweDIyNTQsIDB4Q0I5RCwgMHhDQjlELCAweDQ3OUQsDQotICAgIDB4Q0I5RSwgMHhDQjlFLCAweDIzMzIsIDB4Q0I5RiwgMHhDQkEwLCAweDQ3OUUsIDB4Q0JBMSwgMHhDQkZFLCAweDBEOTYsDQotICAgIDB4Q0M0MCwgMHhDQzQwLCAweDFFMjYsIDB4Q0M0MSwgMHhDQzQxLCAweDIzNTcsIDB4Q0M0MiwgMHhDQzQ4LCAweDQ3QTAsDQotICAgIDB4Q0M0OSwgMHhDQzQ5LCAweDIzNTgsIDB4Q0M0QSwgMHhDQzRBLCAweDIwNDIsIDB4Q0M0QiwgMHhDQzRCLCAweDIxNTMsDQotICAgIDB4Q0M0QywgMHhDQzRFLCAweDQ3QTcsIDB4Q0M0RiwgMHhDQzRGLCAweDIwQkIsIDB4Q0M1MCwgMHhDQzVCLCAweDQ3QUEsDQotICAgIDB4Q0M1QywgMHhDQzVDLCAweDIzNUEsIDB4Q0M1RCwgMHhDQzVGLCAweDQ3QjYsIDB4Q0M2MCwgMHhDQzYwLCAweDIzNTYsDQotICAgIDB4Q0M2MSwgMHhDQzYzLCAweDQ3QjksIDB4Q0M2NCwgMHhDQzY0LCAweDIzMzcsIDB4Q0M2NSwgMHhDQzZDLCAweDQ3QkMsDQotICAgIDB4Q0M2RCwgMHhDQzZELCAweDFGRjksIDB4Q0M2RSwgMHhDQzc4LCAweDQ3QzQsIDB4Q0M3OSwgMHhDQzc5LCAweDIzNTMsDQotICAgIDB4Q0M3QSwgMHhDQzdDLCAweDQ3Q0YsIDB4Q0M3RCwgMHhDQzdELCAweDIwNjEsIDB4Q0M3RSwgMHhDQzdFLCAweDQ3RDIsDQotICAgIDB4Q0M4MCwgMHhDQzhELCAweDQ3RDMsIDB4Q0M4RSwgMHhDQzhFLCAweDFFOTUsIDB4Q0M4RiwgMHhDQzkzLCAweDQ3RTEsDQotICAgIDB4Q0M5NCwgMHhDQzk0LCAweDIwNDksIDB4Q0M5NSwgMHhDQzk1LCAweDQ3RTYsIDB4Q0M5NiwgMHhDQzk2LCAweDFGNDIsDQotICAgIDB4Q0M5NywgMHhDQzlDLCAweDQ3RTcsIDB4Q0M5RCwgMHhDQzlELCAweDFGRTgsIDB4Q0M5RSwgMHhDQ0EwLCAweDQ3RUQsDQotICAgIDB4Q0NBMSwgMHhDQ0ZFLCAweDBERjQsIDB4Q0Q0MCwgMHhDRDdFLCAweDQ3RjAsIDB4Q0Q4MCwgMHhDRDhGLCAweDQ4MkYsDQotICAgIDB4Q0Q5MCwgMHhDRDkwLCAweDI1REEsIDB4Q0Q5MSwgMHhDRDk3LCAweDQ4M0YsIDB4Q0Q5OCwgMHhDRDk4LCAweDI1RDcsDQotICAgIDB4Q0Q5OSwgMHhDREEwLCAweDQ4NDYsIDB4Q0RBMSwgMHhDREZFLCAweDBFNTIsIDB4Q0U0MCwgMHhDRTY2LCAweDQ4NEUsDQotICAgIDB4Q0U2NywgMHhDRTY3LCAweDIxMkUsIDB4Q0U2OCwgMHhDRTcxLCAweDQ4NzUsIDB4Q0U3MiwgMHhDRTcyLCAweDIxQjIsDQotICAgIDB4Q0U3MywgMHhDRTdFLCAweDQ4N0YsIDB4Q0U4MCwgMHhDRTgwLCAweDQ4OEIsIDB4Q0U4MSwgMHhDRTgxLCAweDIxOUUsDQotICAgIDB4Q0U4MiwgMHhDRTg2LCAweDQ4OEMsIDB4Q0U4NywgMHhDRTg3LCAweDI1REMsIDB4Q0U4OCwgMHhDRTlBLCAweDQ4OTEsDQotICAgIDB4Q0U5QiwgMHhDRTlCLCAweDIwNkMsIDB4Q0U5QywgMHhDRTlELCAweDQ4QTQsIDB4Q0U5RSwgMHhDRTlFLCAweDIyMjYsDQotICAgIDB4Q0U5RiwgMHhDRUEwLCAweDQ4QTYsIDB4Q0VBMSwgMHhDRUZFLCAweDBFQjAsIDB4Q0Y0MCwgMHhDRjRELCAweDQ4QTgsDQotICAgIDB4Q0Y0RSwgMHhDRjRFLCAweDI1RTAsIDB4Q0Y0RiwgMHhDRjU0LCAweDQ4QjYsIDB4Q0Y1NSwgMHhDRjU1LCAweDIyN0IsDQotICAgIDB4Q0Y1NiwgMHhDRjU3LCAweDQ4QkMsIDB4Q0Y1OCwgMHhDRjU4LCAweDI1REUsIDB4Q0Y1OSwgMHhDRjVCLCAweDQ4QkUsDQotICAgIDB4Q0Y1QywgMHhDRjVDLCAweDI1RTEsIDB4Q0Y1RCwgMHhDRjZCLCAweDQ4QzEsIDB4Q0Y2QywgMHhDRjZDLCAweDI1RDUsDQotICAgIDB4Q0Y2RCwgMHhDRjcyLCAweDQ4RDAsIDB4Q0Y3MywgMHhDRjczLCAweDFFNkIsIDB4Q0Y3NCwgMHhDRjc0LCAweDQ4RDYsDQotICAgIDB4Q0Y3NSwgMHhDRjc1LCAweDI1REIsIDB4Q0Y3NiwgMHhDRjc3LCAweDQ4RDcsIDB4Q0Y3OCwgMHhDRjc4LCAweDFFODksDQotICAgIDB4Q0Y3OSwgMHhDRjdCLCAweDQ4RDksIDB4Q0Y3QywgMHhDRjdDLCAweDI1RDksIDB4Q0Y3RCwgMHhDRjdFLCAweDQ4REMsDQotICAgIDB4Q0Y4MCwgMHhDRjgwLCAweDQ4REUsIDB4Q0Y4MSwgMHhDRjgxLCAweDIyMTEsIDB4Q0Y4MiwgMHhDRjg4LCAweDQ4REYsDQotICAgIDB4Q0Y4OSwgMHhDRjg5LCAweDIyMjksIDB4Q0Y4QSwgMHhDRjhBLCAweDI1RDYsIDB4Q0Y4QiwgMHhDRjkyLCAweDQ4RTYsDQotICAgIDB4Q0Y5MywgMHhDRjkzLCAweDI1REQsIDB4Q0Y5NCwgMHhDRjk0LCAweDI1REYsIDB4Q0Y5NSwgMHhDRjlELCAweDQ4RUUsDQotICAgIDB4Q0Y5RSwgMHhDRjlFLCAweDFGRUYsIDB4Q0Y5RiwgMHhDRjlGLCAweDQ4RjcsIDB4Q0ZBMCwgMHhDRkEwLCAweDI1RDgsDQotICAgIDB4Q0ZBMSwgMHhDRkZFLCAweDBGMEUsIDB4RDA0MCwgMHhEMDRDLCAweDQ4RjgsIDB4RDA0RCwgMHhEMDRELCAweDFGMjksDQotICAgIDB4RDA0RSwgMHhEMDUwLCAweDQ5MDUsIDB4RDA1MSwgMHhEMDUxLCAweDFFNUIsIDB4RDA1MiwgMHhEMDU0LCAweDQ5MDgsDQotICAgIDB4RDA1NSwgMHhEMDU1LCAweDIwNzYsIDB4RDA1NiwgMHhEMDVCLCAweDQ5MEIsIDB4RDA1QywgMHhEMDVDLCAweDIyOTcsDQotICAgIDB4RDA1RCwgMHhEMDVGLCAweDQ5MTEsIDB4RDA2MCwgMHhEMDYwLCAweDI2OTAsIDB4RDA2MSwgMHhEMDY2LCAweDQ5MTQsDQotICAgIDB4RDA2NywgMHhEMDY3LCAweDIxM0YsIDB4RDA2OCwgMHhEMDZCLCAweDQ5MUEsIDB4RDA2QywgMHhEMDZDLCAweDIxOTgsDQotICAgIDB4RDA2RCwgMHhEMDZELCAweDQ5MUUsIDB4RDA2RSwgMHhEMDZFLCAweDFFODgsIDB4RDA2RiwgMHhEMDdDLCAweDQ5MUYsDQotICAgIDB4RDA3RCwgMHhEMDdELCAweDIyOEMsIDB4RDA3RSwgMHhEMDdFLCAweDQ5MkQsIDB4RDA4MCwgMHhEMEEwLCAweDQ5MkUsDQotICAgIDB4RDBBMSwgMHhEMEZFLCAweDBGNkMsIDB4RDE0MCwgMHhEMTU0LCAweDQ5NEYsIDB4RDE1NSwgMHhEMTU1LCAweDI1RjEsDQotICAgIDB4RDE1NiwgMHhEMTU4LCAweDQ5NjQsIDB4RDE1OSwgMHhEMTU5LCAweDIwMEMsIDB4RDE1QSwgMHhEMTYwLCAweDQ5NjcsDQotICAgIDB4RDE2MSwgMHhEMTYxLCAweDFFNTgsIDB4RDE2MiwgMHhEMTYyLCAweDIyQUMsIDB4RDE2MywgMHhEMTc0LCAweDQ5NkUsDQotICAgIDB4RDE3NSwgMHhEMTc1LCAweDI2QTcsIDB4RDE3NiwgMHhEMTdDLCAweDQ5ODAsIDB4RDE3RCwgMHhEMTdELCAweDI2NzYsDQotICAgIDB4RDE3RSwgMHhEMTdFLCAweDQ5ODcsIDB4RDE4MCwgMHhEMTlDLCAweDQ5ODgsIDB4RDE5RCwgMHhEMTlELCAweDFGRTEsDQotICAgIDB4RDE5RSwgMHhEMTlFLCAweDI1QkIsIDB4RDE5RiwgMHhEMUEwLCAweDQ5QTUsIDB4RDFBMSwgMHhEMUZFLCAweDBGQ0EsDQotICAgIDB4RDI0MCwgMHhEMjQwLCAweDI1QkUsIDB4RDI0MSwgMHhEMjQyLCAweDQ5QTcsIDB4RDI0MywgMHhEMjQzLCAweDIyREQsDQotICAgIDB4RDI0NCwgMHhEMjRDLCAweDQ5QTksIDB4RDI0RCwgMHhEMjRELCAweDI1QkQsIDB4RDI0RSwgMHhEMjVCLCAweDQ5QjIsDQotICAgIDB4RDI1QywgMHhEMjVDLCAweDFFMkEsIDB4RDI1RCwgMHhEMjYyLCAweDQ5QzAsIDB4RDI2MywgMHhEMjYzLCAweDI1QkMsDQotICAgIDB4RDI2NCwgMHhEMjY0LCAweDI1QkEsIDB4RDI2NSwgMHhEMjY3LCAweDQ5QzYsIDB4RDI2OCwgMHhEMjY4LCAweDI1QkYsDQotICAgIDB4RDI2OSwgMHhEMjZDLCAweDQ5QzksIDB4RDI2RCwgMHhEMjZELCAweDIxODcsIDB4RDI2RSwgMHhEMjZFLCAweDQ5Q0QsDQotICAgIDB4RDI2RiwgMHhEMjZGLCAweDI2NkIsIDB4RDI3MCwgMHhEMjcxLCAweDQ5Q0UsIDB4RDI3MiwgMHhEMjcyLCAweDFFN0YsDQotICAgIDB4RDI3MywgMHhEMjc0LCAweDQ5RDAsIDB4RDI3NSwgMHhEMjc1LCAweDIxQUQsIDB4RDI3NiwgMHhEMjdFLCAweDQ5RDIsDQotICAgIDB4RDI4MCwgMHhEMjg5LCAweDQ5REIsIDB4RDI4QSwgMHhEMjhBLCAweDFGOTYsIDB4RDI4QiwgMHhEMjhELCAweDQ5RTUsDQotICAgIDB4RDI4RSwgMHhEMjhFLCAweDFGMzIsIDB4RDI4RiwgMHhEMjkxLCAweDQ5RTgsIDB4RDI5MiwgMHhEMjkyLCAweDIwODQsDQotICAgIDB4RDI5MywgMHhEMjk0LCAweDQ5RUIsIDB4RDI5NSwgMHhEMjk1LCAweDIxMzYsIDB4RDI5NiwgMHhEMjk2LCAweDQ5RUQsDQotICAgIDB4RDI5NywgMHhEMjk3LCAweDI0QjgsIDB4RDI5OCwgMHhEMjlGLCAweDQ5RUUsIDB4RDJBMCwgMHhEMkEwLCAweDI0QkEsDQotICAgIDB4RDJBMSwgMHhEMkZFLCAweDEwMjgsIDB4RDM0MCwgMHhEMzQzLCAweDQ5RjYsIDB4RDM0NCwgMHhEMzQ0LCAweDI0QkMsDQotICAgIDB4RDM0NSwgMHhEMzQ3LCAweDQ5RkEsIDB4RDM0OCwgMHhEMzQ4LCAweDIwRTQsIDB4RDM0OSwgMHhEMzQ5LCAweDQ5RkQsDQotICAgIDB4RDM0QSwgMHhEMzRBLCAweDI0QjksIDB4RDM0QiwgMHhEMzRDLCAweDQ5RkUsIDB4RDM0RCwgMHhEMzRELCAweDI0QkQsDQotICAgIDB4RDM0RSwgMHhEMzRGLCAweDRBMDAsIDB4RDM1MCwgMHhEMzUwLCAweDI0QkUsIDB4RDM1MSwgMHhEMzU0LCAweDRBMDIsDQotICAgIDB4RDM1NSwgMHhEMzU1LCAweDI0QkYsIDB4RDM1NiwgMHhEMzU3LCAweDRBMDYsIDB4RDM1OCwgMHhEMzU4LCAweDFGRDIsDQotICAgIDB4RDM1OSwgMHhEMzVBLCAweDRBMDgsIDB4RDM1QiwgMHhEMzVCLCAweDFGRkQsIDB4RDM1QywgMHhEMzVDLCAweDRBMEEsDQotICAgIDB4RDM1RCwgMHhEMzVELCAweDI0QkIsIDB4RDM1RSwgMHhEMzVFLCAweDFGMkQsIDB4RDM1RiwgMHhEMzc3LCAweDRBMEIsDQotICAgIDB4RDM3OCwgMHhEMzc4LCAweDI2MDksIDB4RDM3OSwgMHhEMzc5LCAweDRBMjQsIDB4RDM3QSwgMHhEMzdBLCAweDI2MEEsDQotICAgIDB4RDM3QiwgMHhEMzdCLCAweDRBMjUsIDB4RDM3QywgMHhEMzdDLCAweDFFOTQsIDB4RDM3RCwgMHhEMzdFLCAweDRBMjYsDQotICAgIDB4RDM4MCwgMHhEMzg0LCAweDRBMjgsIDB4RDM4NSwgMHhEMzg1LCAweDIyREYsIDB4RDM4NiwgMHhEMzg2LCAweDFFQ0IsDQotICAgIDB4RDM4NywgMHhEMzg3LCAweDFGMEQsIDB4RDM4OCwgMHhEMzhBLCAweDRBMkQsIDB4RDM4QiwgMHhEMzhCLCAweDFGNzcsDQotICAgIDB4RDM4QywgMHhEMzhDLCAweDRBMzAsIDB4RDM4RCwgMHhEMzhELCAweDIxRUIsIDB4RDM4RSwgMHhEMzhFLCAweDRBMzEsDQotICAgIDB4RDM4RiwgMHhEMzhGLCAweDIyRTEsIDB4RDM5MCwgMHhEMzkwLCAweDRBMzIsIDB4RDM5MSwgMHhEMzkxLCAweDIxNkYsDQotICAgIDB4RDM5MiwgMHhEMzkyLCAweDRBMzMsIDB4RDM5MywgMHhEMzkzLCAweDIyRTAsIDB4RDM5NCwgMHhEMzk1LCAweDRBMzQsDQotICAgIDB4RDM5NiwgMHhEMzk2LCAweDIxRUEsIDB4RDM5NywgMHhEMzk3LCAweDRBMzYsIDB4RDM5OCwgMHhEMzk4LCAweDIyRTIsDQotICAgIDB4RDM5OSwgMHhEMzk5LCAweDIwQ0IsIDB4RDM5QSwgMHhEMzlBLCAweDRBMzcsIDB4RDM5QiwgMHhEMzlCLCAweDFGNzgsDQotICAgIDB4RDM5QywgMHhEMzlELCAweDRBMzgsIDB4RDM5RSwgMHhEMzlFLCAweDFFRTIsIDB4RDM5RiwgMHhEMzlGLCAweDRBM0EsDQotICAgIDB4RDNBMCwgMHhEM0EwLCAweDIxRjIsIDB4RDNBMSwgMHhEM0ZFLCAweDEwODYsIDB4RDQ0MCwgMHhENDQwLCAweDRBM0IsDQotICAgIDB4RDQ0MSwgMHhENDQxLCAweDIxNTAsIDB4RDQ0MiwgMHhENDQ0LCAweDRBM0MsIDB4RDQ0NSwgMHhENDQ1LCAweDFGRDMsDQotICAgIDB4RDQ0NiwgMHhENDQ2LCAweDRBM0YsIDB4RDQ0NywgMHhENDQ3LCAweDIyRTUsIDB4RDQ0OCwgMHhENDRCLCAweDRBNDAsDQotICAgIDB4RDQ0QywgMHhENDRDLCAweDFFRjIsIDB4RDQ0RCwgMHhENDRFLCAweDRBNDQsIDB4RDQ0RiwgMHhENDRGLCAweDIxMUYsDQotICAgIDB4RDQ1MCwgMHhENDUyLCAweDRBNDYsIDB4RDQ1MywgMHhENDUzLCAweDIxREQsIDB4RDQ1NCwgMHhENDU1LCAweDRBNDksDQotICAgIDB4RDQ1NiwgMHhENDU2LCAweDIxNTQsIDB4RDQ1NywgMHhENDU3LCAweDRBNEIsIDB4RDQ1OCwgMHhENDU4LCAweDIyRTcsDQotICAgIDB4RDQ1OSwgMHhENDVCLCAweDRBNEMsIDB4RDQ1QywgMHhENDVDLCAweDIyODIsIDB4RDQ1RCwgMHhENDYxLCAweDRBNEYsDQotICAgIDB4RDQ2MiwgMHhENDYyLCAweDIyRTYsIDB4RDQ2MywgMHhENDY2LCAweDRBNTQsIDB4RDQ2NywgMHhENDY3LCAweDIyRTgsDQotICAgIDB4RDQ2OCwgMHhENDZELCAweDRBNTgsIDB4RDQ2RSwgMHhENDZFLCAweDIyRTQsIDB4RDQ2RiwgMHhENDZGLCAweDRBNUUsDQotICAgIDB4RDQ3MCwgMHhENDcwLCAweDIyNkEsIDB4RDQ3MSwgMHhENDcxLCAweDRBNUYsIDB4RDQ3MiwgMHhENDcyLCAweDIyRUIsDQotICAgIDB4RDQ3MywgMHhENDczLCAweDRBNjAsIDB4RDQ3NCwgMHhENDc0LCAweDIyRTksIDB4RDQ3NSwgMHhENDc1LCAweDIwQkQsDQotICAgIDB4RDQ3NiwgMHhENDc3LCAweDRBNjEsIDB4RDQ3OCwgMHhENDc4LCAweDIyRUEsIDB4RDQ3OSwgMHhENDdBLCAweDRBNjMsDQotICAgIDB4RDQ3QiwgMHhENDdCLCAweDIyQkQsIDB4RDQ3QywgMHhENDdELCAweDRBNjUsIDB4RDQ3RSwgMHhENDdFLCAweDFFOUUsDQotICAgIDB4RDQ4MCwgMHhENDgxLCAweDRBNjcsIDB4RDQ4MiwgMHhENDgyLCAweDIyRjYsIDB4RDQ4MywgMHhENDgzLCAweDIxRTcsDQotICAgIDB4RDQ4NCwgMHhENDg0LCAweDIyMTYsIDB4RDQ4NSwgMHhENDg2LCAweDRBNjksIDB4RDQ4NywgMHhENDg3LCAweDIxMzcsDQotICAgIDB4RDQ4OCwgMHhENDg5LCAweDRBNkIsIDB4RDQ4QSwgMHhENDhBLCAweDIxMkMsIDB4RDQ4QiwgMHhENDhCLCAweDRBNkQsDQotICAgIDB4RDQ4QywgMHhENDhDLCAweDFFNjgsIDB4RDQ4RCwgMHhENDhELCAweDIyRjIsIDB4RDQ4RSwgMHhENDhFLCAweDFGMzcsDQotICAgIDB4RDQ4RiwgMHhENDhGLCAweDIyRjMsIDB4RDQ5MCwgMHhENDkwLCAweDRBNkUsIDB4RDQ5MSwgMHhENDkxLCAweDIyRUYsDQotICAgIDB4RDQ5MiwgMHhENDkyLCAweDFGNTAsIDB4RDQ5MywgMHhENDkzLCAweDFGMTAsIDB4RDQ5NCwgMHhENDk0LCAweDIxQzgsDQotICAgIDB4RDQ5NSwgMHhENDk1LCAweDRBNkYsIDB4RDQ5NiwgMHhENDk2LCAweDIyRjEsIDB4RDQ5NywgMHhENDlCLCAweDRBNzAsDQotICAgIDB4RDQ5QywgMHhENDlDLCAweDIyRjAsIDB4RDQ5RCwgMHhENDlFLCAweDRBNzUsIDB4RDQ5RiwgMHhENDlGLCAweDIyRUUsDQotICAgIDB4RDRBMCwgMHhENEEwLCAweDRBNzcsIDB4RDRBMSwgMHhENEZFLCAweDEwRTQsIDB4RDU0MCwgMHhENTQyLCAweDRBNzgsDQotICAgIDB4RDU0MywgMHhENTQzLCAweDIyRUQsIDB4RDU0NCwgMHhENTQ0LCAweDIyOUUsIDB4RDU0NSwgMHhENTQ1LCAweDIyRUMsDQotICAgIDB4RDU0NiwgMHhENTQ2LCAweDFGRTIsIDB4RDU0NywgMHhENTQ5LCAweDRBN0IsIDB4RDU0QSwgMHhENTRBLCAweDIwRkUsDQotICAgIDB4RDU0QiwgMHhENTRELCAweDRBN0UsIDB4RDU0RSwgMHhENTRGLCAweDIyRjksIDB4RDU1MCwgMHhENTUwLCAweDRBODEsDQotICAgIDB4RDU1MSwgMHhENTUxLCAweDFFQUYsIDB4RDU1MiwgMHhENTUzLCAweDRBODIsIDB4RDU1NCwgMHhENTU0LCAweDIyMzYsDQotICAgIDB4RDU1NSwgMHhENTU1LCAweDRBODQsIDB4RDU1NiwgMHhENTU2LCAweDIyRjcsIDB4RDU1NywgMHhENTU5LCAweDRBODUsDQotICAgIDB4RDU1QSwgMHhENTVBLCAweDIyM0QsIDB4RDU1QiwgMHhENTVCLCAweDRBODgsIDB4RDU1QywgMHhENTVDLCAweDFFODIsDQotICAgIDB4RDU1RCwgMHhENTVELCAweDFGQjYsIDB4RDU1RSwgMHhENTVFLCAweDRBODksIDB4RDU1RiwgMHhENTVGLCAweDIxQTQsDQotICAgIDB4RDU2MCwgMHhENTYwLCAweDIxQUEsIDB4RDU2MSwgMHhENTYxLCAweDIyRjgsIDB4RDU2MiwgMHhENTYyLCAweDIxNTEsDQotICAgIDB4RDU2MywgMHhENTYzLCAweDRBOEEsIDB4RDU2NCwgMHhENTY0LCAweDFGNjAsIDB4RDU2NSwgMHhENTY3LCAweDRBOEIsDQotICAgIDB4RDU2OCwgMHhENTY4LCAweDIxNDcsIDB4RDU2OSwgMHhENTZCLCAweDRBOEUsIDB4RDU2QywgMHhENTZDLCAweDIxNDUsDQotICAgIDB4RDU2RCwgMHhENTZELCAweDRBOTEsIDB4RDU2RSwgMHhENTZFLCAweDFGREMsIDB4RDU2RiwgMHhENTcxLCAweDRBOTIsDQotICAgIDB4RDU3MiwgMHhENTcyLCAweDIzMDEsIDB4RDU3MywgMHhENTc0LCAweDRBOTUsIDB4RDU3NSwgMHhENTc1LCAweDFFRjUsDQotICAgIDB4RDU3NiwgMHhENTc3LCAweDRBOTcsIDB4RDU3OCwgMHhENTc4LCAweDIyMTgsIDB4RDU3OSwgMHhENTdBLCAweDRBOTksDQotICAgIDB4RDU3QiwgMHhENTdCLCAweDFFQzYsIDB4RDU3QywgMHhENTdELCAweDRBOUIsIDB4RDU3RSwgMHhENTdFLCAweDIzMDAsDQotICAgIDB4RDU4MCwgMHhENTgwLCAweDRBOUQsIDB4RDU4MSwgMHhENTgxLCAweDIyQjQsIDB4RDU4MiwgMHhENTgzLCAweDRBOUUsDQotICAgIDB4RDU4NCwgMHhENTg0LCAweDIxNjksIDB4RDU4NSwgMHhENTg1LCAweDRBQTAsIDB4RDU4NiwgMHhENTg2LCAweDIyRkQsDQotICAgIDB4RDU4NywgMHhENTg3LCAweDRBQTEsIDB4RDU4OCwgMHhENTg4LCAweDIwRUEsIDB4RDU4OSwgMHhENTg5LCAweDRBQTIsDQotICAgIDB4RDU4QSwgMHhENThBLCAweDIyRjQsIDB4RDU4QiwgMHhENThCLCAweDRBQTMsIDB4RDU4QywgMHhENThDLCAweDIyRkIsDQotICAgIDB4RDU4RCwgMHhENThELCAweDRBQTQsIDB4RDU4RSwgMHhENThFLCAweDIyRkMsIDB4RDU4RiwgMHhENThGLCAweDIwMjcsDQotICAgIDB4RDU5MCwgMHhENTkyLCAweDRBQTUsIDB4RDU5MywgMHhENTkzLCAweDIwNjAsIDB4RDU5NCwgMHhENTk0LCAweDIyRkYsDQotICAgIDB4RDU5NSwgMHhENTk3LCAweDRBQTgsIDB4RDU5OCwgMHhENTk4LCAweDIyRkUsIDB4RDU5OSwgMHhENTk5LCAweDFFQzcsDQotICAgIDB4RDU5QSwgMHhENTlBLCAweDRBQUIsIDB4RDU5QiwgMHhENTlCLCAweDIzMEMsIDB4RDU5QywgMHhENTlFLCAweDRBQUMsDQotICAgIDB4RDU5RiwgMHhENTlGLCAweDIyRjUsIDB4RDVBMCwgMHhENUEwLCAweDRBQUYsIDB4RDVBMSwgMHhENUZFLCAweDExNDIsDQotICAgIDB4RDY0MCwgMHhENjQwLCAweDIzMDYsIDB4RDY0MSwgMHhENjQxLCAweDRBQjAsIDB4RDY0MiwgMHhENjQyLCAweDIzMEEsDQotICAgIDB4RDY0MywgMHhENjQzLCAweDIxRDMsIDB4RDY0NCwgMHhENjQ2LCAweDRBQjEsIDB4RDY0NywgMHhENjQ3LCAweDIzMDMsDQotICAgIDB4RDY0OCwgMHhENjQ4LCAweDRBQjQsIDB4RDY0OSwgMHhENjQ5LCAweDIzMDcsIDB4RDY0QSwgMHhENjRBLCAweDIzMEIsDQotICAgIDB4RDY0QiwgMHhENjRDLCAweDRBQjUsIDB4RDY0RCwgMHhENjRELCAweDFGNUYsIDB4RDY0RSwgMHhENjRFLCAweDRBQjcsDQotICAgIDB4RDY0RiwgMHhENjRGLCAweDIzMDksIDB4RDY1MCwgMHhENjUxLCAweDRBQjgsIDB4RDY1MiwgMHhENjUyLCAweDIzMDIsDQotICAgIDB4RDY1MywgMHhENjUzLCAweDFGMDQsIDB4RDY1NCwgMHhENjU0LCAweDIyOUQsIDB4RDY1NSwgMHhENjU1LCAweDRBQkEsDQotICAgIDB4RDY1NiwgMHhENjU2LCAweDIxRkIsIDB4RDY1NywgMHhENjU3LCAweDRBQkIsIDB4RDY1OCwgMHhENjU4LCAweDIzMDgsDQotICAgIDB4RDY1OSwgMHhENjU5LCAweDRBQkMsIDB4RDY1QSwgMHhENjVBLCAweDIwQUMsIDB4RDY1QiwgMHhENjVCLCAweDRBQkQsDQotICAgIDB4RDY1QywgMHhENjVDLCAweDIwOEUsIDB4RDY1RCwgMHhENjVELCAweDIzMDUsIDB4RDY1RSwgMHhENjVFLCAweDIxOTcsDQotICAgIDB4RDY1RiwgMHhENjVGLCAweDRBQkUsIDB4RDY2MCwgMHhENjYwLCAweDIxNzEsIDB4RDY2MSwgMHhENjYxLCAweDIyOTgsDQotICAgIDB4RDY2MiwgMHhENjY0LCAweDRBQkYsIDB4RDY2NSwgMHhENjY1LCAweDFGNTcsIDB4RDY2NiwgMHhENjY4LCAweDRBQzIsDQotICAgIDB4RDY2OSwgMHhENjY5LCAweDIwODIsIDB4RDY2QSwgMHhENjZBLCAweDRBQzUsIDB4RDY2QiwgMHhENjZCLCAweDIzMTEsDQotICAgIDB4RDY2QywgMHhENjZFLCAweDRBQzYsIDB4RDY2RiwgMHhENjZGLCAweDIzMDQsIDB4RDY3MCwgMHhENjcwLCAweDRBQzksDQotICAgIDB4RDY3MSwgMHhENjcxLCAweDIzMEYsIDB4RDY3MiwgMHhENjcyLCAweDFFMzUsIDB4RDY3MywgMHhENjczLCAweDRBQ0EsDQotICAgIDB4RDY3NCwgMHhENjc0LCAweDIwRDEsIDB4RDY3NSwgMHhENjc1LCAweDIzMTAsIDB4RDY3NiwgMHhENjc2LCAweDFGQTMsDQotICAgIDB4RDY3NywgMHhENjc3LCAweDRBQ0IsIDB4RDY3OCwgMHhENjc4LCAweDIxRDYsIDB4RDY3OSwgMHhENjdCLCAweDRBQ0MsDQotICAgIDB4RDY3QywgMHhENjdDLCAweDIyMDYsIDB4RDY3RCwgMHhENjdFLCAweDRBQ0YsIDB4RDY4MCwgMHhENjgyLCAweDRBRDEsDQotICAgIDB4RDY4MywgMHhENjgzLCAweDIzMEQsIDB4RDY4NCwgMHhENjg1LCAweDRBRDQsIDB4RDY4NiwgMHhENjg2LCAweDIzMTIsDQotICAgIDB4RDY4NywgMHhENjg3LCAweDIwOEQsIDB4RDY4OCwgMHhENjg4LCAweDIzMTMsIDB4RDY4OSwgMHhENjhELCAweDRBRDYsDQotICAgIDB4RDY4RSwgMHhENjhFLCAweDIyRTMsIDB4RDY4RiwgMHhENjkzLCAweDRBREIsIDB4RDY5NCwgMHhENjk0LCAweDFGQkEsDQotICAgIDB4RDY5NSwgMHhENjk4LCAweDRBRTAsIDB4RDY5OSwgMHhENjk5LCAweDIwNzgsIDB4RDY5QSwgMHhENkEwLCAweDRBRTQsDQotICAgIDB4RDZBMSwgMHhENkZFLCAweDExQTAsIDB4RDc0MCwgMHhENzQyLCAweDRBRUIsIDB4RDc0MywgMHhENzQzLCAweDIyODgsDQotICAgIDB4RDc0NCwgMHhENzQ3LCAweDRBRUUsIDB4RDc0OCwgMHhENzQ4LCAweDIzMTYsIDB4RDc0OSwgMHhENzQ5LCAweDFGNkIsDQotICAgIDB4RDc0QSwgMHhENzRGLCAweDRBRjIsIDB4RDc1MCwgMHhENzUwLCAweDIzMTQsIDB4RDc1MSwgMHhENzUxLCAweDRBRjgsDQotICAgIDB4RDc1MiwgMHhENzUyLCAweDIxMzAsIDB4RDc1MywgMHhENzUzLCAweDIzMTUsIDB4RDc1NCwgMHhENzU0LCAweDIxNjgsDQotICAgIDB4RDc1NSwgMHhENzU1LCAweDRBRjksIDB4RDc1NiwgMHhENzU2LCAweDIwQzQsIDB4RDc1NywgMHhENzYzLCAweDRBRkEsDQotICAgIDB4RDc2NCwgMHhENzY0LCAweDIzMTgsIDB4RDc2NSwgMHhENzY2LCAweDRCMDcsIDB4RDc2NywgMHhENzY3LCAweDIyMTksDQotICAgIDB4RDc2OCwgMHhENzY4LCAweDIyMTcsIDB4RDc2OSwgMHhENzZCLCAweDRCMDksIDB4RDc2QywgMHhENzZDLCAweDIwRDUsDQotICAgIDB4RDc2RCwgMHhENzZFLCAweDRCMEMsIDB4RDc2RiwgMHhENzZGLCAweDFGNEEsIDB4RDc3MCwgMHhENzc0LCAweDRCMEUsDQotICAgIDB4RDc3NSwgMHhENzc1LCAweDIyNDAsIDB4RDc3NiwgMHhENzc3LCAweDRCMTMsIDB4RDc3OCwgMHhENzc4LCAweDFFRDMsDQotICAgIDB4RDc3OSwgMHhENzdFLCAweDRCMTUsIDB4RDc4MCwgMHhENzgyLCAweDRCMUIsIDB4RDc4MywgMHhENzgzLCAweDFFNDksDQotICAgIDB4RDc4NCwgMHhENzg2LCAweDRCMUUsIDB4RDc4NywgMHhENzg3LCAweDI2MUIsIDB4RDc4OCwgMHhENzhBLCAweDRCMjEsDQotICAgIDB4RDc4QiwgMHhENzhCLCAweDFFNkQsIDB4RDc4QywgMHhENzhDLCAweDIwRjgsIDB4RDc4RCwgMHhENzhELCAweDRCMjQsDQotICAgIDB4RDc4RSwgMHhENzhFLCAweDFGRkIsIDB4RDc4RiwgMHhENzhGLCAweDIzMTksIDB4RDc5MCwgMHhENzk0LCAweDRCMjUsDQotICAgIDB4RDc5NSwgMHhENzk1LCAweDIzMEUsIDB4RDc5NiwgMHhENzk2LCAweDRCMkEsIDB4RDc5NywgMHhENzk3LCAweDIzMTcsDQotICAgIDB4RDc5OCwgMHhEN0EwLCAweDRCMkIsIDB4RDdBMSwgMHhEN0Y5LCAweDExRkUsIDB4RDg0MCwgMHhEODRDLCAweDRCMzQsDQotICAgIDB4RDg0RCwgMHhEODRELCAweDIwQzgsIDB4RDg0RSwgMHhEODUyLCAweDRCNDEsIDB4RDg1MywgMHhEODUzLCAweDFFRkQsDQotICAgIDB4RDg1NCwgMHhEODdFLCAweDRCNDYsIDB4RDg4MCwgMHhEODhGLCAweDRCNzEsIDB4RDg5MCwgMHhEODkwLCAweDFFM0IsDQotICAgIDB4RDg5MSwgMHhEODkxLCAweDIyN0YsIDB4RDg5MiwgMHhEODkyLCAweDRCODEsIDB4RDg5MywgMHhEODkzLCAweDFGMEMsDQotICAgIDB4RDg5NCwgMHhEODk0LCAweDFFNTksIDB4RDg5NSwgMHhEODk1LCAweDFGMjQsIDB4RDg5NiwgMHhEODk5LCAweDRCODIsDQotICAgIDB4RDg5QSwgMHhEODlBLCAweDIwQkEsIDB4RDg5QiwgMHhEODlCLCAweDFGNjUsIDB4RDg5QywgMHhEODlDLCAweDFFRjAsDQotICAgIDB4RDg5RCwgMHhEODlELCAweDIxNjQsIDB4RDg5RSwgMHhEODlFLCAweDFGMzAsIDB4RDg5RiwgMHhEODlGLCAweDIyNjEsDQotICAgIDB4RDhBMCwgMHhEOEEwLCAweDRCODYsIDB4RDhBMSwgMHhEOEZFLCAweDEyNTcsIDB4RDk0MCwgMHhEOTQwLCAweDRCODcsDQotICAgIDB4RDk0MSwgMHhEOTQxLCAweDIyQTIsIDB4RDk0MiwgMHhEOTQyLCAweDI0QUIsIDB4RDk0MywgMHhEOTQzLCAweDRCODgsDQotICAgIDB4RDk0NCwgMHhEOTQ0LCAweDI0QUYsIDB4RDk0NSwgMHhEOTQ1LCAweDFFRTgsIDB4RDk0NiwgMHhEOTQ2LCAweDFGMzksDQotICAgIDB4RDk0NywgMHhEOTQ3LCAweDRCODksIDB4RDk0OCwgMHhEOTQ4LCAweDFFNDgsIDB4RDk0OSwgMHhEOTQ5LCAweDIwNzAsDQotICAgIDB4RDk0QSwgMHhEOTRBLCAweDFFQTgsIDB4RDk0QiwgMHhEOTRCLCAweDRCOEEsIDB4RDk0QywgMHhEOTRDLCAweDI0QUMsDQotICAgIDB4RDk0RCwgMHhEOTRELCAweDFFRjcsIDB4RDk0RSwgMHhEOTRFLCAweDIxNzYsIDB4RDk0RiwgMHhEOTRGLCAweDI0QUQsDQotICAgIDB4RDk1MCwgMHhEOTUwLCAweDRCOEIsIDB4RDk1MSwgMHhEOTUxLCAweDIwN0IsIDB4RDk1MiwgMHhEOTUyLCAweDFGNDUsDQotICAgIDB4RDk1MywgMHhEOTUzLCAweDI0QUEsIDB4RDk1NCwgMHhEOTU0LCAweDIwNEIsIDB4RDk1NSwgMHhEOTU1LCAweDIwMkYsDQotICAgIDB4RDk1NiwgMHhEOTU2LCAweDFGNUEsIDB4RDk1NywgMHhEOTU3LCAweDI0QjAsIDB4RDk1OCwgMHhEOTU4LCAweDRCOEMsDQotICAgIDB4RDk1OSwgMHhEOTU5LCAweDIyQjcsIDB4RDk1QSwgMHhEOTVBLCAweDFGN0YsIDB4RDk1QiwgMHhEOTVCLCAweDRCOEQsDQotICAgIDB4RDk1QywgMHhEOTVDLCAweDIyNjUsIDB4RDk1RCwgMHhEOTYyLCAweDRCOEUsIDB4RDk2MywgMHhEOTYzLCAweDI0QjIsDQotICAgIDB4RDk2NCwgMHhEOTY0LCAweDIxMUIsIDB4RDk2NSwgMHhEOTY1LCAweDFFNTEsIDB4RDk2NiwgMHhEOTY2LCAweDRCOTQsDQotICAgIDB4RDk2NywgMHhEOTY3LCAweDI0QjQsIDB4RDk2OCwgMHhEOTZCLCAweDRCOTUsIDB4RDk2QywgMHhEOTZDLCAweDI0QjMsDQotICAgIDB4RDk2RCwgMHhEOTZELCAweDRCOTksIDB4RDk2RSwgMHhEOTZFLCAweDFFOUYsIDB4RDk2RiwgMHhEOTZGLCAweDRCOUEsDQotICAgIDB4RDk3MCwgMHhEOTcwLCAweDIxMTgsIDB4RDk3MSwgMHhEOTcxLCAweDRCOUIsIDB4RDk3MiwgMHhEOTcyLCAweDIwQjQsDQotICAgIDB4RDk3MywgMHhEOTczLCAweDIzQUYsIDB4RDk3NCwgMHhEOTc0LCAweDIxQkIsIDB4RDk3NSwgMHhEOTc1LCAweDIwNzIsDQotICAgIDB4RDk3NiwgMHhEOTc2LCAweDFGOTUsIDB4RDk3NywgMHhEOTc3LCAweDRCOUMsIDB4RDk3OCwgMHhEOTc4LCAweDFGMEEsDQotICAgIDB4RDk3OSwgMHhEOTc5LCAweDI0QjYsIDB4RDk3QSwgMHhEOTdCLCAweDRCOUQsIDB4RDk3QywgMHhEOTdDLCAweDIyOTEsDQotICAgIDB4RDk3RCwgMHhEOTdELCAweDI0QjUsIDB4RDk3RSwgMHhEOTdFLCAweDIyNzgsIDB4RDk4MCwgMHhEOTgwLCAweDFFRDQsDQotICAgIDB4RDk4MSwgMHhEOTg2LCAweDRCOUYsIDB4RDk4NywgMHhEOTg3LCAweDFGRjMsIDB4RDk4OCwgMHhEOThDLCAweDRCQTUsDQotICAgIDB4RDk4RCwgMHhEOThELCAweDIyQTksIDB4RDk4RSwgMHhEOThFLCAweDI0QjcsIDB4RDk4RiwgMHhEOThGLCAweDFGMjgsDQotICAgIDB4RDk5MCwgMHhEOTkwLCAweDIxMDksIDB4RDk5MSwgMHhEOTkxLCAweDIyQzcsIDB4RDk5MiwgMHhEOTk2LCAweDRCQUEsDQotICAgIDB4RDk5NywgMHhEOTk3LCAweDI0QUUsIDB4RDk5OCwgMHhEOTk4LCAweDIyQjEsIDB4RDk5OSwgMHhEOTlBLCAweDRCQUYsDQotICAgIDB4RDk5QiwgMHhEOTlCLCAweDIyNjYsIDB4RDk5QywgMHhEOTlDLCAweDRCQjEsIDB4RDk5RCwgMHhEOTlELCAweDIyNUIsDQotICAgIDB4RDk5RSwgMHhEOTlFLCAweDIyQzQsIDB4RDk5RiwgMHhEOTlGLCAweDRCQjIsIDB4RDlBMCwgMHhEOUEwLCAweDIxMTUsDQotICAgIDB4RDlBMSwgMHhEOUZFLCAweDEyQjUsIDB4REE0MCwgMHhEQTQwLCAweDRCQjMsIDB4REE0MSwgMHhEQTQxLCAweDIyMkEsDQotICAgIDB4REE0MiwgMHhEQTQyLCAweDI0QjEsIDB4REE0MywgMHhEQTQ3LCAweDRCQjQsIDB4REE0OCwgMHhEQTQ4LCAweDIxM0QsDQotICAgIDB4REE0OSwgMHhEQTRDLCAweDRCQjksIDB4REE0RCwgMHhEQTRELCAweDFGMTUsIDB4REE0RSwgMHhEQTRFLCAweDIyNUMsDQotICAgIDB4REE0RiwgMHhEQTcyLCAweDRCQkQsIDB4REE3MywgMHhEQTczLCAweDFGMTQsIDB4REE3NCwgMHhEQTc2LCAweDRCRTEsDQotICAgIDB4REE3NywgMHhEQTc3LCAweDIyN0EsIDB4REE3OCwgMHhEQTdFLCAweDRCRTQsIDB4REE4MCwgMHhEQTg0LCAweDRCRUIsDQotICAgIDB4REE4NSwgMHhEQTg1LCAweDIwRUUsIDB4REE4NiwgMHhEQThELCAweDRCRjAsIDB4REE4RSwgMHhEQThFLCAweDI1RjgsDQotICAgIDB4REE4RiwgMHhEQUEwLCAweDRCRjgsIDB4REFBMSwgMHhEQUZFLCAweDEzMTMsIDB4REI0MCwgMHhEQjVGLCAweDRDMEEsDQotICAgIDB4REI2MCwgMHhEQjYwLCAweDFGOTQsIDB4REI2MSwgMHhEQjc3LCAweDRDMkEsIDB4REI3OCwgMHhEQjc4LCAweDIyMzAsDQotICAgIDB4REI3OSwgMHhEQjdFLCAweDRDNDEsIDB4REI4MCwgMHhEQjgzLCAweDRDNDcsIDB4REI4NCwgMHhEQjg0LCAweDI1RkQsDQotICAgIDB4REI4NSwgMHhEQjhBLCAweDRDNEIsIDB4REI4QiwgMHhEQjhCLCAweDI2MDAsIDB4REI4QywgMHhEQjk3LCAweDRDNTEsDQotICAgIDB4REI5OCwgMHhEQjk4LCAweDI2MDYsIDB4REI5OSwgMHhEQkEwLCAweDRDNUQsIDB4REJBMSwgMHhEQkZFLCAweDEzNzEsDQotICAgIDB4REM0MCwgMHhEQzQ0LCAweDRDNjUsIDB4REM0NSwgMHhEQzQ1LCAweDI1RkYsIDB4REM0NiwgMHhEQzRFLCAweDRDNkEsDQotICAgIDB4REM0RiwgMHhEQzRGLCAweDI1RkMsIDB4REM1MCwgMHhEQzUwLCAweDFFOEMsIDB4REM1MSwgMHhEQzUxLCAweDI2MDIsDQotICAgIDB4REM1MiwgMHhEQzUyLCAweDRDNzMsIDB4REM1MywgMHhEQzUzLCAweDIyNEQsIDB4REM1NCwgMHhEQzU0LCAweDRDNzQsDQotICAgIDB4REM1NSwgMHhEQzU1LCAweDI2MDQsIDB4REM1NiwgMHhEQzU2LCAweDI1RkUsIDB4REM1NywgMHhEQzU3LCAweDI2MDMsDQotICAgIDB4REM1OCwgMHhEQzVDLCAweDRDNzUsIDB4REM1RCwgMHhEQzVELCAweDI2MDEsIDB4REM1RSwgMHhEQzYxLCAweDRDN0EsDQotICAgIDB4REM2MiwgMHhEQzYyLCAweDI2MDUsIDB4REM2MywgMHhEQzY1LCAweDRDN0UsIDB4REM2NiwgMHhEQzY2LCAweDFFQTMsDQotICAgIDB4REM2NywgMHhEQzY3LCAweDI2MDgsIDB4REM2OCwgMHhEQzZBLCAweDRDODEsIDB4REM2QiwgMHhEQzZCLCAweDI2MDcsDQotICAgIDB4REM2QywgMHhEQzdCLCAweDRDODQsIDB4REM3QywgMHhEQzdDLCAweDIwRjAsIDB4REM3RCwgMHhEQzdFLCAweDRDOTQsDQotICAgIDB4REM4MCwgMHhEQzg2LCAweDRDOTYsIDB4REM4NywgMHhEQzg3LCAweDFFN0IsIDB4REM4OCwgMHhEQzg4LCAweDIyNjcsDQotICAgIDB4REM4OSwgMHhEQzg5LCAweDFGMzYsIDB4REM4QSwgMHhEQzhBLCAweDFGRDYsIDB4REM4QiwgMHhEQzhELCAweDRDOUQsDQotICAgIDB4REM4RSwgMHhEQzhFLCAweDIxRTAsIDB4REM4RiwgMHhEQzhGLCAweDRDQTAsIDB4REM5MCwgMHhEQzkwLCAweDI0OEMsDQotICAgIDB4REM5MSwgMHhEQzk2LCAweDRDQTEsIDB4REM5NywgMHhEQzk3LCAweDI0OEQsIDB4REM5OCwgMHhEQzlBLCAweDRDQTcsDQotICAgIDB4REM5QiwgMHhEQzlCLCAweDIxMDIsIDB4REM5QywgMHhEQzlGLCAweDRDQUEsIDB4RENBMCwgMHhEQ0EwLCAweDI0OTQsDQotICAgIDB4RENBMSwgMHhEQ0ZFLCAweDEzQ0YsIDB4REQ0MCwgMHhERDQ1LCAweDRDQUUsIDB4REQ0NiwgMHhERDQ2LCAweDI0OTMsDQotICAgIDB4REQ0NywgMHhERDRDLCAweDRDQjQsIDB4REQ0RCwgMHhERDRELCAweDI0OEUsIDB4REQ0RSwgMHhERDUyLCAweDRDQkEsDQotICAgIDB4REQ1MywgMHhERDUzLCAweDIyOTksIDB4REQ1NCwgMHhERDU0LCAweDI0OTEsIDB4REQ1NSwgMHhERDU1LCAweDI0OTYsDQotICAgIDB4REQ1NiwgMHhERDU2LCAweDI0OEYsIDB4REQ1NywgMHhERDU3LCAweDI0OTIsIDB4REQ1OCwgMHhERDU4LCAweDRDQkYsDQotICAgIDB4REQ1OSwgMHhERDU5LCAweDI0OTcsIDB4REQ1QSwgMHhERDVELCAweDRDQzAsIDB4REQ1RSwgMHhERDVFLCAweDFGQjEsDQotICAgIDB4REQ1RiwgMHhERDVGLCAweDRDQzQsIDB4REQ2MCwgMHhERDYwLCAweDI0OUEsIDB4REQ2MSwgMHhERDYxLCAweDRDQzUsDQotICAgIDB4REQ2MiwgMHhERDYyLCAweDI0OTksIDB4REQ2MywgMHhERDYzLCAweDRDQzYsIDB4REQ2NCwgMHhERDY0LCAweDIyNTgsDQotICAgIDB4REQ2NSwgMHhERDY1LCAweDI0OTgsIDB4REQ2NiwgMHhERDZDLCAweDRDQzcsIDB4REQ2RCwgMHhERDZELCAweDI0OUIsDQotICAgIDB4REQ2RSwgMHhERDZFLCAweDRDQ0UsIDB4REQ2RiwgMHhERDZGLCAweDFGMDksIDB4REQ3MCwgMHhERDcwLCAweDIwRTYsDQotICAgIDB4REQ3MSwgMHhERDc1LCAweDRDQ0YsIDB4REQ3NiwgMHhERDc2LCAweDIwMjYsIDB4REQ3NywgMHhERDc3LCAweDI0OUYsDQotICAgIDB4REQ3OCwgMHhERDc4LCAweDFGNTksIDB4REQ3OSwgMHhERDdBLCAweDI0OUQsIDB4REQ3QiwgMHhERDdFLCAweDRDRDQsDQotICAgIDB4REQ4MCwgMHhERDgwLCAweDRDRDgsIDB4REQ4MSwgMHhERDgxLCAweDFGM0IsIDB4REQ4MiwgMHhERDgyLCAweDI0OUMsDQotICAgIDB4REQ4MywgMHhERDg0LCAweDRDRDksIDB4REQ4NSwgMHhERDg1LCAweDFFM0EsIDB4REQ4NiwgMHhERDg2LCAweDIwNUIsDQotICAgIDB4REQ4NywgMHhERDhBLCAweDRDREIsIDB4REQ4QiwgMHhERDhCLCAweDFGNzAsIDB4REQ4QywgMHhERDhFLCAweDRDREYsDQotICAgIDB4REQ4RiwgMHhERDhGLCAweDI0QTAsIDB4REQ5MCwgMHhERDkzLCAweDRDRTIsIDB4REQ5NCwgMHhERDk0LCAweDIxM0IsDQotICAgIDB4REQ5NSwgMHhERDk2LCAweDRDRTYsIDB4REQ5NywgMHhERDk3LCAweDFGMDcsIDB4REQ5OCwgMHhERDk5LCAweDRDRTgsDQotICAgIDB4REQ5QSwgMHhERDlBLCAweDIyNzAsIDB4REQ5QiwgMHhERDlCLCAweDIyMzcsIDB4REQ5QywgMHhERDlELCAweDRDRUEsDQotICAgIDB4REQ5RSwgMHhERDlFLCAweDI0RDIsIDB4REQ5RiwgMHhERDlGLCAweDRDRUMsIDB4RERBMCwgMHhEREEwLCAweDIxQjMsDQotICAgIDB4RERBMSwgMHhEREZFLCAweDE0MkQsIDB4REU0MCwgMHhERTQwLCAweDIyNDUsIDB4REU0MSwgMHhERTQxLCAweDI0QTEsDQotICAgIDB4REU0MiwgMHhERTQzLCAweDRDRUQsIDB4REU0NCwgMHhERTQ0LCAweDIyQTgsIDB4REU0NSwgMHhERTQ3LCAweDRDRUYsDQotICAgIDB4REU0OCwgMHhERTQ4LCAweDIyN0MsIDB4REU0OSwgMHhERTQ5LCAweDFGQjAsIDB4REU0QSwgMHhERTRFLCAweDRDRjIsDQotICAgIDB4REU0RiwgMHhERTRGLCAweDI0QTIsIDB4REU1MCwgMHhERTU5LCAweDRDRjcsIDB4REU1QSwgMHhERTVBLCAweDFGNDYsDQotICAgIDB4REU1QiwgMHhERTVCLCAweDREMDEsIDB4REU1QywgMHhERTVDLCAweDIzODAsIDB4REU1RCwgMHhERTVELCAweDI0OTUsDQotICAgIDB4REU1RSwgMHhERTVFLCAweDREMDIsIDB4REU1RiwgMHhERTVGLCAweDI0OTAsIDB4REU2MCwgMHhERTZBLCAweDREMDMsDQotICAgIDB4REU2QiwgMHhERTZCLCAweDFFMzAsIDB4REU2QywgMHhERTZFLCAweDREMEUsIDB4REU2RiwgMHhERTZGLCAweDFFOUQsDQotICAgIDB4REU3MCwgMHhERTcwLCAweDFFNEIsIDB4REU3MSwgMHhERTcxLCAweDFFNEEsIDB4REU3MiwgMHhERTcyLCAweDIwQUEsDQotICAgIDB4REU3MywgMHhERTdFLCAweDREMTEsIDB4REU4MCwgMHhERTkxLCAweDREMUQsIDB4REU5MiwgMHhERTkyLCAweDI2N0IsDQotICAgIDB4REU5MywgMHhERTlFLCAweDREMkYsIDB4REU5RiwgMHhERTlGLCAweDIzRjIsIDB4REVBMCwgMHhERUEwLCAweDREM0IsDQotICAgIDB4REVBMSwgMHhERUZFLCAweDE0OEIsIDB4REY0MCwgMHhERjQwLCAweDIyN0UsIDB4REY0MSwgMHhERjQxLCAweDREM0MsDQotICAgIDB4REY0MiwgMHhERjQyLCAweDIwMTksIDB4REY0MywgMHhERjRDLCAweDREM0QsIDB4REY0RCwgMHhERjRELCAweDFGQkIsDQotICAgIDB4REY0RSwgMHhERjVCLCAweDRENDcsIDB4REY1QywgMHhERjVDLCAweDIyNTMsIDB4REY1RCwgMHhERjVELCAweDRENTUsDQotICAgIDB4REY1RSwgMHhERjVFLCAweDFGM0UsIDB4REY1RiwgMHhERjVGLCAweDFFQTYsIDB4REY2MCwgMHhERjYwLCAweDIxOEUsDQotICAgIDB4REY2MSwgMHhERjYzLCAweDRENTYsIDB4REY2NCwgMHhERjY0LCAweDIxRUMsIDB4REY2NSwgMHhERjY1LCAweDRENTksDQotICAgIDB4REY2NiwgMHhERjY2LCAweDFFQkUsIDB4REY2NywgMHhERjY3LCAweDRENUEsIDB4REY2OCwgMHhERjY4LCAweDIyNEEsDQotICAgIDB4REY2OSwgMHhERjZDLCAweDRENUIsIDB4REY2RCwgMHhERjZELCAweDIxMzMsIDB4REY2RSwgMHhERjczLCAweDRENUYsDQotICAgIDB4REY3NCwgMHhERjc0LCAweDFFODQsIDB4REY3NSwgMHhERjc2LCAweDRENjUsIDB4REY3NywgMHhERjc3LCAweDIwQ0YsDQotICAgIDB4REY3OCwgMHhERjc4LCAweDIxRTIsIDB4REY3OSwgMHhERjc5LCAweDRENjcsIDB4REY3QSwgMHhERjdBLCAweDIyMEYsDQotICAgIDB4REY3QiwgMHhERjdCLCAweDRENjgsIDB4REY3QywgMHhERjdDLCAweDIwMjksIDB4REY3RCwgMHhERjdELCAweDRENjksDQotICAgIDB4REY3RSwgMHhERjdFLCAweDIwNzMsIDB4REY4MCwgMHhERjgwLCAweDFGNTUsIDB4REY4MSwgMHhERjgyLCAweDRENkEsDQotICAgIDB4REY4MywgMHhERjgzLCAweDIzRjEsIDB4REY4NCwgMHhERjg0LCAweDRENkMsIDB4REY4NSwgMHhERjg1LCAweDFFNDYsDQotICAgIDB4REY4NiwgMHhERjg4LCAweDRENkQsIDB4REY4OSwgMHhERjg5LCAweDIwNjMsIDB4REY4QSwgMHhERjhBLCAweDIzRjMsDQotICAgIDB4REY4QiwgMHhERkEwLCAweDRENzAsIDB4REZBMSwgMHhERkZFLCAweDE0RTksIDB4RTA0MCwgMHhFMDRGLCAweDREODYsDQotICAgIDB4RTA1MCwgMHhFMDUwLCAweDIzMUUsIDB4RTA1MSwgMHhFMDVDLCAweDREOTYsIDB4RTA1RCwgMHhFMDVELCAweDIyMzMsDQotICAgIDB4RTA1RSwgMHhFMDY4LCAweDREQTIsIDB4RTA2OSwgMHhFMDY5LCAweDIzMjAsIDB4RTA2QSwgMHhFMDZCLCAweDREQUQsDQotICAgIDB4RTA2QywgMHhFMDZDLCAweDIxQzcsIDB4RTA2RCwgMHhFMDc0LCAweDREQUYsIDB4RTA3NSwgMHhFMDc1LCAweDIyQkMsDQotICAgIDB4RTA3NiwgMHhFMDc2LCAweDREQjcsIDB4RTA3NywgMHhFMDc3LCAweDIzMUMsIDB4RTA3OCwgMHhFMDc4LCAweDREQjgsDQotICAgIDB4RTA3OSwgMHhFMDc5LCAweDIyNTEsIDB4RTA3QSwgMHhFMDdFLCAweDREQjksIDB4RTA4MCwgMHhFMDg2LCAweDREQkUsDQotICAgIDB4RTA4NywgMHhFMDg3LCAweDFFQkIsIDB4RTA4OCwgMHhFMDhDLCAweDREQzUsIDB4RTA4RCwgMHhFMDhELCAweDIyODcsDQotICAgIDB4RTA4RSwgMHhFMDhFLCAweDREQ0EsIDB4RTA4RiwgMHhFMDhGLCAweDIwMkQsIDB4RTA5MCwgMHhFMDkwLCAweDFFQUIsDQotICAgIDB4RTA5MSwgMHhFMDkxLCAweDREQ0IsIDB4RTA5MiwgMHhFMDkyLCAweDIzMUQsIDB4RTA5MywgMHhFMDkzLCAweDREQ0MsDQotICAgIDB4RTA5NCwgMHhFMDk0LCAweDIzMUYsIDB4RTA5NSwgMHhFMDk2LCAweDREQ0QsIDB4RTA5NywgMHhFMDk3LCAweDIzMUIsDQotICAgIDB4RTA5OCwgMHhFMEEwLCAweDREQ0YsIDB4RTBBMSwgMHhFMEZFLCAweDE1NDcsIDB4RTE0MCwgMHhFMTQxLCAweDRERDgsDQotICAgIDB4RTE0MiwgMHhFMTQyLCAweDIzMjEsIDB4RTE0MywgMHhFMTYzLCAweDREREEsIDB4RTE2NCwgMHhFMTY0LCAweDIyNTUsDQotICAgIDB4RTE2NSwgMHhFMTY3LCAweDRERkIsIDB4RTE2OCwgMHhFMTY4LCAweDFFOEYsIDB4RTE2OSwgMHhFMTczLCAweDRERkUsDQotICAgIDB4RTE3NCwgMHhFMTc0LCAweDIyMEMsIDB4RTE3NSwgMHhFMTc1LCAweDFGQTQsIDB4RTE3NiwgMHhFMTdFLCAweDRFMDksDQotICAgIDB4RTE4MCwgMHhFMTgzLCAweDRFMTIsIDB4RTE4NCwgMHhFMTg0LCAweDIwOUIsIDB4RTE4NSwgMHhFMTg1LCAweDIxRDgsDQotICAgIDB4RTE4NiwgMHhFMTg2LCAweDRFMTYsIDB4RTE4NywgMHhFMTg3LCAweDI1RkEsIDB4RTE4OCwgMHhFMTg4LCAweDRFMTcsDQotICAgIDB4RTE4OSwgMHhFMTg5LCAweDI1RjksIDB4RTE4QSwgMHhFMThCLCAweDRFMTgsIDB4RTE4QywgMHhFMThDLCAweDIxMzQsDQotICAgIDB4RTE4RCwgMHhFMThELCAweDRFMUEsIDB4RTE4RSwgMHhFMTkwLCAweDI0RjMsIDB4RTE5MSwgMHhFMTkxLCAweDI0RjgsDQotICAgIDB4RTE5MiwgMHhFMTkyLCAweDRFMUIsIDB4RTE5MywgMHhFMTkzLCAweDI0RjcsIDB4RTE5NCwgMHhFMTk0LCAweDFFQzgsDQotICAgIDB4RTE5NSwgMHhFMTk1LCAweDI0RjYsIDB4RTE5NiwgMHhFMTk3LCAweDRFMUMsIDB4RTE5OCwgMHhFMTk4LCAweDIyODAsDQotICAgIDB4RTE5OSwgMHhFMTlELCAweDRFMUUsIDB4RTE5RSwgMHhFMTlFLCAweDFFQzUsIDB4RTE5RiwgMHhFMTlGLCAweDI0RkIsDQotICAgIDB4RTFBMCwgMHhFMUEwLCAweDRFMjMsIDB4RTFBMSwgMHhFMUZFLCAweDE1QTUsIDB4RTI0MCwgMHhFMjQwLCAweDRFMjQsDQotICAgIDB4RTI0MSwgMHhFMjQxLCAweDI0RkEsIDB4RTI0MiwgMHhFMjQyLCAweDRFMjUsIDB4RTI0MywgMHhFMjQzLCAweDFFRUQsDQotICAgIDB4RTI0NCwgMHhFMjRFLCAweDRFMjYsIDB4RTI0RiwgMHhFMjRGLCAweDI0RkQsIDB4RTI1MCwgMHhFMjUwLCAweDRFMzEsDQotICAgIDB4RTI1MSwgMHhFMjUxLCAweDI0RjksIDB4RTI1MiwgMHhFMjUyLCAweDRFMzIsIDB4RTI1MywgMHhFMjUzLCAweDI0RkUsDQotICAgIDB4RTI1NCwgMHhFMjU0LCAweDIwQ0QsIDB4RTI1NSwgMHhFMjU5LCAweDRFMzMsIDB4RTI1QSwgMHhFMjVBLCAweDI1MDgsDQotICAgIDB4RTI1QiwgMHhFMjVCLCAweDI1MDQsIDB4RTI1QywgMHhFMjVELCAweDRFMzgsIDB4RTI1RSwgMHhFMjVFLCAweDI1MDYsDQotICAgIDB4RTI1RiwgMHhFMjYxLCAweDRFM0EsIDB4RTI2MiwgMHhFMjYyLCAweDI0RkYsIDB4RTI2MywgMHhFMjYzLCAweDIwOTAsDQotICAgIDB4RTI2NCwgMHhFMjY2LCAweDRFM0QsIDB4RTI2NywgMHhFMjY3LCAweDFFREQsIDB4RTI2OCwgMHhFMjY4LCAweDFGMjUsDQotICAgIDB4RTI2OSwgMHhFMjY5LCAweDRFNDAsIDB4RTI2QSwgMHhFMjZBLCAweDI1MDMsIDB4RTI2QiwgMHhFMjZCLCAweDI1MDIsDQotICAgIDB4RTI2QywgMHhFMjZELCAweDRFNDEsIDB4RTI2RSwgMHhFMjZFLCAweDFFN0EsIDB4RTI2RiwgMHhFMjZGLCAweDIwQTYsDQotICAgIDB4RTI3MCwgMHhFMjc3LCAweDRFNDMsIDB4RTI3OCwgMHhFMjc4LCAweDFGRDUsIDB4RTI3OSwgMHhFMjdDLCAweDRFNEIsDQotICAgIDB4RTI3RCwgMHhFMjdELCAweDFGMTEsIDB4RTI3RSwgMHhFMjdFLCAweDRFNEYsIDB4RTI4MCwgMHhFMjgwLCAweDI1MDcsDQotICAgIDB4RTI4MSwgMHhFMjgxLCAweDI1MDAsIDB4RTI4MiwgMHhFMjgyLCAweDI1MDUsIDB4RTI4MywgMHhFMjg4LCAweDRFNTAsDQotICAgIDB4RTI4OSwgMHhFMjg5LCAweDI1MTksIDB4RTI4QSwgMHhFMjhBLCAweDRFNTYsIDB4RTI4QiwgMHhFMjhCLCAweDI1MTUsDQotICAgIDB4RTI4QywgMHhFMjhELCAweDRFNTcsIDB4RTI4RSwgMHhFMjhFLCAweDI1MEMsIDB4RTI4RiwgMHhFMjhGLCAweDIwMzEsDQotICAgIDB4RTI5MCwgMHhFMjkxLCAweDRFNTksIDB4RTI5MiwgMHhFMjkyLCAweDI1MEIsIDB4RTI5MywgMHhFMjkzLCAweDI1MEYsDQotICAgIDB4RTI5NCwgMHhFMjk0LCAweDI1MUEsIDB4RTI5NSwgMHhFMjk1LCAweDI1MDksIDB4RTI5NiwgMHhFMjk3LCAweDRFNUIsDQotICAgIDB4RTI5OCwgMHhFMjk4LCAweDI1MEUsIDB4RTI5OSwgMHhFMjk5LCAweDIyMzQsIDB4RTI5QSwgMHhFMjlBLCAweDI1MTMsDQotICAgIDB4RTI5QiwgMHhFMjlCLCAweDFGODAsIDB4RTI5QywgMHhFMjlGLCAweDRFNUQsIDB4RTJBMCwgMHhFMkEwLCAweDI1MDEsDQotICAgIDB4RTJBMSwgMHhFMkZFLCAweDE2MDMsIDB4RTM0MCwgMHhFMzQxLCAweDRFNjEsIDB4RTM0MiwgMHhFMzQyLCAweDI1MTcsDQotICAgIDB4RTM0MywgMHhFMzQzLCAweDI1MTYsIDB4RTM0NCwgMHhFMzQ2LCAweDRFNjMsIDB4RTM0NywgMHhFMzQ3LCAweDI1MTgsDQotICAgIDB4RTM0OCwgMHhFMzRBLCAweDRFNjYsIDB4RTM0QiwgMHhFMzRCLCAweDFFNTYsIDB4RTM0QywgMHhFMzRFLCAweDRFNjksDQotICAgIDB4RTM0RiwgMHhFMzRGLCAweDI1MEQsIDB4RTM1MCwgMHhFMzUwLCAweDRFNkMsIDB4RTM1MSwgMHhFMzUxLCAweDIwRDMsDQotICAgIDB4RTM1MiwgMHhFMzUzLCAweDRFNkQsIDB4RTM1NCwgMHhFMzU0LCAweDIwN0EsIDB4RTM1NSwgMHhFMzU1LCAweDIwQ0UsDQotICAgIDB4RTM1NiwgMHhFMzU3LCAweDRFNkYsIDB4RTM1OCwgMHhFMzU4LCAweDI1MTAsIDB4RTM1OSwgMHhFMzVCLCAweDRFNzEsDQotICAgIDB4RTM1QywgMHhFMzVDLCAweDFFNTUsIDB4RTM1RCwgMHhFMzVGLCAweDRFNzQsIDB4RTM2MCwgMHhFMzYwLCAweDI1MEEsDQotICAgIDB4RTM2MSwgMHhFMzY1LCAweDRFNzcsIDB4RTM2NiwgMHhFMzY3LCAweDI1MTEsIDB4RTM2OCwgMHhFMzcwLCAweDRFN0MsDQotICAgIDB4RTM3MSwgMHhFMzcxLCAweDFGQUEsIDB4RTM3MiwgMHhFMzcyLCAweDRFODUsIDB4RTM3MywgMHhFMzczLCAweDI1MUUsDQotICAgIDB4RTM3NCwgMHhFMzc0LCAweDFGMUYsIDB4RTM3NSwgMHhFMzc3LCAweDRFODYsIDB4RTM3OCwgMHhFMzc4LCAweDI1MkQsDQotICAgIDB4RTM3OSwgMHhFMzc5LCAweDIyMUQsIDB4RTM3QSwgMHhFMzdCLCAweDRFODksIDB4RTM3QywgMHhFMzdDLCAweDI1MzIsDQotICAgIDB4RTM3RCwgMHhFMzdELCAweDRFOEIsIDB4RTM3RSwgMHhFMzdFLCAweDIxN0IsIDB4RTM4MCwgMHhFMzg5LCAweDRFOEMsDQotICAgIDB4RTM4QSwgMHhFMzhBLCAweDIxQUYsIDB4RTM4QiwgMHhFMzhCLCAweDRFOTYsIDB4RTM4QywgMHhFMzhDLCAweDI1MkMsDQotICAgIDB4RTM4RCwgMHhFMzhFLCAweDRFOTcsIDB4RTM4RiwgMHhFMzhGLCAweDI1MjgsIDB4RTM5MCwgMHhFMzkwLCAweDRFOTksDQotICAgIDB4RTM5MSwgMHhFMzkxLCAweDIwOEMsIDB4RTM5MiwgMHhFMzkyLCAweDRFOUEsIDB4RTM5MywgMHhFMzkzLCAweDI1MkYsDQotICAgIDB4RTM5NCwgMHhFMzk0LCAweDRFOUIsIDB4RTM5NSwgMHhFMzk1LCAweDIxQkMsIDB4RTM5NiwgMHhFMzk4LCAweDRFOUMsDQotICAgIDB4RTM5OSwgMHhFMzk5LCAweDI1MUQsIDB4RTM5QSwgMHhFMzlCLCAweDRFOUYsIDB4RTM5QywgMHhFMzlDLCAweDI1MzUsDQotICAgIDB4RTM5RCwgMHhFMzlELCAweDRFQTEsIDB4RTM5RSwgMHhFMzlFLCAweDIyMEQsIDB4RTM5RiwgMHhFMzlGLCAweDI1MjYsDQotICAgIDB4RTNBMCwgMHhFM0EwLCAweDRFQTIsIDB4RTNBMSwgMHhFM0ZFLCAweDE2NjEsIDB4RTQ0MCwgMHhFNDQwLCAweDI1MzQsDQotICAgIDB4RTQ0MSwgMHhFNDQxLCAweDI1MkEsIDB4RTQ0MiwgMHhFNDQyLCAweDI1MUYsIDB4RTQ0MywgMHhFNDQzLCAweDI1MzEsDQotICAgIDB4RTQ0NCwgMHhFNDQ0LCAweDI1MUMsIDB4RTQ0NSwgMHhFNDQ3LCAweDRFQTMsIDB4RTQ0OCwgMHhFNDQ4LCAweDI1MjUsDQotICAgIDB4RTQ0OSwgMHhFNDRELCAweDRFQTYsIDB4RTQ0RSwgMHhFNDRFLCAweDIxQ0QsIDB4RTQ0RiwgMHhFNDRGLCAweDRFQUIsDQotICAgIDB4RTQ1MCwgMHhFNDUwLCAweDIxREEsIDB4RTQ1MSwgMHhFNDUxLCAweDRFQUMsIDB4RTQ1MiwgMHhFNDUyLCAweDIxNzIsDQotICAgIDB4RTQ1MywgMHhFNDUzLCAweDI1M0UsIDB4RTQ1NCwgMHhFNDU3LCAweDRFQUQsIDB4RTQ1OCwgMHhFNDU4LCAweDIwNEYsDQotICAgIDB4RTQ1OSwgMHhFNDU5LCAweDRFQjEsIDB4RTQ1QSwgMHhFNDVBLCAweDI1NDMsIDB4RTQ1QiwgMHhFNDVCLCAweDRFQjIsDQotICAgIDB4RTQ1QywgMHhFNDVDLCAweDIxRDcsIDB4RTQ1RCwgMHhFNDVELCAweDRFQjMsIDB4RTQ1RSwgMHhFNDVFLCAweDFFM0MsDQotICAgIDB4RTQ1RiwgMHhFNDYxLCAweDRFQjQsIDB4RTQ2MiwgMHhFNDYyLCAweDI1MjksIDB4RTQ2MywgMHhFNDY0LCAweDRFQjcsDQotICAgIDB4RTQ2NSwgMHhFNDY1LCAweDI1MjEsIDB4RTQ2NiwgMHhFNDY3LCAweDRFQjksIDB4RTQ2OCwgMHhFNDY4LCAweDFFRkYsDQotICAgIDB4RTQ2OSwgMHhFNDcyLCAweDRFQkIsIDB4RTQ3MywgMHhFNDczLCAweDI1M0YsIDB4RTQ3NCwgMHhFNDc0LCAweDRFQzUsDQotICAgIDB4RTQ3NSwgMHhFNDc1LCAweDI1NDQsIDB4RTQ3NiwgMHhFNDc4LCAweDRFQzYsIDB4RTQ3OSwgMHhFNDc5LCAweDI1MjMsDQotICAgIDB4RTQ3QSwgMHhFNDdBLCAweDFFOTAsIDB4RTQ3QiwgMHhFNDdCLCAweDI1M0EsIDB4RTQ3QywgMHhFNDdDLCAweDI1NDUsDQotICAgIDB4RTQ3RCwgMHhFNDdELCAweDRFQzksIDB4RTQ3RSwgMHhFNDdFLCAweDI1M0QsIDB4RTQ4MCwgMHhFNDgwLCAweDRFQ0EsDQotICAgIDB4RTQ4MSwgMHhFNDgxLCAweDIwQzEsIDB4RTQ4MiwgMHhFNDgzLCAweDRFQ0IsIDB4RTQ4NCwgMHhFNDg0LCAweDIxMDMsDQotICAgIDB4RTQ4NSwgMHhFNDg1LCAweDI1MjAsIDB4RTQ4NiwgMHhFNDg2LCAweDI1M0MsIDB4RTQ4NywgMHhFNDg3LCAweDI1M0IsDQotICAgIDB4RTQ4OCwgMHhFNDg4LCAweDI1MzgsIDB4RTQ4OSwgMHhFNDhDLCAweDRFQ0QsIDB4RTQ4RCwgMHhFNDhELCAweDI1NDAsDQotICAgIDB4RTQ4RSwgMHhFNDhFLCAweDRFRDEsIDB4RTQ4RiwgMHhFNDhGLCAweDFGQ0QsIDB4RTQ5MCwgMHhFNDkyLCAweDRFRDIsDQotICAgIDB4RTQ5MywgMHhFNDkzLCAweDFGMTgsIDB4RTQ5NCwgMHhFNDk3LCAweDRFRDUsIDB4RTQ5OCwgMHhFNDk4LCAweDI1NEIsDQotICAgIDB4RTQ5OSwgMHhFNDlDLCAweDRFRDksIDB4RTQ5RCwgMHhFNDlELCAweDI1NDcsIDB4RTQ5RSwgMHhFNDlGLCAweDI1NEYsDQotICAgIDB4RTRBMCwgMHhFNEEwLCAweDRFREQsIDB4RTRBMSwgMHhFNEZFLCAweDE2QkYsIDB4RTU0MCwgMHhFNTQ1LCAweDRFREUsDQotICAgIDB4RTU0NiwgMHhFNTQ2LCAweDIyQjAsIDB4RTU0NywgMHhFNTQ3LCAweDRFRTQsIDB4RTU0OCwgMHhFNTQ4LCAweDI1NDYsDQotICAgIDB4RTU0OSwgMHhFNTRBLCAweDRFRTUsIDB4RTU0QiwgMHhFNTRCLCAweDI1NEMsIDB4RTU0QywgMHhFNTRELCAweDRFRTcsDQotICAgIDB4RTU0RSwgMHhFNTRFLCAweDFFOUEsIDB4RTU0RiwgMHhFNTRGLCAweDI1NTIsIDB4RTU1MCwgMHhFNTUwLCAweDI1MzAsDQotICAgIDB4RTU1MSwgMHhFNTUxLCAweDI1NDksIDB4RTU1MiwgMHhFNTU0LCAweDRFRTksIDB4RTU1NSwgMHhFNTU1LCAweDI1NTEsDQotICAgIDB4RTU1NiwgMHhFNTU2LCAweDFFQ0EsIDB4RTU1NywgMHhFNTU3LCAweDRFRUMsIDB4RTU1OCwgMHhFNTU4LCAweDIwRDIsDQotICAgIDB4RTU1OSwgMHhFNTVCLCAweDRFRUQsIDB4RTU1QywgMHhFNTVDLCAweDFGQjgsIDB4RTU1RCwgMHhFNTVELCAweDRFRjAsDQotICAgIDB4RTU1RSwgMHhFNTVFLCAweDIwNzksIDB4RTU1RiwgMHhFNTYwLCAweDRFRjEsIDB4RTU2MSwgMHhFNTYxLCAweDIxQUIsDQotICAgIDB4RTU2MiwgMHhFNTYzLCAweDRFRjMsIDB4RTU2NCwgMHhFNTY0LCAweDI1NEQsIDB4RTU2NSwgMHhFNTY1LCAweDFFQTUsDQotICAgIDB4RTU2NiwgMHhFNTY3LCAweDRFRjUsIDB4RTU2OCwgMHhFNTY4LCAweDIwNEMsIDB4RTU2OSwgMHhFNTY5LCAweDIwODAsDQotICAgIDB4RTU2QSwgMHhFNTZCLCAweDRFRjcsIDB4RTU2QywgMHhFNTZDLCAweDI2NkQsIDB4RTU2RCwgMHhFNTZELCAweDRFRjksDQotICAgIDB4RTU2RSwgMHhFNTZFLCAweDI1MzcsIDB4RTU2RiwgMHhFNTc0LCAweDRFRkEsIDB4RTU3NSwgMHhFNTc1LCAweDI1NEEsDQotICAgIDB4RTU3NiwgMHhFNTc2LCAweDIxQjgsIDB4RTU3NywgMHhFNTc3LCAweDRGMDAsIDB4RTU3OCwgMHhFNTc4LCAweDI1NEUsDQotICAgIDB4RTU3OSwgMHhFNTdBLCAweDRGMDEsIDB4RTU3QiwgMHhFNTdCLCAweDI0RkMsIDB4RTU3QywgMHhFNTdDLCAweDI1NTQsDQotICAgIDB4RTU3RCwgMHhFNTdFLCAweDRGMDMsIDB4RTU4MCwgMHhFNTgwLCAweDRGMDUsIDB4RTU4MSwgMHhFNTgxLCAweDFGM0MsDQotICAgIDB4RTU4MiwgMHhFNTgyLCAweDRGMDYsIDB4RTU4MywgMHhFNTgzLCAweDFFRDUsIDB4RTU4NCwgMHhFNTg5LCAweDRGMDcsDQotICAgIDB4RTU4QSwgMHhFNThBLCAweDI1NTYsIDB4RTU4QiwgMHhFNThELCAweDRGMEQsIDB4RTU4RSwgMHhFNThFLCAweDIyNjgsDQotICAgIDB4RTU4RiwgMHhFNTkwLCAweDRGMTAsIDB4RTU5MSwgMHhFNTkxLCAweDFFRDYsIDB4RTU5MiwgMHhFNTk5LCAweDRGMTIsDQotICAgIDB4RTU5QSwgMHhFNTlBLCAweDI1NTcsIDB4RTU5QiwgMHhFNTlCLCAweDI1NTMsIDB4RTU5QywgMHhFNTlFLCAweDRGMUEsDQotICAgIDB4RTU5RiwgMHhFNTlGLCAweDI1NDgsIDB4RTVBMCwgMHhFNUEwLCAweDRGMUQsIDB4RTVBMSwgMHhFNUZFLCAweDE3MUQsDQotICAgIDB4RTY0MCwgMHhFNjQwLCAweDIwREMsIDB4RTY0MSwgMHhFNjQzLCAweDRGMUUsIDB4RTY0NCwgMHhFNjQ0LCAweDI1NTksDQotICAgIDB4RTY0NSwgMHhFNjQ4LCAweDRGMjEsIDB4RTY0OSwgMHhFNjQ5LCAweDFGOTcsIDB4RTY0QSwgMHhFNjRBLCAweDI1NTUsDQotICAgIDB4RTY0QiwgMHhFNjRELCAweDRGMjUsIDB4RTY0RSwgMHhFNjRFLCAweDIyN0QsIDB4RTY0RiwgMHhFNjUxLCAweDRGMjgsDQotICAgIDB4RTY1MiwgMHhFNjUyLCAweDI1N0UsIDB4RTY1MywgMHhFNjU1LCAweDRGMkIsIDB4RTY1NiwgMHhFNjU2LCAweDIwN0MsDQotICAgIDB4RTY1NywgMHhFNjU3LCAweDRGMkUsIDB4RTY1OCwgMHhFNjU4LCAweDI1NUEsIDB4RTY1OSwgMHhFNjVBLCAweDRGMkYsDQotICAgIDB4RTY1QiwgMHhFNjVCLCAweDI1NUUsIDB4RTY1QywgMHhFNjVELCAweDRGMzEsIDB4RTY1RSwgMHhFNjVFLCAweDFFMzQsDQotICAgIDB4RTY1RiwgMHhFNjY4LCAweDRGMzMsIDB4RTY2OSwgMHhFNjY5LCAweDIxNUUsIDB4RTY2QSwgMHhFNjZBLCAweDRGM0QsDQotICAgIDB4RTY2QiwgMHhFNjZCLCAweDI1NjAsIDB4RTY2QywgMHhFNjc0LCAweDRGM0UsIDB4RTY3NSwgMHhFNjc1LCAweDIxQTIsDQotICAgIDB4RTY3NiwgMHhFNjc2LCAweDIzNTQsIDB4RTY3NywgMHhFNjc4LCAweDRGNDcsIDB4RTY3OSwgMHhFNjc5LCAweDI1NjMsDQotICAgIDB4RTY3QSwgMHhFNjdBLCAweDI1MjcsIDB4RTY3QiwgMHhFNjdCLCAweDRGNDksIDB4RTY3QywgMHhFNjdDLCAweDI1MkUsDQotICAgIDB4RTY3RCwgMHhFNjdELCAweDI1NTgsIDB4RTY3RSwgMHhFNjdFLCAweDRGNEEsIDB4RTY4MCwgMHhFNjgwLCAweDFGMUIsDQotICAgIDB4RTY4MSwgMHhFNjgxLCAweDRGNEIsIDB4RTY4MiwgMHhFNjgyLCAweDIyODMsIDB4RTY4MywgMHhFNjgzLCAweDRGNEMsDQotICAgIDB4RTY4NCwgMHhFNjg0LCAweDI1NjQsIDB4RTY4NSwgMHhFNjg2LCAweDRGNEQsIDB4RTY4NywgMHhFNjg3LCAweDIwQTAsDQotICAgIDB4RTY4OCwgMHhFNjg4LCAweDRGNEYsIDB4RTY4OSwgMHhFNjg5LCAweDI1NjUsIDB4RTY4QSwgMHhFNjhCLCAweDRGNTAsDQotICAgIDB4RTY4QywgMHhFNjhDLCAweDI1NjEsIDB4RTY4RCwgMHhFNjkyLCAweDRGNTIsIDB4RTY5MywgMHhFNjkzLCAweDI1NjIsDQotICAgIDB4RTY5NCwgMHhFNjk2LCAweDRGNTgsIDB4RTY5NywgMHhFNjk3LCAweDI1NkMsIDB4RTY5OCwgMHhFNjlBLCAweDRGNUIsDQotICAgIDB4RTY5QiwgMHhFNjlCLCAweDI1NkQsIDB4RTY5QywgMHhFNjlDLCAweDIwMjAsIDB4RTY5RCwgMHhFNjlFLCAweDRGNUUsDQotICAgIDB4RTY5RiwgMHhFNjlGLCAweDI1NUYsIDB4RTZBMCwgMHhFNkEwLCAweDI1NkEsIDB4RTZBMSwgMHhFNkZFLCAweDE3N0IsDQotICAgIDB4RTc0MCwgMHhFNzQyLCAweDRGNjAsIDB4RTc0MywgMHhFNzQzLCAweDI1NkUsIDB4RTc0NCwgMHhFNzQ3LCAweDRGNjMsDQotICAgIDB4RTc0OCwgMHhFNzQ4LCAweDI1MzksIDB4RTc0OSwgMHhFNzQ5LCAweDI1NUMsIDB4RTc0QSwgMHhFNzRDLCAweDRGNjcsDQotICAgIDB4RTc0RCwgMHhFNzRFLCAweDI1NjgsIDB4RTc0RiwgMHhFNzRGLCAweDI1NkIsIDB4RTc1MCwgMHhFNzUwLCAweDFFNkYsDQotICAgIDB4RTc1MSwgMHhFNzUxLCAweDRGNkEsIDB4RTc1MiwgMHhFNzUyLCAweDFGQzQsIDB4RTc1MywgMHhFNzUzLCAweDI1NjcsDQotICAgIDB4RTc1NCwgMHhFNzU0LCAweDRGNkIsIDB4RTc1NSwgMHhFNzU1LCAweDI1NUIsIDB4RTc1NiwgMHhFNzU4LCAweDRGNkMsDQotICAgIDB4RTc1OSwgMHhFNzU5LCAweDI2MUQsIDB4RTc1QSwgMHhFNzY1LCAweDRGNkYsIDB4RTc2NiwgMHhFNzY2LCAweDI1MkIsDQotICAgIDB4RTc2NywgMHhFNzY3LCAweDRGN0IsIDB4RTc2OCwgMHhFNzY4LCAweDI1NzEsIDB4RTc2OSwgMHhFNzY5LCAweDRGN0MsDQotICAgIDB4RTc2QSwgMHhFNzZBLCAweDI1NzcsIDB4RTc2QiwgMHhFNzczLCAweDRGN0QsIDB4RTc3NCwgMHhFNzc0LCAweDI1MjIsDQotICAgIDB4RTc3NSwgMHhFNzdCLCAweDRGODYsIDB4RTc3QywgMHhFNzdDLCAweDI1MzMsIDB4RTc3RCwgMHhFNzdFLCAweDRGOEQsDQotICAgIDB4RTc4MCwgMHhFNzgxLCAweDRGOEYsIDB4RTc4MiwgMHhFNzgyLCAweDIwMkEsIDB4RTc4MywgMHhFNzgzLCAweDRGOTEsDQotICAgIDB4RTc4NCwgMHhFNzg0LCAweDI1MzYsIDB4RTc4NSwgMHhFNzg1LCAweDI1NzMsIDB4RTc4NiwgMHhFNzg2LCAweDI1NkYsDQotICAgIDB4RTc4NywgMHhFNzg5LCAweDRGOTIsIDB4RTc4QSwgMHhFNzhBLCAweDIyOTMsIDB4RTc4QiwgMHhFNzhCLCAweDI1NzgsDQotICAgIDB4RTc4QywgMHhFNzhFLCAweDRGOTUsIDB4RTc4RiwgMHhFNzhGLCAweDI1NzAsIDB4RTc5MCwgMHhFNzkxLCAweDRGOTgsDQotICAgIDB4RTc5MiwgMHhFNzkyLCAweDI1NzUsIDB4RTc5MywgMHhFNzk3LCAweDRGOUEsIDB4RTc5OCwgMHhFNzk5LCAweDI1NDEsDQotICAgIDB4RTc5QSwgMHhFNzlBLCAweDI1NUQsIDB4RTc5QiwgMHhFNzlGLCAweDRGOUYsIDB4RTdBMCwgMHhFN0EwLCAweDIwMUEsDQotICAgIDB4RTdBMSwgMHhFN0ZFLCAweDE3RDksIDB4RTg0MCwgMHhFODQyLCAweDRGQTQsIDB4RTg0MywgMHhFODQzLCAweDI1N0EsDQotICAgIDB4RTg0NCwgMHhFODQ0LCAweDIwMDYsIDB4RTg0NSwgMHhFODQ1LCAweDRGQTcsIDB4RTg0NiwgMHhFODQ2LCAweDIxNzcsDQotICAgIDB4RTg0NywgMHhFODQ4LCAweDRGQTgsIDB4RTg0OSwgMHhFODQ5LCAweDI1MUIsIDB4RTg0QSwgMHhFODRBLCAweDRGQUEsDQotICAgIDB4RTg0QiwgMHhFODRCLCAweDI1MjQsIDB4RTg0QywgMHhFODRFLCAweDRGQUIsIDB4RTg0RiwgMHhFODRGLCAweDI1N0IsDQotICAgIDB4RTg1MCwgMHhFODUzLCAweDRGQUUsIDB4RTg1NCwgMHhFODU0LCAweDIyQTMsIDB4RTg1NSwgMHhFODU5LCAweDRGQjIsDQotICAgIDB4RTg1QSwgMHhFODVBLCAweDI1NzksIDB4RTg1QiwgMHhFODVCLCAweDRGQjcsIDB4RTg1QywgMHhFODVDLCAweDI1NjYsDQotICAgIDB4RTg1RCwgMHhFODYxLCAweDRGQjgsIDB4RTg2MiwgMHhFODYyLCAweDFGOTMsIDB4RTg2MywgMHhFODYzLCAweDRGQkQsDQotICAgIDB4RTg2NCwgMHhFODY0LCAweDI1N0MsIDB4RTg2NSwgMHhFODZGLCAweDRGQkUsIDB4RTg3MCwgMHhFODcwLCAweDI1MTQsDQotICAgIDB4RTg3MSwgMHhFODcyLCAweDRGQzksIDB4RTg3MywgMHhFODczLCAweDI1N0QsIDB4RTg3NCwgMHhFODc0LCAweDRGQ0IsDQotICAgIDB4RTg3NSwgMHhFODc1LCAweDI1NzIsIDB4RTg3NiwgMHhFODdCLCAweDRGQ0MsIDB4RTg3QywgMHhFODdDLCAweDI1NzQsDQotICAgIDB4RTg3RCwgMHhFODdFLCAweDRGRDIsIDB4RTg4MCwgMHhFODgwLCAweDIyNEUsIDB4RTg4MSwgMHhFODgxLCAweDRGRDQsDQotICAgIDB4RTg4MiwgMHhFODgyLCAweDIxQzYsIDB4RTg4MywgMHhFODg2LCAweDRGRDUsIDB4RTg4NywgMHhFODg3LCAweDIwOUYsDQotICAgIDB4RTg4OCwgMHhFODg4LCAweDRGRDksIDB4RTg4OSwgMHhFODg5LCAweDI1NzYsIDB4RTg4QSwgMHhFODhCLCAweDRGREEsDQotICAgIDB4RTg4QywgMHhFODhDLCAweDIwNjQsIDB4RTg4RCwgMHhFODhELCAweDIyQkYsIDB4RTg4RSwgMHhFODhFLCAweDI2MUMsDQotICAgIDB4RTg4RiwgMHhFODhGLCAweDIyNUUsIDB4RTg5MCwgMHhFOEEwLCAweDRGREMsIDB4RThBMSwgMHhFOEZFLCAweDE4MzcsDQotICAgIDB4RTk0MCwgMHhFOTRCLCAweDRGRUQsIDB4RTk0QywgMHhFOTRDLCAweDFFNzUsIDB4RTk0RCwgMHhFOTUzLCAweDRGRjksDQotICAgIDB4RTk1NCwgMHhFOTU0LCAweDIwN0QsIDB4RTk1NSwgMHhFOTU1LCAweDUwMDAsIDB4RTk1NiwgMHhFOTU2LCAweDIzQkYsDQotICAgIDB4RTk1NywgMHhFOTU3LCAweDIxMTMsIDB4RTk1OCwgMHhFOTU5LCAweDUwMDEsIDB4RTk1QSwgMHhFOTVBLCAweDIzQzAsDQotICAgIDB4RTk1QiwgMHhFOTVDLCAweDUwMDMsIDB4RTk1RCwgMHhFOTVELCAweDFFNDUsIDB4RTk1RSwgMHhFOTVFLCAweDUwMDUsDQotICAgIDB4RTk1RiwgMHhFOTVGLCAweDFGRDgsIDB4RTk2MCwgMHhFOTYwLCAweDIzQzQsIDB4RTk2MSwgMHhFOTYxLCAweDUwMDYsDQotICAgIDB4RTk2MiwgMHhFOTYyLCAweDIzQzIsIDB4RTk2MywgMHhFOTYzLCAweDIxMDQsIDB4RTk2NCwgMHhFOTY0LCAweDUwMDcsDQotICAgIDB4RTk2NSwgMHhFOTY1LCAweDIxQkQsIDB4RTk2NiwgMHhFOTY2LCAweDUwMDgsIDB4RTk2NywgMHhFOTY3LCAweDFGODcsDQotICAgIDB4RTk2OCwgMHhFOTY4LCAweDIzQzMsIDB4RTk2OSwgMHhFOTZCLCAweDUwMDksIDB4RTk2QywgMHhFOTZDLCAweDIyNjksDQotICAgIDB4RTk2RCwgMHhFOTc0LCAweDUwMEMsIDB4RTk3NSwgMHhFOTc1LCAweDFGNDMsIDB4RTk3NiwgMHhFOTc2LCAweDUwMTQsDQotICAgIDB4RTk3NywgMHhFOTc3LCAweDFGMUUsIDB4RTk3OCwgMHhFOTc4LCAweDI2NzksIDB4RTk3OSwgMHhFOTc5LCAweDFFRUIsDQotICAgIDB4RTk3QSwgMHhFOTdCLCAweDUwMTUsIDB4RTk3QywgMHhFOTdDLCAweDFGMzUsIDB4RTk3RCwgMHhFOTdELCAweDIwOEEsDQotICAgIDB4RTk3RSwgMHhFOTdFLCAweDUwMTcsIDB4RTk4MCwgMHhFOTgwLCAweDIzQzcsIDB4RTk4MSwgMHhFOTgxLCAweDIzQzksDQotICAgIDB4RTk4MiwgMHhFOTgyLCAweDIzQzYsIDB4RTk4MywgMHhFOTg2LCAweDUwMTgsIDB4RTk4NywgMHhFOTg3LCAweDIyNEYsDQotICAgIDB4RTk4OCwgMHhFOThBLCAweDUwMUMsIDB4RTk4QiwgMHhFOThCLCAweDIzQ0IsIDB4RTk4QywgMHhFOThELCAweDUwMUYsDQotICAgIDB4RTk4RSwgMHhFOThFLCAweDIxRjMsIDB4RTk4RiwgMHhFOThGLCAweDUwMjEsIDB4RTk5MCwgMHhFOTkwLCAweDIxRjcsDQotICAgIDB4RTk5MSwgMHhFOTkxLCAweDIzQ0YsIDB4RTk5MiwgMHhFOTkyLCAweDIzQ0UsIDB4RTk5MywgMHhFOTkzLCAweDIzQ0EsDQotICAgIDB4RTk5NCwgMHhFOTk0LCAweDIzQ0QsIDB4RTk5NSwgMHhFOTk3LCAweDUwMjIsIDB4RTk5OCwgMHhFOTk4LCAweDIzRDAsDQotICAgIDB4RTk5OSwgMHhFOTlBLCAweDUwMjUsIDB4RTk5QiwgMHhFOTlCLCAweDI2NkMsIDB4RTk5QywgMHhFOTlDLCAweDUwMjcsDQotICAgIDB4RTk5RCwgMHhFOTlELCAweDIzQzEsIDB4RTk5RSwgMHhFOTlFLCAweDUwMjgsIDB4RTk5RiwgMHhFOTlGLCAweDFGRUUsDQotICAgIDB4RTlBMCwgMHhFOUEwLCAweDIzRDEsIDB4RTlBMSwgMHhFOUZFLCAweDE4OTUsIDB4RUE0MCwgMHhFQTQwLCAweDFGRjgsDQotICAgIDB4RUE0MSwgMHhFQTQzLCAweDUwMjksIDB4RUE0NCwgMHhFQTQ0LCAweDIzRDMsIDB4RUE0NSwgMHhFQTQ3LCAweDUwMkMsDQotICAgIDB4RUE0OCwgMHhFQTQ4LCAweDIzRDIsIDB4RUE0OSwgMHhFQTQ5LCAweDIzRDQsIDB4RUE0QSwgMHhFQTRBLCAweDFFOTgsDQotICAgIDB4RUE0QiwgMHhFQTRGLCAweDUwMkYsIDB4RUE1MCwgMHhFQTUwLCAweDFGMkMsIDB4RUE1MSwgMHhFQTUxLCAweDUwMzQsDQotICAgIDB4RUE1MiwgMHhFQTUyLCAweDIzRDUsIDB4RUE1MywgMHhFQTU0LCAweDUwMzUsIDB4RUE1NSwgMHhFQTU1LCAweDFFNzEsDQotICAgIDB4RUE1NiwgMHhFQTU2LCAweDI2OTEsIDB4RUE1NywgMHhFQTU4LCAweDUwMzcsIDB4RUE1OSwgMHhFQTU5LCAweDIzQzUsDQotICAgIDB4RUE1QSwgMHhFQTdFLCAweDUwMzksIDB4RUE4MCwgMHhFQTgwLCAweDIzMUEsIDB4RUE4MSwgMHhFQTgzLCAweDUwNUUsDQotICAgIDB4RUE4NCwgMHhFQTg0LCAweDIxMTQsIDB4RUE4NSwgMHhFQTg2LCAweDUwNjEsIDB4RUE4NywgMHhFQTg3LCAweDIyODQsDQotICAgIDB4RUE4OCwgMHhFQThELCAweDUwNjMsIDB4RUE4RSwgMHhFQThFLCAweDIyMUMsIDB4RUE4RiwgMHhFQThGLCAweDUwNjksDQotICAgIDB4RUE5MCwgMHhFQTkwLCAweDFFN0UsIDB4RUE5MSwgMHhFQTkxLCAweDIwNEQsIDB4RUE5MiwgMHhFQTk1LCAweDUwNkEsDQotICAgIDB4RUE5NiwgMHhFQTk2LCAweDIyMDEsIDB4RUE5NywgMHhFQTlGLCAweDUwNkUsIDB4RUFBMCwgMHhFQUEwLCAweDFFRDksDQotICAgIDB4RUFBMSwgMHhFQUZFLCAweDE4RjMsIDB4RUI0MCwgMHhFQjQwLCAweDUwNzcsIDB4RUI0MSwgMHhFQjQxLCAweDFGQjIsDQotICAgIDB4RUI0MiwgMHhFQjQ0LCAweDUwNzgsIDB4RUI0NSwgMHhFQjQ1LCAweDIyNTIsIDB4RUI0NiwgMHhFQjQ3LCAweDUwN0IsDQotICAgIDB4RUI0OCwgMHhFQjQ4LCAweDFGNzksIDB4RUI0OSwgMHhFQjUyLCAweDUwN0QsIDB4RUI1MywgMHhFQjUzLCAweDIxNTcsDQotICAgIDB4RUI1NCwgMHhFQjU0LCAweDUwODcsIDB4RUI1NSwgMHhFQjU1LCAweDIxQkYsIDB4RUI1NiwgMHhFQjVBLCAweDUwODgsDQotICAgIDB4RUI1QiwgMHhFQjVCLCAweDIyMUYsIDB4RUI1QywgMHhFQjVDLCAweDUwOEQsIDB4RUI1RCwgMHhFQjVELCAweDIwM0QsDQotICAgIDB4RUI1RSwgMHhFQjVGLCAweDUwOEUsIDB4RUI2MCwgMHhFQjYwLCAweDIwMTUsIDB4RUI2MSwgMHhFQjYxLCAweDUwOTAsDQotICAgIDB4RUI2MiwgMHhFQjYyLCAweDI2QTUsIDB4RUI2MywgMHhFQjZDLCAweDUwOTEsIDB4RUI2RCwgMHhFQjZELCAweDIxNTYsDQotICAgIDB4RUI2RSwgMHhFQjZGLCAweDUwOUIsIDB4RUI3MCwgMHhFQjcwLCAweDIxNDQsIDB4RUI3MSwgMHhFQjcxLCAweDUwOUQsDQotICAgIDB4RUI3MiwgMHhFQjcyLCAweDFFOTEsIDB4RUI3MywgMHhFQjczLCAweDIyNTcsIDB4RUI3NCwgMHhFQjc3LCAweDUwOUUsDQotICAgIDB4RUI3OCwgMHhFQjc4LCAweDIwMEEsIDB4RUI3OSwgMHhFQjc5LCAweDIwOTIsIDB4RUI3QSwgMHhFQjdFLCAweDUwQTIsDQotICAgIDB4RUI4MCwgMHhFQjg0LCAweDUwQTcsIDB4RUI4NSwgMHhFQjg1LCAweDIyNTAsIDB4RUI4NiwgMHhFQjg5LCAweDUwQUMsDQotICAgIDB4RUI4QSwgMHhFQjhBLCAweDFFQzMsIDB4RUI4QiwgMHhFQkEwLCAweDUwQjAsIDB4RUJBMSwgMHhFQkZFLCAweDE5NTEsDQotICAgIDB4RUM0MCwgMHhFQzQ1LCAweDUwQzYsIDB4RUM0NiwgMHhFQzQ2LCAweDIxQTgsIDB4RUM0NywgMHhFQzU1LCAweDUwQ0MsDQotICAgIDB4RUM1NiwgMHhFQzU2LCAweDI2MEQsIDB4RUM1NywgMHhFQzU5LCAweDUwREIsIDB4RUM1QSwgMHhFQzVBLCAweDI2MEMsDQotICAgIDB4RUM1QiwgMHhFQzVCLCAweDUwREUsIDB4RUM1QywgMHhFQzVDLCAweDI2MEUsIDB4RUM1RCwgMHhFQzVGLCAweDUwREYsDQotICAgIDB4RUM2MCwgMHhFQzYwLCAweDIwMzIsIDB4RUM2MSwgMHhFQzZELCAweDUwRTIsIDB4RUM2RSwgMHhFQzZFLCAweDI2MEIsDQotICAgIDB4RUM2RiwgMHhFQzc1LCAweDUwRUYsIDB4RUM3NiwgMHhFQzc2LCAweDIyQzMsIDB4RUM3NywgMHhFQzdFLCAweDUwRjYsDQotICAgIDB4RUM4MCwgMHhFQzk1LCAweDUwRkUsIDB4RUM5NiwgMHhFQzk2LCAweDFGMjMsIDB4RUM5NywgMHhFQ0EwLCAweDUxMTQsDQotICAgIDB4RUNBMSwgMHhFQ0ZFLCAweDE5QUYsIDB4RUQ0MCwgMHhFRDQ1LCAweDUxMUUsIDB4RUQ0NiwgMHhFRDQ2LCAweDI2OTUsDQotICAgIDB4RUQ0NywgMHhFRDU3LCAweDUxMjQsIDB4RUQ1OCwgMHhFRDU4LCAweDI2NUUsIDB4RUQ1OSwgMHhFRDVELCAweDUxMzUsDQotICAgIDB4RUQ1RSwgMHhFRDVFLCAweDI2NUQsIDB4RUQ1RiwgMHhFRDYwLCAweDUxM0EsIDB4RUQ2MSwgMHhFRDYxLCAweDI2OTIsDQotICAgIDB4RUQ2MiwgMHhFRDYzLCAweDUxM0MsIDB4RUQ2NCwgMHhFRDY0LCAweDI2NUYsIDB4RUQ2NSwgMHhFRDY1LCAweDUxM0UsDQotICAgIDB4RUQ2NiwgMHhFRDY2LCAweDIxOEQsIDB4RUQ2NywgMHhFRDY3LCAweDIwRkQsIDB4RUQ2OCwgMHhFRDZELCAweDUxM0YsDQotICAgIDB4RUQ2RSwgMHhFRDZFLCAweDFGNDAsIDB4RUQ2RiwgMHhFRDczLCAweDUxNDUsIDB4RUQ3NCwgMHhFRDc0LCAweDI0NjUsDQotICAgIDB4RUQ3NSwgMHhFRDc2LCAweDUxNEEsIDB4RUQ3NywgMHhFRDc3LCAweDI0NjcsIDB4RUQ3OCwgMHhFRDc4LCAweDUxNEMsDQotICAgIDB4RUQ3OSwgMHhFRDc5LCAweDI0NjYsIDB4RUQ3QSwgMHhFRDdFLCAweDUxNEQsIDB4RUQ4MCwgMHhFRDkwLCAweDUxNTIsDQotICAgIDB4RUQ5MSwgMHhFRDkxLCAweDIxQzksIDB4RUQ5MiwgMHhFRDkyLCAweDUxNjMsIDB4RUQ5MywgMHhFRDkzLCAweDIyMDksDQotICAgIDB4RUQ5NCwgMHhFRDk0LCAweDFFQzksIDB4RUQ5NSwgMHhFRDk1LCAweDIwRTksIDB4RUQ5NiwgMHhFRDk2LCAweDUxNjQsDQotICAgIDB4RUQ5NywgMHhFRDk3LCAweDIxQ0EsIDB4RUQ5OCwgMHhFRDk4LCAweDIxNDYsIDB4RUQ5OSwgMHhFRDk5LCAweDI1QzUsDQotICAgIDB4RUQ5QSwgMHhFRDlBLCAweDIxREMsIDB4RUQ5QiwgMHhFRDlCLCAweDUxNjUsIDB4RUQ5QywgMHhFRDlDLCAweDI0NUUsDQotICAgIDB4RUQ5RCwgMHhFRDlELCAweDUxNjYsIDB4RUQ5RSwgMHhFRDlFLCAweDIxNEYsIDB4RUQ5RiwgMHhFRDlGLCAweDUxNjcsDQotICAgIDB4RURBMCwgMHhFREEwLCAweDI1QzYsIDB4RURBMSwgMHhFREZFLCAweDFBMEQsIDB4RUU0MCwgMHhFRTQwLCAweDI1QzcsDQotICAgIDB4RUU0MSwgMHhFRTQxLCAweDIyNDEsIDB4RUU0MiwgMHhFRTQyLCAweDIxOEEsIDB4RUU0MywgMHhFRTQzLCAweDFFMkYsDQotICAgIDB4RUU0NCwgMHhFRTQ0LCAweDFFREMsIDB4RUU0NSwgMHhFRTQ3LCAweDUxNjgsIDB4RUU0OCwgMHhFRTQ4LCAweDIwQkYsDQotICAgIDB4RUU0OSwgMHhFRTQ5LCAweDIwMzQsIDB4RUU0QSwgMHhFRTRDLCAweDUxNkIsIDB4RUU0RCwgMHhFRTRELCAweDI1QzksDQotICAgIDB4RUU0RSwgMHhFRTUxLCAweDUxNkUsIDB4RUU1MiwgMHhFRTUyLCAweDI1QzgsIDB4RUU1MywgMHhFRTU0LCAweDUxNzIsDQotICAgIDB4RUU1NSwgMHhFRTU1LCAweDIyMEUsIDB4RUU1NiwgMHhFRTU2LCAweDUxNzQsIDB4RUU1NywgMHhFRTU3LCAweDI1Q0IsDQotICAgIDB4RUU1OCwgMHhFRTVELCAweDUxNzUsIDB4RUU1RSwgMHhFRTVFLCAweDIxN0QsIDB4RUU1RiwgMHhFRTYwLCAweDUxN0IsDQotICAgIDB4RUU2MSwgMHhFRTYxLCAweDFGN0UsIDB4RUU2MiwgMHhFRTY3LCAweDUxN0QsIDB4RUU2OCwgMHhFRTY4LCAweDI1Q0MsDQotICAgIDB4RUU2OSwgMHhFRTY5LCAweDFGQzMsIDB4RUU2QSwgMHhFRTZCLCAweDUxODMsIDB4RUU2QywgMHhFRTZDLCAweDIwQjksDQotICAgIDB4RUU2RCwgMHhFRTZELCAweDUxODUsIDB4RUU2RSwgMHhFRTZFLCAweDIxODEsIDB4RUU2RiwgMHhFRTc2LCAweDUxODYsDQotICAgIDB4RUU3NywgMHhFRTc3LCAweDFGREEsIDB4RUU3OCwgMHhFRTdDLCAweDUxOEUsIDB4RUU3RCwgMHhFRTdELCAweDIxNzMsDQotICAgIDB4RUU3RSwgMHhFRTdFLCAweDFFRTEsIDB4RUU4MCwgMHhFRTgwLCAweDI1Q0QsIDB4RUU4MSwgMHhFRTg0LCAweDUxOTMsDQotICAgIDB4RUU4NSwgMHhFRTg1LCAweDI1Q0UsIDB4RUU4NiwgMHhFRTg2LCAweDIxRjYsIDB4RUU4NywgMHhFRTg5LCAweDUxOTcsDQotICAgIDB4RUU4QSwgMHhFRThBLCAweDIyNEIsIDB4RUU4QiwgMHhFRThCLCAweDI1RDEsIDB4RUU4QywgMHhFRThDLCAweDUxOUEsDQotICAgIDB4RUU4RCwgMHhFRThELCAweDFFQzAsIDB4RUU4RSwgMHhFRThGLCAweDUxOUIsIDB4RUU5MCwgMHhFRTkwLCAweDIwMDgsDQotICAgIDB4RUU5MSwgMHhFRTkzLCAweDUxOUQsIDB4RUU5NCwgMHhFRTk0LCAweDI1RDAsIDB4RUU5NSwgMHhFRTk2LCAweDUxQTAsDQotICAgIDB4RUU5NywgMHhFRTk3LCAweDI1RDIsIDB4RUU5OCwgMHhFRTk4LCAweDUxQTIsIDB4RUU5OSwgMHhFRTk5LCAweDFGMkEsDQotICAgIDB4RUU5QSwgMHhFRTlDLCAweDUxQTMsIDB4RUU5RCwgMHhFRTlELCAweDFFNzIsIDB4RUU5RSwgMHhFRTlFLCAweDI1RDMsDQotICAgIDB4RUU5RiwgMHhFRUEwLCAweDUxQTYsIDB4RUVBMSwgMHhFRUZFLCAweDFBNkIsIDB4RUY0MCwgMHhFRjQwLCAweDIxQkUsDQotICAgIDB4RUY0MSwgMHhFRjQxLCAweDI1RDQsIDB4RUY0MiwgMHhFRjQyLCAweDIwNDQsIDB4RUY0MywgMHhFRjQzLCAweDUxQTgsDQotICAgIDB4RUY0NCwgMHhFRjQ0LCAweDI1Q0YsIDB4RUY0NSwgMHhFRjQ1LCAweDIwRjMsIDB4RUY0NiwgMHhFRjRCLCAweDUxQTksDQotICAgIDB4RUY0QywgMHhFRjRDLCAweDFGMDAsIDB4RUY0RCwgMHhFRjUxLCAweDUxQUYsIDB4RUY1MiwgMHhFRjUzLCAweDI0Q0MsDQotICAgIDB4RUY1NCwgMHhFRjU0LCAweDUxQjQsIDB4RUY1NSwgMHhFRjU1LCAweDI2OTgsIDB4RUY1NiwgMHhFRjU2LCAweDUxQjUsDQotICAgIDB4RUY1NywgMHhFRjU3LCAweDI2NzgsIDB4RUY1OCwgMHhFRjU5LCAweDUxQjYsIDB4RUY1QSwgMHhFRjVBLCAweDI0Q0UsDQotICAgIDB4RUY1QiwgMHhFRjVGLCAweDUxQjgsIDB4RUY2MCwgMHhFRjYwLCAweDI0Q0YsIDB4RUY2MSwgMHhFRjY3LCAweDUxQkQsDQotICAgIDB4RUY2OCwgMHhFRjY4LCAweDIwQjgsIDB4RUY2OSwgMHhFRjY5LCAweDUxQzQsIDB4RUY2QSwgMHhFRjZBLCAweDI0RDAsDQotICAgIDB4RUY2QiwgMHhFRjZCLCAweDUxQzUsIDB4RUY2QywgMHhFRjZDLCAweDI0RDEsIDB4RUY2RCwgMHhFRjc2LCAweDUxQzYsDQotICAgIDB4RUY3NywgMHhFRjc3LCAweDFFRjQsIDB4RUY3OCwgMHhFRjc5LCAweDUxRDAsIDB4RUY3QSwgMHhFRjdBLCAweDIzOUIsDQotICAgIDB4RUY3QiwgMHhFRjdCLCAweDUxRDIsIDB4RUY3QywgMHhFRjdDLCAweDI2N0UsIDB4RUY3RCwgMHhFRjdFLCAweDUxRDMsDQotICAgIDB4RUY4MCwgMHhFRjgxLCAweDUxRDUsIDB4RUY4MiwgMHhFRjgyLCAweDIzOUQsIDB4RUY4MywgMHhFRjg0LCAweDIzOUYsDQotICAgIDB4RUY4NSwgMHhFRjg1LCAweDUxRDcsIDB4RUY4NiwgMHhFRjg2LCAweDIzQTEsIDB4RUY4NywgMHhFRjg3LCAweDUxRDgsDQotICAgIDB4RUY4OCwgMHhFRjg4LCAweDFFRjEsIDB4RUY4OSwgMHhFRjhBLCAweDUxRDksIDB4RUY4QiwgMHhFRjhCLCAweDIyMUUsDQotICAgIDB4RUY4QywgMHhFRjhDLCAweDUxREIsIDB4RUY4RCwgMHhFRjhELCAweDIzQTIsIDB4RUY4RSwgMHhFRjk0LCAweDUxREMsDQotICAgIDB4RUY5NSwgMHhFRjk1LCAweDIxNEIsIDB4RUY5NiwgMHhFRjk2LCAweDFFMzYsIDB4RUY5NywgMHhFRjk3LCAweDIxMzUsDQotICAgIDB4RUY5OCwgMHhFRjlCLCAweDUxRTMsIDB4RUY5QywgMHhFRjlDLCAweDFGQUQsIDB4RUY5RCwgMHhFRjlELCAweDUxRTcsDQotICAgIDB4RUY5RSwgMHhFRjlFLCAweDFFNTMsIDB4RUY5RiwgMHhFRkEwLCAweDUxRTgsIDB4RUZBMSwgMHhFRkZFLCAweDFBQzksDQotICAgIDB4RjA0MCwgMHhGMDQwLCAweDUxRUEsIDB4RjA0MSwgMHhGMDQxLCAweDIzQTMsIDB4RjA0MiwgMHhGMDQyLCAweDIyMDMsDQotICAgIDB4RjA0MywgMHhGMDQzLCAweDUxRUIsIDB4RjA0NCwgMHhGMDQ0LCAweDFFRTcsIDB4RjA0NSwgMHhGMDQ2LCAweDUxRUMsDQotICAgIDB4RjA0NywgMHhGMDQ3LCAweDIzQTQsIDB4RjA0OCwgMHhGMDQ4LCAweDIwOTcsIDB4RjA0OSwgMHhGMDQ5LCAweDFFRTQsDQotICAgIDB4RjA0QSwgMHhGMDRELCAweDUxRUUsIDB4RjA0RSwgMHhGMDRFLCAweDIyMzgsIDB4RjA0RiwgMHhGMDUwLCAweDUxRjIsDQotICAgIDB4RjA1MSwgMHhGMDUxLCAweDIzQTUsIDB4RjA1MiwgMHhGMDUzLCAweDUxRjQsIDB4RjA1NCwgMHhGMDU0LCAweDFGOUEsDQotICAgIDB4RjA1NSwgMHhGMDU2LCAweDUxRjYsIDB4RjA1NywgMHhGMDU3LCAweDIxQzMsIDB4RjA1OCwgMHhGMDVELCAweDUxRjgsDQotICAgIDB4RjA1RSwgMHhGMDVFLCAweDFGMkUsIDB4RjA1RiwgMHhGMDY3LCAweDUxRkUsIDB4RjA2OCwgMHhGMDY4LCAweDIzOUMsDQotICAgIDB4RjA2OSwgMHhGMDZCLCAweDUyMDcsIDB4RjA2QywgMHhGMDZDLCAweDIzQTYsIDB4RjA2RCwgMHhGMDcwLCAweDUyMEEsDQotICAgIDB4RjA3MSwgMHhGMDcxLCAweDIzOUUsIDB4RjA3MiwgMHhGMDcyLCAweDUyMEUsIDB4RjA3MywgMHhGMDczLCAweDIwMzUsDQotICAgIDB4RjA3NCwgMHhGMDc0LCAweDIzQTcsIDB4RjA3NSwgMHhGMDc3LCAweDUyMEYsIDB4RjA3OCwgMHhGMDc4LCAweDIzQTgsDQotICAgIDB4RjA3OSwgMHhGMDc5LCAweDUyMTIsIDB4RjA3QSwgMHhGMDdBLCAweDIwNzUsIDB4RjA3QiwgMHhGMDdDLCAweDUyMTMsDQotICAgIDB4RjA3RCwgMHhGMDdFLCAweDIzQTksIDB4RjA4MCwgMHhGMDgwLCAweDIzQUIsIDB4RjA4MSwgMHhGMDgxLCAweDFGRUIsDQotICAgIDB4RjA4MiwgMHhGMDgyLCAweDIzQUMsIDB4RjA4MywgMHhGMDg2LCAweDUyMTUsIDB4RjA4NywgMHhGMDg3LCAweDFGNkEsDQotICAgIDB4RjA4OCwgMHhGMDg4LCAweDIwRjksIDB4RjA4OSwgMHhGMDhBLCAweDUyMTksIDB4RjA4QiwgMHhGMDhCLCAweDI2NjYsDQotICAgIDB4RjA4QywgMHhGMDhGLCAweDUyMUIsIDB4RjA5MCwgMHhGMDkwLCAweDI2NjcsIDB4RjA5MSwgMHhGMDkxLCAweDUyMUYsDQotICAgIDB4RjA5MiwgMHhGMDkyLCAweDFFNkMsIDB4RjA5MywgMHhGMDk1LCAweDUyMjAsIDB4RjA5NiwgMHhGMDk2LCAweDIzQUQsDQotICAgIDB4RjA5NywgMHhGMEEwLCAweDUyMjMsIDB4RjBBMSwgMHhGMEZFLCAweDFCMjcsIDB4RjE0MCwgMHhGMTUxLCAweDUyMkQsDQotICAgIDB4RjE1MiwgMHhGMTUyLCAweDIwNkQsIDB4RjE1MywgMHhGMTUzLCAweDIyNDIsIDB4RjE1NCwgMHhGMTU0LCAweDFGMDIsDQotICAgIDB4RjE1NSwgMHhGMTU2LCAweDUyM0YsIDB4RjE1NywgMHhGMTU3LCAweDIxODMsIDB4RjE1OCwgMHhGMTU4LCAweDUyNDEsDQotICAgIDB4RjE1OSwgMHhGMTU5LCAweDFFODUsIDB4RjE1QSwgMHhGMTVBLCAweDIxRTksIDB4RjE1QiwgMHhGMTY2LCAweDUyNDIsDQotICAgIDB4RjE2NywgMHhGMTY3LCAweDFFNTcsIDB4RjE2OCwgMHhGMTc1LCAweDUyNEUsIDB4RjE3NiwgMHhGMTc2LCAweDIyQTUsDQotICAgIDB4RjE3NywgMHhGMTc3LCAweDI0MDcsIDB4RjE3OCwgMHhGMTc4LCAweDFGQ0EsIDB4RjE3OSwgMHhGMTc5LCAweDUyNUMsDQotICAgIDB4RjE3QSwgMHhGMTdBLCAweDI0MDIsIDB4RjE3QiwgMHhGMTdCLCAweDFGODIsIDB4RjE3QywgMHhGMTdELCAweDUyNUQsDQotICAgIDB4RjE3RSwgMHhGMTdFLCAweDI0MDgsIDB4RjE4MCwgMHhGMTgwLCAweDI0MDQsIDB4RjE4MSwgMHhGMTgxLCAweDUyNUYsDQotICAgIDB4RjE4MiwgMHhGMTgyLCAweDIxMzEsIDB4RjE4MywgMHhGMTgzLCAweDUyNjAsIDB4RjE4NCwgMHhGMTg0LCAweDIxODQsDQotICAgIDB4RjE4NSwgMHhGMTg1LCAweDUyNjEsIDB4RjE4NiwgMHhGMTg2LCAweDI0MDMsIDB4RjE4NywgMHhGMTg3LCAweDUyNjIsDQotICAgIDB4RjE4OCwgMHhGMTg4LCAweDIwNkUsIDB4RjE4OSwgMHhGMTg5LCAweDI0MEIsIDB4RjE4QSwgMHhGMTkzLCAweDUyNjMsDQotICAgIDB4RjE5NCwgMHhGMTk0LCAweDFGM0YsIDB4RjE5NSwgMHhGMTk3LCAweDUyNkQsIDB4RjE5OCwgMHhGMTk4LCAweDIwNjcsDQotICAgIDB4RjE5OSwgMHhGMUEwLCAweDUyNzAsIDB4RjFBMSwgMHhGMUZFLCAweDFCODUsIDB4RjI0MCwgMHhGMjQ0LCAweDUyNzgsDQotICAgIDB4RjI0NSwgMHhGMjQ1LCAweDFGRDcsIDB4RjI0NiwgMHhGMjQ2LCAweDUyN0QsIDB4RjI0NywgMHhGMjQ3LCAweDFFODMsDQotICAgIDB4RjI0OCwgMHhGMjRBLCAweDUyN0UsIDB4RjI0QiwgMHhGMjRCLCAweDI0MEYsIDB4RjI0QywgMHhGMjUyLCAweDUyODEsDQotICAgIDB4RjI1MywgMHhGMjUzLCAweDI0MEUsIDB4RjI1NCwgMHhGMjU0LCAweDIwQzcsIDB4RjI1NSwgMHhGMjU1LCAweDI0MEQsDQotICAgIDB4RjI1NiwgMHhGMjVCLCAweDUyODgsIDB4RjI1QywgMHhGMjVDLCAweDI0MTIsIDB4RjI1RCwgMHhGMjVFLCAweDUyOEUsDQotICAgIDB4RjI1RiwgMHhGMjVGLCAweDIwQjcsIDB4RjI2MCwgMHhGMjcwLCAweDUyOTAsIDB4RjI3MSwgMHhGMjcxLCAweDIzRjAsDQotICAgIDB4RjI3MiwgMHhGMjcyLCAweDUyQTEsIDB4RjI3MywgMHhGMjczLCAweDI0MTEsIDB4RjI3NCwgMHhGMjc0LCAweDI0MTQsDQotICAgIDB4RjI3NSwgMHhGMjc1LCAweDUyQTIsIDB4RjI3NiwgMHhGMjc2LCAweDIxNzAsIDB4RjI3NywgMHhGMjdCLCAweDUyQTMsDQotICAgIDB4RjI3QywgMHhGMjdDLCAweDI0MDUsIDB4RjI3RCwgMHhGMjdELCAweDIxMEMsIDB4RjI3RSwgMHhGMjdFLCAweDI0MTUsDQotICAgIDB4RjI4MCwgMHhGMjg0LCAweDUyQTgsIDB4RjI4NSwgMHhGMjg1LCAweDIwNjYsIDB4RjI4NiwgMHhGMjg2LCAweDUyQUQsDQotICAgIDB4RjI4NywgMHhGMjg3LCAweDIzNTIsIDB4RjI4OCwgMHhGMjg4LCAweDI0MTMsIDB4RjI4OSwgMHhGMjg5LCAweDI0MTAsDQotICAgIDB4RjI4QSwgMHhGMjhCLCAweDI0MTYsIDB4RjI4QywgMHhGMjhDLCAweDIwRjEsIDB4RjI4RCwgMHhGMjkwLCAweDUyQUUsDQotICAgIDB4RjI5MSwgMHhGMjkxLCAweDI0MEEsIDB4RjI5MiwgMHhGMjkzLCAweDUyQjIsIDB4RjI5NCwgMHhGMjk0LCAweDI0MDksDQotICAgIDB4RjI5NSwgMHhGMjk1LCAweDUyQjQsIDB4RjI5NiwgMHhGMjk2LCAweDI0MTgsIDB4RjI5NywgMHhGMjlCLCAweDUyQjUsDQotICAgIDB4RjI5QywgMHhGMjlDLCAweDFGQTcsIDB4RjI5RCwgMHhGMjlELCAweDUyQkEsIDB4RjI5RSwgMHhGMjlFLCAweDIxRkMsDQotICAgIDB4RjI5RiwgMHhGMkEwLCAweDUyQkIsIDB4RjJBMSwgMHhGMkZFLCAweDFCRTMsIDB4RjM0MCwgMHhGMzQwLCAweDFGQzEsDQotICAgIDB4RjM0MSwgMHhGMzQxLCAweDI0MDYsIDB4RjM0MiwgMHhGMzQ0LCAweDUyQkQsIDB4RjM0NSwgMHhGMzQ1LCAweDIyOUMsDQotICAgIDB4RjM0NiwgMHhGMzQ3LCAweDUyQzAsIDB4RjM0OCwgMHhGMzQ4LCAweDIwNEUsIDB4RjM0OSwgMHhGMzQ5LCAweDUyQzIsDQotICAgIDB4RjM0QSwgMHhGMzRBLCAweDI0MUEsIDB4RjM0QiwgMHhGMzRCLCAweDI0MTksIDB4RjM0QywgMHhGMzRGLCAweDUyQzMsDQotICAgIDB4RjM1MCwgMHhGMzUwLCAweDI0MEMsIDB4RjM1MSwgMHhGMzYwLCAweDUyQzcsIDB4RjM2MSwgMHhGMzYxLCAweDFFMjksDQotICAgIDB4RjM2MiwgMHhGMzczLCAweDUyRDcsIDB4RjM3NCwgMHhGMzc0LCAweDI2NjEsIDB4RjM3NSwgMHhGMzc1LCAweDUyRTksDQotICAgIDB4RjM3NiwgMHhGMzc2LCAweDI2QTQsIDB4RjM3NywgMHhGMzc3LCAweDIxNzQsIDB4RjM3OCwgMHhGMzc4LCAweDI2NjMsDQotICAgIDB4RjM3OSwgMHhGMzc5LCAweDI2NjIsIDB4RjM3QSwgMHhGMzdFLCAweDUyRUEsIDB4RjM4MCwgMHhGMzhCLCAweDUyRUYsDQotICAgIDB4RjM4QywgMHhGMzhDLCAweDI2NzUsIDB4RjM4RCwgMHhGMzlGLCAweDUyRkIsIDB4RjNBMCwgMHhGM0EwLCAweDIxNEMsDQotICAgIDB4RjNBMSwgMHhGM0ZFLCAweDFDNDEsIDB4RjQ0MCwgMHhGNDQ0LCAweDUzMEUsIDB4RjQ0NSwgMHhGNDQ1LCAweDI2N0EsDQotICAgIDB4RjQ0NiwgMHhGNDRGLCAweDUzMTMsIDB4RjQ1MCwgMHhGNDUwLCAweDI2QTAsIDB4RjQ1MSwgMHhGNDU2LCAweDUzMUQsDQotICAgIDB4RjQ1NywgMHhGNDU3LCAweDI2NjgsIDB4RjQ1OCwgMHhGNDU4LCAweDUzMjMsIDB4RjQ1OSwgMHhGNDU5LCAweDFFRDAsDQotICAgIDB4RjQ1QSwgMHhGNDVBLCAweDUzMjQsIDB4RjQ1QiwgMHhGNDVCLCAweDIwOTYsIDB4RjQ1QywgMHhGNDVDLCAweDUzMjUsDQotICAgIDB4RjQ1RCwgMHhGNDVELCAweDIzQ0MsIDB4RjQ1RSwgMHhGNDYxLCAweDUzMjYsIDB4RjQ2MiwgMHhGNDYyLCAweDIzQzgsDQotICAgIDB4RjQ2MywgMHhGNDYzLCAweDUzMkEsIDB4RjQ2NCwgMHhGNDY0LCAweDIyM0UsIDB4RjQ2NSwgMHhGNDc0LCAweDUzMkIsDQotICAgIDB4RjQ3NSwgMHhGNDc1LCAweDI2NjUsIDB4RjQ3NiwgMHhGNDdCLCAweDUzM0IsIDB4RjQ3QywgMHhGNDdDLCAweDI2NjQsDQotICAgIDB4RjQ3RCwgMHhGNDdELCAweDUzNDEsIDB4RjQ3RSwgMHhGNDdFLCAweDIyMzksIDB4RjQ4MCwgMHhGNDkzLCAweDUzNDIsDQotICAgIDB4RjQ5NCwgMHhGNDk0LCAweDIwNEEsIDB4RjQ5NSwgMHhGNDk4LCAweDUzNTYsIDB4RjQ5OSwgMHhGNDk5LCAweDI2MUYsDQotICAgIDB4RjQ5QSwgMHhGNDlCLCAweDUzNUEsIDB4RjQ5QywgMHhGNDlDLCAweDI2MUUsIDB4RjQ5RCwgMHhGNEEwLCAweDUzNUMsDQotICAgIDB4RjRBMSwgMHhGNEZFLCAweDFDOUYsIDB4RjU0MCwgMHhGNTQ0LCAweDUzNjAsIDB4RjU0NSwgMHhGNTQ1LCAweDI2MjAsDQotICAgIDB4RjU0NiwgMHhGNTQ2LCAweDUzNjUsIDB4RjU0NywgMHhGNTQ3LCAweDI2MjEsIDB4RjU0OCwgMHhGNTUxLCAweDUzNjYsDQotICAgIDB4RjU1MiwgMHhGNTUyLCAweDI2MjIsIDB4RjU1MywgMHhGNTUzLCAweDUzNzAsIDB4RjU1NCwgMHhGNTU0LCAweDI2MjcsDQotICAgIDB4RjU1NSwgMHhGNTU1LCAweDFFMzksIDB4RjU1NiwgMHhGNTU2LCAweDI2MjUsIDB4RjU1NywgMHhGNTVELCAweDUzNzEsDQotICAgIDB4RjU1RSwgMHhGNTVFLCAweDI2MjksIDB4RjU1RiwgMHhGNTYwLCAweDUzNzgsIDB4RjU2MSwgMHhGNTYxLCAweDI2MkUsDQotICAgIDB4RjU2MiwgMHhGNTYyLCAweDI2MkIsIDB4RjU2MywgMHhGNTZELCAweDUzN0EsIDB4RjU2RSwgMHhGNTZFLCAweDI2MkEsDQotICAgIDB4RjU2RiwgMHhGNTZGLCAweDI2MkQsIDB4RjU3MCwgMHhGNTcwLCAweDUzODUsIDB4RjU3MSwgMHhGNTcxLCAweDI2MjgsDQotICAgIDB4RjU3MiwgMHhGNTcyLCAweDIxQjksIDB4RjU3MywgMHhGNTdFLCAweDUzODYsIDB4RjU4MCwgMHhGNTg0LCAweDUzOTIsDQotICAgIDB4RjU4NSwgMHhGNTg1LCAweDI2MzYsIDB4RjU4NiwgMHhGNTg2LCAweDI2MzAsIDB4RjU4NywgMHhGNThCLCAweDUzOTcsDQotICAgIDB4RjU4QywgMHhGNThDLCAweDI2MzgsIDB4RjU4RCwgMHhGNThELCAweDUzOUMsIDB4RjU4RSwgMHhGNThFLCAweDIwMEQsDQotICAgIDB4RjU4RiwgMHhGNThGLCAweDI2MzcsIDB4RjU5MCwgMHhGNTk4LCAweDUzOUQsIDB4RjU5OSwgMHhGNTk5LCAweDI2NDUsDQotICAgIDB4RjU5QSwgMHhGNTlBLCAweDUzQTYsIDB4RjU5QiwgMHhGNTlCLCAweDI2M0EsIDB4RjU5QywgMHhGNTlGLCAweDUzQTcsDQotICAgIDB4RjVBMCwgMHhGNUEwLCAweDI2NDMsIDB4RjVBMSwgMHhGNUZFLCAweDFDRkQsIDB4RjY0MCwgMHhGNjQwLCAweDUzQUIsDQotICAgIDB4RjY0MSwgMHhGNjQxLCAweDI2NDAsIDB4RjY0MiwgMHhGNjQ0LCAweDUzQUMsIDB4RjY0NSwgMHhGNjQ1LCAweDI2M0QsDQotICAgIDB4RjY0NiwgMHhGNjQ2LCAweDI2NDEsIDB4RjY0NywgMHhGNjQ3LCAweDUzQUYsIDB4RjY0OCwgMHhGNjQ4LCAweDI2M0UsDQotICAgIDB4RjY0OSwgMHhGNjRBLCAweDUzQjAsIDB4RjY0QiwgMHhGNjRCLCAweDI2M0YsIDB4RjY0QywgMHhGNjRDLCAweDFGQzAsDQotICAgIDB4RjY0RCwgMHhGNjRELCAweDUzQjIsIDB4RjY0RSwgMHhGNjRGLCAweDI2M0IsIDB4RjY1MCwgMHhGNjUzLCAweDUzQjMsDQotICAgIDB4RjY1NCwgMHhGNjU0LCAweDI2NDIsIDB4RjY1NSwgMHhGNjU3LCAweDUzQjcsIDB4RjY1OCwgMHhGNjU4LCAweDI2NDQsDQotICAgIDB4RjY1OSwgMHhGNjYwLCAweDUzQkEsIDB4RjY2MSwgMHhGNjYxLCAweDI2MzksIDB4RjY2MiwgMHhGNjYyLCAweDUzQzIsDQotICAgIDB4RjY2MywgMHhGNjYzLCAweDI2NEMsIDB4RjY2NCwgMHhGNjZCLCAweDUzQzMsIDB4RjY2QywgMHhGNjZDLCAweDI2NDcsDQotICAgIDB4RjY2RCwgMHhGNjZELCAweDI2NEIsIDB4RjY2RSwgMHhGNjcwLCAweDUzQ0IsIDB4RjY3MSwgMHhGNjcxLCAweDI2NDksDQotICAgIDB4RjY3MiwgMHhGNjczLCAweDUzQ0UsIDB4RjY3NCwgMHhGNjc0LCAweDI2NDgsIDB4RjY3NSwgMHhGNjc1LCAweDUzRDAsDQotICAgIDB4RjY3NiwgMHhGNjc2LCAweDI2NEEsIDB4RjY3NywgMHhGNjc3LCAweDIxMDgsIDB4RjY3OCwgMHhGNjdFLCAweDUzRDEsDQotICAgIDB4RjY4MCwgMHhGNjg0LCAweDUzRDgsIDB4RjY4NSwgMHhGNjg1LCAweDI2NEQsIDB4RjY4NiwgMHhGNjg3LCAweDUzREQsDQotICAgIDB4RjY4OCwgMHhGNjg4LCAweDI2MzQsIDB4RjY4OSwgMHhGNjg5LCAweDUzREYsIDB4RjY4QSwgMHhGNjhBLCAweDI2NTEsDQotICAgIDB4RjY4QiwgMHhGNjhDLCAweDUzRTAsIDB4RjY4RCwgMHhGNjhELCAweDI2NTAsIDB4RjY4RSwgMHhGNjhFLCAweDI2NTIsDQotICAgIDB4RjY4RiwgMHhGNjkxLCAweDUzRTIsIDB4RjY5MiwgMHhGNjkyLCAweDI2NEYsIDB4RjY5MywgMHhGNjk1LCAweDUzRTUsDQotICAgIDB4RjY5NiwgMHhGNjk2LCAweDI2MzIsIDB4RjY5NywgMHhGNjk3LCAweDI2NEUsIDB4RjY5OCwgMHhGNjk4LCAweDI2NTMsDQotICAgIDB4RjY5OSwgMHhGNjk5LCAweDUzRTgsIDB4RjY5QSwgMHhGNjlBLCAweDI2NTcsIDB4RjY5QiwgMHhGNjlCLCAweDUzRTksDQotICAgIDB4RjY5QywgMHhGNjlDLCAweDI2MzUsIDB4RjY5RCwgMHhGNjlELCAweDUzRUEsIDB4RjY5RSwgMHhGNjlFLCAweDI2MzMsDQotICAgIDB4RjY5RiwgMHhGNjlGLCAweDUzRUIsIDB4RjZBMCwgMHhGNkEwLCAweDI2NTYsIDB4RjZBMSwgMHhGNkZFLCAweDFENUIsDQotICAgIDB4Rjc0MCwgMHhGNzQxLCAweDUzRUMsIDB4Rjc0MiwgMHhGNzQyLCAweDI2NTQsIDB4Rjc0MywgMHhGNzQ4LCAweDUzRUUsDQotICAgIDB4Rjc0OSwgMHhGNzQ5LCAweDI2NTgsIDB4Rjc0QSwgMHhGNzRCLCAweDUzRjQsIDB4Rjc0QywgMHhGNzRDLCAweDI2NTUsDQotICAgIDB4Rjc0RCwgMHhGNzRELCAweDFFNEQsIDB4Rjc0RSwgMHhGNzU1LCAweDUzRjYsIDB4Rjc1NiwgMHhGNzU2LCAweDI2NUIsDQotICAgIDB4Rjc1NywgMHhGNzU3LCAweDUzRkUsIDB4Rjc1OCwgMHhGNzU4LCAweDI2NUEsIDB4Rjc1OSwgMHhGNzU5LCAweDUzRkYsDQotICAgIDB4Rjc1QSwgMHhGNzVBLCAweDI2NTksIDB4Rjc1QiwgMHhGNzVCLCAweDIwMkUsIDB4Rjc1QywgMHhGNzVDLCAweDI2MkYsDQotICAgIDB4Rjc1RCwgMHhGNzYwLCAweDU0MDAsIDB4Rjc2MSwgMHhGNzYxLCAweDI2NDYsIDB4Rjc2MiwgMHhGNzYyLCAweDU0MDQsDQotICAgIDB4Rjc2MywgMHhGNzYzLCAweDI2MjYsIDB4Rjc2NCwgMHhGNzZBLCAweDU0MDUsIDB4Rjc2QiwgMHhGNzZCLCAweDI2NUMsDQotICAgIDB4Rjc2QywgMHhGNzcwLCAweDU0MEMsIDB4Rjc3MSwgMHhGNzcxLCAweDI2MkMsIDB4Rjc3MiwgMHhGNzdCLCAweDU0MTEsDQotICAgIDB4Rjc3QywgMHhGNzdDLCAweDI2MjMsIDB4Rjc3RCwgMHhGNzdELCAweDU0MUIsIDB4Rjc3RSwgMHhGNzdFLCAweDI2MzEsDQotICAgIDB4Rjc4MCwgMHhGN0EwLCAweDU0MUMsIDB4RjdBMSwgMHhGN0ZFLCAweDFEQjksIDB4Rjg0MCwgMHhGODQxLCAweDU0M0QsDQotICAgIDB4Rjg0MiwgMHhGODQyLCAweDIwOUMsIDB4Rjg0MywgMHhGODQ1LCAweDU0M0YsIDB4Rjg0NiwgMHhGODQ2LCAweDI1ODAsDQotICAgIDB4Rjg0NywgMHhGODQ4LCAweDU0NDIsIDB4Rjg0OSwgMHhGODQ5LCAweDIyREMsIDB4Rjg0QSwgMHhGODRGLCAweDU0NDQsDQotICAgIDB4Rjg1MCwgMHhGODUwLCAweDFGMDUsIDB4Rjg1MSwgMHhGODUxLCAweDIwOEIsIDB4Rjg1MiwgMHhGODUyLCAweDU0NEEsDQotICAgIDB4Rjg1MywgMHhGODUzLCAweDI1ODEsIDB4Rjg1NCwgMHhGODYyLCAweDU0NEIsIDB4Rjg2MywgMHhGODYzLCAweDI1ODMsDQotICAgIDB4Rjg2NCwgMHhGODY0LCAweDI1ODIsIDB4Rjg2NSwgMHhGODY1LCAweDU0NUEsIDB4Rjg2NiwgMHhGODY2LCAweDIxRUUsDQotICAgIDB4Rjg2NywgMHhGODcxLCAweDU0NUIsIDB4Rjg3MiwgMHhGODcyLCAweDIxODIsIDB4Rjg3MywgMHhGODc3LCAweDU0NjYsDQotICAgIDB4Rjg3OCwgMHhGODc4LCAweDIyNDMsIDB4Rjg3OSwgMHhGODc5LCAweDU0NkIsIDB4Rjg3QSwgMHhGODdBLCAweDI1ODcsDQotICAgIDB4Rjg3QiwgMHhGODdCLCAweDU0NkMsIDB4Rjg3QywgMHhGODdDLCAweDI1ODgsIDB4Rjg3RCwgMHhGODdFLCAweDU0NkQsDQotICAgIDB4Rjg4MCwgMHhGODgwLCAweDU0NkYsIDB4Rjg4MSwgMHhGODgxLCAweDI1ODQsIDB4Rjg4MiwgMHhGODgzLCAweDU0NzAsDQotICAgIDB4Rjg4NCwgMHhGODg0LCAweDIxRkQsIDB4Rjg4NSwgMHhGODg1LCAweDU0NzIsIDB4Rjg4NiwgMHhGODg2LCAweDIxRUYsDQotICAgIDB4Rjg4NywgMHhGODhDLCAweDU0NzMsIDB4Rjg4RCwgMHhGODhELCAweDI1OEEsIDB4Rjg4RSwgMHhGODhFLCAweDI1OEMsDQotICAgIDB4Rjg4RiwgMHhGODk4LCAweDU0NzksIDB4Rjg5OSwgMHhGODk5LCAweDFGNDcsIDB4Rjg5QSwgMHhGODlDLCAweDU0ODMsDQotICAgIDB4Rjg5RCwgMHhGODlELCAweDFGMUQsIDB4Rjg5RSwgMHhGODlGLCAweDU0ODYsIDB4RjhBMCwgMHhGOEEwLCAweDI1OEQsDQotICAgIDB4Rjk0MCwgMHhGOTRELCAweDU0ODgsIDB4Rjk0RSwgMHhGOTRFLCAweDFGRDAsIDB4Rjk0RiwgMHhGOTRGLCAweDI1OTIsDQotICAgIDB4Rjk1MCwgMHhGOTUwLCAweDI1OEYsIDB4Rjk1MSwgMHhGOTU4LCAweDU0OTYsIDB4Rjk1OSwgMHhGOTU5LCAweDI1OTQsDQotICAgIDB4Rjk1QSwgMHhGOTVBLCAweDFFRTAsIDB4Rjk1QiwgMHhGOTVDLCAweDU0OUUsIDB4Rjk1RCwgMHhGOTVELCAweDI1OTEsDQotICAgIDB4Rjk1RSwgMHhGOTVFLCAweDI1OTUsIDB4Rjk1RiwgMHhGOTY2LCAweDU0QTAsIDB4Rjk2NywgMHhGOTY3LCAweDI1OTcsDQotICAgIDB4Rjk2OCwgMHhGOTY4LCAweDU0QTgsIDB4Rjk2OSwgMHhGOTY5LCAweDIwQjYsIDB4Rjk2QSwgMHhGOTZCLCAweDU0QTksDQotICAgIDB4Rjk2QywgMHhGOTZDLCAweDI1OTgsIDB4Rjk2RCwgMHhGOTZFLCAweDU0QUIsIDB4Rjk2RiwgMHhGOTZGLCAweDIwRjYsDQotICAgIDB4Rjk3MCwgMHhGOTdFLCAweDU0QUQsIDB4Rjk4MCwgMHhGOTg0LCAweDU0QkMsIDB4Rjk4NSwgMHhGOTg1LCAweDI1ODUsDQotICAgIDB4Rjk4NiwgMHhGOTg2LCAweDU0QzEsIDB4Rjk4NywgMHhGOTg3LCAweDI1OTksIDB4Rjk4OCwgMHhGOTkwLCAweDU0QzIsDQotICAgIDB4Rjk5MSwgMHhGOTkxLCAweDI1OTYsIDB4Rjk5MiwgMHhGOTk1LCAweDU0Q0IsIDB4Rjk5NiwgMHhGOTk2LCAweDI1OUEsDQotICAgIDB4Rjk5NywgMHhGOTk3LCAweDU0Q0YsIDB4Rjk5OCwgMHhGOTk4LCAweDI1OUIsIDB4Rjk5OSwgMHhGOUEwLCAweDU0RDAsDQotICAgIDB4RkE0MCwgMHhGQTQxLCAweDU0RDgsIDB4RkE0MiwgMHhGQTQyLCAweDI1OUQsIDB4RkE0MywgMHhGQTQ1LCAweDU0REEsDQotICAgIDB4RkE0NiwgMHhGQTQ2LCAweDI1OUUsIDB4RkE0NywgMHhGQTRCLCAweDU0REQsIDB4RkE0QywgMHhGQTRDLCAweDIzNEMsDQotICAgIDB4RkE0RCwgMHhGQTUwLCAweDU0RTIsIDB4RkE1MSwgMHhGQTUxLCAweDFGNDQsIDB4RkE1MiwgMHhGQTU3LCAweDU0RTYsDQotICAgIDB4RkE1OCwgMHhGQTU4LCAweDI2NjAsIDB4RkE1OSwgMHhGQTU5LCAweDI1QTAsIDB4RkE1QSwgMHhGQTVDLCAweDU0RUMsDQotICAgIDB4RkE1RCwgMHhGQTVELCAweDI1OUMsIDB4RkE1RSwgMHhGQTVFLCAweDU0RUYsIDB4RkE1RiwgMHhGQTVGLCAweDI1OUYsDQotICAgIDB4RkE2MCwgMHhGQTYwLCAweDU0RjAsIDB4RkE2MSwgMHhGQTYxLCAweDFGNkMsIDB4RkE2MiwgMHhGQTZGLCAweDU0RjEsDQotICAgIDB4RkE3MCwgMHhGQTcwLCAweDI1QTIsIDB4RkE3MSwgMHhGQTczLCAweDU0RkYsIDB4RkE3NCwgMHhGQTc0LCAweDIwQUUsDQotICAgIDB4RkE3NSwgMHhGQTc1LCAweDU1MDIsIDB4RkE3NiwgMHhGQTc2LCAweDI1OEIsIDB4RkE3NywgMHhGQTc3LCAweDI1QTMsDQotICAgIDB4RkE3OCwgMHhGQTdFLCAweDU1MDMsIDB4RkE4MCwgMHhGQTgyLCAweDU1MEEsIDB4RkE4MywgMHhGQTgzLCAweDI1ODksDQotICAgIDB4RkE4NCwgMHhGQTg0LCAweDI1QTUsIDB4RkE4NSwgMHhGQThDLCAweDU1MEQsIDB4RkE4RCwgMHhGQThELCAweDI1QTQsDQotICAgIDB4RkE4RSwgMHhGQThGLCAweDU1MTUsIDB4RkE5MCwgMHhGQTkwLCAweDI1QTYsIDB4RkE5MSwgMHhGQTkxLCAweDI1OTMsDQotICAgIDB4RkE5MiwgMHhGQTk1LCAweDU1MTcsIDB4RkE5NiwgMHhGQTk2LCAweDI1QTcsIDB4RkE5NywgMHhGQTk3LCAweDIyMjIsDQotICAgIDB4RkE5OCwgMHhGQTk4LCAweDI1QTksIDB4RkE5OSwgMHhGQUEwLCAweDU1MUIsIDB4RkI0MCwgMHhGQjQ4LCAweDU1MjMsDQotICAgIDB4RkI0OSwgMHhGQjQ5LCAweDI1QTgsIDB4RkI0QSwgMHhGQjUxLCAweDU1MkMsIDB4RkI1MiwgMHhGQjUyLCAweDI1ODYsDQotICAgIDB4RkI1MywgMHhGQjU2LCAweDU1MzQsIDB4RkI1NywgMHhGQjU3LCAweDI1QTEsIDB4RkI1OCwgMHhGQjU4LCAweDI1QUEsDQotICAgIDB4RkI1OSwgMHhGQjU5LCAweDU1MzgsIDB4RkI1QSwgMHhGQjVBLCAweDI1OTAsIDB4RkI1QiwgMHhGQjVCLCAweDI1OEUsDQotICAgIDB4RkI1QywgMHhGQjc0LCAweDU1MzksIDB4RkI3NSwgMHhGQjc1LCAweDI2ODgsIDB4RkI3NiwgMHhGQjc4LCAweDU1NTIsDQotICAgIDB4RkI3OSwgMHhGQjc5LCAweDI2OUUsIDB4RkI3QSwgMHhGQjdBLCAweDI1RkIsIDB4RkI3QiwgMHhGQjdCLCAweDU1NTUsDQotICAgIDB4RkI3QywgMHhGQjdDLCAweDFGOEMsIDB4RkI3RCwgMHhGQjdELCAweDIxRjQsIDB4RkI3RSwgMHhGQjdFLCAweDU1NTYsDQotICAgIDB4RkI4MCwgMHhGQjhGLCAweDU1NTcsIDB4RkI5MCwgMHhGQjkwLCAweDIwMEYsIDB4RkI5MSwgMHhGQjlCLCAweDU1NjcsDQotICAgIDB4RkI5QywgMHhGQjlDLCAweDIwNzEsIDB4RkI5RCwgMHhGQjlFLCAweDU1NzIsIDB4RkI5RiwgMHhGQjlGLCAweDI1RjcsDQotICAgIDB4RkJBMCwgMHhGQkEwLCAweDU1NzQsIDB4RkM0MCwgMHhGQzQzLCAweDU1NzUsIDB4RkM0NCwgMHhGQzQ0LCAweDI2OTYsDQotICAgIDB4RkM0NSwgMHhGQzQ4LCAweDU1NzksIDB4RkM0OSwgMHhGQzQ5LCAweDI2OEYsIDB4RkM0QSwgMHhGQzU5LCAweDU1N0QsDQotICAgIDB4RkM1QSwgMHhGQzVBLCAweDIyREEsIDB4RkM1QiwgMHhGQzYyLCAweDU1OEQsIDB4RkM2MywgMHhGQzYzLCAweDFFQzEsDQotICAgIDB4RkM2NCwgMHhGQzY3LCAweDU1OTUsIDB4RkM2OCwgMHhGQzY4LCAweDFFQjMsIDB4RkM2OSwgMHhGQzZFLCAweDU1OTksDQotICAgIDB4RkM2RiwgMHhGQzZGLCAweDI2NkEsIDB4RkM3MCwgMHhGQzcwLCAweDU1OUYsIDB4RkM3MSwgMHhGQzcxLCAweDI2OEEsDQotICAgIDB4RkM3MiwgMHhGQzczLCAweDU1QTAsIDB4RkM3NCwgMHhGQzc0LCAweDI2NjksIDB4RkM3NSwgMHhGQzc2LCAweDU1QTIsDQotICAgIDB4RkM3NywgMHhGQzc4LCAweDI2MTgsIDB4RkM3OSwgMHhGQzdFLCAweDU1QTQsIDB4RkM4MCwgMHhGQzgyLCAweDU1QUEsDQotICAgIDB4RkM4MywgMHhGQzgzLCAweDI2MUEsIDB4RkM4NCwgMHhGQzg5LCAweDU1QUQsIDB4RkM4QSwgMHhGQzhBLCAweDI2NzMsDQotICAgIDB4RkM4QiwgMHhGQ0EwLCAweDU1QjMsIDB4RkQ0MCwgMHhGRDUxLCAweDU1QzksIDB4RkQ1MiwgMHhGRDUyLCAweDIwQzYsDQotICAgIDB4RkQ1MywgMHhGRDUzLCAweDIyNkIsIDB4RkQ1NCwgMHhGRDU2LCAweDU1REIsIDB4RkQ1NywgMHhGRDU3LCAweDI0RDMsDQotICAgIDB4RkQ1OCwgMHhGRDU4LCAweDFFODYsIDB4RkQ1OSwgMHhGRDU5LCAweDU1REUsIDB4RkQ1QSwgMHhGRDVBLCAweDI2MEYsDQotICAgIDB4RkQ1QiwgMHhGRDVFLCAweDU1REYsIDB4RkQ1RiwgMHhGRDVGLCAweDI2MTEsIDB4RkQ2MCwgMHhGRDYxLCAweDU1RTMsDQotICAgIDB4RkQ2MiwgMHhGRDYyLCAweDI2MTMsIDB4RkQ2MywgMHhGRDY0LCAweDU1RTUsIDB4RkQ2NSwgMHhGRDY1LCAweDI2MTAsDQotICAgIDB4RkQ2NiwgMHhGRDY2LCAweDI2MTIsIDB4RkQ2NywgMHhGRDY3LCAweDIwMzAsIDB4RkQ2OCwgMHhGRDY4LCAweDU1RTcsDQotICAgIDB4RkQ2OSwgMHhGRDY5LCAweDI2NzEsIDB4RkQ2QSwgMHhGRDZCLCAweDU1RTgsIDB4RkQ2QywgMHhGRDZDLCAweDI2MTQsDQotICAgIDB4RkQ2RCwgMHhGRDZGLCAweDU1RUEsIDB4RkQ3MCwgMHhGRDcwLCAweDI2MTYsIDB4RkQ3MSwgMHhGRDcxLCAweDU1RUQsDQotICAgIDB4RkQ3MiwgMHhGRDcyLCAweDI2MTUsIDB4RkQ3MywgMHhGRDc3LCAweDU1RUUsIDB4RkQ3OCwgMHhGRDc4LCAweDIwRjIsDQotICAgIDB4RkQ3OSwgMHhGRDdDLCAweDU1RjMsIDB4RkQ3RCwgMHhGRDdELCAweDI2MTcsIDB4RkQ3RSwgMHhGRDdFLCAweDU1RjcsDQotICAgIDB4RkQ4MCwgMHhGRDg3LCAweDU1RjgsIDB4RkQ4OCwgMHhGRDg4LCAweDIwMzcsIDB4RkQ4OSwgMHhGRDhBLCAweDU2MDAsDQotICAgIDB4RkQ4QiwgMHhGRDhCLCAweDIwQjMsIDB4RkQ4QywgMHhGRDhFLCAweDU2MDIsIDB4RkQ4RiwgMHhGRDhGLCAweDFGMjIsDQotICAgIDB4RkQ5MCwgMHhGRDkwLCAweDI0RUQsIDB4RkQ5MSwgMHhGRDkzLCAweDU2MDUsIDB4RkQ5NCwgMHhGRDk0LCAweDFGMzQsDQotICAgIDB4RkQ5NSwgMHhGRDlDLCAweDU2MDgsIDB4RkQ5RCwgMHhGRDlELCAweDBBMDIsIDB4RkQ5RSwgMHhGRDlFLCAweDQwRDMsDQotICAgIDB4RkQ5RiwgMHhGRDlGLCAweDIwMEMsIDB4RkRBMCwgMHhGREEwLCAweDUwODMsIDB4RkU0MCwgMHhGRTQwLCAweDEyNTksDQotICAgIDB4RkU0MSwgMHhGRTdFLCAweDU2MTAsIDB4RkU4MCwgMHhGRUEwLCAweDU2NEUsDQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfR0JLcF9FVUNfSF8yWzQwNzAgKiAzXSA9IHsKKyAgICAweDAwMjAsIDB4MDA3RSwgMHgwMDAxLCAweDgxNDAsIDB4ODE3OCwgMHgyNzU4LCAweDgxNzksIDB4ODE3OSwgMHgyMDU5LAorICAgIDB4ODE3QSwgMHg4MTdFLCAweDI3OTEsIDB4ODE4MCwgMHg4MTg1LCAweDI3OTYsIDB4ODE4NiwgMHg4MTg2LCAweDIxRjEsCisgICAgMHg4MTg3LCAweDgxRUMsIDB4Mjc5QywgMHg4MUVELCAweDgxRUQsIDB4MUZGMiwgMHg4MUVFLCAweDgxRjUsIDB4MjgwMiwKKyAgICAweDgxRjYsIDB4ODFGNiwgMHgyMDVELCAweDgxRjcsIDB4ODFGRSwgMHgyODBBLCAweDgyNDAsIDB4ODI1MiwgMHgyODEyLAorICAgIDB4ODI1MywgMHg4MjUzLCAweDI2OUMsIDB4ODI1NCwgMHg4MjYxLCAweDI4MjUsIDB4ODI2MiwgMHg4MjYyLCAweDIxQjUsCisgICAgMHg4MjYzLCAweDgyNzMsIDB4MjgzMywgMHg4Mjc0LCAweDgyNzQsIDB4MjJDQywgMHg4Mjc1LCAweDgyNzksIDB4Mjg0NCwKKyAgICAweDgyN0EsIDB4ODI3QSwgMHgyMDE2LCAweDgyN0IsIDB4ODI3QywgMHgyODQ5LCAweDgyN0QsIDB4ODI3RCwgMHgxRTYyLAorICAgIDB4ODI3RSwgMHg4MjdFLCAweDI4NEIsIDB4ODI4MCwgMHg4MjgwLCAweDFGMjAsIDB4ODI4MSwgMHg4MjgyLCAweDI4NEMsCisgICAgMHg4MjgzLCAweDgyODMsIDB4MjA3RiwgMHg4Mjg0LCAweDgyOEYsIDB4Mjg0RSwgMHg4MjkwLCAweDgyOTAsIDB4MjA1QywKKyAgICAweDgyOTEsIDB4ODJBNCwgMHgyODVBLCAweDgyQTUsIDB4ODJBNSwgMHgyMTk0LCAweDgyQTYsIDB4ODJDNywgMHgyODZFLAorICAgIDB4ODJDOCwgMHg4MkM4LCAweDFFNjUsIDB4ODJDOSwgMHg4MkM5LCAweDIyODEsIDB4ODJDQSwgMHg4MkUwLCAweDI4OTAsCisgICAgMHg4MkUxLCAweDgyRTEsIDB4MjJDRCwgMHg4MkUyLCAweDgyRTIsIDB4MjhBNywgMHg4MkUzLCAweDgyRTMsIDB4MjEwQSwKKyAgICAweDgyRTQsIDB4ODJFNCwgMHgxRTNFLCAweDgyRTUsIDB4ODJFQywgMHgyOEE4LCAweDgyRUQsIDB4ODJFRCwgMHgyNjdGLAorICAgIDB4ODJFRSwgMHg4MkYxLCAweDI4QjAsIDB4ODJGMiwgMHg4MkYyLCAweDIyMkUsIDB4ODJGMywgMHg4MkY2LCAweDI4QjQsCisgICAgMHg4MkY3LCAweDgyRjcsIDB4MUU5NiwgMHg4MkY4LCAweDgyRjgsIDB4MjJDQiwgMHg4MkY5LCAweDgyRjksIDB4MjI2QywKKyAgICAweDgyRkEsIDB4ODJGQSwgMHgyOEI4LCAweDgyRkIsIDB4ODJGQiwgMHgyMTE3LCAweDgyRkMsIDB4ODJGRSwgMHgyOEI5LAorICAgIDB4ODM0MCwgMHg4MzQwLCAweDI4QkMsIDB4ODM0MSwgMHg4MzQxLCAweDIwRTgsIDB4ODM0MiwgMHg4MzQ0LCAweDI4QkQsCisgICAgMHg4MzQ1LCAweDgzNDUsIDB4MjJENCwgMHg4MzQ2LCAweDgzNDcsIDB4MjhDMCwgMHg4MzQ4LCAweDgzNDgsIDB4MUZCOSwKKyAgICAweDgzNDksIDB4ODM0QiwgMHgyOEMyLCAweDgzNEMsIDB4ODM0QywgMHgyMkQ4LCAweDgzNEQsIDB4ODM1MiwgMHgyOEM1LAorICAgIDB4ODM1MywgMHg4MzUzLCAweDIwREYsIDB4ODM1NCwgMHg4MzU2LCAweDI4Q0IsIDB4ODM1NywgMHg4MzU3LCAweDIwQzIsCisgICAgMHg4MzU4LCAweDgzNUQsIDB4MjhDRSwgMHg4MzVFLCAweDgzNUUsIDB4MjE5NSwgMHg4MzVGLCAweDgzNjQsIDB4MjhENCwKKyAgICAweDgzNjUsIDB4ODM2NSwgMHgxRkFDLCAweDgzNjYsIDB4ODM2NiwgMHgyMkQzLCAweDgzNjcsIDB4ODM3MSwgMHgyOERBLAorICAgIDB4ODM3MiwgMHg4MzcyLCAweDFGODEsIDB4ODM3MywgMHg4Mzc3LCAweDI4RTUsIDB4ODM3OCwgMHg4Mzc4LCAweDIyMTAsCisgICAgMHg4Mzc5LCAweDgzNzksIDB4MjhFQSwgMHg4MzdBLCAweDgzN0EsIDB4MjJDRiwgMHg4MzdCLCAweDgzN0IsIDB4MjhFQiwKKyAgICAweDgzN0MsIDB4ODM3QywgMHgyMjEzLCAweDgzN0QsIDB4ODM3RCwgMHgyOEVDLCAweDgzN0UsIDB4ODM3RSwgMHgxRkU0LAorICAgIDB4ODM4MCwgMHg4MzgwLCAweDFGOTAsIDB4ODM4MSwgMHg4Mzg1LCAweDI4RUQsIDB4ODM4NiwgMHg4Mzg2LCAweDIyRDYsCisgICAgMHg4Mzg3LCAweDgzODgsIDB4MjhGMiwgMHg4Mzg5LCAweDgzODksIDB4MjJEMCwgMHg4MzhBLCAweDgzOEEsIDB4MjJDRSwKKyAgICAweDgzOEIsIDB4ODM4QywgMHgyOEY0LCAweDgzOEQsIDB4ODM4RCwgMHgyNjgxLCAweDgzOEUsIDB4ODM5MywgMHgyOEY2LAorICAgIDB4ODM5NCwgMHg4Mzk0LCAweDFFNzYsIDB4ODM5NSwgMHg4MzlELCAweDI4RkMsIDB4ODM5RSwgMHg4MzlFLCAweDIyMzEsCisgICAgMHg4MzlGLCAweDgzQTUsIDB4MjkwNSwgMHg4M0E2LCAweDgzQTYsIDB4MUU5MywgMHg4M0E3LCAweDgzQUEsIDB4MjkwQywKKyAgICAweDgzQUIsIDB4ODNBQiwgMHgyMkQyLCAweDgzQUMsIDB4ODNBRCwgMHgyOTEwLCAweDgzQUUsIDB4ODNBRSwgMHgyMkQ3LAorICAgIDB4ODNBRiwgMHg4M0FGLCAweDIyRDUsIDB4ODNCMCwgMHg4M0IwLCAweDIyRDEsIDB4ODNCMSwgMHg4M0I5LCAweDI5MTIsCisgICAgMHg4M0JBLCAweDgzQkEsIDB4MUVFNSwgMHg4M0JCLCAweDgzQzgsIDB4MjkxQiwgMHg4M0M5LCAweDgzQzksIDB4MjAyNSwKKyAgICAweDgzQ0EsIDB4ODNGNSwgMHgyOTI5LCAweDgzRjYsIDB4ODNGNiwgMHgxRUNGLCAweDgzRjcsIDB4ODNGRSwgMHgyOTU1LAorICAgIDB4ODQ0MCwgMHg4NDRGLCAweDI5NUQsIDB4ODQ1MCwgMHg4NDUwLCAweDFGRDksIDB4ODQ1MSwgMHg4NDcwLCAweDI5NkQsCisgICAgMHg4NDcxLCAweDg0NzEsIDB4MjJDOCwgMHg4NDcyLCAweDg0NzMsIDB4Mjk4RCwgMHg4NDc0LCAweDg0NzQsIDB4MjI2MywKKyAgICAweDg0NzUsIDB4ODQ3NiwgMHgyOThGLCAweDg0NzcsIDB4ODQ3NywgMHgyNjgzLCAweDg0NzgsIDB4ODQ3RSwgMHgyOTkxLAorICAgIDB4ODQ4MCwgMHg4NDgxLCAweDI5OTgsIDB4ODQ4MiwgMHg4NDgyLCAweDFGMTcsIDB4ODQ4MywgMHg4NDhELCAweDI5OUEsCisgICAgMHg4NDhFLCAweDg0OEUsIDB4MUYyQiwgMHg4NDhGLCAweDg0OTEsIDB4MjlBNSwgMHg4NDkyLCAweDg0OTIsIDB4MjJDQSwKKyAgICAweDg0OTMsIDB4ODQ5MywgMHgxRTk5LCAweDg0OTQsIDB4ODQ5QywgMHgyOUE4LCAweDg0OUQsIDB4ODQ5RCwgMHgxRjRGLAorICAgIDB4ODQ5RSwgMHg4NEEwLCAweDI5QjEsIDB4ODRBMSwgMHg4NEExLCAweDFGQ0YsIDB4ODRBMiwgMHg4NEEyLCAweDIwMzYsCisgICAgMHg4NEEzLCAweDg0QTMsIDB4MUYzQSwgMHg4NEE0LCAweDg0QTQsIDB4MjlCNCwgMHg4NEE1LCAweDg0QTUsIDB4MjJDOSwKKyAgICAweDg0QTYsIDB4ODRBNiwgMHgxRjk5LCAweDg0QTcsIDB4ODRBOCwgMHgyOUI1LCAweDg0QTksIDB4ODRBOSwgMHgxRjc1LAorICAgIDB4ODRBQSwgMHg4NEM0LCAweDI5QjcsIDB4ODRDNSwgMHg4NEM1LCAweDFGQkUsIDB4ODRDNiwgMHg4NEQyLCAweDI5RDIsCisgICAgMHg4NEQzLCAweDg0RDMsIDB4MUVDRCwgMHg4NEQ0LCAweDg0RDQsIDB4MjlERiwgMHg4NEQ1LCAweDg0RDUsIDB4MjFBOSwKKyAgICAweDg0RDYsIDB4ODRENiwgMHgyOUUwLCAweDg0RDcsIDB4ODRENywgMHgyMUU2LCAweDg0RDgsIDB4ODREOCwgMHgyOUUxLAorICAgIDB4ODREOSwgMHg4NEQ5LCAweDIxMjcsIDB4ODREQSwgMHg4NERBLCAweDIwMDMsIDB4ODREQiwgMHg4NERDLCAweDI5RTIsCisgICAgMHg4NERELCAweDg0REQsIDB4MjEzMiwgMHg4NERFLCAweDg0RTksIDB4MjlFNCwgMHg4NEVBLCAweDg0RUEsIDB4MjMyMywKKyAgICAweDg0RUIsIDB4ODRFRCwgMHgyOUYwLCAweDg0RUUsIDB4ODRFRSwgMHgyMDExLCAweDg0RUYsIDB4ODRGMCwgMHgyOUYzLAorICAgIDB4ODRGMSwgMHg4NEYxLCAweDIwRjUsIDB4ODRGMiwgMHg4NEZFLCAweDI5RjUsIDB4ODU0MCwgMHg4NTUwLCAweDJBMDIsCisgICAgMHg4NTUxLCAweDg1NTEsIDB4MjJDNSwgMHg4NTUyLCAweDg1NTIsIDB4MUY1RSwgMHg4NTUzLCAweDg1NTMsIDB4MkExMywKKyAgICAweDg1NTQsIDB4ODU1NCwgMHgyMkM2LCAweDg1NTUsIDB4ODU1RCwgMHgyQTE0LCAweDg1NUUsIDB4ODU1RSwgMHgyMEVGLAorICAgIDB4ODU1RiwgMHg4NTY1LCAweDJBMUQsIDB4ODU2NiwgMHg4NTY2LCAweDIxRDAsIDB4ODU2NywgMHg4NTdFLCAweDJBMjQsCisgICAgMHg4NTgwLCAweDg1ODYsIDB4MkEzQywgMHg4NTg3LCAweDg1ODcsIDB4MjJDMSwgMHg4NTg4LCAweDg1OEEsIDB4MkE0MywKKyAgICAweDg1OEIsIDB4ODU4QiwgMHgxRTY0LCAweDg1OEMsIDB4ODU5MSwgMHgyQTQ2LCAweDg1OTIsIDB4ODU5MiwgMHgyMUY5LAorICAgIDB4ODU5MywgMHg4NTk1LCAweDJBNEMsIDB4ODU5NiwgMHg4NTk2LCAweDIwMTAsIDB4ODU5NywgMHg4NTk3LCAweDJBNEYsCisgICAgMHg4NTk4LCAweDg1OTgsIDB4MjJDMiwgMHg4NTk5LCAweDg1QTEsIDB4MkE1MCwgMHg4NUEyLCAweDg1QTIsIDB4MUU1QSwKKyAgICAweDg1QTMsIDB4ODVCMSwgMHgyQTU5LCAweDg1QjIsIDB4ODVCMiwgMHgxRUEyLCAweDg1QjMsIDB4ODVGRSwgMHgyQTY4LAorICAgIDB4ODY0MCwgMHg4NjQ5LCAweDJBQjQsIDB4ODY0QSwgMHg4NjRBLCAweDIzNkQsIDB4ODY0QiwgMHg4NjUzLCAweDJBQkUsCisgICAgMHg4NjU0LCAweDg2NTQsIDB4MjI0NywgMHg4NjU1LCAweDg2NjcsIDB4MkFDNywgMHg4NjY4LCAweDg2NjgsIDB4MjM2QywKKyAgICAweDg2NjksIDB4ODY3RSwgMHgyQURBLCAweDg2ODAsIDB4ODY5NSwgMHgyQUYwLCAweDg2OTYsIDB4ODY5NiwgMHgyMTlDLAorICAgIDB4ODY5NywgMHg4Njk4LCAweDJCMDYsIDB4ODY5OSwgMHg4Njk5LCAweDIwQzksIDB4ODY5QSwgMHg4NkEwLCAweDJCMDgsCisgICAgMHg4NkExLCAweDg2QTEsIDB4MjFGMCwgMHg4NkEyLCAweDg2QzksIDB4MkIwRiwgMHg4NkNBLCAweDg2Q0EsIDB4MjEwQiwKKyAgICAweDg2Q0IsIDB4ODZDQiwgMHgyQjM3LCAweDg2Q0MsIDB4ODZDQywgMHgyMERFLCAweDg2Q0QsIDB4ODZDRCwgMHgyQjM4LAorICAgIDB4ODZDRSwgMHg4NkNFLCAweDFFQUEsIDB4ODZDRiwgMHg4NkQwLCAweDJCMzksIDB4ODZEMSwgMHg4NkQxLCAweDIyMkMsCisgICAgMHg4NkQyLCAweDg2REIsIDB4MkIzQiwgMHg4NkRDLCAweDg2REMsIDB4MjBEOCwgMHg4NkRELCAweDg2REQsIDB4MjJDMCwKKyAgICAweDg2REUsIDB4ODZFMCwgMHgyQjQ1LCAweDg2RTEsIDB4ODZFMSwgMHgyMDZGLCAweDg2RTIsIDB4ODZFNywgMHgyQjQ4LAorICAgIDB4ODZFOCwgMHg4NkU4LCAweDIxQTEsIDB4ODZFOSwgMHg4NkVELCAweDJCNEUsIDB4ODZFRSwgMHg4NkVFLCAweDIzNzksCisgICAgMHg4NkVGLCAweDg2RjMsIDB4MkI1MywgMHg4NkY0LCAweDg2RjQsIDB4MjM3MiwgMHg4NkY1LCAweDg2RkUsIDB4MkI1OCwKKyAgICAweDg3NDAsIDB4ODc0MCwgMHgyMTZBLCAweDg3NDEsIDB4ODc0MywgMHgyQjYyLCAweDg3NDQsIDB4ODc0NCwgMHgyMzdDLAorICAgIDB4ODc0NSwgMHg4NzQ4LCAweDJCNjUsIDB4ODc0OSwgMHg4NzQ5LCAweDIwQjAsIDB4ODc0QSwgMHg4NzRBLCAweDJCNjksCisgICAgMHg4NzRCLCAweDg3NEIsIDB4MjM3QSwgMHg4NzRDLCAweDg3NEMsIDB4MUU3NCwgMHg4NzRELCAweDg3NEUsIDB4MkI2QSwKKyAgICAweDg3NEYsIDB4ODc0RiwgMHgyMzc3LCAweDg3NTAsIDB4ODc1NiwgMHgyQjZDLCAweDg3NTcsIDB4ODc1NywgMHgxRjRDLAorICAgIDB4ODc1OCwgMHg4NzU5LCAweDJCNzMsIDB4ODc1QSwgMHg4NzVBLCAweDIzNzgsIDB4ODc1QiwgMHg4NzVCLCAweDIxQ0YsCisgICAgMHg4NzVDLCAweDg3NUMsIDB4MjM2OCwgMHg4NzVELCAweDg3NUQsIDB4MkI3NSwgMHg4NzVFLCAweDg3NUUsIDB4MjM3MSwKKyAgICAweDg3NUYsIDB4ODc1RiwgMHgyQjc2LCAweDg3NjAsIDB4ODc2MCwgMHgyMzY5LCAweDg3NjEsIDB4ODc2NSwgMHgyQjc3LAorICAgIDB4ODc2NiwgMHg4NzY2LCAweDI2NzQsIDB4ODc2NywgMHg4Nzc5LCAweDJCN0MsIDB4ODc3QSwgMHg4NzdBLCAweDIzNkYsCisgICAgMHg4NzdCLCAweDg3N0MsIDB4MkI4RiwgMHg4NzdELCAweDg3N0QsIDB4MjM3MCwgMHg4NzdFLCAweDg3N0UsIDB4MkI5MSwKKyAgICAweDg3ODAsIDB4ODc4MCwgMHgyQjkyLCAweDg3ODEsIDB4ODc4MSwgMHgyMzc2LCAweDg3ODIsIDB4ODc4MiwgMHgyMzczLAorICAgIDB4ODc4MywgMHg4Nzg1LCAweDJCOTMsIDB4ODc4NiwgMHg4Nzg2LCAweDIzN0YsIDB4ODc4NywgMHg4Nzg3LCAweDJCOTYsCisgICAgMHg4Nzg4LCAweDg3ODgsIDB4MjM3NCwgMHg4Nzg5LCAweDg3ODksIDB4MkI5NywgMHg4NzhBLCAweDg3OEEsIDB4MjBCNSwKKyAgICAweDg3OEIsIDB4ODc4QywgMHgyQjk4LCAweDg3OEQsIDB4ODc4RCwgMHgxRURCLCAweDg3OEUsIDB4ODc4RSwgMHgyNjcyLAorICAgIDB4ODc4RiwgMHg4NzkyLCAweDJCOUEsIDB4ODc5MywgMHg4NzkzLCAweDIzNkUsIDB4ODc5NCwgMHg4Nzk3LCAweDJCOUUsCisgICAgMHg4Nzk4LCAweDg3OTgsIDB4MjFCNywgMHg4Nzk5LCAweDg3OUMsIDB4MkJBMiwgMHg4NzlELCAweDg3OUQsIDB4MjM3NSwKKyAgICAweDg3OUUsIDB4ODdBMiwgMHgyQkE2LCAweDg3QTMsIDB4ODdBMywgMHgyMzgyLCAweDg3QTQsIDB4ODdBNiwgMHgyQkFCLAorICAgIDB4ODdBNywgMHg4N0E3LCAweDIwOUUsIDB4ODdBOCwgMHg4N0IyLCAweDJCQUUsIDB4ODdCMywgMHg4N0IzLCAweDIzNkIsCisgICAgMHg4N0I0LCAweDg3QjQsIDB4MkJCOSwgMHg4N0I1LCAweDg3QjUsIDB4MjAzOSwgMHg4N0I2LCAweDg3QkEsIDB4MkJCQSwKKyAgICAweDg3QkIsIDB4ODdCQiwgMHgyNjlGLCAweDg3QkMsIDB4ODdCRSwgMHgyQkJGLCAweDg3QkYsIDB4ODdCRiwgMHgyMzdELAorICAgIDB4ODdDMCwgMHg4N0MwLCAweDIxRjUsIDB4ODdDMSwgMHg4N0MxLCAweDJCQzIsIDB4ODdDMiwgMHg4N0MyLCAweDIzODEsCisgICAgMHg4N0MzLCAweDg3QzksIDB4MkJDMywgMHg4N0NBLCAweDg3Q0EsIDB4MjM3QiwgMHg4N0NCLCAweDg3Q0IsIDB4MjM3RSwKKyAgICAweDg3Q0MsIDB4ODdDQywgMHgyMUNDLCAweDg3Q0QsIDB4ODdDRSwgMHgyQkNBLCAweDg3Q0YsIDB4ODdDRiwgMHgyMkRCLAorICAgIDB4ODdEMCwgMHg4N0QxLCAweDJCQ0MsIDB4ODdEMiwgMHg4N0QyLCAweDIzNkEsIDB4ODdEMywgMHg4N0QzLCAweDI2ODksCisgICAgMHg4N0Q0LCAweDg3RDQsIDB4MkJDRSwgMHg4N0Q1LCAweDg3RDUsIDB4MjY5NywgMHg4N0Q2LCAweDg3RDksIDB4MkJDRiwKKyAgICAweDg3REEsIDB4ODdEQSwgMHgyMkExLCAweDg3REIsIDB4ODdGNiwgMHgyQkQzLCAweDg3RjcsIDB4ODdGNywgMHgyMzgzLAorICAgIDB4ODdGOCwgMHg4N0Y4LCAweDFGM0QsIDB4ODdGOSwgMHg4N0Y5LCAweDJCRUYsIDB4ODdGQSwgMHg4N0ZBLCAweDIxOEYsCisgICAgMHg4N0ZCLCAweDg3RkUsIDB4MkJGMCwgMHg4ODQwLCAweDg4NDAsIDB4MjI0NiwgMHg4ODQxLCAweDg4NDEsIDB4MjI0OCwKKyAgICAweDg4NDIsIDB4ODg0MywgMHgyQkY0LCAweDg4NDQsIDB4ODg0NCwgMHgyMTdFLCAweDg4NDUsIDB4ODg0NSwgMHgyQkY2LAorICAgIDB4ODg0NiwgMHg4ODQ2LCAweDIxODAsIDB4ODg0NywgMHg4ODdFLCAweDJCRjcsIDB4ODg4MCwgMHg4OEI5LCAweDJDMkYsCisgICAgMHg4OEJBLCAweDg4QkEsIDB4MjMyQSwgMHg4OEJCLCAweDg4Q0IsIDB4MkM2OSwgMHg4OENDLCAweDg4Q0MsIDB4MjI4QiwKKyAgICAweDg4Q0QsIDB4ODhEMywgMHgyQzdBLCAweDg4RDQsIDB4ODhENCwgMHgxRjg1LCAweDg4RDUsIDB4ODhENiwgMHgyQzgxLAorICAgIDB4ODhENywgMHg4OEQ3LCAweDIzMjUsIDB4ODhEOCwgMHg4OERFLCAweDJDODMsIDB4ODhERiwgMHg4OERGLCAweDIzMkMsCisgICAgMHg4OEUwLCAweDg4RTQsIDB4MkM4QSwgMHg4OEU1LCAweDg4RTUsIDB4MjMyRSwgMHg4OEU2LCAweDg4RjEsIDB4MkM4RiwKKyAgICAweDg4RjIsIDB4ODhGMiwgMHgyMjA1LCAweDg4RjMsIDB4ODhGMywgMHgxRTM4LCAweDg4RjQsIDB4ODhGNSwgMHgyQzlCLAorICAgIDB4ODhGNiwgMHg4OEY2LCAweDFFNzMsIDB4ODhGNywgMHg4OEZFLCAweDJDOUQsIDB4ODk0MCwgMHg4OTRBLCAweDJDQTUsCisgICAgMHg4OTRCLCAweDg5NEIsIDB4MUZFMywgMHg4OTRDLCAweDg5NEMsIDB4MjMzOSwgMHg4OTRELCAweDg5NEQsIDB4MkNCMCwKKyAgICAweDg5NEUsIDB4ODk0RSwgMHgyMzJCLCAweDg5NEYsIDB4ODk0RiwgMHgyQ0IxLCAweDg5NTAsIDB4ODk1MCwgMHgyMzJELAorICAgIDB4ODk1MSwgMHg4OTUzLCAweDJDQjIsIDB4ODk1NCwgMHg4OTU0LCAweDIxN0YsIDB4ODk1NSwgMHg4OTVDLCAweDJDQjUsCisgICAgMHg4OTVELCAweDg5NUQsIDB4MjFBNywgMHg4OTVFLCAweDg5NUUsIDB4MkNCRCwgMHg4OTVGLCAweDg5NUYsIDB4MjMyRiwKKyAgICAweDg5NjAsIDB4ODk2QywgMHgyQ0JFLCAweDg5NkQsIDB4ODk2RCwgMHgxRTdELCAweDg5NkUsIDB4ODk3MCwgMHgyQ0NCLAorICAgIDB4ODk3MSwgMHg4OTcxLCAweDIwRDYsIDB4ODk3MiwgMHg4OTdCLCAweDJDQ0UsIDB4ODk3QywgMHg4OTdDLCAweDFFQzIsCisgICAgMHg4OTdELCAweDg5N0UsIDB4MkNEOCwgMHg4OTgwLCAweDg5OEEsIDB4MkNEQSwgMHg4OThCLCAweDg5OEIsIDB4MjJCMiwKKyAgICAweDg5OEMsIDB4ODk5OCwgMHgyQ0U1LCAweDg5OTksIDB4ODk5OSwgMHgxRURGLCAweDg5OUEsIDB4ODk5RCwgMHgyQ0YyLAorICAgIDB4ODk5RSwgMHg4OTlFLCAweDFFRjksIDB4ODk5RiwgMHg4OUE1LCAweDJDRjYsIDB4ODlBNiwgMHg4OUE2LCAweDIwRDksCisgICAgMHg4OUE3LCAweDg5QTcsIDB4MkNGRCwgMHg4OUE4LCAweDg5QTgsIDB4MUZERCwgMHg4OUE5LCAweDg5QUUsIDB4MkNGRSwKKyAgICAweDg5QUYsIDB4ODlBRiwgMHgyMTY3LCAweDg5QjAsIDB4ODlCOSwgMHgyRDA0LCAweDg5QkEsIDB4ODlCQSwgMHgyMUVELAorICAgIDB4ODlCQiwgMHg4OUJELCAweDJEMEUsIDB4ODlCRSwgMHg4OUJFLCAweDIwMDcsIDB4ODlCRiwgMHg4OUJGLCAweDIzMjYsCisgICAgMHg4OUMwLCAweDg5QzAsIDB4MjMyOSwgMHg4OUMxLCAweDg5QzMsIDB4MkQxMSwgMHg4OUM0LCAweDg5QzQsIDB4MUY1MiwKKyAgICAweDg5QzUsIDB4ODlDNSwgMHgyMDNCLCAweDg5QzYsIDB4ODlDNiwgMHgyMzI4LCAweDg5QzcsIDB4ODlDNywgMHgyRDE0LAorICAgIDB4ODlDOCwgMHg4OUM4LCAweDIzMjcsIDB4ODlDOSwgMHg4OUNELCAweDJEMTUsIDB4ODlDRSwgMHg4OUNFLCAweDFFMkIsCisgICAgMHg4OUNGLCAweDg5RDAsIDB4MkQxQSwgMHg4OUQxLCAweDg5RDEsIDB4MjJBRSwgMHg4OUQyLCAweDg5RDcsIDB4MkQxQywKKyAgICAweDg5RDgsIDB4ODlEOCwgMHgxRjQ5LCAweDg5RDksIDB4ODlEQSwgMHgyRDIyLCAweDg5REIsIDB4ODlEQiwgMHgyMTM4LAorICAgIDB4ODlEQywgMHg4OUYzLCAweDJEMjQsIDB4ODlGNCwgMHg4OUY0LCAweDIwODEsIDB4ODlGNSwgMHg4OUZFLCAweDJEM0MsCisgICAgMHg4QTQwLCAweDhBNDAsIDB4MkQ0NiwgMHg4QTQxLCAweDhBNDEsIDB4MUY3QywgMHg4QTQyLCAweDhBNTgsIDB4MkQ0NywKKyAgICAweDhBNTksIDB4OEE1OSwgMHgyMzVCLCAweDhBNUEsIDB4OEE1QSwgMHgxRURFLCAweDhBNUIsIDB4OEE1QiwgMHgyRDVFLAorICAgIDB4OEE1QywgMHg4QTVDLCAweDFGQTIsIDB4OEE1RCwgMHg4QTVELCAweDJENUYsIDB4OEE1RSwgMHg4QTVFLCAweDFFRkEsCisgICAgMHg4QTVGLCAweDhBNzgsIDB4MkQ2MCwgMHg4QTc5LCAweDhBNzksIDB4MjJBRCwgMHg4QTdBLCAweDhBN0UsIDB4MkQ3QSwKKyAgICAweDhBODAsIDB4OEFFMywgMHgyRDdGLCAweDhBRTQsIDB4OEFFNCwgMHgyMDNGLCAweDhBRTUsIDB4OEFGRSwgMHgyREUzLAorICAgIDB4OEI0MCwgMHg4QjQzLCAweDJERkQsIDB4OEI0NCwgMHg4QjQ0LCAweDFGMEUsIDB4OEI0NSwgMHg4QjQ4LCAweDJFMDEsCisgICAgMHg4QjQ5LCAweDhCNDksIDB4MjNGOSwgMHg4QjRBLCAweDhCNzksIDB4MkUwNSwgMHg4QjdBLCAweDhCN0EsIDB4MjNGQywKKyAgICAweDhCN0IsIDB4OEI3RSwgMHgyRTM1LCAweDhCODAsIDB4OEI4QiwgMHgyRTM5LCAweDhCOEMsIDB4OEI4QywgMHgyMDY5LAorICAgIDB4OEI4RCwgMHg4QjlELCAweDJFNDUsIDB4OEI5RSwgMHg4QjlFLCAweDIzRjcsIDB4OEI5RiwgMHg4QkIyLCAweDJFNTYsCisgICAgMHg4QkIzLCAweDhCQjMsIDB4MjNGNiwgMHg4QkI0LCAweDhCQjgsIDB4MkU2QSwgMHg4QkI5LCAweDhCQjksIDB4MjNGRCwKKyAgICAweDhCQkEsIDB4OEJCRCwgMHgyRTZGLCAweDhCQkUsIDB4OEJCRSwgMHgyM0Y4LCAweDhCQkYsIDB4OEJDNSwgMHgyRTczLAorICAgIDB4OEJDNiwgMHg4QkM2LCAweDIzRkEsIDB4OEJDNywgMHg4QkM3LCAweDJFN0EsIDB4OEJDOCwgMHg4QkM4LCAweDIzRkUsCisgICAgMHg4QkM5LCAweDhCQzksIDB4MUZBOCwgMHg4QkNBLCAweDhCRDMsIDB4MkU3QiwgMHg4QkQ0LCAweDhCRDQsIDB4MjQwMSwKKyAgICAweDhCRDUsIDB4OEJEQiwgMHgyRTg1LCAweDhCREMsIDB4OEJEQywgMHgyM0ZGLCAweDhCREQsIDB4OEJFNCwgMHgyRThDLAorICAgIDB4OEJFNSwgMHg4QkU1LCAweDI0MDAsIDB4OEJFNiwgMHg4QkVBLCAweDJFOTQsIDB4OEJFQiwgMHg4QkVCLCAweDIyMjEsCisgICAgMHg4QkVDLCAweDhCRUYsIDB4MkU5OSwgMHg4QkYwLCAweDhCRjAsIDB4MjEyMiwgMHg4QkYxLCAweDhCRkUsIDB4MkU5RCwKKyAgICAweDhDNDAsIDB4OEM0MywgMHgyRUFCLCAweDhDNDQsIDB4OEM0NCwgMHgyM0ZCLCAweDhDNDUsIDB4OEM0RSwgMHgyRUFGLAorICAgIDB4OEM0RiwgMHg4QzRGLCAweDIxNUEsIDB4OEM1MCwgMHg4QzU2LCAweDJFQjksIDB4OEM1NywgMHg4QzU3LCAweDIxRTUsCisgICAgMHg4QzU4LCAweDhDNUIsIDB4MkVDMCwgMHg4QzVDLCAweDhDNUMsIDB4MjA1NywgMHg4QzVELCAweDhDN0UsIDB4MkVDNCwKKyAgICAweDhDODAsIDB4OEM4QSwgMHgyRUU2LCAweDhDOEIsIDB4OEM4QiwgMHgyMEU1LCAweDhDOEMsIDB4OEM4QywgMHgyRUYxLAorICAgIDB4OEM4RCwgMHg4QzhELCAweDIxMkYsIDB4OEM4RSwgMHg4QzhFLCAweDIwQTMsIDB4OEM4RiwgMHg4QzhGLCAweDIxMjEsCisgICAgMHg4QzkwLCAweDhDOTAsIDB4MkVGMiwgMHg4QzkxLCAweDhDOTEsIDB4MjFENCwgMHg4QzkyLCAweDhDOTIsIDB4MUZFNSwKKyAgICAweDhDOTMsIDB4OEM5OCwgMHgyRUYzLCAweDhDOTksIDB4OEM5OSwgMHgxRThBLCAweDhDOUEsIDB4OEM5QSwgMHgxRTM3LAorICAgIDB4OEM5QiwgMHg4Q0ExLCAweDJFRjksIDB4OENBMiwgMHg4Q0EyLCAweDFGOUUsIDB4OENBMywgMHg4Q0EzLCAweDIyQTYsCisgICAgMHg4Q0E0LCAweDhDQTQsIDB4MjFFOCwgMHg4Q0E1LCAweDhDQTUsIDB4MkYwMCwgMHg4Q0E2LCAweDhDQTYsIDB4MUVEQSwKKyAgICAweDhDQTcsIDB4OENBNywgMHgxRUI5LCAweDhDQTgsIDB4OENCRiwgMHgyRjAxLCAweDhDQzAsIDB4OENDMCwgMHgyMzVDLAorICAgIDB4OENDMSwgMHg4Q0QxLCAweDJGMTksIDB4OENEMiwgMHg4Q0QyLCAweDIwNTAsIDB4OENEMywgMHg4Q0QzLCAweDFFNjcsCisgICAgMHg4Q0Q0LCAweDhDRDQsIDB4MkYyQSwgMHg4Q0Q1LCAweDhDRDUsIDB4MjNGNCwgMHg4Q0Q2LCAweDhDRDgsIDB4MkYyQiwKKyAgICAweDhDRDksIDB4OENEOSwgMHgyMTNFLCAweDhDREEsIDB4OENGOCwgMHgyRjJFLCAweDhDRjksIDB4OENGOSwgMHgxRjE2LAorICAgIDB4OENGQSwgMHg4Q0ZFLCAweDJGNEQsIDB4OEQ0MCwgMHg4RDcyLCAweDJGNTIsIDB4OEQ3MywgMHg4RDczLCAweDIzODksCisgICAgMHg4RDc0LCAweDhENzQsIDB4MkY4NSwgMHg4RDc1LCAweDhENzUsIDB4MUVCNywgMHg4RDc2LCAweDhEN0EsIDB4MkY4NiwKKyAgICAweDhEN0IsIDB4OEQ3QiwgMHgyMUI0LCAweDhEN0MsIDB4OEQ3RSwgMHgyRjhCLCAweDhEODAsIDB4OEQ4NywgMHgyRjhFLAorICAgIDB4OEQ4OCwgMHg4RDg4LCAweDIzOEYsIDB4OEQ4OSwgMHg4RDhFLCAweDJGOTYsIDB4OEQ4RiwgMHg4RDhGLCAweDFGMUEsCisgICAgMHg4RDkwLCAweDhEOUQsIDB4MkY5QywgMHg4RDlFLCAweDhEOUUsIDB4MjM4QiwgMHg4RDlGLCAweDhEQjgsIDB4MkZBQSwKKyAgICAweDhEQjksIDB4OERCOSwgMHgyMzhBLCAweDhEQkEsIDB4OERFMSwgMHgyRkM0LCAweDhERTIsIDB4OERFMiwgMHgyMzkxLAorICAgIDB4OERFMywgMHg4REUzLCAweDJGRUMsIDB4OERFNCwgMHg4REU0LCAweDIyNzEsIDB4OERFNSwgMHg4REU2LCAweDJGRUQsCisgICAgMHg4REU3LCAweDhERTcsIDB4MjM4OCwgMHg4REU4LCAweDhERjYsIDB4MkZFRiwgMHg4REY3LCAweDhERjcsIDB4MjM4RSwKKyAgICAweDhERjgsIDB4OERGRCwgMHgyRkZFLCAweDhERkUsIDB4OERGRSwgMHgyMzhELCAweDhFNDAsIDB4OEU0NSwgMHgzMDA0LAorICAgIDB4OEU0NiwgMHg4RTQ2LCAweDIzOEMsIDB4OEU0NywgMHg4RTU1LCAweDMwMEEsIDB4OEU1NiwgMHg4RTU2LCAweDIzOTAsCisgICAgMHg4RTU3LCAweDhFNTcsIDB4MzAxOSwgMHg4RTU4LCAweDhFNTgsIDB4MjAzMywgMHg4RTU5LCAweDhFNTksIDB4MzAxQSwKKyAgICAweDhFNUEsIDB4OEU1QSwgMHgyMjNDLCAweDhFNUIsIDB4OEU2NywgMHgzMDFCLCAweDhFNjgsIDB4OEU2OCwgMHgxRkU5LAorICAgIDB4OEU2OSwgMHg4RTZELCAweDMwMjgsIDB4OEU2RSwgMHg4RTZFLCAweDIwNTUsIDB4OEU2RiwgMHg4RTZGLCAweDMwMkQsCisgICAgMHg4RTcwLCAweDhFNzAsIDB4MjM5MiwgMHg4RTcxLCAweDhFN0UsIDB4MzAyRSwgMHg4RTgwLCAweDhFODAsIDB4MjMyNCwKKyAgICAweDhFODEsIDB4OEU5QSwgMHgzMDNDLCAweDhFOUIsIDB4OEU5QiwgMHgyMTQzLCAweDhFOUMsIDB4OEU5RSwgMHgzMDU2LAorICAgIDB4OEU5RiwgMHg4RTlGLCAweDIxMjksIDB4OEVBMCwgMHg4RUEzLCAweDMwNTksIDB4OEVBNCwgMHg4RUE0LCAweDIyNzcsCisgICAgMHg4RUE1LCAweDhFQTYsIDB4MzA1RCwgMHg4RUE3LCAweDhFQTcsIDB4MUVBNywgMHg4RUE4LCAweDhFQUIsIDB4MzA1RiwKKyAgICAweDhFQUMsIDB4OEVBQywgMHgyMjg1LCAweDhFQUQsIDB4OEVBRCwgMHgzMDYzLCAweDhFQUUsIDB4OEVBRSwgMHgyMzg0LAorICAgIDB4OEVBRiwgMHg4RUJDLCAweDMwNjQsIDB4OEVCRCwgMHg4RUJELCAweDIzODcsIDB4OEVCRSwgMHg4RUJFLCAweDIzODYsCisgICAgMHg4RUJGLCAweDhFQzIsIDB4MzA3MiwgMHg4RUMzLCAweDhFQzMsIDB4MjI5MCwgMHg4RUM0LCAweDhFQzQsIDB4MzA3NiwKKyAgICAweDhFQzUsIDB4OEVDNSwgMHgxRTQ0LCAweDhFQzYsIDB4OEVDQywgMHgzMDc3LCAweDhFQ0QsIDB4OEVDRCwgMHgxRTMyLAorICAgIDB4OEVDRSwgMHg4RUNFLCAweDIzODUsIDB4OEVDRiwgMHg4RUQ1LCAweDMwN0UsIDB4OEVENiwgMHg4RUQ2LCAweDFGMTMsCisgICAgMHg4RUQ3LCAweDhFRDcsIDB4MUY3MywgMHg4RUQ4LCAweDhFRUIsIDB4MzA4NSwgMHg4RUVDLCAweDhFRUMsIDB4MUZFMCwKKyAgICAweDhFRUQsIDB4OEVGRSwgMHgzMDk5LCAweDhGNDAsIDB4OEY1MSwgMHgzMEFCLCAweDhGNTIsIDB4OEY1MiwgMHgyMDg3LAorICAgIDB4OEY1MywgMHg4RjUzLCAweDFFNzgsIDB4OEY1NCwgMHg4RjU0LCAweDIzQUUsIDB4OEY1NSwgMHg4RjU1LCAweDFFRjYsCisgICAgMHg4RjU2LCAweDhGNTYsIDB4MUYzMSwgMHg4RjU3LCAweDhGNUMsIDB4MzBCRCwgMHg4RjVELCAweDhGNUQsIDB4MjA0NSwKKyAgICAweDhGNUUsIDB4OEY2MywgMHgzMEMzLCAweDhGNjQsIDB4OEY2NCwgMHgyMTc4LCAweDhGNjUsIDB4OEY3RSwgMHgzMEM5LAorICAgIDB4OEY4MCwgMHg4Rjg1LCAweDMwRTMsIDB4OEY4NiwgMHg4Rjg2LCAweDIzRjUsIDB4OEY4NywgMHg4Rjg3LCAweDMwRTksCisgICAgMHg4Rjg4LCAweDhGODgsIDB4MjI3NSwgMHg4Rjg5LCAweDhGOTQsIDB4MzBFQSwgMHg4Rjk1LCAweDhGOTUsIDB4MjY2RSwKKyAgICAweDhGOTYsIDB4OEY5NiwgMHgzMEY2LCAweDhGOTcsIDB4OEY5NywgMHgxRUIwLCAweDhGOTgsIDB4OEY5QSwgMHgzMEY3LAorICAgIDB4OEY5QiwgMHg4RjlCLCAweDIwODMsIDB4OEY5QywgMHg4RjlDLCAweDMwRkEsIDB4OEY5RCwgMHg4RjlELCAweDIxODgsCisgICAgMHg4RjlFLCAweDhGQTAsIDB4MzBGQiwgMHg4RkExLCAweDhGQTEsIDB4MjY3QywgMHg4RkEyLCAweDhGQkMsIDB4MzBGRSwKKyAgICAweDhGQkQsIDB4OEZCRCwgMHgxRkM1LCAweDhGQkUsIDB4OEZDMywgMHgzMTE5LCAweDhGQzQsIDB4OEZDNCwgMHgxRUExLAorICAgIDB4OEZDNSwgMHg4RkM1LCAweDMxMUYsIDB4OEZDNiwgMHg4RkM2LCAweDIzOTMsIDB4OEZDNywgMHg4RkNDLCAweDMxMjAsCisgICAgMHg4RkNELCAweDhGQ0QsIDB4MUYwQiwgMHg4RkNFLCAweDhGRDcsIDB4MzEyNiwgMHg4RkQ4LCAweDhGRDgsIDB4MUU3QywKKyAgICAweDhGRDksIDB4OEZGRSwgMHgzMTMwLCAweDkwNDAsIDB4OTA3RSwgMHgzMTU2LCAweDkwODAsIDB4OTA5QywgMHgzMTk1LAorICAgIDB4OTA5RCwgMHg5MDlELCAweDIzQjQsIDB4OTA5RSwgMHg5MDlFLCAweDIwN0UsIDB4OTA5RiwgMHg5MEI5LCAweDMxQjIsCisgICAgMHg5MEJBLCAweDkwQkEsIDB4MUVFMywgMHg5MEJCLCAweDkwQkYsIDB4MzFDRCwgMHg5MEMwLCAweDkwQzAsIDB4MjA5NSwKKyAgICAweDkwQzEsIDB4OTBDMSwgMHgyM0JCLCAweDkwQzIsIDB4OTBDNCwgMHgzMUQyLCAweDkwQzUsIDB4OTBDNSwgMHgyM0I5LAorICAgIDB4OTBDNiwgMHg5MERBLCAweDMxRDUsIDB4OTBEQiwgMHg5MERCLCAweDFFMjgsIDB4OTBEQywgMHg5MERDLCAweDIzQkQsCisgICAgMHg5MERELCAweDkwRUMsIDB4MzFFQSwgMHg5MEVELCAweDkwRUQsIDB4MjNCNSwgMHg5MEVFLCAweDkwRUYsIDB4MzFGQSwKKyAgICAweDkwRjAsIDB4OTBGMCwgMHgyM0JBLCAweDkwRjEsIDB4OTBGNiwgMHgzMUZDLCAweDkwRjcsIDB4OTBGNywgMHgyM0IzLAorICAgIDB4OTBGOCwgMHg5MEZFLCAweDMyMDIsIDB4OTE0MCwgMHg5MTQxLCAweDMyMDksIDB4OTE0MiwgMHg5MTQyLCAweDIxNjIsCisgICAgMHg5MTQzLCAweDkxNEEsIDB4MzIwQiwgMHg5MTRCLCAweDkxNEIsIDB4MUU1RSwgMHg5MTRDLCAweDkxNEMsIDB4MzIxMywKKyAgICAweDkxNEQsIDB4OTE0RCwgMHgxRTVELCAweDkxNEUsIDB4OTE1MCwgMHgzMjE0LCAweDkxNTEsIDB4OTE1MSwgMHgyM0I3LAorICAgIDB4OTE1MiwgMHg5MTUzLCAweDMyMTcsIDB4OTE1NCwgMHg5MTU0LCAweDFGMkYsIDB4OTE1NSwgMHg5MTU1LCAweDI0REYsCisgICAgMHg5MTU2LCAweDkxNTgsIDB4MzIxOSwgMHg5MTU5LCAweDkxNTksIDB4MjNCMiwgMHg5MTVBLCAweDkxNUEsIDB4MjE0RSwKKyAgICAweDkxNUIsIDB4OTE1QywgMHgzMjFDLCAweDkxNUQsIDB4OTE1RCwgMHgyMDUyLCAweDkxNUUsIDB4OTE2MCwgMHgzMjFFLAorICAgIDB4OTE2MSwgMHg5MTYxLCAweDIzQkMsIDB4OTE2MiwgMHg5MTYyLCAweDMyMjEsIDB4OTE2MywgMHg5MTYzLCAweDIwRUIsCisgICAgMHg5MTY0LCAweDkxNkQsIDB4MzIyMiwgMHg5MTZFLCAweDkxNkUsIDB4MjIzMiwgMHg5MTZGLCAweDkxNzUsIDB4MzIyQywKKyAgICAweDkxNzYsIDB4OTE3NiwgMHgxRTNGLCAweDkxNzcsIDB4OTE3OSwgMHgzMjMzLCAweDkxN0EsIDB4OTE3QSwgMHgyMDFCLAorICAgIDB4OTE3QiwgMHg5MTdCLCAweDIwQkMsIDB4OTE3QywgMHg5MTdDLCAweDIzQkUsIDB4OTE3RCwgMHg5MTdFLCAweDMyMzYsCisgICAgMHg5MTgwLCAweDkxODMsIDB4MzIzOCwgMHg5MTg0LCAweDkxODQsIDB4MUVBRSwgMHg5MTg1LCAweDkxOEMsIDB4MzIzQywKKyAgICAweDkxOEQsIDB4OTE4RCwgMHgxRUZCLCAweDkxOEUsIDB4OTE5MCwgMHgzMjQ0LCAweDkxOTEsIDB4OTE5MSwgMHgyMDg5LAorICAgIDB4OTE5MiwgMHg5MTkyLCAweDMyNDcsIDB4OTE5MywgMHg5MTkzLCAweDIzQjEsIDB4OTE5NCwgMHg5MTk2LCAweDMyNDgsCisgICAgMHg5MTk3LCAweDkxOTcsIDB4MjFDNCwgMHg5MTk4LCAweDkxOUEsIDB4MzI0QiwgMHg5MTlCLCAweDkxOUIsIDB4MjIxNCwKKyAgICAweDkxOUMsIDB4OTFBOCwgMHgzMjRFLCAweDkxQTksIDB4OTFBOSwgMHgxRkRFLCAweDkxQUEsIDB4OTFBQSwgMHgyMjIzLAorICAgIDB4OTFBQiwgMHg5MUFCLCAweDIzQjYsIDB4OTFBQywgMHg5MUI5LCAweDMyNUIsIDB4OTFCQSwgMHg5MUJBLCAweDI2OEMsCisgICAgMHg5MUJCLCAweDkxQkIsIDB4MjRERSwgMHg5MUJDLCAweDkxQkUsIDB4MzI2OSwgMHg5MUJGLCAweDkxQkYsIDB4MjRFMCwKKyAgICAweDkxQzAsIDB4OTFDMiwgMHgzMjZDLCAweDkxQzMsIDB4OTFDMywgMHgyM0I4LCAweDkxQzQsIDB4OTFDQywgMHgzMjZGLAorICAgIDB4OTFDRCwgMHg5MUNELCAweDFFODEsIDB4OTFDRSwgMHg5MUNGLCAweDMyNzgsIDB4OTFEMCwgMHg5MUQwLCAweDFGRkUsCisgICAgMHg5MUQxLCAweDkxRDEsIDB4MUY1MSwgMHg5MUQyLCAweDkxRDIsIDB4MjFFMSwgMHg5MUQzLCAweDkxRDMsIDB4MzI3QSwKKyAgICAweDkxRDQsIDB4OTFENCwgMHgyM0IwLCAweDkxRDUsIDB4OTFENSwgMHgzMjdCLCAweDkxRDYsIDB4OTFENiwgMHgxRkNFLAorICAgIDB4OTFENywgMHg5MUQ3LCAweDMyN0MsIDB4OTFEOCwgMHg5MUQ4LCAweDIxMUUsIDB4OTFEOSwgMHg5MUQ5LCAweDIwMjEsCisgICAgMHg5MURBLCAweDkxREUsIDB4MzI3RCwgMHg5MURGLCAweDkxREYsIDB4MjRFMSwgMHg5MUUwLCAweDkxRTEsIDB4MzI4MiwKKyAgICAweDkxRTIsIDB4OTFFMiwgMHgyNEEzLCAweDkxRTMsIDB4OTFFOSwgMHgzMjg0LCAweDkxRUEsIDB4OTFFQSwgMHgyNEE0LAorICAgIDB4OTFFQiwgMHg5MUVGLCAweDMyOEIsIDB4OTFGMCwgMHg5MUYwLCAweDIyNzMsIDB4OTFGMSwgMHg5MUYxLCAweDMyOTAsCisgICAgMHg5MUYyLCAweDkxRjIsIDB4MjFCMCwgMHg5MUYzLCAweDkxRkUsIDB4MzI5MSwgMHg5MjQwLCAweDkyN0UsIDB4MzI5RCwKKyAgICAweDkyODAsIDB4OTJCNSwgMHgzMkRDLCAweDkyQjYsIDB4OTJCNiwgMHgyMUQxLCAweDkyQjcsIDB4OTJDRCwgMHgzMzEyLAorICAgIDB4OTJDRSwgMHg5MkNFLCAweDIxMUMsIDB4OTJDRiwgMHg5MkNGLCAweDMzMjksIDB4OTJEMCwgMHg5MkQwLCAweDIzNUQsCisgICAgMHg5MkQxLCAweDkyRDMsIDB4MzMyQSwgMHg5MkQ0LCAweDkyRDQsIDB4MjY4MiwgMHg5MkQ1LCAweDkyREUsIDB4MzMyRCwKKyAgICAweDkyREYsIDB4OTJERiwgMHgyMTBELCAweDkyRTAsIDB4OTJFMCwgMHgyMDVBLCAweDkyRTEsIDB4OTJGRCwgMHgzMzM3LAorICAgIDB4OTJGRSwgMHg5MkZFLCAweDFGOEQsIDB4OTM0MCwgMHg5MzRGLCAweDMzNTQsIDB4OTM1MCwgMHg5MzUwLCAweDIxRkYsCisgICAgMHg5MzUxLCAweDkzNUMsIDB4MzM2NCwgMHg5MzVELCAweDkzNUQsIDB4MUY1OCwgMHg5MzVFLCAweDkzNkYsIDB4MzM3MCwKKyAgICAweDkzNzAsIDB4OTM3MCwgMHgyMTVCLCAweDkzNzEsIDB4OTM3NSwgMHgzMzgyLCAweDkzNzYsIDB4OTM3NiwgMHgxRUI2LAorICAgIDB4OTM3NywgMHg5MzdFLCAweDMzODcsIDB4OTM4MCwgMHg5MzhCLCAweDMzOEYsIDB4OTM4QywgMHg5MzhDLCAweDIwREIsCisgICAgMHg5MzhELCAweDkzOUMsIDB4MzM5QiwgMHg5MzlELCAweDkzOUQsIDB4MjM2MCwgMHg5MzlFLCAweDkzQTQsIDB4MzNBQiwKKyAgICAweDkzQTUsIDB4OTNBNSwgMHgyMzYxLCAweDkzQTYsIDB4OTNBNiwgMHgzM0IyLCAweDkzQTcsIDB4OTNBNywgMHgyMDQwLAorICAgIDB4OTNBOCwgMHg5M0IzLCAweDMzQjMsIDB4OTNCNCwgMHg5M0I0LCAweDIyOEUsIDB4OTNCNSwgMHg5M0I3LCAweDMzQkYsCisgICAgMHg5M0I4LCAweDkzQjgsIDB4MUZERiwgMHg5M0I5LCAweDkzQkEsIDB4MzNDMiwgMHg5M0JCLCAweDkzQkIsIDB4MjM1RSwKKyAgICAweDkzQkMsIDB4OTNCQywgMHgzM0M0LCAweDkzQkQsIDB4OTNCRCwgMHgxRTZBLCAweDkzQkUsIDB4OTNDNSwgMHgzM0M1LAorICAgIDB4OTNDNiwgMHg5M0M2LCAweDIwMDIsIDB4OTNDNywgMHg5M0NFLCAweDMzQ0QsIDB4OTNDRiwgMHg5M0NGLCAweDIwOTMsCisgICAgMHg5M0QwLCAweDkzRDYsIDB4MzNENSwgMHg5M0Q3LCAweDkzRDcsIDB4MjM1RiwgMHg5M0Q4LCAweDkzREEsIDB4MzNEQywKKyAgICAweDkzREIsIDB4OTNEQiwgMHgxRUFDLCAweDkzREMsIDB4OTNEQywgMHgxRTU0LCAweDkzREQsIDB4OTNFMCwgMHgzM0RGLAorICAgIDB4OTNFMSwgMHg5M0UxLCAweDFGMDgsIDB4OTNFMiwgMHg5M0UzLCAweDMzRTMsIDB4OTNFNCwgMHg5M0U0LCAweDIwQzAsCisgICAgMHg5M0U1LCAweDkzRTUsIDB4MjM2MiwgMHg5M0U2LCAweDkzRTgsIDB4MzNFNSwgMHg5M0U5LCAweDkzRTksIDB4MjE2MCwKKyAgICAweDkzRUEsIDB4OTNFQSwgMHgzM0U4LCAweDkzRUIsIDB4OTNFQiwgMHgyMTlELCAweDkzRUMsIDB4OTNFQywgMHgxRjhFLAorICAgIDB4OTNFRCwgMHg5M0VELCAweDIyMkQsIDB4OTNFRSwgMHg5M0VFLCAweDMzRTksIDB4OTNFRiwgMHg5M0VGLCAweDIwNDcsCisgICAgMHg5M0YwLCAweDkzRjAsIDB4MzNFQSwgMHg5M0YxLCAweDkzRjEsIDB4MjI2MiwgMHg5M0YyLCAweDkzRjMsIDB4MzNFQiwKKyAgICAweDkzRjQsIDB4OTNGNCwgMHgxRjY3LCAweDkzRjUsIDB4OTNGNSwgMHgxRUIyLCAweDkzRjYsIDB4OTNGOSwgMHgzM0VELAorICAgIDB4OTNGQSwgMHg5M0ZBLCAweDFFQTksIDB4OTNGQiwgMHg5M0ZELCAweDMzRjEsIDB4OTNGRSwgMHg5M0ZFLCAweDFGQ0MsCisgICAgMHg5NDQwLCAweDk0NDMsIDB4MzNGNCwgMHg5NDQ0LCAweDk0NDQsIDB4MUY3MiwgMHg5NDQ1LCAweDk0NEMsIDB4MzNGOCwKKyAgICAweDk0NEQsIDB4OTQ0RCwgMHgyMDk4LCAweDk0NEUsIDB4OTQ0RiwgMHgzNDAwLCAweDk0NTAsIDB4OTQ1MCwgMHgxRTUyLAorICAgIDB4OTQ1MSwgMHg5NDUxLCAweDIwQTQsIDB4OTQ1MiwgMHg5NDUyLCAweDFGMUMsIDB4OTQ1MywgMHg5NDUzLCAweDIyOEYsCisgICAgMHg5NDU0LCAweDk0NTQsIDB4MzQwMiwgMHg5NDU1LCAweDk0NTUsIDB4MUZFRCwgMHg5NDU2LCAweDk0NTcsIDB4MzQwMywKKyAgICAweDk0NTgsIDB4OTQ1OCwgMHgyMzY1LCAweDk0NTksIDB4OTQ1QSwgMHgzNDA1LCAweDk0NUIsIDB4OTQ1QiwgMHgxRTJELAorICAgIDB4OTQ1QywgMHg5NDVDLCAweDIxNTIsIDB4OTQ1RCwgMHg5NDVELCAweDIzNjYsIDB4OTQ1RSwgMHg5NDVFLCAweDM0MDcsCisgICAgMHg5NDVGLCAweDk0NUYsIDB4MjBGQSwgMHg5NDYwLCAweDk0NjMsIDB4MzQwOCwgMHg5NDY0LCAweDk0NjQsIDB4MjM2MywKKyAgICAweDk0NjUsIDB4OTQ2NSwgMHgzNDBDLCAweDk0NjYsIDB4OTQ2NiwgMHgyMDlBLCAweDk0NjcsIDB4OTQ2RCwgMHgzNDBELAorICAgIDB4OTQ2RSwgMHg5NDZFLCAweDIwM0MsIDB4OTQ2RiwgMHg5NDcxLCAweDM0MTQsIDB4OTQ3MiwgMHg5NDcyLCAweDFGRjYsCisgICAgMHg5NDczLCAweDk0NzMsIDB4MzQxNywgMHg5NDc0LCAweDk0NzQsIDB4MjM2NCwgMHg5NDc1LCAweDk0NzUsIDB4MzQxOCwKKyAgICAweDk0NzYsIDB4OTQ3NiwgMHgxRTY5LCAweDk0NzcsIDB4OTQ3NywgMHgzNDE5LCAweDk0NzgsIDB4OTQ3OCwgMHgyMzY3LAorICAgIDB4OTQ3OSwgMHg5NDc5LCAweDM0MUEsIDB4OTQ3QSwgMHg5NDdBLCAweDIxMUQsIDB4OTQ3QiwgMHg5NDdFLCAweDM0MUIsCisgICAgMHg5NDgwLCAweDk0ODAsIDB4MjI1OSwgMHg5NDgxLCAweDk0ODEsIDB4MjA1NiwgMHg5NDgyLCAweDk0ODIsIDB4MjE2MywKKyAgICAweDk0ODMsIDB4OTQ4NiwgMHgzNDFGLCAweDk0ODcsIDB4OTQ4NywgMHgxRkE5LCAweDk0ODgsIDB4OTQ4OCwgMHgxRkZDLAorICAgIDB4OTQ4OSwgMHg5NEEwLCAweDM0MjMsIDB4OTRBMSwgMHg5NEExLCAweDFFMkUsIDB4OTRBMiwgMHg5NEIyLCAweDM0M0IsCisgICAgMHg5NEIzLCAweDk0QjMsIDB4MUVCQywgMHg5NEI0LCAweDk0QjQsIDB4MzQ0QywgMHg5NEI1LCAweDk0QjUsIDB4MjE0MiwKKyAgICAweDk0QjYsIDB4OTRCRSwgMHgzNDRELCAweDk0QkYsIDB4OTRCRiwgMHgyMDFFLCAweDk0QzAsIDB4OTRDMCwgMHgxRTQzLAorICAgIDB4OTRDMSwgMHg5NENCLCAweDM0NTYsIDB4OTRDQywgMHg5NENDLCAweDI0RDQsIDB4OTRDRCwgMHg5NEQ3LCAweDM0NjEsCisgICAgMHg5NEQ4LCAweDk0RDgsIDB4MjI2RiwgMHg5NEQ5LCAweDk0REYsIDB4MzQ2QywgMHg5NEUwLCAweDk0RTAsIDB4MUVENywKKyAgICAweDk0RTEsIDB4OTRGRSwgMHgzNDczLCAweDk1NDAsIDB4OTU3MSwgMHgzNDkxLCAweDk1NzIsIDB4OTU3MiwgMHgyMTJELAorICAgIDB4OTU3MywgMHg5NTdFLCAweDM0QzMsIDB4OTU4MCwgMHg5NTgyLCAweDM0Q0YsIDB4OTU4MywgMHg5NTgzLCAweDIyOUIsCisgICAgMHg5NTg0LCAweDk1OUQsIDB4MzREMiwgMHg5NTlFLCAweDk1OUUsIDB4MjI1NiwgMHg5NTlGLCAweDk1OUYsIDB4MjRBOCwKKyAgICAweDk1QTAsIDB4OTVCMiwgMHgzNEVDLCAweDk1QjMsIDB4OTVCMywgMHgxRTc5LCAweDk1QjQsIDB4OTVCOSwgMHgzNEZGLAorICAgIDB4OTVCQSwgMHg5NUJBLCAweDIyNUEsIDB4OTVCQiwgMHg5NUNFLCAweDM1MDUsIDB4OTVDRiwgMHg5NUNGLCAweDI0QTcsCisgICAgMHg5NUQwLCAweDk1RDAsIDB4MzUxOSwgMHg5NUQxLCAweDk1RDEsIDB4MjY4NiwgMHg5NUQyLCAweDk1RDIsIDB4MjRBNiwKKyAgICAweDk1RDMsIDB4OTVEMywgMHgzNTFBLCAweDk1RDQsIDB4OTVENCwgMHgyMUNFLCAweDk1RDUsIDB4OTVFMCwgMHgzNTFCLAorICAgIDB4OTVFMSwgMHg5NUUxLCAweDI0QTksIDB4OTVFMiwgMHg5NUU2LCAweDM1MjcsIDB4OTVFNywgMHg5NUU3LCAweDFGRTcsCisgICAgMHg5NUU4LCAweDk1RjAsIDB4MzUyQywgMHg5NUYxLCAweDk1RjEsIDB4MjExMiwgMHg5NUYyLCAweDk1RjcsIDB4MzUzNSwKKyAgICAweDk1RjgsIDB4OTVGOCwgMHgyMTNDLCAweDk1RjksIDB4OTVGRCwgMHgzNTNCLCAweDk1RkUsIDB4OTVGRSwgMHgxRjVDLAorICAgIDB4OTY0MCwgMHg5NjU1LCAweDM1NDAsIDB4OTY1NiwgMHg5NjU2LCAweDI0QzQsIDB4OTY1NywgMHg5NjdCLCAweDM1NTYsCisgICAgMHg5NjdDLCAweDk2N0MsIDB4MUVDQywgMHg5NjdELCAweDk2N0UsIDB4MzU3QiwgMHg5NjgwLCAweDk2RkUsIDB4MzU3RCwKKyAgICAweDk3NDAsIDB4OTc2NiwgMHgzNUZDLCAweDk3NjcsIDB4OTc2NywgMHgyNDZBLCAweDk3NjgsIDB4OTc2QiwgMHgzNjIzLAorICAgIDB4OTc2QywgMHg5NzZDLCAweDIxNzUsIDB4OTc2RCwgMHg5NzZELCAweDM2MjcsIDB4OTc2RSwgMHg5NzZFLCAweDI0NkQsCisgICAgMHg5NzZGLCAweDk3N0UsIDB4MzYyOCwgMHg5NzgwLCAweDk3OTUsIDB4MzYzOCwgMHg5Nzk2LCAweDk3OTYsIDB4MjQ2QiwKKyAgICAweDk3OTcsIDB4OTc5NywgMHgyMjVGLCAweDk3OTgsIDB4OTc5QywgMHgzNjRFLCAweDk3OUQsIDB4OTc5RCwgMHgxRUNFLAorICAgIDB4OTc5RSwgMHg5N0EyLCAweDM2NTMsIDB4OTdBMywgMHg5N0EzLCAweDIyNzIsIDB4OTdBNCwgMHg5N0JFLCAweDM2NTgsCisgICAgMHg5N0JGLCAweDk3QkYsIDB4MjQ3MywgMHg5N0MwLCAweDk3RUQsIDB4MzY3MywgMHg5N0VFLCAweDk3RUUsIDB4MjFGRSwKKyAgICAweDk3RUYsIDB4OTdGNiwgMHgzNkExLCAweDk3RjcsIDB4OTdGNywgMHgxRUZFLCAweDk3RjgsIDB4OTdGRSwgMHgzNkE5LAorICAgIDB4OTg0MCwgMHg5ODQ0LCAweDM2QjAsIDB4OTg0NSwgMHg5ODQ1LCAweDI0NzUsIDB4OTg0NiwgMHg5ODQ4LCAweDM2QjUsCisgICAgMHg5ODQ5LCAweDk4NDksIDB4MjIwQSwgMHg5ODRBLCAweDk4NEUsIDB4MzZCOCwgMHg5ODRGLCAweDk4NEYsIDB4MUY2RiwKKyAgICAweDk4NTAsIDB4OTg3MCwgMHgzNkJELCAweDk4NzEsIDB4OTg3MSwgMHgyNDY4LCAweDk4NzIsIDB4OTg3MiwgMHgzNkRFLAorICAgIDB4OTg3MywgMHg5ODczLCAweDIxMDAsIDB4OTg3NCwgMHg5ODdFLCAweDM2REYsIDB4OTg4MCwgMHg5ODgwLCAweDM2RUEsCisgICAgMHg5ODgxLCAweDk4ODEsIDB4MjQ3NiwgMHg5ODgyLCAweDk4OEEsIDB4MzZFQiwgMHg5ODhCLCAweDk4OEIsIDB4MUYyNywKKyAgICAweDk4OEMsIDB4OTg4QywgMHgyMEQ3LCAweDk4OEQsIDB4OTg5RiwgMHgzNkY0LCAweDk4QTAsIDB4OThBMCwgMHgyNDdDLAorICAgIDB4OThBMSwgMHg5OEE5LCAweDM3MDcsIDB4OThBQSwgMHg5OEFBLCAweDFGQTEsIDB4OThBQiwgMHg5OEI1LCAweDM3MTAsCisgICAgMHg5OEI2LCAweDk4QjYsIDB4MjJBQSwgMHg5OEI3LCAweDk4QjcsIDB4MjAwNSwgMHg5OEI4LCAweDk4QjksIDB4MzcxQiwKKyAgICAweDk4QkEsIDB4OThCQSwgMHgyNDZDLCAweDk4QkIsIDB4OThDNiwgMHgzNzFELCAweDk4QzcsIDB4OThDNywgMHgyMDNFLAorICAgIDB4OThDOCwgMHg5OENBLCAweDM3MjksIDB4OThDQiwgMHg5OENCLCAweDFFNEMsIDB4OThDQywgMHg5OENGLCAweDM3MkMsCisgICAgMHg5OEQwLCAweDk4RDAsIDB4MjEzQSwgMHg5OEQxLCAweDk4RDIsIDB4MzczMCwgMHg5OEQzLCAweDk4RDMsIDB4MjIwNCwKKyAgICAweDk4RDQsIDB4OThFMiwgMHgzNzMyLCAweDk4RTMsIDB4OThFMywgMHgyMEMzLCAweDk4RTQsIDB4OThFNCwgMHgyMTQwLAorICAgIDB4OThFNSwgMHg5OEU1LCAweDI0NzcsIDB4OThFNiwgMHg5OEVFLCAweDM3NDEsIDB4OThFRiwgMHg5OEVGLCAweDI0NzQsCisgICAgMHg5OEYwLCAweDk4RjEsIDB4Mzc0QSwgMHg5OEYyLCAweDk4RjIsIDB4MjBERCwgMHg5OEYzLCAweDk4RkUsIDB4Mzc0QywKKyAgICAweDk5NDAsIDB4OTk0MiwgMHgzNzU4LCAweDk5NDMsIDB4OTk0MywgMHgxRjY4LCAweDk5NDQsIDB4OTk0NCwgMHgzNzVCLAorICAgIDB4OTk0NSwgMHg5OTQ1LCAweDIxODUsIDB4OTk0NiwgMHg5OTY1LCAweDM3NUMsIDB4OTk2NiwgMHg5OTY2LCAweDI0NzIsCisgICAgMHg5OTY3LCAweDk5NkQsIDB4Mzc3QywgMHg5OTZFLCAweDk5NkUsIDB4MUVCNSwgMHg5OTZGLCAweDk5NzQsIDB4Mzc4MywKKyAgICAweDk5NzUsIDB4OTk3NSwgMHgyNDc4LCAweDk5NzYsIDB4OTk3OSwgMHgzNzg5LCAweDk5N0EsIDB4OTk3QSwgMHgxRjhCLAorICAgIDB4OTk3QiwgMHg5OTdCLCAweDI0ODQsIDB4OTk3QywgMHg5OTdFLCAweDM3OEQsIDB4OTk4MCwgMHg5OTg0LCAweDM3OTAsCisgICAgMHg5OTg1LCAweDk5ODUsIDB4MjY5OSwgMHg5OTg2LCAweDk5ODgsIDB4Mzc5NSwgMHg5OTg5LCAweDk5ODksIDB4MjQ4MiwKKyAgICAweDk5OEEsIDB4OTk4RCwgMHgzNzk4LCAweDk5OEUsIDB4OTk4RSwgMHgyMEExLCAweDk5OEYsIDB4OTk5MCwgMHgzNzlDLAorICAgIDB4OTk5MSwgMHg5OTkxLCAweDFGOTIsIDB4OTk5MiwgMHg5OTk4LCAweDM3OUUsIDB4OTk5OSwgMHg5OTk5LCAweDFGMzgsCisgICAgMHg5OTlBLCAweDk5QTgsIDB4MzdBNSwgMHg5OUE5LCAweDk5QTksIDB4MjQ4NSwgMHg5OUFBLCAweDk5QUYsIDB4MzdCNCwKKyAgICAweDk5QjAsIDB4OTlCMCwgMHgyNDgwLCAweDk5QjEsIDB4OTlCMSwgMHgyNDZFLCAweDk5QjIsIDB4OTlCMiwgMHgzN0JBLAorICAgIDB4OTlCMywgMHg5OUIzLCAweDI0N0IsIDB4OTlCNCwgMHg5OUI0LCAweDI0ODYsIDB4OTlCNSwgMHg5OUI1LCAweDI0NzEsCisgICAgMHg5OUI2LCAweDk5QkMsIDB4MzdCQiwgMHg5OUJELCAweDk5QkQsIDB4MjQ4MywgMHg5OUJFLCAweDk5QkUsIDB4MjQ3MCwKKyAgICAweDk5QkYsIDB4OTlCRiwgMHgzN0MyLCAweDk5QzAsIDB4OTlDMCwgMHgyNDY5LCAweDk5QzEsIDB4OTlDMSwgMHgzN0MzLAorICAgIDB4OTlDMiwgMHg5OUMyLCAweDI0N0YsIDB4OTlDMywgMHg5OUM4LCAweDM3QzQsIDB4OTlDOSwgMHg5OUM5LCAweDI0NkYsCisgICAgMHg5OUNBLCAweDk5Q0QsIDB4MzdDQSwgMHg5OUNFLCAweDk5Q0UsIDB4MjQ4MSwgMHg5OUNGLCAweDk5RDAsIDB4MzdDRSwKKyAgICAweDk5RDEsIDB4OTlEMSwgMHgyMjIwLCAweDk5RDIsIDB4OTlEOSwgMHgzN0QwLCAweDk5REEsIDB4OTlEQSwgMHgxRkY1LAorICAgIDB4OTlEQiwgMHg5OURGLCAweDM3RDgsIDB4OTlFMCwgMHg5OUUwLCAweDIwRjQsIDB4OTlFMSwgMHg5OUU0LCAweDM3REQsCisgICAgMHg5OUU1LCAweDk5RTUsIDB4MjQ3RCwgMHg5OUU2LCAweDk5RTcsIDB4MzdFMSwgMHg5OUU4LCAweDk5RTgsIDB4MjQ3OSwKKyAgICAweDk5RTksIDB4OTlFQiwgMHgzN0UzLCAweDk5RUMsIDB4OTlFQywgMHgyNDdFLCAweDk5RUQsIDB4OTlGMywgMHgzN0U2LAorICAgIDB4OTlGNCwgMHg5OUY0LCAweDI0N0EsIDB4OTlGNSwgMHg5OUZFLCAweDM3RUQsIDB4OUE0MCwgMHg5QTQ5LCAweDM3RjcsCisgICAgMHg5QTRBLCAweDlBNEEsIDB4MjBFMywgMHg5QTRCLCAweDlBNTYsIDB4MzgwMSwgMHg5QTU3LCAweDlBNTcsIDB4MjBBRCwKKyAgICAweDlBNTgsIDB4OUE2NCwgMHgzODBELCAweDlBNjUsIDB4OUE2NSwgMHgyNENCLCAweDlBNjYsIDB4OUE2NiwgMHgzODFBLAorICAgIDB4OUE2NywgMHg5QTY3LCAweDFGNTMsIDB4OUE2OCwgMHg5QTcwLCAweDM4MUIsIDB4OUE3MSwgMHg5QTcxLCAweDIxNTksCisgICAgMHg5QTcyLCAweDlBNzUsIDB4MzgyNCwgMHg5QTc2LCAweDlBNzYsIDB4MjAxMywgMHg5QTc3LCAweDlBNzcsIDB4MUYzMywKKyAgICAweDlBNzgsIDB4OUE3RSwgMHgzODI4LCAweDlBODAsIDB4OUE4NywgMHgzODJGLCAweDlBODgsIDB4OUE4OCwgMHgxRTVDLAorICAgIDB4OUE4OSwgMHg5QThCLCAweDM4MzcsIDB4OUE4QywgMHg5QThDLCAweDI0ODgsIDB4OUE4RCwgMHg5QTkwLCAweDM4M0EsCisgICAgMHg5QTkxLCAweDlBOTEsIDB4MjQ4NywgMHg5QTkyLCAweDlBOTYsIDB4MzgzRSwgMHg5QTk3LCAweDlBOTcsIDB4MjQ4QSwKKyAgICAweDlBOTgsIDB4OUE5OSwgMHgzODQzLCAweDlBOUEsIDB4OUE5QSwgMHgyNDg5LCAweDlBOUIsIDB4OUE5QiwgMHgyNDhCLAorICAgIDB4OUE5QywgMHg5QTlELCAweDM4NDUsIDB4OUE5RSwgMHg5QTlFLCAweDFGODMsIDB4OUE5RiwgMHg5QUExLCAweDM4NDcsCisgICAgMHg5QUEyLCAweDlBQTIsIDB4MjEwRiwgMHg5QUEzLCAweDlBQTMsIDB4MUZEQiwgMHg5QUE0LCAweDlBQTksIDB4Mzg0QSwKKyAgICAweDlBQUEsIDB4OUFBQSwgMHgyMEFGLCAweDlBQUIsIDB4OUFDRiwgMHgzODUwLCAweDlBRDAsIDB4OUFEMCwgMHgyNEMwLAorICAgIDB4OUFEMSwgMHg5QUQ1LCAweDM4NzUsIDB4OUFENiwgMHg5QUQ2LCAweDIyNkQsIDB4OUFENywgMHg5QUQ5LCAweDM4N0EsCisgICAgMHg5QURBLCAweDlBREEsIDB4MjRDMSwgMHg5QURCLCAweDlBRTEsIDB4Mzg3RCwgMHg5QUUyLCAweDlBRTIsIDB4MjBDQSwKKyAgICAweDlBRTMsIDB4OUFFMywgMHgzODg0LCAweDlBRTQsIDB4OUFFNCwgMHgyMEU3LCAweDlBRTUsIDB4OUFFNSwgMHgyNEMyLAorICAgIDB4OUFFNiwgMHg5QUZFLCAweDM4ODUsIDB4OUI0MCwgMHg5QjdFLCAweDM4OUUsIDB4OUI4MCwgMHg5QkQwLCAweDM4REQsCisgICAgMHg5QkQxLCAweDlCRDEsIDB4MjNEQywgMHg5QkQyLCAweDlCREIsIDB4MzkyRSwgMHg5QkRDLCAweDlCREMsIDB4MjNEQiwKKyAgICAweDlCREQsIDB4OUJGRSwgMHgzOTM4LCAweDlDNDAsIDB4OUM1MiwgMHgzOTVBLCAweDlDNTMsIDB4OUM1MywgMHgyMDVFLAorICAgIDB4OUM1NCwgMHg5QzU4LCAweDM5NkQsIDB4OUM1OSwgMHg5QzU5LCAweDIyNDQsIDB4OUM1QSwgMHg5QzVBLCAweDIzRTIsCisgICAgMHg5QzVCLCAweDlDNUIsIDB4Mzk3MiwgMHg5QzVDLCAweDlDNUMsIDB4MjBENCwgMHg5QzVELCAweDlDNzQsIDB4Mzk3MywKKyAgICAweDlDNzUsIDB4OUM3NSwgMHgyMTlGLCAweDlDNzYsIDB4OUM3OCwgMHgzOThCLCAweDlDNzksIDB4OUM3OSwgMHgxRTY2LAorICAgIDB4OUM3QSwgMHg5QzdFLCAweDM5OEUsIDB4OUM4MCwgMHg5Qzg1LCAweDM5OTMsIDB4OUM4NiwgMHg5Qzg2LCAweDFGNjMsCisgICAgMHg5Qzg3LCAweDlDOUMsIDB4Mzk5OSwgMHg5QzlELCAweDlDOUQsIDB4MjNERCwgMHg5QzlFLCAweDlDQUEsIDB4MzlBRiwKKyAgICAweDlDQUIsIDB4OUNBQiwgMHgyMTZCLCAweDlDQUMsIDB4OUNDOSwgMHgzOUJDLCAweDlDQ0EsIDB4OUNDQSwgMHgyMkI1LAorICAgIDB4OUNDQiwgMHg5Q0NFLCAweDM5REEsIDB4OUNDRiwgMHg5Q0NGLCAweDFGMjYsIDB4OUNEMCwgMHg5Q0U1LCAweDM5REUsCisgICAgMHg5Q0U2LCAweDlDRTYsIDB4MUU2MywgMHg5Q0U3LCAweDlDRTcsIDB4MjA4OCwgMHg5Q0U4LCAweDlDRUIsIDB4MzlGNCwKKyAgICAweDlDRUMsIDB4OUNFQywgMHgxRUJELCAweDlDRUQsIDB4OUNFRCwgMHgzOUY4LCAweDlDRUUsIDB4OUNFRSwgMHgyMzQxLAorICAgIDB4OUNFRiwgMHg5Q0ZBLCAweDM5RjksIDB4OUNGQiwgMHg5Q0ZCLCAweDFGNEIsIDB4OUNGQywgMHg5Q0ZELCAweDNBMDUsCisgICAgMHg5Q0ZFLCAweDlDRkUsIDB4MjI5MiwgMHg5RDQwLCAweDlENDEsIDB4M0EwNywgMHg5RDQyLCAweDlENDIsIDB4MjEyNCwKKyAgICAweDlENDMsIDB4OUQ0NSwgMHgzQTA5LCAweDlENDYsIDB4OUQ0NiwgMHgyMDQ4LCAweDlENDcsIDB4OUQ0NywgMHgyM0UwLAorICAgIDB4OUQ0OCwgMHg5RDRDLCAweDNBMEMsIDB4OUQ0RCwgMHg5RDRELCAweDIwNzcsIDB4OUQ0RSwgMHg5RDRFLCAweDNBMTEsCisgICAgMHg5RDRGLCAweDlENEYsIDB4MjIzQSwgMHg5RDUwLCAweDlENjAsIDB4M0ExMiwgMHg5RDYxLCAweDlENjEsIDB4MjBCMSwKKyAgICAweDlENjIsIDB4OUQ2NywgMHgzQTIzLCAweDlENjgsIDB4OUQ2OCwgMHgxRjQxLCAweDlENjksIDB4OUQ2OSwgMHgyMDFDLAorICAgIDB4OUQ2QSwgMHg5RDZELCAweDNBMjksIDB4OUQ2RSwgMHg5RDZFLCAweDIyQjgsIDB4OUQ2RiwgMHg5RDcwLCAweDNBMkQsCisgICAgMHg5RDcxLCAweDlENzEsIDB4MjI3NiwgMHg5RDcyLCAweDlENzQsIDB4M0EyRiwgMHg5RDc1LCAweDlENzUsIDB4MUY5QiwKKyAgICAweDlENzYsIDB4OUQ3QSwgMHgzQTMyLCAweDlEN0IsIDB4OUQ3QiwgMHgxRjlGLCAweDlEN0MsIDB4OUQ3QywgMHgzQTM3LAorICAgIDB4OUQ3RCwgMHg5RDdELCAweDI1Q0EsIDB4OUQ3RSwgMHg5RDdFLCAweDNBMzgsIDB4OUQ4MCwgMHg5RDg5LCAweDNBMzksCisgICAgMHg5RDhBLCAweDlEOEEsIDB4MjBCRSwgMHg5RDhCLCAweDlEOEMsIDB4M0E0MywgMHg5RDhELCAweDlEOEQsIDB4MUZCNCwKKyAgICAweDlEOEUsIDB4OUQ5MCwgMHgzQTQ1LCAweDlEOTEsIDB4OUQ5MSwgMHgyM0Q3LCAweDlEOTIsIDB4OUQ5OCwgMHgzQTQ4LAorICAgIDB4OUQ5OSwgMHg5RDk5LCAweDIxMDUsIDB4OUQ5QSwgMHg5REEwLCAweDNBNEYsIDB4OURBMSwgMHg5REExLCAweDIzRTEsCisgICAgMHg5REEyLCAweDlEQTIsIDB4MUZFQywgMHg5REEzLCAweDlEQTYsIDB4M0E1NiwgMHg5REE3LCAweDlEQTcsIDB4MjNFQSwKKyAgICAweDlEQTgsIDB4OURBQiwgMHgzQTVBLCAweDlEQUMsIDB4OURBQywgMHgyM0UzLCAweDlEQUQsIDB4OURBRCwgMHgyMTBFLAorICAgIDB4OURBRSwgMHg5REIxLCAweDNBNUUsIDB4OURCMiwgMHg5REIyLCAweDFGQTYsIDB4OURCMywgMHg5REIzLCAweDIwMDQsCisgICAgMHg5REI0LCAweDlEQkQsIDB4M0E2MiwgMHg5REJFLCAweDlEQkUsIDB4MUY5RCwgMHg5REJGLCAweDlEQzUsIDB4M0E2QywKKyAgICAweDlEQzYsIDB4OURDNiwgMHgyM0U1LCAweDlEQzcsIDB4OURDOCwgMHgzQTczLCAweDlEQzksIDB4OURDOSwgMHgyMjY0LAorICAgIDB4OURDQSwgMHg5RENDLCAweDNBNzUsIDB4OURDRCwgMHg5RENELCAweDI0RTIsIDB4OURDRSwgMHg5REQxLCAweDNBNzgsCisgICAgMHg5REQyLCAweDlERDIsIDB4MjNERSwgMHg5REQzLCAweDlERDQsIDB4M0E3QywgMHg5REQ1LCAweDlERDUsIDB4MUVDNCwKKyAgICAweDlERDYsIDB4OURFMCwgMHgzQTdFLCAweDlERTEsIDB4OURFMSwgMHgyMkI2LCAweDlERTIsIDB4OURFMiwgMHgyMEE5LAorICAgIDB4OURFMywgMHg5REYwLCAweDNBODksIDB4OURGMSwgMHg5REYxLCAweDIxMkIsIDB4OURGMiwgMHg5REYzLCAweDNBOTcsCisgICAgMHg5REY0LCAweDlERjQsIDB4MjBBNSwgMHg5REY1LCAweDlERjYsIDB4M0E5OSwgMHg5REY3LCAweDlERjcsIDB4MjY4QiwKKyAgICAweDlERjgsIDB4OURGOSwgMHgzQTlCLCAweDlERkEsIDB4OURGQSwgMHgxRjc2LCAweDlERkIsIDB4OURGQywgMHgzQTlELAorICAgIDB4OURGRCwgMHg5REZELCAweDIxNkQsIDB4OURGRSwgMHg5REZFLCAweDNBOUYsIDB4OUU0MCwgMHg5RTQ0LCAweDNBQTAsCisgICAgMHg5RTQ1LCAweDlFNDUsIDB4MjAwMSwgMHg5RTQ2LCAweDlFNDcsIDB4M0FBNSwgMHg5RTQ4LCAweDlFNDgsIDB4MjE5MSwKKyAgICAweDlFNDksIDB4OUU0OSwgMHgxRTUwLCAweDlFNEEsIDB4OUU1MSwgMHgzQUE3LCAweDlFNTIsIDB4OUU1MiwgMHgxRjlDLAorICAgIDB4OUU1MywgMHg5RTUzLCAweDNBQUYsIDB4OUU1NCwgMHg5RTU0LCAweDIzREEsIDB4OUU1NSwgMHg5RTU1LCAweDNBQjAsCisgICAgMHg5RTU2LCAweDlFNTYsIDB4MjA1MywgMHg5RTU3LCAweDlFNUMsIDB4M0FCMSwgMHg5RTVELCAweDlFNUQsIDB4MjNFOSwKKyAgICAweDlFNUUsIDB4OUU1RSwgMHgyM0U0LCAweDlFNUYsIDB4OUU2MCwgMHgzQUI3LCAweDlFNjEsIDB4OUU2MSwgMHgyMUQ1LAorICAgIDB4OUU2MiwgMHg5RTYyLCAweDNBQjksIDB4OUU2MywgMHg5RTYzLCAweDIzRTYsIDB4OUU2NCwgMHg5RTY2LCAweDNBQkEsCisgICAgMHg5RTY3LCAweDlFNjcsIDB4MjNERiwgMHg5RTY4LCAweDlFNkIsIDB4M0FCRCwgMHg5RTZDLCAweDlFNkMsIDB4MUU0RiwKKyAgICAweDlFNkQsIDB4OUU2RSwgMHgzQUMxLCAweDlFNkYsIDB4OUU2RiwgMHgyM0Q5LCAweDlFNzAsIDB4OUU3MSwgMHgzQUMzLAorICAgIDB4OUU3MiwgMHg5RTcyLCAweDIwMTQsIDB4OUU3MywgMHg5RTczLCAweDNBQzUsIDB4OUU3NCwgMHg5RTc0LCAweDIzRUMsCisgICAgMHg5RTc1LCAweDlFNzUsIDB4MjNFQiwgMHg5RTc2LCAweDlFN0EsIDB4M0FDNiwgMHg5RTdCLCAweDlFN0IsIDB4MjNEOCwKKyAgICAweDlFN0MsIDB4OUU3QywgMHgyM0VFLCAweDlFN0QsIDB4OUU3RSwgMHgzQUNCLCAweDlFODAsIDB4OUU4NCwgMHgzQUNELAorICAgIDB4OUU4NSwgMHg5RTg1LCAweDI2OEUsIDB4OUU4NiwgMHg5RTg2LCAweDNBRDIsIDB4OUU4NywgMHg5RTg3LCAweDIzRUQsCisgICAgMHg5RTg4LCAweDlFOTAsIDB4M0FEMywgMHg5RTkxLCAweDlFOTEsIDB4MUZGQSwgMHg5RTkyLCAweDlFOTUsIDB4M0FEQywKKyAgICAweDlFOTYsIDB4OUU5NiwgMHgyM0Q2LCAweDlFOTcsIDB4OUU5NywgMHgyM0U4LCAweDlFOTgsIDB4OUVBMSwgMHgzQUUwLAorICAgIDB4OUVBMiwgMHg5RUEyLCAweDIxMDYsIDB4OUVBMywgMHg5RUE1LCAweDNBRUEsIDB4OUVBNiwgMHg5RUE2LCAweDIwMEIsCisgICAgMHg5RUE3LCAweDlFQTgsIDB4M0FFRCwgMHg5RUE5LCAweDlFQTksIDB4MjE2NiwgMHg5RUFBLCAweDlFQUQsIDB4M0FFRiwKKyAgICAweDlFQUUsIDB4OUVBRSwgMHgyM0VGLCAweDlFQUYsIDB4OUVCMiwgMHgzQUYzLCAweDlFQjMsIDB4OUVCMywgMHgyMTg5LAorICAgIDB4OUVCNCwgMHg5RUI0LCAweDIwNTgsIDB4OUVCNSwgMHg5RUI2LCAweDNBRjcsIDB4OUVCNywgMHg5RUI3LCAweDIzRTcsCisgICAgMHg5RUI4LCAweDlFRjQsIDB4M0FGOSwgMHg5RUY1LCAweDlFRjUsIDB4MjFBMywgMHg5RUY2LCAweDlFRkUsIDB4M0IzNiwKKyAgICAweDlGNDAsIDB4OUY0RCwgMHgzQjNGLCAweDlGNEUsIDB4OUY0RSwgMHgyMTdBLCAweDlGNEYsIDB4OUY2RSwgMHgzQjRELAorICAgIDB4OUY2RiwgMHg5RjZGLCAweDIxQTUsIDB4OUY3MCwgMHg5RjdFLCAweDNCNkQsIDB4OUY4MCwgMHg5RjkxLCAweDNCN0MsCisgICAgMHg5RjkyLCAweDlGOTIsIDB4MjAyMiwgMHg5RjkzLCAweDlGOTcsIDB4M0I4RSwgMHg5Rjk4LCAweDlGOTgsIDB4MjRENiwKKyAgICAweDlGOTksIDB4OUZBNSwgMHgzQjkzLCAweDlGQTYsIDB4OUZBNiwgMHgyMzNBLCAweDlGQTcsIDB4OUZBOCwgMHgzQkEwLAorICAgIDB4OUZBOSwgMHg5RkE5LCAweDFFRUUsIDB4OUZBQSwgMHg5RkFCLCAweDNCQTIsIDB4OUZBQywgMHg5RkFDLCAweDI0RDUsCisgICAgMHg5RkFELCAweDlGQzgsIDB4M0JBNCwgMHg5RkM5LCAweDlGQzksIDB4MjIyOCwgMHg5RkNBLCAweDlGQ0MsIDB4M0JDMCwKKyAgICAweDlGQ0QsIDB4OUZDRCwgMHgyNEQ3LCAweDlGQ0UsIDB4OUZFMCwgMHgzQkMzLCAweDlGRTEsIDB4OUZFMSwgMHgyMEZDLAorICAgIDB4OUZFMiwgMHg5RkVBLCAweDNCRDYsIDB4OUZFQiwgMHg5RkVCLCAweDFFODcsIDB4OUZFQywgMHg5RkVELCAweDNCREYsCisgICAgMHg5RkVFLCAweDlGRUUsIDB4MjREOCwgMHg5RkVGLCAweDlGRjMsIDB4M0JFMSwgMHg5RkY0LCAweDlGRjQsIDB4MUVCQSwKKyAgICAweDlGRjUsIDB4OUZGQywgMHgzQkU2LCAweDlGRkQsIDB4OUZGRCwgMHgyMTE5LCAweDlGRkUsIDB4OUZGRSwgMHgzQkVFLAorICAgIDB4QTA0MCwgMHhBMDQyLCAweDNCRUYsIDB4QTA0MywgMHhBMDQzLCAweDIxNkMsIDB4QTA0NCwgMHhBMDQ1LCAweDNCRjIsCisgICAgMHhBMDQ2LCAweEEwNDYsIDB4MjREOSwgMHhBMDQ3LCAweEEwNDgsIDB4M0JGNCwgMHhBMDQ5LCAweEEwNDksIDB4MjIyNywKKyAgICAweEEwNEEsIDB4QTA0RCwgMHgzQkY2LCAweEEwNEUsIDB4QTA0RSwgMHgxRTVGLCAweEEwNEYsIDB4QTA1MywgMHgzQkZBLAorICAgIDB4QTA1NCwgMHhBMDU0LCAweDIyOUYsIDB4QTA1NSwgMHhBMDU5LCAweDNCRkYsIDB4QTA1QSwgMHhBMDVBLCAweDFGNUQsCisgICAgMHhBMDVCLCAweEEwNjAsIDB4M0MwNCwgMHhBMDYxLCAweEEwNjEsIDB4MUZCQywgMHhBMDYyLCAweEEwNjIsIDB4M0MwQSwKKyAgICAweEEwNjMsIDB4QTA2MywgMHgyNERBLCAweEEwNjQsIDB4QTA3MCwgMHgzQzBCLCAweEEwNzEsIDB4QTA3MSwgMHgyMTQ5LAorICAgIDB4QTA3MiwgMHhBMDczLCAweDNDMTgsIDB4QTA3NCwgMHhBMDc0LCAweDIwNDYsIDB4QTA3NSwgMHhBMDdFLCAweDNDMUEsCisgICAgMHhBMDgwLCAweEEwODAsIDB4MjAwMCwgMHhBMDgxLCAweEEwOTAsIDB4M0MyNCwgMHhBMDkxLCAweEEwOTEsIDB4MjE5MCwKKyAgICAweEEwOTIsIDB4QTA5MywgMHgzQzM0LCAweEEwOTQsIDB4QTA5NCwgMHgyMjA4LCAweEEwOTUsIDB4QTA5NSwgMHgzQzM2LAorICAgIDB4QTA5NiwgMHhBMDk2LCAweDFFRTYsIDB4QTA5NywgMHhBMEE4LCAweDNDMzcsIDB4QTBBOSwgMHhBMEE5LCAweDI0QzMsCisgICAgMHhBMEFBLCAweEEwQkUsIDB4M0M0OSwgMHhBMEJGLCAweEEwQkYsIDB4MjBDQywgMHhBMEMwLCAweEEwQ0QsIDB4M0M1RSwKKyAgICAweEEwQ0UsIDB4QTBDRSwgMHgyMzQwLCAweEEwQ0YsIDB4QTBEOCwgMHgzQzZDLCAweEEwRDksIDB4QTBEOSwgMHgxRUQxLAorICAgIDB4QTBEQSwgMHhBMERELCAweDNDNzYsIDB4QTBERSwgMHhBMERFLCAweDIxQUMsIDB4QTBERiwgMHhBMEVELCAweDNDN0EsCisgICAgMHhBMEVFLCAweEEwRUUsIDB4MjJBRiwgMHhBMEVGLCAweEEwRkUsIDB4M0M4OSwgMHhBMUExLCAweEExRkUsIDB4MDA2MCwKKyAgICAweEEyQTEsIDB4QTJBQSwgMHgyNkE5LCAweEEyQjEsIDB4QTJFMiwgMHgwMEJFLCAweEEyRTUsIDB4QTJFRSwgMHgwMEYwLAorICAgIDB4QTJGMSwgMHhBMkZDLCAweDAwRkEsIDB4QTNBMSwgMHhBM0ZFLCAweDAxMDYsIDB4QTRBMSwgMHhBNEYzLCAweDAxNjQsCisgICAgMHhBNUExLCAweEE1RjYsIDB4MDFCNywgMHhBNkExLCAweEE2QjgsIDB4MDIwRCwgMHhBNkMxLCAweEE2RjUsIDB4MDIyNSwKKyAgICAweEE3QTEsIDB4QTdDMSwgMHgwMjVBLCAweEE3RDEsIDB4QTdGMSwgMHgwMjdCLCAweEE4NDAsIDB4QTg3RSwgMHgyNkIzLAorICAgIDB4QTg4MCwgMHhBODk1LCAweDI2RjIsIDB4QThBMSwgMHhBOEMwLCAweDAyOUMsIDB4QThDNSwgMHhBOEVBLCAweDAyQkMsCisgICAgMHhBOTQwLCAweEE5NTcsIDB4MjcwOCwgMHhBOTU5LCAweEE5NUEsIDB4MjcyMCwgMHhBOTVDLCAweEE5NUMsIDB4MjcyMiwKKyAgICAweEE5NjAsIDB4QTk3RSwgMHgyNzIzLCAweEE5ODAsIDB4QTk5NSwgMHgyNzQyLCAweEE5OTYsIDB4QTk5NiwgMHgxRTE3LAorICAgIDB4QTlBNCwgMHhBOUVGLCAweDAyRTIsIDB4QUE0MCwgMHhBQTRDLCAweDNDOTksIDB4QUE0RCwgMHhBQTRELCAweDIxQjYsCisgICAgMHhBQTRFLCAweEFBNEUsIDB4MUUzRCwgMHhBQTRGLCAweEFBNzAsIDB4M0NBNiwgMHhBQTcxLCAweEFBNzEsIDB4MjIzNSwKKyAgICAweEFBNzIsIDB4QUE3MiwgMHgzQ0M4LCAweEFBNzMsIDB4QUE3MywgMHgyMzk3LCAweEFBNzQsIDB4QUE3NiwgMHgzQ0M5LAorICAgIDB4QUE3NywgMHhBQTc3LCAweDIzOTUsIDB4QUE3OCwgMHhBQTc5LCAweDNDQ0MsIDB4QUE3QSwgMHhBQTdBLCAweDIyM0YsCisgICAgMHhBQTdCLCAweEFBN0IsIDB4MjEyQSwgMHhBQTdDLCAweEFBN0UsIDB4M0NDRSwgMHhBQTgwLCAweEFBOTksIDB4M0NEMSwKKyAgICAweEFBOUEsIDB4QUE5QSwgMHgxRUQyLCAweEFBOUIsIDB4QUE5QiwgMHgzQ0VCLCAweEFBOUMsIDB4QUE5QywgMHgyMzk2LAorICAgIDB4QUE5RCwgMHhBQTlELCAweDIzOTgsIDB4QUE5RSwgMHhBQTlFLCAweDNDRUMsIDB4QUE5RiwgMHhBQTlGLCAweDIwQTIsCisgICAgMHhBQUEwLCAweEFBQTAsIDB4M0NFRCwgMHhBQUExLCAweEFBRkUsIDB4MDMyRSwgMHhBQjQwLCAweEFCNDAsIDB4MUY2NCwKKyAgICAweEFCNDEsIDB4QUI0MiwgMHgzQ0VFLCAweEFCNDMsIDB4QUI0MywgMHgyMDJCLCAweEFCNDQsIDB4QUI0NCwgMHgzQ0YwLAorICAgIDB4QUI0NSwgMHhBQjQ1LCAweDIzOTQsIDB4QUI0NiwgMHhBQjQ2LCAweDIxMzksIDB4QUI0NywgMHhBQjQ3LCAweDNDRjEsCisgICAgMHhBQjQ4LCAweEFCNDgsIDB4MjE1RiwgMHhBQjQ5LCAweEFCNDksIDB4MjFDMSwgMHhBQjRBLCAweEFCNEEsIDB4MjM5QSwKKyAgICAweEFCNEIsIDB4QUI0QywgMHgzQ0YyLCAweEFCNEQsIDB4QUI0RCwgMHgyMzk5LCAweEFCNEUsIDB4QUI3RSwgMHgzQ0Y0LAorICAgIDB4QUI4MCwgMHhBQkEwLCAweDNEMjUsIDB4QUJBMSwgMHhBQkMwLCAweDAzOEMsIDB4QUM0MCwgMHhBQzQ1LCAweDNENDYsCisgICAgMHhBQzQ2LCAweEFDNDYsIDB4MjFDMCwgMHhBQzQ3LCAweEFDNzAsIDB4M0Q0QywgMHhBQzcxLCAweEFDNzEsIDB4MjQ2MCwKKyAgICAweEFDNzIsIDB4QUM3QiwgMHgzRDc2LCAweEFDN0MsIDB4QUM3QywgMHgyNDVDLCAweEFDN0QsIDB4QUM3RSwgMHgzRDgwLAorICAgIDB4QUM4MCwgMHhBQzhDLCAweDNEODIsIDB4QUM4RCwgMHhBQzhELCAweDIxNUQsIDB4QUM4RSwgMHhBQzkyLCAweDNEOEYsCisgICAgMHhBQzkzLCAweEFDOTMsIDB4MjIyNSwgMHhBQzk0LCAweEFDOTQsIDB4MjA2QSwgMHhBQzk1LCAweEFDQTAsIDB4M0Q5NCwKKyAgICAweEFENDAsIDB4QUQ0OCwgMHgzREEwLCAweEFENDksIDB4QUQ0OSwgMHgyNDYxLCAweEFENEEsIDB4QUQ1RCwgMHgzREE5LAorICAgIDB4QUQ1RSwgMHhBRDVFLCAweDI0NUIsIDB4QUQ1RiwgMHhBRDYwLCAweDNEQkQsIDB4QUQ2MSwgMHhBRDYxLCAweDI0NjIsCisgICAgMHhBRDYyLCAweEFENjcsIDB4M0RCRiwgMHhBRDY4LCAweEFENjgsIDB4MUY1NCwgMHhBRDY5LCAweEFENzMsIDB4M0RDNSwKKyAgICAweEFENzQsIDB4QUQ3NCwgMHgyNDVGLCAweEFENzUsIDB4QUQ3RSwgMHgzREQwLCAweEFEODAsIDB4QUQ4MSwgMHgzRERBLAorICAgIDB4QUQ4MiwgMHhBRDgyLCAweDIwRUMsIDB4QUQ4MywgMHhBRDg2LCAweDNEREMsIDB4QUQ4NywgMHhBRDg3LCAweDI0NUQsCisgICAgMHhBRDg4LCAweEFEOEEsIDB4M0RFMCwgMHhBRDhCLCAweEFEOEIsIDB4MjQ2MywgMHhBRDhDLCAweEFEOTAsIDB4M0RFMywKKyAgICAweEFEOTEsIDB4QUQ5MSwgMHgyNDY0LCAweEFEOTIsIDB4QURBMCwgMHgzREU4LCAweEFFNDAsIDB4QUU1MywgMHgzREY3LAorICAgIDB4QUU1NCwgMHhBRTU0LCAweDI0QTUsIDB4QUU1NSwgMHhBRTYxLCAweDNFMEIsIDB4QUU2MiwgMHhBRTYyLCAweDFFNzAsCisgICAgMHhBRTYzLCAweEFFN0UsIDB4M0UxOCwgMHhBRTgwLCAweEFFODAsIDB4MjA4RiwgMHhBRTgxLCAweEFFODQsIDB4M0UzNCwKKyAgICAweEFFODUsIDB4QUU4NSwgMHgxRTQyLCAweEFFODYsIDB4QUU4QSwgMHgzRTM4LCAweEFFOEIsIDB4QUU4QiwgMHgxRjRFLAorICAgIDB4QUU4QywgMHhBRTkzLCAweDNFM0QsIDB4QUU5NCwgMHhBRTk0LCAweDFFQjEsIDB4QUU5NSwgMHhBRTlGLCAweDNFNDUsCisgICAgMHhBRUEwLCAweEFFQTAsIDB4MUU4QiwgMHhBRjQwLCAweEFGNjMsIDB4M0U1MCwgMHhBRjY0LCAweEFGNjQsIDB4MUZDNiwKKyAgICAweEFGNjUsIDB4QUY3QSwgMHgzRTc0LCAweEFGN0IsIDB4QUY3QiwgMHgyNUFFLCAweEFGN0MsIDB4QUY3RSwgMHgzRThBLAorICAgIDB4QUY4MCwgMHhBRjgxLCAweDNFOEQsIDB4QUY4MiwgMHhBRjgyLCAweDFGMDEsIDB4QUY4MywgMHhBRjgzLCAweDIyMDAsCisgICAgMHhBRjg0LCAweEFGOEQsIDB4M0U4RiwgMHhBRjhFLCAweEFGOEUsIDB4MjVCMiwgMHhBRjhGLCAweEFGOEYsIDB4MUU5NywKKyAgICAweEFGOTAsIDB4QUY5MCwgMHgzRTk5LCAweEFGOTEsIDB4QUY5MSwgMHgyMEFCLCAweEFGOTIsIDB4QUY5QiwgMHgzRTlBLAorICAgIDB4QUY5QywgMHhBRjlDLCAweDI1QjMsIDB4QUY5RCwgMHhBRjlFLCAweDNFQTQsIDB4QUY5RiwgMHhBRjlGLCAweDIwMjgsCisgICAgMHhBRkEwLCAweEFGQTAsIDB4M0VBNiwgMHhCMDQwLCAweEIwNDAsIDB4M0VBNywgMHhCMDQxLCAweEIwNDIsIDB4MjVBRiwKKyAgICAweEIwNDMsIDB4QjA0MywgMHgzRUE4LCAweEIwNDQsIDB4QjA0NCwgMHgyNUIxLCAweEIwNDUsIDB4QjA0RSwgMHgzRUE5LAorICAgIDB4QjA0RiwgMHhCMDRGLCAweDI1QUMsIDB4QjA1MCwgMHhCMDUzLCAweDNFQjMsIDB4QjA1NCwgMHhCMDU0LCAweDFFNEUsCisgICAgMHhCMDU1LCAweEIwNTYsIDB4M0VCNywgMHhCMDU3LCAweEIwNTcsIDB4MjIwMiwgMHhCMDU4LCAweEIwNTgsIDB4MjVBQiwKKyAgICAweEIwNTksIDB4QjA1OSwgMHgyMjg2LCAweEIwNUEsIDB4QjA1QSwgMHgzRUI5LCAweEIwNUIsIDB4QjA1QiwgMHgyNUFELAorICAgIDB4QjA1QywgMHhCMDVDLCAweDNFQkEsIDB4QjA1RCwgMHhCMDVELCAweDI1QjYsIDB4QjA1RSwgMHhCMDVFLCAweDNFQkIsCisgICAgMHhCMDVGLCAweEIwNUYsIDB4MjFFMywgMHhCMDYwLCAweEIwNjEsIDB4MjVCNCwgMHhCMDYyLCAweEIwNjIsIDB4MjIyRiwKKyAgICAweEIwNjMsIDB4QjA2MywgMHgyMTY1LCAweEIwNjQsIDB4QjA2NCwgMHgyNUI3LCAweEIwNjUsIDB4QjA2QiwgMHgzRUJDLAorICAgIDB4QjA2QywgMHhCMDZDLCAweDFFRTksIDB4QjA2RCwgMHhCMDdDLCAweDNFQzMsIDB4QjA3RCwgMHhCMDdELCAweDFFMjUsCisgICAgMHhCMDdFLCAweEIwN0UsIDB4M0VEMywgMHhCMDgwLCAweEIwOTYsIDB4M0VENCwgMHhCMDk3LCAweEIwOTcsIDB4MjVDMCwKKyAgICAweEIwOTgsIDB4QjA5OCwgMHgzRUVCLCAweEIwOTksIDB4QjA5OSwgMHgyMjlBLCAweEIwOUEsIDB4QjBBMCwgMHgzRUVDLAorICAgIDB4QjBBMSwgMHhCMEZFLCAweDAzQUMsIDB4QjE0MCwgMHhCMTRBLCAweDNFRjMsIDB4QjE0QiwgMHhCMTRCLCAweDIyNkUsCisgICAgMHhCMTRDLCAweEIxNEMsIDB4M0VGRSwgMHhCMTRELCAweEIxNEQsIDB4MUZCRCwgMHhCMTRFLCAweEIxNEUsIDB4M0VGRiwKKyAgICAweEIxNEYsIDB4QjE0RiwgMHgxRjg0LCAweEIxNTAsIDB4QjE1MCwgMHgyMEIyLCAweEIxNTEsIDB4QjE1MSwgMHgzRjAwLAorICAgIDB4QjE1MiwgMHhCMTUyLCAweDIwNDMsIDB4QjE1MywgMHhCMTdFLCAweDNGMDEsIDB4QjE4MCwgMHhCMTk2LCAweDNGMkQsCisgICAgMHhCMTk3LCAweEIxOTcsIDB4MjY4NCwgMHhCMTk4LCAweEIxQTAsIDB4M0Y0NCwgMHhCMUExLCAweEIxRkUsIDB4MDQwQSwKKyAgICAweEIyNDAsIDB4QjI0MCwgMHgzRjRELCAweEIyNDEsIDB4QjI0MSwgMHgyNEVGLCAweEIyNDIsIDB4QjI2NiwgMHgzRjRFLAorICAgIDB4QjI2NywgMHhCMjY3LCAweDI0RUUsIDB4QjI2OCwgMHhCMjZDLCAweDNGNzMsIDB4QjI2RCwgMHhCMjZELCAweDIwNzQsCisgICAgMHhCMjZFLCAweEIyNzMsIDB4M0Y3OCwgMHhCMjc0LCAweEIyNzQsIDB4MjY4NywgMHhCMjc1LCAweEIyN0UsIDB4M0Y3RSwKKyAgICAweEIyODAsIDB4QjI4MCwgMHgyNEYwLCAweEIyODEsIDB4QjI4OCwgMHgzRjg4LCAweEIyODksIDB4QjI4OSwgMHgyNjhELAorICAgIDB4QjI4QSwgMHhCMjk5LCAweDNGOTAsIDB4QjI5QSwgMHhCMjlBLCAweDIyQTAsIDB4QjI5QiwgMHhCMkEwLCAweDNGQTAsCisgICAgMHhCMkExLCAweEIyRkUsIDB4MDQ2OCwgMHhCMzQwLCAweEIzNDIsIDB4M0ZBNiwgMHhCMzQzLCAweEIzNDMsIDB4MUZBQiwKKyAgICAweEIzNDQsIDB4QjM2RiwgMHgzRkE5LCAweEIzNzAsIDB4QjM3MCwgMHgyNkE4LCAweEIzNzEsIDB4QjM3RSwgMHgzRkQ1LAorICAgIDB4QjM4MCwgMHhCMzg3LCAweDNGRTMsIDB4QjM4OCwgMHhCMzg4LCAweDI0RTksIDB4QjM4OSwgMHhCMzhCLCAweDNGRUIsCisgICAgMHhCMzhDLCAweEIzOEMsIDB4MjRFNSwgMHhCMzhELCAweEIzOEQsIDB4M0ZFRSwgMHhCMzhFLCAweEIzOEUsIDB4MjFGQSwKKyAgICAweEIzOEYsIDB4QjNBMCwgMHgzRkVGLCAweEIzQTEsIDB4QjNGRSwgMHgwNEM2LCAweEI0NDAsIDB4QjQ1MywgMHg0MDAxLAorICAgIDB4QjQ1NCwgMHhCNDU0LCAweDIxNDgsIDB4QjQ1NSwgMHhCNDU3LCAweDQwMTUsIDB4QjQ1OCwgMHhCNDU4LCAweDI0RTQsCisgICAgMHhCNDU5LCAweEI0NUQsIDB4NDAxOCwgMHhCNDVFLCAweEI0NUUsIDB4MjRFNiwgMHhCNDVGLCAweEI0NUYsIDB4MjBGNywKKyAgICAweEI0NjAsIDB4QjQ2MCwgMHg0MDFELCAweEI0NjEsIDB4QjQ2MSwgMHgyMDZCLCAweEI0NjIsIDB4QjQ3NCwgMHg0MDFFLAorICAgIDB4QjQ3NSwgMHhCNDc1LCAweDIyQTcsIDB4QjQ3NiwgMHhCNDdELCAweDQwMzEsIDB4QjQ3RSwgMHhCNDdFLCAweDI0RUMsCisgICAgMHhCNDgwLCAweEI0ODIsIDB4NDAzOSwgMHhCNDgzLCAweEI0ODMsIDB4MjRFQiwgMHhCNDg0LCAweEI0ODgsIDB4NDAzQywKKyAgICAweEI0ODksIDB4QjQ4OSwgMHgyNEUzLCAweEI0OEEsIDB4QjQ5MiwgMHg0MDQxLCAweEI0OTMsIDB4QjQ5MywgMHgyNEVBLAorICAgIDB4QjQ5NCwgMHhCNEEwLCAweDQwNEEsIDB4QjRBMSwgMHhCNEZFLCAweDA1MjQsIDB4QjU0MCwgMHhCNTQwLCAweDQwNTcsCisgICAgMHhCNTQxLCAweEI1NDEsIDB4MUU5MiwgMHhCNTQyLCAweEI1NEEsIDB4NDA1OCwgMHhCNTRCLCAweEI1NEIsIDB4MUUyNywKKyAgICAweEI1NEMsIDB4QjU1NSwgMHg0MDYxLCAweEI1NTYsIDB4QjU1NiwgMHgxRkU2LCAweEI1NTcsIDB4QjU1OSwgMHg0MDZCLAorICAgIDB4QjU1QSwgMHhCNTVBLCAweDI0RTcsIDB4QjU1QiwgMHhCNTVCLCAweDIwMTIsIDB4QjU1QywgMHhCNTVDLCAweDFFRUMsCisgICAgMHhCNTVELCAweEI1NjAsIDB4NDA2RSwgMHhCNTYxLCAweEI1NjEsIDB4MjRFOCwgMHhCNTYyLCAweEI1N0UsIDB4NDA3MiwKKyAgICAweEI1ODAsIDB4QjU5QiwgMHg0MDhGLCAweEI1OUMsIDB4QjU5QywgMHgxRjY2LCAweEI1OUQsIDB4QjU5RCwgMHgyNERDLAorICAgIDB4QjU5RSwgMHhCNUEwLCAweDQwQUIsIDB4QjVBMSwgMHhCNUZFLCAweDA1ODIsIDB4QjY0MCwgMHhCNjUxLCAweDQwQUUsCisgICAgMHhCNjUyLCAweEI2NTIsIDB4MjZBMiwgMHhCNjUzLCAweEI2NTQsIDB4NDBDMCwgMHhCNjU1LCAweEI2NTUsIDB4MjRERCwKKyAgICAweEI2NTYsIDB4QjY1OCwgMHg0MEMyLCAweEI2NTksIDB4QjY1OSwgMHgyMDBFLCAweEI2NUEsIDB4QjY1QSwgMHg0MEM1LAorICAgIDB4QjY1QiwgMHhCNjVCLCAweDI0REIsIDB4QjY1QywgMHhCNjVDLCAweDFFQjgsIDB4QjY1RCwgMHhCNjdFLCAweDQwQzYsCisgICAgMHhCNjgwLCAweEI2QTAsIDB4NDBFOCwgMHhCNkExLCAweEI2RkUsIDB4MDVFMCwgMHhCNzQwLCAweEI3NEQsIDB4NDEwOSwKKyAgICAweEI3NEUsIDB4Qjc0RSwgMHgyMjk1LCAweEI3NEYsIDB4Qjc1MCwgMHg0MTE3LCAweEI3NTEsIDB4Qjc1MSwgMHgxRTgwLAorICAgIDB4Qjc1MiwgMHhCNzU4LCAweDQxMTksIDB4Qjc1OSwgMHhCNzU5LCAweDI2NzcsIDB4Qjc1QSwgMHhCNzYzLCAweDQxMjAsCisgICAgMHhCNzY0LCAweEI3NjQsIDB4MjYyNCwgMHhCNzY1LCAweEI3NjUsIDB4MUY2OSwgMHhCNzY2LCAweEI3NjYsIDB4MjIyQiwKKyAgICAweEI3NjcsIDB4Qjc3NiwgMHg0MTJBLCAweEI3NzcsIDB4Qjc3NywgMHgyNTdGLCAweEI3NzgsIDB4Qjc3OCwgMHgxRjVCLAorICAgIDB4Qjc3OSwgMHhCNzdFLCAweDQxM0EsIDB4Qjc4MCwgMHhCNzgwLCAweDIxOUIsIDB4Qjc4MSwgMHhCNzgxLCAweDQxNDAsCisgICAgMHhCNzgyLCAweEI3ODIsIDB4MjY3RCwgMHhCNzgzLCAweEI3QTAsIDB4NDE0MSwgMHhCN0ExLCAweEI3RkUsIDB4MDYzRSwKKyAgICAweEI4NDAsIDB4Qjg0MiwgMHg0MTVGLCAweEI4NDMsIDB4Qjg0MywgMHgyMUEwLCAweEI4NDQsIDB4Qjg0NCwgMHgyMTg2LAorICAgIDB4Qjg0NSwgMHhCODQ1LCAweDQxNjIsIDB4Qjg0NiwgMHhCODQ2LCAweDIwRUQsIDB4Qjg0NywgMHhCODRDLCAweDQxNjMsCisgICAgMHhCODRELCAweEI4NEQsIDB4MjVCOSwgMHhCODRFLCAweEI4NTAsIDB4NDE2OSwgMHhCODUxLCAweEI4NTEsIDB4MUZFQSwKKyAgICAweEI4NTIsIDB4Qjg1OSwgMHg0MTZDLCAweEI4NUEsIDB4Qjg1QSwgMHgxRUE0LCAweEI4NUIsIDB4Qjg1QiwgMHgyMEUxLAorICAgIDB4Qjg1QywgMHhCODVDLCAweDQxNzQsIDB4Qjg1RCwgMHhCODVELCAweDI1QjgsIDB4Qjg1RSwgMHhCODVFLCAweDIyNjAsCisgICAgMHhCODVGLCAweEI4NUYsIDB4NDE3NSwgMHhCODYwLCAweEI4NjAsIDB4MjBFMiwgMHhCODYxLCAweEI4NzYsIDB4NDE3NiwKKyAgICAweEI4NzcsIDB4Qjg3NywgMHgyMTQxLCAweEI4NzgsIDB4Qjg3RSwgMHg0MThDLCAweEI4ODAsIDB4Qjg4MSwgMHg0MTkzLAorICAgIDB4Qjg4MiwgMHhCODgyLCAweDFGQzcsIDB4Qjg4MywgMHhCOEEwLCAweDQxOTUsIDB4QjhBMSwgMHhCOEZFLCAweDA2OUMsCisgICAgMHhCOTQwLCAweEI5NEYsIDB4NDFCMywgMHhCOTUwLCAweEI5NTAsIDB4MUU0MSwgMHhCOTUxLCAweEI5NjAsIDB4NDFDMywKKyAgICAweEI5NjEsIDB4Qjk2MSwgMHgyNUU0LCAweEI5NjIsIDB4Qjk3QSwgMHg0MUQzLCAweEI5N0IsIDB4Qjk3QiwgMHgxRjg2LAorICAgIDB4Qjk3QywgMHhCOTdFLCAweDQxRUMsIDB4Qjk4MCwgMHhCOTlDLCAweDQxRUYsIDB4Qjk5RCwgMHhCOTlELCAweDFGQjMsCisgICAgMHhCOTlFLCAweEI5OUYsIDB4NDIwQywgMHhCOUEwLCAweEI5QTAsIDB4MUVFRiwgMHhCOUExLCAweEI5RkUsIDB4MDZGQSwKKyAgICAweEJBNDAsIDB4QkE0MSwgMHg0MjBFLCAweEJBNDIsIDB4QkE0MiwgMHgyMkE0LCAweEJBNDMsIDB4QkE0MywgMHg0MjEwLAorICAgIDB4QkE0NCwgMHhCQTQ0LCAweDI1RTgsIDB4QkE0NSwgMHhCQTU1LCAweDQyMTEsIDB4QkE1NiwgMHhCQTU2LCAweDI1RTMsCisgICAgMHhCQTU3LCAweEJBNTgsIDB4NDIyMiwgMHhCQTU5LCAweEJBNTksIDB4MjExMSwgMHhCQTVBLCAweEJBNUYsIDB4NDIyNCwKKyAgICAweEJBNjAsIDB4QkE2MCwgMHgyNUU2LCAweEJBNjEsIDB4QkE2OSwgMHg0MjJBLCAweEJBNkEsIDB4QkE2QSwgMHgyNUU3LAorICAgIDB4QkE2QiwgMHhCQTczLCAweDQyMzMsIDB4QkE3NCwgMHhCQTc0LCAweDIwNDEsIDB4QkE3NSwgMHhCQTdFLCAweDQyM0MsCisgICAgMHhCQTgwLCAweEJBODMsIDB4NDI0NiwgMHhCQTg0LCAweEJBODQsIDB4MjVFQSwgMHhCQTg1LCAweEJBODUsIDB4NDI0QSwKKyAgICAweEJBODYsIDB4QkE4NiwgMHgxRjhGLCAweEJBODcsIDB4QkE4NywgMHg0MjRCLCAweEJBODgsIDB4QkE4OCwgMHgyNUVDLAorICAgIDB4QkE4OSwgMHhCQThDLCAweDQyNEMsIDB4QkE4RCwgMHhCQThELCAweDI1RUIsIDB4QkE4RSwgMHhCQTlELCAweDQyNTAsCisgICAgMHhCQTlFLCAweEJBOUUsIDB4MjBEMCwgMHhCQTlGLCAweEJBOUYsIDB4MjAxRCwgMHhCQUEwLCAweEJBQTAsIDB4NDI2MCwKKyAgICAweEJBQTEsIDB4QkFGRSwgMHgwNzU4LCAweEJCNDAsIDB4QkI0MCwgMHgxRkY3LCAweEJCNDEsIDB4QkI0OCwgMHg0MjYxLAorICAgIDB4QkI0OSwgMHhCQjQ5LCAweDFFOEQsIDB4QkI0QSwgMHhCQjU3LCAweDQyNjksIDB4QkI1OCwgMHhCQjU4LCAweDI1RTksCisgICAgMHhCQjU5LCAweEJCNUEsIDB4NDI3NywgMHhCQjVCLCAweEJCNUIsIDB4MjVFRSwgMHhCQjVDLCAweEJCNUMsIDB4MjAzQSwKKyAgICAweEJCNUQsIDB4QkI1RiwgMHg0Mjc5LCAweEJCNjAsIDB4QkI2MCwgMHgyNjkzLCAweEJCNjEsIDB4QkI2NCwgMHg0MjdDLAorICAgIDB4QkI2NSwgMHhCQjY1LCAweDI1RTUsIDB4QkI2NiwgMHhCQjY2LCAweDI1RUQsIDB4QkI2NywgMHhCQjY3LCAweDQyODAsCisgICAgMHhCQjY4LCAweEJCNjgsIDB4MjAwOSwgMHhCQjY5LCAweEJCNjksIDB4NDI4MSwgMHhCQjZBLCAweEJCNkEsIDB4MjA2NSwKKyAgICAweEJCNkIsIDB4QkI2RCwgMHg0MjgyLCAweEJCNkUsIDB4QkI2RSwgMHgyNkEzLCAweEJCNkYsIDB4QkI3RSwgMHg0Mjg1LAorICAgIDB4QkI4MCwgMHhCQkEwLCAweDQyOTUsIDB4QkJBMSwgMHhCQkZFLCAweDA3QjYsIDB4QkM0MCwgMHhCQzUxLCAweDQyQjYsCisgICAgMHhCQzUyLCAweEJDNTIsIDB4MjVGNSwgMHhCQzUzLCAweEJDNTMsIDB4MUVGQywgMHhCQzU0LCAweEJDNTksIDB4NDJDOCwKKyAgICAweEJDNUEsIDB4QkM1QSwgMHgyMDI0LCAweEJDNUIsIDB4QkM2MCwgMHg0MkNFLCAweEJDNjEsIDB4QkM2MSwgMHgyNjlCLAorICAgIDB4QkM2MiwgMHhCQzYyLCAweDQyRDQsIDB4QkM2MywgMHhCQzYzLCAweDI1RjMsIDB4QkM2NCwgMHhCQzY0LCAweDQyRDUsCisgICAgMHhCQzY1LCAweEJDNjUsIDB4MjJEOSwgMHhCQzY2LCAweEJDNjYsIDB4NDJENiwgMHhCQzY3LCAweEJDNjcsIDB4MjVGNCwKKyAgICAweEJDNjgsIDB4QkM2OCwgMHg0MkQ3LCAweEJDNjksIDB4QkM2OSwgMHgyNDFCLCAweEJDNkEsIDB4QkM2QywgMHg0MkQ4LAorICAgIDB4QkM2RCwgMHhCQzZELCAweDFGQzgsIDB4QkM2RSwgMHhCQzZFLCAweDQyREIsIDB4QkM2RiwgMHhCQzZGLCAweDFGN0IsCisgICAgMHhCQzcwLCAweEJDNzAsIDB4NDJEQywgMHhCQzcxLCAweEJDNzEsIDB4MjQxRCwgMHhCQzcyLCAweEJDNzIsIDB4NDJERCwKKyAgICAweEJDNzMsIDB4QkM3MywgMHgyMjRDLCAweEJDNzQsIDB4QkM3NCwgMHgxRjQ4LCAweEJDNzUsIDB4QkM3NSwgMHgyNDFDLAorICAgIDB4QkM3NiwgMHhCQzc3LCAweDI0MUUsIDB4QkM3OCwgMHhCQzc4LCAweDIwRkYsIDB4QkM3OSwgMHhCQzc5LCAweDIxOUEsCisgICAgMHhCQzdBLCAweEJDN0EsIDB4NDJERSwgMHhCQzdCLCAweEJDN0IsIDB4MjA5MSwgMHhCQzdDLCAweEJDN0QsIDB4NDJERiwKKyAgICAweEJDN0UsIDB4QkM3RSwgMHgyMEE3LCAweEJDODAsIDB4QkM4MSwgMHg0MkUxLCAweEJDODIsIDB4QkM4MiwgMHgyNDIzLAorICAgIDB4QkM4MywgMHhCQzgzLCAweDFFOUIsIDB4QkM4NCwgMHhCQzg0LCAweDI0MjIsIDB4QkM4NSwgMHhCQzg1LCAweDQyRTMsCisgICAgMHhCQzg2LCAweEJDODYsIDB4MjExMCwgMHhCQzg3LCAweEJDODcsIDB4NDJFNCwgMHhCQzg4LCAweEJDODgsIDB4MjI4RCwKKyAgICAweEJDODksIDB4QkM4OSwgMHgxRjcxLCAweEJDOEEsIDB4QkM4QSwgMHgxRUY4LCAweEJDOEIsIDB4QkM4QiwgMHgyNDIxLAorICAgIDB4QkM4QywgMHhCQzhFLCAweDQyRTUsIDB4QkM4RiwgMHhCQzhGLCAweDFFRjMsIDB4QkM5MCwgMHhCQzk5LCAweDQyRTgsCisgICAgMHhCQzlBLCAweEJDOUEsIDB4MjFCMSwgMHhCQzlCLCAweEJDOUIsIDB4MjQyNiwgMHhCQzlDLCAweEJDOUMsIDB4MjQyNSwKKyAgICAweEJDOUQsIDB4QkM5RCwgMHgyMTIwLCAweEJDOUUsIDB4QkNBMCwgMHg0MkYyLCAweEJDQTEsIDB4QkNGRSwgMHgwODE0LAorICAgIDB4QkQ0MCwgMHhCRDQxLCAweDQyRjUsIDB4QkQ0MiwgMHhCRDQyLCAweDIxMUEsIDB4QkQ0MywgMHhCRDQzLCAweDI0MjQsCisgICAgMHhCRDQ0LCAweEJENDQsIDB4NDJGNywgMHhCRDQ1LCAweEJENDUsIDB4MjQyOCwgMHhCRDQ2LCAweEJENDcsIDB4NDJGOCwKKyAgICAweEJENDgsIDB4QkQ0OCwgMHgyNDJBLCAweEJENDksIDB4QkQ0OSwgMHgyNDI5LCAweEJENEEsIDB4QkQ0QSwgMHg0MkZBLAorICAgIDB4QkQ0QiwgMHhCRDRCLCAweDIyOTQsIDB4QkQ0QywgMHhCRDRDLCAweDQyRkIsIDB4QkQ0RCwgMHhCRDRELCAweDIyQkUsCisgICAgMHhCRDRFLCAweEJENEUsIDB4NDJGQywgMHhCRDRGLCAweEJENEYsIDB4MUUzMSwgMHhCRDUwLCAweEJENTYsIDB4NDJGRCwKKyAgICAweEJENTcsIDB4QkQ1NywgMHgyNDJDLCAweEJENTgsIDB4QkQ1OCwgMHg0MzA0LCAweEJENTksIDB4QkQ1OSwgMHgxRkI1LAorICAgIDB4QkQ1QSwgMHhCRDY1LCAweDQzMDUsIDB4QkQ2NiwgMHhCRDY2LCAweDI0MkIsIDB4QkQ2NywgMHhCRDY3LCAweDFGQUYsCisgICAgMHhCRDY4LCAweEJENjksIDB4NDMxMSwgMHhCRDZBLCAweEJENkEsIDB4MjA2OCwgMHhCRDZCLCAweEJENkIsIDB4MjFFNCwKKyAgICAweEJENkMsIDB4QkQ2RSwgMHg0MzEzLCAweEJENkYsIDB4QkQ2RiwgMHgxRjIxLCAweEJENzAsIDB4QkQ3MCwgMHg0MzE2LAorICAgIDB4QkQ3MSwgMHhCRDcxLCAweDIxMDEsIDB4QkQ3MiwgMHhCRDc4LCAweDQzMTcsIDB4QkQ3OSwgMHhCRDc5LCAweDIxN0MsCisgICAgMHhCRDdBLCAweEJEN0EsIDB4MjE0QSwgMHhCRDdCLCAweEJEN0IsIDB4MjQyRCwgMHhCRDdDLCAweEJEN0QsIDB4NDMxRSwKKyAgICAweEJEN0UsIDB4QkQ3RSwgMHgxRkQ0LCAweEJEODAsIDB4QkQ4MCwgMHg0MzIwLCAweEJEODEsIDB4QkQ4MSwgMHgxRkQxLAorICAgIDB4QkQ4MiwgMHhCRDg4LCAweDQzMjEsIDB4QkQ4OSwgMHhCRDg5LCAweDFFMzMsIDB4QkQ4QSwgMHhCRDhBLCAweDQzMjgsCisgICAgMHhCRDhCLCAweEJEOEIsIDB4MjQyRiwgMHhCRDhDLCAweEJEOEQsIDB4NDMyOSwgMHhCRDhFLCAweEJEOEUsIDB4MjQyRSwKKyAgICAweEJEOEYsIDB4QkQ4RiwgMHg0MzJCLCAweEJEOTAsIDB4QkQ5MCwgMHgyNDMwLCAweEJEOTEsIDB4QkQ5MSwgMHgyMURCLAorICAgIDB4QkQ5MiwgMHhCRDk2LCAweDQzMkMsIDB4QkQ5NywgMHhCRDk3LCAweDIxNTgsIDB4QkQ5OCwgMHhCRDlBLCAweDQzMzEsCisgICAgMHhCRDlCLCAweEJEOUIsIDB4MUZDMiwgMHhCRDlDLCAweEJEQTAsIDB4NDMzNCwgMHhCREExLCAweEJERkUsIDB4MDg3MiwKKyAgICAweEJFNDAsIDB4QkU0MiwgMHg0MzM5LCAweEJFNDMsIDB4QkU0MywgMHgyMkI5LCAweEJFNDQsIDB4QkU0NCwgMHg0MzNDLAorICAgIDB4QkU0NSwgMHhCRTQ1LCAweDI0MzYsIDB4QkU0NiwgMHhCRTQ4LCAweDQzM0QsIDB4QkU0OSwgMHhCRTQ5LCAweDFFOEUsCisgICAgMHhCRTRBLCAweEJFNEEsIDB4MjQzOSwgMHhCRTRCLCAweEJFNTAsIDB4NDM0MCwgMHhCRTUxLCAweEJFNTEsIDB4MjFDNSwKKyAgICAweEJFNTIsIDB4QkU1MiwgMHgyNDM3LCAweEJFNTMsIDB4QkU1MywgMHgyMTkyLCAweEJFNTQsIDB4QkU1NCwgMHg0MzQ2LAorICAgIDB4QkU1NSwgMHhCRTU1LCAweDI0M0EsIDB4QkU1NiwgMHhCRTU2LCAweDFGMTksIDB4QkU1NywgMHhCRTU3LCAweDIxOEMsCisgICAgMHhCRTU4LCAweEJFNTgsIDB4MUU0MCwgMHhCRTU5LCAweEJFNTksIDB4MjJCMywgMHhCRTVBLCAweEJFNUMsIDB4NDM0NywKKyAgICAweEJFNUQsIDB4QkU1RCwgMHgyMDVGLCAweEJFNUUsIDB4QkU1RSwgMHgyNDM4LCAweEJFNUYsIDB4QkU1RiwgMHgyNDMyLAorICAgIDB4QkU2MCwgMHhCRTYwLCAweDIyNzQsIDB4QkU2MSwgMHhCRTYxLCAweDQzNEEsIDB4QkU2MiwgMHhCRTYyLCAweDFFOUMsCisgICAgMHhCRTYzLCAweEJFNjMsIDB4MjQzMSwgMHhCRTY0LCAweEJFNjQsIDB4MjA4NSwgMHhCRTY1LCAweEJFNjgsIDB4NDM0QiwKKyAgICAweEJFNjksIDB4QkU2OSwgMHgyNDM1LCAweEJFNkEsIDB4QkU2QiwgMHg0MzRGLCAweEJFNkMsIDB4QkU2QywgMHgyNDNCLAorICAgIDB4QkU2RCwgMHhCRTZFLCAweDQzNTEsIDB4QkU2RiwgMHhCRTZGLCAweDFGQjcsIDB4QkU3MCwgMHhCRTcwLCAweDI0MzMsCisgICAgMHhCRTcxLCAweEJFNzUsIDB4NDM1MywgMHhCRTc2LCAweEJFNzYsIDB4MjA1NCwgMHhCRTc3LCAweEJFNzcsIDB4MjFERSwKKyAgICAweEJFNzgsIDB4QkU3OCwgMHg0MzU4LCAweEJFNzksIDB4QkU3OSwgMHgyNDM0LCAweEJFN0EsIDB4QkU3QiwgMHg0MzU5LAorICAgIDB4QkU3QywgMHhCRTdDLCAweDI0M0QsIDB4QkU3RCwgMHhCRTdELCAweDFGODksIDB4QkU3RSwgMHhCRTdFLCAweDI0M0MsCisgICAgMHhCRTgwLCAweEJFODIsIDB4NDM1QiwgMHhCRTgzLCAweEJFODMsIDB4MUY2RSwgMHhCRTg0LCAweEJFODQsIDB4MUVEOCwKKyAgICAweEJFODUsIDB4QkU4NSwgMHg0MzVFLCAweEJFODYsIDB4QkU4NiwgMHgxRUJGLCAweEJFODcsIDB4QkU4NywgMHgyNDQ1LAorICAgIDB4QkU4OCwgMHhCRTg4LCAweDQzNUYsIDB4QkU4OSwgMHhCRTg5LCAweDIyNDksIDB4QkU4QSwgMHhCRThCLCAweDQzNjAsCisgICAgMHhCRThDLCAweEJFOEMsIDB4MjQ0MSwgMHhCRThELCAweEJFOEQsIDB4NDM2MiwgMHhCRThFLCAweEJFOEUsIDB4MUU0NywKKyAgICAweEJFOEYsIDB4QkU4RiwgMHgxRjU2LCAweEJFOTAsIDB4QkU5MSwgMHg0MzYzLCAweEJFOTIsIDB4QkU5MiwgMHgyMDg2LAorICAgIDB4QkU5MywgMHhCRTk0LCAweDQzNjUsIDB4QkU5NSwgMHhCRTk1LCAweDIxOTYsIDB4QkU5NiwgMHhCRTk2LCAweDQzNjcsCisgICAgMHhCRTk3LCAweEJFOTcsIDB4MjQ0MywgMHhCRTk4LCAweEJFOTgsIDB4MjQzRiwgMHhCRTk5LCAweEJFOTksIDB4NDM2OCwKKyAgICAweEJFOUEsIDB4QkU5QSwgMHgyMDIzLCAweEJFOUIsIDB4QkU5QiwgMHg0MzY5LCAweEJFOUMsIDB4QkU5QywgMHgyNDQyLAorICAgIDB4QkU5RCwgMHhCRTlFLCAweDQzNkEsIDB4QkU5RiwgMHhCRTlGLCAweDI0M0UsIDB4QkVBMCwgMHhCRUEwLCAweDQzNkMsCisgICAgMHhCRUExLCAweEJFRkUsIDB4MDhEMCwgMHhCRjQwLCAweEJGNDAsIDB4MjZBNiwgMHhCRjQxLCAweEJGNEMsIDB4NDM2RCwKKyAgICAweEJGNEQsIDB4QkY0RCwgMHgyMzRFLCAweEJGNEUsIDB4QkY0RSwgMHgyNDQ2LCAweEJGNEYsIDB4QkY0RiwgMHgyNDRCLAorICAgIDB4QkY1MCwgMHhCRjUwLCAweDI0NDQsIDB4QkY1MSwgMHhCRjU0LCAweDQzNzksIDB4QkY1NSwgMHhCRjU1LCAweDI0MjcsCisgICAgMHhCRjU2LCAweEJGNTYsIDB4MjQ0QywgMHhCRjU3LCAweEJGNUYsIDB4NDM3RCwgMHhCRjYwLCAweEJGNjAsIDB4MUYwRiwKKyAgICAweEJGNjEsIDB4QkY2MSwgMHg0Mzg2LCAweEJGNjIsIDB4QkY2MiwgMHgyNDQ3LCAweEJGNjMsIDB4QkY2MywgMHgyNDQ5LAorICAgIDB4QkY2NCwgMHhCRjY0LCAweDI0NDgsIDB4QkY2NSwgMHhCRjY3LCAweDQzODcsIDB4QkY2OCwgMHhCRjY4LCAweDIxQzIsCisgICAgMHhCRjY5LCAweEJGNkIsIDB4NDM4QSwgMHhCRjZDLCAweEJGNkMsIDB4MjE2RSwgMHhCRjZELCAweEJGNkYsIDB4NDM4RCwKKyAgICAweEJGNzAsIDB4QkY3MCwgMHgxRjAzLCAweEJGNzEsIDB4QkY3MSwgMHg0MzkwLCAweEJGNzIsIDB4QkY3MiwgMHgyNDRBLAorICAgIDB4QkY3MywgMHhCRjczLCAweDIxNUMsIDB4QkY3NCwgMHhCRjc1LCAweDQzOTEsIDB4QkY3NiwgMHhCRjc2LCAweDIyQkIsCisgICAgMHhCRjc3LCAweEJGNzcsIDB4MjQ1MCwgMHhCRjc4LCAweEJGNzgsIDB4NDM5MywgMHhCRjc5LCAweEJGNzksIDB4MjY5NCwKKyAgICAweEJGN0EsIDB4QkY3QSwgMHgyNDRGLCAweEJGN0IsIDB4QkY3QiwgMHgyNUY2LCAweEJGN0MsIDB4QkY3QywgMHgyMDUxLAorICAgIDB4QkY3RCwgMHhCRjdELCAweDQzOTQsIDB4QkY3RSwgMHhCRjdFLCAweDI0NEUsIDB4QkY4MCwgMHhCRjgxLCAweDQzOTUsCisgICAgMHhCRjgyLCAweEJGODIsIDB4MjJCQSwgMHhCRjgzLCAweEJGODMsIDB4MUY2RCwgMHhCRjg0LCAweEJGODgsIDB4NDM5NywKKyAgICAweEJGODksIDB4QkY4OSwgMHgyNDUyLCAweEJGOEEsIDB4QkY4QSwgMHgyNDUxLCAweEJGOEIsIDB4QkY5NCwgMHg0MzlDLAorICAgIDB4QkY5NSwgMHhCRjk1LCAweDI0NTUsIDB4QkY5NiwgMHhCRjk2LCAweDQzQTYsIDB4QkY5NywgMHhCRjk3LCAweDIyODksCisgICAgMHhCRjk4LCAweEJGOTgsIDB4MjExNiwgMHhCRjk5LCAweEJGOUMsIDB4NDNBNywgMHhCRjlELCAweEJGOUQsIDB4MjQ1NCwKKyAgICAweEJGOUUsIDB4QkZBMCwgMHg0M0FCLCAweEJGQTEsIDB4QkZGRSwgMHgwOTJFLCAweEMwNDAsIDB4QzA0MCwgMHgyMEZCLAorICAgIDB4QzA0MSwgMHhDMDQzLCAweDQzQUUsIDB4QzA0NCwgMHhDMDQ0LCAweDI0NDAsIDB4QzA0NSwgMHhDMDRBLCAweDQzQjEsCisgICAgMHhDMDRCLCAweEMwNEIsIDB4MjEyNiwgMHhDMDRDLCAweEMwNEMsIDB4MUY2MSwgMHhDMDRELCAweEMwNEQsIDB4MjY5RCwKKyAgICAweEMwNEUsIDB4QzA0RSwgMHg0M0I3LCAweEMwNEYsIDB4QzA0RiwgMHgxRjhBLCAweEMwNTAsIDB4QzA1MCwgMHgyNDU2LAorICAgIDB4QzA1MSwgMHhDMDUxLCAweDI0NTksIDB4QzA1MiwgMHhDMDUyLCAweDI0NTgsIDB4QzA1MywgMHhDMDU0LCAweDQzQjgsCisgICAgMHhDMDU1LCAweEMwNTUsIDB4MUZBRSwgMHhDMDU2LCAweEMwNUEsIDB4NDNCQSwgMHhDMDVCLCAweEMwNUIsIDB4MjIxQSwKKyAgICAweEMwNUMsIDB4QzA1RCwgMHg0M0JGLCAweEMwNUUsIDB4QzA1RSwgMHgxRjdBLCAweEMwNUYsIDB4QzA1RiwgMHgyNDRELAorICAgIDB4QzA2MCwgMHhDMDYwLCAweDI0NTcsIDB4QzA2MSwgMHhDMDY4LCAweDQzQzEsIDB4QzA2OSwgMHhDMDY5LCAweDI0NTMsCisgICAgMHhDMDZBLCAweEMwNkEsIDB4NDNDOSwgMHhDMDZCLCAweEMwNkIsIDB4MjQyMCwgMHhDMDZDLCAweEMwNkMsIDB4NDNDQSwKKyAgICAweEMwNkQsIDB4QzA2RCwgMHgyMURGLCAweEMwNkUsIDB4QzA2RSwgMHgyNjg1LCAweEMwNkYsIDB4QzA2RiwgMHg0M0NCLAorICAgIDB4QzA3MCwgMHhDMDcwLCAweDFFNkUsIDB4QzA3MSwgMHhDMDczLCAweDQzQ0MsIDB4QzA3NCwgMHhDMDc0LCAweDIyMjQsCisgICAgMHhDMDc1LCAweEMwNzUsIDB4MjY3MCwgMHhDMDc2LCAweEMwNzYsIDB4NDNDRiwgMHhDMDc3LCAweEMwNzcsIDB4MjFCQSwKKyAgICAweEMwNzgsIDB4QzA3OCwgMHg0M0QwLCAweEMwNzksIDB4QzA3OSwgMHgyNDVBLCAweEMwN0EsIDB4QzA3QiwgMHg0M0QxLAorICAgIDB4QzA3QywgMHhDMDdDLCAweDFGRkYsIDB4QzA3RCwgMHhDMDdFLCAweDQzRDMsIDB4QzA4MCwgMHhDMDlBLCAweDQzRDUsCisgICAgMHhDMDlCLCAweEMwOUIsIDB4MjVFMiwgMHhDMDlDLCAweEMwOUMsIDB4NDNGMCwgMHhDMDlELCAweEMwOUQsIDB4MjY5QSwKKyAgICAweEMwOUUsIDB4QzBBMCwgMHg0M0YxLCAweEMwQTEsIDB4QzBGRSwgMHgwOThDLCAweEMxNDAsIDB4QzE0RiwgMHg0M0Y0LAorICAgIDB4QzE1MCwgMHhDMTUwLCAweDFFRUEsIDB4QzE1MSwgMHhDMTUzLCAweDQ0MDQsIDB4QzE1NCwgMHhDMTU0LCAweDFFMkMsCisgICAgMHhDMTU1LCAweEMxNUUsIDB4NDQwNywgMHhDMTVGLCAweEMxNUYsIDB4MjA2MiwgMHhDMTYwLCAweEMxNjAsIDB4MjRGMSwKKyAgICAweEMxNjEsIDB4QzE2MSwgMHg0NDExLCAweEMxNjIsIDB4QzE2MiwgMHgyNEYyLCAweEMxNjMsIDB4QzE3NCwgMHg0NDEyLAorICAgIDB4QzE3NSwgMHhDMTc1LCAweDI1RjIsIDB4QzE3NiwgMHhDMTc3LCAweDQ0MjQsIDB4QzE3OCwgMHhDMTc4LCAweDIyMTUsCisgICAgMHhDMTc5LCAweEMxN0UsIDB4NDQyNiwgMHhDMTgwLCAweEMxOTQsIDB4NDQyQywgMHhDMTk1LCAweEMxOTUsIDB4MjFBRSwKKyAgICAweEMxOTYsIDB4QzFBMCwgMHg0NDQxLCAweEMxQTEsIDB4QzFGRSwgMHgwOUVBLCAweEMyNDAsIDB4QzI0RCwgMHg0NDRDLAorICAgIDB4QzI0RSwgMHhDMjRFLCAweDIwRTAsIDB4QzI0RiwgMHhDMjY0LCAweDQ0NUEsIDB4QzI2NSwgMHhDMjY1LCAweDI1QzIsCisgICAgMHhDMjY2LCAweEMyNjYsIDB4NDQ3MCwgMHhDMjY3LCAweEMyNjcsIDB4MjVDMSwgMHhDMjY4LCAweEMyN0MsIDB4NDQ3MSwKKyAgICAweEMyN0QsIDB4QzI3RCwgMHgyMTI4LCAweEMyN0UsIDB4QzI3RSwgMHg0NDg2LCAweEMyODAsIDB4QzI4MywgMHg0NDg3LAorICAgIDB4QzI4NCwgMHhDMjg0LCAweDIxOTksIDB4QzI4NSwgMHhDMjkyLCAweDQ0OEIsIDB4QzI5MywgMHhDMjkzLCAweDIwMTcsCisgICAgMHhDMjk0LCAweEMyOTQsIDB4MUVBMCwgMHhDMjk1LCAweEMyOTUsIDB4MjEyNSwgMHhDMjk2LCAweEMyOTYsIDB4MjE0RCwKKyAgICAweEMyOTcsIDB4QzI5NywgMHg0NDk5LCAweEMyOTgsIDB4QzI5OCwgMHgyNUM0LCAweEMyOTksIDB4QzI5OSwgMHgyMDlELAorICAgIDB4QzI5QSwgMHhDMjlBLCAweDIyOEEsIDB4QzI5QiwgMHhDMjlCLCAweDQ0OUEsIDB4QzI5QywgMHhDMjlDLCAweDI1QzMsCisgICAgMHhDMjlELCAweEMyOUYsIDB4NDQ5QiwgMHhDMkEwLCAweEMyQTAsIDB4MjE3OSwgMHhDMkExLCAweEMyRkUsIDB4MEE0OCwKKyAgICAweEMzNDAsIDB4QzM0MCwgMHgyMDM4LCAweEMzNDEsIDB4QzM0MiwgMHg0NDlFLCAweEMzNDMsIDB4QzM0MywgMHgyMTU1LAorICAgIDB4QzM0NCwgMHhDMzdBLCAweDQ0QTAsIDB4QzM3QiwgMHhDMzdCLCAweDIxRDIsIDB4QzM3QywgMHhDMzdFLCAweDQ0RDcsCisgICAgMHhDMzgwLCAweEMzODMsIDB4NDREQSwgMHhDMzg0LCAweEMzODQsIDB4MjRDNywgMHhDMzg1LCAweEMzOUEsIDB4NDRERSwKKyAgICAweEMzOUIsIDB4QzM5QiwgMHgyMjc5LCAweEMzOUMsIDB4QzNBMCwgMHg0NEY0LCAweEMzQTEsIDB4QzNGRSwgMHgwQUE2LAorICAgIDB4QzQ0MCwgMHhDNDQ4LCAweDQ0RjksIDB4QzQ0OSwgMHhDNDQ5LCAweDIxMjMsIDB4QzQ0QSwgMHhDNDRCLCAweDQ1MDIsCisgICAgMHhDNDRDLCAweEM0NEMsIDB4MjRDNSwgMHhDNDRELCAweEM0NTMsIDB4NDUwNCwgMHhDNDU0LCAweEM0NTQsIDB4MjRDOSwKKyAgICAweEM0NTUsIDB4QzQ1NywgMHg0NTBCLCAweEM0NTgsIDB4QzQ1OCwgMHgyMDk0LCAweEM0NTksIDB4QzQ1QSwgMHg0NTBFLAorICAgIDB4QzQ1QiwgMHhDNDVCLCAweDIyOTYsIDB4QzQ1QywgMHhDNDYyLCAweDQ1MTAsIDB4QzQ2MywgMHhDNDYzLCAweDFFNzcsCisgICAgMHhDNDY0LCAweEM0NzYsIDB4NDUxNywgMHhDNDc3LCAweEM0NzcsIDB4MUYwNiwgMHhDNDc4LCAweEM0NzksIDB4NDUyQSwKKyAgICAweEM0N0EsIDB4QzQ3QSwgMHgxRkE1LCAweEM0N0IsIDB4QzQ3RSwgMHg0NTJDLCAweEM0ODAsIDB4QzQ4MCwgMHg0NTMwLAorICAgIDB4QzQ4MSwgMHhDNDgxLCAweDIwOTksIDB4QzQ4MiwgMHhDNDkwLCAweDQ1MzEsIDB4QzQ5MSwgMHhDNDkxLCAweDFFQUQsCisgICAgMHhDNDkyLCAweEM0OTIsIDB4MjRDOCwgMHhDNDkzLCAweEM0OTMsIDB4MjBBOCwgMHhDNDk0LCAweEM0OTcsIDB4NDU0MCwKKyAgICAweEM0OTgsIDB4QzQ5OCwgMHgyMDFGLCAweEM0OTksIDB4QzQ5OSwgMHg0NTQ0LCAweEM0OUEsIDB4QzQ5QSwgMHgyMEM1LAorICAgIDB4QzQ5QiwgMHhDNDlCLCAweDQ1NDUsIDB4QzQ5QywgMHhDNDlDLCAweDI0Q0EsIDB4QzQ5RCwgMHhDNEEwLCAweDQ1NDYsCisgICAgMHhDNEExLCAweEM0RkUsIDB4MEIwNCwgMHhDNTQwLCAweEM1NDMsIDB4NDU0QSwgMHhDNTQ0LCAweEM1NDQsIDB4MUZGMCwKKyAgICAweEM1NDUsIDB4QzU0NSwgMHg0NTRFLCAweEM1NDYsIDB4QzU0NiwgMHgyNEM2LCAweEM1NDcsIDB4QzU0QSwgMHg0NTRGLAorICAgIDB4QzU0QiwgMHhDNTRCLCAweDIyNUQsIDB4QzU0QywgMHhDNTRDLCAweDIyREUsIDB4QzU0RCwgMHhDNTUxLCAweDQ1NTMsCisgICAgMHhDNTUyLCAweEM1NTIsIDB4MjAyQywgMHhDNTUzLCAweEM1NUUsIDB4NDU1OCwgMHhDNTVGLCAweEM1NUYsIDB4MjE2MSwKKyAgICAweEM1NjAsIDB4QzU2MiwgMHg0NTY0LCAweEM1NjMsIDB4QzU2MywgMHgyMjNCLCAweEM1NjQsIDB4QzU2NCwgMHgyMUQ5LAorICAgIDB4QzU2NSwgMHhDNTY1LCAweDFGQ0IsIDB4QzU2NiwgMHhDNTY2LCAweDFGQzksIDB4QzU2NywgMHhDNTdFLCAweDQ1NjcsCisgICAgMHhDNTgwLCAweEM1OTIsIDB4NDU3RiwgMHhDNTkzLCAweEM1OTMsIDB4MUU2MSwgMHhDNTk0LCAweEM1OUIsIDB4NDU5MiwKKyAgICAweEM1OUMsIDB4QzU5QywgMHgyNUVGLCAweEM1OUQsIDB4QzU5RCwgMHg0NTlBLCAweEM1OUUsIDB4QzU5RSwgMHgxRjk4LAorICAgIDB4QzU5RiwgMHhDNUEwLCAweDQ1OUIsIDB4QzVBMSwgMHhDNUZFLCAweDBCNjIsIDB4QzY0MCwgMHhDNjQwLCAweDQ1OUQsCisgICAgMHhDNjQxLCAweEM2NDEsIDB4MjVGMCwgMHhDNjQyLCAweEM2NDMsIDB4NDU5RSwgMHhDNjQ0LCAweEM2NDQsIDB4MUY4OCwKKyAgICAweEM2NDUsIDB4QzY0NiwgMHg0NUEwLCAweEM2NDcsIDB4QzY0NywgMHgyMUY4LCAweEM2NDgsIDB4QzY2MiwgMHg0NUEyLAorICAgIDB4QzY2MywgMHhDNjYzLCAweDIzMjIsIDB4QzY2NCwgMHhDNjcxLCAweDQ1QkQsIDB4QzY3MiwgMHhDNjcyLCAweDIzMzYsCisgICAgMHhDNjczLCAweEM2N0UsIDB4NDVDQiwgMHhDNjgwLCAweEM2QTAsIDB4NDVENywgMHhDNkExLCAweEM2RkUsIDB4MEJDMCwKKyAgICAweEM3NDAsIDB4Qzc2NSwgMHg0NUY4LCAweEM3NjYsIDB4Qzc2NiwgMHgyMkFCLCAweEM3NjcsIDB4Qzc2RSwgMHg0NjFFLAorICAgIDB4Qzc2RiwgMHhDNzZGLCAweDFGQkYsIDB4Qzc3MCwgMHhDNzc1LCAweDQ2MjYsIDB4Qzc3NiwgMHhDNzc2LCAweDFGN0QsCisgICAgMHhDNzc3LCAweEM3N0EsIDB4NDYyQywgMHhDNzdCLCAweEM3N0IsIDB4MjMzMywgMHhDNzdDLCAweEM3N0UsIDB4NDYzMCwKKyAgICAweEM3ODAsIDB4QzdBMCwgMHg0NjMzLCAweEM3QTEsIDB4QzdGRSwgMHgwQzFFLCAweEM4NDAsIDB4Qzg0MCwgMHg0NjU0LAorICAgIDB4Qzg0MSwgMHhDODQxLCAweDFGNEQsIDB4Qzg0MiwgMHhDODRFLCAweDQ2NTUsIDB4Qzg0RiwgMHhDODRGLCAweDIzMzQsCisgICAgMHhDODUwLCAweEM4NTEsIDB4NDY2MiwgMHhDODUyLCAweEM4NTIsIDB4MUZGMSwgMHhDODUzLCAweEM4NjUsIDB4NDY2NCwKKyAgICAweEM4NjYsIDB4Qzg2NiwgMHgyMThCLCAweEM4NjcsIDB4Qzg2RCwgMHg0Njc3LCAweEM4NkUsIDB4Qzg2RSwgMHgyMzQ5LAorICAgIDB4Qzg2RiwgMHhDODdELCAweDQ2N0UsIDB4Qzg3RSwgMHhDODdFLCAweDIyMEIsIDB4Qzg4MCwgMHhDODg2LCAweDQ2OEQsCisgICAgMHhDODg3LCAweEM4ODcsIDB4MjM0NiwgMHhDODg4LCAweEM4OTEsIDB4NDY5NCwgMHhDODkyLCAweEM4OTIsIDB4MjM0NywKKyAgICAweEM4OTMsIDB4Qzg5MywgMHg0NjlFLCAweEM4OTQsIDB4Qzg5NCwgMHgyMTkzLCAweEM4OTUsIDB4Qzg5OCwgMHg0NjlGLAorICAgIDB4Qzg5OSwgMHhDODk5LCAweDI2QTEsIDB4Qzg5QSwgMHhDODlDLCAweDQ2QTMsIDB4Qzg5RCwgMHhDODlELCAweDFGNjIsCisgICAgMHhDODlFLCAweEM4QTAsIDB4NDZBNiwgMHhDOEExLCAweEM4RkUsIDB4MEM3QywgMHhDOTQwLCAweEM5NEUsIDB4NDZBOSwKKyAgICAweEM5NEYsIDB4Qzk0RiwgMHgyMzRELCAweEM5NTAsIDB4Qzk1MCwgMHgyMzQ4LCAweEM5NTEsIDB4Qzk2RCwgMHg0NkI4LAorICAgIDB4Qzk2RSwgMHhDOTZFLCAweDFFNjAsIDB4Qzk2RiwgMHhDOTZGLCAweDQ2RDUsIDB4Qzk3MCwgMHhDOTcwLCAweDIzNDUsCisgICAgMHhDOTcxLCAweEM5NzYsIDB4NDZENiwgMHhDOTc3LCAweEM5NzcsIDB4MUYxMiwgMHhDOTc4LCAweEM5N0UsIDB4NDZEQywKKyAgICAweEM5ODAsIDB4Qzk4RSwgMHg0NkUzLCAweEM5OEYsIDB4Qzk4RiwgMHgyMDE4LCAweEM5OTAsIDB4Qzk5MCwgMHgyMzM1LAorICAgIDB4Qzk5MSwgMHhDOTlCLCAweDQ2RjIsIDB4Qzk5QywgMHhDOTlDLCAweDIzM0MsIDB4Qzk5RCwgMHhDOUEwLCAweDQ2RkQsCisgICAgMHhDOUExLCAweEM5RkUsIDB4MENEQSwgMHhDQTQwLCAweENBNEQsIDB4NDcwMSwgMHhDQTRFLCAweENBNEUsIDB4MjY2RiwKKyAgICAweENBNEYsIDB4Q0E1NSwgMHg0NzBGLCAweENBNTYsIDB4Q0E1NiwgMHgyMzUxLCAweENBNTcsIDB4Q0E1OCwgMHg0NzE2LAorICAgIDB4Q0E1OSwgMHhDQTU5LCAweDFGQTAsIDB4Q0E1QSwgMHhDQTVCLCAweDQ3MTgsIDB4Q0E1QywgMHhDQTVDLCAweDIzMzgsCisgICAgMHhDQTVELCAweENBNjAsIDB4NDcxQSwgMHhDQTYxLCAweENBNjEsIDB4MjIxQiwgMHhDQTYyLCAweENBNkQsIDB4NDcxRSwKKyAgICAweENBNkUsIDB4Q0E2RSwgMHgyMzQyLCAweENBNkYsIDB4Q0E3MSwgMHg0NzJBLCAweENBNzIsIDB4Q0E3MiwgMHgyMzRGLAorICAgIDB4Q0E3MywgMHhDQTc2LCAweDQ3MkQsIDB4Q0E3NywgMHhDQTc3LCAweDIzM0QsIDB4Q0E3OCwgMHhDQTdBLCAweDQ3MzEsCisgICAgMHhDQTdCLCAweENBN0IsIDB4MjM0NCwgMHhDQTdDLCAweENBN0MsIDB4MjMzMSwgMHhDQTdELCAweENBN0QsIDB4NDczNCwKKyAgICAweENBN0UsIDB4Q0E3RSwgMHgyMzRCLCAweENBODAsIDB4Q0E4MCwgMHg0NzM1LCAweENBODEsIDB4Q0E4MSwgMHgyMzNCLAorICAgIDB4Q0E4MiwgMHhDQTg4LCAweDQ3MzYsIDB4Q0E4OSwgMHhDQTg5LCAweDIzNTAsIDB4Q0E4QSwgMHhDQThELCAweDQ3M0QsCisgICAgMHhDQThFLCAweENBOEUsIDB4MUVCNCwgMHhDQThGLCAweENBOEYsIDB4MjFBNiwgMHhDQTkwLCAweENBOTEsIDB4NDc0MSwKKyAgICAweENBOTIsIDB4Q0E5MiwgMHgyMUNCLCAweENBOTMsIDB4Q0E5OSwgMHg0NzQzLCAweENBOUEsIDB4Q0E5QSwgMHgyMzU1LAorICAgIDB4Q0E5QiwgMHhDQUEwLCAweDQ3NEEsIDB4Q0FBMSwgMHhDQUZFLCAweDBEMzgsIDB4Q0I0MCwgMHhDQjQyLCAweDQ3NTAsCisgICAgMHhDQjQzLCAweENCNDMsIDB4MjMzRSwgMHhDQjQ0LCAweENCNDQsIDB4NDc1MywgMHhDQjQ1LCAweENCNDUsIDB4MUY3NCwKKyAgICAweENCNDYsIDB4Q0I0NiwgMHg0NzU0LCAweENCNDcsIDB4Q0I0NywgMHgyMzMwLCAweENCNDgsIDB4Q0I0QSwgMHg0NzU1LAorICAgIDB4Q0I0QiwgMHhDQjRCLCAweDI2ODAsIDB4Q0I0QywgMHhDQjRELCAweDQ3NTgsIDB4Q0I0RSwgMHhDQjRFLCAweDIwREEsCisgICAgMHhDQjRGLCAweENCNTYsIDB4NDc1QSwgMHhDQjU3LCAweENCNTcsIDB4MjM0QSwgMHhDQjU4LCAweENCNUMsIDB4NDc2MiwKKyAgICAweENCNUQsIDB4Q0I1RCwgMHgxRjkxLCAweENCNUUsIDB4Q0I1RSwgMHg0NzY3LCAweENCNUYsIDB4Q0I1RiwgMHgyMTA3LAorICAgIDB4Q0I2MCwgMHhDQjY5LCAweDQ3NjgsIDB4Q0I2QSwgMHhDQjZBLCAweDIzM0YsIDB4Q0I2QiwgMHhDQjdBLCAweDQ3NzIsCisgICAgMHhDQjdCLCAweENCN0IsIDB4MUZGNCwgMHhDQjdDLCAweENCN0MsIDB4MjM0MywgMHhDQjdELCAweENCN0UsIDB4NDc4MiwKKyAgICAweENCODAsIDB4Q0I4NiwgMHg0Nzg0LCAweENCODcsIDB4Q0I4NywgMHgyMjEyLCAweENCODgsIDB4Q0I4RCwgMHg0NzhCLAorICAgIDB4Q0I4RSwgMHhDQjhFLCAweDIyMDcsIDB4Q0I4RiwgMHhDQjkxLCAweDQ3OTEsIDB4Q0I5MiwgMHhDQjkyLCAweDIzNTksCisgICAgMHhDQjkzLCAweENCOUIsIDB4NDc5NCwgMHhDQjlDLCAweENCOUMsIDB4MjI1NCwgMHhDQjlELCAweENCOUQsIDB4NDc5RCwKKyAgICAweENCOUUsIDB4Q0I5RSwgMHgyMzMyLCAweENCOUYsIDB4Q0JBMCwgMHg0NzlFLCAweENCQTEsIDB4Q0JGRSwgMHgwRDk2LAorICAgIDB4Q0M0MCwgMHhDQzQwLCAweDFFMjYsIDB4Q0M0MSwgMHhDQzQxLCAweDIzNTcsIDB4Q0M0MiwgMHhDQzQ4LCAweDQ3QTAsCisgICAgMHhDQzQ5LCAweENDNDksIDB4MjM1OCwgMHhDQzRBLCAweENDNEEsIDB4MjA0MiwgMHhDQzRCLCAweENDNEIsIDB4MjE1MywKKyAgICAweENDNEMsIDB4Q0M0RSwgMHg0N0E3LCAweENDNEYsIDB4Q0M0RiwgMHgyMEJCLCAweENDNTAsIDB4Q0M1QiwgMHg0N0FBLAorICAgIDB4Q0M1QywgMHhDQzVDLCAweDIzNUEsIDB4Q0M1RCwgMHhDQzVGLCAweDQ3QjYsIDB4Q0M2MCwgMHhDQzYwLCAweDIzNTYsCisgICAgMHhDQzYxLCAweENDNjMsIDB4NDdCOSwgMHhDQzY0LCAweENDNjQsIDB4MjMzNywgMHhDQzY1LCAweENDNkMsIDB4NDdCQywKKyAgICAweENDNkQsIDB4Q0M2RCwgMHgxRkY5LCAweENDNkUsIDB4Q0M3OCwgMHg0N0M0LCAweENDNzksIDB4Q0M3OSwgMHgyMzUzLAorICAgIDB4Q0M3QSwgMHhDQzdDLCAweDQ3Q0YsIDB4Q0M3RCwgMHhDQzdELCAweDIwNjEsIDB4Q0M3RSwgMHhDQzdFLCAweDQ3RDIsCisgICAgMHhDQzgwLCAweENDOEQsIDB4NDdEMywgMHhDQzhFLCAweENDOEUsIDB4MUU5NSwgMHhDQzhGLCAweENDOTMsIDB4NDdFMSwKKyAgICAweENDOTQsIDB4Q0M5NCwgMHgyMDQ5LCAweENDOTUsIDB4Q0M5NSwgMHg0N0U2LCAweENDOTYsIDB4Q0M5NiwgMHgxRjQyLAorICAgIDB4Q0M5NywgMHhDQzlDLCAweDQ3RTcsIDB4Q0M5RCwgMHhDQzlELCAweDFGRTgsIDB4Q0M5RSwgMHhDQ0EwLCAweDQ3RUQsCisgICAgMHhDQ0ExLCAweENDRkUsIDB4MERGNCwgMHhDRDQwLCAweENEN0UsIDB4NDdGMCwgMHhDRDgwLCAweENEOEYsIDB4NDgyRiwKKyAgICAweENEOTAsIDB4Q0Q5MCwgMHgyNURBLCAweENEOTEsIDB4Q0Q5NywgMHg0ODNGLCAweENEOTgsIDB4Q0Q5OCwgMHgyNUQ3LAorICAgIDB4Q0Q5OSwgMHhDREEwLCAweDQ4NDYsIDB4Q0RBMSwgMHhDREZFLCAweDBFNTIsIDB4Q0U0MCwgMHhDRTY2LCAweDQ4NEUsCisgICAgMHhDRTY3LCAweENFNjcsIDB4MjEyRSwgMHhDRTY4LCAweENFNzEsIDB4NDg3NSwgMHhDRTcyLCAweENFNzIsIDB4MjFCMiwKKyAgICAweENFNzMsIDB4Q0U3RSwgMHg0ODdGLCAweENFODAsIDB4Q0U4MCwgMHg0ODhCLCAweENFODEsIDB4Q0U4MSwgMHgyMTlFLAorICAgIDB4Q0U4MiwgMHhDRTg2LCAweDQ4OEMsIDB4Q0U4NywgMHhDRTg3LCAweDI1REMsIDB4Q0U4OCwgMHhDRTlBLCAweDQ4OTEsCisgICAgMHhDRTlCLCAweENFOUIsIDB4MjA2QywgMHhDRTlDLCAweENFOUQsIDB4NDhBNCwgMHhDRTlFLCAweENFOUUsIDB4MjIyNiwKKyAgICAweENFOUYsIDB4Q0VBMCwgMHg0OEE2LCAweENFQTEsIDB4Q0VGRSwgMHgwRUIwLCAweENGNDAsIDB4Q0Y0RCwgMHg0OEE4LAorICAgIDB4Q0Y0RSwgMHhDRjRFLCAweDI1RTAsIDB4Q0Y0RiwgMHhDRjU0LCAweDQ4QjYsIDB4Q0Y1NSwgMHhDRjU1LCAweDIyN0IsCisgICAgMHhDRjU2LCAweENGNTcsIDB4NDhCQywgMHhDRjU4LCAweENGNTgsIDB4MjVERSwgMHhDRjU5LCAweENGNUIsIDB4NDhCRSwKKyAgICAweENGNUMsIDB4Q0Y1QywgMHgyNUUxLCAweENGNUQsIDB4Q0Y2QiwgMHg0OEMxLCAweENGNkMsIDB4Q0Y2QywgMHgyNUQ1LAorICAgIDB4Q0Y2RCwgMHhDRjcyLCAweDQ4RDAsIDB4Q0Y3MywgMHhDRjczLCAweDFFNkIsIDB4Q0Y3NCwgMHhDRjc0LCAweDQ4RDYsCisgICAgMHhDRjc1LCAweENGNzUsIDB4MjVEQiwgMHhDRjc2LCAweENGNzcsIDB4NDhENywgMHhDRjc4LCAweENGNzgsIDB4MUU4OSwKKyAgICAweENGNzksIDB4Q0Y3QiwgMHg0OEQ5LCAweENGN0MsIDB4Q0Y3QywgMHgyNUQ5LCAweENGN0QsIDB4Q0Y3RSwgMHg0OERDLAorICAgIDB4Q0Y4MCwgMHhDRjgwLCAweDQ4REUsIDB4Q0Y4MSwgMHhDRjgxLCAweDIyMTEsIDB4Q0Y4MiwgMHhDRjg4LCAweDQ4REYsCisgICAgMHhDRjg5LCAweENGODksIDB4MjIyOSwgMHhDRjhBLCAweENGOEEsIDB4MjVENiwgMHhDRjhCLCAweENGOTIsIDB4NDhFNiwKKyAgICAweENGOTMsIDB4Q0Y5MywgMHgyNURELCAweENGOTQsIDB4Q0Y5NCwgMHgyNURGLCAweENGOTUsIDB4Q0Y5RCwgMHg0OEVFLAorICAgIDB4Q0Y5RSwgMHhDRjlFLCAweDFGRUYsIDB4Q0Y5RiwgMHhDRjlGLCAweDQ4RjcsIDB4Q0ZBMCwgMHhDRkEwLCAweDI1RDgsCisgICAgMHhDRkExLCAweENGRkUsIDB4MEYwRSwgMHhEMDQwLCAweEQwNEMsIDB4NDhGOCwgMHhEMDRELCAweEQwNEQsIDB4MUYyOSwKKyAgICAweEQwNEUsIDB4RDA1MCwgMHg0OTA1LCAweEQwNTEsIDB4RDA1MSwgMHgxRTVCLCAweEQwNTIsIDB4RDA1NCwgMHg0OTA4LAorICAgIDB4RDA1NSwgMHhEMDU1LCAweDIwNzYsIDB4RDA1NiwgMHhEMDVCLCAweDQ5MEIsIDB4RDA1QywgMHhEMDVDLCAweDIyOTcsCisgICAgMHhEMDVELCAweEQwNUYsIDB4NDkxMSwgMHhEMDYwLCAweEQwNjAsIDB4MjY5MCwgMHhEMDYxLCAweEQwNjYsIDB4NDkxNCwKKyAgICAweEQwNjcsIDB4RDA2NywgMHgyMTNGLCAweEQwNjgsIDB4RDA2QiwgMHg0OTFBLCAweEQwNkMsIDB4RDA2QywgMHgyMTk4LAorICAgIDB4RDA2RCwgMHhEMDZELCAweDQ5MUUsIDB4RDA2RSwgMHhEMDZFLCAweDFFODgsIDB4RDA2RiwgMHhEMDdDLCAweDQ5MUYsCisgICAgMHhEMDdELCAweEQwN0QsIDB4MjI4QywgMHhEMDdFLCAweEQwN0UsIDB4NDkyRCwgMHhEMDgwLCAweEQwQTAsIDB4NDkyRSwKKyAgICAweEQwQTEsIDB4RDBGRSwgMHgwRjZDLCAweEQxNDAsIDB4RDE1NCwgMHg0OTRGLCAweEQxNTUsIDB4RDE1NSwgMHgyNUYxLAorICAgIDB4RDE1NiwgMHhEMTU4LCAweDQ5NjQsIDB4RDE1OSwgMHhEMTU5LCAweDIwMEMsIDB4RDE1QSwgMHhEMTYwLCAweDQ5NjcsCisgICAgMHhEMTYxLCAweEQxNjEsIDB4MUU1OCwgMHhEMTYyLCAweEQxNjIsIDB4MjJBQywgMHhEMTYzLCAweEQxNzQsIDB4NDk2RSwKKyAgICAweEQxNzUsIDB4RDE3NSwgMHgyNkE3LCAweEQxNzYsIDB4RDE3QywgMHg0OTgwLCAweEQxN0QsIDB4RDE3RCwgMHgyNjc2LAorICAgIDB4RDE3RSwgMHhEMTdFLCAweDQ5ODcsIDB4RDE4MCwgMHhEMTlDLCAweDQ5ODgsIDB4RDE5RCwgMHhEMTlELCAweDFGRTEsCisgICAgMHhEMTlFLCAweEQxOUUsIDB4MjVCQiwgMHhEMTlGLCAweEQxQTAsIDB4NDlBNSwgMHhEMUExLCAweEQxRkUsIDB4MEZDQSwKKyAgICAweEQyNDAsIDB4RDI0MCwgMHgyNUJFLCAweEQyNDEsIDB4RDI0MiwgMHg0OUE3LCAweEQyNDMsIDB4RDI0MywgMHgyMkRELAorICAgIDB4RDI0NCwgMHhEMjRDLCAweDQ5QTksIDB4RDI0RCwgMHhEMjRELCAweDI1QkQsIDB4RDI0RSwgMHhEMjVCLCAweDQ5QjIsCisgICAgMHhEMjVDLCAweEQyNUMsIDB4MUUyQSwgMHhEMjVELCAweEQyNjIsIDB4NDlDMCwgMHhEMjYzLCAweEQyNjMsIDB4MjVCQywKKyAgICAweEQyNjQsIDB4RDI2NCwgMHgyNUJBLCAweEQyNjUsIDB4RDI2NywgMHg0OUM2LCAweEQyNjgsIDB4RDI2OCwgMHgyNUJGLAorICAgIDB4RDI2OSwgMHhEMjZDLCAweDQ5QzksIDB4RDI2RCwgMHhEMjZELCAweDIxODcsIDB4RDI2RSwgMHhEMjZFLCAweDQ5Q0QsCisgICAgMHhEMjZGLCAweEQyNkYsIDB4MjY2QiwgMHhEMjcwLCAweEQyNzEsIDB4NDlDRSwgMHhEMjcyLCAweEQyNzIsIDB4MUU3RiwKKyAgICAweEQyNzMsIDB4RDI3NCwgMHg0OUQwLCAweEQyNzUsIDB4RDI3NSwgMHgyMUFELCAweEQyNzYsIDB4RDI3RSwgMHg0OUQyLAorICAgIDB4RDI4MCwgMHhEMjg5LCAweDQ5REIsIDB4RDI4QSwgMHhEMjhBLCAweDFGOTYsIDB4RDI4QiwgMHhEMjhELCAweDQ5RTUsCisgICAgMHhEMjhFLCAweEQyOEUsIDB4MUYzMiwgMHhEMjhGLCAweEQyOTEsIDB4NDlFOCwgMHhEMjkyLCAweEQyOTIsIDB4MjA4NCwKKyAgICAweEQyOTMsIDB4RDI5NCwgMHg0OUVCLCAweEQyOTUsIDB4RDI5NSwgMHgyMTM2LCAweEQyOTYsIDB4RDI5NiwgMHg0OUVELAorICAgIDB4RDI5NywgMHhEMjk3LCAweDI0QjgsIDB4RDI5OCwgMHhEMjlGLCAweDQ5RUUsIDB4RDJBMCwgMHhEMkEwLCAweDI0QkEsCisgICAgMHhEMkExLCAweEQyRkUsIDB4MTAyOCwgMHhEMzQwLCAweEQzNDMsIDB4NDlGNiwgMHhEMzQ0LCAweEQzNDQsIDB4MjRCQywKKyAgICAweEQzNDUsIDB4RDM0NywgMHg0OUZBLCAweEQzNDgsIDB4RDM0OCwgMHgyMEU0LCAweEQzNDksIDB4RDM0OSwgMHg0OUZELAorICAgIDB4RDM0QSwgMHhEMzRBLCAweDI0QjksIDB4RDM0QiwgMHhEMzRDLCAweDQ5RkUsIDB4RDM0RCwgMHhEMzRELCAweDI0QkQsCisgICAgMHhEMzRFLCAweEQzNEYsIDB4NEEwMCwgMHhEMzUwLCAweEQzNTAsIDB4MjRCRSwgMHhEMzUxLCAweEQzNTQsIDB4NEEwMiwKKyAgICAweEQzNTUsIDB4RDM1NSwgMHgyNEJGLCAweEQzNTYsIDB4RDM1NywgMHg0QTA2LCAweEQzNTgsIDB4RDM1OCwgMHgxRkQyLAorICAgIDB4RDM1OSwgMHhEMzVBLCAweDRBMDgsIDB4RDM1QiwgMHhEMzVCLCAweDFGRkQsIDB4RDM1QywgMHhEMzVDLCAweDRBMEEsCisgICAgMHhEMzVELCAweEQzNUQsIDB4MjRCQiwgMHhEMzVFLCAweEQzNUUsIDB4MUYyRCwgMHhEMzVGLCAweEQzNzcsIDB4NEEwQiwKKyAgICAweEQzNzgsIDB4RDM3OCwgMHgyNjA5LCAweEQzNzksIDB4RDM3OSwgMHg0QTI0LCAweEQzN0EsIDB4RDM3QSwgMHgyNjBBLAorICAgIDB4RDM3QiwgMHhEMzdCLCAweDRBMjUsIDB4RDM3QywgMHhEMzdDLCAweDFFOTQsIDB4RDM3RCwgMHhEMzdFLCAweDRBMjYsCisgICAgMHhEMzgwLCAweEQzODQsIDB4NEEyOCwgMHhEMzg1LCAweEQzODUsIDB4MjJERiwgMHhEMzg2LCAweEQzODYsIDB4MUVDQiwKKyAgICAweEQzODcsIDB4RDM4NywgMHgxRjBELCAweEQzODgsIDB4RDM4QSwgMHg0QTJELCAweEQzOEIsIDB4RDM4QiwgMHgxRjc3LAorICAgIDB4RDM4QywgMHhEMzhDLCAweDRBMzAsIDB4RDM4RCwgMHhEMzhELCAweDIxRUIsIDB4RDM4RSwgMHhEMzhFLCAweDRBMzEsCisgICAgMHhEMzhGLCAweEQzOEYsIDB4MjJFMSwgMHhEMzkwLCAweEQzOTAsIDB4NEEzMiwgMHhEMzkxLCAweEQzOTEsIDB4MjE2RiwKKyAgICAweEQzOTIsIDB4RDM5MiwgMHg0QTMzLCAweEQzOTMsIDB4RDM5MywgMHgyMkUwLCAweEQzOTQsIDB4RDM5NSwgMHg0QTM0LAorICAgIDB4RDM5NiwgMHhEMzk2LCAweDIxRUEsIDB4RDM5NywgMHhEMzk3LCAweDRBMzYsIDB4RDM5OCwgMHhEMzk4LCAweDIyRTIsCisgICAgMHhEMzk5LCAweEQzOTksIDB4MjBDQiwgMHhEMzlBLCAweEQzOUEsIDB4NEEzNywgMHhEMzlCLCAweEQzOUIsIDB4MUY3OCwKKyAgICAweEQzOUMsIDB4RDM5RCwgMHg0QTM4LCAweEQzOUUsIDB4RDM5RSwgMHgxRUUyLCAweEQzOUYsIDB4RDM5RiwgMHg0QTNBLAorICAgIDB4RDNBMCwgMHhEM0EwLCAweDIxRjIsIDB4RDNBMSwgMHhEM0ZFLCAweDEwODYsIDB4RDQ0MCwgMHhENDQwLCAweDRBM0IsCisgICAgMHhENDQxLCAweEQ0NDEsIDB4MjE1MCwgMHhENDQyLCAweEQ0NDQsIDB4NEEzQywgMHhENDQ1LCAweEQ0NDUsIDB4MUZEMywKKyAgICAweEQ0NDYsIDB4RDQ0NiwgMHg0QTNGLCAweEQ0NDcsIDB4RDQ0NywgMHgyMkU1LCAweEQ0NDgsIDB4RDQ0QiwgMHg0QTQwLAorICAgIDB4RDQ0QywgMHhENDRDLCAweDFFRjIsIDB4RDQ0RCwgMHhENDRFLCAweDRBNDQsIDB4RDQ0RiwgMHhENDRGLCAweDIxMUYsCisgICAgMHhENDUwLCAweEQ0NTIsIDB4NEE0NiwgMHhENDUzLCAweEQ0NTMsIDB4MjFERCwgMHhENDU0LCAweEQ0NTUsIDB4NEE0OSwKKyAgICAweEQ0NTYsIDB4RDQ1NiwgMHgyMTU0LCAweEQ0NTcsIDB4RDQ1NywgMHg0QTRCLCAweEQ0NTgsIDB4RDQ1OCwgMHgyMkU3LAorICAgIDB4RDQ1OSwgMHhENDVCLCAweDRBNEMsIDB4RDQ1QywgMHhENDVDLCAweDIyODIsIDB4RDQ1RCwgMHhENDYxLCAweDRBNEYsCisgICAgMHhENDYyLCAweEQ0NjIsIDB4MjJFNiwgMHhENDYzLCAweEQ0NjYsIDB4NEE1NCwgMHhENDY3LCAweEQ0NjcsIDB4MjJFOCwKKyAgICAweEQ0NjgsIDB4RDQ2RCwgMHg0QTU4LCAweEQ0NkUsIDB4RDQ2RSwgMHgyMkU0LCAweEQ0NkYsIDB4RDQ2RiwgMHg0QTVFLAorICAgIDB4RDQ3MCwgMHhENDcwLCAweDIyNkEsIDB4RDQ3MSwgMHhENDcxLCAweDRBNUYsIDB4RDQ3MiwgMHhENDcyLCAweDIyRUIsCisgICAgMHhENDczLCAweEQ0NzMsIDB4NEE2MCwgMHhENDc0LCAweEQ0NzQsIDB4MjJFOSwgMHhENDc1LCAweEQ0NzUsIDB4MjBCRCwKKyAgICAweEQ0NzYsIDB4RDQ3NywgMHg0QTYxLCAweEQ0NzgsIDB4RDQ3OCwgMHgyMkVBLCAweEQ0NzksIDB4RDQ3QSwgMHg0QTYzLAorICAgIDB4RDQ3QiwgMHhENDdCLCAweDIyQkQsIDB4RDQ3QywgMHhENDdELCAweDRBNjUsIDB4RDQ3RSwgMHhENDdFLCAweDFFOUUsCisgICAgMHhENDgwLCAweEQ0ODEsIDB4NEE2NywgMHhENDgyLCAweEQ0ODIsIDB4MjJGNiwgMHhENDgzLCAweEQ0ODMsIDB4MjFFNywKKyAgICAweEQ0ODQsIDB4RDQ4NCwgMHgyMjE2LCAweEQ0ODUsIDB4RDQ4NiwgMHg0QTY5LCAweEQ0ODcsIDB4RDQ4NywgMHgyMTM3LAorICAgIDB4RDQ4OCwgMHhENDg5LCAweDRBNkIsIDB4RDQ4QSwgMHhENDhBLCAweDIxMkMsIDB4RDQ4QiwgMHhENDhCLCAweDRBNkQsCisgICAgMHhENDhDLCAweEQ0OEMsIDB4MUU2OCwgMHhENDhELCAweEQ0OEQsIDB4MjJGMiwgMHhENDhFLCAweEQ0OEUsIDB4MUYzNywKKyAgICAweEQ0OEYsIDB4RDQ4RiwgMHgyMkYzLCAweEQ0OTAsIDB4RDQ5MCwgMHg0QTZFLCAweEQ0OTEsIDB4RDQ5MSwgMHgyMkVGLAorICAgIDB4RDQ5MiwgMHhENDkyLCAweDFGNTAsIDB4RDQ5MywgMHhENDkzLCAweDFGMTAsIDB4RDQ5NCwgMHhENDk0LCAweDIxQzgsCisgICAgMHhENDk1LCAweEQ0OTUsIDB4NEE2RiwgMHhENDk2LCAweEQ0OTYsIDB4MjJGMSwgMHhENDk3LCAweEQ0OUIsIDB4NEE3MCwKKyAgICAweEQ0OUMsIDB4RDQ5QywgMHgyMkYwLCAweEQ0OUQsIDB4RDQ5RSwgMHg0QTc1LCAweEQ0OUYsIDB4RDQ5RiwgMHgyMkVFLAorICAgIDB4RDRBMCwgMHhENEEwLCAweDRBNzcsIDB4RDRBMSwgMHhENEZFLCAweDEwRTQsIDB4RDU0MCwgMHhENTQyLCAweDRBNzgsCisgICAgMHhENTQzLCAweEQ1NDMsIDB4MjJFRCwgMHhENTQ0LCAweEQ1NDQsIDB4MjI5RSwgMHhENTQ1LCAweEQ1NDUsIDB4MjJFQywKKyAgICAweEQ1NDYsIDB4RDU0NiwgMHgxRkUyLCAweEQ1NDcsIDB4RDU0OSwgMHg0QTdCLCAweEQ1NEEsIDB4RDU0QSwgMHgyMEZFLAorICAgIDB4RDU0QiwgMHhENTRELCAweDRBN0UsIDB4RDU0RSwgMHhENTRGLCAweDIyRjksIDB4RDU1MCwgMHhENTUwLCAweDRBODEsCisgICAgMHhENTUxLCAweEQ1NTEsIDB4MUVBRiwgMHhENTUyLCAweEQ1NTMsIDB4NEE4MiwgMHhENTU0LCAweEQ1NTQsIDB4MjIzNiwKKyAgICAweEQ1NTUsIDB4RDU1NSwgMHg0QTg0LCAweEQ1NTYsIDB4RDU1NiwgMHgyMkY3LCAweEQ1NTcsIDB4RDU1OSwgMHg0QTg1LAorICAgIDB4RDU1QSwgMHhENTVBLCAweDIyM0QsIDB4RDU1QiwgMHhENTVCLCAweDRBODgsIDB4RDU1QywgMHhENTVDLCAweDFFODIsCisgICAgMHhENTVELCAweEQ1NUQsIDB4MUZCNiwgMHhENTVFLCAweEQ1NUUsIDB4NEE4OSwgMHhENTVGLCAweEQ1NUYsIDB4MjFBNCwKKyAgICAweEQ1NjAsIDB4RDU2MCwgMHgyMUFBLCAweEQ1NjEsIDB4RDU2MSwgMHgyMkY4LCAweEQ1NjIsIDB4RDU2MiwgMHgyMTUxLAorICAgIDB4RDU2MywgMHhENTYzLCAweDRBOEEsIDB4RDU2NCwgMHhENTY0LCAweDFGNjAsIDB4RDU2NSwgMHhENTY3LCAweDRBOEIsCisgICAgMHhENTY4LCAweEQ1NjgsIDB4MjE0NywgMHhENTY5LCAweEQ1NkIsIDB4NEE4RSwgMHhENTZDLCAweEQ1NkMsIDB4MjE0NSwKKyAgICAweEQ1NkQsIDB4RDU2RCwgMHg0QTkxLCAweEQ1NkUsIDB4RDU2RSwgMHgxRkRDLCAweEQ1NkYsIDB4RDU3MSwgMHg0QTkyLAorICAgIDB4RDU3MiwgMHhENTcyLCAweDIzMDEsIDB4RDU3MywgMHhENTc0LCAweDRBOTUsIDB4RDU3NSwgMHhENTc1LCAweDFFRjUsCisgICAgMHhENTc2LCAweEQ1NzcsIDB4NEE5NywgMHhENTc4LCAweEQ1NzgsIDB4MjIxOCwgMHhENTc5LCAweEQ1N0EsIDB4NEE5OSwKKyAgICAweEQ1N0IsIDB4RDU3QiwgMHgxRUM2LCAweEQ1N0MsIDB4RDU3RCwgMHg0QTlCLCAweEQ1N0UsIDB4RDU3RSwgMHgyMzAwLAorICAgIDB4RDU4MCwgMHhENTgwLCAweDRBOUQsIDB4RDU4MSwgMHhENTgxLCAweDIyQjQsIDB4RDU4MiwgMHhENTgzLCAweDRBOUUsCisgICAgMHhENTg0LCAweEQ1ODQsIDB4MjE2OSwgMHhENTg1LCAweEQ1ODUsIDB4NEFBMCwgMHhENTg2LCAweEQ1ODYsIDB4MjJGRCwKKyAgICAweEQ1ODcsIDB4RDU4NywgMHg0QUExLCAweEQ1ODgsIDB4RDU4OCwgMHgyMEVBLCAweEQ1ODksIDB4RDU4OSwgMHg0QUEyLAorICAgIDB4RDU4QSwgMHhENThBLCAweDIyRjQsIDB4RDU4QiwgMHhENThCLCAweDRBQTMsIDB4RDU4QywgMHhENThDLCAweDIyRkIsCisgICAgMHhENThELCAweEQ1OEQsIDB4NEFBNCwgMHhENThFLCAweEQ1OEUsIDB4MjJGQywgMHhENThGLCAweEQ1OEYsIDB4MjAyNywKKyAgICAweEQ1OTAsIDB4RDU5MiwgMHg0QUE1LCAweEQ1OTMsIDB4RDU5MywgMHgyMDYwLCAweEQ1OTQsIDB4RDU5NCwgMHgyMkZGLAorICAgIDB4RDU5NSwgMHhENTk3LCAweDRBQTgsIDB4RDU5OCwgMHhENTk4LCAweDIyRkUsIDB4RDU5OSwgMHhENTk5LCAweDFFQzcsCisgICAgMHhENTlBLCAweEQ1OUEsIDB4NEFBQiwgMHhENTlCLCAweEQ1OUIsIDB4MjMwQywgMHhENTlDLCAweEQ1OUUsIDB4NEFBQywKKyAgICAweEQ1OUYsIDB4RDU5RiwgMHgyMkY1LCAweEQ1QTAsIDB4RDVBMCwgMHg0QUFGLCAweEQ1QTEsIDB4RDVGRSwgMHgxMTQyLAorICAgIDB4RDY0MCwgMHhENjQwLCAweDIzMDYsIDB4RDY0MSwgMHhENjQxLCAweDRBQjAsIDB4RDY0MiwgMHhENjQyLCAweDIzMEEsCisgICAgMHhENjQzLCAweEQ2NDMsIDB4MjFEMywgMHhENjQ0LCAweEQ2NDYsIDB4NEFCMSwgMHhENjQ3LCAweEQ2NDcsIDB4MjMwMywKKyAgICAweEQ2NDgsIDB4RDY0OCwgMHg0QUI0LCAweEQ2NDksIDB4RDY0OSwgMHgyMzA3LCAweEQ2NEEsIDB4RDY0QSwgMHgyMzBCLAorICAgIDB4RDY0QiwgMHhENjRDLCAweDRBQjUsIDB4RDY0RCwgMHhENjRELCAweDFGNUYsIDB4RDY0RSwgMHhENjRFLCAweDRBQjcsCisgICAgMHhENjRGLCAweEQ2NEYsIDB4MjMwOSwgMHhENjUwLCAweEQ2NTEsIDB4NEFCOCwgMHhENjUyLCAweEQ2NTIsIDB4MjMwMiwKKyAgICAweEQ2NTMsIDB4RDY1MywgMHgxRjA0LCAweEQ2NTQsIDB4RDY1NCwgMHgyMjlELCAweEQ2NTUsIDB4RDY1NSwgMHg0QUJBLAorICAgIDB4RDY1NiwgMHhENjU2LCAweDIxRkIsIDB4RDY1NywgMHhENjU3LCAweDRBQkIsIDB4RDY1OCwgMHhENjU4LCAweDIzMDgsCisgICAgMHhENjU5LCAweEQ2NTksIDB4NEFCQywgMHhENjVBLCAweEQ2NUEsIDB4MjBBQywgMHhENjVCLCAweEQ2NUIsIDB4NEFCRCwKKyAgICAweEQ2NUMsIDB4RDY1QywgMHgyMDhFLCAweEQ2NUQsIDB4RDY1RCwgMHgyMzA1LCAweEQ2NUUsIDB4RDY1RSwgMHgyMTk3LAorICAgIDB4RDY1RiwgMHhENjVGLCAweDRBQkUsIDB4RDY2MCwgMHhENjYwLCAweDIxNzEsIDB4RDY2MSwgMHhENjYxLCAweDIyOTgsCisgICAgMHhENjYyLCAweEQ2NjQsIDB4NEFCRiwgMHhENjY1LCAweEQ2NjUsIDB4MUY1NywgMHhENjY2LCAweEQ2NjgsIDB4NEFDMiwKKyAgICAweEQ2NjksIDB4RDY2OSwgMHgyMDgyLCAweEQ2NkEsIDB4RDY2QSwgMHg0QUM1LCAweEQ2NkIsIDB4RDY2QiwgMHgyMzExLAorICAgIDB4RDY2QywgMHhENjZFLCAweDRBQzYsIDB4RDY2RiwgMHhENjZGLCAweDIzMDQsIDB4RDY3MCwgMHhENjcwLCAweDRBQzksCisgICAgMHhENjcxLCAweEQ2NzEsIDB4MjMwRiwgMHhENjcyLCAweEQ2NzIsIDB4MUUzNSwgMHhENjczLCAweEQ2NzMsIDB4NEFDQSwKKyAgICAweEQ2NzQsIDB4RDY3NCwgMHgyMEQxLCAweEQ2NzUsIDB4RDY3NSwgMHgyMzEwLCAweEQ2NzYsIDB4RDY3NiwgMHgxRkEzLAorICAgIDB4RDY3NywgMHhENjc3LCAweDRBQ0IsIDB4RDY3OCwgMHhENjc4LCAweDIxRDYsIDB4RDY3OSwgMHhENjdCLCAweDRBQ0MsCisgICAgMHhENjdDLCAweEQ2N0MsIDB4MjIwNiwgMHhENjdELCAweEQ2N0UsIDB4NEFDRiwgMHhENjgwLCAweEQ2ODIsIDB4NEFEMSwKKyAgICAweEQ2ODMsIDB4RDY4MywgMHgyMzBELCAweEQ2ODQsIDB4RDY4NSwgMHg0QUQ0LCAweEQ2ODYsIDB4RDY4NiwgMHgyMzEyLAorICAgIDB4RDY4NywgMHhENjg3LCAweDIwOEQsIDB4RDY4OCwgMHhENjg4LCAweDIzMTMsIDB4RDY4OSwgMHhENjhELCAweDRBRDYsCisgICAgMHhENjhFLCAweEQ2OEUsIDB4MjJFMywgMHhENjhGLCAweEQ2OTMsIDB4NEFEQiwgMHhENjk0LCAweEQ2OTQsIDB4MUZCQSwKKyAgICAweEQ2OTUsIDB4RDY5OCwgMHg0QUUwLCAweEQ2OTksIDB4RDY5OSwgMHgyMDc4LCAweEQ2OUEsIDB4RDZBMCwgMHg0QUU0LAorICAgIDB4RDZBMSwgMHhENkZFLCAweDExQTAsIDB4RDc0MCwgMHhENzQyLCAweDRBRUIsIDB4RDc0MywgMHhENzQzLCAweDIyODgsCisgICAgMHhENzQ0LCAweEQ3NDcsIDB4NEFFRSwgMHhENzQ4LCAweEQ3NDgsIDB4MjMxNiwgMHhENzQ5LCAweEQ3NDksIDB4MUY2QiwKKyAgICAweEQ3NEEsIDB4RDc0RiwgMHg0QUYyLCAweEQ3NTAsIDB4RDc1MCwgMHgyMzE0LCAweEQ3NTEsIDB4RDc1MSwgMHg0QUY4LAorICAgIDB4RDc1MiwgMHhENzUyLCAweDIxMzAsIDB4RDc1MywgMHhENzUzLCAweDIzMTUsIDB4RDc1NCwgMHhENzU0LCAweDIxNjgsCisgICAgMHhENzU1LCAweEQ3NTUsIDB4NEFGOSwgMHhENzU2LCAweEQ3NTYsIDB4MjBDNCwgMHhENzU3LCAweEQ3NjMsIDB4NEFGQSwKKyAgICAweEQ3NjQsIDB4RDc2NCwgMHgyMzE4LCAweEQ3NjUsIDB4RDc2NiwgMHg0QjA3LCAweEQ3NjcsIDB4RDc2NywgMHgyMjE5LAorICAgIDB4RDc2OCwgMHhENzY4LCAweDIyMTcsIDB4RDc2OSwgMHhENzZCLCAweDRCMDksIDB4RDc2QywgMHhENzZDLCAweDIwRDUsCisgICAgMHhENzZELCAweEQ3NkUsIDB4NEIwQywgMHhENzZGLCAweEQ3NkYsIDB4MUY0QSwgMHhENzcwLCAweEQ3NzQsIDB4NEIwRSwKKyAgICAweEQ3NzUsIDB4RDc3NSwgMHgyMjQwLCAweEQ3NzYsIDB4RDc3NywgMHg0QjEzLCAweEQ3NzgsIDB4RDc3OCwgMHgxRUQzLAorICAgIDB4RDc3OSwgMHhENzdFLCAweDRCMTUsIDB4RDc4MCwgMHhENzgyLCAweDRCMUIsIDB4RDc4MywgMHhENzgzLCAweDFFNDksCisgICAgMHhENzg0LCAweEQ3ODYsIDB4NEIxRSwgMHhENzg3LCAweEQ3ODcsIDB4MjYxQiwgMHhENzg4LCAweEQ3OEEsIDB4NEIyMSwKKyAgICAweEQ3OEIsIDB4RDc4QiwgMHgxRTZELCAweEQ3OEMsIDB4RDc4QywgMHgyMEY4LCAweEQ3OEQsIDB4RDc4RCwgMHg0QjI0LAorICAgIDB4RDc4RSwgMHhENzhFLCAweDFGRkIsIDB4RDc4RiwgMHhENzhGLCAweDIzMTksIDB4RDc5MCwgMHhENzk0LCAweDRCMjUsCisgICAgMHhENzk1LCAweEQ3OTUsIDB4MjMwRSwgMHhENzk2LCAweEQ3OTYsIDB4NEIyQSwgMHhENzk3LCAweEQ3OTcsIDB4MjMxNywKKyAgICAweEQ3OTgsIDB4RDdBMCwgMHg0QjJCLCAweEQ3QTEsIDB4RDdGOSwgMHgxMUZFLCAweEQ4NDAsIDB4RDg0QywgMHg0QjM0LAorICAgIDB4RDg0RCwgMHhEODRELCAweDIwQzgsIDB4RDg0RSwgMHhEODUyLCAweDRCNDEsIDB4RDg1MywgMHhEODUzLCAweDFFRkQsCisgICAgMHhEODU0LCAweEQ4N0UsIDB4NEI0NiwgMHhEODgwLCAweEQ4OEYsIDB4NEI3MSwgMHhEODkwLCAweEQ4OTAsIDB4MUUzQiwKKyAgICAweEQ4OTEsIDB4RDg5MSwgMHgyMjdGLCAweEQ4OTIsIDB4RDg5MiwgMHg0QjgxLCAweEQ4OTMsIDB4RDg5MywgMHgxRjBDLAorICAgIDB4RDg5NCwgMHhEODk0LCAweDFFNTksIDB4RDg5NSwgMHhEODk1LCAweDFGMjQsIDB4RDg5NiwgMHhEODk5LCAweDRCODIsCisgICAgMHhEODlBLCAweEQ4OUEsIDB4MjBCQSwgMHhEODlCLCAweEQ4OUIsIDB4MUY2NSwgMHhEODlDLCAweEQ4OUMsIDB4MUVGMCwKKyAgICAweEQ4OUQsIDB4RDg5RCwgMHgyMTY0LCAweEQ4OUUsIDB4RDg5RSwgMHgxRjMwLCAweEQ4OUYsIDB4RDg5RiwgMHgyMjYxLAorICAgIDB4RDhBMCwgMHhEOEEwLCAweDRCODYsIDB4RDhBMSwgMHhEOEZFLCAweDEyNTcsIDB4RDk0MCwgMHhEOTQwLCAweDRCODcsCisgICAgMHhEOTQxLCAweEQ5NDEsIDB4MjJBMiwgMHhEOTQyLCAweEQ5NDIsIDB4MjRBQiwgMHhEOTQzLCAweEQ5NDMsIDB4NEI4OCwKKyAgICAweEQ5NDQsIDB4RDk0NCwgMHgyNEFGLCAweEQ5NDUsIDB4RDk0NSwgMHgxRUU4LCAweEQ5NDYsIDB4RDk0NiwgMHgxRjM5LAorICAgIDB4RDk0NywgMHhEOTQ3LCAweDRCODksIDB4RDk0OCwgMHhEOTQ4LCAweDFFNDgsIDB4RDk0OSwgMHhEOTQ5LCAweDIwNzAsCisgICAgMHhEOTRBLCAweEQ5NEEsIDB4MUVBOCwgMHhEOTRCLCAweEQ5NEIsIDB4NEI4QSwgMHhEOTRDLCAweEQ5NEMsIDB4MjRBQywKKyAgICAweEQ5NEQsIDB4RDk0RCwgMHgxRUY3LCAweEQ5NEUsIDB4RDk0RSwgMHgyMTc2LCAweEQ5NEYsIDB4RDk0RiwgMHgyNEFELAorICAgIDB4RDk1MCwgMHhEOTUwLCAweDRCOEIsIDB4RDk1MSwgMHhEOTUxLCAweDIwN0IsIDB4RDk1MiwgMHhEOTUyLCAweDFGNDUsCisgICAgMHhEOTUzLCAweEQ5NTMsIDB4MjRBQSwgMHhEOTU0LCAweEQ5NTQsIDB4MjA0QiwgMHhEOTU1LCAweEQ5NTUsIDB4MjAyRiwKKyAgICAweEQ5NTYsIDB4RDk1NiwgMHgxRjVBLCAweEQ5NTcsIDB4RDk1NywgMHgyNEIwLCAweEQ5NTgsIDB4RDk1OCwgMHg0QjhDLAorICAgIDB4RDk1OSwgMHhEOTU5LCAweDIyQjcsIDB4RDk1QSwgMHhEOTVBLCAweDFGN0YsIDB4RDk1QiwgMHhEOTVCLCAweDRCOEQsCisgICAgMHhEOTVDLCAweEQ5NUMsIDB4MjI2NSwgMHhEOTVELCAweEQ5NjIsIDB4NEI4RSwgMHhEOTYzLCAweEQ5NjMsIDB4MjRCMiwKKyAgICAweEQ5NjQsIDB4RDk2NCwgMHgyMTFCLCAweEQ5NjUsIDB4RDk2NSwgMHgxRTUxLCAweEQ5NjYsIDB4RDk2NiwgMHg0Qjk0LAorICAgIDB4RDk2NywgMHhEOTY3LCAweDI0QjQsIDB4RDk2OCwgMHhEOTZCLCAweDRCOTUsIDB4RDk2QywgMHhEOTZDLCAweDI0QjMsCisgICAgMHhEOTZELCAweEQ5NkQsIDB4NEI5OSwgMHhEOTZFLCAweEQ5NkUsIDB4MUU5RiwgMHhEOTZGLCAweEQ5NkYsIDB4NEI5QSwKKyAgICAweEQ5NzAsIDB4RDk3MCwgMHgyMTE4LCAweEQ5NzEsIDB4RDk3MSwgMHg0QjlCLCAweEQ5NzIsIDB4RDk3MiwgMHgyMEI0LAorICAgIDB4RDk3MywgMHhEOTczLCAweDIzQUYsIDB4RDk3NCwgMHhEOTc0LCAweDIxQkIsIDB4RDk3NSwgMHhEOTc1LCAweDIwNzIsCisgICAgMHhEOTc2LCAweEQ5NzYsIDB4MUY5NSwgMHhEOTc3LCAweEQ5NzcsIDB4NEI5QywgMHhEOTc4LCAweEQ5NzgsIDB4MUYwQSwKKyAgICAweEQ5NzksIDB4RDk3OSwgMHgyNEI2LCAweEQ5N0EsIDB4RDk3QiwgMHg0QjlELCAweEQ5N0MsIDB4RDk3QywgMHgyMjkxLAorICAgIDB4RDk3RCwgMHhEOTdELCAweDI0QjUsIDB4RDk3RSwgMHhEOTdFLCAweDIyNzgsIDB4RDk4MCwgMHhEOTgwLCAweDFFRDQsCisgICAgMHhEOTgxLCAweEQ5ODYsIDB4NEI5RiwgMHhEOTg3LCAweEQ5ODcsIDB4MUZGMywgMHhEOTg4LCAweEQ5OEMsIDB4NEJBNSwKKyAgICAweEQ5OEQsIDB4RDk4RCwgMHgyMkE5LCAweEQ5OEUsIDB4RDk4RSwgMHgyNEI3LCAweEQ5OEYsIDB4RDk4RiwgMHgxRjI4LAorICAgIDB4RDk5MCwgMHhEOTkwLCAweDIxMDksIDB4RDk5MSwgMHhEOTkxLCAweDIyQzcsIDB4RDk5MiwgMHhEOTk2LCAweDRCQUEsCisgICAgMHhEOTk3LCAweEQ5OTcsIDB4MjRBRSwgMHhEOTk4LCAweEQ5OTgsIDB4MjJCMSwgMHhEOTk5LCAweEQ5OUEsIDB4NEJBRiwKKyAgICAweEQ5OUIsIDB4RDk5QiwgMHgyMjY2LCAweEQ5OUMsIDB4RDk5QywgMHg0QkIxLCAweEQ5OUQsIDB4RDk5RCwgMHgyMjVCLAorICAgIDB4RDk5RSwgMHhEOTlFLCAweDIyQzQsIDB4RDk5RiwgMHhEOTlGLCAweDRCQjIsIDB4RDlBMCwgMHhEOUEwLCAweDIxMTUsCisgICAgMHhEOUExLCAweEQ5RkUsIDB4MTJCNSwgMHhEQTQwLCAweERBNDAsIDB4NEJCMywgMHhEQTQxLCAweERBNDEsIDB4MjIyQSwKKyAgICAweERBNDIsIDB4REE0MiwgMHgyNEIxLCAweERBNDMsIDB4REE0NywgMHg0QkI0LCAweERBNDgsIDB4REE0OCwgMHgyMTNELAorICAgIDB4REE0OSwgMHhEQTRDLCAweDRCQjksIDB4REE0RCwgMHhEQTRELCAweDFGMTUsIDB4REE0RSwgMHhEQTRFLCAweDIyNUMsCisgICAgMHhEQTRGLCAweERBNzIsIDB4NEJCRCwgMHhEQTczLCAweERBNzMsIDB4MUYxNCwgMHhEQTc0LCAweERBNzYsIDB4NEJFMSwKKyAgICAweERBNzcsIDB4REE3NywgMHgyMjdBLCAweERBNzgsIDB4REE3RSwgMHg0QkU0LCAweERBODAsIDB4REE4NCwgMHg0QkVCLAorICAgIDB4REE4NSwgMHhEQTg1LCAweDIwRUUsIDB4REE4NiwgMHhEQThELCAweDRCRjAsIDB4REE4RSwgMHhEQThFLCAweDI1RjgsCisgICAgMHhEQThGLCAweERBQTAsIDB4NEJGOCwgMHhEQUExLCAweERBRkUsIDB4MTMxMywgMHhEQjQwLCAweERCNUYsIDB4NEMwQSwKKyAgICAweERCNjAsIDB4REI2MCwgMHgxRjk0LCAweERCNjEsIDB4REI3NywgMHg0QzJBLCAweERCNzgsIDB4REI3OCwgMHgyMjMwLAorICAgIDB4REI3OSwgMHhEQjdFLCAweDRDNDEsIDB4REI4MCwgMHhEQjgzLCAweDRDNDcsIDB4REI4NCwgMHhEQjg0LCAweDI1RkQsCisgICAgMHhEQjg1LCAweERCOEEsIDB4NEM0QiwgMHhEQjhCLCAweERCOEIsIDB4MjYwMCwgMHhEQjhDLCAweERCOTcsIDB4NEM1MSwKKyAgICAweERCOTgsIDB4REI5OCwgMHgyNjA2LCAweERCOTksIDB4REJBMCwgMHg0QzVELCAweERCQTEsIDB4REJGRSwgMHgxMzcxLAorICAgIDB4REM0MCwgMHhEQzQ0LCAweDRDNjUsIDB4REM0NSwgMHhEQzQ1LCAweDI1RkYsIDB4REM0NiwgMHhEQzRFLCAweDRDNkEsCisgICAgMHhEQzRGLCAweERDNEYsIDB4MjVGQywgMHhEQzUwLCAweERDNTAsIDB4MUU4QywgMHhEQzUxLCAweERDNTEsIDB4MjYwMiwKKyAgICAweERDNTIsIDB4REM1MiwgMHg0QzczLCAweERDNTMsIDB4REM1MywgMHgyMjRELCAweERDNTQsIDB4REM1NCwgMHg0Qzc0LAorICAgIDB4REM1NSwgMHhEQzU1LCAweDI2MDQsIDB4REM1NiwgMHhEQzU2LCAweDI1RkUsIDB4REM1NywgMHhEQzU3LCAweDI2MDMsCisgICAgMHhEQzU4LCAweERDNUMsIDB4NEM3NSwgMHhEQzVELCAweERDNUQsIDB4MjYwMSwgMHhEQzVFLCAweERDNjEsIDB4NEM3QSwKKyAgICAweERDNjIsIDB4REM2MiwgMHgyNjA1LCAweERDNjMsIDB4REM2NSwgMHg0QzdFLCAweERDNjYsIDB4REM2NiwgMHgxRUEzLAorICAgIDB4REM2NywgMHhEQzY3LCAweDI2MDgsIDB4REM2OCwgMHhEQzZBLCAweDRDODEsIDB4REM2QiwgMHhEQzZCLCAweDI2MDcsCisgICAgMHhEQzZDLCAweERDN0IsIDB4NEM4NCwgMHhEQzdDLCAweERDN0MsIDB4MjBGMCwgMHhEQzdELCAweERDN0UsIDB4NEM5NCwKKyAgICAweERDODAsIDB4REM4NiwgMHg0Qzk2LCAweERDODcsIDB4REM4NywgMHgxRTdCLCAweERDODgsIDB4REM4OCwgMHgyMjY3LAorICAgIDB4REM4OSwgMHhEQzg5LCAweDFGMzYsIDB4REM4QSwgMHhEQzhBLCAweDFGRDYsIDB4REM4QiwgMHhEQzhELCAweDRDOUQsCisgICAgMHhEQzhFLCAweERDOEUsIDB4MjFFMCwgMHhEQzhGLCAweERDOEYsIDB4NENBMCwgMHhEQzkwLCAweERDOTAsIDB4MjQ4QywKKyAgICAweERDOTEsIDB4REM5NiwgMHg0Q0ExLCAweERDOTcsIDB4REM5NywgMHgyNDhELCAweERDOTgsIDB4REM5QSwgMHg0Q0E3LAorICAgIDB4REM5QiwgMHhEQzlCLCAweDIxMDIsIDB4REM5QywgMHhEQzlGLCAweDRDQUEsIDB4RENBMCwgMHhEQ0EwLCAweDI0OTQsCisgICAgMHhEQ0ExLCAweERDRkUsIDB4MTNDRiwgMHhERDQwLCAweERENDUsIDB4NENBRSwgMHhERDQ2LCAweERENDYsIDB4MjQ5MywKKyAgICAweERENDcsIDB4REQ0QywgMHg0Q0I0LCAweERENEQsIDB4REQ0RCwgMHgyNDhFLCAweERENEUsIDB4REQ1MiwgMHg0Q0JBLAorICAgIDB4REQ1MywgMHhERDUzLCAweDIyOTksIDB4REQ1NCwgMHhERDU0LCAweDI0OTEsIDB4REQ1NSwgMHhERDU1LCAweDI0OTYsCisgICAgMHhERDU2LCAweERENTYsIDB4MjQ4RiwgMHhERDU3LCAweERENTcsIDB4MjQ5MiwgMHhERDU4LCAweERENTgsIDB4NENCRiwKKyAgICAweERENTksIDB4REQ1OSwgMHgyNDk3LCAweERENUEsIDB4REQ1RCwgMHg0Q0MwLCAweERENUUsIDB4REQ1RSwgMHgxRkIxLAorICAgIDB4REQ1RiwgMHhERDVGLCAweDRDQzQsIDB4REQ2MCwgMHhERDYwLCAweDI0OUEsIDB4REQ2MSwgMHhERDYxLCAweDRDQzUsCisgICAgMHhERDYyLCAweERENjIsIDB4MjQ5OSwgMHhERDYzLCAweERENjMsIDB4NENDNiwgMHhERDY0LCAweERENjQsIDB4MjI1OCwKKyAgICAweERENjUsIDB4REQ2NSwgMHgyNDk4LCAweERENjYsIDB4REQ2QywgMHg0Q0M3LCAweERENkQsIDB4REQ2RCwgMHgyNDlCLAorICAgIDB4REQ2RSwgMHhERDZFLCAweDRDQ0UsIDB4REQ2RiwgMHhERDZGLCAweDFGMDksIDB4REQ3MCwgMHhERDcwLCAweDIwRTYsCisgICAgMHhERDcxLCAweERENzUsIDB4NENDRiwgMHhERDc2LCAweERENzYsIDB4MjAyNiwgMHhERDc3LCAweERENzcsIDB4MjQ5RiwKKyAgICAweERENzgsIDB4REQ3OCwgMHgxRjU5LCAweERENzksIDB4REQ3QSwgMHgyNDlELCAweEREN0IsIDB4REQ3RSwgMHg0Q0Q0LAorICAgIDB4REQ4MCwgMHhERDgwLCAweDRDRDgsIDB4REQ4MSwgMHhERDgxLCAweDFGM0IsIDB4REQ4MiwgMHhERDgyLCAweDI0OUMsCisgICAgMHhERDgzLCAweEREODQsIDB4NENEOSwgMHhERDg1LCAweEREODUsIDB4MUUzQSwgMHhERDg2LCAweEREODYsIDB4MjA1QiwKKyAgICAweEREODcsIDB4REQ4QSwgMHg0Q0RCLCAweEREOEIsIDB4REQ4QiwgMHgxRjcwLCAweEREOEMsIDB4REQ4RSwgMHg0Q0RGLAorICAgIDB4REQ4RiwgMHhERDhGLCAweDI0QTAsIDB4REQ5MCwgMHhERDkzLCAweDRDRTIsIDB4REQ5NCwgMHhERDk0LCAweDIxM0IsCisgICAgMHhERDk1LCAweEREOTYsIDB4NENFNiwgMHhERDk3LCAweEREOTcsIDB4MUYwNywgMHhERDk4LCAweEREOTksIDB4NENFOCwKKyAgICAweEREOUEsIDB4REQ5QSwgMHgyMjcwLCAweEREOUIsIDB4REQ5QiwgMHgyMjM3LCAweEREOUMsIDB4REQ5RCwgMHg0Q0VBLAorICAgIDB4REQ5RSwgMHhERDlFLCAweDI0RDIsIDB4REQ5RiwgMHhERDlGLCAweDRDRUMsIDB4RERBMCwgMHhEREEwLCAweDIxQjMsCisgICAgMHhEREExLCAweERERkUsIDB4MTQyRCwgMHhERTQwLCAweERFNDAsIDB4MjI0NSwgMHhERTQxLCAweERFNDEsIDB4MjRBMSwKKyAgICAweERFNDIsIDB4REU0MywgMHg0Q0VELCAweERFNDQsIDB4REU0NCwgMHgyMkE4LCAweERFNDUsIDB4REU0NywgMHg0Q0VGLAorICAgIDB4REU0OCwgMHhERTQ4LCAweDIyN0MsIDB4REU0OSwgMHhERTQ5LCAweDFGQjAsIDB4REU0QSwgMHhERTRFLCAweDRDRjIsCisgICAgMHhERTRGLCAweERFNEYsIDB4MjRBMiwgMHhERTUwLCAweERFNTksIDB4NENGNywgMHhERTVBLCAweERFNUEsIDB4MUY0NiwKKyAgICAweERFNUIsIDB4REU1QiwgMHg0RDAxLCAweERFNUMsIDB4REU1QywgMHgyMzgwLCAweERFNUQsIDB4REU1RCwgMHgyNDk1LAorICAgIDB4REU1RSwgMHhERTVFLCAweDREMDIsIDB4REU1RiwgMHhERTVGLCAweDI0OTAsIDB4REU2MCwgMHhERTZBLCAweDREMDMsCisgICAgMHhERTZCLCAweERFNkIsIDB4MUUzMCwgMHhERTZDLCAweERFNkUsIDB4NEQwRSwgMHhERTZGLCAweERFNkYsIDB4MUU5RCwKKyAgICAweERFNzAsIDB4REU3MCwgMHgxRTRCLCAweERFNzEsIDB4REU3MSwgMHgxRTRBLCAweERFNzIsIDB4REU3MiwgMHgyMEFBLAorICAgIDB4REU3MywgMHhERTdFLCAweDREMTEsIDB4REU4MCwgMHhERTkxLCAweDREMUQsIDB4REU5MiwgMHhERTkyLCAweDI2N0IsCisgICAgMHhERTkzLCAweERFOUUsIDB4NEQyRiwgMHhERTlGLCAweERFOUYsIDB4MjNGMiwgMHhERUEwLCAweERFQTAsIDB4NEQzQiwKKyAgICAweERFQTEsIDB4REVGRSwgMHgxNDhCLCAweERGNDAsIDB4REY0MCwgMHgyMjdFLCAweERGNDEsIDB4REY0MSwgMHg0RDNDLAorICAgIDB4REY0MiwgMHhERjQyLCAweDIwMTksIDB4REY0MywgMHhERjRDLCAweDREM0QsIDB4REY0RCwgMHhERjRELCAweDFGQkIsCisgICAgMHhERjRFLCAweERGNUIsIDB4NEQ0NywgMHhERjVDLCAweERGNUMsIDB4MjI1MywgMHhERjVELCAweERGNUQsIDB4NEQ1NSwKKyAgICAweERGNUUsIDB4REY1RSwgMHgxRjNFLCAweERGNUYsIDB4REY1RiwgMHgxRUE2LCAweERGNjAsIDB4REY2MCwgMHgyMThFLAorICAgIDB4REY2MSwgMHhERjYzLCAweDRENTYsIDB4REY2NCwgMHhERjY0LCAweDIxRUMsIDB4REY2NSwgMHhERjY1LCAweDRENTksCisgICAgMHhERjY2LCAweERGNjYsIDB4MUVCRSwgMHhERjY3LCAweERGNjcsIDB4NEQ1QSwgMHhERjY4LCAweERGNjgsIDB4MjI0QSwKKyAgICAweERGNjksIDB4REY2QywgMHg0RDVCLCAweERGNkQsIDB4REY2RCwgMHgyMTMzLCAweERGNkUsIDB4REY3MywgMHg0RDVGLAorICAgIDB4REY3NCwgMHhERjc0LCAweDFFODQsIDB4REY3NSwgMHhERjc2LCAweDRENjUsIDB4REY3NywgMHhERjc3LCAweDIwQ0YsCisgICAgMHhERjc4LCAweERGNzgsIDB4MjFFMiwgMHhERjc5LCAweERGNzksIDB4NEQ2NywgMHhERjdBLCAweERGN0EsIDB4MjIwRiwKKyAgICAweERGN0IsIDB4REY3QiwgMHg0RDY4LCAweERGN0MsIDB4REY3QywgMHgyMDI5LCAweERGN0QsIDB4REY3RCwgMHg0RDY5LAorICAgIDB4REY3RSwgMHhERjdFLCAweDIwNzMsIDB4REY4MCwgMHhERjgwLCAweDFGNTUsIDB4REY4MSwgMHhERjgyLCAweDRENkEsCisgICAgMHhERjgzLCAweERGODMsIDB4MjNGMSwgMHhERjg0LCAweERGODQsIDB4NEQ2QywgMHhERjg1LCAweERGODUsIDB4MUU0NiwKKyAgICAweERGODYsIDB4REY4OCwgMHg0RDZELCAweERGODksIDB4REY4OSwgMHgyMDYzLCAweERGOEEsIDB4REY4QSwgMHgyM0YzLAorICAgIDB4REY4QiwgMHhERkEwLCAweDRENzAsIDB4REZBMSwgMHhERkZFLCAweDE0RTksIDB4RTA0MCwgMHhFMDRGLCAweDREODYsCisgICAgMHhFMDUwLCAweEUwNTAsIDB4MjMxRSwgMHhFMDUxLCAweEUwNUMsIDB4NEQ5NiwgMHhFMDVELCAweEUwNUQsIDB4MjIzMywKKyAgICAweEUwNUUsIDB4RTA2OCwgMHg0REEyLCAweEUwNjksIDB4RTA2OSwgMHgyMzIwLCAweEUwNkEsIDB4RTA2QiwgMHg0REFELAorICAgIDB4RTA2QywgMHhFMDZDLCAweDIxQzcsIDB4RTA2RCwgMHhFMDc0LCAweDREQUYsIDB4RTA3NSwgMHhFMDc1LCAweDIyQkMsCisgICAgMHhFMDc2LCAweEUwNzYsIDB4NERCNywgMHhFMDc3LCAweEUwNzcsIDB4MjMxQywgMHhFMDc4LCAweEUwNzgsIDB4NERCOCwKKyAgICAweEUwNzksIDB4RTA3OSwgMHgyMjUxLCAweEUwN0EsIDB4RTA3RSwgMHg0REI5LCAweEUwODAsIDB4RTA4NiwgMHg0REJFLAorICAgIDB4RTA4NywgMHhFMDg3LCAweDFFQkIsIDB4RTA4OCwgMHhFMDhDLCAweDREQzUsIDB4RTA4RCwgMHhFMDhELCAweDIyODcsCisgICAgMHhFMDhFLCAweEUwOEUsIDB4NERDQSwgMHhFMDhGLCAweEUwOEYsIDB4MjAyRCwgMHhFMDkwLCAweEUwOTAsIDB4MUVBQiwKKyAgICAweEUwOTEsIDB4RTA5MSwgMHg0RENCLCAweEUwOTIsIDB4RTA5MiwgMHgyMzFELCAweEUwOTMsIDB4RTA5MywgMHg0RENDLAorICAgIDB4RTA5NCwgMHhFMDk0LCAweDIzMUYsIDB4RTA5NSwgMHhFMDk2LCAweDREQ0QsIDB4RTA5NywgMHhFMDk3LCAweDIzMUIsCisgICAgMHhFMDk4LCAweEUwQTAsIDB4NERDRiwgMHhFMEExLCAweEUwRkUsIDB4MTU0NywgMHhFMTQwLCAweEUxNDEsIDB4NEREOCwKKyAgICAweEUxNDIsIDB4RTE0MiwgMHgyMzIxLCAweEUxNDMsIDB4RTE2MywgMHg0RERBLCAweEUxNjQsIDB4RTE2NCwgMHgyMjU1LAorICAgIDB4RTE2NSwgMHhFMTY3LCAweDRERkIsIDB4RTE2OCwgMHhFMTY4LCAweDFFOEYsIDB4RTE2OSwgMHhFMTczLCAweDRERkUsCisgICAgMHhFMTc0LCAweEUxNzQsIDB4MjIwQywgMHhFMTc1LCAweEUxNzUsIDB4MUZBNCwgMHhFMTc2LCAweEUxN0UsIDB4NEUwOSwKKyAgICAweEUxODAsIDB4RTE4MywgMHg0RTEyLCAweEUxODQsIDB4RTE4NCwgMHgyMDlCLCAweEUxODUsIDB4RTE4NSwgMHgyMUQ4LAorICAgIDB4RTE4NiwgMHhFMTg2LCAweDRFMTYsIDB4RTE4NywgMHhFMTg3LCAweDI1RkEsIDB4RTE4OCwgMHhFMTg4LCAweDRFMTcsCisgICAgMHhFMTg5LCAweEUxODksIDB4MjVGOSwgMHhFMThBLCAweEUxOEIsIDB4NEUxOCwgMHhFMThDLCAweEUxOEMsIDB4MjEzNCwKKyAgICAweEUxOEQsIDB4RTE4RCwgMHg0RTFBLCAweEUxOEUsIDB4RTE5MCwgMHgyNEYzLCAweEUxOTEsIDB4RTE5MSwgMHgyNEY4LAorICAgIDB4RTE5MiwgMHhFMTkyLCAweDRFMUIsIDB4RTE5MywgMHhFMTkzLCAweDI0RjcsIDB4RTE5NCwgMHhFMTk0LCAweDFFQzgsCisgICAgMHhFMTk1LCAweEUxOTUsIDB4MjRGNiwgMHhFMTk2LCAweEUxOTcsIDB4NEUxQywgMHhFMTk4LCAweEUxOTgsIDB4MjI4MCwKKyAgICAweEUxOTksIDB4RTE5RCwgMHg0RTFFLCAweEUxOUUsIDB4RTE5RSwgMHgxRUM1LCAweEUxOUYsIDB4RTE5RiwgMHgyNEZCLAorICAgIDB4RTFBMCwgMHhFMUEwLCAweDRFMjMsIDB4RTFBMSwgMHhFMUZFLCAweDE1QTUsIDB4RTI0MCwgMHhFMjQwLCAweDRFMjQsCisgICAgMHhFMjQxLCAweEUyNDEsIDB4MjRGQSwgMHhFMjQyLCAweEUyNDIsIDB4NEUyNSwgMHhFMjQzLCAweEUyNDMsIDB4MUVFRCwKKyAgICAweEUyNDQsIDB4RTI0RSwgMHg0RTI2LCAweEUyNEYsIDB4RTI0RiwgMHgyNEZELCAweEUyNTAsIDB4RTI1MCwgMHg0RTMxLAorICAgIDB4RTI1MSwgMHhFMjUxLCAweDI0RjksIDB4RTI1MiwgMHhFMjUyLCAweDRFMzIsIDB4RTI1MywgMHhFMjUzLCAweDI0RkUsCisgICAgMHhFMjU0LCAweEUyNTQsIDB4MjBDRCwgMHhFMjU1LCAweEUyNTksIDB4NEUzMywgMHhFMjVBLCAweEUyNUEsIDB4MjUwOCwKKyAgICAweEUyNUIsIDB4RTI1QiwgMHgyNTA0LCAweEUyNUMsIDB4RTI1RCwgMHg0RTM4LCAweEUyNUUsIDB4RTI1RSwgMHgyNTA2LAorICAgIDB4RTI1RiwgMHhFMjYxLCAweDRFM0EsIDB4RTI2MiwgMHhFMjYyLCAweDI0RkYsIDB4RTI2MywgMHhFMjYzLCAweDIwOTAsCisgICAgMHhFMjY0LCAweEUyNjYsIDB4NEUzRCwgMHhFMjY3LCAweEUyNjcsIDB4MUVERCwgMHhFMjY4LCAweEUyNjgsIDB4MUYyNSwKKyAgICAweEUyNjksIDB4RTI2OSwgMHg0RTQwLCAweEUyNkEsIDB4RTI2QSwgMHgyNTAzLCAweEUyNkIsIDB4RTI2QiwgMHgyNTAyLAorICAgIDB4RTI2QywgMHhFMjZELCAweDRFNDEsIDB4RTI2RSwgMHhFMjZFLCAweDFFN0EsIDB4RTI2RiwgMHhFMjZGLCAweDIwQTYsCisgICAgMHhFMjcwLCAweEUyNzcsIDB4NEU0MywgMHhFMjc4LCAweEUyNzgsIDB4MUZENSwgMHhFMjc5LCAweEUyN0MsIDB4NEU0QiwKKyAgICAweEUyN0QsIDB4RTI3RCwgMHgxRjExLCAweEUyN0UsIDB4RTI3RSwgMHg0RTRGLCAweEUyODAsIDB4RTI4MCwgMHgyNTA3LAorICAgIDB4RTI4MSwgMHhFMjgxLCAweDI1MDAsIDB4RTI4MiwgMHhFMjgyLCAweDI1MDUsIDB4RTI4MywgMHhFMjg4LCAweDRFNTAsCisgICAgMHhFMjg5LCAweEUyODksIDB4MjUxOSwgMHhFMjhBLCAweEUyOEEsIDB4NEU1NiwgMHhFMjhCLCAweEUyOEIsIDB4MjUxNSwKKyAgICAweEUyOEMsIDB4RTI4RCwgMHg0RTU3LCAweEUyOEUsIDB4RTI4RSwgMHgyNTBDLCAweEUyOEYsIDB4RTI4RiwgMHgyMDMxLAorICAgIDB4RTI5MCwgMHhFMjkxLCAweDRFNTksIDB4RTI5MiwgMHhFMjkyLCAweDI1MEIsIDB4RTI5MywgMHhFMjkzLCAweDI1MEYsCisgICAgMHhFMjk0LCAweEUyOTQsIDB4MjUxQSwgMHhFMjk1LCAweEUyOTUsIDB4MjUwOSwgMHhFMjk2LCAweEUyOTcsIDB4NEU1QiwKKyAgICAweEUyOTgsIDB4RTI5OCwgMHgyNTBFLCAweEUyOTksIDB4RTI5OSwgMHgyMjM0LCAweEUyOUEsIDB4RTI5QSwgMHgyNTEzLAorICAgIDB4RTI5QiwgMHhFMjlCLCAweDFGODAsIDB4RTI5QywgMHhFMjlGLCAweDRFNUQsIDB4RTJBMCwgMHhFMkEwLCAweDI1MDEsCisgICAgMHhFMkExLCAweEUyRkUsIDB4MTYwMywgMHhFMzQwLCAweEUzNDEsIDB4NEU2MSwgMHhFMzQyLCAweEUzNDIsIDB4MjUxNywKKyAgICAweEUzNDMsIDB4RTM0MywgMHgyNTE2LCAweEUzNDQsIDB4RTM0NiwgMHg0RTYzLCAweEUzNDcsIDB4RTM0NywgMHgyNTE4LAorICAgIDB4RTM0OCwgMHhFMzRBLCAweDRFNjYsIDB4RTM0QiwgMHhFMzRCLCAweDFFNTYsIDB4RTM0QywgMHhFMzRFLCAweDRFNjksCisgICAgMHhFMzRGLCAweEUzNEYsIDB4MjUwRCwgMHhFMzUwLCAweEUzNTAsIDB4NEU2QywgMHhFMzUxLCAweEUzNTEsIDB4MjBEMywKKyAgICAweEUzNTIsIDB4RTM1MywgMHg0RTZELCAweEUzNTQsIDB4RTM1NCwgMHgyMDdBLCAweEUzNTUsIDB4RTM1NSwgMHgyMENFLAorICAgIDB4RTM1NiwgMHhFMzU3LCAweDRFNkYsIDB4RTM1OCwgMHhFMzU4LCAweDI1MTAsIDB4RTM1OSwgMHhFMzVCLCAweDRFNzEsCisgICAgMHhFMzVDLCAweEUzNUMsIDB4MUU1NSwgMHhFMzVELCAweEUzNUYsIDB4NEU3NCwgMHhFMzYwLCAweEUzNjAsIDB4MjUwQSwKKyAgICAweEUzNjEsIDB4RTM2NSwgMHg0RTc3LCAweEUzNjYsIDB4RTM2NywgMHgyNTExLCAweEUzNjgsIDB4RTM3MCwgMHg0RTdDLAorICAgIDB4RTM3MSwgMHhFMzcxLCAweDFGQUEsIDB4RTM3MiwgMHhFMzcyLCAweDRFODUsIDB4RTM3MywgMHhFMzczLCAweDI1MUUsCisgICAgMHhFMzc0LCAweEUzNzQsIDB4MUYxRiwgMHhFMzc1LCAweEUzNzcsIDB4NEU4NiwgMHhFMzc4LCAweEUzNzgsIDB4MjUyRCwKKyAgICAweEUzNzksIDB4RTM3OSwgMHgyMjFELCAweEUzN0EsIDB4RTM3QiwgMHg0RTg5LCAweEUzN0MsIDB4RTM3QywgMHgyNTMyLAorICAgIDB4RTM3RCwgMHhFMzdELCAweDRFOEIsIDB4RTM3RSwgMHhFMzdFLCAweDIxN0IsIDB4RTM4MCwgMHhFMzg5LCAweDRFOEMsCisgICAgMHhFMzhBLCAweEUzOEEsIDB4MjFBRiwgMHhFMzhCLCAweEUzOEIsIDB4NEU5NiwgMHhFMzhDLCAweEUzOEMsIDB4MjUyQywKKyAgICAweEUzOEQsIDB4RTM4RSwgMHg0RTk3LCAweEUzOEYsIDB4RTM4RiwgMHgyNTI4LCAweEUzOTAsIDB4RTM5MCwgMHg0RTk5LAorICAgIDB4RTM5MSwgMHhFMzkxLCAweDIwOEMsIDB4RTM5MiwgMHhFMzkyLCAweDRFOUEsIDB4RTM5MywgMHhFMzkzLCAweDI1MkYsCisgICAgMHhFMzk0LCAweEUzOTQsIDB4NEU5QiwgMHhFMzk1LCAweEUzOTUsIDB4MjFCQywgMHhFMzk2LCAweEUzOTgsIDB4NEU5QywKKyAgICAweEUzOTksIDB4RTM5OSwgMHgyNTFELCAweEUzOUEsIDB4RTM5QiwgMHg0RTlGLCAweEUzOUMsIDB4RTM5QywgMHgyNTM1LAorICAgIDB4RTM5RCwgMHhFMzlELCAweDRFQTEsIDB4RTM5RSwgMHhFMzlFLCAweDIyMEQsIDB4RTM5RiwgMHhFMzlGLCAweDI1MjYsCisgICAgMHhFM0EwLCAweEUzQTAsIDB4NEVBMiwgMHhFM0ExLCAweEUzRkUsIDB4MTY2MSwgMHhFNDQwLCAweEU0NDAsIDB4MjUzNCwKKyAgICAweEU0NDEsIDB4RTQ0MSwgMHgyNTJBLCAweEU0NDIsIDB4RTQ0MiwgMHgyNTFGLCAweEU0NDMsIDB4RTQ0MywgMHgyNTMxLAorICAgIDB4RTQ0NCwgMHhFNDQ0LCAweDI1MUMsIDB4RTQ0NSwgMHhFNDQ3LCAweDRFQTMsIDB4RTQ0OCwgMHhFNDQ4LCAweDI1MjUsCisgICAgMHhFNDQ5LCAweEU0NEQsIDB4NEVBNiwgMHhFNDRFLCAweEU0NEUsIDB4MjFDRCwgMHhFNDRGLCAweEU0NEYsIDB4NEVBQiwKKyAgICAweEU0NTAsIDB4RTQ1MCwgMHgyMURBLCAweEU0NTEsIDB4RTQ1MSwgMHg0RUFDLCAweEU0NTIsIDB4RTQ1MiwgMHgyMTcyLAorICAgIDB4RTQ1MywgMHhFNDUzLCAweDI1M0UsIDB4RTQ1NCwgMHhFNDU3LCAweDRFQUQsIDB4RTQ1OCwgMHhFNDU4LCAweDIwNEYsCisgICAgMHhFNDU5LCAweEU0NTksIDB4NEVCMSwgMHhFNDVBLCAweEU0NUEsIDB4MjU0MywgMHhFNDVCLCAweEU0NUIsIDB4NEVCMiwKKyAgICAweEU0NUMsIDB4RTQ1QywgMHgyMUQ3LCAweEU0NUQsIDB4RTQ1RCwgMHg0RUIzLCAweEU0NUUsIDB4RTQ1RSwgMHgxRTNDLAorICAgIDB4RTQ1RiwgMHhFNDYxLCAweDRFQjQsIDB4RTQ2MiwgMHhFNDYyLCAweDI1MjksIDB4RTQ2MywgMHhFNDY0LCAweDRFQjcsCisgICAgMHhFNDY1LCAweEU0NjUsIDB4MjUyMSwgMHhFNDY2LCAweEU0NjcsIDB4NEVCOSwgMHhFNDY4LCAweEU0NjgsIDB4MUVGRiwKKyAgICAweEU0NjksIDB4RTQ3MiwgMHg0RUJCLCAweEU0NzMsIDB4RTQ3MywgMHgyNTNGLCAweEU0NzQsIDB4RTQ3NCwgMHg0RUM1LAorICAgIDB4RTQ3NSwgMHhFNDc1LCAweDI1NDQsIDB4RTQ3NiwgMHhFNDc4LCAweDRFQzYsIDB4RTQ3OSwgMHhFNDc5LCAweDI1MjMsCisgICAgMHhFNDdBLCAweEU0N0EsIDB4MUU5MCwgMHhFNDdCLCAweEU0N0IsIDB4MjUzQSwgMHhFNDdDLCAweEU0N0MsIDB4MjU0NSwKKyAgICAweEU0N0QsIDB4RTQ3RCwgMHg0RUM5LCAweEU0N0UsIDB4RTQ3RSwgMHgyNTNELCAweEU0ODAsIDB4RTQ4MCwgMHg0RUNBLAorICAgIDB4RTQ4MSwgMHhFNDgxLCAweDIwQzEsIDB4RTQ4MiwgMHhFNDgzLCAweDRFQ0IsIDB4RTQ4NCwgMHhFNDg0LCAweDIxMDMsCisgICAgMHhFNDg1LCAweEU0ODUsIDB4MjUyMCwgMHhFNDg2LCAweEU0ODYsIDB4MjUzQywgMHhFNDg3LCAweEU0ODcsIDB4MjUzQiwKKyAgICAweEU0ODgsIDB4RTQ4OCwgMHgyNTM4LCAweEU0ODksIDB4RTQ4QywgMHg0RUNELCAweEU0OEQsIDB4RTQ4RCwgMHgyNTQwLAorICAgIDB4RTQ4RSwgMHhFNDhFLCAweDRFRDEsIDB4RTQ4RiwgMHhFNDhGLCAweDFGQ0QsIDB4RTQ5MCwgMHhFNDkyLCAweDRFRDIsCisgICAgMHhFNDkzLCAweEU0OTMsIDB4MUYxOCwgMHhFNDk0LCAweEU0OTcsIDB4NEVENSwgMHhFNDk4LCAweEU0OTgsIDB4MjU0QiwKKyAgICAweEU0OTksIDB4RTQ5QywgMHg0RUQ5LCAweEU0OUQsIDB4RTQ5RCwgMHgyNTQ3LCAweEU0OUUsIDB4RTQ5RiwgMHgyNTRGLAorICAgIDB4RTRBMCwgMHhFNEEwLCAweDRFREQsIDB4RTRBMSwgMHhFNEZFLCAweDE2QkYsIDB4RTU0MCwgMHhFNTQ1LCAweDRFREUsCisgICAgMHhFNTQ2LCAweEU1NDYsIDB4MjJCMCwgMHhFNTQ3LCAweEU1NDcsIDB4NEVFNCwgMHhFNTQ4LCAweEU1NDgsIDB4MjU0NiwKKyAgICAweEU1NDksIDB4RTU0QSwgMHg0RUU1LCAweEU1NEIsIDB4RTU0QiwgMHgyNTRDLCAweEU1NEMsIDB4RTU0RCwgMHg0RUU3LAorICAgIDB4RTU0RSwgMHhFNTRFLCAweDFFOUEsIDB4RTU0RiwgMHhFNTRGLCAweDI1NTIsIDB4RTU1MCwgMHhFNTUwLCAweDI1MzAsCisgICAgMHhFNTUxLCAweEU1NTEsIDB4MjU0OSwgMHhFNTUyLCAweEU1NTQsIDB4NEVFOSwgMHhFNTU1LCAweEU1NTUsIDB4MjU1MSwKKyAgICAweEU1NTYsIDB4RTU1NiwgMHgxRUNBLCAweEU1NTcsIDB4RTU1NywgMHg0RUVDLCAweEU1NTgsIDB4RTU1OCwgMHgyMEQyLAorICAgIDB4RTU1OSwgMHhFNTVCLCAweDRFRUQsIDB4RTU1QywgMHhFNTVDLCAweDFGQjgsIDB4RTU1RCwgMHhFNTVELCAweDRFRjAsCisgICAgMHhFNTVFLCAweEU1NUUsIDB4MjA3OSwgMHhFNTVGLCAweEU1NjAsIDB4NEVGMSwgMHhFNTYxLCAweEU1NjEsIDB4MjFBQiwKKyAgICAweEU1NjIsIDB4RTU2MywgMHg0RUYzLCAweEU1NjQsIDB4RTU2NCwgMHgyNTRELCAweEU1NjUsIDB4RTU2NSwgMHgxRUE1LAorICAgIDB4RTU2NiwgMHhFNTY3LCAweDRFRjUsIDB4RTU2OCwgMHhFNTY4LCAweDIwNEMsIDB4RTU2OSwgMHhFNTY5LCAweDIwODAsCisgICAgMHhFNTZBLCAweEU1NkIsIDB4NEVGNywgMHhFNTZDLCAweEU1NkMsIDB4MjY2RCwgMHhFNTZELCAweEU1NkQsIDB4NEVGOSwKKyAgICAweEU1NkUsIDB4RTU2RSwgMHgyNTM3LCAweEU1NkYsIDB4RTU3NCwgMHg0RUZBLCAweEU1NzUsIDB4RTU3NSwgMHgyNTRBLAorICAgIDB4RTU3NiwgMHhFNTc2LCAweDIxQjgsIDB4RTU3NywgMHhFNTc3LCAweDRGMDAsIDB4RTU3OCwgMHhFNTc4LCAweDI1NEUsCisgICAgMHhFNTc5LCAweEU1N0EsIDB4NEYwMSwgMHhFNTdCLCAweEU1N0IsIDB4MjRGQywgMHhFNTdDLCAweEU1N0MsIDB4MjU1NCwKKyAgICAweEU1N0QsIDB4RTU3RSwgMHg0RjAzLCAweEU1ODAsIDB4RTU4MCwgMHg0RjA1LCAweEU1ODEsIDB4RTU4MSwgMHgxRjNDLAorICAgIDB4RTU4MiwgMHhFNTgyLCAweDRGMDYsIDB4RTU4MywgMHhFNTgzLCAweDFFRDUsIDB4RTU4NCwgMHhFNTg5LCAweDRGMDcsCisgICAgMHhFNThBLCAweEU1OEEsIDB4MjU1NiwgMHhFNThCLCAweEU1OEQsIDB4NEYwRCwgMHhFNThFLCAweEU1OEUsIDB4MjI2OCwKKyAgICAweEU1OEYsIDB4RTU5MCwgMHg0RjEwLCAweEU1OTEsIDB4RTU5MSwgMHgxRUQ2LCAweEU1OTIsIDB4RTU5OSwgMHg0RjEyLAorICAgIDB4RTU5QSwgMHhFNTlBLCAweDI1NTcsIDB4RTU5QiwgMHhFNTlCLCAweDI1NTMsIDB4RTU5QywgMHhFNTlFLCAweDRGMUEsCisgICAgMHhFNTlGLCAweEU1OUYsIDB4MjU0OCwgMHhFNUEwLCAweEU1QTAsIDB4NEYxRCwgMHhFNUExLCAweEU1RkUsIDB4MTcxRCwKKyAgICAweEU2NDAsIDB4RTY0MCwgMHgyMERDLCAweEU2NDEsIDB4RTY0MywgMHg0RjFFLCAweEU2NDQsIDB4RTY0NCwgMHgyNTU5LAorICAgIDB4RTY0NSwgMHhFNjQ4LCAweDRGMjEsIDB4RTY0OSwgMHhFNjQ5LCAweDFGOTcsIDB4RTY0QSwgMHhFNjRBLCAweDI1NTUsCisgICAgMHhFNjRCLCAweEU2NEQsIDB4NEYyNSwgMHhFNjRFLCAweEU2NEUsIDB4MjI3RCwgMHhFNjRGLCAweEU2NTEsIDB4NEYyOCwKKyAgICAweEU2NTIsIDB4RTY1MiwgMHgyNTdFLCAweEU2NTMsIDB4RTY1NSwgMHg0RjJCLCAweEU2NTYsIDB4RTY1NiwgMHgyMDdDLAorICAgIDB4RTY1NywgMHhFNjU3LCAweDRGMkUsIDB4RTY1OCwgMHhFNjU4LCAweDI1NUEsIDB4RTY1OSwgMHhFNjVBLCAweDRGMkYsCisgICAgMHhFNjVCLCAweEU2NUIsIDB4MjU1RSwgMHhFNjVDLCAweEU2NUQsIDB4NEYzMSwgMHhFNjVFLCAweEU2NUUsIDB4MUUzNCwKKyAgICAweEU2NUYsIDB4RTY2OCwgMHg0RjMzLCAweEU2NjksIDB4RTY2OSwgMHgyMTVFLCAweEU2NkEsIDB4RTY2QSwgMHg0RjNELAorICAgIDB4RTY2QiwgMHhFNjZCLCAweDI1NjAsIDB4RTY2QywgMHhFNjc0LCAweDRGM0UsIDB4RTY3NSwgMHhFNjc1LCAweDIxQTIsCisgICAgMHhFNjc2LCAweEU2NzYsIDB4MjM1NCwgMHhFNjc3LCAweEU2NzgsIDB4NEY0NywgMHhFNjc5LCAweEU2NzksIDB4MjU2MywKKyAgICAweEU2N0EsIDB4RTY3QSwgMHgyNTI3LCAweEU2N0IsIDB4RTY3QiwgMHg0RjQ5LCAweEU2N0MsIDB4RTY3QywgMHgyNTJFLAorICAgIDB4RTY3RCwgMHhFNjdELCAweDI1NTgsIDB4RTY3RSwgMHhFNjdFLCAweDRGNEEsIDB4RTY4MCwgMHhFNjgwLCAweDFGMUIsCisgICAgMHhFNjgxLCAweEU2ODEsIDB4NEY0QiwgMHhFNjgyLCAweEU2ODIsIDB4MjI4MywgMHhFNjgzLCAweEU2ODMsIDB4NEY0QywKKyAgICAweEU2ODQsIDB4RTY4NCwgMHgyNTY0LCAweEU2ODUsIDB4RTY4NiwgMHg0RjRELCAweEU2ODcsIDB4RTY4NywgMHgyMEEwLAorICAgIDB4RTY4OCwgMHhFNjg4LCAweDRGNEYsIDB4RTY4OSwgMHhFNjg5LCAweDI1NjUsIDB4RTY4QSwgMHhFNjhCLCAweDRGNTAsCisgICAgMHhFNjhDLCAweEU2OEMsIDB4MjU2MSwgMHhFNjhELCAweEU2OTIsIDB4NEY1MiwgMHhFNjkzLCAweEU2OTMsIDB4MjU2MiwKKyAgICAweEU2OTQsIDB4RTY5NiwgMHg0RjU4LCAweEU2OTcsIDB4RTY5NywgMHgyNTZDLCAweEU2OTgsIDB4RTY5QSwgMHg0RjVCLAorICAgIDB4RTY5QiwgMHhFNjlCLCAweDI1NkQsIDB4RTY5QywgMHhFNjlDLCAweDIwMjAsIDB4RTY5RCwgMHhFNjlFLCAweDRGNUUsCisgICAgMHhFNjlGLCAweEU2OUYsIDB4MjU1RiwgMHhFNkEwLCAweEU2QTAsIDB4MjU2QSwgMHhFNkExLCAweEU2RkUsIDB4MTc3QiwKKyAgICAweEU3NDAsIDB4RTc0MiwgMHg0RjYwLCAweEU3NDMsIDB4RTc0MywgMHgyNTZFLCAweEU3NDQsIDB4RTc0NywgMHg0RjYzLAorICAgIDB4RTc0OCwgMHhFNzQ4LCAweDI1MzksIDB4RTc0OSwgMHhFNzQ5LCAweDI1NUMsIDB4RTc0QSwgMHhFNzRDLCAweDRGNjcsCisgICAgMHhFNzRELCAweEU3NEUsIDB4MjU2OCwgMHhFNzRGLCAweEU3NEYsIDB4MjU2QiwgMHhFNzUwLCAweEU3NTAsIDB4MUU2RiwKKyAgICAweEU3NTEsIDB4RTc1MSwgMHg0RjZBLCAweEU3NTIsIDB4RTc1MiwgMHgxRkM0LCAweEU3NTMsIDB4RTc1MywgMHgyNTY3LAorICAgIDB4RTc1NCwgMHhFNzU0LCAweDRGNkIsIDB4RTc1NSwgMHhFNzU1LCAweDI1NUIsIDB4RTc1NiwgMHhFNzU4LCAweDRGNkMsCisgICAgMHhFNzU5LCAweEU3NTksIDB4MjYxRCwgMHhFNzVBLCAweEU3NjUsIDB4NEY2RiwgMHhFNzY2LCAweEU3NjYsIDB4MjUyQiwKKyAgICAweEU3NjcsIDB4RTc2NywgMHg0RjdCLCAweEU3NjgsIDB4RTc2OCwgMHgyNTcxLCAweEU3NjksIDB4RTc2OSwgMHg0RjdDLAorICAgIDB4RTc2QSwgMHhFNzZBLCAweDI1NzcsIDB4RTc2QiwgMHhFNzczLCAweDRGN0QsIDB4RTc3NCwgMHhFNzc0LCAweDI1MjIsCisgICAgMHhFNzc1LCAweEU3N0IsIDB4NEY4NiwgMHhFNzdDLCAweEU3N0MsIDB4MjUzMywgMHhFNzdELCAweEU3N0UsIDB4NEY4RCwKKyAgICAweEU3ODAsIDB4RTc4MSwgMHg0RjhGLCAweEU3ODIsIDB4RTc4MiwgMHgyMDJBLCAweEU3ODMsIDB4RTc4MywgMHg0RjkxLAorICAgIDB4RTc4NCwgMHhFNzg0LCAweDI1MzYsIDB4RTc4NSwgMHhFNzg1LCAweDI1NzMsIDB4RTc4NiwgMHhFNzg2LCAweDI1NkYsCisgICAgMHhFNzg3LCAweEU3ODksIDB4NEY5MiwgMHhFNzhBLCAweEU3OEEsIDB4MjI5MywgMHhFNzhCLCAweEU3OEIsIDB4MjU3OCwKKyAgICAweEU3OEMsIDB4RTc4RSwgMHg0Rjk1LCAweEU3OEYsIDB4RTc4RiwgMHgyNTcwLCAweEU3OTAsIDB4RTc5MSwgMHg0Rjk4LAorICAgIDB4RTc5MiwgMHhFNzkyLCAweDI1NzUsIDB4RTc5MywgMHhFNzk3LCAweDRGOUEsIDB4RTc5OCwgMHhFNzk5LCAweDI1NDEsCisgICAgMHhFNzlBLCAweEU3OUEsIDB4MjU1RCwgMHhFNzlCLCAweEU3OUYsIDB4NEY5RiwgMHhFN0EwLCAweEU3QTAsIDB4MjAxQSwKKyAgICAweEU3QTEsIDB4RTdGRSwgMHgxN0Q5LCAweEU4NDAsIDB4RTg0MiwgMHg0RkE0LCAweEU4NDMsIDB4RTg0MywgMHgyNTdBLAorICAgIDB4RTg0NCwgMHhFODQ0LCAweDIwMDYsIDB4RTg0NSwgMHhFODQ1LCAweDRGQTcsIDB4RTg0NiwgMHhFODQ2LCAweDIxNzcsCisgICAgMHhFODQ3LCAweEU4NDgsIDB4NEZBOCwgMHhFODQ5LCAweEU4NDksIDB4MjUxQiwgMHhFODRBLCAweEU4NEEsIDB4NEZBQSwKKyAgICAweEU4NEIsIDB4RTg0QiwgMHgyNTI0LCAweEU4NEMsIDB4RTg0RSwgMHg0RkFCLCAweEU4NEYsIDB4RTg0RiwgMHgyNTdCLAorICAgIDB4RTg1MCwgMHhFODUzLCAweDRGQUUsIDB4RTg1NCwgMHhFODU0LCAweDIyQTMsIDB4RTg1NSwgMHhFODU5LCAweDRGQjIsCisgICAgMHhFODVBLCAweEU4NUEsIDB4MjU3OSwgMHhFODVCLCAweEU4NUIsIDB4NEZCNywgMHhFODVDLCAweEU4NUMsIDB4MjU2NiwKKyAgICAweEU4NUQsIDB4RTg2MSwgMHg0RkI4LCAweEU4NjIsIDB4RTg2MiwgMHgxRjkzLCAweEU4NjMsIDB4RTg2MywgMHg0RkJELAorICAgIDB4RTg2NCwgMHhFODY0LCAweDI1N0MsIDB4RTg2NSwgMHhFODZGLCAweDRGQkUsIDB4RTg3MCwgMHhFODcwLCAweDI1MTQsCisgICAgMHhFODcxLCAweEU4NzIsIDB4NEZDOSwgMHhFODczLCAweEU4NzMsIDB4MjU3RCwgMHhFODc0LCAweEU4NzQsIDB4NEZDQiwKKyAgICAweEU4NzUsIDB4RTg3NSwgMHgyNTcyLCAweEU4NzYsIDB4RTg3QiwgMHg0RkNDLCAweEU4N0MsIDB4RTg3QywgMHgyNTc0LAorICAgIDB4RTg3RCwgMHhFODdFLCAweDRGRDIsIDB4RTg4MCwgMHhFODgwLCAweDIyNEUsIDB4RTg4MSwgMHhFODgxLCAweDRGRDQsCisgICAgMHhFODgyLCAweEU4ODIsIDB4MjFDNiwgMHhFODgzLCAweEU4ODYsIDB4NEZENSwgMHhFODg3LCAweEU4ODcsIDB4MjA5RiwKKyAgICAweEU4ODgsIDB4RTg4OCwgMHg0RkQ5LCAweEU4ODksIDB4RTg4OSwgMHgyNTc2LCAweEU4OEEsIDB4RTg4QiwgMHg0RkRBLAorICAgIDB4RTg4QywgMHhFODhDLCAweDIwNjQsIDB4RTg4RCwgMHhFODhELCAweDIyQkYsIDB4RTg4RSwgMHhFODhFLCAweDI2MUMsCisgICAgMHhFODhGLCAweEU4OEYsIDB4MjI1RSwgMHhFODkwLCAweEU4QTAsIDB4NEZEQywgMHhFOEExLCAweEU4RkUsIDB4MTgzNywKKyAgICAweEU5NDAsIDB4RTk0QiwgMHg0RkVELCAweEU5NEMsIDB4RTk0QywgMHgxRTc1LCAweEU5NEQsIDB4RTk1MywgMHg0RkY5LAorICAgIDB4RTk1NCwgMHhFOTU0LCAweDIwN0QsIDB4RTk1NSwgMHhFOTU1LCAweDUwMDAsIDB4RTk1NiwgMHhFOTU2LCAweDIzQkYsCisgICAgMHhFOTU3LCAweEU5NTcsIDB4MjExMywgMHhFOTU4LCAweEU5NTksIDB4NTAwMSwgMHhFOTVBLCAweEU5NUEsIDB4MjNDMCwKKyAgICAweEU5NUIsIDB4RTk1QywgMHg1MDAzLCAweEU5NUQsIDB4RTk1RCwgMHgxRTQ1LCAweEU5NUUsIDB4RTk1RSwgMHg1MDA1LAorICAgIDB4RTk1RiwgMHhFOTVGLCAweDFGRDgsIDB4RTk2MCwgMHhFOTYwLCAweDIzQzQsIDB4RTk2MSwgMHhFOTYxLCAweDUwMDYsCisgICAgMHhFOTYyLCAweEU5NjIsIDB4MjNDMiwgMHhFOTYzLCAweEU5NjMsIDB4MjEwNCwgMHhFOTY0LCAweEU5NjQsIDB4NTAwNywKKyAgICAweEU5NjUsIDB4RTk2NSwgMHgyMUJELCAweEU5NjYsIDB4RTk2NiwgMHg1MDA4LCAweEU5NjcsIDB4RTk2NywgMHgxRjg3LAorICAgIDB4RTk2OCwgMHhFOTY4LCAweDIzQzMsIDB4RTk2OSwgMHhFOTZCLCAweDUwMDksIDB4RTk2QywgMHhFOTZDLCAweDIyNjksCisgICAgMHhFOTZELCAweEU5NzQsIDB4NTAwQywgMHhFOTc1LCAweEU5NzUsIDB4MUY0MywgMHhFOTc2LCAweEU5NzYsIDB4NTAxNCwKKyAgICAweEU5NzcsIDB4RTk3NywgMHgxRjFFLCAweEU5NzgsIDB4RTk3OCwgMHgyNjc5LCAweEU5NzksIDB4RTk3OSwgMHgxRUVCLAorICAgIDB4RTk3QSwgMHhFOTdCLCAweDUwMTUsIDB4RTk3QywgMHhFOTdDLCAweDFGMzUsIDB4RTk3RCwgMHhFOTdELCAweDIwOEEsCisgICAgMHhFOTdFLCAweEU5N0UsIDB4NTAxNywgMHhFOTgwLCAweEU5ODAsIDB4MjNDNywgMHhFOTgxLCAweEU5ODEsIDB4MjNDOSwKKyAgICAweEU5ODIsIDB4RTk4MiwgMHgyM0M2LCAweEU5ODMsIDB4RTk4NiwgMHg1MDE4LCAweEU5ODcsIDB4RTk4NywgMHgyMjRGLAorICAgIDB4RTk4OCwgMHhFOThBLCAweDUwMUMsIDB4RTk4QiwgMHhFOThCLCAweDIzQ0IsIDB4RTk4QywgMHhFOThELCAweDUwMUYsCisgICAgMHhFOThFLCAweEU5OEUsIDB4MjFGMywgMHhFOThGLCAweEU5OEYsIDB4NTAyMSwgMHhFOTkwLCAweEU5OTAsIDB4MjFGNywKKyAgICAweEU5OTEsIDB4RTk5MSwgMHgyM0NGLCAweEU5OTIsIDB4RTk5MiwgMHgyM0NFLCAweEU5OTMsIDB4RTk5MywgMHgyM0NBLAorICAgIDB4RTk5NCwgMHhFOTk0LCAweDIzQ0QsIDB4RTk5NSwgMHhFOTk3LCAweDUwMjIsIDB4RTk5OCwgMHhFOTk4LCAweDIzRDAsCisgICAgMHhFOTk5LCAweEU5OUEsIDB4NTAyNSwgMHhFOTlCLCAweEU5OUIsIDB4MjY2QywgMHhFOTlDLCAweEU5OUMsIDB4NTAyNywKKyAgICAweEU5OUQsIDB4RTk5RCwgMHgyM0MxLCAweEU5OUUsIDB4RTk5RSwgMHg1MDI4LCAweEU5OUYsIDB4RTk5RiwgMHgxRkVFLAorICAgIDB4RTlBMCwgMHhFOUEwLCAweDIzRDEsIDB4RTlBMSwgMHhFOUZFLCAweDE4OTUsIDB4RUE0MCwgMHhFQTQwLCAweDFGRjgsCisgICAgMHhFQTQxLCAweEVBNDMsIDB4NTAyOSwgMHhFQTQ0LCAweEVBNDQsIDB4MjNEMywgMHhFQTQ1LCAweEVBNDcsIDB4NTAyQywKKyAgICAweEVBNDgsIDB4RUE0OCwgMHgyM0QyLCAweEVBNDksIDB4RUE0OSwgMHgyM0Q0LCAweEVBNEEsIDB4RUE0QSwgMHgxRTk4LAorICAgIDB4RUE0QiwgMHhFQTRGLCAweDUwMkYsIDB4RUE1MCwgMHhFQTUwLCAweDFGMkMsIDB4RUE1MSwgMHhFQTUxLCAweDUwMzQsCisgICAgMHhFQTUyLCAweEVBNTIsIDB4MjNENSwgMHhFQTUzLCAweEVBNTQsIDB4NTAzNSwgMHhFQTU1LCAweEVBNTUsIDB4MUU3MSwKKyAgICAweEVBNTYsIDB4RUE1NiwgMHgyNjkxLCAweEVBNTcsIDB4RUE1OCwgMHg1MDM3LCAweEVBNTksIDB4RUE1OSwgMHgyM0M1LAorICAgIDB4RUE1QSwgMHhFQTdFLCAweDUwMzksIDB4RUE4MCwgMHhFQTgwLCAweDIzMUEsIDB4RUE4MSwgMHhFQTgzLCAweDUwNUUsCisgICAgMHhFQTg0LCAweEVBODQsIDB4MjExNCwgMHhFQTg1LCAweEVBODYsIDB4NTA2MSwgMHhFQTg3LCAweEVBODcsIDB4MjI4NCwKKyAgICAweEVBODgsIDB4RUE4RCwgMHg1MDYzLCAweEVBOEUsIDB4RUE4RSwgMHgyMjFDLCAweEVBOEYsIDB4RUE4RiwgMHg1MDY5LAorICAgIDB4RUE5MCwgMHhFQTkwLCAweDFFN0UsIDB4RUE5MSwgMHhFQTkxLCAweDIwNEQsIDB4RUE5MiwgMHhFQTk1LCAweDUwNkEsCisgICAgMHhFQTk2LCAweEVBOTYsIDB4MjIwMSwgMHhFQTk3LCAweEVBOUYsIDB4NTA2RSwgMHhFQUEwLCAweEVBQTAsIDB4MUVEOSwKKyAgICAweEVBQTEsIDB4RUFGRSwgMHgxOEYzLCAweEVCNDAsIDB4RUI0MCwgMHg1MDc3LCAweEVCNDEsIDB4RUI0MSwgMHgxRkIyLAorICAgIDB4RUI0MiwgMHhFQjQ0LCAweDUwNzgsIDB4RUI0NSwgMHhFQjQ1LCAweDIyNTIsIDB4RUI0NiwgMHhFQjQ3LCAweDUwN0IsCisgICAgMHhFQjQ4LCAweEVCNDgsIDB4MUY3OSwgMHhFQjQ5LCAweEVCNTIsIDB4NTA3RCwgMHhFQjUzLCAweEVCNTMsIDB4MjE1NywKKyAgICAweEVCNTQsIDB4RUI1NCwgMHg1MDg3LCAweEVCNTUsIDB4RUI1NSwgMHgyMUJGLCAweEVCNTYsIDB4RUI1QSwgMHg1MDg4LAorICAgIDB4RUI1QiwgMHhFQjVCLCAweDIyMUYsIDB4RUI1QywgMHhFQjVDLCAweDUwOEQsIDB4RUI1RCwgMHhFQjVELCAweDIwM0QsCisgICAgMHhFQjVFLCAweEVCNUYsIDB4NTA4RSwgMHhFQjYwLCAweEVCNjAsIDB4MjAxNSwgMHhFQjYxLCAweEVCNjEsIDB4NTA5MCwKKyAgICAweEVCNjIsIDB4RUI2MiwgMHgyNkE1LCAweEVCNjMsIDB4RUI2QywgMHg1MDkxLCAweEVCNkQsIDB4RUI2RCwgMHgyMTU2LAorICAgIDB4RUI2RSwgMHhFQjZGLCAweDUwOUIsIDB4RUI3MCwgMHhFQjcwLCAweDIxNDQsIDB4RUI3MSwgMHhFQjcxLCAweDUwOUQsCisgICAgMHhFQjcyLCAweEVCNzIsIDB4MUU5MSwgMHhFQjczLCAweEVCNzMsIDB4MjI1NywgMHhFQjc0LCAweEVCNzcsIDB4NTA5RSwKKyAgICAweEVCNzgsIDB4RUI3OCwgMHgyMDBBLCAweEVCNzksIDB4RUI3OSwgMHgyMDkyLCAweEVCN0EsIDB4RUI3RSwgMHg1MEEyLAorICAgIDB4RUI4MCwgMHhFQjg0LCAweDUwQTcsIDB4RUI4NSwgMHhFQjg1LCAweDIyNTAsIDB4RUI4NiwgMHhFQjg5LCAweDUwQUMsCisgICAgMHhFQjhBLCAweEVCOEEsIDB4MUVDMywgMHhFQjhCLCAweEVCQTAsIDB4NTBCMCwgMHhFQkExLCAweEVCRkUsIDB4MTk1MSwKKyAgICAweEVDNDAsIDB4RUM0NSwgMHg1MEM2LCAweEVDNDYsIDB4RUM0NiwgMHgyMUE4LCAweEVDNDcsIDB4RUM1NSwgMHg1MENDLAorICAgIDB4RUM1NiwgMHhFQzU2LCAweDI2MEQsIDB4RUM1NywgMHhFQzU5LCAweDUwREIsIDB4RUM1QSwgMHhFQzVBLCAweDI2MEMsCisgICAgMHhFQzVCLCAweEVDNUIsIDB4NTBERSwgMHhFQzVDLCAweEVDNUMsIDB4MjYwRSwgMHhFQzVELCAweEVDNUYsIDB4NTBERiwKKyAgICAweEVDNjAsIDB4RUM2MCwgMHgyMDMyLCAweEVDNjEsIDB4RUM2RCwgMHg1MEUyLCAweEVDNkUsIDB4RUM2RSwgMHgyNjBCLAorICAgIDB4RUM2RiwgMHhFQzc1LCAweDUwRUYsIDB4RUM3NiwgMHhFQzc2LCAweDIyQzMsIDB4RUM3NywgMHhFQzdFLCAweDUwRjYsCisgICAgMHhFQzgwLCAweEVDOTUsIDB4NTBGRSwgMHhFQzk2LCAweEVDOTYsIDB4MUYyMywgMHhFQzk3LCAweEVDQTAsIDB4NTExNCwKKyAgICAweEVDQTEsIDB4RUNGRSwgMHgxOUFGLCAweEVENDAsIDB4RUQ0NSwgMHg1MTFFLCAweEVENDYsIDB4RUQ0NiwgMHgyNjk1LAorICAgIDB4RUQ0NywgMHhFRDU3LCAweDUxMjQsIDB4RUQ1OCwgMHhFRDU4LCAweDI2NUUsIDB4RUQ1OSwgMHhFRDVELCAweDUxMzUsCisgICAgMHhFRDVFLCAweEVENUUsIDB4MjY1RCwgMHhFRDVGLCAweEVENjAsIDB4NTEzQSwgMHhFRDYxLCAweEVENjEsIDB4MjY5MiwKKyAgICAweEVENjIsIDB4RUQ2MywgMHg1MTNDLCAweEVENjQsIDB4RUQ2NCwgMHgyNjVGLCAweEVENjUsIDB4RUQ2NSwgMHg1MTNFLAorICAgIDB4RUQ2NiwgMHhFRDY2LCAweDIxOEQsIDB4RUQ2NywgMHhFRDY3LCAweDIwRkQsIDB4RUQ2OCwgMHhFRDZELCAweDUxM0YsCisgICAgMHhFRDZFLCAweEVENkUsIDB4MUY0MCwgMHhFRDZGLCAweEVENzMsIDB4NTE0NSwgMHhFRDc0LCAweEVENzQsIDB4MjQ2NSwKKyAgICAweEVENzUsIDB4RUQ3NiwgMHg1MTRBLCAweEVENzcsIDB4RUQ3NywgMHgyNDY3LCAweEVENzgsIDB4RUQ3OCwgMHg1MTRDLAorICAgIDB4RUQ3OSwgMHhFRDc5LCAweDI0NjYsIDB4RUQ3QSwgMHhFRDdFLCAweDUxNEQsIDB4RUQ4MCwgMHhFRDkwLCAweDUxNTIsCisgICAgMHhFRDkxLCAweEVEOTEsIDB4MjFDOSwgMHhFRDkyLCAweEVEOTIsIDB4NTE2MywgMHhFRDkzLCAweEVEOTMsIDB4MjIwOSwKKyAgICAweEVEOTQsIDB4RUQ5NCwgMHgxRUM5LCAweEVEOTUsIDB4RUQ5NSwgMHgyMEU5LCAweEVEOTYsIDB4RUQ5NiwgMHg1MTY0LAorICAgIDB4RUQ5NywgMHhFRDk3LCAweDIxQ0EsIDB4RUQ5OCwgMHhFRDk4LCAweDIxNDYsIDB4RUQ5OSwgMHhFRDk5LCAweDI1QzUsCisgICAgMHhFRDlBLCAweEVEOUEsIDB4MjFEQywgMHhFRDlCLCAweEVEOUIsIDB4NTE2NSwgMHhFRDlDLCAweEVEOUMsIDB4MjQ1RSwKKyAgICAweEVEOUQsIDB4RUQ5RCwgMHg1MTY2LCAweEVEOUUsIDB4RUQ5RSwgMHgyMTRGLCAweEVEOUYsIDB4RUQ5RiwgMHg1MTY3LAorICAgIDB4RURBMCwgMHhFREEwLCAweDI1QzYsIDB4RURBMSwgMHhFREZFLCAweDFBMEQsIDB4RUU0MCwgMHhFRTQwLCAweDI1QzcsCisgICAgMHhFRTQxLCAweEVFNDEsIDB4MjI0MSwgMHhFRTQyLCAweEVFNDIsIDB4MjE4QSwgMHhFRTQzLCAweEVFNDMsIDB4MUUyRiwKKyAgICAweEVFNDQsIDB4RUU0NCwgMHgxRURDLCAweEVFNDUsIDB4RUU0NywgMHg1MTY4LCAweEVFNDgsIDB4RUU0OCwgMHgyMEJGLAorICAgIDB4RUU0OSwgMHhFRTQ5LCAweDIwMzQsIDB4RUU0QSwgMHhFRTRDLCAweDUxNkIsIDB4RUU0RCwgMHhFRTRELCAweDI1QzksCisgICAgMHhFRTRFLCAweEVFNTEsIDB4NTE2RSwgMHhFRTUyLCAweEVFNTIsIDB4MjVDOCwgMHhFRTUzLCAweEVFNTQsIDB4NTE3MiwKKyAgICAweEVFNTUsIDB4RUU1NSwgMHgyMjBFLCAweEVFNTYsIDB4RUU1NiwgMHg1MTc0LCAweEVFNTcsIDB4RUU1NywgMHgyNUNCLAorICAgIDB4RUU1OCwgMHhFRTVELCAweDUxNzUsIDB4RUU1RSwgMHhFRTVFLCAweDIxN0QsIDB4RUU1RiwgMHhFRTYwLCAweDUxN0IsCisgICAgMHhFRTYxLCAweEVFNjEsIDB4MUY3RSwgMHhFRTYyLCAweEVFNjcsIDB4NTE3RCwgMHhFRTY4LCAweEVFNjgsIDB4MjVDQywKKyAgICAweEVFNjksIDB4RUU2OSwgMHgxRkMzLCAweEVFNkEsIDB4RUU2QiwgMHg1MTgzLCAweEVFNkMsIDB4RUU2QywgMHgyMEI5LAorICAgIDB4RUU2RCwgMHhFRTZELCAweDUxODUsIDB4RUU2RSwgMHhFRTZFLCAweDIxODEsIDB4RUU2RiwgMHhFRTc2LCAweDUxODYsCisgICAgMHhFRTc3LCAweEVFNzcsIDB4MUZEQSwgMHhFRTc4LCAweEVFN0MsIDB4NTE4RSwgMHhFRTdELCAweEVFN0QsIDB4MjE3MywKKyAgICAweEVFN0UsIDB4RUU3RSwgMHgxRUUxLCAweEVFODAsIDB4RUU4MCwgMHgyNUNELCAweEVFODEsIDB4RUU4NCwgMHg1MTkzLAorICAgIDB4RUU4NSwgMHhFRTg1LCAweDI1Q0UsIDB4RUU4NiwgMHhFRTg2LCAweDIxRjYsIDB4RUU4NywgMHhFRTg5LCAweDUxOTcsCisgICAgMHhFRThBLCAweEVFOEEsIDB4MjI0QiwgMHhFRThCLCAweEVFOEIsIDB4MjVEMSwgMHhFRThDLCAweEVFOEMsIDB4NTE5QSwKKyAgICAweEVFOEQsIDB4RUU4RCwgMHgxRUMwLCAweEVFOEUsIDB4RUU4RiwgMHg1MTlCLCAweEVFOTAsIDB4RUU5MCwgMHgyMDA4LAorICAgIDB4RUU5MSwgMHhFRTkzLCAweDUxOUQsIDB4RUU5NCwgMHhFRTk0LCAweDI1RDAsIDB4RUU5NSwgMHhFRTk2LCAweDUxQTAsCisgICAgMHhFRTk3LCAweEVFOTcsIDB4MjVEMiwgMHhFRTk4LCAweEVFOTgsIDB4NTFBMiwgMHhFRTk5LCAweEVFOTksIDB4MUYyQSwKKyAgICAweEVFOUEsIDB4RUU5QywgMHg1MUEzLCAweEVFOUQsIDB4RUU5RCwgMHgxRTcyLCAweEVFOUUsIDB4RUU5RSwgMHgyNUQzLAorICAgIDB4RUU5RiwgMHhFRUEwLCAweDUxQTYsIDB4RUVBMSwgMHhFRUZFLCAweDFBNkIsIDB4RUY0MCwgMHhFRjQwLCAweDIxQkUsCisgICAgMHhFRjQxLCAweEVGNDEsIDB4MjVENCwgMHhFRjQyLCAweEVGNDIsIDB4MjA0NCwgMHhFRjQzLCAweEVGNDMsIDB4NTFBOCwKKyAgICAweEVGNDQsIDB4RUY0NCwgMHgyNUNGLCAweEVGNDUsIDB4RUY0NSwgMHgyMEYzLCAweEVGNDYsIDB4RUY0QiwgMHg1MUE5LAorICAgIDB4RUY0QywgMHhFRjRDLCAweDFGMDAsIDB4RUY0RCwgMHhFRjUxLCAweDUxQUYsIDB4RUY1MiwgMHhFRjUzLCAweDI0Q0MsCisgICAgMHhFRjU0LCAweEVGNTQsIDB4NTFCNCwgMHhFRjU1LCAweEVGNTUsIDB4MjY5OCwgMHhFRjU2LCAweEVGNTYsIDB4NTFCNSwKKyAgICAweEVGNTcsIDB4RUY1NywgMHgyNjc4LCAweEVGNTgsIDB4RUY1OSwgMHg1MUI2LCAweEVGNUEsIDB4RUY1QSwgMHgyNENFLAorICAgIDB4RUY1QiwgMHhFRjVGLCAweDUxQjgsIDB4RUY2MCwgMHhFRjYwLCAweDI0Q0YsIDB4RUY2MSwgMHhFRjY3LCAweDUxQkQsCisgICAgMHhFRjY4LCAweEVGNjgsIDB4MjBCOCwgMHhFRjY5LCAweEVGNjksIDB4NTFDNCwgMHhFRjZBLCAweEVGNkEsIDB4MjREMCwKKyAgICAweEVGNkIsIDB4RUY2QiwgMHg1MUM1LCAweEVGNkMsIDB4RUY2QywgMHgyNEQxLCAweEVGNkQsIDB4RUY3NiwgMHg1MUM2LAorICAgIDB4RUY3NywgMHhFRjc3LCAweDFFRjQsIDB4RUY3OCwgMHhFRjc5LCAweDUxRDAsIDB4RUY3QSwgMHhFRjdBLCAweDIzOUIsCisgICAgMHhFRjdCLCAweEVGN0IsIDB4NTFEMiwgMHhFRjdDLCAweEVGN0MsIDB4MjY3RSwgMHhFRjdELCAweEVGN0UsIDB4NTFEMywKKyAgICAweEVGODAsIDB4RUY4MSwgMHg1MUQ1LCAweEVGODIsIDB4RUY4MiwgMHgyMzlELCAweEVGODMsIDB4RUY4NCwgMHgyMzlGLAorICAgIDB4RUY4NSwgMHhFRjg1LCAweDUxRDcsIDB4RUY4NiwgMHhFRjg2LCAweDIzQTEsIDB4RUY4NywgMHhFRjg3LCAweDUxRDgsCisgICAgMHhFRjg4LCAweEVGODgsIDB4MUVGMSwgMHhFRjg5LCAweEVGOEEsIDB4NTFEOSwgMHhFRjhCLCAweEVGOEIsIDB4MjIxRSwKKyAgICAweEVGOEMsIDB4RUY4QywgMHg1MURCLCAweEVGOEQsIDB4RUY4RCwgMHgyM0EyLCAweEVGOEUsIDB4RUY5NCwgMHg1MURDLAorICAgIDB4RUY5NSwgMHhFRjk1LCAweDIxNEIsIDB4RUY5NiwgMHhFRjk2LCAweDFFMzYsIDB4RUY5NywgMHhFRjk3LCAweDIxMzUsCisgICAgMHhFRjk4LCAweEVGOUIsIDB4NTFFMywgMHhFRjlDLCAweEVGOUMsIDB4MUZBRCwgMHhFRjlELCAweEVGOUQsIDB4NTFFNywKKyAgICAweEVGOUUsIDB4RUY5RSwgMHgxRTUzLCAweEVGOUYsIDB4RUZBMCwgMHg1MUU4LCAweEVGQTEsIDB4RUZGRSwgMHgxQUM5LAorICAgIDB4RjA0MCwgMHhGMDQwLCAweDUxRUEsIDB4RjA0MSwgMHhGMDQxLCAweDIzQTMsIDB4RjA0MiwgMHhGMDQyLCAweDIyMDMsCisgICAgMHhGMDQzLCAweEYwNDMsIDB4NTFFQiwgMHhGMDQ0LCAweEYwNDQsIDB4MUVFNywgMHhGMDQ1LCAweEYwNDYsIDB4NTFFQywKKyAgICAweEYwNDcsIDB4RjA0NywgMHgyM0E0LCAweEYwNDgsIDB4RjA0OCwgMHgyMDk3LCAweEYwNDksIDB4RjA0OSwgMHgxRUU0LAorICAgIDB4RjA0QSwgMHhGMDRELCAweDUxRUUsIDB4RjA0RSwgMHhGMDRFLCAweDIyMzgsIDB4RjA0RiwgMHhGMDUwLCAweDUxRjIsCisgICAgMHhGMDUxLCAweEYwNTEsIDB4MjNBNSwgMHhGMDUyLCAweEYwNTMsIDB4NTFGNCwgMHhGMDU0LCAweEYwNTQsIDB4MUY5QSwKKyAgICAweEYwNTUsIDB4RjA1NiwgMHg1MUY2LCAweEYwNTcsIDB4RjA1NywgMHgyMUMzLCAweEYwNTgsIDB4RjA1RCwgMHg1MUY4LAorICAgIDB4RjA1RSwgMHhGMDVFLCAweDFGMkUsIDB4RjA1RiwgMHhGMDY3LCAweDUxRkUsIDB4RjA2OCwgMHhGMDY4LCAweDIzOUMsCisgICAgMHhGMDY5LCAweEYwNkIsIDB4NTIwNywgMHhGMDZDLCAweEYwNkMsIDB4MjNBNiwgMHhGMDZELCAweEYwNzAsIDB4NTIwQSwKKyAgICAweEYwNzEsIDB4RjA3MSwgMHgyMzlFLCAweEYwNzIsIDB4RjA3MiwgMHg1MjBFLCAweEYwNzMsIDB4RjA3MywgMHgyMDM1LAorICAgIDB4RjA3NCwgMHhGMDc0LCAweDIzQTcsIDB4RjA3NSwgMHhGMDc3LCAweDUyMEYsIDB4RjA3OCwgMHhGMDc4LCAweDIzQTgsCisgICAgMHhGMDc5LCAweEYwNzksIDB4NTIxMiwgMHhGMDdBLCAweEYwN0EsIDB4MjA3NSwgMHhGMDdCLCAweEYwN0MsIDB4NTIxMywKKyAgICAweEYwN0QsIDB4RjA3RSwgMHgyM0E5LCAweEYwODAsIDB4RjA4MCwgMHgyM0FCLCAweEYwODEsIDB4RjA4MSwgMHgxRkVCLAorICAgIDB4RjA4MiwgMHhGMDgyLCAweDIzQUMsIDB4RjA4MywgMHhGMDg2LCAweDUyMTUsIDB4RjA4NywgMHhGMDg3LCAweDFGNkEsCisgICAgMHhGMDg4LCAweEYwODgsIDB4MjBGOSwgMHhGMDg5LCAweEYwOEEsIDB4NTIxOSwgMHhGMDhCLCAweEYwOEIsIDB4MjY2NiwKKyAgICAweEYwOEMsIDB4RjA4RiwgMHg1MjFCLCAweEYwOTAsIDB4RjA5MCwgMHgyNjY3LCAweEYwOTEsIDB4RjA5MSwgMHg1MjFGLAorICAgIDB4RjA5MiwgMHhGMDkyLCAweDFFNkMsIDB4RjA5MywgMHhGMDk1LCAweDUyMjAsIDB4RjA5NiwgMHhGMDk2LCAweDIzQUQsCisgICAgMHhGMDk3LCAweEYwQTAsIDB4NTIyMywgMHhGMEExLCAweEYwRkUsIDB4MUIyNywgMHhGMTQwLCAweEYxNTEsIDB4NTIyRCwKKyAgICAweEYxNTIsIDB4RjE1MiwgMHgyMDZELCAweEYxNTMsIDB4RjE1MywgMHgyMjQyLCAweEYxNTQsIDB4RjE1NCwgMHgxRjAyLAorICAgIDB4RjE1NSwgMHhGMTU2LCAweDUyM0YsIDB4RjE1NywgMHhGMTU3LCAweDIxODMsIDB4RjE1OCwgMHhGMTU4LCAweDUyNDEsCisgICAgMHhGMTU5LCAweEYxNTksIDB4MUU4NSwgMHhGMTVBLCAweEYxNUEsIDB4MjFFOSwgMHhGMTVCLCAweEYxNjYsIDB4NTI0MiwKKyAgICAweEYxNjcsIDB4RjE2NywgMHgxRTU3LCAweEYxNjgsIDB4RjE3NSwgMHg1MjRFLCAweEYxNzYsIDB4RjE3NiwgMHgyMkE1LAorICAgIDB4RjE3NywgMHhGMTc3LCAweDI0MDcsIDB4RjE3OCwgMHhGMTc4LCAweDFGQ0EsIDB4RjE3OSwgMHhGMTc5LCAweDUyNUMsCisgICAgMHhGMTdBLCAweEYxN0EsIDB4MjQwMiwgMHhGMTdCLCAweEYxN0IsIDB4MUY4MiwgMHhGMTdDLCAweEYxN0QsIDB4NTI1RCwKKyAgICAweEYxN0UsIDB4RjE3RSwgMHgyNDA4LCAweEYxODAsIDB4RjE4MCwgMHgyNDA0LCAweEYxODEsIDB4RjE4MSwgMHg1MjVGLAorICAgIDB4RjE4MiwgMHhGMTgyLCAweDIxMzEsIDB4RjE4MywgMHhGMTgzLCAweDUyNjAsIDB4RjE4NCwgMHhGMTg0LCAweDIxODQsCisgICAgMHhGMTg1LCAweEYxODUsIDB4NTI2MSwgMHhGMTg2LCAweEYxODYsIDB4MjQwMywgMHhGMTg3LCAweEYxODcsIDB4NTI2MiwKKyAgICAweEYxODgsIDB4RjE4OCwgMHgyMDZFLCAweEYxODksIDB4RjE4OSwgMHgyNDBCLCAweEYxOEEsIDB4RjE5MywgMHg1MjYzLAorICAgIDB4RjE5NCwgMHhGMTk0LCAweDFGM0YsIDB4RjE5NSwgMHhGMTk3LCAweDUyNkQsIDB4RjE5OCwgMHhGMTk4LCAweDIwNjcsCisgICAgMHhGMTk5LCAweEYxQTAsIDB4NTI3MCwgMHhGMUExLCAweEYxRkUsIDB4MUI4NSwgMHhGMjQwLCAweEYyNDQsIDB4NTI3OCwKKyAgICAweEYyNDUsIDB4RjI0NSwgMHgxRkQ3LCAweEYyNDYsIDB4RjI0NiwgMHg1MjdELCAweEYyNDcsIDB4RjI0NywgMHgxRTgzLAorICAgIDB4RjI0OCwgMHhGMjRBLCAweDUyN0UsIDB4RjI0QiwgMHhGMjRCLCAweDI0MEYsIDB4RjI0QywgMHhGMjUyLCAweDUyODEsCisgICAgMHhGMjUzLCAweEYyNTMsIDB4MjQwRSwgMHhGMjU0LCAweEYyNTQsIDB4MjBDNywgMHhGMjU1LCAweEYyNTUsIDB4MjQwRCwKKyAgICAweEYyNTYsIDB4RjI1QiwgMHg1Mjg4LCAweEYyNUMsIDB4RjI1QywgMHgyNDEyLCAweEYyNUQsIDB4RjI1RSwgMHg1MjhFLAorICAgIDB4RjI1RiwgMHhGMjVGLCAweDIwQjcsIDB4RjI2MCwgMHhGMjcwLCAweDUyOTAsIDB4RjI3MSwgMHhGMjcxLCAweDIzRjAsCisgICAgMHhGMjcyLCAweEYyNzIsIDB4NTJBMSwgMHhGMjczLCAweEYyNzMsIDB4MjQxMSwgMHhGMjc0LCAweEYyNzQsIDB4MjQxNCwKKyAgICAweEYyNzUsIDB4RjI3NSwgMHg1MkEyLCAweEYyNzYsIDB4RjI3NiwgMHgyMTcwLCAweEYyNzcsIDB4RjI3QiwgMHg1MkEzLAorICAgIDB4RjI3QywgMHhGMjdDLCAweDI0MDUsIDB4RjI3RCwgMHhGMjdELCAweDIxMEMsIDB4RjI3RSwgMHhGMjdFLCAweDI0MTUsCisgICAgMHhGMjgwLCAweEYyODQsIDB4NTJBOCwgMHhGMjg1LCAweEYyODUsIDB4MjA2NiwgMHhGMjg2LCAweEYyODYsIDB4NTJBRCwKKyAgICAweEYyODcsIDB4RjI4NywgMHgyMzUyLCAweEYyODgsIDB4RjI4OCwgMHgyNDEzLCAweEYyODksIDB4RjI4OSwgMHgyNDEwLAorICAgIDB4RjI4QSwgMHhGMjhCLCAweDI0MTYsIDB4RjI4QywgMHhGMjhDLCAweDIwRjEsIDB4RjI4RCwgMHhGMjkwLCAweDUyQUUsCisgICAgMHhGMjkxLCAweEYyOTEsIDB4MjQwQSwgMHhGMjkyLCAweEYyOTMsIDB4NTJCMiwgMHhGMjk0LCAweEYyOTQsIDB4MjQwOSwKKyAgICAweEYyOTUsIDB4RjI5NSwgMHg1MkI0LCAweEYyOTYsIDB4RjI5NiwgMHgyNDE4LCAweEYyOTcsIDB4RjI5QiwgMHg1MkI1LAorICAgIDB4RjI5QywgMHhGMjlDLCAweDFGQTcsIDB4RjI5RCwgMHhGMjlELCAweDUyQkEsIDB4RjI5RSwgMHhGMjlFLCAweDIxRkMsCisgICAgMHhGMjlGLCAweEYyQTAsIDB4NTJCQiwgMHhGMkExLCAweEYyRkUsIDB4MUJFMywgMHhGMzQwLCAweEYzNDAsIDB4MUZDMSwKKyAgICAweEYzNDEsIDB4RjM0MSwgMHgyNDA2LCAweEYzNDIsIDB4RjM0NCwgMHg1MkJELCAweEYzNDUsIDB4RjM0NSwgMHgyMjlDLAorICAgIDB4RjM0NiwgMHhGMzQ3LCAweDUyQzAsIDB4RjM0OCwgMHhGMzQ4LCAweDIwNEUsIDB4RjM0OSwgMHhGMzQ5LCAweDUyQzIsCisgICAgMHhGMzRBLCAweEYzNEEsIDB4MjQxQSwgMHhGMzRCLCAweEYzNEIsIDB4MjQxOSwgMHhGMzRDLCAweEYzNEYsIDB4NTJDMywKKyAgICAweEYzNTAsIDB4RjM1MCwgMHgyNDBDLCAweEYzNTEsIDB4RjM2MCwgMHg1MkM3LCAweEYzNjEsIDB4RjM2MSwgMHgxRTI5LAorICAgIDB4RjM2MiwgMHhGMzczLCAweDUyRDcsIDB4RjM3NCwgMHhGMzc0LCAweDI2NjEsIDB4RjM3NSwgMHhGMzc1LCAweDUyRTksCisgICAgMHhGMzc2LCAweEYzNzYsIDB4MjZBNCwgMHhGMzc3LCAweEYzNzcsIDB4MjE3NCwgMHhGMzc4LCAweEYzNzgsIDB4MjY2MywKKyAgICAweEYzNzksIDB4RjM3OSwgMHgyNjYyLCAweEYzN0EsIDB4RjM3RSwgMHg1MkVBLCAweEYzODAsIDB4RjM4QiwgMHg1MkVGLAorICAgIDB4RjM4QywgMHhGMzhDLCAweDI2NzUsIDB4RjM4RCwgMHhGMzlGLCAweDUyRkIsIDB4RjNBMCwgMHhGM0EwLCAweDIxNEMsCisgICAgMHhGM0ExLCAweEYzRkUsIDB4MUM0MSwgMHhGNDQwLCAweEY0NDQsIDB4NTMwRSwgMHhGNDQ1LCAweEY0NDUsIDB4MjY3QSwKKyAgICAweEY0NDYsIDB4RjQ0RiwgMHg1MzEzLCAweEY0NTAsIDB4RjQ1MCwgMHgyNkEwLCAweEY0NTEsIDB4RjQ1NiwgMHg1MzFELAorICAgIDB4RjQ1NywgMHhGNDU3LCAweDI2NjgsIDB4RjQ1OCwgMHhGNDU4LCAweDUzMjMsIDB4RjQ1OSwgMHhGNDU5LCAweDFFRDAsCisgICAgMHhGNDVBLCAweEY0NUEsIDB4NTMyNCwgMHhGNDVCLCAweEY0NUIsIDB4MjA5NiwgMHhGNDVDLCAweEY0NUMsIDB4NTMyNSwKKyAgICAweEY0NUQsIDB4RjQ1RCwgMHgyM0NDLCAweEY0NUUsIDB4RjQ2MSwgMHg1MzI2LCAweEY0NjIsIDB4RjQ2MiwgMHgyM0M4LAorICAgIDB4RjQ2MywgMHhGNDYzLCAweDUzMkEsIDB4RjQ2NCwgMHhGNDY0LCAweDIyM0UsIDB4RjQ2NSwgMHhGNDc0LCAweDUzMkIsCisgICAgMHhGNDc1LCAweEY0NzUsIDB4MjY2NSwgMHhGNDc2LCAweEY0N0IsIDB4NTMzQiwgMHhGNDdDLCAweEY0N0MsIDB4MjY2NCwKKyAgICAweEY0N0QsIDB4RjQ3RCwgMHg1MzQxLCAweEY0N0UsIDB4RjQ3RSwgMHgyMjM5LCAweEY0ODAsIDB4RjQ5MywgMHg1MzQyLAorICAgIDB4RjQ5NCwgMHhGNDk0LCAweDIwNEEsIDB4RjQ5NSwgMHhGNDk4LCAweDUzNTYsIDB4RjQ5OSwgMHhGNDk5LCAweDI2MUYsCisgICAgMHhGNDlBLCAweEY0OUIsIDB4NTM1QSwgMHhGNDlDLCAweEY0OUMsIDB4MjYxRSwgMHhGNDlELCAweEY0QTAsIDB4NTM1QywKKyAgICAweEY0QTEsIDB4RjRGRSwgMHgxQzlGLCAweEY1NDAsIDB4RjU0NCwgMHg1MzYwLCAweEY1NDUsIDB4RjU0NSwgMHgyNjIwLAorICAgIDB4RjU0NiwgMHhGNTQ2LCAweDUzNjUsIDB4RjU0NywgMHhGNTQ3LCAweDI2MjEsIDB4RjU0OCwgMHhGNTUxLCAweDUzNjYsCisgICAgMHhGNTUyLCAweEY1NTIsIDB4MjYyMiwgMHhGNTUzLCAweEY1NTMsIDB4NTM3MCwgMHhGNTU0LCAweEY1NTQsIDB4MjYyNywKKyAgICAweEY1NTUsIDB4RjU1NSwgMHgxRTM5LCAweEY1NTYsIDB4RjU1NiwgMHgyNjI1LCAweEY1NTcsIDB4RjU1RCwgMHg1MzcxLAorICAgIDB4RjU1RSwgMHhGNTVFLCAweDI2MjksIDB4RjU1RiwgMHhGNTYwLCAweDUzNzgsIDB4RjU2MSwgMHhGNTYxLCAweDI2MkUsCisgICAgMHhGNTYyLCAweEY1NjIsIDB4MjYyQiwgMHhGNTYzLCAweEY1NkQsIDB4NTM3QSwgMHhGNTZFLCAweEY1NkUsIDB4MjYyQSwKKyAgICAweEY1NkYsIDB4RjU2RiwgMHgyNjJELCAweEY1NzAsIDB4RjU3MCwgMHg1Mzg1LCAweEY1NzEsIDB4RjU3MSwgMHgyNjI4LAorICAgIDB4RjU3MiwgMHhGNTcyLCAweDIxQjksIDB4RjU3MywgMHhGNTdFLCAweDUzODYsIDB4RjU4MCwgMHhGNTg0LCAweDUzOTIsCisgICAgMHhGNTg1LCAweEY1ODUsIDB4MjYzNiwgMHhGNTg2LCAweEY1ODYsIDB4MjYzMCwgMHhGNTg3LCAweEY1OEIsIDB4NTM5NywKKyAgICAweEY1OEMsIDB4RjU4QywgMHgyNjM4LCAweEY1OEQsIDB4RjU4RCwgMHg1MzlDLCAweEY1OEUsIDB4RjU4RSwgMHgyMDBELAorICAgIDB4RjU4RiwgMHhGNThGLCAweDI2MzcsIDB4RjU5MCwgMHhGNTk4LCAweDUzOUQsIDB4RjU5OSwgMHhGNTk5LCAweDI2NDUsCisgICAgMHhGNTlBLCAweEY1OUEsIDB4NTNBNiwgMHhGNTlCLCAweEY1OUIsIDB4MjYzQSwgMHhGNTlDLCAweEY1OUYsIDB4NTNBNywKKyAgICAweEY1QTAsIDB4RjVBMCwgMHgyNjQzLCAweEY1QTEsIDB4RjVGRSwgMHgxQ0ZELCAweEY2NDAsIDB4RjY0MCwgMHg1M0FCLAorICAgIDB4RjY0MSwgMHhGNjQxLCAweDI2NDAsIDB4RjY0MiwgMHhGNjQ0LCAweDUzQUMsIDB4RjY0NSwgMHhGNjQ1LCAweDI2M0QsCisgICAgMHhGNjQ2LCAweEY2NDYsIDB4MjY0MSwgMHhGNjQ3LCAweEY2NDcsIDB4NTNBRiwgMHhGNjQ4LCAweEY2NDgsIDB4MjYzRSwKKyAgICAweEY2NDksIDB4RjY0QSwgMHg1M0IwLCAweEY2NEIsIDB4RjY0QiwgMHgyNjNGLCAweEY2NEMsIDB4RjY0QywgMHgxRkMwLAorICAgIDB4RjY0RCwgMHhGNjRELCAweDUzQjIsIDB4RjY0RSwgMHhGNjRGLCAweDI2M0IsIDB4RjY1MCwgMHhGNjUzLCAweDUzQjMsCisgICAgMHhGNjU0LCAweEY2NTQsIDB4MjY0MiwgMHhGNjU1LCAweEY2NTcsIDB4NTNCNywgMHhGNjU4LCAweEY2NTgsIDB4MjY0NCwKKyAgICAweEY2NTksIDB4RjY2MCwgMHg1M0JBLCAweEY2NjEsIDB4RjY2MSwgMHgyNjM5LCAweEY2NjIsIDB4RjY2MiwgMHg1M0MyLAorICAgIDB4RjY2MywgMHhGNjYzLCAweDI2NEMsIDB4RjY2NCwgMHhGNjZCLCAweDUzQzMsIDB4RjY2QywgMHhGNjZDLCAweDI2NDcsCisgICAgMHhGNjZELCAweEY2NkQsIDB4MjY0QiwgMHhGNjZFLCAweEY2NzAsIDB4NTNDQiwgMHhGNjcxLCAweEY2NzEsIDB4MjY0OSwKKyAgICAweEY2NzIsIDB4RjY3MywgMHg1M0NFLCAweEY2NzQsIDB4RjY3NCwgMHgyNjQ4LCAweEY2NzUsIDB4RjY3NSwgMHg1M0QwLAorICAgIDB4RjY3NiwgMHhGNjc2LCAweDI2NEEsIDB4RjY3NywgMHhGNjc3LCAweDIxMDgsIDB4RjY3OCwgMHhGNjdFLCAweDUzRDEsCisgICAgMHhGNjgwLCAweEY2ODQsIDB4NTNEOCwgMHhGNjg1LCAweEY2ODUsIDB4MjY0RCwgMHhGNjg2LCAweEY2ODcsIDB4NTNERCwKKyAgICAweEY2ODgsIDB4RjY4OCwgMHgyNjM0LCAweEY2ODksIDB4RjY4OSwgMHg1M0RGLCAweEY2OEEsIDB4RjY4QSwgMHgyNjUxLAorICAgIDB4RjY4QiwgMHhGNjhDLCAweDUzRTAsIDB4RjY4RCwgMHhGNjhELCAweDI2NTAsIDB4RjY4RSwgMHhGNjhFLCAweDI2NTIsCisgICAgMHhGNjhGLCAweEY2OTEsIDB4NTNFMiwgMHhGNjkyLCAweEY2OTIsIDB4MjY0RiwgMHhGNjkzLCAweEY2OTUsIDB4NTNFNSwKKyAgICAweEY2OTYsIDB4RjY5NiwgMHgyNjMyLCAweEY2OTcsIDB4RjY5NywgMHgyNjRFLCAweEY2OTgsIDB4RjY5OCwgMHgyNjUzLAorICAgIDB4RjY5OSwgMHhGNjk5LCAweDUzRTgsIDB4RjY5QSwgMHhGNjlBLCAweDI2NTcsIDB4RjY5QiwgMHhGNjlCLCAweDUzRTksCisgICAgMHhGNjlDLCAweEY2OUMsIDB4MjYzNSwgMHhGNjlELCAweEY2OUQsIDB4NTNFQSwgMHhGNjlFLCAweEY2OUUsIDB4MjYzMywKKyAgICAweEY2OUYsIDB4RjY5RiwgMHg1M0VCLCAweEY2QTAsIDB4RjZBMCwgMHgyNjU2LCAweEY2QTEsIDB4RjZGRSwgMHgxRDVCLAorICAgIDB4Rjc0MCwgMHhGNzQxLCAweDUzRUMsIDB4Rjc0MiwgMHhGNzQyLCAweDI2NTQsIDB4Rjc0MywgMHhGNzQ4LCAweDUzRUUsCisgICAgMHhGNzQ5LCAweEY3NDksIDB4MjY1OCwgMHhGNzRBLCAweEY3NEIsIDB4NTNGNCwgMHhGNzRDLCAweEY3NEMsIDB4MjY1NSwKKyAgICAweEY3NEQsIDB4Rjc0RCwgMHgxRTRELCAweEY3NEUsIDB4Rjc1NSwgMHg1M0Y2LCAweEY3NTYsIDB4Rjc1NiwgMHgyNjVCLAorICAgIDB4Rjc1NywgMHhGNzU3LCAweDUzRkUsIDB4Rjc1OCwgMHhGNzU4LCAweDI2NUEsIDB4Rjc1OSwgMHhGNzU5LCAweDUzRkYsCisgICAgMHhGNzVBLCAweEY3NUEsIDB4MjY1OSwgMHhGNzVCLCAweEY3NUIsIDB4MjAyRSwgMHhGNzVDLCAweEY3NUMsIDB4MjYyRiwKKyAgICAweEY3NUQsIDB4Rjc2MCwgMHg1NDAwLCAweEY3NjEsIDB4Rjc2MSwgMHgyNjQ2LCAweEY3NjIsIDB4Rjc2MiwgMHg1NDA0LAorICAgIDB4Rjc2MywgMHhGNzYzLCAweDI2MjYsIDB4Rjc2NCwgMHhGNzZBLCAweDU0MDUsIDB4Rjc2QiwgMHhGNzZCLCAweDI2NUMsCisgICAgMHhGNzZDLCAweEY3NzAsIDB4NTQwQywgMHhGNzcxLCAweEY3NzEsIDB4MjYyQywgMHhGNzcyLCAweEY3N0IsIDB4NTQxMSwKKyAgICAweEY3N0MsIDB4Rjc3QywgMHgyNjIzLCAweEY3N0QsIDB4Rjc3RCwgMHg1NDFCLCAweEY3N0UsIDB4Rjc3RSwgMHgyNjMxLAorICAgIDB4Rjc4MCwgMHhGN0EwLCAweDU0MUMsIDB4RjdBMSwgMHhGN0ZFLCAweDFEQjksIDB4Rjg0MCwgMHhGODQxLCAweDU0M0QsCisgICAgMHhGODQyLCAweEY4NDIsIDB4MjA5QywgMHhGODQzLCAweEY4NDUsIDB4NTQzRiwgMHhGODQ2LCAweEY4NDYsIDB4MjU4MCwKKyAgICAweEY4NDcsIDB4Rjg0OCwgMHg1NDQyLCAweEY4NDksIDB4Rjg0OSwgMHgyMkRDLCAweEY4NEEsIDB4Rjg0RiwgMHg1NDQ0LAorICAgIDB4Rjg1MCwgMHhGODUwLCAweDFGMDUsIDB4Rjg1MSwgMHhGODUxLCAweDIwOEIsIDB4Rjg1MiwgMHhGODUyLCAweDU0NEEsCisgICAgMHhGODUzLCAweEY4NTMsIDB4MjU4MSwgMHhGODU0LCAweEY4NjIsIDB4NTQ0QiwgMHhGODYzLCAweEY4NjMsIDB4MjU4MywKKyAgICAweEY4NjQsIDB4Rjg2NCwgMHgyNTgyLCAweEY4NjUsIDB4Rjg2NSwgMHg1NDVBLCAweEY4NjYsIDB4Rjg2NiwgMHgyMUVFLAorICAgIDB4Rjg2NywgMHhGODcxLCAweDU0NUIsIDB4Rjg3MiwgMHhGODcyLCAweDIxODIsIDB4Rjg3MywgMHhGODc3LCAweDU0NjYsCisgICAgMHhGODc4LCAweEY4NzgsIDB4MjI0MywgMHhGODc5LCAweEY4NzksIDB4NTQ2QiwgMHhGODdBLCAweEY4N0EsIDB4MjU4NywKKyAgICAweEY4N0IsIDB4Rjg3QiwgMHg1NDZDLCAweEY4N0MsIDB4Rjg3QywgMHgyNTg4LCAweEY4N0QsIDB4Rjg3RSwgMHg1NDZELAorICAgIDB4Rjg4MCwgMHhGODgwLCAweDU0NkYsIDB4Rjg4MSwgMHhGODgxLCAweDI1ODQsIDB4Rjg4MiwgMHhGODgzLCAweDU0NzAsCisgICAgMHhGODg0LCAweEY4ODQsIDB4MjFGRCwgMHhGODg1LCAweEY4ODUsIDB4NTQ3MiwgMHhGODg2LCAweEY4ODYsIDB4MjFFRiwKKyAgICAweEY4ODcsIDB4Rjg4QywgMHg1NDczLCAweEY4OEQsIDB4Rjg4RCwgMHgyNThBLCAweEY4OEUsIDB4Rjg4RSwgMHgyNThDLAorICAgIDB4Rjg4RiwgMHhGODk4LCAweDU0NzksIDB4Rjg5OSwgMHhGODk5LCAweDFGNDcsIDB4Rjg5QSwgMHhGODlDLCAweDU0ODMsCisgICAgMHhGODlELCAweEY4OUQsIDB4MUYxRCwgMHhGODlFLCAweEY4OUYsIDB4NTQ4NiwgMHhGOEEwLCAweEY4QTAsIDB4MjU4RCwKKyAgICAweEY5NDAsIDB4Rjk0RCwgMHg1NDg4LCAweEY5NEUsIDB4Rjk0RSwgMHgxRkQwLCAweEY5NEYsIDB4Rjk0RiwgMHgyNTkyLAorICAgIDB4Rjk1MCwgMHhGOTUwLCAweDI1OEYsIDB4Rjk1MSwgMHhGOTU4LCAweDU0OTYsIDB4Rjk1OSwgMHhGOTU5LCAweDI1OTQsCisgICAgMHhGOTVBLCAweEY5NUEsIDB4MUVFMCwgMHhGOTVCLCAweEY5NUMsIDB4NTQ5RSwgMHhGOTVELCAweEY5NUQsIDB4MjU5MSwKKyAgICAweEY5NUUsIDB4Rjk1RSwgMHgyNTk1LCAweEY5NUYsIDB4Rjk2NiwgMHg1NEEwLCAweEY5NjcsIDB4Rjk2NywgMHgyNTk3LAorICAgIDB4Rjk2OCwgMHhGOTY4LCAweDU0QTgsIDB4Rjk2OSwgMHhGOTY5LCAweDIwQjYsIDB4Rjk2QSwgMHhGOTZCLCAweDU0QTksCisgICAgMHhGOTZDLCAweEY5NkMsIDB4MjU5OCwgMHhGOTZELCAweEY5NkUsIDB4NTRBQiwgMHhGOTZGLCAweEY5NkYsIDB4MjBGNiwKKyAgICAweEY5NzAsIDB4Rjk3RSwgMHg1NEFELCAweEY5ODAsIDB4Rjk4NCwgMHg1NEJDLCAweEY5ODUsIDB4Rjk4NSwgMHgyNTg1LAorICAgIDB4Rjk4NiwgMHhGOTg2LCAweDU0QzEsIDB4Rjk4NywgMHhGOTg3LCAweDI1OTksIDB4Rjk4OCwgMHhGOTkwLCAweDU0QzIsCisgICAgMHhGOTkxLCAweEY5OTEsIDB4MjU5NiwgMHhGOTkyLCAweEY5OTUsIDB4NTRDQiwgMHhGOTk2LCAweEY5OTYsIDB4MjU5QSwKKyAgICAweEY5OTcsIDB4Rjk5NywgMHg1NENGLCAweEY5OTgsIDB4Rjk5OCwgMHgyNTlCLCAweEY5OTksIDB4RjlBMCwgMHg1NEQwLAorICAgIDB4RkE0MCwgMHhGQTQxLCAweDU0RDgsIDB4RkE0MiwgMHhGQTQyLCAweDI1OUQsIDB4RkE0MywgMHhGQTQ1LCAweDU0REEsCisgICAgMHhGQTQ2LCAweEZBNDYsIDB4MjU5RSwgMHhGQTQ3LCAweEZBNEIsIDB4NTRERCwgMHhGQTRDLCAweEZBNEMsIDB4MjM0QywKKyAgICAweEZBNEQsIDB4RkE1MCwgMHg1NEUyLCAweEZBNTEsIDB4RkE1MSwgMHgxRjQ0LCAweEZBNTIsIDB4RkE1NywgMHg1NEU2LAorICAgIDB4RkE1OCwgMHhGQTU4LCAweDI2NjAsIDB4RkE1OSwgMHhGQTU5LCAweDI1QTAsIDB4RkE1QSwgMHhGQTVDLCAweDU0RUMsCisgICAgMHhGQTVELCAweEZBNUQsIDB4MjU5QywgMHhGQTVFLCAweEZBNUUsIDB4NTRFRiwgMHhGQTVGLCAweEZBNUYsIDB4MjU5RiwKKyAgICAweEZBNjAsIDB4RkE2MCwgMHg1NEYwLCAweEZBNjEsIDB4RkE2MSwgMHgxRjZDLCAweEZBNjIsIDB4RkE2RiwgMHg1NEYxLAorICAgIDB4RkE3MCwgMHhGQTcwLCAweDI1QTIsIDB4RkE3MSwgMHhGQTczLCAweDU0RkYsIDB4RkE3NCwgMHhGQTc0LCAweDIwQUUsCisgICAgMHhGQTc1LCAweEZBNzUsIDB4NTUwMiwgMHhGQTc2LCAweEZBNzYsIDB4MjU4QiwgMHhGQTc3LCAweEZBNzcsIDB4MjVBMywKKyAgICAweEZBNzgsIDB4RkE3RSwgMHg1NTAzLCAweEZBODAsIDB4RkE4MiwgMHg1NTBBLCAweEZBODMsIDB4RkE4MywgMHgyNTg5LAorICAgIDB4RkE4NCwgMHhGQTg0LCAweDI1QTUsIDB4RkE4NSwgMHhGQThDLCAweDU1MEQsIDB4RkE4RCwgMHhGQThELCAweDI1QTQsCisgICAgMHhGQThFLCAweEZBOEYsIDB4NTUxNSwgMHhGQTkwLCAweEZBOTAsIDB4MjVBNiwgMHhGQTkxLCAweEZBOTEsIDB4MjU5MywKKyAgICAweEZBOTIsIDB4RkE5NSwgMHg1NTE3LCAweEZBOTYsIDB4RkE5NiwgMHgyNUE3LCAweEZBOTcsIDB4RkE5NywgMHgyMjIyLAorICAgIDB4RkE5OCwgMHhGQTk4LCAweDI1QTksIDB4RkE5OSwgMHhGQUEwLCAweDU1MUIsIDB4RkI0MCwgMHhGQjQ4LCAweDU1MjMsCisgICAgMHhGQjQ5LCAweEZCNDksIDB4MjVBOCwgMHhGQjRBLCAweEZCNTEsIDB4NTUyQywgMHhGQjUyLCAweEZCNTIsIDB4MjU4NiwKKyAgICAweEZCNTMsIDB4RkI1NiwgMHg1NTM0LCAweEZCNTcsIDB4RkI1NywgMHgyNUExLCAweEZCNTgsIDB4RkI1OCwgMHgyNUFBLAorICAgIDB4RkI1OSwgMHhGQjU5LCAweDU1MzgsIDB4RkI1QSwgMHhGQjVBLCAweDI1OTAsIDB4RkI1QiwgMHhGQjVCLCAweDI1OEUsCisgICAgMHhGQjVDLCAweEZCNzQsIDB4NTUzOSwgMHhGQjc1LCAweEZCNzUsIDB4MjY4OCwgMHhGQjc2LCAweEZCNzgsIDB4NTU1MiwKKyAgICAweEZCNzksIDB4RkI3OSwgMHgyNjlFLCAweEZCN0EsIDB4RkI3QSwgMHgyNUZCLCAweEZCN0IsIDB4RkI3QiwgMHg1NTU1LAorICAgIDB4RkI3QywgMHhGQjdDLCAweDFGOEMsIDB4RkI3RCwgMHhGQjdELCAweDIxRjQsIDB4RkI3RSwgMHhGQjdFLCAweDU1NTYsCisgICAgMHhGQjgwLCAweEZCOEYsIDB4NTU1NywgMHhGQjkwLCAweEZCOTAsIDB4MjAwRiwgMHhGQjkxLCAweEZCOUIsIDB4NTU2NywKKyAgICAweEZCOUMsIDB4RkI5QywgMHgyMDcxLCAweEZCOUQsIDB4RkI5RSwgMHg1NTcyLCAweEZCOUYsIDB4RkI5RiwgMHgyNUY3LAorICAgIDB4RkJBMCwgMHhGQkEwLCAweDU1NzQsIDB4RkM0MCwgMHhGQzQzLCAweDU1NzUsIDB4RkM0NCwgMHhGQzQ0LCAweDI2OTYsCisgICAgMHhGQzQ1LCAweEZDNDgsIDB4NTU3OSwgMHhGQzQ5LCAweEZDNDksIDB4MjY4RiwgMHhGQzRBLCAweEZDNTksIDB4NTU3RCwKKyAgICAweEZDNUEsIDB4RkM1QSwgMHgyMkRBLCAweEZDNUIsIDB4RkM2MiwgMHg1NThELCAweEZDNjMsIDB4RkM2MywgMHgxRUMxLAorICAgIDB4RkM2NCwgMHhGQzY3LCAweDU1OTUsIDB4RkM2OCwgMHhGQzY4LCAweDFFQjMsIDB4RkM2OSwgMHhGQzZFLCAweDU1OTksCisgICAgMHhGQzZGLCAweEZDNkYsIDB4MjY2QSwgMHhGQzcwLCAweEZDNzAsIDB4NTU5RiwgMHhGQzcxLCAweEZDNzEsIDB4MjY4QSwKKyAgICAweEZDNzIsIDB4RkM3MywgMHg1NUEwLCAweEZDNzQsIDB4RkM3NCwgMHgyNjY5LCAweEZDNzUsIDB4RkM3NiwgMHg1NUEyLAorICAgIDB4RkM3NywgMHhGQzc4LCAweDI2MTgsIDB4RkM3OSwgMHhGQzdFLCAweDU1QTQsIDB4RkM4MCwgMHhGQzgyLCAweDU1QUEsCisgICAgMHhGQzgzLCAweEZDODMsIDB4MjYxQSwgMHhGQzg0LCAweEZDODksIDB4NTVBRCwgMHhGQzhBLCAweEZDOEEsIDB4MjY3MywKKyAgICAweEZDOEIsIDB4RkNBMCwgMHg1NUIzLCAweEZENDAsIDB4RkQ1MSwgMHg1NUM5LCAweEZENTIsIDB4RkQ1MiwgMHgyMEM2LAorICAgIDB4RkQ1MywgMHhGRDUzLCAweDIyNkIsIDB4RkQ1NCwgMHhGRDU2LCAweDU1REIsIDB4RkQ1NywgMHhGRDU3LCAweDI0RDMsCisgICAgMHhGRDU4LCAweEZENTgsIDB4MUU4NiwgMHhGRDU5LCAweEZENTksIDB4NTVERSwgMHhGRDVBLCAweEZENUEsIDB4MjYwRiwKKyAgICAweEZENUIsIDB4RkQ1RSwgMHg1NURGLCAweEZENUYsIDB4RkQ1RiwgMHgyNjExLCAweEZENjAsIDB4RkQ2MSwgMHg1NUUzLAorICAgIDB4RkQ2MiwgMHhGRDYyLCAweDI2MTMsIDB4RkQ2MywgMHhGRDY0LCAweDU1RTUsIDB4RkQ2NSwgMHhGRDY1LCAweDI2MTAsCisgICAgMHhGRDY2LCAweEZENjYsIDB4MjYxMiwgMHhGRDY3LCAweEZENjcsIDB4MjAzMCwgMHhGRDY4LCAweEZENjgsIDB4NTVFNywKKyAgICAweEZENjksIDB4RkQ2OSwgMHgyNjcxLCAweEZENkEsIDB4RkQ2QiwgMHg1NUU4LCAweEZENkMsIDB4RkQ2QywgMHgyNjE0LAorICAgIDB4RkQ2RCwgMHhGRDZGLCAweDU1RUEsIDB4RkQ3MCwgMHhGRDcwLCAweDI2MTYsIDB4RkQ3MSwgMHhGRDcxLCAweDU1RUQsCisgICAgMHhGRDcyLCAweEZENzIsIDB4MjYxNSwgMHhGRDczLCAweEZENzcsIDB4NTVFRSwgMHhGRDc4LCAweEZENzgsIDB4MjBGMiwKKyAgICAweEZENzksIDB4RkQ3QywgMHg1NUYzLCAweEZEN0QsIDB4RkQ3RCwgMHgyNjE3LCAweEZEN0UsIDB4RkQ3RSwgMHg1NUY3LAorICAgIDB4RkQ4MCwgMHhGRDg3LCAweDU1RjgsIDB4RkQ4OCwgMHhGRDg4LCAweDIwMzcsIDB4RkQ4OSwgMHhGRDhBLCAweDU2MDAsCisgICAgMHhGRDhCLCAweEZEOEIsIDB4MjBCMywgMHhGRDhDLCAweEZEOEUsIDB4NTYwMiwgMHhGRDhGLCAweEZEOEYsIDB4MUYyMiwKKyAgICAweEZEOTAsIDB4RkQ5MCwgMHgyNEVELCAweEZEOTEsIDB4RkQ5MywgMHg1NjA1LCAweEZEOTQsIDB4RkQ5NCwgMHgxRjM0LAorICAgIDB4RkQ5NSwgMHhGRDlDLCAweDU2MDgsIDB4RkQ5RCwgMHhGRDlELCAweDBBMDIsIDB4RkQ5RSwgMHhGRDlFLCAweDQwRDMsCisgICAgMHhGRDlGLCAweEZEOUYsIDB4MjAwQywgMHhGREEwLCAweEZEQTAsIDB4NTA4MywgMHhGRTQwLCAweEZFNDAsIDB4MTI1OSwKKyAgICAweEZFNDEsIDB4RkU3RSwgMHg1NjEwLCAweEZFODAsIDB4RkVBMCwgMHg1NjRFLAorfTsKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9HQjEvR0JwYy1FVUMtSF8wLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9HQjEvR0JwYy1FVUMtSF8wLmNwcAppbmRleCAxYjNlMDcyLi43ZDFjOTFmIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvR0IxL0dCcGMtRVVDLUhfMC5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0dCMS9HQnBjLUVVQy1IXzAuY3BwCkBAIC0xLDM5ICsxLDM5IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfR0JwY19FVUNfSF8wWzkxICogM10gPSB7DQotICAgIDB4MDAyMCwgMHgwMDdFLCAweDAwMDEsIDB4MDA4MCwgMHgwMDgwLCAweDFFMjAsIDB4MDBGRCwgMHgwMEZGLCAweDFFMjEsDQotICAgIDB4QTFBMSwgMHhBMUZFLCAweDAwNjAsIDB4QTJCMSwgMHhBMkUyLCAweDAwQkUsIDB4QTJFNSwgMHhBMkVFLCAweDAwRjAsDQotICAgIDB4QTJGMSwgMHhBMkZDLCAweDAwRkEsIDB4QTNBMSwgMHhBM0ZFLCAweDAxMDYsIDB4QTRBMSwgMHhBNEYzLCAweDAxNjQsDQotICAgIDB4QTVBMSwgMHhBNUY2LCAweDAxQjcsIDB4QTZBMSwgMHhBNkI4LCAweDAyMEQsIDB4QTZDMSwgMHhBNkY1LCAweDAyMjUsDQotICAgIDB4QTdBMSwgMHhBN0MxLCAweDAyNUEsIDB4QTdEMSwgMHhBN0YxLCAweDAyN0IsIDB4QThBMSwgMHhBOEMwLCAweDAyOUMsDQotICAgIDB4QThDNSwgMHhBOEVBLCAweDAyQkMsIDB4QTlBNCwgMHhBOUVGLCAweDAyRTIsIDB4QUFBMSwgMHhBQUZFLCAweDAzMkUsDQotICAgIDB4QUJBMSwgMHhBQkMwLCAweDAzOEMsIDB4QjBBMSwgMHhCMEZFLCAweDAzQUMsIDB4QjFBMSwgMHhCMUZFLCAweDA0MEEsDQotICAgIDB4QjJBMSwgMHhCMkZFLCAweDA0NjgsIDB4QjNBMSwgMHhCM0ZFLCAweDA0QzYsIDB4QjRBMSwgMHhCNEZFLCAweDA1MjQsDQotICAgIDB4QjVBMSwgMHhCNUZFLCAweDA1ODIsIDB4QjZBMSwgMHhCNkZFLCAweDA1RTAsIDB4QjdBMSwgMHhCN0ZFLCAweDA2M0UsDQotICAgIDB4QjhBMSwgMHhCOEZFLCAweDA2OUMsIDB4QjlBMSwgMHhCOUZFLCAweDA2RkEsIDB4QkFBMSwgMHhCQUZFLCAweDA3NTgsDQotICAgIDB4QkJBMSwgMHhCQkZFLCAweDA3QjYsIDB4QkNBMSwgMHhCQ0ZFLCAweDA4MTQsIDB4QkRBMSwgMHhCREZFLCAweDA4NzIsDQotICAgIDB4QkVBMSwgMHhCRUZFLCAweDA4RDAsIDB4QkZBMSwgMHhCRkZFLCAweDA5MkUsIDB4QzBBMSwgMHhDMEZFLCAweDA5OEMsDQotICAgIDB4QzFBMSwgMHhDMUZFLCAweDA5RUEsIDB4QzJBMSwgMHhDMkZFLCAweDBBNDgsIDB4QzNBMSwgMHhDM0ZFLCAweDBBQTYsDQotICAgIDB4QzRBMSwgMHhDNEZFLCAweDBCMDQsIDB4QzVBMSwgMHhDNUZFLCAweDBCNjIsIDB4QzZBMSwgMHhDNkZFLCAweDBCQzAsDQotICAgIDB4QzdBMSwgMHhDN0ZFLCAweDBDMUUsIDB4QzhBMSwgMHhDOEZFLCAweDBDN0MsIDB4QzlBMSwgMHhDOUZFLCAweDBDREEsDQotICAgIDB4Q0FBMSwgMHhDQUZFLCAweDBEMzgsIDB4Q0JBMSwgMHhDQkZFLCAweDBEOTYsIDB4Q0NBMSwgMHhDQ0ZFLCAweDBERjQsDQotICAgIDB4Q0RBMSwgMHhDREZFLCAweDBFNTIsIDB4Q0VBMSwgMHhDRUZFLCAweDBFQjAsIDB4Q0ZBMSwgMHhDRkZFLCAweDBGMEUsDQotICAgIDB4RDBBMSwgMHhEMEZFLCAweDBGNkMsIDB4RDFBMSwgMHhEMUZFLCAweDBGQ0EsIDB4RDJBMSwgMHhEMkZFLCAweDEwMjgsDQotICAgIDB4RDNBMSwgMHhEM0ZFLCAweDEwODYsIDB4RDRBMSwgMHhENEZFLCAweDEwRTQsIDB4RDVBMSwgMHhENUZFLCAweDExNDIsDQotICAgIDB4RDZBMSwgMHhENkZFLCAweDExQTAsIDB4RDdBMSwgMHhEN0Y5LCAweDExRkUsIDB4RDhBMSwgMHhEOEZFLCAweDEyNTcsDQotICAgIDB4RDlBMSwgMHhEOUZFLCAweDEyQjUsIDB4REFBMSwgMHhEQUZFLCAweDEzMTMsIDB4REJBMSwgMHhEQkZFLCAweDEzNzEsDQotICAgIDB4RENBMSwgMHhEQ0ZFLCAweDEzQ0YsIDB4RERBMSwgMHhEREZFLCAweDE0MkQsIDB4REVBMSwgMHhERUZFLCAweDE0OEIsDQotICAgIDB4REZBMSwgMHhERkZFLCAweDE0RTksIDB4RTBBMSwgMHhFMEZFLCAweDE1NDcsIDB4RTFBMSwgMHhFMUZFLCAweDE1QTUsDQotICAgIDB4RTJBMSwgMHhFMkZFLCAweDE2MDMsIDB4RTNBMSwgMHhFM0ZFLCAweDE2NjEsIDB4RTRBMSwgMHhFNEZFLCAweDE2QkYsDQotICAgIDB4RTVBMSwgMHhFNUZFLCAweDE3MUQsIDB4RTZBMSwgMHhFNkZFLCAweDE3N0IsIDB4RTdBMSwgMHhFN0ZFLCAweDE3RDksDQotICAgIDB4RThBMSwgMHhFOEZFLCAweDE4MzcsIDB4RTlBMSwgMHhFOUZFLCAweDE4OTUsIDB4RUFBMSwgMHhFQUZFLCAweDE4RjMsDQotICAgIDB4RUJBMSwgMHhFQkZFLCAweDE5NTEsIDB4RUNBMSwgMHhFQ0ZFLCAweDE5QUYsIDB4RURBMSwgMHhFREZFLCAweDFBMEQsDQotICAgIDB4RUVBMSwgMHhFRUZFLCAweDFBNkIsIDB4RUZBMSwgMHhFRkZFLCAweDFBQzksIDB4RjBBMSwgMHhGMEZFLCAweDFCMjcsDQotICAgIDB4RjFBMSwgMHhGMUZFLCAweDFCODUsIDB4RjJBMSwgMHhGMkZFLCAweDFCRTMsIDB4RjNBMSwgMHhGM0ZFLCAweDFDNDEsDQotICAgIDB4RjRBMSwgMHhGNEZFLCAweDFDOUYsIDB4RjVBMSwgMHhGNUZFLCAweDFDRkQsIDB4RjZBMSwgMHhGNkZFLCAweDFENUIsDQotICAgIDB4RjdBMSwgMHhGN0ZFLCAweDFEQjksDQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfR0JwY19FVUNfSF8wWzkxICogM10gPSB7CisgICAgMHgwMDIwLCAweDAwN0UsIDB4MDAwMSwgMHgwMDgwLCAweDAwODAsIDB4MUUyMCwgMHgwMEZELCAweDAwRkYsIDB4MUUyMSwKKyAgICAweEExQTEsIDB4QTFGRSwgMHgwMDYwLCAweEEyQjEsIDB4QTJFMiwgMHgwMEJFLCAweEEyRTUsIDB4QTJFRSwgMHgwMEYwLAorICAgIDB4QTJGMSwgMHhBMkZDLCAweDAwRkEsIDB4QTNBMSwgMHhBM0ZFLCAweDAxMDYsIDB4QTRBMSwgMHhBNEYzLCAweDAxNjQsCisgICAgMHhBNUExLCAweEE1RjYsIDB4MDFCNywgMHhBNkExLCAweEE2QjgsIDB4MDIwRCwgMHhBNkMxLCAweEE2RjUsIDB4MDIyNSwKKyAgICAweEE3QTEsIDB4QTdDMSwgMHgwMjVBLCAweEE3RDEsIDB4QTdGMSwgMHgwMjdCLCAweEE4QTEsIDB4QThDMCwgMHgwMjlDLAorICAgIDB4QThDNSwgMHhBOEVBLCAweDAyQkMsIDB4QTlBNCwgMHhBOUVGLCAweDAyRTIsIDB4QUFBMSwgMHhBQUZFLCAweDAzMkUsCisgICAgMHhBQkExLCAweEFCQzAsIDB4MDM4QywgMHhCMEExLCAweEIwRkUsIDB4MDNBQywgMHhCMUExLCAweEIxRkUsIDB4MDQwQSwKKyAgICAweEIyQTEsIDB4QjJGRSwgMHgwNDY4LCAweEIzQTEsIDB4QjNGRSwgMHgwNEM2LCAweEI0QTEsIDB4QjRGRSwgMHgwNTI0LAorICAgIDB4QjVBMSwgMHhCNUZFLCAweDA1ODIsIDB4QjZBMSwgMHhCNkZFLCAweDA1RTAsIDB4QjdBMSwgMHhCN0ZFLCAweDA2M0UsCisgICAgMHhCOEExLCAweEI4RkUsIDB4MDY5QywgMHhCOUExLCAweEI5RkUsIDB4MDZGQSwgMHhCQUExLCAweEJBRkUsIDB4MDc1OCwKKyAgICAweEJCQTEsIDB4QkJGRSwgMHgwN0I2LCAweEJDQTEsIDB4QkNGRSwgMHgwODE0LCAweEJEQTEsIDB4QkRGRSwgMHgwODcyLAorICAgIDB4QkVBMSwgMHhCRUZFLCAweDA4RDAsIDB4QkZBMSwgMHhCRkZFLCAweDA5MkUsIDB4QzBBMSwgMHhDMEZFLCAweDA5OEMsCisgICAgMHhDMUExLCAweEMxRkUsIDB4MDlFQSwgMHhDMkExLCAweEMyRkUsIDB4MEE0OCwgMHhDM0ExLCAweEMzRkUsIDB4MEFBNiwKKyAgICAweEM0QTEsIDB4QzRGRSwgMHgwQjA0LCAweEM1QTEsIDB4QzVGRSwgMHgwQjYyLCAweEM2QTEsIDB4QzZGRSwgMHgwQkMwLAorICAgIDB4QzdBMSwgMHhDN0ZFLCAweDBDMUUsIDB4QzhBMSwgMHhDOEZFLCAweDBDN0MsIDB4QzlBMSwgMHhDOUZFLCAweDBDREEsCisgICAgMHhDQUExLCAweENBRkUsIDB4MEQzOCwgMHhDQkExLCAweENCRkUsIDB4MEQ5NiwgMHhDQ0ExLCAweENDRkUsIDB4MERGNCwKKyAgICAweENEQTEsIDB4Q0RGRSwgMHgwRTUyLCAweENFQTEsIDB4Q0VGRSwgMHgwRUIwLCAweENGQTEsIDB4Q0ZGRSwgMHgwRjBFLAorICAgIDB4RDBBMSwgMHhEMEZFLCAweDBGNkMsIDB4RDFBMSwgMHhEMUZFLCAweDBGQ0EsIDB4RDJBMSwgMHhEMkZFLCAweDEwMjgsCisgICAgMHhEM0ExLCAweEQzRkUsIDB4MTA4NiwgMHhENEExLCAweEQ0RkUsIDB4MTBFNCwgMHhENUExLCAweEQ1RkUsIDB4MTE0MiwKKyAgICAweEQ2QTEsIDB4RDZGRSwgMHgxMUEwLCAweEQ3QTEsIDB4RDdGOSwgMHgxMUZFLCAweEQ4QTEsIDB4RDhGRSwgMHgxMjU3LAorICAgIDB4RDlBMSwgMHhEOUZFLCAweDEyQjUsIDB4REFBMSwgMHhEQUZFLCAweDEzMTMsIDB4REJBMSwgMHhEQkZFLCAweDEzNzEsCisgICAgMHhEQ0ExLCAweERDRkUsIDB4MTNDRiwgMHhEREExLCAweERERkUsIDB4MTQyRCwgMHhERUExLCAweERFRkUsIDB4MTQ4QiwKKyAgICAweERGQTEsIDB4REZGRSwgMHgxNEU5LCAweEUwQTEsIDB4RTBGRSwgMHgxNTQ3LCAweEUxQTEsIDB4RTFGRSwgMHgxNUE1LAorICAgIDB4RTJBMSwgMHhFMkZFLCAweDE2MDMsIDB4RTNBMSwgMHhFM0ZFLCAweDE2NjEsIDB4RTRBMSwgMHhFNEZFLCAweDE2QkYsCisgICAgMHhFNUExLCAweEU1RkUsIDB4MTcxRCwgMHhFNkExLCAweEU2RkUsIDB4MTc3QiwgMHhFN0ExLCAweEU3RkUsIDB4MTdEOSwKKyAgICAweEU4QTEsIDB4RThGRSwgMHgxODM3LCAweEU5QTEsIDB4RTlGRSwgMHgxODk1LCAweEVBQTEsIDB4RUFGRSwgMHgxOEYzLAorICAgIDB4RUJBMSwgMHhFQkZFLCAweDE5NTEsIDB4RUNBMSwgMHhFQ0ZFLCAweDE5QUYsIDB4RURBMSwgMHhFREZFLCAweDFBMEQsCisgICAgMHhFRUExLCAweEVFRkUsIDB4MUE2QiwgMHhFRkExLCAweEVGRkUsIDB4MUFDOSwgMHhGMEExLCAweEYwRkUsIDB4MUIyNywKKyAgICAweEYxQTEsIDB4RjFGRSwgMHgxQjg1LCAweEYyQTEsIDB4RjJGRSwgMHgxQkUzLCAweEYzQTEsIDB4RjNGRSwgMHgxQzQxLAorICAgIDB4RjRBMSwgMHhGNEZFLCAweDFDOUYsIDB4RjVBMSwgMHhGNUZFLCAweDFDRkQsIDB4RjZBMSwgMHhGNkZFLCAweDFENUIsCisgICAgMHhGN0ExLCAweEY3RkUsIDB4MURCOSwKK307CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvR0IxL0dCcGMtRVVDLVZfMC5jcHAgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvR0IxL0dCcGMtRVVDLVZfMC5jcHAKaW5kZXggYmU0NjlmMi4uMzI1ZWMyMiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0dCMS9HQnBjLUVVQy1WXzAuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9HQjEvR0JwYy1FVUMtVl8wLmNwcApAQCAtMSwxNSArMSwxNSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0dCcGNfRVVDX1ZfMFsyMCAqIDNdID0gew0KLSAgICAweEExQTIsIDB4QTFBMiwgMHgwMjNGLCAweEExQTMsIDB4QTFBMywgMHgwMjNFLCAweEExQUEsIDB4QTFBQSwgMHgwMjU2LA0KLSAgICAweEExQUIsIDB4QTFBQywgMHgxRTE4LCAweEExQUQsIDB4QTFBRCwgMHgwMjU3LCAweEExQjIsIDB4QTFCRiwgMHgwMjQ2LA0KLSAgICAweEExRkUsIDB4QTFGRSwgMHgxRTFBLCAweEEzQTEsIDB4QTNBMSwgMHgwMjQyLCAweEEzQTgsIDB4QTNBOSwgMHgwMjQ0LA0KLSAgICAweEEzQUMsIDB4QTNBQywgMHgwMjNELCAweEEzQUUsIDB4QTNBRSwgMHgxRTFCLCAweEEzQkEsIDB4QTNCQiwgMHgwMjQwLA0KLSAgICAweEEzQkQsIDB4QTNCRCwgMHgxRTFDLCAweEEzQkYsIDB4QTNCRiwgMHgwMjQzLCAweEEzREIsIDB4QTNEQiwgMHgxRTFELA0KLSAgICAweEEzREQsIDB4QTNERCwgMHgxRTFFLCAweEEzREYsIDB4QTNERiwgMHgwMjU4LCAweEEzRkIsIDB4QTNGQiwgMHgwMjU0LA0KLSAgICAweEEzRkQsIDB4QTNGRCwgMHgwMjU1LCAweEEzRkUsIDB4QTNGRSwgMHgxRTFGLA0KLX07DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0dCcGNfRVVDX1ZfMFsyMCAqIDNdID0geworICAgIDB4QTFBMiwgMHhBMUEyLCAweDAyM0YsIDB4QTFBMywgMHhBMUEzLCAweDAyM0UsIDB4QTFBQSwgMHhBMUFBLCAweDAyNTYsCisgICAgMHhBMUFCLCAweEExQUMsIDB4MUUxOCwgMHhBMUFELCAweEExQUQsIDB4MDI1NywgMHhBMUIyLCAweEExQkYsIDB4MDI0NiwKKyAgICAweEExRkUsIDB4QTFGRSwgMHgxRTFBLCAweEEzQTEsIDB4QTNBMSwgMHgwMjQyLCAweEEzQTgsIDB4QTNBOSwgMHgwMjQ0LAorICAgIDB4QTNBQywgMHhBM0FDLCAweDAyM0QsIDB4QTNBRSwgMHhBM0FFLCAweDFFMUIsIDB4QTNCQSwgMHhBM0JCLCAweDAyNDAsCisgICAgMHhBM0JELCAweEEzQkQsIDB4MUUxQywgMHhBM0JGLCAweEEzQkYsIDB4MDI0MywgMHhBM0RCLCAweEEzREIsIDB4MUUxRCwKKyAgICAweEEzREQsIDB4QTNERCwgMHgxRTFFLCAweEEzREYsIDB4QTNERiwgMHgwMjU4LCAweEEzRkIsIDB4QTNGQiwgMHgwMjU0LAorICAgIDB4QTNGRCwgMHhBM0ZELCAweDAyNTUsIDB4QTNGRSwgMHhBM0ZFLCAweDFFMUYsCit9OwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0dCMS9VbmlHQi1VQ1MyLUhfNC5jcHAgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvR0IxL1VuaUdCLVVDUzItSF80LmNwcAppbmRleCAzMDAwMzcyLi5kMTJlODE1IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvR0IxL1VuaUdCLVVDUzItSF80LmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvR0IxL1VuaUdCLVVDUzItSF80LmNwcApAQCAtMSw0NjE3ICsxLDQ2MTcgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLWV4dGVybiBjb25zdCB1bnNpZ25lZCBzaG9ydCBnX0ZYQ01BUF9VbmlHQl9VQ1MyX0hfNFsxMzgyNSAqIDNdID0gew0KLSAgICAweDAwMjAsIDB4MDA3RSwgMHgwMDAxLCAweDAwQTQsIDB4MDBBNCwgMHgwMEE3LCAweDAwQTUsIDB4MDBBNSwgMHg1NzUyLA0KLSAgICAweDAwQTcsIDB4MDBBNywgMHgwMEFCLCAweDAwQTgsIDB4MDBBOCwgMHgwMDY2LCAweDAwQjAsIDB4MDBCMCwgMHgwMEEyLA0KLSAgICAweDAwQjEsIDB4MDBCMSwgMHgwMDdGLCAweDAwRDcsIDB4MDBENywgMHgwMDgwLCAweDAwRTAsIDB4MDBFMCwgMHgwMjlGLA0KLSAgICAweDAwRTEsIDB4MDBFMSwgMHgwMjlELCAweDAwRTgsIDB4MDBFOCwgMHgwMkEzLCAweDAwRTksIDB4MDBFOSwgMHgwMkExLA0KLSAgICAweDAwRUEsIDB4MDBFQSwgMHgwMkI1LCAweDAwRUMsIDB4MDBFQywgMHgwMkE3LCAweDAwRUQsIDB4MDBFRCwgMHgwMkE1LA0KLSAgICAweDAwRjIsIDB4MDBGMiwgMHgwMkFCLCAweDAwRjMsIDB4MDBGMywgMHgwMkE5LCAweDAwRjcsIDB4MDBGNywgMHgwMDgxLA0KLSAgICAweDAwRjksIDB4MDBGOSwgMHgwMkFGLCAweDAwRkEsIDB4MDBGQSwgMHgwMkFELCAweDAwRkMsIDB4MDBGQywgMHgwMkI0LA0KLSAgICAweDAxMDEsIDB4MDEwMSwgMHgwMjlDLCAweDAxMTMsIDB4MDExMywgMHgwMkEwLCAweDAxMUIsIDB4MDExQiwgMHgwMkEyLA0KLSAgICAweDAxMkIsIDB4MDEyQiwgMHgwMkE0LCAweDAxNEQsIDB4MDE0RCwgMHgwMkE4LCAweDAxNkIsIDB4MDE2QiwgMHgwMkFDLA0KLSAgICAweDAxQ0UsIDB4MDFDRSwgMHgwMjlFLCAweDAxRDAsIDB4MDFEMCwgMHgwMkE2LCAweDAxRDIsIDB4MDFEMiwgMHgwMkFBLA0KLSAgICAweDAxRDQsIDB4MDFENCwgMHgwMkFFLCAweDAxRDYsIDB4MDFENiwgMHgwMkIwLCAweDAxRDgsIDB4MDFEOCwgMHgwMkIxLA0KLSAgICAweDAxREEsIDB4MDFEQSwgMHgwMkIyLCAweDAxREMsIDB4MDFEQywgMHgwMkIzLCAweDAxRjksIDB4MDFGOSwgMHgwMkJBLA0KLSAgICAweDAyQzcsIDB4MDJDNywgMHgwMDY1LCAweDAyQzksIDB4MDJDOSwgMHgwMDY0LCAweDAyQ0EsIDB4MDJDQiwgMHgyNkIzLA0KLSAgICAweDAyRDksIDB4MDJEOSwgMHgyNkI1LCAweDAzOTEsIDB4MDNBMSwgMHgwMjBELCAweDAzQTMsIDB4MDNBOSwgMHgwMjFFLA0KLSAgICAweDAzQjEsIDB4MDNDMSwgMHgwMjI1LCAweDAzQzMsIDB4MDNDOSwgMHgwMjM2LCAweDA0MDEsIDB4MDQwMSwgMHgwMjYwLA0KLSAgICAweDA0MTAsIDB4MDQxNSwgMHgwMjVBLCAweDA0MTYsIDB4MDQzNSwgMHgwMjYxLCAweDA0MzYsIDB4MDQ0RiwgMHgwMjgyLA0KLSAgICAweDA0NTEsIDB4MDQ1MSwgMHgwMjgxLCAweDFFM0YsIDB4MUUzRiwgMHgwMkI3LCAweDIwMTAsIDB4MjAxMCwgMHgyNzIyLA0KLSAgICAweDIwMTMsIDB4MjAxMywgMHgyNkI2LCAweDIwMTQsIDB4MjAxNCwgMHgwMDY5LCAweDIwMTUsIDB4MjAxNSwgMHgyNkI3LA0KLSAgICAweDIwMTYsIDB4MjAxNiwgMHgwMDZCLCAweDIwMTgsIDB4MjAxOSwgMHgwMDZELCAweDIwMUMsIDB4MjAxRCwgMHgwMDZGLA0KLSAgICAweDIwMjUsIDB4MjAyNSwgMHgyNkI4LCAweDIwMjYsIDB4MjAyNiwgMHgwMDZDLCAweDIwMzAsIDB4MjAzMCwgMHgwMEFBLA0KLSAgICAweDIwMzIsIDB4MjAzMywgMHgwMEEzLCAweDIwMzUsIDB4MjAzNSwgMHgyNkI5LCAweDIwM0IsIDB4MjAzQiwgMHgwMEI4LA0KLSAgICAweDIwQUMsIDB4MjBBQywgMHg1NzUxLCAweDIxMDMsIDB4MjEwMywgMHgwMEE1LCAweDIxMDUsIDB4MjEwNSwgMHgyNkJBLA0KLSAgICAweDIxMDksIDB4MjEwOSwgMHgyNkJCLCAweDIxMTYsIDB4MjExNiwgMHgwMEFDLCAweDIxMjEsIDB4MjEyMSwgMHgyNzIwLA0KLSAgICAweDIxNjAsIDB4MjE2QiwgMHgwMEZBLCAweDIxNzAsIDB4MjE3OSwgMHgyNkE5LCAweDIxOTAsIDB4MjE5MSwgMHgwMEJBLA0KLSAgICAweDIxOTIsIDB4MjE5MiwgMHgwMEI5LCAweDIxOTMsIDB4MjE5MywgMHgwMEJDLCAweDIxOTYsIDB4MjE5OSwgMHgyNkJDLA0KLSAgICAweDIyMDgsIDB4MjIwOCwgMHgwMDg5LCAweDIyMEYsIDB4MjIwRiwgMHgwMDg2LCAweDIyMTEsIDB4MjIxMSwgMHgwMDg1LA0KLSAgICAweDIyMTUsIDB4MjIxNSwgMHgyNkMwLCAweDIyMUEsIDB4MjIxQSwgMHgwMDhCLCAweDIyMUQsIDB4MjIxRCwgMHgwMDk3LA0KLSAgICAweDIyMUUsIDB4MjIxRSwgMHgwMDlELCAweDIyMUYsIDB4MjIxRiwgMHgyNkMxLCAweDIyMjAsIDB4MjIyMCwgMHgwMDhFLA0KLSAgICAweDIyMjMsIDB4MjIyMywgMHgyNkMyLCAweDIyMjUsIDB4MjIyNSwgMHgwMDhELCAweDIyMjcsIDB4MjIyOCwgMHgwMDgzLA0KLSAgICAweDIyMjksIDB4MjIyOSwgMHgwMDg4LCAweDIyMkEsIDB4MjIyQSwgMHgwMDg3LCAweDIyMkIsIDB4MjIyQiwgMHgwMDkxLA0KLSAgICAweDIyMkUsIDB4MjIyRSwgMHgwMDkyLCAweDIyMzQsIDB4MjIzNCwgMHgwMDlGLCAweDIyMzUsIDB4MjIzNSwgMHgwMDlFLA0KLSAgICAweDIyMzYsIDB4MjIzNiwgMHgwMDgyLCAweDIyMzcsIDB4MjIzNywgMHgwMDhBLCAweDIyM0QsIDB4MjIzRCwgMHgwMDk2LA0KLSAgICAweDIyNDgsIDB4MjI0OCwgMHgwMDk1LCAweDIyNEMsIDB4MjI0QywgMHgwMDk0LCAweDIyNTIsIDB4MjI1MiwgMHgyNkMzLA0KLSAgICAweDIyNjAsIDB4MjI2MCwgMHgwMDk4LCAweDIyNjEsIDB4MjI2MSwgMHgwMDkzLCAweDIyNjQsIDB4MjI2NSwgMHgwMDlCLA0KLSAgICAweDIyNjYsIDB4MjI2NywgMHgyNkM0LCAweDIyNkUsIDB4MjI2RiwgMHgwMDk5LCAweDIyOTUsIDB4MjI5NSwgMHgyNzA0LA0KLSAgICAweDIyOTksIDB4MjI5OSwgMHgwMDkwLCAweDIyQTUsIDB4MjJBNSwgMHgwMDhDLCAweDIyQkYsIDB4MjJCRiwgMHgyNkM2LA0KLSAgICAweDIyRUYsIDB4MjJFRiwgMHgwMDZDLCAweDIzMTIsIDB4MjMxMiwgMHgwMDhGLCAweDI0NjAsIDB4MjQ2OSwgMHgwMEU2LA0KLSAgICAweDI0NzQsIDB4MjQ4NywgMHgwMEQyLCAweDI0ODgsIDB4MjQ5QiwgMHgwMEJFLCAweDI1MDAsIDB4MjU0QiwgMHgwMkUyLA0KLSAgICAweDI1NTAsIDB4MjU3MywgMHgyNkM3LCAweDI1ODEsIDB4MjU4RiwgMHgyNkVCLCAweDI1OTMsIDB4MjU5NSwgMHgyNkZBLA0KLSAgICAweDI1QTAsIDB4MjVBMCwgMHgwMEI1LCAweDI1QTEsIDB4MjVBMSwgMHgwMEI0LCAweDI1QjIsIDB4MjVCMiwgMHgwMEI3LA0KLSAgICAweDI1QjMsIDB4MjVCMywgMHgwMEI2LCAweDI1QkMsIDB4MjVCRCwgMHgyNkZELCAweDI1QzYsIDB4MjVDNiwgMHgwMEIzLA0KLSAgICAweDI1QzcsIDB4MjVDNywgMHgwMEIyLCAweDI1Q0IsIDB4MjVDQiwgMHgwMEFGLCAweDI1Q0UsIDB4MjVDRSwgMHgwMEIxLA0KLSAgICAweDI1Q0YsIDB4MjVDRiwgMHgwMEIwLCAweDI1RTIsIDB4MjVFNSwgMHgyNkZGLCAweDI2MDUsIDB4MjYwNSwgMHgwMEFFLA0KLSAgICAweDI2MDYsIDB4MjYwNiwgMHgwMEFELCAweDI2MDksIDB4MjYwOSwgMHgyNzAzLCAweDI2NDAsIDB4MjY0MCwgMHgwMEExLA0KLSAgICAweDI2NDIsIDB4MjY0MiwgMHgwMEEwLCAweDJFODAsIDB4MkU4MCwgMHg1NzlDLCAweDJFODEsIDB4MkU4MSwgMHg1NjFGLA0KLSAgICAweDJFODIsIDB4MkU4MywgMHg1NzlELCAweDJFODQsIDB4MkU4NCwgMHg1NjIzLCAweDJFODUsIDB4MkU4NywgMHg1NzlGLA0KLSAgICAweDJFODgsIDB4MkU4OCwgMHg1NjI2LCAweDJFODksIDB4MkU4QSwgMHg1N0EyLCAweDJFOEIsIDB4MkU4QiwgMHg1NjI3LA0KLSAgICAweDJFOEMsIDB4MkU4QywgMHg1NjJDLCAweDJFOEQsIDB4MkU5NiwgMHg1N0E0LCAweDJFOTcsIDB4MkU5NywgMHg1NjJELA0KLSAgICAweDJFOTgsIDB4MkU5OSwgMHg1N0FFLCAweDJFOUIsIDB4MkVBNiwgMHg1N0IwLCAweDJFQTcsIDB4MkVBNywgMHg1NjNBLA0KLSAgICAweDJFQTgsIDB4MkVBOSwgMHg1N0JDLCAweDJFQUEsIDB4MkVBQSwgMHg1NjNELCAweDJFQUIsIDB4MkVBRCwgMHg1N0JFLA0KLSAgICAweDJFQUUsIDB4MkVBRSwgMHg1NjQwLCAweDJFQUYsIDB4MkVCMiwgMHg1N0MxLCAweDJFQjMsIDB4MkVCMywgMHg1NjQyLA0KLSAgICAweDJFQjQsIDB4MkVCNSwgMHg1N0M1LCAweDJFQjYsIDB4MkVCNywgMHg1NjQzLCAweDJFQjgsIDB4MkVCQSwgMHg1N0M3LA0KLSAgICAweDJFQkIsIDB4MkVCQiwgMHg1NjQ4LCAweDJFQkMsIDB4MkVDOSwgMHg1N0NBLCAweDJFQ0EsIDB4MkVDQSwgMHg1NjUyLA0KLSAgICAweDJFQ0IsIDB4MkVGMywgMHg1N0Q4LCAweDJGMDAsIDB4MkYwMCwgMHgxMDQyLCAweDJGMDEsIDB4MkYwMSwgMHgxMjYzLA0KLSAgICAweDJGMDIsIDB4MkYwMiwgMHgxMjcyLCAweDJGMDMsIDB4MkYwMywgMHgxMjY1LCAweDJGMDQsIDB4MkYwNCwgMHgxMDU5LA0KLSAgICAweDJGMDUsIDB4MkYwNSwgMHgyNzkzLCAweDJGMDYsIDB4MkYwNiwgMHgwNjNELCAweDJGMDcsIDB4MkYwNywgMHgxMzAzLA0KLSAgICAweDJGMDgsIDB4MkYwOCwgMHgwQ0E2LCAweDJGMDksIDB4MkYwOSwgMHgwNjM4LCAweDJGMEEsIDB4MkYwQSwgMHgwQ0M2LA0KLSAgICAweDJGMEIsIDB4MkYwQiwgMHgwM0Q2LCAweDJGMEMsIDB4MkYwQywgMHgxMjlELCAweDJGMEQsIDB4MkYwRCwgMHgxMzE0LA0KLSAgICAweDJGMEUsIDB4MkYwRSwgMHgxMzBGLCAweDJGMEYsIDB4MkYwRiwgMHgwODJCLCAweDJGMTAsIDB4MkYxMCwgMHgxMzk5LA0KLSAgICAweDJGMTEsIDB4MkYxMSwgMHgwNTk3LCAweDJGMTIsIDB4MkYxMiwgMHgwOUVGLCAweDJGMTMsIDB4MkYxMywgMHgxMkZDLA0KLSAgICAweDJGMTQsIDB4MkYxNCwgMHgxMjY2LCAweDJGMTUsIDB4MkYxNSwgMHgxMjg0LCAweDJGMTYsIDB4MkYxNiwgMHgyQTFBLA0KLSAgICAweDJGMTcsIDB4MkYxNywgMHgwRDQ1LCAweDJGMTgsIDB4MkYxOCwgMHgwNDdFLCAweDJGMTksIDB4MkYxOSwgMHgxMzUyLA0KLSAgICAweDJGMUEsIDB4MkYxQSwgMHgwNENDLCAweDJGMUIsIDB4MkYxQiwgMHgxMzlDLCAweDJGMUMsIDB4MkYxQywgMHgxMEJCLA0KLSAgICAweDJGMUQsIDB4MkYxRCwgMHgwOTY3LCAweDJGMUUsIDB4MkYxRSwgMHgxNTkzLCAweDJGMUYsIDB4MkYxRiwgMHgwRTcyLA0KLSAgICAweDJGMjAsIDB4MkYyMCwgMHgwRDU2LCAweDJGMjEsIDB4MkYyMSwgMHgxNjFDLCAweDJGMjIsIDB4MkYyMiwgMHgyRDJELA0KLSAgICAweDJGMjMsIDB4MkYyMywgMHgwRjEzLCAweDJGMjQsIDB4MkYyNCwgMHgwNTc2LCAweDJGMjUsIDB4MkYyNSwgMHgwQjZGLA0KLSAgICAweDJGMjYsIDB4MkYyNiwgMHgxMjMwLCAweDJGMjcsIDB4MkYyNywgMHgxNzJFLCAweDJGMjgsIDB4MkYyOCwgMHgwNTZBLA0KLSAgICAweDJGMjksIDB4MkYyOSwgMHgwRjZDLCAweDJGMkEsIDB4MkYyQSwgMHgxNEI2LCAweDJGMkIsIDB4MkYyQiwgMHgwRDQzLA0KLSAgICAweDJGMkMsIDB4MkYyQywgMHgxNzc0LCAweDJGMkQsIDB4MkYyRCwgMHgwQ0Y2LCAweDJGMkUsIDB4MkYyRSwgMHgxODE1LA0KLSAgICAweDJGMkYsIDB4MkYyRiwgMHgwNkZELCAweDJGMzAsIDB4MkYzMCwgMHgwODJELCAweDJGMzEsIDB4MkYzMSwgMHgwOEJFLA0KLSAgICAweDJGMzIsIDB4MkYzMiwgMHgwNkM0LCAweDJGMzMsIDB4MkYzMywgMHgxODEzLCAweDJGMzQsIDB4MkYzNCwgMHgwNzNDLA0KLSAgICAweDJGMzUsIDB4MkYzNSwgMHgxMzk4LCAweDJGMzYsIDB4MkYzNiwgMHgxNEFELCAweDJGMzcsIDB4MkYzNywgMHgxNEY2LA0KLSAgICAweDJGMzgsIDB4MkYzOCwgMHgwNzA2LCAweDJGMzksIDB4MkYzOSwgMHgxNzYyLCAweDJGM0EsIDB4MkYzQSwgMHgxNUVFLA0KLSAgICAweDJGM0IsIDB4MkYzQiwgMHgxNUUwLCAweDJGM0MsIDB4MkYzQywgMHgwRjhGLCAweDJGM0QsIDB4MkYzRCwgMHgwNkU1LA0KLSAgICAweDJGM0UsIDB4MkYzRSwgMHgzMjkyLCAweDJGM0YsIDB4MkYzRiwgMHgwRDZELCAweDJGNDAsIDB4MkY0MCwgMHgxMUE2LA0KLSAgICAweDJGNDEsIDB4MkY0MSwgMHgxOTA5LCAweDJGNDIsIDB4MkY0MiwgMHgwRUQzLCAweDJGNDMsIDB4MkY0MywgMHgwNUY2LA0KLSAgICAweDJGNDQsIDB4MkY0NCwgMHgwOEMwLCAweDJGNDUsIDB4MkY0NSwgMHgwNjVBLCAweDJGNDYsIDB4MkY0NiwgMHgwRUVELA0KLSAgICAweDJGNDcsIDB4MkY0NywgMHgwQ0IwLCAweDJGNDgsIDB4MkY0OCwgMHgxMEZFLCAweDJGNDksIDB4MkY0OSwgMHgxMTA1LA0KLSAgICAweDJGNEEsIDB4MkY0QSwgMHgwQjIxLCAweDJGNEIsIDB4MkY0QiwgMHgwQzM0LCAweDJGNEMsIDB4MkY0QywgMHgxMUI4LA0KLSAgICAweDJGNEQsIDB4MkY0RCwgMHgwNTc4LCAweDJGNEUsIDB4MkY0RSwgMHgxOUJELCAweDJGNEYsIDB4MkY0RiwgMHgwRUYyLA0KLSAgICAweDJGNTAsIDB4MkY1MCwgMHgwNDMxLCAweDJGNTEsIDB4MkY1MSwgMHgwQUIwLCAweDJGNTIsIDB4MkY1MiwgMHgwRDY2LA0KLSAgICAweDJGNTMsIDB4MkY1MywgMHgwQzE3LCAweDJGNTQsIDB4MkY1NCwgMHgwREEzLCAweDJGNTUsIDB4MkY1NSwgMHgwODA1LA0KLSAgICAweDJGNTYsIDB4MkY1NiwgMHgxMjAzLCAweDJGNTcsIDB4MkY1NywgMHgwNkIzLCAweDJGNTgsIDB4MkY1OCwgMHgxMjY5LA0KLSAgICAweDJGNTksIDB4MkY1OSwgMHgxNjlELCAweDJGNUEsIDB4MkY1QSwgMHgwQkNCLCAweDJGNUIsIDB4MkY1QiwgMHgwRkU5LA0KLSAgICAweDJGNUMsIDB4MkY1QywgMHgwQjY0LCAweDJGNUQsIDB4MkY1RCwgMHgwQzg5LCAweDJGNUUsIDB4MkY1RSwgMHgwRkM5LA0KLSAgICAweDJGNUYsIDB4MkY1RiwgMHgxMEQ2LCAweDJGNjAsIDB4MkY2MCwgMHgwNzI4LCAweDJGNjEsIDB4MkY2MSwgMHgwRTkwLA0KLSAgICAweDJGNjIsIDB4MkY2MiwgMHgwNkM1LCAweDJGNjMsIDB4MkY2MywgMHgwRDMzLCAweDJGNjQsIDB4MkY2NCwgMHgxMEE4LA0KLSAgICAweDJGNjUsIDB4MkY2NSwgMHgwRTQyLCAweDJGNjYsIDB4MkY2NiwgMHgxQkM2LCAweDJGNjcsIDB4MkY2NywgMHgxQjYwLA0KLSAgICAweDJGNjgsIDB4MkY2OCwgMHgzRUJGLCAweDJGNjksIDB4MkY2OSwgMHgwM0UyLCAweDJGNkEsIDB4MkY2QSwgMHgwQkMzLA0KLSAgICAweDJGNkIsIDB4MkY2QiwgMHgwQUY4LCAweDJGNkMsIDB4MkY2QywgMHgwQjIyLCAweDJGNkQsIDB4MkY2RCwgMHgwQUIxLA0KLSAgICAweDJGNkUsIDB4MkY2RSwgMHgwRDRGLCAweDJGNkYsIDB4MkY2RiwgMHgwRDQ2LCAweDJGNzAsIDB4MkY3MCwgMHgwRDU1LA0KLSAgICAweDJGNzEsIDB4MkY3MSwgMHg0MENCLCAweDJGNzIsIDB4MkY3MiwgMHgwNzgzLCAweDJGNzMsIDB4MkY3MywgMHgwRkQxLA0KLSAgICAweDJGNzQsIDB4MkY3NCwgMHgwOUVCLCAweDJGNzUsIDB4MkY3NSwgMHgxMUYwLCAweDJGNzYsIDB4MkY3NiwgMHgwQURDLA0KLSAgICAweDJGNzcsIDB4MkY3NywgMHgxQ0U3LCAweDJGNzgsIDB4MkY3OCwgMHgxQzVFLCAweDJGNzksIDB4MkY3OSwgMHgwRUE5LA0KLSAgICAweDJGN0EsIDB4MkY3QSwgMHgxMDFCLCAweDJGN0IsIDB4MkY3QiwgMHgxMEQ1LCAweDJGN0MsIDB4MkY3QywgMHgwOUJBLA0KLSAgICAweDJGN0QsIDB4MkY3RCwgMHgwNjM3LCAweDJGN0UsIDB4MkY3RSwgMHgxQkNCLCAweDJGN0YsIDB4MkY3RiwgMHgwNjM5LA0KLSAgICAweDJGODAsIDB4MkY4MCwgMHgxQTFFLCAweDJGODEsIDB4MkY4MSwgMHgwQ0JELCAweDJGODIsIDB4MkY4MiwgMHgwNEUxLA0KLSAgICAweDJGODMsIDB4MkY4MywgMHgxMjMxLCAweDJGODQsIDB4MkY4NCwgMHgxMUMwLCAweDJGODUsIDB4MkY4NSwgMHgwOEY5LA0KLSAgICAweDJGODYsIDB4MkY4NiwgMHgwRDE5LCAweDJGODcsIDB4MkY4NywgMHgxNjE4LCAweDJGODgsIDB4MkY4OCwgMHgxMURBLA0KLSAgICAweDJGODksIDB4MkY4OSwgMHgxQ0RDLCAweDJGOEEsIDB4MkY4QSwgMHgwQ0U0LCAweDJGOEIsIDB4MkY4QiwgMHg0NUEyLA0KLSAgICAweDJGOEMsIDB4MkY4QywgMHgxQkYwLCAweDJGOEQsIDB4MkY4RCwgMHgwNTBCLCAweDJGOEUsIDB4MkY4RSwgMHgwRkQzLA0KLSAgICAweDJGOEYsIDB4MkY4RiwgMHgwRjlCLCAweDJGOTAsIDB4MkY5MCwgMHgxMDQ5LCAweDJGOTEsIDB4MkY5MSwgMHg0OURDLA0KLSAgICAweDJGOTIsIDB4MkY5MiwgMHgxRjk2LCAweDJGOTMsIDB4MkY5MywgMHgwODk4LCAweDJGOTQsIDB4MkY5NCwgMHgwRkZELA0KLSAgICAweDJGOTUsIDB4MkY5NSwgMHgwNzIxLCAweDJGOTYsIDB4MkY5NiwgMHgwNUY4LCAweDJGOTcsIDB4MkY5NywgMHgxRDE1LA0KLSAgICAweDJGOTgsIDB4MkY5OCwgMHgxRDUwLCAweDJGOTksIDB4MkY5OSwgMHgxRTNCLCAweDJGOUEsIDB4MkY5QSwgMHgwNTA1LA0KLSAgICAweDJGOUIsIDB4MkY5QiwgMHgxMjNDLCAweDJGOUMsIDB4MkY5QywgMHgxMjQwLCAweDJGOUQsIDB4MkY5RCwgMHgwRDI2LA0KLSAgICAweDJGOUUsIDB4MkY5RSwgMHgxRTdCLCAweDJGOUYsIDB4MkY5RiwgMHgwRjhDLCAweDJGQTAsIDB4MkZBMCwgMHgwNEUyLA0KLSAgICAweDJGQTEsIDB4MkZBMSwgMHg0RDEzLCAweDJGQTIsIDB4MkZBMiwgMHgxMDVGLCAweDJGQTMsIDB4MkZBMywgMHgxMEI0LA0KLSAgICAweDJGQTQsIDB4MkZBNCwgMHg0RTE4LCAweDJGQTUsIDB4MkZBNSwgMHgwOURBLCAweDJGQTYsIDB4MkZBNiwgMHgwOEMxLA0KLSAgICAweDJGQTcsIDB4MkZBNywgMHgxRTc1LCAweDJGQTgsIDB4MkZBOCwgMHgyMDdELCAweDJGQTksIDB4MkZBOSwgMHgwNkIyLA0KLSAgICAweDJGQUEsIDB4MkZBQSwgMHgwOUVFLCAweDJGQUIsIDB4MkZBQiwgMHgxRDc5LCAweDJGQUMsIDB4MkZBQywgMHgxMENGLA0KLSAgICAweDJGQUQsIDB4MkZBRCwgMHg1MEVBLCAweDJGQUUsIDB4MkZBRSwgMHgwNjY0LCAweDJGQUYsIDB4MkZBRiwgMHgwQUVCLA0KLSAgICAweDJGQjAsIDB4MkZCMCwgMHgwNkVBLCAweDJGQjEsIDB4MkZCMSwgMHgyMThELCAweDJGQjIsIDB4MkZCMiwgMHgwOEYxLA0KLSAgICAweDJGQjMsIDB4MkZCMywgMHgxMDdCLCAweDJGQjQsIDB4MkZCNCwgMHgyMjA5LCAweDJGQjUsIDB4MkZCNSwgMHgxRjAwLA0KLSAgICAweDJGQjYsIDB4MkZCNiwgMHgxRUY0LCAweDJGQjcsIDB4MkZCNywgMHgwRDRBLCAweDJGQjgsIDB4MkZCOCwgMHgwRDZFLA0KLSAgICAweDJGQjksIDB4MkZCOSwgMHgwRjUwLCAweDJGQkEsIDB4MkZCQSwgMHgyMDZELCAweDJGQkIsIDB4MkZCQiwgMHgwNzIwLA0KLSAgICAweDJGQkMsIDB4MkZCQywgMHgwNkRBLCAweDJGQkQsIDB4MkZCRCwgMHgxREVDLCAweDJGQkUsIDB4MkZCRSwgMHgxRUQwLA0KLSAgICAweDJGQkYsIDB4MkZCRiwgMHgxMzlCLCAweDJGQzAsIDB4MkZDMCwgMHgxMjYwLCAweDJGQzEsIDB4MkZDMSwgMHgwNzQ2LA0KLSAgICAweDJGQzIsIDB4MkZDMiwgMHgyMjM5LCAweDJGQzMsIDB4MkZDMywgMHgyMDlDLCAweDJGQzQsIDB4MkZDNCwgMHgyNjg4LA0KLSAgICAweDJGQzUsIDB4MkZDNSwgMHgwQTYwLCAweDJGQzYsIDB4MkZDNiwgMHgyMDcxLCAweDJGQzcsIDB4MkZDNywgMHgwQTkwLA0KLSAgICAweDJGQzgsIDB4MkZDOCwgMHg1NTg2LCAweDJGQzksIDB4MkZDOSwgMHgwRDg5LCAweDJGQ0EsIDB4MkZDQSwgMHgwNzkxLA0KLSAgICAweDJGQ0IsIDB4MkZDQiwgMHgxQTU1LCAweDJGQ0MsIDB4MkZDQywgMHgyNjE4LCAweDJGQ0QsIDB4MkZDRCwgMHgwNUU1LA0KLSAgICAweDJGQ0UsIDB4MkZDRSwgMHgwNzFELCAweDJGQ0YsIDB4MkZDRiwgMHgwRDhBLCAweDJGRDAsIDB4MkZEMCwgMHgwNDMwLA0KLSAgICAweDJGRDEsIDB4MkZEMSwgMHgyMEM2LCAweDJGRDIsIDB4MkZEMiwgMHgxRTg2LCAweDJGRDMsIDB4MkZEMywgMHgyMDM3LA0KLSAgICAweDJGRDQsIDB4MkZENCwgMHgxRjM0LCAweDJGRDUsIDB4MkZENSwgMHgxMkYzLCAweDJGRjAsIDB4MkZGQiwgMHgyNzRDLA0KLSAgICAweDMwMDAsIDB4MzAwMiwgMHgwMDYwLCAweDMwMDMsIDB4MzAwMywgMHgwMDY3LCAweDMwMDUsIDB4MzAwNSwgMHgwMDY4LA0KLSAgICAweDMwMDYsIDB4MzAwNiwgMHgyNzI4LCAweDMwMDcsIDB4MzAwNywgMHgxRTE3LCAweDMwMDgsIDB4MzAwRiwgMHgwMDczLA0KLSAgICAweDMwMTAsIDB4MzAxMSwgMHgwMDdELCAweDMwMTIsIDB4MzAxMiwgMHgyNzA1LCAweDMwMTMsIDB4MzAxMywgMHgwMEJELA0KLSAgICAweDMwMTQsIDB4MzAxNSwgMHgwMDcxLCAweDMwMTYsIDB4MzAxNywgMHgwMDdCLCAweDMwMUQsIDB4MzAxRSwgMHgyNzA2LA0KLSAgICAweDMwMjEsIDB4MzAyOSwgMHgyNzA4LCAweDMwMzMsIDB4MzAzNSwgMHg1NzdCLCAweDMwMzgsIDB4MzAzQSwgMHg1NzdFLA0KLSAgICAweDMwM0UsIDB4MzAzRSwgMHgyNzRCLCAweDMwM0YsIDB4MzAzRiwgMHg1NzU1LCAweDMwNDEsIDB4MzA5MywgMHgwMTY0LA0KLSAgICAweDMwOTQsIDB4MzA5NCwgMHg1NzY3LCAweDMwOUIsIDB4MzA5QywgMHgyNzI0LCAweDMwOUQsIDB4MzA5RSwgMHgyNzI5LA0KLSAgICAweDMwQTEsIDB4MzBGNiwgMHgwMUI3LCAweDMwRjcsIDB4MzBGQSwgMHg1Nzc2LCAweDMwRkIsIDB4MzBGQiwgMHgwMDYzLA0KLSAgICAweDMwRkMsIDB4MzBGQywgMHgyNzIzLCAweDMwRkQsIDB4MzBGRSwgMHgyNzI2LCAweDMxMDUsIDB4MzEyOSwgMHgwMkJDLA0KLSAgICAweDMxMkEsIDB4MzEyQywgMHg1NzgxLCAweDMxQTAsIDB4MzFCNywgMHg1Nzg0LCAweDMyMjAsIDB4MzIyOSwgMHgwMEYwLA0KLSAgICAweDMyMzEsIDB4MzIzMSwgMHgyNzIxLCAweDMyQTMsIDB4MzJBMywgMHgyNzExLCAweDMzOEUsIDB4MzM4RiwgMHgyNzEyLA0KLSAgICAweDMzOUMsIDB4MzM5RSwgMHgyNzE0LCAweDMzQTEsIDB4MzNBMSwgMHgyNzE3LCAweDMzQzQsIDB4MzNDNCwgMHgyNzE4LA0KLSAgICAweDMzQ0UsIDB4MzNDRSwgMHgyNzE5LCAweDMzRDEsIDB4MzNEMiwgMHgyNzFBLCAweDMzRDUsIDB4MzNENSwgMHgyNzFDLA0KLSAgICAweDM0MDAsIDB4MzQ0NiwgMHg1ODAxLCAweDM0NDcsIDB4MzQ0NywgMHg1NjI1LCAweDM0NDgsIDB4MzQ3MiwgMHg1ODQ4LA0KLSAgICAweDM0NzMsIDB4MzQ3MywgMHg1NjI0LCAweDM0NzQsIDB4MzRGRiwgMHg1ODczLCAweDM1MDAsIDB4MzU5RCwgMHg1OEZGLA0KLSAgICAweDM1OUUsIDB4MzU5RSwgMHg1NjI5LCAweDM1OUYsIDB4MzVGRiwgMHg1OTlELCAweDM2MDAsIDB4MzYwRCwgMHg1OUZFLA0KLSAgICAweDM2MEUsIDB4MzYwRSwgMHg1NjJCLCAweDM2MEYsIDB4MzYxOSwgMHg1QTBDLCAweDM2MUEsIDB4MzYxQSwgMHg1NjJBLA0KLSAgICAweDM2MUIsIDB4MzZGRiwgMHg1QTE3LCAweDM3MDAsIDB4MzdGRiwgMHg1QUZDLCAweDM4MDAsIDB4MzhGRiwgMHg1QkZDLA0KLSAgICAweDM5MDAsIDB4MzkxNywgMHg1Q0ZDLCAweDM5MTgsIDB4MzkxOCwgMHg1NjJGLCAweDM5MTksIDB4Mzk2RCwgMHg1RDE0LA0KLSAgICAweDM5NkUsIDB4Mzk2RSwgMHg1NjJFLCAweDM5NkYsIDB4MzlDRSwgMHg1RDY5LCAweDM5Q0YsIDB4MzlDRiwgMHg1NjMxLA0KLSAgICAweDM5RDAsIDB4MzlEMCwgMHg1NjM0LCAweDM5RDEsIDB4MzlERSwgMHg1REM5LCAweDM5REYsIDB4MzlERiwgMHg1NjMyLA0KLSAgICAweDM5RTAsIDB4MzlGRiwgMHg1REQ3LCAweDNBMDAsIDB4M0E3MiwgMHg1REY3LCAweDNBNzMsIDB4M0E3MywgMHg1NjMzLA0KLSAgICAweDNBNzQsIDB4M0FGRiwgMHg1RTZBLCAweDNCMDAsIDB4M0I0RCwgMHg1RUY2LCAweDNCNEUsIDB4M0I0RSwgMHg1NjM3LA0KLSAgICAweDNCNEYsIDB4M0JGRiwgMHg1RjQ0LCAweDNDMDAsIDB4M0M2RCwgMHg1RkY1LCAweDNDNkUsIDB4M0M2RSwgMHg1NjM4LA0KLSAgICAweDNDNkYsIDB4M0NERiwgMHg2MDYzLCAweDNDRTAsIDB4M0NFMCwgMHg1NjM5LCAweDNDRTEsIDB4M0NGRiwgMHg2MEQ0LA0KLSAgICAweDNEMDAsIDB4M0RGRiwgMHg2MEYzLCAweDNFMDAsIDB4M0VGRiwgMHg2MUYzLCAweDNGMDAsIDB4M0ZGRiwgMHg2MkYzLA0KLSAgICAweDQwMDAsIDB4NDA1NSwgMHg2M0YzLCAweDQwNTYsIDB4NDA1NiwgMHg1NjNFLCAweDQwNTcsIDB4NDBGRiwgMHg2NDQ5LA0KLSAgICAweDQxMDAsIDB4NDE1RSwgMHg2NEYyLCAweDQxNUYsIDB4NDE1RiwgMHg1NjNGLCAweDQxNjAsIDB4NDFGRiwgMHg2NTUxLA0KLSAgICAweDQyMDAsIDB4NDJGRiwgMHg2NUYxLCAweDQzMDAsIDB4NDMzNiwgMHg2NkYxLCAweDQzMzcsIDB4NDMzNywgMHg1NjQxLA0KLSAgICAweDQzMzgsIDB4NDNBQiwgMHg2NzI4LCAweDQzQUMsIDB4NDNBQywgMHg1NjQ3LCAweDQzQUQsIDB4NDNCMCwgMHg2NzlDLA0KLSAgICAweDQzQjEsIDB4NDNCMSwgMHg1NjQ2LCAweDQzQjIsIDB4NDNEQywgMHg2N0EwLCAweDQzREQsIDB4NDNERCwgMHg1NjQ5LA0KLSAgICAweDQzREUsIDB4NDNGRiwgMHg2N0NCLCAweDQ0MDAsIDB4NDRENSwgMHg2N0VELCAweDQ0RDYsIDB4NDRENiwgMHg1NjRBLA0KLSAgICAweDQ0RDcsIDB4NDRGRiwgMHg2OEMzLCAweDQ1MDAsIDB4NDVGRiwgMHg2OEVDLCAweDQ2MDAsIDB4NDY0QiwgMHg2OUVDLA0KLSAgICAweDQ2NEMsIDB4NDY0QywgMHg1NjRDLCAweDQ2NEQsIDB4NDY2MCwgMHg2QTM4LCAweDQ2NjEsIDB4NDY2MSwgMHg1NjRCLA0KLSAgICAweDQ2NjIsIDB4NDZGRiwgMHg2QTRDLCAweDQ3MDAsIDB4NDcyMiwgMHg2QUVBLCAweDQ3MjMsIDB4NDcyMywgMHg1NjRFLA0KLSAgICAweDQ3MjQsIDB4NDcyOCwgMHg2QjBELCAweDQ3MjksIDB4NDcyOSwgMHg1NjRGLCAweDQ3MkEsIDB4NDc3QiwgMHg2QjEyLA0KLSAgICAweDQ3N0MsIDB4NDc3QywgMHg1NjUwLCAweDQ3N0QsIDB4NDc4QywgMHg2QjY0LCAweDQ3OEQsIDB4NDc4RCwgMHg1NjUxLA0KLSAgICAweDQ3OEUsIDB4NDdGRiwgMHg2Qjc0LCAweDQ4MDAsIDB4NDhGRiwgMHg2QkU2LCAweDQ5MDAsIDB4NDk0NiwgMHg2Q0U2LA0KLSAgICAweDQ5NDcsIDB4NDk0NywgMHg1NjUzLCAweDQ5NDgsIDB4NDk3OSwgMHg2RDJELCAweDQ5N0EsIDB4NDk3QSwgMHg1NjU0LA0KLSAgICAweDQ5N0IsIDB4NDk3QywgMHg2RDVGLCAweDQ5N0QsIDB4NDk3RCwgMHg1NjU1LCAweDQ5N0UsIDB4NDk4MSwgMHg2RDYxLA0KLSAgICAweDQ5ODIsIDB4NDk4MywgMHg1NjU2LCAweDQ5ODQsIDB4NDk4NCwgMHg2RDY1LCAweDQ5ODUsIDB4NDk4NiwgMHg1NjU4LA0KLSAgICAweDQ5ODcsIDB4NDk5QSwgMHg2RDY2LCAweDQ5OUIsIDB4NDk5QiwgMHg1NjVCLCAweDQ5OUMsIDB4NDk5RSwgMHg2RDdBLA0KLSAgICAweDQ5OUYsIDB4NDk5RiwgMHg1NjVBLCAweDQ5QTAsIDB4NDlCNSwgMHg2RDdELCAweDQ5QjYsIDB4NDlCNiwgMHg1NjVELA0KLSAgICAweDQ5QjcsIDB4NDlCNywgMHg1NjVDLCAweDQ5QjgsIDB4NDlGRiwgMHg2RDkzLCAweDRBMDAsIDB4NEFGRiwgMHg2RERCLA0KLSAgICAweDRCMDAsIDB4NEJGRiwgMHg2RURCLCAweDRDMDAsIDB4NEM3NiwgMHg2RkRCLCAweDRDNzcsIDB4NEM3NywgMHg1NjY0LA0KLSAgICAweDRDNzgsIDB4NEM5RSwgMHg3MDUyLCAweDRDOUYsIDB4NENBMSwgMHg1NjYxLCAweDRDQTIsIDB4NENBMiwgMHg1NjY1LA0KLSAgICAweDRDQTMsIDB4NENBMywgMHg1NjYwLCAweDRDQTQsIDB4NENGRiwgMHg3MDc5LCAweDREMDAsIDB4NEQxMiwgMHg3MEQ1LA0KLSAgICAweDREMTMsIDB4NEQxOSwgMHg1NjY2LCAweDREMUEsIDB4NERBRCwgMHg3MEU4LCAweDREQUUsIDB4NERBRSwgMHg1NjZELA0KLSAgICAweDREQUYsIDB4NERCNSwgMHg3MTdDLCAweDRFMDAsIDB4NEUwMCwgMHgxMDQyLCAweDRFMDEsIDB4NEUwMSwgMHgwNUUwLA0KLSAgICAweDRFMDIsIDB4NEUwMiwgMHgyNzU4LCAweDRFMDMsIDB4NEUwMywgMHgwQkZFLCAweDRFMDQsIDB4NEUwNiwgMHgyNzU5LA0KLSAgICAweDRFMDcsIDB4NEUwNywgMHgwRUEzLCAweDRFMDgsIDB4NEUwOCwgMHgxMTZBLCAweDRFMDksIDB4NEUwOSwgMHgwQ0Q4LA0KLSAgICAweDRFMEEsIDB4NEUwQSwgMHgwRDA4LCAweDRFMEIsIDB4NEUwQiwgMHgwRjJGLCAweDRFMEMsIDB4NEUwQywgMHgxMjU4LA0KLSAgICAweDRFMEQsIDB4NEUwRCwgMHgwNDgyLCAweDRFMEUsIDB4NEUwRSwgMHgxMEQwLCAweDRFMEYsIDB4NEUwRiwgMHgyNzVDLA0KLSAgICAweDRFMTAsIDB4NEUxMCwgMHgxMjVBLCAweDRFMTEsIDB4NEUxMSwgMHgwNTE4LCAweDRFMTIsIDB4NEUxMiwgMHgyNzVELA0KLSAgICAweDRFMTMsIDB4NEUxMywgMHgxMjA1LCAweDRFMTQsIDB4NEUxNCwgMHgwQzRGLCAweDRFMTUsIDB4NEUxNSwgMHgxMjVELA0KLSAgICAweDRFMTYsIDB4NEUxNiwgMHgwRDU3LCAweDRFMTcsIDB4NEUxNywgMHgyNzVFLCAweDRFMTgsIDB4NEUxOCwgMHgwQzZELA0KLSAgICAweDRFMTksIDB4NEUxOSwgMHgwNDY0LCAweDRFMUEsIDB4NEUxQSwgMHgxMDNDLCAweDRFMUIsIDB4NEUxQiwgMHgwNTU3LA0KLSAgICAweDRFMUMsIDB4NEUxQywgMHgwNUVBLCAweDRFMUQsIDB4NEUxRCwgMHgwREI0LCAweDRFMUUsIDB4NEUxRSwgMHgxMjVGLA0KLSAgICAweDRFMUYsIDB4NEUyMSwgMHgyNzVGLCAweDRFMjIsIDB4NEUyMiwgMHgwNUU5LCAweDRFMjMsIDB4NEUyMywgMHgyNzYyLA0KLSAgICAweDRFMjQsIDB4NEUyNCwgMHgwQTA2LCAweDRFMjUsIDB4NEUyNSwgMHgwRkY4LCAweDRFMjYsIDB4NEUyNiwgMHgyNzYzLA0KLSAgICAweDRFMjcsIDB4NEUyNywgMHgwQ0RFLCAweDRFMjgsIDB4NEUyOCwgMHgxMjYzLCAweDRFMjksIDB4NEUyOSwgMHgyNzY0LA0KLSAgICAweDRFMkEsIDB4NEUyQSwgMHgwNkYxLCAweDRFMkIsIDB4NEUyQiwgMHgwRkU3LCAweDRFMkMsIDB4NEUyQywgMHgxNjlDLA0KLSAgICAweDRFMkQsIDB4NEUyRCwgMHgxMUNGLCAweDRFMkUsIDB4NEUyRiwgMHgyNzY1LCAweDRFMzAsIDB4NEUzMCwgMHgwNjdFLA0KLSAgICAweDRFMzEsIDB4NEUzMSwgMHgyNzY3LCAweDRFMzIsIDB4NEUzMiwgMHgwNTMxLCAweDRFMzMsIDB4NEUzMywgMHgyNzY4LA0KLSAgICAweDRFMzQsIDB4NEUzNCwgMHgwQTIyLCAweDRFMzUsIDB4NEUzNSwgMHgyNzY5LCAweDRFMzYsIDB4NEUzNiwgMHgxMjcyLA0KLSAgICAweDRFMzcsIDB4NEUzNywgMHgyNzZBLCAweDRFMzgsIDB4NEUzOCwgMHgwRTk5LCAweDRFMzksIDB4NEUzOSwgMHgwNTg1LA0KLSAgICAweDRFM0EsIDB4NEUzQSwgMHgwRUI5LCAweDRFM0IsIDB4NEUzQiwgMHgxMUY2LCAweDRFM0MsIDB4NEUzQywgMHgyNzZCLA0KLSAgICAweDRFM0QsIDB4NEUzRCwgMHgwOUUxLCAweDRFM0UsIDB4NEUzRSwgMHgwOTA4LCAweDRFM0YsIDB4NEUzRiwgMHgxMjY1LA0KLSAgICAweDRFNDAsIDB4NEU0MiwgMHgyNzZDLCAweDRFNDMsIDB4NEU0MywgMHgwQjJFLCAweDRFNDQsIDB4NEU0NCwgMHgyNzZGLA0KLSAgICAweDRFNDUsIDB4NEU0NSwgMHgwOEYyLCAweDRFNDYsIDB4NEU0NiwgMHgyNzcwLCAweDRFNDcsIDB4NEU0NywgMHgxMjY3LA0KLSAgICAweDRFNDgsIDB4NEU0OCwgMHgwQUI5LCAweDRFNDksIDB4NEU0OSwgMHgxMDZDLCAweDRFNEEsIDB4NEU0QSwgMHgyNzcxLA0KLSAgICAweDRFNEIsIDB4NEU0QiwgMHgxMUFELCAweDRFNEMsIDB4NEU0QywgMHgwRUU5LCAweDRFNEQsIDB4NEU0RCwgMHgxMTQ4LA0KLSAgICAweDRFNEUsIDB4NEU0RSwgMHgwN0FDLCAweDRFNEYsIDB4NEU0RiwgMHgwNjQzLCAweDRFNTAsIDB4NEU1MCwgMHgwOUMxLA0KLSAgICAweDRFNTEsIDB4NEU1MSwgMHgyNzcyLCAweDRFNTIsIDB4NEU1MiwgMHgwQkQ4LCAweDRFNTMsIDB4NEU1MywgMHgwQjkzLA0KLSAgICAweDRFNTQsIDB4NEU1NCwgMHgwQzQ0LCAweDRFNTUsIDB4NEU1NSwgMHgyNzczLCAweDRFNTYsIDB4NEU1NiwgMHgwNzJELA0KLSAgICAweDRFNTcsIDB4NEU1NywgMHgyNzc0LCAweDRFNTgsIDB4NEU1OCwgMHgwNEYwLCAweDRFNTksIDB4NEU1OSwgMHgxMDU5LA0KLSAgICAweDRFNUEsIDB4NEU1QiwgMHgyNzc1LCAweDRFNUMsIDB4NEU1QywgMHgxMjc1LCAweDRFNUQsIDB4NEU1RCwgMHgwOEY0LA0KLSAgICAweDRFNUUsIDB4NEU1RSwgMHgwQzExLCAweDRFNUYsIDB4NEU1RiwgMHgxMDM5LCAweDRFNjAsIDB4NEU2MCwgMHgwRjFELA0KLSAgICAweDRFNjEsIDB4NEU2MSwgMHgwRjU0LCAweDRFNjIsIDB4NEU2NSwgMHgyNzc3LCAweDRFNjYsIDB4NEU2NiwgMHgwRDgwLA0KLSAgICAweDRFNjcsIDB4NEU2OCwgMHgyNzdCLCAweDRFNjksIDB4NEU2OSwgMHgxMjc2LCAweDRFNkEsIDB4NEU2RiwgMHgyNzdELA0KLSAgICAweDRFNzAsIDB4NEU3MCwgMHgwQTk5LCAweDRFNzEsIDB4NEU3MSwgMHgwQTc5LCAweDRFNzIsIDB4NEU3MiwgMHgyNzgzLA0KLSAgICAweDRFNzMsIDB4NEU3MywgMHgwQ0M0LCAweDRFNzQsIDB4NEU3RCwgMHgyNzg0LCAweDRFN0UsIDB4NEU3RSwgMHgwQzI5LA0KLSAgICAweDRFN0YsIDB4NEU4MSwgMHgyNzhFLCAweDRFODIsIDB4NEU4MiwgMHgyMDU5LCAweDRFODMsIDB4NEU4NSwgMHgyNzkxLA0KLSAgICAweDRFODYsIDB4NEU4NiwgMHgwQTE0LCAweDRFODcsIDB4NEU4NywgMHgyNzk0LCAweDRFODgsIDB4NEU4OCwgMHgxMENELA0KLSAgICAweDRFODksIDB4NEU4OSwgMHgxMTlBLCAweDRFOEEsIDB4NEU4QSwgMHgyNzk1LCAweDRFOEIsIDB4NEU4QiwgMHgwRDU5LA0KLSAgICAweDRFOEMsIDB4NEU4QywgMHgwNjNELCAweDRFOEQsIDB4NEU4RCwgMHgxMjU3LCAweDRFOEUsIDB4NEU4RSwgMHgxMEJGLA0KLSAgICAweDRFOEYsIDB4NEU4RiwgMHgwOTg0LCAweDRFOTAsIDB4NEU5MCwgMHgyNzk2LCAweDRFOTEsIDB4NEU5MSwgMHgxMTA5LA0KLSAgICAweDRFOTIsIDB4NEU5MiwgMHgwN0JBLCAweDRFOTMsIDB4NEU5MywgMHgxMjc3LCAweDRFOTQsIDB4NEU5NCwgMHgwRUY0LA0KLSAgICAweDRFOTUsIDB4NEU5NSwgMHgwOERELCAweDRFOTYsIDB4NEU5NywgMHgyNzk3LCAweDRFOTgsIDB4NEU5OCwgMHgxMjVFLA0KLSAgICAweDRFOTksIDB4NEU5OSwgMHgyNzk5LCAweDRFOUEsIDB4NEU5QSwgMHgwRkYwLCAweDRFOUIsIDB4NEU5QiwgMHgwRjc0LA0KLSAgICAweDRFOUMsIDB4NEU5RCwgMHgyNzlBLCAweDRFOUUsIDB4NEU5RSwgMHgyMUYxLCAweDRFOUYsIDB4NEU5RiwgMHgxMjczLA0KLSAgICAweDRFQTAsIDB4NEVBMCwgMHgxMzAzLCAweDRFQTEsIDB4NEVBMSwgMHgwRUE3LCAweDRFQTIsIDB4NEVBMiwgMHgwOTQ3LA0KLSAgICAweDRFQTMsIDB4NEVBMywgMHgyNzlDLCAweDRFQTQsIDB4NEVBNCwgMHgwODhDLCAweDRFQTUsIDB4NEVBNSwgMHgwNzVDLA0KLSAgICAweDRFQTYsIDB4NEVBNiwgMHgxMDY3LCAweDRFQTcsIDB4NEVBNywgMHgwNEMxLCAweDRFQTgsIDB4NEVBOCwgMHgwNzk3LA0KLSAgICAweDRFQTksIDB4NEVBOSwgMHgwQjE5LCAweDRFQUEsIDB4NEVBQSwgMHgyNzlELCAweDRFQUIsIDB4NEVBQiwgMHgwRjVBLA0KLSAgICAweDRFQUMsIDB4NEVBQywgMHgwOEQ4LCAweDRFQUQsIDB4NEVBRCwgMHgwRTU1LCAweDRFQUUsIDB4NEVBRSwgMHgwQTBBLA0KLSAgICAweDRFQUYsIDB4NEVCMSwgMHgyNzlFLCAweDRFQjIsIDB4NEVCMiwgMHgwQzU0LCAweDRFQjMsIDB4NEVCMywgMHgxMzA1LA0KLSAgICAweDRFQjQsIDB4NEVCNCwgMHgyN0ExLCAweDRFQjUsIDB4NEVCNSwgMHgxMzA4LCAweDRFQjYsIDB4NEVCOSwgMHgyN0EyLA0KLSAgICAweDRFQkEsIDB4NEVCQSwgMHgwQ0E2LCAweDRFQkIsIDB4NEVCQiwgMHgxMjlGLCAweDRFQkMsIDB4NEVCRSwgMHgyN0E2LA0KLSAgICAweDRFQkYsIDB4NEVCRiwgMHgxMDYxLCAweDRFQzAsIDB4NEVDMCwgMHgwRDQ5LCAweDRFQzEsIDB4NEVDMSwgMHgwQ0E1LA0KLSAgICAweDRFQzIsIDB4NEVDMiwgMHgxMkEyLCAweDRFQzMsIDB4NEVDMywgMHgxMkEwLCAweDRFQzQsIDB4NEVDNCwgMHgxMjdDLA0KLSAgICAweDRFQzUsIDB4NEVDNSwgMHgwOEM3LCAweDRFQzYsIDB4NEVDNiwgMHgwQkVDLCAweDRFQzcsIDB4NEVDNywgMHgwNTE1LA0KLSAgICAweDRFQzgsIDB4NEVDOCwgMHgyN0E5LCAweDRFQzksIDB4NEVDOSwgMHgxMkExLCAweDRFQ0EsIDB4NEVDQSwgMHgwOEMyLA0KLSAgICAweDRFQ0IsIDB4NEVDQiwgMHgwOEJBLCAweDRFQ0MsIDB4NEVDQywgMHgyN0FBLCAweDRFQ0QsIDB4NEVDRCwgMHgwQ0FGLA0KLSAgICAweDRFQ0UsIDB4NEVDRSwgMHgwNTU2LCAweDRFQ0YsIDB4NEVEMCwgMHgyN0FCLCAweDRFRDEsIDB4NEVEMSwgMHgwQTdGLA0KLSAgICAweDRFRDIsIDB4NEVEMiwgMHgyN0FELCAweDRFRDMsIDB4NEVEMywgMHgwNDlELCAweDRFRDQsIDB4NEVENCwgMHgxMjJELA0KLSAgICAweDRFRDUsIDB4NEVENSwgMHgwRDYyLCAweDRFRDYsIDB4NEVENiwgMHgwREYwLCAweDRFRDcsIDB4NEVENywgMHgxMTZELA0KLSAgICAweDRFRDgsIDB4NEVEOCwgMHgwNkIxLCAweDRFRDksIDB4NEVEOSwgMHgwRjM2LCAweDRFREEsIDB4NEVEQywgMHgyN0FFLA0KLSAgICAweDRFREQsIDB4NEVERCwgMHgxMkVFLCAweDRFREUsIDB4NEVERSwgMHgxMkE2LCAweDRFREYsIDB4NEVERiwgMHgwQzI3LA0KLSAgICAweDRFRTAsIDB4NEVFMCwgMHgyN0IxLCAweDRFRTEsIDB4NEVFMSwgMHgxMkE0LCAweDRFRTIsIDB4NEVFMiwgMHgyN0IyLA0KLSAgICAweDRFRTMsIDB4NEVFMywgMHgwNTdELCAweDRFRTQsIDB4NEVFNCwgMHgwQTM3LCAweDRFRTUsIDB4NEVFNSwgMHgxMDVCLA0KLSAgICAweDRFRTYsIDB4NEVFNywgMHgyN0IzLCAweDRFRTgsIDB4NEVFOCwgMHgxMkEzLCAweDRFRTksIDB4NEVFOSwgMHgyN0I1LA0KLSAgICAweDRFRUEsIDB4NEVFQSwgMHgxMDRFLCAweDRFRUIsIDB4NEVFQiwgMHgxMkE1LCAweDRFRUMsIDB4NEVFQywgMHgwQUNDLA0KLSAgICAweDRFRUQsIDB4NEVFRiwgMHgyN0I2LCAweDRFRjAsIDB4NEVGMCwgMHgxMDFGLCAweDRFRjEsIDB4NEVGMSwgMHgyN0I5LA0KLSAgICAweDRFRjIsIDB4NEVGMiwgMHgxMUQ4LCAweDRFRjMsIDB4NEVGMywgMHgxMkE4LCAweDRFRjQsIDB4NEVGNCwgMHgyN0JBLA0KLSAgICAweDRFRjUsIDB4NEVGNSwgMHgxMkFCLCAweDRFRjYsIDB4NEVGNiwgMHgwODcxLCAweDRFRjcsIDB4NEVGNywgMHgwODRFLA0KLSAgICAweDRFRjgsIDB4NEVGQSwgMHgyN0JCLCAweDRFRkIsIDB4NEVGQiwgMHgwQ0E5LCAweDRFRkMsIDB4NEVGQywgMHgyN0JFLA0KLSAgICAweDRFRkQsIDB4NEVGRCwgMHgwNjdBLCAweDRFRkUsIDB4NEVGRSwgMHgyN0JGLCAweDRFRkYsIDB4NEVGRiwgMHgwNjVGLA0KLSAgICAweDRGMDAsIDB4NEYwMCwgMHgyN0MwLCAweDRGMDEsIDB4NEYwMSwgMHgwQzEyLCAweDRGMDIsIDB4NEYwOCwgMHgyN0MxLA0KLSAgICAweDRGMDksIDB4NEYwOSwgMHgxMkFFLCAweDRGMEEsIDB4NEYwQSwgMHgxMDQ4LCAweDRGMEIsIDB4NEYwQywgMHgyN0M4LA0KLSAgICAweDRGMEQsIDB4NEYwRCwgMHgwRUY4LCAweDRGMEUsIDB4NEYwRSwgMHgwODMyLCAweDRGMEYsIDB4NEYwRiwgMHgwNjk5LA0KLSAgICAweDRGMTAsIDB4NEYxMCwgMHgwNjQyLCAweDRGMTEsIDB4NEYxMSwgMHgwRkE4LCAweDRGMTIsIDB4NEYxNiwgMHgyN0NBLA0KLSAgICAweDRGMTcsIDB4NEYxNywgMHgxMUQ5LCAweDRGMTgsIDB4NEYxOCwgMHgxMEFBLCAweDRGMTksIDB4NEYxOSwgMHgwODA0LA0KLSAgICAweDRGMUEsIDB4NEYxQSwgMHgwN0Y2LCAweDRGMUIsIDB4NEYxQiwgMHgxMkE3LCAweDRGMUMsIDB4NEYxRCwgMHgyN0NGLA0KLSAgICAweDRGMUUsIDB4NEYxRSwgMHgwQ0RBLCAweDRGMUYsIDB4NEYxRiwgMHgwRUJGLCAweDRGMjAsIDB4NEYyMCwgMHgwNTJFLA0KLSAgICAweDRGMjEsIDB4NEYyMSwgMHgyN0QxLCAweDRGMjIsIDB4NEYyMiwgMHgxMkE5LCAweDRGMjMsIDB4NEYyMywgMHgyN0QyLA0KLSAgICAweDRGMjQsIDB4NEYyNCwgMHgwRDA0LCAweDRGMjUsIDB4NEYyNSwgMHgxMkFDLCAweDRGMjYsIDB4NEYyNiwgMHgwQTdFLA0KLSAgICAweDRGMjcsIDB4NEYyNywgMHgxMkFELCAweDRGMjgsIDB4NEYyOSwgMHgyN0QzLCAweDRGMkEsIDB4NEYyQSwgMHgwRUMwLA0KLSAgICAweDRGMkIsIDB4NEYyQiwgMHgxMkFGLCAweDRGMkMsIDB4NEYyRSwgMHgyN0Q1LCAweDRGMkYsIDB4NEYyRiwgMHgwNDc1LA0KLSAgICAweDRGMzAsIDB4NEYzMCwgMHgwNzE5LCAweDRGMzEsIDB4NEYzMSwgMHgyN0Q4LCAweDRGMzIsIDB4NEYzMiwgMHgxMkI3LA0KLSAgICAweDRGMzMsIDB4NEYzMywgMHgyN0Q5LCAweDRGMzQsIDB4NEYzNCwgMHgwM0Y0LCAweDRGMzUsIDB4NEYzNSwgMHgyN0RBLA0KLSAgICAweDRGMzYsIDB4NEYzNiwgMHgwQTJGLCAweDRGMzcsIDB4NEYzNywgMHgyN0RCLCAweDRGMzgsIDB4NEYzOCwgMHgwRDI1LA0KLSAgICAweDRGMzksIDB4NEYzOSwgMHgyN0RDLCAweDRGM0EsIDB4NEYzQSwgMHgwREJBLCAweDRGM0IsIDB4NEYzQiwgMHgyN0RELA0KLSAgICAweDRGM0MsIDB4NEYzQywgMHgwREJCLCAweDRGM0QsIDB4NEYzRCwgMHgxMkI4LCAweDRGM0UsIDB4NEY0MiwgMHgyN0RFLA0KLSAgICAweDRGNDMsIDB4NEY0MywgMHgwNUM5LCAweDRGNDQsIDB4NEY0NSwgMHgyN0UzLCAweDRGNDYsIDB4NEY0NiwgMHgwNThDLA0KLSAgICAweDRGNDcsIDB4NEY0QywgMHgyN0U1LCAweDRGNEQsIDB4NEY0RCwgMHgwRUNBLCAweDRGNEUsIDB4NEY0RSwgMHgwNUFFLA0KLSAgICAweDRGNEYsIDB4NEY0RiwgMHgxMUZFLCAweDRGNTAsIDB4NEY1MCwgMHgxMjUxLCAweDRGNTEsIDB4NEY1MSwgMHgxMEI4LA0KLSAgICAweDRGNTIsIDB4NEY1MiwgMHgyN0VCLCAweDRGNTMsIDB4NEY1MywgMHgwRTM4LCAweDRGNTQsIDB4NEY1NCwgMHgyN0VDLA0KLSAgICAweDRGNTUsIDB4NEY1NSwgMHgwNzg1LCAweDRGNTYsIDB4NEY1NiwgMHgyN0VELCAweDRGNTcsIDB4NEY1NywgMHgxMkI2LA0KLSAgICAweDRGNTgsIDB4NEY1OCwgMHgxMkYwLCAweDRGNTksIDB4NEY1OSwgMHgxMEM1LCAweDRGNUEsIDB4NEY1QSwgMHgxMkIzLA0KLSAgICAweDRGNUIsIDB4NEY1QiwgMHgwNjhELCAweDRGNUMsIDB4NEY1QywgMHgxMjU0LCAweDRGNUQsIDB4NEY1RCwgMHgxMkI0LA0KLSAgICAweDRGNUUsIDB4NEY1RSwgMHgxMkIwLCAweDRGNUYsIDB4NEY1RiwgMHgxMkI1LCAweDRGNjAsIDB4NEY2MCwgMHgwQjQ2LA0KLSAgICAweDRGNjEsIDB4NEY2MiwgMHgyN0VFLCAweDRGNjMsIDB4NEY2MywgMHgxMDlCLCAweDRGNjQsIDB4NEY2NCwgMHgxMkFBLA0KLSAgICAweDRGNjUsIDB4NEY2NSwgMHgxMkYxLCAweDRGNjYsIDB4NEY2NiwgMHgyN0YwLCAweDRGNjcsIDB4NEY2NywgMHgxMkIxLA0KLSAgICAweDRGNjgsIDB4NEY2OCwgMHgyN0YxLCAweDRGNjksIDB4NEY2OSwgMHgwQkE2LCAweDRGNkEsIDB4NEY2QiwgMHgyN0YyLA0KLSAgICAweDRGNkMsIDB4NEY2QywgMHgwOUJCLCAweDRGNkQsIDB4NEY2RSwgMHgyN0Y0LCAweDRGNkYsIDB4NEY2RiwgMHgxMDE5LA0KLSAgICAweDRGNzAsIDB4NEY3MCwgMHgwM0U2LCAweDRGNzEsIDB4NEY3MiwgMHgyN0Y2LCAweDRGNzMsIDB4NEY3MywgMHgwODQ0LA0KLSAgICAweDRGNzQsIDB4NEY3NCwgMHgxMkJBLCAweDRGNzUsIDB4NEY3NSwgMHgyN0Y4LCAweDRGNzYsIDB4NEY3NiwgMHgxMkI5LA0KLSAgICAweDRGNzcsIDB4NEY3QSwgMHgyN0Y5LCAweDRGN0IsIDB4NEY3QiwgMHgxMkMwLCAweDRGN0MsIDB4NEY3QywgMHgxMkMyLA0KLSAgICAweDRGN0QsIDB4NEY3RCwgMHgyN0ZELCAweDRGN0UsIDB4NEY3RSwgMHgxMkJGLCAweDRGN0YsIDB4NEY3RiwgMHgwRDUwLA0KLSAgICAweDRGODAsIDB4NEY4MiwgMHgyN0ZFLCAweDRGODMsIDB4NEY4MywgMHgxMkJELCAweDRGODQsIDB4NEY4NCwgMHgxMUI1LA0KLSAgICAweDRGODUsIDB4NEY4NSwgMHgyODAxLCAweDRGODYsIDB4NEY4NiwgMHgxRkYyLCAweDRGODcsIDB4NEY4NywgMHgyODAyLA0KLSAgICAweDRGODgsIDB4NEY4OCwgMHgwNTAzLCAweDRGODksIDB4NEY4OSwgMHgxMkJDLCAweDRGOEEsIDB4NEY4QSwgMHgyODAzLA0KLSAgICAweDRGOEIsIDB4NEY4QiwgMHgwOUU4LCAweDRGOEMsIDB4NEY4QywgMHgyODA0LCAweDRGOEQsIDB4NEY4RCwgMHgwRDYzLA0KLSAgICAweDRGOEUsIDB4NEY4RSwgMHgyODA1LCAweDRGOEYsIDB4NEY4RiwgMHgxMkJFLCAweDRGOTAsIDB4NEY5MCwgMHgyODA2LA0KLSAgICAweDRGOTEsIDB4NEY5MSwgMHgxMkJCLCAweDRGOTIsIDB4NEY5MywgMHgyODA3LCAweDRGOTQsIDB4NEY5NCwgMHgxMkM0LA0KLSAgICAweDRGOTUsIDB4NEY5NSwgMHgyODA5LCAweDRGOTYsIDB4NEY5NiwgMHgyMDVELCAweDRGOTcsIDB4NEY5NywgMHgwNUYwLA0KLSAgICAweDRGOTgsIDB4NEY5QSwgMHgyODBBLCAweDRGOUIsIDB4NEY5QiwgMHgwNzAyLCAweDRGOUMsIDB4NEY5QywgMHgyODBELA0KLSAgICAweDRGOUQsIDB4NEY5RCwgMHgxMDQ3LCAweDRGOUUsIDB4NEY5RiwgMHgyODBFLCAweDRGQTAsIDB4NEZBMCwgMHgwRjJELA0KLSAgICAweDRGQTEsIDB4NEZBMiwgMHgyODEwLCAweDRGQTMsIDB4NEZBMywgMHgwQTY5LCAweDRGQTQsIDB4NEZBNCwgMHgyODEyLA0KLSAgICAweDRGQTUsIDB4NEZBNSwgMHgwODk1LCAweDRGQTYsIDB4NEZBNiwgMHgxMThELCAweDRGQTcsIDB4NEZBNywgMHgwNEE3LA0KLSAgICAweDRGQTgsIDB4NEZBOCwgMHgwQzQ1LCAweDRGQTksIDB4NEZBOSwgMHgwOTc4LCAweDRGQUEsIDB4NEZBQSwgMHgxMkMxLA0KLSAgICAweDRGQUIsIDB4NEZBQiwgMHgyODEzLCAweDRGQUMsIDB4NEZBQywgMHgxMkMzLCAweDRGQUQsIDB4NEZBRCwgMHgyODE0LA0KLSAgICAweDRGQUUsIDB4NEZBRSwgMHgwRUY5LCAweDRGQUYsIDB4NEZBRiwgMHgwN0E1LCAweDRGQjAsIDB4NEZCNCwgMHgyODE1LA0KLSAgICAweDRGQjUsIDB4NEZCNSwgMHgwQzUzLCAweDRGQjYsIDB4NEZCRSwgMHgyODFBLCAweDRGQkYsIDB4NEZCRiwgMHgwNDRDLA0KLSAgICAweDRGQzAsIDB4NEZDMSwgMHgyODIzLCAweDRGQzIsIDB4NEZDMiwgMHgyNjlDLCAweDRGQzMsIDB4NEZDMywgMHgwNTVDLA0KLSAgICAweDRGQzQsIDB4NEZDNCwgMHgwNjJDLCAweDRGQzUsIDB4NEZDNSwgMHgxMkM4LCAweDRGQzYsIDB4NEZDOSwgMHgyODI1LA0KLSAgICAweDRGQ0EsIDB4NEZDQSwgMHgwOTJFLCAweDRGQ0IsIDB4NEZDRCwgMHgyODI5LCAweDRGQ0UsIDB4NEZDRSwgMHgxMkYyLA0KLSAgICAweDRGQ0YsIDB4NEZDRiwgMHgwQzRCLCAweDRGRDAsIDB4NEZEMCwgMHgwOUU5LCAweDRGRDEsIDB4NEZEMSwgMHgxMkNDLA0KLSAgICAweDRGRDIsIDB4NEZENiwgMHgyODJDLCAweDRGRDcsIDB4NEZENywgMHgwRENDLCAweDRGRDgsIDB4NEZEOCwgMHgwNjlBLA0KLSAgICAweDRGRDksIDB4NEZEOSwgMHgyODMxLCAweDRGREEsIDB4NEZEQSwgMHgxMkM5LCAweDRGREIsIDB4NEZEQiwgMHgyODMyLA0KLSAgICAweDRGREMsIDB4NEZEQywgMHgxMkNCLCAweDRGREQsIDB4NEZERCwgMHgwNDBDLCAweDRGREUsIDB4NEZERSwgMHgxMEM2LA0KLSAgICAweDRGREYsIDB4NEZERiwgMHgxMkNELCAweDRGRTAsIDB4NEZFMCwgMHgyMUI1LCAweDRGRTEsIDB4NEZFMSwgMHgwRjkwLA0KLSAgICAweDRGRTIsIDB4NEZFMiwgMHgyODMzLCAweDRGRTMsIDB4NEZFMywgMHgxMkNBLCAweDRGRTQsIDB4NEZFNSwgMHgyODM0LA0KLSAgICAweDRGRTYsIDB4NEZFNiwgMHgxMkM1LCAweDRGRTcsIDB4NEZFNywgMHgyODM2LCAweDRGRTgsIDB4NEZFOCwgMHgxMkM2LA0KLSAgICAweDRGRTksIDB4NEZFOSwgMHgwOUYyLCAweDRGRUEsIDB4NEZFQSwgMHgxMkM3LCAweDRGRUIsIDB4NEZFQywgMHgyODM3LA0KLSAgICAweDRGRUQsIDB4NEZFRCwgMHgwODY2LCAweDRGRUUsIDB4NEZFRSwgMHgwRkE5LCAweDRGRUYsIDB4NEZFRiwgMHgwNkE0LA0KLSAgICAweDRGRjAsIDB4NEZGMCwgMHgyODM5LCAweDRGRjEsIDB4NEZGMSwgMHgwOTEyLCAweDRGRjIsIDB4NEZGMiwgMHgyODNBLA0KLSAgICAweDRGRjMsIDB4NEZGMywgMHgxMkQxLCAweDRGRjQsIDB4NEZGNywgMHgyODNCLCAweDRGRjgsIDB4NEZGOCwgMHgxMkNFLA0KLSAgICAweDRGRjksIDB4NEZGOSwgMHgyODNGLCAweDRGRkEsIDB4NEZGQSwgMHgwM0JFLCAweDRGRkIsIDB4NEZGRCwgMHgyODQwLA0KLSAgICAweDRGRkUsIDB4NEZGRSwgMHgxMkQ2LCAweDRGRkYsIDB4NEZGRiwgMHgyODQzLCAweDUwMDAsIDB4NTAwMCwgMHgyMkNDLA0KLSAgICAweDUwMDEsIDB4NTAwNSwgMHgyODQ0LCAweDUwMDYsIDB4NTAwNiwgMHgyMDE2LCAweDUwMDcsIDB4NTAwOCwgMHgyODQ5LA0KLSAgICAweDUwMDksIDB4NTAwOSwgMHgxRTYyLCAweDUwMEEsIDB4NTAwQSwgMHgyODRCLCAweDUwMEIsIDB4NTAwQiwgMHgxRjIwLA0KLSAgICAweDUwMEMsIDB4NTAwQywgMHgxMkQ4LCAweDUwMEQsIDB4NTAwRCwgMHgwNDFGLCAweDUwMEUsIDB4NTAwRSwgMHgyODRDLA0KLSAgICAweDUwMEYsIDB4NTAwRiwgMHgxMkQzLCAweDUwMTAsIDB4NTAxMCwgMHgyODRELCAweDUwMTEsIDB4NTAxMSwgMHgyMDdGLA0KLSAgICAweDUwMTIsIDB4NTAxMiwgMHgwNTlBLCAweDUwMTMsIDB4NTAxMywgMHgyODRFLCAweDUwMTQsIDB4NTAxNCwgMHgwOTIyLA0KLSAgICAweDUwMTUsIDB4NTAxNywgMHgyODRGLCAweDUwMTgsIDB4NTAxOCwgMHgwRTFCLCAweDUwMTksIDB4NTAxOSwgMHgwN0E5LA0KLSAgICAweDUwMUEsIDB4NTAxQSwgMHgxMDU3LCAweDUwMUIsIDB4NTAxQiwgMHgyODUyLCAweDUwMUMsIDB4NTAxQywgMHgxMkQ3LA0KLSAgICAweDUwMUQsIDB4NTAxRSwgMHgyODUzLCAweDUwMUYsIDB4NTAxRiwgMHgwOEI5LCAweDUwMjAsIDB4NTAyMCwgMHgyODU1LA0KLSAgICAweDUwMjEsIDB4NTAyMSwgMHgwNEQwLCAweDUwMjIsIDB4NTAyNCwgMHgyODU2LCAweDUwMjUsIDB4NTAyNSwgMHgxMkQ5LA0KLSAgICAweDUwMjYsIDB4NTAyNiwgMHgwOTFBLCAweDUwMjcsIDB4NTAyNywgMHgyODU5LCAweDUwMjgsIDB4NTAyOCwgMHgxMkRBLA0KLSAgICAweDUwMjksIDB4NTAyOSwgMHgxMkNGLCAweDUwMkEsIDB4NTAyQSwgMHgwQjQyLCAweDUwMkIsIDB4NTAyQiwgMHgyMDVDLA0KLSAgICAweDUwMkMsIDB4NTAyQywgMHgxMkQyLCAweDUwMkQsIDB4NTAyRCwgMHgxMkQ1LCAweDUwMkUsIDB4NTAyRSwgMHgxMkQ0LA0KLSAgICAweDUwMkYsIDB4NTAzOSwgMHgyODVBLCAweDUwM0EsIDB4NTAzQSwgMHgxMTRGLCAweDUwM0IsIDB4NTAzQiwgMHgyODY1LA0KLSAgICAweDUwM0MsIDB4NTAzQywgMHgxMUI0LCAweDUwM0QsIDB4NTAzRCwgMHgyODY2LCAweDUwM0UsIDB4NTAzRSwgMHgwQzYwLA0KLSAgICAweDUwM0YsIDB4NTA0MiwgMHgyODY3LCAweDUwNDMsIDB4NTA0MywgMHgxMkRDLCAweDUwNDQsIDB4NTA0NiwgMHgyODZCLA0KLSAgICAweDUwNDcsIDB4NTA0NywgMHgwODRDLCAweDUwNDgsIDB4NTA0OCwgMHgxMkRFLCAweDUwNDksIDB4NTA0OSwgMHgyMTk0LA0KLSAgICAweDUwNEEsIDB4NTA0QiwgMHgyODZFLCAweDUwNEMsIDB4NTA0QywgMHgxMkQwLCAweDUwNEQsIDB4NTA0RCwgMHgyODcwLA0KLSAgICAweDUwNEUsIDB4NTA0RSwgMHgxMkRGLCAweDUwNEYsIDB4NTA0RiwgMHgwQkNBLCAweDUwNTAsIDB4NTA1NCwgMHgyODcxLA0KLSAgICAweDUwNTUsIDB4NTA1NSwgMHgxMkRELCAweDUwNTYsIDB4NTA1OSwgMHgyODc2LCAweDUwNUEsIDB4NTA1QSwgMHgxMjUzLA0KLSAgICAweDUwNUIsIDB4NTA1QiwgMHgyODdBLCAweDUwNUMsIDB4NTA1QywgMHgwRTU0LCAweDUwNUQsIDB4NTA2NCwgMHgyODdCLA0KLSAgICAweDUwNjUsIDB4NTA2NSwgMHgwODcyLCAweDUwNjYsIDB4NTA2QiwgMHgyODgzLCAweDUwNkMsIDB4NTA2QywgMHgxMkUwLA0KLSAgICAweDUwNkQsIDB4NTA3MywgMHgyODg5LCAweDUwNzQsIDB4NTA3NCwgMHgxRTY1LCAweDUwNzUsIDB4NTA3NSwgMHgyMjgxLA0KLSAgICAweDUwNzYsIDB4NTA3NiwgMHgwQjdELCAweDUwNzcsIDB4NTA3NywgMHgwRTY2LCAweDUwNzgsIDB4NTA3QSwgMHgyODkwLA0KLSAgICAweDUwN0IsIDB4NTA3QiwgMHgxMkUxLCAweDUwN0MsIDB4NTA3RCwgMHgyODkzLCAweDUwN0UsIDB4NTA3RSwgMHgxMkRCLA0KLSAgICAweDUwN0YsIDB4NTA3RiwgMHgwNENBLCAweDUwODAsIDB4NTA4MCwgMHgwOThCLCAweDUwODEsIDB4NTA4NCwgMHgyODk1LA0KLSAgICAweDUwODUsIDB4NTA4NSwgMHgwNkIwLCAweDUwODYsIDB4NTA4NywgMHgyODk5LCAweDUwODgsIDB4NTA4OCwgMHgwOUU3LA0KLSAgICAweDUwODksIDB4NTA4QywgMHgyODlCLCAweDUwOEQsIDB4NTA4RCwgMHgwNDAzLCAweDUwOEUsIDB4NTA5NSwgMHgyODlGLA0KLSAgICAweDUwOTYsIDB4NTA5NiwgMHgyMkNELCAweDUwOTcsIDB4NTA5NywgMHgyOEE3LCAweDUwOTgsIDB4NTA5OCwgMHgyMTBBLA0KLSAgICAweDUwOTksIDB4NTA5OSwgMHgxRTNFLCAweDUwOUEsIDB4NTBBMSwgMHgyOEE4LCAweDUwQTIsIDB4NTBBMiwgMHgyNjdGLA0KLSAgICAweDUwQTMsIDB4NTBBMywgMHgwNTc5LCAweDUwQTQsIDB4NTBBNCwgMHgyOEIwLCAweDUwQTUsIDB4NTBBNSwgMHgxMkUyLA0KLSAgICAweDUwQTYsIDB4NTBBNiwgMHgyOEIxLCAweDUwQTcsIDB4NTBBNywgMHgxMkUzLCAweDUwQTgsIDB4NTBBOCwgMHgwNTI1LA0KLSAgICAweDUwQTksIDB4NTBBOSwgMHgxMkU0LCAweDUwQUEsIDB4NTBBQiwgMHgyOEIyLCAweDUwQUMsIDB4NTBBQywgMHgwNTYyLA0KLSAgICAweDUwQUQsIDB4NTBBRCwgMHgyMjJFLCAweDUwQUUsIDB4NTBCMSwgMHgyOEI0LCAweDUwQjIsIDB4NTBCMiwgMHgwM0NDLA0KLSAgICAweDUwQjMsIDB4NTBCMywgMHgxRTk2LCAweDUwQjQsIDB4NTBCNCwgMHgyMkNCLCAweDUwQjUsIDB4NTBCNSwgMHgyMjZDLA0KLSAgICAweDUwQjYsIDB4NTBCNiwgMHgyOEI4LCAweDUwQjcsIDB4NTBCNywgMHgyMTE3LCAweDUwQjgsIDB4NTBCOSwgMHgyOEI5LA0KLSAgICAweDUwQkEsIDB4NTBCQSwgMHgxMkU1LCAweDUwQkIsIDB4NTBCQiwgMHgwQ0VFLCAweDUwQkMsIDB4NTBCRCwgMHgyOEJCLA0KLSAgICAweDUwQkUsIDB4NTBCRSwgMHgyMEU4LCAweDUwQkYsIDB4NTBDMSwgMHgyOEJELCAweDUwQzIsIDB4NTBDMiwgMHgyMkQ0LA0KLSAgICAweDUwQzMsIDB4NTBDNCwgMHgyOEMwLCAweDUwQzUsIDB4NTBDNSwgMHgxRkI5LCAweDUwQzYsIDB4NTBDOCwgMHgyOEMyLA0KLSAgICAweDUwQzksIDB4NTBDOSwgMHgyMkQ4LCAweDUwQ0EsIDB4NTBDRSwgMHgyOEM1LCAweDUwQ0YsIDB4NTBDRiwgMHgwRjVFLA0KLSAgICAweDUwRDAsIDB4NTBEMCwgMHgyOENBLCAweDUwRDEsIDB4NTBEMSwgMHgyMERGLCAweDUwRDIsIDB4NTBENCwgMHgyOENCLA0KLSAgICAweDUwRDUsIDB4NTBENSwgMHgyMEMyLCAweDUwRDYsIDB4NTBENiwgMHgxMkU2LCAweDUwRDcsIDB4NTBEOSwgMHgyOENFLA0KLSAgICAweDUwREEsIDB4NTBEQSwgMHgwQTBFLCAweDUwREIsIDB4NTBERCwgMHgyOEQxLCAweDUwREUsIDB4NTBERSwgMHgyMTk1LA0KLSAgICAweDUwREYsIDB4NTBFNCwgMHgyOEQ0LCAweDUwRTUsIDB4NTBFNSwgMHgxRkFDLCAweDUwRTYsIDB4NTBFNiwgMHgxMkVBLA0KLSAgICAweDUwRTcsIDB4NTBFNywgMHgwQ0U3LCAweDUwRTgsIDB4NTBFOCwgMHgyMkQzLCAweDUwRTksIDB4NTBFQiwgMHgyOERBLA0KLSAgICAweDUwRUMsIDB4NTBFQywgMHgxMkU5LCAweDUwRUQsIDB4NTBFRCwgMHgxMkU4LCAweDUwRUUsIDB4NTBFRSwgMHgxMkVCLA0KLSAgICAweDUwRUYsIDB4NTBGMiwgMHgyOERELCAweDUwRjMsIDB4NTBGMywgMHgwREQwLCAweDUwRjQsIDB4NTBGNCwgMHgyOEUxLA0KLSAgICAweDUwRjUsIDB4NTBGNSwgMHgwODdBLCAweDUwRjYsIDB4NTBGOCwgMHgyOEUyLCAweDUwRjksIDB4NTBGOSwgMHgxRjgxLA0KLSAgICAweDUwRkEsIDB4NTBGQSwgMHgyOEU1LCAweDUwRkIsIDB4NTBGQiwgMHgwQkM2LCAweDUwRkMsIDB4NTBGRiwgMHgyOEU2LA0KLSAgICAweDUxMDAsIDB4NTEwMCwgMHgyMjEwLCAweDUxMDEsIDB4NTEwMSwgMHgyOEVBLCAweDUxMDIsIDB4NTEwMiwgMHgyMkNGLA0KLSAgICAweDUxMDMsIDB4NTEwMywgMHgyOEVCLCAweDUxMDQsIDB4NTEwNCwgMHgyMjEzLCAweDUxMDUsIDB4NTEwNSwgMHgyOEVDLA0KLSAgICAweDUxMDYsIDB4NTEwNiwgMHgxMkU3LCAweDUxMDcsIDB4NTEwNywgMHgxMkVDLCAweDUxMDgsIDB4NTEwOCwgMHgxRkU0LA0KLSAgICAweDUxMDksIDB4NTEwOSwgMHgxRjkwLCAweDUxMEEsIDB4NTEwQSwgMHgyOEVELCAweDUxMEIsIDB4NTEwQiwgMHgxMkVELA0KLSAgICAweDUxMEMsIDB4NTEwRiwgMHgyOEVFLCAweDUxMTAsIDB4NTExMCwgMHgyMkQ2LCAweDUxMTEsIDB4NTExMSwgMHgyOEYyLA0KLSAgICAweDUxMTIsIDB4NTExMiwgMHgwQ0MwLCAweDUxMTMsIDB4NTExMywgMHgyOEYzLCAweDUxMTQsIDB4NTExNCwgMHgyMkQwLA0KLSAgICAweDUxMTUsIDB4NTExNSwgMHgyMkNFLCAweDUxMTYsIDB4NTExNywgMHgyOEY0LCAweDUxMTgsIDB4NTExOCwgMHgyNjgxLA0KLSAgICAweDUxMTksIDB4NTExRSwgMHgyOEY2LCAweDUxMUYsIDB4NTExRiwgMHgxRTc2LCAweDUxMjAsIDB4NTEyMCwgMHgyOEZDLA0KLSAgICAweDUxMjEsIDB4NTEyMSwgMHgwOUM3LCAweDUxMjIsIDB4NTEyOSwgMHgyOEZELCAweDUxMkEsIDB4NTEyQSwgMHgyMjMxLA0KLSAgICAweDUxMkIsIDB4NTEzMSwgMHgyOTA1LCAweDUxMzIsIDB4NTEzMiwgMHgxRTkzLCAweDUxMzMsIDB4NTEzNiwgMHgyOTBDLA0KLSAgICAweDUxMzcsIDB4NTEzNywgMHgyMkQyLCAweDUxMzgsIDB4NTEzOSwgMHgyOTEwLCAweDUxM0EsIDB4NTEzQSwgMHgyMkQ3LA0KLSAgICAweDUxM0IsIDB4NTEzQiwgMHgyMkQ1LCAweDUxM0MsIDB4NTEzQywgMHgyMkQxLCAweDUxM0QsIDB4NTEzRSwgMHgyOTEyLA0KLSAgICAweDUxM0YsIDB4NTEzRiwgMHgwNjM4LCAweDUxNDAsIDB4NTE0MCwgMHgxMjU5LCAweDUxNDEsIDB4NTE0MSwgMHgxMTBELA0KLSAgICAweDUxNDIsIDB4NTE0MiwgMHgyOTE0LCAweDUxNDMsIDB4NTE0MywgMHgxMEVELCAweDUxNDQsIDB4NTE0NCwgMHgwRkExLA0KLSAgICAweDUxNDUsIDB4NTE0NSwgMHgwNTA5LCAweDUxNDYsIDB4NTE0NiwgMHgxMTc4LCAweDUxNDcsIDB4NTE0NywgMHgyOTE1LA0KLSAgICAweDUxNDgsIDB4NTE0OCwgMHgwRjM1LCAweDUxNDksIDB4NTE0OSwgMHgwNzNCLCAweDUxNEEsIDB4NTE0QSwgMHgyOTE2LA0KLSAgICAweDUxNEIsIDB4NTE0QiwgMHgwOTU4LCAweDUxNEMsIDB4NTE0QywgMHgyOTE3LCAweDUxNEQsIDB4NTE0RCwgMHgwQUU3LA0KLSAgICAweDUxNEUsIDB4NTE1MCwgMHgyOTE4LCAweDUxNTEsIDB4NTE1MSwgMHgwNjExLCAweDUxNTIsIDB4NTE1MiwgMHgxRUU1LA0KLSAgICAweDUxNTMsIDB4NTE1MywgMHgyOTFCLCAweDUxNTQsIDB4NTE1NCwgMHgwRTc0LCAweDUxNTUsIDB4NTE1NSwgMHgxMzAyLA0KLSAgICAweDUxNTYsIDB4NTE1NiwgMHgxMzA0LCAweDUxNTcsIDB4NTE1OSwgMHgyOTFDLCAweDUxNUEsIDB4NTE1QSwgMHgwNTk0LA0KLSAgICAweDUxNUIsIDB4NTE1QiwgMHgyOTFGLCAweDUxNUMsIDB4NTE1QywgMHgwNUY0LCAweDUxNUQsIDB4NTE2MSwgMHgyOTIwLA0KLSAgICAweDUxNjIsIDB4NTE2MiwgMHgwOEQzLCAweDUxNjMsIDB4NTE2NCwgMHgyOTI1LCAweDUxNjUsIDB4NTE2NSwgMHgwQ0M2LA0KLSAgICAweDUxNjYsIDB4NTE2NywgMHgyOTI3LCAweDUxNjgsIDB4NTE2OCwgMHgwQzg2LCAweDUxNjksIDB4NTE2OSwgMHgyMDI1LA0KLSAgICAweDUxNkEsIDB4NTE2QSwgMHgyOTI5LCAweDUxNkIsIDB4NTE2QiwgMHgwM0Q2LCAweDUxNkMsIDB4NTE2QywgMHgwNzA0LA0KLSAgICAweDUxNkQsIDB4NTE2RCwgMHgwQTQyLCAweDUxNkUsIDB4NTE2RSwgMHgxMkY2LCAweDUxNkYsIDB4NTE2RiwgMHgyOTJBLA0KLSAgICAweDUxNzAsIDB4NTE3MCwgMHgwOUE3LCAweDUxNzEsIDB4NTE3MSwgMHgwNzBCLCAweDUxNzIsIDB4NTE3MiwgMHgyOTJCLA0KLSAgICAweDUxNzMsIDB4NTE3MywgMHgwNzMxLCAweDUxNzQsIDB4NTE3NCwgMHgwRjk2LCAweDUxNzUsIDB4NTE3NSwgMHgwNDYxLA0KLSAgICAweDUxNzYsIDB4NTE3NiwgMHgwQzAzLCAweDUxNzcsIDB4NTE3NywgMHgwOTBFLCAweDUxNzgsIDB4NTE3OCwgMHgwNUM1LA0KLSAgICAweDUxNzksIDB4NTE3OSwgMHgxMjI1LCAweDUxN0EsIDB4NTE3QSwgMHgyOTJDLCAweDUxN0IsIDB4NTE3QiwgMHgxMDIxLA0KLSAgICAweDUxN0MsIDB4NTE3QywgMHgwODU5LCAweDUxN0QsIDB4NTE3RCwgMHgwRDc1LCAweDUxN0UsIDB4NTE3RiwgMHgyOTJELA0KLSAgICAweDUxODAsIDB4NTE4MCwgMHgwODMwLCAweDUxODEsIDB4NTE4MSwgMHgxMkZBLCAweDUxODIsIDB4NTE4MiwgMHgxMjlELA0KLSAgICAweDUxODMsIDB4NTE4NCwgMHgyOTJGLCAweDUxODUsIDB4NTE4NSwgMHgwQjNELCAweDUxODYsIDB4NTE4NywgMHgyOTMxLA0KLSAgICAweDUxODgsIDB4NTE4OCwgMHgwNkNGLCAweDUxODksIDB4NTE4OSwgMHgwQzk4LCAweDUxOEEsIDB4NTE4QiwgMHgyOTMzLA0KLSAgICAweDUxOEMsIDB4NTE4QywgMHgwNEE4LCAweDUxOEQsIDB4NTE4RCwgMHgxMTFDLCAweDUxOEUsIDB4NTE5MSwgMHgyOTM1LA0KLSAgICAweDUxOTIsIDB4NTE5MiwgMHgwQUI1LCAweDUxOTMsIDB4NTE5NCwgMHgyOTM5LCAweDUxOTUsIDB4NTE5NSwgMHgwQUU2LA0KLSAgICAweDUxOTYsIDB4NTE5NiwgMHgxMzE0LCAweDUxOTcsIDB4NTE5NywgMHgwQ0JBLCAweDUxOTgsIDB4NTE5OCwgMHgyOTNCLA0KLSAgICAweDUxOTksIDB4NTE5OSwgMHgwRjdGLCAweDUxOUEsIDB4NTE5QSwgMHgyOTNDLCAweDUxOUIsIDB4NTE5QiwgMHgwOTJCLA0KLSAgICAweDUxOUMsIDB4NTE5QywgMHgwQjZBLCAweDUxOUQsIDB4NTE5RiwgMHgyOTNELCAweDUxQTAsIDB4NTFBMCwgMHgwNzMzLA0KLSAgICAweDUxQTEsIDB4NTFBMSwgMHgyOTQwLCAweDUxQTIsIDB4NTFBMiwgMHgxMzE1LCAweDUxQTMsIDB4NTFBMywgMHgyOTQxLA0KLSAgICAweDUxQTQsIDB4NTFBNCwgMHgxMEVDLCAweDUxQTUsIDB4NTFBNSwgMHgxMzE2LCAweDUxQTYsIDB4NTFBQSwgMHgyOTQyLA0KLSAgICAweDUxQUIsIDB4NTFBQiwgMHgxMzBGLCAweDUxQUMsIDB4NTFBQywgMHgwNUVCLCAweDUxQUQsIDB4NTFBRSwgMHgyOTQ3LA0KLSAgICAweDUxQUYsIDB4NTFBRiwgMHgwNjg4LCAweDUxQjAsIDB4NTFCMCwgMHgwNDYyLCAweDUxQjEsIDB4NTFCMSwgMHgxMzEwLA0KLSAgICAweDUxQjIsIDB4NTFCMiwgMHgwNTBBLCAweDUxQjMsIDB4NTFCMywgMHgwOTI1LCAweDUxQjQsIDB4NTFCNCwgMHgyOTQ5LA0KLSAgICAweDUxQjUsIDB4NTFCNSwgMHgwOTgzLCAweDUxQjYsIDB4NTFCNiwgMHgxMDM4LCAweDUxQjcsIDB4NTFCNywgMHgwOUNGLA0KLSAgICAweDUxQjgsIDB4NTFCQSwgMHgyOTRBLCAweDUxQkIsIDB4NTFCQiwgMHgwNUYyLCAweDUxQkMsIDB4NTFCQywgMHgxMzEyLA0KLSAgICAweDUxQkQsIDB4NTFCRCwgMHgxMzExLCAweDUxQkUsIDB4NTFCRiwgMHgyOTRELCAweDUxQzAsIDB4NTFDMCwgMHgwOEVBLA0KLSAgICAweDUxQzEsIDB4NTFDMywgMHgyOTRGLCAweDUxQzQsIDB4NTFDNCwgMHgwQkZGLCAweDUxQzUsIDB4NTFDNSwgMHgyOTUyLA0KLSAgICAweDUxQzYsIDB4NTFDNiwgMHgxMjE5LCAweDUxQzcsIDB4NTFDNywgMHgxMzEzLCAweDUxQzgsIDB4NTFDOCwgMHgyOTUzLA0KLSAgICAweDUxQzksIDB4NTFDOSwgMHgwQTAyLCAweDUxQ0EsIDB4NTFDQSwgMHgyOTU0LCAweDUxQ0IsIDB4NTFDQiwgMHgwNUQzLA0KLSAgICAweDUxQ0MsIDB4NTFDQywgMHgwQTMxLCAweDUxQ0QsIDB4NTFDRCwgMHgxRUNGLCAweDUxQ0UsIDB4NTFDRSwgMHgyOTU1LA0KLSAgICAweDUxQ0YsIDB4NTFDRiwgMHgwODY4LCAweDUxRDAsIDB4NTFEMCwgMHgyOTU2LCAweDUxRDEsIDB4NTFEMSwgMHgwNTU4LA0KLSAgICAweDUxRDIsIDB4NTFEQSwgMHgyOTU3LCAweDUxREIsIDB4NTFEQiwgMHgwQTI2LCAweDUxREMsIDB4NTFEQywgMHgyOTYwLA0KLSAgICAweDUxREQsIDB4NTFERCwgMHgwQjYwLCAweDUxREUsIDB4NTFERiwgMHgyOTYxLCAweDUxRTAsIDB4NTFFMCwgMHgwODJCLA0KLSAgICAweDUxRTEsIDB4NTFFMSwgMHgwNjRGLCAweDUxRTIsIDB4NTFFMywgMHgyOTYzLCAweDUxRTQsIDB4NTFFNCwgMHgwNjhDLA0KLSAgICAweDUxRTUsIDB4NTFFQSwgMHgyOTY1LCAweDUxRUIsIDB4NTFFQiwgMHgxMzAwLCAweDUxRUMsIDB4NTFFQywgMHgyOTZCLA0KLSAgICAweDUxRUQsIDB4NTFFRCwgMHgwQkRELCAweDUxRUUsIDB4NTFFRSwgMHgyOTZDLCAweDUxRUYsIDB4NTFFRiwgMHgwOTNBLA0KLSAgICAweDUxRjAsIDB4NTFGMCwgMHgwN0UwLCAweDUxRjEsIDB4NTFGMSwgMHgxRkQ5LCAweDUxRjIsIDB4NTFGMiwgMHgyOTZELA0KLSAgICAweDUxRjMsIDB4NTFGMywgMHgwNUFCLCAweDUxRjQsIDB4NTFGNCwgMHgyOTZFLCAweDUxRjUsIDB4NTFGNSwgMHgxMzk5LA0KLSAgICAweDUxRjYsIDB4NTFGNiwgMHgwRkEyLCAweDUxRjcsIDB4NTFGNywgMHgyOTZGLCAweDUxRjgsIDB4NTFGOCwgMHgwRTZBLA0KLSAgICAweDUxRjksIDB4NTFGOSwgMHgwM0M3LCAweDUxRkEsIDB4NTFGQSwgMHgwNTFCLCAweDUxRkIsIDB4NTFGQiwgMHgwODBDLA0KLSAgICAweDUxRkMsIDB4NTFGQywgMHgxMzlBLCAweDUxRkQsIDB4NTFGRCwgMHgwNzY2LCAweDUxRkUsIDB4NTFGRSwgMHgyOTcwLA0KLSAgICAweDUxRkYsIDB4NTFGRiwgMHgxMTI3LCAweDUyMDAsIDB4NTIwMCwgMHgwNTk3LCAweDUyMDEsIDB4NTIwMSwgMHgwNUQ0LA0KLSAgICAweDUyMDIsIDB4NTIwMiwgMHgxMjhDLCAweDUyMDMsIDB4NTIwMywgMHgwQ0FCLCAweDUyMDQsIDB4NTIwNSwgMHgyOTcxLA0KLSAgICAweDUyMDYsIDB4NTIwNiwgMHgwNjczLCAweDUyMDcsIDB4NTIwNywgMHgwQzRELCAweDUyMDgsIDB4NTIwOCwgMHgxMjhELA0KLSAgICAweDUyMDksIDB4NTIwOSwgMHgyOTczLCAweDUyMEEsIDB4NTIwQSwgMHgwOTNDLCAweDUyMEIsIDB4NTIwQywgMHgyOTc0LA0KLSAgICAweDUyMEQsIDB4NTIwRCwgMHgxMzhCLCAweDUyMEUsIDB4NTIwRSwgMHgxMjhFLCAweDUyMEYsIDB4NTIxMCwgMHgyOTc2LA0KLSAgICAweDUyMTEsIDB4NTIxMSwgMHgwRjk3LCAweDUyMTIsIDB4NTIxMiwgMHgwN0MzLCAweDUyMTMsIDB4NTIxNSwgMHgyOTc4LA0KLSAgICAweDUyMTYsIDB4NTIxNiwgMHgxOTZFLCAweDUyMTcsIDB4NTIxNywgMHgwQTE5LCAweDUyMTgsIDB4NTIxOCwgMHgwQTNFLA0KLSAgICAweDUyMTksIDB4NTIxOSwgMHgxMTM1LCAweDUyMUEsIDB4NTIxQSwgMHgwNkQwLCAweDUyMUIsIDB4NTIxQiwgMHgwNTM3LA0KLSAgICAweDUyMUMsIDB4NTIxQywgMHgyOTdCLCAweDUyMUQsIDB4NTIxRCwgMHgwNTFBLCAweDUyMUUsIDB4NTIxRiwgMHgyOTdDLA0KLSAgICAweDUyMjAsIDB4NTIyMCwgMHgwQ0Y3LCAweDUyMjEsIDB4NTIyMywgMHgyOTdFLCAweDUyMjQsIDB4NTIyNCwgMHgwQjkxLA0KLSAgICAweDUyMjUsIDB4NTIyNywgMHgyOTgxLCAweDUyMjgsIDB4NTIyOCwgMHgwQjlBLCAweDUyMjksIDB4NTIyOSwgMHgwOUU2LA0KLSAgICAweDUyMkEsIDB4NTIyQSwgMHgyOTg0LCAweDUyMkIsIDB4NTIyQiwgMHgwNDU5LCAweDUyMkMsIDB4NTIyQywgMHgyOTg1LA0KLSAgICAweDUyMkQsIDB4NTIyRCwgMHgxMjhGLCAweDUyMkUsIDB4NTIyRSwgMHgwNzI3LCAweDUyMkYsIDB4NTIyRiwgMHgyOTg2LA0KLSAgICAweDUyMzAsIDB4NTIzMCwgMHgwNTlFLCAweDUyMzEsIDB4NTIzMiwgMHgyOTg3LCAweDUyMzMsIDB4NTIzMywgMHgxMjkwLA0KLSAgICAweDUyMzQsIDB4NTIzNSwgMHgyOTg5LCAweDUyMzYsIDB4NTIzNiwgMHgxMUM1LCAweDUyMzcsIDB4NTIzNywgMHgwRDk3LA0KLSAgICAweDUyMzgsIDB4NTIzOCwgMHgwQzhBLCAweDUyMzksIDB4NTIzOSwgMHgwQ0VCLCAweDUyM0EsIDB4NTIzQSwgMHgwNTRGLA0KLSAgICAweDUyM0IsIDB4NTIzQiwgMHgwOTU5LCAweDUyM0MsIDB4NTIzQywgMHgyOThCLCAweDUyM0QsIDB4NTIzRCwgMHgwNzRELA0KLSAgICAweDUyM0UsIDB4NTIzRSwgMHgyOThDLCAweDUyM0YsIDB4NTI0MCwgMHgxMjkxLCAweDUyNDEsIDB4NTI0MSwgMHgwNjI2LA0KLSAgICAweDUyNDIsIDB4NTI0MiwgMHgwODM0LCAweDUyNDMsIDB4NTI0MywgMHgwRTNELCAweDUyNDQsIDB4NTI0NCwgMHgyMkM4LA0KLSAgICAweDUyNDUsIDB4NTI0NiwgMHgyOThELCAweDUyNDcsIDB4NTI0NywgMHgyMjYzLCAweDUyNDgsIDB4NTI0OSwgMHgyOThGLA0KLSAgICAweDUyNEEsIDB4NTI0QSwgMHgwRjY0LCAweDUyNEIsIDB4NTI0QiwgMHgyNjgzLCAweDUyNEMsIDB4NTI0QywgMHgxMjkzLA0KLSAgICAweDUyNEQsIDB4NTI0RCwgMHgwQzJELCAweDUyNEUsIDB4NTI0RiwgMHgyOTkxLCAweDUyNTAsIDB4NTI1MCwgMHgwNzI5LA0KLSAgICAweDUyNTEsIDB4NTI1MSwgMHgwODc0LCAweDUyNTIsIDB4NTI1MywgMHgyOTkzLCAweDUyNTQsIDB4NTI1NCwgMHgwRTMxLA0KLSAgICAweDUyNTUsIDB4NTI1NSwgMHgyOTk1LCAweDUyNTYsIDB4NTI1NiwgMHgwQkU5LCAweDUyNTcsIDB4NTI1QSwgMHgyOTk2LA0KLSAgICAweDUyNUIsIDB4NTI1QiwgMHgxRjE3LCAweDUyNUMsIDB4NTI1QywgMHgxMjk2LCAweDUyNUQsIDB4NTI1RCwgMHgyOTlBLA0KLSAgICAweDUyNUUsIDB4NTI1RSwgMHgxMjk0LCAweDUyNUYsIDB4NTI2MCwgMHgyOTlCLCAweDUyNjEsIDB4NTI2MSwgMHgxMjk1LA0KLSAgICAweDUyNjIsIDB4NTI2NCwgMHgyOTlELCAweDUyNjUsIDB4NTI2NSwgMHgwNDA5LCAweDUyNjYsIDB4NTI2NiwgMHgyOUEwLA0KLSAgICAweDUyNjcsIDB4NTI2NywgMHgwOTE2LCAweDUyNjgsIDB4NTI2OCwgMHgyOUExLCAweDUyNjksIDB4NTI2OSwgMHgwRDNBLA0KLSAgICAweDUyNkEsIDB4NTI2QSwgMHgwODY3LCAweDUyNkIsIDB4NTI2RCwgMHgyOUEyLCAweDUyNkUsIDB4NTI2RSwgMHgxRjJCLA0KLSAgICAweDUyNkYsIDB4NTI2RiwgMHgwNkFDLCAweDUyNzAsIDB4NTI3MSwgMHgyOUE1LCAweDUyNzIsIDB4NTI3MiwgMHgwNkU5LA0KLSAgICAweDUyNzMsIDB4NTI3MywgMHgyOUE3LCAweDUyNzQsIDB4NTI3NCwgMHgyMkNBLCAweDUyNzUsIDB4NTI3NSwgMHgxRTk5LA0KLSAgICAweDUyNzYsIDB4NTI3QywgMHgyOUE4LCAweDUyN0QsIDB4NTI3RCwgMHgxMjk4LCAweDUyN0UsIDB4NTI3RSwgMHgyOUFGLA0KLSAgICAweDUyN0YsIDB4NTI3RiwgMHgwODlDLCAweDUyODAsIDB4NTI4MCwgMHgyOUIwLCAweDUyODEsIDB4NTI4MSwgMHgxMjlBLA0KLSAgICAweDUyODIsIDB4NTI4MiwgMHgxMjk5LCAweDUyODMsIDB4NTI4MywgMHgxRjRGLCAweDUyODQsIDB4NTI4NiwgMHgyOUIxLA0KLSAgICAweDUyODcsIDB4NTI4NywgMHgxRkNGLCAweDUyODgsIDB4NTI4OCwgMHgwQkJELCAweDUyODksIDB4NTI4OSwgMHgyMDM2LA0KLSAgICAweDUyOEEsIDB4NTI4QSwgMHgxRjNBLCAweDUyOEIsIDB4NTI4QiwgMHgyOUI0LCAweDUyOEMsIDB4NTI4QywgMHgyMkM5LA0KLSAgICAweDUyOEQsIDB4NTI4RCwgMHgxRjk5LCAweDUyOEUsIDB4NTI4RiwgMHgyOUI1LCAweDUyOTAsIDB4NTI5MCwgMHgxMjlCLA0KLSAgICAweDUyOTEsIDB4NTI5MSwgMHgxRjc1LCAweDUyOTIsIDB4NTI5MiwgMHgyOUI3LCAweDUyOTMsIDB4NTI5MywgMHgxMjlDLA0KLSAgICAweDUyOTQsIDB4NTI5QSwgMHgyOUI4LCAweDUyOUIsIDB4NTI5QiwgMHgwOUVGLCAweDUyOUMsIDB4NTI5QywgMHgyOUJGLA0KLSAgICAweDUyOUQsIDB4NTI5RCwgMHgwQzhCLCAweDUyOUUsIDB4NTI5RSwgMHgwM0Y3LCAweDUyOUYsIDB4NTI5RiwgMHgwNkZGLA0KLSAgICAweDUyQTAsIDB4NTJBMCwgMHgwODQ2LCAweDUyQTEsIDB4NTJBMSwgMHgwRjAwLCAweDUyQTIsIDB4NTJBMiwgMHgxMzhELA0KLSAgICAweDUyQTMsIDB4NTJBMywgMHgwQTFDLCAweDUyQTQsIDB4NTJBNywgMHgyOUMwLCAweDUyQTgsIDB4NTJBOCwgMHgwNUVFLA0KLSAgICAweDUyQTksIDB4NTJBOSwgMHgxMUY5LCAweDUyQUEsIDB4NTJBQSwgMHgwQjZELCAweDUyQUIsIDB4NTJBQiwgMHgwOEFBLA0KLSAgICAweDUyQUMsIDB4NTJBRCwgMHgxMzhFLCAweDUyQUUsIDB4NTJCMCwgMHgyOUM0LCAweDUyQjEsIDB4NTJCMSwgMHgwOUUzLA0KLSAgICAweDUyQjIsIDB4NTJCMiwgMHgwOEQxLCAweDUyQjMsIDB4NTJCMywgMHgwOUI4LCAweDUyQjQsIDB4NTJCRCwgMHgyOUM3LA0KLSAgICAweDUyQkUsIDB4NTJCRSwgMHgxMzkwLCAweDUyQkYsIDB4NTJCRiwgMHgwRDVELCAweDUyQzAsIDB4NTJDMCwgMHgyOUQxLA0KLSAgICAweDUyQzEsIDB4NTJDMSwgMHgxRkJFLCAweDUyQzIsIDB4NTJDMiwgMHgyOUQyLCAweDUyQzMsIDB4NTJDMywgMHgwNDcxLA0KLSAgICAweDUyQzQsIDB4NTJDNiwgMHgyOUQzLCAweDUyQzcsIDB4NTJDNywgMHgxMEE3LCAweDUyQzgsIDB4NTJDOCwgMHgyOUQ2LA0KLSAgICAweDUyQzksIDB4NTJDOSwgMHgwQUU4LCAweDUyQ0EsIDB4NTJDQSwgMHgyOUQ3LCAweDUyQ0IsIDB4NTJDQiwgMHgwRkQ0LA0KLSAgICAweDUyQ0MsIDB4NTJDRiwgMHgyOUQ4LCAweDUyRDAsIDB4NTJEMCwgMHgxMzkyLCAweDUyRDEsIDB4NTJEMSwgMHgyOURDLA0KLSAgICAweDUyRDIsIDB4NTJEMiwgMHgwOUMwLCAweDUyRDMsIDB4NTJENCwgMHgyOURELCAweDUyRDUsIDB4NTJENSwgMHgxRUNELA0KLSAgICAweDUyRDYsIDB4NTJENiwgMHgxMzkzLCAweDUyRDcsIDB4NTJENywgMHgyOURGLCAweDUyRDgsIDB4NTJEOCwgMHgwOTNFLA0KLSAgICAweDUyRDksIDB4NTJEOSwgMHgyMUE5LCAweDUyREEsIDB4NTJEQSwgMHgyOUUwLCAweDUyREIsIDB4NTJEQiwgMHgyMUU2LA0KLSAgICAweDUyREMsIDB4NTJEQywgMHgyOUUxLCAweDUyREQsIDB4NTJERCwgMHgyMTI3LCAweDUyREUsIDB4NTJERSwgMHgyMDAzLA0KLSAgICAweDUyREYsIDB4NTJERiwgMHgwQjFGLCAweDUyRTAsIDB4NTJFMSwgMHgyOUUyLCAweDUyRTIsIDB4NTJFMiwgMHgyMTMyLA0KLSAgICAweDUyRTMsIDB4NTJFMywgMHgyOUU0LCAweDUyRTQsIDB4NTJFNCwgMHgwQzU3LCAweDUyRTUsIDB4NTJFRiwgMHgyOUU1LA0KLSAgICAweDUyRjAsIDB4NTJGMCwgMHgxMzk0LCAweDUyRjEsIDB4NTJGMSwgMHgyMzIzLCAweDUyRjIsIDB4NTJGNCwgMHgyOUYwLA0KLSAgICAweDUyRjUsIDB4NTJGNSwgMHgyMDExLCAweDUyRjYsIDB4NTJGNywgMHgyOUYzLCAweDUyRjgsIDB4NTJGOCwgMHgyMEY1LA0KLSAgICAweDUyRjksIDB4NTJGOSwgMHgxMkZDLCAweDUyRkEsIDB4NTJGQSwgMHgwRDEwLCAweDUyRkIsIDB4NTJGRCwgMHgyOUY1LA0KLSAgICAweDUyRkUsIDB4NTJGRSwgMHgwNzBELCAweDUyRkYsIDB4NTJGRiwgMHgwRUZGLCAweDUzMDAsIDB4NTMwMCwgMHgxMTBCLA0KLSAgICAweDUzMDEsIDB4NTMwNCwgMHgyOUY4LCAweDUzMDUsIDB4NTMwNSwgMHgwNDA3LCAweDUzMDYsIDB4NTMwNiwgMHgwNTU1LA0KLSAgICAweDUzMDcsIDB4NTMwNywgMHgyOUZDLCAweDUzMDgsIDB4NTMwOCwgMHgwRkE0LCAweDUzMDksIDB4NTMwQywgMHgyOUZELA0KLSAgICAweDUzMEQsIDB4NTMwRCwgMHgxMkZELCAweDUzMEUsIDB4NTMwRSwgMHgyQTAxLCAweDUzMEYsIDB4NTMwRiwgMHgxNEI1LA0KLSAgICAweDUzMTAsIDB4NTMxMCwgMHgxMkZGLCAweDUzMTEsIDB4NTMxNCwgMHgyQTAyLCAweDUzMTUsIDB4NTMxNSwgMHgxMjY2LA0KLSAgICAweDUzMTYsIDB4NTMxNiwgMHgwN0M0LCAweDUzMTcsIDB4NTMxNywgMHgwNDFBLCAweDUzMTgsIDB4NTMxOCwgMHgyQTA2LA0KLSAgICAweDUzMTksIDB4NTMxOSwgMHgwNEZDLCAweDUzMUEsIDB4NTMxQSwgMHgxMjg0LCAweDUzMUIsIDB4NTMxQywgMHgyQTA3LA0KLSAgICAweDUzMUQsIDB4NTMxRCwgMHgxMTE0LCAweDUzMUUsIDB4NTMxRiwgMHgyQTA5LCAweDUzMjAsIDB4NTMyMCwgMHgwODg0LA0KLSAgICAweDUzMjEsIDB4NTMyMSwgMHgwOTdDLCAweDUzMjIsIDB4NTMyMiwgMHgyQTBCLCAweDUzMjMsIDB4NTMyMywgMHgwRjI4LA0KLSAgICAweDUzMjQsIDB4NTMyNSwgMHgyQTBDLCAweDUzMjYsIDB4NTMyNiwgMHgxMjg2LCAweDUzMjcsIDB4NTMyOSwgMHgyQTBFLA0KLSAgICAweDUzMkEsIDB4NTMyQSwgMHgwNjY4LCAweDUzMkIsIDB4NTMyQywgMHgyQTExLCAweDUzMkQsIDB4NTMyRCwgMHgyMkM1LA0KLSAgICAweDUzMkUsIDB4NTMyRSwgMHgxMjg3LCAweDUzMkYsIDB4NTMyRiwgMHgxRjVFLCAweDUzMzAsIDB4NTMzMCwgMHgyQTEzLA0KLSAgICAweDUzMzEsIDB4NTMzMSwgMHgyMkM2LCAweDUzMzIsIDB4NTMzOCwgMHgyQTE0LCAweDUzMzksIDB4NTMzOSwgMHgwQkM0LA0KLSAgICAweDUzM0EsIDB4NTMzQSwgMHgwQzc1LCAweDUzM0IsIDB4NTMzQiwgMHgxMDQ0LCAweDUzM0MsIDB4NTMzRCwgMHgyQTFCLA0KLSAgICAweDUzM0UsIDB4NTMzRSwgMHgxMjg4LCAweDUzM0YsIDB4NTMzRiwgMHgwQjQ3LCAweDUzNDAsIDB4NTM0MCwgMHgyMEVGLA0KLSAgICAweDUzNDEsIDB4NTM0MSwgMHgwRDQ1LCAweDUzNDIsIDB4NTM0MiwgMHgyQTFELCAweDUzNDMsIDB4NTM0MywgMHgwQzI0LA0KLSAgICAweDUzNDQsIDB4NTM0NCwgMHgyQTFFLCAweDUzNDUsIDB4NTM0NSwgMHgxMjVDLCAweDUzNDYsIDB4NTM0NiwgMHgyQTFGLA0KLSAgICAweDUzNDcsIDB4NTM0NywgMHgwRDM2LCAweDUzNDgsIDB4NTM0OCwgMHgwRUY2LCAweDUzNDksIDB4NTM0OSwgMHgwN0YxLA0KLSAgICAweDUzNEEsIDB4NTM0QSwgMHgwM0Y2LCAweDUzNEIsIDB4NTM0RCwgMHgyQTIwLCAweDUzNEUsIDB4NTM0RSwgMHgwN0JGLA0KLSAgICAweDUzNEYsIDB4NTM0RiwgMHgwRjc4LCAweDUzNTAsIDB4NTM1MCwgMHgyQTIzLCAweDUzNTEsIDB4NTM1MSwgMHgwNDE5LA0KLSAgICAweDUzNTIsIDB4NTM1MiwgMHgxMjQxLCAweDUzNTMsIDB4NTM1MywgMHgxMjFDLCAweDUzNTQsIDB4NTM1NCwgMHgyMUQwLA0KLSAgICAweDUzNTUsIDB4NTM1NSwgMHgwNTg2LCAweDUzNTYsIDB4NTM1NiwgMHgwQTlCLCAweDUzNTcsIDB4NTM1NywgMHgwQjMyLA0KLSAgICAweDUzNTgsIDB4NTM1OSwgMHgyQTI0LCAweDUzNUEsIDB4NTM1QSwgMHgwNDcwLCAweDUzNUIsIDB4NTM1QiwgMHgyQTI2LA0KLSAgICAweDUzNUMsIDB4NTM1QywgMHgwNDdFLCAweDUzNUQsIDB4NTM1RCwgMHgyQTI3LCAweDUzNUUsIDB4NTM1RSwgMHgwNDRFLA0KLSAgICAweDUzNUYsIDB4NTM1RiwgMHgxNEZBLCAweDUzNjAsIDB4NTM2MCwgMHgxMTVELCAweDUzNjEsIDB4NTM2MSwgMHgwOTM1LA0KLSAgICAweDUzNjIsIDB4NTM2MiwgMHgwQTUzLCAweDUzNjMsIDB4NTM2MywgMHgxMjhCLCAweDUzNjQsIDB4NTM2NCwgMHgwQTU4LA0KLSAgICAweDUzNjUsIDB4NTM2NSwgMHgyQTI4LCAweDUzNjYsIDB4NTM2NiwgMHgxMjhBLCAweDUzNjcsIDB4NTM2NywgMHgwRUUzLA0KLSAgICAweDUzNjgsIDB4NTM2OCwgMHgyQTI5LCAweDUzNjksIDB4NTM2OSwgMHgxMzUyLCAweDUzNkEsIDB4NTM2QSwgMHgyQTJBLA0KLSAgICAweDUzNkIsIDB4NTM2QiwgMHgwRUNGLCAweDUzNkMsIDB4NTM2RCwgMHgyQTJCLCAweDUzNkUsIDB4NTM2RSwgMHgxMjZBLA0KLSAgICAweDUzNkYsIDB4NTM2RiwgMHgwQUIzLCAweDUzNzAsIDB4NTM3MCwgMHgxMDg2LCAweDUzNzEsIDB4NTM3MSwgMHgwRUIyLA0KLSAgICAweDUzNzIsIDB4NTM3MiwgMHgyQTJELCAweDUzNzMsIDB4NTM3MywgMHgwODI3LCAweDUzNzQsIDB4NTM3NCwgMHgwQzhGLA0KLSAgICAweDUzNzUsIDB4NTM3NSwgMHgwQTc4LCAweDUzNzYsIDB4NTM3NiwgMHgyQTJFLCAweDUzNzcsIDB4NTM3NywgMHgwOTFDLA0KLSAgICAweDUzNzgsIDB4NTM3OCwgMHgwRjgxLCAweDUzNzksIDB4NTM3OSwgMHgyQTJGLCAweDUzN0EsIDB4NTM3QSwgMHgxMzUzLA0KLSAgICAweDUzN0IsIDB4NTM3RSwgMHgyQTMwLCAweDUzN0YsIDB4NTM3RiwgMHgwQzYxLCAweDUzODAsIDB4NTM4MSwgMHgyQTM0LA0KLSAgICAweDUzODIsIDB4NTM4MiwgMHgwNENDLCAweDUzODMsIDB4NTM4MywgMHgyQTM2LCAweDUzODQsIDB4NTM4NCwgMHgwNjMxLA0KLSAgICAweDUzODUsIDB4NTM4NSwgMHgwRTRGLCAweDUzODYsIDB4NTM4NiwgMHgwOUU1LCAweDUzODcsIDB4NTM4OCwgMHgyQTM3LA0KLSAgICAweDUzODksIDB4NTM4OSwgMHgwOUUyLCAweDUzOEEsIDB4NTM4QSwgMHgyQTM5LCAweDUzOEIsIDB4NTM4QiwgMHgwRkUyLA0KLSAgICAweDUzOEMsIDB4NTM4QywgMHgxMDBBLCAweDUzOEQsIDB4NTM4RCwgMHgxMjdELCAweDUzOEUsIDB4NTM5NCwgMHgyQTNBLA0KLSAgICAweDUzOTUsIDB4NTM5NSwgMHgwNEE1LCAweDUzOTYsIDB4NTM5NywgMHgyQTQxLCAweDUzOTgsIDB4NTM5OCwgMHgwOUQwLA0KLSAgICAweDUzOTksIDB4NTM5OSwgMHgyMkMxLCAweDUzOUEsIDB4NTM5QSwgMHgwN0E4LCAweDUzOUIsIDB4NTM5QywgMHgyQTQzLA0KLSAgICAweDUzOUQsIDB4NTM5RCwgMHgxMjdFLCAweDUzOUUsIDB4NTM5RSwgMHgyQTQ1LCAweDUzOUYsIDB4NTM5RiwgMHgxMEYwLA0KLSAgICAweDUzQTAsIDB4NTNBMCwgMHgxRTY0LCAweDUzQTEsIDB4NTNBMSwgMHgyQTQ2LCAweDUzQTIsIDB4NTNBMiwgMHgwRjRFLA0KLSAgICAweDUzQTMsIDB4NTNBMywgMHgxMjdGLCAweDUzQTQsIDB4NTNBNCwgMHgyQTQ3LCAweDUzQTUsIDB4NTNBNSwgMHgxMjgwLA0KLSAgICAweDUzQTYsIDB4NTNBNiwgMHgwRjMwLCAweDUzQTcsIDB4NTNBNywgMHgyQTQ4LCAweDUzQTgsIDB4NTNBOCwgMHgwNTFELA0KLSAgICAweDUzQTksIDB4NTNBOSwgMHgwOEY2LCAweDUzQUEsIDB4NTNBQywgMHgyQTQ5LCAweDUzQUQsIDB4NTNBRCwgMHgyMUY5LA0KLSAgICAweDUzQUUsIDB4NTNBRSwgMHgxMjgxLCAweDUzQUYsIDB4NTNCMSwgMHgyQTRDLCAweDUzQjIsIDB4NTNCMiwgMHgyMDEwLA0KLSAgICAweDUzQjMsIDB4NTNCMywgMHgyQTRGLCAweDUzQjQsIDB4NTNCNCwgMHgyMkMyLCAweDUzQjUsIDB4NTNCNSwgMHgyQTUwLA0KLSAgICAweDUzQjYsIDB4NTNCNiwgMHgxMzlDLCAweDUzQjcsIDB4NTNCQSwgMHgyQTUxLCAweDUzQkIsIDB4NTNCQiwgMHgwQzgwLA0KLSAgICAweDUzQkMsIDB4NTNCRSwgMHgyQTU1LCAweDUzQkYsIDB4NTNCRiwgMHgwRjQ1LCAweDUzQzAsIDB4NTNDMCwgMHgyQTU4LA0KLSAgICAweDUzQzEsIDB4NTNDMSwgMHgwQ0Q5LCAweDUzQzIsIDB4NTNDMiwgMHgwNDk1LCAweDUzQzMsIDB4NTNDMywgMHgxRTVBLA0KLSAgICAweDUzQzQsIDB4NTNDNywgMHgyQTU5LCAweDUzQzgsIDB4NTNDOCwgMHgxMEJCLCAweDUzQzksIDB4NTNDOSwgMHgwNEFELA0KLSAgICAweDUzQ0EsIDB4NTNDQSwgMHgwODIzLCAweDUzQ0IsIDB4NTNDQiwgMHgxMEI2LCAweDUzQ0MsIDB4NTNDQywgMHgwREEwLA0KLSAgICAweDUzQ0QsIDB4NTNDRCwgMHgwNjUxLCAweDUzQ0UsIDB4NTNEMCwgMHgyQTVELCAweDUzRDEsIDB4NTNEMSwgMHgwNjNGLA0KLSAgICAweDUzRDIsIDB4NTNEMywgMHgyQTYwLCAweDUzRDQsIDB4NTNENCwgMHgwRDdDLCAweDUzRDUsIDB4NTNENSwgMHgyQTYyLA0KLSAgICAweDUzRDYsIDB4NTNENiwgMHgwQzdDLCAweDUzRDcsIDB4NTNENywgMHgwRDczLCAweDUzRDgsIDB4NTNEOCwgMHgwNDRELA0KLSAgICAweDUzRDksIDB4NTNEOSwgMHgwRkJCLCAweDUzREEsIDB4NTNEQSwgMHgyQTYzLCAweDUzREIsIDB4NTNEQiwgMHgwQjkyLA0KLSAgICAweDUzREMsIDB4NTNERSwgMHgyQTY0LCAweDUzREYsIDB4NTNERiwgMHgxMzk1LCAweDUzRTAsIDB4NTNFMCwgMHgwNURGLA0KLSAgICAweDUzRTEsIDB4NTNFMSwgMHgyQTY3LCAweDUzRTIsIDB4NTNFMiwgMHgxRUEyLCAweDUzRTMsIDB4NTNFMywgMHgwOTY3LA0KLSAgICAweDUzRTQsIDB4NTNFNCwgMHgwNzFFLCAweDUzRTUsIDB4NTNFNSwgMHgwOTEzLCAweDUzRTYsIDB4NTNFNiwgMHgwQTM2LA0KLSAgICAweDUzRTcsIDB4NTNFNywgMHgyQTY4LCAweDUzRTgsIDB4NTNFOCwgMHgxNEZFLCAweDUzRTksIDB4NTNFOSwgMHgxNEZELA0KLSAgICAweDUzRUEsIDB4NTNFQSwgMHgxMUJBLCAweDUzRUIsIDB4NTNFQiwgMHgwOEExLCAweDUzRUMsIDB4NTNFQywgMHgxMTdBLA0KLSAgICAweDUzRUQsIDB4NTNFRCwgMHgwM0QzLCAweDUzRUUsIDB4NTNFRSwgMHgwNUUyLCAweDUzRUYsIDB4NTNFRiwgMHgwOTU2LA0KLSAgICAweDUzRjAsIDB4NTNGMCwgMHgwREZCLCAweDUzRjEsIDB4NTNGMSwgMHgxNEZCLCAweDUzRjIsIDB4NTNGMiwgMHgwRDRFLA0KLSAgICAweDUzRjMsIDB4NTNGMywgMHgxMEI3LCAweDUzRjQsIDB4NTNGNCwgMHgyQTY5LCAweDUzRjUsIDB4NTNGNSwgMHgxMjg1LA0KLSAgICAweDUzRjYsIDB4NTNGNiwgMHgxMDNELCAweDUzRjcsIDB4NTNGNywgMHgwNzdDLCAweDUzRjgsIDB4NTNGOCwgMHgwREIzLA0KLSAgICAweDUzRjksIDB4NTNGOSwgMHgwRTExLCAweDUzRkEsIDB4NTNGQSwgMHgyQTZBLCAweDUzRkIsIDB4NTNGQiwgMHgxNEZGLA0KLSAgICAweDUzRkMsIDB4NTNGQywgMHgwNUQxLCAweDUzRkQsIDB4NTNGRCwgMHgxNEZDLCAweDUzRkUsIDB4NTNGRiwgMHgyQTZCLA0KLSAgICAweDU0MDAsIDB4NTQwMCwgMHgyQTZELCAweDU0MDEsIDB4NTQwMSwgMHgxMERBLCAweDU0MDIsIDB4NTQwMiwgMHgyQTZFLA0KLSAgICAweDU0MDMsIDB4NTQwMywgMHgwNEY5LCAweDU0MDQsIDB4NTQwNCwgMHgwNkYyLCAweDU0MDUsIDB4NTQwNSwgMHgyQTZGLA0KLSAgICAweDU0MDYsIDB4NTQwNiwgMHgxNTAyLCAweDU0MDcsIDB4NTQwNywgMHgyQTcwLCAweDU0MDgsIDB4NTQwOCwgMHgwNzg2LA0KLSAgICAweDU0MDksIDB4NTQwOSwgMHgwODFELCAweDU0MEEsIDB4NTQwQSwgMHgwNUQ2LCAweDU0MEIsIDB4NTQwQiwgMHgyQTcxLA0KLSAgICAweDU0MEMsIDB4NTQwQywgMHgwRTVELCAweDU0MEQsIDB4NTQwRCwgMHgwQjAwLCAweDU0MEUsIDB4NTQwRSwgMHgwN0FBLA0KLSAgICAweDU0MEYsIDB4NTQwRiwgMHgwOURGLCAweDU0MTAsIDB4NTQxMCwgMHgwRTczLCAweDU0MTEsIDB4NTQxMSwgMHgwRjVGLA0KLSAgICAweDU0MTIsIDB4NTQxMiwgMHgxNTAwLCAweDU0MTMsIDB4NTQxMywgMHgwRjMyLCAweDU0MTQsIDB4NTQxNCwgMHgyQTcyLA0KLSAgICAweDU0MTUsIDB4NTQxNSwgMHgwQTY3LCAweDU0MTYsIDB4NTQxNiwgMHgxNTAxLCAweDU0MTcsIDB4NTQxNywgMHgwQTk3LA0KLSAgICAweDU0MTgsIDB4NTQxQSwgMHgyQTczLCAweDU0MUIsIDB4NTQxQiwgMHgwOTJDLCAweDU0MUMsIDB4NTQxQywgMHgyQTc2LA0KLSAgICAweDU0MUQsIDB4NTQxRCwgMHgwQTI4LCAweDU0MUUsIDB4NTQxRSwgMHgwRTdELCAweDU0MUYsIDB4NTQxRiwgMHgxMDdFLA0KLSAgICAweDU0MjAsIDB4NTQyMCwgMHgwNjZBLCAweDU0MjEsIDB4NTQyMSwgMHgxNTA5LCAweDU0MjIsIDB4NTQyMiwgMHgyQTc3LA0KLSAgICAweDU0MjMsIDB4NTQyMywgMHgxNTBDLCAweDU0MjQsIDB4NTQyNSwgMHgyQTc4LCAweDU0MjYsIDB4NTQyNiwgMHgwNjhFLA0KLSAgICAweDU0MjcsIDB4NTQyNywgMHgwM0Q0LCAweDU0MjgsIDB4NTQyOCwgMHgwNjE1LCAweDU0MjksIDB4NTQyOSwgMHgwNjcxLA0KLSAgICAweDU0MkEsIDB4NTQyQSwgMHgyQTdBLCAweDU0MkIsIDB4NTQyQiwgMHgwNzYzLCAweDU0MkMsIDB4NTQyQywgMHgwRTUwLA0KLSAgICAweDU0MkQsIDB4NTQyRCwgMHgwOTYxLCAweDU0MkUsIDB4NTQyRSwgMHgwREE2LCAweDU0MkYsIDB4NTQyRiwgMHgwQzEzLA0KLSAgICAweDU0MzAsIDB4NTQzMCwgMHgyQTdCLCAweDU0MzEsIDB4NTQzMSwgMHgxMUE3LCAweDU0MzIsIDB4NTQzMiwgMHgxNTBELA0KLSAgICAweDU0MzMsIDB4NTQzMywgMHgyQTdDLCAweDU0MzQsIDB4NTQzNCwgMHgwRUYxLCAweDU0MzUsIDB4NTQzNSwgMHgwNEQ4LA0KLSAgICAweDU0MzYsIDB4NTQzNywgMHgyQTdELCAweDU0MzgsIDB4NTQzOCwgMHgwRjBCLCAweDU0MzksIDB4NTQzOSwgMHgwNTM4LA0KLSAgICAweDU0M0EsIDB4NTQzQSwgMHgyQTdGLCAweDU0M0IsIDB4NTQzQiwgMHgwRUQ2LCAweDU0M0MsIDB4NTQzQywgMHgwN0E3LA0KLSAgICAweDU0M0QsIDB4NTQzRCwgMHgyQTgwLCAweDU0M0UsIDB4NTQzRSwgMHgwRUYwLCAweDU0M0YsIDB4NTQzRiwgMHgyQTgxLA0KLSAgICAweDU0NDAsIDB4NTQ0MCwgMHgwRkU2LCAweDU0NDEsIDB4NTQ0MiwgMHgyQTgyLCAweDU0NDMsIDB4NTQ0MywgMHgxNTA4LA0KLSAgICAweDU0NDQsIDB4NTQ0NSwgMHgyQTg0LCAweDU0NDYsIDB4NTQ0NiwgMHgwNTc3LCAweDU0NDcsIDB4NTQ0NywgMHgyQTg2LA0KLSAgICAweDU0NDgsIDB4NTQ0OCwgMHgwNEVGLCAweDU0NDksIDB4NTQ0OSwgMHgyQTg3LCAweDU0NEEsIDB4NTQ0QSwgMHgwNkUxLA0KLSAgICAweDU0NEIsIDB4NTQ0QiwgMHgxNTAzLCAweDU0NEMsIDB4NTQ0RiwgMHgyQTg4LCAweDU0NTAsIDB4NTQ1MCwgMHgwQjI4LA0KLSAgICAweDU0NTEsIDB4NTQ1MSwgMHgyQThDLCAweDU0NTIsIDB4NTQ1NCwgMHgxNTA0LCAweDU0NTUsIDB4NTQ1NSwgMHgwQjdDLA0KLSAgICAweDU0NTYsIDB4NTQ1NiwgMHgxNTA3LCAweDU0NTcsIDB4NTQ1NywgMHgxNTBBLCAweDU0NTgsIDB4NTQ1OCwgMHgxMEY0LA0KLSAgICAweDU0NTksIDB4NTQ1OSwgMHgxNTBCLCAweDU0NUEsIDB4NTQ1QSwgMHgyQThELCAweDU0NUIsIDB4NTQ1QiwgMHgwQzM3LA0KLSAgICAweDU0NUMsIDB4NTQ1QywgMHgwRUU3LCAweDU0NUQsIDB4NTQ2MSwgMHgyQThFLCAweDU0NjIsIDB4NTQ2MiwgMHgwQjNCLA0KLSAgICAweDU0NjMsIDB4NTQ2MywgMHgyQTkzLCAweDU0NjQsIDB4NTQ2NCwgMHgxNTEyLCAweDU0NjUsIDB4NTQ2NSwgMHgyQTk0LA0KLSAgICAweDU0NjYsIDB4NTQ2NiwgMHgxNTE3LCAweDU0NjcsIDB4NTQ2NywgMHgyQTk1LCAweDU0NjgsIDB4NTQ2OCwgMHgxMURCLA0KLSAgICAweDU0NjksIDB4NTQ3MCwgMHgyQTk2LCAweDU0NzEsIDB4NTQ3MSwgMHgxNTExLCAweDU0NzIsIDB4NTQ3MiwgMHgxNTIyLA0KLSAgICAweDU0NzMsIDB4NTQ3MywgMHgwRUM1LCAweDU0NzQsIDB4NTQ3NCwgMHgyQTlFLCAweDU0NzUsIDB4NTQ3NSwgMHgwNzdFLA0KLSAgICAweDU0NzYsIDB4NTQ3NiwgMHgxNTE2LCAweDU0NzcsIDB4NTQ3NywgMHgxNTEwLCAweDU0NzgsIDB4NTQ3OCwgMHgwQjlGLA0KLSAgICAweDU0NzksIDB4NTQ3QSwgMHgyQTlGLCAweDU0N0IsIDB4NTQ3QiwgMHgwRDI0LCAweDU0N0MsIDB4NTQ3QywgMHgwN0FCLA0KLSAgICAweDU0N0QsIDB4NTQ3RCwgMHgwQjAxLCAweDU0N0UsIDB4NTQ3RiwgMHgyQUExLCAweDU0ODAsIDB4NTQ4MCwgMHgwOTA2LA0KLSAgICAweDU0ODEsIDB4NTQ4MSwgMHgyQUEzLCAweDU0ODIsIDB4NTQ4MiwgMHgxNTBFLCAweDU0ODMsIDB4NTQ4MywgMHgyQUE0LA0KLSAgICAweDU0ODQsIDB4NTQ4NCwgMHgxNTE1LCAweDU0ODUsIDB4NTQ4NSwgMHgyQUE1LCAweDU0ODYsIDB4NTQ4NiwgMHgwQjk5LA0KLSAgICAweDU0ODcsIDB4NTQ4QSwgMHgyQUE2LCAweDU0OEIsIDB4NTQ4QiwgMHgxMTQ3LCAweDU0OEMsIDB4NTQ4QywgMHgwNzg0LA0KLSAgICAweDU0OEQsIDB4NTQ4RCwgMHgyQUFBLCAweDU0OEUsIDB4NTQ4RSwgMHgwOEZCLCAweDU0OEYsIDB4NTQ4RiwgMHgxMEEyLA0KLSAgICAweDU0OTAsIDB4NTQ5MCwgMHgwNkJCLCAweDU0OTEsIDB4NTQ5MSwgMHgyQUFCLCAweDU0OTIsIDB4NTQ5MiwgMHgxMUUzLA0KLSAgICAweDU0OTMsIDB4NTQ5MywgMHgyQUFDLCAweDU0OTQsIDB4NTQ5NCwgMHgxNTBGLCAweDU0OTUsIDB4NTQ5NSwgMHgwNzE3LA0KLSAgICAweDU0OTYsIDB4NTQ5NiwgMHgwOTM0LCAweDU0OTcsIDB4NTQ5OCwgMHgyQUFELCAweDU0OTksIDB4NTQ5OSwgMHgwQTQ1LA0KLSAgICAweDU0OUEsIDB4NTQ5QiwgMHgxNTEzLCAweDU0OUMsIDB4NTQ5QywgMHgyQUFGLCAweDU0OUQsIDB4NTQ5RCwgMHgxNTE4LA0KLSAgICAweDU0OUUsIDB4NTRBMiwgMHgyQUIwLCAweDU0QTMsIDB4NTRBMywgMHgxNTIzLCAweDU0QTQsIDB4NTRBNCwgMHgxNTJELA0KLSAgICAweDU0QTUsIDB4NTRBNSwgMHgyQUI1LCAweDU0QTYsIDB4NTRBNiwgMHgxNTFGLCAweDU0QTcsIDB4NTRBNywgMHgxNTFFLA0KLSAgICAweDU0QTgsIDB4NTRBOCwgMHgxMjI2LCAweDU0QTksIDB4NTRBQSwgMHgxNTJCLCAweDU0QUIsIDB4NTRBQiwgMHgxNzY3LA0KLSAgICAweDU0QUMsIDB4NTRBQywgMHgxMDJFLCAweDU0QUQsIDB4NTRBRCwgMHgxNTFBLCAweDU0QUUsIDB4NTRBRSwgMHgyQUI2LA0KLSAgICAweDU0QUYsIDB4NTRBRiwgMHgwOTM2LCAweDU0QjAsIDB4NTRCMCwgMHgyQUI3LCAweDU0QjEsIDB4NTRCMSwgMHgxMTFFLA0KLSAgICAweDU0QjIsIDB4NTRCMiwgMHgyQUI4LCAweDU0QjMsIDB4NTRCMywgMHgwOTU1LCAweDU0QjQsIDB4NTRCNCwgMHgxNTFDLA0KLSAgICAweDU0QjUsIDB4NTRCNywgMHgyQUI5LCAweDU0QjgsIDB4NTRCOCwgMHgwRjM5LCAweDU0QjksIDB4NTRCQSwgMHgyQUJDLA0KLSAgICAweDU0QkIsIDB4NTRCQiwgMHgxNTI1LCAweDU0QkMsIDB4NTRCQywgMHgyMzZELCAweDU0QkQsIDB4NTRCRCwgMHgwRkYzLA0KLSAgICAweDU0QkUsIDB4NTRCRSwgMHgyQUJFLCAweDU0QkYsIDB4NTRCRiwgMHgxNTI2LCAweDU0QzAsIDB4NTRDMCwgMHgwM0IyLA0KLSAgICAweDU0QzEsIDB4NTRDMSwgMHgwQkQ2LCAweDU0QzIsIDB4NTRDMiwgMHgxNTFCLCAweDU0QzMsIDB4NTRDMywgMHgyQUJGLA0KLSAgICAweDU0QzQsIDB4NTRDNCwgMHgwNzlDLCAweDU0QzUsIDB4NTRDNSwgMHgyQUMwLCAweDU0QzYsIDB4NTRDNiwgMHgwNjFFLA0KLSAgICAweDU0QzcsIDB4NTRDNywgMHgwRThDLCAweDU0QzgsIDB4NTRDOCwgMHgwNzU3LCAweDU0QzksIDB4NTRDOSwgMHgxMTE4LA0KLSAgICAweDU0Q0EsIDB4NTRDQiwgMHgyQUMxLCAweDU0Q0MsIDB4NTRDQywgMHgxNTI3LCAweDU0Q0QsIDB4NTRDRCwgMHgwRjU5LA0KLSAgICAweDU0Q0UsIDB4NTRDRSwgMHgwM0IwLCAweDU0Q0YsIDB4NTRDRiwgMHgxNTJGLCAweDU0RDAsIDB4NTREMCwgMHgxNTE5LA0KLSAgICAweDU0RDEsIDB4NTREMSwgMHgwRkVGLCAweDU0RDIsIDB4NTREMiwgMHgxNTFELCAweDU0RDMsIDB4NTRENCwgMHgxNTIwLA0KLSAgICAweDU0RDUsIDB4NTRENSwgMHgxNTI0LCAweDU0RDYsIDB4NTRENiwgMHgyQUMzLCAweDU0RDcsIDB4NTRENywgMHgwN0JFLA0KLSAgICAweDU0RDgsIDB4NTREOCwgMHgyQUM0LCAweDU0RDksIDB4NTREQSwgMHgxNTI4LCAweDU0REIsIDB4NTREQiwgMHgyQUM1LA0KLSAgICAweDU0REMsIDB4NTREQywgMHgxNTJBLCAweDU0REQsIDB4NTRERCwgMHgxNTJFLCAweDU0REUsIDB4NTRERSwgMHgxNTMwLA0KLSAgICAweDU0REYsIDB4NTRERiwgMHgxMDk5LCAweDU0RTAsIDB4NTRFMCwgMHgyQUM2LCAweDU0RTEsIDB4NTRFMSwgMHgyMjQ3LA0KLSAgICAweDU0RTIsIDB4NTRFNCwgMHgyQUM3LCAweDU0RTUsIDB4NTRFNSwgMHgwNkUyLCAweDU0RTYsIDB4NTRFNiwgMHgwQjc3LA0KLSAgICAweDU0RTcsIDB4NTRFNywgMHgxNTMyLCAweDU0RTgsIDB4NTRFOCwgMHgwRDEzLCAweDU0RTksIDB4NTRFOSwgMHgwOUYxLA0KLSAgICAweDU0RUEsIDB4NTRFQSwgMHgwQjI3LCAweDU0RUIsIDB4NTRFQywgMHgyQUNBLCAweDU0RUQsIDB4NTRFRCwgMHgwOTZCLA0KLSAgICAweDU0RUUsIDB4NTRFRSwgMHgwRjY1LCAweDU0RUYsIDB4NTRGMSwgMHgyQUNDLCAweDU0RjIsIDB4NTRGMiwgMHgxMTdELA0KLSAgICAweDU0RjMsIDB4NTRGMywgMHgxNTM2LCAweDU0RjQsIDB4NTRGOSwgMHgyQUNGLCAweDU0RkEsIDB4NTRGQSwgMHgwNDdGLA0KLSAgICAweDU0RkIsIDB4NTRGQiwgMHgyQUQ1LCAweDU0RkMsIDB4NTRGQywgMHgwNzk2LCAweDU0RkQsIDB4NTRGRCwgMHgxNTM0LA0KLSAgICAweDU0RkUsIDB4NTRGRSwgMHgyQUQ2LCAweDU0RkYsIDB4NTRGRiwgMHgxMzkxLCAweDU1MDAsIDB4NTUwMCwgMHgyQUQ3LA0KLSAgICAweDU1MDEsIDB4NTUwMSwgMHgxMDBELCAweDU1MDIsIDB4NTUwMywgMHgyQUQ4LCAweDU1MDQsIDB4NTUwNCwgMHgyMzZDLA0KLSAgICAweDU1MDUsIDB4NTUwNSwgMHgyQURBLCAweDU1MDYsIDB4NTUwNiwgMHgwREU5LCAweDU1MDcsIDB4NTUwNywgMHgwNTQwLA0KLSAgICAweDU1MDgsIDB4NTUwOCwgMHgyQURCLCAweDU1MDksIDB4NTUwOSwgMHgwM0IxLCAweDU1MEEsIDB4NTUwRSwgMHgyQURDLA0KLSAgICAweDU1MEYsIDB4NTUwRiwgMHgxNTM5LCAweDU1MTAsIDB4NTUxMCwgMHgwRTE5LCAweDU1MTEsIDB4NTUxMSwgMHgxNTNBLA0KLSAgICAweDU1MTIsIDB4NTUxMywgMHgyQUUxLCAweDU1MTQsIDB4NTUxNCwgMHgxNTM1LCAweDU1MTUsIDB4NTUxQSwgMHgyQUUzLA0KLSAgICAweDU1MUIsIDB4NTUxQiwgMHgxNTMxLCAweDU1MUMsIDB4NTUxRiwgMHgyQUU5LCAweDU1MjAsIDB4NTUyMCwgMHgxNTMzLA0KLSAgICAweDU1MjEsIDB4NTUyMSwgMHgyQUVELCAweDU1MjIsIDB4NTUyMywgMHgxNTM3LCAweDU1MjQsIDB4NTUyNCwgMHgwN0QyLA0KLSAgICAweDU1MjUsIDB4NTUyNiwgMHgyQUVFLCAweDU1MjcsIDB4NTUyNywgMHgxNTNCLCAweDU1MjgsIDB4NTUyOSwgMHgyQUYwLA0KLSAgICAweDU1MkEsIDB4NTUyQSwgMHgxNTNDLCAweDU1MkIsIDB4NTUyQiwgMHgyQUYyLCAweDU1MkMsIDB4NTUyQywgMHgwN0I4LA0KLSAgICAweDU1MkQsIDB4NTUyRCwgMHgyQUYzLCAweDU1MkUsIDB4NTUyRSwgMHgwRDcyLCAweDU1MkYsIDB4NTUyRiwgMHgwRUI3LA0KLSAgICAweDU1MzAsIDB4NTUzMCwgMHgxNTRELCAweDU1MzEsIDB4NTUzMSwgMHgwNENGLCAweDU1MzIsIDB4NTUzMiwgMHgyQUY0LA0KLSAgICAweDU1MzMsIDB4NTUzMywgMHgxNTRDLCAweDU1MzQsIDB4NTUzNiwgMHgyQUY1LCAweDU1MzcsIDB4NTUzNywgMHgxNTQ3LA0KLSAgICAweDU1MzgsIDB4NTUzQiwgMHgyQUY4LCAweDU1M0MsIDB4NTUzQywgMHgxNTQ2LCAweDU1M0QsIDB4NTUzRCwgMHgyQUZDLA0KLSAgICAweDU1M0UsIDB4NTUzRSwgMHgwRThBLCAweDU1M0YsIDB4NTUzRiwgMHgxNTQ0LCAweDU1NDAsIDB4NTU0MCwgMHgyQUZELA0KLSAgICAweDU1NDEsIDB4NTU0MSwgMHgxNTQyLCAweDU1NDIsIDB4NTU0MiwgMHgyQUZFLCAweDU1NDMsIDB4NTU0MywgMHgwOTVELA0KLSAgICAweDU1NDQsIDB4NTU0NCwgMHgxMjIxLCAweDU1NDUsIDB4NTU0NSwgMHgyQUZGLCAweDU1NDYsIDB4NTU0NiwgMHgwRDA1LA0KLSAgICAweDU1NDcsIDB4NTU0OCwgMHgyQjAwLCAweDU1NDksIDB4NTU0OSwgMHgxNTQwLCAweDU1NEEsIDB4NTU0QSwgMHgwM0FDLA0KLSAgICAweDU1NEIsIDB4NTU0RSwgMHgyQjAyLCAweDU1NEYsIDB4NTU0RiwgMHgyMTlDLCAweDU1NTAsIDB4NTU1MCwgMHgxNTQ1LA0KLSAgICAweDU1NTEsIDB4NTU1MiwgMHgyQjA2LCAweDU1NTMsIDB4NTU1MywgMHgyMEM5LCAweDU1NTQsIDB4NTU1NCwgMHgyQjA4LA0KLSAgICAweDU1NTUsIDB4NTU1NSwgMHgxNTQzLCAweDU1NTYsIDB4NTU1NiwgMHgxNTQ4LCAweDU1NTcsIDB4NTU1QiwgMHgyQjA5LA0KLSAgICAweDU1NUMsIDB4NTU1QywgMHgxNTRFLCAweDU1NUQsIDB4NTU1RCwgMHgyQjBFLCAweDU1NUUsIDB4NTU1RSwgMHgyMUYwLA0KLSAgICAweDU1NUYsIDB4NTU2MCwgMHgyQjBGLCAweDU1NjEsIDB4NTU2MSwgMHgwNjY1LCAweDU1NjIsIDB4NTU2MywgMHgyQjExLA0KLSAgICAweDU1NjQsIDB4NTU2NCwgMHgwQkMwLCAweDU1NjUsIDB4NTU2NSwgMHgwQ0VGLCAweDU1NjYsIDB4NTU2NiwgMHgwOTlELA0KLSAgICAweDU1NjcsIDB4NTU2NywgMHgxNTNELCAweDU1NjgsIDB4NTU2OSwgMHgyQjEzLCAweDU1NkEsIDB4NTU2QSwgMHgwQjdGLA0KLSAgICAweDU1NkIsIDB4NTU2QiwgMHgyQjE1LCAweDU1NkMsIDB4NTU2QywgMHgxMjdBLCAweDU1NkQsIDB4NTU2RCwgMHgxNTQxLA0KLSAgICAweDU1NkUsIDB4NTU2RSwgMHgwQjU5LCAweDU1NkYsIDB4NTU3NCwgMHgyQjE2LCAweDU1NzUsIDB4NTU3NywgMHgxNTQ5LA0KLSAgICAweDU1NzgsIDB4NTU3OCwgMHgwRjcwLCAweDU1NzksIDB4NTU3QSwgMHgyQjFDLCAweDU1N0IsIDB4NTU3QiwgMHgxNTVBLA0KLSAgICAweDU1N0MsIDB4NTU3QywgMHgwRTM3LCAweDU1N0QsIDB4NTU3RCwgMHgyQjFFLCAweDU1N0UsIDB4NTU3RSwgMHgxNTU3LA0KLSAgICAweDU1N0YsIDB4NTU3RiwgMHgyQjFGLCAweDU1ODAsIDB4NTU4MCwgMHgwOTMzLCAweDU1ODEsIDB4NTU4MSwgMHgxNTU1LA0KLSAgICAweDU1ODIsIDB4NTU4MiwgMHgwRUM4LCAweDU1ODMsIDB4NTU4MywgMHgxNTUxLCAweDU1ODQsIDB4NTU4NCwgMHgwQ0ZGLA0KLSAgICAweDU1ODUsIDB4NTU4NiwgMHgyQjIwLCAweDU1ODcsIDB4NTU4NywgMHgwOTk5LCAweDU1ODgsIDB4NTU4OCwgMHgxNTU0LA0KLSAgICAweDU1ODksIDB4NTU4OSwgMHgwN0E0LCAweDU1OEEsIDB4NTU4QSwgMHgwNzY3LCAweDU1OEIsIDB4NTU4QiwgMHgxNTRGLA0KLSAgICAweDU1OEMsIDB4NTU4RSwgMHgyQjIyLCAweDU1OEYsIDB4NTU4RiwgMHgxNTNFLCAweDU1OTAsIDB4NTU5MCwgMHgyQjI1LA0KLSAgICAweDU1OTEsIDB4NTU5MSwgMHgxNTU5LCAweDU1OTIsIDB4NTU5MywgMHgyQjI2LCAweDU1OTQsIDB4NTU5NCwgMHgxNTVFLA0KLSAgICAweDU1OTUsIDB4NTU5NywgMHgyQjI4LCAweDU1OTgsIDB4NTU5OCwgMHgwNTMwLCAweDU1OTksIDB4NTU5OSwgMHgxNTVGLA0KLSAgICAweDU1OUEsIDB4NTU5QiwgMHgyQjJCLCAweDU1OUMsIDB4NTU5QywgMHgwRjFGLCAweDU1OUQsIDB4NTU5RCwgMHgwNzdGLA0KLSAgICAweDU1OUUsIDB4NTU5RSwgMHgyQjJELCAweDU1OUYsIDB4NTU5RiwgMHgxNTU2LCAweDU1QTAsIDB4NTVBNiwgMHgyQjJFLA0KLSAgICAweDU1QTcsIDB4NTVBNywgMHgwRkM1LCAweDU1QTgsIDB4NTVBOSwgMHgyQjM1LCAweDU1QUEsIDB4NTVBQSwgMHgyMTBCLA0KLSAgICAweDU1QUIsIDB4NTVBQiwgMHgyQjM3LCAweDU1QUMsIDB4NTVBQywgMHgyMERFLCAweDU1QUQsIDB4NTVBRCwgMHgyQjM4LA0KLSAgICAweDU1QUUsIDB4NTVBRSwgMHgxRUFBLCAweDU1QUYsIDB4NTVCMCwgMHgyQjM5LCAweDU1QjEsIDB4NTVCMSwgMHgxNTUyLA0KLSAgICAweDU1QjIsIDB4NTVCMiwgMHgyMjJDLCAweDU1QjMsIDB4NTVCMywgMHgxMTNFLCAweDU1QjQsIDB4NTVCNCwgMHgyQjNCLA0KLSAgICAweDU1QjUsIDB4NTVCNSwgMHgxNTNGLCAweDU1QjYsIDB4NTVCNiwgMHgyQjNDLCAweDU1QjcsIDB4NTVCNywgMHgwQkE4LA0KLSAgICAweDU1QjgsIDB4NTVCOCwgMHgyQjNELCAweDU1QjksIDB4NTVCOSwgMHgxNTUzLCAweDU1QkEsIDB4NTVCQSwgMHgyQjNFLA0KLSAgICAweDU1QkIsIDB4NTVCQiwgMHgxMERDLCAweDU1QkMsIDB4NTVCQywgMHgyQjNGLCAweDU1QkQsIDB4NTVCRSwgMHgxNTVDLA0KLSAgICAweDU1QkYsIDB4NTVDMywgMHgyQjQwLCAweDU1QzQsIDB4NTVDNCwgMHgxNTZBLCAweDU1QzUsIDB4NTVDNSwgMHgwRkFDLA0KLSAgICAweDU1QzYsIDB4NTVDNiwgMHgyMEQ4LCAweDU1QzcsIDB4NTVDNywgMHgyMkMwLCAweDU1QzgsIDB4NTVDOCwgMHgyQjQ1LA0KLSAgICAweDU1QzksIDB4NTVDOSwgMHgxNTYyLCAweDU1Q0EsIDB4NTVDQiwgMHgyQjQ2LCAweDU1Q0MsIDB4NTVDRCwgMHgxNTZGLA0KLSAgICAweDU1Q0UsIDB4NTVDRSwgMHgyMDZGLCAweDU1Q0YsIDB4NTVEMCwgMHgyQjQ4LCAweDU1RDEsIDB4NTVEMSwgMHgxNTY0LA0KLSAgICAweDU1RDIsIDB4NTVEMiwgMHgxNTUwLCAweDU1RDMsIDB4NTVEMywgMHgwQ0RELCAweDU1RDQsIDB4NTVENCwgMHgxNTY3LA0KLSAgICAweDU1RDUsIDB4NTVENSwgMHgyQjRBLCAweDU1RDYsIDB4NTVENiwgMHgxNTU4LCAweDU1RDcsIDB4NTVEOSwgMHgyQjRCLA0KLSAgICAweDU1REEsIDB4NTVEQSwgMHgyMUExLCAweDU1REIsIDB4NTVEQiwgMHgyQjRFLCAweDU1REMsIDB4NTVEQywgMHgwRDVGLA0KLSAgICAweDU1REQsIDB4NTVERCwgMHgxNTY5LCAweDU1REUsIDB4NTVERSwgMHgyQjRGLCAweDU1REYsIDB4NTVERiwgMHgxNTVCLA0KLSAgICAweDU1RTAsIDB4NTVFMCwgMHgyQjUwLCAweDU1RTEsIDB4NTVFMSwgMHgwRURBLCAweDU1RTIsIDB4NTVFMiwgMHgyQjUxLA0KLSAgICAweDU1RTMsIDB4NTVFMywgMHgwREI4LCAweDU1RTQsIDB4NTVFNCwgMHgxNTczLCAweDU1RTUsIDB4NTVFNSwgMHgxNTZDLA0KLSAgICAweDU1RTYsIDB4NTVFNiwgMHgxNTY4LCAweDU1RTcsIDB4NTVFNywgMHgyQjUyLCAweDU1RTgsIDB4NTVFOCwgMHgxNTcxLA0KLSAgICAweDU1RTksIDB4NTVFOSwgMHgyMzc5LCAweDU1RUEsIDB4NTVFQSwgMHgxNTYwLCAweDU1RUIsIDB4NTVFQywgMHgxNTY1LA0KLSAgICAweDU1RUQsIDB4NTVFRSwgMHgyQjUzLCAweDU1RUYsIDB4NTVFRiwgMHgxNTZCLCAweDU1RjAsIDB4NTVGMSwgMHgyQjU1LA0KLSAgICAweDU1RjIsIDB4NTVGMywgMHgxNTZELCAweDU1RjQsIDB4NTVGNCwgMHgyQjU3LCAweDU1RjUsIDB4NTVGNSwgMHgxNTcyLA0KLSAgICAweDU1RjYsIDB4NTVGNiwgMHgyMzcyLCAweDU1RjcsIDB4NTVGNywgMHgxNTYxLCAweDU1RjgsIDB4NTVGQywgMHgyQjU4LA0KLSAgICAweDU1RkQsIDB4NTVGRCwgMHgwREM5LCAweDU1RkUsIDB4NTVGRSwgMHgxNTdCLCAweDU1RkYsIDB4NTVGRiwgMHgyQjVELA0KLSAgICAweDU2MDAsIDB4NTYwMCwgMHgxNTdDLCAweDU2MDEsIDB4NTYwMSwgMHgxNTc4LCAweDU2MDIsIDB4NTYwNSwgMHgyQjVFLA0KLSAgICAweDU2MDYsIDB4NTYwNiwgMHgyMTZBLCAweDU2MDcsIDB4NTYwNywgMHgyQjYyLCAweDU2MDgsIDB4NTYwOCwgMHgxNTc2LA0KLSAgICAweDU2MDksIDB4NTYwOSwgMHgwODQxLCAweDU2MEEsIDB4NTYwQiwgMHgyQjYzLCAweDU2MEMsIDB4NTYwQywgMHgxNTc3LA0KLSAgICAweDU2MEQsIDB4NTYwRCwgMHgyMzdDLCAweDU2MEUsIDB4NTYwRSwgMHgwNkJELCAweDU2MEYsIDB4NTYwRiwgMHgxMjdCLA0KLSAgICAweDU2MTAsIDB4NTYxMywgMHgyQjY1LCAweDU2MTQsIDB4NTYxNCwgMHgyMEIwLCAweDU2MTUsIDB4NTYxNSwgMHgyQjY5LA0KLSAgICAweDU2MTYsIDB4NTYxNiwgMHgyMzdBLCAweDU2MTcsIDB4NTYxNywgMHgxRTc0LCAweDU2MTgsIDB4NTYxOCwgMHgwRkI1LA0KLSAgICAweDU2MTksIDB4NTYxQSwgMHgyQjZBLCAweDU2MUIsIDB4NTYxQiwgMHgwQTk2LCAweDU2MUMsIDB4NTYxQywgMHgyMzc3LA0KLSAgICAweDU2MUQsIDB4NTYxRCwgMHgyQjZDLCAweDU2MUUsIDB4NTYxRSwgMHgxNTc1LCAweDU2MUYsIDB4NTYxRiwgMHgxNTYzLA0KLSAgICAweDU2MjAsIDB4NTYyMiwgMHgyQjZELCAweDU2MjMsIDB4NTYyMywgMHgxNTdBLCAweDU2MjQsIDB4NTYyNCwgMHgxNTc5LA0KLSAgICAweDU2MjUsIDB4NTYyNiwgMHgyQjcwLCAweDU2MjcsIDB4NTYyNywgMHgxNTdELCAweDU2MjgsIDB4NTYyOCwgMHgyQjcyLA0KLSAgICAweDU2MjksIDB4NTYyOSwgMHgxRjRDLCAweDU2MkEsIDB4NTYyQiwgMHgyQjczLCAweDU2MkMsIDB4NTYyQywgMHgxNTgyLA0KLSAgICAweDU2MkQsIDB4NTYyRCwgMHgxNTdFLCAweDU2MkUsIDB4NTYyRSwgMHgyMzc4LCAweDU2MkYsIDB4NTYyRiwgMHgyMUNGLA0KLSAgICAweDU2MzAsIDB4NTYzMCwgMHgyMzY4LCAweDU2MzEsIDB4NTYzMSwgMHgxMUY1LCAweDU2MzIsIDB4NTYzMiwgMHgwNEQ1LA0KLSAgICAweDU2MzMsIDB4NTYzMywgMHgyQjc1LCAweDU2MzQsIDB4NTYzNCwgMHgxMjQ5LCAweDU2MzUsIDB4NTYzNSwgMHgyMzcxLA0KLSAgICAweDU2MzYsIDB4NTYzNiwgMHgwREIwLCAweDU2MzcsIDB4NTYzNywgMHgyQjc2LCAweDU2MzgsIDB4NTYzOCwgMHgyMzY5LA0KLSAgICAweDU2MzksIDB4NTYzOSwgMHgxNTgwLCAweDU2M0EsIDB4NTYzQSwgMHgyQjc3LCAweDU2M0IsIDB4NTYzQiwgMHgwRjBBLA0KLSAgICAweDU2M0MsIDB4NTYzRSwgMHgyQjc4LCAweDU2M0YsIDB4NTYzRiwgMHgwNzkwLCAweDU2NDAsIDB4NTY0MCwgMHgyQjdCLA0KLSAgICAweDU2NDEsIDB4NTY0MSwgMHgyNjc0LCAweDU2NDIsIDB4NTY0QiwgMHgyQjdDLCAweDU2NEMsIDB4NTY0QywgMHgxNTg3LA0KLSAgICAweDU2NEQsIDB4NTY0RCwgMHgxNTgzLCAweDU2NEUsIDB4NTY0RSwgMHgxMDM0LCAweDU2NEYsIDB4NTY1MywgMHgyQjg2LA0KLSAgICAweDU2NTQsIDB4NTY1NCwgMHgxNTg4LCAweDU2NTUsIDB4NTY1NiwgMHgyQjhCLCAweDU2NTcsIDB4NTY1NywgMHgxNTgxLA0KLSAgICAweDU2NTgsIDB4NTY1OCwgMHgxNTdGLCAweDU2NTksIDB4NTY1OSwgMHgxNTg1LCAweDU2NUEsIDB4NTY1QiwgMHgyQjhELA0KLSAgICAweDU2NUMsIDB4NTY1QywgMHgxNTg2LCAweDU2NUQsIDB4NTY1RCwgMHgyMzZGLCAweDU2NUUsIDB4NTY1RiwgMHgyQjhGLA0KLSAgICAweDU2NjAsIDB4NTY2MCwgMHgyMzcwLCAweDU2NjEsIDB4NTY2MSwgMHgyQjkxLCAweDU2NjIsIDB4NTY2MiwgMHgxNTg0LA0KLSAgICAweDU2NjMsIDB4NTY2MywgMHgyQjkyLCAweDU2NjQsIDB4NTY2NCwgMHgxNThBLCAweDU2NjUsIDB4NTY2NSwgMHgyMzc2LA0KLSAgICAweDU2NjYsIDB4NTY2NiwgMHgyMzczLCAweDU2NjcsIDB4NTY2NywgMHgyQjkzLCAweDU2NjgsIDB4NTY2OCwgMHgwQzE2LA0KLSAgICAweDU2NjksIDB4NTY2OSwgMHgxMjYyLCAweDU2NkEsIDB4NTY2QSwgMHgxMTJFLCAweDU2NkIsIDB4NTY2QiwgMHgxNThDLA0KLSAgICAweDU2NkMsIDB4NTY2QywgMHgwRDYwLCAweDU2NkQsIDB4NTY2RSwgMHgyQjk0LCAweDU2NkYsIDB4NTY2RiwgMHgyMzdGLA0KLSAgICAweDU2NzAsIDB4NTY3MCwgMHgyQjk2LCAweDU2NzEsIDB4NTY3MSwgMHgxNThCLCAweDU2NzIsIDB4NTY3MiwgMHgyMzc0LA0KLSAgICAweDU2NzMsIDB4NTY3MywgMHgyQjk3LCAweDU2NzQsIDB4NTY3NCwgMHgyMEI1LCAweDU2NzUsIDB4NTY3NSwgMHgyQjk4LA0KLSAgICAweDU2NzYsIDB4NTY3NiwgMHgwNkJDLCAweDU2NzcsIDB4NTY3NywgMHgyQjk5LCAweDU2NzgsIDB4NTY3OCwgMHgxRURCLA0KLSAgICAweDU2NzksIDB4NTY3OSwgMHgyNjcyLCAweDU2N0EsIDB4NTY3QSwgMHgyQjlBLCAweDU2N0IsIDB4NTY3QywgMHgxNThELA0KLSAgICAweDU2N0QsIDB4NTY3RiwgMHgyQjlCLCAweDU2ODAsIDB4NTY4MCwgMHgyMzZFLCAweDU2ODEsIDB4NTY4NCwgMHgyQjlFLA0KLSAgICAweDU2ODUsIDB4NTY4NSwgMHgxNThGLCAweDU2ODYsIDB4NTY4NiwgMHgxNTg5LCAweDU2ODcsIDB4NTY4NywgMHgyMUI3LA0KLSAgICAweDU2ODgsIDB4NTY4QiwgMHgyQkEyLCAweDU2OEMsIDB4NTY4QywgMHgyMzc1LCAweDU2OEQsIDB4NTY4RCwgMHgyQkE2LA0KLSAgICAweDU2OEUsIDB4NTY4RSwgMHgwNzc2LCAweDU2OEYsIDB4NTY4RiwgMHgwRTNBLCAweDU2OTAsIDB4NTY5MiwgMHgyQkE3LA0KLSAgICAweDU2OTMsIDB4NTY5MywgMHgxNTkwLCAweDU2OTQsIDB4NTY5NCwgMHgyQkFBLCAweDU2OTUsIDB4NTY5NSwgMHgyMzgyLA0KLSAgICAweDU2OTYsIDB4NTY5OCwgMHgyQkFCLCAweDU2OTksIDB4NTY5OSwgMHgyMDlFLCAweDU2OUEsIDB4NTZBMiwgMHgyQkFFLA0KLSAgICAweDU2QTMsIDB4NTZBMywgMHgwRjY2LCAweDU2QTQsIDB4NTZBNSwgMHgyQkI3LCAweDU2QTYsIDB4NTZBNiwgMHgyMzZCLA0KLSAgICAweDU2QTcsIDB4NTZBNywgMHgyQkI5LCAweDU2QTgsIDB4NTZBOCwgMHgyMDM5LCAweDU2QTksIDB4NTZBRCwgMHgyQkJBLA0KLSAgICAweDU2QUUsIDB4NTZBRSwgMHgyNjlGLCAweDU2QUYsIDB4NTZBRiwgMHgxNTkxLCAweDU2QjAsIDB4NTZCMiwgMHgyQkJGLA0KLSAgICAweDU2QjMsIDB4NTZCMywgMHgyMzdELCAweDU2QjQsIDB4NTZCNCwgMHgyMUY1LCAweDU2QjUsIDB4NTZCNSwgMHgyQkMyLA0KLSAgICAweDU2QjYsIDB4NTZCNiwgMHgyMzgxLCAweDU2QjcsIDB4NTZCNywgMHgwQzlELCAweDU2QjgsIDB4NTZCQiwgMHgyQkMzLA0KLSAgICAweDU2QkMsIDB4NTZCQywgMHgwODkxLCAweDU2QkQsIDB4NTZCRiwgMHgyQkM3LCAweDU2QzAsIDB4NTZDMCwgMHgyMzdCLA0KLSAgICAweDU2QzEsIDB4NTZDMSwgMHgyMzdFLCAweDU2QzIsIDB4NTZDMiwgMHgyMUNDLCAweDU2QzMsIDB4NTZDNCwgMHgyQkNBLA0KLSAgICAweDU2QzUsIDB4NTZDNSwgMHgyMkRCLCAweDU2QzYsIDB4NTZDNywgMHgyQkNDLCAweDU2QzgsIDB4NTZDOCwgMHgyMzZBLA0KLSAgICAweDU2QzksIDB4NTZDOSwgMHgyNjg5LCAweDU2Q0EsIDB4NTZDQSwgMHgwQjM1LCAweDU2Q0IsIDB4NTZDQiwgMHgyQkNFLA0KLSAgICAweDU2Q0MsIDB4NTZDQywgMHgyNjk3LCAweDU2Q0QsIDB4NTZEMCwgMHgyQkNGLCAweDU2RDEsIDB4NTZEMSwgMHgyMkExLA0KLSAgICAweDU2RDIsIDB4NTZEMywgMHgyQkQzLCAweDU2RDQsIDB4NTZENCwgMHgxNTkyLCAweDU2RDUsIDB4NTZENiwgMHgyQkQ1LA0KLSAgICAweDU2RDcsIDB4NTZENywgMHgxNTkzLCAweDU2RDgsIDB4NTZEOSwgMHgyQkQ3LCAweDU2REEsIDB4NTZEQSwgMHgwQzcxLA0KLSAgICAweDU2REIsIDB4NTZEQiwgMHgwREI5LCAweDU2REMsIDB4NTZEQywgMHgyQkQ5LCAweDU2REQsIDB4NTZERCwgMHgxNTk0LA0KLSAgICAweDU2REUsIDB4NTZERSwgMHgwN0VELCAweDU2REYsIDB4NTZERiwgMHgxMjZDLCAweDU2RTAsIDB4NTZFMCwgMHgxMDc5LA0KLSAgICAweDU2RTEsIDB4NTZFMSwgMHgxNTk1LCAweDU2RTIsIDB4NTZFMiwgMHgwRTc2LCAweDU2RTMsIDB4NTZFMywgMHgyQkRBLA0KLSAgICAweDU2RTQsIDB4NTZFNCwgMHgwNjE5LCAweDU2RTUsIDB4NTZFQSwgMHgyQkRCLCAweDU2RUIsIDB4NTZFQiwgMHgxNTk3LA0KLSAgICAweDU2RUMsIDB4NTZFQywgMHgyQkUxLCAweDU2RUQsIDB4NTZFRCwgMHgxMEYzLCAweDU2RUUsIDB4NTZFRiwgMHgyQkUyLA0KLSAgICAweDU2RjAsIDB4NTZGMCwgMHgwOTkyLCAweDU2RjEsIDB4NTZGMSwgMHgwNTU0LCAweDU2RjIsIDB4NTZGMywgMHgyQkU0LA0KLSAgICAweDU2RjQsIDB4NTZGNCwgMHgwRUI2LCAweDU2RjUsIDB4NTZGNSwgMHgxNTk2LCAweDU2RjYsIDB4NTZGOCwgMHgyQkU2LA0KLSAgICAweDU2RjksIDB4NTZGOSwgMHgxNTk4LCAweDU2RkEsIDB4NTZGQSwgMHgwNzI1LCAweDU2RkIsIDB4NTZGQywgMHgyQkU5LA0KLSAgICAweDU2RkQsIDB4NTZGRCwgMHgwNzUzLCAweDU2RkUsIDB4NTZGRSwgMHgwRTZELCAweDU2RkYsIDB4NTZGRiwgMHgxNTk5LA0KLSAgICAweDU3MDAsIDB4NTcwMiwgMHgyQkVCLCAweDU3MDMsIDB4NTcwMywgMHgwQkYzLCAweDU3MDQsIDB4NTcwNCwgMHgxNTlBLA0KLSAgICAweDU3MDUsIDB4NTcwNSwgMHgyQkVFLCAweDU3MDYsIDB4NTcwNiwgMHgxMEY1LCAweDU3MDcsIDB4NTcwNywgMHgyMzgzLA0KLSAgICAweDU3MDgsIDB4NTcwOCwgMHgwQzgxLCAweDU3MDksIDB4NTcwOSwgMHgxNTlDLCAweDU3MEEsIDB4NTcwQSwgMHgxNTlCLA0KLSAgICAweDU3MEIsIDB4NTcwQiwgMHgxRjNELCAweDU3MEMsIDB4NTcwQywgMHgyQkVGLCAweDU3MEQsIDB4NTcwRCwgMHgyMThGLA0KLSAgICAweDU3MEUsIDB4NTcxMSwgMHgyQkYwLCAweDU3MTIsIDB4NTcxMiwgMHgyMjQ2LCAweDU3MTMsIDB4NTcxMywgMHgyMjQ4LA0KLSAgICAweDU3MTQsIDB4NTcxNSwgMHgyQkY0LCAweDU3MTYsIDB4NTcxNiwgMHgyMTdFLCAweDU3MTcsIDB4NTcxNywgMHgyQkY2LA0KLSAgICAweDU3MTgsIDB4NTcxOCwgMHgyMTgwLCAweDU3MTksIDB4NTcxQiwgMHgyQkY3LCAweDU3MUMsIDB4NTcxQywgMHgxNTlELA0KLSAgICAweDU3MUQsIDB4NTcxRSwgMHgyQkZBLCAweDU3MUYsIDB4NTcxRiwgMHgwRTcyLCAweDU3MjAsIDB4NTcyMiwgMHgyQkZDLA0KLSAgICAweDU3MjMsIDB4NTcyMywgMHgwRDNDLCAweDU3MjQsIDB4NTcyNywgMHgyQkZGLCAweDU3MjgsIDB4NTcyOCwgMHgxMTFELA0KLSAgICAweDU3MjksIDB4NTcyOSwgMHgxM0E3LCAweDU3MkEsIDB4NTcyQSwgMHgxM0E5LCAweDU3MkIsIDB4NTcyQiwgMHgyQzAzLA0KLSAgICAweDU3MkMsIDB4NTcyQywgMHgxM0E4LCAweDU3MkQsIDB4NTcyRCwgMHgwNzQwLCAweDU3MkUsIDB4NTcyRiwgMHgxM0FDLA0KLSAgICAweDU3MzAsIDB4NTczMCwgMHgwNUI5LCAweDU3MzEsIDB4NTczMiwgMHgyQzA0LCAweDU3MzMsIDB4NTczMywgMHgxM0FBLA0KLSAgICAweDU3MzQsIDB4NTczOCwgMHgyQzA2LCAweDU3MzksIDB4NTczOSwgMHgxM0FCLCAweDU3M0EsIDB4NTczQSwgMHgwNEM2LA0KLSAgICAweDU3M0IsIDB4NTczQiwgMHgxM0FGLCAweDU3M0MsIDB4NTczRCwgMHgyQzBCLCAweDU3M0UsIDB4NTczRSwgMHgwODBELA0KLSAgICAweDU3M0YsIDB4NTczRiwgMHgyQzBELCAweDU3NDAsIDB4NTc0MCwgMHgxMUI2LCAweDU3NDEsIDB4NTc0MSwgMHgyQzBFLA0KLSAgICAweDU3NDIsIDB4NTc0MiwgMHgxM0IwLCAweDU3NDMsIDB4NTc0NiwgMHgyQzBGLCAweDU3NDcsIDB4NTc0NywgMHgwOTI4LA0KLSAgICAweDU3NDgsIDB4NTc0OSwgMHgyQzEzLCAweDU3NEEsIDB4NTc0QSwgMHgwNjU4LCAweDU3NEIsIDB4NTc0QiwgMHgyQzE1LA0KLSAgICAweDU3NEMsIDB4NTc0QywgMHgxM0EwLCAweDU3NEQsIDB4NTc0RCwgMHgwRTAxLCAweDU3NEUsIDB4NTc0RSwgMHgwOTNGLA0KLSAgICAweDU3NEYsIDB4NTc0RiwgMHgwN0NBLCAweDU3NTAsIDB4NTc1MCwgMHgxMjU1LCAweDU3NTEsIDB4NTc1MSwgMHgwOTYwLA0KLSAgICAweDU3NTIsIDB4NTc1NiwgMHgyQzE2LCAweDU3NTcsIDB4NTc1NywgMHgwOTc2LCAweDU3NTgsIDB4NTc1OSwgMHgyQzFCLA0KLSAgICAweDU3NUEsIDB4NTc1QSwgMHgwODU0LCAweDU3NUIsIDB4NTc1QiwgMHgwRTA2LCAweDU3NUMsIDB4NTc1QywgMHgxM0FFLA0KLSAgICAweDU3NUQsIDB4NTc1RCwgMHgwM0RFLCAweDU3NUUsIDB4NTc1RSwgMHgwRUZBLCAweDU3NUYsIDB4NTc1RiwgMHgwNjc1LA0KLSAgICAweDU3NjAsIDB4NTc2MCwgMHgxMjE2LCAweDU3NjEsIDB4NTc2MSwgMHgwQkUxLCAweDU3NjIsIDB4NTc2MywgMHgyQzFELA0KLSAgICAweDU3NjQsIDB4NTc2NCwgMHgwOThGLCAweDU3NjUsIDB4NTc2NSwgMHgyQzFGLCAweDU3NjYsIDB4NTc2NiwgMHgwRTBDLA0KLSAgICAweDU3NjcsIDB4NTc2NywgMHgyQzIwLCAweDU3NjgsIDB4NTc2OCwgMHgxM0I3LCAweDU3NjksIDB4NTc2OSwgMHgxM0IxLA0KLSAgICAweDU3NkEsIDB4NTc2QSwgMHgwQkQ5LCAweDU3NkIsIDB4NTc2QiwgMHgxM0IzLCAweDU3NkMsIDB4NTc2QywgMHgyQzIxLA0KLSAgICAweDU3NkQsIDB4NTc2RCwgMHgxM0I4LCAweDU3NkUsIDB4NTc2RSwgMHgyQzIyLCAweDU3NkYsIDB4NTc2RiwgMHgwQkI4LA0KLSAgICAweDU3NzAsIDB4NTc3MiwgMHgyQzIzLCAweDU3NzMsIDB4NTc3MywgMHgxM0JBLCAweDU3NzQsIDB4NTc3NSwgMHgyQzI2LA0KLSAgICAweDU3NzYsIDB4NTc3NiwgMHgxM0I5LCAweDU3NzcsIDB4NTc3NywgMHgwOTRELCAweDU3NzgsIDB4NTc3QSwgMHgyQzI4LA0KLSAgICAweDU3N0IsIDB4NTc3QiwgMHgxM0I2LCAweDU3N0MsIDB4NTc3QywgMHgxM0I1LCAweDU3N0QsIDB4NTc4MSwgMHgyQzJCLA0KLSAgICAweDU3ODIsIDB4NTc4MiwgMHgwNTNDLCAweDU3ODMsIDB4NTc4MywgMHgwOTk3LCAweDU3ODQsIDB4NTc4NCwgMHgwQTQ5LA0KLSAgICAweDU3ODUsIDB4NTc4NSwgMHgxM0IyLCAweDU3ODYsIDB4NTc4NiwgMHgxM0I0LCAweDU3ODcsIDB4NTc4QSwgMHgyQzMwLA0KLSAgICAweDU3OEIsIDB4NTc4QiwgMHgwRjk4LCAweDU3OEMsIDB4NTc4QywgMHgxM0JELCAweDU3OEQsIDB4NTc5MSwgMHgyQzM0LA0KLSAgICAweDU3OTIsIDB4NTc5MiwgMHgwOUM4LCAweDU3OTMsIDB4NTc5MywgMHgxM0MyLCAweDU3OTQsIDB4NTc5QSwgMHgyQzM5LA0KLSAgICAweDU3OUIsIDB4NTc5QiwgMHgwNjIxLCAweDU3OUMsIDB4NTc5RiwgMHgyQzQwLCAweDU3QTAsIDB4NTdBMCwgMHgxM0MzLA0KLSAgICAweDU3QTEsIDB4NTdBMSwgMHgxM0EyLCAweDU3QTIsIDB4NTdBMiwgMHgwNzExLCAweDU3QTMsIDB4NTdBMywgMHgxMEVFLA0KLSAgICAweDU3QTQsIDB4NTdBNCwgMHgxM0JDLCAweDU3QTUsIDB4NTdBNSwgMHgyQzQ0LCAweDU3QTYsIDB4NTdBNiwgMHgwOTVFLA0KLSAgICAweDU3QTcsIDB4NTdBNywgMHgxM0MwLCAweDU3QTgsIDB4NTdBOCwgMHgyQzQ1LCAweDU3QTksIDB4NTdBOSwgMHgxM0ExLA0KLSAgICAweDU3QUEsIDB4NTdBQSwgMHgyQzQ2LCAweDU3QUIsIDB4NTdBQiwgMHgwNUM3LCAweDU3QUMsIDB4NTdBQywgMHgyQzQ3LA0KLSAgICAweDU3QUQsIDB4NTdBRCwgMHgxM0JCLCAweDU3QUUsIDB4NTdBRSwgMHgwOTcyLCAweDU3QUYsIDB4NTdCMSwgMHgyQzQ4LA0KLSAgICAweDU3QjIsIDB4NTdCMiwgMHgxM0JFLCAweDU3QjMsIDB4NTdCMywgMHgyQzRCLCAweDU3QjQsIDB4NTdCNCwgMHgxM0MxLA0KLSAgICAweDU3QjUsIDB4NTdCNywgMHgyQzRDLCAweDU3QjgsIDB4NTdCOCwgMHgxM0M5LCAweDU3QjksIDB4NTdDMSwgMHgyQzRGLA0KLSAgICAweDU3QzIsIDB4NTdDMiwgMHgwNkZBLCAweDU3QzMsIDB4NTdDMywgMHgwM0FFLCAweDU3QzQsIDB4NTdDQSwgMHgyQzU4LA0KLSAgICAweDU3Q0IsIDB4NTdDQiwgMHgwQTk4LCAweDU3Q0MsIDB4NTdDRCwgMHgyQzVGLCAweDU3Q0UsIDB4NTdDRSwgMHgwNEVDLA0KLSAgICAweDU3Q0YsIDB4NTdDRiwgMHgxM0JGLCAweDU3RDAsIDB4NTdEMSwgMHgyQzYxLCAweDU3RDIsIDB4NTdEMiwgMHgxM0M4LA0KLSAgICAweDU3RDMsIDB4NTdEMywgMHgyQzYzLCAweDU3RDQsIDB4NTdENCwgMHgwQkYxLCAweDU3RDUsIDB4NTdENSwgMHgxM0M0LA0KLSAgICAweDU3RDYsIDB4NTdENywgMHgyQzY0LCAweDU3RDgsIDB4NTdEOCwgMHgxM0M1LCAweDU3RDksIDB4NTdEOSwgMHgxM0M3LA0KLSAgICAweDU3REEsIDB4NTdEQSwgMHgxM0M2LCAweDU3REIsIDB4NTdEQywgMHgyQzY2LCAweDU3REQsIDB4NTdERCwgMHgxM0NFLA0KLSAgICAweDU3REUsIDB4NTdERSwgMHgyQzY4LCAweDU3REYsIDB4NTdERiwgMHgxMEQ3LCAweDU3RTAsIDB4NTdFMCwgMHgwNDgxLA0KLSAgICAweDU3RTEsIDB4NTdFMSwgMHgyMzJBLCAweDU3RTIsIDB4NTdFMywgMHgyQzY5LCAweDU3RTQsIDB4NTdFNCwgMHgxM0NELA0KLSAgICAweDU3RTUsIDB4NTdFQywgMHgyQzZCLCAweDU3RUQsIDB4NTdFRCwgMHgxM0QyLCAweDU3RUUsIDB4NTdFRSwgMHgyQzczLA0KLSAgICAweDU3RUYsIDB4NTdFRiwgMHgxM0NCLCAweDU3RjAsIDB4NTdGMywgMHgyQzc0LCAweDU3RjQsIDB4NTdGNCwgMHgxM0NBLA0KLSAgICAweDU3RjUsIDB4NTdGNiwgMHgyQzc4LCAweDU3RjcsIDB4NTdGNywgMHgyMjhCLCAweDU3RjgsIDB4NTdGOCwgMHgxM0NDLA0KLSAgICAweDU3RjksIDB4NTdGOSwgMHgwQkExLCAweDU3RkEsIDB4NTdGQSwgMHgwODBFLCAweDU3RkIsIDB4NTdGQywgMHgyQzdBLA0KLSAgICAweDU3RkQsIDB4NTdGRCwgMHgxM0QxLCAweDU3RkUsIDB4NTdGRiwgMHgyQzdDLCAweDU4MDAsIDB4NTgwMCwgMHgxM0QzLA0KLSAgICAweDU4MDEsIDB4NTgwMSwgMHgyQzdFLCAweDU4MDIsIDB4NTgwMiwgMHgwRTE2LCAweDU4MDMsIDB4NTgwNCwgMHgyQzdGLA0KLSAgICAweDU4MDUsIDB4NTgwNSwgMHgxRjg1LCAweDU4MDYsIDB4NTgwNiwgMHgwNjEwLCAweDU4MDcsIDB4NTgwNywgMHgxNDRDLA0KLSAgICAweDU4MDgsIDB4NTgwOSwgMHgyQzgxLCAweDU4MEEsIDB4NTgwQSwgMHgyMzI1LCAweDU4MEIsIDB4NTgwQiwgMHgxM0NGLA0KLSAgICAweDU4MEMsIDB4NTgwQywgMHgyQzgzLCAweDU4MEQsIDB4NTgwRCwgMHgxM0QwLCAweDU4MEUsIDB4NTgxMCwgMHgyQzg0LA0KLSAgICAweDU4MTEsIDB4NTgxMSwgMHgwQzMyLCAweDU4MTIsIDB4NTgxNCwgMHgyQzg3LCAweDU4MTUsIDB4NTgxNSwgMHgwNjI4LA0KLSAgICAweDU4MTYsIDB4NTgxNiwgMHgyMzJDLCAweDU4MTcsIDB4NTgxOCwgMHgyQzhBLCAweDU4MTksIDB4NTgxOSwgMHgxM0Q1LA0KLSAgICAweDU4MUEsIDB4NTgxQywgMHgyQzhDLCAweDU4MUQsIDB4NTgxRCwgMHgyMzJFLCAweDU4MUUsIDB4NTgxRSwgMHgxM0Q0LA0KLSAgICAweDU4MUYsIDB4NTgxRiwgMHgyQzhGLCAweDU4MjAsIDB4NTgyMCwgMHgxM0Q3LCAweDU4MjEsIDB4NTgyMSwgMHgwNDBELA0KLSAgICAweDU4MjIsIDB4NTgyMywgMHgyQzkwLCAweDU4MjQsIDB4NTgyNCwgMHgwNUFELCAweDU4MjUsIDB4NTgyOSwgMHgyQzkyLA0KLSAgICAweDU4MkEsIDB4NTgyQSwgMHgwOTNELCAweDU4MkIsIDB4NTgyRSwgMHgyQzk3LCAweDU4MkYsIDB4NTgyRiwgMHgyMjA1LA0KLSAgICAweDU4MzAsIDB4NTgzMCwgMHgxMDA4LCAweDU4MzEsIDB4NTgzMSwgMHgxRTM4LCAweDU4MzIsIDB4NTgzMywgMHgyQzlCLA0KLSAgICAweDU4MzQsIDB4NTgzNCwgMHgxRTczLCAweDU4MzUsIDB4NTgzNSwgMHgwNjAxLCAweDU4MzYsIDB4NTg0MywgMHgyQzlELA0KLSAgICAweDU4NDQsIDB4NTg0NCwgMHgxM0Q2LCAweDU4NDUsIDB4NTg0OSwgMHgyQ0FCLCAweDU4NEEsIDB4NTg0QSwgMHgxRkUzLA0KLSAgICAweDU4NEIsIDB4NTg0QiwgMHgyMzM5LCAweDU4NEMsIDB4NTg0QywgMHgwREVGLCAweDU4NEQsIDB4NTg0RCwgMHgxOUEzLA0KLSAgICAweDU4NEUsIDB4NTg0RSwgMHgyQ0IwLCAweDU4NEYsIDB4NTg0RiwgMHgyMzJCLCAweDU4NTAsIDB4NTg1MCwgMHgyQ0IxLA0KLSAgICAweDU4NTEsIDB4NTg1MSwgMHgwREQxLCAweDU4NTIsIDB4NTg1MiwgMHgyMzJELCAweDU4NTMsIDB4NTg1MywgMHgyQ0IyLA0KLSAgICAweDU4NTQsIDB4NTg1NCwgMHgwREYzLCAweDU4NTUsIDB4NTg1NiwgMHgyQ0IzLCAweDU4NTcsIDB4NTg1NywgMHgyMTdGLA0KLSAgICAweDU4NTgsIDB4NTg1OCwgMHgwRTE0LCAweDU4NTksIDB4NTg1RCwgMHgyQ0I1LCAweDU4NUUsIDB4NTg1RSwgMHgwQ0Q2LA0KLSAgICAweDU4NUYsIDB4NTg2MSwgMHgyQ0JBLCAweDU4NjIsIDB4NTg2MiwgMHgyMUE3LCAweDU4NjMsIDB4NTg2MywgMHgyQ0JELA0KLSAgICAweDU4NjQsIDB4NTg2NCwgMHgyMzJGLCAweDU4NjUsIDB4NTg2NSwgMHgxM0Q4LCAweDU4NjYsIDB4NTg2QSwgMHgyQ0JFLA0KLSAgICAweDU4NkIsIDB4NTg2QiwgMHgwRTQxLCAweDU4NkMsIDB4NTg2QywgMHgxM0Q5LCAweDU4NkQsIDB4NTg3NCwgMHgyQ0MzLA0KLSAgICAweDU4NzUsIDB4NTg3NSwgMHgxRTdELCAweDU4NzYsIDB4NTg3OCwgMHgyQ0NCLCAweDU4NzksIDB4NTg3OSwgMHgyMEQ2LA0KLSAgICAweDU4N0EsIDB4NTg3RCwgMHgyQ0NFLCAweDU4N0UsIDB4NTg3RSwgMHgxM0EzLCAweDU4N0YsIDB4NTg3RiwgMHgyQ0QyLA0KLSAgICAweDU4ODAsIDB4NTg4MCwgMHgxM0RELCAweDU4ODEsIDB4NTg4MSwgMHgxM0RBLCAweDU4ODIsIDB4NTg4MiwgMHgyQ0QzLA0KLSAgICAweDU4ODMsIDB4NTg4MywgMHgwOEUyLCAweDU4ODQsIDB4NTg4NCwgMHgyQ0Q0LCAweDU4ODUsIDB4NTg4NSwgMHgwRDkyLA0KLSAgICAweDU4ODYsIDB4NTg4OCwgMHgyQ0Q1LCAweDU4ODksIDB4NTg4OSwgMHgxM0RCLCAweDU4OEEsIDB4NTg4QSwgMHgxRUMyLA0KLSAgICAweDU4OEIsIDB4NTg5MSwgMHgyQ0Q4LCAweDU4OTIsIDB4NTg5MiwgMHgwRDAzLCAweDU4OTMsIDB4NTg5MywgMHgwQjFDLA0KLSAgICAweDU4OTQsIDB4NTg5OCwgMHgyQ0RGLCAweDU4OTksIDB4NTg5OSwgMHgwQzNBLCAweDU4OUEsIDB4NTg5QSwgMHgxM0RDLA0KLSAgICAweDU4OUIsIDB4NTg5QiwgMHgyQ0U0LCAweDU4OUMsIDB4NTg5QywgMHgyMkIyLCAweDU4OUQsIDB4NTg5RCwgMHgyQ0U1LA0KLSAgICAweDU4OUUsIDB4NTg5RSwgMHgxMTM5LCAweDU4OUYsIDB4NTg5RiwgMHgwRkIxLCAweDU4QTAsIDB4NThBNywgMHgyQ0U2LA0KLSAgICAweDU4QTgsIDB4NThBOCwgMHgwQjBFLCAweDU4QTksIDB4NThBOSwgMHgwNjE0LCAweDU4QUEsIDB4NThBRCwgMHgyQ0VFLA0KLSAgICAweDU4QUUsIDB4NThBRSwgMHgxRURGLCAweDU4QUYsIDB4NThCMiwgMHgyQ0YyLCAweDU4QjMsIDB4NThCMywgMHgxRUY5LA0KLSAgICAweDU4QjQsIDB4NThCQSwgMHgyQ0Y2LCAweDU4QkIsIDB4NThCQiwgMHgyMEQ5LCAweDU4QkMsIDB4NThCQywgMHgxM0E0LA0KLSAgICAweDU4QkQsIDB4NThCRCwgMHgyQ0ZELCAweDU4QkUsIDB4NThCRSwgMHgxRkRELCAweDU4QkYsIDB4NThDMCwgMHgyQ0ZFLA0KLSAgICAweDU4QzEsIDB4NThDMSwgMHgwNDQzLCAweDU4QzIsIDB4NThDNCwgMHgyRDAwLCAweDU4QzUsIDB4NThDNSwgMHgxM0E1LA0KLSAgICAweDU4QzYsIDB4NThDNiwgMHgyRDAzLCAweDU4QzcsIDB4NThDNywgMHgyMTY3LCAweDU4QzgsIDB4NThEMCwgMHgyRDA0LA0KLSAgICAweDU4RDEsIDB4NThEMSwgMHgxM0E2LCAweDU4RDIsIDB4NThEMiwgMHgyRDBELCAweDU4RDMsIDB4NThEMywgMHgyMUVELA0KLSAgICAweDU4RDQsIDB4NThENCwgMHgyRDBFLCAweDU4RDUsIDB4NThENSwgMHgwNzc1LCAweDU4RDYsIDB4NThENywgMHgyRDBGLA0KLSAgICAweDU4RDgsIDB4NThEOCwgMHgyMDA3LCAweDU4RDksIDB4NThEOSwgMHgyMzI2LCAweDU4REEsIDB4NThEQSwgMHgyMzI5LA0KLSAgICAweDU4REIsIDB4NThERCwgMHgyRDExLCAweDU4REUsIDB4NThERSwgMHgxRjUyLCAweDU4REYsIDB4NThERiwgMHgyMDNCLA0KLSAgICAweDU4RTAsIDB4NThFMCwgMHgyMzI4LCAweDU4RTEsIDB4NThFMSwgMHgyRDE0LCAweDU4RTIsIDB4NThFMiwgMHgyMzI3LA0KLSAgICAweDU4RTMsIDB4NThFMywgMHgyRDE1LCAweDU4RTQsIDB4NThFNCwgMHgwQzlCLCAweDU4RTUsIDB4NThFOCwgMHgyRDE2LA0KLSAgICAweDU4RTksIDB4NThFOSwgMHgxRTJCLCAweDU4RUEsIDB4NThFQSwgMHgyRDFBLCAweDU4RUIsIDB4NThFQiwgMHgwRDU2LA0KLSAgICAweDU4RUMsIDB4NThFQywgMHgwQ0E0LCAweDU4RUQsIDB4NThFRCwgMHgyRDFCLCAweDU4RUUsIDB4NThFRSwgMHgxMjEwLA0KLSAgICAweDU4RUYsIDB4NThFRiwgMHgyMkFFLCAweDU4RjAsIDB4NThGMCwgMHgwRDMyLCAweDU4RjEsIDB4NThGMiwgMHgyRDFDLA0KLSAgICAweDU4RjMsIDB4NThGMywgMHgwOTU0LCAweDU4RjQsIDB4NThGNSwgMHgyRDFFLCAweDU4RjYsIDB4NThGNiwgMHgwN0FGLA0KLSAgICAweDU4RjcsIDB4NThGOCwgMHgyRDIwLCAweDU4RjksIDB4NThGOSwgMHgxMDQzLCAweDU4RkEsIDB4NThGQSwgMHgxRjQ5LA0KLSAgICAweDU4RkIsIDB4NThGQywgMHgyRDIyLCAweDU4RkQsIDB4NThGRCwgMHgyMTM4LCAweDU4RkUsIDB4NThGRiwgMHgyRDI0LA0KLSAgICAweDU5MDAsIDB4NTkwMSwgMHgyRDI2LCAweDU5MDIsIDB4NTkwMiwgMHgxNjFDLCAweDU5MDMsIDB4NTkwMywgMHgyRDI4LA0KLSAgICAweDU5MDQsIDB4NTkwNCwgMHgwNTI5LCAweDU5MDUsIDB4NTkwNiwgMHgyRDI5LCAweDU5MDcsIDB4NTkwNywgMHgwNDIxLA0KLSAgICAweDU5MDgsIDB4NTkwQywgMHgyRDJCLCAweDU5MEQsIDB4NTkwRCwgMHgwNkFGLCAweDU5MEUsIDB4NTkwRSwgMHgyRDMwLA0KLSAgICAweDU5MEYsIDB4NTkwRiwgMHgwRjMxLCAweDU5MTAsIDB4NTkxMywgMHgyRDMxLCAweDU5MTQsIDB4NTkxNCwgMHgxMkZCLA0KLSAgICAweDU5MTUsIDB4NTkxNSwgMHgwRjEzLCAweDU5MTYsIDB4NTkxNiwgMHgwRTkzLCAweDU5MTcsIDB4NTkxOCwgMHgyRDM1LA0KLSAgICAweDU5MTksIDB4NTkxOSwgMHgxMzAxLCAweDU5MUEsIDB4NTkxQSwgMHgwNjFGLCAweDU5MUIsIDB4NTkxQiwgMHgyRDM3LA0KLSAgICAweDU5MUMsIDB4NTkxQywgMHgxMDQwLCAweDU5MUQsIDB4NTkxRSwgMHgyRDM4LCAweDU5MUYsIDB4NTkxRiwgMHgwNzE0LA0KLSAgICAweDU5MjAsIDB4NTkyMSwgMHgyRDNBLCAweDU5MjIsIDB4NTkyMiwgMHgyMDgxLCAweDU5MjMsIDB4NTkyMywgMHgyRDNDLA0KLSAgICAweDU5MjQsIDB4NTkyNCwgMHgxNjFCLCAweDU5MjUsIDB4NTkyNSwgMHgxNjE5LCAweDU5MjYsIDB4NTkyNiwgMHgyRDNELA0KLSAgICAweDU5MjcsIDB4NTkyNywgMHgwNTc2LCAweDU5MjgsIDB4NTkyOCwgMHgyRDNFLCAweDU5MjksIDB4NTkyOSwgMHgwRTNGLA0KLSAgICAweDU5MkEsIDB4NTkyQSwgMHgwREZFLCAweDU5MkIsIDB4NTkyQiwgMHgwNjhGLCAweDU5MkMsIDB4NTkyQywgMHgyRDNGLA0KLSAgICAweDU5MkQsIDB4NTkyRCwgMHgxMjY4LCAweDU5MkUsIDB4NTkyRSwgMHgxMDE0LCAweDU5MkYsIDB4NTkyRiwgMHgwNzcyLA0KLSAgICAweDU5MzAsIDB4NTkzMCwgMHgyRDQwLCAweDU5MzEsIDB4NTkzMSwgMHgwRDNFLCAweDU5MzIsIDB4NTkzMywgMHgyRDQxLA0KLSAgICAweDU5MzQsIDB4NTkzNCwgMHgwRTY4LCAweDU5MzUsIDB4NTkzNiwgMHgyRDQzLCAweDU5MzcsIDB4NTkzNywgMHgxMDRCLA0KLSAgICAweDU5MzgsIDB4NTkzOCwgMHgwOTcxLCAweDU5MzksIDB4NTkzOSwgMHgwODQzLCAweDU5M0EsIDB4NTkzQSwgMHgwNjIwLA0KLSAgICAweDU5M0IsIDB4NTkzQiwgMHgyRDQ1LCAweDU5M0MsIDB4NTkzQywgMHgxNEFGLCAweDU5M0QsIDB4NTkzRCwgMHgyRDQ2LA0KLSAgICAweDU5M0UsIDB4NTkzRSwgMHgxRjdDLCAweDU5M0YsIDB4NTk0MCwgMHgyRDQ3LCAweDU5NDEsIDB4NTk0MSwgMHgxNEIwLA0KLSAgICAweDU5NDIsIDB4NTk0MiwgMHgxMzhDLCAweDU5NDMsIDB4NTk0MywgMHgyRDQ5LCAweDU5NDQsIDB4NTk0NCwgMHgxMDAyLA0KLSAgICAweDU5NDUsIDB4NTk0NiwgMHgyRDRBLCAweDU5NDcsIDB4NTk0NywgMHgwQzA1LCAweDU5NDgsIDB4NTk0OCwgMHgwQjMxLA0KLSAgICAweDU5NDksIDB4NTk0OSwgMHgwNjhCLCAweDU5NEEsIDB4NTk0QSwgMHgyRDRDLCAweDU5NEIsIDB4NTk0QiwgMHgwNjc5LA0KLSAgICAweDU5NEMsIDB4NTk0RCwgMHgyRDRELCAweDU5NEUsIDB4NTk0RSwgMHgwOTg5LCAweDU5NEYsIDB4NTk0RiwgMHgxMjNELA0KLSAgICAweDU5NTAsIDB4NTk1MCwgMHgyRDRGLCAweDU5NTEsIDB4NTk1MSwgMHgwQzE0LCAweDU5NTIsIDB4NTk1MywgMHgyRDUwLA0KLSAgICAweDU5NTQsIDB4NTk1NCwgMHgwNDI1LCAweDU5NTUsIDB4NTk1NSwgMHgxNEIyLCAweDU5NTYsIDB4NTk1NiwgMHgwODgyLA0KLSAgICAweDU5NTcsIDB4NTk1NywgMHgwRTJBLCAweDU5NTgsIDB4NTk1OCwgMHgxNEI0LCAweDU5NTksIDB4NTk1OSwgMHgyRDUyLA0KLSAgICAweDU5NUEsIDB4NTk1QSwgMHgxNEIzLCAweDU5NUIsIDB4NTk1RiwgMHgyRDUzLCAweDU5NjAsIDB4NTk2MCwgMHgwNUNELA0KLSAgICAweDU5NjEsIDB4NTk2MSwgMHgyRDU4LCAweDU5NjIsIDB4NTk2MiwgMHgwRDE2LCAweDU5NjMsIDB4NTk2NCwgMHgyRDU5LA0KLSAgICAweDU5NjUsIDB4NTk2NSwgMHgwM0NELCAweDU5NjYsIDB4NTk2OCwgMHgyRDVCLCAweDU5NjksIDB4NTk2OSwgMHgyMzVCLA0KLSAgICAweDU5NkEsIDB4NTk2QSwgMHgxRURFLCAweDU5NkIsIDB4NTk2QiwgMHgyRDVFLCAweDU5NkMsIDB4NTk2QywgMHgxRkEyLA0KLSAgICAweDU5NkQsIDB4NTk2RCwgMHgyRDVGLCAweDU5NkUsIDB4NTk2RSwgMHgxRUZBLCAweDU5NkYsIDB4NTk3MiwgMHgyRDYwLA0KLSAgICAweDU5NzMsIDB4NTk3MywgMHgwQjZGLCAweDU5NzQsIDB4NTk3NCwgMHgwQjZDLCAweDU5NzUsIDB4NTk3NSwgMHgyRDY0LA0KLSAgICAweDU5NzYsIDB4NTk3NiwgMHgwQjJGLCAweDU5NzcsIDB4NTk3NywgMHgyRDY1LCAweDU5NzgsIDB4NTk3OCwgMHgwODVDLA0KLSAgICAweDU5NzksIDB4NTk3OSwgMHgwREYyLCAweDU5N0EsIDB4NTk3QywgMHgyRDY2LCAweDU5N0QsIDB4NTk3RCwgMHgwNzdBLA0KLSAgICAweDU5N0UsIDB4NTk4MCwgMHgyRDY5LCAweDU5ODEsIDB4NTk4MSwgMHgxNzc1LCAweDU5ODIsIDB4NTk4MiwgMHgwQ0MyLA0KLSAgICAweDU5ODMsIDB4NTk4MywgMHgxNzc2LCAweDU5ODQsIDB4NTk4NCwgMHgwRUFFLCAweDU5ODUsIDB4NTk4NSwgMHgyRDZDLA0KLSAgICAweDU5ODYsIDB4NTk4NiwgMHgxMjBFLCAweDU5ODcsIDB4NTk4NywgMHgwNkI5LCAweDU5ODgsIDB4NTk4OCwgMHgwQThGLA0KLSAgICAweDU5ODksIDB4NTk4OSwgMHgyRDZELCAweDU5OEEsIDB4NTk4QSwgMHgwQ0FDLCAweDU5OEIsIDB4NTk4QywgMHgyRDZFLA0KLSAgICAweDU5OEQsIDB4NTk4RCwgMHgxNzc3LCAweDU5OEUsIDB4NTk5MSwgMHgyRDcwLCAweDU5OTIsIDB4NTk5MiwgMHgwNjA5LA0KLSAgICAweDU5OTMsIDB4NTk5MywgMHgwODNFLCAweDU5OTQsIDB4NTk5NSwgMHgyRDc0LCAweDU5OTYsIDB4NTk5NiwgMHgxMDI2LA0KLSAgICAweDU5OTcsIDB4NTk5NywgMHgxNzdCLCAweDU5OTgsIDB4NTk5OCwgMHgyRDc2LCAweDU5OTksIDB4NTk5OSwgMHgwQUYzLA0KLSAgICAweDU5OUEsIDB4NTk5QywgMHgyRDc3LCAweDU5OUQsIDB4NTk5RCwgMHgyMkFELCAweDU5OUUsIDB4NTk5RSwgMHgxNzdFLA0KLSAgICAweDU5OUYsIDB4NTlBMiwgMHgyRDdBLCAweDU5QTMsIDB4NTlBMywgMHgxNzdBLCAweDU5QTQsIDB4NTlBNCwgMHgxNzdGLA0KLSAgICAweDU5QTUsIDB4NTlBNSwgMHgwRTg4LCAweDU5QTYsIDB4NTlBNywgMHgyRDdFLCAweDU5QTgsIDB4NTlBOCwgMHgwNjVFLA0KLSAgICAweDU5QTksIDB4NTlBQSwgMHgxNzc4LCAweDU5QUIsIDB4NTlBQiwgMHgxNzdELCAweDU5QUMsIDB4NTlBRCwgMHgyRDgwLA0KLSAgICAweDU5QUUsIDB4NTlBRSwgMHgwQjQwLCAweDU5QUYsIDB4NTlBRiwgMHgxNzgyLCAweDU5QjAsIDB4NTlCMSwgMHgyRDgyLA0KLSAgICAweDU5QjIsIDB4NTlCMiwgMHgxNzgxLCAweDU5QjMsIDB4NTlCOCwgMHgyRDg0LCAweDU5QjksIDB4NTlCOSwgMHgwQUM4LA0KLSAgICAweDU5QkEsIDB4NTlCQSwgMHgyRDhBLCAweDU5QkIsIDB4NTlCQiwgMHgwQkZELCAweDU5QkMsIDB4NTlCRCwgMHgyRDhCLA0KLSAgICAweDU5QkUsIDB4NTlCRSwgMHgxNzg0LCAweDU5QkYsIDB4NTlDNSwgMHgyRDhELCAweDU5QzYsIDB4NTlDNiwgMHgwQjFBLA0KLSAgICAweDU5QzcsIDB4NTlDOSwgMHgyRDk0LCAweDU5Q0EsIDB4NTlDQSwgMHgxNzdDLCAweDU5Q0IsIDB4NTlDQiwgMHgwRDUzLA0KLSAgICAweDU5Q0MsIDB4NTlDRiwgMHgyRDk3LCAweDU5RDAsIDB4NTlEMCwgMHgwOEI0LCAweDU5RDEsIDB4NTlEMSwgMHgwNzFDLA0KLSAgICAweDU5RDIsIDB4NTlEMiwgMHgxNzgwLCAweDU5RDMsIDB4NTlEMywgMHgwRkEwLCAweDU5RDQsIDB4NTlENCwgMHgwRUJFLA0KLSAgICAweDU5RDUsIDB4NTlENiwgMHgyRDlCLCAweDU5RDcsIDB4NTlENywgMHgxNzgzLCAweDU5RDgsIDB4NTlEOCwgMHgxNzhBLA0KLSAgICAweDU5RDksIDB4NTlEOSwgMHgyRDlELCAweDU5REEsIDB4NTlEQSwgMHgxMDJELCAweDU5REIsIDB4NTlEQiwgMHgyRDlFLA0KLSAgICAweDU5REMsIDB4NTlEQywgMHgwODdCLCAweDU5REQsIDB4NTlERCwgMHgxNzg3LCAweDU5REUsIDB4NTlFMiwgMHgyRDlGLA0KLSAgICAweDU5RTMsIDB4NTlFMywgMHgxNzg5LCAweDU5RTQsIDB4NTlFNCwgMHgyREE0LCAweDU5RTUsIDB4NTlFNSwgMHgwOUJDLA0KLSAgICAweDU5RTYsIDB4NTlFNywgMHgyREE1LCAweDU5RTgsIDB4NTlFOCwgMHgxMDUzLCAweDU5RTksIDB4NTlFQiwgMHgyREE3LA0KLSAgICAweDU5RUMsIDB4NTlFQywgMHgwODFBLCAweDU5RUQsIDB4NTlGOCwgMHgyREFBLCAweDU5RjksIDB4NTlGOSwgMHgxNzhCLA0KLSAgICAweDU5RkEsIDB4NTlGQSwgMHgyREI2LCAweDU5RkIsIDB4NTlGQiwgMHgxMDdELCAweDU5RkMsIDB4NTlGRSwgMHgyREI3LA0KLSAgICAweDU5RkYsIDB4NTlGRiwgMHgxMjI4LCAweDVBMDAsIDB4NUEwMCwgMHgyREJBLCAweDVBMDEsIDB4NUEwMSwgMHgwRUFGLA0KLSAgICAweDVBMDIsIDB4NUEwMiwgMHgyREJCLCAweDVBMDMsIDB4NUEwMywgMHgwRThGLCAweDVBMDQsIDB4NUEwNCwgMHgwQTRELA0KLSAgICAweDVBMDUsIDB4NUEwNiwgMHgxNzg1LCAweDVBMDcsIDB4NUEwNywgMHgwODkwLCAweDVBMDgsIDB4NUEwOCwgMHgxNzg4LA0KLSAgICAweDVBMDksIDB4NUEwOSwgMHgxNzhELCAweDVBMEEsIDB4NUEwQiwgMHgyREJDLCAweDVBMEMsIDB4NUEwQywgMHgxNzhDLA0KLSAgICAweDVBMEQsIDB4NUExMCwgMHgyREJFLCAweDVBMTEsIDB4NUExMSwgMHgxNzkwLCAweDVBMTIsIDB4NUExMiwgMHgyREMyLA0KLSAgICAweDVBMTMsIDB4NUExMywgMHgxNzkyLCAweDVBMTQsIDB4NUExNywgMHgyREMzLCAweDVBMTgsIDB4NUExOCwgMHgwQjUyLA0KLSAgICAweDVBMTksIDB4NUExQiwgMHgyREM3LCAweDVBMUMsIDB4NUExQywgMHgwQjJCLCAweDVBMUQsIDB4NUExRSwgMHgyRENBLA0KLSAgICAweDVBMUYsIDB4NUExRiwgMHgwOTE5LCAweDVBMjAsIDB4NUEyMCwgMHgwRDI4LCAweDVBMjEsIDB4NUEyMiwgMHgyRENDLA0KLSAgICAweDVBMjMsIDB4NUEyMywgMHgxNzkxLCAweDVBMjQsIDB4NUEyNCwgMHgyRENFLCAweDVBMjUsIDB4NUEyNSwgMHgwNjJGLA0KLSAgICAweDVBMjYsIDB4NUEyOCwgMHgyRENGLCAweDVBMjksIDB4NUEyOSwgMHgwQUU5LCAweDVBMkEsIDB4NUEzMCwgMHgyREQyLA0KLSAgICAweDVBMzEsIDB4NUEzMSwgMHgxMENFLCAweDVBMzIsIDB4NUEzMiwgMHgxNzhFLCAweDVBMzMsIDB4NUEzMywgMHgyREQ5LA0KLSAgICAweDVBMzQsIDB4NUEzNCwgMHgxNzhGLCAweDVBMzUsIDB4NUEzNSwgMHgyRERBLCAweDVBMzYsIDB4NUEzNiwgMHgwQzdELA0KLSAgICAweDVBMzcsIDB4NUEzQiwgMHgyRERCLCAweDVBM0MsIDB4NUEzQywgMHgxNzk3LCAweDVBM0QsIDB4NUEzRiwgMHgyREUwLA0KLSAgICAweDVBNDAsIDB4NUE0MCwgMHgxNzkzLCAweDVBNDEsIDB4NUE0MSwgMHgyMDNGLCAweDVBNDIsIDB4NUE0NSwgMHgyREUzLA0KLSAgICAweDVBNDYsIDB4NUE0NiwgMHgwQkU0LCAweDVBNDcsIDB4NUE0OCwgMHgyREU3LCAweDVBNDksIDB4NUE0OSwgMHgwRUEyLA0KLSAgICAweDVBNEEsIDB4NUE0QSwgMHgxNzk1LCAweDVBNEIsIDB4NUE1NCwgMHgyREU5LCAweDVBNTUsIDB4NUE1NSwgMHgxNzk2LA0KLSAgICAweDVBNTYsIDB4NUE1OSwgMHgyREYzLCAweDVBNUEsIDB4NUE1QSwgMHgwN0ZFLCAweDVBNUIsIDB4NUE2MSwgMHgyREY3LA0KLSAgICAweDVBNjIsIDB4NUE2MiwgMHgxNzk4LCAweDVBNjMsIDB4NUE2NSwgMHgyREZFLCAweDVBNjYsIDB4NUE2NiwgMHgxRjBFLA0KLSAgICAweDVBNjcsIDB4NUE2NywgMHgxNzk0LCAweDVBNjgsIDB4NUE2OSwgMHgyRTAxLCAweDVBNkEsIDB4NUE2QSwgMHgwOUEyLA0KLSAgICAweDVBNkIsIDB4NUE2QywgMHgyRTAzLCAweDVBNkQsIDB4NUE2RCwgMHgyM0Y5LCAweDVBNkUsIDB4NUE3MywgMHgyRTA1LA0KLSAgICAweDVBNzQsIDB4NUE3NCwgMHgxMDg5LCAweDVBNzUsIDB4NUE3NSwgMHgxNzk5LCAweDVBNzYsIDB4NUE3NiwgMHgwRDJELA0KLSAgICAweDVBNzcsIDB4NUE3NywgMHgxNzlELCAweDVBNzgsIDB4NUE3OSwgMHgyRTBCLCAweDVBN0EsIDB4NUE3QSwgMHgxNzlFLA0KLSAgICAweDVBN0IsIDB4NUE3RSwgMHgyRTBELCAweDVBN0YsIDB4NUE3RiwgMHgwRkMxLCAweDVBODAsIDB4NUE5MSwgMHgyRTExLA0KLSAgICAweDVBOTIsIDB4NUE5MiwgMHgwQUMyLCAweDVBOTMsIDB4NUE5OSwgMHgyRTIzLCAweDVBOUEsIDB4NUE5QSwgMHgwQUM5LA0KLSAgICAweDVBOUIsIDB4NUE5QiwgMHgxNzlDLCAweDVBOUMsIDB4NUFBNiwgMHgyRTJBLCAweDVBQTcsIDB4NUFBNywgMHgyM0ZDLA0KLSAgICAweDVBQTgsIDB4NUFBOSwgMHgyRTM1LCAweDVBQUEsIDB4NUFBQSwgMHgxNzlCLCAweDVBQUIsIDB4NUFCMSwgMHgyRTM3LA0KLSAgICAweDVBQjIsIDB4NUFCMiwgMHgxN0ExLCAweDVBQjMsIDB4NUFCMywgMHgwRjFFLCAweDVBQjQsIDB4NUFCNCwgMHgyRTNFLA0KLSAgICAweDVBQjUsIDB4NUFCNSwgMHgxOUE0LCAweDVBQjYsIDB4NUFCNywgMHgyRTNGLCAweDVBQjgsIDB4NUFCOCwgMHgxN0E0LA0KLSAgICAweDVBQjksIDB4NUFCQywgMHgyRTQxLCAweDVBQkQsIDB4NUFCRCwgMHgyMDY5LCAweDVBQkUsIDB4NUFCRSwgMHgxNzlGLA0KLSAgICAweDVBQkYsIDB4NUFDMCwgMHgyRTQ1LCAweDVBQzEsIDB4NUFDMSwgMHgwODUxLCAweDVBQzIsIDB4NUFDMiwgMHgwQ0UyLA0KLSAgICAweDVBQzMsIDB4NUFDOCwgMHgyRTQ3LCAweDVBQzksIDB4NUFDOSwgMHgwODI4LCAweDVBQ0EsIDB4NUFDQiwgMHgyRTRELA0KLSAgICAweDVBQ0MsIDB4NUFDQywgMHgwRjQwLCAweDVBQ0QsIDB4NUFEMSwgMHgyRTRGLCAweDVBRDIsIDB4NUFEMiwgMHgxN0EyLA0KLSAgICAweDVBRDMsIDB4NUFEMywgMHgyRTU0LCAweDVBRDQsIDB4NUFENCwgMHgxN0EzLCAweDVBRDUsIDB4NUFENSwgMHgyRTU1LA0KLSAgICAweDVBRDYsIDB4NUFENiwgMHgxN0E4LCAweDVBRDcsIDB4NUFENywgMHgyM0Y3LCAweDVBRDgsIDB4NUFEOCwgMHgxN0FBLA0KLSAgICAweDVBRDksIDB4NUFEQiwgMHgyRTU2LCAweDVBREMsIDB4NUFEQywgMHgxN0FCLCAweDVBREQsIDB4NUFERiwgMHgyRTU5LA0KLSAgICAweDVBRTAsIDB4NUFFMCwgMHgxN0E1LCAweDVBRTEsIDB4NUFFMSwgMHgwNUI2LCAweDVBRTIsIDB4NUFFMiwgMHgyRTVDLA0KLSAgICAweDVBRTMsIDB4NUFFMywgMHgxN0E2LCAweDVBRTQsIDB4NUFFNSwgMHgyRTVELCAweDVBRTYsIDB4NUFFNiwgMHgxN0E5LA0KLSAgICAweDVBRTcsIDB4NUFFOCwgMHgyRTVGLCAweDVBRTksIDB4NUFFOSwgMHgwQjNFLCAweDVBRUEsIDB4NUFFQSwgMHgyRTYxLA0KLSAgICAweDVBRUIsIDB4NUFFQiwgMHgxN0EwLCAweDVBRUMsIDB4NUFGMCwgMHgyRTYyLCAweDVBRjEsIDB4NUFGMSwgMHgxN0E3LA0KLSAgICAweDVBRjIsIDB4NUFGNCwgMHgyRTY3LCAweDVBRjUsIDB4NUFGNSwgMHgyM0Y2LCAweDVBRjYsIDB4NUFGQSwgMHgyRTZBLA0KLSAgICAweDVBRkIsIDB4NUFGQiwgMHgyM0ZELCAweDVBRkMsIDB4NUFGRiwgMHgyRTZGLCAweDVCMDAsIDB4NUIwMCwgMHgyM0Y4LA0KLSAgICAweDVCMDEsIDB4NUIwNywgMHgyRTczLCAweDVCMDgsIDB4NUIwOCwgMHgyM0ZBLCAweDVCMDksIDB4NUIwOSwgMHgxN0FDLA0KLSAgICAweDVCMEEsIDB4NUIwQSwgMHgyRTdBLCAweDVCMEIsIDB4NUIwQiwgMHgyM0ZFLCAweDVCMEMsIDB4NUIwQywgMHgxRkE4LA0KLSAgICAweDVCMEQsIDB4NUIxNSwgMHgyRTdCLCAweDVCMTYsIDB4NUIxNiwgMHgxN0FFLCAweDVCMTcsIDB4NUIxNywgMHgxN0FELA0KLSAgICAweDVCMTgsIDB4NUIxOCwgMHgyRTg0LCAweDVCMTksIDB4NUIxOSwgMHgyNDAxLCAweDVCMUEsIDB4NUIyMCwgMHgyRTg1LA0KLSAgICAweDVCMjEsIDB4NUIyMSwgMHgyM0ZGLCAweDVCMjIsIDB4NUIyOSwgMHgyRThDLCAweDVCMkEsIDB4NUIyQSwgMHgyNDAwLA0KLSAgICAweDVCMkIsIDB4NUIyRiwgMHgyRTk0LCAweDVCMzAsIDB4NUIzMCwgMHgyMjIxLCAweDVCMzEsIDB4NUIzMSwgMHgyRTk5LA0KLSAgICAweDVCMzIsIDB4NUIzMiwgMHgxN0FGLCAweDVCMzMsIDB4NUIzMywgMHgyRTlBLCAweDVCMzQsIDB4NUIzNCwgMHgxMzBDLA0KLSAgICAweDVCMzUsIDB4NUIzNiwgMHgyRTlCLCAweDVCMzcsIDB4NUIzNywgMHgxN0IwLCAweDVCMzgsIDB4NUIzOCwgMHgyMTIyLA0KLSAgICAweDVCMzksIDB4NUIzRiwgMHgyRTlELCAweDVCNDAsIDB4NUI0MCwgMHgxN0IxLCAweDVCNDEsIDB4NUI0QiwgMHgyRUE0LA0KLSAgICAweDVCNEMsIDB4NUI0QywgMHgyM0ZCLCAweDVCNEQsIDB4NUI0RiwgMHgyRUFGLCAweDVCNTAsIDB4NUI1MCwgMHgxMjMwLA0KLSAgICAweDVCNTEsIDB4NUI1MSwgMHgxN0I3LCAweDVCNTIsIDB4NUI1MiwgMHgyRUIyLCAweDVCNTMsIDB4NUI1MywgMHgxN0I4LA0KLSAgICAweDVCNTQsIDB4NUI1NCwgMHgwOTY0LCAweDVCNTUsIDB4NUI1NSwgMHgxMTEzLCAweDVCNTYsIDB4NUI1NiwgMHgyRUIzLA0KLSAgICAweDVCNTcsIDB4NUI1NywgMHgxMjMzLCAweDVCNTgsIDB4NUI1OCwgMHgwNTY5LCAweDVCNTksIDB4NUI1OSwgMHgwREU0LA0KLSAgICAweDVCNUEsIDB4NUI1QSwgMHgxN0I0LCAweDVCNUIsIDB4NUI1QiwgMHgxMjc5LCAweDVCNUMsIDB4NUI1QywgMHgxMjJCLA0KLSAgICAweDVCNUQsIDB4NUI1RCwgMHgwRjZELCAweDVCNUUsIDB4NUI1RSwgMHgyRUI0LCAweDVCNUYsIDB4NUI1RiwgMHgwQUQ0LA0KLSAgICAweDVCNjAsIDB4NUI2MSwgMHgyRUI1LCAweDVCNjIsIDB4NUI2MiwgMHgxN0I5LCAweDVCNjMsIDB4NUI2MywgMHgwODMxLA0KLSAgICAweDVCNjQsIDB4NUI2NCwgMHgwNzFCLCAweDVCNjUsIDB4NUI2NSwgMHgxN0I1LCAweDVCNjYsIDB4NUI2NiwgMHgwRkQwLA0KLSAgICAweDVCNjcsIDB4NUI2OCwgMHgyRUI3LCAweDVCNjksIDB4NUI2OSwgMHgwNzU5LCAweDVCNkEsIDB4NUI2QSwgMHgwQTc2LA0KLSAgICAweDVCNkIsIDB4NUI2QiwgMHgyMTVBLCAweDVCNkMsIDB4NUI2QywgMHgxMjYxLCAweDVCNkQsIDB4NUI2RiwgMHgyRUI5LA0KLSAgICAweDVCNzAsIDB4NUI3MCwgMHgwRDgyLCAweDVCNzEsIDB4NUI3MSwgMHgxNzZBLCAweDVCNzIsIDB4NUI3MiwgMHgyRUJDLA0KLSAgICAweDVCNzMsIDB4NUI3MywgMHgxN0I2LCAweDVCNzQsIDB4NUI3NCwgMHgyRUJELCAweDVCNzUsIDB4NUI3NSwgMHgwNjkyLA0KLSAgICAweDVCNzYsIDB4NUI3NywgMHgyRUJFLCAweDVCNzgsIDB4NUI3OCwgMHgyMUU1LCAweDVCNzksIDB4NUI3OSwgMHgyRUMwLA0KLSAgICAweDVCN0EsIDB4NUI3QSwgMHgwQ0MxLCAweDVCN0IsIDB4NUI3QywgMHgyRUMxLCAweDVCN0QsIDB4NUI3RCwgMHgwQjU4LA0KLSAgICAweDVCN0UsIDB4NUI3RSwgMHgyRUMzLCAweDVCN0YsIDB4NUI3RiwgMHgyMDU3LCAweDVCODAsIDB4NUI4MCwgMHgxNzJFLA0KLSAgICAweDVCODEsIDB4NUI4MSwgMHgwQjYxLCAweDVCODIsIDB4NUI4MiwgMHgyRUM0LCAweDVCODMsIDB4NUI4MywgMHgwREYxLA0KLSAgICAweDVCODQsIDB4NUI4NCwgMHgxNzJGLCAweDVCODUsIDB4NUI4NSwgMHgxMTRELCAweDVCODYsIDB4NUI4NiwgMHgyRUM1LA0KLSAgICAweDVCODcsIDB4NUI4NywgMHgxMEQzLCAweDVCODgsIDB4NUI4OCwgMHgwRDZGLCAweDVCODksIDB4NUI4OSwgMHgwM0JELA0KLSAgICAweDVCOEEsIDB4NUI4QSwgMHgyRUM2LCAweDVCOEIsIDB4NUI4QiwgMHgwREMzLCAweDVCOEMsIDB4NUI4QywgMHgwRTlCLA0KLSAgICAweDVCOEQsIDB4NUI4RSwgMHgyRUM3LCAweDVCOEYsIDB4NUI4RiwgMHgwN0ExLCAweDVCOTAsIDB4NUI5MiwgMHgyRUM5LA0KLSAgICAweDVCOTMsIDB4NUI5MywgMHgxNzMxLCAweDVCOTQsIDB4NUI5NCwgMHgyRUNDLCAweDVCOTUsIDB4NUI5NSwgMHgxNzMwLA0KLSAgICAweDVCOTYsIDB4NUI5NiwgMHgyRUNELCAweDVCOTcsIDB4NUI5NywgMHgxMjM3LCAweDVCOTgsIDB4NUI5OCwgMHgwNzMyLA0KLSAgICAweDVCOTksIDB4NUI5OSwgMHgxMUU1LCAweDVCOUEsIDB4NUI5QSwgMHgwNUU3LCAweDVCOUIsIDB4NUI5QiwgMHgwRUExLA0KLSAgICAweDVCOUMsIDB4NUI5QywgMHgxMDUyLCAweDVCOUQsIDB4NUI5RCwgMHgwNDBGLCAweDVCOUUsIDB4NUI5RSwgMHgwRDRDLA0KLSAgICAweDVCOUYsIDB4NUI5RiwgMHgyRUNFLCAweDVCQTAsIDB4NUJBMCwgMHgwNTBELCAweDVCQTEsIDB4NUJBMSwgMHgwRDJDLA0KLSAgICAweDVCQTIsIDB4NUJBMiwgMHgwOTVBLCAweDVCQTMsIDB4NUJBMywgMHgwRkM2LCAweDVCQTQsIDB4NUJBNCwgMHgwRDY5LA0KLSAgICAweDVCQTUsIDB4NUJBNSwgMHgxNzMyLCAweDVCQTYsIDB4NUJBNiwgMHgwN0Q3LCAweDVCQTcsIDB4NUJBOSwgMHgyRUNGLA0KLSAgICAweDVCQUEsIDB4NUJBQSwgMHgwRjQ5LCAweDVCQUIsIDB4NUJBQiwgMHgwNzA1LCAweDVCQUMsIDB4NUJBRiwgMHgyRUQyLA0KLSAgICAweDVCQjAsIDB4NUJCMCwgMHgxMTFBLCAweDVCQjEsIDB4NUJCMiwgMHgyRUQ2LCAweDVCQjMsIDB4NUJCMywgMHgwNzVELA0KLSAgICAweDVCQjQsIDB4NUJCNCwgMHgxMDEwLCAweDVCQjUsIDB4NUJCNSwgMHgwRjY5LCAweDVCQjYsIDB4NUJCNiwgMHgwODQ1LA0KLSAgICAweDVCQjcsIDB4NUJCNywgMHgyRUQ4LCAweDVCQjgsIDB4NUJCOCwgMHgxNzMzLCAweDVCQjksIDB4NUJCOSwgMHgwQ0I4LA0KLSAgICAweDVCQkEsIDB4NUJCQywgMHgyRUQ5LCAweDVCQkQsIDB4NUJCRCwgMHgwOTdBLCAweDVCQkUsIDB4NUJCRSwgMHgwNDVGLA0KLSAgICAweDVCQkYsIDB4NUJCRiwgMHgwREQzLCAweDVCQzAsIDB4NUJDMSwgMHgyRURDLCAweDVCQzIsIDB4NUJDMiwgMHgwODM4LA0KLSAgICAweDVCQzMsIDB4NUJDMywgMHgyRURFLCAweDVCQzQsIDB4NUJDNCwgMHgwODM3LCAweDVCQzUsIDB4NUJDNSwgMHgxMDgxLA0KLSAgICAweDVCQzYsIDB4NUJDNiwgMHgwQUUxLCAweDVCQzcsIDB4NUJDNywgMHgwOTY5LCAweDVCQzgsIDB4NUJDQiwgMHgyRURGLA0KLSAgICAweDVCQ0MsIDB4NUJDQywgMHgwNkI2LCAweDVCQ0QsIDB4NUJDRiwgMHgyRUUzLCAweDVCRDAsIDB4NUJEMCwgMHgwQUM3LA0KLSAgICAweDVCRDEsIDB4NUJEMSwgMHgyRUU2LCAweDVCRDIsIDB4NUJEMiwgMHgwNzY1LCAweDVCRDMsIDB4NUJEMywgMHgxMEU1LA0KLSAgICAweDVCRDQsIDB4NUJEQywgMHgyRUU3LCAweDVCREQsIDB4NUJERCwgMHgwQzVCLCAweDVCREUsIDB4NUJERSwgMHgwQjEyLA0KLSAgICAweDVCREYsIDB4NUJERiwgMHgwNEIzLCAweDVCRTAsIDB4NUJFMCwgMHgyRUYwLCAweDVCRTEsIDB4NUJFMSwgMHgwNzJBLA0KLSAgICAweDVCRTIsIDB4NUJFMiwgMHgyMEU1LCAweDVCRTMsIDB4NUJFMywgMHgyRUYxLCAweDVCRTQsIDB4NUJFNCwgMHgxNzM3LA0KLSAgICAweDVCRTUsIDB4NUJFNSwgMHgwQTExLCAweDVCRTYsIDB4NUJFNiwgMHgyMTJGLCAweDVCRTcsIDB4NUJFNywgMHgyMEEzLA0KLSAgICAweDVCRTgsIDB4NUJFOCwgMHgxMTUwLCAweDVCRTksIDB4NUJFOSwgMHgyMTIxLCAweDVCRUEsIDB4NUJFQSwgMHgyRUYyLA0KLSAgICAweDVCRUIsIDB4NUJFQiwgMHgyMUQ0LCAweDVCRUMsIDB4NUJFQywgMHgxRkU1LCAweDVCRUQsIDB4NUJFRCwgMHgyRUYzLA0KLSAgICAweDVCRUUsIDB4NUJFRSwgMHgxNzM4LCAweDVCRUYsIDB4NUJFRiwgMHgyRUY0LCAweDVCRjAsIDB4NUJGMCwgMHgxNzNBLA0KLSAgICAweDVCRjEsIDB4NUJGNCwgMHgyRUY1LCAweDVCRjUsIDB4NUJGNSwgMHgxRThBLCAweDVCRjYsIDB4NUJGNiwgMHgxRTM3LA0KLSAgICAweDVCRjcsIDB4NUJGNywgMHgyRUY5LCAweDVCRjgsIDB4NUJGOCwgMHgwNTZBLCAweDVCRjksIDB4NUJGOSwgMHgwNjEzLA0KLSAgICAweDVCRkEsIDB4NUJGQSwgMHgwREI3LCAweDVCRkIsIDB4NUJGQiwgMHgwRkQ5LCAweDVCRkMsIDB4NUJGQywgMHgwNTlELA0KLSAgICAweDVCRkQsIDB4NUJGRSwgMHgyRUZBLCAweDVCRkYsIDB4NUJGRiwgMHgwRDcwLCAweDVDMDAsIDB4NUMwMCwgMHgyRUZDLA0KLSAgICAweDVDMDEsIDB4NUMwMSwgMHgwNjdGLCAweDVDMDIsIDB4NUMwMywgMHgyRUZELCAweDVDMDQsIDB4NUMwNCwgMHgwRDFELA0KLSAgICAweDVDMDUsIDB4NUMwNSwgMHgyRUZGLCAweDVDMDYsIDB4NUMwNiwgMHgwODdDLCAweDVDMDcsIDB4NUMwNywgMHgxRjlFLA0KLSAgICAweDVDMDgsIDB4NUMwOCwgMHgyMkE2LCAweDVDMDksIDB4NUMwOSwgMHgwRUNELCAweDVDMEEsIDB4NUMwQSwgMHgxMjRELA0KLSAgICAweDVDMEIsIDB4NUMwQiwgMHgyMUU4LCAweDVDMEMsIDB4NUMwQywgMHgyRjAwLCAweDVDMEQsIDB4NUMwRCwgMHgxRURBLA0KLSAgICAweDVDMEUsIDB4NUMwRSwgMHgxRUI5LCAweDVDMEYsIDB4NUMwRiwgMHgwRjZDLCAweDVDMTAsIDB4NUMxMCwgMHgyRjAxLA0KLSAgICAweDVDMTEsIDB4NUMxMSwgMHgwRDEyLCAweDVDMTIsIDB4NUMxMywgMHgyRjAyLCAweDVDMTQsIDB4NUMxNCwgMHgwNjNBLA0KLSAgICAweDVDMTUsIDB4NUMxNSwgMHgxN0IyLCAweDVDMTYsIDB4NUMxNiwgMHgwODU1LCAweDVDMTcsIDB4NUMxNywgMHgyRjA0LA0KLSAgICAweDVDMTgsIDB4NUMxOCwgMHgwNEUzLCAweDVDMTksIDB4NUMxOSwgMHgyRjA1LCAweDVDMUEsIDB4NUMxQSwgMHgwRDA5LA0KLSAgICAweDVDMUIsIDB4NUMxQiwgMHgyRjA2LCAweDVDMUMsIDB4NUMxQywgMHgxN0IzLCAweDVDMUQsIDB4NUMxRCwgMHgwNEM3LA0KLSAgICAweDVDMUUsIDB4NUMyMSwgMHgyRjA3LCAweDVDMjIsIDB4NUMyMiwgMHgxNEI2LCAweDVDMjMsIDB4NUMyMywgMHgyRjBCLA0KLSAgICAweDVDMjQsIDB4NUMyNCwgMHgxMEFELCAweDVDMjUsIDB4NUMyNSwgMHgxNEI3LCAweDVDMjYsIDB4NUMyNiwgMHgyRjBDLA0KLSAgICAweDVDMjcsIDB4NUMyNywgMHgxMDI5LCAweDVDMjgsIDB4NUMyQiwgMHgyRjBELCAweDVDMkMsIDB4NUMyQywgMHgxNEI4LA0KLSAgICAweDVDMkQsIDB4NUMzMCwgMHgyRjExLCAweDVDMzEsIDB4NUMzMSwgMHgwOEZDLCAweDVDMzIsIDB4NUMzMywgMHgyRjE1LA0KLSAgICAweDVDMzQsIDB4NUMzNCwgMHgxNEI5LCAweDVDMzUsIDB4NUMzNiwgMHgyRjE3LCAweDVDMzcsIDB4NUMzNywgMHgyMzVDLA0KLSAgICAweDVDMzgsIDB4NUMzOCwgMHgwRDQzLCAweDVDMzksIDB4NUMzOSwgMHgxMDgzLCAweDVDM0EsIDB4NUMzQSwgMHgwNTA0LA0KLSAgICAweDVDM0IsIDB4NUMzQiwgMHgxNzY2LCAweDVDM0MsIDB4NUMzQywgMHgwQjQ0LCAweDVDM0QsIDB4NUMzRCwgMHgwOEQwLA0KLSAgICAweDVDM0UsIDB4NUMzRSwgMHgwRUMxLCAweDVDM0YsIDB4NUMzRiwgMHgwQjU1LCAweDVDNDAsIDB4NUM0MCwgMHgwOTA1LA0KLSAgICAweDVDNDEsIDB4NUM0MSwgMHgwQkM3LCAweDVDNDIsIDB4NUM0MiwgMHgwNEFBLCAweDVDNDMsIDB4NUM0NCwgMHgyRjE5LA0KLSAgICAweDVDNDUsIDB4NUM0NSwgMHgwOTAyLCAweDVDNDYsIDB4NUM0NywgMHgyRjFCLCAweDVDNDgsIDB4NUM0OCwgMHgwQzc5LA0KLSAgICAweDVDNDksIDB4NUM0OSwgMHgwRTNFLCAweDVDNEEsIDB4NUM0QSwgMHgwOEJELCAweDVDNEIsIDB4NUM0QiwgMHgwRUVDLA0KLSAgICAweDVDNEMsIDB4NUM0RCwgMHgyRjFELCAweDVDNEUsIDB4NUM0RSwgMHgwRDUxLCAweDVDNEYsIDB4NUM0RiwgMHgwQkUwLA0KLSAgICAweDVDNTAsIDB4NUM1MCwgMHgxNzY4LCAweDVDNTEsIDB4NUM1MSwgMHgwRjg3LCAweDVDNTIsIDB4NUM1NCwgMHgyRjFGLA0KLSAgICAweDVDNTUsIDB4NUM1NSwgMHgxMTVBLCAweDVDNTYsIDB4NUM1OCwgMHgyRjIyLCAweDVDNTksIDB4NUM1OSwgMHgxNzY5LA0KLSAgICAweDVDNUEsIDB4NUM1RCwgMHgyRjI1LCAweDVDNUUsIDB4NUM1RSwgMHgwRDhCLCAweDVDNUYsIDB4NUM1RiwgMHgyRjI5LA0KLSAgICAweDVDNjAsIDB4NUM2MCwgMHgwRTcxLCAweDVDNjEsIDB4NUM2MSwgMHgwQTZDLCAweDVDNjIsIDB4NUM2MiwgMHgyMDUwLA0KLSAgICAweDVDNjMsIDB4NUM2MywgMHgxNzZCLCAweDVDNjQsIDB4NUM2NCwgMHgxRTY3LCAweDVDNjUsIDB4NUM2NSwgMHgwQTZCLA0KLSAgICAweDVDNjYsIDB4NUM2NiwgMHgxNzZDLCAweDVDNjcsIDB4NUM2NywgMHgyRjJBLCAweDVDNjgsIDB4NUM2OCwgMHgyM0Y0LA0KLSAgICAweDVDNjksIDB4NUM2QiwgMHgyRjJCLCAweDVDNkMsIDB4NUM2QywgMHgyMTNFLCAweDVDNkQsIDB4NUM2RCwgMHgyRjJFLA0KLSAgICAweDVDNkUsIDB4NUM2RSwgMHgxNzc0LCAweDVDNkYsIDB4NUM2RiwgMHgwRTdFLCAweDVDNzAsIDB4NUM3MCwgMHgyRjJGLA0KLSAgICAweDVDNzEsIDB4NUM3MSwgMHgwQ0Y2LCAweDVDNzIsIDB4NUM3OCwgMHgyRjMwLCAweDVDNzksIDB4NUM3OSwgMHgxMDYwLA0KLSAgICAweDVDN0EsIDB4NUM3QSwgMHgxNUFDLCAweDVDN0IsIDB4NUM3RSwgMHgyRjM3LCAweDVDN0YsIDB4NUM3RiwgMHgxMEQxLA0KLSAgICAweDVDODAsIDB4NUM4MCwgMHgyRjNCLCAweDVDODEsIDB4NUM4MSwgMHgwRERGLCAweDVDODIsIDB4NUM4MiwgMHgwQzEwLA0KLSAgICAweDVDODMsIDB4NUM4NywgMHgyRjNDLCAweDVDODgsIDB4NUM4OCwgMHgxNUIwLCAweDVDODksIDB4NUM4QiwgMHgyRjQxLA0KLSAgICAweDVDOEMsIDB4NUM4QywgMHgxNUFCLCAweDVDOEQsIDB4NUM4RCwgMHgxNUFELCAweDVDOEUsIDB4NUM4RiwgMHgyRjQ0LA0KLSAgICAweDVDOTAsIDB4NUM5MCwgMHgxNUFFLCAweDVDOTEsIDB4NUM5MSwgMHgxNUIzLCAweDVDOTIsIDB4NUM5MywgMHgyRjQ2LA0KLSAgICAweDVDOTQsIDB4NUM5NCwgMHgwNEI0LCAweDVDOTUsIDB4NUM5NSwgMHgyRjQ4LCAweDVDOTYsIDB4NUM5NiwgMHgxNUFGLA0KLSAgICAweDVDOTcsIDB4NUM5NywgMHgwNkQ1LCAweDVDOTgsIDB4NUM5OSwgMHgxNUIxLCAweDVDOUEsIDB4NUM5QSwgMHgxNUI0LA0KLSAgICAweDVDOUIsIDB4NUM5QiwgMHgwNTlCLCAweDVDOUMsIDB4NUM5QywgMHgxNUI1LCAweDVDOUQsIDB4NUNBMCwgMHgyRjQ5LA0KLSAgICAweDVDQTEsIDB4NUNBMSwgMHgxRjE2LCAweDVDQTIsIDB4NUNBMiwgMHgxNUI3LCAweDVDQTMsIDB4NUNBMywgMHgxNUJDLA0KLSAgICAweDVDQTQsIDB4NUNBOCwgMHgyRjRELCAweDVDQTksIDB4NUNBOSwgMHgwRkZCLCAweDVDQUEsIDB4NUNBQSwgMHgyRjUyLA0KLSAgICAweDVDQUIsIDB4NUNBQiwgMHgxNUJBLCAweDVDQUMsIDB4NUNBQywgMHgxNUI5LCAweDVDQUQsIDB4NUNBRCwgMHgwQTM0LA0KLSAgICAweDVDQUUsIDB4NUNCMCwgMHgyRjUzLCAweDVDQjEsIDB4NUNCMSwgMHgxNUJCLCAweDVDQjIsIDB4NUNCMiwgMHgyRjU2LA0KLSAgICAweDVDQjMsIDB4NUNCMywgMHgxMTAzLCAweDVDQjQsIDB4NUNCNCwgMHgyRjU3LCAweDVDQjUsIDB4NUNCNSwgMHgxNUI2LA0KLSAgICAweDVDQjYsIDB4NUNCNiwgMHgyRjU4LCAweDVDQjcsIDB4NUNCNywgMHgxNUJFLCAweDVDQjgsIDB4NUNCOCwgMHgwM0MxLA0KLSAgICAweDVDQjksIDB4NUNCQywgMHgyRjU5LCAweDVDQkQsIDB4NUNCRCwgMHgxNUI4LCAweDVDQkUsIDB4NUNCRSwgMHgyRjVELA0KLSAgICAweDVDQkYsIDB4NUNCRiwgMHgwOTg2LCAweDVDQzAsIDB4NUNDMCwgMHgyRjVFLCAweDVDQzEsIDB4NUNDMSwgMHgxNUJELA0KLSAgICAweDVDQzIsIDB4NUNDMywgMHgyRjVGLCAweDVDQzQsIDB4NUNDNCwgMHgxNUJGLCAweDVDQzUsIDB4NUNDQSwgMHgyRjYxLA0KLSAgICAweDVDQ0IsIDB4NUNDQiwgMHgxNUMyLCAweDVDQ0MsIDB4NUNEMSwgMHgyRjY3LCAweDVDRDIsIDB4NUNEMiwgMHgxNUMwLA0KLSAgICAweDVDRDMsIDB4NUNEOCwgMHgyRjZELCAweDVDRDksIDB4NUNEOSwgMHgxMUM0LCAweDVDREEsIDB4NUNFMCwgMHgyRjczLA0KLSAgICAweDVDRTEsIDB4NUNFMSwgMHgwRjJDLCAweDVDRTIsIDB4NUNFMywgMHgyRjdBLCAweDVDRTQsIDB4NUNFNCwgMHgxNUMxLA0KLSAgICAweDVDRTUsIDB4NUNFNSwgMHgxNUMzLCAweDVDRTYsIDB4NUNFNiwgMHgwQTc0LCAweDVDRTcsIDB4NUNFNywgMHgyRjdDLA0KLSAgICAweDVDRTgsIDB4NUNFOCwgMHgwNjJBLCAweDVDRTksIDB4NUNFOSwgMHgyRjdELCAweDVDRUEsIDB4NUNFQSwgMHgxMERELA0KLSAgICAweDVDRUIsIDB4NUNFQywgMHgyRjdFLCAweDVDRUQsIDB4NUNFRCwgMHgwQzRBLCAweDVDRUUsIDB4NUNFRiwgMHgyRjgwLA0KLSAgICAweDVDRjAsIDB4NUNGMCwgMHgwNjgyLCAweDVDRjEsIDB4NUNGMywgMHgyRjgyLCAweDVDRjQsIDB4NUNGNCwgMHgyMzg5LA0KLSAgICAweDVDRjUsIDB4NUNGNSwgMHgyRjg1LCAweDVDRjYsIDB4NUNGNiwgMHgxRUI3LCAweDVDRjcsIDB4NUNGQSwgMHgyRjg2LA0KLSAgICAweDVDRkIsIDB4NUNGQiwgMHgwOTJELCAweDVDRkMsIDB4NUNGQywgMHgyRjhBLCAweDVDRkQsIDB4NUNGRCwgMHgyMUI0LA0KLSAgICAweDVDRkUsIDB4NUNGRiwgMHgyRjhCLCAweDVEMDAsIDB4NUQwMSwgMHgyRjhELCAweDVEMDIsIDB4NUQwMywgMHgxNUM0LA0KLSAgICAweDVEMDQsIDB4NUQwNSwgMHgyRjhGLCAweDVEMDYsIDB4NUQwNiwgMHgxNUNCLCAweDVEMDcsIDB4NUQwNywgMHgwNTBDLA0KLSAgICAweDVEMDgsIDB4NUQwQywgMHgyRjkxLCAweDVEMEQsIDB4NUQwRCwgMHgyMzhGLCAweDVEMEUsIDB4NUQwRSwgMHgwQzA4LA0KLSAgICAweDVEMEYsIDB4NUQxMywgMHgyRjk2LCAweDVEMTQsIDB4NUQxNCwgMHgwNTYxLCAweDVEMTUsIDB4NUQxNSwgMHgyRjlCLA0KLSAgICAweDVEMTYsIDB4NUQxNiwgMHgwRkVCLCAweDVEMTcsIDB4NUQxNywgMHgxRjFBLCAweDVEMTgsIDB4NUQxQSwgMHgyRjlDLA0KLSAgICAweDVEMUIsIDB4NUQxQiwgMHgxNUNDLCAweDVEMUMsIDB4NUQxRCwgMHgyRjlGLCAweDVEMUUsIDB4NUQxRSwgMHgxNUNBLA0KLSAgICAweDVEMUYsIDB4NUQyMywgMHgyRkExLCAweDVEMjQsIDB4NUQyNCwgMHgxNUM5LCAweDVEMjUsIDB4NUQyNSwgMHgyRkE2LA0KLSAgICAweDVEMjYsIDB4NUQyNiwgMHgxNUM3LCAweDVEMjcsIDB4NUQyNywgMHgxNUM2LCAweDVEMjgsIDB4NUQyOCwgMHgyRkE3LA0KLSAgICAweDVEMjksIDB4NUQyOSwgMHgwNDI5LCAweDVEMkEsIDB4NUQyQiwgMHgyRkE4LCAweDVEMkMsIDB4NUQyQywgMHgyMzhCLA0KLSAgICAweDVEMkQsIDB4NUQyRCwgMHgxMTU5LCAweDVEMkUsIDB4NUQyRSwgMHgxNUM4LCAweDVEMkYsIDB4NUQzMywgMHgyRkFBLA0KLSAgICAweDVEMzQsIDB4NUQzNCwgMHgxNUNGLCAweDVEMzUsIDB4NUQzQywgMHgyRkFGLCAweDVEM0QsIDB4NUQzRCwgMHgxNUQwLA0KLSAgICAweDVEM0UsIDB4NUQzRSwgMHgxNUNFLCAweDVEM0YsIDB4NUQ0NiwgMHgyRkI3LCAweDVENDcsIDB4NUQ0NywgMHgxQjIyLA0KLSAgICAweDVENDgsIDB4NUQ0OSwgMHgyRkJGLCAweDVENEEsIDB4NUQ0QSwgMHgxNUQ3LCAweDVENEIsIDB4NUQ0QiwgMHgxNUQ2LA0KLSAgICAweDVENEMsIDB4NUQ0QywgMHgwQzMzLCAweDVENEQsIDB4NUQ0RiwgMHgyRkMxLCAweDVENTAsIDB4NUQ1MCwgMHgyMzhBLA0KLSAgICAweDVENTEsIDB4NUQ1NywgMHgyRkM0LCAweDVENTgsIDB4NUQ1OCwgMHgxNUNELCAweDVENTksIDB4NUQ1QSwgMHgyRkNCLA0KLSAgICAweDVENUIsIDB4NUQ1QiwgMHgxNUQyLCAweDVENUMsIDB4NUQ1QywgMHgyRkNELCAweDVENUQsIDB4NUQ1RCwgMHgxNUQ0LA0KLSAgICAweDVENUUsIDB4NUQ2OCwgMHgyRkNFLCAweDVENjksIDB4NUQ2OSwgMHgxNUQ4LCAweDVENkEsIDB4NUQ2QSwgMHgyRkQ5LA0KLSAgICAweDVENkIsIDB4NUQ2QiwgMHgxNUQ1LCAweDVENkMsIDB4NUQ2QywgMHgxNUQxLCAweDVENkQsIDB4NUQ2RSwgMHgyRkRBLA0KLSAgICAweDVENkYsIDB4NUQ2RiwgMHgxNUQzLCAweDVENzAsIDB4NUQ3MywgMHgyRkRDLCAweDVENzQsIDB4NUQ3NCwgMHgxNUQ5LA0KLSAgICAweDVENzUsIDB4NUQ4MCwgMHgyRkUwLCAweDVEODEsIDB4NUQ4MSwgMHgyMzkxLCAweDVEODIsIDB4NUQ4MiwgMHgxNURBLA0KLSAgICAweDVEODMsIDB4NUQ4MywgMHgyRkVDLCAweDVEODQsIDB4NUQ4NCwgMHgyMjcxLCAweDVEODUsIDB4NUQ4NiwgMHgyRkVELA0KLSAgICAweDVEODcsIDB4NUQ4NywgMHgyMzg4LCAweDVEODgsIDB4NUQ5NiwgMHgyRkVGLCAweDVEOTcsIDB4NUQ5NywgMHgyMzhFLA0KLSAgICAweDVEOTgsIDB4NUQ5OCwgMHgyRkZFLCAweDVEOTksIDB4NUQ5OSwgMHgxNURCLCAweDVEOUEsIDB4NUQ5QywgMHgyRkZGLA0KLSAgICAweDVEOUQsIDB4NUQ5RCwgMHgxNURDLCAweDVEOUUsIDB4NUQ5RiwgMHgzMDAyLCAweDVEQTAsIDB4NURBMCwgMHgyMzhELA0KLSAgICAweDVEQTEsIDB4NURBNiwgMHgzMDA0LCAweDVEQTcsIDB4NURBNywgMHgyMzhDLCAweDVEQTgsIDB4NURCNiwgMHgzMDBBLA0KLSAgICAweDVEQjcsIDB4NURCNywgMHgxNURFLCAweDVEQjgsIDB4NURCOCwgMHgyMzkwLCAweDVEQjksIDB4NURCOSwgMHgzMDE5LA0KLSAgICAweDVEQkEsIDB4NURCQSwgMHgyMDMzLCAweDVEQkIsIDB4NURCQiwgMHgzMDFBLCAweDVEQkMsIDB4NURCQywgMHgyMjNDLA0KLSAgICAweDVEQkQsIDB4NURDNCwgMHgzMDFCLCAweDVEQzUsIDB4NURDNSwgMHgxNURGLCAweDVEQzYsIDB4NURDQSwgMHgzMDIzLA0KLSAgICAweDVEQ0IsIDB4NURDQiwgMHgxRkU5LCAweDVEQ0MsIDB4NURDQywgMHgzMDI4LCAweDVEQ0QsIDB4NURDRCwgMHgwRUIwLA0KLSAgICAweDVEQ0UsIDB4NUREMSwgMHgzMDI5LCAweDVERDIsIDB4NUREMiwgMHgyMDU1LCAweDVERDMsIDB4NUREMywgMHgzMDJELA0KLSAgICAweDVERDQsIDB4NURENCwgMHgyMzkyLCAweDVERDUsIDB4NUREQSwgMHgzMDJFLCAweDVEREIsIDB4NUREQiwgMHgxODE1LA0KLSAgICAweDVEREMsIDB4NUREQywgMHgzMDM0LCAweDVEREQsIDB4NURERCwgMHgwNTJCLCAweDVEREUsIDB4NURERSwgMHgxMURDLA0KLSAgICAweDVEREYsIDB4NURFMCwgMHgzMDM1LCAweDVERTEsIDB4NURFMSwgMHgwRkRCLCAweDVERTIsIDB4NURFMiwgMHgwNEQ3LA0KLSAgICAweDVERTMsIDB4NURFNCwgMHgzMDM3LCAweDVERTUsIDB4NURFNSwgMHgwNkZELCAweDVERTYsIDB4NURFNiwgMHgxMjUwLA0KLSAgICAweDVERTcsIDB4NURFNywgMHgwQzQ2LCAweDVERTgsIDB4NURFOCwgMHgwOTBELCAweDVERTksIDB4NURFOSwgMHgwNzA3LA0KLSAgICAweDVERUEsIDB4NURFQSwgMHgzMDM5LCAweDVERUIsIDB4NURFQiwgMHgwRUU2LCAweDVERUMsIDB4NURFRCwgMHgzMDNBLA0KLSAgICAweDVERUUsIDB4NURFRSwgMHgwNEI1LCAweDVERUYsIDB4NURFRiwgMHgxMzlGLCAweDVERjAsIDB4NURGMCwgMHgyMzI0LA0KLSAgICAweDVERjEsIDB4NURGMSwgMHgwODJELCAweDVERjIsIDB4NURGMiwgMHgxMDU4LCAweDVERjMsIDB4NURGMywgMHgwREJELA0KLSAgICAweDVERjQsIDB4NURGNCwgMHgwM0Q4LCAweDVERjUsIDB4NURGNiwgMHgzMDNDLCAweDVERjcsIDB4NURGNywgMHgwRjVDLA0KLSAgICAweDVERjgsIDB4NURGQywgMHgzMDNFLCAweDVERkQsIDB4NURGRCwgMHgxMkY3LCAweDVERkUsIDB4NURGRSwgMHgwOEJFLA0KLSAgICAweDVERkYsIDB4NURGRiwgMHgzMDQzLCAweDVFMDAsIDB4NUUwMCwgMHgzMDQ0LCAweDVFMDEsIDB4NUUwMSwgMHgwNDNCLA0KLSAgICAweDVFMDIsIDB4NUUwMiwgMHgwRDY3LCAweDVFMDMsIDB4NUUwMywgMHgwNDgzLCAweDVFMDQsIDB4NUUwNCwgMHgzMDQ1LA0KLSAgICAweDVFMDUsIDB4NUUwNSwgMHgwRDlDLCAweDVFMDYsIDB4NUUwNiwgMHgwNjQ4LCAweDVFMDcsIDB4NUUwNywgMHgzMDQ2LA0KLSAgICAweDVFMDgsIDB4NUUwOCwgMHgwRDNELCAweDVFMDksIDB4NUUwQiwgMHgzMDQ3LCAweDVFMEMsIDB4NUUwQywgMHgwRjEwLA0KLSAgICAweDVFMEQsIDB4NUUwRSwgMHgzMDRBLCAweDVFMEYsIDB4NUUwRiwgMHgxNTlFLCAweDVFMTAsIDB4NUUxMCwgMHgxMTZCLA0KLSAgICAweDVFMTEsIDB4NUUxMSwgMHgxNUExLCAweDVFMTIsIDB4NUUxMywgMHgzMDRDLCAweDVFMTQsIDB4NUUxNCwgMHgxNUEwLA0KLSAgICAweDVFMTUsIDB4NUUxNSwgMHgwQjgyLCAweDVFMTYsIDB4NUUxNiwgMHgwRTRFLCAweDVFMTcsIDB4NUUxNywgMHgzMDRFLA0KLSAgICAweDVFMTgsIDB4NUUxOCwgMHgwOUZBLCAweDVFMTksIDB4NUUxOSwgMHgxNTlGLCAweDVFMUEsIDB4NUUxQSwgMHgxMUUyLA0KLSAgICAweDVFMUIsIDB4NUUxQiwgMHgwNDc2LCAweDVFMUMsIDB4NUUxQywgMHgxMUMzLCAweDVFMUQsIDB4NUUxRCwgMHgwNUJDLA0KLSAgICAweDVFMUUsIDB4NUUyNCwgMHgzMDRGLCAweDVFMjUsIDB4NUUyNSwgMHgyMTQzLCAweDVFMjYsIDB4NUUyNiwgMHgwNTdCLA0KLSAgICAweDVFMjcsIDB4NUUyNywgMHgxMUEwLCAweDVFMjgsIDB4NUUyQSwgMHgzMDU2LCAweDVFMkIsIDB4NUUyQiwgMHgyMTI5LA0KLSAgICAweDVFMkMsIDB4NUUyQywgMHgzMDU5LCAweDVFMkQsIDB4NUUyRCwgMHgwRjFDLCAweDVFMkUsIDB4NUUyRSwgMHgwM0ZBLA0KLSAgICAweDVFMkYsIDB4NUUzMCwgMHgzMDVBLCAweDVFMzEsIDB4NUUzMSwgMHgxNUEyLCAweDVFMzIsIDB4NUUzMiwgMHgzMDVDLA0KLSAgICAweDVFMzMsIDB4NUUzMywgMHgyMjc3LCAweDVFMzQsIDB4NUUzNSwgMHgzMDVELCAweDVFMzYsIDB4NUUzNiwgMHgxRUE3LA0KLSAgICAweDVFMzcsIDB4NUUzNywgMHgxNUE1LCAweDVFMzgsIDB4NUUzOCwgMHgwNEM4LCAweDVFMzksIDB4NUUzQSwgMHgzMDVGLA0KLSAgICAweDVFM0IsIDB4NUUzQywgMHgxNUEzLCAweDVFM0QsIDB4NUUzRCwgMHgwQUI2LCAweDVFM0UsIDB4NUUzRiwgMHgzMDYxLA0KLSAgICAweDVFNDAsIDB4NUU0MCwgMHgyMjg1LCAweDVFNDEsIDB4NUU0MSwgMHgzMDYzLCAweDVFNDIsIDB4NUU0MiwgMHgwQUUyLA0KLSAgICAweDVFNDMsIDB4NUU0MywgMHgyMzg0LCAweDVFNDQsIDB4NUU0NCwgMHgxNUE2LCAweDVFNDUsIDB4NUU0NSwgMHgwNjk2LA0KLSAgICAweDVFNDYsIDB4NUU0QiwgMHgzMDY0LCAweDVFNEMsIDB4NUU0QywgMHgwN0U0LCAweDVFNEQsIDB4NUU1MywgMHgzMDZBLA0KLSAgICAweDVFNTQsIDB4NUU1NCwgMHgxNUE3LCAweDVFNTUsIDB4NUU1NSwgMHgwQjFFLCAweDVFNTYsIDB4NUU1NiwgMHgzMDcxLA0KLSAgICAweDVFNTcsIDB4NUU1NywgMHgyMzg3LCAweDVFNTgsIDB4NUU1OCwgMHgyMzg2LCAweDVFNTksIDB4NUU1QSwgMHgzMDcyLA0KLSAgICAweDVFNUIsIDB4NUU1QiwgMHgxNUE4LCAweDVFNUMsIDB4NUU1RCwgMHgzMDc0LCAweDVFNUUsIDB4NUU1RSwgMHgxNUE5LA0KLSAgICAweDVFNUYsIDB4NUU1RiwgMHgyMjkwLCAweDVFNjAsIDB4NUU2MCwgMHgzMDc2LCAweDVFNjEsIDB4NUU2MSwgMHgxNUFBLA0KLSAgICAweDVFNjIsIDB4NUU2MiwgMHgwNTM0LCAweDVFNjMsIDB4NUU2MywgMHgxRTQ0LCAweDVFNjQsIDB4NUU2QSwgMHgzMDc3LA0KLSAgICAweDVFNkIsIDB4NUU2QiwgMHgxRTMyLCAweDVFNkMsIDB4NUU2QywgMHgyMzg1LCAweDVFNkQsIDB4NUU3MSwgMHgzMDdFLA0KLSAgICAweDVFNzIsIDB4NUU3MiwgMHgwNkM0LCAweDVFNzMsIDB4NUU3MywgMHgwQkRDLCAweDVFNzQsIDB4NUU3NCwgMHgwQjRELA0KLSAgICAweDVFNzUsIDB4NUU3NSwgMHgzMDgzLCAweDVFNzYsIDB4NUU3NiwgMHgwNDY5LCAweDVFNzcsIDB4NUU3NywgMHgzMDg0LA0KLSAgICAweDVFNzgsIDB4NUU3OCwgMHgwRjlELCAweDVFNzksIDB4NUU3OSwgMHgxRjEzLCAweDVFN0EsIDB4NUU3QSwgMHgxODEzLA0KLSAgICAweDVFN0IsIDB4NUU3QiwgMHgwN0Q4LCAweDVFN0MsIDB4NUU3QywgMHgxMEJDLCAweDVFN0QsIDB4NUU3RCwgMHgxMEE5LA0KLSAgICAweDVFN0UsIDB4NUU3RSwgMHgxRjczLCAweDVFN0YsIDB4NUU3RiwgMHgwNzNDLCAweDVFODAsIDB4NUU4MCwgMHgxNjMxLA0KLSAgICAweDVFODEsIDB4NUU4MywgMHgzMDg1LCAweDVFODQsIDB4NUU4NCwgMHgxMjBDLCAweDVFODUsIDB4NUU4NSwgMHgzMDg4LA0KLSAgICAweDVFODYsIDB4NUU4NiwgMHgwQzY5LCAweDVFODcsIDB4NUU4NywgMHgwNDNDLCAweDVFODgsIDB4NUU4OSwgMHgzMDg5LA0KLSAgICAweDVFOEEsIDB4NUU4QSwgMHgwNTM1LCAweDVFOEIsIDB4NUU4QiwgMHgxNjMzLCAweDVFOEMsIDB4NUU4RSwgMHgzMDhCLA0KLSAgICAweDVFOEYsIDB4NUU4RiwgMHgwRkJELCAweDVFOTAsIDB4NUU5MCwgMHgwQTU1LCAweDVFOTEsIDB4NUU5MSwgMHgxNjMyLA0KLSAgICAweDVFOTIsIDB4NUU5MiwgMHgzMDhFLCAweDVFOTMsIDB4NUU5MywgMHgwOTZGLCAweDVFOTQsIDB4NUU5NCwgMHgxMDhCLA0KLSAgICAweDVFOTUsIDB4NUU5NSwgMHgwNUI4LCAweDVFOTYsIDB4NUU5NiwgMHgxNjM0LCAweDVFOTcsIDB4NUU5NywgMHgwNUNCLA0KLSAgICAweDVFOTgsIDB4NUU5OCwgMHgzMDhGLCAweDVFOTksIDB4NUU5OSwgMHgwQUYyLCAweDVFOUEsIDB4NUU5QSwgMHgwNkY4LA0KLSAgICAweDVFOUIsIDB4NUU5QiwgMHgzMDkwLCAweDVFOUMsIDB4NUU5QywgMHgwNkE5LCAweDVFOUQsIDB4NUU5RCwgMHgzMDkxLA0KLSAgICAweDVFOUUsIDB4NUU5RSwgMHgwQjk0LCAweDVFOUYsIDB4NUU5RiwgMHgwNjZDLCAweDVFQTAsIDB4NUVBMCwgMHgxNjM2LA0KLSAgICAweDVFQTEsIDB4NUVBNCwgMHgzMDkyLCAweDVFQTUsIDB4NUVBNSwgMHgxNjM1LCAweDVFQTYsIDB4NUVBNiwgMHgwNjA3LA0KLSAgICAweDVFQTcsIDB4NUVBNywgMHgxMjU2LCAweDVFQTgsIDB4NUVBQSwgMHgzMDk2LCAweDVFQUIsIDB4NUVBQiwgMHgxRkUwLA0KLSAgICAweDVFQUMsIDB4NUVBQywgMHgzMDk5LCAweDVFQUQsIDB4NUVBRCwgMHgwRTU2LCAweDVFQUUsIDB4NUVCMiwgMHgzMDlBLA0KLSAgICAweDVFQjMsIDB4NUVCMywgMHgxNjNBLCAweDVFQjQsIDB4NUVCNCwgMHgzMDlGLCAweDVFQjUsIDB4NUVCNSwgMHgxNjM4LA0KLSAgICAweDVFQjYsIDB4NUVCNiwgMHgwRDkzLCAweDVFQjcsIDB4NUVCNywgMHgwOTQyLCAweDVFQjgsIDB4NUVCOCwgMHgxMDlFLA0KLSAgICAweDVFQjksIDB4NUVCOSwgMHgxNjM3LCAweDVFQkEsIDB4NUVCRCwgMHgzMEEwLCAweDVFQkUsIDB4NUVCRSwgMHgxNjM5LA0KLSAgICAweDVFQkYsIDB4NUVDOCwgMHgzMEE0LCAweDVFQzksIDB4NUVDOSwgMHgwOUY3LCAweDVFQ0EsIDB4NUVDQSwgMHgwOUIzLA0KLSAgICAweDVFQ0IsIDB4NUVEMCwgMHgzMEFFLCAweDVFRDEsIDB4NUVEMSwgMHgxNjNELCAweDVFRDIsIDB4NUVEMiwgMHgxNjNDLA0KLSAgICAweDVFRDMsIDB4NUVEMywgMHgwOTk1LCAweDVFRDQsIDB4NUVENSwgMHgzMEI0LCAweDVFRDYsIDB4NUVENiwgMHgwQTE3LA0KLSAgICAweDVFRDcsIDB4NUVEQSwgMHgzMEI2LCAweDVFREIsIDB4NUVEQiwgMHgxNjNFLCAweDVFREMsIDB4NUVERSwgMHgzMEJBLA0KLSAgICAweDVFREYsIDB4NUVERiwgMHgyMDg3LCAweDVFRTAsIDB4NUVFMCwgMHgxRTc4LCAweDVFRTEsIDB4NUVFMSwgMHgyM0FFLA0KLSAgICAweDVFRTIsIDB4NUVFMiwgMHgxRUY2LCAweDVFRTMsIDB4NUVFMywgMHgxRjMxLCAweDVFRTQsIDB4NUVFNywgMHgzMEJELA0KLSAgICAweDVFRTgsIDB4NUVFOCwgMHgxNjNGLCAweDVFRTksIDB4NUVFOSwgMHgzMEMxLCAweDVFRUEsIDB4NUVFQSwgMHgxNjQwLA0KLSAgICAweDVFRUIsIDB4NUVFQiwgMHgzMEMyLCAweDVFRUMsIDB4NUVFQywgMHgyMDQ1LCAweDVFRUQsIDB4NUVGMiwgMHgzMEMzLA0KLSAgICAweDVFRjMsIDB4NUVGMywgMHgyMTc4LCAweDVFRjQsIDB4NUVGNCwgMHgxMzk4LCAweDVFRjUsIDB4NUVGNSwgMHgzMEM5LA0KLSAgICAweDVFRjYsIDB4NUVGNiwgMHgwRkZDLCAweDVFRjcsIDB4NUVGNywgMHgwRTUzLCAweDVFRjgsIDB4NUVGOSwgMHgzMENBLA0KLSAgICAweDVFRkEsIDB4NUVGQSwgMHgwODc5LCAweDVFRkIsIDB4NUVGRCwgMHgzMENDLCAweDVFRkUsIDB4NUVGRSwgMHgxNEFELA0KLSAgICAweDVFRkYsIDB4NUVGRiwgMHgxMjVCLCAweDVGMDAsIDB4NUYwMCwgMHgwOTM3LCAweDVGMDEsIDB4NUYwMSwgMHgxMzlELA0KLSAgICAweDVGMDIsIDB4NUYwMiwgMHgxMDczLCAweDVGMDMsIDB4NUYwMywgMHgwQzE5LCAweDVGMDQsIDB4NUYwNCwgMHgwQjZCLA0KLSAgICAweDVGMDUsIDB4NUYwNywgMHgzMENGLCAweDVGMDgsIDB4NUYwOCwgMHgxNEFFLCAweDVGMDksIDB4NUYwOSwgMHgzMEQyLA0KLSAgICAweDVGMEEsIDB4NUYwQSwgMHgwNDQwLCAweDVGMEIsIDB4NUYwQiwgMHgxNEY2LCAweDVGMEMsIDB4NUYwRSwgMHgzMEQzLA0KLSAgICAweDVGMEYsIDB4NUYwRiwgMHgwRDU0LCAweDVGMTAsIDB4NUYxMCwgMHgzMEQ2LCAweDVGMTEsIDB4NUYxMSwgMHgxNEY5LA0KLSAgICAweDVGMTIsIDB4NUYxMiwgMHgzMEQ3LCAweDVGMTMsIDB4NUYxMywgMHgwNzA2LCAweDVGMTQsIDB4NUYxNCwgMHgzMEQ4LA0KLSAgICAweDVGMTUsIDB4NUYxNSwgMHgxMDg0LCAweDVGMTYsIDB4NUYxNiwgMHgzMEQ5LCAweDVGMTcsIDB4NUYxNywgMHgwNkEwLA0KLSAgICAweDVGMTgsIDB4NUYxOCwgMHgwN0EyLCAweDVGMTksIDB4NUYxQSwgMHgzMERBLCAweDVGMUIsIDB4NUYxQiwgMHgwNEZGLA0KLSAgICAweDVGMUMsIDB4NUYxRSwgMHgzMERDLCAweDVGMUYsIDB4NUYxRiwgMHgwNUJELCAweDVGMjAsIDB4NUYyMCwgMHgxMTY2LA0KLSAgICAweDVGMjEsIDB4NUYyNCwgMHgzMERGLCAweDVGMjUsIDB4NUYyNSwgMHgwQURCLCAweDVGMjYsIDB4NUYyNiwgMHgwRjNGLA0KLSAgICAweDVGMjcsIDB4NUYyNywgMHgwN0I2LCAweDVGMjgsIDB4NUYyOCwgMHgzMEUzLCAweDVGMjksIDB4NUYyOSwgMHgxNzZGLA0KLSAgICAweDVGMkEsIDB4NUYyQSwgMHgxNzZFLCAweDVGMkIsIDB4NUYyQywgMHgzMEU0LCAweDVGMkQsIDB4NUYyRCwgMHgxNzcwLA0KLSAgICAweDVGMkUsIDB4NUYyRSwgMHgzMEU2LCAweDVGMkYsIDB4NUYyRiwgMHgwRTk1LCAweDVGMzAsIDB4NUYzMCwgMHgzMEU3LA0KLSAgICAweDVGMzEsIDB4NUYzMSwgMHgwQ0QwLCAweDVGMzIsIDB4NUYzMiwgMHgzMEU4LCAweDVGMzMsIDB4NUYzMywgMHgyM0Y1LA0KLSAgICAweDVGMzQsIDB4NUYzNCwgMHgzMEU5LCAweDVGMzUsIDB4NUYzNSwgMHgyMjc1LCAweDVGMzYsIDB4NUYzOCwgMHgzMEVBLA0KLSAgICAweDVGMzksIDB4NUYzOSwgMHgwNTkwLCAweDVGM0EsIDB4NUYzQSwgMHgwQzNDLCAweDVGM0IsIDB4NUYzQiwgMHgzMEVELA0KLSAgICAweDVGM0MsIDB4NUYzQywgMHgxNzcyLCAweDVGM0QsIDB4NUYzRiwgMHgzMEVFLCAweDVGNDAsIDB4NUY0MCwgMHgxOUJFLA0KLSAgICAweDVGNDEsIDB4NUY0NSwgMHgzMEYxLCAweDVGNDYsIDB4NUY0NiwgMHgyNjZFLCAweDVGNDcsIDB4NUY0NywgMHgzMEY2LA0KLSAgICAweDVGNDgsIDB4NUY0OCwgMHgxRUIwLCAweDVGNDksIDB4NUY0QiwgMHgzMEY3LCAweDVGNEMsIDB4NUY0QywgMHgyMDgzLA0KLSAgICAweDVGNEQsIDB4NUY0RCwgMHgzMEZBLCAweDVGNEUsIDB4NUY0RSwgMHgyMTg4LCAweDVGNEYsIDB4NUY0RiwgMHgzMEZCLA0KLSAgICAweDVGNTAsIDB4NUY1MCwgMHgxNzYyLCAweDVGNTEsIDB4NUY1MSwgMHgzMEZDLCAweDVGNTIsIDB4NUY1MiwgMHgwNzQyLA0KLSAgICAweDVGNTMsIDB4NUY1MywgMHgwNTkyLCAweDVGNTQsIDB4NUY1NCwgMHgzMEZELCAweDVGNTUsIDB4NUY1NSwgMHgwQTYzLA0KLSAgICAweDVGNTYsIDB4NUY1NiwgMHgxNzY0LCAweDVGNTcsIDB4NUY1NywgMHgxNzYzLCAweDVGNTgsIDB4NUY1OCwgMHgxNzY1LA0KLSAgICAweDVGNTksIDB4NUY1OSwgMHgyNjdDLCAweDVGNUEsIDB4NUY1QywgMHgzMEZFLCAweDVGNUQsIDB4NUY1RCwgMHgxMDU0LA0KLSAgICAweDVGNUUsIDB4NUY2MCwgMHgzMTAxLCAweDVGNjEsIDB4NUY2MSwgMHgxNUVFLCAweDVGNjIsIDB4NUY2MiwgMHgwRjk5LA0KLSAgICAweDVGNjMsIDB4NUY2MywgMHgzMTA0LCAweDVGNjQsIDB4NUY2NCwgMHgwRTVGLCAweDVGNjUsIDB4NUY2NSwgMHgzMTA1LA0KLSAgICAweDVGNjYsIDB4NUY2NiwgMHgxMDBFLCAweDVGNjcsIDB4NUY2OCwgMHgzMTA2LCAweDVGNjksIDB4NUY2OSwgMHgwNDkxLA0KLSAgICAweDVGNkEsIDB4NUY2QSwgMHgwNDU0LCAweDVGNkIsIDB4NUY2QiwgMHgzMTA4LCAweDVGNkMsIDB4NUY2QywgMHgwNDVCLA0KLSAgICAweDVGNkQsIDB4NUY2RCwgMHgwQkFFLCAweDVGNkUsIDB4NUY2RiwgMHgzMTA5LCAweDVGNzAsIDB4NUY3MCwgMHgxMTY0LA0KLSAgICAweDVGNzEsIDB4NUY3MSwgMHgxMDk1LCAweDVGNzIsIDB4NUY3MiwgMHgzMTBCLCAweDVGNzMsIDB4NUY3MywgMHgxNUUwLA0KLSAgICAweDVGNzQsIDB4NUY3NiwgMHgzMTBDLCAweDVGNzcsIDB4NUY3NywgMHgxNUUxLCAweDVGNzgsIDB4NUY3OCwgMHgzMTBGLA0KLSAgICAweDVGNzksIDB4NUY3OSwgMHgxMDYyLCAweDVGN0EsIDB4NUY3QSwgMHgzMTEwLCAweDVGN0IsIDB4NUY3QiwgMHgwNERFLA0KLSAgICAweDVGN0MsIDB4NUY3QywgMHgwNDM0LCAweDVGN0QsIDB4NUY3RiwgMHgzMTExLCAweDVGODAsIDB4NUY4MCwgMHgwRUFBLA0KLSAgICAweDVGODEsIDB4NUY4MSwgMHgxMTk4LCAweDVGODIsIDB4NUY4MiwgMHgxNUUyLCAweDVGODMsIDB4NUY4MywgMHgzMTE0LA0KLSAgICAweDVGODQsIDB4NUY4NCwgMHgwOEU1LCAweDVGODUsIDB4NUY4NSwgMHgwNTgwLCAweDVGODYsIDB4NUY4NiwgMHgzMTE1LA0KLSAgICAweDVGODcsIDB4NUY4NywgMHgxNUUzLCAweDVGODgsIDB4NUY4OCwgMHgwNzkzLCAweDVGODksIDB4NUY4OSwgMHgxNUU0LA0KLSAgICAweDVGOEEsIDB4NUY4QSwgMHgwN0M3LCAweDVGOEIsIDB4NUY4QiwgMHgwQTcwLCAweDVGOEMsIDB4NUY4QywgMHgxNUU1LA0KLSAgICAweDVGOEQsIDB4NUY4RiwgMHgzMTE2LCAweDVGOTAsIDB4NUY5MCwgMHgwRkI3LCAweDVGOTEsIDB4NUY5MSwgMHgxRkM1LA0KLSAgICAweDVGOTIsIDB4NUY5MiwgMHgwRTZFLCAweDVGOTMsIDB4NUY5NCwgMHgzMTE5LCAweDVGOTUsIDB4NUY5NSwgMHgxNUU2LA0KLSAgICAweDVGOTYsIDB4NUY5NiwgMHgzMTFCLCAweDVGOTcsIDB4NUY5NywgMHgwNUE0LCAweDVGOTgsIDB4NUY5OCwgMHgwQjg4LA0KLSAgICAweDVGOTksIDB4NUY5OSwgMHgxNUU3LCAweDVGOUEsIDB4NUY5QiwgMHgzMTFDLCAweDVGOUMsIDB4NUY5QywgMHgxNUU4LA0KLSAgICAweDVGOUQsIDB4NUY5RCwgMHgzMTFFLCAweDVGOUUsIDB4NUY5RSwgMHgxRUExLCAweDVGOUYsIDB4NUY5RiwgMHgzMTFGLA0KLSAgICAweDVGQTAsIDB4NUZBMCwgMHgyMzkzLCAweDVGQTEsIDB4NUZBMSwgMHgxMERFLCAweDVGQTIsIDB4NUZBNywgMHgzMTIwLA0KLSAgICAweDVGQTgsIDB4NUZBOCwgMHgxNUU5LCAweDVGQTksIDB4NUZBOSwgMHgxRjBCLCAweDVGQUEsIDB4NUZBQSwgMHgwRkQ2LA0KLSAgICAweDVGQUIsIDB4NUZBQywgMHgzMTI2LCAweDVGQUQsIDB4NUZBRCwgMHgxNUVBLCAweDVGQUUsIDB4NUZBRSwgMHgwRUIxLA0KLSAgICAweDVGQUYsIDB4NUZCNCwgMHgzMTI4LCAweDVGQjUsIDB4NUZCNSwgMHgxNUVCLCAweDVGQjYsIDB4NUZCNiwgMHgzMTJFLA0KLSAgICAweDVGQjcsIDB4NUZCNywgMHgwNUEzLCAweDVGQjgsIDB4NUZCOCwgMHgzMTJGLCAweDVGQjksIDB4NUZCOSwgMHgxRTdDLA0KLSAgICAweDVGQkEsIDB4NUZCQiwgMHgzMTMwLCAweDVGQkMsIDB4NUZCQywgMHgxNUVDLCAweDVGQkQsIDB4NUZCRCwgMHgwN0VBLA0KLSAgICAweDVGQkUsIDB4NUZDMiwgMHgzMTMyLCAweDVGQzMsIDB4NUZDMywgMHgwRjhGLCAweDVGQzQsIDB4NUZDNCwgMHgxNjQyLA0KLSAgICAweDVGQzUsIDB4NUZDNSwgMHgwNDQxLCAweDVGQzYsIDB4NUZDNiwgMHgxMDZCLCAweDVGQzcsIDB4NUZDOCwgMHgzMTM3LA0KLSAgICAweDVGQzksIDB4NUZDOSwgMHgxNjQzLCAweDVGQ0EsIDB4NUZDQiwgMHgzMTM5LCAweDVGQ0MsIDB4NUZDQywgMHgwODNDLA0KLSAgICAweDVGQ0QsIDB4NUZDRCwgMHgwQ0E3LCAweDVGQ0UsIDB4NUZDRSwgMHgzMTNCLCAweDVGQ0YsIDB4NUZDRiwgMHgxNjQ1LA0KLSAgICAweDVGRDAsIDB4NUZEMCwgMHgxQTBDLCAweDVGRDEsIDB4NUZEMSwgMHgxQTBCLCAweDVGRDIsIDB4NUZEMiwgMHgxNEY3LA0KLSAgICAweDVGRDMsIDB4NUZENSwgMHgzMTNDLCAweDVGRDYsIDB4NUZENiwgMHgxNjQ0LCAweDVGRDcsIDB4NUZENywgMHgxMUJELA0KLSAgICAweDVGRDgsIDB4NUZEOCwgMHgwRUFELCAweDVGRDksIDB4NUZEOSwgMHgwQUFCLCAweDVGREEsIDB4NUZEQywgMHgzMTNGLA0KLSAgICAweDVGREQsIDB4NUZERCwgMHgxNjgzLCAweDVGREUsIDB4NUZERiwgMHgzMTQyLCAweDVGRTAsIDB4NUZFMCwgMHgxMUQxLA0KLSAgICAweDVGRTEsIDB4NUZFMSwgMHgxNjQ5LCAweDVGRTIsIDB4NUZFMywgMHgzMTQ0LCAweDVGRTQsIDB4NUZFNCwgMHgxNjRBLA0KLSAgICAweDVGRTUsIDB4NUZFNiwgMHgzMTQ2LCAweDVGRTcsIDB4NUZFNywgMHgxMEFDLCAweDVGRTgsIDB4NUZFOSwgMHgzMTQ4LA0KLSAgICAweDVGRUEsIDB4NUZFQSwgMHgxNjRFLCAweDVGRUIsIDB4NUZFQiwgMHgwOTc5LCAweDVGRUMsIDB4NUZFQywgMHgzMTRBLA0KLSAgICAweDVGRUQsIDB4NUZFRCwgMHgxNjRGLCAweDVGRUUsIDB4NUZFRSwgMHgxNjQ3LCAweDVGRUYsIDB4NUZGMCwgMHgzMTRCLA0KLSAgICAweDVGRjEsIDB4NUZGMSwgMHgwNEU1LCAweDVGRjIsIDB4NUZGNCwgMHgzMTRELCAweDVGRjUsIDB4NUZGNSwgMHgwQjUxLA0KLSAgICAweDVGRjYsIDB4NUZGNywgMHgzMTUwLCAweDVGRjgsIDB4NUZGOCwgMHgxNjUwLCAweDVGRjksIDB4NUZGQSwgMHgzMTUyLA0KLSAgICAweDVGRkIsIDB4NUZGQiwgMHgwRjhFLCAweDVGRkMsIDB4NUZGQywgMHgzMTU0LCAweDVGRkQsIDB4NUZGRCwgMHgwN0FELA0KLSAgICAweDVGRkUsIDB4NUZGRSwgMHgxNjRCLCAweDVGRkYsIDB4NUZGRiwgMHgwNjdCLCAweDYwMDAsIDB4NjAwMCwgMHgwN0M4LA0KLSAgICAweDYwMDEsIDB4NjAwMSwgMHgwREZGLCAweDYwMDIsIDB4NjAwMiwgMHgwREMwLCAweDYwMDMsIDB4NjAwMywgMHgxNjQ2LA0KLSAgICAweDYwMDQsIDB4NjAwNCwgMHgxNjQ4LCAweDYwMDUsIDB4NjAwNiwgMHgxNjRDLCAweDYwMDcsIDB4NjAwOSwgMHgzMTU1LA0KLSAgICAweDYwMEEsIDB4NjAwQSwgMHgxNjU5LCAweDYwMEIsIDB4NjAwQywgMHgzMTU4LCAweDYwMEQsIDB4NjAwRCwgMHgxNjU2LA0KLSAgICAweDYwMEUsIDB4NjAwRSwgMHgxMTM4LCAweDYwMEYsIDB4NjAwRiwgMHgxNjU1LCAweDYwMTAsIDB4NjAxMSwgMHgzMTVBLA0KLSAgICAweDYwMTIsIDB4NjAxMiwgMHgwQjZFLCAweDYwMTMsIDB4NjAxMywgMHgzMTVDLCAweDYwMTQsIDB4NjAxNCwgMHgxMTlCLA0KLSAgICAweDYwMTUsIDB4NjAxNSwgMHgwQjgzLCAweDYwMTYsIDB4NjAxNiwgMHgwNDg3LCAweDYwMTcsIDB4NjAxOCwgMHgzMTVELA0KLSAgICAweDYwMTksIDB4NjAxOSwgMHgxNjUxLCAweDYwMUEsIDB4NjAxQSwgMHgzMTVGLCAweDYwMUIsIDB4NjAxQiwgMHgxNjU0LA0KLSAgICAweDYwMUMsIDB4NjAxQywgMHgwOUY4LCAweDYwMUQsIDB4NjAxRCwgMHgwREIxLCAweDYwMUUsIDB4NjAxRiwgMHgzMTYwLA0KLSAgICAweDYwMjAsIDB4NjAyMCwgMHgwNTgyLCAweDYwMjEsIDB4NjAyMSwgMHgxNjVCLCAweDYwMjIsIDB4NjAyNCwgMHgzMTYyLA0KLSAgICAweDYwMjUsIDB4NjAyNSwgMHgwODI0LCAweDYwMjYsIDB4NjAyNiwgMHgxNjUzLCAweDYwMjcsIDB4NjAyNywgMHgwRjlGLA0KLSAgICAweDYwMjgsIDB4NjAyOCwgMHgxMEZDLCAweDYwMjksIDB4NjAyOSwgMHgxNjU3LCAweDYwMkEsIDB4NjAyQSwgMHgwNzJGLA0KLSAgICAweDYwMkIsIDB4NjAyQiwgMHgxNjU4LCAweDYwMkMsIDB4NjAyRSwgMHgzMTY1LCAweDYwMkYsIDB4NjAyRiwgMHgwQzUwLA0KLSAgICAweDYwMzAsIDB4NjAzNCwgMHgzMTY4LCAweDYwMzUsIDB4NjAzNSwgMHgxNjUyLCAweDYwMzYsIDB4NjAzQSwgMHgzMTZELA0KLSAgICAweDYwM0IsIDB4NjAzQiwgMHgxMjM5LCAweDYwM0MsIDB4NjAzQywgMHgxQTBELCAweDYwM0QsIDB4NjAzRSwgMHgzMTcyLA0KLSAgICAweDYwM0YsIDB4NjAzRiwgMHgxNjVBLCAweDYwNDAsIDB4NjA0MCwgMHgzMTc0LCAweDYwNDEsIDB4NjA0MSwgMHgxQTExLA0KLSAgICAweDYwNDIsIDB4NjA0MiwgMHgxNjYwLCAweDYwNDMsIDB4NjA0MywgMHgwRDY4LCAweDYwNDQsIDB4NjA0QSwgMHgzMTc1LA0KLSAgICAweDYwNEIsIDB4NjA0QiwgMHgwOUZFLCAweDYwNEMsIDB4NjA0QywgMHgzMTdDLCAweDYwNEQsIDB4NjA0RCwgMHgwN0U1LA0KLSAgICAweDYwNEUsIDB4NjA0RiwgMHgzMTdELCAweDYwNTAsIDB4NjA1MCwgMHgwOTYzLCAweDYwNTEsIDB4NjA1MSwgMHgzMTdGLA0KLSAgICAweDYwNTIsIDB4NjA1MiwgMHgwNzlBLCAweDYwNTMsIDB4NjA1NCwgMHgzMTgwLCAweDYwNTUsIDB4NjA1NSwgMHgwRDk2LA0KLSAgICAweDYwNTYsIDB4NjA1OCwgMHgzMTgyLCAweDYwNTksIDB4NjA1OSwgMHgxQTEyLCAweDYwNUEsIDB4NjA1QSwgMHgxQTBGLA0KLSAgICAweDYwNUIsIDB4NjA1QywgMHgzMTg1LCAweDYwNUQsIDB4NjA1RCwgMHgxQTBFLCAweDYwNUUsIDB4NjA2MSwgMHgzMTg3LA0KLSAgICAweDYwNjIsIDB4NjA2MiwgMHgwN0VCLCAweDYwNjMsIDB4NjA2MywgMHgxQTEzLCAweDYwNjQsIDB4NjA2NCwgMHgwRkJGLA0KLSAgICAweDYwNjUsIDB4NjA2NiwgMHgzMThCLCAweDYwNjcsIDB4NjA2NywgMHgxQTEwLCAweDYwNjgsIDB4NjA2OCwgMHgwNzk1LA0KLSAgICAweDYwNjksIDB4NjA2OSwgMHgwNjM2LCAweDYwNkEsIDB4NjA2QSwgMHgxNjYxLCAweDYwNkIsIDB4NjA2QiwgMHgwNUYxLA0KLSAgICAweDYwNkMsIDB4NjA2QywgMHgwRTQ0LCAweDYwNkQsIDB4NjA2RCwgMHgwNzAwLCAweDYwNkUsIDB4NjA2RSwgMHgzMThELA0KLSAgICAweDYwNkYsIDB4NjA2RiwgMHgwRjBGLCAweDYwNzAsIDB4NjA3MCwgMHgwQzFFLCAweDYwNzEsIDB4NjA3MiwgMHgzMThFLA0KLSAgICAweDYwNzMsIDB4NjA3MywgMHgwOTVGLCAweDYwNzQsIDB4NjA3NSwgMHgzMTkwLCAweDYwNzYsIDB4NjA3NiwgMHgwNjMwLA0KLSAgICAweDYwNzcsIDB4NjA3NywgMHgzMTkyLCAweDYwNzgsIDB4NjA3OSwgMHgxNjVDLCAweDYwN0EsIDB4NjA3QSwgMHgxNjVGLA0KLSAgICAweDYwN0IsIDB4NjA3QiwgMHgxNjVFLCAweDYwN0MsIDB4NjA3QywgMHgwQjM4LCAweDYwN0QsIDB4NjA3RCwgMHgxNjYyLA0KLSAgICAweDYwN0UsIDB4NjA3RSwgMHgzMTkzLCAweDYwN0YsIDB4NjA3RiwgMHgxMEE2LCAweDYwODAsIDB4NjA4MiwgMHgzMTk0LA0KLSAgICAweDYwODMsIDB4NjA4MywgMHgxNjY3LCAweDYwODQsIDB4NjA4NCwgMHgwQzQxLCAweDYwODUsIDB4NjA4OCwgMHgzMTk3LA0KLSAgICAweDYwODksIDB4NjA4OSwgMHgwRjExLCAweDYwOEEsIDB4NjA4QiwgMHgzMTlCLCAweDYwOEMsIDB4NjA4QywgMHgxNjY5LA0KLSAgICAweDYwOEQsIDB4NjA4RCwgMHgwNzZFLCAweDYwOEUsIDB4NjA5MSwgMHgzMTlELCAweDYwOTIsIDB4NjA5MiwgMHgxNjY4LA0KLSAgICAweDYwOTMsIDB4NjA5MywgMHgzMUExLCAweDYwOTQsIDB4NjA5NCwgMHgwN0VGLCAweDYwOTUsIDB4NjA5NSwgMHgzMUEyLA0KLSAgICAweDYwOTYsIDB4NjA5NiwgMHgxNjYzLCAweDYwOTcsIDB4NjA5OSwgMHgzMUEzLCAweDYwOUEsIDB4NjA5QSwgMHgxNjY0LA0KLSAgICAweDYwOUIsIDB4NjA5QiwgMHgxNjZBLCAweDYwOUMsIDB4NjA5QywgMHgzMUE2LCAweDYwOUQsIDB4NjA5RCwgMHgxNjY2LA0KLSAgICAweDYwOUUsIDB4NjA5RSwgMHgzMUE3LCAweDYwOUYsIDB4NjA5RiwgMHgwRjAxLCAweDYwQTAsIDB4NjBBMCwgMHgxMEFCLA0KLSAgICAweDYwQTEsIDB4NjBBMiwgMHgzMUE4LCAweDYwQTMsIDB4NjBBMywgMHgwN0QxLCAweDYwQTQsIDB4NjBBNSwgMHgzMUFBLA0KLSAgICAweDYwQTYsIDB4NjBBNiwgMHgxMTA2LCAweDYwQTcsIDB4NjBBNywgMHgzMUFDLCAweDYwQTgsIDB4NjBBOCwgMHgwQjVELA0KLSAgICAweDYwQTksIDB4NjBBQSwgMHgzMUFELCAweDYwQUIsIDB4NjBBQiwgMHgxQTE0LCAweDYwQUMsIDB4NjBBQywgMHgwRkM3LA0KLSAgICAweDYwQUQsIDB4NjBBRCwgMHgxNjY1LCAweDYwQUUsIDB4NjBBRSwgMHgzMUFGLCAweDYwQUYsIDB4NjBBRiwgMHgwQUZBLA0KLSAgICAweDYwQjAsIDB4NjBCMCwgMHgzMUIwLCAweDYwQjEsIDB4NjBCMSwgMHgxNjZELCAweDYwQjIsIDB4NjBCMiwgMHgwNDE4LA0KLSAgICAweDYwQjMsIDB4NjBCMywgMHgzMUIxLCAweDYwQjQsIDB4NjBCNCwgMHgxNjcyLCAweDYwQjUsIDB4NjBCNSwgMHgyM0I0LA0KLSAgICAweDYwQjYsIDB4NjBCNiwgMHgyMDdFLCAweDYwQjcsIDB4NjBCNywgMHgzMUIyLCAweDYwQjgsIDB4NjBCOCwgMHgwODM1LA0KLSAgICAweDYwQjksIDB4NjBCQSwgMHgzMUIzLCAweDYwQkIsIDB4NjBCQiwgMHgxNjZDLCAweDYwQkMsIDB4NjBCQywgMHgwNUEwLA0KLSAgICAweDYwQkQsIDB4NjBDNCwgMHgzMUI1LCAweDYwQzUsIDB4NjBDNSwgMHgwQzY2LCAweDYwQzYsIDB4NjBDNiwgMHgxNjcwLA0KLSAgICAweDYwQzcsIDB4NjBDOSwgMHgzMUJELCAweDYwQ0EsIDB4NjBDQSwgMHgwOEQ5LCAweDYwQ0IsIDB4NjBDQiwgMHgwRUEwLA0KLSAgICAweDYwQ0MsIDB4NjBEMCwgMHgzMUMwLCAweDYwRDEsIDB4NjBEMSwgMHgwODA4LCAweDYwRDIsIDB4NjBENCwgMHgzMUM1LA0KLSAgICAweDYwRDUsIDB4NjBENSwgMHgwRTNCLCAweDYwRDYsIDB4NjBENywgMHgzMUM4LCAweDYwRDgsIDB4NjBEOCwgMHgxNjZGLA0KLSAgICAweDYwRDksIDB4NjBEOSwgMHgzMUNBLCAweDYwREEsIDB4NjBEQSwgMHgxNjcxLCAweDYwREIsIDB4NjBEQiwgMHgzMUNCLA0KLSAgICAweDYwREMsIDB4NjBEQywgMHgwRjE0LCAweDYwREQsIDB4NjBERCwgMHgxNjZFLCAweDYwREUsIDB4NjBERSwgMHgzMUNDLA0KLSAgICAweDYwREYsIDB4NjBERiwgMHgwRUI4LCAweDYwRTAsIDB4NjBFMCwgMHgwN0YyLCAweDYwRTEsIDB4NjBFMSwgMHgxRUUzLA0KLSAgICAweDYwRTIsIDB4NjBFNSwgMHgzMUNELCAweDYwRTYsIDB4NjBFNiwgMHgwNUNDLCAweDYwRTcsIDB4NjBFNywgMHgwOTE0LA0KLSAgICAweDYwRTgsIDB4NjBFOCwgMHgwNDk5LCAweDYwRTksIDB4NjBFOSwgMHgwNEYyLCAweDYwRUEsIDB4NjBFQSwgMHgzMUQxLA0KLSAgICAweDYwRUIsIDB4NjBFQiwgMHgwNDIyLCAweDYwRUMsIDB4NjBFQywgMHgxNjZCLCAweDYwRUQsIDB4NjBFRCwgMHgwNDk4LA0KLSAgICAweDYwRUUsIDB4NjBFRSwgMHgwNThELCAweDYwRUYsIDB4NjBFRiwgMHgwNzM4LCAweDYwRjAsIDB4NjBGMCwgMHgwNjI3LA0KLSAgICAweDYwRjEsIDB4NjBGMSwgMHgyMDk1LCAweDYwRjIsIDB4NjBGMiwgMHgyM0JCLCAweDYwRjMsIDB4NjBGMywgMHgwRjU4LA0KLSAgICAweDYwRjQsIDB4NjBGNCwgMHgxNjc3LCAweDYwRjUsIDB4NjBGNSwgMHgzMUQyLCAweDYwRjYsIDB4NjBGNiwgMHgwN0UxLA0KLSAgICAweDYwRjcsIDB4NjBGOCwgMHgzMUQzLCAweDYwRjksIDB4NjBGOSwgMHgwQ0EyLCAweDYwRkEsIDB4NjBGQSwgMHgwRjk1LA0KLSAgICAweDYwRkIsIDB4NjBGQiwgMHgyM0I5LCAweDYwRkMsIDB4NjBGRiwgMHgzMUQ1LCAweDYxMDAsIDB4NjEwMCwgMHgxNjc4LA0KLSAgICAweDYxMDEsIDB4NjEwMSwgMHgwNTEzLCAweDYxMDIsIDB4NjEwNSwgMHgzMUQ5LCAweDYxMDYsIDB4NjEwNiwgMHgxQTE1LA0KLSAgICAweDYxMDcsIDB4NjEwNywgMHgzMURELCAweDYxMDgsIDB4NjEwOCwgMHgxMERGLCAweDYxMDksIDB4NjEwOSwgMHgxMEM5LA0KLSAgICAweDYxMEEsIDB4NjEwQywgMHgzMURFLCAweDYxMEQsIDB4NjEwRCwgMHgxQTE2LCAweDYxMEUsIDB4NjEwRSwgMHgxNjc5LA0KLSAgICAweDYxMEYsIDB4NjEwRiwgMHgxMDY5LCAweDYxMTAsIDB4NjExNCwgMHgzMUUxLCAweDYxMTUsIDB4NjExNSwgMHgxNjc1LA0KLSAgICAweDYxMTYsIDB4NjExOSwgMHgzMUU2LCAweDYxMUEsIDB4NjExQSwgMHgxMEMzLCAweDYxMUIsIDB4NjExQiwgMHgxRTI4LA0KLSAgICAweDYxMUMsIDB4NjExQywgMHgyM0JELCAweDYxMUQsIDB4NjExRSwgMHgzMUVBLCAweDYxMUYsIDB4NjExRiwgMHgwNkNCLA0KLSAgICAweDYxMjAsIDB4NjEyMCwgMHgxNjczLCAweDYxMjEsIDB4NjEyMiwgMHgzMUVDLCAweDYxMjMsIDB4NjEyMywgMHgxNjc2LA0KLSAgICAweDYxMjQsIDB4NjEyNCwgMHgwNjdDLCAweDYxMjUsIDB4NjEyNSwgMHgzMUVFLCAweDYxMjYsIDB4NjEyNiwgMHgxNjc0LA0KLSAgICAweDYxMjcsIDB4NjEyNywgMHgwOThELCAweDYxMjgsIDB4NjEyQSwgMHgzMUVGLCAweDYxMkIsIDB4NjEyQiwgMHgxNjdBLA0KLSAgICAweDYxMkMsIDB4NjEzMywgMHgzMUYyLCAweDYxMzQsIDB4NjEzNCwgMHgyM0I1LCAweDYxMzUsIDB4NjEzNiwgMHgzMUZBLA0KLSAgICAweDYxMzcsIDB4NjEzNywgMHgyM0JBLCAweDYxMzgsIDB4NjEzRCwgMHgzMUZDLCAweDYxM0UsIDB4NjEzRSwgMHgyM0IzLA0KLSAgICAweDYxM0YsIDB4NjEzRiwgMHgxMEZCLCAweDYxNDAsIDB4NjE0NywgMHgzMjAyLCAweDYxNDgsIDB4NjE0OCwgMHgwNTRCLA0KLSAgICAweDYxNDksIDB4NjE0OSwgMHgzMjBBLCAweDYxNEEsIDB4NjE0QSwgMHgxNjdCLCAweDYxNEIsIDB4NjE0QiwgMHgyMTYyLA0KLSAgICAweDYxNEMsIDB4NjE0QywgMHgwN0RBLCAweDYxNEQsIDB4NjE0RCwgMHgzMjBCLCAweDYxNEUsIDB4NjE0RSwgMHgwRDMwLA0KLSAgICAweDYxNEYsIDB4NjE1MCwgMHgzMjBDLCAweDYxNTEsIDB4NjE1MSwgMHgwRDFFLCAweDYxNTIsIDB4NjE1NCwgMHgzMjBFLA0KLSAgICAweDYxNTUsIDB4NjE1NSwgMHgwQjIwLCAweDYxNTYsIDB4NjE1NywgMHgzMjExLCAweDYxNTgsIDB4NjE1OCwgMHgxRTVFLA0KLSAgICAweDYxNTksIDB4NjE1OSwgMHgzMjEzLCAweDYxNUEsIDB4NjE1QSwgMHgxRTVELCAweDYxNUIsIDB4NjE1QywgMHgzMjE0LA0KLSAgICAweDYxNUQsIDB4NjE1RCwgMHgxQTE3LCAweDYxNUUsIDB4NjE1RSwgMHgzMjE2LCAweDYxNUYsIDB4NjE1RiwgMHgyM0I3LA0KLSAgICAweDYxNjAsIDB4NjE2MSwgMHgzMjE3LCAweDYxNjIsIDB4NjE2MiwgMHgwQUE0LCAweDYxNjMsIDB4NjE2MywgMHgxRjJGLA0KLSAgICAweDYxNjQsIDB4NjE2NCwgMHgyNERGLCAweDYxNjUsIDB4NjE2NiwgMHgzMjE5LCAweDYxNjcsIDB4NjE2NywgMHgwN0YwLA0KLSAgICAweDYxNjgsIDB4NjE2OCwgMHgwOTNCLCAweDYxNjksIDB4NjE2OSwgMHgzMjFCLCAweDYxNkEsIDB4NjE2QSwgMHgyM0IyLA0KLSAgICAweDYxNkIsIDB4NjE2QiwgMHgyMTRFLCAweDYxNkMsIDB4NjE2RCwgMHgzMjFDLCAweDYxNkUsIDB4NjE2RSwgMHgyMDUyLA0KLSAgICAweDYxNkYsIDB4NjE2RiwgMHgzMjFFLCAweDYxNzAsIDB4NjE3MCwgMHgwRUNFLCAweDYxNzEsIDB4NjE3MiwgMHgzMjFGLA0KLSAgICAweDYxNzMsIDB4NjE3MywgMHgyM0JDLCAweDYxNzQsIDB4NjE3NCwgMHgzMjIxLCAweDYxNzUsIDB4NjE3NSwgMHgxNjdDLA0KLSAgICAweDYxNzYsIDB4NjE3NiwgMHgyMEVCLCAweDYxNzcsIDB4NjE3NywgMHgwOTQzLCAweDYxNzgsIDB4NjE4MSwgMHgzMjIyLA0KLSAgICAweDYxODIsIDB4NjE4MiwgMHgyMjMyLCAweDYxODMsIDB4NjE4OSwgMHgzMjJDLCAweDYxOEEsIDB4NjE4QSwgMHgxRTNGLA0KLSAgICAweDYxOEIsIDB4NjE4QiwgMHgwNDU4LCAweDYxOEMsIDB4NjE4RCwgMHgzMjMzLCAweDYxOEUsIDB4NjE4RSwgMHgxMTNBLA0KLSAgICAweDYxOEYsIDB4NjE4RiwgMHgzMjM1LCAweDYxOTAsIDB4NjE5MCwgMHgyMDFCLCAweDYxOTEsIDB4NjE5MSwgMHgyMEJDLA0KLSAgICAweDYxOTIsIDB4NjE5MiwgMHgyM0JFLCAweDYxOTMsIDB4NjE5MywgMHgzMjM2LCAweDYxOTQsIDB4NjE5NCwgMHgxNjdFLA0KLSAgICAweDYxOTUsIDB4NjE5OSwgMHgzMjM3LCAweDYxOUEsIDB4NjE5QSwgMHgxRUFFLCAweDYxOUIsIDB4NjE5QywgMHgzMjNDLA0KLSAgICAweDYxOUQsIDB4NjE5RCwgMHgxQTE5LCAweDYxOUUsIDB4NjFBMywgMHgzMjNFLCAweDYxQTQsIDB4NjFBNCwgMHgxRUZCLA0KLSAgICAweDYxQTUsIDB4NjFBNiwgMHgzMjQ0LCAweDYxQTcsIDB4NjFBNywgMHgxNjdGLCAweDYxQTgsIDB4NjFBOCwgMHgwNzYwLA0KLSAgICAweDYxQTksIDB4NjFBOSwgMHgxQTE4LCAweDYxQUEsIDB4NjFBQSwgMHgzMjQ2LCAweDYxQUIsIDB4NjFBQiwgMHgyMDg5LA0KLSAgICAweDYxQUMsIDB4NjFBQywgMHgxNjdELCAweDYxQUQsIDB4NjFBRCwgMHgzMjQ3LCAweDYxQUUsIDB4NjFBRSwgMHgyM0IxLA0KLSAgICAweDYxQUYsIDB4NjFCMSwgMHgzMjQ4LCAweDYxQjIsIDB4NjFCMiwgMHgyMUM0LCAweDYxQjMsIDB4NjFCNSwgMHgzMjRCLA0KLSAgICAweDYxQjYsIDB4NjFCNiwgMHgyMjE0LCAweDYxQjcsIDB4NjFCNywgMHgxNjgwLCAweDYxQjgsIDB4NjFCRCwgMHgzMjRFLA0KLSAgICAweDYxQkUsIDB4NjFCRSwgMHgwNzZELCAweDYxQkYsIDB4NjFDMSwgMHgzMjU0LCAweDYxQzIsIDB4NjFDMiwgMHgwNUVELA0KLSAgICAweDYxQzMsIDB4NjFDNiwgMHgzMjU3LCAweDYxQzcsIDB4NjFDNywgMHgxRkRFLCAweDYxQzgsIDB4NjFDOCwgMHgwRjgzLA0KLSAgICAweDYxQzksIDB4NjFDOSwgMHgyMjIzLCAweDYxQ0EsIDB4NjFDQSwgMHgwM0NFLCAweDYxQ0IsIDB4NjFDQiwgMHgxQTFBLA0KLSAgICAweDYxQ0MsIDB4NjFDQywgMHgyM0I2LCAweDYxQ0QsIDB4NjFEMCwgMHgzMjVCLCAweDYxRDEsIDB4NjFEMSwgMHgxQTFCLA0KLSAgICAweDYxRDIsIDB4NjFEMiwgMHgwOUFDLCAweDYxRDMsIDB4NjFEMywgMHgzMjVGLCAweDYxRDQsIDB4NjFENCwgMHgxNjgxLA0KLSAgICAweDYxRDUsIDB4NjFERCwgMHgzMjYwLCAweDYxREUsIDB4NjFERSwgMHgyNjhDLCAweDYxREYsIDB4NjFERiwgMHgyNERFLA0KLSAgICAweDYxRTAsIDB4NjFFMiwgMHgzMjY5LCAweDYxRTMsIDB4NjFFMywgMHgyNEUwLCAweDYxRTQsIDB4NjFFNSwgMHgzMjZDLA0KLSAgICAweDYxRTYsIDB4NjFFNiwgMHgwQjc0LCAweDYxRTcsIDB4NjFFNywgMHgzMjZFLCAweDYxRTgsIDB4NjFFOCwgMHgyM0I4LA0KLSAgICAweDYxRTksIDB4NjFGMSwgMHgzMjZGLCAweDYxRjIsIDB4NjFGMiwgMHgxRTgxLCAweDYxRjMsIDB4NjFGNCwgMHgzMjc4LA0KLSAgICAweDYxRjUsIDB4NjFGNSwgMHgxNjgyLCAweDYxRjYsIDB4NjFGNiwgMHgxRkZFLCAweDYxRjcsIDB4NjFGNywgMHgxRjUxLA0KLSAgICAweDYxRjgsIDB4NjFGOCwgMHgyMUUxLCAweDYxRjksIDB4NjFGOSwgMHgzMjdBLCAweDYxRkEsIDB4NjFGQSwgMHgyM0IwLA0KLSAgICAweDYxRkIsIDB4NjFGQiwgMHgzMjdCLCAweDYxRkMsIDB4NjFGQywgMHgxRkNFLCAweDYxRkQsIDB4NjFGRCwgMHgzMjdDLA0KLSAgICAweDYxRkUsIDB4NjFGRSwgMHgyMTFFLCAweDYxRkYsIDB4NjFGRiwgMHgxM0UwLCAweDYyMDAsIDB4NjIwMCwgMHgyMDIxLA0KLSAgICAweDYyMDEsIDB4NjIwNSwgMHgzMjdELCAweDYyMDYsIDB4NjIwNiwgMHgxQTFDLCAweDYyMDcsIDB4NjIwNywgMHgyNEUxLA0KLSAgICAweDYyMDgsIDB4NjIwOCwgMHgwNkU1LCAweDYyMDksIDB4NjIwOSwgMHgzMjgyLCAweDYyMEEsIDB4NjIwQSwgMHgwRUZCLA0KLSAgICAweDYyMEIsIDB4NjIwQiwgMHgxOEY5LCAweDYyMEMsIDB4NjIwQywgMHgwRkIyLCAweDYyMEQsIDB4NjIwRCwgMHgwRDkwLA0KLSAgICAweDYyMEUsIDB4NjIwRSwgMHgwQ0IxLCAweDYyMEYsIDB4NjIwRiwgMHgwRjI0LCAweDYyMTAsIDB4NjIxMCwgMHgwNEVFLA0KLSAgICAweDYyMTEsIDB4NjIxMSwgMHgwRUUxLCAweDYyMTIsIDB4NjIxMiwgMHgwOEI1LCAweDYyMTMsIDB4NjIxMywgMHgzMjgzLA0KLSAgICAweDYyMTQsIDB4NjIxNCwgMHgyNEEzLCAweDYyMTUsIDB4NjIxNSwgMHgxNjlFLCAweDYyMTYsIDB4NjIxNiwgMHgwODA3LA0KLSAgICAweDYyMTcsIDB4NjIxNywgMHgxOEZBLCAweDYyMTgsIDB4NjIxOCwgMHgxMTVFLCAweDYyMTksIDB4NjIxOSwgMHgzMjg0LA0KLSAgICAweDYyMUEsIDB4NjIxQSwgMHgwQkZDLCAweDYyMUIsIDB4NjIxQiwgMHgxOEZCLCAweDYyMUMsIDB4NjIxRSwgMHgzMjg1LA0KLSAgICAweDYyMUYsIDB4NjIxRiwgMHgxOEZDLCAweDYyMjAsIDB4NjIyMCwgMHgzMjg4LCAweDYyMjEsIDB4NjIyMSwgMHgxOEZFLA0KLSAgICAweDYyMjIsIDB4NjIyMiwgMHgxOEZELCAweDYyMjMsIDB4NjIyMywgMHgzMjg5LCAweDYyMjQsIDB4NjIyNCwgMHgxOTAwLA0KLSAgICAweDYyMjUsIDB4NjIyNSwgMHgxOEZGLCAweDYyMjYsIDB4NjIyNiwgMHgzMjhBLCAweDYyMjcsIDB4NjIyNywgMHgyNEE0LA0KLSAgICAweDYyMjgsIDB4NjIyOSwgMHgzMjhCLCAweDYyMkEsIDB4NjIyQSwgMHgwOEE5LCAweDYyMkIsIDB4NjIyQiwgMHgzMjhELA0KLSAgICAweDYyMkMsIDB4NjIyQywgMHgxOTAxLCAweDYyMkQsIDB4NjIyRCwgMHgzMjhFLCAweDYyMkUsIDB4NjIyRSwgMHgwQTY1LA0KLSAgICAweDYyMkYsIDB4NjIyRiwgMHgzMjhGLCAweDYyMzAsIDB4NjIzMCwgMHgyMjczLCAweDYyMzEsIDB4NjIzMSwgMHgzMjkwLA0KLSAgICAweDYyMzIsIDB4NjIzMiwgMHgyMUIwLCAweDYyMzMsIDB4NjIzMywgMHgwNTQ0LCAweDYyMzQsIDB4NjIzNCwgMHgwNTdBLA0KLSAgICAweDYyMzUsIDB4NjIzNiwgMHgzMjkxLCAweDYyMzcsIDB4NjIzNywgMHgwN0JDLCAweDYyMzgsIDB4NjIzQywgMHgzMjkzLA0KLSAgICAweDYyM0QsIDB4NjIzRCwgMHgxOUY0LCAweDYyM0UsIDB4NjIzRSwgMHgxOUYzLCAweDYyM0YsIDB4NjIzRiwgMHgwNjVDLA0KLSAgICAweDYyNDAsIDB4NjI0MCwgMHgwREVFLCAweDYyNDEsIDB4NjI0MSwgMHgwNDRCLCAweDYyNDIsIDB4NjI0MiwgMHgzMjk4LA0KLSAgICAweDYyNDMsIDB4NjI0MywgMHgxOUY1LCAweDYyNDQsIDB4NjI0NiwgMHgzMjk5LCAweDYyNDcsIDB4NjI0NywgMHgwRDAxLA0KLSAgICAweDYyNDgsIDB4NjI0OSwgMHgxOUY2LCAweDYyNEEsIDB4NjI0QSwgMHgzMjlDLCAweDYyNEIsIDB4NjI0QiwgMHgwRDZELA0KLSAgICAweDYyNEMsIDB4NjI0QywgMHgxNEJBLCAweDYyNEQsIDB4NjI0RCwgMHgwNDhDLCAweDYyNEUsIDB4NjI0RSwgMHgxMTNELA0KLSAgICAweDYyNEYsIDB4NjI1MCwgMHgzMjlELCAweDYyNTEsIDB4NjI1MSwgMHgwQkVBLCAweDYyNTIsIDB4NjI1MiwgMHgwM0QyLA0KLSAgICAweDYyNTMsIDB4NjI1MywgMHgwNTc1LCAweDYyNTQsIDB4NjI1NCwgMHgwQ0FFLCAweDYyNTUsIDB4NjI1NywgMHgzMjlGLA0KLSAgICAweDYyNTgsIDB4NjI1OCwgMHgwRTgxLCAweDYyNTksIDB4NjI1QSwgMHgzMkEyLCAweDYyNUIsIDB4NjI1QiwgMHgwOTQ1LA0KLSAgICAweDYyNUMsIDB4NjI2MiwgMHgzMkE0LCAweDYyNjMsIDB4NjI2MywgMHgwOTY4LCAweDYyNjQsIDB4NjI2NSwgMHgzMkFCLA0KLSAgICAweDYyNjYsIDB4NjI2NiwgMHgwQzIxLCAweDYyNjcsIDB4NjI2NywgMHgxMUIzLCAweDYyNjgsIDB4NjI2OCwgMHgzMkFELA0KLSAgICAweDYyNjksIDB4NjI2OSwgMHgwOTk0LCAweDYyNkEsIDB4NjI2QSwgMHgxNEJCLCAweDYyNkIsIDB4NjI2QiwgMHgwQ0UxLA0KLSAgICAweDYyNkMsIDB4NjI2QywgMHgxMDE4LCAweDYyNkQsIDB4NjI2RCwgMHgwQjY1LCAweDYyNkUsIDB4NjI2RSwgMHgwM0YyLA0KLSAgICAweDYyNkYsIDB4NjI2RiwgMHgwNERCLCAweDYyNzAsIDB4NjI3MCwgMHgwQ0EwLCAweDYyNzEsIDB4NjI3MiwgMHgzMkFFLA0KLSAgICAweDYyNzMsIDB4NjI3MywgMHgwM0VELCAweDYyNzQsIDB4NjI3NSwgMHgzMkIwLCAweDYyNzYsIDB4NjI3NiwgMHgwNjkzLA0KLSAgICAweDYyNzcsIDB4NjI3OCwgMHgzMkIyLCAweDYyNzksIDB4NjI3OSwgMHgwQkJCLCAweDYyN0EsIDB4NjI3QiwgMHgzMkI0LA0KLSAgICAweDYyN0MsIDB4NjI3QywgMHgwNjMyLCAweDYyN0QsIDB4NjI3RCwgMHgzMkI2LCAweDYyN0UsIDB4NjI3RSwgMHgxMTczLA0KLSAgICAweDYyN0YsIDB4NjI3RiwgMHgwNEY1LCAweDYyODAsIDB4NjI4MCwgMHgwODJGLCAweDYyODEsIDB4NjI4MywgMHgzMkI3LA0KLSAgICAweDYyODQsIDB4NjI4NCwgMHgwNEQyLCAweDYyODUsIDB4NjI4OCwgMHgzMkJBLCAweDYyODksIDB4NjI4OSwgMHgwOTIwLA0KLSAgICAweDYyOEEsIDB4NjI4QSwgMHgwM0RDLCAweDYyOEIsIDB4NjI5MCwgMHgzMkJFLCAweDYyOTEsIDB4NjI5MSwgMHgxMDVELA0KLSAgICAweDYyOTIsIDB4NjI5MiwgMHgwRDdBLCAweDYyOTMsIDB4NjI5MywgMHgxMjAyLCAweDYyOTQsIDB4NjI5NCwgMHgzMkM0LA0KLSAgICAweDYyOTUsIDB4NjI5NSwgMHgwRTY3LCAweDYyOTYsIDB4NjI5NiwgMHgwNUY1LCAweDYyOTcsIDB4NjI5NywgMHgwOTQ2LA0KLSAgICAweDYyOTgsIDB4NjI5OCwgMHgxMTdDLCAweDYyOTksIDB4NjI5OSwgMHgzMkM1LCAweDYyOUEsIDB4NjI5QSwgMHgwNkEyLA0KLSAgICAweDYyOUIsIDB4NjI5QiwgMHgwQjk4LCAweDYyOUMsIDB4NjI5RSwgMHgzMkM2LCAweDYyOUYsIDB4NjI5RiwgMHgxNEJDLA0KLSAgICAweDYyQTAsIDB4NjJBMCwgMHgwOTY2LCAweDYyQTEsIDB4NjJBMSwgMHgwQTdDLCAweDYyQTIsIDB4NjJBMiwgMHgwQzNELA0KLSAgICAweDYyQTMsIDB4NjJBMywgMHgzMkM5LCAweDYyQTQsIDB4NjJBNCwgMHgwN0I5LCAweDYyQTUsIDB4NjJBNSwgMHgwNDExLA0KLSAgICAweDYyQTYsIDB4NjJBNywgMHgzMkNBLCAweDYyQTgsIDB4NjJBOCwgMHgwQkFCLCAweDYyQTksIDB4NjJBQSwgMHgzMkNDLA0KLSAgICAweDYyQUIsIDB4NjJBQiwgMHgwQkJDLCAweDYyQUMsIDB4NjJBQywgMHgwREZBLCAweDYyQUQsIDB4NjJCMCwgMHgzMkNFLA0KLSAgICAweDYyQjEsIDB4NjJCMSwgMHgwNDEwLCAweDYyQjIsIDB4NjJCNCwgMHgzMkQyLCAweDYyQjUsIDB4NjJCNSwgMHgwNUI3LA0KLSAgICAweDYyQjYsIDB4NjJCOCwgMHgzMkQ1LCAweDYyQjksIDB4NjJCOSwgMHgwQjBCLCAweDYyQkEsIDB4NjJCQSwgMHgzMkQ4LA0KLSAgICAweDYyQkIsIDB4NjJCQiwgMHgxNEJELCAweDYyQkMsIDB4NjJCQywgMHgwRkUzLCAweDYyQkQsIDB4NjJCRCwgMHgwNTBFLA0KLSAgICAweDYyQkUsIDB4NjJCRSwgMHgzMkQ5LCAweDYyQkYsIDB4NjJCRiwgMHgwQUY3LCAweDYyQzAsIDB4NjJDMSwgMHgzMkRBLA0KLSAgICAweDYyQzIsIDB4NjJDMiwgMHgwNjk0LCAweDYyQzMsIDB4NjJDMywgMHgzMkRDLCAweDYyQzQsIDB4NjJDNCwgMHgxMUYzLA0KLSAgICAweDYyQzUsIDB4NjJDNSwgMHgwNTg0LCAweDYyQzYsIDB4NjJDNiwgMHgwNEI3LCAweDYyQzcsIDB4NjJDNywgMHgwQjE3LA0KLSAgICAweDYyQzgsIDB4NjJDOCwgMHgwQjRDLCAweDYyQzksIDB4NjJDOSwgMHgwOTk4LCAweDYyQ0EsIDB4NjJDQSwgMHgxNEJFLA0KLSAgICAweDYyQ0IsIDB4NjJDQiwgMHgzMkRELCAweDYyQ0MsIDB4NjJDQywgMHgwM0YzLCAweDYyQ0QsIDB4NjJDRCwgMHgwQjg1LA0KLSAgICAweDYyQ0UsIDB4NjJDRSwgMHgwQTI5LCAweDYyQ0YsIDB4NjJDRiwgMHgzMkRFLCAweDYyRDAsIDB4NjJEMCwgMHgwNzJFLA0KLSAgICAweDYyRDEsIDB4NjJEMSwgMHgzMkRGLCAweDYyRDIsIDB4NjJEMiwgMHgwOTBCLCAweDYyRDMsIDB4NjJEMywgMHgwRTg5LA0KLSAgICAweDYyRDQsIDB4NjJENCwgMHgwM0Q5LCAweDYyRDUsIDB4NjJENSwgMHgzMkUwLCAweDYyRDYsIDB4NjJENiwgMHgwRTgwLA0KLSAgICAweDYyRDcsIDB4NjJENywgMHgxNEMwLCAweDYyRDgsIDB4NjJEOCwgMHgwOEZGLCAweDYyRDksIDB4NjJEOSwgMHgxMjFCLA0KLSAgICAweDYyREEsIDB4NjJEQSwgMHgxNEJGLCAweDYyREIsIDB4NjJEQiwgMHgxMTcxLCAweDYyREMsIDB4NjJEQywgMHgwM0U4LA0KLSAgICAweDYyREQsIDB4NjJERSwgMHgzMkUxLCAweDYyREYsIDB4NjJERiwgMHgwQjQ1LCAweDYyRTAsIDB4NjJFMSwgMHgzMkUzLA0KLSAgICAweDYyRTIsIDB4NjJFMiwgMHgwQTRBLCAweDYyRTMsIDB4NjJFMywgMHgwODYzLCAweDYyRTQsIDB4NjJFNCwgMHgzMkU1LA0KLSAgICAweDYyRTUsIDB4NjJFNSwgMHgxMDlBLCAweDYyRTYsIDB4NjJFNiwgMHgwOUE0LCAweDYyRTcsIDB4NjJFNywgMHgwQjYyLA0KLSAgICAweDYyRTgsIDB4NjJFOCwgMHgwNDZELCAweDYyRTksIDB4NjJFOSwgMHgxMTM0LCAweDYyRUEsIDB4NjJFQiwgMHgzMkU2LA0KLSAgICAweDYyRUMsIDB4NjJFQywgMHgwOTkzLCAweDYyRUQsIDB4NjJFRCwgMHgwRDVBLCAweDYyRUUsIDB4NjJFRSwgMHgxNEMxLA0KLSAgICAweDYyRUYsIDB4NjJFRiwgMHgxMTlELCAweDYyRjAsIDB4NjJGMCwgMHgzMkU4LCAweDYyRjEsIDB4NjJGMSwgMHgwNzA5LA0KLSAgICAweDYyRjIsIDB4NjJGMiwgMHgzMkU5LCAweDYyRjMsIDB4NjJGMywgMHgwQzg4LCAweDYyRjQsIDB4NjJGNCwgMHgwRDlFLA0KLSAgICAweDYyRjUsIDB4NjJGNSwgMHgzMkVBLCAweDYyRjYsIDB4NjJGNiwgMHgxNEMzLCAweDYyRjcsIDB4NjJGNywgMHgwOTRBLA0KLSAgICAweDYyRjgsIDB4NjJGQiwgMHgzMkVCLCAweDYyRkMsIDB4NjJGQywgMHgwQkQzLCAweDYyRkQsIDB4NjJGRCwgMHgxMjA0LA0KLSAgICAweDYyRkUsIDB4NjJGRSwgMHgwRDQ3LCAweDYyRkYsIDB4NjJGRiwgMHgwQjI2LCAweDYzMDAsIDB4NjMwMCwgMHgzMkVGLA0KLSAgICAweDYzMDEsIDB4NjMwMSwgMHgwNEZCLCAweDYzMDIsIDB4NjMwMiwgMHgwNzJCLCAweDYzMDMsIDB4NjMwNiwgMHgzMkYwLA0KLSAgICAweDYzMDcsIDB4NjMwNywgMHgxMUI3LCAweDYzMDgsIDB4NjMwOCwgMHgxOTRFLCAweDYzMDksIDB4NjMwOSwgMHgwM0JGLA0KLSAgICAweDYzMEEsIDB4NjMwRCwgMHgzMkY0LCAweDYzMEUsIDB4NjMwRSwgMHgwOTczLCAweDYzMEYsIDB4NjMxMCwgMHgzMkY4LA0KLSAgICAweDYzMTEsIDB4NjMxMSwgMHgwRTQ3LCAweDYzMTIsIDB4NjMxNSwgMHgzMkZBLCAweDYzMTYsIDB4NjMxNiwgMHgwRThCLA0KLSAgICAweDYzMTcsIDB4NjMxOSwgMHgzMkZFLCAweDYzMUEsIDB4NjMxQSwgMHgxMUJFLCAweDYzMUIsIDB4NjMxQiwgMHgwQTc1LA0KLSAgICAweDYzMUMsIDB4NjMxQywgMHgzMzAxLCAweDYzMUQsIDB4NjMxRCwgMHgwRURELCAweDYzMUUsIDB4NjMxRSwgMHgwREY1LA0KLSAgICAweDYzMUYsIDB4NjMxRiwgMHgwRjc5LCAweDYzMjAsIDB4NjMyMCwgMHgwQjM2LCAweDYzMjEsIDB4NjMyMSwgMHgwNTkzLA0KLSAgICAweDYzMjIsIDB4NjMyMiwgMHgxNEMyLCAweDYzMjMsIDB4NjMyMywgMHgxMTk2LCAweDYzMjQsIDB4NjMyNCwgMHgwODJBLA0KLSAgICAweDYzMjUsIDB4NjMyNSwgMHgwN0U4LCAweDYzMjYsIDB4NjMyNywgMHgzMzAyLCAweDYzMjgsIDB4NjMyOCwgMHgwM0FGLA0KLSAgICAweDYzMjksIDB4NjMyOSwgMHgzMzA0LCAweDYzMkEsIDB4NjMyQSwgMHgwQjczLCAweDYzMkIsIDB4NjMyQiwgMHgwNTZGLA0KLSAgICAweDYzMkMsIDB4NjMyRSwgMHgzMzA1LCAweDYzMkYsIDB4NjMyRiwgMHgxMTkyLCAweDYzMzAsIDB4NjMzMSwgMHgzMzA4LA0KLSAgICAweDYzMzIsIDB4NjMzMiwgMHgxOTRGLCAweDYzMzMsIDB4NjMzOCwgMHgzMzBBLCAweDYzMzksIDB4NjMzOSwgMHgxNEM0LA0KLSAgICAweDYzM0EsIDB4NjMzQSwgMHgwRTU3LCAweDYzM0IsIDB4NjMzQywgMHgzMzEwLCAweDYzM0QsIDB4NjMzRCwgMHgwRTlELA0KLSAgICAweDYzM0UsIDB4NjMzRSwgMHgyMUQxLCAweDYzM0YsIDB4NjM0MSwgMHgzMzEyLCAweDYzNDIsIDB4NjM0MiwgMHgwRUY1LA0KLSAgICAweDYzNDMsIDB4NjM0MywgMHgxNEM2LCAweDYzNDQsIDB4NjM0NCwgMHgzMzE1LCAweDYzNDUsIDB4NjM0NSwgMHgwRTYyLA0KLSAgICAweDYzNDYsIDB4NjM0NiwgMHgwOTkxLCAweDYzNDcsIDB4NjM0OCwgMHgzMzE2LCAweDYzNDksIDB4NjM0OSwgMHgxMjFBLA0KLSAgICAweDYzNEEsIDB4NjM0QSwgMHgzMzE4LCAweDYzNEIsIDB4NjM0QiwgMHgxNEM1LCAweDYzNEMsIDB4NjM0QywgMHgwM0QxLA0KLSAgICAweDYzNEQsIDB4NjM0RCwgMHgwNzZCLCAweDYzNEUsIDB4NjM0RSwgMHgwRDBDLCAweDYzNEYsIDB4NjM0RiwgMHgwQjU2LA0KLSAgICAweDYzNTAsIDB4NjM1MCwgMHgwOTE3LCAweDYzNTEsIDB4NjM1NCwgMHgzMzE5LCAweDYzNTUsIDB4NjM1NSwgMHgwNDdELA0KLSAgICAweDYzNTYsIDB4NjM1RCwgMHgzMzFELCAweDYzNUUsIDB4NjM1RSwgMHgwOUI3LCAweDYzNUYsIDB4NjM1RiwgMHgwREU1LA0KLSAgICAweDYzNjAsIDB4NjM2MCwgMHgzMzI1LCAweDYzNjEsIDB4NjM2MSwgMHgwODY0LCAweDYzNjIsIDB4NjM2MiwgMHgwN0QwLA0KLSAgICAweDYzNjMsIDB4NjM2MywgMHgwNTk4LCAweDYzNjQsIDB4NjM2NiwgMHgzMzI2LCAweDYzNjcsIDB4NjM2NywgMHgwQkI2LA0KLSAgICAweDYzNjgsIDB4NjM2OCwgMHgyMTFDLCAweDYzNjksIDB4NjM2OSwgMHgxNEQwLCAweDYzNkEsIDB4NjM2QSwgMHgzMzI5LA0KLSAgICAweDYzNkIsIDB4NjM2QiwgMHgyMzVELCAweDYzNkMsIDB4NjM2QywgMHgzMzJBLCAweDYzNkQsIDB4NjM2RCwgMHgxNENELA0KLSAgICAweDYzNkUsIDB4NjM2RSwgMHgwOTBDLCAweDYzNkYsIDB4NjM3MCwgMHgzMzJCLCAweDYzNzEsIDB4NjM3MSwgMHgxNEM5LA0KLSAgICAweDYzNzIsIDB4NjM3MiwgMHgyNjgyLCAweDYzNzMsIDB4NjM3NSwgMHgzMzJELCAweDYzNzYsIDB4NjM3NiwgMHgwNTNBLA0KLSAgICAweDYzNzcsIDB4NjM3NywgMHgwOEFFLCAweDYzNzgsIDB4NjM3OSwgMHgzMzMwLCAweDYzN0EsIDB4NjM3QSwgMHgxNENBLA0KLSAgICAweDYzN0IsIDB4NjM3QiwgMHgwQjUwLCAweDYzN0MsIDB4NjM3RiwgMHgzMzMyLCAweDYzODAsIDB4NjM4MCwgMHgwRjMzLA0KLSAgICAweDYzODEsIDB4NjM4MSwgMHgzMzM2LCAweDYzODIsIDB4NjM4MiwgMHgwNUMxLCAweDYzODMsIDB4NjM4MywgMHgyMTBELA0KLSAgICAweDYzODQsIDB4NjM4NCwgMHgyMDVBLCAweDYzODUsIDB4NjM4NiwgMHgzMzM3LCAweDYzODcsIDB4NjM4NywgMHgwNjFELA0KLSAgICAweDYzODgsIDB4NjM4OCwgMHgwRDcxLCAweDYzODksIDB4NjM4OSwgMHgwNUQ1LCAweDYzOEEsIDB4NjM4QSwgMHgxNENGLA0KLSAgICAweDYzOEIsIDB4NjM4QiwgMHgzMzM5LCAweDYzOEMsIDB4NjM4QywgMHgxMTY3LCAweDYzOEQsIDB4NjM4RCwgMHgzMzNBLA0KLSAgICAweDYzOEUsIDB4NjM4RSwgMHgxNENCLCAweDYzOEYsIDB4NjM4RiwgMHgwRTIwLCAweDYzOTAsIDB4NjM5MCwgMHgwQzFELA0KLSAgICAweDYzOTEsIDB4NjM5MSwgMHgzMzNCLCAweDYzOTIsIDB4NjM5MiwgMHgwQjg2LCAweDYzOTMsIDB4NjM5NSwgMHgzMzNDLA0KLSAgICAweDYzOTYsIDB4NjM5NiwgMHgxMDNCLCAweDYzOTcsIDB4NjM5NywgMHgzMzNGLCAweDYzOTgsIDB4NjM5OCwgMHgwOTIxLA0KLSAgICAweDYzOTksIDB4NjM5RiwgMHgzMzQwLCAweDYzQTAsIDB4NjNBMCwgMHgwQTdBLCAweDYzQTEsIDB4NjNBMSwgMHgzMzQ3LA0KLSAgICAweDYzQTIsIDB4NjNBMiwgMHgwRTEwLCAweDYzQTMsIDB4NjNBMywgMHgwNERELCAweDYzQTQsIDB4NjNBNCwgMHgzMzQ4LA0KLSAgICAweDYzQTUsIDB4NjNBNSwgMHgwOEE0LCAweDYzQTYsIDB4NjNBNiwgMHgzMzQ5LCAweDYzQTcsIDB4NjNBNywgMHgwOTY1LA0KLSAgICAweDYzQTgsIDB4NjNBOCwgMHgwRTc3LCAweDYzQTksIDB4NjNBOSwgMHgxMDAzLCAweDYzQUEsIDB4NjNBQSwgMHgwNTZFLA0KLSAgICAweDYzQUIsIDB4NjNBQiwgMHgzMzRBLCAweDYzQUMsIDB4NjNBQywgMHgxNENFLCAweDYzQUQsIDB4NjNBRCwgMHgxNEM3LA0KLSAgICAweDYzQUUsIDB4NjNBRSwgMHgxNEQxLCAweDYzQUYsIDB4NjNBRiwgMHgzMzRCLCAweDYzQjAsIDB4NjNCMCwgMHgxOTUwLA0KLSAgICAweDYzQjEsIDB4NjNCMiwgMHgzMzRDLCAweDYzQjMsIDB4NjNCMywgMHgwQTU3LCAweDYzQjQsIDB4NjNCNCwgMHgxNENDLA0KLSAgICAweDYzQjUsIDB4NjNCNiwgMHgzMzRFLCAweDYzQjcsIDB4NjNCNywgMHgxMUJGLCAweDYzQjgsIDB4NjNCOCwgMHgwNTg4LA0KLSAgICAweDYzQjksIDB4NjNCOSwgMHgzMzUwLCAweDYzQkEsIDB4NjNCQSwgMHgwNEJCLCAweDYzQkIsIDB4NjNCQiwgMHgzMzUxLA0KLSAgICAweDYzQkMsIDB4NjNCQywgMHgxNEQyLCAweDYzQkQsIDB4NjNCRCwgMHgzMzUyLCAweDYzQkUsIDB4NjNCRSwgMHgxNERDLA0KLSAgICAweDYzQkYsIDB4NjNCRiwgMHgzMzUzLCAweDYzQzAsIDB4NjNDMCwgMHgxRjhELCAweDYzQzEsIDB4NjNDMywgMHgzMzU0LA0KLSAgICAweDYzQzQsIDB4NjNDNCwgMHgxNEQ3LCAweDYzQzUsIDB4NjNDNSwgMHgzMzU3LCAweDYzQzYsIDB4NjNDNiwgMHgxNERCLA0KLSAgICAweDYzQzcsIDB4NjNDOCwgMHgzMzU4LCAweDYzQzksIDB4NjNDOSwgMHgwQ0JCLCAweDYzQ0EsIDB4NjNDQywgMHgzMzVBLA0KLSAgICAweDYzQ0QsIDB4NjNDRCwgMHgxMjNFLCAweDYzQ0UsIDB4NjNDRSwgMHgxNEQ5LCAweDYzQ0YsIDB4NjNDRiwgMHgwQUVELA0KLSAgICAweDYzRDAsIDB4NjNEMCwgMHgwRTM0LCAweDYzRDEsIDB4NjNEMSwgMHgzMzVELCAweDYzRDIsIDB4NjNEMiwgMHgwNEFDLA0KLSAgICAweDYzRDMsIDB4NjNENSwgMHgzMzVFLCAweDYzRDYsIDB4NjNENiwgMHgxMDQ1LCAweDYzRDcsIDB4NjNEOSwgMHgzMzYxLA0KLSAgICAweDYzREEsIDB4NjNEQSwgMHgyMUZGLCAweDYzREIsIDB4NjNERCwgMHgzMzY0LCAweDYzREUsIDB4NjNERSwgMHgxNEQ4LA0KLSAgICAweDYzREYsIDB4NjNERiwgMHgzMzY3LCAweDYzRTAsIDB4NjNFMCwgMHgxNEQ1LCAweDYzRTEsIDB4NjNFMSwgMHgwRUU0LA0KLSAgICAweDYzRTIsIDB4NjNFMiwgMHgzMzY4LCAweDYzRTMsIDB4NjNFMywgMHgwNTJBLCAweDYzRTQsIDB4NjNFOCwgMHgzMzY5LA0KLSAgICAweDYzRTksIDB4NjNFOSwgMHgwOTM4LCAweDYzRUEsIDB4NjNFQSwgMHgwOEVELCAweDYzRUIsIDB4NjNFQywgMHgzMzZFLA0KLSAgICAweDYzRUQsIDB4NjNFRCwgMHgwOEEzLCAweDYzRUUsIDB4NjNFRSwgMHgxRjU4LCAweDYzRUYsIDB4NjNGMSwgMHgzMzcwLA0KLSAgICAweDYzRjIsIDB4NjNGMiwgMHgxNEQzLCAweDYzRjMsIDB4NjNGMywgMHgzMzczLCAweDYzRjQsIDB4NjNGNCwgMHgxMEYxLA0KLSAgICAweDYzRjUsIDB4NjNGNSwgMHgzMzc0LCAweDYzRjYsIDB4NjNGNiwgMHgxNEM4LCAweDYzRjcsIDB4NjNGNywgMHgzMzc1LA0KLSAgICAweDYzRjgsIDB4NjNGOCwgMHgxNEQ0LCAweDYzRjksIDB4NjNGQywgMHgzMzc2LCAweDYzRkQsIDB4NjNGRCwgMHgwOUFBLA0KLSAgICAweDYzRkUsIDB4NjNGRSwgMHgzMzdBLCAweDYzRkYsIDB4NjNGRiwgMHgxNEQ2LCAweDY0MDAsIDB4NjQwMCwgMHgwNEJBLA0KLSAgICAweDY0MDEsIDB4NjQwMSwgMHgwNkU0LCAweDY0MDIsIDB4NjQwMiwgMHgwQTRFLCAweDY0MDMsIDB4NjQwNCwgMHgzMzdCLA0KLSAgICAweDY0MDUsIDB4NjQwNSwgMHgwODkyLCAweDY0MDYsIDB4NjQwQSwgMHgzMzdELCAweDY0MEIsIDB4NjQwQiwgMHgxNERGLA0KLSAgICAweDY0MEMsIDB4NjQwQywgMHgxNEUyLCAweDY0MEQsIDB4NjQwRCwgMHgyMTVCLCAweDY0MEUsIDB4NjQwRSwgMHgzMzgyLA0KLSAgICAweDY0MEYsIDB4NjQwRiwgMHgwNDcyLCAweDY0MTAsIDB4NjQxMCwgMHgwNTI3LCAweDY0MTEsIDB4NjQxMiwgMHgzMzgzLA0KLSAgICAweDY0MTMsIDB4NjQxMywgMHgwNTZELCAweDY0MTQsIDB4NjQxNCwgMHgwQ0RGLCAweDY0MTUsIDB4NjQxNiwgMHgzMzg1LA0KLSAgICAweDY0MTcsIDB4NjQxNywgMHgxRUI2LCAweDY0MTgsIDB4NjQxQSwgMHgzMzg3LCAweDY0MUIsIDB4NjQxQiwgMHgxNEUwLA0KLSAgICAweDY0MUMsIDB4NjQxQywgMHgwREM2LCAweDY0MUQsIDB4NjQxRCwgMHgzMzhBLCAweDY0MUUsIDB4NjQxRSwgMHgwNkRFLA0KLSAgICAweDY0MUYsIDB4NjQxRiwgMHgzMzhCLCAweDY0MjAsIDB4NjQyMCwgMHgxNEUxLCAweDY0MjEsIDB4NjQyMSwgMHgxNEU0LA0KLSAgICAweDY0MjIsIDB4NjQyNSwgMHgzMzhDLCAweDY0MjYsIDB4NjQyNiwgMHgxNEUzLCAweDY0MjcsIDB4NjQyOSwgMHgzMzkwLA0KLSAgICAweDY0MkEsIDB4NjQyQSwgMHgwRTE1LCAweDY0MkIsIDB4NjQyQiwgMHgzMzkzLCAweDY0MkMsIDB4NjQyQywgMHgwM0VDLA0KLSAgICAweDY0MkQsIDB4NjQyRCwgMHgwNTcxLCAweDY0MkUsIDB4NjQzMywgMHgzMzk0LCAweDY0MzQsIDB4NjQzNCwgMHgxNzM2LA0KLSAgICAweDY0MzUsIDB4NjQzNSwgMHgzMzlBLCAweDY0MzYsIDB4NjQzNiwgMHgyMERCLCAweDY0MzcsIDB4NjQzOSwgMHgzMzlCLA0KLSAgICAweDY0M0EsIDB4NjQzQSwgMHgwRjdBLCAweDY0M0IsIDB4NjQzQywgMHgzMzlFLCAweDY0M0QsIDB4NjQzRCwgMHgwNEIyLA0KLSAgICAweDY0M0UsIDB4NjQzRSwgMHgzM0EwLCAweDY0M0YsIDB4NjQzRiwgMHgxOTUxLCAweDY0NDAsIDB4NjQ0MCwgMHgzM0ExLA0KLSAgICAweDY0NDEsIDB4NjQ0MSwgMHgxNERFLCAweDY0NDIsIDB4NjQ0MywgMHgzM0EyLCAweDY0NDQsIDB4NjQ0NCwgMHgwRDFDLA0KLSAgICAweDY0NDUsIDB4NjQ0NSwgMHgxNERELCAweDY0NDYsIDB4NjQ0NiwgMHgwM0U1LCAweDY0NDcsIDB4NjQ0NywgMHgxMDI4LA0KLSAgICAweDY0NDgsIDB4NjQ0OCwgMHgwNDYwLCAweDY0NDksIDB4NjQ0OSwgMHgzM0E0LCAweDY0NEEsIDB4NjQ0QSwgMHgwRTAyLA0KLSAgICAweDY0NEIsIDB4NjQ1MCwgMHgzM0E1LCAweDY0NTEsIDB4NjQ1MSwgMHgyMzYwLCAweDY0NTIsIDB4NjQ1MiwgMHgxNERBLA0KLSAgICAweDY0NTMsIDB4NjQ1MywgMHgzM0FCLCAweDY0NTQsIDB4NjQ1NCwgMHgwRDk5LCAweDY0NTUsIDB4NjQ1NywgMHgzM0FDLA0KLSAgICAweDY0NTgsIDB4NjQ1OCwgMHgxMTRCLCAweDY0NTksIDB4NjQ1QiwgMHgzM0FGLCAweDY0NUMsIDB4NjQ1QywgMHgyMzYxLA0KLSAgICAweDY0NUQsIDB4NjQ1RCwgMHgzM0IyLCAweDY0NUUsIDB4NjQ1RSwgMHgxNEU1LCAweDY0NUYsIDB4NjQ1RiwgMHgyMDQwLA0KLSAgICAweDY0NjAsIDB4NjQ2NiwgMHgzM0IzLCAweDY0NjcsIDB4NjQ2NywgMHgwNTYwLCAweDY0NjgsIDB4NjQ2OCwgMHgzM0JBLA0KLSAgICAweDY0NjksIDB4NjQ2OSwgMHgwQjA5LCAweDY0NkEsIDB4NjQ2QywgMHgzM0JCLCAweDY0NkQsIDB4NjQ2RCwgMHgxNEU3LA0KLSAgICAweDY0NkUsIDB4NjQ2RSwgMHgzM0JFLCAweDY0NkYsIDB4NjQ2RiwgMHgyMjhFLCAweDY0NzAsIDB4NjQ3MiwgMHgzM0JGLA0KLSAgICAweDY0NzMsIDB4NjQ3MywgMHgxRkRGLCAweDY0NzQsIDB4NjQ3NSwgMHgzM0MyLCAweDY0NzYsIDB4NjQ3NiwgMHgyMzVFLA0KLSAgICAweDY0NzcsIDB4NjQ3NywgMHgzM0M0LCAweDY0NzgsIDB4NjQ3OSwgMHgwQjAzLCAweDY0N0EsIDB4NjQ3QSwgMHgxNEU5LA0KLSAgICAweDY0N0IsIDB4NjQ3QiwgMHgxRTZBLCAweDY0N0MsIDB4NjQ4MSwgMHgzM0M1LCAweDY0ODIsIDB4NjQ4MiwgMHgwQTE1LA0KLSAgICAweDY0ODMsIDB4NjQ4MywgMHgzM0NCLCAweDY0ODQsIDB4NjQ4NCwgMHgxNEU2LCAweDY0ODUsIDB4NjQ4NSwgMHgwOTFFLA0KLSAgICAweDY0ODYsIDB4NjQ4NiwgMHgzM0NDLCAweDY0ODcsIDB4NjQ4NywgMHgwQkQxLCAweDY0ODgsIDB4NjQ4OCwgMHgyMDAyLA0KLSAgICAweDY0ODksIDB4NjQ5MCwgMHgzM0NELCAweDY0OTEsIDB4NjQ5MSwgMHgwNEVBLCAweDY0OTIsIDB4NjQ5MiwgMHgwQ0QxLA0KLSAgICAweDY0OTMsIDB4NjQ5MywgMHgyMDkzLCAweDY0OTQsIDB4NjQ5NCwgMHgzM0Q1LCAweDY0OTUsIDB4NjQ5NSwgMHgwREFGLA0KLSAgICAweDY0OTYsIDB4NjQ5NiwgMHgxNEU4LCAweDY0OTcsIDB4NjQ5OCwgMHgzM0Q2LCAweDY0OTksIDB4NjQ5OSwgMHgxNEVDLA0KLSAgICAweDY0OUEsIDB4NjQ5RCwgMHgzM0Q4LCAweDY0OUUsIDB4NjQ5RSwgMHgxMjBGLCAweDY0OUYsIDB4NjQ5RiwgMHgyMzVGLA0KLSAgICAweDY0QTAsIDB4NjRBMiwgMHgzM0RDLCAweDY0QTMsIDB4NjRBMywgMHgxRUFDLCAweDY0QTQsIDB4NjRBNCwgMHgwNERDLA0KLSAgICAweDY0QTUsIDB4NjRBNSwgMHgxRTU0LCAweDY0QTYsIDB4NjRBOCwgMHgzM0RGLCAweDY0QTksIDB4NjRBOSwgMHgwQTBDLA0KLSAgICAweDY0QUEsIDB4NjRBQSwgMHgzM0UyLCAweDY0QUIsIDB4NjRBQiwgMHgxRjA4LCAweDY0QUMsIDB4NjRBQywgMHgwQzQ4LA0KLSAgICAweDY0QUQsIDB4NjRBRCwgMHgwNDZDLCAweDY0QUUsIDB4NjRBRSwgMHgwNTZDLCAweDY0QUYsIDB4NjRBRiwgMHgzM0UzLA0KLSAgICAweDY0QjAsIDB4NjRCMCwgMHgxMjA4LCAweDY0QjEsIDB4NjRCMSwgMHgzM0U0LCAweDY0QjIsIDB4NjRCMiwgMHgyMEMwLA0KLSAgICAweDY0QjMsIDB4NjRCMywgMHgyMzYyLCAweDY0QjQsIDB4NjRCNCwgMHgzM0U1LCAweDY0QjUsIDB4NjRCNSwgMHgwQjRGLA0KLSAgICAweDY0QjYsIDB4NjRCNiwgMHgzM0U2LCAweDY0QjcsIDB4NjRCOCwgMHgxNEVBLCAweDY0QjksIDB4NjRCOSwgMHgzM0U3LA0KLSAgICAweDY0QkEsIDB4NjRCQSwgMHgxNEVELCAweDY0QkIsIDB4NjRCQiwgMHgyMTYwLCAweDY0QkMsIDB4NjRCQywgMHgwNzZBLA0KLSAgICAweDY0QkQsIDB4NjRCRCwgMHgzM0U4LCAweDY0QkUsIDB4NjRCRSwgMHgyMTlELCAweDY0QkYsIDB4NjRCRiwgMHgxRjhFLA0KLSAgICAweDY0QzAsIDB4NjRDMCwgMHgxNEVFLCAweDY0QzEsIDB4NjRDMSwgMHgyMjJELCAweDY0QzIsIDB4NjRDMiwgMHgwOUM5LA0KLSAgICAweDY0QzMsIDB4NjRDMywgMHgzM0U5LCAweDY0QzQsIDB4NjRDNCwgMHgyMDQ3LCAweDY0QzUsIDB4NjRDNSwgMHgwQ0ZDLA0KLSAgICAweDY0QzYsIDB4NjRDNiwgMHgzM0VBLCAweDY0QzcsIDB4NjRDNywgMHgyMjYyLCAweDY0QzgsIDB4NjRDOSwgMHgzM0VCLA0KLSAgICAweDY0Q0EsIDB4NjRDQSwgMHgxRjY3LCAweDY0Q0IsIDB4NjRDQiwgMHgxRUIyLCAweDY0Q0MsIDB4NjRDQywgMHgzM0VELA0KLSAgICAweDY0Q0QsIDB4NjRDRCwgMHgwNEEwLCAweDY0Q0UsIDB4NjRDRSwgMHgwQzYzLCAweDY0Q0YsIDB4NjRDRiwgMHgzM0VFLA0KLSAgICAweDY0RDAsIDB4NjREMCwgMHgxNEVGLCAweDY0RDEsIDB4NjREMSwgMHgzM0VGLCAweDY0RDIsIDB4NjREMiwgMHgwQzU5LA0KLSAgICAweDY0RDMsIDB4NjREMywgMHgzM0YwLCAweDY0RDQsIDB4NjRENCwgMHgxRUE5LCAweDY0RDUsIDB4NjRENiwgMHgzM0YxLA0KLSAgICAweDY0RDcsIDB4NjRENywgMHgxNEYwLCAweDY0RDgsIDB4NjREOCwgMHgxOTUyLCAweDY0RDksIDB4NjREOSwgMHgzM0YzLA0KLSAgICAweDY0REEsIDB4NjREQSwgMHgxRkNDLCAweDY0REIsIDB4NjRERCwgMHgzM0Y0LCAweDY0REUsIDB4NjRERSwgMHgwREM4LA0KLSAgICAweDY0REYsIDB4NjRERiwgMHgzM0Y3LCAweDY0RTAsIDB4NjRFMCwgMHgxRjcyLCAweDY0RTEsIDB4NjRFMSwgMHgzM0Y4LA0KLSAgICAweDY0RTIsIDB4NjRFMiwgMHgxNEYyLCAweDY0RTMsIDB4NjRFMywgMHgzM0Y5LCAweDY0RTQsIDB4NjRFNCwgMHgxNEYxLA0KLSAgICAweDY0RTUsIDB4NjRFNSwgMHgzM0ZBLCAweDY0RTYsIDB4NjRFNiwgMHgwNDg4LCAweDY0RTcsIDB4NjRFQiwgMHgzM0ZCLA0KLSAgICAweDY0RUMsIDB4NjRFQywgMHgyMDk4LCAweDY0RUQsIDB4NjRFRSwgMHgzNDAwLCAweDY0RUYsIDB4NjRFRiwgMHgxRTUyLA0KLSAgICAweDY0RjAsIDB4NjRGMCwgMHgyMEE0LCAweDY0RjEsIDB4NjRGMSwgMHgxRjFDLCAweDY0RjIsIDB4NjRGMiwgMHgyMjhGLA0KLSAgICAweDY0RjMsIDB4NjRGMywgMHgzNDAyLCAweDY0RjQsIDB4NjRGNCwgMHgxRkVELCAweDY0RjUsIDB4NjRGNiwgMHgzNDAzLA0KLSAgICAweDY0RjcsIDB4NjRGNywgMHgyMzY1LCAweDY0RjgsIDB4NjRGOSwgMHgzNDA1LCAweDY0RkEsIDB4NjRGQSwgMHgxRTJELA0KLSAgICAweDY0RkIsIDB4NjRGQiwgMHgyMTUyLCAweDY0RkMsIDB4NjRGQywgMHgyMzY2LCAweDY0RkQsIDB4NjRGRCwgMHgzNDA3LA0KLSAgICAweDY0RkUsIDB4NjRGRSwgMHgyMEZBLCAweDY0RkYsIDB4NjRGRiwgMHgzNDA4LCAweDY1MDAsIDB4NjUwMCwgMHgwQjhCLA0KLSAgICAweDY1MDEsIDB4NjUwMywgMHgzNDA5LCAweDY1MDQsIDB4NjUwNCwgMHgyMzYzLCAweDY1MDUsIDB4NjUwNSwgMHgzNDBDLA0KLSAgICAweDY1MDYsIDB4NjUwNiwgMHgyMDlBLCAweDY1MDcsIDB4NjUwOCwgMHgzNDBELCAweDY1MDksIDB4NjUwOSwgMHgxNEYzLA0KLSAgICAweDY1MEEsIDB4NjUwRSwgMHgzNDBGLCAweDY1MEYsIDB4NjUwRiwgMHgyMDNDLCAweDY1MTAsIDB4NjUxMSwgMHgzNDE0LA0KLSAgICAweDY1MTIsIDB4NjUxMiwgMHgxMTFGLCAweDY1MTMsIDB4NjUxMywgMHgzNDE2LCAweDY1MTQsIDB4NjUxNCwgMHgxRkY2LA0KLSAgICAweDY1MTUsIDB4NjUxNSwgMHgzNDE3LCAweDY1MTYsIDB4NjUxNiwgMHgyMzY0LCAweDY1MTcsIDB4NjUxNywgMHgzNDE4LA0KLSAgICAweDY1MTgsIDB4NjUxOCwgMHgwQzlDLCAweDY1MTksIDB4NjUxOSwgMHgxRTY5LCAweDY1MUEsIDB4NjUxQSwgMHgzNDE5LA0KLSAgICAweDY1MUIsIDB4NjUxQiwgMHgyMzY3LCAweDY1MUMsIDB4NjUxQywgMHgzNDFBLCAweDY1MUQsIDB4NjUxRCwgMHgyMTFELA0KLSAgICAweDY1MUUsIDB4NjUyMSwgMHgzNDFCLCAweDY1MjIsIDB4NjUyMiwgMHgyMjU5LCAweDY1MjMsIDB4NjUyMywgMHgyMDU2LA0KLSAgICAweDY1MjQsIDB4NjUyNCwgMHgyMTYzLCAweDY1MjUsIDB4NjUyNSwgMHgxNEY0LCAweDY1MjYsIDB4NjUyOSwgMHgzNDFGLA0KLSAgICAweDY1MkEsIDB4NjUyQSwgMHgxRkE5LCAweDY1MkIsIDB4NjUyQiwgMHgwOTFGLCAweDY1MkMsIDB4NjUyQywgMHgxRkZDLA0KLSAgICAweDY1MkQsIDB4NjUyRCwgMHgzNDIzLCAweDY1MkUsIDB4NjUyRSwgMHgxNEY1LCAweDY1MkYsIDB4NjUyRiwgMHgxMUE2LA0KLSAgICAweDY1MzAsIDB4NjUzMywgMHgzNDI0LCAweDY1MzQsIDB4NjUzNCwgMHgxOTA5LCAweDY1MzUsIDB4NjUzNSwgMHgxOTY2LA0KLSAgICAweDY1MzYsIDB4NjUzNiwgMHgwRDZDLCAweDY1MzcsIDB4NjUzNywgMHgzNDI4LCAweDY1MzgsIDB4NjUzOCwgMHgxMkIyLA0KLSAgICAweDY1MzksIDB4NjUzOSwgMHgwNkJGLCAweDY1M0EsIDB4NjUzQSwgMHgzNDI5LCAweDY1M0IsIDB4NjUzQiwgMHgwNkZFLA0KLSAgICAweDY1M0MsIDB4NjUzRCwgMHgzNDJBLCAweDY1M0UsIDB4NjUzRSwgMHgwNjYyLCAweDY1M0YsIDB4NjUzRiwgMHgxMTlGLA0KLSAgICAweDY1NDAsIDB4NjU0NCwgMHgzNDJDLCAweDY1NDUsIDB4NjU0NSwgMHgwNzIzLCAweDY1NDYsIDB4NjU0NywgMHgzNDMxLA0KLSAgICAweDY1NDgsIDB4NjU0OCwgMHgwRjcyLCAweDY1NDksIDB4NjU0OSwgMHgxQ0NCLCAweDY1NEEsIDB4NjU0QiwgMHgzNDMzLA0KLSAgICAweDY1NEMsIDB4NjU0QywgMHgwNUIxLCAweDY1NEQsIDB4NjU0RSwgMHgzNDM1LCAweDY1NEYsIDB4NjU0RiwgMHgwQUY5LA0KLSAgICAweDY1NTAsIDB4NjU1MCwgMHgzNDM3LCAweDY1NTEsIDB4NjU1MSwgMHgwOEY3LCAweDY1NTIsIDB4NjU1NCwgMHgzNDM4LA0KLSAgICAweDY1NTUsIDB4NjU1NSwgMHgxOTY3LCAweDY1NTYsIDB4NjU1NiwgMHgwM0M4LCAweDY1NTcsIDB4NjU1NywgMHgxRTJFLA0KLSAgICAweDY1NTgsIDB4NjU1OCwgMHgzNDNCLCAweDY1NTksIDB4NjU1OSwgMHgwODlELCAweDY1NUEsIDB4NjU1QSwgMHgzNDNDLA0KLSAgICAweDY1NUIsIDB4NjU1QiwgMHgwOUZCLCAweDY1NUMsIDB4NjU1QywgMHgzNDNELCAweDY1NUQsIDB4NjU1RCwgMHgwNDNGLA0KLSAgICAweDY1NUUsIDB4NjU1RSwgMHgwNENELCAweDY1NUYsIDB4NjU2MSwgMHgzNDNFLCAweDY1NjIsIDB4NjU2MiwgMHgwNkNELA0KLSAgICAweDY1NjMsIDB4NjU2MywgMHgwQ0RCLCAweDY1NjQsIDB4NjU2NSwgMHgzNDQxLCAweDY1NjYsIDB4NjU2NiwgMHgwNjE3LA0KLSAgICAweDY1NjcsIDB4NjU2QSwgMHgzNDQzLCAweDY1NkIsIDB4NjU2QiwgMHgxOTY4LCAweDY1NkMsIDB4NjU2QywgMHgwOEUzLA0KLSAgICAweDY1NkQsIDB4NjU2RiwgMHgzNDQ3LCAweDY1NzAsIDB4NjU3MCwgMHgwRDk0LCAweDY1NzEsIDB4NjU3MSwgMHgzNDRBLA0KLSAgICAweDY1NzIsIDB4NjU3MiwgMHgwQzQwLCAweDY1NzMsIDB4NjU3MywgMHgzNDRCLCAweDY1NzQsIDB4NjU3NCwgMHgxMTlDLA0KLSAgICAweDY1NzUsIDB4NjU3NSwgMHgxRUJDLCAweDY1NzYsIDB4NjU3NiwgMHgzNDRDLCAweDY1NzcsIDB4NjU3NywgMHgwNjkwLA0KLSAgICAweDY1NzgsIDB4NjU3OCwgMHgyMTQyLCAweDY1NzksIDB4NjU4MSwgMHgzNDRELCAweDY1ODIsIDB4NjU4MiwgMHgyMDFFLA0KLSAgICAweDY1ODMsIDB4NjU4MywgMHgxRTQzLCAweDY1ODQsIDB4NjU4NiwgMHgzNDU2LCAweDY1ODcsIDB4NjU4NywgMHgwRUQzLA0KLSAgICAweDY1ODgsIDB4NjU4QSwgMHgzNDU5LCAweDY1OEIsIDB4NjU4QiwgMHgxMTRDLCAweDY1OEMsIDB4NjU4QywgMHgwNDVDLA0KLSAgICAweDY1OEQsIDB4NjU4RiwgMHgzNDVDLCAweDY1OTAsIDB4NjU5MCwgMHgxOUMxLCAweDY1OTEsIDB4NjU5MSwgMHgwM0VBLA0KLSAgICAweDY1OTIsIDB4NjU5MiwgMHgzNDVGLCAweDY1OTMsIDB4NjU5MywgMHgxOUMzLCAweDY1OTQsIDB4NjU5NCwgMHgzNDYwLA0KLSAgICAweDY1OTUsIDB4NjU5NSwgMHgyNEQ0LCAweDY1OTYsIDB4NjU5NiwgMHgzNDYxLCAweDY1OTcsIDB4NjU5NywgMHgwNUY2LA0KLSAgICAweDY1OTgsIDB4NjU5OCwgMHgzNDYyLCAweDY1OTksIDB4NjU5OSwgMHgwQTE4LCAweDY1OUEsIDB4NjU5QSwgMHgzNDYzLA0KLSAgICAweDY1OUIsIDB4NjU5QiwgMHgxRDU2LCAweDY1OUMsIDB4NjU5QywgMHgwRjdDLCAweDY1OUQsIDB4NjU5RSwgMHgzNDY0LA0KLSAgICAweDY1OUYsIDB4NjU5RiwgMHgxMTg2LCAweDY1QTAsIDB4NjVBMCwgMHgzNDY2LCAweDY1QTEsIDB4NjVBMSwgMHgwRUUyLA0KLSAgICAweDY1QTIsIDB4NjVBMywgMHgzNDY3LCAweDY1QTQsIDB4NjVBNCwgMHgwOEMwLCAweDY1QTUsIDB4NjVBNSwgMHgwNTA3LA0KLSAgICAweDY1QTYsIDB4NjVBNiwgMHgzNDY5LCAweDY1QTcsIDB4NjVBNywgMHgwNkE2LCAweDY1QTgsIDB4NjVBOCwgMHgzNDZBLA0KLSAgICAweDY1QTksIDB4NjVBOSwgMHgxMTU3LCAweDY1QUEsIDB4NjVBQSwgMHgzNDZCLCAweDY1QUIsIDB4NjVBQiwgMHgxQTI5LA0KLSAgICAweDY1QUMsIDB4NjVBQywgMHgyMjZGLCAweDY1QUQsIDB4NjVBRCwgMHgwNjBFLCAweDY1QUUsIDB4NjVBRSwgMHgzNDZDLA0KLSAgICAweDY1QUYsIDB4NjVBRiwgMHgwREFFLCAweDY1QjAsIDB4NjVCMCwgMHgwRjhELCAweDY1QjEsIDB4NjVCNiwgMHgzNDZELA0KLSAgICAweDY1QjcsIDB4NjVCNywgMHgxRUQ3LCAweDY1QjgsIDB4NjVCOCwgMHgzNDczLCAweDY1QjksIDB4NjVCOSwgMHgwNjVBLA0KLSAgICAweDY1QkEsIDB4NjVCQiwgMHgzNDc0LCAweDY1QkMsIDB4NjVCQywgMHgxOUM0LCAweDY1QkQsIDB4NjVCRCwgMHgwRDQwLA0KLSAgICAweDY1QkUsIDB4NjVDMCwgMHgzNDc2LCAweDY1QzEsIDB4NjVDMSwgMHgwQjk1LCAweDY1QzIsIDB4NjVDMiwgMHgzNDc5LA0KLSAgICAweDY1QzMsIDB4NjVDMywgMHgxOUM3LCAweDY1QzQsIDB4NjVDNCwgMHgxOUM2LCAweDY1QzUsIDB4NjVDNSwgMHgwQTZBLA0KLSAgICAweDY1QzYsIDB4NjVDNiwgMHgxOUM1LCAweDY1QzcsIDB4NjVDQSwgMHgzNDdBLCAweDY1Q0IsIDB4NjVDQiwgMHgwRkM4LA0KLSAgICAweDY1Q0MsIDB4NjVDQywgMHgxOUM4LCAweDY1Q0QsIDB4NjVDRCwgMHgzNDdFLCAweDY1Q0UsIDB4NjVDRSwgMHgxOUM5LA0KLSAgICAweDY1Q0YsIDB4NjVDRiwgMHgxMjQyLCAweDY1RDAsIDB4NjVEMSwgMHgzNDdGLCAweDY1RDIsIDB4NjVEMiwgMHgxOUNBLA0KLSAgICAweDY1RDMsIDB4NjVENSwgMHgzNDgxLCAweDY1RDYsIDB4NjVENiwgMHgxOUNCLCAweDY1RDcsIDB4NjVENywgMHgwQzBCLA0KLSAgICAweDY1RDgsIDB4NjVERiwgMHgzNDg0LCAweDY1RTAsIDB4NjVFMCwgMHgwRUVELCAweDY1RTEsIDB4NjVFMSwgMHgzNDhDLA0KLSAgICAweDY1RTIsIDB4NjVFMiwgMHgwODNCLCAweDY1RTMsIDB4NjVFNCwgMHgzNDhELCAweDY1RTUsIDB4NjVFNSwgMHgwQ0IwLA0KLSAgICAweDY1RTYsIDB4NjVFNiwgMHgwNThBLCAweDY1RTcsIDB4NjVFNywgMHgwOEY4LCAweDY1RTgsIDB4NjVFOCwgMHgxMUJCLA0KLSAgICAweDY1RTksIDB4NjVFOSwgMHgxMTJBLCAweDY1RUEsIDB4NjVFQiwgMHgzNDhGLCAweDY1RUMsIDB4NjVFQywgMHgwRkQ3LA0KLSAgICAweDY1RUQsIDB4NjVFRCwgMHgwRkJDLCAweDY1RUUsIDB4NjVGMCwgMHgxOTBBLCAweDY1RjEsIDB4NjVGMSwgMHgwNzZDLA0KLSAgICAweDY1RjIsIDB4NjVGNSwgMHgzNDkxLCAweDY1RjYsIDB4NjVGNiwgMHgwRDQ4LCAweDY1RjcsIDB4NjVGNywgMHgwOTgyLA0KLSAgICAweDY1RjgsIDB4NjVGOSwgMHgzNDk1LCAweDY1RkEsIDB4NjVGQSwgMHgwRUFCLCAweDY1RkIsIDB4NjVGRiwgMHgzNDk3LA0KLSAgICAweDY2MDAsIDB4NjYwMCwgMHgxOTEyLCAweDY2MDEsIDB4NjYwMSwgMHgzNDlDLCAweDY2MDIsIDB4NjYwMiwgMHgwM0M1LA0KLSAgICAweDY2MDMsIDB4NjYwMywgMHgxOTEwLCAweDY2MDQsIDB4NjYwNSwgMHgzNDlELCAweDY2MDYsIDB4NjYwNiwgMHgwOTkwLA0KLSAgICAweDY2MDcsIDB4NjYwOSwgMHgzNDlGLCAweDY2MEEsIDB4NjYwQSwgMHgxOTBELCAweDY2MEIsIDB4NjYwQiwgMHgzNEEyLA0KLSAgICAweDY2MEMsIDB4NjYwQywgMHgwNEM0LCAweDY2MEQsIDB4NjYwRCwgMHgzNEEzLCAweDY2MEUsIDB4NjYwRSwgMHgwQUZDLA0KLSAgICAweDY2MEYsIDB4NjYwRiwgMHgwN0ZELCAweDY2MTAsIDB4NjYxMiwgMHgzNEE0LCAweDY2MTMsIDB4NjYxMywgMHgxMDVFLA0KLSAgICAweDY2MTQsIDB4NjYxNCwgMHgwRjAzLCAweDY2MTUsIDB4NjYxNSwgMHgxOTExLCAweDY2MTYsIDB4NjYxOCwgMHgzNEE3LA0KLSAgICAweDY2MTksIDB4NjYxOSwgMHgxOTBFLCAweDY2MUEsIDB4NjYxQywgMHgzNEFBLCAweDY2MUQsIDB4NjYxRCwgMHgxOTE1LA0KLSAgICAweDY2MUUsIDB4NjYxRSwgMHgzNEFELCAweDY2MUYsIDB4NjYxRiwgMHgwRjkyLCAweDY2MjAsIDB4NjYyMCwgMHgxMDk4LA0KLSAgICAweDY2MjEsIDB4NjYyNCwgMHgzNEFFLCAweDY2MjUsIDB4NjYyNSwgMHgwNTNELCAweDY2MjYsIDB4NjYyNiwgMHgzNEIyLA0KLSAgICAweDY2MjcsIDB4NjYyNywgMHgwQUM2LCAweDY2MjgsIDB4NjYyOCwgMHgxMjRGLCAweDY2MjksIDB4NjYyQywgMHgzNEIzLA0KLSAgICAweDY2MkQsIDB4NjYyRCwgMHgxMTcyLCAweDY2MkUsIDB4NjYyRSwgMHgzNEI3LCAweDY2MkYsIDB4NjYyRiwgMHgwRDVFLA0KLSAgICAweDY2MzAsIDB4NjYzMCwgMHgzNEI4LCAweDY2MzEsIDB4NjYzMSwgMHgxOTE3LCAweDY2MzIsIDB4NjYzMywgMHgzNEI5LA0KLSAgICAweDY2MzQsIDB4NjYzNCwgMHgxOTE2LCAweDY2MzUsIDB4NjYzNSwgMHgxOTE5LCAweDY2MzYsIDB4NjYzNiwgMHgxOTE4LA0KLSAgICAweDY2MzcsIDB4NjYzQiwgMHgzNEJCLCAweDY2M0MsIDB4NjYzQywgMHgxMUU2LCAweDY2M0QsIDB4NjYzRCwgMHgzNEMwLA0KLSAgICAweDY2M0UsIDB4NjYzRSwgMHgwRjQxLCAweDY2M0YsIDB4NjY0MCwgMHgzNEMxLCAweDY2NDEsIDB4NjY0MSwgMHgxOTFELA0KLSAgICAweDY2NDIsIDB4NjY0MiwgMHgyMTJELCAweDY2NDMsIDB4NjY0MywgMHgwN0UzLCAweDY2NDQsIDB4NjY0QSwgMHgzNEMzLA0KLSAgICAweDY2NEIsIDB4NjY0QiwgMHgwOENCLCAweDY2NEMsIDB4NjY0QywgMHgwRDA3LCAweDY2NEQsIDB4NjY0RSwgMHgzNENBLA0KLSAgICAweDY2NEYsIDB4NjY0RiwgMHgxOTFFLCAweDY2NTAsIDB4NjY1MSwgMHgzNENDLCAweDY2NTIsIDB4NjY1MiwgMHgwQ0YyLA0KLSAgICAweDY2NTMsIDB4NjY1MywgMHgwRjZCLCAweDY2NTQsIDB4NjY1NCwgMHgxOTFDLCAweDY2NTUsIDB4NjY1NSwgMHgxMTExLA0KLSAgICAweDY2NTYsIDB4NjY1NiwgMHgxOTFGLCAweDY2NTcsIDB4NjY1NywgMHgxOTIxLCAweDY2NTgsIDB4NjY1OSwgMHgzNENFLA0KLSAgICAweDY2NUEsIDB4NjY1QSwgMHgwRTlFLCAweDY2NUIsIDB4NjY1QywgMHgzNEQwLCAweDY2NUQsIDB4NjY1RCwgMHgyMjlCLA0KLSAgICAweDY2NUUsIDB4NjY1RSwgMHgzNEQyLCAweDY2NUYsIDB4NjY1RiwgMHgxOTFCLCAweDY2NjAsIDB4NjY2MCwgMHgzNEQzLA0KLSAgICAweDY2NjEsIDB4NjY2MSwgMHgxOTIwLCAweDY2NjIsIDB4NjY2MywgMHgzNEQ0LCAweDY2NjQsIDB4NjY2NCwgMHgwRUZELA0KLSAgICAweDY2NjUsIDB4NjY2NSwgMHgzNEQ2LCAweDY2NjYsIDB4NjY2NiwgMHgwN0YzLCAweDY2NjcsIDB4NjY2NywgMHgzNEQ3LA0KLSAgICAweDY2NjgsIDB4NjY2OCwgMHgwNEU0LCAweDY2NjksIDB4NjY2RCwgMHgzNEQ4LCAweDY2NkUsIDB4NjY2RSwgMHgwQkY0LA0KLSAgICAweDY2NkYsIDB4NjY2RiwgMHgwOERGLCAweDY2NzAsIDB4NjY3MCwgMHgwRjA5LCAweDY2NzEsIDB4NjY3MywgMHgzNERELA0KLSAgICAweDY2NzQsIDB4NjY3NCwgMHgwQzY0LCAweDY2NzUsIDB4NjY3NSwgMHgzNEUwLCAweDY2NzYsIDB4NjY3NiwgMHgwOEQ2LA0KLSAgICAweDY2NzcsIDB4NjY3NywgMHgxOTIyLCAweDY2NzgsIDB4NjY3OSwgMHgzNEUxLCAweDY2N0EsIDB4NjY3QSwgMHgxMUM2LA0KLSAgICAweDY2N0IsIDB4NjY3RCwgMHgzNEUzLCAweDY2N0UsIDB4NjY3RSwgMHgwQTA5LCAweDY2N0YsIDB4NjY4MSwgMHgzNEU2LA0KLSAgICAweDY2ODIsIDB4NjY4MiwgMHgxMTIwLCAweDY2ODMsIDB4NjY4MywgMHgzNEU5LCAweDY2ODQsIDB4NjY4NCwgMHgxOTIzLA0KLSAgICAweDY2ODUsIDB4NjY4NiwgMHgzNEVBLCAweDY2ODcsIDB4NjY4NywgMHgwRjJCLCAweDY2ODgsIDB4NjY4OCwgMHgyMjU2LA0KLSAgICAweDY2ODksIDB4NjY4OSwgMHgyNEE4LCAweDY2OEEsIDB4NjY4QiwgMHgzNEVDLCAweDY2OEMsIDB4NjY4QywgMHgxOTI0LA0KLSAgICAweDY2OEQsIDB4NjY5MCwgMHgzNEVFLCAweDY2OTEsIDB4NjY5MSwgMHgwRDg1LCAweDY2OTIsIDB4NjY5NSwgMHgzNEYyLA0KLSAgICAweDY2OTYsIDB4NjY5NiwgMHgwQjcwLCAweDY2OTcsIDB4NjY5NywgMHgwM0MwLCAweDY2OTgsIDB4NjY5QywgMHgzNEY2LA0KLSAgICAweDY2OUQsIDB4NjY5RCwgMHgxOTI2LCAweDY2OUUsIDB4NjZBMSwgMHgzNEZCLCAweDY2QTIsIDB4NjZBMiwgMHgxRTc5LA0KLSAgICAweDY2QTMsIDB4NjZBNiwgMHgzNEZGLCAweDY2QTcsIDB4NjZBNywgMHgxOTI1LCAweDY2QTgsIDB4NjZBOCwgMHgxQ0RELA0KLSAgICAweDY2QTksIDB4NjZBQSwgMHgzNTAzLCAweDY2QUIsIDB4NjZBQiwgMHgyMjVBLCAweDY2QUMsIDB4NjZBRCwgMHgzNTA1LA0KLSAgICAweDY2QUUsIDB4NjZBRSwgMHgwQjFELCAweDY2QUYsIDB4NjZCMywgMHgzNTA3LCAweDY2QjQsIDB4NjZCNCwgMHgwNDEyLA0KLSAgICAweDY2QjUsIDB4NjZCOCwgMHgzNTBDLCAweDY2QjksIDB4NjZCOSwgMHgxNzVCLCAweDY2QkEsIDB4NjZCRCwgMHgzNTEwLA0KLSAgICAweDY2QkUsIDB4NjZCRSwgMHgxOTI3LCAweDY2QkYsIDB4NjZDMywgMHgzNTE0LCAweDY2QzQsIDB4NjZDNCwgMHgyNEE3LA0KLSAgICAweDY2QzUsIDB4NjZDNSwgMHgzNTE5LCAweDY2QzYsIDB4NjZDNiwgMHgyNjg2LCAweDY2QzcsIDB4NjZDNywgMHgyNEE2LA0KLSAgICAweDY2QzgsIDB4NjZDOCwgMHgzNTFBLCAweDY2QzksIDB4NjZDOSwgMHgyMUNFLCAweDY2Q0EsIDB4NjZENSwgMHgzNTFCLA0KLSAgICAweDY2RDYsIDB4NjZENiwgMHgyNEE5LCAweDY2RDcsIDB4NjZEOCwgMHgzNTI3LCAweDY2RDksIDB4NjZEOSwgMHgwRDg2LA0KLSAgICAweDY2REEsIDB4NjZEQSwgMHgzNTI5LCAweDY2REIsIDB4NjZEQywgMHgxOTI4LCAweDY2REQsIDB4NjZERCwgMHgwQkY3LA0KLSAgICAweDY2REUsIDB4NjZERiwgMHgzNTJBLCAweDY2RTAsIDB4NjZFMCwgMHgxRkU3LCAweDY2RTEsIDB4NjZFNSwgMHgzNTJDLA0KLSAgICAweDY2RTYsIDB4NjZFNiwgMHgxOTJBLCAweDY2RTcsIDB4NjZFOCwgMHgzNTMxLCAweDY2RTksIDB4NjZFOSwgMHgxOTJCLA0KLSAgICAweDY2RUEsIDB4NjZFQiwgMHgzNTMzLCAweDY2RUMsIDB4NjZFQywgMHgyMTEyLCAweDY2RUQsIDB4NjZFRiwgMHgzNTM1LA0KLSAgICAweDY2RjAsIDB4NjZGMCwgMHgxMEZFLCAweDY2RjEsIDB4NjZGMSwgMHgzNTM4LCAweDY2RjIsIDB4NjZGMiwgMHgwQzc3LA0KLSAgICAweDY2RjMsIDB4NjZGMywgMHgxMDNFLCAweDY2RjQsIDB4NjZGNCwgMHgwNkY3LCAweDY2RjUsIDB4NjZGNiwgMHgzNTM5LA0KLSAgICAweDY2RjcsIDB4NjZGNywgMHgxOTE0LCAweDY2RjgsIDB4NjZGOCwgMHgyMTNDLCAweDY2RjksIDB4NjZGOSwgMHgwNEEzLA0KLSAgICAweDY2RkEsIDB4NjZGQiwgMHgzNTNCLCAweDY2RkMsIDB4NjZGQywgMHgwQUEzLCAweDY2RkQsIDB4NjZGRCwgMHgzNTNELA0KLSAgICAweDY2RkUsIDB4NjZGRSwgMHgxMTNCLCAweDY2RkYsIDB4NjZGRiwgMHgwRTM5LCAweDY3MDAsIDB4NjcwMCwgMHgxMjRCLA0KLSAgICAweDY3MDEsIDB4NjcwMiwgMHgzNTNFLCAweDY3MDMsIDB4NjcwMywgMHgxRjVDLCAweDY3MDQsIDB4NjcwNywgMHgzNTQwLA0KLSAgICAweDY3MDgsIDB4NjcwOCwgMHgxMTA1LCAweDY3MDksIDB4NjcwOSwgMHgxMEI1LCAweDY3MEEsIDB4NjcwQSwgMHgxOTczLA0KLSAgICAweDY3MEIsIDB4NjcwQiwgMHgwQkI0LCAweDY3MEMsIDB4NjcwQywgMHgzNTQ0LCAweDY3MEQsIDB4NjcwRCwgMHgwNjlCLA0KLSAgICAweDY3MEUsIDB4NjcwRiwgMHgzNTQ1LCAweDY3MTAsIDB4NjcxMCwgMHgxOTg0LCAweDY3MTEsIDB4NjcxMywgMHgzNTQ3LA0KLSAgICAweDY3MTQsIDB4NjcxNCwgMHgwREFDLCAweDY3MTUsIDB4NjcxNSwgMHgxOThFLCAweDY3MTYsIDB4NjcxNiwgMHgzNTRBLA0KLSAgICAweDY3MTcsIDB4NjcxNywgMHgwOUI1LCAweDY3MTgsIDB4NjcxQSwgMHgzNTRCLCAweDY3MUIsIDB4NjcxQiwgMHgwRUFDLA0KLSAgICAweDY3MUMsIDB4NjcxQywgMHgzNTRFLCAweDY3MUQsIDB4NjcxRCwgMHgwNEQ0LCAweDY3MUUsIDB4NjcxRSwgMHgzNTRGLA0KLSAgICAweDY3MUYsIDB4NjcxRiwgMHgwQkY5LCAweDY3MjAsIDB4NjcyNSwgMHgzNTUwLCAweDY3MjYsIDB4NjcyNiwgMHgxOUFDLA0KLSAgICAweDY3MjcsIDB4NjcyNywgMHgyNEM0LCAweDY3MjgsIDB4NjcyOCwgMHgwQjIxLCAweDY3MjksIDB4NjcyOSwgMHgzNTU2LA0KLSAgICAweDY3MkEsIDB4NjcyQSwgMHgwRUMzLCAweDY3MkIsIDB4NjcyQiwgMHgwQjBDLCAweDY3MkMsIDB4NjcyQywgMHgwNDI3LA0KLSAgICAweDY3MkQsIDB4NjcyRCwgMHgxMTQwLCAweDY3MkUsIDB4NjcyRSwgMHgzNTU3LCAweDY3MkYsIDB4NjcyRiwgMHgwRDhDLA0KLSAgICAweDY3MzAsIDB4NjczMCwgMHgzNTU4LCAweDY3MzEsIDB4NjczMSwgMHgxMUVCLCAweDY3MzIsIDB4NjczMywgMHgzNTU5LA0KLSAgICAweDY3MzQsIDB4NjczNCwgMHgwQkYyLCAweDY3MzUsIDB4NjczNSwgMHgwNjIzLCAweDY3MzYsIDB4NjczOSwgMHgzNTVCLA0KLSAgICAweDY3M0EsIDB4NjczQSwgMHgwODBGLCAweDY3M0IsIDB4NjczQywgMHgzNTVGLCAweDY3M0QsIDB4NjczRCwgMHgwRkFCLA0KLSAgICAweDY3M0UsIDB4NjczRiwgMHgzNTYxLCAweDY3NDAsIDB4Njc0MCwgMHgwQ0VBLCAweDY3NDEsIDB4Njc0MSwgMHgzNTYzLA0KLSAgICAweDY3NDIsIDB4Njc0MiwgMHgxMTE2LCAweDY3NDMsIDB4Njc0MywgMHgwQzgzLCAweDY3NDQsIDB4Njc0NSwgMHgzNTY0LA0KLSAgICAweDY3NDYsIDB4Njc0NiwgMHgwNkM2LCAweDY3NDcsIDB4Njc0NywgMHgzNTY2LCAweDY3NDgsIDB4Njc0OCwgMHgxODU0LA0KLSAgICAweDY3NDksIDB4Njc0OSwgMHgwQ0Y1LCAweDY3NEEsIDB4Njc0QiwgMHgzNTY3LCAweDY3NEMsIDB4Njc0QywgMHgxODUxLA0KLSAgICAweDY3NEQsIDB4Njc0RCwgMHgzNTY5LCAweDY3NEUsIDB4Njc0RSwgMHgwOUQ5LCAweDY3NEYsIDB4Njc0RiwgMHgwRjlFLA0KLSAgICAweDY3NTAsIDB4Njc1MCwgMHgwNDhCLCAweDY3NTEsIDB4Njc1MSwgMHgwNTY4LCAweDY3NTIsIDB4Njc1MiwgMHgzNTZBLA0KLSAgICAweDY3NTMsIDB4Njc1MywgMHgxODUyLCAweDY3NTQsIDB4Njc1NSwgMHgzNTZCLCAweDY3NTYsIDB4Njc1NiwgMHgxMTY5LA0KLSAgICAweDY3NTcsIDB4Njc1QiwgMHgzNTZELCAweDY3NUMsIDB4Njc1QywgMHgwNjA0LCAweDY3NUQsIDB4Njc1RCwgMHgzNTcyLA0KLSAgICAweDY3NUUsIDB4Njc1RSwgMHgxODUzLCAweDY3NUYsIDB4Njc1RiwgMHgwRDhGLCAweDY3NjAsIDB4Njc2MCwgMHgwNkQ3LA0KLSAgICAweDY3NjEsIDB4Njc2MSwgMHgwRTQ4LCAweDY3NjIsIDB4Njc2NCwgMHgzNTczLCAweDY3NjUsIDB4Njc2NSwgMHgwOTlGLA0KLSAgICAweDY3NjYsIDB4Njc2NywgMHgzNTc2LCAweDY3NjgsIDB4Njc2OCwgMHgxMDE3LCAweDY3NjksIDB4Njc2OSwgMHgxODU1LA0KLSAgICAweDY3NkEsIDB4Njc2QSwgMHgxODU4LCAweDY3NkIsIDB4Njc2QywgMHgzNTc4LCAweDY3NkQsIDB4Njc2RCwgMHgwNzczLA0KLSAgICAweDY3NkUsIDB4Njc2RSwgMHgzNTdBLCAweDY3NkYsIDB4Njc2RiwgMHgwNDE2LCAweDY3NzAsIDB4Njc3MCwgMHgwOEFELA0KLSAgICAweDY3NzEsIDB4Njc3MSwgMHgxRUNDLCAweDY3NzIsIDB4Njc3MiwgMHgxOTBGLCAweDY3NzMsIDB4Njc3MywgMHgxODU5LA0KLSAgICAweDY3NzQsIDB4Njc3NCwgMHgzNTdCLCAweDY3NzUsIDB4Njc3NSwgMHgxODVDLCAweDY3NzYsIDB4Njc3NiwgMHgzNTdDLA0KLSAgICAweDY3NzcsIDB4Njc3NywgMHgxODYxLCAweDY3NzgsIDB4Njc3QiwgMHgzNTdELCAweDY3N0MsIDB4Njc3QywgMHgxODYyLA0KLSAgICAweDY3N0QsIDB4Njc3RCwgMHgzNTgxLCAweDY3N0UsIDB4Njc3RSwgMHgwREJFLCAweDY3N0YsIDB4Njc3RiwgMHgwM0YwLA0KLSAgICAweDY3ODAsIDB4Njc4MCwgMHgzNTgyLCAweDY3ODEsIDB4Njc4MSwgMHgwODFFLCAweDY3ODIsIDB4Njc4MywgMHgzNTgzLA0KLSAgICAweDY3ODQsIDB4Njc4NCwgMHgwNzEyLCAweDY3ODUsIDB4Njc4NiwgMHgzNTg1LCAweDY3ODcsIDB4Njc4NywgMHgxODU3LA0KLSAgICAweDY3ODgsIDB4Njc4OCwgMHgzNTg3LCAweDY3ODksIDB4Njc4OSwgMHgwRUE4LCAweDY3OEEsIDB4Njc4QSwgMHgzNTg4LA0KLSAgICAweDY3OEIsIDB4Njc4QiwgMHgxODYwLCAweDY3OEMsIDB4Njc4RiwgMHgzNTg5LCAweDY3OTAsIDB4Njc5MCwgMHgwRjA1LA0KLSAgICAweDY3OTEsIDB4Njc5NCwgMHgzNThELCAweDY3OTUsIDB4Njc5NSwgMHgxMThFLCAweDY3OTYsIDB4Njc5NiwgMHgzNTkxLA0KLSAgICAweDY3OTcsIDB4Njc5NywgMHgwQTFGLCAweDY3OTgsIDB4Njc5OCwgMHgxODVBLCAweDY3OTksIDB4Njc5OSwgMHgzNTkyLA0KLSAgICAweDY3OUEsIDB4Njc5QSwgMHgwQUJCLCAweDY3OUIsIDB4Njc5QiwgMHgzNTkzLCAweDY3OUMsIDB4Njc5QywgMHgwNzU0LA0KLSAgICAweDY3OUQsIDB4Njc5RCwgMHgxMUE1LCAweDY3OUUsIDB4Njc5RSwgMHgxODVFLCAweDY3OUYsIDB4NjdBMSwgMHgzNTk0LA0KLSAgICAweDY3QTIsIDB4NjdBMiwgMHgwRDc3LCAweDY3QTMsIDB4NjdBMywgMHgxMTI5LCAweDY3QTQsIDB4NjdBNCwgMHgzNTk3LA0KLSAgICAweDY3QTUsIDB4NjdBNSwgMHgxODU2LCAweDY3QTYsIDB4NjdBNiwgMHgzNTk4LCAweDY3QTcsIDB4NjdBNywgMHgxODVCLA0KLSAgICAweDY3QTgsIDB4NjdBOCwgMHgxODVELCAweDY3QTksIDB4NjdBOSwgMHgzNTk5LCAweDY3QUEsIDB4NjdBQSwgMHgwQzM2LA0KLSAgICAweDY3QUIsIDB4NjdBQiwgMHgwNjgwLCAweDY3QUMsIDB4NjdBQywgMHgzNTlBLCAweDY3QUQsIDB4NjdBRCwgMHgxODVGLA0KLSAgICAweDY3QUUsIDB4NjdBRSwgMHgzNTlCLCAweDY3QUYsIDB4NjdBRiwgMHgwOTZBLCAweDY3QjAsIDB4NjdCMCwgMHgxODY4LA0KLSAgICAweDY3QjEsIDB4NjdCMiwgMHgzNTlDLCAweDY3QjMsIDB4NjdCMywgMHgxODZELCAweDY3QjQsIDB4NjdCNCwgMHgzNTlFLA0KLSAgICAweDY3QjUsIDB4NjdCNSwgMHgxODZCLCAweDY3QjYsIDB4NjdCNiwgMHgwODRGLCAweDY3QjcsIDB4NjdCNywgMHgwODQyLA0KLSAgICAweDY3QjgsIDB4NjdCOCwgMHgxODcxLCAweDY3QjksIDB4NjdDMCwgMHgzNTlGLCAweDY3QzEsIDB4NjdDMSwgMHgxODc0LA0KLSAgICAweDY3QzIsIDB4NjdDMiwgMHgzNUE3LCAweDY3QzMsIDB4NjdDMywgMHgxODcwLCAweDY3QzQsIDB4NjdDNCwgMHgwNDYzLA0KLSAgICAweDY3QzUsIDB4NjdDRSwgMHgzNUE4LCAweDY3Q0YsIDB4NjdDRiwgMHgwM0UzLCAweDY3RDAsIDB4NjdEMCwgMHgwQjE2LA0KLSAgICAweDY3RDEsIDB4NjdEMSwgMHgwNkM3LCAweDY3RDIsIDB4NjdEMiwgMHgwQzAxLCAweDY3RDMsIDB4NjdEMywgMHgwQzk5LA0KLSAgICAweDY3RDQsIDB4NjdENCwgMHgwQ0JDLCAweDY3RDUsIDB4NjdENywgMHgzNUIyLCAweDY3RDgsIDB4NjdEOCwgMHgxODY1LA0KLSAgICAweDY3RDksIDB4NjdEOSwgMHgxODZBLCAweDY3REEsIDB4NjdEQSwgMHgxODZDLCAweDY3REIsIDB4NjdEQiwgMHgzNUI1LA0KLSAgICAweDY3REMsIDB4NjdEQywgMHgwNzRBLCAweDY3REQsIDB4NjdERCwgMHgxODZFLCAweDY3REUsIDB4NjdERSwgMHgxMjUyLA0KLSAgICAweDY3REYsIDB4NjdERiwgMHgzNUI2LCAweDY3RTAsIDB4NjdFMCwgMHgwQjVFLCAweDY3RTEsIDB4NjdFMSwgMHgzNUI3LA0KLSAgICAweDY3RTIsIDB4NjdFMiwgMHgxODcyLCAweDY3RTMsIDB4NjdFNCwgMHgzNUI4LCAweDY3RTUsIDB4NjdFNSwgMHgwNEIwLA0KLSAgICAweDY3RTYsIDB4NjdFOCwgMHgzNUJBLCAweDY3RTksIDB4NjdFOSwgMHgxODY3LCAweDY3RUEsIDB4NjdFQiwgMHgzNUJELA0KLSAgICAweDY3RUMsIDB4NjdFQywgMHgwODYwLCAweDY3RUQsIDB4NjdFRSwgMHgzNUJGLCAweDY3RUYsIDB4NjdFRiwgMHgwOTRGLA0KLSAgICAweDY3RjAsIDB4NjdGMCwgMHgxODYzLCAweDY3RjEsIDB4NjdGMSwgMHgxMUY4LCAweDY3RjIsIDB4NjdGMiwgMHgzNUMxLA0KLSAgICAweDY3RjMsIDB4NjdGMywgMHgwQTQxLCAweDY3RjQsIDB4NjdGNCwgMHgwNEI4LCAweDY3RjUsIDB4NjdGQywgMHgzNUMyLA0KLSAgICAweDY3RkQsIDB4NjdGRCwgMHgxODc1LCAweDY3RkUsIDB4NjdGRSwgMHgzNUNBLCAweDY3RkYsIDB4NjdGRiwgMHgwRDU4LA0KLSAgICAweDY4MDAsIDB4NjgwMCwgMHgxODZGLCAweDY4MDEsIDB4NjgwNCwgMHgzNUNCLCAweDY4MDUsIDB4NjgwNSwgMHgxMTQ1LA0KLSAgICAweDY4MDYsIDB4NjgwNiwgMHgzNUNGLCAweDY4MDcsIDB4NjgwNywgMHgwNDUzLCAweDY4MDgsIDB4NjgwOCwgMHgxMTVDLA0KLSAgICAweDY4MDksIDB4NjgwOSwgMHgxODY0LCAweDY4MEEsIDB4NjgwQSwgMHgxODY2LCAweDY4MEIsIDB4NjgwQiwgMHgwNUVGLA0KLSAgICAweDY4MEMsIDB4NjgwQywgMHgxODY5LCAweDY4MEQsIDB4NjgwRCwgMHgzNUQwLCAweDY4MEUsIDB4NjgwRSwgMHgxODczLA0KLSAgICAweDY4MEYsIDB4NjgwRiwgMHgwOUEzLCAweDY4MTAsIDB4NjgxMCwgMHgzNUQxLCAweDY4MTEsIDB4NjgxMSwgMHgwRDhFLA0KLSAgICAweDY4MTIsIDB4NjgxMiwgMHgzNUQyLCAweDY4MTMsIDB4NjgxMywgMHgwRDlELCAweDY4MTQsIDB4NjgxNSwgMHgzNUQzLA0KLSAgICAweDY4MTYsIDB4NjgxNiwgMHgwQkZCLCAweDY4MTcsIDB4NjgxNywgMHgwOUUwLCAweDY4MTgsIDB4NjgxQywgMHgzNUQ1LA0KLSAgICAweDY4MUQsIDB4NjgxRCwgMHgxODdGLCAweDY4MUUsIDB4NjgyMCwgMHgzNURBLCAweDY4MjEsIDB4NjgyMSwgMHgwRjZFLA0KLSAgICAweDY4MjIsIDB4NjgyOCwgMHgzNURELCAweDY4MjksIDB4NjgyOSwgMHgxODg4LCAweDY4MkEsIDB4NjgyQSwgMHgxMUU5LA0KLSAgICAweDY4MkIsIDB4NjgzMSwgMHgzNUU0LCAweDY4MzIsIDB4NjgzMywgMHgxODc2LCAweDY4MzQsIDB4NjgzNiwgMHgzNUVCLA0KLSAgICAweDY4MzcsIDB4NjgzNywgMHgxMDIyLCAweDY4MzgsIDB4NjgzOCwgMHgwNzgyLCAweDY4MzksIDB4NjgzOSwgMHgwNkY0LA0KLSAgICAweDY4M0EsIDB4NjgzQiwgMHgzNUVFLCAweDY4M0MsIDB4NjgzQywgMHgwNkVDLCAweDY4M0QsIDB4NjgzRCwgMHgxMTE3LA0KLSAgICAweDY4M0UsIDB4NjgzRSwgMHgxODg1LCAweDY4M0YsIDB4NjgzRiwgMHgzNUYwLCAweDY4NDAsIDB4Njg0MCwgMHgxODg0LA0KLSAgICAweDY4NDEsIDB4Njg0MSwgMHgxODgyLCAweDY4NDIsIDB4Njg0MiwgMHgwNzQ5LCAweDY4NDMsIDB4Njg0MywgMHgwRTI1LA0KLSAgICAweDY4NDQsIDB4Njg0NCwgMHgxODdDLCAweDY4NDUsIDB4Njg0NSwgMHgwRUI1LCAweDY4NDYsIDB4Njg0NiwgMHgwOTdGLA0KLSAgICAweDY4NDcsIDB4Njg0NywgMHgzNUYxLCAweDY4NDgsIDB4Njg0OCwgMHgwM0MzLCAweDY4NDksIDB4Njg0OSwgMHgxODg3LA0KLSAgICAweDY4NEEsIDB4Njg0QSwgMHgxODg2LCAweDY4NEIsIDB4Njg0QiwgMHgzNUYyLCAweDY4NEMsIDB4Njg0QywgMHgxMjFELA0KLSAgICAweDY4NEQsIDB4Njg0RCwgMHgzNUYzLCAweDY4NEUsIDB4Njg0RSwgMHgxODdBLCAweDY4NEYsIDB4Njg0RiwgMHgzNUY0LA0KLSAgICAweDY4NTAsIDB4Njg1MCwgMHgwRTVBLCAweDY4NTEsIDB4Njg1MSwgMHgwQ0RDLCAweDY4NTIsIDB4Njg1MiwgMHgzNUY1LA0KLSAgICAweDY4NTMsIDB4Njg1MywgMHgwN0NELCAweDY4NTQsIDB4Njg1NCwgMHgwOEFDLCAweDY4NTUsIDB4Njg1NSwgMHgxODgwLA0KLSAgICAweDY4NTYsIDB4Njg1RiwgMHgzNUY2LCAweDY4NjAsIDB4Njg2MSwgMHgxODc4LCAweDY4NjIsIDB4Njg2MiwgMHgxODdCLA0KLSAgICAweDY4NjMsIDB4Njg2MywgMHgwNTk2LCAweDY4NjQsIDB4Njg2NCwgMHgxODdELCAweDY4NjUsIDB4Njg2NSwgMHgwQzQyLA0KLSAgICAweDY4NjYsIDB4Njg2NiwgMHgxODgxLCAweDY4NjcsIDB4Njg2NywgMHgxODgzLCAweDY4NjgsIDB4Njg2OCwgMHgwODgxLA0KLSAgICAweDY4NjksIDB4Njg2OSwgMHgxMjBCLCAweDY4NkEsIDB4Njg2QSwgMHgzNjAwLCAweDY4NkIsIDB4Njg2QiwgMHgxODhFLA0KLSAgICAweDY4NkMsIDB4Njg3MywgMHgzNjAxLCAweDY4NzQsIDB4Njg3NCwgMHgxODhCLCAweDY4NzUsIDB4Njg3NSwgMHgzNjA5LA0KLSAgICAweDY4NzYsIDB4Njg3NiwgMHgwRTYxLCAweDY4NzcsIDB4Njg3NywgMHgxODhDLCAweDY4NzgsIDB4Njg4MCwgMHgzNjBBLA0KLSAgICAweDY4ODEsIDB4Njg4MSwgMHgwQTAzLCAweDY4ODIsIDB4Njg4MiwgMHgzNjEzLCAweDY4ODMsIDB4Njg4MywgMHgxODdFLA0KLSAgICAweDY4ODQsIDB4Njg4NCwgMHgzNjE0LCAweDY4ODUsIDB4Njg4NSwgMHgwQUJDLCAweDY4ODYsIDB4Njg4NiwgMHgwM0ZCLA0KLSAgICAweDY4ODcsIDB4Njg4RSwgMHgzNjE1LCAweDY4OEYsIDB4Njg4RiwgMHgxODhBLCAweDY4OTAsIDB4Njg5MiwgMHgzNjFELA0KLSAgICAweDY4OTMsIDB4Njg5MywgMHgxODhELCAweDY4OTQsIDB4Njg5NiwgMHgzNjIwLCAweDY4OTcsIDB4Njg5NywgMHgwNkZDLA0KLSAgICAweDY4OTgsIDB4Njg5OCwgMHgyNDZBLCAweDY4OTksIDB4Njg5QywgMHgzNjIzLCAweDY4OUQsIDB4Njg5RCwgMHgyMTc1LA0KLSAgICAweDY4OUUsIDB4Njg5RSwgMHgzNjI3LCAweDY4OUYsIDB4Njg5RiwgMHgyNDZELCAweDY4QTAsIDB4NjhBMSwgMHgzNjI4LA0KLSAgICAweDY4QTIsIDB4NjhBMiwgMHgwRDBCLCAweDY4QTMsIDB4NjhBNSwgMHgzNjJBLCAweDY4QTYsIDB4NjhBNiwgMHgwQUQzLA0KLSAgICAweDY4QTcsIDB4NjhBNywgMHgwRUVGLCAweDY4QTgsIDB4NjhBOCwgMHgwOUQxLCAweDY4QTksIDB4NjhBQywgMHgzNjJELA0KLSAgICAweDY4QUQsIDB4NjhBRCwgMHgwREU4LCAweDY4QUUsIDB4NjhBRSwgMHgzNjMxLCAweDY4QUYsIDB4NjhBRiwgMHgwRTMwLA0KLSAgICAweDY4QjAsIDB4NjhCMCwgMHgwRjgwLCAweDY4QjEsIDB4NjhCMiwgMHgzNjMyLCAweDY4QjMsIDB4NjhCMywgMHgwRDc4LA0KLSAgICAweDY4QjQsIDB4NjhCNCwgMHgzNjM0LCAweDY4QjUsIDB4NjhCNSwgMHgxODg5LCAweDY4QjYsIDB4NjhCRiwgMHgzNjM1LA0KLSAgICAweDY4QzAsIDB4NjhDMCwgMHgwODVGLCAweDY4QzEsIDB4NjhDMSwgMHgzNjNGLCAweDY4QzIsIDB4NjhDMiwgMHgxODhGLA0KLSAgICAweDY4QzMsIDB4NjhDOCwgMHgzNjQwLCAweDY4QzksIDB4NjhDOSwgMHgwQUUzLCAweDY4Q0EsIDB4NjhDQSwgMHgzNjQ2LA0KLSAgICAweDY4Q0IsIDB4NjhDQiwgMHgwQzA0LCAweDY4Q0MsIDB4NjhDQywgMHgzNjQ3LCAweDY4Q0QsIDB4NjhDRCwgMHgwNzUwLA0KLSAgICAweDY4Q0UsIDB4NjhEMSwgMHgzNjQ4LCAweDY4RDIsIDB4NjhEMiwgMHgwM0ZGLCAweDY4RDMsIDB4NjhENCwgMHgzNjRDLA0KLSAgICAweDY4RDUsIDB4NjhENSwgMHgxMjM1LCAweDY4RDYsIDB4NjhENiwgMHgyNDZCLCAweDY4RDcsIDB4NjhENywgMHgyMjVGLA0KLSAgICAweDY4RDgsIDB4NjhEOCwgMHgwODFGLCAweDY4RDksIDB4NjhEOSwgMHgzNjRFLCAweDY4REEsIDB4NjhEQSwgMHgwQkIwLA0KLSAgICAweDY4REIsIDB4NjhERSwgMHgzNjRGLCAweDY4REYsIDB4NjhERiwgMHgxRUNFLCAweDY4RTAsIDB4NjhFMCwgMHgwRTE3LA0KLSAgICAweDY4RTEsIDB4NjhFMiwgMHgzNjUzLCAweDY4RTMsIDB4NjhFMywgMHgxODlBLCAweDY4RTQsIDB4NjhFNiwgMHgzNjU1LA0KLSAgICAweDY4RTcsIDB4NjhFNywgMHgyMjcyLCAweDY4RTgsIDB4NjhFRCwgMHgzNjU4LCAweDY4RUUsIDB4NjhFRSwgMHgwQ0U2LA0KLSAgICAweDY4RUYsIDB4NjhFRiwgMHgzNjVFLCAweDY4RjAsIDB4NjhGMCwgMHgxODk2LCAweDY4RjEsIDB4NjhGMSwgMHgwOUNELA0KLSAgICAweDY4RjIsIDB4NjhGNCwgMHgzNjVGLCAweDY4RjUsIDB4NjhGNSwgMHgwOTUwLCAweDY4RjYsIDB4NjhGOCwgMHgzNjYyLA0KLSAgICAweDY4RjksIDB4NjhGOSwgMHgxODk0LCAweDY4RkEsIDB4NjhGQSwgMHgwNzMwLCAweDY4RkIsIDB4NjhGQiwgMHgzNjY1LA0KLSAgICAweDY4RkMsIDB4NjhGQywgMHgxODkxLCAweDY4RkQsIDB4NjhGRiwgMHgzNjY2LCAweDY5MDAsIDB4NjkwMCwgMHgzNjY5LA0KLSAgICAweDY5MDEsIDB4NjkwMSwgMHgxODk4LCAweDY5MDIsIDB4NjkwNCwgMHgzNjZBLCAweDY5MDUsIDB4NjkwNSwgMHgxMDU1LA0KLSAgICAweDY5MDYsIDB4NjkwQSwgMHgzNjZELCAweDY5MEIsIDB4NjkwQiwgMHgxODk3LCAweDY5MEMsIDB4NjkwQywgMHgzNjcyLA0KLSAgICAweDY5MEQsIDB4NjkwRCwgMHgxMUIxLCAweDY5MEUsIDB4NjkwRSwgMHgxMjEyLCAweDY5MEYsIDB4NjkwRiwgMHgyNDczLA0KLSAgICAweDY5MTAsIDB4NjkxMCwgMHgxODlCLCAweDY5MTEsIDB4NjkxMSwgMHgzNjczLCAweDY5MTIsIDB4NjkxMiwgMHgwODg4LA0KLSAgICAweDY5MTMsIDB4NjkxRSwgMHgzNjc0LCAweDY5MUYsIDB4NjkyMCwgMHgxODkyLCAweDY5MjEsIDB4NjkyMywgMHgzNjgwLA0KLSAgICAweDY5MjQsIDB4NjkyNCwgMHgxODk1LCAweDY5MjUsIDB4NjkyQywgMHgzNjgzLCAweDY5MkQsIDB4NjkyRCwgMHgwRTg3LA0KLSAgICAweDY5MkUsIDB4NjkyRiwgMHgzNjhCLCAweDY5MzAsIDB4NjkzMCwgMHgxMDMzLCAweDY5MzEsIDB4NjkzMywgMHgzNjhELA0KLSAgICAweDY5MzQsIDB4NjkzNCwgMHgxOEE2LCAweDY5MzUsIDB4NjkzOCwgMHgzNjkwLCAweDY5MzksIDB4NjkzOSwgMHgxODlELA0KLSAgICAweDY5M0EsIDB4NjkzQywgMHgzNjk0LCAweDY5M0QsIDB4NjkzRCwgMHgwNTJELCAweDY5M0UsIDB4NjkzRSwgMHgzNjk3LA0KLSAgICAweDY5M0YsIDB4NjkzRiwgMHgwNTNFLCAweDY5NDAsIDB4Njk0MSwgMHgzNjk4LCAweDY5NDIsIDB4Njk0MiwgMHgxODlGLA0KLSAgICAweDY5NDMsIDB4Njk0OSwgMHgzNjlBLCAweDY5NEEsIDB4Njk0QSwgMHgyMUZFLCAweDY5NEIsIDB4Njk1MiwgMHgzNkExLA0KLSAgICAweDY5NTMsIDB4Njk1MywgMHgxRUZFLCAweDY5NTQsIDB4Njk1NCwgMHgwRjczLCAweDY5NTUsIDB4Njk1NiwgMHgzNkE5LA0KLSAgICAweDY5NTcsIDB4Njk1NywgMHgxODk5LCAweDY5NTgsIDB4Njk1OSwgMHgzNkFCLCAweDY5NUEsIDB4Njk1QSwgMHgwNTIzLA0KLSAgICAweDY5NUIsIDB4Njk1QywgMHgzNkFELCAweDY5NUQsIDB4Njk1RCwgMHgxOEEwLCAweDY5NUUsIDB4Njk1RSwgMHgwOUNFLA0KLSAgICAweDY5NUYsIDB4Njk1RiwgMHgzNkFGLCAweDY5NjAsIDB4Njk2MCwgMHgxODlFLCAweDY5NjEsIDB4Njk2MiwgMHgzNkIwLA0KLSAgICAweDY5NjMsIDB4Njk2MywgMHgxOEFELCAweDY5NjQsIDB4Njk2NSwgMHgzNkIyLCAweDY5NjYsIDB4Njk2NiwgMHgxOEFDLA0KLSAgICAweDY5NjcsIDB4Njk2NywgMHgzNkI0LCAweDY5NjgsIDB4Njk2OCwgMHgyNDc1LCAweDY5NjksIDB4Njk2QSwgMHgzNkI1LA0KLSAgICAweDY5NkIsIDB4Njk2QiwgMHgxOEEyLCAweDY5NkMsIDB4Njk2QywgMHgzNkI3LCAweDY5NkQsIDB4Njk2RCwgMHgyMjBBLA0KLSAgICAweDY5NkUsIDB4Njk2RSwgMHgxODkwLCAweDY5NkYsIDB4Njk3MCwgMHgzNkI4LCAweDY5NzEsIDB4Njk3MSwgMHgxODlDLA0KLSAgICAweDY5NzIsIDB4Njk3NCwgMHgzNkJBLCAweDY5NzUsIDB4Njk3NSwgMHgxRjZGLCAweDY5NzYsIDB4Njk3NiwgMHgzNkJELA0KLSAgICAweDY5NzcsIDB4Njk3NywgMHgwOTM5LCAweDY5NzgsIDB4Njk3OCwgMHgxOEE1LCAweDY5NzksIDB4Njk3OSwgMHgxOEFFLA0KLSAgICAweDY5N0EsIDB4Njk3QiwgMHgzNkJFLCAweDY5N0MsIDB4Njk3QywgMHgwQTRDLCAweDY5N0QsIDB4Njk3RiwgMHgzNkMwLA0KLSAgICAweDY5ODAsIDB4Njk4MCwgMHgxOEEzLCAweDY5ODEsIDB4Njk4MSwgMHgzNkMzLCAweDY5ODIsIDB4Njk4MiwgMHgwNkMwLA0KLSAgICAweDY5ODMsIDB4Njk4MywgMHgzNkM0LCAweDY5ODQsIDB4Njk4NCwgMHgxOEExLCAweDY5ODUsIDB4Njk4NSwgMHgzNkM1LA0KLSAgICAweDY5ODYsIDB4Njk4NiwgMHgxMEMxLCAweDY5ODcsIDB4Njk4OCwgMHgxOEE4LCAweDY5ODksIDB4Njk4OSwgMHgxOEFCLA0KLSAgICAweDY5OEEsIDB4Njk4QywgMHgzNkM2LCAweDY5OEQsIDB4Njk4RCwgMHgxOEJCLCAweDY5OEUsIDB4Njk5MywgMHgzNkM5LA0KLSAgICAweDY5OTQsIDB4Njk5NCwgMHgwOUIxLCAweDY5OTUsIDB4Njk5NSwgMHgxOEI5LCAweDY5OTYsIDB4Njk5NywgMHgzNkNGLA0KLSAgICAweDY5OTgsIDB4Njk5OCwgMHgxOEE0LCAweDY5OTksIDB4Njk5QSwgMHgzNkQxLCAweDY5OUIsIDB4Njk5QiwgMHgxOEFGLA0KLSAgICAweDY5OUMsIDB4Njk5QywgMHgwM0ZDLCAweDY5OUQsIDB4NjlBNiwgMHgzNkQzLCAweDY5QTcsIDB4NjlBNywgMHgxOEIwLA0KLSAgICAweDY5QTgsIDB4NjlBOCwgMHgxMTQ2LCAweDY5QTksIDB4NjlBOSwgMHgzNkRELCAweDY5QUEsIDB4NjlBQSwgMHgyNDY4LA0KLSAgICAweDY5QUIsIDB4NjlBQiwgMHgxOEIyLCAweDY5QUMsIDB4NjlBQywgMHgzNkRFLCAweDY5QUQsIDB4NjlBRCwgMHgxOEIzLA0KLSAgICAweDY5QUUsIDB4NjlBRSwgMHgyMTAwLCAweDY5QUYsIDB4NjlCMCwgMHgzNkRGLCAweDY5QjEsIDB4NjlCMSwgMHgxOEI1LA0KLSAgICAweDY5QjIsIDB4NjlCMywgMHgzNkUxLCAweDY5QjQsIDB4NjlCNCwgMHgwQTNBLCAweDY5QjUsIDB4NjlCNiwgMHgzNkUzLA0KLSAgICAweDY5QjcsIDB4NjlCNywgMHgwQzkxLCAweDY5QjgsIDB4NjlCQSwgMHgzNkU1LCAweDY5QkIsIDB4NjlCQiwgMHgxOEIxLA0KLSAgICAweDY5QkMsIDB4NjlCRSwgMHgzNkU4LCAweDY5QkYsIDB4NjlCRiwgMHgyNDc2LCAweDY5QzAsIDB4NjlDMCwgMHgzNkVCLA0KLSAgICAweDY5QzEsIDB4NjlDMSwgMHgxOEI2LCAweDY5QzIsIDB4NjlDOSwgMHgzNkVDLCAweDY5Q0EsIDB4NjlDQSwgMHgxOEI3LA0KLSAgICAweDY5Q0IsIDB4NjlDQiwgMHgxRjI3LCAweDY5Q0MsIDB4NjlDQywgMHgxOEE3LCAweDY5Q0QsIDB4NjlDRCwgMHgyMEQ3LA0KLSAgICAweDY5Q0UsIDB4NjlDRSwgMHgxOEFBLCAweDY5Q0YsIDB4NjlDRiwgMHgzNkY0LCAweDY5RDAsIDB4NjlEMCwgMHgwN0M2LA0KLSAgICAweDY5RDEsIDB4NjlEMywgMHgzNkY1LCAweDY5RDQsIDB4NjlENCwgMHgxOEI0LCAweDY5RDUsIDB4NjlEQSwgMHgzNkY4LA0KLSAgICAweDY5REIsIDB4NjlEQiwgMHgwODZBLCAweDY5REMsIDB4NjlERSwgMHgzNkZFLCAweDY5REYsIDB4NjlERiwgMHgxOEI4LA0KLSAgICAweDY5RTAsIDB4NjlFMCwgMHgxOEJBLCAweDY5RTEsIDB4NjlFNiwgMHgzNzAxLCAweDY5RTcsIDB4NjlFNywgMHgyNDdDLA0KLSAgICAweDY5RTgsIDB4NjlFQywgMHgzNzA3LCAweDY5RUQsIDB4NjlFRCwgMHgxOEJFLCAweDY5RUUsIDB4NjlGMSwgMHgzNzBDLA0KLSAgICAweDY5RjIsIDB4NjlGMiwgMHgxOEMyLCAweDY5RjMsIDB4NjlGMywgMHgxRkExLCAweDY5RjQsIDB4NjlGQywgMHgzNzEwLA0KLSAgICAweDY5RkQsIDB4NjlGRCwgMHgwNEEyLCAweDY5RkUsIDB4NjlGRSwgMHgzNzE5LCAweDY5RkYsIDB4NjlGRiwgMHgxOEJDLA0KLSAgICAweDZBMDAsIDB4NkEwMCwgMHgzNzFBLCAweDZBMDEsIDB4NkEwMSwgMHgyMkFBLCAweDZBMDIsIDB4NkEwMiwgMHgyMDA1LA0KLSAgICAweDZBMDMsIDB4NkEwNCwgMHgzNzFCLCAweDZBMDUsIDB4NkEwNSwgMHgyNDZDLCAweDZBMDYsIDB4NkEwOSwgMHgzNzFELA0KLSAgICAweDZBMEEsIDB4NkEwQSwgMHgwNjRCLCAweDZBMEIsIDB4NkExMiwgMHgzNzIxLCAweDZBMTMsIDB4NkExMywgMHgyMDNFLA0KLSAgICAweDZBMTQsIDB4NkExNiwgMHgzNzI5LCAweDZBMTcsIDB4NkExOCwgMHgxOEJGLCAweDZBMTksIDB4NkExOSwgMHgxRTRDLA0KLSAgICAweDZBMUEsIDB4NkExRCwgMHgzNzJDLCAweDZBMUUsIDB4NkExRSwgMHgyMTNBLCAweDZBMUYsIDB4NkExRiwgMHgxMTYyLA0KLSAgICAweDZBMjAsIDB4NkEyMCwgMHgzNzMwLCAweDZBMjEsIDB4NkEyMSwgMHgwQjA2LCAweDZBMjIsIDB4NkEyMiwgMHgzNzMxLA0KLSAgICAweDZBMjMsIDB4NkEyMywgMHgyMjA0LCAweDZBMjQsIDB4NkEyNywgMHgzNzMyLCAweDZBMjgsIDB4NkEyOCwgMHgxOENDLA0KLSAgICAweDZBMjksIDB4NkEyOSwgMHgzNzM2LCAweDZBMkEsIDB4NkEyQSwgMHgwNzk4LCAweDZBMkIsIDB4NkEyRSwgMHgzNzM3LA0KLSAgICAweDZBMkYsIDB4NkEyRiwgMHgxOEJELCAweDZBMzAsIDB4NkEzMCwgMHgzNzNCLCAweDZBMzEsIDB4NkEzMSwgMHgxMDg4LA0KLSAgICAweDZBMzIsIDB4NkEzNCwgMHgzNzNDLCAweDZBMzUsIDB4NkEzNSwgMHgxOEM4LCAweDZBMzYsIDB4NkEzNywgMHgzNzNGLA0KLSAgICAweDZBMzgsIDB4NkEzOCwgMHgyMEMzLCAweDZBMzksIDB4NkEzOSwgMHgyMTQwLCAweDZBM0EsIDB4NkEzQSwgMHgyNDc3LA0KLSAgICAweDZBM0IsIDB4NkEzQywgMHgzNzQxLCAweDZBM0QsIDB4NkEzRCwgMHgxOENCLCAweDZBM0UsIDB4NkEzRSwgMHgxOEM0LA0KLSAgICAweDZBM0YsIDB4NkE0MywgMHgzNzQzLCAweDZBNDQsIDB4NkE0NCwgMHgxOEMzLCAweDZBNDUsIDB4NkE0NiwgMHgzNzQ4LA0KLSAgICAweDZBNDcsIDB4NkE0NywgMHgwQzNFLCAweDZBNDgsIDB4NkE0OCwgMHgyNDc0LCAweDZBNDksIDB4NkE0QSwgMHgzNzRBLA0KLSAgICAweDZBNEIsIDB4NkE0QiwgMHgyMERELCAweDZBNEMsIDB4NkE0RiwgMHgzNzRDLCAweDZBNTAsIDB4NkE1MCwgMHgxOEM2LA0KLSAgICAweDZBNTEsIDB4NkE1NywgMHgzNzUwLCAweDZBNTgsIDB4NkE1OCwgMHgxOENELCAweDZBNTksIDB4NkE1OSwgMHgwNEVELA0KLSAgICAweDZBNUEsIDB4NkE1QSwgMHgzNzU3LCAweDZBNUIsIDB4NkE1QiwgMHgxOEM3LCAweDZBNUMsIDB4NkE1RSwgMHgzNzU4LA0KLSAgICAweDZBNUYsIDB4NkE1RiwgMHgxRjY4LCAweDZBNjAsIDB4NkE2MCwgMHgzNzVCLCAweDZBNjEsIDB4NkE2MSwgMHgwRjVELA0KLSAgICAweDZBNjIsIDB4NkE2MiwgMHgyMTg1LCAweDZBNjMsIDB4NkE2NCwgMHgzNzVDLCAweDZBNjUsIDB4NkE2NSwgMHgxOEMxLA0KLSAgICAweDZBNjYsIDB4NkE3MCwgMHgzNzVFLCAweDZBNzEsIDB4NkE3MSwgMHgwNTFDLCAweDZBNzIsIDB4NkE3OCwgMHgzNzY5LA0KLSAgICAweDZBNzksIDB4NkE3OSwgMHgxOENBLCAweDZBN0EsIDB4NkE3QiwgMHgzNzcwLCAweDZBN0MsIDB4NkE3QywgMHgxOENFLA0KLSAgICAweDZBN0QsIDB4NkE3RiwgMHgzNzcyLCAweDZBODAsIDB4NkE4MCwgMHgwRTA3LCAweDZBODEsIDB4NkE4MywgMHgzNzc1LA0KLSAgICAweDZBODQsIDB4NkE4NCwgMHgwRjFBLCAweDZBODUsIDB4NkE4OCwgMHgzNzc4LCAweDZBODksIDB4NkE4OSwgMHgyNDcyLA0KLSAgICAweDZBOEEsIDB4NkE4RCwgMHgzNzdDLCAweDZBOEUsIDB4NkE4RSwgMHgxOEM5LCAweDZBOEYsIDB4NkE4RiwgMHgzNzgwLA0KLSAgICAweDZBOTAsIDB4NkE5MCwgMHgxOEQwLCAweDZBOTEsIDB4NkE5MSwgMHgxOENGLCAweDZBOTIsIDB4NkE5MywgMHgzNzgxLA0KLSAgICAweDZBOTQsIDB4NkE5NCwgMHgxRUI1LCAweDZBOTUsIDB4NkE5NiwgMHgzNzgzLCAweDZBOTcsIDB4NkE5NywgMHgxOEQyLA0KLSAgICAweDZBOTgsIDB4NkE5QiwgMHgzNzg1LCAweDZBOUMsIDB4NkE5QywgMHgyNDc4LCAweDZBOUQsIDB4NkE5RiwgMHgzNzg5LA0KLSAgICAweDZBQTAsIDB4NkFBMCwgMHgxOEM1LCAweDZBQTEsIDB4NkFBMSwgMHgzNzhDLCAweDZBQTIsIDB4NkFBMiwgMHgxRjhCLA0KLSAgICAweDZBQTMsIDB4NkFBMywgMHgyNDg0LCAweDZBQTQsIDB4NkFBOCwgMHgzNzhELCAweDZBQTksIDB4NkFBOSwgMHgxOEQxLA0KLSAgICAweDZBQUEsIDB4NkFBQSwgMHgzNzkyLCAweDZBQUIsIDB4NkFBQiwgMHgxOEQzLCAweDZBQUMsIDB4NkFBQywgMHgwQUNGLA0KLSAgICAweDZBQUQsIDB4NkFBRSwgMHgzNzkzLCAweDZBQUYsIDB4NkFBRiwgMHgyNjk5LCAweDZBQjAsIDB4NkFCMiwgMHgzNzk1LA0KLSAgICAweDZBQjMsIDB4NkFCMywgMHgyNDgyLCAweDZBQjQsIDB4NkFCNywgMHgzNzk4LCAweDZBQjgsIDB4NkFCOCwgMHgyMEExLA0KLSAgICAweDZBQjksIDB4NkFCQSwgMHgzNzlDLCAweDZBQkIsIDB4NkFCQiwgMHgxRjkyLCAweDZBQkMsIDB4NkFDMiwgMHgzNzlFLA0KLSAgICAweDZBQzMsIDB4NkFDMywgMHgxRjM4LCAweDZBQzQsIDB4NkFEMiwgMHgzN0E1LCAweDZBRDMsIDB4NkFEMywgMHgyNDg1LA0KLSAgICAweDZBRDQsIDB4NkFEOSwgMHgzN0I0LCAweDZBREEsIDB4NkFEQSwgMHgyNDgwLCAweDZBREIsIDB4NkFEQiwgMHgyNDZFLA0KLSAgICAweDZBREMsIDB4NkFEQywgMHgzN0JBLCAweDZBREQsIDB4NkFERCwgMHgyNDdCLCAweDZBREUsIDB4NkFERSwgMHgyNDg2LA0KLSAgICAweDZBREYsIDB4NkFERiwgMHgyNDcxLCAweDZBRTAsIDB4NkFFNiwgMHgzN0JCLCAweDZBRTcsIDB4NkFFNywgMHgyNDgzLA0KLSAgICAweDZBRTgsIDB4NkFFOCwgMHgyNDcwLCAweDZBRTksIDB4NkFFOSwgMHgzN0MyLCAweDZBRUEsIDB4NkFFQSwgMHgyNDY5LA0KLSAgICAweDZBRUIsIDB4NkFFQiwgMHgzN0MzLCAweDZBRUMsIDB4NkFFQywgMHgyNDdGLCAweDZBRUQsIDB4NkFGMiwgMHgzN0M0LA0KLSAgICAweDZBRjMsIDB4NkFGMywgMHgyNDZGLCAweDZBRjQsIDB4NkFGNywgMHgzN0NBLCAweDZBRjgsIDB4NkFGOCwgMHgyNDgxLA0KLSAgICAweDZBRjksIDB4NkFGQSwgMHgzN0NFLCAweDZBRkIsIDB4NkFGQiwgMHgyMjIwLCAweDZBRkMsIDB4NkFGRiwgMHgzN0QwLA0KLSAgICAweDZCMDAsIDB4NkIwMywgMHgzN0Q0LCAweDZCMDQsIDB4NkIwNCwgMHgxRkY1LCAweDZCMDUsIDB4NkIwOSwgMHgzN0Q4LA0KLSAgICAweDZCMEEsIDB4NkIwQSwgMHgyMEY0LCAweDZCMEIsIDB4NkIwRSwgMHgzN0RELCAweDZCMEYsIDB4NkIwRiwgMHgyNDdELA0KLSAgICAweDZCMTAsIDB4NkIxMSwgMHgzN0UxLCAweDZCMTIsIDB4NkIxMiwgMHgyNDc5LCAweDZCMTMsIDB4NkIxNSwgMHgzN0UzLA0KLSAgICAweDZCMTYsIDB4NkIxNiwgMHgyNDdFLCAweDZCMTcsIDB4NkIxRCwgMHgzN0U2LCAweDZCMUUsIDB4NkIxRSwgMHgyNDdBLA0KLSAgICAweDZCMUYsIDB4NkIxRiwgMHgzN0VELCAweDZCMjAsIDB4NkIyMCwgMHgwQzM0LCAweDZCMjEsIDB4NkIyMSwgMHgwNTUxLA0KLSAgICAweDZCMjIsIDB4NkIyMiwgMHgwN0NCLCAweDZCMjMsIDB4NkIyMywgMHgwRjhCLCAweDZCMjQsIDB4NkIyNCwgMHgxOUIxLA0KLSAgICAweDZCMjUsIDB4NkIyNiwgMHgzN0VFLCAweDZCMjcsIDB4NkIyNywgMHgwQjc4LCAweDZCMjgsIDB4NkIzMSwgMHgzN0YwLA0KLSAgICAweDZCMzIsIDB4NkIzMiwgMHgxMEUwLCAweDZCMzMsIDB4NkIzNiwgMHgzN0ZBLCAweDZCMzcsIDB4NkIzNywgMHgxOUIyLA0KLSAgICAweDZCMzgsIDB4NkIzOCwgMHgzN0ZFLCAweDZCMzksIDB4NkIzOSwgMHgxOUIzLCAweDZCM0EsIDB4NkIzQSwgMHgwQkZBLA0KLSAgICAweDZCM0IsIDB4NkIzQywgMHgzN0ZGLCAweDZCM0QsIDB4NkIzRCwgMHgyMEUzLCAweDZCM0UsIDB4NkIzRSwgMHgwOTdCLA0KLSAgICAweDZCM0YsIDB4NkI0MiwgMHgzODAxLCAweDZCNDMsIDB4NkI0MywgMHgxOUI0LCAweDZCNDQsIDB4NkI0NSwgMHgzODA1LA0KLSAgICAweDZCNDYsIDB4NkI0NiwgMHgxOUI1LCAweDZCNDcsIDB4NkI0NywgMHgwRjc1LCAweDZCNDgsIDB4NkI0OCwgMHgzODA3LA0KLSAgICAweDZCNDksIDB4NkI0OSwgMHgwQzM1LCAweDZCNEEsIDB4NkI0QiwgMHgzODA4LCAweDZCNEMsIDB4NkI0QywgMHgwNkUzLA0KLSAgICAweDZCNEQsIDB4NkI0RiwgMHgzODBBLCAweDZCNTAsIDB4NkI1MCwgMHgyMEFELCAweDZCNTEsIDB4NkI1OCwgMHgzODBELA0KLSAgICAweDZCNTksIDB4NkI1OSwgMHgxOUI2LCAweDZCNUEsIDB4NkI1RSwgMHgzODE1LCAweDZCNUYsIDB4NkI1RiwgMHgyNENCLA0KLSAgICAweDZCNjAsIDB4NkI2MCwgMHgzODFBLCAweDZCNjEsIDB4NkI2MSwgMHgxRjUzLCAweDZCNjIsIDB4NkI2MiwgMHgxMUI4LA0KLSAgICAweDZCNjMsIDB4NkI2MywgMHgxMTlFLCAweDZCNjQsIDB4NkI2NCwgMHgwNTRFLCAweDZCNjUsIDB4NkI2NSwgMHgwNDg0LA0KLSAgICAweDZCNjYsIDB4NkI2NiwgMHgwRUYzLCAweDZCNjcsIDB4NkI2NywgMHgwQzA2LCAweDZCNjgsIDB4NkI2OSwgMHgzODFCLA0KLSAgICAweDZCNkEsIDB4NkI2QSwgMHgwRTkyLCAweDZCNkIsIDB4NkI3MSwgMHgzODFELCAweDZCNzIsIDB4NkI3MiwgMHgyMTU5LA0KLSAgICAweDZCNzMsIDB4NkI3NiwgMHgzODI0LCAweDZCNzcsIDB4NkI3NywgMHgyMDEzLCAweDZCNzgsIDB4NkI3OCwgMHgxRjMzLA0KLSAgICAweDZCNzksIDB4NkI3OSwgMHgwNTc4LCAweDZCN0EsIDB4NkI3QSwgMHgzODI4LCAweDZCN0IsIDB4NkI3QiwgMHgwREI1LA0KLSAgICAweDZCN0MsIDB4NkI3QywgMHgwODUyLCAweDZCN0QsIDB4NkI4MCwgMHgzODI5LCAweDZCODEsIDB4NkI4MiwgMHgxOEQ2LA0KLSAgICAweDZCODMsIDB4NkI4MywgMHgxMDEzLCAweDZCODQsIDB4NkI4NCwgMHgxOEQ5LCAweDZCODUsIDB4NkI4NSwgMHgzODJELA0KLSAgICAweDZCODYsIDB4NkI4NiwgMHgwNTdDLCAweDZCODcsIDB4NkI4NywgMHgxOEQ4LCAweDZCODgsIDB4NkI4OCwgMHgzODJFLA0KLSAgICAweDZCODksIDB4NkI4OSwgMHgwRkRDLCAweDZCOEEsIDB4NkI4QSwgMHgwRDc5LCAweDZCOEIsIDB4NkI4QiwgMHgwNDk3LA0KLSAgICAweDZCOEMsIDB4NkI4QywgMHgzODJGLCAweDZCOEQsIDB4NkI4RCwgMHgxOERDLCAweDZCOEUsIDB4NkI5MSwgMHgzODMwLA0KLSAgICAweDZCOTIsIDB4NkI5MywgMHgxOERBLCAweDZCOTQsIDB4NkI5NSwgMHgzODM0LCAweDZCOTYsIDB4NkI5NiwgMHgxMUIyLA0KLSAgICAweDZCOTcsIDB4NkI5NywgMHgzODM2LCAweDZCOTgsIDB4NkI5OCwgMHgxRTVDLCAweDZCOTksIDB4NkI5OSwgMHgzODM3LA0KLSAgICAweDZCOUEsIDB4NkI5QiwgMHgxOERELCAweDZCOUMsIDB4NkI5RCwgMHgzODM4LCAweDZCOUUsIDB4NkI5RSwgMHgyNDg4LA0KLSAgICAweDZCOUYsIDB4NkJBMCwgMHgzODNBLCAweDZCQTEsIDB4NkJBMSwgMHgxOERGLCAweDZCQTIsIDB4NkJBMywgMHgzODNDLA0KLSAgICAweDZCQTQsIDB4NkJBNCwgMHgyNDg3LCAweDZCQTUsIDB4NkJBOSwgMHgzODNFLCAweDZCQUEsIDB4NkJBQSwgMHgxOEUwLA0KLSAgICAweDZCQUIsIDB4NkJBQiwgMHgyNDhBLCAweDZCQUMsIDB4NkJBRCwgMHgzODQzLCAweDZCQUUsIDB4NkJBRSwgMHgyNDg5LA0KLSAgICAweDZCQUYsIDB4NkJBRiwgMHgyNDhCLCAweDZCQjAsIDB4NkJCMSwgMHgzODQ1LCAweDZCQjIsIDB4NkJCMiwgMHgxRjgzLA0KLSAgICAweDZCQjMsIDB4NkJCMywgMHgxOUJELCAweDZCQjQsIDB4NkJCNCwgMHgwQjdBLCAweDZCQjUsIDB4NkJCNSwgMHgwNjBELA0KLSAgICAweDZCQjYsIDB4NkJCNiwgMHgzODQ3LCAweDZCQjcsIDB4NkJCNywgMHgxMDdBLCAweDZCQjgsIDB4NkJCOSwgMHgzODQ4LA0KLSAgICAweDZCQkEsIDB4NkJCQSwgMHgyMTBGLCAweDZCQkIsIDB4NkJCQiwgMHgxRkRCLCAweDZCQkMsIDB4NkJCRSwgMHgzODRBLA0KLSAgICAweDZCQkYsIDB4NkJCRiwgMHgwNUNGLCAweDZCQzAsIDB4NkJDMCwgMHgzODRELCAweDZCQzEsIDB4NkJDMSwgMHgwN0VFLA0KLSAgICAweDZCQzIsIDB4NkJDMiwgMHgxOUJGLCAweDZCQzMsIDB4NkJDNCwgMHgzODRFLCAweDZCQzUsIDB4NkJDNSwgMHgxMDZBLA0KLSAgICAweDZCQzYsIDB4NkJDNiwgMHgyMEFGLCAweDZCQzcsIDB4NkJDQSwgMHgzODUwLCAweDZCQ0IsIDB4NkJDQiwgMHgwRUYyLA0KLSAgICAweDZCQ0MsIDB4NkJDQywgMHgzODU0LCAweDZCQ0QsIDB4NkJDRCwgMHgwQjFCLCAweDZCQ0UsIDB4NkJDRSwgMHgzODU1LA0KLSAgICAweDZCQ0YsIDB4NkJDRiwgMHgwQUM0LCAweDZCRDAsIDB4NkJEMSwgMHgzODU2LCAweDZCRDIsIDB4NkJEMiwgMHgwNUZELA0KLSAgICAweDZCRDMsIDB4NkJEMywgMHgxMjZGLCAweDZCRDQsIDB4NkJENCwgMHgwNDMxLCAweDZCRDUsIDB4NkJENSwgMHgwNDM4LA0KLSAgICAweDZCRDYsIDB4NkJENiwgMHgwNDNBLCAweDZCRDcsIDB4NkJENywgMHgwQkJGLCAweDZCRDgsIDB4NkJEOCwgMHgzODU4LA0KLSAgICAweDZCRDksIDB4NkJEOSwgMHgwNDM5LCAweDZCREEsIDB4NkJEQSwgMHgzODU5LCAweDZCREIsIDB4NkJEQiwgMHgwQUIwLA0KLSAgICAweDZCREMsIDB4NkJFMCwgMHgzODVBLCAweDZCRTEsIDB4NkJFMSwgMHgxMTUyLCAweDZCRTIsIDB4NkJFOSwgMHgzODVGLA0KLSAgICAweDZCRUEsIDB4NkJFQSwgMHgxOTU0LCAweDZCRUIsIDB4NkJFQiwgMHgwNzc4LCAweDZCRUMsIDB4NkJFRSwgMHgzODY3LA0KLSAgICAweDZCRUYsIDB4NkJFRiwgMHgwRTBELCAweDZCRjAsIDB4NkJGMiwgMHgzODZBLCAweDZCRjMsIDB4NkJGMywgMHgxOTU1LA0KLSAgICAweDZCRjQsIDB4NkJGNCwgMHgzODZELCAweDZCRjUsIDB4NkJGNSwgMHgxOTU3LCAweDZCRjYsIDB4NkJGOCwgMHgzODZFLA0KLSAgICAweDZCRjksIDB4NkJGOSwgMHgxOTU4LCAweDZCRkEsIDB4NkJGQywgMHgzODcxLCAweDZCRkQsIDB4NkJGRCwgMHgxOTU2LA0KLSAgICAweDZCRkUsIDB4NkJGRSwgMHgzODc0LCAweDZCRkYsIDB4NkJGRiwgMHgyNEMwLCAweDZDMDAsIDB4NkMwNCwgMHgzODc1LA0KLSAgICAweDZDMDUsIDB4NkMwNSwgMHgxOTU5LCAweDZDMDYsIDB4NkMwNiwgMHgxOTVCLCAweDZDMDcsIDB4NkMwNywgMHgxOTVBLA0KLSAgICAweDZDMDgsIDB4NkMwOCwgMHgyMjZELCAweDZDMDksIDB4NkMwQiwgMHgzODdBLCAweDZDMEMsIDB4NkMwQywgMHgyNEMxLA0KLSAgICAweDZDMEQsIDB4NkMwRCwgMHgxOTVDLCAweDZDMEUsIDB4NkMwRSwgMHgzODdELCAweDZDMEYsIDB4NkMwRiwgMHgwRDY2LA0KLSAgICAweDZDMTAsIDB4NkMxMCwgMHgxMjZCLCAweDZDMTEsIDB4NkMxMSwgMHgwQUY2LCAweDZDMTIsIDB4NkMxMiwgMHgzODdFLA0KLSAgICAweDZDMTMsIDB4NkMxMywgMHgwQUFBLCAweDZDMTQsIDB4NkMxNCwgMHgwQzE3LCAweDZDMTUsIDB4NkMxNSwgMHgxOTVELA0KLSAgICAweDZDMTYsIDB4NkMxNiwgMHgwQjJELCAweDZDMTcsIDB4NkMxNywgMHgzODdGLCAweDZDMTgsIDB4NkMxQSwgMHgxOTVFLA0KLSAgICAweDZDMUIsIDB4NkMxQiwgMHgwNjcyLCAweDZDMUMsIDB4NkMxRSwgMHgzODgwLCAweDZDMUYsIDB4NkMxRiwgMHgwNjk3LA0KLSAgICAweDZDMjAsIDB4NkMyMCwgMHgzODgzLCAweDZDMjEsIDB4NkMyMSwgMHgxOTYxLCAweDZDMjIsIDB4NkMyMiwgMHgwQzVGLA0KLSAgICAweDZDMjMsIDB4NkMyMywgMHgyMENBLCAweDZDMjQsIDB4NkMyNCwgMHgxOTYzLCAweDZDMjUsIDB4NkMyNSwgMHgzODg0LA0KLSAgICAweDZDMjYsIDB4NkMyNiwgMHgwNzVCLCAweDZDMjcsIDB4NkMyNywgMHgxMDFFLCAweDZDMjgsIDB4NkMyOCwgMHgwM0JDLA0KLSAgICAweDZDMjksIDB4NkMyOSwgMHgxOTYyLCAweDZDMkEsIDB4NkMyQSwgMHgxOTY0LCAweDZDMkIsIDB4NkMyQiwgMHgyMEU3LA0KLSAgICAweDZDMkMsIDB4NkMyQywgMHgyNEMyLCAweDZDMkQsIDB4NkMyRCwgMHgzODg1LCAweDZDMkUsIDB4NkMyRSwgMHgwNThCLA0KLSAgICAweDZDMkYsIDB4NkMyRiwgMHgwQTZGLCAweDZDMzAsIDB4NkMzMCwgMHgwQzY1LCAweDZDMzEsIDB4NkMzMSwgMHgzODg2LA0KLSAgICAweDZDMzIsIDB4NkMzMiwgMHgxOTY1LCAweDZDMzMsIDB4NkMzMywgMHgzODg3LCAweDZDMzQsIDB4NkMzNCwgMHgwREEzLA0KLSAgICAweDZDMzUsIDB4NkMzNSwgMHgxNjlGLCAweDZDMzYsIDB4NkMzNywgMHgzODg4LCAweDZDMzgsIDB4NkMzOCwgMHgxMEE1LA0KLSAgICAweDZDMzksIDB4NkMzQywgMHgzODhBLCAweDZDM0QsIDB4NkMzRCwgMHgxMkVGLCAweDZDM0UsIDB4NkMzRiwgMHgzODhFLA0KLSAgICAweDZDNDAsIDB4NkM0MCwgMHgwRTUyLCAweDZDNDEsIDB4NkM0MSwgMHgxMUFDLCAweDZDNDIsIDB4NkM0MiwgMHgwQzcwLA0KLSAgICAweDZDNDMsIDB4NkM0NSwgMHgzODkwLCAweDZDNDYsIDB4NkM0NiwgMHgxMkY0LCAweDZDNDcsIDB4NkM0NywgMHgwN0Y4LA0KLSAgICAweDZDNDgsIDB4NkM0OCwgMHgzODkzLCAweDZDNDksIDB4NkM0OSwgMHgwNzcxLCAweDZDNEEsIDB4NkM0QSwgMHgxNkEyLA0KLSAgICAweDZDNEIsIDB4NkM0RiwgMHgzODk0LCAweDZDNTAsIDB4NkM1MCwgMHgwRjE4LCAweDZDNTEsIDB4NkM1MywgMHgzODk5LA0KLSAgICAweDZDNTQsIDB4NkM1NCwgMHgxNkEwLCAweDZDNTUsIDB4NkM1NSwgMHgwRDAwLCAweDZDNTYsIDB4NkM1NiwgMHgzODlDLA0KLSAgICAweDZDNTcsIDB4NkM1NywgMHgwNzcwLCAweDZDNTgsIDB4NkM1QSwgMHgzODlELCAweDZDNUIsIDB4NkM1QiwgMHgwRkRELA0KLSAgICAweDZDNUMsIDB4NkM1QywgMHgxNkExLCAweDZDNUQsIDB4NkM1RCwgMHgwQ0M1LCAweDZDNUUsIDB4NkM1RSwgMHgwNzA4LA0KLSAgICAweDZDNUYsIDB4NkM1RiwgMHgwODdFLCAweDZDNjAsIDB4NkM2MCwgMHgwNEZELCAweDZDNjEsIDB4NkM2MSwgMHgwRUVBLA0KLSAgICAweDZDNjIsIDB4NkM2MywgMHgzOEEwLCAweDZDNjQsIDB4NkM2NCwgMHgwRTEzLCAweDZDNjUsIDB4NkM2NywgMHgzOEEyLA0KLSAgICAweDZDNjgsIDB4NkM2OSwgMHgxNkE4LCAweDZDNkEsIDB4NkM2QSwgMHgwRUE1LCAweDZDNkIsIDB4NkM2RiwgMHgzOEE1LA0KLSAgICAweDZDNzAsIDB4NkM3MCwgMHgwRTAwLCAweDZDNzEsIDB4NkM3MSwgMHgzOEFBLCAweDZDNzIsIDB4NkM3MiwgMHgwODI2LA0KLSAgICAweDZDNzMsIDB4NkM3MywgMHgzOEFCLCAweDZDNzQsIDB4NkM3NCwgMHgxNkFBLCAweDZDNzUsIDB4NkM3NSwgMHgzOEFDLA0KLSAgICAweDZDNzYsIDB4NkM3NiwgMHgxNkFCLCAweDZDNzcsIDB4NkM3OCwgMHgzOEFELCAweDZDNzksIDB4NkM3OSwgMHgwRkE1LA0KLSAgICAweDZDN0EsIDB4NkM3QywgMHgzOEFGLCAweDZDN0QsIDB4NkM3RCwgMHgwQzFBLCAweDZDN0UsIDB4NkM3RSwgMHgwNjc3LA0KLSAgICAweDZDN0YsIDB4NkM4MCwgMHgzOEIyLCAweDZDODEsIDB4NkM4MSwgMHgwQzVDLCAweDZDODIsIDB4NkM4MiwgMHgxMDUxLA0KLSAgICAweDZDODMsIDB4NkM4MywgMHgwRUU1LCAweDZDODQsIDB4NkM4NCwgMHgzOEI0LCAweDZDODUsIDB4NkM4NSwgMHgxNkE0LA0KLSAgICAweDZDODYsIDB4NkM4NiwgMHgxNkFDLCAweDZDODcsIDB4NkM4NywgMHgzOEI1LCAweDZDODgsIDB4NkM4OCwgMHgwRDJCLA0KLSAgICAweDZDODksIDB4NkM4OSwgMHgwNEU2LCAweDZDOEEsIDB4NkM4QiwgMHgzOEI2LCAweDZDOEMsIDB4NkM4QywgMHgxNkE3LA0KLSAgICAweDZDOEQsIDB4NkM4RSwgMHgzOEI4LCAweDZDOEYsIDB4NkM4RiwgMHgwQzAyLCAweDZDOTAsIDB4NkM5MCwgMHgxNkE1LA0KLSAgICAweDZDOTEsIDB4NkM5MiwgMHgzOEJBLCAweDZDOTMsIDB4NkM5MywgMHgxQTFGLCAweDZDOTQsIDB4NkM5NCwgMHgxNkE2LA0KLSAgICAweDZDOTUsIDB4NkM5OCwgMHgzOEJDLCAweDZDOTksIDB4NkM5OSwgMHgwQ0VDLCAweDZDOUEsIDB4NkM5QSwgMHgzOEMwLA0KLSAgICAweDZDOUIsIDB4NkM5QiwgMHgwQkE3LCAweDZDOUMsIDB4NkM5RSwgMHgzOEMxLCAweDZDOUYsIDB4NkM5RiwgMHgwNzBFLA0KLSAgICAweDZDQTAsIDB4NkNBMCwgMHgzOEM0LCAweDZDQTEsIDB4NkNBMSwgMHgwQUMwLCAweDZDQTIsIDB4NkNBMiwgMHgzOEM1LA0KLSAgICAweDZDQTMsIDB4NkNBMywgMHgxNkEzLCAweDZDQTQsIDB4NkNBNCwgMHgwQjdFLCAweDZDQTUsIDB4NkNBNSwgMHgwOUVELA0KLSAgICAweDZDQTYsIDB4NkNBNiwgMHgwQTgwLCAweDZDQTcsIDB4NkNBNywgMHgwNDlFLCAweDZDQTgsIDB4NkNBOCwgMHgzOEM2LA0KLSAgICAweDZDQTksIDB4NkNBOSwgMHgxNkFELCAweDZDQUEsIDB4NkNBQSwgMHgwN0JCLCAweDZDQUIsIDB4NkNBQiwgMHgwQjEwLA0KLSAgICAweDZDQUMsIDB4NkNBQywgMHgzOEM3LCAweDZDQUQsIDB4NkNBRCwgMHgxNkIwLCAweDZDQUUsIDB4NkNBRSwgMHgwOTA5LA0KLSAgICAweDZDQUYsIDB4NkNCMCwgMHgzOEM4LCAweDZDQjEsIDB4NkNCMSwgMHgxNkJCLCAweDZDQjIsIDB4NkNCMiwgMHgxNkI1LA0KLSAgICAweDZDQjMsIDB4NkNCMywgMHgwNzhBLCAweDZDQjQsIDB4NkNCNywgMHgzOENBLCAweDZDQjgsIDB4NkNCOCwgMHgwNjZELA0KLSAgICAweDZDQjksIDB4NkNCOSwgMHgxMEIyLCAweDZDQkEsIDB4NkNCQSwgMHgzOENFLCAweDZDQkIsIDB4NkNCQiwgMHgxMUNELA0KLSAgICAweDZDQkMsIDB4NkNCQywgMHgxMTc0LCAweDZDQkQsIDB4NkNCRCwgMHgwNzFBLCAweDZDQkUsIDB4NkNCRSwgMHgxMTU1LA0KLSAgICAweDZDQkYsIDB4NkNCRiwgMHgxMDAxLCAweDZDQzAsIDB4NkNDMywgMHgzOENGLCAweDZDQzQsIDB4NkNDNCwgMHgwRjg0LA0KLSAgICAweDZDQzUsIDB4NkNDNSwgMHgwQzczLCAweDZDQzYsIDB4NkNDOCwgMHgzOEQzLCAweDZDQzksIDB4NkNDOSwgMHgwQzg1LA0KLSAgICAweDZDQ0EsIDB4NkNDQSwgMHgwNDdCLCAweDZDQ0IsIDB4NkNDQiwgMHgzOEQ2LCAweDZDQ0MsIDB4NkNDQywgMHgwQURGLA0KLSAgICAweDZDQ0QsIDB4NkNDRiwgMHgzOEQ3LCAweDZDRDAsIDB4NkNEMCwgMHgxNkFFLCAweDZDRDEsIDB4NkNEMiwgMHgzOERBLA0KLSAgICAweDZDRDMsIDB4NkNEMywgMHgxNkJDLCAweDZDRDQsIDB4NkNENCwgMHgxNkFGLCAweDZDRDUsIDB4NkNENSwgMHgwNjQ1LA0KLSAgICAweDZDRDYsIDB4NkNENiwgMHgxNkI3LCAweDZDRDcsIDB4NkNENywgMHgxNkI0LCAweDZDRDgsIDB4NkNEQSwgMHgzOERDLA0KLSAgICAweDZDREIsIDB4NkNEQiwgMHgwNjU3LCAweDZDREMsIDB4NkNERCwgMHgzOERGLCAweDZDREUsIDB4NkNERSwgMHgwQjYzLA0KLSAgICAweDZDREYsIDB4NkNERiwgMHgzOEUxLCAweDZDRTAsIDB4NkNFMCwgMHgxNkI2LCAweDZDRTEsIDB4NkNFMSwgMHgwQjlFLA0KLSAgICAweDZDRTIsIDB4NkNFMiwgMHgwNDZGLCAweDZDRTMsIDB4NkNFMywgMHgwQzFCLCAweDZDRTQsIDB4NkNFNCwgMHgzOEUyLA0KLSAgICAweDZDRTUsIDB4NkNFNSwgMHgwQjQzLCAweDZDRTYsIDB4NkNFNywgMHgzOEUzLCAweDZDRTgsIDB4NkNFOCwgMHgxMUZGLA0KLSAgICAweDZDRTksIDB4NkNFOSwgMHgzOEU1LCAweDZDRUEsIDB4NkNFQSwgMHgwOUNDLCAweDZDRUIsIDB4NkNFQiwgMHgxNkI5LA0KLSAgICAweDZDRUMsIDB4NkNFRCwgMHgzOEU2LCAweDZDRUUsIDB4NkNFRSwgMHgxNkJBLCAweDZDRUYsIDB4NkNFRiwgMHgxNkJELA0KLSAgICAweDZDRjAsIDB4NkNGMCwgMHgwREZDLCAweDZDRjEsIDB4NkNGMSwgMHgxNkIzLCAweDZDRjIsIDB4NkNGMiwgMHgzOEU4LA0KLSAgICAweDZDRjMsIDB4NkNGMywgMHgxMEEzLCAweDZDRjQsIDB4NkNGNCwgMHgzOEU5LCAweDZDRjUsIDB4NkNGNSwgMHgwNDJDLA0KLSAgICAweDZDRjYsIDB4NkNGNiwgMHgxQTIwLCAweDZDRjcsIDB4NkNGOCwgMHgxNkIxLCAweDZDRjksIDB4NkNGOSwgMHgzOEVBLA0KLSAgICAweDZDRkEsIDB4NkNGQSwgMHgxNkI4LCAweDZDRkIsIDB4NkNGQiwgMHgwRjg1LCAweDZDRkMsIDB4NkNGQywgMHgwQkUyLA0KLSAgICAweDZDRkQsIDB4NkNGRCwgMHgxMTM2LCAweDZDRkUsIDB4NkNGRSwgMHgxNkJFLCAweDZDRkYsIDB4NkNGRiwgMHgzOEVCLA0KLSAgICAweDZEMDAsIDB4NkQwMCwgMHgzOEVDLCAweDZEMDEsIDB4NkQwMSwgMHgwOEIxLCAweDZEMDIsIDB4NkQwMywgMHgzOEVELA0KLSAgICAweDZEMDQsIDB4NkQwNCwgMHgxNkM1LCAweDZEMDUsIDB4NkQwNiwgMHgzOEVGLCAweDZEMDcsIDB4NkQwNywgMHgxNkM0LA0KLSAgICAweDZEMDgsIDB4NkQwQSwgMHgzOEYxLCAweDZEMEIsIDB4NkQwQiwgMHgxMDFDLCAweDZEMEMsIDB4NkQwQywgMHgxNkMxLA0KLSAgICAweDZEMEQsIDB4NkQwRCwgMHgzOEY0LCAweDZEMEUsIDB4NkQwRSwgMHgxNkM3LCAweDZEMEYsIDB4NkQxMSwgMHgzOEY1LA0KLSAgICAweDZEMTIsIDB4NkQxMiwgMHgwQ0QyLCAweDZEMTMsIDB4NkQxNiwgMHgzOEY4LCAweDZEMTcsIDB4NkQxNywgMHgwRjIxLA0KLSAgICAweDZEMTgsIDB4NkQxOCwgMHgzOEZDLCAweDZEMTksIDB4NkQxOSwgMHgxNkM2LCAweDZEMUEsIDB4NkQxQSwgMHgxNkNDLA0KLSAgICAweDZEMUIsIDB4NkQxQiwgMHgwQThDLCAweDZEMUMsIDB4NkQxRCwgMHgzOEZELCAweDZEMUUsIDB4NkQxRSwgMHgwNUYzLA0KLSAgICAweDZEMUYsIDB4NkQyNCwgMHgzOEZGLCAweDZEMjUsIDB4NkQyNSwgMHgwOEMzLCAweDZEMjYsIDB4NkQyNiwgMHgzOTA1LA0KLSAgICAweDZEMjcsIDB4NkQyNywgMHgxNkMwLCAweDZEMjgsIDB4NkQyOSwgMHgzOTA2LCAweDZEMkEsIDB4NkQyQSwgMHgwN0EwLA0KLSAgICAweDZEMkIsIDB4NkQyQiwgMHgxNkM4LCAweDZEMkMsIDB4NkQyRCwgMHgzOTA4LCAweDZEMkUsIDB4NkQyRSwgMHgxNkNBLA0KLSAgICAweDZEMkYsIDB4NkQzMCwgMHgzOTBBLCAweDZEMzEsIDB4NkQzMSwgMHgwNjNDLCAweDZEMzIsIDB4NkQzMiwgMHgxMURELA0KLSAgICAweDZEMzMsIDB4NkQzMywgMHgxNkQwLCAweDZEMzQsIDB4NkQzNCwgMHgzOTBDLCAweDZEMzUsIDB4NkQzNSwgMHgxNkNCLA0KLSAgICAweDZEMzYsIDB4NkQzOCwgMHgzOTBELCAweDZEMzksIDB4NkQzOSwgMHgxNkJGLCAweDZEM0EsIDB4NkQzQSwgMHgzOTEwLA0KLSAgICAweDZEM0IsIDB4NkQzQiwgMHgwODAzLCAweDZEM0MsIDB4NkQzQywgMHgwRThFLCAweDZEM0QsIDB4NkQzRCwgMHgwQzFGLA0KLSAgICAweDZEM0UsIDB4NkQzRSwgMHgwQjhBLCAweDZEM0YsIDB4NkQ0MCwgMHgzOTExLCAweDZENDEsIDB4NkQ0MSwgMHgwQTQwLA0KLSAgICAweDZENDIsIDB4NkQ0MiwgMHgzOTEzLCAweDZENDMsIDB4NkQ0MywgMHgxNkMyLCAweDZENDQsIDB4NkQ0NCwgMHgzOTE0LA0KLSAgICAweDZENDUsIDB4NkQ0NSwgMHgwQzMwLCAweDZENDYsIDB4NkQ0NiwgMHgwODdELCAweDZENDcsIDB4NkQ0NywgMHgwODhFLA0KLSAgICAweDZENDgsIDB4NkQ0OCwgMHgxNkMzLCAweDZENDksIDB4NkQ0OSwgMHgzOTE1LCAweDZENEEsIDB4NkQ0QSwgMHgxMjI0LA0KLSAgICAweDZENEIsIDB4NkQ0QiwgMHgwNEE5LCAweDZENEMsIDB4NkQ0QywgMHgzOTE2LCAweDZENEQsIDB4NkQ0RCwgMHgxNkM5LA0KLSAgICAweDZENEUsIDB4NkQ0RSwgMHgwODM2LCAweDZENEYsIDB4NkQ0RiwgMHgxNkNELCAweDZENTAsIDB4NkQ1MCwgMHgzOTE3LA0KLSAgICAweDZENTEsIDB4NkQ1MSwgMHgwODAwLCAweDZENTIsIDB4NkQ1MiwgMHgxNkNFLCAweDZENTMsIDB4NkQ1MywgMHgwQjY5LA0KLSAgICAweDZENTQsIDB4NkQ1NCwgMHgxNkNGLCAweDZENTUsIDB4NkQ1OCwgMHgzOTE4LCAweDZENTksIDB4NkQ1OSwgMHgxMTg0LA0KLSAgICAweDZENUEsIDB4NkQ1QSwgMHgwOTMwLCAweDZENUIsIDB4NkQ1QiwgMHgzOTFDLCAweDZENUMsIDB4NkQ1QywgMHgxNkQ4LA0KLSAgICAweDZENUQsIDB4NkQ1RCwgMHgzOTFELCAweDZENUUsIDB4NkQ1RSwgMHgxNkQ1LCAweDZENUYsIDB4NkQ1RiwgMHgzOTFFLA0KLSAgICAweDZENjAsIDB4NkQ2MCwgMHgxNkQ5LCAweDZENjEsIDB4NkQ2MiwgMHgzOTFGLCAweDZENjMsIDB4NkQ2MywgMHgxNkRCLA0KLSAgICAweDZENjQsIDB4NkQ2NSwgMHgzOTIxLCAweDZENjYsIDB4NkQ2NiwgMHgwQkY1LCAweDZENjcsIDB4NkQ2OCwgMHgzOTIzLA0KLSAgICAweDZENjksIDB4NkQ2OSwgMHgwNzdELCAweDZENkEsIDB4NkQ2QSwgMHgwOUI2LCAweDZENkIsIDB4NkQ2RCwgMHgzOTI1LA0KLSAgICAweDZENkUsIDB4NkQ2RSwgMHgwNjlDLCAweDZENkYsIDB4NkQ2RiwgMHgxNkQyLCAweDZENzAsIDB4NkQ3MywgMHgzOTI4LA0KLSAgICAweDZENzQsIDB4NkQ3NCwgMHgxMEU0LCAweDZENzUsIDB4NkQ3NiwgMHgzOTJDLCAweDZENzcsIDB4NkQ3NywgMHgwNzVBLA0KLSAgICAweDZENzgsIDB4NkQ3OCwgMHgwOENGLCAweDZENzksIDB4NkQ3OSwgMHgyM0RDLCAweDZEN0EsIDB4NkQ3QiwgMHgzOTJFLA0KLSAgICAweDZEN0MsIDB4NkQ3QywgMHgxNkRBLCAweDZEN0QsIDB4NkQ4MSwgMHgzOTMwLCAweDZEODIsIDB4NkQ4MiwgMHgwRTcwLA0KLSAgICAweDZEODMsIDB4NkQ4NCwgMHgzOTM1LCAweDZEODUsIDB4NkQ4NSwgMHgwQjVDLCAweDZEODYsIDB4NkQ4NiwgMHgzOTM3LA0KLSAgICAweDZEODcsIDB4NkQ4NywgMHgyM0RCLCAweDZEODgsIDB4NkQ4OCwgMHgwRjY4LCAweDZEODksIDB4NkQ4OSwgMHgwRDFGLA0KLSAgICAweDZEOEEsIDB4NkQ4QiwgMHgzOTM4LCAweDZEOEMsIDB4NkQ4QywgMHgxMEE0LCAweDZEOEQsIDB4NkQ4RCwgMHgzOTNBLA0KLSAgICAweDZEOEUsIDB4NkQ4RSwgMHgwRjNFLCAweDZEOEYsIDB4NkQ5MCwgMHgzOTNCLCAweDZEOTEsIDB4NkQ5MSwgMHgxNkQxLA0KLSAgICAweDZEOTIsIDB4NkQ5MiwgMHgzOTNELCAweDZEOTMsIDB4NkQ5NCwgMHgxNkQ2LCAweDZEOTUsIDB4NkQ5NSwgMHgwRTNDLA0KLSAgICAweDZEOTYsIDB4NkQ5QSwgMHgzOTNFLCAweDZEOUIsIDB4NkQ5QiwgMHgwRTIxLCAweDZEOUMsIDB4NkQ5QywgMHgzOTQzLA0KLSAgICAweDZEOUQsIDB4NkQ5RCwgMHgwOUJGLCAweDZEOUUsIDB4NkQ5RSwgMHgxNkQzLCAweDZEOUYsIDB4NkQ5RiwgMHgwOUY5LA0KLSAgICAweDZEQTAsIDB4NkRBMCwgMHgxNkQ0LCAweDZEQTEsIDB4NkRBMSwgMHgwRURGLCAweDZEQTIsIDB4NkRBMiwgMHgzOTQ0LA0KLSAgICAweDZEQTMsIDB4NkRBMywgMHgwN0Q2LCAweDZEQTQsIDB4NkRBNCwgMHgwNUI0LCAweDZEQTUsIDB4NkRBNSwgMHgzOTQ1LA0KLSAgICAweDZEQTYsIDB4NkRBNiwgMHgwQ0NFLCAweDZEQTcsIDB4NkRBNywgMHgwODc4LCAweDZEQTgsIDB4NkRBOCwgMHgxMTY4LA0KLSAgICAweDZEQTksIDB4NkRBOSwgMHgwQ0U1LCAweDZEQUEsIDB4NkRBQSwgMHgwNjlELCAweDZEQUIsIDB4NkRBQiwgMHgxNkU4LA0KLSAgICAweDZEQUMsIDB4NkRBRCwgMHgzOTQ2LCAweDZEQUUsIDB4NkRBRSwgMHgxNkVBLCAweDZEQUYsIDB4NkRBRiwgMHgwRkVELA0KLSAgICAweDZEQjAsIDB4NkRCMSwgMHgzOTQ4LCAweDZEQjIsIDB4NkRCMiwgMHgxMDQxLCAweDZEQjMsIDB4NkRCNCwgMHgzOTRBLA0KLSAgICAweDZEQjUsIDB4NkRCNSwgMHgwNzY0LCAweDZEQjYsIDB4NkRCNywgMHgzOTRDLCAweDZEQjgsIDB4NkRCOCwgMHgwNzhCLA0KLSAgICAweDZEQjksIDB4NkRCRSwgMHgzOTRFLCAweDZEQkYsIDB4NkRCRiwgMHgxNkUxLCAweDZEQzAsIDB4NkRDMCwgMHgwNUNFLA0KLSAgICAweDZEQzEsIDB4NkRDMywgMHgzOTU0LCAweDZEQzQsIDB4NkRDNCwgMHgxMjJBLCAweDZEQzUsIDB4NkRDNSwgMHgxNkRFLA0KLSAgICAweDZEQzYsIDB4NkRDNiwgMHgwRjZBLCAweDZEQzcsIDB4NkRDNywgMHgxNkRELCAweDZEQzgsIDB4NkRDQSwgMHgzOTU3LA0KLSAgICAweDZEQ0IsIDB4NkRDQiwgMHgwQTI1LCAweDZEQ0MsIDB4NkRDQywgMHgwRTFELCAweDZEQ0QsIDB4NkREMCwgMHgzOTVBLA0KLSAgICAweDZERDEsIDB4NkREMSwgMHgwRDdFLCAweDZERDIsIDB4NkRENSwgMHgzOTVFLCAweDZERDYsIDB4NkRENiwgMHgwQjNBLA0KLSAgICAweDZERDcsIDB4NkRENywgMHgzOTYyLCAweDZERDgsIDB4NkREOCwgMHgwRTI3LCAweDZERDksIDB4NkREOSwgMHgxNkU2LA0KLSAgICAweDZEREEsIDB4NkREQywgMHgzOTYzLCAweDZEREQsIDB4NkRERCwgMHgxNkU1LCAweDZEREUsIDB4NkRERSwgMHgxNkRGLA0KLSAgICAweDZEREYsIDB4NkRERiwgMHgzOTY2LCAweDZERTAsIDB4NkRFMCwgMHgxNkUyLCAweDZERTEsIDB4NkRFMSwgMHgwNThFLA0KLSAgICAweDZERTIsIDB4NkRFMywgMHgzOTY3LCAweDZERTQsIDB4NkRFNCwgMHgxMEJFLCAweDZERTUsIDB4NkRFNSwgMHgzOTY5LA0KLSAgICAweDZERTYsIDB4NkRFNiwgMHgxNkU0LCAweDZERTcsIDB4NkRFOSwgMHgzOTZBLCAweDZERUEsIDB4NkRFQSwgMHgyMDVFLA0KLSAgICAweDZERUIsIDB4NkRFQiwgMHgxMDgwLCAweDZERUMsIDB4NkRFQywgMHgwNTY2LCAweDZERUQsIDB4NkRFRCwgMHgzOTZELA0KLSAgICAweDZERUUsIDB4NkRFRSwgMHgwN0M5LCAweDZERUYsIDB4NkRGMCwgMHgzOTZFLCAweDZERjEsIDB4NkRGMSwgMHgwRDI3LA0KLSAgICAweDZERjIsIDB4NkRGMiwgMHgzOTcwLCAweDZERjMsIDB4NkRGMywgMHgwNTQxLCAweDZERjQsIDB4NkRGNCwgMHgzOTcxLA0KLSAgICAweDZERjUsIDB4NkRGNSwgMHgyMjQ0LCAweDZERjYsIDB4NkRGNiwgMHgyM0UyLCAweDZERjcsIDB4NkRGNywgMHgwODAxLA0KLSAgICAweDZERjgsIDB4NkRGOCwgMHgzOTcyLCAweDZERjksIDB4NkRGOSwgMHgwRkY2LCAweDZERkEsIDB4NkRGQSwgMHgyMEQ0LA0KLSAgICAweDZERkIsIDB4NkRGQiwgMHgwRTQwLCAweDZERkMsIDB4NkRGQywgMHgxQTIxLCAweDZERkQsIDB4NkRGRiwgMHgzOTczLA0KLSAgICAweDZFMDAsIDB4NkUwNCwgMHgzOTc2LCAweDZFMDUsIDB4NkUwNSwgMHgwQzYyLCAweDZFMDYsIDB4NkUwOSwgMHgzOTdCLA0KLSAgICAweDZFMEEsIDB4NkUwQSwgMHgxMEVCLCAweDZFMEIsIDB4NkUwQiwgMHgzOTdGLCAweDZFMEMsIDB4NkUwQywgMHgxNkU5LA0KLSAgICAweDZFMEQsIDB4NkUwRCwgMHgxMjMyLCAweDZFMEUsIDB4NkUwRSwgMHgxNkUwLCAweDZFMEYsIDB4NkUwRiwgMHgzOTgwLA0KLSAgICAweDZFMTAsIDB4NkUxMCwgMHgwODc2LCAweDZFMTEsIDB4NkUxMSwgMHgxNkUzLCAweDZFMTIsIDB4NkUxMywgMHgzOTgxLA0KLSAgICAweDZFMTQsIDB4NkUxNCwgMHgxMENCLCAweDZFMTUsIDB4NkUxNSwgMHgzOTgzLCAweDZFMTYsIDB4NkUxNiwgMHgxNkU3LA0KLSAgICAweDZFMTcsIDB4NkUxNywgMHgwRDMxLCAweDZFMTgsIDB4NkUxOSwgMHgzOTg0LCAweDZFMUEsIDB4NkUxQSwgMHgxNkRDLA0KLSAgICAweDZFMUIsIDB4NkUxQywgMHgzOTg2LCAweDZFMUQsIDB4NkUxRCwgMHgxMENBLCAweDZFMUUsIDB4NkUxRiwgMHgzOTg4LA0KLSAgICAweDZFMjAsIDB4NkUyMCwgMHgwQzdCLCAweDZFMjEsIDB4NkUyMSwgMHgwNjA4LCAweDZFMjIsIDB4NkUyMiwgMHgzOThBLA0KLSAgICAweDZFMjMsIDB4NkUyMywgMHgxMTNGLCAweDZFMjQsIDB4NkUyNCwgMHgwNDdBLCAweDZFMjUsIDB4NkUyNSwgMHgxNkY1LA0KLSAgICAweDZFMjYsIDB4NkUyNiwgMHgyMTlGLCAweDZFMjcsIDB4NkUyOCwgMHgzOThCLCAweDZFMjksIDB4NkUyOSwgMHgwRUQxLA0KLSAgICAweDZFMkEsIDB4NkUyQSwgMHgzOThELCAweDZFMkIsIDB4NkUyQiwgMHgxNkVCLCAweDZFMkMsIDB4NkUyQywgMHgxRTY2LA0KLSAgICAweDZFMkQsIDB4NkUyRCwgMHgwRUNCLCAweDZFMkUsIDB4NkUyRSwgMHgzOThFLCAweDZFMkYsIDB4NkUyRiwgMHgwNkQ2LA0KLSAgICAweDZFMzAsIDB4NkUzMSwgMHgzOThGLCAweDZFMzIsIDB4NkUzMiwgMHgxNkY0LCAweDZFMzMsIDB4NkUzMywgMHgzOTkxLA0KLSAgICAweDZFMzQsIDB4NkUzNCwgMHgwOTU3LCAweDZFMzUsIDB4NkUzNywgMHgzOTkyLCAweDZFMzgsIDB4NkUzOCwgMHgxMEIzLA0KLSAgICAweDZFMzksIDB4NkUzOSwgMHgzOTk1LCAweDZFM0EsIDB4NkUzQSwgMHgwQUYxLCAweDZFM0IsIDB4NkUzRCwgMHgzOTk2LA0KLSAgICAweDZFM0UsIDB4NkUzRSwgMHgxRjYzLCAweDZFM0YsIDB4NkU0MiwgMHgzOTk5LCAweDZFNDMsIDB4NkU0MywgMHgwQjg5LA0KLSAgICAweDZFNDQsIDB4NkU0NCwgMHgxNkY2LCAweDZFNDUsIDB4NkU0QywgMHgzOTlELCAweDZFNEQsIDB4NkU0RCwgMHgwRTc1LA0KLSAgICAweDZFNEUsIDB4NkU0RSwgMHgxNkVELCAweDZFNEYsIDB4NkU1MiwgMHgzOUE1LCAweDZFNTMsIDB4NkU1NCwgMHgxNkYyLA0KLSAgICAweDZFNTUsIDB4NkU1NSwgMHgzOUE5LCAweDZFNTYsIDB4NkU1NiwgMHgwN0I1LCAweDZFNTcsIDB4NkU1NywgMHgzOUFBLA0KLSAgICAweDZFNTgsIDB4NkU1OCwgMHgwRjUzLCAweDZFNTksIDB4NkU1QSwgMHgzOUFCLCAweDZFNUIsIDB4NkU1QiwgMHgxMTYwLA0KLSAgICAweDZFNUMsIDB4NkU1RCwgMHgzOUFELCAweDZFNUUsIDB4NkU1RSwgMHgyM0RELCAweDZFNUYsIDB4NkU1RiwgMHgxNkYwLA0KLSAgICAweDZFNjAsIDB4NkU2QSwgMHgzOUFGLCAweDZFNkIsIDB4NkU2QiwgMHgxNkVFLCAweDZFNkMsIDB4NkU2RCwgMHgzOUJBLA0KLSAgICAweDZFNkUsIDB4NkU2RSwgMHgxNkVDLCAweDZFNkYsIDB4NkU2RiwgMHgyMTZCLCAweDZFNzAsIDB4NkU3RCwgMHgzOUJDLA0KLSAgICAweDZFN0UsIDB4NkU3RSwgMHgwRTk2LCAweDZFN0YsIDB4NkU3RiwgMHgwRDQxLCAweDZFODAsIDB4NkU4MiwgMHgzOUNBLA0KLSAgICAweDZFODMsIDB4NkU4MywgMHgwOThFLCAweDZFODQsIDB4NkU4NCwgMHgzOUNELCAweDZFODUsIDB4NkU4NSwgMHgwODc3LA0KLSAgICAweDZFODYsIDB4NkU4NiwgMHgxNkYxLCAweDZFODcsIDB4NkU4OCwgMHgzOUNFLCAweDZFODksIDB4NkU4OSwgMHgwNkMzLA0KLSAgICAweDZFOEEsIDB4NkU4RSwgMHgzOUQwLCAweDZFOEYsIDB4NkU4RiwgMHgxNzA1LCAweDZFOTAsIDB4NkU5MCwgMHgxMEY3LA0KLSAgICAweDZFOTEsIDB4NkU5NSwgMHgzOUQ1LCAweDZFOTYsIDB4NkU5NiwgMHgyMkI1LCAweDZFOTcsIDB4NkU5NywgMHgzOURBLA0KLSAgICAweDZFOTgsIDB4NkU5OCwgMHgxNkY5LCAweDZFOTksIDB4NkU5QiwgMHgzOURCLCAweDZFOUMsIDB4NkU5QywgMHgwQTM4LA0KLSAgICAweDZFOUQsIDB4NkU5RCwgMHgxRjI2LCAweDZFOUUsIDB4NkU5RSwgMHgzOURFLCAweDZFOUYsIDB4NkU5RiwgMHgxNzA3LA0KLSAgICAweDZFQTAsIDB4NkVBMSwgMHgzOURGLCAweDZFQTIsIDB4NkVBMiwgMHgxMDZFLCAweDZFQTMsIDB4NkVBNCwgMHgzOUUxLA0KLSAgICAweDZFQTUsIDB4NkVBNSwgMHgxNkZELCAweDZFQTYsIDB4NkVBNiwgMHgzOUUzLCAweDZFQTcsIDB4NkVBNywgMHgxNkZFLA0KLSAgICAweDZFQTgsIDB4NkVBOSwgMHgzOUU0LCAweDZFQUEsIDB4NkVBQSwgMHgwRjE3LCAweDZFQUIsIDB4NkVBRSwgMHgzOUU2LA0KLSAgICAweDZFQUYsIDB4NkVBRiwgMHgwREQyLCAweDZFQjAsIDB4NkVCMCwgMHgzOUVBLCAweDZFQjEsIDB4NkVCMSwgMHgxNkY4LA0KLSAgICAweDZFQjIsIDB4NkVCMiwgMHgxNkVGLCAweDZFQjMsIDB4NkVCMywgMHgzOUVCLCAweDZFQjQsIDB4NkVCNCwgMHgxNzAzLA0KLSAgICAweDZFQjUsIDB4NkVCNSwgMHgzOUVDLCAweDZFQjYsIDB4NkVCNiwgMHgwQ0I3LCAweDZFQjcsIDB4NkVCNywgMHgxNzAxLA0KLSAgICAweDZFQjgsIDB4NkVCOSwgMHgzOUVELCAweDZFQkEsIDB4NkVCQSwgMHgwQjRBLCAweDZFQkIsIDB4NkVCQiwgMHgxNzAwLA0KLSAgICAweDZFQkMsIDB4NkVCQywgMHgzOUVGLCAweDZFQkQsIDB4NkVCRCwgMHgxNkZGLCAweDZFQkUsIDB4NkVDMCwgMHgzOUYwLA0KLSAgICAweDZFQzEsIDB4NkVDMSwgMHgwNTIxLCAweDZFQzIsIDB4NkVDMiwgMHgxNzA2LCAweDZFQzMsIDB4NkVDMywgMHgzOUYzLA0KLSAgICAweDZFQzQsIDB4NkVDNCwgMHgxRTYzLCAweDZFQzUsIDB4NkVDNSwgMHgyMDg4LCAweDZFQzYsIDB4NkVDNiwgMHgzOUY0LA0KLSAgICAweDZFQzcsIDB4NkVDNywgMHgwNUMyLCAweDZFQzgsIDB4NkVDQSwgMHgzOUY1LCAweDZFQ0IsIDB4NkVDQiwgMHgxMjI5LA0KLSAgICAweDZFQ0MsIDB4NkVDQywgMHgxRUJELCAweDZFQ0QsIDB4NkVDRCwgMHgzOUY4LCAweDZFQ0UsIDB4NkVDRSwgMHgyMzQxLA0KLSAgICAweDZFQ0YsIDB4NkVDRiwgMHgxNzA0LCAweDZFRDAsIDB4NkVEMCwgMHgzOUY5LCAweDZFRDEsIDB4NkVEMSwgMHgwN0MxLA0KLSAgICAweDZFRDIsIDB4NkVEMiwgMHgzOUZBLCAweDZFRDMsIDB4NkVEMywgMHgxMjJGLCAweDZFRDQsIDB4NkVENCwgMHgwRTIyLA0KLSAgICAweDZFRDUsIDB4NkVENSwgMHgxOUE4LCAweDZFRDYsIDB4NkVENiwgMHgzOUZCLCAweDZFRDcsIDB4NkVENywgMHgxNzAyLA0KLSAgICAweDZFRDgsIDB4NkVEOSwgMHgzOUZDLCAweDZFREEsIDB4NkVEQSwgMHgwNzRGLCAweDZFREIsIDB4NkVERCwgMHgzOUZFLA0KLSAgICAweDZFREUsIDB4NkVERSwgMHgxMUNDLCAweDZFREYsIDB4NkVERiwgMHgxNkY3LCAweDZFRTAsIDB4NkVFMCwgMHgxNkZBLA0KLSAgICAweDZFRTEsIDB4NkVFMSwgMHgwQUExLCAweDZFRTIsIDB4NkVFMiwgMHgxNkZDLCAweDZFRTMsIDB4NkVFMywgMHgzQTAxLA0KLSAgICAweDZFRTQsIDB4NkVFNCwgMHgwQTcyLCAweDZFRTUsIDB4NkVFNSwgMHgwOUFGLCAweDZFRTYsIDB4NkVFNiwgMHgwQTc3LA0KLSAgICAweDZFRTcsIDB4NkVFNywgMHgzQTAyLCAweDZFRTgsIDB4NkVFOCwgMHgwNDVFLCAweDZFRTksIDB4NkVFOSwgMHgwRTA1LA0KLSAgICAweDZFRUEsIDB4NkVFQiwgMHgzQTAzLCAweDZFRUMsIDB4NkVFQywgMHgxRjRCLCAweDZFRUQsIDB4NkVFRSwgMHgzQTA1LA0KLSAgICAweDZFRUYsIDB4NkVFRiwgMHgyMjkyLCAweDZFRjAsIDB4NkVGMSwgMHgzQTA3LCAweDZFRjIsIDB4NkVGMiwgMHgyMTI0LA0KLSAgICAweDZFRjMsIDB4NkVGMywgMHgzQTA5LCAweDZFRjQsIDB4NkVGNCwgMHgwNUFGLCAweDZFRjUsIDB4NkVGNiwgMHgzQTBBLA0KLSAgICAweDZFRjcsIDB4NkVGNywgMHgyMDQ4LCAweDZFRjgsIDB4NkVGOCwgMHgyM0UwLCAweDZFRjksIDB4NkVGOSwgMHgxNzBELA0KLSAgICAweDZFRkEsIDB4NkVGRSwgMHgzQTBDLCAweDZFRkYsIDB4NkVGRiwgMHgyMDc3LCAweDZGMDAsIDB4NkYwMCwgMHgzQTExLA0KLSAgICAweDZGMDEsIDB4NkYwMSwgMHgyMjNBLCAweDZGMDIsIDB4NkYwMiwgMHgwQkNFLCAweDZGMDMsIDB4NkYwNSwgMHgzQTEyLA0KLSAgICAweDZGMDYsIDB4NkYwNiwgMHgwQzAwLCAweDZGMDcsIDB4NkYwOCwgMHgzQTE1LCAweDZGMDksIDB4NkYwOSwgMHgxNzEzLA0KLSAgICAweDZGMEEsIDB4NkYwRSwgMHgzQTE3LCAweDZGMEYsIDB4NkYwRiwgMHgwQTUwLCAweDZGMTAsIDB4NkYxMiwgMHgzQTFDLA0KLSAgICAweDZGMTMsIDB4NkYxMywgMHgwOUQ3LCAweDZGMTQsIDB4NkYxNCwgMHgxMDA2LCAweDZGMTUsIDB4NkYxNSwgMHgxNzBDLA0KLSAgICAweDZGMTYsIDB4NkYxOSwgMHgzQTFGLCAweDZGMUEsIDB4NkYxQSwgMHgyMEIxLCAweDZGMUIsIDB4NkYxRiwgMHgzQTIzLA0KLSAgICAweDZGMjAsIDB4NkYyMCwgMHgwQjExLCAweDZGMjEsIDB4NkYyMSwgMHgzQTI4LCAweDZGMjIsIDB4NkYyMiwgMHgxRjQxLA0KLSAgICAweDZGMjMsIDB4NkYyMywgMHgyMDFDLCAweDZGMjQsIDB4NkYyNCwgMHgxNzBCLCAweDZGMjUsIDB4NkYyOCwgMHgzQTI5LA0KLSAgICAweDZGMjksIDB4NkYyOSwgMHgxNzE0LCAweDZGMkEsIDB4NkYyQSwgMHgxNzEyLCAweDZGMkIsIDB4NkYyQiwgMHgwQUE1LA0KLSAgICAweDZGMkMsIDB4NkYyQywgMHgyMkI4LCAweDZGMkQsIDB4NkYyRCwgMHgxNkZCLCAweDZGMkUsIDB4NkYyRSwgMHgzQTJELA0KLSAgICAweDZGMkYsIDB4NkYyRiwgMHgxNzBFLCAweDZGMzAsIDB4NkYzMCwgMHgzQTJFLCAweDZGMzEsIDB4NkYzMSwgMHgwRDk1LA0KLSAgICAweDZGMzIsIDB4NkYzMiwgMHgyMjc2LCAweDZGMzMsIDB4NkYzMywgMHgxMTY1LCAweDZGMzQsIDB4NkYzNSwgMHgzQTJGLA0KLSAgICAweDZGMzYsIDB4NkYzNiwgMHgxNzBGLCAweDZGMzcsIDB4NkYzNywgMHgzQTMxLCAweDZGMzgsIDB4NkYzOCwgMHgxRjlCLA0KLSAgICAweDZGMzksIDB4NkYzRCwgMHgzQTMyLCAweDZGM0UsIDB4NkYzRSwgMHgxMDIzLCAweDZGM0YsIDB4NkYzRiwgMHgxRjlGLA0KLSAgICAweDZGNDAsIDB4NkY0MCwgMHgzQTM3LCAweDZGNDEsIDB4NkY0MSwgMHgyNUNBLCAweDZGNDIsIDB4NkY0NSwgMHgzQTM4LA0KLSAgICAweDZGNDYsIDB4NkY0NywgMHgxNzA5LCAweDZGNDgsIDB4NkY0QSwgMHgzQTNDLCAweDZGNEIsIDB4NkY0QiwgMHgxNzEwLA0KLSAgICAweDZGNEMsIDB4NkY0QywgMHgzQTNGLCAweDZGNEQsIDB4NkY0RCwgMHgwRUJBLCAweDZGNEUsIDB4NkY1MCwgMHgzQTQwLA0KLSAgICAweDZGNTEsIDB4NkY1MSwgMHgyMEJFLCAweDZGNTIsIDB4NkY1MywgMHgzQTQzLCAweDZGNTQsIDB4NkY1NCwgMHgxRkI0LA0KLSAgICAweDZGNTUsIDB4NkY1NywgMHgzQTQ1LCAweDZGNTgsIDB4NkY1OCwgMHgwQjhDLCAweDZGNTksIDB4NkY1OSwgMHgyM0Q3LA0KLSAgICAweDZGNUEsIDB4NkY1QiwgMHgzQTQ4LCAweDZGNUMsIDB4NkY1QywgMHgwQzJFLCAweDZGNUQsIDB4NkY1RCwgMHgzQTRBLA0KLSAgICAweDZGNUUsIDB4NkY1RSwgMHgwQTYxLCAweDZGNUYsIDB4NkY2MSwgMHgzQTRCLCAweDZGNjIsIDB4NkY2MiwgMHgxNzA4LA0KLSAgICAweDZGNjMsIDB4NkY2MywgMHgzQTRFLCAweDZGNjQsIDB4NkY2NCwgMHgyMTA1LCAweDZGNjUsIDB4NkY2NSwgMHgzQTRGLA0KLSAgICAweDZGNjYsIDB4NkY2NiwgMHgwQTEzLCAweDZGNjcsIDB4NkY2QywgMHgzQTUwLCAweDZGNkQsIDB4NkY2RCwgMHgwRTA5LA0KLSAgICAweDZGNkUsIDB4NkY2RSwgMHgwNEQ2LCAweDZGNkYsIDB4NkY2RiwgMHgyM0UxLCAweDZGNzAsIDB4NkY3MCwgMHgxRkVDLA0KLSAgICAweDZGNzEsIDB4NkY3MSwgMHgzQTU2LCAweDZGNzIsIDB4NkY3MiwgMHgxNzE5LCAweDZGNzMsIDB4NkY3MywgMHgzQTU3LA0KLSAgICAweDZGNzQsIDB4NkY3NCwgMHgxNzExLCAweDZGNzUsIDB4NkY3NiwgMHgzQTU4LCAweDZGNzcsIDB4NkY3NywgMHgyM0VBLA0KLSAgICAweDZGNzgsIDB4NkY3OCwgMHgxNzE4LCAweDZGNzksIDB4NkY3OSwgMHgzQTVBLCAweDZGN0EsIDB4NkY3QSwgMHgxNzFCLA0KLSAgICAweDZGN0IsIDB4NkY3QiwgMHgzQTVCLCAweDZGN0MsIDB4NkY3QywgMHgxNzFBLCAweDZGN0QsIDB4NkY3RSwgMHgzQTVDLA0KLSAgICAweDZGN0YsIDB4NkY3RiwgMHgyM0UzLCAweDZGODAsIDB4NkY4MCwgMHgyMTBFLCAweDZGODEsIDB4NkY4MywgMHgzQTVFLA0KLSAgICAweDZGODQsIDB4NkY4NCwgMHgwNEYzLCAweDZGODUsIDB4NkY4NSwgMHgzQTYxLCAweDZGODYsIDB4NkY4NiwgMHgxRkE2LA0KLSAgICAweDZGODcsIDB4NkY4NywgMHgyMDA0LCAweDZGODgsIDB4NkY4OCwgMHgwNERGLCAweDZGODksIDB4NkY4OSwgMHgxNzE1LA0KLSAgICAweDZGOEEsIDB4NkY4QiwgMHgzQTYyLCAweDZGOEMsIDB4NkY4QywgMHgxNzE3LCAweDZGOEQsIDB4NkY4RCwgMHgxNzE2LA0KLSAgICAweDZGOEUsIDB4NkY4RSwgMHgwQkFELCAweDZGOEYsIDB4NkY5NiwgMHgzQTY0LCAweDZGOTcsIDB4NkY5NywgMHgxRjlELA0KLSAgICAweDZGOTgsIDB4NkY5QiwgMHgzQTZDLCAweDZGOUMsIDB4NkY5QywgMHgwOUE4LCAweDZGOUQsIDB4NkY5RiwgMHgzQTcwLA0KLSAgICAweDZGQTAsIDB4NkZBMCwgMHgyM0U1LCAweDZGQTEsIDB4NkZBMSwgMHgxMTJCLCAweDZGQTIsIDB4NkZBMywgMHgzQTczLA0KLSAgICAweDZGQTQsIDB4NkZBNCwgMHgyMjY0LCAweDZGQTUsIDB4NkZBNiwgMHgzQTc1LCAweDZGQTcsIDB4NkZBNywgMHgxNzFFLA0KLSAgICAweDZGQTgsIDB4NkZBOCwgMHgzQTc3LCAweDZGQTksIDB4NkZBOSwgMHgyNEUyLCAweDZGQUEsIDB4NkZBRCwgMHgzQTc4LA0KLSAgICAweDZGQUUsIDB4NkZBRSwgMHgyM0RFLCAweDZGQUYsIDB4NkZCMCwgMHgzQTdDLCAweDZGQjEsIDB4NkZCMSwgMHgxRUM0LA0KLSAgICAweDZGQjIsIDB4NkZCMiwgMHgzQTdFLCAweDZGQjMsIDB4NkZCMywgMHgwM0NGLCAweDZGQjQsIDB4NkZCNSwgMHgzQTdGLA0KLSAgICAweDZGQjYsIDB4NkZCNiwgMHgxNzIwLCAweDZGQjcsIDB4NkZCOCwgMHgzQTgxLCAweDZGQjksIDB4NkZCOSwgMHgxNzFGLA0KLSAgICAweDZGQkEsIDB4NkZCRiwgMHgzQTgzLCAweDZGQzAsIDB4NkZDMCwgMHgwODE3LCAweDZGQzEsIDB4NkZDMSwgMHgyMkI2LA0KLSAgICAweDZGQzIsIDB4NkZDMiwgMHgxNzIxLCAweDZGQzMsIDB4NkZDMywgMHgyMEE5LCAweDZGQzQsIDB4NkZDOCwgMHgzQTg5LA0KLSAgICAweDZGQzksIDB4NkZDOSwgMHgxNzFELCAweDZGQ0EsIDB4NkZEMCwgMHgzQThFLCAweDZGRDEsIDB4NkZEMSwgMHgxNzFDLA0KLSAgICAweDZGRDIsIDB4NkZEMiwgMHgwNDVELCAweDZGRDMsIDB4NkZENCwgMHgzQTk1LCAweDZGRDUsIDB4NkZENSwgMHgyMTJCLA0KLSAgICAweDZGRDYsIDB4NkZENywgMHgzQTk3LCAweDZGRDgsIDB4NkZEOCwgMHgyMEE1LCAweDZGRDksIDB4NkZEQSwgMHgzQTk5LA0KLSAgICAweDZGREIsIDB4NkZEQiwgMHgyNjhCLCAweDZGREMsIDB4NkZERCwgMHgzQTlCLCAweDZGREUsIDB4NkZERSwgMHgxNzI0LA0KLSAgICAweDZGREYsIDB4NkZERiwgMHgxRjc2LCAweDZGRTAsIDB4NkZFMCwgMHgxNzI1LCAweDZGRTEsIDB4NkZFMSwgMHgxNzIyLA0KLSAgICAweDZGRTIsIDB4NkZFMywgMHgzQTlELCAweDZGRTQsIDB4NkZFNCwgMHgyMTZELCAweDZGRTUsIDB4NkZFQSwgMHgzQTlGLA0KLSAgICAweDZGRUIsIDB4NkZFQiwgMHgyMDAxLCAweDZGRUMsIDB4NkZFRCwgMHgzQUE1LCAweDZGRUUsIDB4NkZFRSwgMHgxNzIzLA0KLSAgICAweDZGRUYsIDB4NkZFRiwgMHgxNzI2LCAweDZGRjAsIDB4NkZGMCwgMHgyMTkxLCAweDZGRjEsIDB4NkZGMSwgMHgxRTUwLA0KLSAgICAweDZGRjIsIDB4NkZGOSwgMHgzQUE3LCAweDZGRkEsIDB4NkZGQSwgMHgxRjlDLCAweDZGRkIsIDB4NkZGQiwgMHgzQUFGLA0KLSAgICAweDZGRkMsIDB4NkZGQywgMHgyM0RBLCAweDZGRkQsIDB4NkZGRCwgMHgzQUIwLCAweDZGRkUsIDB4NkZGRSwgMHgyMDUzLA0KLSAgICAweDZGRkYsIDB4NkZGRiwgMHgzQUIxLCAweDcwMDAsIDB4NzAwNCwgMHgzQUIyLCAweDcwMDUsIDB4NzAwNSwgMHgyM0U5LA0KLSAgICAweDcwMDYsIDB4NzAwNiwgMHgyM0U0LCAweDcwMDcsIDB4NzAwOCwgMHgzQUI3LCAweDcwMDksIDB4NzAwOSwgMHgyMUQ1LA0KLSAgICAweDcwMEEsIDB4NzAwQSwgMHgzQUI5LCAweDcwMEIsIDB4NzAwQiwgMHgyM0U2LCAweDcwMEMsIDB4NzAwRSwgMHgzQUJBLA0KLSAgICAweDcwMEYsIDB4NzAwRiwgMHgyM0RGLCAweDcwMTAsIDB4NzAxMCwgMHgzQUJELCAweDcwMTEsIDB4NzAxMSwgMHgwQkY4LA0KLSAgICAweDcwMTIsIDB4NzAxNCwgMHgzQUJFLCAweDcwMTUsIDB4NzAxNSwgMHgxRTRGLCAweDcwMTYsIDB4NzAxNywgMHgzQUMxLA0KLSAgICAweDcwMTgsIDB4NzAxOCwgMHgyM0Q5LCAweDcwMTksIDB4NzAxOSwgMHgzQUMzLCAweDcwMUEsIDB4NzAxQSwgMHgxNzI3LA0KLSAgICAweDcwMUIsIDB4NzAxQiwgMHgxNzI5LCAweDcwMUMsIDB4NzAxQywgMHgzQUM0LCAweDcwMUQsIDB4NzAxRCwgMHgyMDE0LA0KLSAgICAweDcwMUUsIDB4NzAxRSwgMHgzQUM1LCAweDcwMUYsIDB4NzAxRiwgMHgyM0VDLCAweDcwMjAsIDB4NzAyMCwgMHgyM0VCLA0KLSAgICAweDcwMjEsIDB4NzAyMiwgMHgzQUM2LCAweDcwMjMsIDB4NzAyMywgMHgxNzI4LCAweDcwMjQsIDB4NzAyNiwgMHgzQUM4LA0KLSAgICAweDcwMjcsIDB4NzAyNywgMHgyM0Q4LCAweDcwMjgsIDB4NzAyOCwgMHgyM0VFLCAweDcwMjksIDB4NzAyRiwgMHgzQUNCLA0KLSAgICAweDcwMzAsIDB4NzAzMCwgMHgyNjhFLCAweDcwMzEsIDB4NzAzMSwgMHgzQUQyLCAweDcwMzIsIDB4NzAzMiwgMHgyM0VELA0KLSAgICAweDcwMzMsIDB4NzAzNCwgMHgzQUQzLCAweDcwMzUsIDB4NzAzNSwgMHgxNzJCLCAweDcwMzYsIDB4NzAzOCwgMHgzQUQ1LA0KLSAgICAweDcwMzksIDB4NzAzOSwgMHgxNzJBLCAweDcwM0EsIDB4NzAzRCwgMHgzQUQ4LCAweDcwM0UsIDB4NzAzRSwgMHgxRkZBLA0KLSAgICAweDcwM0YsIDB4NzA0MiwgMHgzQURDLCAweDcwNDMsIDB4NzA0MywgMHgyM0Q2LCAweDcwNDQsIDB4NzA0NCwgMHgyM0U4LA0KLSAgICAweDcwNDUsIDB4NzA0QiwgMHgzQUUwLCAweDcwNEMsIDB4NzA0QywgMHgwNzM5LCAweDcwNEQsIDB4NzA0RSwgMHgzQUU3LA0KLSAgICAweDcwNEYsIDB4NzA0RiwgMHgxNzJDLCAweDcwNTAsIDB4NzA1MCwgMHgzQUU5LCAweDcwNTEsIDB4NzA1MSwgMHgyMTA2LA0KLSAgICAweDcwNTIsIDB4NzA1NCwgMHgzQUVBLCAweDcwNTUsIDB4NzA1NSwgMHgyMDBCLCAweDcwNTYsIDB4NzA1NywgMHgzQUVELA0KLSAgICAweDcwNTgsIDB4NzA1OCwgMHgyMTY2LCAweDcwNTksIDB4NzA1QywgMHgzQUVGLCAweDcwNUQsIDB4NzA1RCwgMHgyM0VGLA0KLSAgICAweDcwNUUsIDB4NzA1RSwgMHgxNzJELCAweDcwNUYsIDB4NzA2MiwgMHgzQUYzLCAweDcwNjMsIDB4NzA2MywgMHgyMTg5LA0KLSAgICAweDcwNjQsIDB4NzA2NCwgMHgyMDU4LCAweDcwNjUsIDB4NzA2NiwgMHgzQUY3LCAweDcwNjcsIDB4NzA2NywgMHgyM0U3LA0KLSAgICAweDcwNjgsIDB4NzA2QSwgMHgzQUY5LCAweDcwNkIsIDB4NzA2QiwgMHgwODA1LCAweDcwNkMsIDB4NzA2QywgMHgxOUVGLA0KLSAgICAweDcwNkQsIDB4NzA2RCwgMHgwQUY1LCAweDcwNkUsIDB4NzA2RSwgMHgzQUZDLCAweDcwNkYsIDB4NzA2RiwgMHgwNUE3LA0KLSAgICAweDcwNzAsIDB4NzA3MCwgMHgwN0U3LCAweDcwNzEsIDB4NzA3NCwgMHgzQUZELCAweDcwNzUsIDB4NzA3NSwgMHgwQTMyLA0KLSAgICAweDcwNzYsIDB4NzA3NiwgMHgxMTMxLCAweDcwNzcsIDB4NzA3NywgMHgzQjAxLCAweDcwNzgsIDB4NzA3OCwgMHgwOEYzLA0KLSAgICAweDcwNzksIDB4NzA3QiwgMHgzQjAyLCAweDcwN0MsIDB4NzA3QywgMHgxMjIzLCAweDcwN0QsIDB4NzA3RCwgMHgzQjA1LA0KLSAgICAweDcwN0UsIDB4NzA3RSwgMHgxMTE5LCAweDcwN0YsIDB4NzA3RiwgMHgwNDlBLCAweDcwODAsIDB4NzA4MCwgMHgxOUNDLA0KLSAgICAweDcwODEsIDB4NzA4NCwgMHgzQjA2LCAweDcwODUsIDB4NzA4NSwgMHgxOTEzLCAweDcwODYsIDB4NzA4OCwgMHgzQjBBLA0KLSAgICAweDcwODksIDB4NzA4OSwgMHgwQTU2LCAweDcwOEEsIDB4NzA4QSwgMHgwNTM5LCAweDcwOEIsIDB4NzA4RCwgMHgzQjBELA0KLSAgICAweDcwOEUsIDB4NzA4RSwgMHgxMDAwLCAweDcwOEYsIDB4NzA5MSwgMHgzQjEwLCAweDcwOTIsIDB4NzA5MiwgMHgwNEQ5LA0KLSAgICAweDcwOTMsIDB4NzA5MywgMHgzQjEzLCAweDcwOTQsIDB4NzA5NCwgMHgwQzhELCAweDcwOTUsIDB4NzA5NSwgMHgwOTQ4LA0KLSAgICAweDcwOTYsIDB4NzA5NiwgMHgxOUNFLCAweDcwOTcsIDB4NzA5OCwgMHgzQjE0LCAweDcwOTksIDB4NzA5OSwgMHgxMUNBLA0KLSAgICAweDcwOUEsIDB4NzA5QiwgMHgzQjE2LCAweDcwOUMsIDB4NzA5QywgMHgxOUNELCAweDcwOUQsIDB4NzA5RCwgMHgxOUNGLA0KLSAgICAweDcwOUUsIDB4NzBBQSwgMHgzQjE4LCAweDcwQUIsIDB4NzBBQiwgMHgxOUQzLCAweDcwQUMsIDB4NzBBQywgMHgwOTE1LA0KLSAgICAweDcwQUQsIDB4NzBBRCwgMHgwRTEyLCAweDcwQUUsIDB4NzBBRSwgMHgwQjlCLCAweDcwQUYsIDB4NzBBRiwgMHgwOEVCLA0KLSAgICAweDcwQjAsIDB4NzBCMCwgMHgzQjI1LCAweDcwQjEsIDB4NzBCMSwgMHgxOUQ0LCAweDcwQjIsIDB4NzBCMiwgMHgzQjI2LA0KLSAgICAweDcwQjMsIDB4NzBCMywgMHgwNDY3LCAweDcwQjQsIDB4NzBCNiwgMHgzQjI3LCAweDcwQjcsIDB4NzBCNywgMHgxOUQyLA0KLSAgICAweDcwQjgsIDB4NzBCOCwgMHgxMTQ5LCAweDcwQjksIDB4NzBCOSwgMHgwNUM0LCAweDcwQkEsIDB4NzBCQSwgMHgzQjJBLA0KLSAgICAweDcwQkIsIDB4NzBCQiwgMHgxOUQwLCAweDcwQkMsIDB4NzBCQywgMHgwOUZGLCAweDcwQkQsIDB4NzBCRCwgMHgwNTA4LA0KLSAgICAweDcwQkUsIDB4NzBCRiwgMHgzQjJCLCAweDcwQzAsIDB4NzBDMCwgMHgxOUQxLCAweDcwQzEsIDB4NzBDMSwgMHgwREFELA0KLSAgICAweDcwQzIsIDB4NzBDMiwgMHgwOUFFLCAweDcwQzMsIDB4NzBDMywgMHgwRTUxLCAweDcwQzQsIDB4NzBDNywgMHgzQjJELA0KLSAgICAweDcwQzgsIDB4NzBDOCwgMHgwQTFCLCAweDcwQzksIDB4NzBDOSwgMHgzQjMxLCAweDcwQ0EsIDB4NzBDQSwgMHgxOUQ2LA0KLSAgICAweDcwQ0IsIDB4NzBDRSwgMHgzQjMyLCAweDcwQ0YsIDB4NzBDRiwgMHgyMUEzLCAweDcwRDAsIDB4NzBENywgMHgzQjM2LA0KLSAgICAweDcwRDgsIDB4NzBEOCwgMHgwNzlELCAweDcwRDksIDB4NzBEOSwgMHgwOUJFLCAweDcwREEsIDB4NzBEQSwgMHgzQjNFLA0KLSAgICAweDcwREIsIDB4NzBEQiwgMHgxMUYxLCAweDcwREMsIDB4NzBERSwgMHgzQjNGLCAweDcwREYsIDB4NzBERiwgMHgwRkY1LA0KLSAgICAweDcwRTAsIDB4NzBFMywgMHgzQjQyLCAweDcwRTQsIDB4NzBFNCwgMHgwOTRCLCAweDcwRTUsIDB4NzBFNSwgMHgzQjQ2LA0KLSAgICAweDcwRTYsIDB4NzBFNiwgMHgwNjUwLCAweDcwRTcsIDB4NzBFNywgMHgwRDBFLCAweDcwRTgsIDB4NzBFOCwgMHgxOUQ1LA0KLSAgICAweDcwRTksIDB4NzBFOSwgMHgwN0Y3LCAweDcwRUEsIDB4NzBFQSwgMHgzQjQ3LCAweDcwRUIsIDB4NzBFQiwgMHgwRTFGLA0KLSAgICAweDcwRUMsIDB4NzBFQywgMHgwOENFLCAweDcwRUQsIDB4NzBFRCwgMHgwQ0EzLCAweDcwRUUsIDB4NzBFRSwgMHgzQjQ4LA0KLSAgICAweDcwRUYsIDB4NzBFRiwgMHgwRjE2LCAweDcwRjAsIDB4NzBGMywgMHgzQjQ5LCAweDcwRjQsIDB4NzBGNCwgMHgyMTdBLA0KLSAgICAweDcwRjUsIDB4NzBGNiwgMHgzQjRELCAweDcwRjcsIDB4NzBGNywgMHgwRTlBLCAweDcwRjgsIDB4NzBGOCwgMHgzQjRGLA0KLSAgICAweDcwRjksIDB4NzBGOSwgMHgwQkFDLCAweDcwRkEsIDB4NzBGQywgMHgzQjUwLCAweDcwRkQsIDB4NzBGRCwgMHgwNjg2LA0KLSAgICAweDcwRkUsIDB4NzBGRiwgMHgzQjUzLCAweDcxMDAsIDB4NzEwOCwgMHgzQjU1LCAweDcxMDksIDB4NzEwOSwgMHgwRkYyLA0KLSAgICAweDcxMEEsIDB4NzEwQSwgMHgwNzZGLCAweDcxMEIsIDB4NzEwRiwgMHgzQjVFLCAweDcxMTAsIDB4NzExMCwgMHgxOUQ3LA0KLSAgICAweDcxMTEsIDB4NzExMiwgMHgzQjYzLCAweDcxMTMsIDB4NzExMywgMHgxOUQ4LCAweDcxMTQsIDB4NzExNCwgMHgzQjY1LA0KLSAgICAweDcxMTUsIDB4NzExNSwgMHgwN0Q1LCAweDcxMTYsIDB4NzExNiwgMHgxOUQ5LCAweDcxMTcsIDB4NzExNywgMHgzQjY2LA0KLSAgICAweDcxMTgsIDB4NzExOCwgMHgxOUYwLCAweDcxMTksIDB4NzExOSwgMHgwNDIzLCAweDcxMUEsIDB4NzExQSwgMHgwNjc2LA0KLSAgICAweDcxMUIsIDB4NzEyMCwgMHgzQjY3LCAweDcxMjEsIDB4NzEyMSwgMHgyMUE1LCAweDcxMjIsIDB4NzEyNSwgMHgzQjZELA0KLSAgICAweDcxMjYsIDB4NzEyNiwgMHgwODhBLCAweDcxMjcsIDB4NzEyRSwgMHgzQjcxLCAweDcxMkYsIDB4NzEyRiwgMHgxOURBLA0KLSAgICAweDcxMzAsIDB4NzEzMCwgMHgxMDBGLCAweDcxMzEsIDB4NzEzMSwgMHgxOURCLCAweDcxMzIsIDB4NzEzNSwgMHgzQjc5LA0KLSAgICAweDcxMzYsIDB4NzEzNiwgMHgwQzk2LCAweDcxMzcsIDB4NzE0NCwgMHgzQjdELCAweDcxNDUsIDB4NzE0NSwgMHgxOURGLA0KLSAgICAweDcxNDYsIDB4NzE0OCwgMHgzQjhCLCAweDcxNDksIDB4NzE0OSwgMHgyMDIyLCAweDcxNEEsIDB4NzE0QSwgMHgxOUUxLA0KLSAgICAweDcxNEIsIDB4NzE0QiwgMHgzQjhFLCAweDcxNEMsIDB4NzE0QywgMHgwN0UyLCAweDcxNEQsIDB4NzE0RCwgMHgzQjhGLA0KLSAgICAweDcxNEUsIDB4NzE0RSwgMHgwODU4LCAweDcxNEYsIDB4NzE1MSwgMHgzQjkwLCAweDcxNTIsIDB4NzE1MiwgMHgyNEQ2LA0KLSAgICAweDcxNTMsIDB4NzE1QiwgMHgzQjkzLCAweDcxNUMsIDB4NzE1QywgMHgxOURELCAweDcxNUQsIDB4NzE1RCwgMHgzQjlDLA0KLSAgICAweDcxNUUsIDB4NzE1RSwgMHgwQ0YwLCAweDcxNUYsIDB4NzE2MSwgMHgzQjlELCAweDcxNjIsIDB4NzE2MiwgMHgyMzNBLA0KLSAgICAweDcxNjMsIDB4NzE2MywgMHgzQkEwLCAweDcxNjQsIDB4NzE2NCwgMHgwQUJGLCAweDcxNjUsIDB4NzE2NSwgMHgzQkExLA0KLSAgICAweDcxNjYsIDB4NzE2NiwgMHgxOUYxLCAweDcxNjcsIDB4NzE2NywgMHgxMTc2LCAweDcxNjgsIDB4NzE2OCwgMHgxOURFLA0KLSAgICAweDcxNjksIDB4NzE2OSwgMHgxRUVFLCAweDcxNkEsIDB4NzE2QiwgMHgzQkEyLCAweDcxNkMsIDB4NzE2QywgMHgyNEQ1LA0KLSAgICAweDcxNkQsIDB4NzE2RCwgMHgzQkE0LCAweDcxNkUsIDB4NzE2RSwgMHgxMUYyLCAweDcxNkYsIDB4NzE3MSwgMHgzQkE1LA0KLSAgICAweDcxNzIsIDB4NzE3MiwgMHgxOUUwLCAweDcxNzMsIDB4NzE3MywgMHgxOURDLCAweDcxNzQsIDB4NzE3NywgMHgzQkE4LA0KLSAgICAweDcxNzgsIDB4NzE3OCwgMHgxOUUyLCAweDcxNzksIDB4NzE3OSwgMHgzQkFDLCAweDcxN0EsIDB4NzE3QSwgMHgxOUUzLA0KLSAgICAweDcxN0IsIDB4NzE3QywgMHgzQkFELCAweDcxN0QsIDB4NzE3RCwgMHgwQ0Y4LCAweDcxN0UsIDB4NzE4MywgMHgzQkFGLA0KLSAgICAweDcxODQsIDB4NzE4NCwgMHgwRjE1LCAweDcxODUsIDB4NzE4OSwgMHgzQkI1LCAweDcxOEEsIDB4NzE4QSwgMHgwRkE3LA0KLSAgICAweDcxOEIsIDB4NzE4RSwgMHgzQkJBLCAweDcxOEYsIDB4NzE4RiwgMHgwRkQ1LCAweDcxOTAsIDB4NzE5MSwgMHgzQkJFLA0KLSAgICAweDcxOTIsIDB4NzE5MiwgMHgyMjI4LCAweDcxOTMsIDB4NzE5MywgMHgzQkMwLCAweDcxOTQsIDB4NzE5NCwgMHgwQ0I2LA0KLSAgICAweDcxOTUsIDB4NzE5NiwgMHgzQkMxLCAweDcxOTcsIDB4NzE5NywgMHgyNEQ3LCAweDcxOTgsIDB4NzE5OCwgMHgxOUU0LA0KLSAgICAweDcxOTksIDB4NzE5OSwgMHgwRjA0LCAweDcxOUEsIDB4NzE5RSwgMHgzQkMzLCAweDcxOUYsIDB4NzE5RiwgMHgwRDgzLA0KLSAgICAweDcxQTAsIDB4NzFBMCwgMHgxOUU4LCAweDcxQTEsIDB4NzFBNywgMHgzQkM4LCAweDcxQTgsIDB4NzFBOCwgMHgxOUU3LA0KLSAgICAweDcxQTksIDB4NzFBQiwgMHgzQkNGLCAweDcxQUMsIDB4NzFBQywgMHgwM0M5LCAweDcxQUQsIDB4NzFCMCwgMHgzQkQyLA0KLSAgICAweDcxQjEsIDB4NzFCMSwgMHgyMEZDLCAweDcxQjIsIDB4NzFCMiwgMHgzQkQ2LCAweDcxQjMsIDB4NzFCMywgMHgxOUU1LA0KLSAgICAweDcxQjQsIDB4NzFCNCwgMHgzQkQ3LCAweDcxQjUsIDB4NzFCNSwgMHgxOUU2LCAweDcxQjYsIDB4NzFCOCwgMHgzQkQ4LA0KLSAgICAweDcxQjksIDB4NzFCOSwgMHgxOUYyLCAweDcxQkEsIDB4NzFCRCwgMHgzQkRCLCAweDcxQkUsIDB4NzFCRSwgMHgxRTg3LA0KLSAgICAweDcxQkYsIDB4NzFDMCwgMHgzQkRGLCAweDcxQzEsIDB4NzFDMSwgMHgyNEQ4LCAweDcxQzIsIDB4NzFDMiwgMHgzQkUxLA0KLSAgICAweDcxQzMsIDB4NzFDMywgMHgwQzk3LCAweDcxQzQsIDB4NzFDNywgMHgzQkUyLCAweDcxQzgsIDB4NzFDOCwgMHgxRUJBLA0KLSAgICAweDcxQzksIDB4NzFDRCwgMHgzQkU2LCAweDcxQ0UsIDB4NzFDRSwgMHgwQTEwLCAweDcxQ0YsIDB4NzFEMSwgMHgzQkVCLA0KLSAgICAweDcxRDIsIDB4NzFEMiwgMHgyMTE5LCAweDcxRDMsIDB4NzFEMywgMHgzQkVFLCAweDcxRDQsIDB4NzFENCwgMHgxOUVBLA0KLSAgICAweDcxRDUsIDB4NzFENSwgMHgxMDA5LCAweDcxRDYsIDB4NzFEOCwgMHgzQkVGLCAweDcxRDksIDB4NzFEOSwgMHgyMTZDLA0KLSAgICAweDcxREEsIDB4NzFEQiwgMHgzQkYyLCAweDcxREMsIDB4NzFEQywgMHgyNEQ5LCAweDcxREQsIDB4NzFERSwgMHgzQkY0LA0KLSAgICAweDcxREYsIDB4NzFERiwgMHgyMjI3LCAweDcxRTAsIDB4NzFFMCwgMHgxOUU5LCAweDcxRTEsIDB4NzFFNCwgMHgzQkY2LA0KLSAgICAweDcxRTUsIDB4NzFFNSwgMHgxMTMyLCAweDcxRTYsIDB4NzFFNiwgMHgxRTVGLCAweDcxRTcsIDB4NzFFNywgMHgxOUVCLA0KLSAgICAweDcxRTgsIDB4NzFFQywgMHgzQkZBLCAweDcxRUQsIDB4NzFFRCwgMHgyMjlGLCAweDcxRUUsIDB4NzFFRSwgMHgxMzk2LA0KLSAgICAweDcxRUYsIDB4NzFGMywgMHgzQkZGLCAweDcxRjQsIDB4NzFGNCwgMHgxRjVELCAweDcxRjUsIDB4NzFGOCwgMHgzQzA0LA0KLSAgICAweDcxRjksIDB4NzFGOSwgMHgxOUVDLCAweDcxRkEsIDB4NzFGQiwgMHgzQzA4LCAweDcxRkMsIDB4NzFGQywgMHgxRkJDLA0KLSAgICAweDcxRkQsIDB4NzFGRCwgMHgzQzBBLCAweDcxRkUsIDB4NzFGRSwgMHgyNERBLCAweDcxRkYsIDB4NzFGRiwgMHgzQzBCLA0KLSAgICAweDcyMDAsIDB4NzIwNSwgMHgzQzBDLCAweDcyMDYsIDB4NzIwNiwgMHgwNDE1LCAweDcyMDcsIDB4NzIwQywgMHgzQzEyLA0KLSAgICAweDcyMEQsIDB4NzIwRCwgMHgyMTQ5LCAweDcyMEUsIDB4NzIwRiwgMHgzQzE4LCAweDcyMTAsIDB4NzIxMCwgMHgyMDQ2LA0KLSAgICAweDcyMTEsIDB4NzIxQSwgMHgzQzFBLCAweDcyMUIsIDB4NzIxQiwgMHgyMDAwLCAweDcyMUMsIDB4NzIxQywgMHgzQzI0LA0KLSAgICAweDcyMUQsIDB4NzIxRCwgMHgxOUVELCAweDcyMUUsIDB4NzIyNywgMHgzQzI1LCAweDcyMjgsIDB4NzIyOCwgMHgxOUVFLA0KLSAgICAweDcyMjksIDB4NzIyOSwgMHgzQzJGLCAweDcyMkEsIDB4NzIyQSwgMHgxMjAzLCAweDcyMkIsIDB4NzIyQiwgMHgzQzMwLA0KLSAgICAweDcyMkMsIDB4NzIyQywgMHgwQjgxLCAweDcyMkQsIDB4NzIyRiwgMHgzQzMxLCAweDcyMzAsIDB4NzIzMCwgMHgxOTZDLA0KLSAgICAweDcyMzEsIDB4NzIzMSwgMHgwM0I5LCAweDcyMzIsIDB4NzIzMiwgMHgyMTkwLCAweDcyMzMsIDB4NzIzNCwgMHgzQzM0LA0KLSAgICAweDcyMzUsIDB4NzIzNSwgMHgwOTIzLCAweDcyMzYsIDB4NzIzNiwgMHgwNkIzLCAweDcyMzcsIDB4NzIzNywgMHgxMDM2LA0KLSAgICAweDcyMzgsIDB4NzIzOCwgMHgwM0UxLCAweDcyMzksIDB4NzIzOSwgMHgwNURBLCAweDcyM0EsIDB4NzIzQSwgMHgyMjA4LA0KLSAgICAweDcyM0IsIDB4NzIzQiwgMHgxMjY5LCAweDcyM0MsIDB4NzIzQywgMHgzQzM2LCAweDcyM0QsIDB4NzIzRCwgMHgwREExLA0KLSAgICAweDcyM0UsIDB4NzIzRSwgMHgxRUU2LCAweDcyM0YsIDB4NzIzRiwgMHgxNjlELCAweDcyNDAsIDB4NzI0NiwgMHgzQzM3LA0KLSAgICAweDcyNDcsIDB4NzI0NywgMHgwQkNCLCAweDcyNDgsIDB4NzI0OCwgMHgwM0YxLCAweDcyNDksIDB4NzI0QiwgMHgzQzNFLA0KLSAgICAweDcyNEMsIDB4NzI0QywgMHgwQjg3LCAweDcyNEQsIDB4NzI0RCwgMHgxOTY5LCAweDcyNEUsIDB4NzI1MSwgMHgzQzQxLA0KLSAgICAweDcyNTIsIDB4NzI1MiwgMHgxOTZBLCAweDcyNTMsIDB4NzI1NSwgMHgzQzQ1LCAweDcyNTYsIDB4NzI1NiwgMHgxOTZCLA0KLSAgICAweDcyNTcsIDB4NzI1NywgMHgzQzQ4LCAweDcyNTgsIDB4NzI1OCwgMHgyNEMzLCAweDcyNTksIDB4NzI1OSwgMHgwRkU5LA0KLSAgICAweDcyNUEsIDB4NzI1QSwgMHgzQzQ5LCAweDcyNUIsIDB4NzI1QiwgMHgwQjY0LCAweDcyNUMsIDB4NzI1QywgMHgzQzRBLA0KLSAgICAweDcyNUQsIDB4NzI1RCwgMHgxOTQ0LCAweDcyNUUsIDB4NzI1RSwgMHgzQzRCLCAweDcyNUYsIDB4NzI1RiwgMHgwQjE1LA0KLSAgICAweDcyNjAsIDB4NzI2MCwgMHgzQzRDLCAweDcyNjEsIDB4NzI2MSwgMHgwQjE4LCAweDcyNjIsIDB4NzI2MiwgMHgwOUI5LA0KLSAgICAweDcyNjMsIDB4NzI2NSwgMHgzQzRELCAweDcyNjYsIDB4NzI2NiwgMHgxOTQ1LCAweDcyNjcsIDB4NzI2NywgMHgwQjI0LA0KLSAgICAweDcyNjgsIDB4NzI2OCwgMHgzQzUwLCAweDcyNjksIDB4NzI2OSwgMHgwRUZFLCAweDcyNkEsIDB4NzI2RCwgMHgzQzUxLA0KLSAgICAweDcyNkUsIDB4NzI2RSwgMHgxOTQyLCAweDcyNkYsIDB4NzI2RiwgMHgxOTQ2LCAweDcyNzAsIDB4NzI3MSwgMHgzQzU1LA0KLSAgICAweDcyNzIsIDB4NzI3MiwgMHgwRDM1LCAweDcyNzMsIDB4NzI3NCwgMHgzQzU3LCAweDcyNzUsIDB4NzI3NSwgMHgwQzIwLA0KLSAgICAweDcyNzYsIDB4NzI3OCwgMHgzQzU5LCAweDcyNzksIDB4NzI3OSwgMHgwRTJCLCAweDcyN0EsIDB4NzI3QSwgMHgwRjBELA0KLSAgICAweDcyN0IsIDB4NzI3QywgMHgzQzVDLCAweDcyN0QsIDB4NzI3RCwgMHgyMENDLCAweDcyN0UsIDB4NzI3RiwgMHgxOTQ3LA0KLSAgICAweDcyODAsIDB4NzI4MCwgMHgwRjE5LCAweDcyODEsIDB4NzI4MSwgMHgwOUQyLCAweDcyODIsIDB4NzI4MywgMHgzQzVFLA0KLSAgICAweDcyODQsIDB4NzI4NCwgMHgxOTQ5LCAweDcyODUsIDB4NzI4OSwgMHgzQzYwLCAweDcyOEEsIDB4NzI4QSwgMHgwNUZFLA0KLSAgICAweDcyOEIsIDB4NzI4QiwgMHgxOTRBLCAweDcyOEMsIDB4NzI4QywgMHgzQzY1LCAweDcyOEQsIDB4NzI4RCwgMHgxOTRCLA0KLSAgICAweDcyOEUsIDB4NzI4RSwgMHgzQzY2LCAweDcyOEYsIDB4NzI4RiwgMHgxOTRDLCAweDcyOTAsIDB4NzI5MSwgMHgzQzY3LA0KLSAgICAweDcyOTIsIDB4NzI5MiwgMHgxOTRELCAweDcyOTMsIDB4NzI5NSwgMHgzQzY5LCAweDcyOTYsIDB4NzI5NiwgMHgyMzQwLA0KLSAgICAweDcyOTcsIDB4NzI5RSwgMHgzQzZDLCAweDcyOUYsIDB4NzI5RiwgMHgxOTQzLCAweDcyQTAsIDB4NzJBMSwgMHgzQzc0LA0KLSAgICAweDcyQTIsIDB4NzJBMiwgMHgxRUQxLCAweDcyQTMsIDB4NzJBNiwgMHgzQzc2LCAweDcyQTcsIDB4NzJBNywgMHgyMUFDLA0KLSAgICAweDcyQTgsIDB4NzJBQiwgMHgzQzdBLCAweDcyQUMsIDB4NzJBQywgMHgwQzg5LCAweDcyQUQsIDB4NzJBRCwgMHgxNUVGLA0KLSAgICAweDcyQUUsIDB4NzJBRSwgMHgzQzdFLCAweDcyQUYsIDB4NzJBRiwgMHgwNjU1LCAweDcyQjAsIDB4NzJCMCwgMHgxNUYwLA0KLSAgICAweDcyQjEsIDB4NzJCMywgMHgzQzdGLCAweDcyQjQsIDB4NzJCNCwgMHgxNUYxLCAweDcyQjUsIDB4NzJCNSwgMHgzQzgyLA0KLSAgICAweDcyQjYsIDB4NzJCNiwgMHgxMjExLCAweDcyQjcsIDB4NzJCOCwgMHgxNUYyLCAweDcyQjksIDB4NzJCOSwgMHgxMEIxLA0KLSAgICAweDcyQkEsIDB4NzJCRiwgMHgzQzgzLCAweDcyQzAsIDB4NzJDMCwgMHgyMkFGLCAweDcyQzEsIDB4NzJDMSwgMHgxNUY1LA0KLSAgICAweDcyQzIsIDB4NzJDMiwgMHgwOTdFLCAweDcyQzMsIDB4NzJDMywgMHgxNUY0LCAweDcyQzQsIDB4NzJDNCwgMHgwNUIzLA0KLSAgICAweDcyQzUsIDB4NzJDNywgMHgzQzg5LCAweDcyQzgsIDB4NzJDOCwgMHgwNDIwLCAweDcyQzksIDB4NzJDQywgMHgzQzhDLA0KLSAgICAweDcyQ0QsIDB4NzJDRCwgMHgxNUY3LCAweDcyQ0UsIDB4NzJDRSwgMHgxNUY2LCAweDcyQ0YsIDB4NzJDRiwgMHgzQzkwLA0KLSAgICAweDcyRDAsIDB4NzJEMCwgMHgwN0IzLCAweDcyRDEsIDB4NzJEMSwgMHgzQzkxLCAweDcyRDIsIDB4NzJEMiwgMHgxNUY4LA0KLSAgICAweDcyRDMsIDB4NzJENiwgMHgzQzkyLCAweDcyRDcsIDB4NzJENywgMHgwNzEwLCAweDcyRDgsIDB4NzJEOCwgMHgzQzk2LA0KLSAgICAweDcyRDksIDB4NzJEOSwgMHgwOTAwLCAweDcyREEsIDB4NzJERCwgMHgzQzk3LCAweDcyREUsIDB4NzJERSwgMHgwQjVGLA0KLSAgICAweDcyREYsIDB4NzJERiwgMHgzQzlCLCAweDcyRTAsIDB4NzJFMCwgMHgwNzk0LCAweDcyRTEsIDB4NzJFMSwgMHgwODk3LA0KLSAgICAweDcyRTIsIDB4NzJFNywgMHgzQzlDLCAweDcyRTgsIDB4NzJFOCwgMHgxNUY5LCAweDcyRTksIDB4NzJFOSwgMHgxNUZCLA0KLSAgICAweDcyRUEsIDB4NzJFQiwgMHgzQ0EyLCAweDcyRUMsIDB4NzJFQywgMHgwNUZGLCAweDcyRUQsIDB4NzJFRCwgMHgwRjJFLA0KLSAgICAweDcyRUUsIDB4NzJFRSwgMHgwRDNGLCAweDcyRUYsIDB4NzJFRiwgMHgxNUZBLCAweDcyRjAsIDB4NzJGMCwgMHgxMTk5LA0KLSAgICAweDcyRjEsIDB4NzJGMSwgMHgxMEUxLCAweDcyRjIsIDB4NzJGMiwgMHgxNUZDLCAweDcyRjMsIDB4NzJGMywgMHgxNjAwLA0KLSAgICAweDcyRjQsIDB4NzJGNCwgMHgxNUZELCAweDcyRjUsIDB4NzJGNiwgMHgzQ0E0LCAweDcyRjcsIDB4NzJGNywgMHgxNUZFLA0KLSAgICAweDcyRjgsIDB4NzJGOCwgMHgwOUQ1LCAweDcyRjksIDB4NzJGOSwgMHgyMUI2LCAweDcyRkEsIDB4NzJGQiwgMHgxNjAyLA0KLSAgICAweDcyRkMsIDB4NzJGQywgMHgwOUIyLCAweDcyRkQsIDB4NzJGRCwgMHgxRTNELCAweDcyRkUsIDB4NzJGRiwgMHgzQ0E2LA0KLSAgICAweDczMDAsIDB4NzMwMCwgMHgzQ0E4LCAweDczMDEsIDB4NzMwMSwgMHgxNUZGLCAweDczMDIsIDB4NzMwMiwgMHgzQ0E5LA0KLSAgICAweDczMDMsIDB4NzMwMywgMHgxNjAxLCAweDczMDQsIDB4NzMwOSwgMHgzQ0FBLCAweDczMEEsIDB4NzMwQSwgMHgxNjA3LA0KLSAgICAweDczMEIsIDB4NzMwRCwgMHgzQ0IwLCAweDczMEUsIDB4NzMwRSwgMHgwQTFELCAweDczMEYsIDB4NzMxMiwgMHgzQ0IzLA0KLSAgICAweDczMTMsIDB4NzMxMywgMHgxNjA1LCAweDczMTQsIDB4NzMxNCwgMHgzQ0I3LCAweDczMTUsIDB4NzMxNSwgMHgxNjBBLA0KLSAgICAweDczMTYsIDB4NzMxNiwgMHgwNEM1LCAweDczMTcsIDB4NzMxNywgMHgxNjA0LCAweDczMTgsIDB4NzMxQSwgMHgzQ0I4LA0KLSAgICAweDczMUIsIDB4NzMxQiwgMHgwQUQyLCAweDczMUMsIDB4NzMxQywgMHgwNDg5LCAweDczMUQsIDB4NzMxRCwgMHgxNjA5LA0KLSAgICAweDczMUUsIDB4NzMxRSwgMHgxNjA4LCAweDczMUYsIDB4NzMyMCwgMHgzQ0JCLCAweDczMjEsIDB4NzMyMSwgMHgxNjA2LA0KLSAgICAweDczMjIsIDB4NzMyMiwgMHgxNjBCLCAweDczMjMsIDB4NzMyNCwgMHgzQ0JELCAweDczMjUsIDB4NzMyNSwgMHgxNjBELA0KLSAgICAweDczMjYsIDB4NzMyOCwgMHgzQ0JGLCAweDczMjksIDB4NzMyOSwgMHgwRjk0LCAweDczMkEsIDB4NzMyQSwgMHgxMUVDLA0KLSAgICAweDczMkIsIDB4NzMyQiwgMHgwQUFELCAweDczMkMsIDB4NzMyQywgMHgxNjBFLCAweDczMkQsIDB4NzMyRCwgMHgzQ0MyLA0KLSAgICAweDczMkUsIDB4NzMyRSwgMHgwRjQ0LCAweDczMkYsIDB4NzMzMCwgMHgzQ0MzLCAweDczMzEsIDB4NzMzMSwgMHgxNjEwLA0KLSAgICAweDczMzIsIDB4NzMzMywgMHgzQ0M1LCAweDczMzQsIDB4NzMzNCwgMHgwN0E2LCAweDczMzUsIDB4NzMzNSwgMHgzQ0M3LA0KLSAgICAweDczMzYsIDB4NzMzNiwgMHgyMjM1LCAweDczMzcsIDB4NzMzNywgMHgxOEQ0LCAweDczMzgsIDB4NzMzOCwgMHgxNjBGLA0KLSAgICAweDczMzksIDB4NzMzOSwgMHgxNjBDLCAweDczM0EsIDB4NzMzQSwgMHgzQ0M4LCAweDczM0IsIDB4NzMzQiwgMHgyMzk3LA0KLSAgICAweDczM0MsIDB4NzMzRCwgMHgzQ0M5LCAweDczM0UsIDB4NzMzRSwgMHgwN0MwLCAweDczM0YsIDB4NzMzRiwgMHgxMEY2LA0KLSAgICAweDczNDAsIDB4NzM0MCwgMHgzQ0NCLCAweDczNDEsIDB4NzM0MSwgMHgyMzk1LCAweDczNDIsIDB4NzM0MywgMHgzQ0NDLA0KLSAgICAweDczNDQsIDB4NzM0NCwgMHgyMjNGLCAweDczNDUsIDB4NzM0NSwgMHgyMTJBLCAweDczNDYsIDB4NzM0QywgMHgzQ0NFLA0KLSAgICAweDczNEQsIDB4NzM0RCwgMHgxNjEyLCAweDczNEUsIDB4NzM0RiwgMHgzQ0Q1LCAweDczNTAsIDB4NzM1MCwgMHgxNjExLA0KLSAgICAweDczNTEsIDB4NzM1MSwgMHgzQ0Q3LCAweDczNTIsIDB4NzM1MiwgMHgxOEQ1LCAweDczNTMsIDB4NzM1NiwgMHgzQ0Q4LA0KLSAgICAweDczNTcsIDB4NzM1NywgMHgxNjEzLCAweDczNTgsIDB4NzM1RiwgMHgzQ0RDLCAweDczNjAsIDB4NzM2MCwgMHgxNjE0LA0KLSAgICAweDczNjEsIDB4NzM2NywgMHgzQ0U0LCAweDczNjgsIDB4NzM2OCwgMHgxRUQyLCAweDczNjksIDB4NzM2OSwgMHgzQ0VCLA0KLSAgICAweDczNkEsIDB4NzM2QSwgMHgyMzk2LCAweDczNkIsIDB4NzM2QiwgMHgyMzk4LCAweDczNkMsIDB4NzM2QywgMHgxNjE1LA0KLSAgICAweDczNkQsIDB4NzM2RCwgMHgwREY0LCAweDczNkUsIDB4NzM2RSwgMHgzQ0VDLCAweDczNkYsIDB4NzM2RiwgMHgxNjE2LA0KLSAgICAweDczNzAsIDB4NzM3MCwgMHgyMEEyLCAweDczNzEsIDB4NzM3MSwgMHgzQ0VELCAweDczNzIsIDB4NzM3MiwgMHgxRjY0LA0KLSAgICAweDczNzMsIDB4NzM3NCwgMHgzQ0VFLCAweDczNzUsIDB4NzM3NSwgMHgyMDJCLCAweDczNzYsIDB4NzM3NiwgMHgzQ0YwLA0KLSAgICAweDczNzcsIDB4NzM3NywgMHgyMzk0LCAweDczNzgsIDB4NzM3OCwgMHgyMTM5LCAweDczNzksIDB4NzM3OSwgMHgzQ0YxLA0KLSAgICAweDczN0EsIDB4NzM3QSwgMHgyMTVGLCAweDczN0IsIDB4NzM3QiwgMHgyMUMxLCAweDczN0MsIDB4NzM3QywgMHgyMzlBLA0KLSAgICAweDczN0QsIDB4NzM3RCwgMHgzQ0YyLCAweDczN0UsIDB4NzM3RSwgMHgxNjE3LCAweDczN0YsIDB4NzM3RiwgMHgzQ0YzLA0KLSAgICAweDczODAsIDB4NzM4MCwgMHgyMzk5LCAweDczODEsIDB4NzM4MywgMHgzQ0Y0LCAweDczODQsIDB4NzM4NCwgMHgwRkM5LA0KLSAgICAweDczODUsIDB4NzM4NiwgMHgzQ0Y3LCAweDczODcsIDB4NzM4NywgMHgwQTcxLCAweDczODgsIDB4NzM4OCwgMHgzQ0Y5LA0KLSAgICAweDczODksIDB4NzM4OSwgMHgxMEQ2LCAweDczOEEsIDB4NzM4QSwgMHgzQ0ZBLCAweDczOEIsIDB4NzM4QiwgMHgwRUE2LA0KLSAgICAweDczOEMsIDB4NzM4RCwgMHgzQ0ZCLCAweDczOEUsIDB4NzM4RSwgMHgxODE4LCAweDczOEYsIDB4NzM5MCwgMHgzQ0ZELA0KLSAgICAweDczOTEsIDB4NzM5MSwgMHgxODE5LCAweDczOTIsIDB4NzM5NSwgMHgzQ0ZGLCAweDczOTYsIDB4NzM5NiwgMHgwOEYwLA0KLSAgICAweDczOTcsIDB4NzM5QSwgMHgzRDAzLCAweDczOUIsIDB4NzM5QiwgMHgwQTkxLCAweDczOUMsIDB4NzM5RSwgMHgzRDA3LA0KLSAgICAweDczOUYsIDB4NzM5RiwgMHgxODFDLCAweDczQTAsIDB4NzNBMSwgMHgzRDBBLCAweDczQTIsIDB4NzNBMiwgMHgxODFCLA0KLSAgICAweDczQTMsIDB4NzNBOCwgMHgzRDBDLCAweDczQTksIDB4NzNBOSwgMHgwRTk3LCAweDczQUEsIDB4NzNBQSwgMHgzRDEyLA0KLSAgICAweDczQUIsIDB4NzNBQiwgMHgwQUJBLCAweDczQUMsIDB4NzNBRCwgMHgzRDEzLCAweDczQUUsIDB4NzNBRSwgMHgxODFBLA0KLSAgICAweDczQUYsIDB4NzNBRiwgMHgwN0NDLCAweDczQjAsIDB4NzNCMCwgMHgwRjQzLCAweDczQjEsIDB4NzNCMSwgMHgzRDE1LA0KLSAgICAweDczQjIsIDB4NzNCMiwgMHgwQTJBLCAweDczQjMsIDB4NzNCMywgMHgxODIxLCAweDczQjQsIDB4NzNCNiwgMHgzRDE2LA0KLSAgICAweDczQjcsIDB4NzNCNywgMHgxODIwLCAweDczQjgsIDB4NzNCOSwgMHgzRDE5LCAweDczQkEsIDB4NzNCQSwgMHgxODJDLA0KLSAgICAweDczQkIsIDB4NzNCQiwgMHgwNDZBLCAweDczQkMsIDB4NzNCRiwgMHgzRDFCLCAweDczQzAsIDB4NzNDMCwgMHgxODIyLA0KLSAgICAweDczQzEsIDB4NzNDMSwgMHgzRDFGLCAweDczQzIsIDB4NzNDMiwgMHgxODFFLCAweDczQzMsIDB4NzNDNywgMHgzRDIwLA0KLSAgICAweDczQzgsIDB4NzNDOCwgMHgxODI0LCAweDczQzksIDB4NzNDOSwgMHgxODIzLCAweDczQ0EsIDB4NzNDQSwgMHgwQ0YzLA0KLSAgICAweDczQ0IsIDB4NzNDQywgMHgzRDI1LCAweDczQ0QsIDB4NzNDRCwgMHgxMTg1LCAweDczQ0UsIDB4NzNDRSwgMHgzRDI3LA0KLSAgICAweDczQ0YsIDB4NzNDRiwgMHgxODFELCAweDczRDAsIDB4NzNEMCwgMHgwNjQ2LCAweDczRDEsIDB4NzNEMSwgMHgxODFGLA0KLSAgICAweDczRDIsIDB4NzNEOCwgMHgzRDI4LCAweDczRDksIDB4NzNEOSwgMHgxODI2LCAweDczREEsIDB4NzNERCwgMHgzRDJGLA0KLSAgICAweDczREUsIDB4NzNERSwgMHgxODJCLCAweDczREYsIDB4NzNERiwgMHgzRDMzLCAweDczRTAsIDB4NzNFMCwgMHgxMUU4LA0KLSAgICAweDczRTEsIDB4NzNFNCwgMHgzRDM0LCAweDczRTUsIDB4NzNFNSwgMHgxODI1LCAweDczRTYsIDB4NzNFNiwgMHgzRDM4LA0KLSAgICAweDczRTcsIDB4NzNFNywgMHgxODJBLCAweDczRTgsIDB4NzNFOCwgMHgzRDM5LCAweDczRTksIDB4NzNFOSwgMHgxODI5LA0KLSAgICAweDczRUEsIDB4NzNFQywgMHgzRDNBLCAweDczRUQsIDB4NzNFRCwgMHgwM0VCLCAweDczRUUsIDB4NzNGMSwgMHgzRDNELA0KLSAgICAweDczRjIsIDB4NzNGMiwgMHgxODJELCAweDczRjMsIDB4NzNGRCwgMHgzRDQxLCAweDczRkUsIDB4NzNGRSwgMHgyMUMwLA0KLSAgICAweDczRkYsIDB4NzNGRiwgMHgzRDRDLCAweDc0MDAsIDB4NzQwMiwgMHgzRDRELCAweDc0MDMsIDB4NzQwMywgMHgwQzZGLA0KLSAgICAweDc0MDQsIDB4NzQwNCwgMHgzRDUwLCAweDc0MDUsIDB4NzQwNSwgMHgwOUIwLCAweDc0MDYsIDB4NzQwNiwgMHgwOUQ4LA0KLSAgICAweDc0MDcsIDB4NzQwOCwgMHgzRDUxLCAweDc0MDksIDB4NzQwOSwgMHgwQTM5LCAweDc0MEEsIDB4NzQwQSwgMHgxODI4LA0KLSAgICAweDc0MEIsIDB4NzQwRSwgMHgzRDUzLCAweDc0MEYsIDB4NzQwRiwgMHgxODJFLCAweDc0MTAsIDB4NzQxMCwgMHgwREVCLA0KLSAgICAweDc0MTEsIDB4NzQxOSwgMHgzRDU3LCAweDc0MUEsIDB4NzQxQSwgMHgxODM4LCAweDc0MUIsIDB4NzQxQiwgMHgxODM3LA0KLSAgICAweDc0MUMsIDB4NzQyMSwgMHgzRDYwLCAweDc0MjIsIDB4NzQyMiwgMHgxMjFFLCAweDc0MjMsIDB4NzQyNCwgMHgzRDY2LA0KLSAgICAweDc0MjUsIDB4NzQyNSwgMHgxODMyLCAweDc0MjYsIDB4NzQyNiwgMHgxODMxLCAweDc0MjcsIDB4NzQyNywgMHgzRDY4LA0KLSAgICAweDc0MjgsIDB4NzQyOCwgMHgxODMzLCAweDc0MjksIDB4NzQyOSwgMHgzRDY5LCAweDc0MkEsIDB4NzQyQSwgMHgxODJGLA0KLSAgICAweDc0MkIsIDB4NzQyQiwgMHgzRDZBLCAweDc0MkMsIDB4NzQyQywgMHgxODM2LCAweDc0MkQsIDB4NzQyRCwgMHgzRDZCLA0KLSAgICAweDc0MkUsIDB4NzQyRSwgMHgxODM1LCAweDc0MkYsIDB4NzQyRiwgMHgzRDZDLCAweDc0MzAsIDB4NzQzMCwgMHgxODM0LA0KLSAgICAweDc0MzEsIDB4NzQzMiwgMHgzRDZELCAweDc0MzMsIDB4NzQzMywgMHgwQTFFLCAweDc0MzQsIDB4NzQzNCwgMHgwQzU2LA0KLSAgICAweDc0MzUsIDB4NzQzNSwgMHgwQkJFLCAweDc0MzYsIDB4NzQzNiwgMHgwQjg0LCAweDc0MzcsIDB4NzQzQiwgMHgzRDZGLA0KLSAgICAweDc0M0MsIDB4NzQzQywgMHgwQzZBLCAweDc0M0QsIDB4NzQzRSwgMHgzRDc0LCAweDc0M0YsIDB4NzQzRiwgMHgyNDYwLA0KLSAgICAweDc0NDAsIDB4NzQ0MCwgMHgzRDc2LCAweDc0NDEsIDB4NzQ0MSwgMHgxODM5LCAweDc0NDIsIDB4NzQ0QSwgMHgzRDc3LA0KLSAgICAweDc0NEIsIDB4NzQ0QiwgMHgyNDVDLCAweDc0NEMsIDB4NzQ1NCwgMHgzRDgwLCAweDc0NTUsIDB4NzQ1NSwgMHgxODNDLA0KLSAgICAweDc0NTYsIDB4NzQ1NiwgMHgzRDg5LCAweDc0NTcsIDB4NzQ1NywgMHgxODNCLCAweDc0NTgsIDB4NzQ1OCwgMHgzRDhBLA0KLSAgICAweDc0NTksIDB4NzQ1OSwgMHgxODNELCAweDc0NUEsIDB4NzQ1QSwgMHgwN0FFLCAweDc0NUIsIDB4NzQ1QiwgMHgxODMwLA0KLSAgICAweDc0NUMsIDB4NzQ1QywgMHgxODNBLCAweDc0NUQsIDB4NzQ1RCwgMHgzRDhCLCAweDc0NUUsIDB4NzQ1RSwgMHgwQ0NCLA0KLSAgICAweDc0NUYsIDB4NzQ1RiwgMHgwQ0UzLCAweDc0NjAsIDB4NzQ2MiwgMHgzRDhDLCAweDc0NjMsIDB4NzQ2MywgMHgyMTVELA0KLSAgICAweDc0NjQsIDB4NzQ2OCwgMHgzRDhGLCAweDc0NjksIDB4NzQ2OSwgMHgyMjI1LCAweDc0NkEsIDB4NzQ2QSwgMHgyMDZBLA0KLSAgICAweDc0NkIsIDB4NzQ2QywgMHgzRDk0LCAweDc0NkQsIDB4NzQ2RCwgMHgxODNGLCAweDc0NkUsIDB4NzQ2RiwgMHgzRDk2LA0KLSAgICAweDc0NzAsIDB4NzQ3MCwgMHgwNzNFLCAweDc0NzEsIDB4NzQ3NSwgMHgzRDk4LCAweDc0NzYsIDB4NzQ3NiwgMHgxMDI3LA0KLSAgICAweDc0NzcsIDB4NzQ3NywgMHgxODNFLCAweDc0NzgsIDB4NzQ3RCwgMHgzRDlELCAweDc0N0UsIDB4NzQ3RSwgMHgxODQwLA0KLSAgICAweDc0N0YsIDB4NzQ3RiwgMHgzREEzLCAweDc0ODAsIDB4NzQ4MSwgMHgxODQzLCAweDc0ODIsIDB4NzQ4MiwgMHgzREE0LA0KLSAgICAweDc0ODMsIDB4NzQ4MywgMHgwOUYwLCAweDc0ODQsIDB4NzQ4NiwgMHgzREE1LCAweDc0ODcsIDB4NzQ4NywgMHgxODQ1LA0KLSAgICAweDc0ODgsIDB4NzQ4OCwgMHgzREE4LCAweDc0ODksIDB4NzQ4OSwgMHgyNDYxLCAweDc0OEEsIDB4NzQ4QSwgMHgzREE5LA0KLSAgICAweDc0OEIsIDB4NzQ4QiwgMHgxODQ2LCAweDc0OEMsIDB4NzQ4RCwgMHgzREFBLCAweDc0OEUsIDB4NzQ4RSwgMHgxODQyLA0KLSAgICAweDc0OEYsIDB4NzQ4RiwgMHgzREFDLCAweDc0OTAsIDB4NzQ5MCwgMHgxODRBLCAweDc0OTEsIDB4NzQ5QiwgMHgzREFELA0KLSAgICAweDc0OUMsIDB4NzQ5QywgMHgxODQxLCAweDc0OUQsIDB4NzQ5RCwgMHgzREI4LCAweDc0OUUsIDB4NzQ5RSwgMHgxODQ3LA0KLSAgICAweDc0OUYsIDB4NzRBMiwgMHgzREI5LCAweDc0QTMsIDB4NzRBMywgMHgyNDVCLCAweDc0QTQsIDB4NzRBNSwgMHgzREJELA0KLSAgICAweDc0QTYsIDB4NzRBNiwgMHgyNDYyLCAweDc0QTcsIDB4NzRBNywgMHgxODRCLCAweDc0QTgsIDB4NzRBOSwgMHgxODQ4LA0KLSAgICAweDc0QUEsIDB4NzRBRiwgMHgzREJGLCAweDc0QjAsIDB4NzRCMCwgMHgxRjU0LCAweDc0QjEsIDB4NzRCOSwgMHgzREM1LA0KLSAgICAweDc0QkEsIDB4NzRCQSwgMHgxODRELCAweDc0QkIsIDB4NzRCQywgMHgzRENFLCAweDc0QkQsIDB4NzRCRCwgMHgyNDVGLA0KLSAgICAweDc0QkUsIDB4NzRDOSwgMHgzREQwLCAweDc0Q0EsIDB4NzRDQSwgMHgyMEVDLCAweDc0Q0IsIDB4NzRDRSwgMHgzRERDLA0KLSAgICAweDc0Q0YsIDB4NzRDRiwgMHgyNDVELCAweDc0RDAsIDB4NzREMSwgMHgzREUwLCAweDc0RDIsIDB4NzREMiwgMHgxODRDLA0KLSAgICAweDc0RDMsIDB4NzREMywgMHgzREUyLCAweDc0RDQsIDB4NzRENCwgMHgyNDYzLCAweDc0RDUsIDB4NzREOSwgMHgzREUzLA0KLSAgICAweDc0REEsIDB4NzREQSwgMHgyNDY0LCAweDc0REIsIDB4NzREQiwgMHgzREU4LCAweDc0REMsIDB4NzREQywgMHgwNzI4LA0KLSAgICAweDc0REQsIDB4NzRERCwgMHgzREU5LCAweDc0REUsIDB4NzRERSwgMHgxQjMyLCAweDc0REYsIDB4NzRERiwgMHgzREVBLA0KLSAgICAweDc0RTAsIDB4NzRFMCwgMHgxQjMzLCAweDc0RTEsIDB4NzRFMSwgMHgzREVCLCAweDc0RTIsIDB4NzRFMiwgMHgwQkNGLA0KLSAgICAweDc0RTMsIDB4NzRFMywgMHgwM0Y1LCAweDc0RTQsIDB4NzRFNCwgMHgwQzlBLCAweDc0RTUsIDB4NzRFNSwgMHgzREVDLA0KLSAgICAweDc0RTYsIDB4NzRFNiwgMHgwRTkwLCAweDc0RTcsIDB4NzRFRCwgMHgzREVELCAweDc0RUUsIDB4NzRFRSwgMHgwRURDLA0KLSAgICAweDc0RUYsIDB4NzRFRiwgMHgxOTAzLCAweDc0RjAsIDB4NzRGMywgMHgzREY0LCAweDc0RjQsIDB4NzRGNCwgMHgxOTA0LA0KLSAgICAweDc0RjUsIDB4NzRGNSwgMHgzREY4LCAweDc0RjYsIDB4NzRGNiwgMHgwQkRFLCAweDc0RjcsIDB4NzRGNywgMHgwNTRDLA0KLSAgICAweDc0RjgsIDB4NzRGRSwgMHgzREY5LCAweDc0RkYsIDB4NzRGRiwgMHgxOTA1LCAweDc1MDAsIDB4NzUwMywgMHgzRTAwLA0KLSAgICAweDc1MDQsIDB4NzUwNCwgMHgxMTg4LCAweDc1MDUsIDB4NzUwQiwgMHgzRTA0LCAweDc1MEMsIDB4NzUwQywgMHgyNEE1LA0KLSAgICAweDc1MEQsIDB4NzUwRCwgMHgxNDg1LCAweDc1MEUsIDB4NzUwRSwgMHgzRTBCLCAweDc1MEYsIDB4NzUwRiwgMHgxOTA2LA0KLSAgICAweDc1MTAsIDB4NzUxMCwgMHgzRTBDLCAweDc1MTEsIDB4NzUxMSwgMHgxOTA3LCAweDc1MTIsIDB4NzUxMiwgMHgzRTBELA0KLSAgICAweDc1MTMsIDB4NzUxMywgMHgxOTA4LCAweDc1MTQsIDB4NzUxNywgMHgzRTBFLCAweDc1MTgsIDB4NzUxOCwgMHgwNkM1LA0KLSAgICAweDc1MTksIDB4NzUxOSwgMHgxNEY4LCAweDc1MUEsIDB4NzUxQSwgMHgwRDJFLCAweDc1MUIsIDB4NzUxQiwgMHgzRTEyLA0KLSAgICAweDc1MUMsIDB4NzUxQywgMHgwRTQzLCAweDc1MUQsIDB4NzUxRSwgMHgzRTEzLCAweDc1MUYsIDB4NzUxRiwgMHgwRDMzLA0KLSAgICAweDc1MjAsIDB4NzUyMiwgMHgzRTE1LCAweDc1MjMsIDB4NzUyMywgMHgxRTcwLCAweDc1MjQsIDB4NzUyNCwgMHgzRTE4LA0KLSAgICAweDc1MjUsIDB4NzUyNSwgMHgwRDM0LCAweDc1MjYsIDB4NzUyNywgMHgzRTE5LCAweDc1MjgsIDB4NzUyOCwgMHgxMEE4LA0KLSAgICAweDc1MjksIDB4NzUyOSwgMHgwRDlCLCAweDc1MkEsIDB4NzUyQSwgMHgzRTFCLCAweDc1MkIsIDB4NzUyQiwgMHgwNkExLA0KLSAgICAweDc1MkMsIDB4NzUyQywgMHgxQjM0LCAweDc1MkQsIDB4NzUyRCwgMHgwNDJCLCAweDc1MkUsIDB4NzUyRSwgMHgzRTFDLA0KLSAgICAweDc1MkYsIDB4NzUyRiwgMHgxNzM0LCAweDc1MzAsIDB4NzUzMCwgMHgwRTQyLCAweDc1MzEsIDB4NzUzMSwgMHgxMEFFLA0KLSAgICAweDc1MzIsIDB4NzUzMiwgMHgwODRBLCAweDc1MzMsIDB4NzUzMywgMHgwRDIzLCAweDc1MzQsIDB4NzUzNCwgMHgzRTFELA0KLSAgICAweDc1MzUsIDB4NzUzNSwgMHgwNUM4LCAweDc1MzYsIDB4NzUzNiwgMHgzRTFFLCAweDc1MzcsIDB4NzUzNywgMHgwQjMzLA0KLSAgICAweDc1MzgsIDB4NzUzOCwgMHgwNUNBLCAweDc1MzksIDB4NzUzOSwgMHgzRTFGLCAweDc1M0EsIDB4NzUzQSwgMHgxQTc4LA0KLSAgICAweDc1M0IsIDB4NzUzQiwgMHgwN0MyLCAweDc1M0MsIDB4NzUzRCwgMHgzRTIwLCAweDc1M0UsIDB4NzUzRSwgMHgxODE2LA0KLSAgICAweDc1M0YsIDB4NzUzRiwgMHgzRTIyLCAweDc1NDAsIDB4NzU0MCwgMHgxQTc5LCAweDc1NDEsIDB4NzU0NCwgMHgzRTIzLA0KLSAgICAweDc1NDUsIDB4NzU0NSwgMHgwNENFLCAweDc1NDYsIDB4NzU0NywgMHgzRTI3LCAweDc1NDgsIDB4NzU0OCwgMHgxQTdDLA0KLSAgICAweDc1NDksIDB4NzU0QSwgMHgzRTI5LCAweDc1NEIsIDB4NzU0QiwgMHgxQTdCLCAweDc1NEMsIDB4NzU0QywgMHgwOEI4LA0KLSAgICAweDc1NEQsIDB4NzU0RCwgMHgzRTJCLCAweDc1NEUsIDB4NzU0RSwgMHgxQTdBLCAweDc1NEYsIDB4NzU0RiwgMHgwRUM2LA0KLSAgICAweDc1NTAsIDB4NzU1MywgMHgzRTJDLCAweDc1NTQsIDB4NzU1NCwgMHgwQjkwLCAweDc1NTUsIDB4NzU1OCwgMHgzRTMwLA0KLSAgICAweDc1NTksIDB4NzU1OSwgMHgwQTNELCAweDc1NUEsIDB4NzU1QSwgMHgxMzlFLCAweDc1NUIsIDB4NzU1QiwgMHgxQTdELA0KLSAgICAweDc1NUMsIDB4NzU1QywgMHgwRkJFLCAweDc1NUQsIDB4NzU1RCwgMHgyMDhGLCAweDc1NUUsIDB4NzU2MSwgMHgzRTM0LA0KLSAgICAweDc1NjIsIDB4NzU2MiwgMHgxRTQyLCAweDc1NjMsIDB4NzU2NCwgMHgzRTM4LCAweDc1NjUsIDB4NzU2NSwgMHgwQTdCLA0KLSAgICAweDc1NjYsIDB4NzU2NiwgMHgwQzA3LCAweDc1NjcsIDB4NzU2OSwgMHgzRTNBLCAweDc1NkEsIDB4NzU2QSwgMHgwNjQ5LA0KLSAgICAweDc1NkIsIDB4NzU2QiwgMHgxRjRFLCAweDc1NkMsIDB4NzU3MSwgMHgzRTNELCAweDc1NzIsIDB4NzU3MiwgMHgxQTdFLA0KLSAgICAweDc1NzMsIDB4NzU3MywgMHgzRTQzLCAweDc1NzQsIDB4NzU3NCwgMHgwNTEwLCAweDc1NzUsIDB4NzU3NSwgMHgzRTQ0LA0KLSAgICAweDc1NzYsIDB4NzU3NiwgMHgxRUIxLCAweDc1NzcsIDB4NzU3NywgMHgzRTQ1LCAweDc1NzgsIDB4NzU3OCwgMHgwODEwLA0KLSAgICAweDc1NzksIDB4NzU3OSwgMHgxQTdGLCAweDc1N0EsIDB4NzU3RSwgMHgzRTQ2LCAweDc1N0YsIDB4NzU3RiwgMHgxODE0LA0KLSAgICAweDc1ODAsIDB4NzU4MiwgMHgzRTRCLCAweDc1ODMsIDB4NzU4MywgMHgxQTgwLCAweDc1ODQsIDB4NzU4NSwgMHgzRTRFLA0KLSAgICAweDc1ODYsIDB4NzU4NiwgMHgwODdGLCAweDc1ODcsIDB4NzU4NywgMHgxRThCLCAweDc1ODgsIDB4NzU4QSwgMHgzRTUwLA0KLSAgICAweDc1OEIsIDB4NzU4QiwgMHgxQkM2LCAweDc1OEMsIDB4NzU4RSwgMHgzRTUzLCAweDc1OEYsIDB4NzU4RiwgMHgwRDdGLA0KLSAgICAweDc1OTAsIDB4NzU5MCwgMHgzRTU2LCAweDc1OTEsIDB4NzU5MSwgMHgxMDUwLCAweDc1OTIsIDB4NzU5MiwgMHgxQjYwLA0KLSAgICAweDc1OTMsIDB4NzU5MywgMHgzRTU3LCAweDc1OTQsIDB4NzU5NCwgMHgxQjYxLCAweDc1OTUsIDB4NzU5NSwgMHgzRTU4LA0KLSAgICAweDc1OTYsIDB4NzU5NiwgMHgxQjYyLCAweDc1OTcsIDB4NzU5NywgMHgwQTBGLCAweDc1OTgsIDB4NzU5OCwgMHgzRTU5LA0KLSAgICAweDc1OTksIDB4NzU5OSwgMHgwNkU4LCAweDc1OUEsIDB4NzU5QSwgMHgwOEZELCAweDc1OUIsIDB4NzU5QywgMHgzRTVBLA0KLSAgICAweDc1OUQsIDB4NzU5RCwgMHgxQjY0LCAweDc1OUUsIDB4NzU5RSwgMHgzRTVDLCAweDc1OUYsIDB4NzU5RiwgMHgwQjcyLA0KLSAgICAweDc1QTAsIDB4NzVBMCwgMHgxQjYzLCAweDc1QTEsIDB4NzVBMSwgMHgxMDFBLCAweDc1QTIsIDB4NzVBMiwgMHgzRTVELA0KLSAgICAweDc1QTMsIDB4NzVBMywgMHgxQjY2LCAweDc1QTQsIDB4NzVBNCwgMHgwM0Q3LCAweDc1QTUsIDB4NzVBNSwgMHgwOEJCLA0KLSAgICAweDc1QTYsIDB4NzVBQSwgMHgzRTVFLCAweDc1QUIsIDB4NzVBQiwgMHgxMDY2LCAweDc1QUMsIDB4NzVBQywgMHgxQjY1LA0KLSAgICAweDc1QUQsIDB4NzVBRCwgMHgzRTYzLCAweDc1QUUsIDB4NzVBRSwgMHgwNTMyLCAweDc1QUYsIDB4NzVBRiwgMHgwNjg1LA0KLSAgICAweDc1QjAsIDB4NzVCMCwgMHgxQjZDLCAweDc1QjEsIDB4NzVCMSwgMHgxQjZCLCAweDc1QjIsIDB4NzVCMiwgMHgwQkMyLA0KLSAgICAweDc1QjMsIDB4NzVCNCwgMHgxQjY3LCAweDc1QjUsIDB4NzVCNSwgMHgwNTQ2LCAweDc1QjYsIDB4NzVCNywgMHgzRTY0LA0KLSAgICAweDc1QjgsIDB4NzVCOCwgMHgxQjY5LCAweDc1QjksIDB4NzVCOSwgMHgxMThGLCAweDc1QkEsIDB4NzVCQiwgMHgzRTY2LA0KLSAgICAweDc1QkMsIDB4NzVCQywgMHgwRTJFLCAweDc1QkQsIDB4NzVCRCwgMHgwOTAxLCAweDc1QkUsIDB4NzVCRSwgMHgwODI1LA0KLSAgICAweDc1QkYsIDB4NzVDMSwgMHgzRTY4LCAweDc1QzIsIDB4NzVDMiwgMHgxQjZFLCAweDc1QzMsIDB4NzVDMywgMHgxQjZELA0KLSAgICAweDc1QzQsIDB4NzVDNCwgMHgxQjZBLCAweDc1QzUsIDB4NzVDNSwgMHgwNDY4LCAweDc1QzYsIDB4NzVDNiwgMHgzRTZCLA0KLSAgICAweDc1QzcsIDB4NzVDNywgMHgxMUExLCAweDc1QzgsIDB4NzVDOCwgMHgxMDlELCAweDc1QzksIDB4NzVDOSwgMHgwOEU2LA0KLSAgICAweDc1Q0EsIDB4NzVDQSwgMHgwQzg3LCAweDc1Q0IsIDB4NzVDQywgMHgzRTZDLCAweDc1Q0QsIDB4NzVDRCwgMHgxQjcwLA0KLSAgICAweDc1Q0UsIDB4NzVEMSwgMHgzRTZFLCAweDc1RDIsIDB4NzVEMiwgMHgxMDIwLCAweDc1RDMsIDB4NzVEMywgMHgzRTcyLA0KLSAgICAweDc1RDQsIDB4NzVENCwgMHgxMUNCLCAweDc1RDUsIDB4NzVENSwgMHgwNzkyLCAweDc1RDYsIDB4NzVENiwgMHgxQjZGLA0KLSAgICAweDc1RDcsIDB4NzVENywgMHgzRTczLCAweDc1RDgsIDB4NzVEOCwgMHgwNUZBLCAweDc1RDksIDB4NzVEOSwgMHgxRkM2LA0KLSAgICAweDc1REEsIDB4NzVEQSwgMHgzRTc0LCAweDc1REIsIDB4NzVEQiwgMHgwRTY1LCAweDc1REMsIDB4NzVERCwgMHgzRTc1LA0KLSAgICAweDc1REUsIDB4NzVERSwgMHgwQkM1LCAweDc1REYsIDB4NzVFMSwgMHgzRTc3LCAweDc1RTIsIDB4NzVFMiwgMHgwOUVBLA0KLSAgICAweDc1RTMsIDB4NzVFMywgMHgxQjcxLCAweDc1RTQsIDB4NzVFNCwgMHgxQjc0LCAweDc1RTUsIDB4NzVFNSwgMHgzRTdBLA0KLSAgICAweDc1RTYsIDB4NzVFNiwgMHgxQjczLCAweDc1RTcsIDB4NzVFNywgMHgxQjc2LCAweDc1RTgsIDB4NzVFOCwgMHgxQjcyLA0KLSAgICAweDc1RTksIDB4NzVFOSwgMHgzRTdCLCAweDc1RUEsIDB4NzVFQSwgMHgwN0QzLCAweDc1RUIsIDB4NzVFQiwgMHgxQjc1LA0KLSAgICAweDc1RUMsIDB4NzVFRiwgMHgzRTdDLCAweDc1RjAsIDB4NzVGMCwgMHgwRTA4LCAweDc1RjEsIDB4NzVGMSwgMHgxQjc4LA0KLSAgICAweDc1RjIsIDB4NzVGMywgMHgzRTgwLCAweDc1RjQsIDB4NzVGNCwgMHgwNEZBLCAweDc1RjUsIDB4NzVGOCwgMHgzRTgyLA0KLSAgICAweDc1RjksIDB4NzVGOSwgMHgwNDNELCAweDc1RkEsIDB4NzVGQiwgMHgzRTg2LCAweDc1RkMsIDB4NzVGQywgMHgxQjc5LA0KLSAgICAweDc1RkQsIDB4NzVGRSwgMHgzRTg4LCAweDc1RkYsIDB4NzVGRiwgMHgxQjdBLCAweDc2MDAsIDB4NzYwMCwgMHgxQjdDLA0KLSAgICAweDc2MDEsIDB4NzYwMSwgMHgwNTY0LCAweDc2MDIsIDB4NzYwMiwgMHgyNUFFLCAweDc2MDMsIDB4NzYwMywgMHgxQjc3LA0KLSAgICAweDc2MDQsIDB4NzYwNCwgMHgzRThBLCAweDc2MDUsIDB4NzYwNSwgMHgxQjdELCAweDc2MDYsIDB4NzYwOSwgMHgzRThCLA0KLSAgICAweDc2MEEsIDB4NzYwQSwgMHgxQjgwLCAweDc2MEIsIDB4NzYwQiwgMHgxRjAxLCAweDc2MEMsIDB4NzYwQywgMHgxQjdFLA0KLSAgICAweDc2MEQsIDB4NzYwRCwgMHgyMjAwLCAweDc2MEUsIDB4NzYwRiwgMHgzRThGLCAweDc2MTAsIDB4NzYxMCwgMHgxQjdCLA0KLSAgICAweDc2MTEsIDB4NzYxNCwgMHgzRTkxLCAweDc2MTUsIDB4NzYxNSwgMHgxQjgzLCAweDc2MTYsIDB4NzYxNiwgMHgzRTk1LA0KLSAgICAweDc2MTcsIDB4NzYxNywgMHgxQjdGLCAweDc2MTgsIDB4NzYxOCwgMHgxQjgyLCAweDc2MTksIDB4NzYxOSwgMHgxQjg0LA0KLSAgICAweDc2MUEsIDB4NzYxQSwgMHgzRTk2LCAweDc2MUIsIDB4NzYxQiwgMHgxQjg1LCAweDc2MUMsIDB4NzYxRCwgMHgzRTk3LA0KLSAgICAweDc2MUUsIDB4NzYxRSwgMHgyNUIyLCAweDc2MUYsIDB4NzYxRiwgMHgwRUQwLCAweDc2MjAsIDB4NzYyMCwgMHgxQjg4LA0KLSAgICAweDc2MjEsIDB4NzYyMSwgMHgxRTk3LCAweDc2MjIsIDB4NzYyMiwgMHgxQjg3LCAweDc2MjMsIDB4NzYyMywgMHgzRTk5LA0KLSAgICAweDc2MjQsIDB4NzYyNCwgMHgwQTNGLCAweDc2MjUsIDB4NzYyNSwgMHgxQjgxLCAweDc2MjYsIDB4NzYyNiwgMHgwRDc0LA0KLSAgICAweDc2MjcsIDB4NzYyNywgMHgyMEFCLCAweDc2MjgsIDB4NzYyOCwgMHgzRTlBLCAweDc2MjksIDB4NzYyOSwgMHgwNTc0LA0KLSAgICAweDc2MkEsIDB4NzYyQSwgMHgwNDVBLCAweDc2MkIsIDB4NzYyQiwgMHgwRTA0LCAweDc2MkMsIDB4NzYyQywgMHgzRTlCLA0KLSAgICAweDc2MkQsIDB4NzYyRCwgMHgxQjhBLCAweDc2MkUsIDB4NzYyRiwgMHgzRTlDLCAweDc2MzAsIDB4NzYzMCwgMHgxQjhCLA0KLSAgICAweDc2MzEsIDB4NzYzMiwgMHgzRTlFLCAweDc2MzMsIDB4NzYzMywgMHgxQjkwLCAweDc2MzQsIDB4NzYzNCwgMHgxMTZGLA0KLSAgICAweDc2MzUsIDB4NzYzNSwgMHgxQjhELCAweDc2MzYsIDB4NzYzNywgMHgzRUEwLCAweDc2MzgsIDB4NzYzOCwgMHgwQzhFLA0KLSAgICAweDc2MzksIDB4NzYzQSwgMHgzRUEyLCAweDc2M0IsIDB4NzYzQiwgMHgyNUIzLCAweDc2M0MsIDB4NzYzQywgMHgxQjg2LA0KLSAgICAweDc2M0QsIDB4NzYzRCwgMHgzRUE0LCAweDc2M0UsIDB4NzYzRSwgMHgxQjhGLCAweDc2M0YsIDB4NzYzRiwgMHgxQjhDLA0KLSAgICAweDc2NDAsIDB4NzY0MCwgMHgxQjg5LCAweDc2NDEsIDB4NzY0MSwgMHgzRUE1LCAweDc2NDIsIDB4NzY0MiwgMHgyMDI4LA0KLSAgICAweDc2NDMsIDB4NzY0MywgMHgxQjhFLCAweDc2NDQsIDB4NzY0NSwgMHgzRUE2LCAweDc2NDYsIDB4NzY0NywgMHgyNUFGLA0KLSAgICAweDc2NDgsIDB4NzY0OCwgMHgzRUE4LCAweDc2NDksIDB4NzY0OSwgMHgyNUIxLCAweDc2NEEsIDB4NzY0QiwgMHgzRUE5LA0KLSAgICAweDc2NEMsIDB4NzY0QywgMHgwM0I0LCAweDc2NEQsIDB4NzY0RCwgMHgxQjkxLCAweDc2NEUsIDB4NzY1MywgMHgzRUFCLA0KLSAgICAweDc2NTQsIDB4NzY1NCwgMHgxQjkzLCAweDc2NTUsIDB4NzY1NSwgMHgzRUIxLCAweDc2NTYsIDB4NzY1NiwgMHgxQjk1LA0KLSAgICAweDc2NTcsIDB4NzY1NywgMHgzRUIyLCAweDc2NTgsIDB4NzY1OCwgMHgyNUFDLCAweDc2NTksIDB4NzY1QiwgMHgzRUIzLA0KLSAgICAweDc2NUMsIDB4NzY1QywgMHgxQjk0LCAweDc2NUQsIDB4NzY1RCwgMHgzRUI2LCAweDc2NUUsIDB4NzY1RSwgMHgxQjkyLA0KLSAgICAweDc2NUYsIDB4NzY1RiwgMHgxRTRFLCAweDc2NjAsIDB4NzY2MSwgMHgzRUI3LCAweDc2NjIsIDB4NzY2MiwgMHgyMjAyLA0KLSAgICAweDc2NjMsIDB4NzY2MywgMHgwRkNCLCAweDc2NjQsIDB4NzY2NCwgMHgyNUFCLCAweDc2NjUsIDB4NzY2NSwgMHgyMjg2LA0KLSAgICAweDc2NjYsIDB4NzY2NiwgMHgzRUI5LCAweDc2NjcsIDB4NzY2NywgMHgyNUFELCAweDc2NjgsIDB4NzY2OCwgMHgzRUJBLA0KLSAgICAweDc2NjksIDB4NzY2OSwgMHgyNUI2LCAweDc2NkEsIDB4NzY2QSwgMHgzRUJCLCAweDc2NkIsIDB4NzY2QiwgMHgxQjk2LA0KLSAgICAweDc2NkMsIDB4NzY2QywgMHgyMUUzLCAweDc2NkQsIDB4NzY2RSwgMHgyNUI0LCAweDc2NkYsIDB4NzY2RiwgMHgxQjk3LA0KLSAgICAweDc2NzAsIDB4NzY3MCwgMHgyMjJGLCAweDc2NzEsIDB4NzY3MSwgMHgyMTY1LCAweDc2NzIsIDB4NzY3MiwgMHgyNUI3LA0KLSAgICAweDc2NzMsIDB4NzY3NywgMHgzRUJDLCAweDc2NzgsIDB4NzY3OCwgMHgwNzQ4LCAweDc2NzksIDB4NzY3QSwgMHgzRUMxLA0KLSAgICAweDc2N0IsIDB4NzY3QiwgMHgwNUE4LCAweDc2N0MsIDB4NzY3QywgMHgxRUU5LCAweDc2N0QsIDB4NzY3RCwgMHgwM0UyLA0KLSAgICAweDc2N0UsIDB4NzY3RSwgMHgwM0U0LCAweDc2N0YsIDB4NzY4MSwgMHgzRUMzLCAweDc2ODIsIDB4NzY4MiwgMHgxMTMwLA0KLSAgICAweDc2ODMsIDB4NzY4MywgMHgzRUM2LCAweDc2ODQsIDB4NzY4NCwgMHgwNUE1LCAweDc2ODUsIDB4NzY4NSwgMHgzRUM3LA0KLSAgICAweDc2ODYsIDB4NzY4NiwgMHgwOEE1LCAweDc2ODcsIDB4NzY4NywgMHgwN0RGLCAweDc2ODgsIDB4NzY4OCwgMHgxQjJELA0KLSAgICAweDc2ODksIDB4NzY4QSwgMHgzRUM4LCAweDc2OEIsIDB4NzY4QiwgMHgwNkQ5LCAweDc2OEMsIDB4NzY4RCwgMHgzRUNBLA0KLSAgICAweDc2OEUsIDB4NzY4RSwgMHgxQjJFLCAweDc2OEYsIDB4NzY5MCwgMHgzRUNDLCAweDc2OTEsIDB4NzY5MSwgMHgwM0IzLA0KLSAgICAweDc2OTIsIDB4NzY5MiwgMHgzRUNFLCAweDc2OTMsIDB4NzY5MywgMHgxQjJGLCAweDc2OTQsIDB4NzY5NSwgMHgzRUNGLA0KLSAgICAweDc2OTYsIDB4NzY5NiwgMHgwRTlGLCAweDc2OTcsIDB4NzY5OCwgMHgzRUQxLCAweDc2OTksIDB4NzY5OSwgMHgxQjMwLA0KLSAgICAweDc2OUEsIDB4NzY5QSwgMHgxRTI1LCAweDc2OUIsIDB4NzZBMywgMHgzRUQzLCAweDc2QTQsIDB4NzZBNCwgMHgxQjMxLA0KLSAgICAweDc2QTUsIDB4NzZBRCwgMHgzRURDLCAweDc2QUUsIDB4NzZBRSwgMHgwQkMzLCAweDc2QUYsIDB4NzZCMCwgMHgzRUU1LA0KLSAgICAweDc2QjEsIDB4NzZCMSwgMHgxMUU0LCAweDc2QjIsIDB4NzZCMiwgMHgxQkM4LCAweDc2QjMsIDB4NzZCMywgMHgzRUU3LA0KLSAgICAweDc2QjQsIDB4NzZCNCwgMHgxQkM5LCAweDc2QjUsIDB4NzZCNywgMHgzRUU4LCAweDc2QjgsIDB4NzZCOCwgMHgyNUMwLA0KLSAgICAweDc2QjksIDB4NzZCOSwgMHgzRUVCLCAweDc2QkEsIDB4NzZCQSwgMHgyMjlBLCAweDc2QkIsIDB4NzZCRSwgMHgzRUVDLA0KLSAgICAweDc2QkYsIDB4NzZCRiwgMHgwQUY4LCAweDc2QzAsIDB4NzZDMSwgMHgzRUYwLCAweDc2QzIsIDB4NzZDMiwgMHgxMEMwLA0KLSAgICAweDc2QzMsIDB4NzZDNCwgMHgzRUYyLCAweDc2QzUsIDB4NzZDNSwgMHgxMUQwLCAweDc2QzYsIDB4NzZDNiwgMHgwQkE5LA0KLSAgICAweDc2QzcsIDB4NzZDNywgMHgzRUY0LCAweDc2QzgsIDB4NzZDOCwgMHgxMDk0LCAweDc2QzksIDB4NzZDOSwgMHgzRUY1LA0KLSAgICAweDc2Q0EsIDB4NzZDQSwgMHgxMDZELCAweDc2Q0IsIDB4NzZDQywgMHgzRUY2LCAweDc2Q0QsIDB4NzZDRCwgMHgxQThCLA0KLSAgICAweDc2Q0UsIDB4NzZDRSwgMHgwM0M2LCAweDc2Q0YsIDB4NzZDRiwgMHgxMTU2LCAweDc2RDAsIDB4NzZEMCwgMHgwRkY3LA0KLSAgICAweDc2RDEsIDB4NzZEMSwgMHgwODUzLCAweDc2RDIsIDB4NzZEMiwgMHgwNzg3LCAweDc2RDMsIDB4NzZEMywgMHgzRUY4LA0KLSAgICAweDc2RDQsIDB4NzZENCwgMHgwOTg1LCAweDc2RDUsIDB4NzZENSwgMHgzRUY5LCAweDc2RDYsIDB4NzZENiwgMHgwNkMyLA0KLSAgICAweDc2RDcsIDB4NzZENywgMHgwNUEyLCAweDc2RDgsIDB4NzZEOCwgMHgwQjhELCAweDc2RDksIDB4NzZEQSwgMHgzRUZBLA0KLSAgICAweDc2REIsIDB4NzZEQiwgMHgwRDM5LCAweDc2REMsIDB4NzZERCwgMHgzRUZDLCAweDc2REUsIDB4NzZERSwgMHgyMjZFLA0KLSAgICAweDc2REYsIDB4NzZERiwgMHgwQUQwLCAweDc2RTAsIDB4NzZFMCwgMHgzRUZFLCAweDc2RTEsIDB4NzZFMSwgMHgxRkJELA0KLSAgICAweDc2RTIsIDB4NzZFMiwgMHgzRUZGLCAweDc2RTMsIDB4NzZFMywgMHgxRjg0LCAweDc2RTQsIDB4NzZFNCwgMHgyMEIyLA0KLSAgICAweDc2RTUsIDB4NzZFNSwgMHgxQThDLCAweDc2RTYsIDB4NzZFNiwgMHgzRjAwLCAweDc2RTcsIDB4NzZFNywgMHgyMDQzLA0KLSAgICAweDc2RTgsIDB4NzZFRCwgMHgzRjAxLCAweDc2RUUsIDB4NzZFRSwgMHgwQjIyLCAweDc2RUYsIDB4NzZFRiwgMHgwNUUxLA0KLSAgICAweDc2RjAsIDB4NzZGMCwgMHgzRjA3LCAweDc2RjEsIDB4NzZGMSwgMHgxQTU4LCAweDc2RjIsIDB4NzZGMiwgMHgwQUE5LA0KLSAgICAweDc2RjMsIDB4NzZGMywgMHgzRjA4LCAweDc2RjQsIDB4NzZGNCwgMHgxMUIwLCAweDc2RjUsIDB4NzZGNywgMHgzRjA5LA0KLSAgICAweDc2RjgsIDB4NzZGOCwgMHgwRjRELCAweDc2RjksIDB4NzZGOSwgMHgxQTVCLCAweDc2RkEsIDB4NzZGQiwgMHgzRjBDLA0KLSAgICAweDc2RkMsIDB4NzZGQywgMHgwQjhGLCAweDc2RkQsIDB4NzZGRCwgMHgzRjBFLCAweDc2RkUsIDB4NzZGRSwgMHgwNjFCLA0KLSAgICAweDc2RkYsIDB4NzZGRiwgMHgzRjBGLCAweDc3MDAsIDB4NzcwMCwgMHgzRjEwLCAweDc3MDEsIDB4NzcwMSwgMHgwRDM4LA0KLSAgICAweDc3MDIsIDB4NzcwMywgMHgzRjExLCAweDc3MDQsIDB4NzcwNCwgMHgxQTU5LCAweDc3MDUsIDB4NzcwNiwgMHgzRjEzLA0KLSAgICAweDc3MDcsIDB4NzcwOCwgMHgxQTVDLCAweDc3MDksIDB4NzcwOSwgMHgwQUMxLCAweDc3MEEsIDB4NzcwQSwgMHgzRjE1LA0KLSAgICAweDc3MEIsIDB4NzcwQiwgMHgwOTQxLCAweDc3MEMsIDB4NzcwQywgMHgzRjE2LCAweDc3MEQsIDB4NzcwRCwgMHgxQTVBLA0KLSAgICAweDc3MEUsIDB4NzcxOCwgMHgzRjE3LCAweDc3MTksIDB4NzcxOSwgMHgxQTYwLCAweDc3MUEsIDB4NzcxQSwgMHgxQTVFLA0KLSAgICAweDc3MUIsIDB4NzcxRSwgMHgzRjIyLCAweDc3MUYsIDB4NzcxRiwgMHgxMTg3LCAweDc3MjAsIDB4NzcyMCwgMHgwQUU0LA0KLSAgICAweDc3MjEsIDB4NzcyMSwgMHgzRjI2LCAweDc3MjIsIDB4NzcyMiwgMHgxQTVGLCAweDc3MjMsIDB4NzcyNSwgMHgzRjI3LA0KLSAgICAweDc3MjYsIDB4NzcyNiwgMHgxQTYyLCAweDc3MjcsIDB4NzcyNywgMHgzRjJBLCAweDc3MjgsIDB4NzcyOCwgMHgxMTQ0LA0KLSAgICAweDc3MjksIDB4NzcyOSwgMHgwRkNDLCAweDc3MkEsIDB4NzcyQywgMHgzRjJCLCAweDc3MkQsIDB4NzcyRCwgMHgxQTYxLA0KLSAgICAweDc3MkUsIDB4NzcyRSwgMHgzRjJFLCAweDc3MkYsIDB4NzcyRiwgMHgwQUQ1LCAweDc3MzAsIDB4NzczNCwgMHgzRjJGLA0KLSAgICAweDc3MzUsIDB4NzczNSwgMHgxQTYzLCAweDc3MzYsIDB4NzczNiwgMHgwOTgxLCAweDc3MzcsIDB4NzczNywgMHgwOTFCLA0KLSAgICAweDc3MzgsIDB4NzczOCwgMHgxQTY0LCAweDc3MzksIDB4NzczOSwgMHgzRjM0LCAweDc3M0EsIDB4NzczQSwgMHgwRTRBLA0KLSAgICAweDc3M0IsIDB4NzczQiwgMHgzRjM1LCAweDc3M0MsIDB4NzczQywgMHgxMDA0LCAweDc3M0QsIDB4NzczRiwgMHgzRjM2LA0KLSAgICAweDc3NDAsIDB4Nzc0MCwgMHgxMjIyLCAweDc3NDEsIDB4Nzc0MSwgMHgxMTk3LCAweDc3NDIsIDB4Nzc0MiwgMHgzRjM5LA0KLSAgICAweDc3NDMsIDB4Nzc0MywgMHgxQTY4LCAweDc3NDQsIDB4Nzc0NiwgMHgzRjNBLCAweDc3NDcsIDB4Nzc0NywgMHgxQTY3LA0KLSAgICAweDc3NDgsIDB4Nzc0RSwgMHgzRjNELCAweDc3NEYsIDB4Nzc0RiwgMHgyNjg0LCAweDc3NTAsIDB4Nzc1MSwgMHgxQTY1LA0KLSAgICAweDc3NTIsIDB4Nzc1OSwgMHgzRjQ0LCAweDc3NUEsIDB4Nzc1QSwgMHgxQTY5LCAweDc3NUIsIDB4Nzc1QiwgMHgwOEQ1LA0KLSAgICAweDc3NUMsIDB4Nzc1RCwgMHgzRjRDLCAweDc3NUUsIDB4Nzc1RSwgMHgyNEVGLCAweDc3NUYsIDB4Nzc2MCwgMHgzRjRFLA0KLSAgICAweDc3NjEsIDB4Nzc2MSwgMHgwREE0LCAweDc3NjIsIDB4Nzc2MiwgMHgxQTZCLCAweDc3NjMsIDB4Nzc2MywgMHgwNUZDLA0KLSAgICAweDc3NjQsIDB4Nzc2NCwgMHgzRjUwLCAweDc3NjUsIDB4Nzc2NSwgMHgxQTZDLCAweDc3NjYsIDB4Nzc2NiwgMHgwQjIzLA0KLSAgICAweDc3NjcsIDB4Nzc2NywgMHgzRjUxLCAweDc3NjgsIDB4Nzc2OCwgMHgxQTZBLCAweDc3NjksIDB4Nzc2QSwgMHgzRjUyLA0KLSAgICAweDc3NkIsIDB4Nzc2QiwgMHgwOEFGLCAweDc3NkMsIDB4Nzc2QywgMHgwNDhFLCAweDc3NkQsIDB4Nzc3OCwgMHgzRjU0LA0KLSAgICAweDc3NzksIDB4Nzc3OSwgMHgwNjAyLCAweDc3N0EsIDB4Nzc3QywgMHgzRjYwLCAweDc3N0QsIDB4Nzc3RCwgMHgxQTZGLA0KLSAgICAweDc3N0UsIDB4Nzc3RSwgMHgxMjcwLCAweDc3N0YsIDB4Nzc3RiwgMHgxQTZELCAweDc3ODAsIDB4Nzc4MCwgMHgxQTcwLA0KLSAgICAweDc3ODEsIDB4Nzc4MywgMHgzRjYzLCAweDc3ODQsIDB4Nzc4NCwgMHgwQUVFLCAweDc3ODUsIDB4Nzc4NSwgMHgwNTE3LA0KLSAgICAweDc3ODYsIDB4Nzc4QiwgMHgzRjY2LCAweDc3OEMsIDB4Nzc4QywgMHgxQTcxLCAweDc3OEQsIDB4Nzc4RCwgMHgxQTZFLA0KLSAgICAweDc3OEUsIDB4Nzc4RSwgMHgwRjI2LCAweDc3OEYsIDB4Nzc5MCwgMHgzRjZDLCAweDc3OTEsIDB4Nzc5MSwgMHgxQTcyLA0KLSAgICAweDc3OTIsIDB4Nzc5MiwgMHgwQTlFLCAweDc3OTMsIDB4Nzc5NywgMHgzRjZFLCAweDc3OTgsIDB4Nzc5OCwgMHgyNEVFLA0KLSAgICAweDc3OTksIDB4Nzc5RCwgMHgzRjczLCAweDc3OUUsIDB4Nzc5RSwgMHgyMDc0LCAweDc3OUYsIDB4NzdBMCwgMHgxQTczLA0KLSAgICAweDc3QTEsIDB4NzdBMSwgMHgzRjc4LCAweDc3QTIsIDB4NzdBMiwgMHgxNDk1LCAweDc3QTMsIDB4NzdBNCwgMHgzRjc5LA0KLSAgICAweDc3QTUsIDB4NzdBNSwgMHgwQkQyLCAweDc3QTYsIDB4NzdBNiwgMHgzRjdCLCAweDc3QTcsIDB4NzdBNywgMHgwQzQzLA0KLSAgICAweDc3QTgsIDB4NzdBOCwgMHgzRjdDLCAweDc3QTksIDB4NzdBOSwgMHgxMUY0LCAweDc3QUEsIDB4NzdBQSwgMHgwNUFBLA0KLSAgICAweDc3QUIsIDB4NzdBQiwgMHgzRjdELCAweDc3QUMsIDB4NzdBQywgMHgwREE3LCAweDc3QUQsIDB4NzdBRCwgMHgyNjg3LA0KLSAgICAweDc3QUUsIDB4NzdBRiwgMHgzRjdFLCAweDc3QjAsIDB4NzdCMCwgMHgxQTc1LCAweDc3QjEsIDB4NzdCMiwgMHgzRjgwLA0KLSAgICAweDc3QjMsIDB4NzdCMywgMHgwRTVDLCAweDc3QjQsIDB4NzdCNCwgMHgzRjgyLCAweDc3QjUsIDB4NzdCNSwgMHgxQTc2LA0KLSAgICAweDc3QjYsIDB4NzdCQSwgMHgzRjgzLCAweDc3QkIsIDB4NzdCQiwgMHgxMTUxLCAweDc3QkMsIDB4NzdCQywgMHgyNEYwLA0KLSAgICAweDc3QkQsIDB4NzdCRCwgMHgxQTc3LCAweDc3QkUsIDB4NzdCRSwgMHgzRjg4LCAweDc3QkYsIDB4NzdCRiwgMHgxRDdFLA0KLSAgICAweDc3QzAsIDB4NzdDNiwgMHgzRjg5LCAweDc3QzcsIDB4NzdDNywgMHgyNjhELCAweDc3QzgsIDB4NzdDQywgMHgzRjkwLA0KLSAgICAweDc3Q0QsIDB4NzdDRCwgMHgxMzk3LCAweDc3Q0UsIDB4NzdENiwgMHgzRjk1LCAweDc3RDcsIDB4NzdENywgMHgwNTI2LA0KLSAgICAweDc3RDgsIDB4NzdEOSwgMHgzRjlFLCAweDc3REEsIDB4NzdEQSwgMHgyMkEwLCAweDc3REIsIDB4NzdEQiwgMHgwQUIxLA0KLSAgICAweDc3REMsIDB4NzdEQywgMHgxQkNBLCAweDc3REQsIDB4NzdFMSwgMHgzRkEwLCAweDc3RTIsIDB4NzdFMiwgMHgwRDRGLA0KLSAgICAweDc3RTMsIDB4NzdFMywgMHgxMDVBLCAweDc3RTQsIDB4NzdFNCwgMHgzRkE1LCAweDc3RTUsIDB4NzdFNSwgMHgxMUE5LA0KLSAgICAweDc3RTYsIDB4NzdFNiwgMHgzRkE2LCAweDc3RTcsIDB4NzdFNywgMHgxQjFBLCAweDc3RTgsIDB4NzdFOCwgMHgzRkE3LA0KLSAgICAweDc3RTksIDB4NzdFOSwgMHgwOTA3LCAweDc3RUEsIDB4NzdFQSwgMHgzRkE4LCAweDc3RUIsIDB4NzdFQiwgMHgwODk0LA0KLSAgICAweDc3RUMsIDB4NzdFQywgMHgxQjFCLCAweDc3RUQsIDB4NzdFRCwgMHgwNjBCLCAweDc3RUUsIDB4NzdFRSwgMHgwM0I2LA0KLSAgICAweDc3RUYsIDB4NzdFRiwgMHgxRkFCLCAweDc3RjAsIDB4NzdGMiwgMHgzRkE5LCAweDc3RjMsIDB4NzdGMywgMHgwRDQ2LA0KLSAgICAweDc3RjQsIDB4NzdGNSwgMHgzRkFDLCAweDc3RjYsIDB4NzdGNiwgMHgxQTIyLCAweDc3RjcsIDB4NzdGNywgMHgzRkFFLA0KLSAgICAweDc3RjgsIDB4NzdGOCwgMHgxQTIzLCAweDc3RjksIDB4NzdGQywgMHgzRkFGLCAweDc3RkQsIDB4NzdGRCwgMHgwRjA4LA0KLSAgICAweDc3RkUsIDB4NzdGRSwgMHgwNjRDLCAweDc3RkYsIDB4NzdGRiwgMHgwOTgwLCAweDc4MDAsIDB4NzgwMCwgMHgxQTI0LA0KLSAgICAweDc4MDEsIDB4NzgwMSwgMHgwQTkyLCAweDc4MDIsIDB4NzgwMiwgMHgwQ0U5LCAweDc4MDMsIDB4NzgwOCwgMHgzRkIzLA0KLSAgICAweDc4MDksIDB4NzgwOSwgMHgxQTI1LCAweDc4MEEsIDB4NzgwQiwgMHgzRkI5LCAweDc4MEMsIDB4NzgwQywgMHgwQzE1LA0KLSAgICAweDc4MEQsIDB4NzgwRCwgMHgwOTQwLCAweDc4MEUsIDB4NzgxMCwgMHgzRkJCLCAweDc4MTEsIDB4NzgxMSwgMHgxQTI4LA0KLSAgICAweDc4MTIsIDB4NzgxMiwgMHgwQkI5LCAweDc4MTMsIDB4NzgxMywgMHgzRkJFLCAweDc4MTQsIDB4NzgxNCwgMHgwRkY5LA0KLSAgICAweDc4MTUsIDB4NzgxNSwgMHgzRkJGLCAweDc4MTYsIDB4NzgxNiwgMHgxMjA2LCAweDc4MTcsIDB4NzgxOCwgMHgxQTI2LA0KLSAgICAweDc4MTksIDB4NzgxOSwgMHgzRkMwLCAweDc4MUEsIDB4NzgxQSwgMHgxMDBCLCAweDc4MUIsIDB4NzgxQiwgMHgzRkMxLA0KLSAgICAweDc4MUMsIDB4NzgxRCwgMHgxQTJCLCAweDc4MUUsIDB4NzgxRSwgMHgzRkMyLCAweDc4MUYsIDB4NzgxRiwgMHgxQTMwLA0KLSAgICAweDc4MjAsIDB4NzgyMiwgMHgzRkMzLCAweDc4MjMsIDB4NzgyMywgMHgxQTM0LCAweDc4MjQsIDB4NzgyNCwgMHgzRkM2LA0KLSAgICAweDc4MjUsIDB4NzgyNSwgMHgxQTMyLCAweDc4MjYsIDB4NzgyNiwgMHgxQTNBLCAweDc4MjcsIDB4NzgyNywgMHgxMTg5LA0KLSAgICAweDc4MjgsIDB4NzgyOCwgMHgzRkM3LCAweDc4MjksIDB4NzgyOSwgMHgxQTM1LCAweDc4MkEsIDB4NzgyQiwgMHgzRkM4LA0KLSAgICAweDc4MkMsIDB4NzgyQywgMHgxQTMzLCAweDc4MkQsIDB4NzgyRCwgMHgxQTJBLCAweDc4MkUsIDB4NzgyRiwgMHgzRkNBLA0KLSAgICAweDc4MzAsIDB4NzgzMCwgMHgwQkFBLCAweDc4MzEsIDB4NzgzMywgMHgzRkNDLCAweDc4MzQsIDB4NzgzNCwgMHgwQkU1LA0KLSAgICAweDc4MzUsIDB4NzgzNiwgMHgzRkNGLCAweDc4MzcsIDB4NzgzNywgMHgwRDIyLCAweDc4MzgsIDB4NzgzOCwgMHgxMTE1LA0KLSAgICAweDc4MzksIDB4NzgzQiwgMHgxQTJELCAweDc4M0MsIDB4NzgzQywgMHgxQTMxLCAweDc4M0QsIDB4NzgzRCwgMHgzRkQxLA0KLSAgICAweDc4M0UsIDB4NzgzRSwgMHgwOUU0LCAweDc4M0YsIDB4NzgzRiwgMHgzRkQyLCAweDc4NDAsIDB4Nzg0MCwgMHgwNTI0LA0KLSAgICAweDc4NDEsIDB4Nzg0MiwgMHgzRkQzLCAweDc4NDMsIDB4Nzg0MywgMHgyNkE4LCAweDc4NDQsIDB4Nzg0NCwgMHgzRkQ1LA0KLSAgICAweDc4NDUsIDB4Nzg0NSwgMHgwNzQxLCAweDc4NDYsIDB4Nzg0NiwgMHgzRkQ2LCAweDc4NDcsIDB4Nzg0NywgMHgxQTNDLA0KLSAgICAweDc4NDgsIDB4Nzg0QiwgMHgzRkQ3LCAweDc4NEMsIDB4Nzg0QywgMHgxQTNELCAweDc4NEQsIDB4Nzg0RCwgMHgzRkRCLA0KLSAgICAweDc4NEUsIDB4Nzg0RSwgMHgxQTM2LCAweDc4NEYsIDB4Nzg0RiwgMHgzRkRDLCAweDc4NTAsIDB4Nzg1MCwgMHgxQTNCLA0KLSAgICAweDc4NTEsIDB4Nzg1MSwgMHgzRkRELCAweDc4NTIsIDB4Nzg1MiwgMHgwRjA3LCAweDc4NTMsIDB4Nzg1NCwgMHgzRkRFLA0KLSAgICAweDc4NTUsIDB4Nzg1NSwgMHgwREFCLCAweDc4NTYsIDB4Nzg1NywgMHgxQTM4LCAweDc4NTgsIDB4Nzg1QywgMHgzRkUwLA0KLSAgICAweDc4NUQsIDB4Nzg1RCwgMHgwRjYyLCAweDc4NUUsIDB4Nzg2MywgMHgzRkU1LCAweDc4NjQsIDB4Nzg2NCwgMHgyNEU5LA0KLSAgICAweDc4NjUsIDB4Nzg2NywgMHgzRkVCLCAweDc4NjgsIDB4Nzg2OCwgMHgyNEU1LCAweDc4NjksIDB4Nzg2OSwgMHgzRkVFLA0KLSAgICAweDc4NkEsIDB4Nzg2QSwgMHgxQTNFLCAweDc4NkIsIDB4Nzg2QiwgMHgwQTNCLCAweDc4NkMsIDB4Nzg2QywgMHgxMDk3LA0KLSAgICAweDc4NkQsIDB4Nzg2RCwgMHgxQTM3LCAweDc4NkUsIDB4Nzg2RSwgMHgwQzkyLCAweDc4NkYsIDB4Nzg2RiwgMHgyMUZBLA0KLSAgICAweDc4NzAsIDB4Nzg3NiwgMHgzRkVGLCAweDc4NzcsIDB4Nzg3NywgMHgwODYyLCAweDc4NzgsIDB4Nzg3QiwgMHgzRkY2LA0KLSAgICAweDc4N0MsIDB4Nzg3QywgMHgwQkIxLCAweDc4N0QsIDB4Nzg4NiwgMHgzRkZBLCAweDc4ODcsIDB4Nzg4NywgMHgxQTQyLA0KLSAgICAweDc4ODgsIDB4Nzg4OCwgMHg0MDA0LCAweDc4ODksIDB4Nzg4OSwgMHgwNUQwLCAweDc4OEEsIDB4Nzg4QiwgMHg0MDA1LA0KLSAgICAweDc4OEMsIDB4Nzg4QywgMHgwQTVDLCAweDc4OEQsIDB4Nzg4RCwgMHgwM0I4LCAweDc4OEUsIDB4Nzg4RSwgMHgwRERFLA0KLSAgICAweDc4OEYsIDB4Nzg5MCwgMHg0MDA3LCAweDc4OTEsIDB4Nzg5MSwgMHgwNDE3LCAweDc4OTIsIDB4Nzg5MiwgMHg0MDA5LA0KLSAgICAweDc4OTMsIDB4Nzg5MywgMHgxQTQwLCAweDc4OTQsIDB4Nzg5NiwgMHg0MDBBLCAweDc4OTcsIDB4Nzg5NywgMHgwRTlDLA0KLSAgICAweDc4OTgsIDB4Nzg5OCwgMHgwNUMzLCAweDc4OTksIDB4Nzg5OSwgMHg0MDBELCAweDc4OUEsIDB4Nzg5QSwgMHgxQTQxLA0KLSAgICAweDc4OUIsIDB4Nzg5QiwgMHgxQTNGLCAweDc4OUMsIDB4Nzg5QywgMHgxQTQzLCAweDc4OUQsIDB4Nzg5RSwgMHg0MDBFLA0KLSAgICAweDc4OUYsIDB4Nzg5RiwgMHgwNURCLCAweDc4QTAsIDB4NzhBMCwgMHg0MDEwLCAweDc4QTEsIDB4NzhBMSwgMHgxQTQ0LA0KLSAgICAweDc4QTIsIDB4NzhBMiwgMHg0MDExLCAweDc4QTMsIDB4NzhBMywgMHgxQTQ1LCAweDc4QTQsIDB4NzhBNCwgMHg0MDEyLA0KLSAgICAweDc4QTUsIDB4NzhBNSwgMHgxQTQ4LCAweDc4QTYsIDB4NzhBNiwgMHg0MDEzLCAweDc4QTcsIDB4NzhBNywgMHgwNDM1LA0KLSAgICAweDc4QTgsIDB4NzhBOCwgMHg0MDE0LCAweDc4QTksIDB4NzhBOSwgMHgyMTQ4LCAweDc4QUEsIDB4NzhBQywgMHg0MDE1LA0KLSAgICAweDc4QUQsIDB4NzhBRCwgMHgyNEU0LCAweDc4QUUsIDB4NzhBRiwgMHg0MDE4LCAweDc4QjAsIDB4NzhCMCwgMHgwQkI3LA0KLSAgICAweDc4QjEsIDB4NzhCMSwgMHgwODYxLCAweDc4QjIsIDB4NzhCMiwgMHgxQTQ2LCAweDc4QjMsIDB4NzhCMywgMHgwRTBGLA0KLSAgICAweDc4QjQsIDB4NzhCNCwgMHgwNEIxLCAweDc4QjUsIDB4NzhCNywgMHg0MDFBLCAweDc4QjgsIDB4NzhCOCwgMHgyNEU2LA0KLSAgICAweDc4QjksIDB4NzhCOSwgMHgxQTQ3LCAweDc4QkEsIDB4NzhCQSwgMHgyMEY3LCAweDc4QkIsIDB4NzhCQiwgMHg0MDFELA0KLSAgICAweDc4QkMsIDB4NzhCQywgMHgyMDZCLCAweDc4QkQsIDB4NzhCRCwgMHg0MDFFLCAweDc4QkUsIDB4NzhCRSwgMHgwQjRFLA0KLSAgICAweDc4QkYsIDB4NzhDMCwgMHg0MDFGLCAweDc4QzEsIDB4NzhDMSwgMHgwNTQ4LCAweDc4QzIsIDB4NzhDNCwgMHg0MDIxLA0KLSAgICAweDc4QzUsIDB4NzhDNSwgMHgwNDAwLCAweDc4QzYsIDB4NzhDOCwgMHg0MDI0LCAweDc4QzksIDB4NzhDOSwgMHgxQTRCLA0KLSAgICAweDc4Q0EsIDB4NzhDQSwgMHgwOUM1LCAweDc4Q0IsIDB4NzhDQiwgMHgwNTZCLCAweDc4Q0MsIDB4NzhDRiwgMHg0MDI3LA0KLSAgICAweDc4RDAsIDB4NzhEMCwgMHgwQjhFLCAweDc4RDEsIDB4NzhEMywgMHg0MDJCLCAweDc4RDQsIDB4NzhENCwgMHgxQTQ5LA0KLSAgICAweDc4RDUsIDB4NzhENSwgMHgwOTUxLCAweDc4RDYsIDB4NzhEOCwgMHg0MDJFLCAweDc4RDksIDB4NzhEOSwgMHgxQTRBLA0KLSAgICAweDc4REEsIDB4NzhEQSwgMHgyMkE3LCAweDc4REIsIDB4NzhFMiwgMHg0MDMxLCAweDc4RTMsIDB4NzhFMywgMHgyNEVDLA0KLSAgICAweDc4RTQsIDB4NzhFNiwgMHg0MDM5LCAweDc4RTcsIDB4NzhFNywgMHgyNEVCLCAweDc4RTgsIDB4NzhFOCwgMHgwQjA4LA0KLSAgICAweDc4RTksIDB4NzhFQiwgMHg0MDNDLCAweDc4RUMsIDB4NzhFQywgMHgxQTRDLCAweDc4RUQsIDB4NzhFRSwgMHg0MDNGLA0KLSAgICAweDc4RUYsIDB4NzhFRiwgMHgyNEUzLCAweDc4RjAsIDB4NzhGMSwgMHg0MDQxLCAweDc4RjIsIDB4NzhGMiwgMHgxQTRELA0KLSAgICAweDc4RjMsIDB4NzhGMywgMHg0MDQzLCAweDc4RjQsIDB4NzhGNCwgMHgxQTRGLCAweDc4RjUsIDB4NzhGNiwgMHg0MDQ0LA0KLSAgICAweDc4RjcsIDB4NzhGNywgMHgwQTIwLCAweDc4RjgsIDB4NzhGOSwgMHg0MDQ2LCAweDc4RkEsIDB4NzhGQSwgMHgwN0RDLA0KLSAgICAweDc4RkIsIDB4NzhGQywgMHg0MDQ4LCAweDc4RkQsIDB4NzhGRCwgMHgyNEVBLCAweDc4RkUsIDB4NzhGRiwgMHg0MDRBLA0KLSAgICAweDc5MDAsIDB4NzkwMCwgMHg0MDRDLCAweDc5MDEsIDB4NzkwMSwgMHgwODg5LCAweDc5MDIsIDB4NzkwNCwgMHg0MDRELA0KLSAgICAweDc5MDUsIDB4NzkwNSwgMHgxQTRFLCAweDc5MDYsIDB4NzkwRCwgMHg0MDUwLCAweDc5MEUsIDB4NzkwRSwgMHgxRTkyLA0KLSAgICAweDc5MEYsIDB4NzkxMiwgMHg0MDU4LCAweDc5MTMsIDB4NzkxMywgMHgxQTUwLCAweDc5MTQsIDB4NzkxOCwgMHg0MDVDLA0KLSAgICAweDc5MTksIDB4NzkxOSwgMHgxRTI3LCAweDc5MUEsIDB4NzkxRCwgMHg0MDYxLCAweDc5MUUsIDB4NzkxRSwgMHgxQTUyLA0KLSAgICAweDc5MUYsIDB4NzkyMywgMHg0MDY1LCAweDc5MjQsIDB4NzkyNCwgMHgxQTUxLCAweDc5MjUsIDB4NzkyNSwgMHg0MDZBLA0KLSAgICAweDc5MjYsIDB4NzkyNiwgMHgxRkU2LCAweDc5MjcsIDB4NzkyOSwgMHg0MDZCLCAweDc5MkEsIDB4NzkyQSwgMHgyNEU3LA0KLSAgICAweDc5MkIsIDB4NzkyQiwgMHgyMDEyLCAweDc5MkMsIDB4NzkyQywgMHgxRUVDLCAweDc5MkQsIDB4NzkzMCwgMHg0MDZFLA0KLSAgICAweDc5MzEsIDB4NzkzMSwgMHgyNEU4LCAweDc5MzIsIDB4NzkzMywgMHg0MDcyLCAweDc5MzQsIDB4NzkzNCwgMHgxQTUzLA0KLSAgICAweDc5MzUsIDB4NzkzOSwgMHg0MDc0LCAweDc5M0EsIDB4NzkzQSwgMHgwRDU1LCAweDc5M0IsIDB4NzkzQiwgMHgxOUY4LA0KLSAgICAweDc5M0MsIDB4NzkzQywgMHgwOURDLCAweDc5M0QsIDB4NzkzRCwgMHg0MDc5LCAweDc5M0UsIDB4NzkzRSwgMHgwRDIwLA0KLSAgICAweDc5M0YsIDB4NzkzRiwgMHg0MDdBLCAweDc5NDAsIDB4Nzk0MCwgMHgxOUY5LCAweDc5NDEsIDB4Nzk0MSwgMHgwQzBELA0KLSAgICAweDc5NDIsIDB4Nzk0NSwgMHg0MDdCLCAweDc5NDYsIDB4Nzk0NiwgMHgxOUZBLCAweDc5NDcsIDB4Nzk0NywgMHg0MDdGLA0KLSAgICAweDc5NDgsIDB4Nzk0OCwgMHgwQzBDLCAweDc5NDksIDB4Nzk0OSwgMHgxOUZCLCAweDc5NEEsIDB4Nzk1MiwgMHg0MDgwLA0KLSAgICAweDc5NTMsIDB4Nzk1MywgMHgxOUZFLCAweDc5NTQsIDB4Nzk1NSwgMHg0MDg5LCAweDc5NTYsIDB4Nzk1NiwgMHgxMjQzLA0KLSAgICAweDc5NTcsIDB4Nzk1NywgMHgxQTAxLCAweDc5NTgsIDB4Nzk1OSwgMHg0MDhCLCAweDc5NUEsIDB4Nzk1QSwgMHgxOUZGLA0KLSAgICAweDc5NUIsIDB4Nzk1QywgMHgxOUZDLCAweDc5NUQsIDB4Nzk1RCwgMHgxMjAwLCAweDc5NUUsIDB4Nzk1RSwgMHgwRDJBLA0KLSAgICAweDc5NUYsIDB4Nzk1RiwgMHgwREUzLCAweDc5NjAsIDB4Nzk2MCwgMHgxQTAyLCAweDc5NjEsIDB4Nzk2MSwgMHg0MDhELA0KLSAgICAweDc5NjIsIDB4Nzk2MiwgMHgxQTAwLCAweDc5NjMsIDB4Nzk2NCwgMHg0MDhFLCAweDc5NjUsIDB4Nzk2NSwgMHgwRjU2LA0KLSAgICAweDc5NjYsIDB4Nzk2NiwgMHg0MDkwLCAweDc5NjcsIDB4Nzk2NywgMHgxQTA0LCAweDc5NjgsIDB4Nzk2OCwgMHgwQkQwLA0KLSAgICAweDc5NjksIDB4Nzk2QywgMHg0MDkxLCAweDc5NkQsIDB4Nzk2RCwgMHgwODMzLCAweDc5NkUsIDB4Nzk2RSwgMHg0MDk1LA0KLSAgICAweDc5NkYsIDB4Nzk2RiwgMHgxQTAzLCAweDc5NzAsIDB4Nzk3NiwgMHg0MDk2LCAweDc5NzcsIDB4Nzk3NywgMHgwNTlDLA0KLSAgICAweDc5NzgsIDB4Nzk3OCwgMHgwODBCLCAweDc5NzksIDB4Nzk3OSwgMHg0MDlELCAweDc5N0EsIDB4Nzk3QSwgMHgxQTA1LA0KLSAgICAweDc5N0IsIDB4Nzk3RiwgMHg0MDlFLCAweDc5ODAsIDB4Nzk4MCwgMHgxMzBCLCAweDc5ODEsIDB4Nzk4MSwgMHgwOENDLA0KLSAgICAweDc5ODIsIDB4Nzk4MywgMHg0MEEzLCAweDc5ODQsIDB4Nzk4NCwgMHgwQTYyLCAweDc5ODUsIDB4Nzk4NSwgMHgxQTA2LA0KLSAgICAweDc5ODYsIDB4Nzk4OSwgMHg0MEE1LCAweDc5OEEsIDB4Nzk4QSwgMHgxQTA3LCAweDc5OEIsIDB4Nzk4QywgMHg0MEE5LA0KLSAgICAweDc5OEQsIDB4Nzk4RCwgMHgxRjY2LCAweDc5OEUsIDB4Nzk4RSwgMHgyNERDLCAweDc5OEYsIDB4Nzk4RiwgMHgwNjlFLA0KLSAgICAweDc5OTAsIDB4Nzk5OSwgMHg0MEFCLCAweDc5OUEsIDB4Nzk5QSwgMHgxQTA4LCAweDc5OUIsIDB4NzlBNSwgMHg0MEI1LA0KLSAgICAweDc5QTYsIDB4NzlBNiwgMHgyNkEyLCAweDc5QTcsIDB4NzlBNywgMHgxQTA5LCAweDc5QTgsIDB4NzlBOSwgMHg0MEMwLA0KLSAgICAweDc5QUEsIDB4NzlBQSwgMHgyNERELCAweDc5QUIsIDB4NzlBRCwgMHg0MEMyLCAweDc5QUUsIDB4NzlBRSwgMHgyMDBFLA0KLSAgICAweDc5QUYsIDB4NzlBRiwgMHg0MEM1LCAweDc5QjAsIDB4NzlCMCwgMHgyNERCLCAweDc5QjEsIDB4NzlCMSwgMHgxRUI4LA0KLSAgICAweDc5QjIsIDB4NzlCMiwgMHg0MEM2LCAweDc5QjMsIDB4NzlCMywgMHgxQTBBLCAweDc5QjQsIDB4NzlCOCwgMHg0MEM3LA0KLSAgICAweDc5QjksIDB4NzlCOSwgMHgxMEQyLCAweDc5QkEsIDB4NzlCQSwgMHgxMjY0LCAweDc5QkIsIDB4NzlCQiwgMHgwOUQ2LA0KLSAgICAweDc5QkMsIDB4NzlCQywgMHg0MENDLCAweDc5QkQsIDB4NzlCRCwgMHgwQzVBLCAweDc5QkUsIDB4NzlCRSwgMHgwNzgzLA0KLSAgICAweDc5QkYsIDB4NzlCRiwgMHg0MENELCAweDc5QzAsIDB4NzlDMCwgMHgwRkFFLCAweDc5QzEsIDB4NzlDMSwgMHgwREIyLA0KLSAgICAweDc5QzIsIDB4NzlDMiwgMHg0MENFLCAweDc5QzMsIDB4NzlDMywgMHgwRTZCLCAweDc5QzQsIDB4NzlDNSwgMHg0MENGLA0KLSAgICAweDc5QzYsIDB4NzlDNiwgMHgwNkNDLCAweDc5QzcsIDB4NzlDOCwgMHg0MEQxLCAweDc5QzksIDB4NzlDOSwgMHgwNDY1LA0KLSAgICAweDc5Q0EsIDB4NzlDQSwgMHg0MEQzLCAweDc5Q0IsIDB4NzlDQiwgMHgwQzZDLCAweDc5Q0MsIDB4NzlDQywgMHg0MEQ0LA0KLSAgICAweDc5Q0QsIDB4NzlDRCwgMHgxMUQ1LCAweDc5Q0UsIDB4NzlEMCwgMHg0MEQ1LCAweDc5RDEsIDB4NzlEMSwgMHgwOTUzLA0KLSAgICAweDc5RDIsIDB4NzlEMiwgMHgwQUYwLCAweDc5RDMsIDB4NzlENCwgMHg0MEQ4LCAweDc5RDUsIDB4NzlENSwgMHgxQjFELA0KLSAgICAweDc5RDYsIDB4NzlENywgMHg0MERBLCAweDc5RDgsIDB4NzlEOCwgMHgwQURELCAweDc5RDksIDB4NzlERSwgMHg0MERDLA0KLSAgICAweDc5REYsIDB4NzlERiwgMHgxMjNGLCAweDc5RTAsIDB4NzlFMiwgMHg0MEUyLCAweDc5RTMsIDB4NzlFMywgMHgxQjFGLA0KLSAgICAweDc5RTQsIDB4NzlFNCwgMHgwNEY4LCAweDc5RTUsIDB4NzlFNSwgMHg0MEU1LCAweDc5RTYsIDB4NzlFNiwgMHgwQzU1LA0KLSAgICAweDc5RTcsIDB4NzlFNywgMHgxMDE2LCAweDc5RTgsIDB4NzlFOCwgMHg0MEU2LCAweDc5RTksIDB4NzlFOSwgMHgxMUM3LA0KLSAgICAweDc5RUEsIDB4NzlFQSwgMHg0MEU3LCAweDc5RUIsIDB4NzlFQiwgMHgxQjIwLCAweDc5RUMsIDB4NzlFQywgMHg0MEU4LA0KLSAgICAweDc5RUQsIDB4NzlFRCwgMHgxQjFFLCAweDc5RUUsIDB4NzlFRSwgMHg0MEU5LCAweDc5RUYsIDB4NzlFRiwgMHgwODEyLA0KLSAgICAweDc5RjAsIDB4NzlGMCwgMHgwNEVCLCAweDc5RjEsIDB4NzlGNywgMHg0MEVBLCAweDc5RjgsIDB4NzlGOCwgMHgwOEE2LA0KLSAgICAweDc5RjksIDB4NzlGQSwgMHg0MEYxLCAweDc5RkIsIDB4NzlGQiwgMHgxMDRELCAweDc5RkMsIDB4NzlGQywgMHg0MEYzLA0KLSAgICAweDc5RkQsIDB4NzlGRCwgMHgwN0Y1LCAweDc5RkUsIDB4NzlGRiwgMHg0MEY0LCAweDdBMDAsIDB4N0EwMCwgMHgwRjBFLA0KLSAgICAweDdBMDEsIDB4N0EwMSwgMHg0MEY2LCAweDdBMDIsIDB4N0EwMiwgMHgxQjI0LCAweDdBMDMsIDB4N0EwMywgMHgxQjIzLA0KLSAgICAweDdBMDQsIDB4N0EwNSwgMHg0MEY3LCAweDdBMDYsIDB4N0EwNiwgMHgxQjIxLCAweDdBMDcsIDB4N0EwQSwgMHg0MEY5LA0KLSAgICAweDdBMEIsIDB4N0EwQiwgMHgwNEYxLCAweDdBMEMsIDB4N0EwQywgMHg0MEZELCAweDdBMEQsIDB4N0EwRCwgMHgwRDBELA0KLSAgICAweDdBMEUsIDB4N0EwRSwgMHgwREE1LCAweDdBMEYsIDB4N0ExMywgMHg0MEZFLCAweDdBMTQsIDB4N0ExNCwgMHgxQjI2LA0KLSAgICAweDdBMTUsIDB4N0ExNiwgMHg0MTAzLCAweDdBMTcsIDB4N0ExNywgMHgwM0U5LCAweDdBMTgsIDB4N0ExOSwgMHg0MTA1LA0KLSAgICAweDdBMUEsIDB4N0ExQSwgMHgxMUM4LCAweDdBMUIsIDB4N0ExRCwgMHg0MTA3LCAweDdBMUUsIDB4N0ExRSwgMHgxQjI1LA0KLSAgICAweDdBMUYsIDB4N0ExRiwgMHg0MTBBLCAweDdBMjAsIDB4N0EyMCwgMHgwNTEyLCAweDdBMjEsIDB4N0EyMiwgMHg0MTBCLA0KLSAgICAweDdBMjMsIDB4N0EyMywgMHgxRDhGLCAweDdBMjQsIDB4N0EyRCwgMHg0MTBELCAweDdBMkUsIDB4N0EyRSwgMHgyMjk1LA0KLSAgICAweDdBMkYsIDB4N0EzMCwgMHg0MTE3LCAweDdBMzEsIDB4N0EzMSwgMHgxRTgwLCAweDdBMzIsIDB4N0EzMiwgMHg0MTE5LA0KLSAgICAweDdBMzMsIDB4N0EzMywgMHgwRUQ3LCAweDdBMzQsIDB4N0EzNiwgMHg0MTFBLCAweDdBMzcsIDB4N0EzNywgMHgxQjI4LA0KLSAgICAweDdBMzgsIDB4N0EzOCwgMHg0MTFELCAweDdBMzksIDB4N0EzOSwgMHgxQjI3LCAweDdBM0EsIDB4N0EzQSwgMHg0MTFFLA0KLSAgICAweDdBM0IsIDB4N0EzQiwgMHgwNTlGLCAweDdBM0MsIDB4N0EzQywgMHgwODRELCAweDdBM0QsIDB4N0EzRCwgMHgwODExLA0KLSAgICAweDdBM0UsIDB4N0EzRSwgMHg0MTFGLCAweDdBM0YsIDB4N0EzRiwgMHgwNkUwLCAweDdBNDAsIDB4N0E0MCwgMHgyNjc3LA0KLSAgICAweDdBNDEsIDB4N0E0NSwgMHg0MTIwLCAweDdBNDYsIDB4N0E0NiwgMHgwQjI1LCAweDdBNDcsIDB4N0E0QiwgMHg0MTI1LA0KLSAgICAweDdBNEMsIDB4N0E0QywgMHgyNjI0LCAweDdBNEQsIDB4N0E0RCwgMHgxRjY5LCAweDdBNEUsIDB4N0E0RSwgMHgyMjJCLA0KLSAgICAweDdBNEYsIDB4N0E1MCwgMHg0MTJBLCAweDdBNTEsIDB4N0E1MSwgMHgxQjI5LCAweDdBNTIsIDB4N0E1NiwgMHg0MTJDLA0KLSAgICAweDdBNTcsIDB4N0E1NywgMHgwREUwLCAweDdBNTgsIDB4N0E2MCwgMHg0MTMxLCAweDdBNjEsIDB4N0E2MSwgMHgyNTdGLA0KLSAgICAweDdBNjIsIDB4N0E2MiwgMHgxRjVCLCAweDdBNjMsIDB4N0E2OCwgMHg0MTNBLCAweDdBNjksIDB4N0E2OSwgMHgyMTlCLA0KLSAgICAweDdBNkEsIDB4N0E2QSwgMHg0MTQwLCAweDdBNkIsIDB4N0E2QiwgMHgyNjdELCAweDdBNkMsIDB4N0E2RiwgMHg0MTQxLA0KLSAgICAweDdBNzAsIDB4N0E3MCwgMHgxQjJDLCAweDdBNzEsIDB4N0E3MywgMHg0MTQ1LCAweDdBNzQsIDB4N0E3NCwgMHgwRkQxLA0KLSAgICAweDdBNzUsIDB4N0E3NSwgMHg0MTQ4LCAweDdBNzYsIDB4N0E3NiwgMHgwOEVFLCAweDdBNzcsIDB4N0E3NywgMHgwQzZCLA0KLSAgICAweDdBNzgsIDB4N0E3OSwgMHgxQjlBLCAweDdBN0EsIDB4N0E3QSwgMHgwOTYyLCAweDdBN0IsIDB4N0E3RSwgMHg0MTQ5LA0KLSAgICAweDdBN0YsIDB4N0E3RiwgMHgwNTJDLCAweDdBODAsIDB4N0E4MCwgMHgxQjlDLCAweDdBODEsIDB4N0E4MSwgMHgwRTZDLA0KLSAgICAweDdBODIsIDB4N0E4MiwgMHg0MTRELCAweDdBODMsIDB4N0E4MywgMHgwQzUxLCAweDdBODQsIDB4N0E4NCwgMHgxMTRFLA0KLSAgICAweDdBODUsIDB4N0E4NSwgMHg0MTRFLCAweDdBODYsIDB4N0E4NiwgMHgxQjlELCAweDdBODcsIDB4N0E4NywgMHg0MTRGLA0KLSAgICAweDdBODgsIDB4N0E4OCwgMHgxQjlFLCAweDdBODksIDB4N0E4QywgMHg0MTUwLCAweDdBOEQsIDB4N0E4RCwgMHgwQzRDLA0KLSAgICAweDdBOEUsIDB4N0E5MCwgMHg0MTU0LCAweDdBOTEsIDB4N0E5MSwgMHgxMDJCLCAweDdBOTIsIDB4N0E5MiwgMHgxMUNFLA0KLSAgICAweDdBOTMsIDB4N0E5NCwgMHg0MTU3LCAweDdBOTUsIDB4N0E5NSwgMHgxQjlGLCAweDdBOTYsIDB4N0E5NiwgMHgwOEEyLA0KLSAgICAweDdBOTcsIDB4N0E5NywgMHgwNTMzLCAweDdBOTgsIDB4N0E5OCwgMHgwOEVDLCAweDdBOTksIDB4N0E5QiwgMHg0MTU5LA0KLSAgICAweDdBOUMsIDB4N0E5QywgMHgwNTVGLCAweDdBOUQsIDB4N0E5RCwgMHgwRUUwLCAweDdBOUUsIDB4N0E5RSwgMHg0MTVDLA0KLSAgICAweDdBOUYsIDB4N0E5RiwgMHgwOTZDLCAweDdBQTAsIDB4N0FBMCwgMHgxQkExLCAweDdBQTEsIDB4N0FBNCwgMHg0MTVELA0KLSAgICAweDdBQTUsIDB4N0FBNSwgMHgwOTg3LCAweDdBQTYsIDB4N0FBNiwgMHgxQkEwLCAweDdBQTcsIDB4N0FBNywgMHg0MTYxLA0KLSAgICAweDdBQTgsIDB4N0FBOCwgMHgxQkEzLCAweDdBQTksIDB4N0FBOSwgMHgyMUEwLCAweDdBQUEsIDB4N0FBQSwgMHgyMTg2LA0KLSAgICAweDdBQUIsIDB4N0FBQiwgMHg0MTYyLCAweDdBQUMsIDB4N0FBQywgMHgxQkEyLCAweDdBQUQsIDB4N0FBRCwgMHgxQkE0LA0KLSAgICAweDdBQUUsIDB4N0FBRSwgMHgyMEVELCAweDdBQUYsIDB4N0FCMiwgMHg0MTYzLCAweDdBQjMsIDB4N0FCMywgMHgxQkE1LA0KLSAgICAweDdBQjQsIDB4N0FCNSwgMHg0MTY3LCAweDdBQjYsIDB4N0FCNiwgMHgyNUI5LCAweDdBQjcsIDB4N0FCOSwgMHg0MTY5LA0KLSAgICAweDdBQkEsIDB4N0FCQSwgMHgxRkVBLCAweDdBQkIsIDB4N0FCRSwgMHg0MTZDLCAweDdBQkYsIDB4N0FCRiwgMHgwQTQ3LA0KLSAgICAweDdBQzAsIDB4N0FDMywgMHg0MTcwLCAweDdBQzQsIDB4N0FDNCwgMHgxRUE0LCAweDdBQzUsIDB4N0FDNSwgMHgyMEUxLA0KLSAgICAweDdBQzYsIDB4N0FDNiwgMHg0MTc0LCAweDdBQzcsIDB4N0FDNywgMHgyNUI4LCAweDdBQzgsIDB4N0FDOCwgMHgyMjYwLA0KLSAgICAweDdBQzksIDB4N0FDOSwgMHg0MTc1LCAweDdBQ0EsIDB4N0FDQSwgMHgyMEUyLCAweDdBQ0IsIDB4N0FDQiwgMHgwOUVCLA0KLSAgICAweDdBQ0MsIDB4N0FENSwgMHg0MTc2LCAweDdBRDYsIDB4N0FENiwgMHgwRDkxLCAweDdBRDcsIDB4N0FEOCwgMHg0MTgwLA0KLSAgICAweDdBRDksIDB4N0FEOSwgMHgxMTVGLCAweDdBREEsIDB4N0FERCwgMHg0MTgyLCAweDdBREUsIDB4N0FERSwgMHgwOEU5LA0KLSAgICAweDdBREYsIDB4N0FERiwgMHgwOEU4LCAweDdBRTAsIDB4N0FFMCwgMHgxMTYzLCAweDdBRTEsIDB4N0FFMiwgMHg0MTg2LA0KLSAgICAweDdBRTMsIDB4N0FFMywgMHgwOTJGLCAweDdBRTQsIDB4N0FFNCwgMHg0MTg4LCAweDdBRTUsIDB4N0FFNSwgMHgwRTYwLA0KLSAgICAweDdBRTYsIDB4N0FFNiwgMHgxQjk5LCAweDdBRTcsIDB4N0FFOSwgMHg0MTg5LCAweDdBRUEsIDB4N0FFQSwgMHgyMTQxLA0KLSAgICAweDdBRUIsIDB4N0FFQywgMHg0MThDLCAweDdBRUQsIDB4N0FFRCwgMHgwOEIwLCAweDdBRUUsIDB4N0FFRSwgMHg0MThFLA0KLSAgICAweDdBRUYsIDB4N0FFRiwgMHgwNjBBLCAweDdBRjAsIDB4N0FGNSwgMHg0MThGLCAweDdBRjYsIDB4N0FGNiwgMHgxRkM3LA0KLSAgICAweDdBRjcsIDB4N0FGOCwgMHg0MTk1LCAweDdBRjksIDB4N0FGOSwgMHgxMUYwLCAweDdBRkEsIDB4N0FGQSwgMHgxQzYzLA0KLSAgICAweDdBRkIsIDB4N0FGQywgMHg0MTk3LCAweDdBRkQsIDB4N0FGRCwgMHgxQzY0LCAweDdBRkUsIDB4N0FGRSwgMHg0MTk5LA0KLSAgICAweDdBRkYsIDB4N0FGRiwgMHgwNkM4LCAweDdCMDAsIDB4N0IwMiwgMHg0MTlBLCAweDdCMDMsIDB4N0IwNCwgMHgxQzY2LA0KLSAgICAweDdCMDUsIDB4N0IwNSwgMHg0MTlELCAweDdCMDYsIDB4N0IwNiwgMHgwM0Q1LCAweDdCMDcsIDB4N0IwNywgMHg0MTlFLA0KLSAgICAweDdCMDgsIDB4N0IwOCwgMHgxQzY1LCAweDdCMDksIDB4N0IwOSwgMHg0MTlGLCAweDdCMEEsIDB4N0IwQSwgMHgxQzY5LA0KLSAgICAweDdCMEIsIDB4N0IwQiwgMHgwREU2LCAweDdCMEMsIDB4N0IwRSwgMHg0MUEwLCAweDdCMEYsIDB4N0IwRiwgMHgxQzZCLA0KLSAgICAweDdCMTAsIDB4N0IxMCwgMHg0MUEzLCAweDdCMTEsIDB4N0IxMSwgMHgwRjcxLCAweDdCMTIsIDB4N0IxMywgMHg0MUE0LA0KLSAgICAweDdCMTQsIDB4N0IxNCwgMHgwNDMzLCAweDdCMTUsIDB4N0IxNSwgMHgxQzY4LCAweDdCMTYsIDB4N0IxOCwgMHg0MUE2LA0KLSAgICAweDdCMTksIDB4N0IxOSwgMHgxQzZGLCAweDdCMUEsIDB4N0IxQSwgMHg0MUE5LCAweDdCMUIsIDB4N0IxQiwgMHgwNUIyLA0KLSAgICAweDdCMUMsIDB4N0IxRCwgMHg0MUFBLCAweDdCMUUsIDB4N0IxRSwgMHgxQzc3LCAweDdCMUYsIDB4N0IxRiwgMHg0MUFDLA0KLSAgICAweDdCMjAsIDB4N0IyMCwgMHgxQzcyLCAweDdCMjEsIDB4N0IyMywgMHg0MUFELCAweDdCMjQsIDB4N0IyNCwgMHgxQzc0LA0KLSAgICAweDdCMjUsIDB4N0IyNSwgMHgxQzczLCAweDdCMjYsIDB4N0IyNiwgMHgwNjk4LCAweDdCMjcsIDB4N0IyNywgMHg0MUIwLA0KLSAgICAweDdCMjgsIDB4N0IyOCwgMHgwNDI4LCAweDdCMjksIDB4N0IyOSwgMHg0MUIxLCAweDdCMkEsIDB4N0IyQSwgMHgxQzZFLA0KLSAgICAweDdCMkIsIDB4N0IyQiwgMHgxQzZBLCAweDdCMkMsIDB4N0IyQywgMHgwNUJCLCAweDdCMkQsIDB4N0IyRCwgMHg0MUIyLA0KLSAgICAweDdCMkUsIDB4N0IyRSwgMHgxQzcwLCAweDdCMkYsIDB4N0IzMCwgMHg0MUIzLCAweDdCMzEsIDB4N0IzMSwgMHgxQzcxLA0KLSAgICAweDdCMzIsIDB4N0IzMiwgMHg0MUI1LCAweDdCMzMsIDB4N0IzMywgMHgxQzc1LCAweDdCMzQsIDB4N0IzNywgMHg0MUI2LA0KLSAgICAweDdCMzgsIDB4N0IzOCwgMHgxQzZELCAweDdCMzksIDB4N0IzOSwgMHg0MUJBLCAweDdCM0EsIDB4N0IzQSwgMHgwODU2LA0KLSAgICAweDdCM0IsIDB4N0IzQiwgMHg0MUJCLCAweDdCM0MsIDB4N0IzQywgMHgwQTQ2LCAweDdCM0QsIDB4N0IzRCwgMHg0MUJDLA0KLSAgICAweDdCM0UsIDB4N0IzRSwgMHgxQzc2LCAweDdCM0YsIDB4N0I0NCwgMHg0MUJELCAweDdCNDUsIDB4N0I0NSwgMHgxQzdBLA0KLSAgICAweDdCNDYsIDB4N0I0NiwgMHgxRTQxLCAweDdCNDcsIDB4N0I0NywgMHgxQzZDLCAweDdCNDgsIDB4N0I0OCwgMHg0MUMzLA0KLSAgICAweDdCNDksIDB4N0I0OSwgMHgwNUE5LCAweDdCNEEsIDB4N0I0QSwgMHg0MUM0LCAweDdCNEIsIDB4N0I0QiwgMHgwOEJGLA0KLSAgICAweDdCNEMsIDB4N0I0QywgMHgxQzdDLCAweDdCNEQsIDB4N0I0RSwgMHg0MUM1LCAweDdCNEYsIDB4N0I0RiwgMHgwNjQxLA0KLSAgICAweDdCNTAsIDB4N0I1MCwgMHgwOTdELCAweDdCNTEsIDB4N0I1MSwgMHgxMUZELCAweDdCNTIsIDB4N0I1MiwgMHgwRTYzLA0KLSAgICAweDdCNTMsIDB4N0I1MywgMHg0MUM3LCAweDdCNTQsIDB4N0I1NCwgMHgwNTczLCAweDdCNTUsIDB4N0I1NSwgMHg0MUM4LA0KLSAgICAweDdCNTYsIDB4N0I1NiwgMHgwNEE2LCAweDdCNTcsIDB4N0I1NywgMHg0MUM5LCAweDdCNTgsIDB4N0I1OCwgMHgxQzc4LA0KLSAgICAweDdCNTksIDB4N0I1OSwgMHg0MUNBLCAweDdCNUEsIDB4N0I1QSwgMHgxQzc5LCAweDdCNUIsIDB4N0I1QiwgMHgwQ0YxLA0KLSAgICAweDdCNUMsIDB4N0I1QywgMHg0MUNCLCAweDdCNUQsIDB4N0I1RCwgMHgxQzdELCAweDdCNUUsIDB4N0I1RiwgMHg0MUNDLA0KLSAgICAweDdCNjAsIDB4N0I2MCwgMHgxQzdFLCAweDdCNjEsIDB4N0I2MSwgMHg0MUNFLCAweDdCNjIsIDB4N0I2MiwgMHgxQzgxLA0KLSAgICAweDdCNjMsIDB4N0I2NiwgMHg0MUNGLCAweDdCNjcsIDB4N0I2NywgMHgyNUU0LCAweDdCNjgsIDB4N0I2RCwgMHg0MUQzLA0KLSAgICAweDdCNkUsIDB4N0I2RSwgMHgxQzdGLCAweDdCNkYsIDB4N0I3MCwgMHg0MUQ5LCAweDdCNzEsIDB4N0I3MSwgMHgxQzgzLA0KLSAgICAweDdCNzIsIDB4N0I3MiwgMHgxQzgyLCAweDdCNzMsIDB4N0I3NCwgMHg0MURCLCAweDdCNzUsIDB4N0I3NSwgMHgxQzdCLA0KLSAgICAweDdCNzYsIDB4N0I3NiwgMHg0MURELCAweDdCNzcsIDB4N0I3NywgMHgwOTc3LCAweDdCNzgsIDB4N0I3OCwgMHg0MURFLA0KLSAgICAweDdCNzksIDB4N0I3OSwgMHgwNTE0LCAweDdCN0EsIDB4N0I3QSwgMHg0MURGLCAweDdCN0IsIDB4N0I3QiwgMHgxQzgwLA0KLSAgICAweDdCN0MsIDB4N0I3RCwgMHg0MUUwLCAweDdCN0UsIDB4N0I3RSwgMHgwQzI2LCAweDdCN0YsIDB4N0I3RiwgMHg0MUUyLA0KLSAgICAweDdCODAsIDB4N0I4MCwgMHgwODY1LCAweDdCODEsIDB4N0I4NCwgMHg0MUUzLCAweDdCODUsIDB4N0I4NSwgMHgxQzhCLA0KLSAgICAweDdCODYsIDB4N0I4QSwgMHg0MUU3LCAweDdCOEIsIDB4N0I4QiwgMHgxRjg2LCAweDdCOEMsIDB4N0I4QywgMHg0MUVDLA0KLSAgICAweDdCOEQsIDB4N0I4RCwgMHgwNzE4LCAweDdCOEUsIDB4N0I4RiwgMHg0MUVELCAweDdCOTAsIDB4N0I5MCwgMHgxQzg0LA0KLSAgICAweDdCOTEsIDB4N0I5MywgMHg0MUVGLCAweDdCOTQsIDB4N0I5NCwgMHgwNDc0LCAweDdCOTUsIDB4N0I5NSwgMHgwODEzLA0KLSAgICAweDdCOTYsIDB4N0I5NiwgMHg0MUYyLCAweDdCOTcsIDB4N0I5NywgMHgwREQ4LCAweDdCOTgsIDB4N0I5QiwgMHg0MUYzLA0KLSAgICAweDdCOUMsIDB4N0I5QywgMHgxQzhELCAweDdCOUQsIDB4N0I5RCwgMHgxQzg5LCAweDdCOUUsIDB4N0JBMCwgMHg0MUY3LA0KLSAgICAweDdCQTEsIDB4N0JBMSwgMHgwNzM1LCAweDdCQTIsIDB4N0JBMiwgMHgxQzhFLCAweDdCQTMsIDB4N0JBNSwgMHg0MUZBLA0KLSAgICAweDdCQTYsIDB4N0JBNywgMHgxQzg1LCAweDdCQTgsIDB4N0JBOCwgMHgxQzhBLCAweDdCQTksIDB4N0JBOSwgMHgwQTg4LA0KLSAgICAweDdCQUEsIDB4N0JBQSwgMHgxQzhDLCAweDdCQUIsIDB4N0JBQiwgMHgxQzhGLCAweDdCQUMsIDB4N0JBQywgMHgxQzg4LA0KLSAgICAweDdCQUQsIDB4N0JBRCwgMHgwODcwLCAweDdCQUUsIDB4N0JCMCwgMHg0MUZELCAweDdCQjEsIDB4N0JCMSwgMHgwRjUxLA0KLSAgICAweDdCQjIsIDB4N0JCMywgMHg0MjAwLCAweDdCQjQsIDB4N0JCNCwgMHgxQzkwLCAweDdCQjUsIDB4N0JCNywgMHg0MjAyLA0KLSAgICAweDdCQjgsIDB4N0JCOCwgMHgxQzg3LCAweDdCQjksIDB4N0JCRiwgMHg0MjA1LCAweDdCQzAsIDB4N0JDMCwgMHgxRkIzLA0KLSAgICAweDdCQzEsIDB4N0JDMSwgMHgxQzkyLCAweDdCQzIsIDB4N0JDMywgMHg0MjBDLCAweDdCQzQsIDB4N0JDNCwgMHgxRUVGLA0KLSAgICAweDdCQzUsIDB4N0JDNSwgMHg0MjBFLCAweDdCQzYsIDB4N0JDNiwgMHgxMjBBLCAweDdCQzcsIDB4N0JDNywgMHgwQkM5LA0KLSAgICAweDdCQzgsIDB4N0JDOCwgMHg0MjBGLCAweDdCQzksIDB4N0JDOSwgMHgyMkE0LCAweDdCQ0EsIDB4N0JDQSwgMHg0MjEwLA0KLSAgICAweDdCQ0IsIDB4N0JDQiwgMHgyNUU4LCAweDdCQ0MsIDB4N0JDQywgMHgxQzkzLCAweDdCQ0QsIDB4N0JEMCwgMHg0MjExLA0KLSAgICAweDdCRDEsIDB4N0JEMSwgMHgxQzkxLCAweDdCRDIsIDB4N0JEMiwgMHg0MjE1LCAweDdCRDMsIDB4N0JEMywgMHgwQTRGLA0KLSAgICAweDdCRDQsIDB4N0JEOCwgMHg0MjE2LCAweDdCRDksIDB4N0JEOSwgMHgwNkQ4LCAweDdCREEsIDB4N0JEQSwgMHgxQzk1LA0KLSAgICAweDdCREIsIDB4N0JEQywgMHg0MjFCLCAweDdCREQsIDB4N0JERCwgMHgxQzk0LCAweDdCREUsIDB4N0JFMCwgMHg0MjFELA0KLSAgICAweDdCRTEsIDB4N0JFMSwgMHgwNTVFLCAweDdCRTIsIDB4N0JFMywgMHg0MjIwLCAweDdCRTQsIDB4N0JFNCwgMHgyNUUzLA0KLSAgICAweDdCRTUsIDB4N0JFNiwgMHgxQzk2LCAweDdCRTcsIDB4N0JFOCwgMHg0MjIyLCAweDdCRTksIDB4N0JFOSwgMHgyMTExLA0KLSAgICAweDdCRUEsIDB4N0JFQSwgMHgxQzk4LCAweDdCRUIsIDB4N0JFRCwgMHg0MjI0LCAweDdCRUUsIDB4N0JFRSwgMHgwOUE1LA0KLSAgICAweDdCRUYsIDB4N0JGMCwgMHg0MjI3LCAweDdCRjEsIDB4N0JGMSwgMHgwOUQ0LCAweDdCRjIsIDB4N0JGMiwgMHg0MjI5LA0KLSAgICAweDdCRjMsIDB4N0JGMywgMHgyNUU2LCAweDdCRjQsIDB4N0JGNiwgMHg0MjJBLCAweDdCRjcsIDB4N0JGNywgMHgwQkIyLA0KLSAgICAweDdCRjgsIDB4N0JGQiwgMHg0MjJELCAweDdCRkMsIDB4N0JGQywgMHgxQzlCLCAweDdCRkQsIDB4N0JGRCwgMHg0MjMxLA0KLSAgICAweDdCRkUsIDB4N0JGRSwgMHgxQzlBLCAweDdCRkYsIDB4N0JGRiwgMHg0MjMyLCAweDdDMDAsIDB4N0MwMCwgMHgyNUU3LA0KLSAgICAweDdDMDEsIDB4N0MwNiwgMHg0MjMzLCAweDdDMDcsIDB4N0MwNywgMHgwNTVCLCAweDdDMDgsIDB4N0MwQSwgMHg0MjM5LA0KLSAgICAweDdDMEIsIDB4N0MwQiwgMHgxQzlFLCAweDdDMEMsIDB4N0MwQywgMHgxQzk5LCAweDdDMEQsIDB4N0MwRCwgMHgyMDQxLA0KLSAgICAweDdDMEUsIDB4N0MwRSwgMHg0MjNDLCAweDdDMEYsIDB4N0MwRiwgMHgxQzlDLCAweDdDMTAsIDB4N0MxNSwgMHg0MjNELA0KLSAgICAweDdDMTYsIDB4N0MxNiwgMHgxQzlELCAweDdDMTcsIDB4N0MxRCwgMHg0MjQzLCAweDdDMUUsIDB4N0MxRSwgMHgyNUVBLA0KLSAgICAweDdDMUYsIDB4N0MxRiwgMHgxQzlGLCAweDdDMjAsIDB4N0MyMCwgMHg0MjRBLCAweDdDMjEsIDB4N0MyMSwgMHgxRjhGLA0KLSAgICAweDdDMjIsIDB4N0MyMiwgMHg0MjRCLCAweDdDMjMsIDB4N0MyMywgMHgyNUVDLCAweDdDMjQsIDB4N0MyNSwgMHg0MjRDLA0KLSAgICAweDdDMjYsIDB4N0MyNiwgMHgxQ0ExLCAweDdDMjcsIDB4N0MyNywgMHgwN0RFLCAweDdDMjgsIDB4N0MyOSwgMHg0MjRFLA0KLSAgICAweDdDMkEsIDB4N0MyQSwgMHgxQ0EwLCAweDdDMkIsIDB4N0MyQiwgMHgyNUVCLCAweDdDMkMsIDB4N0MzNywgMHg0MjUwLA0KLSAgICAweDdDMzgsIDB4N0MzOCwgMHgxQ0EyLCAweDdDMzksIDB4N0MzQywgMHg0MjVDLCAweDdDM0QsIDB4N0MzRCwgMHgyMEQwLA0KLSAgICAweDdDM0UsIDB4N0MzRSwgMHgyMDFELCAweDdDM0YsIDB4N0MzRiwgMHgwNDg1LCAweDdDNDAsIDB4N0M0MCwgMHgxQ0E0LA0KLSAgICAweDdDNDEsIDB4N0M0MSwgMHgxQ0EzLCAweDdDNDIsIDB4N0M0MiwgMHg0MjYwLCAweDdDNDMsIDB4N0M0MywgMHgxRkY3LA0KLSAgICAweDdDNDQsIDB4N0M0QiwgMHg0MjYxLCAweDdDNEMsIDB4N0M0QywgMHgxRThELCAweDdDNEQsIDB4N0M0RCwgMHgwODIxLA0KLSAgICAweDdDNEUsIDB4N0M1QiwgMHg0MjY5LCAweDdDNUMsIDB4N0M1QywgMHgyNUU5LCAweDdDNUQsIDB4N0M1RSwgMHg0Mjc3LA0KLSAgICAweDdDNUYsIDB4N0M1RiwgMHgyNUVFLCAweDdDNjAsIDB4N0M2MCwgMHgyMDNBLCAweDdDNjEsIDB4N0M2MywgMHg0Mjc5LA0KLSAgICAweDdDNjQsIDB4N0M2NCwgMHgyNjkzLCAweDdDNjUsIDB4N0M2OCwgMHg0MjdDLCAweDdDNjksIDB4N0M2OSwgMHgyNUU1LA0KLSAgICAweDdDNkEsIDB4N0M2QSwgMHgyNUVELCAweDdDNkIsIDB4N0M2QiwgMHg0MjgwLCAweDdDNkMsIDB4N0M2QywgMHgyMDA5LA0KLSAgICAweDdDNkQsIDB4N0M2RCwgMHg0MjgxLCAweDdDNkUsIDB4N0M2RSwgMHgyMDY1LCAweDdDNkYsIDB4N0M3MSwgMHg0MjgyLA0KLSAgICAweDdDNzIsIDB4N0M3MiwgMHgyNkEzLCAweDdDNzMsIDB4N0M3MywgMHgwQURDLCAweDdDNzQsIDB4N0M3NCwgMHgxMkY1LA0KLSAgICAweDdDNzUsIDB4N0M3QSwgMHg0Mjg1LCAweDdDN0IsIDB4N0M3QiwgMHgwOUNCLCAweDdDN0MsIDB4N0M3QywgMHgxQ0NBLA0KLSAgICAweDdDN0QsIDB4N0M3RCwgMHgxMjJFLCAweDdDN0UsIDB4N0M4OCwgMHg0MjhCLCAweDdDODksIDB4N0M4OSwgMHgwNjc4LA0KLSAgICAweDdDOEEsIDB4N0M5MCwgMHg0Mjk2LCAweDdDOTEsIDB4N0M5MSwgMHgxQ0NDLCAweDdDOTIsIDB4N0M5MiwgMHgwOUVDLA0KLSAgICAweDdDOTMsIDB4N0M5NCwgMHg0MjlELCAweDdDOTUsIDB4N0M5NSwgMHgwQkU4LCAweDdDOTYsIDB4N0M5NiwgMHg0MjlGLA0KLSAgICAweDdDOTcsIDB4N0M5NywgMHgwNTU5LCAweDdDOTgsIDB4N0M5OCwgMHgxMTU0LCAweDdDOTksIDB4N0M5QiwgMHg0MkEwLA0KLSAgICAweDdDOUMsIDB4N0M5QywgMHgxQ0NFLCAweDdDOUQsIDB4N0M5RCwgMHgxQ0NELCAweDdDOUUsIDB4N0M5RSwgMHgxQ0NGLA0KLSAgICAweDdDOUYsIDB4N0M5RiwgMHgwRENGLCAweDdDQTAsIDB4N0NBMSwgMHg0MkEzLCAweDdDQTIsIDB4N0NBMiwgMHgxQ0QwLA0KLSAgICAweDdDQTMsIDB4N0NBMywgMHg0MkE1LCAweDdDQTQsIDB4N0NBNCwgMHgxMTA0LCAweDdDQTUsIDB4N0NBNSwgMHgxMURGLA0KLSAgICAweDdDQTYsIDB4N0NBOSwgMHg0MkE2LCAweDdDQUEsIDB4N0NBQSwgMHgwNjdELCAweDdDQUIsIDB4N0NBRCwgMHg0MkFBLA0KLSAgICAweDdDQUUsIDB4N0NBRSwgMHgwQTAxLCAweDdDQUYsIDB4N0NCMCwgMHg0MkFELCAweDdDQjEsIDB4N0NCMSwgMHgwQTA0LA0KLSAgICAweDdDQjIsIDB4N0NCMiwgMHgxQ0QxLCAweDdDQjMsIDB4N0NCMywgMHgwOERCLCAweDdDQjQsIDB4N0NCOCwgMHg0MkFGLA0KLSAgICAweDdDQjksIDB4N0NCOSwgMHgwNTY1LCAweDdDQkEsIDB4N0NCQiwgMHg0MkI0LCAweDdDQkMsIDB4N0NCRCwgMHgxQ0QyLA0KLSAgICAweDdDQkUsIDB4N0NCRSwgMHgwOERBLCAweDdDQkYsIDB4N0NDMCwgMHg0MkI2LCAweDdDQzEsIDB4N0NDMSwgMHgxQ0Q0LA0KLSAgICAweDdDQzIsIDB4N0NDNCwgMHg0MkI4LCAweDdDQzUsIDB4N0NDNSwgMHgxQ0Q5LCAweDdDQzYsIDB4N0NDNiwgMHg0MkJCLA0KLSAgICAweDdDQzcsIDB4N0NDNywgMHgxQ0Q1LCAweDdDQzgsIDB4N0NDOCwgMHgxQ0Q4LCAweDdDQzksIDB4N0NDOSwgMHg0MkJDLA0KLSAgICAweDdDQ0EsIDB4N0NDQSwgMHgwN0I0LCAweDdDQ0IsIDB4N0NDQiwgMHg0MkJELCAweDdDQ0MsIDB4N0NDRCwgMHgxQ0Q2LA0KLSAgICAweDdDQ0UsIDB4N0NENCwgMHg0MkJFLCAweDdDRDUsIDB4N0NENSwgMHgwNkRELCAweDdDRDYsIDB4N0NENiwgMHgwRTFBLA0KLSAgICAweDdDRDcsIDB4N0NENywgMHgxQ0RBLCAweDdDRDgsIDB4N0NEOCwgMHg0MkM1LCAweDdDRDksIDB4N0NEOSwgMHgwNEExLA0KLSAgICAweDdDREEsIDB4N0NEQiwgMHg0MkM2LCAweDdDREMsIDB4N0NEQywgMHgwQUQ4LCAweDdDREQsIDB4N0NERCwgMHgyNUY1LA0KLSAgICAweDdDREUsIDB4N0NERSwgMHgxRUZDLCAweDdDREYsIDB4N0NERiwgMHgxMTI2LCAweDdDRTAsIDB4N0NFMCwgMHgwOTQ0LA0KLSAgICAweDdDRTEsIDB4N0NFNiwgMHg0MkM4LCAweDdDRTcsIDB4N0NFNywgMHgyMDI0LCAweDdDRTgsIDB4N0NFOCwgMHgxQ0RCLA0KLSAgICAweDdDRTksIDB4N0NFRSwgMHg0MkNFLCAweDdDRUYsIDB4N0NFRiwgMHgwQjc1LCAweDdDRjAsIDB4N0NGMCwgMHgyNjlCLA0KLSAgICAweDdDRjEsIDB4N0NGMSwgMHg0MkQ0LCAweDdDRjIsIDB4N0NGMiwgMHgyNUYzLCAweDdDRjMsIDB4N0NGMywgMHg0MkQ1LA0KLSAgICAweDdDRjQsIDB4N0NGNCwgMHgyMkQ5LCAweDdDRjUsIDB4N0NGNSwgMHg0MkQ2LCAweDdDRjYsIDB4N0NGNiwgMHgyNUY0LA0KLSAgICAweDdDRjcsIDB4N0NGNywgMHg0MkQ3LCAweDdDRjgsIDB4N0NGOCwgMHgxQ0U3LCAweDdDRjksIDB4N0NGOSwgMHgyNDFCLA0KLSAgICAweDdDRkEsIDB4N0NGQSwgMHg0MkQ4LCAweDdDRkIsIDB4N0NGQiwgMHgwRjIyLCAweDdDRkMsIDB4N0NGRCwgMHg0MkQ5LA0KLSAgICAweDdDRkUsIDB4N0NGRSwgMHgxRkM4LCAweDdDRkYsIDB4N0NGRiwgMHg0MkRCLCAweDdEMDAsIDB4N0QwMCwgMHgxRjdCLA0KLSAgICAweDdEMDEsIDB4N0QwMSwgMHg0MkRDLCAweDdEMDIsIDB4N0QwMiwgMHgyNDFELCAweDdEMDMsIDB4N0QwMywgMHg0MkRELA0KLSAgICAweDdEMDQsIDB4N0QwNCwgMHgyMjRDLCAweDdEMDUsIDB4N0QwNSwgMHgxRjQ4LCAweDdEMDYsIDB4N0QwNiwgMHgyNDFDLA0KLSAgICAweDdEMDcsIDB4N0QwOCwgMHgyNDFFLCAweDdEMDksIDB4N0QwOSwgMHgyMEZGLCAweDdEMEEsIDB4N0QwQSwgMHgwRUQ4LA0KLSAgICAweDdEMEIsIDB4N0QwQiwgMHgyMTlBLCAweDdEMEMsIDB4N0QwQywgMHg0MkRFLCAweDdEMEQsIDB4N0QwRCwgMHgyMDkxLA0KLSAgICAweDdEMEUsIDB4N0QwRiwgMHg0MkRGLCAweDdEMTAsIDB4N0QxMCwgMHgyMEE3LCAweDdEMTEsIDB4N0QxMiwgMHg0MkUxLA0KLSAgICAweDdEMTMsIDB4N0QxMywgMHgyNDIzLCAweDdEMTQsIDB4N0QxNCwgMHgxRTlCLCAweDdEMTUsIDB4N0QxNSwgMHgyNDIyLA0KLSAgICAweDdEMTYsIDB4N0QxNiwgMHg0MkUzLCAweDdEMTcsIDB4N0QxNywgMHgyMTEwLCAweDdEMTgsIDB4N0QxOCwgMHg0MkU0LA0KLSAgICAweDdEMTksIDB4N0QxOSwgMHgyMjhELCAweDdEMUEsIDB4N0QxQSwgMHgxRjcxLCAweDdEMUIsIDB4N0QxQiwgMHgxRUY4LA0KLSAgICAweDdEMUMsIDB4N0QxQywgMHgyNDIxLCAweDdEMUQsIDB4N0QxRiwgMHg0MkU1LCAweDdEMjAsIDB4N0QyMCwgMHgwRENELA0KLSAgICAweDdEMjEsIDB4N0QyMSwgMHgxRUYzLCAweDdEMjIsIDB4N0QyMiwgMHgwREVDLCAweDdEMjMsIDB4N0QyNiwgMHg0MkU4LA0KLSAgICAweDdEMjcsIDB4N0QyNywgMHgwOEM1LCAweDdEMjgsIDB4N0QyQSwgMHg0MkVDLCAweDdEMkIsIDB4N0QyQiwgMHgxMjJDLA0KLSAgICAweDdEMkMsIDB4N0QyRSwgMHg0MkVGLCAweDdEMkYsIDB4N0QyRiwgMHgwOUM2LCAweDdEMzAsIDB4N0QzMCwgMHgyMUIxLA0KLSAgICAweDdEMzEsIDB4N0QzMSwgMHgyNDI2LCAweDdEMzIsIDB4N0QzMiwgMHgyNDI1LCAweDdEMzMsIDB4N0QzMywgMHgyMTIwLA0KLSAgICAweDdEMzQsIDB4N0QzOCwgMHg0MkYyLCAweDdEMzksIDB4N0QzOSwgMHgyMTFBLCAweDdEM0EsIDB4N0QzQSwgMHgyNDI0LA0KLSAgICAweDdEM0IsIDB4N0QzQiwgMHg0MkY3LCAweDdEM0MsIDB4N0QzQywgMHgyNDI4LCAweDdEM0QsIDB4N0QzRSwgMHg0MkY4LA0KLSAgICAweDdEM0YsIDB4N0QzRiwgMHgyNDJBLCAweDdENDAsIDB4N0Q0MCwgMHgyNDI5LCAweDdENDEsIDB4N0Q0MSwgMHg0MkZBLA0KLSAgICAweDdENDIsIDB4N0Q0MiwgMHgyMjk0LCAweDdENDMsIDB4N0Q0MywgMHg0MkZCLCAweDdENDQsIDB4N0Q0NCwgMHgyMkJFLA0KLSAgICAweDdENDUsIDB4N0Q0NSwgMHg0MkZDLCAweDdENDYsIDB4N0Q0NiwgMHgxRTMxLCAweDdENDcsIDB4N0Q0RCwgMHg0MkZELA0KLSAgICAweDdENEUsIDB4N0Q0RSwgMHgyNDJDLCAweDdENEYsIDB4N0Q0RiwgMHg0MzA0LCAweDdENTAsIDB4N0Q1MCwgMHgxRkI1LA0KLSAgICAweDdENTEsIDB4N0Q1QywgMHg0MzA1LCAweDdENUQsIDB4N0Q1RCwgMHgyNDJCLCAweDdENUUsIDB4N0Q1RSwgMHgxRkFGLA0KLSAgICAweDdENUYsIDB4N0Q2MCwgMHg0MzExLCAweDdENjEsIDB4N0Q2MSwgMHgyMDY4LCAweDdENjIsIDB4N0Q2MiwgMHgyMUU0LA0KLSAgICAweDdENjMsIDB4N0Q2NSwgMHg0MzEzLCAweDdENjYsIDB4N0Q2NiwgMHgxRjIxLCAweDdENjcsIDB4N0Q2NywgMHg0MzE2LA0KLSAgICAweDdENjgsIDB4N0Q2OCwgMHgyMTAxLCAweDdENjksIDB4N0Q2RCwgMHg0MzE3LCAweDdENkUsIDB4N0Q2RSwgMHgwRkMwLA0KLSAgICAweDdENkYsIDB4N0Q3MCwgMHg0MzFDLCAweDdENzEsIDB4N0Q3MSwgMHgyMTdDLCAweDdENzIsIDB4N0Q3MiwgMHgyMTRBLA0KLSAgICAweDdENzMsIDB4N0Q3MywgMHgyNDJELCAweDdENzQsIDB4N0Q3NSwgMHg0MzFFLCAweDdENzYsIDB4N0Q3NiwgMHgxRkQ0LA0KLSAgICAweDdENzcsIDB4N0Q3NywgMHgxQ0U4LCAweDdENzgsIDB4N0Q3OCwgMHg0MzIwLCAweDdENzksIDB4N0Q3OSwgMHgxRkQxLA0KLSAgICAweDdEN0EsIDB4N0Q4MCwgMHg0MzIxLCAweDdEODEsIDB4N0Q4MSwgMHgxRTMzLCAweDdEODIsIDB4N0Q4MiwgMHg0MzI4LA0KLSAgICAweDdEODMsIDB4N0Q4MywgMHgyNDJGLCAweDdEODQsIDB4N0Q4NSwgMHg0MzI5LCAweDdEODYsIDB4N0Q4NiwgMHgyNDJFLA0KLSAgICAweDdEODcsIDB4N0Q4NywgMHg0MzJCLCAweDdEODgsIDB4N0Q4OCwgMHgyNDMwLCAweDdEODksIDB4N0Q4OSwgMHgyMURCLA0KLSAgICAweDdEOEEsIDB4N0Q4RSwgMHg0MzJDLCAweDdEOEYsIDB4N0Q4RiwgMHgyMTU4LCAweDdEOTAsIDB4N0Q5MiwgMHg0MzMxLA0KLSAgICAweDdEOTMsIDB4N0Q5MywgMHgxRkMyLCAweDdEOTQsIDB4N0Q5QiwgMHg0MzM0LCAweDdEOUMsIDB4N0Q5QywgMHgyMkI5LA0KLSAgICAweDdEOUQsIDB4N0Q5RCwgMHg0MzNDLCAweDdEOUUsIDB4N0Q5RSwgMHgyNDM2LCAweDdEOUYsIDB4N0RBMSwgMHg0MzNELA0KLSAgICAweDdEQTIsIDB4N0RBMiwgMHgxRThFLCAweDdEQTMsIDB4N0RBMywgMHgyNDM5LCAweDdEQTQsIDB4N0RBNSwgMHg0MzQwLA0KLSAgICAweDdEQTYsIDB4N0RBNiwgMHgxQ0U5LCAweDdEQTcsIDB4N0RBQSwgMHg0MzQyLCAweDdEQUIsIDB4N0RBQiwgMHgyMUM1LA0KLSAgICAweDdEQUMsIDB4N0RBQywgMHgyNDM3LCAweDdEQUQsIDB4N0RBRCwgMHgyMTkyLCAweDdEQUUsIDB4N0RBRSwgMHgxQ0VBLA0KLSAgICAweDdEQUYsIDB4N0RBRiwgMHg0MzQ2LCAweDdEQjAsIDB4N0RCMCwgMHgyNDNBLCAweDdEQjEsIDB4N0RCMSwgMHgxRjE5LA0KLSAgICAweDdEQjIsIDB4N0RCMiwgMHgyMThDLCAweDdEQjMsIDB4N0RCMywgMHgxRTQwLCAweDdEQjQsIDB4N0RCNCwgMHgyMkIzLA0KLSAgICAweDdEQjUsIDB4N0RCNywgMHg0MzQ3LCAweDdEQjgsIDB4N0RCOCwgMHgyMDVGLCAweDdEQjksIDB4N0RCOSwgMHgyNDM4LA0KLSAgICAweDdEQkEsIDB4N0RCQSwgMHgyNDMyLCAweDdEQkIsIDB4N0RCQiwgMHgyMjc0LCAweDdEQkMsIDB4N0RCQywgMHg0MzRBLA0KLSAgICAweDdEQkQsIDB4N0RCRCwgMHgxRTlDLCAweDdEQkUsIDB4N0RCRSwgMHgyNDMxLCAweDdEQkYsIDB4N0RCRiwgMHgyMDg1LA0KLSAgICAweDdEQzAsIDB4N0RDMywgMHg0MzRCLCAweDdEQzQsIDB4N0RDNCwgMHgyNDM1LCAweDdEQzUsIDB4N0RDNiwgMHg0MzRGLA0KLSAgICAweDdEQzcsIDB4N0RDNywgMHgyNDNCLCAweDdEQzgsIDB4N0RDOSwgMHg0MzUxLCAweDdEQ0EsIDB4N0RDQSwgMHgxRkI3LA0KLSAgICAweDdEQ0IsIDB4N0RDQiwgMHgyNDMzLCAweDdEQ0MsIDB4N0REMCwgMHg0MzUzLCAweDdERDEsIDB4N0REMSwgMHgyMDU0LA0KLSAgICAweDdERDIsIDB4N0REMiwgMHgyMURFLCAweDdERDMsIDB4N0REMywgMHg0MzU4LCAweDdERDQsIDB4N0RENCwgMHgyNDM0LA0KLSAgICAweDdERDUsIDB4N0RENiwgMHg0MzU5LCAweDdERDcsIDB4N0RENywgMHgyNDNELCAweDdERDgsIDB4N0REOCwgMHgxRjg5LA0KLSAgICAweDdERDksIDB4N0REOSwgMHgyNDNDLCAweDdEREEsIDB4N0REQywgMHg0MzVCLCAweDdEREQsIDB4N0RERCwgMHgxRjZFLA0KLSAgICAweDdEREUsIDB4N0RERSwgMHgxRUQ4LCAweDdEREYsIDB4N0RERiwgMHg0MzVFLCAweDdERTAsIDB4N0RFMCwgMHgxRUJGLA0KLSAgICAweDdERTEsIDB4N0RFMSwgMHgyNDQ1LCAweDdERTIsIDB4N0RFMiwgMHg0MzVGLCAweDdERTMsIDB4N0RFMywgMHgyMjQ5LA0KLSAgICAweDdERTQsIDB4N0RFNSwgMHg0MzYwLCAweDdERTYsIDB4N0RFNiwgMHgyNDQxLCAweDdERTcsIDB4N0RFNywgMHg0MzYyLA0KLSAgICAweDdERTgsIDB4N0RFOCwgMHgxRTQ3LCAweDdERTksIDB4N0RFOSwgMHgxRjU2LCAweDdERUEsIDB4N0RFQiwgMHg0MzYzLA0KLSAgICAweDdERUMsIDB4N0RFQywgMHgyMDg2LCAweDdERUQsIDB4N0RFRSwgMHg0MzY1LCAweDdERUYsIDB4N0RFRiwgMHgyMTk2LA0KLSAgICAweDdERjAsIDB4N0RGMCwgMHg0MzY3LCAweDdERjEsIDB4N0RGMSwgMHgyNDQzLCAweDdERjIsIDB4N0RGMiwgMHgyNDNGLA0KLSAgICAweDdERjMsIDB4N0RGMywgMHg0MzY4LCAweDdERjQsIDB4N0RGNCwgMHgyMDIzLCAweDdERjUsIDB4N0RGNSwgMHg0MzY5LA0KLSAgICAweDdERjYsIDB4N0RGNiwgMHgyNDQyLCAweDdERjcsIDB4N0RGOCwgMHg0MzZBLCAweDdERjksIDB4N0RGOSwgMHgyNDNFLA0KLSAgICAweDdERkEsIDB4N0RGQSwgMHg0MzZDLCAweDdERkIsIDB4N0RGQiwgMHgyNkE2LCAweDdERkMsIDB4N0RGRiwgMHg0MzZELA0KLSAgICAweDdFMDAsIDB4N0UwNywgMHg0MzcxLCAweDdFMDgsIDB4N0UwOCwgMHgyMzRFLCAweDdFMDksIDB4N0UwOSwgMHgyNDQ2LA0KLSAgICAweDdFMEEsIDB4N0UwQSwgMHgyNDRCLCAweDdFMEIsIDB4N0UwQiwgMHgyNDQ0LCAweDdFMEMsIDB4N0UwRiwgMHg0Mzc5LA0KLSAgICAweDdFMTAsIDB4N0UxMCwgMHgyNDI3LCAweDdFMTEsIDB4N0UxMSwgMHgyNDRDLCAweDdFMTIsIDB4N0UxQSwgMHg0MzdELA0KLSAgICAweDdFMUIsIDB4N0UxQiwgMHgxRjBGLCAweDdFMUMsIDB4N0UxQywgMHg0Mzg2LCAweDdFMUQsIDB4N0UxRCwgMHgyNDQ3LA0KLSAgICAweDdFMUUsIDB4N0UxRSwgMHgyNDQ5LCAweDdFMUYsIDB4N0UxRiwgMHgyNDQ4LCAweDdFMjAsIDB4N0UyMiwgMHg0Mzg3LA0KLSAgICAweDdFMjMsIDB4N0UyMywgMHgyMUMyLCAweDdFMjQsIDB4N0UyNiwgMHg0MzhBLCAweDdFMjcsIDB4N0UyNywgMHgyMTZFLA0KLSAgICAweDdFMjgsIDB4N0UyQSwgMHg0MzhELCAweDdFMkIsIDB4N0UyQiwgMHgxRjAzLCAweDdFMkMsIDB4N0UyQywgMHg0MzkwLA0KLSAgICAweDdFMkQsIDB4N0UyRCwgMHgyNDRBLCAweDdFMkUsIDB4N0UyRSwgMHgyMTVDLCAweDdFMkYsIDB4N0UzMCwgMHg0MzkxLA0KLSAgICAweDdFMzEsIDB4N0UzMSwgMHgyMkJCLCAweDdFMzIsIDB4N0UzMiwgMHgyNDUwLCAweDdFMzMsIDB4N0UzMywgMHg0MzkzLA0KLSAgICAweDdFMzQsIDB4N0UzNCwgMHgyNjk0LCAweDdFMzUsIDB4N0UzNSwgMHgyNDRGLCAweDdFMzYsIDB4N0UzNiwgMHgyNUY2LA0KLSAgICAweDdFMzcsIDB4N0UzNywgMHgyMDUxLCAweDdFMzgsIDB4N0UzOCwgMHg0Mzk0LCAweDdFMzksIDB4N0UzOSwgMHgyNDRFLA0KLSAgICAweDdFM0EsIDB4N0UzQSwgMHg0Mzk1LCAweDdFM0IsIDB4N0UzQiwgMHgxREZCLCAweDdFM0MsIDB4N0UzQywgMHg0Mzk2LA0KLSAgICAweDdFM0QsIDB4N0UzRCwgMHgyMkJBLCAweDdFM0UsIDB4N0UzRSwgMHgxRjZELCAweDdFM0YsIDB4N0U0MCwgMHg0Mzk3LA0KLSAgICAweDdFNDEsIDB4N0U0MSwgMHgwNjRFLCAweDdFNDIsIDB4N0U0NCwgMHg0Mzk5LCAweDdFNDUsIDB4N0U0NSwgMHgyNDUyLA0KLSAgICAweDdFNDYsIDB4N0U0NiwgMHgyNDUxLCAweDdFNDcsIDB4N0U0NywgMHgxQ0VCLCAweDdFNDgsIDB4N0U1MSwgMHg0MzlDLA0KLSAgICAweDdFNTIsIDB4N0U1MiwgMHgyNDU1LCAweDdFNTMsIDB4N0U1MywgMHg0M0E2LCAweDdFNTQsIDB4N0U1NCwgMHgyMjg5LA0KLSAgICAweDdFNTUsIDB4N0U1NSwgMHgyMTE2LCAweDdFNTYsIDB4N0U1OSwgMHg0M0E3LCAweDdFNUEsIDB4N0U1QSwgMHgyNDU0LA0KLSAgICAweDdFNUIsIDB4N0U1RCwgMHg0M0FCLCAweDdFNUUsIDB4N0U1RSwgMHgyMEZCLCAweDdFNUYsIDB4N0U2MSwgMHg0M0FFLA0KLSAgICAweDdFNjIsIDB4N0U2MiwgMHgyNDQwLCAweDdFNjMsIDB4N0U2OCwgMHg0M0IxLCAweDdFNjksIDB4N0U2OSwgMHgyMTI2LA0KLSAgICAweDdFNkEsIDB4N0U2QSwgMHgxRjYxLCAweDdFNkIsIDB4N0U2QiwgMHgyNjlELCAweDdFNkMsIDB4N0U2QywgMHg0M0I3LA0KLSAgICAweDdFNkQsIDB4N0U2RCwgMHgxRjhBLCAweDdFNkUsIDB4N0U2RSwgMHgyNDU2LCAweDdFNkYsIDB4N0U2RiwgMHgyNDU5LA0KLSAgICAweDdFNzAsIDB4N0U3MCwgMHgyNDU4LCAweDdFNzEsIDB4N0U3MiwgMHg0M0I4LCAweDdFNzMsIDB4N0U3MywgMHgxRkFFLA0KLSAgICAweDdFNzQsIDB4N0U3OCwgMHg0M0JBLCAweDdFNzksIDB4N0U3OSwgMHgyMjFBLCAweDdFN0EsIDB4N0U3QiwgMHg0M0JGLA0KLSAgICAweDdFN0MsIDB4N0U3QywgMHgxRjdBLCAweDdFN0QsIDB4N0U3RCwgMHgyNDRELCAweDdFN0UsIDB4N0U3RSwgMHgyNDU3LA0KLSAgICAweDdFN0YsIDB4N0U4MSwgMHg0M0MxLCAweDdFODIsIDB4N0U4MiwgMHgxMjQ4LCAweDdFODMsIDB4N0U4NywgMHg0M0M0LA0KLSAgICAweDdFODgsIDB4N0U4OCwgMHgyNDUzLCAweDdFODksIDB4N0U4OSwgMHg0M0M5LCAweDdFOEEsIDB4N0U4QSwgMHgyNDIwLA0KLSAgICAweDdFOEIsIDB4N0U4QiwgMHg0M0NBLCAweDdFOEMsIDB4N0U4QywgMHgyMURGLCAweDdFOEQsIDB4N0U4RCwgMHgyNjg1LA0KLSAgICAweDdFOEUsIDB4N0U4RSwgMHg0M0NCLCAweDdFOEYsIDB4N0U4RiwgMHgxRTZFLCAweDdFOTAsIDB4N0U5MiwgMHg0M0NDLA0KLSAgICAweDdFOTMsIDB4N0U5MywgMHgyMjI0LCAweDdFOTQsIDB4N0U5NCwgMHgyNjcwLCAweDdFOTUsIDB4N0U5NSwgMHg0M0NGLA0KLSAgICAweDdFOTYsIDB4N0U5NiwgMHgyMUJBLCAweDdFOTcsIDB4N0U5NywgMHg0M0QwLCAweDdFOTgsIDB4N0U5OCwgMHgyNDVBLA0KLSAgICAweDdFOTksIDB4N0U5QSwgMHg0M0QxLCAweDdFOUIsIDB4N0U5QiwgMHgxQ0VDLCAweDdFOUMsIDB4N0U5QywgMHgxRkZGLA0KLSAgICAweDdFOUQsIDB4N0U5RSwgMHg0M0QzLCAweDdFOUYsIDB4N0U5RiwgMHgxN0QzLCAweDdFQTAsIDB4N0VBMCwgMHgwOEVGLA0KLSAgICAweDdFQTEsIDB4N0VBMSwgMHgxN0Q0LCAweDdFQTIsIDB4N0VBMiwgMHgwN0EzLCAweDdFQTMsIDB4N0VBMywgMHgxN0Q1LA0KLSAgICAweDdFQTQsIDB4N0VBNCwgMHgwRjM4LCAweDdFQTUsIDB4N0VBNSwgMHgxN0Q2LCAweDdFQTYsIDB4N0VBNiwgMHgxMEZGLA0KLSAgICAweDdFQTcsIDB4N0VBNywgMHgwODI5LCAweDdFQTgsIDB4N0VBOSwgMHgxN0Q3LCAweDdFQUEsIDB4N0VBQSwgMHgwODQwLA0KLSAgICAweDdFQUIsIDB4N0VBQiwgMHgwQ0FELCAweDdFQUMsIDB4N0VBQywgMHgwRUMyLCAweDdFQUQsIDB4N0VBRCwgMHgxN0Q5LA0KLSAgICAweDdFQUUsIDB4N0VBRSwgMHg0M0Q1LCAweDdFQUYsIDB4N0VBRiwgMHgwNTQyLCAweDdFQjAsIDB4N0VCMCwgMHgxN0RBLA0KLSAgICAweDdFQjEsIDB4N0VCMSwgMHgwQ0VELCAweDdFQjIsIDB4N0VCMiwgMHgwNkQ0LCAweDdFQjMsIDB4N0VCMywgMHgwQjJDLA0KLSAgICAweDdFQjQsIDB4N0VCNCwgMHg0M0Q2LCAweDdFQjUsIDB4N0VCNSwgMHgxMjNBLCAweDdFQjYsIDB4N0VCNiwgMHgwQTgxLA0KLSAgICAweDdFQjcsIDB4N0VCNywgMHgwNjc0LCAweDdFQjgsIDB4N0VCOCwgMHgxMUJDLCAweDdFQjksIDB4N0VCOSwgMHgwRUQ1LA0KLSAgICAweDdFQkEsIDB4N0VCQSwgMHgwNjYxLCAweDdFQkIsIDB4N0VCQywgMHg0M0Q3LCAweDdFQkQsIDB4N0VCRCwgMHgwQjY3LA0KLSAgICAweDdFQkUsIDB4N0VCRSwgMHgxN0RCLCAweDdFQkYsIDB4N0VCRiwgMHgwRjRDLCAweDdFQzAsIDB4N0VDMiwgMHgxN0RDLA0KLSAgICAweDdFQzMsIDB4N0VDMywgMHgwQTAwLCAweDdFQzQsIDB4N0VDNCwgMHgxMjQ2LCAweDdFQzUsIDB4N0VDNSwgMHgwRDI5LA0KLSAgICAweDdFQzYsIDB4N0VDNiwgMHgwRjI1LCAweDdFQzcsIDB4N0VDNywgMHgxMUFFLCAweDdFQzgsIDB4N0VDOCwgMHgxMUQ0LA0KLSAgICAweDdFQzksIDB4N0VDOSwgMHgxN0RGLCAweDdFQ0EsIDB4N0VDQSwgMHgwM0Y4LCAweDdFQ0IsIDB4N0VDQywgMHgxN0UwLA0KLSAgICAweDdFQ0QsIDB4N0VDRCwgMHgwRDE1LCAweDdFQ0UsIDB4N0VDRSwgMHgxMDc2LCAweDdFQ0YsIDB4N0VDRiwgMHgwOERDLA0KLSAgICAweDdFRDAsIDB4N0VEMCwgMHgxN0UyLCAweDdFRDEsIDB4N0VEMSwgMHgwM0ZFLCAweDdFRDIsIDB4N0VEMiwgMHgwQ0I5LA0KLSAgICAweDdFRDMsIDB4N0VEMywgMHgwOEIyLCAweDdFRDQsIDB4N0VENCwgMHgxN0UzLCAweDdFRDUsIDB4N0VENSwgMHgwQ0ExLA0KLSAgICAweDdFRDYsIDB4N0VENiwgMHg0M0Q5LCAweDdFRDcsIDB4N0VENywgMHgxN0U0LCAweDdFRDgsIDB4N0VEOCwgMHgwN0ZCLA0KLSAgICAweDdFRDksIDB4N0VEOSwgMHgwNkYzLCAweDdFREEsIDB4N0VEQSwgMHgwRkNELCAweDdFREIsIDB4N0VEQiwgMHgxN0U1LA0KLSAgICAweDdFREMsIDB4N0VEQywgMHgwQThFLCAweDdFREQsIDB4N0VERCwgMHgwOTI3LCAweDdFREUsIDB4N0VERSwgMHgwODlCLA0KLSAgICAweDdFREYsIDB4N0VERiwgMHgwRTY0LCAweDdFRTAsIDB4N0VFMSwgMHgxN0U2LCAweDdFRTIsIDB4N0VFMiwgMHgwOTFELA0KLSAgICAweDdFRTMsIDB4N0VFMywgMHgwRkIwLCAweDdFRTQsIDB4N0VFNCwgMHg0M0RBLCAweDdFRTUsIDB4N0VFNSwgMHgwRERDLA0KLSAgICAweDdFRTYsIDB4N0VFNiwgMHgwRTIzLCAweDdFRTcsIDB4N0VFNywgMHgwODNGLCAweDdFRTgsIDB4N0VFOCwgMHgxN0U4LA0KLSAgICAweDdFRTksIDB4N0VFOSwgMHgwODFCLCAweDdFRUEsIDB4N0VFQSwgMHgwRkMyLCAweDdFRUIsIDB4N0VFQiwgMHgxN0U5LA0KLSAgICAweDdFRUMsIDB4N0VFQywgMHg0M0RCLCAweDdFRUQsIDB4N0VFRCwgMHgwRkMzLCAweDdFRUUsIDB4N0VFRiwgMHgxN0VBLA0KLSAgICAweDdFRjAsIDB4N0VGMCwgMHgwNTQ1LCAweDdFRjEsIDB4N0VGMiwgMHgxN0VDLCAweDdFRjMsIDB4N0VGMywgMHgwRDM3LA0KLSAgICAweDdFRjQsIDB4N0VGNCwgMHgwRUJCLCAweDdFRjUsIDB4N0VGNSwgMHgwQUU1LCAweDdFRjYsIDB4N0VGNiwgMHgxN0VGLA0KLSAgICAweDdFRjcsIDB4N0VGNywgMHgwNDJBLCAweDdFRjgsIDB4N0VGOCwgMHgwNTE2LCAweDdFRjksIDB4N0VGOSwgMHg0M0RDLA0KLSAgICAweDdFRkEsIDB4N0VGQiwgMHgxN0YwLCAweDdFRkMsIDB4N0VGQywgMHgxMjM4LCAweDdFRkQsIDB4N0VGRCwgMHgxMTYxLA0KLSAgICAweDdFRkUsIDB4N0VGRSwgMHgxN0YyLCAweDdFRkYsIDB4N0VGRiwgMHgwQTczLCAweDdGMDAsIDB4N0YwMCwgMHgxMjE3LA0KLSAgICAweDdGMDEsIDB4N0YwMywgMHgxN0YzLCAweDdGMDQsIDB4N0YwNCwgMHgwODVELCAweDdGMDUsIDB4N0YwNSwgMHgwQUVBLA0KLSAgICAweDdGMDYsIDB4N0YwNiwgMHgwOUFELCAweDdGMDcsIDB4N0YwOCwgMHgxN0Y2LCAweDdGMDksIDB4N0YwOSwgMHgwODFDLA0KLSAgICAweDdGMEEsIDB4N0YwQSwgMHg0M0RELCAweDdGMEIsIDB4N0YwQywgMHgxN0Y4LCAweDdGMEQsIDB4N0YwRCwgMHgxN0VFLA0KLSAgICAweDdGMEUsIDB4N0YwRSwgMHgwNjBGLCAweDdGMEYsIDB4N0YwRiwgMHgxN0ZBLCAweDdGMTAsIDB4N0YxMCwgMHg0M0RFLA0KLSAgICAweDdGMTEsIDB4N0YxMiwgMHgxN0ZCLCAweDdGMTMsIDB4N0YxMywgMHgwN0NGLCAweDdGMTQsIDB4N0YxNCwgMHgwNUJGLA0KLSAgICAweDdGMTUsIDB4N0YxNSwgMHgwQTZELCAweDdGMTYsIDB4N0YxNiwgMHgwNDQ5LCAweDdGMTcsIDB4N0YxNywgMHgxN0ZELA0KLSAgICAweDdGMTgsIDB4N0YxOCwgMHgxMEY4LCAweDdGMTksIDB4N0YxOSwgMHgxN0ZFLCAweDdGMUEsIDB4N0YxQSwgMHgwNkJBLA0KLSAgICAweDdGMUIsIDB4N0YxQiwgMHgxODAwLCAweDdGMUMsIDB4N0YxQywgMHgxN0ZGLCAweDdGMUQsIDB4N0YxRCwgMHgwNjg5LA0KLSAgICAweDdGMUUsIDB4N0YxRSwgMHg0M0RGLCAweDdGMUYsIDB4N0YxRiwgMHgxODAxLCAweDdGMjAsIDB4N0YyMCwgMHgwNEJGLA0KLSAgICAweDdGMjEsIDB4N0YyNywgMHgxODAyLCAweDdGMjgsIDB4N0YyOCwgMHgxMDhDLCAweDdGMjksIDB4N0YyOSwgMHgwREVBLA0KLSAgICAweDdGMkEsIDB4N0YyRCwgMHgxODA5LCAweDdGMkUsIDB4N0YyRSwgMHgwRDAyLCAweDdGMkYsIDB4N0YzMywgMHgxODBELA0KLSAgICAweDdGMzQsIDB4N0YzNCwgMHgwODlBLCAweDdGMzUsIDB4N0YzNSwgMHgxODEyLCAweDdGMzYsIDB4N0YzNiwgMHgxQzVFLA0KLSAgICAweDdGMzcsIDB4N0YzNywgMHg0M0UwLCAweDdGMzgsIDB4N0YzOCwgMHgwNkQyLCAweDdGMzksIDB4N0YzOSwgMHg0M0UxLA0KLSAgICAweDdGM0EsIDB4N0YzQSwgMHgwQzhDLCAweDdGM0IsIDB4N0Y0MSwgMHg0M0UyLCAweDdGNDIsIDB4N0Y0MiwgMHgxQzVGLA0KLSAgICAweDdGNDMsIDB4N0Y0MywgMHg0M0U5LCAweDdGNDQsIDB4N0Y0NSwgMHgxQzYwLCAweDdGNDYsIDB4N0Y0QiwgMHg0M0VBLA0KLSAgICAweDdGNEMsIDB4N0Y0QywgMHgyNUUyLCAweDdGNEQsIDB4N0Y0RCwgMHg0M0YwLCAweDdGNEUsIDB4N0Y0RSwgMHgyNjlBLA0KLSAgICAweDdGNEYsIDB4N0Y0RiwgMHg0M0YxLCAweDdGNTAsIDB4N0Y1MCwgMHgwNzM3LCAweDdGNTEsIDB4N0Y1MSwgMHgwRUE5LA0KLSAgICAweDdGNTIsIDB4N0Y1MywgMHg0M0YyLCAweDdGNTQsIDB4N0Y1NCwgMHgxMjlFLCAweDdGNTUsIDB4N0Y1NSwgMHgwNzY4LA0KLSAgICAweDdGNTYsIDB4N0Y1NiwgMHg0M0Y0LCAweDdGNTcsIDB4N0Y1NywgMHgwQTg1LCAweDdGNTgsIDB4N0Y1OCwgMHgxQTgxLA0KLSAgICAweDdGNTksIDB4N0Y1OSwgMHg0M0Y1LCAweDdGNUEsIDB4N0Y1QSwgMHgwNjQwLCAweDdGNUIsIDB4N0Y1RSwgMHg0M0Y2LA0KLSAgICAweDdGNUYsIDB4N0Y1RiwgMHgxQTgzLCAweDdGNjAsIDB4N0Y2MCwgMHg0M0ZBLCAweDdGNjEsIDB4N0Y2MSwgMHgxQTgyLA0KLSAgICAweDdGNjIsIDB4N0Y2MiwgMHgwM0UwLCAweDdGNjMsIDB4N0Y2NywgMHg0M0ZCLCAweDdGNjgsIDB4N0Y2OCwgMHgxQTg1LA0KLSAgICAweDdGNjksIDB4N0Y2OSwgMHgxMTc3LCAweDdGNkEsIDB4N0Y2QSwgMHgxMjRDLCAweDdGNkIsIDB4N0Y2RCwgMHg0NDAwLA0KLSAgICAweDdGNkUsIDB4N0Y2RSwgMHgxMUMyLCAweDdGNkYsIDB4N0Y2RiwgMHg0NDAzLCAweDdGNzAsIDB4N0Y3MCwgMHgxRUVBLA0KLSAgICAweDdGNzEsIDB4N0Y3MSwgMHgxQTg3LCAweDdGNzIsIDB4N0Y3MiwgMHgwRDg3LCAweDdGNzMsIDB4N0Y3MywgMHg0NDA0LA0KLSAgICAweDdGNzQsIDB4N0Y3NCwgMHgxQTg2LCAweDdGNzUsIDB4N0Y3NiwgMHg0NDA1LCAweDdGNzcsIDB4N0Y3NywgMHgxRTJDLA0KLSAgICAweDdGNzgsIDB4N0Y3OCwgMHg0NDA3LCAweDdGNzksIDB4N0Y3OSwgMHgxQTg4LCAweDdGN0EsIDB4N0Y3RCwgMHg0NDA4LA0KLSAgICAweDdGN0UsIDB4N0Y3RSwgMHgxQThBLCAweDdGN0YsIDB4N0Y4MCwgMHg0NDBDLCAweDdGODEsIDB4N0Y4MSwgMHgxQTg5LA0KLSAgICAweDdGODIsIDB4N0Y4NCwgMHg0NDBFLCAweDdGODUsIDB4N0Y4NSwgMHgyMDYyLCAweDdGODYsIDB4N0Y4NiwgMHgyNEYxLA0KLSAgICAweDdGODcsIDB4N0Y4NywgMHg0NDExLCAweDdGODgsIDB4N0Y4OCwgMHgyNEYyLCAweDdGODksIDB4N0Y4OSwgMHg0NDEyLA0KLSAgICAweDdGOEEsIDB4N0Y4QSwgMHgxMDFCLCAweDdGOEIsIDB4N0Y4QiwgMHg0NDEzLCAweDdGOEMsIDB4N0Y4QywgMHgwQzM5LA0KLSAgICAweDdGOEQsIDB4N0Y4RCwgMHg0NDE0LCAweDdGOEUsIDB4N0Y4RSwgMHgwQUM1LCAweDdGOEYsIDB4N0Y5MywgMHg0NDE1LA0KLSAgICAweDdGOTQsIDB4N0Y5NCwgMHgwNkRDLCAweDdGOTUsIDB4N0Y5OSwgMHg0NDFBLCAweDdGOUEsIDB4N0Y5QSwgMHgwQTMwLA0KLSAgICAweDdGOUIsIDB4N0Y5QywgMHg0NDFGLCAweDdGOUQsIDB4N0Y5RCwgMHgxQ0M0LCAweDdGOUUsIDB4N0Y5RSwgMHgwRkFBLA0KLSAgICAweDdGOUYsIDB4N0Y5RiwgMHgxQ0M1LCAweDdGQTAsIDB4N0ZBMCwgMHg0NDIxLCAweDdGQTEsIDB4N0ZBMSwgMHgwRjQ4LA0KLSAgICAweDdGQTIsIDB4N0ZBMywgMHg0NDIyLCAweDdGQTQsIDB4N0ZBNCwgMHgwQzk1LCAweDdGQTUsIDB4N0ZBNSwgMHgyNUYyLA0KLSAgICAweDdGQTYsIDB4N0ZBNiwgMHg0NDI0LCAweDdGQTcsIDB4N0ZBNywgMHgxQ0M2LCAweDdGQTgsIDB4N0ZBOCwgMHg0NDI1LA0KLSAgICAweDdGQTksIDB4N0ZBOSwgMHgyMjE1LCAweDdGQUEsIDB4N0ZBRSwgMHg0NDI2LCAweDdGQUYsIDB4N0ZCMCwgMHgxQ0M3LA0KLSAgICAweDdGQjEsIDB4N0ZCMSwgMHg0NDJCLCAweDdGQjIsIDB4N0ZCMiwgMHgxQ0M5LCAweDdGQjMsIDB4N0ZCNywgMHg0NDJDLA0KLSAgICAweDdGQjgsIDB4N0ZCOCwgMHgxMzBFLCAweDdGQjksIDB4N0ZCOSwgMHgwNkY5LCAweDdGQkEsIDB4N0ZCQiwgMHg0NDMxLA0KLSAgICAweDdGQkMsIDB4N0ZCQywgMHgxNzZELCAweDdGQkQsIDB4N0ZCRCwgMHgxMEQ1LCAweDdGQkUsIDB4N0ZCRSwgMHg0NDMzLA0KLSAgICAweDdGQkYsIDB4N0ZCRiwgMHgxQ0RFLCAweDdGQzAsIDB4N0ZDMCwgMHg0NDM0LCAweDdGQzEsIDB4N0ZDMSwgMHgwRURCLA0KLSAgICAweDdGQzIsIDB4N0ZDNCwgMHg0NDM1LCAweDdGQzUsIDB4N0ZDNSwgMHgwNTA2LCAweDdGQzYsIDB4N0ZDOSwgMHg0NDM4LA0KLSAgICAweDdGQ0EsIDB4N0ZDQSwgMHgxQjk4LCAweDdGQ0IsIDB4N0ZDQiwgMHg0NDNDLCAweDdGQ0MsIDB4N0ZDQywgMHgxMDc1LA0KLSAgICAweDdGQ0QsIDB4N0ZDRCwgMHg0NDNELCAweDdGQ0UsIDB4N0ZDRSwgMHgxQ0RGLCAweDdGQ0YsIDB4N0ZEMSwgMHg0NDNFLA0KLSAgICAweDdGRDIsIDB4N0ZEMiwgMHgyMUFFLCAweDdGRDMsIDB4N0ZEMywgMHg0NDQxLCAweDdGRDQsIDB4N0ZENCwgMHgwRjU1LA0KLSAgICAweDdGRDUsIDB4N0ZENSwgMHgxQ0UwLCAweDdGRDYsIDB4N0ZENywgMHg0NDQyLCAweDdGRDgsIDB4N0ZEOCwgMHgwQzQ5LA0KLSAgICAweDdGRDksIDB4N0ZERSwgMHg0NDQ0LCAweDdGREYsIDB4N0ZERiwgMHgwNUI1LCAweDdGRTAsIDB4N0ZFMCwgMHgwNTY3LA0KLSAgICAweDdGRTEsIDB4N0ZFMSwgMHgxQ0UyLCAweDdGRTIsIDB4N0ZFNCwgMHg0NDRBLCAweDdGRTUsIDB4N0ZFNSwgMHgxQ0UxLA0KLSAgICAweDdGRTYsIDB4N0ZFNiwgMHgxQ0UzLCAweDdGRTcsIDB4N0ZFOCwgMHg0NDRELCAweDdGRTksIDB4N0ZFOSwgMHgxQ0U0LA0KLSAgICAweDdGRUEsIDB4N0ZFRCwgMHg0NDRGLCAweDdGRUUsIDB4N0ZFRSwgMHgxQ0U1LCAweDdGRUYsIDB4N0ZFRiwgMHg0NDUzLA0KLSAgICAweDdGRjAsIDB4N0ZGMCwgMHgwNzY5LCAweDdGRjEsIDB4N0ZGMSwgMHgwM0NBLCAweDdGRjIsIDB4N0ZGMiwgMHg0NDU0LA0KLSAgICAweDdGRjMsIDB4N0ZGMywgMHgxQ0U2LCAweDdGRjQsIDB4N0ZGOCwgMHg0NDU1LCAweDdGRjksIDB4N0ZGOSwgMHgyMEUwLA0KLSAgICAweDdGRkEsIDB4N0ZGQSwgMHg0NDVBLCAweDdGRkIsIDB4N0ZGQiwgMHgwNjRBLCAweDdGRkMsIDB4N0ZGQywgMHgxMDc0LA0KLSAgICAweDdGRkQsIDB4N0ZGRiwgMHg0NDVCLCAweDgwMDAsIDB4ODAwMCwgMHgxMDMyLCAweDgwMDEsIDB4ODAwMSwgMHgwOUJBLA0KLSAgICAweDgwMDIsIDB4ODAwMiwgMHg0NDVFLCAweDgwMDMsIDB4ODAwMywgMHgwOTQ5LCAweDgwMDQsIDB4ODAwNCwgMHgxOTUzLA0KLSAgICAweDgwMDUsIDB4ODAwNSwgMHgxMTgwLCAweDgwMDYsIDB4ODAwNiwgMHgxOTFBLCAweDgwMDcsIDB4ODAwQSwgMHg0NDVGLA0KLSAgICAweDgwMEIsIDB4ODAwQiwgMHgxQkQ3LCAweDgwMEMsIDB4ODAwQywgMHgwNjM3LCAweDgwMEQsIDB4ODAwRCwgMHgwRDk4LA0KLSAgICAweDgwMEUsIDB4ODAwRiwgMHg0NDYzLCAweDgwMTAsIDB4ODAxMCwgMHgwQjMwLCAweDgwMTEsIDB4ODAxMSwgMHg0NDY1LA0KLSAgICAweDgwMTIsIDB4ODAxMiwgMHgxQkNCLCAweDgwMTMsIDB4ODAxMywgMHg0NDY2LCAweDgwMTQsIDB4ODAxNCwgMHgxQkNDLA0KLSAgICAweDgwMTUsIDB4ODAxNSwgMHgwNkY2LCAweDgwMTYsIDB4ODAxNiwgMHgxQkNELCAweDgwMTcsIDB4ODAxNywgMHgwNzdCLA0KLSAgICAweDgwMTgsIDB4ODAxOCwgMHgxMTA4LCAweDgwMTksIDB4ODAxOSwgMHgwM0RELCAweDgwMUEsIDB4ODAxQiwgMHg0NDY3LA0KLSAgICAweDgwMUMsIDB4ODAxQywgMHgxQkNFLCAweDgwMUQsIDB4ODAxRiwgMHg0NDY5LCAweDgwMjAsIDB4ODAyMCwgMHgxQkNGLA0KLSAgICAweDgwMjEsIDB4ODAyMSwgMHg0NDZDLCAweDgwMjIsIDB4ODAyMiwgMHgxQkQwLCAweDgwMjMsIDB4ODAyNCwgMHg0NDZELA0KLSAgICAweDgwMjUsIDB4ODAyNywgMHgxQkQxLCAweDgwMjgsIDB4ODAyOCwgMHgxQkQ1LCAweDgwMjksIDB4ODAyOSwgMHgxQkQ0LA0KLSAgICAweDgwMkEsIDB4ODAyQSwgMHgwQjk2LCAweDgwMkIsIDB4ODAyQiwgMHg0NDZGLCAweDgwMkMsIDB4ODAyQywgMHgyNUMyLA0KLSAgICAweDgwMkQsIDB4ODAyRCwgMHg0NDcwLCAweDgwMkUsIDB4ODAyRSwgMHgyNUMxLCAweDgwMkYsIDB4ODAzMCwgMHg0NDcxLA0KLSAgICAweDgwMzEsIDB4ODAzMSwgMHgxQkQ2LCAweDgwMzIsIDB4ODAzMiwgMHg0NDczLCAweDgwMzMsIDB4ODAzMywgMHgwNjM5LA0KLSAgICAweDgwMzQsIDB4ODAzNCwgMHg0NDc0LCAweDgwMzUsIDB4ODAzNSwgMHgxQkQ4LCAweDgwMzYsIDB4ODAzNiwgMHgxMDM1LA0KLSAgICAweDgwMzcsIDB4ODAzNywgMHgxNEIxLCAweDgwMzgsIDB4ODAzOCwgMHgwREJGLCAweDgwMzksIDB4ODAzQSwgMHg0NDc1LA0KLSAgICAweDgwM0IsIDB4ODAzQiwgMHgwNTAxLCAweDgwM0MsIDB4ODAzQywgMHg0NDc3LCAweDgwM0QsIDB4ODAzRCwgMHgwNTgzLA0KLSAgICAweDgwM0UsIDB4ODAzRSwgMHg0NDc4LCAweDgwM0YsIDB4ODAzRiwgMHgwNkZCLCAweDgwNDAsIDB4ODA0MSwgMHg0NDc5LA0KLSAgICAweDgwNDIsIDB4ODA0MiwgMHgwQjU3LCAweDgwNDMsIDB4ODA0MywgMHgxQkQ5LCAweDgwNDQsIDB4ODA0NSwgMHg0NDdCLA0KLSAgICAweDgwNDYsIDB4ODA0NiwgMHgxQkRBLCAweDgwNDcsIDB4ODA0OSwgMHg0NDdELCAweDgwNEEsIDB4ODA0QSwgMHgwQTBELA0KLSAgICAweDgwNEIsIDB4ODA0QiwgMHgwQTQ0LCAweDgwNEMsIDB4ODA0QywgMHgxMUFGLCAweDgwNEQsIDB4ODA0RCwgMHgxQkRCLA0KLSAgICAweDgwNEUsIDB4ODA1MSwgMHg0NDgwLCAweDgwNTIsIDB4ODA1MiwgMHgxQkRDLCAweDgwNTMsIDB4ODA1MywgMHg0NDg0LA0KLSAgICAweDgwNTQsIDB4ODA1NCwgMHgwOUYzLCAweDgwNTUsIDB4ODA1NSwgMHg0NDg1LCAweDgwNTYsIDB4ODA1NiwgMHgyMTI4LA0KLSAgICAweDgwNTcsIDB4ODA1NywgMHg0NDg2LCAweDgwNTgsIDB4ODA1OCwgMHgwQkQ3LCAweDgwNTksIDB4ODA1OSwgMHg0NDg3LA0KLSAgICAweDgwNUEsIDB4ODA1QSwgMHgwOTBBLCAweDgwNUIsIDB4ODA1RCwgMHg0NDg4LCAweDgwNUUsIDB4ODA1RSwgMHgyMTk5LA0KLSAgICAweDgwNUYsIDB4ODA2OCwgMHg0NDhCLCAweDgwNjksIDB4ODA2OSwgMHgxQkRELCAweDgwNkEsIDB4ODA2QSwgMHgwNTUyLA0KLSAgICAweDgwNkIsIDB4ODA2RSwgMHg0NDk1LCAweDgwNkYsIDB4ODA2RiwgMHgyMDE3LCAweDgwNzAsIDB4ODA3MCwgMHgxRUEwLA0KLSAgICAweDgwNzEsIDB4ODA3MSwgMHgxQkRFLCAweDgwNzIsIDB4ODA3MiwgMHgyMTI1LCAweDgwNzMsIDB4ODA3MywgMHgyMTRELA0KLSAgICAweDgwNzQsIDB4ODA3NCwgMHg0NDk5LCAweDgwNzUsIDB4ODA3NSwgMHgyNUM0LCAweDgwNzYsIDB4ODA3NiwgMHgyMDlELA0KLSAgICAweDgwNzcsIDB4ODA3NywgMHgyMjhBLCAweDgwNzgsIDB4ODA3OCwgMHg0NDlBLCAweDgwNzksIDB4ODA3OSwgMHgyNUMzLA0KLSAgICAweDgwN0EsIDB4ODA3QywgMHg0NDlCLCAweDgwN0QsIDB4ODA3RCwgMHgyMTc5LCAweDgwN0UsIDB4ODA3RSwgMHgyMDM4LA0KLSAgICAweDgwN0YsIDB4ODA3RiwgMHgxQTFFLCAweDgwODAsIDB4ODA4MCwgMHgxQTFELCAweDgwODEsIDB4ODA4MiwgMHg0NDlFLA0KLSAgICAweDgwODMsIDB4ODA4MywgMHgwREQ1LCAweDgwODQsIDB4ODA4NCwgMHgxMDY1LCAweDgwODUsIDB4ODA4NSwgMHgyMTU1LA0KLSAgICAweDgwODYsIDB4ODA4NiwgMHgwREI2LCAweDgwODcsIDB4ODA4NywgMHgxMTc5LCAweDgwODgsIDB4ODA4OCwgMHg0NEEwLA0KLSAgICAweDgwODksIDB4ODA4OSwgMHgwQ0JELCAweDgwOEEsIDB4ODA4QSwgMHg0NEExLCAweDgwOEIsIDB4ODA4QiwgMHgwOUNBLA0KLSAgICAweDgwOEMsIDB4ODA4QywgMHgwODE0LCAweDgwOEQsIDB4ODA5MiwgMHg0NEEyLCAweDgwOTMsIDB4ODA5MywgMHgxOTcxLA0KLSAgICAweDgwOTQsIDB4ODA5NSwgMHg0NEE4LCAweDgwOTYsIDB4ODA5NiwgMHgwRjZGLCAweDgwOTcsIDB4ODA5NywgMHg0NEFBLA0KLSAgICAweDgwOTgsIDB4ODA5OCwgMHgxMUUxLCAweDgwOTksIDB4ODA5OSwgMHg0NEFCLCAweDgwOUEsIDB4ODA5QSwgMHgwNjA2LA0KLSAgICAweDgwOUIsIDB4ODA5QiwgMHgwNkQzLCAweDgwOUMsIDB4ODA5QywgMHgxOTcwLCAweDgwOUQsIDB4ODA5RCwgMHgwNkM5LA0KLSAgICAweDgwOUUsIDB4ODA5RSwgMHg0NEFDLCAweDgwOUYsIDB4ODA5RiwgMHgxOTZGLCAweDgwQTAsIDB4ODBBMCwgMHgwNENCLA0KLSAgICAweDgwQTEsIDB4ODBBMSwgMHgwNzIyLCAweDgwQTIsIDB4ODBBMiwgMHgxMUFBLCAweDgwQTMsIDB4ODBBMywgMHg0NEFELA0KLSAgICAweDgwQTQsIDB4ODBBNCwgMHgwNjkxLCAweDgwQTUsIDB4ODBBNSwgMHgwNjY3LCAweDgwQTYsIDB4ODBBOCwgMHg0NEFFLA0KLSAgICAweDgwQTksIDB4ODBBOSwgMHgwODVBLCAweDgwQUEsIDB4ODBBQSwgMHgwNjVCLCAweDgwQUIsIDB4ODBBQiwgMHgxOTc2LA0KLSAgICAweDgwQUMsIDB4ODBBQywgMHg0NEIxLCAweDgwQUQsIDB4ODBBRCwgMHgxOTc3LCAweDgwQUUsIDB4ODBBRSwgMHgwM0M0LA0KLSAgICAweDgwQUYsIDB4ODBBRiwgMHgwOTVDLCAweDgwQjAsIDB4ODBCMCwgMHg0NEIyLCAweDgwQjEsIDB4ODBCMSwgMHgxOTc1LA0KLSAgICAweDgwQjIsIDB4ODBCMiwgMHgxMEUyLCAweDgwQjMsIDB4ODBCMywgMHg0NEIzLCAweDgwQjQsIDB4ODBCNCwgMHgxOTc4LA0KLSAgICAweDgwQjUsIDB4ODBCNiwgMHg0NEI0LCAweDgwQjcsIDB4ODBCNywgMHgxOTc5LCAweDgwQjgsIDB4ODBCOSwgMHg0NEI2LA0KLSAgICAweDgwQkEsIDB4ODBCQSwgMHgwNjZCLCAweDgwQkIsIDB4ODBCQiwgMHg0NEI4LCAweDgwQkMsIDB4ODBCQywgMHgxOTcyLA0KLSAgICAweDgwQkQsIDB4ODBCRCwgMHgxOTc0LCAweDgwQkUsIDB4ODBCRSwgMHgwRDJGLCAweDgwQkYsIDB4ODBCRiwgMHgxMUQ2LA0KLSAgICAweDgwQzAsIDB4ODBDMCwgMHgxMTZFLCAweDgwQzEsIDB4ODBDMSwgMHgwRjdELCAweDgwQzIsIDB4ODBDMiwgMHgxOTdGLA0KLSAgICAweDgwQzMsIDB4ODBDMywgMHgwRUM3LCAweDgwQzQsIDB4ODBDNCwgMHgxOTgwLCAweDgwQzUsIDB4ODBDNSwgMHg0NEI5LA0KLSAgICAweDgwQzYsIDB4ODBDNiwgMHgwNTg5LCAweDgwQzcsIDB4ODBDQiwgMHg0NEJBLCAweDgwQ0MsIDB4ODBDQywgMHgwNDFDLA0KLSAgICAweDgwQ0QsIDB4ODBDRCwgMHgxOTgyLCAweDgwQ0UsIDB4ODBDRSwgMHgwREY4LCAweDgwQ0YsIDB4ODBENSwgMHg0NEJGLA0KLSAgICAweDgwRDYsIDB4ODBENiwgMHgwQjk3LCAweDgwRDcsIDB4ODBENywgMHgxOTgzLCAweDgwRDgsIDB4ODBEOCwgMHg0NEM2LA0KLSAgICAweDgwRDksIDB4ODBEOSwgMHgxOTgxLCAweDgwREEsIDB4ODBEQSwgMHgwQkEwLCAweDgwREIsIDB4ODBEQiwgMHgxOTdFLA0KLSAgICAweDgwREMsIDB4ODBEQywgMHgwRDNCLCAweDgwREQsIDB4ODBERCwgMHgxOTg1LCAweDgwREUsIDB4ODBERSwgMHgwNDA2LA0KLSAgICAweDgwREYsIDB4ODBFMCwgMHg0NEM3LCAweDgwRTEsIDB4ODBFMSwgMHgwN0IxLCAweDgwRTIsIDB4ODBFMywgMHg0NEM5LA0KLSAgICAweDgwRTQsIDB4ODBFNCwgMHgxMjZELCAweDgwRTUsIDB4ODBFNSwgMHgxQkM3LCAweDgwRTYsIDB4ODBFNiwgMHg0NENCLA0KLSAgICAweDgwRTcsIDB4ODBFQSwgMHgxOTdBLCAweDgwRUIsIDB4ODBFQiwgMHgxOTg2LCAweDgwRUMsIDB4ODBFQywgMHgxNzlBLA0KLSAgICAweDgwRUQsIDB4ODBFRCwgMHgxOTg5LCAweDgwRUUsIDB4ODBFRSwgMHg0NENDLCAweDgwRUYsIDB4ODBFRiwgMHgwOTc1LA0KLSAgICAweDgwRjAsIDB4ODBGMCwgMHgxMDRGLCAweDgwRjEsIDB4ODBGMSwgMHgxOTg3LCAweDgwRjIsIDB4ODBGMiwgMHgxOThDLA0KLSAgICAweDgwRjMsIDB4ODBGMywgMHgwNkU3LCAweDgwRjQsIDB4ODBGNCwgMHgxOTg4LCAweDgwRjUsIDB4ODBGNSwgMHg0NENELA0KLSAgICAweDgwRjYsIDB4ODBGNiwgMHgwODhCLCAweDgwRjcsIDB4ODBGNywgMHg0NENFLCAweDgwRjgsIDB4ODBGOCwgMHgwRkEzLA0KLSAgICAweDgwRjksIDB4ODBGOSwgMHg0NENGLCAweDgwRkEsIDB4ODBGQSwgMHgwM0MyLCAweDgwRkIsIDB4ODBGQiwgMHg0NEQwLA0KLSAgICAweDgwRkMsIDB4ODBGQywgMHgxOThELCAweDgwRkQsIDB4ODBGRCwgMHgwQjNGLCAweDgwRkUsIDB4ODBGRiwgMHg0NEQxLA0KLSAgICAweDgxMDAsIDB4ODEwMSwgMHg0NEQzLCAweDgxMDIsIDB4ODEwMiwgMHgxMUFCLCAweDgxMDMsIDB4ODEwNCwgMHg0NEQ1LA0KLSAgICAweDgxMDUsIDB4ODEwNSwgMHgyMUQyLCAweDgxMDYsIDB4ODEwNiwgMHgwNTYzLCAweDgxMDcsIDB4ODEwOCwgMHg0NEQ3LA0KLSAgICAweDgxMDksIDB4ODEwOSwgMHgwQTlELCAweDgxMEEsIDB4ODEwQSwgMHgwODJDLCAweDgxMEIsIDB4ODEwQywgMHg0NEQ5LA0KLSAgICAweDgxMEQsIDB4ODEwRSwgMHgxOThBLCAweDgxMEYsIDB4ODEwRiwgMHgxMTIzLCAweDgxMTAsIDB4ODExMCwgMHgwQzA5LA0KLSAgICAweDgxMTEsIDB4ODExMSwgMHgwQjM3LCAweDgxMTIsIDB4ODExMiwgMHgxOThGLCAweDgxMTMsIDB4ODExMywgMHgwQjY4LA0KLSAgICAweDgxMTQsIDB4ODExNCwgMHgxMzA5LCAweDgxMTUsIDB4ODExNSwgMHg0NERCLCAweDgxMTYsIDB4ODExNiwgMHgwNDc4LA0KLSAgICAweDgxMTcsIDB4ODExNywgMHg0NERDLCAweDgxMTgsIDB4ODExOCwgMHgxOTk0LCAweDgxMTksIDB4ODExOSwgMHg0NERELA0KLSAgICAweDgxMUEsIDB4ODExQSwgMHgwODk2LCAweDgxMUIsIDB4ODExQiwgMHgyNEM3LCAweDgxMUMsIDB4ODExRCwgMHg0NERFLA0KLSAgICAweDgxMUUsIDB4ODExRSwgMHgxOTkyLCAweDgxMUYsIDB4ODEyQiwgMHg0NEUwLCAweDgxMkMsIDB4ODEyQywgMHgxOTkzLA0KLSAgICAweDgxMkQsIDB4ODEyRSwgMHg0NEVELCAweDgxMkYsIDB4ODEyRiwgMHgwNkE3LCAweDgxMzAsIDB4ODEzMCwgMHg0NEVGLA0KLSAgICAweDgxMzEsIDB4ODEzMSwgMHgwRTgyLCAweDgxMzIsIDB4ODEzMiwgMHgxOTk1LCAweDgxMzMsIDB4ODEzNSwgMHg0NEYwLA0KLSAgICAweDgxMzYsIDB4ODEzNiwgMHgxOTkxLCAweDgxMzcsIDB4ODEzNywgMHg0NEYzLCAweDgxMzgsIDB4ODEzOCwgMHgwOUZDLA0KLSAgICAweDgxMzksIDB4ODEzOSwgMHgyMjc5LCAweDgxM0EsIDB4ODEzRCwgMHg0NEY0LCAweDgxM0UsIDB4ODEzRSwgMHgwQkMxLA0KLSAgICAweDgxM0YsIDB4ODE0NSwgMHg0NEY4LCAweDgxNDYsIDB4ODE0NiwgMHgwRTQ2LCAweDgxNDcsIDB4ODE0NywgMHg0NEZGLA0KLSAgICAweDgxNDgsIDB4ODE0OCwgMHgxOTk2LCAweDgxNDksIDB4ODE0OSwgMHg0NTAwLCAweDgxNEEsIDB4ODE0QSwgMHgwOTlCLA0KLSAgICAweDgxNEIsIDB4ODE0QiwgMHgxMDNGLCAweDgxNEMsIDB4ODE0QywgMHgxOTk3LCAweDgxNEQsIDB4ODE0RCwgMHg0NTAxLA0KLSAgICAweDgxNEUsIDB4ODE0RSwgMHgyMTIzLCAweDgxNEYsIDB4ODE0RiwgMHg0NTAyLCAweDgxNTAsIDB4ODE1MCwgMHgwNkFBLA0KLSAgICAweDgxNTEsIDB4ODE1MSwgMHgwNkE4LCAweDgxNTIsIDB4ODE1MiwgMHg0NTAzLCAweDgxNTMsIDB4ODE1MywgMHgxOTk4LA0KLSAgICAweDgxNTQsIDB4ODE1NCwgMHgwQzM4LCAweDgxNTUsIDB4ODE1NSwgMHgwRUE0LCAweDgxNTYsIDB4ODE1NiwgMHgyNEM1LA0KLSAgICAweDgxNTcsIDB4ODE1OCwgMHg0NTA0LCAweDgxNTksIDB4ODE1QSwgMHgxOTlBLCAweDgxNUIsIDB4ODE1RiwgMHg0NTA2LA0KLSAgICAweDgxNjAsIDB4ODE2MCwgMHgxOTlELCAweDgxNjEsIDB4ODE2MSwgMHgyNEM5LCAweDgxNjIsIDB4ODE2NCwgMHg0NTBCLA0KLSAgICAweDgxNjUsIDB4ODE2NSwgMHgwRjkzLCAweDgxNjYsIDB4ODE2NiwgMHgyMDk0LCAweDgxNjcsIDB4ODE2NywgMHgxOUEyLA0KLSAgICAweDgxNjgsIDB4ODE2OCwgMHg0NTBFLCAweDgxNjksIDB4ODE2OSwgMHgxOTlFLCAweDgxNkEsIDB4ODE2QSwgMHg0NTBGLA0KLSAgICAweDgxNkIsIDB4ODE2QiwgMHgyMjk2LCAweDgxNkMsIDB4ODE2QywgMHg0NTEwLCAweDgxNkQsIDB4ODE2RCwgMHgxOUExLA0KLSAgICAweDgxNkUsIDB4ODE2RSwgMHgwQ0Q0LCAweDgxNkYsIDB4ODE2RiwgMHg0NTExLCAweDgxNzAsIDB4ODE3MCwgMHgxMDI1LA0KLSAgICAweDgxNzEsIDB4ODE3MSwgMHgxOTlDLCAweDgxNzIsIDB4ODE3MywgMHg0NTEyLCAweDgxNzQsIDB4ODE3NCwgMHgxOTk5LA0KLSAgICAweDgxNzUsIDB4ODE3NywgMHg0NTE0LCAweDgxNzgsIDB4ODE3OCwgMHgxRTc3LCAweDgxNzksIDB4ODE3OSwgMHgwNkI0LA0KLSAgICAweDgxN0EsIDB4ODE3QSwgMHgwRjQ2LCAweDgxN0IsIDB4ODE3QiwgMHgwQjQ4LCAweDgxN0MsIDB4ODE3RCwgMHgxOTlGLA0KLSAgICAweDgxN0UsIDB4ODE3RSwgMHgwRTJELCAweDgxN0YsIDB4ODE3RiwgMHgwRTc5LCAweDgxODAsIDB4ODE4MCwgMHgwM0ZELA0KLSAgICAweDgxODEsIDB4ODE4MSwgMHg0NTE3LCAweDgxODIsIDB4ODE4MiwgMHgxOUE2LCAweDgxODMsIDB4ODE4NywgMHg0NTE4LA0KLSAgICAweDgxODgsIDB4ODE4OCwgMHgxOUE1LCAweDgxODksIDB4ODE4OSwgMHg0NTFELCAweDgxOEEsIDB4ODE4QSwgMHgwNDc5LA0KLSAgICAweDgxOEIsIDB4ODE4RSwgMHg0NTFFLCAweDgxOEYsIDB4ODE4RiwgMHgwNkRCLCAweDgxOTAsIDB4ODE5MCwgMHg0NTIyLA0KLSAgICAweDgxOTEsIDB4ODE5MSwgMHgxOUE3LCAweDgxOTIsIDB4ODE5NywgMHg0NTIzLCAweDgxOTgsIDB4ODE5OCwgMHgwNDU1LA0KLSAgICAweDgxOTksIDB4ODE5OSwgMHg0NTI5LCAweDgxOUEsIDB4ODE5QSwgMHgxRjA2LCAweDgxOUIsIDB4ODE5QiwgMHgwRTE4LA0KLSAgICAweDgxOUMsIDB4ODE5QywgMHgwQjA3LCAweDgxOUQsIDB4ODE5RCwgMHgwRjEyLCAweDgxOUUsIDB4ODE5RiwgMHg0NTJBLA0KLSAgICAweDgxQTAsIDB4ODFBMCwgMHgxRkE1LCAweDgxQTEsIDB4ODFBMiwgMHg0NTJDLCAweDgxQTMsIDB4ODFBMywgMHgxOUE5LA0KLSAgICAweDgxQTQsIDB4ODFBNSwgMHg0NTJFLCAweDgxQTYsIDB4ODFBNiwgMHgxOUIwLCAweDgxQTcsIDB4ODFBNywgMHg0NTMwLA0KLSAgICAweDgxQTgsIDB4ODFBOCwgMHgwQkIzLCAweDgxQTksIDB4ODFBOSwgMHgyMDk5LCAweDgxQUEsIDB4ODFBQSwgMHgxOUFBLA0KLSAgICAweDgxQUIsIDB4ODFCMiwgMHg0NTMxLCAweDgxQjMsIDB4ODFCMywgMHgwQ0ZFLCAweDgxQjQsIDB4ODFCOSwgMHg0NTM5LA0KLSAgICAweDgxQkEsIDB4ODFCQSwgMHgxNjQxLCAweDgxQkIsIDB4ODFCQiwgMHgxOUFFLCAweDgxQkMsIDB4ODFCQywgMHg0NTNGLA0KLSAgICAweDgxQkQsIDB4ODFCRCwgMHgxRUFELCAweDgxQkUsIDB4ODFCRSwgMHgyNEM4LCAweDgxQkYsIDB4ODFCRiwgMHgyMEE4LA0KLSAgICAweDgxQzAsIDB4ODFDMCwgMHgwRTdGLCAweDgxQzEsIDB4ODFDMSwgMHgxOUFGLCAweDgxQzIsIDB4ODFDMiwgMHgwNDQ0LA0KLSAgICAweDgxQzMsIDB4ODFDMywgMHgxMDlDLCAweDgxQzQsIDB4ODFDNSwgMHg0NTQwLCAweDgxQzYsIDB4ODFDNiwgMHgxMDYzLA0KLSAgICAweDgxQzcsIDB4ODFDOCwgMHg0NTQyLCAweDgxQzksIDB4ODFDOSwgMHgyMDFGLCAweDgxQ0EsIDB4ODFDQSwgMHgxOUFELA0KLSAgICAweDgxQ0IsIDB4ODFDQiwgMHg0NTQ0LCAweDgxQ0MsIDB4ODFDQywgMHgxOUFCLCAweDgxQ0QsIDB4ODFDRCwgMHgyMEM1LA0KLSAgICAweDgxQ0UsIDB4ODFDRSwgMHg0NTQ1LCAweDgxQ0YsIDB4ODFDRiwgMHgyNENBLCAweDgxRDAsIDB4ODFENywgMHg0NTQ2LA0KLSAgICAweDgxRDgsIDB4ODFEOCwgMHgxRkYwLCAweDgxRDksIDB4ODFEOSwgMHg0NTRFLCAweDgxREEsIDB4ODFEQSwgMHgyNEM2LA0KLSAgICAweDgxREIsIDB4ODFERSwgMHg0NTRGLCAweDgxREYsIDB4ODFERiwgMHgyMjVELCAweDgxRTAsIDB4ODFFMCwgMHgyMkRFLA0KLSAgICAweDgxRTEsIDB4ODFFMiwgMHg0NTUzLCAweDgxRTMsIDB4ODFFMywgMHgwNEUxLCAweDgxRTQsIDB4ODFFNiwgMHg0NTU1LA0KLSAgICAweDgxRTcsIDB4ODFFNywgMHgxOTAyLCAweDgxRTgsIDB4ODFFOCwgMHgyMDJDLCAweDgxRTksIDB4ODFFOSwgMHg0NTU4LA0KLSAgICAweDgxRUEsIDB4ODFFQSwgMHgxMjMxLCAweDgxRUIsIDB4ODFFQiwgMHg0NTU5LCAweDgxRUMsIDB4ODFFQywgMHgxQ0E5LA0KLSAgICAweDgxRUQsIDB4ODFFRCwgMHgwNTE5LCAweDgxRUUsIDB4ODFGMiwgMHg0NTVBLCAweDgxRjMsIDB4ODFGNCwgMHgxMUMwLA0KLSAgICAweDgxRjUsIDB4ODFGOSwgMHg0NTVGLCAweDgxRkEsIDB4ODFGQSwgMHgyMTYxLCAweDgxRkIsIDB4ODFGQiwgMHgxMThBLA0KLSAgICAweDgxRkMsIDB4ODFGQywgMHgwOEY5LCAweDgxRkQsIDB4ODFGRCwgMHg0NTY0LCAweDgxRkUsIDB4ODFGRSwgMHgxQ0E1LA0KLSAgICAweDgxRkYsIDB4ODFGRiwgMHg0NTY1LCAweDgyMDAsIDB4ODIwMCwgMHgxMDJGLCAweDgyMDEsIDB4ODIwMiwgMHgxQ0E2LA0KLSAgICAweDgyMDMsIDB4ODIwMywgMHg0NTY2LCAweDgyMDQsIDB4ODIwNCwgMHgxQ0E4LCAweDgyMDUsIDB4ODIwNSwgMHgwOEZBLA0KLSAgICAweDgyMDYsIDB4ODIwNiwgMHgxMEM0LCAweDgyMDcsIDB4ODIwNywgMHgyMjNCLCAweDgyMDgsIDB4ODIwOCwgMHgyMUQ5LA0KLSAgICAweDgyMDksIDB4ODIwOSwgMHgxRkNCLCAweDgyMEEsIDB4ODIwQSwgMHgxRkM5LCAweDgyMEIsIDB4ODIwQiwgMHg0NTY3LA0KLSAgICAweDgyMEMsIDB4ODIwRCwgMHgwRDE5LCAweDgyMEUsIDB4ODIwRiwgMHg0NTY4LCAweDgyMTAsIDB4ODIxMCwgMHgxQzYyLA0KLSAgICAweDgyMTEsIDB4ODIxMSwgMHg0NTZBLCAweDgyMTIsIDB4ODIxMiwgMHgwRDdELCAweDgyMTMsIDB4ODIxMywgMHg0NTZCLA0KLSAgICAweDgyMTQsIDB4ODIxNCwgMHgwRTQ1LCAweDgyMTUsIDB4ODIxQSwgMHg0NTZDLCAweDgyMUIsIDB4ODIxQiwgMHgxNjE4LA0KLSAgICAweDgyMUMsIDB4ODIxQywgMHgwREE5LCAweDgyMUQsIDB4ODIxRCwgMHg0NTcyLCAweDgyMUUsIDB4ODIxRSwgMHgwRUY3LA0KLSAgICAweDgyMUYsIDB4ODIxRiwgMHgxMURBLCAweDgyMjAsIDB4ODIyMCwgMHg0NTczLCAweDgyMjEsIDB4ODIyMywgMHgxQ0FCLA0KLSAgICAweDgyMjQsIDB4ODIyNywgMHg0NTc0LCAweDgyMjgsIDB4ODIyOCwgMHgxQ0IwLCAweDgyMjksIDB4ODIyOSwgMHg0NTc4LA0KLSAgICAweDgyMkEsIDB4ODIyQSwgMHgwNzc0LCAweDgyMkIsIDB4ODIyQiwgMHgxQ0IxLCAweDgyMkMsIDB4ODIyQywgMHgwM0VFLA0KLSAgICAweDgyMkQsIDB4ODIyRCwgMHgxQ0FFLCAweDgyMkUsIDB4ODIyRSwgMHg0NTc5LCAweDgyMkYsIDB4ODIyRiwgMHgxQ0FGLA0KLSAgICAweDgyMzAsIDB4ODIzMCwgMHgwODczLCAweDgyMzEsIDB4ODIzMSwgMHgwNDlDLCAweDgyMzIsIDB4ODIzMiwgMHg0NTdBLA0KLSAgICAweDgyMzMsIDB4ODIzNCwgMHgxQ0I0LCAweDgyMzUsIDB4ODIzNSwgMHgwNjI1LCAweDgyMzYsIDB4ODIzNiwgMHgwNDc3LA0KLSAgICAweDgyMzcsIDB4ODIzNywgMHgwRjNDLCAweDgyMzgsIDB4ODIzOCwgMHgxQ0IyLCAweDgyMzksIDB4ODIzOSwgMHgwNTJGLA0KLSAgICAweDgyM0EsIDB4ODIzQSwgMHg0NTdCLCAweDgyM0IsIDB4ODIzQiwgMHgxQ0IzLCAweDgyM0MsIDB4ODIzRCwgMHg0NTdDLA0KLSAgICAweDgyM0UsIDB4ODIzRSwgMHgxQ0I2LCAweDgyM0YsIDB4ODI0MywgMHg0NTdFLCAweDgyNDQsIDB4ODI0NCwgMHgxQ0I3LA0KLSAgICAweDgyNDUsIDB4ODI0NiwgMHg0NTgzLCAweDgyNDcsIDB4ODI0NywgMHgwRTU4LCAweDgyNDgsIDB4ODI0OCwgMHg0NTg1LA0KLSAgICAweDgyNDksIDB4ODI0OSwgMHgxQ0I4LCAweDgyNEEsIDB4ODI0QSwgMHg0NTg2LCAweDgyNEIsIDB4ODI0QiwgMHgxQ0I5LA0KLSAgICAweDgyNEMsIDB4ODI0RSwgMHg0NTg3LCAweDgyNEYsIDB4ODI0RiwgMHgxQ0JBLCAweDgyNTAsIDB4ODI1NywgMHg0NThBLA0KLSAgICAweDgyNTgsIDB4ODI1OCwgMHgwREM3LCAweDgyNTksIDB4ODI1OSwgMHgxRTYxLCAweDgyNUEsIDB4ODI1QSwgMHgxQ0JCLA0KLSAgICAweDgyNUIsIDB4ODI1RSwgMHg0NTkyLCAweDgyNUYsIDB4ODI1RiwgMHgxQ0JDLCAweDgyNjAsIDB4ODI2MywgMHg0NTk2LA0KLSAgICAweDgyNjQsIDB4ODI2NCwgMHgyNUVGLCAweDgyNjUsIDB4ODI2NSwgMHg0NTlBLCAweDgyNjYsIDB4ODI2NiwgMHgxRjk4LA0KLSAgICAweDgyNjcsIDB4ODI2NywgMHg0NTlCLCAweDgyNjgsIDB4ODI2OCwgMHgxQ0JELCAweDgyNjksIDB4ODI2QSwgMHg0NTlDLA0KLSAgICAweDgyNkIsIDB4ODI2QiwgMHgyNUYwLCAweDgyNkMsIDB4ODI2RCwgMHg0NTlFLCAweDgyNkUsIDB4ODI2RSwgMHgxQ0RDLA0KLSAgICAweDgyNkYsIDB4ODI2RiwgMHgwQTA1LCAweDgyNzAsIDB4ODI3MCwgMHgwODVCLCAweDgyNzEsIDB4ODI3MSwgMHgxRjg4LA0KLSAgICAweDgyNzIsIDB4ODI3MiwgMHgwQ0U0LCAweDgyNzMsIDB4ODI3MywgMHgxMDA3LCAweDgyNzQsIDB4ODI3NCwgMHgxNzcxLA0KLSAgICAweDgyNzUsIDB4ODI3NiwgMHg0NUEwLCAweDgyNzcsIDB4ODI3NywgMHgyMUY4LCAweDgyNzgsIDB4ODI3OCwgMHg0NUEyLA0KLSAgICAweDgyNzksIDB4ODI3OSwgMHgxM0UxLCAweDgyN0EsIDB4ODI3QSwgMHgxMDVDLCAweDgyN0IsIDB4ODI3QywgMHg0NUEzLA0KLSAgICAweDgyN0QsIDB4ODI3RCwgMHgxM0UyLCAweDgyN0UsIDB4ODI3RSwgMHgwM0I3LCAweDgyN0YsIDB4ODI3RiwgMHgxM0UzLA0KLSAgICAweDgyODAsIDB4ODI4MSwgMHg0NUE1LCAweDgyODIsIDB4ODI4MiwgMHgwOEFCLCAweDgyODMsIDB4ODI4MywgMHg0NUE3LA0KLSAgICAweDgyODQsIDB4ODI4NCwgMHgxM0U3LCAweDgyODUsIDB4ODI4NywgMHg0NUE4LCAweDgyODgsIDB4ODI4OCwgMHgxMjc4LA0KLSAgICAweDgyODksIDB4ODI4OSwgMHg0NUFCLCAweDgyOEEsIDB4ODI4QSwgMHgxM0U1LCAweDgyOEIsIDB4ODI4QiwgMHgxMEQ4LA0KLSAgICAweDgyOEMsIDB4ODI4QywgMHg0NUFDLCAweDgyOEQsIDB4ODI4RCwgMHgwRDBGLCAweDgyOEUsIDB4ODI4RSwgMHgxM0U4LA0KLSAgICAweDgyOEYsIDB4ODI4RiwgMHgxM0U0LCAweDgyOTAsIDB4ODI5MCwgMHg0NUFELCAweDgyOTEsIDB4ODI5MSwgMHgxM0U5LA0KLSAgICAweDgyOTIsIDB4ODI5MiwgMHgwQUE3LCAweDgyOTMsIDB4ODI5NiwgMHg0NUFFLCAweDgyOTcsIDB4ODI5NywgMHgxM0VBLA0KLSAgICAweDgyOTgsIDB4ODI5OCwgMHgxM0YzLCAweDgyOTksIDB4ODI5OSwgMHgxM0VCLCAweDgyOUEsIDB4ODI5QiwgMHg0NUIyLA0KLSAgICAweDgyOUMsIDB4ODI5QywgMHgwRUVFLCAweDgyOUQsIDB4ODI5RCwgMHgxMUE0LCAweDgyOUUsIDB4ODI5RSwgMHg0NUI0LA0KLSAgICAweDgyOUYsIDB4ODI5RiwgMHgxM0ZELCAweDgyQTAsIDB4ODJBMCwgMHg0NUI1LCAweDgyQTEsIDB4ODJBMSwgMHgxM0ZCLA0KLSAgICAweDgyQTIsIDB4ODJBMywgMHg0NUI2LCAweDgyQTQsIDB4ODJBNCwgMHgxNDAwLCAweDgyQTUsIDB4ODJBNSwgMHgwOEI3LA0KLSAgICAweDgyQTYsIDB4ODJBNiwgMHgwQTUyLCAweDgyQTcsIDB4ODJBNywgMHg0NUI4LCAweDgyQTgsIDB4ODJBOCwgMHgxM0U2LA0KLSAgICAweDgyQTksIDB4ODJBOSwgMHgxM0Y5LCAweDgyQUEsIDB4ODJBQSwgMHgxM0ZDLCAweDgyQUIsIDB4ODJBQiwgMHgxM0VDLA0KLSAgICAweDgyQUMsIDB4ODJBQywgMHgwNjZGLCAweDgyQUQsIDB4ODJBRCwgMHgwM0QwLCAweDgyQUUsIDB4ODJBRSwgMHgxM0Y1LA0KLSAgICAweDgyQUYsIDB4ODJBRiwgMHgwRjg5LCAweDgyQjAsIDB4ODJCMCwgMHgxM0VGLCAweDgyQjEsIDB4ODJCMSwgMHgwN0JELA0KLSAgICAweDgyQjIsIDB4ODJCMiwgMHg0NUI5LCAweDgyQjMsIDB4ODJCMywgMHgwNjU5LCAweDgyQjQsIDB4ODJCNCwgMHgxM0ZBLA0KLSAgICAweDgyQjUsIDB4ODJCNiwgMHg0NUJBLCAweDgyQjcsIDB4ODJCNywgMHgxM0Y0LCAweDgyQjgsIDB4ODJCOCwgMHgxM0VELA0KLSAgICAweDgyQjksIDB4ODJCOSwgMHgwQzU4LCAweDgyQkEsIDB4ODJCQSwgMHg0NUJDLCAweDgyQkIsIDB4ODJCQiwgMHgyMzIyLA0KLSAgICAweDgyQkMsIDB4ODJCQywgMHg0NUJELCAweDgyQkQsIDB4ODJCRCwgMHgwRkU4LCAweDgyQkUsIDB4ODJCRSwgMHgxM0VFLA0KLSAgICAweDgyQkYsIDB4ODJDMCwgMHg0NUJFLCAweDgyQzEsIDB4ODJDMSwgMHgxM0Y4LCAweDgyQzIsIDB4ODJDMywgMHg0NUMwLA0KLSAgICAweDgyQzQsIDB4ODJDNCwgMHgxM0ZFLCAweDgyQzUsIDB4ODJDNiwgMHg0NUMyLCAweDgyQzcsIDB4ODJDNywgMHgwRUJDLA0KLSAgICAweDgyQzgsIDB4ODJDOCwgMHgxM0YwLCAweDgyQzksIDB4ODJDOSwgMHg0NUM0LCAweDgyQ0EsIDB4ODJDQSwgMHgxM0YxLA0KLSAgICAweDgyQ0IsIDB4ODJDQywgMHgxM0Y2LCAweDgyQ0QsIDB4ODJDRCwgMHgwNDlCLCAweDgyQ0UsIDB4ODJDRSwgMHgxM0ZGLA0KLSAgICAweDgyQ0YsIDB4ODJDRiwgMHgwRENBLCAweDgyRDAsIDB4ODJEMCwgMHg0NUM1LCAweDgyRDEsIDB4ODJEMSwgMHgxMEZBLA0KLSAgICAweDgyRDIsIDB4ODJEMiwgMHgxNDA5LCAweDgyRDMsIDB4ODJEMywgMHgxNDBELCAweDgyRDQsIDB4ODJENCwgMHgwREY5LA0KLSAgICAweDgyRDUsIDB4ODJENSwgMHgxNDE0LCAweDgyRDYsIDB4ODJENiwgMHg0NUM2LCAweDgyRDcsIDB4ODJENywgMHgwQUVDLA0KLSAgICAweDgyRDgsIDB4ODJEOCwgMHgxNDBBLCAweDgyRDksIDB4ODJEQSwgMHg0NUM3LCAweDgyREIsIDB4ODJEQiwgMHgwOTRFLA0KLSAgICAweDgyREMsIDB4ODJEQywgMHgxNDA3LCAweDgyREQsIDB4ODJERCwgMHg0NUM5LCAweDgyREUsIDB4ODJERSwgMHgwNDA1LA0KLSAgICAweDgyREYsIDB4ODJERiwgMHgwNzBGLCAweDgyRTAsIDB4ODJFMCwgMHgxNDEzLCAweDgyRTEsIDB4ODJFMSwgMHgxNDAxLA0KLSAgICAweDgyRTIsIDB4ODJFMiwgMHg0NUNBLCAweDgyRTMsIDB4ODJFMywgMHgxM0YyLCAweDgyRTQsIDB4ODJFNCwgMHgxNDA0LA0KLSAgICAweDgyRTUsIDB4ODJFNSwgMHgwQ0NGLCAweDgyRTYsIDB4ODJFNiwgMHgwOTZELCAweDgyRTcsIDB4ODJFNywgMHgyMzM2LA0KLSAgICAweDgyRTgsIDB4ODJFQSwgMHg0NUNCLCAweDgyRUIsIDB4ODJFQiwgMHgwQ0Y0LCAweDgyRUMsIDB4ODJFRSwgMHg0NUNFLA0KLSAgICAweDgyRUYsIDB4ODJFRiwgMHgwNDI2LCAweDgyRjAsIDB4ODJGMCwgMHg0NUQxLCAweDgyRjEsIDB4ODJGMSwgMHgxMDg3LA0KLSAgICAweDgyRjIsIDB4ODJGMywgMHg0NUQyLCAweDgyRjQsIDB4ODJGNCwgMHgxNDA4LCAweDgyRjUsIDB4ODJGNiwgMHg0NUQ0LA0KLSAgICAweDgyRjcsIDB4ODJGNywgMHgxNDAzLCAweDgyRjgsIDB4ODJGOCwgMHg0NUQ2LCAweDgyRjksIDB4ODJGOSwgMHgwQkRBLA0KLSAgICAweDgyRkEsIDB4ODJGQSwgMHg0NUQ3LCAweDgyRkIsIDB4ODJGQiwgMHgxNDBDLCAweDgyRkMsIDB4ODJGRiwgMHg0NUQ4LA0KLSAgICAweDgzMDAsIDB4ODMwMCwgMHg0NURDLCAweDgzMDEsIDB4ODMwMSwgMHgxMjFGLCAweDgzMDIsIDB4ODMwMiwgMHgwQUI0LA0KLSAgICAweDgzMDMsIDB4ODMwMywgMHgwNjUzLCAweDgzMDQsIDB4ODMwNCwgMHgwQzRFLCAweDgzMDUsIDB4ODMwNSwgMHgwQUFFLA0KLSAgICAweDgzMDYsIDB4ODMwNiwgMHgxNDEwLCAweDgzMDcsIDB4ODMwNywgMHgxNDA2LCAweDgzMDgsIDB4ODMwOCwgMHgxNDE5LA0KLSAgICAweDgzMDksIDB4ODMwOSwgMHgxNDAyLCAweDgzMEEsIDB4ODMwQiwgMHg0NURELCAweDgzMEMsIDB4ODMwQywgMHgxNDBCLA0KLSAgICAweDgzMEQsIDB4ODMwRCwgMHg0NURGLCAweDgzMEUsIDB4ODMwRSwgMHgwOEQ0LCAweDgzMEYsIDB4ODMwRiwgMHgxNDA1LA0KLSAgICAweDgzMTAsIDB4ODMxMCwgMHg0NUUwLCAweDgzMTEsIDB4ODMxMSwgMHgxNDBFLCAweDgzMTIsIDB4ODMxMywgMHg0NUUxLA0KLSAgICAweDgzMTQsIDB4ODMxNSwgMHgxNDExLCAweDgzMTYsIDB4ODMxNiwgMHg0NUUzLCAweDgzMTcsIDB4ODMxNywgMHgxNDI2LA0KLSAgICAweDgzMTgsIDB4ODMxOSwgMHg0NUU0LCAweDgzMUEsIDB4ODMxQSwgMHgxNDBGLCAweDgzMUIsIDB4ODMxQiwgMHgxNDJFLA0KLSAgICAweDgzMUMsIDB4ODMxQywgMHgxNDE1LCAweDgzMUQsIDB4ODMyNiwgMHg0NUU2LCAweDgzMjcsIDB4ODMyNywgMHgwODVFLA0KLSAgICAweDgzMjgsIDB4ODMyOCwgMHgwNTQ3LCAweDgzMjksIDB4ODMyQSwgMHg0NUYwLCAweDgzMkIsIDB4ODMyQiwgMHgwQUE4LA0KLSAgICAweDgzMkMsIDB4ODMyQywgMHgwNEFFLCAweDgzMkQsIDB4ODMyRCwgMHgxNDI4LCAweDgzMkUsIDB4ODMyRSwgMHg0NUYyLA0KLSAgICAweDgzMkYsIDB4ODMyRiwgMHgxNDIwLCAweDgzMzAsIDB4ODMzMCwgMHg0NUYzLCAweDgzMzEsIDB4ODMzMSwgMHgxNDFELA0KLSAgICAweDgzMzIsIDB4ODMzMiwgMHg0NUY0LCAweDgzMzMsIDB4ODMzMywgMHgxNDJBLCAweDgzMzQsIDB4ODMzNCwgMHgxNDFDLA0KLSAgICAweDgzMzUsIDB4ODMzNSwgMHgxMDc3LCAweDgzMzYsIDB4ODMzNiwgMHgwNEFGLCAweDgzMzcsIDB4ODMzNywgMHg0NUY1LA0KLSAgICAweDgzMzgsIDB4ODMzOCwgMHgwQ0IyLCAweDgzMzksIDB4ODMzOSwgMHgwQ0JFLCAweDgzM0EsIDB4ODMzQSwgMHgxNDI5LA0KLSAgICAweDgzM0IsIDB4ODMzQiwgMHg0NUY2LCAweDgzM0MsIDB4ODMzQywgMHgxNDFCLCAweDgzM0QsIDB4ODMzRiwgMHg0NUY3LA0KLSAgICAweDgzNDAsIDB4ODM0MCwgMHgxNDI1LCAweDgzNDEsIDB4ODM0MiwgMHg0NUZBLCAweDgzNDMsIDB4ODM0MywgMHgxNDIzLA0KLSAgICAweDgzNDQsIDB4ODM0NSwgMHg0NUZDLCAweDgzNDYsIDB4ODM0NiwgMHgwOEQyLCAweDgzNDcsIDB4ODM0NywgMHgxNDIyLA0KLSAgICAweDgzNDgsIDB4ODM0OCwgMHg0NUZFLCAweDgzNDksIDB4ODM0OSwgMHgwNEE0LCAweDgzNEEsIDB4ODM0RSwgMHg0NUZGLA0KLSAgICAweDgzNEYsIDB4ODM0RiwgMHgxNDIxLCAweDgzNTAsIDB4ODM1MCwgMHgwODY5LCAweDgzNTEsIDB4ODM1MSwgMHgxNDE2LA0KLSAgICAweDgzNTIsIDB4ODM1MiwgMHgwN0Q5LCAweDgzNTMsIDB4ODM1MywgMHg0NjA0LCAweDgzNTQsIDB4ODM1NCwgMHgwOURFLA0KLSAgICAweDgzNTUsIDB4ODM1OSwgMHg0NjA1LCAweDgzNUEsIDB4ODM1QSwgMHgwODQ3LCAweDgzNUIsIDB4ODM1QywgMHgxNDE3LA0KLSAgICAweDgzNUQsIDB4ODM1RCwgMHg0NjBBLCAweDgzNUUsIDB4ODM1RSwgMHgxNDFGLCAweDgzNUYsIDB4ODM1RiwgMHgxNDI0LA0KLSAgICAweDgzNjAsIDB4ODM2MCwgMHgxNDI3LCAweDgzNjEsIDB4ODM2MSwgMHgwNTk1LCAweDgzNjIsIDB4ODM2MiwgMHg0NjBCLA0KLSAgICAweDgzNjMsIDB4ODM2MywgMHgwQ0I0LCAweDgzNjQsIDB4ODM2NCwgMHgwN0ZDLCAweDgzNjUsIDB4ODM2NSwgMHgxNDJDLA0KLSAgICAweDgzNjYsIDB4ODM2NiwgMHgxNDJCLCAweDgzNjcsIDB4ODM2NywgMHgxMDkwLCAweDgzNjgsIDB4ODM2OCwgMHgxNDJELA0KLSAgICAweDgzNjksIDB4ODM2OSwgMHgxNDJGLCAweDgzNkEsIDB4ODM2QSwgMHgxNDMxLCAweDgzNkIsIDB4ODM2QiwgMHgxMDc4LA0KLSAgICAweDgzNkMsIDB4ODM2QywgMHgxNDMwLCAweDgzNkQsIDB4ODM2RSwgMHgxNDMyLCAweDgzNkYsIDB4ODM2RiwgMHgxMDMwLA0KLSAgICAweDgzNzAsIDB4ODM3NiwgMHg0NjBDLCAweDgzNzcsIDB4ODM3NywgMHgwNzgwLCAweDgzNzgsIDB4ODM3OCwgMHgxNDM1LA0KLSAgICAweDgzNzksIDB4ODM3QSwgMHg0NjEzLCAweDgzN0IsIDB4ODM3QiwgMHgxNDQyLCAweDgzN0MsIDB4ODM3QywgMHgxNDNELA0KLSAgICAweDgzN0QsIDB4ODM3RCwgMHgxNDQwLCAweDgzN0UsIDB4ODM4NCwgMHg0NjE1LCAweDgzODUsIDB4ODM4NSwgMHgxNDNDLA0KLSAgICAweDgzODYsIDB4ODM4NiwgMHgwQkVELCAweDgzODcsIDB4ODM4OCwgMHg0NjFDLCAweDgzODksIDB4ODM4OSwgMHgwOURELA0KLSAgICAweDgzOEEsIDB4ODM4QSwgMHgyMkFCLCAweDgzOEIsIDB4ODM4RCwgMHg0NjFFLCAweDgzOEUsIDB4ODM4RSwgMHgwQ0U4LA0KLSAgICAweDgzOEYsIDB4ODM5MSwgMHg0NjIxLCAweDgzOTIsIDB4ODM5MiwgMHgxNDFBLCAweDgzOTMsIDB4ODM5MywgMHgxNDNBLA0KLSAgICAweDgzOTQsIDB4ODM5NSwgMHg0NjI0LCAweDgzOTYsIDB4ODM5NiwgMHgxRkJGLCAweDgzOTcsIDB4ODM5NywgMHg0NjI2LA0KLSAgICAweDgzOTgsIDB4ODM5OCwgMHgxNDQzLCAweDgzOTksIDB4ODM5QSwgMHg0NjI3LCAweDgzOUIsIDB4ODM5QiwgMHgxNDFFLA0KLSAgICAweDgzOUMsIDB4ODM5QywgMHgxNDNCLCAweDgzOUQsIDB4ODM5RCwgMHg0NjI5LCAweDgzOUUsIDB4ODM5RSwgMHgxNDQ0LA0KLSAgICAweDgzOUYsIDB4ODM5RiwgMHg0NjJBLCAweDgzQTAsIDB4ODNBMCwgMHgxNDM4LCAweDgzQTEsIDB4ODNBMSwgMHg0NjJCLA0KLSAgICAweDgzQTIsIDB4ODNBMiwgMHgxRjdELCAweDgzQTMsIDB4ODNBNiwgMHg0NjJDLCAweDgzQTcsIDB4ODNBNywgMHgyMzMzLA0KLSAgICAweDgzQTgsIDB4ODNBOCwgMHgxNDQ1LCAweDgzQTksIDB4ODNBOSwgMHgxNDNGLCAweDgzQUEsIDB4ODNBQSwgMHgxNDM5LA0KLSAgICAweDgzQUIsIDB4ODNBQiwgMHgwQjBELCAweDgzQUMsIDB4ODNBRiwgMHg0NjMwLCAweDgzQjAsIDB4ODNCMCwgMHgxNDM0LA0KLSAgICAweDgzQjEsIDB4ODNCMSwgMHgwOTlFLCAweDgzQjIsIDB4ODNCMiwgMHgwOUY0LCAweDgzQjMsIDB4ODNCNCwgMHgxNDM2LA0KLSAgICAweDgzQjUsIDB4ODNCNSwgMHg0NjM0LCAweDgzQjYsIDB4ODNCNiwgMHgxNDNFLCAweDgzQjcsIDB4ODNCNywgMHgwODA2LA0KLSAgICAweDgzQjgsIDB4ODNCOCwgMHgxNDQxLCAweDgzQjksIDB4ODNCOSwgMHgxMDhELCAweDgzQkEsIDB4ODNCQSwgMHgxNDQ2LA0KLSAgICAweDgzQkIsIDB4ODNCQiwgMHg0NjM1LCAweDgzQkMsIDB4ODNCQywgMHgxNDQ3LCAweDgzQkQsIDB4ODNCRCwgMHgwQUFDLA0KLSAgICAweDgzQkUsIDB4ODNCRiwgMHg0NjM2LCAweDgzQzAsIDB4ODNDMCwgMHgxNDVFLCAweDgzQzEsIDB4ODNDMSwgMHgxNDQ4LA0KLSAgICAweDgzQzIsIDB4ODNDNCwgMHg0NjM4LCAweDgzQzUsIDB4ODNDNSwgMHgxNDVELCAweDgzQzYsIDB4ODNDNiwgMHg0NjNCLA0KLSAgICAweDgzQzcsIDB4ODNDNywgMHgwNzE2LCAweDgzQzgsIDB4ODNDOSwgMHg0NjNDLCAweDgzQ0EsIDB4ODNDQSwgMHgwOTA0LA0KLSAgICAweDgzQ0IsIDB4ODNDQiwgMHg0NjNFLCAweDgzQ0MsIDB4ODNDQywgMHgwOTI5LCAweDgzQ0QsIDB4ODNDRSwgMHg0NjNGLA0KLSAgICAweDgzQ0YsIDB4ODNDRiwgMHgwNzgxLCAweDgzRDAsIDB4ODNEMywgMHg0NjQxLCAweDgzRDQsIDB4ODNENCwgMHgxNDU2LA0KLSAgICAweDgzRDUsIDB4ODNENSwgMHg0NjQ1LCAweDgzRDYsIDB4ODNENiwgMHgxNDUxLCAweDgzRDcsIDB4ODNENywgMHg0NjQ2LA0KLSAgICAweDgzRDgsIDB4ODNEOCwgMHgxNDRCLCAweDgzRDksIDB4ODNEQiwgMHg0NjQ3LCAweDgzREMsIDB4ODNEQywgMHgwNDkyLA0KLSAgICAweDgzREQsIDB4ODNERCwgMHgxNDRGLCAweDgzREUsIDB4ODNERSwgMHg0NjRBLCAweDgzREYsIDB4ODNERiwgMHgxNDU3LA0KLSAgICAweDgzRTAsIDB4ODNFMCwgMHgwNDZCLCAweDgzRTEsIDB4ODNFMSwgMHgxNDYxLCAweDgzRTIsIDB4ODNFNCwgMHg0NjRCLA0KLSAgICAweDgzRTUsIDB4ODNFNSwgMHgxNDRBLCAweDgzRTYsIDB4ODNFOCwgMHg0NjRFLCAweDgzRTksIDB4ODNFOSwgMHgwQkVGLA0KLSAgICAweDgzRUEsIDB4ODNFQSwgMHgxNDVDLCAweDgzRUIsIDB4ODNFRSwgMHg0NjUxLCAweDgzRUYsIDB4ODNFRiwgMHgxRjRELA0KLSAgICAweDgzRjAsIDB4ODNGMCwgMHgxNDYwLCAweDgzRjEsIDB4ODNGMSwgMHgwQTJCLCAweDgzRjIsIDB4ODNGMiwgMHgwNjYzLA0KLSAgICAweDgzRjMsIDB4ODNGNywgMHg0NjU1LCAweDgzRjgsIDB4ODNGOSwgMHgxNDVBLCAweDgzRkEsIDB4ODNGQywgMHg0NjVBLA0KLSAgICAweDgzRkQsIDB4ODNGRCwgMHgxNDUwLCAweDgzRkUsIDB4ODNGRiwgMHg0NjVELCAweDg0MDAsIDB4ODQwMCwgMHg0NjVGLA0KLSAgICAweDg0MDEsIDB4ODQwMSwgMHgxNDQ5LCAweDg0MDIsIDB4ODQwMiwgMHg0NjYwLCAweDg0MDMsIDB4ODQwMywgMHgxNDU5LA0KLSAgICAweDg0MDQsIDB4ODQwNCwgMHgwRTI0LCAweDg0MDUsIDB4ODQwNSwgMHg0NjYxLCAweDg0MDYsIDB4ODQwNiwgMHgxNDU1LA0KLSAgICAweDg0MDcsIDB4ODQwNywgMHgyMzM0LCAweDg0MDgsIDB4ODQwOSwgMHg0NjYyLCAweDg0MEEsIDB4ODQwQSwgMHgxRkYxLA0KLSAgICAweDg0MEIsIDB4ODQwQiwgMHgxNDRFLCAweDg0MEMsIDB4ODQwQywgMHgwQUNELCAweDg0MEQsIDB4ODQwRCwgMHgwQkRCLA0KLSAgICAweDg0MEUsIDB4ODQwRSwgMHgwRUJELCAweDg0MEYsIDB4ODQwRiwgMHgxNDU4LCAweDg0MTAsIDB4ODQxMCwgMHg0NjY0LA0KLSAgICAweDg0MTEsIDB4ODQxMSwgMHgxNDU0LCAweDg0MTIsIDB4ODQxNywgMHg0NjY1LCAweDg0MTgsIDB4ODQxOCwgMHgxNDRELA0KLSAgICAweDg0MTksIDB4ODQxQiwgMHg0NjZCLCAweDg0MUMsIDB4ODQxQywgMHgxNDUyLCAweDg0MUQsIDB4ODQxRCwgMHgwQTgzLA0KLSAgICAweDg0MUUsIDB4ODQyMywgMHg0NjZFLCAweDg0MjQsIDB4ODQyNSwgMHgxMDhFLCAweDg0MjYsIDB4ODQyNiwgMHgxNDVGLA0KLSAgICAweDg0MjcsIDB4ODQyNywgMHgwRjYxLCAweDg0MjgsIDB4ODQyOCwgMHgwQ0QzLCAweDg0MjksIDB4ODQyQiwgMHg0Njc0LA0KLSAgICAweDg0MkMsIDB4ODQyQywgMHgyMThCLCAweDg0MkQsIDB4ODQzMCwgMHg0Njc3LCAweDg0MzEsIDB4ODQzMSwgMHgxNDcyLA0KLSAgICAweDg0MzIsIDB4ODQzNCwgMHg0NjdCLCAweDg0MzUsIDB4ODQzNSwgMHgyMzQ5LCAweDg0MzYsIDB4ODQzNywgMHg0NjdFLA0KLSAgICAweDg0MzgsIDB4ODQzOCwgMHgxNDUzLCAweDg0MzksIDB4ODQzQiwgMHg0NjgwLCAweDg0M0MsIDB4ODQzQywgMHgxNDZDLA0KLSAgICAweDg0M0QsIDB4ODQzRCwgMHgwQThCLCAweDg0M0UsIDB4ODQ0NSwgMHg0NjgzLCAweDg0NDYsIDB4ODQ0NiwgMHgxNDZELA0KLSAgICAweDg0NDcsIDB4ODQ0OCwgMHg0NjhCLCAweDg0NDksIDB4ODQ0OSwgMHgyMjBCLCAweDg0NEEsIDB4ODQ1MCwgMHg0NjhELA0KLSAgICAweDg0NTEsIDB4ODQ1MSwgMHgxNDYzLCAweDg0NTIsIDB4ODQ1MiwgMHgyMzQ2LCAweDg0NTMsIDB4ODQ1NiwgMHg0Njk0LA0KLSAgICAweDg0NTcsIDB4ODQ1NywgMHgxMUY3LCAweDg0NTgsIDB4ODQ1OCwgMHg0Njk4LCAweDg0NTksIDB4ODQ1OSwgMHgxNDY1LA0KLSAgICAweDg0NUEsIDB4ODQ1QSwgMHgxNDY0LCAweDg0NUIsIDB4ODQ1QiwgMHgwNkVCLCAweDg0NUMsIDB4ODQ1QywgMHgxNDYyLA0KLSAgICAweDg0NUQsIDB4ODQ2MCwgMHg0Njk5LCAweDg0NjEsIDB4ODQ2MSwgMHgwQkVFLCAweDg0NjIsIDB4ODQ2MiwgMHg0NjlELA0KLSAgICAweDg0NjMsIDB4ODQ2MywgMHgwNUVDLCAweDg0NjQsIDB4ODQ2NCwgMHgyMzQ3LCAweDg0NjUsIDB4ODQ2NSwgMHg0NjlFLA0KLSAgICAweDg0NjYsIDB4ODQ2NiwgMHgyMTkzLCAweDg0NjcsIDB4ODQ2OCwgMHg0NjlGLCAweDg0NjksIDB4ODQ2OSwgMHgxNDZFLA0KLSAgICAweDg0NkEsIDB4ODQ2QSwgMHg0NkExLCAweDg0NkIsIDB4ODQ2QiwgMHgwN0IwLCAweDg0NkMsIDB4ODQ2QywgMHgxMTI0LA0KLSAgICAweDg0NkQsIDB4ODQ2RCwgMHgxNDczLCAweDg0NkUsIDB4ODQ2RSwgMHg0NkEyLCAweDg0NkYsIDB4ODQ2RiwgMHgyNkExLA0KLSAgICAweDg0NzAsIDB4ODQ3MCwgMHg0NkEzLCAweDg0NzEsIDB4ODQ3MSwgMHgwNTUzLCAweDg0NzIsIDB4ODQ3MiwgMHg0NkE0LA0KLSAgICAweDg0NzMsIDB4ODQ3MywgMHgxNDY2LCAweDg0NzQsIDB4ODQ3NCwgMHg0NkE1LCAweDg0NzUsIDB4ODQ3NSwgMHgwOTg4LA0KLSAgICAweDg0NzYsIDB4ODQ3NiwgMHgxNDZGLCAweDg0NzcsIDB4ODQ3NywgMHgxRjYyLCAweDg0NzgsIDB4ODQ3OCwgMHgxNDZCLA0KLSAgICAweDg0NzksIDB4ODQ3OSwgMHg0NkE2LCAweDg0N0EsIDB4ODQ3QSwgMHgxNDY5LCAweDg0N0IsIDB4ODQ4MSwgMHg0NkE3LA0KLSAgICAweDg0ODIsIDB4ODQ4MiwgMHgwNUJBLCAweDg0ODMsIDB4ODQ4NiwgMHg0NkFFLCAweDg0ODcsIDB4ODQ4OCwgMHgxNDY3LA0KLSAgICAweDg0ODksIDB4ODQ4OSwgMHgxNDZBLCAweDg0OEEsIDB4ODQ4QSwgMHg0NkIyLCAweDg0OEIsIDB4ODQ4QiwgMHgwODgwLA0KLSAgICAweDg0OEMsIDB4ODQ4QywgMHgxNDcwLCAweDg0OEQsIDB4ODQ4RCwgMHg0NkIzLCAweDg0OEUsIDB4ODQ4RSwgMHgxNDcxLA0KLSAgICAweDg0OEYsIDB4ODQ5MiwgMHg0NkI0LCAweDg0OTMsIDB4ODQ5MywgMHgyMzRELCAweDg0OTQsIDB4ODQ5NCwgMHgyMzQ4LA0KLSAgICAweDg0OTUsIDB4ODQ5NiwgMHg0NkI4LCAweDg0OTcsIDB4ODQ5NywgMHgxNDgxLCAweDg0OTgsIDB4ODQ5OCwgMHg0NkJBLA0KLSAgICAweDg0OTksIDB4ODQ5OSwgMHgwQUNFLCAweDg0OUEsIDB4ODQ5QiwgMHg0NkJCLCAweDg0OUMsIDB4ODQ5QywgMHgwREQ3LA0KLSAgICAweDg0OUQsIDB4ODRBMCwgMHg0NkJELCAweDg0QTEsIDB4ODRBMSwgMHgxNDdFLCAweDg0QTIsIDB4ODRBRSwgMHg0NkMxLA0KLSAgICAweDg0QUYsIDB4ODRBRiwgMHgxMjk3LCAweDg0QjAsIDB4ODRCMSwgMHg0NkNFLCAweDg0QjIsIDB4ODRCMiwgMHgwQkYwLA0KLSAgICAweDg0QjMsIDB4ODRCMywgMHg0NkQwLCAweDg0QjQsIDB4ODRCNCwgMHgxNDgwLCAweDg0QjUsIDB4ODRCNywgMHg0NkQxLA0KLSAgICAweDg0QjgsIDB4ODRCOCwgMHgxMTk1LCAweDg0QjksIDB4ODRCOSwgMHgxNDdGLCAweDg0QkEsIDB4ODRCQSwgMHgxNDdDLA0KLSAgICAweDg0QkIsIDB4ODRCQiwgMHg0NkQ0LCAweDg0QkMsIDB4ODRCQywgMHgxRTYwLCAweDg0QkQsIDB4ODRCRCwgMHgxNDc4LA0KLSAgICAweDg0QkUsIDB4ODRCRSwgMHg0NkQ1LCAweDg0QkYsIDB4ODRCRiwgMHgxNDdCLCAweDg0QzAsIDB4ODRDMCwgMHgyMzQ1LA0KLSAgICAweDg0QzEsIDB4ODRDMSwgMHgxNDc0LCAweDg0QzIsIDB4ODRDMywgMHg0NkQ2LCAweDg0QzQsIDB4ODRDNCwgMHgwRkI5LA0KLSAgICAweDg0QzUsIDB4ODRDOCwgMHg0NkQ4LCAweDg0QzksIDB4ODRDOSwgMHgwQ0IzLCAweDg0Q0EsIDB4ODRDQSwgMHgxNDdBLA0KLSAgICAweDg0Q0IsIDB4ODRDQiwgMHgxRjEyLCAweDg0Q0MsIDB4ODRDQywgMHg0NkRDLCAweDg0Q0QsIDB4ODRDRCwgMHgxNDc1LA0KLSAgICAweDg0Q0UsIDB4ODRDRiwgMHg0NkRELCAweDg0RDAsIDB4ODREMCwgMHgxNDc2LCAweDg0RDEsIDB4ODREMSwgMHgwREU3LA0KLSAgICAweDg0RDIsIDB4ODREMiwgMHg0NkRGLCAweDg0RDMsIDB4ODREMywgMHgxNDc5LCAweDg0RDQsIDB4ODRENSwgMHg0NkUwLA0KLSAgICAweDg0RDYsIDB4ODRENiwgMHgwNDM2LCAweDg0RDcsIDB4ODREQywgMHg0NkUyLCAweDg0REQsIDB4ODRERCwgMHgwOUExLA0KLSAgICAweDg0REUsIDB4ODRERSwgMHg0NkU4LCAweDg0REYsIDB4ODRERiwgMHgwODJFLCAweDg0RTAsIDB4ODRFMCwgMHgxNDdELA0KLSAgICAweDg0RTEsIDB4ODRFMiwgMHg0NkU5LCAweDg0RTMsIDB4ODRFMywgMHgxNDgzLCAweDg0RTQsIDB4ODRFNCwgMHg0NkVCLA0KLSAgICAweDg0RTUsIDB4ODRFNSwgMHgxNDgyLCAweDg0RTYsIDB4ODRFNiwgMHgxNDc3LCAweDg0RTcsIDB4ODRFQiwgMHg0NkVDLA0KLSAgICAweDg0RUMsIDB4ODRFQywgMHgwQkFGLCAweDg0RUQsIDB4ODRFRCwgMHg0NkYxLCAweDg0RUUsIDB4ODRFRSwgMHgyMDE4LA0KLSAgICAweDg0RUYsIDB4ODRFRiwgMHgyMzM1LCAweDg0RjAsIDB4ODRGMCwgMHgxNDg3LCAweDg0RjEsIDB4ODRGQiwgMHg0NkYyLA0KLSAgICAweDg0RkMsIDB4ODRGQywgMHgxNDhFLCAweDg0RkQsIDB4ODRGRCwgMHgyMzNDLCAweDg0RkUsIDB4ODRGRSwgMHg0NkZELA0KLSAgICAweDg0RkYsIDB4ODRGRiwgMHgxNDhELCAweDg1MDAsIDB4ODUwQiwgMHg0NkZFLCAweDg1MEMsIDB4ODUwQywgMHgxNDg0LA0KLSAgICAweDg1MEQsIDB4ODUxMCwgMHg0NzBBLCAweDg1MTEsIDB4ODUxMSwgMHgwQUY0LCAweDg1MTIsIDB4ODUxMiwgMHg0NzBFLA0KLSAgICAweDg1MTMsIDB4ODUxMywgMHgwQUEyLCAweDg1MTQsIDB4ODUxNCwgMHgyNjZGLCAweDg1MTUsIDB4ODUxNiwgMHg0NzBGLA0KLSAgICAweDg1MTcsIDB4ODUxNywgMHgxMTgyLCAweDg1MTgsIDB4ODUxOSwgMHg0NzExLCAweDg1MUEsIDB4ODUxQSwgMHgwRUM0LA0KLSAgICAweDg1MUIsIDB4ODUxRCwgMHg0NzEzLCAweDg1MUUsIDB4ODUxRSwgMHgyMzUxLCAweDg1MUYsIDB4ODUxRiwgMHgxNDg5LA0KLSAgICAweDg1MjAsIDB4ODUyMCwgMHg0NzE2LCAweDg1MjEsIDB4ODUyMSwgMHgwNDkzLCAweDg1MjIsIDB4ODUyMiwgMHg0NzE3LA0KLSAgICAweDg1MjMsIDB4ODUyMywgMHgxRkEwLCAweDg1MjQsIDB4ODUyNSwgMHg0NzE4LCAweDg1MjYsIDB4ODUyNiwgMHgyMzM4LA0KLSAgICAweDg1MjcsIDB4ODUyQSwgMHg0NzFBLCAweDg1MkIsIDB4ODUyQiwgMHgwQjRCLCAweDg1MkMsIDB4ODUyQywgMHgwRDc2LA0KLSAgICAweDg1MkQsIDB4ODUyRCwgMHgyMjFCLCAweDg1MkUsIDB4ODUzNiwgMHg0NzFFLCAweDg1MzcsIDB4ODUzNywgMHgwQzNCLA0KLSAgICAweDg1MzgsIDB4ODUzOCwgMHgxNDg2LCAweDg1MzksIDB4ODUzOSwgMHgxNDg4LCAweDg1M0EsIDB4ODUzQSwgMHgxNDhBLA0KLSAgICAweDg1M0IsIDB4ODUzQiwgMHgxNDhDLCAweDg1M0MsIDB4ODUzQywgMHgwM0I1LCAweDg1M0QsIDB4ODUzRCwgMHgwNDM3LA0KLSAgICAweDg1M0UsIDB4ODU0MCwgMHg0NzI3LCAweDg1NDEsIDB4ODU0MSwgMHgyMzQyLCAweDg1NDIsIDB4ODU0MiwgMHg0NzJBLA0KLSAgICAweDg1NDMsIDB4ODU0MywgMHgxNDk2LCAweDg1NDQsIDB4ODU0NSwgMHg0NzJCLCAweDg1NDYsIDB4ODU0NiwgMHgyMzRGLA0KLSAgICAweDg1NDcsIDB4ODU0NywgMHg0NzJELCAweDg1NDgsIDB4ODU0OCwgMHgxNDkwLCAweDg1NDksIDB4ODU0OSwgMHgwODg3LA0KLSAgICAweDg1NEEsIDB4ODU0QSwgMHgwQ0NBLCAweDg1NEIsIDB4ODU0RCwgMHg0NzJFLCAweDg1NEUsIDB4ODU0RSwgMHgyMzNELA0KLSAgICAweDg1NEYsIDB4ODU1MSwgMHg0NzMxLCAweDg1NTIsIDB4ODU1MiwgMHgyMzQ0LCAweDg1NTMsIDB4ODU1MywgMHgyMzMxLA0KLSAgICAweDg1NTQsIDB4ODU1NCwgMHg0NzM0LCAweDg1NTUsIDB4ODU1NSwgMHgyMzRCLCAweDg1NTYsIDB4ODU1NiwgMHgxNDhCLA0KLSAgICAweDg1NTcsIDB4ODU1NywgMHg0NzM1LCAweDg1NTgsIDB4ODU1OCwgMHgyMzNCLCAweDg1NTksIDB4ODU1OSwgMHgxNDhGLA0KLSAgICAweDg1NUEsIDB4ODU1RCwgMHg0NzM2LCAweDg1NUUsIDB4ODU1RSwgMHgxNDkzLCAweDg1NUYsIDB4ODU2MSwgMHg0NzNBLA0KLSAgICAweDg1NjIsIDB4ODU2MiwgMHgyMzUwLCAweDg1NjMsIDB4ODU2MywgMHg0NzNELCAweDg1NjQsIDB4ODU2NCwgMHgxNDkyLA0KLSAgICAweDg1NjUsIDB4ODU2NywgMHg0NzNFLCAweDg1NjgsIDB4ODU2OCwgMHgxNDkxLCAweDg1NjksIDB4ODU2OSwgMHgxRUI0LA0KLSAgICAweDg1NkEsIDB4ODU2QSwgMHgyMUE2LCAweDg1NkIsIDB4ODU2QywgMHg0NzQxLCAweDg1NkQsIDB4ODU2RCwgMHgyMUNCLA0KLSAgICAweDg1NkUsIDB4ODU3MSwgMHg0NzQzLCAweDg1NzIsIDB4ODU3MiwgMHgxNDk3LCAweDg1NzMsIDB4ODU3MywgMHg0NzQ3LA0KLSAgICAweDg1NzQsIDB4ODU3NCwgMHgxMTBGLCAweDg1NzUsIDB4ODU3NiwgMHg0NzQ4LCAweDg1NzcsIDB4ODU3NywgMHgyMzU1LA0KLSAgICAweDg1NzgsIDB4ODU3OCwgMHg0NzRBLCAweDg1NzksIDB4ODU3OSwgMHgxNDlELCAweDg1N0EsIDB4ODU3QSwgMHgxNDk0LA0KLSAgICAweDg1N0IsIDB4ODU3QiwgMHgxNDk4LCAweDg1N0MsIDB4ODU3RCwgMHg0NzRCLCAweDg1N0UsIDB4ODU3RSwgMHgwOUM0LA0KLSAgICAweDg1N0YsIDB4ODU4MywgMHg0NzRELCAweDg1ODQsIDB4ODU4NCwgMHgwNDBBLCAweDg1ODUsIDB4ODU4NSwgMHgxNEEwLA0KLSAgICAweDg1ODYsIDB4ODU4NiwgMHg0NzUyLCAweDg1ODcsIDB4ODU4NywgMHgxNDlCLCAweDg1ODgsIDB4ODU4OCwgMHgyMzNFLA0KLSAgICAweDg1ODksIDB4ODU4OSwgMHg0NzUzLCAweDg1OEEsIDB4ODU4QSwgMHgxRjc0LCAweDg1OEIsIDB4ODU4QiwgMHg0NzU0LA0KLSAgICAweDg1OEMsIDB4ODU4QywgMHgyMzMwLCAweDg1OEQsIDB4ODU4RSwgMHg0NzU1LCAweDg1OEYsIDB4ODU4RiwgMHgxNDlDLA0KLSAgICAweDg1OTAsIDB4ODU5MCwgMHg0NzU3LCAweDg1OTEsIDB4ODU5MSwgMHgyNjgwLCAweDg1OTIsIDB4ODU5MywgMHg0NzU4LA0KLSAgICAweDg1OTQsIDB4ODU5NCwgMHgyMERBLCAweDg1OTUsIDB4ODU5QSwgMHg0NzVBLCAweDg1OUIsIDB4ODU5QiwgMHgwRkNGLA0KLSAgICAweDg1OUMsIDB4ODU5QywgMHgxNDlGLCAweDg1OUQsIDB4ODU5RSwgMHg0NzYwLCAweDg1OUYsIDB4ODU5RiwgMHgyMzRBLA0KLSAgICAweDg1QTAsIDB4ODVBMywgMHg0NzYyLCAweDg1QTQsIDB4ODVBNCwgMHgxNDk5LCAweDg1QTUsIDB4ODVBNSwgMHg0NzY2LA0KLSAgICAweDg1QTYsIDB4ODVBNiwgMHgxRjkxLCAweDg1QTcsIDB4ODVBNywgMHg0NzY3LCAweDg1QTgsIDB4ODVBOCwgMHgxNDlBLA0KLSAgICAweDg1QTksIDB4ODVBOSwgMHgyMTA3LCAweDg1QUEsIDB4ODVBQSwgMHgwRjg4LCAweDg1QUIsIDB4ODVBRCwgMHg0NzY4LA0KLSAgICAweDg1QUUsIDB4ODVBRSwgMHgxNDlFLCAweDg1QUYsIDB4ODVBRiwgMHgwRDg0LCAweDg1QjAsIDB4ODVCMCwgMHgxNEEzLA0KLSAgICAweDg1QjEsIDB4ODVCNiwgMHg0NzZCLCAweDg1QjcsIDB4ODVCNywgMHgxNEEyLCAweDg1QjgsIDB4ODVCOCwgMHg0NzcxLA0KLSAgICAweDg1QjksIDB4ODVCOSwgMHgxNEExLCAweDg1QkEsIDB4ODVCQSwgMHgyMzNGLCAweDg1QkIsIDB4ODVDMCwgMHg0NzcyLA0KLSAgICAweDg1QzEsIDB4ODVDMSwgMHgxNEE1LCAweDg1QzIsIDB4ODVDOCwgMHg0Nzc4LCAweDg1QzksIDB4ODVDOSwgMHgwOEI2LA0KLSAgICAweDg1Q0EsIDB4ODVDQywgMHg0NzdGLCAweDg1Q0QsIDB4ODVDRCwgMHgxRkY0LCAweDg1Q0UsIDB4ODVDRSwgMHgyMzQzLA0KLSAgICAweDg1Q0YsIDB4ODVDRiwgMHgwNDlGLCAweDg1RDAsIDB4ODVEMCwgMHgwQUVGLCAweDg1RDEsIDB4ODVEMiwgMHg0NzgyLA0KLSAgICAweDg1RDMsIDB4ODVEMywgMHgxNEE0LCAweDg1RDQsIDB4ODVENCwgMHg0Nzg0LCAweDg1RDUsIDB4ODVENSwgMHgwQjdCLA0KLSAgICAweDg1RDYsIDB4ODVEQiwgMHg0Nzg1LCAweDg1REMsIDB4ODVEQywgMHgxNEE2LCAweDg1REQsIDB4ODVERCwgMHgyMjEyLA0KLSAgICAweDg1REUsIDB4ODVFMywgMHg0NzhCLCAweDg1RTQsIDB4ODVFNCwgMHgwRTJDLCAweDg1RTUsIDB4ODVFNSwgMHgyMjA3LA0KLSAgICAweDg1RTYsIDB4ODVFOCwgMHg0NzkxLCAweDg1RTksIDB4ODVFOSwgMHgwNjQ3LCAweDg1RUEsIDB4ODVFQSwgMHgyMzU5LA0KLSAgICAweDg1RUIsIDB4ODVGMywgMHg0Nzk0LCAweDg1RjQsIDB4ODVGNCwgMHgyMjU0LCAweDg1RjUsIDB4ODVGNSwgMHg0NzlELA0KLSAgICAweDg1RjYsIDB4ODVGNiwgMHgyMzMyLCAweDg1RjcsIDB4ODVGOCwgMHg0NzlFLCAweDg1RjksIDB4ODVGOSwgMHgxRTI2LA0KLSAgICAweDg1RkEsIDB4ODVGQSwgMHgyMzU3LCAweDg1RkIsIDB4ODVGQiwgMHgxMTI4LCAweDg1RkMsIDB4ODVGRSwgMHg0N0EwLA0KLSAgICAweDg1RkYsIDB4ODVGRiwgMHgxNEE3LCAweDg2MDAsIDB4ODYwMywgMHg0N0EzLCAweDg2MDQsIDB4ODYwNCwgMHgyMzU4LA0KLSAgICAweDg2MDUsIDB4ODYwNSwgMHgxNEE5LCAweDg2MDYsIDB4ODYwNiwgMHgyMDQyLCAweDg2MDcsIDB4ODYwNywgMHgyMTUzLA0KLSAgICAweDg2MDgsIDB4ODYwQSwgMHg0N0E3LCAweDg2MEIsIDB4ODYwQiwgMHgyMEJCLCAweDg2MEMsIDB4ODYxMCwgMHg0N0FBLA0KLSAgICAweDg2MTEsIDB4ODYxMSwgMHgwQjA1LCAweDg2MTIsIDB4ODYxNSwgMHg0N0FGLCAweDg2MTYsIDB4ODYxNiwgMHgxNEFCLA0KLSAgICAweDg2MTcsIDB4ODYxOSwgMHg0N0IzLCAweDg2MUEsIDB4ODYxQSwgMHgyMzVBLCAweDg2MUIsIDB4ODYxRCwgMHg0N0I2LA0KLSAgICAweDg2MUUsIDB4ODYxRSwgMHgyMzU2LCAweDg2MUYsIDB4ODYyMSwgMHg0N0I5LCAweDg2MjIsIDB4ODYyMiwgMHgyMzM3LA0KLSAgICAweDg2MjMsIDB4ODYyNiwgMHg0N0JDLCAweDg2MjcsIDB4ODYyNywgMHgxNEE4LCAweDg2MjgsIDB4ODYyOCwgMHg0N0MwLA0KLSAgICAweDg2MjksIDB4ODYyOSwgMHgxNEFBLCAweDg2MkEsIDB4ODYyQywgMHg0N0MxLCAweDg2MkQsIDB4ODYyRCwgMHgxRkY5LA0KLSAgICAweDg2MkUsIDB4ODYzNywgMHg0N0M0LCAweDg2MzgsIDB4ODYzOCwgMHgxMTVCLCAweDg2MzksIDB4ODYzOSwgMHg0N0NFLA0KLSAgICAweDg2M0EsIDB4ODYzQSwgMHgyMzUzLCAweDg2M0IsIDB4ODYzQiwgMHg0N0NGLCAweDg2M0MsIDB4ODYzQywgMHgxNEFDLA0KLSAgICAweDg2M0QsIDB4ODYzRSwgMHg0N0QwLCAweDg2M0YsIDB4ODYzRiwgMHgyMDYxLCAweDg2NDAsIDB4ODY0QywgMHg0N0QyLA0KLSAgICAweDg2NEQsIDB4ODY0RCwgMHgxQkYwLCAweDg2NEUsIDB4ODY0RSwgMHgwN0I3LCAweDg2NEYsIDB4ODY0RiwgMHgwQTU5LA0KLSAgICAweDg2NTAsIDB4ODY1MCwgMHgwQjcxLCAweDg2NTEsIDB4ODY1MSwgMHgwQTZFLCAweDg2NTIsIDB4ODY1MywgMHg0N0RGLA0KLSAgICAweDg2NTQsIDB4ODY1NCwgMHgxQkYxLCAweDg2NTUsIDB4ODY1NSwgMHgxRTk1LCAweDg2NTYsIDB4ODY1OSwgMHg0N0UxLA0KLSAgICAweDg2NUEsIDB4ODY1QSwgMHgwRkI0LCAweDg2NUIsIDB4ODY1QiwgMHg0N0U1LCAweDg2NUMsIDB4ODY1QywgMHgyMDQ5LA0KLSAgICAweDg2NUQsIDB4ODY1RCwgMHg0N0U2LCAweDg2NUUsIDB4ODY1RSwgMHgxMEMyLCAweDg2NUYsIDB4ODY1RiwgMHgxRjQyLA0KLSAgICAweDg2NjAsIDB4ODY2MSwgMHg0N0U3LCAweDg2NjIsIDB4ODY2MiwgMHgxOTZELCAweDg2NjMsIDB4ODY2NiwgMHg0N0U5LA0KLSAgICAweDg2NjcsIDB4ODY2NywgMHgxRkU4LCAweDg2NjgsIDB4ODY2QSwgMHg0N0VELCAweDg2NkIsIDB4ODY2QiwgMHgwNTBCLA0KLSAgICAweDg2NkMsIDB4ODY2QywgMHgxQkYyLCAweDg2NkQsIDB4ODY2RCwgMHg0N0YwLCAweDg2NkUsIDB4ODY2RSwgMHgxQkYzLA0KLSAgICAweDg2NkYsIDB4ODY3MCwgMHg0N0YxLCAweDg2NzEsIDB4ODY3MSwgMHgwRDQ0LCAweDg2NzIsIDB4ODY3OCwgMHg0N0YzLA0KLSAgICAweDg2NzksIDB4ODY3OSwgMHgwNzlFLCAweDg2N0EsIDB4ODY3QSwgMHgxQkY1LCAweDg2N0IsIDB4ODY3QiwgMHgxQkY3LA0KLSAgICAweDg2N0MsIDB4ODY3QywgMHgxQkY2LCAweDg2N0QsIDB4ODY3RCwgMHgwREQ5LCAweDg2N0UsIDB4ODY3RSwgMHgwRjI3LA0KLSAgICAweDg2N0YsIDB4ODY3RiwgMHgxQkY0LCAweDg2ODAsIDB4ODY4MCwgMHgwRDRCLCAweDg2ODEsIDB4ODY4MSwgMHgxMDU2LA0KLSAgICAweDg2ODIsIDB4ODY4MiwgMHgwQTkzLCAweDg2ODMsIDB4ODY4OSwgMHg0N0ZBLCAweDg2OEEsIDB4ODY4QSwgMHgwRUQyLA0KLSAgICAweDg2OEIsIDB4ODY4QiwgMHgxQkZBLCAweDg2OEMsIDB4ODY4QywgMHgwNDAxLCAweDg2OEQsIDB4ODY4RCwgMHgxQkY5LA0KLSAgICAweDg2OEUsIDB4ODY5MiwgMHg0ODAxLCAweDg2OTMsIDB4ODY5MywgMHgxQzAwLCAweDg2OTQsIDB4ODY5NCwgMHg0ODA2LA0KLSAgICAweDg2OTUsIDB4ODY5NSwgMHgwNDk2LCAweDg2OTYsIDB4ODY5QiwgMHg0ODA3LCAweDg2OUMsIDB4ODY5QywgMHgwRkVBLA0KLSAgICAweDg2OUQsIDB4ODY5RCwgMHgxQkZDLCAweDg2OUUsIDB4ODZBMiwgMHg0ODBELCAweDg2QTMsIDB4ODZBMywgMHgxQkZFLA0KLSAgICAweDg2QTQsIDB4ODZBNCwgMHgxMTJDLCAweDg2QTUsIDB4ODZBNiwgMHg0ODEyLCAweDg2QTcsIDB4ODZBNywgMHgxQkZELA0KLSAgICAweDg2QTgsIDB4ODZBOCwgMHgxQkY4LCAweDg2QTksIDB4ODZBOSwgMHgxQzAxLCAweDg2QUEsIDB4ODZBQSwgMHgxQkZGLA0KLSAgICAweDg2QUIsIDB4ODZBQiwgMHg0ODE0LCAweDg2QUMsIDB4ODZBQywgMHgxQkZCLCAweDg2QUQsIDB4ODZBRSwgMHg0ODE1LA0KLSAgICAweDg2QUYsIDB4ODZBRiwgMHgxQzA5LCAweDg2QjAsIDB4ODZCMCwgMHgxQzA2LCAweDg2QjEsIDB4ODZCMSwgMHgxQzA4LA0KLSAgICAweDg2QjIsIDB4ODZCMywgMHg0ODE3LCAweDg2QjQsIDB4ODZCNCwgMHgxQzBDLCAweDg2QjUsIDB4ODZCNSwgMHgxQzA0LA0KLSAgICAweDg2QjYsIDB4ODZCNiwgMHgxQzAyLCAweDg2QjcsIDB4ODZCOSwgMHg0ODE5LCAweDg2QkEsIDB4ODZCQSwgMHgxQzA3LA0KLSAgICAweDg2QkIsIDB4ODZCRiwgMHg0ODFDLCAweDg2QzAsIDB4ODZDMCwgMHgxMUZBLCAweDg2QzEsIDB4ODZDMywgMHg0ODIxLA0KLSAgICAweDg2QzQsIDB4ODZDNCwgMHgxQzAzLCAweDg2QzUsIDB4ODZDNSwgMHg0ODI0LCAweDg2QzYsIDB4ODZDNiwgMHgwQzc2LA0KLSAgICAweDg2QzcsIDB4ODZDNywgMHgwRDE4LCAweDg2QzgsIDB4ODZDOCwgMHg0ODI1LCAweDg2QzksIDB4ODZDOSwgMHgxQzBBLA0KLSAgICAweDg2Q0EsIDB4ODZDQSwgMHgwNzFGLCAweDg2Q0IsIDB4ODZDQiwgMHgwNTkxLCAweDg2Q0MsIDB4ODZDRCwgMHg0ODI2LA0KLSAgICAweDg2Q0UsIDB4ODZDRSwgMHgxQzA1LCAweDg2Q0YsIDB4ODZDRiwgMHgxQzBCLCAweDg2RDAsIDB4ODZEMCwgMHgxQzEyLA0KLSAgICAweDg2RDEsIDB4ODZEMSwgMHgxQzE4LCAweDg2RDIsIDB4ODZEMywgMHg0ODI4LCAweDg2RDQsIDB4ODZENCwgMHgwN0VDLA0KLSAgICAweDg2RDUsIDB4ODZENywgMHg0ODJBLCAweDg2RDgsIDB4ODZEOCwgMHgxQzE3LCAweDg2RDksIDB4ODZEOSwgMHgwRThELA0KLSAgICAweDg2REEsIDB4ODZEQSwgMHg0ODJELCAweDg2REIsIDB4ODZEQiwgMHgxMUVBLCAweDg2REMsIDB4ODZERCwgMHg0ODJFLA0KLSAgICAweDg2REUsIDB4ODZERSwgMHgxQzE0LCAweDg2REYsIDB4ODZERiwgMHgxQzE2LCAweDg2RTAsIDB4ODZFMywgMHg0ODMwLA0KLSAgICAweDg2RTQsIDB4ODZFNCwgMHgwNkVELCAweDg2RTUsIDB4ODZFOCwgMHg0ODM0LCAweDg2RTksIDB4ODZFOSwgMHgxQzBELA0KLSAgICAweDg2RUEsIDB4ODZFQywgMHg0ODM4LCAweDg2RUQsIDB4ODZFRCwgMHgxQzEwLCAweDg2RUUsIDB4ODZFRSwgMHgwQUEwLA0KLSAgICAweDg2RUYsIDB4ODZFRiwgMHg0ODNCLCAweDg2RjAsIDB4ODZGMCwgMHgxMTdFLCAweDg2RjEsIDB4ODZGMiwgMHgxQzBFLA0KLSAgICAweDg2RjMsIDB4ODZGMywgMHgxQzExLCAweDg2RjQsIDB4ODZGNCwgMHgxQzE1LCAweDg2RjUsIDB4ODZGNywgMHg0ODNDLA0KLSAgICAweDg2RjgsIDB4ODZGOCwgMHgxQzFCLCAweDg2RjksIDB4ODZGOSwgMHgxMEExLCAweDg2RkEsIDB4ODZGQSwgMHgyNURBLA0KLSAgICAweDg2RkIsIDB4ODZGRCwgMHg0ODNGLCAweDg2RkUsIDB4ODZGRSwgMHgwNjI5LCAweDg2RkYsIDB4ODZGRiwgMHg0ODQyLA0KLSAgICAweDg3MDAsIDB4ODcwMCwgMHgwRDg4LCAweDg3MDEsIDB4ODcwMSwgMHg0ODQzLCAweDg3MDIsIDB4ODcwMiwgMHgwNjgxLA0KLSAgICAweDg3MDMsIDB4ODcwMywgMHgxQzE5LCAweDg3MDQsIDB4ODcwNSwgMHg0ODQ0LCAweDg3MDYsIDB4ODcwNiwgMHgyNUQ3LA0KLSAgICAweDg3MDcsIDB4ODcwNywgMHgxQzFBLCAweDg3MDgsIDB4ODcwOCwgMHgxQzFDLCAweDg3MDksIDB4ODcwOSwgMHgxQzFGLA0KLSAgICAweDg3MEEsIDB4ODcwQSwgMHgxQzFELCAweDg3MEIsIDB4ODcwQywgMHg0ODQ2LCAweDg3MEQsIDB4ODcwRCwgMHgxQzFFLA0KLSAgICAweDg3MEUsIDB4ODcxMSwgMHg0ODQ4LCAweDg3MTIsIDB4ODcxMiwgMHgwRkZBLCAweDg3MTMsIDB4ODcxMywgMHgxQzEzLA0KLSAgICAweDg3MTQsIDB4ODcxNCwgMHg0ODRDLCAweDg3MTUsIDB4ODcxNSwgMHgwRTdBLCAweDg3MTYsIDB4ODcxNiwgMHg0ODRELA0KLSAgICAweDg3MTcsIDB4ODcxNywgMHgwRURFLCAweDg3MTgsIDB4ODcxOCwgMHgxMUE4LCAweDg3MTksIDB4ODcxOSwgMHg0ODRFLA0KLSAgICAweDg3MUEsIDB4ODcxQSwgMHgxQzI1LCAweDg3MUIsIDB4ODcxQiwgMHg0ODRGLCAweDg3MUMsIDB4ODcxQywgMHgwQUUwLA0KLSAgICAweDg3MUQsIDB4ODcxRCwgMHg0ODUwLCAweDg3MUUsIDB4ODcxRSwgMHgxQzIyLCAweDg3MUYsIDB4ODcyMCwgMHg0ODUxLA0KLSAgICAweDg3MjEsIDB4ODcyMSwgMHgwOTlBLCAweDg3MjIsIDB4ODcyMiwgMHgxQzJFLCAweDg3MjMsIDB4ODcyMywgMHgxQzIwLA0KLSAgICAweDg3MjQsIDB4ODcyNCwgMHg0ODUzLCAweDg3MjUsIDB4ODcyNSwgMHgxQzIzLCAweDg3MjYsIDB4ODcyOCwgMHg0ODU0LA0KLSAgICAweDg3MjksIDB4ODcyOSwgMHgxQzJBLCAweDg3MkEsIDB4ODcyRCwgMHg0ODU3LCAweDg3MkUsIDB4ODcyRSwgMHgxQzI0LA0KLSAgICAweDg3MkYsIDB4ODczMCwgMHg0ODVCLCAweDg3MzEsIDB4ODczMSwgMHgxQzI5LCAweDg3MzIsIDB4ODczMywgMHg0ODVELA0KLSAgICAweDg3MzQsIDB4ODczNCwgMHgxQzI4LCAweDg3MzUsIDB4ODczNiwgMHg0ODVGLCAweDg3MzcsIDB4ODczNywgMHgxQzJCLA0KLSAgICAweDg3MzgsIDB4ODczQSwgMHg0ODYxLCAweDg3M0IsIDB4ODczQiwgMHgxQzIxLCAweDg3M0MsIDB4ODczRCwgMHg0ODY0LA0KLSAgICAweDg3M0UsIDB4ODczRSwgMHgxQzI2LCAweDg3M0YsIDB4ODczRiwgMHgxQzJDLCAweDg3NDAsIDB4ODc0NiwgMHg0ODY2LA0KLSAgICAweDg3NDcsIDB4ODc0NywgMHgxMDkxLCAweDg3NDgsIDB4ODc0OCwgMHgxQzI3LCAweDg3NDksIDB4ODc0OSwgMHgwNEJDLA0KLSAgICAweDg3NEEsIDB4ODc0QiwgMHg0ODZELCAweDg3NEMsIDB4ODc0QywgMHgxQzM0LCAweDg3NEQsIDB4ODc0RCwgMHg0ODZGLA0KLSAgICAweDg3NEUsIDB4ODc0RSwgMHgwRjc2LCAweDg3NEYsIDB4ODc1MiwgMHg0ODcwLCAweDg3NTMsIDB4ODc1MywgMHgxQzM3LA0KLSAgICAweDg3NTQsIDB4ODc1NCwgMHg0ODc0LCAweDg3NTUsIDB4ODc1NSwgMHgyMTJFLCAweDg3NTYsIDB4ODc1NiwgMHg0ODc1LA0KLSAgICAweDg3NTcsIDB4ODc1NywgMHgwN0RELCAweDg3NTgsIDB4ODc1OCwgMHg0ODc2LCAweDg3NTksIDB4ODc1OSwgMHgxQzNCLA0KLSAgICAweDg3NUEsIDB4ODc1RiwgMHg0ODc3LCAweDg3NjAsIDB4ODc2MCwgMHgxQzMyLCAweDg3NjEsIDB4ODc2MiwgMHg0ODdELA0KLSAgICAweDg3NjMsIDB4ODc2MywgMHgxQzM4LCAweDg3NjQsIDB4ODc2NCwgMHgxQzNBLCAweDg3NjUsIDB4ODc2NSwgMHgxQzNDLA0KLSAgICAweDg3NjYsIDB4ODc2NiwgMHgyMUIyLCAweDg3NjcsIDB4ODc2RCwgMHg0ODdGLCAweDg3NkUsIDB4ODc2RSwgMHgxQzM1LA0KLSAgICAweDg3NkYsIDB4ODc2RiwgMHg0ODg2LCAweDg3NzAsIDB4ODc3MCwgMHgxQzMzLCAweDg3NzEsIDB4ODc3MywgMHg0ODg3LA0KLSAgICAweDg3NzQsIDB4ODc3NCwgMHgwN0IyLCAweDg3NzUsIDB4ODc3NSwgMHg0ODhBLCAweDg3NzYsIDB4ODc3NiwgMHgwNURDLA0KLSAgICAweDg3NzcsIDB4ODc3NywgMHg0ODhCLCAweDg3NzgsIDB4ODc3OCwgMHgyMTlFLCAweDg3NzksIDB4ODc3QSwgMHg0ODhDLA0KLSAgICAweDg3N0IsIDB4ODc3QiwgMHgxQzMxLCAweDg3N0MsIDB4ODc3QywgMHgxQzM5LCAweDg3N0QsIDB4ODc3RSwgMHgxQzJGLA0KLSAgICAweDg3N0YsIDB4ODc4MSwgMHg0ODhFLCAweDg3ODIsIDB4ODc4MiwgMHgxQzJELCAweDg3ODMsIDB4ODc4MywgMHgxQzQ2LA0KLSAgICAweDg3ODQsIDB4ODc4NCwgMHgyNURDLCAweDg3ODUsIDB4ODc4NSwgMHgxQzQzLCAweDg3ODYsIDB4ODc4NywgMHg0ODkxLA0KLSAgICAweDg3ODgsIDB4ODc4OCwgMHgxQzQyLCAweDg3ODksIDB4ODc4QSwgMHg0ODkzLCAweDg3OEIsIDB4ODc4QiwgMHgxQzM2LA0KLSAgICAweDg3OEMsIDB4ODc4QywgMHg0ODk1LCAweDg3OEQsIDB4ODc4RCwgMHgwQ0I1LCAweDg3OEUsIDB4ODc5MiwgMHg0ODk2LA0KLSAgICAweDg3OTMsIDB4ODc5MywgMHgxQzNELCAweDg3OTQsIDB4ODc5NiwgMHg0ODlCLCAweDg3OTcsIDB4ODc5NywgMHgxQzQ1LA0KLSAgICAweDg3OTgsIDB4ODc5RCwgMHg0ODlFLCAweDg3OUUsIDB4ODc5RSwgMHgyMDZDLCAweDg3OUYsIDB4ODc5RiwgMHgwQUZELA0KLSAgICAweDg3QTAsIDB4ODdBMSwgMHg0OEE0LCAweDg3QTIsIDB4ODdBMiwgMHgyMjI2LCAweDg3QTMsIDB4ODdBNywgMHg0OEE2LA0KLSAgICAweDg3QTgsIDB4ODdBOCwgMHgxQzNGLCAweDg3QTksIDB4ODdBQSwgMHg0OEFCLCAweDg3QUIsIDB4ODdBQiwgMHgxQzQ3LA0KLSAgICAweDg3QUMsIDB4ODdBQywgMHgxQzQ5LCAweDg3QUQsIDB4ODdBRCwgMHgxQzQ0LCAweDg3QUUsIDB4ODdBRSwgMHg0OEFELA0KLSAgICAweDg3QUYsIDB4ODdBRiwgMHgxQzNFLCAweDg3QjAsIDB4ODdCMiwgMHg0OEFFLCAweDg3QjMsIDB4ODdCMywgMHgxQzRCLA0KLSAgICAweDg3QjQsIDB4ODdCNCwgMHg0OEIxLCAweDg3QjUsIDB4ODdCNSwgMHgxQzRBLCAweDg3QjYsIDB4ODdCOSwgMHg0OEIyLA0KLSAgICAweDg3QkEsIDB4ODdCQSwgMHgwQTg0LCAweDg3QkIsIDB4ODdCQiwgMHgyNUUwLCAweDg3QkMsIDB4ODdCQywgMHg0OEI2LA0KLSAgICAweDg3QkQsIDB4ODdCRCwgMHgxQzRFLCAweDg3QkUsIDB4ODdCRiwgMHg0OEI3LCAweDg3QzAsIDB4ODdDMCwgMHgxQzUwLA0KLSAgICAweDg3QzEsIDB4ODdDMywgMHg0OEI5LCAweDg3QzQsIDB4ODdDNCwgMHgyMjdCLCAweDg3QzUsIDB4ODdDNSwgMHg0OEJDLA0KLSAgICAweDg3QzYsIDB4ODdDNiwgMHgxQzQxLCAweDg3QzcsIDB4ODdDNywgMHg0OEJELCAweDg3QzgsIDB4ODdDOCwgMHgyNURFLA0KLSAgICAweDg3QzksIDB4ODdDOSwgMHg0OEJFLCAweDg3Q0EsIDB4ODdDQSwgMHgxQzUxLCAweDg3Q0IsIDB4ODdDQiwgMHgxQzRDLA0KLSAgICAweDg3Q0MsIDB4ODdDRCwgMHg0OEJGLCAweDg3Q0UsIDB4ODdDRSwgMHgyNUUxLCAweDg3Q0YsIDB4ODdEMCwgMHg0OEMxLA0KLSAgICAweDg3RDEsIDB4ODdEMSwgMHgxQzRGLCAweDg3RDIsIDB4ODdEMiwgMHgxQzQwLCAweDg3RDMsIDB4ODdEMywgMHgxQzRELA0KLSAgICAweDg3RDQsIDB4ODdEQSwgMHg0OEMzLCAweDg3REIsIDB4ODdEQiwgMHgxQzUyLCAweDg3REMsIDB4ODdERiwgMHg0OENBLA0KLSAgICAweDg3RTAsIDB4ODdFMCwgMHgxQzU0LCAweDg3RTEsIDB4ODdFMiwgMHg0OENFLCAweDg3RTMsIDB4ODdFMywgMHgyNUQ1LA0KLSAgICAweDg3RTQsIDB4ODdFNCwgMHg0OEQwLCAweDg3RTUsIDB4ODdFNSwgMHgxQzQ4LCAweDg3RTYsIDB4ODdFOSwgMHg0OEQxLA0KLSAgICAweDg3RUEsIDB4ODdFQSwgMHgxQzUzLCAweDg3RUIsIDB4ODdFQiwgMHg0OEQ1LCAweDg3RUMsIDB4ODdFQywgMHgxRTZCLA0KLSAgICAweDg3RUQsIDB4ODdFRCwgMHg0OEQ2LCAweDg3RUUsIDB4ODdFRSwgMHgxQzU1LCAweDg3RUYsIDB4ODdFRiwgMHgyNURCLA0KLSAgICAweDg3RjAsIDB4ODdGMSwgMHg0OEQ3LCAweDg3RjIsIDB4ODdGMiwgMHgxRTg5LCAweDg3RjMsIDB4ODdGNSwgMHg0OEQ5LA0KLSAgICAweDg3RjYsIDB4ODdGNiwgMHgyNUQ5LCAweDg3RjcsIDB4ODdGOCwgMHg0OERDLCAweDg3RjksIDB4ODdGOSwgMHgwRjgyLA0KLSAgICAweDg3RkEsIDB4ODdGQSwgMHg0OERFLCAweDg3RkIsIDB4ODdGQiwgMHgyMjExLCAweDg3RkMsIDB4ODdGRCwgMHg0OERGLA0KLSAgICAweDg3RkUsIDB4ODdGRSwgMHgxQzU4LCAweDg3RkYsIDB4ODdGRiwgMHg0OEUxLCAweDg4MDAsIDB4ODgwMiwgMHg0OEUyLA0KLSAgICAweDg4MDMsIDB4ODgwMywgMHgxMzBELCAweDg4MDQsIDB4ODgwNCwgMHg0OEU1LCAweDg4MDUsIDB4ODgwNSwgMHgyMjI5LA0KLSAgICAweDg4MDYsIDB4ODgwNiwgMHgyNUQ2LCAweDg4MDcsIDB4ODgwOSwgMHg0OEU2LCAweDg4MEEsIDB4ODgwQSwgMHgxQzU5LA0KLSAgICAweDg4MEIsIDB4ODgwRiwgMHg0OEU5LCAweDg4MTAsIDB4ODgxMCwgMHgyNURELCAweDg4MTEsIDB4ODgxMSwgMHgyNURGLA0KLSAgICAweDg4MTIsIDB4ODgxMiwgMHg0OEVFLCAweDg4MTMsIDB4ODgxMywgMHgxQzU3LCAweDg4MTQsIDB4ODgxNCwgMHg0OEVGLA0KLSAgICAweDg4MTUsIDB4ODgxNSwgMHgwQ0JGLCAweDg4MTYsIDB4ODgxNiwgMHgxQzU2LCAweDg4MTcsIDB4ODgxQSwgMHg0OEYwLA0KLSAgICAweDg4MUIsIDB4ODgxQiwgMHgxQzVBLCAweDg4MUMsIDB4ODgxRSwgMHg0OEY0LCAweDg4MUYsIDB4ODgxRiwgMHgxRkVGLA0KLSAgICAweDg4MjAsIDB4ODgyMCwgMHg0OEY3LCAweDg4MjEsIDB4ODgyMSwgMHgxQzVCLCAweDg4MjIsIDB4ODgyMiwgMHgwNTQzLA0KLSAgICAweDg4MjMsIDB4ODgyMywgMHgyNUQ4LCAweDg4MjQsIDB4ODgzMCwgMHg0OEY4LCAweDg4MzEsIDB4ODgzMSwgMHgxRjI5LA0KLSAgICAweDg4MzIsIDB4ODgzMiwgMHgxQThELCAweDg4MzMsIDB4ODgzNSwgMHg0OTA1LCAweDg4MzYsIDB4ODgzNiwgMHgxRTVCLA0KLSAgICAweDg4MzcsIDB4ODgzOCwgMHg0OTA4LCAweDg4MzksIDB4ODgzOSwgMHgxQzVDLCAweDg4M0EsIDB4ODgzQSwgMHg0OTBBLA0KLSAgICAweDg4M0IsIDB4ODgzQiwgMHgyMDc2LCAweDg4M0MsIDB4ODgzQywgMHgxQzVELCAweDg4M0QsIDB4ODgzRiwgMHg0OTBCLA0KLSAgICAweDg4NDAsIDB4ODg0MCwgMHgwRkQzLCAweDg4NDEsIDB4ODg0MywgMHg0OTBFLCAweDg4NDQsIDB4ODg0NCwgMHgxQ0FBLA0KLSAgICAweDg4NDUsIDB4ODg0NSwgMHgwRjkxLCAweDg4NDYsIDB4ODg0NiwgMHgyMjk3LCAweDg4NDcsIDB4ODg0OSwgMHg0OTExLA0KLSAgICAweDg4NEEsIDB4ODg0QSwgMHgyNjkwLCAweDg4NEIsIDB4ODg0QiwgMHg0OTE0LCAweDg4NEMsIDB4ODg0QywgMHgwRjlCLA0KLSAgICAweDg4NEQsIDB4ODg0RCwgMHgxMDA1LCAweDg4NEUsIDB4ODg1MiwgMHg0OTE1LCAweDg4NTMsIDB4ODg1MywgMHgyMTNGLA0KLSAgICAweDg4NTQsIDB4ODg1NCwgMHgwRjNCLCAweDg4NTUsIDB4ODg1NiwgMHg0OTFBLCAweDg4NTcsIDB4ODg1NywgMHgwOEE3LA0KLSAgICAweDg4NTgsIDB4ODg1OCwgMHg0OTFDLCAweDg4NTksIDB4ODg1OSwgMHgwRkVDLCAweDg4NUEsIDB4ODg1QSwgMHg0OTFELA0KLSAgICAweDg4NUIsIDB4ODg1QiwgMHgyMTk4LCAweDg4NUMsIDB4ODg1QywgMHg0OTFFLCAweDg4NUQsIDB4ODg1RCwgMHgxRTg4LA0KLSAgICAweDg4NUUsIDB4ODg2MCwgMHg0OTFGLCAweDg4NjEsIDB4ODg2MSwgMHgwNzk5LCAweDg4NjIsIDB4ODg2MiwgMHgxNUVELA0KLSAgICAweDg4NjMsIDB4ODg2MywgMHgxMDQ5LCAweDg4NjQsIDB4ODg2NCwgMHgxQkE2LCAweDg4NjUsIDB4ODg2NSwgMHgwNDgwLA0KLSAgICAweDg4NjYsIDB4ODg2NywgMHg0OTIyLCAweDg4NjgsIDB4ODg2OCwgMHgwNDU2LCAweDg4NjksIDB4ODg2OSwgMHgxQkE3LA0KLSAgICAweDg4NkEsIDB4ODg2QSwgMHg0OTI0LCAweDg4NkIsIDB4ODg2QiwgMHgwQ0Y5LCAweDg4NkMsIDB4ODg2QywgMHgwNEU5LA0KLSAgICAweDg4NkQsIDB4ODg2RCwgMHg0OTI1LCAweDg4NkUsIDB4ODg2RSwgMHgxMzA2LCAweDg4NkYsIDB4ODg2RiwgMHg0OTI2LA0KLSAgICAweDg4NzAsIDB4ODg3MCwgMHgwRDlBLCAweDg4NzEsIDB4ODg3MSwgMHg0OTI3LCAweDg4NzIsIDB4ODg3MiwgMHgxQkE4LA0KLSAgICAweDg4NzMsIDB4ODg3NiwgMHg0OTI4LCAweDg4NzcsIDB4ODg3NywgMHgxMUQzLCAweDg4NzgsIDB4ODg3OCwgMHg0OTJDLA0KLSAgICAweDg4NzksIDB4ODg3OSwgMHgyMjhDLCAweDg4N0EsIDB4ODg3QywgMHg0OTJELCAweDg4N0QsIDB4ODg3RCwgMHgxQkE5LA0KLSAgICAweDg4N0UsIDB4ODg3RSwgMHgxQ0JFLCAweDg4N0YsIDB4ODg3RiwgMHgxQkFBLCAweDg4ODAsIDB4ODg4MCwgMHg0OTMwLA0KLSAgICAweDg4ODEsIDB4ODg4MSwgMHgxMEVGLCAweDg4ODIsIDB4ODg4MiwgMHgxQkFCLCAweDg4ODMsIDB4ODg4MywgMHg0OTMxLA0KLSAgICAweDg4ODQsIDB4ODg4NCwgMHgwM0NCLCAweDg4ODUsIDB4ODg4NSwgMHgxQ0JGLCAweDg4ODYsIDB4ODg4NywgMHg0OTMyLA0KLSAgICAweDg4ODgsIDB4ODg4OCwgMHgxQ0MwLCAweDg4ODksIDB4ODg4QSwgMHg0OTM0LCAweDg4OEIsIDB4ODg4QiwgMHgwNTdGLA0KLSAgICAweDg4OEMsIDB4ODg4QywgMHg0OTM2LCAweDg4OEQsIDB4ODg4RCwgMHgwQjlDLCAweDg4OEUsIDB4ODg5MSwgMHg0OTM3LA0KLSAgICAweDg4OTIsIDB4ODg5MiwgMHgwRTBFLCAweDg4OTMsIDB4ODg5NSwgMHg0OTNCLCAweDg4OTYsIDB4ODg5NiwgMHgwRkFGLA0KLSAgICAweDg4OTcsIDB4ODg5QiwgMHg0OTNFLCAweDg4OUMsIDB4ODg5QywgMHgwRTkxLCAweDg4OUQsIDB4ODhBMSwgMHg0OTQzLA0KLSAgICAweDg4QTIsIDB4ODhBMiwgMHgxQkFDLCAweDg4QTMsIDB4ODhBMywgMHg0OTQ4LCAweDg4QTQsIDB4ODhBNCwgMHgxMzA3LA0KLSAgICAweDg4QTUsIDB4ODhBQSwgMHg0OTQ5LCAweDg4QUIsIDB4ODhBQiwgMHgwNDI0LCAweDg4QUMsIDB4ODhBQywgMHg0OTRGLA0KLSAgICAweDg4QUQsIDB4ODhBRCwgMHgwRjFCLCAweDg4QUUsIDB4ODhCMCwgMHg0OTUwLCAweDg4QjEsIDB4ODhCMSwgMHgwNjlGLA0KLSAgICAweDg4QjIsIDB4ODhCNiwgMHg0OTUzLCAweDg4QjcsIDB4ODhCNywgMHgxQkFFLCAweDg4QjgsIDB4ODhCQiwgMHg0OTU4LA0KLSAgICAweDg4QkMsIDB4ODhCQywgMHgxQkFGLCAweDg4QkQsIDB4ODhDMCwgMHg0OTVDLCAweDg4QzEsIDB4ODhDMSwgMHgwNDhBLA0KLSAgICAweDg4QzIsIDB4ODhDMiwgMHgwQTFBLCAweDg4QzMsIDB4ODhDNCwgMHg0OTYwLCAweDg4QzUsIDB4ODhDNSwgMHgxMjBELA0KLSAgICAweDg4QzYsIDB4ODhDNiwgMHgxQkFELCAweDg4QzcsIDB4ODhDOCwgMHg0OTYyLCAweDg4QzksIDB4ODhDOSwgMHgxQkIwLA0KLSAgICAweDg4Q0EsIDB4ODhDQSwgMHgyNUYxLCAweDg4Q0IsIDB4ODhDRCwgMHg0OTY0LCAweDg4Q0UsIDB4ODhDRSwgMHgxQkIyLA0KLSAgICAweDg4Q0YsIDB4ODhDRiwgMHgyMDBDLCAweDg4RDAsIDB4ODhEMSwgMHg0OTY3LCAweDg4RDIsIDB4ODhEMiwgMHgxMzBBLA0KLSAgICAweDg4RDMsIDB4ODhEMywgMHg0OTY5LCAweDg4RDQsIDB4ODhENCwgMHgxMDY4LCAweDg4RDUsIDB4ODhENSwgMHgxMEU2LA0KLSAgICAweDg4RDYsIDB4ODhENywgMHg0OTZBLCAweDg4RDgsIDB4ODhEOCwgMHgxQ0MxLCAweDg4RDksIDB4ODhEOSwgMHgwQzk0LA0KLSAgICAweDg4REEsIDB4ODhEQiwgMHg0OTZDLCAweDg4REMsIDB4ODhEQywgMHgxRTU4LCAweDg4REQsIDB4ODhERCwgMHgyMkFDLA0KLSAgICAweDg4REUsIDB4ODhERSwgMHg0OTZFLCAweDg4REYsIDB4ODhERiwgMHgxQ0MyLCAweDg4RTAsIDB4ODhFMSwgMHg0OTZGLA0KLSAgICAweDg4RTIsIDB4ODhFMiwgMHgxQkIxLCAweDg4RTMsIDB4ODhFMywgMHgxQkIzLCAweDg4RTQsIDB4ODhFNCwgMHgwOTcwLA0KLSAgICAweDg4RTUsIDB4ODhFNSwgMHgxQkI0LCAweDg4RTYsIDB4ODhFNywgMHg0OTcxLCAweDg4RTgsIDB4ODhFOCwgMHgxQkI4LA0KLSAgICAweDg4RTksIDB4ODhFRiwgMHg0OTczLCAweDg4RjAsIDB4ODhGMCwgMHgxQkJBLCAweDg4RjEsIDB4ODhGMSwgMHgxQkI1LA0KLSAgICAweDg4RjIsIDB4ODhGMiwgMHg0OTdBLCAweDg4RjMsIDB4ODhGMywgMHgwRDBBLCAweDg4RjQsIDB4ODhGNCwgMHgwQkEyLA0KLSAgICAweDg4RjUsIDB4ODhGNywgMHg0OTdCLCAweDg4RjgsIDB4ODhGOCwgMHgwQThBLCAweDg4RjksIDB4ODhGOSwgMHgwNzU1LA0KLSAgICAweDg4RkEsIDB4ODhGQiwgMHg0OTdFLCAweDg4RkMsIDB4ODhGQywgMHgxQkI3LCAweDg4RkQsIDB4ODhGRCwgMHgyNkE3LA0KLSAgICAweDg4RkUsIDB4ODhGRSwgMHgxQkI5LCAweDg4RkYsIDB4ODhGRiwgMHg0OTgwLCAweDg5MDAsIDB4ODkwMSwgMHg0OTgxLA0KLSAgICAweDg5MDIsIDB4ODkwMiwgMHgwNzJDLCAweDg5MDMsIDB4ODkwNiwgMHg0OTgzLCAweDg5MDcsIDB4ODkwNywgMHgyNjc2LA0KLSAgICAweDg5MDgsIDB4ODkwOSwgMHg0OTg3LCAweDg5MEEsIDB4ODkwQSwgMHgxQkJGLCAweDg5MEIsIDB4ODkwRiwgMHg0OTg5LA0KLSAgICAweDg5MTAsIDB4ODkxMCwgMHgwNzhELCAweDg5MTEsIDB4ODkxMSwgMHg0OThFLCAweDg5MTIsIDB4ODkxMiwgMHgwNDA4LA0KLSAgICAweDg5MTMsIDB4ODkxMywgMHgxQkJELCAweDg5MTQsIDB4ODkxOCwgMHg0OThGLCAweDg5MTksIDB4ODkxOSwgMHgxQkJDLA0KLSAgICAweDg5MUEsIDB4ODkxQSwgMHgxQkI2LCAweDg5MUIsIDB4ODkxQiwgMHgxQkJFLCAweDg5MUMsIDB4ODkyMCwgMHg0OTk0LA0KLSAgICAweDg5MjEsIDB4ODkyMSwgMHgxQkJCLCAweDg5MjIsIDB4ODkyNCwgMHg0OTk5LCAweDg5MjUsIDB4ODkyNSwgMHgwQ0M3LA0KLSAgICAweDg5MjYsIDB4ODkyOSwgMHg0OTlDLCAweDg5MkEsIDB4ODkyQSwgMHgwRTdCLCAweDg5MkIsIDB4ODkyQiwgMHgxQkMxLA0KLSAgICAweDg5MkMsIDB4ODkyRiwgMHg0OUEwLCAweDg5MzAsIDB4ODkzMCwgMHgxNzM5LCAweDg5MzEsIDB4ODkzMSwgMHg0OUE0LA0KLSAgICAweDg5MzIsIDB4ODkzMiwgMHgxRkUxLCAweDg5MzMsIDB4ODkzMywgMHgyNUJCLCAweDg5MzQsIDB4ODkzNCwgMHgxQkMwLA0KLSAgICAweDg5MzUsIDB4ODkzNSwgMHg0OUE1LCAweDg5MzYsIDB4ODkzNiwgMHgxQkMyLCAweDg5MzcsIDB4ODkzNywgMHg0OUE2LA0KLSAgICAweDg5MzgsIDB4ODkzOCwgMHgyNUJFLCAweDg5MzksIDB4ODkzQSwgMHg0OUE3LCAweDg5M0IsIDB4ODkzQiwgMHgyMkRELA0KLSAgICAweDg5M0MsIDB4ODk0MCwgMHg0OUE5LCAweDg5NDEsIDB4ODk0MSwgMHgxQkMzLCAweDg5NDIsIDB4ODk0MywgMHg0OUFFLA0KLSAgICAweDg5NDQsIDB4ODk0NCwgMHgwRjUyLCAweDg5NDUsIDB4ODk0NiwgMHg0OUIwLCAweDg5NDcsIDB4ODk0NywgMHgyNUJELA0KLSAgICAweDg5NDgsIDB4ODk1NSwgMHg0OUIyLCAweDg5NTYsIDB4ODk1NiwgMHgxRTJBLCAweDg5NTcsIDB4ODk1QywgMHg0OUMwLA0KLSAgICAweDg5NUQsIDB4ODk1RCwgMHgyNUJDLCAweDg5NUUsIDB4ODk1RSwgMHgxQ0MzLCAweDg5NUYsIDB4ODk1RiwgMHgwOEM0LA0KLSAgICAweDg5NjAsIDB4ODk2MCwgMHgyNUJBLCAweDg5NjEsIDB4ODk2MywgMHg0OUM2LCAweDg5NjQsIDB4ODk2NCwgMHgyNUJGLA0KLSAgICAweDg5NjUsIDB4ODk2NSwgMHg0OUM5LCAweDg5NjYsIDB4ODk2NiwgMHgxQkM0LCAweDg5NjcsIDB4ODk2OSwgMHg0OUNBLA0KLSAgICAweDg5NkEsIDB4ODk2QSwgMHgyMTg3LCAweDg5NkIsIDB4ODk2QiwgMHg0OUNELCAweDg5NkMsIDB4ODk2QywgMHgyNjZCLA0KLSAgICAweDg5NkQsIDB4ODk2RSwgMHg0OUNFLCAweDg5NkYsIDB4ODk2RiwgMHgxRTdGLCAweDg5NzAsIDB4ODk3MSwgMHg0OUQwLA0KLSAgICAweDg5NzIsIDB4ODk3MiwgMHgyMUFELCAweDg5NzMsIDB4ODk3QSwgMHg0OUQyLCAweDg5N0IsIDB4ODk3QiwgMHgxQkM1LA0KLSAgICAweDg5N0MsIDB4ODk3RSwgMHg0OURBLCAweDg5N0YsIDB4ODk3RiwgMHgwRjA2LCAweDg5ODAsIDB4ODk4MCwgMHg0OURELA0KLSAgICAweDg5ODEsIDB4ODk4MSwgMHgxMDMxLCAweDg5ODIsIDB4ODk4MiwgMHg0OURFLCAweDg5ODMsIDB4ODk4MywgMHgxQkRGLA0KLSAgICAweDg5ODQsIDB4ODk4NSwgMHg0OURGLCAweDg5ODYsIDB4ODk4NiwgMHgwNkFELCAweDg5ODcsIDB4ODk4QSwgMHg0OUUxLA0KLSAgICAweDg5OEIsIDB4ODk4QiwgMHgxRjk2LCAweDg5OEMsIDB4ODk4RSwgMHg0OUU1LCAweDg5OEYsIDB4ODk4RiwgMHgxRjMyLA0KLSAgICAweDg5OTAsIDB4ODk5MiwgMHg0OUU4LCAweDg5OTMsIDB4ODk5MywgMHgyMDg0LCAweDg5OTQsIDB4ODk5NSwgMHg0OUVCLA0KLSAgICAweDg5OTYsIDB4ODk5NiwgMHgyMTM2LCAweDg5OTcsIDB4ODk5NywgMHg0OUVELCAweDg5OTgsIDB4ODk5OCwgMHgyNEI4LA0KLSAgICAweDg5OTksIDB4ODlBMCwgMHg0OUVFLCAweDg5QTEsIDB4ODlBMSwgMHgyNEJBLCAweDg5QTIsIDB4ODlBNSwgMHg0OUY2LA0KLSAgICAweDg5QTYsIDB4ODlBNiwgMHgyNEJDLCAweDg5QTcsIDB4ODlBOSwgMHg0OUZBLCAweDg5QUEsIDB4ODlBQSwgMHgyMEU0LA0KLSAgICAweDg5QUIsIDB4ODlBQiwgMHg0OUZELCAweDg5QUMsIDB4ODlBQywgMHgyNEI5LCAweDg5QUQsIDB4ODlBRSwgMHg0OUZFLA0KLSAgICAweDg5QUYsIDB4ODlBRiwgMHgyNEJELCAweDg5QjAsIDB4ODlCMSwgMHg0QTAwLCAweDg5QjIsIDB4ODlCMiwgMHgyNEJFLA0KLSAgICAweDg5QjMsIDB4ODlCNiwgMHg0QTAyLCAweDg5QjcsIDB4ODlCNywgMHgyNEJGLCAweDg5QjgsIDB4ODlCOSwgMHg0QTA2LA0KLSAgICAweDg5QkEsIDB4ODlCQSwgMHgxRkQyLCAweDg5QkIsIDB4ODlCQywgMHg0QTA4LCAweDg5QkQsIDB4ODlCRCwgMHgxRkZELA0KLSAgICAweDg5QkUsIDB4ODlCRSwgMHg0QTBBLCAweDg5QkYsIDB4ODlCRiwgMHgyNEJCLCAweDg5QzAsIDB4ODlDMCwgMHgxRjJELA0KLSAgICAweDg5QzEsIDB4ODlDMSwgMHgwODZFLCAweDg5QzIsIDB4ODlDMiwgMHgwNzM0LCAweDg5QzMsIDB4ODlDMywgMHg0QTBCLA0KLSAgICAweDg5QzQsIDB4ODlDNCwgMHgwNzNGLCAweDg5QzUsIDB4ODlDNSwgMHgwQURFLCAweDg5QzYsIDB4ODlDNiwgMHgwRDZBLA0KLSAgICAweDg5QzcsIDB4ODlDNywgMHgxOTNBLCAweDg5QzgsIDB4ODlDOCwgMHgwOUFCLCAweDg5QzksIDB4ODlDOSwgMHgwOTI0LA0KLSAgICAweDg5Q0EsIDB4ODlDQywgMHgxOTNCLCAweDg5Q0QsIDB4ODlDRCwgMHg0QTBDLCAweDg5Q0UsIDB4ODlEMSwgMHgxOTNFLA0KLSAgICAweDg5RDIsIDB4ODlEMiwgMHgwODk4LCAweDg5RDMsIDB4ODlENSwgMHg0QTBELCAweDg5RDYsIDB4ODlENiwgMHgxRDU3LA0KLSAgICAweDg5RDcsIDB4ODlEOSwgMHg0QTEwLCAweDg5REEsIDB4ODlEQSwgMHgxRDU5LCAweDg5REIsIDB4ODlEQiwgMHg0QTEzLA0KLSAgICAweDg5REMsIDB4ODlEQywgMHgxRDVBLCAweDg5REQsIDB4ODlERCwgMHg0QTE0LCAweDg5REUsIDB4ODlERSwgMHgxRDU4LA0KLSAgICAweDg5REYsIDB4ODlFMiwgMHg0QTE1LCAweDg5RTMsIDB4ODlFMywgMHgwOEIzLCAweDg5RTQsIDB4ODlFNCwgMHg0QTE5LA0KLSAgICAweDg5RTUsIDB4ODlFNSwgMHgxRDVCLCAweDg5RTYsIDB4ODlFNiwgMHgwNTI4LCAweDg5RTcsIDB4ODlFQSwgMHg0QTFBLA0KLSAgICAweDg5RUIsIDB4ODlFQiwgMHgxRDVDLCAweDg5RUMsIDB4ODlFRSwgMHg0QTFFLCAweDg5RUYsIDB4ODlFRiwgMHgxRDVELA0KLSAgICAweDg5RjAsIDB4ODlGMiwgMHg0QTIxLCAweDg5RjMsIDB4ODlGMywgMHgxOUMwLCAweDg5RjQsIDB4ODlGNCwgMHgyNjA5LA0KLSAgICAweDg5RjUsIDB4ODlGNSwgMHg0QTI0LCAweDg5RjYsIDB4ODlGNiwgMHgyNjBBLCAweDg5RjcsIDB4ODlGNywgMHg0QTI1LA0KLSAgICAweDg5RjgsIDB4ODlGOCwgMHgxRTk0LCAweDg5RjksIDB4ODlGRiwgMHg0QTI2LCAweDhBMDAsIDB4OEEwMCwgMHgwRkZELA0KLSAgICAweDhBMDEsIDB4OEEwMSwgMHgyMkRGLCAweDhBMDIsIDB4OEEwMiwgMHgxRUNCLCAweDhBMDMsIDB4OEEwMywgMHgxRjBELA0KLSAgICAweDhBMDQsIDB4OEEwNiwgMHg0QTJELCAweDhBMDcsIDB4OEEwNywgMHgxMkZFLCAweDhBMDgsIDB4OEEwOCwgMHgxRjc3LA0KLSAgICAweDhBMDksIDB4OEEwOSwgMHg0QTMwLCAweDhBMEEsIDB4OEEwQSwgMHgyMUVCLCAweDhBMEIsIDB4OEEwQiwgMHg0QTMxLA0KLSAgICAweDhBMEMsIDB4OEEwQywgMHgyMkUxLCAweDhBMEQsIDB4OEEwRCwgMHg0QTMyLCAweDhBMEUsIDB4OEEwRSwgMHgyMTZGLA0KLSAgICAweDhBMEYsIDB4OEEwRiwgMHg0QTMzLCAweDhBMTAsIDB4OEExMCwgMHgyMkUwLCAweDhBMTEsIDB4OEExMiwgMHg0QTM0LA0KLSAgICAweDhBMTMsIDB4OEExMywgMHgyMUVBLCAweDhBMTQsIDB4OEExNCwgMHg0QTM2LCAweDhBMTUsIDB4OEExNSwgMHgyMkUyLA0KLSAgICAweDhBMTYsIDB4OEExNiwgMHgyMENCLCAweDhBMTcsIDB4OEExNywgMHg0QTM3LCAweDhBMTgsIDB4OEExOCwgMHgxRjc4LA0KLSAgICAweDhBMTksIDB4OEExQSwgMHg0QTM4LCAweDhBMUIsIDB4OEExQiwgMHgxRUUyLCAweDhBMUMsIDB4OEExQywgMHg0QTNBLA0KLSAgICAweDhBMUQsIDB4OEExRCwgMHgyMUYyLCAweDhBMUUsIDB4OEExRSwgMHg0QTNCLCAweDhBMUYsIDB4OEExRiwgMHgyMTUwLA0KLSAgICAweDhBMjAsIDB4OEEyMiwgMHg0QTNDLCAweDhBMjMsIDB4OEEyMywgMHgxRkQzLCAweDhBMjQsIDB4OEEyNCwgMHg0QTNGLA0KLSAgICAweDhBMjUsIDB4OEEyNSwgMHgyMkU1LCAweDhBMjYsIDB4OEEyOSwgMHg0QTQwLCAweDhBMkEsIDB4OEEyQSwgMHgxRUYyLA0KLSAgICAweDhBMkIsIDB4OEEyQywgMHg0QTQ0LCAweDhBMkQsIDB4OEEyRCwgMHgyMTFGLCAweDhBMkUsIDB4OEEzMCwgMHg0QTQ2LA0KLSAgICAweDhBMzEsIDB4OEEzMSwgMHgyMURELCAweDhBMzIsIDB4OEEzMywgMHg0QTQ5LCAweDhBMzQsIDB4OEEzNCwgMHgyMTU0LA0KLSAgICAweDhBMzUsIDB4OEEzNSwgMHg0QTRCLCAweDhBMzYsIDB4OEEzNiwgMHgyMkU3LCAweDhBMzcsIDB4OEEzOSwgMHg0QTRDLA0KLSAgICAweDhBM0EsIDB4OEEzQSwgMHgyMjgyLCAweDhBM0IsIDB4OEEzRCwgMHg0QTRGLCAweDhBM0UsIDB4OEEzRSwgMHgxRDVFLA0KLSAgICAweDhBM0YsIDB4OEE0MCwgMHg0QTUyLCAweDhBNDEsIDB4OEE0MSwgMHgyMkU2LCAweDhBNDIsIDB4OEE0NSwgMHg0QTU0LA0KLSAgICAweDhBNDYsIDB4OEE0NiwgMHgyMkU4LCAweDhBNDcsIDB4OEE0NywgMHg0QTU4LCAweDhBNDgsIDB4OEE0OCwgMHgxQTg0LA0KLSAgICAweDhBNDksIDB4OEE0RCwgMHg0QTU5LCAweDhBNEUsIDB4OEE0RSwgMHgyMkU0LCAweDhBNEYsIDB4OEE0RiwgMHg0QTVFLA0KLSAgICAweDhBNTAsIDB4OEE1MCwgMHgyMjZBLCAweDhBNTEsIDB4OEE1MSwgMHg0QTVGLCAweDhBNTIsIDB4OEE1MiwgMHgyMkVCLA0KLSAgICAweDhBNTMsIDB4OEE1MywgMHg0QTYwLCAweDhBNTQsIDB4OEE1NCwgMHgyMkU5LCAweDhBNTUsIDB4OEE1NSwgMHgyMEJELA0KLSAgICAweDhBNTYsIDB4OEE1NywgMHg0QTYxLCAweDhBNTgsIDB4OEE1OCwgMHgyMkVBLCAweDhBNTksIDB4OEE1QSwgMHg0QTYzLA0KLSAgICAweDhBNUIsIDB4OEE1QiwgMHgyMkJELCAweDhBNUMsIDB4OEE1RCwgMHg0QTY1LCAweDhBNUUsIDB4OEE1RSwgMHgxRTlFLA0KLSAgICAweDhBNUYsIDB4OEE2MCwgMHg0QTY3LCAweDhBNjEsIDB4OEE2MSwgMHgyMkY2LCAweDhBNjIsIDB4OEE2MiwgMHgyMUU3LA0KLSAgICAweDhBNjMsIDB4OEE2MywgMHgyMjE2LCAweDhBNjQsIDB4OEE2NSwgMHg0QTY5LCAweDhBNjYsIDB4OEE2NiwgMHgyMTM3LA0KLSAgICAweDhBNjcsIDB4OEE2OCwgMHg0QTZCLCAweDhBNjksIDB4OEE2OSwgMHgyMTJDLCAweDhBNkEsIDB4OEE2QSwgMHg0QTZELA0KLSAgICAweDhBNkIsIDB4OEE2QiwgMHgxRTY4LCAweDhBNkMsIDB4OEE2QywgMHgyMkYyLCAweDhBNkQsIDB4OEE2RCwgMHgxRjM3LA0KLSAgICAweDhBNkUsIDB4OEE2RSwgMHgyMkYzLCAweDhBNkYsIDB4OEE2RiwgMHg0QTZFLCAweDhBNzAsIDB4OEE3MCwgMHgyMkVGLA0KLSAgICAweDhBNzEsIDB4OEE3MSwgMHgxRjUwLCAweDhBNzIsIDB4OEE3MiwgMHgxRjEwLCAweDhBNzMsIDB4OEE3MywgMHgyMUM4LA0KLSAgICAweDhBNzQsIDB4OEE3NCwgMHg0QTZGLCAweDhBNzUsIDB4OEE3NSwgMHgyMkYxLCAweDhBNzYsIDB4OEE3OCwgMHg0QTcwLA0KLSAgICAweDhBNzksIDB4OEE3OSwgMHgxMTUzLCAweDhBN0EsIDB4OEE3QiwgMHg0QTczLCAweDhBN0MsIDB4OEE3QywgMHgyMkYwLA0KLSAgICAweDhBN0QsIDB4OEE3RSwgMHg0QTc1LCAweDhBN0YsIDB4OEE3RiwgMHgyMkVFLCAweDhBODAsIDB4OEE4MywgMHg0QTc3LA0KLSAgICAweDhBODQsIDB4OEE4NCwgMHgyMkVELCAweDhBODUsIDB4OEE4NSwgMHgyMjlFLCAweDhBODYsIDB4OEE4NiwgMHgyMkVDLA0KLSAgICAweDhBODcsIDB4OEE4NywgMHgxRkUyLCAweDhBODgsIDB4OEE4OCwgMHg0QTdCLCAweDhBODksIDB4OEE4OSwgMHgxMEUzLA0KLSAgICAweDhBOEEsIDB4OEE4QSwgMHgwRTJGLCAweDhBOEIsIDB4OEE4QywgMHg0QTdDLCAweDhBOEQsIDB4OEE4RCwgMHgyMEZFLA0KLSAgICAweDhBOEUsIDB4OEE5MCwgMHg0QTdFLCAweDhBOTEsIDB4OEE5MiwgMHgyMkY5LCAweDhBOTMsIDB4OEE5MywgMHgwRDVCLA0KLSAgICAweDhBOTQsIDB4OEE5NCwgMHg0QTgxLCAweDhBOTUsIDB4OEE5NSwgMHgxRUFGLCAweDhBOTYsIDB4OEE5NywgMHg0QTgyLA0KLSAgICAweDhBOTgsIDB4OEE5OCwgMHgyMjM2LCAweDhBOTksIDB4OEE5OSwgMHg0QTg0LCAweDhBOUEsIDB4OEE5QSwgMHgyMkY3LA0KLSAgICAweDhBOUIsIDB4OEE5RCwgMHg0QTg1LCAweDhBOUUsIDB4OEE5RSwgMHgyMjNELCAweDhBOUYsIDB4OEE5RiwgMHg0QTg4LA0KLSAgICAweDhBQTAsIDB4OEFBMCwgMHgxRTgyLCAweDhBQTEsIDB4OEFBMSwgMHgxRkI2LCAweDhBQTIsIDB4OEFBMiwgMHg0QTg5LA0KLSAgICAweDhBQTMsIDB4OEFBMywgMHgyMUE0LCAweDhBQTQsIDB4OEFBNCwgMHgyMUFBLCAweDhBQTUsIDB4OEFBNSwgMHgyMkY4LA0KLSAgICAweDhBQTYsIDB4OEFBNiwgMHgyMTUxLCAweDhBQTcsIDB4OEFBNywgMHg0QThBLCAweDhBQTgsIDB4OEFBOCwgMHgxRjYwLA0KLSAgICAweDhBQTksIDB4OEFBQiwgMHg0QThCLCAweDhBQUMsIDB4OEFBQywgMHgyMTQ3LCAweDhBQUQsIDB4OEFBRiwgMHg0QThFLA0KLSAgICAweDhBQjAsIDB4OEFCMCwgMHgyMTQ1LCAweDhBQjEsIDB4OEFCMSwgMHg0QTkxLCAweDhBQjIsIDB4OEFCMiwgMHgxRkRDLA0KLSAgICAweDhBQjMsIDB4OEFCNSwgMHg0QTkyLCAweDhBQjYsIDB4OEFCNiwgMHgyMzAxLCAweDhBQjcsIDB4OEFCOCwgMHg0QTk1LA0KLSAgICAweDhBQjksIDB4OEFCOSwgMHgxRUY1LCAweDhBQkEsIDB4OEFCQiwgMHg0QTk3LCAweDhBQkMsIDB4OEFCQywgMHgyMjE4LA0KLSAgICAweDhBQkQsIDB4OEFCRSwgMHg0QTk5LCAweDhBQkYsIDB4OEFCRiwgMHgxRUM2LCAweDhBQzAsIDB4OEFDMSwgMHg0QTlCLA0KLSAgICAweDhBQzIsIDB4OEFDMiwgMHgyMzAwLCAweDhBQzMsIDB4OEFDMywgMHg0QTlELCAweDhBQzQsIDB4OEFDNCwgMHgyMkI0LA0KLSAgICAweDhBQzUsIDB4OEFDNiwgMHg0QTlFLCAweDhBQzcsIDB4OEFDNywgMHgyMTY5LCAweDhBQzgsIDB4OEFDOCwgMHg0QUEwLA0KLSAgICAweDhBQzksIDB4OEFDOSwgMHgyMkZELCAweDhBQ0EsIDB4OEFDQSwgMHg0QUExLCAweDhBQ0IsIDB4OEFDQiwgMHgyMEVBLA0KLSAgICAweDhBQ0MsIDB4OEFDQywgMHg0QUEyLCAweDhBQ0QsIDB4OEFDRCwgMHgyMkY0LCAweDhBQ0UsIDB4OEFDRSwgMHg0QUEzLA0KLSAgICAweDhBQ0YsIDB4OEFDRiwgMHgyMkZCLCAweDhBRDAsIDB4OEFEMCwgMHg0QUE0LCAweDhBRDEsIDB4OEFEMSwgMHgyMkZDLA0KLSAgICAweDhBRDIsIDB4OEFEMiwgMHgyMDI3LCAweDhBRDMsIDB4OEFENSwgMHg0QUE1LCAweDhBRDYsIDB4OEFENiwgMHgyMDYwLA0KLSAgICAweDhBRDcsIDB4OEFENywgMHgyMkZGLCAweDhBRDgsIDB4OEFEQSwgMHg0QUE4LCAweDhBREIsIDB4OEFEQiwgMHgyMkZFLA0KLSAgICAweDhBREMsIDB4OEFEQywgMHgxRUM3LCAweDhBREQsIDB4OEFERCwgMHg0QUFCLCAweDhBREUsIDB4OEFERSwgMHgyMzBDLA0KLSAgICAweDhBREYsIDB4OEFFMSwgMHg0QUFDLCAweDhBRTIsIDB4OEFFMiwgMHgyMkY1LCAweDhBRTMsIDB4OEFFMywgMHg0QUFGLA0KLSAgICAweDhBRTQsIDB4OEFFNCwgMHgyMzA2LCAweDhBRTUsIDB4OEFFNSwgMHg0QUIwLCAweDhBRTYsIDB4OEFFNiwgMHgyMzBBLA0KLSAgICAweDhBRTcsIDB4OEFFNywgMHgyMUQzLCAweDhBRTgsIDB4OEFFQSwgMHg0QUIxLCAweDhBRUIsIDB4OEFFQiwgMHgyMzAzLA0KLSAgICAweDhBRUMsIDB4OEFFQywgMHg0QUI0LCAweDhBRUQsIDB4OEFFRCwgMHgyMzA3LCAweDhBRUUsIDB4OEFFRSwgMHgyMzBCLA0KLSAgICAweDhBRUYsIDB4OEFGMCwgMHg0QUI1LCAweDhBRjEsIDB4OEFGMSwgMHgxRjVGLCAweDhBRjIsIDB4OEFGMiwgMHg0QUI3LA0KLSAgICAweDhBRjMsIDB4OEFGMywgMHgyMzA5LCAweDhBRjQsIDB4OEFGNSwgMHg0QUI4LCAweDhBRjYsIDB4OEFGNiwgMHgyMzAyLA0KLSAgICAweDhBRjcsIDB4OEFGNywgMHgxRjA0LCAweDhBRjgsIDB4OEFGOCwgMHgyMjlELCAweDhBRjksIDB4OEFGOSwgMHg0QUJBLA0KLSAgICAweDhBRkEsIDB4OEFGQSwgMHgyMUZCLCAweDhBRkIsIDB4OEFGQiwgMHg0QUJCLCAweDhBRkMsIDB4OEFGQywgMHgyMzA4LA0KLSAgICAweDhBRkQsIDB4OEFGRCwgMHg0QUJDLCAweDhBRkUsIDB4OEFGRSwgMHgyMEFDLCAweDhBRkYsIDB4OEFGRiwgMHg0QUJELA0KLSAgICAweDhCMDAsIDB4OEIwMCwgMHgyMDhFLCAweDhCMDEsIDB4OEIwMSwgMHgyMzA1LCAweDhCMDIsIDB4OEIwMiwgMHgyMTk3LA0KLSAgICAweDhCMDMsIDB4OEIwMywgMHg0QUJFLCAweDhCMDQsIDB4OEIwNCwgMHgyMTcxLCAweDhCMDUsIDB4OEIwNSwgMHgyMjk4LA0KLSAgICAweDhCMDYsIDB4OEIwNiwgMHg0QUJGLCAweDhCMDcsIDB4OEIwNywgMHgxNzNDLCAweDhCMDgsIDB4OEIwOSwgMHg0QUMwLA0KLSAgICAweDhCMEEsIDB4OEIwQSwgMHgxRjU3LCAweDhCMEIsIDB4OEIwRCwgMHg0QUMyLCAweDhCMEUsIDB4OEIwRSwgMHgyMDgyLA0KLSAgICAweDhCMEYsIDB4OEIwRiwgMHg0QUM1LCAweDhCMTAsIDB4OEIxMCwgMHgyMzExLCAweDhCMTEsIDB4OEIxMywgMHg0QUM2LA0KLSAgICAweDhCMTQsIDB4OEIxNCwgMHgyMzA0LCAweDhCMTUsIDB4OEIxNSwgMHg0QUM5LCAweDhCMTYsIDB4OEIxNiwgMHgyMzBGLA0KLSAgICAweDhCMTcsIDB4OEIxNywgMHgxRTM1LCAweDhCMTgsIDB4OEIxOCwgMHg0QUNBLCAweDhCMTksIDB4OEIxOSwgMHgyMEQxLA0KLSAgICAweDhCMUEsIDB4OEIxQSwgMHgyMzEwLCAweDhCMUIsIDB4OEIxQiwgMHgxRkEzLCAweDhCMUMsIDB4OEIxQywgMHg0QUNCLA0KLSAgICAweDhCMUQsIDB4OEIxRCwgMHgyMUQ2LCAweDhCMUUsIDB4OEIyMCwgMHg0QUNDLCAweDhCMjEsIDB4OEIyMSwgMHgyMjA2LA0KLSAgICAweDhCMjIsIDB4OEIyNSwgMHg0QUNGLCAweDhCMjYsIDB4OEIyNiwgMHgxRDVGLCAweDhCMjcsIDB4OEIyNywgMHg0QUQzLA0KLSAgICAweDhCMjgsIDB4OEIyOCwgMHgyMzBELCAweDhCMjksIDB4OEIyQSwgMHg0QUQ0LCAweDhCMkIsIDB4OEIyQiwgMHgyMzEyLA0KLSAgICAweDhCMkMsIDB4OEIyQywgMHgyMDhELCAweDhCMkQsIDB4OEIyRCwgMHgyMzEzLCAweDhCMkUsIDB4OEIzMiwgMHg0QUQ2LA0KLSAgICAweDhCMzMsIDB4OEIzMywgMHgyMkUzLCAweDhCMzQsIDB4OEIzOCwgMHg0QURCLCAweDhCMzksIDB4OEIzOSwgMHgxRkJBLA0KLSAgICAweDhCM0EsIDB4OEIzRCwgMHg0QUUwLCAweDhCM0UsIDB4OEIzRSwgMHgyMDc4LCAweDhCM0YsIDB4OEI0OCwgMHg0QUU0LA0KLSAgICAweDhCNDksIDB4OEI0OSwgMHgyMjg4LCAweDhCNEEsIDB4OEI0RCwgMHg0QUVFLCAweDhCNEUsIDB4OEI0RSwgMHgyMzE2LA0KLSAgICAweDhCNEYsIDB4OEI0RiwgMHgxRjZCLCAweDhCNTAsIDB4OEI1NSwgMHg0QUYyLCAweDhCNTYsIDB4OEI1NiwgMHgyMzE0LA0KLSAgICAweDhCNTcsIDB4OEI1NywgMHg0QUY4LCAweDhCNTgsIDB4OEI1OCwgMHgyMTMwLCAweDhCNTksIDB4OEI1OSwgMHgyMzE1LA0KLSAgICAweDhCNUEsIDB4OEI1QSwgMHgyMTY4LCAweDhCNUIsIDB4OEI1QiwgMHg0QUY5LCAweDhCNUMsIDB4OEI1QywgMHgyMEM0LA0KLSAgICAweDhCNUQsIDB4OEI2NSwgMHg0QUZBLCAweDhCNjYsIDB4OEI2NiwgMHgwOERFLCAweDhCNjcsIDB4OEI2QSwgMHg0QjAzLA0KLSAgICAweDhCNkIsIDB4OEI2QiwgMHgyMzE4LCAweDhCNkMsIDB4OEI2QywgMHgwQkM4LCAweDhCNkQsIDB4OEI2RSwgMHg0QjA3LA0KLSAgICAweDhCNkYsIDB4OEI2RiwgMHgyMjE5LCAweDhCNzAsIDB4OEI3MCwgMHgyMjE3LCAweDhCNzEsIDB4OEI3MywgMHg0QjA5LA0KLSAgICAweDhCNzQsIDB4OEI3NCwgMHgyMEQ1LCAweDhCNzUsIDB4OEI3NiwgMHg0QjBDLCAweDhCNzcsIDB4OEI3NywgMHgxRjRBLA0KLSAgICAweDhCNzgsIDB4OEI3QywgMHg0QjBFLCAweDhCN0QsIDB4OEI3RCwgMHgyMjQwLCAweDhCN0UsIDB4OEI3RiwgMHg0QjEzLA0KLSAgICAweDhCODAsIDB4OEI4MCwgMHgxRUQzLCAweDhCODEsIDB4OEI4OSwgMHg0QjE1LCAweDhCOEEsIDB4OEI4QSwgMHgxRTQ5LA0KLSAgICAweDhCOEIsIDB4OEI4RCwgMHg0QjFFLCAweDhCOEUsIDB4OEI4RSwgMHgyNjFCLCAweDhCOEYsIDB4OEI5MSwgMHg0QjIxLA0KLSAgICAweDhCOTIsIDB4OEI5MiwgMHgxRTZELCAweDhCOTMsIDB4OEI5MywgMHgyMEY4LCAweDhCOTQsIDB4OEI5NCwgMHg0QjI0LA0KLSAgICAweDhCOTUsIDB4OEI5NSwgMHgxRkZCLCAweDhCOTYsIDB4OEI5NiwgMHgyMzE5LCAweDhCOTcsIDB4OEI5QiwgMHg0QjI1LA0KLSAgICAweDhCOUMsIDB4OEI5QywgMHgyMzBFLCAweDhCOUQsIDB4OEI5RCwgMHg0QjJBLCAweDhCOUUsIDB4OEI5RSwgMHgyMzE3LA0KLSAgICAweDhCOUYsIDB4OEI5RiwgMHg0QjJCLCAweDhCQTAsIDB4OEJBMCwgMHgxMzE3LCAweDhCQTEsIDB4OEJBMSwgMHgwODM5LA0KLSAgICAweDhCQTIsIDB4OEJBMiwgMHgwNUU4LCAweDhCQTMsIDB4OEJBMywgMHgwNkI3LCAweDhCQTQsIDB4OEJBNCwgMHgwQ0FBLA0KLSAgICAweDhCQTUsIDB4OEJBNSwgMHgwODE4LCAweDhCQTYsIDB4OEJBNywgMHgxMzE4LCAweDhCQTgsIDB4OEJBOCwgMHgwRTI5LA0KLSAgICAweDhCQTksIDB4OEJBOSwgMHgwQzlFLCAweDhCQUEsIDB4OEJBQSwgMHgxMzFBLCAweDhCQUIsIDB4OEJBQiwgMHgwQzFDLA0KLSAgICAweDhCQUMsIDB4OEJBQywgMHg0QjJDLCAweDhCQUQsIDB4OEJBRCwgMHgwRkRFLCAweDhCQUUsIDB4OEJBRSwgMHgxMDcwLA0KLSAgICAweDhCQUYsIDB4OEJBRiwgMHgwRkRGLCAweDhCQjAsIDB4OEJCMCwgMHgwODNBLCAweDhCQjEsIDB4OEJCMSwgMHg0QjJELA0KLSAgICAweDhCQjIsIDB4OEJCMiwgMHgwODgzLCAweDhCQjMsIDB4OEJCMywgMHgwN0Y5LCAweDhCQjQsIDB4OEJCNSwgMHgxMzFCLA0KLSAgICAweDhCQjYsIDB4OEJCNiwgMHgwRkYxLCAweDhCQjcsIDB4OEJCNywgMHgxMzFELCAweDhCQjgsIDB4OEJCOCwgMHgwRkI4LA0KLSAgICAweDhCQjksIDB4OEJCOSwgMHgwNjJFLCAweDhCQkEsIDB4OEJCQSwgMHgwQTgyLCAweDhCQkIsIDB4OEJCQiwgMHg0QjJFLA0KLSAgICAweDhCQkMsIDB4OEJCQywgMHgwREM0LCAweDhCQkQsIDB4OEJCRCwgMHgwNjhBLCAweDhCQkUsIDB4OEJCRSwgMHgwRDIxLA0KLSAgICAweDhCQkYsIDB4OEJCRiwgMHgwNjYwLCAweDhCQzAsIDB4OEJDMCwgMHgwOTI2LCAweDhCQzEsIDB4OEJDMSwgMHgxMUEzLA0KLSAgICAweDhCQzIsIDB4OEJDMywgMHgxMzFFLCAweDhCQzQsIDB4OEJDNCwgMHgwQkRGLCAweDhCQzUsIDB4OEJDNSwgMHgxMjQ0LA0KLSAgICAweDhCQzYsIDB4OEJDNiwgMHgwRDRELCAweDhCQzcsIDB4OEJDNywgMHg0QjJGLCAweDhCQzgsIDB4OEJDOCwgMHgxMTRBLA0KLSAgICAweDhCQzksIDB4OEJDOSwgMHgwREQ0LCAweDhCQ0EsIDB4OEJDQSwgMHgxMTkwLCAweDhCQ0IsIDB4OEJDQiwgMHgxMzIwLA0KLSAgICAweDhCQ0MsIDB4OEJDQywgMHgxMURFLCAweDhCQ0QsIDB4OEJDRCwgMHgwNTRELCAweDhCQ0UsIDB4OEJDRSwgMHgxMzIyLA0KLSAgICAweDhCQ0YsIDB4OEJDRiwgMHgxMzIxLCAweDhCRDAsIDB4OEJEMCwgMHg0QjMwLCAweDhCRDEsIDB4OEJEMSwgMHgxMDcyLA0KLSAgICAweDhCRDIsIDB4OEJENCwgMHgxMzIzLCAweDhCRDUsIDB4OEJENSwgMHgwRDZCLCAweDhCRDYsIDB4OEJENiwgMHgxMzI2LA0KLSAgICAweDhCRDcsIDB4OEJENywgMHgwRDQyLCAweDhCRDgsIDB4OEJEOSwgMHgxMzI3LCAweDhCREEsIDB4OEJEQSwgMHgwNEY0LA0KLSAgICAweDhCREIsIDB4OEJEQiwgMHgxMUVFLCAweDhCREMsIDB4OEJEQywgMHgxMzI5LCAweDhCREQsIDB4OEJERCwgMHgwN0M1LA0KLSAgICAweDhCREUsIDB4OEJERSwgMHgwNThGLCAweDhCREYsIDB4OEJFMCwgMHgxMzJBLCAweDhCRTEsIDB4OEJFMSwgMHgwNzQ3LA0KLSAgICAweDhCRTIsIDB4OEJFMiwgMHgwRkQ4LCAweDhCRTMsIDB4OEJFMywgMHgxMDZGLCAweDhCRTQsIDB4OEJFNCwgMHgxMzJDLA0KLSAgICAweDhCRTUsIDB4OEJFNSwgMHgwNkJFLCAweDhCRTYsIDB4OEJFNiwgMHgwRjU3LCAweDhCRTcsIDB4OEJFNywgMHgwNEI2LA0KLSAgICAweDhCRTgsIDB4OEJFOSwgMHgxMzJELCAweDhCRUEsIDB4OEJFQSwgMHg0QjMxLCAweDhCRUIsIDB4OEJFQiwgMHgwOEJDLA0KLSAgICAweDhCRUMsIDB4OEJFQywgMHgwRUVCLCAweDhCRUQsIDB4OEJFRCwgMHgxMEQ0LCAweDhCRUUsIDB4OEJFRSwgMHgxMzJGLA0KLSAgICAweDhCRUYsIDB4OEJFRiwgMHgwRjAyLCAweDhCRjAsIDB4OEJGMCwgMHgxMzMwLCAweDhCRjEsIDB4OEJGMSwgMHgxMEJBLA0KLSAgICAweDhCRjIsIDB4OEJGMiwgMHgwN0ZBLCAweDhCRjMsIDB4OEJGMywgMHgxMzMxLCAweDhCRjQsIDB4OEJGNCwgMHgwREFBLA0KLSAgICAweDhCRjUsIDB4OEJGNSwgMHgwREM1LCAweDhCRjYsIDB4OEJGNiwgMHgxMzMyLCAweDhCRjcsIDB4OEJGNywgMHgwQzY4LA0KLSAgICAweDhCRjgsIDB4OEJGOCwgMHgxMUVELCAweDhCRjksIDB4OEJGOSwgMHgxMzMzLCAweDhCRkEsIDB4OEJGQSwgMHgwQjc2LA0KLSAgICAweDhCRkIsIDB4OEJGQiwgMHgwNjAwLCAweDhCRkMsIDB4OEJGQywgMHgxMzM0LCAweDhCRkQsIDB4OEJGRCwgMHgwNjY5LA0KLSAgICAweDhCRkUsIDB4OEJGRSwgMHgwOTVCLCAweDhCRkYsIDB4OEJGRiwgMHgxMzM1LCAweDhDMDAsIDB4OEMwMCwgMHgxMzM2LA0KLSAgICAweDhDMDEsIDB4OEMwMSwgMHgwREEyLCAweDhDMDIsIDB4OEMwMiwgMHgxMzM3LCAweDhDMDMsIDB4OEMwMywgMHgwNUQ4LA0KLSAgICAweDhDMDQsIDB4OEMwNCwgMHgxMzM4LCAweDhDMDUsIDB4OEMwNSwgMHgwQTBCLCAweDhDMDYsIDB4OEMwNiwgMHgxMjE4LA0KLSAgICAweDhDMDcsIDB4OEMwNywgMHgxMzM5LCAweDhDMDgsIDB4OEMwOCwgMHgwRTBCLCAweDhDMDksIDB4OEMwOSwgMHg0QjMyLA0KLSAgICAweDhDMEEsIDB4OEMwQSwgMHgxMDcxLCAweDhDMEIsIDB4OEMwQiwgMHgwQjE0LCAweDhDMEMsIDB4OEMwQywgMHgxMzNBLA0KLSAgICAweDhDMEQsIDB4OEMwRCwgMHgwNURFLCAweDhDMEUsIDB4OEMwRSwgMHgwN0U2LCAweDhDMEYsIDB4OEMwRiwgMHgxMzNCLA0KLSAgICAweDhDMTAsIDB4OEMxMCwgMHgwRjdFLCAweDhDMTEsIDB4OEMxMiwgMHgxMzNDLCAweDhDMTMsIDB4OEMxMywgMHgwRUNDLA0KLSAgICAweDhDMTQsIDB4OEMxNiwgMHgxMzNFLCAweDhDMTcsIDB4OEMxNywgMHgwNEJFLCAweDhDMTgsIDB4OEMxOCwgMHgxMzQzLA0KLSAgICAweDhDMTksIDB4OEMxOSwgMHgxMzQxLCAweDhDMUEsIDB4OEMxQSwgMHgxMDExLCAweDhDMUIsIDB4OEMxQiwgMHgxMzQyLA0KLSAgICAweDhDMUMsIDB4OEMxQywgMHgwQURBLCAweDhDMUQsIDB4OEMxRCwgMHgxMzQ0LCAweDhDMUUsIDB4OEMxRSwgMHg0QjMzLA0KLSAgICAweDhDMUYsIDB4OEMyMSwgMHgxMzQ1LCAweDhDMjIsIDB4OEMyMiwgMHgwRjg2LCAweDhDMjMsIDB4OEMyMywgMHgxMDJDLA0KLSAgICAweDhDMjQsIDB4OEMyNCwgMHgwNDA0LCAweDhDMjUsIDB4OEMyNSwgMHgxMzQ4LCAweDhDMjYsIDB4OEMyNiwgMHgwQzI4LA0KLSAgICAweDhDMjcsIDB4OEMyNywgMHgxMzQ5LCAweDhDMjgsIDB4OEMyOCwgMHgwOEM4LCAweDhDMjksIDB4OEMyOSwgMHgwQUE2LA0KLSAgICAweDhDMkEsIDB4OEMyQiwgMHgxMzRBLCAweDhDMkMsIDB4OEMyQywgMHgwQjAyLCAweDhDMkQsIDB4OEMyRCwgMHgwRTBBLA0KLSAgICAweDhDMkUsIDB4OEMyRiwgMHgxMzRDLCAweDhDMzAsIDB4OEMzMCwgMHgwOUE5LCAweDhDMzEsIDB4OEMzMSwgMHgwQkY2LA0KLSAgICAweDhDMzIsIDB4OEMzMywgMHgxMzRFLCAweDhDMzQsIDB4OEMzNCwgMHgwQzMxLCAweDhDMzUsIDB4OEMzNiwgMHgxMzUwLA0KLSAgICAweDhDMzcsIDB4OEMzNywgMHgwNzIxLCAweDhDMzgsIDB4OEM0MCwgMHg0QjM0LCAweDhDNDEsIDB4OEM0MSwgMHgwODAyLA0KLSAgICAweDhDNDIsIDB4OEM0NSwgMHg0QjNELCAweDhDNDYsIDB4OEM0NiwgMHgwNUY4LCAweDhDNDcsIDB4OEM0NywgMHgxQ0Y2LA0KLSAgICAweDhDNDgsIDB4OEM0OCwgMHgyMEM4LCAweDhDNDksIDB4OEM0OSwgMHgxQ0Y3LCAweDhDNEEsIDB4OEM0QiwgMHg0QjQxLA0KLSAgICAweDhDNEMsIDB4OEM0QywgMHgwRTk0LCAweDhDNEQsIDB4OEM0RiwgMHg0QjQzLCAweDhDNTAsIDB4OEM1MCwgMHgxRUZELA0KLSAgICAweDhDNTEsIDB4OEM1NCwgMHg0QjQ2LCAweDhDNTUsIDB4OEM1NSwgMHgxRDE1LCAweDhDNTYsIDB4OEM1OSwgMHg0QjRBLA0KLSAgICAweDhDNUEsIDB4OEM1QSwgMHgxOTkwLCAweDhDNUIsIDB4OEM2MCwgMHg0QjRFLCAweDhDNjEsIDB4OEM2MSwgMHgwRjYwLA0KLSAgICAweDhDNjIsIDB4OEM2MiwgMHgwN0Q0LCAweDhDNjMsIDB4OEM2OSwgMHg0QjU0LCAweDhDNkEsIDB4OEM2QSwgMHgwNzc3LA0KLSAgICAweDhDNkIsIDB4OEM2QiwgMHgxMEU4LCAweDhDNkMsIDB4OEM3MiwgMHg0QjVCLCAweDhDNzMsIDB4OEM3MywgMHgxNURELA0KLSAgICAweDhDNzQsIDB4OEM3NywgMHg0QjYyLCAweDhDNzgsIDB4OEM3OCwgMHgxRDUwLCAweDhDNzksIDB4OEM3OSwgMHgwNDEzLA0KLSAgICAweDhDN0EsIDB4OEM3QSwgMHgwNEI5LCAweDhDN0IsIDB4OEM4MSwgMHg0QjY2LCAweDhDODIsIDB4OEM4MiwgMHgxRDUxLA0KLSAgICAweDhDODMsIDB4OEM4NCwgMHg0QjZELCAweDhDODUsIDB4OEM4NSwgMHgxRDUzLCAweDhDODYsIDB4OEM4OCwgMHg0QjZGLA0KLSAgICAweDhDODksIDB4OEM4OSwgMHgwNzg4LCAweDhDOEEsIDB4OEM4QSwgMHgxRDUyLCAweDhDOEIsIDB4OEM4QiwgMHg0QjcyLA0KLSAgICAweDhDOEMsIDB4OEM4QywgMHgwQUI3LCAweDhDOEQsIDB4OEM5MywgMHg0QjczLCAweDhDOTQsIDB4OEM5NCwgMHgxRDU1LA0KLSAgICAweDhDOTUsIDB4OEM5NywgMHg0QjdBLCAweDhDOTgsIDB4OEM5OCwgMHgxRDU0LCAweDhDOTksIDB4OEM5QywgMHg0QjdELA0KLSAgICAweDhDOUQsIDB4OEM5RCwgMHgxRTNCLCAweDhDOUUsIDB4OEM5RSwgMHgyMjdGLCAweDhDOUYsIDB4OEM5RiwgMHg0QjgxLA0KLSAgICAweDhDQTAsIDB4OENBMCwgMHgxRjBDLCAweDhDQTEsIDB4OENBMSwgMHgxRTU5LCAweDhDQTIsIDB4OENBMiwgMHgxRjI0LA0KLSAgICAweDhDQTMsIDB4OENBNiwgMHg0QjgyLCAweDhDQTcsIDB4OENBNywgMHgyMEJBLCAweDhDQTgsIDB4OENBOCwgMHgxRjY1LA0KLSAgICAweDhDQTksIDB4OENBOSwgMHgxRUYwLCAweDhDQUEsIDB4OENBQSwgMHgyMTY0LCAweDhDQUIsIDB4OENBQiwgMHgxRjMwLA0KLSAgICAweDhDQUMsIDB4OENBQywgMHgyMjYxLCAweDhDQUQsIDB4OENBRSwgMHg0Qjg2LCAweDhDQUYsIDB4OENBRiwgMHgyMkEyLA0KLSAgICAweDhDQjAsIDB4OENCMCwgMHgyNEFCLCAweDhDQjEsIDB4OENCMSwgMHg0Qjg4LCAweDhDQjIsIDB4OENCMiwgMHgyNEFGLA0KLSAgICAweDhDQjMsIDB4OENCMywgMHgxRUU4LCAweDhDQjQsIDB4OENCNCwgMHgxRjM5LCAweDhDQjUsIDB4OENCNSwgMHg0Qjg5LA0KLSAgICAweDhDQjYsIDB4OENCNiwgMHgxRTQ4LCAweDhDQjcsIDB4OENCNywgMHgyMDcwLCAweDhDQjgsIDB4OENCOCwgMHgxRUE4LA0KLSAgICAweDhDQjksIDB4OENCOSwgMHg0QjhBLCAweDhDQkEsIDB4OENCQSwgMHgyNEFDLCAweDhDQkIsIDB4OENCQiwgMHgxRUY3LA0KLSAgICAweDhDQkMsIDB4OENCQywgMHgyMTc2LCAweDhDQkQsIDB4OENCRCwgMHgyNEFELCAweDhDQkUsIDB4OENCRSwgMHg0QjhCLA0KLSAgICAweDhDQkYsIDB4OENCRiwgMHgyMDdCLCAweDhDQzAsIDB4OENDMCwgMHgxRjQ1LCAweDhDQzEsIDB4OENDMSwgMHgyNEFBLA0KLSAgICAweDhDQzIsIDB4OENDMiwgMHgyMDRCLCAweDhDQzMsIDB4OENDMywgMHgyMDJGLCAweDhDQzQsIDB4OENDNCwgMHgxRjVBLA0KLSAgICAweDhDQzUsIDB4OENDNSwgMHgyNEIwLCAweDhDQzYsIDB4OENDNiwgMHg0QjhDLCAweDhDQzcsIDB4OENDNywgMHgyMkI3LA0KLSAgICAweDhDQzgsIDB4OENDOCwgMHgxRjdGLCAweDhDQzksIDB4OENDOSwgMHg0QjhELCAweDhDQ0EsIDB4OENDQSwgMHgyMjY1LA0KLSAgICAweDhDQ0IsIDB4OENEMCwgMHg0QjhFLCAweDhDRDEsIDB4OENEMSwgMHgyNEIyLCAweDhDRDIsIDB4OENEMiwgMHgyMTFCLA0KLSAgICAweDhDRDMsIDB4OENEMywgMHgxRTUxLCAweDhDRDQsIDB4OENENCwgMHg0Qjk0LCAweDhDRDUsIDB4OENENSwgMHgyNEI0LA0KLSAgICAweDhDRDYsIDB4OENEOSwgMHg0Qjk1LCAweDhDREEsIDB4OENEQSwgMHgyNEIzLCAweDhDREIsIDB4OENEQiwgMHg0Qjk5LA0KLSAgICAweDhDREMsIDB4OENEQywgMHgxRTlGLCAweDhDREQsIDB4OENERCwgMHg0QjlBLCAweDhDREUsIDB4OENERSwgMHgyMTE4LA0KLSAgICAweDhDREYsIDB4OENERiwgMHg0QjlCLCAweDhDRTAsIDB4OENFMCwgMHgyMEI0LCAweDhDRTEsIDB4OENFMSwgMHgyM0FGLA0KLSAgICAweDhDRTIsIDB4OENFMiwgMHgyMUJCLCAweDhDRTMsIDB4OENFMywgMHgyMDcyLCAweDhDRTQsIDB4OENFNCwgMHgxRjk1LA0KLSAgICAweDhDRTUsIDB4OENFNSwgMHg0QjlDLCAweDhDRTYsIDB4OENFNiwgMHgxRjBBLCAweDhDRTcsIDB4OENFNywgMHgyNEI2LA0KLSAgICAweDhDRTgsIDB4OENFOSwgMHg0QjlELCAweDhDRUEsIDB4OENFQSwgMHgyMjkxLCAweDhDRUIsIDB4OENFQiwgMHgyNEI1LA0KLSAgICAweDhDRUMsIDB4OENFQywgMHgyMjc4LCAweDhDRUQsIDB4OENFRCwgMHgxRUQ0LCAweDhDRUUsIDB4OENGMywgMHg0QjlGLA0KLSAgICAweDhDRjQsIDB4OENGNCwgMHgxRkYzLCAweDhDRjUsIDB4OENGOSwgMHg0QkE1LCAweDhDRkEsIDB4OENGQSwgMHgyMkE5LA0KLSAgICAweDhDRkIsIDB4OENGQiwgMHgyNEI3LCAweDhDRkMsIDB4OENGQywgMHgxRjI4LCAweDhDRkQsIDB4OENGRCwgMHgyMTA5LA0KLSAgICAweDhDRkUsIDB4OENGRSwgMHgyMkM3LCAweDhDRkYsIDB4OENGRiwgMHg0QkFBLCAweDhEMDAsIDB4OEQwMywgMHg0QkFCLA0KLSAgICAweDhEMDQsIDB4OEQwNCwgMHgyNEFFLCAweDhEMDUsIDB4OEQwNSwgMHgyMkIxLCAweDhEMDYsIDB4OEQwNywgMHg0QkFGLA0KLSAgICAweDhEMDgsIDB4OEQwOCwgMHgyMjY2LCAweDhEMDksIDB4OEQwOSwgMHg0QkIxLCAweDhEMEEsIDB4OEQwQSwgMHgyMjVCLA0KLSAgICAweDhEMEIsIDB4OEQwQiwgMHgyMkM0LCAweDhEMEMsIDB4OEQwQywgMHg0QkIyLCAweDhEMEQsIDB4OEQwRCwgMHgyMTE1LA0KLSAgICAweDhEMEUsIDB4OEQwRSwgMHg0QkIzLCAweDhEMEYsIDB4OEQwRiwgMHgyMjJBLCAweDhEMTAsIDB4OEQxMCwgMHgyNEIxLA0KLSAgICAweDhEMTEsIDB4OEQxNSwgMHg0QkI0LCAweDhEMTYsIDB4OEQxNiwgMHgyMTNELCAweDhEMTcsIDB4OEQxQSwgMHg0QkI5LA0KLSAgICAweDhEMUIsIDB4OEQxQiwgMHgxRjE1LCAweDhEMUMsIDB4OEQxQywgMHgyMjVDLCAweDhEMUQsIDB4OEQxRCwgMHgwNDFELA0KLSAgICAweDhEMUUsIDB4OEQxRSwgMHgxMThCLCAweDhEMUYsIDB4OEQxRiwgMHgwNkI1LCAweDhEMjAsIDB4OEQyMCwgMHg0QkJELA0KLSAgICAweDhEMjEsIDB4OEQyMSwgMHgwNzBBLCAweDhEMjIsIDB4OEQyMiwgMHgwNDhELCAweDhEMjMsIDB4OEQyMywgMHgxMTMzLA0KLSAgICAweDhEMjQsIDB4OEQyNCwgMHgwRjNBLCAweDhEMjUsIDB4OEQyNSwgMHgwM0U3LCAweDhEMjYsIDB4OEQyNiwgMHgxMTZDLA0KLSAgICAweDhEMjcsIDB4OEQyNywgMHgwODBBLCAweDhEMjgsIDB4OEQyOCwgMHgxMUM5LCAweDhEMjksIDB4OEQyOSwgMHgwNjU0LA0KLSAgICAweDhEMkEsIDB4OEQyQSwgMHgwRTAzLCAweDhEMkIsIDB4OEQyQiwgMHgwQkQ1LCAweDhEMkMsIDB4OEQyQywgMHgwNDRBLA0KLSAgICAweDhEMkQsIDB4OEQyRCwgMHgwNzEzLCAweDhEMkUsIDB4OEQyRSwgMHgxMUZCLCAweDhEMkYsIDB4OEQyRiwgMHgwNzNBLA0KLSAgICAweDhEMzAsIDB4OEQzMCwgMHgwNjNFLCAweDhEMzEsIDB4OEQzMSwgMHgwODZELCAweDhEMzIsIDB4OEQzMywgMHgxOTJDLA0KLSAgICAweDhEMzQsIDB4OEQzNCwgMHgwRTRDLCAweDhEMzUsIDB4OEQzNSwgMHgwNzRDLCAweDhEMzYsIDB4OEQzNiwgMHgxOTJFLA0KLSAgICAweDhEMzcsIDB4OEQzNywgMHgwNTdFLCAweDhEMzgsIDB4OEQzOCwgMHgwQUI4LCAweDhEMzksIDB4OEQzOSwgMHgwNjZFLA0KLSAgICAweDhEM0EsIDB4OEQzQSwgMHgwNzhGLCAweDhEM0IsIDB4OEQzQiwgMHgxOTJGLCAweDhEM0MsIDB4OEQzQywgMHgxMTM3LA0KLSAgICAweDhEM0QsIDB4OEQzRCwgMHgxOTMwLCAweDhEM0UsIDB4OEQzRSwgMHgwODQ5LCAweDhEM0YsIDB4OEQzRiwgMHgwN0Y0LA0KLSAgICAweDhENDAsIDB4OEQ0MCwgMHgxOTMxLCAweDhENDEsIDB4OEQ0MSwgMHgwQTI3LCAweDhENDIsIDB4OEQ0MiwgMHgwQTVGLA0KLSAgICAweDhENDMsIDB4OEQ0MywgMHgxMTIyLCAweDhENDQsIDB4OEQ0NCwgMHgxMjI3LCAweDhENDUsIDB4OEQ0NiwgMHgxOTMyLA0KLSAgICAweDhENDcsIDB4OEQ0NywgMHgxOTM2LCAweDhENDgsIDB4OEQ0OSwgMHgxOTM0LCAweDhENEEsIDB4OEQ0QSwgMHgwRDE3LA0KLSAgICAweDhENEIsIDB4OEQ0QiwgMHgwNkFFLCAweDhENEMsIDB4OEQ0QywgMHgwNjAzLCAweDhENEQsIDB4OEQ0RCwgMHgxOTM3LA0KLSAgICAweDhENEUsIDB4OEQ0RSwgMHgwRDgxLCAweDhENEYsIDB4OEQ0RiwgMHgwRDA2LCAweDhENTAsIDB4OEQ1MCwgMHgwNTUwLA0KLSAgICAweDhENTEsIDB4OEQ1MiwgMHg0QkJFLCAweDhENTMsIDB4OEQ1MywgMHgxNjNCLCAweDhENTQsIDB4OEQ1NCwgMHgwQkEzLA0KLSAgICAweDhENTUsIDB4OEQ1NSwgMHgxOTM4LCAweDhENTYsIDB4OEQ1NiwgMHgwOUEwLCAweDhENTcsIDB4OEQ1NywgMHg0QkMwLA0KLSAgICAweDhENTgsIDB4OEQ1OCwgMHgxMjE1LCAweDhENTksIDB4OEQ1OSwgMHgxOTM5LCAweDhENUEsIDB4OEQ1QSwgMHgxMjA5LA0KLSAgICAweDhENUIsIDB4OEQ1QiwgMHgwQ0Q3LCAweDhENUMsIDB4OEQ1QywgMHgxMjg5LCAweDhENUQsIDB4OEQ1RCwgMHgxMjgzLA0KLSAgICAweDhENUUsIDB4OEQ1RSwgMHgxMTIxLCAweDhENUYsIDB4OEQ1RiwgMHg0QkMxLCAweDhENjAsIDB4OEQ2MCwgMHgxMTNDLA0KLSAgICAweDhENjEsIDB4OEQ2MSwgMHgwQ0ZELCAweDhENjIsIDB4OEQ2MiwgMHgxMDkzLCAweDhENjMsIDB4OEQ2MywgMHgwNkNFLA0KLSAgICAweDhENjQsIDB4OEQ2NCwgMHgwNTA1LCAweDhENjUsIDB4OEQ2NSwgMHg0QkMyLCAweDhENjYsIDB4OEQ2NiwgMHgwRDFCLA0KLSAgICAweDhENjcsIDB4OEQ2NywgMHgxQ0Y0LCAweDhENjgsIDB4OEQ2QSwgMHg0QkMzLCAweDhENkIsIDB4OEQ2QiwgMHgwNzhDLA0KLSAgICAweDhENkMsIDB4OEQ2QywgMHg0QkM2LCAweDhENkQsIDB4OEQ2RCwgMHgxQ0Y1LCAweDhENkUsIDB4OEQ2RiwgMHg0QkM3LA0KLSAgICAweDhENzAsIDB4OEQ3MCwgMHgxMjNDLCAweDhENzEsIDB4OEQ3MiwgMHg0QkM5LCAweDhENzMsIDB4OEQ3MywgMHgxQ0VGLA0KLSAgICAweDhENzQsIDB4OEQ3NCwgMHgwNkFCLCAweDhENzUsIDB4OEQ3NSwgMHgxMTc1LCAweDhENzYsIDB4OEQ3NiwgMHgwNkNBLA0KLSAgICAweDhENzcsIDB4OEQ3NywgMHgwQzBGLCAweDhENzgsIDB4OEQ4MCwgMHg0QkNCLCAweDhEODEsIDB4OEQ4MSwgMHgwNEU4LA0KLSAgICAweDhEODIsIDB4OEQ4MywgMHg0QkQ0LCAweDhEODQsIDB4OEQ4NCwgMHgxQ0YwLCAweDhEODUsIDB4OEQ4NSwgMHgwNEQxLA0KLSAgICAweDhEODYsIDB4OEQ4OSwgMHg0QkQ2LCAweDhEOEEsIDB4OEQ4QSwgMHgxMTAwLCAweDhEOEIsIDB4OEQ4QiwgMHgwQzc0LA0KLSAgICAweDhEOEMsIDB4OEQ5MCwgMHg0QkRBLCAweDhEOTEsIDB4OEQ5MSwgMHgxQ0YyLCAweDhEOTIsIDB4OEQ5MywgMHg0QkRGLA0KLSAgICAweDhEOTQsIDB4OEQ5NCwgMHgxQ0YxLCAweDhEOTUsIDB4OEQ5NSwgMHgxRjE0LCAweDhEOTYsIDB4OEQ5OCwgMHg0QkUxLA0KLSAgICAweDhEOTksIDB4OEQ5OSwgMHgyMjdBLCAweDhEOUEsIDB4OEQ5RSwgMHg0QkU0LCAweDhEOUYsIDB4OEQ5RiwgMHgwRTFFLA0KLSAgICAweDhEQTAsIDB4OERBMiwgMHg0QkU5LCAweDhEQTMsIDB4OERBMywgMHgwQzdGLCAweDhEQTQsIDB4OERBNywgMHg0QkVDLA0KLSAgICAweDhEQTgsIDB4OERBOCwgMHgyMEVFLCAweDhEQTksIDB4OERCMCwgMHg0QkYwLCAweDhEQjEsIDB4OERCMSwgMHgxQ0YzLA0KLSAgICAweDhEQjIsIDB4OERCMiwgMHgyNUY4LCAweDhEQjMsIDB4OERCMywgMHgxMjQwLCAweDhEQjQsIDB4OERCNCwgMHgwQjgwLA0KLSAgICAweDhEQjUsIDB4OERCNSwgMHgxRDFDLCAweDhEQjYsIDB4OERCNywgMHg0QkY4LCAweDhEQjgsIDB4OERCOCwgMHgxRDE3LA0KLSAgICAweDhEQjksIDB4OERCOSwgMHg0QkZBLCAweDhEQkEsIDB4OERCQSwgMHgxRDFGLCAweDhEQkIsIDB4OERCQiwgMHg0QkZCLA0KLSAgICAweDhEQkMsIDB4OERCQywgMHgxRDFFLCAweDhEQkQsIDB4OERCRCwgMHg0QkZDLCAweDhEQkUsIDB4OERCRSwgMHgxMUI5LA0KLSAgICAweDhEQkYsIDB4OERCRiwgMHgxRDFELCAweDhEQzAsIDB4OERDMiwgMHg0QkZELCAweDhEQzMsIDB4OERDMywgMHgxMTAxLA0KLSAgICAweDhEQzQsIDB4OERDNCwgMHgxRDIwLCAweDhEQzUsIDB4OERDNSwgMHg0QzAwLCAweDhEQzYsIDB4OERDNiwgMHgxRDI4LA0KLSAgICAweDhEQzcsIDB4OERDQSwgMHg0QzAxLCAweDhEQ0IsIDB4OERDQiwgMHgwM0RBLCAweDhEQ0MsIDB4OERDQywgMHgwNUQ5LA0KLSAgICAweDhEQ0QsIDB4OERDRCwgMHg0QzA1LCAweDhEQ0UsIDB4OERDRiwgMHgxRDI1LCAweDhERDAsIDB4OEREMCwgMHg0QzA2LA0KLSAgICAweDhERDEsIDB4OEREMSwgMHgwQjlELCAweDhERDIsIDB4OERENSwgMHg0QzA3LCAweDhERDYsIDB4OERENywgMHgxRDIxLA0KLSAgICAweDhERDgsIDB4OEREOSwgMHg0QzBCLCAweDhEREEsIDB4OEREQSwgMHgxRDIzLCAweDhEREIsIDB4OEREQiwgMHgxRDI3LA0KLSAgICAweDhEREMsIDB4OEREQywgMHg0QzBELCAweDhEREQsIDB4OERERCwgMHgwOTBGLCAweDhEREUsIDB4OERERSwgMHgxRDI0LA0KLSAgICAweDhEREYsIDB4OERERiwgMHgwNkY1LCAweDhERTAsIDB4OERFMiwgMHg0QzBFLCAweDhERTMsIDB4OERFMywgMHgxRDJDLA0KLSAgICAweDhERTQsIDB4OERFNCwgMHgxRDJGLCAweDhERTUsIDB4OERFNywgMHg0QzExLCAweDhERTgsIDB4OERFOCwgMHgwOTc0LA0KLSAgICAweDhERTksIDB4OERFOSwgMHg0QzE0LCAweDhERUEsIDB4OERFQSwgMHgwNzRCLCAweDhERUIsIDB4OERFQiwgMHgxRDE4LA0KLSAgICAweDhERUMsIDB4OERFQywgMHgxRDI5LCAweDhERUQsIDB4OERFRSwgMHg0QzE1LCAweDhERUYsIDB4OERFRiwgMHgwQTVFLA0KLSAgICAweDhERjAsIDB4OERGMiwgMHg0QzE3LCAweDhERjMsIDB4OERGMywgMHgwRTRCLCAweDhERjQsIDB4OERGNCwgMHg0QzFBLA0KLSAgICAweDhERjUsIDB4OERGNSwgMHgwODZDLCAweDhERjYsIDB4OERGNiwgMHg0QzFCLCAweDhERjcsIDB4OERGOCwgMHgxRDJBLA0KLSAgICAweDhERjksIDB4OERGOSwgMHgxRDJELCAweDhERkEsIDB4OERGQSwgMHgwNjI0LCAweDhERkIsIDB4OERGQiwgMHgxRDJFLA0KLSAgICAweDhERkMsIDB4OERGQywgMHg0QzFDLCAweDhERkQsIDB4OERGRCwgMHgxRDMxLCAweDhERkUsIDB4OERGRiwgMHg0QzFELA0KLSAgICAweDhFMDAsIDB4OEUwNCwgMHg0QzFGLCAweDhFMDUsIDB4OEUwNSwgMHgxRDE5LCAweDhFMDYsIDB4OEUwOCwgMHg0QzI0LA0KLSAgICAweDhFMDksIDB4OEUwOSwgMHgxRDMwLCAweDhFMEEsIDB4OEUwQSwgMHgxMEEwLCAweDhFMEIsIDB4OEUwQiwgMHg0QzI3LA0KLSAgICAweDhFMEMsIDB4OEUwQywgMHgwNTExLCAweDhFMEQsIDB4OEUwRSwgMHg0QzI4LCAweDhFMEYsIDB4OEUwRiwgMHgwREY3LA0KLSAgICAweDhFMTAsIDB4OEUxMCwgMHgxRjk0LCAweDhFMTEsIDB4OEUxMywgMHg0QzJBLCAweDhFMTQsIDB4OEUxNCwgMHgxRDMyLA0KLSAgICAweDhFMTUsIDB4OEUxQywgMHg0QzJELCAweDhFMUQsIDB4OEUxRCwgMHgxRDMzLCAweDhFMUUsIDB4OEUxRSwgMHgwOTEwLA0KLSAgICAweDhFMUYsIDB4OEUxRiwgMHgxRDM0LCAweDhFMjAsIDB4OEUyMSwgMHg0QzM1LCAweDhFMjIsIDB4OEUyMiwgMHgwRTMyLA0KLSAgICAweDhFMjMsIDB4OEUyMywgMHgxRDM3LCAweDhFMjQsIDB4OEUyOCwgMHg0QzM3LCAweDhFMjksIDB4OEUyOSwgMHgwNDhGLA0KLSAgICAweDhFMkEsIDB4OEUyQSwgMHgxMjM2LCAweDhFMkIsIDB4OEUyQiwgMHg0QzNDLCAweDhFMkMsIDB4OEUyQywgMHgxRDM1LA0KLSAgICAweDhFMkQsIDB4OEUyRCwgMHg0QzNELCAweDhFMkUsIDB4OEUyRSwgMHgxRDM2LCAweDhFMkYsIDB4OEUyRiwgMHgxRDM4LA0KLSAgICAweDhFMzAsIDB4OEUzMCwgMHg0QzNFLCAweDhFMzEsIDB4OEUzMSwgMHgxRDNFLCAweDhFMzIsIDB4OEUzMywgMHg0QzNGLA0KLSAgICAweDhFMzQsIDB4OEUzNCwgMHgyMjMwLCAweDhFMzUsIDB4OEUzNSwgMHgxRDNDLCAweDhFMzYsIDB4OEUzOCwgMHg0QzQxLA0KLSAgICAweDhFMzksIDB4OEUzOSwgMHgxRDNCLCAweDhFM0EsIDB4OEUzQSwgMHgxRDM5LCAweDhFM0IsIDB4OEUzQywgMHg0QzQ0LA0KLSAgICAweDhFM0QsIDB4OEUzRCwgMHgxRDNELCAweDhFM0UsIDB4OEUzRiwgMHg0QzQ2LCAweDhFNDAsIDB4OEU0MCwgMHgxRDNBLA0KLSAgICAweDhFNDEsIDB4OEU0MiwgMHgxRDQwLCAweDhFNDMsIDB4OEU0MywgMHg0QzQ4LCAweDhFNDQsIDB4OEU0NCwgMHgwRTM2LA0KLSAgICAweDhFNDUsIDB4OEU0NiwgMHg0QzQ5LCAweDhFNDcsIDB4OEU0NywgMHgxNzNCLCAweDhFNDgsIDB4OEU0OCwgMHgwNTk5LA0KLSAgICAweDhFNDksIDB4OEU0OSwgMHgxRDNGLCAweDhFNEEsIDB4OEU0QSwgMHgxRDQ0LCAweDhFNEIsIDB4OEU0QiwgMHgwREY2LA0KLSAgICAweDhFNEMsIDB4OEU0QywgMHgyNUZELCAweDhFNEQsIDB4OEU1MCwgMHg0QzRCLCAweDhFNTEsIDB4OEU1MiwgMHgxRDQyLA0KLSAgICAweDhFNTMsIDB4OEU1NCwgMHg0QzRGLCAweDhFNTUsIDB4OEU1NSwgMHgyNjAwLCAweDhFNTYsIDB4OEU1OCwgMHg0QzUxLA0KLSAgICAweDhFNTksIDB4OEU1OSwgMHgxRDFBLCAweDhFNUEsIDB4OEU2MiwgMHg0QzU0LCAweDhFNjMsIDB4OEU2MywgMHgyNjA2LA0KLSAgICAweDhFNjQsIDB4OEU2NSwgMHg0QzVELCAweDhFNjYsIDB4OEU2NiwgMHgwNDJELCAweDhFNjcsIDB4OEU2OCwgMHg0QzVGLA0KLSAgICAweDhFNjksIDB4OEU2OSwgMHgxRDFCLCAweDhFNkEsIDB4OEU2QiwgMHg0QzYxLCAweDhFNkMsIDB4OEU2QywgMHgwNUE2LA0KLSAgICAweDhFNkQsIDB4OEU2RCwgMHgwNEFCLCAweDhFNkUsIDB4OEU2RSwgMHg0QzYzLCAweDhFNkYsIDB4OEU2RiwgMHgxRDQ4LA0KLSAgICAweDhFNzAsIDB4OEU3MCwgMHgxRDQ1LCAweDhFNzEsIDB4OEU3MSwgMHg0QzY0LCAweDhFNzIsIDB4OEU3MiwgMHgwNjE2LA0KLSAgICAweDhFNzMsIDB4OEU3MywgMHg0QzY1LCAweDhFNzQsIDB4OEU3NCwgMHgxRDQ5LCAweDhFNzUsIDB4OEU3NSwgMHg0QzY2LA0KLSAgICAweDhFNzYsIDB4OEU3NiwgMHgxRDQ2LCAweDhFNzcsIDB4OEU3OSwgMHg0QzY3LCAweDhFN0EsIDB4OEU3QSwgMHgyNUZGLA0KLSAgICAweDhFN0IsIDB4OEU3QiwgMHg0QzZBLCAweDhFN0MsIDB4OEU3QywgMHgxRDQ3LCAweDhFN0QsIDB4OEU3RSwgMHg0QzZCLA0KLSAgICAweDhFN0YsIDB4OEU3RiwgMHgwNTVELCAweDhFODAsIDB4OEU4MCwgMHg0QzZELCAweDhFODEsIDB4OEU4MSwgMHgxMTJELA0KLSAgICAweDhFODIsIDB4OEU4NCwgMHg0QzZFLCAweDhFODUsIDB4OEU4NSwgMHgxRDRBLCAweDhFODYsIDB4OEU4NiwgMHg0QzcxLA0KLSAgICAweDhFODcsIDB4OEU4NywgMHgwNTFFLCAweDhFODgsIDB4OEU4OCwgMHg0QzcyLCAweDhFODksIDB4OEU4OSwgMHgyNUZDLA0KLSAgICAweDhFOEEsIDB4OEU4QSwgMHgxRThDLCAweDhFOEIsIDB4OEU4QiwgMHgyNjAyLCAweDhFOEMsIDB4OEU4QywgMHg0QzczLA0KLSAgICAweDhFOEQsIDB4OEU4RCwgMHgyMjRELCAweDhFOEUsIDB4OEU4RSwgMHg0Qzc0LCAweDhFOEYsIDB4OEU4RiwgMHgxRDRCLA0KLSAgICAweDhFOTAsIDB4OEU5MCwgMHgxRDRELCAweDhFOTEsIDB4OEU5MSwgMHgyNjA0LCAweDhFOTIsIDB4OEU5MiwgMHgyNUZFLA0KLSAgICAweDhFOTMsIDB4OEU5MywgMHgyNjAzLCAweDhFOTQsIDB4OEU5NCwgMHgxRDRDLCAweDhFOTUsIDB4OEU5OSwgMHg0Qzc1LA0KLSAgICAweDhFOUEsIDB4OEU5QSwgMHgyNjAxLCAweDhFOUIsIDB4OEU5QiwgMHg0QzdBLCAweDhFOUMsIDB4OEU5QywgMHgxRDRFLA0KLSAgICAweDhFOUQsIDB4OEU5RCwgMHg0QzdCLCAweDhFOUUsIDB4OEU5RSwgMHgxRDRGLCAweDhFOUYsIDB4OEVBMCwgMHg0QzdDLA0KLSAgICAweDhFQTEsIDB4OEVBMSwgMHgyNjA1LCAweDhFQTIsIDB4OEVBNCwgMHg0QzdFLCAweDhFQTUsIDB4OEVBNSwgMHgxRUEzLA0KLSAgICAweDhFQTYsIDB4OEVBNiwgMHgyNjA4LCAweDhFQTcsIDB4OEVBOSwgMHg0QzgxLCAweDhFQUEsIDB4OEVBQSwgMHgyNjA3LA0KLSAgICAweDhFQUIsIDB4OEVBQiwgMHgwRDI2LCAweDhFQUMsIDB4OEVBQywgMHgwNzAzLCAweDhFQUQsIDB4OEVBRSwgMHg0Qzg0LA0KLSAgICAweDhFQUYsIDB4OEVBRiwgMHgwQzc4LCAweDhFQjAsIDB4OEVCMSwgMHg0Qzg2LCAweDhFQjIsIDB4OEVCMiwgMHgwNjIyLA0KLSAgICAweDhFQjMsIDB4OEVCOSwgMHg0Qzg4LCAweDhFQkEsIDB4OEVCQSwgMHgwRTFDLCAweDhFQkIsIDB4OEVCRiwgMHg0QzhGLA0KLSAgICAweDhFQzAsIDB4OEVDMCwgMHgyMEYwLCAweDhFQzEsIDB4OEVDOSwgMHg0Qzk0LCAweDhFQ0EsIDB4OEVDQSwgMHgxRTdCLA0KLSAgICAweDhFQ0IsIDB4OEVDQiwgMHgyMjY3LCAweDhFQ0MsIDB4OEVDQywgMHgxRjM2LCAweDhFQ0QsIDB4OEVDRCwgMHgxRkQ2LA0KLSAgICAweDhFQ0UsIDB4OEVDRSwgMHgxOEY4LCAweDhFQ0YsIDB4OEVEMSwgMHg0QzlELCAweDhFRDIsIDB4OEVEMiwgMHgyMUUwLA0KLSAgICAweDhFRDMsIDB4OEVEMywgMHg0Q0EwLCAweDhFRDQsIDB4OEVENCwgMHgyNDhDLCAweDhFRDUsIDB4OEVEQSwgMHg0Q0ExLA0KLSAgICAweDhFREIsIDB4OEVEQiwgMHgyNDhELCAweDhFREMsIDB4OEVERSwgMHg0Q0E3LCAweDhFREYsIDB4OEVERiwgMHgyMTAyLA0KLSAgICAweDhFRTAsIDB4OEVFMywgMHg0Q0FBLCAweDhFRTQsIDB4OEVFNCwgMHgyNDk0LCAweDhFRTUsIDB4OEVFQSwgMHg0Q0FFLA0KLSAgICAweDhFRUIsIDB4OEVFQiwgMHgyNDkzLCAweDhFRUMsIDB4OEVGMSwgMHg0Q0I0LCAweDhFRjIsIDB4OEVGMiwgMHgyNDhFLA0KLSAgICAweDhFRjMsIDB4OEVGNywgMHg0Q0JBLCAweDhFRjgsIDB4OEVGOCwgMHgyMjk5LCAweDhFRjksIDB4OEVGOSwgMHgyNDkxLA0KLSAgICAweDhFRkEsIDB4OEVGQSwgMHgyNDk2LCAweDhFRkIsIDB4OEVGQiwgMHgyNDhGLCAweDhFRkMsIDB4OEVGQywgMHgyNDkyLA0KLSAgICAweDhFRkQsIDB4OEVGRCwgMHg0Q0JGLCAweDhFRkUsIDB4OEVGRSwgMHgyNDk3LCAweDhFRkYsIDB4OEVGRiwgMHg0Q0MwLA0KLSAgICAweDhGMDAsIDB4OEYwMiwgMHg0Q0MxLCAweDhGMDMsIDB4OEYwMywgMHgxRkIxLCAweDhGMDQsIDB4OEYwNCwgMHg0Q0M0LA0KLSAgICAweDhGMDUsIDB4OEYwNSwgMHgyNDlBLCAweDhGMDYsIDB4OEYwNiwgMHg0Q0M1LCAweDhGMDcsIDB4OEYwNywgMHgyNDk5LA0KLSAgICAweDhGMDgsIDB4OEYwOCwgMHg0Q0M2LCAweDhGMDksIDB4OEYwOSwgMHgyMjU4LCAweDhGMEEsIDB4OEYwQSwgMHgyNDk4LA0KLSAgICAweDhGMEIsIDB4OEYxMSwgMHg0Q0M3LCAweDhGMTIsIDB4OEYxMiwgMHgyNDlCLCAweDhGMTMsIDB4OEYxMywgMHg0Q0NFLA0KLSAgICAweDhGMTQsIDB4OEYxNCwgMHgxRjA5LCAweDhGMTUsIDB4OEYxNSwgMHgyMEU2LCAweDhGMTYsIDB4OEYxQSwgMHg0Q0NGLA0KLSAgICAweDhGMUIsIDB4OEYxQiwgMHgyMDI2LCAweDhGMUMsIDB4OEYxQywgMHgyNDlGLCAweDhGMUQsIDB4OEYxRCwgMHgxRjU5LA0KLSAgICAweDhGMUUsIDB4OEYxRiwgMHgyNDlELCAweDhGMjAsIDB4OEYyNCwgMHg0Q0Q0LCAweDhGMjUsIDB4OEYyNSwgMHgxRjNCLA0KLSAgICAweDhGMjYsIDB4OEYyNiwgMHgyNDlDLCAweDhGMjcsIDB4OEYyOCwgMHg0Q0Q5LCAweDhGMjksIDB4OEYyOSwgMHgxRTNBLA0KLSAgICAweDhGMkEsIDB4OEYyQSwgMHgyMDVCLCAweDhGMkIsIDB4OEYyRSwgMHg0Q0RCLCAweDhGMkYsIDB4OEYyRiwgMHgxRjcwLA0KLSAgICAweDhGMzAsIDB4OEYzMiwgMHg0Q0RGLCAweDhGMzMsIDB4OEYzMywgMHgyNEEwLCAweDhGMzQsIDB4OEYzNywgMHg0Q0UyLA0KLSAgICAweDhGMzgsIDB4OEYzOCwgMHgyMTNCLCAweDhGMzksIDB4OEYzQSwgMHg0Q0U2LCAweDhGM0IsIDB4OEYzQiwgMHgxRjA3LA0KLSAgICAweDhGM0MsIDB4OEYzRCwgMHg0Q0U4LCAweDhGM0UsIDB4OEYzRSwgMHgyMjcwLCAweDhGM0YsIDB4OEYzRiwgMHgyMjM3LA0KLSAgICAweDhGNDAsIDB4OEY0MSwgMHg0Q0VBLCAweDhGNDIsIDB4OEY0MiwgMHgyNEQyLCAweDhGNDMsIDB4OEY0MywgMHg0Q0VDLA0KLSAgICAweDhGNDQsIDB4OEY0NCwgMHgyMUIzLCAweDhGNDUsIDB4OEY0NSwgMHgyMjQ1LCAweDhGNDYsIDB4OEY0NiwgMHgyNEExLA0KLSAgICAweDhGNDcsIDB4OEY0OCwgMHg0Q0VELCAweDhGNDksIDB4OEY0OSwgMHgyMkE4LCAweDhGNEEsIDB4OEY0QywgMHg0Q0VGLA0KLSAgICAweDhGNEQsIDB4OEY0RCwgMHgyMjdDLCAweDhGNEUsIDB4OEY0RSwgMHgxRkIwLCAweDhGNEYsIDB4OEY1MywgMHg0Q0YyLA0KLSAgICAweDhGNTQsIDB4OEY1NCwgMHgyNEEyLCAweDhGNTUsIDB4OEY1RSwgMHg0Q0Y3LCAweDhGNUYsIDB4OEY1RiwgMHgxRjQ2LA0KLSAgICAweDhGNjAsIDB4OEY2MCwgMHg0RDAxLCAweDhGNjEsIDB4OEY2MSwgMHgyMzgwLCAweDhGNjIsIDB4OEY2MiwgMHgyNDk1LA0KLSAgICAweDhGNjMsIDB4OEY2MywgMHg0RDAyLCAweDhGNjQsIDB4OEY2NCwgMHgyNDkwLCAweDhGNjUsIDB4OEY2NSwgMHg0RDAzLA0KLSAgICAweDhGNjYsIDB4OEY2NiwgMHgwNERBLCAweDhGNjcsIDB4OEY2NywgMHgxMTQxLCAweDhGNjgsIDB4OEY2OCwgMHgwNzQ1LA0KLSAgICAweDhGNjksIDB4OEY2OSwgMHgwRkM0LCAweDhGNkEsIDB4OEY2QSwgMHg0RDA0LCAweDhGNkIsIDB4OEY2QiwgMHgxOEUxLA0KLSAgICAweDhGNkMsIDB4OEY2QywgMHgxMjA3LCAweDhGNkQsIDB4OEY2RCwgMHgxOEUyLCAweDhGNkUsIDB4OEY2RSwgMHgwQTdELA0KLSAgICAweDhGNkYsIDB4OEY2RiwgMHgwQ0M4LCAweDhGNzAsIDB4OEY3MCwgMHgwNzlCLCAweDhGNzEsIDB4OEY3MywgMHgxOEUzLA0KLSAgICAweDhGNzQsIDB4OEY3NCwgMHgxMUUwLCAweDhGNzUsIDB4OEY3NiwgMHgxOEU2LCAweDhGNzcsIDB4OEY3NywgMHgxOEU5LA0KLSAgICAweDhGNzgsIDB4OEY3OCwgMHgxOEU4LCAweDhGNzksIDB4OEY3QSwgMHgxOEVBLCAweDhGN0IsIDB4OEY3QiwgMHgwQzVFLA0KLSAgICAweDhGN0MsIDB4OEY3QywgMHgxOEVDLCAweDhGN0QsIDB4OEY3RCwgMHgxMTFCLCAweDhGN0UsIDB4OEY3RSwgMHgxOEVELA0KLSAgICAweDhGN0YsIDB4OEY3RiwgMHgwODlGLCAweDhGODAsIDB4OEY4MCwgMHg0RDA1LCAweDhGODEsIDB4OEY4MiwgMHgxOEVFLA0KLSAgICAweDhGODMsIDB4OEY4MywgMHgwOEEwLCAweDhGODQsIDB4OEY4NCwgMHgxOEYwLCAweDhGODUsIDB4OEY4NSwgMHgwNkEzLA0KLSAgICAweDhGODYsIDB4OEY4NiwgMHgwQTA3LCAweDhGODcsIDB4OEY4NywgMHgxOEYxLCAweDhGODgsIDB4OEY4OCwgMHgwNDFCLA0KLSAgICAweDhGODksIDB4OEY4OSwgMHgwN0U5LCAweDhGOEEsIDB4OEY4QSwgMHgwNzRFLCAweDhGOEIsIDB4OEY4QiwgMHgxOEYyLA0KLSAgICAweDhGOEMsIDB4OEY4QywgMHg0RDA2LCAweDhGOEQsIDB4OEY4RiwgMHgxOEYzLCAweDhGOTAsIDB4OEY5MCwgMHgwNjk1LA0KLSAgICAweDhGOTEsIDB4OEY5MSwgMHgwODIwLCAweDhGOTIsIDB4OEY5MiwgMHg0RDA3LCAweDhGOTMsIDB4OEY5MywgMHgwRDdCLA0KLSAgICAweDhGOTQsIDB4OEY5NCwgMHgxNTc0LCAweDhGOTUsIDB4OEY5NSwgMHgxMEYyLCAweDhGOTYsIDB4OEY5NiwgMHgwRjJBLA0KLSAgICAweDhGOTcsIDB4OEY5NywgMHgxMTU4LCAweDhGOTgsIDB4OEY5OCwgMHgxOEY2LCAweDhGOTksIDB4OEY5OSwgMHgxMTdGLA0KLSAgICAweDhGOUEsIDB4OEY5QSwgMHgxOEY3LCAweDhGOUIsIDB4OEY5QiwgMHgwRjhDLCAweDhGOUMsIDB4OEY5QywgMHgwNzE1LA0KLSAgICAweDhGOUQsIDB4OEY5RCwgMHg0RDA4LCAweDhGOUUsIDB4OEY5RSwgMHgwNTRBLCAweDhGOUYsIDB4OEY5RiwgMHgwNDQyLA0KLSAgICAweDhGQTAsIDB4OEZBMiwgMHg0RDA5LCAweDhGQTMsIDB4OEZBMywgMHgwOTlDLCAweDhGQTQsIDB4OEZBNSwgMHg0RDBDLA0KLSAgICAweDhGQTYsIDB4OEZBNiwgMHgxRTMwLCAweDhGQTcsIDB4OEZBNywgMHg0RDBFLCAweDhGQTgsIDB4OEZBOSwgMHgwNDRGLA0KLSAgICAweDhGQUEsIDB4OEZBQSwgMHg0RDBGLCAweDhGQUIsIDB4OEZBQiwgMHgwNDUxLCAweDhGQUMsIDB4OEZBQywgMHg0RDEwLA0KLSAgICAweDhGQUQsIDB4OEZBRCwgMHgxRTlELCAweDhGQUUsIDB4OEZBRSwgMHgxRTRCLCAweDhGQUYsIDB4OEZBRiwgMHgxRTRBLA0KLSAgICAweDhGQjAsIDB4OEZCMCwgMHgwNEUyLCAweDhGQjEsIDB4OEZCMSwgMHgwQ0MzLCAweDhGQjIsIDB4OEZCMiwgMHgyMEFBLA0KLSAgICAweDhGQjMsIDB4OEZCNSwgMHg0RDExLCAweDhGQjYsIDB4OEZCNiwgMHgxNzNELCAweDhGQjcsIDB4OEZCOCwgMHg0RDE0LA0KLSAgICAweDhGQjksIDB4OEZCOSwgMHgwNDQ4LCAweDhGQkEsIDB4OEZCQywgMHg0RDE2LCAweDhGQkQsIDB4OEZCRCwgMHgwQTEyLA0KLSAgICAweDhGQkUsIDB4OEZCRSwgMHgwNTcyLCAweDhGQkYsIDB4OEZDMCwgMHg0RDE5LCAweDhGQzEsIDB4OEZDMSwgMHgwQzI1LA0KLSAgICAweDhGQzIsIDB4OEZDMiwgMHgxMEJELCAweDhGQzMsIDB4OEZDMywgMHg0RDFCLCAweDhGQzQsIDB4OEZDNCwgMHgwQzE4LA0KLSAgICAweDhGQzUsIDB4OEZDNSwgMHgwRkUxLCAweDhGQzYsIDB4OEZDNiwgMHg0RDFDLCAweDhGQzcsIDB4OEZDNywgMHgwNzU2LA0KLSAgICAweDhGQzgsIDB4OEZDOCwgMHgwQTlDLCAweDhGQzksIDB4OEZDRCwgMHg0RDFELCAweDhGQ0UsIDB4OEZDRSwgMHgxMDkyLA0KLSAgICAweDhGQ0YsIDB4OEZDRiwgMHg0RDIyLCAweDhGRDAsIDB4OEZEMCwgMHgxMTBFLCAweDhGRDEsIDB4OEZEMSwgMHgwOENELA0KLSAgICAweDhGRDIsIDB4OEZEMiwgMHg0RDIzLCAweDhGRDMsIDB4OEZEMywgMHgxNzNFLCAweDhGRDQsIDB4OEZENCwgMHgwNjUyLA0KLSAgICAweDhGRDUsIDB4OEZENSwgMHgxNzNGLCAweDhGRDYsIDB4OEZENywgMHg0RDI0LCAweDhGRDgsIDB4OEZEOCwgMHgwN0NFLA0KLSAgICAweDhGRDksIDB4OEZEOSwgMHgxMTgzLCAweDhGREEsIDB4OEZEQSwgMHg0RDI2LCAweDhGREIsIDB4OEZEQiwgMHgwOEM5LA0KLSAgICAweDhGREMsIDB4OEZEQywgMHgxMEY5LCAweDhGREQsIDB4OEZERCwgMHgwRUI0LCAweDhGREUsIDB4OEZERSwgMHgwOUY1LA0KLSAgICAweDhGREYsIDB4OEZERiwgMHgwNEZFLCAweDhGRTAsIDB4OEZFMSwgMHg0RDI3LCAweDhGRTIsIDB4OEZFMiwgMHgwRTQ5LA0KLSAgICAweDhGRTMsIDB4OEZFMywgMHg0RDI5LCAweDhGRTQsIDB4OEZFNCwgMHgxNzQyLCAweDhGRTUsIDB4OEZFNSwgMHgxNzQwLA0KLSAgICAweDhGRTYsIDB4OEZFNiwgMHgxNzQ0LCAweDhGRTcsIDB4OEZFNywgMHg0RDJBLCAweDhGRTgsIDB4OEZFOCwgMHgxNzQ2LA0KLSAgICAweDhGRTksIDB4OEZFOSwgMHgxNzQzLCAweDhGRUEsIDB4OEZFQSwgMHgwNUIwLCAweDhGRUIsIDB4OEZFQiwgMHgwQkU3LA0KLSAgICAweDhGRUMsIDB4OEZFQywgMHg0RDJCLCAweDhGRUQsIDB4OEZFRCwgMHgwNURELCAweDhGRUUsIDB4OEZFRSwgMHgxNzQxLA0KLSAgICAweDhGRUYsIDB4OEZFRiwgMHg0RDJDLCAweDhGRjAsIDB4OEZGMCwgMHgwRDhELCAweDhGRjEsIDB4OEZGMiwgMHg0RDJELA0KLSAgICAweDhGRjMsIDB4OEZGMywgMHgxNzQ1LCAweDhGRjQsIDB4OEZGNCwgMHgyNjdCLCAweDhGRjUsIDB4OEZGNiwgMHg0RDJGLA0KLSAgICAweDhGRjcsIDB4OEZGNywgMHgwQUQ5LCAweDhGRjgsIDB4OEZGOCwgMHgwNDJFLCAweDhGRjksIDB4OEZGOSwgMHgwODE2LA0KLSAgICAweDhGRkEsIDB4OEZGQywgMHg0RDMxLCAweDhGRkQsIDB4OEZGRCwgMHgxMjE0LCAweDhGRkUsIDB4OEZGRiwgMHg0RDM0LA0KLSAgICAweDkwMDAsIDB4OTAwMCwgMHgwRTdDLCAweDkwMDEsIDB4OTAwMSwgMHgwREMyLCAweDkwMDIsIDB4OTAwMiwgMHgwRDYxLA0KLSAgICAweDkwMDMsIDB4OTAwMywgMHgwRTI2LCAweDkwMDQsIDB4OTAwNCwgMHgxNzQ4LCAweDkwMDUsIDB4OTAwNSwgMHgxNzQ3LA0KLSAgICAweDkwMDYsIDB4OTAwNiwgMHgwQjQ5LCAweDkwMDcsIDB4OTAwOCwgMHg0RDM2LCAweDkwMDksIDB4OTAwOSwgMHgwRkNBLA0KLSAgICAweDkwMEEsIDB4OTAwQSwgMHgwRkUwLCAweDkwMEIsIDB4OTAwQiwgMHgxNzQ5LCAweDkwMEMsIDB4OTAwQywgMHg0RDM4LA0KLSAgICAweDkwMEQsIDB4OTAwRCwgMHgxNzRDLCAweDkwMEUsIDB4OTAwRSwgMHg0RDM5LCAweDkwMEYsIDB4OTAwRiwgMHgwRTY5LA0KLSAgICAweDkwMTAsIDB4OTAxMCwgMHgxMUVGLCAweDkwMTEsIDB4OTAxMSwgMHgxNzRCLCAweDkwMTIsIDB4OTAxMiwgMHgwNUJFLA0KLSAgICAweDkwMTMsIDB4OTAxMywgMHg0RDNBLCAweDkwMTQsIDB4OTAxNCwgMHgwRTZGLCAweDkwMTUsIDB4OTAxNSwgMHgyM0YyLA0KLSAgICAweDkwMTYsIDB4OTAxNiwgMHgxNzRELCAweDkwMTcsIDB4OTAxNywgMHgwNUY5LCAweDkwMTgsIDB4OTAxOCwgMHg0RDNCLA0KLSAgICAweDkwMTksIDB4OTAxOSwgMHgyMjdFLCAweDkwMUEsIDB4OTAxQSwgMHgwRTU5LCAweDkwMUIsIDB4OTAxQiwgMHgwNzNELA0KLSAgICAweDkwMUMsIDB4OTAxQywgMHg0RDNDLCAweDkwMUQsIDB4OTAxRCwgMHgwRDVDLCAweDkwMUUsIDB4OTAxRSwgMHgwNEY2LA0KLSAgICAweDkwMUYsIDB4OTAxRiwgMHgwRENFLCAweDkwMjAsIDB4OTAyMCwgMHgxMTJGLCAweDkwMjEsIDB4OTAyMSwgMHgxNzRFLA0KLSAgICAweDkwMjIsIDB4OTAyMiwgMHgwNjg3LCAweDkwMjMsIDB4OTAyMywgMHgyMDE5LCAweDkwMjQsIDB4OTAyNSwgMHg0RDNELA0KLSAgICAweDkwMjYsIDB4OTAyNiwgMHgxNzRBLCAweDkwMjcsIDB4OTAyQywgMHg0RDNGLCAweDkwMkQsIDB4OTAyRCwgMHgxNzUxLA0KLSAgICAweDkwMkUsIDB4OTAyRSwgMHgwNTgxLCAweDkwMkYsIDB4OTAyRiwgMHgxNzUyLCAweDkwMzAsIDB4OTAzMSwgMHg0RDQ1LA0KLSAgICAweDkwMzIsIDB4OTAzMiwgMHgxRkJCLCAweDkwMzMsIDB4OTAzNCwgMHg0RDQ3LCAweDkwMzUsIDB4OTAzNiwgMHgxNzRGLA0KLSAgICAweDkwMzcsIDB4OTAzNywgMHg0RDQ5LCAweDkwMzgsIDB4OTAzOCwgMHgxMDY0LCAweDkwMzksIDB4OTAzQSwgMHg0RDRBLA0KLSAgICAweDkwM0IsIDB4OTAzQiwgMHgwQTg2LCAweDkwM0MsIDB4OTAzQywgMHgwNDJGLCAweDkwM0QsIDB4OTAzRCwgMHg0RDRDLA0KLSAgICAweDkwM0UsIDB4OTAzRSwgMHgxMEM3LCAweDkwM0YsIDB4OTA0MCwgMHg0RDRELCAweDkwNDEsIDB4OTA0MSwgMHgwNjFDLA0KLSAgICAweDkwNDIsIDB4OTA0MiwgMHgwREUxLCAweDkwNDMsIDB4OTA0MywgMHg0RDRGLCAweDkwNDQsIDB4OTA0NCwgMHgxNzUzLA0KLSAgICAweDkwNDUsIDB4OTA0NiwgMHg0RDUwLCAweDkwNDcsIDB4OTA0NywgMHgxMERCLCAweDkwNDgsIDB4OTA0QSwgMHg0RDUyLA0KLSAgICAweDkwNEIsIDB4OTA0QiwgMHgyMjUzLCAweDkwNEMsIDB4OTA0QywgMHg0RDU1LCAweDkwNEQsIDB4OTA0RCwgMHgwNDUyLA0KLSAgICAweDkwNEUsIDB4OTA0RSwgMHgxRjNFLCAweDkwNEYsIDB4OTA0RiwgMHgwNjMzLCAweDkwNTAsIDB4OTA1MCwgMHgxNzU2LA0KLSAgICAweDkwNTEsIDB4OTA1MiwgMHgxNzU0LCAweDkwNTMsIDB4OTA1MywgMHgwNUExLCAweDkwNTQsIDB4OTA1NCwgMHgxRUE2LA0KLSAgICAweDkwNTUsIDB4OTA1NSwgMHgyMThFLCAweDkwNTYsIDB4OTA1NiwgMHg0RDU2LCAweDkwNTcsIDB4OTA1NywgMHgxMDRDLA0KLSAgICAweDkwNTgsIDB4OTA1OCwgMHgxNzU4LCAweDkwNTksIDB4OTA1QSwgMHg0RDU3LCAweDkwNUIsIDB4OTA1QiwgMHgxNzVBLA0KLSAgICAweDkwNUMsIDB4OTA1QywgMHgyMUVDLCAweDkwNUQsIDB4OTA1RCwgMHg0RDU5LCAweDkwNUUsIDB4OTA1RSwgMHgxRUJFLA0KLSAgICAweDkwNUYsIDB4OTA1RiwgMHg0RDVBLCAweDkwNjAsIDB4OTA2MCwgMHgyMjRBLCAweDkwNjEsIDB4OTA2MSwgMHg0RDVCLA0KLSAgICAweDkwNjIsIDB4OTA2MiwgMHgxNzU5LCAweDkwNjMsIDB4OTA2MywgMHgwQzJGLCAweDkwNjQsIDB4OTA2NCwgMHg0RDVDLA0KLSAgICAweDkwNjUsIDB4OTA2NSwgMHgxMDJBLCAweDkwNjYsIDB4OTA2NywgMHg0RDVELCAweDkwNjgsIDB4OTA2OCwgMHgxNzU3LA0KLSAgICAweDkwNjksIDB4OTA2OSwgMHgyMTMzLCAweDkwNkEsIDB4OTA2QywgMHg0RDVGLCAweDkwNkQsIDB4OTA2RCwgMHgxMTI1LA0KLSAgICAweDkwNkUsIDB4OTA2RSwgMHgxMTdCLCAweDkwNkYsIDB4OTA3MSwgMHg0RDYyLCAweDkwNzIsIDB4OTA3MiwgMHgxRTg0LA0KLSAgICAweDkwNzMsIDB4OTA3MywgMHg0RDY1LCAweDkwNzQsIDB4OTA3NCwgMHgxNzVDLCAweDkwNzUsIDB4OTA3NSwgMHgxMjRFLA0KLSAgICAweDkwNzYsIDB4OTA3NiwgMHg0RDY2LCAweDkwNzcsIDB4OTA3NywgMHgyMENGLCAweDkwNzgsIDB4OTA3OCwgMHgyMUUyLA0KLSAgICAweDkwNzksIDB4OTA3OSwgMHg0RDY3LCAweDkwN0EsIDB4OTA3QSwgMHgyMjBGLCAweDkwN0IsIDB4OTA3QiwgMHg0RDY4LA0KLSAgICAweDkwN0MsIDB4OTA3QywgMHgyMDI5LCAweDkwN0QsIDB4OTA3RCwgMHgxNzVELCAweDkwN0UsIDB4OTA3RSwgMHg0RDY5LA0KLSAgICAweDkwN0YsIDB4OTA3RiwgMHgwNDQ1LCAweDkwODAsIDB4OTA4MCwgMHgxMDI0LCAweDkwODEsIDB4OTA4MSwgMHgyMDczLA0KLSAgICAweDkwODIsIDB4OTA4MiwgMHgxNzVFLCAweDkwODMsIDB4OTA4MywgMHgxNzYwLCAweDkwODQsIDB4OTA4NCwgMHgxRjU1LA0KLSAgICAweDkwODUsIDB4OTA4NiwgMHg0RDZBLCAweDkwODcsIDB4OTA4NywgMHgyM0YxLCAweDkwODgsIDB4OTA4OCwgMHgxNzVGLA0KLSAgICAweDkwODksIDB4OTA4OSwgMHg0RDZDLCAweDkwOEEsIDB4OTA4QSwgMHgxRTQ2LCAweDkwOEIsIDB4OTA4QiwgMHgxNzYxLA0KLSAgICAweDkwOEMsIDB4OTA4RSwgMHg0RDZELCAweDkwOEYsIDB4OTA4RiwgMHgyMDYzLCAweDkwOTAsIDB4OTA5MCwgMHgyM0YzLA0KLSAgICAweDkwOTEsIDB4OTA5MSwgMHgxMDVGLCAweDkwOTIsIDB4OTA5MiwgMHg0RDcwLCAweDkwOTMsIDB4OTA5MywgMHgwNUFDLA0KLSAgICAweDkwOTQsIDB4OTA5NCwgMHg0RDcxLCAweDkwOTUsIDB4OTA5NSwgMHgxODE3LCAweDkwOTYsIDB4OTA5NiwgMHg0RDcyLA0KLSAgICAweDkwOTcsIDB4OTA5NywgMHgxMzY3LCAweDkwOTgsIDB4OTA5OCwgMHg0RDczLCAweDkwOTksIDB4OTA5OSwgMHgxMzZBLA0KLSAgICAweDkwOUEsIDB4OTA5QSwgMHg0RDc0LCAweDkwOUIsIDB4OTA5QiwgMHgxMzY4LCAweDkwOUMsIDB4OTA5QywgMHg0RDc1LA0KLSAgICAweDkwOUQsIDB4OTA5RCwgMHgxMzY5LCAweDkwOUUsIDB4OTBBMCwgMHg0RDc2LCAweDkwQTEsIDB4OTBBMSwgMHgxMzZDLA0KLSAgICAweDkwQTIsIDB4OTBBMiwgMHgwRjlBLCAweDkwQTMsIDB4OTBBMywgMHgwQjJBLCAweDkwQTQsIDB4OTBBNSwgMHg0RDc5LA0KLSAgICAweDkwQTYsIDB4OTBBNiwgMHgwM0Y5LCAweDkwQTcsIDB4OTBBOSwgMHg0RDdCLCAweDkwQUEsIDB4OTBBQSwgMHgwRjdCLA0KLSAgICAweDkwQUIsIDB4OTBBQiwgMHg0RDdFLCAweDkwQUMsIDB4OTBBQywgMHgxMzZCLCAweDkwQUQsIDB4OTBBRCwgMHg0RDdGLA0KLSAgICAweDkwQUUsIDB4OTBBRSwgMHgxMEFGLCAweDkwQUYsIDB4OTBBRiwgMHgwNzYxLCAweDkwQjAsIDB4OTBCMCwgMHgxMzcyLA0KLSAgICAweDkwQjEsIDB4OTBCMSwgMHgwQzZFLCAweDkwQjIsIDB4OTBCMiwgMHg0RDgwLCAweDkwQjMsIDB4OTBCMywgMHgxMzZFLA0KLSAgICAweDkwQjQsIDB4OTBCNCwgMHgxMzZELCAweDkwQjUsIDB4OTBCNSwgMHgwRDE0LCAweDkwQjYsIDB4OTBCNiwgMHgxMzZGLA0KLSAgICAweDkwQjcsIDB4OTBCNywgMHg0RDgxLCAweDkwQjgsIDB4OTBCOCwgMHgxMzcxLCAweDkwQjksIDB4OTBCOSwgMHgxMjNCLA0KLSAgICAweDkwQkEsIDB4OTBCQSwgMHgxMzcwLCAweDkwQkIsIDB4OTBCQiwgMHgwQTIzLCAweDkwQkMsIDB4OTBCRCwgMHg0RDgyLA0KLSAgICAweDkwQkUsIDB4OTBCRSwgMHgxMzc1LCAweDkwQkYsIDB4OTBDMCwgMHg0RDg0LCAweDkwQzEsIDB4OTBDMSwgMHgxMEQ5LA0KLSAgICAweDkwQzIsIDB4OTBDMywgMHg0RDg2LCAweDkwQzQsIDB4OTBDNCwgMHgxMzc3LCAweDkwQzUsIDB4OTBDNSwgMHgxMzc0LA0KLSAgICAweDkwQzYsIDB4OTBDNiwgMHg0RDg4LCAweDkwQzcsIDB4OTBDNywgMHgxMzc4LCAweDkwQzgsIDB4OTBDOSwgMHg0RDg5LA0KLSAgICAweDkwQ0EsIDB4OTBDQSwgMHgwODhELCAweDkwQ0IsIDB4OTBDRCwgMHg0RDhCLCAweDkwQ0UsIDB4OTBDRSwgMHgwOUI0LA0KLSAgICAweDkwQ0YsIDB4OTBDRiwgMHgxMzczLCAweDkwRDAsIDB4OTBEMCwgMHgxMzc2LCAweDkwRDEsIDB4OTBEMSwgMHgxMUEyLA0KLSAgICAweDkwRDIsIDB4OTBEMiwgMHg0RDhFLCAweDkwRDMsIDB4OTBEMywgMHgxMzc5LCAweDkwRDQsIDB4OTBENiwgMHg0RDhGLA0KLSAgICAweDkwRDcsIDB4OTBENywgMHgxMzdELCAweDkwRDgsIDB4OTBEQSwgMHg0RDkyLCAweDkwREIsIDB4OTBEQiwgMHgxMzdFLA0KLSAgICAweDkwREMsIDB4OTBEQywgMHgxMzdDLCAweDkwREQsIDB4OTBERCwgMHgwNzc5LCAweDkwREUsIDB4OTBERSwgMHg0RDk1LA0KLSAgICAweDkwREYsIDB4OTBERiwgMHgyMzFFLCAweDkwRTAsIDB4OTBFMCwgMHg0RDk2LCAweDkwRTEsIDB4OTBFMSwgMHgwOTMxLA0KLSAgICAweDkwRTIsIDB4OTBFMiwgMHgxMzdCLCAweDkwRTMsIDB4OTBFNSwgMHg0RDk3LCAweDkwRTYsIDB4OTBFNiwgMHgxMzdBLA0KLSAgICAweDkwRTcsIDB4OTBFNywgMHgxMTBBLCAweDkwRTgsIDB4OTBFOCwgMHgwNDg2LCAweDkwRTksIDB4OTBFQSwgMHg0RDlBLA0KLSAgICAweDkwRUIsIDB4OTBFQiwgMHgxMzdGLCAweDkwRUMsIDB4OTBFQywgMHg0RDlDLCAweDkwRUQsIDB4OTBFRCwgMHgwNzUyLA0KLSAgICAweDkwRUUsIDB4OTBFRSwgMHg0RDlELCAweDkwRUYsIDB4OTBFRiwgMHgxMzgwLCAweDkwRjAsIDB4OTBGMywgMHg0RDlFLA0KLSAgICAweDkwRjQsIDB4OTBGNCwgMHgwNEUwLCAweDkwRjUsIDB4OTBGNSwgMHgyMjMzLCAweDkwRjYsIDB4OTBGNywgMHg0REEyLA0KLSAgICAweDkwRjgsIDB4OTBGOCwgMHgwNTg3LCAweDkwRjksIDB4OTBGQywgMHg0REE0LCAweDkwRkQsIDB4OTBGRCwgMHgwNUZCLA0KLSAgICAweDkwRkUsIDB4OTBGRSwgMHgxMzgxLCAweDkwRkYsIDB4OTBGRiwgMHg0REE4LCAweDkxMDAsIDB4OTEwMSwgMHg0REE5LA0KLSAgICAweDkxMDIsIDB4OTEwMiwgMHgwNjM0LCAweDkxMDMsIDB4OTEwMywgMHg0REFCLCAweDkxMDQsIDB4OTEwNCwgMHgxMzgyLA0KLSAgICAweDkxMDUsIDB4OTEwNSwgMHg0REFDLCAweDkxMDYsIDB4OTEwNiwgMHgyMzIwLCAweDkxMDcsIDB4OTEwOCwgMHg0REFELA0KLSAgICAweDkxMDksIDB4OTEwOSwgMHgyMUM3LCAweDkxMEEsIDB4OTExMSwgMHg0REFGLCAweDkxMTIsIDB4OTExMiwgMHgyMkJDLA0KLSAgICAweDkxMTMsIDB4OTExMywgMHg0REI3LCAweDkxMTQsIDB4OTExNCwgMHgyMzFDLCAweDkxMTUsIDB4OTExNSwgMHg0REI4LA0KLSAgICAweDkxMTYsIDB4OTExNiwgMHgyMjUxLCAweDkxMTcsIDB4OTExOCwgMHg0REI5LCAweDkxMTksIDB4OTExOSwgMHgwNDMyLA0KLSAgICAweDkxMUEsIDB4OTExRCwgMHg0REJCLCAweDkxMUUsIDB4OTExRSwgMHgxMzg0LCAweDkxMUYsIDB4OTEyMSwgMHg0REJGLA0KLSAgICAweDkxMjIsIDB4OTEyMiwgMHgxMzgzLCAweDkxMjMsIDB4OTEyMywgMHgxMzg1LCAweDkxMjQsIDB4OTEyNiwgMHg0REMyLA0KLSAgICAweDkxMjcsIDB4OTEyNywgMHgxRUJCLCAweDkxMjgsIDB4OTEyQywgMHg0REM1LCAweDkxMkQsIDB4OTEyRCwgMHgyMjg3LA0KLSAgICAweDkxMkUsIDB4OTEyRSwgMHg0RENBLCAweDkxMkYsIDB4OTEyRiwgMHgxMzg3LCAweDkxMzAsIDB4OTEzMCwgMHgyMDJELA0KLSAgICAweDkxMzEsIDB4OTEzMSwgMHgxMzg2LCAweDkxMzIsIDB4OTEzMiwgMHgxRUFCLCAweDkxMzMsIDB4OTEzMywgMHg0RENCLA0KLSAgICAweDkxMzQsIDB4OTEzNCwgMHgyMzFELCAweDkxMzUsIDB4OTEzNSwgMHg0RENDLCAweDkxMzYsIDB4OTEzNiwgMHgyMzFGLA0KLSAgICAweDkxMzcsIDB4OTEzOCwgMHg0RENELCAweDkxMzksIDB4OTEzOSwgMHgxMzg4LCAweDkxM0EsIDB4OTEzQSwgMHgyMzFCLA0KLSAgICAweDkxM0IsIDB4OTE0MiwgMHg0RENGLCAweDkxNDMsIDB4OTE0MywgMHgxMzg5LCAweDkxNDQsIDB4OTE0NSwgMHg0REQ3LA0KLSAgICAweDkxNDYsIDB4OTE0NiwgMHgxMzhBLCAweDkxNDcsIDB4OTE0NywgMHg0REQ5LCAweDkxNDgsIDB4OTE0OCwgMHgyMzIxLA0KLSAgICAweDkxNDksIDB4OTE0OSwgMHgxMEI0LCAweDkxNEEsIDB4OTE0QSwgMHgxQ0Y4LCAweDkxNEIsIDB4OTE0QiwgMHgwQzcyLA0KLSAgICAweDkxNEMsIDB4OTE0QywgMHgxMjIwLCAweDkxNEQsIDB4OTE0RCwgMHgwQkE1LCAweDkxNEUsIDB4OTE0RiwgMHgxQ0ZBLA0KLSAgICAweDkxNTAsIDB4OTE1MCwgMHgxQ0Y5LCAweDkxNTEsIDB4OTE1MSwgMHg0RERBLCAweDkxNTIsIDB4OTE1MiwgMHgwOEY1LA0KLSAgICAweDkxNTMsIDB4OTE1NiwgMHg0RERCLCAweDkxNTcsIDB4OTE1NywgMHgwRkJBLCAweDkxNTgsIDB4OTE1OSwgMHg0RERGLA0KLSAgICAweDkxNUEsIDB4OTE1QSwgMHgwNjcwLCAweDkxNUIsIDB4OTE1QywgMHg0REUxLCAweDkxNUQsIDB4OTE1RCwgMHgxMTEwLA0KLSAgICAweDkxNUUsIDB4OTE1RSwgMHgwREZELCAweDkxNUYsIDB4OTE2MCwgMHg0REUzLCAweDkxNjEsIDB4OTE2MSwgMHgxQ0ZFLA0KLSAgICAweDkxNjIsIDB4OTE2MiwgMHgxQ0ZELCAweDkxNjMsIDB4OTE2MywgMHgwNzVGLCAweDkxNjQsIDB4OTE2NCwgMHgxQ0ZDLA0KLSAgICAweDkxNjUsIDB4OTE2NSwgMHgwRENCLCAweDkxNjYsIDB4OTE2OCwgMHg0REU1LCAweDkxNjksIDB4OTE2OSwgMHgxRDAwLA0KLSAgICAweDkxNkEsIDB4OTE2QSwgMHgwOUJELCAweDkxNkIsIDB4OTE2QiwgMHg0REU4LCAweDkxNkMsIDB4OTE2QywgMHgwNTBGLA0KLSAgICAweDkxNkQsIDB4OTE2RCwgMHg0REU5LCAweDkxNkUsIDB4OTE2RSwgMHgwRTVCLCAweDkxNkYsIDB4OTE2RiwgMHgxRDAxLA0KLSAgICAweDkxNzAsIDB4OTE3MCwgMHgxQ0ZGLCAweDkxNzEsIDB4OTE3MSwgMHgwODg1LCAweDkxNzIsIDB4OTE3MiwgMHgxRDA0LA0KLSAgICAweDkxNzMsIDB4OTE3MywgMHg0REVBLCAweDkxNzQsIDB4OTE3NCwgMHgxRDA1LCAweDkxNzUsIDB4OTE3NSwgMHgwODlFLA0KLSAgICAweDkxNzYsIDB4OTE3NiwgMHgwQUJELCAweDkxNzcsIDB4OTE3NywgMHgwOTZFLCAweDkxNzgsIDB4OTE3OCwgMHgwREQ2LA0KLSAgICAweDkxNzksIDB4OTE3OSwgMHgxRDA2LCAweDkxN0EsIDB4OTE3QywgMHg0REVCLCAweDkxN0QsIDB4OTE3RSwgMHgxRDAyLA0KLSAgICAweDkxN0YsIDB4OTE3RiwgMHgwQjUzLCAweDkxODAsIDB4OTE4NCwgMHg0REVFLCAweDkxODUsIDB4OTE4NSwgMHgxRDA4LA0KLSAgICAweDkxODYsIDB4OTE4NiwgMHg0REYzLCAweDkxODcsIDB4OTE4NywgMHgwNTNGLCAweDkxODgsIDB4OTE4OCwgMHg0REY0LA0KLSAgICAweDkxODksIDB4OTE4OSwgMHgxMjRBLCAweDkxOEEsIDB4OTE4QSwgMHg0REY1LCAweDkxOEIsIDB4OTE4QiwgMHgwNTVBLA0KLSAgICAweDkxOEMsIDB4OTE4QywgMHgxRDA3LCAweDkxOEQsIDB4OTE4RCwgMHgxRDBBLCAweDkxOEUsIDB4OTE4RiwgMHg0REY2LA0KLSAgICAweDkxOTAsIDB4OTE5MCwgMHgxRDA5LCAweDkxOTEsIDB4OTE5MSwgMHgxRDBCLCAweDkxOTIsIDB4OTE5MiwgMHgwRjlDLA0KLSAgICAweDkxOTMsIDB4OTE5NSwgMHg0REY4LCAweDkxOTYsIDB4OTE5NiwgMHgyMjU1LCAweDkxOTcsIDB4OTE5OSwgMHg0REZCLA0KLSAgICAweDkxOUEsIDB4OTE5QSwgMHgwQUQ2LCAweDkxOUIsIDB4OTE5QiwgMHgwQzg0LCAweDkxOUMsIDB4OTE5QywgMHgxRThGLA0KLSAgICAweDkxOUQsIDB4OTFBMSwgMHg0REZFLCAweDkxQTIsIDB4OTFBMywgMHgxRDBDLCAweDkxQTQsIDB4OTFBOSwgMHg0RTAzLA0KLSAgICAweDkxQUEsIDB4OTFBQSwgMHgxRDBFLCAweDkxQUIsIDB4OTFBQiwgMHgyMjBDLCAweDkxQUMsIDB4OTFBQywgMHgxRkE0LA0KLSAgICAweDkxQUQsIDB4OTFBRiwgMHgxRDBGLCAweDkxQjAsIDB4OTFCMywgMHg0RTA5LCAweDkxQjQsIDB4OTFCNCwgMHgxRDEzLA0KLSAgICAweDkxQjUsIDB4OTFCNSwgMHgxRDEyLCAweDkxQjYsIDB4OTFCOSwgMHg0RTBELCAweDkxQkEsIDB4OTFCQSwgMHgxRDE0LA0KLSAgICAweDkxQkIsIDB4OTFCRiwgMHg0RTExLCAweDkxQzAsIDB4OTFDMCwgMHgyMDlCLCAweDkxQzEsIDB4OTFDMSwgMHgyMUQ4LA0KLSAgICAweDkxQzIsIDB4OTFDMiwgMHg0RTE2LCAweDkxQzMsIDB4OTFDMywgMHgyNUZBLCAweDkxQzQsIDB4OTFDNCwgMHg0RTE3LA0KLSAgICAweDkxQzUsIDB4OTFDNSwgMHgyNUY5LCAweDkxQzYsIDB4OTFDNiwgMHg0RTE4LCAweDkxQzcsIDB4OTFDNywgMHgwNDkwLA0KLSAgICAweDkxQzgsIDB4OTFDOCwgMHg0RTE5LCAweDkxQzksIDB4OTFDOSwgMHgxMEI5LCAweDkxQ0EsIDB4OTFDQSwgMHgwRDY0LA0KLSAgICAweDkxQ0IsIDB4OTFDQiwgMHgyMTM0LCAweDkxQ0MsIDB4OTFDQywgMHgwOURBLCAweDkxQ0QsIDB4OTFDRCwgMHgxMUQ3LA0KLSAgICAweDkxQ0UsIDB4OTFDRSwgMHgxMDM3LCAweDkxQ0YsIDB4OTFDRiwgMHgwQTA4LCAweDkxRDAsIDB4OTFEMCwgMHg0RTFBLA0KLSAgICAweDkxRDEsIDB4OTFEMSwgMHgwOEMxLCAweDkxRDIsIDB4OTFENCwgMHgyNEYzLCAweDkxRDUsIDB4OTFENSwgMHgyNEY4LA0KLSAgICAweDkxRDYsIDB4OTFENiwgMHg0RTFCLCAweDkxRDcsIDB4OTFENywgMHgyNEY3LCAweDkxRDgsIDB4OTFEOCwgMHgxRUM4LA0KLSAgICAweDkxRDksIDB4OTFEOSwgMHgyNEY2LCAweDkxREEsIDB4OTFEQiwgMHg0RTFDLCAweDkxREMsIDB4OTFEQywgMHgwNkE1LA0KLSAgICAweDkxREQsIDB4OTFERCwgMHgyMjgwLCAweDkxREUsIDB4OTFFMiwgMHg0RTFFLCAweDkxRTMsIDB4OTFFMywgMHgxRUM1LA0KLSAgICAweDkxRTQsIDB4OTFFNCwgMHgyNEZCLCAweDkxRTUsIDB4OTFFNiwgMHg0RTIzLCAweDkxRTcsIDB4OTFFNywgMHgyNEZBLA0KLSAgICAweDkxRTgsIDB4OTFFOCwgMHg0RTI1LCAweDkxRTksIDB4OTFFOSwgMHgxRUVELCAweDkxRUEsIDB4OTFGNCwgMHg0RTI2LA0KLSAgICAweDkxRjUsIDB4OTFGNSwgMHgyNEZELCAweDkxRjYsIDB4OTFGNiwgMHg0RTMxLCAweDkxRjcsIDB4OTFGNywgMHgyNEY5LA0KLSAgICAweDkxRjgsIDB4OTFGOCwgMHg0RTMyLCAweDkxRjksIDB4OTFGOSwgMHgyNEZFLCAweDkxRkEsIDB4OTFGQSwgMHgyMENELA0KLSAgICAweDkxRkIsIDB4OTFGRiwgMHg0RTMzLCAweDkyMDAsIDB4OTIwMCwgMHgyNTA4LCAweDkyMDEsIDB4OTIwMSwgMHgyNTA0LA0KLSAgICAweDkyMDIsIDB4OTIwMywgMHg0RTM4LCAweDkyMDQsIDB4OTIwNCwgMHgyNTA2LCAweDkyMDUsIDB4OTIwNywgMHg0RTNBLA0KLSAgICAweDkyMDgsIDB4OTIwOCwgMHgyNEZGLCAweDkyMDksIDB4OTIwOSwgMHgyMDkwLCAweDkyMEEsIDB4OTIwQywgMHg0RTNELA0KLSAgICAweDkyMEQsIDB4OTIwRCwgMHgxRURELCAweDkyMEUsIDB4OTIwRSwgMHgxRjI1LCAweDkyMEYsIDB4OTIwRiwgMHg0RTQwLA0KLSAgICAweDkyMTAsIDB4OTIxMCwgMHgyNTAzLCAweDkyMTEsIDB4OTIxMSwgMHgyNTAyLCAweDkyMTIsIDB4OTIxMywgMHg0RTQxLA0KLSAgICAweDkyMTQsIDB4OTIxNCwgMHgxRTdBLCAweDkyMTUsIDB4OTIxNSwgMHgyMEE2LCAweDkyMTYsIDB4OTIxRCwgMHg0RTQzLA0KLSAgICAweDkyMUUsIDB4OTIxRSwgMHgxRkQ1LCAweDkyMUYsIDB4OTIyMiwgMHg0RTRCLCAweDkyMjMsIDB4OTIyMywgMHgxRjExLA0KLSAgICAweDkyMjQsIDB4OTIyNCwgMHg0RTRGLCAweDkyMjUsIDB4OTIyNSwgMHgyNTA3LCAweDkyMjYsIDB4OTIyNiwgMHgyNTAwLA0KLSAgICAweDkyMjcsIDB4OTIyNywgMHgyNTA1LCAweDkyMjgsIDB4OTIyRCwgMHg0RTUwLCAweDkyMkUsIDB4OTIyRSwgMHgyNTE5LA0KLSAgICAweDkyMkYsIDB4OTIyRiwgMHg0RTU2LCAweDkyMzAsIDB4OTIzMCwgMHgyNTE1LCAweDkyMzEsIDB4OTIzMiwgMHg0RTU3LA0KLSAgICAweDkyMzMsIDB4OTIzMywgMHgyNTBDLCAweDkyMzQsIDB4OTIzNCwgMHgyMDMxLCAweDkyMzUsIDB4OTIzNiwgMHg0RTU5LA0KLSAgICAweDkyMzcsIDB4OTIzNywgMHgyNTBCLCAweDkyMzgsIDB4OTIzOCwgMHgyNTBGLCAweDkyMzksIDB4OTIzOSwgMHgyNTFBLA0KLSAgICAweDkyM0EsIDB4OTIzQSwgMHgyNTA5LCAweDkyM0IsIDB4OTIzQywgMHg0RTVCLCAweDkyM0QsIDB4OTIzRCwgMHgyNTBFLA0KLSAgICAweDkyM0UsIDB4OTIzRSwgMHgyMjM0LCAweDkyM0YsIDB4OTIzRiwgMHgyNTEzLCAweDkyNDAsIDB4OTI0MCwgMHgxRjgwLA0KLSAgICAweDkyNDEsIDB4OTI0NCwgMHg0RTVELCAweDkyNDUsIDB4OTI0NSwgMHgyNTAxLCAweDkyNDYsIDB4OTI0NywgMHg0RTYxLA0KLSAgICAweDkyNDgsIDB4OTI0OCwgMHgyNTE3LCAweDkyNDksIDB4OTI0OSwgMHgyNTE2LCAweDkyNEEsIDB4OTI0QywgMHg0RTYzLA0KLSAgICAweDkyNEQsIDB4OTI0RCwgMHgyNTE4LCAweDkyNEUsIDB4OTI1MCwgMHg0RTY2LCAweDkyNTEsIDB4OTI1MSwgMHgxRTU2LA0KLSAgICAweDkyNTIsIDB4OTI1NCwgMHg0RTY5LCAweDkyNTUsIDB4OTI1NSwgMHgyNTBELCAweDkyNTYsIDB4OTI1NiwgMHg0RTZDLA0KLSAgICAweDkyNTcsIDB4OTI1NywgMHgyMEQzLCAweDkyNTgsIDB4OTI1OSwgMHg0RTZELCAweDkyNUEsIDB4OTI1QSwgMHgyMDdBLA0KLSAgICAweDkyNUIsIDB4OTI1QiwgMHgyMENFLCAweDkyNUMsIDB4OTI1RCwgMHg0RTZGLCAweDkyNUUsIDB4OTI1RSwgMHgyNTEwLA0KLSAgICAweDkyNUYsIDB4OTI2MSwgMHg0RTcxLCAweDkyNjIsIDB4OTI2MiwgMHgxRTU1LCAweDkyNjMsIDB4OTI2NSwgMHg0RTc0LA0KLSAgICAweDkyNjYsIDB4OTI2NiwgMHgyNTBBLCAweDkyNjcsIDB4OTI2QiwgMHg0RTc3LCAweDkyNkMsIDB4OTI2RCwgMHgyNTExLA0KLSAgICAweDkyNkUsIDB4OTI3MywgMHg0RTdDLCAweDkyNzQsIDB4OTI3NCwgMHgwODZCLCAweDkyNzUsIDB4OTI3NywgMHg0RTgyLA0KLSAgICAweDkyNzgsIDB4OTI3OCwgMHgxRkFBLCAweDkyNzksIDB4OTI3OSwgMHg0RTg1LCAweDkyN0EsIDB4OTI3QSwgMHgyNTFFLA0KLSAgICAweDkyN0IsIDB4OTI3QiwgMHgxRjFGLCAweDkyN0MsIDB4OTI3RSwgMHg0RTg2LCAweDkyN0YsIDB4OTI3RiwgMHgyNTJELA0KLSAgICAweDkyODAsIDB4OTI4MCwgMHgyMjFELCAweDkyODEsIDB4OTI4MiwgMHg0RTg5LCAweDkyODMsIDB4OTI4MywgMHgyNTMyLA0KLSAgICAweDkyODQsIDB4OTI4NCwgMHg0RThCLCAweDkyODUsIDB4OTI4NSwgMHgyMTdCLCAweDkyODYsIDB4OTI4RCwgMHg0RThDLA0KLSAgICAweDkyOEUsIDB4OTI4RSwgMHgxRDgwLCAweDkyOEYsIDB4OTI5MCwgMHg0RTk0LCAweDkyOTEsIDB4OTI5MSwgMHgyMUFGLA0KLSAgICAweDkyOTIsIDB4OTI5MiwgMHg0RTk2LCAweDkyOTMsIDB4OTI5MywgMHgyNTJDLCAweDkyOTQsIDB4OTI5NSwgMHg0RTk3LA0KLSAgICAweDkyOTYsIDB4OTI5NiwgMHgyNTI4LCAweDkyOTcsIDB4OTI5NywgMHg0RTk5LCAweDkyOTgsIDB4OTI5OCwgMHgyMDhDLA0KLSAgICAweDkyOTksIDB4OTI5OSwgMHg0RTlBLCAweDkyOUEsIDB4OTI5QSwgMHgyNTJGLCAweDkyOUIsIDB4OTI5QiwgMHg0RTlCLA0KLSAgICAweDkyOUMsIDB4OTI5QywgMHgyMUJDLCAweDkyOUQsIDB4OTI5RiwgMHg0RTlDLCAweDkyQTAsIDB4OTJBMCwgMHgyNTFELA0KLSAgICAweDkyQTEsIDB4OTJBMiwgMHg0RTlGLCAweDkyQTMsIDB4OTJBMywgMHgyNTM1LCAweDkyQTQsIDB4OTJBNCwgMHg0RUExLA0KLSAgICAweDkyQTUsIDB4OTJBNSwgMHgyMjBELCAweDkyQTYsIDB4OTJBNiwgMHgyNTI2LCAweDkyQTcsIDB4OTJBNywgMHg0RUEyLA0KLSAgICAweDkyQTgsIDB4OTJBOCwgMHgyNTM0LCAweDkyQTksIDB4OTJBOSwgMHgyNTJBLCAweDkyQUEsIDB4OTJBQSwgMHgyNTFGLA0KLSAgICAweDkyQUIsIDB4OTJBQiwgMHgyNTMxLCAweDkyQUMsIDB4OTJBQywgMHgyNTFDLCAweDkyQUQsIDB4OTJBRCwgMHg0RUEzLA0KLSAgICAweDkyQUUsIDB4OTJBRSwgMHgxRDgxLCAweDkyQUYsIDB4OTJCMCwgMHg0RUE0LCAweDkyQjEsIDB4OTJCMSwgMHgyNTI1LA0KLSAgICAweDkyQjIsIDB4OTJCNiwgMHg0RUE2LCAweDkyQjcsIDB4OTJCNywgMHgyMUNELCAweDkyQjgsIDB4OTJCOCwgMHg0RUFCLA0KLSAgICAweDkyQjksIDB4OTJCOSwgMHgyMURBLCAweDkyQkEsIDB4OTJCQSwgMHg0RUFDLCAweDkyQkIsIDB4OTJCQiwgMHgyMTcyLA0KLSAgICAweDkyQkMsIDB4OTJCQywgMHgyNTNFLCAweDkyQkQsIDB4OTJDMCwgMHg0RUFELCAweDkyQzEsIDB4OTJDMSwgMHgyMDRGLA0KLSAgICAweDkyQzIsIDB4OTJDMiwgMHg0RUIxLCAweDkyQzMsIDB4OTJDMywgMHgyNTQzLCAweDkyQzQsIDB4OTJDNCwgMHg0RUIyLA0KLSAgICAweDkyQzUsIDB4OTJDNSwgMHgyMUQ3LCAweDkyQzYsIDB4OTJDNiwgMHg0RUIzLCAweDkyQzcsIDB4OTJDNywgMHgxRTNDLA0KLSAgICAweDkyQzgsIDB4OTJDOCwgMHgxRDgyLCAweDkyQzksIDB4OTJDQiwgMHg0RUI0LCAweDkyQ0MsIDB4OTJDQywgMHgyNTI5LA0KLSAgICAweDkyQ0QsIDB4OTJDRSwgMHg0RUI3LCAweDkyQ0YsIDB4OTJDRiwgMHgyNTIxLCAweDkyRDAsIDB4OTJEMSwgMHg0RUI5LA0KLSAgICAweDkyRDIsIDB4OTJEMiwgMHgxRUZGLCAweDkyRDMsIDB4OTJEQywgMHg0RUJCLCAweDkyREQsIDB4OTJERCwgMHgyNTNGLA0KLSAgICAweDkyREUsIDB4OTJERSwgMHg0RUM1LCAweDkyREYsIDB4OTJERiwgMHgyNTQ0LCAweDkyRTAsIDB4OTJFMiwgMHg0RUM2LA0KLSAgICAweDkyRTMsIDB4OTJFMywgMHgyNTIzLCAweDkyRTQsIDB4OTJFNCwgMHgxRTkwLCAweDkyRTUsIDB4OTJFNSwgMHgyNTNBLA0KLSAgICAweDkyRTYsIDB4OTJFNiwgMHgyNTQ1LCAweDkyRTcsIDB4OTJFNywgMHg0RUM5LCAweDkyRTgsIDB4OTJFOCwgMHgyNTNELA0KLSAgICAweDkyRTksIDB4OTJFOSwgMHg0RUNBLCAweDkyRUEsIDB4OTJFQSwgMHgyMEMxLCAweDkyRUIsIDB4OTJFQywgMHg0RUNCLA0KLSAgICAweDkyRUQsIDB4OTJFRCwgMHgyMTAzLCAweDkyRUUsIDB4OTJFRSwgMHgyNTIwLCAweDkyRUYsIDB4OTJFRiwgMHgyNTNDLA0KLSAgICAweDkyRjAsIDB4OTJGMCwgMHgyNTNCLCAweDkyRjEsIDB4OTJGMSwgMHgyNTM4LCAweDkyRjIsIDB4OTJGNSwgMHg0RUNELA0KLSAgICAweDkyRjYsIDB4OTJGNiwgMHgyNTQwLCAweDkyRjcsIDB4OTJGNywgMHg0RUQxLCAweDkyRjgsIDB4OTJGOCwgMHgxRkNELA0KLSAgICAweDkyRjksIDB4OTJGQiwgMHg0RUQyLCAweDkyRkMsIDB4OTJGQywgMHgxRjE4LCAweDkyRkQsIDB4OTJGRiwgMHg0RUQ1LA0KLSAgICAweDkzMDAsIDB4OTMwMCwgMHg0RUQ4LCAweDkzMDEsIDB4OTMwMSwgMHgyNTRCLCAweDkzMDIsIDB4OTMwNSwgMHg0RUQ5LA0KLSAgICAweDkzMDYsIDB4OTMwNiwgMHgyNTQ3LCAweDkzMDcsIDB4OTMwOCwgMHgyNTRGLCAweDkzMDksIDB4OTMwRiwgMHg0RURELA0KLSAgICAweDkzMTAsIDB4OTMxMCwgMHgyMkIwLCAweDkzMTEsIDB4OTMxMSwgMHg0RUU0LCAweDkzMTIsIDB4OTMxMiwgMHgyNTQ2LA0KLSAgICAweDkzMTMsIDB4OTMxNCwgMHg0RUU1LCAweDkzMTUsIDB4OTMxNSwgMHgyNTRDLCAweDkzMTYsIDB4OTMxNywgMHg0RUU3LA0KLSAgICAweDkzMTgsIDB4OTMxOCwgMHgxRTlBLCAweDkzMTksIDB4OTMxOSwgMHgyNTUyLCAweDkzMUEsIDB4OTMxQSwgMHgyNTMwLA0KLSAgICAweDkzMUIsIDB4OTMxQiwgMHgyNTQ5LCAweDkzMUMsIDB4OTMxRSwgMHg0RUU5LCAweDkzMUYsIDB4OTMxRiwgMHgyNTUxLA0KLSAgICAweDkzMjAsIDB4OTMyMCwgMHgxRUNBLCAweDkzMjEsIDB4OTMyMSwgMHg0RUVDLCAweDkzMjIsIDB4OTMyMiwgMHgyMEQyLA0KLSAgICAweDkzMjMsIDB4OTMyNSwgMHg0RUVELCAweDkzMjYsIDB4OTMyNiwgMHgxRkI4LCAweDkzMjcsIDB4OTMyNywgMHg0RUYwLA0KLSAgICAweDkzMjgsIDB4OTMyOCwgMHgyMDc5LCAweDkzMjksIDB4OTMyQSwgMHg0RUYxLCAweDkzMkIsIDB4OTMyQiwgMHgyMUFCLA0KLSAgICAweDkzMkMsIDB4OTMyRCwgMHg0RUYzLCAweDkzMkUsIDB4OTMyRSwgMHgyNTRELCAweDkzMkYsIDB4OTMyRiwgMHgxRUE1LA0KLSAgICAweDkzMzAsIDB4OTMzMSwgMHg0RUY1LCAweDkzMzIsIDB4OTMzMiwgMHgyMDRDLCAweDkzMzMsIDB4OTMzMywgMHgyMDgwLA0KLSAgICAweDkzMzQsIDB4OTMzNSwgMHg0RUY3LCAweDkzMzYsIDB4OTMzNiwgMHgyNjZELCAweDkzMzcsIDB4OTMzNywgMHg0RUY5LA0KLSAgICAweDkzMzgsIDB4OTMzOCwgMHgyNTM3LCAweDkzMzksIDB4OTMzRCwgMHg0RUZBLCAweDkzM0UsIDB4OTMzRSwgMHgxRDgzLA0KLSAgICAweDkzM0YsIDB4OTMzRiwgMHg0RUZGLCAweDkzNDAsIDB4OTM0MCwgMHgyNTRBLCAweDkzNDEsIDB4OTM0MSwgMHgyMUI4LA0KLSAgICAweDkzNDIsIDB4OTM0MiwgMHg0RjAwLCAweDkzNDMsIDB4OTM0MywgMHgyNTRFLCAweDkzNDQsIDB4OTM0NSwgMHg0RjAxLA0KLSAgICAweDkzNDYsIDB4OTM0NiwgMHgyNEZDLCAweDkzNDcsIDB4OTM0NywgMHgyNTU0LCAweDkzNDgsIDB4OTM0QSwgMHg0RjAzLA0KLSAgICAweDkzNEIsIDB4OTM0QiwgMHgxRjNDLCAweDkzNEMsIDB4OTM0QywgMHg0RjA2LCAweDkzNEQsIDB4OTM0RCwgMHgxRUQ1LA0KLSAgICAweDkzNEUsIDB4OTM1MywgMHg0RjA3LCAweDkzNTQsIDB4OTM1NCwgMHgyNTU2LCAweDkzNTUsIDB4OTM1NywgMHg0RjBELA0KLSAgICAweDkzNTgsIDB4OTM1OCwgMHgyMjY4LCAweDkzNTksIDB4OTM1QSwgMHg0RjEwLCAweDkzNUIsIDB4OTM1QiwgMHgxRUQ2LA0KLSAgICAweDkzNUMsIDB4OTM2MywgMHg0RjEyLCAweDkzNjQsIDB4OTM2NCwgMHgyNTU3LCAweDkzNjUsIDB4OTM2NSwgMHgyNTUzLA0KLSAgICAweDkzNjYsIDB4OTM2OCwgMHg0RjFBLCAweDkzNjksIDB4OTM2OSwgMHgyNTQ4LCAweDkzNkEsIDB4OTM2QSwgMHgxRDg0LA0KLSAgICAweDkzNkIsIDB4OTM2QiwgMHg0RjFELCAweDkzNkMsIDB4OTM2QywgMHgyMERDLCAweDkzNkQsIDB4OTM2RiwgMHg0RjFFLA0KLSAgICAweDkzNzAsIDB4OTM3MCwgMHgyNTU5LCAweDkzNzEsIDB4OTM3NCwgMHg0RjIxLCAweDkzNzUsIDB4OTM3NSwgMHgxRjk3LA0KLSAgICAweDkzNzYsIDB4OTM3NiwgMHgyNTU1LCAweDkzNzcsIDB4OTM3OSwgMHg0RjI1LCAweDkzN0EsIDB4OTM3QSwgMHgyMjdELA0KLSAgICAweDkzN0IsIDB4OTM3RCwgMHg0RjI4LCAweDkzN0UsIDB4OTM3RSwgMHgyNTdFLCAweDkzN0YsIDB4OTM4MSwgMHg0RjJCLA0KLSAgICAweDkzODIsIDB4OTM4MiwgMHgyMDdDLCAweDkzODMsIDB4OTM4MywgMHg0RjJFLCAweDkzODQsIDB4OTM4NCwgMHgyNTVBLA0KLSAgICAweDkzODUsIDB4OTM4NiwgMHg0RjJGLCAweDkzODcsIDB4OTM4NywgMHgyNTVFLCAweDkzODgsIDB4OTM4OSwgMHg0RjMxLA0KLSAgICAweDkzOEEsIDB4OTM4QSwgMHgxRTM0LCAweDkzOEIsIDB4OTM4RSwgMHg0RjMzLCAweDkzOEYsIDB4OTM4RiwgMHgxRDg2LA0KLSAgICAweDkzOTAsIDB4OTM5NSwgMHg0RjM3LCAweDkzOTYsIDB4OTM5NiwgMHgyMTVFLCAweDkzOTcsIDB4OTM5NywgMHg0RjNELA0KLSAgICAweDkzOTgsIDB4OTM5OCwgMHgyNTYwLCAweDkzOTksIDB4OTNBMSwgMHg0RjNFLCAweDkzQTIsIDB4OTNBMiwgMHgyMUEyLA0KLSAgICAweDkzQTMsIDB4OTNBMywgMHgyMzU0LCAweDkzQTQsIDB4OTNBNSwgMHg0RjQ3LCAweDkzQTYsIDB4OTNBNiwgMHgyNTYzLA0KLSAgICAweDkzQTcsIDB4OTNBNywgMHgyNTI3LCAweDkzQTgsIDB4OTNBOCwgMHg0RjQ5LCAweDkzQTksIDB4OTNBOSwgMHgyNTJFLA0KLSAgICAweDkzQUEsIDB4OTNBQSwgMHgyNTU4LCAweDkzQUIsIDB4OTNBQiwgMHg0RjRBLCAweDkzQUMsIDB4OTNBQywgMHgxRjFCLA0KLSAgICAweDkzQUQsIDB4OTNBRCwgMHg0RjRCLCAweDkzQUUsIDB4OTNBRSwgMHgyMjgzLCAweDkzQUYsIDB4OTNBRiwgMHg0RjRDLA0KLSAgICAweDkzQjAsIDB4OTNCMCwgMHgyNTY0LCAweDkzQjEsIDB4OTNCMiwgMHg0RjRELCAweDkzQjMsIDB4OTNCMywgMHgyMEEwLA0KLSAgICAweDkzQjQsIDB4OTNCNCwgMHg0RjRGLCAweDkzQjUsIDB4OTNCNSwgMHgyNTY1LCAweDkzQjYsIDB4OTNCNywgMHg0RjUwLA0KLSAgICAweDkzQjgsIDB4OTNCOCwgMHgyNTYxLCAweDkzQjksIDB4OTNCRSwgMHg0RjUyLCAweDkzQkYsIDB4OTNCRiwgMHgyNTYyLA0KLSAgICAweDkzQzAsIDB4OTNDMiwgMHg0RjU4LCAweDkzQzMsIDB4OTNDMywgMHgyNTZDLCAweDkzQzQsIDB4OTNDNiwgMHg0RjVCLA0KLSAgICAweDkzQzcsIDB4OTNDNywgMHgyNTZELCAweDkzQzgsIDB4OTNDOCwgMHgyMDIwLCAweDkzQzksIDB4OTNDOSwgMHg0RjVFLA0KLSAgICAweDkzQ0EsIDB4OTNDQSwgMHgxRDg1LCAweDkzQ0IsIDB4OTNDQiwgMHg0RjVGLCAweDkzQ0MsIDB4OTNDQywgMHgyNTVGLA0KLSAgICAweDkzQ0QsIDB4OTNDRCwgMHgyNTZBLCAweDkzQ0UsIDB4OTNEMCwgMHg0RjYwLCAweDkzRDEsIDB4OTNEMSwgMHgyNTZFLA0KLSAgICAweDkzRDIsIDB4OTNENSwgMHg0RjYzLCAweDkzRDYsIDB4OTNENiwgMHgxRTAxLCAweDkzRDcsIDB4OTNENywgMHgyNTM5LA0KLSAgICAweDkzRDgsIDB4OTNEOCwgMHgyNTVDLCAweDkzRDksIDB4OTNEQiwgMHg0RjY3LCAweDkzREMsIDB4OTNERCwgMHgyNTY4LA0KLSAgICAweDkzREUsIDB4OTNERSwgMHgyNTZCLCAweDkzREYsIDB4OTNERiwgMHgxRTZGLCAweDkzRTAsIDB4OTNFMCwgMHg0RjZBLA0KLSAgICAweDkzRTEsIDB4OTNFMSwgMHgxRkM0LCAweDkzRTIsIDB4OTNFMiwgMHgyNTY3LCAweDkzRTMsIDB4OTNFMywgMHg0RjZCLA0KLSAgICAweDkzRTQsIDB4OTNFNCwgMHgyNTVCLCAweDkzRTUsIDB4OTNFNywgMHg0RjZDLCAweDkzRTgsIDB4OTNFOCwgMHgyNjFELA0KLSAgICAweDkzRTksIDB4OTNGNCwgMHg0RjZGLCAweDkzRjUsIDB4OTNGNSwgMHgyNTJCLCAweDkzRjYsIDB4OTNGNiwgMHg0RjdCLA0KLSAgICAweDkzRjcsIDB4OTNGNywgMHgyNTcxLCAweDkzRjgsIDB4OTNGOCwgMHg0RjdDLCAweDkzRjksIDB4OTNGOSwgMHgyNTc3LA0KLSAgICAweDkzRkEsIDB4OTNGRiwgMHg0RjdELCAweDk0MDAsIDB4OTQwMiwgMHg0RjgzLCAweDk0MDMsIDB4OTQwMywgMHgyNTIyLA0KLSAgICAweDk0MDQsIDB4OTQwQSwgMHg0Rjg2LCAweDk0MEIsIDB4OTQwQiwgMHgyNTMzLCAweDk0MEMsIDB4OTQwRiwgMHg0RjhELA0KLSAgICAweDk0MTAsIDB4OTQxMCwgMHgyMDJBLCAweDk0MTEsIDB4OTQxMSwgMHg0RjkxLCAweDk0MTIsIDB4OTQxMiwgMHgyNTM2LA0KLSAgICAweDk0MTMsIDB4OTQxMywgMHgyNTczLCAweDk0MTQsIDB4OTQxNCwgMHgyNTZGLCAweDk0MTUsIDB4OTQxNywgMHg0RjkyLA0KLSAgICAweDk0MTgsIDB4OTQxOCwgMHgyMjkzLCAweDk0MTksIDB4OTQxOSwgMHgyNTc4LCAweDk0MUEsIDB4OTQxQywgMHg0Rjk1LA0KLSAgICAweDk0MUQsIDB4OTQxRCwgMHgyNTcwLCAweDk0MUUsIDB4OTQxRiwgMHg0Rjk4LCAweDk0MjAsIDB4OTQyMCwgMHgyNTc1LA0KLSAgICAweDk0MjEsIDB4OTQyNSwgMHg0RjlBLCAweDk0MjYsIDB4OTQyNywgMHgyNTQxLCAweDk0MjgsIDB4OTQyOCwgMHgyNTVELA0KLSAgICAweDk0MjksIDB4OTQyRCwgMHg0RjlGLCAweDk0MkUsIDB4OTQyRSwgMHgyMDFBLCAweDk0MkYsIDB4OTQzMSwgMHg0RkE0LA0KLSAgICAweDk0MzIsIDB4OTQzMiwgMHgyNTdBLCAweDk0MzMsIDB4OTQzMywgMHgyMDA2LCAweDk0MzQsIDB4OTQzNCwgMHg0RkE3LA0KLSAgICAweDk0MzUsIDB4OTQzNSwgMHgyMTc3LCAweDk0MzYsIDB4OTQzNywgMHg0RkE4LCAweDk0MzgsIDB4OTQzOCwgMHgyNTFCLA0KLSAgICAweDk0MzksIDB4OTQzOSwgMHg0RkFBLCAweDk0M0EsIDB4OTQzQSwgMHgyNTI0LCAweDk0M0IsIDB4OTQzRCwgMHg0RkFCLA0KLSAgICAweDk0M0UsIDB4OTQzRSwgMHgxRDg3LCAweDk0M0YsIDB4OTQzRiwgMHgyNTdCLCAweDk0NDAsIDB4OTQ0MywgMHg0RkFFLA0KLSAgICAweDk0NDQsIDB4OTQ0NCwgMHgyMkEzLCAweDk0NDUsIDB4OTQ0OSwgMHg0RkIyLCAweDk0NEEsIDB4OTQ0QSwgMHgyNTc5LA0KLSAgICAweDk0NEIsIDB4OTQ0QiwgMHg0RkI3LCAweDk0NEMsIDB4OTQ0QywgMHgyNTY2LCAweDk0NEQsIDB4OTQ1MSwgMHg0RkI4LA0KLSAgICAweDk0NTIsIDB4OTQ1MiwgMHgxRjkzLCAweDk0NTMsIDB4OTQ1MywgMHg0RkJELCAweDk0NTQsIDB4OTQ1NCwgMHgyNTdDLA0KLSAgICAweDk0NTUsIDB4OTQ1RiwgMHg0RkJFLCAweDk0NjAsIDB4OTQ2MCwgMHgyNTE0LCAweDk0NjEsIDB4OTQ2MiwgMHg0RkM5LA0KLSAgICAweDk0NjMsIDB4OTQ2MywgMHgyNTdELCAweDk0NjQsIDB4OTQ2NCwgMHg0RkNCLCAweDk0NjUsIDB4OTQ2NSwgMHgyNTcyLA0KLSAgICAweDk0NjYsIDB4OTQ2QSwgMHg0RkNDLCAweDk0NkIsIDB4OTQ2QiwgMHgxRDg4LCAweDk0NkMsIDB4OTQ2QywgMHg0RkQxLA0KLSAgICAweDk0NkQsIDB4OTQ2RCwgMHgyNTc0LCAweDk0NkUsIDB4OTQ2RiwgMHg0RkQyLCAweDk0NzAsIDB4OTQ3MCwgMHgyMjRFLA0KLSAgICAweDk0NzEsIDB4OTQ3MSwgMHg0RkQ0LCAweDk0NzIsIDB4OTQ3MiwgMHgyMUM2LCAweDk0NzMsIDB4OTQ3NiwgMHg0RkQ1LA0KLSAgICAweDk0NzcsIDB4OTQ3NywgMHgyMDlGLCAweDk0NzgsIDB4OTQ3OCwgMHg0RkQ5LCAweDk0NzksIDB4OTQ3OSwgMHgyNTc2LA0KLSAgICAweDk0N0EsIDB4OTQ3QiwgMHg0RkRBLCAweDk0N0MsIDB4OTQ3QywgMHgyMDY0LCAweDk0N0QsIDB4OTQ3RCwgMHgyMkJGLA0KLSAgICAweDk0N0UsIDB4OTQ3RSwgMHgyNjFDLCAweDk0N0YsIDB4OTQ3RiwgMHgyMjVFLCAweDk0ODAsIDB4OTQ4NCwgMHg0RkRDLA0KLSAgICAweDk0ODUsIDB4OTQ4NywgMHgxQThFLCAweDk0ODgsIDB4OTQ4OCwgMHgxMThDLCAweDk0ODksIDB4OTQ4OSwgMHgwNUUzLA0KLSAgICAweDk0OEEsIDB4OTQ4QSwgMHgxQTkyLCAweDk0OEIsIDB4OTQ4QiwgMHgxQTkxLCAweDk0OEMsIDB4OTQ4RCwgMHgxQTkzLA0KLSAgICAweDk0OEUsIDB4OTQ4RSwgMHgwQzIyLCAweDk0OEYsIDB4OTQ5MCwgMHgxQTk1LCAweDk0OTEsIDB4OTQ5MSwgMHg0RkUxLA0KLSAgICAweDk0OTIsIDB4OTQ5MiwgMHgwNjRELCAweDk0OTMsIDB4OTQ5MywgMHgwNUQ3LCAweDk0OTQsIDB4OTQ5NCwgMHgxQTk3LA0KLSAgICAweDk0OTUsIDB4OTQ5NSwgMHgxQTk5LCAweDk0OTYsIDB4OTQ5NiwgMHg0RkUyLCAweDk0OTcsIDB4OTQ5NywgMHgxQTk4LA0KLSAgICAweDk0OTgsIDB4OTQ5OCwgMHg0RkUzLCAweDk0OTksIDB4OTQ5OSwgMHgwNkMxLCAweDk0OUEsIDB4OTQ5QywgMHgxQTlBLA0KLSAgICAweDk0OUQsIDB4OTQ5RCwgMHgwNjFBLCAweDk0OUUsIDB4OTQ5RSwgMHgwNEQzLCAweDk0OUYsIDB4OTQ5RiwgMHgxMUQyLA0KLSAgICAweDk0QTAsIDB4OTRBMCwgMHgwQjI5LCAweDk0QTEsIDB4OTRBMSwgMHgwNDFFLCAweDk0QTIsIDB4OTRBMiwgMHgwNkQxLA0KLSAgICAweDk0QTMsIDB4OTRBNCwgMHgxQTlELCAweDk0QTUsIDB4OTRBNSwgMHgxMTAyLCAweDk0QTYsIDB4OTRBNiwgMHgwQzUyLA0KLSAgICAweDk0QTcsIDB4OTRBNywgMHgwOTJBLCAweDk0QTgsIDB4OTRBOCwgMHgwRUU4LCAweDk0QTksIDB4OTRBOSwgMHgwNzBDLA0KLSAgICAweDk0QUEsIDB4OTRBQSwgMHgxQUEwLCAweDk0QUIsIDB4OTRBQiwgMHgxQTlGLCAweDk0QUMsIDB4OTRBQywgMHgxQUEyLA0KLSAgICAweDk0QUQsIDB4OTRBRCwgMHgxQUExLCAweDk0QUUsIDB4OTRBRSwgMHgwQjY2LCAweDk0QUYsIDB4OTRCMCwgMHgxQUEzLA0KLSAgICAweDk0QjEsIDB4OTRCMSwgMHgwQzJCLCAweDk0QjIsIDB4OTRCMiwgMHgxQUE1LCAweDk0QjMsIDB4OTRCMywgMHgwQzJDLA0KLSAgICAweDk0QjQsIDB4OTRCNCwgMHgxQUE2LCAweDk0QjUsIDB4OTRCNSwgMHgwNDZFLCAweDk0QjYsIDB4OTRCQSwgMHgxQUE3LA0KLSAgICAweDk0QkIsIDB4OTRCQiwgMHgxMjQ3LCAweDk0QkMsIDB4OTRCRCwgMHgxQUFDLCAweDk0QkUsIDB4OTRCRSwgMHgwODRCLA0KLSAgICAweDk0QkYsIDB4OTRCRiwgMHgxQUFFLCAweDk0QzAsIDB4OTRDMCwgMHgxMEIwLCAweDk0QzEsIDB4OTRDMSwgMHgwRTRELA0KLSAgICAweDk0QzIsIDB4OTRDMiwgMHgwNDczLCAweDk0QzMsIDB4OTRDMywgMHgwQTJFLCAweDk0QzQsIDB4OTRDNCwgMHgxQUFGLA0KLSAgICAweDk0QzUsIDB4OTRDNSwgMHgwQzIzLCAweDk0QzYsIDB4OTRDNiwgMHgwQUIyLCAweDk0QzcsIDB4OTRDNywgMHg0RkU0LA0KLSAgICAweDk0QzgsIDB4OTRDRSwgMHgxQUIwLCAweDk0Q0YsIDB4OTRDRiwgMHg0RkU1LCAweDk0RDAsIDB4OTREMiwgMHgxQUI3LA0KLSAgICAweDk0RDMsIDB4OTRENCwgMHg0RkU2LCAweDk0RDUsIDB4OTRENywgMHgxQUJBLCAweDk0RDgsIDB4OTREOCwgMHgxQUJFLA0KLSAgICAweDk0RDksIDB4OTREOSwgMHgxQUJELCAweDk0REEsIDB4OTREQSwgMHg0RkU4LCAweDk0REIsIDB4OTREQiwgMHgxQUJGLA0KLSAgICAweDk0REMsIDB4OTREQywgMHgwRTVFLCAweDk0REQsIDB4OTRERCwgMHgwQTY4LCAweDk0REUsIDB4OTRFMCwgMHgxQUMwLA0KLSAgICAweDk0RTEsIDB4OTRFMSwgMHgxMTQyLCAweDk0RTIsIDB4OTRFMiwgMHgxQUMzLCAweDk0RTMsIDB4OTRFMywgMHgwRjIwLA0KLSAgICAweDk0RTQsIDB4OTRFNSwgMHgxQUM0LCAweDk0RTYsIDB4OTRFNiwgMHg0RkU5LCAweDk0RTcsIDB4OTRFOCwgMHgxQUM2LA0KLSAgICAweDk0RTksIDB4OTRFOSwgMHgxQUM5LCAweDk0RUEsIDB4OTRFQSwgMHgxQUM4LCAweDk0RUIsIDB4OTRFQiwgMHgxQUNBLA0KLSAgICAweDk0RUMsIDB4OTRFQywgMHgwNkYwLCAweDk0RUQsIDB4OTRFRCwgMHgwQUZGLCAweDk0RUUsIDB4OTRFRiwgMHgxQUNCLA0KLSAgICAweDk0RjAsIDB4OTRGMCwgMHgwODkzLCAweDk0RjEsIDB4OTRGMSwgMHgxMDQ2LCAweDk0RjIsIDB4OTRGMiwgMHgwNEMwLA0KLSAgICAweDk0RjMsIDB4OTRGNSwgMHgxQUNELCAweDk0RjYsIDB4OTRGNiwgMHgxMDdGLCAweDk0RjcsIDB4OTRGNywgMHgxQUQwLA0KLSAgICAweDk0RjgsIDB4OTRGOCwgMHgxMUZDLCAweDk0RjksIDB4OTRGOSwgMHgxQUQxLCAweDk0RkEsIDB4OTRGQSwgMHgwQkVCLA0KLSAgICAweDk0RkIsIDB4OTRGQiwgMHg0RkVBLCAweDk0RkMsIDB4OTRGRCwgMHgxQUQyLCAweDk0RkUsIDB4OTRGRSwgMHgwOUZELA0KLSAgICAweDk0RkYsIDB4OTRGRiwgMHgxQUQ0LCAweDk1MDAsIDB4OTUwMCwgMHgwRjY3LCAweDk1MDEsIDB4OTUwMSwgMHgwREVELA0KLSAgICAweDk1MDIsIDB4OTUwMiwgMHgxQUQ2LCAweDk1MDMsIDB4OTUwMywgMHgxQUQ1LCAweDk1MDQsIDB4OTUwNCwgMHgwNTFGLA0KLSAgICAweDk1MDUsIDB4OTUwNSwgMHgwNzUxLCAweDk1MDYsIDB4OTUwNywgMHgxQUQ3LCAweDk1MDgsIDB4OTUwOCwgMHgwRkFELA0KLSAgICAweDk1MDksIDB4OTUwQSwgMHgxQUQ5LCAweDk1MEIsIDB4OTUwQiwgMHgwNjgzLCAweDk1MEMsIDB4OTUwQywgMHgwRjhBLA0KLSAgICAweDk1MEQsIDB4OTUwRiwgMHgxQURCLCAweDk1MTAsIDB4OTUxMCwgMHgwQ0NDLCAweDk1MTEsIDB4OTUxMSwgMHgwRTMzLA0KLSAgICAweDk1MTIsIDB4OTUxNiwgMHgxQURFLCAweDk1MTcsIDB4OTUxNywgMHgxMTgxLCAweDk1MTgsIDB4OTUxOCwgMHgxQUUzLA0KLSAgICAweDk1MTksIDB4OTUxOSwgMHgwNTcwLCAweDk1MUEsIDB4OTUxQSwgMHgwQUFGLCAweDk1MUIsIDB4OTUxQiwgMHgxQUU0LA0KLSAgICAweDk1MUMsIDB4OTUxQywgMHg0RkVCLCAweDk1MUQsIDB4OTUxRiwgMHgxQUU1LCAweDk1MjAsIDB4OTUyMCwgMHg0RkVDLA0KLSAgICAweDk1MjEsIDB4OTUyMSwgMHgwRjBDLCAweDk1MjIsIDB4OTUyMiwgMHgxQUU4LCAweDk1MjMsIDB4OTUyMywgMHgwQTg3LA0KLSAgICAweDk1MjQsIDB4OTUyNCwgMHgwNTNCLCAweDk1MjUsIDB4OTUyNSwgMHgxMjEzLCAweDk1MjYsIDB4OTUyNiwgMHgwOEM2LA0KLSAgICAweDk1MjcsIDB4OTUyNywgMHg0RkVELCAweDk1MjgsIDB4OTUyOCwgMHgwRjM0LCAweDk1MjksIDB4OTUyOSwgMHgxQUVCLA0KLSAgICAweDk1MkEsIDB4OTUyQiwgMHgxQUU5LCAweDk1MkMsIDB4OTUyQywgMHgxQUVDLCAweDk1MkQsIDB4OTUyRCwgMHgwNUU2LA0KLSAgICAweDk1MkUsIDB4OTUyRSwgMHgwODZGLCAweDk1MkYsIDB4OTUyRiwgMHgwOTExLCAweDk1MzAsIDB4OTUzMCwgMHgwQUQxLA0KLSAgICAweDk1MzEsIDB4OTUzMiwgMHgxQUVELCAweDk1MzMsIDB4OTUzMywgMHg0RkVFLCAweDk1MzQsIDB4OTUzNCwgMHgxQUVGLA0KLSAgICAweDk1MzUsIDB4OTUzNSwgMHgxQUY3LCAweDk1MzYsIDB4OTUzOCwgMHgxQUYwLCAweDk1MzksIDB4OTUzOSwgMHgwQzNGLA0KLSAgICAweDk1M0EsIDB4OTUzQSwgMHgxQjE5LCAweDk1M0IsIDB4OTUzQiwgMHgwNjBDLCAweDk1M0MsIDB4OTUzQywgMHgxQUYzLA0KLSAgICAweDk1M0QsIDB4OTUzRCwgMHg0RkVGLCAweDk1M0UsIDB4OTUzRiwgMHgxQUY0LCAweDk1NDAsIDB4OTU0MCwgMHgwNjA1LA0KLSAgICAweDk1NDEsIDB4OTU0MSwgMHgwQUMzLCAweDk1NDIsIDB4OTU0MiwgMHgxQUY2LCAweDk1NDMsIDB4OTU0MywgMHg0RkYwLA0KLSAgICAweDk1NDQsIDB4OTU0NiwgMHgxQUY4LCAweDk1NDcsIDB4OTU0NywgMHgxMTkzLCAweDk1NDgsIDB4OTU0OCwgMHg0RkYxLA0KLSAgICAweDk1NDksIDB4OTU0OSwgMHgxQUZCLCAweDk1NEEsIDB4OTU0QSwgMHgwQjVBLCAweDk1NEIsIDB4OTU0QiwgMHg0RkYyLA0KLSAgICAweDk1NEMsIDB4OTU0QywgMHgxQUZDLCAweDk1NEQsIDB4OTU0RCwgMHgwQjVCLCAweDk1NEUsIDB4OTU0RiwgMHgxQUZELA0KLSAgICAweDk1NTAsIDB4OTU1MCwgMHgwNkRGLCAweDk1NTEsIDB4OTU1MSwgMHgwNDAyLCAweDk1NTIsIDB4OTU1NCwgMHgxQUZGLA0KLSAgICAweDk1NTUsIDB4OTU1NSwgMHg0RkYzLCAweDk1NTYsIDB4OTU1OSwgMHgxQjAyLCAweDk1NUEsIDB4OTU1QSwgMHg0RkY0LA0KLSAgICAweDk1NUIsIDB4OTU1QiwgMHgxQjA2LCAweDk1NUMsIDB4OTU1QywgMHgwOEU0LCAweDk1NUQsIDB4OTU1RCwgMHgxQjA5LA0KLSAgICAweDk1NUUsIDB4OTU1RiwgMHgxQjA3LCAweDk1NjAsIDB4OTU2MCwgMHg0RkY1LCAweDk1NjEsIDB4OTU2MiwgMHgxQjBBLA0KLSAgICAweDk1NjMsIDB4OTU2MywgMHgwQTE2LCAweDk1NjQsIDB4OTU2QywgMHgxQjBDLCAweDk1NkQsIDB4OTU2RCwgMHgwOUMzLA0KLSAgICAweDk1NkUsIDB4OTU2RSwgMHg0RkY2LCAweDk1NkYsIDB4OTU2RiwgMHgxQjE1LCAweDk1NzAsIDB4OTU3MCwgMHgwOUY2LA0KLSAgICAweDk1NzEsIDB4OTU3MywgMHgxQjE2LCAweDk1NzQsIDB4OTU3NSwgMHg0RkY3LCAweDk1NzYsIDB4OTU3NiwgMHgwRjRGLA0KLSAgICAweDk1NzcsIDB4OTU3NywgMHgxRTc1LCAweDk1NzgsIDB4OTU3RSwgMHg0RkY5LCAweDk1N0YsIDB4OTU3RiwgMHgwNEM5LA0KLSAgICAweDk1ODAsIDB4OTU4MCwgMHgyMDdELCAweDk1ODEsIDB4OTU4MSwgMHg1MDAwLCAweDk1ODIsIDB4OTU4MiwgMHgyM0JGLA0KLSAgICAweDk1ODMsIDB4OTU4MywgMHgyMTEzLCAweDk1ODQsIDB4OTU4NSwgMHg1MDAxLCAweDk1ODYsIDB4OTU4NiwgMHgyM0MwLA0KLSAgICAweDk1ODcsIDB4OTU4OCwgMHg1MDAzLCAweDk1ODksIDB4OTU4OSwgMHgxRTQ1LCAweDk1OEEsIDB4OTU4QSwgMHg1MDA1LA0KLSAgICAweDk1OEIsIDB4OTU4QiwgMHgxRkQ4LCAweDk1OEMsIDB4OTU4QywgMHgyM0M0LCAweDk1OEQsIDB4OTU4RCwgMHg1MDA2LA0KLSAgICAweDk1OEUsIDB4OTU4RSwgMHgyM0MyLCAweDk1OEYsIDB4OTU4RiwgMHgyMTA0LCAweDk1OTAsIDB4OTU5MCwgMHg1MDA3LA0KLSAgICAweDk1OTEsIDB4OTU5MSwgMHgyMUJELCAweDk1OTIsIDB4OTU5MiwgMHg1MDA4LCAweDk1OTMsIDB4OTU5MywgMHgxRjg3LA0KLSAgICAweDk1OTQsIDB4OTU5NCwgMHgyM0MzLCAweDk1OTUsIDB4OTU5NywgMHg1MDA5LCAweDk1OTgsIDB4OTU5OCwgMHgyMjY5LA0KLSAgICAweDk1OTksIDB4OTVBMCwgMHg1MDBDLCAweDk1QTEsIDB4OTVBMSwgMHgxRjQzLCAweDk1QTIsIDB4OTVBMiwgMHg1MDE0LA0KLSAgICAweDk1QTMsIDB4OTVBMywgMHgxRjFFLCAweDk1QTQsIDB4OTVBNCwgMHgyNjc5LCAweDk1QTUsIDB4OTVBNSwgMHgxRUVCLA0KLSAgICAweDk1QTYsIDB4OTVBNywgMHg1MDE1LCAweDk1QTgsIDB4OTVBOCwgMHgxRjM1LCAweDk1QTksIDB4OTVBOSwgMHgyMDhBLA0KLSAgICAweDk1QUEsIDB4OTVBQSwgMHg1MDE3LCAweDk1QUIsIDB4OTVBQiwgMHgyM0M3LCAweDk1QUMsIDB4OTVBQywgMHgyM0M5LA0KLSAgICAweDk1QUQsIDB4OTVBRCwgMHgyM0M2LCAweDk1QUUsIDB4OTVCMSwgMHg1MDE4LCAweDk1QjIsIDB4OTVCMiwgMHgyMjRGLA0KLSAgICAweDk1QjMsIDB4OTVCNSwgMHg1MDFDLCAweDk1QjYsIDB4OTVCNiwgMHgyM0NCLCAweDk1QjcsIDB4OTVCOCwgMHg1MDFGLA0KLSAgICAweDk1QjksIDB4OTVCOSwgMHgyMUYzLCAweDk1QkEsIDB4OTVCQSwgMHg1MDIxLCAweDk1QkIsIDB4OTVCQiwgMHgyMUY3LA0KLSAgICAweDk1QkMsIDB4OTVCQywgMHgyM0NGLCAweDk1QkQsIDB4OTVCRCwgMHgyM0NFLCAweDk1QkUsIDB4OTVCRSwgMHgyM0NBLA0KLSAgICAweDk1QkYsIDB4OTVCRiwgMHgyM0NELCAweDk1QzAsIDB4OTVDMiwgMHg1MDIyLCAweDk1QzMsIDB4OTVDMywgMHgyM0QwLA0KLSAgICAweDk1QzQsIDB4OTVDNSwgMHg1MDI1LCAweDk1QzYsIDB4OTVDNiwgMHgyNjZDLCAweDk1QzcsIDB4OTVDNywgMHg1MDI3LA0KLSAgICAweDk1QzgsIDB4OTVDOCwgMHgyM0MxLCAweDk1QzksIDB4OTVDOSwgMHg1MDI4LCAweDk1Q0EsIDB4OTVDQSwgMHgxRkVFLA0KLSAgICAweDk1Q0IsIDB4OTVDQiwgMHgyM0QxLCAweDk1Q0MsIDB4OTVDQywgMHgxRkY4LCAweDk1Q0QsIDB4OTVDRiwgMHg1MDI5LA0KLSAgICAweDk1RDAsIDB4OTVEMCwgMHgyM0QzLCAweDk1RDEsIDB4OTVEMywgMHg1MDJDLCAweDk1RDQsIDB4OTVENCwgMHgyM0QyLA0KLSAgICAweDk1RDUsIDB4OTVENSwgMHgyM0Q0LCAweDk1RDYsIDB4OTVENiwgMHgxRTk4LCAweDk1RDcsIDB4OTVEQiwgMHg1MDJGLA0KLSAgICAweDk1REMsIDB4OTVEQywgMHgxRjJDLCAweDk1REQsIDB4OTVERCwgMHg1MDM0LCAweDk1REUsIDB4OTVERSwgMHgyM0Q1LA0KLSAgICAweDk1REYsIDB4OTVFMCwgMHg1MDM1LCAweDk1RTEsIDB4OTVFMSwgMHgxRTcxLCAweDk1RTIsIDB4OTVFMiwgMHgyNjkxLA0KLSAgICAweDk1RTMsIDB4OTVFNCwgMHg1MDM3LCAweDk1RTUsIDB4OTVFNSwgMHgyM0M1LCAweDk1RTYsIDB4OTVFNywgMHg1MDM5LA0KLSAgICAweDk1RTgsIDB4OTVFOCwgMHgwQUNBLCAweDk1RTksIDB4OTVFOSwgMHgxNjg1LCAweDk1RUEsIDB4OTVFQSwgMHgwQ0ZBLA0KLSAgICAweDk1RUIsIDB4OTVFQiwgMHgxNjg2LCAweDk1RUMsIDB4OTVFQywgMHg1MDNCLCAweDk1RUQsIDB4OTVFRCwgMHgwNDNFLA0KLSAgICAweDk1RUUsIDB4OTVFRSwgMHgwRUQ5LCAweDk1RUYsIDB4OTVFRiwgMHgwNTM2LCAweDk1RjAsIDB4OTVGMCwgMHgwQ0NELA0KLSAgICAweDk1RjEsIDB4OTVGMSwgMHgxNjg3LCAweDk1RjIsIDB4OTVGMiwgMHgwRjNELCAweDk1RjMsIDB4OTVGMywgMHgxNjg4LA0KLSAgICAweDk1RjQsIDB4OTVGNCwgMHgwODU3LCAweDk1RjUsIDB4OTVGNiwgMHgxNjg5LCAweDk1RjcsIDB4OTVGNywgMHgwQUNCLA0KLSAgICAweDk1RjgsIDB4OTVGOCwgMHgxMTQzLCAweDk1RjksIDB4OTVGOSwgMHgwQjM5LCAweDk1RkEsIDB4OTVGQSwgMHgwNzQ0LA0KLSAgICAweDk1RkIsIDB4OTVGQiwgMHgwRUQ0LCAweDk1RkMsIDB4OTVGQywgMHgxNjhCLCAweDk1RkQsIDB4OTVGRCwgMHgwQUZCLA0KLSAgICAweDk1RkUsIDB4OTVGRSwgMHgxNjhDLCAweDk1RkYsIDB4OTVGRiwgMHg1MDNDLCAweDk2MDAsIDB4OTYwMCwgMHgwNjQ0LA0KLSAgICAweDk2MDEsIDB4OTYwMSwgMHgwNkVFLCAweDk2MDIsIDB4OTYwMiwgMHgwNzg5LCAweDk2MDMsIDB4OTYwNCwgMHgxNjhELA0KLSAgICAweDk2MDUsIDB4OTYwNSwgMHgxMTA3LCAweDk2MDYsIDB4OTYwNiwgMHgxNjhGLCAweDk2MDcsIDB4OTYwNywgMHg1MDNELA0KLSAgICAweDk2MDgsIDB4OTYwOCwgMHgxNjkwLCAweDk2MDksIDB4OTYwOSwgMHgwRkY0LCAweDk2MEEsIDB4OTYwRCwgMHgxNjkxLA0KLSAgICAweDk2MEUsIDB4OTYwRSwgMHgwRkZGLCAweDk2MEYsIDB4OTYwRiwgMHgxNjk1LCAweDk2MTAsIDB4OTYxMCwgMHgwNEMyLA0KLSAgICAweDk2MTEsIDB4OTYxMSwgMHgwOUE2LCAweDk2MTIsIDB4OTYxMiwgMHgxNjk2LCAweDk2MTMsIDB4OTYxMywgMHg1MDNFLA0KLSAgICAweDk2MTQsIDB4OTYxNCwgMHgwOTk2LCAweDk2MTUsIDB4OTYxNywgMHgxNjk3LCAweDk2MTgsIDB4OTYxOCwgMHg1MDNGLA0KLSAgICAweDk2MTksIDB4OTYxQSwgMHgxNjlBLCAweDk2MUIsIDB4OTYxQiwgMHg1MDQwLCAweDk2MUMsIDB4OTYxQywgMHgwNkIyLA0KLSAgICAweDk2MUQsIDB4OTYxRCwgMHgxMzU0LCAweDk2MUUsIDB4OTYxRSwgMHg1MDQxLCAweDk2MUYsIDB4OTYxRiwgMHgwNjEyLA0KLSAgICAweDk2MjAsIDB4OTYyMCwgMHg1MDQyLCAweDk2MjEsIDB4OTYyMSwgMHgxMzU2LCAweDk2MjIsIDB4OTYyMiwgMHgxMzU1LA0KLSAgICAweDk2MjMsIDB4OTYyOSwgMHg1MDQzLCAweDk2MkEsIDB4OTYyQSwgMHgxMzU4LCAweDk2MkIsIDB4OTYyRCwgMHg1MDRBLA0KLSAgICAweDk2MkUsIDB4OTYyRSwgMHgwQ0M5LCAweDk2MkYsIDB4OTYzMCwgMHg1MDRELCAweDk2MzEsIDB4OTYzMSwgMHgxMzU3LA0KLSAgICAweDk2MzIsIDB4OTYzMiwgMHgwNjVELCAweDk2MzMsIDB4OTYzMywgMHgxMDFELCAweDk2MzQsIDB4OTYzNCwgMHgxMDdDLA0KLSAgICAweDk2MzUsIDB4OTYzNSwgMHgxMTk0LCAweDk2MzYsIDB4OTYzNiwgMHgwOEE4LCAweDk2MzcsIDB4OTYzQSwgMHg1MDRGLA0KLSAgICAweDk2M0IsIDB4OTYzQiwgMHgxMjQ1LCAweDk2M0MsIDB4OTYzQywgMHgxMzVBLCAweDk2M0QsIDB4OTYzRCwgMHgxMzU5LA0KLSAgICAweDk2M0UsIDB4OTYzRSwgMHg1MDUzLCAweDk2M0YsIDB4OTYzRiwgMHgwM0FELCAweDk2NDAsIDB4OTY0MCwgMHgwRTg0LA0KLSAgICAweDk2NDEsIDB4OTY0MSwgMHg1MDU0LCAweDk2NDIsIDB4OTY0MiwgMHgxMzVCLCAweDk2NDMsIDB4OTY0MywgMHg1MDU1LA0KLSAgICAweDk2NDQsIDB4OTY0NCwgMHgwNkI4LCAweDk2NDUsIDB4OTY0NSwgMHgwODNELCAweDk2NDYsIDB4OTY0NiwgMHgwQTY0LA0KLSAgICAweDk2NDcsIDB4OTY0NywgMHgwQTRCLCAweDk2NDgsIDB4OTY0OCwgMHgwNEU3LCAweDk2NDksIDB4OTY0OSwgMHgxMzVDLA0KLSAgICAweDk2NEEsIDB4OTY0QSwgMHg1MDU2LCAweDk2NEIsIDB4OTY0QiwgMHgwQTUxLCAweDk2NEMsIDB4OTY0QywgMHgwQjEzLA0KLSAgICAweDk2NEQsIDB4OTY0RCwgMHgwODg2LCAweDk2NEUsIDB4OTY0RiwgMHg1MDU3LCAweDk2NTAsIDB4OTY1MCwgMHgwRjRCLA0KLSAgICAweDk2NTEsIDB4OTY1MywgMHg1MDU5LCAweDk2NTQsIDB4OTY1NCwgMHgxMzVELCAweDk2NTUsIDB4OTY1NSwgMHgwQ0ZCLA0KLSAgICAweDk2NTYsIDB4OTY1NywgMHg1MDVDLCAweDk2NTgsIDB4OTY1OCwgMHgyMzFBLCAweDk2NTksIDB4OTY1QSwgMHg1MDVFLA0KLSAgICAweDk2NUIsIDB4OTY1QiwgMHgwNDQ2LCAweDk2NUMsIDB4OTY1QywgMHg1MDYwLCAweDk2NUQsIDB4OTY1RCwgMHgyMTE0LA0KLSAgICAweDk2NUUsIDB4OTY1RSwgMHg1MDYxLCAweDk2NUYsIDB4OTY1RiwgMHgxMzVFLCAweDk2NjAsIDB4OTY2MCwgMHg1MDYyLA0KLSAgICAweDk2NjEsIDB4OTY2MSwgMHgwNUY3LCAweDk2NjIsIDB4OTY2MiwgMHgxMEZELCAweDk2NjMsIDB4OTY2MywgMHgyMjg0LA0KLSAgICAweDk2NjQsIDB4OTY2NCwgMHgwNTIyLCAweDk2NjUsIDB4OTY2NiwgMHg1MDYzLCAweDk2NjcsIDB4OTY2NywgMHgxMzVGLA0KLSAgICAweDk2NjgsIDB4OTY2OCwgMHgxMTBDLCAweDk2NjksIDB4OTY2OSwgMHgwRjQyLCAweDk2NkEsIDB4OTY2QSwgMHgwQkE0LA0KLSAgICAweDk2NkIsIDB4OTY2QiwgMHg1MDY1LCAweDk2NkMsIDB4OTY2QywgMHgxMzYwLCAweDk2NkQsIDB4OTY2RiwgMHg1MDY2LA0KLSAgICAweDk2NzAsIDB4OTY3MCwgMHgyMjFDLCAweDk2NzEsIDB4OTY3MSwgMHg1MDY5LCAweDk2NzIsIDB4OTY3MiwgMHgxMzYxLA0KLSAgICAweDk2NzMsIDB4OTY3MywgMHgxRTdFLCAweDk2NzQsIDB4OTY3NCwgMHgxMzYyLCAweDk2NzUsIDB4OTY3NSwgMHgwQTMzLA0KLSAgICAweDk2NzYsIDB4OTY3NiwgMHgwRTI4LCAweDk2NzcsIDB4OTY3NywgMHgwRjRBLCAweDk2NzgsIDB4OTY3OCwgMHgyMDRELA0KLSAgICAweDk2NzksIDB4OTY3QywgMHg1MDZBLCAweDk2N0QsIDB4OTY3RCwgMHgyMjAxLCAweDk2N0UsIDB4OTY4NCwgMHg1MDZFLA0KLSAgICAweDk2ODUsIDB4OTY4NSwgMHgxMENDLCAweDk2ODYsIDB4OTY4NiwgMHgwQTQ4LCAweDk2ODcsIDB4OTY4NywgMHg1MDc1LA0KLSAgICAweDk2ODgsIDB4OTY4OCwgMHgxMzYzLCAweDk2ODksIDB4OTY4OSwgMHg1MDc2LCAweDk2OEEsIDB4OTY4QSwgMHgxRUQ5LA0KLSAgICAweDk2OEIsIDB4OTY4QiwgMHgwRERBLCAweDk2OEMsIDB4OTY4QywgMHg1MDc3LCAweDk2OEQsIDB4OTY4RCwgMHgxMzY0LA0KLSAgICAweDk2OEUsIDB4OTY4RSwgMHgxRkIyLCAweDk2OEYsIDB4OTY4RiwgMHgwRERCLCAweDk2OTAsIDB4OTY5MCwgMHgxMDg1LA0KLSAgICAweDk2OTEsIDB4OTY5MywgMHg1MDc4LCAweDk2OTQsIDB4OTY5NCwgMHgwNkVGLCAweDk2OTUsIDB4OTY5NSwgMHgyMjUyLA0KLSAgICAweDk2OTYsIDB4OTY5NiwgMHg1MDdCLCAweDk2OTcsIDB4OTY5NywgMHgxMzY1LCAweDk2OTgsIDB4OTY5OCwgMHgwM0JBLA0KLSAgICAweDk2OTksIDB4OTY5OSwgMHgwRjIzLCAweDk2OUEsIDB4OTY5QSwgMHg1MDdDLCAweDk2OUIsIDB4OTY5QiwgMHgxRjc5LA0KLSAgICAweDk2OUMsIDB4OTY5QywgMHgxMTcwLCAweDk2OUQsIDB4OTZBNiwgMHg1MDdELCAweDk2QTcsIDB4OTZBNywgMHgwREUyLA0KLSAgICAweDk2QTgsIDB4OTZBOCwgMHgyMTU3LCAweDk2QTksIDB4OTZBOSwgMHg1MDg3LCAweDk2QUEsIDB4OTZBQSwgMHgyMUJGLA0KLSAgICAweDk2QUIsIDB4OTZBRiwgMHg1MDg4LCAweDk2QjAsIDB4OTZCMCwgMHgxMzY2LCAweDk2QjEsIDB4OTZCMSwgMHgyMjFGLA0KLSAgICAweDk2QjIsIDB4OTZCMiwgMHg1MDhELCAweDk2QjMsIDB4OTZCMywgMHgxNjg0LCAweDk2QjQsIDB4OTZCNCwgMHgyMDNELA0KLSAgICAweDk2QjUsIDB4OTZCNSwgMHg1MDhFLCAweDk2QjYsIDB4OTZCNiwgMHgwOUVFLCAweDk2QjcsIDB4OTZCNywgMHg1MDhGLA0KLSAgICAweDk2QjgsIDB4OTZCOCwgMHgyMDE1LCAweDk2QjksIDB4OTZCOSwgMHgxRDc5LCAweDk2QkEsIDB4OTZCQSwgMHg1MDkwLA0KLSAgICAweDk2QkIsIDB4OTZCQiwgMHgyNkE1LCAweDk2QkMsIDB4OTZCRCwgMHgxRDdBLCAweDk2QkUsIDB4OTZCRSwgMHgwQjM0LA0KLSAgICAweDk2QkYsIDB4OTZCRiwgMHg1MDkxLCAweDk2QzAsIDB4OTZDMCwgMHgwQzkzLCAweDk2QzEsIDB4OTZDMSwgMHgxMDBDLA0KLSAgICAweDk2QzIsIDB4OTZDMywgMHg1MDkyLCAweDk2QzQsIDB4OTZDNCwgMHgwRkE2LCAweDk2QzUsIDB4OTZDNSwgMHgwRkVFLA0KLSAgICAweDk2QzYsIDB4OTZDNiwgMHgwODIyLCAweDk2QzcsIDB4OTZDNywgMHgwNzI2LCAweDk2QzgsIDB4OTZDOCwgMHg1MDk0LA0KLSAgICAweDk2QzksIDB4OTZDOSwgMHgxQjFDLCAweDk2Q0EsIDB4OTZDQiwgMHg1MDk1LCAweDk2Q0MsIDB4OTZDQywgMHgwNTQ5LA0KLSAgICAweDk2Q0QsIDB4OTZDRCwgMHgxMDlGLCAweDk2Q0UsIDB4OTZDRSwgMHgxRDdDLCAweDk2Q0YsIDB4OTZDRiwgMHgwNTIwLA0KLSAgICAweDk2RDAsIDB4OTZEMSwgMHg1MDk3LCAweDk2RDIsIDB4OTZEMiwgMHgxRDdELCAweDk2RDMsIDB4OTZENCwgMHg1MDk5LA0KLSAgICAweDk2RDUsIDB4OTZENSwgMHgwNUQyLCAweDk2RDYsIDB4OTZENiwgMHgyMTU2LCAweDk2RDcsIDB4OTZEOCwgMHg1MDlCLA0KLSAgICAweDk2RDksIDB4OTZEOSwgMHgyMTQ0LCAweDk2REEsIDB4OTZEQSwgMHg1MDlELCAweDk2REIsIDB4OTZEQiwgMHgxRTkxLA0KLSAgICAweDk2REMsIDB4OTZEQywgMHgyMjU3LCAweDk2REQsIDB4OTZERiwgMHg1MDlFLCAweDk2RTAsIDB4OTZFMCwgMHgxRDdGLA0KLSAgICAweDk2RTEsIDB4OTZFMSwgMHg1MEExLCAweDk2RTIsIDB4OTZFMiwgMHgyMDBBLCAweDk2RTMsIDB4OTZFMywgMHgyMDkyLA0KLSAgICAweDk2RTQsIDB4OTZFNywgMHg1MEEyLCAweDk2RTgsIDB4OTZFOCwgMHgxMENGLCAweDk2RTksIDB4OTZFOSwgMHgxRDYxLA0KLSAgICAweDk2RUEsIDB4OTZFQSwgMHgwRkQyLCAweDk2RUIsIDB4OTZFRSwgMHg1MEE2LCAweDk2RUYsIDB4OTZFRiwgMHgxRDYzLA0KLSAgICAweDk2RjAsIDB4OTZGMSwgMHg1MEFBLCAweDk2RjIsIDB4OTZGMiwgMHgyMjUwLCAweDk2RjMsIDB4OTZGMywgMHgxRDYyLA0KLSAgICAweDk2RjQsIDB4OTZGNSwgMHg1MEFDLCAweDk2RjYsIDB4OTZGNiwgMHgwQTJDLCAweDk2RjcsIDB4OTZGNywgMHgwOUMyLA0KLSAgICAweDk2RjgsIDB4OTZGOCwgMHg1MEFFLCAweDk2RjksIDB4OTZGOSwgMHgwNDBCLCAweDk2RkEsIDB4OTZGQSwgMHg1MEFGLA0KLSAgICAweDk2RkIsIDB4OTZGQiwgMHgxRUMzLCAweDk2RkMsIDB4OTZGRCwgMHg1MEIwLCAweDk2RkUsIDB4OTZGRSwgMHgwRUZDLA0KLSAgICAweDk2RkYsIDB4OTZGRiwgMHg1MEIyLCAweDk3MDAsIDB4OTcwMCwgMHgwRkIzLCAweDk3MDEsIDB4OTcwMSwgMHgxRDY1LA0KLSAgICAweDk3MDIsIDB4OTcwMywgMHg1MEIzLCAweDk3MDQsIDB4OTcwNCwgMHgwRjYzLCAweDk3MDUsIDB4OTcwNSwgMHg1MEI1LA0KLSAgICAweDk3MDYsIDB4OTcwNiwgMHgxRDY0LCAweDk3MDcsIDB4OTcwNywgMHgxMTkxLCAweDk3MDgsIDB4OTcwOCwgMHgxRDY2LA0KLSAgICAweDk3MDksIDB4OTcwOSwgMHgwQUJFLCAweDk3MEEsIDB4OTcwQywgMHg1MEI2LCAweDk3MEQsIDB4OTcwRCwgMHgwODA5LA0KLSAgICAweDk3MEUsIDB4OTcwRSwgMHgxRDY4LCAweDk3MEYsIDB4OTcwRiwgMHgxRDY3LCAweDk3MTAsIDB4OTcxMiwgMHg1MEI5LA0KLSAgICAweDk3MTMsIDB4OTcxMywgMHgwQjQxLCAweDk3MTQsIDB4OTcxNSwgMHg1MEJDLCAweDk3MTYsIDB4OTcxNiwgMHgwQTIxLA0KLSAgICAweDk3MTcsIDB4OTcxQiwgMHg1MEJFLCAweDk3MUMsIDB4OTcxQywgMHgwRDlGLCAweDk3MUQsIDB4OTcxRCwgMHg1MEMzLA0KLSAgICAweDk3MUUsIDB4OTcxRSwgMHgwRjI5LCAweDk3MUYsIDB4OTcyNiwgMHg1MEM0LCAweDk3MjcsIDB4OTcyNywgMHgyMUE4LA0KLSAgICAweDk3MjgsIDB4OTcyOSwgMHg1MENDLCAweDk3MkEsIDB4OTcyQSwgMHgxRDY5LCAweDk3MkIsIDB4OTcyQywgMHg1MENFLA0KLSAgICAweDk3MkQsIDB4OTcyRCwgMHgxRDZBLCAweDk3MkUsIDB4OTcyRiwgMHg1MEQwLCAweDk3MzAsIDB4OTczMCwgMHgxRDZCLA0KLSAgICAweDk3MzEsIDB4OTczMSwgMHg1MEQyLCAweDk3MzIsIDB4OTczMiwgMHgwQTVELCAweDk3MzMsIDB4OTczNywgMHg1MEQzLA0KLSAgICAweDk3MzgsIDB4OTczOCwgMHgwM0RGLCAweDk3MzksIDB4OTczOSwgMHgwQkJBLCAweDk3M0EsIDB4OTczQywgMHg1MEQ4LA0KLSAgICAweDk3M0QsIDB4OTczRCwgMHgyNjBELCAweDk3M0UsIDB4OTczRSwgMHgxRDZDLCAweDk3M0YsIDB4OTc0MSwgMHg1MERCLA0KLSAgICAweDk3NDIsIDB4OTc0MiwgMHgyNjBDLCAweDk3NDMsIDB4OTc0MywgMHg1MERFLCAweDk3NDQsIDB4OTc0NCwgMHgyNjBFLA0KLSAgICAweDk3NDUsIDB4OTc0NywgMHg1MERGLCAweDk3NDgsIDB4OTc0OCwgMHgyMDMyLCAweDk3NDksIDB4OTc1MSwgMHg1MEUyLA0KLSAgICAweDk3NTIsIDB4OTc1MiwgMHgwQzVELCAweDk3NTMsIDB4OTc1MywgMHgxRDYwLCAweDk3NTQsIDB4OTc1NSwgMHg1MEVCLA0KLSAgICAweDk3NTYsIDB4OTc1NiwgMHgwOEU3LCAweDk3NTcsIDB4OTc1OCwgMHg1MEVELCAweDk3NTksIDB4OTc1OSwgMHgwOEUxLA0KLSAgICAweDk3NUEsIDB4OTc1QSwgMHgyNjBCLCAweDk3NUIsIDB4OTc1QiwgMHgwNUM2LCAweDk3NUMsIDB4OTc1RCwgMHg1MEVGLA0KLSAgICAweDk3NUUsIDB4OTc1RSwgMHgwNjY0LCAweDk3NUYsIDB4OTc1RiwgMHg1MEYxLCAweDk3NjAsIDB4OTc2MCwgMHgwOTRDLA0KLSAgICAweDk3NjEsIDB4OTc2MSwgMHgwQUQ3LCAweDk3NjIsIDB4OTc2MiwgMHgwQUVCLCAweDk3NjMsIDB4OTc2NCwgMHg1MEYyLA0KLSAgICAweDk3NjUsIDB4OTc2NSwgMHgxMjgyLCAweDk3NjYsIDB4OTc2NywgMHg1MEY0LCAweDk3NjgsIDB4OTc2OCwgMHgyMkMzLA0KLSAgICAweDk3NjksIDB4OTc2OSwgMHgwNkVBLCAweDk3NkEsIDB4OTc3MiwgMHg1MEY2LCAweDk3NzMsIDB4OTc3MywgMHgwOENBLA0KLSAgICAweDk3NzQsIDB4OTc3NCwgMHgwRkNFLCAweDk3NzUsIDB4OTc3NSwgMHg1MEZGLCAweDk3NzYsIDB4OTc3NiwgMHgwM0RCLA0KLSAgICAweDk3NzcsIDB4OTc3QiwgMHg1MTAwLCAweDk3N0MsIDB4OTc3QywgMHgxREM4LCAweDk3N0QsIDB4OTc4NCwgMHg1MTA1LA0KLSAgICAweDk3ODUsIDB4OTc4NSwgMHgxREM5LCAweDk3ODYsIDB4OTc4QSwgMHg1MTBELCAweDk3OEIsIDB4OTc4QiwgMHgwRjc3LA0KLSAgICAweDk3OEMsIDB4OTc4QywgMHg1MTEyLCAweDk3OEQsIDB4OTc4RCwgMHgwM0JCLCAweDk3OEUsIDB4OTc4RSwgMHg1MTEzLA0KLSAgICAweDk3OEYsIDB4OTc4RiwgMHgxRjIzLCAweDk3OTAsIDB4OTc5MCwgMHg1MTE0LCAweDk3OTEsIDB4OTc5MiwgMHgxRENBLA0KLSAgICAweDk3OTMsIDB4OTc5MywgMHg1MTE1LCAweDk3OTQsIDB4OTc5NCwgMHgxRENDLCAweDk3OTUsIDB4OTc5NywgMHg1MTE2LA0KLSAgICAweDk3OTgsIDB4OTc5OCwgMHgwQzQ3LCAweDk3OTksIDB4OTc5RiwgMHg1MTE5LCAweDk3QTAsIDB4OTdBMCwgMHgwOEZFLA0KLSAgICAweDk3QTEsIDB4OTdBMiwgMHg1MTIwLCAweDk3QTMsIDB4OTdBMywgMHgxRENGLCAweDk3QTQsIDB4OTdBNSwgMHg1MTIyLA0KLSAgICAweDk3QTYsIDB4OTdBNiwgMHgyNjk1LCAweDk3QTcsIDB4OTdBQSwgMHg1MTI0LCAweDk3QUIsIDB4OTdBQiwgMHgxRENFLA0KLSAgICAweDk3QUMsIDB4OTdBQywgMHg1MTI4LCAweDk3QUQsIDB4OTdBRCwgMHgwNDQ3LCAweDk3QUUsIDB4OTdBRSwgMHg1MTI5LA0KLSAgICAweDk3QUYsIDB4OTdBRiwgMHgxRENELCAweDk3QjAsIDB4OTdCMSwgMHg1MTJBLCAweDk3QjIsIDB4OTdCMiwgMHgxREQwLA0KLSAgICAweDk3QjMsIDB4OTdCMywgMHg1MTJDLCAweDk3QjQsIDB4OTdCNCwgMHgxREQxLCAweDk3QjUsIDB4OTdCQywgMHg1MTJELA0KLSAgICAweDk3QkQsIDB4OTdCRCwgMHgyNjVFLCAweDk3QkUsIDB4OTdDMiwgMHg1MTM1LCAweDk3QzMsIDB4OTdDMywgMHgyNjVELA0KLSAgICAweDk3QzQsIDB4OTdDNSwgMHg1MTNBLCAweDk3QzYsIDB4OTdDNiwgMHgyNjkyLCAweDk3QzcsIDB4OTdDOCwgMHg1MTNDLA0KLSAgICAweDk3QzksIDB4OTdDOSwgMHgyNjVGLCAweDk3Q0EsIDB4OTdDQSwgMHg1MTNFLCAweDk3Q0IsIDB4OTdDQiwgMHgyMThELA0KLSAgICAweDk3Q0MsIDB4OTdDQywgMHgyMEZELCAweDk3Q0QsIDB4OTdEMiwgMHg1MTNGLCAweDk3RDMsIDB4OTdEMywgMHgxRjQwLA0KLSAgICAweDk3RDQsIDB4OTdEOCwgMHg1MTQ1LCAweDk3RDksIDB4OTdEOSwgMHgyNDY1LCAweDk3REEsIDB4OTdEQiwgMHg1MTRBLA0KLSAgICAweDk3REMsIDB4OTdEQywgMHgyNDY3LCAweDk3REQsIDB4OTdERCwgMHg1MTRDLCAweDk3REUsIDB4OTdERSwgMHgyNDY2LA0KLSAgICAweDk3REYsIDB4OTdFNSwgMHg1MTRELCAweDk3RTYsIDB4OTdFNiwgMHgwRUIzLCAweDk3RTcsIDB4OTdFNywgMHgwQ0E4LA0KLSAgICAweDk3RTgsIDB4OTdFOCwgMHg1MTU0LCAweDk3RTksIDB4OTdFOSwgMHgwNzYyLCAweDk3RUEsIDB4OTdFQywgMHgxODRFLA0KLSAgICAweDk3RUQsIDB4OTdFRCwgMHgwOEYxLCAweDk3RUUsIDB4OTdGMiwgMHg1MTU1LCAweDk3RjMsIDB4OTdGMywgMHgxMDdCLA0KLSAgICAweDk3RjQsIDB4OTdGNCwgMHg1MTVBLCAweDk3RjUsIDB4OTdGNSwgMHgxMTEyLCAweDk3RjYsIDB4OTdGNiwgMHgwRDExLA0KLSAgICAweDk3RjcsIDB4OTdGRSwgMHg1MTVCLCAweDk3RkYsIDB4OTdGRiwgMHgyMUM5LCAweDk4MDAsIDB4OTgwMCwgMHg1MTYzLA0KLSAgICAweDk4MDEsIDB4OTgwMSwgMHgyMjA5LCAweDk4MDIsIDB4OTgwMiwgMHgxRUM5LCAweDk4MDMsIDB4OTgwMywgMHgyMEU5LA0KLSAgICAweDk4MDQsIDB4OTgwNCwgMHg1MTY0LCAweDk4MDUsIDB4OTgwNSwgMHgyMUNBLCAweDk4MDYsIDB4OTgwNiwgMHgyMTQ2LA0KLSAgICAweDk4MDcsIDB4OTgwNywgMHgyNUM1LCAweDk4MDgsIDB4OTgwOCwgMHgyMURDLCAweDk4MDksIDB4OTgwOSwgMHg1MTY1LA0KLSAgICAweDk4MEEsIDB4OTgwQSwgMHgyNDVFLCAweDk4MEIsIDB4OTgwQiwgMHg1MTY2LCAweDk4MEMsIDB4OTgwQywgMHgyMTRGLA0KLSAgICAweDk4MEQsIDB4OTgwRCwgMHg1MTY3LCAweDk4MEUsIDB4OTgwRiwgMHgyNUM2LCAweDk4MTAsIDB4OTgxMCwgMHgyMjQxLA0KLSAgICAweDk4MTEsIDB4OTgxMSwgMHgyMThBLCAweDk4MTIsIDB4OTgxMiwgMHgxRTJGLCAweDk4MTMsIDB4OTgxMywgMHgxRURDLA0KLSAgICAweDk4MTQsIDB4OTgxNiwgMHg1MTY4LCAweDk4MTcsIDB4OTgxNywgMHgyMEJGLCAweDk4MTgsIDB4OTgxOCwgMHgyMDM0LA0KLSAgICAweDk4MTksIDB4OTgxQiwgMHg1MTZCLCAweDk4MUMsIDB4OTgxQywgMHgyNUM5LCAweDk4MUQsIDB4OTgyMCwgMHg1MTZFLA0KLSAgICAweDk4MjEsIDB4OTgyMSwgMHgyNUM4LCAweDk4MjIsIDB4OTgyMywgMHg1MTcyLCAweDk4MjQsIDB4OTgyNCwgMHgyMjBFLA0KLSAgICAweDk4MjUsIDB4OTgyNSwgMHg1MTc0LCAweDk4MjYsIDB4OTgyNiwgMHgyNUNCLCAweDk4MjcsIDB4OTgyQywgMHg1MTc1LA0KLSAgICAweDk4MkQsIDB4OTgyRCwgMHgyMTdELCAweDk4MkUsIDB4OTgyRiwgMHg1MTdCLCAweDk4MzAsIDB4OTgzMCwgMHgxRjdFLA0KLSAgICAweDk4MzEsIDB4OTgzNiwgMHg1MTdELCAweDk4MzcsIDB4OTgzNywgMHgyNUNDLCAweDk4MzgsIDB4OTgzOCwgMHgxRkMzLA0KLSAgICAweDk4MzksIDB4OTgzQSwgMHg1MTgzLCAweDk4M0IsIDB4OTgzQiwgMHgyMEI5LCAweDk4M0MsIDB4OTgzQywgMHg1MTg1LA0KLSAgICAweDk4M0QsIDB4OTgzRCwgMHgyMTgxLCAweDk4M0UsIDB4OTg0NSwgMHg1MTg2LCAweDk4NDYsIDB4OTg0NiwgMHgxRkRBLA0KLSAgICAweDk4NDcsIDB4OTg0QiwgMHg1MThFLCAweDk4NEMsIDB4OTg0QywgMHgyMTczLCAweDk4NEQsIDB4OTg0RCwgMHgxRUUxLA0KLSAgICAweDk4NEUsIDB4OTg0RSwgMHgyNUNELCAweDk4NEYsIDB4OTg1MiwgMHg1MTkzLCAweDk4NTMsIDB4OTg1MywgMHgyNUNFLA0KLSAgICAweDk4NTQsIDB4OTg1NCwgMHgyMUY2LCAweDk4NTUsIDB4OTg1NywgMHg1MTk3LCAweDk4NTgsIDB4OTg1OCwgMHgyMjRCLA0KLSAgICAweDk4NTksIDB4OTg1OSwgMHgyNUQxLCAweDk4NUEsIDB4OTg1QSwgMHg1MTlBLCAweDk4NUIsIDB4OTg1QiwgMHgxRUMwLA0KLSAgICAweDk4NUMsIDB4OTg1RCwgMHg1MTlCLCAweDk4NUUsIDB4OTg1RSwgMHgyMDA4LCAweDk4NUYsIDB4OTg2MSwgMHg1MTlELA0KLSAgICAweDk4NjIsIDB4OTg2MiwgMHgyNUQwLCAweDk4NjMsIDB4OTg2NCwgMHg1MUEwLCAweDk4NjUsIDB4OTg2NSwgMHgyNUQyLA0KLSAgICAweDk4NjYsIDB4OTg2NiwgMHg1MUEyLCAweDk4NjcsIDB4OTg2NywgMHgxRjJBLCAweDk4NjgsIDB4OTg2QSwgMHg1MUEzLA0KLSAgICAweDk4NkIsIDB4OTg2QiwgMHgxRTcyLCAweDk4NkMsIDB4OTg2QywgMHgyNUQzLCAweDk4NkQsIDB4OTg2RSwgMHg1MUE2LA0KLSAgICAweDk4NkYsIDB4OTg2RiwgMHgyMUJFLCAweDk4NzAsIDB4OTg3MCwgMHgyNUQ0LCAweDk4NzEsIDB4OTg3MSwgMHgyMDQ0LA0KLSAgICAweDk4NzIsIDB4OTg3MiwgMHg1MUE4LCAweDk4NzMsIDB4OTg3MywgMHgyNUNGLCAweDk4NzQsIDB4OTg3NCwgMHgyMEYzLA0KLSAgICAweDk4NzUsIDB4OTg3NSwgMHgxMDNBLCAweDk4NzYsIDB4OTg3NiwgMHgwNUU0LCAweDk4NzcsIDB4OTg3NywgMHgwQzY3LA0KLSAgICAweDk4NzgsIDB4OTg3OCwgMHgxQkUwLCAweDk4NzksIDB4OTg3OSwgMHgwRjVCLCAweDk4N0EsIDB4OTg3QSwgMHgwREE4LA0KLSAgICAweDk4N0IsIDB4OTg3QiwgMHgwRkI2LCAweDk4N0MsIDB4OTg3QywgMHgxODI3LCAweDk4N0QsIDB4OTg3RCwgMHgwRTk4LA0KLSAgICAweDk4N0UsIDB4OTg3RSwgMHgwNzI0LCAweDk4N0YsIDB4OTg3RiwgMHgwNjE4LCAweDk4ODAsIDB4OTg4MCwgMHgxQkUxLA0KLSAgICAweDk4ODEsIDB4OTg4MSwgMHgwM0VGLCAweDk4ODIsIDB4OTg4MiwgMHgwREMxLCAweDk4ODMsIDB4OTg4MywgMHgxQkUyLA0KLSAgICAweDk4ODQsIDB4OTg4NCwgMHgxMEU3LCAweDk4ODUsIDB4OTg4NSwgMHgwQTU0LCAweDk4ODYsIDB4OTg4NiwgMHgwQTM1LA0KLSAgICAweDk4ODcsIDB4OTg4NywgMHgwQkUzLCAweDk4ODgsIDB4OTg4OCwgMHgwOEUwLCAweDk4ODksIDB4OTg4OSwgMHgxQkUzLA0KLSAgICAweDk4OEEsIDB4OTg4QSwgMHgwODQ4LCAweDk4OEIsIDB4OTg4QiwgMHg1MUE5LCAweDk4OEMsIDB4OTg4RCwgMHgxQkU0LA0KLSAgICAweDk4OEUsIDB4OTg4RSwgMHg1MUFBLCAweDk4OEYsIDB4OTg4RiwgMHgxQkU2LCAweDk4OTAsIDB4OTg5MCwgMHgxMDRBLA0KLSAgICAweDk4OTEsIDB4OTg5MSwgMHgwQkQ0LCAweDk4OTIsIDB4OTg5MiwgMHg1MUFCLCAweDk4OTMsIDB4OTg5MywgMHgwRTc4LA0KLSAgICAweDk4OTQsIDB4OTg5NCwgMHgxQkU3LCAweDk4OTUsIDB4OTg5NSwgMHg1MUFDLCAweDk4OTYsIDB4OTg5NiwgMHgxMDk2LA0KLSAgICAweDk4OTcsIDB4OTg5NywgMHgwOTUyLCAweDk4OTgsIDB4OTg5OCwgMHgwRTM1LCAweDk4OTksIDB4OTg5OSwgMHg1MUFELA0KLSAgICAweDk4OUEsIDB4OTg5QiwgMHgxQkU4LCAweDk4OUMsIDB4OTg5QywgMHgwRkZFLCAweDk4OUQsIDB4OTg5RCwgMHgwNjJELA0KLSAgICAweDk4OUUsIDB4OTg5RiwgMHgxQkVBLCAweDk4QTAsIDB4OThBMCwgMHgwNUMwLCAweDk4QTEsIDB4OThBMiwgMHgxQkVDLA0KLSAgICAweDk4QTMsIDB4OThBMywgMHg1MUFFLCAweDk4QTQsIDB4OThBNCwgMHgwNEMzLCAweDk4QTUsIDB4OThBNiwgMHgxQkVFLA0KLSAgICAweDk4QTcsIDB4OThBNywgMHgwQzgyLCAweDk4QTgsIDB4OThBOCwgMHgxRjAwLCAweDk4QTksIDB4OThBRCwgMHg1MUFGLA0KLSAgICAweDk4QUUsIDB4OThBRiwgMHgyNENDLCAweDk4QjAsIDB4OThCMCwgMHg1MUI0LCAweDk4QjEsIDB4OThCMSwgMHgyNjk4LA0KLSAgICAweDk4QjIsIDB4OThCMiwgMHg1MUI1LCAweDk4QjMsIDB4OThCMywgMHgyNjc4LCAweDk4QjQsIDB4OThCNSwgMHg1MUI2LA0KLSAgICAweDk4QjYsIDB4OThCNiwgMHgyNENFLCAweDk4QjcsIDB4OThCQiwgMHg1MUI4LCAweDk4QkMsIDB4OThCQywgMHgyNENGLA0KLSAgICAweDk4QkQsIDB4OThDMywgMHg1MUJELCAweDk4QzQsIDB4OThDNCwgMHgyMEI4LCAweDk4QzUsIDB4OThDNSwgMHg1MUM0LA0KLSAgICAweDk4QzYsIDB4OThDNiwgMHgyNEQwLCAweDk4QzcsIDB4OThDNywgMHg1MUM1LCAweDk4QzgsIDB4OThDOCwgMHgyNEQxLA0KLSAgICAweDk4QzksIDB4OThDRCwgMHg1MUM2LCAweDk4Q0UsIDB4OThDRSwgMHgwNjg0LCAweDk4Q0YsIDB4OThEMCwgMHg1MUNCLA0KLSAgICAweDk4RDEsIDB4OThEMywgMHgxOUI3LCAweDk4RDQsIDB4OThENCwgMHg1MUNELCAweDk4RDUsIDB4OThENSwgMHgxOUJBLA0KLSAgICAweDk4RDYsIDB4OThENywgMHg1MUNFLCAweDk4RDgsIDB4OThEOCwgMHgwQkNELCAweDk4RDksIDB4OThEQSwgMHgxOUJCLA0KLSAgICAweDk4REIsIDB4OThEQiwgMHgxRUY0LCAweDk4REMsIDB4OThERCwgMHg1MUQwLCAweDk4REUsIDB4OThERSwgMHgwNjY2LA0KLSAgICAweDk4REYsIDB4OThERiwgMHgwRDRBLCAweDk4RTAsIDB4OThFMCwgMHgyMzlCLCAweDk4RTEsIDB4OThFMSwgMHg1MUQyLA0KLSAgICAweDk4RTIsIDB4OThFMiwgMHgyNjdFLCAweDk4RTMsIDB4OThFNiwgMHg1MUQzLCAweDk4RTcsIDB4OThFNywgMHgxNjFBLA0KLSAgICAweDk4RTgsIDB4OThFOCwgMHgxREU3LCAweDk4RTksIDB4OThFOSwgMHgyMzlELCAweDk4RUEsIDB4OThFQiwgMHgyMzlGLA0KLSAgICAweDk4RUMsIDB4OThFQywgMHg1MUQ3LCAweDk4RUQsIDB4OThFRCwgMHgyM0ExLCAweDk4RUUsIDB4OThFRSwgMHg1MUQ4LA0KLSAgICAweDk4RUYsIDB4OThFRiwgMHgxRUYxLCAweDk4RjAsIDB4OThGMSwgMHg1MUQ5LCAweDk4RjIsIDB4OThGMiwgMHgyMjFFLA0KLSAgICAweDk4RjMsIDB4OThGMywgMHg1MURCLCAweDk4RjQsIDB4OThGNCwgMHgyM0EyLCAweDk4RjUsIDB4OThGQiwgMHg1MURDLA0KLSAgICAweDk4RkMsIDB4OThGQywgMHgyMTRCLCAweDk4RkQsIDB4OThGRCwgMHgxRTM2LCAweDk4RkUsIDB4OThGRSwgMHgyMTM1LA0KLSAgICAweDk4RkYsIDB4OThGRiwgMHg1MUUzLCAweDk5MDAsIDB4OTkwMiwgMHg1MUU0LCAweDk5MDMsIDB4OTkwMywgMHgxRkFELA0KLSAgICAweDk5MDQsIDB4OTkwNCwgMHg1MUU3LCAweDk5MDUsIDB4OTkwNSwgMHgxRTUzLCAweDk5MDYsIDB4OTkwOCwgMHg1MUU4LA0KLSAgICAweDk5MDksIDB4OTkwOSwgMHgyM0EzLCAweDk5MEEsIDB4OTkwQSwgMHgyMjAzLCAweDk5MEIsIDB4OTkwQiwgMHg1MUVCLA0KLSAgICAweDk5MEMsIDB4OTkwQywgMHgxRUU3LCAweDk5MEQsIDB4OTkwRCwgMHgxREU4LCAweDk5MEUsIDB4OTkwRiwgMHg1MUVDLA0KLSAgICAweDk5MTAsIDB4OTkxMCwgMHgwNDk0LCAweDk5MTEsIDB4OTkxMSwgMHgyM0E0LCAweDk5MTIsIDB4OTkxMiwgMHgyMDk3LA0KLSAgICAweDk5MTMsIDB4OTkxMywgMHgxRUU0LCAweDk5MTQsIDB4OTkxNywgMHg1MUVFLCAweDk5MTgsIDB4OTkxOCwgMHgyMjM4LA0KLSAgICAweDk5MTksIDB4OTkxQSwgMHg1MUYyLCAweDk5MUIsIDB4OTkxQiwgMHgyM0E1LCAweDk5MUMsIDB4OTkxRCwgMHg1MUY0LA0KLSAgICAweDk5MUUsIDB4OTkxRSwgMHgxRjlBLCAweDk5MUYsIDB4OTkyMCwgMHg1MUY2LCAweDk5MjEsIDB4OTkyMSwgMHgyMUMzLA0KLSAgICAweDk5MjIsIDB4OTkyNywgMHg1MUY4LCAweDk5MjgsIDB4OTkyOCwgMHgxRjJFLCAweDk5MjksIDB4OTkyRCwgMHg1MUZFLA0KLSAgICAweDk5MkUsIDB4OTkyRSwgMHgxREU5LCAweDk5MkYsIDB4OTkzMiwgMHg1MjAzLCAweDk5MzMsIDB4OTkzMywgMHgyMzlDLA0KLSAgICAweDk5MzQsIDB4OTkzNiwgMHg1MjA3LCAweDk5MzcsIDB4OTkzNywgMHgyM0E2LCAweDk5MzgsIDB4OTkzQiwgMHg1MjBBLA0KLSAgICAweDk5M0MsIDB4OTkzQywgMHgyMzlFLCAweDk5M0QsIDB4OTkzRCwgMHg1MjBFLCAweDk5M0UsIDB4OTkzRSwgMHgyMDM1LA0KLSAgICAweDk5M0YsIDB4OTkzRiwgMHgyM0E3LCAweDk5NDAsIDB4OTk0MiwgMHg1MjBGLCAweDk5NDMsIDB4OTk0MywgMHgyM0E4LA0KLSAgICAweDk5NDQsIDB4OTk0NCwgMHg1MjEyLCAweDk5NDUsIDB4OTk0NSwgMHgyMDc1LCAweDk5NDYsIDB4OTk0NywgMHg1MjEzLA0KLSAgICAweDk5NDgsIDB4OTk0QSwgMHgyM0E5LCAweDk5NEIsIDB4OTk0QiwgMHgxRkVCLCAweDk5NEMsIDB4OTk0QywgMHgyM0FDLA0KLSAgICAweDk5NEQsIDB4OTk1MCwgMHg1MjE1LCAweDk5NTEsIDB4OTk1MSwgMHgxRjZBLCAweDk5NTIsIDB4OTk1MiwgMHgyMEY5LA0KLSAgICAweDk5NTMsIDB4OTk1MywgMHg1MjE5LCAweDk5NTQsIDB4OTk1NCwgMHgxREVCLCAweDk5NTUsIDB4OTk1NSwgMHgxREVBLA0KLSAgICAweDk5NTYsIDB4OTk1NiwgMHg1MjFBLCAweDk5NTcsIDB4OTk1NywgMHgyNjY2LCAweDk5NTgsIDB4OTk1QiwgMHg1MjFCLA0KLSAgICAweDk5NUMsIDB4OTk1QywgMHgyNjY3LCAweDk5NUQsIDB4OTk1RCwgMHg1MjFGLCAweDk5NUUsIDB4OTk1RSwgMHgxRTZDLA0KLSAgICAweDk5NUYsIDB4OTk2MSwgMHg1MjIwLCAweDk5NjIsIDB4OTk2MiwgMHgyM0FELCAweDk5NjMsIDB4OTk2MywgMHgxNjFELA0KLSAgICAweDk5NjQsIDB4OTk2NCwgMHg1MjIzLCAweDk5NjUsIDB4OTk2NSwgMHgwODE1LCAweDk5NjYsIDB4OTk2NiwgMHg1MjI0LA0KLSAgICAweDk5NjcsIDB4OTk2QywgMHgxNjFFLCAweDk5NkQsIDB4OTk2RCwgMHgwNjU2LCAweDk5NkUsIDB4OTk2RSwgMHgxMDgyLA0KLSAgICAweDk5NkYsIDB4OTk2RiwgMHgwODc1LCAweDk5NzAsIDB4OTk3MCwgMHgwRDY1LCAweDk5NzEsIDB4OTk3MSwgMHgwNDBFLA0KLSAgICAweDk5NzIsIDB4OTk3MiwgMHgwREJDLCAweDk5NzMsIDB4OTk3MywgMHg1MjI1LCAweDk5NzQsIDB4OTk3NCwgMHgxNjI0LA0KLSAgICAweDk5NzUsIDB4OTk3NSwgMHgwNjNCLCAweDk5NzYsIDB4OTk3NiwgMHgwQzlGLCAweDk5NzcsIDB4OTk3NywgMHgxNjI1LA0KLSAgICAweDk5NzgsIDB4OTk3OSwgMHg1MjI2LCAweDk5N0EsIDB4OTk3QSwgMHgwODk5LCAweDk5N0IsIDB4OTk3QiwgMHg1MjI4LA0KLSAgICAweDk5N0MsIDB4OTk3QywgMHgwNDY2LCAweDk5N0QsIDB4OTk3RCwgMHgxNjI2LCAweDk5N0UsIDB4OTk3RSwgMHg1MjI5LA0KLSAgICAweDk5N0YsIDB4OTk3RiwgMHgwNjM1LCAweDk5ODAsIDB4OTk4MCwgMHgxNjI3LCAweDk5ODEsIDB4OTk4MSwgMHgwQjNDLA0KLSAgICAweDk5ODIsIDB4OTk4MywgMHg1MjJBLCAweDk5ODQsIDB4OTk4NCwgMHgxNjI4LCAweDk5ODUsIDB4OTk4NSwgMHgwRjQ3LA0KLSAgICAweDk5ODYsIDB4OTk4NiwgMHgwNzM2LCAweDk5ODcsIDB4OTk4NywgMHgxNjI5LCAweDk5ODgsIDB4OTk4OCwgMHgwOThDLA0KLSAgICAweDk5ODksIDB4OTk4OSwgMHg1MjJDLCAweDk5OEEsIDB4OTk4QSwgMHgxNjJBLCAweDk5OEIsIDB4OTk4QiwgMHgwNEJELA0KLSAgICAweDk5OEMsIDB4OTk4QywgMHg1MjJELCAweDk5OEQsIDB4OTk4RCwgMHgxNjJCLCAweDk5OEUsIDB4OTk4RSwgMHg1MjJFLA0KLSAgICAweDk5OEYsIDB4OTk4RiwgMHgwQTNDLCAweDk5OTAsIDB4OTk5MSwgMHgxNjJDLCAweDk5OTIsIDB4OTk5MiwgMHgwQTlGLA0KLSAgICAweDk5OTMsIDB4OTk5NSwgMHgxNjJFLCAweDk5OTYsIDB4OTk5NiwgMHgwRDZFLCAweDk5OTcsIDB4OTk5NywgMHgxMjZFLA0KLSAgICAweDk5OTgsIDB4OTk5OCwgMHgxMkY5LCAweDk5OTksIDB4OTk5OSwgMHgwRjUwLCAweDk5OUEsIDB4OTlBNCwgMHg1MjJGLA0KLSAgICAweDk5QTUsIDB4OTlBNSwgMHgxQjJCLCAweDk5QTYsIDB4OTlBNywgMHg1MjNBLCAweDk5QTgsIDB4OTlBOCwgMHgxM0RFLA0KLSAgICAweDk5QTksIDB4OTlBQiwgMHg1MjNDLCAweDk5QUMsIDB4OTlBQywgMHgyMDZELCAweDk5QUQsIDB4OTlBRCwgMHgyMjQyLA0KLSAgICAweDk5QUUsIDB4OTlBRSwgMHgxRjAyLCAweDk5QUYsIDB4OTlCMCwgMHg1MjNGLCAweDk5QjEsIDB4OTlCMSwgMHgyMTgzLA0KLSAgICAweDk5QjIsIDB4OTlCMiwgMHg1MjQxLCAweDk5QjMsIDB4OTlCMywgMHgxRTg1LCAweDk5QjQsIDB4OTlCNCwgMHgyMUU5LA0KLSAgICAweDk5QjUsIDB4OTlDMCwgMHg1MjQyLCAweDk5QzEsIDB4OTlDMSwgMHgxRTU3LCAweDk5QzIsIDB4OTlDRiwgMHg1MjRFLA0KLSAgICAweDk5RDAsIDB4OTlEMCwgMHgyMkE1LCAweDk5RDEsIDB4OTlEMSwgMHgyNDA3LCAweDk5RDIsIDB4OTlEMiwgMHgxRkNBLA0KLSAgICAweDk5RDMsIDB4OTlEMywgMHg1MjVDLCAweDk5RDQsIDB4OTlENCwgMHgyNDAyLCAweDk5RDUsIDB4OTlENSwgMHgxRjgyLA0KLSAgICAweDk5RDYsIDB4OTlENywgMHg1MjVELCAweDk5RDgsIDB4OTlEOCwgMHgyNDA4LCAweDk5RDksIDB4OTlEOSwgMHgyNDA0LA0KLSAgICAweDk5REEsIDB4OTlEQSwgMHg1MjVGLCAweDk5REIsIDB4OTlEQiwgMHgyMTMxLCAweDk5REMsIDB4OTlEQywgMHg1MjYwLA0KLSAgICAweDk5REQsIDB4OTlERCwgMHgyMTg0LCAweDk5REUsIDB4OTlERSwgMHg1MjYxLCAweDk5REYsIDB4OTlERiwgMHgyNDAzLA0KLSAgICAweDk5RTAsIDB4OTlFMCwgMHg1MjYyLCAweDk5RTEsIDB4OTlFMSwgMHgyMDZFLCAweDk5RTIsIDB4OTlFMiwgMHgyNDBCLA0KLSAgICAweDk5RTMsIDB4OTlFQywgMHg1MjYzLCAweDk5RUQsIDB4OTlFRCwgMHgxRjNGLCAweDk5RUUsIDB4OTlGMCwgMHg1MjZELA0KLSAgICAweDk5RjEsIDB4OTlGMSwgMHgyMDY3LCAweDk5RjIsIDB4OTlGRSwgMHg1MjcwLCAweDk5RkYsIDB4OTlGRiwgMHgxRkQ3LA0KLSAgICAweDlBMDAsIDB4OUEwMCwgMHg1MjdELCAweDlBMDEsIDB4OUEwMSwgMHgxRTgzLCAweDlBMDIsIDB4OUEwNCwgMHg1MjdFLA0KLSAgICAweDlBMDUsIDB4OUEwNSwgMHgyNDBGLCAweDlBMDYsIDB4OUEwQywgMHg1MjgxLCAweDlBMEQsIDB4OUEwRCwgMHgyNDBFLA0KLSAgICAweDlBMEUsIDB4OUEwRSwgMHgyMEM3LCAweDlBMEYsIDB4OUEwRiwgMHgyNDBELCAweDlBMTAsIDB4OUExNSwgMHg1Mjg4LA0KLSAgICAweDlBMTYsIDB4OUExNiwgMHgyNDEyLCAweDlBMTcsIDB4OUExOCwgMHg1MjhFLCAweDlBMTksIDB4OUExOSwgMHgyMEI3LA0KLSAgICAweDlBMUEsIDB4OUEyQSwgMHg1MjkwLCAweDlBMkIsIDB4OUEyQiwgMHgyM0YwLCAweDlBMkMsIDB4OUEyQywgMHg1MkExLA0KLSAgICAweDlBMkQsIDB4OUEyRCwgMHgyNDExLCAweDlBMkUsIDB4OUEyRSwgMHgyNDE0LCAweDlBMkYsIDB4OUEyRiwgMHg1MkEyLA0KLSAgICAweDlBMzAsIDB4OUEzMCwgMHgyMTcwLCAweDlBMzEsIDB4OUEzNSwgMHg1MkEzLCAweDlBMzYsIDB4OUEzNiwgMHgyNDA1LA0KLSAgICAweDlBMzcsIDB4OUEzNywgMHgyMTBDLCAweDlBMzgsIDB4OUEzOCwgMHgyNDE1LCAweDlBMzksIDB4OUEzRCwgMHg1MkE4LA0KLSAgICAweDlBM0UsIDB4OUEzRSwgMHgyMDY2LCAweDlBM0YsIDB4OUEzRiwgMHg1MkFELCAweDlBNDAsIDB4OUE0MCwgMHgyMzUyLA0KLSAgICAweDlBNDEsIDB4OUE0MSwgMHgyNDEzLCAweDlBNDIsIDB4OUE0MiwgMHgyNDEwLCAweDlBNDMsIDB4OUE0NCwgMHgyNDE2LA0KLSAgICAweDlBNDUsIDB4OUE0NSwgMHgyMEYxLCAweDlBNDYsIDB4OUE0OSwgMHg1MkFFLCAweDlBNEEsIDB4OUE0QSwgMHgyNDBBLA0KLSAgICAweDlBNEIsIDB4OUE0QywgMHg1MkIyLCAweDlBNEQsIDB4OUE0RCwgMHgyNDA5LCAweDlBNEUsIDB4OUE0RSwgMHg1MkI0LA0KLSAgICAweDlBNEYsIDB4OUE0RiwgMHgyNDE4LCAweDlBNTAsIDB4OUE1NCwgMHg1MkI1LCAweDlBNTUsIDB4OUE1NSwgMHgxRkE3LA0KLSAgICAweDlBNTYsIDB4OUE1NiwgMHg1MkJBLCAweDlBNTcsIDB4OUE1NywgMHgyMUZDLCAweDlBNTgsIDB4OUE1OSwgMHg1MkJCLA0KLSAgICAweDlBNUEsIDB4OUE1QSwgMHgxRkMxLCAweDlBNUIsIDB4OUE1QiwgMHgyNDA2LCAweDlBNUMsIDB4OUE1RSwgMHg1MkJELA0KLSAgICAweDlBNUYsIDB4OUE1RiwgMHgyMjlDLCAweDlBNjAsIDB4OUE2MSwgMHg1MkMwLCAweDlBNjIsIDB4OUE2MiwgMHgyMDRFLA0KLSAgICAweDlBNjMsIDB4OUE2MywgMHg1MkMyLCAweDlBNjQsIDB4OUE2NCwgMHgyNDFBLCAweDlBNjUsIDB4OUE2NSwgMHgyNDE5LA0KLSAgICAweDlBNjYsIDB4OUE2OSwgMHg1MkMzLCAweDlBNkEsIDB4OUE2QSwgMHgyNDBDLCAweDlBNkIsIDB4OUE2QiwgMHg1MkM3LA0KLSAgICAweDlBNkMsIDB4OUE2QywgMHgwQTk0LCAweDlBNkQsIDB4OUE2RCwgMHgxMEU5LCAweDlBNkUsIDB4OUE2RSwgMHgwRTg1LA0KLSAgICAweDlBNkYsIDB4OUE2RiwgMHgwRkRBLCAweDlBNzAsIDB4OUE3MCwgMHgwNTAwLCAweDlBNzEsIDB4OUE3MSwgMHgwQzdBLA0KLSAgICAweDlBNzIsIDB4OUE3MiwgMHg1MkM4LCAweDlBNzMsIDB4OUE3MywgMHgwNDdDLCAweDlBNzQsIDB4OUE3NCwgMHgwQTY2LA0KLSAgICAweDlBNzUsIDB4OUE3NSwgMHgxN0JBLCAweDlBNzYsIDB4OUE3NiwgMHgwRDUyLCAweDlBNzcsIDB4OUE3OCwgMHgxN0JCLA0KLSAgICAweDlBNzksIDB4OUE3OSwgMHgwOTAzLCAweDlBN0EsIDB4OUE3QSwgMHgxN0JELCAweDlBN0IsIDB4OUE3QiwgMHgxMjAxLA0KLSAgICAweDlBN0MsIDB4OUE3QywgMHgwRTg2LCAweDlBN0QsIDB4OUE3RCwgMHgxN0JGLCAweDlBN0UsIDB4OUE3RSwgMHgwODUwLA0KLSAgICAweDlBN0YsIDB4OUE3RiwgMHgxN0JFLCAweDlBODAsIDB4OUE4MSwgMHgxN0MwLCAweDlBODIsIDB4OUE4MiwgMHgwQTk1LA0KLSAgICAweDlBODMsIDB4OUE4MywgMHg1MkM5LCAweDlBODQsIDB4OUE4NCwgMHgwODhGLCAweDlBODUsIDB4OUE4NSwgMHgxN0MyLA0KLSAgICAweDlBODYsIDB4OUE4NiwgMHgwQThELCAweDlBODcsIDB4OUE4NywgMHgwNzVFLCAweDlBODgsIDB4OUE4OCwgMHgxN0MzLA0KLSAgICAweDlBODksIDB4OUE4OSwgMHg1MkNBLCAweDlBOEEsIDB4OUE4QSwgMHgxN0M0LCAweDlBOEIsIDB4OUE4QiwgMHgwNEY3LA0KLSAgICAweDlBOEMsIDB4OUE4QywgMHgxMDEyLCAweDlBOEQsIDB4OUE4RSwgMHg1MkNCLCAweDlBOEYsIDB4OUE4RiwgMHgwOTMyLA0KLSAgICAweDlBOTAsIDB4OUE5MCwgMHgxN0M1LCAweDlBOTEsIDB4OUE5MSwgMHgwQzBFLCAweDlBOTIsIDB4OUE5MywgMHgxN0M2LA0KLSAgICAweDlBOTQsIDB4OUE5NSwgMHg1MkNELCAweDlBOTYsIDB4OUE5NiwgMHgxN0M4LCAweDlBOTcsIDB4OUE5NywgMHgwQkNDLA0KLSAgICAweDlBOTgsIDB4OUE5OCwgMHgxN0M5LCAweDlBOTksIDB4OUE5OSwgMHg1MkNGLCAweDlBOUEsIDB4OUE5QSwgMHgwQ0UwLA0KLSAgICAweDlBOUIsIDB4OUE5RCwgMHgxN0NBLCAweDlBOUUsIDB4OUE5RSwgMHgxNzM1LCAweDlBOUYsIDB4OUFBMCwgMHgxN0NELA0KLSAgICAweDlBQTEsIDB4OUFBMSwgMHgwQTg5LCAweDlBQTIsIDB4OUFBMywgMHgxN0NGLCAweDlBQTQsIDB4OUFBNCwgMHgxMUU3LA0KLSAgICAweDlBQTUsIDB4OUFBNSwgMHgxN0QxLCAweDlBQTYsIDB4OUFBNiwgMHg1MkQwLCAweDlBQTcsIDB4OUFBNywgMHgxN0QyLA0KLSAgICAweDlBQTgsIDB4OUFBOCwgMHgwNzIwLCAweDlBQTksIDB4OUFBRSwgMHg1MkQxLCAweDlBQUYsIDB4OUFBRiwgMHgxRTI5LA0KLSAgICAweDlBQjAsIDB4OUFCMCwgMHgxREQzLCAweDlBQjEsIDB4OUFCMSwgMHgxREQyLCAweDlBQjIsIDB4OUFCNSwgMHg1MkQ3LA0KLSAgICAweDlBQjYsIDB4OUFCNiwgMHgxREQ2LCAweDlBQjcsIDB4OUFCNywgMHgxREQ0LCAweDlBQjgsIDB4OUFCOCwgMHgwNzU4LA0KLSAgICAweDlBQjksIDB4OUFCOSwgMHg1MkRCLCAweDlBQkEsIDB4OUFCQSwgMHgxREQ3LCAweDlBQkIsIDB4OUFCQiwgMHg1MkRDLA0KLSAgICAweDlBQkMsIDB4OUFCQywgMHgxREQ4LCAweDlBQkQsIDB4OUFCRiwgMHg1MkRELCAweDlBQzAsIDB4OUFDMCwgMHgxRERBLA0KLSAgICAweDlBQzEsIDB4OUFDMSwgMHgxREQ5LCAweDlBQzIsIDB4OUFDMiwgMHgxRERDLCAweDlBQzMsIDB4OUFDNCwgMHg1MkUwLA0KLSAgICAweDlBQzUsIDB4OUFDNSwgMHgxRERCLCAweDlBQzYsIDB4OUFDQSwgMHg1MkUyLCAweDlBQ0IsIDB4OUFDQywgMHgxRERELA0KLSAgICAweDlBQ0QsIDB4OUFDRSwgMHg1MkU3LCAweDlBQ0YsIDB4OUFDRiwgMHgyNjYxLCAweDlBRDAsIDB4OUFEMCwgMHg1MkU5LA0KLSAgICAweDlBRDEsIDB4OUFEMSwgMHgxRERGLCAweDlBRDIsIDB4OUFEMiwgMHgyNkE0LCAweDlBRDMsIDB4OUFEMywgMHgwRERELA0KLSAgICAweDlBRDQsIDB4OUFENCwgMHgyMTc0LCAweDlBRDUsIDB4OUFENSwgMHgyNjYzLCAweDlBRDYsIDB4OUFENiwgMHgyNjYyLA0KLSAgICAweDlBRDcsIDB4OUFENywgMHg1MkVBLCAweDlBRDgsIDB4OUFEOCwgMHgwNkRBLCAweDlBRDksIDB4OUFERSwgMHg1MkVCLA0KLSAgICAweDlBREYsIDB4OUFERiwgMHgxREVDLCAweDlBRTAsIDB4OUFFMCwgMHg1MkYxLCAweDlBRTEsIDB4OUFFMSwgMHgxREVELA0KLSAgICAweDlBRTIsIDB4OUFFNSwgMHg1MkYyLCAweDlBRTYsIDB4OUFFNiwgMHgxREVFLCAweDlBRTcsIDB4OUFFQSwgMHg1MkY2LA0KLSAgICAweDlBRUIsIDB4OUFFQiwgMHgxREYwLCAweDlBRUMsIDB4OUFFQywgMHg1MkZBLCAweDlBRUQsIDB4OUFFRCwgMHgxREYyLA0KLSAgICAweDlBRUUsIDB4OUFFRSwgMHgyNjc1LCAweDlBRUYsIDB4OUFFRiwgMHgxREVGLCAweDlBRjAsIDB4OUFGOCwgMHg1MkZCLA0KLSAgICAweDlBRjksIDB4OUFGOSwgMHgxREYzLCAweDlBRkEsIDB4OUFGQSwgMHg1MzA0LCAweDlBRkIsIDB4OUFGQiwgMHgxREYxLA0KLSAgICAweDlBRkMsIDB4OUFGRiwgMHg1MzA1LCAweDlCMDAsIDB4OUIwMiwgMHg1MzA5LCAweDlCMDMsIDB4OUIwMywgMHgxMjM0LA0KLSAgICAweDlCMDQsIDB4OUIwNSwgMHg1MzBDLCAweDlCMDYsIDB4OUIwNiwgMHgyMTRDLCAweDlCMDcsIDB4OUIwNywgMHg1MzBFLA0KLSAgICAweDlCMDgsIDB4OUIwOCwgMHgxREY0LCAweDlCMDksIDB4OUIwQywgMHg1MzBGLCAweDlCMEQsIDB4OUIwRCwgMHgyNjdBLA0KLSAgICAweDlCMEUsIDB4OUIwRSwgMHg1MzEzLCAweDlCMEYsIDB4OUIwRiwgMHgxREY1LCAweDlCMTAsIDB4OUIxMiwgMHg1MzE0LA0KLSAgICAweDlCMTMsIDB4OUIxMywgMHgxREY2LCAweDlCMTQsIDB4OUIxOSwgMHg1MzE3LCAweDlCMUEsIDB4OUIxQSwgMHgyNkEwLA0KLSAgICAweDlCMUIsIDB4OUIxRSwgMHg1MzFELCAweDlCMUYsIDB4OUIxRiwgMHgxREY3LCAweDlCMjAsIDB4OUIyMSwgMHg1MzIxLA0KLSAgICAweDlCMjIsIDB4OUIyMiwgMHgyNjY4LCAweDlCMjMsIDB4OUIyMywgMHgxREY4LCAweDlCMjQsIDB4OUIyNCwgMHg1MzIzLA0KLSAgICAweDlCMjUsIDB4OUIyNSwgMHgxRUQwLCAweDlCMjYsIDB4OUIyNiwgMHg1MzI0LCAweDlCMjcsIDB4OUIyNywgMHgyMDk2LA0KLSAgICAweDlCMjgsIDB4OUIyOCwgMHg1MzI1LCAweDlCMjksIDB4OUIyOSwgMHgyM0NDLCAweDlCMkEsIDB4OUIyRCwgMHg1MzI2LA0KLSAgICAweDlCMkUsIDB4OUIyRSwgMHgyM0M4LCAweDlCMkYsIDB4OUIyRiwgMHgxMzlCLCAweDlCMzAsIDB4OUIzMCwgMHg1MzJBLA0KLSAgICAweDlCMzEsIDB4OUIzMSwgMHgyMjNFLCAweDlCMzIsIDB4OUIzMiwgMHgxMjYwLCAweDlCMzMsIDB4OUIzQSwgMHg1MzJCLA0KLSAgICAweDlCM0IsIDB4OUIzQiwgMHgxNzczLCAweDlCM0MsIDB4OUIzQywgMHgwNzQ2LCAweDlCM0QsIDB4OUI0MCwgMHg1MzMzLA0KLSAgICAweDlCNDEsIDB4OUI0MSwgMHgwOThBLCAweDlCNDIsIDB4OUI0MiwgMHgwN0ZGLCAweDlCNDMsIDB4OUI0MywgMHgxREUxLA0KLSAgICAweDlCNDQsIDB4OUI0NCwgMHgwQkU2LCAweDlCNDUsIDB4OUI0NSwgMHgxREUwLCAweDlCNDYsIDB4OUI0NiwgMHg1MzM3LA0KLSAgICAweDlCNDcsIDB4OUI0NywgMHgxREUyLCAweDlCNDgsIDB4OUI0OCwgMHgxREU0LCAweDlCNDksIDB4OUI0OSwgMHgxREUzLA0KLSAgICAweDlCNEEsIDB4OUI0QywgMHg1MzM4LCAweDlCNEQsIDB4OUI0RCwgMHgxREU1LCAweDlCNEUsIDB4OUI0RSwgMHgyNjY1LA0KLSAgICAweDlCNEYsIDB4OUI0RiwgMHgwRUM5LCAweDlCNTAsIDB4OUI1MCwgMHg1MzNCLCAweDlCNTEsIDB4OUI1MSwgMHgxREU2LA0KLSAgICAweDlCNTIsIDB4OUI1MywgMHg1MzNDLCAweDlCNTQsIDB4OUI1NCwgMHgwQjBBLCAweDlCNTUsIDB4OUI1NywgMHg1MzNFLA0KLSAgICAweDlCNTgsIDB4OUI1OCwgMHgyNjY0LCAweDlCNTksIDB4OUI1OSwgMHg1MzQxLCAweDlCNUEsIDB4OUI1QSwgMHgyMjM5LA0KLSAgICAweDlCNUIsIDB4OUI2RSwgMHg1MzQyLCAweDlCNkYsIDB4OUI2RiwgMHgyMDRBLCAweDlCNzAsIDB4OUI3MywgMHg1MzU2LA0KLSAgICAweDlCNzQsIDB4OUI3NCwgMHgyNjFGLCAweDlCNzUsIDB4OUI3NiwgMHg1MzVBLCAweDlCNzcsIDB4OUI3NywgMHgyNjFFLA0KLSAgICAweDlCNzgsIDB4OUI4MCwgMHg1MzVDLCAweDlCODEsIDB4OUI4MSwgMHgyNjIwLCAweDlCODIsIDB4OUI4MiwgMHg1MzY1LA0KLSAgICAweDlCODMsIDB4OUI4MywgMHgyNjIxLCAweDlCODQsIDB4OUI4RCwgMHg1MzY2LCAweDlCOEUsIDB4OUI4RSwgMHgyNjIyLA0KLSAgICAweDlCOEYsIDB4OUI4RiwgMHg1MzcwLCAweDlCOTAsIDB4OUI5MCwgMHgyNjI3LCAweDlCOTEsIDB4OUI5MSwgMHgxRTM5LA0KLSAgICAweDlCOTIsIDB4OUI5MiwgMHgyNjI1LCAweDlCOTMsIDB4OUI5OSwgMHg1MzcxLCAweDlCOUEsIDB4OUI5QSwgMHgyNjI5LA0KLSAgICAweDlCOUIsIDB4OUI5QywgMHg1Mzc4LCAweDlCOUQsIDB4OUI5RCwgMHgyNjJFLCAweDlCOUUsIDB4OUI5RSwgMHgyNjJCLA0KLSAgICAweDlCOUYsIDB4OUJBOSwgMHg1MzdBLCAweDlCQUEsIDB4OUJBQSwgMHgyNjJBLCAweDlCQUIsIDB4OUJBQiwgMHgyNjJELA0KLSAgICAweDlCQUMsIDB4OUJBQywgMHg1Mzg1LCAweDlCQUQsIDB4OUJBRCwgMHgyNjI4LCAweDlCQUUsIDB4OUJBRSwgMHgyMUI5LA0KLSAgICAweDlCQUYsIDB4OUJCRiwgMHg1Mzg2LCAweDlCQzAsIDB4OUJDMCwgMHgyNjM2LCAweDlCQzEsIDB4OUJDMSwgMHgyNjMwLA0KLSAgICAweDlCQzIsIDB4OUJDNiwgMHg1Mzk3LCAweDlCQzcsIDB4OUJDNywgMHgyNjM4LCAweDlCQzgsIDB4OUJDOCwgMHg1MzlDLA0KLSAgICAweDlCQzksIDB4OUJDOSwgMHgyMDBELCAweDlCQ0EsIDB4OUJDQSwgMHgyNjM3LCAweDlCQ0IsIDB4OUJEMywgMHg1MzlELA0KLSAgICAweDlCRDQsIDB4OUJENCwgMHgyNjQ1LCAweDlCRDUsIDB4OUJENSwgMHg1M0E2LCAweDlCRDYsIDB4OUJENiwgMHgyNjNBLA0KLSAgICAweDlCRDcsIDB4OUJEQSwgMHg1M0E3LCAweDlCREIsIDB4OUJEQiwgMHgyNjQzLCAweDlCREMsIDB4OUJEQywgMHg1M0FCLA0KLSAgICAweDlCREQsIDB4OUJERCwgMHgyNjQwLCAweDlCREUsIDB4OUJFMCwgMHg1M0FDLCAweDlCRTEsIDB4OUJFMSwgMHgyNjNELA0KLSAgICAweDlCRTIsIDB4OUJFMiwgMHgyNjQxLCAweDlCRTMsIDB4OUJFMywgMHg1M0FGLCAweDlCRTQsIDB4OUJFNCwgMHgyNjNFLA0KLSAgICAweDlCRTUsIDB4OUJFNiwgMHg1M0IwLCAweDlCRTcsIDB4OUJFNywgMHgyNjNGLCAweDlCRTgsIDB4OUJFOCwgMHgxRkMwLA0KLSAgICAweDlCRTksIDB4OUJFOSwgMHg1M0IyLCAweDlCRUEsIDB4OUJFQiwgMHgyNjNCLCAweDlCRUMsIDB4OUJFRiwgMHg1M0IzLA0KLSAgICAweDlCRjAsIDB4OUJGMCwgMHgyNjQyLCAweDlCRjEsIDB4OUJGMywgMHg1M0I3LCAweDlCRjQsIDB4OUJGNCwgMHgyNjQ0LA0KLSAgICAweDlCRjUsIDB4OUJGQywgMHg1M0JBLCAweDlCRkQsIDB4OUJGRCwgMHgyNjM5LCAweDlCRkUsIDB4OUJGRSwgMHg1M0MyLA0KLSAgICAweDlCRkYsIDB4OUJGRiwgMHgyNjRDLCAweDlDMDAsIDB4OUMwNywgMHg1M0MzLCAweDlDMDgsIDB4OUMwOCwgMHgyNjQ3LA0KLSAgICAweDlDMDksIDB4OUMwOSwgMHgyNjRCLCAweDlDMEEsIDB4OUMwQywgMHg1M0NCLCAweDlDMEQsIDB4OUMwRCwgMHgyNjQ5LA0KLSAgICAweDlDMEUsIDB4OUMwRiwgMHg1M0NFLCAweDlDMTAsIDB4OUMxMCwgMHgyNjQ4LCAweDlDMTEsIDB4OUMxMSwgMHg1M0QwLA0KLSAgICAweDlDMTIsIDB4OUMxMiwgMHgyNjRBLCAweDlDMTMsIDB4OUMxMywgMHgyMTA4LCAweDlDMTQsIDB4OUMxRiwgMHg1M0QxLA0KLSAgICAweDlDMjAsIDB4OUMyMCwgMHgyNjRELCAweDlDMjEsIDB4OUMyMiwgMHg1M0RELCAweDlDMjMsIDB4OUMyMywgMHgyNjM0LA0KLSAgICAweDlDMjQsIDB4OUMyNCwgMHg1M0RGLCAweDlDMjUsIDB4OUMyNSwgMHgyNjUxLCAweDlDMjYsIDB4OUMyNywgMHg1M0UwLA0KLSAgICAweDlDMjgsIDB4OUMyOCwgMHgyNjUwLCAweDlDMjksIDB4OUMyOSwgMHgyNjUyLCAweDlDMkEsIDB4OUMyQywgMHg1M0UyLA0KLSAgICAweDlDMkQsIDB4OUMyRCwgMHgyNjRGLCAweDlDMkUsIDB4OUMzMCwgMHg1M0U1LCAweDlDMzEsIDB4OUMzMSwgMHgyNjMyLA0KLSAgICAweDlDMzIsIDB4OUMzMiwgMHgyNjRFLCAweDlDMzMsIDB4OUMzMywgMHgyNjUzLCAweDlDMzQsIDB4OUMzNCwgMHg1M0U4LA0KLSAgICAweDlDMzUsIDB4OUMzNSwgMHgyNjU3LCAweDlDMzYsIDB4OUMzNiwgMHg1M0U5LCAweDlDMzcsIDB4OUMzNywgMHgyNjM1LA0KLSAgICAweDlDMzgsIDB4OUMzOCwgMHg1M0VBLCAweDlDMzksIDB4OUMzOSwgMHgyNjMzLCAweDlDM0EsIDB4OUMzQSwgMHg1M0VCLA0KLSAgICAweDlDM0IsIDB4OUMzQiwgMHgyNjU2LCAweDlDM0MsIDB4OUMzRCwgMHg1M0VDLCAweDlDM0UsIDB4OUMzRSwgMHgyNjU0LA0KLSAgICAweDlDM0YsIDB4OUM0NCwgMHg1M0VFLCAweDlDNDUsIDB4OUM0NSwgMHgyNjU4LCAweDlDNDYsIDB4OUM0NywgMHg1M0Y0LA0KLSAgICAweDlDNDgsIDB4OUM0OCwgMHgyNjU1LCAweDlDNDksIDB4OUM0OSwgMHgxRTRELCAweDlDNEEsIDB4OUM1MSwgMHg1M0Y2LA0KLSAgICAweDlDNTIsIDB4OUM1MiwgMHgyNjVCLCAweDlDNTMsIDB4OUM1MywgMHg1M0ZFLCAweDlDNTQsIDB4OUM1NCwgMHgyNjVBLA0KLSAgICAweDlDNTUsIDB4OUM1NSwgMHg1M0ZGLCAweDlDNTYsIDB4OUM1NiwgMHgyNjU5LCAweDlDNTcsIDB4OUM1NywgMHgyMDJFLA0KLSAgICAweDlDNTgsIDB4OUM1OCwgMHgyNjJGLCAweDlDNTksIDB4OUM1QywgMHg1NDAwLCAweDlDNUQsIDB4OUM1RCwgMHgyNjQ2LA0KLSAgICAweDlDNUUsIDB4OUM1RSwgMHg1NDA0LCAweDlDNUYsIDB4OUM1RiwgMHgyNjI2LCAweDlDNjAsIDB4OUM2NiwgMHg1NDA1LA0KLSAgICAweDlDNjcsIDB4OUM2NywgMHgyNjVDLCAweDlDNjgsIDB4OUM2QywgMHg1NDBDLCAweDlDNkQsIDB4OUM2RCwgMHgyNjJDLA0KLSAgICAweDlDNkUsIDB4OUM3NywgMHg1NDExLCAweDlDNzgsIDB4OUM3OCwgMHgyNjIzLCAweDlDNzksIDB4OUM3OSwgMHg1NDFCLA0KLSAgICAweDlDN0EsIDB4OUM3QSwgMHgyNjMxLCAweDlDN0IsIDB4OUM3QiwgMHg1NDFDLCAweDlDN0MsIDB4OUM3QywgMHgxMEM4LA0KLSAgICAweDlDN0QsIDB4OUM3RSwgMHg1NDFELCAweDlDN0YsIDB4OUM3RiwgMHgxRDg5LCAweDlDODAsIDB4OUM4MCwgMHg1NDFGLA0KLSAgICAweDlDODEsIDB4OUM4MSwgMHgwQTVBLCAweDlDODIsIDB4OUM4MiwgMHgxRDhBLCAweDlDODMsIDB4OUM4NCwgMHg1NDIwLA0KLSAgICAweDlDODUsIDB4OUM4OCwgMHgxRDhCLCAweDlDODksIDB4OUM4QSwgMHg1NDIyLCAweDlDOEIsIDB4OUM4QiwgMHgxRDkwLA0KLSAgICAweDlDOEMsIDB4OUM4QywgMHg1NDI0LCAweDlDOEQsIDB4OUM4RCwgMHgwNDE0LCAweDlDOEUsIDB4OUM4RSwgMHgxRDkxLA0KLSAgICAweDlDOEYsIDB4OUM4RiwgMHg1NDI1LCAweDlDOTAsIDB4OUM5MiwgMHgxRDkyLCAweDlDOTMsIDB4OUM5MywgMHg1NDI2LA0KLSAgICAweDlDOTQsIDB4OUM5NSwgMHgxRDk1LCAweDlDOTYsIDB4OUM5OSwgMHg1NDI3LCAweDlDOUEsIDB4OUM5QiwgMHgxRDk3LA0KLSAgICAweDlDOUMsIDB4OUM5QywgMHgwRjM3LCAweDlDOUQsIDB4OUM5RCwgMHg1NDJCLCAweDlDOUUsIDB4OUNBMywgMHgxRDk5LA0KLSAgICAweDlDQTQsIDB4OUNBNCwgMHgwOURCLCAweDlDQTUsIDB4OUNBOSwgMHgxRDlGLCAweDlDQUEsIDB4OUNBQSwgMHg1NDJDLA0KLSAgICAweDlDQUIsIDB4OUNBQiwgMHgxREE0LCAweDlDQUMsIDB4OUNBQywgMHg1NDJELCAweDlDQUQsIDB4OUNBRSwgMHgxREE1LA0KLSAgICAweDlDQUYsIDB4OUNBRiwgMHg1NDJFLCAweDlDQjAsIDB4OUNCNywgMHgxREE3LCAweDlDQjgsIDB4OUNCOCwgMHgwOEQ3LA0KLSAgICAweDlDQjksIDB4OUNCOSwgMHg1NDJGLCAweDlDQkEsIDB4OUNCRCwgMHgxREFGLCAweDlDQkUsIDB4OUNDMiwgMHg1NDMwLA0KLSAgICAweDlDQzMsIDB4OUNDMywgMHgwQ0Q1LCAweDlDQzQsIDB4OUNDNywgMHgxREIzLCAweDlDQzgsIDB4OUNDOSwgMHg1NDM1LA0KLSAgICAweDlDQ0EsIDB4OUNEMCwgMHgxREI3LCAweDlDRDEsIDB4OUNEMiwgMHg1NDM3LCAweDlDRDMsIDB4OUNENSwgMHgxREJFLA0KLSAgICAweDlDRDYsIDB4OUNENiwgMHgwNDU3LCAweDlDRDcsIDB4OUNEOSwgMHgxREMxLCAweDlDREEsIDB4OUNEQiwgMHg1NDM5LA0KLSAgICAweDlDREMsIDB4OUNERCwgMHgxREM0LCAweDlDREUsIDB4OUNERSwgMHgwQTI0LCAweDlDREYsIDB4OUNERiwgMHgxREM2LA0KLSAgICAweDlDRTAsIDB4OUNFMSwgMHg1NDNCLCAweDlDRTIsIDB4OUNFMiwgMHgxREM3LCAweDlDRTMsIDB4OUNFNCwgMHg1NDNELA0KLSAgICAweDlDRTUsIDB4OUNFNSwgMHgyMDlDLCAweDlDRTYsIDB4OUNFOCwgMHg1NDNGLCAweDlDRTksIDB4OUNFOSwgMHgyNTgwLA0KLSAgICAweDlDRUEsIDB4OUNFQiwgMHg1NDQyLCAweDlDRUMsIDB4OUNFQywgMHgyMkRDLCAweDlDRUQsIDB4OUNGMiwgMHg1NDQ0LA0KLSAgICAweDlDRjMsIDB4OUNGMywgMHgxRjA1LCAweDlDRjQsIDB4OUNGNCwgMHgyMDhCLCAweDlDRjUsIDB4OUNGNSwgMHg1NDRBLA0KLSAgICAweDlDRjYsIDB4OUNGNiwgMHgyNTgxLCAweDlDRjcsIDB4OUNGRiwgMHg1NDRCLCAweDlEMDAsIDB4OUQwNSwgMHg1NDU0LA0KLSAgICAweDlEMDYsIDB4OUQwNiwgMHgyNTgzLCAweDlEMDcsIDB4OUQwNywgMHgyNTgyLCAweDlEMDgsIDB4OUQwOCwgMHg1NDVBLA0KLSAgICAweDlEMDksIDB4OUQwOSwgMHgyMUVFLCAweDlEMEEsIDB4OUQxNCwgMHg1NDVCLCAweDlEMTUsIDB4OUQxNSwgMHgyMTgyLA0KLSAgICAweDlEMTYsIDB4OUQxQSwgMHg1NDY2LCAweDlEMUIsIDB4OUQxQiwgMHgyMjQzLCAweDlEMUMsIDB4OUQxQywgMHg1NDZCLA0KLSAgICAweDlEMUQsIDB4OUQxRCwgMHgyNTg3LCAweDlEMUUsIDB4OUQxRSwgMHg1NDZDLCAweDlEMUYsIDB4OUQxRiwgMHgyNTg4LA0KLSAgICAweDlEMjAsIDB4OUQyMiwgMHg1NDZELCAweDlEMjMsIDB4OUQyMywgMHgyNTg0LCAweDlEMjQsIDB4OUQyNSwgMHg1NDcwLA0KLSAgICAweDlEMjYsIDB4OUQyNiwgMHgyMUZELCAweDlEMjcsIDB4OUQyNywgMHg1NDcyLCAweDlEMjgsIDB4OUQyOCwgMHgyMUVGLA0KLSAgICAweDlEMjksIDB4OUQyRSwgMHg1NDczLCAweDlEMkYsIDB4OUQyRiwgMHgyNThBLCAweDlEMzAsIDB4OUQzMCwgMHgyNThDLA0KLSAgICAweDlEMzEsIDB4OUQzQSwgMHg1NDc5LCAweDlEM0IsIDB4OUQzQiwgMHgxRjQ3LCAweDlEM0MsIDB4OUQzRSwgMHg1NDgzLA0KLSAgICAweDlEM0YsIDB4OUQzRiwgMHgxRjFELCAweDlENDAsIDB4OUQ0MSwgMHg1NDg2LCAweDlENDIsIDB4OUQ0MiwgMHgyNThELA0KLSAgICAweDlENDMsIDB4OUQ1MCwgMHg1NDg4LCAweDlENTEsIDB4OUQ1MSwgMHgxRkQwLCAweDlENTIsIDB4OUQ1MiwgMHgyNTkyLA0KLSAgICAweDlENTMsIDB4OUQ1MywgMHgyNThGLCAweDlENTQsIDB4OUQ1QiwgMHg1NDk2LCAweDlENUMsIDB4OUQ1QywgMHgyNTk0LA0KLSAgICAweDlENUQsIDB4OUQ1RCwgMHgxRUUwLCAweDlENUUsIDB4OUQ1RiwgMHg1NDlFLCAweDlENjAsIDB4OUQ2MCwgMHgyNTkxLA0KLSAgICAweDlENjEsIDB4OUQ2MSwgMHgyNTk1LCAweDlENjIsIDB4OUQ2OSwgMHg1NEEwLCAweDlENkEsIDB4OUQ2QSwgMHgyNTk3LA0KLSAgICAweDlENkIsIDB4OUQ2QiwgMHg1NEE4LCAweDlENkMsIDB4OUQ2QywgMHgyMEI2LCAweDlENkQsIDB4OUQ2RSwgMHg1NEE5LA0KLSAgICAweDlENkYsIDB4OUQ2RiwgMHgyNTk4LCAweDlENzAsIDB4OUQ3MSwgMHg1NEFCLCAweDlENzIsIDB4OUQ3MiwgMHgyMEY2LA0KLSAgICAweDlENzMsIDB4OUQ4NiwgMHg1NEFELCAweDlEODcsIDB4OUQ4NywgMHgyNTg1LCAweDlEODgsIDB4OUQ4OCwgMHg1NEMxLA0KLSAgICAweDlEODksIDB4OUQ4OSwgMHgyNTk5LCAweDlEOEEsIDB4OUQ5MiwgMHg1NEMyLCAweDlEOTMsIDB4OUQ5MywgMHgyNTk2LA0KLSAgICAweDlEOTQsIDB4OUQ5NywgMHg1NENCLCAweDlEOTgsIDB4OUQ5OCwgMHgyNTlBLCAweDlEOTksIDB4OUQ5OSwgMHg1NENGLA0KLSAgICAweDlEOUEsIDB4OUQ5QSwgMHgyNTlCLCAweDlEOUIsIDB4OURBNCwgMHg1NEQwLCAweDlEQTUsIDB4OURBNSwgMHgyNTlELA0KLSAgICAweDlEQTYsIDB4OURBOCwgMHg1NERBLCAweDlEQTksIDB4OURBOSwgMHgyNTlFLCAweDlEQUEsIDB4OURBRSwgMHg1NERELA0KLSAgICAweDlEQUYsIDB4OURBRiwgMHgyMzRDLCAweDlEQjAsIDB4OURCMywgMHg1NEUyLCAweDlEQjQsIDB4OURCNCwgMHgxRjQ0LA0KLSAgICAweDlEQjUsIDB4OURCQSwgMHg1NEU2LCAweDlEQkIsIDB4OURCQiwgMHgyNjYwLCAweDlEQkMsIDB4OURCQywgMHgyNUEwLA0KLSAgICAweDlEQkQsIDB4OURCRiwgMHg1NEVDLCAweDlEQzAsIDB4OURDMCwgMHgyNTlDLCAweDlEQzEsIDB4OURDMSwgMHg1NEVGLA0KLSAgICAweDlEQzIsIDB4OURDMiwgMHgyNTlGLCAweDlEQzMsIDB4OURDMywgMHg1NEYwLCAweDlEQzQsIDB4OURDNCwgMHgxRjZDLA0KLSAgICAweDlEQzUsIDB4OUREMiwgMHg1NEYxLCAweDlERDMsIDB4OUREMywgMHgyNUEyLCAweDlERDQsIDB4OURENiwgMHg1NEZGLA0KLSAgICAweDlERDcsIDB4OURENywgMHgyMEFFLCAweDlERDgsIDB4OUREOCwgMHg1NTAyLCAweDlERDksIDB4OUREOSwgMHgyNThCLA0KLSAgICAweDlEREEsIDB4OUREQSwgMHgyNUEzLCAweDlEREIsIDB4OURFNCwgMHg1NTAzLCAweDlERTUsIDB4OURFNSwgMHgyNTg5LA0KLSAgICAweDlERTYsIDB4OURFNiwgMHgyNUE1LCAweDlERTcsIDB4OURFRSwgMHg1NTBELCAweDlERUYsIDB4OURFRiwgMHgyNUE0LA0KLSAgICAweDlERjAsIDB4OURGMSwgMHg1NTE1LCAweDlERjIsIDB4OURGMiwgMHgyNUE2LCAweDlERjMsIDB4OURGMywgMHgyNTkzLA0KLSAgICAweDlERjQsIDB4OURGNywgMHg1NTE3LCAweDlERjgsIDB4OURGOCwgMHgyNUE3LCAweDlERjksIDB4OURGOSwgMHgyMjIyLA0KLSAgICAweDlERkEsIDB4OURGQSwgMHgyNUE5LCAweDlERkIsIDB4OURGRiwgMHg1NTFCLCAweDlFMDAsIDB4OUUwQiwgMHg1NTIwLA0KLSAgICAweDlFMEMsIDB4OUUwQywgMHgyNUE4LCAweDlFMEQsIDB4OUUxNCwgMHg1NTJDLCAweDlFMTUsIDB4OUUxNSwgMHgyNTg2LA0KLSAgICAweDlFMTYsIDB4OUUxOSwgMHg1NTM0LCAweDlFMUEsIDB4OUUxQSwgMHgyNUExLCAweDlFMUIsIDB4OUUxQiwgMHgyNUFBLA0KLSAgICAweDlFMUMsIDB4OUUxQywgMHg1NTM4LCAweDlFMUQsIDB4OUUxRCwgMHgyNTkwLCAweDlFMUUsIDB4OUUxRSwgMHgyNThFLA0KLSAgICAweDlFMUYsIDB4OUUxRiwgMHgwQjU0LCAweDlFMjAsIDB4OUUyMCwgMHgxQjM1LCAweDlFMjEsIDB4OUUyMSwgMHgwODE5LA0KLSAgICAweDlFMjIsIDB4OUUyMiwgMHgxQjM2LCAweDlFMjMsIDB4OUUyMywgMHgwQUZFLCAweDlFMjQsIDB4OUUyNCwgMHg1NTM5LA0KLSAgICAweDlFMjUsIDB4OUUyNSwgMHgwQjc5LCAweDlFMjYsIDB4OUUyNiwgMHgwRkU0LCAweDlFMjcsIDB4OUUyNywgMHg1NTNBLA0KLSAgICAweDlFMjgsIDB4OUUyQywgMHgxQjM3LCAweDlFMkQsIDB4OUUyRCwgMHgwRkU1LCAweDlFMkUsIDB4OUUyRSwgMHg1NTNCLA0KLSAgICAweDlFMkYsIDB4OUUyRiwgMHgxMDE1LCAweDlFMzAsIDB4OUUzMCwgMHg1NTNDLCAweDlFMzEsIDB4OUUzMSwgMHgxQjNELA0KLSAgICAweDlFMzIsIDB4OUUzMiwgMHgxQjNDLCAweDlFMzMsIDB4OUUzMywgMHgxMEVBLCAweDlFMzQsIDB4OUUzNCwgMHg1NTNELA0KLSAgICAweDlFMzUsIDB4OUUzNSwgMHgwRTgzLCAweDlFMzYsIDB4OUUzNiwgMHgxQjNFLCAweDlFMzcsIDB4OUUzNywgMHgxQjQwLA0KLSAgICAweDlFMzgsIDB4OUUzOCwgMHgxQjNGLCAweDlFMzksIDB4OUUzQSwgMHgxQjQxLCAweDlFM0IsIDB4OUUzQywgMHg1NTNFLA0KLSAgICAweDlFM0QsIDB4OUUzRCwgMHgwNkU2LCAweDlFM0UsIDB4OUUzRSwgMHgxQjQzLCAweDlFM0YsIDB4OUUzRiwgMHgwNzlGLA0KLSAgICAweDlFNDAsIDB4OUU0MCwgMHg1NTQwLCAweDlFNDEsIDB4OUU0MiwgMHgxQjQ0LCAweDlFNDMsIDB4OUU0MywgMHgwOTE4LA0KLSAgICAweDlFNDQsIDB4OUU0NCwgMHgxQjQ2LCAweDlFNDUsIDB4OUU0NSwgMHgwNjJCLCAweDlFNDYsIDB4OUU0OSwgMHgxQjQ3LA0KLSAgICAweDlFNEEsIDB4OUU0QSwgMHgwQzkwLCAweDlFNEIsIDB4OUU0QywgMHgxQjRCLCAweDlFNEQsIDB4OUU0RCwgMHg1NTQxLA0KLSAgICAweDlFNEUsIDB4OUU0RSwgMHgxQjRELCAweDlFNEYsIDB4OUU0RiwgMHgwQkI1LCAweDlFNTAsIDB4OUU1MCwgMHg1NTQyLA0KLSAgICAweDlFNTEsIDB4OUU1MSwgMHgxQjRFLCAweDlFNTIsIDB4OUU1NCwgMHg1NTQzLCAweDlFNTUsIDB4OUU1NSwgMHgxQjRGLA0KLSAgICAweDlFNTYsIDB4OUU1NiwgMHg1NTQ2LCAweDlFNTcsIDB4OUU1NywgMHgxQjUwLCAweDlFNTgsIDB4OUU1OCwgMHgxREQ1LA0KLSAgICAweDlFNTksIDB4OUU1OSwgMHg1NTQ3LCAweDlFNUEsIDB4OUU1QywgMHgxQjUxLCAweDlFNUQsIDB4OUU1RCwgMHg1NTQ4LA0KLSAgICAweDlFNUUsIDB4OUU1RSwgMHgxQjU0LCAweDlFNUYsIDB4OUU2MiwgMHg1NTQ5LCAweDlFNjMsIDB4OUU2MywgMHgxQjU1LA0KLSAgICAweDlFNjQsIDB4OUU2NCwgMHgwNzhFLCAweDlFNjUsIDB4OUU2NSwgMHg1NTRELCAweDlFNjYsIDB4OUU2QywgMHgxQjU2LA0KLSAgICAweDlFNkQsIDB4OUU2RCwgMHgxQjVFLCAweDlFNkUsIDB4OUU2RiwgMHg1NTRFLCAweDlFNzAsIDB4OUU3MCwgMHgxMDhBLA0KLSAgICAweDlFNzEsIDB4OUU3MSwgMHgxQjVELCAweDlFNzIsIDB4OUU3MiwgMHg1NTUwLCAweDlFNzMsIDB4OUU3MywgMHgxQjVGLA0KLSAgICAweDlFNzQsIDB4OUU3NCwgMHg1NTUxLCAweDlFNzUsIDB4OUU3NSwgMHgyNjg4LCAweDlFNzYsIDB4OUU3OCwgMHg1NTUyLA0KLSAgICAweDlFNzksIDB4OUU3OSwgMHgyNjlFLCAweDlFN0EsIDB4OUU3QSwgMHgyNUZCLCAweDlFN0IsIDB4OUU3QiwgMHg1NTU1LA0KLSAgICAweDlFN0MsIDB4OUU3QywgMHgxRjhDLCAweDlFN0QsIDB4OUU3RCwgMHgyMUY0LCAweDlFN0UsIDB4OUU3RSwgMHgxRDE2LA0KLSAgICAweDlFN0YsIDB4OUU3RiwgMHgwQTYwLCAweDlFODAsIDB4OUU4MSwgMHg1NTU2LCAweDlFODIsIDB4OUU4MiwgMHgxREZDLA0KLSAgICAweDlFODMsIDB4OUU4NiwgMHg1NTU4LCAweDlFODcsIDB4OUU4OCwgMHgxREZELCAweDlFODksIDB4OUU4QSwgMHg1NTVDLA0KLSAgICAweDlFOEIsIDB4OUU4QiwgMHgxREZGLCAweDlFOEMsIDB4OUU5MSwgMHg1NTVFLCAweDlFOTIsIDB4OUU5MiwgMHgxRTAwLA0KLSAgICAweDlFOTMsIDB4OUU5MywgMHgwQTVCLCAweDlFOTQsIDB4OUU5NiwgMHg1NTY0LCAweDlFOTcsIDB4OUU5NywgMHgyMDBGLA0KLSAgICAweDlFOTgsIDB4OUU5QywgMHg1NTY3LCAweDlFOUQsIDB4OUU5RCwgMHgxRTAyLCAweDlFOUUsIDB4OUU5RSwgMHg1NTZDLA0KLSAgICAweDlFOUYsIDB4OUU5RiwgMHgxRTAzLCAweDlFQTAsIDB4OUVBNCwgMHg1NTZELCAweDlFQTUsIDB4OUVBNSwgMHgyMDcxLA0KLSAgICAweDlFQTYsIDB4OUVBNiwgMHgwQTlBLCAweDlFQTcsIDB4OUVBOCwgMHg1NTcyLCAweDlFQTksIDB4OUVBOSwgMHgyNUY3LA0KLSAgICAweDlFQUEsIDB4OUVBRSwgMHg1NTc0LCAweDlFQUYsIDB4OUVBRiwgMHgyNjk2LCAweDlFQjAsIDB4OUVCMywgMHg1NTc5LA0KLSAgICAweDlFQjQsIDB4OUVCNCwgMHgxQ0VFLCAweDlFQjUsIDB4OUVCNSwgMHgyNjhGLCAweDlFQjYsIDB4OUVCNywgMHg1NTdELA0KLSAgICAweDlFQjgsIDB4OUVCOCwgMHgxQ0VELCAweDlFQjksIDB4OUVCQSwgMHg1NTdGLCAweDlFQkIsIDB4OUVCQiwgMHgwQTkwLA0KLSAgICAweDlFQkMsIDB4OUVCQywgMHg1NTgxLCAweDlFQkQsIDB4OUVCRSwgMHgxREY5LCAweDlFQkYsIDB4OUVDMywgMHg1NTgyLA0KLSAgICAweDlFQzQsIDB4OUVDNCwgMHgwN0RCLCAweDlFQzUsIDB4OUVDOCwgMHg1NTg3LCAweDlFQzksIDB4OUVDOSwgMHgxMkY4LA0KLSAgICAweDlFQ0EsIDB4OUVDQiwgMHg1NThCLCAweDlFQ0MsIDB4OUVDQywgMHgyMkRBLCAweDlFQ0QsIDB4OUVDRCwgMHgwRDg5LA0KLSAgICAweDlFQ0UsIDB4OUVDRSwgMHgwOUQzLCAweDlFQ0YsIDB4OUVDRiwgMHgxQjJBLCAweDlFRDAsIDB4OUVEMCwgMHg1NThELA0KLSAgICAweDlFRDEsIDB4OUVEMSwgMHgwNzkxLCAweDlFRDIsIDB4OUVEMywgMHg1NThFLCAweDlFRDQsIDB4OUVENCwgMHgwQzJBLA0KLSAgICAweDlFRDUsIDB4OUVENywgMHg1NTkwLCAweDlFRDgsIDB4OUVEOCwgMHgwQjBGLCAweDlFRDksIDB4OUVEQSwgMHg1NTkzLA0KLSAgICAweDlFREIsIDB4OUVERCwgMHgxRTA0LCAweDlFREUsIDB4OUVERSwgMHgxRUMxLCAweDlFREYsIDB4OUVERiwgMHgxRTA4LA0KLSAgICAweDlFRTAsIDB4OUVFMCwgMHgxRTA3LCAweDlFRTEsIDB4OUVFMSwgMHg1NTk1LCAweDlFRTIsIDB4OUVFMiwgMHgxRTA5LA0KLSAgICAweDlFRTMsIDB4OUVFNCwgMHg1NTk2LCAweDlFRTUsIDB4OUVFNSwgMHgxRTBDLCAweDlFRTYsIDB4OUVFNiwgMHg1NTk4LA0KLSAgICAweDlFRTcsIDB4OUVFNywgMHgxRTBCLCAweDlFRTgsIDB4OUVFOCwgMHgxRUIzLCAweDlFRTksIDB4OUVFOSwgMHgxRTBBLA0KLSAgICAweDlFRUEsIDB4OUVFQSwgMHgxRTBELCAweDlFRUIsIDB4OUVFRSwgMHg1NTk5LCAweDlFRUYsIDB4OUVFRiwgMHgxRTBFLA0KLSAgICAweDlFRjAsIDB4OUVGMSwgMHg1NTlELCAweDlFRjIsIDB4OUVGMiwgMHgyNjZBLCAweDlFRjMsIDB4OUVGMywgMHg1NTlGLA0KLSAgICAweDlFRjQsIDB4OUVGNCwgMHgyNjhBLCAweDlFRjUsIDB4OUVGNiwgMHg1NUEwLCAweDlFRjcsIDB4OUVGNywgMHgyNjY5LA0KLSAgICAweDlFRjgsIDB4OUVGOCwgMHg1NUEyLCAweDlFRjksIDB4OUVGOSwgMHgxQTU1LCAweDlFRkEsIDB4OUVGQSwgMHg1NUEzLA0KLSAgICAweDlFRkIsIDB4OUVGQywgMHgxQTU2LCAweDlFRkQsIDB4OUVGRCwgMHgyNjE4LCAweDlFRkUsIDB4OUVGRSwgMHgxRDc2LA0KLSAgICAweDlFRkYsIDB4OUVGRiwgMHgyNjE5LCAweDlGMDAsIDB4OUYwOCwgMHg1NUE0LCAweDlGMDksIDB4OUYwOSwgMHgyNjFBLA0KLSAgICAweDlGMEEsIDB4OUYwQSwgMHg1NUFELCAweDlGMEIsIDB4OUYwQiwgMHgxRDc3LCAweDlGMEMsIDB4OUYwQywgMHg1NUFFLA0KLSAgICAweDlGMEQsIDB4OUYwRCwgMHgxRDc4LCAweDlGMEUsIDB4OUYwRSwgMHgwNUU1LCAweDlGMEYsIDB4OUYwRiwgMHg1NUFGLA0KLSAgICAweDlGMTAsIDB4OUYxMCwgMHgxMjc0LCAweDlGMTEsIDB4OUYxMiwgMHg1NUIwLCAweDlGMTMsIDB4OUYxMywgMHgwNzFELA0KLSAgICAweDlGMTQsIDB4OUYxNCwgMHg1NUIyLCAweDlGMTUsIDB4OUYxNSwgMHgyNjczLCAweDlGMTYsIDB4OUYxNiwgMHg1NUIzLA0KLSAgICAweDlGMTcsIDB4OUYxNywgMHgxMjcxLCAweDlGMTgsIDB4OUYxOCwgMHg1NUI0LCAweDlGMTksIDB4OUYxOSwgMHgxM0RGLA0KLSAgICAweDlGMUEsIDB4OUYxRiwgMHg1NUI1LCAweDlGMjAsIDB4OUYyMCwgMHgwRDhBLCAweDlGMjEsIDB4OUYyMSwgMHg1NUJCLA0KLSAgICAweDlGMjIsIDB4OUYyMiwgMHgxRTBGLCAweDlGMjMsIDB4OUYyQiwgMHg1NUJDLCAweDlGMkMsIDB4OUYyQywgMHgxRTEwLA0KLSAgICAweDlGMkQsIDB4OUYyRSwgMHg1NUM1LCAweDlGMkYsIDB4OUYyRiwgMHgxRTExLCAweDlGMzAsIDB4OUYzNiwgMHg1NUM3LA0KLSAgICAweDlGMzcsIDB4OUYzNywgMHgxRTEzLCAweDlGMzgsIDB4OUYzOCwgMHg1NUNFLCAweDlGMzksIDB4OUYzOSwgMHgxRTEyLA0KLSAgICAweDlGM0EsIDB4OUYzQSwgMHg1NUNGLCAweDlGM0IsIDB4OUYzQiwgMHgwNDMwLCAweDlGM0MsIDB4OUYzQywgMHg1NUQwLA0KLSAgICAweDlGM0QsIDB4OUYzRSwgMHgxRTE0LCAweDlGM0YsIDB4OUY0MywgMHg1NUQxLCAweDlGNDQsIDB4OUY0NCwgMHgxRTE2LA0KLSAgICAweDlGNDUsIDB4OUY0OSwgMHg1NUQ2LCAweDlGNEEsIDB4OUY0QSwgMHgyMEM2LCAweDlGNEIsIDB4OUY0QiwgMHgyMjZCLA0KLSAgICAweDlGNEMsIDB4OUY0RSwgMHg1NURCLCAweDlGNEYsIDB4OUY0RiwgMHgyNEQzLCAweDlGNTAsIDB4OUY1MCwgMHgwQzBBLA0KLSAgICAweDlGNTEsIDB4OUY1MSwgMHgxOUMyLCAweDlGNTIsIDB4OUY1MiwgMHgxRTg2LCAweDlGNTMsIDB4OUY1MywgMHg1NURFLA0KLSAgICAweDlGNTQsIDB4OUY1NCwgMHgyNjBGLCAweDlGNTUsIDB4OUY1OCwgMHg1NURGLCAweDlGNTksIDB4OUY1OSwgMHgyNjExLA0KLSAgICAweDlGNUEsIDB4OUY1QiwgMHg1NUUzLCAweDlGNUMsIDB4OUY1QywgMHgyNjEzLCAweDlGNUQsIDB4OUY1RSwgMHg1NUU1LA0KLSAgICAweDlGNUYsIDB4OUY1RiwgMHgyNjEwLCAweDlGNjAsIDB4OUY2MCwgMHgyNjEyLCAweDlGNjEsIDB4OUY2MSwgMHgyMDMwLA0KLSAgICAweDlGNjIsIDB4OUY2MiwgMHg1NUU3LCAweDlGNjMsIDB4OUY2MywgMHgyNjcxLCAweDlGNjQsIDB4OUY2NSwgMHg1NUU4LA0KLSAgICAweDlGNjYsIDB4OUY2NiwgMHgyNjE0LCAweDlGNjcsIDB4OUY2OSwgMHg1NUVBLCAweDlGNkEsIDB4OUY2QSwgMHgyNjE2LA0KLSAgICAweDlGNkIsIDB4OUY2QiwgMHg1NUVELCAweDlGNkMsIDB4OUY2QywgMHgyNjE1LCAweDlGNkQsIDB4OUY3MSwgMHg1NUVFLA0KLSAgICAweDlGNzIsIDB4OUY3MiwgMHgyMEYyLCAweDlGNzMsIDB4OUY3NiwgMHg1NUYzLCAweDlGNzcsIDB4OUY3NywgMHgyNjE3LA0KLSAgICAweDlGNzgsIDB4OUY3RSwgMHg1NUY3LCAweDlGN0YsIDB4OUY3RiwgMHgwNTAyLCAweDlGODAsIDB4OUY4MCwgMHgxRDZELA0KLSAgICAweDlGODEsIDB4OUY4MiwgMHg1NUZFLCAweDlGODMsIDB4OUY4MywgMHgxRDZFLCAweDlGODQsIDB4OUY4NCwgMHgwQTJELA0KLSAgICAweDlGODUsIDB4OUY4QSwgMHgxRDZGLCAweDlGOEIsIDB4OUY4QiwgMHgwQzdFLCAweDlGOEMsIDB4OUY4QywgMHgxRDc1LA0KLSAgICAweDlGOEQsIDB4OUY4RCwgMHgyMDM3LCAweDlGOEUsIDB4OUY4RiwgMHg1NjAwLCAweDlGOTAsIDB4OUY5MCwgMHgyMEIzLA0KLSAgICAweDlGOTEsIDB4OUY5MywgMHg1NjAyLCAweDlGOTQsIDB4OUY5NCwgMHgxRjIyLCAweDlGOTUsIDB4OUY5NSwgMHgyNEVELA0KLSAgICAweDlGOTYsIDB4OUY5OCwgMHg1NjA1LCAweDlGOTksIDB4OUY5OSwgMHgwQTQzLCAweDlGOUEsIDB4OUY5QSwgMHgwNzAxLA0KLSAgICAweDlGOUIsIDB4OUY5QiwgMHgxQTU0LCAweDlGOUMsIDB4OUY5QywgMHgxRjM0LCAweDlGOUQsIDB4OUY5RSwgMHg1NjA4LA0KLSAgICAweDlGOUYsIDB4OUY5RiwgMHgwNzQzLCAweDlGQTAsIDB4OUZBMCwgMHgxMkYzLCAweDlGQTEsIDB4OUZBNSwgMHg1NjBBLA0KLSAgICAweEU4MTYsIDB4RTgxOCwgMHg1NjIwLCAweEU4MUUsIDB4RTgxRSwgMHg1NjI4LCAweEU4MjYsIDB4RTgyNiwgMHg1NjMwLA0KLSAgICAweEU4MkIsIDB4RTgyQywgMHg1NjM1LCAweEU4MzEsIDB4RTgzMiwgMHg1NjNCLCAweEU4M0IsIDB4RTgzQiwgMHg1NjQ1LA0KLSAgICAweEU4NDMsIDB4RTg0MywgMHg1NjRELCAweEU4NTQsIDB4RTg1NSwgMHg1NjVFLCAweEU4NjQsIDB4RTg2NCwgMHg1NjZFLA0KLSAgICAweEY5MkMsIDB4RjkyQywgMHg1NjBGLCAweEZBMEQsIDB4RkEwRiwgMHg1NjEwLCAweEZBMTEsIDB4RkExMSwgMHg1NjEzLA0KLSAgICAweEZBMTMsIDB4RkExNCwgMHg1NjE0LCAweEZBMTgsIDB4RkExOCwgMHg1NjE2LCAweEZBMUYsIDB4RkEyMSwgMHg1NjE3LA0KLSAgICAweEZBMjMsIDB4RkEyNCwgMHg1NjFBLCAweEZBMjcsIDB4RkEyOSwgMHg1NjFDLCAweEZFMzAsIDB4RkUzMCwgMHgyNzFELA0KLSAgICAweEZFNDksIDB4RkU1MiwgMHgyNzJCLCAweEZFNTQsIDB4RkU1NywgMHgyNzM1LCAweEZFNTksIDB4RkU2NiwgMHgyNzM5LA0KLSAgICAweEZFNjgsIDB4RkU2QiwgMHgyNzQ3LCAweEZGMDEsIDB4RkYwMywgMHgwMTA2LCAweEZGMDQsIDB4RkYwNCwgMHgwMEE2LA0KLSAgICAweEZGMDUsIDB4RkY1RCwgMHgwMTBBLCAweEZGNUUsIDB4RkY1RSwgMHgwMDZBLCAweEZGRTAsIDB4RkZFMSwgMHgwMEE4LA0KLSAgICAweEZGRTIsIDB4RkZFMiwgMHgyNzFFLCAweEZGRTMsIDB4RkZFMywgMHgwMTYzLCAweEZGRTQsIDB4RkZFNCwgMHgyNzFGLA0KLSAgICAweEZGRTUsIDB4RkZFNSwgMHgwMTA5LA0KLX07DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX1VuaUdCX1VDUzJfSF80WzEzODI1ICogM10gPSB7CisgICAgMHgwMDIwLCAweDAwN0UsIDB4MDAwMSwgMHgwMEE0LCAweDAwQTQsIDB4MDBBNywgMHgwMEE1LCAweDAwQTUsIDB4NTc1MiwKKyAgICAweDAwQTcsIDB4MDBBNywgMHgwMEFCLCAweDAwQTgsIDB4MDBBOCwgMHgwMDY2LCAweDAwQjAsIDB4MDBCMCwgMHgwMEEyLAorICAgIDB4MDBCMSwgMHgwMEIxLCAweDAwN0YsIDB4MDBENywgMHgwMEQ3LCAweDAwODAsIDB4MDBFMCwgMHgwMEUwLCAweDAyOUYsCisgICAgMHgwMEUxLCAweDAwRTEsIDB4MDI5RCwgMHgwMEU4LCAweDAwRTgsIDB4MDJBMywgMHgwMEU5LCAweDAwRTksIDB4MDJBMSwKKyAgICAweDAwRUEsIDB4MDBFQSwgMHgwMkI1LCAweDAwRUMsIDB4MDBFQywgMHgwMkE3LCAweDAwRUQsIDB4MDBFRCwgMHgwMkE1LAorICAgIDB4MDBGMiwgMHgwMEYyLCAweDAyQUIsIDB4MDBGMywgMHgwMEYzLCAweDAyQTksIDB4MDBGNywgMHgwMEY3LCAweDAwODEsCisgICAgMHgwMEY5LCAweDAwRjksIDB4MDJBRiwgMHgwMEZBLCAweDAwRkEsIDB4MDJBRCwgMHgwMEZDLCAweDAwRkMsIDB4MDJCNCwKKyAgICAweDAxMDEsIDB4MDEwMSwgMHgwMjlDLCAweDAxMTMsIDB4MDExMywgMHgwMkEwLCAweDAxMUIsIDB4MDExQiwgMHgwMkEyLAorICAgIDB4MDEyQiwgMHgwMTJCLCAweDAyQTQsIDB4MDE0RCwgMHgwMTRELCAweDAyQTgsIDB4MDE2QiwgMHgwMTZCLCAweDAyQUMsCisgICAgMHgwMUNFLCAweDAxQ0UsIDB4MDI5RSwgMHgwMUQwLCAweDAxRDAsIDB4MDJBNiwgMHgwMUQyLCAweDAxRDIsIDB4MDJBQSwKKyAgICAweDAxRDQsIDB4MDFENCwgMHgwMkFFLCAweDAxRDYsIDB4MDFENiwgMHgwMkIwLCAweDAxRDgsIDB4MDFEOCwgMHgwMkIxLAorICAgIDB4MDFEQSwgMHgwMURBLCAweDAyQjIsIDB4MDFEQywgMHgwMURDLCAweDAyQjMsIDB4MDFGOSwgMHgwMUY5LCAweDAyQkEsCisgICAgMHgwMkM3LCAweDAyQzcsIDB4MDA2NSwgMHgwMkM5LCAweDAyQzksIDB4MDA2NCwgMHgwMkNBLCAweDAyQ0IsIDB4MjZCMywKKyAgICAweDAyRDksIDB4MDJEOSwgMHgyNkI1LCAweDAzOTEsIDB4MDNBMSwgMHgwMjBELCAweDAzQTMsIDB4MDNBOSwgMHgwMjFFLAorICAgIDB4MDNCMSwgMHgwM0MxLCAweDAyMjUsIDB4MDNDMywgMHgwM0M5LCAweDAyMzYsIDB4MDQwMSwgMHgwNDAxLCAweDAyNjAsCisgICAgMHgwNDEwLCAweDA0MTUsIDB4MDI1QSwgMHgwNDE2LCAweDA0MzUsIDB4MDI2MSwgMHgwNDM2LCAweDA0NEYsIDB4MDI4MiwKKyAgICAweDA0NTEsIDB4MDQ1MSwgMHgwMjgxLCAweDFFM0YsIDB4MUUzRiwgMHgwMkI3LCAweDIwMTAsIDB4MjAxMCwgMHgyNzIyLAorICAgIDB4MjAxMywgMHgyMDEzLCAweDI2QjYsIDB4MjAxNCwgMHgyMDE0LCAweDAwNjksIDB4MjAxNSwgMHgyMDE1LCAweDI2QjcsCisgICAgMHgyMDE2LCAweDIwMTYsIDB4MDA2QiwgMHgyMDE4LCAweDIwMTksIDB4MDA2RCwgMHgyMDFDLCAweDIwMUQsIDB4MDA2RiwKKyAgICAweDIwMjUsIDB4MjAyNSwgMHgyNkI4LCAweDIwMjYsIDB4MjAyNiwgMHgwMDZDLCAweDIwMzAsIDB4MjAzMCwgMHgwMEFBLAorICAgIDB4MjAzMiwgMHgyMDMzLCAweDAwQTMsIDB4MjAzNSwgMHgyMDM1LCAweDI2QjksIDB4MjAzQiwgMHgyMDNCLCAweDAwQjgsCisgICAgMHgyMEFDLCAweDIwQUMsIDB4NTc1MSwgMHgyMTAzLCAweDIxMDMsIDB4MDBBNSwgMHgyMTA1LCAweDIxMDUsIDB4MjZCQSwKKyAgICAweDIxMDksIDB4MjEwOSwgMHgyNkJCLCAweDIxMTYsIDB4MjExNiwgMHgwMEFDLCAweDIxMjEsIDB4MjEyMSwgMHgyNzIwLAorICAgIDB4MjE2MCwgMHgyMTZCLCAweDAwRkEsIDB4MjE3MCwgMHgyMTc5LCAweDI2QTksIDB4MjE5MCwgMHgyMTkxLCAweDAwQkEsCisgICAgMHgyMTkyLCAweDIxOTIsIDB4MDBCOSwgMHgyMTkzLCAweDIxOTMsIDB4MDBCQywgMHgyMTk2LCAweDIxOTksIDB4MjZCQywKKyAgICAweDIyMDgsIDB4MjIwOCwgMHgwMDg5LCAweDIyMEYsIDB4MjIwRiwgMHgwMDg2LCAweDIyMTEsIDB4MjIxMSwgMHgwMDg1LAorICAgIDB4MjIxNSwgMHgyMjE1LCAweDI2QzAsIDB4MjIxQSwgMHgyMjFBLCAweDAwOEIsIDB4MjIxRCwgMHgyMjFELCAweDAwOTcsCisgICAgMHgyMjFFLCAweDIyMUUsIDB4MDA5RCwgMHgyMjFGLCAweDIyMUYsIDB4MjZDMSwgMHgyMjIwLCAweDIyMjAsIDB4MDA4RSwKKyAgICAweDIyMjMsIDB4MjIyMywgMHgyNkMyLCAweDIyMjUsIDB4MjIyNSwgMHgwMDhELCAweDIyMjcsIDB4MjIyOCwgMHgwMDgzLAorICAgIDB4MjIyOSwgMHgyMjI5LCAweDAwODgsIDB4MjIyQSwgMHgyMjJBLCAweDAwODcsIDB4MjIyQiwgMHgyMjJCLCAweDAwOTEsCisgICAgMHgyMjJFLCAweDIyMkUsIDB4MDA5MiwgMHgyMjM0LCAweDIyMzQsIDB4MDA5RiwgMHgyMjM1LCAweDIyMzUsIDB4MDA5RSwKKyAgICAweDIyMzYsIDB4MjIzNiwgMHgwMDgyLCAweDIyMzcsIDB4MjIzNywgMHgwMDhBLCAweDIyM0QsIDB4MjIzRCwgMHgwMDk2LAorICAgIDB4MjI0OCwgMHgyMjQ4LCAweDAwOTUsIDB4MjI0QywgMHgyMjRDLCAweDAwOTQsIDB4MjI1MiwgMHgyMjUyLCAweDI2QzMsCisgICAgMHgyMjYwLCAweDIyNjAsIDB4MDA5OCwgMHgyMjYxLCAweDIyNjEsIDB4MDA5MywgMHgyMjY0LCAweDIyNjUsIDB4MDA5QiwKKyAgICAweDIyNjYsIDB4MjI2NywgMHgyNkM0LCAweDIyNkUsIDB4MjI2RiwgMHgwMDk5LCAweDIyOTUsIDB4MjI5NSwgMHgyNzA0LAorICAgIDB4MjI5OSwgMHgyMjk5LCAweDAwOTAsIDB4MjJBNSwgMHgyMkE1LCAweDAwOEMsIDB4MjJCRiwgMHgyMkJGLCAweDI2QzYsCisgICAgMHgyMkVGLCAweDIyRUYsIDB4MDA2QywgMHgyMzEyLCAweDIzMTIsIDB4MDA4RiwgMHgyNDYwLCAweDI0NjksIDB4MDBFNiwKKyAgICAweDI0NzQsIDB4MjQ4NywgMHgwMEQyLCAweDI0ODgsIDB4MjQ5QiwgMHgwMEJFLCAweDI1MDAsIDB4MjU0QiwgMHgwMkUyLAorICAgIDB4MjU1MCwgMHgyNTczLCAweDI2QzcsIDB4MjU4MSwgMHgyNThGLCAweDI2RUIsIDB4MjU5MywgMHgyNTk1LCAweDI2RkEsCisgICAgMHgyNUEwLCAweDI1QTAsIDB4MDBCNSwgMHgyNUExLCAweDI1QTEsIDB4MDBCNCwgMHgyNUIyLCAweDI1QjIsIDB4MDBCNywKKyAgICAweDI1QjMsIDB4MjVCMywgMHgwMEI2LCAweDI1QkMsIDB4MjVCRCwgMHgyNkZELCAweDI1QzYsIDB4MjVDNiwgMHgwMEIzLAorICAgIDB4MjVDNywgMHgyNUM3LCAweDAwQjIsIDB4MjVDQiwgMHgyNUNCLCAweDAwQUYsIDB4MjVDRSwgMHgyNUNFLCAweDAwQjEsCisgICAgMHgyNUNGLCAweDI1Q0YsIDB4MDBCMCwgMHgyNUUyLCAweDI1RTUsIDB4MjZGRiwgMHgyNjA1LCAweDI2MDUsIDB4MDBBRSwKKyAgICAweDI2MDYsIDB4MjYwNiwgMHgwMEFELCAweDI2MDksIDB4MjYwOSwgMHgyNzAzLCAweDI2NDAsIDB4MjY0MCwgMHgwMEExLAorICAgIDB4MjY0MiwgMHgyNjQyLCAweDAwQTAsIDB4MkU4MCwgMHgyRTgwLCAweDU3OUMsIDB4MkU4MSwgMHgyRTgxLCAweDU2MUYsCisgICAgMHgyRTgyLCAweDJFODMsIDB4NTc5RCwgMHgyRTg0LCAweDJFODQsIDB4NTYyMywgMHgyRTg1LCAweDJFODcsIDB4NTc5RiwKKyAgICAweDJFODgsIDB4MkU4OCwgMHg1NjI2LCAweDJFODksIDB4MkU4QSwgMHg1N0EyLCAweDJFOEIsIDB4MkU4QiwgMHg1NjI3LAorICAgIDB4MkU4QywgMHgyRThDLCAweDU2MkMsIDB4MkU4RCwgMHgyRTk2LCAweDU3QTQsIDB4MkU5NywgMHgyRTk3LCAweDU2MkQsCisgICAgMHgyRTk4LCAweDJFOTksIDB4NTdBRSwgMHgyRTlCLCAweDJFQTYsIDB4NTdCMCwgMHgyRUE3LCAweDJFQTcsIDB4NTYzQSwKKyAgICAweDJFQTgsIDB4MkVBOSwgMHg1N0JDLCAweDJFQUEsIDB4MkVBQSwgMHg1NjNELCAweDJFQUIsIDB4MkVBRCwgMHg1N0JFLAorICAgIDB4MkVBRSwgMHgyRUFFLCAweDU2NDAsIDB4MkVBRiwgMHgyRUIyLCAweDU3QzEsIDB4MkVCMywgMHgyRUIzLCAweDU2NDIsCisgICAgMHgyRUI0LCAweDJFQjUsIDB4NTdDNSwgMHgyRUI2LCAweDJFQjcsIDB4NTY0MywgMHgyRUI4LCAweDJFQkEsIDB4NTdDNywKKyAgICAweDJFQkIsIDB4MkVCQiwgMHg1NjQ4LCAweDJFQkMsIDB4MkVDOSwgMHg1N0NBLCAweDJFQ0EsIDB4MkVDQSwgMHg1NjUyLAorICAgIDB4MkVDQiwgMHgyRUYzLCAweDU3RDgsIDB4MkYwMCwgMHgyRjAwLCAweDEwNDIsIDB4MkYwMSwgMHgyRjAxLCAweDEyNjMsCisgICAgMHgyRjAyLCAweDJGMDIsIDB4MTI3MiwgMHgyRjAzLCAweDJGMDMsIDB4MTI2NSwgMHgyRjA0LCAweDJGMDQsIDB4MTA1OSwKKyAgICAweDJGMDUsIDB4MkYwNSwgMHgyNzkzLCAweDJGMDYsIDB4MkYwNiwgMHgwNjNELCAweDJGMDcsIDB4MkYwNywgMHgxMzAzLAorICAgIDB4MkYwOCwgMHgyRjA4LCAweDBDQTYsIDB4MkYwOSwgMHgyRjA5LCAweDA2MzgsIDB4MkYwQSwgMHgyRjBBLCAweDBDQzYsCisgICAgMHgyRjBCLCAweDJGMEIsIDB4MDNENiwgMHgyRjBDLCAweDJGMEMsIDB4MTI5RCwgMHgyRjBELCAweDJGMEQsIDB4MTMxNCwKKyAgICAweDJGMEUsIDB4MkYwRSwgMHgxMzBGLCAweDJGMEYsIDB4MkYwRiwgMHgwODJCLCAweDJGMTAsIDB4MkYxMCwgMHgxMzk5LAorICAgIDB4MkYxMSwgMHgyRjExLCAweDA1OTcsIDB4MkYxMiwgMHgyRjEyLCAweDA5RUYsIDB4MkYxMywgMHgyRjEzLCAweDEyRkMsCisgICAgMHgyRjE0LCAweDJGMTQsIDB4MTI2NiwgMHgyRjE1LCAweDJGMTUsIDB4MTI4NCwgMHgyRjE2LCAweDJGMTYsIDB4MkExQSwKKyAgICAweDJGMTcsIDB4MkYxNywgMHgwRDQ1LCAweDJGMTgsIDB4MkYxOCwgMHgwNDdFLCAweDJGMTksIDB4MkYxOSwgMHgxMzUyLAorICAgIDB4MkYxQSwgMHgyRjFBLCAweDA0Q0MsIDB4MkYxQiwgMHgyRjFCLCAweDEzOUMsIDB4MkYxQywgMHgyRjFDLCAweDEwQkIsCisgICAgMHgyRjFELCAweDJGMUQsIDB4MDk2NywgMHgyRjFFLCAweDJGMUUsIDB4MTU5MywgMHgyRjFGLCAweDJGMUYsIDB4MEU3MiwKKyAgICAweDJGMjAsIDB4MkYyMCwgMHgwRDU2LCAweDJGMjEsIDB4MkYyMSwgMHgxNjFDLCAweDJGMjIsIDB4MkYyMiwgMHgyRDJELAorICAgIDB4MkYyMywgMHgyRjIzLCAweDBGMTMsIDB4MkYyNCwgMHgyRjI0LCAweDA1NzYsIDB4MkYyNSwgMHgyRjI1LCAweDBCNkYsCisgICAgMHgyRjI2LCAweDJGMjYsIDB4MTIzMCwgMHgyRjI3LCAweDJGMjcsIDB4MTcyRSwgMHgyRjI4LCAweDJGMjgsIDB4MDU2QSwKKyAgICAweDJGMjksIDB4MkYyOSwgMHgwRjZDLCAweDJGMkEsIDB4MkYyQSwgMHgxNEI2LCAweDJGMkIsIDB4MkYyQiwgMHgwRDQzLAorICAgIDB4MkYyQywgMHgyRjJDLCAweDE3NzQsIDB4MkYyRCwgMHgyRjJELCAweDBDRjYsIDB4MkYyRSwgMHgyRjJFLCAweDE4MTUsCisgICAgMHgyRjJGLCAweDJGMkYsIDB4MDZGRCwgMHgyRjMwLCAweDJGMzAsIDB4MDgyRCwgMHgyRjMxLCAweDJGMzEsIDB4MDhCRSwKKyAgICAweDJGMzIsIDB4MkYzMiwgMHgwNkM0LCAweDJGMzMsIDB4MkYzMywgMHgxODEzLCAweDJGMzQsIDB4MkYzNCwgMHgwNzNDLAorICAgIDB4MkYzNSwgMHgyRjM1LCAweDEzOTgsIDB4MkYzNiwgMHgyRjM2LCAweDE0QUQsIDB4MkYzNywgMHgyRjM3LCAweDE0RjYsCisgICAgMHgyRjM4LCAweDJGMzgsIDB4MDcwNiwgMHgyRjM5LCAweDJGMzksIDB4MTc2MiwgMHgyRjNBLCAweDJGM0EsIDB4MTVFRSwKKyAgICAweDJGM0IsIDB4MkYzQiwgMHgxNUUwLCAweDJGM0MsIDB4MkYzQywgMHgwRjhGLCAweDJGM0QsIDB4MkYzRCwgMHgwNkU1LAorICAgIDB4MkYzRSwgMHgyRjNFLCAweDMyOTIsIDB4MkYzRiwgMHgyRjNGLCAweDBENkQsIDB4MkY0MCwgMHgyRjQwLCAweDExQTYsCisgICAgMHgyRjQxLCAweDJGNDEsIDB4MTkwOSwgMHgyRjQyLCAweDJGNDIsIDB4MEVEMywgMHgyRjQzLCAweDJGNDMsIDB4MDVGNiwKKyAgICAweDJGNDQsIDB4MkY0NCwgMHgwOEMwLCAweDJGNDUsIDB4MkY0NSwgMHgwNjVBLCAweDJGNDYsIDB4MkY0NiwgMHgwRUVELAorICAgIDB4MkY0NywgMHgyRjQ3LCAweDBDQjAsIDB4MkY0OCwgMHgyRjQ4LCAweDEwRkUsIDB4MkY0OSwgMHgyRjQ5LCAweDExMDUsCisgICAgMHgyRjRBLCAweDJGNEEsIDB4MEIyMSwgMHgyRjRCLCAweDJGNEIsIDB4MEMzNCwgMHgyRjRDLCAweDJGNEMsIDB4MTFCOCwKKyAgICAweDJGNEQsIDB4MkY0RCwgMHgwNTc4LCAweDJGNEUsIDB4MkY0RSwgMHgxOUJELCAweDJGNEYsIDB4MkY0RiwgMHgwRUYyLAorICAgIDB4MkY1MCwgMHgyRjUwLCAweDA0MzEsIDB4MkY1MSwgMHgyRjUxLCAweDBBQjAsIDB4MkY1MiwgMHgyRjUyLCAweDBENjYsCisgICAgMHgyRjUzLCAweDJGNTMsIDB4MEMxNywgMHgyRjU0LCAweDJGNTQsIDB4MERBMywgMHgyRjU1LCAweDJGNTUsIDB4MDgwNSwKKyAgICAweDJGNTYsIDB4MkY1NiwgMHgxMjAzLCAweDJGNTcsIDB4MkY1NywgMHgwNkIzLCAweDJGNTgsIDB4MkY1OCwgMHgxMjY5LAorICAgIDB4MkY1OSwgMHgyRjU5LCAweDE2OUQsIDB4MkY1QSwgMHgyRjVBLCAweDBCQ0IsIDB4MkY1QiwgMHgyRjVCLCAweDBGRTksCisgICAgMHgyRjVDLCAweDJGNUMsIDB4MEI2NCwgMHgyRjVELCAweDJGNUQsIDB4MEM4OSwgMHgyRjVFLCAweDJGNUUsIDB4MEZDOSwKKyAgICAweDJGNUYsIDB4MkY1RiwgMHgxMEQ2LCAweDJGNjAsIDB4MkY2MCwgMHgwNzI4LCAweDJGNjEsIDB4MkY2MSwgMHgwRTkwLAorICAgIDB4MkY2MiwgMHgyRjYyLCAweDA2QzUsIDB4MkY2MywgMHgyRjYzLCAweDBEMzMsIDB4MkY2NCwgMHgyRjY0LCAweDEwQTgsCisgICAgMHgyRjY1LCAweDJGNjUsIDB4MEU0MiwgMHgyRjY2LCAweDJGNjYsIDB4MUJDNiwgMHgyRjY3LCAweDJGNjcsIDB4MUI2MCwKKyAgICAweDJGNjgsIDB4MkY2OCwgMHgzRUJGLCAweDJGNjksIDB4MkY2OSwgMHgwM0UyLCAweDJGNkEsIDB4MkY2QSwgMHgwQkMzLAorICAgIDB4MkY2QiwgMHgyRjZCLCAweDBBRjgsIDB4MkY2QywgMHgyRjZDLCAweDBCMjIsIDB4MkY2RCwgMHgyRjZELCAweDBBQjEsCisgICAgMHgyRjZFLCAweDJGNkUsIDB4MEQ0RiwgMHgyRjZGLCAweDJGNkYsIDB4MEQ0NiwgMHgyRjcwLCAweDJGNzAsIDB4MEQ1NSwKKyAgICAweDJGNzEsIDB4MkY3MSwgMHg0MENCLCAweDJGNzIsIDB4MkY3MiwgMHgwNzgzLCAweDJGNzMsIDB4MkY3MywgMHgwRkQxLAorICAgIDB4MkY3NCwgMHgyRjc0LCAweDA5RUIsIDB4MkY3NSwgMHgyRjc1LCAweDExRjAsIDB4MkY3NiwgMHgyRjc2LCAweDBBREMsCisgICAgMHgyRjc3LCAweDJGNzcsIDB4MUNFNywgMHgyRjc4LCAweDJGNzgsIDB4MUM1RSwgMHgyRjc5LCAweDJGNzksIDB4MEVBOSwKKyAgICAweDJGN0EsIDB4MkY3QSwgMHgxMDFCLCAweDJGN0IsIDB4MkY3QiwgMHgxMEQ1LCAweDJGN0MsIDB4MkY3QywgMHgwOUJBLAorICAgIDB4MkY3RCwgMHgyRjdELCAweDA2MzcsIDB4MkY3RSwgMHgyRjdFLCAweDFCQ0IsIDB4MkY3RiwgMHgyRjdGLCAweDA2MzksCisgICAgMHgyRjgwLCAweDJGODAsIDB4MUExRSwgMHgyRjgxLCAweDJGODEsIDB4MENCRCwgMHgyRjgyLCAweDJGODIsIDB4MDRFMSwKKyAgICAweDJGODMsIDB4MkY4MywgMHgxMjMxLCAweDJGODQsIDB4MkY4NCwgMHgxMUMwLCAweDJGODUsIDB4MkY4NSwgMHgwOEY5LAorICAgIDB4MkY4NiwgMHgyRjg2LCAweDBEMTksIDB4MkY4NywgMHgyRjg3LCAweDE2MTgsIDB4MkY4OCwgMHgyRjg4LCAweDExREEsCisgICAgMHgyRjg5LCAweDJGODksIDB4MUNEQywgMHgyRjhBLCAweDJGOEEsIDB4MENFNCwgMHgyRjhCLCAweDJGOEIsIDB4NDVBMiwKKyAgICAweDJGOEMsIDB4MkY4QywgMHgxQkYwLCAweDJGOEQsIDB4MkY4RCwgMHgwNTBCLCAweDJGOEUsIDB4MkY4RSwgMHgwRkQzLAorICAgIDB4MkY4RiwgMHgyRjhGLCAweDBGOUIsIDB4MkY5MCwgMHgyRjkwLCAweDEwNDksIDB4MkY5MSwgMHgyRjkxLCAweDQ5REMsCisgICAgMHgyRjkyLCAweDJGOTIsIDB4MUY5NiwgMHgyRjkzLCAweDJGOTMsIDB4MDg5OCwgMHgyRjk0LCAweDJGOTQsIDB4MEZGRCwKKyAgICAweDJGOTUsIDB4MkY5NSwgMHgwNzIxLCAweDJGOTYsIDB4MkY5NiwgMHgwNUY4LCAweDJGOTcsIDB4MkY5NywgMHgxRDE1LAorICAgIDB4MkY5OCwgMHgyRjk4LCAweDFENTAsIDB4MkY5OSwgMHgyRjk5LCAweDFFM0IsIDB4MkY5QSwgMHgyRjlBLCAweDA1MDUsCisgICAgMHgyRjlCLCAweDJGOUIsIDB4MTIzQywgMHgyRjlDLCAweDJGOUMsIDB4MTI0MCwgMHgyRjlELCAweDJGOUQsIDB4MEQyNiwKKyAgICAweDJGOUUsIDB4MkY5RSwgMHgxRTdCLCAweDJGOUYsIDB4MkY5RiwgMHgwRjhDLCAweDJGQTAsIDB4MkZBMCwgMHgwNEUyLAorICAgIDB4MkZBMSwgMHgyRkExLCAweDREMTMsIDB4MkZBMiwgMHgyRkEyLCAweDEwNUYsIDB4MkZBMywgMHgyRkEzLCAweDEwQjQsCisgICAgMHgyRkE0LCAweDJGQTQsIDB4NEUxOCwgMHgyRkE1LCAweDJGQTUsIDB4MDlEQSwgMHgyRkE2LCAweDJGQTYsIDB4MDhDMSwKKyAgICAweDJGQTcsIDB4MkZBNywgMHgxRTc1LCAweDJGQTgsIDB4MkZBOCwgMHgyMDdELCAweDJGQTksIDB4MkZBOSwgMHgwNkIyLAorICAgIDB4MkZBQSwgMHgyRkFBLCAweDA5RUUsIDB4MkZBQiwgMHgyRkFCLCAweDFENzksIDB4MkZBQywgMHgyRkFDLCAweDEwQ0YsCisgICAgMHgyRkFELCAweDJGQUQsIDB4NTBFQSwgMHgyRkFFLCAweDJGQUUsIDB4MDY2NCwgMHgyRkFGLCAweDJGQUYsIDB4MEFFQiwKKyAgICAweDJGQjAsIDB4MkZCMCwgMHgwNkVBLCAweDJGQjEsIDB4MkZCMSwgMHgyMThELCAweDJGQjIsIDB4MkZCMiwgMHgwOEYxLAorICAgIDB4MkZCMywgMHgyRkIzLCAweDEwN0IsIDB4MkZCNCwgMHgyRkI0LCAweDIyMDksIDB4MkZCNSwgMHgyRkI1LCAweDFGMDAsCisgICAgMHgyRkI2LCAweDJGQjYsIDB4MUVGNCwgMHgyRkI3LCAweDJGQjcsIDB4MEQ0QSwgMHgyRkI4LCAweDJGQjgsIDB4MEQ2RSwKKyAgICAweDJGQjksIDB4MkZCOSwgMHgwRjUwLCAweDJGQkEsIDB4MkZCQSwgMHgyMDZELCAweDJGQkIsIDB4MkZCQiwgMHgwNzIwLAorICAgIDB4MkZCQywgMHgyRkJDLCAweDA2REEsIDB4MkZCRCwgMHgyRkJELCAweDFERUMsIDB4MkZCRSwgMHgyRkJFLCAweDFFRDAsCisgICAgMHgyRkJGLCAweDJGQkYsIDB4MTM5QiwgMHgyRkMwLCAweDJGQzAsIDB4MTI2MCwgMHgyRkMxLCAweDJGQzEsIDB4MDc0NiwKKyAgICAweDJGQzIsIDB4MkZDMiwgMHgyMjM5LCAweDJGQzMsIDB4MkZDMywgMHgyMDlDLCAweDJGQzQsIDB4MkZDNCwgMHgyNjg4LAorICAgIDB4MkZDNSwgMHgyRkM1LCAweDBBNjAsIDB4MkZDNiwgMHgyRkM2LCAweDIwNzEsIDB4MkZDNywgMHgyRkM3LCAweDBBOTAsCisgICAgMHgyRkM4LCAweDJGQzgsIDB4NTU4NiwgMHgyRkM5LCAweDJGQzksIDB4MEQ4OSwgMHgyRkNBLCAweDJGQ0EsIDB4MDc5MSwKKyAgICAweDJGQ0IsIDB4MkZDQiwgMHgxQTU1LCAweDJGQ0MsIDB4MkZDQywgMHgyNjE4LCAweDJGQ0QsIDB4MkZDRCwgMHgwNUU1LAorICAgIDB4MkZDRSwgMHgyRkNFLCAweDA3MUQsIDB4MkZDRiwgMHgyRkNGLCAweDBEOEEsIDB4MkZEMCwgMHgyRkQwLCAweDA0MzAsCisgICAgMHgyRkQxLCAweDJGRDEsIDB4MjBDNiwgMHgyRkQyLCAweDJGRDIsIDB4MUU4NiwgMHgyRkQzLCAweDJGRDMsIDB4MjAzNywKKyAgICAweDJGRDQsIDB4MkZENCwgMHgxRjM0LCAweDJGRDUsIDB4MkZENSwgMHgxMkYzLCAweDJGRjAsIDB4MkZGQiwgMHgyNzRDLAorICAgIDB4MzAwMCwgMHgzMDAyLCAweDAwNjAsIDB4MzAwMywgMHgzMDAzLCAweDAwNjcsIDB4MzAwNSwgMHgzMDA1LCAweDAwNjgsCisgICAgMHgzMDA2LCAweDMwMDYsIDB4MjcyOCwgMHgzMDA3LCAweDMwMDcsIDB4MUUxNywgMHgzMDA4LCAweDMwMEYsIDB4MDA3MywKKyAgICAweDMwMTAsIDB4MzAxMSwgMHgwMDdELCAweDMwMTIsIDB4MzAxMiwgMHgyNzA1LCAweDMwMTMsIDB4MzAxMywgMHgwMEJELAorICAgIDB4MzAxNCwgMHgzMDE1LCAweDAwNzEsIDB4MzAxNiwgMHgzMDE3LCAweDAwN0IsIDB4MzAxRCwgMHgzMDFFLCAweDI3MDYsCisgICAgMHgzMDIxLCAweDMwMjksIDB4MjcwOCwgMHgzMDMzLCAweDMwMzUsIDB4NTc3QiwgMHgzMDM4LCAweDMwM0EsIDB4NTc3RSwKKyAgICAweDMwM0UsIDB4MzAzRSwgMHgyNzRCLCAweDMwM0YsIDB4MzAzRiwgMHg1NzU1LCAweDMwNDEsIDB4MzA5MywgMHgwMTY0LAorICAgIDB4MzA5NCwgMHgzMDk0LCAweDU3NjcsIDB4MzA5QiwgMHgzMDlDLCAweDI3MjQsIDB4MzA5RCwgMHgzMDlFLCAweDI3MjksCisgICAgMHgzMEExLCAweDMwRjYsIDB4MDFCNywgMHgzMEY3LCAweDMwRkEsIDB4NTc3NiwgMHgzMEZCLCAweDMwRkIsIDB4MDA2MywKKyAgICAweDMwRkMsIDB4MzBGQywgMHgyNzIzLCAweDMwRkQsIDB4MzBGRSwgMHgyNzI2LCAweDMxMDUsIDB4MzEyOSwgMHgwMkJDLAorICAgIDB4MzEyQSwgMHgzMTJDLCAweDU3ODEsIDB4MzFBMCwgMHgzMUI3LCAweDU3ODQsIDB4MzIyMCwgMHgzMjI5LCAweDAwRjAsCisgICAgMHgzMjMxLCAweDMyMzEsIDB4MjcyMSwgMHgzMkEzLCAweDMyQTMsIDB4MjcxMSwgMHgzMzhFLCAweDMzOEYsIDB4MjcxMiwKKyAgICAweDMzOUMsIDB4MzM5RSwgMHgyNzE0LCAweDMzQTEsIDB4MzNBMSwgMHgyNzE3LCAweDMzQzQsIDB4MzNDNCwgMHgyNzE4LAorICAgIDB4MzNDRSwgMHgzM0NFLCAweDI3MTksIDB4MzNEMSwgMHgzM0QyLCAweDI3MUEsIDB4MzNENSwgMHgzM0Q1LCAweDI3MUMsCisgICAgMHgzNDAwLCAweDM0NDYsIDB4NTgwMSwgMHgzNDQ3LCAweDM0NDcsIDB4NTYyNSwgMHgzNDQ4LCAweDM0NzIsIDB4NTg0OCwKKyAgICAweDM0NzMsIDB4MzQ3MywgMHg1NjI0LCAweDM0NzQsIDB4MzRGRiwgMHg1ODczLCAweDM1MDAsIDB4MzU5RCwgMHg1OEZGLAorICAgIDB4MzU5RSwgMHgzNTlFLCAweDU2MjksIDB4MzU5RiwgMHgzNUZGLCAweDU5OUQsIDB4MzYwMCwgMHgzNjBELCAweDU5RkUsCisgICAgMHgzNjBFLCAweDM2MEUsIDB4NTYyQiwgMHgzNjBGLCAweDM2MTksIDB4NUEwQywgMHgzNjFBLCAweDM2MUEsIDB4NTYyQSwKKyAgICAweDM2MUIsIDB4MzZGRiwgMHg1QTE3LCAweDM3MDAsIDB4MzdGRiwgMHg1QUZDLCAweDM4MDAsIDB4MzhGRiwgMHg1QkZDLAorICAgIDB4MzkwMCwgMHgzOTE3LCAweDVDRkMsIDB4MzkxOCwgMHgzOTE4LCAweDU2MkYsIDB4MzkxOSwgMHgzOTZELCAweDVEMTQsCisgICAgMHgzOTZFLCAweDM5NkUsIDB4NTYyRSwgMHgzOTZGLCAweDM5Q0UsIDB4NUQ2OSwgMHgzOUNGLCAweDM5Q0YsIDB4NTYzMSwKKyAgICAweDM5RDAsIDB4MzlEMCwgMHg1NjM0LCAweDM5RDEsIDB4MzlERSwgMHg1REM5LCAweDM5REYsIDB4MzlERiwgMHg1NjMyLAorICAgIDB4MzlFMCwgMHgzOUZGLCAweDVERDcsIDB4M0EwMCwgMHgzQTcyLCAweDVERjcsIDB4M0E3MywgMHgzQTczLCAweDU2MzMsCisgICAgMHgzQTc0LCAweDNBRkYsIDB4NUU2QSwgMHgzQjAwLCAweDNCNEQsIDB4NUVGNiwgMHgzQjRFLCAweDNCNEUsIDB4NTYzNywKKyAgICAweDNCNEYsIDB4M0JGRiwgMHg1RjQ0LCAweDNDMDAsIDB4M0M2RCwgMHg1RkY1LCAweDNDNkUsIDB4M0M2RSwgMHg1NjM4LAorICAgIDB4M0M2RiwgMHgzQ0RGLCAweDYwNjMsIDB4M0NFMCwgMHgzQ0UwLCAweDU2MzksIDB4M0NFMSwgMHgzQ0ZGLCAweDYwRDQsCisgICAgMHgzRDAwLCAweDNERkYsIDB4NjBGMywgMHgzRTAwLCAweDNFRkYsIDB4NjFGMywgMHgzRjAwLCAweDNGRkYsIDB4NjJGMywKKyAgICAweDQwMDAsIDB4NDA1NSwgMHg2M0YzLCAweDQwNTYsIDB4NDA1NiwgMHg1NjNFLCAweDQwNTcsIDB4NDBGRiwgMHg2NDQ5LAorICAgIDB4NDEwMCwgMHg0MTVFLCAweDY0RjIsIDB4NDE1RiwgMHg0MTVGLCAweDU2M0YsIDB4NDE2MCwgMHg0MUZGLCAweDY1NTEsCisgICAgMHg0MjAwLCAweDQyRkYsIDB4NjVGMSwgMHg0MzAwLCAweDQzMzYsIDB4NjZGMSwgMHg0MzM3LCAweDQzMzcsIDB4NTY0MSwKKyAgICAweDQzMzgsIDB4NDNBQiwgMHg2NzI4LCAweDQzQUMsIDB4NDNBQywgMHg1NjQ3LCAweDQzQUQsIDB4NDNCMCwgMHg2NzlDLAorICAgIDB4NDNCMSwgMHg0M0IxLCAweDU2NDYsIDB4NDNCMiwgMHg0M0RDLCAweDY3QTAsIDB4NDNERCwgMHg0M0RELCAweDU2NDksCisgICAgMHg0M0RFLCAweDQzRkYsIDB4NjdDQiwgMHg0NDAwLCAweDQ0RDUsIDB4NjdFRCwgMHg0NEQ2LCAweDQ0RDYsIDB4NTY0QSwKKyAgICAweDQ0RDcsIDB4NDRGRiwgMHg2OEMzLCAweDQ1MDAsIDB4NDVGRiwgMHg2OEVDLCAweDQ2MDAsIDB4NDY0QiwgMHg2OUVDLAorICAgIDB4NDY0QywgMHg0NjRDLCAweDU2NEMsIDB4NDY0RCwgMHg0NjYwLCAweDZBMzgsIDB4NDY2MSwgMHg0NjYxLCAweDU2NEIsCisgICAgMHg0NjYyLCAweDQ2RkYsIDB4NkE0QywgMHg0NzAwLCAweDQ3MjIsIDB4NkFFQSwgMHg0NzIzLCAweDQ3MjMsIDB4NTY0RSwKKyAgICAweDQ3MjQsIDB4NDcyOCwgMHg2QjBELCAweDQ3MjksIDB4NDcyOSwgMHg1NjRGLCAweDQ3MkEsIDB4NDc3QiwgMHg2QjEyLAorICAgIDB4NDc3QywgMHg0NzdDLCAweDU2NTAsIDB4NDc3RCwgMHg0NzhDLCAweDZCNjQsIDB4NDc4RCwgMHg0NzhELCAweDU2NTEsCisgICAgMHg0NzhFLCAweDQ3RkYsIDB4NkI3NCwgMHg0ODAwLCAweDQ4RkYsIDB4NkJFNiwgMHg0OTAwLCAweDQ5NDYsIDB4NkNFNiwKKyAgICAweDQ5NDcsIDB4NDk0NywgMHg1NjUzLCAweDQ5NDgsIDB4NDk3OSwgMHg2RDJELCAweDQ5N0EsIDB4NDk3QSwgMHg1NjU0LAorICAgIDB4NDk3QiwgMHg0OTdDLCAweDZENUYsIDB4NDk3RCwgMHg0OTdELCAweDU2NTUsIDB4NDk3RSwgMHg0OTgxLCAweDZENjEsCisgICAgMHg0OTgyLCAweDQ5ODMsIDB4NTY1NiwgMHg0OTg0LCAweDQ5ODQsIDB4NkQ2NSwgMHg0OTg1LCAweDQ5ODYsIDB4NTY1OCwKKyAgICAweDQ5ODcsIDB4NDk5QSwgMHg2RDY2LCAweDQ5OUIsIDB4NDk5QiwgMHg1NjVCLCAweDQ5OUMsIDB4NDk5RSwgMHg2RDdBLAorICAgIDB4NDk5RiwgMHg0OTlGLCAweDU2NUEsIDB4NDlBMCwgMHg0OUI1LCAweDZEN0QsIDB4NDlCNiwgMHg0OUI2LCAweDU2NUQsCisgICAgMHg0OUI3LCAweDQ5QjcsIDB4NTY1QywgMHg0OUI4LCAweDQ5RkYsIDB4NkQ5MywgMHg0QTAwLCAweDRBRkYsIDB4NkREQiwKKyAgICAweDRCMDAsIDB4NEJGRiwgMHg2RURCLCAweDRDMDAsIDB4NEM3NiwgMHg2RkRCLCAweDRDNzcsIDB4NEM3NywgMHg1NjY0LAorICAgIDB4NEM3OCwgMHg0QzlFLCAweDcwNTIsIDB4NEM5RiwgMHg0Q0ExLCAweDU2NjEsIDB4NENBMiwgMHg0Q0EyLCAweDU2NjUsCisgICAgMHg0Q0EzLCAweDRDQTMsIDB4NTY2MCwgMHg0Q0E0LCAweDRDRkYsIDB4NzA3OSwgMHg0RDAwLCAweDREMTIsIDB4NzBENSwKKyAgICAweDREMTMsIDB4NEQxOSwgMHg1NjY2LCAweDREMUEsIDB4NERBRCwgMHg3MEU4LCAweDREQUUsIDB4NERBRSwgMHg1NjZELAorICAgIDB4NERBRiwgMHg0REI1LCAweDcxN0MsIDB4NEUwMCwgMHg0RTAwLCAweDEwNDIsIDB4NEUwMSwgMHg0RTAxLCAweDA1RTAsCisgICAgMHg0RTAyLCAweDRFMDIsIDB4Mjc1OCwgMHg0RTAzLCAweDRFMDMsIDB4MEJGRSwgMHg0RTA0LCAweDRFMDYsIDB4Mjc1OSwKKyAgICAweDRFMDcsIDB4NEUwNywgMHgwRUEzLCAweDRFMDgsIDB4NEUwOCwgMHgxMTZBLCAweDRFMDksIDB4NEUwOSwgMHgwQ0Q4LAorICAgIDB4NEUwQSwgMHg0RTBBLCAweDBEMDgsIDB4NEUwQiwgMHg0RTBCLCAweDBGMkYsIDB4NEUwQywgMHg0RTBDLCAweDEyNTgsCisgICAgMHg0RTBELCAweDRFMEQsIDB4MDQ4MiwgMHg0RTBFLCAweDRFMEUsIDB4MTBEMCwgMHg0RTBGLCAweDRFMEYsIDB4Mjc1QywKKyAgICAweDRFMTAsIDB4NEUxMCwgMHgxMjVBLCAweDRFMTEsIDB4NEUxMSwgMHgwNTE4LCAweDRFMTIsIDB4NEUxMiwgMHgyNzVELAorICAgIDB4NEUxMywgMHg0RTEzLCAweDEyMDUsIDB4NEUxNCwgMHg0RTE0LCAweDBDNEYsIDB4NEUxNSwgMHg0RTE1LCAweDEyNUQsCisgICAgMHg0RTE2LCAweDRFMTYsIDB4MEQ1NywgMHg0RTE3LCAweDRFMTcsIDB4Mjc1RSwgMHg0RTE4LCAweDRFMTgsIDB4MEM2RCwKKyAgICAweDRFMTksIDB4NEUxOSwgMHgwNDY0LCAweDRFMUEsIDB4NEUxQSwgMHgxMDNDLCAweDRFMUIsIDB4NEUxQiwgMHgwNTU3LAorICAgIDB4NEUxQywgMHg0RTFDLCAweDA1RUEsIDB4NEUxRCwgMHg0RTFELCAweDBEQjQsIDB4NEUxRSwgMHg0RTFFLCAweDEyNUYsCisgICAgMHg0RTFGLCAweDRFMjEsIDB4Mjc1RiwgMHg0RTIyLCAweDRFMjIsIDB4MDVFOSwgMHg0RTIzLCAweDRFMjMsIDB4Mjc2MiwKKyAgICAweDRFMjQsIDB4NEUyNCwgMHgwQTA2LCAweDRFMjUsIDB4NEUyNSwgMHgwRkY4LCAweDRFMjYsIDB4NEUyNiwgMHgyNzYzLAorICAgIDB4NEUyNywgMHg0RTI3LCAweDBDREUsIDB4NEUyOCwgMHg0RTI4LCAweDEyNjMsIDB4NEUyOSwgMHg0RTI5LCAweDI3NjQsCisgICAgMHg0RTJBLCAweDRFMkEsIDB4MDZGMSwgMHg0RTJCLCAweDRFMkIsIDB4MEZFNywgMHg0RTJDLCAweDRFMkMsIDB4MTY5QywKKyAgICAweDRFMkQsIDB4NEUyRCwgMHgxMUNGLCAweDRFMkUsIDB4NEUyRiwgMHgyNzY1LCAweDRFMzAsIDB4NEUzMCwgMHgwNjdFLAorICAgIDB4NEUzMSwgMHg0RTMxLCAweDI3NjcsIDB4NEUzMiwgMHg0RTMyLCAweDA1MzEsIDB4NEUzMywgMHg0RTMzLCAweDI3NjgsCisgICAgMHg0RTM0LCAweDRFMzQsIDB4MEEyMiwgMHg0RTM1LCAweDRFMzUsIDB4Mjc2OSwgMHg0RTM2LCAweDRFMzYsIDB4MTI3MiwKKyAgICAweDRFMzcsIDB4NEUzNywgMHgyNzZBLCAweDRFMzgsIDB4NEUzOCwgMHgwRTk5LCAweDRFMzksIDB4NEUzOSwgMHgwNTg1LAorICAgIDB4NEUzQSwgMHg0RTNBLCAweDBFQjksIDB4NEUzQiwgMHg0RTNCLCAweDExRjYsIDB4NEUzQywgMHg0RTNDLCAweDI3NkIsCisgICAgMHg0RTNELCAweDRFM0QsIDB4MDlFMSwgMHg0RTNFLCAweDRFM0UsIDB4MDkwOCwgMHg0RTNGLCAweDRFM0YsIDB4MTI2NSwKKyAgICAweDRFNDAsIDB4NEU0MiwgMHgyNzZDLCAweDRFNDMsIDB4NEU0MywgMHgwQjJFLCAweDRFNDQsIDB4NEU0NCwgMHgyNzZGLAorICAgIDB4NEU0NSwgMHg0RTQ1LCAweDA4RjIsIDB4NEU0NiwgMHg0RTQ2LCAweDI3NzAsIDB4NEU0NywgMHg0RTQ3LCAweDEyNjcsCisgICAgMHg0RTQ4LCAweDRFNDgsIDB4MEFCOSwgMHg0RTQ5LCAweDRFNDksIDB4MTA2QywgMHg0RTRBLCAweDRFNEEsIDB4Mjc3MSwKKyAgICAweDRFNEIsIDB4NEU0QiwgMHgxMUFELCAweDRFNEMsIDB4NEU0QywgMHgwRUU5LCAweDRFNEQsIDB4NEU0RCwgMHgxMTQ4LAorICAgIDB4NEU0RSwgMHg0RTRFLCAweDA3QUMsIDB4NEU0RiwgMHg0RTRGLCAweDA2NDMsIDB4NEU1MCwgMHg0RTUwLCAweDA5QzEsCisgICAgMHg0RTUxLCAweDRFNTEsIDB4Mjc3MiwgMHg0RTUyLCAweDRFNTIsIDB4MEJEOCwgMHg0RTUzLCAweDRFNTMsIDB4MEI5MywKKyAgICAweDRFNTQsIDB4NEU1NCwgMHgwQzQ0LCAweDRFNTUsIDB4NEU1NSwgMHgyNzczLCAweDRFNTYsIDB4NEU1NiwgMHgwNzJELAorICAgIDB4NEU1NywgMHg0RTU3LCAweDI3NzQsIDB4NEU1OCwgMHg0RTU4LCAweDA0RjAsIDB4NEU1OSwgMHg0RTU5LCAweDEwNTksCisgICAgMHg0RTVBLCAweDRFNUIsIDB4Mjc3NSwgMHg0RTVDLCAweDRFNUMsIDB4MTI3NSwgMHg0RTVELCAweDRFNUQsIDB4MDhGNCwKKyAgICAweDRFNUUsIDB4NEU1RSwgMHgwQzExLCAweDRFNUYsIDB4NEU1RiwgMHgxMDM5LCAweDRFNjAsIDB4NEU2MCwgMHgwRjFELAorICAgIDB4NEU2MSwgMHg0RTYxLCAweDBGNTQsIDB4NEU2MiwgMHg0RTY1LCAweDI3NzcsIDB4NEU2NiwgMHg0RTY2LCAweDBEODAsCisgICAgMHg0RTY3LCAweDRFNjgsIDB4Mjc3QiwgMHg0RTY5LCAweDRFNjksIDB4MTI3NiwgMHg0RTZBLCAweDRFNkYsIDB4Mjc3RCwKKyAgICAweDRFNzAsIDB4NEU3MCwgMHgwQTk5LCAweDRFNzEsIDB4NEU3MSwgMHgwQTc5LCAweDRFNzIsIDB4NEU3MiwgMHgyNzgzLAorICAgIDB4NEU3MywgMHg0RTczLCAweDBDQzQsIDB4NEU3NCwgMHg0RTdELCAweDI3ODQsIDB4NEU3RSwgMHg0RTdFLCAweDBDMjksCisgICAgMHg0RTdGLCAweDRFODEsIDB4Mjc4RSwgMHg0RTgyLCAweDRFODIsIDB4MjA1OSwgMHg0RTgzLCAweDRFODUsIDB4Mjc5MSwKKyAgICAweDRFODYsIDB4NEU4NiwgMHgwQTE0LCAweDRFODcsIDB4NEU4NywgMHgyNzk0LCAweDRFODgsIDB4NEU4OCwgMHgxMENELAorICAgIDB4NEU4OSwgMHg0RTg5LCAweDExOUEsIDB4NEU4QSwgMHg0RThBLCAweDI3OTUsIDB4NEU4QiwgMHg0RThCLCAweDBENTksCisgICAgMHg0RThDLCAweDRFOEMsIDB4MDYzRCwgMHg0RThELCAweDRFOEQsIDB4MTI1NywgMHg0RThFLCAweDRFOEUsIDB4MTBCRiwKKyAgICAweDRFOEYsIDB4NEU4RiwgMHgwOTg0LCAweDRFOTAsIDB4NEU5MCwgMHgyNzk2LCAweDRFOTEsIDB4NEU5MSwgMHgxMTA5LAorICAgIDB4NEU5MiwgMHg0RTkyLCAweDA3QkEsIDB4NEU5MywgMHg0RTkzLCAweDEyNzcsIDB4NEU5NCwgMHg0RTk0LCAweDBFRjQsCisgICAgMHg0RTk1LCAweDRFOTUsIDB4MDhERCwgMHg0RTk2LCAweDRFOTcsIDB4Mjc5NywgMHg0RTk4LCAweDRFOTgsIDB4MTI1RSwKKyAgICAweDRFOTksIDB4NEU5OSwgMHgyNzk5LCAweDRFOUEsIDB4NEU5QSwgMHgwRkYwLCAweDRFOUIsIDB4NEU5QiwgMHgwRjc0LAorICAgIDB4NEU5QywgMHg0RTlELCAweDI3OUEsIDB4NEU5RSwgMHg0RTlFLCAweDIxRjEsIDB4NEU5RiwgMHg0RTlGLCAweDEyNzMsCisgICAgMHg0RUEwLCAweDRFQTAsIDB4MTMwMywgMHg0RUExLCAweDRFQTEsIDB4MEVBNywgMHg0RUEyLCAweDRFQTIsIDB4MDk0NywKKyAgICAweDRFQTMsIDB4NEVBMywgMHgyNzlDLCAweDRFQTQsIDB4NEVBNCwgMHgwODhDLCAweDRFQTUsIDB4NEVBNSwgMHgwNzVDLAorICAgIDB4NEVBNiwgMHg0RUE2LCAweDEwNjcsIDB4NEVBNywgMHg0RUE3LCAweDA0QzEsIDB4NEVBOCwgMHg0RUE4LCAweDA3OTcsCisgICAgMHg0RUE5LCAweDRFQTksIDB4MEIxOSwgMHg0RUFBLCAweDRFQUEsIDB4Mjc5RCwgMHg0RUFCLCAweDRFQUIsIDB4MEY1QSwKKyAgICAweDRFQUMsIDB4NEVBQywgMHgwOEQ4LCAweDRFQUQsIDB4NEVBRCwgMHgwRTU1LCAweDRFQUUsIDB4NEVBRSwgMHgwQTBBLAorICAgIDB4NEVBRiwgMHg0RUIxLCAweDI3OUUsIDB4NEVCMiwgMHg0RUIyLCAweDBDNTQsIDB4NEVCMywgMHg0RUIzLCAweDEzMDUsCisgICAgMHg0RUI0LCAweDRFQjQsIDB4MjdBMSwgMHg0RUI1LCAweDRFQjUsIDB4MTMwOCwgMHg0RUI2LCAweDRFQjksIDB4MjdBMiwKKyAgICAweDRFQkEsIDB4NEVCQSwgMHgwQ0E2LCAweDRFQkIsIDB4NEVCQiwgMHgxMjlGLCAweDRFQkMsIDB4NEVCRSwgMHgyN0E2LAorICAgIDB4NEVCRiwgMHg0RUJGLCAweDEwNjEsIDB4NEVDMCwgMHg0RUMwLCAweDBENDksIDB4NEVDMSwgMHg0RUMxLCAweDBDQTUsCisgICAgMHg0RUMyLCAweDRFQzIsIDB4MTJBMiwgMHg0RUMzLCAweDRFQzMsIDB4MTJBMCwgMHg0RUM0LCAweDRFQzQsIDB4MTI3QywKKyAgICAweDRFQzUsIDB4NEVDNSwgMHgwOEM3LCAweDRFQzYsIDB4NEVDNiwgMHgwQkVDLCAweDRFQzcsIDB4NEVDNywgMHgwNTE1LAorICAgIDB4NEVDOCwgMHg0RUM4LCAweDI3QTksIDB4NEVDOSwgMHg0RUM5LCAweDEyQTEsIDB4NEVDQSwgMHg0RUNBLCAweDA4QzIsCisgICAgMHg0RUNCLCAweDRFQ0IsIDB4MDhCQSwgMHg0RUNDLCAweDRFQ0MsIDB4MjdBQSwgMHg0RUNELCAweDRFQ0QsIDB4MENBRiwKKyAgICAweDRFQ0UsIDB4NEVDRSwgMHgwNTU2LCAweDRFQ0YsIDB4NEVEMCwgMHgyN0FCLCAweDRFRDEsIDB4NEVEMSwgMHgwQTdGLAorICAgIDB4NEVEMiwgMHg0RUQyLCAweDI3QUQsIDB4NEVEMywgMHg0RUQzLCAweDA0OUQsIDB4NEVENCwgMHg0RUQ0LCAweDEyMkQsCisgICAgMHg0RUQ1LCAweDRFRDUsIDB4MEQ2MiwgMHg0RUQ2LCAweDRFRDYsIDB4MERGMCwgMHg0RUQ3LCAweDRFRDcsIDB4MTE2RCwKKyAgICAweDRFRDgsIDB4NEVEOCwgMHgwNkIxLCAweDRFRDksIDB4NEVEOSwgMHgwRjM2LCAweDRFREEsIDB4NEVEQywgMHgyN0FFLAorICAgIDB4NEVERCwgMHg0RURELCAweDEyRUUsIDB4NEVERSwgMHg0RURFLCAweDEyQTYsIDB4NEVERiwgMHg0RURGLCAweDBDMjcsCisgICAgMHg0RUUwLCAweDRFRTAsIDB4MjdCMSwgMHg0RUUxLCAweDRFRTEsIDB4MTJBNCwgMHg0RUUyLCAweDRFRTIsIDB4MjdCMiwKKyAgICAweDRFRTMsIDB4NEVFMywgMHgwNTdELCAweDRFRTQsIDB4NEVFNCwgMHgwQTM3LCAweDRFRTUsIDB4NEVFNSwgMHgxMDVCLAorICAgIDB4NEVFNiwgMHg0RUU3LCAweDI3QjMsIDB4NEVFOCwgMHg0RUU4LCAweDEyQTMsIDB4NEVFOSwgMHg0RUU5LCAweDI3QjUsCisgICAgMHg0RUVBLCAweDRFRUEsIDB4MTA0RSwgMHg0RUVCLCAweDRFRUIsIDB4MTJBNSwgMHg0RUVDLCAweDRFRUMsIDB4MEFDQywKKyAgICAweDRFRUQsIDB4NEVFRiwgMHgyN0I2LCAweDRFRjAsIDB4NEVGMCwgMHgxMDFGLCAweDRFRjEsIDB4NEVGMSwgMHgyN0I5LAorICAgIDB4NEVGMiwgMHg0RUYyLCAweDExRDgsIDB4NEVGMywgMHg0RUYzLCAweDEyQTgsIDB4NEVGNCwgMHg0RUY0LCAweDI3QkEsCisgICAgMHg0RUY1LCAweDRFRjUsIDB4MTJBQiwgMHg0RUY2LCAweDRFRjYsIDB4MDg3MSwgMHg0RUY3LCAweDRFRjcsIDB4MDg0RSwKKyAgICAweDRFRjgsIDB4NEVGQSwgMHgyN0JCLCAweDRFRkIsIDB4NEVGQiwgMHgwQ0E5LCAweDRFRkMsIDB4NEVGQywgMHgyN0JFLAorICAgIDB4NEVGRCwgMHg0RUZELCAweDA2N0EsIDB4NEVGRSwgMHg0RUZFLCAweDI3QkYsIDB4NEVGRiwgMHg0RUZGLCAweDA2NUYsCisgICAgMHg0RjAwLCAweDRGMDAsIDB4MjdDMCwgMHg0RjAxLCAweDRGMDEsIDB4MEMxMiwgMHg0RjAyLCAweDRGMDgsIDB4MjdDMSwKKyAgICAweDRGMDksIDB4NEYwOSwgMHgxMkFFLCAweDRGMEEsIDB4NEYwQSwgMHgxMDQ4LCAweDRGMEIsIDB4NEYwQywgMHgyN0M4LAorICAgIDB4NEYwRCwgMHg0RjBELCAweDBFRjgsIDB4NEYwRSwgMHg0RjBFLCAweDA4MzIsIDB4NEYwRiwgMHg0RjBGLCAweDA2OTksCisgICAgMHg0RjEwLCAweDRGMTAsIDB4MDY0MiwgMHg0RjExLCAweDRGMTEsIDB4MEZBOCwgMHg0RjEyLCAweDRGMTYsIDB4MjdDQSwKKyAgICAweDRGMTcsIDB4NEYxNywgMHgxMUQ5LCAweDRGMTgsIDB4NEYxOCwgMHgxMEFBLCAweDRGMTksIDB4NEYxOSwgMHgwODA0LAorICAgIDB4NEYxQSwgMHg0RjFBLCAweDA3RjYsIDB4NEYxQiwgMHg0RjFCLCAweDEyQTcsIDB4NEYxQywgMHg0RjFELCAweDI3Q0YsCisgICAgMHg0RjFFLCAweDRGMUUsIDB4MENEQSwgMHg0RjFGLCAweDRGMUYsIDB4MEVCRiwgMHg0RjIwLCAweDRGMjAsIDB4MDUyRSwKKyAgICAweDRGMjEsIDB4NEYyMSwgMHgyN0QxLCAweDRGMjIsIDB4NEYyMiwgMHgxMkE5LCAweDRGMjMsIDB4NEYyMywgMHgyN0QyLAorICAgIDB4NEYyNCwgMHg0RjI0LCAweDBEMDQsIDB4NEYyNSwgMHg0RjI1LCAweDEyQUMsIDB4NEYyNiwgMHg0RjI2LCAweDBBN0UsCisgICAgMHg0RjI3LCAweDRGMjcsIDB4MTJBRCwgMHg0RjI4LCAweDRGMjksIDB4MjdEMywgMHg0RjJBLCAweDRGMkEsIDB4MEVDMCwKKyAgICAweDRGMkIsIDB4NEYyQiwgMHgxMkFGLCAweDRGMkMsIDB4NEYyRSwgMHgyN0Q1LCAweDRGMkYsIDB4NEYyRiwgMHgwNDc1LAorICAgIDB4NEYzMCwgMHg0RjMwLCAweDA3MTksIDB4NEYzMSwgMHg0RjMxLCAweDI3RDgsIDB4NEYzMiwgMHg0RjMyLCAweDEyQjcsCisgICAgMHg0RjMzLCAweDRGMzMsIDB4MjdEOSwgMHg0RjM0LCAweDRGMzQsIDB4MDNGNCwgMHg0RjM1LCAweDRGMzUsIDB4MjdEQSwKKyAgICAweDRGMzYsIDB4NEYzNiwgMHgwQTJGLCAweDRGMzcsIDB4NEYzNywgMHgyN0RCLCAweDRGMzgsIDB4NEYzOCwgMHgwRDI1LAorICAgIDB4NEYzOSwgMHg0RjM5LCAweDI3REMsIDB4NEYzQSwgMHg0RjNBLCAweDBEQkEsIDB4NEYzQiwgMHg0RjNCLCAweDI3REQsCisgICAgMHg0RjNDLCAweDRGM0MsIDB4MERCQiwgMHg0RjNELCAweDRGM0QsIDB4MTJCOCwgMHg0RjNFLCAweDRGNDIsIDB4MjdERSwKKyAgICAweDRGNDMsIDB4NEY0MywgMHgwNUM5LCAweDRGNDQsIDB4NEY0NSwgMHgyN0UzLCAweDRGNDYsIDB4NEY0NiwgMHgwNThDLAorICAgIDB4NEY0NywgMHg0RjRDLCAweDI3RTUsIDB4NEY0RCwgMHg0RjRELCAweDBFQ0EsIDB4NEY0RSwgMHg0RjRFLCAweDA1QUUsCisgICAgMHg0RjRGLCAweDRGNEYsIDB4MTFGRSwgMHg0RjUwLCAweDRGNTAsIDB4MTI1MSwgMHg0RjUxLCAweDRGNTEsIDB4MTBCOCwKKyAgICAweDRGNTIsIDB4NEY1MiwgMHgyN0VCLCAweDRGNTMsIDB4NEY1MywgMHgwRTM4LCAweDRGNTQsIDB4NEY1NCwgMHgyN0VDLAorICAgIDB4NEY1NSwgMHg0RjU1LCAweDA3ODUsIDB4NEY1NiwgMHg0RjU2LCAweDI3RUQsIDB4NEY1NywgMHg0RjU3LCAweDEyQjYsCisgICAgMHg0RjU4LCAweDRGNTgsIDB4MTJGMCwgMHg0RjU5LCAweDRGNTksIDB4MTBDNSwgMHg0RjVBLCAweDRGNUEsIDB4MTJCMywKKyAgICAweDRGNUIsIDB4NEY1QiwgMHgwNjhELCAweDRGNUMsIDB4NEY1QywgMHgxMjU0LCAweDRGNUQsIDB4NEY1RCwgMHgxMkI0LAorICAgIDB4NEY1RSwgMHg0RjVFLCAweDEyQjAsIDB4NEY1RiwgMHg0RjVGLCAweDEyQjUsIDB4NEY2MCwgMHg0RjYwLCAweDBCNDYsCisgICAgMHg0RjYxLCAweDRGNjIsIDB4MjdFRSwgMHg0RjYzLCAweDRGNjMsIDB4MTA5QiwgMHg0RjY0LCAweDRGNjQsIDB4MTJBQSwKKyAgICAweDRGNjUsIDB4NEY2NSwgMHgxMkYxLCAweDRGNjYsIDB4NEY2NiwgMHgyN0YwLCAweDRGNjcsIDB4NEY2NywgMHgxMkIxLAorICAgIDB4NEY2OCwgMHg0RjY4LCAweDI3RjEsIDB4NEY2OSwgMHg0RjY5LCAweDBCQTYsIDB4NEY2QSwgMHg0RjZCLCAweDI3RjIsCisgICAgMHg0RjZDLCAweDRGNkMsIDB4MDlCQiwgMHg0RjZELCAweDRGNkUsIDB4MjdGNCwgMHg0RjZGLCAweDRGNkYsIDB4MTAxOSwKKyAgICAweDRGNzAsIDB4NEY3MCwgMHgwM0U2LCAweDRGNzEsIDB4NEY3MiwgMHgyN0Y2LCAweDRGNzMsIDB4NEY3MywgMHgwODQ0LAorICAgIDB4NEY3NCwgMHg0Rjc0LCAweDEyQkEsIDB4NEY3NSwgMHg0Rjc1LCAweDI3RjgsIDB4NEY3NiwgMHg0Rjc2LCAweDEyQjksCisgICAgMHg0Rjc3LCAweDRGN0EsIDB4MjdGOSwgMHg0RjdCLCAweDRGN0IsIDB4MTJDMCwgMHg0RjdDLCAweDRGN0MsIDB4MTJDMiwKKyAgICAweDRGN0QsIDB4NEY3RCwgMHgyN0ZELCAweDRGN0UsIDB4NEY3RSwgMHgxMkJGLCAweDRGN0YsIDB4NEY3RiwgMHgwRDUwLAorICAgIDB4NEY4MCwgMHg0RjgyLCAweDI3RkUsIDB4NEY4MywgMHg0RjgzLCAweDEyQkQsIDB4NEY4NCwgMHg0Rjg0LCAweDExQjUsCisgICAgMHg0Rjg1LCAweDRGODUsIDB4MjgwMSwgMHg0Rjg2LCAweDRGODYsIDB4MUZGMiwgMHg0Rjg3LCAweDRGODcsIDB4MjgwMiwKKyAgICAweDRGODgsIDB4NEY4OCwgMHgwNTAzLCAweDRGODksIDB4NEY4OSwgMHgxMkJDLCAweDRGOEEsIDB4NEY4QSwgMHgyODAzLAorICAgIDB4NEY4QiwgMHg0RjhCLCAweDA5RTgsIDB4NEY4QywgMHg0RjhDLCAweDI4MDQsIDB4NEY4RCwgMHg0RjhELCAweDBENjMsCisgICAgMHg0RjhFLCAweDRGOEUsIDB4MjgwNSwgMHg0RjhGLCAweDRGOEYsIDB4MTJCRSwgMHg0RjkwLCAweDRGOTAsIDB4MjgwNiwKKyAgICAweDRGOTEsIDB4NEY5MSwgMHgxMkJCLCAweDRGOTIsIDB4NEY5MywgMHgyODA3LCAweDRGOTQsIDB4NEY5NCwgMHgxMkM0LAorICAgIDB4NEY5NSwgMHg0Rjk1LCAweDI4MDksIDB4NEY5NiwgMHg0Rjk2LCAweDIwNUQsIDB4NEY5NywgMHg0Rjk3LCAweDA1RjAsCisgICAgMHg0Rjk4LCAweDRGOUEsIDB4MjgwQSwgMHg0RjlCLCAweDRGOUIsIDB4MDcwMiwgMHg0RjlDLCAweDRGOUMsIDB4MjgwRCwKKyAgICAweDRGOUQsIDB4NEY5RCwgMHgxMDQ3LCAweDRGOUUsIDB4NEY5RiwgMHgyODBFLCAweDRGQTAsIDB4NEZBMCwgMHgwRjJELAorICAgIDB4NEZBMSwgMHg0RkEyLCAweDI4MTAsIDB4NEZBMywgMHg0RkEzLCAweDBBNjksIDB4NEZBNCwgMHg0RkE0LCAweDI4MTIsCisgICAgMHg0RkE1LCAweDRGQTUsIDB4MDg5NSwgMHg0RkE2LCAweDRGQTYsIDB4MTE4RCwgMHg0RkE3LCAweDRGQTcsIDB4MDRBNywKKyAgICAweDRGQTgsIDB4NEZBOCwgMHgwQzQ1LCAweDRGQTksIDB4NEZBOSwgMHgwOTc4LCAweDRGQUEsIDB4NEZBQSwgMHgxMkMxLAorICAgIDB4NEZBQiwgMHg0RkFCLCAweDI4MTMsIDB4NEZBQywgMHg0RkFDLCAweDEyQzMsIDB4NEZBRCwgMHg0RkFELCAweDI4MTQsCisgICAgMHg0RkFFLCAweDRGQUUsIDB4MEVGOSwgMHg0RkFGLCAweDRGQUYsIDB4MDdBNSwgMHg0RkIwLCAweDRGQjQsIDB4MjgxNSwKKyAgICAweDRGQjUsIDB4NEZCNSwgMHgwQzUzLCAweDRGQjYsIDB4NEZCRSwgMHgyODFBLCAweDRGQkYsIDB4NEZCRiwgMHgwNDRDLAorICAgIDB4NEZDMCwgMHg0RkMxLCAweDI4MjMsIDB4NEZDMiwgMHg0RkMyLCAweDI2OUMsIDB4NEZDMywgMHg0RkMzLCAweDA1NUMsCisgICAgMHg0RkM0LCAweDRGQzQsIDB4MDYyQywgMHg0RkM1LCAweDRGQzUsIDB4MTJDOCwgMHg0RkM2LCAweDRGQzksIDB4MjgyNSwKKyAgICAweDRGQ0EsIDB4NEZDQSwgMHgwOTJFLCAweDRGQ0IsIDB4NEZDRCwgMHgyODI5LCAweDRGQ0UsIDB4NEZDRSwgMHgxMkYyLAorICAgIDB4NEZDRiwgMHg0RkNGLCAweDBDNEIsIDB4NEZEMCwgMHg0RkQwLCAweDA5RTksIDB4NEZEMSwgMHg0RkQxLCAweDEyQ0MsCisgICAgMHg0RkQyLCAweDRGRDYsIDB4MjgyQywgMHg0RkQ3LCAweDRGRDcsIDB4MERDQywgMHg0RkQ4LCAweDRGRDgsIDB4MDY5QSwKKyAgICAweDRGRDksIDB4NEZEOSwgMHgyODMxLCAweDRGREEsIDB4NEZEQSwgMHgxMkM5LCAweDRGREIsIDB4NEZEQiwgMHgyODMyLAorICAgIDB4NEZEQywgMHg0RkRDLCAweDEyQ0IsIDB4NEZERCwgMHg0RkRELCAweDA0MEMsIDB4NEZERSwgMHg0RkRFLCAweDEwQzYsCisgICAgMHg0RkRGLCAweDRGREYsIDB4MTJDRCwgMHg0RkUwLCAweDRGRTAsIDB4MjFCNSwgMHg0RkUxLCAweDRGRTEsIDB4MEY5MCwKKyAgICAweDRGRTIsIDB4NEZFMiwgMHgyODMzLCAweDRGRTMsIDB4NEZFMywgMHgxMkNBLCAweDRGRTQsIDB4NEZFNSwgMHgyODM0LAorICAgIDB4NEZFNiwgMHg0RkU2LCAweDEyQzUsIDB4NEZFNywgMHg0RkU3LCAweDI4MzYsIDB4NEZFOCwgMHg0RkU4LCAweDEyQzYsCisgICAgMHg0RkU5LCAweDRGRTksIDB4MDlGMiwgMHg0RkVBLCAweDRGRUEsIDB4MTJDNywgMHg0RkVCLCAweDRGRUMsIDB4MjgzNywKKyAgICAweDRGRUQsIDB4NEZFRCwgMHgwODY2LCAweDRGRUUsIDB4NEZFRSwgMHgwRkE5LCAweDRGRUYsIDB4NEZFRiwgMHgwNkE0LAorICAgIDB4NEZGMCwgMHg0RkYwLCAweDI4MzksIDB4NEZGMSwgMHg0RkYxLCAweDA5MTIsIDB4NEZGMiwgMHg0RkYyLCAweDI4M0EsCisgICAgMHg0RkYzLCAweDRGRjMsIDB4MTJEMSwgMHg0RkY0LCAweDRGRjcsIDB4MjgzQiwgMHg0RkY4LCAweDRGRjgsIDB4MTJDRSwKKyAgICAweDRGRjksIDB4NEZGOSwgMHgyODNGLCAweDRGRkEsIDB4NEZGQSwgMHgwM0JFLCAweDRGRkIsIDB4NEZGRCwgMHgyODQwLAorICAgIDB4NEZGRSwgMHg0RkZFLCAweDEyRDYsIDB4NEZGRiwgMHg0RkZGLCAweDI4NDMsIDB4NTAwMCwgMHg1MDAwLCAweDIyQ0MsCisgICAgMHg1MDAxLCAweDUwMDUsIDB4Mjg0NCwgMHg1MDA2LCAweDUwMDYsIDB4MjAxNiwgMHg1MDA3LCAweDUwMDgsIDB4Mjg0OSwKKyAgICAweDUwMDksIDB4NTAwOSwgMHgxRTYyLCAweDUwMEEsIDB4NTAwQSwgMHgyODRCLCAweDUwMEIsIDB4NTAwQiwgMHgxRjIwLAorICAgIDB4NTAwQywgMHg1MDBDLCAweDEyRDgsIDB4NTAwRCwgMHg1MDBELCAweDA0MUYsIDB4NTAwRSwgMHg1MDBFLCAweDI4NEMsCisgICAgMHg1MDBGLCAweDUwMEYsIDB4MTJEMywgMHg1MDEwLCAweDUwMTAsIDB4Mjg0RCwgMHg1MDExLCAweDUwMTEsIDB4MjA3RiwKKyAgICAweDUwMTIsIDB4NTAxMiwgMHgwNTlBLCAweDUwMTMsIDB4NTAxMywgMHgyODRFLCAweDUwMTQsIDB4NTAxNCwgMHgwOTIyLAorICAgIDB4NTAxNSwgMHg1MDE3LCAweDI4NEYsIDB4NTAxOCwgMHg1MDE4LCAweDBFMUIsIDB4NTAxOSwgMHg1MDE5LCAweDA3QTksCisgICAgMHg1MDFBLCAweDUwMUEsIDB4MTA1NywgMHg1MDFCLCAweDUwMUIsIDB4Mjg1MiwgMHg1MDFDLCAweDUwMUMsIDB4MTJENywKKyAgICAweDUwMUQsIDB4NTAxRSwgMHgyODUzLCAweDUwMUYsIDB4NTAxRiwgMHgwOEI5LCAweDUwMjAsIDB4NTAyMCwgMHgyODU1LAorICAgIDB4NTAyMSwgMHg1MDIxLCAweDA0RDAsIDB4NTAyMiwgMHg1MDI0LCAweDI4NTYsIDB4NTAyNSwgMHg1MDI1LCAweDEyRDksCisgICAgMHg1MDI2LCAweDUwMjYsIDB4MDkxQSwgMHg1MDI3LCAweDUwMjcsIDB4Mjg1OSwgMHg1MDI4LCAweDUwMjgsIDB4MTJEQSwKKyAgICAweDUwMjksIDB4NTAyOSwgMHgxMkNGLCAweDUwMkEsIDB4NTAyQSwgMHgwQjQyLCAweDUwMkIsIDB4NTAyQiwgMHgyMDVDLAorICAgIDB4NTAyQywgMHg1MDJDLCAweDEyRDIsIDB4NTAyRCwgMHg1MDJELCAweDEyRDUsIDB4NTAyRSwgMHg1MDJFLCAweDEyRDQsCisgICAgMHg1MDJGLCAweDUwMzksIDB4Mjg1QSwgMHg1MDNBLCAweDUwM0EsIDB4MTE0RiwgMHg1MDNCLCAweDUwM0IsIDB4Mjg2NSwKKyAgICAweDUwM0MsIDB4NTAzQywgMHgxMUI0LCAweDUwM0QsIDB4NTAzRCwgMHgyODY2LCAweDUwM0UsIDB4NTAzRSwgMHgwQzYwLAorICAgIDB4NTAzRiwgMHg1MDQyLCAweDI4NjcsIDB4NTA0MywgMHg1MDQzLCAweDEyREMsIDB4NTA0NCwgMHg1MDQ2LCAweDI4NkIsCisgICAgMHg1MDQ3LCAweDUwNDcsIDB4MDg0QywgMHg1MDQ4LCAweDUwNDgsIDB4MTJERSwgMHg1MDQ5LCAweDUwNDksIDB4MjE5NCwKKyAgICAweDUwNEEsIDB4NTA0QiwgMHgyODZFLCAweDUwNEMsIDB4NTA0QywgMHgxMkQwLCAweDUwNEQsIDB4NTA0RCwgMHgyODcwLAorICAgIDB4NTA0RSwgMHg1MDRFLCAweDEyREYsIDB4NTA0RiwgMHg1MDRGLCAweDBCQ0EsIDB4NTA1MCwgMHg1MDU0LCAweDI4NzEsCisgICAgMHg1MDU1LCAweDUwNTUsIDB4MTJERCwgMHg1MDU2LCAweDUwNTksIDB4Mjg3NiwgMHg1MDVBLCAweDUwNUEsIDB4MTI1MywKKyAgICAweDUwNUIsIDB4NTA1QiwgMHgyODdBLCAweDUwNUMsIDB4NTA1QywgMHgwRTU0LCAweDUwNUQsIDB4NTA2NCwgMHgyODdCLAorICAgIDB4NTA2NSwgMHg1MDY1LCAweDA4NzIsIDB4NTA2NiwgMHg1MDZCLCAweDI4ODMsIDB4NTA2QywgMHg1MDZDLCAweDEyRTAsCisgICAgMHg1MDZELCAweDUwNzMsIDB4Mjg4OSwgMHg1MDc0LCAweDUwNzQsIDB4MUU2NSwgMHg1MDc1LCAweDUwNzUsIDB4MjI4MSwKKyAgICAweDUwNzYsIDB4NTA3NiwgMHgwQjdELCAweDUwNzcsIDB4NTA3NywgMHgwRTY2LCAweDUwNzgsIDB4NTA3QSwgMHgyODkwLAorICAgIDB4NTA3QiwgMHg1MDdCLCAweDEyRTEsIDB4NTA3QywgMHg1MDdELCAweDI4OTMsIDB4NTA3RSwgMHg1MDdFLCAweDEyREIsCisgICAgMHg1MDdGLCAweDUwN0YsIDB4MDRDQSwgMHg1MDgwLCAweDUwODAsIDB4MDk4QiwgMHg1MDgxLCAweDUwODQsIDB4Mjg5NSwKKyAgICAweDUwODUsIDB4NTA4NSwgMHgwNkIwLCAweDUwODYsIDB4NTA4NywgMHgyODk5LCAweDUwODgsIDB4NTA4OCwgMHgwOUU3LAorICAgIDB4NTA4OSwgMHg1MDhDLCAweDI4OUIsIDB4NTA4RCwgMHg1MDhELCAweDA0MDMsIDB4NTA4RSwgMHg1MDk1LCAweDI4OUYsCisgICAgMHg1MDk2LCAweDUwOTYsIDB4MjJDRCwgMHg1MDk3LCAweDUwOTcsIDB4MjhBNywgMHg1MDk4LCAweDUwOTgsIDB4MjEwQSwKKyAgICAweDUwOTksIDB4NTA5OSwgMHgxRTNFLCAweDUwOUEsIDB4NTBBMSwgMHgyOEE4LCAweDUwQTIsIDB4NTBBMiwgMHgyNjdGLAorICAgIDB4NTBBMywgMHg1MEEzLCAweDA1NzksIDB4NTBBNCwgMHg1MEE0LCAweDI4QjAsIDB4NTBBNSwgMHg1MEE1LCAweDEyRTIsCisgICAgMHg1MEE2LCAweDUwQTYsIDB4MjhCMSwgMHg1MEE3LCAweDUwQTcsIDB4MTJFMywgMHg1MEE4LCAweDUwQTgsIDB4MDUyNSwKKyAgICAweDUwQTksIDB4NTBBOSwgMHgxMkU0LCAweDUwQUEsIDB4NTBBQiwgMHgyOEIyLCAweDUwQUMsIDB4NTBBQywgMHgwNTYyLAorICAgIDB4NTBBRCwgMHg1MEFELCAweDIyMkUsIDB4NTBBRSwgMHg1MEIxLCAweDI4QjQsIDB4NTBCMiwgMHg1MEIyLCAweDAzQ0MsCisgICAgMHg1MEIzLCAweDUwQjMsIDB4MUU5NiwgMHg1MEI0LCAweDUwQjQsIDB4MjJDQiwgMHg1MEI1LCAweDUwQjUsIDB4MjI2QywKKyAgICAweDUwQjYsIDB4NTBCNiwgMHgyOEI4LCAweDUwQjcsIDB4NTBCNywgMHgyMTE3LCAweDUwQjgsIDB4NTBCOSwgMHgyOEI5LAorICAgIDB4NTBCQSwgMHg1MEJBLCAweDEyRTUsIDB4NTBCQiwgMHg1MEJCLCAweDBDRUUsIDB4NTBCQywgMHg1MEJELCAweDI4QkIsCisgICAgMHg1MEJFLCAweDUwQkUsIDB4MjBFOCwgMHg1MEJGLCAweDUwQzEsIDB4MjhCRCwgMHg1MEMyLCAweDUwQzIsIDB4MjJENCwKKyAgICAweDUwQzMsIDB4NTBDNCwgMHgyOEMwLCAweDUwQzUsIDB4NTBDNSwgMHgxRkI5LCAweDUwQzYsIDB4NTBDOCwgMHgyOEMyLAorICAgIDB4NTBDOSwgMHg1MEM5LCAweDIyRDgsIDB4NTBDQSwgMHg1MENFLCAweDI4QzUsIDB4NTBDRiwgMHg1MENGLCAweDBGNUUsCisgICAgMHg1MEQwLCAweDUwRDAsIDB4MjhDQSwgMHg1MEQxLCAweDUwRDEsIDB4MjBERiwgMHg1MEQyLCAweDUwRDQsIDB4MjhDQiwKKyAgICAweDUwRDUsIDB4NTBENSwgMHgyMEMyLCAweDUwRDYsIDB4NTBENiwgMHgxMkU2LCAweDUwRDcsIDB4NTBEOSwgMHgyOENFLAorICAgIDB4NTBEQSwgMHg1MERBLCAweDBBMEUsIDB4NTBEQiwgMHg1MERELCAweDI4RDEsIDB4NTBERSwgMHg1MERFLCAweDIxOTUsCisgICAgMHg1MERGLCAweDUwRTQsIDB4MjhENCwgMHg1MEU1LCAweDUwRTUsIDB4MUZBQywgMHg1MEU2LCAweDUwRTYsIDB4MTJFQSwKKyAgICAweDUwRTcsIDB4NTBFNywgMHgwQ0U3LCAweDUwRTgsIDB4NTBFOCwgMHgyMkQzLCAweDUwRTksIDB4NTBFQiwgMHgyOERBLAorICAgIDB4NTBFQywgMHg1MEVDLCAweDEyRTksIDB4NTBFRCwgMHg1MEVELCAweDEyRTgsIDB4NTBFRSwgMHg1MEVFLCAweDEyRUIsCisgICAgMHg1MEVGLCAweDUwRjIsIDB4MjhERCwgMHg1MEYzLCAweDUwRjMsIDB4MEREMCwgMHg1MEY0LCAweDUwRjQsIDB4MjhFMSwKKyAgICAweDUwRjUsIDB4NTBGNSwgMHgwODdBLCAweDUwRjYsIDB4NTBGOCwgMHgyOEUyLCAweDUwRjksIDB4NTBGOSwgMHgxRjgxLAorICAgIDB4NTBGQSwgMHg1MEZBLCAweDI4RTUsIDB4NTBGQiwgMHg1MEZCLCAweDBCQzYsIDB4NTBGQywgMHg1MEZGLCAweDI4RTYsCisgICAgMHg1MTAwLCAweDUxMDAsIDB4MjIxMCwgMHg1MTAxLCAweDUxMDEsIDB4MjhFQSwgMHg1MTAyLCAweDUxMDIsIDB4MjJDRiwKKyAgICAweDUxMDMsIDB4NTEwMywgMHgyOEVCLCAweDUxMDQsIDB4NTEwNCwgMHgyMjEzLCAweDUxMDUsIDB4NTEwNSwgMHgyOEVDLAorICAgIDB4NTEwNiwgMHg1MTA2LCAweDEyRTcsIDB4NTEwNywgMHg1MTA3LCAweDEyRUMsIDB4NTEwOCwgMHg1MTA4LCAweDFGRTQsCisgICAgMHg1MTA5LCAweDUxMDksIDB4MUY5MCwgMHg1MTBBLCAweDUxMEEsIDB4MjhFRCwgMHg1MTBCLCAweDUxMEIsIDB4MTJFRCwKKyAgICAweDUxMEMsIDB4NTEwRiwgMHgyOEVFLCAweDUxMTAsIDB4NTExMCwgMHgyMkQ2LCAweDUxMTEsIDB4NTExMSwgMHgyOEYyLAorICAgIDB4NTExMiwgMHg1MTEyLCAweDBDQzAsIDB4NTExMywgMHg1MTEzLCAweDI4RjMsIDB4NTExNCwgMHg1MTE0LCAweDIyRDAsCisgICAgMHg1MTE1LCAweDUxMTUsIDB4MjJDRSwgMHg1MTE2LCAweDUxMTcsIDB4MjhGNCwgMHg1MTE4LCAweDUxMTgsIDB4MjY4MSwKKyAgICAweDUxMTksIDB4NTExRSwgMHgyOEY2LCAweDUxMUYsIDB4NTExRiwgMHgxRTc2LCAweDUxMjAsIDB4NTEyMCwgMHgyOEZDLAorICAgIDB4NTEyMSwgMHg1MTIxLCAweDA5QzcsIDB4NTEyMiwgMHg1MTI5LCAweDI4RkQsIDB4NTEyQSwgMHg1MTJBLCAweDIyMzEsCisgICAgMHg1MTJCLCAweDUxMzEsIDB4MjkwNSwgMHg1MTMyLCAweDUxMzIsIDB4MUU5MywgMHg1MTMzLCAweDUxMzYsIDB4MjkwQywKKyAgICAweDUxMzcsIDB4NTEzNywgMHgyMkQyLCAweDUxMzgsIDB4NTEzOSwgMHgyOTEwLCAweDUxM0EsIDB4NTEzQSwgMHgyMkQ3LAorICAgIDB4NTEzQiwgMHg1MTNCLCAweDIyRDUsIDB4NTEzQywgMHg1MTNDLCAweDIyRDEsIDB4NTEzRCwgMHg1MTNFLCAweDI5MTIsCisgICAgMHg1MTNGLCAweDUxM0YsIDB4MDYzOCwgMHg1MTQwLCAweDUxNDAsIDB4MTI1OSwgMHg1MTQxLCAweDUxNDEsIDB4MTEwRCwKKyAgICAweDUxNDIsIDB4NTE0MiwgMHgyOTE0LCAweDUxNDMsIDB4NTE0MywgMHgxMEVELCAweDUxNDQsIDB4NTE0NCwgMHgwRkExLAorICAgIDB4NTE0NSwgMHg1MTQ1LCAweDA1MDksIDB4NTE0NiwgMHg1MTQ2LCAweDExNzgsIDB4NTE0NywgMHg1MTQ3LCAweDI5MTUsCisgICAgMHg1MTQ4LCAweDUxNDgsIDB4MEYzNSwgMHg1MTQ5LCAweDUxNDksIDB4MDczQiwgMHg1MTRBLCAweDUxNEEsIDB4MjkxNiwKKyAgICAweDUxNEIsIDB4NTE0QiwgMHgwOTU4LCAweDUxNEMsIDB4NTE0QywgMHgyOTE3LCAweDUxNEQsIDB4NTE0RCwgMHgwQUU3LAorICAgIDB4NTE0RSwgMHg1MTUwLCAweDI5MTgsIDB4NTE1MSwgMHg1MTUxLCAweDA2MTEsIDB4NTE1MiwgMHg1MTUyLCAweDFFRTUsCisgICAgMHg1MTUzLCAweDUxNTMsIDB4MjkxQiwgMHg1MTU0LCAweDUxNTQsIDB4MEU3NCwgMHg1MTU1LCAweDUxNTUsIDB4MTMwMiwKKyAgICAweDUxNTYsIDB4NTE1NiwgMHgxMzA0LCAweDUxNTcsIDB4NTE1OSwgMHgyOTFDLCAweDUxNUEsIDB4NTE1QSwgMHgwNTk0LAorICAgIDB4NTE1QiwgMHg1MTVCLCAweDI5MUYsIDB4NTE1QywgMHg1MTVDLCAweDA1RjQsIDB4NTE1RCwgMHg1MTYxLCAweDI5MjAsCisgICAgMHg1MTYyLCAweDUxNjIsIDB4MDhEMywgMHg1MTYzLCAweDUxNjQsIDB4MjkyNSwgMHg1MTY1LCAweDUxNjUsIDB4MENDNiwKKyAgICAweDUxNjYsIDB4NTE2NywgMHgyOTI3LCAweDUxNjgsIDB4NTE2OCwgMHgwQzg2LCAweDUxNjksIDB4NTE2OSwgMHgyMDI1LAorICAgIDB4NTE2QSwgMHg1MTZBLCAweDI5MjksIDB4NTE2QiwgMHg1MTZCLCAweDAzRDYsIDB4NTE2QywgMHg1MTZDLCAweDA3MDQsCisgICAgMHg1MTZELCAweDUxNkQsIDB4MEE0MiwgMHg1MTZFLCAweDUxNkUsIDB4MTJGNiwgMHg1MTZGLCAweDUxNkYsIDB4MjkyQSwKKyAgICAweDUxNzAsIDB4NTE3MCwgMHgwOUE3LCAweDUxNzEsIDB4NTE3MSwgMHgwNzBCLCAweDUxNzIsIDB4NTE3MiwgMHgyOTJCLAorICAgIDB4NTE3MywgMHg1MTczLCAweDA3MzEsIDB4NTE3NCwgMHg1MTc0LCAweDBGOTYsIDB4NTE3NSwgMHg1MTc1LCAweDA0NjEsCisgICAgMHg1MTc2LCAweDUxNzYsIDB4MEMwMywgMHg1MTc3LCAweDUxNzcsIDB4MDkwRSwgMHg1MTc4LCAweDUxNzgsIDB4MDVDNSwKKyAgICAweDUxNzksIDB4NTE3OSwgMHgxMjI1LCAweDUxN0EsIDB4NTE3QSwgMHgyOTJDLCAweDUxN0IsIDB4NTE3QiwgMHgxMDIxLAorICAgIDB4NTE3QywgMHg1MTdDLCAweDA4NTksIDB4NTE3RCwgMHg1MTdELCAweDBENzUsIDB4NTE3RSwgMHg1MTdGLCAweDI5MkQsCisgICAgMHg1MTgwLCAweDUxODAsIDB4MDgzMCwgMHg1MTgxLCAweDUxODEsIDB4MTJGQSwgMHg1MTgyLCAweDUxODIsIDB4MTI5RCwKKyAgICAweDUxODMsIDB4NTE4NCwgMHgyOTJGLCAweDUxODUsIDB4NTE4NSwgMHgwQjNELCAweDUxODYsIDB4NTE4NywgMHgyOTMxLAorICAgIDB4NTE4OCwgMHg1MTg4LCAweDA2Q0YsIDB4NTE4OSwgMHg1MTg5LCAweDBDOTgsIDB4NTE4QSwgMHg1MThCLCAweDI5MzMsCisgICAgMHg1MThDLCAweDUxOEMsIDB4MDRBOCwgMHg1MThELCAweDUxOEQsIDB4MTExQywgMHg1MThFLCAweDUxOTEsIDB4MjkzNSwKKyAgICAweDUxOTIsIDB4NTE5MiwgMHgwQUI1LCAweDUxOTMsIDB4NTE5NCwgMHgyOTM5LCAweDUxOTUsIDB4NTE5NSwgMHgwQUU2LAorICAgIDB4NTE5NiwgMHg1MTk2LCAweDEzMTQsIDB4NTE5NywgMHg1MTk3LCAweDBDQkEsIDB4NTE5OCwgMHg1MTk4LCAweDI5M0IsCisgICAgMHg1MTk5LCAweDUxOTksIDB4MEY3RiwgMHg1MTlBLCAweDUxOUEsIDB4MjkzQywgMHg1MTlCLCAweDUxOUIsIDB4MDkyQiwKKyAgICAweDUxOUMsIDB4NTE5QywgMHgwQjZBLCAweDUxOUQsIDB4NTE5RiwgMHgyOTNELCAweDUxQTAsIDB4NTFBMCwgMHgwNzMzLAorICAgIDB4NTFBMSwgMHg1MUExLCAweDI5NDAsIDB4NTFBMiwgMHg1MUEyLCAweDEzMTUsIDB4NTFBMywgMHg1MUEzLCAweDI5NDEsCisgICAgMHg1MUE0LCAweDUxQTQsIDB4MTBFQywgMHg1MUE1LCAweDUxQTUsIDB4MTMxNiwgMHg1MUE2LCAweDUxQUEsIDB4Mjk0MiwKKyAgICAweDUxQUIsIDB4NTFBQiwgMHgxMzBGLCAweDUxQUMsIDB4NTFBQywgMHgwNUVCLCAweDUxQUQsIDB4NTFBRSwgMHgyOTQ3LAorICAgIDB4NTFBRiwgMHg1MUFGLCAweDA2ODgsIDB4NTFCMCwgMHg1MUIwLCAweDA0NjIsIDB4NTFCMSwgMHg1MUIxLCAweDEzMTAsCisgICAgMHg1MUIyLCAweDUxQjIsIDB4MDUwQSwgMHg1MUIzLCAweDUxQjMsIDB4MDkyNSwgMHg1MUI0LCAweDUxQjQsIDB4Mjk0OSwKKyAgICAweDUxQjUsIDB4NTFCNSwgMHgwOTgzLCAweDUxQjYsIDB4NTFCNiwgMHgxMDM4LCAweDUxQjcsIDB4NTFCNywgMHgwOUNGLAorICAgIDB4NTFCOCwgMHg1MUJBLCAweDI5NEEsIDB4NTFCQiwgMHg1MUJCLCAweDA1RjIsIDB4NTFCQywgMHg1MUJDLCAweDEzMTIsCisgICAgMHg1MUJELCAweDUxQkQsIDB4MTMxMSwgMHg1MUJFLCAweDUxQkYsIDB4Mjk0RCwgMHg1MUMwLCAweDUxQzAsIDB4MDhFQSwKKyAgICAweDUxQzEsIDB4NTFDMywgMHgyOTRGLCAweDUxQzQsIDB4NTFDNCwgMHgwQkZGLCAweDUxQzUsIDB4NTFDNSwgMHgyOTUyLAorICAgIDB4NTFDNiwgMHg1MUM2LCAweDEyMTksIDB4NTFDNywgMHg1MUM3LCAweDEzMTMsIDB4NTFDOCwgMHg1MUM4LCAweDI5NTMsCisgICAgMHg1MUM5LCAweDUxQzksIDB4MEEwMiwgMHg1MUNBLCAweDUxQ0EsIDB4Mjk1NCwgMHg1MUNCLCAweDUxQ0IsIDB4MDVEMywKKyAgICAweDUxQ0MsIDB4NTFDQywgMHgwQTMxLCAweDUxQ0QsIDB4NTFDRCwgMHgxRUNGLCAweDUxQ0UsIDB4NTFDRSwgMHgyOTU1LAorICAgIDB4NTFDRiwgMHg1MUNGLCAweDA4NjgsIDB4NTFEMCwgMHg1MUQwLCAweDI5NTYsIDB4NTFEMSwgMHg1MUQxLCAweDA1NTgsCisgICAgMHg1MUQyLCAweDUxREEsIDB4Mjk1NywgMHg1MURCLCAweDUxREIsIDB4MEEyNiwgMHg1MURDLCAweDUxREMsIDB4Mjk2MCwKKyAgICAweDUxREQsIDB4NTFERCwgMHgwQjYwLCAweDUxREUsIDB4NTFERiwgMHgyOTYxLCAweDUxRTAsIDB4NTFFMCwgMHgwODJCLAorICAgIDB4NTFFMSwgMHg1MUUxLCAweDA2NEYsIDB4NTFFMiwgMHg1MUUzLCAweDI5NjMsIDB4NTFFNCwgMHg1MUU0LCAweDA2OEMsCisgICAgMHg1MUU1LCAweDUxRUEsIDB4Mjk2NSwgMHg1MUVCLCAweDUxRUIsIDB4MTMwMCwgMHg1MUVDLCAweDUxRUMsIDB4Mjk2QiwKKyAgICAweDUxRUQsIDB4NTFFRCwgMHgwQkRELCAweDUxRUUsIDB4NTFFRSwgMHgyOTZDLCAweDUxRUYsIDB4NTFFRiwgMHgwOTNBLAorICAgIDB4NTFGMCwgMHg1MUYwLCAweDA3RTAsIDB4NTFGMSwgMHg1MUYxLCAweDFGRDksIDB4NTFGMiwgMHg1MUYyLCAweDI5NkQsCisgICAgMHg1MUYzLCAweDUxRjMsIDB4MDVBQiwgMHg1MUY0LCAweDUxRjQsIDB4Mjk2RSwgMHg1MUY1LCAweDUxRjUsIDB4MTM5OSwKKyAgICAweDUxRjYsIDB4NTFGNiwgMHgwRkEyLCAweDUxRjcsIDB4NTFGNywgMHgyOTZGLCAweDUxRjgsIDB4NTFGOCwgMHgwRTZBLAorICAgIDB4NTFGOSwgMHg1MUY5LCAweDAzQzcsIDB4NTFGQSwgMHg1MUZBLCAweDA1MUIsIDB4NTFGQiwgMHg1MUZCLCAweDA4MEMsCisgICAgMHg1MUZDLCAweDUxRkMsIDB4MTM5QSwgMHg1MUZELCAweDUxRkQsIDB4MDc2NiwgMHg1MUZFLCAweDUxRkUsIDB4Mjk3MCwKKyAgICAweDUxRkYsIDB4NTFGRiwgMHgxMTI3LCAweDUyMDAsIDB4NTIwMCwgMHgwNTk3LCAweDUyMDEsIDB4NTIwMSwgMHgwNUQ0LAorICAgIDB4NTIwMiwgMHg1MjAyLCAweDEyOEMsIDB4NTIwMywgMHg1MjAzLCAweDBDQUIsIDB4NTIwNCwgMHg1MjA1LCAweDI5NzEsCisgICAgMHg1MjA2LCAweDUyMDYsIDB4MDY3MywgMHg1MjA3LCAweDUyMDcsIDB4MEM0RCwgMHg1MjA4LCAweDUyMDgsIDB4MTI4RCwKKyAgICAweDUyMDksIDB4NTIwOSwgMHgyOTczLCAweDUyMEEsIDB4NTIwQSwgMHgwOTNDLCAweDUyMEIsIDB4NTIwQywgMHgyOTc0LAorICAgIDB4NTIwRCwgMHg1MjBELCAweDEzOEIsIDB4NTIwRSwgMHg1MjBFLCAweDEyOEUsIDB4NTIwRiwgMHg1MjEwLCAweDI5NzYsCisgICAgMHg1MjExLCAweDUyMTEsIDB4MEY5NywgMHg1MjEyLCAweDUyMTIsIDB4MDdDMywgMHg1MjEzLCAweDUyMTUsIDB4Mjk3OCwKKyAgICAweDUyMTYsIDB4NTIxNiwgMHgxOTZFLCAweDUyMTcsIDB4NTIxNywgMHgwQTE5LCAweDUyMTgsIDB4NTIxOCwgMHgwQTNFLAorICAgIDB4NTIxOSwgMHg1MjE5LCAweDExMzUsIDB4NTIxQSwgMHg1MjFBLCAweDA2RDAsIDB4NTIxQiwgMHg1MjFCLCAweDA1MzcsCisgICAgMHg1MjFDLCAweDUyMUMsIDB4Mjk3QiwgMHg1MjFELCAweDUyMUQsIDB4MDUxQSwgMHg1MjFFLCAweDUyMUYsIDB4Mjk3QywKKyAgICAweDUyMjAsIDB4NTIyMCwgMHgwQ0Y3LCAweDUyMjEsIDB4NTIyMywgMHgyOTdFLCAweDUyMjQsIDB4NTIyNCwgMHgwQjkxLAorICAgIDB4NTIyNSwgMHg1MjI3LCAweDI5ODEsIDB4NTIyOCwgMHg1MjI4LCAweDBCOUEsIDB4NTIyOSwgMHg1MjI5LCAweDA5RTYsCisgICAgMHg1MjJBLCAweDUyMkEsIDB4Mjk4NCwgMHg1MjJCLCAweDUyMkIsIDB4MDQ1OSwgMHg1MjJDLCAweDUyMkMsIDB4Mjk4NSwKKyAgICAweDUyMkQsIDB4NTIyRCwgMHgxMjhGLCAweDUyMkUsIDB4NTIyRSwgMHgwNzI3LCAweDUyMkYsIDB4NTIyRiwgMHgyOTg2LAorICAgIDB4NTIzMCwgMHg1MjMwLCAweDA1OUUsIDB4NTIzMSwgMHg1MjMyLCAweDI5ODcsIDB4NTIzMywgMHg1MjMzLCAweDEyOTAsCisgICAgMHg1MjM0LCAweDUyMzUsIDB4Mjk4OSwgMHg1MjM2LCAweDUyMzYsIDB4MTFDNSwgMHg1MjM3LCAweDUyMzcsIDB4MEQ5NywKKyAgICAweDUyMzgsIDB4NTIzOCwgMHgwQzhBLCAweDUyMzksIDB4NTIzOSwgMHgwQ0VCLCAweDUyM0EsIDB4NTIzQSwgMHgwNTRGLAorICAgIDB4NTIzQiwgMHg1MjNCLCAweDA5NTksIDB4NTIzQywgMHg1MjNDLCAweDI5OEIsIDB4NTIzRCwgMHg1MjNELCAweDA3NEQsCisgICAgMHg1MjNFLCAweDUyM0UsIDB4Mjk4QywgMHg1MjNGLCAweDUyNDAsIDB4MTI5MSwgMHg1MjQxLCAweDUyNDEsIDB4MDYyNiwKKyAgICAweDUyNDIsIDB4NTI0MiwgMHgwODM0LCAweDUyNDMsIDB4NTI0MywgMHgwRTNELCAweDUyNDQsIDB4NTI0NCwgMHgyMkM4LAorICAgIDB4NTI0NSwgMHg1MjQ2LCAweDI5OEQsIDB4NTI0NywgMHg1MjQ3LCAweDIyNjMsIDB4NTI0OCwgMHg1MjQ5LCAweDI5OEYsCisgICAgMHg1MjRBLCAweDUyNEEsIDB4MEY2NCwgMHg1MjRCLCAweDUyNEIsIDB4MjY4MywgMHg1MjRDLCAweDUyNEMsIDB4MTI5MywKKyAgICAweDUyNEQsIDB4NTI0RCwgMHgwQzJELCAweDUyNEUsIDB4NTI0RiwgMHgyOTkxLCAweDUyNTAsIDB4NTI1MCwgMHgwNzI5LAorICAgIDB4NTI1MSwgMHg1MjUxLCAweDA4NzQsIDB4NTI1MiwgMHg1MjUzLCAweDI5OTMsIDB4NTI1NCwgMHg1MjU0LCAweDBFMzEsCisgICAgMHg1MjU1LCAweDUyNTUsIDB4Mjk5NSwgMHg1MjU2LCAweDUyNTYsIDB4MEJFOSwgMHg1MjU3LCAweDUyNUEsIDB4Mjk5NiwKKyAgICAweDUyNUIsIDB4NTI1QiwgMHgxRjE3LCAweDUyNUMsIDB4NTI1QywgMHgxMjk2LCAweDUyNUQsIDB4NTI1RCwgMHgyOTlBLAorICAgIDB4NTI1RSwgMHg1MjVFLCAweDEyOTQsIDB4NTI1RiwgMHg1MjYwLCAweDI5OUIsIDB4NTI2MSwgMHg1MjYxLCAweDEyOTUsCisgICAgMHg1MjYyLCAweDUyNjQsIDB4Mjk5RCwgMHg1MjY1LCAweDUyNjUsIDB4MDQwOSwgMHg1MjY2LCAweDUyNjYsIDB4MjlBMCwKKyAgICAweDUyNjcsIDB4NTI2NywgMHgwOTE2LCAweDUyNjgsIDB4NTI2OCwgMHgyOUExLCAweDUyNjksIDB4NTI2OSwgMHgwRDNBLAorICAgIDB4NTI2QSwgMHg1MjZBLCAweDA4NjcsIDB4NTI2QiwgMHg1MjZELCAweDI5QTIsIDB4NTI2RSwgMHg1MjZFLCAweDFGMkIsCisgICAgMHg1MjZGLCAweDUyNkYsIDB4MDZBQywgMHg1MjcwLCAweDUyNzEsIDB4MjlBNSwgMHg1MjcyLCAweDUyNzIsIDB4MDZFOSwKKyAgICAweDUyNzMsIDB4NTI3MywgMHgyOUE3LCAweDUyNzQsIDB4NTI3NCwgMHgyMkNBLCAweDUyNzUsIDB4NTI3NSwgMHgxRTk5LAorICAgIDB4NTI3NiwgMHg1MjdDLCAweDI5QTgsIDB4NTI3RCwgMHg1MjdELCAweDEyOTgsIDB4NTI3RSwgMHg1MjdFLCAweDI5QUYsCisgICAgMHg1MjdGLCAweDUyN0YsIDB4MDg5QywgMHg1MjgwLCAweDUyODAsIDB4MjlCMCwgMHg1MjgxLCAweDUyODEsIDB4MTI5QSwKKyAgICAweDUyODIsIDB4NTI4MiwgMHgxMjk5LCAweDUyODMsIDB4NTI4MywgMHgxRjRGLCAweDUyODQsIDB4NTI4NiwgMHgyOUIxLAorICAgIDB4NTI4NywgMHg1Mjg3LCAweDFGQ0YsIDB4NTI4OCwgMHg1Mjg4LCAweDBCQkQsIDB4NTI4OSwgMHg1Mjg5LCAweDIwMzYsCisgICAgMHg1MjhBLCAweDUyOEEsIDB4MUYzQSwgMHg1MjhCLCAweDUyOEIsIDB4MjlCNCwgMHg1MjhDLCAweDUyOEMsIDB4MjJDOSwKKyAgICAweDUyOEQsIDB4NTI4RCwgMHgxRjk5LCAweDUyOEUsIDB4NTI4RiwgMHgyOUI1LCAweDUyOTAsIDB4NTI5MCwgMHgxMjlCLAorICAgIDB4NTI5MSwgMHg1MjkxLCAweDFGNzUsIDB4NTI5MiwgMHg1MjkyLCAweDI5QjcsIDB4NTI5MywgMHg1MjkzLCAweDEyOUMsCisgICAgMHg1Mjk0LCAweDUyOUEsIDB4MjlCOCwgMHg1MjlCLCAweDUyOUIsIDB4MDlFRiwgMHg1MjlDLCAweDUyOUMsIDB4MjlCRiwKKyAgICAweDUyOUQsIDB4NTI5RCwgMHgwQzhCLCAweDUyOUUsIDB4NTI5RSwgMHgwM0Y3LCAweDUyOUYsIDB4NTI5RiwgMHgwNkZGLAorICAgIDB4NTJBMCwgMHg1MkEwLCAweDA4NDYsIDB4NTJBMSwgMHg1MkExLCAweDBGMDAsIDB4NTJBMiwgMHg1MkEyLCAweDEzOEQsCisgICAgMHg1MkEzLCAweDUyQTMsIDB4MEExQywgMHg1MkE0LCAweDUyQTcsIDB4MjlDMCwgMHg1MkE4LCAweDUyQTgsIDB4MDVFRSwKKyAgICAweDUyQTksIDB4NTJBOSwgMHgxMUY5LCAweDUyQUEsIDB4NTJBQSwgMHgwQjZELCAweDUyQUIsIDB4NTJBQiwgMHgwOEFBLAorICAgIDB4NTJBQywgMHg1MkFELCAweDEzOEUsIDB4NTJBRSwgMHg1MkIwLCAweDI5QzQsIDB4NTJCMSwgMHg1MkIxLCAweDA5RTMsCisgICAgMHg1MkIyLCAweDUyQjIsIDB4MDhEMSwgMHg1MkIzLCAweDUyQjMsIDB4MDlCOCwgMHg1MkI0LCAweDUyQkQsIDB4MjlDNywKKyAgICAweDUyQkUsIDB4NTJCRSwgMHgxMzkwLCAweDUyQkYsIDB4NTJCRiwgMHgwRDVELCAweDUyQzAsIDB4NTJDMCwgMHgyOUQxLAorICAgIDB4NTJDMSwgMHg1MkMxLCAweDFGQkUsIDB4NTJDMiwgMHg1MkMyLCAweDI5RDIsIDB4NTJDMywgMHg1MkMzLCAweDA0NzEsCisgICAgMHg1MkM0LCAweDUyQzYsIDB4MjlEMywgMHg1MkM3LCAweDUyQzcsIDB4MTBBNywgMHg1MkM4LCAweDUyQzgsIDB4MjlENiwKKyAgICAweDUyQzksIDB4NTJDOSwgMHgwQUU4LCAweDUyQ0EsIDB4NTJDQSwgMHgyOUQ3LCAweDUyQ0IsIDB4NTJDQiwgMHgwRkQ0LAorICAgIDB4NTJDQywgMHg1MkNGLCAweDI5RDgsIDB4NTJEMCwgMHg1MkQwLCAweDEzOTIsIDB4NTJEMSwgMHg1MkQxLCAweDI5REMsCisgICAgMHg1MkQyLCAweDUyRDIsIDB4MDlDMCwgMHg1MkQzLCAweDUyRDQsIDB4MjlERCwgMHg1MkQ1LCAweDUyRDUsIDB4MUVDRCwKKyAgICAweDUyRDYsIDB4NTJENiwgMHgxMzkzLCAweDUyRDcsIDB4NTJENywgMHgyOURGLCAweDUyRDgsIDB4NTJEOCwgMHgwOTNFLAorICAgIDB4NTJEOSwgMHg1MkQ5LCAweDIxQTksIDB4NTJEQSwgMHg1MkRBLCAweDI5RTAsIDB4NTJEQiwgMHg1MkRCLCAweDIxRTYsCisgICAgMHg1MkRDLCAweDUyREMsIDB4MjlFMSwgMHg1MkRELCAweDUyREQsIDB4MjEyNywgMHg1MkRFLCAweDUyREUsIDB4MjAwMywKKyAgICAweDUyREYsIDB4NTJERiwgMHgwQjFGLCAweDUyRTAsIDB4NTJFMSwgMHgyOUUyLCAweDUyRTIsIDB4NTJFMiwgMHgyMTMyLAorICAgIDB4NTJFMywgMHg1MkUzLCAweDI5RTQsIDB4NTJFNCwgMHg1MkU0LCAweDBDNTcsIDB4NTJFNSwgMHg1MkVGLCAweDI5RTUsCisgICAgMHg1MkYwLCAweDUyRjAsIDB4MTM5NCwgMHg1MkYxLCAweDUyRjEsIDB4MjMyMywgMHg1MkYyLCAweDUyRjQsIDB4MjlGMCwKKyAgICAweDUyRjUsIDB4NTJGNSwgMHgyMDExLCAweDUyRjYsIDB4NTJGNywgMHgyOUYzLCAweDUyRjgsIDB4NTJGOCwgMHgyMEY1LAorICAgIDB4NTJGOSwgMHg1MkY5LCAweDEyRkMsIDB4NTJGQSwgMHg1MkZBLCAweDBEMTAsIDB4NTJGQiwgMHg1MkZELCAweDI5RjUsCisgICAgMHg1MkZFLCAweDUyRkUsIDB4MDcwRCwgMHg1MkZGLCAweDUyRkYsIDB4MEVGRiwgMHg1MzAwLCAweDUzMDAsIDB4MTEwQiwKKyAgICAweDUzMDEsIDB4NTMwNCwgMHgyOUY4LCAweDUzMDUsIDB4NTMwNSwgMHgwNDA3LCAweDUzMDYsIDB4NTMwNiwgMHgwNTU1LAorICAgIDB4NTMwNywgMHg1MzA3LCAweDI5RkMsIDB4NTMwOCwgMHg1MzA4LCAweDBGQTQsIDB4NTMwOSwgMHg1MzBDLCAweDI5RkQsCisgICAgMHg1MzBELCAweDUzMEQsIDB4MTJGRCwgMHg1MzBFLCAweDUzMEUsIDB4MkEwMSwgMHg1MzBGLCAweDUzMEYsIDB4MTRCNSwKKyAgICAweDUzMTAsIDB4NTMxMCwgMHgxMkZGLCAweDUzMTEsIDB4NTMxNCwgMHgyQTAyLCAweDUzMTUsIDB4NTMxNSwgMHgxMjY2LAorICAgIDB4NTMxNiwgMHg1MzE2LCAweDA3QzQsIDB4NTMxNywgMHg1MzE3LCAweDA0MUEsIDB4NTMxOCwgMHg1MzE4LCAweDJBMDYsCisgICAgMHg1MzE5LCAweDUzMTksIDB4MDRGQywgMHg1MzFBLCAweDUzMUEsIDB4MTI4NCwgMHg1MzFCLCAweDUzMUMsIDB4MkEwNywKKyAgICAweDUzMUQsIDB4NTMxRCwgMHgxMTE0LCAweDUzMUUsIDB4NTMxRiwgMHgyQTA5LCAweDUzMjAsIDB4NTMyMCwgMHgwODg0LAorICAgIDB4NTMyMSwgMHg1MzIxLCAweDA5N0MsIDB4NTMyMiwgMHg1MzIyLCAweDJBMEIsIDB4NTMyMywgMHg1MzIzLCAweDBGMjgsCisgICAgMHg1MzI0LCAweDUzMjUsIDB4MkEwQywgMHg1MzI2LCAweDUzMjYsIDB4MTI4NiwgMHg1MzI3LCAweDUzMjksIDB4MkEwRSwKKyAgICAweDUzMkEsIDB4NTMyQSwgMHgwNjY4LCAweDUzMkIsIDB4NTMyQywgMHgyQTExLCAweDUzMkQsIDB4NTMyRCwgMHgyMkM1LAorICAgIDB4NTMyRSwgMHg1MzJFLCAweDEyODcsIDB4NTMyRiwgMHg1MzJGLCAweDFGNUUsIDB4NTMzMCwgMHg1MzMwLCAweDJBMTMsCisgICAgMHg1MzMxLCAweDUzMzEsIDB4MjJDNiwgMHg1MzMyLCAweDUzMzgsIDB4MkExNCwgMHg1MzM5LCAweDUzMzksIDB4MEJDNCwKKyAgICAweDUzM0EsIDB4NTMzQSwgMHgwQzc1LCAweDUzM0IsIDB4NTMzQiwgMHgxMDQ0LCAweDUzM0MsIDB4NTMzRCwgMHgyQTFCLAorICAgIDB4NTMzRSwgMHg1MzNFLCAweDEyODgsIDB4NTMzRiwgMHg1MzNGLCAweDBCNDcsIDB4NTM0MCwgMHg1MzQwLCAweDIwRUYsCisgICAgMHg1MzQxLCAweDUzNDEsIDB4MEQ0NSwgMHg1MzQyLCAweDUzNDIsIDB4MkExRCwgMHg1MzQzLCAweDUzNDMsIDB4MEMyNCwKKyAgICAweDUzNDQsIDB4NTM0NCwgMHgyQTFFLCAweDUzNDUsIDB4NTM0NSwgMHgxMjVDLCAweDUzNDYsIDB4NTM0NiwgMHgyQTFGLAorICAgIDB4NTM0NywgMHg1MzQ3LCAweDBEMzYsIDB4NTM0OCwgMHg1MzQ4LCAweDBFRjYsIDB4NTM0OSwgMHg1MzQ5LCAweDA3RjEsCisgICAgMHg1MzRBLCAweDUzNEEsIDB4MDNGNiwgMHg1MzRCLCAweDUzNEQsIDB4MkEyMCwgMHg1MzRFLCAweDUzNEUsIDB4MDdCRiwKKyAgICAweDUzNEYsIDB4NTM0RiwgMHgwRjc4LCAweDUzNTAsIDB4NTM1MCwgMHgyQTIzLCAweDUzNTEsIDB4NTM1MSwgMHgwNDE5LAorICAgIDB4NTM1MiwgMHg1MzUyLCAweDEyNDEsIDB4NTM1MywgMHg1MzUzLCAweDEyMUMsIDB4NTM1NCwgMHg1MzU0LCAweDIxRDAsCisgICAgMHg1MzU1LCAweDUzNTUsIDB4MDU4NiwgMHg1MzU2LCAweDUzNTYsIDB4MEE5QiwgMHg1MzU3LCAweDUzNTcsIDB4MEIzMiwKKyAgICAweDUzNTgsIDB4NTM1OSwgMHgyQTI0LCAweDUzNUEsIDB4NTM1QSwgMHgwNDcwLCAweDUzNUIsIDB4NTM1QiwgMHgyQTI2LAorICAgIDB4NTM1QywgMHg1MzVDLCAweDA0N0UsIDB4NTM1RCwgMHg1MzVELCAweDJBMjcsIDB4NTM1RSwgMHg1MzVFLCAweDA0NEUsCisgICAgMHg1MzVGLCAweDUzNUYsIDB4MTRGQSwgMHg1MzYwLCAweDUzNjAsIDB4MTE1RCwgMHg1MzYxLCAweDUzNjEsIDB4MDkzNSwKKyAgICAweDUzNjIsIDB4NTM2MiwgMHgwQTUzLCAweDUzNjMsIDB4NTM2MywgMHgxMjhCLCAweDUzNjQsIDB4NTM2NCwgMHgwQTU4LAorICAgIDB4NTM2NSwgMHg1MzY1LCAweDJBMjgsIDB4NTM2NiwgMHg1MzY2LCAweDEyOEEsIDB4NTM2NywgMHg1MzY3LCAweDBFRTMsCisgICAgMHg1MzY4LCAweDUzNjgsIDB4MkEyOSwgMHg1MzY5LCAweDUzNjksIDB4MTM1MiwgMHg1MzZBLCAweDUzNkEsIDB4MkEyQSwKKyAgICAweDUzNkIsIDB4NTM2QiwgMHgwRUNGLCAweDUzNkMsIDB4NTM2RCwgMHgyQTJCLCAweDUzNkUsIDB4NTM2RSwgMHgxMjZBLAorICAgIDB4NTM2RiwgMHg1MzZGLCAweDBBQjMsIDB4NTM3MCwgMHg1MzcwLCAweDEwODYsIDB4NTM3MSwgMHg1MzcxLCAweDBFQjIsCisgICAgMHg1MzcyLCAweDUzNzIsIDB4MkEyRCwgMHg1MzczLCAweDUzNzMsIDB4MDgyNywgMHg1Mzc0LCAweDUzNzQsIDB4MEM4RiwKKyAgICAweDUzNzUsIDB4NTM3NSwgMHgwQTc4LCAweDUzNzYsIDB4NTM3NiwgMHgyQTJFLCAweDUzNzcsIDB4NTM3NywgMHgwOTFDLAorICAgIDB4NTM3OCwgMHg1Mzc4LCAweDBGODEsIDB4NTM3OSwgMHg1Mzc5LCAweDJBMkYsIDB4NTM3QSwgMHg1MzdBLCAweDEzNTMsCisgICAgMHg1MzdCLCAweDUzN0UsIDB4MkEzMCwgMHg1MzdGLCAweDUzN0YsIDB4MEM2MSwgMHg1MzgwLCAweDUzODEsIDB4MkEzNCwKKyAgICAweDUzODIsIDB4NTM4MiwgMHgwNENDLCAweDUzODMsIDB4NTM4MywgMHgyQTM2LCAweDUzODQsIDB4NTM4NCwgMHgwNjMxLAorICAgIDB4NTM4NSwgMHg1Mzg1LCAweDBFNEYsIDB4NTM4NiwgMHg1Mzg2LCAweDA5RTUsIDB4NTM4NywgMHg1Mzg4LCAweDJBMzcsCisgICAgMHg1Mzg5LCAweDUzODksIDB4MDlFMiwgMHg1MzhBLCAweDUzOEEsIDB4MkEzOSwgMHg1MzhCLCAweDUzOEIsIDB4MEZFMiwKKyAgICAweDUzOEMsIDB4NTM4QywgMHgxMDBBLCAweDUzOEQsIDB4NTM4RCwgMHgxMjdELCAweDUzOEUsIDB4NTM5NCwgMHgyQTNBLAorICAgIDB4NTM5NSwgMHg1Mzk1LCAweDA0QTUsIDB4NTM5NiwgMHg1Mzk3LCAweDJBNDEsIDB4NTM5OCwgMHg1Mzk4LCAweDA5RDAsCisgICAgMHg1Mzk5LCAweDUzOTksIDB4MjJDMSwgMHg1MzlBLCAweDUzOUEsIDB4MDdBOCwgMHg1MzlCLCAweDUzOUMsIDB4MkE0MywKKyAgICAweDUzOUQsIDB4NTM5RCwgMHgxMjdFLCAweDUzOUUsIDB4NTM5RSwgMHgyQTQ1LCAweDUzOUYsIDB4NTM5RiwgMHgxMEYwLAorICAgIDB4NTNBMCwgMHg1M0EwLCAweDFFNjQsIDB4NTNBMSwgMHg1M0ExLCAweDJBNDYsIDB4NTNBMiwgMHg1M0EyLCAweDBGNEUsCisgICAgMHg1M0EzLCAweDUzQTMsIDB4MTI3RiwgMHg1M0E0LCAweDUzQTQsIDB4MkE0NywgMHg1M0E1LCAweDUzQTUsIDB4MTI4MCwKKyAgICAweDUzQTYsIDB4NTNBNiwgMHgwRjMwLCAweDUzQTcsIDB4NTNBNywgMHgyQTQ4LCAweDUzQTgsIDB4NTNBOCwgMHgwNTFELAorICAgIDB4NTNBOSwgMHg1M0E5LCAweDA4RjYsIDB4NTNBQSwgMHg1M0FDLCAweDJBNDksIDB4NTNBRCwgMHg1M0FELCAweDIxRjksCisgICAgMHg1M0FFLCAweDUzQUUsIDB4MTI4MSwgMHg1M0FGLCAweDUzQjEsIDB4MkE0QywgMHg1M0IyLCAweDUzQjIsIDB4MjAxMCwKKyAgICAweDUzQjMsIDB4NTNCMywgMHgyQTRGLCAweDUzQjQsIDB4NTNCNCwgMHgyMkMyLCAweDUzQjUsIDB4NTNCNSwgMHgyQTUwLAorICAgIDB4NTNCNiwgMHg1M0I2LCAweDEzOUMsIDB4NTNCNywgMHg1M0JBLCAweDJBNTEsIDB4NTNCQiwgMHg1M0JCLCAweDBDODAsCisgICAgMHg1M0JDLCAweDUzQkUsIDB4MkE1NSwgMHg1M0JGLCAweDUzQkYsIDB4MEY0NSwgMHg1M0MwLCAweDUzQzAsIDB4MkE1OCwKKyAgICAweDUzQzEsIDB4NTNDMSwgMHgwQ0Q5LCAweDUzQzIsIDB4NTNDMiwgMHgwNDk1LCAweDUzQzMsIDB4NTNDMywgMHgxRTVBLAorICAgIDB4NTNDNCwgMHg1M0M3LCAweDJBNTksIDB4NTNDOCwgMHg1M0M4LCAweDEwQkIsIDB4NTNDOSwgMHg1M0M5LCAweDA0QUQsCisgICAgMHg1M0NBLCAweDUzQ0EsIDB4MDgyMywgMHg1M0NCLCAweDUzQ0IsIDB4MTBCNiwgMHg1M0NDLCAweDUzQ0MsIDB4MERBMCwKKyAgICAweDUzQ0QsIDB4NTNDRCwgMHgwNjUxLCAweDUzQ0UsIDB4NTNEMCwgMHgyQTVELCAweDUzRDEsIDB4NTNEMSwgMHgwNjNGLAorICAgIDB4NTNEMiwgMHg1M0QzLCAweDJBNjAsIDB4NTNENCwgMHg1M0Q0LCAweDBEN0MsIDB4NTNENSwgMHg1M0Q1LCAweDJBNjIsCisgICAgMHg1M0Q2LCAweDUzRDYsIDB4MEM3QywgMHg1M0Q3LCAweDUzRDcsIDB4MEQ3MywgMHg1M0Q4LCAweDUzRDgsIDB4MDQ0RCwKKyAgICAweDUzRDksIDB4NTNEOSwgMHgwRkJCLCAweDUzREEsIDB4NTNEQSwgMHgyQTYzLCAweDUzREIsIDB4NTNEQiwgMHgwQjkyLAorICAgIDB4NTNEQywgMHg1M0RFLCAweDJBNjQsIDB4NTNERiwgMHg1M0RGLCAweDEzOTUsIDB4NTNFMCwgMHg1M0UwLCAweDA1REYsCisgICAgMHg1M0UxLCAweDUzRTEsIDB4MkE2NywgMHg1M0UyLCAweDUzRTIsIDB4MUVBMiwgMHg1M0UzLCAweDUzRTMsIDB4MDk2NywKKyAgICAweDUzRTQsIDB4NTNFNCwgMHgwNzFFLCAweDUzRTUsIDB4NTNFNSwgMHgwOTEzLCAweDUzRTYsIDB4NTNFNiwgMHgwQTM2LAorICAgIDB4NTNFNywgMHg1M0U3LCAweDJBNjgsIDB4NTNFOCwgMHg1M0U4LCAweDE0RkUsIDB4NTNFOSwgMHg1M0U5LCAweDE0RkQsCisgICAgMHg1M0VBLCAweDUzRUEsIDB4MTFCQSwgMHg1M0VCLCAweDUzRUIsIDB4MDhBMSwgMHg1M0VDLCAweDUzRUMsIDB4MTE3QSwKKyAgICAweDUzRUQsIDB4NTNFRCwgMHgwM0QzLCAweDUzRUUsIDB4NTNFRSwgMHgwNUUyLCAweDUzRUYsIDB4NTNFRiwgMHgwOTU2LAorICAgIDB4NTNGMCwgMHg1M0YwLCAweDBERkIsIDB4NTNGMSwgMHg1M0YxLCAweDE0RkIsIDB4NTNGMiwgMHg1M0YyLCAweDBENEUsCisgICAgMHg1M0YzLCAweDUzRjMsIDB4MTBCNywgMHg1M0Y0LCAweDUzRjQsIDB4MkE2OSwgMHg1M0Y1LCAweDUzRjUsIDB4MTI4NSwKKyAgICAweDUzRjYsIDB4NTNGNiwgMHgxMDNELCAweDUzRjcsIDB4NTNGNywgMHgwNzdDLCAweDUzRjgsIDB4NTNGOCwgMHgwREIzLAorICAgIDB4NTNGOSwgMHg1M0Y5LCAweDBFMTEsIDB4NTNGQSwgMHg1M0ZBLCAweDJBNkEsIDB4NTNGQiwgMHg1M0ZCLCAweDE0RkYsCisgICAgMHg1M0ZDLCAweDUzRkMsIDB4MDVEMSwgMHg1M0ZELCAweDUzRkQsIDB4MTRGQywgMHg1M0ZFLCAweDUzRkYsIDB4MkE2QiwKKyAgICAweDU0MDAsIDB4NTQwMCwgMHgyQTZELCAweDU0MDEsIDB4NTQwMSwgMHgxMERBLCAweDU0MDIsIDB4NTQwMiwgMHgyQTZFLAorICAgIDB4NTQwMywgMHg1NDAzLCAweDA0RjksIDB4NTQwNCwgMHg1NDA0LCAweDA2RjIsIDB4NTQwNSwgMHg1NDA1LCAweDJBNkYsCisgICAgMHg1NDA2LCAweDU0MDYsIDB4MTUwMiwgMHg1NDA3LCAweDU0MDcsIDB4MkE3MCwgMHg1NDA4LCAweDU0MDgsIDB4MDc4NiwKKyAgICAweDU0MDksIDB4NTQwOSwgMHgwODFELCAweDU0MEEsIDB4NTQwQSwgMHgwNUQ2LCAweDU0MEIsIDB4NTQwQiwgMHgyQTcxLAorICAgIDB4NTQwQywgMHg1NDBDLCAweDBFNUQsIDB4NTQwRCwgMHg1NDBELCAweDBCMDAsIDB4NTQwRSwgMHg1NDBFLCAweDA3QUEsCisgICAgMHg1NDBGLCAweDU0MEYsIDB4MDlERiwgMHg1NDEwLCAweDU0MTAsIDB4MEU3MywgMHg1NDExLCAweDU0MTEsIDB4MEY1RiwKKyAgICAweDU0MTIsIDB4NTQxMiwgMHgxNTAwLCAweDU0MTMsIDB4NTQxMywgMHgwRjMyLCAweDU0MTQsIDB4NTQxNCwgMHgyQTcyLAorICAgIDB4NTQxNSwgMHg1NDE1LCAweDBBNjcsIDB4NTQxNiwgMHg1NDE2LCAweDE1MDEsIDB4NTQxNywgMHg1NDE3LCAweDBBOTcsCisgICAgMHg1NDE4LCAweDU0MUEsIDB4MkE3MywgMHg1NDFCLCAweDU0MUIsIDB4MDkyQywgMHg1NDFDLCAweDU0MUMsIDB4MkE3NiwKKyAgICAweDU0MUQsIDB4NTQxRCwgMHgwQTI4LCAweDU0MUUsIDB4NTQxRSwgMHgwRTdELCAweDU0MUYsIDB4NTQxRiwgMHgxMDdFLAorICAgIDB4NTQyMCwgMHg1NDIwLCAweDA2NkEsIDB4NTQyMSwgMHg1NDIxLCAweDE1MDksIDB4NTQyMiwgMHg1NDIyLCAweDJBNzcsCisgICAgMHg1NDIzLCAweDU0MjMsIDB4MTUwQywgMHg1NDI0LCAweDU0MjUsIDB4MkE3OCwgMHg1NDI2LCAweDU0MjYsIDB4MDY4RSwKKyAgICAweDU0MjcsIDB4NTQyNywgMHgwM0Q0LCAweDU0MjgsIDB4NTQyOCwgMHgwNjE1LCAweDU0MjksIDB4NTQyOSwgMHgwNjcxLAorICAgIDB4NTQyQSwgMHg1NDJBLCAweDJBN0EsIDB4NTQyQiwgMHg1NDJCLCAweDA3NjMsIDB4NTQyQywgMHg1NDJDLCAweDBFNTAsCisgICAgMHg1NDJELCAweDU0MkQsIDB4MDk2MSwgMHg1NDJFLCAweDU0MkUsIDB4MERBNiwgMHg1NDJGLCAweDU0MkYsIDB4MEMxMywKKyAgICAweDU0MzAsIDB4NTQzMCwgMHgyQTdCLCAweDU0MzEsIDB4NTQzMSwgMHgxMUE3LCAweDU0MzIsIDB4NTQzMiwgMHgxNTBELAorICAgIDB4NTQzMywgMHg1NDMzLCAweDJBN0MsIDB4NTQzNCwgMHg1NDM0LCAweDBFRjEsIDB4NTQzNSwgMHg1NDM1LCAweDA0RDgsCisgICAgMHg1NDM2LCAweDU0MzcsIDB4MkE3RCwgMHg1NDM4LCAweDU0MzgsIDB4MEYwQiwgMHg1NDM5LCAweDU0MzksIDB4MDUzOCwKKyAgICAweDU0M0EsIDB4NTQzQSwgMHgyQTdGLCAweDU0M0IsIDB4NTQzQiwgMHgwRUQ2LCAweDU0M0MsIDB4NTQzQywgMHgwN0E3LAorICAgIDB4NTQzRCwgMHg1NDNELCAweDJBODAsIDB4NTQzRSwgMHg1NDNFLCAweDBFRjAsIDB4NTQzRiwgMHg1NDNGLCAweDJBODEsCisgICAgMHg1NDQwLCAweDU0NDAsIDB4MEZFNiwgMHg1NDQxLCAweDU0NDIsIDB4MkE4MiwgMHg1NDQzLCAweDU0NDMsIDB4MTUwOCwKKyAgICAweDU0NDQsIDB4NTQ0NSwgMHgyQTg0LCAweDU0NDYsIDB4NTQ0NiwgMHgwNTc3LCAweDU0NDcsIDB4NTQ0NywgMHgyQTg2LAorICAgIDB4NTQ0OCwgMHg1NDQ4LCAweDA0RUYsIDB4NTQ0OSwgMHg1NDQ5LCAweDJBODcsIDB4NTQ0QSwgMHg1NDRBLCAweDA2RTEsCisgICAgMHg1NDRCLCAweDU0NEIsIDB4MTUwMywgMHg1NDRDLCAweDU0NEYsIDB4MkE4OCwgMHg1NDUwLCAweDU0NTAsIDB4MEIyOCwKKyAgICAweDU0NTEsIDB4NTQ1MSwgMHgyQThDLCAweDU0NTIsIDB4NTQ1NCwgMHgxNTA0LCAweDU0NTUsIDB4NTQ1NSwgMHgwQjdDLAorICAgIDB4NTQ1NiwgMHg1NDU2LCAweDE1MDcsIDB4NTQ1NywgMHg1NDU3LCAweDE1MEEsIDB4NTQ1OCwgMHg1NDU4LCAweDEwRjQsCisgICAgMHg1NDU5LCAweDU0NTksIDB4MTUwQiwgMHg1NDVBLCAweDU0NUEsIDB4MkE4RCwgMHg1NDVCLCAweDU0NUIsIDB4MEMzNywKKyAgICAweDU0NUMsIDB4NTQ1QywgMHgwRUU3LCAweDU0NUQsIDB4NTQ2MSwgMHgyQThFLCAweDU0NjIsIDB4NTQ2MiwgMHgwQjNCLAorICAgIDB4NTQ2MywgMHg1NDYzLCAweDJBOTMsIDB4NTQ2NCwgMHg1NDY0LCAweDE1MTIsIDB4NTQ2NSwgMHg1NDY1LCAweDJBOTQsCisgICAgMHg1NDY2LCAweDU0NjYsIDB4MTUxNywgMHg1NDY3LCAweDU0NjcsIDB4MkE5NSwgMHg1NDY4LCAweDU0NjgsIDB4MTFEQiwKKyAgICAweDU0NjksIDB4NTQ3MCwgMHgyQTk2LCAweDU0NzEsIDB4NTQ3MSwgMHgxNTExLCAweDU0NzIsIDB4NTQ3MiwgMHgxNTIyLAorICAgIDB4NTQ3MywgMHg1NDczLCAweDBFQzUsIDB4NTQ3NCwgMHg1NDc0LCAweDJBOUUsIDB4NTQ3NSwgMHg1NDc1LCAweDA3N0UsCisgICAgMHg1NDc2LCAweDU0NzYsIDB4MTUxNiwgMHg1NDc3LCAweDU0NzcsIDB4MTUxMCwgMHg1NDc4LCAweDU0NzgsIDB4MEI5RiwKKyAgICAweDU0NzksIDB4NTQ3QSwgMHgyQTlGLCAweDU0N0IsIDB4NTQ3QiwgMHgwRDI0LCAweDU0N0MsIDB4NTQ3QywgMHgwN0FCLAorICAgIDB4NTQ3RCwgMHg1NDdELCAweDBCMDEsIDB4NTQ3RSwgMHg1NDdGLCAweDJBQTEsIDB4NTQ4MCwgMHg1NDgwLCAweDA5MDYsCisgICAgMHg1NDgxLCAweDU0ODEsIDB4MkFBMywgMHg1NDgyLCAweDU0ODIsIDB4MTUwRSwgMHg1NDgzLCAweDU0ODMsIDB4MkFBNCwKKyAgICAweDU0ODQsIDB4NTQ4NCwgMHgxNTE1LCAweDU0ODUsIDB4NTQ4NSwgMHgyQUE1LCAweDU0ODYsIDB4NTQ4NiwgMHgwQjk5LAorICAgIDB4NTQ4NywgMHg1NDhBLCAweDJBQTYsIDB4NTQ4QiwgMHg1NDhCLCAweDExNDcsIDB4NTQ4QywgMHg1NDhDLCAweDA3ODQsCisgICAgMHg1NDhELCAweDU0OEQsIDB4MkFBQSwgMHg1NDhFLCAweDU0OEUsIDB4MDhGQiwgMHg1NDhGLCAweDU0OEYsIDB4MTBBMiwKKyAgICAweDU0OTAsIDB4NTQ5MCwgMHgwNkJCLCAweDU0OTEsIDB4NTQ5MSwgMHgyQUFCLCAweDU0OTIsIDB4NTQ5MiwgMHgxMUUzLAorICAgIDB4NTQ5MywgMHg1NDkzLCAweDJBQUMsIDB4NTQ5NCwgMHg1NDk0LCAweDE1MEYsIDB4NTQ5NSwgMHg1NDk1LCAweDA3MTcsCisgICAgMHg1NDk2LCAweDU0OTYsIDB4MDkzNCwgMHg1NDk3LCAweDU0OTgsIDB4MkFBRCwgMHg1NDk5LCAweDU0OTksIDB4MEE0NSwKKyAgICAweDU0OUEsIDB4NTQ5QiwgMHgxNTEzLCAweDU0OUMsIDB4NTQ5QywgMHgyQUFGLCAweDU0OUQsIDB4NTQ5RCwgMHgxNTE4LAorICAgIDB4NTQ5RSwgMHg1NEEyLCAweDJBQjAsIDB4NTRBMywgMHg1NEEzLCAweDE1MjMsIDB4NTRBNCwgMHg1NEE0LCAweDE1MkQsCisgICAgMHg1NEE1LCAweDU0QTUsIDB4MkFCNSwgMHg1NEE2LCAweDU0QTYsIDB4MTUxRiwgMHg1NEE3LCAweDU0QTcsIDB4MTUxRSwKKyAgICAweDU0QTgsIDB4NTRBOCwgMHgxMjI2LCAweDU0QTksIDB4NTRBQSwgMHgxNTJCLCAweDU0QUIsIDB4NTRBQiwgMHgxNzY3LAorICAgIDB4NTRBQywgMHg1NEFDLCAweDEwMkUsIDB4NTRBRCwgMHg1NEFELCAweDE1MUEsIDB4NTRBRSwgMHg1NEFFLCAweDJBQjYsCisgICAgMHg1NEFGLCAweDU0QUYsIDB4MDkzNiwgMHg1NEIwLCAweDU0QjAsIDB4MkFCNywgMHg1NEIxLCAweDU0QjEsIDB4MTExRSwKKyAgICAweDU0QjIsIDB4NTRCMiwgMHgyQUI4LCAweDU0QjMsIDB4NTRCMywgMHgwOTU1LCAweDU0QjQsIDB4NTRCNCwgMHgxNTFDLAorICAgIDB4NTRCNSwgMHg1NEI3LCAweDJBQjksIDB4NTRCOCwgMHg1NEI4LCAweDBGMzksIDB4NTRCOSwgMHg1NEJBLCAweDJBQkMsCisgICAgMHg1NEJCLCAweDU0QkIsIDB4MTUyNSwgMHg1NEJDLCAweDU0QkMsIDB4MjM2RCwgMHg1NEJELCAweDU0QkQsIDB4MEZGMywKKyAgICAweDU0QkUsIDB4NTRCRSwgMHgyQUJFLCAweDU0QkYsIDB4NTRCRiwgMHgxNTI2LCAweDU0QzAsIDB4NTRDMCwgMHgwM0IyLAorICAgIDB4NTRDMSwgMHg1NEMxLCAweDBCRDYsIDB4NTRDMiwgMHg1NEMyLCAweDE1MUIsIDB4NTRDMywgMHg1NEMzLCAweDJBQkYsCisgICAgMHg1NEM0LCAweDU0QzQsIDB4MDc5QywgMHg1NEM1LCAweDU0QzUsIDB4MkFDMCwgMHg1NEM2LCAweDU0QzYsIDB4MDYxRSwKKyAgICAweDU0QzcsIDB4NTRDNywgMHgwRThDLCAweDU0QzgsIDB4NTRDOCwgMHgwNzU3LCAweDU0QzksIDB4NTRDOSwgMHgxMTE4LAorICAgIDB4NTRDQSwgMHg1NENCLCAweDJBQzEsIDB4NTRDQywgMHg1NENDLCAweDE1MjcsIDB4NTRDRCwgMHg1NENELCAweDBGNTksCisgICAgMHg1NENFLCAweDU0Q0UsIDB4MDNCMCwgMHg1NENGLCAweDU0Q0YsIDB4MTUyRiwgMHg1NEQwLCAweDU0RDAsIDB4MTUxOSwKKyAgICAweDU0RDEsIDB4NTREMSwgMHgwRkVGLCAweDU0RDIsIDB4NTREMiwgMHgxNTFELCAweDU0RDMsIDB4NTRENCwgMHgxNTIwLAorICAgIDB4NTRENSwgMHg1NEQ1LCAweDE1MjQsIDB4NTRENiwgMHg1NEQ2LCAweDJBQzMsIDB4NTRENywgMHg1NEQ3LCAweDA3QkUsCisgICAgMHg1NEQ4LCAweDU0RDgsIDB4MkFDNCwgMHg1NEQ5LCAweDU0REEsIDB4MTUyOCwgMHg1NERCLCAweDU0REIsIDB4MkFDNSwKKyAgICAweDU0REMsIDB4NTREQywgMHgxNTJBLCAweDU0REQsIDB4NTRERCwgMHgxNTJFLCAweDU0REUsIDB4NTRERSwgMHgxNTMwLAorICAgIDB4NTRERiwgMHg1NERGLCAweDEwOTksIDB4NTRFMCwgMHg1NEUwLCAweDJBQzYsIDB4NTRFMSwgMHg1NEUxLCAweDIyNDcsCisgICAgMHg1NEUyLCAweDU0RTQsIDB4MkFDNywgMHg1NEU1LCAweDU0RTUsIDB4MDZFMiwgMHg1NEU2LCAweDU0RTYsIDB4MEI3NywKKyAgICAweDU0RTcsIDB4NTRFNywgMHgxNTMyLCAweDU0RTgsIDB4NTRFOCwgMHgwRDEzLCAweDU0RTksIDB4NTRFOSwgMHgwOUYxLAorICAgIDB4NTRFQSwgMHg1NEVBLCAweDBCMjcsIDB4NTRFQiwgMHg1NEVDLCAweDJBQ0EsIDB4NTRFRCwgMHg1NEVELCAweDA5NkIsCisgICAgMHg1NEVFLCAweDU0RUUsIDB4MEY2NSwgMHg1NEVGLCAweDU0RjEsIDB4MkFDQywgMHg1NEYyLCAweDU0RjIsIDB4MTE3RCwKKyAgICAweDU0RjMsIDB4NTRGMywgMHgxNTM2LCAweDU0RjQsIDB4NTRGOSwgMHgyQUNGLCAweDU0RkEsIDB4NTRGQSwgMHgwNDdGLAorICAgIDB4NTRGQiwgMHg1NEZCLCAweDJBRDUsIDB4NTRGQywgMHg1NEZDLCAweDA3OTYsIDB4NTRGRCwgMHg1NEZELCAweDE1MzQsCisgICAgMHg1NEZFLCAweDU0RkUsIDB4MkFENiwgMHg1NEZGLCAweDU0RkYsIDB4MTM5MSwgMHg1NTAwLCAweDU1MDAsIDB4MkFENywKKyAgICAweDU1MDEsIDB4NTUwMSwgMHgxMDBELCAweDU1MDIsIDB4NTUwMywgMHgyQUQ4LCAweDU1MDQsIDB4NTUwNCwgMHgyMzZDLAorICAgIDB4NTUwNSwgMHg1NTA1LCAweDJBREEsIDB4NTUwNiwgMHg1NTA2LCAweDBERTksIDB4NTUwNywgMHg1NTA3LCAweDA1NDAsCisgICAgMHg1NTA4LCAweDU1MDgsIDB4MkFEQiwgMHg1NTA5LCAweDU1MDksIDB4MDNCMSwgMHg1NTBBLCAweDU1MEUsIDB4MkFEQywKKyAgICAweDU1MEYsIDB4NTUwRiwgMHgxNTM5LCAweDU1MTAsIDB4NTUxMCwgMHgwRTE5LCAweDU1MTEsIDB4NTUxMSwgMHgxNTNBLAorICAgIDB4NTUxMiwgMHg1NTEzLCAweDJBRTEsIDB4NTUxNCwgMHg1NTE0LCAweDE1MzUsIDB4NTUxNSwgMHg1NTFBLCAweDJBRTMsCisgICAgMHg1NTFCLCAweDU1MUIsIDB4MTUzMSwgMHg1NTFDLCAweDU1MUYsIDB4MkFFOSwgMHg1NTIwLCAweDU1MjAsIDB4MTUzMywKKyAgICAweDU1MjEsIDB4NTUyMSwgMHgyQUVELCAweDU1MjIsIDB4NTUyMywgMHgxNTM3LCAweDU1MjQsIDB4NTUyNCwgMHgwN0QyLAorICAgIDB4NTUyNSwgMHg1NTI2LCAweDJBRUUsIDB4NTUyNywgMHg1NTI3LCAweDE1M0IsIDB4NTUyOCwgMHg1NTI5LCAweDJBRjAsCisgICAgMHg1NTJBLCAweDU1MkEsIDB4MTUzQywgMHg1NTJCLCAweDU1MkIsIDB4MkFGMiwgMHg1NTJDLCAweDU1MkMsIDB4MDdCOCwKKyAgICAweDU1MkQsIDB4NTUyRCwgMHgyQUYzLCAweDU1MkUsIDB4NTUyRSwgMHgwRDcyLCAweDU1MkYsIDB4NTUyRiwgMHgwRUI3LAorICAgIDB4NTUzMCwgMHg1NTMwLCAweDE1NEQsIDB4NTUzMSwgMHg1NTMxLCAweDA0Q0YsIDB4NTUzMiwgMHg1NTMyLCAweDJBRjQsCisgICAgMHg1NTMzLCAweDU1MzMsIDB4MTU0QywgMHg1NTM0LCAweDU1MzYsIDB4MkFGNSwgMHg1NTM3LCAweDU1MzcsIDB4MTU0NywKKyAgICAweDU1MzgsIDB4NTUzQiwgMHgyQUY4LCAweDU1M0MsIDB4NTUzQywgMHgxNTQ2LCAweDU1M0QsIDB4NTUzRCwgMHgyQUZDLAorICAgIDB4NTUzRSwgMHg1NTNFLCAweDBFOEEsIDB4NTUzRiwgMHg1NTNGLCAweDE1NDQsIDB4NTU0MCwgMHg1NTQwLCAweDJBRkQsCisgICAgMHg1NTQxLCAweDU1NDEsIDB4MTU0MiwgMHg1NTQyLCAweDU1NDIsIDB4MkFGRSwgMHg1NTQzLCAweDU1NDMsIDB4MDk1RCwKKyAgICAweDU1NDQsIDB4NTU0NCwgMHgxMjIxLCAweDU1NDUsIDB4NTU0NSwgMHgyQUZGLCAweDU1NDYsIDB4NTU0NiwgMHgwRDA1LAorICAgIDB4NTU0NywgMHg1NTQ4LCAweDJCMDAsIDB4NTU0OSwgMHg1NTQ5LCAweDE1NDAsIDB4NTU0QSwgMHg1NTRBLCAweDAzQUMsCisgICAgMHg1NTRCLCAweDU1NEUsIDB4MkIwMiwgMHg1NTRGLCAweDU1NEYsIDB4MjE5QywgMHg1NTUwLCAweDU1NTAsIDB4MTU0NSwKKyAgICAweDU1NTEsIDB4NTU1MiwgMHgyQjA2LCAweDU1NTMsIDB4NTU1MywgMHgyMEM5LCAweDU1NTQsIDB4NTU1NCwgMHgyQjA4LAorICAgIDB4NTU1NSwgMHg1NTU1LCAweDE1NDMsIDB4NTU1NiwgMHg1NTU2LCAweDE1NDgsIDB4NTU1NywgMHg1NTVCLCAweDJCMDksCisgICAgMHg1NTVDLCAweDU1NUMsIDB4MTU0RSwgMHg1NTVELCAweDU1NUQsIDB4MkIwRSwgMHg1NTVFLCAweDU1NUUsIDB4MjFGMCwKKyAgICAweDU1NUYsIDB4NTU2MCwgMHgyQjBGLCAweDU1NjEsIDB4NTU2MSwgMHgwNjY1LCAweDU1NjIsIDB4NTU2MywgMHgyQjExLAorICAgIDB4NTU2NCwgMHg1NTY0LCAweDBCQzAsIDB4NTU2NSwgMHg1NTY1LCAweDBDRUYsIDB4NTU2NiwgMHg1NTY2LCAweDA5OUQsCisgICAgMHg1NTY3LCAweDU1NjcsIDB4MTUzRCwgMHg1NTY4LCAweDU1NjksIDB4MkIxMywgMHg1NTZBLCAweDU1NkEsIDB4MEI3RiwKKyAgICAweDU1NkIsIDB4NTU2QiwgMHgyQjE1LCAweDU1NkMsIDB4NTU2QywgMHgxMjdBLCAweDU1NkQsIDB4NTU2RCwgMHgxNTQxLAorICAgIDB4NTU2RSwgMHg1NTZFLCAweDBCNTksIDB4NTU2RiwgMHg1NTc0LCAweDJCMTYsIDB4NTU3NSwgMHg1NTc3LCAweDE1NDksCisgICAgMHg1NTc4LCAweDU1NzgsIDB4MEY3MCwgMHg1NTc5LCAweDU1N0EsIDB4MkIxQywgMHg1NTdCLCAweDU1N0IsIDB4MTU1QSwKKyAgICAweDU1N0MsIDB4NTU3QywgMHgwRTM3LCAweDU1N0QsIDB4NTU3RCwgMHgyQjFFLCAweDU1N0UsIDB4NTU3RSwgMHgxNTU3LAorICAgIDB4NTU3RiwgMHg1NTdGLCAweDJCMUYsIDB4NTU4MCwgMHg1NTgwLCAweDA5MzMsIDB4NTU4MSwgMHg1NTgxLCAweDE1NTUsCisgICAgMHg1NTgyLCAweDU1ODIsIDB4MEVDOCwgMHg1NTgzLCAweDU1ODMsIDB4MTU1MSwgMHg1NTg0LCAweDU1ODQsIDB4MENGRiwKKyAgICAweDU1ODUsIDB4NTU4NiwgMHgyQjIwLCAweDU1ODcsIDB4NTU4NywgMHgwOTk5LCAweDU1ODgsIDB4NTU4OCwgMHgxNTU0LAorICAgIDB4NTU4OSwgMHg1NTg5LCAweDA3QTQsIDB4NTU4QSwgMHg1NThBLCAweDA3NjcsIDB4NTU4QiwgMHg1NThCLCAweDE1NEYsCisgICAgMHg1NThDLCAweDU1OEUsIDB4MkIyMiwgMHg1NThGLCAweDU1OEYsIDB4MTUzRSwgMHg1NTkwLCAweDU1OTAsIDB4MkIyNSwKKyAgICAweDU1OTEsIDB4NTU5MSwgMHgxNTU5LCAweDU1OTIsIDB4NTU5MywgMHgyQjI2LCAweDU1OTQsIDB4NTU5NCwgMHgxNTVFLAorICAgIDB4NTU5NSwgMHg1NTk3LCAweDJCMjgsIDB4NTU5OCwgMHg1NTk4LCAweDA1MzAsIDB4NTU5OSwgMHg1NTk5LCAweDE1NUYsCisgICAgMHg1NTlBLCAweDU1OUIsIDB4MkIyQiwgMHg1NTlDLCAweDU1OUMsIDB4MEYxRiwgMHg1NTlELCAweDU1OUQsIDB4MDc3RiwKKyAgICAweDU1OUUsIDB4NTU5RSwgMHgyQjJELCAweDU1OUYsIDB4NTU5RiwgMHgxNTU2LCAweDU1QTAsIDB4NTVBNiwgMHgyQjJFLAorICAgIDB4NTVBNywgMHg1NUE3LCAweDBGQzUsIDB4NTVBOCwgMHg1NUE5LCAweDJCMzUsIDB4NTVBQSwgMHg1NUFBLCAweDIxMEIsCisgICAgMHg1NUFCLCAweDU1QUIsIDB4MkIzNywgMHg1NUFDLCAweDU1QUMsIDB4MjBERSwgMHg1NUFELCAweDU1QUQsIDB4MkIzOCwKKyAgICAweDU1QUUsIDB4NTVBRSwgMHgxRUFBLCAweDU1QUYsIDB4NTVCMCwgMHgyQjM5LCAweDU1QjEsIDB4NTVCMSwgMHgxNTUyLAorICAgIDB4NTVCMiwgMHg1NUIyLCAweDIyMkMsIDB4NTVCMywgMHg1NUIzLCAweDExM0UsIDB4NTVCNCwgMHg1NUI0LCAweDJCM0IsCisgICAgMHg1NUI1LCAweDU1QjUsIDB4MTUzRiwgMHg1NUI2LCAweDU1QjYsIDB4MkIzQywgMHg1NUI3LCAweDU1QjcsIDB4MEJBOCwKKyAgICAweDU1QjgsIDB4NTVCOCwgMHgyQjNELCAweDU1QjksIDB4NTVCOSwgMHgxNTUzLCAweDU1QkEsIDB4NTVCQSwgMHgyQjNFLAorICAgIDB4NTVCQiwgMHg1NUJCLCAweDEwREMsIDB4NTVCQywgMHg1NUJDLCAweDJCM0YsIDB4NTVCRCwgMHg1NUJFLCAweDE1NUMsCisgICAgMHg1NUJGLCAweDU1QzMsIDB4MkI0MCwgMHg1NUM0LCAweDU1QzQsIDB4MTU2QSwgMHg1NUM1LCAweDU1QzUsIDB4MEZBQywKKyAgICAweDU1QzYsIDB4NTVDNiwgMHgyMEQ4LCAweDU1QzcsIDB4NTVDNywgMHgyMkMwLCAweDU1QzgsIDB4NTVDOCwgMHgyQjQ1LAorICAgIDB4NTVDOSwgMHg1NUM5LCAweDE1NjIsIDB4NTVDQSwgMHg1NUNCLCAweDJCNDYsIDB4NTVDQywgMHg1NUNELCAweDE1NkYsCisgICAgMHg1NUNFLCAweDU1Q0UsIDB4MjA2RiwgMHg1NUNGLCAweDU1RDAsIDB4MkI0OCwgMHg1NUQxLCAweDU1RDEsIDB4MTU2NCwKKyAgICAweDU1RDIsIDB4NTVEMiwgMHgxNTUwLCAweDU1RDMsIDB4NTVEMywgMHgwQ0RELCAweDU1RDQsIDB4NTVENCwgMHgxNTY3LAorICAgIDB4NTVENSwgMHg1NUQ1LCAweDJCNEEsIDB4NTVENiwgMHg1NUQ2LCAweDE1NTgsIDB4NTVENywgMHg1NUQ5LCAweDJCNEIsCisgICAgMHg1NURBLCAweDU1REEsIDB4MjFBMSwgMHg1NURCLCAweDU1REIsIDB4MkI0RSwgMHg1NURDLCAweDU1REMsIDB4MEQ1RiwKKyAgICAweDU1REQsIDB4NTVERCwgMHgxNTY5LCAweDU1REUsIDB4NTVERSwgMHgyQjRGLCAweDU1REYsIDB4NTVERiwgMHgxNTVCLAorICAgIDB4NTVFMCwgMHg1NUUwLCAweDJCNTAsIDB4NTVFMSwgMHg1NUUxLCAweDBFREEsIDB4NTVFMiwgMHg1NUUyLCAweDJCNTEsCisgICAgMHg1NUUzLCAweDU1RTMsIDB4MERCOCwgMHg1NUU0LCAweDU1RTQsIDB4MTU3MywgMHg1NUU1LCAweDU1RTUsIDB4MTU2QywKKyAgICAweDU1RTYsIDB4NTVFNiwgMHgxNTY4LCAweDU1RTcsIDB4NTVFNywgMHgyQjUyLCAweDU1RTgsIDB4NTVFOCwgMHgxNTcxLAorICAgIDB4NTVFOSwgMHg1NUU5LCAweDIzNzksIDB4NTVFQSwgMHg1NUVBLCAweDE1NjAsIDB4NTVFQiwgMHg1NUVDLCAweDE1NjUsCisgICAgMHg1NUVELCAweDU1RUUsIDB4MkI1MywgMHg1NUVGLCAweDU1RUYsIDB4MTU2QiwgMHg1NUYwLCAweDU1RjEsIDB4MkI1NSwKKyAgICAweDU1RjIsIDB4NTVGMywgMHgxNTZELCAweDU1RjQsIDB4NTVGNCwgMHgyQjU3LCAweDU1RjUsIDB4NTVGNSwgMHgxNTcyLAorICAgIDB4NTVGNiwgMHg1NUY2LCAweDIzNzIsIDB4NTVGNywgMHg1NUY3LCAweDE1NjEsIDB4NTVGOCwgMHg1NUZDLCAweDJCNTgsCisgICAgMHg1NUZELCAweDU1RkQsIDB4MERDOSwgMHg1NUZFLCAweDU1RkUsIDB4MTU3QiwgMHg1NUZGLCAweDU1RkYsIDB4MkI1RCwKKyAgICAweDU2MDAsIDB4NTYwMCwgMHgxNTdDLCAweDU2MDEsIDB4NTYwMSwgMHgxNTc4LCAweDU2MDIsIDB4NTYwNSwgMHgyQjVFLAorICAgIDB4NTYwNiwgMHg1NjA2LCAweDIxNkEsIDB4NTYwNywgMHg1NjA3LCAweDJCNjIsIDB4NTYwOCwgMHg1NjA4LCAweDE1NzYsCisgICAgMHg1NjA5LCAweDU2MDksIDB4MDg0MSwgMHg1NjBBLCAweDU2MEIsIDB4MkI2MywgMHg1NjBDLCAweDU2MEMsIDB4MTU3NywKKyAgICAweDU2MEQsIDB4NTYwRCwgMHgyMzdDLCAweDU2MEUsIDB4NTYwRSwgMHgwNkJELCAweDU2MEYsIDB4NTYwRiwgMHgxMjdCLAorICAgIDB4NTYxMCwgMHg1NjEzLCAweDJCNjUsIDB4NTYxNCwgMHg1NjE0LCAweDIwQjAsIDB4NTYxNSwgMHg1NjE1LCAweDJCNjksCisgICAgMHg1NjE2LCAweDU2MTYsIDB4MjM3QSwgMHg1NjE3LCAweDU2MTcsIDB4MUU3NCwgMHg1NjE4LCAweDU2MTgsIDB4MEZCNSwKKyAgICAweDU2MTksIDB4NTYxQSwgMHgyQjZBLCAweDU2MUIsIDB4NTYxQiwgMHgwQTk2LCAweDU2MUMsIDB4NTYxQywgMHgyMzc3LAorICAgIDB4NTYxRCwgMHg1NjFELCAweDJCNkMsIDB4NTYxRSwgMHg1NjFFLCAweDE1NzUsIDB4NTYxRiwgMHg1NjFGLCAweDE1NjMsCisgICAgMHg1NjIwLCAweDU2MjIsIDB4MkI2RCwgMHg1NjIzLCAweDU2MjMsIDB4MTU3QSwgMHg1NjI0LCAweDU2MjQsIDB4MTU3OSwKKyAgICAweDU2MjUsIDB4NTYyNiwgMHgyQjcwLCAweDU2MjcsIDB4NTYyNywgMHgxNTdELCAweDU2MjgsIDB4NTYyOCwgMHgyQjcyLAorICAgIDB4NTYyOSwgMHg1NjI5LCAweDFGNEMsIDB4NTYyQSwgMHg1NjJCLCAweDJCNzMsIDB4NTYyQywgMHg1NjJDLCAweDE1ODIsCisgICAgMHg1NjJELCAweDU2MkQsIDB4MTU3RSwgMHg1NjJFLCAweDU2MkUsIDB4MjM3OCwgMHg1NjJGLCAweDU2MkYsIDB4MjFDRiwKKyAgICAweDU2MzAsIDB4NTYzMCwgMHgyMzY4LCAweDU2MzEsIDB4NTYzMSwgMHgxMUY1LCAweDU2MzIsIDB4NTYzMiwgMHgwNEQ1LAorICAgIDB4NTYzMywgMHg1NjMzLCAweDJCNzUsIDB4NTYzNCwgMHg1NjM0LCAweDEyNDksIDB4NTYzNSwgMHg1NjM1LCAweDIzNzEsCisgICAgMHg1NjM2LCAweDU2MzYsIDB4MERCMCwgMHg1NjM3LCAweDU2MzcsIDB4MkI3NiwgMHg1NjM4LCAweDU2MzgsIDB4MjM2OSwKKyAgICAweDU2MzksIDB4NTYzOSwgMHgxNTgwLCAweDU2M0EsIDB4NTYzQSwgMHgyQjc3LCAweDU2M0IsIDB4NTYzQiwgMHgwRjBBLAorICAgIDB4NTYzQywgMHg1NjNFLCAweDJCNzgsIDB4NTYzRiwgMHg1NjNGLCAweDA3OTAsIDB4NTY0MCwgMHg1NjQwLCAweDJCN0IsCisgICAgMHg1NjQxLCAweDU2NDEsIDB4MjY3NCwgMHg1NjQyLCAweDU2NEIsIDB4MkI3QywgMHg1NjRDLCAweDU2NEMsIDB4MTU4NywKKyAgICAweDU2NEQsIDB4NTY0RCwgMHgxNTgzLCAweDU2NEUsIDB4NTY0RSwgMHgxMDM0LCAweDU2NEYsIDB4NTY1MywgMHgyQjg2LAorICAgIDB4NTY1NCwgMHg1NjU0LCAweDE1ODgsIDB4NTY1NSwgMHg1NjU2LCAweDJCOEIsIDB4NTY1NywgMHg1NjU3LCAweDE1ODEsCisgICAgMHg1NjU4LCAweDU2NTgsIDB4MTU3RiwgMHg1NjU5LCAweDU2NTksIDB4MTU4NSwgMHg1NjVBLCAweDU2NUIsIDB4MkI4RCwKKyAgICAweDU2NUMsIDB4NTY1QywgMHgxNTg2LCAweDU2NUQsIDB4NTY1RCwgMHgyMzZGLCAweDU2NUUsIDB4NTY1RiwgMHgyQjhGLAorICAgIDB4NTY2MCwgMHg1NjYwLCAweDIzNzAsIDB4NTY2MSwgMHg1NjYxLCAweDJCOTEsIDB4NTY2MiwgMHg1NjYyLCAweDE1ODQsCisgICAgMHg1NjYzLCAweDU2NjMsIDB4MkI5MiwgMHg1NjY0LCAweDU2NjQsIDB4MTU4QSwgMHg1NjY1LCAweDU2NjUsIDB4MjM3NiwKKyAgICAweDU2NjYsIDB4NTY2NiwgMHgyMzczLCAweDU2NjcsIDB4NTY2NywgMHgyQjkzLCAweDU2NjgsIDB4NTY2OCwgMHgwQzE2LAorICAgIDB4NTY2OSwgMHg1NjY5LCAweDEyNjIsIDB4NTY2QSwgMHg1NjZBLCAweDExMkUsIDB4NTY2QiwgMHg1NjZCLCAweDE1OEMsCisgICAgMHg1NjZDLCAweDU2NkMsIDB4MEQ2MCwgMHg1NjZELCAweDU2NkUsIDB4MkI5NCwgMHg1NjZGLCAweDU2NkYsIDB4MjM3RiwKKyAgICAweDU2NzAsIDB4NTY3MCwgMHgyQjk2LCAweDU2NzEsIDB4NTY3MSwgMHgxNThCLCAweDU2NzIsIDB4NTY3MiwgMHgyMzc0LAorICAgIDB4NTY3MywgMHg1NjczLCAweDJCOTcsIDB4NTY3NCwgMHg1Njc0LCAweDIwQjUsIDB4NTY3NSwgMHg1Njc1LCAweDJCOTgsCisgICAgMHg1Njc2LCAweDU2NzYsIDB4MDZCQywgMHg1Njc3LCAweDU2NzcsIDB4MkI5OSwgMHg1Njc4LCAweDU2NzgsIDB4MUVEQiwKKyAgICAweDU2NzksIDB4NTY3OSwgMHgyNjcyLCAweDU2N0EsIDB4NTY3QSwgMHgyQjlBLCAweDU2N0IsIDB4NTY3QywgMHgxNThELAorICAgIDB4NTY3RCwgMHg1NjdGLCAweDJCOUIsIDB4NTY4MCwgMHg1NjgwLCAweDIzNkUsIDB4NTY4MSwgMHg1Njg0LCAweDJCOUUsCisgICAgMHg1Njg1LCAweDU2ODUsIDB4MTU4RiwgMHg1Njg2LCAweDU2ODYsIDB4MTU4OSwgMHg1Njg3LCAweDU2ODcsIDB4MjFCNywKKyAgICAweDU2ODgsIDB4NTY4QiwgMHgyQkEyLCAweDU2OEMsIDB4NTY4QywgMHgyMzc1LCAweDU2OEQsIDB4NTY4RCwgMHgyQkE2LAorICAgIDB4NTY4RSwgMHg1NjhFLCAweDA3NzYsIDB4NTY4RiwgMHg1NjhGLCAweDBFM0EsIDB4NTY5MCwgMHg1NjkyLCAweDJCQTcsCisgICAgMHg1NjkzLCAweDU2OTMsIDB4MTU5MCwgMHg1Njk0LCAweDU2OTQsIDB4MkJBQSwgMHg1Njk1LCAweDU2OTUsIDB4MjM4MiwKKyAgICAweDU2OTYsIDB4NTY5OCwgMHgyQkFCLCAweDU2OTksIDB4NTY5OSwgMHgyMDlFLCAweDU2OUEsIDB4NTZBMiwgMHgyQkFFLAorICAgIDB4NTZBMywgMHg1NkEzLCAweDBGNjYsIDB4NTZBNCwgMHg1NkE1LCAweDJCQjcsIDB4NTZBNiwgMHg1NkE2LCAweDIzNkIsCisgICAgMHg1NkE3LCAweDU2QTcsIDB4MkJCOSwgMHg1NkE4LCAweDU2QTgsIDB4MjAzOSwgMHg1NkE5LCAweDU2QUQsIDB4MkJCQSwKKyAgICAweDU2QUUsIDB4NTZBRSwgMHgyNjlGLCAweDU2QUYsIDB4NTZBRiwgMHgxNTkxLCAweDU2QjAsIDB4NTZCMiwgMHgyQkJGLAorICAgIDB4NTZCMywgMHg1NkIzLCAweDIzN0QsIDB4NTZCNCwgMHg1NkI0LCAweDIxRjUsIDB4NTZCNSwgMHg1NkI1LCAweDJCQzIsCisgICAgMHg1NkI2LCAweDU2QjYsIDB4MjM4MSwgMHg1NkI3LCAweDU2QjcsIDB4MEM5RCwgMHg1NkI4LCAweDU2QkIsIDB4MkJDMywKKyAgICAweDU2QkMsIDB4NTZCQywgMHgwODkxLCAweDU2QkQsIDB4NTZCRiwgMHgyQkM3LCAweDU2QzAsIDB4NTZDMCwgMHgyMzdCLAorICAgIDB4NTZDMSwgMHg1NkMxLCAweDIzN0UsIDB4NTZDMiwgMHg1NkMyLCAweDIxQ0MsIDB4NTZDMywgMHg1NkM0LCAweDJCQ0EsCisgICAgMHg1NkM1LCAweDU2QzUsIDB4MjJEQiwgMHg1NkM2LCAweDU2QzcsIDB4MkJDQywgMHg1NkM4LCAweDU2QzgsIDB4MjM2QSwKKyAgICAweDU2QzksIDB4NTZDOSwgMHgyNjg5LCAweDU2Q0EsIDB4NTZDQSwgMHgwQjM1LCAweDU2Q0IsIDB4NTZDQiwgMHgyQkNFLAorICAgIDB4NTZDQywgMHg1NkNDLCAweDI2OTcsIDB4NTZDRCwgMHg1NkQwLCAweDJCQ0YsIDB4NTZEMSwgMHg1NkQxLCAweDIyQTEsCisgICAgMHg1NkQyLCAweDU2RDMsIDB4MkJEMywgMHg1NkQ0LCAweDU2RDQsIDB4MTU5MiwgMHg1NkQ1LCAweDU2RDYsIDB4MkJENSwKKyAgICAweDU2RDcsIDB4NTZENywgMHgxNTkzLCAweDU2RDgsIDB4NTZEOSwgMHgyQkQ3LCAweDU2REEsIDB4NTZEQSwgMHgwQzcxLAorICAgIDB4NTZEQiwgMHg1NkRCLCAweDBEQjksIDB4NTZEQywgMHg1NkRDLCAweDJCRDksIDB4NTZERCwgMHg1NkRELCAweDE1OTQsCisgICAgMHg1NkRFLCAweDU2REUsIDB4MDdFRCwgMHg1NkRGLCAweDU2REYsIDB4MTI2QywgMHg1NkUwLCAweDU2RTAsIDB4MTA3OSwKKyAgICAweDU2RTEsIDB4NTZFMSwgMHgxNTk1LCAweDU2RTIsIDB4NTZFMiwgMHgwRTc2LCAweDU2RTMsIDB4NTZFMywgMHgyQkRBLAorICAgIDB4NTZFNCwgMHg1NkU0LCAweDA2MTksIDB4NTZFNSwgMHg1NkVBLCAweDJCREIsIDB4NTZFQiwgMHg1NkVCLCAweDE1OTcsCisgICAgMHg1NkVDLCAweDU2RUMsIDB4MkJFMSwgMHg1NkVELCAweDU2RUQsIDB4MTBGMywgMHg1NkVFLCAweDU2RUYsIDB4MkJFMiwKKyAgICAweDU2RjAsIDB4NTZGMCwgMHgwOTkyLCAweDU2RjEsIDB4NTZGMSwgMHgwNTU0LCAweDU2RjIsIDB4NTZGMywgMHgyQkU0LAorICAgIDB4NTZGNCwgMHg1NkY0LCAweDBFQjYsIDB4NTZGNSwgMHg1NkY1LCAweDE1OTYsIDB4NTZGNiwgMHg1NkY4LCAweDJCRTYsCisgICAgMHg1NkY5LCAweDU2RjksIDB4MTU5OCwgMHg1NkZBLCAweDU2RkEsIDB4MDcyNSwgMHg1NkZCLCAweDU2RkMsIDB4MkJFOSwKKyAgICAweDU2RkQsIDB4NTZGRCwgMHgwNzUzLCAweDU2RkUsIDB4NTZGRSwgMHgwRTZELCAweDU2RkYsIDB4NTZGRiwgMHgxNTk5LAorICAgIDB4NTcwMCwgMHg1NzAyLCAweDJCRUIsIDB4NTcwMywgMHg1NzAzLCAweDBCRjMsIDB4NTcwNCwgMHg1NzA0LCAweDE1OUEsCisgICAgMHg1NzA1LCAweDU3MDUsIDB4MkJFRSwgMHg1NzA2LCAweDU3MDYsIDB4MTBGNSwgMHg1NzA3LCAweDU3MDcsIDB4MjM4MywKKyAgICAweDU3MDgsIDB4NTcwOCwgMHgwQzgxLCAweDU3MDksIDB4NTcwOSwgMHgxNTlDLCAweDU3MEEsIDB4NTcwQSwgMHgxNTlCLAorICAgIDB4NTcwQiwgMHg1NzBCLCAweDFGM0QsIDB4NTcwQywgMHg1NzBDLCAweDJCRUYsIDB4NTcwRCwgMHg1NzBELCAweDIxOEYsCisgICAgMHg1NzBFLCAweDU3MTEsIDB4MkJGMCwgMHg1NzEyLCAweDU3MTIsIDB4MjI0NiwgMHg1NzEzLCAweDU3MTMsIDB4MjI0OCwKKyAgICAweDU3MTQsIDB4NTcxNSwgMHgyQkY0LCAweDU3MTYsIDB4NTcxNiwgMHgyMTdFLCAweDU3MTcsIDB4NTcxNywgMHgyQkY2LAorICAgIDB4NTcxOCwgMHg1NzE4LCAweDIxODAsIDB4NTcxOSwgMHg1NzFCLCAweDJCRjcsIDB4NTcxQywgMHg1NzFDLCAweDE1OUQsCisgICAgMHg1NzFELCAweDU3MUUsIDB4MkJGQSwgMHg1NzFGLCAweDU3MUYsIDB4MEU3MiwgMHg1NzIwLCAweDU3MjIsIDB4MkJGQywKKyAgICAweDU3MjMsIDB4NTcyMywgMHgwRDNDLCAweDU3MjQsIDB4NTcyNywgMHgyQkZGLCAweDU3MjgsIDB4NTcyOCwgMHgxMTFELAorICAgIDB4NTcyOSwgMHg1NzI5LCAweDEzQTcsIDB4NTcyQSwgMHg1NzJBLCAweDEzQTksIDB4NTcyQiwgMHg1NzJCLCAweDJDMDMsCisgICAgMHg1NzJDLCAweDU3MkMsIDB4MTNBOCwgMHg1NzJELCAweDU3MkQsIDB4MDc0MCwgMHg1NzJFLCAweDU3MkYsIDB4MTNBQywKKyAgICAweDU3MzAsIDB4NTczMCwgMHgwNUI5LCAweDU3MzEsIDB4NTczMiwgMHgyQzA0LCAweDU3MzMsIDB4NTczMywgMHgxM0FBLAorICAgIDB4NTczNCwgMHg1NzM4LCAweDJDMDYsIDB4NTczOSwgMHg1NzM5LCAweDEzQUIsIDB4NTczQSwgMHg1NzNBLCAweDA0QzYsCisgICAgMHg1NzNCLCAweDU3M0IsIDB4MTNBRiwgMHg1NzNDLCAweDU3M0QsIDB4MkMwQiwgMHg1NzNFLCAweDU3M0UsIDB4MDgwRCwKKyAgICAweDU3M0YsIDB4NTczRiwgMHgyQzBELCAweDU3NDAsIDB4NTc0MCwgMHgxMUI2LCAweDU3NDEsIDB4NTc0MSwgMHgyQzBFLAorICAgIDB4NTc0MiwgMHg1NzQyLCAweDEzQjAsIDB4NTc0MywgMHg1NzQ2LCAweDJDMEYsIDB4NTc0NywgMHg1NzQ3LCAweDA5MjgsCisgICAgMHg1NzQ4LCAweDU3NDksIDB4MkMxMywgMHg1NzRBLCAweDU3NEEsIDB4MDY1OCwgMHg1NzRCLCAweDU3NEIsIDB4MkMxNSwKKyAgICAweDU3NEMsIDB4NTc0QywgMHgxM0EwLCAweDU3NEQsIDB4NTc0RCwgMHgwRTAxLCAweDU3NEUsIDB4NTc0RSwgMHgwOTNGLAorICAgIDB4NTc0RiwgMHg1NzRGLCAweDA3Q0EsIDB4NTc1MCwgMHg1NzUwLCAweDEyNTUsIDB4NTc1MSwgMHg1NzUxLCAweDA5NjAsCisgICAgMHg1NzUyLCAweDU3NTYsIDB4MkMxNiwgMHg1NzU3LCAweDU3NTcsIDB4MDk3NiwgMHg1NzU4LCAweDU3NTksIDB4MkMxQiwKKyAgICAweDU3NUEsIDB4NTc1QSwgMHgwODU0LCAweDU3NUIsIDB4NTc1QiwgMHgwRTA2LCAweDU3NUMsIDB4NTc1QywgMHgxM0FFLAorICAgIDB4NTc1RCwgMHg1NzVELCAweDAzREUsIDB4NTc1RSwgMHg1NzVFLCAweDBFRkEsIDB4NTc1RiwgMHg1NzVGLCAweDA2NzUsCisgICAgMHg1NzYwLCAweDU3NjAsIDB4MTIxNiwgMHg1NzYxLCAweDU3NjEsIDB4MEJFMSwgMHg1NzYyLCAweDU3NjMsIDB4MkMxRCwKKyAgICAweDU3NjQsIDB4NTc2NCwgMHgwOThGLCAweDU3NjUsIDB4NTc2NSwgMHgyQzFGLCAweDU3NjYsIDB4NTc2NiwgMHgwRTBDLAorICAgIDB4NTc2NywgMHg1NzY3LCAweDJDMjAsIDB4NTc2OCwgMHg1NzY4LCAweDEzQjcsIDB4NTc2OSwgMHg1NzY5LCAweDEzQjEsCisgICAgMHg1NzZBLCAweDU3NkEsIDB4MEJEOSwgMHg1NzZCLCAweDU3NkIsIDB4MTNCMywgMHg1NzZDLCAweDU3NkMsIDB4MkMyMSwKKyAgICAweDU3NkQsIDB4NTc2RCwgMHgxM0I4LCAweDU3NkUsIDB4NTc2RSwgMHgyQzIyLCAweDU3NkYsIDB4NTc2RiwgMHgwQkI4LAorICAgIDB4NTc3MCwgMHg1NzcyLCAweDJDMjMsIDB4NTc3MywgMHg1NzczLCAweDEzQkEsIDB4NTc3NCwgMHg1Nzc1LCAweDJDMjYsCisgICAgMHg1Nzc2LCAweDU3NzYsIDB4MTNCOSwgMHg1Nzc3LCAweDU3NzcsIDB4MDk0RCwgMHg1Nzc4LCAweDU3N0EsIDB4MkMyOCwKKyAgICAweDU3N0IsIDB4NTc3QiwgMHgxM0I2LCAweDU3N0MsIDB4NTc3QywgMHgxM0I1LCAweDU3N0QsIDB4NTc4MSwgMHgyQzJCLAorICAgIDB4NTc4MiwgMHg1NzgyLCAweDA1M0MsIDB4NTc4MywgMHg1NzgzLCAweDA5OTcsIDB4NTc4NCwgMHg1Nzg0LCAweDBBNDksCisgICAgMHg1Nzg1LCAweDU3ODUsIDB4MTNCMiwgMHg1Nzg2LCAweDU3ODYsIDB4MTNCNCwgMHg1Nzg3LCAweDU3OEEsIDB4MkMzMCwKKyAgICAweDU3OEIsIDB4NTc4QiwgMHgwRjk4LCAweDU3OEMsIDB4NTc4QywgMHgxM0JELCAweDU3OEQsIDB4NTc5MSwgMHgyQzM0LAorICAgIDB4NTc5MiwgMHg1NzkyLCAweDA5QzgsIDB4NTc5MywgMHg1NzkzLCAweDEzQzIsIDB4NTc5NCwgMHg1NzlBLCAweDJDMzksCisgICAgMHg1NzlCLCAweDU3OUIsIDB4MDYyMSwgMHg1NzlDLCAweDU3OUYsIDB4MkM0MCwgMHg1N0EwLCAweDU3QTAsIDB4MTNDMywKKyAgICAweDU3QTEsIDB4NTdBMSwgMHgxM0EyLCAweDU3QTIsIDB4NTdBMiwgMHgwNzExLCAweDU3QTMsIDB4NTdBMywgMHgxMEVFLAorICAgIDB4NTdBNCwgMHg1N0E0LCAweDEzQkMsIDB4NTdBNSwgMHg1N0E1LCAweDJDNDQsIDB4NTdBNiwgMHg1N0E2LCAweDA5NUUsCisgICAgMHg1N0E3LCAweDU3QTcsIDB4MTNDMCwgMHg1N0E4LCAweDU3QTgsIDB4MkM0NSwgMHg1N0E5LCAweDU3QTksIDB4MTNBMSwKKyAgICAweDU3QUEsIDB4NTdBQSwgMHgyQzQ2LCAweDU3QUIsIDB4NTdBQiwgMHgwNUM3LCAweDU3QUMsIDB4NTdBQywgMHgyQzQ3LAorICAgIDB4NTdBRCwgMHg1N0FELCAweDEzQkIsIDB4NTdBRSwgMHg1N0FFLCAweDA5NzIsIDB4NTdBRiwgMHg1N0IxLCAweDJDNDgsCisgICAgMHg1N0IyLCAweDU3QjIsIDB4MTNCRSwgMHg1N0IzLCAweDU3QjMsIDB4MkM0QiwgMHg1N0I0LCAweDU3QjQsIDB4MTNDMSwKKyAgICAweDU3QjUsIDB4NTdCNywgMHgyQzRDLCAweDU3QjgsIDB4NTdCOCwgMHgxM0M5LCAweDU3QjksIDB4NTdDMSwgMHgyQzRGLAorICAgIDB4NTdDMiwgMHg1N0MyLCAweDA2RkEsIDB4NTdDMywgMHg1N0MzLCAweDAzQUUsIDB4NTdDNCwgMHg1N0NBLCAweDJDNTgsCisgICAgMHg1N0NCLCAweDU3Q0IsIDB4MEE5OCwgMHg1N0NDLCAweDU3Q0QsIDB4MkM1RiwgMHg1N0NFLCAweDU3Q0UsIDB4MDRFQywKKyAgICAweDU3Q0YsIDB4NTdDRiwgMHgxM0JGLCAweDU3RDAsIDB4NTdEMSwgMHgyQzYxLCAweDU3RDIsIDB4NTdEMiwgMHgxM0M4LAorICAgIDB4NTdEMywgMHg1N0QzLCAweDJDNjMsIDB4NTdENCwgMHg1N0Q0LCAweDBCRjEsIDB4NTdENSwgMHg1N0Q1LCAweDEzQzQsCisgICAgMHg1N0Q2LCAweDU3RDcsIDB4MkM2NCwgMHg1N0Q4LCAweDU3RDgsIDB4MTNDNSwgMHg1N0Q5LCAweDU3RDksIDB4MTNDNywKKyAgICAweDU3REEsIDB4NTdEQSwgMHgxM0M2LCAweDU3REIsIDB4NTdEQywgMHgyQzY2LCAweDU3REQsIDB4NTdERCwgMHgxM0NFLAorICAgIDB4NTdERSwgMHg1N0RFLCAweDJDNjgsIDB4NTdERiwgMHg1N0RGLCAweDEwRDcsIDB4NTdFMCwgMHg1N0UwLCAweDA0ODEsCisgICAgMHg1N0UxLCAweDU3RTEsIDB4MjMyQSwgMHg1N0UyLCAweDU3RTMsIDB4MkM2OSwgMHg1N0U0LCAweDU3RTQsIDB4MTNDRCwKKyAgICAweDU3RTUsIDB4NTdFQywgMHgyQzZCLCAweDU3RUQsIDB4NTdFRCwgMHgxM0QyLCAweDU3RUUsIDB4NTdFRSwgMHgyQzczLAorICAgIDB4NTdFRiwgMHg1N0VGLCAweDEzQ0IsIDB4NTdGMCwgMHg1N0YzLCAweDJDNzQsIDB4NTdGNCwgMHg1N0Y0LCAweDEzQ0EsCisgICAgMHg1N0Y1LCAweDU3RjYsIDB4MkM3OCwgMHg1N0Y3LCAweDU3RjcsIDB4MjI4QiwgMHg1N0Y4LCAweDU3RjgsIDB4MTNDQywKKyAgICAweDU3RjksIDB4NTdGOSwgMHgwQkExLCAweDU3RkEsIDB4NTdGQSwgMHgwODBFLCAweDU3RkIsIDB4NTdGQywgMHgyQzdBLAorICAgIDB4NTdGRCwgMHg1N0ZELCAweDEzRDEsIDB4NTdGRSwgMHg1N0ZGLCAweDJDN0MsIDB4NTgwMCwgMHg1ODAwLCAweDEzRDMsCisgICAgMHg1ODAxLCAweDU4MDEsIDB4MkM3RSwgMHg1ODAyLCAweDU4MDIsIDB4MEUxNiwgMHg1ODAzLCAweDU4MDQsIDB4MkM3RiwKKyAgICAweDU4MDUsIDB4NTgwNSwgMHgxRjg1LCAweDU4MDYsIDB4NTgwNiwgMHgwNjEwLCAweDU4MDcsIDB4NTgwNywgMHgxNDRDLAorICAgIDB4NTgwOCwgMHg1ODA5LCAweDJDODEsIDB4NTgwQSwgMHg1ODBBLCAweDIzMjUsIDB4NTgwQiwgMHg1ODBCLCAweDEzQ0YsCisgICAgMHg1ODBDLCAweDU4MEMsIDB4MkM4MywgMHg1ODBELCAweDU4MEQsIDB4MTNEMCwgMHg1ODBFLCAweDU4MTAsIDB4MkM4NCwKKyAgICAweDU4MTEsIDB4NTgxMSwgMHgwQzMyLCAweDU4MTIsIDB4NTgxNCwgMHgyQzg3LCAweDU4MTUsIDB4NTgxNSwgMHgwNjI4LAorICAgIDB4NTgxNiwgMHg1ODE2LCAweDIzMkMsIDB4NTgxNywgMHg1ODE4LCAweDJDOEEsIDB4NTgxOSwgMHg1ODE5LCAweDEzRDUsCisgICAgMHg1ODFBLCAweDU4MUMsIDB4MkM4QywgMHg1ODFELCAweDU4MUQsIDB4MjMyRSwgMHg1ODFFLCAweDU4MUUsIDB4MTNENCwKKyAgICAweDU4MUYsIDB4NTgxRiwgMHgyQzhGLCAweDU4MjAsIDB4NTgyMCwgMHgxM0Q3LCAweDU4MjEsIDB4NTgyMSwgMHgwNDBELAorICAgIDB4NTgyMiwgMHg1ODIzLCAweDJDOTAsIDB4NTgyNCwgMHg1ODI0LCAweDA1QUQsIDB4NTgyNSwgMHg1ODI5LCAweDJDOTIsCisgICAgMHg1ODJBLCAweDU4MkEsIDB4MDkzRCwgMHg1ODJCLCAweDU4MkUsIDB4MkM5NywgMHg1ODJGLCAweDU4MkYsIDB4MjIwNSwKKyAgICAweDU4MzAsIDB4NTgzMCwgMHgxMDA4LCAweDU4MzEsIDB4NTgzMSwgMHgxRTM4LCAweDU4MzIsIDB4NTgzMywgMHgyQzlCLAorICAgIDB4NTgzNCwgMHg1ODM0LCAweDFFNzMsIDB4NTgzNSwgMHg1ODM1LCAweDA2MDEsIDB4NTgzNiwgMHg1ODQzLCAweDJDOUQsCisgICAgMHg1ODQ0LCAweDU4NDQsIDB4MTNENiwgMHg1ODQ1LCAweDU4NDksIDB4MkNBQiwgMHg1ODRBLCAweDU4NEEsIDB4MUZFMywKKyAgICAweDU4NEIsIDB4NTg0QiwgMHgyMzM5LCAweDU4NEMsIDB4NTg0QywgMHgwREVGLCAweDU4NEQsIDB4NTg0RCwgMHgxOUEzLAorICAgIDB4NTg0RSwgMHg1ODRFLCAweDJDQjAsIDB4NTg0RiwgMHg1ODRGLCAweDIzMkIsIDB4NTg1MCwgMHg1ODUwLCAweDJDQjEsCisgICAgMHg1ODUxLCAweDU4NTEsIDB4MEREMSwgMHg1ODUyLCAweDU4NTIsIDB4MjMyRCwgMHg1ODUzLCAweDU4NTMsIDB4MkNCMiwKKyAgICAweDU4NTQsIDB4NTg1NCwgMHgwREYzLCAweDU4NTUsIDB4NTg1NiwgMHgyQ0IzLCAweDU4NTcsIDB4NTg1NywgMHgyMTdGLAorICAgIDB4NTg1OCwgMHg1ODU4LCAweDBFMTQsIDB4NTg1OSwgMHg1ODVELCAweDJDQjUsIDB4NTg1RSwgMHg1ODVFLCAweDBDRDYsCisgICAgMHg1ODVGLCAweDU4NjEsIDB4MkNCQSwgMHg1ODYyLCAweDU4NjIsIDB4MjFBNywgMHg1ODYzLCAweDU4NjMsIDB4MkNCRCwKKyAgICAweDU4NjQsIDB4NTg2NCwgMHgyMzJGLCAweDU4NjUsIDB4NTg2NSwgMHgxM0Q4LCAweDU4NjYsIDB4NTg2QSwgMHgyQ0JFLAorICAgIDB4NTg2QiwgMHg1ODZCLCAweDBFNDEsIDB4NTg2QywgMHg1ODZDLCAweDEzRDksIDB4NTg2RCwgMHg1ODc0LCAweDJDQzMsCisgICAgMHg1ODc1LCAweDU4NzUsIDB4MUU3RCwgMHg1ODc2LCAweDU4NzgsIDB4MkNDQiwgMHg1ODc5LCAweDU4NzksIDB4MjBENiwKKyAgICAweDU4N0EsIDB4NTg3RCwgMHgyQ0NFLCAweDU4N0UsIDB4NTg3RSwgMHgxM0EzLCAweDU4N0YsIDB4NTg3RiwgMHgyQ0QyLAorICAgIDB4NTg4MCwgMHg1ODgwLCAweDEzREQsIDB4NTg4MSwgMHg1ODgxLCAweDEzREEsIDB4NTg4MiwgMHg1ODgyLCAweDJDRDMsCisgICAgMHg1ODgzLCAweDU4ODMsIDB4MDhFMiwgMHg1ODg0LCAweDU4ODQsIDB4MkNENCwgMHg1ODg1LCAweDU4ODUsIDB4MEQ5MiwKKyAgICAweDU4ODYsIDB4NTg4OCwgMHgyQ0Q1LCAweDU4ODksIDB4NTg4OSwgMHgxM0RCLCAweDU4OEEsIDB4NTg4QSwgMHgxRUMyLAorICAgIDB4NTg4QiwgMHg1ODkxLCAweDJDRDgsIDB4NTg5MiwgMHg1ODkyLCAweDBEMDMsIDB4NTg5MywgMHg1ODkzLCAweDBCMUMsCisgICAgMHg1ODk0LCAweDU4OTgsIDB4MkNERiwgMHg1ODk5LCAweDU4OTksIDB4MEMzQSwgMHg1ODlBLCAweDU4OUEsIDB4MTNEQywKKyAgICAweDU4OUIsIDB4NTg5QiwgMHgyQ0U0LCAweDU4OUMsIDB4NTg5QywgMHgyMkIyLCAweDU4OUQsIDB4NTg5RCwgMHgyQ0U1LAorICAgIDB4NTg5RSwgMHg1ODlFLCAweDExMzksIDB4NTg5RiwgMHg1ODlGLCAweDBGQjEsIDB4NThBMCwgMHg1OEE3LCAweDJDRTYsCisgICAgMHg1OEE4LCAweDU4QTgsIDB4MEIwRSwgMHg1OEE5LCAweDU4QTksIDB4MDYxNCwgMHg1OEFBLCAweDU4QUQsIDB4MkNFRSwKKyAgICAweDU4QUUsIDB4NThBRSwgMHgxRURGLCAweDU4QUYsIDB4NThCMiwgMHgyQ0YyLCAweDU4QjMsIDB4NThCMywgMHgxRUY5LAorICAgIDB4NThCNCwgMHg1OEJBLCAweDJDRjYsIDB4NThCQiwgMHg1OEJCLCAweDIwRDksIDB4NThCQywgMHg1OEJDLCAweDEzQTQsCisgICAgMHg1OEJELCAweDU4QkQsIDB4MkNGRCwgMHg1OEJFLCAweDU4QkUsIDB4MUZERCwgMHg1OEJGLCAweDU4QzAsIDB4MkNGRSwKKyAgICAweDU4QzEsIDB4NThDMSwgMHgwNDQzLCAweDU4QzIsIDB4NThDNCwgMHgyRDAwLCAweDU4QzUsIDB4NThDNSwgMHgxM0E1LAorICAgIDB4NThDNiwgMHg1OEM2LCAweDJEMDMsIDB4NThDNywgMHg1OEM3LCAweDIxNjcsIDB4NThDOCwgMHg1OEQwLCAweDJEMDQsCisgICAgMHg1OEQxLCAweDU4RDEsIDB4MTNBNiwgMHg1OEQyLCAweDU4RDIsIDB4MkQwRCwgMHg1OEQzLCAweDU4RDMsIDB4MjFFRCwKKyAgICAweDU4RDQsIDB4NThENCwgMHgyRDBFLCAweDU4RDUsIDB4NThENSwgMHgwNzc1LCAweDU4RDYsIDB4NThENywgMHgyRDBGLAorICAgIDB4NThEOCwgMHg1OEQ4LCAweDIwMDcsIDB4NThEOSwgMHg1OEQ5LCAweDIzMjYsIDB4NThEQSwgMHg1OERBLCAweDIzMjksCisgICAgMHg1OERCLCAweDU4REQsIDB4MkQxMSwgMHg1OERFLCAweDU4REUsIDB4MUY1MiwgMHg1OERGLCAweDU4REYsIDB4MjAzQiwKKyAgICAweDU4RTAsIDB4NThFMCwgMHgyMzI4LCAweDU4RTEsIDB4NThFMSwgMHgyRDE0LCAweDU4RTIsIDB4NThFMiwgMHgyMzI3LAorICAgIDB4NThFMywgMHg1OEUzLCAweDJEMTUsIDB4NThFNCwgMHg1OEU0LCAweDBDOUIsIDB4NThFNSwgMHg1OEU4LCAweDJEMTYsCisgICAgMHg1OEU5LCAweDU4RTksIDB4MUUyQiwgMHg1OEVBLCAweDU4RUEsIDB4MkQxQSwgMHg1OEVCLCAweDU4RUIsIDB4MEQ1NiwKKyAgICAweDU4RUMsIDB4NThFQywgMHgwQ0E0LCAweDU4RUQsIDB4NThFRCwgMHgyRDFCLCAweDU4RUUsIDB4NThFRSwgMHgxMjEwLAorICAgIDB4NThFRiwgMHg1OEVGLCAweDIyQUUsIDB4NThGMCwgMHg1OEYwLCAweDBEMzIsIDB4NThGMSwgMHg1OEYyLCAweDJEMUMsCisgICAgMHg1OEYzLCAweDU4RjMsIDB4MDk1NCwgMHg1OEY0LCAweDU4RjUsIDB4MkQxRSwgMHg1OEY2LCAweDU4RjYsIDB4MDdBRiwKKyAgICAweDU4RjcsIDB4NThGOCwgMHgyRDIwLCAweDU4RjksIDB4NThGOSwgMHgxMDQzLCAweDU4RkEsIDB4NThGQSwgMHgxRjQ5LAorICAgIDB4NThGQiwgMHg1OEZDLCAweDJEMjIsIDB4NThGRCwgMHg1OEZELCAweDIxMzgsIDB4NThGRSwgMHg1OEZGLCAweDJEMjQsCisgICAgMHg1OTAwLCAweDU5MDEsIDB4MkQyNiwgMHg1OTAyLCAweDU5MDIsIDB4MTYxQywgMHg1OTAzLCAweDU5MDMsIDB4MkQyOCwKKyAgICAweDU5MDQsIDB4NTkwNCwgMHgwNTI5LCAweDU5MDUsIDB4NTkwNiwgMHgyRDI5LCAweDU5MDcsIDB4NTkwNywgMHgwNDIxLAorICAgIDB4NTkwOCwgMHg1OTBDLCAweDJEMkIsIDB4NTkwRCwgMHg1OTBELCAweDA2QUYsIDB4NTkwRSwgMHg1OTBFLCAweDJEMzAsCisgICAgMHg1OTBGLCAweDU5MEYsIDB4MEYzMSwgMHg1OTEwLCAweDU5MTMsIDB4MkQzMSwgMHg1OTE0LCAweDU5MTQsIDB4MTJGQiwKKyAgICAweDU5MTUsIDB4NTkxNSwgMHgwRjEzLCAweDU5MTYsIDB4NTkxNiwgMHgwRTkzLCAweDU5MTcsIDB4NTkxOCwgMHgyRDM1LAorICAgIDB4NTkxOSwgMHg1OTE5LCAweDEzMDEsIDB4NTkxQSwgMHg1OTFBLCAweDA2MUYsIDB4NTkxQiwgMHg1OTFCLCAweDJEMzcsCisgICAgMHg1OTFDLCAweDU5MUMsIDB4MTA0MCwgMHg1OTFELCAweDU5MUUsIDB4MkQzOCwgMHg1OTFGLCAweDU5MUYsIDB4MDcxNCwKKyAgICAweDU5MjAsIDB4NTkyMSwgMHgyRDNBLCAweDU5MjIsIDB4NTkyMiwgMHgyMDgxLCAweDU5MjMsIDB4NTkyMywgMHgyRDNDLAorICAgIDB4NTkyNCwgMHg1OTI0LCAweDE2MUIsIDB4NTkyNSwgMHg1OTI1LCAweDE2MTksIDB4NTkyNiwgMHg1OTI2LCAweDJEM0QsCisgICAgMHg1OTI3LCAweDU5MjcsIDB4MDU3NiwgMHg1OTI4LCAweDU5MjgsIDB4MkQzRSwgMHg1OTI5LCAweDU5MjksIDB4MEUzRiwKKyAgICAweDU5MkEsIDB4NTkyQSwgMHgwREZFLCAweDU5MkIsIDB4NTkyQiwgMHgwNjhGLCAweDU5MkMsIDB4NTkyQywgMHgyRDNGLAorICAgIDB4NTkyRCwgMHg1OTJELCAweDEyNjgsIDB4NTkyRSwgMHg1OTJFLCAweDEwMTQsIDB4NTkyRiwgMHg1OTJGLCAweDA3NzIsCisgICAgMHg1OTMwLCAweDU5MzAsIDB4MkQ0MCwgMHg1OTMxLCAweDU5MzEsIDB4MEQzRSwgMHg1OTMyLCAweDU5MzMsIDB4MkQ0MSwKKyAgICAweDU5MzQsIDB4NTkzNCwgMHgwRTY4LCAweDU5MzUsIDB4NTkzNiwgMHgyRDQzLCAweDU5MzcsIDB4NTkzNywgMHgxMDRCLAorICAgIDB4NTkzOCwgMHg1OTM4LCAweDA5NzEsIDB4NTkzOSwgMHg1OTM5LCAweDA4NDMsIDB4NTkzQSwgMHg1OTNBLCAweDA2MjAsCisgICAgMHg1OTNCLCAweDU5M0IsIDB4MkQ0NSwgMHg1OTNDLCAweDU5M0MsIDB4MTRBRiwgMHg1OTNELCAweDU5M0QsIDB4MkQ0NiwKKyAgICAweDU5M0UsIDB4NTkzRSwgMHgxRjdDLCAweDU5M0YsIDB4NTk0MCwgMHgyRDQ3LCAweDU5NDEsIDB4NTk0MSwgMHgxNEIwLAorICAgIDB4NTk0MiwgMHg1OTQyLCAweDEzOEMsIDB4NTk0MywgMHg1OTQzLCAweDJENDksIDB4NTk0NCwgMHg1OTQ0LCAweDEwMDIsCisgICAgMHg1OTQ1LCAweDU5NDYsIDB4MkQ0QSwgMHg1OTQ3LCAweDU5NDcsIDB4MEMwNSwgMHg1OTQ4LCAweDU5NDgsIDB4MEIzMSwKKyAgICAweDU5NDksIDB4NTk0OSwgMHgwNjhCLCAweDU5NEEsIDB4NTk0QSwgMHgyRDRDLCAweDU5NEIsIDB4NTk0QiwgMHgwNjc5LAorICAgIDB4NTk0QywgMHg1OTRELCAweDJENEQsIDB4NTk0RSwgMHg1OTRFLCAweDA5ODksIDB4NTk0RiwgMHg1OTRGLCAweDEyM0QsCisgICAgMHg1OTUwLCAweDU5NTAsIDB4MkQ0RiwgMHg1OTUxLCAweDU5NTEsIDB4MEMxNCwgMHg1OTUyLCAweDU5NTMsIDB4MkQ1MCwKKyAgICAweDU5NTQsIDB4NTk1NCwgMHgwNDI1LCAweDU5NTUsIDB4NTk1NSwgMHgxNEIyLCAweDU5NTYsIDB4NTk1NiwgMHgwODgyLAorICAgIDB4NTk1NywgMHg1OTU3LCAweDBFMkEsIDB4NTk1OCwgMHg1OTU4LCAweDE0QjQsIDB4NTk1OSwgMHg1OTU5LCAweDJENTIsCisgICAgMHg1OTVBLCAweDU5NUEsIDB4MTRCMywgMHg1OTVCLCAweDU5NUYsIDB4MkQ1MywgMHg1OTYwLCAweDU5NjAsIDB4MDVDRCwKKyAgICAweDU5NjEsIDB4NTk2MSwgMHgyRDU4LCAweDU5NjIsIDB4NTk2MiwgMHgwRDE2LCAweDU5NjMsIDB4NTk2NCwgMHgyRDU5LAorICAgIDB4NTk2NSwgMHg1OTY1LCAweDAzQ0QsIDB4NTk2NiwgMHg1OTY4LCAweDJENUIsIDB4NTk2OSwgMHg1OTY5LCAweDIzNUIsCisgICAgMHg1OTZBLCAweDU5NkEsIDB4MUVERSwgMHg1OTZCLCAweDU5NkIsIDB4MkQ1RSwgMHg1OTZDLCAweDU5NkMsIDB4MUZBMiwKKyAgICAweDU5NkQsIDB4NTk2RCwgMHgyRDVGLCAweDU5NkUsIDB4NTk2RSwgMHgxRUZBLCAweDU5NkYsIDB4NTk3MiwgMHgyRDYwLAorICAgIDB4NTk3MywgMHg1OTczLCAweDBCNkYsIDB4NTk3NCwgMHg1OTc0LCAweDBCNkMsIDB4NTk3NSwgMHg1OTc1LCAweDJENjQsCisgICAgMHg1OTc2LCAweDU5NzYsIDB4MEIyRiwgMHg1OTc3LCAweDU5NzcsIDB4MkQ2NSwgMHg1OTc4LCAweDU5NzgsIDB4MDg1QywKKyAgICAweDU5NzksIDB4NTk3OSwgMHgwREYyLCAweDU5N0EsIDB4NTk3QywgMHgyRDY2LCAweDU5N0QsIDB4NTk3RCwgMHgwNzdBLAorICAgIDB4NTk3RSwgMHg1OTgwLCAweDJENjksIDB4NTk4MSwgMHg1OTgxLCAweDE3NzUsIDB4NTk4MiwgMHg1OTgyLCAweDBDQzIsCisgICAgMHg1OTgzLCAweDU5ODMsIDB4MTc3NiwgMHg1OTg0LCAweDU5ODQsIDB4MEVBRSwgMHg1OTg1LCAweDU5ODUsIDB4MkQ2QywKKyAgICAweDU5ODYsIDB4NTk4NiwgMHgxMjBFLCAweDU5ODcsIDB4NTk4NywgMHgwNkI5LCAweDU5ODgsIDB4NTk4OCwgMHgwQThGLAorICAgIDB4NTk4OSwgMHg1OTg5LCAweDJENkQsIDB4NTk4QSwgMHg1OThBLCAweDBDQUMsIDB4NTk4QiwgMHg1OThDLCAweDJENkUsCisgICAgMHg1OThELCAweDU5OEQsIDB4MTc3NywgMHg1OThFLCAweDU5OTEsIDB4MkQ3MCwgMHg1OTkyLCAweDU5OTIsIDB4MDYwOSwKKyAgICAweDU5OTMsIDB4NTk5MywgMHgwODNFLCAweDU5OTQsIDB4NTk5NSwgMHgyRDc0LCAweDU5OTYsIDB4NTk5NiwgMHgxMDI2LAorICAgIDB4NTk5NywgMHg1OTk3LCAweDE3N0IsIDB4NTk5OCwgMHg1OTk4LCAweDJENzYsIDB4NTk5OSwgMHg1OTk5LCAweDBBRjMsCisgICAgMHg1OTlBLCAweDU5OUMsIDB4MkQ3NywgMHg1OTlELCAweDU5OUQsIDB4MjJBRCwgMHg1OTlFLCAweDU5OUUsIDB4MTc3RSwKKyAgICAweDU5OUYsIDB4NTlBMiwgMHgyRDdBLCAweDU5QTMsIDB4NTlBMywgMHgxNzdBLCAweDU5QTQsIDB4NTlBNCwgMHgxNzdGLAorICAgIDB4NTlBNSwgMHg1OUE1LCAweDBFODgsIDB4NTlBNiwgMHg1OUE3LCAweDJEN0UsIDB4NTlBOCwgMHg1OUE4LCAweDA2NUUsCisgICAgMHg1OUE5LCAweDU5QUEsIDB4MTc3OCwgMHg1OUFCLCAweDU5QUIsIDB4MTc3RCwgMHg1OUFDLCAweDU5QUQsIDB4MkQ4MCwKKyAgICAweDU5QUUsIDB4NTlBRSwgMHgwQjQwLCAweDU5QUYsIDB4NTlBRiwgMHgxNzgyLCAweDU5QjAsIDB4NTlCMSwgMHgyRDgyLAorICAgIDB4NTlCMiwgMHg1OUIyLCAweDE3ODEsIDB4NTlCMywgMHg1OUI4LCAweDJEODQsIDB4NTlCOSwgMHg1OUI5LCAweDBBQzgsCisgICAgMHg1OUJBLCAweDU5QkEsIDB4MkQ4QSwgMHg1OUJCLCAweDU5QkIsIDB4MEJGRCwgMHg1OUJDLCAweDU5QkQsIDB4MkQ4QiwKKyAgICAweDU5QkUsIDB4NTlCRSwgMHgxNzg0LCAweDU5QkYsIDB4NTlDNSwgMHgyRDhELCAweDU5QzYsIDB4NTlDNiwgMHgwQjFBLAorICAgIDB4NTlDNywgMHg1OUM5LCAweDJEOTQsIDB4NTlDQSwgMHg1OUNBLCAweDE3N0MsIDB4NTlDQiwgMHg1OUNCLCAweDBENTMsCisgICAgMHg1OUNDLCAweDU5Q0YsIDB4MkQ5NywgMHg1OUQwLCAweDU5RDAsIDB4MDhCNCwgMHg1OUQxLCAweDU5RDEsIDB4MDcxQywKKyAgICAweDU5RDIsIDB4NTlEMiwgMHgxNzgwLCAweDU5RDMsIDB4NTlEMywgMHgwRkEwLCAweDU5RDQsIDB4NTlENCwgMHgwRUJFLAorICAgIDB4NTlENSwgMHg1OUQ2LCAweDJEOUIsIDB4NTlENywgMHg1OUQ3LCAweDE3ODMsIDB4NTlEOCwgMHg1OUQ4LCAweDE3OEEsCisgICAgMHg1OUQ5LCAweDU5RDksIDB4MkQ5RCwgMHg1OURBLCAweDU5REEsIDB4MTAyRCwgMHg1OURCLCAweDU5REIsIDB4MkQ5RSwKKyAgICAweDU5REMsIDB4NTlEQywgMHgwODdCLCAweDU5REQsIDB4NTlERCwgMHgxNzg3LCAweDU5REUsIDB4NTlFMiwgMHgyRDlGLAorICAgIDB4NTlFMywgMHg1OUUzLCAweDE3ODksIDB4NTlFNCwgMHg1OUU0LCAweDJEQTQsIDB4NTlFNSwgMHg1OUU1LCAweDA5QkMsCisgICAgMHg1OUU2LCAweDU5RTcsIDB4MkRBNSwgMHg1OUU4LCAweDU5RTgsIDB4MTA1MywgMHg1OUU5LCAweDU5RUIsIDB4MkRBNywKKyAgICAweDU5RUMsIDB4NTlFQywgMHgwODFBLCAweDU5RUQsIDB4NTlGOCwgMHgyREFBLCAweDU5RjksIDB4NTlGOSwgMHgxNzhCLAorICAgIDB4NTlGQSwgMHg1OUZBLCAweDJEQjYsIDB4NTlGQiwgMHg1OUZCLCAweDEwN0QsIDB4NTlGQywgMHg1OUZFLCAweDJEQjcsCisgICAgMHg1OUZGLCAweDU5RkYsIDB4MTIyOCwgMHg1QTAwLCAweDVBMDAsIDB4MkRCQSwgMHg1QTAxLCAweDVBMDEsIDB4MEVBRiwKKyAgICAweDVBMDIsIDB4NUEwMiwgMHgyREJCLCAweDVBMDMsIDB4NUEwMywgMHgwRThGLCAweDVBMDQsIDB4NUEwNCwgMHgwQTRELAorICAgIDB4NUEwNSwgMHg1QTA2LCAweDE3ODUsIDB4NUEwNywgMHg1QTA3LCAweDA4OTAsIDB4NUEwOCwgMHg1QTA4LCAweDE3ODgsCisgICAgMHg1QTA5LCAweDVBMDksIDB4MTc4RCwgMHg1QTBBLCAweDVBMEIsIDB4MkRCQywgMHg1QTBDLCAweDVBMEMsIDB4MTc4QywKKyAgICAweDVBMEQsIDB4NUExMCwgMHgyREJFLCAweDVBMTEsIDB4NUExMSwgMHgxNzkwLCAweDVBMTIsIDB4NUExMiwgMHgyREMyLAorICAgIDB4NUExMywgMHg1QTEzLCAweDE3OTIsIDB4NUExNCwgMHg1QTE3LCAweDJEQzMsIDB4NUExOCwgMHg1QTE4LCAweDBCNTIsCisgICAgMHg1QTE5LCAweDVBMUIsIDB4MkRDNywgMHg1QTFDLCAweDVBMUMsIDB4MEIyQiwgMHg1QTFELCAweDVBMUUsIDB4MkRDQSwKKyAgICAweDVBMUYsIDB4NUExRiwgMHgwOTE5LCAweDVBMjAsIDB4NUEyMCwgMHgwRDI4LCAweDVBMjEsIDB4NUEyMiwgMHgyRENDLAorICAgIDB4NUEyMywgMHg1QTIzLCAweDE3OTEsIDB4NUEyNCwgMHg1QTI0LCAweDJEQ0UsIDB4NUEyNSwgMHg1QTI1LCAweDA2MkYsCisgICAgMHg1QTI2LCAweDVBMjgsIDB4MkRDRiwgMHg1QTI5LCAweDVBMjksIDB4MEFFOSwgMHg1QTJBLCAweDVBMzAsIDB4MkREMiwKKyAgICAweDVBMzEsIDB4NUEzMSwgMHgxMENFLCAweDVBMzIsIDB4NUEzMiwgMHgxNzhFLCAweDVBMzMsIDB4NUEzMywgMHgyREQ5LAorICAgIDB4NUEzNCwgMHg1QTM0LCAweDE3OEYsIDB4NUEzNSwgMHg1QTM1LCAweDJEREEsIDB4NUEzNiwgMHg1QTM2LCAweDBDN0QsCisgICAgMHg1QTM3LCAweDVBM0IsIDB4MkREQiwgMHg1QTNDLCAweDVBM0MsIDB4MTc5NywgMHg1QTNELCAweDVBM0YsIDB4MkRFMCwKKyAgICAweDVBNDAsIDB4NUE0MCwgMHgxNzkzLCAweDVBNDEsIDB4NUE0MSwgMHgyMDNGLCAweDVBNDIsIDB4NUE0NSwgMHgyREUzLAorICAgIDB4NUE0NiwgMHg1QTQ2LCAweDBCRTQsIDB4NUE0NywgMHg1QTQ4LCAweDJERTcsIDB4NUE0OSwgMHg1QTQ5LCAweDBFQTIsCisgICAgMHg1QTRBLCAweDVBNEEsIDB4MTc5NSwgMHg1QTRCLCAweDVBNTQsIDB4MkRFOSwgMHg1QTU1LCAweDVBNTUsIDB4MTc5NiwKKyAgICAweDVBNTYsIDB4NUE1OSwgMHgyREYzLCAweDVBNUEsIDB4NUE1QSwgMHgwN0ZFLCAweDVBNUIsIDB4NUE2MSwgMHgyREY3LAorICAgIDB4NUE2MiwgMHg1QTYyLCAweDE3OTgsIDB4NUE2MywgMHg1QTY1LCAweDJERkUsIDB4NUE2NiwgMHg1QTY2LCAweDFGMEUsCisgICAgMHg1QTY3LCAweDVBNjcsIDB4MTc5NCwgMHg1QTY4LCAweDVBNjksIDB4MkUwMSwgMHg1QTZBLCAweDVBNkEsIDB4MDlBMiwKKyAgICAweDVBNkIsIDB4NUE2QywgMHgyRTAzLCAweDVBNkQsIDB4NUE2RCwgMHgyM0Y5LCAweDVBNkUsIDB4NUE3MywgMHgyRTA1LAorICAgIDB4NUE3NCwgMHg1QTc0LCAweDEwODksIDB4NUE3NSwgMHg1QTc1LCAweDE3OTksIDB4NUE3NiwgMHg1QTc2LCAweDBEMkQsCisgICAgMHg1QTc3LCAweDVBNzcsIDB4MTc5RCwgMHg1QTc4LCAweDVBNzksIDB4MkUwQiwgMHg1QTdBLCAweDVBN0EsIDB4MTc5RSwKKyAgICAweDVBN0IsIDB4NUE3RSwgMHgyRTBELCAweDVBN0YsIDB4NUE3RiwgMHgwRkMxLCAweDVBODAsIDB4NUE5MSwgMHgyRTExLAorICAgIDB4NUE5MiwgMHg1QTkyLCAweDBBQzIsIDB4NUE5MywgMHg1QTk5LCAweDJFMjMsIDB4NUE5QSwgMHg1QTlBLCAweDBBQzksCisgICAgMHg1QTlCLCAweDVBOUIsIDB4MTc5QywgMHg1QTlDLCAweDVBQTYsIDB4MkUyQSwgMHg1QUE3LCAweDVBQTcsIDB4MjNGQywKKyAgICAweDVBQTgsIDB4NUFBOSwgMHgyRTM1LCAweDVBQUEsIDB4NUFBQSwgMHgxNzlCLCAweDVBQUIsIDB4NUFCMSwgMHgyRTM3LAorICAgIDB4NUFCMiwgMHg1QUIyLCAweDE3QTEsIDB4NUFCMywgMHg1QUIzLCAweDBGMUUsIDB4NUFCNCwgMHg1QUI0LCAweDJFM0UsCisgICAgMHg1QUI1LCAweDVBQjUsIDB4MTlBNCwgMHg1QUI2LCAweDVBQjcsIDB4MkUzRiwgMHg1QUI4LCAweDVBQjgsIDB4MTdBNCwKKyAgICAweDVBQjksIDB4NUFCQywgMHgyRTQxLCAweDVBQkQsIDB4NUFCRCwgMHgyMDY5LCAweDVBQkUsIDB4NUFCRSwgMHgxNzlGLAorICAgIDB4NUFCRiwgMHg1QUMwLCAweDJFNDUsIDB4NUFDMSwgMHg1QUMxLCAweDA4NTEsIDB4NUFDMiwgMHg1QUMyLCAweDBDRTIsCisgICAgMHg1QUMzLCAweDVBQzgsIDB4MkU0NywgMHg1QUM5LCAweDVBQzksIDB4MDgyOCwgMHg1QUNBLCAweDVBQ0IsIDB4MkU0RCwKKyAgICAweDVBQ0MsIDB4NUFDQywgMHgwRjQwLCAweDVBQ0QsIDB4NUFEMSwgMHgyRTRGLCAweDVBRDIsIDB4NUFEMiwgMHgxN0EyLAorICAgIDB4NUFEMywgMHg1QUQzLCAweDJFNTQsIDB4NUFENCwgMHg1QUQ0LCAweDE3QTMsIDB4NUFENSwgMHg1QUQ1LCAweDJFNTUsCisgICAgMHg1QUQ2LCAweDVBRDYsIDB4MTdBOCwgMHg1QUQ3LCAweDVBRDcsIDB4MjNGNywgMHg1QUQ4LCAweDVBRDgsIDB4MTdBQSwKKyAgICAweDVBRDksIDB4NUFEQiwgMHgyRTU2LCAweDVBREMsIDB4NUFEQywgMHgxN0FCLCAweDVBREQsIDB4NUFERiwgMHgyRTU5LAorICAgIDB4NUFFMCwgMHg1QUUwLCAweDE3QTUsIDB4NUFFMSwgMHg1QUUxLCAweDA1QjYsIDB4NUFFMiwgMHg1QUUyLCAweDJFNUMsCisgICAgMHg1QUUzLCAweDVBRTMsIDB4MTdBNiwgMHg1QUU0LCAweDVBRTUsIDB4MkU1RCwgMHg1QUU2LCAweDVBRTYsIDB4MTdBOSwKKyAgICAweDVBRTcsIDB4NUFFOCwgMHgyRTVGLCAweDVBRTksIDB4NUFFOSwgMHgwQjNFLCAweDVBRUEsIDB4NUFFQSwgMHgyRTYxLAorICAgIDB4NUFFQiwgMHg1QUVCLCAweDE3QTAsIDB4NUFFQywgMHg1QUYwLCAweDJFNjIsIDB4NUFGMSwgMHg1QUYxLCAweDE3QTcsCisgICAgMHg1QUYyLCAweDVBRjQsIDB4MkU2NywgMHg1QUY1LCAweDVBRjUsIDB4MjNGNiwgMHg1QUY2LCAweDVBRkEsIDB4MkU2QSwKKyAgICAweDVBRkIsIDB4NUFGQiwgMHgyM0ZELCAweDVBRkMsIDB4NUFGRiwgMHgyRTZGLCAweDVCMDAsIDB4NUIwMCwgMHgyM0Y4LAorICAgIDB4NUIwMSwgMHg1QjA3LCAweDJFNzMsIDB4NUIwOCwgMHg1QjA4LCAweDIzRkEsIDB4NUIwOSwgMHg1QjA5LCAweDE3QUMsCisgICAgMHg1QjBBLCAweDVCMEEsIDB4MkU3QSwgMHg1QjBCLCAweDVCMEIsIDB4MjNGRSwgMHg1QjBDLCAweDVCMEMsIDB4MUZBOCwKKyAgICAweDVCMEQsIDB4NUIxNSwgMHgyRTdCLCAweDVCMTYsIDB4NUIxNiwgMHgxN0FFLCAweDVCMTcsIDB4NUIxNywgMHgxN0FELAorICAgIDB4NUIxOCwgMHg1QjE4LCAweDJFODQsIDB4NUIxOSwgMHg1QjE5LCAweDI0MDEsIDB4NUIxQSwgMHg1QjIwLCAweDJFODUsCisgICAgMHg1QjIxLCAweDVCMjEsIDB4MjNGRiwgMHg1QjIyLCAweDVCMjksIDB4MkU4QywgMHg1QjJBLCAweDVCMkEsIDB4MjQwMCwKKyAgICAweDVCMkIsIDB4NUIyRiwgMHgyRTk0LCAweDVCMzAsIDB4NUIzMCwgMHgyMjIxLCAweDVCMzEsIDB4NUIzMSwgMHgyRTk5LAorICAgIDB4NUIzMiwgMHg1QjMyLCAweDE3QUYsIDB4NUIzMywgMHg1QjMzLCAweDJFOUEsIDB4NUIzNCwgMHg1QjM0LCAweDEzMEMsCisgICAgMHg1QjM1LCAweDVCMzYsIDB4MkU5QiwgMHg1QjM3LCAweDVCMzcsIDB4MTdCMCwgMHg1QjM4LCAweDVCMzgsIDB4MjEyMiwKKyAgICAweDVCMzksIDB4NUIzRiwgMHgyRTlELCAweDVCNDAsIDB4NUI0MCwgMHgxN0IxLCAweDVCNDEsIDB4NUI0QiwgMHgyRUE0LAorICAgIDB4NUI0QywgMHg1QjRDLCAweDIzRkIsIDB4NUI0RCwgMHg1QjRGLCAweDJFQUYsIDB4NUI1MCwgMHg1QjUwLCAweDEyMzAsCisgICAgMHg1QjUxLCAweDVCNTEsIDB4MTdCNywgMHg1QjUyLCAweDVCNTIsIDB4MkVCMiwgMHg1QjUzLCAweDVCNTMsIDB4MTdCOCwKKyAgICAweDVCNTQsIDB4NUI1NCwgMHgwOTY0LCAweDVCNTUsIDB4NUI1NSwgMHgxMTEzLCAweDVCNTYsIDB4NUI1NiwgMHgyRUIzLAorICAgIDB4NUI1NywgMHg1QjU3LCAweDEyMzMsIDB4NUI1OCwgMHg1QjU4LCAweDA1NjksIDB4NUI1OSwgMHg1QjU5LCAweDBERTQsCisgICAgMHg1QjVBLCAweDVCNUEsIDB4MTdCNCwgMHg1QjVCLCAweDVCNUIsIDB4MTI3OSwgMHg1QjVDLCAweDVCNUMsIDB4MTIyQiwKKyAgICAweDVCNUQsIDB4NUI1RCwgMHgwRjZELCAweDVCNUUsIDB4NUI1RSwgMHgyRUI0LCAweDVCNUYsIDB4NUI1RiwgMHgwQUQ0LAorICAgIDB4NUI2MCwgMHg1QjYxLCAweDJFQjUsIDB4NUI2MiwgMHg1QjYyLCAweDE3QjksIDB4NUI2MywgMHg1QjYzLCAweDA4MzEsCisgICAgMHg1QjY0LCAweDVCNjQsIDB4MDcxQiwgMHg1QjY1LCAweDVCNjUsIDB4MTdCNSwgMHg1QjY2LCAweDVCNjYsIDB4MEZEMCwKKyAgICAweDVCNjcsIDB4NUI2OCwgMHgyRUI3LCAweDVCNjksIDB4NUI2OSwgMHgwNzU5LCAweDVCNkEsIDB4NUI2QSwgMHgwQTc2LAorICAgIDB4NUI2QiwgMHg1QjZCLCAweDIxNUEsIDB4NUI2QywgMHg1QjZDLCAweDEyNjEsIDB4NUI2RCwgMHg1QjZGLCAweDJFQjksCisgICAgMHg1QjcwLCAweDVCNzAsIDB4MEQ4MiwgMHg1QjcxLCAweDVCNzEsIDB4MTc2QSwgMHg1QjcyLCAweDVCNzIsIDB4MkVCQywKKyAgICAweDVCNzMsIDB4NUI3MywgMHgxN0I2LCAweDVCNzQsIDB4NUI3NCwgMHgyRUJELCAweDVCNzUsIDB4NUI3NSwgMHgwNjkyLAorICAgIDB4NUI3NiwgMHg1Qjc3LCAweDJFQkUsIDB4NUI3OCwgMHg1Qjc4LCAweDIxRTUsIDB4NUI3OSwgMHg1Qjc5LCAweDJFQzAsCisgICAgMHg1QjdBLCAweDVCN0EsIDB4MENDMSwgMHg1QjdCLCAweDVCN0MsIDB4MkVDMSwgMHg1QjdELCAweDVCN0QsIDB4MEI1OCwKKyAgICAweDVCN0UsIDB4NUI3RSwgMHgyRUMzLCAweDVCN0YsIDB4NUI3RiwgMHgyMDU3LCAweDVCODAsIDB4NUI4MCwgMHgxNzJFLAorICAgIDB4NUI4MSwgMHg1QjgxLCAweDBCNjEsIDB4NUI4MiwgMHg1QjgyLCAweDJFQzQsIDB4NUI4MywgMHg1QjgzLCAweDBERjEsCisgICAgMHg1Qjg0LCAweDVCODQsIDB4MTcyRiwgMHg1Qjg1LCAweDVCODUsIDB4MTE0RCwgMHg1Qjg2LCAweDVCODYsIDB4MkVDNSwKKyAgICAweDVCODcsIDB4NUI4NywgMHgxMEQzLCAweDVCODgsIDB4NUI4OCwgMHgwRDZGLCAweDVCODksIDB4NUI4OSwgMHgwM0JELAorICAgIDB4NUI4QSwgMHg1QjhBLCAweDJFQzYsIDB4NUI4QiwgMHg1QjhCLCAweDBEQzMsIDB4NUI4QywgMHg1QjhDLCAweDBFOUIsCisgICAgMHg1QjhELCAweDVCOEUsIDB4MkVDNywgMHg1QjhGLCAweDVCOEYsIDB4MDdBMSwgMHg1QjkwLCAweDVCOTIsIDB4MkVDOSwKKyAgICAweDVCOTMsIDB4NUI5MywgMHgxNzMxLCAweDVCOTQsIDB4NUI5NCwgMHgyRUNDLCAweDVCOTUsIDB4NUI5NSwgMHgxNzMwLAorICAgIDB4NUI5NiwgMHg1Qjk2LCAweDJFQ0QsIDB4NUI5NywgMHg1Qjk3LCAweDEyMzcsIDB4NUI5OCwgMHg1Qjk4LCAweDA3MzIsCisgICAgMHg1Qjk5LCAweDVCOTksIDB4MTFFNSwgMHg1QjlBLCAweDVCOUEsIDB4MDVFNywgMHg1QjlCLCAweDVCOUIsIDB4MEVBMSwKKyAgICAweDVCOUMsIDB4NUI5QywgMHgxMDUyLCAweDVCOUQsIDB4NUI5RCwgMHgwNDBGLCAweDVCOUUsIDB4NUI5RSwgMHgwRDRDLAorICAgIDB4NUI5RiwgMHg1QjlGLCAweDJFQ0UsIDB4NUJBMCwgMHg1QkEwLCAweDA1MEQsIDB4NUJBMSwgMHg1QkExLCAweDBEMkMsCisgICAgMHg1QkEyLCAweDVCQTIsIDB4MDk1QSwgMHg1QkEzLCAweDVCQTMsIDB4MEZDNiwgMHg1QkE0LCAweDVCQTQsIDB4MEQ2OSwKKyAgICAweDVCQTUsIDB4NUJBNSwgMHgxNzMyLCAweDVCQTYsIDB4NUJBNiwgMHgwN0Q3LCAweDVCQTcsIDB4NUJBOSwgMHgyRUNGLAorICAgIDB4NUJBQSwgMHg1QkFBLCAweDBGNDksIDB4NUJBQiwgMHg1QkFCLCAweDA3MDUsIDB4NUJBQywgMHg1QkFGLCAweDJFRDIsCisgICAgMHg1QkIwLCAweDVCQjAsIDB4MTExQSwgMHg1QkIxLCAweDVCQjIsIDB4MkVENiwgMHg1QkIzLCAweDVCQjMsIDB4MDc1RCwKKyAgICAweDVCQjQsIDB4NUJCNCwgMHgxMDEwLCAweDVCQjUsIDB4NUJCNSwgMHgwRjY5LCAweDVCQjYsIDB4NUJCNiwgMHgwODQ1LAorICAgIDB4NUJCNywgMHg1QkI3LCAweDJFRDgsIDB4NUJCOCwgMHg1QkI4LCAweDE3MzMsIDB4NUJCOSwgMHg1QkI5LCAweDBDQjgsCisgICAgMHg1QkJBLCAweDVCQkMsIDB4MkVEOSwgMHg1QkJELCAweDVCQkQsIDB4MDk3QSwgMHg1QkJFLCAweDVCQkUsIDB4MDQ1RiwKKyAgICAweDVCQkYsIDB4NUJCRiwgMHgwREQzLCAweDVCQzAsIDB4NUJDMSwgMHgyRURDLCAweDVCQzIsIDB4NUJDMiwgMHgwODM4LAorICAgIDB4NUJDMywgMHg1QkMzLCAweDJFREUsIDB4NUJDNCwgMHg1QkM0LCAweDA4MzcsIDB4NUJDNSwgMHg1QkM1LCAweDEwODEsCisgICAgMHg1QkM2LCAweDVCQzYsIDB4MEFFMSwgMHg1QkM3LCAweDVCQzcsIDB4MDk2OSwgMHg1QkM4LCAweDVCQ0IsIDB4MkVERiwKKyAgICAweDVCQ0MsIDB4NUJDQywgMHgwNkI2LCAweDVCQ0QsIDB4NUJDRiwgMHgyRUUzLCAweDVCRDAsIDB4NUJEMCwgMHgwQUM3LAorICAgIDB4NUJEMSwgMHg1QkQxLCAweDJFRTYsIDB4NUJEMiwgMHg1QkQyLCAweDA3NjUsIDB4NUJEMywgMHg1QkQzLCAweDEwRTUsCisgICAgMHg1QkQ0LCAweDVCREMsIDB4MkVFNywgMHg1QkRELCAweDVCREQsIDB4MEM1QiwgMHg1QkRFLCAweDVCREUsIDB4MEIxMiwKKyAgICAweDVCREYsIDB4NUJERiwgMHgwNEIzLCAweDVCRTAsIDB4NUJFMCwgMHgyRUYwLCAweDVCRTEsIDB4NUJFMSwgMHgwNzJBLAorICAgIDB4NUJFMiwgMHg1QkUyLCAweDIwRTUsIDB4NUJFMywgMHg1QkUzLCAweDJFRjEsIDB4NUJFNCwgMHg1QkU0LCAweDE3MzcsCisgICAgMHg1QkU1LCAweDVCRTUsIDB4MEExMSwgMHg1QkU2LCAweDVCRTYsIDB4MjEyRiwgMHg1QkU3LCAweDVCRTcsIDB4MjBBMywKKyAgICAweDVCRTgsIDB4NUJFOCwgMHgxMTUwLCAweDVCRTksIDB4NUJFOSwgMHgyMTIxLCAweDVCRUEsIDB4NUJFQSwgMHgyRUYyLAorICAgIDB4NUJFQiwgMHg1QkVCLCAweDIxRDQsIDB4NUJFQywgMHg1QkVDLCAweDFGRTUsIDB4NUJFRCwgMHg1QkVELCAweDJFRjMsCisgICAgMHg1QkVFLCAweDVCRUUsIDB4MTczOCwgMHg1QkVGLCAweDVCRUYsIDB4MkVGNCwgMHg1QkYwLCAweDVCRjAsIDB4MTczQSwKKyAgICAweDVCRjEsIDB4NUJGNCwgMHgyRUY1LCAweDVCRjUsIDB4NUJGNSwgMHgxRThBLCAweDVCRjYsIDB4NUJGNiwgMHgxRTM3LAorICAgIDB4NUJGNywgMHg1QkY3LCAweDJFRjksIDB4NUJGOCwgMHg1QkY4LCAweDA1NkEsIDB4NUJGOSwgMHg1QkY5LCAweDA2MTMsCisgICAgMHg1QkZBLCAweDVCRkEsIDB4MERCNywgMHg1QkZCLCAweDVCRkIsIDB4MEZEOSwgMHg1QkZDLCAweDVCRkMsIDB4MDU5RCwKKyAgICAweDVCRkQsIDB4NUJGRSwgMHgyRUZBLCAweDVCRkYsIDB4NUJGRiwgMHgwRDcwLCAweDVDMDAsIDB4NUMwMCwgMHgyRUZDLAorICAgIDB4NUMwMSwgMHg1QzAxLCAweDA2N0YsIDB4NUMwMiwgMHg1QzAzLCAweDJFRkQsIDB4NUMwNCwgMHg1QzA0LCAweDBEMUQsCisgICAgMHg1QzA1LCAweDVDMDUsIDB4MkVGRiwgMHg1QzA2LCAweDVDMDYsIDB4MDg3QywgMHg1QzA3LCAweDVDMDcsIDB4MUY5RSwKKyAgICAweDVDMDgsIDB4NUMwOCwgMHgyMkE2LCAweDVDMDksIDB4NUMwOSwgMHgwRUNELCAweDVDMEEsIDB4NUMwQSwgMHgxMjRELAorICAgIDB4NUMwQiwgMHg1QzBCLCAweDIxRTgsIDB4NUMwQywgMHg1QzBDLCAweDJGMDAsIDB4NUMwRCwgMHg1QzBELCAweDFFREEsCisgICAgMHg1QzBFLCAweDVDMEUsIDB4MUVCOSwgMHg1QzBGLCAweDVDMEYsIDB4MEY2QywgMHg1QzEwLCAweDVDMTAsIDB4MkYwMSwKKyAgICAweDVDMTEsIDB4NUMxMSwgMHgwRDEyLCAweDVDMTIsIDB4NUMxMywgMHgyRjAyLCAweDVDMTQsIDB4NUMxNCwgMHgwNjNBLAorICAgIDB4NUMxNSwgMHg1QzE1LCAweDE3QjIsIDB4NUMxNiwgMHg1QzE2LCAweDA4NTUsIDB4NUMxNywgMHg1QzE3LCAweDJGMDQsCisgICAgMHg1QzE4LCAweDVDMTgsIDB4MDRFMywgMHg1QzE5LCAweDVDMTksIDB4MkYwNSwgMHg1QzFBLCAweDVDMUEsIDB4MEQwOSwKKyAgICAweDVDMUIsIDB4NUMxQiwgMHgyRjA2LCAweDVDMUMsIDB4NUMxQywgMHgxN0IzLCAweDVDMUQsIDB4NUMxRCwgMHgwNEM3LAorICAgIDB4NUMxRSwgMHg1QzIxLCAweDJGMDcsIDB4NUMyMiwgMHg1QzIyLCAweDE0QjYsIDB4NUMyMywgMHg1QzIzLCAweDJGMEIsCisgICAgMHg1QzI0LCAweDVDMjQsIDB4MTBBRCwgMHg1QzI1LCAweDVDMjUsIDB4MTRCNywgMHg1QzI2LCAweDVDMjYsIDB4MkYwQywKKyAgICAweDVDMjcsIDB4NUMyNywgMHgxMDI5LCAweDVDMjgsIDB4NUMyQiwgMHgyRjBELCAweDVDMkMsIDB4NUMyQywgMHgxNEI4LAorICAgIDB4NUMyRCwgMHg1QzMwLCAweDJGMTEsIDB4NUMzMSwgMHg1QzMxLCAweDA4RkMsIDB4NUMzMiwgMHg1QzMzLCAweDJGMTUsCisgICAgMHg1QzM0LCAweDVDMzQsIDB4MTRCOSwgMHg1QzM1LCAweDVDMzYsIDB4MkYxNywgMHg1QzM3LCAweDVDMzcsIDB4MjM1QywKKyAgICAweDVDMzgsIDB4NUMzOCwgMHgwRDQzLCAweDVDMzksIDB4NUMzOSwgMHgxMDgzLCAweDVDM0EsIDB4NUMzQSwgMHgwNTA0LAorICAgIDB4NUMzQiwgMHg1QzNCLCAweDE3NjYsIDB4NUMzQywgMHg1QzNDLCAweDBCNDQsIDB4NUMzRCwgMHg1QzNELCAweDA4RDAsCisgICAgMHg1QzNFLCAweDVDM0UsIDB4MEVDMSwgMHg1QzNGLCAweDVDM0YsIDB4MEI1NSwgMHg1QzQwLCAweDVDNDAsIDB4MDkwNSwKKyAgICAweDVDNDEsIDB4NUM0MSwgMHgwQkM3LCAweDVDNDIsIDB4NUM0MiwgMHgwNEFBLCAweDVDNDMsIDB4NUM0NCwgMHgyRjE5LAorICAgIDB4NUM0NSwgMHg1QzQ1LCAweDA5MDIsIDB4NUM0NiwgMHg1QzQ3LCAweDJGMUIsIDB4NUM0OCwgMHg1QzQ4LCAweDBDNzksCisgICAgMHg1QzQ5LCAweDVDNDksIDB4MEUzRSwgMHg1QzRBLCAweDVDNEEsIDB4MDhCRCwgMHg1QzRCLCAweDVDNEIsIDB4MEVFQywKKyAgICAweDVDNEMsIDB4NUM0RCwgMHgyRjFELCAweDVDNEUsIDB4NUM0RSwgMHgwRDUxLCAweDVDNEYsIDB4NUM0RiwgMHgwQkUwLAorICAgIDB4NUM1MCwgMHg1QzUwLCAweDE3NjgsIDB4NUM1MSwgMHg1QzUxLCAweDBGODcsIDB4NUM1MiwgMHg1QzU0LCAweDJGMUYsCisgICAgMHg1QzU1LCAweDVDNTUsIDB4MTE1QSwgMHg1QzU2LCAweDVDNTgsIDB4MkYyMiwgMHg1QzU5LCAweDVDNTksIDB4MTc2OSwKKyAgICAweDVDNUEsIDB4NUM1RCwgMHgyRjI1LCAweDVDNUUsIDB4NUM1RSwgMHgwRDhCLCAweDVDNUYsIDB4NUM1RiwgMHgyRjI5LAorICAgIDB4NUM2MCwgMHg1QzYwLCAweDBFNzEsIDB4NUM2MSwgMHg1QzYxLCAweDBBNkMsIDB4NUM2MiwgMHg1QzYyLCAweDIwNTAsCisgICAgMHg1QzYzLCAweDVDNjMsIDB4MTc2QiwgMHg1QzY0LCAweDVDNjQsIDB4MUU2NywgMHg1QzY1LCAweDVDNjUsIDB4MEE2QiwKKyAgICAweDVDNjYsIDB4NUM2NiwgMHgxNzZDLCAweDVDNjcsIDB4NUM2NywgMHgyRjJBLCAweDVDNjgsIDB4NUM2OCwgMHgyM0Y0LAorICAgIDB4NUM2OSwgMHg1QzZCLCAweDJGMkIsIDB4NUM2QywgMHg1QzZDLCAweDIxM0UsIDB4NUM2RCwgMHg1QzZELCAweDJGMkUsCisgICAgMHg1QzZFLCAweDVDNkUsIDB4MTc3NCwgMHg1QzZGLCAweDVDNkYsIDB4MEU3RSwgMHg1QzcwLCAweDVDNzAsIDB4MkYyRiwKKyAgICAweDVDNzEsIDB4NUM3MSwgMHgwQ0Y2LCAweDVDNzIsIDB4NUM3OCwgMHgyRjMwLCAweDVDNzksIDB4NUM3OSwgMHgxMDYwLAorICAgIDB4NUM3QSwgMHg1QzdBLCAweDE1QUMsIDB4NUM3QiwgMHg1QzdFLCAweDJGMzcsIDB4NUM3RiwgMHg1QzdGLCAweDEwRDEsCisgICAgMHg1QzgwLCAweDVDODAsIDB4MkYzQiwgMHg1QzgxLCAweDVDODEsIDB4MERERiwgMHg1QzgyLCAweDVDODIsIDB4MEMxMCwKKyAgICAweDVDODMsIDB4NUM4NywgMHgyRjNDLCAweDVDODgsIDB4NUM4OCwgMHgxNUIwLCAweDVDODksIDB4NUM4QiwgMHgyRjQxLAorICAgIDB4NUM4QywgMHg1QzhDLCAweDE1QUIsIDB4NUM4RCwgMHg1QzhELCAweDE1QUQsIDB4NUM4RSwgMHg1QzhGLCAweDJGNDQsCisgICAgMHg1QzkwLCAweDVDOTAsIDB4MTVBRSwgMHg1QzkxLCAweDVDOTEsIDB4MTVCMywgMHg1QzkyLCAweDVDOTMsIDB4MkY0NiwKKyAgICAweDVDOTQsIDB4NUM5NCwgMHgwNEI0LCAweDVDOTUsIDB4NUM5NSwgMHgyRjQ4LCAweDVDOTYsIDB4NUM5NiwgMHgxNUFGLAorICAgIDB4NUM5NywgMHg1Qzk3LCAweDA2RDUsIDB4NUM5OCwgMHg1Qzk5LCAweDE1QjEsIDB4NUM5QSwgMHg1QzlBLCAweDE1QjQsCisgICAgMHg1QzlCLCAweDVDOUIsIDB4MDU5QiwgMHg1QzlDLCAweDVDOUMsIDB4MTVCNSwgMHg1QzlELCAweDVDQTAsIDB4MkY0OSwKKyAgICAweDVDQTEsIDB4NUNBMSwgMHgxRjE2LCAweDVDQTIsIDB4NUNBMiwgMHgxNUI3LCAweDVDQTMsIDB4NUNBMywgMHgxNUJDLAorICAgIDB4NUNBNCwgMHg1Q0E4LCAweDJGNEQsIDB4NUNBOSwgMHg1Q0E5LCAweDBGRkIsIDB4NUNBQSwgMHg1Q0FBLCAweDJGNTIsCisgICAgMHg1Q0FCLCAweDVDQUIsIDB4MTVCQSwgMHg1Q0FDLCAweDVDQUMsIDB4MTVCOSwgMHg1Q0FELCAweDVDQUQsIDB4MEEzNCwKKyAgICAweDVDQUUsIDB4NUNCMCwgMHgyRjUzLCAweDVDQjEsIDB4NUNCMSwgMHgxNUJCLCAweDVDQjIsIDB4NUNCMiwgMHgyRjU2LAorICAgIDB4NUNCMywgMHg1Q0IzLCAweDExMDMsIDB4NUNCNCwgMHg1Q0I0LCAweDJGNTcsIDB4NUNCNSwgMHg1Q0I1LCAweDE1QjYsCisgICAgMHg1Q0I2LCAweDVDQjYsIDB4MkY1OCwgMHg1Q0I3LCAweDVDQjcsIDB4MTVCRSwgMHg1Q0I4LCAweDVDQjgsIDB4MDNDMSwKKyAgICAweDVDQjksIDB4NUNCQywgMHgyRjU5LCAweDVDQkQsIDB4NUNCRCwgMHgxNUI4LCAweDVDQkUsIDB4NUNCRSwgMHgyRjVELAorICAgIDB4NUNCRiwgMHg1Q0JGLCAweDA5ODYsIDB4NUNDMCwgMHg1Q0MwLCAweDJGNUUsIDB4NUNDMSwgMHg1Q0MxLCAweDE1QkQsCisgICAgMHg1Q0MyLCAweDVDQzMsIDB4MkY1RiwgMHg1Q0M0LCAweDVDQzQsIDB4MTVCRiwgMHg1Q0M1LCAweDVDQ0EsIDB4MkY2MSwKKyAgICAweDVDQ0IsIDB4NUNDQiwgMHgxNUMyLCAweDVDQ0MsIDB4NUNEMSwgMHgyRjY3LCAweDVDRDIsIDB4NUNEMiwgMHgxNUMwLAorICAgIDB4NUNEMywgMHg1Q0Q4LCAweDJGNkQsIDB4NUNEOSwgMHg1Q0Q5LCAweDExQzQsIDB4NUNEQSwgMHg1Q0UwLCAweDJGNzMsCisgICAgMHg1Q0UxLCAweDVDRTEsIDB4MEYyQywgMHg1Q0UyLCAweDVDRTMsIDB4MkY3QSwgMHg1Q0U0LCAweDVDRTQsIDB4MTVDMSwKKyAgICAweDVDRTUsIDB4NUNFNSwgMHgxNUMzLCAweDVDRTYsIDB4NUNFNiwgMHgwQTc0LCAweDVDRTcsIDB4NUNFNywgMHgyRjdDLAorICAgIDB4NUNFOCwgMHg1Q0U4LCAweDA2MkEsIDB4NUNFOSwgMHg1Q0U5LCAweDJGN0QsIDB4NUNFQSwgMHg1Q0VBLCAweDEwREQsCisgICAgMHg1Q0VCLCAweDVDRUMsIDB4MkY3RSwgMHg1Q0VELCAweDVDRUQsIDB4MEM0QSwgMHg1Q0VFLCAweDVDRUYsIDB4MkY4MCwKKyAgICAweDVDRjAsIDB4NUNGMCwgMHgwNjgyLCAweDVDRjEsIDB4NUNGMywgMHgyRjgyLCAweDVDRjQsIDB4NUNGNCwgMHgyMzg5LAorICAgIDB4NUNGNSwgMHg1Q0Y1LCAweDJGODUsIDB4NUNGNiwgMHg1Q0Y2LCAweDFFQjcsIDB4NUNGNywgMHg1Q0ZBLCAweDJGODYsCisgICAgMHg1Q0ZCLCAweDVDRkIsIDB4MDkyRCwgMHg1Q0ZDLCAweDVDRkMsIDB4MkY4QSwgMHg1Q0ZELCAweDVDRkQsIDB4MjFCNCwKKyAgICAweDVDRkUsIDB4NUNGRiwgMHgyRjhCLCAweDVEMDAsIDB4NUQwMSwgMHgyRjhELCAweDVEMDIsIDB4NUQwMywgMHgxNUM0LAorICAgIDB4NUQwNCwgMHg1RDA1LCAweDJGOEYsIDB4NUQwNiwgMHg1RDA2LCAweDE1Q0IsIDB4NUQwNywgMHg1RDA3LCAweDA1MEMsCisgICAgMHg1RDA4LCAweDVEMEMsIDB4MkY5MSwgMHg1RDBELCAweDVEMEQsIDB4MjM4RiwgMHg1RDBFLCAweDVEMEUsIDB4MEMwOCwKKyAgICAweDVEMEYsIDB4NUQxMywgMHgyRjk2LCAweDVEMTQsIDB4NUQxNCwgMHgwNTYxLCAweDVEMTUsIDB4NUQxNSwgMHgyRjlCLAorICAgIDB4NUQxNiwgMHg1RDE2LCAweDBGRUIsIDB4NUQxNywgMHg1RDE3LCAweDFGMUEsIDB4NUQxOCwgMHg1RDFBLCAweDJGOUMsCisgICAgMHg1RDFCLCAweDVEMUIsIDB4MTVDQywgMHg1RDFDLCAweDVEMUQsIDB4MkY5RiwgMHg1RDFFLCAweDVEMUUsIDB4MTVDQSwKKyAgICAweDVEMUYsIDB4NUQyMywgMHgyRkExLCAweDVEMjQsIDB4NUQyNCwgMHgxNUM5LCAweDVEMjUsIDB4NUQyNSwgMHgyRkE2LAorICAgIDB4NUQyNiwgMHg1RDI2LCAweDE1QzcsIDB4NUQyNywgMHg1RDI3LCAweDE1QzYsIDB4NUQyOCwgMHg1RDI4LCAweDJGQTcsCisgICAgMHg1RDI5LCAweDVEMjksIDB4MDQyOSwgMHg1RDJBLCAweDVEMkIsIDB4MkZBOCwgMHg1RDJDLCAweDVEMkMsIDB4MjM4QiwKKyAgICAweDVEMkQsIDB4NUQyRCwgMHgxMTU5LCAweDVEMkUsIDB4NUQyRSwgMHgxNUM4LCAweDVEMkYsIDB4NUQzMywgMHgyRkFBLAorICAgIDB4NUQzNCwgMHg1RDM0LCAweDE1Q0YsIDB4NUQzNSwgMHg1RDNDLCAweDJGQUYsIDB4NUQzRCwgMHg1RDNELCAweDE1RDAsCisgICAgMHg1RDNFLCAweDVEM0UsIDB4MTVDRSwgMHg1RDNGLCAweDVENDYsIDB4MkZCNywgMHg1RDQ3LCAweDVENDcsIDB4MUIyMiwKKyAgICAweDVENDgsIDB4NUQ0OSwgMHgyRkJGLCAweDVENEEsIDB4NUQ0QSwgMHgxNUQ3LCAweDVENEIsIDB4NUQ0QiwgMHgxNUQ2LAorICAgIDB4NUQ0QywgMHg1RDRDLCAweDBDMzMsIDB4NUQ0RCwgMHg1RDRGLCAweDJGQzEsIDB4NUQ1MCwgMHg1RDUwLCAweDIzOEEsCisgICAgMHg1RDUxLCAweDVENTcsIDB4MkZDNCwgMHg1RDU4LCAweDVENTgsIDB4MTVDRCwgMHg1RDU5LCAweDVENUEsIDB4MkZDQiwKKyAgICAweDVENUIsIDB4NUQ1QiwgMHgxNUQyLCAweDVENUMsIDB4NUQ1QywgMHgyRkNELCAweDVENUQsIDB4NUQ1RCwgMHgxNUQ0LAorICAgIDB4NUQ1RSwgMHg1RDY4LCAweDJGQ0UsIDB4NUQ2OSwgMHg1RDY5LCAweDE1RDgsIDB4NUQ2QSwgMHg1RDZBLCAweDJGRDksCisgICAgMHg1RDZCLCAweDVENkIsIDB4MTVENSwgMHg1RDZDLCAweDVENkMsIDB4MTVEMSwgMHg1RDZELCAweDVENkUsIDB4MkZEQSwKKyAgICAweDVENkYsIDB4NUQ2RiwgMHgxNUQzLCAweDVENzAsIDB4NUQ3MywgMHgyRkRDLCAweDVENzQsIDB4NUQ3NCwgMHgxNUQ5LAorICAgIDB4NUQ3NSwgMHg1RDgwLCAweDJGRTAsIDB4NUQ4MSwgMHg1RDgxLCAweDIzOTEsIDB4NUQ4MiwgMHg1RDgyLCAweDE1REEsCisgICAgMHg1RDgzLCAweDVEODMsIDB4MkZFQywgMHg1RDg0LCAweDVEODQsIDB4MjI3MSwgMHg1RDg1LCAweDVEODYsIDB4MkZFRCwKKyAgICAweDVEODcsIDB4NUQ4NywgMHgyMzg4LCAweDVEODgsIDB4NUQ5NiwgMHgyRkVGLCAweDVEOTcsIDB4NUQ5NywgMHgyMzhFLAorICAgIDB4NUQ5OCwgMHg1RDk4LCAweDJGRkUsIDB4NUQ5OSwgMHg1RDk5LCAweDE1REIsIDB4NUQ5QSwgMHg1RDlDLCAweDJGRkYsCisgICAgMHg1RDlELCAweDVEOUQsIDB4MTVEQywgMHg1RDlFLCAweDVEOUYsIDB4MzAwMiwgMHg1REEwLCAweDVEQTAsIDB4MjM4RCwKKyAgICAweDVEQTEsIDB4NURBNiwgMHgzMDA0LCAweDVEQTcsIDB4NURBNywgMHgyMzhDLCAweDVEQTgsIDB4NURCNiwgMHgzMDBBLAorICAgIDB4NURCNywgMHg1REI3LCAweDE1REUsIDB4NURCOCwgMHg1REI4LCAweDIzOTAsIDB4NURCOSwgMHg1REI5LCAweDMwMTksCisgICAgMHg1REJBLCAweDVEQkEsIDB4MjAzMywgMHg1REJCLCAweDVEQkIsIDB4MzAxQSwgMHg1REJDLCAweDVEQkMsIDB4MjIzQywKKyAgICAweDVEQkQsIDB4NURDNCwgMHgzMDFCLCAweDVEQzUsIDB4NURDNSwgMHgxNURGLCAweDVEQzYsIDB4NURDQSwgMHgzMDIzLAorICAgIDB4NURDQiwgMHg1RENCLCAweDFGRTksIDB4NURDQywgMHg1RENDLCAweDMwMjgsIDB4NURDRCwgMHg1RENELCAweDBFQjAsCisgICAgMHg1RENFLCAweDVERDEsIDB4MzAyOSwgMHg1REQyLCAweDVERDIsIDB4MjA1NSwgMHg1REQzLCAweDVERDMsIDB4MzAyRCwKKyAgICAweDVERDQsIDB4NURENCwgMHgyMzkyLCAweDVERDUsIDB4NUREQSwgMHgzMDJFLCAweDVEREIsIDB4NUREQiwgMHgxODE1LAorICAgIDB4NUREQywgMHg1RERDLCAweDMwMzQsIDB4NURERCwgMHg1RERELCAweDA1MkIsIDB4NURERSwgMHg1RERFLCAweDExREMsCisgICAgMHg1RERGLCAweDVERTAsIDB4MzAzNSwgMHg1REUxLCAweDVERTEsIDB4MEZEQiwgMHg1REUyLCAweDVERTIsIDB4MDRENywKKyAgICAweDVERTMsIDB4NURFNCwgMHgzMDM3LCAweDVERTUsIDB4NURFNSwgMHgwNkZELCAweDVERTYsIDB4NURFNiwgMHgxMjUwLAorICAgIDB4NURFNywgMHg1REU3LCAweDBDNDYsIDB4NURFOCwgMHg1REU4LCAweDA5MEQsIDB4NURFOSwgMHg1REU5LCAweDA3MDcsCisgICAgMHg1REVBLCAweDVERUEsIDB4MzAzOSwgMHg1REVCLCAweDVERUIsIDB4MEVFNiwgMHg1REVDLCAweDVERUQsIDB4MzAzQSwKKyAgICAweDVERUUsIDB4NURFRSwgMHgwNEI1LCAweDVERUYsIDB4NURFRiwgMHgxMzlGLCAweDVERjAsIDB4NURGMCwgMHgyMzI0LAorICAgIDB4NURGMSwgMHg1REYxLCAweDA4MkQsIDB4NURGMiwgMHg1REYyLCAweDEwNTgsIDB4NURGMywgMHg1REYzLCAweDBEQkQsCisgICAgMHg1REY0LCAweDVERjQsIDB4MDNEOCwgMHg1REY1LCAweDVERjYsIDB4MzAzQywgMHg1REY3LCAweDVERjcsIDB4MEY1QywKKyAgICAweDVERjgsIDB4NURGQywgMHgzMDNFLCAweDVERkQsIDB4NURGRCwgMHgxMkY3LCAweDVERkUsIDB4NURGRSwgMHgwOEJFLAorICAgIDB4NURGRiwgMHg1REZGLCAweDMwNDMsIDB4NUUwMCwgMHg1RTAwLCAweDMwNDQsIDB4NUUwMSwgMHg1RTAxLCAweDA0M0IsCisgICAgMHg1RTAyLCAweDVFMDIsIDB4MEQ2NywgMHg1RTAzLCAweDVFMDMsIDB4MDQ4MywgMHg1RTA0LCAweDVFMDQsIDB4MzA0NSwKKyAgICAweDVFMDUsIDB4NUUwNSwgMHgwRDlDLCAweDVFMDYsIDB4NUUwNiwgMHgwNjQ4LCAweDVFMDcsIDB4NUUwNywgMHgzMDQ2LAorICAgIDB4NUUwOCwgMHg1RTA4LCAweDBEM0QsIDB4NUUwOSwgMHg1RTBCLCAweDMwNDcsIDB4NUUwQywgMHg1RTBDLCAweDBGMTAsCisgICAgMHg1RTBELCAweDVFMEUsIDB4MzA0QSwgMHg1RTBGLCAweDVFMEYsIDB4MTU5RSwgMHg1RTEwLCAweDVFMTAsIDB4MTE2QiwKKyAgICAweDVFMTEsIDB4NUUxMSwgMHgxNUExLCAweDVFMTIsIDB4NUUxMywgMHgzMDRDLCAweDVFMTQsIDB4NUUxNCwgMHgxNUEwLAorICAgIDB4NUUxNSwgMHg1RTE1LCAweDBCODIsIDB4NUUxNiwgMHg1RTE2LCAweDBFNEUsIDB4NUUxNywgMHg1RTE3LCAweDMwNEUsCisgICAgMHg1RTE4LCAweDVFMTgsIDB4MDlGQSwgMHg1RTE5LCAweDVFMTksIDB4MTU5RiwgMHg1RTFBLCAweDVFMUEsIDB4MTFFMiwKKyAgICAweDVFMUIsIDB4NUUxQiwgMHgwNDc2LCAweDVFMUMsIDB4NUUxQywgMHgxMUMzLCAweDVFMUQsIDB4NUUxRCwgMHgwNUJDLAorICAgIDB4NUUxRSwgMHg1RTI0LCAweDMwNEYsIDB4NUUyNSwgMHg1RTI1LCAweDIxNDMsIDB4NUUyNiwgMHg1RTI2LCAweDA1N0IsCisgICAgMHg1RTI3LCAweDVFMjcsIDB4MTFBMCwgMHg1RTI4LCAweDVFMkEsIDB4MzA1NiwgMHg1RTJCLCAweDVFMkIsIDB4MjEyOSwKKyAgICAweDVFMkMsIDB4NUUyQywgMHgzMDU5LCAweDVFMkQsIDB4NUUyRCwgMHgwRjFDLCAweDVFMkUsIDB4NUUyRSwgMHgwM0ZBLAorICAgIDB4NUUyRiwgMHg1RTMwLCAweDMwNUEsIDB4NUUzMSwgMHg1RTMxLCAweDE1QTIsIDB4NUUzMiwgMHg1RTMyLCAweDMwNUMsCisgICAgMHg1RTMzLCAweDVFMzMsIDB4MjI3NywgMHg1RTM0LCAweDVFMzUsIDB4MzA1RCwgMHg1RTM2LCAweDVFMzYsIDB4MUVBNywKKyAgICAweDVFMzcsIDB4NUUzNywgMHgxNUE1LCAweDVFMzgsIDB4NUUzOCwgMHgwNEM4LCAweDVFMzksIDB4NUUzQSwgMHgzMDVGLAorICAgIDB4NUUzQiwgMHg1RTNDLCAweDE1QTMsIDB4NUUzRCwgMHg1RTNELCAweDBBQjYsIDB4NUUzRSwgMHg1RTNGLCAweDMwNjEsCisgICAgMHg1RTQwLCAweDVFNDAsIDB4MjI4NSwgMHg1RTQxLCAweDVFNDEsIDB4MzA2MywgMHg1RTQyLCAweDVFNDIsIDB4MEFFMiwKKyAgICAweDVFNDMsIDB4NUU0MywgMHgyMzg0LCAweDVFNDQsIDB4NUU0NCwgMHgxNUE2LCAweDVFNDUsIDB4NUU0NSwgMHgwNjk2LAorICAgIDB4NUU0NiwgMHg1RTRCLCAweDMwNjQsIDB4NUU0QywgMHg1RTRDLCAweDA3RTQsIDB4NUU0RCwgMHg1RTUzLCAweDMwNkEsCisgICAgMHg1RTU0LCAweDVFNTQsIDB4MTVBNywgMHg1RTU1LCAweDVFNTUsIDB4MEIxRSwgMHg1RTU2LCAweDVFNTYsIDB4MzA3MSwKKyAgICAweDVFNTcsIDB4NUU1NywgMHgyMzg3LCAweDVFNTgsIDB4NUU1OCwgMHgyMzg2LCAweDVFNTksIDB4NUU1QSwgMHgzMDcyLAorICAgIDB4NUU1QiwgMHg1RTVCLCAweDE1QTgsIDB4NUU1QywgMHg1RTVELCAweDMwNzQsIDB4NUU1RSwgMHg1RTVFLCAweDE1QTksCisgICAgMHg1RTVGLCAweDVFNUYsIDB4MjI5MCwgMHg1RTYwLCAweDVFNjAsIDB4MzA3NiwgMHg1RTYxLCAweDVFNjEsIDB4MTVBQSwKKyAgICAweDVFNjIsIDB4NUU2MiwgMHgwNTM0LCAweDVFNjMsIDB4NUU2MywgMHgxRTQ0LCAweDVFNjQsIDB4NUU2QSwgMHgzMDc3LAorICAgIDB4NUU2QiwgMHg1RTZCLCAweDFFMzIsIDB4NUU2QywgMHg1RTZDLCAweDIzODUsIDB4NUU2RCwgMHg1RTcxLCAweDMwN0UsCisgICAgMHg1RTcyLCAweDVFNzIsIDB4MDZDNCwgMHg1RTczLCAweDVFNzMsIDB4MEJEQywgMHg1RTc0LCAweDVFNzQsIDB4MEI0RCwKKyAgICAweDVFNzUsIDB4NUU3NSwgMHgzMDgzLCAweDVFNzYsIDB4NUU3NiwgMHgwNDY5LCAweDVFNzcsIDB4NUU3NywgMHgzMDg0LAorICAgIDB4NUU3OCwgMHg1RTc4LCAweDBGOUQsIDB4NUU3OSwgMHg1RTc5LCAweDFGMTMsIDB4NUU3QSwgMHg1RTdBLCAweDE4MTMsCisgICAgMHg1RTdCLCAweDVFN0IsIDB4MDdEOCwgMHg1RTdDLCAweDVFN0MsIDB4MTBCQywgMHg1RTdELCAweDVFN0QsIDB4MTBBOSwKKyAgICAweDVFN0UsIDB4NUU3RSwgMHgxRjczLCAweDVFN0YsIDB4NUU3RiwgMHgwNzNDLCAweDVFODAsIDB4NUU4MCwgMHgxNjMxLAorICAgIDB4NUU4MSwgMHg1RTgzLCAweDMwODUsIDB4NUU4NCwgMHg1RTg0LCAweDEyMEMsIDB4NUU4NSwgMHg1RTg1LCAweDMwODgsCisgICAgMHg1RTg2LCAweDVFODYsIDB4MEM2OSwgMHg1RTg3LCAweDVFODcsIDB4MDQzQywgMHg1RTg4LCAweDVFODksIDB4MzA4OSwKKyAgICAweDVFOEEsIDB4NUU4QSwgMHgwNTM1LCAweDVFOEIsIDB4NUU4QiwgMHgxNjMzLCAweDVFOEMsIDB4NUU4RSwgMHgzMDhCLAorICAgIDB4NUU4RiwgMHg1RThGLCAweDBGQkQsIDB4NUU5MCwgMHg1RTkwLCAweDBBNTUsIDB4NUU5MSwgMHg1RTkxLCAweDE2MzIsCisgICAgMHg1RTkyLCAweDVFOTIsIDB4MzA4RSwgMHg1RTkzLCAweDVFOTMsIDB4MDk2RiwgMHg1RTk0LCAweDVFOTQsIDB4MTA4QiwKKyAgICAweDVFOTUsIDB4NUU5NSwgMHgwNUI4LCAweDVFOTYsIDB4NUU5NiwgMHgxNjM0LCAweDVFOTcsIDB4NUU5NywgMHgwNUNCLAorICAgIDB4NUU5OCwgMHg1RTk4LCAweDMwOEYsIDB4NUU5OSwgMHg1RTk5LCAweDBBRjIsIDB4NUU5QSwgMHg1RTlBLCAweDA2RjgsCisgICAgMHg1RTlCLCAweDVFOUIsIDB4MzA5MCwgMHg1RTlDLCAweDVFOUMsIDB4MDZBOSwgMHg1RTlELCAweDVFOUQsIDB4MzA5MSwKKyAgICAweDVFOUUsIDB4NUU5RSwgMHgwQjk0LCAweDVFOUYsIDB4NUU5RiwgMHgwNjZDLCAweDVFQTAsIDB4NUVBMCwgMHgxNjM2LAorICAgIDB4NUVBMSwgMHg1RUE0LCAweDMwOTIsIDB4NUVBNSwgMHg1RUE1LCAweDE2MzUsIDB4NUVBNiwgMHg1RUE2LCAweDA2MDcsCisgICAgMHg1RUE3LCAweDVFQTcsIDB4MTI1NiwgMHg1RUE4LCAweDVFQUEsIDB4MzA5NiwgMHg1RUFCLCAweDVFQUIsIDB4MUZFMCwKKyAgICAweDVFQUMsIDB4NUVBQywgMHgzMDk5LCAweDVFQUQsIDB4NUVBRCwgMHgwRTU2LCAweDVFQUUsIDB4NUVCMiwgMHgzMDlBLAorICAgIDB4NUVCMywgMHg1RUIzLCAweDE2M0EsIDB4NUVCNCwgMHg1RUI0LCAweDMwOUYsIDB4NUVCNSwgMHg1RUI1LCAweDE2MzgsCisgICAgMHg1RUI2LCAweDVFQjYsIDB4MEQ5MywgMHg1RUI3LCAweDVFQjcsIDB4MDk0MiwgMHg1RUI4LCAweDVFQjgsIDB4MTA5RSwKKyAgICAweDVFQjksIDB4NUVCOSwgMHgxNjM3LCAweDVFQkEsIDB4NUVCRCwgMHgzMEEwLCAweDVFQkUsIDB4NUVCRSwgMHgxNjM5LAorICAgIDB4NUVCRiwgMHg1RUM4LCAweDMwQTQsIDB4NUVDOSwgMHg1RUM5LCAweDA5RjcsIDB4NUVDQSwgMHg1RUNBLCAweDA5QjMsCisgICAgMHg1RUNCLCAweDVFRDAsIDB4MzBBRSwgMHg1RUQxLCAweDVFRDEsIDB4MTYzRCwgMHg1RUQyLCAweDVFRDIsIDB4MTYzQywKKyAgICAweDVFRDMsIDB4NUVEMywgMHgwOTk1LCAweDVFRDQsIDB4NUVENSwgMHgzMEI0LCAweDVFRDYsIDB4NUVENiwgMHgwQTE3LAorICAgIDB4NUVENywgMHg1RURBLCAweDMwQjYsIDB4NUVEQiwgMHg1RURCLCAweDE2M0UsIDB4NUVEQywgMHg1RURFLCAweDMwQkEsCisgICAgMHg1RURGLCAweDVFREYsIDB4MjA4NywgMHg1RUUwLCAweDVFRTAsIDB4MUU3OCwgMHg1RUUxLCAweDVFRTEsIDB4MjNBRSwKKyAgICAweDVFRTIsIDB4NUVFMiwgMHgxRUY2LCAweDVFRTMsIDB4NUVFMywgMHgxRjMxLCAweDVFRTQsIDB4NUVFNywgMHgzMEJELAorICAgIDB4NUVFOCwgMHg1RUU4LCAweDE2M0YsIDB4NUVFOSwgMHg1RUU5LCAweDMwQzEsIDB4NUVFQSwgMHg1RUVBLCAweDE2NDAsCisgICAgMHg1RUVCLCAweDVFRUIsIDB4MzBDMiwgMHg1RUVDLCAweDVFRUMsIDB4MjA0NSwgMHg1RUVELCAweDVFRjIsIDB4MzBDMywKKyAgICAweDVFRjMsIDB4NUVGMywgMHgyMTc4LCAweDVFRjQsIDB4NUVGNCwgMHgxMzk4LCAweDVFRjUsIDB4NUVGNSwgMHgzMEM5LAorICAgIDB4NUVGNiwgMHg1RUY2LCAweDBGRkMsIDB4NUVGNywgMHg1RUY3LCAweDBFNTMsIDB4NUVGOCwgMHg1RUY5LCAweDMwQ0EsCisgICAgMHg1RUZBLCAweDVFRkEsIDB4MDg3OSwgMHg1RUZCLCAweDVFRkQsIDB4MzBDQywgMHg1RUZFLCAweDVFRkUsIDB4MTRBRCwKKyAgICAweDVFRkYsIDB4NUVGRiwgMHgxMjVCLCAweDVGMDAsIDB4NUYwMCwgMHgwOTM3LCAweDVGMDEsIDB4NUYwMSwgMHgxMzlELAorICAgIDB4NUYwMiwgMHg1RjAyLCAweDEwNzMsIDB4NUYwMywgMHg1RjAzLCAweDBDMTksIDB4NUYwNCwgMHg1RjA0LCAweDBCNkIsCisgICAgMHg1RjA1LCAweDVGMDcsIDB4MzBDRiwgMHg1RjA4LCAweDVGMDgsIDB4MTRBRSwgMHg1RjA5LCAweDVGMDksIDB4MzBEMiwKKyAgICAweDVGMEEsIDB4NUYwQSwgMHgwNDQwLCAweDVGMEIsIDB4NUYwQiwgMHgxNEY2LCAweDVGMEMsIDB4NUYwRSwgMHgzMEQzLAorICAgIDB4NUYwRiwgMHg1RjBGLCAweDBENTQsIDB4NUYxMCwgMHg1RjEwLCAweDMwRDYsIDB4NUYxMSwgMHg1RjExLCAweDE0RjksCisgICAgMHg1RjEyLCAweDVGMTIsIDB4MzBENywgMHg1RjEzLCAweDVGMTMsIDB4MDcwNiwgMHg1RjE0LCAweDVGMTQsIDB4MzBEOCwKKyAgICAweDVGMTUsIDB4NUYxNSwgMHgxMDg0LCAweDVGMTYsIDB4NUYxNiwgMHgzMEQ5LCAweDVGMTcsIDB4NUYxNywgMHgwNkEwLAorICAgIDB4NUYxOCwgMHg1RjE4LCAweDA3QTIsIDB4NUYxOSwgMHg1RjFBLCAweDMwREEsIDB4NUYxQiwgMHg1RjFCLCAweDA0RkYsCisgICAgMHg1RjFDLCAweDVGMUUsIDB4MzBEQywgMHg1RjFGLCAweDVGMUYsIDB4MDVCRCwgMHg1RjIwLCAweDVGMjAsIDB4MTE2NiwKKyAgICAweDVGMjEsIDB4NUYyNCwgMHgzMERGLCAweDVGMjUsIDB4NUYyNSwgMHgwQURCLCAweDVGMjYsIDB4NUYyNiwgMHgwRjNGLAorICAgIDB4NUYyNywgMHg1RjI3LCAweDA3QjYsIDB4NUYyOCwgMHg1RjI4LCAweDMwRTMsIDB4NUYyOSwgMHg1RjI5LCAweDE3NkYsCisgICAgMHg1RjJBLCAweDVGMkEsIDB4MTc2RSwgMHg1RjJCLCAweDVGMkMsIDB4MzBFNCwgMHg1RjJELCAweDVGMkQsIDB4MTc3MCwKKyAgICAweDVGMkUsIDB4NUYyRSwgMHgzMEU2LCAweDVGMkYsIDB4NUYyRiwgMHgwRTk1LCAweDVGMzAsIDB4NUYzMCwgMHgzMEU3LAorICAgIDB4NUYzMSwgMHg1RjMxLCAweDBDRDAsIDB4NUYzMiwgMHg1RjMyLCAweDMwRTgsIDB4NUYzMywgMHg1RjMzLCAweDIzRjUsCisgICAgMHg1RjM0LCAweDVGMzQsIDB4MzBFOSwgMHg1RjM1LCAweDVGMzUsIDB4MjI3NSwgMHg1RjM2LCAweDVGMzgsIDB4MzBFQSwKKyAgICAweDVGMzksIDB4NUYzOSwgMHgwNTkwLCAweDVGM0EsIDB4NUYzQSwgMHgwQzNDLCAweDVGM0IsIDB4NUYzQiwgMHgzMEVELAorICAgIDB4NUYzQywgMHg1RjNDLCAweDE3NzIsIDB4NUYzRCwgMHg1RjNGLCAweDMwRUUsIDB4NUY0MCwgMHg1RjQwLCAweDE5QkUsCisgICAgMHg1RjQxLCAweDVGNDUsIDB4MzBGMSwgMHg1RjQ2LCAweDVGNDYsIDB4MjY2RSwgMHg1RjQ3LCAweDVGNDcsIDB4MzBGNiwKKyAgICAweDVGNDgsIDB4NUY0OCwgMHgxRUIwLCAweDVGNDksIDB4NUY0QiwgMHgzMEY3LCAweDVGNEMsIDB4NUY0QywgMHgyMDgzLAorICAgIDB4NUY0RCwgMHg1RjRELCAweDMwRkEsIDB4NUY0RSwgMHg1RjRFLCAweDIxODgsIDB4NUY0RiwgMHg1RjRGLCAweDMwRkIsCisgICAgMHg1RjUwLCAweDVGNTAsIDB4MTc2MiwgMHg1RjUxLCAweDVGNTEsIDB4MzBGQywgMHg1RjUyLCAweDVGNTIsIDB4MDc0MiwKKyAgICAweDVGNTMsIDB4NUY1MywgMHgwNTkyLCAweDVGNTQsIDB4NUY1NCwgMHgzMEZELCAweDVGNTUsIDB4NUY1NSwgMHgwQTYzLAorICAgIDB4NUY1NiwgMHg1RjU2LCAweDE3NjQsIDB4NUY1NywgMHg1RjU3LCAweDE3NjMsIDB4NUY1OCwgMHg1RjU4LCAweDE3NjUsCisgICAgMHg1RjU5LCAweDVGNTksIDB4MjY3QywgMHg1RjVBLCAweDVGNUMsIDB4MzBGRSwgMHg1RjVELCAweDVGNUQsIDB4MTA1NCwKKyAgICAweDVGNUUsIDB4NUY2MCwgMHgzMTAxLCAweDVGNjEsIDB4NUY2MSwgMHgxNUVFLCAweDVGNjIsIDB4NUY2MiwgMHgwRjk5LAorICAgIDB4NUY2MywgMHg1RjYzLCAweDMxMDQsIDB4NUY2NCwgMHg1RjY0LCAweDBFNUYsIDB4NUY2NSwgMHg1RjY1LCAweDMxMDUsCisgICAgMHg1RjY2LCAweDVGNjYsIDB4MTAwRSwgMHg1RjY3LCAweDVGNjgsIDB4MzEwNiwgMHg1RjY5LCAweDVGNjksIDB4MDQ5MSwKKyAgICAweDVGNkEsIDB4NUY2QSwgMHgwNDU0LCAweDVGNkIsIDB4NUY2QiwgMHgzMTA4LCAweDVGNkMsIDB4NUY2QywgMHgwNDVCLAorICAgIDB4NUY2RCwgMHg1RjZELCAweDBCQUUsIDB4NUY2RSwgMHg1RjZGLCAweDMxMDksIDB4NUY3MCwgMHg1RjcwLCAweDExNjQsCisgICAgMHg1RjcxLCAweDVGNzEsIDB4MTA5NSwgMHg1RjcyLCAweDVGNzIsIDB4MzEwQiwgMHg1RjczLCAweDVGNzMsIDB4MTVFMCwKKyAgICAweDVGNzQsIDB4NUY3NiwgMHgzMTBDLCAweDVGNzcsIDB4NUY3NywgMHgxNUUxLCAweDVGNzgsIDB4NUY3OCwgMHgzMTBGLAorICAgIDB4NUY3OSwgMHg1Rjc5LCAweDEwNjIsIDB4NUY3QSwgMHg1RjdBLCAweDMxMTAsIDB4NUY3QiwgMHg1RjdCLCAweDA0REUsCisgICAgMHg1RjdDLCAweDVGN0MsIDB4MDQzNCwgMHg1RjdELCAweDVGN0YsIDB4MzExMSwgMHg1RjgwLCAweDVGODAsIDB4MEVBQSwKKyAgICAweDVGODEsIDB4NUY4MSwgMHgxMTk4LCAweDVGODIsIDB4NUY4MiwgMHgxNUUyLCAweDVGODMsIDB4NUY4MywgMHgzMTE0LAorICAgIDB4NUY4NCwgMHg1Rjg0LCAweDA4RTUsIDB4NUY4NSwgMHg1Rjg1LCAweDA1ODAsIDB4NUY4NiwgMHg1Rjg2LCAweDMxMTUsCisgICAgMHg1Rjg3LCAweDVGODcsIDB4MTVFMywgMHg1Rjg4LCAweDVGODgsIDB4MDc5MywgMHg1Rjg5LCAweDVGODksIDB4MTVFNCwKKyAgICAweDVGOEEsIDB4NUY4QSwgMHgwN0M3LCAweDVGOEIsIDB4NUY4QiwgMHgwQTcwLCAweDVGOEMsIDB4NUY4QywgMHgxNUU1LAorICAgIDB4NUY4RCwgMHg1RjhGLCAweDMxMTYsIDB4NUY5MCwgMHg1RjkwLCAweDBGQjcsIDB4NUY5MSwgMHg1RjkxLCAweDFGQzUsCisgICAgMHg1RjkyLCAweDVGOTIsIDB4MEU2RSwgMHg1RjkzLCAweDVGOTQsIDB4MzExOSwgMHg1Rjk1LCAweDVGOTUsIDB4MTVFNiwKKyAgICAweDVGOTYsIDB4NUY5NiwgMHgzMTFCLCAweDVGOTcsIDB4NUY5NywgMHgwNUE0LCAweDVGOTgsIDB4NUY5OCwgMHgwQjg4LAorICAgIDB4NUY5OSwgMHg1Rjk5LCAweDE1RTcsIDB4NUY5QSwgMHg1RjlCLCAweDMxMUMsIDB4NUY5QywgMHg1RjlDLCAweDE1RTgsCisgICAgMHg1RjlELCAweDVGOUQsIDB4MzExRSwgMHg1RjlFLCAweDVGOUUsIDB4MUVBMSwgMHg1RjlGLCAweDVGOUYsIDB4MzExRiwKKyAgICAweDVGQTAsIDB4NUZBMCwgMHgyMzkzLCAweDVGQTEsIDB4NUZBMSwgMHgxMERFLCAweDVGQTIsIDB4NUZBNywgMHgzMTIwLAorICAgIDB4NUZBOCwgMHg1RkE4LCAweDE1RTksIDB4NUZBOSwgMHg1RkE5LCAweDFGMEIsIDB4NUZBQSwgMHg1RkFBLCAweDBGRDYsCisgICAgMHg1RkFCLCAweDVGQUMsIDB4MzEyNiwgMHg1RkFELCAweDVGQUQsIDB4MTVFQSwgMHg1RkFFLCAweDVGQUUsIDB4MEVCMSwKKyAgICAweDVGQUYsIDB4NUZCNCwgMHgzMTI4LCAweDVGQjUsIDB4NUZCNSwgMHgxNUVCLCAweDVGQjYsIDB4NUZCNiwgMHgzMTJFLAorICAgIDB4NUZCNywgMHg1RkI3LCAweDA1QTMsIDB4NUZCOCwgMHg1RkI4LCAweDMxMkYsIDB4NUZCOSwgMHg1RkI5LCAweDFFN0MsCisgICAgMHg1RkJBLCAweDVGQkIsIDB4MzEzMCwgMHg1RkJDLCAweDVGQkMsIDB4MTVFQywgMHg1RkJELCAweDVGQkQsIDB4MDdFQSwKKyAgICAweDVGQkUsIDB4NUZDMiwgMHgzMTMyLCAweDVGQzMsIDB4NUZDMywgMHgwRjhGLCAweDVGQzQsIDB4NUZDNCwgMHgxNjQyLAorICAgIDB4NUZDNSwgMHg1RkM1LCAweDA0NDEsIDB4NUZDNiwgMHg1RkM2LCAweDEwNkIsIDB4NUZDNywgMHg1RkM4LCAweDMxMzcsCisgICAgMHg1RkM5LCAweDVGQzksIDB4MTY0MywgMHg1RkNBLCAweDVGQ0IsIDB4MzEzOSwgMHg1RkNDLCAweDVGQ0MsIDB4MDgzQywKKyAgICAweDVGQ0QsIDB4NUZDRCwgMHgwQ0E3LCAweDVGQ0UsIDB4NUZDRSwgMHgzMTNCLCAweDVGQ0YsIDB4NUZDRiwgMHgxNjQ1LAorICAgIDB4NUZEMCwgMHg1RkQwLCAweDFBMEMsIDB4NUZEMSwgMHg1RkQxLCAweDFBMEIsIDB4NUZEMiwgMHg1RkQyLCAweDE0RjcsCisgICAgMHg1RkQzLCAweDVGRDUsIDB4MzEzQywgMHg1RkQ2LCAweDVGRDYsIDB4MTY0NCwgMHg1RkQ3LCAweDVGRDcsIDB4MTFCRCwKKyAgICAweDVGRDgsIDB4NUZEOCwgMHgwRUFELCAweDVGRDksIDB4NUZEOSwgMHgwQUFCLCAweDVGREEsIDB4NUZEQywgMHgzMTNGLAorICAgIDB4NUZERCwgMHg1RkRELCAweDE2ODMsIDB4NUZERSwgMHg1RkRGLCAweDMxNDIsIDB4NUZFMCwgMHg1RkUwLCAweDExRDEsCisgICAgMHg1RkUxLCAweDVGRTEsIDB4MTY0OSwgMHg1RkUyLCAweDVGRTMsIDB4MzE0NCwgMHg1RkU0LCAweDVGRTQsIDB4MTY0QSwKKyAgICAweDVGRTUsIDB4NUZFNiwgMHgzMTQ2LCAweDVGRTcsIDB4NUZFNywgMHgxMEFDLCAweDVGRTgsIDB4NUZFOSwgMHgzMTQ4LAorICAgIDB4NUZFQSwgMHg1RkVBLCAweDE2NEUsIDB4NUZFQiwgMHg1RkVCLCAweDA5NzksIDB4NUZFQywgMHg1RkVDLCAweDMxNEEsCisgICAgMHg1RkVELCAweDVGRUQsIDB4MTY0RiwgMHg1RkVFLCAweDVGRUUsIDB4MTY0NywgMHg1RkVGLCAweDVGRjAsIDB4MzE0QiwKKyAgICAweDVGRjEsIDB4NUZGMSwgMHgwNEU1LCAweDVGRjIsIDB4NUZGNCwgMHgzMTRELCAweDVGRjUsIDB4NUZGNSwgMHgwQjUxLAorICAgIDB4NUZGNiwgMHg1RkY3LCAweDMxNTAsIDB4NUZGOCwgMHg1RkY4LCAweDE2NTAsIDB4NUZGOSwgMHg1RkZBLCAweDMxNTIsCisgICAgMHg1RkZCLCAweDVGRkIsIDB4MEY4RSwgMHg1RkZDLCAweDVGRkMsIDB4MzE1NCwgMHg1RkZELCAweDVGRkQsIDB4MDdBRCwKKyAgICAweDVGRkUsIDB4NUZGRSwgMHgxNjRCLCAweDVGRkYsIDB4NUZGRiwgMHgwNjdCLCAweDYwMDAsIDB4NjAwMCwgMHgwN0M4LAorICAgIDB4NjAwMSwgMHg2MDAxLCAweDBERkYsIDB4NjAwMiwgMHg2MDAyLCAweDBEQzAsIDB4NjAwMywgMHg2MDAzLCAweDE2NDYsCisgICAgMHg2MDA0LCAweDYwMDQsIDB4MTY0OCwgMHg2MDA1LCAweDYwMDYsIDB4MTY0QywgMHg2MDA3LCAweDYwMDksIDB4MzE1NSwKKyAgICAweDYwMEEsIDB4NjAwQSwgMHgxNjU5LCAweDYwMEIsIDB4NjAwQywgMHgzMTU4LCAweDYwMEQsIDB4NjAwRCwgMHgxNjU2LAorICAgIDB4NjAwRSwgMHg2MDBFLCAweDExMzgsIDB4NjAwRiwgMHg2MDBGLCAweDE2NTUsIDB4NjAxMCwgMHg2MDExLCAweDMxNUEsCisgICAgMHg2MDEyLCAweDYwMTIsIDB4MEI2RSwgMHg2MDEzLCAweDYwMTMsIDB4MzE1QywgMHg2MDE0LCAweDYwMTQsIDB4MTE5QiwKKyAgICAweDYwMTUsIDB4NjAxNSwgMHgwQjgzLCAweDYwMTYsIDB4NjAxNiwgMHgwNDg3LCAweDYwMTcsIDB4NjAxOCwgMHgzMTVELAorICAgIDB4NjAxOSwgMHg2MDE5LCAweDE2NTEsIDB4NjAxQSwgMHg2MDFBLCAweDMxNUYsIDB4NjAxQiwgMHg2MDFCLCAweDE2NTQsCisgICAgMHg2MDFDLCAweDYwMUMsIDB4MDlGOCwgMHg2MDFELCAweDYwMUQsIDB4MERCMSwgMHg2MDFFLCAweDYwMUYsIDB4MzE2MCwKKyAgICAweDYwMjAsIDB4NjAyMCwgMHgwNTgyLCAweDYwMjEsIDB4NjAyMSwgMHgxNjVCLCAweDYwMjIsIDB4NjAyNCwgMHgzMTYyLAorICAgIDB4NjAyNSwgMHg2MDI1LCAweDA4MjQsIDB4NjAyNiwgMHg2MDI2LCAweDE2NTMsIDB4NjAyNywgMHg2MDI3LCAweDBGOUYsCisgICAgMHg2MDI4LCAweDYwMjgsIDB4MTBGQywgMHg2MDI5LCAweDYwMjksIDB4MTY1NywgMHg2MDJBLCAweDYwMkEsIDB4MDcyRiwKKyAgICAweDYwMkIsIDB4NjAyQiwgMHgxNjU4LCAweDYwMkMsIDB4NjAyRSwgMHgzMTY1LCAweDYwMkYsIDB4NjAyRiwgMHgwQzUwLAorICAgIDB4NjAzMCwgMHg2MDM0LCAweDMxNjgsIDB4NjAzNSwgMHg2MDM1LCAweDE2NTIsIDB4NjAzNiwgMHg2MDNBLCAweDMxNkQsCisgICAgMHg2MDNCLCAweDYwM0IsIDB4MTIzOSwgMHg2MDNDLCAweDYwM0MsIDB4MUEwRCwgMHg2MDNELCAweDYwM0UsIDB4MzE3MiwKKyAgICAweDYwM0YsIDB4NjAzRiwgMHgxNjVBLCAweDYwNDAsIDB4NjA0MCwgMHgzMTc0LCAweDYwNDEsIDB4NjA0MSwgMHgxQTExLAorICAgIDB4NjA0MiwgMHg2MDQyLCAweDE2NjAsIDB4NjA0MywgMHg2MDQzLCAweDBENjgsIDB4NjA0NCwgMHg2MDRBLCAweDMxNzUsCisgICAgMHg2MDRCLCAweDYwNEIsIDB4MDlGRSwgMHg2MDRDLCAweDYwNEMsIDB4MzE3QywgMHg2MDRELCAweDYwNEQsIDB4MDdFNSwKKyAgICAweDYwNEUsIDB4NjA0RiwgMHgzMTdELCAweDYwNTAsIDB4NjA1MCwgMHgwOTYzLCAweDYwNTEsIDB4NjA1MSwgMHgzMTdGLAorICAgIDB4NjA1MiwgMHg2MDUyLCAweDA3OUEsIDB4NjA1MywgMHg2MDU0LCAweDMxODAsIDB4NjA1NSwgMHg2MDU1LCAweDBEOTYsCisgICAgMHg2MDU2LCAweDYwNTgsIDB4MzE4MiwgMHg2MDU5LCAweDYwNTksIDB4MUExMiwgMHg2MDVBLCAweDYwNUEsIDB4MUEwRiwKKyAgICAweDYwNUIsIDB4NjA1QywgMHgzMTg1LCAweDYwNUQsIDB4NjA1RCwgMHgxQTBFLCAweDYwNUUsIDB4NjA2MSwgMHgzMTg3LAorICAgIDB4NjA2MiwgMHg2MDYyLCAweDA3RUIsIDB4NjA2MywgMHg2MDYzLCAweDFBMTMsIDB4NjA2NCwgMHg2MDY0LCAweDBGQkYsCisgICAgMHg2MDY1LCAweDYwNjYsIDB4MzE4QiwgMHg2MDY3LCAweDYwNjcsIDB4MUExMCwgMHg2MDY4LCAweDYwNjgsIDB4MDc5NSwKKyAgICAweDYwNjksIDB4NjA2OSwgMHgwNjM2LCAweDYwNkEsIDB4NjA2QSwgMHgxNjYxLCAweDYwNkIsIDB4NjA2QiwgMHgwNUYxLAorICAgIDB4NjA2QywgMHg2MDZDLCAweDBFNDQsIDB4NjA2RCwgMHg2MDZELCAweDA3MDAsIDB4NjA2RSwgMHg2MDZFLCAweDMxOEQsCisgICAgMHg2MDZGLCAweDYwNkYsIDB4MEYwRiwgMHg2MDcwLCAweDYwNzAsIDB4MEMxRSwgMHg2MDcxLCAweDYwNzIsIDB4MzE4RSwKKyAgICAweDYwNzMsIDB4NjA3MywgMHgwOTVGLCAweDYwNzQsIDB4NjA3NSwgMHgzMTkwLCAweDYwNzYsIDB4NjA3NiwgMHgwNjMwLAorICAgIDB4NjA3NywgMHg2MDc3LCAweDMxOTIsIDB4NjA3OCwgMHg2MDc5LCAweDE2NUMsIDB4NjA3QSwgMHg2MDdBLCAweDE2NUYsCisgICAgMHg2MDdCLCAweDYwN0IsIDB4MTY1RSwgMHg2MDdDLCAweDYwN0MsIDB4MEIzOCwgMHg2MDdELCAweDYwN0QsIDB4MTY2MiwKKyAgICAweDYwN0UsIDB4NjA3RSwgMHgzMTkzLCAweDYwN0YsIDB4NjA3RiwgMHgxMEE2LCAweDYwODAsIDB4NjA4MiwgMHgzMTk0LAorICAgIDB4NjA4MywgMHg2MDgzLCAweDE2NjcsIDB4NjA4NCwgMHg2MDg0LCAweDBDNDEsIDB4NjA4NSwgMHg2MDg4LCAweDMxOTcsCisgICAgMHg2MDg5LCAweDYwODksIDB4MEYxMSwgMHg2MDhBLCAweDYwOEIsIDB4MzE5QiwgMHg2MDhDLCAweDYwOEMsIDB4MTY2OSwKKyAgICAweDYwOEQsIDB4NjA4RCwgMHgwNzZFLCAweDYwOEUsIDB4NjA5MSwgMHgzMTlELCAweDYwOTIsIDB4NjA5MiwgMHgxNjY4LAorICAgIDB4NjA5MywgMHg2MDkzLCAweDMxQTEsIDB4NjA5NCwgMHg2MDk0LCAweDA3RUYsIDB4NjA5NSwgMHg2MDk1LCAweDMxQTIsCisgICAgMHg2MDk2LCAweDYwOTYsIDB4MTY2MywgMHg2MDk3LCAweDYwOTksIDB4MzFBMywgMHg2MDlBLCAweDYwOUEsIDB4MTY2NCwKKyAgICAweDYwOUIsIDB4NjA5QiwgMHgxNjZBLCAweDYwOUMsIDB4NjA5QywgMHgzMUE2LCAweDYwOUQsIDB4NjA5RCwgMHgxNjY2LAorICAgIDB4NjA5RSwgMHg2MDlFLCAweDMxQTcsIDB4NjA5RiwgMHg2MDlGLCAweDBGMDEsIDB4NjBBMCwgMHg2MEEwLCAweDEwQUIsCisgICAgMHg2MEExLCAweDYwQTIsIDB4MzFBOCwgMHg2MEEzLCAweDYwQTMsIDB4MDdEMSwgMHg2MEE0LCAweDYwQTUsIDB4MzFBQSwKKyAgICAweDYwQTYsIDB4NjBBNiwgMHgxMTA2LCAweDYwQTcsIDB4NjBBNywgMHgzMUFDLCAweDYwQTgsIDB4NjBBOCwgMHgwQjVELAorICAgIDB4NjBBOSwgMHg2MEFBLCAweDMxQUQsIDB4NjBBQiwgMHg2MEFCLCAweDFBMTQsIDB4NjBBQywgMHg2MEFDLCAweDBGQzcsCisgICAgMHg2MEFELCAweDYwQUQsIDB4MTY2NSwgMHg2MEFFLCAweDYwQUUsIDB4MzFBRiwgMHg2MEFGLCAweDYwQUYsIDB4MEFGQSwKKyAgICAweDYwQjAsIDB4NjBCMCwgMHgzMUIwLCAweDYwQjEsIDB4NjBCMSwgMHgxNjZELCAweDYwQjIsIDB4NjBCMiwgMHgwNDE4LAorICAgIDB4NjBCMywgMHg2MEIzLCAweDMxQjEsIDB4NjBCNCwgMHg2MEI0LCAweDE2NzIsIDB4NjBCNSwgMHg2MEI1LCAweDIzQjQsCisgICAgMHg2MEI2LCAweDYwQjYsIDB4MjA3RSwgMHg2MEI3LCAweDYwQjcsIDB4MzFCMiwgMHg2MEI4LCAweDYwQjgsIDB4MDgzNSwKKyAgICAweDYwQjksIDB4NjBCQSwgMHgzMUIzLCAweDYwQkIsIDB4NjBCQiwgMHgxNjZDLCAweDYwQkMsIDB4NjBCQywgMHgwNUEwLAorICAgIDB4NjBCRCwgMHg2MEM0LCAweDMxQjUsIDB4NjBDNSwgMHg2MEM1LCAweDBDNjYsIDB4NjBDNiwgMHg2MEM2LCAweDE2NzAsCisgICAgMHg2MEM3LCAweDYwQzksIDB4MzFCRCwgMHg2MENBLCAweDYwQ0EsIDB4MDhEOSwgMHg2MENCLCAweDYwQ0IsIDB4MEVBMCwKKyAgICAweDYwQ0MsIDB4NjBEMCwgMHgzMUMwLCAweDYwRDEsIDB4NjBEMSwgMHgwODA4LCAweDYwRDIsIDB4NjBENCwgMHgzMUM1LAorICAgIDB4NjBENSwgMHg2MEQ1LCAweDBFM0IsIDB4NjBENiwgMHg2MEQ3LCAweDMxQzgsIDB4NjBEOCwgMHg2MEQ4LCAweDE2NkYsCisgICAgMHg2MEQ5LCAweDYwRDksIDB4MzFDQSwgMHg2MERBLCAweDYwREEsIDB4MTY3MSwgMHg2MERCLCAweDYwREIsIDB4MzFDQiwKKyAgICAweDYwREMsIDB4NjBEQywgMHgwRjE0LCAweDYwREQsIDB4NjBERCwgMHgxNjZFLCAweDYwREUsIDB4NjBERSwgMHgzMUNDLAorICAgIDB4NjBERiwgMHg2MERGLCAweDBFQjgsIDB4NjBFMCwgMHg2MEUwLCAweDA3RjIsIDB4NjBFMSwgMHg2MEUxLCAweDFFRTMsCisgICAgMHg2MEUyLCAweDYwRTUsIDB4MzFDRCwgMHg2MEU2LCAweDYwRTYsIDB4MDVDQywgMHg2MEU3LCAweDYwRTcsIDB4MDkxNCwKKyAgICAweDYwRTgsIDB4NjBFOCwgMHgwNDk5LCAweDYwRTksIDB4NjBFOSwgMHgwNEYyLCAweDYwRUEsIDB4NjBFQSwgMHgzMUQxLAorICAgIDB4NjBFQiwgMHg2MEVCLCAweDA0MjIsIDB4NjBFQywgMHg2MEVDLCAweDE2NkIsIDB4NjBFRCwgMHg2MEVELCAweDA0OTgsCisgICAgMHg2MEVFLCAweDYwRUUsIDB4MDU4RCwgMHg2MEVGLCAweDYwRUYsIDB4MDczOCwgMHg2MEYwLCAweDYwRjAsIDB4MDYyNywKKyAgICAweDYwRjEsIDB4NjBGMSwgMHgyMDk1LCAweDYwRjIsIDB4NjBGMiwgMHgyM0JCLCAweDYwRjMsIDB4NjBGMywgMHgwRjU4LAorICAgIDB4NjBGNCwgMHg2MEY0LCAweDE2NzcsIDB4NjBGNSwgMHg2MEY1LCAweDMxRDIsIDB4NjBGNiwgMHg2MEY2LCAweDA3RTEsCisgICAgMHg2MEY3LCAweDYwRjgsIDB4MzFEMywgMHg2MEY5LCAweDYwRjksIDB4MENBMiwgMHg2MEZBLCAweDYwRkEsIDB4MEY5NSwKKyAgICAweDYwRkIsIDB4NjBGQiwgMHgyM0I5LCAweDYwRkMsIDB4NjBGRiwgMHgzMUQ1LCAweDYxMDAsIDB4NjEwMCwgMHgxNjc4LAorICAgIDB4NjEwMSwgMHg2MTAxLCAweDA1MTMsIDB4NjEwMiwgMHg2MTA1LCAweDMxRDksIDB4NjEwNiwgMHg2MTA2LCAweDFBMTUsCisgICAgMHg2MTA3LCAweDYxMDcsIDB4MzFERCwgMHg2MTA4LCAweDYxMDgsIDB4MTBERiwgMHg2MTA5LCAweDYxMDksIDB4MTBDOSwKKyAgICAweDYxMEEsIDB4NjEwQywgMHgzMURFLCAweDYxMEQsIDB4NjEwRCwgMHgxQTE2LCAweDYxMEUsIDB4NjEwRSwgMHgxNjc5LAorICAgIDB4NjEwRiwgMHg2MTBGLCAweDEwNjksIDB4NjExMCwgMHg2MTE0LCAweDMxRTEsIDB4NjExNSwgMHg2MTE1LCAweDE2NzUsCisgICAgMHg2MTE2LCAweDYxMTksIDB4MzFFNiwgMHg2MTFBLCAweDYxMUEsIDB4MTBDMywgMHg2MTFCLCAweDYxMUIsIDB4MUUyOCwKKyAgICAweDYxMUMsIDB4NjExQywgMHgyM0JELCAweDYxMUQsIDB4NjExRSwgMHgzMUVBLCAweDYxMUYsIDB4NjExRiwgMHgwNkNCLAorICAgIDB4NjEyMCwgMHg2MTIwLCAweDE2NzMsIDB4NjEyMSwgMHg2MTIyLCAweDMxRUMsIDB4NjEyMywgMHg2MTIzLCAweDE2NzYsCisgICAgMHg2MTI0LCAweDYxMjQsIDB4MDY3QywgMHg2MTI1LCAweDYxMjUsIDB4MzFFRSwgMHg2MTI2LCAweDYxMjYsIDB4MTY3NCwKKyAgICAweDYxMjcsIDB4NjEyNywgMHgwOThELCAweDYxMjgsIDB4NjEyQSwgMHgzMUVGLCAweDYxMkIsIDB4NjEyQiwgMHgxNjdBLAorICAgIDB4NjEyQywgMHg2MTMzLCAweDMxRjIsIDB4NjEzNCwgMHg2MTM0LCAweDIzQjUsIDB4NjEzNSwgMHg2MTM2LCAweDMxRkEsCisgICAgMHg2MTM3LCAweDYxMzcsIDB4MjNCQSwgMHg2MTM4LCAweDYxM0QsIDB4MzFGQywgMHg2MTNFLCAweDYxM0UsIDB4MjNCMywKKyAgICAweDYxM0YsIDB4NjEzRiwgMHgxMEZCLCAweDYxNDAsIDB4NjE0NywgMHgzMjAyLCAweDYxNDgsIDB4NjE0OCwgMHgwNTRCLAorICAgIDB4NjE0OSwgMHg2MTQ5LCAweDMyMEEsIDB4NjE0QSwgMHg2MTRBLCAweDE2N0IsIDB4NjE0QiwgMHg2MTRCLCAweDIxNjIsCisgICAgMHg2MTRDLCAweDYxNEMsIDB4MDdEQSwgMHg2MTRELCAweDYxNEQsIDB4MzIwQiwgMHg2MTRFLCAweDYxNEUsIDB4MEQzMCwKKyAgICAweDYxNEYsIDB4NjE1MCwgMHgzMjBDLCAweDYxNTEsIDB4NjE1MSwgMHgwRDFFLCAweDYxNTIsIDB4NjE1NCwgMHgzMjBFLAorICAgIDB4NjE1NSwgMHg2MTU1LCAweDBCMjAsIDB4NjE1NiwgMHg2MTU3LCAweDMyMTEsIDB4NjE1OCwgMHg2MTU4LCAweDFFNUUsCisgICAgMHg2MTU5LCAweDYxNTksIDB4MzIxMywgMHg2MTVBLCAweDYxNUEsIDB4MUU1RCwgMHg2MTVCLCAweDYxNUMsIDB4MzIxNCwKKyAgICAweDYxNUQsIDB4NjE1RCwgMHgxQTE3LCAweDYxNUUsIDB4NjE1RSwgMHgzMjE2LCAweDYxNUYsIDB4NjE1RiwgMHgyM0I3LAorICAgIDB4NjE2MCwgMHg2MTYxLCAweDMyMTcsIDB4NjE2MiwgMHg2MTYyLCAweDBBQTQsIDB4NjE2MywgMHg2MTYzLCAweDFGMkYsCisgICAgMHg2MTY0LCAweDYxNjQsIDB4MjRERiwgMHg2MTY1LCAweDYxNjYsIDB4MzIxOSwgMHg2MTY3LCAweDYxNjcsIDB4MDdGMCwKKyAgICAweDYxNjgsIDB4NjE2OCwgMHgwOTNCLCAweDYxNjksIDB4NjE2OSwgMHgzMjFCLCAweDYxNkEsIDB4NjE2QSwgMHgyM0IyLAorICAgIDB4NjE2QiwgMHg2MTZCLCAweDIxNEUsIDB4NjE2QywgMHg2MTZELCAweDMyMUMsIDB4NjE2RSwgMHg2MTZFLCAweDIwNTIsCisgICAgMHg2MTZGLCAweDYxNkYsIDB4MzIxRSwgMHg2MTcwLCAweDYxNzAsIDB4MEVDRSwgMHg2MTcxLCAweDYxNzIsIDB4MzIxRiwKKyAgICAweDYxNzMsIDB4NjE3MywgMHgyM0JDLCAweDYxNzQsIDB4NjE3NCwgMHgzMjIxLCAweDYxNzUsIDB4NjE3NSwgMHgxNjdDLAorICAgIDB4NjE3NiwgMHg2MTc2LCAweDIwRUIsIDB4NjE3NywgMHg2MTc3LCAweDA5NDMsIDB4NjE3OCwgMHg2MTgxLCAweDMyMjIsCisgICAgMHg2MTgyLCAweDYxODIsIDB4MjIzMiwgMHg2MTgzLCAweDYxODksIDB4MzIyQywgMHg2MThBLCAweDYxOEEsIDB4MUUzRiwKKyAgICAweDYxOEIsIDB4NjE4QiwgMHgwNDU4LCAweDYxOEMsIDB4NjE4RCwgMHgzMjMzLCAweDYxOEUsIDB4NjE4RSwgMHgxMTNBLAorICAgIDB4NjE4RiwgMHg2MThGLCAweDMyMzUsIDB4NjE5MCwgMHg2MTkwLCAweDIwMUIsIDB4NjE5MSwgMHg2MTkxLCAweDIwQkMsCisgICAgMHg2MTkyLCAweDYxOTIsIDB4MjNCRSwgMHg2MTkzLCAweDYxOTMsIDB4MzIzNiwgMHg2MTk0LCAweDYxOTQsIDB4MTY3RSwKKyAgICAweDYxOTUsIDB4NjE5OSwgMHgzMjM3LCAweDYxOUEsIDB4NjE5QSwgMHgxRUFFLCAweDYxOUIsIDB4NjE5QywgMHgzMjNDLAorICAgIDB4NjE5RCwgMHg2MTlELCAweDFBMTksIDB4NjE5RSwgMHg2MUEzLCAweDMyM0UsIDB4NjFBNCwgMHg2MUE0LCAweDFFRkIsCisgICAgMHg2MUE1LCAweDYxQTYsIDB4MzI0NCwgMHg2MUE3LCAweDYxQTcsIDB4MTY3RiwgMHg2MUE4LCAweDYxQTgsIDB4MDc2MCwKKyAgICAweDYxQTksIDB4NjFBOSwgMHgxQTE4LCAweDYxQUEsIDB4NjFBQSwgMHgzMjQ2LCAweDYxQUIsIDB4NjFBQiwgMHgyMDg5LAorICAgIDB4NjFBQywgMHg2MUFDLCAweDE2N0QsIDB4NjFBRCwgMHg2MUFELCAweDMyNDcsIDB4NjFBRSwgMHg2MUFFLCAweDIzQjEsCisgICAgMHg2MUFGLCAweDYxQjEsIDB4MzI0OCwgMHg2MUIyLCAweDYxQjIsIDB4MjFDNCwgMHg2MUIzLCAweDYxQjUsIDB4MzI0QiwKKyAgICAweDYxQjYsIDB4NjFCNiwgMHgyMjE0LCAweDYxQjcsIDB4NjFCNywgMHgxNjgwLCAweDYxQjgsIDB4NjFCRCwgMHgzMjRFLAorICAgIDB4NjFCRSwgMHg2MUJFLCAweDA3NkQsIDB4NjFCRiwgMHg2MUMxLCAweDMyNTQsIDB4NjFDMiwgMHg2MUMyLCAweDA1RUQsCisgICAgMHg2MUMzLCAweDYxQzYsIDB4MzI1NywgMHg2MUM3LCAweDYxQzcsIDB4MUZERSwgMHg2MUM4LCAweDYxQzgsIDB4MEY4MywKKyAgICAweDYxQzksIDB4NjFDOSwgMHgyMjIzLCAweDYxQ0EsIDB4NjFDQSwgMHgwM0NFLCAweDYxQ0IsIDB4NjFDQiwgMHgxQTFBLAorICAgIDB4NjFDQywgMHg2MUNDLCAweDIzQjYsIDB4NjFDRCwgMHg2MUQwLCAweDMyNUIsIDB4NjFEMSwgMHg2MUQxLCAweDFBMUIsCisgICAgMHg2MUQyLCAweDYxRDIsIDB4MDlBQywgMHg2MUQzLCAweDYxRDMsIDB4MzI1RiwgMHg2MUQ0LCAweDYxRDQsIDB4MTY4MSwKKyAgICAweDYxRDUsIDB4NjFERCwgMHgzMjYwLCAweDYxREUsIDB4NjFERSwgMHgyNjhDLCAweDYxREYsIDB4NjFERiwgMHgyNERFLAorICAgIDB4NjFFMCwgMHg2MUUyLCAweDMyNjksIDB4NjFFMywgMHg2MUUzLCAweDI0RTAsIDB4NjFFNCwgMHg2MUU1LCAweDMyNkMsCisgICAgMHg2MUU2LCAweDYxRTYsIDB4MEI3NCwgMHg2MUU3LCAweDYxRTcsIDB4MzI2RSwgMHg2MUU4LCAweDYxRTgsIDB4MjNCOCwKKyAgICAweDYxRTksIDB4NjFGMSwgMHgzMjZGLCAweDYxRjIsIDB4NjFGMiwgMHgxRTgxLCAweDYxRjMsIDB4NjFGNCwgMHgzMjc4LAorICAgIDB4NjFGNSwgMHg2MUY1LCAweDE2ODIsIDB4NjFGNiwgMHg2MUY2LCAweDFGRkUsIDB4NjFGNywgMHg2MUY3LCAweDFGNTEsCisgICAgMHg2MUY4LCAweDYxRjgsIDB4MjFFMSwgMHg2MUY5LCAweDYxRjksIDB4MzI3QSwgMHg2MUZBLCAweDYxRkEsIDB4MjNCMCwKKyAgICAweDYxRkIsIDB4NjFGQiwgMHgzMjdCLCAweDYxRkMsIDB4NjFGQywgMHgxRkNFLCAweDYxRkQsIDB4NjFGRCwgMHgzMjdDLAorICAgIDB4NjFGRSwgMHg2MUZFLCAweDIxMUUsIDB4NjFGRiwgMHg2MUZGLCAweDEzRTAsIDB4NjIwMCwgMHg2MjAwLCAweDIwMjEsCisgICAgMHg2MjAxLCAweDYyMDUsIDB4MzI3RCwgMHg2MjA2LCAweDYyMDYsIDB4MUExQywgMHg2MjA3LCAweDYyMDcsIDB4MjRFMSwKKyAgICAweDYyMDgsIDB4NjIwOCwgMHgwNkU1LCAweDYyMDksIDB4NjIwOSwgMHgzMjgyLCAweDYyMEEsIDB4NjIwQSwgMHgwRUZCLAorICAgIDB4NjIwQiwgMHg2MjBCLCAweDE4RjksIDB4NjIwQywgMHg2MjBDLCAweDBGQjIsIDB4NjIwRCwgMHg2MjBELCAweDBEOTAsCisgICAgMHg2MjBFLCAweDYyMEUsIDB4MENCMSwgMHg2MjBGLCAweDYyMEYsIDB4MEYyNCwgMHg2MjEwLCAweDYyMTAsIDB4MDRFRSwKKyAgICAweDYyMTEsIDB4NjIxMSwgMHgwRUUxLCAweDYyMTIsIDB4NjIxMiwgMHgwOEI1LCAweDYyMTMsIDB4NjIxMywgMHgzMjgzLAorICAgIDB4NjIxNCwgMHg2MjE0LCAweDI0QTMsIDB4NjIxNSwgMHg2MjE1LCAweDE2OUUsIDB4NjIxNiwgMHg2MjE2LCAweDA4MDcsCisgICAgMHg2MjE3LCAweDYyMTcsIDB4MThGQSwgMHg2MjE4LCAweDYyMTgsIDB4MTE1RSwgMHg2MjE5LCAweDYyMTksIDB4MzI4NCwKKyAgICAweDYyMUEsIDB4NjIxQSwgMHgwQkZDLCAweDYyMUIsIDB4NjIxQiwgMHgxOEZCLCAweDYyMUMsIDB4NjIxRSwgMHgzMjg1LAorICAgIDB4NjIxRiwgMHg2MjFGLCAweDE4RkMsIDB4NjIyMCwgMHg2MjIwLCAweDMyODgsIDB4NjIyMSwgMHg2MjIxLCAweDE4RkUsCisgICAgMHg2MjIyLCAweDYyMjIsIDB4MThGRCwgMHg2MjIzLCAweDYyMjMsIDB4MzI4OSwgMHg2MjI0LCAweDYyMjQsIDB4MTkwMCwKKyAgICAweDYyMjUsIDB4NjIyNSwgMHgxOEZGLCAweDYyMjYsIDB4NjIyNiwgMHgzMjhBLCAweDYyMjcsIDB4NjIyNywgMHgyNEE0LAorICAgIDB4NjIyOCwgMHg2MjI5LCAweDMyOEIsIDB4NjIyQSwgMHg2MjJBLCAweDA4QTksIDB4NjIyQiwgMHg2MjJCLCAweDMyOEQsCisgICAgMHg2MjJDLCAweDYyMkMsIDB4MTkwMSwgMHg2MjJELCAweDYyMkQsIDB4MzI4RSwgMHg2MjJFLCAweDYyMkUsIDB4MEE2NSwKKyAgICAweDYyMkYsIDB4NjIyRiwgMHgzMjhGLCAweDYyMzAsIDB4NjIzMCwgMHgyMjczLCAweDYyMzEsIDB4NjIzMSwgMHgzMjkwLAorICAgIDB4NjIzMiwgMHg2MjMyLCAweDIxQjAsIDB4NjIzMywgMHg2MjMzLCAweDA1NDQsIDB4NjIzNCwgMHg2MjM0LCAweDA1N0EsCisgICAgMHg2MjM1LCAweDYyMzYsIDB4MzI5MSwgMHg2MjM3LCAweDYyMzcsIDB4MDdCQywgMHg2MjM4LCAweDYyM0MsIDB4MzI5MywKKyAgICAweDYyM0QsIDB4NjIzRCwgMHgxOUY0LCAweDYyM0UsIDB4NjIzRSwgMHgxOUYzLCAweDYyM0YsIDB4NjIzRiwgMHgwNjVDLAorICAgIDB4NjI0MCwgMHg2MjQwLCAweDBERUUsIDB4NjI0MSwgMHg2MjQxLCAweDA0NEIsIDB4NjI0MiwgMHg2MjQyLCAweDMyOTgsCisgICAgMHg2MjQzLCAweDYyNDMsIDB4MTlGNSwgMHg2MjQ0LCAweDYyNDYsIDB4MzI5OSwgMHg2MjQ3LCAweDYyNDcsIDB4MEQwMSwKKyAgICAweDYyNDgsIDB4NjI0OSwgMHgxOUY2LCAweDYyNEEsIDB4NjI0QSwgMHgzMjlDLCAweDYyNEIsIDB4NjI0QiwgMHgwRDZELAorICAgIDB4NjI0QywgMHg2MjRDLCAweDE0QkEsIDB4NjI0RCwgMHg2MjRELCAweDA0OEMsIDB4NjI0RSwgMHg2MjRFLCAweDExM0QsCisgICAgMHg2MjRGLCAweDYyNTAsIDB4MzI5RCwgMHg2MjUxLCAweDYyNTEsIDB4MEJFQSwgMHg2MjUyLCAweDYyNTIsIDB4MDNEMiwKKyAgICAweDYyNTMsIDB4NjI1MywgMHgwNTc1LCAweDYyNTQsIDB4NjI1NCwgMHgwQ0FFLCAweDYyNTUsIDB4NjI1NywgMHgzMjlGLAorICAgIDB4NjI1OCwgMHg2MjU4LCAweDBFODEsIDB4NjI1OSwgMHg2MjVBLCAweDMyQTIsIDB4NjI1QiwgMHg2MjVCLCAweDA5NDUsCisgICAgMHg2MjVDLCAweDYyNjIsIDB4MzJBNCwgMHg2MjYzLCAweDYyNjMsIDB4MDk2OCwgMHg2MjY0LCAweDYyNjUsIDB4MzJBQiwKKyAgICAweDYyNjYsIDB4NjI2NiwgMHgwQzIxLCAweDYyNjcsIDB4NjI2NywgMHgxMUIzLCAweDYyNjgsIDB4NjI2OCwgMHgzMkFELAorICAgIDB4NjI2OSwgMHg2MjY5LCAweDA5OTQsIDB4NjI2QSwgMHg2MjZBLCAweDE0QkIsIDB4NjI2QiwgMHg2MjZCLCAweDBDRTEsCisgICAgMHg2MjZDLCAweDYyNkMsIDB4MTAxOCwgMHg2MjZELCAweDYyNkQsIDB4MEI2NSwgMHg2MjZFLCAweDYyNkUsIDB4MDNGMiwKKyAgICAweDYyNkYsIDB4NjI2RiwgMHgwNERCLCAweDYyNzAsIDB4NjI3MCwgMHgwQ0EwLCAweDYyNzEsIDB4NjI3MiwgMHgzMkFFLAorICAgIDB4NjI3MywgMHg2MjczLCAweDAzRUQsIDB4NjI3NCwgMHg2Mjc1LCAweDMyQjAsIDB4NjI3NiwgMHg2Mjc2LCAweDA2OTMsCisgICAgMHg2Mjc3LCAweDYyNzgsIDB4MzJCMiwgMHg2Mjc5LCAweDYyNzksIDB4MEJCQiwgMHg2MjdBLCAweDYyN0IsIDB4MzJCNCwKKyAgICAweDYyN0MsIDB4NjI3QywgMHgwNjMyLCAweDYyN0QsIDB4NjI3RCwgMHgzMkI2LCAweDYyN0UsIDB4NjI3RSwgMHgxMTczLAorICAgIDB4NjI3RiwgMHg2MjdGLCAweDA0RjUsIDB4NjI4MCwgMHg2MjgwLCAweDA4MkYsIDB4NjI4MSwgMHg2MjgzLCAweDMyQjcsCisgICAgMHg2Mjg0LCAweDYyODQsIDB4MDREMiwgMHg2Mjg1LCAweDYyODgsIDB4MzJCQSwgMHg2Mjg5LCAweDYyODksIDB4MDkyMCwKKyAgICAweDYyOEEsIDB4NjI4QSwgMHgwM0RDLCAweDYyOEIsIDB4NjI5MCwgMHgzMkJFLCAweDYyOTEsIDB4NjI5MSwgMHgxMDVELAorICAgIDB4NjI5MiwgMHg2MjkyLCAweDBEN0EsIDB4NjI5MywgMHg2MjkzLCAweDEyMDIsIDB4NjI5NCwgMHg2Mjk0LCAweDMyQzQsCisgICAgMHg2Mjk1LCAweDYyOTUsIDB4MEU2NywgMHg2Mjk2LCAweDYyOTYsIDB4MDVGNSwgMHg2Mjk3LCAweDYyOTcsIDB4MDk0NiwKKyAgICAweDYyOTgsIDB4NjI5OCwgMHgxMTdDLCAweDYyOTksIDB4NjI5OSwgMHgzMkM1LCAweDYyOUEsIDB4NjI5QSwgMHgwNkEyLAorICAgIDB4NjI5QiwgMHg2MjlCLCAweDBCOTgsIDB4NjI5QywgMHg2MjlFLCAweDMyQzYsIDB4NjI5RiwgMHg2MjlGLCAweDE0QkMsCisgICAgMHg2MkEwLCAweDYyQTAsIDB4MDk2NiwgMHg2MkExLCAweDYyQTEsIDB4MEE3QywgMHg2MkEyLCAweDYyQTIsIDB4MEMzRCwKKyAgICAweDYyQTMsIDB4NjJBMywgMHgzMkM5LCAweDYyQTQsIDB4NjJBNCwgMHgwN0I5LCAweDYyQTUsIDB4NjJBNSwgMHgwNDExLAorICAgIDB4NjJBNiwgMHg2MkE3LCAweDMyQ0EsIDB4NjJBOCwgMHg2MkE4LCAweDBCQUIsIDB4NjJBOSwgMHg2MkFBLCAweDMyQ0MsCisgICAgMHg2MkFCLCAweDYyQUIsIDB4MEJCQywgMHg2MkFDLCAweDYyQUMsIDB4MERGQSwgMHg2MkFELCAweDYyQjAsIDB4MzJDRSwKKyAgICAweDYyQjEsIDB4NjJCMSwgMHgwNDEwLCAweDYyQjIsIDB4NjJCNCwgMHgzMkQyLCAweDYyQjUsIDB4NjJCNSwgMHgwNUI3LAorICAgIDB4NjJCNiwgMHg2MkI4LCAweDMyRDUsIDB4NjJCOSwgMHg2MkI5LCAweDBCMEIsIDB4NjJCQSwgMHg2MkJBLCAweDMyRDgsCisgICAgMHg2MkJCLCAweDYyQkIsIDB4MTRCRCwgMHg2MkJDLCAweDYyQkMsIDB4MEZFMywgMHg2MkJELCAweDYyQkQsIDB4MDUwRSwKKyAgICAweDYyQkUsIDB4NjJCRSwgMHgzMkQ5LCAweDYyQkYsIDB4NjJCRiwgMHgwQUY3LCAweDYyQzAsIDB4NjJDMSwgMHgzMkRBLAorICAgIDB4NjJDMiwgMHg2MkMyLCAweDA2OTQsIDB4NjJDMywgMHg2MkMzLCAweDMyREMsIDB4NjJDNCwgMHg2MkM0LCAweDExRjMsCisgICAgMHg2MkM1LCAweDYyQzUsIDB4MDU4NCwgMHg2MkM2LCAweDYyQzYsIDB4MDRCNywgMHg2MkM3LCAweDYyQzcsIDB4MEIxNywKKyAgICAweDYyQzgsIDB4NjJDOCwgMHgwQjRDLCAweDYyQzksIDB4NjJDOSwgMHgwOTk4LCAweDYyQ0EsIDB4NjJDQSwgMHgxNEJFLAorICAgIDB4NjJDQiwgMHg2MkNCLCAweDMyREQsIDB4NjJDQywgMHg2MkNDLCAweDAzRjMsIDB4NjJDRCwgMHg2MkNELCAweDBCODUsCisgICAgMHg2MkNFLCAweDYyQ0UsIDB4MEEyOSwgMHg2MkNGLCAweDYyQ0YsIDB4MzJERSwgMHg2MkQwLCAweDYyRDAsIDB4MDcyRSwKKyAgICAweDYyRDEsIDB4NjJEMSwgMHgzMkRGLCAweDYyRDIsIDB4NjJEMiwgMHgwOTBCLCAweDYyRDMsIDB4NjJEMywgMHgwRTg5LAorICAgIDB4NjJENCwgMHg2MkQ0LCAweDAzRDksIDB4NjJENSwgMHg2MkQ1LCAweDMyRTAsIDB4NjJENiwgMHg2MkQ2LCAweDBFODAsCisgICAgMHg2MkQ3LCAweDYyRDcsIDB4MTRDMCwgMHg2MkQ4LCAweDYyRDgsIDB4MDhGRiwgMHg2MkQ5LCAweDYyRDksIDB4MTIxQiwKKyAgICAweDYyREEsIDB4NjJEQSwgMHgxNEJGLCAweDYyREIsIDB4NjJEQiwgMHgxMTcxLCAweDYyREMsIDB4NjJEQywgMHgwM0U4LAorICAgIDB4NjJERCwgMHg2MkRFLCAweDMyRTEsIDB4NjJERiwgMHg2MkRGLCAweDBCNDUsIDB4NjJFMCwgMHg2MkUxLCAweDMyRTMsCisgICAgMHg2MkUyLCAweDYyRTIsIDB4MEE0QSwgMHg2MkUzLCAweDYyRTMsIDB4MDg2MywgMHg2MkU0LCAweDYyRTQsIDB4MzJFNSwKKyAgICAweDYyRTUsIDB4NjJFNSwgMHgxMDlBLCAweDYyRTYsIDB4NjJFNiwgMHgwOUE0LCAweDYyRTcsIDB4NjJFNywgMHgwQjYyLAorICAgIDB4NjJFOCwgMHg2MkU4LCAweDA0NkQsIDB4NjJFOSwgMHg2MkU5LCAweDExMzQsIDB4NjJFQSwgMHg2MkVCLCAweDMyRTYsCisgICAgMHg2MkVDLCAweDYyRUMsIDB4MDk5MywgMHg2MkVELCAweDYyRUQsIDB4MEQ1QSwgMHg2MkVFLCAweDYyRUUsIDB4MTRDMSwKKyAgICAweDYyRUYsIDB4NjJFRiwgMHgxMTlELCAweDYyRjAsIDB4NjJGMCwgMHgzMkU4LCAweDYyRjEsIDB4NjJGMSwgMHgwNzA5LAorICAgIDB4NjJGMiwgMHg2MkYyLCAweDMyRTksIDB4NjJGMywgMHg2MkYzLCAweDBDODgsIDB4NjJGNCwgMHg2MkY0LCAweDBEOUUsCisgICAgMHg2MkY1LCAweDYyRjUsIDB4MzJFQSwgMHg2MkY2LCAweDYyRjYsIDB4MTRDMywgMHg2MkY3LCAweDYyRjcsIDB4MDk0QSwKKyAgICAweDYyRjgsIDB4NjJGQiwgMHgzMkVCLCAweDYyRkMsIDB4NjJGQywgMHgwQkQzLCAweDYyRkQsIDB4NjJGRCwgMHgxMjA0LAorICAgIDB4NjJGRSwgMHg2MkZFLCAweDBENDcsIDB4NjJGRiwgMHg2MkZGLCAweDBCMjYsIDB4NjMwMCwgMHg2MzAwLCAweDMyRUYsCisgICAgMHg2MzAxLCAweDYzMDEsIDB4MDRGQiwgMHg2MzAyLCAweDYzMDIsIDB4MDcyQiwgMHg2MzAzLCAweDYzMDYsIDB4MzJGMCwKKyAgICAweDYzMDcsIDB4NjMwNywgMHgxMUI3LCAweDYzMDgsIDB4NjMwOCwgMHgxOTRFLCAweDYzMDksIDB4NjMwOSwgMHgwM0JGLAorICAgIDB4NjMwQSwgMHg2MzBELCAweDMyRjQsIDB4NjMwRSwgMHg2MzBFLCAweDA5NzMsIDB4NjMwRiwgMHg2MzEwLCAweDMyRjgsCisgICAgMHg2MzExLCAweDYzMTEsIDB4MEU0NywgMHg2MzEyLCAweDYzMTUsIDB4MzJGQSwgMHg2MzE2LCAweDYzMTYsIDB4MEU4QiwKKyAgICAweDYzMTcsIDB4NjMxOSwgMHgzMkZFLCAweDYzMUEsIDB4NjMxQSwgMHgxMUJFLCAweDYzMUIsIDB4NjMxQiwgMHgwQTc1LAorICAgIDB4NjMxQywgMHg2MzFDLCAweDMzMDEsIDB4NjMxRCwgMHg2MzFELCAweDBFREQsIDB4NjMxRSwgMHg2MzFFLCAweDBERjUsCisgICAgMHg2MzFGLCAweDYzMUYsIDB4MEY3OSwgMHg2MzIwLCAweDYzMjAsIDB4MEIzNiwgMHg2MzIxLCAweDYzMjEsIDB4MDU5MywKKyAgICAweDYzMjIsIDB4NjMyMiwgMHgxNEMyLCAweDYzMjMsIDB4NjMyMywgMHgxMTk2LCAweDYzMjQsIDB4NjMyNCwgMHgwODJBLAorICAgIDB4NjMyNSwgMHg2MzI1LCAweDA3RTgsIDB4NjMyNiwgMHg2MzI3LCAweDMzMDIsIDB4NjMyOCwgMHg2MzI4LCAweDAzQUYsCisgICAgMHg2MzI5LCAweDYzMjksIDB4MzMwNCwgMHg2MzJBLCAweDYzMkEsIDB4MEI3MywgMHg2MzJCLCAweDYzMkIsIDB4MDU2RiwKKyAgICAweDYzMkMsIDB4NjMyRSwgMHgzMzA1LCAweDYzMkYsIDB4NjMyRiwgMHgxMTkyLCAweDYzMzAsIDB4NjMzMSwgMHgzMzA4LAorICAgIDB4NjMzMiwgMHg2MzMyLCAweDE5NEYsIDB4NjMzMywgMHg2MzM4LCAweDMzMEEsIDB4NjMzOSwgMHg2MzM5LCAweDE0QzQsCisgICAgMHg2MzNBLCAweDYzM0EsIDB4MEU1NywgMHg2MzNCLCAweDYzM0MsIDB4MzMxMCwgMHg2MzNELCAweDYzM0QsIDB4MEU5RCwKKyAgICAweDYzM0UsIDB4NjMzRSwgMHgyMUQxLCAweDYzM0YsIDB4NjM0MSwgMHgzMzEyLCAweDYzNDIsIDB4NjM0MiwgMHgwRUY1LAorICAgIDB4NjM0MywgMHg2MzQzLCAweDE0QzYsIDB4NjM0NCwgMHg2MzQ0LCAweDMzMTUsIDB4NjM0NSwgMHg2MzQ1LCAweDBFNjIsCisgICAgMHg2MzQ2LCAweDYzNDYsIDB4MDk5MSwgMHg2MzQ3LCAweDYzNDgsIDB4MzMxNiwgMHg2MzQ5LCAweDYzNDksIDB4MTIxQSwKKyAgICAweDYzNEEsIDB4NjM0QSwgMHgzMzE4LCAweDYzNEIsIDB4NjM0QiwgMHgxNEM1LCAweDYzNEMsIDB4NjM0QywgMHgwM0QxLAorICAgIDB4NjM0RCwgMHg2MzRELCAweDA3NkIsIDB4NjM0RSwgMHg2MzRFLCAweDBEMEMsIDB4NjM0RiwgMHg2MzRGLCAweDBCNTYsCisgICAgMHg2MzUwLCAweDYzNTAsIDB4MDkxNywgMHg2MzUxLCAweDYzNTQsIDB4MzMxOSwgMHg2MzU1LCAweDYzNTUsIDB4MDQ3RCwKKyAgICAweDYzNTYsIDB4NjM1RCwgMHgzMzFELCAweDYzNUUsIDB4NjM1RSwgMHgwOUI3LCAweDYzNUYsIDB4NjM1RiwgMHgwREU1LAorICAgIDB4NjM2MCwgMHg2MzYwLCAweDMzMjUsIDB4NjM2MSwgMHg2MzYxLCAweDA4NjQsIDB4NjM2MiwgMHg2MzYyLCAweDA3RDAsCisgICAgMHg2MzYzLCAweDYzNjMsIDB4MDU5OCwgMHg2MzY0LCAweDYzNjYsIDB4MzMyNiwgMHg2MzY3LCAweDYzNjcsIDB4MEJCNiwKKyAgICAweDYzNjgsIDB4NjM2OCwgMHgyMTFDLCAweDYzNjksIDB4NjM2OSwgMHgxNEQwLCAweDYzNkEsIDB4NjM2QSwgMHgzMzI5LAorICAgIDB4NjM2QiwgMHg2MzZCLCAweDIzNUQsIDB4NjM2QywgMHg2MzZDLCAweDMzMkEsIDB4NjM2RCwgMHg2MzZELCAweDE0Q0QsCisgICAgMHg2MzZFLCAweDYzNkUsIDB4MDkwQywgMHg2MzZGLCAweDYzNzAsIDB4MzMyQiwgMHg2MzcxLCAweDYzNzEsIDB4MTRDOSwKKyAgICAweDYzNzIsIDB4NjM3MiwgMHgyNjgyLCAweDYzNzMsIDB4NjM3NSwgMHgzMzJELCAweDYzNzYsIDB4NjM3NiwgMHgwNTNBLAorICAgIDB4NjM3NywgMHg2Mzc3LCAweDA4QUUsIDB4NjM3OCwgMHg2Mzc5LCAweDMzMzAsIDB4NjM3QSwgMHg2MzdBLCAweDE0Q0EsCisgICAgMHg2MzdCLCAweDYzN0IsIDB4MEI1MCwgMHg2MzdDLCAweDYzN0YsIDB4MzMzMiwgMHg2MzgwLCAweDYzODAsIDB4MEYzMywKKyAgICAweDYzODEsIDB4NjM4MSwgMHgzMzM2LCAweDYzODIsIDB4NjM4MiwgMHgwNUMxLCAweDYzODMsIDB4NjM4MywgMHgyMTBELAorICAgIDB4NjM4NCwgMHg2Mzg0LCAweDIwNUEsIDB4NjM4NSwgMHg2Mzg2LCAweDMzMzcsIDB4NjM4NywgMHg2Mzg3LCAweDA2MUQsCisgICAgMHg2Mzg4LCAweDYzODgsIDB4MEQ3MSwgMHg2Mzg5LCAweDYzODksIDB4MDVENSwgMHg2MzhBLCAweDYzOEEsIDB4MTRDRiwKKyAgICAweDYzOEIsIDB4NjM4QiwgMHgzMzM5LCAweDYzOEMsIDB4NjM4QywgMHgxMTY3LCAweDYzOEQsIDB4NjM4RCwgMHgzMzNBLAorICAgIDB4NjM4RSwgMHg2MzhFLCAweDE0Q0IsIDB4NjM4RiwgMHg2MzhGLCAweDBFMjAsIDB4NjM5MCwgMHg2MzkwLCAweDBDMUQsCisgICAgMHg2MzkxLCAweDYzOTEsIDB4MzMzQiwgMHg2MzkyLCAweDYzOTIsIDB4MEI4NiwgMHg2MzkzLCAweDYzOTUsIDB4MzMzQywKKyAgICAweDYzOTYsIDB4NjM5NiwgMHgxMDNCLCAweDYzOTcsIDB4NjM5NywgMHgzMzNGLCAweDYzOTgsIDB4NjM5OCwgMHgwOTIxLAorICAgIDB4NjM5OSwgMHg2MzlGLCAweDMzNDAsIDB4NjNBMCwgMHg2M0EwLCAweDBBN0EsIDB4NjNBMSwgMHg2M0ExLCAweDMzNDcsCisgICAgMHg2M0EyLCAweDYzQTIsIDB4MEUxMCwgMHg2M0EzLCAweDYzQTMsIDB4MDRERCwgMHg2M0E0LCAweDYzQTQsIDB4MzM0OCwKKyAgICAweDYzQTUsIDB4NjNBNSwgMHgwOEE0LCAweDYzQTYsIDB4NjNBNiwgMHgzMzQ5LCAweDYzQTcsIDB4NjNBNywgMHgwOTY1LAorICAgIDB4NjNBOCwgMHg2M0E4LCAweDBFNzcsIDB4NjNBOSwgMHg2M0E5LCAweDEwMDMsIDB4NjNBQSwgMHg2M0FBLCAweDA1NkUsCisgICAgMHg2M0FCLCAweDYzQUIsIDB4MzM0QSwgMHg2M0FDLCAweDYzQUMsIDB4MTRDRSwgMHg2M0FELCAweDYzQUQsIDB4MTRDNywKKyAgICAweDYzQUUsIDB4NjNBRSwgMHgxNEQxLCAweDYzQUYsIDB4NjNBRiwgMHgzMzRCLCAweDYzQjAsIDB4NjNCMCwgMHgxOTUwLAorICAgIDB4NjNCMSwgMHg2M0IyLCAweDMzNEMsIDB4NjNCMywgMHg2M0IzLCAweDBBNTcsIDB4NjNCNCwgMHg2M0I0LCAweDE0Q0MsCisgICAgMHg2M0I1LCAweDYzQjYsIDB4MzM0RSwgMHg2M0I3LCAweDYzQjcsIDB4MTFCRiwgMHg2M0I4LCAweDYzQjgsIDB4MDU4OCwKKyAgICAweDYzQjksIDB4NjNCOSwgMHgzMzUwLCAweDYzQkEsIDB4NjNCQSwgMHgwNEJCLCAweDYzQkIsIDB4NjNCQiwgMHgzMzUxLAorICAgIDB4NjNCQywgMHg2M0JDLCAweDE0RDIsIDB4NjNCRCwgMHg2M0JELCAweDMzNTIsIDB4NjNCRSwgMHg2M0JFLCAweDE0REMsCisgICAgMHg2M0JGLCAweDYzQkYsIDB4MzM1MywgMHg2M0MwLCAweDYzQzAsIDB4MUY4RCwgMHg2M0MxLCAweDYzQzMsIDB4MzM1NCwKKyAgICAweDYzQzQsIDB4NjNDNCwgMHgxNEQ3LCAweDYzQzUsIDB4NjNDNSwgMHgzMzU3LCAweDYzQzYsIDB4NjNDNiwgMHgxNERCLAorICAgIDB4NjNDNywgMHg2M0M4LCAweDMzNTgsIDB4NjNDOSwgMHg2M0M5LCAweDBDQkIsIDB4NjNDQSwgMHg2M0NDLCAweDMzNUEsCisgICAgMHg2M0NELCAweDYzQ0QsIDB4MTIzRSwgMHg2M0NFLCAweDYzQ0UsIDB4MTREOSwgMHg2M0NGLCAweDYzQ0YsIDB4MEFFRCwKKyAgICAweDYzRDAsIDB4NjNEMCwgMHgwRTM0LCAweDYzRDEsIDB4NjNEMSwgMHgzMzVELCAweDYzRDIsIDB4NjNEMiwgMHgwNEFDLAorICAgIDB4NjNEMywgMHg2M0Q1LCAweDMzNUUsIDB4NjNENiwgMHg2M0Q2LCAweDEwNDUsIDB4NjNENywgMHg2M0Q5LCAweDMzNjEsCisgICAgMHg2M0RBLCAweDYzREEsIDB4MjFGRiwgMHg2M0RCLCAweDYzREQsIDB4MzM2NCwgMHg2M0RFLCAweDYzREUsIDB4MTREOCwKKyAgICAweDYzREYsIDB4NjNERiwgMHgzMzY3LCAweDYzRTAsIDB4NjNFMCwgMHgxNEQ1LCAweDYzRTEsIDB4NjNFMSwgMHgwRUU0LAorICAgIDB4NjNFMiwgMHg2M0UyLCAweDMzNjgsIDB4NjNFMywgMHg2M0UzLCAweDA1MkEsIDB4NjNFNCwgMHg2M0U4LCAweDMzNjksCisgICAgMHg2M0U5LCAweDYzRTksIDB4MDkzOCwgMHg2M0VBLCAweDYzRUEsIDB4MDhFRCwgMHg2M0VCLCAweDYzRUMsIDB4MzM2RSwKKyAgICAweDYzRUQsIDB4NjNFRCwgMHgwOEEzLCAweDYzRUUsIDB4NjNFRSwgMHgxRjU4LCAweDYzRUYsIDB4NjNGMSwgMHgzMzcwLAorICAgIDB4NjNGMiwgMHg2M0YyLCAweDE0RDMsIDB4NjNGMywgMHg2M0YzLCAweDMzNzMsIDB4NjNGNCwgMHg2M0Y0LCAweDEwRjEsCisgICAgMHg2M0Y1LCAweDYzRjUsIDB4MzM3NCwgMHg2M0Y2LCAweDYzRjYsIDB4MTRDOCwgMHg2M0Y3LCAweDYzRjcsIDB4MzM3NSwKKyAgICAweDYzRjgsIDB4NjNGOCwgMHgxNEQ0LCAweDYzRjksIDB4NjNGQywgMHgzMzc2LCAweDYzRkQsIDB4NjNGRCwgMHgwOUFBLAorICAgIDB4NjNGRSwgMHg2M0ZFLCAweDMzN0EsIDB4NjNGRiwgMHg2M0ZGLCAweDE0RDYsIDB4NjQwMCwgMHg2NDAwLCAweDA0QkEsCisgICAgMHg2NDAxLCAweDY0MDEsIDB4MDZFNCwgMHg2NDAyLCAweDY0MDIsIDB4MEE0RSwgMHg2NDAzLCAweDY0MDQsIDB4MzM3QiwKKyAgICAweDY0MDUsIDB4NjQwNSwgMHgwODkyLCAweDY0MDYsIDB4NjQwQSwgMHgzMzdELCAweDY0MEIsIDB4NjQwQiwgMHgxNERGLAorICAgIDB4NjQwQywgMHg2NDBDLCAweDE0RTIsIDB4NjQwRCwgMHg2NDBELCAweDIxNUIsIDB4NjQwRSwgMHg2NDBFLCAweDMzODIsCisgICAgMHg2NDBGLCAweDY0MEYsIDB4MDQ3MiwgMHg2NDEwLCAweDY0MTAsIDB4MDUyNywgMHg2NDExLCAweDY0MTIsIDB4MzM4MywKKyAgICAweDY0MTMsIDB4NjQxMywgMHgwNTZELCAweDY0MTQsIDB4NjQxNCwgMHgwQ0RGLCAweDY0MTUsIDB4NjQxNiwgMHgzMzg1LAorICAgIDB4NjQxNywgMHg2NDE3LCAweDFFQjYsIDB4NjQxOCwgMHg2NDFBLCAweDMzODcsIDB4NjQxQiwgMHg2NDFCLCAweDE0RTAsCisgICAgMHg2NDFDLCAweDY0MUMsIDB4MERDNiwgMHg2NDFELCAweDY0MUQsIDB4MzM4QSwgMHg2NDFFLCAweDY0MUUsIDB4MDZERSwKKyAgICAweDY0MUYsIDB4NjQxRiwgMHgzMzhCLCAweDY0MjAsIDB4NjQyMCwgMHgxNEUxLCAweDY0MjEsIDB4NjQyMSwgMHgxNEU0LAorICAgIDB4NjQyMiwgMHg2NDI1LCAweDMzOEMsIDB4NjQyNiwgMHg2NDI2LCAweDE0RTMsIDB4NjQyNywgMHg2NDI5LCAweDMzOTAsCisgICAgMHg2NDJBLCAweDY0MkEsIDB4MEUxNSwgMHg2NDJCLCAweDY0MkIsIDB4MzM5MywgMHg2NDJDLCAweDY0MkMsIDB4MDNFQywKKyAgICAweDY0MkQsIDB4NjQyRCwgMHgwNTcxLCAweDY0MkUsIDB4NjQzMywgMHgzMzk0LCAweDY0MzQsIDB4NjQzNCwgMHgxNzM2LAorICAgIDB4NjQzNSwgMHg2NDM1LCAweDMzOUEsIDB4NjQzNiwgMHg2NDM2LCAweDIwREIsIDB4NjQzNywgMHg2NDM5LCAweDMzOUIsCisgICAgMHg2NDNBLCAweDY0M0EsIDB4MEY3QSwgMHg2NDNCLCAweDY0M0MsIDB4MzM5RSwgMHg2NDNELCAweDY0M0QsIDB4MDRCMiwKKyAgICAweDY0M0UsIDB4NjQzRSwgMHgzM0EwLCAweDY0M0YsIDB4NjQzRiwgMHgxOTUxLCAweDY0NDAsIDB4NjQ0MCwgMHgzM0ExLAorICAgIDB4NjQ0MSwgMHg2NDQxLCAweDE0REUsIDB4NjQ0MiwgMHg2NDQzLCAweDMzQTIsIDB4NjQ0NCwgMHg2NDQ0LCAweDBEMUMsCisgICAgMHg2NDQ1LCAweDY0NDUsIDB4MTRERCwgMHg2NDQ2LCAweDY0NDYsIDB4MDNFNSwgMHg2NDQ3LCAweDY0NDcsIDB4MTAyOCwKKyAgICAweDY0NDgsIDB4NjQ0OCwgMHgwNDYwLCAweDY0NDksIDB4NjQ0OSwgMHgzM0E0LCAweDY0NEEsIDB4NjQ0QSwgMHgwRTAyLAorICAgIDB4NjQ0QiwgMHg2NDUwLCAweDMzQTUsIDB4NjQ1MSwgMHg2NDUxLCAweDIzNjAsIDB4NjQ1MiwgMHg2NDUyLCAweDE0REEsCisgICAgMHg2NDUzLCAweDY0NTMsIDB4MzNBQiwgMHg2NDU0LCAweDY0NTQsIDB4MEQ5OSwgMHg2NDU1LCAweDY0NTcsIDB4MzNBQywKKyAgICAweDY0NTgsIDB4NjQ1OCwgMHgxMTRCLCAweDY0NTksIDB4NjQ1QiwgMHgzM0FGLCAweDY0NUMsIDB4NjQ1QywgMHgyMzYxLAorICAgIDB4NjQ1RCwgMHg2NDVELCAweDMzQjIsIDB4NjQ1RSwgMHg2NDVFLCAweDE0RTUsIDB4NjQ1RiwgMHg2NDVGLCAweDIwNDAsCisgICAgMHg2NDYwLCAweDY0NjYsIDB4MzNCMywgMHg2NDY3LCAweDY0NjcsIDB4MDU2MCwgMHg2NDY4LCAweDY0NjgsIDB4MzNCQSwKKyAgICAweDY0NjksIDB4NjQ2OSwgMHgwQjA5LCAweDY0NkEsIDB4NjQ2QywgMHgzM0JCLCAweDY0NkQsIDB4NjQ2RCwgMHgxNEU3LAorICAgIDB4NjQ2RSwgMHg2NDZFLCAweDMzQkUsIDB4NjQ2RiwgMHg2NDZGLCAweDIyOEUsIDB4NjQ3MCwgMHg2NDcyLCAweDMzQkYsCisgICAgMHg2NDczLCAweDY0NzMsIDB4MUZERiwgMHg2NDc0LCAweDY0NzUsIDB4MzNDMiwgMHg2NDc2LCAweDY0NzYsIDB4MjM1RSwKKyAgICAweDY0NzcsIDB4NjQ3NywgMHgzM0M0LCAweDY0NzgsIDB4NjQ3OSwgMHgwQjAzLCAweDY0N0EsIDB4NjQ3QSwgMHgxNEU5LAorICAgIDB4NjQ3QiwgMHg2NDdCLCAweDFFNkEsIDB4NjQ3QywgMHg2NDgxLCAweDMzQzUsIDB4NjQ4MiwgMHg2NDgyLCAweDBBMTUsCisgICAgMHg2NDgzLCAweDY0ODMsIDB4MzNDQiwgMHg2NDg0LCAweDY0ODQsIDB4MTRFNiwgMHg2NDg1LCAweDY0ODUsIDB4MDkxRSwKKyAgICAweDY0ODYsIDB4NjQ4NiwgMHgzM0NDLCAweDY0ODcsIDB4NjQ4NywgMHgwQkQxLCAweDY0ODgsIDB4NjQ4OCwgMHgyMDAyLAorICAgIDB4NjQ4OSwgMHg2NDkwLCAweDMzQ0QsIDB4NjQ5MSwgMHg2NDkxLCAweDA0RUEsIDB4NjQ5MiwgMHg2NDkyLCAweDBDRDEsCisgICAgMHg2NDkzLCAweDY0OTMsIDB4MjA5MywgMHg2NDk0LCAweDY0OTQsIDB4MzNENSwgMHg2NDk1LCAweDY0OTUsIDB4MERBRiwKKyAgICAweDY0OTYsIDB4NjQ5NiwgMHgxNEU4LCAweDY0OTcsIDB4NjQ5OCwgMHgzM0Q2LCAweDY0OTksIDB4NjQ5OSwgMHgxNEVDLAorICAgIDB4NjQ5QSwgMHg2NDlELCAweDMzRDgsIDB4NjQ5RSwgMHg2NDlFLCAweDEyMEYsIDB4NjQ5RiwgMHg2NDlGLCAweDIzNUYsCisgICAgMHg2NEEwLCAweDY0QTIsIDB4MzNEQywgMHg2NEEzLCAweDY0QTMsIDB4MUVBQywgMHg2NEE0LCAweDY0QTQsIDB4MDREQywKKyAgICAweDY0QTUsIDB4NjRBNSwgMHgxRTU0LCAweDY0QTYsIDB4NjRBOCwgMHgzM0RGLCAweDY0QTksIDB4NjRBOSwgMHgwQTBDLAorICAgIDB4NjRBQSwgMHg2NEFBLCAweDMzRTIsIDB4NjRBQiwgMHg2NEFCLCAweDFGMDgsIDB4NjRBQywgMHg2NEFDLCAweDBDNDgsCisgICAgMHg2NEFELCAweDY0QUQsIDB4MDQ2QywgMHg2NEFFLCAweDY0QUUsIDB4MDU2QywgMHg2NEFGLCAweDY0QUYsIDB4MzNFMywKKyAgICAweDY0QjAsIDB4NjRCMCwgMHgxMjA4LCAweDY0QjEsIDB4NjRCMSwgMHgzM0U0LCAweDY0QjIsIDB4NjRCMiwgMHgyMEMwLAorICAgIDB4NjRCMywgMHg2NEIzLCAweDIzNjIsIDB4NjRCNCwgMHg2NEI0LCAweDMzRTUsIDB4NjRCNSwgMHg2NEI1LCAweDBCNEYsCisgICAgMHg2NEI2LCAweDY0QjYsIDB4MzNFNiwgMHg2NEI3LCAweDY0QjgsIDB4MTRFQSwgMHg2NEI5LCAweDY0QjksIDB4MzNFNywKKyAgICAweDY0QkEsIDB4NjRCQSwgMHgxNEVELCAweDY0QkIsIDB4NjRCQiwgMHgyMTYwLCAweDY0QkMsIDB4NjRCQywgMHgwNzZBLAorICAgIDB4NjRCRCwgMHg2NEJELCAweDMzRTgsIDB4NjRCRSwgMHg2NEJFLCAweDIxOUQsIDB4NjRCRiwgMHg2NEJGLCAweDFGOEUsCisgICAgMHg2NEMwLCAweDY0QzAsIDB4MTRFRSwgMHg2NEMxLCAweDY0QzEsIDB4MjIyRCwgMHg2NEMyLCAweDY0QzIsIDB4MDlDOSwKKyAgICAweDY0QzMsIDB4NjRDMywgMHgzM0U5LCAweDY0QzQsIDB4NjRDNCwgMHgyMDQ3LCAweDY0QzUsIDB4NjRDNSwgMHgwQ0ZDLAorICAgIDB4NjRDNiwgMHg2NEM2LCAweDMzRUEsIDB4NjRDNywgMHg2NEM3LCAweDIyNjIsIDB4NjRDOCwgMHg2NEM5LCAweDMzRUIsCisgICAgMHg2NENBLCAweDY0Q0EsIDB4MUY2NywgMHg2NENCLCAweDY0Q0IsIDB4MUVCMiwgMHg2NENDLCAweDY0Q0MsIDB4MzNFRCwKKyAgICAweDY0Q0QsIDB4NjRDRCwgMHgwNEEwLCAweDY0Q0UsIDB4NjRDRSwgMHgwQzYzLCAweDY0Q0YsIDB4NjRDRiwgMHgzM0VFLAorICAgIDB4NjREMCwgMHg2NEQwLCAweDE0RUYsIDB4NjREMSwgMHg2NEQxLCAweDMzRUYsIDB4NjREMiwgMHg2NEQyLCAweDBDNTksCisgICAgMHg2NEQzLCAweDY0RDMsIDB4MzNGMCwgMHg2NEQ0LCAweDY0RDQsIDB4MUVBOSwgMHg2NEQ1LCAweDY0RDYsIDB4MzNGMSwKKyAgICAweDY0RDcsIDB4NjRENywgMHgxNEYwLCAweDY0RDgsIDB4NjREOCwgMHgxOTUyLCAweDY0RDksIDB4NjREOSwgMHgzM0YzLAorICAgIDB4NjREQSwgMHg2NERBLCAweDFGQ0MsIDB4NjREQiwgMHg2NERELCAweDMzRjQsIDB4NjRERSwgMHg2NERFLCAweDBEQzgsCisgICAgMHg2NERGLCAweDY0REYsIDB4MzNGNywgMHg2NEUwLCAweDY0RTAsIDB4MUY3MiwgMHg2NEUxLCAweDY0RTEsIDB4MzNGOCwKKyAgICAweDY0RTIsIDB4NjRFMiwgMHgxNEYyLCAweDY0RTMsIDB4NjRFMywgMHgzM0Y5LCAweDY0RTQsIDB4NjRFNCwgMHgxNEYxLAorICAgIDB4NjRFNSwgMHg2NEU1LCAweDMzRkEsIDB4NjRFNiwgMHg2NEU2LCAweDA0ODgsIDB4NjRFNywgMHg2NEVCLCAweDMzRkIsCisgICAgMHg2NEVDLCAweDY0RUMsIDB4MjA5OCwgMHg2NEVELCAweDY0RUUsIDB4MzQwMCwgMHg2NEVGLCAweDY0RUYsIDB4MUU1MiwKKyAgICAweDY0RjAsIDB4NjRGMCwgMHgyMEE0LCAweDY0RjEsIDB4NjRGMSwgMHgxRjFDLCAweDY0RjIsIDB4NjRGMiwgMHgyMjhGLAorICAgIDB4NjRGMywgMHg2NEYzLCAweDM0MDIsIDB4NjRGNCwgMHg2NEY0LCAweDFGRUQsIDB4NjRGNSwgMHg2NEY2LCAweDM0MDMsCisgICAgMHg2NEY3LCAweDY0RjcsIDB4MjM2NSwgMHg2NEY4LCAweDY0RjksIDB4MzQwNSwgMHg2NEZBLCAweDY0RkEsIDB4MUUyRCwKKyAgICAweDY0RkIsIDB4NjRGQiwgMHgyMTUyLCAweDY0RkMsIDB4NjRGQywgMHgyMzY2LCAweDY0RkQsIDB4NjRGRCwgMHgzNDA3LAorICAgIDB4NjRGRSwgMHg2NEZFLCAweDIwRkEsIDB4NjRGRiwgMHg2NEZGLCAweDM0MDgsIDB4NjUwMCwgMHg2NTAwLCAweDBCOEIsCisgICAgMHg2NTAxLCAweDY1MDMsIDB4MzQwOSwgMHg2NTA0LCAweDY1MDQsIDB4MjM2MywgMHg2NTA1LCAweDY1MDUsIDB4MzQwQywKKyAgICAweDY1MDYsIDB4NjUwNiwgMHgyMDlBLCAweDY1MDcsIDB4NjUwOCwgMHgzNDBELCAweDY1MDksIDB4NjUwOSwgMHgxNEYzLAorICAgIDB4NjUwQSwgMHg2NTBFLCAweDM0MEYsIDB4NjUwRiwgMHg2NTBGLCAweDIwM0MsIDB4NjUxMCwgMHg2NTExLCAweDM0MTQsCisgICAgMHg2NTEyLCAweDY1MTIsIDB4MTExRiwgMHg2NTEzLCAweDY1MTMsIDB4MzQxNiwgMHg2NTE0LCAweDY1MTQsIDB4MUZGNiwKKyAgICAweDY1MTUsIDB4NjUxNSwgMHgzNDE3LCAweDY1MTYsIDB4NjUxNiwgMHgyMzY0LCAweDY1MTcsIDB4NjUxNywgMHgzNDE4LAorICAgIDB4NjUxOCwgMHg2NTE4LCAweDBDOUMsIDB4NjUxOSwgMHg2NTE5LCAweDFFNjksIDB4NjUxQSwgMHg2NTFBLCAweDM0MTksCisgICAgMHg2NTFCLCAweDY1MUIsIDB4MjM2NywgMHg2NTFDLCAweDY1MUMsIDB4MzQxQSwgMHg2NTFELCAweDY1MUQsIDB4MjExRCwKKyAgICAweDY1MUUsIDB4NjUyMSwgMHgzNDFCLCAweDY1MjIsIDB4NjUyMiwgMHgyMjU5LCAweDY1MjMsIDB4NjUyMywgMHgyMDU2LAorICAgIDB4NjUyNCwgMHg2NTI0LCAweDIxNjMsIDB4NjUyNSwgMHg2NTI1LCAweDE0RjQsIDB4NjUyNiwgMHg2NTI5LCAweDM0MUYsCisgICAgMHg2NTJBLCAweDY1MkEsIDB4MUZBOSwgMHg2NTJCLCAweDY1MkIsIDB4MDkxRiwgMHg2NTJDLCAweDY1MkMsIDB4MUZGQywKKyAgICAweDY1MkQsIDB4NjUyRCwgMHgzNDIzLCAweDY1MkUsIDB4NjUyRSwgMHgxNEY1LCAweDY1MkYsIDB4NjUyRiwgMHgxMUE2LAorICAgIDB4NjUzMCwgMHg2NTMzLCAweDM0MjQsIDB4NjUzNCwgMHg2NTM0LCAweDE5MDksIDB4NjUzNSwgMHg2NTM1LCAweDE5NjYsCisgICAgMHg2NTM2LCAweDY1MzYsIDB4MEQ2QywgMHg2NTM3LCAweDY1MzcsIDB4MzQyOCwgMHg2NTM4LCAweDY1MzgsIDB4MTJCMiwKKyAgICAweDY1MzksIDB4NjUzOSwgMHgwNkJGLCAweDY1M0EsIDB4NjUzQSwgMHgzNDI5LCAweDY1M0IsIDB4NjUzQiwgMHgwNkZFLAorICAgIDB4NjUzQywgMHg2NTNELCAweDM0MkEsIDB4NjUzRSwgMHg2NTNFLCAweDA2NjIsIDB4NjUzRiwgMHg2NTNGLCAweDExOUYsCisgICAgMHg2NTQwLCAweDY1NDQsIDB4MzQyQywgMHg2NTQ1LCAweDY1NDUsIDB4MDcyMywgMHg2NTQ2LCAweDY1NDcsIDB4MzQzMSwKKyAgICAweDY1NDgsIDB4NjU0OCwgMHgwRjcyLCAweDY1NDksIDB4NjU0OSwgMHgxQ0NCLCAweDY1NEEsIDB4NjU0QiwgMHgzNDMzLAorICAgIDB4NjU0QywgMHg2NTRDLCAweDA1QjEsIDB4NjU0RCwgMHg2NTRFLCAweDM0MzUsIDB4NjU0RiwgMHg2NTRGLCAweDBBRjksCisgICAgMHg2NTUwLCAweDY1NTAsIDB4MzQzNywgMHg2NTUxLCAweDY1NTEsIDB4MDhGNywgMHg2NTUyLCAweDY1NTQsIDB4MzQzOCwKKyAgICAweDY1NTUsIDB4NjU1NSwgMHgxOTY3LCAweDY1NTYsIDB4NjU1NiwgMHgwM0M4LCAweDY1NTcsIDB4NjU1NywgMHgxRTJFLAorICAgIDB4NjU1OCwgMHg2NTU4LCAweDM0M0IsIDB4NjU1OSwgMHg2NTU5LCAweDA4OUQsIDB4NjU1QSwgMHg2NTVBLCAweDM0M0MsCisgICAgMHg2NTVCLCAweDY1NUIsIDB4MDlGQiwgMHg2NTVDLCAweDY1NUMsIDB4MzQzRCwgMHg2NTVELCAweDY1NUQsIDB4MDQzRiwKKyAgICAweDY1NUUsIDB4NjU1RSwgMHgwNENELCAweDY1NUYsIDB4NjU2MSwgMHgzNDNFLCAweDY1NjIsIDB4NjU2MiwgMHgwNkNELAorICAgIDB4NjU2MywgMHg2NTYzLCAweDBDREIsIDB4NjU2NCwgMHg2NTY1LCAweDM0NDEsIDB4NjU2NiwgMHg2NTY2LCAweDA2MTcsCisgICAgMHg2NTY3LCAweDY1NkEsIDB4MzQ0MywgMHg2NTZCLCAweDY1NkIsIDB4MTk2OCwgMHg2NTZDLCAweDY1NkMsIDB4MDhFMywKKyAgICAweDY1NkQsIDB4NjU2RiwgMHgzNDQ3LCAweDY1NzAsIDB4NjU3MCwgMHgwRDk0LCAweDY1NzEsIDB4NjU3MSwgMHgzNDRBLAorICAgIDB4NjU3MiwgMHg2NTcyLCAweDBDNDAsIDB4NjU3MywgMHg2NTczLCAweDM0NEIsIDB4NjU3NCwgMHg2NTc0LCAweDExOUMsCisgICAgMHg2NTc1LCAweDY1NzUsIDB4MUVCQywgMHg2NTc2LCAweDY1NzYsIDB4MzQ0QywgMHg2NTc3LCAweDY1NzcsIDB4MDY5MCwKKyAgICAweDY1NzgsIDB4NjU3OCwgMHgyMTQyLCAweDY1NzksIDB4NjU4MSwgMHgzNDRELCAweDY1ODIsIDB4NjU4MiwgMHgyMDFFLAorICAgIDB4NjU4MywgMHg2NTgzLCAweDFFNDMsIDB4NjU4NCwgMHg2NTg2LCAweDM0NTYsIDB4NjU4NywgMHg2NTg3LCAweDBFRDMsCisgICAgMHg2NTg4LCAweDY1OEEsIDB4MzQ1OSwgMHg2NThCLCAweDY1OEIsIDB4MTE0QywgMHg2NThDLCAweDY1OEMsIDB4MDQ1QywKKyAgICAweDY1OEQsIDB4NjU4RiwgMHgzNDVDLCAweDY1OTAsIDB4NjU5MCwgMHgxOUMxLCAweDY1OTEsIDB4NjU5MSwgMHgwM0VBLAorICAgIDB4NjU5MiwgMHg2NTkyLCAweDM0NUYsIDB4NjU5MywgMHg2NTkzLCAweDE5QzMsIDB4NjU5NCwgMHg2NTk0LCAweDM0NjAsCisgICAgMHg2NTk1LCAweDY1OTUsIDB4MjRENCwgMHg2NTk2LCAweDY1OTYsIDB4MzQ2MSwgMHg2NTk3LCAweDY1OTcsIDB4MDVGNiwKKyAgICAweDY1OTgsIDB4NjU5OCwgMHgzNDYyLCAweDY1OTksIDB4NjU5OSwgMHgwQTE4LCAweDY1OUEsIDB4NjU5QSwgMHgzNDYzLAorICAgIDB4NjU5QiwgMHg2NTlCLCAweDFENTYsIDB4NjU5QywgMHg2NTlDLCAweDBGN0MsIDB4NjU5RCwgMHg2NTlFLCAweDM0NjQsCisgICAgMHg2NTlGLCAweDY1OUYsIDB4MTE4NiwgMHg2NUEwLCAweDY1QTAsIDB4MzQ2NiwgMHg2NUExLCAweDY1QTEsIDB4MEVFMiwKKyAgICAweDY1QTIsIDB4NjVBMywgMHgzNDY3LCAweDY1QTQsIDB4NjVBNCwgMHgwOEMwLCAweDY1QTUsIDB4NjVBNSwgMHgwNTA3LAorICAgIDB4NjVBNiwgMHg2NUE2LCAweDM0NjksIDB4NjVBNywgMHg2NUE3LCAweDA2QTYsIDB4NjVBOCwgMHg2NUE4LCAweDM0NkEsCisgICAgMHg2NUE5LCAweDY1QTksIDB4MTE1NywgMHg2NUFBLCAweDY1QUEsIDB4MzQ2QiwgMHg2NUFCLCAweDY1QUIsIDB4MUEyOSwKKyAgICAweDY1QUMsIDB4NjVBQywgMHgyMjZGLCAweDY1QUQsIDB4NjVBRCwgMHgwNjBFLCAweDY1QUUsIDB4NjVBRSwgMHgzNDZDLAorICAgIDB4NjVBRiwgMHg2NUFGLCAweDBEQUUsIDB4NjVCMCwgMHg2NUIwLCAweDBGOEQsIDB4NjVCMSwgMHg2NUI2LCAweDM0NkQsCisgICAgMHg2NUI3LCAweDY1QjcsIDB4MUVENywgMHg2NUI4LCAweDY1QjgsIDB4MzQ3MywgMHg2NUI5LCAweDY1QjksIDB4MDY1QSwKKyAgICAweDY1QkEsIDB4NjVCQiwgMHgzNDc0LCAweDY1QkMsIDB4NjVCQywgMHgxOUM0LCAweDY1QkQsIDB4NjVCRCwgMHgwRDQwLAorICAgIDB4NjVCRSwgMHg2NUMwLCAweDM0NzYsIDB4NjVDMSwgMHg2NUMxLCAweDBCOTUsIDB4NjVDMiwgMHg2NUMyLCAweDM0NzksCisgICAgMHg2NUMzLCAweDY1QzMsIDB4MTlDNywgMHg2NUM0LCAweDY1QzQsIDB4MTlDNiwgMHg2NUM1LCAweDY1QzUsIDB4MEE2QSwKKyAgICAweDY1QzYsIDB4NjVDNiwgMHgxOUM1LCAweDY1QzcsIDB4NjVDQSwgMHgzNDdBLCAweDY1Q0IsIDB4NjVDQiwgMHgwRkM4LAorICAgIDB4NjVDQywgMHg2NUNDLCAweDE5QzgsIDB4NjVDRCwgMHg2NUNELCAweDM0N0UsIDB4NjVDRSwgMHg2NUNFLCAweDE5QzksCisgICAgMHg2NUNGLCAweDY1Q0YsIDB4MTI0MiwgMHg2NUQwLCAweDY1RDEsIDB4MzQ3RiwgMHg2NUQyLCAweDY1RDIsIDB4MTlDQSwKKyAgICAweDY1RDMsIDB4NjVENSwgMHgzNDgxLCAweDY1RDYsIDB4NjVENiwgMHgxOUNCLCAweDY1RDcsIDB4NjVENywgMHgwQzBCLAorICAgIDB4NjVEOCwgMHg2NURGLCAweDM0ODQsIDB4NjVFMCwgMHg2NUUwLCAweDBFRUQsIDB4NjVFMSwgMHg2NUUxLCAweDM0OEMsCisgICAgMHg2NUUyLCAweDY1RTIsIDB4MDgzQiwgMHg2NUUzLCAweDY1RTQsIDB4MzQ4RCwgMHg2NUU1LCAweDY1RTUsIDB4MENCMCwKKyAgICAweDY1RTYsIDB4NjVFNiwgMHgwNThBLCAweDY1RTcsIDB4NjVFNywgMHgwOEY4LCAweDY1RTgsIDB4NjVFOCwgMHgxMUJCLAorICAgIDB4NjVFOSwgMHg2NUU5LCAweDExMkEsIDB4NjVFQSwgMHg2NUVCLCAweDM0OEYsIDB4NjVFQywgMHg2NUVDLCAweDBGRDcsCisgICAgMHg2NUVELCAweDY1RUQsIDB4MEZCQywgMHg2NUVFLCAweDY1RjAsIDB4MTkwQSwgMHg2NUYxLCAweDY1RjEsIDB4MDc2QywKKyAgICAweDY1RjIsIDB4NjVGNSwgMHgzNDkxLCAweDY1RjYsIDB4NjVGNiwgMHgwRDQ4LCAweDY1RjcsIDB4NjVGNywgMHgwOTgyLAorICAgIDB4NjVGOCwgMHg2NUY5LCAweDM0OTUsIDB4NjVGQSwgMHg2NUZBLCAweDBFQUIsIDB4NjVGQiwgMHg2NUZGLCAweDM0OTcsCisgICAgMHg2NjAwLCAweDY2MDAsIDB4MTkxMiwgMHg2NjAxLCAweDY2MDEsIDB4MzQ5QywgMHg2NjAyLCAweDY2MDIsIDB4MDNDNSwKKyAgICAweDY2MDMsIDB4NjYwMywgMHgxOTEwLCAweDY2MDQsIDB4NjYwNSwgMHgzNDlELCAweDY2MDYsIDB4NjYwNiwgMHgwOTkwLAorICAgIDB4NjYwNywgMHg2NjA5LCAweDM0OUYsIDB4NjYwQSwgMHg2NjBBLCAweDE5MEQsIDB4NjYwQiwgMHg2NjBCLCAweDM0QTIsCisgICAgMHg2NjBDLCAweDY2MEMsIDB4MDRDNCwgMHg2NjBELCAweDY2MEQsIDB4MzRBMywgMHg2NjBFLCAweDY2MEUsIDB4MEFGQywKKyAgICAweDY2MEYsIDB4NjYwRiwgMHgwN0ZELCAweDY2MTAsIDB4NjYxMiwgMHgzNEE0LCAweDY2MTMsIDB4NjYxMywgMHgxMDVFLAorICAgIDB4NjYxNCwgMHg2NjE0LCAweDBGMDMsIDB4NjYxNSwgMHg2NjE1LCAweDE5MTEsIDB4NjYxNiwgMHg2NjE4LCAweDM0QTcsCisgICAgMHg2NjE5LCAweDY2MTksIDB4MTkwRSwgMHg2NjFBLCAweDY2MUMsIDB4MzRBQSwgMHg2NjFELCAweDY2MUQsIDB4MTkxNSwKKyAgICAweDY2MUUsIDB4NjYxRSwgMHgzNEFELCAweDY2MUYsIDB4NjYxRiwgMHgwRjkyLCAweDY2MjAsIDB4NjYyMCwgMHgxMDk4LAorICAgIDB4NjYyMSwgMHg2NjI0LCAweDM0QUUsIDB4NjYyNSwgMHg2NjI1LCAweDA1M0QsIDB4NjYyNiwgMHg2NjI2LCAweDM0QjIsCisgICAgMHg2NjI3LCAweDY2MjcsIDB4MEFDNiwgMHg2NjI4LCAweDY2MjgsIDB4MTI0RiwgMHg2NjI5LCAweDY2MkMsIDB4MzRCMywKKyAgICAweDY2MkQsIDB4NjYyRCwgMHgxMTcyLCAweDY2MkUsIDB4NjYyRSwgMHgzNEI3LCAweDY2MkYsIDB4NjYyRiwgMHgwRDVFLAorICAgIDB4NjYzMCwgMHg2NjMwLCAweDM0QjgsIDB4NjYzMSwgMHg2NjMxLCAweDE5MTcsIDB4NjYzMiwgMHg2NjMzLCAweDM0QjksCisgICAgMHg2NjM0LCAweDY2MzQsIDB4MTkxNiwgMHg2NjM1LCAweDY2MzUsIDB4MTkxOSwgMHg2NjM2LCAweDY2MzYsIDB4MTkxOCwKKyAgICAweDY2MzcsIDB4NjYzQiwgMHgzNEJCLCAweDY2M0MsIDB4NjYzQywgMHgxMUU2LCAweDY2M0QsIDB4NjYzRCwgMHgzNEMwLAorICAgIDB4NjYzRSwgMHg2NjNFLCAweDBGNDEsIDB4NjYzRiwgMHg2NjQwLCAweDM0QzEsIDB4NjY0MSwgMHg2NjQxLCAweDE5MUQsCisgICAgMHg2NjQyLCAweDY2NDIsIDB4MjEyRCwgMHg2NjQzLCAweDY2NDMsIDB4MDdFMywgMHg2NjQ0LCAweDY2NEEsIDB4MzRDMywKKyAgICAweDY2NEIsIDB4NjY0QiwgMHgwOENCLCAweDY2NEMsIDB4NjY0QywgMHgwRDA3LCAweDY2NEQsIDB4NjY0RSwgMHgzNENBLAorICAgIDB4NjY0RiwgMHg2NjRGLCAweDE5MUUsIDB4NjY1MCwgMHg2NjUxLCAweDM0Q0MsIDB4NjY1MiwgMHg2NjUyLCAweDBDRjIsCisgICAgMHg2NjUzLCAweDY2NTMsIDB4MEY2QiwgMHg2NjU0LCAweDY2NTQsIDB4MTkxQywgMHg2NjU1LCAweDY2NTUsIDB4MTExMSwKKyAgICAweDY2NTYsIDB4NjY1NiwgMHgxOTFGLCAweDY2NTcsIDB4NjY1NywgMHgxOTIxLCAweDY2NTgsIDB4NjY1OSwgMHgzNENFLAorICAgIDB4NjY1QSwgMHg2NjVBLCAweDBFOUUsIDB4NjY1QiwgMHg2NjVDLCAweDM0RDAsIDB4NjY1RCwgMHg2NjVELCAweDIyOUIsCisgICAgMHg2NjVFLCAweDY2NUUsIDB4MzREMiwgMHg2NjVGLCAweDY2NUYsIDB4MTkxQiwgMHg2NjYwLCAweDY2NjAsIDB4MzREMywKKyAgICAweDY2NjEsIDB4NjY2MSwgMHgxOTIwLCAweDY2NjIsIDB4NjY2MywgMHgzNEQ0LCAweDY2NjQsIDB4NjY2NCwgMHgwRUZELAorICAgIDB4NjY2NSwgMHg2NjY1LCAweDM0RDYsIDB4NjY2NiwgMHg2NjY2LCAweDA3RjMsIDB4NjY2NywgMHg2NjY3LCAweDM0RDcsCisgICAgMHg2NjY4LCAweDY2NjgsIDB4MDRFNCwgMHg2NjY5LCAweDY2NkQsIDB4MzREOCwgMHg2NjZFLCAweDY2NkUsIDB4MEJGNCwKKyAgICAweDY2NkYsIDB4NjY2RiwgMHgwOERGLCAweDY2NzAsIDB4NjY3MCwgMHgwRjA5LCAweDY2NzEsIDB4NjY3MywgMHgzNERELAorICAgIDB4NjY3NCwgMHg2Njc0LCAweDBDNjQsIDB4NjY3NSwgMHg2Njc1LCAweDM0RTAsIDB4NjY3NiwgMHg2Njc2LCAweDA4RDYsCisgICAgMHg2Njc3LCAweDY2NzcsIDB4MTkyMiwgMHg2Njc4LCAweDY2NzksIDB4MzRFMSwgMHg2NjdBLCAweDY2N0EsIDB4MTFDNiwKKyAgICAweDY2N0IsIDB4NjY3RCwgMHgzNEUzLCAweDY2N0UsIDB4NjY3RSwgMHgwQTA5LCAweDY2N0YsIDB4NjY4MSwgMHgzNEU2LAorICAgIDB4NjY4MiwgMHg2NjgyLCAweDExMjAsIDB4NjY4MywgMHg2NjgzLCAweDM0RTksIDB4NjY4NCwgMHg2Njg0LCAweDE5MjMsCisgICAgMHg2Njg1LCAweDY2ODYsIDB4MzRFQSwgMHg2Njg3LCAweDY2ODcsIDB4MEYyQiwgMHg2Njg4LCAweDY2ODgsIDB4MjI1NiwKKyAgICAweDY2ODksIDB4NjY4OSwgMHgyNEE4LCAweDY2OEEsIDB4NjY4QiwgMHgzNEVDLCAweDY2OEMsIDB4NjY4QywgMHgxOTI0LAorICAgIDB4NjY4RCwgMHg2NjkwLCAweDM0RUUsIDB4NjY5MSwgMHg2NjkxLCAweDBEODUsIDB4NjY5MiwgMHg2Njk1LCAweDM0RjIsCisgICAgMHg2Njk2LCAweDY2OTYsIDB4MEI3MCwgMHg2Njk3LCAweDY2OTcsIDB4MDNDMCwgMHg2Njk4LCAweDY2OUMsIDB4MzRGNiwKKyAgICAweDY2OUQsIDB4NjY5RCwgMHgxOTI2LCAweDY2OUUsIDB4NjZBMSwgMHgzNEZCLCAweDY2QTIsIDB4NjZBMiwgMHgxRTc5LAorICAgIDB4NjZBMywgMHg2NkE2LCAweDM0RkYsIDB4NjZBNywgMHg2NkE3LCAweDE5MjUsIDB4NjZBOCwgMHg2NkE4LCAweDFDREQsCisgICAgMHg2NkE5LCAweDY2QUEsIDB4MzUwMywgMHg2NkFCLCAweDY2QUIsIDB4MjI1QSwgMHg2NkFDLCAweDY2QUQsIDB4MzUwNSwKKyAgICAweDY2QUUsIDB4NjZBRSwgMHgwQjFELCAweDY2QUYsIDB4NjZCMywgMHgzNTA3LCAweDY2QjQsIDB4NjZCNCwgMHgwNDEyLAorICAgIDB4NjZCNSwgMHg2NkI4LCAweDM1MEMsIDB4NjZCOSwgMHg2NkI5LCAweDE3NUIsIDB4NjZCQSwgMHg2NkJELCAweDM1MTAsCisgICAgMHg2NkJFLCAweDY2QkUsIDB4MTkyNywgMHg2NkJGLCAweDY2QzMsIDB4MzUxNCwgMHg2NkM0LCAweDY2QzQsIDB4MjRBNywKKyAgICAweDY2QzUsIDB4NjZDNSwgMHgzNTE5LCAweDY2QzYsIDB4NjZDNiwgMHgyNjg2LCAweDY2QzcsIDB4NjZDNywgMHgyNEE2LAorICAgIDB4NjZDOCwgMHg2NkM4LCAweDM1MUEsIDB4NjZDOSwgMHg2NkM5LCAweDIxQ0UsIDB4NjZDQSwgMHg2NkQ1LCAweDM1MUIsCisgICAgMHg2NkQ2LCAweDY2RDYsIDB4MjRBOSwgMHg2NkQ3LCAweDY2RDgsIDB4MzUyNywgMHg2NkQ5LCAweDY2RDksIDB4MEQ4NiwKKyAgICAweDY2REEsIDB4NjZEQSwgMHgzNTI5LCAweDY2REIsIDB4NjZEQywgMHgxOTI4LCAweDY2REQsIDB4NjZERCwgMHgwQkY3LAorICAgIDB4NjZERSwgMHg2NkRGLCAweDM1MkEsIDB4NjZFMCwgMHg2NkUwLCAweDFGRTcsIDB4NjZFMSwgMHg2NkU1LCAweDM1MkMsCisgICAgMHg2NkU2LCAweDY2RTYsIDB4MTkyQSwgMHg2NkU3LCAweDY2RTgsIDB4MzUzMSwgMHg2NkU5LCAweDY2RTksIDB4MTkyQiwKKyAgICAweDY2RUEsIDB4NjZFQiwgMHgzNTMzLCAweDY2RUMsIDB4NjZFQywgMHgyMTEyLCAweDY2RUQsIDB4NjZFRiwgMHgzNTM1LAorICAgIDB4NjZGMCwgMHg2NkYwLCAweDEwRkUsIDB4NjZGMSwgMHg2NkYxLCAweDM1MzgsIDB4NjZGMiwgMHg2NkYyLCAweDBDNzcsCisgICAgMHg2NkYzLCAweDY2RjMsIDB4MTAzRSwgMHg2NkY0LCAweDY2RjQsIDB4MDZGNywgMHg2NkY1LCAweDY2RjYsIDB4MzUzOSwKKyAgICAweDY2RjcsIDB4NjZGNywgMHgxOTE0LCAweDY2RjgsIDB4NjZGOCwgMHgyMTNDLCAweDY2RjksIDB4NjZGOSwgMHgwNEEzLAorICAgIDB4NjZGQSwgMHg2NkZCLCAweDM1M0IsIDB4NjZGQywgMHg2NkZDLCAweDBBQTMsIDB4NjZGRCwgMHg2NkZELCAweDM1M0QsCisgICAgMHg2NkZFLCAweDY2RkUsIDB4MTEzQiwgMHg2NkZGLCAweDY2RkYsIDB4MEUzOSwgMHg2NzAwLCAweDY3MDAsIDB4MTI0QiwKKyAgICAweDY3MDEsIDB4NjcwMiwgMHgzNTNFLCAweDY3MDMsIDB4NjcwMywgMHgxRjVDLCAweDY3MDQsIDB4NjcwNywgMHgzNTQwLAorICAgIDB4NjcwOCwgMHg2NzA4LCAweDExMDUsIDB4NjcwOSwgMHg2NzA5LCAweDEwQjUsIDB4NjcwQSwgMHg2NzBBLCAweDE5NzMsCisgICAgMHg2NzBCLCAweDY3MEIsIDB4MEJCNCwgMHg2NzBDLCAweDY3MEMsIDB4MzU0NCwgMHg2NzBELCAweDY3MEQsIDB4MDY5QiwKKyAgICAweDY3MEUsIDB4NjcwRiwgMHgzNTQ1LCAweDY3MTAsIDB4NjcxMCwgMHgxOTg0LCAweDY3MTEsIDB4NjcxMywgMHgzNTQ3LAorICAgIDB4NjcxNCwgMHg2NzE0LCAweDBEQUMsIDB4NjcxNSwgMHg2NzE1LCAweDE5OEUsIDB4NjcxNiwgMHg2NzE2LCAweDM1NEEsCisgICAgMHg2NzE3LCAweDY3MTcsIDB4MDlCNSwgMHg2NzE4LCAweDY3MUEsIDB4MzU0QiwgMHg2NzFCLCAweDY3MUIsIDB4MEVBQywKKyAgICAweDY3MUMsIDB4NjcxQywgMHgzNTRFLCAweDY3MUQsIDB4NjcxRCwgMHgwNEQ0LCAweDY3MUUsIDB4NjcxRSwgMHgzNTRGLAorICAgIDB4NjcxRiwgMHg2NzFGLCAweDBCRjksIDB4NjcyMCwgMHg2NzI1LCAweDM1NTAsIDB4NjcyNiwgMHg2NzI2LCAweDE5QUMsCisgICAgMHg2NzI3LCAweDY3MjcsIDB4MjRDNCwgMHg2NzI4LCAweDY3MjgsIDB4MEIyMSwgMHg2NzI5LCAweDY3MjksIDB4MzU1NiwKKyAgICAweDY3MkEsIDB4NjcyQSwgMHgwRUMzLCAweDY3MkIsIDB4NjcyQiwgMHgwQjBDLCAweDY3MkMsIDB4NjcyQywgMHgwNDI3LAorICAgIDB4NjcyRCwgMHg2NzJELCAweDExNDAsIDB4NjcyRSwgMHg2NzJFLCAweDM1NTcsIDB4NjcyRiwgMHg2NzJGLCAweDBEOEMsCisgICAgMHg2NzMwLCAweDY3MzAsIDB4MzU1OCwgMHg2NzMxLCAweDY3MzEsIDB4MTFFQiwgMHg2NzMyLCAweDY3MzMsIDB4MzU1OSwKKyAgICAweDY3MzQsIDB4NjczNCwgMHgwQkYyLCAweDY3MzUsIDB4NjczNSwgMHgwNjIzLCAweDY3MzYsIDB4NjczOSwgMHgzNTVCLAorICAgIDB4NjczQSwgMHg2NzNBLCAweDA4MEYsIDB4NjczQiwgMHg2NzNDLCAweDM1NUYsIDB4NjczRCwgMHg2NzNELCAweDBGQUIsCisgICAgMHg2NzNFLCAweDY3M0YsIDB4MzU2MSwgMHg2NzQwLCAweDY3NDAsIDB4MENFQSwgMHg2NzQxLCAweDY3NDEsIDB4MzU2MywKKyAgICAweDY3NDIsIDB4Njc0MiwgMHgxMTE2LCAweDY3NDMsIDB4Njc0MywgMHgwQzgzLCAweDY3NDQsIDB4Njc0NSwgMHgzNTY0LAorICAgIDB4Njc0NiwgMHg2NzQ2LCAweDA2QzYsIDB4Njc0NywgMHg2NzQ3LCAweDM1NjYsIDB4Njc0OCwgMHg2NzQ4LCAweDE4NTQsCisgICAgMHg2NzQ5LCAweDY3NDksIDB4MENGNSwgMHg2NzRBLCAweDY3NEIsIDB4MzU2NywgMHg2NzRDLCAweDY3NEMsIDB4MTg1MSwKKyAgICAweDY3NEQsIDB4Njc0RCwgMHgzNTY5LCAweDY3NEUsIDB4Njc0RSwgMHgwOUQ5LCAweDY3NEYsIDB4Njc0RiwgMHgwRjlFLAorICAgIDB4Njc1MCwgMHg2NzUwLCAweDA0OEIsIDB4Njc1MSwgMHg2NzUxLCAweDA1NjgsIDB4Njc1MiwgMHg2NzUyLCAweDM1NkEsCisgICAgMHg2NzUzLCAweDY3NTMsIDB4MTg1MiwgMHg2NzU0LCAweDY3NTUsIDB4MzU2QiwgMHg2NzU2LCAweDY3NTYsIDB4MTE2OSwKKyAgICAweDY3NTcsIDB4Njc1QiwgMHgzNTZELCAweDY3NUMsIDB4Njc1QywgMHgwNjA0LCAweDY3NUQsIDB4Njc1RCwgMHgzNTcyLAorICAgIDB4Njc1RSwgMHg2NzVFLCAweDE4NTMsIDB4Njc1RiwgMHg2NzVGLCAweDBEOEYsIDB4Njc2MCwgMHg2NzYwLCAweDA2RDcsCisgICAgMHg2NzYxLCAweDY3NjEsIDB4MEU0OCwgMHg2NzYyLCAweDY3NjQsIDB4MzU3MywgMHg2NzY1LCAweDY3NjUsIDB4MDk5RiwKKyAgICAweDY3NjYsIDB4Njc2NywgMHgzNTc2LCAweDY3NjgsIDB4Njc2OCwgMHgxMDE3LCAweDY3NjksIDB4Njc2OSwgMHgxODU1LAorICAgIDB4Njc2QSwgMHg2NzZBLCAweDE4NTgsIDB4Njc2QiwgMHg2NzZDLCAweDM1NzgsIDB4Njc2RCwgMHg2NzZELCAweDA3NzMsCisgICAgMHg2NzZFLCAweDY3NkUsIDB4MzU3QSwgMHg2NzZGLCAweDY3NkYsIDB4MDQxNiwgMHg2NzcwLCAweDY3NzAsIDB4MDhBRCwKKyAgICAweDY3NzEsIDB4Njc3MSwgMHgxRUNDLCAweDY3NzIsIDB4Njc3MiwgMHgxOTBGLCAweDY3NzMsIDB4Njc3MywgMHgxODU5LAorICAgIDB4Njc3NCwgMHg2Nzc0LCAweDM1N0IsIDB4Njc3NSwgMHg2Nzc1LCAweDE4NUMsIDB4Njc3NiwgMHg2Nzc2LCAweDM1N0MsCisgICAgMHg2Nzc3LCAweDY3NzcsIDB4MTg2MSwgMHg2Nzc4LCAweDY3N0IsIDB4MzU3RCwgMHg2NzdDLCAweDY3N0MsIDB4MTg2MiwKKyAgICAweDY3N0QsIDB4Njc3RCwgMHgzNTgxLCAweDY3N0UsIDB4Njc3RSwgMHgwREJFLCAweDY3N0YsIDB4Njc3RiwgMHgwM0YwLAorICAgIDB4Njc4MCwgMHg2NzgwLCAweDM1ODIsIDB4Njc4MSwgMHg2NzgxLCAweDA4MUUsIDB4Njc4MiwgMHg2NzgzLCAweDM1ODMsCisgICAgMHg2Nzg0LCAweDY3ODQsIDB4MDcxMiwgMHg2Nzg1LCAweDY3ODYsIDB4MzU4NSwgMHg2Nzg3LCAweDY3ODcsIDB4MTg1NywKKyAgICAweDY3ODgsIDB4Njc4OCwgMHgzNTg3LCAweDY3ODksIDB4Njc4OSwgMHgwRUE4LCAweDY3OEEsIDB4Njc4QSwgMHgzNTg4LAorICAgIDB4Njc4QiwgMHg2NzhCLCAweDE4NjAsIDB4Njc4QywgMHg2NzhGLCAweDM1ODksIDB4Njc5MCwgMHg2NzkwLCAweDBGMDUsCisgICAgMHg2NzkxLCAweDY3OTQsIDB4MzU4RCwgMHg2Nzk1LCAweDY3OTUsIDB4MTE4RSwgMHg2Nzk2LCAweDY3OTYsIDB4MzU5MSwKKyAgICAweDY3OTcsIDB4Njc5NywgMHgwQTFGLCAweDY3OTgsIDB4Njc5OCwgMHgxODVBLCAweDY3OTksIDB4Njc5OSwgMHgzNTkyLAorICAgIDB4Njc5QSwgMHg2NzlBLCAweDBBQkIsIDB4Njc5QiwgMHg2NzlCLCAweDM1OTMsIDB4Njc5QywgMHg2NzlDLCAweDA3NTQsCisgICAgMHg2NzlELCAweDY3OUQsIDB4MTFBNSwgMHg2NzlFLCAweDY3OUUsIDB4MTg1RSwgMHg2NzlGLCAweDY3QTEsIDB4MzU5NCwKKyAgICAweDY3QTIsIDB4NjdBMiwgMHgwRDc3LCAweDY3QTMsIDB4NjdBMywgMHgxMTI5LCAweDY3QTQsIDB4NjdBNCwgMHgzNTk3LAorICAgIDB4NjdBNSwgMHg2N0E1LCAweDE4NTYsIDB4NjdBNiwgMHg2N0E2LCAweDM1OTgsIDB4NjdBNywgMHg2N0E3LCAweDE4NUIsCisgICAgMHg2N0E4LCAweDY3QTgsIDB4MTg1RCwgMHg2N0E5LCAweDY3QTksIDB4MzU5OSwgMHg2N0FBLCAweDY3QUEsIDB4MEMzNiwKKyAgICAweDY3QUIsIDB4NjdBQiwgMHgwNjgwLCAweDY3QUMsIDB4NjdBQywgMHgzNTlBLCAweDY3QUQsIDB4NjdBRCwgMHgxODVGLAorICAgIDB4NjdBRSwgMHg2N0FFLCAweDM1OUIsIDB4NjdBRiwgMHg2N0FGLCAweDA5NkEsIDB4NjdCMCwgMHg2N0IwLCAweDE4NjgsCisgICAgMHg2N0IxLCAweDY3QjIsIDB4MzU5QywgMHg2N0IzLCAweDY3QjMsIDB4MTg2RCwgMHg2N0I0LCAweDY3QjQsIDB4MzU5RSwKKyAgICAweDY3QjUsIDB4NjdCNSwgMHgxODZCLCAweDY3QjYsIDB4NjdCNiwgMHgwODRGLCAweDY3QjcsIDB4NjdCNywgMHgwODQyLAorICAgIDB4NjdCOCwgMHg2N0I4LCAweDE4NzEsIDB4NjdCOSwgMHg2N0MwLCAweDM1OUYsIDB4NjdDMSwgMHg2N0MxLCAweDE4NzQsCisgICAgMHg2N0MyLCAweDY3QzIsIDB4MzVBNywgMHg2N0MzLCAweDY3QzMsIDB4MTg3MCwgMHg2N0M0LCAweDY3QzQsIDB4MDQ2MywKKyAgICAweDY3QzUsIDB4NjdDRSwgMHgzNUE4LCAweDY3Q0YsIDB4NjdDRiwgMHgwM0UzLCAweDY3RDAsIDB4NjdEMCwgMHgwQjE2LAorICAgIDB4NjdEMSwgMHg2N0QxLCAweDA2QzcsIDB4NjdEMiwgMHg2N0QyLCAweDBDMDEsIDB4NjdEMywgMHg2N0QzLCAweDBDOTksCisgICAgMHg2N0Q0LCAweDY3RDQsIDB4MENCQywgMHg2N0Q1LCAweDY3RDcsIDB4MzVCMiwgMHg2N0Q4LCAweDY3RDgsIDB4MTg2NSwKKyAgICAweDY3RDksIDB4NjdEOSwgMHgxODZBLCAweDY3REEsIDB4NjdEQSwgMHgxODZDLCAweDY3REIsIDB4NjdEQiwgMHgzNUI1LAorICAgIDB4NjdEQywgMHg2N0RDLCAweDA3NEEsIDB4NjdERCwgMHg2N0RELCAweDE4NkUsIDB4NjdERSwgMHg2N0RFLCAweDEyNTIsCisgICAgMHg2N0RGLCAweDY3REYsIDB4MzVCNiwgMHg2N0UwLCAweDY3RTAsIDB4MEI1RSwgMHg2N0UxLCAweDY3RTEsIDB4MzVCNywKKyAgICAweDY3RTIsIDB4NjdFMiwgMHgxODcyLCAweDY3RTMsIDB4NjdFNCwgMHgzNUI4LCAweDY3RTUsIDB4NjdFNSwgMHgwNEIwLAorICAgIDB4NjdFNiwgMHg2N0U4LCAweDM1QkEsIDB4NjdFOSwgMHg2N0U5LCAweDE4NjcsIDB4NjdFQSwgMHg2N0VCLCAweDM1QkQsCisgICAgMHg2N0VDLCAweDY3RUMsIDB4MDg2MCwgMHg2N0VELCAweDY3RUUsIDB4MzVCRiwgMHg2N0VGLCAweDY3RUYsIDB4MDk0RiwKKyAgICAweDY3RjAsIDB4NjdGMCwgMHgxODYzLCAweDY3RjEsIDB4NjdGMSwgMHgxMUY4LCAweDY3RjIsIDB4NjdGMiwgMHgzNUMxLAorICAgIDB4NjdGMywgMHg2N0YzLCAweDBBNDEsIDB4NjdGNCwgMHg2N0Y0LCAweDA0QjgsIDB4NjdGNSwgMHg2N0ZDLCAweDM1QzIsCisgICAgMHg2N0ZELCAweDY3RkQsIDB4MTg3NSwgMHg2N0ZFLCAweDY3RkUsIDB4MzVDQSwgMHg2N0ZGLCAweDY3RkYsIDB4MEQ1OCwKKyAgICAweDY4MDAsIDB4NjgwMCwgMHgxODZGLCAweDY4MDEsIDB4NjgwNCwgMHgzNUNCLCAweDY4MDUsIDB4NjgwNSwgMHgxMTQ1LAorICAgIDB4NjgwNiwgMHg2ODA2LCAweDM1Q0YsIDB4NjgwNywgMHg2ODA3LCAweDA0NTMsIDB4NjgwOCwgMHg2ODA4LCAweDExNUMsCisgICAgMHg2ODA5LCAweDY4MDksIDB4MTg2NCwgMHg2ODBBLCAweDY4MEEsIDB4MTg2NiwgMHg2ODBCLCAweDY4MEIsIDB4MDVFRiwKKyAgICAweDY4MEMsIDB4NjgwQywgMHgxODY5LCAweDY4MEQsIDB4NjgwRCwgMHgzNUQwLCAweDY4MEUsIDB4NjgwRSwgMHgxODczLAorICAgIDB4NjgwRiwgMHg2ODBGLCAweDA5QTMsIDB4NjgxMCwgMHg2ODEwLCAweDM1RDEsIDB4NjgxMSwgMHg2ODExLCAweDBEOEUsCisgICAgMHg2ODEyLCAweDY4MTIsIDB4MzVEMiwgMHg2ODEzLCAweDY4MTMsIDB4MEQ5RCwgMHg2ODE0LCAweDY4MTUsIDB4MzVEMywKKyAgICAweDY4MTYsIDB4NjgxNiwgMHgwQkZCLCAweDY4MTcsIDB4NjgxNywgMHgwOUUwLCAweDY4MTgsIDB4NjgxQywgMHgzNUQ1LAorICAgIDB4NjgxRCwgMHg2ODFELCAweDE4N0YsIDB4NjgxRSwgMHg2ODIwLCAweDM1REEsIDB4NjgyMSwgMHg2ODIxLCAweDBGNkUsCisgICAgMHg2ODIyLCAweDY4MjgsIDB4MzVERCwgMHg2ODI5LCAweDY4MjksIDB4MTg4OCwgMHg2ODJBLCAweDY4MkEsIDB4MTFFOSwKKyAgICAweDY4MkIsIDB4NjgzMSwgMHgzNUU0LCAweDY4MzIsIDB4NjgzMywgMHgxODc2LCAweDY4MzQsIDB4NjgzNiwgMHgzNUVCLAorICAgIDB4NjgzNywgMHg2ODM3LCAweDEwMjIsIDB4NjgzOCwgMHg2ODM4LCAweDA3ODIsIDB4NjgzOSwgMHg2ODM5LCAweDA2RjQsCisgICAgMHg2ODNBLCAweDY4M0IsIDB4MzVFRSwgMHg2ODNDLCAweDY4M0MsIDB4MDZFQywgMHg2ODNELCAweDY4M0QsIDB4MTExNywKKyAgICAweDY4M0UsIDB4NjgzRSwgMHgxODg1LCAweDY4M0YsIDB4NjgzRiwgMHgzNUYwLCAweDY4NDAsIDB4Njg0MCwgMHgxODg0LAorICAgIDB4Njg0MSwgMHg2ODQxLCAweDE4ODIsIDB4Njg0MiwgMHg2ODQyLCAweDA3NDksIDB4Njg0MywgMHg2ODQzLCAweDBFMjUsCisgICAgMHg2ODQ0LCAweDY4NDQsIDB4MTg3QywgMHg2ODQ1LCAweDY4NDUsIDB4MEVCNSwgMHg2ODQ2LCAweDY4NDYsIDB4MDk3RiwKKyAgICAweDY4NDcsIDB4Njg0NywgMHgzNUYxLCAweDY4NDgsIDB4Njg0OCwgMHgwM0MzLCAweDY4NDksIDB4Njg0OSwgMHgxODg3LAorICAgIDB4Njg0QSwgMHg2ODRBLCAweDE4ODYsIDB4Njg0QiwgMHg2ODRCLCAweDM1RjIsIDB4Njg0QywgMHg2ODRDLCAweDEyMUQsCisgICAgMHg2ODRELCAweDY4NEQsIDB4MzVGMywgMHg2ODRFLCAweDY4NEUsIDB4MTg3QSwgMHg2ODRGLCAweDY4NEYsIDB4MzVGNCwKKyAgICAweDY4NTAsIDB4Njg1MCwgMHgwRTVBLCAweDY4NTEsIDB4Njg1MSwgMHgwQ0RDLCAweDY4NTIsIDB4Njg1MiwgMHgzNUY1LAorICAgIDB4Njg1MywgMHg2ODUzLCAweDA3Q0QsIDB4Njg1NCwgMHg2ODU0LCAweDA4QUMsIDB4Njg1NSwgMHg2ODU1LCAweDE4ODAsCisgICAgMHg2ODU2LCAweDY4NUYsIDB4MzVGNiwgMHg2ODYwLCAweDY4NjEsIDB4MTg3OCwgMHg2ODYyLCAweDY4NjIsIDB4MTg3QiwKKyAgICAweDY4NjMsIDB4Njg2MywgMHgwNTk2LCAweDY4NjQsIDB4Njg2NCwgMHgxODdELCAweDY4NjUsIDB4Njg2NSwgMHgwQzQyLAorICAgIDB4Njg2NiwgMHg2ODY2LCAweDE4ODEsIDB4Njg2NywgMHg2ODY3LCAweDE4ODMsIDB4Njg2OCwgMHg2ODY4LCAweDA4ODEsCisgICAgMHg2ODY5LCAweDY4NjksIDB4MTIwQiwgMHg2ODZBLCAweDY4NkEsIDB4MzYwMCwgMHg2ODZCLCAweDY4NkIsIDB4MTg4RSwKKyAgICAweDY4NkMsIDB4Njg3MywgMHgzNjAxLCAweDY4NzQsIDB4Njg3NCwgMHgxODhCLCAweDY4NzUsIDB4Njg3NSwgMHgzNjA5LAorICAgIDB4Njg3NiwgMHg2ODc2LCAweDBFNjEsIDB4Njg3NywgMHg2ODc3LCAweDE4OEMsIDB4Njg3OCwgMHg2ODgwLCAweDM2MEEsCisgICAgMHg2ODgxLCAweDY4ODEsIDB4MEEwMywgMHg2ODgyLCAweDY4ODIsIDB4MzYxMywgMHg2ODgzLCAweDY4ODMsIDB4MTg3RSwKKyAgICAweDY4ODQsIDB4Njg4NCwgMHgzNjE0LCAweDY4ODUsIDB4Njg4NSwgMHgwQUJDLCAweDY4ODYsIDB4Njg4NiwgMHgwM0ZCLAorICAgIDB4Njg4NywgMHg2ODhFLCAweDM2MTUsIDB4Njg4RiwgMHg2ODhGLCAweDE4OEEsIDB4Njg5MCwgMHg2ODkyLCAweDM2MUQsCisgICAgMHg2ODkzLCAweDY4OTMsIDB4MTg4RCwgMHg2ODk0LCAweDY4OTYsIDB4MzYyMCwgMHg2ODk3LCAweDY4OTcsIDB4MDZGQywKKyAgICAweDY4OTgsIDB4Njg5OCwgMHgyNDZBLCAweDY4OTksIDB4Njg5QywgMHgzNjIzLCAweDY4OUQsIDB4Njg5RCwgMHgyMTc1LAorICAgIDB4Njg5RSwgMHg2ODlFLCAweDM2MjcsIDB4Njg5RiwgMHg2ODlGLCAweDI0NkQsIDB4NjhBMCwgMHg2OEExLCAweDM2MjgsCisgICAgMHg2OEEyLCAweDY4QTIsIDB4MEQwQiwgMHg2OEEzLCAweDY4QTUsIDB4MzYyQSwgMHg2OEE2LCAweDY4QTYsIDB4MEFEMywKKyAgICAweDY4QTcsIDB4NjhBNywgMHgwRUVGLCAweDY4QTgsIDB4NjhBOCwgMHgwOUQxLCAweDY4QTksIDB4NjhBQywgMHgzNjJELAorICAgIDB4NjhBRCwgMHg2OEFELCAweDBERTgsIDB4NjhBRSwgMHg2OEFFLCAweDM2MzEsIDB4NjhBRiwgMHg2OEFGLCAweDBFMzAsCisgICAgMHg2OEIwLCAweDY4QjAsIDB4MEY4MCwgMHg2OEIxLCAweDY4QjIsIDB4MzYzMiwgMHg2OEIzLCAweDY4QjMsIDB4MEQ3OCwKKyAgICAweDY4QjQsIDB4NjhCNCwgMHgzNjM0LCAweDY4QjUsIDB4NjhCNSwgMHgxODg5LCAweDY4QjYsIDB4NjhCRiwgMHgzNjM1LAorICAgIDB4NjhDMCwgMHg2OEMwLCAweDA4NUYsIDB4NjhDMSwgMHg2OEMxLCAweDM2M0YsIDB4NjhDMiwgMHg2OEMyLCAweDE4OEYsCisgICAgMHg2OEMzLCAweDY4QzgsIDB4MzY0MCwgMHg2OEM5LCAweDY4QzksIDB4MEFFMywgMHg2OENBLCAweDY4Q0EsIDB4MzY0NiwKKyAgICAweDY4Q0IsIDB4NjhDQiwgMHgwQzA0LCAweDY4Q0MsIDB4NjhDQywgMHgzNjQ3LCAweDY4Q0QsIDB4NjhDRCwgMHgwNzUwLAorICAgIDB4NjhDRSwgMHg2OEQxLCAweDM2NDgsIDB4NjhEMiwgMHg2OEQyLCAweDAzRkYsIDB4NjhEMywgMHg2OEQ0LCAweDM2NEMsCisgICAgMHg2OEQ1LCAweDY4RDUsIDB4MTIzNSwgMHg2OEQ2LCAweDY4RDYsIDB4MjQ2QiwgMHg2OEQ3LCAweDY4RDcsIDB4MjI1RiwKKyAgICAweDY4RDgsIDB4NjhEOCwgMHgwODFGLCAweDY4RDksIDB4NjhEOSwgMHgzNjRFLCAweDY4REEsIDB4NjhEQSwgMHgwQkIwLAorICAgIDB4NjhEQiwgMHg2OERFLCAweDM2NEYsIDB4NjhERiwgMHg2OERGLCAweDFFQ0UsIDB4NjhFMCwgMHg2OEUwLCAweDBFMTcsCisgICAgMHg2OEUxLCAweDY4RTIsIDB4MzY1MywgMHg2OEUzLCAweDY4RTMsIDB4MTg5QSwgMHg2OEU0LCAweDY4RTYsIDB4MzY1NSwKKyAgICAweDY4RTcsIDB4NjhFNywgMHgyMjcyLCAweDY4RTgsIDB4NjhFRCwgMHgzNjU4LCAweDY4RUUsIDB4NjhFRSwgMHgwQ0U2LAorICAgIDB4NjhFRiwgMHg2OEVGLCAweDM2NUUsIDB4NjhGMCwgMHg2OEYwLCAweDE4OTYsIDB4NjhGMSwgMHg2OEYxLCAweDA5Q0QsCisgICAgMHg2OEYyLCAweDY4RjQsIDB4MzY1RiwgMHg2OEY1LCAweDY4RjUsIDB4MDk1MCwgMHg2OEY2LCAweDY4RjgsIDB4MzY2MiwKKyAgICAweDY4RjksIDB4NjhGOSwgMHgxODk0LCAweDY4RkEsIDB4NjhGQSwgMHgwNzMwLCAweDY4RkIsIDB4NjhGQiwgMHgzNjY1LAorICAgIDB4NjhGQywgMHg2OEZDLCAweDE4OTEsIDB4NjhGRCwgMHg2OEZGLCAweDM2NjYsIDB4NjkwMCwgMHg2OTAwLCAweDM2NjksCisgICAgMHg2OTAxLCAweDY5MDEsIDB4MTg5OCwgMHg2OTAyLCAweDY5MDQsIDB4MzY2QSwgMHg2OTA1LCAweDY5MDUsIDB4MTA1NSwKKyAgICAweDY5MDYsIDB4NjkwQSwgMHgzNjZELCAweDY5MEIsIDB4NjkwQiwgMHgxODk3LCAweDY5MEMsIDB4NjkwQywgMHgzNjcyLAorICAgIDB4NjkwRCwgMHg2OTBELCAweDExQjEsIDB4NjkwRSwgMHg2OTBFLCAweDEyMTIsIDB4NjkwRiwgMHg2OTBGLCAweDI0NzMsCisgICAgMHg2OTEwLCAweDY5MTAsIDB4MTg5QiwgMHg2OTExLCAweDY5MTEsIDB4MzY3MywgMHg2OTEyLCAweDY5MTIsIDB4MDg4OCwKKyAgICAweDY5MTMsIDB4NjkxRSwgMHgzNjc0LCAweDY5MUYsIDB4NjkyMCwgMHgxODkyLCAweDY5MjEsIDB4NjkyMywgMHgzNjgwLAorICAgIDB4NjkyNCwgMHg2OTI0LCAweDE4OTUsIDB4NjkyNSwgMHg2OTJDLCAweDM2ODMsIDB4NjkyRCwgMHg2OTJELCAweDBFODcsCisgICAgMHg2OTJFLCAweDY5MkYsIDB4MzY4QiwgMHg2OTMwLCAweDY5MzAsIDB4MTAzMywgMHg2OTMxLCAweDY5MzMsIDB4MzY4RCwKKyAgICAweDY5MzQsIDB4NjkzNCwgMHgxOEE2LCAweDY5MzUsIDB4NjkzOCwgMHgzNjkwLCAweDY5MzksIDB4NjkzOSwgMHgxODlELAorICAgIDB4NjkzQSwgMHg2OTNDLCAweDM2OTQsIDB4NjkzRCwgMHg2OTNELCAweDA1MkQsIDB4NjkzRSwgMHg2OTNFLCAweDM2OTcsCisgICAgMHg2OTNGLCAweDY5M0YsIDB4MDUzRSwgMHg2OTQwLCAweDY5NDEsIDB4MzY5OCwgMHg2OTQyLCAweDY5NDIsIDB4MTg5RiwKKyAgICAweDY5NDMsIDB4Njk0OSwgMHgzNjlBLCAweDY5NEEsIDB4Njk0QSwgMHgyMUZFLCAweDY5NEIsIDB4Njk1MiwgMHgzNkExLAorICAgIDB4Njk1MywgMHg2OTUzLCAweDFFRkUsIDB4Njk1NCwgMHg2OTU0LCAweDBGNzMsIDB4Njk1NSwgMHg2OTU2LCAweDM2QTksCisgICAgMHg2OTU3LCAweDY5NTcsIDB4MTg5OSwgMHg2OTU4LCAweDY5NTksIDB4MzZBQiwgMHg2OTVBLCAweDY5NUEsIDB4MDUyMywKKyAgICAweDY5NUIsIDB4Njk1QywgMHgzNkFELCAweDY5NUQsIDB4Njk1RCwgMHgxOEEwLCAweDY5NUUsIDB4Njk1RSwgMHgwOUNFLAorICAgIDB4Njk1RiwgMHg2OTVGLCAweDM2QUYsIDB4Njk2MCwgMHg2OTYwLCAweDE4OUUsIDB4Njk2MSwgMHg2OTYyLCAweDM2QjAsCisgICAgMHg2OTYzLCAweDY5NjMsIDB4MThBRCwgMHg2OTY0LCAweDY5NjUsIDB4MzZCMiwgMHg2OTY2LCAweDY5NjYsIDB4MThBQywKKyAgICAweDY5NjcsIDB4Njk2NywgMHgzNkI0LCAweDY5NjgsIDB4Njk2OCwgMHgyNDc1LCAweDY5NjksIDB4Njk2QSwgMHgzNkI1LAorICAgIDB4Njk2QiwgMHg2OTZCLCAweDE4QTIsIDB4Njk2QywgMHg2OTZDLCAweDM2QjcsIDB4Njk2RCwgMHg2OTZELCAweDIyMEEsCisgICAgMHg2OTZFLCAweDY5NkUsIDB4MTg5MCwgMHg2OTZGLCAweDY5NzAsIDB4MzZCOCwgMHg2OTcxLCAweDY5NzEsIDB4MTg5QywKKyAgICAweDY5NzIsIDB4Njk3NCwgMHgzNkJBLCAweDY5NzUsIDB4Njk3NSwgMHgxRjZGLCAweDY5NzYsIDB4Njk3NiwgMHgzNkJELAorICAgIDB4Njk3NywgMHg2OTc3LCAweDA5MzksIDB4Njk3OCwgMHg2OTc4LCAweDE4QTUsIDB4Njk3OSwgMHg2OTc5LCAweDE4QUUsCisgICAgMHg2OTdBLCAweDY5N0IsIDB4MzZCRSwgMHg2OTdDLCAweDY5N0MsIDB4MEE0QywgMHg2OTdELCAweDY5N0YsIDB4MzZDMCwKKyAgICAweDY5ODAsIDB4Njk4MCwgMHgxOEEzLCAweDY5ODEsIDB4Njk4MSwgMHgzNkMzLCAweDY5ODIsIDB4Njk4MiwgMHgwNkMwLAorICAgIDB4Njk4MywgMHg2OTgzLCAweDM2QzQsIDB4Njk4NCwgMHg2OTg0LCAweDE4QTEsIDB4Njk4NSwgMHg2OTg1LCAweDM2QzUsCisgICAgMHg2OTg2LCAweDY5ODYsIDB4MTBDMSwgMHg2OTg3LCAweDY5ODgsIDB4MThBOCwgMHg2OTg5LCAweDY5ODksIDB4MThBQiwKKyAgICAweDY5OEEsIDB4Njk4QywgMHgzNkM2LCAweDY5OEQsIDB4Njk4RCwgMHgxOEJCLCAweDY5OEUsIDB4Njk5MywgMHgzNkM5LAorICAgIDB4Njk5NCwgMHg2OTk0LCAweDA5QjEsIDB4Njk5NSwgMHg2OTk1LCAweDE4QjksIDB4Njk5NiwgMHg2OTk3LCAweDM2Q0YsCisgICAgMHg2OTk4LCAweDY5OTgsIDB4MThBNCwgMHg2OTk5LCAweDY5OUEsIDB4MzZEMSwgMHg2OTlCLCAweDY5OUIsIDB4MThBRiwKKyAgICAweDY5OUMsIDB4Njk5QywgMHgwM0ZDLCAweDY5OUQsIDB4NjlBNiwgMHgzNkQzLCAweDY5QTcsIDB4NjlBNywgMHgxOEIwLAorICAgIDB4NjlBOCwgMHg2OUE4LCAweDExNDYsIDB4NjlBOSwgMHg2OUE5LCAweDM2REQsIDB4NjlBQSwgMHg2OUFBLCAweDI0NjgsCisgICAgMHg2OUFCLCAweDY5QUIsIDB4MThCMiwgMHg2OUFDLCAweDY5QUMsIDB4MzZERSwgMHg2OUFELCAweDY5QUQsIDB4MThCMywKKyAgICAweDY5QUUsIDB4NjlBRSwgMHgyMTAwLCAweDY5QUYsIDB4NjlCMCwgMHgzNkRGLCAweDY5QjEsIDB4NjlCMSwgMHgxOEI1LAorICAgIDB4NjlCMiwgMHg2OUIzLCAweDM2RTEsIDB4NjlCNCwgMHg2OUI0LCAweDBBM0EsIDB4NjlCNSwgMHg2OUI2LCAweDM2RTMsCisgICAgMHg2OUI3LCAweDY5QjcsIDB4MEM5MSwgMHg2OUI4LCAweDY5QkEsIDB4MzZFNSwgMHg2OUJCLCAweDY5QkIsIDB4MThCMSwKKyAgICAweDY5QkMsIDB4NjlCRSwgMHgzNkU4LCAweDY5QkYsIDB4NjlCRiwgMHgyNDc2LCAweDY5QzAsIDB4NjlDMCwgMHgzNkVCLAorICAgIDB4NjlDMSwgMHg2OUMxLCAweDE4QjYsIDB4NjlDMiwgMHg2OUM5LCAweDM2RUMsIDB4NjlDQSwgMHg2OUNBLCAweDE4QjcsCisgICAgMHg2OUNCLCAweDY5Q0IsIDB4MUYyNywgMHg2OUNDLCAweDY5Q0MsIDB4MThBNywgMHg2OUNELCAweDY5Q0QsIDB4MjBENywKKyAgICAweDY5Q0UsIDB4NjlDRSwgMHgxOEFBLCAweDY5Q0YsIDB4NjlDRiwgMHgzNkY0LCAweDY5RDAsIDB4NjlEMCwgMHgwN0M2LAorICAgIDB4NjlEMSwgMHg2OUQzLCAweDM2RjUsIDB4NjlENCwgMHg2OUQ0LCAweDE4QjQsIDB4NjlENSwgMHg2OURBLCAweDM2RjgsCisgICAgMHg2OURCLCAweDY5REIsIDB4MDg2QSwgMHg2OURDLCAweDY5REUsIDB4MzZGRSwgMHg2OURGLCAweDY5REYsIDB4MThCOCwKKyAgICAweDY5RTAsIDB4NjlFMCwgMHgxOEJBLCAweDY5RTEsIDB4NjlFNiwgMHgzNzAxLCAweDY5RTcsIDB4NjlFNywgMHgyNDdDLAorICAgIDB4NjlFOCwgMHg2OUVDLCAweDM3MDcsIDB4NjlFRCwgMHg2OUVELCAweDE4QkUsIDB4NjlFRSwgMHg2OUYxLCAweDM3MEMsCisgICAgMHg2OUYyLCAweDY5RjIsIDB4MThDMiwgMHg2OUYzLCAweDY5RjMsIDB4MUZBMSwgMHg2OUY0LCAweDY5RkMsIDB4MzcxMCwKKyAgICAweDY5RkQsIDB4NjlGRCwgMHgwNEEyLCAweDY5RkUsIDB4NjlGRSwgMHgzNzE5LCAweDY5RkYsIDB4NjlGRiwgMHgxOEJDLAorICAgIDB4NkEwMCwgMHg2QTAwLCAweDM3MUEsIDB4NkEwMSwgMHg2QTAxLCAweDIyQUEsIDB4NkEwMiwgMHg2QTAyLCAweDIwMDUsCisgICAgMHg2QTAzLCAweDZBMDQsIDB4MzcxQiwgMHg2QTA1LCAweDZBMDUsIDB4MjQ2QywgMHg2QTA2LCAweDZBMDksIDB4MzcxRCwKKyAgICAweDZBMEEsIDB4NkEwQSwgMHgwNjRCLCAweDZBMEIsIDB4NkExMiwgMHgzNzIxLCAweDZBMTMsIDB4NkExMywgMHgyMDNFLAorICAgIDB4NkExNCwgMHg2QTE2LCAweDM3MjksIDB4NkExNywgMHg2QTE4LCAweDE4QkYsIDB4NkExOSwgMHg2QTE5LCAweDFFNEMsCisgICAgMHg2QTFBLCAweDZBMUQsIDB4MzcyQywgMHg2QTFFLCAweDZBMUUsIDB4MjEzQSwgMHg2QTFGLCAweDZBMUYsIDB4MTE2MiwKKyAgICAweDZBMjAsIDB4NkEyMCwgMHgzNzMwLCAweDZBMjEsIDB4NkEyMSwgMHgwQjA2LCAweDZBMjIsIDB4NkEyMiwgMHgzNzMxLAorICAgIDB4NkEyMywgMHg2QTIzLCAweDIyMDQsIDB4NkEyNCwgMHg2QTI3LCAweDM3MzIsIDB4NkEyOCwgMHg2QTI4LCAweDE4Q0MsCisgICAgMHg2QTI5LCAweDZBMjksIDB4MzczNiwgMHg2QTJBLCAweDZBMkEsIDB4MDc5OCwgMHg2QTJCLCAweDZBMkUsIDB4MzczNywKKyAgICAweDZBMkYsIDB4NkEyRiwgMHgxOEJELCAweDZBMzAsIDB4NkEzMCwgMHgzNzNCLCAweDZBMzEsIDB4NkEzMSwgMHgxMDg4LAorICAgIDB4NkEzMiwgMHg2QTM0LCAweDM3M0MsIDB4NkEzNSwgMHg2QTM1LCAweDE4QzgsIDB4NkEzNiwgMHg2QTM3LCAweDM3M0YsCisgICAgMHg2QTM4LCAweDZBMzgsIDB4MjBDMywgMHg2QTM5LCAweDZBMzksIDB4MjE0MCwgMHg2QTNBLCAweDZBM0EsIDB4MjQ3NywKKyAgICAweDZBM0IsIDB4NkEzQywgMHgzNzQxLCAweDZBM0QsIDB4NkEzRCwgMHgxOENCLCAweDZBM0UsIDB4NkEzRSwgMHgxOEM0LAorICAgIDB4NkEzRiwgMHg2QTQzLCAweDM3NDMsIDB4NkE0NCwgMHg2QTQ0LCAweDE4QzMsIDB4NkE0NSwgMHg2QTQ2LCAweDM3NDgsCisgICAgMHg2QTQ3LCAweDZBNDcsIDB4MEMzRSwgMHg2QTQ4LCAweDZBNDgsIDB4MjQ3NCwgMHg2QTQ5LCAweDZBNEEsIDB4Mzc0QSwKKyAgICAweDZBNEIsIDB4NkE0QiwgMHgyMERELCAweDZBNEMsIDB4NkE0RiwgMHgzNzRDLCAweDZBNTAsIDB4NkE1MCwgMHgxOEM2LAorICAgIDB4NkE1MSwgMHg2QTU3LCAweDM3NTAsIDB4NkE1OCwgMHg2QTU4LCAweDE4Q0QsIDB4NkE1OSwgMHg2QTU5LCAweDA0RUQsCisgICAgMHg2QTVBLCAweDZBNUEsIDB4Mzc1NywgMHg2QTVCLCAweDZBNUIsIDB4MThDNywgMHg2QTVDLCAweDZBNUUsIDB4Mzc1OCwKKyAgICAweDZBNUYsIDB4NkE1RiwgMHgxRjY4LCAweDZBNjAsIDB4NkE2MCwgMHgzNzVCLCAweDZBNjEsIDB4NkE2MSwgMHgwRjVELAorICAgIDB4NkE2MiwgMHg2QTYyLCAweDIxODUsIDB4NkE2MywgMHg2QTY0LCAweDM3NUMsIDB4NkE2NSwgMHg2QTY1LCAweDE4QzEsCisgICAgMHg2QTY2LCAweDZBNzAsIDB4Mzc1RSwgMHg2QTcxLCAweDZBNzEsIDB4MDUxQywgMHg2QTcyLCAweDZBNzgsIDB4Mzc2OSwKKyAgICAweDZBNzksIDB4NkE3OSwgMHgxOENBLCAweDZBN0EsIDB4NkE3QiwgMHgzNzcwLCAweDZBN0MsIDB4NkE3QywgMHgxOENFLAorICAgIDB4NkE3RCwgMHg2QTdGLCAweDM3NzIsIDB4NkE4MCwgMHg2QTgwLCAweDBFMDcsIDB4NkE4MSwgMHg2QTgzLCAweDM3NzUsCisgICAgMHg2QTg0LCAweDZBODQsIDB4MEYxQSwgMHg2QTg1LCAweDZBODgsIDB4Mzc3OCwgMHg2QTg5LCAweDZBODksIDB4MjQ3MiwKKyAgICAweDZBOEEsIDB4NkE4RCwgMHgzNzdDLCAweDZBOEUsIDB4NkE4RSwgMHgxOEM5LCAweDZBOEYsIDB4NkE4RiwgMHgzNzgwLAorICAgIDB4NkE5MCwgMHg2QTkwLCAweDE4RDAsIDB4NkE5MSwgMHg2QTkxLCAweDE4Q0YsIDB4NkE5MiwgMHg2QTkzLCAweDM3ODEsCisgICAgMHg2QTk0LCAweDZBOTQsIDB4MUVCNSwgMHg2QTk1LCAweDZBOTYsIDB4Mzc4MywgMHg2QTk3LCAweDZBOTcsIDB4MThEMiwKKyAgICAweDZBOTgsIDB4NkE5QiwgMHgzNzg1LCAweDZBOUMsIDB4NkE5QywgMHgyNDc4LCAweDZBOUQsIDB4NkE5RiwgMHgzNzg5LAorICAgIDB4NkFBMCwgMHg2QUEwLCAweDE4QzUsIDB4NkFBMSwgMHg2QUExLCAweDM3OEMsIDB4NkFBMiwgMHg2QUEyLCAweDFGOEIsCisgICAgMHg2QUEzLCAweDZBQTMsIDB4MjQ4NCwgMHg2QUE0LCAweDZBQTgsIDB4Mzc4RCwgMHg2QUE5LCAweDZBQTksIDB4MThEMSwKKyAgICAweDZBQUEsIDB4NkFBQSwgMHgzNzkyLCAweDZBQUIsIDB4NkFBQiwgMHgxOEQzLCAweDZBQUMsIDB4NkFBQywgMHgwQUNGLAorICAgIDB4NkFBRCwgMHg2QUFFLCAweDM3OTMsIDB4NkFBRiwgMHg2QUFGLCAweDI2OTksIDB4NkFCMCwgMHg2QUIyLCAweDM3OTUsCisgICAgMHg2QUIzLCAweDZBQjMsIDB4MjQ4MiwgMHg2QUI0LCAweDZBQjcsIDB4Mzc5OCwgMHg2QUI4LCAweDZBQjgsIDB4MjBBMSwKKyAgICAweDZBQjksIDB4NkFCQSwgMHgzNzlDLCAweDZBQkIsIDB4NkFCQiwgMHgxRjkyLCAweDZBQkMsIDB4NkFDMiwgMHgzNzlFLAorICAgIDB4NkFDMywgMHg2QUMzLCAweDFGMzgsIDB4NkFDNCwgMHg2QUQyLCAweDM3QTUsIDB4NkFEMywgMHg2QUQzLCAweDI0ODUsCisgICAgMHg2QUQ0LCAweDZBRDksIDB4MzdCNCwgMHg2QURBLCAweDZBREEsIDB4MjQ4MCwgMHg2QURCLCAweDZBREIsIDB4MjQ2RSwKKyAgICAweDZBREMsIDB4NkFEQywgMHgzN0JBLCAweDZBREQsIDB4NkFERCwgMHgyNDdCLCAweDZBREUsIDB4NkFERSwgMHgyNDg2LAorICAgIDB4NkFERiwgMHg2QURGLCAweDI0NzEsIDB4NkFFMCwgMHg2QUU2LCAweDM3QkIsIDB4NkFFNywgMHg2QUU3LCAweDI0ODMsCisgICAgMHg2QUU4LCAweDZBRTgsIDB4MjQ3MCwgMHg2QUU5LCAweDZBRTksIDB4MzdDMiwgMHg2QUVBLCAweDZBRUEsIDB4MjQ2OSwKKyAgICAweDZBRUIsIDB4NkFFQiwgMHgzN0MzLCAweDZBRUMsIDB4NkFFQywgMHgyNDdGLCAweDZBRUQsIDB4NkFGMiwgMHgzN0M0LAorICAgIDB4NkFGMywgMHg2QUYzLCAweDI0NkYsIDB4NkFGNCwgMHg2QUY3LCAweDM3Q0EsIDB4NkFGOCwgMHg2QUY4LCAweDI0ODEsCisgICAgMHg2QUY5LCAweDZBRkEsIDB4MzdDRSwgMHg2QUZCLCAweDZBRkIsIDB4MjIyMCwgMHg2QUZDLCAweDZBRkYsIDB4MzdEMCwKKyAgICAweDZCMDAsIDB4NkIwMywgMHgzN0Q0LCAweDZCMDQsIDB4NkIwNCwgMHgxRkY1LCAweDZCMDUsIDB4NkIwOSwgMHgzN0Q4LAorICAgIDB4NkIwQSwgMHg2QjBBLCAweDIwRjQsIDB4NkIwQiwgMHg2QjBFLCAweDM3REQsIDB4NkIwRiwgMHg2QjBGLCAweDI0N0QsCisgICAgMHg2QjEwLCAweDZCMTEsIDB4MzdFMSwgMHg2QjEyLCAweDZCMTIsIDB4MjQ3OSwgMHg2QjEzLCAweDZCMTUsIDB4MzdFMywKKyAgICAweDZCMTYsIDB4NkIxNiwgMHgyNDdFLCAweDZCMTcsIDB4NkIxRCwgMHgzN0U2LCAweDZCMUUsIDB4NkIxRSwgMHgyNDdBLAorICAgIDB4NkIxRiwgMHg2QjFGLCAweDM3RUQsIDB4NkIyMCwgMHg2QjIwLCAweDBDMzQsIDB4NkIyMSwgMHg2QjIxLCAweDA1NTEsCisgICAgMHg2QjIyLCAweDZCMjIsIDB4MDdDQiwgMHg2QjIzLCAweDZCMjMsIDB4MEY4QiwgMHg2QjI0LCAweDZCMjQsIDB4MTlCMSwKKyAgICAweDZCMjUsIDB4NkIyNiwgMHgzN0VFLCAweDZCMjcsIDB4NkIyNywgMHgwQjc4LCAweDZCMjgsIDB4NkIzMSwgMHgzN0YwLAorICAgIDB4NkIzMiwgMHg2QjMyLCAweDEwRTAsIDB4NkIzMywgMHg2QjM2LCAweDM3RkEsIDB4NkIzNywgMHg2QjM3LCAweDE5QjIsCisgICAgMHg2QjM4LCAweDZCMzgsIDB4MzdGRSwgMHg2QjM5LCAweDZCMzksIDB4MTlCMywgMHg2QjNBLCAweDZCM0EsIDB4MEJGQSwKKyAgICAweDZCM0IsIDB4NkIzQywgMHgzN0ZGLCAweDZCM0QsIDB4NkIzRCwgMHgyMEUzLCAweDZCM0UsIDB4NkIzRSwgMHgwOTdCLAorICAgIDB4NkIzRiwgMHg2QjQyLCAweDM4MDEsIDB4NkI0MywgMHg2QjQzLCAweDE5QjQsIDB4NkI0NCwgMHg2QjQ1LCAweDM4MDUsCisgICAgMHg2QjQ2LCAweDZCNDYsIDB4MTlCNSwgMHg2QjQ3LCAweDZCNDcsIDB4MEY3NSwgMHg2QjQ4LCAweDZCNDgsIDB4MzgwNywKKyAgICAweDZCNDksIDB4NkI0OSwgMHgwQzM1LCAweDZCNEEsIDB4NkI0QiwgMHgzODA4LCAweDZCNEMsIDB4NkI0QywgMHgwNkUzLAorICAgIDB4NkI0RCwgMHg2QjRGLCAweDM4MEEsIDB4NkI1MCwgMHg2QjUwLCAweDIwQUQsIDB4NkI1MSwgMHg2QjU4LCAweDM4MEQsCisgICAgMHg2QjU5LCAweDZCNTksIDB4MTlCNiwgMHg2QjVBLCAweDZCNUUsIDB4MzgxNSwgMHg2QjVGLCAweDZCNUYsIDB4MjRDQiwKKyAgICAweDZCNjAsIDB4NkI2MCwgMHgzODFBLCAweDZCNjEsIDB4NkI2MSwgMHgxRjUzLCAweDZCNjIsIDB4NkI2MiwgMHgxMUI4LAorICAgIDB4NkI2MywgMHg2QjYzLCAweDExOUUsIDB4NkI2NCwgMHg2QjY0LCAweDA1NEUsIDB4NkI2NSwgMHg2QjY1LCAweDA0ODQsCisgICAgMHg2QjY2LCAweDZCNjYsIDB4MEVGMywgMHg2QjY3LCAweDZCNjcsIDB4MEMwNiwgMHg2QjY4LCAweDZCNjksIDB4MzgxQiwKKyAgICAweDZCNkEsIDB4NkI2QSwgMHgwRTkyLCAweDZCNkIsIDB4NkI3MSwgMHgzODFELCAweDZCNzIsIDB4NkI3MiwgMHgyMTU5LAorICAgIDB4NkI3MywgMHg2Qjc2LCAweDM4MjQsIDB4NkI3NywgMHg2Qjc3LCAweDIwMTMsIDB4NkI3OCwgMHg2Qjc4LCAweDFGMzMsCisgICAgMHg2Qjc5LCAweDZCNzksIDB4MDU3OCwgMHg2QjdBLCAweDZCN0EsIDB4MzgyOCwgMHg2QjdCLCAweDZCN0IsIDB4MERCNSwKKyAgICAweDZCN0MsIDB4NkI3QywgMHgwODUyLCAweDZCN0QsIDB4NkI4MCwgMHgzODI5LCAweDZCODEsIDB4NkI4MiwgMHgxOEQ2LAorICAgIDB4NkI4MywgMHg2QjgzLCAweDEwMTMsIDB4NkI4NCwgMHg2Qjg0LCAweDE4RDksIDB4NkI4NSwgMHg2Qjg1LCAweDM4MkQsCisgICAgMHg2Qjg2LCAweDZCODYsIDB4MDU3QywgMHg2Qjg3LCAweDZCODcsIDB4MThEOCwgMHg2Qjg4LCAweDZCODgsIDB4MzgyRSwKKyAgICAweDZCODksIDB4NkI4OSwgMHgwRkRDLCAweDZCOEEsIDB4NkI4QSwgMHgwRDc5LCAweDZCOEIsIDB4NkI4QiwgMHgwNDk3LAorICAgIDB4NkI4QywgMHg2QjhDLCAweDM4MkYsIDB4NkI4RCwgMHg2QjhELCAweDE4REMsIDB4NkI4RSwgMHg2QjkxLCAweDM4MzAsCisgICAgMHg2QjkyLCAweDZCOTMsIDB4MThEQSwgMHg2Qjk0LCAweDZCOTUsIDB4MzgzNCwgMHg2Qjk2LCAweDZCOTYsIDB4MTFCMiwKKyAgICAweDZCOTcsIDB4NkI5NywgMHgzODM2LCAweDZCOTgsIDB4NkI5OCwgMHgxRTVDLCAweDZCOTksIDB4NkI5OSwgMHgzODM3LAorICAgIDB4NkI5QSwgMHg2QjlCLCAweDE4REQsIDB4NkI5QywgMHg2QjlELCAweDM4MzgsIDB4NkI5RSwgMHg2QjlFLCAweDI0ODgsCisgICAgMHg2QjlGLCAweDZCQTAsIDB4MzgzQSwgMHg2QkExLCAweDZCQTEsIDB4MThERiwgMHg2QkEyLCAweDZCQTMsIDB4MzgzQywKKyAgICAweDZCQTQsIDB4NkJBNCwgMHgyNDg3LCAweDZCQTUsIDB4NkJBOSwgMHgzODNFLCAweDZCQUEsIDB4NkJBQSwgMHgxOEUwLAorICAgIDB4NkJBQiwgMHg2QkFCLCAweDI0OEEsIDB4NkJBQywgMHg2QkFELCAweDM4NDMsIDB4NkJBRSwgMHg2QkFFLCAweDI0ODksCisgICAgMHg2QkFGLCAweDZCQUYsIDB4MjQ4QiwgMHg2QkIwLCAweDZCQjEsIDB4Mzg0NSwgMHg2QkIyLCAweDZCQjIsIDB4MUY4MywKKyAgICAweDZCQjMsIDB4NkJCMywgMHgxOUJELCAweDZCQjQsIDB4NkJCNCwgMHgwQjdBLCAweDZCQjUsIDB4NkJCNSwgMHgwNjBELAorICAgIDB4NkJCNiwgMHg2QkI2LCAweDM4NDcsIDB4NkJCNywgMHg2QkI3LCAweDEwN0EsIDB4NkJCOCwgMHg2QkI5LCAweDM4NDgsCisgICAgMHg2QkJBLCAweDZCQkEsIDB4MjEwRiwgMHg2QkJCLCAweDZCQkIsIDB4MUZEQiwgMHg2QkJDLCAweDZCQkUsIDB4Mzg0QSwKKyAgICAweDZCQkYsIDB4NkJCRiwgMHgwNUNGLCAweDZCQzAsIDB4NkJDMCwgMHgzODRELCAweDZCQzEsIDB4NkJDMSwgMHgwN0VFLAorICAgIDB4NkJDMiwgMHg2QkMyLCAweDE5QkYsIDB4NkJDMywgMHg2QkM0LCAweDM4NEUsIDB4NkJDNSwgMHg2QkM1LCAweDEwNkEsCisgICAgMHg2QkM2LCAweDZCQzYsIDB4MjBBRiwgMHg2QkM3LCAweDZCQ0EsIDB4Mzg1MCwgMHg2QkNCLCAweDZCQ0IsIDB4MEVGMiwKKyAgICAweDZCQ0MsIDB4NkJDQywgMHgzODU0LCAweDZCQ0QsIDB4NkJDRCwgMHgwQjFCLCAweDZCQ0UsIDB4NkJDRSwgMHgzODU1LAorICAgIDB4NkJDRiwgMHg2QkNGLCAweDBBQzQsIDB4NkJEMCwgMHg2QkQxLCAweDM4NTYsIDB4NkJEMiwgMHg2QkQyLCAweDA1RkQsCisgICAgMHg2QkQzLCAweDZCRDMsIDB4MTI2RiwgMHg2QkQ0LCAweDZCRDQsIDB4MDQzMSwgMHg2QkQ1LCAweDZCRDUsIDB4MDQzOCwKKyAgICAweDZCRDYsIDB4NkJENiwgMHgwNDNBLCAweDZCRDcsIDB4NkJENywgMHgwQkJGLCAweDZCRDgsIDB4NkJEOCwgMHgzODU4LAorICAgIDB4NkJEOSwgMHg2QkQ5LCAweDA0MzksIDB4NkJEQSwgMHg2QkRBLCAweDM4NTksIDB4NkJEQiwgMHg2QkRCLCAweDBBQjAsCisgICAgMHg2QkRDLCAweDZCRTAsIDB4Mzg1QSwgMHg2QkUxLCAweDZCRTEsIDB4MTE1MiwgMHg2QkUyLCAweDZCRTksIDB4Mzg1RiwKKyAgICAweDZCRUEsIDB4NkJFQSwgMHgxOTU0LCAweDZCRUIsIDB4NkJFQiwgMHgwNzc4LCAweDZCRUMsIDB4NkJFRSwgMHgzODY3LAorICAgIDB4NkJFRiwgMHg2QkVGLCAweDBFMEQsIDB4NkJGMCwgMHg2QkYyLCAweDM4NkEsIDB4NkJGMywgMHg2QkYzLCAweDE5NTUsCisgICAgMHg2QkY0LCAweDZCRjQsIDB4Mzg2RCwgMHg2QkY1LCAweDZCRjUsIDB4MTk1NywgMHg2QkY2LCAweDZCRjgsIDB4Mzg2RSwKKyAgICAweDZCRjksIDB4NkJGOSwgMHgxOTU4LCAweDZCRkEsIDB4NkJGQywgMHgzODcxLCAweDZCRkQsIDB4NkJGRCwgMHgxOTU2LAorICAgIDB4NkJGRSwgMHg2QkZFLCAweDM4NzQsIDB4NkJGRiwgMHg2QkZGLCAweDI0QzAsIDB4NkMwMCwgMHg2QzA0LCAweDM4NzUsCisgICAgMHg2QzA1LCAweDZDMDUsIDB4MTk1OSwgMHg2QzA2LCAweDZDMDYsIDB4MTk1QiwgMHg2QzA3LCAweDZDMDcsIDB4MTk1QSwKKyAgICAweDZDMDgsIDB4NkMwOCwgMHgyMjZELCAweDZDMDksIDB4NkMwQiwgMHgzODdBLCAweDZDMEMsIDB4NkMwQywgMHgyNEMxLAorICAgIDB4NkMwRCwgMHg2QzBELCAweDE5NUMsIDB4NkMwRSwgMHg2QzBFLCAweDM4N0QsIDB4NkMwRiwgMHg2QzBGLCAweDBENjYsCisgICAgMHg2QzEwLCAweDZDMTAsIDB4MTI2QiwgMHg2QzExLCAweDZDMTEsIDB4MEFGNiwgMHg2QzEyLCAweDZDMTIsIDB4Mzg3RSwKKyAgICAweDZDMTMsIDB4NkMxMywgMHgwQUFBLCAweDZDMTQsIDB4NkMxNCwgMHgwQzE3LCAweDZDMTUsIDB4NkMxNSwgMHgxOTVELAorICAgIDB4NkMxNiwgMHg2QzE2LCAweDBCMkQsIDB4NkMxNywgMHg2QzE3LCAweDM4N0YsIDB4NkMxOCwgMHg2QzFBLCAweDE5NUUsCisgICAgMHg2QzFCLCAweDZDMUIsIDB4MDY3MiwgMHg2QzFDLCAweDZDMUUsIDB4Mzg4MCwgMHg2QzFGLCAweDZDMUYsIDB4MDY5NywKKyAgICAweDZDMjAsIDB4NkMyMCwgMHgzODgzLCAweDZDMjEsIDB4NkMyMSwgMHgxOTYxLCAweDZDMjIsIDB4NkMyMiwgMHgwQzVGLAorICAgIDB4NkMyMywgMHg2QzIzLCAweDIwQ0EsIDB4NkMyNCwgMHg2QzI0LCAweDE5NjMsIDB4NkMyNSwgMHg2QzI1LCAweDM4ODQsCisgICAgMHg2QzI2LCAweDZDMjYsIDB4MDc1QiwgMHg2QzI3LCAweDZDMjcsIDB4MTAxRSwgMHg2QzI4LCAweDZDMjgsIDB4MDNCQywKKyAgICAweDZDMjksIDB4NkMyOSwgMHgxOTYyLCAweDZDMkEsIDB4NkMyQSwgMHgxOTY0LCAweDZDMkIsIDB4NkMyQiwgMHgyMEU3LAorICAgIDB4NkMyQywgMHg2QzJDLCAweDI0QzIsIDB4NkMyRCwgMHg2QzJELCAweDM4ODUsIDB4NkMyRSwgMHg2QzJFLCAweDA1OEIsCisgICAgMHg2QzJGLCAweDZDMkYsIDB4MEE2RiwgMHg2QzMwLCAweDZDMzAsIDB4MEM2NSwgMHg2QzMxLCAweDZDMzEsIDB4Mzg4NiwKKyAgICAweDZDMzIsIDB4NkMzMiwgMHgxOTY1LCAweDZDMzMsIDB4NkMzMywgMHgzODg3LCAweDZDMzQsIDB4NkMzNCwgMHgwREEzLAorICAgIDB4NkMzNSwgMHg2QzM1LCAweDE2OUYsIDB4NkMzNiwgMHg2QzM3LCAweDM4ODgsIDB4NkMzOCwgMHg2QzM4LCAweDEwQTUsCisgICAgMHg2QzM5LCAweDZDM0MsIDB4Mzg4QSwgMHg2QzNELCAweDZDM0QsIDB4MTJFRiwgMHg2QzNFLCAweDZDM0YsIDB4Mzg4RSwKKyAgICAweDZDNDAsIDB4NkM0MCwgMHgwRTUyLCAweDZDNDEsIDB4NkM0MSwgMHgxMUFDLCAweDZDNDIsIDB4NkM0MiwgMHgwQzcwLAorICAgIDB4NkM0MywgMHg2QzQ1LCAweDM4OTAsIDB4NkM0NiwgMHg2QzQ2LCAweDEyRjQsIDB4NkM0NywgMHg2QzQ3LCAweDA3RjgsCisgICAgMHg2QzQ4LCAweDZDNDgsIDB4Mzg5MywgMHg2QzQ5LCAweDZDNDksIDB4MDc3MSwgMHg2QzRBLCAweDZDNEEsIDB4MTZBMiwKKyAgICAweDZDNEIsIDB4NkM0RiwgMHgzODk0LCAweDZDNTAsIDB4NkM1MCwgMHgwRjE4LCAweDZDNTEsIDB4NkM1MywgMHgzODk5LAorICAgIDB4NkM1NCwgMHg2QzU0LCAweDE2QTAsIDB4NkM1NSwgMHg2QzU1LCAweDBEMDAsIDB4NkM1NiwgMHg2QzU2LCAweDM4OUMsCisgICAgMHg2QzU3LCAweDZDNTcsIDB4MDc3MCwgMHg2QzU4LCAweDZDNUEsIDB4Mzg5RCwgMHg2QzVCLCAweDZDNUIsIDB4MEZERCwKKyAgICAweDZDNUMsIDB4NkM1QywgMHgxNkExLCAweDZDNUQsIDB4NkM1RCwgMHgwQ0M1LCAweDZDNUUsIDB4NkM1RSwgMHgwNzA4LAorICAgIDB4NkM1RiwgMHg2QzVGLCAweDA4N0UsIDB4NkM2MCwgMHg2QzYwLCAweDA0RkQsIDB4NkM2MSwgMHg2QzYxLCAweDBFRUEsCisgICAgMHg2QzYyLCAweDZDNjMsIDB4MzhBMCwgMHg2QzY0LCAweDZDNjQsIDB4MEUxMywgMHg2QzY1LCAweDZDNjcsIDB4MzhBMiwKKyAgICAweDZDNjgsIDB4NkM2OSwgMHgxNkE4LCAweDZDNkEsIDB4NkM2QSwgMHgwRUE1LCAweDZDNkIsIDB4NkM2RiwgMHgzOEE1LAorICAgIDB4NkM3MCwgMHg2QzcwLCAweDBFMDAsIDB4NkM3MSwgMHg2QzcxLCAweDM4QUEsIDB4NkM3MiwgMHg2QzcyLCAweDA4MjYsCisgICAgMHg2QzczLCAweDZDNzMsIDB4MzhBQiwgMHg2Qzc0LCAweDZDNzQsIDB4MTZBQSwgMHg2Qzc1LCAweDZDNzUsIDB4MzhBQywKKyAgICAweDZDNzYsIDB4NkM3NiwgMHgxNkFCLCAweDZDNzcsIDB4NkM3OCwgMHgzOEFELCAweDZDNzksIDB4NkM3OSwgMHgwRkE1LAorICAgIDB4NkM3QSwgMHg2QzdDLCAweDM4QUYsIDB4NkM3RCwgMHg2QzdELCAweDBDMUEsIDB4NkM3RSwgMHg2QzdFLCAweDA2NzcsCisgICAgMHg2QzdGLCAweDZDODAsIDB4MzhCMiwgMHg2QzgxLCAweDZDODEsIDB4MEM1QywgMHg2QzgyLCAweDZDODIsIDB4MTA1MSwKKyAgICAweDZDODMsIDB4NkM4MywgMHgwRUU1LCAweDZDODQsIDB4NkM4NCwgMHgzOEI0LCAweDZDODUsIDB4NkM4NSwgMHgxNkE0LAorICAgIDB4NkM4NiwgMHg2Qzg2LCAweDE2QUMsIDB4NkM4NywgMHg2Qzg3LCAweDM4QjUsIDB4NkM4OCwgMHg2Qzg4LCAweDBEMkIsCisgICAgMHg2Qzg5LCAweDZDODksIDB4MDRFNiwgMHg2QzhBLCAweDZDOEIsIDB4MzhCNiwgMHg2QzhDLCAweDZDOEMsIDB4MTZBNywKKyAgICAweDZDOEQsIDB4NkM4RSwgMHgzOEI4LCAweDZDOEYsIDB4NkM4RiwgMHgwQzAyLCAweDZDOTAsIDB4NkM5MCwgMHgxNkE1LAorICAgIDB4NkM5MSwgMHg2QzkyLCAweDM4QkEsIDB4NkM5MywgMHg2QzkzLCAweDFBMUYsIDB4NkM5NCwgMHg2Qzk0LCAweDE2QTYsCisgICAgMHg2Qzk1LCAweDZDOTgsIDB4MzhCQywgMHg2Qzk5LCAweDZDOTksIDB4MENFQywgMHg2QzlBLCAweDZDOUEsIDB4MzhDMCwKKyAgICAweDZDOUIsIDB4NkM5QiwgMHgwQkE3LCAweDZDOUMsIDB4NkM5RSwgMHgzOEMxLCAweDZDOUYsIDB4NkM5RiwgMHgwNzBFLAorICAgIDB4NkNBMCwgMHg2Q0EwLCAweDM4QzQsIDB4NkNBMSwgMHg2Q0ExLCAweDBBQzAsIDB4NkNBMiwgMHg2Q0EyLCAweDM4QzUsCisgICAgMHg2Q0EzLCAweDZDQTMsIDB4MTZBMywgMHg2Q0E0LCAweDZDQTQsIDB4MEI3RSwgMHg2Q0E1LCAweDZDQTUsIDB4MDlFRCwKKyAgICAweDZDQTYsIDB4NkNBNiwgMHgwQTgwLCAweDZDQTcsIDB4NkNBNywgMHgwNDlFLCAweDZDQTgsIDB4NkNBOCwgMHgzOEM2LAorICAgIDB4NkNBOSwgMHg2Q0E5LCAweDE2QUQsIDB4NkNBQSwgMHg2Q0FBLCAweDA3QkIsIDB4NkNBQiwgMHg2Q0FCLCAweDBCMTAsCisgICAgMHg2Q0FDLCAweDZDQUMsIDB4MzhDNywgMHg2Q0FELCAweDZDQUQsIDB4MTZCMCwgMHg2Q0FFLCAweDZDQUUsIDB4MDkwOSwKKyAgICAweDZDQUYsIDB4NkNCMCwgMHgzOEM4LCAweDZDQjEsIDB4NkNCMSwgMHgxNkJCLCAweDZDQjIsIDB4NkNCMiwgMHgxNkI1LAorICAgIDB4NkNCMywgMHg2Q0IzLCAweDA3OEEsIDB4NkNCNCwgMHg2Q0I3LCAweDM4Q0EsIDB4NkNCOCwgMHg2Q0I4LCAweDA2NkQsCisgICAgMHg2Q0I5LCAweDZDQjksIDB4MTBCMiwgMHg2Q0JBLCAweDZDQkEsIDB4MzhDRSwgMHg2Q0JCLCAweDZDQkIsIDB4MTFDRCwKKyAgICAweDZDQkMsIDB4NkNCQywgMHgxMTc0LCAweDZDQkQsIDB4NkNCRCwgMHgwNzFBLCAweDZDQkUsIDB4NkNCRSwgMHgxMTU1LAorICAgIDB4NkNCRiwgMHg2Q0JGLCAweDEwMDEsIDB4NkNDMCwgMHg2Q0MzLCAweDM4Q0YsIDB4NkNDNCwgMHg2Q0M0LCAweDBGODQsCisgICAgMHg2Q0M1LCAweDZDQzUsIDB4MEM3MywgMHg2Q0M2LCAweDZDQzgsIDB4MzhEMywgMHg2Q0M5LCAweDZDQzksIDB4MEM4NSwKKyAgICAweDZDQ0EsIDB4NkNDQSwgMHgwNDdCLCAweDZDQ0IsIDB4NkNDQiwgMHgzOEQ2LCAweDZDQ0MsIDB4NkNDQywgMHgwQURGLAorICAgIDB4NkNDRCwgMHg2Q0NGLCAweDM4RDcsIDB4NkNEMCwgMHg2Q0QwLCAweDE2QUUsIDB4NkNEMSwgMHg2Q0QyLCAweDM4REEsCisgICAgMHg2Q0QzLCAweDZDRDMsIDB4MTZCQywgMHg2Q0Q0LCAweDZDRDQsIDB4MTZBRiwgMHg2Q0Q1LCAweDZDRDUsIDB4MDY0NSwKKyAgICAweDZDRDYsIDB4NkNENiwgMHgxNkI3LCAweDZDRDcsIDB4NkNENywgMHgxNkI0LCAweDZDRDgsIDB4NkNEQSwgMHgzOERDLAorICAgIDB4NkNEQiwgMHg2Q0RCLCAweDA2NTcsIDB4NkNEQywgMHg2Q0RELCAweDM4REYsIDB4NkNERSwgMHg2Q0RFLCAweDBCNjMsCisgICAgMHg2Q0RGLCAweDZDREYsIDB4MzhFMSwgMHg2Q0UwLCAweDZDRTAsIDB4MTZCNiwgMHg2Q0UxLCAweDZDRTEsIDB4MEI5RSwKKyAgICAweDZDRTIsIDB4NkNFMiwgMHgwNDZGLCAweDZDRTMsIDB4NkNFMywgMHgwQzFCLCAweDZDRTQsIDB4NkNFNCwgMHgzOEUyLAorICAgIDB4NkNFNSwgMHg2Q0U1LCAweDBCNDMsIDB4NkNFNiwgMHg2Q0U3LCAweDM4RTMsIDB4NkNFOCwgMHg2Q0U4LCAweDExRkYsCisgICAgMHg2Q0U5LCAweDZDRTksIDB4MzhFNSwgMHg2Q0VBLCAweDZDRUEsIDB4MDlDQywgMHg2Q0VCLCAweDZDRUIsIDB4MTZCOSwKKyAgICAweDZDRUMsIDB4NkNFRCwgMHgzOEU2LCAweDZDRUUsIDB4NkNFRSwgMHgxNkJBLCAweDZDRUYsIDB4NkNFRiwgMHgxNkJELAorICAgIDB4NkNGMCwgMHg2Q0YwLCAweDBERkMsIDB4NkNGMSwgMHg2Q0YxLCAweDE2QjMsIDB4NkNGMiwgMHg2Q0YyLCAweDM4RTgsCisgICAgMHg2Q0YzLCAweDZDRjMsIDB4MTBBMywgMHg2Q0Y0LCAweDZDRjQsIDB4MzhFOSwgMHg2Q0Y1LCAweDZDRjUsIDB4MDQyQywKKyAgICAweDZDRjYsIDB4NkNGNiwgMHgxQTIwLCAweDZDRjcsIDB4NkNGOCwgMHgxNkIxLCAweDZDRjksIDB4NkNGOSwgMHgzOEVBLAorICAgIDB4NkNGQSwgMHg2Q0ZBLCAweDE2QjgsIDB4NkNGQiwgMHg2Q0ZCLCAweDBGODUsIDB4NkNGQywgMHg2Q0ZDLCAweDBCRTIsCisgICAgMHg2Q0ZELCAweDZDRkQsIDB4MTEzNiwgMHg2Q0ZFLCAweDZDRkUsIDB4MTZCRSwgMHg2Q0ZGLCAweDZDRkYsIDB4MzhFQiwKKyAgICAweDZEMDAsIDB4NkQwMCwgMHgzOEVDLCAweDZEMDEsIDB4NkQwMSwgMHgwOEIxLCAweDZEMDIsIDB4NkQwMywgMHgzOEVELAorICAgIDB4NkQwNCwgMHg2RDA0LCAweDE2QzUsIDB4NkQwNSwgMHg2RDA2LCAweDM4RUYsIDB4NkQwNywgMHg2RDA3LCAweDE2QzQsCisgICAgMHg2RDA4LCAweDZEMEEsIDB4MzhGMSwgMHg2RDBCLCAweDZEMEIsIDB4MTAxQywgMHg2RDBDLCAweDZEMEMsIDB4MTZDMSwKKyAgICAweDZEMEQsIDB4NkQwRCwgMHgzOEY0LCAweDZEMEUsIDB4NkQwRSwgMHgxNkM3LCAweDZEMEYsIDB4NkQxMSwgMHgzOEY1LAorICAgIDB4NkQxMiwgMHg2RDEyLCAweDBDRDIsIDB4NkQxMywgMHg2RDE2LCAweDM4RjgsIDB4NkQxNywgMHg2RDE3LCAweDBGMjEsCisgICAgMHg2RDE4LCAweDZEMTgsIDB4MzhGQywgMHg2RDE5LCAweDZEMTksIDB4MTZDNiwgMHg2RDFBLCAweDZEMUEsIDB4MTZDQywKKyAgICAweDZEMUIsIDB4NkQxQiwgMHgwQThDLCAweDZEMUMsIDB4NkQxRCwgMHgzOEZELCAweDZEMUUsIDB4NkQxRSwgMHgwNUYzLAorICAgIDB4NkQxRiwgMHg2RDI0LCAweDM4RkYsIDB4NkQyNSwgMHg2RDI1LCAweDA4QzMsIDB4NkQyNiwgMHg2RDI2LCAweDM5MDUsCisgICAgMHg2RDI3LCAweDZEMjcsIDB4MTZDMCwgMHg2RDI4LCAweDZEMjksIDB4MzkwNiwgMHg2RDJBLCAweDZEMkEsIDB4MDdBMCwKKyAgICAweDZEMkIsIDB4NkQyQiwgMHgxNkM4LCAweDZEMkMsIDB4NkQyRCwgMHgzOTA4LCAweDZEMkUsIDB4NkQyRSwgMHgxNkNBLAorICAgIDB4NkQyRiwgMHg2RDMwLCAweDM5MEEsIDB4NkQzMSwgMHg2RDMxLCAweDA2M0MsIDB4NkQzMiwgMHg2RDMyLCAweDExREQsCisgICAgMHg2RDMzLCAweDZEMzMsIDB4MTZEMCwgMHg2RDM0LCAweDZEMzQsIDB4MzkwQywgMHg2RDM1LCAweDZEMzUsIDB4MTZDQiwKKyAgICAweDZEMzYsIDB4NkQzOCwgMHgzOTBELCAweDZEMzksIDB4NkQzOSwgMHgxNkJGLCAweDZEM0EsIDB4NkQzQSwgMHgzOTEwLAorICAgIDB4NkQzQiwgMHg2RDNCLCAweDA4MDMsIDB4NkQzQywgMHg2RDNDLCAweDBFOEUsIDB4NkQzRCwgMHg2RDNELCAweDBDMUYsCisgICAgMHg2RDNFLCAweDZEM0UsIDB4MEI4QSwgMHg2RDNGLCAweDZENDAsIDB4MzkxMSwgMHg2RDQxLCAweDZENDEsIDB4MEE0MCwKKyAgICAweDZENDIsIDB4NkQ0MiwgMHgzOTEzLCAweDZENDMsIDB4NkQ0MywgMHgxNkMyLCAweDZENDQsIDB4NkQ0NCwgMHgzOTE0LAorICAgIDB4NkQ0NSwgMHg2RDQ1LCAweDBDMzAsIDB4NkQ0NiwgMHg2RDQ2LCAweDA4N0QsIDB4NkQ0NywgMHg2RDQ3LCAweDA4OEUsCisgICAgMHg2RDQ4LCAweDZENDgsIDB4MTZDMywgMHg2RDQ5LCAweDZENDksIDB4MzkxNSwgMHg2RDRBLCAweDZENEEsIDB4MTIyNCwKKyAgICAweDZENEIsIDB4NkQ0QiwgMHgwNEE5LCAweDZENEMsIDB4NkQ0QywgMHgzOTE2LCAweDZENEQsIDB4NkQ0RCwgMHgxNkM5LAorICAgIDB4NkQ0RSwgMHg2RDRFLCAweDA4MzYsIDB4NkQ0RiwgMHg2RDRGLCAweDE2Q0QsIDB4NkQ1MCwgMHg2RDUwLCAweDM5MTcsCisgICAgMHg2RDUxLCAweDZENTEsIDB4MDgwMCwgMHg2RDUyLCAweDZENTIsIDB4MTZDRSwgMHg2RDUzLCAweDZENTMsIDB4MEI2OSwKKyAgICAweDZENTQsIDB4NkQ1NCwgMHgxNkNGLCAweDZENTUsIDB4NkQ1OCwgMHgzOTE4LCAweDZENTksIDB4NkQ1OSwgMHgxMTg0LAorICAgIDB4NkQ1QSwgMHg2RDVBLCAweDA5MzAsIDB4NkQ1QiwgMHg2RDVCLCAweDM5MUMsIDB4NkQ1QywgMHg2RDVDLCAweDE2RDgsCisgICAgMHg2RDVELCAweDZENUQsIDB4MzkxRCwgMHg2RDVFLCAweDZENUUsIDB4MTZENSwgMHg2RDVGLCAweDZENUYsIDB4MzkxRSwKKyAgICAweDZENjAsIDB4NkQ2MCwgMHgxNkQ5LCAweDZENjEsIDB4NkQ2MiwgMHgzOTFGLCAweDZENjMsIDB4NkQ2MywgMHgxNkRCLAorICAgIDB4NkQ2NCwgMHg2RDY1LCAweDM5MjEsIDB4NkQ2NiwgMHg2RDY2LCAweDBCRjUsIDB4NkQ2NywgMHg2RDY4LCAweDM5MjMsCisgICAgMHg2RDY5LCAweDZENjksIDB4MDc3RCwgMHg2RDZBLCAweDZENkEsIDB4MDlCNiwgMHg2RDZCLCAweDZENkQsIDB4MzkyNSwKKyAgICAweDZENkUsIDB4NkQ2RSwgMHgwNjlDLCAweDZENkYsIDB4NkQ2RiwgMHgxNkQyLCAweDZENzAsIDB4NkQ3MywgMHgzOTI4LAorICAgIDB4NkQ3NCwgMHg2RDc0LCAweDEwRTQsIDB4NkQ3NSwgMHg2RDc2LCAweDM5MkMsIDB4NkQ3NywgMHg2RDc3LCAweDA3NUEsCisgICAgMHg2RDc4LCAweDZENzgsIDB4MDhDRiwgMHg2RDc5LCAweDZENzksIDB4MjNEQywgMHg2RDdBLCAweDZEN0IsIDB4MzkyRSwKKyAgICAweDZEN0MsIDB4NkQ3QywgMHgxNkRBLCAweDZEN0QsIDB4NkQ4MSwgMHgzOTMwLCAweDZEODIsIDB4NkQ4MiwgMHgwRTcwLAorICAgIDB4NkQ4MywgMHg2RDg0LCAweDM5MzUsIDB4NkQ4NSwgMHg2RDg1LCAweDBCNUMsIDB4NkQ4NiwgMHg2RDg2LCAweDM5MzcsCisgICAgMHg2RDg3LCAweDZEODcsIDB4MjNEQiwgMHg2RDg4LCAweDZEODgsIDB4MEY2OCwgMHg2RDg5LCAweDZEODksIDB4MEQxRiwKKyAgICAweDZEOEEsIDB4NkQ4QiwgMHgzOTM4LCAweDZEOEMsIDB4NkQ4QywgMHgxMEE0LCAweDZEOEQsIDB4NkQ4RCwgMHgzOTNBLAorICAgIDB4NkQ4RSwgMHg2RDhFLCAweDBGM0UsIDB4NkQ4RiwgMHg2RDkwLCAweDM5M0IsIDB4NkQ5MSwgMHg2RDkxLCAweDE2RDEsCisgICAgMHg2RDkyLCAweDZEOTIsIDB4MzkzRCwgMHg2RDkzLCAweDZEOTQsIDB4MTZENiwgMHg2RDk1LCAweDZEOTUsIDB4MEUzQywKKyAgICAweDZEOTYsIDB4NkQ5QSwgMHgzOTNFLCAweDZEOUIsIDB4NkQ5QiwgMHgwRTIxLCAweDZEOUMsIDB4NkQ5QywgMHgzOTQzLAorICAgIDB4NkQ5RCwgMHg2RDlELCAweDA5QkYsIDB4NkQ5RSwgMHg2RDlFLCAweDE2RDMsIDB4NkQ5RiwgMHg2RDlGLCAweDA5RjksCisgICAgMHg2REEwLCAweDZEQTAsIDB4MTZENCwgMHg2REExLCAweDZEQTEsIDB4MEVERiwgMHg2REEyLCAweDZEQTIsIDB4Mzk0NCwKKyAgICAweDZEQTMsIDB4NkRBMywgMHgwN0Q2LCAweDZEQTQsIDB4NkRBNCwgMHgwNUI0LCAweDZEQTUsIDB4NkRBNSwgMHgzOTQ1LAorICAgIDB4NkRBNiwgMHg2REE2LCAweDBDQ0UsIDB4NkRBNywgMHg2REE3LCAweDA4NzgsIDB4NkRBOCwgMHg2REE4LCAweDExNjgsCisgICAgMHg2REE5LCAweDZEQTksIDB4MENFNSwgMHg2REFBLCAweDZEQUEsIDB4MDY5RCwgMHg2REFCLCAweDZEQUIsIDB4MTZFOCwKKyAgICAweDZEQUMsIDB4NkRBRCwgMHgzOTQ2LCAweDZEQUUsIDB4NkRBRSwgMHgxNkVBLCAweDZEQUYsIDB4NkRBRiwgMHgwRkVELAorICAgIDB4NkRCMCwgMHg2REIxLCAweDM5NDgsIDB4NkRCMiwgMHg2REIyLCAweDEwNDEsIDB4NkRCMywgMHg2REI0LCAweDM5NEEsCisgICAgMHg2REI1LCAweDZEQjUsIDB4MDc2NCwgMHg2REI2LCAweDZEQjcsIDB4Mzk0QywgMHg2REI4LCAweDZEQjgsIDB4MDc4QiwKKyAgICAweDZEQjksIDB4NkRCRSwgMHgzOTRFLCAweDZEQkYsIDB4NkRCRiwgMHgxNkUxLCAweDZEQzAsIDB4NkRDMCwgMHgwNUNFLAorICAgIDB4NkRDMSwgMHg2REMzLCAweDM5NTQsIDB4NkRDNCwgMHg2REM0LCAweDEyMkEsIDB4NkRDNSwgMHg2REM1LCAweDE2REUsCisgICAgMHg2REM2LCAweDZEQzYsIDB4MEY2QSwgMHg2REM3LCAweDZEQzcsIDB4MTZERCwgMHg2REM4LCAweDZEQ0EsIDB4Mzk1NywKKyAgICAweDZEQ0IsIDB4NkRDQiwgMHgwQTI1LCAweDZEQ0MsIDB4NkRDQywgMHgwRTFELCAweDZEQ0QsIDB4NkREMCwgMHgzOTVBLAorICAgIDB4NkREMSwgMHg2REQxLCAweDBEN0UsIDB4NkREMiwgMHg2REQ1LCAweDM5NUUsIDB4NkRENiwgMHg2REQ2LCAweDBCM0EsCisgICAgMHg2REQ3LCAweDZERDcsIDB4Mzk2MiwgMHg2REQ4LCAweDZERDgsIDB4MEUyNywgMHg2REQ5LCAweDZERDksIDB4MTZFNiwKKyAgICAweDZEREEsIDB4NkREQywgMHgzOTYzLCAweDZEREQsIDB4NkRERCwgMHgxNkU1LCAweDZEREUsIDB4NkRERSwgMHgxNkRGLAorICAgIDB4NkRERiwgMHg2RERGLCAweDM5NjYsIDB4NkRFMCwgMHg2REUwLCAweDE2RTIsIDB4NkRFMSwgMHg2REUxLCAweDA1OEUsCisgICAgMHg2REUyLCAweDZERTMsIDB4Mzk2NywgMHg2REU0LCAweDZERTQsIDB4MTBCRSwgMHg2REU1LCAweDZERTUsIDB4Mzk2OSwKKyAgICAweDZERTYsIDB4NkRFNiwgMHgxNkU0LCAweDZERTcsIDB4NkRFOSwgMHgzOTZBLCAweDZERUEsIDB4NkRFQSwgMHgyMDVFLAorICAgIDB4NkRFQiwgMHg2REVCLCAweDEwODAsIDB4NkRFQywgMHg2REVDLCAweDA1NjYsIDB4NkRFRCwgMHg2REVELCAweDM5NkQsCisgICAgMHg2REVFLCAweDZERUUsIDB4MDdDOSwgMHg2REVGLCAweDZERjAsIDB4Mzk2RSwgMHg2REYxLCAweDZERjEsIDB4MEQyNywKKyAgICAweDZERjIsIDB4NkRGMiwgMHgzOTcwLCAweDZERjMsIDB4NkRGMywgMHgwNTQxLCAweDZERjQsIDB4NkRGNCwgMHgzOTcxLAorICAgIDB4NkRGNSwgMHg2REY1LCAweDIyNDQsIDB4NkRGNiwgMHg2REY2LCAweDIzRTIsIDB4NkRGNywgMHg2REY3LCAweDA4MDEsCisgICAgMHg2REY4LCAweDZERjgsIDB4Mzk3MiwgMHg2REY5LCAweDZERjksIDB4MEZGNiwgMHg2REZBLCAweDZERkEsIDB4MjBENCwKKyAgICAweDZERkIsIDB4NkRGQiwgMHgwRTQwLCAweDZERkMsIDB4NkRGQywgMHgxQTIxLCAweDZERkQsIDB4NkRGRiwgMHgzOTczLAorICAgIDB4NkUwMCwgMHg2RTA0LCAweDM5NzYsIDB4NkUwNSwgMHg2RTA1LCAweDBDNjIsIDB4NkUwNiwgMHg2RTA5LCAweDM5N0IsCisgICAgMHg2RTBBLCAweDZFMEEsIDB4MTBFQiwgMHg2RTBCLCAweDZFMEIsIDB4Mzk3RiwgMHg2RTBDLCAweDZFMEMsIDB4MTZFOSwKKyAgICAweDZFMEQsIDB4NkUwRCwgMHgxMjMyLCAweDZFMEUsIDB4NkUwRSwgMHgxNkUwLCAweDZFMEYsIDB4NkUwRiwgMHgzOTgwLAorICAgIDB4NkUxMCwgMHg2RTEwLCAweDA4NzYsIDB4NkUxMSwgMHg2RTExLCAweDE2RTMsIDB4NkUxMiwgMHg2RTEzLCAweDM5ODEsCisgICAgMHg2RTE0LCAweDZFMTQsIDB4MTBDQiwgMHg2RTE1LCAweDZFMTUsIDB4Mzk4MywgMHg2RTE2LCAweDZFMTYsIDB4MTZFNywKKyAgICAweDZFMTcsIDB4NkUxNywgMHgwRDMxLCAweDZFMTgsIDB4NkUxOSwgMHgzOTg0LCAweDZFMUEsIDB4NkUxQSwgMHgxNkRDLAorICAgIDB4NkUxQiwgMHg2RTFDLCAweDM5ODYsIDB4NkUxRCwgMHg2RTFELCAweDEwQ0EsIDB4NkUxRSwgMHg2RTFGLCAweDM5ODgsCisgICAgMHg2RTIwLCAweDZFMjAsIDB4MEM3QiwgMHg2RTIxLCAweDZFMjEsIDB4MDYwOCwgMHg2RTIyLCAweDZFMjIsIDB4Mzk4QSwKKyAgICAweDZFMjMsIDB4NkUyMywgMHgxMTNGLCAweDZFMjQsIDB4NkUyNCwgMHgwNDdBLCAweDZFMjUsIDB4NkUyNSwgMHgxNkY1LAorICAgIDB4NkUyNiwgMHg2RTI2LCAweDIxOUYsIDB4NkUyNywgMHg2RTI4LCAweDM5OEIsIDB4NkUyOSwgMHg2RTI5LCAweDBFRDEsCisgICAgMHg2RTJBLCAweDZFMkEsIDB4Mzk4RCwgMHg2RTJCLCAweDZFMkIsIDB4MTZFQiwgMHg2RTJDLCAweDZFMkMsIDB4MUU2NiwKKyAgICAweDZFMkQsIDB4NkUyRCwgMHgwRUNCLCAweDZFMkUsIDB4NkUyRSwgMHgzOThFLCAweDZFMkYsIDB4NkUyRiwgMHgwNkQ2LAorICAgIDB4NkUzMCwgMHg2RTMxLCAweDM5OEYsIDB4NkUzMiwgMHg2RTMyLCAweDE2RjQsIDB4NkUzMywgMHg2RTMzLCAweDM5OTEsCisgICAgMHg2RTM0LCAweDZFMzQsIDB4MDk1NywgMHg2RTM1LCAweDZFMzcsIDB4Mzk5MiwgMHg2RTM4LCAweDZFMzgsIDB4MTBCMywKKyAgICAweDZFMzksIDB4NkUzOSwgMHgzOTk1LCAweDZFM0EsIDB4NkUzQSwgMHgwQUYxLCAweDZFM0IsIDB4NkUzRCwgMHgzOTk2LAorICAgIDB4NkUzRSwgMHg2RTNFLCAweDFGNjMsIDB4NkUzRiwgMHg2RTQyLCAweDM5OTksIDB4NkU0MywgMHg2RTQzLCAweDBCODksCisgICAgMHg2RTQ0LCAweDZFNDQsIDB4MTZGNiwgMHg2RTQ1LCAweDZFNEMsIDB4Mzk5RCwgMHg2RTRELCAweDZFNEQsIDB4MEU3NSwKKyAgICAweDZFNEUsIDB4NkU0RSwgMHgxNkVELCAweDZFNEYsIDB4NkU1MiwgMHgzOUE1LCAweDZFNTMsIDB4NkU1NCwgMHgxNkYyLAorICAgIDB4NkU1NSwgMHg2RTU1LCAweDM5QTksIDB4NkU1NiwgMHg2RTU2LCAweDA3QjUsIDB4NkU1NywgMHg2RTU3LCAweDM5QUEsCisgICAgMHg2RTU4LCAweDZFNTgsIDB4MEY1MywgMHg2RTU5LCAweDZFNUEsIDB4MzlBQiwgMHg2RTVCLCAweDZFNUIsIDB4MTE2MCwKKyAgICAweDZFNUMsIDB4NkU1RCwgMHgzOUFELCAweDZFNUUsIDB4NkU1RSwgMHgyM0RELCAweDZFNUYsIDB4NkU1RiwgMHgxNkYwLAorICAgIDB4NkU2MCwgMHg2RTZBLCAweDM5QUYsIDB4NkU2QiwgMHg2RTZCLCAweDE2RUUsIDB4NkU2QywgMHg2RTZELCAweDM5QkEsCisgICAgMHg2RTZFLCAweDZFNkUsIDB4MTZFQywgMHg2RTZGLCAweDZFNkYsIDB4MjE2QiwgMHg2RTcwLCAweDZFN0QsIDB4MzlCQywKKyAgICAweDZFN0UsIDB4NkU3RSwgMHgwRTk2LCAweDZFN0YsIDB4NkU3RiwgMHgwRDQxLCAweDZFODAsIDB4NkU4MiwgMHgzOUNBLAorICAgIDB4NkU4MywgMHg2RTgzLCAweDA5OEUsIDB4NkU4NCwgMHg2RTg0LCAweDM5Q0QsIDB4NkU4NSwgMHg2RTg1LCAweDA4NzcsCisgICAgMHg2RTg2LCAweDZFODYsIDB4MTZGMSwgMHg2RTg3LCAweDZFODgsIDB4MzlDRSwgMHg2RTg5LCAweDZFODksIDB4MDZDMywKKyAgICAweDZFOEEsIDB4NkU4RSwgMHgzOUQwLCAweDZFOEYsIDB4NkU4RiwgMHgxNzA1LCAweDZFOTAsIDB4NkU5MCwgMHgxMEY3LAorICAgIDB4NkU5MSwgMHg2RTk1LCAweDM5RDUsIDB4NkU5NiwgMHg2RTk2LCAweDIyQjUsIDB4NkU5NywgMHg2RTk3LCAweDM5REEsCisgICAgMHg2RTk4LCAweDZFOTgsIDB4MTZGOSwgMHg2RTk5LCAweDZFOUIsIDB4MzlEQiwgMHg2RTlDLCAweDZFOUMsIDB4MEEzOCwKKyAgICAweDZFOUQsIDB4NkU5RCwgMHgxRjI2LCAweDZFOUUsIDB4NkU5RSwgMHgzOURFLCAweDZFOUYsIDB4NkU5RiwgMHgxNzA3LAorICAgIDB4NkVBMCwgMHg2RUExLCAweDM5REYsIDB4NkVBMiwgMHg2RUEyLCAweDEwNkUsIDB4NkVBMywgMHg2RUE0LCAweDM5RTEsCisgICAgMHg2RUE1LCAweDZFQTUsIDB4MTZGRCwgMHg2RUE2LCAweDZFQTYsIDB4MzlFMywgMHg2RUE3LCAweDZFQTcsIDB4MTZGRSwKKyAgICAweDZFQTgsIDB4NkVBOSwgMHgzOUU0LCAweDZFQUEsIDB4NkVBQSwgMHgwRjE3LCAweDZFQUIsIDB4NkVBRSwgMHgzOUU2LAorICAgIDB4NkVBRiwgMHg2RUFGLCAweDBERDIsIDB4NkVCMCwgMHg2RUIwLCAweDM5RUEsIDB4NkVCMSwgMHg2RUIxLCAweDE2RjgsCisgICAgMHg2RUIyLCAweDZFQjIsIDB4MTZFRiwgMHg2RUIzLCAweDZFQjMsIDB4MzlFQiwgMHg2RUI0LCAweDZFQjQsIDB4MTcwMywKKyAgICAweDZFQjUsIDB4NkVCNSwgMHgzOUVDLCAweDZFQjYsIDB4NkVCNiwgMHgwQ0I3LCAweDZFQjcsIDB4NkVCNywgMHgxNzAxLAorICAgIDB4NkVCOCwgMHg2RUI5LCAweDM5RUQsIDB4NkVCQSwgMHg2RUJBLCAweDBCNEEsIDB4NkVCQiwgMHg2RUJCLCAweDE3MDAsCisgICAgMHg2RUJDLCAweDZFQkMsIDB4MzlFRiwgMHg2RUJELCAweDZFQkQsIDB4MTZGRiwgMHg2RUJFLCAweDZFQzAsIDB4MzlGMCwKKyAgICAweDZFQzEsIDB4NkVDMSwgMHgwNTIxLCAweDZFQzIsIDB4NkVDMiwgMHgxNzA2LCAweDZFQzMsIDB4NkVDMywgMHgzOUYzLAorICAgIDB4NkVDNCwgMHg2RUM0LCAweDFFNjMsIDB4NkVDNSwgMHg2RUM1LCAweDIwODgsIDB4NkVDNiwgMHg2RUM2LCAweDM5RjQsCisgICAgMHg2RUM3LCAweDZFQzcsIDB4MDVDMiwgMHg2RUM4LCAweDZFQ0EsIDB4MzlGNSwgMHg2RUNCLCAweDZFQ0IsIDB4MTIyOSwKKyAgICAweDZFQ0MsIDB4NkVDQywgMHgxRUJELCAweDZFQ0QsIDB4NkVDRCwgMHgzOUY4LCAweDZFQ0UsIDB4NkVDRSwgMHgyMzQxLAorICAgIDB4NkVDRiwgMHg2RUNGLCAweDE3MDQsIDB4NkVEMCwgMHg2RUQwLCAweDM5RjksIDB4NkVEMSwgMHg2RUQxLCAweDA3QzEsCisgICAgMHg2RUQyLCAweDZFRDIsIDB4MzlGQSwgMHg2RUQzLCAweDZFRDMsIDB4MTIyRiwgMHg2RUQ0LCAweDZFRDQsIDB4MEUyMiwKKyAgICAweDZFRDUsIDB4NkVENSwgMHgxOUE4LCAweDZFRDYsIDB4NkVENiwgMHgzOUZCLCAweDZFRDcsIDB4NkVENywgMHgxNzAyLAorICAgIDB4NkVEOCwgMHg2RUQ5LCAweDM5RkMsIDB4NkVEQSwgMHg2RURBLCAweDA3NEYsIDB4NkVEQiwgMHg2RURELCAweDM5RkUsCisgICAgMHg2RURFLCAweDZFREUsIDB4MTFDQywgMHg2RURGLCAweDZFREYsIDB4MTZGNywgMHg2RUUwLCAweDZFRTAsIDB4MTZGQSwKKyAgICAweDZFRTEsIDB4NkVFMSwgMHgwQUExLCAweDZFRTIsIDB4NkVFMiwgMHgxNkZDLCAweDZFRTMsIDB4NkVFMywgMHgzQTAxLAorICAgIDB4NkVFNCwgMHg2RUU0LCAweDBBNzIsIDB4NkVFNSwgMHg2RUU1LCAweDA5QUYsIDB4NkVFNiwgMHg2RUU2LCAweDBBNzcsCisgICAgMHg2RUU3LCAweDZFRTcsIDB4M0EwMiwgMHg2RUU4LCAweDZFRTgsIDB4MDQ1RSwgMHg2RUU5LCAweDZFRTksIDB4MEUwNSwKKyAgICAweDZFRUEsIDB4NkVFQiwgMHgzQTAzLCAweDZFRUMsIDB4NkVFQywgMHgxRjRCLCAweDZFRUQsIDB4NkVFRSwgMHgzQTA1LAorICAgIDB4NkVFRiwgMHg2RUVGLCAweDIyOTIsIDB4NkVGMCwgMHg2RUYxLCAweDNBMDcsIDB4NkVGMiwgMHg2RUYyLCAweDIxMjQsCisgICAgMHg2RUYzLCAweDZFRjMsIDB4M0EwOSwgMHg2RUY0LCAweDZFRjQsIDB4MDVBRiwgMHg2RUY1LCAweDZFRjYsIDB4M0EwQSwKKyAgICAweDZFRjcsIDB4NkVGNywgMHgyMDQ4LCAweDZFRjgsIDB4NkVGOCwgMHgyM0UwLCAweDZFRjksIDB4NkVGOSwgMHgxNzBELAorICAgIDB4NkVGQSwgMHg2RUZFLCAweDNBMEMsIDB4NkVGRiwgMHg2RUZGLCAweDIwNzcsIDB4NkYwMCwgMHg2RjAwLCAweDNBMTEsCisgICAgMHg2RjAxLCAweDZGMDEsIDB4MjIzQSwgMHg2RjAyLCAweDZGMDIsIDB4MEJDRSwgMHg2RjAzLCAweDZGMDUsIDB4M0ExMiwKKyAgICAweDZGMDYsIDB4NkYwNiwgMHgwQzAwLCAweDZGMDcsIDB4NkYwOCwgMHgzQTE1LCAweDZGMDksIDB4NkYwOSwgMHgxNzEzLAorICAgIDB4NkYwQSwgMHg2RjBFLCAweDNBMTcsIDB4NkYwRiwgMHg2RjBGLCAweDBBNTAsIDB4NkYxMCwgMHg2RjEyLCAweDNBMUMsCisgICAgMHg2RjEzLCAweDZGMTMsIDB4MDlENywgMHg2RjE0LCAweDZGMTQsIDB4MTAwNiwgMHg2RjE1LCAweDZGMTUsIDB4MTcwQywKKyAgICAweDZGMTYsIDB4NkYxOSwgMHgzQTFGLCAweDZGMUEsIDB4NkYxQSwgMHgyMEIxLCAweDZGMUIsIDB4NkYxRiwgMHgzQTIzLAorICAgIDB4NkYyMCwgMHg2RjIwLCAweDBCMTEsIDB4NkYyMSwgMHg2RjIxLCAweDNBMjgsIDB4NkYyMiwgMHg2RjIyLCAweDFGNDEsCisgICAgMHg2RjIzLCAweDZGMjMsIDB4MjAxQywgMHg2RjI0LCAweDZGMjQsIDB4MTcwQiwgMHg2RjI1LCAweDZGMjgsIDB4M0EyOSwKKyAgICAweDZGMjksIDB4NkYyOSwgMHgxNzE0LCAweDZGMkEsIDB4NkYyQSwgMHgxNzEyLCAweDZGMkIsIDB4NkYyQiwgMHgwQUE1LAorICAgIDB4NkYyQywgMHg2RjJDLCAweDIyQjgsIDB4NkYyRCwgMHg2RjJELCAweDE2RkIsIDB4NkYyRSwgMHg2RjJFLCAweDNBMkQsCisgICAgMHg2RjJGLCAweDZGMkYsIDB4MTcwRSwgMHg2RjMwLCAweDZGMzAsIDB4M0EyRSwgMHg2RjMxLCAweDZGMzEsIDB4MEQ5NSwKKyAgICAweDZGMzIsIDB4NkYzMiwgMHgyMjc2LCAweDZGMzMsIDB4NkYzMywgMHgxMTY1LCAweDZGMzQsIDB4NkYzNSwgMHgzQTJGLAorICAgIDB4NkYzNiwgMHg2RjM2LCAweDE3MEYsIDB4NkYzNywgMHg2RjM3LCAweDNBMzEsIDB4NkYzOCwgMHg2RjM4LCAweDFGOUIsCisgICAgMHg2RjM5LCAweDZGM0QsIDB4M0EzMiwgMHg2RjNFLCAweDZGM0UsIDB4MTAyMywgMHg2RjNGLCAweDZGM0YsIDB4MUY5RiwKKyAgICAweDZGNDAsIDB4NkY0MCwgMHgzQTM3LCAweDZGNDEsIDB4NkY0MSwgMHgyNUNBLCAweDZGNDIsIDB4NkY0NSwgMHgzQTM4LAorICAgIDB4NkY0NiwgMHg2RjQ3LCAweDE3MDksIDB4NkY0OCwgMHg2RjRBLCAweDNBM0MsIDB4NkY0QiwgMHg2RjRCLCAweDE3MTAsCisgICAgMHg2RjRDLCAweDZGNEMsIDB4M0EzRiwgMHg2RjRELCAweDZGNEQsIDB4MEVCQSwgMHg2RjRFLCAweDZGNTAsIDB4M0E0MCwKKyAgICAweDZGNTEsIDB4NkY1MSwgMHgyMEJFLCAweDZGNTIsIDB4NkY1MywgMHgzQTQzLCAweDZGNTQsIDB4NkY1NCwgMHgxRkI0LAorICAgIDB4NkY1NSwgMHg2RjU3LCAweDNBNDUsIDB4NkY1OCwgMHg2RjU4LCAweDBCOEMsIDB4NkY1OSwgMHg2RjU5LCAweDIzRDcsCisgICAgMHg2RjVBLCAweDZGNUIsIDB4M0E0OCwgMHg2RjVDLCAweDZGNUMsIDB4MEMyRSwgMHg2RjVELCAweDZGNUQsIDB4M0E0QSwKKyAgICAweDZGNUUsIDB4NkY1RSwgMHgwQTYxLCAweDZGNUYsIDB4NkY2MSwgMHgzQTRCLCAweDZGNjIsIDB4NkY2MiwgMHgxNzA4LAorICAgIDB4NkY2MywgMHg2RjYzLCAweDNBNEUsIDB4NkY2NCwgMHg2RjY0LCAweDIxMDUsIDB4NkY2NSwgMHg2RjY1LCAweDNBNEYsCisgICAgMHg2RjY2LCAweDZGNjYsIDB4MEExMywgMHg2RjY3LCAweDZGNkMsIDB4M0E1MCwgMHg2RjZELCAweDZGNkQsIDB4MEUwOSwKKyAgICAweDZGNkUsIDB4NkY2RSwgMHgwNEQ2LCAweDZGNkYsIDB4NkY2RiwgMHgyM0UxLCAweDZGNzAsIDB4NkY3MCwgMHgxRkVDLAorICAgIDB4NkY3MSwgMHg2RjcxLCAweDNBNTYsIDB4NkY3MiwgMHg2RjcyLCAweDE3MTksIDB4NkY3MywgMHg2RjczLCAweDNBNTcsCisgICAgMHg2Rjc0LCAweDZGNzQsIDB4MTcxMSwgMHg2Rjc1LCAweDZGNzYsIDB4M0E1OCwgMHg2Rjc3LCAweDZGNzcsIDB4MjNFQSwKKyAgICAweDZGNzgsIDB4NkY3OCwgMHgxNzE4LCAweDZGNzksIDB4NkY3OSwgMHgzQTVBLCAweDZGN0EsIDB4NkY3QSwgMHgxNzFCLAorICAgIDB4NkY3QiwgMHg2RjdCLCAweDNBNUIsIDB4NkY3QywgMHg2RjdDLCAweDE3MUEsIDB4NkY3RCwgMHg2RjdFLCAweDNBNUMsCisgICAgMHg2RjdGLCAweDZGN0YsIDB4MjNFMywgMHg2RjgwLCAweDZGODAsIDB4MjEwRSwgMHg2RjgxLCAweDZGODMsIDB4M0E1RSwKKyAgICAweDZGODQsIDB4NkY4NCwgMHgwNEYzLCAweDZGODUsIDB4NkY4NSwgMHgzQTYxLCAweDZGODYsIDB4NkY4NiwgMHgxRkE2LAorICAgIDB4NkY4NywgMHg2Rjg3LCAweDIwMDQsIDB4NkY4OCwgMHg2Rjg4LCAweDA0REYsIDB4NkY4OSwgMHg2Rjg5LCAweDE3MTUsCisgICAgMHg2RjhBLCAweDZGOEIsIDB4M0E2MiwgMHg2RjhDLCAweDZGOEMsIDB4MTcxNywgMHg2RjhELCAweDZGOEQsIDB4MTcxNiwKKyAgICAweDZGOEUsIDB4NkY4RSwgMHgwQkFELCAweDZGOEYsIDB4NkY5NiwgMHgzQTY0LCAweDZGOTcsIDB4NkY5NywgMHgxRjlELAorICAgIDB4NkY5OCwgMHg2RjlCLCAweDNBNkMsIDB4NkY5QywgMHg2RjlDLCAweDA5QTgsIDB4NkY5RCwgMHg2RjlGLCAweDNBNzAsCisgICAgMHg2RkEwLCAweDZGQTAsIDB4MjNFNSwgMHg2RkExLCAweDZGQTEsIDB4MTEyQiwgMHg2RkEyLCAweDZGQTMsIDB4M0E3MywKKyAgICAweDZGQTQsIDB4NkZBNCwgMHgyMjY0LCAweDZGQTUsIDB4NkZBNiwgMHgzQTc1LCAweDZGQTcsIDB4NkZBNywgMHgxNzFFLAorICAgIDB4NkZBOCwgMHg2RkE4LCAweDNBNzcsIDB4NkZBOSwgMHg2RkE5LCAweDI0RTIsIDB4NkZBQSwgMHg2RkFELCAweDNBNzgsCisgICAgMHg2RkFFLCAweDZGQUUsIDB4MjNERSwgMHg2RkFGLCAweDZGQjAsIDB4M0E3QywgMHg2RkIxLCAweDZGQjEsIDB4MUVDNCwKKyAgICAweDZGQjIsIDB4NkZCMiwgMHgzQTdFLCAweDZGQjMsIDB4NkZCMywgMHgwM0NGLCAweDZGQjQsIDB4NkZCNSwgMHgzQTdGLAorICAgIDB4NkZCNiwgMHg2RkI2LCAweDE3MjAsIDB4NkZCNywgMHg2RkI4LCAweDNBODEsIDB4NkZCOSwgMHg2RkI5LCAweDE3MUYsCisgICAgMHg2RkJBLCAweDZGQkYsIDB4M0E4MywgMHg2RkMwLCAweDZGQzAsIDB4MDgxNywgMHg2RkMxLCAweDZGQzEsIDB4MjJCNiwKKyAgICAweDZGQzIsIDB4NkZDMiwgMHgxNzIxLCAweDZGQzMsIDB4NkZDMywgMHgyMEE5LCAweDZGQzQsIDB4NkZDOCwgMHgzQTg5LAorICAgIDB4NkZDOSwgMHg2RkM5LCAweDE3MUQsIDB4NkZDQSwgMHg2RkQwLCAweDNBOEUsIDB4NkZEMSwgMHg2RkQxLCAweDE3MUMsCisgICAgMHg2RkQyLCAweDZGRDIsIDB4MDQ1RCwgMHg2RkQzLCAweDZGRDQsIDB4M0E5NSwgMHg2RkQ1LCAweDZGRDUsIDB4MjEyQiwKKyAgICAweDZGRDYsIDB4NkZENywgMHgzQTk3LCAweDZGRDgsIDB4NkZEOCwgMHgyMEE1LCAweDZGRDksIDB4NkZEQSwgMHgzQTk5LAorICAgIDB4NkZEQiwgMHg2RkRCLCAweDI2OEIsIDB4NkZEQywgMHg2RkRELCAweDNBOUIsIDB4NkZERSwgMHg2RkRFLCAweDE3MjQsCisgICAgMHg2RkRGLCAweDZGREYsIDB4MUY3NiwgMHg2RkUwLCAweDZGRTAsIDB4MTcyNSwgMHg2RkUxLCAweDZGRTEsIDB4MTcyMiwKKyAgICAweDZGRTIsIDB4NkZFMywgMHgzQTlELCAweDZGRTQsIDB4NkZFNCwgMHgyMTZELCAweDZGRTUsIDB4NkZFQSwgMHgzQTlGLAorICAgIDB4NkZFQiwgMHg2RkVCLCAweDIwMDEsIDB4NkZFQywgMHg2RkVELCAweDNBQTUsIDB4NkZFRSwgMHg2RkVFLCAweDE3MjMsCisgICAgMHg2RkVGLCAweDZGRUYsIDB4MTcyNiwgMHg2RkYwLCAweDZGRjAsIDB4MjE5MSwgMHg2RkYxLCAweDZGRjEsIDB4MUU1MCwKKyAgICAweDZGRjIsIDB4NkZGOSwgMHgzQUE3LCAweDZGRkEsIDB4NkZGQSwgMHgxRjlDLCAweDZGRkIsIDB4NkZGQiwgMHgzQUFGLAorICAgIDB4NkZGQywgMHg2RkZDLCAweDIzREEsIDB4NkZGRCwgMHg2RkZELCAweDNBQjAsIDB4NkZGRSwgMHg2RkZFLCAweDIwNTMsCisgICAgMHg2RkZGLCAweDZGRkYsIDB4M0FCMSwgMHg3MDAwLCAweDcwMDQsIDB4M0FCMiwgMHg3MDA1LCAweDcwMDUsIDB4MjNFOSwKKyAgICAweDcwMDYsIDB4NzAwNiwgMHgyM0U0LCAweDcwMDcsIDB4NzAwOCwgMHgzQUI3LCAweDcwMDksIDB4NzAwOSwgMHgyMUQ1LAorICAgIDB4NzAwQSwgMHg3MDBBLCAweDNBQjksIDB4NzAwQiwgMHg3MDBCLCAweDIzRTYsIDB4NzAwQywgMHg3MDBFLCAweDNBQkEsCisgICAgMHg3MDBGLCAweDcwMEYsIDB4MjNERiwgMHg3MDEwLCAweDcwMTAsIDB4M0FCRCwgMHg3MDExLCAweDcwMTEsIDB4MEJGOCwKKyAgICAweDcwMTIsIDB4NzAxNCwgMHgzQUJFLCAweDcwMTUsIDB4NzAxNSwgMHgxRTRGLCAweDcwMTYsIDB4NzAxNywgMHgzQUMxLAorICAgIDB4NzAxOCwgMHg3MDE4LCAweDIzRDksIDB4NzAxOSwgMHg3MDE5LCAweDNBQzMsIDB4NzAxQSwgMHg3MDFBLCAweDE3MjcsCisgICAgMHg3MDFCLCAweDcwMUIsIDB4MTcyOSwgMHg3MDFDLCAweDcwMUMsIDB4M0FDNCwgMHg3MDFELCAweDcwMUQsIDB4MjAxNCwKKyAgICAweDcwMUUsIDB4NzAxRSwgMHgzQUM1LCAweDcwMUYsIDB4NzAxRiwgMHgyM0VDLCAweDcwMjAsIDB4NzAyMCwgMHgyM0VCLAorICAgIDB4NzAyMSwgMHg3MDIyLCAweDNBQzYsIDB4NzAyMywgMHg3MDIzLCAweDE3MjgsIDB4NzAyNCwgMHg3MDI2LCAweDNBQzgsCisgICAgMHg3MDI3LCAweDcwMjcsIDB4MjNEOCwgMHg3MDI4LCAweDcwMjgsIDB4MjNFRSwgMHg3MDI5LCAweDcwMkYsIDB4M0FDQiwKKyAgICAweDcwMzAsIDB4NzAzMCwgMHgyNjhFLCAweDcwMzEsIDB4NzAzMSwgMHgzQUQyLCAweDcwMzIsIDB4NzAzMiwgMHgyM0VELAorICAgIDB4NzAzMywgMHg3MDM0LCAweDNBRDMsIDB4NzAzNSwgMHg3MDM1LCAweDE3MkIsIDB4NzAzNiwgMHg3MDM4LCAweDNBRDUsCisgICAgMHg3MDM5LCAweDcwMzksIDB4MTcyQSwgMHg3MDNBLCAweDcwM0QsIDB4M0FEOCwgMHg3MDNFLCAweDcwM0UsIDB4MUZGQSwKKyAgICAweDcwM0YsIDB4NzA0MiwgMHgzQURDLCAweDcwNDMsIDB4NzA0MywgMHgyM0Q2LCAweDcwNDQsIDB4NzA0NCwgMHgyM0U4LAorICAgIDB4NzA0NSwgMHg3MDRCLCAweDNBRTAsIDB4NzA0QywgMHg3MDRDLCAweDA3MzksIDB4NzA0RCwgMHg3MDRFLCAweDNBRTcsCisgICAgMHg3MDRGLCAweDcwNEYsIDB4MTcyQywgMHg3MDUwLCAweDcwNTAsIDB4M0FFOSwgMHg3MDUxLCAweDcwNTEsIDB4MjEwNiwKKyAgICAweDcwNTIsIDB4NzA1NCwgMHgzQUVBLCAweDcwNTUsIDB4NzA1NSwgMHgyMDBCLCAweDcwNTYsIDB4NzA1NywgMHgzQUVELAorICAgIDB4NzA1OCwgMHg3MDU4LCAweDIxNjYsIDB4NzA1OSwgMHg3MDVDLCAweDNBRUYsIDB4NzA1RCwgMHg3MDVELCAweDIzRUYsCisgICAgMHg3MDVFLCAweDcwNUUsIDB4MTcyRCwgMHg3MDVGLCAweDcwNjIsIDB4M0FGMywgMHg3MDYzLCAweDcwNjMsIDB4MjE4OSwKKyAgICAweDcwNjQsIDB4NzA2NCwgMHgyMDU4LCAweDcwNjUsIDB4NzA2NiwgMHgzQUY3LCAweDcwNjcsIDB4NzA2NywgMHgyM0U3LAorICAgIDB4NzA2OCwgMHg3MDZBLCAweDNBRjksIDB4NzA2QiwgMHg3MDZCLCAweDA4MDUsIDB4NzA2QywgMHg3MDZDLCAweDE5RUYsCisgICAgMHg3MDZELCAweDcwNkQsIDB4MEFGNSwgMHg3MDZFLCAweDcwNkUsIDB4M0FGQywgMHg3MDZGLCAweDcwNkYsIDB4MDVBNywKKyAgICAweDcwNzAsIDB4NzA3MCwgMHgwN0U3LCAweDcwNzEsIDB4NzA3NCwgMHgzQUZELCAweDcwNzUsIDB4NzA3NSwgMHgwQTMyLAorICAgIDB4NzA3NiwgMHg3MDc2LCAweDExMzEsIDB4NzA3NywgMHg3MDc3LCAweDNCMDEsIDB4NzA3OCwgMHg3MDc4LCAweDA4RjMsCisgICAgMHg3MDc5LCAweDcwN0IsIDB4M0IwMiwgMHg3MDdDLCAweDcwN0MsIDB4MTIyMywgMHg3MDdELCAweDcwN0QsIDB4M0IwNSwKKyAgICAweDcwN0UsIDB4NzA3RSwgMHgxMTE5LCAweDcwN0YsIDB4NzA3RiwgMHgwNDlBLCAweDcwODAsIDB4NzA4MCwgMHgxOUNDLAorICAgIDB4NzA4MSwgMHg3MDg0LCAweDNCMDYsIDB4NzA4NSwgMHg3MDg1LCAweDE5MTMsIDB4NzA4NiwgMHg3MDg4LCAweDNCMEEsCisgICAgMHg3MDg5LCAweDcwODksIDB4MEE1NiwgMHg3MDhBLCAweDcwOEEsIDB4MDUzOSwgMHg3MDhCLCAweDcwOEQsIDB4M0IwRCwKKyAgICAweDcwOEUsIDB4NzA4RSwgMHgxMDAwLCAweDcwOEYsIDB4NzA5MSwgMHgzQjEwLCAweDcwOTIsIDB4NzA5MiwgMHgwNEQ5LAorICAgIDB4NzA5MywgMHg3MDkzLCAweDNCMTMsIDB4NzA5NCwgMHg3MDk0LCAweDBDOEQsIDB4NzA5NSwgMHg3MDk1LCAweDA5NDgsCisgICAgMHg3MDk2LCAweDcwOTYsIDB4MTlDRSwgMHg3MDk3LCAweDcwOTgsIDB4M0IxNCwgMHg3MDk5LCAweDcwOTksIDB4MTFDQSwKKyAgICAweDcwOUEsIDB4NzA5QiwgMHgzQjE2LCAweDcwOUMsIDB4NzA5QywgMHgxOUNELCAweDcwOUQsIDB4NzA5RCwgMHgxOUNGLAorICAgIDB4NzA5RSwgMHg3MEFBLCAweDNCMTgsIDB4NzBBQiwgMHg3MEFCLCAweDE5RDMsIDB4NzBBQywgMHg3MEFDLCAweDA5MTUsCisgICAgMHg3MEFELCAweDcwQUQsIDB4MEUxMiwgMHg3MEFFLCAweDcwQUUsIDB4MEI5QiwgMHg3MEFGLCAweDcwQUYsIDB4MDhFQiwKKyAgICAweDcwQjAsIDB4NzBCMCwgMHgzQjI1LCAweDcwQjEsIDB4NzBCMSwgMHgxOUQ0LCAweDcwQjIsIDB4NzBCMiwgMHgzQjI2LAorICAgIDB4NzBCMywgMHg3MEIzLCAweDA0NjcsIDB4NzBCNCwgMHg3MEI2LCAweDNCMjcsIDB4NzBCNywgMHg3MEI3LCAweDE5RDIsCisgICAgMHg3MEI4LCAweDcwQjgsIDB4MTE0OSwgMHg3MEI5LCAweDcwQjksIDB4MDVDNCwgMHg3MEJBLCAweDcwQkEsIDB4M0IyQSwKKyAgICAweDcwQkIsIDB4NzBCQiwgMHgxOUQwLCAweDcwQkMsIDB4NzBCQywgMHgwOUZGLCAweDcwQkQsIDB4NzBCRCwgMHgwNTA4LAorICAgIDB4NzBCRSwgMHg3MEJGLCAweDNCMkIsIDB4NzBDMCwgMHg3MEMwLCAweDE5RDEsIDB4NzBDMSwgMHg3MEMxLCAweDBEQUQsCisgICAgMHg3MEMyLCAweDcwQzIsIDB4MDlBRSwgMHg3MEMzLCAweDcwQzMsIDB4MEU1MSwgMHg3MEM0LCAweDcwQzcsIDB4M0IyRCwKKyAgICAweDcwQzgsIDB4NzBDOCwgMHgwQTFCLCAweDcwQzksIDB4NzBDOSwgMHgzQjMxLCAweDcwQ0EsIDB4NzBDQSwgMHgxOUQ2LAorICAgIDB4NzBDQiwgMHg3MENFLCAweDNCMzIsIDB4NzBDRiwgMHg3MENGLCAweDIxQTMsIDB4NzBEMCwgMHg3MEQ3LCAweDNCMzYsCisgICAgMHg3MEQ4LCAweDcwRDgsIDB4MDc5RCwgMHg3MEQ5LCAweDcwRDksIDB4MDlCRSwgMHg3MERBLCAweDcwREEsIDB4M0IzRSwKKyAgICAweDcwREIsIDB4NzBEQiwgMHgxMUYxLCAweDcwREMsIDB4NzBERSwgMHgzQjNGLCAweDcwREYsIDB4NzBERiwgMHgwRkY1LAorICAgIDB4NzBFMCwgMHg3MEUzLCAweDNCNDIsIDB4NzBFNCwgMHg3MEU0LCAweDA5NEIsIDB4NzBFNSwgMHg3MEU1LCAweDNCNDYsCisgICAgMHg3MEU2LCAweDcwRTYsIDB4MDY1MCwgMHg3MEU3LCAweDcwRTcsIDB4MEQwRSwgMHg3MEU4LCAweDcwRTgsIDB4MTlENSwKKyAgICAweDcwRTksIDB4NzBFOSwgMHgwN0Y3LCAweDcwRUEsIDB4NzBFQSwgMHgzQjQ3LCAweDcwRUIsIDB4NzBFQiwgMHgwRTFGLAorICAgIDB4NzBFQywgMHg3MEVDLCAweDA4Q0UsIDB4NzBFRCwgMHg3MEVELCAweDBDQTMsIDB4NzBFRSwgMHg3MEVFLCAweDNCNDgsCisgICAgMHg3MEVGLCAweDcwRUYsIDB4MEYxNiwgMHg3MEYwLCAweDcwRjMsIDB4M0I0OSwgMHg3MEY0LCAweDcwRjQsIDB4MjE3QSwKKyAgICAweDcwRjUsIDB4NzBGNiwgMHgzQjRELCAweDcwRjcsIDB4NzBGNywgMHgwRTlBLCAweDcwRjgsIDB4NzBGOCwgMHgzQjRGLAorICAgIDB4NzBGOSwgMHg3MEY5LCAweDBCQUMsIDB4NzBGQSwgMHg3MEZDLCAweDNCNTAsIDB4NzBGRCwgMHg3MEZELCAweDA2ODYsCisgICAgMHg3MEZFLCAweDcwRkYsIDB4M0I1MywgMHg3MTAwLCAweDcxMDgsIDB4M0I1NSwgMHg3MTA5LCAweDcxMDksIDB4MEZGMiwKKyAgICAweDcxMEEsIDB4NzEwQSwgMHgwNzZGLCAweDcxMEIsIDB4NzEwRiwgMHgzQjVFLCAweDcxMTAsIDB4NzExMCwgMHgxOUQ3LAorICAgIDB4NzExMSwgMHg3MTEyLCAweDNCNjMsIDB4NzExMywgMHg3MTEzLCAweDE5RDgsIDB4NzExNCwgMHg3MTE0LCAweDNCNjUsCisgICAgMHg3MTE1LCAweDcxMTUsIDB4MDdENSwgMHg3MTE2LCAweDcxMTYsIDB4MTlEOSwgMHg3MTE3LCAweDcxMTcsIDB4M0I2NiwKKyAgICAweDcxMTgsIDB4NzExOCwgMHgxOUYwLCAweDcxMTksIDB4NzExOSwgMHgwNDIzLCAweDcxMUEsIDB4NzExQSwgMHgwNjc2LAorICAgIDB4NzExQiwgMHg3MTIwLCAweDNCNjcsIDB4NzEyMSwgMHg3MTIxLCAweDIxQTUsIDB4NzEyMiwgMHg3MTI1LCAweDNCNkQsCisgICAgMHg3MTI2LCAweDcxMjYsIDB4MDg4QSwgMHg3MTI3LCAweDcxMkUsIDB4M0I3MSwgMHg3MTJGLCAweDcxMkYsIDB4MTlEQSwKKyAgICAweDcxMzAsIDB4NzEzMCwgMHgxMDBGLCAweDcxMzEsIDB4NzEzMSwgMHgxOURCLCAweDcxMzIsIDB4NzEzNSwgMHgzQjc5LAorICAgIDB4NzEzNiwgMHg3MTM2LCAweDBDOTYsIDB4NzEzNywgMHg3MTQ0LCAweDNCN0QsIDB4NzE0NSwgMHg3MTQ1LCAweDE5REYsCisgICAgMHg3MTQ2LCAweDcxNDgsIDB4M0I4QiwgMHg3MTQ5LCAweDcxNDksIDB4MjAyMiwgMHg3MTRBLCAweDcxNEEsIDB4MTlFMSwKKyAgICAweDcxNEIsIDB4NzE0QiwgMHgzQjhFLCAweDcxNEMsIDB4NzE0QywgMHgwN0UyLCAweDcxNEQsIDB4NzE0RCwgMHgzQjhGLAorICAgIDB4NzE0RSwgMHg3MTRFLCAweDA4NTgsIDB4NzE0RiwgMHg3MTUxLCAweDNCOTAsIDB4NzE1MiwgMHg3MTUyLCAweDI0RDYsCisgICAgMHg3MTUzLCAweDcxNUIsIDB4M0I5MywgMHg3MTVDLCAweDcxNUMsIDB4MTlERCwgMHg3MTVELCAweDcxNUQsIDB4M0I5QywKKyAgICAweDcxNUUsIDB4NzE1RSwgMHgwQ0YwLCAweDcxNUYsIDB4NzE2MSwgMHgzQjlELCAweDcxNjIsIDB4NzE2MiwgMHgyMzNBLAorICAgIDB4NzE2MywgMHg3MTYzLCAweDNCQTAsIDB4NzE2NCwgMHg3MTY0LCAweDBBQkYsIDB4NzE2NSwgMHg3MTY1LCAweDNCQTEsCisgICAgMHg3MTY2LCAweDcxNjYsIDB4MTlGMSwgMHg3MTY3LCAweDcxNjcsIDB4MTE3NiwgMHg3MTY4LCAweDcxNjgsIDB4MTlERSwKKyAgICAweDcxNjksIDB4NzE2OSwgMHgxRUVFLCAweDcxNkEsIDB4NzE2QiwgMHgzQkEyLCAweDcxNkMsIDB4NzE2QywgMHgyNEQ1LAorICAgIDB4NzE2RCwgMHg3MTZELCAweDNCQTQsIDB4NzE2RSwgMHg3MTZFLCAweDExRjIsIDB4NzE2RiwgMHg3MTcxLCAweDNCQTUsCisgICAgMHg3MTcyLCAweDcxNzIsIDB4MTlFMCwgMHg3MTczLCAweDcxNzMsIDB4MTlEQywgMHg3MTc0LCAweDcxNzcsIDB4M0JBOCwKKyAgICAweDcxNzgsIDB4NzE3OCwgMHgxOUUyLCAweDcxNzksIDB4NzE3OSwgMHgzQkFDLCAweDcxN0EsIDB4NzE3QSwgMHgxOUUzLAorICAgIDB4NzE3QiwgMHg3MTdDLCAweDNCQUQsIDB4NzE3RCwgMHg3MTdELCAweDBDRjgsIDB4NzE3RSwgMHg3MTgzLCAweDNCQUYsCisgICAgMHg3MTg0LCAweDcxODQsIDB4MEYxNSwgMHg3MTg1LCAweDcxODksIDB4M0JCNSwgMHg3MThBLCAweDcxOEEsIDB4MEZBNywKKyAgICAweDcxOEIsIDB4NzE4RSwgMHgzQkJBLCAweDcxOEYsIDB4NzE4RiwgMHgwRkQ1LCAweDcxOTAsIDB4NzE5MSwgMHgzQkJFLAorICAgIDB4NzE5MiwgMHg3MTkyLCAweDIyMjgsIDB4NzE5MywgMHg3MTkzLCAweDNCQzAsIDB4NzE5NCwgMHg3MTk0LCAweDBDQjYsCisgICAgMHg3MTk1LCAweDcxOTYsIDB4M0JDMSwgMHg3MTk3LCAweDcxOTcsIDB4MjRENywgMHg3MTk4LCAweDcxOTgsIDB4MTlFNCwKKyAgICAweDcxOTksIDB4NzE5OSwgMHgwRjA0LCAweDcxOUEsIDB4NzE5RSwgMHgzQkMzLCAweDcxOUYsIDB4NzE5RiwgMHgwRDgzLAorICAgIDB4NzFBMCwgMHg3MUEwLCAweDE5RTgsIDB4NzFBMSwgMHg3MUE3LCAweDNCQzgsIDB4NzFBOCwgMHg3MUE4LCAweDE5RTcsCisgICAgMHg3MUE5LCAweDcxQUIsIDB4M0JDRiwgMHg3MUFDLCAweDcxQUMsIDB4MDNDOSwgMHg3MUFELCAweDcxQjAsIDB4M0JEMiwKKyAgICAweDcxQjEsIDB4NzFCMSwgMHgyMEZDLCAweDcxQjIsIDB4NzFCMiwgMHgzQkQ2LCAweDcxQjMsIDB4NzFCMywgMHgxOUU1LAorICAgIDB4NzFCNCwgMHg3MUI0LCAweDNCRDcsIDB4NzFCNSwgMHg3MUI1LCAweDE5RTYsIDB4NzFCNiwgMHg3MUI4LCAweDNCRDgsCisgICAgMHg3MUI5LCAweDcxQjksIDB4MTlGMiwgMHg3MUJBLCAweDcxQkQsIDB4M0JEQiwgMHg3MUJFLCAweDcxQkUsIDB4MUU4NywKKyAgICAweDcxQkYsIDB4NzFDMCwgMHgzQkRGLCAweDcxQzEsIDB4NzFDMSwgMHgyNEQ4LCAweDcxQzIsIDB4NzFDMiwgMHgzQkUxLAorICAgIDB4NzFDMywgMHg3MUMzLCAweDBDOTcsIDB4NzFDNCwgMHg3MUM3LCAweDNCRTIsIDB4NzFDOCwgMHg3MUM4LCAweDFFQkEsCisgICAgMHg3MUM5LCAweDcxQ0QsIDB4M0JFNiwgMHg3MUNFLCAweDcxQ0UsIDB4MEExMCwgMHg3MUNGLCAweDcxRDEsIDB4M0JFQiwKKyAgICAweDcxRDIsIDB4NzFEMiwgMHgyMTE5LCAweDcxRDMsIDB4NzFEMywgMHgzQkVFLCAweDcxRDQsIDB4NzFENCwgMHgxOUVBLAorICAgIDB4NzFENSwgMHg3MUQ1LCAweDEwMDksIDB4NzFENiwgMHg3MUQ4LCAweDNCRUYsIDB4NzFEOSwgMHg3MUQ5LCAweDIxNkMsCisgICAgMHg3MURBLCAweDcxREIsIDB4M0JGMiwgMHg3MURDLCAweDcxREMsIDB4MjREOSwgMHg3MURELCAweDcxREUsIDB4M0JGNCwKKyAgICAweDcxREYsIDB4NzFERiwgMHgyMjI3LCAweDcxRTAsIDB4NzFFMCwgMHgxOUU5LCAweDcxRTEsIDB4NzFFNCwgMHgzQkY2LAorICAgIDB4NzFFNSwgMHg3MUU1LCAweDExMzIsIDB4NzFFNiwgMHg3MUU2LCAweDFFNUYsIDB4NzFFNywgMHg3MUU3LCAweDE5RUIsCisgICAgMHg3MUU4LCAweDcxRUMsIDB4M0JGQSwgMHg3MUVELCAweDcxRUQsIDB4MjI5RiwgMHg3MUVFLCAweDcxRUUsIDB4MTM5NiwKKyAgICAweDcxRUYsIDB4NzFGMywgMHgzQkZGLCAweDcxRjQsIDB4NzFGNCwgMHgxRjVELCAweDcxRjUsIDB4NzFGOCwgMHgzQzA0LAorICAgIDB4NzFGOSwgMHg3MUY5LCAweDE5RUMsIDB4NzFGQSwgMHg3MUZCLCAweDNDMDgsIDB4NzFGQywgMHg3MUZDLCAweDFGQkMsCisgICAgMHg3MUZELCAweDcxRkQsIDB4M0MwQSwgMHg3MUZFLCAweDcxRkUsIDB4MjREQSwgMHg3MUZGLCAweDcxRkYsIDB4M0MwQiwKKyAgICAweDcyMDAsIDB4NzIwNSwgMHgzQzBDLCAweDcyMDYsIDB4NzIwNiwgMHgwNDE1LCAweDcyMDcsIDB4NzIwQywgMHgzQzEyLAorICAgIDB4NzIwRCwgMHg3MjBELCAweDIxNDksIDB4NzIwRSwgMHg3MjBGLCAweDNDMTgsIDB4NzIxMCwgMHg3MjEwLCAweDIwNDYsCisgICAgMHg3MjExLCAweDcyMUEsIDB4M0MxQSwgMHg3MjFCLCAweDcyMUIsIDB4MjAwMCwgMHg3MjFDLCAweDcyMUMsIDB4M0MyNCwKKyAgICAweDcyMUQsIDB4NzIxRCwgMHgxOUVELCAweDcyMUUsIDB4NzIyNywgMHgzQzI1LCAweDcyMjgsIDB4NzIyOCwgMHgxOUVFLAorICAgIDB4NzIyOSwgMHg3MjI5LCAweDNDMkYsIDB4NzIyQSwgMHg3MjJBLCAweDEyMDMsIDB4NzIyQiwgMHg3MjJCLCAweDNDMzAsCisgICAgMHg3MjJDLCAweDcyMkMsIDB4MEI4MSwgMHg3MjJELCAweDcyMkYsIDB4M0MzMSwgMHg3MjMwLCAweDcyMzAsIDB4MTk2QywKKyAgICAweDcyMzEsIDB4NzIzMSwgMHgwM0I5LCAweDcyMzIsIDB4NzIzMiwgMHgyMTkwLCAweDcyMzMsIDB4NzIzNCwgMHgzQzM0LAorICAgIDB4NzIzNSwgMHg3MjM1LCAweDA5MjMsIDB4NzIzNiwgMHg3MjM2LCAweDA2QjMsIDB4NzIzNywgMHg3MjM3LCAweDEwMzYsCisgICAgMHg3MjM4LCAweDcyMzgsIDB4MDNFMSwgMHg3MjM5LCAweDcyMzksIDB4MDVEQSwgMHg3MjNBLCAweDcyM0EsIDB4MjIwOCwKKyAgICAweDcyM0IsIDB4NzIzQiwgMHgxMjY5LCAweDcyM0MsIDB4NzIzQywgMHgzQzM2LCAweDcyM0QsIDB4NzIzRCwgMHgwREExLAorICAgIDB4NzIzRSwgMHg3MjNFLCAweDFFRTYsIDB4NzIzRiwgMHg3MjNGLCAweDE2OUQsIDB4NzI0MCwgMHg3MjQ2LCAweDNDMzcsCisgICAgMHg3MjQ3LCAweDcyNDcsIDB4MEJDQiwgMHg3MjQ4LCAweDcyNDgsIDB4MDNGMSwgMHg3MjQ5LCAweDcyNEIsIDB4M0MzRSwKKyAgICAweDcyNEMsIDB4NzI0QywgMHgwQjg3LCAweDcyNEQsIDB4NzI0RCwgMHgxOTY5LCAweDcyNEUsIDB4NzI1MSwgMHgzQzQxLAorICAgIDB4NzI1MiwgMHg3MjUyLCAweDE5NkEsIDB4NzI1MywgMHg3MjU1LCAweDNDNDUsIDB4NzI1NiwgMHg3MjU2LCAweDE5NkIsCisgICAgMHg3MjU3LCAweDcyNTcsIDB4M0M0OCwgMHg3MjU4LCAweDcyNTgsIDB4MjRDMywgMHg3MjU5LCAweDcyNTksIDB4MEZFOSwKKyAgICAweDcyNUEsIDB4NzI1QSwgMHgzQzQ5LCAweDcyNUIsIDB4NzI1QiwgMHgwQjY0LCAweDcyNUMsIDB4NzI1QywgMHgzQzRBLAorICAgIDB4NzI1RCwgMHg3MjVELCAweDE5NDQsIDB4NzI1RSwgMHg3MjVFLCAweDNDNEIsIDB4NzI1RiwgMHg3MjVGLCAweDBCMTUsCisgICAgMHg3MjYwLCAweDcyNjAsIDB4M0M0QywgMHg3MjYxLCAweDcyNjEsIDB4MEIxOCwgMHg3MjYyLCAweDcyNjIsIDB4MDlCOSwKKyAgICAweDcyNjMsIDB4NzI2NSwgMHgzQzRELCAweDcyNjYsIDB4NzI2NiwgMHgxOTQ1LCAweDcyNjcsIDB4NzI2NywgMHgwQjI0LAorICAgIDB4NzI2OCwgMHg3MjY4LCAweDNDNTAsIDB4NzI2OSwgMHg3MjY5LCAweDBFRkUsIDB4NzI2QSwgMHg3MjZELCAweDNDNTEsCisgICAgMHg3MjZFLCAweDcyNkUsIDB4MTk0MiwgMHg3MjZGLCAweDcyNkYsIDB4MTk0NiwgMHg3MjcwLCAweDcyNzEsIDB4M0M1NSwKKyAgICAweDcyNzIsIDB4NzI3MiwgMHgwRDM1LCAweDcyNzMsIDB4NzI3NCwgMHgzQzU3LCAweDcyNzUsIDB4NzI3NSwgMHgwQzIwLAorICAgIDB4NzI3NiwgMHg3Mjc4LCAweDNDNTksIDB4NzI3OSwgMHg3Mjc5LCAweDBFMkIsIDB4NzI3QSwgMHg3MjdBLCAweDBGMEQsCisgICAgMHg3MjdCLCAweDcyN0MsIDB4M0M1QywgMHg3MjdELCAweDcyN0QsIDB4MjBDQywgMHg3MjdFLCAweDcyN0YsIDB4MTk0NywKKyAgICAweDcyODAsIDB4NzI4MCwgMHgwRjE5LCAweDcyODEsIDB4NzI4MSwgMHgwOUQyLCAweDcyODIsIDB4NzI4MywgMHgzQzVFLAorICAgIDB4NzI4NCwgMHg3Mjg0LCAweDE5NDksIDB4NzI4NSwgMHg3Mjg5LCAweDNDNjAsIDB4NzI4QSwgMHg3MjhBLCAweDA1RkUsCisgICAgMHg3MjhCLCAweDcyOEIsIDB4MTk0QSwgMHg3MjhDLCAweDcyOEMsIDB4M0M2NSwgMHg3MjhELCAweDcyOEQsIDB4MTk0QiwKKyAgICAweDcyOEUsIDB4NzI4RSwgMHgzQzY2LCAweDcyOEYsIDB4NzI4RiwgMHgxOTRDLCAweDcyOTAsIDB4NzI5MSwgMHgzQzY3LAorICAgIDB4NzI5MiwgMHg3MjkyLCAweDE5NEQsIDB4NzI5MywgMHg3Mjk1LCAweDNDNjksIDB4NzI5NiwgMHg3Mjk2LCAweDIzNDAsCisgICAgMHg3Mjk3LCAweDcyOUUsIDB4M0M2QywgMHg3MjlGLCAweDcyOUYsIDB4MTk0MywgMHg3MkEwLCAweDcyQTEsIDB4M0M3NCwKKyAgICAweDcyQTIsIDB4NzJBMiwgMHgxRUQxLCAweDcyQTMsIDB4NzJBNiwgMHgzQzc2LCAweDcyQTcsIDB4NzJBNywgMHgyMUFDLAorICAgIDB4NzJBOCwgMHg3MkFCLCAweDNDN0EsIDB4NzJBQywgMHg3MkFDLCAweDBDODksIDB4NzJBRCwgMHg3MkFELCAweDE1RUYsCisgICAgMHg3MkFFLCAweDcyQUUsIDB4M0M3RSwgMHg3MkFGLCAweDcyQUYsIDB4MDY1NSwgMHg3MkIwLCAweDcyQjAsIDB4MTVGMCwKKyAgICAweDcyQjEsIDB4NzJCMywgMHgzQzdGLCAweDcyQjQsIDB4NzJCNCwgMHgxNUYxLCAweDcyQjUsIDB4NzJCNSwgMHgzQzgyLAorICAgIDB4NzJCNiwgMHg3MkI2LCAweDEyMTEsIDB4NzJCNywgMHg3MkI4LCAweDE1RjIsIDB4NzJCOSwgMHg3MkI5LCAweDEwQjEsCisgICAgMHg3MkJBLCAweDcyQkYsIDB4M0M4MywgMHg3MkMwLCAweDcyQzAsIDB4MjJBRiwgMHg3MkMxLCAweDcyQzEsIDB4MTVGNSwKKyAgICAweDcyQzIsIDB4NzJDMiwgMHgwOTdFLCAweDcyQzMsIDB4NzJDMywgMHgxNUY0LCAweDcyQzQsIDB4NzJDNCwgMHgwNUIzLAorICAgIDB4NzJDNSwgMHg3MkM3LCAweDNDODksIDB4NzJDOCwgMHg3MkM4LCAweDA0MjAsIDB4NzJDOSwgMHg3MkNDLCAweDNDOEMsCisgICAgMHg3MkNELCAweDcyQ0QsIDB4MTVGNywgMHg3MkNFLCAweDcyQ0UsIDB4MTVGNiwgMHg3MkNGLCAweDcyQ0YsIDB4M0M5MCwKKyAgICAweDcyRDAsIDB4NzJEMCwgMHgwN0IzLCAweDcyRDEsIDB4NzJEMSwgMHgzQzkxLCAweDcyRDIsIDB4NzJEMiwgMHgxNUY4LAorICAgIDB4NzJEMywgMHg3MkQ2LCAweDNDOTIsIDB4NzJENywgMHg3MkQ3LCAweDA3MTAsIDB4NzJEOCwgMHg3MkQ4LCAweDNDOTYsCisgICAgMHg3MkQ5LCAweDcyRDksIDB4MDkwMCwgMHg3MkRBLCAweDcyREQsIDB4M0M5NywgMHg3MkRFLCAweDcyREUsIDB4MEI1RiwKKyAgICAweDcyREYsIDB4NzJERiwgMHgzQzlCLCAweDcyRTAsIDB4NzJFMCwgMHgwNzk0LCAweDcyRTEsIDB4NzJFMSwgMHgwODk3LAorICAgIDB4NzJFMiwgMHg3MkU3LCAweDNDOUMsIDB4NzJFOCwgMHg3MkU4LCAweDE1RjksIDB4NzJFOSwgMHg3MkU5LCAweDE1RkIsCisgICAgMHg3MkVBLCAweDcyRUIsIDB4M0NBMiwgMHg3MkVDLCAweDcyRUMsIDB4MDVGRiwgMHg3MkVELCAweDcyRUQsIDB4MEYyRSwKKyAgICAweDcyRUUsIDB4NzJFRSwgMHgwRDNGLCAweDcyRUYsIDB4NzJFRiwgMHgxNUZBLCAweDcyRjAsIDB4NzJGMCwgMHgxMTk5LAorICAgIDB4NzJGMSwgMHg3MkYxLCAweDEwRTEsIDB4NzJGMiwgMHg3MkYyLCAweDE1RkMsIDB4NzJGMywgMHg3MkYzLCAweDE2MDAsCisgICAgMHg3MkY0LCAweDcyRjQsIDB4MTVGRCwgMHg3MkY1LCAweDcyRjYsIDB4M0NBNCwgMHg3MkY3LCAweDcyRjcsIDB4MTVGRSwKKyAgICAweDcyRjgsIDB4NzJGOCwgMHgwOUQ1LCAweDcyRjksIDB4NzJGOSwgMHgyMUI2LCAweDcyRkEsIDB4NzJGQiwgMHgxNjAyLAorICAgIDB4NzJGQywgMHg3MkZDLCAweDA5QjIsIDB4NzJGRCwgMHg3MkZELCAweDFFM0QsIDB4NzJGRSwgMHg3MkZGLCAweDNDQTYsCisgICAgMHg3MzAwLCAweDczMDAsIDB4M0NBOCwgMHg3MzAxLCAweDczMDEsIDB4MTVGRiwgMHg3MzAyLCAweDczMDIsIDB4M0NBOSwKKyAgICAweDczMDMsIDB4NzMwMywgMHgxNjAxLCAweDczMDQsIDB4NzMwOSwgMHgzQ0FBLCAweDczMEEsIDB4NzMwQSwgMHgxNjA3LAorICAgIDB4NzMwQiwgMHg3MzBELCAweDNDQjAsIDB4NzMwRSwgMHg3MzBFLCAweDBBMUQsIDB4NzMwRiwgMHg3MzEyLCAweDNDQjMsCisgICAgMHg3MzEzLCAweDczMTMsIDB4MTYwNSwgMHg3MzE0LCAweDczMTQsIDB4M0NCNywgMHg3MzE1LCAweDczMTUsIDB4MTYwQSwKKyAgICAweDczMTYsIDB4NzMxNiwgMHgwNEM1LCAweDczMTcsIDB4NzMxNywgMHgxNjA0LCAweDczMTgsIDB4NzMxQSwgMHgzQ0I4LAorICAgIDB4NzMxQiwgMHg3MzFCLCAweDBBRDIsIDB4NzMxQywgMHg3MzFDLCAweDA0ODksIDB4NzMxRCwgMHg3MzFELCAweDE2MDksCisgICAgMHg3MzFFLCAweDczMUUsIDB4MTYwOCwgMHg3MzFGLCAweDczMjAsIDB4M0NCQiwgMHg3MzIxLCAweDczMjEsIDB4MTYwNiwKKyAgICAweDczMjIsIDB4NzMyMiwgMHgxNjBCLCAweDczMjMsIDB4NzMyNCwgMHgzQ0JELCAweDczMjUsIDB4NzMyNSwgMHgxNjBELAorICAgIDB4NzMyNiwgMHg3MzI4LCAweDNDQkYsIDB4NzMyOSwgMHg3MzI5LCAweDBGOTQsIDB4NzMyQSwgMHg3MzJBLCAweDExRUMsCisgICAgMHg3MzJCLCAweDczMkIsIDB4MEFBRCwgMHg3MzJDLCAweDczMkMsIDB4MTYwRSwgMHg3MzJELCAweDczMkQsIDB4M0NDMiwKKyAgICAweDczMkUsIDB4NzMyRSwgMHgwRjQ0LCAweDczMkYsIDB4NzMzMCwgMHgzQ0MzLCAweDczMzEsIDB4NzMzMSwgMHgxNjEwLAorICAgIDB4NzMzMiwgMHg3MzMzLCAweDNDQzUsIDB4NzMzNCwgMHg3MzM0LCAweDA3QTYsIDB4NzMzNSwgMHg3MzM1LCAweDNDQzcsCisgICAgMHg3MzM2LCAweDczMzYsIDB4MjIzNSwgMHg3MzM3LCAweDczMzcsIDB4MThENCwgMHg3MzM4LCAweDczMzgsIDB4MTYwRiwKKyAgICAweDczMzksIDB4NzMzOSwgMHgxNjBDLCAweDczM0EsIDB4NzMzQSwgMHgzQ0M4LCAweDczM0IsIDB4NzMzQiwgMHgyMzk3LAorICAgIDB4NzMzQywgMHg3MzNELCAweDNDQzksIDB4NzMzRSwgMHg3MzNFLCAweDA3QzAsIDB4NzMzRiwgMHg3MzNGLCAweDEwRjYsCisgICAgMHg3MzQwLCAweDczNDAsIDB4M0NDQiwgMHg3MzQxLCAweDczNDEsIDB4MjM5NSwgMHg3MzQyLCAweDczNDMsIDB4M0NDQywKKyAgICAweDczNDQsIDB4NzM0NCwgMHgyMjNGLCAweDczNDUsIDB4NzM0NSwgMHgyMTJBLCAweDczNDYsIDB4NzM0QywgMHgzQ0NFLAorICAgIDB4NzM0RCwgMHg3MzRELCAweDE2MTIsIDB4NzM0RSwgMHg3MzRGLCAweDNDRDUsIDB4NzM1MCwgMHg3MzUwLCAweDE2MTEsCisgICAgMHg3MzUxLCAweDczNTEsIDB4M0NENywgMHg3MzUyLCAweDczNTIsIDB4MThENSwgMHg3MzUzLCAweDczNTYsIDB4M0NEOCwKKyAgICAweDczNTcsIDB4NzM1NywgMHgxNjEzLCAweDczNTgsIDB4NzM1RiwgMHgzQ0RDLCAweDczNjAsIDB4NzM2MCwgMHgxNjE0LAorICAgIDB4NzM2MSwgMHg3MzY3LCAweDNDRTQsIDB4NzM2OCwgMHg3MzY4LCAweDFFRDIsIDB4NzM2OSwgMHg3MzY5LCAweDNDRUIsCisgICAgMHg3MzZBLCAweDczNkEsIDB4MjM5NiwgMHg3MzZCLCAweDczNkIsIDB4MjM5OCwgMHg3MzZDLCAweDczNkMsIDB4MTYxNSwKKyAgICAweDczNkQsIDB4NzM2RCwgMHgwREY0LCAweDczNkUsIDB4NzM2RSwgMHgzQ0VDLCAweDczNkYsIDB4NzM2RiwgMHgxNjE2LAorICAgIDB4NzM3MCwgMHg3MzcwLCAweDIwQTIsIDB4NzM3MSwgMHg3MzcxLCAweDNDRUQsIDB4NzM3MiwgMHg3MzcyLCAweDFGNjQsCisgICAgMHg3MzczLCAweDczNzQsIDB4M0NFRSwgMHg3Mzc1LCAweDczNzUsIDB4MjAyQiwgMHg3Mzc2LCAweDczNzYsIDB4M0NGMCwKKyAgICAweDczNzcsIDB4NzM3NywgMHgyMzk0LCAweDczNzgsIDB4NzM3OCwgMHgyMTM5LCAweDczNzksIDB4NzM3OSwgMHgzQ0YxLAorICAgIDB4NzM3QSwgMHg3MzdBLCAweDIxNUYsIDB4NzM3QiwgMHg3MzdCLCAweDIxQzEsIDB4NzM3QywgMHg3MzdDLCAweDIzOUEsCisgICAgMHg3MzdELCAweDczN0QsIDB4M0NGMiwgMHg3MzdFLCAweDczN0UsIDB4MTYxNywgMHg3MzdGLCAweDczN0YsIDB4M0NGMywKKyAgICAweDczODAsIDB4NzM4MCwgMHgyMzk5LCAweDczODEsIDB4NzM4MywgMHgzQ0Y0LCAweDczODQsIDB4NzM4NCwgMHgwRkM5LAorICAgIDB4NzM4NSwgMHg3Mzg2LCAweDNDRjcsIDB4NzM4NywgMHg3Mzg3LCAweDBBNzEsIDB4NzM4OCwgMHg3Mzg4LCAweDNDRjksCisgICAgMHg3Mzg5LCAweDczODksIDB4MTBENiwgMHg3MzhBLCAweDczOEEsIDB4M0NGQSwgMHg3MzhCLCAweDczOEIsIDB4MEVBNiwKKyAgICAweDczOEMsIDB4NzM4RCwgMHgzQ0ZCLCAweDczOEUsIDB4NzM4RSwgMHgxODE4LCAweDczOEYsIDB4NzM5MCwgMHgzQ0ZELAorICAgIDB4NzM5MSwgMHg3MzkxLCAweDE4MTksIDB4NzM5MiwgMHg3Mzk1LCAweDNDRkYsIDB4NzM5NiwgMHg3Mzk2LCAweDA4RjAsCisgICAgMHg3Mzk3LCAweDczOUEsIDB4M0QwMywgMHg3MzlCLCAweDczOUIsIDB4MEE5MSwgMHg3MzlDLCAweDczOUUsIDB4M0QwNywKKyAgICAweDczOUYsIDB4NzM5RiwgMHgxODFDLCAweDczQTAsIDB4NzNBMSwgMHgzRDBBLCAweDczQTIsIDB4NzNBMiwgMHgxODFCLAorICAgIDB4NzNBMywgMHg3M0E4LCAweDNEMEMsIDB4NzNBOSwgMHg3M0E5LCAweDBFOTcsIDB4NzNBQSwgMHg3M0FBLCAweDNEMTIsCisgICAgMHg3M0FCLCAweDczQUIsIDB4MEFCQSwgMHg3M0FDLCAweDczQUQsIDB4M0QxMywgMHg3M0FFLCAweDczQUUsIDB4MTgxQSwKKyAgICAweDczQUYsIDB4NzNBRiwgMHgwN0NDLCAweDczQjAsIDB4NzNCMCwgMHgwRjQzLCAweDczQjEsIDB4NzNCMSwgMHgzRDE1LAorICAgIDB4NzNCMiwgMHg3M0IyLCAweDBBMkEsIDB4NzNCMywgMHg3M0IzLCAweDE4MjEsIDB4NzNCNCwgMHg3M0I2LCAweDNEMTYsCisgICAgMHg3M0I3LCAweDczQjcsIDB4MTgyMCwgMHg3M0I4LCAweDczQjksIDB4M0QxOSwgMHg3M0JBLCAweDczQkEsIDB4MTgyQywKKyAgICAweDczQkIsIDB4NzNCQiwgMHgwNDZBLCAweDczQkMsIDB4NzNCRiwgMHgzRDFCLCAweDczQzAsIDB4NzNDMCwgMHgxODIyLAorICAgIDB4NzNDMSwgMHg3M0MxLCAweDNEMUYsIDB4NzNDMiwgMHg3M0MyLCAweDE4MUUsIDB4NzNDMywgMHg3M0M3LCAweDNEMjAsCisgICAgMHg3M0M4LCAweDczQzgsIDB4MTgyNCwgMHg3M0M5LCAweDczQzksIDB4MTgyMywgMHg3M0NBLCAweDczQ0EsIDB4MENGMywKKyAgICAweDczQ0IsIDB4NzNDQywgMHgzRDI1LCAweDczQ0QsIDB4NzNDRCwgMHgxMTg1LCAweDczQ0UsIDB4NzNDRSwgMHgzRDI3LAorICAgIDB4NzNDRiwgMHg3M0NGLCAweDE4MUQsIDB4NzNEMCwgMHg3M0QwLCAweDA2NDYsIDB4NzNEMSwgMHg3M0QxLCAweDE4MUYsCisgICAgMHg3M0QyLCAweDczRDgsIDB4M0QyOCwgMHg3M0Q5LCAweDczRDksIDB4MTgyNiwgMHg3M0RBLCAweDczREQsIDB4M0QyRiwKKyAgICAweDczREUsIDB4NzNERSwgMHgxODJCLCAweDczREYsIDB4NzNERiwgMHgzRDMzLCAweDczRTAsIDB4NzNFMCwgMHgxMUU4LAorICAgIDB4NzNFMSwgMHg3M0U0LCAweDNEMzQsIDB4NzNFNSwgMHg3M0U1LCAweDE4MjUsIDB4NzNFNiwgMHg3M0U2LCAweDNEMzgsCisgICAgMHg3M0U3LCAweDczRTcsIDB4MTgyQSwgMHg3M0U4LCAweDczRTgsIDB4M0QzOSwgMHg3M0U5LCAweDczRTksIDB4MTgyOSwKKyAgICAweDczRUEsIDB4NzNFQywgMHgzRDNBLCAweDczRUQsIDB4NzNFRCwgMHgwM0VCLCAweDczRUUsIDB4NzNGMSwgMHgzRDNELAorICAgIDB4NzNGMiwgMHg3M0YyLCAweDE4MkQsIDB4NzNGMywgMHg3M0ZELCAweDNENDEsIDB4NzNGRSwgMHg3M0ZFLCAweDIxQzAsCisgICAgMHg3M0ZGLCAweDczRkYsIDB4M0Q0QywgMHg3NDAwLCAweDc0MDIsIDB4M0Q0RCwgMHg3NDAzLCAweDc0MDMsIDB4MEM2RiwKKyAgICAweDc0MDQsIDB4NzQwNCwgMHgzRDUwLCAweDc0MDUsIDB4NzQwNSwgMHgwOUIwLCAweDc0MDYsIDB4NzQwNiwgMHgwOUQ4LAorICAgIDB4NzQwNywgMHg3NDA4LCAweDNENTEsIDB4NzQwOSwgMHg3NDA5LCAweDBBMzksIDB4NzQwQSwgMHg3NDBBLCAweDE4MjgsCisgICAgMHg3NDBCLCAweDc0MEUsIDB4M0Q1MywgMHg3NDBGLCAweDc0MEYsIDB4MTgyRSwgMHg3NDEwLCAweDc0MTAsIDB4MERFQiwKKyAgICAweDc0MTEsIDB4NzQxOSwgMHgzRDU3LCAweDc0MUEsIDB4NzQxQSwgMHgxODM4LCAweDc0MUIsIDB4NzQxQiwgMHgxODM3LAorICAgIDB4NzQxQywgMHg3NDIxLCAweDNENjAsIDB4NzQyMiwgMHg3NDIyLCAweDEyMUUsIDB4NzQyMywgMHg3NDI0LCAweDNENjYsCisgICAgMHg3NDI1LCAweDc0MjUsIDB4MTgzMiwgMHg3NDI2LCAweDc0MjYsIDB4MTgzMSwgMHg3NDI3LCAweDc0MjcsIDB4M0Q2OCwKKyAgICAweDc0MjgsIDB4NzQyOCwgMHgxODMzLCAweDc0MjksIDB4NzQyOSwgMHgzRDY5LCAweDc0MkEsIDB4NzQyQSwgMHgxODJGLAorICAgIDB4NzQyQiwgMHg3NDJCLCAweDNENkEsIDB4NzQyQywgMHg3NDJDLCAweDE4MzYsIDB4NzQyRCwgMHg3NDJELCAweDNENkIsCisgICAgMHg3NDJFLCAweDc0MkUsIDB4MTgzNSwgMHg3NDJGLCAweDc0MkYsIDB4M0Q2QywgMHg3NDMwLCAweDc0MzAsIDB4MTgzNCwKKyAgICAweDc0MzEsIDB4NzQzMiwgMHgzRDZELCAweDc0MzMsIDB4NzQzMywgMHgwQTFFLCAweDc0MzQsIDB4NzQzNCwgMHgwQzU2LAorICAgIDB4NzQzNSwgMHg3NDM1LCAweDBCQkUsIDB4NzQzNiwgMHg3NDM2LCAweDBCODQsIDB4NzQzNywgMHg3NDNCLCAweDNENkYsCisgICAgMHg3NDNDLCAweDc0M0MsIDB4MEM2QSwgMHg3NDNELCAweDc0M0UsIDB4M0Q3NCwgMHg3NDNGLCAweDc0M0YsIDB4MjQ2MCwKKyAgICAweDc0NDAsIDB4NzQ0MCwgMHgzRDc2LCAweDc0NDEsIDB4NzQ0MSwgMHgxODM5LCAweDc0NDIsIDB4NzQ0QSwgMHgzRDc3LAorICAgIDB4NzQ0QiwgMHg3NDRCLCAweDI0NUMsIDB4NzQ0QywgMHg3NDU0LCAweDNEODAsIDB4NzQ1NSwgMHg3NDU1LCAweDE4M0MsCisgICAgMHg3NDU2LCAweDc0NTYsIDB4M0Q4OSwgMHg3NDU3LCAweDc0NTcsIDB4MTgzQiwgMHg3NDU4LCAweDc0NTgsIDB4M0Q4QSwKKyAgICAweDc0NTksIDB4NzQ1OSwgMHgxODNELCAweDc0NUEsIDB4NzQ1QSwgMHgwN0FFLCAweDc0NUIsIDB4NzQ1QiwgMHgxODMwLAorICAgIDB4NzQ1QywgMHg3NDVDLCAweDE4M0EsIDB4NzQ1RCwgMHg3NDVELCAweDNEOEIsIDB4NzQ1RSwgMHg3NDVFLCAweDBDQ0IsCisgICAgMHg3NDVGLCAweDc0NUYsIDB4MENFMywgMHg3NDYwLCAweDc0NjIsIDB4M0Q4QywgMHg3NDYzLCAweDc0NjMsIDB4MjE1RCwKKyAgICAweDc0NjQsIDB4NzQ2OCwgMHgzRDhGLCAweDc0NjksIDB4NzQ2OSwgMHgyMjI1LCAweDc0NkEsIDB4NzQ2QSwgMHgyMDZBLAorICAgIDB4NzQ2QiwgMHg3NDZDLCAweDNEOTQsIDB4NzQ2RCwgMHg3NDZELCAweDE4M0YsIDB4NzQ2RSwgMHg3NDZGLCAweDNEOTYsCisgICAgMHg3NDcwLCAweDc0NzAsIDB4MDczRSwgMHg3NDcxLCAweDc0NzUsIDB4M0Q5OCwgMHg3NDc2LCAweDc0NzYsIDB4MTAyNywKKyAgICAweDc0NzcsIDB4NzQ3NywgMHgxODNFLCAweDc0NzgsIDB4NzQ3RCwgMHgzRDlELCAweDc0N0UsIDB4NzQ3RSwgMHgxODQwLAorICAgIDB4NzQ3RiwgMHg3NDdGLCAweDNEQTMsIDB4NzQ4MCwgMHg3NDgxLCAweDE4NDMsIDB4NzQ4MiwgMHg3NDgyLCAweDNEQTQsCisgICAgMHg3NDgzLCAweDc0ODMsIDB4MDlGMCwgMHg3NDg0LCAweDc0ODYsIDB4M0RBNSwgMHg3NDg3LCAweDc0ODcsIDB4MTg0NSwKKyAgICAweDc0ODgsIDB4NzQ4OCwgMHgzREE4LCAweDc0ODksIDB4NzQ4OSwgMHgyNDYxLCAweDc0OEEsIDB4NzQ4QSwgMHgzREE5LAorICAgIDB4NzQ4QiwgMHg3NDhCLCAweDE4NDYsIDB4NzQ4QywgMHg3NDhELCAweDNEQUEsIDB4NzQ4RSwgMHg3NDhFLCAweDE4NDIsCisgICAgMHg3NDhGLCAweDc0OEYsIDB4M0RBQywgMHg3NDkwLCAweDc0OTAsIDB4MTg0QSwgMHg3NDkxLCAweDc0OUIsIDB4M0RBRCwKKyAgICAweDc0OUMsIDB4NzQ5QywgMHgxODQxLCAweDc0OUQsIDB4NzQ5RCwgMHgzREI4LCAweDc0OUUsIDB4NzQ5RSwgMHgxODQ3LAorICAgIDB4NzQ5RiwgMHg3NEEyLCAweDNEQjksIDB4NzRBMywgMHg3NEEzLCAweDI0NUIsIDB4NzRBNCwgMHg3NEE1LCAweDNEQkQsCisgICAgMHg3NEE2LCAweDc0QTYsIDB4MjQ2MiwgMHg3NEE3LCAweDc0QTcsIDB4MTg0QiwgMHg3NEE4LCAweDc0QTksIDB4MTg0OCwKKyAgICAweDc0QUEsIDB4NzRBRiwgMHgzREJGLCAweDc0QjAsIDB4NzRCMCwgMHgxRjU0LCAweDc0QjEsIDB4NzRCOSwgMHgzREM1LAorICAgIDB4NzRCQSwgMHg3NEJBLCAweDE4NEQsIDB4NzRCQiwgMHg3NEJDLCAweDNEQ0UsIDB4NzRCRCwgMHg3NEJELCAweDI0NUYsCisgICAgMHg3NEJFLCAweDc0QzksIDB4M0REMCwgMHg3NENBLCAweDc0Q0EsIDB4MjBFQywgMHg3NENCLCAweDc0Q0UsIDB4M0REQywKKyAgICAweDc0Q0YsIDB4NzRDRiwgMHgyNDVELCAweDc0RDAsIDB4NzREMSwgMHgzREUwLCAweDc0RDIsIDB4NzREMiwgMHgxODRDLAorICAgIDB4NzREMywgMHg3NEQzLCAweDNERTIsIDB4NzRENCwgMHg3NEQ0LCAweDI0NjMsIDB4NzRENSwgMHg3NEQ5LCAweDNERTMsCisgICAgMHg3NERBLCAweDc0REEsIDB4MjQ2NCwgMHg3NERCLCAweDc0REIsIDB4M0RFOCwgMHg3NERDLCAweDc0REMsIDB4MDcyOCwKKyAgICAweDc0REQsIDB4NzRERCwgMHgzREU5LCAweDc0REUsIDB4NzRERSwgMHgxQjMyLCAweDc0REYsIDB4NzRERiwgMHgzREVBLAorICAgIDB4NzRFMCwgMHg3NEUwLCAweDFCMzMsIDB4NzRFMSwgMHg3NEUxLCAweDNERUIsIDB4NzRFMiwgMHg3NEUyLCAweDBCQ0YsCisgICAgMHg3NEUzLCAweDc0RTMsIDB4MDNGNSwgMHg3NEU0LCAweDc0RTQsIDB4MEM5QSwgMHg3NEU1LCAweDc0RTUsIDB4M0RFQywKKyAgICAweDc0RTYsIDB4NzRFNiwgMHgwRTkwLCAweDc0RTcsIDB4NzRFRCwgMHgzREVELCAweDc0RUUsIDB4NzRFRSwgMHgwRURDLAorICAgIDB4NzRFRiwgMHg3NEVGLCAweDE5MDMsIDB4NzRGMCwgMHg3NEYzLCAweDNERjQsIDB4NzRGNCwgMHg3NEY0LCAweDE5MDQsCisgICAgMHg3NEY1LCAweDc0RjUsIDB4M0RGOCwgMHg3NEY2LCAweDc0RjYsIDB4MEJERSwgMHg3NEY3LCAweDc0RjcsIDB4MDU0QywKKyAgICAweDc0RjgsIDB4NzRGRSwgMHgzREY5LCAweDc0RkYsIDB4NzRGRiwgMHgxOTA1LCAweDc1MDAsIDB4NzUwMywgMHgzRTAwLAorICAgIDB4NzUwNCwgMHg3NTA0LCAweDExODgsIDB4NzUwNSwgMHg3NTBCLCAweDNFMDQsIDB4NzUwQywgMHg3NTBDLCAweDI0QTUsCisgICAgMHg3NTBELCAweDc1MEQsIDB4MTQ4NSwgMHg3NTBFLCAweDc1MEUsIDB4M0UwQiwgMHg3NTBGLCAweDc1MEYsIDB4MTkwNiwKKyAgICAweDc1MTAsIDB4NzUxMCwgMHgzRTBDLCAweDc1MTEsIDB4NzUxMSwgMHgxOTA3LCAweDc1MTIsIDB4NzUxMiwgMHgzRTBELAorICAgIDB4NzUxMywgMHg3NTEzLCAweDE5MDgsIDB4NzUxNCwgMHg3NTE3LCAweDNFMEUsIDB4NzUxOCwgMHg3NTE4LCAweDA2QzUsCisgICAgMHg3NTE5LCAweDc1MTksIDB4MTRGOCwgMHg3NTFBLCAweDc1MUEsIDB4MEQyRSwgMHg3NTFCLCAweDc1MUIsIDB4M0UxMiwKKyAgICAweDc1MUMsIDB4NzUxQywgMHgwRTQzLCAweDc1MUQsIDB4NzUxRSwgMHgzRTEzLCAweDc1MUYsIDB4NzUxRiwgMHgwRDMzLAorICAgIDB4NzUyMCwgMHg3NTIyLCAweDNFMTUsIDB4NzUyMywgMHg3NTIzLCAweDFFNzAsIDB4NzUyNCwgMHg3NTI0LCAweDNFMTgsCisgICAgMHg3NTI1LCAweDc1MjUsIDB4MEQzNCwgMHg3NTI2LCAweDc1MjcsIDB4M0UxOSwgMHg3NTI4LCAweDc1MjgsIDB4MTBBOCwKKyAgICAweDc1MjksIDB4NzUyOSwgMHgwRDlCLCAweDc1MkEsIDB4NzUyQSwgMHgzRTFCLCAweDc1MkIsIDB4NzUyQiwgMHgwNkExLAorICAgIDB4NzUyQywgMHg3NTJDLCAweDFCMzQsIDB4NzUyRCwgMHg3NTJELCAweDA0MkIsIDB4NzUyRSwgMHg3NTJFLCAweDNFMUMsCisgICAgMHg3NTJGLCAweDc1MkYsIDB4MTczNCwgMHg3NTMwLCAweDc1MzAsIDB4MEU0MiwgMHg3NTMxLCAweDc1MzEsIDB4MTBBRSwKKyAgICAweDc1MzIsIDB4NzUzMiwgMHgwODRBLCAweDc1MzMsIDB4NzUzMywgMHgwRDIzLCAweDc1MzQsIDB4NzUzNCwgMHgzRTFELAorICAgIDB4NzUzNSwgMHg3NTM1LCAweDA1QzgsIDB4NzUzNiwgMHg3NTM2LCAweDNFMUUsIDB4NzUzNywgMHg3NTM3LCAweDBCMzMsCisgICAgMHg3NTM4LCAweDc1MzgsIDB4MDVDQSwgMHg3NTM5LCAweDc1MzksIDB4M0UxRiwgMHg3NTNBLCAweDc1M0EsIDB4MUE3OCwKKyAgICAweDc1M0IsIDB4NzUzQiwgMHgwN0MyLCAweDc1M0MsIDB4NzUzRCwgMHgzRTIwLCAweDc1M0UsIDB4NzUzRSwgMHgxODE2LAorICAgIDB4NzUzRiwgMHg3NTNGLCAweDNFMjIsIDB4NzU0MCwgMHg3NTQwLCAweDFBNzksIDB4NzU0MSwgMHg3NTQ0LCAweDNFMjMsCisgICAgMHg3NTQ1LCAweDc1NDUsIDB4MDRDRSwgMHg3NTQ2LCAweDc1NDcsIDB4M0UyNywgMHg3NTQ4LCAweDc1NDgsIDB4MUE3QywKKyAgICAweDc1NDksIDB4NzU0QSwgMHgzRTI5LCAweDc1NEIsIDB4NzU0QiwgMHgxQTdCLCAweDc1NEMsIDB4NzU0QywgMHgwOEI4LAorICAgIDB4NzU0RCwgMHg3NTRELCAweDNFMkIsIDB4NzU0RSwgMHg3NTRFLCAweDFBN0EsIDB4NzU0RiwgMHg3NTRGLCAweDBFQzYsCisgICAgMHg3NTUwLCAweDc1NTMsIDB4M0UyQywgMHg3NTU0LCAweDc1NTQsIDB4MEI5MCwgMHg3NTU1LCAweDc1NTgsIDB4M0UzMCwKKyAgICAweDc1NTksIDB4NzU1OSwgMHgwQTNELCAweDc1NUEsIDB4NzU1QSwgMHgxMzlFLCAweDc1NUIsIDB4NzU1QiwgMHgxQTdELAorICAgIDB4NzU1QywgMHg3NTVDLCAweDBGQkUsIDB4NzU1RCwgMHg3NTVELCAweDIwOEYsIDB4NzU1RSwgMHg3NTYxLCAweDNFMzQsCisgICAgMHg3NTYyLCAweDc1NjIsIDB4MUU0MiwgMHg3NTYzLCAweDc1NjQsIDB4M0UzOCwgMHg3NTY1LCAweDc1NjUsIDB4MEE3QiwKKyAgICAweDc1NjYsIDB4NzU2NiwgMHgwQzA3LCAweDc1NjcsIDB4NzU2OSwgMHgzRTNBLCAweDc1NkEsIDB4NzU2QSwgMHgwNjQ5LAorICAgIDB4NzU2QiwgMHg3NTZCLCAweDFGNEUsIDB4NzU2QywgMHg3NTcxLCAweDNFM0QsIDB4NzU3MiwgMHg3NTcyLCAweDFBN0UsCisgICAgMHg3NTczLCAweDc1NzMsIDB4M0U0MywgMHg3NTc0LCAweDc1NzQsIDB4MDUxMCwgMHg3NTc1LCAweDc1NzUsIDB4M0U0NCwKKyAgICAweDc1NzYsIDB4NzU3NiwgMHgxRUIxLCAweDc1NzcsIDB4NzU3NywgMHgzRTQ1LCAweDc1NzgsIDB4NzU3OCwgMHgwODEwLAorICAgIDB4NzU3OSwgMHg3NTc5LCAweDFBN0YsIDB4NzU3QSwgMHg3NTdFLCAweDNFNDYsIDB4NzU3RiwgMHg3NTdGLCAweDE4MTQsCisgICAgMHg3NTgwLCAweDc1ODIsIDB4M0U0QiwgMHg3NTgzLCAweDc1ODMsIDB4MUE4MCwgMHg3NTg0LCAweDc1ODUsIDB4M0U0RSwKKyAgICAweDc1ODYsIDB4NzU4NiwgMHgwODdGLCAweDc1ODcsIDB4NzU4NywgMHgxRThCLCAweDc1ODgsIDB4NzU4QSwgMHgzRTUwLAorICAgIDB4NzU4QiwgMHg3NThCLCAweDFCQzYsIDB4NzU4QywgMHg3NThFLCAweDNFNTMsIDB4NzU4RiwgMHg3NThGLCAweDBEN0YsCisgICAgMHg3NTkwLCAweDc1OTAsIDB4M0U1NiwgMHg3NTkxLCAweDc1OTEsIDB4MTA1MCwgMHg3NTkyLCAweDc1OTIsIDB4MUI2MCwKKyAgICAweDc1OTMsIDB4NzU5MywgMHgzRTU3LCAweDc1OTQsIDB4NzU5NCwgMHgxQjYxLCAweDc1OTUsIDB4NzU5NSwgMHgzRTU4LAorICAgIDB4NzU5NiwgMHg3NTk2LCAweDFCNjIsIDB4NzU5NywgMHg3NTk3LCAweDBBMEYsIDB4NzU5OCwgMHg3NTk4LCAweDNFNTksCisgICAgMHg3NTk5LCAweDc1OTksIDB4MDZFOCwgMHg3NTlBLCAweDc1OUEsIDB4MDhGRCwgMHg3NTlCLCAweDc1OUMsIDB4M0U1QSwKKyAgICAweDc1OUQsIDB4NzU5RCwgMHgxQjY0LCAweDc1OUUsIDB4NzU5RSwgMHgzRTVDLCAweDc1OUYsIDB4NzU5RiwgMHgwQjcyLAorICAgIDB4NzVBMCwgMHg3NUEwLCAweDFCNjMsIDB4NzVBMSwgMHg3NUExLCAweDEwMUEsIDB4NzVBMiwgMHg3NUEyLCAweDNFNUQsCisgICAgMHg3NUEzLCAweDc1QTMsIDB4MUI2NiwgMHg3NUE0LCAweDc1QTQsIDB4MDNENywgMHg3NUE1LCAweDc1QTUsIDB4MDhCQiwKKyAgICAweDc1QTYsIDB4NzVBQSwgMHgzRTVFLCAweDc1QUIsIDB4NzVBQiwgMHgxMDY2LCAweDc1QUMsIDB4NzVBQywgMHgxQjY1LAorICAgIDB4NzVBRCwgMHg3NUFELCAweDNFNjMsIDB4NzVBRSwgMHg3NUFFLCAweDA1MzIsIDB4NzVBRiwgMHg3NUFGLCAweDA2ODUsCisgICAgMHg3NUIwLCAweDc1QjAsIDB4MUI2QywgMHg3NUIxLCAweDc1QjEsIDB4MUI2QiwgMHg3NUIyLCAweDc1QjIsIDB4MEJDMiwKKyAgICAweDc1QjMsIDB4NzVCNCwgMHgxQjY3LCAweDc1QjUsIDB4NzVCNSwgMHgwNTQ2LCAweDc1QjYsIDB4NzVCNywgMHgzRTY0LAorICAgIDB4NzVCOCwgMHg3NUI4LCAweDFCNjksIDB4NzVCOSwgMHg3NUI5LCAweDExOEYsIDB4NzVCQSwgMHg3NUJCLCAweDNFNjYsCisgICAgMHg3NUJDLCAweDc1QkMsIDB4MEUyRSwgMHg3NUJELCAweDc1QkQsIDB4MDkwMSwgMHg3NUJFLCAweDc1QkUsIDB4MDgyNSwKKyAgICAweDc1QkYsIDB4NzVDMSwgMHgzRTY4LCAweDc1QzIsIDB4NzVDMiwgMHgxQjZFLCAweDc1QzMsIDB4NzVDMywgMHgxQjZELAorICAgIDB4NzVDNCwgMHg3NUM0LCAweDFCNkEsIDB4NzVDNSwgMHg3NUM1LCAweDA0NjgsIDB4NzVDNiwgMHg3NUM2LCAweDNFNkIsCisgICAgMHg3NUM3LCAweDc1QzcsIDB4MTFBMSwgMHg3NUM4LCAweDc1QzgsIDB4MTA5RCwgMHg3NUM5LCAweDc1QzksIDB4MDhFNiwKKyAgICAweDc1Q0EsIDB4NzVDQSwgMHgwQzg3LCAweDc1Q0IsIDB4NzVDQywgMHgzRTZDLCAweDc1Q0QsIDB4NzVDRCwgMHgxQjcwLAorICAgIDB4NzVDRSwgMHg3NUQxLCAweDNFNkUsIDB4NzVEMiwgMHg3NUQyLCAweDEwMjAsIDB4NzVEMywgMHg3NUQzLCAweDNFNzIsCisgICAgMHg3NUQ0LCAweDc1RDQsIDB4MTFDQiwgMHg3NUQ1LCAweDc1RDUsIDB4MDc5MiwgMHg3NUQ2LCAweDc1RDYsIDB4MUI2RiwKKyAgICAweDc1RDcsIDB4NzVENywgMHgzRTczLCAweDc1RDgsIDB4NzVEOCwgMHgwNUZBLCAweDc1RDksIDB4NzVEOSwgMHgxRkM2LAorICAgIDB4NzVEQSwgMHg3NURBLCAweDNFNzQsIDB4NzVEQiwgMHg3NURCLCAweDBFNjUsIDB4NzVEQywgMHg3NURELCAweDNFNzUsCisgICAgMHg3NURFLCAweDc1REUsIDB4MEJDNSwgMHg3NURGLCAweDc1RTEsIDB4M0U3NywgMHg3NUUyLCAweDc1RTIsIDB4MDlFQSwKKyAgICAweDc1RTMsIDB4NzVFMywgMHgxQjcxLCAweDc1RTQsIDB4NzVFNCwgMHgxQjc0LCAweDc1RTUsIDB4NzVFNSwgMHgzRTdBLAorICAgIDB4NzVFNiwgMHg3NUU2LCAweDFCNzMsIDB4NzVFNywgMHg3NUU3LCAweDFCNzYsIDB4NzVFOCwgMHg3NUU4LCAweDFCNzIsCisgICAgMHg3NUU5LCAweDc1RTksIDB4M0U3QiwgMHg3NUVBLCAweDc1RUEsIDB4MDdEMywgMHg3NUVCLCAweDc1RUIsIDB4MUI3NSwKKyAgICAweDc1RUMsIDB4NzVFRiwgMHgzRTdDLCAweDc1RjAsIDB4NzVGMCwgMHgwRTA4LCAweDc1RjEsIDB4NzVGMSwgMHgxQjc4LAorICAgIDB4NzVGMiwgMHg3NUYzLCAweDNFODAsIDB4NzVGNCwgMHg3NUY0LCAweDA0RkEsIDB4NzVGNSwgMHg3NUY4LCAweDNFODIsCisgICAgMHg3NUY5LCAweDc1RjksIDB4MDQzRCwgMHg3NUZBLCAweDc1RkIsIDB4M0U4NiwgMHg3NUZDLCAweDc1RkMsIDB4MUI3OSwKKyAgICAweDc1RkQsIDB4NzVGRSwgMHgzRTg4LCAweDc1RkYsIDB4NzVGRiwgMHgxQjdBLCAweDc2MDAsIDB4NzYwMCwgMHgxQjdDLAorICAgIDB4NzYwMSwgMHg3NjAxLCAweDA1NjQsIDB4NzYwMiwgMHg3NjAyLCAweDI1QUUsIDB4NzYwMywgMHg3NjAzLCAweDFCNzcsCisgICAgMHg3NjA0LCAweDc2MDQsIDB4M0U4QSwgMHg3NjA1LCAweDc2MDUsIDB4MUI3RCwgMHg3NjA2LCAweDc2MDksIDB4M0U4QiwKKyAgICAweDc2MEEsIDB4NzYwQSwgMHgxQjgwLCAweDc2MEIsIDB4NzYwQiwgMHgxRjAxLCAweDc2MEMsIDB4NzYwQywgMHgxQjdFLAorICAgIDB4NzYwRCwgMHg3NjBELCAweDIyMDAsIDB4NzYwRSwgMHg3NjBGLCAweDNFOEYsIDB4NzYxMCwgMHg3NjEwLCAweDFCN0IsCisgICAgMHg3NjExLCAweDc2MTQsIDB4M0U5MSwgMHg3NjE1LCAweDc2MTUsIDB4MUI4MywgMHg3NjE2LCAweDc2MTYsIDB4M0U5NSwKKyAgICAweDc2MTcsIDB4NzYxNywgMHgxQjdGLCAweDc2MTgsIDB4NzYxOCwgMHgxQjgyLCAweDc2MTksIDB4NzYxOSwgMHgxQjg0LAorICAgIDB4NzYxQSwgMHg3NjFBLCAweDNFOTYsIDB4NzYxQiwgMHg3NjFCLCAweDFCODUsIDB4NzYxQywgMHg3NjFELCAweDNFOTcsCisgICAgMHg3NjFFLCAweDc2MUUsIDB4MjVCMiwgMHg3NjFGLCAweDc2MUYsIDB4MEVEMCwgMHg3NjIwLCAweDc2MjAsIDB4MUI4OCwKKyAgICAweDc2MjEsIDB4NzYyMSwgMHgxRTk3LCAweDc2MjIsIDB4NzYyMiwgMHgxQjg3LCAweDc2MjMsIDB4NzYyMywgMHgzRTk5LAorICAgIDB4NzYyNCwgMHg3NjI0LCAweDBBM0YsIDB4NzYyNSwgMHg3NjI1LCAweDFCODEsIDB4NzYyNiwgMHg3NjI2LCAweDBENzQsCisgICAgMHg3NjI3LCAweDc2MjcsIDB4MjBBQiwgMHg3NjI4LCAweDc2MjgsIDB4M0U5QSwgMHg3NjI5LCAweDc2MjksIDB4MDU3NCwKKyAgICAweDc2MkEsIDB4NzYyQSwgMHgwNDVBLCAweDc2MkIsIDB4NzYyQiwgMHgwRTA0LCAweDc2MkMsIDB4NzYyQywgMHgzRTlCLAorICAgIDB4NzYyRCwgMHg3NjJELCAweDFCOEEsIDB4NzYyRSwgMHg3NjJGLCAweDNFOUMsIDB4NzYzMCwgMHg3NjMwLCAweDFCOEIsCisgICAgMHg3NjMxLCAweDc2MzIsIDB4M0U5RSwgMHg3NjMzLCAweDc2MzMsIDB4MUI5MCwgMHg3NjM0LCAweDc2MzQsIDB4MTE2RiwKKyAgICAweDc2MzUsIDB4NzYzNSwgMHgxQjhELCAweDc2MzYsIDB4NzYzNywgMHgzRUEwLCAweDc2MzgsIDB4NzYzOCwgMHgwQzhFLAorICAgIDB4NzYzOSwgMHg3NjNBLCAweDNFQTIsIDB4NzYzQiwgMHg3NjNCLCAweDI1QjMsIDB4NzYzQywgMHg3NjNDLCAweDFCODYsCisgICAgMHg3NjNELCAweDc2M0QsIDB4M0VBNCwgMHg3NjNFLCAweDc2M0UsIDB4MUI4RiwgMHg3NjNGLCAweDc2M0YsIDB4MUI4QywKKyAgICAweDc2NDAsIDB4NzY0MCwgMHgxQjg5LCAweDc2NDEsIDB4NzY0MSwgMHgzRUE1LCAweDc2NDIsIDB4NzY0MiwgMHgyMDI4LAorICAgIDB4NzY0MywgMHg3NjQzLCAweDFCOEUsIDB4NzY0NCwgMHg3NjQ1LCAweDNFQTYsIDB4NzY0NiwgMHg3NjQ3LCAweDI1QUYsCisgICAgMHg3NjQ4LCAweDc2NDgsIDB4M0VBOCwgMHg3NjQ5LCAweDc2NDksIDB4MjVCMSwgMHg3NjRBLCAweDc2NEIsIDB4M0VBOSwKKyAgICAweDc2NEMsIDB4NzY0QywgMHgwM0I0LCAweDc2NEQsIDB4NzY0RCwgMHgxQjkxLCAweDc2NEUsIDB4NzY1MywgMHgzRUFCLAorICAgIDB4NzY1NCwgMHg3NjU0LCAweDFCOTMsIDB4NzY1NSwgMHg3NjU1LCAweDNFQjEsIDB4NzY1NiwgMHg3NjU2LCAweDFCOTUsCisgICAgMHg3NjU3LCAweDc2NTcsIDB4M0VCMiwgMHg3NjU4LCAweDc2NTgsIDB4MjVBQywgMHg3NjU5LCAweDc2NUIsIDB4M0VCMywKKyAgICAweDc2NUMsIDB4NzY1QywgMHgxQjk0LCAweDc2NUQsIDB4NzY1RCwgMHgzRUI2LCAweDc2NUUsIDB4NzY1RSwgMHgxQjkyLAorICAgIDB4NzY1RiwgMHg3NjVGLCAweDFFNEUsIDB4NzY2MCwgMHg3NjYxLCAweDNFQjcsIDB4NzY2MiwgMHg3NjYyLCAweDIyMDIsCisgICAgMHg3NjYzLCAweDc2NjMsIDB4MEZDQiwgMHg3NjY0LCAweDc2NjQsIDB4MjVBQiwgMHg3NjY1LCAweDc2NjUsIDB4MjI4NiwKKyAgICAweDc2NjYsIDB4NzY2NiwgMHgzRUI5LCAweDc2NjcsIDB4NzY2NywgMHgyNUFELCAweDc2NjgsIDB4NzY2OCwgMHgzRUJBLAorICAgIDB4NzY2OSwgMHg3NjY5LCAweDI1QjYsIDB4NzY2QSwgMHg3NjZBLCAweDNFQkIsIDB4NzY2QiwgMHg3NjZCLCAweDFCOTYsCisgICAgMHg3NjZDLCAweDc2NkMsIDB4MjFFMywgMHg3NjZELCAweDc2NkUsIDB4MjVCNCwgMHg3NjZGLCAweDc2NkYsIDB4MUI5NywKKyAgICAweDc2NzAsIDB4NzY3MCwgMHgyMjJGLCAweDc2NzEsIDB4NzY3MSwgMHgyMTY1LCAweDc2NzIsIDB4NzY3MiwgMHgyNUI3LAorICAgIDB4NzY3MywgMHg3Njc3LCAweDNFQkMsIDB4NzY3OCwgMHg3Njc4LCAweDA3NDgsIDB4NzY3OSwgMHg3NjdBLCAweDNFQzEsCisgICAgMHg3NjdCLCAweDc2N0IsIDB4MDVBOCwgMHg3NjdDLCAweDc2N0MsIDB4MUVFOSwgMHg3NjdELCAweDc2N0QsIDB4MDNFMiwKKyAgICAweDc2N0UsIDB4NzY3RSwgMHgwM0U0LCAweDc2N0YsIDB4NzY4MSwgMHgzRUMzLCAweDc2ODIsIDB4NzY4MiwgMHgxMTMwLAorICAgIDB4NzY4MywgMHg3NjgzLCAweDNFQzYsIDB4NzY4NCwgMHg3Njg0LCAweDA1QTUsIDB4NzY4NSwgMHg3Njg1LCAweDNFQzcsCisgICAgMHg3Njg2LCAweDc2ODYsIDB4MDhBNSwgMHg3Njg3LCAweDc2ODcsIDB4MDdERiwgMHg3Njg4LCAweDc2ODgsIDB4MUIyRCwKKyAgICAweDc2ODksIDB4NzY4QSwgMHgzRUM4LCAweDc2OEIsIDB4NzY4QiwgMHgwNkQ5LCAweDc2OEMsIDB4NzY4RCwgMHgzRUNBLAorICAgIDB4NzY4RSwgMHg3NjhFLCAweDFCMkUsIDB4NzY4RiwgMHg3NjkwLCAweDNFQ0MsIDB4NzY5MSwgMHg3NjkxLCAweDAzQjMsCisgICAgMHg3NjkyLCAweDc2OTIsIDB4M0VDRSwgMHg3NjkzLCAweDc2OTMsIDB4MUIyRiwgMHg3Njk0LCAweDc2OTUsIDB4M0VDRiwKKyAgICAweDc2OTYsIDB4NzY5NiwgMHgwRTlGLCAweDc2OTcsIDB4NzY5OCwgMHgzRUQxLCAweDc2OTksIDB4NzY5OSwgMHgxQjMwLAorICAgIDB4NzY5QSwgMHg3NjlBLCAweDFFMjUsIDB4NzY5QiwgMHg3NkEzLCAweDNFRDMsIDB4NzZBNCwgMHg3NkE0LCAweDFCMzEsCisgICAgMHg3NkE1LCAweDc2QUQsIDB4M0VEQywgMHg3NkFFLCAweDc2QUUsIDB4MEJDMywgMHg3NkFGLCAweDc2QjAsIDB4M0VFNSwKKyAgICAweDc2QjEsIDB4NzZCMSwgMHgxMUU0LCAweDc2QjIsIDB4NzZCMiwgMHgxQkM4LCAweDc2QjMsIDB4NzZCMywgMHgzRUU3LAorICAgIDB4NzZCNCwgMHg3NkI0LCAweDFCQzksIDB4NzZCNSwgMHg3NkI3LCAweDNFRTgsIDB4NzZCOCwgMHg3NkI4LCAweDI1QzAsCisgICAgMHg3NkI5LCAweDc2QjksIDB4M0VFQiwgMHg3NkJBLCAweDc2QkEsIDB4MjI5QSwgMHg3NkJCLCAweDc2QkUsIDB4M0VFQywKKyAgICAweDc2QkYsIDB4NzZCRiwgMHgwQUY4LCAweDc2QzAsIDB4NzZDMSwgMHgzRUYwLCAweDc2QzIsIDB4NzZDMiwgMHgxMEMwLAorICAgIDB4NzZDMywgMHg3NkM0LCAweDNFRjIsIDB4NzZDNSwgMHg3NkM1LCAweDExRDAsIDB4NzZDNiwgMHg3NkM2LCAweDBCQTksCisgICAgMHg3NkM3LCAweDc2QzcsIDB4M0VGNCwgMHg3NkM4LCAweDc2QzgsIDB4MTA5NCwgMHg3NkM5LCAweDc2QzksIDB4M0VGNSwKKyAgICAweDc2Q0EsIDB4NzZDQSwgMHgxMDZELCAweDc2Q0IsIDB4NzZDQywgMHgzRUY2LCAweDc2Q0QsIDB4NzZDRCwgMHgxQThCLAorICAgIDB4NzZDRSwgMHg3NkNFLCAweDAzQzYsIDB4NzZDRiwgMHg3NkNGLCAweDExNTYsIDB4NzZEMCwgMHg3NkQwLCAweDBGRjcsCisgICAgMHg3NkQxLCAweDc2RDEsIDB4MDg1MywgMHg3NkQyLCAweDc2RDIsIDB4MDc4NywgMHg3NkQzLCAweDc2RDMsIDB4M0VGOCwKKyAgICAweDc2RDQsIDB4NzZENCwgMHgwOTg1LCAweDc2RDUsIDB4NzZENSwgMHgzRUY5LCAweDc2RDYsIDB4NzZENiwgMHgwNkMyLAorICAgIDB4NzZENywgMHg3NkQ3LCAweDA1QTIsIDB4NzZEOCwgMHg3NkQ4LCAweDBCOEQsIDB4NzZEOSwgMHg3NkRBLCAweDNFRkEsCisgICAgMHg3NkRCLCAweDc2REIsIDB4MEQzOSwgMHg3NkRDLCAweDc2REQsIDB4M0VGQywgMHg3NkRFLCAweDc2REUsIDB4MjI2RSwKKyAgICAweDc2REYsIDB4NzZERiwgMHgwQUQwLCAweDc2RTAsIDB4NzZFMCwgMHgzRUZFLCAweDc2RTEsIDB4NzZFMSwgMHgxRkJELAorICAgIDB4NzZFMiwgMHg3NkUyLCAweDNFRkYsIDB4NzZFMywgMHg3NkUzLCAweDFGODQsIDB4NzZFNCwgMHg3NkU0LCAweDIwQjIsCisgICAgMHg3NkU1LCAweDc2RTUsIDB4MUE4QywgMHg3NkU2LCAweDc2RTYsIDB4M0YwMCwgMHg3NkU3LCAweDc2RTcsIDB4MjA0MywKKyAgICAweDc2RTgsIDB4NzZFRCwgMHgzRjAxLCAweDc2RUUsIDB4NzZFRSwgMHgwQjIyLCAweDc2RUYsIDB4NzZFRiwgMHgwNUUxLAorICAgIDB4NzZGMCwgMHg3NkYwLCAweDNGMDcsIDB4NzZGMSwgMHg3NkYxLCAweDFBNTgsIDB4NzZGMiwgMHg3NkYyLCAweDBBQTksCisgICAgMHg3NkYzLCAweDc2RjMsIDB4M0YwOCwgMHg3NkY0LCAweDc2RjQsIDB4MTFCMCwgMHg3NkY1LCAweDc2RjcsIDB4M0YwOSwKKyAgICAweDc2RjgsIDB4NzZGOCwgMHgwRjRELCAweDc2RjksIDB4NzZGOSwgMHgxQTVCLCAweDc2RkEsIDB4NzZGQiwgMHgzRjBDLAorICAgIDB4NzZGQywgMHg3NkZDLCAweDBCOEYsIDB4NzZGRCwgMHg3NkZELCAweDNGMEUsIDB4NzZGRSwgMHg3NkZFLCAweDA2MUIsCisgICAgMHg3NkZGLCAweDc2RkYsIDB4M0YwRiwgMHg3NzAwLCAweDc3MDAsIDB4M0YxMCwgMHg3NzAxLCAweDc3MDEsIDB4MEQzOCwKKyAgICAweDc3MDIsIDB4NzcwMywgMHgzRjExLCAweDc3MDQsIDB4NzcwNCwgMHgxQTU5LCAweDc3MDUsIDB4NzcwNiwgMHgzRjEzLAorICAgIDB4NzcwNywgMHg3NzA4LCAweDFBNUMsIDB4NzcwOSwgMHg3NzA5LCAweDBBQzEsIDB4NzcwQSwgMHg3NzBBLCAweDNGMTUsCisgICAgMHg3NzBCLCAweDc3MEIsIDB4MDk0MSwgMHg3NzBDLCAweDc3MEMsIDB4M0YxNiwgMHg3NzBELCAweDc3MEQsIDB4MUE1QSwKKyAgICAweDc3MEUsIDB4NzcxOCwgMHgzRjE3LCAweDc3MTksIDB4NzcxOSwgMHgxQTYwLCAweDc3MUEsIDB4NzcxQSwgMHgxQTVFLAorICAgIDB4NzcxQiwgMHg3NzFFLCAweDNGMjIsIDB4NzcxRiwgMHg3NzFGLCAweDExODcsIDB4NzcyMCwgMHg3NzIwLCAweDBBRTQsCisgICAgMHg3NzIxLCAweDc3MjEsIDB4M0YyNiwgMHg3NzIyLCAweDc3MjIsIDB4MUE1RiwgMHg3NzIzLCAweDc3MjUsIDB4M0YyNywKKyAgICAweDc3MjYsIDB4NzcyNiwgMHgxQTYyLCAweDc3MjcsIDB4NzcyNywgMHgzRjJBLCAweDc3MjgsIDB4NzcyOCwgMHgxMTQ0LAorICAgIDB4NzcyOSwgMHg3NzI5LCAweDBGQ0MsIDB4NzcyQSwgMHg3NzJDLCAweDNGMkIsIDB4NzcyRCwgMHg3NzJELCAweDFBNjEsCisgICAgMHg3NzJFLCAweDc3MkUsIDB4M0YyRSwgMHg3NzJGLCAweDc3MkYsIDB4MEFENSwgMHg3NzMwLCAweDc3MzQsIDB4M0YyRiwKKyAgICAweDc3MzUsIDB4NzczNSwgMHgxQTYzLCAweDc3MzYsIDB4NzczNiwgMHgwOTgxLCAweDc3MzcsIDB4NzczNywgMHgwOTFCLAorICAgIDB4NzczOCwgMHg3NzM4LCAweDFBNjQsIDB4NzczOSwgMHg3NzM5LCAweDNGMzQsIDB4NzczQSwgMHg3NzNBLCAweDBFNEEsCisgICAgMHg3NzNCLCAweDc3M0IsIDB4M0YzNSwgMHg3NzNDLCAweDc3M0MsIDB4MTAwNCwgMHg3NzNELCAweDc3M0YsIDB4M0YzNiwKKyAgICAweDc3NDAsIDB4Nzc0MCwgMHgxMjIyLCAweDc3NDEsIDB4Nzc0MSwgMHgxMTk3LCAweDc3NDIsIDB4Nzc0MiwgMHgzRjM5LAorICAgIDB4Nzc0MywgMHg3NzQzLCAweDFBNjgsIDB4Nzc0NCwgMHg3NzQ2LCAweDNGM0EsIDB4Nzc0NywgMHg3NzQ3LCAweDFBNjcsCisgICAgMHg3NzQ4LCAweDc3NEUsIDB4M0YzRCwgMHg3NzRGLCAweDc3NEYsIDB4MjY4NCwgMHg3NzUwLCAweDc3NTEsIDB4MUE2NSwKKyAgICAweDc3NTIsIDB4Nzc1OSwgMHgzRjQ0LCAweDc3NUEsIDB4Nzc1QSwgMHgxQTY5LCAweDc3NUIsIDB4Nzc1QiwgMHgwOEQ1LAorICAgIDB4Nzc1QywgMHg3NzVELCAweDNGNEMsIDB4Nzc1RSwgMHg3NzVFLCAweDI0RUYsIDB4Nzc1RiwgMHg3NzYwLCAweDNGNEUsCisgICAgMHg3NzYxLCAweDc3NjEsIDB4MERBNCwgMHg3NzYyLCAweDc3NjIsIDB4MUE2QiwgMHg3NzYzLCAweDc3NjMsIDB4MDVGQywKKyAgICAweDc3NjQsIDB4Nzc2NCwgMHgzRjUwLCAweDc3NjUsIDB4Nzc2NSwgMHgxQTZDLCAweDc3NjYsIDB4Nzc2NiwgMHgwQjIzLAorICAgIDB4Nzc2NywgMHg3NzY3LCAweDNGNTEsIDB4Nzc2OCwgMHg3NzY4LCAweDFBNkEsIDB4Nzc2OSwgMHg3NzZBLCAweDNGNTIsCisgICAgMHg3NzZCLCAweDc3NkIsIDB4MDhBRiwgMHg3NzZDLCAweDc3NkMsIDB4MDQ4RSwgMHg3NzZELCAweDc3NzgsIDB4M0Y1NCwKKyAgICAweDc3NzksIDB4Nzc3OSwgMHgwNjAyLCAweDc3N0EsIDB4Nzc3QywgMHgzRjYwLCAweDc3N0QsIDB4Nzc3RCwgMHgxQTZGLAorICAgIDB4Nzc3RSwgMHg3NzdFLCAweDEyNzAsIDB4Nzc3RiwgMHg3NzdGLCAweDFBNkQsIDB4Nzc4MCwgMHg3NzgwLCAweDFBNzAsCisgICAgMHg3NzgxLCAweDc3ODMsIDB4M0Y2MywgMHg3Nzg0LCAweDc3ODQsIDB4MEFFRSwgMHg3Nzg1LCAweDc3ODUsIDB4MDUxNywKKyAgICAweDc3ODYsIDB4Nzc4QiwgMHgzRjY2LCAweDc3OEMsIDB4Nzc4QywgMHgxQTcxLCAweDc3OEQsIDB4Nzc4RCwgMHgxQTZFLAorICAgIDB4Nzc4RSwgMHg3NzhFLCAweDBGMjYsIDB4Nzc4RiwgMHg3NzkwLCAweDNGNkMsIDB4Nzc5MSwgMHg3NzkxLCAweDFBNzIsCisgICAgMHg3NzkyLCAweDc3OTIsIDB4MEE5RSwgMHg3NzkzLCAweDc3OTcsIDB4M0Y2RSwgMHg3Nzk4LCAweDc3OTgsIDB4MjRFRSwKKyAgICAweDc3OTksIDB4Nzc5RCwgMHgzRjczLCAweDc3OUUsIDB4Nzc5RSwgMHgyMDc0LCAweDc3OUYsIDB4NzdBMCwgMHgxQTczLAorICAgIDB4NzdBMSwgMHg3N0ExLCAweDNGNzgsIDB4NzdBMiwgMHg3N0EyLCAweDE0OTUsIDB4NzdBMywgMHg3N0E0LCAweDNGNzksCisgICAgMHg3N0E1LCAweDc3QTUsIDB4MEJEMiwgMHg3N0E2LCAweDc3QTYsIDB4M0Y3QiwgMHg3N0E3LCAweDc3QTcsIDB4MEM0MywKKyAgICAweDc3QTgsIDB4NzdBOCwgMHgzRjdDLCAweDc3QTksIDB4NzdBOSwgMHgxMUY0LCAweDc3QUEsIDB4NzdBQSwgMHgwNUFBLAorICAgIDB4NzdBQiwgMHg3N0FCLCAweDNGN0QsIDB4NzdBQywgMHg3N0FDLCAweDBEQTcsIDB4NzdBRCwgMHg3N0FELCAweDI2ODcsCisgICAgMHg3N0FFLCAweDc3QUYsIDB4M0Y3RSwgMHg3N0IwLCAweDc3QjAsIDB4MUE3NSwgMHg3N0IxLCAweDc3QjIsIDB4M0Y4MCwKKyAgICAweDc3QjMsIDB4NzdCMywgMHgwRTVDLCAweDc3QjQsIDB4NzdCNCwgMHgzRjgyLCAweDc3QjUsIDB4NzdCNSwgMHgxQTc2LAorICAgIDB4NzdCNiwgMHg3N0JBLCAweDNGODMsIDB4NzdCQiwgMHg3N0JCLCAweDExNTEsIDB4NzdCQywgMHg3N0JDLCAweDI0RjAsCisgICAgMHg3N0JELCAweDc3QkQsIDB4MUE3NywgMHg3N0JFLCAweDc3QkUsIDB4M0Y4OCwgMHg3N0JGLCAweDc3QkYsIDB4MUQ3RSwKKyAgICAweDc3QzAsIDB4NzdDNiwgMHgzRjg5LCAweDc3QzcsIDB4NzdDNywgMHgyNjhELCAweDc3QzgsIDB4NzdDQywgMHgzRjkwLAorICAgIDB4NzdDRCwgMHg3N0NELCAweDEzOTcsIDB4NzdDRSwgMHg3N0Q2LCAweDNGOTUsIDB4NzdENywgMHg3N0Q3LCAweDA1MjYsCisgICAgMHg3N0Q4LCAweDc3RDksIDB4M0Y5RSwgMHg3N0RBLCAweDc3REEsIDB4MjJBMCwgMHg3N0RCLCAweDc3REIsIDB4MEFCMSwKKyAgICAweDc3REMsIDB4NzdEQywgMHgxQkNBLCAweDc3REQsIDB4NzdFMSwgMHgzRkEwLCAweDc3RTIsIDB4NzdFMiwgMHgwRDRGLAorICAgIDB4NzdFMywgMHg3N0UzLCAweDEwNUEsIDB4NzdFNCwgMHg3N0U0LCAweDNGQTUsIDB4NzdFNSwgMHg3N0U1LCAweDExQTksCisgICAgMHg3N0U2LCAweDc3RTYsIDB4M0ZBNiwgMHg3N0U3LCAweDc3RTcsIDB4MUIxQSwgMHg3N0U4LCAweDc3RTgsIDB4M0ZBNywKKyAgICAweDc3RTksIDB4NzdFOSwgMHgwOTA3LCAweDc3RUEsIDB4NzdFQSwgMHgzRkE4LCAweDc3RUIsIDB4NzdFQiwgMHgwODk0LAorICAgIDB4NzdFQywgMHg3N0VDLCAweDFCMUIsIDB4NzdFRCwgMHg3N0VELCAweDA2MEIsIDB4NzdFRSwgMHg3N0VFLCAweDAzQjYsCisgICAgMHg3N0VGLCAweDc3RUYsIDB4MUZBQiwgMHg3N0YwLCAweDc3RjIsIDB4M0ZBOSwgMHg3N0YzLCAweDc3RjMsIDB4MEQ0NiwKKyAgICAweDc3RjQsIDB4NzdGNSwgMHgzRkFDLCAweDc3RjYsIDB4NzdGNiwgMHgxQTIyLCAweDc3RjcsIDB4NzdGNywgMHgzRkFFLAorICAgIDB4NzdGOCwgMHg3N0Y4LCAweDFBMjMsIDB4NzdGOSwgMHg3N0ZDLCAweDNGQUYsIDB4NzdGRCwgMHg3N0ZELCAweDBGMDgsCisgICAgMHg3N0ZFLCAweDc3RkUsIDB4MDY0QywgMHg3N0ZGLCAweDc3RkYsIDB4MDk4MCwgMHg3ODAwLCAweDc4MDAsIDB4MUEyNCwKKyAgICAweDc4MDEsIDB4NzgwMSwgMHgwQTkyLCAweDc4MDIsIDB4NzgwMiwgMHgwQ0U5LCAweDc4MDMsIDB4NzgwOCwgMHgzRkIzLAorICAgIDB4NzgwOSwgMHg3ODA5LCAweDFBMjUsIDB4NzgwQSwgMHg3ODBCLCAweDNGQjksIDB4NzgwQywgMHg3ODBDLCAweDBDMTUsCisgICAgMHg3ODBELCAweDc4MEQsIDB4MDk0MCwgMHg3ODBFLCAweDc4MTAsIDB4M0ZCQiwgMHg3ODExLCAweDc4MTEsIDB4MUEyOCwKKyAgICAweDc4MTIsIDB4NzgxMiwgMHgwQkI5LCAweDc4MTMsIDB4NzgxMywgMHgzRkJFLCAweDc4MTQsIDB4NzgxNCwgMHgwRkY5LAorICAgIDB4NzgxNSwgMHg3ODE1LCAweDNGQkYsIDB4NzgxNiwgMHg3ODE2LCAweDEyMDYsIDB4NzgxNywgMHg3ODE4LCAweDFBMjYsCisgICAgMHg3ODE5LCAweDc4MTksIDB4M0ZDMCwgMHg3ODFBLCAweDc4MUEsIDB4MTAwQiwgMHg3ODFCLCAweDc4MUIsIDB4M0ZDMSwKKyAgICAweDc4MUMsIDB4NzgxRCwgMHgxQTJCLCAweDc4MUUsIDB4NzgxRSwgMHgzRkMyLCAweDc4MUYsIDB4NzgxRiwgMHgxQTMwLAorICAgIDB4NzgyMCwgMHg3ODIyLCAweDNGQzMsIDB4NzgyMywgMHg3ODIzLCAweDFBMzQsIDB4NzgyNCwgMHg3ODI0LCAweDNGQzYsCisgICAgMHg3ODI1LCAweDc4MjUsIDB4MUEzMiwgMHg3ODI2LCAweDc4MjYsIDB4MUEzQSwgMHg3ODI3LCAweDc4MjcsIDB4MTE4OSwKKyAgICAweDc4MjgsIDB4NzgyOCwgMHgzRkM3LCAweDc4MjksIDB4NzgyOSwgMHgxQTM1LCAweDc4MkEsIDB4NzgyQiwgMHgzRkM4LAorICAgIDB4NzgyQywgMHg3ODJDLCAweDFBMzMsIDB4NzgyRCwgMHg3ODJELCAweDFBMkEsIDB4NzgyRSwgMHg3ODJGLCAweDNGQ0EsCisgICAgMHg3ODMwLCAweDc4MzAsIDB4MEJBQSwgMHg3ODMxLCAweDc4MzMsIDB4M0ZDQywgMHg3ODM0LCAweDc4MzQsIDB4MEJFNSwKKyAgICAweDc4MzUsIDB4NzgzNiwgMHgzRkNGLCAweDc4MzcsIDB4NzgzNywgMHgwRDIyLCAweDc4MzgsIDB4NzgzOCwgMHgxMTE1LAorICAgIDB4NzgzOSwgMHg3ODNCLCAweDFBMkQsIDB4NzgzQywgMHg3ODNDLCAweDFBMzEsIDB4NzgzRCwgMHg3ODNELCAweDNGRDEsCisgICAgMHg3ODNFLCAweDc4M0UsIDB4MDlFNCwgMHg3ODNGLCAweDc4M0YsIDB4M0ZEMiwgMHg3ODQwLCAweDc4NDAsIDB4MDUyNCwKKyAgICAweDc4NDEsIDB4Nzg0MiwgMHgzRkQzLCAweDc4NDMsIDB4Nzg0MywgMHgyNkE4LCAweDc4NDQsIDB4Nzg0NCwgMHgzRkQ1LAorICAgIDB4Nzg0NSwgMHg3ODQ1LCAweDA3NDEsIDB4Nzg0NiwgMHg3ODQ2LCAweDNGRDYsIDB4Nzg0NywgMHg3ODQ3LCAweDFBM0MsCisgICAgMHg3ODQ4LCAweDc4NEIsIDB4M0ZENywgMHg3ODRDLCAweDc4NEMsIDB4MUEzRCwgMHg3ODRELCAweDc4NEQsIDB4M0ZEQiwKKyAgICAweDc4NEUsIDB4Nzg0RSwgMHgxQTM2LCAweDc4NEYsIDB4Nzg0RiwgMHgzRkRDLCAweDc4NTAsIDB4Nzg1MCwgMHgxQTNCLAorICAgIDB4Nzg1MSwgMHg3ODUxLCAweDNGREQsIDB4Nzg1MiwgMHg3ODUyLCAweDBGMDcsIDB4Nzg1MywgMHg3ODU0LCAweDNGREUsCisgICAgMHg3ODU1LCAweDc4NTUsIDB4MERBQiwgMHg3ODU2LCAweDc4NTcsIDB4MUEzOCwgMHg3ODU4LCAweDc4NUMsIDB4M0ZFMCwKKyAgICAweDc4NUQsIDB4Nzg1RCwgMHgwRjYyLCAweDc4NUUsIDB4Nzg2MywgMHgzRkU1LCAweDc4NjQsIDB4Nzg2NCwgMHgyNEU5LAorICAgIDB4Nzg2NSwgMHg3ODY3LCAweDNGRUIsIDB4Nzg2OCwgMHg3ODY4LCAweDI0RTUsIDB4Nzg2OSwgMHg3ODY5LCAweDNGRUUsCisgICAgMHg3ODZBLCAweDc4NkEsIDB4MUEzRSwgMHg3ODZCLCAweDc4NkIsIDB4MEEzQiwgMHg3ODZDLCAweDc4NkMsIDB4MTA5NywKKyAgICAweDc4NkQsIDB4Nzg2RCwgMHgxQTM3LCAweDc4NkUsIDB4Nzg2RSwgMHgwQzkyLCAweDc4NkYsIDB4Nzg2RiwgMHgyMUZBLAorICAgIDB4Nzg3MCwgMHg3ODc2LCAweDNGRUYsIDB4Nzg3NywgMHg3ODc3LCAweDA4NjIsIDB4Nzg3OCwgMHg3ODdCLCAweDNGRjYsCisgICAgMHg3ODdDLCAweDc4N0MsIDB4MEJCMSwgMHg3ODdELCAweDc4ODYsIDB4M0ZGQSwgMHg3ODg3LCAweDc4ODcsIDB4MUE0MiwKKyAgICAweDc4ODgsIDB4Nzg4OCwgMHg0MDA0LCAweDc4ODksIDB4Nzg4OSwgMHgwNUQwLCAweDc4OEEsIDB4Nzg4QiwgMHg0MDA1LAorICAgIDB4Nzg4QywgMHg3ODhDLCAweDBBNUMsIDB4Nzg4RCwgMHg3ODhELCAweDAzQjgsIDB4Nzg4RSwgMHg3ODhFLCAweDBEREUsCisgICAgMHg3ODhGLCAweDc4OTAsIDB4NDAwNywgMHg3ODkxLCAweDc4OTEsIDB4MDQxNywgMHg3ODkyLCAweDc4OTIsIDB4NDAwOSwKKyAgICAweDc4OTMsIDB4Nzg5MywgMHgxQTQwLCAweDc4OTQsIDB4Nzg5NiwgMHg0MDBBLCAweDc4OTcsIDB4Nzg5NywgMHgwRTlDLAorICAgIDB4Nzg5OCwgMHg3ODk4LCAweDA1QzMsIDB4Nzg5OSwgMHg3ODk5LCAweDQwMEQsIDB4Nzg5QSwgMHg3ODlBLCAweDFBNDEsCisgICAgMHg3ODlCLCAweDc4OUIsIDB4MUEzRiwgMHg3ODlDLCAweDc4OUMsIDB4MUE0MywgMHg3ODlELCAweDc4OUUsIDB4NDAwRSwKKyAgICAweDc4OUYsIDB4Nzg5RiwgMHgwNURCLCAweDc4QTAsIDB4NzhBMCwgMHg0MDEwLCAweDc4QTEsIDB4NzhBMSwgMHgxQTQ0LAorICAgIDB4NzhBMiwgMHg3OEEyLCAweDQwMTEsIDB4NzhBMywgMHg3OEEzLCAweDFBNDUsIDB4NzhBNCwgMHg3OEE0LCAweDQwMTIsCisgICAgMHg3OEE1LCAweDc4QTUsIDB4MUE0OCwgMHg3OEE2LCAweDc4QTYsIDB4NDAxMywgMHg3OEE3LCAweDc4QTcsIDB4MDQzNSwKKyAgICAweDc4QTgsIDB4NzhBOCwgMHg0MDE0LCAweDc4QTksIDB4NzhBOSwgMHgyMTQ4LCAweDc4QUEsIDB4NzhBQywgMHg0MDE1LAorICAgIDB4NzhBRCwgMHg3OEFELCAweDI0RTQsIDB4NzhBRSwgMHg3OEFGLCAweDQwMTgsIDB4NzhCMCwgMHg3OEIwLCAweDBCQjcsCisgICAgMHg3OEIxLCAweDc4QjEsIDB4MDg2MSwgMHg3OEIyLCAweDc4QjIsIDB4MUE0NiwgMHg3OEIzLCAweDc4QjMsIDB4MEUwRiwKKyAgICAweDc4QjQsIDB4NzhCNCwgMHgwNEIxLCAweDc4QjUsIDB4NzhCNywgMHg0MDFBLCAweDc4QjgsIDB4NzhCOCwgMHgyNEU2LAorICAgIDB4NzhCOSwgMHg3OEI5LCAweDFBNDcsIDB4NzhCQSwgMHg3OEJBLCAweDIwRjcsIDB4NzhCQiwgMHg3OEJCLCAweDQwMUQsCisgICAgMHg3OEJDLCAweDc4QkMsIDB4MjA2QiwgMHg3OEJELCAweDc4QkQsIDB4NDAxRSwgMHg3OEJFLCAweDc4QkUsIDB4MEI0RSwKKyAgICAweDc4QkYsIDB4NzhDMCwgMHg0MDFGLCAweDc4QzEsIDB4NzhDMSwgMHgwNTQ4LCAweDc4QzIsIDB4NzhDNCwgMHg0MDIxLAorICAgIDB4NzhDNSwgMHg3OEM1LCAweDA0MDAsIDB4NzhDNiwgMHg3OEM4LCAweDQwMjQsIDB4NzhDOSwgMHg3OEM5LCAweDFBNEIsCisgICAgMHg3OENBLCAweDc4Q0EsIDB4MDlDNSwgMHg3OENCLCAweDc4Q0IsIDB4MDU2QiwgMHg3OENDLCAweDc4Q0YsIDB4NDAyNywKKyAgICAweDc4RDAsIDB4NzhEMCwgMHgwQjhFLCAweDc4RDEsIDB4NzhEMywgMHg0MDJCLCAweDc4RDQsIDB4NzhENCwgMHgxQTQ5LAorICAgIDB4NzhENSwgMHg3OEQ1LCAweDA5NTEsIDB4NzhENiwgMHg3OEQ4LCAweDQwMkUsIDB4NzhEOSwgMHg3OEQ5LCAweDFBNEEsCisgICAgMHg3OERBLCAweDc4REEsIDB4MjJBNywgMHg3OERCLCAweDc4RTIsIDB4NDAzMSwgMHg3OEUzLCAweDc4RTMsIDB4MjRFQywKKyAgICAweDc4RTQsIDB4NzhFNiwgMHg0MDM5LCAweDc4RTcsIDB4NzhFNywgMHgyNEVCLCAweDc4RTgsIDB4NzhFOCwgMHgwQjA4LAorICAgIDB4NzhFOSwgMHg3OEVCLCAweDQwM0MsIDB4NzhFQywgMHg3OEVDLCAweDFBNEMsIDB4NzhFRCwgMHg3OEVFLCAweDQwM0YsCisgICAgMHg3OEVGLCAweDc4RUYsIDB4MjRFMywgMHg3OEYwLCAweDc4RjEsIDB4NDA0MSwgMHg3OEYyLCAweDc4RjIsIDB4MUE0RCwKKyAgICAweDc4RjMsIDB4NzhGMywgMHg0MDQzLCAweDc4RjQsIDB4NzhGNCwgMHgxQTRGLCAweDc4RjUsIDB4NzhGNiwgMHg0MDQ0LAorICAgIDB4NzhGNywgMHg3OEY3LCAweDBBMjAsIDB4NzhGOCwgMHg3OEY5LCAweDQwNDYsIDB4NzhGQSwgMHg3OEZBLCAweDA3REMsCisgICAgMHg3OEZCLCAweDc4RkMsIDB4NDA0OCwgMHg3OEZELCAweDc4RkQsIDB4MjRFQSwgMHg3OEZFLCAweDc4RkYsIDB4NDA0QSwKKyAgICAweDc5MDAsIDB4NzkwMCwgMHg0MDRDLCAweDc5MDEsIDB4NzkwMSwgMHgwODg5LCAweDc5MDIsIDB4NzkwNCwgMHg0MDRELAorICAgIDB4NzkwNSwgMHg3OTA1LCAweDFBNEUsIDB4NzkwNiwgMHg3OTBELCAweDQwNTAsIDB4NzkwRSwgMHg3OTBFLCAweDFFOTIsCisgICAgMHg3OTBGLCAweDc5MTIsIDB4NDA1OCwgMHg3OTEzLCAweDc5MTMsIDB4MUE1MCwgMHg3OTE0LCAweDc5MTgsIDB4NDA1QywKKyAgICAweDc5MTksIDB4NzkxOSwgMHgxRTI3LCAweDc5MUEsIDB4NzkxRCwgMHg0MDYxLCAweDc5MUUsIDB4NzkxRSwgMHgxQTUyLAorICAgIDB4NzkxRiwgMHg3OTIzLCAweDQwNjUsIDB4NzkyNCwgMHg3OTI0LCAweDFBNTEsIDB4NzkyNSwgMHg3OTI1LCAweDQwNkEsCisgICAgMHg3OTI2LCAweDc5MjYsIDB4MUZFNiwgMHg3OTI3LCAweDc5MjksIDB4NDA2QiwgMHg3OTJBLCAweDc5MkEsIDB4MjRFNywKKyAgICAweDc5MkIsIDB4NzkyQiwgMHgyMDEyLCAweDc5MkMsIDB4NzkyQywgMHgxRUVDLCAweDc5MkQsIDB4NzkzMCwgMHg0MDZFLAorICAgIDB4NzkzMSwgMHg3OTMxLCAweDI0RTgsIDB4NzkzMiwgMHg3OTMzLCAweDQwNzIsIDB4NzkzNCwgMHg3OTM0LCAweDFBNTMsCisgICAgMHg3OTM1LCAweDc5MzksIDB4NDA3NCwgMHg3OTNBLCAweDc5M0EsIDB4MEQ1NSwgMHg3OTNCLCAweDc5M0IsIDB4MTlGOCwKKyAgICAweDc5M0MsIDB4NzkzQywgMHgwOURDLCAweDc5M0QsIDB4NzkzRCwgMHg0MDc5LCAweDc5M0UsIDB4NzkzRSwgMHgwRDIwLAorICAgIDB4NzkzRiwgMHg3OTNGLCAweDQwN0EsIDB4Nzk0MCwgMHg3OTQwLCAweDE5RjksIDB4Nzk0MSwgMHg3OTQxLCAweDBDMEQsCisgICAgMHg3OTQyLCAweDc5NDUsIDB4NDA3QiwgMHg3OTQ2LCAweDc5NDYsIDB4MTlGQSwgMHg3OTQ3LCAweDc5NDcsIDB4NDA3RiwKKyAgICAweDc5NDgsIDB4Nzk0OCwgMHgwQzBDLCAweDc5NDksIDB4Nzk0OSwgMHgxOUZCLCAweDc5NEEsIDB4Nzk1MiwgMHg0MDgwLAorICAgIDB4Nzk1MywgMHg3OTUzLCAweDE5RkUsIDB4Nzk1NCwgMHg3OTU1LCAweDQwODksIDB4Nzk1NiwgMHg3OTU2LCAweDEyNDMsCisgICAgMHg3OTU3LCAweDc5NTcsIDB4MUEwMSwgMHg3OTU4LCAweDc5NTksIDB4NDA4QiwgMHg3OTVBLCAweDc5NUEsIDB4MTlGRiwKKyAgICAweDc5NUIsIDB4Nzk1QywgMHgxOUZDLCAweDc5NUQsIDB4Nzk1RCwgMHgxMjAwLCAweDc5NUUsIDB4Nzk1RSwgMHgwRDJBLAorICAgIDB4Nzk1RiwgMHg3OTVGLCAweDBERTMsIDB4Nzk2MCwgMHg3OTYwLCAweDFBMDIsIDB4Nzk2MSwgMHg3OTYxLCAweDQwOEQsCisgICAgMHg3OTYyLCAweDc5NjIsIDB4MUEwMCwgMHg3OTYzLCAweDc5NjQsIDB4NDA4RSwgMHg3OTY1LCAweDc5NjUsIDB4MEY1NiwKKyAgICAweDc5NjYsIDB4Nzk2NiwgMHg0MDkwLCAweDc5NjcsIDB4Nzk2NywgMHgxQTA0LCAweDc5NjgsIDB4Nzk2OCwgMHgwQkQwLAorICAgIDB4Nzk2OSwgMHg3OTZDLCAweDQwOTEsIDB4Nzk2RCwgMHg3OTZELCAweDA4MzMsIDB4Nzk2RSwgMHg3OTZFLCAweDQwOTUsCisgICAgMHg3OTZGLCAweDc5NkYsIDB4MUEwMywgMHg3OTcwLCAweDc5NzYsIDB4NDA5NiwgMHg3OTc3LCAweDc5NzcsIDB4MDU5QywKKyAgICAweDc5NzgsIDB4Nzk3OCwgMHgwODBCLCAweDc5NzksIDB4Nzk3OSwgMHg0MDlELCAweDc5N0EsIDB4Nzk3QSwgMHgxQTA1LAorICAgIDB4Nzk3QiwgMHg3OTdGLCAweDQwOUUsIDB4Nzk4MCwgMHg3OTgwLCAweDEzMEIsIDB4Nzk4MSwgMHg3OTgxLCAweDA4Q0MsCisgICAgMHg3OTgyLCAweDc5ODMsIDB4NDBBMywgMHg3OTg0LCAweDc5ODQsIDB4MEE2MiwgMHg3OTg1LCAweDc5ODUsIDB4MUEwNiwKKyAgICAweDc5ODYsIDB4Nzk4OSwgMHg0MEE1LCAweDc5OEEsIDB4Nzk4QSwgMHgxQTA3LCAweDc5OEIsIDB4Nzk4QywgMHg0MEE5LAorICAgIDB4Nzk4RCwgMHg3OThELCAweDFGNjYsIDB4Nzk4RSwgMHg3OThFLCAweDI0REMsIDB4Nzk4RiwgMHg3OThGLCAweDA2OUUsCisgICAgMHg3OTkwLCAweDc5OTksIDB4NDBBQiwgMHg3OTlBLCAweDc5OUEsIDB4MUEwOCwgMHg3OTlCLCAweDc5QTUsIDB4NDBCNSwKKyAgICAweDc5QTYsIDB4NzlBNiwgMHgyNkEyLCAweDc5QTcsIDB4NzlBNywgMHgxQTA5LCAweDc5QTgsIDB4NzlBOSwgMHg0MEMwLAorICAgIDB4NzlBQSwgMHg3OUFBLCAweDI0REQsIDB4NzlBQiwgMHg3OUFELCAweDQwQzIsIDB4NzlBRSwgMHg3OUFFLCAweDIwMEUsCisgICAgMHg3OUFGLCAweDc5QUYsIDB4NDBDNSwgMHg3OUIwLCAweDc5QjAsIDB4MjREQiwgMHg3OUIxLCAweDc5QjEsIDB4MUVCOCwKKyAgICAweDc5QjIsIDB4NzlCMiwgMHg0MEM2LCAweDc5QjMsIDB4NzlCMywgMHgxQTBBLCAweDc5QjQsIDB4NzlCOCwgMHg0MEM3LAorICAgIDB4NzlCOSwgMHg3OUI5LCAweDEwRDIsIDB4NzlCQSwgMHg3OUJBLCAweDEyNjQsIDB4NzlCQiwgMHg3OUJCLCAweDA5RDYsCisgICAgMHg3OUJDLCAweDc5QkMsIDB4NDBDQywgMHg3OUJELCAweDc5QkQsIDB4MEM1QSwgMHg3OUJFLCAweDc5QkUsIDB4MDc4MywKKyAgICAweDc5QkYsIDB4NzlCRiwgMHg0MENELCAweDc5QzAsIDB4NzlDMCwgMHgwRkFFLCAweDc5QzEsIDB4NzlDMSwgMHgwREIyLAorICAgIDB4NzlDMiwgMHg3OUMyLCAweDQwQ0UsIDB4NzlDMywgMHg3OUMzLCAweDBFNkIsIDB4NzlDNCwgMHg3OUM1LCAweDQwQ0YsCisgICAgMHg3OUM2LCAweDc5QzYsIDB4MDZDQywgMHg3OUM3LCAweDc5QzgsIDB4NDBEMSwgMHg3OUM5LCAweDc5QzksIDB4MDQ2NSwKKyAgICAweDc5Q0EsIDB4NzlDQSwgMHg0MEQzLCAweDc5Q0IsIDB4NzlDQiwgMHgwQzZDLCAweDc5Q0MsIDB4NzlDQywgMHg0MEQ0LAorICAgIDB4NzlDRCwgMHg3OUNELCAweDExRDUsIDB4NzlDRSwgMHg3OUQwLCAweDQwRDUsIDB4NzlEMSwgMHg3OUQxLCAweDA5NTMsCisgICAgMHg3OUQyLCAweDc5RDIsIDB4MEFGMCwgMHg3OUQzLCAweDc5RDQsIDB4NDBEOCwgMHg3OUQ1LCAweDc5RDUsIDB4MUIxRCwKKyAgICAweDc5RDYsIDB4NzlENywgMHg0MERBLCAweDc5RDgsIDB4NzlEOCwgMHgwQURELCAweDc5RDksIDB4NzlERSwgMHg0MERDLAorICAgIDB4NzlERiwgMHg3OURGLCAweDEyM0YsIDB4NzlFMCwgMHg3OUUyLCAweDQwRTIsIDB4NzlFMywgMHg3OUUzLCAweDFCMUYsCisgICAgMHg3OUU0LCAweDc5RTQsIDB4MDRGOCwgMHg3OUU1LCAweDc5RTUsIDB4NDBFNSwgMHg3OUU2LCAweDc5RTYsIDB4MEM1NSwKKyAgICAweDc5RTcsIDB4NzlFNywgMHgxMDE2LCAweDc5RTgsIDB4NzlFOCwgMHg0MEU2LCAweDc5RTksIDB4NzlFOSwgMHgxMUM3LAorICAgIDB4NzlFQSwgMHg3OUVBLCAweDQwRTcsIDB4NzlFQiwgMHg3OUVCLCAweDFCMjAsIDB4NzlFQywgMHg3OUVDLCAweDQwRTgsCisgICAgMHg3OUVELCAweDc5RUQsIDB4MUIxRSwgMHg3OUVFLCAweDc5RUUsIDB4NDBFOSwgMHg3OUVGLCAweDc5RUYsIDB4MDgxMiwKKyAgICAweDc5RjAsIDB4NzlGMCwgMHgwNEVCLCAweDc5RjEsIDB4NzlGNywgMHg0MEVBLCAweDc5RjgsIDB4NzlGOCwgMHgwOEE2LAorICAgIDB4NzlGOSwgMHg3OUZBLCAweDQwRjEsIDB4NzlGQiwgMHg3OUZCLCAweDEwNEQsIDB4NzlGQywgMHg3OUZDLCAweDQwRjMsCisgICAgMHg3OUZELCAweDc5RkQsIDB4MDdGNSwgMHg3OUZFLCAweDc5RkYsIDB4NDBGNCwgMHg3QTAwLCAweDdBMDAsIDB4MEYwRSwKKyAgICAweDdBMDEsIDB4N0EwMSwgMHg0MEY2LCAweDdBMDIsIDB4N0EwMiwgMHgxQjI0LCAweDdBMDMsIDB4N0EwMywgMHgxQjIzLAorICAgIDB4N0EwNCwgMHg3QTA1LCAweDQwRjcsIDB4N0EwNiwgMHg3QTA2LCAweDFCMjEsIDB4N0EwNywgMHg3QTBBLCAweDQwRjksCisgICAgMHg3QTBCLCAweDdBMEIsIDB4MDRGMSwgMHg3QTBDLCAweDdBMEMsIDB4NDBGRCwgMHg3QTBELCAweDdBMEQsIDB4MEQwRCwKKyAgICAweDdBMEUsIDB4N0EwRSwgMHgwREE1LCAweDdBMEYsIDB4N0ExMywgMHg0MEZFLCAweDdBMTQsIDB4N0ExNCwgMHgxQjI2LAorICAgIDB4N0ExNSwgMHg3QTE2LCAweDQxMDMsIDB4N0ExNywgMHg3QTE3LCAweDAzRTksIDB4N0ExOCwgMHg3QTE5LCAweDQxMDUsCisgICAgMHg3QTFBLCAweDdBMUEsIDB4MTFDOCwgMHg3QTFCLCAweDdBMUQsIDB4NDEwNywgMHg3QTFFLCAweDdBMUUsIDB4MUIyNSwKKyAgICAweDdBMUYsIDB4N0ExRiwgMHg0MTBBLCAweDdBMjAsIDB4N0EyMCwgMHgwNTEyLCAweDdBMjEsIDB4N0EyMiwgMHg0MTBCLAorICAgIDB4N0EyMywgMHg3QTIzLCAweDFEOEYsIDB4N0EyNCwgMHg3QTJELCAweDQxMEQsIDB4N0EyRSwgMHg3QTJFLCAweDIyOTUsCisgICAgMHg3QTJGLCAweDdBMzAsIDB4NDExNywgMHg3QTMxLCAweDdBMzEsIDB4MUU4MCwgMHg3QTMyLCAweDdBMzIsIDB4NDExOSwKKyAgICAweDdBMzMsIDB4N0EzMywgMHgwRUQ3LCAweDdBMzQsIDB4N0EzNiwgMHg0MTFBLCAweDdBMzcsIDB4N0EzNywgMHgxQjI4LAorICAgIDB4N0EzOCwgMHg3QTM4LCAweDQxMUQsIDB4N0EzOSwgMHg3QTM5LCAweDFCMjcsIDB4N0EzQSwgMHg3QTNBLCAweDQxMUUsCisgICAgMHg3QTNCLCAweDdBM0IsIDB4MDU5RiwgMHg3QTNDLCAweDdBM0MsIDB4MDg0RCwgMHg3QTNELCAweDdBM0QsIDB4MDgxMSwKKyAgICAweDdBM0UsIDB4N0EzRSwgMHg0MTFGLCAweDdBM0YsIDB4N0EzRiwgMHgwNkUwLCAweDdBNDAsIDB4N0E0MCwgMHgyNjc3LAorICAgIDB4N0E0MSwgMHg3QTQ1LCAweDQxMjAsIDB4N0E0NiwgMHg3QTQ2LCAweDBCMjUsIDB4N0E0NywgMHg3QTRCLCAweDQxMjUsCisgICAgMHg3QTRDLCAweDdBNEMsIDB4MjYyNCwgMHg3QTRELCAweDdBNEQsIDB4MUY2OSwgMHg3QTRFLCAweDdBNEUsIDB4MjIyQiwKKyAgICAweDdBNEYsIDB4N0E1MCwgMHg0MTJBLCAweDdBNTEsIDB4N0E1MSwgMHgxQjI5LCAweDdBNTIsIDB4N0E1NiwgMHg0MTJDLAorICAgIDB4N0E1NywgMHg3QTU3LCAweDBERTAsIDB4N0E1OCwgMHg3QTYwLCAweDQxMzEsIDB4N0E2MSwgMHg3QTYxLCAweDI1N0YsCisgICAgMHg3QTYyLCAweDdBNjIsIDB4MUY1QiwgMHg3QTYzLCAweDdBNjgsIDB4NDEzQSwgMHg3QTY5LCAweDdBNjksIDB4MjE5QiwKKyAgICAweDdBNkEsIDB4N0E2QSwgMHg0MTQwLCAweDdBNkIsIDB4N0E2QiwgMHgyNjdELCAweDdBNkMsIDB4N0E2RiwgMHg0MTQxLAorICAgIDB4N0E3MCwgMHg3QTcwLCAweDFCMkMsIDB4N0E3MSwgMHg3QTczLCAweDQxNDUsIDB4N0E3NCwgMHg3QTc0LCAweDBGRDEsCisgICAgMHg3QTc1LCAweDdBNzUsIDB4NDE0OCwgMHg3QTc2LCAweDdBNzYsIDB4MDhFRSwgMHg3QTc3LCAweDdBNzcsIDB4MEM2QiwKKyAgICAweDdBNzgsIDB4N0E3OSwgMHgxQjlBLCAweDdBN0EsIDB4N0E3QSwgMHgwOTYyLCAweDdBN0IsIDB4N0E3RSwgMHg0MTQ5LAorICAgIDB4N0E3RiwgMHg3QTdGLCAweDA1MkMsIDB4N0E4MCwgMHg3QTgwLCAweDFCOUMsIDB4N0E4MSwgMHg3QTgxLCAweDBFNkMsCisgICAgMHg3QTgyLCAweDdBODIsIDB4NDE0RCwgMHg3QTgzLCAweDdBODMsIDB4MEM1MSwgMHg3QTg0LCAweDdBODQsIDB4MTE0RSwKKyAgICAweDdBODUsIDB4N0E4NSwgMHg0MTRFLCAweDdBODYsIDB4N0E4NiwgMHgxQjlELCAweDdBODcsIDB4N0E4NywgMHg0MTRGLAorICAgIDB4N0E4OCwgMHg3QTg4LCAweDFCOUUsIDB4N0E4OSwgMHg3QThDLCAweDQxNTAsIDB4N0E4RCwgMHg3QThELCAweDBDNEMsCisgICAgMHg3QThFLCAweDdBOTAsIDB4NDE1NCwgMHg3QTkxLCAweDdBOTEsIDB4MTAyQiwgMHg3QTkyLCAweDdBOTIsIDB4MTFDRSwKKyAgICAweDdBOTMsIDB4N0E5NCwgMHg0MTU3LCAweDdBOTUsIDB4N0E5NSwgMHgxQjlGLCAweDdBOTYsIDB4N0E5NiwgMHgwOEEyLAorICAgIDB4N0E5NywgMHg3QTk3LCAweDA1MzMsIDB4N0E5OCwgMHg3QTk4LCAweDA4RUMsIDB4N0E5OSwgMHg3QTlCLCAweDQxNTksCisgICAgMHg3QTlDLCAweDdBOUMsIDB4MDU1RiwgMHg3QTlELCAweDdBOUQsIDB4MEVFMCwgMHg3QTlFLCAweDdBOUUsIDB4NDE1QywKKyAgICAweDdBOUYsIDB4N0E5RiwgMHgwOTZDLCAweDdBQTAsIDB4N0FBMCwgMHgxQkExLCAweDdBQTEsIDB4N0FBNCwgMHg0MTVELAorICAgIDB4N0FBNSwgMHg3QUE1LCAweDA5ODcsIDB4N0FBNiwgMHg3QUE2LCAweDFCQTAsIDB4N0FBNywgMHg3QUE3LCAweDQxNjEsCisgICAgMHg3QUE4LCAweDdBQTgsIDB4MUJBMywgMHg3QUE5LCAweDdBQTksIDB4MjFBMCwgMHg3QUFBLCAweDdBQUEsIDB4MjE4NiwKKyAgICAweDdBQUIsIDB4N0FBQiwgMHg0MTYyLCAweDdBQUMsIDB4N0FBQywgMHgxQkEyLCAweDdBQUQsIDB4N0FBRCwgMHgxQkE0LAorICAgIDB4N0FBRSwgMHg3QUFFLCAweDIwRUQsIDB4N0FBRiwgMHg3QUIyLCAweDQxNjMsIDB4N0FCMywgMHg3QUIzLCAweDFCQTUsCisgICAgMHg3QUI0LCAweDdBQjUsIDB4NDE2NywgMHg3QUI2LCAweDdBQjYsIDB4MjVCOSwgMHg3QUI3LCAweDdBQjksIDB4NDE2OSwKKyAgICAweDdBQkEsIDB4N0FCQSwgMHgxRkVBLCAweDdBQkIsIDB4N0FCRSwgMHg0MTZDLCAweDdBQkYsIDB4N0FCRiwgMHgwQTQ3LAorICAgIDB4N0FDMCwgMHg3QUMzLCAweDQxNzAsIDB4N0FDNCwgMHg3QUM0LCAweDFFQTQsIDB4N0FDNSwgMHg3QUM1LCAweDIwRTEsCisgICAgMHg3QUM2LCAweDdBQzYsIDB4NDE3NCwgMHg3QUM3LCAweDdBQzcsIDB4MjVCOCwgMHg3QUM4LCAweDdBQzgsIDB4MjI2MCwKKyAgICAweDdBQzksIDB4N0FDOSwgMHg0MTc1LCAweDdBQ0EsIDB4N0FDQSwgMHgyMEUyLCAweDdBQ0IsIDB4N0FDQiwgMHgwOUVCLAorICAgIDB4N0FDQywgMHg3QUQ1LCAweDQxNzYsIDB4N0FENiwgMHg3QUQ2LCAweDBEOTEsIDB4N0FENywgMHg3QUQ4LCAweDQxODAsCisgICAgMHg3QUQ5LCAweDdBRDksIDB4MTE1RiwgMHg3QURBLCAweDdBREQsIDB4NDE4MiwgMHg3QURFLCAweDdBREUsIDB4MDhFOSwKKyAgICAweDdBREYsIDB4N0FERiwgMHgwOEU4LCAweDdBRTAsIDB4N0FFMCwgMHgxMTYzLCAweDdBRTEsIDB4N0FFMiwgMHg0MTg2LAorICAgIDB4N0FFMywgMHg3QUUzLCAweDA5MkYsIDB4N0FFNCwgMHg3QUU0LCAweDQxODgsIDB4N0FFNSwgMHg3QUU1LCAweDBFNjAsCisgICAgMHg3QUU2LCAweDdBRTYsIDB4MUI5OSwgMHg3QUU3LCAweDdBRTksIDB4NDE4OSwgMHg3QUVBLCAweDdBRUEsIDB4MjE0MSwKKyAgICAweDdBRUIsIDB4N0FFQywgMHg0MThDLCAweDdBRUQsIDB4N0FFRCwgMHgwOEIwLCAweDdBRUUsIDB4N0FFRSwgMHg0MThFLAorICAgIDB4N0FFRiwgMHg3QUVGLCAweDA2MEEsIDB4N0FGMCwgMHg3QUY1LCAweDQxOEYsIDB4N0FGNiwgMHg3QUY2LCAweDFGQzcsCisgICAgMHg3QUY3LCAweDdBRjgsIDB4NDE5NSwgMHg3QUY5LCAweDdBRjksIDB4MTFGMCwgMHg3QUZBLCAweDdBRkEsIDB4MUM2MywKKyAgICAweDdBRkIsIDB4N0FGQywgMHg0MTk3LCAweDdBRkQsIDB4N0FGRCwgMHgxQzY0LCAweDdBRkUsIDB4N0FGRSwgMHg0MTk5LAorICAgIDB4N0FGRiwgMHg3QUZGLCAweDA2QzgsIDB4N0IwMCwgMHg3QjAyLCAweDQxOUEsIDB4N0IwMywgMHg3QjA0LCAweDFDNjYsCisgICAgMHg3QjA1LCAweDdCMDUsIDB4NDE5RCwgMHg3QjA2LCAweDdCMDYsIDB4MDNENSwgMHg3QjA3LCAweDdCMDcsIDB4NDE5RSwKKyAgICAweDdCMDgsIDB4N0IwOCwgMHgxQzY1LCAweDdCMDksIDB4N0IwOSwgMHg0MTlGLCAweDdCMEEsIDB4N0IwQSwgMHgxQzY5LAorICAgIDB4N0IwQiwgMHg3QjBCLCAweDBERTYsIDB4N0IwQywgMHg3QjBFLCAweDQxQTAsIDB4N0IwRiwgMHg3QjBGLCAweDFDNkIsCisgICAgMHg3QjEwLCAweDdCMTAsIDB4NDFBMywgMHg3QjExLCAweDdCMTEsIDB4MEY3MSwgMHg3QjEyLCAweDdCMTMsIDB4NDFBNCwKKyAgICAweDdCMTQsIDB4N0IxNCwgMHgwNDMzLCAweDdCMTUsIDB4N0IxNSwgMHgxQzY4LCAweDdCMTYsIDB4N0IxOCwgMHg0MUE2LAorICAgIDB4N0IxOSwgMHg3QjE5LCAweDFDNkYsIDB4N0IxQSwgMHg3QjFBLCAweDQxQTksIDB4N0IxQiwgMHg3QjFCLCAweDA1QjIsCisgICAgMHg3QjFDLCAweDdCMUQsIDB4NDFBQSwgMHg3QjFFLCAweDdCMUUsIDB4MUM3NywgMHg3QjFGLCAweDdCMUYsIDB4NDFBQywKKyAgICAweDdCMjAsIDB4N0IyMCwgMHgxQzcyLCAweDdCMjEsIDB4N0IyMywgMHg0MUFELCAweDdCMjQsIDB4N0IyNCwgMHgxQzc0LAorICAgIDB4N0IyNSwgMHg3QjI1LCAweDFDNzMsIDB4N0IyNiwgMHg3QjI2LCAweDA2OTgsIDB4N0IyNywgMHg3QjI3LCAweDQxQjAsCisgICAgMHg3QjI4LCAweDdCMjgsIDB4MDQyOCwgMHg3QjI5LCAweDdCMjksIDB4NDFCMSwgMHg3QjJBLCAweDdCMkEsIDB4MUM2RSwKKyAgICAweDdCMkIsIDB4N0IyQiwgMHgxQzZBLCAweDdCMkMsIDB4N0IyQywgMHgwNUJCLCAweDdCMkQsIDB4N0IyRCwgMHg0MUIyLAorICAgIDB4N0IyRSwgMHg3QjJFLCAweDFDNzAsIDB4N0IyRiwgMHg3QjMwLCAweDQxQjMsIDB4N0IzMSwgMHg3QjMxLCAweDFDNzEsCisgICAgMHg3QjMyLCAweDdCMzIsIDB4NDFCNSwgMHg3QjMzLCAweDdCMzMsIDB4MUM3NSwgMHg3QjM0LCAweDdCMzcsIDB4NDFCNiwKKyAgICAweDdCMzgsIDB4N0IzOCwgMHgxQzZELCAweDdCMzksIDB4N0IzOSwgMHg0MUJBLCAweDdCM0EsIDB4N0IzQSwgMHgwODU2LAorICAgIDB4N0IzQiwgMHg3QjNCLCAweDQxQkIsIDB4N0IzQywgMHg3QjNDLCAweDBBNDYsIDB4N0IzRCwgMHg3QjNELCAweDQxQkMsCisgICAgMHg3QjNFLCAweDdCM0UsIDB4MUM3NiwgMHg3QjNGLCAweDdCNDQsIDB4NDFCRCwgMHg3QjQ1LCAweDdCNDUsIDB4MUM3QSwKKyAgICAweDdCNDYsIDB4N0I0NiwgMHgxRTQxLCAweDdCNDcsIDB4N0I0NywgMHgxQzZDLCAweDdCNDgsIDB4N0I0OCwgMHg0MUMzLAorICAgIDB4N0I0OSwgMHg3QjQ5LCAweDA1QTksIDB4N0I0QSwgMHg3QjRBLCAweDQxQzQsIDB4N0I0QiwgMHg3QjRCLCAweDA4QkYsCisgICAgMHg3QjRDLCAweDdCNEMsIDB4MUM3QywgMHg3QjRELCAweDdCNEUsIDB4NDFDNSwgMHg3QjRGLCAweDdCNEYsIDB4MDY0MSwKKyAgICAweDdCNTAsIDB4N0I1MCwgMHgwOTdELCAweDdCNTEsIDB4N0I1MSwgMHgxMUZELCAweDdCNTIsIDB4N0I1MiwgMHgwRTYzLAorICAgIDB4N0I1MywgMHg3QjUzLCAweDQxQzcsIDB4N0I1NCwgMHg3QjU0LCAweDA1NzMsIDB4N0I1NSwgMHg3QjU1LCAweDQxQzgsCisgICAgMHg3QjU2LCAweDdCNTYsIDB4MDRBNiwgMHg3QjU3LCAweDdCNTcsIDB4NDFDOSwgMHg3QjU4LCAweDdCNTgsIDB4MUM3OCwKKyAgICAweDdCNTksIDB4N0I1OSwgMHg0MUNBLCAweDdCNUEsIDB4N0I1QSwgMHgxQzc5LCAweDdCNUIsIDB4N0I1QiwgMHgwQ0YxLAorICAgIDB4N0I1QywgMHg3QjVDLCAweDQxQ0IsIDB4N0I1RCwgMHg3QjVELCAweDFDN0QsIDB4N0I1RSwgMHg3QjVGLCAweDQxQ0MsCisgICAgMHg3QjYwLCAweDdCNjAsIDB4MUM3RSwgMHg3QjYxLCAweDdCNjEsIDB4NDFDRSwgMHg3QjYyLCAweDdCNjIsIDB4MUM4MSwKKyAgICAweDdCNjMsIDB4N0I2NiwgMHg0MUNGLCAweDdCNjcsIDB4N0I2NywgMHgyNUU0LCAweDdCNjgsIDB4N0I2RCwgMHg0MUQzLAorICAgIDB4N0I2RSwgMHg3QjZFLCAweDFDN0YsIDB4N0I2RiwgMHg3QjcwLCAweDQxRDksIDB4N0I3MSwgMHg3QjcxLCAweDFDODMsCisgICAgMHg3QjcyLCAweDdCNzIsIDB4MUM4MiwgMHg3QjczLCAweDdCNzQsIDB4NDFEQiwgMHg3Qjc1LCAweDdCNzUsIDB4MUM3QiwKKyAgICAweDdCNzYsIDB4N0I3NiwgMHg0MURELCAweDdCNzcsIDB4N0I3NywgMHgwOTc3LCAweDdCNzgsIDB4N0I3OCwgMHg0MURFLAorICAgIDB4N0I3OSwgMHg3Qjc5LCAweDA1MTQsIDB4N0I3QSwgMHg3QjdBLCAweDQxREYsIDB4N0I3QiwgMHg3QjdCLCAweDFDODAsCisgICAgMHg3QjdDLCAweDdCN0QsIDB4NDFFMCwgMHg3QjdFLCAweDdCN0UsIDB4MEMyNiwgMHg3QjdGLCAweDdCN0YsIDB4NDFFMiwKKyAgICAweDdCODAsIDB4N0I4MCwgMHgwODY1LCAweDdCODEsIDB4N0I4NCwgMHg0MUUzLCAweDdCODUsIDB4N0I4NSwgMHgxQzhCLAorICAgIDB4N0I4NiwgMHg3QjhBLCAweDQxRTcsIDB4N0I4QiwgMHg3QjhCLCAweDFGODYsIDB4N0I4QywgMHg3QjhDLCAweDQxRUMsCisgICAgMHg3QjhELCAweDdCOEQsIDB4MDcxOCwgMHg3QjhFLCAweDdCOEYsIDB4NDFFRCwgMHg3QjkwLCAweDdCOTAsIDB4MUM4NCwKKyAgICAweDdCOTEsIDB4N0I5MywgMHg0MUVGLCAweDdCOTQsIDB4N0I5NCwgMHgwNDc0LCAweDdCOTUsIDB4N0I5NSwgMHgwODEzLAorICAgIDB4N0I5NiwgMHg3Qjk2LCAweDQxRjIsIDB4N0I5NywgMHg3Qjk3LCAweDBERDgsIDB4N0I5OCwgMHg3QjlCLCAweDQxRjMsCisgICAgMHg3QjlDLCAweDdCOUMsIDB4MUM4RCwgMHg3QjlELCAweDdCOUQsIDB4MUM4OSwgMHg3QjlFLCAweDdCQTAsIDB4NDFGNywKKyAgICAweDdCQTEsIDB4N0JBMSwgMHgwNzM1LCAweDdCQTIsIDB4N0JBMiwgMHgxQzhFLCAweDdCQTMsIDB4N0JBNSwgMHg0MUZBLAorICAgIDB4N0JBNiwgMHg3QkE3LCAweDFDODUsIDB4N0JBOCwgMHg3QkE4LCAweDFDOEEsIDB4N0JBOSwgMHg3QkE5LCAweDBBODgsCisgICAgMHg3QkFBLCAweDdCQUEsIDB4MUM4QywgMHg3QkFCLCAweDdCQUIsIDB4MUM4RiwgMHg3QkFDLCAweDdCQUMsIDB4MUM4OCwKKyAgICAweDdCQUQsIDB4N0JBRCwgMHgwODcwLCAweDdCQUUsIDB4N0JCMCwgMHg0MUZELCAweDdCQjEsIDB4N0JCMSwgMHgwRjUxLAorICAgIDB4N0JCMiwgMHg3QkIzLCAweDQyMDAsIDB4N0JCNCwgMHg3QkI0LCAweDFDOTAsIDB4N0JCNSwgMHg3QkI3LCAweDQyMDIsCisgICAgMHg3QkI4LCAweDdCQjgsIDB4MUM4NywgMHg3QkI5LCAweDdCQkYsIDB4NDIwNSwgMHg3QkMwLCAweDdCQzAsIDB4MUZCMywKKyAgICAweDdCQzEsIDB4N0JDMSwgMHgxQzkyLCAweDdCQzIsIDB4N0JDMywgMHg0MjBDLCAweDdCQzQsIDB4N0JDNCwgMHgxRUVGLAorICAgIDB4N0JDNSwgMHg3QkM1LCAweDQyMEUsIDB4N0JDNiwgMHg3QkM2LCAweDEyMEEsIDB4N0JDNywgMHg3QkM3LCAweDBCQzksCisgICAgMHg3QkM4LCAweDdCQzgsIDB4NDIwRiwgMHg3QkM5LCAweDdCQzksIDB4MjJBNCwgMHg3QkNBLCAweDdCQ0EsIDB4NDIxMCwKKyAgICAweDdCQ0IsIDB4N0JDQiwgMHgyNUU4LCAweDdCQ0MsIDB4N0JDQywgMHgxQzkzLCAweDdCQ0QsIDB4N0JEMCwgMHg0MjExLAorICAgIDB4N0JEMSwgMHg3QkQxLCAweDFDOTEsIDB4N0JEMiwgMHg3QkQyLCAweDQyMTUsIDB4N0JEMywgMHg3QkQzLCAweDBBNEYsCisgICAgMHg3QkQ0LCAweDdCRDgsIDB4NDIxNiwgMHg3QkQ5LCAweDdCRDksIDB4MDZEOCwgMHg3QkRBLCAweDdCREEsIDB4MUM5NSwKKyAgICAweDdCREIsIDB4N0JEQywgMHg0MjFCLCAweDdCREQsIDB4N0JERCwgMHgxQzk0LCAweDdCREUsIDB4N0JFMCwgMHg0MjFELAorICAgIDB4N0JFMSwgMHg3QkUxLCAweDA1NUUsIDB4N0JFMiwgMHg3QkUzLCAweDQyMjAsIDB4N0JFNCwgMHg3QkU0LCAweDI1RTMsCisgICAgMHg3QkU1LCAweDdCRTYsIDB4MUM5NiwgMHg3QkU3LCAweDdCRTgsIDB4NDIyMiwgMHg3QkU5LCAweDdCRTksIDB4MjExMSwKKyAgICAweDdCRUEsIDB4N0JFQSwgMHgxQzk4LCAweDdCRUIsIDB4N0JFRCwgMHg0MjI0LCAweDdCRUUsIDB4N0JFRSwgMHgwOUE1LAorICAgIDB4N0JFRiwgMHg3QkYwLCAweDQyMjcsIDB4N0JGMSwgMHg3QkYxLCAweDA5RDQsIDB4N0JGMiwgMHg3QkYyLCAweDQyMjksCisgICAgMHg3QkYzLCAweDdCRjMsIDB4MjVFNiwgMHg3QkY0LCAweDdCRjYsIDB4NDIyQSwgMHg3QkY3LCAweDdCRjcsIDB4MEJCMiwKKyAgICAweDdCRjgsIDB4N0JGQiwgMHg0MjJELCAweDdCRkMsIDB4N0JGQywgMHgxQzlCLCAweDdCRkQsIDB4N0JGRCwgMHg0MjMxLAorICAgIDB4N0JGRSwgMHg3QkZFLCAweDFDOUEsIDB4N0JGRiwgMHg3QkZGLCAweDQyMzIsIDB4N0MwMCwgMHg3QzAwLCAweDI1RTcsCisgICAgMHg3QzAxLCAweDdDMDYsIDB4NDIzMywgMHg3QzA3LCAweDdDMDcsIDB4MDU1QiwgMHg3QzA4LCAweDdDMEEsIDB4NDIzOSwKKyAgICAweDdDMEIsIDB4N0MwQiwgMHgxQzlFLCAweDdDMEMsIDB4N0MwQywgMHgxQzk5LCAweDdDMEQsIDB4N0MwRCwgMHgyMDQxLAorICAgIDB4N0MwRSwgMHg3QzBFLCAweDQyM0MsIDB4N0MwRiwgMHg3QzBGLCAweDFDOUMsIDB4N0MxMCwgMHg3QzE1LCAweDQyM0QsCisgICAgMHg3QzE2LCAweDdDMTYsIDB4MUM5RCwgMHg3QzE3LCAweDdDMUQsIDB4NDI0MywgMHg3QzFFLCAweDdDMUUsIDB4MjVFQSwKKyAgICAweDdDMUYsIDB4N0MxRiwgMHgxQzlGLCAweDdDMjAsIDB4N0MyMCwgMHg0MjRBLCAweDdDMjEsIDB4N0MyMSwgMHgxRjhGLAorICAgIDB4N0MyMiwgMHg3QzIyLCAweDQyNEIsIDB4N0MyMywgMHg3QzIzLCAweDI1RUMsIDB4N0MyNCwgMHg3QzI1LCAweDQyNEMsCisgICAgMHg3QzI2LCAweDdDMjYsIDB4MUNBMSwgMHg3QzI3LCAweDdDMjcsIDB4MDdERSwgMHg3QzI4LCAweDdDMjksIDB4NDI0RSwKKyAgICAweDdDMkEsIDB4N0MyQSwgMHgxQ0EwLCAweDdDMkIsIDB4N0MyQiwgMHgyNUVCLCAweDdDMkMsIDB4N0MzNywgMHg0MjUwLAorICAgIDB4N0MzOCwgMHg3QzM4LCAweDFDQTIsIDB4N0MzOSwgMHg3QzNDLCAweDQyNUMsIDB4N0MzRCwgMHg3QzNELCAweDIwRDAsCisgICAgMHg3QzNFLCAweDdDM0UsIDB4MjAxRCwgMHg3QzNGLCAweDdDM0YsIDB4MDQ4NSwgMHg3QzQwLCAweDdDNDAsIDB4MUNBNCwKKyAgICAweDdDNDEsIDB4N0M0MSwgMHgxQ0EzLCAweDdDNDIsIDB4N0M0MiwgMHg0MjYwLCAweDdDNDMsIDB4N0M0MywgMHgxRkY3LAorICAgIDB4N0M0NCwgMHg3QzRCLCAweDQyNjEsIDB4N0M0QywgMHg3QzRDLCAweDFFOEQsIDB4N0M0RCwgMHg3QzRELCAweDA4MjEsCisgICAgMHg3QzRFLCAweDdDNUIsIDB4NDI2OSwgMHg3QzVDLCAweDdDNUMsIDB4MjVFOSwgMHg3QzVELCAweDdDNUUsIDB4NDI3NywKKyAgICAweDdDNUYsIDB4N0M1RiwgMHgyNUVFLCAweDdDNjAsIDB4N0M2MCwgMHgyMDNBLCAweDdDNjEsIDB4N0M2MywgMHg0Mjc5LAorICAgIDB4N0M2NCwgMHg3QzY0LCAweDI2OTMsIDB4N0M2NSwgMHg3QzY4LCAweDQyN0MsIDB4N0M2OSwgMHg3QzY5LCAweDI1RTUsCisgICAgMHg3QzZBLCAweDdDNkEsIDB4MjVFRCwgMHg3QzZCLCAweDdDNkIsIDB4NDI4MCwgMHg3QzZDLCAweDdDNkMsIDB4MjAwOSwKKyAgICAweDdDNkQsIDB4N0M2RCwgMHg0MjgxLCAweDdDNkUsIDB4N0M2RSwgMHgyMDY1LCAweDdDNkYsIDB4N0M3MSwgMHg0MjgyLAorICAgIDB4N0M3MiwgMHg3QzcyLCAweDI2QTMsIDB4N0M3MywgMHg3QzczLCAweDBBREMsIDB4N0M3NCwgMHg3Qzc0LCAweDEyRjUsCisgICAgMHg3Qzc1LCAweDdDN0EsIDB4NDI4NSwgMHg3QzdCLCAweDdDN0IsIDB4MDlDQiwgMHg3QzdDLCAweDdDN0MsIDB4MUNDQSwKKyAgICAweDdDN0QsIDB4N0M3RCwgMHgxMjJFLCAweDdDN0UsIDB4N0M4OCwgMHg0MjhCLCAweDdDODksIDB4N0M4OSwgMHgwNjc4LAorICAgIDB4N0M4QSwgMHg3QzkwLCAweDQyOTYsIDB4N0M5MSwgMHg3QzkxLCAweDFDQ0MsIDB4N0M5MiwgMHg3QzkyLCAweDA5RUMsCisgICAgMHg3QzkzLCAweDdDOTQsIDB4NDI5RCwgMHg3Qzk1LCAweDdDOTUsIDB4MEJFOCwgMHg3Qzk2LCAweDdDOTYsIDB4NDI5RiwKKyAgICAweDdDOTcsIDB4N0M5NywgMHgwNTU5LCAweDdDOTgsIDB4N0M5OCwgMHgxMTU0LCAweDdDOTksIDB4N0M5QiwgMHg0MkEwLAorICAgIDB4N0M5QywgMHg3QzlDLCAweDFDQ0UsIDB4N0M5RCwgMHg3QzlELCAweDFDQ0QsIDB4N0M5RSwgMHg3QzlFLCAweDFDQ0YsCisgICAgMHg3QzlGLCAweDdDOUYsIDB4MERDRiwgMHg3Q0EwLCAweDdDQTEsIDB4NDJBMywgMHg3Q0EyLCAweDdDQTIsIDB4MUNEMCwKKyAgICAweDdDQTMsIDB4N0NBMywgMHg0MkE1LCAweDdDQTQsIDB4N0NBNCwgMHgxMTA0LCAweDdDQTUsIDB4N0NBNSwgMHgxMURGLAorICAgIDB4N0NBNiwgMHg3Q0E5LCAweDQyQTYsIDB4N0NBQSwgMHg3Q0FBLCAweDA2N0QsIDB4N0NBQiwgMHg3Q0FELCAweDQyQUEsCisgICAgMHg3Q0FFLCAweDdDQUUsIDB4MEEwMSwgMHg3Q0FGLCAweDdDQjAsIDB4NDJBRCwgMHg3Q0IxLCAweDdDQjEsIDB4MEEwNCwKKyAgICAweDdDQjIsIDB4N0NCMiwgMHgxQ0QxLCAweDdDQjMsIDB4N0NCMywgMHgwOERCLCAweDdDQjQsIDB4N0NCOCwgMHg0MkFGLAorICAgIDB4N0NCOSwgMHg3Q0I5LCAweDA1NjUsIDB4N0NCQSwgMHg3Q0JCLCAweDQyQjQsIDB4N0NCQywgMHg3Q0JELCAweDFDRDIsCisgICAgMHg3Q0JFLCAweDdDQkUsIDB4MDhEQSwgMHg3Q0JGLCAweDdDQzAsIDB4NDJCNiwgMHg3Q0MxLCAweDdDQzEsIDB4MUNENCwKKyAgICAweDdDQzIsIDB4N0NDNCwgMHg0MkI4LCAweDdDQzUsIDB4N0NDNSwgMHgxQ0Q5LCAweDdDQzYsIDB4N0NDNiwgMHg0MkJCLAorICAgIDB4N0NDNywgMHg3Q0M3LCAweDFDRDUsIDB4N0NDOCwgMHg3Q0M4LCAweDFDRDgsIDB4N0NDOSwgMHg3Q0M5LCAweDQyQkMsCisgICAgMHg3Q0NBLCAweDdDQ0EsIDB4MDdCNCwgMHg3Q0NCLCAweDdDQ0IsIDB4NDJCRCwgMHg3Q0NDLCAweDdDQ0QsIDB4MUNENiwKKyAgICAweDdDQ0UsIDB4N0NENCwgMHg0MkJFLCAweDdDRDUsIDB4N0NENSwgMHgwNkRELCAweDdDRDYsIDB4N0NENiwgMHgwRTFBLAorICAgIDB4N0NENywgMHg3Q0Q3LCAweDFDREEsIDB4N0NEOCwgMHg3Q0Q4LCAweDQyQzUsIDB4N0NEOSwgMHg3Q0Q5LCAweDA0QTEsCisgICAgMHg3Q0RBLCAweDdDREIsIDB4NDJDNiwgMHg3Q0RDLCAweDdDREMsIDB4MEFEOCwgMHg3Q0RELCAweDdDREQsIDB4MjVGNSwKKyAgICAweDdDREUsIDB4N0NERSwgMHgxRUZDLCAweDdDREYsIDB4N0NERiwgMHgxMTI2LCAweDdDRTAsIDB4N0NFMCwgMHgwOTQ0LAorICAgIDB4N0NFMSwgMHg3Q0U2LCAweDQyQzgsIDB4N0NFNywgMHg3Q0U3LCAweDIwMjQsIDB4N0NFOCwgMHg3Q0U4LCAweDFDREIsCisgICAgMHg3Q0U5LCAweDdDRUUsIDB4NDJDRSwgMHg3Q0VGLCAweDdDRUYsIDB4MEI3NSwgMHg3Q0YwLCAweDdDRjAsIDB4MjY5QiwKKyAgICAweDdDRjEsIDB4N0NGMSwgMHg0MkQ0LCAweDdDRjIsIDB4N0NGMiwgMHgyNUYzLCAweDdDRjMsIDB4N0NGMywgMHg0MkQ1LAorICAgIDB4N0NGNCwgMHg3Q0Y0LCAweDIyRDksIDB4N0NGNSwgMHg3Q0Y1LCAweDQyRDYsIDB4N0NGNiwgMHg3Q0Y2LCAweDI1RjQsCisgICAgMHg3Q0Y3LCAweDdDRjcsIDB4NDJENywgMHg3Q0Y4LCAweDdDRjgsIDB4MUNFNywgMHg3Q0Y5LCAweDdDRjksIDB4MjQxQiwKKyAgICAweDdDRkEsIDB4N0NGQSwgMHg0MkQ4LCAweDdDRkIsIDB4N0NGQiwgMHgwRjIyLCAweDdDRkMsIDB4N0NGRCwgMHg0MkQ5LAorICAgIDB4N0NGRSwgMHg3Q0ZFLCAweDFGQzgsIDB4N0NGRiwgMHg3Q0ZGLCAweDQyREIsIDB4N0QwMCwgMHg3RDAwLCAweDFGN0IsCisgICAgMHg3RDAxLCAweDdEMDEsIDB4NDJEQywgMHg3RDAyLCAweDdEMDIsIDB4MjQxRCwgMHg3RDAzLCAweDdEMDMsIDB4NDJERCwKKyAgICAweDdEMDQsIDB4N0QwNCwgMHgyMjRDLCAweDdEMDUsIDB4N0QwNSwgMHgxRjQ4LCAweDdEMDYsIDB4N0QwNiwgMHgyNDFDLAorICAgIDB4N0QwNywgMHg3RDA4LCAweDI0MUUsIDB4N0QwOSwgMHg3RDA5LCAweDIwRkYsIDB4N0QwQSwgMHg3RDBBLCAweDBFRDgsCisgICAgMHg3RDBCLCAweDdEMEIsIDB4MjE5QSwgMHg3RDBDLCAweDdEMEMsIDB4NDJERSwgMHg3RDBELCAweDdEMEQsIDB4MjA5MSwKKyAgICAweDdEMEUsIDB4N0QwRiwgMHg0MkRGLCAweDdEMTAsIDB4N0QxMCwgMHgyMEE3LCAweDdEMTEsIDB4N0QxMiwgMHg0MkUxLAorICAgIDB4N0QxMywgMHg3RDEzLCAweDI0MjMsIDB4N0QxNCwgMHg3RDE0LCAweDFFOUIsIDB4N0QxNSwgMHg3RDE1LCAweDI0MjIsCisgICAgMHg3RDE2LCAweDdEMTYsIDB4NDJFMywgMHg3RDE3LCAweDdEMTcsIDB4MjExMCwgMHg3RDE4LCAweDdEMTgsIDB4NDJFNCwKKyAgICAweDdEMTksIDB4N0QxOSwgMHgyMjhELCAweDdEMUEsIDB4N0QxQSwgMHgxRjcxLCAweDdEMUIsIDB4N0QxQiwgMHgxRUY4LAorICAgIDB4N0QxQywgMHg3RDFDLCAweDI0MjEsIDB4N0QxRCwgMHg3RDFGLCAweDQyRTUsIDB4N0QyMCwgMHg3RDIwLCAweDBEQ0QsCisgICAgMHg3RDIxLCAweDdEMjEsIDB4MUVGMywgMHg3RDIyLCAweDdEMjIsIDB4MERFQywgMHg3RDIzLCAweDdEMjYsIDB4NDJFOCwKKyAgICAweDdEMjcsIDB4N0QyNywgMHgwOEM1LCAweDdEMjgsIDB4N0QyQSwgMHg0MkVDLCAweDdEMkIsIDB4N0QyQiwgMHgxMjJDLAorICAgIDB4N0QyQywgMHg3RDJFLCAweDQyRUYsIDB4N0QyRiwgMHg3RDJGLCAweDA5QzYsIDB4N0QzMCwgMHg3RDMwLCAweDIxQjEsCisgICAgMHg3RDMxLCAweDdEMzEsIDB4MjQyNiwgMHg3RDMyLCAweDdEMzIsIDB4MjQyNSwgMHg3RDMzLCAweDdEMzMsIDB4MjEyMCwKKyAgICAweDdEMzQsIDB4N0QzOCwgMHg0MkYyLCAweDdEMzksIDB4N0QzOSwgMHgyMTFBLCAweDdEM0EsIDB4N0QzQSwgMHgyNDI0LAorICAgIDB4N0QzQiwgMHg3RDNCLCAweDQyRjcsIDB4N0QzQywgMHg3RDNDLCAweDI0MjgsIDB4N0QzRCwgMHg3RDNFLCAweDQyRjgsCisgICAgMHg3RDNGLCAweDdEM0YsIDB4MjQyQSwgMHg3RDQwLCAweDdENDAsIDB4MjQyOSwgMHg3RDQxLCAweDdENDEsIDB4NDJGQSwKKyAgICAweDdENDIsIDB4N0Q0MiwgMHgyMjk0LCAweDdENDMsIDB4N0Q0MywgMHg0MkZCLCAweDdENDQsIDB4N0Q0NCwgMHgyMkJFLAorICAgIDB4N0Q0NSwgMHg3RDQ1LCAweDQyRkMsIDB4N0Q0NiwgMHg3RDQ2LCAweDFFMzEsIDB4N0Q0NywgMHg3RDRELCAweDQyRkQsCisgICAgMHg3RDRFLCAweDdENEUsIDB4MjQyQywgMHg3RDRGLCAweDdENEYsIDB4NDMwNCwgMHg3RDUwLCAweDdENTAsIDB4MUZCNSwKKyAgICAweDdENTEsIDB4N0Q1QywgMHg0MzA1LCAweDdENUQsIDB4N0Q1RCwgMHgyNDJCLCAweDdENUUsIDB4N0Q1RSwgMHgxRkFGLAorICAgIDB4N0Q1RiwgMHg3RDYwLCAweDQzMTEsIDB4N0Q2MSwgMHg3RDYxLCAweDIwNjgsIDB4N0Q2MiwgMHg3RDYyLCAweDIxRTQsCisgICAgMHg3RDYzLCAweDdENjUsIDB4NDMxMywgMHg3RDY2LCAweDdENjYsIDB4MUYyMSwgMHg3RDY3LCAweDdENjcsIDB4NDMxNiwKKyAgICAweDdENjgsIDB4N0Q2OCwgMHgyMTAxLCAweDdENjksIDB4N0Q2RCwgMHg0MzE3LCAweDdENkUsIDB4N0Q2RSwgMHgwRkMwLAorICAgIDB4N0Q2RiwgMHg3RDcwLCAweDQzMUMsIDB4N0Q3MSwgMHg3RDcxLCAweDIxN0MsIDB4N0Q3MiwgMHg3RDcyLCAweDIxNEEsCisgICAgMHg3RDczLCAweDdENzMsIDB4MjQyRCwgMHg3RDc0LCAweDdENzUsIDB4NDMxRSwgMHg3RDc2LCAweDdENzYsIDB4MUZENCwKKyAgICAweDdENzcsIDB4N0Q3NywgMHgxQ0U4LCAweDdENzgsIDB4N0Q3OCwgMHg0MzIwLCAweDdENzksIDB4N0Q3OSwgMHgxRkQxLAorICAgIDB4N0Q3QSwgMHg3RDgwLCAweDQzMjEsIDB4N0Q4MSwgMHg3RDgxLCAweDFFMzMsIDB4N0Q4MiwgMHg3RDgyLCAweDQzMjgsCisgICAgMHg3RDgzLCAweDdEODMsIDB4MjQyRiwgMHg3RDg0LCAweDdEODUsIDB4NDMyOSwgMHg3RDg2LCAweDdEODYsIDB4MjQyRSwKKyAgICAweDdEODcsIDB4N0Q4NywgMHg0MzJCLCAweDdEODgsIDB4N0Q4OCwgMHgyNDMwLCAweDdEODksIDB4N0Q4OSwgMHgyMURCLAorICAgIDB4N0Q4QSwgMHg3RDhFLCAweDQzMkMsIDB4N0Q4RiwgMHg3RDhGLCAweDIxNTgsIDB4N0Q5MCwgMHg3RDkyLCAweDQzMzEsCisgICAgMHg3RDkzLCAweDdEOTMsIDB4MUZDMiwgMHg3RDk0LCAweDdEOUIsIDB4NDMzNCwgMHg3RDlDLCAweDdEOUMsIDB4MjJCOSwKKyAgICAweDdEOUQsIDB4N0Q5RCwgMHg0MzNDLCAweDdEOUUsIDB4N0Q5RSwgMHgyNDM2LCAweDdEOUYsIDB4N0RBMSwgMHg0MzNELAorICAgIDB4N0RBMiwgMHg3REEyLCAweDFFOEUsIDB4N0RBMywgMHg3REEzLCAweDI0MzksIDB4N0RBNCwgMHg3REE1LCAweDQzNDAsCisgICAgMHg3REE2LCAweDdEQTYsIDB4MUNFOSwgMHg3REE3LCAweDdEQUEsIDB4NDM0MiwgMHg3REFCLCAweDdEQUIsIDB4MjFDNSwKKyAgICAweDdEQUMsIDB4N0RBQywgMHgyNDM3LCAweDdEQUQsIDB4N0RBRCwgMHgyMTkyLCAweDdEQUUsIDB4N0RBRSwgMHgxQ0VBLAorICAgIDB4N0RBRiwgMHg3REFGLCAweDQzNDYsIDB4N0RCMCwgMHg3REIwLCAweDI0M0EsIDB4N0RCMSwgMHg3REIxLCAweDFGMTksCisgICAgMHg3REIyLCAweDdEQjIsIDB4MjE4QywgMHg3REIzLCAweDdEQjMsIDB4MUU0MCwgMHg3REI0LCAweDdEQjQsIDB4MjJCMywKKyAgICAweDdEQjUsIDB4N0RCNywgMHg0MzQ3LCAweDdEQjgsIDB4N0RCOCwgMHgyMDVGLCAweDdEQjksIDB4N0RCOSwgMHgyNDM4LAorICAgIDB4N0RCQSwgMHg3REJBLCAweDI0MzIsIDB4N0RCQiwgMHg3REJCLCAweDIyNzQsIDB4N0RCQywgMHg3REJDLCAweDQzNEEsCisgICAgMHg3REJELCAweDdEQkQsIDB4MUU5QywgMHg3REJFLCAweDdEQkUsIDB4MjQzMSwgMHg3REJGLCAweDdEQkYsIDB4MjA4NSwKKyAgICAweDdEQzAsIDB4N0RDMywgMHg0MzRCLCAweDdEQzQsIDB4N0RDNCwgMHgyNDM1LCAweDdEQzUsIDB4N0RDNiwgMHg0MzRGLAorICAgIDB4N0RDNywgMHg3REM3LCAweDI0M0IsIDB4N0RDOCwgMHg3REM5LCAweDQzNTEsIDB4N0RDQSwgMHg3RENBLCAweDFGQjcsCisgICAgMHg3RENCLCAweDdEQ0IsIDB4MjQzMywgMHg3RENDLCAweDdERDAsIDB4NDM1MywgMHg3REQxLCAweDdERDEsIDB4MjA1NCwKKyAgICAweDdERDIsIDB4N0REMiwgMHgyMURFLCAweDdERDMsIDB4N0REMywgMHg0MzU4LCAweDdERDQsIDB4N0RENCwgMHgyNDM0LAorICAgIDB4N0RENSwgMHg3REQ2LCAweDQzNTksIDB4N0RENywgMHg3REQ3LCAweDI0M0QsIDB4N0REOCwgMHg3REQ4LCAweDFGODksCisgICAgMHg3REQ5LCAweDdERDksIDB4MjQzQywgMHg3RERBLCAweDdEREMsIDB4NDM1QiwgMHg3RERELCAweDdEREQsIDB4MUY2RSwKKyAgICAweDdEREUsIDB4N0RERSwgMHgxRUQ4LCAweDdEREYsIDB4N0RERiwgMHg0MzVFLCAweDdERTAsIDB4N0RFMCwgMHgxRUJGLAorICAgIDB4N0RFMSwgMHg3REUxLCAweDI0NDUsIDB4N0RFMiwgMHg3REUyLCAweDQzNUYsIDB4N0RFMywgMHg3REUzLCAweDIyNDksCisgICAgMHg3REU0LCAweDdERTUsIDB4NDM2MCwgMHg3REU2LCAweDdERTYsIDB4MjQ0MSwgMHg3REU3LCAweDdERTcsIDB4NDM2MiwKKyAgICAweDdERTgsIDB4N0RFOCwgMHgxRTQ3LCAweDdERTksIDB4N0RFOSwgMHgxRjU2LCAweDdERUEsIDB4N0RFQiwgMHg0MzYzLAorICAgIDB4N0RFQywgMHg3REVDLCAweDIwODYsIDB4N0RFRCwgMHg3REVFLCAweDQzNjUsIDB4N0RFRiwgMHg3REVGLCAweDIxOTYsCisgICAgMHg3REYwLCAweDdERjAsIDB4NDM2NywgMHg3REYxLCAweDdERjEsIDB4MjQ0MywgMHg3REYyLCAweDdERjIsIDB4MjQzRiwKKyAgICAweDdERjMsIDB4N0RGMywgMHg0MzY4LCAweDdERjQsIDB4N0RGNCwgMHgyMDIzLCAweDdERjUsIDB4N0RGNSwgMHg0MzY5LAorICAgIDB4N0RGNiwgMHg3REY2LCAweDI0NDIsIDB4N0RGNywgMHg3REY4LCAweDQzNkEsIDB4N0RGOSwgMHg3REY5LCAweDI0M0UsCisgICAgMHg3REZBLCAweDdERkEsIDB4NDM2QywgMHg3REZCLCAweDdERkIsIDB4MjZBNiwgMHg3REZDLCAweDdERkYsIDB4NDM2RCwKKyAgICAweDdFMDAsIDB4N0UwNywgMHg0MzcxLCAweDdFMDgsIDB4N0UwOCwgMHgyMzRFLCAweDdFMDksIDB4N0UwOSwgMHgyNDQ2LAorICAgIDB4N0UwQSwgMHg3RTBBLCAweDI0NEIsIDB4N0UwQiwgMHg3RTBCLCAweDI0NDQsIDB4N0UwQywgMHg3RTBGLCAweDQzNzksCisgICAgMHg3RTEwLCAweDdFMTAsIDB4MjQyNywgMHg3RTExLCAweDdFMTEsIDB4MjQ0QywgMHg3RTEyLCAweDdFMUEsIDB4NDM3RCwKKyAgICAweDdFMUIsIDB4N0UxQiwgMHgxRjBGLCAweDdFMUMsIDB4N0UxQywgMHg0Mzg2LCAweDdFMUQsIDB4N0UxRCwgMHgyNDQ3LAorICAgIDB4N0UxRSwgMHg3RTFFLCAweDI0NDksIDB4N0UxRiwgMHg3RTFGLCAweDI0NDgsIDB4N0UyMCwgMHg3RTIyLCAweDQzODcsCisgICAgMHg3RTIzLCAweDdFMjMsIDB4MjFDMiwgMHg3RTI0LCAweDdFMjYsIDB4NDM4QSwgMHg3RTI3LCAweDdFMjcsIDB4MjE2RSwKKyAgICAweDdFMjgsIDB4N0UyQSwgMHg0MzhELCAweDdFMkIsIDB4N0UyQiwgMHgxRjAzLCAweDdFMkMsIDB4N0UyQywgMHg0MzkwLAorICAgIDB4N0UyRCwgMHg3RTJELCAweDI0NEEsIDB4N0UyRSwgMHg3RTJFLCAweDIxNUMsIDB4N0UyRiwgMHg3RTMwLCAweDQzOTEsCisgICAgMHg3RTMxLCAweDdFMzEsIDB4MjJCQiwgMHg3RTMyLCAweDdFMzIsIDB4MjQ1MCwgMHg3RTMzLCAweDdFMzMsIDB4NDM5MywKKyAgICAweDdFMzQsIDB4N0UzNCwgMHgyNjk0LCAweDdFMzUsIDB4N0UzNSwgMHgyNDRGLCAweDdFMzYsIDB4N0UzNiwgMHgyNUY2LAorICAgIDB4N0UzNywgMHg3RTM3LCAweDIwNTEsIDB4N0UzOCwgMHg3RTM4LCAweDQzOTQsIDB4N0UzOSwgMHg3RTM5LCAweDI0NEUsCisgICAgMHg3RTNBLCAweDdFM0EsIDB4NDM5NSwgMHg3RTNCLCAweDdFM0IsIDB4MURGQiwgMHg3RTNDLCAweDdFM0MsIDB4NDM5NiwKKyAgICAweDdFM0QsIDB4N0UzRCwgMHgyMkJBLCAweDdFM0UsIDB4N0UzRSwgMHgxRjZELCAweDdFM0YsIDB4N0U0MCwgMHg0Mzk3LAorICAgIDB4N0U0MSwgMHg3RTQxLCAweDA2NEUsIDB4N0U0MiwgMHg3RTQ0LCAweDQzOTksIDB4N0U0NSwgMHg3RTQ1LCAweDI0NTIsCisgICAgMHg3RTQ2LCAweDdFNDYsIDB4MjQ1MSwgMHg3RTQ3LCAweDdFNDcsIDB4MUNFQiwgMHg3RTQ4LCAweDdFNTEsIDB4NDM5QywKKyAgICAweDdFNTIsIDB4N0U1MiwgMHgyNDU1LCAweDdFNTMsIDB4N0U1MywgMHg0M0E2LCAweDdFNTQsIDB4N0U1NCwgMHgyMjg5LAorICAgIDB4N0U1NSwgMHg3RTU1LCAweDIxMTYsIDB4N0U1NiwgMHg3RTU5LCAweDQzQTcsIDB4N0U1QSwgMHg3RTVBLCAweDI0NTQsCisgICAgMHg3RTVCLCAweDdFNUQsIDB4NDNBQiwgMHg3RTVFLCAweDdFNUUsIDB4MjBGQiwgMHg3RTVGLCAweDdFNjEsIDB4NDNBRSwKKyAgICAweDdFNjIsIDB4N0U2MiwgMHgyNDQwLCAweDdFNjMsIDB4N0U2OCwgMHg0M0IxLCAweDdFNjksIDB4N0U2OSwgMHgyMTI2LAorICAgIDB4N0U2QSwgMHg3RTZBLCAweDFGNjEsIDB4N0U2QiwgMHg3RTZCLCAweDI2OUQsIDB4N0U2QywgMHg3RTZDLCAweDQzQjcsCisgICAgMHg3RTZELCAweDdFNkQsIDB4MUY4QSwgMHg3RTZFLCAweDdFNkUsIDB4MjQ1NiwgMHg3RTZGLCAweDdFNkYsIDB4MjQ1OSwKKyAgICAweDdFNzAsIDB4N0U3MCwgMHgyNDU4LCAweDdFNzEsIDB4N0U3MiwgMHg0M0I4LCAweDdFNzMsIDB4N0U3MywgMHgxRkFFLAorICAgIDB4N0U3NCwgMHg3RTc4LCAweDQzQkEsIDB4N0U3OSwgMHg3RTc5LCAweDIyMUEsIDB4N0U3QSwgMHg3RTdCLCAweDQzQkYsCisgICAgMHg3RTdDLCAweDdFN0MsIDB4MUY3QSwgMHg3RTdELCAweDdFN0QsIDB4MjQ0RCwgMHg3RTdFLCAweDdFN0UsIDB4MjQ1NywKKyAgICAweDdFN0YsIDB4N0U4MSwgMHg0M0MxLCAweDdFODIsIDB4N0U4MiwgMHgxMjQ4LCAweDdFODMsIDB4N0U4NywgMHg0M0M0LAorICAgIDB4N0U4OCwgMHg3RTg4LCAweDI0NTMsIDB4N0U4OSwgMHg3RTg5LCAweDQzQzksIDB4N0U4QSwgMHg3RThBLCAweDI0MjAsCisgICAgMHg3RThCLCAweDdFOEIsIDB4NDNDQSwgMHg3RThDLCAweDdFOEMsIDB4MjFERiwgMHg3RThELCAweDdFOEQsIDB4MjY4NSwKKyAgICAweDdFOEUsIDB4N0U4RSwgMHg0M0NCLCAweDdFOEYsIDB4N0U4RiwgMHgxRTZFLCAweDdFOTAsIDB4N0U5MiwgMHg0M0NDLAorICAgIDB4N0U5MywgMHg3RTkzLCAweDIyMjQsIDB4N0U5NCwgMHg3RTk0LCAweDI2NzAsIDB4N0U5NSwgMHg3RTk1LCAweDQzQ0YsCisgICAgMHg3RTk2LCAweDdFOTYsIDB4MjFCQSwgMHg3RTk3LCAweDdFOTcsIDB4NDNEMCwgMHg3RTk4LCAweDdFOTgsIDB4MjQ1QSwKKyAgICAweDdFOTksIDB4N0U5QSwgMHg0M0QxLCAweDdFOUIsIDB4N0U5QiwgMHgxQ0VDLCAweDdFOUMsIDB4N0U5QywgMHgxRkZGLAorICAgIDB4N0U5RCwgMHg3RTlFLCAweDQzRDMsIDB4N0U5RiwgMHg3RTlGLCAweDE3RDMsIDB4N0VBMCwgMHg3RUEwLCAweDA4RUYsCisgICAgMHg3RUExLCAweDdFQTEsIDB4MTdENCwgMHg3RUEyLCAweDdFQTIsIDB4MDdBMywgMHg3RUEzLCAweDdFQTMsIDB4MTdENSwKKyAgICAweDdFQTQsIDB4N0VBNCwgMHgwRjM4LCAweDdFQTUsIDB4N0VBNSwgMHgxN0Q2LCAweDdFQTYsIDB4N0VBNiwgMHgxMEZGLAorICAgIDB4N0VBNywgMHg3RUE3LCAweDA4MjksIDB4N0VBOCwgMHg3RUE5LCAweDE3RDcsIDB4N0VBQSwgMHg3RUFBLCAweDA4NDAsCisgICAgMHg3RUFCLCAweDdFQUIsIDB4MENBRCwgMHg3RUFDLCAweDdFQUMsIDB4MEVDMiwgMHg3RUFELCAweDdFQUQsIDB4MTdEOSwKKyAgICAweDdFQUUsIDB4N0VBRSwgMHg0M0Q1LCAweDdFQUYsIDB4N0VBRiwgMHgwNTQyLCAweDdFQjAsIDB4N0VCMCwgMHgxN0RBLAorICAgIDB4N0VCMSwgMHg3RUIxLCAweDBDRUQsIDB4N0VCMiwgMHg3RUIyLCAweDA2RDQsIDB4N0VCMywgMHg3RUIzLCAweDBCMkMsCisgICAgMHg3RUI0LCAweDdFQjQsIDB4NDNENiwgMHg3RUI1LCAweDdFQjUsIDB4MTIzQSwgMHg3RUI2LCAweDdFQjYsIDB4MEE4MSwKKyAgICAweDdFQjcsIDB4N0VCNywgMHgwNjc0LCAweDdFQjgsIDB4N0VCOCwgMHgxMUJDLCAweDdFQjksIDB4N0VCOSwgMHgwRUQ1LAorICAgIDB4N0VCQSwgMHg3RUJBLCAweDA2NjEsIDB4N0VCQiwgMHg3RUJDLCAweDQzRDcsIDB4N0VCRCwgMHg3RUJELCAweDBCNjcsCisgICAgMHg3RUJFLCAweDdFQkUsIDB4MTdEQiwgMHg3RUJGLCAweDdFQkYsIDB4MEY0QywgMHg3RUMwLCAweDdFQzIsIDB4MTdEQywKKyAgICAweDdFQzMsIDB4N0VDMywgMHgwQTAwLCAweDdFQzQsIDB4N0VDNCwgMHgxMjQ2LCAweDdFQzUsIDB4N0VDNSwgMHgwRDI5LAorICAgIDB4N0VDNiwgMHg3RUM2LCAweDBGMjUsIDB4N0VDNywgMHg3RUM3LCAweDExQUUsIDB4N0VDOCwgMHg3RUM4LCAweDExRDQsCisgICAgMHg3RUM5LCAweDdFQzksIDB4MTdERiwgMHg3RUNBLCAweDdFQ0EsIDB4MDNGOCwgMHg3RUNCLCAweDdFQ0MsIDB4MTdFMCwKKyAgICAweDdFQ0QsIDB4N0VDRCwgMHgwRDE1LCAweDdFQ0UsIDB4N0VDRSwgMHgxMDc2LCAweDdFQ0YsIDB4N0VDRiwgMHgwOERDLAorICAgIDB4N0VEMCwgMHg3RUQwLCAweDE3RTIsIDB4N0VEMSwgMHg3RUQxLCAweDAzRkUsIDB4N0VEMiwgMHg3RUQyLCAweDBDQjksCisgICAgMHg3RUQzLCAweDdFRDMsIDB4MDhCMiwgMHg3RUQ0LCAweDdFRDQsIDB4MTdFMywgMHg3RUQ1LCAweDdFRDUsIDB4MENBMSwKKyAgICAweDdFRDYsIDB4N0VENiwgMHg0M0Q5LCAweDdFRDcsIDB4N0VENywgMHgxN0U0LCAweDdFRDgsIDB4N0VEOCwgMHgwN0ZCLAorICAgIDB4N0VEOSwgMHg3RUQ5LCAweDA2RjMsIDB4N0VEQSwgMHg3RURBLCAweDBGQ0QsIDB4N0VEQiwgMHg3RURCLCAweDE3RTUsCisgICAgMHg3RURDLCAweDdFREMsIDB4MEE4RSwgMHg3RURELCAweDdFREQsIDB4MDkyNywgMHg3RURFLCAweDdFREUsIDB4MDg5QiwKKyAgICAweDdFREYsIDB4N0VERiwgMHgwRTY0LCAweDdFRTAsIDB4N0VFMSwgMHgxN0U2LCAweDdFRTIsIDB4N0VFMiwgMHgwOTFELAorICAgIDB4N0VFMywgMHg3RUUzLCAweDBGQjAsIDB4N0VFNCwgMHg3RUU0LCAweDQzREEsIDB4N0VFNSwgMHg3RUU1LCAweDBEREMsCisgICAgMHg3RUU2LCAweDdFRTYsIDB4MEUyMywgMHg3RUU3LCAweDdFRTcsIDB4MDgzRiwgMHg3RUU4LCAweDdFRTgsIDB4MTdFOCwKKyAgICAweDdFRTksIDB4N0VFOSwgMHgwODFCLCAweDdFRUEsIDB4N0VFQSwgMHgwRkMyLCAweDdFRUIsIDB4N0VFQiwgMHgxN0U5LAorICAgIDB4N0VFQywgMHg3RUVDLCAweDQzREIsIDB4N0VFRCwgMHg3RUVELCAweDBGQzMsIDB4N0VFRSwgMHg3RUVGLCAweDE3RUEsCisgICAgMHg3RUYwLCAweDdFRjAsIDB4MDU0NSwgMHg3RUYxLCAweDdFRjIsIDB4MTdFQywgMHg3RUYzLCAweDdFRjMsIDB4MEQzNywKKyAgICAweDdFRjQsIDB4N0VGNCwgMHgwRUJCLCAweDdFRjUsIDB4N0VGNSwgMHgwQUU1LCAweDdFRjYsIDB4N0VGNiwgMHgxN0VGLAorICAgIDB4N0VGNywgMHg3RUY3LCAweDA0MkEsIDB4N0VGOCwgMHg3RUY4LCAweDA1MTYsIDB4N0VGOSwgMHg3RUY5LCAweDQzREMsCisgICAgMHg3RUZBLCAweDdFRkIsIDB4MTdGMCwgMHg3RUZDLCAweDdFRkMsIDB4MTIzOCwgMHg3RUZELCAweDdFRkQsIDB4MTE2MSwKKyAgICAweDdFRkUsIDB4N0VGRSwgMHgxN0YyLCAweDdFRkYsIDB4N0VGRiwgMHgwQTczLCAweDdGMDAsIDB4N0YwMCwgMHgxMjE3LAorICAgIDB4N0YwMSwgMHg3RjAzLCAweDE3RjMsIDB4N0YwNCwgMHg3RjA0LCAweDA4NUQsIDB4N0YwNSwgMHg3RjA1LCAweDBBRUEsCisgICAgMHg3RjA2LCAweDdGMDYsIDB4MDlBRCwgMHg3RjA3LCAweDdGMDgsIDB4MTdGNiwgMHg3RjA5LCAweDdGMDksIDB4MDgxQywKKyAgICAweDdGMEEsIDB4N0YwQSwgMHg0M0RELCAweDdGMEIsIDB4N0YwQywgMHgxN0Y4LCAweDdGMEQsIDB4N0YwRCwgMHgxN0VFLAorICAgIDB4N0YwRSwgMHg3RjBFLCAweDA2MEYsIDB4N0YwRiwgMHg3RjBGLCAweDE3RkEsIDB4N0YxMCwgMHg3RjEwLCAweDQzREUsCisgICAgMHg3RjExLCAweDdGMTIsIDB4MTdGQiwgMHg3RjEzLCAweDdGMTMsIDB4MDdDRiwgMHg3RjE0LCAweDdGMTQsIDB4MDVCRiwKKyAgICAweDdGMTUsIDB4N0YxNSwgMHgwQTZELCAweDdGMTYsIDB4N0YxNiwgMHgwNDQ5LCAweDdGMTcsIDB4N0YxNywgMHgxN0ZELAorICAgIDB4N0YxOCwgMHg3RjE4LCAweDEwRjgsIDB4N0YxOSwgMHg3RjE5LCAweDE3RkUsIDB4N0YxQSwgMHg3RjFBLCAweDA2QkEsCisgICAgMHg3RjFCLCAweDdGMUIsIDB4MTgwMCwgMHg3RjFDLCAweDdGMUMsIDB4MTdGRiwgMHg3RjFELCAweDdGMUQsIDB4MDY4OSwKKyAgICAweDdGMUUsIDB4N0YxRSwgMHg0M0RGLCAweDdGMUYsIDB4N0YxRiwgMHgxODAxLCAweDdGMjAsIDB4N0YyMCwgMHgwNEJGLAorICAgIDB4N0YyMSwgMHg3RjI3LCAweDE4MDIsIDB4N0YyOCwgMHg3RjI4LCAweDEwOEMsIDB4N0YyOSwgMHg3RjI5LCAweDBERUEsCisgICAgMHg3RjJBLCAweDdGMkQsIDB4MTgwOSwgMHg3RjJFLCAweDdGMkUsIDB4MEQwMiwgMHg3RjJGLCAweDdGMzMsIDB4MTgwRCwKKyAgICAweDdGMzQsIDB4N0YzNCwgMHgwODlBLCAweDdGMzUsIDB4N0YzNSwgMHgxODEyLCAweDdGMzYsIDB4N0YzNiwgMHgxQzVFLAorICAgIDB4N0YzNywgMHg3RjM3LCAweDQzRTAsIDB4N0YzOCwgMHg3RjM4LCAweDA2RDIsIDB4N0YzOSwgMHg3RjM5LCAweDQzRTEsCisgICAgMHg3RjNBLCAweDdGM0EsIDB4MEM4QywgMHg3RjNCLCAweDdGNDEsIDB4NDNFMiwgMHg3RjQyLCAweDdGNDIsIDB4MUM1RiwKKyAgICAweDdGNDMsIDB4N0Y0MywgMHg0M0U5LCAweDdGNDQsIDB4N0Y0NSwgMHgxQzYwLCAweDdGNDYsIDB4N0Y0QiwgMHg0M0VBLAorICAgIDB4N0Y0QywgMHg3RjRDLCAweDI1RTIsIDB4N0Y0RCwgMHg3RjRELCAweDQzRjAsIDB4N0Y0RSwgMHg3RjRFLCAweDI2OUEsCisgICAgMHg3RjRGLCAweDdGNEYsIDB4NDNGMSwgMHg3RjUwLCAweDdGNTAsIDB4MDczNywgMHg3RjUxLCAweDdGNTEsIDB4MEVBOSwKKyAgICAweDdGNTIsIDB4N0Y1MywgMHg0M0YyLCAweDdGNTQsIDB4N0Y1NCwgMHgxMjlFLCAweDdGNTUsIDB4N0Y1NSwgMHgwNzY4LAorICAgIDB4N0Y1NiwgMHg3RjU2LCAweDQzRjQsIDB4N0Y1NywgMHg3RjU3LCAweDBBODUsIDB4N0Y1OCwgMHg3RjU4LCAweDFBODEsCisgICAgMHg3RjU5LCAweDdGNTksIDB4NDNGNSwgMHg3RjVBLCAweDdGNUEsIDB4MDY0MCwgMHg3RjVCLCAweDdGNUUsIDB4NDNGNiwKKyAgICAweDdGNUYsIDB4N0Y1RiwgMHgxQTgzLCAweDdGNjAsIDB4N0Y2MCwgMHg0M0ZBLCAweDdGNjEsIDB4N0Y2MSwgMHgxQTgyLAorICAgIDB4N0Y2MiwgMHg3RjYyLCAweDAzRTAsIDB4N0Y2MywgMHg3RjY3LCAweDQzRkIsIDB4N0Y2OCwgMHg3RjY4LCAweDFBODUsCisgICAgMHg3RjY5LCAweDdGNjksIDB4MTE3NywgMHg3RjZBLCAweDdGNkEsIDB4MTI0QywgMHg3RjZCLCAweDdGNkQsIDB4NDQwMCwKKyAgICAweDdGNkUsIDB4N0Y2RSwgMHgxMUMyLCAweDdGNkYsIDB4N0Y2RiwgMHg0NDAzLCAweDdGNzAsIDB4N0Y3MCwgMHgxRUVBLAorICAgIDB4N0Y3MSwgMHg3RjcxLCAweDFBODcsIDB4N0Y3MiwgMHg3RjcyLCAweDBEODcsIDB4N0Y3MywgMHg3RjczLCAweDQ0MDQsCisgICAgMHg3Rjc0LCAweDdGNzQsIDB4MUE4NiwgMHg3Rjc1LCAweDdGNzYsIDB4NDQwNSwgMHg3Rjc3LCAweDdGNzcsIDB4MUUyQywKKyAgICAweDdGNzgsIDB4N0Y3OCwgMHg0NDA3LCAweDdGNzksIDB4N0Y3OSwgMHgxQTg4LCAweDdGN0EsIDB4N0Y3RCwgMHg0NDA4LAorICAgIDB4N0Y3RSwgMHg3RjdFLCAweDFBOEEsIDB4N0Y3RiwgMHg3RjgwLCAweDQ0MEMsIDB4N0Y4MSwgMHg3RjgxLCAweDFBODksCisgICAgMHg3RjgyLCAweDdGODQsIDB4NDQwRSwgMHg3Rjg1LCAweDdGODUsIDB4MjA2MiwgMHg3Rjg2LCAweDdGODYsIDB4MjRGMSwKKyAgICAweDdGODcsIDB4N0Y4NywgMHg0NDExLCAweDdGODgsIDB4N0Y4OCwgMHgyNEYyLCAweDdGODksIDB4N0Y4OSwgMHg0NDEyLAorICAgIDB4N0Y4QSwgMHg3RjhBLCAweDEwMUIsIDB4N0Y4QiwgMHg3RjhCLCAweDQ0MTMsIDB4N0Y4QywgMHg3RjhDLCAweDBDMzksCisgICAgMHg3RjhELCAweDdGOEQsIDB4NDQxNCwgMHg3RjhFLCAweDdGOEUsIDB4MEFDNSwgMHg3RjhGLCAweDdGOTMsIDB4NDQxNSwKKyAgICAweDdGOTQsIDB4N0Y5NCwgMHgwNkRDLCAweDdGOTUsIDB4N0Y5OSwgMHg0NDFBLCAweDdGOUEsIDB4N0Y5QSwgMHgwQTMwLAorICAgIDB4N0Y5QiwgMHg3RjlDLCAweDQ0MUYsIDB4N0Y5RCwgMHg3RjlELCAweDFDQzQsIDB4N0Y5RSwgMHg3RjlFLCAweDBGQUEsCisgICAgMHg3RjlGLCAweDdGOUYsIDB4MUNDNSwgMHg3RkEwLCAweDdGQTAsIDB4NDQyMSwgMHg3RkExLCAweDdGQTEsIDB4MEY0OCwKKyAgICAweDdGQTIsIDB4N0ZBMywgMHg0NDIyLCAweDdGQTQsIDB4N0ZBNCwgMHgwQzk1LCAweDdGQTUsIDB4N0ZBNSwgMHgyNUYyLAorICAgIDB4N0ZBNiwgMHg3RkE2LCAweDQ0MjQsIDB4N0ZBNywgMHg3RkE3LCAweDFDQzYsIDB4N0ZBOCwgMHg3RkE4LCAweDQ0MjUsCisgICAgMHg3RkE5LCAweDdGQTksIDB4MjIxNSwgMHg3RkFBLCAweDdGQUUsIDB4NDQyNiwgMHg3RkFGLCAweDdGQjAsIDB4MUNDNywKKyAgICAweDdGQjEsIDB4N0ZCMSwgMHg0NDJCLCAweDdGQjIsIDB4N0ZCMiwgMHgxQ0M5LCAweDdGQjMsIDB4N0ZCNywgMHg0NDJDLAorICAgIDB4N0ZCOCwgMHg3RkI4LCAweDEzMEUsIDB4N0ZCOSwgMHg3RkI5LCAweDA2RjksIDB4N0ZCQSwgMHg3RkJCLCAweDQ0MzEsCisgICAgMHg3RkJDLCAweDdGQkMsIDB4MTc2RCwgMHg3RkJELCAweDdGQkQsIDB4MTBENSwgMHg3RkJFLCAweDdGQkUsIDB4NDQzMywKKyAgICAweDdGQkYsIDB4N0ZCRiwgMHgxQ0RFLCAweDdGQzAsIDB4N0ZDMCwgMHg0NDM0LCAweDdGQzEsIDB4N0ZDMSwgMHgwRURCLAorICAgIDB4N0ZDMiwgMHg3RkM0LCAweDQ0MzUsIDB4N0ZDNSwgMHg3RkM1LCAweDA1MDYsIDB4N0ZDNiwgMHg3RkM5LCAweDQ0MzgsCisgICAgMHg3RkNBLCAweDdGQ0EsIDB4MUI5OCwgMHg3RkNCLCAweDdGQ0IsIDB4NDQzQywgMHg3RkNDLCAweDdGQ0MsIDB4MTA3NSwKKyAgICAweDdGQ0QsIDB4N0ZDRCwgMHg0NDNELCAweDdGQ0UsIDB4N0ZDRSwgMHgxQ0RGLCAweDdGQ0YsIDB4N0ZEMSwgMHg0NDNFLAorICAgIDB4N0ZEMiwgMHg3RkQyLCAweDIxQUUsIDB4N0ZEMywgMHg3RkQzLCAweDQ0NDEsIDB4N0ZENCwgMHg3RkQ0LCAweDBGNTUsCisgICAgMHg3RkQ1LCAweDdGRDUsIDB4MUNFMCwgMHg3RkQ2LCAweDdGRDcsIDB4NDQ0MiwgMHg3RkQ4LCAweDdGRDgsIDB4MEM0OSwKKyAgICAweDdGRDksIDB4N0ZERSwgMHg0NDQ0LCAweDdGREYsIDB4N0ZERiwgMHgwNUI1LCAweDdGRTAsIDB4N0ZFMCwgMHgwNTY3LAorICAgIDB4N0ZFMSwgMHg3RkUxLCAweDFDRTIsIDB4N0ZFMiwgMHg3RkU0LCAweDQ0NEEsIDB4N0ZFNSwgMHg3RkU1LCAweDFDRTEsCisgICAgMHg3RkU2LCAweDdGRTYsIDB4MUNFMywgMHg3RkU3LCAweDdGRTgsIDB4NDQ0RCwgMHg3RkU5LCAweDdGRTksIDB4MUNFNCwKKyAgICAweDdGRUEsIDB4N0ZFRCwgMHg0NDRGLCAweDdGRUUsIDB4N0ZFRSwgMHgxQ0U1LCAweDdGRUYsIDB4N0ZFRiwgMHg0NDUzLAorICAgIDB4N0ZGMCwgMHg3RkYwLCAweDA3NjksIDB4N0ZGMSwgMHg3RkYxLCAweDAzQ0EsIDB4N0ZGMiwgMHg3RkYyLCAweDQ0NTQsCisgICAgMHg3RkYzLCAweDdGRjMsIDB4MUNFNiwgMHg3RkY0LCAweDdGRjgsIDB4NDQ1NSwgMHg3RkY5LCAweDdGRjksIDB4MjBFMCwKKyAgICAweDdGRkEsIDB4N0ZGQSwgMHg0NDVBLCAweDdGRkIsIDB4N0ZGQiwgMHgwNjRBLCAweDdGRkMsIDB4N0ZGQywgMHgxMDc0LAorICAgIDB4N0ZGRCwgMHg3RkZGLCAweDQ0NUIsIDB4ODAwMCwgMHg4MDAwLCAweDEwMzIsIDB4ODAwMSwgMHg4MDAxLCAweDA5QkEsCisgICAgMHg4MDAyLCAweDgwMDIsIDB4NDQ1RSwgMHg4MDAzLCAweDgwMDMsIDB4MDk0OSwgMHg4MDA0LCAweDgwMDQsIDB4MTk1MywKKyAgICAweDgwMDUsIDB4ODAwNSwgMHgxMTgwLCAweDgwMDYsIDB4ODAwNiwgMHgxOTFBLCAweDgwMDcsIDB4ODAwQSwgMHg0NDVGLAorICAgIDB4ODAwQiwgMHg4MDBCLCAweDFCRDcsIDB4ODAwQywgMHg4MDBDLCAweDA2MzcsIDB4ODAwRCwgMHg4MDBELCAweDBEOTgsCisgICAgMHg4MDBFLCAweDgwMEYsIDB4NDQ2MywgMHg4MDEwLCAweDgwMTAsIDB4MEIzMCwgMHg4MDExLCAweDgwMTEsIDB4NDQ2NSwKKyAgICAweDgwMTIsIDB4ODAxMiwgMHgxQkNCLCAweDgwMTMsIDB4ODAxMywgMHg0NDY2LCAweDgwMTQsIDB4ODAxNCwgMHgxQkNDLAorICAgIDB4ODAxNSwgMHg4MDE1LCAweDA2RjYsIDB4ODAxNiwgMHg4MDE2LCAweDFCQ0QsIDB4ODAxNywgMHg4MDE3LCAweDA3N0IsCisgICAgMHg4MDE4LCAweDgwMTgsIDB4MTEwOCwgMHg4MDE5LCAweDgwMTksIDB4MDNERCwgMHg4MDFBLCAweDgwMUIsIDB4NDQ2NywKKyAgICAweDgwMUMsIDB4ODAxQywgMHgxQkNFLCAweDgwMUQsIDB4ODAxRiwgMHg0NDY5LCAweDgwMjAsIDB4ODAyMCwgMHgxQkNGLAorICAgIDB4ODAyMSwgMHg4MDIxLCAweDQ0NkMsIDB4ODAyMiwgMHg4MDIyLCAweDFCRDAsIDB4ODAyMywgMHg4MDI0LCAweDQ0NkQsCisgICAgMHg4MDI1LCAweDgwMjcsIDB4MUJEMSwgMHg4MDI4LCAweDgwMjgsIDB4MUJENSwgMHg4MDI5LCAweDgwMjksIDB4MUJENCwKKyAgICAweDgwMkEsIDB4ODAyQSwgMHgwQjk2LCAweDgwMkIsIDB4ODAyQiwgMHg0NDZGLCAweDgwMkMsIDB4ODAyQywgMHgyNUMyLAorICAgIDB4ODAyRCwgMHg4MDJELCAweDQ0NzAsIDB4ODAyRSwgMHg4MDJFLCAweDI1QzEsIDB4ODAyRiwgMHg4MDMwLCAweDQ0NzEsCisgICAgMHg4MDMxLCAweDgwMzEsIDB4MUJENiwgMHg4MDMyLCAweDgwMzIsIDB4NDQ3MywgMHg4MDMzLCAweDgwMzMsIDB4MDYzOSwKKyAgICAweDgwMzQsIDB4ODAzNCwgMHg0NDc0LCAweDgwMzUsIDB4ODAzNSwgMHgxQkQ4LCAweDgwMzYsIDB4ODAzNiwgMHgxMDM1LAorICAgIDB4ODAzNywgMHg4MDM3LCAweDE0QjEsIDB4ODAzOCwgMHg4MDM4LCAweDBEQkYsIDB4ODAzOSwgMHg4MDNBLCAweDQ0NzUsCisgICAgMHg4MDNCLCAweDgwM0IsIDB4MDUwMSwgMHg4MDNDLCAweDgwM0MsIDB4NDQ3NywgMHg4MDNELCAweDgwM0QsIDB4MDU4MywKKyAgICAweDgwM0UsIDB4ODAzRSwgMHg0NDc4LCAweDgwM0YsIDB4ODAzRiwgMHgwNkZCLCAweDgwNDAsIDB4ODA0MSwgMHg0NDc5LAorICAgIDB4ODA0MiwgMHg4MDQyLCAweDBCNTcsIDB4ODA0MywgMHg4MDQzLCAweDFCRDksIDB4ODA0NCwgMHg4MDQ1LCAweDQ0N0IsCisgICAgMHg4MDQ2LCAweDgwNDYsIDB4MUJEQSwgMHg4MDQ3LCAweDgwNDksIDB4NDQ3RCwgMHg4MDRBLCAweDgwNEEsIDB4MEEwRCwKKyAgICAweDgwNEIsIDB4ODA0QiwgMHgwQTQ0LCAweDgwNEMsIDB4ODA0QywgMHgxMUFGLCAweDgwNEQsIDB4ODA0RCwgMHgxQkRCLAorICAgIDB4ODA0RSwgMHg4MDUxLCAweDQ0ODAsIDB4ODA1MiwgMHg4MDUyLCAweDFCREMsIDB4ODA1MywgMHg4MDUzLCAweDQ0ODQsCisgICAgMHg4MDU0LCAweDgwNTQsIDB4MDlGMywgMHg4MDU1LCAweDgwNTUsIDB4NDQ4NSwgMHg4MDU2LCAweDgwNTYsIDB4MjEyOCwKKyAgICAweDgwNTcsIDB4ODA1NywgMHg0NDg2LCAweDgwNTgsIDB4ODA1OCwgMHgwQkQ3LCAweDgwNTksIDB4ODA1OSwgMHg0NDg3LAorICAgIDB4ODA1QSwgMHg4MDVBLCAweDA5MEEsIDB4ODA1QiwgMHg4MDVELCAweDQ0ODgsIDB4ODA1RSwgMHg4MDVFLCAweDIxOTksCisgICAgMHg4MDVGLCAweDgwNjgsIDB4NDQ4QiwgMHg4MDY5LCAweDgwNjksIDB4MUJERCwgMHg4MDZBLCAweDgwNkEsIDB4MDU1MiwKKyAgICAweDgwNkIsIDB4ODA2RSwgMHg0NDk1LCAweDgwNkYsIDB4ODA2RiwgMHgyMDE3LCAweDgwNzAsIDB4ODA3MCwgMHgxRUEwLAorICAgIDB4ODA3MSwgMHg4MDcxLCAweDFCREUsIDB4ODA3MiwgMHg4MDcyLCAweDIxMjUsIDB4ODA3MywgMHg4MDczLCAweDIxNEQsCisgICAgMHg4MDc0LCAweDgwNzQsIDB4NDQ5OSwgMHg4MDc1LCAweDgwNzUsIDB4MjVDNCwgMHg4MDc2LCAweDgwNzYsIDB4MjA5RCwKKyAgICAweDgwNzcsIDB4ODA3NywgMHgyMjhBLCAweDgwNzgsIDB4ODA3OCwgMHg0NDlBLCAweDgwNzksIDB4ODA3OSwgMHgyNUMzLAorICAgIDB4ODA3QSwgMHg4MDdDLCAweDQ0OUIsIDB4ODA3RCwgMHg4MDdELCAweDIxNzksIDB4ODA3RSwgMHg4MDdFLCAweDIwMzgsCisgICAgMHg4MDdGLCAweDgwN0YsIDB4MUExRSwgMHg4MDgwLCAweDgwODAsIDB4MUExRCwgMHg4MDgxLCAweDgwODIsIDB4NDQ5RSwKKyAgICAweDgwODMsIDB4ODA4MywgMHgwREQ1LCAweDgwODQsIDB4ODA4NCwgMHgxMDY1LCAweDgwODUsIDB4ODA4NSwgMHgyMTU1LAorICAgIDB4ODA4NiwgMHg4MDg2LCAweDBEQjYsIDB4ODA4NywgMHg4MDg3LCAweDExNzksIDB4ODA4OCwgMHg4MDg4LCAweDQ0QTAsCisgICAgMHg4MDg5LCAweDgwODksIDB4MENCRCwgMHg4MDhBLCAweDgwOEEsIDB4NDRBMSwgMHg4MDhCLCAweDgwOEIsIDB4MDlDQSwKKyAgICAweDgwOEMsIDB4ODA4QywgMHgwODE0LCAweDgwOEQsIDB4ODA5MiwgMHg0NEEyLCAweDgwOTMsIDB4ODA5MywgMHgxOTcxLAorICAgIDB4ODA5NCwgMHg4MDk1LCAweDQ0QTgsIDB4ODA5NiwgMHg4MDk2LCAweDBGNkYsIDB4ODA5NywgMHg4MDk3LCAweDQ0QUEsCisgICAgMHg4MDk4LCAweDgwOTgsIDB4MTFFMSwgMHg4MDk5LCAweDgwOTksIDB4NDRBQiwgMHg4MDlBLCAweDgwOUEsIDB4MDYwNiwKKyAgICAweDgwOUIsIDB4ODA5QiwgMHgwNkQzLCAweDgwOUMsIDB4ODA5QywgMHgxOTcwLCAweDgwOUQsIDB4ODA5RCwgMHgwNkM5LAorICAgIDB4ODA5RSwgMHg4MDlFLCAweDQ0QUMsIDB4ODA5RiwgMHg4MDlGLCAweDE5NkYsIDB4ODBBMCwgMHg4MEEwLCAweDA0Q0IsCisgICAgMHg4MEExLCAweDgwQTEsIDB4MDcyMiwgMHg4MEEyLCAweDgwQTIsIDB4MTFBQSwgMHg4MEEzLCAweDgwQTMsIDB4NDRBRCwKKyAgICAweDgwQTQsIDB4ODBBNCwgMHgwNjkxLCAweDgwQTUsIDB4ODBBNSwgMHgwNjY3LCAweDgwQTYsIDB4ODBBOCwgMHg0NEFFLAorICAgIDB4ODBBOSwgMHg4MEE5LCAweDA4NUEsIDB4ODBBQSwgMHg4MEFBLCAweDA2NUIsIDB4ODBBQiwgMHg4MEFCLCAweDE5NzYsCisgICAgMHg4MEFDLCAweDgwQUMsIDB4NDRCMSwgMHg4MEFELCAweDgwQUQsIDB4MTk3NywgMHg4MEFFLCAweDgwQUUsIDB4MDNDNCwKKyAgICAweDgwQUYsIDB4ODBBRiwgMHgwOTVDLCAweDgwQjAsIDB4ODBCMCwgMHg0NEIyLCAweDgwQjEsIDB4ODBCMSwgMHgxOTc1LAorICAgIDB4ODBCMiwgMHg4MEIyLCAweDEwRTIsIDB4ODBCMywgMHg4MEIzLCAweDQ0QjMsIDB4ODBCNCwgMHg4MEI0LCAweDE5NzgsCisgICAgMHg4MEI1LCAweDgwQjYsIDB4NDRCNCwgMHg4MEI3LCAweDgwQjcsIDB4MTk3OSwgMHg4MEI4LCAweDgwQjksIDB4NDRCNiwKKyAgICAweDgwQkEsIDB4ODBCQSwgMHgwNjZCLCAweDgwQkIsIDB4ODBCQiwgMHg0NEI4LCAweDgwQkMsIDB4ODBCQywgMHgxOTcyLAorICAgIDB4ODBCRCwgMHg4MEJELCAweDE5NzQsIDB4ODBCRSwgMHg4MEJFLCAweDBEMkYsIDB4ODBCRiwgMHg4MEJGLCAweDExRDYsCisgICAgMHg4MEMwLCAweDgwQzAsIDB4MTE2RSwgMHg4MEMxLCAweDgwQzEsIDB4MEY3RCwgMHg4MEMyLCAweDgwQzIsIDB4MTk3RiwKKyAgICAweDgwQzMsIDB4ODBDMywgMHgwRUM3LCAweDgwQzQsIDB4ODBDNCwgMHgxOTgwLCAweDgwQzUsIDB4ODBDNSwgMHg0NEI5LAorICAgIDB4ODBDNiwgMHg4MEM2LCAweDA1ODksIDB4ODBDNywgMHg4MENCLCAweDQ0QkEsIDB4ODBDQywgMHg4MENDLCAweDA0MUMsCisgICAgMHg4MENELCAweDgwQ0QsIDB4MTk4MiwgMHg4MENFLCAweDgwQ0UsIDB4MERGOCwgMHg4MENGLCAweDgwRDUsIDB4NDRCRiwKKyAgICAweDgwRDYsIDB4ODBENiwgMHgwQjk3LCAweDgwRDcsIDB4ODBENywgMHgxOTgzLCAweDgwRDgsIDB4ODBEOCwgMHg0NEM2LAorICAgIDB4ODBEOSwgMHg4MEQ5LCAweDE5ODEsIDB4ODBEQSwgMHg4MERBLCAweDBCQTAsIDB4ODBEQiwgMHg4MERCLCAweDE5N0UsCisgICAgMHg4MERDLCAweDgwREMsIDB4MEQzQiwgMHg4MERELCAweDgwREQsIDB4MTk4NSwgMHg4MERFLCAweDgwREUsIDB4MDQwNiwKKyAgICAweDgwREYsIDB4ODBFMCwgMHg0NEM3LCAweDgwRTEsIDB4ODBFMSwgMHgwN0IxLCAweDgwRTIsIDB4ODBFMywgMHg0NEM5LAorICAgIDB4ODBFNCwgMHg4MEU0LCAweDEyNkQsIDB4ODBFNSwgMHg4MEU1LCAweDFCQzcsIDB4ODBFNiwgMHg4MEU2LCAweDQ0Q0IsCisgICAgMHg4MEU3LCAweDgwRUEsIDB4MTk3QSwgMHg4MEVCLCAweDgwRUIsIDB4MTk4NiwgMHg4MEVDLCAweDgwRUMsIDB4MTc5QSwKKyAgICAweDgwRUQsIDB4ODBFRCwgMHgxOTg5LCAweDgwRUUsIDB4ODBFRSwgMHg0NENDLCAweDgwRUYsIDB4ODBFRiwgMHgwOTc1LAorICAgIDB4ODBGMCwgMHg4MEYwLCAweDEwNEYsIDB4ODBGMSwgMHg4MEYxLCAweDE5ODcsIDB4ODBGMiwgMHg4MEYyLCAweDE5OEMsCisgICAgMHg4MEYzLCAweDgwRjMsIDB4MDZFNywgMHg4MEY0LCAweDgwRjQsIDB4MTk4OCwgMHg4MEY1LCAweDgwRjUsIDB4NDRDRCwKKyAgICAweDgwRjYsIDB4ODBGNiwgMHgwODhCLCAweDgwRjcsIDB4ODBGNywgMHg0NENFLCAweDgwRjgsIDB4ODBGOCwgMHgwRkEzLAorICAgIDB4ODBGOSwgMHg4MEY5LCAweDQ0Q0YsIDB4ODBGQSwgMHg4MEZBLCAweDAzQzIsIDB4ODBGQiwgMHg4MEZCLCAweDQ0RDAsCisgICAgMHg4MEZDLCAweDgwRkMsIDB4MTk4RCwgMHg4MEZELCAweDgwRkQsIDB4MEIzRiwgMHg4MEZFLCAweDgwRkYsIDB4NDREMSwKKyAgICAweDgxMDAsIDB4ODEwMSwgMHg0NEQzLCAweDgxMDIsIDB4ODEwMiwgMHgxMUFCLCAweDgxMDMsIDB4ODEwNCwgMHg0NEQ1LAorICAgIDB4ODEwNSwgMHg4MTA1LCAweDIxRDIsIDB4ODEwNiwgMHg4MTA2LCAweDA1NjMsIDB4ODEwNywgMHg4MTA4LCAweDQ0RDcsCisgICAgMHg4MTA5LCAweDgxMDksIDB4MEE5RCwgMHg4MTBBLCAweDgxMEEsIDB4MDgyQywgMHg4MTBCLCAweDgxMEMsIDB4NDREOSwKKyAgICAweDgxMEQsIDB4ODEwRSwgMHgxOThBLCAweDgxMEYsIDB4ODEwRiwgMHgxMTIzLCAweDgxMTAsIDB4ODExMCwgMHgwQzA5LAorICAgIDB4ODExMSwgMHg4MTExLCAweDBCMzcsIDB4ODExMiwgMHg4MTEyLCAweDE5OEYsIDB4ODExMywgMHg4MTEzLCAweDBCNjgsCisgICAgMHg4MTE0LCAweDgxMTQsIDB4MTMwOSwgMHg4MTE1LCAweDgxMTUsIDB4NDREQiwgMHg4MTE2LCAweDgxMTYsIDB4MDQ3OCwKKyAgICAweDgxMTcsIDB4ODExNywgMHg0NERDLCAweDgxMTgsIDB4ODExOCwgMHgxOTk0LCAweDgxMTksIDB4ODExOSwgMHg0NERELAorICAgIDB4ODExQSwgMHg4MTFBLCAweDA4OTYsIDB4ODExQiwgMHg4MTFCLCAweDI0QzcsIDB4ODExQywgMHg4MTFELCAweDQ0REUsCisgICAgMHg4MTFFLCAweDgxMUUsIDB4MTk5MiwgMHg4MTFGLCAweDgxMkIsIDB4NDRFMCwgMHg4MTJDLCAweDgxMkMsIDB4MTk5MywKKyAgICAweDgxMkQsIDB4ODEyRSwgMHg0NEVELCAweDgxMkYsIDB4ODEyRiwgMHgwNkE3LCAweDgxMzAsIDB4ODEzMCwgMHg0NEVGLAorICAgIDB4ODEzMSwgMHg4MTMxLCAweDBFODIsIDB4ODEzMiwgMHg4MTMyLCAweDE5OTUsIDB4ODEzMywgMHg4MTM1LCAweDQ0RjAsCisgICAgMHg4MTM2LCAweDgxMzYsIDB4MTk5MSwgMHg4MTM3LCAweDgxMzcsIDB4NDRGMywgMHg4MTM4LCAweDgxMzgsIDB4MDlGQywKKyAgICAweDgxMzksIDB4ODEzOSwgMHgyMjc5LCAweDgxM0EsIDB4ODEzRCwgMHg0NEY0LCAweDgxM0UsIDB4ODEzRSwgMHgwQkMxLAorICAgIDB4ODEzRiwgMHg4MTQ1LCAweDQ0RjgsIDB4ODE0NiwgMHg4MTQ2LCAweDBFNDYsIDB4ODE0NywgMHg4MTQ3LCAweDQ0RkYsCisgICAgMHg4MTQ4LCAweDgxNDgsIDB4MTk5NiwgMHg4MTQ5LCAweDgxNDksIDB4NDUwMCwgMHg4MTRBLCAweDgxNEEsIDB4MDk5QiwKKyAgICAweDgxNEIsIDB4ODE0QiwgMHgxMDNGLCAweDgxNEMsIDB4ODE0QywgMHgxOTk3LCAweDgxNEQsIDB4ODE0RCwgMHg0NTAxLAorICAgIDB4ODE0RSwgMHg4MTRFLCAweDIxMjMsIDB4ODE0RiwgMHg4MTRGLCAweDQ1MDIsIDB4ODE1MCwgMHg4MTUwLCAweDA2QUEsCisgICAgMHg4MTUxLCAweDgxNTEsIDB4MDZBOCwgMHg4MTUyLCAweDgxNTIsIDB4NDUwMywgMHg4MTUzLCAweDgxNTMsIDB4MTk5OCwKKyAgICAweDgxNTQsIDB4ODE1NCwgMHgwQzM4LCAweDgxNTUsIDB4ODE1NSwgMHgwRUE0LCAweDgxNTYsIDB4ODE1NiwgMHgyNEM1LAorICAgIDB4ODE1NywgMHg4MTU4LCAweDQ1MDQsIDB4ODE1OSwgMHg4MTVBLCAweDE5OUEsIDB4ODE1QiwgMHg4MTVGLCAweDQ1MDYsCisgICAgMHg4MTYwLCAweDgxNjAsIDB4MTk5RCwgMHg4MTYxLCAweDgxNjEsIDB4MjRDOSwgMHg4MTYyLCAweDgxNjQsIDB4NDUwQiwKKyAgICAweDgxNjUsIDB4ODE2NSwgMHgwRjkzLCAweDgxNjYsIDB4ODE2NiwgMHgyMDk0LCAweDgxNjcsIDB4ODE2NywgMHgxOUEyLAorICAgIDB4ODE2OCwgMHg4MTY4LCAweDQ1MEUsIDB4ODE2OSwgMHg4MTY5LCAweDE5OUUsIDB4ODE2QSwgMHg4MTZBLCAweDQ1MEYsCisgICAgMHg4MTZCLCAweDgxNkIsIDB4MjI5NiwgMHg4MTZDLCAweDgxNkMsIDB4NDUxMCwgMHg4MTZELCAweDgxNkQsIDB4MTlBMSwKKyAgICAweDgxNkUsIDB4ODE2RSwgMHgwQ0Q0LCAweDgxNkYsIDB4ODE2RiwgMHg0NTExLCAweDgxNzAsIDB4ODE3MCwgMHgxMDI1LAorICAgIDB4ODE3MSwgMHg4MTcxLCAweDE5OUMsIDB4ODE3MiwgMHg4MTczLCAweDQ1MTIsIDB4ODE3NCwgMHg4MTc0LCAweDE5OTksCisgICAgMHg4MTc1LCAweDgxNzcsIDB4NDUxNCwgMHg4MTc4LCAweDgxNzgsIDB4MUU3NywgMHg4MTc5LCAweDgxNzksIDB4MDZCNCwKKyAgICAweDgxN0EsIDB4ODE3QSwgMHgwRjQ2LCAweDgxN0IsIDB4ODE3QiwgMHgwQjQ4LCAweDgxN0MsIDB4ODE3RCwgMHgxOTlGLAorICAgIDB4ODE3RSwgMHg4MTdFLCAweDBFMkQsIDB4ODE3RiwgMHg4MTdGLCAweDBFNzksIDB4ODE4MCwgMHg4MTgwLCAweDAzRkQsCisgICAgMHg4MTgxLCAweDgxODEsIDB4NDUxNywgMHg4MTgyLCAweDgxODIsIDB4MTlBNiwgMHg4MTgzLCAweDgxODcsIDB4NDUxOCwKKyAgICAweDgxODgsIDB4ODE4OCwgMHgxOUE1LCAweDgxODksIDB4ODE4OSwgMHg0NTFELCAweDgxOEEsIDB4ODE4QSwgMHgwNDc5LAorICAgIDB4ODE4QiwgMHg4MThFLCAweDQ1MUUsIDB4ODE4RiwgMHg4MThGLCAweDA2REIsIDB4ODE5MCwgMHg4MTkwLCAweDQ1MjIsCisgICAgMHg4MTkxLCAweDgxOTEsIDB4MTlBNywgMHg4MTkyLCAweDgxOTcsIDB4NDUyMywgMHg4MTk4LCAweDgxOTgsIDB4MDQ1NSwKKyAgICAweDgxOTksIDB4ODE5OSwgMHg0NTI5LCAweDgxOUEsIDB4ODE5QSwgMHgxRjA2LCAweDgxOUIsIDB4ODE5QiwgMHgwRTE4LAorICAgIDB4ODE5QywgMHg4MTlDLCAweDBCMDcsIDB4ODE5RCwgMHg4MTlELCAweDBGMTIsIDB4ODE5RSwgMHg4MTlGLCAweDQ1MkEsCisgICAgMHg4MUEwLCAweDgxQTAsIDB4MUZBNSwgMHg4MUExLCAweDgxQTIsIDB4NDUyQywgMHg4MUEzLCAweDgxQTMsIDB4MTlBOSwKKyAgICAweDgxQTQsIDB4ODFBNSwgMHg0NTJFLCAweDgxQTYsIDB4ODFBNiwgMHgxOUIwLCAweDgxQTcsIDB4ODFBNywgMHg0NTMwLAorICAgIDB4ODFBOCwgMHg4MUE4LCAweDBCQjMsIDB4ODFBOSwgMHg4MUE5LCAweDIwOTksIDB4ODFBQSwgMHg4MUFBLCAweDE5QUEsCisgICAgMHg4MUFCLCAweDgxQjIsIDB4NDUzMSwgMHg4MUIzLCAweDgxQjMsIDB4MENGRSwgMHg4MUI0LCAweDgxQjksIDB4NDUzOSwKKyAgICAweDgxQkEsIDB4ODFCQSwgMHgxNjQxLCAweDgxQkIsIDB4ODFCQiwgMHgxOUFFLCAweDgxQkMsIDB4ODFCQywgMHg0NTNGLAorICAgIDB4ODFCRCwgMHg4MUJELCAweDFFQUQsIDB4ODFCRSwgMHg4MUJFLCAweDI0QzgsIDB4ODFCRiwgMHg4MUJGLCAweDIwQTgsCisgICAgMHg4MUMwLCAweDgxQzAsIDB4MEU3RiwgMHg4MUMxLCAweDgxQzEsIDB4MTlBRiwgMHg4MUMyLCAweDgxQzIsIDB4MDQ0NCwKKyAgICAweDgxQzMsIDB4ODFDMywgMHgxMDlDLCAweDgxQzQsIDB4ODFDNSwgMHg0NTQwLCAweDgxQzYsIDB4ODFDNiwgMHgxMDYzLAorICAgIDB4ODFDNywgMHg4MUM4LCAweDQ1NDIsIDB4ODFDOSwgMHg4MUM5LCAweDIwMUYsIDB4ODFDQSwgMHg4MUNBLCAweDE5QUQsCisgICAgMHg4MUNCLCAweDgxQ0IsIDB4NDU0NCwgMHg4MUNDLCAweDgxQ0MsIDB4MTlBQiwgMHg4MUNELCAweDgxQ0QsIDB4MjBDNSwKKyAgICAweDgxQ0UsIDB4ODFDRSwgMHg0NTQ1LCAweDgxQ0YsIDB4ODFDRiwgMHgyNENBLCAweDgxRDAsIDB4ODFENywgMHg0NTQ2LAorICAgIDB4ODFEOCwgMHg4MUQ4LCAweDFGRjAsIDB4ODFEOSwgMHg4MUQ5LCAweDQ1NEUsIDB4ODFEQSwgMHg4MURBLCAweDI0QzYsCisgICAgMHg4MURCLCAweDgxREUsIDB4NDU0RiwgMHg4MURGLCAweDgxREYsIDB4MjI1RCwgMHg4MUUwLCAweDgxRTAsIDB4MjJERSwKKyAgICAweDgxRTEsIDB4ODFFMiwgMHg0NTUzLCAweDgxRTMsIDB4ODFFMywgMHgwNEUxLCAweDgxRTQsIDB4ODFFNiwgMHg0NTU1LAorICAgIDB4ODFFNywgMHg4MUU3LCAweDE5MDIsIDB4ODFFOCwgMHg4MUU4LCAweDIwMkMsIDB4ODFFOSwgMHg4MUU5LCAweDQ1NTgsCisgICAgMHg4MUVBLCAweDgxRUEsIDB4MTIzMSwgMHg4MUVCLCAweDgxRUIsIDB4NDU1OSwgMHg4MUVDLCAweDgxRUMsIDB4MUNBOSwKKyAgICAweDgxRUQsIDB4ODFFRCwgMHgwNTE5LCAweDgxRUUsIDB4ODFGMiwgMHg0NTVBLCAweDgxRjMsIDB4ODFGNCwgMHgxMUMwLAorICAgIDB4ODFGNSwgMHg4MUY5LCAweDQ1NUYsIDB4ODFGQSwgMHg4MUZBLCAweDIxNjEsIDB4ODFGQiwgMHg4MUZCLCAweDExOEEsCisgICAgMHg4MUZDLCAweDgxRkMsIDB4MDhGOSwgMHg4MUZELCAweDgxRkQsIDB4NDU2NCwgMHg4MUZFLCAweDgxRkUsIDB4MUNBNSwKKyAgICAweDgxRkYsIDB4ODFGRiwgMHg0NTY1LCAweDgyMDAsIDB4ODIwMCwgMHgxMDJGLCAweDgyMDEsIDB4ODIwMiwgMHgxQ0E2LAorICAgIDB4ODIwMywgMHg4MjAzLCAweDQ1NjYsIDB4ODIwNCwgMHg4MjA0LCAweDFDQTgsIDB4ODIwNSwgMHg4MjA1LCAweDA4RkEsCisgICAgMHg4MjA2LCAweDgyMDYsIDB4MTBDNCwgMHg4MjA3LCAweDgyMDcsIDB4MjIzQiwgMHg4MjA4LCAweDgyMDgsIDB4MjFEOSwKKyAgICAweDgyMDksIDB4ODIwOSwgMHgxRkNCLCAweDgyMEEsIDB4ODIwQSwgMHgxRkM5LCAweDgyMEIsIDB4ODIwQiwgMHg0NTY3LAorICAgIDB4ODIwQywgMHg4MjBELCAweDBEMTksIDB4ODIwRSwgMHg4MjBGLCAweDQ1NjgsIDB4ODIxMCwgMHg4MjEwLCAweDFDNjIsCisgICAgMHg4MjExLCAweDgyMTEsIDB4NDU2QSwgMHg4MjEyLCAweDgyMTIsIDB4MEQ3RCwgMHg4MjEzLCAweDgyMTMsIDB4NDU2QiwKKyAgICAweDgyMTQsIDB4ODIxNCwgMHgwRTQ1LCAweDgyMTUsIDB4ODIxQSwgMHg0NTZDLCAweDgyMUIsIDB4ODIxQiwgMHgxNjE4LAorICAgIDB4ODIxQywgMHg4MjFDLCAweDBEQTksIDB4ODIxRCwgMHg4MjFELCAweDQ1NzIsIDB4ODIxRSwgMHg4MjFFLCAweDBFRjcsCisgICAgMHg4MjFGLCAweDgyMUYsIDB4MTFEQSwgMHg4MjIwLCAweDgyMjAsIDB4NDU3MywgMHg4MjIxLCAweDgyMjMsIDB4MUNBQiwKKyAgICAweDgyMjQsIDB4ODIyNywgMHg0NTc0LCAweDgyMjgsIDB4ODIyOCwgMHgxQ0IwLCAweDgyMjksIDB4ODIyOSwgMHg0NTc4LAorICAgIDB4ODIyQSwgMHg4MjJBLCAweDA3NzQsIDB4ODIyQiwgMHg4MjJCLCAweDFDQjEsIDB4ODIyQywgMHg4MjJDLCAweDAzRUUsCisgICAgMHg4MjJELCAweDgyMkQsIDB4MUNBRSwgMHg4MjJFLCAweDgyMkUsIDB4NDU3OSwgMHg4MjJGLCAweDgyMkYsIDB4MUNBRiwKKyAgICAweDgyMzAsIDB4ODIzMCwgMHgwODczLCAweDgyMzEsIDB4ODIzMSwgMHgwNDlDLCAweDgyMzIsIDB4ODIzMiwgMHg0NTdBLAorICAgIDB4ODIzMywgMHg4MjM0LCAweDFDQjQsIDB4ODIzNSwgMHg4MjM1LCAweDA2MjUsIDB4ODIzNiwgMHg4MjM2LCAweDA0NzcsCisgICAgMHg4MjM3LCAweDgyMzcsIDB4MEYzQywgMHg4MjM4LCAweDgyMzgsIDB4MUNCMiwgMHg4MjM5LCAweDgyMzksIDB4MDUyRiwKKyAgICAweDgyM0EsIDB4ODIzQSwgMHg0NTdCLCAweDgyM0IsIDB4ODIzQiwgMHgxQ0IzLCAweDgyM0MsIDB4ODIzRCwgMHg0NTdDLAorICAgIDB4ODIzRSwgMHg4MjNFLCAweDFDQjYsIDB4ODIzRiwgMHg4MjQzLCAweDQ1N0UsIDB4ODI0NCwgMHg4MjQ0LCAweDFDQjcsCisgICAgMHg4MjQ1LCAweDgyNDYsIDB4NDU4MywgMHg4MjQ3LCAweDgyNDcsIDB4MEU1OCwgMHg4MjQ4LCAweDgyNDgsIDB4NDU4NSwKKyAgICAweDgyNDksIDB4ODI0OSwgMHgxQ0I4LCAweDgyNEEsIDB4ODI0QSwgMHg0NTg2LCAweDgyNEIsIDB4ODI0QiwgMHgxQ0I5LAorICAgIDB4ODI0QywgMHg4MjRFLCAweDQ1ODcsIDB4ODI0RiwgMHg4MjRGLCAweDFDQkEsIDB4ODI1MCwgMHg4MjU3LCAweDQ1OEEsCisgICAgMHg4MjU4LCAweDgyNTgsIDB4MERDNywgMHg4MjU5LCAweDgyNTksIDB4MUU2MSwgMHg4MjVBLCAweDgyNUEsIDB4MUNCQiwKKyAgICAweDgyNUIsIDB4ODI1RSwgMHg0NTkyLCAweDgyNUYsIDB4ODI1RiwgMHgxQ0JDLCAweDgyNjAsIDB4ODI2MywgMHg0NTk2LAorICAgIDB4ODI2NCwgMHg4MjY0LCAweDI1RUYsIDB4ODI2NSwgMHg4MjY1LCAweDQ1OUEsIDB4ODI2NiwgMHg4MjY2LCAweDFGOTgsCisgICAgMHg4MjY3LCAweDgyNjcsIDB4NDU5QiwgMHg4MjY4LCAweDgyNjgsIDB4MUNCRCwgMHg4MjY5LCAweDgyNkEsIDB4NDU5QywKKyAgICAweDgyNkIsIDB4ODI2QiwgMHgyNUYwLCAweDgyNkMsIDB4ODI2RCwgMHg0NTlFLCAweDgyNkUsIDB4ODI2RSwgMHgxQ0RDLAorICAgIDB4ODI2RiwgMHg4MjZGLCAweDBBMDUsIDB4ODI3MCwgMHg4MjcwLCAweDA4NUIsIDB4ODI3MSwgMHg4MjcxLCAweDFGODgsCisgICAgMHg4MjcyLCAweDgyNzIsIDB4MENFNCwgMHg4MjczLCAweDgyNzMsIDB4MTAwNywgMHg4Mjc0LCAweDgyNzQsIDB4MTc3MSwKKyAgICAweDgyNzUsIDB4ODI3NiwgMHg0NUEwLCAweDgyNzcsIDB4ODI3NywgMHgyMUY4LCAweDgyNzgsIDB4ODI3OCwgMHg0NUEyLAorICAgIDB4ODI3OSwgMHg4Mjc5LCAweDEzRTEsIDB4ODI3QSwgMHg4MjdBLCAweDEwNUMsIDB4ODI3QiwgMHg4MjdDLCAweDQ1QTMsCisgICAgMHg4MjdELCAweDgyN0QsIDB4MTNFMiwgMHg4MjdFLCAweDgyN0UsIDB4MDNCNywgMHg4MjdGLCAweDgyN0YsIDB4MTNFMywKKyAgICAweDgyODAsIDB4ODI4MSwgMHg0NUE1LCAweDgyODIsIDB4ODI4MiwgMHgwOEFCLCAweDgyODMsIDB4ODI4MywgMHg0NUE3LAorICAgIDB4ODI4NCwgMHg4Mjg0LCAweDEzRTcsIDB4ODI4NSwgMHg4Mjg3LCAweDQ1QTgsIDB4ODI4OCwgMHg4Mjg4LCAweDEyNzgsCisgICAgMHg4Mjg5LCAweDgyODksIDB4NDVBQiwgMHg4MjhBLCAweDgyOEEsIDB4MTNFNSwgMHg4MjhCLCAweDgyOEIsIDB4MTBEOCwKKyAgICAweDgyOEMsIDB4ODI4QywgMHg0NUFDLCAweDgyOEQsIDB4ODI4RCwgMHgwRDBGLCAweDgyOEUsIDB4ODI4RSwgMHgxM0U4LAorICAgIDB4ODI4RiwgMHg4MjhGLCAweDEzRTQsIDB4ODI5MCwgMHg4MjkwLCAweDQ1QUQsIDB4ODI5MSwgMHg4MjkxLCAweDEzRTksCisgICAgMHg4MjkyLCAweDgyOTIsIDB4MEFBNywgMHg4MjkzLCAweDgyOTYsIDB4NDVBRSwgMHg4Mjk3LCAweDgyOTcsIDB4MTNFQSwKKyAgICAweDgyOTgsIDB4ODI5OCwgMHgxM0YzLCAweDgyOTksIDB4ODI5OSwgMHgxM0VCLCAweDgyOUEsIDB4ODI5QiwgMHg0NUIyLAorICAgIDB4ODI5QywgMHg4MjlDLCAweDBFRUUsIDB4ODI5RCwgMHg4MjlELCAweDExQTQsIDB4ODI5RSwgMHg4MjlFLCAweDQ1QjQsCisgICAgMHg4MjlGLCAweDgyOUYsIDB4MTNGRCwgMHg4MkEwLCAweDgyQTAsIDB4NDVCNSwgMHg4MkExLCAweDgyQTEsIDB4MTNGQiwKKyAgICAweDgyQTIsIDB4ODJBMywgMHg0NUI2LCAweDgyQTQsIDB4ODJBNCwgMHgxNDAwLCAweDgyQTUsIDB4ODJBNSwgMHgwOEI3LAorICAgIDB4ODJBNiwgMHg4MkE2LCAweDBBNTIsIDB4ODJBNywgMHg4MkE3LCAweDQ1QjgsIDB4ODJBOCwgMHg4MkE4LCAweDEzRTYsCisgICAgMHg4MkE5LCAweDgyQTksIDB4MTNGOSwgMHg4MkFBLCAweDgyQUEsIDB4MTNGQywgMHg4MkFCLCAweDgyQUIsIDB4MTNFQywKKyAgICAweDgyQUMsIDB4ODJBQywgMHgwNjZGLCAweDgyQUQsIDB4ODJBRCwgMHgwM0QwLCAweDgyQUUsIDB4ODJBRSwgMHgxM0Y1LAorICAgIDB4ODJBRiwgMHg4MkFGLCAweDBGODksIDB4ODJCMCwgMHg4MkIwLCAweDEzRUYsIDB4ODJCMSwgMHg4MkIxLCAweDA3QkQsCisgICAgMHg4MkIyLCAweDgyQjIsIDB4NDVCOSwgMHg4MkIzLCAweDgyQjMsIDB4MDY1OSwgMHg4MkI0LCAweDgyQjQsIDB4MTNGQSwKKyAgICAweDgyQjUsIDB4ODJCNiwgMHg0NUJBLCAweDgyQjcsIDB4ODJCNywgMHgxM0Y0LCAweDgyQjgsIDB4ODJCOCwgMHgxM0VELAorICAgIDB4ODJCOSwgMHg4MkI5LCAweDBDNTgsIDB4ODJCQSwgMHg4MkJBLCAweDQ1QkMsIDB4ODJCQiwgMHg4MkJCLCAweDIzMjIsCisgICAgMHg4MkJDLCAweDgyQkMsIDB4NDVCRCwgMHg4MkJELCAweDgyQkQsIDB4MEZFOCwgMHg4MkJFLCAweDgyQkUsIDB4MTNFRSwKKyAgICAweDgyQkYsIDB4ODJDMCwgMHg0NUJFLCAweDgyQzEsIDB4ODJDMSwgMHgxM0Y4LCAweDgyQzIsIDB4ODJDMywgMHg0NUMwLAorICAgIDB4ODJDNCwgMHg4MkM0LCAweDEzRkUsIDB4ODJDNSwgMHg4MkM2LCAweDQ1QzIsIDB4ODJDNywgMHg4MkM3LCAweDBFQkMsCisgICAgMHg4MkM4LCAweDgyQzgsIDB4MTNGMCwgMHg4MkM5LCAweDgyQzksIDB4NDVDNCwgMHg4MkNBLCAweDgyQ0EsIDB4MTNGMSwKKyAgICAweDgyQ0IsIDB4ODJDQywgMHgxM0Y2LCAweDgyQ0QsIDB4ODJDRCwgMHgwNDlCLCAweDgyQ0UsIDB4ODJDRSwgMHgxM0ZGLAorICAgIDB4ODJDRiwgMHg4MkNGLCAweDBEQ0EsIDB4ODJEMCwgMHg4MkQwLCAweDQ1QzUsIDB4ODJEMSwgMHg4MkQxLCAweDEwRkEsCisgICAgMHg4MkQyLCAweDgyRDIsIDB4MTQwOSwgMHg4MkQzLCAweDgyRDMsIDB4MTQwRCwgMHg4MkQ0LCAweDgyRDQsIDB4MERGOSwKKyAgICAweDgyRDUsIDB4ODJENSwgMHgxNDE0LCAweDgyRDYsIDB4ODJENiwgMHg0NUM2LCAweDgyRDcsIDB4ODJENywgMHgwQUVDLAorICAgIDB4ODJEOCwgMHg4MkQ4LCAweDE0MEEsIDB4ODJEOSwgMHg4MkRBLCAweDQ1QzcsIDB4ODJEQiwgMHg4MkRCLCAweDA5NEUsCisgICAgMHg4MkRDLCAweDgyREMsIDB4MTQwNywgMHg4MkRELCAweDgyREQsIDB4NDVDOSwgMHg4MkRFLCAweDgyREUsIDB4MDQwNSwKKyAgICAweDgyREYsIDB4ODJERiwgMHgwNzBGLCAweDgyRTAsIDB4ODJFMCwgMHgxNDEzLCAweDgyRTEsIDB4ODJFMSwgMHgxNDAxLAorICAgIDB4ODJFMiwgMHg4MkUyLCAweDQ1Q0EsIDB4ODJFMywgMHg4MkUzLCAweDEzRjIsIDB4ODJFNCwgMHg4MkU0LCAweDE0MDQsCisgICAgMHg4MkU1LCAweDgyRTUsIDB4MENDRiwgMHg4MkU2LCAweDgyRTYsIDB4MDk2RCwgMHg4MkU3LCAweDgyRTcsIDB4MjMzNiwKKyAgICAweDgyRTgsIDB4ODJFQSwgMHg0NUNCLCAweDgyRUIsIDB4ODJFQiwgMHgwQ0Y0LCAweDgyRUMsIDB4ODJFRSwgMHg0NUNFLAorICAgIDB4ODJFRiwgMHg4MkVGLCAweDA0MjYsIDB4ODJGMCwgMHg4MkYwLCAweDQ1RDEsIDB4ODJGMSwgMHg4MkYxLCAweDEwODcsCisgICAgMHg4MkYyLCAweDgyRjMsIDB4NDVEMiwgMHg4MkY0LCAweDgyRjQsIDB4MTQwOCwgMHg4MkY1LCAweDgyRjYsIDB4NDVENCwKKyAgICAweDgyRjcsIDB4ODJGNywgMHgxNDAzLCAweDgyRjgsIDB4ODJGOCwgMHg0NUQ2LCAweDgyRjksIDB4ODJGOSwgMHgwQkRBLAorICAgIDB4ODJGQSwgMHg4MkZBLCAweDQ1RDcsIDB4ODJGQiwgMHg4MkZCLCAweDE0MEMsIDB4ODJGQywgMHg4MkZGLCAweDQ1RDgsCisgICAgMHg4MzAwLCAweDgzMDAsIDB4NDVEQywgMHg4MzAxLCAweDgzMDEsIDB4MTIxRiwgMHg4MzAyLCAweDgzMDIsIDB4MEFCNCwKKyAgICAweDgzMDMsIDB4ODMwMywgMHgwNjUzLCAweDgzMDQsIDB4ODMwNCwgMHgwQzRFLCAweDgzMDUsIDB4ODMwNSwgMHgwQUFFLAorICAgIDB4ODMwNiwgMHg4MzA2LCAweDE0MTAsIDB4ODMwNywgMHg4MzA3LCAweDE0MDYsIDB4ODMwOCwgMHg4MzA4LCAweDE0MTksCisgICAgMHg4MzA5LCAweDgzMDksIDB4MTQwMiwgMHg4MzBBLCAweDgzMEIsIDB4NDVERCwgMHg4MzBDLCAweDgzMEMsIDB4MTQwQiwKKyAgICAweDgzMEQsIDB4ODMwRCwgMHg0NURGLCAweDgzMEUsIDB4ODMwRSwgMHgwOEQ0LCAweDgzMEYsIDB4ODMwRiwgMHgxNDA1LAorICAgIDB4ODMxMCwgMHg4MzEwLCAweDQ1RTAsIDB4ODMxMSwgMHg4MzExLCAweDE0MEUsIDB4ODMxMiwgMHg4MzEzLCAweDQ1RTEsCisgICAgMHg4MzE0LCAweDgzMTUsIDB4MTQxMSwgMHg4MzE2LCAweDgzMTYsIDB4NDVFMywgMHg4MzE3LCAweDgzMTcsIDB4MTQyNiwKKyAgICAweDgzMTgsIDB4ODMxOSwgMHg0NUU0LCAweDgzMUEsIDB4ODMxQSwgMHgxNDBGLCAweDgzMUIsIDB4ODMxQiwgMHgxNDJFLAorICAgIDB4ODMxQywgMHg4MzFDLCAweDE0MTUsIDB4ODMxRCwgMHg4MzI2LCAweDQ1RTYsIDB4ODMyNywgMHg4MzI3LCAweDA4NUUsCisgICAgMHg4MzI4LCAweDgzMjgsIDB4MDU0NywgMHg4MzI5LCAweDgzMkEsIDB4NDVGMCwgMHg4MzJCLCAweDgzMkIsIDB4MEFBOCwKKyAgICAweDgzMkMsIDB4ODMyQywgMHgwNEFFLCAweDgzMkQsIDB4ODMyRCwgMHgxNDI4LCAweDgzMkUsIDB4ODMyRSwgMHg0NUYyLAorICAgIDB4ODMyRiwgMHg4MzJGLCAweDE0MjAsIDB4ODMzMCwgMHg4MzMwLCAweDQ1RjMsIDB4ODMzMSwgMHg4MzMxLCAweDE0MUQsCisgICAgMHg4MzMyLCAweDgzMzIsIDB4NDVGNCwgMHg4MzMzLCAweDgzMzMsIDB4MTQyQSwgMHg4MzM0LCAweDgzMzQsIDB4MTQxQywKKyAgICAweDgzMzUsIDB4ODMzNSwgMHgxMDc3LCAweDgzMzYsIDB4ODMzNiwgMHgwNEFGLCAweDgzMzcsIDB4ODMzNywgMHg0NUY1LAorICAgIDB4ODMzOCwgMHg4MzM4LCAweDBDQjIsIDB4ODMzOSwgMHg4MzM5LCAweDBDQkUsIDB4ODMzQSwgMHg4MzNBLCAweDE0MjksCisgICAgMHg4MzNCLCAweDgzM0IsIDB4NDVGNiwgMHg4MzNDLCAweDgzM0MsIDB4MTQxQiwgMHg4MzNELCAweDgzM0YsIDB4NDVGNywKKyAgICAweDgzNDAsIDB4ODM0MCwgMHgxNDI1LCAweDgzNDEsIDB4ODM0MiwgMHg0NUZBLCAweDgzNDMsIDB4ODM0MywgMHgxNDIzLAorICAgIDB4ODM0NCwgMHg4MzQ1LCAweDQ1RkMsIDB4ODM0NiwgMHg4MzQ2LCAweDA4RDIsIDB4ODM0NywgMHg4MzQ3LCAweDE0MjIsCisgICAgMHg4MzQ4LCAweDgzNDgsIDB4NDVGRSwgMHg4MzQ5LCAweDgzNDksIDB4MDRBNCwgMHg4MzRBLCAweDgzNEUsIDB4NDVGRiwKKyAgICAweDgzNEYsIDB4ODM0RiwgMHgxNDIxLCAweDgzNTAsIDB4ODM1MCwgMHgwODY5LCAweDgzNTEsIDB4ODM1MSwgMHgxNDE2LAorICAgIDB4ODM1MiwgMHg4MzUyLCAweDA3RDksIDB4ODM1MywgMHg4MzUzLCAweDQ2MDQsIDB4ODM1NCwgMHg4MzU0LCAweDA5REUsCisgICAgMHg4MzU1LCAweDgzNTksIDB4NDYwNSwgMHg4MzVBLCAweDgzNUEsIDB4MDg0NywgMHg4MzVCLCAweDgzNUMsIDB4MTQxNywKKyAgICAweDgzNUQsIDB4ODM1RCwgMHg0NjBBLCAweDgzNUUsIDB4ODM1RSwgMHgxNDFGLCAweDgzNUYsIDB4ODM1RiwgMHgxNDI0LAorICAgIDB4ODM2MCwgMHg4MzYwLCAweDE0MjcsIDB4ODM2MSwgMHg4MzYxLCAweDA1OTUsIDB4ODM2MiwgMHg4MzYyLCAweDQ2MEIsCisgICAgMHg4MzYzLCAweDgzNjMsIDB4MENCNCwgMHg4MzY0LCAweDgzNjQsIDB4MDdGQywgMHg4MzY1LCAweDgzNjUsIDB4MTQyQywKKyAgICAweDgzNjYsIDB4ODM2NiwgMHgxNDJCLCAweDgzNjcsIDB4ODM2NywgMHgxMDkwLCAweDgzNjgsIDB4ODM2OCwgMHgxNDJELAorICAgIDB4ODM2OSwgMHg4MzY5LCAweDE0MkYsIDB4ODM2QSwgMHg4MzZBLCAweDE0MzEsIDB4ODM2QiwgMHg4MzZCLCAweDEwNzgsCisgICAgMHg4MzZDLCAweDgzNkMsIDB4MTQzMCwgMHg4MzZELCAweDgzNkUsIDB4MTQzMiwgMHg4MzZGLCAweDgzNkYsIDB4MTAzMCwKKyAgICAweDgzNzAsIDB4ODM3NiwgMHg0NjBDLCAweDgzNzcsIDB4ODM3NywgMHgwNzgwLCAweDgzNzgsIDB4ODM3OCwgMHgxNDM1LAorICAgIDB4ODM3OSwgMHg4MzdBLCAweDQ2MTMsIDB4ODM3QiwgMHg4MzdCLCAweDE0NDIsIDB4ODM3QywgMHg4MzdDLCAweDE0M0QsCisgICAgMHg4MzdELCAweDgzN0QsIDB4MTQ0MCwgMHg4MzdFLCAweDgzODQsIDB4NDYxNSwgMHg4Mzg1LCAweDgzODUsIDB4MTQzQywKKyAgICAweDgzODYsIDB4ODM4NiwgMHgwQkVELCAweDgzODcsIDB4ODM4OCwgMHg0NjFDLCAweDgzODksIDB4ODM4OSwgMHgwOURELAorICAgIDB4ODM4QSwgMHg4MzhBLCAweDIyQUIsIDB4ODM4QiwgMHg4MzhELCAweDQ2MUUsIDB4ODM4RSwgMHg4MzhFLCAweDBDRTgsCisgICAgMHg4MzhGLCAweDgzOTEsIDB4NDYyMSwgMHg4MzkyLCAweDgzOTIsIDB4MTQxQSwgMHg4MzkzLCAweDgzOTMsIDB4MTQzQSwKKyAgICAweDgzOTQsIDB4ODM5NSwgMHg0NjI0LCAweDgzOTYsIDB4ODM5NiwgMHgxRkJGLCAweDgzOTcsIDB4ODM5NywgMHg0NjI2LAorICAgIDB4ODM5OCwgMHg4Mzk4LCAweDE0NDMsIDB4ODM5OSwgMHg4MzlBLCAweDQ2MjcsIDB4ODM5QiwgMHg4MzlCLCAweDE0MUUsCisgICAgMHg4MzlDLCAweDgzOUMsIDB4MTQzQiwgMHg4MzlELCAweDgzOUQsIDB4NDYyOSwgMHg4MzlFLCAweDgzOUUsIDB4MTQ0NCwKKyAgICAweDgzOUYsIDB4ODM5RiwgMHg0NjJBLCAweDgzQTAsIDB4ODNBMCwgMHgxNDM4LCAweDgzQTEsIDB4ODNBMSwgMHg0NjJCLAorICAgIDB4ODNBMiwgMHg4M0EyLCAweDFGN0QsIDB4ODNBMywgMHg4M0E2LCAweDQ2MkMsIDB4ODNBNywgMHg4M0E3LCAweDIzMzMsCisgICAgMHg4M0E4LCAweDgzQTgsIDB4MTQ0NSwgMHg4M0E5LCAweDgzQTksIDB4MTQzRiwgMHg4M0FBLCAweDgzQUEsIDB4MTQzOSwKKyAgICAweDgzQUIsIDB4ODNBQiwgMHgwQjBELCAweDgzQUMsIDB4ODNBRiwgMHg0NjMwLCAweDgzQjAsIDB4ODNCMCwgMHgxNDM0LAorICAgIDB4ODNCMSwgMHg4M0IxLCAweDA5OUUsIDB4ODNCMiwgMHg4M0IyLCAweDA5RjQsIDB4ODNCMywgMHg4M0I0LCAweDE0MzYsCisgICAgMHg4M0I1LCAweDgzQjUsIDB4NDYzNCwgMHg4M0I2LCAweDgzQjYsIDB4MTQzRSwgMHg4M0I3LCAweDgzQjcsIDB4MDgwNiwKKyAgICAweDgzQjgsIDB4ODNCOCwgMHgxNDQxLCAweDgzQjksIDB4ODNCOSwgMHgxMDhELCAweDgzQkEsIDB4ODNCQSwgMHgxNDQ2LAorICAgIDB4ODNCQiwgMHg4M0JCLCAweDQ2MzUsIDB4ODNCQywgMHg4M0JDLCAweDE0NDcsIDB4ODNCRCwgMHg4M0JELCAweDBBQUMsCisgICAgMHg4M0JFLCAweDgzQkYsIDB4NDYzNiwgMHg4M0MwLCAweDgzQzAsIDB4MTQ1RSwgMHg4M0MxLCAweDgzQzEsIDB4MTQ0OCwKKyAgICAweDgzQzIsIDB4ODNDNCwgMHg0NjM4LCAweDgzQzUsIDB4ODNDNSwgMHgxNDVELCAweDgzQzYsIDB4ODNDNiwgMHg0NjNCLAorICAgIDB4ODNDNywgMHg4M0M3LCAweDA3MTYsIDB4ODNDOCwgMHg4M0M5LCAweDQ2M0MsIDB4ODNDQSwgMHg4M0NBLCAweDA5MDQsCisgICAgMHg4M0NCLCAweDgzQ0IsIDB4NDYzRSwgMHg4M0NDLCAweDgzQ0MsIDB4MDkyOSwgMHg4M0NELCAweDgzQ0UsIDB4NDYzRiwKKyAgICAweDgzQ0YsIDB4ODNDRiwgMHgwNzgxLCAweDgzRDAsIDB4ODNEMywgMHg0NjQxLCAweDgzRDQsIDB4ODNENCwgMHgxNDU2LAorICAgIDB4ODNENSwgMHg4M0Q1LCAweDQ2NDUsIDB4ODNENiwgMHg4M0Q2LCAweDE0NTEsIDB4ODNENywgMHg4M0Q3LCAweDQ2NDYsCisgICAgMHg4M0Q4LCAweDgzRDgsIDB4MTQ0QiwgMHg4M0Q5LCAweDgzREIsIDB4NDY0NywgMHg4M0RDLCAweDgzREMsIDB4MDQ5MiwKKyAgICAweDgzREQsIDB4ODNERCwgMHgxNDRGLCAweDgzREUsIDB4ODNERSwgMHg0NjRBLCAweDgzREYsIDB4ODNERiwgMHgxNDU3LAorICAgIDB4ODNFMCwgMHg4M0UwLCAweDA0NkIsIDB4ODNFMSwgMHg4M0UxLCAweDE0NjEsIDB4ODNFMiwgMHg4M0U0LCAweDQ2NEIsCisgICAgMHg4M0U1LCAweDgzRTUsIDB4MTQ0QSwgMHg4M0U2LCAweDgzRTgsIDB4NDY0RSwgMHg4M0U5LCAweDgzRTksIDB4MEJFRiwKKyAgICAweDgzRUEsIDB4ODNFQSwgMHgxNDVDLCAweDgzRUIsIDB4ODNFRSwgMHg0NjUxLCAweDgzRUYsIDB4ODNFRiwgMHgxRjRELAorICAgIDB4ODNGMCwgMHg4M0YwLCAweDE0NjAsIDB4ODNGMSwgMHg4M0YxLCAweDBBMkIsIDB4ODNGMiwgMHg4M0YyLCAweDA2NjMsCisgICAgMHg4M0YzLCAweDgzRjcsIDB4NDY1NSwgMHg4M0Y4LCAweDgzRjksIDB4MTQ1QSwgMHg4M0ZBLCAweDgzRkMsIDB4NDY1QSwKKyAgICAweDgzRkQsIDB4ODNGRCwgMHgxNDUwLCAweDgzRkUsIDB4ODNGRiwgMHg0NjVELCAweDg0MDAsIDB4ODQwMCwgMHg0NjVGLAorICAgIDB4ODQwMSwgMHg4NDAxLCAweDE0NDksIDB4ODQwMiwgMHg4NDAyLCAweDQ2NjAsIDB4ODQwMywgMHg4NDAzLCAweDE0NTksCisgICAgMHg4NDA0LCAweDg0MDQsIDB4MEUyNCwgMHg4NDA1LCAweDg0MDUsIDB4NDY2MSwgMHg4NDA2LCAweDg0MDYsIDB4MTQ1NSwKKyAgICAweDg0MDcsIDB4ODQwNywgMHgyMzM0LCAweDg0MDgsIDB4ODQwOSwgMHg0NjYyLCAweDg0MEEsIDB4ODQwQSwgMHgxRkYxLAorICAgIDB4ODQwQiwgMHg4NDBCLCAweDE0NEUsIDB4ODQwQywgMHg4NDBDLCAweDBBQ0QsIDB4ODQwRCwgMHg4NDBELCAweDBCREIsCisgICAgMHg4NDBFLCAweDg0MEUsIDB4MEVCRCwgMHg4NDBGLCAweDg0MEYsIDB4MTQ1OCwgMHg4NDEwLCAweDg0MTAsIDB4NDY2NCwKKyAgICAweDg0MTEsIDB4ODQxMSwgMHgxNDU0LCAweDg0MTIsIDB4ODQxNywgMHg0NjY1LCAweDg0MTgsIDB4ODQxOCwgMHgxNDRELAorICAgIDB4ODQxOSwgMHg4NDFCLCAweDQ2NkIsIDB4ODQxQywgMHg4NDFDLCAweDE0NTIsIDB4ODQxRCwgMHg4NDFELCAweDBBODMsCisgICAgMHg4NDFFLCAweDg0MjMsIDB4NDY2RSwgMHg4NDI0LCAweDg0MjUsIDB4MTA4RSwgMHg4NDI2LCAweDg0MjYsIDB4MTQ1RiwKKyAgICAweDg0MjcsIDB4ODQyNywgMHgwRjYxLCAweDg0MjgsIDB4ODQyOCwgMHgwQ0QzLCAweDg0MjksIDB4ODQyQiwgMHg0Njc0LAorICAgIDB4ODQyQywgMHg4NDJDLCAweDIxOEIsIDB4ODQyRCwgMHg4NDMwLCAweDQ2NzcsIDB4ODQzMSwgMHg4NDMxLCAweDE0NzIsCisgICAgMHg4NDMyLCAweDg0MzQsIDB4NDY3QiwgMHg4NDM1LCAweDg0MzUsIDB4MjM0OSwgMHg4NDM2LCAweDg0MzcsIDB4NDY3RSwKKyAgICAweDg0MzgsIDB4ODQzOCwgMHgxNDUzLCAweDg0MzksIDB4ODQzQiwgMHg0NjgwLCAweDg0M0MsIDB4ODQzQywgMHgxNDZDLAorICAgIDB4ODQzRCwgMHg4NDNELCAweDBBOEIsIDB4ODQzRSwgMHg4NDQ1LCAweDQ2ODMsIDB4ODQ0NiwgMHg4NDQ2LCAweDE0NkQsCisgICAgMHg4NDQ3LCAweDg0NDgsIDB4NDY4QiwgMHg4NDQ5LCAweDg0NDksIDB4MjIwQiwgMHg4NDRBLCAweDg0NTAsIDB4NDY4RCwKKyAgICAweDg0NTEsIDB4ODQ1MSwgMHgxNDYzLCAweDg0NTIsIDB4ODQ1MiwgMHgyMzQ2LCAweDg0NTMsIDB4ODQ1NiwgMHg0Njk0LAorICAgIDB4ODQ1NywgMHg4NDU3LCAweDExRjcsIDB4ODQ1OCwgMHg4NDU4LCAweDQ2OTgsIDB4ODQ1OSwgMHg4NDU5LCAweDE0NjUsCisgICAgMHg4NDVBLCAweDg0NUEsIDB4MTQ2NCwgMHg4NDVCLCAweDg0NUIsIDB4MDZFQiwgMHg4NDVDLCAweDg0NUMsIDB4MTQ2MiwKKyAgICAweDg0NUQsIDB4ODQ2MCwgMHg0Njk5LCAweDg0NjEsIDB4ODQ2MSwgMHgwQkVFLCAweDg0NjIsIDB4ODQ2MiwgMHg0NjlELAorICAgIDB4ODQ2MywgMHg4NDYzLCAweDA1RUMsIDB4ODQ2NCwgMHg4NDY0LCAweDIzNDcsIDB4ODQ2NSwgMHg4NDY1LCAweDQ2OUUsCisgICAgMHg4NDY2LCAweDg0NjYsIDB4MjE5MywgMHg4NDY3LCAweDg0NjgsIDB4NDY5RiwgMHg4NDY5LCAweDg0NjksIDB4MTQ2RSwKKyAgICAweDg0NkEsIDB4ODQ2QSwgMHg0NkExLCAweDg0NkIsIDB4ODQ2QiwgMHgwN0IwLCAweDg0NkMsIDB4ODQ2QywgMHgxMTI0LAorICAgIDB4ODQ2RCwgMHg4NDZELCAweDE0NzMsIDB4ODQ2RSwgMHg4NDZFLCAweDQ2QTIsIDB4ODQ2RiwgMHg4NDZGLCAweDI2QTEsCisgICAgMHg4NDcwLCAweDg0NzAsIDB4NDZBMywgMHg4NDcxLCAweDg0NzEsIDB4MDU1MywgMHg4NDcyLCAweDg0NzIsIDB4NDZBNCwKKyAgICAweDg0NzMsIDB4ODQ3MywgMHgxNDY2LCAweDg0NzQsIDB4ODQ3NCwgMHg0NkE1LCAweDg0NzUsIDB4ODQ3NSwgMHgwOTg4LAorICAgIDB4ODQ3NiwgMHg4NDc2LCAweDE0NkYsIDB4ODQ3NywgMHg4NDc3LCAweDFGNjIsIDB4ODQ3OCwgMHg4NDc4LCAweDE0NkIsCisgICAgMHg4NDc5LCAweDg0NzksIDB4NDZBNiwgMHg4NDdBLCAweDg0N0EsIDB4MTQ2OSwgMHg4NDdCLCAweDg0ODEsIDB4NDZBNywKKyAgICAweDg0ODIsIDB4ODQ4MiwgMHgwNUJBLCAweDg0ODMsIDB4ODQ4NiwgMHg0NkFFLCAweDg0ODcsIDB4ODQ4OCwgMHgxNDY3LAorICAgIDB4ODQ4OSwgMHg4NDg5LCAweDE0NkEsIDB4ODQ4QSwgMHg4NDhBLCAweDQ2QjIsIDB4ODQ4QiwgMHg4NDhCLCAweDA4ODAsCisgICAgMHg4NDhDLCAweDg0OEMsIDB4MTQ3MCwgMHg4NDhELCAweDg0OEQsIDB4NDZCMywgMHg4NDhFLCAweDg0OEUsIDB4MTQ3MSwKKyAgICAweDg0OEYsIDB4ODQ5MiwgMHg0NkI0LCAweDg0OTMsIDB4ODQ5MywgMHgyMzRELCAweDg0OTQsIDB4ODQ5NCwgMHgyMzQ4LAorICAgIDB4ODQ5NSwgMHg4NDk2LCAweDQ2QjgsIDB4ODQ5NywgMHg4NDk3LCAweDE0ODEsIDB4ODQ5OCwgMHg4NDk4LCAweDQ2QkEsCisgICAgMHg4NDk5LCAweDg0OTksIDB4MEFDRSwgMHg4NDlBLCAweDg0OUIsIDB4NDZCQiwgMHg4NDlDLCAweDg0OUMsIDB4MERENywKKyAgICAweDg0OUQsIDB4ODRBMCwgMHg0NkJELCAweDg0QTEsIDB4ODRBMSwgMHgxNDdFLCAweDg0QTIsIDB4ODRBRSwgMHg0NkMxLAorICAgIDB4ODRBRiwgMHg4NEFGLCAweDEyOTcsIDB4ODRCMCwgMHg4NEIxLCAweDQ2Q0UsIDB4ODRCMiwgMHg4NEIyLCAweDBCRjAsCisgICAgMHg4NEIzLCAweDg0QjMsIDB4NDZEMCwgMHg4NEI0LCAweDg0QjQsIDB4MTQ4MCwgMHg4NEI1LCAweDg0QjcsIDB4NDZEMSwKKyAgICAweDg0QjgsIDB4ODRCOCwgMHgxMTk1LCAweDg0QjksIDB4ODRCOSwgMHgxNDdGLCAweDg0QkEsIDB4ODRCQSwgMHgxNDdDLAorICAgIDB4ODRCQiwgMHg4NEJCLCAweDQ2RDQsIDB4ODRCQywgMHg4NEJDLCAweDFFNjAsIDB4ODRCRCwgMHg4NEJELCAweDE0NzgsCisgICAgMHg4NEJFLCAweDg0QkUsIDB4NDZENSwgMHg4NEJGLCAweDg0QkYsIDB4MTQ3QiwgMHg4NEMwLCAweDg0QzAsIDB4MjM0NSwKKyAgICAweDg0QzEsIDB4ODRDMSwgMHgxNDc0LCAweDg0QzIsIDB4ODRDMywgMHg0NkQ2LCAweDg0QzQsIDB4ODRDNCwgMHgwRkI5LAorICAgIDB4ODRDNSwgMHg4NEM4LCAweDQ2RDgsIDB4ODRDOSwgMHg4NEM5LCAweDBDQjMsIDB4ODRDQSwgMHg4NENBLCAweDE0N0EsCisgICAgMHg4NENCLCAweDg0Q0IsIDB4MUYxMiwgMHg4NENDLCAweDg0Q0MsIDB4NDZEQywgMHg4NENELCAweDg0Q0QsIDB4MTQ3NSwKKyAgICAweDg0Q0UsIDB4ODRDRiwgMHg0NkRELCAweDg0RDAsIDB4ODREMCwgMHgxNDc2LCAweDg0RDEsIDB4ODREMSwgMHgwREU3LAorICAgIDB4ODREMiwgMHg4NEQyLCAweDQ2REYsIDB4ODREMywgMHg4NEQzLCAweDE0NzksIDB4ODRENCwgMHg4NEQ1LCAweDQ2RTAsCisgICAgMHg4NEQ2LCAweDg0RDYsIDB4MDQzNiwgMHg4NEQ3LCAweDg0REMsIDB4NDZFMiwgMHg4NERELCAweDg0REQsIDB4MDlBMSwKKyAgICAweDg0REUsIDB4ODRERSwgMHg0NkU4LCAweDg0REYsIDB4ODRERiwgMHgwODJFLCAweDg0RTAsIDB4ODRFMCwgMHgxNDdELAorICAgIDB4ODRFMSwgMHg4NEUyLCAweDQ2RTksIDB4ODRFMywgMHg4NEUzLCAweDE0ODMsIDB4ODRFNCwgMHg4NEU0LCAweDQ2RUIsCisgICAgMHg4NEU1LCAweDg0RTUsIDB4MTQ4MiwgMHg4NEU2LCAweDg0RTYsIDB4MTQ3NywgMHg4NEU3LCAweDg0RUIsIDB4NDZFQywKKyAgICAweDg0RUMsIDB4ODRFQywgMHgwQkFGLCAweDg0RUQsIDB4ODRFRCwgMHg0NkYxLCAweDg0RUUsIDB4ODRFRSwgMHgyMDE4LAorICAgIDB4ODRFRiwgMHg4NEVGLCAweDIzMzUsIDB4ODRGMCwgMHg4NEYwLCAweDE0ODcsIDB4ODRGMSwgMHg4NEZCLCAweDQ2RjIsCisgICAgMHg4NEZDLCAweDg0RkMsIDB4MTQ4RSwgMHg4NEZELCAweDg0RkQsIDB4MjMzQywgMHg4NEZFLCAweDg0RkUsIDB4NDZGRCwKKyAgICAweDg0RkYsIDB4ODRGRiwgMHgxNDhELCAweDg1MDAsIDB4ODUwQiwgMHg0NkZFLCAweDg1MEMsIDB4ODUwQywgMHgxNDg0LAorICAgIDB4ODUwRCwgMHg4NTEwLCAweDQ3MEEsIDB4ODUxMSwgMHg4NTExLCAweDBBRjQsIDB4ODUxMiwgMHg4NTEyLCAweDQ3MEUsCisgICAgMHg4NTEzLCAweDg1MTMsIDB4MEFBMiwgMHg4NTE0LCAweDg1MTQsIDB4MjY2RiwgMHg4NTE1LCAweDg1MTYsIDB4NDcwRiwKKyAgICAweDg1MTcsIDB4ODUxNywgMHgxMTgyLCAweDg1MTgsIDB4ODUxOSwgMHg0NzExLCAweDg1MUEsIDB4ODUxQSwgMHgwRUM0LAorICAgIDB4ODUxQiwgMHg4NTFELCAweDQ3MTMsIDB4ODUxRSwgMHg4NTFFLCAweDIzNTEsIDB4ODUxRiwgMHg4NTFGLCAweDE0ODksCisgICAgMHg4NTIwLCAweDg1MjAsIDB4NDcxNiwgMHg4NTIxLCAweDg1MjEsIDB4MDQ5MywgMHg4NTIyLCAweDg1MjIsIDB4NDcxNywKKyAgICAweDg1MjMsIDB4ODUyMywgMHgxRkEwLCAweDg1MjQsIDB4ODUyNSwgMHg0NzE4LCAweDg1MjYsIDB4ODUyNiwgMHgyMzM4LAorICAgIDB4ODUyNywgMHg4NTJBLCAweDQ3MUEsIDB4ODUyQiwgMHg4NTJCLCAweDBCNEIsIDB4ODUyQywgMHg4NTJDLCAweDBENzYsCisgICAgMHg4NTJELCAweDg1MkQsIDB4MjIxQiwgMHg4NTJFLCAweDg1MzYsIDB4NDcxRSwgMHg4NTM3LCAweDg1MzcsIDB4MEMzQiwKKyAgICAweDg1MzgsIDB4ODUzOCwgMHgxNDg2LCAweDg1MzksIDB4ODUzOSwgMHgxNDg4LCAweDg1M0EsIDB4ODUzQSwgMHgxNDhBLAorICAgIDB4ODUzQiwgMHg4NTNCLCAweDE0OEMsIDB4ODUzQywgMHg4NTNDLCAweDAzQjUsIDB4ODUzRCwgMHg4NTNELCAweDA0MzcsCisgICAgMHg4NTNFLCAweDg1NDAsIDB4NDcyNywgMHg4NTQxLCAweDg1NDEsIDB4MjM0MiwgMHg4NTQyLCAweDg1NDIsIDB4NDcyQSwKKyAgICAweDg1NDMsIDB4ODU0MywgMHgxNDk2LCAweDg1NDQsIDB4ODU0NSwgMHg0NzJCLCAweDg1NDYsIDB4ODU0NiwgMHgyMzRGLAorICAgIDB4ODU0NywgMHg4NTQ3LCAweDQ3MkQsIDB4ODU0OCwgMHg4NTQ4LCAweDE0OTAsIDB4ODU0OSwgMHg4NTQ5LCAweDA4ODcsCisgICAgMHg4NTRBLCAweDg1NEEsIDB4MENDQSwgMHg4NTRCLCAweDg1NEQsIDB4NDcyRSwgMHg4NTRFLCAweDg1NEUsIDB4MjMzRCwKKyAgICAweDg1NEYsIDB4ODU1MSwgMHg0NzMxLCAweDg1NTIsIDB4ODU1MiwgMHgyMzQ0LCAweDg1NTMsIDB4ODU1MywgMHgyMzMxLAorICAgIDB4ODU1NCwgMHg4NTU0LCAweDQ3MzQsIDB4ODU1NSwgMHg4NTU1LCAweDIzNEIsIDB4ODU1NiwgMHg4NTU2LCAweDE0OEIsCisgICAgMHg4NTU3LCAweDg1NTcsIDB4NDczNSwgMHg4NTU4LCAweDg1NTgsIDB4MjMzQiwgMHg4NTU5LCAweDg1NTksIDB4MTQ4RiwKKyAgICAweDg1NUEsIDB4ODU1RCwgMHg0NzM2LCAweDg1NUUsIDB4ODU1RSwgMHgxNDkzLCAweDg1NUYsIDB4ODU2MSwgMHg0NzNBLAorICAgIDB4ODU2MiwgMHg4NTYyLCAweDIzNTAsIDB4ODU2MywgMHg4NTYzLCAweDQ3M0QsIDB4ODU2NCwgMHg4NTY0LCAweDE0OTIsCisgICAgMHg4NTY1LCAweDg1NjcsIDB4NDczRSwgMHg4NTY4LCAweDg1NjgsIDB4MTQ5MSwgMHg4NTY5LCAweDg1NjksIDB4MUVCNCwKKyAgICAweDg1NkEsIDB4ODU2QSwgMHgyMUE2LCAweDg1NkIsIDB4ODU2QywgMHg0NzQxLCAweDg1NkQsIDB4ODU2RCwgMHgyMUNCLAorICAgIDB4ODU2RSwgMHg4NTcxLCAweDQ3NDMsIDB4ODU3MiwgMHg4NTcyLCAweDE0OTcsIDB4ODU3MywgMHg4NTczLCAweDQ3NDcsCisgICAgMHg4NTc0LCAweDg1NzQsIDB4MTEwRiwgMHg4NTc1LCAweDg1NzYsIDB4NDc0OCwgMHg4NTc3LCAweDg1NzcsIDB4MjM1NSwKKyAgICAweDg1NzgsIDB4ODU3OCwgMHg0NzRBLCAweDg1NzksIDB4ODU3OSwgMHgxNDlELCAweDg1N0EsIDB4ODU3QSwgMHgxNDk0LAorICAgIDB4ODU3QiwgMHg4NTdCLCAweDE0OTgsIDB4ODU3QywgMHg4NTdELCAweDQ3NEIsIDB4ODU3RSwgMHg4NTdFLCAweDA5QzQsCisgICAgMHg4NTdGLCAweDg1ODMsIDB4NDc0RCwgMHg4NTg0LCAweDg1ODQsIDB4MDQwQSwgMHg4NTg1LCAweDg1ODUsIDB4MTRBMCwKKyAgICAweDg1ODYsIDB4ODU4NiwgMHg0NzUyLCAweDg1ODcsIDB4ODU4NywgMHgxNDlCLCAweDg1ODgsIDB4ODU4OCwgMHgyMzNFLAorICAgIDB4ODU4OSwgMHg4NTg5LCAweDQ3NTMsIDB4ODU4QSwgMHg4NThBLCAweDFGNzQsIDB4ODU4QiwgMHg4NThCLCAweDQ3NTQsCisgICAgMHg4NThDLCAweDg1OEMsIDB4MjMzMCwgMHg4NThELCAweDg1OEUsIDB4NDc1NSwgMHg4NThGLCAweDg1OEYsIDB4MTQ5QywKKyAgICAweDg1OTAsIDB4ODU5MCwgMHg0NzU3LCAweDg1OTEsIDB4ODU5MSwgMHgyNjgwLCAweDg1OTIsIDB4ODU5MywgMHg0NzU4LAorICAgIDB4ODU5NCwgMHg4NTk0LCAweDIwREEsIDB4ODU5NSwgMHg4NTlBLCAweDQ3NUEsIDB4ODU5QiwgMHg4NTlCLCAweDBGQ0YsCisgICAgMHg4NTlDLCAweDg1OUMsIDB4MTQ5RiwgMHg4NTlELCAweDg1OUUsIDB4NDc2MCwgMHg4NTlGLCAweDg1OUYsIDB4MjM0QSwKKyAgICAweDg1QTAsIDB4ODVBMywgMHg0NzYyLCAweDg1QTQsIDB4ODVBNCwgMHgxNDk5LCAweDg1QTUsIDB4ODVBNSwgMHg0NzY2LAorICAgIDB4ODVBNiwgMHg4NUE2LCAweDFGOTEsIDB4ODVBNywgMHg4NUE3LCAweDQ3NjcsIDB4ODVBOCwgMHg4NUE4LCAweDE0OUEsCisgICAgMHg4NUE5LCAweDg1QTksIDB4MjEwNywgMHg4NUFBLCAweDg1QUEsIDB4MEY4OCwgMHg4NUFCLCAweDg1QUQsIDB4NDc2OCwKKyAgICAweDg1QUUsIDB4ODVBRSwgMHgxNDlFLCAweDg1QUYsIDB4ODVBRiwgMHgwRDg0LCAweDg1QjAsIDB4ODVCMCwgMHgxNEEzLAorICAgIDB4ODVCMSwgMHg4NUI2LCAweDQ3NkIsIDB4ODVCNywgMHg4NUI3LCAweDE0QTIsIDB4ODVCOCwgMHg4NUI4LCAweDQ3NzEsCisgICAgMHg4NUI5LCAweDg1QjksIDB4MTRBMSwgMHg4NUJBLCAweDg1QkEsIDB4MjMzRiwgMHg4NUJCLCAweDg1QzAsIDB4NDc3MiwKKyAgICAweDg1QzEsIDB4ODVDMSwgMHgxNEE1LCAweDg1QzIsIDB4ODVDOCwgMHg0Nzc4LCAweDg1QzksIDB4ODVDOSwgMHgwOEI2LAorICAgIDB4ODVDQSwgMHg4NUNDLCAweDQ3N0YsIDB4ODVDRCwgMHg4NUNELCAweDFGRjQsIDB4ODVDRSwgMHg4NUNFLCAweDIzNDMsCisgICAgMHg4NUNGLCAweDg1Q0YsIDB4MDQ5RiwgMHg4NUQwLCAweDg1RDAsIDB4MEFFRiwgMHg4NUQxLCAweDg1RDIsIDB4NDc4MiwKKyAgICAweDg1RDMsIDB4ODVEMywgMHgxNEE0LCAweDg1RDQsIDB4ODVENCwgMHg0Nzg0LCAweDg1RDUsIDB4ODVENSwgMHgwQjdCLAorICAgIDB4ODVENiwgMHg4NURCLCAweDQ3ODUsIDB4ODVEQywgMHg4NURDLCAweDE0QTYsIDB4ODVERCwgMHg4NURELCAweDIyMTIsCisgICAgMHg4NURFLCAweDg1RTMsIDB4NDc4QiwgMHg4NUU0LCAweDg1RTQsIDB4MEUyQywgMHg4NUU1LCAweDg1RTUsIDB4MjIwNywKKyAgICAweDg1RTYsIDB4ODVFOCwgMHg0NzkxLCAweDg1RTksIDB4ODVFOSwgMHgwNjQ3LCAweDg1RUEsIDB4ODVFQSwgMHgyMzU5LAorICAgIDB4ODVFQiwgMHg4NUYzLCAweDQ3OTQsIDB4ODVGNCwgMHg4NUY0LCAweDIyNTQsIDB4ODVGNSwgMHg4NUY1LCAweDQ3OUQsCisgICAgMHg4NUY2LCAweDg1RjYsIDB4MjMzMiwgMHg4NUY3LCAweDg1RjgsIDB4NDc5RSwgMHg4NUY5LCAweDg1RjksIDB4MUUyNiwKKyAgICAweDg1RkEsIDB4ODVGQSwgMHgyMzU3LCAweDg1RkIsIDB4ODVGQiwgMHgxMTI4LCAweDg1RkMsIDB4ODVGRSwgMHg0N0EwLAorICAgIDB4ODVGRiwgMHg4NUZGLCAweDE0QTcsIDB4ODYwMCwgMHg4NjAzLCAweDQ3QTMsIDB4ODYwNCwgMHg4NjA0LCAweDIzNTgsCisgICAgMHg4NjA1LCAweDg2MDUsIDB4MTRBOSwgMHg4NjA2LCAweDg2MDYsIDB4MjA0MiwgMHg4NjA3LCAweDg2MDcsIDB4MjE1MywKKyAgICAweDg2MDgsIDB4ODYwQSwgMHg0N0E3LCAweDg2MEIsIDB4ODYwQiwgMHgyMEJCLCAweDg2MEMsIDB4ODYxMCwgMHg0N0FBLAorICAgIDB4ODYxMSwgMHg4NjExLCAweDBCMDUsIDB4ODYxMiwgMHg4NjE1LCAweDQ3QUYsIDB4ODYxNiwgMHg4NjE2LCAweDE0QUIsCisgICAgMHg4NjE3LCAweDg2MTksIDB4NDdCMywgMHg4NjFBLCAweDg2MUEsIDB4MjM1QSwgMHg4NjFCLCAweDg2MUQsIDB4NDdCNiwKKyAgICAweDg2MUUsIDB4ODYxRSwgMHgyMzU2LCAweDg2MUYsIDB4ODYyMSwgMHg0N0I5LCAweDg2MjIsIDB4ODYyMiwgMHgyMzM3LAorICAgIDB4ODYyMywgMHg4NjI2LCAweDQ3QkMsIDB4ODYyNywgMHg4NjI3LCAweDE0QTgsIDB4ODYyOCwgMHg4NjI4LCAweDQ3QzAsCisgICAgMHg4NjI5LCAweDg2MjksIDB4MTRBQSwgMHg4NjJBLCAweDg2MkMsIDB4NDdDMSwgMHg4NjJELCAweDg2MkQsIDB4MUZGOSwKKyAgICAweDg2MkUsIDB4ODYzNywgMHg0N0M0LCAweDg2MzgsIDB4ODYzOCwgMHgxMTVCLCAweDg2MzksIDB4ODYzOSwgMHg0N0NFLAorICAgIDB4ODYzQSwgMHg4NjNBLCAweDIzNTMsIDB4ODYzQiwgMHg4NjNCLCAweDQ3Q0YsIDB4ODYzQywgMHg4NjNDLCAweDE0QUMsCisgICAgMHg4NjNELCAweDg2M0UsIDB4NDdEMCwgMHg4NjNGLCAweDg2M0YsIDB4MjA2MSwgMHg4NjQwLCAweDg2NEMsIDB4NDdEMiwKKyAgICAweDg2NEQsIDB4ODY0RCwgMHgxQkYwLCAweDg2NEUsIDB4ODY0RSwgMHgwN0I3LCAweDg2NEYsIDB4ODY0RiwgMHgwQTU5LAorICAgIDB4ODY1MCwgMHg4NjUwLCAweDBCNzEsIDB4ODY1MSwgMHg4NjUxLCAweDBBNkUsIDB4ODY1MiwgMHg4NjUzLCAweDQ3REYsCisgICAgMHg4NjU0LCAweDg2NTQsIDB4MUJGMSwgMHg4NjU1LCAweDg2NTUsIDB4MUU5NSwgMHg4NjU2LCAweDg2NTksIDB4NDdFMSwKKyAgICAweDg2NUEsIDB4ODY1QSwgMHgwRkI0LCAweDg2NUIsIDB4ODY1QiwgMHg0N0U1LCAweDg2NUMsIDB4ODY1QywgMHgyMDQ5LAorICAgIDB4ODY1RCwgMHg4NjVELCAweDQ3RTYsIDB4ODY1RSwgMHg4NjVFLCAweDEwQzIsIDB4ODY1RiwgMHg4NjVGLCAweDFGNDIsCisgICAgMHg4NjYwLCAweDg2NjEsIDB4NDdFNywgMHg4NjYyLCAweDg2NjIsIDB4MTk2RCwgMHg4NjYzLCAweDg2NjYsIDB4NDdFOSwKKyAgICAweDg2NjcsIDB4ODY2NywgMHgxRkU4LCAweDg2NjgsIDB4ODY2QSwgMHg0N0VELCAweDg2NkIsIDB4ODY2QiwgMHgwNTBCLAorICAgIDB4ODY2QywgMHg4NjZDLCAweDFCRjIsIDB4ODY2RCwgMHg4NjZELCAweDQ3RjAsIDB4ODY2RSwgMHg4NjZFLCAweDFCRjMsCisgICAgMHg4NjZGLCAweDg2NzAsIDB4NDdGMSwgMHg4NjcxLCAweDg2NzEsIDB4MEQ0NCwgMHg4NjcyLCAweDg2NzgsIDB4NDdGMywKKyAgICAweDg2NzksIDB4ODY3OSwgMHgwNzlFLCAweDg2N0EsIDB4ODY3QSwgMHgxQkY1LCAweDg2N0IsIDB4ODY3QiwgMHgxQkY3LAorICAgIDB4ODY3QywgMHg4NjdDLCAweDFCRjYsIDB4ODY3RCwgMHg4NjdELCAweDBERDksIDB4ODY3RSwgMHg4NjdFLCAweDBGMjcsCisgICAgMHg4NjdGLCAweDg2N0YsIDB4MUJGNCwgMHg4NjgwLCAweDg2ODAsIDB4MEQ0QiwgMHg4NjgxLCAweDg2ODEsIDB4MTA1NiwKKyAgICAweDg2ODIsIDB4ODY4MiwgMHgwQTkzLCAweDg2ODMsIDB4ODY4OSwgMHg0N0ZBLCAweDg2OEEsIDB4ODY4QSwgMHgwRUQyLAorICAgIDB4ODY4QiwgMHg4NjhCLCAweDFCRkEsIDB4ODY4QywgMHg4NjhDLCAweDA0MDEsIDB4ODY4RCwgMHg4NjhELCAweDFCRjksCisgICAgMHg4NjhFLCAweDg2OTIsIDB4NDgwMSwgMHg4NjkzLCAweDg2OTMsIDB4MUMwMCwgMHg4Njk0LCAweDg2OTQsIDB4NDgwNiwKKyAgICAweDg2OTUsIDB4ODY5NSwgMHgwNDk2LCAweDg2OTYsIDB4ODY5QiwgMHg0ODA3LCAweDg2OUMsIDB4ODY5QywgMHgwRkVBLAorICAgIDB4ODY5RCwgMHg4NjlELCAweDFCRkMsIDB4ODY5RSwgMHg4NkEyLCAweDQ4MEQsIDB4ODZBMywgMHg4NkEzLCAweDFCRkUsCisgICAgMHg4NkE0LCAweDg2QTQsIDB4MTEyQywgMHg4NkE1LCAweDg2QTYsIDB4NDgxMiwgMHg4NkE3LCAweDg2QTcsIDB4MUJGRCwKKyAgICAweDg2QTgsIDB4ODZBOCwgMHgxQkY4LCAweDg2QTksIDB4ODZBOSwgMHgxQzAxLCAweDg2QUEsIDB4ODZBQSwgMHgxQkZGLAorICAgIDB4ODZBQiwgMHg4NkFCLCAweDQ4MTQsIDB4ODZBQywgMHg4NkFDLCAweDFCRkIsIDB4ODZBRCwgMHg4NkFFLCAweDQ4MTUsCisgICAgMHg4NkFGLCAweDg2QUYsIDB4MUMwOSwgMHg4NkIwLCAweDg2QjAsIDB4MUMwNiwgMHg4NkIxLCAweDg2QjEsIDB4MUMwOCwKKyAgICAweDg2QjIsIDB4ODZCMywgMHg0ODE3LCAweDg2QjQsIDB4ODZCNCwgMHgxQzBDLCAweDg2QjUsIDB4ODZCNSwgMHgxQzA0LAorICAgIDB4ODZCNiwgMHg4NkI2LCAweDFDMDIsIDB4ODZCNywgMHg4NkI5LCAweDQ4MTksIDB4ODZCQSwgMHg4NkJBLCAweDFDMDcsCisgICAgMHg4NkJCLCAweDg2QkYsIDB4NDgxQywgMHg4NkMwLCAweDg2QzAsIDB4MTFGQSwgMHg4NkMxLCAweDg2QzMsIDB4NDgyMSwKKyAgICAweDg2QzQsIDB4ODZDNCwgMHgxQzAzLCAweDg2QzUsIDB4ODZDNSwgMHg0ODI0LCAweDg2QzYsIDB4ODZDNiwgMHgwQzc2LAorICAgIDB4ODZDNywgMHg4NkM3LCAweDBEMTgsIDB4ODZDOCwgMHg4NkM4LCAweDQ4MjUsIDB4ODZDOSwgMHg4NkM5LCAweDFDMEEsCisgICAgMHg4NkNBLCAweDg2Q0EsIDB4MDcxRiwgMHg4NkNCLCAweDg2Q0IsIDB4MDU5MSwgMHg4NkNDLCAweDg2Q0QsIDB4NDgyNiwKKyAgICAweDg2Q0UsIDB4ODZDRSwgMHgxQzA1LCAweDg2Q0YsIDB4ODZDRiwgMHgxQzBCLCAweDg2RDAsIDB4ODZEMCwgMHgxQzEyLAorICAgIDB4ODZEMSwgMHg4NkQxLCAweDFDMTgsIDB4ODZEMiwgMHg4NkQzLCAweDQ4MjgsIDB4ODZENCwgMHg4NkQ0LCAweDA3RUMsCisgICAgMHg4NkQ1LCAweDg2RDcsIDB4NDgyQSwgMHg4NkQ4LCAweDg2RDgsIDB4MUMxNywgMHg4NkQ5LCAweDg2RDksIDB4MEU4RCwKKyAgICAweDg2REEsIDB4ODZEQSwgMHg0ODJELCAweDg2REIsIDB4ODZEQiwgMHgxMUVBLCAweDg2REMsIDB4ODZERCwgMHg0ODJFLAorICAgIDB4ODZERSwgMHg4NkRFLCAweDFDMTQsIDB4ODZERiwgMHg4NkRGLCAweDFDMTYsIDB4ODZFMCwgMHg4NkUzLCAweDQ4MzAsCisgICAgMHg4NkU0LCAweDg2RTQsIDB4MDZFRCwgMHg4NkU1LCAweDg2RTgsIDB4NDgzNCwgMHg4NkU5LCAweDg2RTksIDB4MUMwRCwKKyAgICAweDg2RUEsIDB4ODZFQywgMHg0ODM4LCAweDg2RUQsIDB4ODZFRCwgMHgxQzEwLCAweDg2RUUsIDB4ODZFRSwgMHgwQUEwLAorICAgIDB4ODZFRiwgMHg4NkVGLCAweDQ4M0IsIDB4ODZGMCwgMHg4NkYwLCAweDExN0UsIDB4ODZGMSwgMHg4NkYyLCAweDFDMEUsCisgICAgMHg4NkYzLCAweDg2RjMsIDB4MUMxMSwgMHg4NkY0LCAweDg2RjQsIDB4MUMxNSwgMHg4NkY1LCAweDg2RjcsIDB4NDgzQywKKyAgICAweDg2RjgsIDB4ODZGOCwgMHgxQzFCLCAweDg2RjksIDB4ODZGOSwgMHgxMEExLCAweDg2RkEsIDB4ODZGQSwgMHgyNURBLAorICAgIDB4ODZGQiwgMHg4NkZELCAweDQ4M0YsIDB4ODZGRSwgMHg4NkZFLCAweDA2MjksIDB4ODZGRiwgMHg4NkZGLCAweDQ4NDIsCisgICAgMHg4NzAwLCAweDg3MDAsIDB4MEQ4OCwgMHg4NzAxLCAweDg3MDEsIDB4NDg0MywgMHg4NzAyLCAweDg3MDIsIDB4MDY4MSwKKyAgICAweDg3MDMsIDB4ODcwMywgMHgxQzE5LCAweDg3MDQsIDB4ODcwNSwgMHg0ODQ0LCAweDg3MDYsIDB4ODcwNiwgMHgyNUQ3LAorICAgIDB4ODcwNywgMHg4NzA3LCAweDFDMUEsIDB4ODcwOCwgMHg4NzA4LCAweDFDMUMsIDB4ODcwOSwgMHg4NzA5LCAweDFDMUYsCisgICAgMHg4NzBBLCAweDg3MEEsIDB4MUMxRCwgMHg4NzBCLCAweDg3MEMsIDB4NDg0NiwgMHg4NzBELCAweDg3MEQsIDB4MUMxRSwKKyAgICAweDg3MEUsIDB4ODcxMSwgMHg0ODQ4LCAweDg3MTIsIDB4ODcxMiwgMHgwRkZBLCAweDg3MTMsIDB4ODcxMywgMHgxQzEzLAorICAgIDB4ODcxNCwgMHg4NzE0LCAweDQ4NEMsIDB4ODcxNSwgMHg4NzE1LCAweDBFN0EsIDB4ODcxNiwgMHg4NzE2LCAweDQ4NEQsCisgICAgMHg4NzE3LCAweDg3MTcsIDB4MEVERSwgMHg4NzE4LCAweDg3MTgsIDB4MTFBOCwgMHg4NzE5LCAweDg3MTksIDB4NDg0RSwKKyAgICAweDg3MUEsIDB4ODcxQSwgMHgxQzI1LCAweDg3MUIsIDB4ODcxQiwgMHg0ODRGLCAweDg3MUMsIDB4ODcxQywgMHgwQUUwLAorICAgIDB4ODcxRCwgMHg4NzFELCAweDQ4NTAsIDB4ODcxRSwgMHg4NzFFLCAweDFDMjIsIDB4ODcxRiwgMHg4NzIwLCAweDQ4NTEsCisgICAgMHg4NzIxLCAweDg3MjEsIDB4MDk5QSwgMHg4NzIyLCAweDg3MjIsIDB4MUMyRSwgMHg4NzIzLCAweDg3MjMsIDB4MUMyMCwKKyAgICAweDg3MjQsIDB4ODcyNCwgMHg0ODUzLCAweDg3MjUsIDB4ODcyNSwgMHgxQzIzLCAweDg3MjYsIDB4ODcyOCwgMHg0ODU0LAorICAgIDB4ODcyOSwgMHg4NzI5LCAweDFDMkEsIDB4ODcyQSwgMHg4NzJELCAweDQ4NTcsIDB4ODcyRSwgMHg4NzJFLCAweDFDMjQsCisgICAgMHg4NzJGLCAweDg3MzAsIDB4NDg1QiwgMHg4NzMxLCAweDg3MzEsIDB4MUMyOSwgMHg4NzMyLCAweDg3MzMsIDB4NDg1RCwKKyAgICAweDg3MzQsIDB4ODczNCwgMHgxQzI4LCAweDg3MzUsIDB4ODczNiwgMHg0ODVGLCAweDg3MzcsIDB4ODczNywgMHgxQzJCLAorICAgIDB4ODczOCwgMHg4NzNBLCAweDQ4NjEsIDB4ODczQiwgMHg4NzNCLCAweDFDMjEsIDB4ODczQywgMHg4NzNELCAweDQ4NjQsCisgICAgMHg4NzNFLCAweDg3M0UsIDB4MUMyNiwgMHg4NzNGLCAweDg3M0YsIDB4MUMyQywgMHg4NzQwLCAweDg3NDYsIDB4NDg2NiwKKyAgICAweDg3NDcsIDB4ODc0NywgMHgxMDkxLCAweDg3NDgsIDB4ODc0OCwgMHgxQzI3LCAweDg3NDksIDB4ODc0OSwgMHgwNEJDLAorICAgIDB4ODc0QSwgMHg4NzRCLCAweDQ4NkQsIDB4ODc0QywgMHg4NzRDLCAweDFDMzQsIDB4ODc0RCwgMHg4NzRELCAweDQ4NkYsCisgICAgMHg4NzRFLCAweDg3NEUsIDB4MEY3NiwgMHg4NzRGLCAweDg3NTIsIDB4NDg3MCwgMHg4NzUzLCAweDg3NTMsIDB4MUMzNywKKyAgICAweDg3NTQsIDB4ODc1NCwgMHg0ODc0LCAweDg3NTUsIDB4ODc1NSwgMHgyMTJFLCAweDg3NTYsIDB4ODc1NiwgMHg0ODc1LAorICAgIDB4ODc1NywgMHg4NzU3LCAweDA3REQsIDB4ODc1OCwgMHg4NzU4LCAweDQ4NzYsIDB4ODc1OSwgMHg4NzU5LCAweDFDM0IsCisgICAgMHg4NzVBLCAweDg3NUYsIDB4NDg3NywgMHg4NzYwLCAweDg3NjAsIDB4MUMzMiwgMHg4NzYxLCAweDg3NjIsIDB4NDg3RCwKKyAgICAweDg3NjMsIDB4ODc2MywgMHgxQzM4LCAweDg3NjQsIDB4ODc2NCwgMHgxQzNBLCAweDg3NjUsIDB4ODc2NSwgMHgxQzNDLAorICAgIDB4ODc2NiwgMHg4NzY2LCAweDIxQjIsIDB4ODc2NywgMHg4NzZELCAweDQ4N0YsIDB4ODc2RSwgMHg4NzZFLCAweDFDMzUsCisgICAgMHg4NzZGLCAweDg3NkYsIDB4NDg4NiwgMHg4NzcwLCAweDg3NzAsIDB4MUMzMywgMHg4NzcxLCAweDg3NzMsIDB4NDg4NywKKyAgICAweDg3NzQsIDB4ODc3NCwgMHgwN0IyLCAweDg3NzUsIDB4ODc3NSwgMHg0ODhBLCAweDg3NzYsIDB4ODc3NiwgMHgwNURDLAorICAgIDB4ODc3NywgMHg4Nzc3LCAweDQ4OEIsIDB4ODc3OCwgMHg4Nzc4LCAweDIxOUUsIDB4ODc3OSwgMHg4NzdBLCAweDQ4OEMsCisgICAgMHg4NzdCLCAweDg3N0IsIDB4MUMzMSwgMHg4NzdDLCAweDg3N0MsIDB4MUMzOSwgMHg4NzdELCAweDg3N0UsIDB4MUMyRiwKKyAgICAweDg3N0YsIDB4ODc4MSwgMHg0ODhFLCAweDg3ODIsIDB4ODc4MiwgMHgxQzJELCAweDg3ODMsIDB4ODc4MywgMHgxQzQ2LAorICAgIDB4ODc4NCwgMHg4Nzg0LCAweDI1REMsIDB4ODc4NSwgMHg4Nzg1LCAweDFDNDMsIDB4ODc4NiwgMHg4Nzg3LCAweDQ4OTEsCisgICAgMHg4Nzg4LCAweDg3ODgsIDB4MUM0MiwgMHg4Nzg5LCAweDg3OEEsIDB4NDg5MywgMHg4NzhCLCAweDg3OEIsIDB4MUMzNiwKKyAgICAweDg3OEMsIDB4ODc4QywgMHg0ODk1LCAweDg3OEQsIDB4ODc4RCwgMHgwQ0I1LCAweDg3OEUsIDB4ODc5MiwgMHg0ODk2LAorICAgIDB4ODc5MywgMHg4NzkzLCAweDFDM0QsIDB4ODc5NCwgMHg4Nzk2LCAweDQ4OUIsIDB4ODc5NywgMHg4Nzk3LCAweDFDNDUsCisgICAgMHg4Nzk4LCAweDg3OUQsIDB4NDg5RSwgMHg4NzlFLCAweDg3OUUsIDB4MjA2QywgMHg4NzlGLCAweDg3OUYsIDB4MEFGRCwKKyAgICAweDg3QTAsIDB4ODdBMSwgMHg0OEE0LCAweDg3QTIsIDB4ODdBMiwgMHgyMjI2LCAweDg3QTMsIDB4ODdBNywgMHg0OEE2LAorICAgIDB4ODdBOCwgMHg4N0E4LCAweDFDM0YsIDB4ODdBOSwgMHg4N0FBLCAweDQ4QUIsIDB4ODdBQiwgMHg4N0FCLCAweDFDNDcsCisgICAgMHg4N0FDLCAweDg3QUMsIDB4MUM0OSwgMHg4N0FELCAweDg3QUQsIDB4MUM0NCwgMHg4N0FFLCAweDg3QUUsIDB4NDhBRCwKKyAgICAweDg3QUYsIDB4ODdBRiwgMHgxQzNFLCAweDg3QjAsIDB4ODdCMiwgMHg0OEFFLCAweDg3QjMsIDB4ODdCMywgMHgxQzRCLAorICAgIDB4ODdCNCwgMHg4N0I0LCAweDQ4QjEsIDB4ODdCNSwgMHg4N0I1LCAweDFDNEEsIDB4ODdCNiwgMHg4N0I5LCAweDQ4QjIsCisgICAgMHg4N0JBLCAweDg3QkEsIDB4MEE4NCwgMHg4N0JCLCAweDg3QkIsIDB4MjVFMCwgMHg4N0JDLCAweDg3QkMsIDB4NDhCNiwKKyAgICAweDg3QkQsIDB4ODdCRCwgMHgxQzRFLCAweDg3QkUsIDB4ODdCRiwgMHg0OEI3LCAweDg3QzAsIDB4ODdDMCwgMHgxQzUwLAorICAgIDB4ODdDMSwgMHg4N0MzLCAweDQ4QjksIDB4ODdDNCwgMHg4N0M0LCAweDIyN0IsIDB4ODdDNSwgMHg4N0M1LCAweDQ4QkMsCisgICAgMHg4N0M2LCAweDg3QzYsIDB4MUM0MSwgMHg4N0M3LCAweDg3QzcsIDB4NDhCRCwgMHg4N0M4LCAweDg3QzgsIDB4MjVERSwKKyAgICAweDg3QzksIDB4ODdDOSwgMHg0OEJFLCAweDg3Q0EsIDB4ODdDQSwgMHgxQzUxLCAweDg3Q0IsIDB4ODdDQiwgMHgxQzRDLAorICAgIDB4ODdDQywgMHg4N0NELCAweDQ4QkYsIDB4ODdDRSwgMHg4N0NFLCAweDI1RTEsIDB4ODdDRiwgMHg4N0QwLCAweDQ4QzEsCisgICAgMHg4N0QxLCAweDg3RDEsIDB4MUM0RiwgMHg4N0QyLCAweDg3RDIsIDB4MUM0MCwgMHg4N0QzLCAweDg3RDMsIDB4MUM0RCwKKyAgICAweDg3RDQsIDB4ODdEQSwgMHg0OEMzLCAweDg3REIsIDB4ODdEQiwgMHgxQzUyLCAweDg3REMsIDB4ODdERiwgMHg0OENBLAorICAgIDB4ODdFMCwgMHg4N0UwLCAweDFDNTQsIDB4ODdFMSwgMHg4N0UyLCAweDQ4Q0UsIDB4ODdFMywgMHg4N0UzLCAweDI1RDUsCisgICAgMHg4N0U0LCAweDg3RTQsIDB4NDhEMCwgMHg4N0U1LCAweDg3RTUsIDB4MUM0OCwgMHg4N0U2LCAweDg3RTksIDB4NDhEMSwKKyAgICAweDg3RUEsIDB4ODdFQSwgMHgxQzUzLCAweDg3RUIsIDB4ODdFQiwgMHg0OEQ1LCAweDg3RUMsIDB4ODdFQywgMHgxRTZCLAorICAgIDB4ODdFRCwgMHg4N0VELCAweDQ4RDYsIDB4ODdFRSwgMHg4N0VFLCAweDFDNTUsIDB4ODdFRiwgMHg4N0VGLCAweDI1REIsCisgICAgMHg4N0YwLCAweDg3RjEsIDB4NDhENywgMHg4N0YyLCAweDg3RjIsIDB4MUU4OSwgMHg4N0YzLCAweDg3RjUsIDB4NDhEOSwKKyAgICAweDg3RjYsIDB4ODdGNiwgMHgyNUQ5LCAweDg3RjcsIDB4ODdGOCwgMHg0OERDLCAweDg3RjksIDB4ODdGOSwgMHgwRjgyLAorICAgIDB4ODdGQSwgMHg4N0ZBLCAweDQ4REUsIDB4ODdGQiwgMHg4N0ZCLCAweDIyMTEsIDB4ODdGQywgMHg4N0ZELCAweDQ4REYsCisgICAgMHg4N0ZFLCAweDg3RkUsIDB4MUM1OCwgMHg4N0ZGLCAweDg3RkYsIDB4NDhFMSwgMHg4ODAwLCAweDg4MDIsIDB4NDhFMiwKKyAgICAweDg4MDMsIDB4ODgwMywgMHgxMzBELCAweDg4MDQsIDB4ODgwNCwgMHg0OEU1LCAweDg4MDUsIDB4ODgwNSwgMHgyMjI5LAorICAgIDB4ODgwNiwgMHg4ODA2LCAweDI1RDYsIDB4ODgwNywgMHg4ODA5LCAweDQ4RTYsIDB4ODgwQSwgMHg4ODBBLCAweDFDNTksCisgICAgMHg4ODBCLCAweDg4MEYsIDB4NDhFOSwgMHg4ODEwLCAweDg4MTAsIDB4MjVERCwgMHg4ODExLCAweDg4MTEsIDB4MjVERiwKKyAgICAweDg4MTIsIDB4ODgxMiwgMHg0OEVFLCAweDg4MTMsIDB4ODgxMywgMHgxQzU3LCAweDg4MTQsIDB4ODgxNCwgMHg0OEVGLAorICAgIDB4ODgxNSwgMHg4ODE1LCAweDBDQkYsIDB4ODgxNiwgMHg4ODE2LCAweDFDNTYsIDB4ODgxNywgMHg4ODFBLCAweDQ4RjAsCisgICAgMHg4ODFCLCAweDg4MUIsIDB4MUM1QSwgMHg4ODFDLCAweDg4MUUsIDB4NDhGNCwgMHg4ODFGLCAweDg4MUYsIDB4MUZFRiwKKyAgICAweDg4MjAsIDB4ODgyMCwgMHg0OEY3LCAweDg4MjEsIDB4ODgyMSwgMHgxQzVCLCAweDg4MjIsIDB4ODgyMiwgMHgwNTQzLAorICAgIDB4ODgyMywgMHg4ODIzLCAweDI1RDgsIDB4ODgyNCwgMHg4ODMwLCAweDQ4RjgsIDB4ODgzMSwgMHg4ODMxLCAweDFGMjksCisgICAgMHg4ODMyLCAweDg4MzIsIDB4MUE4RCwgMHg4ODMzLCAweDg4MzUsIDB4NDkwNSwgMHg4ODM2LCAweDg4MzYsIDB4MUU1QiwKKyAgICAweDg4MzcsIDB4ODgzOCwgMHg0OTA4LCAweDg4MzksIDB4ODgzOSwgMHgxQzVDLCAweDg4M0EsIDB4ODgzQSwgMHg0OTBBLAorICAgIDB4ODgzQiwgMHg4ODNCLCAweDIwNzYsIDB4ODgzQywgMHg4ODNDLCAweDFDNUQsIDB4ODgzRCwgMHg4ODNGLCAweDQ5MEIsCisgICAgMHg4ODQwLCAweDg4NDAsIDB4MEZEMywgMHg4ODQxLCAweDg4NDMsIDB4NDkwRSwgMHg4ODQ0LCAweDg4NDQsIDB4MUNBQSwKKyAgICAweDg4NDUsIDB4ODg0NSwgMHgwRjkxLCAweDg4NDYsIDB4ODg0NiwgMHgyMjk3LCAweDg4NDcsIDB4ODg0OSwgMHg0OTExLAorICAgIDB4ODg0QSwgMHg4ODRBLCAweDI2OTAsIDB4ODg0QiwgMHg4ODRCLCAweDQ5MTQsIDB4ODg0QywgMHg4ODRDLCAweDBGOUIsCisgICAgMHg4ODRELCAweDg4NEQsIDB4MTAwNSwgMHg4ODRFLCAweDg4NTIsIDB4NDkxNSwgMHg4ODUzLCAweDg4NTMsIDB4MjEzRiwKKyAgICAweDg4NTQsIDB4ODg1NCwgMHgwRjNCLCAweDg4NTUsIDB4ODg1NiwgMHg0OTFBLCAweDg4NTcsIDB4ODg1NywgMHgwOEE3LAorICAgIDB4ODg1OCwgMHg4ODU4LCAweDQ5MUMsIDB4ODg1OSwgMHg4ODU5LCAweDBGRUMsIDB4ODg1QSwgMHg4ODVBLCAweDQ5MUQsCisgICAgMHg4ODVCLCAweDg4NUIsIDB4MjE5OCwgMHg4ODVDLCAweDg4NUMsIDB4NDkxRSwgMHg4ODVELCAweDg4NUQsIDB4MUU4OCwKKyAgICAweDg4NUUsIDB4ODg2MCwgMHg0OTFGLCAweDg4NjEsIDB4ODg2MSwgMHgwNzk5LCAweDg4NjIsIDB4ODg2MiwgMHgxNUVELAorICAgIDB4ODg2MywgMHg4ODYzLCAweDEwNDksIDB4ODg2NCwgMHg4ODY0LCAweDFCQTYsIDB4ODg2NSwgMHg4ODY1LCAweDA0ODAsCisgICAgMHg4ODY2LCAweDg4NjcsIDB4NDkyMiwgMHg4ODY4LCAweDg4NjgsIDB4MDQ1NiwgMHg4ODY5LCAweDg4NjksIDB4MUJBNywKKyAgICAweDg4NkEsIDB4ODg2QSwgMHg0OTI0LCAweDg4NkIsIDB4ODg2QiwgMHgwQ0Y5LCAweDg4NkMsIDB4ODg2QywgMHgwNEU5LAorICAgIDB4ODg2RCwgMHg4ODZELCAweDQ5MjUsIDB4ODg2RSwgMHg4ODZFLCAweDEzMDYsIDB4ODg2RiwgMHg4ODZGLCAweDQ5MjYsCisgICAgMHg4ODcwLCAweDg4NzAsIDB4MEQ5QSwgMHg4ODcxLCAweDg4NzEsIDB4NDkyNywgMHg4ODcyLCAweDg4NzIsIDB4MUJBOCwKKyAgICAweDg4NzMsIDB4ODg3NiwgMHg0OTI4LCAweDg4NzcsIDB4ODg3NywgMHgxMUQzLCAweDg4NzgsIDB4ODg3OCwgMHg0OTJDLAorICAgIDB4ODg3OSwgMHg4ODc5LCAweDIyOEMsIDB4ODg3QSwgMHg4ODdDLCAweDQ5MkQsIDB4ODg3RCwgMHg4ODdELCAweDFCQTksCisgICAgMHg4ODdFLCAweDg4N0UsIDB4MUNCRSwgMHg4ODdGLCAweDg4N0YsIDB4MUJBQSwgMHg4ODgwLCAweDg4ODAsIDB4NDkzMCwKKyAgICAweDg4ODEsIDB4ODg4MSwgMHgxMEVGLCAweDg4ODIsIDB4ODg4MiwgMHgxQkFCLCAweDg4ODMsIDB4ODg4MywgMHg0OTMxLAorICAgIDB4ODg4NCwgMHg4ODg0LCAweDAzQ0IsIDB4ODg4NSwgMHg4ODg1LCAweDFDQkYsIDB4ODg4NiwgMHg4ODg3LCAweDQ5MzIsCisgICAgMHg4ODg4LCAweDg4ODgsIDB4MUNDMCwgMHg4ODg5LCAweDg4OEEsIDB4NDkzNCwgMHg4ODhCLCAweDg4OEIsIDB4MDU3RiwKKyAgICAweDg4OEMsIDB4ODg4QywgMHg0OTM2LCAweDg4OEQsIDB4ODg4RCwgMHgwQjlDLCAweDg4OEUsIDB4ODg5MSwgMHg0OTM3LAorICAgIDB4ODg5MiwgMHg4ODkyLCAweDBFMEUsIDB4ODg5MywgMHg4ODk1LCAweDQ5M0IsIDB4ODg5NiwgMHg4ODk2LCAweDBGQUYsCisgICAgMHg4ODk3LCAweDg4OUIsIDB4NDkzRSwgMHg4ODlDLCAweDg4OUMsIDB4MEU5MSwgMHg4ODlELCAweDg4QTEsIDB4NDk0MywKKyAgICAweDg4QTIsIDB4ODhBMiwgMHgxQkFDLCAweDg4QTMsIDB4ODhBMywgMHg0OTQ4LCAweDg4QTQsIDB4ODhBNCwgMHgxMzA3LAorICAgIDB4ODhBNSwgMHg4OEFBLCAweDQ5NDksIDB4ODhBQiwgMHg4OEFCLCAweDA0MjQsIDB4ODhBQywgMHg4OEFDLCAweDQ5NEYsCisgICAgMHg4OEFELCAweDg4QUQsIDB4MEYxQiwgMHg4OEFFLCAweDg4QjAsIDB4NDk1MCwgMHg4OEIxLCAweDg4QjEsIDB4MDY5RiwKKyAgICAweDg4QjIsIDB4ODhCNiwgMHg0OTUzLCAweDg4QjcsIDB4ODhCNywgMHgxQkFFLCAweDg4QjgsIDB4ODhCQiwgMHg0OTU4LAorICAgIDB4ODhCQywgMHg4OEJDLCAweDFCQUYsIDB4ODhCRCwgMHg4OEMwLCAweDQ5NUMsIDB4ODhDMSwgMHg4OEMxLCAweDA0OEEsCisgICAgMHg4OEMyLCAweDg4QzIsIDB4MEExQSwgMHg4OEMzLCAweDg4QzQsIDB4NDk2MCwgMHg4OEM1LCAweDg4QzUsIDB4MTIwRCwKKyAgICAweDg4QzYsIDB4ODhDNiwgMHgxQkFELCAweDg4QzcsIDB4ODhDOCwgMHg0OTYyLCAweDg4QzksIDB4ODhDOSwgMHgxQkIwLAorICAgIDB4ODhDQSwgMHg4OENBLCAweDI1RjEsIDB4ODhDQiwgMHg4OENELCAweDQ5NjQsIDB4ODhDRSwgMHg4OENFLCAweDFCQjIsCisgICAgMHg4OENGLCAweDg4Q0YsIDB4MjAwQywgMHg4OEQwLCAweDg4RDEsIDB4NDk2NywgMHg4OEQyLCAweDg4RDIsIDB4MTMwQSwKKyAgICAweDg4RDMsIDB4ODhEMywgMHg0OTY5LCAweDg4RDQsIDB4ODhENCwgMHgxMDY4LCAweDg4RDUsIDB4ODhENSwgMHgxMEU2LAorICAgIDB4ODhENiwgMHg4OEQ3LCAweDQ5NkEsIDB4ODhEOCwgMHg4OEQ4LCAweDFDQzEsIDB4ODhEOSwgMHg4OEQ5LCAweDBDOTQsCisgICAgMHg4OERBLCAweDg4REIsIDB4NDk2QywgMHg4OERDLCAweDg4REMsIDB4MUU1OCwgMHg4OERELCAweDg4REQsIDB4MjJBQywKKyAgICAweDg4REUsIDB4ODhERSwgMHg0OTZFLCAweDg4REYsIDB4ODhERiwgMHgxQ0MyLCAweDg4RTAsIDB4ODhFMSwgMHg0OTZGLAorICAgIDB4ODhFMiwgMHg4OEUyLCAweDFCQjEsIDB4ODhFMywgMHg4OEUzLCAweDFCQjMsIDB4ODhFNCwgMHg4OEU0LCAweDA5NzAsCisgICAgMHg4OEU1LCAweDg4RTUsIDB4MUJCNCwgMHg4OEU2LCAweDg4RTcsIDB4NDk3MSwgMHg4OEU4LCAweDg4RTgsIDB4MUJCOCwKKyAgICAweDg4RTksIDB4ODhFRiwgMHg0OTczLCAweDg4RjAsIDB4ODhGMCwgMHgxQkJBLCAweDg4RjEsIDB4ODhGMSwgMHgxQkI1LAorICAgIDB4ODhGMiwgMHg4OEYyLCAweDQ5N0EsIDB4ODhGMywgMHg4OEYzLCAweDBEMEEsIDB4ODhGNCwgMHg4OEY0LCAweDBCQTIsCisgICAgMHg4OEY1LCAweDg4RjcsIDB4NDk3QiwgMHg4OEY4LCAweDg4RjgsIDB4MEE4QSwgMHg4OEY5LCAweDg4RjksIDB4MDc1NSwKKyAgICAweDg4RkEsIDB4ODhGQiwgMHg0OTdFLCAweDg4RkMsIDB4ODhGQywgMHgxQkI3LCAweDg4RkQsIDB4ODhGRCwgMHgyNkE3LAorICAgIDB4ODhGRSwgMHg4OEZFLCAweDFCQjksIDB4ODhGRiwgMHg4OEZGLCAweDQ5ODAsIDB4ODkwMCwgMHg4OTAxLCAweDQ5ODEsCisgICAgMHg4OTAyLCAweDg5MDIsIDB4MDcyQywgMHg4OTAzLCAweDg5MDYsIDB4NDk4MywgMHg4OTA3LCAweDg5MDcsIDB4MjY3NiwKKyAgICAweDg5MDgsIDB4ODkwOSwgMHg0OTg3LCAweDg5MEEsIDB4ODkwQSwgMHgxQkJGLCAweDg5MEIsIDB4ODkwRiwgMHg0OTg5LAorICAgIDB4ODkxMCwgMHg4OTEwLCAweDA3OEQsIDB4ODkxMSwgMHg4OTExLCAweDQ5OEUsIDB4ODkxMiwgMHg4OTEyLCAweDA0MDgsCisgICAgMHg4OTEzLCAweDg5MTMsIDB4MUJCRCwgMHg4OTE0LCAweDg5MTgsIDB4NDk4RiwgMHg4OTE5LCAweDg5MTksIDB4MUJCQywKKyAgICAweDg5MUEsIDB4ODkxQSwgMHgxQkI2LCAweDg5MUIsIDB4ODkxQiwgMHgxQkJFLCAweDg5MUMsIDB4ODkyMCwgMHg0OTk0LAorICAgIDB4ODkyMSwgMHg4OTIxLCAweDFCQkIsIDB4ODkyMiwgMHg4OTI0LCAweDQ5OTksIDB4ODkyNSwgMHg4OTI1LCAweDBDQzcsCisgICAgMHg4OTI2LCAweDg5MjksIDB4NDk5QywgMHg4OTJBLCAweDg5MkEsIDB4MEU3QiwgMHg4OTJCLCAweDg5MkIsIDB4MUJDMSwKKyAgICAweDg5MkMsIDB4ODkyRiwgMHg0OUEwLCAweDg5MzAsIDB4ODkzMCwgMHgxNzM5LCAweDg5MzEsIDB4ODkzMSwgMHg0OUE0LAorICAgIDB4ODkzMiwgMHg4OTMyLCAweDFGRTEsIDB4ODkzMywgMHg4OTMzLCAweDI1QkIsIDB4ODkzNCwgMHg4OTM0LCAweDFCQzAsCisgICAgMHg4OTM1LCAweDg5MzUsIDB4NDlBNSwgMHg4OTM2LCAweDg5MzYsIDB4MUJDMiwgMHg4OTM3LCAweDg5MzcsIDB4NDlBNiwKKyAgICAweDg5MzgsIDB4ODkzOCwgMHgyNUJFLCAweDg5MzksIDB4ODkzQSwgMHg0OUE3LCAweDg5M0IsIDB4ODkzQiwgMHgyMkRELAorICAgIDB4ODkzQywgMHg4OTQwLCAweDQ5QTksIDB4ODk0MSwgMHg4OTQxLCAweDFCQzMsIDB4ODk0MiwgMHg4OTQzLCAweDQ5QUUsCisgICAgMHg4OTQ0LCAweDg5NDQsIDB4MEY1MiwgMHg4OTQ1LCAweDg5NDYsIDB4NDlCMCwgMHg4OTQ3LCAweDg5NDcsIDB4MjVCRCwKKyAgICAweDg5NDgsIDB4ODk1NSwgMHg0OUIyLCAweDg5NTYsIDB4ODk1NiwgMHgxRTJBLCAweDg5NTcsIDB4ODk1QywgMHg0OUMwLAorICAgIDB4ODk1RCwgMHg4OTVELCAweDI1QkMsIDB4ODk1RSwgMHg4OTVFLCAweDFDQzMsIDB4ODk1RiwgMHg4OTVGLCAweDA4QzQsCisgICAgMHg4OTYwLCAweDg5NjAsIDB4MjVCQSwgMHg4OTYxLCAweDg5NjMsIDB4NDlDNiwgMHg4OTY0LCAweDg5NjQsIDB4MjVCRiwKKyAgICAweDg5NjUsIDB4ODk2NSwgMHg0OUM5LCAweDg5NjYsIDB4ODk2NiwgMHgxQkM0LCAweDg5NjcsIDB4ODk2OSwgMHg0OUNBLAorICAgIDB4ODk2QSwgMHg4OTZBLCAweDIxODcsIDB4ODk2QiwgMHg4OTZCLCAweDQ5Q0QsIDB4ODk2QywgMHg4OTZDLCAweDI2NkIsCisgICAgMHg4OTZELCAweDg5NkUsIDB4NDlDRSwgMHg4OTZGLCAweDg5NkYsIDB4MUU3RiwgMHg4OTcwLCAweDg5NzEsIDB4NDlEMCwKKyAgICAweDg5NzIsIDB4ODk3MiwgMHgyMUFELCAweDg5NzMsIDB4ODk3QSwgMHg0OUQyLCAweDg5N0IsIDB4ODk3QiwgMHgxQkM1LAorICAgIDB4ODk3QywgMHg4OTdFLCAweDQ5REEsIDB4ODk3RiwgMHg4OTdGLCAweDBGMDYsIDB4ODk4MCwgMHg4OTgwLCAweDQ5REQsCisgICAgMHg4OTgxLCAweDg5ODEsIDB4MTAzMSwgMHg4OTgyLCAweDg5ODIsIDB4NDlERSwgMHg4OTgzLCAweDg5ODMsIDB4MUJERiwKKyAgICAweDg5ODQsIDB4ODk4NSwgMHg0OURGLCAweDg5ODYsIDB4ODk4NiwgMHgwNkFELCAweDg5ODcsIDB4ODk4QSwgMHg0OUUxLAorICAgIDB4ODk4QiwgMHg4OThCLCAweDFGOTYsIDB4ODk4QywgMHg4OThFLCAweDQ5RTUsIDB4ODk4RiwgMHg4OThGLCAweDFGMzIsCisgICAgMHg4OTkwLCAweDg5OTIsIDB4NDlFOCwgMHg4OTkzLCAweDg5OTMsIDB4MjA4NCwgMHg4OTk0LCAweDg5OTUsIDB4NDlFQiwKKyAgICAweDg5OTYsIDB4ODk5NiwgMHgyMTM2LCAweDg5OTcsIDB4ODk5NywgMHg0OUVELCAweDg5OTgsIDB4ODk5OCwgMHgyNEI4LAorICAgIDB4ODk5OSwgMHg4OUEwLCAweDQ5RUUsIDB4ODlBMSwgMHg4OUExLCAweDI0QkEsIDB4ODlBMiwgMHg4OUE1LCAweDQ5RjYsCisgICAgMHg4OUE2LCAweDg5QTYsIDB4MjRCQywgMHg4OUE3LCAweDg5QTksIDB4NDlGQSwgMHg4OUFBLCAweDg5QUEsIDB4MjBFNCwKKyAgICAweDg5QUIsIDB4ODlBQiwgMHg0OUZELCAweDg5QUMsIDB4ODlBQywgMHgyNEI5LCAweDg5QUQsIDB4ODlBRSwgMHg0OUZFLAorICAgIDB4ODlBRiwgMHg4OUFGLCAweDI0QkQsIDB4ODlCMCwgMHg4OUIxLCAweDRBMDAsIDB4ODlCMiwgMHg4OUIyLCAweDI0QkUsCisgICAgMHg4OUIzLCAweDg5QjYsIDB4NEEwMiwgMHg4OUI3LCAweDg5QjcsIDB4MjRCRiwgMHg4OUI4LCAweDg5QjksIDB4NEEwNiwKKyAgICAweDg5QkEsIDB4ODlCQSwgMHgxRkQyLCAweDg5QkIsIDB4ODlCQywgMHg0QTA4LCAweDg5QkQsIDB4ODlCRCwgMHgxRkZELAorICAgIDB4ODlCRSwgMHg4OUJFLCAweDRBMEEsIDB4ODlCRiwgMHg4OUJGLCAweDI0QkIsIDB4ODlDMCwgMHg4OUMwLCAweDFGMkQsCisgICAgMHg4OUMxLCAweDg5QzEsIDB4MDg2RSwgMHg4OUMyLCAweDg5QzIsIDB4MDczNCwgMHg4OUMzLCAweDg5QzMsIDB4NEEwQiwKKyAgICAweDg5QzQsIDB4ODlDNCwgMHgwNzNGLCAweDg5QzUsIDB4ODlDNSwgMHgwQURFLCAweDg5QzYsIDB4ODlDNiwgMHgwRDZBLAorICAgIDB4ODlDNywgMHg4OUM3LCAweDE5M0EsIDB4ODlDOCwgMHg4OUM4LCAweDA5QUIsIDB4ODlDOSwgMHg4OUM5LCAweDA5MjQsCisgICAgMHg4OUNBLCAweDg5Q0MsIDB4MTkzQiwgMHg4OUNELCAweDg5Q0QsIDB4NEEwQywgMHg4OUNFLCAweDg5RDEsIDB4MTkzRSwKKyAgICAweDg5RDIsIDB4ODlEMiwgMHgwODk4LCAweDg5RDMsIDB4ODlENSwgMHg0QTBELCAweDg5RDYsIDB4ODlENiwgMHgxRDU3LAorICAgIDB4ODlENywgMHg4OUQ5LCAweDRBMTAsIDB4ODlEQSwgMHg4OURBLCAweDFENTksIDB4ODlEQiwgMHg4OURCLCAweDRBMTMsCisgICAgMHg4OURDLCAweDg5REMsIDB4MUQ1QSwgMHg4OURELCAweDg5REQsIDB4NEExNCwgMHg4OURFLCAweDg5REUsIDB4MUQ1OCwKKyAgICAweDg5REYsIDB4ODlFMiwgMHg0QTE1LCAweDg5RTMsIDB4ODlFMywgMHgwOEIzLCAweDg5RTQsIDB4ODlFNCwgMHg0QTE5LAorICAgIDB4ODlFNSwgMHg4OUU1LCAweDFENUIsIDB4ODlFNiwgMHg4OUU2LCAweDA1MjgsIDB4ODlFNywgMHg4OUVBLCAweDRBMUEsCisgICAgMHg4OUVCLCAweDg5RUIsIDB4MUQ1QywgMHg4OUVDLCAweDg5RUUsIDB4NEExRSwgMHg4OUVGLCAweDg5RUYsIDB4MUQ1RCwKKyAgICAweDg5RjAsIDB4ODlGMiwgMHg0QTIxLCAweDg5RjMsIDB4ODlGMywgMHgxOUMwLCAweDg5RjQsIDB4ODlGNCwgMHgyNjA5LAorICAgIDB4ODlGNSwgMHg4OUY1LCAweDRBMjQsIDB4ODlGNiwgMHg4OUY2LCAweDI2MEEsIDB4ODlGNywgMHg4OUY3LCAweDRBMjUsCisgICAgMHg4OUY4LCAweDg5RjgsIDB4MUU5NCwgMHg4OUY5LCAweDg5RkYsIDB4NEEyNiwgMHg4QTAwLCAweDhBMDAsIDB4MEZGRCwKKyAgICAweDhBMDEsIDB4OEEwMSwgMHgyMkRGLCAweDhBMDIsIDB4OEEwMiwgMHgxRUNCLCAweDhBMDMsIDB4OEEwMywgMHgxRjBELAorICAgIDB4OEEwNCwgMHg4QTA2LCAweDRBMkQsIDB4OEEwNywgMHg4QTA3LCAweDEyRkUsIDB4OEEwOCwgMHg4QTA4LCAweDFGNzcsCisgICAgMHg4QTA5LCAweDhBMDksIDB4NEEzMCwgMHg4QTBBLCAweDhBMEEsIDB4MjFFQiwgMHg4QTBCLCAweDhBMEIsIDB4NEEzMSwKKyAgICAweDhBMEMsIDB4OEEwQywgMHgyMkUxLCAweDhBMEQsIDB4OEEwRCwgMHg0QTMyLCAweDhBMEUsIDB4OEEwRSwgMHgyMTZGLAorICAgIDB4OEEwRiwgMHg4QTBGLCAweDRBMzMsIDB4OEExMCwgMHg4QTEwLCAweDIyRTAsIDB4OEExMSwgMHg4QTEyLCAweDRBMzQsCisgICAgMHg4QTEzLCAweDhBMTMsIDB4MjFFQSwgMHg4QTE0LCAweDhBMTQsIDB4NEEzNiwgMHg4QTE1LCAweDhBMTUsIDB4MjJFMiwKKyAgICAweDhBMTYsIDB4OEExNiwgMHgyMENCLCAweDhBMTcsIDB4OEExNywgMHg0QTM3LCAweDhBMTgsIDB4OEExOCwgMHgxRjc4LAorICAgIDB4OEExOSwgMHg4QTFBLCAweDRBMzgsIDB4OEExQiwgMHg4QTFCLCAweDFFRTIsIDB4OEExQywgMHg4QTFDLCAweDRBM0EsCisgICAgMHg4QTFELCAweDhBMUQsIDB4MjFGMiwgMHg4QTFFLCAweDhBMUUsIDB4NEEzQiwgMHg4QTFGLCAweDhBMUYsIDB4MjE1MCwKKyAgICAweDhBMjAsIDB4OEEyMiwgMHg0QTNDLCAweDhBMjMsIDB4OEEyMywgMHgxRkQzLCAweDhBMjQsIDB4OEEyNCwgMHg0QTNGLAorICAgIDB4OEEyNSwgMHg4QTI1LCAweDIyRTUsIDB4OEEyNiwgMHg4QTI5LCAweDRBNDAsIDB4OEEyQSwgMHg4QTJBLCAweDFFRjIsCisgICAgMHg4QTJCLCAweDhBMkMsIDB4NEE0NCwgMHg4QTJELCAweDhBMkQsIDB4MjExRiwgMHg4QTJFLCAweDhBMzAsIDB4NEE0NiwKKyAgICAweDhBMzEsIDB4OEEzMSwgMHgyMURELCAweDhBMzIsIDB4OEEzMywgMHg0QTQ5LCAweDhBMzQsIDB4OEEzNCwgMHgyMTU0LAorICAgIDB4OEEzNSwgMHg4QTM1LCAweDRBNEIsIDB4OEEzNiwgMHg4QTM2LCAweDIyRTcsIDB4OEEzNywgMHg4QTM5LCAweDRBNEMsCisgICAgMHg4QTNBLCAweDhBM0EsIDB4MjI4MiwgMHg4QTNCLCAweDhBM0QsIDB4NEE0RiwgMHg4QTNFLCAweDhBM0UsIDB4MUQ1RSwKKyAgICAweDhBM0YsIDB4OEE0MCwgMHg0QTUyLCAweDhBNDEsIDB4OEE0MSwgMHgyMkU2LCAweDhBNDIsIDB4OEE0NSwgMHg0QTU0LAorICAgIDB4OEE0NiwgMHg4QTQ2LCAweDIyRTgsIDB4OEE0NywgMHg4QTQ3LCAweDRBNTgsIDB4OEE0OCwgMHg4QTQ4LCAweDFBODQsCisgICAgMHg4QTQ5LCAweDhBNEQsIDB4NEE1OSwgMHg4QTRFLCAweDhBNEUsIDB4MjJFNCwgMHg4QTRGLCAweDhBNEYsIDB4NEE1RSwKKyAgICAweDhBNTAsIDB4OEE1MCwgMHgyMjZBLCAweDhBNTEsIDB4OEE1MSwgMHg0QTVGLCAweDhBNTIsIDB4OEE1MiwgMHgyMkVCLAorICAgIDB4OEE1MywgMHg4QTUzLCAweDRBNjAsIDB4OEE1NCwgMHg4QTU0LCAweDIyRTksIDB4OEE1NSwgMHg4QTU1LCAweDIwQkQsCisgICAgMHg4QTU2LCAweDhBNTcsIDB4NEE2MSwgMHg4QTU4LCAweDhBNTgsIDB4MjJFQSwgMHg4QTU5LCAweDhBNUEsIDB4NEE2MywKKyAgICAweDhBNUIsIDB4OEE1QiwgMHgyMkJELCAweDhBNUMsIDB4OEE1RCwgMHg0QTY1LCAweDhBNUUsIDB4OEE1RSwgMHgxRTlFLAorICAgIDB4OEE1RiwgMHg4QTYwLCAweDRBNjcsIDB4OEE2MSwgMHg4QTYxLCAweDIyRjYsIDB4OEE2MiwgMHg4QTYyLCAweDIxRTcsCisgICAgMHg4QTYzLCAweDhBNjMsIDB4MjIxNiwgMHg4QTY0LCAweDhBNjUsIDB4NEE2OSwgMHg4QTY2LCAweDhBNjYsIDB4MjEzNywKKyAgICAweDhBNjcsIDB4OEE2OCwgMHg0QTZCLCAweDhBNjksIDB4OEE2OSwgMHgyMTJDLCAweDhBNkEsIDB4OEE2QSwgMHg0QTZELAorICAgIDB4OEE2QiwgMHg4QTZCLCAweDFFNjgsIDB4OEE2QywgMHg4QTZDLCAweDIyRjIsIDB4OEE2RCwgMHg4QTZELCAweDFGMzcsCisgICAgMHg4QTZFLCAweDhBNkUsIDB4MjJGMywgMHg4QTZGLCAweDhBNkYsIDB4NEE2RSwgMHg4QTcwLCAweDhBNzAsIDB4MjJFRiwKKyAgICAweDhBNzEsIDB4OEE3MSwgMHgxRjUwLCAweDhBNzIsIDB4OEE3MiwgMHgxRjEwLCAweDhBNzMsIDB4OEE3MywgMHgyMUM4LAorICAgIDB4OEE3NCwgMHg4QTc0LCAweDRBNkYsIDB4OEE3NSwgMHg4QTc1LCAweDIyRjEsIDB4OEE3NiwgMHg4QTc4LCAweDRBNzAsCisgICAgMHg4QTc5LCAweDhBNzksIDB4MTE1MywgMHg4QTdBLCAweDhBN0IsIDB4NEE3MywgMHg4QTdDLCAweDhBN0MsIDB4MjJGMCwKKyAgICAweDhBN0QsIDB4OEE3RSwgMHg0QTc1LCAweDhBN0YsIDB4OEE3RiwgMHgyMkVFLCAweDhBODAsIDB4OEE4MywgMHg0QTc3LAorICAgIDB4OEE4NCwgMHg4QTg0LCAweDIyRUQsIDB4OEE4NSwgMHg4QTg1LCAweDIyOUUsIDB4OEE4NiwgMHg4QTg2LCAweDIyRUMsCisgICAgMHg4QTg3LCAweDhBODcsIDB4MUZFMiwgMHg4QTg4LCAweDhBODgsIDB4NEE3QiwgMHg4QTg5LCAweDhBODksIDB4MTBFMywKKyAgICAweDhBOEEsIDB4OEE4QSwgMHgwRTJGLCAweDhBOEIsIDB4OEE4QywgMHg0QTdDLCAweDhBOEQsIDB4OEE4RCwgMHgyMEZFLAorICAgIDB4OEE4RSwgMHg4QTkwLCAweDRBN0UsIDB4OEE5MSwgMHg4QTkyLCAweDIyRjksIDB4OEE5MywgMHg4QTkzLCAweDBENUIsCisgICAgMHg4QTk0LCAweDhBOTQsIDB4NEE4MSwgMHg4QTk1LCAweDhBOTUsIDB4MUVBRiwgMHg4QTk2LCAweDhBOTcsIDB4NEE4MiwKKyAgICAweDhBOTgsIDB4OEE5OCwgMHgyMjM2LCAweDhBOTksIDB4OEE5OSwgMHg0QTg0LCAweDhBOUEsIDB4OEE5QSwgMHgyMkY3LAorICAgIDB4OEE5QiwgMHg4QTlELCAweDRBODUsIDB4OEE5RSwgMHg4QTlFLCAweDIyM0QsIDB4OEE5RiwgMHg4QTlGLCAweDRBODgsCisgICAgMHg4QUEwLCAweDhBQTAsIDB4MUU4MiwgMHg4QUExLCAweDhBQTEsIDB4MUZCNiwgMHg4QUEyLCAweDhBQTIsIDB4NEE4OSwKKyAgICAweDhBQTMsIDB4OEFBMywgMHgyMUE0LCAweDhBQTQsIDB4OEFBNCwgMHgyMUFBLCAweDhBQTUsIDB4OEFBNSwgMHgyMkY4LAorICAgIDB4OEFBNiwgMHg4QUE2LCAweDIxNTEsIDB4OEFBNywgMHg4QUE3LCAweDRBOEEsIDB4OEFBOCwgMHg4QUE4LCAweDFGNjAsCisgICAgMHg4QUE5LCAweDhBQUIsIDB4NEE4QiwgMHg4QUFDLCAweDhBQUMsIDB4MjE0NywgMHg4QUFELCAweDhBQUYsIDB4NEE4RSwKKyAgICAweDhBQjAsIDB4OEFCMCwgMHgyMTQ1LCAweDhBQjEsIDB4OEFCMSwgMHg0QTkxLCAweDhBQjIsIDB4OEFCMiwgMHgxRkRDLAorICAgIDB4OEFCMywgMHg4QUI1LCAweDRBOTIsIDB4OEFCNiwgMHg4QUI2LCAweDIzMDEsIDB4OEFCNywgMHg4QUI4LCAweDRBOTUsCisgICAgMHg4QUI5LCAweDhBQjksIDB4MUVGNSwgMHg4QUJBLCAweDhBQkIsIDB4NEE5NywgMHg4QUJDLCAweDhBQkMsIDB4MjIxOCwKKyAgICAweDhBQkQsIDB4OEFCRSwgMHg0QTk5LCAweDhBQkYsIDB4OEFCRiwgMHgxRUM2LCAweDhBQzAsIDB4OEFDMSwgMHg0QTlCLAorICAgIDB4OEFDMiwgMHg4QUMyLCAweDIzMDAsIDB4OEFDMywgMHg4QUMzLCAweDRBOUQsIDB4OEFDNCwgMHg4QUM0LCAweDIyQjQsCisgICAgMHg4QUM1LCAweDhBQzYsIDB4NEE5RSwgMHg4QUM3LCAweDhBQzcsIDB4MjE2OSwgMHg4QUM4LCAweDhBQzgsIDB4NEFBMCwKKyAgICAweDhBQzksIDB4OEFDOSwgMHgyMkZELCAweDhBQ0EsIDB4OEFDQSwgMHg0QUExLCAweDhBQ0IsIDB4OEFDQiwgMHgyMEVBLAorICAgIDB4OEFDQywgMHg4QUNDLCAweDRBQTIsIDB4OEFDRCwgMHg4QUNELCAweDIyRjQsIDB4OEFDRSwgMHg4QUNFLCAweDRBQTMsCisgICAgMHg4QUNGLCAweDhBQ0YsIDB4MjJGQiwgMHg4QUQwLCAweDhBRDAsIDB4NEFBNCwgMHg4QUQxLCAweDhBRDEsIDB4MjJGQywKKyAgICAweDhBRDIsIDB4OEFEMiwgMHgyMDI3LCAweDhBRDMsIDB4OEFENSwgMHg0QUE1LCAweDhBRDYsIDB4OEFENiwgMHgyMDYwLAorICAgIDB4OEFENywgMHg4QUQ3LCAweDIyRkYsIDB4OEFEOCwgMHg4QURBLCAweDRBQTgsIDB4OEFEQiwgMHg4QURCLCAweDIyRkUsCisgICAgMHg4QURDLCAweDhBREMsIDB4MUVDNywgMHg4QURELCAweDhBREQsIDB4NEFBQiwgMHg4QURFLCAweDhBREUsIDB4MjMwQywKKyAgICAweDhBREYsIDB4OEFFMSwgMHg0QUFDLCAweDhBRTIsIDB4OEFFMiwgMHgyMkY1LCAweDhBRTMsIDB4OEFFMywgMHg0QUFGLAorICAgIDB4OEFFNCwgMHg4QUU0LCAweDIzMDYsIDB4OEFFNSwgMHg4QUU1LCAweDRBQjAsIDB4OEFFNiwgMHg4QUU2LCAweDIzMEEsCisgICAgMHg4QUU3LCAweDhBRTcsIDB4MjFEMywgMHg4QUU4LCAweDhBRUEsIDB4NEFCMSwgMHg4QUVCLCAweDhBRUIsIDB4MjMwMywKKyAgICAweDhBRUMsIDB4OEFFQywgMHg0QUI0LCAweDhBRUQsIDB4OEFFRCwgMHgyMzA3LCAweDhBRUUsIDB4OEFFRSwgMHgyMzBCLAorICAgIDB4OEFFRiwgMHg4QUYwLCAweDRBQjUsIDB4OEFGMSwgMHg4QUYxLCAweDFGNUYsIDB4OEFGMiwgMHg4QUYyLCAweDRBQjcsCisgICAgMHg4QUYzLCAweDhBRjMsIDB4MjMwOSwgMHg4QUY0LCAweDhBRjUsIDB4NEFCOCwgMHg4QUY2LCAweDhBRjYsIDB4MjMwMiwKKyAgICAweDhBRjcsIDB4OEFGNywgMHgxRjA0LCAweDhBRjgsIDB4OEFGOCwgMHgyMjlELCAweDhBRjksIDB4OEFGOSwgMHg0QUJBLAorICAgIDB4OEFGQSwgMHg4QUZBLCAweDIxRkIsIDB4OEFGQiwgMHg4QUZCLCAweDRBQkIsIDB4OEFGQywgMHg4QUZDLCAweDIzMDgsCisgICAgMHg4QUZELCAweDhBRkQsIDB4NEFCQywgMHg4QUZFLCAweDhBRkUsIDB4MjBBQywgMHg4QUZGLCAweDhBRkYsIDB4NEFCRCwKKyAgICAweDhCMDAsIDB4OEIwMCwgMHgyMDhFLCAweDhCMDEsIDB4OEIwMSwgMHgyMzA1LCAweDhCMDIsIDB4OEIwMiwgMHgyMTk3LAorICAgIDB4OEIwMywgMHg4QjAzLCAweDRBQkUsIDB4OEIwNCwgMHg4QjA0LCAweDIxNzEsIDB4OEIwNSwgMHg4QjA1LCAweDIyOTgsCisgICAgMHg4QjA2LCAweDhCMDYsIDB4NEFCRiwgMHg4QjA3LCAweDhCMDcsIDB4MTczQywgMHg4QjA4LCAweDhCMDksIDB4NEFDMCwKKyAgICAweDhCMEEsIDB4OEIwQSwgMHgxRjU3LCAweDhCMEIsIDB4OEIwRCwgMHg0QUMyLCAweDhCMEUsIDB4OEIwRSwgMHgyMDgyLAorICAgIDB4OEIwRiwgMHg4QjBGLCAweDRBQzUsIDB4OEIxMCwgMHg4QjEwLCAweDIzMTEsIDB4OEIxMSwgMHg4QjEzLCAweDRBQzYsCisgICAgMHg4QjE0LCAweDhCMTQsIDB4MjMwNCwgMHg4QjE1LCAweDhCMTUsIDB4NEFDOSwgMHg4QjE2LCAweDhCMTYsIDB4MjMwRiwKKyAgICAweDhCMTcsIDB4OEIxNywgMHgxRTM1LCAweDhCMTgsIDB4OEIxOCwgMHg0QUNBLCAweDhCMTksIDB4OEIxOSwgMHgyMEQxLAorICAgIDB4OEIxQSwgMHg4QjFBLCAweDIzMTAsIDB4OEIxQiwgMHg4QjFCLCAweDFGQTMsIDB4OEIxQywgMHg4QjFDLCAweDRBQ0IsCisgICAgMHg4QjFELCAweDhCMUQsIDB4MjFENiwgMHg4QjFFLCAweDhCMjAsIDB4NEFDQywgMHg4QjIxLCAweDhCMjEsIDB4MjIwNiwKKyAgICAweDhCMjIsIDB4OEIyNSwgMHg0QUNGLCAweDhCMjYsIDB4OEIyNiwgMHgxRDVGLCAweDhCMjcsIDB4OEIyNywgMHg0QUQzLAorICAgIDB4OEIyOCwgMHg4QjI4LCAweDIzMEQsIDB4OEIyOSwgMHg4QjJBLCAweDRBRDQsIDB4OEIyQiwgMHg4QjJCLCAweDIzMTIsCisgICAgMHg4QjJDLCAweDhCMkMsIDB4MjA4RCwgMHg4QjJELCAweDhCMkQsIDB4MjMxMywgMHg4QjJFLCAweDhCMzIsIDB4NEFENiwKKyAgICAweDhCMzMsIDB4OEIzMywgMHgyMkUzLCAweDhCMzQsIDB4OEIzOCwgMHg0QURCLCAweDhCMzksIDB4OEIzOSwgMHgxRkJBLAorICAgIDB4OEIzQSwgMHg4QjNELCAweDRBRTAsIDB4OEIzRSwgMHg4QjNFLCAweDIwNzgsIDB4OEIzRiwgMHg4QjQ4LCAweDRBRTQsCisgICAgMHg4QjQ5LCAweDhCNDksIDB4MjI4OCwgMHg4QjRBLCAweDhCNEQsIDB4NEFFRSwgMHg4QjRFLCAweDhCNEUsIDB4MjMxNiwKKyAgICAweDhCNEYsIDB4OEI0RiwgMHgxRjZCLCAweDhCNTAsIDB4OEI1NSwgMHg0QUYyLCAweDhCNTYsIDB4OEI1NiwgMHgyMzE0LAorICAgIDB4OEI1NywgMHg4QjU3LCAweDRBRjgsIDB4OEI1OCwgMHg4QjU4LCAweDIxMzAsIDB4OEI1OSwgMHg4QjU5LCAweDIzMTUsCisgICAgMHg4QjVBLCAweDhCNUEsIDB4MjE2OCwgMHg4QjVCLCAweDhCNUIsIDB4NEFGOSwgMHg4QjVDLCAweDhCNUMsIDB4MjBDNCwKKyAgICAweDhCNUQsIDB4OEI2NSwgMHg0QUZBLCAweDhCNjYsIDB4OEI2NiwgMHgwOERFLCAweDhCNjcsIDB4OEI2QSwgMHg0QjAzLAorICAgIDB4OEI2QiwgMHg4QjZCLCAweDIzMTgsIDB4OEI2QywgMHg4QjZDLCAweDBCQzgsIDB4OEI2RCwgMHg4QjZFLCAweDRCMDcsCisgICAgMHg4QjZGLCAweDhCNkYsIDB4MjIxOSwgMHg4QjcwLCAweDhCNzAsIDB4MjIxNywgMHg4QjcxLCAweDhCNzMsIDB4NEIwOSwKKyAgICAweDhCNzQsIDB4OEI3NCwgMHgyMEQ1LCAweDhCNzUsIDB4OEI3NiwgMHg0QjBDLCAweDhCNzcsIDB4OEI3NywgMHgxRjRBLAorICAgIDB4OEI3OCwgMHg4QjdDLCAweDRCMEUsIDB4OEI3RCwgMHg4QjdELCAweDIyNDAsIDB4OEI3RSwgMHg4QjdGLCAweDRCMTMsCisgICAgMHg4QjgwLCAweDhCODAsIDB4MUVEMywgMHg4QjgxLCAweDhCODksIDB4NEIxNSwgMHg4QjhBLCAweDhCOEEsIDB4MUU0OSwKKyAgICAweDhCOEIsIDB4OEI4RCwgMHg0QjFFLCAweDhCOEUsIDB4OEI4RSwgMHgyNjFCLCAweDhCOEYsIDB4OEI5MSwgMHg0QjIxLAorICAgIDB4OEI5MiwgMHg4QjkyLCAweDFFNkQsIDB4OEI5MywgMHg4QjkzLCAweDIwRjgsIDB4OEI5NCwgMHg4Qjk0LCAweDRCMjQsCisgICAgMHg4Qjk1LCAweDhCOTUsIDB4MUZGQiwgMHg4Qjk2LCAweDhCOTYsIDB4MjMxOSwgMHg4Qjk3LCAweDhCOUIsIDB4NEIyNSwKKyAgICAweDhCOUMsIDB4OEI5QywgMHgyMzBFLCAweDhCOUQsIDB4OEI5RCwgMHg0QjJBLCAweDhCOUUsIDB4OEI5RSwgMHgyMzE3LAorICAgIDB4OEI5RiwgMHg4QjlGLCAweDRCMkIsIDB4OEJBMCwgMHg4QkEwLCAweDEzMTcsIDB4OEJBMSwgMHg4QkExLCAweDA4MzksCisgICAgMHg4QkEyLCAweDhCQTIsIDB4MDVFOCwgMHg4QkEzLCAweDhCQTMsIDB4MDZCNywgMHg4QkE0LCAweDhCQTQsIDB4MENBQSwKKyAgICAweDhCQTUsIDB4OEJBNSwgMHgwODE4LCAweDhCQTYsIDB4OEJBNywgMHgxMzE4LCAweDhCQTgsIDB4OEJBOCwgMHgwRTI5LAorICAgIDB4OEJBOSwgMHg4QkE5LCAweDBDOUUsIDB4OEJBQSwgMHg4QkFBLCAweDEzMUEsIDB4OEJBQiwgMHg4QkFCLCAweDBDMUMsCisgICAgMHg4QkFDLCAweDhCQUMsIDB4NEIyQywgMHg4QkFELCAweDhCQUQsIDB4MEZERSwgMHg4QkFFLCAweDhCQUUsIDB4MTA3MCwKKyAgICAweDhCQUYsIDB4OEJBRiwgMHgwRkRGLCAweDhCQjAsIDB4OEJCMCwgMHgwODNBLCAweDhCQjEsIDB4OEJCMSwgMHg0QjJELAorICAgIDB4OEJCMiwgMHg4QkIyLCAweDA4ODMsIDB4OEJCMywgMHg4QkIzLCAweDA3RjksIDB4OEJCNCwgMHg4QkI1LCAweDEzMUIsCisgICAgMHg4QkI2LCAweDhCQjYsIDB4MEZGMSwgMHg4QkI3LCAweDhCQjcsIDB4MTMxRCwgMHg4QkI4LCAweDhCQjgsIDB4MEZCOCwKKyAgICAweDhCQjksIDB4OEJCOSwgMHgwNjJFLCAweDhCQkEsIDB4OEJCQSwgMHgwQTgyLCAweDhCQkIsIDB4OEJCQiwgMHg0QjJFLAorICAgIDB4OEJCQywgMHg4QkJDLCAweDBEQzQsIDB4OEJCRCwgMHg4QkJELCAweDA2OEEsIDB4OEJCRSwgMHg4QkJFLCAweDBEMjEsCisgICAgMHg4QkJGLCAweDhCQkYsIDB4MDY2MCwgMHg4QkMwLCAweDhCQzAsIDB4MDkyNiwgMHg4QkMxLCAweDhCQzEsIDB4MTFBMywKKyAgICAweDhCQzIsIDB4OEJDMywgMHgxMzFFLCAweDhCQzQsIDB4OEJDNCwgMHgwQkRGLCAweDhCQzUsIDB4OEJDNSwgMHgxMjQ0LAorICAgIDB4OEJDNiwgMHg4QkM2LCAweDBENEQsIDB4OEJDNywgMHg4QkM3LCAweDRCMkYsIDB4OEJDOCwgMHg4QkM4LCAweDExNEEsCisgICAgMHg4QkM5LCAweDhCQzksIDB4MERENCwgMHg4QkNBLCAweDhCQ0EsIDB4MTE5MCwgMHg4QkNCLCAweDhCQ0IsIDB4MTMyMCwKKyAgICAweDhCQ0MsIDB4OEJDQywgMHgxMURFLCAweDhCQ0QsIDB4OEJDRCwgMHgwNTRELCAweDhCQ0UsIDB4OEJDRSwgMHgxMzIyLAorICAgIDB4OEJDRiwgMHg4QkNGLCAweDEzMjEsIDB4OEJEMCwgMHg4QkQwLCAweDRCMzAsIDB4OEJEMSwgMHg4QkQxLCAweDEwNzIsCisgICAgMHg4QkQyLCAweDhCRDQsIDB4MTMyMywgMHg4QkQ1LCAweDhCRDUsIDB4MEQ2QiwgMHg4QkQ2LCAweDhCRDYsIDB4MTMyNiwKKyAgICAweDhCRDcsIDB4OEJENywgMHgwRDQyLCAweDhCRDgsIDB4OEJEOSwgMHgxMzI3LCAweDhCREEsIDB4OEJEQSwgMHgwNEY0LAorICAgIDB4OEJEQiwgMHg4QkRCLCAweDExRUUsIDB4OEJEQywgMHg4QkRDLCAweDEzMjksIDB4OEJERCwgMHg4QkRELCAweDA3QzUsCisgICAgMHg4QkRFLCAweDhCREUsIDB4MDU4RiwgMHg4QkRGLCAweDhCRTAsIDB4MTMyQSwgMHg4QkUxLCAweDhCRTEsIDB4MDc0NywKKyAgICAweDhCRTIsIDB4OEJFMiwgMHgwRkQ4LCAweDhCRTMsIDB4OEJFMywgMHgxMDZGLCAweDhCRTQsIDB4OEJFNCwgMHgxMzJDLAorICAgIDB4OEJFNSwgMHg4QkU1LCAweDA2QkUsIDB4OEJFNiwgMHg4QkU2LCAweDBGNTcsIDB4OEJFNywgMHg4QkU3LCAweDA0QjYsCisgICAgMHg4QkU4LCAweDhCRTksIDB4MTMyRCwgMHg4QkVBLCAweDhCRUEsIDB4NEIzMSwgMHg4QkVCLCAweDhCRUIsIDB4MDhCQywKKyAgICAweDhCRUMsIDB4OEJFQywgMHgwRUVCLCAweDhCRUQsIDB4OEJFRCwgMHgxMEQ0LCAweDhCRUUsIDB4OEJFRSwgMHgxMzJGLAorICAgIDB4OEJFRiwgMHg4QkVGLCAweDBGMDIsIDB4OEJGMCwgMHg4QkYwLCAweDEzMzAsIDB4OEJGMSwgMHg4QkYxLCAweDEwQkEsCisgICAgMHg4QkYyLCAweDhCRjIsIDB4MDdGQSwgMHg4QkYzLCAweDhCRjMsIDB4MTMzMSwgMHg4QkY0LCAweDhCRjQsIDB4MERBQSwKKyAgICAweDhCRjUsIDB4OEJGNSwgMHgwREM1LCAweDhCRjYsIDB4OEJGNiwgMHgxMzMyLCAweDhCRjcsIDB4OEJGNywgMHgwQzY4LAorICAgIDB4OEJGOCwgMHg4QkY4LCAweDExRUQsIDB4OEJGOSwgMHg4QkY5LCAweDEzMzMsIDB4OEJGQSwgMHg4QkZBLCAweDBCNzYsCisgICAgMHg4QkZCLCAweDhCRkIsIDB4MDYwMCwgMHg4QkZDLCAweDhCRkMsIDB4MTMzNCwgMHg4QkZELCAweDhCRkQsIDB4MDY2OSwKKyAgICAweDhCRkUsIDB4OEJGRSwgMHgwOTVCLCAweDhCRkYsIDB4OEJGRiwgMHgxMzM1LCAweDhDMDAsIDB4OEMwMCwgMHgxMzM2LAorICAgIDB4OEMwMSwgMHg4QzAxLCAweDBEQTIsIDB4OEMwMiwgMHg4QzAyLCAweDEzMzcsIDB4OEMwMywgMHg4QzAzLCAweDA1RDgsCisgICAgMHg4QzA0LCAweDhDMDQsIDB4MTMzOCwgMHg4QzA1LCAweDhDMDUsIDB4MEEwQiwgMHg4QzA2LCAweDhDMDYsIDB4MTIxOCwKKyAgICAweDhDMDcsIDB4OEMwNywgMHgxMzM5LCAweDhDMDgsIDB4OEMwOCwgMHgwRTBCLCAweDhDMDksIDB4OEMwOSwgMHg0QjMyLAorICAgIDB4OEMwQSwgMHg4QzBBLCAweDEwNzEsIDB4OEMwQiwgMHg4QzBCLCAweDBCMTQsIDB4OEMwQywgMHg4QzBDLCAweDEzM0EsCisgICAgMHg4QzBELCAweDhDMEQsIDB4MDVERSwgMHg4QzBFLCAweDhDMEUsIDB4MDdFNiwgMHg4QzBGLCAweDhDMEYsIDB4MTMzQiwKKyAgICAweDhDMTAsIDB4OEMxMCwgMHgwRjdFLCAweDhDMTEsIDB4OEMxMiwgMHgxMzNDLCAweDhDMTMsIDB4OEMxMywgMHgwRUNDLAorICAgIDB4OEMxNCwgMHg4QzE2LCAweDEzM0UsIDB4OEMxNywgMHg4QzE3LCAweDA0QkUsIDB4OEMxOCwgMHg4QzE4LCAweDEzNDMsCisgICAgMHg4QzE5LCAweDhDMTksIDB4MTM0MSwgMHg4QzFBLCAweDhDMUEsIDB4MTAxMSwgMHg4QzFCLCAweDhDMUIsIDB4MTM0MiwKKyAgICAweDhDMUMsIDB4OEMxQywgMHgwQURBLCAweDhDMUQsIDB4OEMxRCwgMHgxMzQ0LCAweDhDMUUsIDB4OEMxRSwgMHg0QjMzLAorICAgIDB4OEMxRiwgMHg4QzIxLCAweDEzNDUsIDB4OEMyMiwgMHg4QzIyLCAweDBGODYsIDB4OEMyMywgMHg4QzIzLCAweDEwMkMsCisgICAgMHg4QzI0LCAweDhDMjQsIDB4MDQwNCwgMHg4QzI1LCAweDhDMjUsIDB4MTM0OCwgMHg4QzI2LCAweDhDMjYsIDB4MEMyOCwKKyAgICAweDhDMjcsIDB4OEMyNywgMHgxMzQ5LCAweDhDMjgsIDB4OEMyOCwgMHgwOEM4LCAweDhDMjksIDB4OEMyOSwgMHgwQUE2LAorICAgIDB4OEMyQSwgMHg4QzJCLCAweDEzNEEsIDB4OEMyQywgMHg4QzJDLCAweDBCMDIsIDB4OEMyRCwgMHg4QzJELCAweDBFMEEsCisgICAgMHg4QzJFLCAweDhDMkYsIDB4MTM0QywgMHg4QzMwLCAweDhDMzAsIDB4MDlBOSwgMHg4QzMxLCAweDhDMzEsIDB4MEJGNiwKKyAgICAweDhDMzIsIDB4OEMzMywgMHgxMzRFLCAweDhDMzQsIDB4OEMzNCwgMHgwQzMxLCAweDhDMzUsIDB4OEMzNiwgMHgxMzUwLAorICAgIDB4OEMzNywgMHg4QzM3LCAweDA3MjEsIDB4OEMzOCwgMHg4QzQwLCAweDRCMzQsIDB4OEM0MSwgMHg4QzQxLCAweDA4MDIsCisgICAgMHg4QzQyLCAweDhDNDUsIDB4NEIzRCwgMHg4QzQ2LCAweDhDNDYsIDB4MDVGOCwgMHg4QzQ3LCAweDhDNDcsIDB4MUNGNiwKKyAgICAweDhDNDgsIDB4OEM0OCwgMHgyMEM4LCAweDhDNDksIDB4OEM0OSwgMHgxQ0Y3LCAweDhDNEEsIDB4OEM0QiwgMHg0QjQxLAorICAgIDB4OEM0QywgMHg4QzRDLCAweDBFOTQsIDB4OEM0RCwgMHg4QzRGLCAweDRCNDMsIDB4OEM1MCwgMHg4QzUwLCAweDFFRkQsCisgICAgMHg4QzUxLCAweDhDNTQsIDB4NEI0NiwgMHg4QzU1LCAweDhDNTUsIDB4MUQxNSwgMHg4QzU2LCAweDhDNTksIDB4NEI0QSwKKyAgICAweDhDNUEsIDB4OEM1QSwgMHgxOTkwLCAweDhDNUIsIDB4OEM2MCwgMHg0QjRFLCAweDhDNjEsIDB4OEM2MSwgMHgwRjYwLAorICAgIDB4OEM2MiwgMHg4QzYyLCAweDA3RDQsIDB4OEM2MywgMHg4QzY5LCAweDRCNTQsIDB4OEM2QSwgMHg4QzZBLCAweDA3NzcsCisgICAgMHg4QzZCLCAweDhDNkIsIDB4MTBFOCwgMHg4QzZDLCAweDhDNzIsIDB4NEI1QiwgMHg4QzczLCAweDhDNzMsIDB4MTVERCwKKyAgICAweDhDNzQsIDB4OEM3NywgMHg0QjYyLCAweDhDNzgsIDB4OEM3OCwgMHgxRDUwLCAweDhDNzksIDB4OEM3OSwgMHgwNDEzLAorICAgIDB4OEM3QSwgMHg4QzdBLCAweDA0QjksIDB4OEM3QiwgMHg4QzgxLCAweDRCNjYsIDB4OEM4MiwgMHg4QzgyLCAweDFENTEsCisgICAgMHg4QzgzLCAweDhDODQsIDB4NEI2RCwgMHg4Qzg1LCAweDhDODUsIDB4MUQ1MywgMHg4Qzg2LCAweDhDODgsIDB4NEI2RiwKKyAgICAweDhDODksIDB4OEM4OSwgMHgwNzg4LCAweDhDOEEsIDB4OEM4QSwgMHgxRDUyLCAweDhDOEIsIDB4OEM4QiwgMHg0QjcyLAorICAgIDB4OEM4QywgMHg4QzhDLCAweDBBQjcsIDB4OEM4RCwgMHg4QzkzLCAweDRCNzMsIDB4OEM5NCwgMHg4Qzk0LCAweDFENTUsCisgICAgMHg4Qzk1LCAweDhDOTcsIDB4NEI3QSwgMHg4Qzk4LCAweDhDOTgsIDB4MUQ1NCwgMHg4Qzk5LCAweDhDOUMsIDB4NEI3RCwKKyAgICAweDhDOUQsIDB4OEM5RCwgMHgxRTNCLCAweDhDOUUsIDB4OEM5RSwgMHgyMjdGLCAweDhDOUYsIDB4OEM5RiwgMHg0QjgxLAorICAgIDB4OENBMCwgMHg4Q0EwLCAweDFGMEMsIDB4OENBMSwgMHg4Q0ExLCAweDFFNTksIDB4OENBMiwgMHg4Q0EyLCAweDFGMjQsCisgICAgMHg4Q0EzLCAweDhDQTYsIDB4NEI4MiwgMHg4Q0E3LCAweDhDQTcsIDB4MjBCQSwgMHg4Q0E4LCAweDhDQTgsIDB4MUY2NSwKKyAgICAweDhDQTksIDB4OENBOSwgMHgxRUYwLCAweDhDQUEsIDB4OENBQSwgMHgyMTY0LCAweDhDQUIsIDB4OENBQiwgMHgxRjMwLAorICAgIDB4OENBQywgMHg4Q0FDLCAweDIyNjEsIDB4OENBRCwgMHg4Q0FFLCAweDRCODYsIDB4OENBRiwgMHg4Q0FGLCAweDIyQTIsCisgICAgMHg4Q0IwLCAweDhDQjAsIDB4MjRBQiwgMHg4Q0IxLCAweDhDQjEsIDB4NEI4OCwgMHg4Q0IyLCAweDhDQjIsIDB4MjRBRiwKKyAgICAweDhDQjMsIDB4OENCMywgMHgxRUU4LCAweDhDQjQsIDB4OENCNCwgMHgxRjM5LCAweDhDQjUsIDB4OENCNSwgMHg0Qjg5LAorICAgIDB4OENCNiwgMHg4Q0I2LCAweDFFNDgsIDB4OENCNywgMHg4Q0I3LCAweDIwNzAsIDB4OENCOCwgMHg4Q0I4LCAweDFFQTgsCisgICAgMHg4Q0I5LCAweDhDQjksIDB4NEI4QSwgMHg4Q0JBLCAweDhDQkEsIDB4MjRBQywgMHg4Q0JCLCAweDhDQkIsIDB4MUVGNywKKyAgICAweDhDQkMsIDB4OENCQywgMHgyMTc2LCAweDhDQkQsIDB4OENCRCwgMHgyNEFELCAweDhDQkUsIDB4OENCRSwgMHg0QjhCLAorICAgIDB4OENCRiwgMHg4Q0JGLCAweDIwN0IsIDB4OENDMCwgMHg4Q0MwLCAweDFGNDUsIDB4OENDMSwgMHg4Q0MxLCAweDI0QUEsCisgICAgMHg4Q0MyLCAweDhDQzIsIDB4MjA0QiwgMHg4Q0MzLCAweDhDQzMsIDB4MjAyRiwgMHg4Q0M0LCAweDhDQzQsIDB4MUY1QSwKKyAgICAweDhDQzUsIDB4OENDNSwgMHgyNEIwLCAweDhDQzYsIDB4OENDNiwgMHg0QjhDLCAweDhDQzcsIDB4OENDNywgMHgyMkI3LAorICAgIDB4OENDOCwgMHg4Q0M4LCAweDFGN0YsIDB4OENDOSwgMHg4Q0M5LCAweDRCOEQsIDB4OENDQSwgMHg4Q0NBLCAweDIyNjUsCisgICAgMHg4Q0NCLCAweDhDRDAsIDB4NEI4RSwgMHg4Q0QxLCAweDhDRDEsIDB4MjRCMiwgMHg4Q0QyLCAweDhDRDIsIDB4MjExQiwKKyAgICAweDhDRDMsIDB4OENEMywgMHgxRTUxLCAweDhDRDQsIDB4OENENCwgMHg0Qjk0LCAweDhDRDUsIDB4OENENSwgMHgyNEI0LAorICAgIDB4OENENiwgMHg4Q0Q5LCAweDRCOTUsIDB4OENEQSwgMHg4Q0RBLCAweDI0QjMsIDB4OENEQiwgMHg4Q0RCLCAweDRCOTksCisgICAgMHg4Q0RDLCAweDhDREMsIDB4MUU5RiwgMHg4Q0RELCAweDhDREQsIDB4NEI5QSwgMHg4Q0RFLCAweDhDREUsIDB4MjExOCwKKyAgICAweDhDREYsIDB4OENERiwgMHg0QjlCLCAweDhDRTAsIDB4OENFMCwgMHgyMEI0LCAweDhDRTEsIDB4OENFMSwgMHgyM0FGLAorICAgIDB4OENFMiwgMHg4Q0UyLCAweDIxQkIsIDB4OENFMywgMHg4Q0UzLCAweDIwNzIsIDB4OENFNCwgMHg4Q0U0LCAweDFGOTUsCisgICAgMHg4Q0U1LCAweDhDRTUsIDB4NEI5QywgMHg4Q0U2LCAweDhDRTYsIDB4MUYwQSwgMHg4Q0U3LCAweDhDRTcsIDB4MjRCNiwKKyAgICAweDhDRTgsIDB4OENFOSwgMHg0QjlELCAweDhDRUEsIDB4OENFQSwgMHgyMjkxLCAweDhDRUIsIDB4OENFQiwgMHgyNEI1LAorICAgIDB4OENFQywgMHg4Q0VDLCAweDIyNzgsIDB4OENFRCwgMHg4Q0VELCAweDFFRDQsIDB4OENFRSwgMHg4Q0YzLCAweDRCOUYsCisgICAgMHg4Q0Y0LCAweDhDRjQsIDB4MUZGMywgMHg4Q0Y1LCAweDhDRjksIDB4NEJBNSwgMHg4Q0ZBLCAweDhDRkEsIDB4MjJBOSwKKyAgICAweDhDRkIsIDB4OENGQiwgMHgyNEI3LCAweDhDRkMsIDB4OENGQywgMHgxRjI4LCAweDhDRkQsIDB4OENGRCwgMHgyMTA5LAorICAgIDB4OENGRSwgMHg4Q0ZFLCAweDIyQzcsIDB4OENGRiwgMHg4Q0ZGLCAweDRCQUEsIDB4OEQwMCwgMHg4RDAzLCAweDRCQUIsCisgICAgMHg4RDA0LCAweDhEMDQsIDB4MjRBRSwgMHg4RDA1LCAweDhEMDUsIDB4MjJCMSwgMHg4RDA2LCAweDhEMDcsIDB4NEJBRiwKKyAgICAweDhEMDgsIDB4OEQwOCwgMHgyMjY2LCAweDhEMDksIDB4OEQwOSwgMHg0QkIxLCAweDhEMEEsIDB4OEQwQSwgMHgyMjVCLAorICAgIDB4OEQwQiwgMHg4RDBCLCAweDIyQzQsIDB4OEQwQywgMHg4RDBDLCAweDRCQjIsIDB4OEQwRCwgMHg4RDBELCAweDIxMTUsCisgICAgMHg4RDBFLCAweDhEMEUsIDB4NEJCMywgMHg4RDBGLCAweDhEMEYsIDB4MjIyQSwgMHg4RDEwLCAweDhEMTAsIDB4MjRCMSwKKyAgICAweDhEMTEsIDB4OEQxNSwgMHg0QkI0LCAweDhEMTYsIDB4OEQxNiwgMHgyMTNELCAweDhEMTcsIDB4OEQxQSwgMHg0QkI5LAorICAgIDB4OEQxQiwgMHg4RDFCLCAweDFGMTUsIDB4OEQxQywgMHg4RDFDLCAweDIyNUMsIDB4OEQxRCwgMHg4RDFELCAweDA0MUQsCisgICAgMHg4RDFFLCAweDhEMUUsIDB4MTE4QiwgMHg4RDFGLCAweDhEMUYsIDB4MDZCNSwgMHg4RDIwLCAweDhEMjAsIDB4NEJCRCwKKyAgICAweDhEMjEsIDB4OEQyMSwgMHgwNzBBLCAweDhEMjIsIDB4OEQyMiwgMHgwNDhELCAweDhEMjMsIDB4OEQyMywgMHgxMTMzLAorICAgIDB4OEQyNCwgMHg4RDI0LCAweDBGM0EsIDB4OEQyNSwgMHg4RDI1LCAweDAzRTcsIDB4OEQyNiwgMHg4RDI2LCAweDExNkMsCisgICAgMHg4RDI3LCAweDhEMjcsIDB4MDgwQSwgMHg4RDI4LCAweDhEMjgsIDB4MTFDOSwgMHg4RDI5LCAweDhEMjksIDB4MDY1NCwKKyAgICAweDhEMkEsIDB4OEQyQSwgMHgwRTAzLCAweDhEMkIsIDB4OEQyQiwgMHgwQkQ1LCAweDhEMkMsIDB4OEQyQywgMHgwNDRBLAorICAgIDB4OEQyRCwgMHg4RDJELCAweDA3MTMsIDB4OEQyRSwgMHg4RDJFLCAweDExRkIsIDB4OEQyRiwgMHg4RDJGLCAweDA3M0EsCisgICAgMHg4RDMwLCAweDhEMzAsIDB4MDYzRSwgMHg4RDMxLCAweDhEMzEsIDB4MDg2RCwgMHg4RDMyLCAweDhEMzMsIDB4MTkyQywKKyAgICAweDhEMzQsIDB4OEQzNCwgMHgwRTRDLCAweDhEMzUsIDB4OEQzNSwgMHgwNzRDLCAweDhEMzYsIDB4OEQzNiwgMHgxOTJFLAorICAgIDB4OEQzNywgMHg4RDM3LCAweDA1N0UsIDB4OEQzOCwgMHg4RDM4LCAweDBBQjgsIDB4OEQzOSwgMHg4RDM5LCAweDA2NkUsCisgICAgMHg4RDNBLCAweDhEM0EsIDB4MDc4RiwgMHg4RDNCLCAweDhEM0IsIDB4MTkyRiwgMHg4RDNDLCAweDhEM0MsIDB4MTEzNywKKyAgICAweDhEM0QsIDB4OEQzRCwgMHgxOTMwLCAweDhEM0UsIDB4OEQzRSwgMHgwODQ5LCAweDhEM0YsIDB4OEQzRiwgMHgwN0Y0LAorICAgIDB4OEQ0MCwgMHg4RDQwLCAweDE5MzEsIDB4OEQ0MSwgMHg4RDQxLCAweDBBMjcsIDB4OEQ0MiwgMHg4RDQyLCAweDBBNUYsCisgICAgMHg4RDQzLCAweDhENDMsIDB4MTEyMiwgMHg4RDQ0LCAweDhENDQsIDB4MTIyNywgMHg4RDQ1LCAweDhENDYsIDB4MTkzMiwKKyAgICAweDhENDcsIDB4OEQ0NywgMHgxOTM2LCAweDhENDgsIDB4OEQ0OSwgMHgxOTM0LCAweDhENEEsIDB4OEQ0QSwgMHgwRDE3LAorICAgIDB4OEQ0QiwgMHg4RDRCLCAweDA2QUUsIDB4OEQ0QywgMHg4RDRDLCAweDA2MDMsIDB4OEQ0RCwgMHg4RDRELCAweDE5MzcsCisgICAgMHg4RDRFLCAweDhENEUsIDB4MEQ4MSwgMHg4RDRGLCAweDhENEYsIDB4MEQwNiwgMHg4RDUwLCAweDhENTAsIDB4MDU1MCwKKyAgICAweDhENTEsIDB4OEQ1MiwgMHg0QkJFLCAweDhENTMsIDB4OEQ1MywgMHgxNjNCLCAweDhENTQsIDB4OEQ1NCwgMHgwQkEzLAorICAgIDB4OEQ1NSwgMHg4RDU1LCAweDE5MzgsIDB4OEQ1NiwgMHg4RDU2LCAweDA5QTAsIDB4OEQ1NywgMHg4RDU3LCAweDRCQzAsCisgICAgMHg4RDU4LCAweDhENTgsIDB4MTIxNSwgMHg4RDU5LCAweDhENTksIDB4MTkzOSwgMHg4RDVBLCAweDhENUEsIDB4MTIwOSwKKyAgICAweDhENUIsIDB4OEQ1QiwgMHgwQ0Q3LCAweDhENUMsIDB4OEQ1QywgMHgxMjg5LCAweDhENUQsIDB4OEQ1RCwgMHgxMjgzLAorICAgIDB4OEQ1RSwgMHg4RDVFLCAweDExMjEsIDB4OEQ1RiwgMHg4RDVGLCAweDRCQzEsIDB4OEQ2MCwgMHg4RDYwLCAweDExM0MsCisgICAgMHg4RDYxLCAweDhENjEsIDB4MENGRCwgMHg4RDYyLCAweDhENjIsIDB4MTA5MywgMHg4RDYzLCAweDhENjMsIDB4MDZDRSwKKyAgICAweDhENjQsIDB4OEQ2NCwgMHgwNTA1LCAweDhENjUsIDB4OEQ2NSwgMHg0QkMyLCAweDhENjYsIDB4OEQ2NiwgMHgwRDFCLAorICAgIDB4OEQ2NywgMHg4RDY3LCAweDFDRjQsIDB4OEQ2OCwgMHg4RDZBLCAweDRCQzMsIDB4OEQ2QiwgMHg4RDZCLCAweDA3OEMsCisgICAgMHg4RDZDLCAweDhENkMsIDB4NEJDNiwgMHg4RDZELCAweDhENkQsIDB4MUNGNSwgMHg4RDZFLCAweDhENkYsIDB4NEJDNywKKyAgICAweDhENzAsIDB4OEQ3MCwgMHgxMjNDLCAweDhENzEsIDB4OEQ3MiwgMHg0QkM5LCAweDhENzMsIDB4OEQ3MywgMHgxQ0VGLAorICAgIDB4OEQ3NCwgMHg4RDc0LCAweDA2QUIsIDB4OEQ3NSwgMHg4RDc1LCAweDExNzUsIDB4OEQ3NiwgMHg4RDc2LCAweDA2Q0EsCisgICAgMHg4RDc3LCAweDhENzcsIDB4MEMwRiwgMHg4RDc4LCAweDhEODAsIDB4NEJDQiwgMHg4RDgxLCAweDhEODEsIDB4MDRFOCwKKyAgICAweDhEODIsIDB4OEQ4MywgMHg0QkQ0LCAweDhEODQsIDB4OEQ4NCwgMHgxQ0YwLCAweDhEODUsIDB4OEQ4NSwgMHgwNEQxLAorICAgIDB4OEQ4NiwgMHg4RDg5LCAweDRCRDYsIDB4OEQ4QSwgMHg4RDhBLCAweDExMDAsIDB4OEQ4QiwgMHg4RDhCLCAweDBDNzQsCisgICAgMHg4RDhDLCAweDhEOTAsIDB4NEJEQSwgMHg4RDkxLCAweDhEOTEsIDB4MUNGMiwgMHg4RDkyLCAweDhEOTMsIDB4NEJERiwKKyAgICAweDhEOTQsIDB4OEQ5NCwgMHgxQ0YxLCAweDhEOTUsIDB4OEQ5NSwgMHgxRjE0LCAweDhEOTYsIDB4OEQ5OCwgMHg0QkUxLAorICAgIDB4OEQ5OSwgMHg4RDk5LCAweDIyN0EsIDB4OEQ5QSwgMHg4RDlFLCAweDRCRTQsIDB4OEQ5RiwgMHg4RDlGLCAweDBFMUUsCisgICAgMHg4REEwLCAweDhEQTIsIDB4NEJFOSwgMHg4REEzLCAweDhEQTMsIDB4MEM3RiwgMHg4REE0LCAweDhEQTcsIDB4NEJFQywKKyAgICAweDhEQTgsIDB4OERBOCwgMHgyMEVFLCAweDhEQTksIDB4OERCMCwgMHg0QkYwLCAweDhEQjEsIDB4OERCMSwgMHgxQ0YzLAorICAgIDB4OERCMiwgMHg4REIyLCAweDI1RjgsIDB4OERCMywgMHg4REIzLCAweDEyNDAsIDB4OERCNCwgMHg4REI0LCAweDBCODAsCisgICAgMHg4REI1LCAweDhEQjUsIDB4MUQxQywgMHg4REI2LCAweDhEQjcsIDB4NEJGOCwgMHg4REI4LCAweDhEQjgsIDB4MUQxNywKKyAgICAweDhEQjksIDB4OERCOSwgMHg0QkZBLCAweDhEQkEsIDB4OERCQSwgMHgxRDFGLCAweDhEQkIsIDB4OERCQiwgMHg0QkZCLAorICAgIDB4OERCQywgMHg4REJDLCAweDFEMUUsIDB4OERCRCwgMHg4REJELCAweDRCRkMsIDB4OERCRSwgMHg4REJFLCAweDExQjksCisgICAgMHg4REJGLCAweDhEQkYsIDB4MUQxRCwgMHg4REMwLCAweDhEQzIsIDB4NEJGRCwgMHg4REMzLCAweDhEQzMsIDB4MTEwMSwKKyAgICAweDhEQzQsIDB4OERDNCwgMHgxRDIwLCAweDhEQzUsIDB4OERDNSwgMHg0QzAwLCAweDhEQzYsIDB4OERDNiwgMHgxRDI4LAorICAgIDB4OERDNywgMHg4RENBLCAweDRDMDEsIDB4OERDQiwgMHg4RENCLCAweDAzREEsIDB4OERDQywgMHg4RENDLCAweDA1RDksCisgICAgMHg4RENELCAweDhEQ0QsIDB4NEMwNSwgMHg4RENFLCAweDhEQ0YsIDB4MUQyNSwgMHg4REQwLCAweDhERDAsIDB4NEMwNiwKKyAgICAweDhERDEsIDB4OEREMSwgMHgwQjlELCAweDhERDIsIDB4OERENSwgMHg0QzA3LCAweDhERDYsIDB4OERENywgMHgxRDIxLAorICAgIDB4OEREOCwgMHg4REQ5LCAweDRDMEIsIDB4OEREQSwgMHg4RERBLCAweDFEMjMsIDB4OEREQiwgMHg4RERCLCAweDFEMjcsCisgICAgMHg4RERDLCAweDhEREMsIDB4NEMwRCwgMHg4RERELCAweDhEREQsIDB4MDkwRiwgMHg4RERFLCAweDhEREUsIDB4MUQyNCwKKyAgICAweDhEREYsIDB4OERERiwgMHgwNkY1LCAweDhERTAsIDB4OERFMiwgMHg0QzBFLCAweDhERTMsIDB4OERFMywgMHgxRDJDLAorICAgIDB4OERFNCwgMHg4REU0LCAweDFEMkYsIDB4OERFNSwgMHg4REU3LCAweDRDMTEsIDB4OERFOCwgMHg4REU4LCAweDA5NzQsCisgICAgMHg4REU5LCAweDhERTksIDB4NEMxNCwgMHg4REVBLCAweDhERUEsIDB4MDc0QiwgMHg4REVCLCAweDhERUIsIDB4MUQxOCwKKyAgICAweDhERUMsIDB4OERFQywgMHgxRDI5LCAweDhERUQsIDB4OERFRSwgMHg0QzE1LCAweDhERUYsIDB4OERFRiwgMHgwQTVFLAorICAgIDB4OERGMCwgMHg4REYyLCAweDRDMTcsIDB4OERGMywgMHg4REYzLCAweDBFNEIsIDB4OERGNCwgMHg4REY0LCAweDRDMUEsCisgICAgMHg4REY1LCAweDhERjUsIDB4MDg2QywgMHg4REY2LCAweDhERjYsIDB4NEMxQiwgMHg4REY3LCAweDhERjgsIDB4MUQyQSwKKyAgICAweDhERjksIDB4OERGOSwgMHgxRDJELCAweDhERkEsIDB4OERGQSwgMHgwNjI0LCAweDhERkIsIDB4OERGQiwgMHgxRDJFLAorICAgIDB4OERGQywgMHg4REZDLCAweDRDMUMsIDB4OERGRCwgMHg4REZELCAweDFEMzEsIDB4OERGRSwgMHg4REZGLCAweDRDMUQsCisgICAgMHg4RTAwLCAweDhFMDQsIDB4NEMxRiwgMHg4RTA1LCAweDhFMDUsIDB4MUQxOSwgMHg4RTA2LCAweDhFMDgsIDB4NEMyNCwKKyAgICAweDhFMDksIDB4OEUwOSwgMHgxRDMwLCAweDhFMEEsIDB4OEUwQSwgMHgxMEEwLCAweDhFMEIsIDB4OEUwQiwgMHg0QzI3LAorICAgIDB4OEUwQywgMHg4RTBDLCAweDA1MTEsIDB4OEUwRCwgMHg4RTBFLCAweDRDMjgsIDB4OEUwRiwgMHg4RTBGLCAweDBERjcsCisgICAgMHg4RTEwLCAweDhFMTAsIDB4MUY5NCwgMHg4RTExLCAweDhFMTMsIDB4NEMyQSwgMHg4RTE0LCAweDhFMTQsIDB4MUQzMiwKKyAgICAweDhFMTUsIDB4OEUxQywgMHg0QzJELCAweDhFMUQsIDB4OEUxRCwgMHgxRDMzLCAweDhFMUUsIDB4OEUxRSwgMHgwOTEwLAorICAgIDB4OEUxRiwgMHg4RTFGLCAweDFEMzQsIDB4OEUyMCwgMHg4RTIxLCAweDRDMzUsIDB4OEUyMiwgMHg4RTIyLCAweDBFMzIsCisgICAgMHg4RTIzLCAweDhFMjMsIDB4MUQzNywgMHg4RTI0LCAweDhFMjgsIDB4NEMzNywgMHg4RTI5LCAweDhFMjksIDB4MDQ4RiwKKyAgICAweDhFMkEsIDB4OEUyQSwgMHgxMjM2LCAweDhFMkIsIDB4OEUyQiwgMHg0QzNDLCAweDhFMkMsIDB4OEUyQywgMHgxRDM1LAorICAgIDB4OEUyRCwgMHg4RTJELCAweDRDM0QsIDB4OEUyRSwgMHg4RTJFLCAweDFEMzYsIDB4OEUyRiwgMHg4RTJGLCAweDFEMzgsCisgICAgMHg4RTMwLCAweDhFMzAsIDB4NEMzRSwgMHg4RTMxLCAweDhFMzEsIDB4MUQzRSwgMHg4RTMyLCAweDhFMzMsIDB4NEMzRiwKKyAgICAweDhFMzQsIDB4OEUzNCwgMHgyMjMwLCAweDhFMzUsIDB4OEUzNSwgMHgxRDNDLCAweDhFMzYsIDB4OEUzOCwgMHg0QzQxLAorICAgIDB4OEUzOSwgMHg4RTM5LCAweDFEM0IsIDB4OEUzQSwgMHg4RTNBLCAweDFEMzksIDB4OEUzQiwgMHg4RTNDLCAweDRDNDQsCisgICAgMHg4RTNELCAweDhFM0QsIDB4MUQzRCwgMHg4RTNFLCAweDhFM0YsIDB4NEM0NiwgMHg4RTQwLCAweDhFNDAsIDB4MUQzQSwKKyAgICAweDhFNDEsIDB4OEU0MiwgMHgxRDQwLCAweDhFNDMsIDB4OEU0MywgMHg0QzQ4LCAweDhFNDQsIDB4OEU0NCwgMHgwRTM2LAorICAgIDB4OEU0NSwgMHg4RTQ2LCAweDRDNDksIDB4OEU0NywgMHg4RTQ3LCAweDE3M0IsIDB4OEU0OCwgMHg4RTQ4LCAweDA1OTksCisgICAgMHg4RTQ5LCAweDhFNDksIDB4MUQzRiwgMHg4RTRBLCAweDhFNEEsIDB4MUQ0NCwgMHg4RTRCLCAweDhFNEIsIDB4MERGNiwKKyAgICAweDhFNEMsIDB4OEU0QywgMHgyNUZELCAweDhFNEQsIDB4OEU1MCwgMHg0QzRCLCAweDhFNTEsIDB4OEU1MiwgMHgxRDQyLAorICAgIDB4OEU1MywgMHg4RTU0LCAweDRDNEYsIDB4OEU1NSwgMHg4RTU1LCAweDI2MDAsIDB4OEU1NiwgMHg4RTU4LCAweDRDNTEsCisgICAgMHg4RTU5LCAweDhFNTksIDB4MUQxQSwgMHg4RTVBLCAweDhFNjIsIDB4NEM1NCwgMHg4RTYzLCAweDhFNjMsIDB4MjYwNiwKKyAgICAweDhFNjQsIDB4OEU2NSwgMHg0QzVELCAweDhFNjYsIDB4OEU2NiwgMHgwNDJELCAweDhFNjcsIDB4OEU2OCwgMHg0QzVGLAorICAgIDB4OEU2OSwgMHg4RTY5LCAweDFEMUIsIDB4OEU2QSwgMHg4RTZCLCAweDRDNjEsIDB4OEU2QywgMHg4RTZDLCAweDA1QTYsCisgICAgMHg4RTZELCAweDhFNkQsIDB4MDRBQiwgMHg4RTZFLCAweDhFNkUsIDB4NEM2MywgMHg4RTZGLCAweDhFNkYsIDB4MUQ0OCwKKyAgICAweDhFNzAsIDB4OEU3MCwgMHgxRDQ1LCAweDhFNzEsIDB4OEU3MSwgMHg0QzY0LCAweDhFNzIsIDB4OEU3MiwgMHgwNjE2LAorICAgIDB4OEU3MywgMHg4RTczLCAweDRDNjUsIDB4OEU3NCwgMHg4RTc0LCAweDFENDksIDB4OEU3NSwgMHg4RTc1LCAweDRDNjYsCisgICAgMHg4RTc2LCAweDhFNzYsIDB4MUQ0NiwgMHg4RTc3LCAweDhFNzksIDB4NEM2NywgMHg4RTdBLCAweDhFN0EsIDB4MjVGRiwKKyAgICAweDhFN0IsIDB4OEU3QiwgMHg0QzZBLCAweDhFN0MsIDB4OEU3QywgMHgxRDQ3LCAweDhFN0QsIDB4OEU3RSwgMHg0QzZCLAorICAgIDB4OEU3RiwgMHg4RTdGLCAweDA1NUQsIDB4OEU4MCwgMHg4RTgwLCAweDRDNkQsIDB4OEU4MSwgMHg4RTgxLCAweDExMkQsCisgICAgMHg4RTgyLCAweDhFODQsIDB4NEM2RSwgMHg4RTg1LCAweDhFODUsIDB4MUQ0QSwgMHg4RTg2LCAweDhFODYsIDB4NEM3MSwKKyAgICAweDhFODcsIDB4OEU4NywgMHgwNTFFLCAweDhFODgsIDB4OEU4OCwgMHg0QzcyLCAweDhFODksIDB4OEU4OSwgMHgyNUZDLAorICAgIDB4OEU4QSwgMHg4RThBLCAweDFFOEMsIDB4OEU4QiwgMHg4RThCLCAweDI2MDIsIDB4OEU4QywgMHg4RThDLCAweDRDNzMsCisgICAgMHg4RThELCAweDhFOEQsIDB4MjI0RCwgMHg4RThFLCAweDhFOEUsIDB4NEM3NCwgMHg4RThGLCAweDhFOEYsIDB4MUQ0QiwKKyAgICAweDhFOTAsIDB4OEU5MCwgMHgxRDRELCAweDhFOTEsIDB4OEU5MSwgMHgyNjA0LCAweDhFOTIsIDB4OEU5MiwgMHgyNUZFLAorICAgIDB4OEU5MywgMHg4RTkzLCAweDI2MDMsIDB4OEU5NCwgMHg4RTk0LCAweDFENEMsIDB4OEU5NSwgMHg4RTk5LCAweDRDNzUsCisgICAgMHg4RTlBLCAweDhFOUEsIDB4MjYwMSwgMHg4RTlCLCAweDhFOUIsIDB4NEM3QSwgMHg4RTlDLCAweDhFOUMsIDB4MUQ0RSwKKyAgICAweDhFOUQsIDB4OEU5RCwgMHg0QzdCLCAweDhFOUUsIDB4OEU5RSwgMHgxRDRGLCAweDhFOUYsIDB4OEVBMCwgMHg0QzdDLAorICAgIDB4OEVBMSwgMHg4RUExLCAweDI2MDUsIDB4OEVBMiwgMHg4RUE0LCAweDRDN0UsIDB4OEVBNSwgMHg4RUE1LCAweDFFQTMsCisgICAgMHg4RUE2LCAweDhFQTYsIDB4MjYwOCwgMHg4RUE3LCAweDhFQTksIDB4NEM4MSwgMHg4RUFBLCAweDhFQUEsIDB4MjYwNywKKyAgICAweDhFQUIsIDB4OEVBQiwgMHgwRDI2LCAweDhFQUMsIDB4OEVBQywgMHgwNzAzLCAweDhFQUQsIDB4OEVBRSwgMHg0Qzg0LAorICAgIDB4OEVBRiwgMHg4RUFGLCAweDBDNzgsIDB4OEVCMCwgMHg4RUIxLCAweDRDODYsIDB4OEVCMiwgMHg4RUIyLCAweDA2MjIsCisgICAgMHg4RUIzLCAweDhFQjksIDB4NEM4OCwgMHg4RUJBLCAweDhFQkEsIDB4MEUxQywgMHg4RUJCLCAweDhFQkYsIDB4NEM4RiwKKyAgICAweDhFQzAsIDB4OEVDMCwgMHgyMEYwLCAweDhFQzEsIDB4OEVDOSwgMHg0Qzk0LCAweDhFQ0EsIDB4OEVDQSwgMHgxRTdCLAorICAgIDB4OEVDQiwgMHg4RUNCLCAweDIyNjcsIDB4OEVDQywgMHg4RUNDLCAweDFGMzYsIDB4OEVDRCwgMHg4RUNELCAweDFGRDYsCisgICAgMHg4RUNFLCAweDhFQ0UsIDB4MThGOCwgMHg4RUNGLCAweDhFRDEsIDB4NEM5RCwgMHg4RUQyLCAweDhFRDIsIDB4MjFFMCwKKyAgICAweDhFRDMsIDB4OEVEMywgMHg0Q0EwLCAweDhFRDQsIDB4OEVENCwgMHgyNDhDLCAweDhFRDUsIDB4OEVEQSwgMHg0Q0ExLAorICAgIDB4OEVEQiwgMHg4RURCLCAweDI0OEQsIDB4OEVEQywgMHg4RURFLCAweDRDQTcsIDB4OEVERiwgMHg4RURGLCAweDIxMDIsCisgICAgMHg4RUUwLCAweDhFRTMsIDB4NENBQSwgMHg4RUU0LCAweDhFRTQsIDB4MjQ5NCwgMHg4RUU1LCAweDhFRUEsIDB4NENBRSwKKyAgICAweDhFRUIsIDB4OEVFQiwgMHgyNDkzLCAweDhFRUMsIDB4OEVGMSwgMHg0Q0I0LCAweDhFRjIsIDB4OEVGMiwgMHgyNDhFLAorICAgIDB4OEVGMywgMHg4RUY3LCAweDRDQkEsIDB4OEVGOCwgMHg4RUY4LCAweDIyOTksIDB4OEVGOSwgMHg4RUY5LCAweDI0OTEsCisgICAgMHg4RUZBLCAweDhFRkEsIDB4MjQ5NiwgMHg4RUZCLCAweDhFRkIsIDB4MjQ4RiwgMHg4RUZDLCAweDhFRkMsIDB4MjQ5MiwKKyAgICAweDhFRkQsIDB4OEVGRCwgMHg0Q0JGLCAweDhFRkUsIDB4OEVGRSwgMHgyNDk3LCAweDhFRkYsIDB4OEVGRiwgMHg0Q0MwLAorICAgIDB4OEYwMCwgMHg4RjAyLCAweDRDQzEsIDB4OEYwMywgMHg4RjAzLCAweDFGQjEsIDB4OEYwNCwgMHg4RjA0LCAweDRDQzQsCisgICAgMHg4RjA1LCAweDhGMDUsIDB4MjQ5QSwgMHg4RjA2LCAweDhGMDYsIDB4NENDNSwgMHg4RjA3LCAweDhGMDcsIDB4MjQ5OSwKKyAgICAweDhGMDgsIDB4OEYwOCwgMHg0Q0M2LCAweDhGMDksIDB4OEYwOSwgMHgyMjU4LCAweDhGMEEsIDB4OEYwQSwgMHgyNDk4LAorICAgIDB4OEYwQiwgMHg4RjExLCAweDRDQzcsIDB4OEYxMiwgMHg4RjEyLCAweDI0OUIsIDB4OEYxMywgMHg4RjEzLCAweDRDQ0UsCisgICAgMHg4RjE0LCAweDhGMTQsIDB4MUYwOSwgMHg4RjE1LCAweDhGMTUsIDB4MjBFNiwgMHg4RjE2LCAweDhGMUEsIDB4NENDRiwKKyAgICAweDhGMUIsIDB4OEYxQiwgMHgyMDI2LCAweDhGMUMsIDB4OEYxQywgMHgyNDlGLCAweDhGMUQsIDB4OEYxRCwgMHgxRjU5LAorICAgIDB4OEYxRSwgMHg4RjFGLCAweDI0OUQsIDB4OEYyMCwgMHg4RjI0LCAweDRDRDQsIDB4OEYyNSwgMHg4RjI1LCAweDFGM0IsCisgICAgMHg4RjI2LCAweDhGMjYsIDB4MjQ5QywgMHg4RjI3LCAweDhGMjgsIDB4NENEOSwgMHg4RjI5LCAweDhGMjksIDB4MUUzQSwKKyAgICAweDhGMkEsIDB4OEYyQSwgMHgyMDVCLCAweDhGMkIsIDB4OEYyRSwgMHg0Q0RCLCAweDhGMkYsIDB4OEYyRiwgMHgxRjcwLAorICAgIDB4OEYzMCwgMHg4RjMyLCAweDRDREYsIDB4OEYzMywgMHg4RjMzLCAweDI0QTAsIDB4OEYzNCwgMHg4RjM3LCAweDRDRTIsCisgICAgMHg4RjM4LCAweDhGMzgsIDB4MjEzQiwgMHg4RjM5LCAweDhGM0EsIDB4NENFNiwgMHg4RjNCLCAweDhGM0IsIDB4MUYwNywKKyAgICAweDhGM0MsIDB4OEYzRCwgMHg0Q0U4LCAweDhGM0UsIDB4OEYzRSwgMHgyMjcwLCAweDhGM0YsIDB4OEYzRiwgMHgyMjM3LAorICAgIDB4OEY0MCwgMHg4RjQxLCAweDRDRUEsIDB4OEY0MiwgMHg4RjQyLCAweDI0RDIsIDB4OEY0MywgMHg4RjQzLCAweDRDRUMsCisgICAgMHg4RjQ0LCAweDhGNDQsIDB4MjFCMywgMHg4RjQ1LCAweDhGNDUsIDB4MjI0NSwgMHg4RjQ2LCAweDhGNDYsIDB4MjRBMSwKKyAgICAweDhGNDcsIDB4OEY0OCwgMHg0Q0VELCAweDhGNDksIDB4OEY0OSwgMHgyMkE4LCAweDhGNEEsIDB4OEY0QywgMHg0Q0VGLAorICAgIDB4OEY0RCwgMHg4RjRELCAweDIyN0MsIDB4OEY0RSwgMHg4RjRFLCAweDFGQjAsIDB4OEY0RiwgMHg4RjUzLCAweDRDRjIsCisgICAgMHg4RjU0LCAweDhGNTQsIDB4MjRBMiwgMHg4RjU1LCAweDhGNUUsIDB4NENGNywgMHg4RjVGLCAweDhGNUYsIDB4MUY0NiwKKyAgICAweDhGNjAsIDB4OEY2MCwgMHg0RDAxLCAweDhGNjEsIDB4OEY2MSwgMHgyMzgwLCAweDhGNjIsIDB4OEY2MiwgMHgyNDk1LAorICAgIDB4OEY2MywgMHg4RjYzLCAweDREMDIsIDB4OEY2NCwgMHg4RjY0LCAweDI0OTAsIDB4OEY2NSwgMHg4RjY1LCAweDREMDMsCisgICAgMHg4RjY2LCAweDhGNjYsIDB4MDREQSwgMHg4RjY3LCAweDhGNjcsIDB4MTE0MSwgMHg4RjY4LCAweDhGNjgsIDB4MDc0NSwKKyAgICAweDhGNjksIDB4OEY2OSwgMHgwRkM0LCAweDhGNkEsIDB4OEY2QSwgMHg0RDA0LCAweDhGNkIsIDB4OEY2QiwgMHgxOEUxLAorICAgIDB4OEY2QywgMHg4RjZDLCAweDEyMDcsIDB4OEY2RCwgMHg4RjZELCAweDE4RTIsIDB4OEY2RSwgMHg4RjZFLCAweDBBN0QsCisgICAgMHg4RjZGLCAweDhGNkYsIDB4MENDOCwgMHg4RjcwLCAweDhGNzAsIDB4MDc5QiwgMHg4RjcxLCAweDhGNzMsIDB4MThFMywKKyAgICAweDhGNzQsIDB4OEY3NCwgMHgxMUUwLCAweDhGNzUsIDB4OEY3NiwgMHgxOEU2LCAweDhGNzcsIDB4OEY3NywgMHgxOEU5LAorICAgIDB4OEY3OCwgMHg4Rjc4LCAweDE4RTgsIDB4OEY3OSwgMHg4RjdBLCAweDE4RUEsIDB4OEY3QiwgMHg4RjdCLCAweDBDNUUsCisgICAgMHg4RjdDLCAweDhGN0MsIDB4MThFQywgMHg4RjdELCAweDhGN0QsIDB4MTExQiwgMHg4RjdFLCAweDhGN0UsIDB4MThFRCwKKyAgICAweDhGN0YsIDB4OEY3RiwgMHgwODlGLCAweDhGODAsIDB4OEY4MCwgMHg0RDA1LCAweDhGODEsIDB4OEY4MiwgMHgxOEVFLAorICAgIDB4OEY4MywgMHg4RjgzLCAweDA4QTAsIDB4OEY4NCwgMHg4Rjg0LCAweDE4RjAsIDB4OEY4NSwgMHg4Rjg1LCAweDA2QTMsCisgICAgMHg4Rjg2LCAweDhGODYsIDB4MEEwNywgMHg4Rjg3LCAweDhGODcsIDB4MThGMSwgMHg4Rjg4LCAweDhGODgsIDB4MDQxQiwKKyAgICAweDhGODksIDB4OEY4OSwgMHgwN0U5LCAweDhGOEEsIDB4OEY4QSwgMHgwNzRFLCAweDhGOEIsIDB4OEY4QiwgMHgxOEYyLAorICAgIDB4OEY4QywgMHg4RjhDLCAweDREMDYsIDB4OEY4RCwgMHg4RjhGLCAweDE4RjMsIDB4OEY5MCwgMHg4RjkwLCAweDA2OTUsCisgICAgMHg4RjkxLCAweDhGOTEsIDB4MDgyMCwgMHg4RjkyLCAweDhGOTIsIDB4NEQwNywgMHg4RjkzLCAweDhGOTMsIDB4MEQ3QiwKKyAgICAweDhGOTQsIDB4OEY5NCwgMHgxNTc0LCAweDhGOTUsIDB4OEY5NSwgMHgxMEYyLCAweDhGOTYsIDB4OEY5NiwgMHgwRjJBLAorICAgIDB4OEY5NywgMHg4Rjk3LCAweDExNTgsIDB4OEY5OCwgMHg4Rjk4LCAweDE4RjYsIDB4OEY5OSwgMHg4Rjk5LCAweDExN0YsCisgICAgMHg4RjlBLCAweDhGOUEsIDB4MThGNywgMHg4RjlCLCAweDhGOUIsIDB4MEY4QywgMHg4RjlDLCAweDhGOUMsIDB4MDcxNSwKKyAgICAweDhGOUQsIDB4OEY5RCwgMHg0RDA4LCAweDhGOUUsIDB4OEY5RSwgMHgwNTRBLCAweDhGOUYsIDB4OEY5RiwgMHgwNDQyLAorICAgIDB4OEZBMCwgMHg4RkEyLCAweDREMDksIDB4OEZBMywgMHg4RkEzLCAweDA5OUMsIDB4OEZBNCwgMHg4RkE1LCAweDREMEMsCisgICAgMHg4RkE2LCAweDhGQTYsIDB4MUUzMCwgMHg4RkE3LCAweDhGQTcsIDB4NEQwRSwgMHg4RkE4LCAweDhGQTksIDB4MDQ0RiwKKyAgICAweDhGQUEsIDB4OEZBQSwgMHg0RDBGLCAweDhGQUIsIDB4OEZBQiwgMHgwNDUxLCAweDhGQUMsIDB4OEZBQywgMHg0RDEwLAorICAgIDB4OEZBRCwgMHg4RkFELCAweDFFOUQsIDB4OEZBRSwgMHg4RkFFLCAweDFFNEIsIDB4OEZBRiwgMHg4RkFGLCAweDFFNEEsCisgICAgMHg4RkIwLCAweDhGQjAsIDB4MDRFMiwgMHg4RkIxLCAweDhGQjEsIDB4MENDMywgMHg4RkIyLCAweDhGQjIsIDB4MjBBQSwKKyAgICAweDhGQjMsIDB4OEZCNSwgMHg0RDExLCAweDhGQjYsIDB4OEZCNiwgMHgxNzNELCAweDhGQjcsIDB4OEZCOCwgMHg0RDE0LAorICAgIDB4OEZCOSwgMHg4RkI5LCAweDA0NDgsIDB4OEZCQSwgMHg4RkJDLCAweDREMTYsIDB4OEZCRCwgMHg4RkJELCAweDBBMTIsCisgICAgMHg4RkJFLCAweDhGQkUsIDB4MDU3MiwgMHg4RkJGLCAweDhGQzAsIDB4NEQxOSwgMHg4RkMxLCAweDhGQzEsIDB4MEMyNSwKKyAgICAweDhGQzIsIDB4OEZDMiwgMHgxMEJELCAweDhGQzMsIDB4OEZDMywgMHg0RDFCLCAweDhGQzQsIDB4OEZDNCwgMHgwQzE4LAorICAgIDB4OEZDNSwgMHg4RkM1LCAweDBGRTEsIDB4OEZDNiwgMHg4RkM2LCAweDREMUMsIDB4OEZDNywgMHg4RkM3LCAweDA3NTYsCisgICAgMHg4RkM4LCAweDhGQzgsIDB4MEE5QywgMHg4RkM5LCAweDhGQ0QsIDB4NEQxRCwgMHg4RkNFLCAweDhGQ0UsIDB4MTA5MiwKKyAgICAweDhGQ0YsIDB4OEZDRiwgMHg0RDIyLCAweDhGRDAsIDB4OEZEMCwgMHgxMTBFLCAweDhGRDEsIDB4OEZEMSwgMHgwOENELAorICAgIDB4OEZEMiwgMHg4RkQyLCAweDREMjMsIDB4OEZEMywgMHg4RkQzLCAweDE3M0UsIDB4OEZENCwgMHg4RkQ0LCAweDA2NTIsCisgICAgMHg4RkQ1LCAweDhGRDUsIDB4MTczRiwgMHg4RkQ2LCAweDhGRDcsIDB4NEQyNCwgMHg4RkQ4LCAweDhGRDgsIDB4MDdDRSwKKyAgICAweDhGRDksIDB4OEZEOSwgMHgxMTgzLCAweDhGREEsIDB4OEZEQSwgMHg0RDI2LCAweDhGREIsIDB4OEZEQiwgMHgwOEM5LAorICAgIDB4OEZEQywgMHg4RkRDLCAweDEwRjksIDB4OEZERCwgMHg4RkRELCAweDBFQjQsIDB4OEZERSwgMHg4RkRFLCAweDA5RjUsCisgICAgMHg4RkRGLCAweDhGREYsIDB4MDRGRSwgMHg4RkUwLCAweDhGRTEsIDB4NEQyNywgMHg4RkUyLCAweDhGRTIsIDB4MEU0OSwKKyAgICAweDhGRTMsIDB4OEZFMywgMHg0RDI5LCAweDhGRTQsIDB4OEZFNCwgMHgxNzQyLCAweDhGRTUsIDB4OEZFNSwgMHgxNzQwLAorICAgIDB4OEZFNiwgMHg4RkU2LCAweDE3NDQsIDB4OEZFNywgMHg4RkU3LCAweDREMkEsIDB4OEZFOCwgMHg4RkU4LCAweDE3NDYsCisgICAgMHg4RkU5LCAweDhGRTksIDB4MTc0MywgMHg4RkVBLCAweDhGRUEsIDB4MDVCMCwgMHg4RkVCLCAweDhGRUIsIDB4MEJFNywKKyAgICAweDhGRUMsIDB4OEZFQywgMHg0RDJCLCAweDhGRUQsIDB4OEZFRCwgMHgwNURELCAweDhGRUUsIDB4OEZFRSwgMHgxNzQxLAorICAgIDB4OEZFRiwgMHg4RkVGLCAweDREMkMsIDB4OEZGMCwgMHg4RkYwLCAweDBEOEQsIDB4OEZGMSwgMHg4RkYyLCAweDREMkQsCisgICAgMHg4RkYzLCAweDhGRjMsIDB4MTc0NSwgMHg4RkY0LCAweDhGRjQsIDB4MjY3QiwgMHg4RkY1LCAweDhGRjYsIDB4NEQyRiwKKyAgICAweDhGRjcsIDB4OEZGNywgMHgwQUQ5LCAweDhGRjgsIDB4OEZGOCwgMHgwNDJFLCAweDhGRjksIDB4OEZGOSwgMHgwODE2LAorICAgIDB4OEZGQSwgMHg4RkZDLCAweDREMzEsIDB4OEZGRCwgMHg4RkZELCAweDEyMTQsIDB4OEZGRSwgMHg4RkZGLCAweDREMzQsCisgICAgMHg5MDAwLCAweDkwMDAsIDB4MEU3QywgMHg5MDAxLCAweDkwMDEsIDB4MERDMiwgMHg5MDAyLCAweDkwMDIsIDB4MEQ2MSwKKyAgICAweDkwMDMsIDB4OTAwMywgMHgwRTI2LCAweDkwMDQsIDB4OTAwNCwgMHgxNzQ4LCAweDkwMDUsIDB4OTAwNSwgMHgxNzQ3LAorICAgIDB4OTAwNiwgMHg5MDA2LCAweDBCNDksIDB4OTAwNywgMHg5MDA4LCAweDREMzYsIDB4OTAwOSwgMHg5MDA5LCAweDBGQ0EsCisgICAgMHg5MDBBLCAweDkwMEEsIDB4MEZFMCwgMHg5MDBCLCAweDkwMEIsIDB4MTc0OSwgMHg5MDBDLCAweDkwMEMsIDB4NEQzOCwKKyAgICAweDkwMEQsIDB4OTAwRCwgMHgxNzRDLCAweDkwMEUsIDB4OTAwRSwgMHg0RDM5LCAweDkwMEYsIDB4OTAwRiwgMHgwRTY5LAorICAgIDB4OTAxMCwgMHg5MDEwLCAweDExRUYsIDB4OTAxMSwgMHg5MDExLCAweDE3NEIsIDB4OTAxMiwgMHg5MDEyLCAweDA1QkUsCisgICAgMHg5MDEzLCAweDkwMTMsIDB4NEQzQSwgMHg5MDE0LCAweDkwMTQsIDB4MEU2RiwgMHg5MDE1LCAweDkwMTUsIDB4MjNGMiwKKyAgICAweDkwMTYsIDB4OTAxNiwgMHgxNzRELCAweDkwMTcsIDB4OTAxNywgMHgwNUY5LCAweDkwMTgsIDB4OTAxOCwgMHg0RDNCLAorICAgIDB4OTAxOSwgMHg5MDE5LCAweDIyN0UsIDB4OTAxQSwgMHg5MDFBLCAweDBFNTksIDB4OTAxQiwgMHg5MDFCLCAweDA3M0QsCisgICAgMHg5MDFDLCAweDkwMUMsIDB4NEQzQywgMHg5MDFELCAweDkwMUQsIDB4MEQ1QywgMHg5MDFFLCAweDkwMUUsIDB4MDRGNiwKKyAgICAweDkwMUYsIDB4OTAxRiwgMHgwRENFLCAweDkwMjAsIDB4OTAyMCwgMHgxMTJGLCAweDkwMjEsIDB4OTAyMSwgMHgxNzRFLAorICAgIDB4OTAyMiwgMHg5MDIyLCAweDA2ODcsIDB4OTAyMywgMHg5MDIzLCAweDIwMTksIDB4OTAyNCwgMHg5MDI1LCAweDREM0QsCisgICAgMHg5MDI2LCAweDkwMjYsIDB4MTc0QSwgMHg5MDI3LCAweDkwMkMsIDB4NEQzRiwgMHg5MDJELCAweDkwMkQsIDB4MTc1MSwKKyAgICAweDkwMkUsIDB4OTAyRSwgMHgwNTgxLCAweDkwMkYsIDB4OTAyRiwgMHgxNzUyLCAweDkwMzAsIDB4OTAzMSwgMHg0RDQ1LAorICAgIDB4OTAzMiwgMHg5MDMyLCAweDFGQkIsIDB4OTAzMywgMHg5MDM0LCAweDRENDcsIDB4OTAzNSwgMHg5MDM2LCAweDE3NEYsCisgICAgMHg5MDM3LCAweDkwMzcsIDB4NEQ0OSwgMHg5MDM4LCAweDkwMzgsIDB4MTA2NCwgMHg5MDM5LCAweDkwM0EsIDB4NEQ0QSwKKyAgICAweDkwM0IsIDB4OTAzQiwgMHgwQTg2LCAweDkwM0MsIDB4OTAzQywgMHgwNDJGLCAweDkwM0QsIDB4OTAzRCwgMHg0RDRDLAorICAgIDB4OTAzRSwgMHg5MDNFLCAweDEwQzcsIDB4OTAzRiwgMHg5MDQwLCAweDRENEQsIDB4OTA0MSwgMHg5MDQxLCAweDA2MUMsCisgICAgMHg5MDQyLCAweDkwNDIsIDB4MERFMSwgMHg5MDQzLCAweDkwNDMsIDB4NEQ0RiwgMHg5MDQ0LCAweDkwNDQsIDB4MTc1MywKKyAgICAweDkwNDUsIDB4OTA0NiwgMHg0RDUwLCAweDkwNDcsIDB4OTA0NywgMHgxMERCLCAweDkwNDgsIDB4OTA0QSwgMHg0RDUyLAorICAgIDB4OTA0QiwgMHg5MDRCLCAweDIyNTMsIDB4OTA0QywgMHg5MDRDLCAweDRENTUsIDB4OTA0RCwgMHg5MDRELCAweDA0NTIsCisgICAgMHg5MDRFLCAweDkwNEUsIDB4MUYzRSwgMHg5MDRGLCAweDkwNEYsIDB4MDYzMywgMHg5MDUwLCAweDkwNTAsIDB4MTc1NiwKKyAgICAweDkwNTEsIDB4OTA1MiwgMHgxNzU0LCAweDkwNTMsIDB4OTA1MywgMHgwNUExLCAweDkwNTQsIDB4OTA1NCwgMHgxRUE2LAorICAgIDB4OTA1NSwgMHg5MDU1LCAweDIxOEUsIDB4OTA1NiwgMHg5MDU2LCAweDRENTYsIDB4OTA1NywgMHg5MDU3LCAweDEwNEMsCisgICAgMHg5MDU4LCAweDkwNTgsIDB4MTc1OCwgMHg5MDU5LCAweDkwNUEsIDB4NEQ1NywgMHg5MDVCLCAweDkwNUIsIDB4MTc1QSwKKyAgICAweDkwNUMsIDB4OTA1QywgMHgyMUVDLCAweDkwNUQsIDB4OTA1RCwgMHg0RDU5LCAweDkwNUUsIDB4OTA1RSwgMHgxRUJFLAorICAgIDB4OTA1RiwgMHg5MDVGLCAweDRENUEsIDB4OTA2MCwgMHg5MDYwLCAweDIyNEEsIDB4OTA2MSwgMHg5MDYxLCAweDRENUIsCisgICAgMHg5MDYyLCAweDkwNjIsIDB4MTc1OSwgMHg5MDYzLCAweDkwNjMsIDB4MEMyRiwgMHg5MDY0LCAweDkwNjQsIDB4NEQ1QywKKyAgICAweDkwNjUsIDB4OTA2NSwgMHgxMDJBLCAweDkwNjYsIDB4OTA2NywgMHg0RDVELCAweDkwNjgsIDB4OTA2OCwgMHgxNzU3LAorICAgIDB4OTA2OSwgMHg5MDY5LCAweDIxMzMsIDB4OTA2QSwgMHg5MDZDLCAweDRENUYsIDB4OTA2RCwgMHg5MDZELCAweDExMjUsCisgICAgMHg5MDZFLCAweDkwNkUsIDB4MTE3QiwgMHg5MDZGLCAweDkwNzEsIDB4NEQ2MiwgMHg5MDcyLCAweDkwNzIsIDB4MUU4NCwKKyAgICAweDkwNzMsIDB4OTA3MywgMHg0RDY1LCAweDkwNzQsIDB4OTA3NCwgMHgxNzVDLCAweDkwNzUsIDB4OTA3NSwgMHgxMjRFLAorICAgIDB4OTA3NiwgMHg5MDc2LCAweDRENjYsIDB4OTA3NywgMHg5MDc3LCAweDIwQ0YsIDB4OTA3OCwgMHg5MDc4LCAweDIxRTIsCisgICAgMHg5MDc5LCAweDkwNzksIDB4NEQ2NywgMHg5MDdBLCAweDkwN0EsIDB4MjIwRiwgMHg5MDdCLCAweDkwN0IsIDB4NEQ2OCwKKyAgICAweDkwN0MsIDB4OTA3QywgMHgyMDI5LCAweDkwN0QsIDB4OTA3RCwgMHgxNzVELCAweDkwN0UsIDB4OTA3RSwgMHg0RDY5LAorICAgIDB4OTA3RiwgMHg5MDdGLCAweDA0NDUsIDB4OTA4MCwgMHg5MDgwLCAweDEwMjQsIDB4OTA4MSwgMHg5MDgxLCAweDIwNzMsCisgICAgMHg5MDgyLCAweDkwODIsIDB4MTc1RSwgMHg5MDgzLCAweDkwODMsIDB4MTc2MCwgMHg5MDg0LCAweDkwODQsIDB4MUY1NSwKKyAgICAweDkwODUsIDB4OTA4NiwgMHg0RDZBLCAweDkwODcsIDB4OTA4NywgMHgyM0YxLCAweDkwODgsIDB4OTA4OCwgMHgxNzVGLAorICAgIDB4OTA4OSwgMHg5MDg5LCAweDRENkMsIDB4OTA4QSwgMHg5MDhBLCAweDFFNDYsIDB4OTA4QiwgMHg5MDhCLCAweDE3NjEsCisgICAgMHg5MDhDLCAweDkwOEUsIDB4NEQ2RCwgMHg5MDhGLCAweDkwOEYsIDB4MjA2MywgMHg5MDkwLCAweDkwOTAsIDB4MjNGMywKKyAgICAweDkwOTEsIDB4OTA5MSwgMHgxMDVGLCAweDkwOTIsIDB4OTA5MiwgMHg0RDcwLCAweDkwOTMsIDB4OTA5MywgMHgwNUFDLAorICAgIDB4OTA5NCwgMHg5MDk0LCAweDRENzEsIDB4OTA5NSwgMHg5MDk1LCAweDE4MTcsIDB4OTA5NiwgMHg5MDk2LCAweDRENzIsCisgICAgMHg5MDk3LCAweDkwOTcsIDB4MTM2NywgMHg5MDk4LCAweDkwOTgsIDB4NEQ3MywgMHg5MDk5LCAweDkwOTksIDB4MTM2QSwKKyAgICAweDkwOUEsIDB4OTA5QSwgMHg0RDc0LCAweDkwOUIsIDB4OTA5QiwgMHgxMzY4LCAweDkwOUMsIDB4OTA5QywgMHg0RDc1LAorICAgIDB4OTA5RCwgMHg5MDlELCAweDEzNjksIDB4OTA5RSwgMHg5MEEwLCAweDRENzYsIDB4OTBBMSwgMHg5MEExLCAweDEzNkMsCisgICAgMHg5MEEyLCAweDkwQTIsIDB4MEY5QSwgMHg5MEEzLCAweDkwQTMsIDB4MEIyQSwgMHg5MEE0LCAweDkwQTUsIDB4NEQ3OSwKKyAgICAweDkwQTYsIDB4OTBBNiwgMHgwM0Y5LCAweDkwQTcsIDB4OTBBOSwgMHg0RDdCLCAweDkwQUEsIDB4OTBBQSwgMHgwRjdCLAorICAgIDB4OTBBQiwgMHg5MEFCLCAweDREN0UsIDB4OTBBQywgMHg5MEFDLCAweDEzNkIsIDB4OTBBRCwgMHg5MEFELCAweDREN0YsCisgICAgMHg5MEFFLCAweDkwQUUsIDB4MTBBRiwgMHg5MEFGLCAweDkwQUYsIDB4MDc2MSwgMHg5MEIwLCAweDkwQjAsIDB4MTM3MiwKKyAgICAweDkwQjEsIDB4OTBCMSwgMHgwQzZFLCAweDkwQjIsIDB4OTBCMiwgMHg0RDgwLCAweDkwQjMsIDB4OTBCMywgMHgxMzZFLAorICAgIDB4OTBCNCwgMHg5MEI0LCAweDEzNkQsIDB4OTBCNSwgMHg5MEI1LCAweDBEMTQsIDB4OTBCNiwgMHg5MEI2LCAweDEzNkYsCisgICAgMHg5MEI3LCAweDkwQjcsIDB4NEQ4MSwgMHg5MEI4LCAweDkwQjgsIDB4MTM3MSwgMHg5MEI5LCAweDkwQjksIDB4MTIzQiwKKyAgICAweDkwQkEsIDB4OTBCQSwgMHgxMzcwLCAweDkwQkIsIDB4OTBCQiwgMHgwQTIzLCAweDkwQkMsIDB4OTBCRCwgMHg0RDgyLAorICAgIDB4OTBCRSwgMHg5MEJFLCAweDEzNzUsIDB4OTBCRiwgMHg5MEMwLCAweDREODQsIDB4OTBDMSwgMHg5MEMxLCAweDEwRDksCisgICAgMHg5MEMyLCAweDkwQzMsIDB4NEQ4NiwgMHg5MEM0LCAweDkwQzQsIDB4MTM3NywgMHg5MEM1LCAweDkwQzUsIDB4MTM3NCwKKyAgICAweDkwQzYsIDB4OTBDNiwgMHg0RDg4LCAweDkwQzcsIDB4OTBDNywgMHgxMzc4LCAweDkwQzgsIDB4OTBDOSwgMHg0RDg5LAorICAgIDB4OTBDQSwgMHg5MENBLCAweDA4OEQsIDB4OTBDQiwgMHg5MENELCAweDREOEIsIDB4OTBDRSwgMHg5MENFLCAweDA5QjQsCisgICAgMHg5MENGLCAweDkwQ0YsIDB4MTM3MywgMHg5MEQwLCAweDkwRDAsIDB4MTM3NiwgMHg5MEQxLCAweDkwRDEsIDB4MTFBMiwKKyAgICAweDkwRDIsIDB4OTBEMiwgMHg0RDhFLCAweDkwRDMsIDB4OTBEMywgMHgxMzc5LCAweDkwRDQsIDB4OTBENiwgMHg0RDhGLAorICAgIDB4OTBENywgMHg5MEQ3LCAweDEzN0QsIDB4OTBEOCwgMHg5MERBLCAweDREOTIsIDB4OTBEQiwgMHg5MERCLCAweDEzN0UsCisgICAgMHg5MERDLCAweDkwREMsIDB4MTM3QywgMHg5MERELCAweDkwREQsIDB4MDc3OSwgMHg5MERFLCAweDkwREUsIDB4NEQ5NSwKKyAgICAweDkwREYsIDB4OTBERiwgMHgyMzFFLCAweDkwRTAsIDB4OTBFMCwgMHg0RDk2LCAweDkwRTEsIDB4OTBFMSwgMHgwOTMxLAorICAgIDB4OTBFMiwgMHg5MEUyLCAweDEzN0IsIDB4OTBFMywgMHg5MEU1LCAweDREOTcsIDB4OTBFNiwgMHg5MEU2LCAweDEzN0EsCisgICAgMHg5MEU3LCAweDkwRTcsIDB4MTEwQSwgMHg5MEU4LCAweDkwRTgsIDB4MDQ4NiwgMHg5MEU5LCAweDkwRUEsIDB4NEQ5QSwKKyAgICAweDkwRUIsIDB4OTBFQiwgMHgxMzdGLCAweDkwRUMsIDB4OTBFQywgMHg0RDlDLCAweDkwRUQsIDB4OTBFRCwgMHgwNzUyLAorICAgIDB4OTBFRSwgMHg5MEVFLCAweDREOUQsIDB4OTBFRiwgMHg5MEVGLCAweDEzODAsIDB4OTBGMCwgMHg5MEYzLCAweDREOUUsCisgICAgMHg5MEY0LCAweDkwRjQsIDB4MDRFMCwgMHg5MEY1LCAweDkwRjUsIDB4MjIzMywgMHg5MEY2LCAweDkwRjcsIDB4NERBMiwKKyAgICAweDkwRjgsIDB4OTBGOCwgMHgwNTg3LCAweDkwRjksIDB4OTBGQywgMHg0REE0LCAweDkwRkQsIDB4OTBGRCwgMHgwNUZCLAorICAgIDB4OTBGRSwgMHg5MEZFLCAweDEzODEsIDB4OTBGRiwgMHg5MEZGLCAweDREQTgsIDB4OTEwMCwgMHg5MTAxLCAweDREQTksCisgICAgMHg5MTAyLCAweDkxMDIsIDB4MDYzNCwgMHg5MTAzLCAweDkxMDMsIDB4NERBQiwgMHg5MTA0LCAweDkxMDQsIDB4MTM4MiwKKyAgICAweDkxMDUsIDB4OTEwNSwgMHg0REFDLCAweDkxMDYsIDB4OTEwNiwgMHgyMzIwLCAweDkxMDcsIDB4OTEwOCwgMHg0REFELAorICAgIDB4OTEwOSwgMHg5MTA5LCAweDIxQzcsIDB4OTEwQSwgMHg5MTExLCAweDREQUYsIDB4OTExMiwgMHg5MTEyLCAweDIyQkMsCisgICAgMHg5MTEzLCAweDkxMTMsIDB4NERCNywgMHg5MTE0LCAweDkxMTQsIDB4MjMxQywgMHg5MTE1LCAweDkxMTUsIDB4NERCOCwKKyAgICAweDkxMTYsIDB4OTExNiwgMHgyMjUxLCAweDkxMTcsIDB4OTExOCwgMHg0REI5LCAweDkxMTksIDB4OTExOSwgMHgwNDMyLAorICAgIDB4OTExQSwgMHg5MTFELCAweDREQkIsIDB4OTExRSwgMHg5MTFFLCAweDEzODQsIDB4OTExRiwgMHg5MTIxLCAweDREQkYsCisgICAgMHg5MTIyLCAweDkxMjIsIDB4MTM4MywgMHg5MTIzLCAweDkxMjMsIDB4MTM4NSwgMHg5MTI0LCAweDkxMjYsIDB4NERDMiwKKyAgICAweDkxMjcsIDB4OTEyNywgMHgxRUJCLCAweDkxMjgsIDB4OTEyQywgMHg0REM1LCAweDkxMkQsIDB4OTEyRCwgMHgyMjg3LAorICAgIDB4OTEyRSwgMHg5MTJFLCAweDREQ0EsIDB4OTEyRiwgMHg5MTJGLCAweDEzODcsIDB4OTEzMCwgMHg5MTMwLCAweDIwMkQsCisgICAgMHg5MTMxLCAweDkxMzEsIDB4MTM4NiwgMHg5MTMyLCAweDkxMzIsIDB4MUVBQiwgMHg5MTMzLCAweDkxMzMsIDB4NERDQiwKKyAgICAweDkxMzQsIDB4OTEzNCwgMHgyMzFELCAweDkxMzUsIDB4OTEzNSwgMHg0RENDLCAweDkxMzYsIDB4OTEzNiwgMHgyMzFGLAorICAgIDB4OTEzNywgMHg5MTM4LCAweDREQ0QsIDB4OTEzOSwgMHg5MTM5LCAweDEzODgsIDB4OTEzQSwgMHg5MTNBLCAweDIzMUIsCisgICAgMHg5MTNCLCAweDkxNDIsIDB4NERDRiwgMHg5MTQzLCAweDkxNDMsIDB4MTM4OSwgMHg5MTQ0LCAweDkxNDUsIDB4NERENywKKyAgICAweDkxNDYsIDB4OTE0NiwgMHgxMzhBLCAweDkxNDcsIDB4OTE0NywgMHg0REQ5LCAweDkxNDgsIDB4OTE0OCwgMHgyMzIxLAorICAgIDB4OTE0OSwgMHg5MTQ5LCAweDEwQjQsIDB4OTE0QSwgMHg5MTRBLCAweDFDRjgsIDB4OTE0QiwgMHg5MTRCLCAweDBDNzIsCisgICAgMHg5MTRDLCAweDkxNEMsIDB4MTIyMCwgMHg5MTRELCAweDkxNEQsIDB4MEJBNSwgMHg5MTRFLCAweDkxNEYsIDB4MUNGQSwKKyAgICAweDkxNTAsIDB4OTE1MCwgMHgxQ0Y5LCAweDkxNTEsIDB4OTE1MSwgMHg0RERBLCAweDkxNTIsIDB4OTE1MiwgMHgwOEY1LAorICAgIDB4OTE1MywgMHg5MTU2LCAweDREREIsIDB4OTE1NywgMHg5MTU3LCAweDBGQkEsIDB4OTE1OCwgMHg5MTU5LCAweDREREYsCisgICAgMHg5MTVBLCAweDkxNUEsIDB4MDY3MCwgMHg5MTVCLCAweDkxNUMsIDB4NERFMSwgMHg5MTVELCAweDkxNUQsIDB4MTExMCwKKyAgICAweDkxNUUsIDB4OTE1RSwgMHgwREZELCAweDkxNUYsIDB4OTE2MCwgMHg0REUzLCAweDkxNjEsIDB4OTE2MSwgMHgxQ0ZFLAorICAgIDB4OTE2MiwgMHg5MTYyLCAweDFDRkQsIDB4OTE2MywgMHg5MTYzLCAweDA3NUYsIDB4OTE2NCwgMHg5MTY0LCAweDFDRkMsCisgICAgMHg5MTY1LCAweDkxNjUsIDB4MERDQiwgMHg5MTY2LCAweDkxNjgsIDB4NERFNSwgMHg5MTY5LCAweDkxNjksIDB4MUQwMCwKKyAgICAweDkxNkEsIDB4OTE2QSwgMHgwOUJELCAweDkxNkIsIDB4OTE2QiwgMHg0REU4LCAweDkxNkMsIDB4OTE2QywgMHgwNTBGLAorICAgIDB4OTE2RCwgMHg5MTZELCAweDRERTksIDB4OTE2RSwgMHg5MTZFLCAweDBFNUIsIDB4OTE2RiwgMHg5MTZGLCAweDFEMDEsCisgICAgMHg5MTcwLCAweDkxNzAsIDB4MUNGRiwgMHg5MTcxLCAweDkxNzEsIDB4MDg4NSwgMHg5MTcyLCAweDkxNzIsIDB4MUQwNCwKKyAgICAweDkxNzMsIDB4OTE3MywgMHg0REVBLCAweDkxNzQsIDB4OTE3NCwgMHgxRDA1LCAweDkxNzUsIDB4OTE3NSwgMHgwODlFLAorICAgIDB4OTE3NiwgMHg5MTc2LCAweDBBQkQsIDB4OTE3NywgMHg5MTc3LCAweDA5NkUsIDB4OTE3OCwgMHg5MTc4LCAweDBERDYsCisgICAgMHg5MTc5LCAweDkxNzksIDB4MUQwNiwgMHg5MTdBLCAweDkxN0MsIDB4NERFQiwgMHg5MTdELCAweDkxN0UsIDB4MUQwMiwKKyAgICAweDkxN0YsIDB4OTE3RiwgMHgwQjUzLCAweDkxODAsIDB4OTE4NCwgMHg0REVFLCAweDkxODUsIDB4OTE4NSwgMHgxRDA4LAorICAgIDB4OTE4NiwgMHg5MTg2LCAweDRERjMsIDB4OTE4NywgMHg5MTg3LCAweDA1M0YsIDB4OTE4OCwgMHg5MTg4LCAweDRERjQsCisgICAgMHg5MTg5LCAweDkxODksIDB4MTI0QSwgMHg5MThBLCAweDkxOEEsIDB4NERGNSwgMHg5MThCLCAweDkxOEIsIDB4MDU1QSwKKyAgICAweDkxOEMsIDB4OTE4QywgMHgxRDA3LCAweDkxOEQsIDB4OTE4RCwgMHgxRDBBLCAweDkxOEUsIDB4OTE4RiwgMHg0REY2LAorICAgIDB4OTE5MCwgMHg5MTkwLCAweDFEMDksIDB4OTE5MSwgMHg5MTkxLCAweDFEMEIsIDB4OTE5MiwgMHg5MTkyLCAweDBGOUMsCisgICAgMHg5MTkzLCAweDkxOTUsIDB4NERGOCwgMHg5MTk2LCAweDkxOTYsIDB4MjI1NSwgMHg5MTk3LCAweDkxOTksIDB4NERGQiwKKyAgICAweDkxOUEsIDB4OTE5QSwgMHgwQUQ2LCAweDkxOUIsIDB4OTE5QiwgMHgwQzg0LCAweDkxOUMsIDB4OTE5QywgMHgxRThGLAorICAgIDB4OTE5RCwgMHg5MUExLCAweDRERkUsIDB4OTFBMiwgMHg5MUEzLCAweDFEMEMsIDB4OTFBNCwgMHg5MUE5LCAweDRFMDMsCisgICAgMHg5MUFBLCAweDkxQUEsIDB4MUQwRSwgMHg5MUFCLCAweDkxQUIsIDB4MjIwQywgMHg5MUFDLCAweDkxQUMsIDB4MUZBNCwKKyAgICAweDkxQUQsIDB4OTFBRiwgMHgxRDBGLCAweDkxQjAsIDB4OTFCMywgMHg0RTA5LCAweDkxQjQsIDB4OTFCNCwgMHgxRDEzLAorICAgIDB4OTFCNSwgMHg5MUI1LCAweDFEMTIsIDB4OTFCNiwgMHg5MUI5LCAweDRFMEQsIDB4OTFCQSwgMHg5MUJBLCAweDFEMTQsCisgICAgMHg5MUJCLCAweDkxQkYsIDB4NEUxMSwgMHg5MUMwLCAweDkxQzAsIDB4MjA5QiwgMHg5MUMxLCAweDkxQzEsIDB4MjFEOCwKKyAgICAweDkxQzIsIDB4OTFDMiwgMHg0RTE2LCAweDkxQzMsIDB4OTFDMywgMHgyNUZBLCAweDkxQzQsIDB4OTFDNCwgMHg0RTE3LAorICAgIDB4OTFDNSwgMHg5MUM1LCAweDI1RjksIDB4OTFDNiwgMHg5MUM2LCAweDRFMTgsIDB4OTFDNywgMHg5MUM3LCAweDA0OTAsCisgICAgMHg5MUM4LCAweDkxQzgsIDB4NEUxOSwgMHg5MUM5LCAweDkxQzksIDB4MTBCOSwgMHg5MUNBLCAweDkxQ0EsIDB4MEQ2NCwKKyAgICAweDkxQ0IsIDB4OTFDQiwgMHgyMTM0LCAweDkxQ0MsIDB4OTFDQywgMHgwOURBLCAweDkxQ0QsIDB4OTFDRCwgMHgxMUQ3LAorICAgIDB4OTFDRSwgMHg5MUNFLCAweDEwMzcsIDB4OTFDRiwgMHg5MUNGLCAweDBBMDgsIDB4OTFEMCwgMHg5MUQwLCAweDRFMUEsCisgICAgMHg5MUQxLCAweDkxRDEsIDB4MDhDMSwgMHg5MUQyLCAweDkxRDQsIDB4MjRGMywgMHg5MUQ1LCAweDkxRDUsIDB4MjRGOCwKKyAgICAweDkxRDYsIDB4OTFENiwgMHg0RTFCLCAweDkxRDcsIDB4OTFENywgMHgyNEY3LCAweDkxRDgsIDB4OTFEOCwgMHgxRUM4LAorICAgIDB4OTFEOSwgMHg5MUQ5LCAweDI0RjYsIDB4OTFEQSwgMHg5MURCLCAweDRFMUMsIDB4OTFEQywgMHg5MURDLCAweDA2QTUsCisgICAgMHg5MURELCAweDkxREQsIDB4MjI4MCwgMHg5MURFLCAweDkxRTIsIDB4NEUxRSwgMHg5MUUzLCAweDkxRTMsIDB4MUVDNSwKKyAgICAweDkxRTQsIDB4OTFFNCwgMHgyNEZCLCAweDkxRTUsIDB4OTFFNiwgMHg0RTIzLCAweDkxRTcsIDB4OTFFNywgMHgyNEZBLAorICAgIDB4OTFFOCwgMHg5MUU4LCAweDRFMjUsIDB4OTFFOSwgMHg5MUU5LCAweDFFRUQsIDB4OTFFQSwgMHg5MUY0LCAweDRFMjYsCisgICAgMHg5MUY1LCAweDkxRjUsIDB4MjRGRCwgMHg5MUY2LCAweDkxRjYsIDB4NEUzMSwgMHg5MUY3LCAweDkxRjcsIDB4MjRGOSwKKyAgICAweDkxRjgsIDB4OTFGOCwgMHg0RTMyLCAweDkxRjksIDB4OTFGOSwgMHgyNEZFLCAweDkxRkEsIDB4OTFGQSwgMHgyMENELAorICAgIDB4OTFGQiwgMHg5MUZGLCAweDRFMzMsIDB4OTIwMCwgMHg5MjAwLCAweDI1MDgsIDB4OTIwMSwgMHg5MjAxLCAweDI1MDQsCisgICAgMHg5MjAyLCAweDkyMDMsIDB4NEUzOCwgMHg5MjA0LCAweDkyMDQsIDB4MjUwNiwgMHg5MjA1LCAweDkyMDcsIDB4NEUzQSwKKyAgICAweDkyMDgsIDB4OTIwOCwgMHgyNEZGLCAweDkyMDksIDB4OTIwOSwgMHgyMDkwLCAweDkyMEEsIDB4OTIwQywgMHg0RTNELAorICAgIDB4OTIwRCwgMHg5MjBELCAweDFFREQsIDB4OTIwRSwgMHg5MjBFLCAweDFGMjUsIDB4OTIwRiwgMHg5MjBGLCAweDRFNDAsCisgICAgMHg5MjEwLCAweDkyMTAsIDB4MjUwMywgMHg5MjExLCAweDkyMTEsIDB4MjUwMiwgMHg5MjEyLCAweDkyMTMsIDB4NEU0MSwKKyAgICAweDkyMTQsIDB4OTIxNCwgMHgxRTdBLCAweDkyMTUsIDB4OTIxNSwgMHgyMEE2LCAweDkyMTYsIDB4OTIxRCwgMHg0RTQzLAorICAgIDB4OTIxRSwgMHg5MjFFLCAweDFGRDUsIDB4OTIxRiwgMHg5MjIyLCAweDRFNEIsIDB4OTIyMywgMHg5MjIzLCAweDFGMTEsCisgICAgMHg5MjI0LCAweDkyMjQsIDB4NEU0RiwgMHg5MjI1LCAweDkyMjUsIDB4MjUwNywgMHg5MjI2LCAweDkyMjYsIDB4MjUwMCwKKyAgICAweDkyMjcsIDB4OTIyNywgMHgyNTA1LCAweDkyMjgsIDB4OTIyRCwgMHg0RTUwLCAweDkyMkUsIDB4OTIyRSwgMHgyNTE5LAorICAgIDB4OTIyRiwgMHg5MjJGLCAweDRFNTYsIDB4OTIzMCwgMHg5MjMwLCAweDI1MTUsIDB4OTIzMSwgMHg5MjMyLCAweDRFNTcsCisgICAgMHg5MjMzLCAweDkyMzMsIDB4MjUwQywgMHg5MjM0LCAweDkyMzQsIDB4MjAzMSwgMHg5MjM1LCAweDkyMzYsIDB4NEU1OSwKKyAgICAweDkyMzcsIDB4OTIzNywgMHgyNTBCLCAweDkyMzgsIDB4OTIzOCwgMHgyNTBGLCAweDkyMzksIDB4OTIzOSwgMHgyNTFBLAorICAgIDB4OTIzQSwgMHg5MjNBLCAweDI1MDksIDB4OTIzQiwgMHg5MjNDLCAweDRFNUIsIDB4OTIzRCwgMHg5MjNELCAweDI1MEUsCisgICAgMHg5MjNFLCAweDkyM0UsIDB4MjIzNCwgMHg5MjNGLCAweDkyM0YsIDB4MjUxMywgMHg5MjQwLCAweDkyNDAsIDB4MUY4MCwKKyAgICAweDkyNDEsIDB4OTI0NCwgMHg0RTVELCAweDkyNDUsIDB4OTI0NSwgMHgyNTAxLCAweDkyNDYsIDB4OTI0NywgMHg0RTYxLAorICAgIDB4OTI0OCwgMHg5MjQ4LCAweDI1MTcsIDB4OTI0OSwgMHg5MjQ5LCAweDI1MTYsIDB4OTI0QSwgMHg5MjRDLCAweDRFNjMsCisgICAgMHg5MjRELCAweDkyNEQsIDB4MjUxOCwgMHg5MjRFLCAweDkyNTAsIDB4NEU2NiwgMHg5MjUxLCAweDkyNTEsIDB4MUU1NiwKKyAgICAweDkyNTIsIDB4OTI1NCwgMHg0RTY5LCAweDkyNTUsIDB4OTI1NSwgMHgyNTBELCAweDkyNTYsIDB4OTI1NiwgMHg0RTZDLAorICAgIDB4OTI1NywgMHg5MjU3LCAweDIwRDMsIDB4OTI1OCwgMHg5MjU5LCAweDRFNkQsIDB4OTI1QSwgMHg5MjVBLCAweDIwN0EsCisgICAgMHg5MjVCLCAweDkyNUIsIDB4MjBDRSwgMHg5MjVDLCAweDkyNUQsIDB4NEU2RiwgMHg5MjVFLCAweDkyNUUsIDB4MjUxMCwKKyAgICAweDkyNUYsIDB4OTI2MSwgMHg0RTcxLCAweDkyNjIsIDB4OTI2MiwgMHgxRTU1LCAweDkyNjMsIDB4OTI2NSwgMHg0RTc0LAorICAgIDB4OTI2NiwgMHg5MjY2LCAweDI1MEEsIDB4OTI2NywgMHg5MjZCLCAweDRFNzcsIDB4OTI2QywgMHg5MjZELCAweDI1MTEsCisgICAgMHg5MjZFLCAweDkyNzMsIDB4NEU3QywgMHg5Mjc0LCAweDkyNzQsIDB4MDg2QiwgMHg5Mjc1LCAweDkyNzcsIDB4NEU4MiwKKyAgICAweDkyNzgsIDB4OTI3OCwgMHgxRkFBLCAweDkyNzksIDB4OTI3OSwgMHg0RTg1LCAweDkyN0EsIDB4OTI3QSwgMHgyNTFFLAorICAgIDB4OTI3QiwgMHg5MjdCLCAweDFGMUYsIDB4OTI3QywgMHg5MjdFLCAweDRFODYsIDB4OTI3RiwgMHg5MjdGLCAweDI1MkQsCisgICAgMHg5MjgwLCAweDkyODAsIDB4MjIxRCwgMHg5MjgxLCAweDkyODIsIDB4NEU4OSwgMHg5MjgzLCAweDkyODMsIDB4MjUzMiwKKyAgICAweDkyODQsIDB4OTI4NCwgMHg0RThCLCAweDkyODUsIDB4OTI4NSwgMHgyMTdCLCAweDkyODYsIDB4OTI4RCwgMHg0RThDLAorICAgIDB4OTI4RSwgMHg5MjhFLCAweDFEODAsIDB4OTI4RiwgMHg5MjkwLCAweDRFOTQsIDB4OTI5MSwgMHg5MjkxLCAweDIxQUYsCisgICAgMHg5MjkyLCAweDkyOTIsIDB4NEU5NiwgMHg5MjkzLCAweDkyOTMsIDB4MjUyQywgMHg5Mjk0LCAweDkyOTUsIDB4NEU5NywKKyAgICAweDkyOTYsIDB4OTI5NiwgMHgyNTI4LCAweDkyOTcsIDB4OTI5NywgMHg0RTk5LCAweDkyOTgsIDB4OTI5OCwgMHgyMDhDLAorICAgIDB4OTI5OSwgMHg5Mjk5LCAweDRFOUEsIDB4OTI5QSwgMHg5MjlBLCAweDI1MkYsIDB4OTI5QiwgMHg5MjlCLCAweDRFOUIsCisgICAgMHg5MjlDLCAweDkyOUMsIDB4MjFCQywgMHg5MjlELCAweDkyOUYsIDB4NEU5QywgMHg5MkEwLCAweDkyQTAsIDB4MjUxRCwKKyAgICAweDkyQTEsIDB4OTJBMiwgMHg0RTlGLCAweDkyQTMsIDB4OTJBMywgMHgyNTM1LCAweDkyQTQsIDB4OTJBNCwgMHg0RUExLAorICAgIDB4OTJBNSwgMHg5MkE1LCAweDIyMEQsIDB4OTJBNiwgMHg5MkE2LCAweDI1MjYsIDB4OTJBNywgMHg5MkE3LCAweDRFQTIsCisgICAgMHg5MkE4LCAweDkyQTgsIDB4MjUzNCwgMHg5MkE5LCAweDkyQTksIDB4MjUyQSwgMHg5MkFBLCAweDkyQUEsIDB4MjUxRiwKKyAgICAweDkyQUIsIDB4OTJBQiwgMHgyNTMxLCAweDkyQUMsIDB4OTJBQywgMHgyNTFDLCAweDkyQUQsIDB4OTJBRCwgMHg0RUEzLAorICAgIDB4OTJBRSwgMHg5MkFFLCAweDFEODEsIDB4OTJBRiwgMHg5MkIwLCAweDRFQTQsIDB4OTJCMSwgMHg5MkIxLCAweDI1MjUsCisgICAgMHg5MkIyLCAweDkyQjYsIDB4NEVBNiwgMHg5MkI3LCAweDkyQjcsIDB4MjFDRCwgMHg5MkI4LCAweDkyQjgsIDB4NEVBQiwKKyAgICAweDkyQjksIDB4OTJCOSwgMHgyMURBLCAweDkyQkEsIDB4OTJCQSwgMHg0RUFDLCAweDkyQkIsIDB4OTJCQiwgMHgyMTcyLAorICAgIDB4OTJCQywgMHg5MkJDLCAweDI1M0UsIDB4OTJCRCwgMHg5MkMwLCAweDRFQUQsIDB4OTJDMSwgMHg5MkMxLCAweDIwNEYsCisgICAgMHg5MkMyLCAweDkyQzIsIDB4NEVCMSwgMHg5MkMzLCAweDkyQzMsIDB4MjU0MywgMHg5MkM0LCAweDkyQzQsIDB4NEVCMiwKKyAgICAweDkyQzUsIDB4OTJDNSwgMHgyMUQ3LCAweDkyQzYsIDB4OTJDNiwgMHg0RUIzLCAweDkyQzcsIDB4OTJDNywgMHgxRTNDLAorICAgIDB4OTJDOCwgMHg5MkM4LCAweDFEODIsIDB4OTJDOSwgMHg5MkNCLCAweDRFQjQsIDB4OTJDQywgMHg5MkNDLCAweDI1MjksCisgICAgMHg5MkNELCAweDkyQ0UsIDB4NEVCNywgMHg5MkNGLCAweDkyQ0YsIDB4MjUyMSwgMHg5MkQwLCAweDkyRDEsIDB4NEVCOSwKKyAgICAweDkyRDIsIDB4OTJEMiwgMHgxRUZGLCAweDkyRDMsIDB4OTJEQywgMHg0RUJCLCAweDkyREQsIDB4OTJERCwgMHgyNTNGLAorICAgIDB4OTJERSwgMHg5MkRFLCAweDRFQzUsIDB4OTJERiwgMHg5MkRGLCAweDI1NDQsIDB4OTJFMCwgMHg5MkUyLCAweDRFQzYsCisgICAgMHg5MkUzLCAweDkyRTMsIDB4MjUyMywgMHg5MkU0LCAweDkyRTQsIDB4MUU5MCwgMHg5MkU1LCAweDkyRTUsIDB4MjUzQSwKKyAgICAweDkyRTYsIDB4OTJFNiwgMHgyNTQ1LCAweDkyRTcsIDB4OTJFNywgMHg0RUM5LCAweDkyRTgsIDB4OTJFOCwgMHgyNTNELAorICAgIDB4OTJFOSwgMHg5MkU5LCAweDRFQ0EsIDB4OTJFQSwgMHg5MkVBLCAweDIwQzEsIDB4OTJFQiwgMHg5MkVDLCAweDRFQ0IsCisgICAgMHg5MkVELCAweDkyRUQsIDB4MjEwMywgMHg5MkVFLCAweDkyRUUsIDB4MjUyMCwgMHg5MkVGLCAweDkyRUYsIDB4MjUzQywKKyAgICAweDkyRjAsIDB4OTJGMCwgMHgyNTNCLCAweDkyRjEsIDB4OTJGMSwgMHgyNTM4LCAweDkyRjIsIDB4OTJGNSwgMHg0RUNELAorICAgIDB4OTJGNiwgMHg5MkY2LCAweDI1NDAsIDB4OTJGNywgMHg5MkY3LCAweDRFRDEsIDB4OTJGOCwgMHg5MkY4LCAweDFGQ0QsCisgICAgMHg5MkY5LCAweDkyRkIsIDB4NEVEMiwgMHg5MkZDLCAweDkyRkMsIDB4MUYxOCwgMHg5MkZELCAweDkyRkYsIDB4NEVENSwKKyAgICAweDkzMDAsIDB4OTMwMCwgMHg0RUQ4LCAweDkzMDEsIDB4OTMwMSwgMHgyNTRCLCAweDkzMDIsIDB4OTMwNSwgMHg0RUQ5LAorICAgIDB4OTMwNiwgMHg5MzA2LCAweDI1NDcsIDB4OTMwNywgMHg5MzA4LCAweDI1NEYsIDB4OTMwOSwgMHg5MzBGLCAweDRFREQsCisgICAgMHg5MzEwLCAweDkzMTAsIDB4MjJCMCwgMHg5MzExLCAweDkzMTEsIDB4NEVFNCwgMHg5MzEyLCAweDkzMTIsIDB4MjU0NiwKKyAgICAweDkzMTMsIDB4OTMxNCwgMHg0RUU1LCAweDkzMTUsIDB4OTMxNSwgMHgyNTRDLCAweDkzMTYsIDB4OTMxNywgMHg0RUU3LAorICAgIDB4OTMxOCwgMHg5MzE4LCAweDFFOUEsIDB4OTMxOSwgMHg5MzE5LCAweDI1NTIsIDB4OTMxQSwgMHg5MzFBLCAweDI1MzAsCisgICAgMHg5MzFCLCAweDkzMUIsIDB4MjU0OSwgMHg5MzFDLCAweDkzMUUsIDB4NEVFOSwgMHg5MzFGLCAweDkzMUYsIDB4MjU1MSwKKyAgICAweDkzMjAsIDB4OTMyMCwgMHgxRUNBLCAweDkzMjEsIDB4OTMyMSwgMHg0RUVDLCAweDkzMjIsIDB4OTMyMiwgMHgyMEQyLAorICAgIDB4OTMyMywgMHg5MzI1LCAweDRFRUQsIDB4OTMyNiwgMHg5MzI2LCAweDFGQjgsIDB4OTMyNywgMHg5MzI3LCAweDRFRjAsCisgICAgMHg5MzI4LCAweDkzMjgsIDB4MjA3OSwgMHg5MzI5LCAweDkzMkEsIDB4NEVGMSwgMHg5MzJCLCAweDkzMkIsIDB4MjFBQiwKKyAgICAweDkzMkMsIDB4OTMyRCwgMHg0RUYzLCAweDkzMkUsIDB4OTMyRSwgMHgyNTRELCAweDkzMkYsIDB4OTMyRiwgMHgxRUE1LAorICAgIDB4OTMzMCwgMHg5MzMxLCAweDRFRjUsIDB4OTMzMiwgMHg5MzMyLCAweDIwNEMsIDB4OTMzMywgMHg5MzMzLCAweDIwODAsCisgICAgMHg5MzM0LCAweDkzMzUsIDB4NEVGNywgMHg5MzM2LCAweDkzMzYsIDB4MjY2RCwgMHg5MzM3LCAweDkzMzcsIDB4NEVGOSwKKyAgICAweDkzMzgsIDB4OTMzOCwgMHgyNTM3LCAweDkzMzksIDB4OTMzRCwgMHg0RUZBLCAweDkzM0UsIDB4OTMzRSwgMHgxRDgzLAorICAgIDB4OTMzRiwgMHg5MzNGLCAweDRFRkYsIDB4OTM0MCwgMHg5MzQwLCAweDI1NEEsIDB4OTM0MSwgMHg5MzQxLCAweDIxQjgsCisgICAgMHg5MzQyLCAweDkzNDIsIDB4NEYwMCwgMHg5MzQzLCAweDkzNDMsIDB4MjU0RSwgMHg5MzQ0LCAweDkzNDUsIDB4NEYwMSwKKyAgICAweDkzNDYsIDB4OTM0NiwgMHgyNEZDLCAweDkzNDcsIDB4OTM0NywgMHgyNTU0LCAweDkzNDgsIDB4OTM0QSwgMHg0RjAzLAorICAgIDB4OTM0QiwgMHg5MzRCLCAweDFGM0MsIDB4OTM0QywgMHg5MzRDLCAweDRGMDYsIDB4OTM0RCwgMHg5MzRELCAweDFFRDUsCisgICAgMHg5MzRFLCAweDkzNTMsIDB4NEYwNywgMHg5MzU0LCAweDkzNTQsIDB4MjU1NiwgMHg5MzU1LCAweDkzNTcsIDB4NEYwRCwKKyAgICAweDkzNTgsIDB4OTM1OCwgMHgyMjY4LCAweDkzNTksIDB4OTM1QSwgMHg0RjEwLCAweDkzNUIsIDB4OTM1QiwgMHgxRUQ2LAorICAgIDB4OTM1QywgMHg5MzYzLCAweDRGMTIsIDB4OTM2NCwgMHg5MzY0LCAweDI1NTcsIDB4OTM2NSwgMHg5MzY1LCAweDI1NTMsCisgICAgMHg5MzY2LCAweDkzNjgsIDB4NEYxQSwgMHg5MzY5LCAweDkzNjksIDB4MjU0OCwgMHg5MzZBLCAweDkzNkEsIDB4MUQ4NCwKKyAgICAweDkzNkIsIDB4OTM2QiwgMHg0RjFELCAweDkzNkMsIDB4OTM2QywgMHgyMERDLCAweDkzNkQsIDB4OTM2RiwgMHg0RjFFLAorICAgIDB4OTM3MCwgMHg5MzcwLCAweDI1NTksIDB4OTM3MSwgMHg5Mzc0LCAweDRGMjEsIDB4OTM3NSwgMHg5Mzc1LCAweDFGOTcsCisgICAgMHg5Mzc2LCAweDkzNzYsIDB4MjU1NSwgMHg5Mzc3LCAweDkzNzksIDB4NEYyNSwgMHg5MzdBLCAweDkzN0EsIDB4MjI3RCwKKyAgICAweDkzN0IsIDB4OTM3RCwgMHg0RjI4LCAweDkzN0UsIDB4OTM3RSwgMHgyNTdFLCAweDkzN0YsIDB4OTM4MSwgMHg0RjJCLAorICAgIDB4OTM4MiwgMHg5MzgyLCAweDIwN0MsIDB4OTM4MywgMHg5MzgzLCAweDRGMkUsIDB4OTM4NCwgMHg5Mzg0LCAweDI1NUEsCisgICAgMHg5Mzg1LCAweDkzODYsIDB4NEYyRiwgMHg5Mzg3LCAweDkzODcsIDB4MjU1RSwgMHg5Mzg4LCAweDkzODksIDB4NEYzMSwKKyAgICAweDkzOEEsIDB4OTM4QSwgMHgxRTM0LCAweDkzOEIsIDB4OTM4RSwgMHg0RjMzLCAweDkzOEYsIDB4OTM4RiwgMHgxRDg2LAorICAgIDB4OTM5MCwgMHg5Mzk1LCAweDRGMzcsIDB4OTM5NiwgMHg5Mzk2LCAweDIxNUUsIDB4OTM5NywgMHg5Mzk3LCAweDRGM0QsCisgICAgMHg5Mzk4LCAweDkzOTgsIDB4MjU2MCwgMHg5Mzk5LCAweDkzQTEsIDB4NEYzRSwgMHg5M0EyLCAweDkzQTIsIDB4MjFBMiwKKyAgICAweDkzQTMsIDB4OTNBMywgMHgyMzU0LCAweDkzQTQsIDB4OTNBNSwgMHg0RjQ3LCAweDkzQTYsIDB4OTNBNiwgMHgyNTYzLAorICAgIDB4OTNBNywgMHg5M0E3LCAweDI1MjcsIDB4OTNBOCwgMHg5M0E4LCAweDRGNDksIDB4OTNBOSwgMHg5M0E5LCAweDI1MkUsCisgICAgMHg5M0FBLCAweDkzQUEsIDB4MjU1OCwgMHg5M0FCLCAweDkzQUIsIDB4NEY0QSwgMHg5M0FDLCAweDkzQUMsIDB4MUYxQiwKKyAgICAweDkzQUQsIDB4OTNBRCwgMHg0RjRCLCAweDkzQUUsIDB4OTNBRSwgMHgyMjgzLCAweDkzQUYsIDB4OTNBRiwgMHg0RjRDLAorICAgIDB4OTNCMCwgMHg5M0IwLCAweDI1NjQsIDB4OTNCMSwgMHg5M0IyLCAweDRGNEQsIDB4OTNCMywgMHg5M0IzLCAweDIwQTAsCisgICAgMHg5M0I0LCAweDkzQjQsIDB4NEY0RiwgMHg5M0I1LCAweDkzQjUsIDB4MjU2NSwgMHg5M0I2LCAweDkzQjcsIDB4NEY1MCwKKyAgICAweDkzQjgsIDB4OTNCOCwgMHgyNTYxLCAweDkzQjksIDB4OTNCRSwgMHg0RjUyLCAweDkzQkYsIDB4OTNCRiwgMHgyNTYyLAorICAgIDB4OTNDMCwgMHg5M0MyLCAweDRGNTgsIDB4OTNDMywgMHg5M0MzLCAweDI1NkMsIDB4OTNDNCwgMHg5M0M2LCAweDRGNUIsCisgICAgMHg5M0M3LCAweDkzQzcsIDB4MjU2RCwgMHg5M0M4LCAweDkzQzgsIDB4MjAyMCwgMHg5M0M5LCAweDkzQzksIDB4NEY1RSwKKyAgICAweDkzQ0EsIDB4OTNDQSwgMHgxRDg1LCAweDkzQ0IsIDB4OTNDQiwgMHg0RjVGLCAweDkzQ0MsIDB4OTNDQywgMHgyNTVGLAorICAgIDB4OTNDRCwgMHg5M0NELCAweDI1NkEsIDB4OTNDRSwgMHg5M0QwLCAweDRGNjAsIDB4OTNEMSwgMHg5M0QxLCAweDI1NkUsCisgICAgMHg5M0QyLCAweDkzRDUsIDB4NEY2MywgMHg5M0Q2LCAweDkzRDYsIDB4MUUwMSwgMHg5M0Q3LCAweDkzRDcsIDB4MjUzOSwKKyAgICAweDkzRDgsIDB4OTNEOCwgMHgyNTVDLCAweDkzRDksIDB4OTNEQiwgMHg0RjY3LCAweDkzREMsIDB4OTNERCwgMHgyNTY4LAorICAgIDB4OTNERSwgMHg5M0RFLCAweDI1NkIsIDB4OTNERiwgMHg5M0RGLCAweDFFNkYsIDB4OTNFMCwgMHg5M0UwLCAweDRGNkEsCisgICAgMHg5M0UxLCAweDkzRTEsIDB4MUZDNCwgMHg5M0UyLCAweDkzRTIsIDB4MjU2NywgMHg5M0UzLCAweDkzRTMsIDB4NEY2QiwKKyAgICAweDkzRTQsIDB4OTNFNCwgMHgyNTVCLCAweDkzRTUsIDB4OTNFNywgMHg0RjZDLCAweDkzRTgsIDB4OTNFOCwgMHgyNjFELAorICAgIDB4OTNFOSwgMHg5M0Y0LCAweDRGNkYsIDB4OTNGNSwgMHg5M0Y1LCAweDI1MkIsIDB4OTNGNiwgMHg5M0Y2LCAweDRGN0IsCisgICAgMHg5M0Y3LCAweDkzRjcsIDB4MjU3MSwgMHg5M0Y4LCAweDkzRjgsIDB4NEY3QywgMHg5M0Y5LCAweDkzRjksIDB4MjU3NywKKyAgICAweDkzRkEsIDB4OTNGRiwgMHg0RjdELCAweDk0MDAsIDB4OTQwMiwgMHg0RjgzLCAweDk0MDMsIDB4OTQwMywgMHgyNTIyLAorICAgIDB4OTQwNCwgMHg5NDBBLCAweDRGODYsIDB4OTQwQiwgMHg5NDBCLCAweDI1MzMsIDB4OTQwQywgMHg5NDBGLCAweDRGOEQsCisgICAgMHg5NDEwLCAweDk0MTAsIDB4MjAyQSwgMHg5NDExLCAweDk0MTEsIDB4NEY5MSwgMHg5NDEyLCAweDk0MTIsIDB4MjUzNiwKKyAgICAweDk0MTMsIDB4OTQxMywgMHgyNTczLCAweDk0MTQsIDB4OTQxNCwgMHgyNTZGLCAweDk0MTUsIDB4OTQxNywgMHg0RjkyLAorICAgIDB4OTQxOCwgMHg5NDE4LCAweDIyOTMsIDB4OTQxOSwgMHg5NDE5LCAweDI1NzgsIDB4OTQxQSwgMHg5NDFDLCAweDRGOTUsCisgICAgMHg5NDFELCAweDk0MUQsIDB4MjU3MCwgMHg5NDFFLCAweDk0MUYsIDB4NEY5OCwgMHg5NDIwLCAweDk0MjAsIDB4MjU3NSwKKyAgICAweDk0MjEsIDB4OTQyNSwgMHg0RjlBLCAweDk0MjYsIDB4OTQyNywgMHgyNTQxLCAweDk0MjgsIDB4OTQyOCwgMHgyNTVELAorICAgIDB4OTQyOSwgMHg5NDJELCAweDRGOUYsIDB4OTQyRSwgMHg5NDJFLCAweDIwMUEsIDB4OTQyRiwgMHg5NDMxLCAweDRGQTQsCisgICAgMHg5NDMyLCAweDk0MzIsIDB4MjU3QSwgMHg5NDMzLCAweDk0MzMsIDB4MjAwNiwgMHg5NDM0LCAweDk0MzQsIDB4NEZBNywKKyAgICAweDk0MzUsIDB4OTQzNSwgMHgyMTc3LCAweDk0MzYsIDB4OTQzNywgMHg0RkE4LCAweDk0MzgsIDB4OTQzOCwgMHgyNTFCLAorICAgIDB4OTQzOSwgMHg5NDM5LCAweDRGQUEsIDB4OTQzQSwgMHg5NDNBLCAweDI1MjQsIDB4OTQzQiwgMHg5NDNELCAweDRGQUIsCisgICAgMHg5NDNFLCAweDk0M0UsIDB4MUQ4NywgMHg5NDNGLCAweDk0M0YsIDB4MjU3QiwgMHg5NDQwLCAweDk0NDMsIDB4NEZBRSwKKyAgICAweDk0NDQsIDB4OTQ0NCwgMHgyMkEzLCAweDk0NDUsIDB4OTQ0OSwgMHg0RkIyLCAweDk0NEEsIDB4OTQ0QSwgMHgyNTc5LAorICAgIDB4OTQ0QiwgMHg5NDRCLCAweDRGQjcsIDB4OTQ0QywgMHg5NDRDLCAweDI1NjYsIDB4OTQ0RCwgMHg5NDUxLCAweDRGQjgsCisgICAgMHg5NDUyLCAweDk0NTIsIDB4MUY5MywgMHg5NDUzLCAweDk0NTMsIDB4NEZCRCwgMHg5NDU0LCAweDk0NTQsIDB4MjU3QywKKyAgICAweDk0NTUsIDB4OTQ1RiwgMHg0RkJFLCAweDk0NjAsIDB4OTQ2MCwgMHgyNTE0LCAweDk0NjEsIDB4OTQ2MiwgMHg0RkM5LAorICAgIDB4OTQ2MywgMHg5NDYzLCAweDI1N0QsIDB4OTQ2NCwgMHg5NDY0LCAweDRGQ0IsIDB4OTQ2NSwgMHg5NDY1LCAweDI1NzIsCisgICAgMHg5NDY2LCAweDk0NkEsIDB4NEZDQywgMHg5NDZCLCAweDk0NkIsIDB4MUQ4OCwgMHg5NDZDLCAweDk0NkMsIDB4NEZEMSwKKyAgICAweDk0NkQsIDB4OTQ2RCwgMHgyNTc0LCAweDk0NkUsIDB4OTQ2RiwgMHg0RkQyLCAweDk0NzAsIDB4OTQ3MCwgMHgyMjRFLAorICAgIDB4OTQ3MSwgMHg5NDcxLCAweDRGRDQsIDB4OTQ3MiwgMHg5NDcyLCAweDIxQzYsIDB4OTQ3MywgMHg5NDc2LCAweDRGRDUsCisgICAgMHg5NDc3LCAweDk0NzcsIDB4MjA5RiwgMHg5NDc4LCAweDk0NzgsIDB4NEZEOSwgMHg5NDc5LCAweDk0NzksIDB4MjU3NiwKKyAgICAweDk0N0EsIDB4OTQ3QiwgMHg0RkRBLCAweDk0N0MsIDB4OTQ3QywgMHgyMDY0LCAweDk0N0QsIDB4OTQ3RCwgMHgyMkJGLAorICAgIDB4OTQ3RSwgMHg5NDdFLCAweDI2MUMsIDB4OTQ3RiwgMHg5NDdGLCAweDIyNUUsIDB4OTQ4MCwgMHg5NDg0LCAweDRGREMsCisgICAgMHg5NDg1LCAweDk0ODcsIDB4MUE4RSwgMHg5NDg4LCAweDk0ODgsIDB4MTE4QywgMHg5NDg5LCAweDk0ODksIDB4MDVFMywKKyAgICAweDk0OEEsIDB4OTQ4QSwgMHgxQTkyLCAweDk0OEIsIDB4OTQ4QiwgMHgxQTkxLCAweDk0OEMsIDB4OTQ4RCwgMHgxQTkzLAorICAgIDB4OTQ4RSwgMHg5NDhFLCAweDBDMjIsIDB4OTQ4RiwgMHg5NDkwLCAweDFBOTUsIDB4OTQ5MSwgMHg5NDkxLCAweDRGRTEsCisgICAgMHg5NDkyLCAweDk0OTIsIDB4MDY0RCwgMHg5NDkzLCAweDk0OTMsIDB4MDVENywgMHg5NDk0LCAweDk0OTQsIDB4MUE5NywKKyAgICAweDk0OTUsIDB4OTQ5NSwgMHgxQTk5LCAweDk0OTYsIDB4OTQ5NiwgMHg0RkUyLCAweDk0OTcsIDB4OTQ5NywgMHgxQTk4LAorICAgIDB4OTQ5OCwgMHg5NDk4LCAweDRGRTMsIDB4OTQ5OSwgMHg5NDk5LCAweDA2QzEsIDB4OTQ5QSwgMHg5NDlDLCAweDFBOUEsCisgICAgMHg5NDlELCAweDk0OUQsIDB4MDYxQSwgMHg5NDlFLCAweDk0OUUsIDB4MDREMywgMHg5NDlGLCAweDk0OUYsIDB4MTFEMiwKKyAgICAweDk0QTAsIDB4OTRBMCwgMHgwQjI5LCAweDk0QTEsIDB4OTRBMSwgMHgwNDFFLCAweDk0QTIsIDB4OTRBMiwgMHgwNkQxLAorICAgIDB4OTRBMywgMHg5NEE0LCAweDFBOUQsIDB4OTRBNSwgMHg5NEE1LCAweDExMDIsIDB4OTRBNiwgMHg5NEE2LCAweDBDNTIsCisgICAgMHg5NEE3LCAweDk0QTcsIDB4MDkyQSwgMHg5NEE4LCAweDk0QTgsIDB4MEVFOCwgMHg5NEE5LCAweDk0QTksIDB4MDcwQywKKyAgICAweDk0QUEsIDB4OTRBQSwgMHgxQUEwLCAweDk0QUIsIDB4OTRBQiwgMHgxQTlGLCAweDk0QUMsIDB4OTRBQywgMHgxQUEyLAorICAgIDB4OTRBRCwgMHg5NEFELCAweDFBQTEsIDB4OTRBRSwgMHg5NEFFLCAweDBCNjYsIDB4OTRBRiwgMHg5NEIwLCAweDFBQTMsCisgICAgMHg5NEIxLCAweDk0QjEsIDB4MEMyQiwgMHg5NEIyLCAweDk0QjIsIDB4MUFBNSwgMHg5NEIzLCAweDk0QjMsIDB4MEMyQywKKyAgICAweDk0QjQsIDB4OTRCNCwgMHgxQUE2LCAweDk0QjUsIDB4OTRCNSwgMHgwNDZFLCAweDk0QjYsIDB4OTRCQSwgMHgxQUE3LAorICAgIDB4OTRCQiwgMHg5NEJCLCAweDEyNDcsIDB4OTRCQywgMHg5NEJELCAweDFBQUMsIDB4OTRCRSwgMHg5NEJFLCAweDA4NEIsCisgICAgMHg5NEJGLCAweDk0QkYsIDB4MUFBRSwgMHg5NEMwLCAweDk0QzAsIDB4MTBCMCwgMHg5NEMxLCAweDk0QzEsIDB4MEU0RCwKKyAgICAweDk0QzIsIDB4OTRDMiwgMHgwNDczLCAweDk0QzMsIDB4OTRDMywgMHgwQTJFLCAweDk0QzQsIDB4OTRDNCwgMHgxQUFGLAorICAgIDB4OTRDNSwgMHg5NEM1LCAweDBDMjMsIDB4OTRDNiwgMHg5NEM2LCAweDBBQjIsIDB4OTRDNywgMHg5NEM3LCAweDRGRTQsCisgICAgMHg5NEM4LCAweDk0Q0UsIDB4MUFCMCwgMHg5NENGLCAweDk0Q0YsIDB4NEZFNSwgMHg5NEQwLCAweDk0RDIsIDB4MUFCNywKKyAgICAweDk0RDMsIDB4OTRENCwgMHg0RkU2LCAweDk0RDUsIDB4OTRENywgMHgxQUJBLCAweDk0RDgsIDB4OTREOCwgMHgxQUJFLAorICAgIDB4OTREOSwgMHg5NEQ5LCAweDFBQkQsIDB4OTREQSwgMHg5NERBLCAweDRGRTgsIDB4OTREQiwgMHg5NERCLCAweDFBQkYsCisgICAgMHg5NERDLCAweDk0REMsIDB4MEU1RSwgMHg5NERELCAweDk0REQsIDB4MEE2OCwgMHg5NERFLCAweDk0RTAsIDB4MUFDMCwKKyAgICAweDk0RTEsIDB4OTRFMSwgMHgxMTQyLCAweDk0RTIsIDB4OTRFMiwgMHgxQUMzLCAweDk0RTMsIDB4OTRFMywgMHgwRjIwLAorICAgIDB4OTRFNCwgMHg5NEU1LCAweDFBQzQsIDB4OTRFNiwgMHg5NEU2LCAweDRGRTksIDB4OTRFNywgMHg5NEU4LCAweDFBQzYsCisgICAgMHg5NEU5LCAweDk0RTksIDB4MUFDOSwgMHg5NEVBLCAweDk0RUEsIDB4MUFDOCwgMHg5NEVCLCAweDk0RUIsIDB4MUFDQSwKKyAgICAweDk0RUMsIDB4OTRFQywgMHgwNkYwLCAweDk0RUQsIDB4OTRFRCwgMHgwQUZGLCAweDk0RUUsIDB4OTRFRiwgMHgxQUNCLAorICAgIDB4OTRGMCwgMHg5NEYwLCAweDA4OTMsIDB4OTRGMSwgMHg5NEYxLCAweDEwNDYsIDB4OTRGMiwgMHg5NEYyLCAweDA0QzAsCisgICAgMHg5NEYzLCAweDk0RjUsIDB4MUFDRCwgMHg5NEY2LCAweDk0RjYsIDB4MTA3RiwgMHg5NEY3LCAweDk0RjcsIDB4MUFEMCwKKyAgICAweDk0RjgsIDB4OTRGOCwgMHgxMUZDLCAweDk0RjksIDB4OTRGOSwgMHgxQUQxLCAweDk0RkEsIDB4OTRGQSwgMHgwQkVCLAorICAgIDB4OTRGQiwgMHg5NEZCLCAweDRGRUEsIDB4OTRGQywgMHg5NEZELCAweDFBRDIsIDB4OTRGRSwgMHg5NEZFLCAweDA5RkQsCisgICAgMHg5NEZGLCAweDk0RkYsIDB4MUFENCwgMHg5NTAwLCAweDk1MDAsIDB4MEY2NywgMHg5NTAxLCAweDk1MDEsIDB4MERFRCwKKyAgICAweDk1MDIsIDB4OTUwMiwgMHgxQUQ2LCAweDk1MDMsIDB4OTUwMywgMHgxQUQ1LCAweDk1MDQsIDB4OTUwNCwgMHgwNTFGLAorICAgIDB4OTUwNSwgMHg5NTA1LCAweDA3NTEsIDB4OTUwNiwgMHg5NTA3LCAweDFBRDcsIDB4OTUwOCwgMHg5NTA4LCAweDBGQUQsCisgICAgMHg5NTA5LCAweDk1MEEsIDB4MUFEOSwgMHg5NTBCLCAweDk1MEIsIDB4MDY4MywgMHg5NTBDLCAweDk1MEMsIDB4MEY4QSwKKyAgICAweDk1MEQsIDB4OTUwRiwgMHgxQURCLCAweDk1MTAsIDB4OTUxMCwgMHgwQ0NDLCAweDk1MTEsIDB4OTUxMSwgMHgwRTMzLAorICAgIDB4OTUxMiwgMHg5NTE2LCAweDFBREUsIDB4OTUxNywgMHg5NTE3LCAweDExODEsIDB4OTUxOCwgMHg5NTE4LCAweDFBRTMsCisgICAgMHg5NTE5LCAweDk1MTksIDB4MDU3MCwgMHg5NTFBLCAweDk1MUEsIDB4MEFBRiwgMHg5NTFCLCAweDk1MUIsIDB4MUFFNCwKKyAgICAweDk1MUMsIDB4OTUxQywgMHg0RkVCLCAweDk1MUQsIDB4OTUxRiwgMHgxQUU1LCAweDk1MjAsIDB4OTUyMCwgMHg0RkVDLAorICAgIDB4OTUyMSwgMHg5NTIxLCAweDBGMEMsIDB4OTUyMiwgMHg5NTIyLCAweDFBRTgsIDB4OTUyMywgMHg5NTIzLCAweDBBODcsCisgICAgMHg5NTI0LCAweDk1MjQsIDB4MDUzQiwgMHg5NTI1LCAweDk1MjUsIDB4MTIxMywgMHg5NTI2LCAweDk1MjYsIDB4MDhDNiwKKyAgICAweDk1MjcsIDB4OTUyNywgMHg0RkVELCAweDk1MjgsIDB4OTUyOCwgMHgwRjM0LCAweDk1MjksIDB4OTUyOSwgMHgxQUVCLAorICAgIDB4OTUyQSwgMHg5NTJCLCAweDFBRTksIDB4OTUyQywgMHg5NTJDLCAweDFBRUMsIDB4OTUyRCwgMHg5NTJELCAweDA1RTYsCisgICAgMHg5NTJFLCAweDk1MkUsIDB4MDg2RiwgMHg5NTJGLCAweDk1MkYsIDB4MDkxMSwgMHg5NTMwLCAweDk1MzAsIDB4MEFEMSwKKyAgICAweDk1MzEsIDB4OTUzMiwgMHgxQUVELCAweDk1MzMsIDB4OTUzMywgMHg0RkVFLCAweDk1MzQsIDB4OTUzNCwgMHgxQUVGLAorICAgIDB4OTUzNSwgMHg5NTM1LCAweDFBRjcsIDB4OTUzNiwgMHg5NTM4LCAweDFBRjAsIDB4OTUzOSwgMHg5NTM5LCAweDBDM0YsCisgICAgMHg5NTNBLCAweDk1M0EsIDB4MUIxOSwgMHg5NTNCLCAweDk1M0IsIDB4MDYwQywgMHg5NTNDLCAweDk1M0MsIDB4MUFGMywKKyAgICAweDk1M0QsIDB4OTUzRCwgMHg0RkVGLCAweDk1M0UsIDB4OTUzRiwgMHgxQUY0LCAweDk1NDAsIDB4OTU0MCwgMHgwNjA1LAorICAgIDB4OTU0MSwgMHg5NTQxLCAweDBBQzMsIDB4OTU0MiwgMHg5NTQyLCAweDFBRjYsIDB4OTU0MywgMHg5NTQzLCAweDRGRjAsCisgICAgMHg5NTQ0LCAweDk1NDYsIDB4MUFGOCwgMHg5NTQ3LCAweDk1NDcsIDB4MTE5MywgMHg5NTQ4LCAweDk1NDgsIDB4NEZGMSwKKyAgICAweDk1NDksIDB4OTU0OSwgMHgxQUZCLCAweDk1NEEsIDB4OTU0QSwgMHgwQjVBLCAweDk1NEIsIDB4OTU0QiwgMHg0RkYyLAorICAgIDB4OTU0QywgMHg5NTRDLCAweDFBRkMsIDB4OTU0RCwgMHg5NTRELCAweDBCNUIsIDB4OTU0RSwgMHg5NTRGLCAweDFBRkQsCisgICAgMHg5NTUwLCAweDk1NTAsIDB4MDZERiwgMHg5NTUxLCAweDk1NTEsIDB4MDQwMiwgMHg5NTUyLCAweDk1NTQsIDB4MUFGRiwKKyAgICAweDk1NTUsIDB4OTU1NSwgMHg0RkYzLCAweDk1NTYsIDB4OTU1OSwgMHgxQjAyLCAweDk1NUEsIDB4OTU1QSwgMHg0RkY0LAorICAgIDB4OTU1QiwgMHg5NTVCLCAweDFCMDYsIDB4OTU1QywgMHg5NTVDLCAweDA4RTQsIDB4OTU1RCwgMHg5NTVELCAweDFCMDksCisgICAgMHg5NTVFLCAweDk1NUYsIDB4MUIwNywgMHg5NTYwLCAweDk1NjAsIDB4NEZGNSwgMHg5NTYxLCAweDk1NjIsIDB4MUIwQSwKKyAgICAweDk1NjMsIDB4OTU2MywgMHgwQTE2LCAweDk1NjQsIDB4OTU2QywgMHgxQjBDLCAweDk1NkQsIDB4OTU2RCwgMHgwOUMzLAorICAgIDB4OTU2RSwgMHg5NTZFLCAweDRGRjYsIDB4OTU2RiwgMHg5NTZGLCAweDFCMTUsIDB4OTU3MCwgMHg5NTcwLCAweDA5RjYsCisgICAgMHg5NTcxLCAweDk1NzMsIDB4MUIxNiwgMHg5NTc0LCAweDk1NzUsIDB4NEZGNywgMHg5NTc2LCAweDk1NzYsIDB4MEY0RiwKKyAgICAweDk1NzcsIDB4OTU3NywgMHgxRTc1LCAweDk1NzgsIDB4OTU3RSwgMHg0RkY5LCAweDk1N0YsIDB4OTU3RiwgMHgwNEM5LAorICAgIDB4OTU4MCwgMHg5NTgwLCAweDIwN0QsIDB4OTU4MSwgMHg5NTgxLCAweDUwMDAsIDB4OTU4MiwgMHg5NTgyLCAweDIzQkYsCisgICAgMHg5NTgzLCAweDk1ODMsIDB4MjExMywgMHg5NTg0LCAweDk1ODUsIDB4NTAwMSwgMHg5NTg2LCAweDk1ODYsIDB4MjNDMCwKKyAgICAweDk1ODcsIDB4OTU4OCwgMHg1MDAzLCAweDk1ODksIDB4OTU4OSwgMHgxRTQ1LCAweDk1OEEsIDB4OTU4QSwgMHg1MDA1LAorICAgIDB4OTU4QiwgMHg5NThCLCAweDFGRDgsIDB4OTU4QywgMHg5NThDLCAweDIzQzQsIDB4OTU4RCwgMHg5NThELCAweDUwMDYsCisgICAgMHg5NThFLCAweDk1OEUsIDB4MjNDMiwgMHg5NThGLCAweDk1OEYsIDB4MjEwNCwgMHg5NTkwLCAweDk1OTAsIDB4NTAwNywKKyAgICAweDk1OTEsIDB4OTU5MSwgMHgyMUJELCAweDk1OTIsIDB4OTU5MiwgMHg1MDA4LCAweDk1OTMsIDB4OTU5MywgMHgxRjg3LAorICAgIDB4OTU5NCwgMHg5NTk0LCAweDIzQzMsIDB4OTU5NSwgMHg5NTk3LCAweDUwMDksIDB4OTU5OCwgMHg5NTk4LCAweDIyNjksCisgICAgMHg5NTk5LCAweDk1QTAsIDB4NTAwQywgMHg5NUExLCAweDk1QTEsIDB4MUY0MywgMHg5NUEyLCAweDk1QTIsIDB4NTAxNCwKKyAgICAweDk1QTMsIDB4OTVBMywgMHgxRjFFLCAweDk1QTQsIDB4OTVBNCwgMHgyNjc5LCAweDk1QTUsIDB4OTVBNSwgMHgxRUVCLAorICAgIDB4OTVBNiwgMHg5NUE3LCAweDUwMTUsIDB4OTVBOCwgMHg5NUE4LCAweDFGMzUsIDB4OTVBOSwgMHg5NUE5LCAweDIwOEEsCisgICAgMHg5NUFBLCAweDk1QUEsIDB4NTAxNywgMHg5NUFCLCAweDk1QUIsIDB4MjNDNywgMHg5NUFDLCAweDk1QUMsIDB4MjNDOSwKKyAgICAweDk1QUQsIDB4OTVBRCwgMHgyM0M2LCAweDk1QUUsIDB4OTVCMSwgMHg1MDE4LCAweDk1QjIsIDB4OTVCMiwgMHgyMjRGLAorICAgIDB4OTVCMywgMHg5NUI1LCAweDUwMUMsIDB4OTVCNiwgMHg5NUI2LCAweDIzQ0IsIDB4OTVCNywgMHg5NUI4LCAweDUwMUYsCisgICAgMHg5NUI5LCAweDk1QjksIDB4MjFGMywgMHg5NUJBLCAweDk1QkEsIDB4NTAyMSwgMHg5NUJCLCAweDk1QkIsIDB4MjFGNywKKyAgICAweDk1QkMsIDB4OTVCQywgMHgyM0NGLCAweDk1QkQsIDB4OTVCRCwgMHgyM0NFLCAweDk1QkUsIDB4OTVCRSwgMHgyM0NBLAorICAgIDB4OTVCRiwgMHg5NUJGLCAweDIzQ0QsIDB4OTVDMCwgMHg5NUMyLCAweDUwMjIsIDB4OTVDMywgMHg5NUMzLCAweDIzRDAsCisgICAgMHg5NUM0LCAweDk1QzUsIDB4NTAyNSwgMHg5NUM2LCAweDk1QzYsIDB4MjY2QywgMHg5NUM3LCAweDk1QzcsIDB4NTAyNywKKyAgICAweDk1QzgsIDB4OTVDOCwgMHgyM0MxLCAweDk1QzksIDB4OTVDOSwgMHg1MDI4LCAweDk1Q0EsIDB4OTVDQSwgMHgxRkVFLAorICAgIDB4OTVDQiwgMHg5NUNCLCAweDIzRDEsIDB4OTVDQywgMHg5NUNDLCAweDFGRjgsIDB4OTVDRCwgMHg5NUNGLCAweDUwMjksCisgICAgMHg5NUQwLCAweDk1RDAsIDB4MjNEMywgMHg5NUQxLCAweDk1RDMsIDB4NTAyQywgMHg5NUQ0LCAweDk1RDQsIDB4MjNEMiwKKyAgICAweDk1RDUsIDB4OTVENSwgMHgyM0Q0LCAweDk1RDYsIDB4OTVENiwgMHgxRTk4LCAweDk1RDcsIDB4OTVEQiwgMHg1MDJGLAorICAgIDB4OTVEQywgMHg5NURDLCAweDFGMkMsIDB4OTVERCwgMHg5NURELCAweDUwMzQsIDB4OTVERSwgMHg5NURFLCAweDIzRDUsCisgICAgMHg5NURGLCAweDk1RTAsIDB4NTAzNSwgMHg5NUUxLCAweDk1RTEsIDB4MUU3MSwgMHg5NUUyLCAweDk1RTIsIDB4MjY5MSwKKyAgICAweDk1RTMsIDB4OTVFNCwgMHg1MDM3LCAweDk1RTUsIDB4OTVFNSwgMHgyM0M1LCAweDk1RTYsIDB4OTVFNywgMHg1MDM5LAorICAgIDB4OTVFOCwgMHg5NUU4LCAweDBBQ0EsIDB4OTVFOSwgMHg5NUU5LCAweDE2ODUsIDB4OTVFQSwgMHg5NUVBLCAweDBDRkEsCisgICAgMHg5NUVCLCAweDk1RUIsIDB4MTY4NiwgMHg5NUVDLCAweDk1RUMsIDB4NTAzQiwgMHg5NUVELCAweDk1RUQsIDB4MDQzRSwKKyAgICAweDk1RUUsIDB4OTVFRSwgMHgwRUQ5LCAweDk1RUYsIDB4OTVFRiwgMHgwNTM2LCAweDk1RjAsIDB4OTVGMCwgMHgwQ0NELAorICAgIDB4OTVGMSwgMHg5NUYxLCAweDE2ODcsIDB4OTVGMiwgMHg5NUYyLCAweDBGM0QsIDB4OTVGMywgMHg5NUYzLCAweDE2ODgsCisgICAgMHg5NUY0LCAweDk1RjQsIDB4MDg1NywgMHg5NUY1LCAweDk1RjYsIDB4MTY4OSwgMHg5NUY3LCAweDk1RjcsIDB4MEFDQiwKKyAgICAweDk1RjgsIDB4OTVGOCwgMHgxMTQzLCAweDk1RjksIDB4OTVGOSwgMHgwQjM5LCAweDk1RkEsIDB4OTVGQSwgMHgwNzQ0LAorICAgIDB4OTVGQiwgMHg5NUZCLCAweDBFRDQsIDB4OTVGQywgMHg5NUZDLCAweDE2OEIsIDB4OTVGRCwgMHg5NUZELCAweDBBRkIsCisgICAgMHg5NUZFLCAweDk1RkUsIDB4MTY4QywgMHg5NUZGLCAweDk1RkYsIDB4NTAzQywgMHg5NjAwLCAweDk2MDAsIDB4MDY0NCwKKyAgICAweDk2MDEsIDB4OTYwMSwgMHgwNkVFLCAweDk2MDIsIDB4OTYwMiwgMHgwNzg5LCAweDk2MDMsIDB4OTYwNCwgMHgxNjhELAorICAgIDB4OTYwNSwgMHg5NjA1LCAweDExMDcsIDB4OTYwNiwgMHg5NjA2LCAweDE2OEYsIDB4OTYwNywgMHg5NjA3LCAweDUwM0QsCisgICAgMHg5NjA4LCAweDk2MDgsIDB4MTY5MCwgMHg5NjA5LCAweDk2MDksIDB4MEZGNCwgMHg5NjBBLCAweDk2MEQsIDB4MTY5MSwKKyAgICAweDk2MEUsIDB4OTYwRSwgMHgwRkZGLCAweDk2MEYsIDB4OTYwRiwgMHgxNjk1LCAweDk2MTAsIDB4OTYxMCwgMHgwNEMyLAorICAgIDB4OTYxMSwgMHg5NjExLCAweDA5QTYsIDB4OTYxMiwgMHg5NjEyLCAweDE2OTYsIDB4OTYxMywgMHg5NjEzLCAweDUwM0UsCisgICAgMHg5NjE0LCAweDk2MTQsIDB4MDk5NiwgMHg5NjE1LCAweDk2MTcsIDB4MTY5NywgMHg5NjE4LCAweDk2MTgsIDB4NTAzRiwKKyAgICAweDk2MTksIDB4OTYxQSwgMHgxNjlBLCAweDk2MUIsIDB4OTYxQiwgMHg1MDQwLCAweDk2MUMsIDB4OTYxQywgMHgwNkIyLAorICAgIDB4OTYxRCwgMHg5NjFELCAweDEzNTQsIDB4OTYxRSwgMHg5NjFFLCAweDUwNDEsIDB4OTYxRiwgMHg5NjFGLCAweDA2MTIsCisgICAgMHg5NjIwLCAweDk2MjAsIDB4NTA0MiwgMHg5NjIxLCAweDk2MjEsIDB4MTM1NiwgMHg5NjIyLCAweDk2MjIsIDB4MTM1NSwKKyAgICAweDk2MjMsIDB4OTYyOSwgMHg1MDQzLCAweDk2MkEsIDB4OTYyQSwgMHgxMzU4LCAweDk2MkIsIDB4OTYyRCwgMHg1MDRBLAorICAgIDB4OTYyRSwgMHg5NjJFLCAweDBDQzksIDB4OTYyRiwgMHg5NjMwLCAweDUwNEQsIDB4OTYzMSwgMHg5NjMxLCAweDEzNTcsCisgICAgMHg5NjMyLCAweDk2MzIsIDB4MDY1RCwgMHg5NjMzLCAweDk2MzMsIDB4MTAxRCwgMHg5NjM0LCAweDk2MzQsIDB4MTA3QywKKyAgICAweDk2MzUsIDB4OTYzNSwgMHgxMTk0LCAweDk2MzYsIDB4OTYzNiwgMHgwOEE4LCAweDk2MzcsIDB4OTYzQSwgMHg1MDRGLAorICAgIDB4OTYzQiwgMHg5NjNCLCAweDEyNDUsIDB4OTYzQywgMHg5NjNDLCAweDEzNUEsIDB4OTYzRCwgMHg5NjNELCAweDEzNTksCisgICAgMHg5NjNFLCAweDk2M0UsIDB4NTA1MywgMHg5NjNGLCAweDk2M0YsIDB4MDNBRCwgMHg5NjQwLCAweDk2NDAsIDB4MEU4NCwKKyAgICAweDk2NDEsIDB4OTY0MSwgMHg1MDU0LCAweDk2NDIsIDB4OTY0MiwgMHgxMzVCLCAweDk2NDMsIDB4OTY0MywgMHg1MDU1LAorICAgIDB4OTY0NCwgMHg5NjQ0LCAweDA2QjgsIDB4OTY0NSwgMHg5NjQ1LCAweDA4M0QsIDB4OTY0NiwgMHg5NjQ2LCAweDBBNjQsCisgICAgMHg5NjQ3LCAweDk2NDcsIDB4MEE0QiwgMHg5NjQ4LCAweDk2NDgsIDB4MDRFNywgMHg5NjQ5LCAweDk2NDksIDB4MTM1QywKKyAgICAweDk2NEEsIDB4OTY0QSwgMHg1MDU2LCAweDk2NEIsIDB4OTY0QiwgMHgwQTUxLCAweDk2NEMsIDB4OTY0QywgMHgwQjEzLAorICAgIDB4OTY0RCwgMHg5NjRELCAweDA4ODYsIDB4OTY0RSwgMHg5NjRGLCAweDUwNTcsIDB4OTY1MCwgMHg5NjUwLCAweDBGNEIsCisgICAgMHg5NjUxLCAweDk2NTMsIDB4NTA1OSwgMHg5NjU0LCAweDk2NTQsIDB4MTM1RCwgMHg5NjU1LCAweDk2NTUsIDB4MENGQiwKKyAgICAweDk2NTYsIDB4OTY1NywgMHg1MDVDLCAweDk2NTgsIDB4OTY1OCwgMHgyMzFBLCAweDk2NTksIDB4OTY1QSwgMHg1MDVFLAorICAgIDB4OTY1QiwgMHg5NjVCLCAweDA0NDYsIDB4OTY1QywgMHg5NjVDLCAweDUwNjAsIDB4OTY1RCwgMHg5NjVELCAweDIxMTQsCisgICAgMHg5NjVFLCAweDk2NUUsIDB4NTA2MSwgMHg5NjVGLCAweDk2NUYsIDB4MTM1RSwgMHg5NjYwLCAweDk2NjAsIDB4NTA2MiwKKyAgICAweDk2NjEsIDB4OTY2MSwgMHgwNUY3LCAweDk2NjIsIDB4OTY2MiwgMHgxMEZELCAweDk2NjMsIDB4OTY2MywgMHgyMjg0LAorICAgIDB4OTY2NCwgMHg5NjY0LCAweDA1MjIsIDB4OTY2NSwgMHg5NjY2LCAweDUwNjMsIDB4OTY2NywgMHg5NjY3LCAweDEzNUYsCisgICAgMHg5NjY4LCAweDk2NjgsIDB4MTEwQywgMHg5NjY5LCAweDk2NjksIDB4MEY0MiwgMHg5NjZBLCAweDk2NkEsIDB4MEJBNCwKKyAgICAweDk2NkIsIDB4OTY2QiwgMHg1MDY1LCAweDk2NkMsIDB4OTY2QywgMHgxMzYwLCAweDk2NkQsIDB4OTY2RiwgMHg1MDY2LAorICAgIDB4OTY3MCwgMHg5NjcwLCAweDIyMUMsIDB4OTY3MSwgMHg5NjcxLCAweDUwNjksIDB4OTY3MiwgMHg5NjcyLCAweDEzNjEsCisgICAgMHg5NjczLCAweDk2NzMsIDB4MUU3RSwgMHg5Njc0LCAweDk2NzQsIDB4MTM2MiwgMHg5Njc1LCAweDk2NzUsIDB4MEEzMywKKyAgICAweDk2NzYsIDB4OTY3NiwgMHgwRTI4LCAweDk2NzcsIDB4OTY3NywgMHgwRjRBLCAweDk2NzgsIDB4OTY3OCwgMHgyMDRELAorICAgIDB4OTY3OSwgMHg5NjdDLCAweDUwNkEsIDB4OTY3RCwgMHg5NjdELCAweDIyMDEsIDB4OTY3RSwgMHg5Njg0LCAweDUwNkUsCisgICAgMHg5Njg1LCAweDk2ODUsIDB4MTBDQywgMHg5Njg2LCAweDk2ODYsIDB4MEE0OCwgMHg5Njg3LCAweDk2ODcsIDB4NTA3NSwKKyAgICAweDk2ODgsIDB4OTY4OCwgMHgxMzYzLCAweDk2ODksIDB4OTY4OSwgMHg1MDc2LCAweDk2OEEsIDB4OTY4QSwgMHgxRUQ5LAorICAgIDB4OTY4QiwgMHg5NjhCLCAweDBEREEsIDB4OTY4QywgMHg5NjhDLCAweDUwNzcsIDB4OTY4RCwgMHg5NjhELCAweDEzNjQsCisgICAgMHg5NjhFLCAweDk2OEUsIDB4MUZCMiwgMHg5NjhGLCAweDk2OEYsIDB4MEREQiwgMHg5NjkwLCAweDk2OTAsIDB4MTA4NSwKKyAgICAweDk2OTEsIDB4OTY5MywgMHg1MDc4LCAweDk2OTQsIDB4OTY5NCwgMHgwNkVGLCAweDk2OTUsIDB4OTY5NSwgMHgyMjUyLAorICAgIDB4OTY5NiwgMHg5Njk2LCAweDUwN0IsIDB4OTY5NywgMHg5Njk3LCAweDEzNjUsIDB4OTY5OCwgMHg5Njk4LCAweDAzQkEsCisgICAgMHg5Njk5LCAweDk2OTksIDB4MEYyMywgMHg5NjlBLCAweDk2OUEsIDB4NTA3QywgMHg5NjlCLCAweDk2OUIsIDB4MUY3OSwKKyAgICAweDk2OUMsIDB4OTY5QywgMHgxMTcwLCAweDk2OUQsIDB4OTZBNiwgMHg1MDdELCAweDk2QTcsIDB4OTZBNywgMHgwREUyLAorICAgIDB4OTZBOCwgMHg5NkE4LCAweDIxNTcsIDB4OTZBOSwgMHg5NkE5LCAweDUwODcsIDB4OTZBQSwgMHg5NkFBLCAweDIxQkYsCisgICAgMHg5NkFCLCAweDk2QUYsIDB4NTA4OCwgMHg5NkIwLCAweDk2QjAsIDB4MTM2NiwgMHg5NkIxLCAweDk2QjEsIDB4MjIxRiwKKyAgICAweDk2QjIsIDB4OTZCMiwgMHg1MDhELCAweDk2QjMsIDB4OTZCMywgMHgxNjg0LCAweDk2QjQsIDB4OTZCNCwgMHgyMDNELAorICAgIDB4OTZCNSwgMHg5NkI1LCAweDUwOEUsIDB4OTZCNiwgMHg5NkI2LCAweDA5RUUsIDB4OTZCNywgMHg5NkI3LCAweDUwOEYsCisgICAgMHg5NkI4LCAweDk2QjgsIDB4MjAxNSwgMHg5NkI5LCAweDk2QjksIDB4MUQ3OSwgMHg5NkJBLCAweDk2QkEsIDB4NTA5MCwKKyAgICAweDk2QkIsIDB4OTZCQiwgMHgyNkE1LCAweDk2QkMsIDB4OTZCRCwgMHgxRDdBLCAweDk2QkUsIDB4OTZCRSwgMHgwQjM0LAorICAgIDB4OTZCRiwgMHg5NkJGLCAweDUwOTEsIDB4OTZDMCwgMHg5NkMwLCAweDBDOTMsIDB4OTZDMSwgMHg5NkMxLCAweDEwMEMsCisgICAgMHg5NkMyLCAweDk2QzMsIDB4NTA5MiwgMHg5NkM0LCAweDk2QzQsIDB4MEZBNiwgMHg5NkM1LCAweDk2QzUsIDB4MEZFRSwKKyAgICAweDk2QzYsIDB4OTZDNiwgMHgwODIyLCAweDk2QzcsIDB4OTZDNywgMHgwNzI2LCAweDk2QzgsIDB4OTZDOCwgMHg1MDk0LAorICAgIDB4OTZDOSwgMHg5NkM5LCAweDFCMUMsIDB4OTZDQSwgMHg5NkNCLCAweDUwOTUsIDB4OTZDQywgMHg5NkNDLCAweDA1NDksCisgICAgMHg5NkNELCAweDk2Q0QsIDB4MTA5RiwgMHg5NkNFLCAweDk2Q0UsIDB4MUQ3QywgMHg5NkNGLCAweDk2Q0YsIDB4MDUyMCwKKyAgICAweDk2RDAsIDB4OTZEMSwgMHg1MDk3LCAweDk2RDIsIDB4OTZEMiwgMHgxRDdELCAweDk2RDMsIDB4OTZENCwgMHg1MDk5LAorICAgIDB4OTZENSwgMHg5NkQ1LCAweDA1RDIsIDB4OTZENiwgMHg5NkQ2LCAweDIxNTYsIDB4OTZENywgMHg5NkQ4LCAweDUwOUIsCisgICAgMHg5NkQ5LCAweDk2RDksIDB4MjE0NCwgMHg5NkRBLCAweDk2REEsIDB4NTA5RCwgMHg5NkRCLCAweDk2REIsIDB4MUU5MSwKKyAgICAweDk2REMsIDB4OTZEQywgMHgyMjU3LCAweDk2REQsIDB4OTZERiwgMHg1MDlFLCAweDk2RTAsIDB4OTZFMCwgMHgxRDdGLAorICAgIDB4OTZFMSwgMHg5NkUxLCAweDUwQTEsIDB4OTZFMiwgMHg5NkUyLCAweDIwMEEsIDB4OTZFMywgMHg5NkUzLCAweDIwOTIsCisgICAgMHg5NkU0LCAweDk2RTcsIDB4NTBBMiwgMHg5NkU4LCAweDk2RTgsIDB4MTBDRiwgMHg5NkU5LCAweDk2RTksIDB4MUQ2MSwKKyAgICAweDk2RUEsIDB4OTZFQSwgMHgwRkQyLCAweDk2RUIsIDB4OTZFRSwgMHg1MEE2LCAweDk2RUYsIDB4OTZFRiwgMHgxRDYzLAorICAgIDB4OTZGMCwgMHg5NkYxLCAweDUwQUEsIDB4OTZGMiwgMHg5NkYyLCAweDIyNTAsIDB4OTZGMywgMHg5NkYzLCAweDFENjIsCisgICAgMHg5NkY0LCAweDk2RjUsIDB4NTBBQywgMHg5NkY2LCAweDk2RjYsIDB4MEEyQywgMHg5NkY3LCAweDk2RjcsIDB4MDlDMiwKKyAgICAweDk2RjgsIDB4OTZGOCwgMHg1MEFFLCAweDk2RjksIDB4OTZGOSwgMHgwNDBCLCAweDk2RkEsIDB4OTZGQSwgMHg1MEFGLAorICAgIDB4OTZGQiwgMHg5NkZCLCAweDFFQzMsIDB4OTZGQywgMHg5NkZELCAweDUwQjAsIDB4OTZGRSwgMHg5NkZFLCAweDBFRkMsCisgICAgMHg5NkZGLCAweDk2RkYsIDB4NTBCMiwgMHg5NzAwLCAweDk3MDAsIDB4MEZCMywgMHg5NzAxLCAweDk3MDEsIDB4MUQ2NSwKKyAgICAweDk3MDIsIDB4OTcwMywgMHg1MEIzLCAweDk3MDQsIDB4OTcwNCwgMHgwRjYzLCAweDk3MDUsIDB4OTcwNSwgMHg1MEI1LAorICAgIDB4OTcwNiwgMHg5NzA2LCAweDFENjQsIDB4OTcwNywgMHg5NzA3LCAweDExOTEsIDB4OTcwOCwgMHg5NzA4LCAweDFENjYsCisgICAgMHg5NzA5LCAweDk3MDksIDB4MEFCRSwgMHg5NzBBLCAweDk3MEMsIDB4NTBCNiwgMHg5NzBELCAweDk3MEQsIDB4MDgwOSwKKyAgICAweDk3MEUsIDB4OTcwRSwgMHgxRDY4LCAweDk3MEYsIDB4OTcwRiwgMHgxRDY3LCAweDk3MTAsIDB4OTcxMiwgMHg1MEI5LAorICAgIDB4OTcxMywgMHg5NzEzLCAweDBCNDEsIDB4OTcxNCwgMHg5NzE1LCAweDUwQkMsIDB4OTcxNiwgMHg5NzE2LCAweDBBMjEsCisgICAgMHg5NzE3LCAweDk3MUIsIDB4NTBCRSwgMHg5NzFDLCAweDk3MUMsIDB4MEQ5RiwgMHg5NzFELCAweDk3MUQsIDB4NTBDMywKKyAgICAweDk3MUUsIDB4OTcxRSwgMHgwRjI5LCAweDk3MUYsIDB4OTcyNiwgMHg1MEM0LCAweDk3MjcsIDB4OTcyNywgMHgyMUE4LAorICAgIDB4OTcyOCwgMHg5NzI5LCAweDUwQ0MsIDB4OTcyQSwgMHg5NzJBLCAweDFENjksIDB4OTcyQiwgMHg5NzJDLCAweDUwQ0UsCisgICAgMHg5NzJELCAweDk3MkQsIDB4MUQ2QSwgMHg5NzJFLCAweDk3MkYsIDB4NTBEMCwgMHg5NzMwLCAweDk3MzAsIDB4MUQ2QiwKKyAgICAweDk3MzEsIDB4OTczMSwgMHg1MEQyLCAweDk3MzIsIDB4OTczMiwgMHgwQTVELCAweDk3MzMsIDB4OTczNywgMHg1MEQzLAorICAgIDB4OTczOCwgMHg5NzM4LCAweDAzREYsIDB4OTczOSwgMHg5NzM5LCAweDBCQkEsIDB4OTczQSwgMHg5NzNDLCAweDUwRDgsCisgICAgMHg5NzNELCAweDk3M0QsIDB4MjYwRCwgMHg5NzNFLCAweDk3M0UsIDB4MUQ2QywgMHg5NzNGLCAweDk3NDEsIDB4NTBEQiwKKyAgICAweDk3NDIsIDB4OTc0MiwgMHgyNjBDLCAweDk3NDMsIDB4OTc0MywgMHg1MERFLCAweDk3NDQsIDB4OTc0NCwgMHgyNjBFLAorICAgIDB4OTc0NSwgMHg5NzQ3LCAweDUwREYsIDB4OTc0OCwgMHg5NzQ4LCAweDIwMzIsIDB4OTc0OSwgMHg5NzUxLCAweDUwRTIsCisgICAgMHg5NzUyLCAweDk3NTIsIDB4MEM1RCwgMHg5NzUzLCAweDk3NTMsIDB4MUQ2MCwgMHg5NzU0LCAweDk3NTUsIDB4NTBFQiwKKyAgICAweDk3NTYsIDB4OTc1NiwgMHgwOEU3LCAweDk3NTcsIDB4OTc1OCwgMHg1MEVELCAweDk3NTksIDB4OTc1OSwgMHgwOEUxLAorICAgIDB4OTc1QSwgMHg5NzVBLCAweDI2MEIsIDB4OTc1QiwgMHg5NzVCLCAweDA1QzYsIDB4OTc1QywgMHg5NzVELCAweDUwRUYsCisgICAgMHg5NzVFLCAweDk3NUUsIDB4MDY2NCwgMHg5NzVGLCAweDk3NUYsIDB4NTBGMSwgMHg5NzYwLCAweDk3NjAsIDB4MDk0QywKKyAgICAweDk3NjEsIDB4OTc2MSwgMHgwQUQ3LCAweDk3NjIsIDB4OTc2MiwgMHgwQUVCLCAweDk3NjMsIDB4OTc2NCwgMHg1MEYyLAorICAgIDB4OTc2NSwgMHg5NzY1LCAweDEyODIsIDB4OTc2NiwgMHg5NzY3LCAweDUwRjQsIDB4OTc2OCwgMHg5NzY4LCAweDIyQzMsCisgICAgMHg5NzY5LCAweDk3NjksIDB4MDZFQSwgMHg5NzZBLCAweDk3NzIsIDB4NTBGNiwgMHg5NzczLCAweDk3NzMsIDB4MDhDQSwKKyAgICAweDk3NzQsIDB4OTc3NCwgMHgwRkNFLCAweDk3NzUsIDB4OTc3NSwgMHg1MEZGLCAweDk3NzYsIDB4OTc3NiwgMHgwM0RCLAorICAgIDB4OTc3NywgMHg5NzdCLCAweDUxMDAsIDB4OTc3QywgMHg5NzdDLCAweDFEQzgsIDB4OTc3RCwgMHg5Nzg0LCAweDUxMDUsCisgICAgMHg5Nzg1LCAweDk3ODUsIDB4MURDOSwgMHg5Nzg2LCAweDk3OEEsIDB4NTEwRCwgMHg5NzhCLCAweDk3OEIsIDB4MEY3NywKKyAgICAweDk3OEMsIDB4OTc4QywgMHg1MTEyLCAweDk3OEQsIDB4OTc4RCwgMHgwM0JCLCAweDk3OEUsIDB4OTc4RSwgMHg1MTEzLAorICAgIDB4OTc4RiwgMHg5NzhGLCAweDFGMjMsIDB4OTc5MCwgMHg5NzkwLCAweDUxMTQsIDB4OTc5MSwgMHg5NzkyLCAweDFEQ0EsCisgICAgMHg5NzkzLCAweDk3OTMsIDB4NTExNSwgMHg5Nzk0LCAweDk3OTQsIDB4MURDQywgMHg5Nzk1LCAweDk3OTcsIDB4NTExNiwKKyAgICAweDk3OTgsIDB4OTc5OCwgMHgwQzQ3LCAweDk3OTksIDB4OTc5RiwgMHg1MTE5LCAweDk3QTAsIDB4OTdBMCwgMHgwOEZFLAorICAgIDB4OTdBMSwgMHg5N0EyLCAweDUxMjAsIDB4OTdBMywgMHg5N0EzLCAweDFEQ0YsIDB4OTdBNCwgMHg5N0E1LCAweDUxMjIsCisgICAgMHg5N0E2LCAweDk3QTYsIDB4MjY5NSwgMHg5N0E3LCAweDk3QUEsIDB4NTEyNCwgMHg5N0FCLCAweDk3QUIsIDB4MURDRSwKKyAgICAweDk3QUMsIDB4OTdBQywgMHg1MTI4LCAweDk3QUQsIDB4OTdBRCwgMHgwNDQ3LCAweDk3QUUsIDB4OTdBRSwgMHg1MTI5LAorICAgIDB4OTdBRiwgMHg5N0FGLCAweDFEQ0QsIDB4OTdCMCwgMHg5N0IxLCAweDUxMkEsIDB4OTdCMiwgMHg5N0IyLCAweDFERDAsCisgICAgMHg5N0IzLCAweDk3QjMsIDB4NTEyQywgMHg5N0I0LCAweDk3QjQsIDB4MUREMSwgMHg5N0I1LCAweDk3QkMsIDB4NTEyRCwKKyAgICAweDk3QkQsIDB4OTdCRCwgMHgyNjVFLCAweDk3QkUsIDB4OTdDMiwgMHg1MTM1LCAweDk3QzMsIDB4OTdDMywgMHgyNjVELAorICAgIDB4OTdDNCwgMHg5N0M1LCAweDUxM0EsIDB4OTdDNiwgMHg5N0M2LCAweDI2OTIsIDB4OTdDNywgMHg5N0M4LCAweDUxM0MsCisgICAgMHg5N0M5LCAweDk3QzksIDB4MjY1RiwgMHg5N0NBLCAweDk3Q0EsIDB4NTEzRSwgMHg5N0NCLCAweDk3Q0IsIDB4MjE4RCwKKyAgICAweDk3Q0MsIDB4OTdDQywgMHgyMEZELCAweDk3Q0QsIDB4OTdEMiwgMHg1MTNGLCAweDk3RDMsIDB4OTdEMywgMHgxRjQwLAorICAgIDB4OTdENCwgMHg5N0Q4LCAweDUxNDUsIDB4OTdEOSwgMHg5N0Q5LCAweDI0NjUsIDB4OTdEQSwgMHg5N0RCLCAweDUxNEEsCisgICAgMHg5N0RDLCAweDk3REMsIDB4MjQ2NywgMHg5N0RELCAweDk3REQsIDB4NTE0QywgMHg5N0RFLCAweDk3REUsIDB4MjQ2NiwKKyAgICAweDk3REYsIDB4OTdFNSwgMHg1MTRELCAweDk3RTYsIDB4OTdFNiwgMHgwRUIzLCAweDk3RTcsIDB4OTdFNywgMHgwQ0E4LAorICAgIDB4OTdFOCwgMHg5N0U4LCAweDUxNTQsIDB4OTdFOSwgMHg5N0U5LCAweDA3NjIsIDB4OTdFQSwgMHg5N0VDLCAweDE4NEUsCisgICAgMHg5N0VELCAweDk3RUQsIDB4MDhGMSwgMHg5N0VFLCAweDk3RjIsIDB4NTE1NSwgMHg5N0YzLCAweDk3RjMsIDB4MTA3QiwKKyAgICAweDk3RjQsIDB4OTdGNCwgMHg1MTVBLCAweDk3RjUsIDB4OTdGNSwgMHgxMTEyLCAweDk3RjYsIDB4OTdGNiwgMHgwRDExLAorICAgIDB4OTdGNywgMHg5N0ZFLCAweDUxNUIsIDB4OTdGRiwgMHg5N0ZGLCAweDIxQzksIDB4OTgwMCwgMHg5ODAwLCAweDUxNjMsCisgICAgMHg5ODAxLCAweDk4MDEsIDB4MjIwOSwgMHg5ODAyLCAweDk4MDIsIDB4MUVDOSwgMHg5ODAzLCAweDk4MDMsIDB4MjBFOSwKKyAgICAweDk4MDQsIDB4OTgwNCwgMHg1MTY0LCAweDk4MDUsIDB4OTgwNSwgMHgyMUNBLCAweDk4MDYsIDB4OTgwNiwgMHgyMTQ2LAorICAgIDB4OTgwNywgMHg5ODA3LCAweDI1QzUsIDB4OTgwOCwgMHg5ODA4LCAweDIxREMsIDB4OTgwOSwgMHg5ODA5LCAweDUxNjUsCisgICAgMHg5ODBBLCAweDk4MEEsIDB4MjQ1RSwgMHg5ODBCLCAweDk4MEIsIDB4NTE2NiwgMHg5ODBDLCAweDk4MEMsIDB4MjE0RiwKKyAgICAweDk4MEQsIDB4OTgwRCwgMHg1MTY3LCAweDk4MEUsIDB4OTgwRiwgMHgyNUM2LCAweDk4MTAsIDB4OTgxMCwgMHgyMjQxLAorICAgIDB4OTgxMSwgMHg5ODExLCAweDIxOEEsIDB4OTgxMiwgMHg5ODEyLCAweDFFMkYsIDB4OTgxMywgMHg5ODEzLCAweDFFREMsCisgICAgMHg5ODE0LCAweDk4MTYsIDB4NTE2OCwgMHg5ODE3LCAweDk4MTcsIDB4MjBCRiwgMHg5ODE4LCAweDk4MTgsIDB4MjAzNCwKKyAgICAweDk4MTksIDB4OTgxQiwgMHg1MTZCLCAweDk4MUMsIDB4OTgxQywgMHgyNUM5LCAweDk4MUQsIDB4OTgyMCwgMHg1MTZFLAorICAgIDB4OTgyMSwgMHg5ODIxLCAweDI1QzgsIDB4OTgyMiwgMHg5ODIzLCAweDUxNzIsIDB4OTgyNCwgMHg5ODI0LCAweDIyMEUsCisgICAgMHg5ODI1LCAweDk4MjUsIDB4NTE3NCwgMHg5ODI2LCAweDk4MjYsIDB4MjVDQiwgMHg5ODI3LCAweDk4MkMsIDB4NTE3NSwKKyAgICAweDk4MkQsIDB4OTgyRCwgMHgyMTdELCAweDk4MkUsIDB4OTgyRiwgMHg1MTdCLCAweDk4MzAsIDB4OTgzMCwgMHgxRjdFLAorICAgIDB4OTgzMSwgMHg5ODM2LCAweDUxN0QsIDB4OTgzNywgMHg5ODM3LCAweDI1Q0MsIDB4OTgzOCwgMHg5ODM4LCAweDFGQzMsCisgICAgMHg5ODM5LCAweDk4M0EsIDB4NTE4MywgMHg5ODNCLCAweDk4M0IsIDB4MjBCOSwgMHg5ODNDLCAweDk4M0MsIDB4NTE4NSwKKyAgICAweDk4M0QsIDB4OTgzRCwgMHgyMTgxLCAweDk4M0UsIDB4OTg0NSwgMHg1MTg2LCAweDk4NDYsIDB4OTg0NiwgMHgxRkRBLAorICAgIDB4OTg0NywgMHg5ODRCLCAweDUxOEUsIDB4OTg0QywgMHg5ODRDLCAweDIxNzMsIDB4OTg0RCwgMHg5ODRELCAweDFFRTEsCisgICAgMHg5ODRFLCAweDk4NEUsIDB4MjVDRCwgMHg5ODRGLCAweDk4NTIsIDB4NTE5MywgMHg5ODUzLCAweDk4NTMsIDB4MjVDRSwKKyAgICAweDk4NTQsIDB4OTg1NCwgMHgyMUY2LCAweDk4NTUsIDB4OTg1NywgMHg1MTk3LCAweDk4NTgsIDB4OTg1OCwgMHgyMjRCLAorICAgIDB4OTg1OSwgMHg5ODU5LCAweDI1RDEsIDB4OTg1QSwgMHg5ODVBLCAweDUxOUEsIDB4OTg1QiwgMHg5ODVCLCAweDFFQzAsCisgICAgMHg5ODVDLCAweDk4NUQsIDB4NTE5QiwgMHg5ODVFLCAweDk4NUUsIDB4MjAwOCwgMHg5ODVGLCAweDk4NjEsIDB4NTE5RCwKKyAgICAweDk4NjIsIDB4OTg2MiwgMHgyNUQwLCAweDk4NjMsIDB4OTg2NCwgMHg1MUEwLCAweDk4NjUsIDB4OTg2NSwgMHgyNUQyLAorICAgIDB4OTg2NiwgMHg5ODY2LCAweDUxQTIsIDB4OTg2NywgMHg5ODY3LCAweDFGMkEsIDB4OTg2OCwgMHg5ODZBLCAweDUxQTMsCisgICAgMHg5ODZCLCAweDk4NkIsIDB4MUU3MiwgMHg5ODZDLCAweDk4NkMsIDB4MjVEMywgMHg5ODZELCAweDk4NkUsIDB4NTFBNiwKKyAgICAweDk4NkYsIDB4OTg2RiwgMHgyMUJFLCAweDk4NzAsIDB4OTg3MCwgMHgyNUQ0LCAweDk4NzEsIDB4OTg3MSwgMHgyMDQ0LAorICAgIDB4OTg3MiwgMHg5ODcyLCAweDUxQTgsIDB4OTg3MywgMHg5ODczLCAweDI1Q0YsIDB4OTg3NCwgMHg5ODc0LCAweDIwRjMsCisgICAgMHg5ODc1LCAweDk4NzUsIDB4MTAzQSwgMHg5ODc2LCAweDk4NzYsIDB4MDVFNCwgMHg5ODc3LCAweDk4NzcsIDB4MEM2NywKKyAgICAweDk4NzgsIDB4OTg3OCwgMHgxQkUwLCAweDk4NzksIDB4OTg3OSwgMHgwRjVCLCAweDk4N0EsIDB4OTg3QSwgMHgwREE4LAorICAgIDB4OTg3QiwgMHg5ODdCLCAweDBGQjYsIDB4OTg3QywgMHg5ODdDLCAweDE4MjcsIDB4OTg3RCwgMHg5ODdELCAweDBFOTgsCisgICAgMHg5ODdFLCAweDk4N0UsIDB4MDcyNCwgMHg5ODdGLCAweDk4N0YsIDB4MDYxOCwgMHg5ODgwLCAweDk4ODAsIDB4MUJFMSwKKyAgICAweDk4ODEsIDB4OTg4MSwgMHgwM0VGLCAweDk4ODIsIDB4OTg4MiwgMHgwREMxLCAweDk4ODMsIDB4OTg4MywgMHgxQkUyLAorICAgIDB4OTg4NCwgMHg5ODg0LCAweDEwRTcsIDB4OTg4NSwgMHg5ODg1LCAweDBBNTQsIDB4OTg4NiwgMHg5ODg2LCAweDBBMzUsCisgICAgMHg5ODg3LCAweDk4ODcsIDB4MEJFMywgMHg5ODg4LCAweDk4ODgsIDB4MDhFMCwgMHg5ODg5LCAweDk4ODksIDB4MUJFMywKKyAgICAweDk4OEEsIDB4OTg4QSwgMHgwODQ4LCAweDk4OEIsIDB4OTg4QiwgMHg1MUE5LCAweDk4OEMsIDB4OTg4RCwgMHgxQkU0LAorICAgIDB4OTg4RSwgMHg5ODhFLCAweDUxQUEsIDB4OTg4RiwgMHg5ODhGLCAweDFCRTYsIDB4OTg5MCwgMHg5ODkwLCAweDEwNEEsCisgICAgMHg5ODkxLCAweDk4OTEsIDB4MEJENCwgMHg5ODkyLCAweDk4OTIsIDB4NTFBQiwgMHg5ODkzLCAweDk4OTMsIDB4MEU3OCwKKyAgICAweDk4OTQsIDB4OTg5NCwgMHgxQkU3LCAweDk4OTUsIDB4OTg5NSwgMHg1MUFDLCAweDk4OTYsIDB4OTg5NiwgMHgxMDk2LAorICAgIDB4OTg5NywgMHg5ODk3LCAweDA5NTIsIDB4OTg5OCwgMHg5ODk4LCAweDBFMzUsIDB4OTg5OSwgMHg5ODk5LCAweDUxQUQsCisgICAgMHg5ODlBLCAweDk4OUIsIDB4MUJFOCwgMHg5ODlDLCAweDk4OUMsIDB4MEZGRSwgMHg5ODlELCAweDk4OUQsIDB4MDYyRCwKKyAgICAweDk4OUUsIDB4OTg5RiwgMHgxQkVBLCAweDk4QTAsIDB4OThBMCwgMHgwNUMwLCAweDk4QTEsIDB4OThBMiwgMHgxQkVDLAorICAgIDB4OThBMywgMHg5OEEzLCAweDUxQUUsIDB4OThBNCwgMHg5OEE0LCAweDA0QzMsIDB4OThBNSwgMHg5OEE2LCAweDFCRUUsCisgICAgMHg5OEE3LCAweDk4QTcsIDB4MEM4MiwgMHg5OEE4LCAweDk4QTgsIDB4MUYwMCwgMHg5OEE5LCAweDk4QUQsIDB4NTFBRiwKKyAgICAweDk4QUUsIDB4OThBRiwgMHgyNENDLCAweDk4QjAsIDB4OThCMCwgMHg1MUI0LCAweDk4QjEsIDB4OThCMSwgMHgyNjk4LAorICAgIDB4OThCMiwgMHg5OEIyLCAweDUxQjUsIDB4OThCMywgMHg5OEIzLCAweDI2NzgsIDB4OThCNCwgMHg5OEI1LCAweDUxQjYsCisgICAgMHg5OEI2LCAweDk4QjYsIDB4MjRDRSwgMHg5OEI3LCAweDk4QkIsIDB4NTFCOCwgMHg5OEJDLCAweDk4QkMsIDB4MjRDRiwKKyAgICAweDk4QkQsIDB4OThDMywgMHg1MUJELCAweDk4QzQsIDB4OThDNCwgMHgyMEI4LCAweDk4QzUsIDB4OThDNSwgMHg1MUM0LAorICAgIDB4OThDNiwgMHg5OEM2LCAweDI0RDAsIDB4OThDNywgMHg5OEM3LCAweDUxQzUsIDB4OThDOCwgMHg5OEM4LCAweDI0RDEsCisgICAgMHg5OEM5LCAweDk4Q0QsIDB4NTFDNiwgMHg5OENFLCAweDk4Q0UsIDB4MDY4NCwgMHg5OENGLCAweDk4RDAsIDB4NTFDQiwKKyAgICAweDk4RDEsIDB4OThEMywgMHgxOUI3LCAweDk4RDQsIDB4OThENCwgMHg1MUNELCAweDk4RDUsIDB4OThENSwgMHgxOUJBLAorICAgIDB4OThENiwgMHg5OEQ3LCAweDUxQ0UsIDB4OThEOCwgMHg5OEQ4LCAweDBCQ0QsIDB4OThEOSwgMHg5OERBLCAweDE5QkIsCisgICAgMHg5OERCLCAweDk4REIsIDB4MUVGNCwgMHg5OERDLCAweDk4REQsIDB4NTFEMCwgMHg5OERFLCAweDk4REUsIDB4MDY2NiwKKyAgICAweDk4REYsIDB4OThERiwgMHgwRDRBLCAweDk4RTAsIDB4OThFMCwgMHgyMzlCLCAweDk4RTEsIDB4OThFMSwgMHg1MUQyLAorICAgIDB4OThFMiwgMHg5OEUyLCAweDI2N0UsIDB4OThFMywgMHg5OEU2LCAweDUxRDMsIDB4OThFNywgMHg5OEU3LCAweDE2MUEsCisgICAgMHg5OEU4LCAweDk4RTgsIDB4MURFNywgMHg5OEU5LCAweDk4RTksIDB4MjM5RCwgMHg5OEVBLCAweDk4RUIsIDB4MjM5RiwKKyAgICAweDk4RUMsIDB4OThFQywgMHg1MUQ3LCAweDk4RUQsIDB4OThFRCwgMHgyM0ExLCAweDk4RUUsIDB4OThFRSwgMHg1MUQ4LAorICAgIDB4OThFRiwgMHg5OEVGLCAweDFFRjEsIDB4OThGMCwgMHg5OEYxLCAweDUxRDksIDB4OThGMiwgMHg5OEYyLCAweDIyMUUsCisgICAgMHg5OEYzLCAweDk4RjMsIDB4NTFEQiwgMHg5OEY0LCAweDk4RjQsIDB4MjNBMiwgMHg5OEY1LCAweDk4RkIsIDB4NTFEQywKKyAgICAweDk4RkMsIDB4OThGQywgMHgyMTRCLCAweDk4RkQsIDB4OThGRCwgMHgxRTM2LCAweDk4RkUsIDB4OThGRSwgMHgyMTM1LAorICAgIDB4OThGRiwgMHg5OEZGLCAweDUxRTMsIDB4OTkwMCwgMHg5OTAyLCAweDUxRTQsIDB4OTkwMywgMHg5OTAzLCAweDFGQUQsCisgICAgMHg5OTA0LCAweDk5MDQsIDB4NTFFNywgMHg5OTA1LCAweDk5MDUsIDB4MUU1MywgMHg5OTA2LCAweDk5MDgsIDB4NTFFOCwKKyAgICAweDk5MDksIDB4OTkwOSwgMHgyM0EzLCAweDk5MEEsIDB4OTkwQSwgMHgyMjAzLCAweDk5MEIsIDB4OTkwQiwgMHg1MUVCLAorICAgIDB4OTkwQywgMHg5OTBDLCAweDFFRTcsIDB4OTkwRCwgMHg5OTBELCAweDFERTgsIDB4OTkwRSwgMHg5OTBGLCAweDUxRUMsCisgICAgMHg5OTEwLCAweDk5MTAsIDB4MDQ5NCwgMHg5OTExLCAweDk5MTEsIDB4MjNBNCwgMHg5OTEyLCAweDk5MTIsIDB4MjA5NywKKyAgICAweDk5MTMsIDB4OTkxMywgMHgxRUU0LCAweDk5MTQsIDB4OTkxNywgMHg1MUVFLCAweDk5MTgsIDB4OTkxOCwgMHgyMjM4LAorICAgIDB4OTkxOSwgMHg5OTFBLCAweDUxRjIsIDB4OTkxQiwgMHg5OTFCLCAweDIzQTUsIDB4OTkxQywgMHg5OTFELCAweDUxRjQsCisgICAgMHg5OTFFLCAweDk5MUUsIDB4MUY5QSwgMHg5OTFGLCAweDk5MjAsIDB4NTFGNiwgMHg5OTIxLCAweDk5MjEsIDB4MjFDMywKKyAgICAweDk5MjIsIDB4OTkyNywgMHg1MUY4LCAweDk5MjgsIDB4OTkyOCwgMHgxRjJFLCAweDk5MjksIDB4OTkyRCwgMHg1MUZFLAorICAgIDB4OTkyRSwgMHg5OTJFLCAweDFERTksIDB4OTkyRiwgMHg5OTMyLCAweDUyMDMsIDB4OTkzMywgMHg5OTMzLCAweDIzOUMsCisgICAgMHg5OTM0LCAweDk5MzYsIDB4NTIwNywgMHg5OTM3LCAweDk5MzcsIDB4MjNBNiwgMHg5OTM4LCAweDk5M0IsIDB4NTIwQSwKKyAgICAweDk5M0MsIDB4OTkzQywgMHgyMzlFLCAweDk5M0QsIDB4OTkzRCwgMHg1MjBFLCAweDk5M0UsIDB4OTkzRSwgMHgyMDM1LAorICAgIDB4OTkzRiwgMHg5OTNGLCAweDIzQTcsIDB4OTk0MCwgMHg5OTQyLCAweDUyMEYsIDB4OTk0MywgMHg5OTQzLCAweDIzQTgsCisgICAgMHg5OTQ0LCAweDk5NDQsIDB4NTIxMiwgMHg5OTQ1LCAweDk5NDUsIDB4MjA3NSwgMHg5OTQ2LCAweDk5NDcsIDB4NTIxMywKKyAgICAweDk5NDgsIDB4OTk0QSwgMHgyM0E5LCAweDk5NEIsIDB4OTk0QiwgMHgxRkVCLCAweDk5NEMsIDB4OTk0QywgMHgyM0FDLAorICAgIDB4OTk0RCwgMHg5OTUwLCAweDUyMTUsIDB4OTk1MSwgMHg5OTUxLCAweDFGNkEsIDB4OTk1MiwgMHg5OTUyLCAweDIwRjksCisgICAgMHg5OTUzLCAweDk5NTMsIDB4NTIxOSwgMHg5OTU0LCAweDk5NTQsIDB4MURFQiwgMHg5OTU1LCAweDk5NTUsIDB4MURFQSwKKyAgICAweDk5NTYsIDB4OTk1NiwgMHg1MjFBLCAweDk5NTcsIDB4OTk1NywgMHgyNjY2LCAweDk5NTgsIDB4OTk1QiwgMHg1MjFCLAorICAgIDB4OTk1QywgMHg5OTVDLCAweDI2NjcsIDB4OTk1RCwgMHg5OTVELCAweDUyMUYsIDB4OTk1RSwgMHg5OTVFLCAweDFFNkMsCisgICAgMHg5OTVGLCAweDk5NjEsIDB4NTIyMCwgMHg5OTYyLCAweDk5NjIsIDB4MjNBRCwgMHg5OTYzLCAweDk5NjMsIDB4MTYxRCwKKyAgICAweDk5NjQsIDB4OTk2NCwgMHg1MjIzLCAweDk5NjUsIDB4OTk2NSwgMHgwODE1LCAweDk5NjYsIDB4OTk2NiwgMHg1MjI0LAorICAgIDB4OTk2NywgMHg5OTZDLCAweDE2MUUsIDB4OTk2RCwgMHg5OTZELCAweDA2NTYsIDB4OTk2RSwgMHg5OTZFLCAweDEwODIsCisgICAgMHg5OTZGLCAweDk5NkYsIDB4MDg3NSwgMHg5OTcwLCAweDk5NzAsIDB4MEQ2NSwgMHg5OTcxLCAweDk5NzEsIDB4MDQwRSwKKyAgICAweDk5NzIsIDB4OTk3MiwgMHgwREJDLCAweDk5NzMsIDB4OTk3MywgMHg1MjI1LCAweDk5NzQsIDB4OTk3NCwgMHgxNjI0LAorICAgIDB4OTk3NSwgMHg5OTc1LCAweDA2M0IsIDB4OTk3NiwgMHg5OTc2LCAweDBDOUYsIDB4OTk3NywgMHg5OTc3LCAweDE2MjUsCisgICAgMHg5OTc4LCAweDk5NzksIDB4NTIyNiwgMHg5OTdBLCAweDk5N0EsIDB4MDg5OSwgMHg5OTdCLCAweDk5N0IsIDB4NTIyOCwKKyAgICAweDk5N0MsIDB4OTk3QywgMHgwNDY2LCAweDk5N0QsIDB4OTk3RCwgMHgxNjI2LCAweDk5N0UsIDB4OTk3RSwgMHg1MjI5LAorICAgIDB4OTk3RiwgMHg5OTdGLCAweDA2MzUsIDB4OTk4MCwgMHg5OTgwLCAweDE2MjcsIDB4OTk4MSwgMHg5OTgxLCAweDBCM0MsCisgICAgMHg5OTgyLCAweDk5ODMsIDB4NTIyQSwgMHg5OTg0LCAweDk5ODQsIDB4MTYyOCwgMHg5OTg1LCAweDk5ODUsIDB4MEY0NywKKyAgICAweDk5ODYsIDB4OTk4NiwgMHgwNzM2LCAweDk5ODcsIDB4OTk4NywgMHgxNjI5LCAweDk5ODgsIDB4OTk4OCwgMHgwOThDLAorICAgIDB4OTk4OSwgMHg5OTg5LCAweDUyMkMsIDB4OTk4QSwgMHg5OThBLCAweDE2MkEsIDB4OTk4QiwgMHg5OThCLCAweDA0QkQsCisgICAgMHg5OThDLCAweDk5OEMsIDB4NTIyRCwgMHg5OThELCAweDk5OEQsIDB4MTYyQiwgMHg5OThFLCAweDk5OEUsIDB4NTIyRSwKKyAgICAweDk5OEYsIDB4OTk4RiwgMHgwQTNDLCAweDk5OTAsIDB4OTk5MSwgMHgxNjJDLCAweDk5OTIsIDB4OTk5MiwgMHgwQTlGLAorICAgIDB4OTk5MywgMHg5OTk1LCAweDE2MkUsIDB4OTk5NiwgMHg5OTk2LCAweDBENkUsIDB4OTk5NywgMHg5OTk3LCAweDEyNkUsCisgICAgMHg5OTk4LCAweDk5OTgsIDB4MTJGOSwgMHg5OTk5LCAweDk5OTksIDB4MEY1MCwgMHg5OTlBLCAweDk5QTQsIDB4NTIyRiwKKyAgICAweDk5QTUsIDB4OTlBNSwgMHgxQjJCLCAweDk5QTYsIDB4OTlBNywgMHg1MjNBLCAweDk5QTgsIDB4OTlBOCwgMHgxM0RFLAorICAgIDB4OTlBOSwgMHg5OUFCLCAweDUyM0MsIDB4OTlBQywgMHg5OUFDLCAweDIwNkQsIDB4OTlBRCwgMHg5OUFELCAweDIyNDIsCisgICAgMHg5OUFFLCAweDk5QUUsIDB4MUYwMiwgMHg5OUFGLCAweDk5QjAsIDB4NTIzRiwgMHg5OUIxLCAweDk5QjEsIDB4MjE4MywKKyAgICAweDk5QjIsIDB4OTlCMiwgMHg1MjQxLCAweDk5QjMsIDB4OTlCMywgMHgxRTg1LCAweDk5QjQsIDB4OTlCNCwgMHgyMUU5LAorICAgIDB4OTlCNSwgMHg5OUMwLCAweDUyNDIsIDB4OTlDMSwgMHg5OUMxLCAweDFFNTcsIDB4OTlDMiwgMHg5OUNGLCAweDUyNEUsCisgICAgMHg5OUQwLCAweDk5RDAsIDB4MjJBNSwgMHg5OUQxLCAweDk5RDEsIDB4MjQwNywgMHg5OUQyLCAweDk5RDIsIDB4MUZDQSwKKyAgICAweDk5RDMsIDB4OTlEMywgMHg1MjVDLCAweDk5RDQsIDB4OTlENCwgMHgyNDAyLCAweDk5RDUsIDB4OTlENSwgMHgxRjgyLAorICAgIDB4OTlENiwgMHg5OUQ3LCAweDUyNUQsIDB4OTlEOCwgMHg5OUQ4LCAweDI0MDgsIDB4OTlEOSwgMHg5OUQ5LCAweDI0MDQsCisgICAgMHg5OURBLCAweDk5REEsIDB4NTI1RiwgMHg5OURCLCAweDk5REIsIDB4MjEzMSwgMHg5OURDLCAweDk5REMsIDB4NTI2MCwKKyAgICAweDk5REQsIDB4OTlERCwgMHgyMTg0LCAweDk5REUsIDB4OTlERSwgMHg1MjYxLCAweDk5REYsIDB4OTlERiwgMHgyNDAzLAorICAgIDB4OTlFMCwgMHg5OUUwLCAweDUyNjIsIDB4OTlFMSwgMHg5OUUxLCAweDIwNkUsIDB4OTlFMiwgMHg5OUUyLCAweDI0MEIsCisgICAgMHg5OUUzLCAweDk5RUMsIDB4NTI2MywgMHg5OUVELCAweDk5RUQsIDB4MUYzRiwgMHg5OUVFLCAweDk5RjAsIDB4NTI2RCwKKyAgICAweDk5RjEsIDB4OTlGMSwgMHgyMDY3LCAweDk5RjIsIDB4OTlGRSwgMHg1MjcwLCAweDk5RkYsIDB4OTlGRiwgMHgxRkQ3LAorICAgIDB4OUEwMCwgMHg5QTAwLCAweDUyN0QsIDB4OUEwMSwgMHg5QTAxLCAweDFFODMsIDB4OUEwMiwgMHg5QTA0LCAweDUyN0UsCisgICAgMHg5QTA1LCAweDlBMDUsIDB4MjQwRiwgMHg5QTA2LCAweDlBMEMsIDB4NTI4MSwgMHg5QTBELCAweDlBMEQsIDB4MjQwRSwKKyAgICAweDlBMEUsIDB4OUEwRSwgMHgyMEM3LCAweDlBMEYsIDB4OUEwRiwgMHgyNDBELCAweDlBMTAsIDB4OUExNSwgMHg1Mjg4LAorICAgIDB4OUExNiwgMHg5QTE2LCAweDI0MTIsIDB4OUExNywgMHg5QTE4LCAweDUyOEUsIDB4OUExOSwgMHg5QTE5LCAweDIwQjcsCisgICAgMHg5QTFBLCAweDlBMkEsIDB4NTI5MCwgMHg5QTJCLCAweDlBMkIsIDB4MjNGMCwgMHg5QTJDLCAweDlBMkMsIDB4NTJBMSwKKyAgICAweDlBMkQsIDB4OUEyRCwgMHgyNDExLCAweDlBMkUsIDB4OUEyRSwgMHgyNDE0LCAweDlBMkYsIDB4OUEyRiwgMHg1MkEyLAorICAgIDB4OUEzMCwgMHg5QTMwLCAweDIxNzAsIDB4OUEzMSwgMHg5QTM1LCAweDUyQTMsIDB4OUEzNiwgMHg5QTM2LCAweDI0MDUsCisgICAgMHg5QTM3LCAweDlBMzcsIDB4MjEwQywgMHg5QTM4LCAweDlBMzgsIDB4MjQxNSwgMHg5QTM5LCAweDlBM0QsIDB4NTJBOCwKKyAgICAweDlBM0UsIDB4OUEzRSwgMHgyMDY2LCAweDlBM0YsIDB4OUEzRiwgMHg1MkFELCAweDlBNDAsIDB4OUE0MCwgMHgyMzUyLAorICAgIDB4OUE0MSwgMHg5QTQxLCAweDI0MTMsIDB4OUE0MiwgMHg5QTQyLCAweDI0MTAsIDB4OUE0MywgMHg5QTQ0LCAweDI0MTYsCisgICAgMHg5QTQ1LCAweDlBNDUsIDB4MjBGMSwgMHg5QTQ2LCAweDlBNDksIDB4NTJBRSwgMHg5QTRBLCAweDlBNEEsIDB4MjQwQSwKKyAgICAweDlBNEIsIDB4OUE0QywgMHg1MkIyLCAweDlBNEQsIDB4OUE0RCwgMHgyNDA5LCAweDlBNEUsIDB4OUE0RSwgMHg1MkI0LAorICAgIDB4OUE0RiwgMHg5QTRGLCAweDI0MTgsIDB4OUE1MCwgMHg5QTU0LCAweDUyQjUsIDB4OUE1NSwgMHg5QTU1LCAweDFGQTcsCisgICAgMHg5QTU2LCAweDlBNTYsIDB4NTJCQSwgMHg5QTU3LCAweDlBNTcsIDB4MjFGQywgMHg5QTU4LCAweDlBNTksIDB4NTJCQiwKKyAgICAweDlBNUEsIDB4OUE1QSwgMHgxRkMxLCAweDlBNUIsIDB4OUE1QiwgMHgyNDA2LCAweDlBNUMsIDB4OUE1RSwgMHg1MkJELAorICAgIDB4OUE1RiwgMHg5QTVGLCAweDIyOUMsIDB4OUE2MCwgMHg5QTYxLCAweDUyQzAsIDB4OUE2MiwgMHg5QTYyLCAweDIwNEUsCisgICAgMHg5QTYzLCAweDlBNjMsIDB4NTJDMiwgMHg5QTY0LCAweDlBNjQsIDB4MjQxQSwgMHg5QTY1LCAweDlBNjUsIDB4MjQxOSwKKyAgICAweDlBNjYsIDB4OUE2OSwgMHg1MkMzLCAweDlBNkEsIDB4OUE2QSwgMHgyNDBDLCAweDlBNkIsIDB4OUE2QiwgMHg1MkM3LAorICAgIDB4OUE2QywgMHg5QTZDLCAweDBBOTQsIDB4OUE2RCwgMHg5QTZELCAweDEwRTksIDB4OUE2RSwgMHg5QTZFLCAweDBFODUsCisgICAgMHg5QTZGLCAweDlBNkYsIDB4MEZEQSwgMHg5QTcwLCAweDlBNzAsIDB4MDUwMCwgMHg5QTcxLCAweDlBNzEsIDB4MEM3QSwKKyAgICAweDlBNzIsIDB4OUE3MiwgMHg1MkM4LCAweDlBNzMsIDB4OUE3MywgMHgwNDdDLCAweDlBNzQsIDB4OUE3NCwgMHgwQTY2LAorICAgIDB4OUE3NSwgMHg5QTc1LCAweDE3QkEsIDB4OUE3NiwgMHg5QTc2LCAweDBENTIsIDB4OUE3NywgMHg5QTc4LCAweDE3QkIsCisgICAgMHg5QTc5LCAweDlBNzksIDB4MDkwMywgMHg5QTdBLCAweDlBN0EsIDB4MTdCRCwgMHg5QTdCLCAweDlBN0IsIDB4MTIwMSwKKyAgICAweDlBN0MsIDB4OUE3QywgMHgwRTg2LCAweDlBN0QsIDB4OUE3RCwgMHgxN0JGLCAweDlBN0UsIDB4OUE3RSwgMHgwODUwLAorICAgIDB4OUE3RiwgMHg5QTdGLCAweDE3QkUsIDB4OUE4MCwgMHg5QTgxLCAweDE3QzAsIDB4OUE4MiwgMHg5QTgyLCAweDBBOTUsCisgICAgMHg5QTgzLCAweDlBODMsIDB4NTJDOSwgMHg5QTg0LCAweDlBODQsIDB4MDg4RiwgMHg5QTg1LCAweDlBODUsIDB4MTdDMiwKKyAgICAweDlBODYsIDB4OUE4NiwgMHgwQThELCAweDlBODcsIDB4OUE4NywgMHgwNzVFLCAweDlBODgsIDB4OUE4OCwgMHgxN0MzLAorICAgIDB4OUE4OSwgMHg5QTg5LCAweDUyQ0EsIDB4OUE4QSwgMHg5QThBLCAweDE3QzQsIDB4OUE4QiwgMHg5QThCLCAweDA0RjcsCisgICAgMHg5QThDLCAweDlBOEMsIDB4MTAxMiwgMHg5QThELCAweDlBOEUsIDB4NTJDQiwgMHg5QThGLCAweDlBOEYsIDB4MDkzMiwKKyAgICAweDlBOTAsIDB4OUE5MCwgMHgxN0M1LCAweDlBOTEsIDB4OUE5MSwgMHgwQzBFLCAweDlBOTIsIDB4OUE5MywgMHgxN0M2LAorICAgIDB4OUE5NCwgMHg5QTk1LCAweDUyQ0QsIDB4OUE5NiwgMHg5QTk2LCAweDE3QzgsIDB4OUE5NywgMHg5QTk3LCAweDBCQ0MsCisgICAgMHg5QTk4LCAweDlBOTgsIDB4MTdDOSwgMHg5QTk5LCAweDlBOTksIDB4NTJDRiwgMHg5QTlBLCAweDlBOUEsIDB4MENFMCwKKyAgICAweDlBOUIsIDB4OUE5RCwgMHgxN0NBLCAweDlBOUUsIDB4OUE5RSwgMHgxNzM1LCAweDlBOUYsIDB4OUFBMCwgMHgxN0NELAorICAgIDB4OUFBMSwgMHg5QUExLCAweDBBODksIDB4OUFBMiwgMHg5QUEzLCAweDE3Q0YsIDB4OUFBNCwgMHg5QUE0LCAweDExRTcsCisgICAgMHg5QUE1LCAweDlBQTUsIDB4MTdEMSwgMHg5QUE2LCAweDlBQTYsIDB4NTJEMCwgMHg5QUE3LCAweDlBQTcsIDB4MTdEMiwKKyAgICAweDlBQTgsIDB4OUFBOCwgMHgwNzIwLCAweDlBQTksIDB4OUFBRSwgMHg1MkQxLCAweDlBQUYsIDB4OUFBRiwgMHgxRTI5LAorICAgIDB4OUFCMCwgMHg5QUIwLCAweDFERDMsIDB4OUFCMSwgMHg5QUIxLCAweDFERDIsIDB4OUFCMiwgMHg5QUI1LCAweDUyRDcsCisgICAgMHg5QUI2LCAweDlBQjYsIDB4MURENiwgMHg5QUI3LCAweDlBQjcsIDB4MURENCwgMHg5QUI4LCAweDlBQjgsIDB4MDc1OCwKKyAgICAweDlBQjksIDB4OUFCOSwgMHg1MkRCLCAweDlBQkEsIDB4OUFCQSwgMHgxREQ3LCAweDlBQkIsIDB4OUFCQiwgMHg1MkRDLAorICAgIDB4OUFCQywgMHg5QUJDLCAweDFERDgsIDB4OUFCRCwgMHg5QUJGLCAweDUyREQsIDB4OUFDMCwgMHg5QUMwLCAweDFEREEsCisgICAgMHg5QUMxLCAweDlBQzEsIDB4MUREOSwgMHg5QUMyLCAweDlBQzIsIDB4MUREQywgMHg5QUMzLCAweDlBQzQsIDB4NTJFMCwKKyAgICAweDlBQzUsIDB4OUFDNSwgMHgxRERCLCAweDlBQzYsIDB4OUFDQSwgMHg1MkUyLCAweDlBQ0IsIDB4OUFDQywgMHgxRERELAorICAgIDB4OUFDRCwgMHg5QUNFLCAweDUyRTcsIDB4OUFDRiwgMHg5QUNGLCAweDI2NjEsIDB4OUFEMCwgMHg5QUQwLCAweDUyRTksCisgICAgMHg5QUQxLCAweDlBRDEsIDB4MURERiwgMHg5QUQyLCAweDlBRDIsIDB4MjZBNCwgMHg5QUQzLCAweDlBRDMsIDB4MERERCwKKyAgICAweDlBRDQsIDB4OUFENCwgMHgyMTc0LCAweDlBRDUsIDB4OUFENSwgMHgyNjYzLCAweDlBRDYsIDB4OUFENiwgMHgyNjYyLAorICAgIDB4OUFENywgMHg5QUQ3LCAweDUyRUEsIDB4OUFEOCwgMHg5QUQ4LCAweDA2REEsIDB4OUFEOSwgMHg5QURFLCAweDUyRUIsCisgICAgMHg5QURGLCAweDlBREYsIDB4MURFQywgMHg5QUUwLCAweDlBRTAsIDB4NTJGMSwgMHg5QUUxLCAweDlBRTEsIDB4MURFRCwKKyAgICAweDlBRTIsIDB4OUFFNSwgMHg1MkYyLCAweDlBRTYsIDB4OUFFNiwgMHgxREVFLCAweDlBRTcsIDB4OUFFQSwgMHg1MkY2LAorICAgIDB4OUFFQiwgMHg5QUVCLCAweDFERjAsIDB4OUFFQywgMHg5QUVDLCAweDUyRkEsIDB4OUFFRCwgMHg5QUVELCAweDFERjIsCisgICAgMHg5QUVFLCAweDlBRUUsIDB4MjY3NSwgMHg5QUVGLCAweDlBRUYsIDB4MURFRiwgMHg5QUYwLCAweDlBRjgsIDB4NTJGQiwKKyAgICAweDlBRjksIDB4OUFGOSwgMHgxREYzLCAweDlBRkEsIDB4OUFGQSwgMHg1MzA0LCAweDlBRkIsIDB4OUFGQiwgMHgxREYxLAorICAgIDB4OUFGQywgMHg5QUZGLCAweDUzMDUsIDB4OUIwMCwgMHg5QjAyLCAweDUzMDksIDB4OUIwMywgMHg5QjAzLCAweDEyMzQsCisgICAgMHg5QjA0LCAweDlCMDUsIDB4NTMwQywgMHg5QjA2LCAweDlCMDYsIDB4MjE0QywgMHg5QjA3LCAweDlCMDcsIDB4NTMwRSwKKyAgICAweDlCMDgsIDB4OUIwOCwgMHgxREY0LCAweDlCMDksIDB4OUIwQywgMHg1MzBGLCAweDlCMEQsIDB4OUIwRCwgMHgyNjdBLAorICAgIDB4OUIwRSwgMHg5QjBFLCAweDUzMTMsIDB4OUIwRiwgMHg5QjBGLCAweDFERjUsIDB4OUIxMCwgMHg5QjEyLCAweDUzMTQsCisgICAgMHg5QjEzLCAweDlCMTMsIDB4MURGNiwgMHg5QjE0LCAweDlCMTksIDB4NTMxNywgMHg5QjFBLCAweDlCMUEsIDB4MjZBMCwKKyAgICAweDlCMUIsIDB4OUIxRSwgMHg1MzFELCAweDlCMUYsIDB4OUIxRiwgMHgxREY3LCAweDlCMjAsIDB4OUIyMSwgMHg1MzIxLAorICAgIDB4OUIyMiwgMHg5QjIyLCAweDI2NjgsIDB4OUIyMywgMHg5QjIzLCAweDFERjgsIDB4OUIyNCwgMHg5QjI0LCAweDUzMjMsCisgICAgMHg5QjI1LCAweDlCMjUsIDB4MUVEMCwgMHg5QjI2LCAweDlCMjYsIDB4NTMyNCwgMHg5QjI3LCAweDlCMjcsIDB4MjA5NiwKKyAgICAweDlCMjgsIDB4OUIyOCwgMHg1MzI1LCAweDlCMjksIDB4OUIyOSwgMHgyM0NDLCAweDlCMkEsIDB4OUIyRCwgMHg1MzI2LAorICAgIDB4OUIyRSwgMHg5QjJFLCAweDIzQzgsIDB4OUIyRiwgMHg5QjJGLCAweDEzOUIsIDB4OUIzMCwgMHg5QjMwLCAweDUzMkEsCisgICAgMHg5QjMxLCAweDlCMzEsIDB4MjIzRSwgMHg5QjMyLCAweDlCMzIsIDB4MTI2MCwgMHg5QjMzLCAweDlCM0EsIDB4NTMyQiwKKyAgICAweDlCM0IsIDB4OUIzQiwgMHgxNzczLCAweDlCM0MsIDB4OUIzQywgMHgwNzQ2LCAweDlCM0QsIDB4OUI0MCwgMHg1MzMzLAorICAgIDB4OUI0MSwgMHg5QjQxLCAweDA5OEEsIDB4OUI0MiwgMHg5QjQyLCAweDA3RkYsIDB4OUI0MywgMHg5QjQzLCAweDFERTEsCisgICAgMHg5QjQ0LCAweDlCNDQsIDB4MEJFNiwgMHg5QjQ1LCAweDlCNDUsIDB4MURFMCwgMHg5QjQ2LCAweDlCNDYsIDB4NTMzNywKKyAgICAweDlCNDcsIDB4OUI0NywgMHgxREUyLCAweDlCNDgsIDB4OUI0OCwgMHgxREU0LCAweDlCNDksIDB4OUI0OSwgMHgxREUzLAorICAgIDB4OUI0QSwgMHg5QjRDLCAweDUzMzgsIDB4OUI0RCwgMHg5QjRELCAweDFERTUsIDB4OUI0RSwgMHg5QjRFLCAweDI2NjUsCisgICAgMHg5QjRGLCAweDlCNEYsIDB4MEVDOSwgMHg5QjUwLCAweDlCNTAsIDB4NTMzQiwgMHg5QjUxLCAweDlCNTEsIDB4MURFNiwKKyAgICAweDlCNTIsIDB4OUI1MywgMHg1MzNDLCAweDlCNTQsIDB4OUI1NCwgMHgwQjBBLCAweDlCNTUsIDB4OUI1NywgMHg1MzNFLAorICAgIDB4OUI1OCwgMHg5QjU4LCAweDI2NjQsIDB4OUI1OSwgMHg5QjU5LCAweDUzNDEsIDB4OUI1QSwgMHg5QjVBLCAweDIyMzksCisgICAgMHg5QjVCLCAweDlCNkUsIDB4NTM0MiwgMHg5QjZGLCAweDlCNkYsIDB4MjA0QSwgMHg5QjcwLCAweDlCNzMsIDB4NTM1NiwKKyAgICAweDlCNzQsIDB4OUI3NCwgMHgyNjFGLCAweDlCNzUsIDB4OUI3NiwgMHg1MzVBLCAweDlCNzcsIDB4OUI3NywgMHgyNjFFLAorICAgIDB4OUI3OCwgMHg5QjgwLCAweDUzNUMsIDB4OUI4MSwgMHg5QjgxLCAweDI2MjAsIDB4OUI4MiwgMHg5QjgyLCAweDUzNjUsCisgICAgMHg5QjgzLCAweDlCODMsIDB4MjYyMSwgMHg5Qjg0LCAweDlCOEQsIDB4NTM2NiwgMHg5QjhFLCAweDlCOEUsIDB4MjYyMiwKKyAgICAweDlCOEYsIDB4OUI4RiwgMHg1MzcwLCAweDlCOTAsIDB4OUI5MCwgMHgyNjI3LCAweDlCOTEsIDB4OUI5MSwgMHgxRTM5LAorICAgIDB4OUI5MiwgMHg5QjkyLCAweDI2MjUsIDB4OUI5MywgMHg5Qjk5LCAweDUzNzEsIDB4OUI5QSwgMHg5QjlBLCAweDI2MjksCisgICAgMHg5QjlCLCAweDlCOUMsIDB4NTM3OCwgMHg5QjlELCAweDlCOUQsIDB4MjYyRSwgMHg5QjlFLCAweDlCOUUsIDB4MjYyQiwKKyAgICAweDlCOUYsIDB4OUJBOSwgMHg1MzdBLCAweDlCQUEsIDB4OUJBQSwgMHgyNjJBLCAweDlCQUIsIDB4OUJBQiwgMHgyNjJELAorICAgIDB4OUJBQywgMHg5QkFDLCAweDUzODUsIDB4OUJBRCwgMHg5QkFELCAweDI2MjgsIDB4OUJBRSwgMHg5QkFFLCAweDIxQjksCisgICAgMHg5QkFGLCAweDlCQkYsIDB4NTM4NiwgMHg5QkMwLCAweDlCQzAsIDB4MjYzNiwgMHg5QkMxLCAweDlCQzEsIDB4MjYzMCwKKyAgICAweDlCQzIsIDB4OUJDNiwgMHg1Mzk3LCAweDlCQzcsIDB4OUJDNywgMHgyNjM4LCAweDlCQzgsIDB4OUJDOCwgMHg1MzlDLAorICAgIDB4OUJDOSwgMHg5QkM5LCAweDIwMEQsIDB4OUJDQSwgMHg5QkNBLCAweDI2MzcsIDB4OUJDQiwgMHg5QkQzLCAweDUzOUQsCisgICAgMHg5QkQ0LCAweDlCRDQsIDB4MjY0NSwgMHg5QkQ1LCAweDlCRDUsIDB4NTNBNiwgMHg5QkQ2LCAweDlCRDYsIDB4MjYzQSwKKyAgICAweDlCRDcsIDB4OUJEQSwgMHg1M0E3LCAweDlCREIsIDB4OUJEQiwgMHgyNjQzLCAweDlCREMsIDB4OUJEQywgMHg1M0FCLAorICAgIDB4OUJERCwgMHg5QkRELCAweDI2NDAsIDB4OUJERSwgMHg5QkUwLCAweDUzQUMsIDB4OUJFMSwgMHg5QkUxLCAweDI2M0QsCisgICAgMHg5QkUyLCAweDlCRTIsIDB4MjY0MSwgMHg5QkUzLCAweDlCRTMsIDB4NTNBRiwgMHg5QkU0LCAweDlCRTQsIDB4MjYzRSwKKyAgICAweDlCRTUsIDB4OUJFNiwgMHg1M0IwLCAweDlCRTcsIDB4OUJFNywgMHgyNjNGLCAweDlCRTgsIDB4OUJFOCwgMHgxRkMwLAorICAgIDB4OUJFOSwgMHg5QkU5LCAweDUzQjIsIDB4OUJFQSwgMHg5QkVCLCAweDI2M0IsIDB4OUJFQywgMHg5QkVGLCAweDUzQjMsCisgICAgMHg5QkYwLCAweDlCRjAsIDB4MjY0MiwgMHg5QkYxLCAweDlCRjMsIDB4NTNCNywgMHg5QkY0LCAweDlCRjQsIDB4MjY0NCwKKyAgICAweDlCRjUsIDB4OUJGQywgMHg1M0JBLCAweDlCRkQsIDB4OUJGRCwgMHgyNjM5LCAweDlCRkUsIDB4OUJGRSwgMHg1M0MyLAorICAgIDB4OUJGRiwgMHg5QkZGLCAweDI2NEMsIDB4OUMwMCwgMHg5QzA3LCAweDUzQzMsIDB4OUMwOCwgMHg5QzA4LCAweDI2NDcsCisgICAgMHg5QzA5LCAweDlDMDksIDB4MjY0QiwgMHg5QzBBLCAweDlDMEMsIDB4NTNDQiwgMHg5QzBELCAweDlDMEQsIDB4MjY0OSwKKyAgICAweDlDMEUsIDB4OUMwRiwgMHg1M0NFLCAweDlDMTAsIDB4OUMxMCwgMHgyNjQ4LCAweDlDMTEsIDB4OUMxMSwgMHg1M0QwLAorICAgIDB4OUMxMiwgMHg5QzEyLCAweDI2NEEsIDB4OUMxMywgMHg5QzEzLCAweDIxMDgsIDB4OUMxNCwgMHg5QzFGLCAweDUzRDEsCisgICAgMHg5QzIwLCAweDlDMjAsIDB4MjY0RCwgMHg5QzIxLCAweDlDMjIsIDB4NTNERCwgMHg5QzIzLCAweDlDMjMsIDB4MjYzNCwKKyAgICAweDlDMjQsIDB4OUMyNCwgMHg1M0RGLCAweDlDMjUsIDB4OUMyNSwgMHgyNjUxLCAweDlDMjYsIDB4OUMyNywgMHg1M0UwLAorICAgIDB4OUMyOCwgMHg5QzI4LCAweDI2NTAsIDB4OUMyOSwgMHg5QzI5LCAweDI2NTIsIDB4OUMyQSwgMHg5QzJDLCAweDUzRTIsCisgICAgMHg5QzJELCAweDlDMkQsIDB4MjY0RiwgMHg5QzJFLCAweDlDMzAsIDB4NTNFNSwgMHg5QzMxLCAweDlDMzEsIDB4MjYzMiwKKyAgICAweDlDMzIsIDB4OUMzMiwgMHgyNjRFLCAweDlDMzMsIDB4OUMzMywgMHgyNjUzLCAweDlDMzQsIDB4OUMzNCwgMHg1M0U4LAorICAgIDB4OUMzNSwgMHg5QzM1LCAweDI2NTcsIDB4OUMzNiwgMHg5QzM2LCAweDUzRTksIDB4OUMzNywgMHg5QzM3LCAweDI2MzUsCisgICAgMHg5QzM4LCAweDlDMzgsIDB4NTNFQSwgMHg5QzM5LCAweDlDMzksIDB4MjYzMywgMHg5QzNBLCAweDlDM0EsIDB4NTNFQiwKKyAgICAweDlDM0IsIDB4OUMzQiwgMHgyNjU2LCAweDlDM0MsIDB4OUMzRCwgMHg1M0VDLCAweDlDM0UsIDB4OUMzRSwgMHgyNjU0LAorICAgIDB4OUMzRiwgMHg5QzQ0LCAweDUzRUUsIDB4OUM0NSwgMHg5QzQ1LCAweDI2NTgsIDB4OUM0NiwgMHg5QzQ3LCAweDUzRjQsCisgICAgMHg5QzQ4LCAweDlDNDgsIDB4MjY1NSwgMHg5QzQ5LCAweDlDNDksIDB4MUU0RCwgMHg5QzRBLCAweDlDNTEsIDB4NTNGNiwKKyAgICAweDlDNTIsIDB4OUM1MiwgMHgyNjVCLCAweDlDNTMsIDB4OUM1MywgMHg1M0ZFLCAweDlDNTQsIDB4OUM1NCwgMHgyNjVBLAorICAgIDB4OUM1NSwgMHg5QzU1LCAweDUzRkYsIDB4OUM1NiwgMHg5QzU2LCAweDI2NTksIDB4OUM1NywgMHg5QzU3LCAweDIwMkUsCisgICAgMHg5QzU4LCAweDlDNTgsIDB4MjYyRiwgMHg5QzU5LCAweDlDNUMsIDB4NTQwMCwgMHg5QzVELCAweDlDNUQsIDB4MjY0NiwKKyAgICAweDlDNUUsIDB4OUM1RSwgMHg1NDA0LCAweDlDNUYsIDB4OUM1RiwgMHgyNjI2LCAweDlDNjAsIDB4OUM2NiwgMHg1NDA1LAorICAgIDB4OUM2NywgMHg5QzY3LCAweDI2NUMsIDB4OUM2OCwgMHg5QzZDLCAweDU0MEMsIDB4OUM2RCwgMHg5QzZELCAweDI2MkMsCisgICAgMHg5QzZFLCAweDlDNzcsIDB4NTQxMSwgMHg5Qzc4LCAweDlDNzgsIDB4MjYyMywgMHg5Qzc5LCAweDlDNzksIDB4NTQxQiwKKyAgICAweDlDN0EsIDB4OUM3QSwgMHgyNjMxLCAweDlDN0IsIDB4OUM3QiwgMHg1NDFDLCAweDlDN0MsIDB4OUM3QywgMHgxMEM4LAorICAgIDB4OUM3RCwgMHg5QzdFLCAweDU0MUQsIDB4OUM3RiwgMHg5QzdGLCAweDFEODksIDB4OUM4MCwgMHg5QzgwLCAweDU0MUYsCisgICAgMHg5QzgxLCAweDlDODEsIDB4MEE1QSwgMHg5QzgyLCAweDlDODIsIDB4MUQ4QSwgMHg5QzgzLCAweDlDODQsIDB4NTQyMCwKKyAgICAweDlDODUsIDB4OUM4OCwgMHgxRDhCLCAweDlDODksIDB4OUM4QSwgMHg1NDIyLCAweDlDOEIsIDB4OUM4QiwgMHgxRDkwLAorICAgIDB4OUM4QywgMHg5QzhDLCAweDU0MjQsIDB4OUM4RCwgMHg5QzhELCAweDA0MTQsIDB4OUM4RSwgMHg5QzhFLCAweDFEOTEsCisgICAgMHg5QzhGLCAweDlDOEYsIDB4NTQyNSwgMHg5QzkwLCAweDlDOTIsIDB4MUQ5MiwgMHg5QzkzLCAweDlDOTMsIDB4NTQyNiwKKyAgICAweDlDOTQsIDB4OUM5NSwgMHgxRDk1LCAweDlDOTYsIDB4OUM5OSwgMHg1NDI3LCAweDlDOUEsIDB4OUM5QiwgMHgxRDk3LAorICAgIDB4OUM5QywgMHg5QzlDLCAweDBGMzcsIDB4OUM5RCwgMHg5QzlELCAweDU0MkIsIDB4OUM5RSwgMHg5Q0EzLCAweDFEOTksCisgICAgMHg5Q0E0LCAweDlDQTQsIDB4MDlEQiwgMHg5Q0E1LCAweDlDQTksIDB4MUQ5RiwgMHg5Q0FBLCAweDlDQUEsIDB4NTQyQywKKyAgICAweDlDQUIsIDB4OUNBQiwgMHgxREE0LCAweDlDQUMsIDB4OUNBQywgMHg1NDJELCAweDlDQUQsIDB4OUNBRSwgMHgxREE1LAorICAgIDB4OUNBRiwgMHg5Q0FGLCAweDU0MkUsIDB4OUNCMCwgMHg5Q0I3LCAweDFEQTcsIDB4OUNCOCwgMHg5Q0I4LCAweDA4RDcsCisgICAgMHg5Q0I5LCAweDlDQjksIDB4NTQyRiwgMHg5Q0JBLCAweDlDQkQsIDB4MURBRiwgMHg5Q0JFLCAweDlDQzIsIDB4NTQzMCwKKyAgICAweDlDQzMsIDB4OUNDMywgMHgwQ0Q1LCAweDlDQzQsIDB4OUNDNywgMHgxREIzLCAweDlDQzgsIDB4OUNDOSwgMHg1NDM1LAorICAgIDB4OUNDQSwgMHg5Q0QwLCAweDFEQjcsIDB4OUNEMSwgMHg5Q0QyLCAweDU0MzcsIDB4OUNEMywgMHg5Q0Q1LCAweDFEQkUsCisgICAgMHg5Q0Q2LCAweDlDRDYsIDB4MDQ1NywgMHg5Q0Q3LCAweDlDRDksIDB4MURDMSwgMHg5Q0RBLCAweDlDREIsIDB4NTQzOSwKKyAgICAweDlDREMsIDB4OUNERCwgMHgxREM0LCAweDlDREUsIDB4OUNERSwgMHgwQTI0LCAweDlDREYsIDB4OUNERiwgMHgxREM2LAorICAgIDB4OUNFMCwgMHg5Q0UxLCAweDU0M0IsIDB4OUNFMiwgMHg5Q0UyLCAweDFEQzcsIDB4OUNFMywgMHg5Q0U0LCAweDU0M0QsCisgICAgMHg5Q0U1LCAweDlDRTUsIDB4MjA5QywgMHg5Q0U2LCAweDlDRTgsIDB4NTQzRiwgMHg5Q0U5LCAweDlDRTksIDB4MjU4MCwKKyAgICAweDlDRUEsIDB4OUNFQiwgMHg1NDQyLCAweDlDRUMsIDB4OUNFQywgMHgyMkRDLCAweDlDRUQsIDB4OUNGMiwgMHg1NDQ0LAorICAgIDB4OUNGMywgMHg5Q0YzLCAweDFGMDUsIDB4OUNGNCwgMHg5Q0Y0LCAweDIwOEIsIDB4OUNGNSwgMHg5Q0Y1LCAweDU0NEEsCisgICAgMHg5Q0Y2LCAweDlDRjYsIDB4MjU4MSwgMHg5Q0Y3LCAweDlDRkYsIDB4NTQ0QiwgMHg5RDAwLCAweDlEMDUsIDB4NTQ1NCwKKyAgICAweDlEMDYsIDB4OUQwNiwgMHgyNTgzLCAweDlEMDcsIDB4OUQwNywgMHgyNTgyLCAweDlEMDgsIDB4OUQwOCwgMHg1NDVBLAorICAgIDB4OUQwOSwgMHg5RDA5LCAweDIxRUUsIDB4OUQwQSwgMHg5RDE0LCAweDU0NUIsIDB4OUQxNSwgMHg5RDE1LCAweDIxODIsCisgICAgMHg5RDE2LCAweDlEMUEsIDB4NTQ2NiwgMHg5RDFCLCAweDlEMUIsIDB4MjI0MywgMHg5RDFDLCAweDlEMUMsIDB4NTQ2QiwKKyAgICAweDlEMUQsIDB4OUQxRCwgMHgyNTg3LCAweDlEMUUsIDB4OUQxRSwgMHg1NDZDLCAweDlEMUYsIDB4OUQxRiwgMHgyNTg4LAorICAgIDB4OUQyMCwgMHg5RDIyLCAweDU0NkQsIDB4OUQyMywgMHg5RDIzLCAweDI1ODQsIDB4OUQyNCwgMHg5RDI1LCAweDU0NzAsCisgICAgMHg5RDI2LCAweDlEMjYsIDB4MjFGRCwgMHg5RDI3LCAweDlEMjcsIDB4NTQ3MiwgMHg5RDI4LCAweDlEMjgsIDB4MjFFRiwKKyAgICAweDlEMjksIDB4OUQyRSwgMHg1NDczLCAweDlEMkYsIDB4OUQyRiwgMHgyNThBLCAweDlEMzAsIDB4OUQzMCwgMHgyNThDLAorICAgIDB4OUQzMSwgMHg5RDNBLCAweDU0NzksIDB4OUQzQiwgMHg5RDNCLCAweDFGNDcsIDB4OUQzQywgMHg5RDNFLCAweDU0ODMsCisgICAgMHg5RDNGLCAweDlEM0YsIDB4MUYxRCwgMHg5RDQwLCAweDlENDEsIDB4NTQ4NiwgMHg5RDQyLCAweDlENDIsIDB4MjU4RCwKKyAgICAweDlENDMsIDB4OUQ1MCwgMHg1NDg4LCAweDlENTEsIDB4OUQ1MSwgMHgxRkQwLCAweDlENTIsIDB4OUQ1MiwgMHgyNTkyLAorICAgIDB4OUQ1MywgMHg5RDUzLCAweDI1OEYsIDB4OUQ1NCwgMHg5RDVCLCAweDU0OTYsIDB4OUQ1QywgMHg5RDVDLCAweDI1OTQsCisgICAgMHg5RDVELCAweDlENUQsIDB4MUVFMCwgMHg5RDVFLCAweDlENUYsIDB4NTQ5RSwgMHg5RDYwLCAweDlENjAsIDB4MjU5MSwKKyAgICAweDlENjEsIDB4OUQ2MSwgMHgyNTk1LCAweDlENjIsIDB4OUQ2OSwgMHg1NEEwLCAweDlENkEsIDB4OUQ2QSwgMHgyNTk3LAorICAgIDB4OUQ2QiwgMHg5RDZCLCAweDU0QTgsIDB4OUQ2QywgMHg5RDZDLCAweDIwQjYsIDB4OUQ2RCwgMHg5RDZFLCAweDU0QTksCisgICAgMHg5RDZGLCAweDlENkYsIDB4MjU5OCwgMHg5RDcwLCAweDlENzEsIDB4NTRBQiwgMHg5RDcyLCAweDlENzIsIDB4MjBGNiwKKyAgICAweDlENzMsIDB4OUQ4NiwgMHg1NEFELCAweDlEODcsIDB4OUQ4NywgMHgyNTg1LCAweDlEODgsIDB4OUQ4OCwgMHg1NEMxLAorICAgIDB4OUQ4OSwgMHg5RDg5LCAweDI1OTksIDB4OUQ4QSwgMHg5RDkyLCAweDU0QzIsIDB4OUQ5MywgMHg5RDkzLCAweDI1OTYsCisgICAgMHg5RDk0LCAweDlEOTcsIDB4NTRDQiwgMHg5RDk4LCAweDlEOTgsIDB4MjU5QSwgMHg5RDk5LCAweDlEOTksIDB4NTRDRiwKKyAgICAweDlEOUEsIDB4OUQ5QSwgMHgyNTlCLCAweDlEOUIsIDB4OURBNCwgMHg1NEQwLCAweDlEQTUsIDB4OURBNSwgMHgyNTlELAorICAgIDB4OURBNiwgMHg5REE4LCAweDU0REEsIDB4OURBOSwgMHg5REE5LCAweDI1OUUsIDB4OURBQSwgMHg5REFFLCAweDU0REQsCisgICAgMHg5REFGLCAweDlEQUYsIDB4MjM0QywgMHg5REIwLCAweDlEQjMsIDB4NTRFMiwgMHg5REI0LCAweDlEQjQsIDB4MUY0NCwKKyAgICAweDlEQjUsIDB4OURCQSwgMHg1NEU2LCAweDlEQkIsIDB4OURCQiwgMHgyNjYwLCAweDlEQkMsIDB4OURCQywgMHgyNUEwLAorICAgIDB4OURCRCwgMHg5REJGLCAweDU0RUMsIDB4OURDMCwgMHg5REMwLCAweDI1OUMsIDB4OURDMSwgMHg5REMxLCAweDU0RUYsCisgICAgMHg5REMyLCAweDlEQzIsIDB4MjU5RiwgMHg5REMzLCAweDlEQzMsIDB4NTRGMCwgMHg5REM0LCAweDlEQzQsIDB4MUY2QywKKyAgICAweDlEQzUsIDB4OUREMiwgMHg1NEYxLCAweDlERDMsIDB4OUREMywgMHgyNUEyLCAweDlERDQsIDB4OURENiwgMHg1NEZGLAorICAgIDB4OURENywgMHg5REQ3LCAweDIwQUUsIDB4OUREOCwgMHg5REQ4LCAweDU1MDIsIDB4OUREOSwgMHg5REQ5LCAweDI1OEIsCisgICAgMHg5RERBLCAweDlEREEsIDB4MjVBMywgMHg5RERCLCAweDlERTQsIDB4NTUwMywgMHg5REU1LCAweDlERTUsIDB4MjU4OSwKKyAgICAweDlERTYsIDB4OURFNiwgMHgyNUE1LCAweDlERTcsIDB4OURFRSwgMHg1NTBELCAweDlERUYsIDB4OURFRiwgMHgyNUE0LAorICAgIDB4OURGMCwgMHg5REYxLCAweDU1MTUsIDB4OURGMiwgMHg5REYyLCAweDI1QTYsIDB4OURGMywgMHg5REYzLCAweDI1OTMsCisgICAgMHg5REY0LCAweDlERjcsIDB4NTUxNywgMHg5REY4LCAweDlERjgsIDB4MjVBNywgMHg5REY5LCAweDlERjksIDB4MjIyMiwKKyAgICAweDlERkEsIDB4OURGQSwgMHgyNUE5LCAweDlERkIsIDB4OURGRiwgMHg1NTFCLCAweDlFMDAsIDB4OUUwQiwgMHg1NTIwLAorICAgIDB4OUUwQywgMHg5RTBDLCAweDI1QTgsIDB4OUUwRCwgMHg5RTE0LCAweDU1MkMsIDB4OUUxNSwgMHg5RTE1LCAweDI1ODYsCisgICAgMHg5RTE2LCAweDlFMTksIDB4NTUzNCwgMHg5RTFBLCAweDlFMUEsIDB4MjVBMSwgMHg5RTFCLCAweDlFMUIsIDB4MjVBQSwKKyAgICAweDlFMUMsIDB4OUUxQywgMHg1NTM4LCAweDlFMUQsIDB4OUUxRCwgMHgyNTkwLCAweDlFMUUsIDB4OUUxRSwgMHgyNThFLAorICAgIDB4OUUxRiwgMHg5RTFGLCAweDBCNTQsIDB4OUUyMCwgMHg5RTIwLCAweDFCMzUsIDB4OUUyMSwgMHg5RTIxLCAweDA4MTksCisgICAgMHg5RTIyLCAweDlFMjIsIDB4MUIzNiwgMHg5RTIzLCAweDlFMjMsIDB4MEFGRSwgMHg5RTI0LCAweDlFMjQsIDB4NTUzOSwKKyAgICAweDlFMjUsIDB4OUUyNSwgMHgwQjc5LCAweDlFMjYsIDB4OUUyNiwgMHgwRkU0LCAweDlFMjcsIDB4OUUyNywgMHg1NTNBLAorICAgIDB4OUUyOCwgMHg5RTJDLCAweDFCMzcsIDB4OUUyRCwgMHg5RTJELCAweDBGRTUsIDB4OUUyRSwgMHg5RTJFLCAweDU1M0IsCisgICAgMHg5RTJGLCAweDlFMkYsIDB4MTAxNSwgMHg5RTMwLCAweDlFMzAsIDB4NTUzQywgMHg5RTMxLCAweDlFMzEsIDB4MUIzRCwKKyAgICAweDlFMzIsIDB4OUUzMiwgMHgxQjNDLCAweDlFMzMsIDB4OUUzMywgMHgxMEVBLCAweDlFMzQsIDB4OUUzNCwgMHg1NTNELAorICAgIDB4OUUzNSwgMHg5RTM1LCAweDBFODMsIDB4OUUzNiwgMHg5RTM2LCAweDFCM0UsIDB4OUUzNywgMHg5RTM3LCAweDFCNDAsCisgICAgMHg5RTM4LCAweDlFMzgsIDB4MUIzRiwgMHg5RTM5LCAweDlFM0EsIDB4MUI0MSwgMHg5RTNCLCAweDlFM0MsIDB4NTUzRSwKKyAgICAweDlFM0QsIDB4OUUzRCwgMHgwNkU2LCAweDlFM0UsIDB4OUUzRSwgMHgxQjQzLCAweDlFM0YsIDB4OUUzRiwgMHgwNzlGLAorICAgIDB4OUU0MCwgMHg5RTQwLCAweDU1NDAsIDB4OUU0MSwgMHg5RTQyLCAweDFCNDQsIDB4OUU0MywgMHg5RTQzLCAweDA5MTgsCisgICAgMHg5RTQ0LCAweDlFNDQsIDB4MUI0NiwgMHg5RTQ1LCAweDlFNDUsIDB4MDYyQiwgMHg5RTQ2LCAweDlFNDksIDB4MUI0NywKKyAgICAweDlFNEEsIDB4OUU0QSwgMHgwQzkwLCAweDlFNEIsIDB4OUU0QywgMHgxQjRCLCAweDlFNEQsIDB4OUU0RCwgMHg1NTQxLAorICAgIDB4OUU0RSwgMHg5RTRFLCAweDFCNEQsIDB4OUU0RiwgMHg5RTRGLCAweDBCQjUsIDB4OUU1MCwgMHg5RTUwLCAweDU1NDIsCisgICAgMHg5RTUxLCAweDlFNTEsIDB4MUI0RSwgMHg5RTUyLCAweDlFNTQsIDB4NTU0MywgMHg5RTU1LCAweDlFNTUsIDB4MUI0RiwKKyAgICAweDlFNTYsIDB4OUU1NiwgMHg1NTQ2LCAweDlFNTcsIDB4OUU1NywgMHgxQjUwLCAweDlFNTgsIDB4OUU1OCwgMHgxREQ1LAorICAgIDB4OUU1OSwgMHg5RTU5LCAweDU1NDcsIDB4OUU1QSwgMHg5RTVDLCAweDFCNTEsIDB4OUU1RCwgMHg5RTVELCAweDU1NDgsCisgICAgMHg5RTVFLCAweDlFNUUsIDB4MUI1NCwgMHg5RTVGLCAweDlFNjIsIDB4NTU0OSwgMHg5RTYzLCAweDlFNjMsIDB4MUI1NSwKKyAgICAweDlFNjQsIDB4OUU2NCwgMHgwNzhFLCAweDlFNjUsIDB4OUU2NSwgMHg1NTRELCAweDlFNjYsIDB4OUU2QywgMHgxQjU2LAorICAgIDB4OUU2RCwgMHg5RTZELCAweDFCNUUsIDB4OUU2RSwgMHg5RTZGLCAweDU1NEUsIDB4OUU3MCwgMHg5RTcwLCAweDEwOEEsCisgICAgMHg5RTcxLCAweDlFNzEsIDB4MUI1RCwgMHg5RTcyLCAweDlFNzIsIDB4NTU1MCwgMHg5RTczLCAweDlFNzMsIDB4MUI1RiwKKyAgICAweDlFNzQsIDB4OUU3NCwgMHg1NTUxLCAweDlFNzUsIDB4OUU3NSwgMHgyNjg4LCAweDlFNzYsIDB4OUU3OCwgMHg1NTUyLAorICAgIDB4OUU3OSwgMHg5RTc5LCAweDI2OUUsIDB4OUU3QSwgMHg5RTdBLCAweDI1RkIsIDB4OUU3QiwgMHg5RTdCLCAweDU1NTUsCisgICAgMHg5RTdDLCAweDlFN0MsIDB4MUY4QywgMHg5RTdELCAweDlFN0QsIDB4MjFGNCwgMHg5RTdFLCAweDlFN0UsIDB4MUQxNiwKKyAgICAweDlFN0YsIDB4OUU3RiwgMHgwQTYwLCAweDlFODAsIDB4OUU4MSwgMHg1NTU2LCAweDlFODIsIDB4OUU4MiwgMHgxREZDLAorICAgIDB4OUU4MywgMHg5RTg2LCAweDU1NTgsIDB4OUU4NywgMHg5RTg4LCAweDFERkQsIDB4OUU4OSwgMHg5RThBLCAweDU1NUMsCisgICAgMHg5RThCLCAweDlFOEIsIDB4MURGRiwgMHg5RThDLCAweDlFOTEsIDB4NTU1RSwgMHg5RTkyLCAweDlFOTIsIDB4MUUwMCwKKyAgICAweDlFOTMsIDB4OUU5MywgMHgwQTVCLCAweDlFOTQsIDB4OUU5NiwgMHg1NTY0LCAweDlFOTcsIDB4OUU5NywgMHgyMDBGLAorICAgIDB4OUU5OCwgMHg5RTlDLCAweDU1NjcsIDB4OUU5RCwgMHg5RTlELCAweDFFMDIsIDB4OUU5RSwgMHg5RTlFLCAweDU1NkMsCisgICAgMHg5RTlGLCAweDlFOUYsIDB4MUUwMywgMHg5RUEwLCAweDlFQTQsIDB4NTU2RCwgMHg5RUE1LCAweDlFQTUsIDB4MjA3MSwKKyAgICAweDlFQTYsIDB4OUVBNiwgMHgwQTlBLCAweDlFQTcsIDB4OUVBOCwgMHg1NTcyLCAweDlFQTksIDB4OUVBOSwgMHgyNUY3LAorICAgIDB4OUVBQSwgMHg5RUFFLCAweDU1NzQsIDB4OUVBRiwgMHg5RUFGLCAweDI2OTYsIDB4OUVCMCwgMHg5RUIzLCAweDU1NzksCisgICAgMHg5RUI0LCAweDlFQjQsIDB4MUNFRSwgMHg5RUI1LCAweDlFQjUsIDB4MjY4RiwgMHg5RUI2LCAweDlFQjcsIDB4NTU3RCwKKyAgICAweDlFQjgsIDB4OUVCOCwgMHgxQ0VELCAweDlFQjksIDB4OUVCQSwgMHg1NTdGLCAweDlFQkIsIDB4OUVCQiwgMHgwQTkwLAorICAgIDB4OUVCQywgMHg5RUJDLCAweDU1ODEsIDB4OUVCRCwgMHg5RUJFLCAweDFERjksIDB4OUVCRiwgMHg5RUMzLCAweDU1ODIsCisgICAgMHg5RUM0LCAweDlFQzQsIDB4MDdEQiwgMHg5RUM1LCAweDlFQzgsIDB4NTU4NywgMHg5RUM5LCAweDlFQzksIDB4MTJGOCwKKyAgICAweDlFQ0EsIDB4OUVDQiwgMHg1NThCLCAweDlFQ0MsIDB4OUVDQywgMHgyMkRBLCAweDlFQ0QsIDB4OUVDRCwgMHgwRDg5LAorICAgIDB4OUVDRSwgMHg5RUNFLCAweDA5RDMsIDB4OUVDRiwgMHg5RUNGLCAweDFCMkEsIDB4OUVEMCwgMHg5RUQwLCAweDU1OEQsCisgICAgMHg5RUQxLCAweDlFRDEsIDB4MDc5MSwgMHg5RUQyLCAweDlFRDMsIDB4NTU4RSwgMHg5RUQ0LCAweDlFRDQsIDB4MEMyQSwKKyAgICAweDlFRDUsIDB4OUVENywgMHg1NTkwLCAweDlFRDgsIDB4OUVEOCwgMHgwQjBGLCAweDlFRDksIDB4OUVEQSwgMHg1NTkzLAorICAgIDB4OUVEQiwgMHg5RURELCAweDFFMDQsIDB4OUVERSwgMHg5RURFLCAweDFFQzEsIDB4OUVERiwgMHg5RURGLCAweDFFMDgsCisgICAgMHg5RUUwLCAweDlFRTAsIDB4MUUwNywgMHg5RUUxLCAweDlFRTEsIDB4NTU5NSwgMHg5RUUyLCAweDlFRTIsIDB4MUUwOSwKKyAgICAweDlFRTMsIDB4OUVFNCwgMHg1NTk2LCAweDlFRTUsIDB4OUVFNSwgMHgxRTBDLCAweDlFRTYsIDB4OUVFNiwgMHg1NTk4LAorICAgIDB4OUVFNywgMHg5RUU3LCAweDFFMEIsIDB4OUVFOCwgMHg5RUU4LCAweDFFQjMsIDB4OUVFOSwgMHg5RUU5LCAweDFFMEEsCisgICAgMHg5RUVBLCAweDlFRUEsIDB4MUUwRCwgMHg5RUVCLCAweDlFRUUsIDB4NTU5OSwgMHg5RUVGLCAweDlFRUYsIDB4MUUwRSwKKyAgICAweDlFRjAsIDB4OUVGMSwgMHg1NTlELCAweDlFRjIsIDB4OUVGMiwgMHgyNjZBLCAweDlFRjMsIDB4OUVGMywgMHg1NTlGLAorICAgIDB4OUVGNCwgMHg5RUY0LCAweDI2OEEsIDB4OUVGNSwgMHg5RUY2LCAweDU1QTAsIDB4OUVGNywgMHg5RUY3LCAweDI2NjksCisgICAgMHg5RUY4LCAweDlFRjgsIDB4NTVBMiwgMHg5RUY5LCAweDlFRjksIDB4MUE1NSwgMHg5RUZBLCAweDlFRkEsIDB4NTVBMywKKyAgICAweDlFRkIsIDB4OUVGQywgMHgxQTU2LCAweDlFRkQsIDB4OUVGRCwgMHgyNjE4LCAweDlFRkUsIDB4OUVGRSwgMHgxRDc2LAorICAgIDB4OUVGRiwgMHg5RUZGLCAweDI2MTksIDB4OUYwMCwgMHg5RjA4LCAweDU1QTQsIDB4OUYwOSwgMHg5RjA5LCAweDI2MUEsCisgICAgMHg5RjBBLCAweDlGMEEsIDB4NTVBRCwgMHg5RjBCLCAweDlGMEIsIDB4MUQ3NywgMHg5RjBDLCAweDlGMEMsIDB4NTVBRSwKKyAgICAweDlGMEQsIDB4OUYwRCwgMHgxRDc4LCAweDlGMEUsIDB4OUYwRSwgMHgwNUU1LCAweDlGMEYsIDB4OUYwRiwgMHg1NUFGLAorICAgIDB4OUYxMCwgMHg5RjEwLCAweDEyNzQsIDB4OUYxMSwgMHg5RjEyLCAweDU1QjAsIDB4OUYxMywgMHg5RjEzLCAweDA3MUQsCisgICAgMHg5RjE0LCAweDlGMTQsIDB4NTVCMiwgMHg5RjE1LCAweDlGMTUsIDB4MjY3MywgMHg5RjE2LCAweDlGMTYsIDB4NTVCMywKKyAgICAweDlGMTcsIDB4OUYxNywgMHgxMjcxLCAweDlGMTgsIDB4OUYxOCwgMHg1NUI0LCAweDlGMTksIDB4OUYxOSwgMHgxM0RGLAorICAgIDB4OUYxQSwgMHg5RjFGLCAweDU1QjUsIDB4OUYyMCwgMHg5RjIwLCAweDBEOEEsIDB4OUYyMSwgMHg5RjIxLCAweDU1QkIsCisgICAgMHg5RjIyLCAweDlGMjIsIDB4MUUwRiwgMHg5RjIzLCAweDlGMkIsIDB4NTVCQywgMHg5RjJDLCAweDlGMkMsIDB4MUUxMCwKKyAgICAweDlGMkQsIDB4OUYyRSwgMHg1NUM1LCAweDlGMkYsIDB4OUYyRiwgMHgxRTExLCAweDlGMzAsIDB4OUYzNiwgMHg1NUM3LAorICAgIDB4OUYzNywgMHg5RjM3LCAweDFFMTMsIDB4OUYzOCwgMHg5RjM4LCAweDU1Q0UsIDB4OUYzOSwgMHg5RjM5LCAweDFFMTIsCisgICAgMHg5RjNBLCAweDlGM0EsIDB4NTVDRiwgMHg5RjNCLCAweDlGM0IsIDB4MDQzMCwgMHg5RjNDLCAweDlGM0MsIDB4NTVEMCwKKyAgICAweDlGM0QsIDB4OUYzRSwgMHgxRTE0LCAweDlGM0YsIDB4OUY0MywgMHg1NUQxLCAweDlGNDQsIDB4OUY0NCwgMHgxRTE2LAorICAgIDB4OUY0NSwgMHg5RjQ5LCAweDU1RDYsIDB4OUY0QSwgMHg5RjRBLCAweDIwQzYsIDB4OUY0QiwgMHg5RjRCLCAweDIyNkIsCisgICAgMHg5RjRDLCAweDlGNEUsIDB4NTVEQiwgMHg5RjRGLCAweDlGNEYsIDB4MjREMywgMHg5RjUwLCAweDlGNTAsIDB4MEMwQSwKKyAgICAweDlGNTEsIDB4OUY1MSwgMHgxOUMyLCAweDlGNTIsIDB4OUY1MiwgMHgxRTg2LCAweDlGNTMsIDB4OUY1MywgMHg1NURFLAorICAgIDB4OUY1NCwgMHg5RjU0LCAweDI2MEYsIDB4OUY1NSwgMHg5RjU4LCAweDU1REYsIDB4OUY1OSwgMHg5RjU5LCAweDI2MTEsCisgICAgMHg5RjVBLCAweDlGNUIsIDB4NTVFMywgMHg5RjVDLCAweDlGNUMsIDB4MjYxMywgMHg5RjVELCAweDlGNUUsIDB4NTVFNSwKKyAgICAweDlGNUYsIDB4OUY1RiwgMHgyNjEwLCAweDlGNjAsIDB4OUY2MCwgMHgyNjEyLCAweDlGNjEsIDB4OUY2MSwgMHgyMDMwLAorICAgIDB4OUY2MiwgMHg5RjYyLCAweDU1RTcsIDB4OUY2MywgMHg5RjYzLCAweDI2NzEsIDB4OUY2NCwgMHg5RjY1LCAweDU1RTgsCisgICAgMHg5RjY2LCAweDlGNjYsIDB4MjYxNCwgMHg5RjY3LCAweDlGNjksIDB4NTVFQSwgMHg5RjZBLCAweDlGNkEsIDB4MjYxNiwKKyAgICAweDlGNkIsIDB4OUY2QiwgMHg1NUVELCAweDlGNkMsIDB4OUY2QywgMHgyNjE1LCAweDlGNkQsIDB4OUY3MSwgMHg1NUVFLAorICAgIDB4OUY3MiwgMHg5RjcyLCAweDIwRjIsIDB4OUY3MywgMHg5Rjc2LCAweDU1RjMsIDB4OUY3NywgMHg5Rjc3LCAweDI2MTcsCisgICAgMHg5Rjc4LCAweDlGN0UsIDB4NTVGNywgMHg5RjdGLCAweDlGN0YsIDB4MDUwMiwgMHg5RjgwLCAweDlGODAsIDB4MUQ2RCwKKyAgICAweDlGODEsIDB4OUY4MiwgMHg1NUZFLCAweDlGODMsIDB4OUY4MywgMHgxRDZFLCAweDlGODQsIDB4OUY4NCwgMHgwQTJELAorICAgIDB4OUY4NSwgMHg5RjhBLCAweDFENkYsIDB4OUY4QiwgMHg5RjhCLCAweDBDN0UsIDB4OUY4QywgMHg5RjhDLCAweDFENzUsCisgICAgMHg5RjhELCAweDlGOEQsIDB4MjAzNywgMHg5RjhFLCAweDlGOEYsIDB4NTYwMCwgMHg5RjkwLCAweDlGOTAsIDB4MjBCMywKKyAgICAweDlGOTEsIDB4OUY5MywgMHg1NjAyLCAweDlGOTQsIDB4OUY5NCwgMHgxRjIyLCAweDlGOTUsIDB4OUY5NSwgMHgyNEVELAorICAgIDB4OUY5NiwgMHg5Rjk4LCAweDU2MDUsIDB4OUY5OSwgMHg5Rjk5LCAweDBBNDMsIDB4OUY5QSwgMHg5RjlBLCAweDA3MDEsCisgICAgMHg5RjlCLCAweDlGOUIsIDB4MUE1NCwgMHg5RjlDLCAweDlGOUMsIDB4MUYzNCwgMHg5RjlELCAweDlGOUUsIDB4NTYwOCwKKyAgICAweDlGOUYsIDB4OUY5RiwgMHgwNzQzLCAweDlGQTAsIDB4OUZBMCwgMHgxMkYzLCAweDlGQTEsIDB4OUZBNSwgMHg1NjBBLAorICAgIDB4RTgxNiwgMHhFODE4LCAweDU2MjAsIDB4RTgxRSwgMHhFODFFLCAweDU2MjgsIDB4RTgyNiwgMHhFODI2LCAweDU2MzAsCisgICAgMHhFODJCLCAweEU4MkMsIDB4NTYzNSwgMHhFODMxLCAweEU4MzIsIDB4NTYzQiwgMHhFODNCLCAweEU4M0IsIDB4NTY0NSwKKyAgICAweEU4NDMsIDB4RTg0MywgMHg1NjRELCAweEU4NTQsIDB4RTg1NSwgMHg1NjVFLCAweEU4NjQsIDB4RTg2NCwgMHg1NjZFLAorICAgIDB4RjkyQywgMHhGOTJDLCAweDU2MEYsIDB4RkEwRCwgMHhGQTBGLCAweDU2MTAsIDB4RkExMSwgMHhGQTExLCAweDU2MTMsCisgICAgMHhGQTEzLCAweEZBMTQsIDB4NTYxNCwgMHhGQTE4LCAweEZBMTgsIDB4NTYxNiwgMHhGQTFGLCAweEZBMjEsIDB4NTYxNywKKyAgICAweEZBMjMsIDB4RkEyNCwgMHg1NjFBLCAweEZBMjcsIDB4RkEyOSwgMHg1NjFDLCAweEZFMzAsIDB4RkUzMCwgMHgyNzFELAorICAgIDB4RkU0OSwgMHhGRTUyLCAweDI3MkIsIDB4RkU1NCwgMHhGRTU3LCAweDI3MzUsIDB4RkU1OSwgMHhGRTY2LCAweDI3MzksCisgICAgMHhGRTY4LCAweEZFNkIsIDB4Mjc0NywgMHhGRjAxLCAweEZGMDMsIDB4MDEwNiwgMHhGRjA0LCAweEZGMDQsIDB4MDBBNiwKKyAgICAweEZGMDUsIDB4RkY1RCwgMHgwMTBBLCAweEZGNUUsIDB4RkY1RSwgMHgwMDZBLCAweEZGRTAsIDB4RkZFMSwgMHgwMEE4LAorICAgIDB4RkZFMiwgMHhGRkUyLCAweDI3MUUsIDB4RkZFMywgMHhGRkUzLCAweDAxNjMsIDB4RkZFNCwgMHhGRkU0LCAweDI3MUYsCisgICAgMHhGRkU1LCAweEZGRTUsIDB4MDEwOSwKK307CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvSmFwYW4xLzgzcHYtUktTSi1IXzEuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0phcGFuMS84M3B2LVJLU0otSF8xLmNwcAppbmRleCA5Mzk5ZTYzLi42YTg4NTM3IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvSmFwYW4xLzgzcHYtUktTSi1IXzEuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvODNwdi1SS1NKLUhfMS5jcHAKQEAgLTEsODIgKzEsODIgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLWV4dGVybiBjb25zdCB1bnNpZ25lZCBzaG9ydCBnX0ZYQ01BUF84M3B2X1JLU0pfSF8xWzIyMiAqIDNdID0gew0KLSAgICAweDAwMjAsIDB4MDA3RSwgMHgwMDAxLCAweDAwODAsIDB4MDA4MCwgMHgwMDYxLCAweDAwQTAsIDB4MDBERiwgMHgwMTQ2LA0KLSAgICAweDAwRkQsIDB4MDBGRCwgMHgwMDk4LCAweDAwRkUsIDB4MDBGRSwgMHgwMEU0LCAweDAwRkYsIDB4MDBGRiwgMHgwMDdDLA0KLSAgICAweDgxNDAsIDB4ODE3RSwgMHgwMjc5LCAweDgxODAsIDB4ODFBQywgMHgwMkI4LCAweDgxQjgsIDB4ODFCRiwgMHgwMkU1LA0KLSAgICAweDgxQzgsIDB4ODFDRSwgMHgwMkVELCAweDgxREEsIDB4ODFFOCwgMHgwMkY0LCAweDgxRjAsIDB4ODFGNywgMHgwMzAzLA0KLSAgICAweDgxRkMsIDB4ODFGQywgMHgwMzBCLCAweDgyNEYsIDB4ODI1OCwgMHgwMzBDLCAweDgyNjAsIDB4ODI3OSwgMHgwMzE2LA0KLSAgICAweDgyODEsIDB4ODI5QSwgMHgwMzMwLCAweDgyOUYsIDB4ODJGMSwgMHgwMzRBLCAweDgzNDAsIDB4ODM3RSwgMHgwMzlELA0KLSAgICAweDgzODAsIDB4ODM5NiwgMHgwM0RDLCAweDgzOUYsIDB4ODNCNiwgMHgwM0YzLCAweDgzQkYsIDB4ODNENiwgMHgwNDBCLA0KLSAgICAweDg0NDAsIDB4ODQ2MCwgMHgwNDIzLCAweDg0NzAsIDB4ODQ3RSwgMHgwNDQ0LCAweDg0ODAsIDB4ODQ5MSwgMHgwNDUzLA0KLSAgICAweDg0OUYsIDB4ODQ5RiwgMHgxRDM3LCAweDg0QTAsIDB4ODRBMCwgMHgxRDM5LCAweDg0QTEsIDB4ODRBMSwgMHgxRDQzLA0KLSAgICAweDg0QTIsIDB4ODRBMiwgMHgxRDQ3LCAweDg0QTMsIDB4ODRBMywgMHgxRDRGLCAweDg0QTQsIDB4ODRBNCwgMHgxRDRCLA0KLSAgICAweDg0QTUsIDB4ODRBNSwgMHgxRDUzLCAweDg0QTYsIDB4ODRBNiwgMHgxRDYzLCAweDg0QTcsIDB4ODRBNywgMHgxRDVCLA0KLSAgICAweDg0QTgsIDB4ODRBOCwgMHgxRDZCLCAweDg0QTksIDB4ODRBOSwgMHgxRDczLCAweDg0QUEsIDB4ODRBQSwgMHgxRDM4LA0KLSAgICAweDg0QUIsIDB4ODRBQiwgMHgxRDNBLCAweDg0QUMsIDB4ODRBQywgMHgxRDQ2LCAweDg0QUQsIDB4ODRBRCwgMHgxRDRBLA0KLSAgICAweDg0QUUsIDB4ODRBRSwgMHgxRDUyLCAweDg0QUYsIDB4ODRBRiwgMHgxRDRFLCAweDg0QjAsIDB4ODRCMCwgMHgxRDVBLA0KLSAgICAweDg0QjEsIDB4ODRCMSwgMHgxRDZBLCAweDg0QjIsIDB4ODRCMiwgMHgxRDYyLCAweDg0QjMsIDB4ODRCMywgMHgxRDcyLA0KLSAgICAweDg0QjQsIDB4ODRCNCwgMHgxRDgyLCAweDg0QjUsIDB4ODRCNSwgMHgxRDU3LCAweDg0QjYsIDB4ODRCNiwgMHgxRDY2LA0KLSAgICAweDg0QjcsIDB4ODRCNywgMHgxRDVGLCAweDg0QjgsIDB4ODRCOCwgMHgxRDZFLCAweDg0QjksIDB4ODRCOSwgMHgxRDc2LA0KLSAgICAweDg0QkEsIDB4ODRCQSwgMHgxRDU0LCAweDg0QkIsIDB4ODRCQiwgMHgxRDY3LCAweDg0QkMsIDB4ODRCQywgMHgxRDVDLA0KLSAgICAweDg0QkQsIDB4ODRCRCwgMHgxRDZGLCAweDg0QkUsIDB4ODRCRSwgMHgxRDc5LCAweDg1NDAsIDB4ODU3RSwgMHgwMEU4LA0KLSAgICAweDg1ODAsIDB4ODU4MCwgMHgwMTg2LCAweDg1ODEsIDB4ODU5RSwgMHgwMTI4LCAweDg1OUYsIDB4ODVERCwgMHgwMTQ3LA0KLSAgICAweDg1REUsIDB4ODVGQywgMHgwMTg3LCAweDg2NDAsIDB4ODY3RSwgMHgwMUE2LCAweDg2ODAsIDB4ODY5MSwgMHgwMUU1LA0KLSAgICAweDg2OTIsIDB4ODY5MiwgMHgwMTI3LCAweDg2OTMsIDB4ODY5RSwgMHgwMUY3LCAweDg2QTIsIDB4ODZFRCwgMHgxRDM3LA0KLSAgICAweDg3NDAsIDB4ODc1RCwgMHgxRDgzLCAweDg3NUYsIDB4ODc3NSwgMHgxREExLCAweDg3ODAsIDB4ODc4RiwgMHgxREI4LA0KLSAgICAweDg3OTAsIDB4ODc5MCwgMHgwMkZBLCAweDg3OTEsIDB4ODc5MSwgMHgwMkY5LCAweDg3OTIsIDB4ODc5MiwgMHgwMzAxLA0KLSAgICAweDg3OTMsIDB4ODc5OSwgMHgxREM4LCAweDg3OUEsIDB4ODc5QSwgMHgwMzAwLCAweDg3OUIsIDB4ODc5QywgMHgxRENGLA0KLSAgICAweDg4OUYsIDB4ODhGQywgMHgwNDY1LCAweDg5NDAsIDB4ODk3RSwgMHgwNEMzLCAweDg5ODAsIDB4ODlGQywgMHgwNTAyLA0KLSAgICAweDhBNDAsIDB4OEE3RSwgMHgwNTdGLCAweDhBODAsIDB4OEFGQywgMHgwNUJFLCAweDhCNDAsIDB4OEI3RSwgMHgwNjNCLA0KLSAgICAweDhCODAsIDB4OEJGQywgMHgwNjdBLCAweDhDNDAsIDB4OEM3RSwgMHgwNkY3LCAweDhDODAsIDB4OENGQywgMHgwNzM2LA0KLSAgICAweDhENDAsIDB4OEQ3RSwgMHgwN0IzLCAweDhEODAsIDB4OERGQywgMHgwN0YyLCAweDhFNDAsIDB4OEU3RSwgMHgwODZGLA0KLSAgICAweDhFODAsIDB4OEVGQywgMHgwOEFFLCAweDhGNDAsIDB4OEY3RSwgMHgwOTJCLCAweDhGODAsIDB4OEZGQywgMHgwOTZBLA0KLSAgICAweDkwNDAsIDB4OTA3RSwgMHgwOUU3LCAweDkwODAsIDB4OTBGQywgMHgwQTI2LCAweDkxNDAsIDB4OTE3RSwgMHgwQUEzLA0KLSAgICAweDkxODAsIDB4OTFGQywgMHgwQUUyLCAweDkyNDAsIDB4OTI3RSwgMHgwQjVGLCAweDkyODAsIDB4OTJGQywgMHgwQjlFLA0KLSAgICAweDkzNDAsIDB4OTM3RSwgMHgwQzFCLCAweDkzODAsIDB4OTNGQywgMHgwQzVBLCAweDk0NDAsIDB4OTQ3RSwgMHgwQ0Q3LA0KLSAgICAweDk0ODAsIDB4OTRGQywgMHgwRDE2LCAweDk1NDAsIDB4OTU3RSwgMHgwRDkzLCAweDk1ODAsIDB4OTVGQywgMHgwREQyLA0KLSAgICAweDk2NDAsIDB4OTY3RSwgMHgwRTRGLCAweDk2ODAsIDB4OTZGQywgMHgwRThFLCAweDk3NDAsIDB4OTc3RSwgMHgwRjBCLA0KLSAgICAweDk3ODAsIDB4OTdGQywgMHgwRjRBLCAweDk4NDAsIDB4OTg3MiwgMHgwRkM3LCAweDk4OUYsIDB4OThGQywgMHgwRkZBLA0KLSAgICAweDk5NDAsIDB4OTk3RSwgMHgxMDU4LCAweDk5ODAsIDB4OTlGQywgMHgxMDk3LCAweDlBNDAsIDB4OUE3RSwgMHgxMTE0LA0KLSAgICAweDlBODAsIDB4OUFGQywgMHgxMTUzLCAweDlCNDAsIDB4OUI3RSwgMHgxMUQwLCAweDlCODAsIDB4OUJGQywgMHgxMjBGLA0KLSAgICAweDlDNDAsIDB4OUM3RSwgMHgxMjhDLCAweDlDODAsIDB4OUNGQywgMHgxMkNCLCAweDlENDAsIDB4OUQ3RSwgMHgxMzQ4LA0KLSAgICAweDlEODAsIDB4OURGQywgMHgxMzg3LCAweDlFNDAsIDB4OUU3RSwgMHgxNDA0LCAweDlFODAsIDB4OUVGQywgMHgxNDQzLA0KLSAgICAweDlGNDAsIDB4OUY3RSwgMHgxNEMwLCAweDlGODAsIDB4OUZGQywgMHgxNEZGLCAweEUwNDAsIDB4RTA3RSwgMHgxNTdDLA0KLSAgICAweEUwODAsIDB4RTBGQywgMHgxNUJCLCAweEUxNDAsIDB4RTE3RSwgMHgxNjM4LCAweEUxODAsIDB4RTFGQywgMHgxNjc3LA0KLSAgICAweEUyNDAsIDB4RTI3RSwgMHgxNkY0LCAweEUyODAsIDB4RTJGQywgMHgxNzMzLCAweEUzNDAsIDB4RTM3RSwgMHgxN0IwLA0KLSAgICAweEUzODAsIDB4RTNGQywgMHgxN0VGLCAweEU0NDAsIDB4RTQ3RSwgMHgxODZDLCAweEU0ODAsIDB4RTRGQywgMHgxOEFCLA0KLSAgICAweEU1NDAsIDB4RTU3RSwgMHgxOTI4LCAweEU1ODAsIDB4RTVGQywgMHgxOTY3LCAweEU2NDAsIDB4RTY3RSwgMHgxOUU0LA0KLSAgICAweEU2ODAsIDB4RTZGQywgMHgxQTIzLCAweEU3NDAsIDB4RTc3RSwgMHgxQUEwLCAweEU3ODAsIDB4RTdGQywgMHgxQURGLA0KLSAgICAweEU4NDAsIDB4RTg3RSwgMHgxQjVDLCAweEU4ODAsIDB4RThGQywgMHgxQjlCLCAweEU5NDAsIDB4RTk3RSwgMHgxQzE4LA0KLSAgICAweEU5ODAsIDB4RTlGQywgMHgxQzU3LCAweEVBNDAsIDB4RUE3RSwgMHgxQ0Q0LCAweEVBODAsIDB4RUFBMiwgMHgxRDEzLA0KLSAgICAweEVBQTMsIDB4RUFBNCwgMHgyMDVDLCAweEVCNDAsIDB4RUI0MCwgMHgwMjc5LCAweEVCNDEsIDB4RUI0MiwgMHgxRUNGLA0KLSAgICAweEVCNDMsIDB4RUI0RiwgMHgwMjdDLCAweEVCNTAsIDB4RUI1MSwgMHgxRUQxLCAweEVCNTIsIDB4RUI1QSwgMHgwMjhCLA0KLSAgICAweEVCNUIsIDB4RUI1RCwgMHgxRUQzLCAweEVCNUUsIDB4RUI1RiwgMHgwMjk3LCAweEVCNjAsIDB4RUI2NCwgMHgxRUQ2LA0KLSAgICAweEVCNjUsIDB4RUI2OCwgMHgwMjlFLCAweEVCNjksIDB4RUI3QSwgMHgxRURCLCAweEVCN0IsIDB4RUI3RSwgMHgwMkI0LA0KLSAgICAweEVCODAsIDB4RUI4MCwgMHgwMkI4LCAweEVCODEsIDB4RUI4MSwgMHgxRUVELCAweEVCODIsIDB4RUJBQywgMHgwMkJBLA0KLSAgICAweEVCQjgsIDB4RUJCRiwgMHgwMkU1LCAweEVCQzgsIDB4RUJDRSwgMHgwMkVELCAweEVCREEsIDB4RUJFOCwgMHgwMkY0LA0KLSAgICAweEVCRjAsIDB4RUJGNywgMHgwMzAzLCAweEVCRkMsIDB4RUJGQywgMHgwMzBCLCAweEVDNEYsIDB4RUM1OCwgMHgwMzBDLA0KLSAgICAweEVDNjAsIDB4RUM3OSwgMHgwMzE2LCAweEVDODEsIDB4RUM5QSwgMHgwMzMwLCAweEVDOUYsIDB4RUM5RiwgMHgxRUVFLA0KLSAgICAweEVDQTAsIDB4RUNBMCwgMHgwMzRCLCAweEVDQTEsIDB4RUNBMSwgMHgxRUVGLCAweEVDQTIsIDB4RUNBMiwgMHgwMzRELA0KLSAgICAweEVDQTMsIDB4RUNBMywgMHgxRUYwLCAweEVDQTQsIDB4RUNBNCwgMHgwMzRGLCAweEVDQTUsIDB4RUNBNSwgMHgxRUYxLA0KLSAgICAweEVDQTYsIDB4RUNBNiwgMHgwMzUxLCAweEVDQTcsIDB4RUNBNywgMHgxRUYyLCAweEVDQTgsIDB4RUNDMCwgMHgwMzUzLA0KLSAgICAweEVDQzEsIDB4RUNDMSwgMHgxRUYzLCAweEVDQzIsIDB4RUNFMCwgMHgwMzZELCAweEVDRTEsIDB4RUNFMSwgMHgxRUY0LA0KLSAgICAweEVDRTIsIDB4RUNFMiwgMHgwMzhELCAweEVDRTMsIDB4RUNFMywgMHgxRUY1LCAweEVDRTQsIDB4RUNFNCwgMHgwMzhGLA0KLSAgICAweEVDRTUsIDB4RUNFNSwgMHgxRUY2LCAweEVDRTYsIDB4RUNFQiwgMHgwMzkxLCAweEVDRUMsIDB4RUNFQywgMHgxRUY3LA0KLSAgICAweEVDRUQsIDB4RUNGMSwgMHgwMzk4LCAweEVENDAsIDB4RUQ0MCwgMHgxRUY4LCAweEVENDEsIDB4RUQ0MSwgMHgwMzlFLA0KLSAgICAweEVENDIsIDB4RUQ0MiwgMHgxRUY5LCAweEVENDMsIDB4RUQ0MywgMHgwM0EwLCAweEVENDQsIDB4RUQ0NCwgMHgxRUZBLA0KLSAgICAweEVENDUsIDB4RUQ0NSwgMHgwM0EyLCAweEVENDYsIDB4RUQ0NiwgMHgxRUZCLCAweEVENDcsIDB4RUQ0NywgMHgwM0E0LA0KLSAgICAweEVENDgsIDB4RUQ0OCwgMHgxRUZDLCAweEVENDksIDB4RUQ2MSwgMHgwM0E2LCAweEVENjIsIDB4RUQ2MiwgMHgxRUZELA0KLSAgICAweEVENjMsIDB4RUQ3RSwgMHgwM0MwLCAweEVEODAsIDB4RUQ4MiwgMHgwM0RDLCAweEVEODMsIDB4RUQ4MywgMHgxRUZFLA0KLSAgICAweEVEODQsIDB4RUQ4NCwgMHgwM0UwLCAweEVEODUsIDB4RUQ4NSwgMHgxRUZGLCAweEVEODYsIDB4RUQ4NiwgMHgwM0UyLA0KLSAgICAweEVEODcsIDB4RUQ4NywgMHgxRjAwLCAweEVEODgsIDB4RUQ4RCwgMHgwM0U0LCAweEVEOEUsIDB4RUQ4RSwgMHgxRjAxLA0KLSAgICAweEVEOEYsIDB4RUQ5NCwgMHgwM0VCLCAweEVEOTUsIDB4RUQ5NiwgMHgxRjAyLCAweEVEOUYsIDB4RURCNiwgMHgwM0YzLA0KLSAgICAweEVEQkYsIDB4RURENiwgMHgwNDBCLCAweEVFNDAsIDB4RUU1RCwgMHgxRDgzLCAweEVFNUYsIDB4RUU2RSwgMHgxRjA0LA0KLSAgICAweEVFNkYsIDB4RUU3NSwgMHgxREIxLCAweEVFODAsIDB4RUU4MSwgMHgxRjE0LCAweEVFODIsIDB4RUU4RiwgMHgxREJBLA0KLSAgICAweEVFOTAsIDB4RUU5MCwgMHgwMkZBLCAweEVFOTEsIDB4RUU5MSwgMHgwMkY5LCAweEVFOTIsIDB4RUU5MiwgMHgwMzAxLA0KLSAgICAweEVFOTMsIDB4RUU5OSwgMHgxREM4LCAweEVFOUEsIDB4RUU5QSwgMHgwMzAwLCAweEVFOUIsIDB4RUU5QywgMHgxRENGLA0KLX07DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQXzgzcHZfUktTSl9IXzFbMjIyICogM10gPSB7CisgICAgMHgwMDIwLCAweDAwN0UsIDB4MDAwMSwgMHgwMDgwLCAweDAwODAsIDB4MDA2MSwgMHgwMEEwLCAweDAwREYsIDB4MDE0NiwKKyAgICAweDAwRkQsIDB4MDBGRCwgMHgwMDk4LCAweDAwRkUsIDB4MDBGRSwgMHgwMEU0LCAweDAwRkYsIDB4MDBGRiwgMHgwMDdDLAorICAgIDB4ODE0MCwgMHg4MTdFLCAweDAyNzksIDB4ODE4MCwgMHg4MUFDLCAweDAyQjgsIDB4ODFCOCwgMHg4MUJGLCAweDAyRTUsCisgICAgMHg4MUM4LCAweDgxQ0UsIDB4MDJFRCwgMHg4MURBLCAweDgxRTgsIDB4MDJGNCwgMHg4MUYwLCAweDgxRjcsIDB4MDMwMywKKyAgICAweDgxRkMsIDB4ODFGQywgMHgwMzBCLCAweDgyNEYsIDB4ODI1OCwgMHgwMzBDLCAweDgyNjAsIDB4ODI3OSwgMHgwMzE2LAorICAgIDB4ODI4MSwgMHg4MjlBLCAweDAzMzAsIDB4ODI5RiwgMHg4MkYxLCAweDAzNEEsIDB4ODM0MCwgMHg4MzdFLCAweDAzOUQsCisgICAgMHg4MzgwLCAweDgzOTYsIDB4MDNEQywgMHg4MzlGLCAweDgzQjYsIDB4MDNGMywgMHg4M0JGLCAweDgzRDYsIDB4MDQwQiwKKyAgICAweDg0NDAsIDB4ODQ2MCwgMHgwNDIzLCAweDg0NzAsIDB4ODQ3RSwgMHgwNDQ0LCAweDg0ODAsIDB4ODQ5MSwgMHgwNDUzLAorICAgIDB4ODQ5RiwgMHg4NDlGLCAweDFEMzcsIDB4ODRBMCwgMHg4NEEwLCAweDFEMzksIDB4ODRBMSwgMHg4NEExLCAweDFENDMsCisgICAgMHg4NEEyLCAweDg0QTIsIDB4MUQ0NywgMHg4NEEzLCAweDg0QTMsIDB4MUQ0RiwgMHg4NEE0LCAweDg0QTQsIDB4MUQ0QiwKKyAgICAweDg0QTUsIDB4ODRBNSwgMHgxRDUzLCAweDg0QTYsIDB4ODRBNiwgMHgxRDYzLCAweDg0QTcsIDB4ODRBNywgMHgxRDVCLAorICAgIDB4ODRBOCwgMHg4NEE4LCAweDFENkIsIDB4ODRBOSwgMHg4NEE5LCAweDFENzMsIDB4ODRBQSwgMHg4NEFBLCAweDFEMzgsCisgICAgMHg4NEFCLCAweDg0QUIsIDB4MUQzQSwgMHg4NEFDLCAweDg0QUMsIDB4MUQ0NiwgMHg4NEFELCAweDg0QUQsIDB4MUQ0QSwKKyAgICAweDg0QUUsIDB4ODRBRSwgMHgxRDUyLCAweDg0QUYsIDB4ODRBRiwgMHgxRDRFLCAweDg0QjAsIDB4ODRCMCwgMHgxRDVBLAorICAgIDB4ODRCMSwgMHg4NEIxLCAweDFENkEsIDB4ODRCMiwgMHg4NEIyLCAweDFENjIsIDB4ODRCMywgMHg4NEIzLCAweDFENzIsCisgICAgMHg4NEI0LCAweDg0QjQsIDB4MUQ4MiwgMHg4NEI1LCAweDg0QjUsIDB4MUQ1NywgMHg4NEI2LCAweDg0QjYsIDB4MUQ2NiwKKyAgICAweDg0QjcsIDB4ODRCNywgMHgxRDVGLCAweDg0QjgsIDB4ODRCOCwgMHgxRDZFLCAweDg0QjksIDB4ODRCOSwgMHgxRDc2LAorICAgIDB4ODRCQSwgMHg4NEJBLCAweDFENTQsIDB4ODRCQiwgMHg4NEJCLCAweDFENjcsIDB4ODRCQywgMHg4NEJDLCAweDFENUMsCisgICAgMHg4NEJELCAweDg0QkQsIDB4MUQ2RiwgMHg4NEJFLCAweDg0QkUsIDB4MUQ3OSwgMHg4NTQwLCAweDg1N0UsIDB4MDBFOCwKKyAgICAweDg1ODAsIDB4ODU4MCwgMHgwMTg2LCAweDg1ODEsIDB4ODU5RSwgMHgwMTI4LCAweDg1OUYsIDB4ODVERCwgMHgwMTQ3LAorICAgIDB4ODVERSwgMHg4NUZDLCAweDAxODcsIDB4ODY0MCwgMHg4NjdFLCAweDAxQTYsIDB4ODY4MCwgMHg4NjkxLCAweDAxRTUsCisgICAgMHg4NjkyLCAweDg2OTIsIDB4MDEyNywgMHg4NjkzLCAweDg2OUUsIDB4MDFGNywgMHg4NkEyLCAweDg2RUQsIDB4MUQzNywKKyAgICAweDg3NDAsIDB4ODc1RCwgMHgxRDgzLCAweDg3NUYsIDB4ODc3NSwgMHgxREExLCAweDg3ODAsIDB4ODc4RiwgMHgxREI4LAorICAgIDB4ODc5MCwgMHg4NzkwLCAweDAyRkEsIDB4ODc5MSwgMHg4NzkxLCAweDAyRjksIDB4ODc5MiwgMHg4NzkyLCAweDAzMDEsCisgICAgMHg4NzkzLCAweDg3OTksIDB4MURDOCwgMHg4NzlBLCAweDg3OUEsIDB4MDMwMCwgMHg4NzlCLCAweDg3OUMsIDB4MURDRiwKKyAgICAweDg4OUYsIDB4ODhGQywgMHgwNDY1LCAweDg5NDAsIDB4ODk3RSwgMHgwNEMzLCAweDg5ODAsIDB4ODlGQywgMHgwNTAyLAorICAgIDB4OEE0MCwgMHg4QTdFLCAweDA1N0YsIDB4OEE4MCwgMHg4QUZDLCAweDA1QkUsIDB4OEI0MCwgMHg4QjdFLCAweDA2M0IsCisgICAgMHg4QjgwLCAweDhCRkMsIDB4MDY3QSwgMHg4QzQwLCAweDhDN0UsIDB4MDZGNywgMHg4QzgwLCAweDhDRkMsIDB4MDczNiwKKyAgICAweDhENDAsIDB4OEQ3RSwgMHgwN0IzLCAweDhEODAsIDB4OERGQywgMHgwN0YyLCAweDhFNDAsIDB4OEU3RSwgMHgwODZGLAorICAgIDB4OEU4MCwgMHg4RUZDLCAweDA4QUUsIDB4OEY0MCwgMHg4RjdFLCAweDA5MkIsIDB4OEY4MCwgMHg4RkZDLCAweDA5NkEsCisgICAgMHg5MDQwLCAweDkwN0UsIDB4MDlFNywgMHg5MDgwLCAweDkwRkMsIDB4MEEyNiwgMHg5MTQwLCAweDkxN0UsIDB4MEFBMywKKyAgICAweDkxODAsIDB4OTFGQywgMHgwQUUyLCAweDkyNDAsIDB4OTI3RSwgMHgwQjVGLCAweDkyODAsIDB4OTJGQywgMHgwQjlFLAorICAgIDB4OTM0MCwgMHg5MzdFLCAweDBDMUIsIDB4OTM4MCwgMHg5M0ZDLCAweDBDNUEsIDB4OTQ0MCwgMHg5NDdFLCAweDBDRDcsCisgICAgMHg5NDgwLCAweDk0RkMsIDB4MEQxNiwgMHg5NTQwLCAweDk1N0UsIDB4MEQ5MywgMHg5NTgwLCAweDk1RkMsIDB4MEREMiwKKyAgICAweDk2NDAsIDB4OTY3RSwgMHgwRTRGLCAweDk2ODAsIDB4OTZGQywgMHgwRThFLCAweDk3NDAsIDB4OTc3RSwgMHgwRjBCLAorICAgIDB4OTc4MCwgMHg5N0ZDLCAweDBGNEEsIDB4OTg0MCwgMHg5ODcyLCAweDBGQzcsIDB4OTg5RiwgMHg5OEZDLCAweDBGRkEsCisgICAgMHg5OTQwLCAweDk5N0UsIDB4MTA1OCwgMHg5OTgwLCAweDk5RkMsIDB4MTA5NywgMHg5QTQwLCAweDlBN0UsIDB4MTExNCwKKyAgICAweDlBODAsIDB4OUFGQywgMHgxMTUzLCAweDlCNDAsIDB4OUI3RSwgMHgxMUQwLCAweDlCODAsIDB4OUJGQywgMHgxMjBGLAorICAgIDB4OUM0MCwgMHg5QzdFLCAweDEyOEMsIDB4OUM4MCwgMHg5Q0ZDLCAweDEyQ0IsIDB4OUQ0MCwgMHg5RDdFLCAweDEzNDgsCisgICAgMHg5RDgwLCAweDlERkMsIDB4MTM4NywgMHg5RTQwLCAweDlFN0UsIDB4MTQwNCwgMHg5RTgwLCAweDlFRkMsIDB4MTQ0MywKKyAgICAweDlGNDAsIDB4OUY3RSwgMHgxNEMwLCAweDlGODAsIDB4OUZGQywgMHgxNEZGLCAweEUwNDAsIDB4RTA3RSwgMHgxNTdDLAorICAgIDB4RTA4MCwgMHhFMEZDLCAweDE1QkIsIDB4RTE0MCwgMHhFMTdFLCAweDE2MzgsIDB4RTE4MCwgMHhFMUZDLCAweDE2NzcsCisgICAgMHhFMjQwLCAweEUyN0UsIDB4MTZGNCwgMHhFMjgwLCAweEUyRkMsIDB4MTczMywgMHhFMzQwLCAweEUzN0UsIDB4MTdCMCwKKyAgICAweEUzODAsIDB4RTNGQywgMHgxN0VGLCAweEU0NDAsIDB4RTQ3RSwgMHgxODZDLCAweEU0ODAsIDB4RTRGQywgMHgxOEFCLAorICAgIDB4RTU0MCwgMHhFNTdFLCAweDE5MjgsIDB4RTU4MCwgMHhFNUZDLCAweDE5NjcsIDB4RTY0MCwgMHhFNjdFLCAweDE5RTQsCisgICAgMHhFNjgwLCAweEU2RkMsIDB4MUEyMywgMHhFNzQwLCAweEU3N0UsIDB4MUFBMCwgMHhFNzgwLCAweEU3RkMsIDB4MUFERiwKKyAgICAweEU4NDAsIDB4RTg3RSwgMHgxQjVDLCAweEU4ODAsIDB4RThGQywgMHgxQjlCLCAweEU5NDAsIDB4RTk3RSwgMHgxQzE4LAorICAgIDB4RTk4MCwgMHhFOUZDLCAweDFDNTcsIDB4RUE0MCwgMHhFQTdFLCAweDFDRDQsIDB4RUE4MCwgMHhFQUEyLCAweDFEMTMsCisgICAgMHhFQUEzLCAweEVBQTQsIDB4MjA1QywgMHhFQjQwLCAweEVCNDAsIDB4MDI3OSwgMHhFQjQxLCAweEVCNDIsIDB4MUVDRiwKKyAgICAweEVCNDMsIDB4RUI0RiwgMHgwMjdDLCAweEVCNTAsIDB4RUI1MSwgMHgxRUQxLCAweEVCNTIsIDB4RUI1QSwgMHgwMjhCLAorICAgIDB4RUI1QiwgMHhFQjVELCAweDFFRDMsIDB4RUI1RSwgMHhFQjVGLCAweDAyOTcsIDB4RUI2MCwgMHhFQjY0LCAweDFFRDYsCisgICAgMHhFQjY1LCAweEVCNjgsIDB4MDI5RSwgMHhFQjY5LCAweEVCN0EsIDB4MUVEQiwgMHhFQjdCLCAweEVCN0UsIDB4MDJCNCwKKyAgICAweEVCODAsIDB4RUI4MCwgMHgwMkI4LCAweEVCODEsIDB4RUI4MSwgMHgxRUVELCAweEVCODIsIDB4RUJBQywgMHgwMkJBLAorICAgIDB4RUJCOCwgMHhFQkJGLCAweDAyRTUsIDB4RUJDOCwgMHhFQkNFLCAweDAyRUQsIDB4RUJEQSwgMHhFQkU4LCAweDAyRjQsCisgICAgMHhFQkYwLCAweEVCRjcsIDB4MDMwMywgMHhFQkZDLCAweEVCRkMsIDB4MDMwQiwgMHhFQzRGLCAweEVDNTgsIDB4MDMwQywKKyAgICAweEVDNjAsIDB4RUM3OSwgMHgwMzE2LCAweEVDODEsIDB4RUM5QSwgMHgwMzMwLCAweEVDOUYsIDB4RUM5RiwgMHgxRUVFLAorICAgIDB4RUNBMCwgMHhFQ0EwLCAweDAzNEIsIDB4RUNBMSwgMHhFQ0ExLCAweDFFRUYsIDB4RUNBMiwgMHhFQ0EyLCAweDAzNEQsCisgICAgMHhFQ0EzLCAweEVDQTMsIDB4MUVGMCwgMHhFQ0E0LCAweEVDQTQsIDB4MDM0RiwgMHhFQ0E1LCAweEVDQTUsIDB4MUVGMSwKKyAgICAweEVDQTYsIDB4RUNBNiwgMHgwMzUxLCAweEVDQTcsIDB4RUNBNywgMHgxRUYyLCAweEVDQTgsIDB4RUNDMCwgMHgwMzUzLAorICAgIDB4RUNDMSwgMHhFQ0MxLCAweDFFRjMsIDB4RUNDMiwgMHhFQ0UwLCAweDAzNkQsIDB4RUNFMSwgMHhFQ0UxLCAweDFFRjQsCisgICAgMHhFQ0UyLCAweEVDRTIsIDB4MDM4RCwgMHhFQ0UzLCAweEVDRTMsIDB4MUVGNSwgMHhFQ0U0LCAweEVDRTQsIDB4MDM4RiwKKyAgICAweEVDRTUsIDB4RUNFNSwgMHgxRUY2LCAweEVDRTYsIDB4RUNFQiwgMHgwMzkxLCAweEVDRUMsIDB4RUNFQywgMHgxRUY3LAorICAgIDB4RUNFRCwgMHhFQ0YxLCAweDAzOTgsIDB4RUQ0MCwgMHhFRDQwLCAweDFFRjgsIDB4RUQ0MSwgMHhFRDQxLCAweDAzOUUsCisgICAgMHhFRDQyLCAweEVENDIsIDB4MUVGOSwgMHhFRDQzLCAweEVENDMsIDB4MDNBMCwgMHhFRDQ0LCAweEVENDQsIDB4MUVGQSwKKyAgICAweEVENDUsIDB4RUQ0NSwgMHgwM0EyLCAweEVENDYsIDB4RUQ0NiwgMHgxRUZCLCAweEVENDcsIDB4RUQ0NywgMHgwM0E0LAorICAgIDB4RUQ0OCwgMHhFRDQ4LCAweDFFRkMsIDB4RUQ0OSwgMHhFRDYxLCAweDAzQTYsIDB4RUQ2MiwgMHhFRDYyLCAweDFFRkQsCisgICAgMHhFRDYzLCAweEVEN0UsIDB4MDNDMCwgMHhFRDgwLCAweEVEODIsIDB4MDNEQywgMHhFRDgzLCAweEVEODMsIDB4MUVGRSwKKyAgICAweEVEODQsIDB4RUQ4NCwgMHgwM0UwLCAweEVEODUsIDB4RUQ4NSwgMHgxRUZGLCAweEVEODYsIDB4RUQ4NiwgMHgwM0UyLAorICAgIDB4RUQ4NywgMHhFRDg3LCAweDFGMDAsIDB4RUQ4OCwgMHhFRDhELCAweDAzRTQsIDB4RUQ4RSwgMHhFRDhFLCAweDFGMDEsCisgICAgMHhFRDhGLCAweEVEOTQsIDB4MDNFQiwgMHhFRDk1LCAweEVEOTYsIDB4MUYwMiwgMHhFRDlGLCAweEVEQjYsIDB4MDNGMywKKyAgICAweEVEQkYsIDB4RURENiwgMHgwNDBCLCAweEVFNDAsIDB4RUU1RCwgMHgxRDgzLCAweEVFNUYsIDB4RUU2RSwgMHgxRjA0LAorICAgIDB4RUU2RiwgMHhFRTc1LCAweDFEQjEsIDB4RUU4MCwgMHhFRTgxLCAweDFGMTQsIDB4RUU4MiwgMHhFRThGLCAweDFEQkEsCisgICAgMHhFRTkwLCAweEVFOTAsIDB4MDJGQSwgMHhFRTkxLCAweEVFOTEsIDB4MDJGOSwgMHhFRTkyLCAweEVFOTIsIDB4MDMwMSwKKyAgICAweEVFOTMsIDB4RUU5OSwgMHgxREM4LCAweEVFOUEsIDB4RUU5QSwgMHgwMzAwLCAweEVFOUIsIDB4RUU5QywgMHgxRENGLAorfTsKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvOTBtcy1SS1NKLUhfMi5jcHAgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvSmFwYW4xLzkwbXMtUktTSi1IXzIuY3BwCmluZGV4IGY0MWNhNjIuLjFiYzMxZDggMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvOTBtcy1SS1NKLUhfMi5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0phcGFuMS85MG1zLVJLU0otSF8yLmNwcApAQCAtMSw2NSArMSw2NSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQXzkwbXNfUktTSl9IXzJbMTcxICogM10gPSB7DQotICAgIDB4MDAyMCwgMHgwMDdELCAweDAwRTcsIDB4MDA3RSwgMHgwMDdFLCAweDAyNzcsIDB4MDBBMCwgMHgwMERGLCAweDAxNDYsDQotICAgIDB4ODE0MCwgMHg4MTdFLCAweDAyNzksIDB4ODE4MCwgMHg4MUFDLCAweDAyQjgsIDB4ODFCOCwgMHg4MUJGLCAweDAyRTUsDQotICAgIDB4ODFDOCwgMHg4MUNFLCAweDAyRUQsIDB4ODFEQSwgMHg4MUU4LCAweDAyRjQsIDB4ODFGMCwgMHg4MUY3LCAweDAzMDMsDQotICAgIDB4ODFGQywgMHg4MUZDLCAweDAzMEIsIDB4ODI0RiwgMHg4MjU4LCAweDAzMEMsIDB4ODI2MCwgMHg4Mjc5LCAweDAzMTYsDQotICAgIDB4ODI4MSwgMHg4MjlBLCAweDAzMzAsIDB4ODI5RiwgMHg4MkYxLCAweDAzNEEsIDB4ODM0MCwgMHg4MzdFLCAweDAzOUQsDQotICAgIDB4ODM4MCwgMHg4Mzk2LCAweDAzREMsIDB4ODM5RiwgMHg4M0I2LCAweDAzRjMsIDB4ODNCRiwgMHg4M0Q2LCAweDA0MEIsDQotICAgIDB4ODQ0MCwgMHg4NDYwLCAweDA0MjMsIDB4ODQ3MCwgMHg4NDdFLCAweDA0NDQsIDB4ODQ4MCwgMHg4NDkxLCAweDA0NTMsDQotICAgIDB4ODQ5RiwgMHg4NDlGLCAweDFEMzcsIDB4ODRBMCwgMHg4NEEwLCAweDFEMzksIDB4ODRBMSwgMHg4NEExLCAweDFENDMsDQotICAgIDB4ODRBMiwgMHg4NEEyLCAweDFENDcsIDB4ODRBMywgMHg4NEEzLCAweDFENEYsIDB4ODRBNCwgMHg4NEE0LCAweDFENEIsDQotICAgIDB4ODRBNSwgMHg4NEE1LCAweDFENTMsIDB4ODRBNiwgMHg4NEE2LCAweDFENjMsIDB4ODRBNywgMHg4NEE3LCAweDFENUIsDQotICAgIDB4ODRBOCwgMHg4NEE4LCAweDFENkIsIDB4ODRBOSwgMHg4NEE5LCAweDFENzMsIDB4ODRBQSwgMHg4NEFBLCAweDFEMzgsDQotICAgIDB4ODRBQiwgMHg4NEFCLCAweDFEM0EsIDB4ODRBQywgMHg4NEFDLCAweDFENDYsIDB4ODRBRCwgMHg4NEFELCAweDFENEEsDQotICAgIDB4ODRBRSwgMHg4NEFFLCAweDFENTIsIDB4ODRBRiwgMHg4NEFGLCAweDFENEUsIDB4ODRCMCwgMHg4NEIwLCAweDFENUEsDQotICAgIDB4ODRCMSwgMHg4NEIxLCAweDFENkEsIDB4ODRCMiwgMHg4NEIyLCAweDFENjIsIDB4ODRCMywgMHg4NEIzLCAweDFENzIsDQotICAgIDB4ODRCNCwgMHg4NEI0LCAweDFEODIsIDB4ODRCNSwgMHg4NEI1LCAweDFENTcsIDB4ODRCNiwgMHg4NEI2LCAweDFENjYsDQotICAgIDB4ODRCNywgMHg4NEI3LCAweDFENUYsIDB4ODRCOCwgMHg4NEI4LCAweDFENkUsIDB4ODRCOSwgMHg4NEI5LCAweDFENzYsDQotICAgIDB4ODRCQSwgMHg4NEJBLCAweDFENTQsIDB4ODRCQiwgMHg4NEJCLCAweDFENjcsIDB4ODRCQywgMHg4NEJDLCAweDFENUMsDQotICAgIDB4ODRCRCwgMHg4NEJELCAweDFENkYsIDB4ODRCRSwgMHg4NEJFLCAweDFENzksIDB4ODc0MCwgMHg4NzVELCAweDFEODMsDQotICAgIDB4ODc1RiwgMHg4NzYwLCAweDFEQTEsIDB4ODc2MSwgMHg4NzYxLCAweDFGNjYsIDB4ODc2MiwgMHg4NzYyLCAweDFEQTQsDQotICAgIDB4ODc2MywgMHg4NzYzLCAweDFGNjgsIDB4ODc2NCwgMHg4NzY0LCAweDFEQTYsIDB4ODc2NSwgMHg4NzY1LCAweDFGNkEsDQotICAgIDB4ODc2NiwgMHg4NzY3LCAweDFEQTgsIDB4ODc2OCwgMHg4NzY4LCAweDFGNkMsIDB4ODc2OSwgMHg4NzZBLCAweDFEQUIsDQotICAgIDB4ODc2QiwgMHg4NzZCLCAweDFGNkIsIDB4ODc2QywgMHg4NzZELCAweDFEQUUsIDB4ODc2RSwgMHg4NzZFLCAweDFGNkYsDQotICAgIDB4ODc2RiwgMHg4Nzc1LCAweDFEQjEsIDB4ODc3RSwgMHg4NzdFLCAweDIwODMsIDB4ODc4MCwgMHg4NzgzLCAweDFEQjgsDQotICAgIDB4ODc4NCwgMHg4Nzg0LCAweDFGNzcsIDB4ODc4NSwgMHg4NzhGLCAweDFEQkQsIDB4ODc5MCwgMHg4NzkwLCAweDAyRkEsDQotICAgIDB4ODc5MSwgMHg4NzkxLCAweDAyRjksIDB4ODc5MiwgMHg4NzkyLCAweDAzMDEsIDB4ODc5MywgMHg4Nzk5LCAweDFEQzgsDQotICAgIDB4ODc5QSwgMHg4NzlBLCAweDAzMDAsIDB4ODc5QiwgMHg4NzlDLCAweDFEQ0YsIDB4ODg5RiwgMHg4OEZDLCAweDA0NjUsDQotICAgIDB4ODk0MCwgMHg4OTdFLCAweDA0QzMsIDB4ODk4MCwgMHg4OUZDLCAweDA1MDIsIDB4OEE0MCwgMHg4QTdFLCAweDA1N0YsDQotICAgIDB4OEE4MCwgMHg4QUZDLCAweDA1QkUsIDB4OEI0MCwgMHg4QjdFLCAweDA2M0IsIDB4OEI4MCwgMHg4QkZDLCAweDA2N0EsDQotICAgIDB4OEM0MCwgMHg4QzdFLCAweDA2RjcsIDB4OEM4MCwgMHg4Q0ZDLCAweDA3MzYsIDB4OEQ0MCwgMHg4RDdFLCAweDA3QjMsDQotICAgIDB4OEQ4MCwgMHg4REZDLCAweDA3RjIsIDB4OEU0MCwgMHg4RTdFLCAweDA4NkYsIDB4OEU4MCwgMHg4RUZDLCAweDA4QUUsDQotICAgIDB4OEY0MCwgMHg4RjdFLCAweDA5MkIsIDB4OEY4MCwgMHg4RkZDLCAweDA5NkEsIDB4OTA0MCwgMHg5MDdFLCAweDA5RTcsDQotICAgIDB4OTA4MCwgMHg5MEZDLCAweDBBMjYsIDB4OTE0MCwgMHg5MTdFLCAweDBBQTMsIDB4OTE4MCwgMHg5MUZDLCAweDBBRTIsDQotICAgIDB4OTI0MCwgMHg5MjdFLCAweDBCNUYsIDB4OTI4MCwgMHg5MkZDLCAweDBCOUUsIDB4OTM0MCwgMHg5MzdFLCAweDBDMUIsDQotICAgIDB4OTM4MCwgMHg5M0ZDLCAweDBDNUEsIDB4OTQ0MCwgMHg5NDdFLCAweDBDRDcsIDB4OTQ4MCwgMHg5NEZDLCAweDBEMTYsDQotICAgIDB4OTU0MCwgMHg5NTdFLCAweDBEOTMsIDB4OTU4MCwgMHg5NUZDLCAweDBERDIsIDB4OTY0MCwgMHg5NjdFLCAweDBFNEYsDQotICAgIDB4OTY4MCwgMHg5NkZDLCAweDBFOEUsIDB4OTc0MCwgMHg5NzdFLCAweDBGMEIsIDB4OTc4MCwgMHg5N0ZDLCAweDBGNEEsDQotICAgIDB4OTg0MCwgMHg5ODcyLCAweDBGQzcsIDB4OTg5RiwgMHg5OEZDLCAweDBGRkEsIDB4OTk0MCwgMHg5OTdFLCAweDEwNTgsDQotICAgIDB4OTk4MCwgMHg5OUZDLCAweDEwOTcsIDB4OUE0MCwgMHg5QTdFLCAweDExMTQsIDB4OUE4MCwgMHg5QUZDLCAweDExNTMsDQotICAgIDB4OUI0MCwgMHg5QjdFLCAweDExRDAsIDB4OUI4MCwgMHg5QkZDLCAweDEyMEYsIDB4OUM0MCwgMHg5QzdFLCAweDEyOEMsDQotICAgIDB4OUM4MCwgMHg5Q0ZDLCAweDEyQ0IsIDB4OUQ0MCwgMHg5RDdFLCAweDEzNDgsIDB4OUQ4MCwgMHg5REZDLCAweDEzODcsDQotICAgIDB4OUU0MCwgMHg5RTdFLCAweDE0MDQsIDB4OUU4MCwgMHg5RUZDLCAweDE0NDMsIDB4OUY0MCwgMHg5RjdFLCAweDE0QzAsDQotICAgIDB4OUY4MCwgMHg5RkZDLCAweDE0RkYsIDB4RTA0MCwgMHhFMDdFLCAweDE1N0MsIDB4RTA4MCwgMHhFMEZDLCAweDE1QkIsDQotICAgIDB4RTE0MCwgMHhFMTdFLCAweDE2MzgsIDB4RTE4MCwgMHhFMUZDLCAweDE2NzcsIDB4RTI0MCwgMHhFMjdFLCAweDE2RjQsDQotICAgIDB4RTI4MCwgMHhFMkZDLCAweDE3MzMsIDB4RTM0MCwgMHhFMzdFLCAweDE3QjAsIDB4RTM4MCwgMHhFM0ZDLCAweDE3RUYsDQotICAgIDB4RTQ0MCwgMHhFNDdFLCAweDE4NkMsIDB4RTQ4MCwgMHhFNEZDLCAweDE4QUIsIDB4RTU0MCwgMHhFNTdFLCAweDE5MjgsDQotICAgIDB4RTU4MCwgMHhFNUZDLCAweDE5NjcsIDB4RTY0MCwgMHhFNjdFLCAweDE5RTQsIDB4RTY4MCwgMHhFNkZDLCAweDFBMjMsDQotICAgIDB4RTc0MCwgMHhFNzdFLCAweDFBQTAsIDB4RTc4MCwgMHhFN0ZDLCAweDFBREYsIDB4RTg0MCwgMHhFODdFLCAweDFCNUMsDQotICAgIDB4RTg4MCwgMHhFOEZDLCAweDFCOUIsIDB4RTk0MCwgMHhFOTdFLCAweDFDMTgsIDB4RTk4MCwgMHhFOUZDLCAweDFDNTcsDQotICAgIDB4RUE0MCwgMHhFQTdFLCAweDFDRDQsIDB4RUE4MCwgMHhFQUEyLCAweDFEMTMsIDB4RUFBMywgMHhFQUE0LCAweDIwNUMsDQotICAgIDB4RUQ0MCwgMHhFRDdFLCAweDIwQTcsIDB4RUQ4MCwgMHhFREIzLCAweDIwRTYsIDB4RURCNCwgMHhFREI0LCAweDA3QzksDQotICAgIDB4RURCNSwgMHhFREZDLCAweDIxMUEsIDB4RUU0MCwgMHhFRTdFLCAweDIxNjIsIDB4RUU4MCwgMHhFRUVDLCAweDIxQTEsDQotICAgIDB4RUVFRiwgMHhFRUY4LCAweDFGOUMsIDB4RUVGOSwgMHhFRUY5LCAweDAyRUYsIDB4RUVGQSwgMHhFRUZDLCAweDFGNDUsDQotICAgIDB4RkE0MCwgMHhGQTQ5LCAweDFGOUMsIDB4RkE0QSwgMHhGQTUzLCAweDFEOTcsIDB4RkE1NCwgMHhGQTU0LCAweDAyRUYsDQotICAgIDB4RkE1NSwgMHhGQTU3LCAweDFGNDUsIDB4RkE1OCwgMHhGQTU4LCAweDFEQzIsIDB4RkE1OSwgMHhGQTU5LCAweDFEQkEsDQotICAgIDB4RkE1QSwgMHhGQTVBLCAweDFGNzcsIDB4RkE1QiwgMHhGQTVCLCAweDAzMDAsIDB4RkE1QywgMHhGQTdFLCAweDIwQTcsDQotICAgIDB4RkE4MCwgMHhGQUNGLCAweDIwQ0EsIDB4RkFEMCwgMHhGQUQwLCAweDA3QzksIDB4RkFEMSwgMHhGQUZDLCAweDIxMUEsDQotICAgIDB4RkI0MCwgMHhGQjdFLCAweDIxNDYsIDB4RkI4MCwgMHhGQkZDLCAweDIxODUsIDB4RkM0MCwgMHhGQzRCLCAweDIyMDIsDQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfOTBtc19SS1NKX0hfMlsxNzEgKiAzXSA9IHsKKyAgICAweDAwMjAsIDB4MDA3RCwgMHgwMEU3LCAweDAwN0UsIDB4MDA3RSwgMHgwMjc3LCAweDAwQTAsIDB4MDBERiwgMHgwMTQ2LAorICAgIDB4ODE0MCwgMHg4MTdFLCAweDAyNzksIDB4ODE4MCwgMHg4MUFDLCAweDAyQjgsIDB4ODFCOCwgMHg4MUJGLCAweDAyRTUsCisgICAgMHg4MUM4LCAweDgxQ0UsIDB4MDJFRCwgMHg4MURBLCAweDgxRTgsIDB4MDJGNCwgMHg4MUYwLCAweDgxRjcsIDB4MDMwMywKKyAgICAweDgxRkMsIDB4ODFGQywgMHgwMzBCLCAweDgyNEYsIDB4ODI1OCwgMHgwMzBDLCAweDgyNjAsIDB4ODI3OSwgMHgwMzE2LAorICAgIDB4ODI4MSwgMHg4MjlBLCAweDAzMzAsIDB4ODI5RiwgMHg4MkYxLCAweDAzNEEsIDB4ODM0MCwgMHg4MzdFLCAweDAzOUQsCisgICAgMHg4MzgwLCAweDgzOTYsIDB4MDNEQywgMHg4MzlGLCAweDgzQjYsIDB4MDNGMywgMHg4M0JGLCAweDgzRDYsIDB4MDQwQiwKKyAgICAweDg0NDAsIDB4ODQ2MCwgMHgwNDIzLCAweDg0NzAsIDB4ODQ3RSwgMHgwNDQ0LCAweDg0ODAsIDB4ODQ5MSwgMHgwNDUzLAorICAgIDB4ODQ5RiwgMHg4NDlGLCAweDFEMzcsIDB4ODRBMCwgMHg4NEEwLCAweDFEMzksIDB4ODRBMSwgMHg4NEExLCAweDFENDMsCisgICAgMHg4NEEyLCAweDg0QTIsIDB4MUQ0NywgMHg4NEEzLCAweDg0QTMsIDB4MUQ0RiwgMHg4NEE0LCAweDg0QTQsIDB4MUQ0QiwKKyAgICAweDg0QTUsIDB4ODRBNSwgMHgxRDUzLCAweDg0QTYsIDB4ODRBNiwgMHgxRDYzLCAweDg0QTcsIDB4ODRBNywgMHgxRDVCLAorICAgIDB4ODRBOCwgMHg4NEE4LCAweDFENkIsIDB4ODRBOSwgMHg4NEE5LCAweDFENzMsIDB4ODRBQSwgMHg4NEFBLCAweDFEMzgsCisgICAgMHg4NEFCLCAweDg0QUIsIDB4MUQzQSwgMHg4NEFDLCAweDg0QUMsIDB4MUQ0NiwgMHg4NEFELCAweDg0QUQsIDB4MUQ0QSwKKyAgICAweDg0QUUsIDB4ODRBRSwgMHgxRDUyLCAweDg0QUYsIDB4ODRBRiwgMHgxRDRFLCAweDg0QjAsIDB4ODRCMCwgMHgxRDVBLAorICAgIDB4ODRCMSwgMHg4NEIxLCAweDFENkEsIDB4ODRCMiwgMHg4NEIyLCAweDFENjIsIDB4ODRCMywgMHg4NEIzLCAweDFENzIsCisgICAgMHg4NEI0LCAweDg0QjQsIDB4MUQ4MiwgMHg4NEI1LCAweDg0QjUsIDB4MUQ1NywgMHg4NEI2LCAweDg0QjYsIDB4MUQ2NiwKKyAgICAweDg0QjcsIDB4ODRCNywgMHgxRDVGLCAweDg0QjgsIDB4ODRCOCwgMHgxRDZFLCAweDg0QjksIDB4ODRCOSwgMHgxRDc2LAorICAgIDB4ODRCQSwgMHg4NEJBLCAweDFENTQsIDB4ODRCQiwgMHg4NEJCLCAweDFENjcsIDB4ODRCQywgMHg4NEJDLCAweDFENUMsCisgICAgMHg4NEJELCAweDg0QkQsIDB4MUQ2RiwgMHg4NEJFLCAweDg0QkUsIDB4MUQ3OSwgMHg4NzQwLCAweDg3NUQsIDB4MUQ4MywKKyAgICAweDg3NUYsIDB4ODc2MCwgMHgxREExLCAweDg3NjEsIDB4ODc2MSwgMHgxRjY2LCAweDg3NjIsIDB4ODc2MiwgMHgxREE0LAorICAgIDB4ODc2MywgMHg4NzYzLCAweDFGNjgsIDB4ODc2NCwgMHg4NzY0LCAweDFEQTYsIDB4ODc2NSwgMHg4NzY1LCAweDFGNkEsCisgICAgMHg4NzY2LCAweDg3NjcsIDB4MURBOCwgMHg4NzY4LCAweDg3NjgsIDB4MUY2QywgMHg4NzY5LCAweDg3NkEsIDB4MURBQiwKKyAgICAweDg3NkIsIDB4ODc2QiwgMHgxRjZCLCAweDg3NkMsIDB4ODc2RCwgMHgxREFFLCAweDg3NkUsIDB4ODc2RSwgMHgxRjZGLAorICAgIDB4ODc2RiwgMHg4Nzc1LCAweDFEQjEsIDB4ODc3RSwgMHg4NzdFLCAweDIwODMsIDB4ODc4MCwgMHg4NzgzLCAweDFEQjgsCisgICAgMHg4Nzg0LCAweDg3ODQsIDB4MUY3NywgMHg4Nzg1LCAweDg3OEYsIDB4MURCRCwgMHg4NzkwLCAweDg3OTAsIDB4MDJGQSwKKyAgICAweDg3OTEsIDB4ODc5MSwgMHgwMkY5LCAweDg3OTIsIDB4ODc5MiwgMHgwMzAxLCAweDg3OTMsIDB4ODc5OSwgMHgxREM4LAorICAgIDB4ODc5QSwgMHg4NzlBLCAweDAzMDAsIDB4ODc5QiwgMHg4NzlDLCAweDFEQ0YsIDB4ODg5RiwgMHg4OEZDLCAweDA0NjUsCisgICAgMHg4OTQwLCAweDg5N0UsIDB4MDRDMywgMHg4OTgwLCAweDg5RkMsIDB4MDUwMiwgMHg4QTQwLCAweDhBN0UsIDB4MDU3RiwKKyAgICAweDhBODAsIDB4OEFGQywgMHgwNUJFLCAweDhCNDAsIDB4OEI3RSwgMHgwNjNCLCAweDhCODAsIDB4OEJGQywgMHgwNjdBLAorICAgIDB4OEM0MCwgMHg4QzdFLCAweDA2RjcsIDB4OEM4MCwgMHg4Q0ZDLCAweDA3MzYsIDB4OEQ0MCwgMHg4RDdFLCAweDA3QjMsCisgICAgMHg4RDgwLCAweDhERkMsIDB4MDdGMiwgMHg4RTQwLCAweDhFN0UsIDB4MDg2RiwgMHg4RTgwLCAweDhFRkMsIDB4MDhBRSwKKyAgICAweDhGNDAsIDB4OEY3RSwgMHgwOTJCLCAweDhGODAsIDB4OEZGQywgMHgwOTZBLCAweDkwNDAsIDB4OTA3RSwgMHgwOUU3LAorICAgIDB4OTA4MCwgMHg5MEZDLCAweDBBMjYsIDB4OTE0MCwgMHg5MTdFLCAweDBBQTMsIDB4OTE4MCwgMHg5MUZDLCAweDBBRTIsCisgICAgMHg5MjQwLCAweDkyN0UsIDB4MEI1RiwgMHg5MjgwLCAweDkyRkMsIDB4MEI5RSwgMHg5MzQwLCAweDkzN0UsIDB4MEMxQiwKKyAgICAweDkzODAsIDB4OTNGQywgMHgwQzVBLCAweDk0NDAsIDB4OTQ3RSwgMHgwQ0Q3LCAweDk0ODAsIDB4OTRGQywgMHgwRDE2LAorICAgIDB4OTU0MCwgMHg5NTdFLCAweDBEOTMsIDB4OTU4MCwgMHg5NUZDLCAweDBERDIsIDB4OTY0MCwgMHg5NjdFLCAweDBFNEYsCisgICAgMHg5NjgwLCAweDk2RkMsIDB4MEU4RSwgMHg5NzQwLCAweDk3N0UsIDB4MEYwQiwgMHg5NzgwLCAweDk3RkMsIDB4MEY0QSwKKyAgICAweDk4NDAsIDB4OTg3MiwgMHgwRkM3LCAweDk4OUYsIDB4OThGQywgMHgwRkZBLCAweDk5NDAsIDB4OTk3RSwgMHgxMDU4LAorICAgIDB4OTk4MCwgMHg5OUZDLCAweDEwOTcsIDB4OUE0MCwgMHg5QTdFLCAweDExMTQsIDB4OUE4MCwgMHg5QUZDLCAweDExNTMsCisgICAgMHg5QjQwLCAweDlCN0UsIDB4MTFEMCwgMHg5QjgwLCAweDlCRkMsIDB4MTIwRiwgMHg5QzQwLCAweDlDN0UsIDB4MTI4QywKKyAgICAweDlDODAsIDB4OUNGQywgMHgxMkNCLCAweDlENDAsIDB4OUQ3RSwgMHgxMzQ4LCAweDlEODAsIDB4OURGQywgMHgxMzg3LAorICAgIDB4OUU0MCwgMHg5RTdFLCAweDE0MDQsIDB4OUU4MCwgMHg5RUZDLCAweDE0NDMsIDB4OUY0MCwgMHg5RjdFLCAweDE0QzAsCisgICAgMHg5RjgwLCAweDlGRkMsIDB4MTRGRiwgMHhFMDQwLCAweEUwN0UsIDB4MTU3QywgMHhFMDgwLCAweEUwRkMsIDB4MTVCQiwKKyAgICAweEUxNDAsIDB4RTE3RSwgMHgxNjM4LCAweEUxODAsIDB4RTFGQywgMHgxNjc3LCAweEUyNDAsIDB4RTI3RSwgMHgxNkY0LAorICAgIDB4RTI4MCwgMHhFMkZDLCAweDE3MzMsIDB4RTM0MCwgMHhFMzdFLCAweDE3QjAsIDB4RTM4MCwgMHhFM0ZDLCAweDE3RUYsCisgICAgMHhFNDQwLCAweEU0N0UsIDB4MTg2QywgMHhFNDgwLCAweEU0RkMsIDB4MThBQiwgMHhFNTQwLCAweEU1N0UsIDB4MTkyOCwKKyAgICAweEU1ODAsIDB4RTVGQywgMHgxOTY3LCAweEU2NDAsIDB4RTY3RSwgMHgxOUU0LCAweEU2ODAsIDB4RTZGQywgMHgxQTIzLAorICAgIDB4RTc0MCwgMHhFNzdFLCAweDFBQTAsIDB4RTc4MCwgMHhFN0ZDLCAweDFBREYsIDB4RTg0MCwgMHhFODdFLCAweDFCNUMsCisgICAgMHhFODgwLCAweEU4RkMsIDB4MUI5QiwgMHhFOTQwLCAweEU5N0UsIDB4MUMxOCwgMHhFOTgwLCAweEU5RkMsIDB4MUM1NywKKyAgICAweEVBNDAsIDB4RUE3RSwgMHgxQ0Q0LCAweEVBODAsIDB4RUFBMiwgMHgxRDEzLCAweEVBQTMsIDB4RUFBNCwgMHgyMDVDLAorICAgIDB4RUQ0MCwgMHhFRDdFLCAweDIwQTcsIDB4RUQ4MCwgMHhFREIzLCAweDIwRTYsIDB4RURCNCwgMHhFREI0LCAweDA3QzksCisgICAgMHhFREI1LCAweEVERkMsIDB4MjExQSwgMHhFRTQwLCAweEVFN0UsIDB4MjE2MiwgMHhFRTgwLCAweEVFRUMsIDB4MjFBMSwKKyAgICAweEVFRUYsIDB4RUVGOCwgMHgxRjlDLCAweEVFRjksIDB4RUVGOSwgMHgwMkVGLCAweEVFRkEsIDB4RUVGQywgMHgxRjQ1LAorICAgIDB4RkE0MCwgMHhGQTQ5LCAweDFGOUMsIDB4RkE0QSwgMHhGQTUzLCAweDFEOTcsIDB4RkE1NCwgMHhGQTU0LCAweDAyRUYsCisgICAgMHhGQTU1LCAweEZBNTcsIDB4MUY0NSwgMHhGQTU4LCAweEZBNTgsIDB4MURDMiwgMHhGQTU5LCAweEZBNTksIDB4MURCQSwKKyAgICAweEZBNUEsIDB4RkE1QSwgMHgxRjc3LCAweEZBNUIsIDB4RkE1QiwgMHgwMzAwLCAweEZBNUMsIDB4RkE3RSwgMHgyMEE3LAorICAgIDB4RkE4MCwgMHhGQUNGLCAweDIwQ0EsIDB4RkFEMCwgMHhGQUQwLCAweDA3QzksIDB4RkFEMSwgMHhGQUZDLCAweDIxMUEsCisgICAgMHhGQjQwLCAweEZCN0UsIDB4MjE0NiwgMHhGQjgwLCAweEZCRkMsIDB4MjE4NSwgMHhGQzQwLCAweEZDNEIsIDB4MjIwMiwKK307CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvSmFwYW4xLzkwbXNwLVJLU0otSF8yLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvOTBtc3AtUktTSi1IXzIuY3BwCmluZGV4IGQwZDhjMmQuLjM2ZWNiMTcgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvOTBtc3AtUktTSi1IXzIuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvOTBtc3AtUktTSi1IXzIuY3BwCkBAIC0xLDY1ICsxLDY1IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfOTBtc3BfUktTSl9IXzJbMTcwICogM10gPSB7DQotICAgIDB4MDAyMCwgMHgwMDdFLCAweDAwMDEsIDB4MDBBMCwgMHgwMERGLCAweDAxNDYsIDB4ODE0MCwgMHg4MTdFLCAweDAyNzksDQotICAgIDB4ODE4MCwgMHg4MUFDLCAweDAyQjgsIDB4ODFCOCwgMHg4MUJGLCAweDAyRTUsIDB4ODFDOCwgMHg4MUNFLCAweDAyRUQsDQotICAgIDB4ODFEQSwgMHg4MUU4LCAweDAyRjQsIDB4ODFGMCwgMHg4MUY3LCAweDAzMDMsIDB4ODFGQywgMHg4MUZDLCAweDAzMEIsDQotICAgIDB4ODI0RiwgMHg4MjU4LCAweDAzMEMsIDB4ODI2MCwgMHg4Mjc5LCAweDAzMTYsIDB4ODI4MSwgMHg4MjlBLCAweDAzMzAsDQotICAgIDB4ODI5RiwgMHg4MkYxLCAweDAzNEEsIDB4ODM0MCwgMHg4MzdFLCAweDAzOUQsIDB4ODM4MCwgMHg4Mzk2LCAweDAzREMsDQotICAgIDB4ODM5RiwgMHg4M0I2LCAweDAzRjMsIDB4ODNCRiwgMHg4M0Q2LCAweDA0MEIsIDB4ODQ0MCwgMHg4NDYwLCAweDA0MjMsDQotICAgIDB4ODQ3MCwgMHg4NDdFLCAweDA0NDQsIDB4ODQ4MCwgMHg4NDkxLCAweDA0NTMsIDB4ODQ5RiwgMHg4NDlGLCAweDFEMzcsDQotICAgIDB4ODRBMCwgMHg4NEEwLCAweDFEMzksIDB4ODRBMSwgMHg4NEExLCAweDFENDMsIDB4ODRBMiwgMHg4NEEyLCAweDFENDcsDQotICAgIDB4ODRBMywgMHg4NEEzLCAweDFENEYsIDB4ODRBNCwgMHg4NEE0LCAweDFENEIsIDB4ODRBNSwgMHg4NEE1LCAweDFENTMsDQotICAgIDB4ODRBNiwgMHg4NEE2LCAweDFENjMsIDB4ODRBNywgMHg4NEE3LCAweDFENUIsIDB4ODRBOCwgMHg4NEE4LCAweDFENkIsDQotICAgIDB4ODRBOSwgMHg4NEE5LCAweDFENzMsIDB4ODRBQSwgMHg4NEFBLCAweDFEMzgsIDB4ODRBQiwgMHg4NEFCLCAweDFEM0EsDQotICAgIDB4ODRBQywgMHg4NEFDLCAweDFENDYsIDB4ODRBRCwgMHg4NEFELCAweDFENEEsIDB4ODRBRSwgMHg4NEFFLCAweDFENTIsDQotICAgIDB4ODRBRiwgMHg4NEFGLCAweDFENEUsIDB4ODRCMCwgMHg4NEIwLCAweDFENUEsIDB4ODRCMSwgMHg4NEIxLCAweDFENkEsDQotICAgIDB4ODRCMiwgMHg4NEIyLCAweDFENjIsIDB4ODRCMywgMHg4NEIzLCAweDFENzIsIDB4ODRCNCwgMHg4NEI0LCAweDFEODIsDQotICAgIDB4ODRCNSwgMHg4NEI1LCAweDFENTcsIDB4ODRCNiwgMHg4NEI2LCAweDFENjYsIDB4ODRCNywgMHg4NEI3LCAweDFENUYsDQotICAgIDB4ODRCOCwgMHg4NEI4LCAweDFENkUsIDB4ODRCOSwgMHg4NEI5LCAweDFENzYsIDB4ODRCQSwgMHg4NEJBLCAweDFENTQsDQotICAgIDB4ODRCQiwgMHg4NEJCLCAweDFENjcsIDB4ODRCQywgMHg4NEJDLCAweDFENUMsIDB4ODRCRCwgMHg4NEJELCAweDFENkYsDQotICAgIDB4ODRCRSwgMHg4NEJFLCAweDFENzksIDB4ODc0MCwgMHg4NzVELCAweDFEODMsIDB4ODc1RiwgMHg4NzYwLCAweDFEQTEsDQotICAgIDB4ODc2MSwgMHg4NzYxLCAweDFGNjYsIDB4ODc2MiwgMHg4NzYyLCAweDFEQTQsIDB4ODc2MywgMHg4NzYzLCAweDFGNjgsDQotICAgIDB4ODc2NCwgMHg4NzY0LCAweDFEQTYsIDB4ODc2NSwgMHg4NzY1LCAweDFGNkEsIDB4ODc2NiwgMHg4NzY3LCAweDFEQTgsDQotICAgIDB4ODc2OCwgMHg4NzY4LCAweDFGNkMsIDB4ODc2OSwgMHg4NzZBLCAweDFEQUIsIDB4ODc2QiwgMHg4NzZCLCAweDFGNkIsDQotICAgIDB4ODc2QywgMHg4NzZELCAweDFEQUUsIDB4ODc2RSwgMHg4NzZFLCAweDFGNkYsIDB4ODc2RiwgMHg4Nzc1LCAweDFEQjEsDQotICAgIDB4ODc3RSwgMHg4NzdFLCAweDIwODMsIDB4ODc4MCwgMHg4NzgzLCAweDFEQjgsIDB4ODc4NCwgMHg4Nzg0LCAweDFGNzcsDQotICAgIDB4ODc4NSwgMHg4NzhGLCAweDFEQkQsIDB4ODc5MCwgMHg4NzkwLCAweDAyRkEsIDB4ODc5MSwgMHg4NzkxLCAweDAyRjksDQotICAgIDB4ODc5MiwgMHg4NzkyLCAweDAzMDEsIDB4ODc5MywgMHg4Nzk5LCAweDFEQzgsIDB4ODc5QSwgMHg4NzlBLCAweDAzMDAsDQotICAgIDB4ODc5QiwgMHg4NzlDLCAweDFEQ0YsIDB4ODg5RiwgMHg4OEZDLCAweDA0NjUsIDB4ODk0MCwgMHg4OTdFLCAweDA0QzMsDQotICAgIDB4ODk4MCwgMHg4OUZDLCAweDA1MDIsIDB4OEE0MCwgMHg4QTdFLCAweDA1N0YsIDB4OEE4MCwgMHg4QUZDLCAweDA1QkUsDQotICAgIDB4OEI0MCwgMHg4QjdFLCAweDA2M0IsIDB4OEI4MCwgMHg4QkZDLCAweDA2N0EsIDB4OEM0MCwgMHg4QzdFLCAweDA2RjcsDQotICAgIDB4OEM4MCwgMHg4Q0ZDLCAweDA3MzYsIDB4OEQ0MCwgMHg4RDdFLCAweDA3QjMsIDB4OEQ4MCwgMHg4REZDLCAweDA3RjIsDQotICAgIDB4OEU0MCwgMHg4RTdFLCAweDA4NkYsIDB4OEU4MCwgMHg4RUZDLCAweDA4QUUsIDB4OEY0MCwgMHg4RjdFLCAweDA5MkIsDQotICAgIDB4OEY4MCwgMHg4RkZDLCAweDA5NkEsIDB4OTA0MCwgMHg5MDdFLCAweDA5RTcsIDB4OTA4MCwgMHg5MEZDLCAweDBBMjYsDQotICAgIDB4OTE0MCwgMHg5MTdFLCAweDBBQTMsIDB4OTE4MCwgMHg5MUZDLCAweDBBRTIsIDB4OTI0MCwgMHg5MjdFLCAweDBCNUYsDQotICAgIDB4OTI4MCwgMHg5MkZDLCAweDBCOUUsIDB4OTM0MCwgMHg5MzdFLCAweDBDMUIsIDB4OTM4MCwgMHg5M0ZDLCAweDBDNUEsDQotICAgIDB4OTQ0MCwgMHg5NDdFLCAweDBDRDcsIDB4OTQ4MCwgMHg5NEZDLCAweDBEMTYsIDB4OTU0MCwgMHg5NTdFLCAweDBEOTMsDQotICAgIDB4OTU4MCwgMHg5NUZDLCAweDBERDIsIDB4OTY0MCwgMHg5NjdFLCAweDBFNEYsIDB4OTY4MCwgMHg5NkZDLCAweDBFOEUsDQotICAgIDB4OTc0MCwgMHg5NzdFLCAweDBGMEIsIDB4OTc4MCwgMHg5N0ZDLCAweDBGNEEsIDB4OTg0MCwgMHg5ODcyLCAweDBGQzcsDQotICAgIDB4OTg5RiwgMHg5OEZDLCAweDBGRkEsIDB4OTk0MCwgMHg5OTdFLCAweDEwNTgsIDB4OTk4MCwgMHg5OUZDLCAweDEwOTcsDQotICAgIDB4OUE0MCwgMHg5QTdFLCAweDExMTQsIDB4OUE4MCwgMHg5QUZDLCAweDExNTMsIDB4OUI0MCwgMHg5QjdFLCAweDExRDAsDQotICAgIDB4OUI4MCwgMHg5QkZDLCAweDEyMEYsIDB4OUM0MCwgMHg5QzdFLCAweDEyOEMsIDB4OUM4MCwgMHg5Q0ZDLCAweDEyQ0IsDQotICAgIDB4OUQ0MCwgMHg5RDdFLCAweDEzNDgsIDB4OUQ4MCwgMHg5REZDLCAweDEzODcsIDB4OUU0MCwgMHg5RTdFLCAweDE0MDQsDQotICAgIDB4OUU4MCwgMHg5RUZDLCAweDE0NDMsIDB4OUY0MCwgMHg5RjdFLCAweDE0QzAsIDB4OUY4MCwgMHg5RkZDLCAweDE0RkYsDQotICAgIDB4RTA0MCwgMHhFMDdFLCAweDE1N0MsIDB4RTA4MCwgMHhFMEZDLCAweDE1QkIsIDB4RTE0MCwgMHhFMTdFLCAweDE2MzgsDQotICAgIDB4RTE4MCwgMHhFMUZDLCAweDE2NzcsIDB4RTI0MCwgMHhFMjdFLCAweDE2RjQsIDB4RTI4MCwgMHhFMkZDLCAweDE3MzMsDQotICAgIDB4RTM0MCwgMHhFMzdFLCAweDE3QjAsIDB4RTM4MCwgMHhFM0ZDLCAweDE3RUYsIDB4RTQ0MCwgMHhFNDdFLCAweDE4NkMsDQotICAgIDB4RTQ4MCwgMHhFNEZDLCAweDE4QUIsIDB4RTU0MCwgMHhFNTdFLCAweDE5MjgsIDB4RTU4MCwgMHhFNUZDLCAweDE5NjcsDQotICAgIDB4RTY0MCwgMHhFNjdFLCAweDE5RTQsIDB4RTY4MCwgMHhFNkZDLCAweDFBMjMsIDB4RTc0MCwgMHhFNzdFLCAweDFBQTAsDQotICAgIDB4RTc4MCwgMHhFN0ZDLCAweDFBREYsIDB4RTg0MCwgMHhFODdFLCAweDFCNUMsIDB4RTg4MCwgMHhFOEZDLCAweDFCOUIsDQotICAgIDB4RTk0MCwgMHhFOTdFLCAweDFDMTgsIDB4RTk4MCwgMHhFOUZDLCAweDFDNTcsIDB4RUE0MCwgMHhFQTdFLCAweDFDRDQsDQotICAgIDB4RUE4MCwgMHhFQUEyLCAweDFEMTMsIDB4RUFBMywgMHhFQUE0LCAweDIwNUMsIDB4RUQ0MCwgMHhFRDdFLCAweDIwQTcsDQotICAgIDB4RUQ4MCwgMHhFREIzLCAweDIwRTYsIDB4RURCNCwgMHhFREI0LCAweDA3QzksIDB4RURCNSwgMHhFREZDLCAweDIxMUEsDQotICAgIDB4RUU0MCwgMHhFRTdFLCAweDIxNjIsIDB4RUU4MCwgMHhFRUVDLCAweDIxQTEsIDB4RUVFRiwgMHhFRUY4LCAweDFGOUMsDQotICAgIDB4RUVGOSwgMHhFRUY5LCAweDAyRUYsIDB4RUVGQSwgMHhFRUZDLCAweDFGNDUsIDB4RkE0MCwgMHhGQTQ5LCAweDFGOUMsDQotICAgIDB4RkE0QSwgMHhGQTUzLCAweDFEOTcsIDB4RkE1NCwgMHhGQTU0LCAweDAyRUYsIDB4RkE1NSwgMHhGQTU3LCAweDFGNDUsDQotICAgIDB4RkE1OCwgMHhGQTU4LCAweDFEQzIsIDB4RkE1OSwgMHhGQTU5LCAweDFEQkEsIDB4RkE1QSwgMHhGQTVBLCAweDFGNzcsDQotICAgIDB4RkE1QiwgMHhGQTVCLCAweDAzMDAsIDB4RkE1QywgMHhGQTdFLCAweDIwQTcsIDB4RkE4MCwgMHhGQUNGLCAweDIwQ0EsDQotICAgIDB4RkFEMCwgMHhGQUQwLCAweDA3QzksIDB4RkFEMSwgMHhGQUZDLCAweDIxMUEsIDB4RkI0MCwgMHhGQjdFLCAweDIxNDYsDQotICAgIDB4RkI4MCwgMHhGQkZDLCAweDIxODUsIDB4RkM0MCwgMHhGQzRCLCAweDIyMDIsDQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfOTBtc3BfUktTSl9IXzJbMTcwICogM10gPSB7CisgICAgMHgwMDIwLCAweDAwN0UsIDB4MDAwMSwgMHgwMEEwLCAweDAwREYsIDB4MDE0NiwgMHg4MTQwLCAweDgxN0UsIDB4MDI3OSwKKyAgICAweDgxODAsIDB4ODFBQywgMHgwMkI4LCAweDgxQjgsIDB4ODFCRiwgMHgwMkU1LCAweDgxQzgsIDB4ODFDRSwgMHgwMkVELAorICAgIDB4ODFEQSwgMHg4MUU4LCAweDAyRjQsIDB4ODFGMCwgMHg4MUY3LCAweDAzMDMsIDB4ODFGQywgMHg4MUZDLCAweDAzMEIsCisgICAgMHg4MjRGLCAweDgyNTgsIDB4MDMwQywgMHg4MjYwLCAweDgyNzksIDB4MDMxNiwgMHg4MjgxLCAweDgyOUEsIDB4MDMzMCwKKyAgICAweDgyOUYsIDB4ODJGMSwgMHgwMzRBLCAweDgzNDAsIDB4ODM3RSwgMHgwMzlELCAweDgzODAsIDB4ODM5NiwgMHgwM0RDLAorICAgIDB4ODM5RiwgMHg4M0I2LCAweDAzRjMsIDB4ODNCRiwgMHg4M0Q2LCAweDA0MEIsIDB4ODQ0MCwgMHg4NDYwLCAweDA0MjMsCisgICAgMHg4NDcwLCAweDg0N0UsIDB4MDQ0NCwgMHg4NDgwLCAweDg0OTEsIDB4MDQ1MywgMHg4NDlGLCAweDg0OUYsIDB4MUQzNywKKyAgICAweDg0QTAsIDB4ODRBMCwgMHgxRDM5LCAweDg0QTEsIDB4ODRBMSwgMHgxRDQzLCAweDg0QTIsIDB4ODRBMiwgMHgxRDQ3LAorICAgIDB4ODRBMywgMHg4NEEzLCAweDFENEYsIDB4ODRBNCwgMHg4NEE0LCAweDFENEIsIDB4ODRBNSwgMHg4NEE1LCAweDFENTMsCisgICAgMHg4NEE2LCAweDg0QTYsIDB4MUQ2MywgMHg4NEE3LCAweDg0QTcsIDB4MUQ1QiwgMHg4NEE4LCAweDg0QTgsIDB4MUQ2QiwKKyAgICAweDg0QTksIDB4ODRBOSwgMHgxRDczLCAweDg0QUEsIDB4ODRBQSwgMHgxRDM4LCAweDg0QUIsIDB4ODRBQiwgMHgxRDNBLAorICAgIDB4ODRBQywgMHg4NEFDLCAweDFENDYsIDB4ODRBRCwgMHg4NEFELCAweDFENEEsIDB4ODRBRSwgMHg4NEFFLCAweDFENTIsCisgICAgMHg4NEFGLCAweDg0QUYsIDB4MUQ0RSwgMHg4NEIwLCAweDg0QjAsIDB4MUQ1QSwgMHg4NEIxLCAweDg0QjEsIDB4MUQ2QSwKKyAgICAweDg0QjIsIDB4ODRCMiwgMHgxRDYyLCAweDg0QjMsIDB4ODRCMywgMHgxRDcyLCAweDg0QjQsIDB4ODRCNCwgMHgxRDgyLAorICAgIDB4ODRCNSwgMHg4NEI1LCAweDFENTcsIDB4ODRCNiwgMHg4NEI2LCAweDFENjYsIDB4ODRCNywgMHg4NEI3LCAweDFENUYsCisgICAgMHg4NEI4LCAweDg0QjgsIDB4MUQ2RSwgMHg4NEI5LCAweDg0QjksIDB4MUQ3NiwgMHg4NEJBLCAweDg0QkEsIDB4MUQ1NCwKKyAgICAweDg0QkIsIDB4ODRCQiwgMHgxRDY3LCAweDg0QkMsIDB4ODRCQywgMHgxRDVDLCAweDg0QkQsIDB4ODRCRCwgMHgxRDZGLAorICAgIDB4ODRCRSwgMHg4NEJFLCAweDFENzksIDB4ODc0MCwgMHg4NzVELCAweDFEODMsIDB4ODc1RiwgMHg4NzYwLCAweDFEQTEsCisgICAgMHg4NzYxLCAweDg3NjEsIDB4MUY2NiwgMHg4NzYyLCAweDg3NjIsIDB4MURBNCwgMHg4NzYzLCAweDg3NjMsIDB4MUY2OCwKKyAgICAweDg3NjQsIDB4ODc2NCwgMHgxREE2LCAweDg3NjUsIDB4ODc2NSwgMHgxRjZBLCAweDg3NjYsIDB4ODc2NywgMHgxREE4LAorICAgIDB4ODc2OCwgMHg4NzY4LCAweDFGNkMsIDB4ODc2OSwgMHg4NzZBLCAweDFEQUIsIDB4ODc2QiwgMHg4NzZCLCAweDFGNkIsCisgICAgMHg4NzZDLCAweDg3NkQsIDB4MURBRSwgMHg4NzZFLCAweDg3NkUsIDB4MUY2RiwgMHg4NzZGLCAweDg3NzUsIDB4MURCMSwKKyAgICAweDg3N0UsIDB4ODc3RSwgMHgyMDgzLCAweDg3ODAsIDB4ODc4MywgMHgxREI4LCAweDg3ODQsIDB4ODc4NCwgMHgxRjc3LAorICAgIDB4ODc4NSwgMHg4NzhGLCAweDFEQkQsIDB4ODc5MCwgMHg4NzkwLCAweDAyRkEsIDB4ODc5MSwgMHg4NzkxLCAweDAyRjksCisgICAgMHg4NzkyLCAweDg3OTIsIDB4MDMwMSwgMHg4NzkzLCAweDg3OTksIDB4MURDOCwgMHg4NzlBLCAweDg3OUEsIDB4MDMwMCwKKyAgICAweDg3OUIsIDB4ODc5QywgMHgxRENGLCAweDg4OUYsIDB4ODhGQywgMHgwNDY1LCAweDg5NDAsIDB4ODk3RSwgMHgwNEMzLAorICAgIDB4ODk4MCwgMHg4OUZDLCAweDA1MDIsIDB4OEE0MCwgMHg4QTdFLCAweDA1N0YsIDB4OEE4MCwgMHg4QUZDLCAweDA1QkUsCisgICAgMHg4QjQwLCAweDhCN0UsIDB4MDYzQiwgMHg4QjgwLCAweDhCRkMsIDB4MDY3QSwgMHg4QzQwLCAweDhDN0UsIDB4MDZGNywKKyAgICAweDhDODAsIDB4OENGQywgMHgwNzM2LCAweDhENDAsIDB4OEQ3RSwgMHgwN0IzLCAweDhEODAsIDB4OERGQywgMHgwN0YyLAorICAgIDB4OEU0MCwgMHg4RTdFLCAweDA4NkYsIDB4OEU4MCwgMHg4RUZDLCAweDA4QUUsIDB4OEY0MCwgMHg4RjdFLCAweDA5MkIsCisgICAgMHg4RjgwLCAweDhGRkMsIDB4MDk2QSwgMHg5MDQwLCAweDkwN0UsIDB4MDlFNywgMHg5MDgwLCAweDkwRkMsIDB4MEEyNiwKKyAgICAweDkxNDAsIDB4OTE3RSwgMHgwQUEzLCAweDkxODAsIDB4OTFGQywgMHgwQUUyLCAweDkyNDAsIDB4OTI3RSwgMHgwQjVGLAorICAgIDB4OTI4MCwgMHg5MkZDLCAweDBCOUUsIDB4OTM0MCwgMHg5MzdFLCAweDBDMUIsIDB4OTM4MCwgMHg5M0ZDLCAweDBDNUEsCisgICAgMHg5NDQwLCAweDk0N0UsIDB4MENENywgMHg5NDgwLCAweDk0RkMsIDB4MEQxNiwgMHg5NTQwLCAweDk1N0UsIDB4MEQ5MywKKyAgICAweDk1ODAsIDB4OTVGQywgMHgwREQyLCAweDk2NDAsIDB4OTY3RSwgMHgwRTRGLCAweDk2ODAsIDB4OTZGQywgMHgwRThFLAorICAgIDB4OTc0MCwgMHg5NzdFLCAweDBGMEIsIDB4OTc4MCwgMHg5N0ZDLCAweDBGNEEsIDB4OTg0MCwgMHg5ODcyLCAweDBGQzcsCisgICAgMHg5ODlGLCAweDk4RkMsIDB4MEZGQSwgMHg5OTQwLCAweDk5N0UsIDB4MTA1OCwgMHg5OTgwLCAweDk5RkMsIDB4MTA5NywKKyAgICAweDlBNDAsIDB4OUE3RSwgMHgxMTE0LCAweDlBODAsIDB4OUFGQywgMHgxMTUzLCAweDlCNDAsIDB4OUI3RSwgMHgxMUQwLAorICAgIDB4OUI4MCwgMHg5QkZDLCAweDEyMEYsIDB4OUM0MCwgMHg5QzdFLCAweDEyOEMsIDB4OUM4MCwgMHg5Q0ZDLCAweDEyQ0IsCisgICAgMHg5RDQwLCAweDlEN0UsIDB4MTM0OCwgMHg5RDgwLCAweDlERkMsIDB4MTM4NywgMHg5RTQwLCAweDlFN0UsIDB4MTQwNCwKKyAgICAweDlFODAsIDB4OUVGQywgMHgxNDQzLCAweDlGNDAsIDB4OUY3RSwgMHgxNEMwLCAweDlGODAsIDB4OUZGQywgMHgxNEZGLAorICAgIDB4RTA0MCwgMHhFMDdFLCAweDE1N0MsIDB4RTA4MCwgMHhFMEZDLCAweDE1QkIsIDB4RTE0MCwgMHhFMTdFLCAweDE2MzgsCisgICAgMHhFMTgwLCAweEUxRkMsIDB4MTY3NywgMHhFMjQwLCAweEUyN0UsIDB4MTZGNCwgMHhFMjgwLCAweEUyRkMsIDB4MTczMywKKyAgICAweEUzNDAsIDB4RTM3RSwgMHgxN0IwLCAweEUzODAsIDB4RTNGQywgMHgxN0VGLCAweEU0NDAsIDB4RTQ3RSwgMHgxODZDLAorICAgIDB4RTQ4MCwgMHhFNEZDLCAweDE4QUIsIDB4RTU0MCwgMHhFNTdFLCAweDE5MjgsIDB4RTU4MCwgMHhFNUZDLCAweDE5NjcsCisgICAgMHhFNjQwLCAweEU2N0UsIDB4MTlFNCwgMHhFNjgwLCAweEU2RkMsIDB4MUEyMywgMHhFNzQwLCAweEU3N0UsIDB4MUFBMCwKKyAgICAweEU3ODAsIDB4RTdGQywgMHgxQURGLCAweEU4NDAsIDB4RTg3RSwgMHgxQjVDLCAweEU4ODAsIDB4RThGQywgMHgxQjlCLAorICAgIDB4RTk0MCwgMHhFOTdFLCAweDFDMTgsIDB4RTk4MCwgMHhFOUZDLCAweDFDNTcsIDB4RUE0MCwgMHhFQTdFLCAweDFDRDQsCisgICAgMHhFQTgwLCAweEVBQTIsIDB4MUQxMywgMHhFQUEzLCAweEVBQTQsIDB4MjA1QywgMHhFRDQwLCAweEVEN0UsIDB4MjBBNywKKyAgICAweEVEODAsIDB4RURCMywgMHgyMEU2LCAweEVEQjQsIDB4RURCNCwgMHgwN0M5LCAweEVEQjUsIDB4RURGQywgMHgyMTFBLAorICAgIDB4RUU0MCwgMHhFRTdFLCAweDIxNjIsIDB4RUU4MCwgMHhFRUVDLCAweDIxQTEsIDB4RUVFRiwgMHhFRUY4LCAweDFGOUMsCisgICAgMHhFRUY5LCAweEVFRjksIDB4MDJFRiwgMHhFRUZBLCAweEVFRkMsIDB4MUY0NSwgMHhGQTQwLCAweEZBNDksIDB4MUY5QywKKyAgICAweEZBNEEsIDB4RkE1MywgMHgxRDk3LCAweEZBNTQsIDB4RkE1NCwgMHgwMkVGLCAweEZBNTUsIDB4RkE1NywgMHgxRjQ1LAorICAgIDB4RkE1OCwgMHhGQTU4LCAweDFEQzIsIDB4RkE1OSwgMHhGQTU5LCAweDFEQkEsIDB4RkE1QSwgMHhGQTVBLCAweDFGNzcsCisgICAgMHhGQTVCLCAweEZBNUIsIDB4MDMwMCwgMHhGQTVDLCAweEZBN0UsIDB4MjBBNywgMHhGQTgwLCAweEZBQ0YsIDB4MjBDQSwKKyAgICAweEZBRDAsIDB4RkFEMCwgMHgwN0M5LCAweEZBRDEsIDB4RkFGQywgMHgyMTFBLCAweEZCNDAsIDB4RkI3RSwgMHgyMTQ2LAorICAgIDB4RkI4MCwgMHhGQkZDLCAweDIxODUsIDB4RkM0MCwgMHhGQzRCLCAweDIyMDIsCit9OwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0phcGFuMS85MHB2LVJLU0otSF8xLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvOTBwdi1SS1NKLUhfMS5jcHAKaW5kZXggNTA0ZDRkYy4uMTk1MjZiYiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0phcGFuMS85MHB2LVJLU0otSF8xLmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvSmFwYW4xLzkwcHYtUktTSi1IXzEuY3BwCkBAIC0xLDk2ICsxLDk2IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfOTBwdl9SS1NKX0hfMVsyNjMgKiAzXSA9IHsNCi0gICAgMHgwMDIwLCAweDAwN0UsIDB4MDAwMSwgMHgwMDgwLCAweDAwODAsIDB4MDA2MSwgMHgwMEEwLCAweDAwREYsIDB4MDE0NiwNCi0gICAgMHgwMEZELCAweDAwRkQsIDB4MDA5OCwgMHgwMEZFLCAweDAwRkUsIDB4MDBFNCwgMHgwMEZGLCAweDAwRkYsIDB4MDA3QywNCi0gICAgMHg4MTQwLCAweDgxN0UsIDB4MDI3OSwgMHg4MTgwLCAweDgxQUMsIDB4MDJCOCwgMHg4MUI4LCAweDgxQkYsIDB4MDJFNSwNCi0gICAgMHg4MUM4LCAweDgxQ0UsIDB4MDJFRCwgMHg4MURBLCAweDgxRTgsIDB4MDJGNCwgMHg4MUYwLCAweDgxRjcsIDB4MDMwMywNCi0gICAgMHg4MUZDLCAweDgxRkMsIDB4MDMwQiwgMHg4MjRGLCAweDgyNTgsIDB4MDMwQywgMHg4MjYwLCAweDgyNzksIDB4MDMxNiwNCi0gICAgMHg4MjgxLCAweDgyOUEsIDB4MDMzMCwgMHg4MjlGLCAweDgyRjEsIDB4MDM0QSwgMHg4MzQwLCAweDgzN0UsIDB4MDM5RCwNCi0gICAgMHg4MzgwLCAweDgzOTYsIDB4MDNEQywgMHg4MzlGLCAweDgzQjYsIDB4MDNGMywgMHg4M0JGLCAweDgzRDYsIDB4MDQwQiwNCi0gICAgMHg4NDQwLCAweDg0NjAsIDB4MDQyMywgMHg4NDcwLCAweDg0N0UsIDB4MDQ0NCwgMHg4NDgwLCAweDg0OTEsIDB4MDQ1MywNCi0gICAgMHg4NDlGLCAweDg0OUYsIDB4MUQzNywgMHg4NEEwLCAweDg0QTAsIDB4MUQzOSwgMHg4NEExLCAweDg0QTEsIDB4MUQ0MywNCi0gICAgMHg4NEEyLCAweDg0QTIsIDB4MUQ0NywgMHg4NEEzLCAweDg0QTMsIDB4MUQ0RiwgMHg4NEE0LCAweDg0QTQsIDB4MUQ0QiwNCi0gICAgMHg4NEE1LCAweDg0QTUsIDB4MUQ1MywgMHg4NEE2LCAweDg0QTYsIDB4MUQ2MywgMHg4NEE3LCAweDg0QTcsIDB4MUQ1QiwNCi0gICAgMHg4NEE4LCAweDg0QTgsIDB4MUQ2QiwgMHg4NEE5LCAweDg0QTksIDB4MUQ3MywgMHg4NEFBLCAweDg0QUEsIDB4MUQzOCwNCi0gICAgMHg4NEFCLCAweDg0QUIsIDB4MUQzQSwgMHg4NEFDLCAweDg0QUMsIDB4MUQ0NiwgMHg4NEFELCAweDg0QUQsIDB4MUQ0QSwNCi0gICAgMHg4NEFFLCAweDg0QUUsIDB4MUQ1MiwgMHg4NEFGLCAweDg0QUYsIDB4MUQ0RSwgMHg4NEIwLCAweDg0QjAsIDB4MUQ1QSwNCi0gICAgMHg4NEIxLCAweDg0QjEsIDB4MUQ2QSwgMHg4NEIyLCAweDg0QjIsIDB4MUQ2MiwgMHg4NEIzLCAweDg0QjMsIDB4MUQ3MiwNCi0gICAgMHg4NEI0LCAweDg0QjQsIDB4MUQ4MiwgMHg4NEI1LCAweDg0QjUsIDB4MUQ1NywgMHg4NEI2LCAweDg0QjYsIDB4MUQ2NiwNCi0gICAgMHg4NEI3LCAweDg0QjcsIDB4MUQ1RiwgMHg4NEI4LCAweDg0QjgsIDB4MUQ2RSwgMHg4NEI5LCAweDg0QjksIDB4MUQ3NiwNCi0gICAgMHg4NEJBLCAweDg0QkEsIDB4MUQ1NCwgMHg4NEJCLCAweDg0QkIsIDB4MUQ2NywgMHg4NEJDLCAweDg0QkMsIDB4MUQ1QywNCi0gICAgMHg4NEJELCAweDg0QkQsIDB4MUQ2RiwgMHg4NEJFLCAweDg0QkUsIDB4MUQ3OSwgMHg4NTQwLCAweDg1NTMsIDB4MUQ4MywNCi0gICAgMHg4NTVFLCAweDg1NzEsIDB4MUY4NywgMHg4NTdDLCAweDg1N0UsIDB4MjA1RSwgMHg4NTgwLCAweDg1ODUsIDB4MjA2MSwNCi0gICAgMHg4NTkxLCAweDg1OUEsIDB4MUY3RCwgMHg4NTlGLCAweDg1QTgsIDB4MUQ5NywgMHg4NUE5LCAweDg1QUEsIDB4MjAyMSwNCi0gICAgMHg4NUFCLCAweDg1QUQsIDB4MjA2NywgMHg4NUIzLCAweDg1QkMsIDB4MUY5QywgMHg4NUJELCAweDg1QzEsIDB4MjA2QSwNCi0gICAgMHg4NURCLCAweDg1RjQsIDB4MUZCMCwgMHg4NjQwLCAweDg2NDAsIDB4MURCMSwgMHg4NjQxLCAweDg2NDEsIDB4MUZGQSwNCi0gICAgMHg4NjQyLCAweDg2NDIsIDB4MURCMiwgMHg4NjQzLCAweDg2NDMsIDB4MUY1NCwgMHg4NjQ0LCAweDg2NDQsIDB4MUY1NiwNCi0gICAgMHg4NjQ1LCAweDg2NDUsIDB4MjA2RiwgMHg4NjQ2LCAweDg2NDYsIDB4MURCNywgMHg4NjQ3LCAweDg2NDcsIDB4MUY1NywNCi0gICAgMHg4NjQ4LCAweDg2NDgsIDB4MURCMywgMHg4NjQ5LCAweDg2NDksIDB4MUY1NSwgMHg4NjRBLCAweDg2NEEsIDB4MURCNCwNCi0gICAgMHg4NjRCLCAweDg2NEIsIDB4MjA3MCwgMHg4NjRDLCAweDg2NEQsIDB4MURCNSwgMHg4NjRFLCAweDg2NEUsIDB4MUY2NSwNCi0gICAgMHg4NjRGLCAweDg2NTUsIDB4MUY1OCwgMHg4NjU2LCAweDg2NTYsIDB4MjA3MSwgMHg4NjU3LCAweDg2NTcsIDB4MUY2NCwNCi0gICAgMHg4NjU4LCAweDg2NTksIDB4MUY2MiwgMHg4NjVBLCAweDg2NUMsIDB4MUY1RiwgMHg4NjVELCAweDg2NUQsIDB4MjA3MiwNCi0gICAgMHg4NjlCLCAweDg2OUQsIDB4MURCQSwgMHg4NjlFLCAweDg2OUUsIDB4MjA3MywgMHg4NjlGLCAweDg2OUYsIDB4MUY1MiwNCi0gICAgMHg4NkEwLCAweDg2QTEsIDB4MUY1MCwgMHg4NkEyLCAweDg2QTIsIDB4MUY1MywgMHg4NkEzLCAweDg2QTMsIDB4MjAxMywNCi0gICAgMHg4NkE0LCAweDg2QTQsIDB4MjAxNSwgMHg4NkE1LCAweDg2QTUsIDB4MjAxNCwgMHg4NkE2LCAweDg2QTYsIDB4MjAxNiwNCi0gICAgMHg4NkIzLCAweDg2QjMsIDB4MUY3QSwgMHg4NkI0LCAweDg2QjQsIDB4MUY3OCwgMHg4NkI1LCAweDg2QjUsIDB4MjA3NCwNCi0gICAgMHg4NkM3LCAweDg2Q0EsIDB4MjAxQiwgMHg4NkNCLCAweDg2Q0UsIDB4MjA3NSwgMHg4NkNGLCAweDg2Q0YsIDB4MUY0RSwNCi0gICAgMHg4NkQwLCAweDg2RDAsIDB4MUY0RCwgMHg4NkQxLCAweDg2RDEsIDB4MUY0QywgMHg4NkQyLCAweDg2RDIsIDB4MUY0QiwNCi0gICAgMHg4NkQzLCAweDg2RDYsIDB4MjAwRSwgMHg4NzQwLCAweDg3NDYsIDB4MjAwNSwgMHg4NzQ3LCAweDg3NDcsIDB4MUZENiwNCi0gICAgMHg4NzQ4LCAweDg3NDgsIDB4MjAwQywgMHg4NzQ5LCAweDg3NDksIDB4MUZEMSwgMHg4NzRBLCAweDg3NEEsIDB4MUZDQSwNCi0gICAgMHg4NzRCLCAweDg3NEIsIDB4MURDNCwgMHg4NzRDLCAweDg3NEMsIDB4MUZENywgMHg4NzRELCAweDg3NEQsIDB4MURDMiwNCi0gICAgMHg4NzRFLCAweDg3NEUsIDB4MUZEMiwgMHg4NzRGLCAweDg3NEYsIDB4MUZDRCwgMHg4NzUwLCAweDg3NTAsIDB4MURDMywNCi0gICAgMHg4NzUxLCAweDg3NTEsIDB4MUZENSwgMHg4NzUyLCAweDg3NTIsIDB4MUZEMywgMHg4NzUzLCAweDg3NTMsIDB4MUZDRiwNCi0gICAgMHg4NzU0LCAweDg3NTQsIDB4MUZENCwgMHg4NzU1LCAweDg3NTUsIDB4MUZEMCwgMHg4NzU2LCAweDg3NTcsIDB4MUZDQiwNCi0gICAgMHg4NzU4LCAweDg3NTgsIDB4MUZDRSwgMHg4NzkxLCAweDg3OTIsIDB4MjA3RCwgMHg4NzkzLCAweDg3OTcsIDB4MURCRCwNCi0gICAgMHg4Nzk4LCAweDg3OTgsIDB4MUZEQSwgMHg4Nzk5LCAweDg3OTksIDB4MUZFNSwgMHg4NzlBLCAweDg3OUEsIDB4MjA3RiwNCi0gICAgMHg4NzlCLCAweDg3OUIsIDB4MUZERSwgMHg4NzlDLCAweDg3OUMsIDB4MUZGRiwgMHg4NzlELCAweDg3OUQsIDB4MjA4MCwNCi0gICAgMHg4NzlFLCAweDg3OUUsIDB4MjAxRiwgMHg4NzlGLCAweDg3OUYsIDB4MURBMSwgMHg4N0EwLCAweDg3QTAsIDB4MUY2NiwNCi0gICAgMHg4N0ExLCAweDg3QTEsIDB4MURBNCwgMHg4N0EyLCAweDg3QTIsIDB4MURBMiwgMHg4N0EzLCAweDg3QTMsIDB4MUY2NywNCi0gICAgMHg4N0E0LCAweDg3QTQsIDB4MUZGNywgMHg4N0E1LCAweDg3QTYsIDB4MjA4NywgMHg4N0E3LCAweDg3QTcsIDB4MUY2QSwNCi0gICAgMHg4N0E4LCAweDg3QTgsIDB4MURBOCwgMHg4N0E5LCAweDg3QUEsIDB4MUY2OCwgMHg4N0FCLCAweDg3QUIsIDB4MURBNiwNCi0gICAgMHg4N0FDLCAweDg3QUMsIDB4MURBOSwgMHg4N0FELCAweDg3QUQsIDB4MURBRiwgMHg4N0FFLCAweDg3QUUsIDB4MUY2RSwNCi0gICAgMHg4N0FGLCAweDg3QUYsIDB4MUY2QywgMHg4N0IwLCAweDg3QjAsIDB4MURBQiwgMHg4N0IxLCAweDg3QjEsIDB4MUY2RCwNCi0gICAgMHg4N0IyLCAweDg3QjIsIDB4MUY2QiwgMHg4N0IzLCAweDg3QjMsIDB4MURBQywgMHg4N0I0LCAweDg3QjQsIDB4MUY2RiwNCi0gICAgMHg4N0I1LCAweDg3QjUsIDB4MURBRSwgMHg4N0JELCAweDg3QkQsIDB4MUY3MCwgMHg4N0JFLCAweDg3QkYsIDB4MUY3MywNCi0gICAgMHg4N0MwLCAweDg3QzEsIDB4MUY3MSwgMHg4N0U1LCAweDg3RTcsIDB4MURDNSwgMHg4N0U4LCAweDg3RTgsIDB4MjA4MywNCi0gICAgMHg4N0ZBLCAweDg3RkEsIDB4MUY3NiwgMHg4N0ZCLCAweDg3RkMsIDB4MjA4MSwgMHg4ODQwLCAweDg4NDAsIDB4MURDOCwNCi0gICAgMHg4ODQxLCAweDg4NDIsIDB4MURDRCwgMHg4ODU0LCAweDg4NTUsIDB4MURCOCwgMHg4ODY4LCAweDg4NjgsIDB4MUYxNiwNCi0gICAgMHg4ODZBLCAweDg4NkQsIDB4MjA3OSwgMHg4ODlGLCAweDg4RkMsIDB4MDQ2NSwgMHg4OTQwLCAweDg5N0UsIDB4MDRDMywNCi0gICAgMHg4OTgwLCAweDg5RkMsIDB4MDUwMiwgMHg4QTQwLCAweDhBN0UsIDB4MDU3RiwgMHg4QTgwLCAweDhBRkMsIDB4MDVCRSwNCi0gICAgMHg4QjQwLCAweDhCN0UsIDB4MDYzQiwgMHg4QjgwLCAweDhCRkMsIDB4MDY3QSwgMHg4QzQwLCAweDhDN0UsIDB4MDZGNywNCi0gICAgMHg4QzgwLCAweDhDRkMsIDB4MDczNiwgMHg4RDQwLCAweDhEN0UsIDB4MDdCMywgMHg4RDgwLCAweDhERkMsIDB4MDdGMiwNCi0gICAgMHg4RTQwLCAweDhFN0UsIDB4MDg2RiwgMHg4RTgwLCAweDhFRkMsIDB4MDhBRSwgMHg4RjQwLCAweDhGN0UsIDB4MDkyQiwNCi0gICAgMHg4RjgwLCAweDhGRkMsIDB4MDk2QSwgMHg5MDQwLCAweDkwN0UsIDB4MDlFNywgMHg5MDgwLCAweDkwRkMsIDB4MEEyNiwNCi0gICAgMHg5MTQwLCAweDkxN0UsIDB4MEFBMywgMHg5MTgwLCAweDkxRkMsIDB4MEFFMiwgMHg5MjQwLCAweDkyN0UsIDB4MEI1RiwNCi0gICAgMHg5MjgwLCAweDkyRkMsIDB4MEI5RSwgMHg5MzQwLCAweDkzN0UsIDB4MEMxQiwgMHg5MzgwLCAweDkzRkMsIDB4MEM1QSwNCi0gICAgMHg5NDQwLCAweDk0N0UsIDB4MENENywgMHg5NDgwLCAweDk0RkMsIDB4MEQxNiwgMHg5NTQwLCAweDk1N0UsIDB4MEQ5MywNCi0gICAgMHg5NTgwLCAweDk1RkMsIDB4MEREMiwgMHg5NjQwLCAweDk2N0UsIDB4MEU0RiwgMHg5NjgwLCAweDk2RkMsIDB4MEU4RSwNCi0gICAgMHg5NzQwLCAweDk3N0UsIDB4MEYwQiwgMHg5NzgwLCAweDk3RkMsIDB4MEY0QSwgMHg5ODQwLCAweDk4NzIsIDB4MEZDNywNCi0gICAgMHg5ODlGLCAweDk4RkMsIDB4MEZGQSwgMHg5OTQwLCAweDk5N0UsIDB4MTA1OCwgMHg5OTgwLCAweDk5RkMsIDB4MTA5NywNCi0gICAgMHg5QTQwLCAweDlBN0UsIDB4MTExNCwgMHg5QTgwLCAweDlBRkMsIDB4MTE1MywgMHg5QjQwLCAweDlCN0UsIDB4MTFEMCwNCi0gICAgMHg5QjgwLCAweDlCRkMsIDB4MTIwRiwgMHg5QzQwLCAweDlDN0UsIDB4MTI4QywgMHg5QzgwLCAweDlDRkMsIDB4MTJDQiwNCi0gICAgMHg5RDQwLCAweDlEN0UsIDB4MTM0OCwgMHg5RDgwLCAweDlERkMsIDB4MTM4NywgMHg5RTQwLCAweDlFN0UsIDB4MTQwNCwNCi0gICAgMHg5RTgwLCAweDlFRkMsIDB4MTQ0MywgMHg5RjQwLCAweDlGN0UsIDB4MTRDMCwgMHg5RjgwLCAweDlGRkMsIDB4MTRGRiwNCi0gICAgMHhFMDQwLCAweEUwN0UsIDB4MTU3QywgMHhFMDgwLCAweEUwRkMsIDB4MTVCQiwgMHhFMTQwLCAweEUxN0UsIDB4MTYzOCwNCi0gICAgMHhFMTgwLCAweEUxRkMsIDB4MTY3NywgMHhFMjQwLCAweEUyN0UsIDB4MTZGNCwgMHhFMjgwLCAweEUyRkMsIDB4MTczMywNCi0gICAgMHhFMzQwLCAweEUzN0UsIDB4MTdCMCwgMHhFMzgwLCAweEUzRkMsIDB4MTdFRiwgMHhFNDQwLCAweEU0N0UsIDB4MTg2QywNCi0gICAgMHhFNDgwLCAweEU0RkMsIDB4MThBQiwgMHhFNTQwLCAweEU1N0UsIDB4MTkyOCwgMHhFNTgwLCAweEU1RkMsIDB4MTk2NywNCi0gICAgMHhFNjQwLCAweEU2N0UsIDB4MTlFNCwgMHhFNjgwLCAweEU2RkMsIDB4MUEyMywgMHhFNzQwLCAweEU3N0UsIDB4MUFBMCwNCi0gICAgMHhFNzgwLCAweEU3RkMsIDB4MUFERiwgMHhFODQwLCAweEU4N0UsIDB4MUI1QywgMHhFODgwLCAweEU4RkMsIDB4MUI5QiwNCi0gICAgMHhFOTQwLCAweEU5N0UsIDB4MUMxOCwgMHhFOTgwLCAweEU5RkMsIDB4MUM1NywgMHhFQTQwLCAweEVBN0UsIDB4MUNENCwNCi0gICAgMHhFQTgwLCAweEVBQTIsIDB4MUQxMywgMHhFQUEzLCAweEVBQTQsIDB4MjA1QywgMHhFQjQxLCAweEVCNDIsIDB4MUVDRiwNCi0gICAgMHhFQjUwLCAweEVCNTEsIDB4MUVEMSwgMHhFQjVCLCAweEVCNUQsIDB4MUVEMywgMHhFQjYwLCAweEVCNjQsIDB4MUVENiwNCi0gICAgMHhFQjY5LCAweEVCN0EsIDB4MUVEQiwgMHhFQjgxLCAweEVCODEsIDB4MUVFRCwgMHhFQzlGLCAweEVDOUYsIDB4MUVFRSwNCi0gICAgMHhFQ0ExLCAweEVDQTEsIDB4MUVFRiwgMHhFQ0EzLCAweEVDQTMsIDB4MUVGMCwgMHhFQ0E1LCAweEVDQTUsIDB4MUVGMSwNCi0gICAgMHhFQ0E3LCAweEVDQTcsIDB4MUVGMiwgMHhFQ0MxLCAweEVDQzEsIDB4MUVGMywgMHhFQ0UxLCAweEVDRTEsIDB4MUVGNCwNCi0gICAgMHhFQ0UzLCAweEVDRTMsIDB4MUVGNSwgMHhFQ0U1LCAweEVDRTUsIDB4MUVGNiwgMHhFQ0VDLCAweEVDRUMsIDB4MUVGNywNCi0gICAgMHhFRDQwLCAweEVENDAsIDB4MUVGOCwgMHhFRDQyLCAweEVENDIsIDB4MUVGOSwgMHhFRDQ0LCAweEVENDQsIDB4MUVGQSwNCi0gICAgMHhFRDQ2LCAweEVENDYsIDB4MUVGQiwgMHhFRDQ4LCAweEVENDgsIDB4MUVGQywgMHhFRDYyLCAweEVENjIsIDB4MUVGRCwNCi0gICAgMHhFRDgzLCAweEVEODMsIDB4MUVGRSwgMHhFRDg1LCAweEVEODUsIDB4MUVGRiwgMHhFRDg3LCAweEVEODcsIDB4MUYwMCwNCi0gICAgMHhFRDhFLCAweEVEOEUsIDB4MUYwMSwgMHhFRDk1LCAweEVEOTYsIDB4MUYwMiwNCi19Ow0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBzaG9ydCBnX0ZYQ01BUF85MHB2X1JLU0pfSF8xWzI2MyAqIDNdID0geworICAgIDB4MDAyMCwgMHgwMDdFLCAweDAwMDEsIDB4MDA4MCwgMHgwMDgwLCAweDAwNjEsIDB4MDBBMCwgMHgwMERGLCAweDAxNDYsCisgICAgMHgwMEZELCAweDAwRkQsIDB4MDA5OCwgMHgwMEZFLCAweDAwRkUsIDB4MDBFNCwgMHgwMEZGLCAweDAwRkYsIDB4MDA3QywKKyAgICAweDgxNDAsIDB4ODE3RSwgMHgwMjc5LCAweDgxODAsIDB4ODFBQywgMHgwMkI4LCAweDgxQjgsIDB4ODFCRiwgMHgwMkU1LAorICAgIDB4ODFDOCwgMHg4MUNFLCAweDAyRUQsIDB4ODFEQSwgMHg4MUU4LCAweDAyRjQsIDB4ODFGMCwgMHg4MUY3LCAweDAzMDMsCisgICAgMHg4MUZDLCAweDgxRkMsIDB4MDMwQiwgMHg4MjRGLCAweDgyNTgsIDB4MDMwQywgMHg4MjYwLCAweDgyNzksIDB4MDMxNiwKKyAgICAweDgyODEsIDB4ODI5QSwgMHgwMzMwLCAweDgyOUYsIDB4ODJGMSwgMHgwMzRBLCAweDgzNDAsIDB4ODM3RSwgMHgwMzlELAorICAgIDB4ODM4MCwgMHg4Mzk2LCAweDAzREMsIDB4ODM5RiwgMHg4M0I2LCAweDAzRjMsIDB4ODNCRiwgMHg4M0Q2LCAweDA0MEIsCisgICAgMHg4NDQwLCAweDg0NjAsIDB4MDQyMywgMHg4NDcwLCAweDg0N0UsIDB4MDQ0NCwgMHg4NDgwLCAweDg0OTEsIDB4MDQ1MywKKyAgICAweDg0OUYsIDB4ODQ5RiwgMHgxRDM3LCAweDg0QTAsIDB4ODRBMCwgMHgxRDM5LCAweDg0QTEsIDB4ODRBMSwgMHgxRDQzLAorICAgIDB4ODRBMiwgMHg4NEEyLCAweDFENDcsIDB4ODRBMywgMHg4NEEzLCAweDFENEYsIDB4ODRBNCwgMHg4NEE0LCAweDFENEIsCisgICAgMHg4NEE1LCAweDg0QTUsIDB4MUQ1MywgMHg4NEE2LCAweDg0QTYsIDB4MUQ2MywgMHg4NEE3LCAweDg0QTcsIDB4MUQ1QiwKKyAgICAweDg0QTgsIDB4ODRBOCwgMHgxRDZCLCAweDg0QTksIDB4ODRBOSwgMHgxRDczLCAweDg0QUEsIDB4ODRBQSwgMHgxRDM4LAorICAgIDB4ODRBQiwgMHg4NEFCLCAweDFEM0EsIDB4ODRBQywgMHg4NEFDLCAweDFENDYsIDB4ODRBRCwgMHg4NEFELCAweDFENEEsCisgICAgMHg4NEFFLCAweDg0QUUsIDB4MUQ1MiwgMHg4NEFGLCAweDg0QUYsIDB4MUQ0RSwgMHg4NEIwLCAweDg0QjAsIDB4MUQ1QSwKKyAgICAweDg0QjEsIDB4ODRCMSwgMHgxRDZBLCAweDg0QjIsIDB4ODRCMiwgMHgxRDYyLCAweDg0QjMsIDB4ODRCMywgMHgxRDcyLAorICAgIDB4ODRCNCwgMHg4NEI0LCAweDFEODIsIDB4ODRCNSwgMHg4NEI1LCAweDFENTcsIDB4ODRCNiwgMHg4NEI2LCAweDFENjYsCisgICAgMHg4NEI3LCAweDg0QjcsIDB4MUQ1RiwgMHg4NEI4LCAweDg0QjgsIDB4MUQ2RSwgMHg4NEI5LCAweDg0QjksIDB4MUQ3NiwKKyAgICAweDg0QkEsIDB4ODRCQSwgMHgxRDU0LCAweDg0QkIsIDB4ODRCQiwgMHgxRDY3LCAweDg0QkMsIDB4ODRCQywgMHgxRDVDLAorICAgIDB4ODRCRCwgMHg4NEJELCAweDFENkYsIDB4ODRCRSwgMHg4NEJFLCAweDFENzksIDB4ODU0MCwgMHg4NTUzLCAweDFEODMsCisgICAgMHg4NTVFLCAweDg1NzEsIDB4MUY4NywgMHg4NTdDLCAweDg1N0UsIDB4MjA1RSwgMHg4NTgwLCAweDg1ODUsIDB4MjA2MSwKKyAgICAweDg1OTEsIDB4ODU5QSwgMHgxRjdELCAweDg1OUYsIDB4ODVBOCwgMHgxRDk3LCAweDg1QTksIDB4ODVBQSwgMHgyMDIxLAorICAgIDB4ODVBQiwgMHg4NUFELCAweDIwNjcsIDB4ODVCMywgMHg4NUJDLCAweDFGOUMsIDB4ODVCRCwgMHg4NUMxLCAweDIwNkEsCisgICAgMHg4NURCLCAweDg1RjQsIDB4MUZCMCwgMHg4NjQwLCAweDg2NDAsIDB4MURCMSwgMHg4NjQxLCAweDg2NDEsIDB4MUZGQSwKKyAgICAweDg2NDIsIDB4ODY0MiwgMHgxREIyLCAweDg2NDMsIDB4ODY0MywgMHgxRjU0LCAweDg2NDQsIDB4ODY0NCwgMHgxRjU2LAorICAgIDB4ODY0NSwgMHg4NjQ1LCAweDIwNkYsIDB4ODY0NiwgMHg4NjQ2LCAweDFEQjcsIDB4ODY0NywgMHg4NjQ3LCAweDFGNTcsCisgICAgMHg4NjQ4LCAweDg2NDgsIDB4MURCMywgMHg4NjQ5LCAweDg2NDksIDB4MUY1NSwgMHg4NjRBLCAweDg2NEEsIDB4MURCNCwKKyAgICAweDg2NEIsIDB4ODY0QiwgMHgyMDcwLCAweDg2NEMsIDB4ODY0RCwgMHgxREI1LCAweDg2NEUsIDB4ODY0RSwgMHgxRjY1LAorICAgIDB4ODY0RiwgMHg4NjU1LCAweDFGNTgsIDB4ODY1NiwgMHg4NjU2LCAweDIwNzEsIDB4ODY1NywgMHg4NjU3LCAweDFGNjQsCisgICAgMHg4NjU4LCAweDg2NTksIDB4MUY2MiwgMHg4NjVBLCAweDg2NUMsIDB4MUY1RiwgMHg4NjVELCAweDg2NUQsIDB4MjA3MiwKKyAgICAweDg2OUIsIDB4ODY5RCwgMHgxREJBLCAweDg2OUUsIDB4ODY5RSwgMHgyMDczLCAweDg2OUYsIDB4ODY5RiwgMHgxRjUyLAorICAgIDB4ODZBMCwgMHg4NkExLCAweDFGNTAsIDB4ODZBMiwgMHg4NkEyLCAweDFGNTMsIDB4ODZBMywgMHg4NkEzLCAweDIwMTMsCisgICAgMHg4NkE0LCAweDg2QTQsIDB4MjAxNSwgMHg4NkE1LCAweDg2QTUsIDB4MjAxNCwgMHg4NkE2LCAweDg2QTYsIDB4MjAxNiwKKyAgICAweDg2QjMsIDB4ODZCMywgMHgxRjdBLCAweDg2QjQsIDB4ODZCNCwgMHgxRjc4LCAweDg2QjUsIDB4ODZCNSwgMHgyMDc0LAorICAgIDB4ODZDNywgMHg4NkNBLCAweDIwMUIsIDB4ODZDQiwgMHg4NkNFLCAweDIwNzUsIDB4ODZDRiwgMHg4NkNGLCAweDFGNEUsCisgICAgMHg4NkQwLCAweDg2RDAsIDB4MUY0RCwgMHg4NkQxLCAweDg2RDEsIDB4MUY0QywgMHg4NkQyLCAweDg2RDIsIDB4MUY0QiwKKyAgICAweDg2RDMsIDB4ODZENiwgMHgyMDBFLCAweDg3NDAsIDB4ODc0NiwgMHgyMDA1LCAweDg3NDcsIDB4ODc0NywgMHgxRkQ2LAorICAgIDB4ODc0OCwgMHg4NzQ4LCAweDIwMEMsIDB4ODc0OSwgMHg4NzQ5LCAweDFGRDEsIDB4ODc0QSwgMHg4NzRBLCAweDFGQ0EsCisgICAgMHg4NzRCLCAweDg3NEIsIDB4MURDNCwgMHg4NzRDLCAweDg3NEMsIDB4MUZENywgMHg4NzRELCAweDg3NEQsIDB4MURDMiwKKyAgICAweDg3NEUsIDB4ODc0RSwgMHgxRkQyLCAweDg3NEYsIDB4ODc0RiwgMHgxRkNELCAweDg3NTAsIDB4ODc1MCwgMHgxREMzLAorICAgIDB4ODc1MSwgMHg4NzUxLCAweDFGRDUsIDB4ODc1MiwgMHg4NzUyLCAweDFGRDMsIDB4ODc1MywgMHg4NzUzLCAweDFGQ0YsCisgICAgMHg4NzU0LCAweDg3NTQsIDB4MUZENCwgMHg4NzU1LCAweDg3NTUsIDB4MUZEMCwgMHg4NzU2LCAweDg3NTcsIDB4MUZDQiwKKyAgICAweDg3NTgsIDB4ODc1OCwgMHgxRkNFLCAweDg3OTEsIDB4ODc5MiwgMHgyMDdELCAweDg3OTMsIDB4ODc5NywgMHgxREJELAorICAgIDB4ODc5OCwgMHg4Nzk4LCAweDFGREEsIDB4ODc5OSwgMHg4Nzk5LCAweDFGRTUsIDB4ODc5QSwgMHg4NzlBLCAweDIwN0YsCisgICAgMHg4NzlCLCAweDg3OUIsIDB4MUZERSwgMHg4NzlDLCAweDg3OUMsIDB4MUZGRiwgMHg4NzlELCAweDg3OUQsIDB4MjA4MCwKKyAgICAweDg3OUUsIDB4ODc5RSwgMHgyMDFGLCAweDg3OUYsIDB4ODc5RiwgMHgxREExLCAweDg3QTAsIDB4ODdBMCwgMHgxRjY2LAorICAgIDB4ODdBMSwgMHg4N0ExLCAweDFEQTQsIDB4ODdBMiwgMHg4N0EyLCAweDFEQTIsIDB4ODdBMywgMHg4N0EzLCAweDFGNjcsCisgICAgMHg4N0E0LCAweDg3QTQsIDB4MUZGNywgMHg4N0E1LCAweDg3QTYsIDB4MjA4NywgMHg4N0E3LCAweDg3QTcsIDB4MUY2QSwKKyAgICAweDg3QTgsIDB4ODdBOCwgMHgxREE4LCAweDg3QTksIDB4ODdBQSwgMHgxRjY4LCAweDg3QUIsIDB4ODdBQiwgMHgxREE2LAorICAgIDB4ODdBQywgMHg4N0FDLCAweDFEQTksIDB4ODdBRCwgMHg4N0FELCAweDFEQUYsIDB4ODdBRSwgMHg4N0FFLCAweDFGNkUsCisgICAgMHg4N0FGLCAweDg3QUYsIDB4MUY2QywgMHg4N0IwLCAweDg3QjAsIDB4MURBQiwgMHg4N0IxLCAweDg3QjEsIDB4MUY2RCwKKyAgICAweDg3QjIsIDB4ODdCMiwgMHgxRjZCLCAweDg3QjMsIDB4ODdCMywgMHgxREFDLCAweDg3QjQsIDB4ODdCNCwgMHgxRjZGLAorICAgIDB4ODdCNSwgMHg4N0I1LCAweDFEQUUsIDB4ODdCRCwgMHg4N0JELCAweDFGNzAsIDB4ODdCRSwgMHg4N0JGLCAweDFGNzMsCisgICAgMHg4N0MwLCAweDg3QzEsIDB4MUY3MSwgMHg4N0U1LCAweDg3RTcsIDB4MURDNSwgMHg4N0U4LCAweDg3RTgsIDB4MjA4MywKKyAgICAweDg3RkEsIDB4ODdGQSwgMHgxRjc2LCAweDg3RkIsIDB4ODdGQywgMHgyMDgxLCAweDg4NDAsIDB4ODg0MCwgMHgxREM4LAorICAgIDB4ODg0MSwgMHg4ODQyLCAweDFEQ0QsIDB4ODg1NCwgMHg4ODU1LCAweDFEQjgsIDB4ODg2OCwgMHg4ODY4LCAweDFGMTYsCisgICAgMHg4ODZBLCAweDg4NkQsIDB4MjA3OSwgMHg4ODlGLCAweDg4RkMsIDB4MDQ2NSwgMHg4OTQwLCAweDg5N0UsIDB4MDRDMywKKyAgICAweDg5ODAsIDB4ODlGQywgMHgwNTAyLCAweDhBNDAsIDB4OEE3RSwgMHgwNTdGLCAweDhBODAsIDB4OEFGQywgMHgwNUJFLAorICAgIDB4OEI0MCwgMHg4QjdFLCAweDA2M0IsIDB4OEI4MCwgMHg4QkZDLCAweDA2N0EsIDB4OEM0MCwgMHg4QzdFLCAweDA2RjcsCisgICAgMHg4QzgwLCAweDhDRkMsIDB4MDczNiwgMHg4RDQwLCAweDhEN0UsIDB4MDdCMywgMHg4RDgwLCAweDhERkMsIDB4MDdGMiwKKyAgICAweDhFNDAsIDB4OEU3RSwgMHgwODZGLCAweDhFODAsIDB4OEVGQywgMHgwOEFFLCAweDhGNDAsIDB4OEY3RSwgMHgwOTJCLAorICAgIDB4OEY4MCwgMHg4RkZDLCAweDA5NkEsIDB4OTA0MCwgMHg5MDdFLCAweDA5RTcsIDB4OTA4MCwgMHg5MEZDLCAweDBBMjYsCisgICAgMHg5MTQwLCAweDkxN0UsIDB4MEFBMywgMHg5MTgwLCAweDkxRkMsIDB4MEFFMiwgMHg5MjQwLCAweDkyN0UsIDB4MEI1RiwKKyAgICAweDkyODAsIDB4OTJGQywgMHgwQjlFLCAweDkzNDAsIDB4OTM3RSwgMHgwQzFCLCAweDkzODAsIDB4OTNGQywgMHgwQzVBLAorICAgIDB4OTQ0MCwgMHg5NDdFLCAweDBDRDcsIDB4OTQ4MCwgMHg5NEZDLCAweDBEMTYsIDB4OTU0MCwgMHg5NTdFLCAweDBEOTMsCisgICAgMHg5NTgwLCAweDk1RkMsIDB4MEREMiwgMHg5NjQwLCAweDk2N0UsIDB4MEU0RiwgMHg5NjgwLCAweDk2RkMsIDB4MEU4RSwKKyAgICAweDk3NDAsIDB4OTc3RSwgMHgwRjBCLCAweDk3ODAsIDB4OTdGQywgMHgwRjRBLCAweDk4NDAsIDB4OTg3MiwgMHgwRkM3LAorICAgIDB4OTg5RiwgMHg5OEZDLCAweDBGRkEsIDB4OTk0MCwgMHg5OTdFLCAweDEwNTgsIDB4OTk4MCwgMHg5OUZDLCAweDEwOTcsCisgICAgMHg5QTQwLCAweDlBN0UsIDB4MTExNCwgMHg5QTgwLCAweDlBRkMsIDB4MTE1MywgMHg5QjQwLCAweDlCN0UsIDB4MTFEMCwKKyAgICAweDlCODAsIDB4OUJGQywgMHgxMjBGLCAweDlDNDAsIDB4OUM3RSwgMHgxMjhDLCAweDlDODAsIDB4OUNGQywgMHgxMkNCLAorICAgIDB4OUQ0MCwgMHg5RDdFLCAweDEzNDgsIDB4OUQ4MCwgMHg5REZDLCAweDEzODcsIDB4OUU0MCwgMHg5RTdFLCAweDE0MDQsCisgICAgMHg5RTgwLCAweDlFRkMsIDB4MTQ0MywgMHg5RjQwLCAweDlGN0UsIDB4MTRDMCwgMHg5RjgwLCAweDlGRkMsIDB4MTRGRiwKKyAgICAweEUwNDAsIDB4RTA3RSwgMHgxNTdDLCAweEUwODAsIDB4RTBGQywgMHgxNUJCLCAweEUxNDAsIDB4RTE3RSwgMHgxNjM4LAorICAgIDB4RTE4MCwgMHhFMUZDLCAweDE2NzcsIDB4RTI0MCwgMHhFMjdFLCAweDE2RjQsIDB4RTI4MCwgMHhFMkZDLCAweDE3MzMsCisgICAgMHhFMzQwLCAweEUzN0UsIDB4MTdCMCwgMHhFMzgwLCAweEUzRkMsIDB4MTdFRiwgMHhFNDQwLCAweEU0N0UsIDB4MTg2QywKKyAgICAweEU0ODAsIDB4RTRGQywgMHgxOEFCLCAweEU1NDAsIDB4RTU3RSwgMHgxOTI4LCAweEU1ODAsIDB4RTVGQywgMHgxOTY3LAorICAgIDB4RTY0MCwgMHhFNjdFLCAweDE5RTQsIDB4RTY4MCwgMHhFNkZDLCAweDFBMjMsIDB4RTc0MCwgMHhFNzdFLCAweDFBQTAsCisgICAgMHhFNzgwLCAweEU3RkMsIDB4MUFERiwgMHhFODQwLCAweEU4N0UsIDB4MUI1QywgMHhFODgwLCAweEU4RkMsIDB4MUI5QiwKKyAgICAweEU5NDAsIDB4RTk3RSwgMHgxQzE4LCAweEU5ODAsIDB4RTlGQywgMHgxQzU3LCAweEVBNDAsIDB4RUE3RSwgMHgxQ0Q0LAorICAgIDB4RUE4MCwgMHhFQUEyLCAweDFEMTMsIDB4RUFBMywgMHhFQUE0LCAweDIwNUMsIDB4RUI0MSwgMHhFQjQyLCAweDFFQ0YsCisgICAgMHhFQjUwLCAweEVCNTEsIDB4MUVEMSwgMHhFQjVCLCAweEVCNUQsIDB4MUVEMywgMHhFQjYwLCAweEVCNjQsIDB4MUVENiwKKyAgICAweEVCNjksIDB4RUI3QSwgMHgxRURCLCAweEVCODEsIDB4RUI4MSwgMHgxRUVELCAweEVDOUYsIDB4RUM5RiwgMHgxRUVFLAorICAgIDB4RUNBMSwgMHhFQ0ExLCAweDFFRUYsIDB4RUNBMywgMHhFQ0EzLCAweDFFRjAsIDB4RUNBNSwgMHhFQ0E1LCAweDFFRjEsCisgICAgMHhFQ0E3LCAweEVDQTcsIDB4MUVGMiwgMHhFQ0MxLCAweEVDQzEsIDB4MUVGMywgMHhFQ0UxLCAweEVDRTEsIDB4MUVGNCwKKyAgICAweEVDRTMsIDB4RUNFMywgMHgxRUY1LCAweEVDRTUsIDB4RUNFNSwgMHgxRUY2LCAweEVDRUMsIDB4RUNFQywgMHgxRUY3LAorICAgIDB4RUQ0MCwgMHhFRDQwLCAweDFFRjgsIDB4RUQ0MiwgMHhFRDQyLCAweDFFRjksIDB4RUQ0NCwgMHhFRDQ0LCAweDFFRkEsCisgICAgMHhFRDQ2LCAweEVENDYsIDB4MUVGQiwgMHhFRDQ4LCAweEVENDgsIDB4MUVGQywgMHhFRDYyLCAweEVENjIsIDB4MUVGRCwKKyAgICAweEVEODMsIDB4RUQ4MywgMHgxRUZFLCAweEVEODUsIDB4RUQ4NSwgMHgxRUZGLCAweEVEODcsIDB4RUQ4NywgMHgxRjAwLAorICAgIDB4RUQ4RSwgMHhFRDhFLCAweDFGMDEsIDB4RUQ5NSwgMHhFRDk2LCAweDFGMDIsCit9OwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0phcGFuMS9BZGQtUktTSi1IXzEuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0phcGFuMS9BZGQtUktTSi1IXzEuY3BwCmluZGV4IGZkNTgwZDUuLjg0OGNiNDkgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvQWRkLVJLU0otSF8xLmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvSmFwYW4xL0FkZC1SS1NKLUhfMS5jcHAKQEAgLTEsMjIwICsxLDIyMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0FkZF9SS1NKX0hfMVs2MzUgKiAzXSA9IHsNCi0gICAgMHgwMDIwLCAweDAwN0UsIDB4MDBFNywgMHgwMEEwLCAweDAwREYsIDB4MDE0NiwgMHg4MTQwLCAweDgxN0UsIDB4MDI3OSwNCi0gICAgMHg4MTgwLCAweDgxQUMsIDB4MDJCOCwgMHg4MUI4LCAweDgxQkYsIDB4MDJFNSwgMHg4MUM4LCAweDgxQ0UsIDB4MDJFRCwNCi0gICAgMHg4MURBLCAweDgxRTgsIDB4MDJGNCwgMHg4MUYwLCAweDgxRjcsIDB4MDMwMywgMHg4MUZDLCAweDgxRkMsIDB4MDMwQiwNCi0gICAgMHg4MjRGLCAweDgyNTgsIDB4MDMwQywgMHg4MjYwLCAweDgyNzksIDB4MDMxNiwgMHg4MjgxLCAweDgyOUEsIDB4MDMzMCwNCi0gICAgMHg4MjlGLCAweDgyRjEsIDB4MDM0QSwgMHg4MkYyLCAweDgyRjQsIDB4MUYxNiwgMHg4MzQwLCAweDgzN0UsIDB4MDM5RCwNCi0gICAgMHg4MzgwLCAweDgzOTYsIDB4MDNEQywgMHg4MzlGLCAweDgzQjYsIDB4MDNGMywgMHg4M0JGLCAweDgzRDYsIDB4MDQwQiwNCi0gICAgMHg4NDQwLCAweDg0NjAsIDB4MDQyMywgMHg4NDcwLCAweDg0N0UsIDB4MDQ0NCwgMHg4NDgwLCAweDg0OTEsIDB4MDQ1MywNCi0gICAgMHg4NDlGLCAweDg0OUYsIDB4MUQzNywgMHg4NEEwLCAweDg0QTAsIDB4MUQzOSwgMHg4NEExLCAweDg0QTEsIDB4MUQ0MywNCi0gICAgMHg4NEEyLCAweDg0QTIsIDB4MUQ0NywgMHg4NEEzLCAweDg0QTMsIDB4MUQ0RiwgMHg4NEE0LCAweDg0QTQsIDB4MUQ0QiwNCi0gICAgMHg4NEE1LCAweDg0QTUsIDB4MUQ1MywgMHg4NEE2LCAweDg0QTYsIDB4MUQ2MywgMHg4NEE3LCAweDg0QTcsIDB4MUQ1QiwNCi0gICAgMHg4NEE4LCAweDg0QTgsIDB4MUQ2QiwgMHg4NEE5LCAweDg0QTksIDB4MUQ3MywgMHg4NEFBLCAweDg0QUEsIDB4MUQzOCwNCi0gICAgMHg4NEFCLCAweDg0QUIsIDB4MUQzQSwgMHg4NEFDLCAweDg0QUMsIDB4MUQ0NiwgMHg4NEFELCAweDg0QUQsIDB4MUQ0QSwNCi0gICAgMHg4NEFFLCAweDg0QUUsIDB4MUQ1MiwgMHg4NEFGLCAweDg0QUYsIDB4MUQ0RSwgMHg4NEIwLCAweDg0QjAsIDB4MUQ1QSwNCi0gICAgMHg4NEIxLCAweDg0QjEsIDB4MUQ2QSwgMHg4NEIyLCAweDg0QjIsIDB4MUQ2MiwgMHg4NEIzLCAweDg0QjMsIDB4MUQ3MiwNCi0gICAgMHg4NEI0LCAweDg0QjQsIDB4MUQ4MiwgMHg4NEI1LCAweDg0QjUsIDB4MUQ1NywgMHg4NEI2LCAweDg0QjYsIDB4MUQ2NiwNCi0gICAgMHg4NEI3LCAweDg0QjcsIDB4MUQ1RiwgMHg4NEI4LCAweDg0QjgsIDB4MUQ2RSwgMHg4NEI5LCAweDg0QjksIDB4MUQ3NiwNCi0gICAgMHg4NEJBLCAweDg0QkEsIDB4MUQ1NCwgMHg4NEJCLCAweDg0QkIsIDB4MUQ2NywgMHg4NEJDLCAweDg0QkMsIDB4MUQ1QywNCi0gICAgMHg4NEJELCAweDg0QkQsIDB4MUQ2RiwgMHg4NEJFLCAweDg0QkUsIDB4MUQ3OSwgMHg4ODlGLCAweDg4OUYsIDB4MDQ2NSwNCi0gICAgMHg4OEEwLCAweDg4QTAsIDB4MUREMSwgMHg4OEExLCAweDg4QUYsIDB4MDQ2NywgMHg4OEIwLCAweDg4QjAsIDB4MUYxOSwNCi0gICAgMHg4OEIxLCAweDg4QjgsIDB4MDQ3NywgMHg4OEI5LCAweDg4QjksIDB4MUREMiwgMHg4OEJBLCAweDg4RUIsIDB4MDQ4MCwNCi0gICAgMHg4OEVDLCAweDg4RUMsIDB4MUREMywgMHg4OEVELCAweDg4RUUsIDB4MDRCMywgMHg4OEVGLCAweDg4RUYsIDB4MUYxQSwNCi0gICAgMHg4OEYwLCAweDg4RjAsIDB4MDRCNiwgMHg4OEYxLCAweDg4RjEsIDB4MURENCwgMHg4OEYyLCAweDg4RjksIDB4MDRCOCwNCi0gICAgMHg4OEZBLCAweDg4RkEsIDB4MURENSwgMHg4OEZCLCAweDg4RkMsIDB4MDRDMSwgMHg4OTQwLCAweDg5NDgsIDB4MDRDMywNCi0gICAgMHg4OTQ5LCAweDg5NDksIDB4MURENiwgMHg4OTRBLCAweDg5NTEsIDB4MDRDRCwgMHg4OTUyLCAweDg5NTIsIDB4MUYxQiwNCi0gICAgMHg4OTUzLCAweDg5NTMsIDB4MDRENiwgMHg4OTU0LCAweDg5NTQsIDB4MURENywgMHg4OTU1LCAweDg5NTcsIDB4MDREOCwNCi0gICAgMHg4OTU4LCAweDg5NTgsIDB4MUYxQywgMHg4OTU5LCAweDg5NUIsIDB4MDREQywgMHg4OTVDLCAweDg5NUMsIDB4MUREQSwNCi0gICAgMHg4OTVELCAweDg5NjAsIDB4MDRFMCwgMHg4OTYxLCAweDg5NjEsIDB4MUREQiwgMHg4OTYyLCAweDg5N0UsIDB4MDRFNSwNCi0gICAgMHg4OTgwLCAweDg5OEEsIDB4MDUwMiwgMHg4OThCLCAweDg5OEIsIDB4MUREQywgMHg4OThDLCAweDg5QTUsIDB4MDUwRSwNCi0gICAgMHg4OUE2LCAweDg5QTYsIDB4MURERCwgMHg4OUE3LCAweDg5QTcsIDB4MDUyOSwgMHg4OUE4LCAweDg5QTgsIDB4MURERSwNCi0gICAgMHg4OUE5LCAweDg5REQsIDB4MDUyQiwgMHg4OURFLCAweDg5REUsIDB4MURERiwgMHg4OURGLCAweDg5RTQsIDB4MDU2MSwNCi0gICAgMHg4OUU1LCAweDg5RTUsIDB4MUYxRCwgMHg4OUU2LCAweDg5RjcsIDB4MDU2OCwgMHg4OUY4LCAweDg5RjgsIDB4MURFMCwNCi0gICAgMHg4OUY5LCAweDg5RkMsIDB4MDU3QiwgMHg4QTQwLCAweDhBNDAsIDB4MDU3RiwgMHg4QTQxLCAweDhBNDEsIDB4MURFMiwNCi0gICAgMHg4QTQyLCAweDhBN0UsIDB4MDU4MSwgMHg4QTgwLCAweDhBOEEsIDB4MDVCRSwgMHg4QThCLCAweDhBOEIsIDB4MURFNCwNCi0gICAgMHg4QThDLCAweDhBOTIsIDB4MDVDQSwgMHg4QTkzLCAweDhBOTMsIDB4MURFNSwgMHg4QTk0LCAweDhBOTksIDB4MDVEMiwNCi0gICAgMHg4QTlBLCAweDhBOUEsIDB4MURFNiwgMHg4QTlCLCAweDhBQkYsIDB4MDVEOSwgMHg4QUMwLCAweDhBQzAsIDB4MURFNywNCi0gICAgMHg4QUMxLCAweDhBQ0EsIDB4MDVGRiwgMHg4QUNCLCAweDhBQ0IsIDB4MURFOCwgMHg4QUNDLCAweDhBRTIsIDB4MDYwQSwNCi0gICAgMHg4QUUzLCAweDhBRTMsIDB4MURFOSwgMHg4QUU0LCAweDhBRkMsIDB4MDYyMiwgMHg4QjQwLCAweDhCNDksIDB4MDYzQiwNCi0gICAgMHg4QjRBLCAweDhCNEEsIDB4MURFQSwgMHg4QjRCLCAweDhCNUUsIDB4MDY0NiwgMHg4QjVGLCAweDhCNUYsIDB4MURFQiwNCi0gICAgMHg4QjYwLCAweDhCN0UsIDB4MDY1QiwgMHg4QjgwLCAweDhCODEsIDB4MDY3QSwgMHg4QjgyLCAweDhCODIsIDB4MUYxRSwNCi0gICAgMHg4QjgzLCAweDhCODcsIDB4MDY3RCwgMHg4Qjg4LCAweDhCODgsIDB4MUYxRiwgMHg4Qjg5LCAweDhCOUYsIDB4MDY4MywNCi0gICAgMHg4QkEwLCAweDhCQTAsIDB4MURFQywgMHg4QkExLCAweDhCQTcsIDB4MDY5QiwgMHg4QkE4LCAweDhCQTgsIDB4MURFRCwNCi0gICAgMHg4QkE5LCAweDhCQkYsIDB4MDZBMywgMHg4QkMwLCAweDhCQzAsIDB4MUYyMCwgMHg4QkMxLCAweDhCQ0MsIDB4MDZCQiwNCi0gICAgMHg4QkNELCAweDhCQ0QsIDB4MURFRSwgMHg4QkNFLCAweDhCRUEsIDB4MDZDOCwgMHg4QkVCLCAweDhCRUIsIDB4MURFRiwNCi0gICAgMHg4QkVDLCAweDhCRjEsIDB4MDZFNiwgMHg4QkYyLCAweDhCRjIsIDB4MURGMCwgMHg4QkYzLCAweDhCRjgsIDB4MDZFRCwNCi0gICAgMHg4QkY5LCAweDhCRjksIDB4MURGMSwgMHg4QkZBLCAweDhCRkEsIDB4MDZGNCwgMHg4QkZCLCAweDhCRkIsIDB4MURGMiwNCi0gICAgMHg4QkZDLCAweDhCRkMsIDB4MDZGNiwgMHg4QzQwLCAweDhDNTUsIDB4MDZGNywgMHg4QzU2LCAweDhDNTYsIDB4MURGNCwNCi0gICAgMHg4QzU3LCAweDhDNzAsIDB4MDcwRSwgMHg4QzcxLCAweDhDNzEsIDB4MURGNywgMHg4QzcyLCAweDhDN0UsIDB4MDcyOSwNCi0gICAgMHg4QzgwLCAweDhDOTAsIDB4MDczNiwgMHg4QzkxLCAweDhDOTEsIDB4MURGQSwgMHg4QzkyLCAweDhDOUMsIDB4MDc0OCwNCi0gICAgMHg4QzlELCAweDhDOUQsIDB4MUYyMSwgMHg4QzlFLCAweDhDOUUsIDB4MURGQywgMHg4QzlGLCAweDhDQjEsIDB4MDc1NSwNCi0gICAgMHg4Q0IyLCAweDhDQjIsIDB4MURGRCwgMHg4Q0IzLCAweDhDQkUsIDB4MDc2OSwgMHg4Q0JGLCAweDhDQkYsIDB4MURGRSwNCi0gICAgMHg4Q0MwLCAweDhDRkMsIDB4MDc3NiwgMHg4RDQwLCAweDhENDksIDB4MDdCMywgMHg4RDRBLCAweDhENEEsIDB4MURGRiwNCi0gICAgMHg4RDRCLCAweDhEN0UsIDB4MDdCRSwgMHg4RDgwLCAweDhEOEMsIDB4MDdGMiwgMHg4RDhELCAweDhEOEQsIDB4MUUwMiwNCi0gICAgMHg4RDhFLCAweDhEOTMsIDB4MDgwMCwgMHg4RDk0LCAweDhEOTQsIDB4MUUwMywgMHg4RDk1LCAweDhEOTgsIDB4MDgwNywNCi0gICAgMHg4RDk5LCAweDhEOTksIDB4MUUwNCwgMHg4RDlBLCAweDhERDAsIDB4MDgwQywgMHg4REQxLCAweDhERDEsIDB4MUUwNSwNCi0gICAgMHg4REQyLCAweDhERTQsIDB4MDg0NCwgMHg4REU1LCAweDhERTUsIDB4MUUwNiwgMHg4REU2LCAweDhERjEsIDB4MDg1OCwNCi0gICAgMHg4REYyLCAweDhERjIsIDB4MUUwNywgMHg4REYzLCAweDhERkMsIDB4MDg2NSwgMHg4RTQwLCAweDhFNDUsIDB4MDg2RiwNCi0gICAgMHg4RTQ2LCAweDhFNDYsIDB4MUUwOCwgMHg4RTQ3LCAweDhFNDgsIDB4MDg3NiwgMHg4RTQ5LCAweDhFNDksIDB4MUUwOSwNCi0gICAgMHg4RTRBLCAweDhFNEEsIDB4MDg3OSwgMHg4RTRCLCAweDhFNEIsIDB4MUUwQSwgMHg4RTRDLCAweDhFNTcsIDB4MDg3QiwNCi0gICAgMHg4RTU4LCAweDhFNTgsIDB4MUUwQiwgMHg4RTU5LCAweDhFNUYsIDB4MDg4OCwgMHg4RTYwLCAweDhFNjAsIDB4MUYyMiwNCi0gICAgMHg4RTYxLCAweDhFN0UsIDB4MDg5MCwgMHg4RTgwLCAweDhFQzUsIDB4MDhBRSwgMHg4RUM2LCAweDhFQzYsIDB4MUUwRCwNCi0gICAgMHg4RUM3LCAweDhFREEsIDB4MDhGNSwgMHg4RURCLCAweDhFREMsIDB4MUUwRiwgMHg4RURELCAweDhFRkMsIDB4MDkwQiwNCi0gICAgMHg4RjQwLCAweDhGNDksIDB4MDkyQiwgMHg4RjRBLCAweDhGNEEsIDB4MUUxMSwgMHg4RjRCLCAweDhGNTQsIDB4MDkzNiwNCi0gICAgMHg4RjU1LCAweDhGNTUsIDB4MUUxMiwgMHg4RjU2LCAweDhGN0UsIDB4MDk0MSwgMHg4RjgwLCAweDhGOEIsIDB4MDk2QSwNCi0gICAgMHg4RjhDLCAweDhGOEMsIDB4MUUxMywgMHg4RjhELCAweDhGOTEsIDB4MDk3NywgMHg4RjkyLCAweDhGOTMsIDB4MUUxNSwNCi0gICAgMHg4Rjk0LCAweDhGQTIsIDB4MDk3RSwgMHg4RkEzLCAweDhGQTMsIDB4MUUxNywgMHg4RkE0LCAweDhGQjAsIDB4MDk4RSwNCi0gICAgMHg4RkIxLCAweDhGQjEsIDB4MUUxOCwgMHg4RkIyLCAweDhGRDIsIDB4MDk5QywgMHg4RkQzLCAweDhGRDMsIDB4MUUxQSwNCi0gICAgMHg4RkQ0LCAweDhGREMsIDB4MDlCRSwgMHg4RkRELCAweDhGREQsIDB4MUUxQiwgMHg4RkRFLCAweDhGRTEsIDB4MDlDOCwNCi0gICAgMHg4RkUyLCAweDhGRTIsIDB4MUUxQywgMHg4RkUzLCAweDhGRkMsIDB4MDlDRCwgMHg5MDQwLCAweDkwNDgsIDB4MDlFNywNCi0gICAgMHg5MDQ5LCAweDkwNDksIDB4MUUxRCwgMHg5MDRBLCAweDkwNzcsIDB4MDlGMSwgMHg5MDc4LCAweDkwNzgsIDB4MUYyMywNCi0gICAgMHg5MDc5LCAweDkwN0UsIDB4MEEyMCwgMHg5MDgwLCAweDkwODAsIDB4MUUxRiwgMHg5MDgxLCAweDkwOUYsIDB4MEEyNywNCi0gICAgMHg5MEEwLCAweDkwQTAsIDB4MUUyMSwgMHg5MEExLCAweDkwRTMsIDB4MEE0NywgMHg5MEU0LCAweDkwRTQsIDB4MUUyMywNCi0gICAgMHg5MEU1LCAweDkwRUUsIDB4MEE4QiwgMHg5MEVGLCAweDkwRUYsIDB4MUUyNCwgMHg5MEYwLCAweDkwRjYsIDB4MEE5NiwNCi0gICAgMHg5MEY3LCAweDkwRjcsIDB4MUUyNiwgMHg5MEY4LCAweDkwRjgsIDB4MUYyNCwgMHg5MEY5LCAweDkwRjksIDB4MEE5RiwNCi0gICAgMHg5MEZBLCAweDkwRkIsIDB4MUYyNSwgMHg5MEZDLCAweDkwRkMsIDB4MEFBMiwgMHg5MTQwLCAweDkxNDUsIDB4MEFBMywNCi0gICAgMHg5MTQ2LCAweDkxNDYsIDB4MUUyOCwgMHg5MTQ3LCAweDkxNTcsIDB4MEFBQSwgMHg5MTU4LCAweDkxNTgsIDB4MUUyOSwNCi0gICAgMHg5MTU5LCAweDkxNkEsIDB4MEFCQywgMHg5MTZCLCAweDkxNkIsIDB4MUUyQSwgMHg5MTZDLCAweDkxNkQsIDB4MEFDRiwNCi0gICAgMHg5MTZFLCAweDkxNkUsIDB4MUUyQiwgMHg5MTZGLCAweDkxN0QsIDB4MEFEMiwgMHg5MTdFLCAweDkxN0UsIDB4MUUyQywNCi0gICAgMHg5MTgwLCAweDkxODgsIDB4MEFFMiwgMHg5MTg5LCAweDkxODksIDB4MUUyRCwgMHg5MThBLCAweDkxQjQsIDB4MEFFQywNCi0gICAgMHg5MUI1LCAweDkxQjUsIDB4MUYyNywgMHg5MUI2LCAweDkxQkEsIDB4MEIxOCwgMHg5MUJCLCAweDkxQkIsIDB4MUUyRSwNCi0gICAgMHg5MUJDLCAweDkxQ0EsIDB4MEIxRSwgMHg5MUNCLCAweDkxQ0IsIDB4MUUyRiwgMHg5MUNDLCAweDkxRDksIDB4MEIyRSwNCi0gICAgMHg5MURBLCAweDkxREEsIDB4MUUzMCwgMHg5MURCLCAweDkxRTAsIDB4MEIzRCwgMHg5MUUxLCAweDkxRTEsIDB4MUUzMSwNCi0gICAgMHg5MUUyLCAweDkxRUMsIDB4MEI0NCwgMHg5MUVELCAweDkxRUQsIDB4MUUzMiwgMHg5MUVFLCAweDkxRkEsIDB4MEI1MCwNCi0gICAgMHg5MUZCLCAweDkxRkIsIDB4MUUzNSwgMHg5MUZDLCAweDkxRkMsIDB4MEI1RSwgMHg5MjQwLCAweDkyNDUsIDB4MEI1RiwNCi0gICAgMHg5MjQ2LCAweDkyNDYsIDB4MUUzNiwgMHg5MjQ3LCAweDkyNDcsIDB4MEI2NiwgMHg5MjQ4LCAweDkyNDgsIDB4MUUzNywNCi0gICAgMHg5MjQ5LCAweDkyNEIsIDB4MEI2OCwgMHg5MjRDLCAweDkyNEQsIDB4MUUzOSwgMHg5MjRFLCAweDkyNUIsIDB4MEI2RCwNCi0gICAgMHg5MjVDLCAweDkyNUMsIDB4MUUzQiwgMHg5MjVELCAweDkyN0UsIDB4MEI3QywgMHg5MjgwLCAweDkyOEYsIDB4MEI5RSwNCi0gICAgMHg5MjkwLCAweDkyOTAsIDB4MUUzQywgMHg5MjkxLCAweDkyOTQsIDB4MEJBRiwgMHg5Mjk1LCAweDkyOTUsIDB4MUUzRCwNCi0gICAgMHg5Mjk2LCAweDkyOUIsIDB4MEJCNCwgMHg5MjlDLCAweDkyOUMsIDB4MUUzRSwgMHg5MjlELCAweDkyQkEsIDB4MEJCQiwNCi0gICAgMHg5MkJCLCAweDkyQkIsIDB4MUUzRiwgMHg5MkJDLCAweDkyQzUsIDB4MEJEQSwgMHg5MkM2LCAweDkyQzYsIDB4MUU0MCwNCi0gICAgMHg5MkM3LCAweDkyQzcsIDB4MEJFNSwgMHg5MkM4LCAweDkyQzgsIDB4MUU0MSwgMHg5MkM5LCAweDkyQ0MsIDB4MEJFNywNCi0gICAgMHg5MkNELCAweDkyQ0QsIDB4MUU0MywgMHg5MkNFLCAweDkyRkMsIDB4MEJFQywgMHg5MzQwLCAweDkzNDAsIDB4MEMxQiwNCi0gICAgMHg5MzQxLCAweDkzNDEsIDB4MUU0NCwgMHg5MzQyLCAweDkzNDUsIDB4MEMxRCwgMHg5MzQ2LCAweDkzNDYsIDB4MUU0NSwNCi0gICAgMHg5MzQ3LCAweDkzNEMsIDB4MEMyMiwgMHg5MzRELCAweDkzNEQsIDB4MUU0NiwgMHg5MzRFLCAweDkzNTQsIDB4MEMyOSwNCi0gICAgMHg5MzU1LCAweDkzNTUsIDB4MUU0NywgMHg5MzU2LCAweDkzNUQsIDB4MEMzMSwgMHg5MzVFLCAweDkzNUUsIDB4MUU0OCwNCi0gICAgMHg5MzVGLCAweDkzNjYsIDB4MEMzQSwgMHg5MzY3LCAweDkzNjcsIDB4MUU0OSwgMHg5MzY4LCAweDkzNjksIDB4MEM0MywNCi0gICAgMHg5MzZBLCAweDkzNkEsIDB4MUU0QSwgMHg5MzZCLCAweDkzNkYsIDB4MEM0NiwgMHg5MzcwLCAweDkzNzAsIDB4MUYyOCwNCi0gICAgMHg5MzcxLCAweDkzNzEsIDB4MUU0QywgMHg5MzcyLCAweDkzN0UsIDB4MEM0RCwgMHg5MzgwLCAweDkzODMsIDB4MEM1QSwNCi0gICAgMHg5Mzg0LCAweDkzODQsIDB4MUU0RCwgMHg5Mzg1LCAweDkzOTcsIDB4MEM1RiwgMHg5Mzk4LCAweDkzOTgsIDB4MUU0RSwNCi0gICAgMHg5Mzk5LCAweDkzQkYsIDB4MEM3MywgMHg5M0MwLCAweDkzQzAsIDB4MUU1MCwgMHg5M0MxLCAweDkzRDEsIDB4MEM5QiwNCi0gICAgMHg5M0QyLCAweDkzRDIsIDB4MUU1MSwgMHg5M0QzLCAweDkzRDgsIDB4MENBRCwgMHg5M0Q5LCAweDkzRDksIDB4MUU1MywNCi0gICAgMHg5M0RBLCAweDkzRTMsIDB4MENCNCwgMHg5M0U0LCAweDkzRTUsIDB4MUU1NiwgMHg5M0U2LCAweDkzRTcsIDB4MENDMCwNCi0gICAgMHg5M0U4LCAweDkzRTgsIDB4MUU1OCwgMHg5M0U5LCAweDkzRjMsIDB4MENDMywgMHg5M0Y0LCAweDkzRjQsIDB4MUVDMCwNCi0gICAgMHg5M0Y1LCAweDkzRkMsIDB4MENDRiwgMHg5NDQwLCAweDk0NDcsIDB4MENENywgMHg5NDQ4LCAweDk0NDgsIDB4MUU1OSwNCi0gICAgMHg5NDQ5LCAweDk0NDksIDB4MUYyOSwgMHg5NDRBLCAweDk0NTcsIDB4MENFMSwgMHg5NDU4LCAweDk0NTgsIDB4MUU1QSwNCi0gICAgMHg5NDU5LCAweDk0NzUsIDB4MENGMCwgMHg5NDc2LCAweDk0NzYsIDB4MUU1QiwgMHg5NDc3LCAweDk0N0UsIDB4MEQwRSwNCi0gICAgMHg5NDgwLCAweDk0ODYsIDB4MEQxNiwgMHg5NDg3LCAweDk0ODcsIDB4MUU1QywgMHg5NDg4LCAweDk0ODgsIDB4MEQxRSwNCi0gICAgMHg5NDg5LCAweDk0ODksIDB4MUU1RCwgMHg5NDhBLCAweDk0OEMsIDB4MEQyMCwgMHg5NDhELCAweDk0OEQsIDB4MUU1RSwNCi0gICAgMHg5NDhFLCAweDk0QTEsIDB4MEQyNCwgMHg5NEEyLCAweDk0QTIsIDB4MUU1RiwgMHg5NEEzLCAweDk0QUIsIDB4MEQzOSwNCi0gICAgMHg5NEFDLCAweDk0QUMsIDB4MUU2MCwgMHg5NEFELCAweDk0QUQsIDB4MEQ0MywgMHg5NEFFLCAweDk0QUUsIDB4MUU2MSwNCi0gICAgMHg5NEFGLCAweDk0QkQsIDB4MEQ0NSwgMHg5NEJFLCAweDk0QkUsIDB4MUYyQSwgMHg5NEJGLCAweDk0RDEsIDB4MEQ1NSwNCi0gICAgMHg5NEQyLCAweDk0RDIsIDB4MUU2MiwgMHg5NEQzLCAweDk0RjIsIDB4MEQ2OSwgMHg5NEYzLCAweDk0RjMsIDB4MUU2NCwNCi0gICAgMHg5NEY0LCAweDk0RkMsIDB4MEQ4QSwgMHg5NTQwLCAweDk1NDAsIDB4MEQ5MywgMHg5NTQxLCAweDk1NDIsIDB4MUU2NSwNCi0gICAgMHg5NTQzLCAweDk1NEQsIDB4MEQ5NiwgMHg5NTRFLCAweDk1NEUsIDB4MUU2NywgMHg5NTRGLCAweDk1NTAsIDB4MERBMiwNCi0gICAgMHg5NTUxLCAweDk1NTEsIDB4MUU2OCwgMHg5NTUyLCAweDk1NTMsIDB4MERBNSwgMHg5NTU0LCAweDk1NTQsIDB4MUU2OSwNCi0gICAgMHg5NTU1LCAweDk1NUUsIDB4MERBOCwgMHg5NTVGLCAweDk1NUYsIDB4MUU2QSwgMHg5NTYwLCAweDk1NkMsIDB4MERCMywNCi0gICAgMHg5NTZELCAweDk1NkQsIDB4MUU2QiwgMHg5NTZFLCAweDk1N0UsIDB4MERDMSwgMHg5NTgwLCAweDk1QzAsIDB4MEREMiwNCi0gICAgMHg5NUMxLCAweDk1QzEsIDB4MUU2RCwgMHg5NUMyLCAweDk1Q0EsIDB4MEUxNCwgMHg5NUNCLCAweDk1Q0IsIDB4MUU2RSwNCi0gICAgMHg5NUNDLCAweDk1RDAsIDB4MEUxRSwgMHg5NUQxLCAweDk1RDEsIDB4MUYyQiwgMHg5NUQyLCAweDk1RDcsIDB4MEUyNCwNCi0gICAgMHg5NUQ4LCAweDk1RDgsIDB4MUU2RiwgMHg5NUQ5LCAweDk1RjYsIDB4MEUyQiwgMHg5NUY3LCAweDk1RjcsIDB4MUU3MCwNCi0gICAgMHg5NUY4LCAweDk1RkMsIDB4MEU0QSwgMHg5NjQwLCAweDk2NDcsIDB4MEU0RiwgMHg5NjQ4LCAweDk2NDgsIDB4MUU3MiwNCi0gICAgMHg5NjQ5LCAweDk2NjksIDB4MEU1OCwgMHg5NjZBLCAweDk2NkEsIDB4MUU3MywgMHg5NjZCLCAweDk2N0UsIDB4MEU3QSwNCi0gICAgMHg5NjgwLCAweDk2OEYsIDB4MEU4RSwgMHg5NjkwLCAweDk2OTAsIDB4MUU3NCwgMHg5NjkxLCAweDk2OTcsIDB4MEU5RiwNCi0gICAgMHg5Njk4LCAweDk2OTgsIDB4MUYyQywgMHg5Njk5LCAweDk2Q0EsIDB4MEVBNywgMHg5NkNCLCAweDk2Q0IsIDB4MUU3NSwNCi0gICAgMHg5NkNDLCAweDk2RDYsIDB4MEVEQSwgMHg5NkQ3LCAweDk2RDcsIDB4MUU3NiwgMHg5NkQ4LCAweDk2REMsIDB4MEVFNiwNCi0gICAgMHg5NkRELCAweDk2REQsIDB4MUU3NywgMHg5NkRFLCAweDk2REYsIDB4MEVFQywgMHg5NkUwLCAweDk2RTAsIDB4MUU3OCwNCi0gICAgMHg5NkUxLCAweDk2RjcsIDB4MEVFRiwgMHg5NkY4LCAweDk2RjgsIDB4MUU3OSwgMHg5NkY5LCAweDk2RjksIDB4MEYwNywNCi0gICAgMHg5NkZBLCAweDk2RkEsIDB4MUU3QSwgMHg5NkZCLCAweDk2RkMsIDB4MEYwOSwgMHg5NzQwLCAweDk3NTAsIDB4MEYwQiwNCi0gICAgMHg5NzUxLCAweDk3NTEsIDB4MUU3QywgMHg5NzUyLCAweDk3NkUsIDB4MEYxRCwgMHg5NzZGLCAweDk3NkYsIDB4MUU3RCwNCi0gICAgMHg5NzcwLCAweDk3NzIsIDB4MEYzQiwgMHg5NzczLCAweDk3NzMsIDB4MUU3RSwgMHg5Nzc0LCAweDk3N0UsIDB4MEYzRiwNCi0gICAgMHg5NzgwLCAweDk3ODgsIDB4MEY0QSwgMHg5Nzg5LCAweDk3ODksIDB4MUU3RiwgMHg5NzhBLCAweDk3RjcsIDB4MEY1NCwNCi0gICAgMHg5N0Y4LCAweDk3RjksIDB4MUU4MSwgMHg5N0ZBLCAweDk3RkEsIDB4MUYyRCwgMHg5N0ZCLCAweDk3RkMsIDB4MEZDNSwNCi0gICAgMHg5ODQwLCAweDk4NDAsIDB4MUU4MywgMHg5ODQxLCAweDk4NEYsIDB4MEZDOCwgMHg5ODUwLCAweDk4NTAsIDB4MUU4NCwNCi0gICAgMHg5ODUxLCAweDk4NTcsIDB4MEZEOCwgMHg5ODU4LCAweDk4NTgsIDB4MUU4NSwgMHg5ODU5LCAweDk4NzIsIDB4MEZFMCwNCi0gICAgMHg5ODlGLCAweDk4RkMsIDB4MEZGQSwgMHg5OTQwLCAweDk5NDAsIDB4MTA1OCwgMHg5OTQxLCAweDk5NDEsIDB4MUYyRSwNCi0gICAgMHg5OTQyLCAweDk5NUIsIDB4MTA1QSwgMHg5OTVDLCAweDk5NUMsIDB4MUU4NiwgMHg5OTVELCAweDk5NkIsIDB4MTA3NSwNCi0gICAgMHg5OTZDLCAweDk5NkMsIDB4MUU4OSwgMHg5OTZELCAweDk5N0UsIDB4MTA4NSwgMHg5OTgwLCAweDk5QjUsIDB4MTA5NywNCi0gICAgMHg5OUI2LCAweDk5QjYsIDB4MUYyRiwgMHg5OUI3LCAweDk5RkMsIDB4MTBDRSwgMHg5QTQwLCAweDlBNEUsIDB4MTExNCwNCi0gICAgMHg5QTRGLCAweDlBNEYsIDB4MUU4QSwgMHg5QTUwLCAweDlBNTgsIDB4MTEyNCwgMHg5QTU5LCAweDlBNTksIDB4MUU4QiwNCi0gICAgMHg5QTVBLCAweDlBNjYsIDB4MTEyRSwgMHg5QTY3LCAweDlBNjcsIDB4MUYzMCwgMHg5QTY4LCAweDlBN0MsIDB4MTEzQywNCi0gICAgMHg5QTdELCAweDlBN0QsIDB4MUU4RCwgMHg5QTdFLCAweDlBN0UsIDB4MTE1MiwgMHg5QTgwLCAweDlBOEEsIDB4MTE1MywNCi0gICAgMHg5QThCLCAweDlBOEIsIDB4MUU4RSwgMHg5QThDLCAweDlBOEMsIDB4MUYzMSwgMHg5QThELCAweDlBQzEsIDB4MTE2MCwNCi0gICAgMHg5QUMyLCAweDlBQzIsIDB4MUU4RiwgMHg5QUMzLCAweDlBQzMsIDB4MUYzMiwgMHg5QUM0LCAweDlBRTksIDB4MTE5NywNCi0gICAgMHg5QUVBLCAweDlBRUEsIDB4MUYzMywgMHg5QUVCLCAweDlBRkMsIDB4MTFCRSwgMHg5QjQwLCAweDlCNUIsIDB4MTFEMCwNCi0gICAgMHg5QjVDLCAweDlCNUMsIDB4MUU5MCwgMHg5QjVELCAweDlCN0UsIDB4MTFFRCwgMHg5QjgwLCAweDlCODIsIDB4MTIwRiwNCi0gICAgMHg5QjgzLCAweDlCODMsIDB4MUU5MSwgMHg5Qjg0LCAweDlCOTcsIDB4MTIxMywgMHg5Qjk4LCAweDlCOTgsIDB4MUYzNCwNCi0gICAgMHg5Qjk5LCAweDlCOUYsIDB4MTIyOCwgMHg5QkEwLCAweDlCQTAsIDB4MUU5MiwgMHg5QkExLCAweDlCRkEsIDB4MTIzMCwNCi0gICAgMHg5QkZCLCAweDlCRkMsIDB4MUYzNSwgMHg5QzQwLCAweDlDN0UsIDB4MTI4QywgMHg5QzgwLCAweDlDQTEsIDB4MTJDQiwNCi0gICAgMHg5Q0EyLCAweDlDQTIsIDB4MUU5NCwgMHg5Q0EzLCAweDlDRkMsIDB4MTJFRSwgMHg5RDQwLCAweDlENDYsIDB4MTM0OCwNCi0gICAgMHg5RDQ3LCAweDlENDcsIDB4MUYzNywgMHg5RDQ4LCAweDlEN0UsIDB4MTM1MCwgMHg5RDgwLCAweDlEODAsIDB4MUU5NSwNCi0gICAgMHg5RDgxLCAweDlEOEIsIDB4MTM4OCwgMHg5RDhDLCAweDlEOEMsIDB4MUU5NiwgMHg5RDhELCAweDlEQjYsIDB4MTM5NCwNCi0gICAgMHg5REI3LCAweDlEQjcsIDB4MUU5NywgMHg5REI4LCAweDlERjcsIDB4MTNCRiwgMHg5REY4LCAweDlERjgsIDB4MUYzOCwNCi0gICAgMHg5REY5LCAweDlERkMsIDB4MTQwMCwgMHg5RTQwLCAweDlFNjMsIDB4MTQwNCwgMHg5RTY0LCAweDlFNjQsIDB4MUU5OSwNCi0gICAgMHg5RTY1LCAweDlFN0UsIDB4MTQyOSwgMHg5RTgwLCAweDlFOEEsIDB4MTQ0MywgMHg5RThCLCAweDlFOEIsIDB4MUU5QiwNCi0gICAgMHg5RThDLCAweDlFRkMsIDB4MTQ0RiwgMHg5RjQwLCAweDlGN0UsIDB4MTRDMCwgMHg5RjgwLCAweDlGODAsIDB4MTRGRiwNCi0gICAgMHg5RjgxLCAweDlGODEsIDB4MUYzOSwgMHg5RjgyLCAweDlGQ0QsIDB4MTUwMSwgMHg5RkNFLCAweDlGQ0UsIDB4MUU5RCwNCi0gICAgMHg5RkNGLCAweDlGRDMsIDB4MTU0RSwgMHg5RkQ0LCAweDlGRDQsIDB4MUYzQSwgMHg5RkQ1LCAweDlGRjMsIDB4MTU1NCwNCi0gICAgMHg5RkY0LCAweDlGRjQsIDB4MUYzQiwgMHg5RkY1LCAweDlGRkMsIDB4MTU3NCwgMHhFMDQwLCAweEUwN0UsIDB4MTU3QywNCi0gICAgMHhFMDgwLCAweEUwOTIsIDB4MTVCQiwgMHhFMDkzLCAweEUwOTMsIDB4MUU5RSwgMHhFMDk0LCAweEUwQTMsIDB4MTVDRiwNCi0gICAgMHhFMEE0LCAweEUwQTQsIDB4MUU5RiwgMHhFMEE1LCAweEUwREMsIDB4MTVFMCwgMHhFMERELCAweEUwREQsIDB4MUVBMCwNCi0gICAgMHhFMERFLCAweEUwRkMsIDB4MTYxOSwgMHhFMTQwLCAweEUxNDksIDB4MTYzOCwgMHhFMTRBLCAweEUxNEEsIDB4MUVBMSwNCi0gICAgMHhFMTRCLCAweEUxN0UsIDB4MTY0MywgMHhFMTgwLCAweEUxRUMsIDB4MTY3NywgMHhFMUVELCAweEUxRUQsIDB4MUVBNSwNCi0gICAgMHhFMUVFLCAweEUxRkMsIDB4MTZFNSwgMHhFMjQwLCAweEUyNjgsIDB4MTZGNCwgMHhFMjY5LCAweEUyNjksIDB4MUVBNiwNCi0gICAgMHhFMjZBLCAweEUyNzIsIDB4MTcxRSwgMHhFMjczLCAweEUyNzMsIDB4MUVBNywgMHhFMjc0LCAweEUyNzcsIDB4MTcyOCwNCi0gICAgMHhFMjc4LCAweEUyNzgsIDB4MUYzQywgMHhFMjc5LCAweEUyN0UsIDB4MTcyRCwgMHhFMjgwLCAweEUyQjYsIDB4MTczMywNCi0gICAgMHhFMkI3LCAweEUyQjcsIDB4MUVBOCwgMHhFMkI4LCAweEUyQkQsIDB4MTc2QiwgMHhFMkJFLCAweEUyQkUsIDB4MUYzRCwNCi0gICAgMHhFMkJGLCAweEUyRTEsIDB4MTc3MiwgMHhFMkUyLCAweEUyRTIsIDB4MUVBOSwgMHhFMkUzLCAweEUyRUIsIDB4MTc5NiwNCi0gICAgMHhFMkVDLCAweEUyRUMsIDB4MUVBQSwgMHhFMkVELCAweEUyRkMsIDB4MTdBMCwgMHhFMzQwLCAweEUzNTcsIDB4MTdCMCwNCi0gICAgMHhFMzU4LCAweEUzNTgsIDB4MUVBQiwgMHhFMzU5LCAweEUzNTksIDB4MTdDOSwgMHhFMzVBLCAweEUzNUEsIDB4MUVBQywNCi0gICAgMHhFMzVCLCAweEUzNjQsIDB4MTdDQiwgMHhFMzY1LCAweEUzNjUsIDB4MUVBRCwgMHhFMzY2LCAweEUzN0UsIDB4MTdENiwNCi0gICAgMHhFMzgwLCAweEUzQzYsIDB4MTdFRiwgMHhFM0M3LCAweEUzQzcsIDB4MUYzRSwgMHhFM0M4LCAweEUzRkMsIDB4MTgzNywNCi0gICAgMHhFNDQwLCAweEU0N0UsIDB4MTg2QywgMHhFNDgwLCAweEU0ODMsIDB4MThBQiwgMHhFNDg0LCAweEU0ODQsIDB4MUVBRiwNCi0gICAgMHhFNDg1LCAweEU0ODgsIDB4MThCMCwgMHhFNDg5LCAweEU0ODksIDB4MUVCMCwgMHhFNDhBLCAweEU0OTEsIDB4MThCNSwNCi0gICAgMHhFNDkyLCAweEU0OTIsIDB4MUVCMSwgMHhFNDkzLCAweEU0QjgsIDB4MThCRSwgMHhFNEI5LCAweEU0QjksIDB4MUVCMywNCi0gICAgMHhFNEJBLCAweEU0Q0EsIDB4MThFNSwgMHhFNENCLCAweEU0Q0IsIDB4MUYzRiwgMHhFNENDLCAweEU0RkMsIDB4MThGNywNCi0gICAgMHhFNTQwLCAweEU1N0UsIDB4MTkyOCwgMHhFNTgwLCAweEU1OUQsIDB4MTk2NywgMHhFNTlFLCAweEU1OUUsIDB4MUY0MCwNCi0gICAgMHhFNTlGLCAweEU1QjksIDB4MTk4NiwgMHhFNUJBLCAweEU1QkIsIDB4MUY0MSwgMHhFNUJDLCAweEU1RUMsIDB4MTlBMywNCi0gICAgMHhFNUVELCAweEU1RUQsIDB4MUVCOCwgMHhFNUVFLCAweEU1RkMsIDB4MTlENSwgMHhFNjQwLCAweEU2NTAsIDB4MTlFNCwNCi0gICAgMHhFNjUxLCAweEU2NTEsIDB4MUVCOSwgMHhFNjUyLCAweEU2N0UsIDB4MTlGNiwgMHhFNjgwLCAweEU2ODUsIDB4MUEyMywNCi0gICAgMHhFNjg2LCAweEU2ODYsIDB4MUVCQSwgMHhFNjg3LCAweEU2RTYsIDB4MUEyQSwgMHhFNkU3LCAweEU2RTcsIDB4MUVCQywNCi0gICAgMHhFNkU4LCAweEU2RkMsIDB4MUE4QiwgMHhFNzQwLCAweEU3NkMsIDB4MUFBMCwgMHhFNzZELCAweEU3NkQsIDB4MUVCRSwNCi0gICAgMHhFNzZFLCAweEU3N0UsIDB4MUFDRSwgMHhFNzgwLCAweEU3QTYsIDB4MUFERiwgMHhFN0E3LCAweEU3QTcsIDB4MUVDMSwNCi0gICAgMHhFN0E4LCAweEU3QkEsIDB4MUIwNywgMHhFN0JCLCAweEU3QkIsIDB4MUVDMiwgMHhFN0JDLCAweEU3RkMsIDB4MUIxQiwNCi0gICAgMHhFODQwLCAweEU4N0UsIDB4MUI1QywgMHhFODgwLCAweEU4Q0UsIDB4MUI5QiwgMHhFOENGLCAweEU4Q0YsIDB4MUVDNywNCi0gICAgMHhFOEQwLCAweEU4RkMsIDB4MUJFQiwgMHhFOTQwLCAweEU5NzcsIDB4MUMxOCwgMHhFOTc4LCAweEU5NzgsIDB4MUY0MywNCi0gICAgMHhFOTc5LCAweEU5N0UsIDB4MUM1MSwgMHhFOTgwLCAweEU5QUEsIDB4MUM1NywgMHhFOUFCLCAweEU5QUIsIDB4MUVDQSwNCi0gICAgMHhFOUFDLCAweEU5QjksIDB4MUM4MywgMHhFOUJBLCAweEU5QkEsIDB4MUVDQiwgMHhFOUJCLCAweEU5Q0IsIDB4MUM5MiwNCi0gICAgMHhFOUNDLCAweEU5Q0MsIDB4MUVDQywgMHhFOUNELCAweEU5RkMsIDB4MUNBNCwgMHhFQTQwLCAweEVBNkYsIDB4MUNENCwNCi0gICAgMHhFQTcwLCAweEVBNzAsIDB4MUVDRCwgMHhFQTcxLCAweEVBNzEsIDB4MUY0NCwgMHhFQTcyLCAweEVBN0UsIDB4MUQwNiwNCi0gICAgMHhFQTgwLCAweEVBOUMsIDB4MUQxMywgMHhFQTlELCAweEVBOUQsIDB4MUVDRSwgMHhFQTlFLCAweEVBQTIsIDB4MUQzMSwNCi0gICAgMHhFQUEzLCAweEVBQTQsIDB4MjA1QywgMHhFQzQwLCAweEVDNDIsIDB4MUY0NSwgMHhFQzQ2LCAweEVDNDYsIDB4MUY0OCwNCi0gICAgMHhFQzQ3LCAweEVDNDcsIDB4MDMwMCwgMHhFQzQ4LCAweEVDNDgsIDB4MDJGQSwgMHhFQzQ5LCAweEVDNDksIDB4MDJGOSwNCi0gICAgMHhFQzRELCAweEVDNTcsIDB4MUY0OSwgMHhFQzVCLCAweEVDNUQsIDB4MURCMSwgMHhFQzVFLCAweEVDNUUsIDB4MUY1NCwNCi0gICAgMHhFQzVGLCAweEVDNUYsIDB4MURCNywgMHhFQzYwLCAweEVDNjIsIDB4MUY1NSwgMHhFQzYzLCAweEVDNjUsIDB4MURCNCwNCi0gICAgMHhFQzY2LCAweEVDNkYsIDB4MUY1OCwgMHhFQzcwLCAweEVDNzAsIDB4MDMwMywgMHhFQzcxLCAweEVDNzEsIDB4MUY2MiwNCi0gICAgMHhFQzcyLCAweEVDNzIsIDB4MDMwNCwgMHhFQzczLCAweEVDNzQsIDB4MUY2MywgMHhFQzc2LCAweEVDNzYsIDB4MUY2NSwNCi0gICAgMHhFQzc4LCAweEVDNzgsIDB4MURBNCwgMHhFQzc5LCAweEVDNzksIDB4MURBMSwgMHhFQzdBLCAweEVDN0EsIDB4MUY2NiwNCi0gICAgMHhFQzdCLCAweEVDN0IsIDB4MURBMiwgMHhFQzdDLCAweEVDN0UsIDB4MUY2NywgMHhFQzgwLCAweEVDODAsIDB4MURBNiwNCi0gICAgMHhFQzgxLCAweEVDODEsIDB4MUY2QSwgMHhFQzgyLCAweEVDODIsIDB4MURBOCwgMHhFQzgzLCAweEVDODMsIDB4MURBQywNCi0gICAgMHhFQzg0LCAweEVDODQsIDB4MUY2QiwgMHhFQzg1LCAweEVDODUsIDB4MURBRSwgMHhFQzg2LCAweEVDODYsIDB4MURBQiwNCi0gICAgMHhFQzg3LCAweEVDODgsIDB4MUY2QywgMHhFQzg5LCAweEVDODksIDB4MURBRiwgMHhFQzhBLCAweEVDOTAsIDB4MUY2RSwNCi0gICAgMHhFQzk0LCAweEVDOTksIDB4MUY3NSwgMHhFQzlBLCAweEVDOUEsIDB4MURCQSwgMHhFQzlCLCAweEVDOUIsIDB4MUY3QiwNCi0gICAgMHhFQzlFLCAweEVDOUUsIDB4MUY3QywgMHhFQ0E3LCAweEVDQjAsIDB4MUY3RCwgMHhFQ0IyLCAweEVDQzUsIDB4MUY4NywNCi0gICAgMHhFQ0M3LCAweEVDREEsIDB4MUQ4MywgMHhFQ0RCLCAweEVDREIsIDB4MUY5QiwgMHhFQ0RDLCAweEVDRTUsIDB4MUQ5NywNCi0gICAgMHhFQ0U5LCAweEVDRkMsIDB4MUY5QywgMHhFRDQwLCAweEVENTksIDB4MUZCMCwgMHhFRDY0LCAweEVENjQsIDB4MUYxNiwNCi0gICAgMHhFRDY4LCAweEVENjksIDB4MUZDQSwgMHhFRDZBLCAweEVENkEsIDB4MURDNCwgMHhFRDZCLCAweEVENkQsIDB4MUZDQywNCi0gICAgMHhFRDZFLCAweEVENkUsIDB4MURDMywgMHhFRDZGLCAweEVENzMsIDB4MUZDRiwgMHhFRDc0LCAweEVENzQsIDB4MURDMiwNCi0gICAgMHhFRDc1LCAweEVENzgsIDB4MUZENCwgMHhFRDdDLCAweEVEN0UsIDB4MUZEOCwgMHhFRDgwLCAweEVEOEEsIDB4MUZEQiwNCi0gICAgMHhFRDhGLCAweEVEOUUsIDB4MUZFNiwgMHhFRjQwLCAweEVGNDEsIDB4MUVDRiwgMHhFRjQyLCAweEVGNDIsIDB4MjA0QywNCi0gICAgMHhFRjQzLCAweEVGNDMsIDB4MjA1MiwgMHhFRjQ0LCAweEVGNEQsIDB4MUVEMSwgMHhFRjRFLCAweEVGNEUsIDB4MjA1QSwNCi0gICAgMHhFRjRGLCAweEVGNEYsIDB4MjA1MywgMHhFRjUwLCAweEVGNTAsIDB4MjA1OCwgMHhFRjUxLCAweEVGNTEsIDB4MjA1NSwNCi0gICAgMHhFRjUyLCAweEVGNjMsIDB4MUVEQiwgMHhFRjY0LCAweEVGNzksIDB4MUVFRSwgMHhFRjdBLCAweEVGN0IsIDB4MjA0OCwNCi0gICAgMHhFRjhELCAweEVGOTAsIDB4MDJFMCwgMHhFRjkxLCAweEVGOTQsIDB4MUZGNiwNCi19Ow0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBzaG9ydCBnX0ZYQ01BUF9BZGRfUktTSl9IXzFbNjM1ICogM10gPSB7CisgICAgMHgwMDIwLCAweDAwN0UsIDB4MDBFNywgMHgwMEEwLCAweDAwREYsIDB4MDE0NiwgMHg4MTQwLCAweDgxN0UsIDB4MDI3OSwKKyAgICAweDgxODAsIDB4ODFBQywgMHgwMkI4LCAweDgxQjgsIDB4ODFCRiwgMHgwMkU1LCAweDgxQzgsIDB4ODFDRSwgMHgwMkVELAorICAgIDB4ODFEQSwgMHg4MUU4LCAweDAyRjQsIDB4ODFGMCwgMHg4MUY3LCAweDAzMDMsIDB4ODFGQywgMHg4MUZDLCAweDAzMEIsCisgICAgMHg4MjRGLCAweDgyNTgsIDB4MDMwQywgMHg4MjYwLCAweDgyNzksIDB4MDMxNiwgMHg4MjgxLCAweDgyOUEsIDB4MDMzMCwKKyAgICAweDgyOUYsIDB4ODJGMSwgMHgwMzRBLCAweDgyRjIsIDB4ODJGNCwgMHgxRjE2LCAweDgzNDAsIDB4ODM3RSwgMHgwMzlELAorICAgIDB4ODM4MCwgMHg4Mzk2LCAweDAzREMsIDB4ODM5RiwgMHg4M0I2LCAweDAzRjMsIDB4ODNCRiwgMHg4M0Q2LCAweDA0MEIsCisgICAgMHg4NDQwLCAweDg0NjAsIDB4MDQyMywgMHg4NDcwLCAweDg0N0UsIDB4MDQ0NCwgMHg4NDgwLCAweDg0OTEsIDB4MDQ1MywKKyAgICAweDg0OUYsIDB4ODQ5RiwgMHgxRDM3LCAweDg0QTAsIDB4ODRBMCwgMHgxRDM5LCAweDg0QTEsIDB4ODRBMSwgMHgxRDQzLAorICAgIDB4ODRBMiwgMHg4NEEyLCAweDFENDcsIDB4ODRBMywgMHg4NEEzLCAweDFENEYsIDB4ODRBNCwgMHg4NEE0LCAweDFENEIsCisgICAgMHg4NEE1LCAweDg0QTUsIDB4MUQ1MywgMHg4NEE2LCAweDg0QTYsIDB4MUQ2MywgMHg4NEE3LCAweDg0QTcsIDB4MUQ1QiwKKyAgICAweDg0QTgsIDB4ODRBOCwgMHgxRDZCLCAweDg0QTksIDB4ODRBOSwgMHgxRDczLCAweDg0QUEsIDB4ODRBQSwgMHgxRDM4LAorICAgIDB4ODRBQiwgMHg4NEFCLCAweDFEM0EsIDB4ODRBQywgMHg4NEFDLCAweDFENDYsIDB4ODRBRCwgMHg4NEFELCAweDFENEEsCisgICAgMHg4NEFFLCAweDg0QUUsIDB4MUQ1MiwgMHg4NEFGLCAweDg0QUYsIDB4MUQ0RSwgMHg4NEIwLCAweDg0QjAsIDB4MUQ1QSwKKyAgICAweDg0QjEsIDB4ODRCMSwgMHgxRDZBLCAweDg0QjIsIDB4ODRCMiwgMHgxRDYyLCAweDg0QjMsIDB4ODRCMywgMHgxRDcyLAorICAgIDB4ODRCNCwgMHg4NEI0LCAweDFEODIsIDB4ODRCNSwgMHg4NEI1LCAweDFENTcsIDB4ODRCNiwgMHg4NEI2LCAweDFENjYsCisgICAgMHg4NEI3LCAweDg0QjcsIDB4MUQ1RiwgMHg4NEI4LCAweDg0QjgsIDB4MUQ2RSwgMHg4NEI5LCAweDg0QjksIDB4MUQ3NiwKKyAgICAweDg0QkEsIDB4ODRCQSwgMHgxRDU0LCAweDg0QkIsIDB4ODRCQiwgMHgxRDY3LCAweDg0QkMsIDB4ODRCQywgMHgxRDVDLAorICAgIDB4ODRCRCwgMHg4NEJELCAweDFENkYsIDB4ODRCRSwgMHg4NEJFLCAweDFENzksIDB4ODg5RiwgMHg4ODlGLCAweDA0NjUsCisgICAgMHg4OEEwLCAweDg4QTAsIDB4MUREMSwgMHg4OEExLCAweDg4QUYsIDB4MDQ2NywgMHg4OEIwLCAweDg4QjAsIDB4MUYxOSwKKyAgICAweDg4QjEsIDB4ODhCOCwgMHgwNDc3LCAweDg4QjksIDB4ODhCOSwgMHgxREQyLCAweDg4QkEsIDB4ODhFQiwgMHgwNDgwLAorICAgIDB4ODhFQywgMHg4OEVDLCAweDFERDMsIDB4ODhFRCwgMHg4OEVFLCAweDA0QjMsIDB4ODhFRiwgMHg4OEVGLCAweDFGMUEsCisgICAgMHg4OEYwLCAweDg4RjAsIDB4MDRCNiwgMHg4OEYxLCAweDg4RjEsIDB4MURENCwgMHg4OEYyLCAweDg4RjksIDB4MDRCOCwKKyAgICAweDg4RkEsIDB4ODhGQSwgMHgxREQ1LCAweDg4RkIsIDB4ODhGQywgMHgwNEMxLCAweDg5NDAsIDB4ODk0OCwgMHgwNEMzLAorICAgIDB4ODk0OSwgMHg4OTQ5LCAweDFERDYsIDB4ODk0QSwgMHg4OTUxLCAweDA0Q0QsIDB4ODk1MiwgMHg4OTUyLCAweDFGMUIsCisgICAgMHg4OTUzLCAweDg5NTMsIDB4MDRENiwgMHg4OTU0LCAweDg5NTQsIDB4MURENywgMHg4OTU1LCAweDg5NTcsIDB4MDREOCwKKyAgICAweDg5NTgsIDB4ODk1OCwgMHgxRjFDLCAweDg5NTksIDB4ODk1QiwgMHgwNERDLCAweDg5NUMsIDB4ODk1QywgMHgxRERBLAorICAgIDB4ODk1RCwgMHg4OTYwLCAweDA0RTAsIDB4ODk2MSwgMHg4OTYxLCAweDFEREIsIDB4ODk2MiwgMHg4OTdFLCAweDA0RTUsCisgICAgMHg4OTgwLCAweDg5OEEsIDB4MDUwMiwgMHg4OThCLCAweDg5OEIsIDB4MUREQywgMHg4OThDLCAweDg5QTUsIDB4MDUwRSwKKyAgICAweDg5QTYsIDB4ODlBNiwgMHgxRERELCAweDg5QTcsIDB4ODlBNywgMHgwNTI5LCAweDg5QTgsIDB4ODlBOCwgMHgxRERFLAorICAgIDB4ODlBOSwgMHg4OURELCAweDA1MkIsIDB4ODlERSwgMHg4OURFLCAweDFEREYsIDB4ODlERiwgMHg4OUU0LCAweDA1NjEsCisgICAgMHg4OUU1LCAweDg5RTUsIDB4MUYxRCwgMHg4OUU2LCAweDg5RjcsIDB4MDU2OCwgMHg4OUY4LCAweDg5RjgsIDB4MURFMCwKKyAgICAweDg5RjksIDB4ODlGQywgMHgwNTdCLCAweDhBNDAsIDB4OEE0MCwgMHgwNTdGLCAweDhBNDEsIDB4OEE0MSwgMHgxREUyLAorICAgIDB4OEE0MiwgMHg4QTdFLCAweDA1ODEsIDB4OEE4MCwgMHg4QThBLCAweDA1QkUsIDB4OEE4QiwgMHg4QThCLCAweDFERTQsCisgICAgMHg4QThDLCAweDhBOTIsIDB4MDVDQSwgMHg4QTkzLCAweDhBOTMsIDB4MURFNSwgMHg4QTk0LCAweDhBOTksIDB4MDVEMiwKKyAgICAweDhBOUEsIDB4OEE5QSwgMHgxREU2LCAweDhBOUIsIDB4OEFCRiwgMHgwNUQ5LCAweDhBQzAsIDB4OEFDMCwgMHgxREU3LAorICAgIDB4OEFDMSwgMHg4QUNBLCAweDA1RkYsIDB4OEFDQiwgMHg4QUNCLCAweDFERTgsIDB4OEFDQywgMHg4QUUyLCAweDA2MEEsCisgICAgMHg4QUUzLCAweDhBRTMsIDB4MURFOSwgMHg4QUU0LCAweDhBRkMsIDB4MDYyMiwgMHg4QjQwLCAweDhCNDksIDB4MDYzQiwKKyAgICAweDhCNEEsIDB4OEI0QSwgMHgxREVBLCAweDhCNEIsIDB4OEI1RSwgMHgwNjQ2LCAweDhCNUYsIDB4OEI1RiwgMHgxREVCLAorICAgIDB4OEI2MCwgMHg4QjdFLCAweDA2NUIsIDB4OEI4MCwgMHg4QjgxLCAweDA2N0EsIDB4OEI4MiwgMHg4QjgyLCAweDFGMUUsCisgICAgMHg4QjgzLCAweDhCODcsIDB4MDY3RCwgMHg4Qjg4LCAweDhCODgsIDB4MUYxRiwgMHg4Qjg5LCAweDhCOUYsIDB4MDY4MywKKyAgICAweDhCQTAsIDB4OEJBMCwgMHgxREVDLCAweDhCQTEsIDB4OEJBNywgMHgwNjlCLCAweDhCQTgsIDB4OEJBOCwgMHgxREVELAorICAgIDB4OEJBOSwgMHg4QkJGLCAweDA2QTMsIDB4OEJDMCwgMHg4QkMwLCAweDFGMjAsIDB4OEJDMSwgMHg4QkNDLCAweDA2QkIsCisgICAgMHg4QkNELCAweDhCQ0QsIDB4MURFRSwgMHg4QkNFLCAweDhCRUEsIDB4MDZDOCwgMHg4QkVCLCAweDhCRUIsIDB4MURFRiwKKyAgICAweDhCRUMsIDB4OEJGMSwgMHgwNkU2LCAweDhCRjIsIDB4OEJGMiwgMHgxREYwLCAweDhCRjMsIDB4OEJGOCwgMHgwNkVELAorICAgIDB4OEJGOSwgMHg4QkY5LCAweDFERjEsIDB4OEJGQSwgMHg4QkZBLCAweDA2RjQsIDB4OEJGQiwgMHg4QkZCLCAweDFERjIsCisgICAgMHg4QkZDLCAweDhCRkMsIDB4MDZGNiwgMHg4QzQwLCAweDhDNTUsIDB4MDZGNywgMHg4QzU2LCAweDhDNTYsIDB4MURGNCwKKyAgICAweDhDNTcsIDB4OEM3MCwgMHgwNzBFLCAweDhDNzEsIDB4OEM3MSwgMHgxREY3LCAweDhDNzIsIDB4OEM3RSwgMHgwNzI5LAorICAgIDB4OEM4MCwgMHg4QzkwLCAweDA3MzYsIDB4OEM5MSwgMHg4QzkxLCAweDFERkEsIDB4OEM5MiwgMHg4QzlDLCAweDA3NDgsCisgICAgMHg4QzlELCAweDhDOUQsIDB4MUYyMSwgMHg4QzlFLCAweDhDOUUsIDB4MURGQywgMHg4QzlGLCAweDhDQjEsIDB4MDc1NSwKKyAgICAweDhDQjIsIDB4OENCMiwgMHgxREZELCAweDhDQjMsIDB4OENCRSwgMHgwNzY5LCAweDhDQkYsIDB4OENCRiwgMHgxREZFLAorICAgIDB4OENDMCwgMHg4Q0ZDLCAweDA3NzYsIDB4OEQ0MCwgMHg4RDQ5LCAweDA3QjMsIDB4OEQ0QSwgMHg4RDRBLCAweDFERkYsCisgICAgMHg4RDRCLCAweDhEN0UsIDB4MDdCRSwgMHg4RDgwLCAweDhEOEMsIDB4MDdGMiwgMHg4RDhELCAweDhEOEQsIDB4MUUwMiwKKyAgICAweDhEOEUsIDB4OEQ5MywgMHgwODAwLCAweDhEOTQsIDB4OEQ5NCwgMHgxRTAzLCAweDhEOTUsIDB4OEQ5OCwgMHgwODA3LAorICAgIDB4OEQ5OSwgMHg4RDk5LCAweDFFMDQsIDB4OEQ5QSwgMHg4REQwLCAweDA4MEMsIDB4OEREMSwgMHg4REQxLCAweDFFMDUsCisgICAgMHg4REQyLCAweDhERTQsIDB4MDg0NCwgMHg4REU1LCAweDhERTUsIDB4MUUwNiwgMHg4REU2LCAweDhERjEsIDB4MDg1OCwKKyAgICAweDhERjIsIDB4OERGMiwgMHgxRTA3LCAweDhERjMsIDB4OERGQywgMHgwODY1LCAweDhFNDAsIDB4OEU0NSwgMHgwODZGLAorICAgIDB4OEU0NiwgMHg4RTQ2LCAweDFFMDgsIDB4OEU0NywgMHg4RTQ4LCAweDA4NzYsIDB4OEU0OSwgMHg4RTQ5LCAweDFFMDksCisgICAgMHg4RTRBLCAweDhFNEEsIDB4MDg3OSwgMHg4RTRCLCAweDhFNEIsIDB4MUUwQSwgMHg4RTRDLCAweDhFNTcsIDB4MDg3QiwKKyAgICAweDhFNTgsIDB4OEU1OCwgMHgxRTBCLCAweDhFNTksIDB4OEU1RiwgMHgwODg4LCAweDhFNjAsIDB4OEU2MCwgMHgxRjIyLAorICAgIDB4OEU2MSwgMHg4RTdFLCAweDA4OTAsIDB4OEU4MCwgMHg4RUM1LCAweDA4QUUsIDB4OEVDNiwgMHg4RUM2LCAweDFFMEQsCisgICAgMHg4RUM3LCAweDhFREEsIDB4MDhGNSwgMHg4RURCLCAweDhFREMsIDB4MUUwRiwgMHg4RURELCAweDhFRkMsIDB4MDkwQiwKKyAgICAweDhGNDAsIDB4OEY0OSwgMHgwOTJCLCAweDhGNEEsIDB4OEY0QSwgMHgxRTExLCAweDhGNEIsIDB4OEY1NCwgMHgwOTM2LAorICAgIDB4OEY1NSwgMHg4RjU1LCAweDFFMTIsIDB4OEY1NiwgMHg4RjdFLCAweDA5NDEsIDB4OEY4MCwgMHg4RjhCLCAweDA5NkEsCisgICAgMHg4RjhDLCAweDhGOEMsIDB4MUUxMywgMHg4RjhELCAweDhGOTEsIDB4MDk3NywgMHg4RjkyLCAweDhGOTMsIDB4MUUxNSwKKyAgICAweDhGOTQsIDB4OEZBMiwgMHgwOTdFLCAweDhGQTMsIDB4OEZBMywgMHgxRTE3LCAweDhGQTQsIDB4OEZCMCwgMHgwOThFLAorICAgIDB4OEZCMSwgMHg4RkIxLCAweDFFMTgsIDB4OEZCMiwgMHg4RkQyLCAweDA5OUMsIDB4OEZEMywgMHg4RkQzLCAweDFFMUEsCisgICAgMHg4RkQ0LCAweDhGREMsIDB4MDlCRSwgMHg4RkRELCAweDhGREQsIDB4MUUxQiwgMHg4RkRFLCAweDhGRTEsIDB4MDlDOCwKKyAgICAweDhGRTIsIDB4OEZFMiwgMHgxRTFDLCAweDhGRTMsIDB4OEZGQywgMHgwOUNELCAweDkwNDAsIDB4OTA0OCwgMHgwOUU3LAorICAgIDB4OTA0OSwgMHg5MDQ5LCAweDFFMUQsIDB4OTA0QSwgMHg5MDc3LCAweDA5RjEsIDB4OTA3OCwgMHg5MDc4LCAweDFGMjMsCisgICAgMHg5MDc5LCAweDkwN0UsIDB4MEEyMCwgMHg5MDgwLCAweDkwODAsIDB4MUUxRiwgMHg5MDgxLCAweDkwOUYsIDB4MEEyNywKKyAgICAweDkwQTAsIDB4OTBBMCwgMHgxRTIxLCAweDkwQTEsIDB4OTBFMywgMHgwQTQ3LCAweDkwRTQsIDB4OTBFNCwgMHgxRTIzLAorICAgIDB4OTBFNSwgMHg5MEVFLCAweDBBOEIsIDB4OTBFRiwgMHg5MEVGLCAweDFFMjQsIDB4OTBGMCwgMHg5MEY2LCAweDBBOTYsCisgICAgMHg5MEY3LCAweDkwRjcsIDB4MUUyNiwgMHg5MEY4LCAweDkwRjgsIDB4MUYyNCwgMHg5MEY5LCAweDkwRjksIDB4MEE5RiwKKyAgICAweDkwRkEsIDB4OTBGQiwgMHgxRjI1LCAweDkwRkMsIDB4OTBGQywgMHgwQUEyLCAweDkxNDAsIDB4OTE0NSwgMHgwQUEzLAorICAgIDB4OTE0NiwgMHg5MTQ2LCAweDFFMjgsIDB4OTE0NywgMHg5MTU3LCAweDBBQUEsIDB4OTE1OCwgMHg5MTU4LCAweDFFMjksCisgICAgMHg5MTU5LCAweDkxNkEsIDB4MEFCQywgMHg5MTZCLCAweDkxNkIsIDB4MUUyQSwgMHg5MTZDLCAweDkxNkQsIDB4MEFDRiwKKyAgICAweDkxNkUsIDB4OTE2RSwgMHgxRTJCLCAweDkxNkYsIDB4OTE3RCwgMHgwQUQyLCAweDkxN0UsIDB4OTE3RSwgMHgxRTJDLAorICAgIDB4OTE4MCwgMHg5MTg4LCAweDBBRTIsIDB4OTE4OSwgMHg5MTg5LCAweDFFMkQsIDB4OTE4QSwgMHg5MUI0LCAweDBBRUMsCisgICAgMHg5MUI1LCAweDkxQjUsIDB4MUYyNywgMHg5MUI2LCAweDkxQkEsIDB4MEIxOCwgMHg5MUJCLCAweDkxQkIsIDB4MUUyRSwKKyAgICAweDkxQkMsIDB4OTFDQSwgMHgwQjFFLCAweDkxQ0IsIDB4OTFDQiwgMHgxRTJGLCAweDkxQ0MsIDB4OTFEOSwgMHgwQjJFLAorICAgIDB4OTFEQSwgMHg5MURBLCAweDFFMzAsIDB4OTFEQiwgMHg5MUUwLCAweDBCM0QsIDB4OTFFMSwgMHg5MUUxLCAweDFFMzEsCisgICAgMHg5MUUyLCAweDkxRUMsIDB4MEI0NCwgMHg5MUVELCAweDkxRUQsIDB4MUUzMiwgMHg5MUVFLCAweDkxRkEsIDB4MEI1MCwKKyAgICAweDkxRkIsIDB4OTFGQiwgMHgxRTM1LCAweDkxRkMsIDB4OTFGQywgMHgwQjVFLCAweDkyNDAsIDB4OTI0NSwgMHgwQjVGLAorICAgIDB4OTI0NiwgMHg5MjQ2LCAweDFFMzYsIDB4OTI0NywgMHg5MjQ3LCAweDBCNjYsIDB4OTI0OCwgMHg5MjQ4LCAweDFFMzcsCisgICAgMHg5MjQ5LCAweDkyNEIsIDB4MEI2OCwgMHg5MjRDLCAweDkyNEQsIDB4MUUzOSwgMHg5MjRFLCAweDkyNUIsIDB4MEI2RCwKKyAgICAweDkyNUMsIDB4OTI1QywgMHgxRTNCLCAweDkyNUQsIDB4OTI3RSwgMHgwQjdDLCAweDkyODAsIDB4OTI4RiwgMHgwQjlFLAorICAgIDB4OTI5MCwgMHg5MjkwLCAweDFFM0MsIDB4OTI5MSwgMHg5Mjk0LCAweDBCQUYsIDB4OTI5NSwgMHg5Mjk1LCAweDFFM0QsCisgICAgMHg5Mjk2LCAweDkyOUIsIDB4MEJCNCwgMHg5MjlDLCAweDkyOUMsIDB4MUUzRSwgMHg5MjlELCAweDkyQkEsIDB4MEJCQiwKKyAgICAweDkyQkIsIDB4OTJCQiwgMHgxRTNGLCAweDkyQkMsIDB4OTJDNSwgMHgwQkRBLCAweDkyQzYsIDB4OTJDNiwgMHgxRTQwLAorICAgIDB4OTJDNywgMHg5MkM3LCAweDBCRTUsIDB4OTJDOCwgMHg5MkM4LCAweDFFNDEsIDB4OTJDOSwgMHg5MkNDLCAweDBCRTcsCisgICAgMHg5MkNELCAweDkyQ0QsIDB4MUU0MywgMHg5MkNFLCAweDkyRkMsIDB4MEJFQywgMHg5MzQwLCAweDkzNDAsIDB4MEMxQiwKKyAgICAweDkzNDEsIDB4OTM0MSwgMHgxRTQ0LCAweDkzNDIsIDB4OTM0NSwgMHgwQzFELCAweDkzNDYsIDB4OTM0NiwgMHgxRTQ1LAorICAgIDB4OTM0NywgMHg5MzRDLCAweDBDMjIsIDB4OTM0RCwgMHg5MzRELCAweDFFNDYsIDB4OTM0RSwgMHg5MzU0LCAweDBDMjksCisgICAgMHg5MzU1LCAweDkzNTUsIDB4MUU0NywgMHg5MzU2LCAweDkzNUQsIDB4MEMzMSwgMHg5MzVFLCAweDkzNUUsIDB4MUU0OCwKKyAgICAweDkzNUYsIDB4OTM2NiwgMHgwQzNBLCAweDkzNjcsIDB4OTM2NywgMHgxRTQ5LCAweDkzNjgsIDB4OTM2OSwgMHgwQzQzLAorICAgIDB4OTM2QSwgMHg5MzZBLCAweDFFNEEsIDB4OTM2QiwgMHg5MzZGLCAweDBDNDYsIDB4OTM3MCwgMHg5MzcwLCAweDFGMjgsCisgICAgMHg5MzcxLCAweDkzNzEsIDB4MUU0QywgMHg5MzcyLCAweDkzN0UsIDB4MEM0RCwgMHg5MzgwLCAweDkzODMsIDB4MEM1QSwKKyAgICAweDkzODQsIDB4OTM4NCwgMHgxRTRELCAweDkzODUsIDB4OTM5NywgMHgwQzVGLCAweDkzOTgsIDB4OTM5OCwgMHgxRTRFLAorICAgIDB4OTM5OSwgMHg5M0JGLCAweDBDNzMsIDB4OTNDMCwgMHg5M0MwLCAweDFFNTAsIDB4OTNDMSwgMHg5M0QxLCAweDBDOUIsCisgICAgMHg5M0QyLCAweDkzRDIsIDB4MUU1MSwgMHg5M0QzLCAweDkzRDgsIDB4MENBRCwgMHg5M0Q5LCAweDkzRDksIDB4MUU1MywKKyAgICAweDkzREEsIDB4OTNFMywgMHgwQ0I0LCAweDkzRTQsIDB4OTNFNSwgMHgxRTU2LCAweDkzRTYsIDB4OTNFNywgMHgwQ0MwLAorICAgIDB4OTNFOCwgMHg5M0U4LCAweDFFNTgsIDB4OTNFOSwgMHg5M0YzLCAweDBDQzMsIDB4OTNGNCwgMHg5M0Y0LCAweDFFQzAsCisgICAgMHg5M0Y1LCAweDkzRkMsIDB4MENDRiwgMHg5NDQwLCAweDk0NDcsIDB4MENENywgMHg5NDQ4LCAweDk0NDgsIDB4MUU1OSwKKyAgICAweDk0NDksIDB4OTQ0OSwgMHgxRjI5LCAweDk0NEEsIDB4OTQ1NywgMHgwQ0UxLCAweDk0NTgsIDB4OTQ1OCwgMHgxRTVBLAorICAgIDB4OTQ1OSwgMHg5NDc1LCAweDBDRjAsIDB4OTQ3NiwgMHg5NDc2LCAweDFFNUIsIDB4OTQ3NywgMHg5NDdFLCAweDBEMEUsCisgICAgMHg5NDgwLCAweDk0ODYsIDB4MEQxNiwgMHg5NDg3LCAweDk0ODcsIDB4MUU1QywgMHg5NDg4LCAweDk0ODgsIDB4MEQxRSwKKyAgICAweDk0ODksIDB4OTQ4OSwgMHgxRTVELCAweDk0OEEsIDB4OTQ4QywgMHgwRDIwLCAweDk0OEQsIDB4OTQ4RCwgMHgxRTVFLAorICAgIDB4OTQ4RSwgMHg5NEExLCAweDBEMjQsIDB4OTRBMiwgMHg5NEEyLCAweDFFNUYsIDB4OTRBMywgMHg5NEFCLCAweDBEMzksCisgICAgMHg5NEFDLCAweDk0QUMsIDB4MUU2MCwgMHg5NEFELCAweDk0QUQsIDB4MEQ0MywgMHg5NEFFLCAweDk0QUUsIDB4MUU2MSwKKyAgICAweDk0QUYsIDB4OTRCRCwgMHgwRDQ1LCAweDk0QkUsIDB4OTRCRSwgMHgxRjJBLCAweDk0QkYsIDB4OTREMSwgMHgwRDU1LAorICAgIDB4OTREMiwgMHg5NEQyLCAweDFFNjIsIDB4OTREMywgMHg5NEYyLCAweDBENjksIDB4OTRGMywgMHg5NEYzLCAweDFFNjQsCisgICAgMHg5NEY0LCAweDk0RkMsIDB4MEQ4QSwgMHg5NTQwLCAweDk1NDAsIDB4MEQ5MywgMHg5NTQxLCAweDk1NDIsIDB4MUU2NSwKKyAgICAweDk1NDMsIDB4OTU0RCwgMHgwRDk2LCAweDk1NEUsIDB4OTU0RSwgMHgxRTY3LCAweDk1NEYsIDB4OTU1MCwgMHgwREEyLAorICAgIDB4OTU1MSwgMHg5NTUxLCAweDFFNjgsIDB4OTU1MiwgMHg5NTUzLCAweDBEQTUsIDB4OTU1NCwgMHg5NTU0LCAweDFFNjksCisgICAgMHg5NTU1LCAweDk1NUUsIDB4MERBOCwgMHg5NTVGLCAweDk1NUYsIDB4MUU2QSwgMHg5NTYwLCAweDk1NkMsIDB4MERCMywKKyAgICAweDk1NkQsIDB4OTU2RCwgMHgxRTZCLCAweDk1NkUsIDB4OTU3RSwgMHgwREMxLCAweDk1ODAsIDB4OTVDMCwgMHgwREQyLAorICAgIDB4OTVDMSwgMHg5NUMxLCAweDFFNkQsIDB4OTVDMiwgMHg5NUNBLCAweDBFMTQsIDB4OTVDQiwgMHg5NUNCLCAweDFFNkUsCisgICAgMHg5NUNDLCAweDk1RDAsIDB4MEUxRSwgMHg5NUQxLCAweDk1RDEsIDB4MUYyQiwgMHg5NUQyLCAweDk1RDcsIDB4MEUyNCwKKyAgICAweDk1RDgsIDB4OTVEOCwgMHgxRTZGLCAweDk1RDksIDB4OTVGNiwgMHgwRTJCLCAweDk1RjcsIDB4OTVGNywgMHgxRTcwLAorICAgIDB4OTVGOCwgMHg5NUZDLCAweDBFNEEsIDB4OTY0MCwgMHg5NjQ3LCAweDBFNEYsIDB4OTY0OCwgMHg5NjQ4LCAweDFFNzIsCisgICAgMHg5NjQ5LCAweDk2NjksIDB4MEU1OCwgMHg5NjZBLCAweDk2NkEsIDB4MUU3MywgMHg5NjZCLCAweDk2N0UsIDB4MEU3QSwKKyAgICAweDk2ODAsIDB4OTY4RiwgMHgwRThFLCAweDk2OTAsIDB4OTY5MCwgMHgxRTc0LCAweDk2OTEsIDB4OTY5NywgMHgwRTlGLAorICAgIDB4OTY5OCwgMHg5Njk4LCAweDFGMkMsIDB4OTY5OSwgMHg5NkNBLCAweDBFQTcsIDB4OTZDQiwgMHg5NkNCLCAweDFFNzUsCisgICAgMHg5NkNDLCAweDk2RDYsIDB4MEVEQSwgMHg5NkQ3LCAweDk2RDcsIDB4MUU3NiwgMHg5NkQ4LCAweDk2REMsIDB4MEVFNiwKKyAgICAweDk2REQsIDB4OTZERCwgMHgxRTc3LCAweDk2REUsIDB4OTZERiwgMHgwRUVDLCAweDk2RTAsIDB4OTZFMCwgMHgxRTc4LAorICAgIDB4OTZFMSwgMHg5NkY3LCAweDBFRUYsIDB4OTZGOCwgMHg5NkY4LCAweDFFNzksIDB4OTZGOSwgMHg5NkY5LCAweDBGMDcsCisgICAgMHg5NkZBLCAweDk2RkEsIDB4MUU3QSwgMHg5NkZCLCAweDk2RkMsIDB4MEYwOSwgMHg5NzQwLCAweDk3NTAsIDB4MEYwQiwKKyAgICAweDk3NTEsIDB4OTc1MSwgMHgxRTdDLCAweDk3NTIsIDB4OTc2RSwgMHgwRjFELCAweDk3NkYsIDB4OTc2RiwgMHgxRTdELAorICAgIDB4OTc3MCwgMHg5NzcyLCAweDBGM0IsIDB4OTc3MywgMHg5NzczLCAweDFFN0UsIDB4OTc3NCwgMHg5NzdFLCAweDBGM0YsCisgICAgMHg5NzgwLCAweDk3ODgsIDB4MEY0QSwgMHg5Nzg5LCAweDk3ODksIDB4MUU3RiwgMHg5NzhBLCAweDk3RjcsIDB4MEY1NCwKKyAgICAweDk3RjgsIDB4OTdGOSwgMHgxRTgxLCAweDk3RkEsIDB4OTdGQSwgMHgxRjJELCAweDk3RkIsIDB4OTdGQywgMHgwRkM1LAorICAgIDB4OTg0MCwgMHg5ODQwLCAweDFFODMsIDB4OTg0MSwgMHg5ODRGLCAweDBGQzgsIDB4OTg1MCwgMHg5ODUwLCAweDFFODQsCisgICAgMHg5ODUxLCAweDk4NTcsIDB4MEZEOCwgMHg5ODU4LCAweDk4NTgsIDB4MUU4NSwgMHg5ODU5LCAweDk4NzIsIDB4MEZFMCwKKyAgICAweDk4OUYsIDB4OThGQywgMHgwRkZBLCAweDk5NDAsIDB4OTk0MCwgMHgxMDU4LCAweDk5NDEsIDB4OTk0MSwgMHgxRjJFLAorICAgIDB4OTk0MiwgMHg5OTVCLCAweDEwNUEsIDB4OTk1QywgMHg5OTVDLCAweDFFODYsIDB4OTk1RCwgMHg5OTZCLCAweDEwNzUsCisgICAgMHg5OTZDLCAweDk5NkMsIDB4MUU4OSwgMHg5OTZELCAweDk5N0UsIDB4MTA4NSwgMHg5OTgwLCAweDk5QjUsIDB4MTA5NywKKyAgICAweDk5QjYsIDB4OTlCNiwgMHgxRjJGLCAweDk5QjcsIDB4OTlGQywgMHgxMENFLCAweDlBNDAsIDB4OUE0RSwgMHgxMTE0LAorICAgIDB4OUE0RiwgMHg5QTRGLCAweDFFOEEsIDB4OUE1MCwgMHg5QTU4LCAweDExMjQsIDB4OUE1OSwgMHg5QTU5LCAweDFFOEIsCisgICAgMHg5QTVBLCAweDlBNjYsIDB4MTEyRSwgMHg5QTY3LCAweDlBNjcsIDB4MUYzMCwgMHg5QTY4LCAweDlBN0MsIDB4MTEzQywKKyAgICAweDlBN0QsIDB4OUE3RCwgMHgxRThELCAweDlBN0UsIDB4OUE3RSwgMHgxMTUyLCAweDlBODAsIDB4OUE4QSwgMHgxMTUzLAorICAgIDB4OUE4QiwgMHg5QThCLCAweDFFOEUsIDB4OUE4QywgMHg5QThDLCAweDFGMzEsIDB4OUE4RCwgMHg5QUMxLCAweDExNjAsCisgICAgMHg5QUMyLCAweDlBQzIsIDB4MUU4RiwgMHg5QUMzLCAweDlBQzMsIDB4MUYzMiwgMHg5QUM0LCAweDlBRTksIDB4MTE5NywKKyAgICAweDlBRUEsIDB4OUFFQSwgMHgxRjMzLCAweDlBRUIsIDB4OUFGQywgMHgxMUJFLCAweDlCNDAsIDB4OUI1QiwgMHgxMUQwLAorICAgIDB4OUI1QywgMHg5QjVDLCAweDFFOTAsIDB4OUI1RCwgMHg5QjdFLCAweDExRUQsIDB4OUI4MCwgMHg5QjgyLCAweDEyMEYsCisgICAgMHg5QjgzLCAweDlCODMsIDB4MUU5MSwgMHg5Qjg0LCAweDlCOTcsIDB4MTIxMywgMHg5Qjk4LCAweDlCOTgsIDB4MUYzNCwKKyAgICAweDlCOTksIDB4OUI5RiwgMHgxMjI4LCAweDlCQTAsIDB4OUJBMCwgMHgxRTkyLCAweDlCQTEsIDB4OUJGQSwgMHgxMjMwLAorICAgIDB4OUJGQiwgMHg5QkZDLCAweDFGMzUsIDB4OUM0MCwgMHg5QzdFLCAweDEyOEMsIDB4OUM4MCwgMHg5Q0ExLCAweDEyQ0IsCisgICAgMHg5Q0EyLCAweDlDQTIsIDB4MUU5NCwgMHg5Q0EzLCAweDlDRkMsIDB4MTJFRSwgMHg5RDQwLCAweDlENDYsIDB4MTM0OCwKKyAgICAweDlENDcsIDB4OUQ0NywgMHgxRjM3LCAweDlENDgsIDB4OUQ3RSwgMHgxMzUwLCAweDlEODAsIDB4OUQ4MCwgMHgxRTk1LAorICAgIDB4OUQ4MSwgMHg5RDhCLCAweDEzODgsIDB4OUQ4QywgMHg5RDhDLCAweDFFOTYsIDB4OUQ4RCwgMHg5REI2LCAweDEzOTQsCisgICAgMHg5REI3LCAweDlEQjcsIDB4MUU5NywgMHg5REI4LCAweDlERjcsIDB4MTNCRiwgMHg5REY4LCAweDlERjgsIDB4MUYzOCwKKyAgICAweDlERjksIDB4OURGQywgMHgxNDAwLCAweDlFNDAsIDB4OUU2MywgMHgxNDA0LCAweDlFNjQsIDB4OUU2NCwgMHgxRTk5LAorICAgIDB4OUU2NSwgMHg5RTdFLCAweDE0MjksIDB4OUU4MCwgMHg5RThBLCAweDE0NDMsIDB4OUU4QiwgMHg5RThCLCAweDFFOUIsCisgICAgMHg5RThDLCAweDlFRkMsIDB4MTQ0RiwgMHg5RjQwLCAweDlGN0UsIDB4MTRDMCwgMHg5RjgwLCAweDlGODAsIDB4MTRGRiwKKyAgICAweDlGODEsIDB4OUY4MSwgMHgxRjM5LCAweDlGODIsIDB4OUZDRCwgMHgxNTAxLCAweDlGQ0UsIDB4OUZDRSwgMHgxRTlELAorICAgIDB4OUZDRiwgMHg5RkQzLCAweDE1NEUsIDB4OUZENCwgMHg5RkQ0LCAweDFGM0EsIDB4OUZENSwgMHg5RkYzLCAweDE1NTQsCisgICAgMHg5RkY0LCAweDlGRjQsIDB4MUYzQiwgMHg5RkY1LCAweDlGRkMsIDB4MTU3NCwgMHhFMDQwLCAweEUwN0UsIDB4MTU3QywKKyAgICAweEUwODAsIDB4RTA5MiwgMHgxNUJCLCAweEUwOTMsIDB4RTA5MywgMHgxRTlFLCAweEUwOTQsIDB4RTBBMywgMHgxNUNGLAorICAgIDB4RTBBNCwgMHhFMEE0LCAweDFFOUYsIDB4RTBBNSwgMHhFMERDLCAweDE1RTAsIDB4RTBERCwgMHhFMERELCAweDFFQTAsCisgICAgMHhFMERFLCAweEUwRkMsIDB4MTYxOSwgMHhFMTQwLCAweEUxNDksIDB4MTYzOCwgMHhFMTRBLCAweEUxNEEsIDB4MUVBMSwKKyAgICAweEUxNEIsIDB4RTE3RSwgMHgxNjQzLCAweEUxODAsIDB4RTFFQywgMHgxNjc3LCAweEUxRUQsIDB4RTFFRCwgMHgxRUE1LAorICAgIDB4RTFFRSwgMHhFMUZDLCAweDE2RTUsIDB4RTI0MCwgMHhFMjY4LCAweDE2RjQsIDB4RTI2OSwgMHhFMjY5LCAweDFFQTYsCisgICAgMHhFMjZBLCAweEUyNzIsIDB4MTcxRSwgMHhFMjczLCAweEUyNzMsIDB4MUVBNywgMHhFMjc0LCAweEUyNzcsIDB4MTcyOCwKKyAgICAweEUyNzgsIDB4RTI3OCwgMHgxRjNDLCAweEUyNzksIDB4RTI3RSwgMHgxNzJELCAweEUyODAsIDB4RTJCNiwgMHgxNzMzLAorICAgIDB4RTJCNywgMHhFMkI3LCAweDFFQTgsIDB4RTJCOCwgMHhFMkJELCAweDE3NkIsIDB4RTJCRSwgMHhFMkJFLCAweDFGM0QsCisgICAgMHhFMkJGLCAweEUyRTEsIDB4MTc3MiwgMHhFMkUyLCAweEUyRTIsIDB4MUVBOSwgMHhFMkUzLCAweEUyRUIsIDB4MTc5NiwKKyAgICAweEUyRUMsIDB4RTJFQywgMHgxRUFBLCAweEUyRUQsIDB4RTJGQywgMHgxN0EwLCAweEUzNDAsIDB4RTM1NywgMHgxN0IwLAorICAgIDB4RTM1OCwgMHhFMzU4LCAweDFFQUIsIDB4RTM1OSwgMHhFMzU5LCAweDE3QzksIDB4RTM1QSwgMHhFMzVBLCAweDFFQUMsCisgICAgMHhFMzVCLCAweEUzNjQsIDB4MTdDQiwgMHhFMzY1LCAweEUzNjUsIDB4MUVBRCwgMHhFMzY2LCAweEUzN0UsIDB4MTdENiwKKyAgICAweEUzODAsIDB4RTNDNiwgMHgxN0VGLCAweEUzQzcsIDB4RTNDNywgMHgxRjNFLCAweEUzQzgsIDB4RTNGQywgMHgxODM3LAorICAgIDB4RTQ0MCwgMHhFNDdFLCAweDE4NkMsIDB4RTQ4MCwgMHhFNDgzLCAweDE4QUIsIDB4RTQ4NCwgMHhFNDg0LCAweDFFQUYsCisgICAgMHhFNDg1LCAweEU0ODgsIDB4MThCMCwgMHhFNDg5LCAweEU0ODksIDB4MUVCMCwgMHhFNDhBLCAweEU0OTEsIDB4MThCNSwKKyAgICAweEU0OTIsIDB4RTQ5MiwgMHgxRUIxLCAweEU0OTMsIDB4RTRCOCwgMHgxOEJFLCAweEU0QjksIDB4RTRCOSwgMHgxRUIzLAorICAgIDB4RTRCQSwgMHhFNENBLCAweDE4RTUsIDB4RTRDQiwgMHhFNENCLCAweDFGM0YsIDB4RTRDQywgMHhFNEZDLCAweDE4RjcsCisgICAgMHhFNTQwLCAweEU1N0UsIDB4MTkyOCwgMHhFNTgwLCAweEU1OUQsIDB4MTk2NywgMHhFNTlFLCAweEU1OUUsIDB4MUY0MCwKKyAgICAweEU1OUYsIDB4RTVCOSwgMHgxOTg2LCAweEU1QkEsIDB4RTVCQiwgMHgxRjQxLCAweEU1QkMsIDB4RTVFQywgMHgxOUEzLAorICAgIDB4RTVFRCwgMHhFNUVELCAweDFFQjgsIDB4RTVFRSwgMHhFNUZDLCAweDE5RDUsIDB4RTY0MCwgMHhFNjUwLCAweDE5RTQsCisgICAgMHhFNjUxLCAweEU2NTEsIDB4MUVCOSwgMHhFNjUyLCAweEU2N0UsIDB4MTlGNiwgMHhFNjgwLCAweEU2ODUsIDB4MUEyMywKKyAgICAweEU2ODYsIDB4RTY4NiwgMHgxRUJBLCAweEU2ODcsIDB4RTZFNiwgMHgxQTJBLCAweEU2RTcsIDB4RTZFNywgMHgxRUJDLAorICAgIDB4RTZFOCwgMHhFNkZDLCAweDFBOEIsIDB4RTc0MCwgMHhFNzZDLCAweDFBQTAsIDB4RTc2RCwgMHhFNzZELCAweDFFQkUsCisgICAgMHhFNzZFLCAweEU3N0UsIDB4MUFDRSwgMHhFNzgwLCAweEU3QTYsIDB4MUFERiwgMHhFN0E3LCAweEU3QTcsIDB4MUVDMSwKKyAgICAweEU3QTgsIDB4RTdCQSwgMHgxQjA3LCAweEU3QkIsIDB4RTdCQiwgMHgxRUMyLCAweEU3QkMsIDB4RTdGQywgMHgxQjFCLAorICAgIDB4RTg0MCwgMHhFODdFLCAweDFCNUMsIDB4RTg4MCwgMHhFOENFLCAweDFCOUIsIDB4RThDRiwgMHhFOENGLCAweDFFQzcsCisgICAgMHhFOEQwLCAweEU4RkMsIDB4MUJFQiwgMHhFOTQwLCAweEU5NzcsIDB4MUMxOCwgMHhFOTc4LCAweEU5NzgsIDB4MUY0MywKKyAgICAweEU5NzksIDB4RTk3RSwgMHgxQzUxLCAweEU5ODAsIDB4RTlBQSwgMHgxQzU3LCAweEU5QUIsIDB4RTlBQiwgMHgxRUNBLAorICAgIDB4RTlBQywgMHhFOUI5LCAweDFDODMsIDB4RTlCQSwgMHhFOUJBLCAweDFFQ0IsIDB4RTlCQiwgMHhFOUNCLCAweDFDOTIsCisgICAgMHhFOUNDLCAweEU5Q0MsIDB4MUVDQywgMHhFOUNELCAweEU5RkMsIDB4MUNBNCwgMHhFQTQwLCAweEVBNkYsIDB4MUNENCwKKyAgICAweEVBNzAsIDB4RUE3MCwgMHgxRUNELCAweEVBNzEsIDB4RUE3MSwgMHgxRjQ0LCAweEVBNzIsIDB4RUE3RSwgMHgxRDA2LAorICAgIDB4RUE4MCwgMHhFQTlDLCAweDFEMTMsIDB4RUE5RCwgMHhFQTlELCAweDFFQ0UsIDB4RUE5RSwgMHhFQUEyLCAweDFEMzEsCisgICAgMHhFQUEzLCAweEVBQTQsIDB4MjA1QywgMHhFQzQwLCAweEVDNDIsIDB4MUY0NSwgMHhFQzQ2LCAweEVDNDYsIDB4MUY0OCwKKyAgICAweEVDNDcsIDB4RUM0NywgMHgwMzAwLCAweEVDNDgsIDB4RUM0OCwgMHgwMkZBLCAweEVDNDksIDB4RUM0OSwgMHgwMkY5LAorICAgIDB4RUM0RCwgMHhFQzU3LCAweDFGNDksIDB4RUM1QiwgMHhFQzVELCAweDFEQjEsIDB4RUM1RSwgMHhFQzVFLCAweDFGNTQsCisgICAgMHhFQzVGLCAweEVDNUYsIDB4MURCNywgMHhFQzYwLCAweEVDNjIsIDB4MUY1NSwgMHhFQzYzLCAweEVDNjUsIDB4MURCNCwKKyAgICAweEVDNjYsIDB4RUM2RiwgMHgxRjU4LCAweEVDNzAsIDB4RUM3MCwgMHgwMzAzLCAweEVDNzEsIDB4RUM3MSwgMHgxRjYyLAorICAgIDB4RUM3MiwgMHhFQzcyLCAweDAzMDQsIDB4RUM3MywgMHhFQzc0LCAweDFGNjMsIDB4RUM3NiwgMHhFQzc2LCAweDFGNjUsCisgICAgMHhFQzc4LCAweEVDNzgsIDB4MURBNCwgMHhFQzc5LCAweEVDNzksIDB4MURBMSwgMHhFQzdBLCAweEVDN0EsIDB4MUY2NiwKKyAgICAweEVDN0IsIDB4RUM3QiwgMHgxREEyLCAweEVDN0MsIDB4RUM3RSwgMHgxRjY3LCAweEVDODAsIDB4RUM4MCwgMHgxREE2LAorICAgIDB4RUM4MSwgMHhFQzgxLCAweDFGNkEsIDB4RUM4MiwgMHhFQzgyLCAweDFEQTgsIDB4RUM4MywgMHhFQzgzLCAweDFEQUMsCisgICAgMHhFQzg0LCAweEVDODQsIDB4MUY2QiwgMHhFQzg1LCAweEVDODUsIDB4MURBRSwgMHhFQzg2LCAweEVDODYsIDB4MURBQiwKKyAgICAweEVDODcsIDB4RUM4OCwgMHgxRjZDLCAweEVDODksIDB4RUM4OSwgMHgxREFGLCAweEVDOEEsIDB4RUM5MCwgMHgxRjZFLAorICAgIDB4RUM5NCwgMHhFQzk5LCAweDFGNzUsIDB4RUM5QSwgMHhFQzlBLCAweDFEQkEsIDB4RUM5QiwgMHhFQzlCLCAweDFGN0IsCisgICAgMHhFQzlFLCAweEVDOUUsIDB4MUY3QywgMHhFQ0E3LCAweEVDQjAsIDB4MUY3RCwgMHhFQ0IyLCAweEVDQzUsIDB4MUY4NywKKyAgICAweEVDQzcsIDB4RUNEQSwgMHgxRDgzLCAweEVDREIsIDB4RUNEQiwgMHgxRjlCLCAweEVDREMsIDB4RUNFNSwgMHgxRDk3LAorICAgIDB4RUNFOSwgMHhFQ0ZDLCAweDFGOUMsIDB4RUQ0MCwgMHhFRDU5LCAweDFGQjAsIDB4RUQ2NCwgMHhFRDY0LCAweDFGMTYsCisgICAgMHhFRDY4LCAweEVENjksIDB4MUZDQSwgMHhFRDZBLCAweEVENkEsIDB4MURDNCwgMHhFRDZCLCAweEVENkQsIDB4MUZDQywKKyAgICAweEVENkUsIDB4RUQ2RSwgMHgxREMzLCAweEVENkYsIDB4RUQ3MywgMHgxRkNGLCAweEVENzQsIDB4RUQ3NCwgMHgxREMyLAorICAgIDB4RUQ3NSwgMHhFRDc4LCAweDFGRDQsIDB4RUQ3QywgMHhFRDdFLCAweDFGRDgsIDB4RUQ4MCwgMHhFRDhBLCAweDFGREIsCisgICAgMHhFRDhGLCAweEVEOUUsIDB4MUZFNiwgMHhFRjQwLCAweEVGNDEsIDB4MUVDRiwgMHhFRjQyLCAweEVGNDIsIDB4MjA0QywKKyAgICAweEVGNDMsIDB4RUY0MywgMHgyMDUyLCAweEVGNDQsIDB4RUY0RCwgMHgxRUQxLCAweEVGNEUsIDB4RUY0RSwgMHgyMDVBLAorICAgIDB4RUY0RiwgMHhFRjRGLCAweDIwNTMsIDB4RUY1MCwgMHhFRjUwLCAweDIwNTgsIDB4RUY1MSwgMHhFRjUxLCAweDIwNTUsCisgICAgMHhFRjUyLCAweEVGNjMsIDB4MUVEQiwgMHhFRjY0LCAweEVGNzksIDB4MUVFRSwgMHhFRjdBLCAweEVGN0IsIDB4MjA0OCwKKyAgICAweEVGOEQsIDB4RUY5MCwgMHgwMkUwLCAweEVGOTEsIDB4RUY5NCwgMHgxRkY2LAorfTsKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvQWRkLVJLU0otVl8xLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvQWRkLVJLU0otVl8xLmNwcAppbmRleCA4NzM2MTg0Li5jODU1OTExIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvSmFwYW4xL0FkZC1SS1NKLVZfMS5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0phcGFuMS9BZGQtUktTSi1WXzEuY3BwCkBAIC0xLDI3ICsxLDI3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfQWRkX1JLU0pfVl8xWzU3ICogM10gPSB7DQotICAgIDB4ODE0MSwgMHg4MTQyLCAweDFFQ0YsIDB4ODE0MywgMHg4MTQzLCAweDIwNEMsIDB4ODE0NCwgMHg4MTQ0LCAweDIwNTIsDQotICAgIDB4ODE1MCwgMHg4MTUxLCAweDFFRDEsIDB4ODE1QiwgMHg4MTVELCAweDFFRDMsIDB4ODE2MCwgMHg4MTY0LCAweDFFRDYsDQotICAgIDB4ODE2NSwgMHg4MTY1LCAweDIwNUEsIDB4ODE2NiwgMHg4MTY2LCAweDIwNTMsIDB4ODE2NywgMHg4MTY3LCAweDIwNTgsDQotICAgIDB4ODE2OCwgMHg4MTY4LCAweDIwNTUsIDB4ODE2OSwgMHg4MTdBLCAweDFFREIsIDB4ODI5RiwgMHg4MjlGLCAweDFFRUUsDQotICAgIDB4ODJBMSwgMHg4MkExLCAweDFFRUYsIDB4ODJBMywgMHg4MkEzLCAweDFFRjAsIDB4ODJBNSwgMHg4MkE1LCAweDFFRjEsDQotICAgIDB4ODJBNywgMHg4MkE3LCAweDFFRjIsIDB4ODJDMSwgMHg4MkMxLCAweDFFRjMsIDB4ODJFMSwgMHg4MkUxLCAweDFFRjQsDQotICAgIDB4ODJFMywgMHg4MkUzLCAweDFFRjUsIDB4ODJFNSwgMHg4MkU1LCAweDFFRjYsIDB4ODJFQywgMHg4MkVDLCAweDFFRjcsDQotICAgIDB4ODJGMywgMHg4MkY0LCAweDIwNDgsIDB4ODM0MCwgMHg4MzQwLCAweDFFRjgsIDB4ODM0MiwgMHg4MzQyLCAweDFFRjksDQotICAgIDB4ODM0NCwgMHg4MzQ0LCAweDFFRkEsIDB4ODM0NiwgMHg4MzQ2LCAweDFFRkIsIDB4ODM0OCwgMHg4MzQ4LCAweDFFRkMsDQotICAgIDB4ODM2MiwgMHg4MzYyLCAweDFFRkQsIDB4ODM4MywgMHg4MzgzLCAweDFFRkUsIDB4ODM4NSwgMHg4Mzg1LCAweDFFRkYsDQotICAgIDB4ODM4NywgMHg4Mzg3LCAweDFGMDAsIDB4ODM4RSwgMHg4MzhFLCAweDFGMDEsIDB4ODM5NSwgMHg4Mzk2LCAweDFGMDIsDQotICAgIDB4RUM3OCwgMHhFQzc4LCAweDFGMDcsIDB4RUM3OSwgMHhFQzc5LCAweDFGMDQsIDB4RUM3QSwgMHhFQzdBLCAweDIwODksDQotICAgIDB4RUM3QiwgMHhFQzdCLCAweDFGMDUsIDB4RUM3QywgMHhFQzdDLCAweDIwOEEsIDB4RUM3RCwgMHhFQzdFLCAweDIwOTMsDQotICAgIDB4RUM4MCwgMHhFQzgwLCAweDFGMDksIDB4RUM4MSwgMHhFQzgxLCAweDIwOTIsIDB4RUM4MiwgMHhFQzgyLCAweDFGMEIsDQotICAgIDB4RUM4MywgMHhFQzgzLCAweDFGMEYsIDB4RUM4NCwgMHhFQzg0LCAweDIwOUMsIDB4RUM4NSwgMHhFQzg1LCAweDFGMTEsDQotICAgIDB4RUM4NiwgMHhFQzg2LCAweDFGMEUsIDB4RUM4NywgMHhFQzg3LCAweDIwOTgsIDB4RUM4OCwgMHhFQzg4LCAweDIwOUIsDQotICAgIDB4RUM4OSwgMHhFQzg5LCAweDFGMTIsIDB4RUM4QSwgMHhFQzhBLCAweDIwOTcsIDB4RUM4QiwgMHhFQzhDLCAweDIwOUQsDQotICAgIDB4RUM4RCwgMHhFQzhELCAweDIwQTYsIDB4RUM4RSwgMHhFQzhFLCAweDIwQTUsIDB4RUM4RiwgMHhFQzhGLCAweDIwQTEsDQotICAgIDB4RUM5MCwgMHhFQzkwLCAweDIwQTQsIDB4RUM5NSwgMHhFQzk1LCAweDIwODQsIDB4RUY5MiwgMHhFRjkyLCAweDIwOEQsDQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfQWRkX1JLU0pfVl8xWzU3ICogM10gPSB7CisgICAgMHg4MTQxLCAweDgxNDIsIDB4MUVDRiwgMHg4MTQzLCAweDgxNDMsIDB4MjA0QywgMHg4MTQ0LCAweDgxNDQsIDB4MjA1MiwKKyAgICAweDgxNTAsIDB4ODE1MSwgMHgxRUQxLCAweDgxNUIsIDB4ODE1RCwgMHgxRUQzLCAweDgxNjAsIDB4ODE2NCwgMHgxRUQ2LAorICAgIDB4ODE2NSwgMHg4MTY1LCAweDIwNUEsIDB4ODE2NiwgMHg4MTY2LCAweDIwNTMsIDB4ODE2NywgMHg4MTY3LCAweDIwNTgsCisgICAgMHg4MTY4LCAweDgxNjgsIDB4MjA1NSwgMHg4MTY5LCAweDgxN0EsIDB4MUVEQiwgMHg4MjlGLCAweDgyOUYsIDB4MUVFRSwKKyAgICAweDgyQTEsIDB4ODJBMSwgMHgxRUVGLCAweDgyQTMsIDB4ODJBMywgMHgxRUYwLCAweDgyQTUsIDB4ODJBNSwgMHgxRUYxLAorICAgIDB4ODJBNywgMHg4MkE3LCAweDFFRjIsIDB4ODJDMSwgMHg4MkMxLCAweDFFRjMsIDB4ODJFMSwgMHg4MkUxLCAweDFFRjQsCisgICAgMHg4MkUzLCAweDgyRTMsIDB4MUVGNSwgMHg4MkU1LCAweDgyRTUsIDB4MUVGNiwgMHg4MkVDLCAweDgyRUMsIDB4MUVGNywKKyAgICAweDgyRjMsIDB4ODJGNCwgMHgyMDQ4LCAweDgzNDAsIDB4ODM0MCwgMHgxRUY4LCAweDgzNDIsIDB4ODM0MiwgMHgxRUY5LAorICAgIDB4ODM0NCwgMHg4MzQ0LCAweDFFRkEsIDB4ODM0NiwgMHg4MzQ2LCAweDFFRkIsIDB4ODM0OCwgMHg4MzQ4LCAweDFFRkMsCisgICAgMHg4MzYyLCAweDgzNjIsIDB4MUVGRCwgMHg4MzgzLCAweDgzODMsIDB4MUVGRSwgMHg4Mzg1LCAweDgzODUsIDB4MUVGRiwKKyAgICAweDgzODcsIDB4ODM4NywgMHgxRjAwLCAweDgzOEUsIDB4ODM4RSwgMHgxRjAxLCAweDgzOTUsIDB4ODM5NiwgMHgxRjAyLAorICAgIDB4RUM3OCwgMHhFQzc4LCAweDFGMDcsIDB4RUM3OSwgMHhFQzc5LCAweDFGMDQsIDB4RUM3QSwgMHhFQzdBLCAweDIwODksCisgICAgMHhFQzdCLCAweEVDN0IsIDB4MUYwNSwgMHhFQzdDLCAweEVDN0MsIDB4MjA4QSwgMHhFQzdELCAweEVDN0UsIDB4MjA5MywKKyAgICAweEVDODAsIDB4RUM4MCwgMHgxRjA5LCAweEVDODEsIDB4RUM4MSwgMHgyMDkyLCAweEVDODIsIDB4RUM4MiwgMHgxRjBCLAorICAgIDB4RUM4MywgMHhFQzgzLCAweDFGMEYsIDB4RUM4NCwgMHhFQzg0LCAweDIwOUMsIDB4RUM4NSwgMHhFQzg1LCAweDFGMTEsCisgICAgMHhFQzg2LCAweEVDODYsIDB4MUYwRSwgMHhFQzg3LCAweEVDODcsIDB4MjA5OCwgMHhFQzg4LCAweEVDODgsIDB4MjA5QiwKKyAgICAweEVDODksIDB4RUM4OSwgMHgxRjEyLCAweEVDOEEsIDB4RUM4QSwgMHgyMDk3LCAweEVDOEIsIDB4RUM4QywgMHgyMDlELAorICAgIDB4RUM4RCwgMHhFQzhELCAweDIwQTYsIDB4RUM4RSwgMHhFQzhFLCAweDIwQTUsIDB4RUM4RiwgMHhFQzhGLCAweDIwQTEsCisgICAgMHhFQzkwLCAweEVDOTAsIDB4MjBBNCwgMHhFQzk1LCAweEVDOTUsIDB4MjA4NCwgMHhFRjkyLCAweEVGOTIsIDB4MjA4RCwKK307CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvSmFwYW4xL0Fkb2JlLUphcGFuMS1VQ1MyXzQuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0phcGFuMS9BZG9iZS1KYXBhbjEtVUNTMl80LmNwcAppbmRleCBlMDA4MGExLi4zNDU0NTM3IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvSmFwYW4xL0Fkb2JlLUphcGFuMS1VQ1MyXzQuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvQWRvYmUtSmFwYW4xLVVDUzJfNC5jcHAKQEAgLTEsMTkzOSArMSwxOTM5IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfSmFwYW4xQ0lEMlVuaWNvZGVfNFsxNTQ0NF0gPSB7DQotICAgIDB4RkZGRCwgMHgwMDIwLCAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LA0KLSAgICAweDAwMjcsIDB4MDAyOCwgMHgwMDI5LCAweDAwMkEsIDB4MDAyQiwgMHgwMDJDLCAweDAwMkQsIDB4MDAyRSwNCi0gICAgMHgwMDJGLCAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsDQotICAgIDB4MDAzNywgMHgwMDM4LCAweDAwMzksIDB4MDAzQSwgMHgwMDNCLCAweDAwM0MsIDB4MDAzRCwgMHgwMDNFLA0KLSAgICAweDAwM0YsIDB4MDA0MCwgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwNCi0gICAgMHgwMDQ3LCAweDAwNDgsIDB4MDA0OSwgMHgwMDRBLCAweDAwNEIsIDB4MDA0QywgMHgwMDRELCAweDAwNEUsDQotICAgIDB4MDA0RiwgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LA0KLSAgICAweDAwNTcsIDB4MDA1OCwgMHgwMDU5LCAweDAwNUEsIDB4MDA1QiwgMHgwMEE1LCAweDAwNUQsIDB4MDA1RSwNCi0gICAgMHgwMDVGLCAweDAwNjAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsDQotICAgIDB4MDA2NywgMHgwMDY4LCAweDAwNjksIDB4MDA2QSwgMHgwMDZCLCAweDAwNkMsIDB4MDA2RCwgMHgwMDZFLA0KLSAgICAweDAwNkYsIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwNCi0gICAgMHgwMDc3LCAweDAwNzgsIDB4MDA3OSwgMHgwMDdBLCAweDAwN0IsIDB4MDBBNiwgMHgwMDdELCAweDAzMDMsDQotICAgIDB4MDJCQywgMHgwMDVDLCAweDAyQkIsIDB4MDA3QywgMHgwMDdFLCAweDAwQTEsIDB4MDBBMiwgMHgwMEEzLA0KLSAgICAweDIwNDQsIDB4MDE5MiwgMHgwMEE3LCAweDAwQTQsIDB4MjAxQywgMHgwMEFCLCAweDIwMzksIDB4MjAzQSwNCi0gICAgMHhGQjAxLCAweEZCMDIsIDB4MjAxMiwgMHgyMDIwLCAweDIwMjEsIDB4MDBCNywgMHgwMEI2LCAweDIwMjIsDQotICAgIDB4MjAxQSwgMHgyMDFFLCAweDIwMUQsIDB4MDBCQiwgMHgyMDI2LCAweDIwMzAsIDB4MDBCRiwgMHgwMzAxLA0KLSAgICAweDAzMDIsIDB4MDBBRiwgMHgwMzA2LCAweDAzMDcsIDB4MDMwOCwgMHgwMzBBLCAweDAwQjgsIDB4MDMwQiwNCi0gICAgMHgwMzI4LCAweDAzMEMsIDB4MDMzNiwgMHgwMEM2LCAweDAwQUEsIDB4MDE0MSwgMHgwMEQ4LCAweDAxNTIsDQotICAgIDB4MDBCQSwgMHgwMEU2LCAweDAxMzEsIDB4MDE0MiwgMHgwMEY4LCAweDAxNTMsIDB4MDBERiwgMHgwMDJELA0KLSAgICAweDAwQTksIDB4MDBBQywgMHgwMEFFLCAweDAwQjAsIDB4MDBCMSwgMHgwMEIyLCAweDAwQjMsIDB4MDBCNSwNCi0gICAgMHgwMEI5LCAweDAwQkMsIDB4MDBCRCwgMHgwMEJFLCAweDAwQzAsIDB4MDBDMSwgMHgwMEMyLCAweDAwQzMsDQotICAgIDB4MDBDNCwgMHgwMEM1LCAweDAwQzcsIDB4MDBDOCwgMHgwMEM5LCAweDAwQ0EsIDB4MDBDQiwgMHgwMENDLA0KLSAgICAweDAwQ0QsIDB4MDBDRSwgMHgwMENGLCAweDAwRDAsIDB4MDBEMSwgMHgwMEQyLCAweDAwRDMsIDB4MDBENCwNCi0gICAgMHgwMEQ1LCAweDAwRDYsIDB4MDBENywgMHgwMEQ5LCAweDAwREEsIDB4MDBEQiwgMHgwMERDLCAweDAwREQsDQotICAgIDB4MDBERSwgMHgwMEUwLCAweDAwRTEsIDB4MDBFMiwgMHgwMEUzLCAweDAwRTQsIDB4MDBFNSwgMHgwMEU3LA0KLSAgICAweDAwRTgsIDB4MDBFOSwgMHgwMEVBLCAweDAwRUIsIDB4MDBFQywgMHgwMEVELCAweDAwRUUsIDB4MDBFRiwNCi0gICAgMHgwMEYwLCAweDAwRjEsIDB4MDBGMiwgMHgwMEYzLCAweDAwRjQsIDB4MDBGNSwgMHgwMEY2LCAweDAwRjcsDQotICAgIDB4MDBGOSwgMHgwMEZBLCAweDAwRkIsIDB4MDBGQywgMHgwMEZELCAweDAwRkUsIDB4MDBGRiwgMHgwMTYwLA0KLSAgICAweDAxNzgsIDB4MDE3RCwgMHgwMzA1LCAweDAxNjEsIDB4MjEyMiwgMHgwMTdFLCAweDAwMzAsIDB4MDAyMCwNCi0gICAgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LCAweDAwMjgsDQotICAgIDB4MDAyOSwgMHgwMDJBLCAweDAwMkIsIDB4MDAyQywgMHgwMDJELCAweDAwMkUsIDB4MDAyRiwgMHgwMDMwLA0KLSAgICAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsIDB4MDAzOCwNCi0gICAgMHgwMDM5LCAweDAwM0EsIDB4MDAzQiwgMHgwMDNDLCAweDAwM0QsIDB4MDAzRSwgMHgwMDNGLCAweDAwNDAsDQotICAgIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywgMHgwMDQ4LA0KLSAgICAweDAwNDksIDB4MDA0QSwgMHgwMDRCLCAweDAwNEMsIDB4MDA0RCwgMHgwMDRFLCAweDAwNEYsIDB4MDA1MCwNCi0gICAgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LCAweDAwNTgsDQotICAgIDB4MDA1OSwgMHgwMDVBLCAweDAwNUIsIDB4MDBBNSwgMHgwMDVELCAweDAwNUUsIDB4MDA1RiwgMHgwMDYwLA0KLSAgICAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsIDB4MDA2OCwNCi0gICAgMHgwMDY5LCAweDAwNkEsIDB4MDA2QiwgMHgwMDZDLCAweDAwNkQsIDB4MDA2RSwgMHgwMDZGLCAweDAwNzAsDQotICAgIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywgMHgwMDc4LA0KLSAgICAweDAwNzksIDB4MDA3QSwgMHgwMDdCLCAweDAwN0MsIDB4MDA3RCwgMHgyMDNFLCAweEZGNjAsIDB4RkY2MSwNCi0gICAgMHhGRjYyLCAweEZGNjMsIDB4RkY2NCwgMHhGRjY1LCAweEZGNjYsIDB4RkY2NywgMHhGRjY4LCAweEZGNjksDQotICAgIDB4RkY2QSwgMHhGRjZCLCAweEZGNkMsIDB4RkY2RCwgMHhGRjZFLCAweEZGNkYsIDB4RkY3MCwgMHhGRjcxLA0KLSAgICAweEZGNzIsIDB4RkY3MywgMHhGRjc0LCAweEZGNzUsIDB4RkY3NiwgMHhGRjc3LCAweEZGNzgsIDB4RkY3OSwNCi0gICAgMHhGRjdBLCAweEZGN0IsIDB4RkY3QywgMHhGRjdELCAweEZGN0UsIDB4RkY3RiwgMHhGRjgwLCAweEZGODEsDQotICAgIDB4RkY4MiwgMHhGRjgzLCAweEZGODQsIDB4RkY4NSwgMHhGRjg2LCAweEZGODcsIDB4RkY4OCwgMHhGRjg5LA0KLSAgICAweEZGOEEsIDB4RkY4QiwgMHhGRjhDLCAweEZGOEQsIDB4RkY4RSwgMHhGRjhGLCAweEZGOTAsIDB4RkY5MSwNCi0gICAgMHhGRjkyLCAweEZGOTMsIDB4RkY5NCwgMHhGRjk1LCAweEZGOTYsIDB4RkY5NywgMHhGRjk4LCAweEZGOTksDQotICAgIDB4RkY5QSwgMHhGRjlCLCAweEZGOUMsIDB4RkY5RCwgMHhGRjlFLCAweEZGOUYsIDB4RkY0MCwgMHgzMEYwLA0KLSAgICAweDMwRjEsIDB4MzBFRSwgMHgzMEFCLCAweDMwQjEsIDB4MzBGNCwgMHgzMEFDLCAweDMwQUUsIDB4MzBCMCwNCi0gICAgMHgzMEIyLCAweDMwQjQsIDB4MzBCNiwgMHgzMEI4LCAweDMwQkEsIDB4MzBCQywgMHgzMEJFLCAweDMwQzAsDQotICAgIDB4MzBDMiwgMHgzMEM1LCAweDMwQzcsIDB4MzBDOSwgMHgzMEQwLCAweDMwRDEsIDB4MzBEMywgMHgzMEQ0LA0KLSAgICAweDMwRDYsIDB4MzBENywgMHgzMEQ5LCAweDMwREEsIDB4MzBEQywgMHgzMERELCAweEZGNjAsIDB4MzAxRCwNCi0gICAgMHgzMDFFLCAweDI1MDAsIDB4MjUwMSwgMHgyNTAyLCAweDI1MDMsIDB4MjUwNCwgMHgyNTA1LCAweDI1MDYsDQotICAgIDB4MjUwNywgMHgyNTA4LCAweDI1MDksIDB4MjUwQSwgMHgyNTBCLCAweDI1MEMsIDB4MjUwRCwgMHgyNTBFLA0KLSAgICAweDI1MEYsIDB4MjUxMCwgMHgyNTExLCAweDI1MTIsIDB4MjUxMywgMHgyNTE0LCAweDI1MTUsIDB4MjUxNiwNCi0gICAgMHgyNTE3LCAweDI1MTgsIDB4MjUxOSwgMHgyNTFBLCAweDI1MUIsIDB4MjUxQywgMHgyNTFELCAweDI1MUUsDQotICAgIDB4MjUxRiwgMHgyNTIwLCAweDI1MjEsIDB4MjUyMiwgMHgyNTIzLCAweDI1MjQsIDB4MjUyNSwgMHgyNTI2LA0KLSAgICAweDI1MjcsIDB4MjUyOCwgMHgyNTI5LCAweDI1MkEsIDB4MjUyQiwgMHgyNTJDLCAweDI1MkQsIDB4MjUyRSwNCi0gICAgMHgyNTJGLCAweDI1MzAsIDB4MjUzMSwgMHgyNTMyLCAweDI1MzMsIDB4MjUzNCwgMHgyNTM1LCAweDI1MzYsDQotICAgIDB4MjUzNywgMHgyNTM4LCAweDI1MzksIDB4MjUzQSwgMHgyNTNCLCAweDI1M0MsIDB4MjUzRCwgMHgyNTNFLA0KLSAgICAweDI1M0YsIDB4MjU0MCwgMHgyNTQxLCAweDI1NDIsIDB4MjU0MywgMHgyNTQ0LCAweDI1NDUsIDB4MjU0NiwNCi0gICAgMHgyNTQ3LCAweDI1NDgsIDB4MjU0OSwgMHgyNTRBLCAweDI1NEIsIDB4MjAzMiwgMHgwMEE4LCAweDIwMzYsDQotICAgIDB4MDA1QiwgMHgwMDVELCAweDMwMDgsIDB4MzAwOSwgMHgzMDBBLCAweDMwMEIsIDB4MzAwRSwgMHgzMDBGLA0KLSAgICAweDMwMTAsIDB4MzAxMSwgMHgyMDEyLCAweEZGNjAsIDB4MzA5MiwgMHgzMDQxLCAweDMwNDMsIDB4MzA0NSwNCi0gICAgMHgzMDQ3LCAweDMwNDksIDB4MzA4MywgMHgzMDg1LCAweDMwODcsIDB4MzA2MywgMHgzMDQyLCAweDMwNDQsDQotICAgIDB4MzA0NiwgMHgzMDQ4LCAweDMwNEEsIDB4MzA0QiwgMHgzMDRELCAweDMwNEYsIDB4MzA1MSwgMHgzMDUzLA0KLSAgICAweDMwNTUsIDB4MzA1NywgMHgzMDU5LCAweDMwNUIsIDB4MzA1RCwgMHgzMDVGLCAweDMwNjEsIDB4MzA2NCwNCi0gICAgMHgzMDY2LCAweDMwNjgsIDB4MzA2QSwgMHgzMDZCLCAweDMwNkMsIDB4MzA2RCwgMHgzMDZFLCAweDMwNkYsDQotICAgIDB4MzA3MiwgMHgzMDc1LCAweDMwNzgsIDB4MzA3QiwgMHgzMDdFLCAweDMwN0YsIDB4MzA4MCwgMHgzMDgxLA0KLSAgICAweDMwODIsIDB4MzA4NCwgMHgzMDg2LCAweDMwODgsIDB4MzA4OSwgMHgzMDhBLCAweDMwOEIsIDB4MzA4QywNCi0gICAgMHgzMDhELCAweDMwOEYsIDB4MzA5MywgMHgzMDkwLCAweDMwOTEsIDB4MzA4RSwgMHgzMDRDLCAweDMwNEUsDQotICAgIDB4MzA1MCwgMHgzMDUyLCAweDMwNTQsIDB4MzA1NiwgMHgzMDY4LCAweDMwNUEsIDB4MzA1QywgMHgzMDVFLA0KLSAgICAweDMwNjAsIDB4MzA2MiwgMHgzMDY1LCAweDMwNjcsIDB4MzA2OSwgMHgzMDcwLCAweDMwNzEsIDB4MzA3MywNCi0gICAgMHgzMDc0LCAweDMwNzYsIDB4MzA3NywgMHgzMDc5LCAweDMwN0EsIDB4MzA3QywgMHgzMDdELCAweDAwQzQsDQotICAgIDB4MDBGOSwgMHgwMEU5LCAweDAwRUQsIDB4MDBERiwgMHgwMEU3LCAweDAwQzcsIDB4MDBEMSwgMHgwMEYxLA0KLSAgICAweDAwQTIsIDB4MDBBMywgMHgwMEYzLCAweDAwRkEsIDB4MDBBMSwgMHgwMEJGLCAweDAwQkQsIDB4MDBENiwNCi0gICAgMHgwMERDLCAweDAwRTQsIDB4MDBFQiwgMHgwMEVGLCAweDAwRjYsIDB4MDBEQywgMHgwMEUyLCAweDAwRUEsDQotICAgIDB4MDBFRSwgMHgwMEY0LCAweDAwRkMsIDB4MDBFMCwgMHgwMEU5LCAweDI1QjIsIDB4MDBFMSwgMHgwMDdFLA0KLSAgICAweDAwMzAsIDB4MzAwMCwgMHgzMDAxLCAweDMwMDIsIDB4RkYwQywgMHhGRjBFLCAweDMwRkIsIDB4RkYxQSwNCi0gICAgMHhGRjFCLCAweEZGMUYsIDB4RkYwMSwgMHgzMDlCLCAweDMwOUMsIDB4MDBCNCwgMHhGRjQwLCAweDAwQTgsDQotICAgIDB4RkYzRSwgMHgyMDNFLCAweEZGM0YsIDB4MzBGRCwgMHgzMEZFLCAweDMwOUQsIDB4MzA5RSwgMHgzMDAzLA0KLSAgICAweDRFREQsIDB4MzAwNSwgMHgzMDA2LCAweDMwMDcsIDB4MzBGQywgMHgyMDE1LCAweDIwMTAsIDB4RkYwRiwNCi0gICAgMHhGRjNDLCAweEZGNUUsIDB4MjAxNiwgMHhGRjVDLCAweDIwMjYsIDB4MjAyNSwgMHgyMDE4LCAweDIwMTksDQotICAgIDB4MjAxQywgMHgyMDFELCAweEZGMDgsIDB4RkYwOSwgMHgzMDE0LCAweDMwMTUsIDB4RkYzQiwgMHhGRjNELA0KLSAgICAweEZGNUIsIDB4RkY1RCwgMHgzMDA4LCAweDMwMDksIDB4MzAwQSwgMHgzMDBCLCAweDMwMEMsIDB4MzAwRCwNCi0gICAgMHgzMDBFLCAweDMwMEYsIDB4MzAxMCwgMHgzMDExLCAweEZGMEIsIDB4RkYwRCwgMHgwMEIxLCAweDAwRDcsDQotICAgIDB4MDBGNywgMHhGRjFELCAweDIyNjAsIDB4RkYxQywgMHhGRjFFLCAweDIyNjYsIDB4MjI2NywgMHgyMjFFLA0KLSAgICAweDIyMzQsIDB4MjY0MiwgMHgyNjQwLCAweDAwQjAsIDB4MjAzMiwgMHgyMDMzLCAweDIxMDMsIDB4RkZFNSwNCi0gICAgMHhGRjA0LCAweDAwQTIsIDB4MDBBMywgMHhGRjA1LCAweEZGMDMsIDB4RkYwNiwgMHhGRjBBLCAweEZGMjAsDQotICAgIDB4MDBBNywgMHgyNjA2LCAweDI2MDUsIDB4MjVDQiwgMHgyNUNGLCAweDI1Q0UsIDB4MjVDNywgMHgyNUM2LA0KLSAgICAweDI1QTEsIDB4MjVBMCwgMHgyNUIzLCAweDI1QjIsIDB4MjVCRCwgMHgyNUJDLCAweDIwM0IsIDB4MzAxMiwNCi0gICAgMHgyMTkyLCAweDIxOTAsIDB4MjE5MSwgMHgyMTkzLCAweDMwMTMsIDB4MjIwOCwgMHgyMjBCLCAweDIyODYsDQotICAgIDB4MjI4NywgMHgyMjgyLCAweDIyODMsIDB4MjIyQSwgMHgyMjI5LCAweDIyMjcsIDB4MjIyOCwgMHgwMEFDLA0KLSAgICAweDIxRDIsIDB4MjFENCwgMHgyMjAwLCAweDIyMDMsIDB4MjIyMCwgMHgyMkE1LCAweDIzMTIsIDB4MjIwMiwNCi0gICAgMHgyMjA3LCAweDIyNjEsIDB4MjI1MiwgMHgyMjZBLCAweDIyNkIsIDB4MjIxQSwgMHgyMjNELCAweDIyMUQsDQotICAgIDB4MjIzNSwgMHgyMjJCLCAweDIyMkMsIDB4MjEyQiwgMHgyMDMwLCAweDI2NkYsIDB4MjY2RCwgMHgyNjZBLA0KLSAgICAweDIwMjAsIDB4MjAyMSwgMHgwMEI2LCAweDI1RUYsIDB4RkYxMCwgMHhGRjExLCAweEZGMTIsIDB4RkYxMywNCi0gICAgMHhGRjE0LCAweEZGMTUsIDB4RkYxNiwgMHhGRjE3LCAweEZGMTgsIDB4RkYxOSwgMHhGRjIxLCAweEZGMjIsDQotICAgIDB4RkYyMywgMHhGRjI0LCAweEZGMjUsIDB4RkYyNiwgMHhGRjI3LCAweEZGMjgsIDB4RkYyOSwgMHhGRjJBLA0KLSAgICAweEZGMkIsIDB4RkYyQywgMHhGRjJELCAweEZGMkUsIDB4RkYyRiwgMHhGRjMwLCAweEZGMzEsIDB4RkYzMiwNCi0gICAgMHhGRjMzLCAweEZGMzQsIDB4RkYzNSwgMHhGRjM2LCAweEZGMzcsIDB4RkYzOCwgMHhGRjM5LCAweEZGM0EsDQotICAgIDB4RkY0MSwgMHhGRjQyLCAweEZGNDMsIDB4RkY0NCwgMHhGRjQ1LCAweEZGNDYsIDB4RkY0NywgMHhGRjQ4LA0KLSAgICAweEZGNDksIDB4RkY0QSwgMHhGRjRCLCAweEZGNEMsIDB4RkY0RCwgMHhGRjRFLCAweEZGNEYsIDB4RkY1MCwNCi0gICAgMHhGRjUxLCAweEZGNTIsIDB4RkY1MywgMHhGRjU0LCAweEZGNTUsIDB4RkY1NiwgMHhGRjU3LCAweEZGNTgsDQotICAgIDB4RkY1OSwgMHhGRjVBLCAweDMwNDEsIDB4MzA0MiwgMHgzMDQzLCAweDMwNDQsIDB4MzA0NSwgMHgzMDQ2LA0KLSAgICAweDMwNDcsIDB4MzA0OCwgMHgzMDQ5LCAweDMwNEEsIDB4MzA0QiwgMHgzMDRDLCAweDMwNEQsIDB4MzA0RSwNCi0gICAgMHgzMDRGLCAweDMwNTAsIDB4MzA1MSwgMHgzMDUyLCAweDMwNTMsIDB4MzA1NCwgMHgzMDU1LCAweDMwNTYsDQotICAgIDB4MzA1NywgMHgzMDU4LCAweDMwNTksIDB4MzA1QSwgMHgzMDVCLCAweDMwNUMsIDB4MzA1RCwgMHgzMDVFLA0KLSAgICAweDMwNUYsIDB4MzA2MCwgMHgzMDYxLCAweDMwNjIsIDB4MzA2MywgMHgzMDY0LCAweDMwNjUsIDB4MzA2NiwNCi0gICAgMHgzMDY3LCAweDMwNjgsIDB4MzA2OSwgMHgzMDZBLCAweDMwNkIsIDB4MzA2QywgMHgzMDZELCAweDMwNkUsDQotICAgIDB4MzA2RiwgMHgzMDcwLCAweDMwNzEsIDB4MzA3MiwgMHgzMDczLCAweDMwNzQsIDB4MzA3NSwgMHgzMDc2LA0KLSAgICAweDMwNzcsIDB4MzA3OCwgMHgzMDc5LCAweDMwN0EsIDB4MzA3QiwgMHgzMDdDLCAweDMwN0QsIDB4MzA3RSwNCi0gICAgMHgzMDdGLCAweDMwODAsIDB4MzA4MSwgMHgzMDgyLCAweDMwODMsIDB4MzA4NCwgMHgzMDg1LCAweDMwODYsDQotICAgIDB4MzA4NywgMHgzMDg4LCAweDMwODksIDB4MzA4QSwgMHgzMDhCLCAweDMwOEMsIDB4MzA4RCwgMHgzMDhFLA0KLSAgICAweDMwOEYsIDB4MzA5MCwgMHgzMDkxLCAweDMwOTIsIDB4MzA5MywgMHgzMEExLCAweDMwQTIsIDB4MzBBMywNCi0gICAgMHgzMEE0LCAweDMwQTUsIDB4MzBBNiwgMHgzMEE3LCAweDMwQTgsIDB4MzBBOSwgMHgzMEFBLCAweDMwQUIsDQotICAgIDB4MzBBQywgMHgzMEFELCAweDMwQUUsIDB4MzBBRiwgMHgzMEIwLCAweDMwQjEsIDB4MzBCMiwgMHgzMEIzLA0KLSAgICAweDMwQjQsIDB4MzBCNSwgMHgzMEI2LCAweDMwQjcsIDB4MzBCOCwgMHgzMEI5LCAweDMwQkEsIDB4MzBCQiwNCi0gICAgMHgzMEJDLCAweDMwQkQsIDB4MzBCRSwgMHgzMEJGLCAweDMwQzAsIDB4MzBDMSwgMHgzMEMyLCAweDMwQzMsDQotICAgIDB4MzBDNCwgMHgzMEM1LCAweDMwQzYsIDB4MzBDNywgMHgzMEM4LCAweDMwQzksIDB4MzBDQSwgMHgzMENCLA0KLSAgICAweDMwQ0MsIDB4MzBDRCwgMHgzMENFLCAweDMwQ0YsIDB4MzBEMCwgMHgzMEQxLCAweDMwRDIsIDB4MzBEMywNCi0gICAgMHgzMEQ0LCAweDMwRDUsIDB4MzBENiwgMHgzMEQ3LCAweDMwRDgsIDB4MzBEOSwgMHgzMERBLCAweDMwREIsDQotICAgIDB4MzBEQywgMHgzMERELCAweDMwREUsIDB4MzBERiwgMHgzMEUwLCAweDMwRTEsIDB4MzBFMiwgMHgzMEUzLA0KLSAgICAweDMwRTQsIDB4MzBFNSwgMHgzMEU2LCAweDMwRTcsIDB4MzBFOCwgMHgzMEU5LCAweDMwRUEsIDB4MzBFQiwNCi0gICAgMHgzMEVDLCAweDMwRUQsIDB4MzBFRSwgMHgzMEVGLCAweDMwRjAsIDB4MzBGMSwgMHgzMEYyLCAweDMwRjMsDQotICAgIDB4MzBGNCwgMHgzMEY1LCAweDMwRjYsIDB4MDM5MSwgMHgwMzkyLCAweDAzOTMsIDB4MDM5NCwgMHgwMzk1LA0KLSAgICAweDAzOTYsIDB4MDM5NywgMHgwMzk4LCAweDAzOTksIDB4MDM5QSwgMHgwMzlCLCAweDAzOUMsIDB4MDM5RCwNCi0gICAgMHgwMzlFLCAweDAzOUYsIDB4MDNBMCwgMHgwM0ExLCAweDAzQTMsIDB4MDNBNCwgMHgwM0E1LCAweDAzQTYsDQotICAgIDB4MDNBNywgMHgwM0E4LCAweDAzQTksIDB4MDNCMSwgMHgwM0IyLCAweDAzQjMsIDB4MDNCNCwgMHgwM0I1LA0KLSAgICAweDAzQjYsIDB4MDNCNywgMHgwM0I4LCAweDAzQjksIDB4MDNCQSwgMHgwM0JCLCAweDAzQkMsIDB4MDNCRCwNCi0gICAgMHgwM0JFLCAweDAzQkYsIDB4MDNDMCwgMHgwM0MxLCAweDAzQzMsIDB4MDNDNCwgMHgwM0M1LCAweDAzQzYsDQotICAgIDB4MDNDNywgMHgwM0M4LCAweDAzQzksIDB4MDQxMCwgMHgwNDExLCAweDA0MTIsIDB4MDQxMywgMHgwNDE0LA0KLSAgICAweDA0MTUsIDB4MDQwMSwgMHgwNDE2LCAweDA0MTcsIDB4MDQxOCwgMHgwNDE5LCAweDA0MUEsIDB4MDQxQiwNCi0gICAgMHgwNDFDLCAweDA0MUQsIDB4MDQxRSwgMHgwNDFGLCAweDA0MjAsIDB4MDQyMSwgMHgwNDIyLCAweDA0MjMsDQotICAgIDB4MDQyNCwgMHgwNDI1LCAweDA0MjYsIDB4MDQyNywgMHgwNDI4LCAweDA0MjksIDB4MDQyQSwgMHgwNDJCLA0KLSAgICAweDA0MkMsIDB4MDQyRCwgMHgwNDJFLCAweDA0MkYsIDB4MDQzMCwgMHgwNDMxLCAweDA0MzIsIDB4MDQzMywNCi0gICAgMHgwNDM0LCAweDA0MzUsIDB4MDQ1MSwgMHgwNDM2LCAweDA0MzcsIDB4MDQzOCwgMHgwNDM5LCAweDA0M0EsDQotICAgIDB4MDQzQiwgMHgwNDNDLCAweDA0M0QsIDB4MDQzRSwgMHgwNDNGLCAweDA0NDAsIDB4MDQ0MSwgMHgwNDQyLA0KLSAgICAweDA0NDMsIDB4MDQ0NCwgMHgwNDQ1LCAweDA0NDYsIDB4MDQ0NywgMHgwNDQ4LCAweDA0NDksIDB4MDQ0QSwNCi0gICAgMHgwNDRCLCAweDA0NEMsIDB4MDQ0RCwgMHgwNDRFLCAweDA0NEYsIDB4NEU5QywgMHg1NTE2LCAweDVBMDMsDQotICAgIDB4OTYzRiwgMHg1NEMwLCAweDYxMUIsIDB4NjMyOCwgMHg1OUY2LCAweDkwMjIsIDB4ODQ3NSwgMHg4MzFDLA0KLSAgICAweDdBNTAsIDB4NjBBQSwgMHg2M0UxLCAweDZFMjUsIDB4NjVFRCwgMHg4NDY2LCAweDgyQTYsIDB4OUJGNSwNCi0gICAgMHg2ODkzLCAweDU3MjcsIDB4NjVBMSwgMHg2MjcxLCAweDVCOUIsIDB4NTlEMCwgMHg4NjdCLCAweDk4RjQsDQotICAgIDB4N0Q2MiwgMHg3REJFLCAweDlCOEUsIDB4NjIxNiwgMHg3QzlGLCAweDg4QjcsIDB4NUI4OSwgMHg1RUI1LA0KLSAgICAweDYzMDksIDB4NjY5NywgMHg2ODQ4LCAweDk1QzcsIDB4OTc4RCwgMHg2NzRGLCAweDRFRTUsIDB4NEYwQSwNCi0gICAgMHg0RjRELCAweDRGOUQsIDB4NTA0OSwgMHg1NkYyLCAweDU5MzcsIDB4NTlENCwgMHg1QTAxLCAweDVDMDksDQotICAgIDB4NjBERiwgMHg2MTBGLCAweDYxNzAsIDB4NjYxMywgMHg2OTA1LCAweDcwQkEsIDB4NzU0RiwgMHg3NTcwLA0KLSAgICAweDc5RkIsIDB4N0RBRCwgMHg3REVGLCAweDgwQzMsIDB4ODQwRSwgMHg4ODYzLCAweDhCMDIsIDB4OTA1NSwNCi0gICAgMHg5MDdBLCAweDUzM0IsIDB4NEU5NSwgMHg0RUE1LCAweDU3REYsIDB4ODBCMiwgMHg5MEMxLCAweDc4RUYsDQotICAgIDB4NEUwMCwgMHg1OEYxLCAweDZFQTIsIDB4OTAzOCwgMHg3QTMyLCAweDgzMjgsIDB4ODI4QiwgMHg5QzJGLA0KLSAgICAweDUxNDEsIDB4NTM3MCwgMHg1NEJELCAweDU0RTEsIDB4NTZFMCwgMHg1OUZCLCAweDVGMTUsIDB4OThGMiwNCi0gICAgMHg2REVCLCAweDgwRTQsIDB4ODUyRCwgMHg5NjYyLCAweDk2NzAsIDB4OTZBMCwgMHg5N0ZCLCAweDU0MEIsDQotICAgIDB4NTNGMywgMHg1Qjg3LCAweDcwQ0YsIDB4N0ZCRCwgMHg4RkMyLCAweDk2RTgsIDB4NTM2RiwgMHg5RDVDLA0KLSAgICAweDdBQkEsIDB4NEUxMSwgMHg3ODkzLCAweDgxRkMsIDB4NkUyNiwgMHg1NjE4LCAweDU1MDQsIDB4NkIxRCwNCi0gICAgMHg4NTFBLCAweDlDM0IsIDB4NTlFNSwgMHg1M0E5LCAweDZENjYsIDB4NzREQywgMHg5NThGLCAweDU2NDIsDQotICAgIDB4NEU5MSwgMHg5MDRCLCAweDk2RjIsIDB4ODM0RiwgMHg5OTBDLCAweDUzRTEsIDB4NTVCNiwgMHg1QjMwLA0KLSAgICAweDVGNzEsIDB4NjYyMCwgMHg2NkYzLCAweDY4MDQsIDB4NkMzOCwgMHg2Q0YzLCAweDZEMjksIDB4NzQ1QiwNCi0gICAgMHg3NkM4LCAweDdBNEUsIDB4OTgzNCwgMHg4MkYxLCAweDg4NUIsIDB4OEE2MCwgMHg5MkVELCAweDZEQjIsDQotICAgIDB4NzVBQiwgMHg3NkNBLCAweDk5QzUsIDB4NjBBNiwgMHg4QjAxLCAweDhEOEEsIDB4OTVCMiwgMHg2OThFLA0KLSAgICAweDUzQUQsIDB4NTE4NiwgMHg1NzEyLCAweDU4MzAsIDB4NTk0NCwgMHg1QkI0LCAweDVFRjYsIDB4NjAyOCwNCi0gICAgMHg2M0E5LCAweDYzRjQsIDB4NkNCRiwgMHg2RjE0LCAweDcwOEUsIDB4NzExNCwgMHg3MTU5LCAweDcxRDUsDQotICAgIDB4NzMzRiwgMHg3RTAxLCAweDgyNzYsIDB4ODJEMSwgMHg4NTk3LCAweDkwNjAsIDB4OTI1QiwgMHg5RDFCLA0KLSAgICAweDU4NjksIDB4NjVCQywgMHg2QzVBLCAweDc1MjUsIDB4NTFGOSwgMHg1OTJFLCAweDU5NjUsIDB4NUY4MCwNCi0gICAgMHg1RkRDLCAweDYyQkMsIDB4NjVGQSwgMHg2QTJBLCAweDZCMjcsIDB4NkJCNCwgMHg3MzhCLCAweDdGQzEsDQotICAgIDB4ODk1NiwgMHg5RDJDLCAweDlEMEUsIDB4OUVDNCwgMHg1Q0ExLCAweDZDOTYsIDB4ODM3QiwgMHg1MTA0LA0KLSAgICAweDVDNEIsIDB4NjFCNiwgMHg4MUM2LCAweDY4NzYsIDB4NzI2MSwgMHg0RTU5LCAweDRGRkEsIDB4NTM3OCwNCi0gICAgMHg2MDY5LCAweDZFMjksIDB4N0E0RiwgMHg5N0YzLCAweDRFMEIsIDB4NTMxNiwgMHg0RUVFLCAweDRGNTUsDQotICAgIDB4NEYzRCwgMHg0RkExLCAweDRGNzMsIDB4NTJBMCwgMHg1M0VGLCAweDU2MDksIDB4NTkwRiwgMHg1QUMxLA0KLSAgICAweDVCQjYsIDB4NUJFMSwgMHg3OUQxLCAweDY2ODcsIDB4Njc5QywgMHg2N0I2LCAweDZCNEMsIDB4NkNCMywNCi0gICAgMHg3MDZCLCAweDczQzIsIDB4Nzk4RCwgMHg3OUJFLCAweDdBM0MsIDB4N0I4NywgMHg4MkIxLCAweDgyREIsDQotICAgIDB4ODMwNCwgMHg4Mzc3LCAweDgzRUYsIDB4ODNEMywgMHg4NzY2LCAweDhBQjIsIDB4NTYyOSwgMHg4Q0E4LA0KLSAgICAweDhGRTYsIDB4OTA0RSwgMHg5NzFFLCAweDg2OEEsIDB4NEZDNCwgMHg1Q0U4LCAweDYyMTEsIDB4NzI1OSwNCi0gICAgMHg3NTNCLCAweDgxRTUsIDB4ODJCRCwgMHg4NkZFLCAweDhDQzAsIDB4OTZDNSwgMHg5OTEzLCAweDk5RDUsDQotICAgIDB4NEVDQiwgMHg0RjFBLCAweDg5RTMsIDB4NTZERSwgMHg1ODRBLCAweDU4Q0EsIDB4NUVGQiwgMHg1RkVCLA0KLSAgICAweDYwMkEsIDB4NjA5NCwgMHg2MDYyLCAweDYxRDAsIDB4NjIxMiwgMHg2MkQwLCAweDY1MzksIDB4OUI0MSwNCi0gICAgMHg2NjY2LCAweDY4QjAsIDB4NkQ3NywgMHg3MDcwLCAweDc1NEMsIDB4NzY4NiwgMHg3RDc1LCAweDgyQTUsDQotICAgIDB4ODdGOSwgMHg5NThCLCAweDk2OEUsIDB4OEM5RCwgMHg1MUYxLCAweDUyQkUsIDB4NTkxNiwgMHg1NEIzLA0KLSAgICAweDVCQjMsIDB4NUQxNiwgMHg2MTY4LCAweDY5ODIsIDB4NkRBRiwgMHg3ODhELCAweDg0Q0IsIDB4ODg1NywNCi0gICAgMHg4QTcyLCAweDkzQTcsIDB4OUFCOCwgMHg2RDZDLCAweDk5QTgsIDB4ODZEOSwgMHg1N0EzLCAweDY3RkYsDQotICAgIDB4ODZDRSwgMHg5MjBFLCAweDUyODMsIDB4NTY4NywgMHg1NDA0LCAweDVFRDMsIDB4NjJFMSwgMHg2NEI5LA0KLSAgICAweDY4M0MsIDB4NjgzOCwgMHg2QkJCLCAweDczNzIsIDB4NzhCQSwgMHg3QTZCLCAweDg5OUEsIDB4ODlEMiwNCi0gICAgMHg4RDZCLCAweDhGMDMsIDB4OTBFRCwgMHg5NUEzLCAweDk2OTQsIDB4OTc2OSwgMHg1QjY2LCAweDVDQjMsDQotICAgIDB4Njk3RCwgMHg5ODRELCAweDk4NEUsIDB4NjM5QiwgMHg3QjIwLCAweDZBMkIsIDB4NkE3RiwgMHg2OEI2LA0KLSAgICAweDlDMEQsIDB4NkY1RiwgMHg1MjcyLCAweDU1OUQsIDB4NjA3MCwgMHg2MkVDLCAweDZEM0IsIDB4NkUwNywNCi0gICAgMHg2RUQxLCAweDg0NUIsIDB4ODkxMCwgMHg4RjQ0LCAweDRFMTQsIDB4OUMzOSwgMHg1M0Y2LCAweDY5MUIsDQotICAgIDB4NkEzQSwgMHg5Nzg0LCAweDY4MkEsIDB4NTE1QywgMHg3QUMzLCAweDg0QjIsIDB4OTFEQywgMHg5MzhDLA0KLSAgICAweDU2NUIsIDB4OUQyOCwgMHg2ODIyLCAweDgzMDUsIDB4ODQzMSwgMHg3Q0E1LCAweDUyMDgsIDB4ODJDNSwNCi0gICAgMHg3NEU2LCAweDRFN0UsIDB4NEY4MywgMHg1MUEwLCAweDVCRDIsIDB4NTIwQSwgMHg1MkQ4LCAweDUyRTcsDQotICAgIDB4NURGQiwgMHg1NTlBLCAweDU4MkEsIDB4NTlFNiwgMHg1QjhDLCAweDVCOTgsIDB4NUJEQiwgMHg1RTcyLA0KLSAgICAweDVFNzksIDB4NjBBMywgMHg2MTFGLCAweDYxNjMsIDB4NjFCRSwgMHg2M0RCLCAweDY1NjIsIDB4NjdEMSwNCi0gICAgMHg2ODUzLCAweDY4RkEsIDB4NkIzRSwgMHg2QjUzLCAweDZDNTcsIDB4NkYyMiwgMHg2Rjk3LCAweDZGNDUsDQotICAgIDB4NzRCMCwgMHg3NTE4LCAweDc2RTMsIDB4NzcwQiwgMHg3QUZGLCAweDdCQTEsIDB4N0MyMSwgMHg3REU5LA0KLSAgICAweDdGMzYsIDB4N0ZGMCwgMHg4MDlELCAweDgyNjYsIDB4ODM5RSwgMHg4OUIzLCAweDhBQ0MsIDB4OENBQiwNCi0gICAgMHg5MDg0LCAweDk0NTEsIDB4OTU5MywgMHg5NTkxLCAweDk1QTIsIDB4OTY2NSwgMHg5N0QzLCAweDk5MjgsDQotICAgIDB4ODIxOCwgMHg0RTM4LCAweDU0MkIsIDB4NUNCOCwgMHg1RENDLCAweDczQTksIDB4NzY0QywgMHg3NzNDLA0KLSAgICAweDVDQTksIDB4N0ZFQiwgMHg4RDBCLCAweDk2QzEsIDB4OTgxMSwgMHg5ODU0LCAweDk4NTgsIDB4NEYwMSwNCi0gICAgMHg0RjBFLCAweDUzNzEsIDB4NTU5QywgMHg1NjY4LCAweDU3RkEsIDB4NTk0NywgMHg1QjA5LCAweDVCQzQsDQotICAgIDB4NUM5MCwgMHg1RTBDLCAweDVFN0UsIDB4NUZDQywgMHg2M0VFLCAweDY3M0EsIDB4NjVENywgMHg2NUUyLA0KLSAgICAweDY3MUYsIDB4NjhDQiwgMHg2OEM0LCAweDZBNUYsIDB4NUUzMCwgMHg2QkM1LCAweDZDMTcsIDB4NkM3RCwNCi0gICAgMHg3NTdGLCAweDc5NDgsIDB4NUI2MywgMHg3QTAwLCAweDdEMDAsIDB4NUZCRCwgMHg4OThGLCAweDhBMTgsDQotICAgIDB4OENCNCwgMHg4RDc3LCAweDhFQ0MsIDB4OEYxRCwgMHg5OEUyLCAweDlBMEUsIDB4OUIzQywgMHg0RTgwLA0KLSAgICAweDUwN0QsIDB4NTEwMCwgMHg1OTkzLCAweDVCOUMsIDB4NjIyRiwgMHg2MjgwLCAweDY0RUMsIDB4NkIzQSwNCi0gICAgMHg3MkEwLCAweDc1OTEsIDB4Nzk0NywgMHg3RkE5LCAweDg3RkIsIDB4OEFCQywgMHg4QjcwLCAweDYzQUMsDQotICAgIDB4ODNDQSwgMHg5N0EwLCAweDU0MDksIDB4NTQwMywgMHg1NUFCLCAweDY4NTQsIDB4NkE1OCwgMHg4QTcwLA0KLSAgICAweDc4MjcsIDB4Njc3NSwgMHg5RUNELCAweDUzNzQsIDB4NUJBMiwgMHg4MTFBLCAweDg2NTAsIDB4OTAwNiwNCi0gICAgMHg0RTE4LCAweDRFNDUsIDB4NEVDNywgMHg0RjExLCAweDUzQ0EsIDB4NTQzOCwgMHg1QkFFLCAweDVGMTMsDQotICAgIDB4NjAyNSwgMHg2NTUxLCAweDY3M0QsIDB4NkM0MiwgMHg2QzcyLCAweDZDRTMsIDB4NzA3OCwgMHg3NDAzLA0KLSAgICAweDdBNzYsIDB4N0FBRSwgMHg3QjA4LCAweDdEMUEsIDB4N0NGRSwgMHg3RDY2LCAweDY1RTcsIDB4NzI1QiwNCi0gICAgMHg1M0JCLCAweDVDNDUsIDB4NURFOCwgMHg2MkQyLCAweDYyRTAsIDB4NjMxOSwgMHg2RTIwLCAweDg2NUEsDQotICAgIDB4OEEzMSwgMHg4RERELCAweDkyRjgsIDB4NkYwMSwgMHg3OUE2LCAweDlCNUEsIDB4NEVBOCwgMHg0RUFCLA0KLSAgICAweDRFQUMsIDB4NEY5QiwgMHg0RkEwLCAweDUwRDEsIDB4NTE0NywgMHg3QUY2LCAweDUxNzEsIDB4NTFGNiwNCi0gICAgMHg1MzU0LCAweDUzMjEsIDB4NTM3RiwgMHg1M0VCLCAweDU1QUMsIDB4NTg4MywgMHg1Q0UxLCAweDVGMzcsDQotICAgIDB4NUY0QSwgMHg2MDJGLCAweDYwNTAsIDB4NjA2RCwgMHg2MzFGLCAweDY1NTksIDB4NkE0QiwgMHg2Q0MxLA0KLSAgICAweDcyQzIsIDB4NzJFRCwgMHg3N0VGLCAweDgwRjgsIDB4ODEwNSwgMHg4MjA4LCAweDg1NEUsIDB4OTBGNywNCi0gICAgMHg5M0UxLCAweDk3RkYsIDB4OTk1NywgMHg5QTVBLCAweDRFRjAsIDB4NTFERCwgMHg1QzJELCAweDY2ODEsDQotICAgIDB4Njk2RCwgMHg1QzQwLCAweDY2RjIsIDB4Njk3NSwgMHg3Mzg5LCAweDY4NTAsIDB4N0M4MSwgMHg1MEM1LA0KLSAgICAweDUyRTQsIDB4NTc0NywgMHg1REZFLCAweDkzMjYsIDB4NjVBNCwgMHg2QjIzLCAweDZCM0QsIDB4NzQzNCwNCi0gICAgMHg3OTgxLCAweDc5QkQsIDB4N0I0QiwgMHg3RENBLCAweDgyQjksIDB4ODNDQywgMHg4ODdGLCAweDg5NUYsDQotICAgIDB4OEIzOSwgMHg4RkQxLCAweDkxRDEsIDB4NTQxRiwgMHg5MjgwLCAweDRFNUQsIDB4NTAzNiwgMHg1M0U1LA0KLSAgICAweDUzM0EsIDB4NzJENywgMHg3Mzk2LCAweDc3RTksIDB4ODJFNiwgMHg4RUFGLCAweDk5QzYsIDB4OTlDOCwNCi0gICAgMHg5OUQyLCAweDUxNzcsIDB4NjExQSwgMHg4NjVFLCAweDU1QjAsIDB4N0E3QSwgMHg1MDc2LCAweDVCRDMsDQotICAgIDB4OTA0NywgMHg5Njg1LCAweDRFMzIsIDB4NkFEQiwgMHg5MUU3LCAweDVDNTEsIDB4NUM0OCwgMHg2Mzk4LA0KLSAgICAweDdBOUYsIDB4NkM5MywgMHg5Nzc0LCAweDhGNjEsIDB4N0FBQSwgMHg3MThBLCAweDk2ODgsIDB4N0M4MiwNCi0gICAgMHg2ODE3LCAweDdFNzAsIDB4Njg1MSwgMHg5MzZDLCAweDUyRjIsIDB4NTQxQiwgMHg4NUFCLCAweDhBMTMsDQotICAgIDB4N0ZBNCwgMHg4RUNELCAweDkwRTEsIDB4NTM2NiwgMHg4ODg4LCAweDc5NDEsIDB4NEZDMiwgMHg1MEJFLA0KLSAgICAweDUyMTEsIDB4NTE0NCwgMHg1NTUzLCAweDU3MkQsIDB4NzNFQSwgMHg1NzhCLCAweDU5NTEsIDB4NUY2MiwNCi0gICAgMHg1Rjg0LCAweDYwNzUsIDB4NjE3NiwgMHg2MTY3LCAweDYxQTksIDB4NjNCMiwgMHg2NDNBLCAweDY1NkMsDQotICAgIDB4NjY2RiwgMHg2ODQyLCAweDZFMTMsIDB4NzU2NiwgMHg3QTNELCAweDdDRkIsIDB4N0Q0QywgMHg3RDk5LA0KLSAgICAweDdFNEIsIDB4N0Y2QiwgMHg4MzBFLCAweDgzNEEsIDB4ODZDRCwgMHg4QTA4LCAweDhBNjMsIDB4OEI2NiwNCi0gICAgMHg4RUZELCAweDk4MUEsIDB4OUQ4RiwgMHg4MkI4LCAweDhGQ0UsIDB4OUJFOCwgMHg1Mjg3LCAweDYyMUYsDQotICAgIDB4NjQ4MywgMHg2RkMwLCAweDk2OTksIDB4Njg0MSwgMHg1MDkxLCAweDZCMjAsIDB4NkM3QSwgMHg2RjU0LA0KLSAgICAweDdBNzQsIDB4N0Q1MCwgMHg4ODQwLCAweDhBMjMsIDB4NjcwOCwgMHg0RUY2LCAweDUwMzksIDB4NTAyNiwNCi0gICAgMHg1MDY1LCAweDUxN0MsIDB4NTIzOCwgMHg1MjYzLCAweDU1QTcsIDB4NTcwRiwgMHg1ODA1LCAweDVBQ0MsDQotICAgIDB4NUVGQSwgMHg2MUIyLCAweDYxRjgsIDB4NjJGMywgMHg2MzcyLCAweDY5MUMsIDB4NkEyOSwgMHg3MjdELA0KLSAgICAweDcyQUMsIDB4NzMyRSwgMHg3ODE0LCAweDc4NkYsIDB4N0Q3OSwgMHg3NzBDLCAweDgwQTksIDB4ODk4QiwNCi0gICAgMHg4QjE5LCAweDhDRTIsIDB4OEVEMiwgMHg5MDYzLCAweDkzNzUsIDB4OTY3QSwgMHg5ODU1LCAweDlBMTMsDQotICAgIDB4OUU3OCwgMHg1MTQzLCAweDUzOUYsIDB4NTNCMywgMHg1RTdCLCAweDVGMjYsIDB4NkUxQiwgMHg2RTkwLA0KLSAgICAweDczODQsIDB4NzNGRSwgMHg3RDQzLCAweDgyMzcsIDB4OEEwMCwgMHg4QUZBLCAweDk2NTAsIDB4NEU0RSwNCi0gICAgMHg1MDBCLCAweDUzRTQsIDB4NTQ3QywgMHg1NkZBLCAweDU5RDEsIDB4NUI2NCwgMHg1REYxLCAweDVFQUIsDQotICAgIDB4NUYyNywgMHg2MjM4LCAweDY1NDUsIDB4NjdBRiwgMHg2RTU2LCAweDcyRDAsIDB4N0NDQSwgMHg4OEI0LA0KLSAgICAweDgwQTEsIDB4ODBFMSwgMHg4M0YwLCAweDg2NEUsIDB4OEE4NywgMHg4REU4LCAweDkyMzcsIDB4OTZDNywNCi0gICAgMHg5ODY3LCAweDlGMTMsIDB4NEU5NCwgMHg0RTkyLCAweDRGMEQsIDB4NTM0OCwgMHg1NDQ5LCAweDU0M0UsDQotICAgIDB4NUEyRiwgMHg1RjhDLCAweDVGQTEsIDB4NjA5RiwgMHg2OEE3LCAweDZBOEUsIDB4NzQ1QSwgMHg3ODgxLA0KLSAgICAweDhBOUUsIDB4OEFBNCwgMHg4Qjc3LCAweDkxOTAsIDB4NEU1RSwgMHg5QkM5LCAweDRFQTQsIDB4NEY3QywNCi0gICAgMHg0RkFGLCAweDUwMTksIDB4NTAxNiwgMHg1MTQ5LCAweDUxNkMsIDB4NTI5RiwgMHg1MkI5LCAweDUyRkUsDQotICAgIDB4NTM5QSwgMHg1M0UzLCAweDU0MTEsIDB4NTQwRSwgMHg1NTg5LCAweDU3NTEsIDB4NTdBMiwgMHg1OTdELA0KLSAgICAweDVCNTQsIDB4NUI1RCwgMHg1QjhGLCAweDVERTUsIDB4NURFNywgMHg1REY3LCAweDVFNzgsIDB4NUU4MywNCi0gICAgMHg1RTlBLCAweDVFQjcsIDB4NUYxOCwgMHg2MDUyLCAweDYxNEMsIDB4NjI5NywgMHg2MkQ4LCAweDYzQTcsDQotICAgIDB4NjUzQiwgMHg2NjAyLCAweDY2NDMsIDB4NjZGNCwgMHg2NzZELCAweDY4MjEsIDB4Njg5NywgMHg2OUNCLA0KLSAgICAweDZDNUYsIDB4NkQyQSwgMHg2RDY5LCAweDZFMkYsIDB4NkU5RCwgMHg3NTMyLCAweDc2ODcsIDB4Nzg2QywNCi0gICAgMHg3QTNGLCAweDdDRTAsIDB4N0QwNSwgMHg3RDE4LCAweDdENUUsIDB4N0RCMSwgMHg4MDE1LCAweDgwMDMsDQotICAgIDB4ODBBRiwgMHg4MEIxLCAweDgxNTQsIDB4ODE4RiwgMHg4MjJBLCAweDgzNTIsIDB4ODg0QywgMHg4ODYxLA0KLSAgICAweDhCMUIsIDB4OENBMiwgMHg4Q0ZDLCAweDkwQ0EsIDB4OTE3NSwgMHg5MjcxLCAweDc4M0YsIDB4OTJGQywNCi0gICAgMHg5NUE0LCAweDk2NEQsIDB4OTgwNSwgMHg5OTk5LCAweDlBRDgsIDB4OUQzQiwgMHg1MjVCLCAweDUyQUIsDQotICAgIDB4NTNGNywgMHg1NDA4LCAweDU4RDUsIDB4NjJGNywgMHg2RkUwLCAweDhDNkEsIDB4OEY1RiwgMHg5RUI5LA0KLSAgICAweDUxNEIsIDB4NTIzQiwgMHg1NDRBLCAweDU2RkQsIDB4N0E0MCwgMHg5MTc3LCAweDlENjAsIDB4OUVEMiwNCi0gICAgMHg3MzQ0LCAweDZGMDksIDB4ODE3MCwgMHg3NTExLCAweDVGRkQsIDB4NjBEQSwgMHg5QUE4LCAweDcyREIsDQotICAgIDB4OEZCQywgMHg2QjY0LCAweDk4MDMsIDB4NEVDQSwgMHg1NkYwLCAweDU3NjQsIDB4NThCRSwgMHg1QTVBLA0KLSAgICAweDYwNjgsIDB4NjFDNywgMHg2NjBGLCAweDY2MDYsIDB4NjgzOSwgMHg2OEIxLCAweDZERjcsIDB4NzVENSwNCi0gICAgMHg3RDNBLCAweDgyNkUsIDB4OUI0MiwgMHg0RTlCLCAweDRGNTAsIDB4NTNDOSwgMHg1NTA2LCAweDVENkYsDQotICAgIDB4NURFNiwgMHg1REVFLCAweDY3RkIsIDB4NkM5OSwgMHg3NDczLCAweDc4MDIsIDB4OEE1MCwgMHg5Mzk2LA0KLSAgICAweDg4REYsIDB4NTc1MCwgMHg1RUE3LCAweDYzMkIsIDB4NTBCNSwgMHg1MEFDLCAweDUxOEQsIDB4NjcwMCwNCi0gICAgMHg1NEM5LCAweDU4NUUsIDB4NTlCQiwgMHg1QkIwLCAweDVGNjksIDB4NjI0RCwgMHg2M0ExLCAweDY4M0QsDQotICAgIDB4NkI3MywgMHg2RTA4LCAweDcwN0QsIDB4OTFDNywgMHg3MjgwLCAweDc4MTUsIDB4NzgyNiwgMHg3OTZELA0KLSAgICAweDY1OEUsIDB4N0QzMCwgMHg4M0RDLCAweDg4QzEsIDB4OEYwOSwgMHg5NjlCLCAweDUyNjQsIDB4NTcyOCwNCi0gICAgMHg2NzUwLCAweDdGNkEsIDB4OENBMSwgMHg1MUI0LCAweDU3NDIsIDB4OTYyQSwgMHg1ODNBLCAweDY5OEEsDQotICAgIDB4ODBCNCwgMHg1NEIyLCAweDVEMEUsIDB4NTdGQywgMHg3ODk1LCAweDlERkEsIDB4NEY1QywgMHg1MjRBLA0KLSAgICAweDU0OEIsIDB4NjQzRSwgMHg2NjI4LCAweDY3MTQsIDB4NjdGNSwgMHg3QTg0LCAweDdCNTYsIDB4N0QyMiwNCi0gICAgMHg5MzJGLCAweDY4NUMsIDB4OUJBRCwgMHg3QjM5LCAweDUzMTksIDB4NTE4QSwgMHg1MjM3LCAweDVCREYsDQotICAgIDB4NjJGNiwgMHg2NEFFLCAweDY0RTYsIDB4NjcyRCwgMHg2QkJBLCAweDg1QTksIDB4OTZEMSwgMHg3NjkwLA0KLSAgICAweDlCRDYsIDB4NjM0QywgMHg5MzA2LCAweDlCQUIsIDB4NzZCRiwgMHg2NjUyLCAweDRFMDksIDB4NTA5OCwNCi0gICAgMHg1M0MyLCAweDVDNzEsIDB4NjBFOCwgMHg2NDkyLCAweDY1NjMsIDB4Njg1RiwgMHg3MUU2LCAweDczQ0EsDQotICAgIDB4NzUyMywgMHg3Qjk3LCAweDdFODIsIDB4ODY5NSwgMHg4QjgzLCAweDhDREIsIDB4OTE3OCwgMHg5OTEwLA0KLSAgICAweDY1QUMsIDB4NjZBQiwgMHg2QjhCLCAweDRFRDUsIDB4NEVENCwgMHg0RjNBLCAweDRGN0YsIDB4NTIzQSwNCi0gICAgMHg1M0Y4LCAweDUzRjIsIDB4NTVFMywgMHg1NkRCLCAweDU4RUIsIDB4NTlDQiwgMHg1OUM5LCAweDU5RkYsDQotICAgIDB4NUI1MCwgMHg1QzRELCAweDVFMDIsIDB4NUUyQiwgMHg1RkQ3LCAweDYwMUQsIDB4NjMwNywgMHg2NTJGLA0KLSAgICAweDVCNUMsIDB4NjVBRiwgMHg2NUJELCAweDY1RTgsIDB4Njc5RCwgMHg2QjYyLCAweDZCN0IsIDB4NkMwRiwNCi0gICAgMHg3MzQ1LCAweDc5NDksIDB4NzlDMSwgMHg3Q0Y4LCAweDdEMTksIDB4N0QyQiwgMHg4MEEyLCAweDgxMDIsDQotICAgIDB4ODFGMywgMHg4OTk2LCAweDhBNUUsIDB4OEE2OSwgMHg4QTY2LCAweDhBOEMsIDB4OEFFRSwgMHg4Q0M3LA0KLSAgICAweDhDREMsIDB4OTZDQywgMHg5OEZDLCAweDZCNkYsIDB4NEU4QiwgMHg0RjNDLCAweDRGOEQsIDB4NTE1MCwNCi0gICAgMHg1QjU3LCAweDVCRkEsIDB4NjE0OCwgMHg2MzAxLCAweDY2NDIsIDB4NkIyMSwgMHg2RUNCLCAweDZDQkIsDQotICAgIDB4NzIzRSwgMHg3NEJELCAweDc1RDQsIDB4NzhDMSwgMHg3OTNBLCAweDgwMEMsIDB4ODAzMywgMHg4MUVBLA0KLSAgICAweDg0OTQsIDB4OEY5RSwgMHg2QzUwLCAweDlFN0YsIDB4NUYwRiwgMHg4QjU4LCAweDlEMkIsIDB4N0FGQSwNCi0gICAgMHg4RUY4LCAweDVCOEQsIDB4OTZFQiwgMHg0RTAzLCAweDUzRjEsIDB4NTdGNywgMHg1OTMxLCAweDVBQzksDQotICAgIDB4NUJBNCwgMHg2MDg5LCAweDZFN0YsIDB4NkYwNiwgMHg3NUJFLCAweDhDRUEsIDB4NUI5RiwgMHg4NTAwLA0KLSAgICAweDdCRTAsIDB4NTA3MiwgMHg2N0Y0LCAweDgyOUQsIDB4NUM2MSwgMHg4NTRBLCAweDdFMUUsIDB4ODIwRSwNCi0gICAgMHg1MTk5LCAweDVDMDQsIDB4NjM2OCwgMHg4RDY2LCAweDY1OUMsIDB4NzE2RSwgMHg3OTNFLCAweDdEMTcsDQotICAgIDB4ODAwNSwgMHg4QjFELCAweDhFQ0EsIDB4OTA2RSwgMHg4NkM3LCAweDkwQUEsIDB4NTAxRiwgMHg1MkZBLA0KLSAgICAweDVDM0EsIDB4Njc1MywgMHg3MDdDLCAweDcyMzUsIDB4OTE0QywgMHg5MUM4LCAweDkzMkIsIDB4ODJFNSwNCi0gICAgMHg1QkMyLCAweDVGMzEsIDB4NjBGOSwgMHg0RTNCLCAweDUzRDYsIDB4NUI4OCwgMHg2MjRCLCAweDY3MzEsDQotICAgIDB4NkI4QSwgMHg3MkU5LCAweDczRTAsIDB4N0EyRSwgMHg4MTZCLCAweDhEQTMsIDB4OTE1MiwgMHg5OTk2LA0KLSAgICAweDUxMTIsIDB4NTNENywgMHg1NDZBLCAweDVCRkYsIDB4NjM4OCwgMHg2QTM5LCAweDdEQUMsIDB4OTcwMCwNCi0gICAgMHg1NkRBLCAweDUzQ0UsIDB4NTQ2OCwgMHg1Qjk3LCAweDVDMzEsIDB4NURERSwgMHg0RkVFLCAweDYxMDEsDQotICAgIDB4NjJGRSwgMHg2RDMyLCAweDc5QzAsIDB4NzlDQiwgMHg3RDQyLCAweDdFNEQsIDB4N0ZEMiwgMHg4MUVELA0KLSAgICAweDgyMUYsIDB4ODQ5MCwgMHg4ODQ2LCAweDg5NzIsIDB4OEI5MCwgMHg4RTc0LCAweDhGMkYsIDB4OTAzMSwNCi0gICAgMHg5MTRCLCAweDkxNkMsIDB4OTZDNiwgMHg5MTlDLCAweDRFQzAsIDB4NEY0RiwgMHg1MTQ1LCAweDUzNDEsDQotICAgIDB4NUY5MywgMHg2MjBFLCAweDY3RDQsIDB4NkM0MSwgMHg2RTBCLCAweDczNjMsIDB4N0UyNiwgMHg5MUNELA0KLSAgICAweDkyODMsIDB4NTNENCwgMHg1OTE5LCAweDVCQkYsIDB4NkREMSwgMHg3OTVELCAweDdFMkUsIDB4N0M5QiwNCi0gICAgMHg1ODdFLCAweDcxOUYsIDB4NTFGQSwgMHg4ODUzLCAweDhGRjAsIDB4NEZDQSwgMHg1Q0ZCLCAweDY2MjUsDQotICAgIDB4NzdBQywgMHg3QUUzLCAweDgyMUMsIDB4OTlGRiwgMHg1MUM2LCAweDVGQUEsIDB4NjVFQywgMHg2OTZGLA0KLSAgICAweDZCODksIDB4NkRGMywgMHg2RTk2LCAweDZGNjQsIDB4NzZGRSwgMHg3RDE0LCAweDVERTEsIDB4OTA3NSwNCi0gICAgMHg5MTg3LCAweDk4MDYsIDB4NTFFNiwgMHg1MjFELCAweDYyNDAsIDB4NjY5MSwgMHg2NkQ5LCAweDZFMUEsDQotICAgIDB4NUVCNiwgMHg3REQyLCAweDdGNzIsIDB4NjZGOCwgMHg4NUFGLCAweDg1RjcsIDB4OEFGOCwgMHg1MkE5LA0KLSAgICAweDUzRDksIDB4NTk3MywgMHg1RThGLCAweDVGOTAsIDB4NjA1NSwgMHg5MkU0LCAweDk2NjQsIDB4NTBCNywNCi0gICAgMHg1MTFGLCAweDUyREQsIDB4NTMyMCwgMHg1MzQ3LCAweDUzRUMsIDB4NTRFOCwgMHg1NTQ2LCAweDU1MzEsDQotICAgIDB4NTYxNywgMHg1OTY4LCAweDU5QkUsIDB4NUEzQywgMHg1QkI1LCAweDVDMDYsIDB4NUMwRiwgMHg1QzExLA0KLSAgICAweDVDMUEsIDB4NUU4NCwgMHg1RThBLCAweDVFRTAsIDB4NUY3MCwgMHg2MjdGLCAweDYyODQsIDB4NjJEQiwNCi0gICAgMHg2MzhDLCAweDYzNzcsIDB4NjYwNywgMHg2NjBDLCAweDY2MkQsIDB4NjY3NiwgMHg2NzdFLCAweDY4QTIsDQotICAgIDB4NkExRiwgMHg2QTM1LCAweDZDQkMsIDB4NkQ4OCwgMHg2RTA5LCAweDZFNTgsIDB4NzEzQywgMHg3MTI2LA0KLSAgICAweDcxNjcsIDB4NzVDNywgMHg3NzAxLCAweDc4NUQsIDB4NzkwMSwgMHg3OTY1LCAweDc5RjAsIDB4N0FFMCwNCi0gICAgMHg3QjExLCAweDdDQTcsIDB4N0QzOSwgMHg4MDk2LCAweDgzRDYsIDB4ODQ4QiwgMHg4NTQ5LCAweDg4NUQsDQotICAgIDB4ODhGMywgMHg4QTFGLCAweDhBM0MsIDB4OEE1NCwgMHg4QTczLCAweDhDNjEsIDB4OENERSwgMHg5MUE0LA0KLSAgICAweDkyNjYsIDB4OTM3RSwgMHg5NDE4LCAweDk2OUMsIDB4OTc5OCwgMHg0RTBBLCAweDRFMDgsIDB4NEUxRSwNCi0gICAgMHg0RTU3LCAweDUxOTcsIDB4NTI3MCwgMHg1N0NFLCAweDU4MzQsIDB4NThDQywgMHg1QjIyLCAweDVFMzgsDQotICAgIDB4NjBDNSwgMHg2NEZFLCAweDY3NjEsIDB4Njc1NiwgMHg2RDQ0LCAweDcyQjYsIDB4NzU3MywgMHg3QTYzLA0KLSAgICAweDg0QjgsIDB4OEI3MiwgMHg5MUI4LCAweDkzMjAsIDB4NTYzMSwgMHg1N0Y0LCAweDk4RkUsIDB4NjJFRCwNCi0gICAgMHg2OTBELCAweDZCOTYsIDB4NzFFRCwgMHg3RTU0LCAweDgwNzcsIDB4ODI3MiwgMHg4OUU2LCAweDk4REYsDQotICAgIDB4ODc1NSwgMHg4RkIxLCAweDVDM0IsIDB4NEYzOCwgMHg0RkUxLCAweDRGQjUsIDB4NTUwNywgMHg1QTIwLA0KLSAgICAweDVCREQsIDB4NUJFOSwgMHg1RkMzLCAweDYxNEUsIDB4NjMyRiwgMHg2NUIwLCAweDY2NEIsIDB4NjhFRSwNCi0gICAgMHg2OTlCLCAweDZENzgsIDB4NkRGMSwgMHg3NTMzLCAweDc1QjksIDB4NzcxRiwgMHg3OTVFLCAweDc5RTYsDQotICAgIDB4N0QzMywgMHg4MUUzLCAweDgyQUYsIDB4ODVBQSwgMHg4OUFBLCAweDhBM0EsIDB4OEVBQiwgMHg4RjlCLA0KLSAgICAweDkwMzIsIDB4OTFERCwgMHg5NzA3LCAweDRFQkEsIDB4NEVDMSwgMHg1MjAzLCAweDU4NzUsIDB4NThFQywNCi0gICAgMHg1QzBCLCAweDc1MUEsIDB4NUMzRCwgMHg4MTRFLCAweDhBMEEsIDB4OEZDNSwgMHg5NjYzLCAweDk3NkQsDQotICAgIDB4N0IyNSwgMHg4QUNGLCAweDk4MDgsIDB4OTE2MiwgMHg1NkYzLCAweDUzQTgsIDB4OTAxNywgMHg1NDM5LA0KLSAgICAweDU3ODIsIDB4NUUyNSwgMHg2M0E4LCAweDZDMzQsIDB4NzA4QSwgMHg3NzYxLCAweDdDOEIsIDB4N0ZFMCwNCi0gICAgMHg4ODcwLCAweDkwNDIsIDB4OTE1NCwgMHg5MzEwLCAweDkzMTgsIDB4OTY4RiwgMHg3NDVFLCAweDlBQzQsDQotICAgIDB4NUQwNywgMHg1RDY5LCAweDY1NzAsIDB4NjdBMiwgMHg4REE4LCAweDk2REIsIDB4NjM2RSwgMHg2NzQ5LA0KLSAgICAweDY5MTksIDB4ODNDNSwgMHg5ODE3LCAweDk2QzAsIDB4ODhGRSwgMHg2Rjg0LCAweDY0N0EsIDB4NUJGOCwNCi0gICAgMHg0RTE2LCAweDcwMkMsIDB4NzU1RCwgMHg2NjJGLCAweDUxQzQsIDB4NTIzNiwgMHg1MkUyLCAweDU5RDMsDQotICAgIDB4NUY4MSwgMHg2MDI3LCAweDYyMTAsIDB4NjUzRiwgMHg2NTc0LCAweDY2MUYsIDB4NjY3NCwgMHg2OEYyLA0KLSAgICAweDY4MTYsIDB4NkI2MywgMHg2RTA1LCAweDcyNzIsIDB4NzUxRiwgMHg3NkRCLCAweDdDQkUsIDB4ODA1NiwNCi0gICAgMHg1OEYwLCAweDg4RkQsIDB4ODk3RiwgMHg4QUEwLCAweDhBOTMsIDB4OEFDQiwgMHg5MDFELCAweDkxOTIsDQotICAgIDB4OTc1MiwgMHg5NzU5LCAweDY1ODksIDB4N0EwRSwgMHg4MTA2LCAweDk2QkIsIDB4NUUyRCwgMHg2MERDLA0KLSAgICAweDYyMUEsIDB4NjVBNSwgMHg2NjE0LCAweDY3OTAsIDB4NzdGMywgMHg3QTRELCAweDdDNEQsIDB4N0UzRSwNCi0gICAgMHg4MTBBLCAweDhDQUMsIDB4OEQ2NCwgMHg4REUxLCAweDhFNUYsIDB4NzhBOSwgMHg1MjA3LCAweDYyRDksDQotICAgIDB4NjNBNSwgMHg2NDQyLCAweDYyOTgsIDB4OEEyRCwgMHg3QTgzLCAweDdCQzAsIDB4OEFBQywgMHg5NkVBLA0KLSAgICAweDdENzYsIDB4ODIwQywgMHg4NzQ5LCAweDRFRDksIDB4NTE0OCwgMHg1MzQzLCAweDUzNjAsIDB4NUJBMywNCi0gICAgMHg1QzAyLCAweDVDMTYsIDB4NURERCwgMHg2MjI2LCAweDYyNDcsIDB4NjRCMCwgMHg2ODEzLCAweDY4MzQsDQotICAgIDB4NkNDOSwgMHg2RDQ1LCAweDZEMTcsIDB4NjdEMywgMHg2RjVDLCAweDcxNEUsIDB4NzE3RCwgMHg2NUNCLA0KLSAgICAweDdBN0YsIDB4N0JBRCwgMHg3RERBLCAweDdFNEEsIDB4N0ZBOCwgMHg4MTdBLCAweDgyMUIsIDB4ODIzOSwNCi0gICAgMHg4NUE2LCAweDhBNkUsIDB4OENDRSwgMHg4REY1LCAweDkwNzgsIDB4OTA3NywgMHg5MkFELCAweDkyOTEsDQotICAgIDB4OTU4MywgMHg5QkFFLCAweDUyNEQsIDB4NTU4NCwgMHg2RjM4LCAweDcxMzYsIDB4NTE2OCwgMHg3OTg1LA0KLSAgICAweDdFNTUsIDB4ODFCMywgMHg3Q0NFLCAweDU2NEMsIDB4NTg1MSwgMHg1Q0E4LCAweDYzQUEsIDB4NjZGRSwNCi0gICAgMHg2NkZELCAweDY5NUEsIDB4NzJEOSwgMHg3NThGLCAweDc1OEUsIDB4NzkwRSwgMHg3OTU2LCAweDc5REYsDQotICAgIDB4N0M5NywgMHg3RDIwLCAweDdENDQsIDB4ODYwNywgMHg4QTM0LCAweDk2M0IsIDB4OTA2MSwgMHg5RjIwLA0KLSAgICAweDUwRTcsIDB4NTI3NSwgMHg1M0NDLCAweDUzRTIsIDB4NTAwOSwgMHg1NUFBLCAweDU4RUUsIDB4NTk0RiwNCi0gICAgMHg3MjNELCAweDVCOEIsIDB4NUM2NCwgMHg1MzFELCAweDYwRTMsIDB4NjBGMywgMHg2MzVDLCAweDYzODMsDQotICAgIDB4NjMzRiwgMHg2M0JCLCAweDY0Q0QsIDB4NjVFOSwgMHg2NkY5LCAweDVERTMsIDB4NjlDRCwgMHg2OUZELA0KLSAgICAweDZGMTUsIDB4NzFFNSwgMHg0RTg5LCAweDc1RTksIDB4NzZGOCwgMHg3QTkzLCAweDdDREYsIDB4N0RDRiwNCi0gICAgMHg3RDlDLCAweDgwNjEsIDB4ODM0OSwgMHg4MzU4LCAweDg0NkMsIDB4ODRCQywgMHg4NUZCLCAweDg4QzUsDQotICAgIDB4OEQ3MCwgMHg5MDAxLCAweDkwNkQsIDB4OTM5NywgMHg5NzFDLCAweDlBMTIsIDB4NTBDRiwgMHg1ODk3LA0KLSAgICAweDYxOEUsIDB4ODFEMywgMHg4NTM1LCAweDhEMDgsIDB4OTAyMCwgMHg0RkMzLCAweDUwNzQsIDB4NTI0NywNCi0gICAgMHg1MzczLCAweDYwNkYsIDB4NjM0OSwgMHg2NzVGLCAweDZFMkMsIDB4OERCMywgMHg5MDFGLCAweDRGRDcsDQotICAgIDB4NUM1RSwgMHg4Q0NBLCAweDY1Q0YsIDB4N0Q5QSwgMHg1MzUyLCAweDg4OTYsIDB4NTE3NiwgMHg2M0MzLA0KLSAgICAweDVCNTgsIDB4NUI2QiwgMHg1QzBBLCAweDY0MEQsIDB4Njc1MSwgMHg5MDVDLCAweDRFRDYsIDB4NTkxQSwNCi0gICAgMHg1OTJBLCAweDZDNzAsIDB4OEE1MSwgMHg1NTNFLCAweDU4MTUsIDB4NTlBNSwgMHg2MEYwLCAweDYyNTMsDQotICAgIDB4NjdDMSwgMHg4MjM1LCAweDY5NTUsIDB4OTY0MCwgMHg5OUM0LCAweDlBMjgsIDB4NEY1MywgMHg1ODA2LA0KLSAgICAweDVCRkUsIDB4ODAxMCwgMHg1Q0IxLCAweDVFMkYsIDB4NUY4NSwgMHg2MDIwLCAweDYxNEIsIDB4NjIzNCwNCi0gICAgMHg2NkZGLCAweDZDRjAsIDB4NkVERSwgMHg4MENFLCAweDgxN0YsIDB4ODJENCwgMHg4ODhCLCAweDhDQjgsDQotICAgIDB4OTAwMCwgMHg5MDJFLCAweDk2OEEsIDB4OUVEQiwgMHg5QkRCLCAweDRFRTMsIDB4NTNGMCwgMHg1OTI3LA0KLSAgICAweDdCMkMsIDB4OTE4RCwgMHg5ODRDLCAweDlERjksIDB4NkVERCwgMHg3MDI3LCAweDUzNTMsIDB4NTU0NCwNCi0gICAgMHg1Qjg1LCAweDYyNTgsIDB4NjI5RSwgMHg2MkQzLCAweDZDQTIsIDB4NkZFRiwgMHg3NDIyLCAweDhBMTcsDQotICAgIDB4OTQzOCwgMHg2RkMxLCAweDhBRkUsIDB4ODMzOCwgMHg1MUU3LCAweDg2RjgsIDB4NTNFQSwgMHg1M0U5LA0KLSAgICAweDRGNDYsIDB4OTA1NCwgMHg4RkIwLCAweDU5NkEsIDB4ODEzMSwgMHg1REZELCAweDdBRUEsIDB4OEZCRiwNCi0gICAgMHg2OERBLCAweDhDMzcsIDB4NzJGOCwgMHg5QzQ4LCAweDZBM0QsIDB4OEFCMCwgMHg0RTM5LCAweDUzNTgsDQotICAgIDB4NTYwNiwgMHg1NzY2LCAweDYyQzUsIDB4NjNBMiwgMHg2NUU2LCAweDZCNEUsIDB4NkRFMSwgMHg2RTVCLA0KLSAgICAweDcwQUQsIDB4NzdFRCwgMHg3QUVGLCAweDdCQUEsIDB4N0RCQiwgMHg4MDNELCAweDgwQzYsIDB4ODZDQiwNCi0gICAgMHg4QTk1LCAweDkzNUIsIDB4NTZFMywgMHg1OEM3LCAweDVGM0UsIDB4NjVBRCwgMHg2Njk2LCAweDZBODAsDQotICAgIDB4NkJCNSwgMHg3NTM3LCAweDhBQzcsIDB4NTAyNCwgMHg3N0U1LCAweDU3MzAsIDB4NUYxQiwgMHg2MDY1LA0KLSAgICAweDY2N0EsIDB4NkM2MCwgMHg3NUY0LCAweDdBMUEsIDB4N0Y2RSwgMHg4MUY0LCAweDg3MTgsIDB4OTA0NSwNCi0gICAgMHg5OUIzLCAweDdCQzksIDB4NzU1QywgMHg3QUY5LCAweDdCNTEsIDB4ODRDNCwgMHg5MDEwLCAweDc5RTksDQotICAgIDB4N0E5MiwgMHg4MzM2LCAweDVBRTEsIDB4Nzc0MCwgMHg0RTJELCAweDRFRjIsIDB4NUI5OSwgMHg1RkUwLA0KLSAgICAweDYyQkQsIDB4NjYzQywgMHg2N0YxLCAweDZDRTgsIDB4ODY2QiwgMHg4ODc3LCAweDhBM0IsIDB4OTE0RSwNCi0gICAgMHg5MkYzLCAweDk5RDAsIDB4NkExNywgMHg3MDI2LCAweDczMkEsIDB4ODJFNywgMHg4NDU3LCAweDhDQUYsDQotICAgIDB4NEUwMSwgMHg1MTQ2LCAweDUxQ0IsIDB4NTU4QiwgMHg1QkY1LCAweDVFMTYsIDB4NUUzMywgMHg1RTgxLA0KLSAgICAweDVGMTQsIDB4NUYzNSwgMHg1RjZCLCAweDVGQjQsIDB4NjFGMiwgMHg2MzExLCAweDY2QTIsIDB4NjcxRCwNCi0gICAgMHg2RjZFLCAweDcyNTIsIDB4NzUzQSwgMHg3NzNBLCAweDgwNzQsIDB4ODEzOSwgMHg4MTc4LCAweDg3NzYsDQotICAgIDB4OEFCRiwgMHg4QURDLCAweDhEODUsIDB4OERGMywgMHg5MjlBLCAweDk1NzcsIDB4OTgwMiwgMHg5Q0U1LA0KLSAgICAweDUyQzUsIDB4NjM1NywgMHg3NkY0LCAweDY3MTUsIDB4NkM4OCwgMHg3M0NELCAweDhDQzMsIDB4OTNBRSwNCi0gICAgMHg5NjczLCAweDZEMjUsIDB4NTg5QywgMHg2OTBFLCAweDY5Q0MsIDB4OEZGRCwgMHg5MzlBLCAweDc1REIsDQotICAgIDB4OTAxQSwgMHg1ODVBLCAweDY4MDIsIDB4NjNCNCwgMHg2OUZCLCAweDRGNDMsIDB4NkYyQywgMHg2N0Q4LA0KLSAgICAweDhGQkIsIDB4ODUyNiwgMHg3REI0LCAweDkzNTQsIDB4NjkzRiwgMHg2RjcwLCAweDU3NkEsIDB4NThGNywNCi0gICAgMHg1QjJDLCAweDdEMkMsIDB4NzIyQSwgMHg1NDBBLCAweDkxRTMsIDB4OURCNCwgMHg0RUFELCAweDRGNEUsDQotICAgIDB4NTA1QywgMHg1MDc1LCAweDUyNDMsIDB4OEM5RSwgMHg1NDQ4LCAweDU4MjQsIDB4NUI5QSwgMHg1RTFELA0KLSAgICAweDVFOTUsIDB4NUVBRCwgMHg1RUY3LCAweDVGMUYsIDB4NjA4QywgMHg2MkI1LCAweDYzM0EsIDB4NjNEMCwNCi0gICAgMHg2OEFGLCAweDZDNDAsIDB4Nzg4NywgMHg3OThFLCAweDdBMEIsIDB4N0RFMCwgMHg4MjQ3LCAweDhBMDIsDQotICAgIDB4OEFFNiwgMHg4RTQ0LCAweDkwMTMsIDB4OTBCOCwgMHg5MTJELCAweDkxRDgsIDB4OUYwRSwgMHg2Q0U1LA0KLSAgICAweDY0NTgsIDB4NjRFMiwgMHg2NTc1LCAweDZFRjQsIDB4NzY4NCwgMHg3QjFCLCAweDkwNjksIDB4OTNEMSwNCi0gICAgMHg2RUJBLCAweDU0RjIsIDB4NUZCOSwgMHg2NEE0LCAweDhGNEQsIDB4OEZFRCwgMHg5MjQ0LCAweDUxNzgsDQotICAgIDB4NTg2QiwgMHg1OTI5LCAweDVDNTUsIDB4NUU5NywgMHg2REZCLCAweDdFOEYsIDB4NzUxQywgMHg4Q0JDLA0KLSAgICAweDhFRTIsIDB4OTg1QiwgMHg3MEI5LCAweDRGMUQsIDB4NkJCRiwgMHg2RkIxLCAweDc1MzAsIDB4OTZGQiwNCi0gICAgMHg1MTRFLCAweDU0MTAsIDB4NTgzNSwgMHg1ODU3LCAweDU5QUMsIDB4NUM2MCwgMHg1RjkyLCAweDY1OTcsDQotICAgIDB4Njc1QywgMHg2RTIxLCAweDc2N0IsIDB4ODNERiwgMHg4Q0VELCAweDkwMTQsIDB4OTBGRCwgMHg5MzRELA0KLSAgICAweDc4MjUsIDB4NzgzQSwgMHg1MkFBLCAweDVFQTYsIDB4NTcxRiwgMHg1OTc0LCAweDYwMTIsIDB4NTAxMiwNCi0gICAgMHg1MTVBLCAweDUxQUMsIDB4NTFDRCwgMHg1MjAwLCAweDU1MTAsIDB4NTg1NCwgMHg1ODU4LCAweDU5NTcsDQotICAgIDB4NUI5NSwgMHg1Q0Y2LCAweDVEOEIsIDB4NjBCQywgMHg2Mjk1LCAweDY0MkQsIDB4Njc3MSwgMHg2ODQzLA0KLSAgICAweDY4QkMsIDB4NjhERiwgMHg3NkQ3LCAweDZERDgsIDB4NkU2RiwgMHg2RDlCLCAweDcwNkYsIDB4NzFDOCwNCi0gICAgMHg1RjUzLCAweDc1RDgsIDB4Nzk3NywgMHg3QjQ5LCAweDdCNTQsIDB4N0I1MiwgMHg3Q0Q2LCAweDdENzEsDQotICAgIDB4NTIzMCwgMHg4NDYzLCAweDg1NjksIDB4ODVFNCwgMHg4QTBFLCAweDhCMDQsIDB4OEM0NiwgMHg4RTBGLA0KLSAgICAweDkwMDMsIDB4OTAwRiwgMHg5NDE5LCAweDk2NzYsIDB4OTgyRCwgMHg5QTMwLCAweDk1RDgsIDB4NTBDRCwNCi0gICAgMHg1MkQ1LCAweDU0MEMsIDB4NTgwMiwgMHg1QzBFLCAweDYxQTcsIDB4NjQ5RSwgMHg2RDFFLCAweDc3QjMsDQotICAgIDB4N0FFNSwgMHg4MEY0LCAweDg0MDQsIDB4OTA1MywgMHg5Mjg1LCAweDVDRTAsIDB4OUQwNywgMHg1MzNGLA0KLSAgICAweDVGOTcsIDB4NUZCMywgMHg2RDlDLCAweDcyNzksIDB4Nzc2MywgMHg3OUJGLCAweDdCRTQsIDB4NkJEMiwNCi0gICAgMHg3MkVDLCAweDhBQUQsIDB4NjgwMywgMHg2QTYxLCAweDUxRjgsIDB4N0E4MSwgMHg2OTM0LCAweDVDNEEsDQotICAgIDB4OUNGNiwgMHg4MkVCLCAweDVCQzUsIDB4OTE0OSwgMHg3MDFFLCAweDU2NzgsIDB4NUM2RiwgMHg2MEM3LA0KLSAgICAweDY1NjYsIDB4NkM4QywgMHg4QzVBLCAweDkwNDEsIDB4OTgxMywgMHg1NDUxLCAweDY2QzcsIDB4OTIwRCwNCi0gICAgMHg1OTQ4LCAweDkwQTMsIDB4NTE4NSwgMHg0RTRELCAweDUxRUEsIDB4ODU5OSwgMHg4QjBFLCAweDcwNTgsDQotICAgIDB4NjM3QSwgMHg5MzRCLCAweDY5NjIsIDB4OTlCNCwgMHg3RTA0LCAweDc1NzcsIDB4NTM1NywgMHg2OTYwLA0KLSAgICAweDhFREYsIDB4OTZFMywgMHg2QzVELCAweDRFOEMsIDB4NUMzQywgMHg1RjEwLCAweDhGRTksIDB4NTMwMiwNCi0gICAgMHg4Q0QxLCAweDgwODksIDB4ODY3OSwgMHg1RUZGLCAweDY1RTUsIDB4NEU3MywgMHg1MTY1LCAweDU5ODIsDQotICAgIDB4NUMzRiwgMHg5N0VFLCAweDRFRkIsIDB4NTk4QSwgMHg1RkNELCAweDhBOEQsIDB4NkZFMSwgMHg3OUIwLA0KLSAgICAweDc5NjIsIDB4NUJFNywgMHg4NDcxLCAweDczMkIsIDB4NzFCMSwgMHg1RTc0LCAweDVGRjUsIDB4NjM3QiwNCi0gICAgMHg2NDlBLCAweDcxQzMsIDB4N0M5OCwgMHg0RTQzLCAweDVFRkMsIDB4NEU0QiwgMHg1N0RDLCAweDU2QTIsDQotICAgIDB4NjBBOSwgMHg2RkMzLCAweDdEMEQsIDB4ODBGRCwgMHg4MTMzLCAweDgxQkYsIDB4OEZCMiwgMHg4OTk3LA0KLSAgICAweDg2QTQsIDB4NURGNCwgMHg2MjhBLCAweDY0QUQsIDB4ODk4NywgMHg2Nzc3LCAweDZDRTIsIDB4NkQzRSwNCi0gICAgMHg3NDM2LCAweDc4MzQsIDB4NUE0NiwgMHg3Rjc1LCAweDgyQUQsIDB4OTlBQywgMHg0RkYzLCAweDVFQzMsDQotICAgIDB4NjJERCwgMHg2MzkyLCAweDY1NTcsIDB4Njc2RiwgMHg3NkMzLCAweDcyNEMsIDB4ODBDQywgMHg4MEJBLA0KLSAgICAweDhGMjksIDB4OTE0RCwgMHg1MDBELCAweDU3RjksIDB4NUE5MiwgMHg2ODg1LCAweDY5NzMsIDB4NzE2NCwNCi0gICAgMHg3MkZELCAweDhDQjcsIDB4NThGMiwgMHg4Q0UwLCAweDk2NkEsIDB4OTAxOSwgMHg4NzdGLCAweDc5RTQsDQotICAgIDB4NzdFNywgMHg4NDI5LCAweDRGMkYsIDB4NTI2NSwgMHg1MzVBLCAweDYyQ0QsIDB4NjdDRiwgMHg2Q0NBLA0KLSAgICAweDc2N0QsIDB4N0I5NCwgMHg3Qzk1LCAweDgyMzYsIDB4ODU4NCwgMHg4RkVCLCAweDY2REQsIDB4NkYyMCwNCi0gICAgMHg3MjA2LCAweDdFMUIsIDB4ODNBQiwgMHg5OUMxLCAweDlFQTYsIDB4NTFGRCwgMHg3QkIxLCAweDc4NzIsDQotICAgIDB4N0JCOCwgMHg4MDg3LCAweDdCNDgsIDB4NkFFOCwgMHg1RTYxLCAweDgwOEMsIDB4NzU1MSwgMHg3NTYwLA0KLSAgICAweDUxNkIsIDB4OTI2MiwgMHg2RThDLCAweDc2N0EsIDB4OTE5NywgMHg5QUVBLCAweDRGMTAsIDB4N0Y3MCwNCi0gICAgMHg2MjlDLCAweDdCNEYsIDB4OTVBNSwgMHg5Q0U5LCAweDU2N0EsIDB4NTg1OSwgMHg4NkU0LCAweDk2QkMsDQotICAgIDB4NEYzNCwgMHg1MjI0LCAweDUzNEEsIDB4NTNDRCwgMHg1M0RCLCAweDVFMDYsIDB4NjQyQywgMHg2NTkxLA0KLSAgICAweDY3N0YsIDB4NkMzRSwgMHg2QzRFLCAweDcyNDgsIDB4NzJBRiwgMHg3M0VELCAweDc1NTQsIDB4N0U0MSwNCi0gICAgMHg4MjJDLCAweDg1RTksIDB4OENBOSwgMHg3QkM0LCAweDkxQzYsIDB4NzE2OSwgMHg5ODEyLCAweDk4RUYsDQotICAgIDB4NjMzRCwgMHg2NjY5LCAweDc1NkEsIDB4NzZFNCwgMHg3OEQwLCAweDg1NDMsIDB4ODZFRSwgMHg1MzJBLA0KLSAgICAweDUzNTEsIDB4NTQyNiwgMHg1OTgzLCAweDVFODcsIDB4NUY3QywgMHg2MEIyLCAweDYyNDksIDB4NjI3OSwNCi0gICAgMHg2MkFCLCAweDY1OTAsIDB4NkJENCwgMHg2Q0NDLCAweDc1QjIsIDB4NzZBRSwgMHg3ODkxLCAweDc5RDgsDQotICAgIDB4N0RDQiwgMHg3Rjc3LCAweDgwQTUsIDB4ODhBQiwgMHg4QUI5LCAweDhDQkIsIDB4OTA3RiwgMHg5NzVFLA0KLSAgICAweDk4REIsIDB4NkEwQiwgMHg3QzM4LCAweDUwOTksIDB4NUMzRSwgMHg1RkFFLCAweDY3ODcsIDB4NkJEOCwNCi0gICAgMHg3NDM1LCAweDc3MDksIDB4N0Y4RSwgMHg5RjNCLCAweDY3Q0EsIDB4N0ExNywgMHg1MzM5LCAweDc1OEIsDQotICAgIDB4OUFFRCwgMHg1RjY2LCAweDgxOUQsIDB4ODNGMSwgMHg4MDk4LCAweDVGM0MsIDB4NUZDNSwgMHg3NTYyLA0KLSAgICAweDdCNDYsIDB4OTAzQywgMHg2ODY3LCAweDU5RUIsIDB4NUE5QiwgMHg3RDEwLCAweDc2N0UsIDB4OEIyQywNCi0gICAgMHg0RkY1LCAweDVGNkEsIDB4NkExOSwgMHg2QzM3LCAweDZGMDIsIDB4NzRFMiwgMHg3OTY4LCAweDg4NjgsDQotICAgIDB4OEE1NSwgMHg4Qzc5LCAweDVFREYsIDB4NjNDRiwgMHg3NUM1LCAweDc5RDIsIDB4ODJENywgMHg5MzI4LA0KLSAgICAweDkyRjIsIDB4ODQ5QywgMHg4NkVELCAweDlDMkQsIDB4NTRDMSwgMHg1RjZDLCAweDY1OEMsIDB4NkQ1QywNCi0gICAgMHg3MDE1LCAweDhDQTcsIDB4OENEMywgMHg5ODNCLCAweDY1NEYsIDB4NzRGNiwgMHg0RTBELCAweDRFRDgsDQotICAgIDB4NTdFMCwgMHg1OTJCLCAweDVBNjYsIDB4NUJDQywgMHg1MUE4LCAweDVFMDMsIDB4NUU5QywgMHg2MDE2LA0KLSAgICAweDYyNzYsIDB4NjU3NywgMHg2NUE3LCAweDY2NkUsIDB4NkQ2RSwgMHg3MjM2LCAweDdCMjYsIDB4ODE1MCwNCi0gICAgMHg4MTlBLCAweDgyOTksIDB4OEI1QywgMHg4Q0EwLCAweDhDRTYsIDB4OEQ3NCwgMHg5NjFDLCAweDk2NDQsDQotICAgIDB4NEZBRSwgMHg2NEFCLCAweDZCNjYsIDB4ODIxRSwgMHg4NDYxLCAweDg1NkEsIDB4OTBFOCwgMHg1QzAxLA0KLSAgICAweDY5NTMsIDB4OThBOCwgMHg4NDdBLCAweDg1NTcsIDB4NEYwRiwgMHg1MjZGLCAweDVGQTksIDB4NUU0NSwNCi0gICAgMHg2NzBELCAweDc5OEYsIDB4ODE3OSwgMHg4OTA3LCAweDg5ODYsIDB4NkRGNSwgMHg1RjE3LCAweDYyNTUsDQotICAgIDB4NkNCOCwgMHg0RUNGLCAweDcyNjksIDB4OUI5MiwgMHg1MjA2LCAweDU0M0IsIDB4NTY3NCwgMHg1OEIzLA0KLSAgICAweDYxQTQsIDB4NjI2RSwgMHg3MTFBLCAweDU5NkUsIDB4N0M4OSwgMHg3Q0RFLCAweDdEMUIsIDB4OTZGMCwNCi0gICAgMHg2NTg3LCAweDgwNUUsIDB4NEUxOSwgMHg0Rjc1LCAweDUxNzUsIDB4NTg0MCwgMHg1RTYzLCAweDVFNzMsDQotICAgIDB4NUYwQSwgMHg2N0M0LCAweDRFMjYsIDB4ODUzRCwgMHg5NTg5LCAweDk2NUIsIDB4N0M3MywgMHg5ODAxLA0KLSAgICAweDUwRkIsIDB4NThDMSwgMHg3NjU2LCAweDc4QTcsIDB4NTIyNSwgMHg3N0E1LCAweDg1MTEsIDB4N0I4NiwNCi0gICAgMHg1MDRGLCAweDU5MDksIDB4NzI0NywgMHg3QkM3LCAweDdERTgsIDB4OEZCQSwgMHg4RkQ0LCAweDkwNEQsDQotICAgIDB4NEZCRiwgMHg1MkM5LCAweDVBMjksIDB4NUYwMSwgMHg5N0FELCAweDRGREQsIDB4ODIxNywgMHg5MkVBLA0KLSAgICAweDU3MDMsIDB4NjM1NSwgMHg2QjY5LCAweDc1MkIsIDB4ODhEQywgMHg4RjE0LCAweDdBNDIsIDB4NTJERiwNCi0gICAgMHg1ODkzLCAweDYxNTUsIDB4NjIwQSwgMHg2NkFFLCAweDZCQ0QsIDB4N0MzRiwgMHg4M0U5LCAweDUwMjMsDQotICAgIDB4NEZGOCwgMHg1MzA1LCAweDU0NDYsIDB4NTgzMSwgMHg1OTQ5LCAweDVCOUQsIDB4NUNGMCwgMHg1Q0VGLA0KLSAgICAweDVEMjksIDB4NUU5NiwgMHg2MkIxLCAweDYzNjcsIDB4NjUzRSwgMHg2NUI5LCAweDY3MEIsIDB4NkNENSwNCi0gICAgMHg2Q0UxLCAweDcwRjksIDB4NzgzMiwgMHg3RTJCLCAweDgwREUsIDB4ODJCMywgMHg4NDBDLCAweDg0RUMsDQotICAgIDB4ODcwMiwgMHg4OTEyLCAweDhBMkEsIDB4OEM0QSwgMHg5MEE2LCAweDkyRDIsIDB4OThGRCwgMHg5Q0YzLA0KLSAgICAweDlENkMsIDB4NEU0RiwgMHg0RUExLCAweDUwOEQsIDB4NTI1NiwgMHg1NzRBLCAweDU5QTgsIDB4NUUzRCwNCi0gICAgMHg1RkQ4LCAweDVGRDksIDB4NjIzRiwgMHg2NkI0LCAweDY3MUIsIDB4NjdEMCwgMHg2OEQyLCAweDUxOTIsDQotICAgIDB4N0QyMSwgMHg4MEFBLCAweDgxQTgsIDB4OEIwMCwgMHg4QzhDLCAweDhDQkYsIDB4OTI3RSwgMHg5NjMyLA0KLSAgICAweDU0MjAsIDB4OTgyQywgMHg1MzE3LCAweDUwRDUsIDB4NTM1QywgMHg1OEE4LCAweDY0QjIsIDB4NjczNCwNCi0gICAgMHg3MjY3LCAweDc3NjYsIDB4N0E0NiwgMHg5MUU2LCAweDUyQzMsIDB4NkNBMSwgMHg2Qjg2LCAweDU4MDAsDQotICAgIDB4NUU0QywgMHg1OTU0LCAweDY3MkMsIDB4N0ZGQiwgMHg1MUUxLCAweDc2QzYsIDB4NjQ2OSwgMHg3OEU4LA0KLSAgICAweDlCNTQsIDB4OUVCQiwgMHg1N0NCLCAweDU5QjksIDB4NjYyNywgMHg2NzlBLCAweDZCQ0UsIDB4NTRFOSwNCi0gICAgMHg2OUQ5LCAweDVFNTUsIDB4ODE5QywgMHg2Nzk1LCAweDlCQUEsIDB4NjdGRSwgMHg5QzUyLCAweDY4NUQsDQotICAgIDB4NEVBNiwgMHg0RkUzLCAweDUzQzgsIDB4NjJCOSwgMHg2NzJCLCAweDZDQUIsIDB4OEZDNCwgMHg0RkFELA0KLSAgICAweDdFNkQsIDB4OUVCRiwgMHg0RTA3LCAweDYxNjIsIDB4NkU4MCwgMHg2RjJCLCAweDg1MTMsIDB4NTQ3MywNCi0gICAgMHg2NzJBLCAweDlCNDUsIDB4NURGMywgMHg3Qjk1LCAweDVDQUMsIDB4NUJDNiwgMHg4NzFDLCAweDZFNEEsDQotICAgIDB4ODREMSwgMHg3QTE0LCAweDgxMDgsIDB4NTk5OSwgMHg3QzhELCAweDZDMTEsIDB4NzcyMCwgMHg1MkQ5LA0KLSAgICAweDU5MjIsIDB4NzEyMSwgMHg3MjVGLCAweDc3REIsIDB4OTcyNywgMHg5RDYxLCAweDY5MEIsIDB4NUE3RiwNCi0gICAgMHg1QTE4LCAweDUxQTUsIDB4NTQwRCwgMHg1NDdELCAweDY2MEUsIDB4NzZERiwgMHg4RkY3LCAweDkyOTgsDQotICAgIDB4OUNGNCwgMHg1OUVBLCAweDcyNUQsIDB4NkVDNSwgMHg1MTRELCAweDY4QzksIDB4N0RCRiwgMHg3REVDLA0KLSAgICAweDk3NjIsIDB4OUVCQSwgMHg2NDc4LCAweDZBMjEsIDB4ODMwMiwgMHg1OTg0LCAweDVCNUYsIDB4NkJEQiwNCi0gICAgMHg3MzFCLCAweDc2RjIsIDB4N0RCMiwgMHg4MDE3LCAweDg0OTksIDB4NTEzMiwgMHg2NzI4LCAweDlFRDksDQotICAgIDB4NzZFRSwgMHg2NzYyLCAweDUyRkYsIDB4OTkwNSwgMHg1QzI0LCAweDYyM0IsIDB4N0M3RSwgMHg4Q0IwLA0KLSAgICAweDU1NEYsIDB4NjBCNiwgMHg3RDBCLCAweDk1ODAsIDB4NTMwMSwgMHg0RTVGLCAweDUxQjYsIDB4NTkxQywNCi0gICAgMHg3MjNBLCAweDgwMzYsIDB4OTFDRSwgMHg1RjI1LCAweDc3RTIsIDB4NTM4NCwgMHg1Rjc5LCAweDdEMDQsDQotICAgIDB4ODVBQywgMHg4QTMzLCAweDhFOEQsIDB4OTc1NiwgMHg2N0YzLCAweDg1QUUsIDB4OTQ1MywgMHg2MTA5LA0KLSAgICAweDYxMDgsIDB4NkNCOSwgMHg3NjUyLCAweDhBRUQsIDB4OEYzOCwgMHg1NTJGLCAweDRGNTEsIDB4NTEyQSwNCi0gICAgMHg1MkM3LCAweDUzQ0IsIDB4NUJBNSwgMHg1RTdELCAweDYwQTAsIDB4NjE4MiwgMHg2M0Q2LCAweDY3MDksDQotICAgIDB4NjdEQSwgMHg2RTY3LCAweDZEOEMsIDB4NzMzNiwgMHg3MzM3LCAweDc1MzEsIDB4Nzk1MCwgMHg4OEQ1LA0KLSAgICAweDhBOTgsIDB4OTA0QSwgMHg5MDkxLCAweDkwRjUsIDB4OTZDNCwgMHg4NzhELCAweDU5MTUsIDB4NEU4OCwNCi0gICAgMHg0RjU5LCAweDRFMEUsIDB4OEE4OSwgMHg4RjNGLCAweDk4MTAsIDB4NTBBRCwgMHg1RTdDLCAweDU5OTYsDQotICAgIDB4NUJCOSwgMHg1RUI4LCAweDYzREEsIDB4NjNGQSwgMHg2NEMxLCAweDY2REMsIDB4Njk0QSwgMHg2OUQ4LA0KLSAgICAweDZEMEIsIDB4NkVCNiwgMHg3MTk0LCAweDc1MjgsIDB4N0FBRiwgMHg3RjhBLCAweDgwMDAsIDB4ODQ0OSwNCi0gICAgMHg4NEM5LCAweDg5ODEsIDB4OEIyMSwgMHg4RTBBLCAweDkwNjUsIDB4OTY3RCwgMHg5OTBBLCAweDYxN0UsDQotICAgIDB4NjI5MSwgMHg2QjMyLCAweDZDODMsIDB4NkQ3NCwgMHg3RkNDLCAweDdGRkMsIDB4NkRDMCwgMHg3Rjg1LA0KLSAgICAweDg3QkEsIDB4ODhGOCwgMHg2NzY1LCAweDgzQjEsIDB4OTgzQywgMHg5NkY3LCAweDZEMUIsIDB4N0Q2MSwNCi0gICAgMHg4NDNELCAweDkxNkEsIDB4NEU3MSwgMHg1Mzc1LCAweDVENTAsIDB4NkIwNCwgMHg2RkVCLCAweDg1Q0QsDQotICAgIDB4ODYyRCwgMHg4OUE3LCAweDUyMjksIDB4NTQwRiwgMHg1QzY1LCAweDY3NEUsIDB4NjhBOCwgMHg3NDA2LA0KLSAgICAweDc0ODMsIDB4NzVFMiwgMHg4OENGLCAweDg4RTEsIDB4OTFDQywgMHg5NkUyLCAweDk2NzgsIDB4NUY4QiwNCi0gICAgMHg3Mzg3LCAweDdBQ0IsIDB4ODQ0RSwgMHg2M0EwLCAweDc1NjUsIDB4NTI4OSwgMHg2RDQxLCAweDZFOUMsDQotICAgIDB4NzQwOSwgMHg3NTU5LCAweDc4NkIsIDB4N0M5MiwgMHg5Njg2LCAweDdBREMsIDB4OUY4RCwgMHg0RkI2LA0KLSAgICAweDYxNkUsIDB4NjVDNSwgMHg4NjVDLCAweDRFODYsIDB4NEVBRSwgMHg1MERBLCAweDRFMjEsIDB4NTFDQywNCi0gICAgMHg1QkVFLCAweDY1OTksIDB4Njg4MSwgMHg2REJDLCAweDczMUYsIDB4NzY0MiwgMHg3N0FELCAweDdBMUMsDQotICAgIDB4N0NFNywgMHg4MjZGLCAweDhBRDIsIDB4OTA3QywgMHg5MUNGLCAweDk2NzUsIDB4OTgxOCwgMHg1MjlCLA0KLSAgICAweDdERDEsIDB4NTAyQiwgMHg1Mzk4LCAweDY3OTcsIDB4NkRDQiwgMHg3MUQwLCAweDc0MzMsIDB4ODFFOCwNCi0gICAgMHg4RjJBLCAweDk2QTMsIDB4OUM1NywgMHg5RTlGLCAweDc0NjAsIDB4NTg0MSwgMHg2RDk5LCAweDdEMkYsDQotICAgIDB4OTg1RSwgMHg0RUU0LCAweDRGMzYsIDB4NEY4QiwgMHg1MUI3LCAweDUyQjEsIDB4NURCQSwgMHg2MDFDLA0KLSAgICAweDczQjIsIDB4NzkzQywgMHg4MkQzLCAweDkyMzQsIDB4OTZCNywgMHg5NkY2LCAweDk3MEEsIDB4OUU5NywNCi0gICAgMHg5RjYyLCAweDY2QTYsIDB4NkI3NCwgMHg1MjE3LCAweDUyQTMsIDB4NzBDOCwgMHg4OEMyLCAweDVFQzksDQotICAgIDB4NjA0QiwgMHg2MTkwLCAweDZGMjMsIDB4NzE0OSwgMHg3QzNFLCAweDdERjQsIDB4ODA2RiwgMHg4NEVFLA0KLSAgICAweDkwMjMsIDB4OTMyQywgMHg1NDQyLCAweDlCNkYsIDB4NkFEMywgMHg3MDg5LCAweDhDQzIsIDB4OERFRiwNCi0gICAgMHg5NzMyLCAweDUyQjQsIDB4NUE0MSwgMHg1RUNBLCAweDVGMDQsIDB4NjcxNywgMHg2OTdDLCAweDY5OTQsDQotICAgIDB4NkQ2QSwgMHg2RjBGLCAweDcyNjIsIDB4NzJGQywgMHg3QkVELCAweDgwMDEsIDB4ODA3RSwgMHg4NzRCLA0KLSAgICAweDkwQ0UsIDB4NTE2RCwgMHg5RTkzLCAweDc5ODQsIDB4ODA4QiwgMHg5MzMyLCAweDhBRDYsIDB4NTAyRCwNCi0gICAgMHg1NDhDLCAweDhBNzEsIDB4NkI2QSwgMHg4Q0M0LCAweDgxMDcsIDB4NjBEMSwgMHg2N0EwLCAweDlERjIsDQotICAgIDB4NEU5OSwgMHg0RTk4LCAweDlDMTAsIDB4OEE2QiwgMHg4NUMxLCAweDg1NjgsIDB4NjkwMCwgMHg2RTdFLA0KLSAgICAweDc4OTcsIDB4ODE1NSwgMHg1RjBDLCAweDRFMTAsIDB4NEUxNSwgMHg0RTJBLCAweDRFMzEsIDB4NEUzNiwNCi0gICAgMHg0RTNDLCAweDRFM0YsIDB4NEU0MiwgMHg0RTU2LCAweDRFNTgsIDB4NEU4MiwgMHg0RTg1LCAweDhDNkIsDQotICAgIDB4NEU4QSwgMHg4MjEyLCAweDVGMEQsIDB4NEU4RSwgMHg0RTlFLCAweDRFOUYsIDB4NEVBMCwgMHg0RUEyLA0KLSAgICAweDRFQjAsIDB4NEVCMywgMHg0RUI2LCAweDRFQ0UsIDB4NEVDRCwgMHg0RUM0LCAweDRFQzYsIDB4NEVDMiwNCi0gICAgMHg0RUQ3LCAweDRFREUsIDB4NEVFRCwgMHg0RURGLCAweDRFRjcsIDB4NEYwOSwgMHg0RjVBLCAweDRGMzAsDQotICAgIDB4NEY1QiwgMHg0RjVELCAweDRGNTcsIDB4NEY0NywgMHg0Rjc2LCAweDRGODgsIDB4NEY4RiwgMHg0Rjk4LA0KLSAgICAweDRGN0IsIDB4NEY2OSwgMHg0RjcwLCAweDRGOTEsIDB4NEY2RiwgMHg0Rjg2LCAweDRGOTYsIDB4NTExOCwNCi0gICAgMHg0RkQ0LCAweDRGREYsIDB4NEZDRSwgMHg0RkQ4LCAweDRGREIsIDB4NEZEMSwgMHg0RkRBLCAweDRGRDAsDQotICAgIDB4NEZFNCwgMHg0RkU1LCAweDUwMUEsIDB4NTAyOCwgMHg1MDE0LCAweDUwMkEsIDB4NTAyNSwgMHg1MDA1LA0KLSAgICAweDRGMUMsIDB4NEZGNiwgMHg1MDIxLCAweDUwMjksIDB4NTAyQywgMHg0RkZFLCAweDRGRUYsIDB4NTAxMSwNCi0gICAgMHg1MDA2LCAweDUwNDMsIDB4NTA0NywgMHg2NzAzLCAweDUwNTUsIDB4NTA1MCwgMHg1MDQ4LCAweDUwNUEsDQotICAgIDB4NTA1NiwgMHg1MDZDLCAweDUwNzgsIDB4NTA4MCwgMHg1MDlBLCAweDUwODUsIDB4NTBCNCwgMHg1MEIyLA0KLSAgICAweDUwQzksIDB4NTBDQSwgMHg1MEIzLCAweDUwQzIsIDB4NTBENiwgMHg1MERFLCAweDUwRTUsIDB4NTBFRCwNCi0gICAgMHg1MEUzLCAweDUwRUUsIDB4NTBGOSwgMHg1MEY1LCAweDUxMDksIDB4NTEwMSwgMHg1MTAyLCAweDUxMTYsDQotICAgIDB4NTExNSwgMHg1MTE0LCAweDUxMUEsIDB4NTEyMSwgMHg1MTNBLCAweDUxMzcsIDB4NTEzQywgMHg1MTNCLA0KLSAgICAweDUxM0YsIDB4NTE0MCwgMHg1MTUyLCAweDUxNEMsIDB4NTE1NCwgMHg1MTYyLCAweDdBRjgsIDB4NTE2OSwNCi0gICAgMHg1MTZBLCAweDUxNkUsIDB4NTE4MCwgMHg1MTgyLCAweDU2RDgsIDB4NTE4QywgMHg1MTg5LCAweDUxOEYsDQotICAgIDB4NTE5MSwgMHg1MTkzLCAweDUxOTUsIDB4NTE5NiwgMHg1MUE0LCAweDUxQTYsIDB4NTFBMiwgMHg1MUE5LA0KLSAgICAweDUxQUEsIDB4NTFBQiwgMHg1MUIzLCAweDUxQjEsIDB4NTFCMiwgMHg1MUIwLCAweDUxQjUsIDB4NTFCRCwNCi0gICAgMHg1MUM1LCAweDUxQzksIDB4NTFEQiwgMHg1MUUwLCAweDg2NTUsIDB4NTFFOSwgMHg1MUVELCAweDUxRjAsDQotICAgIDB4NTFGNSwgMHg1MUZFLCAweDUyMDQsIDB4NTIwQiwgMHg1MjE0LCAweDUyMEUsIDB4NTIyNywgMHg1MjJBLA0KLSAgICAweDUyMkUsIDB4NTIzMywgMHg1MjM5LCAweDUyNEYsIDB4NTI0NCwgMHg1MjRCLCAweDUyNEMsIDB4NTI1RSwNCi0gICAgMHg1MjU0LCAweDUyNkEsIDB4NTI3NCwgMHg1MjY5LCAweDUyNzMsIDB4NTI3RiwgMHg1MjdELCAweDUyOEQsDQotICAgIDB4NTI5NCwgMHg1MjkyLCAweDUyNzEsIDB4NTI4OCwgMHg1MjkxLCAweDhGQTgsIDB4OEZBNywgMHg1MkFDLA0KLSAgICAweDUyQUQsIDB4NTJCQywgMHg1MkI1LCAweDUyQzEsIDB4NTJDRCwgMHg1MkQ3LCAweDUyREUsIDB4NTJFMywNCi0gICAgMHg1MkU2LCAweDk4RUQsIDB4NTJFMCwgMHg1MkYzLCAweDUyRjUsIDB4NTJGOCwgMHg1MkY5LCAweDUzMDYsDQotICAgIDB4NTMwOCwgMHg3NTM4LCAweDUzMEQsIDB4NTMxMCwgMHg1MzBGLCAweDUzMTUsIDB4NTMxQSwgMHg1MzIzLA0KLSAgICAweDUzMkYsIDB4NTMzMSwgMHg1MzMzLCAweDUzMzgsIDB4NTM0MCwgMHg1MzQ2LCAweDUzNDUsIDB4NEUxNywNCi0gICAgMHg1MzQ5LCAweDUzNEQsIDB4NTFENiwgMHg1MzVFLCAweDUzNjksIDB4NTM2RSwgMHg1OTE4LCAweDUzN0IsDQotICAgIDB4NTM3NywgMHg1MzgyLCAweDUzOTYsIDB4NTNBMCwgMHg1M0E2LCAweDUzQTUsIDB4NTNBRSwgMHg1M0IwLA0KLSAgICAweDUzQjYsIDB4NTNDMywgMHg3QzEyLCAweDk2RDksIDB4NTNERiwgMHg2NkZDLCAweDcxRUUsIDB4NTNFRSwNCi0gICAgMHg1M0U4LCAweDUzRUQsIDB4NTNGQSwgMHg1NDAxLCAweDU0M0QsIDB4NTQ0MCwgMHg1NDJDLCAweDU0MkQsDQotICAgIDB4NTQzQywgMHg1NDJFLCAweDU0MzYsIDB4NTQyOSwgMHg1NDFELCAweDU0NEUsIDB4NTQ4RiwgMHg1NDc1LA0KLSAgICAweDU0OEUsIDB4NTQ1RiwgMHg1NDcxLCAweDU0NzcsIDB4NTQ3MCwgMHg1NDkyLCAweDU0N0IsIDB4NTQ4MCwNCi0gICAgMHg1NDc2LCAweDU0ODQsIDB4NTQ5MCwgMHg1NDg2LCAweDU0QzcsIDB4NTRBMiwgMHg1NEI4LCAweDU0QTUsDQotICAgIDB4NTRBQywgMHg1NEM0LCAweDU0QzgsIDB4NTRBOCwgMHg1NEFCLCAweDU0QzIsIDB4NTRBNCwgMHg1NEJFLA0KLSAgICAweDU0QkMsIDB4NTREOCwgMHg1NEU1LCAweDU0RTYsIDB4NTUwRiwgMHg1NTE0LCAweDU0RkQsIDB4NTRFRSwNCi0gICAgMHg1NEVELCAweDU0RkEsIDB4NTRFMiwgMHg1NTM5LCAweDU1NDAsIDB4NTU2MywgMHg1NTRDLCAweDU1MkUsDQotICAgIDB4NTU1QywgMHg1NTQ1LCAweDU1NTYsIDB4NTU1NywgMHg1NTM4LCAweDU1MzMsIDB4NTU1RCwgMHg1NTk5LA0KLSAgICAweDU1ODAsIDB4NTRBRiwgMHg1NThBLCAweDU1OUYsIDB4NTU3QiwgMHg1NTdFLCAweDU1OTgsIDB4NTU5RSwNCi0gICAgMHg1NUFFLCAweDU1N0MsIDB4NTU4MywgMHg1NUE5LCAweDU1ODcsIDB4NTVBOCwgMHg1NURBLCAweDU1QzUsDQotICAgIDB4NTVERiwgMHg1NUM0LCAweDU1REMsIDB4NTVFNCwgMHg1NUQ0LCAweDU2MTQsIDB4NTVGNywgMHg1NjE2LA0KLSAgICAweDU1RkUsIDB4NTVGRCwgMHg1NjFCLCAweDU1RjksIDB4NTY0RSwgMHg1NjUwLCAweDcxREYsIDB4NTYzNCwNCi0gICAgMHg1NjM2LCAweDU2MzIsIDB4NTYzOCwgMHg1NjZCLCAweDU2NjQsIDB4NTYyRiwgMHg1NjZDLCAweDU2NkEsDQotICAgIDB4NTY4NiwgMHg1NjgwLCAweDU2OEEsIDB4NTZBMCwgMHg1Njk0LCAweDU2OEYsIDB4NTZBNSwgMHg1NkFFLA0KLSAgICAweDU2QjYsIDB4NTZCNCwgMHg1NkMyLCAweDU2QkMsIDB4NTZDMSwgMHg1NkMzLCAweDU2QzAsIDB4NTZDOCwNCi0gICAgMHg1NkNFLCAweDU2RDEsIDB4NTZEMywgMHg1NkQ3LCAweDU2RUUsIDB4NTZGOSwgMHg1NzAwLCAweDU2RkYsDQotICAgIDB4NTcwNCwgMHg1NzA5LCAweDU3MDgsIDB4NTcwQiwgMHg1NzBELCAweDU3MTMsIDB4NTcxOCwgMHg1NzE2LA0KLSAgICAweDU1QzcsIDB4NTcxQywgMHg1NzI2LCAweDU3MzcsIDB4NTczOCwgMHg1NzRFLCAweDU3M0IsIDB4NTc0MCwNCi0gICAgMHg1NzRGLCAweDU3NjksIDB4NTdDMCwgMHg1Nzg4LCAweDU3NjEsIDB4NTc3RiwgMHg1Nzg5LCAweDU3OTMsDQotICAgIDB4NTdBMCwgMHg1N0IzLCAweDU3QTQsIDB4NTdBQSwgMHg1N0IwLCAweDU3QzMsIDB4NTdDNiwgMHg1N0Q0LA0KLSAgICAweDU3RDIsIDB4NTdEMywgMHg1ODBBLCAweDU3RDYsIDB4NTdFMywgMHg1ODBCLCAweDU4MTksIDB4NTgxRCwNCi0gICAgMHg1ODcyLCAweDU4MjEsIDB4NTg2MiwgMHg1ODRCLCAweDU4NzAsIDB4NkJDMCwgMHg1ODUyLCAweDU4M0QsDQotICAgIDB4NTg3OSwgMHg1ODg1LCAweDU4QjksIDB4NTg5RiwgMHg1OEFCLCAweDU4QkEsIDB4NThERSwgMHg1OEJCLA0KLSAgICAweDU4QjgsIDB4NThBRSwgMHg1OEM1LCAweDU4RDMsIDB4NThEMSwgMHg1OEQ3LCAweDU4RDksIDB4NThEOCwNCi0gICAgMHg1OEU1LCAweDU4REMsIDB4NThFNCwgMHg1OERGLCAweDU4RUYsIDB4NThGQSwgMHg1OEY5LCAweDU4RkIsDQotICAgIDB4NThGQywgMHg1OEZELCAweDU5MDIsIDB4NTkwQSwgMHg1OTEwLCAweDU5MUIsIDB4NjhBNiwgMHg1OTI1LA0KLSAgICAweDU5MkMsIDB4NTkyRCwgMHg1OTMyLCAweDU5MzgsIDB4NTkzRSwgMHg3QUQyLCAweDU5NTUsIDB4NTk1MCwNCi0gICAgMHg1OTRFLCAweDU5NUEsIDB4NTk1OCwgMHg1OTYyLCAweDU5NjAsIDB4NTk2NywgMHg1OTZDLCAweDU5NjksDQotICAgIDB4NTk3OCwgMHg1OTgxLCAweDU5OUQsIDB4NEY1RSwgMHg0RkFCLCAweDU5QTMsIDB4NTlCMiwgMHg1OUM2LA0KLSAgICAweDU5RTgsIDB4NTlEQywgMHg1OThELCAweDU5RDksIDB4NTlEQSwgMHg1QTI1LCAweDVBMUYsIDB4NUExMSwNCi0gICAgMHg1QTFDLCAweDVBMDksIDB4NUExQSwgMHg1QTQwLCAweDVBNkMsIDB4NUE0OSwgMHg1QTM1LCAweDVBMzYsDQotICAgIDB4NUE2MiwgMHg1QTZBLCAweDVBOUEsIDB4NUFCQywgMHg1QUJFLCAweDVBQ0IsIDB4NUFDMiwgMHg1QUJELA0KLSAgICAweDVBRTMsIDB4NUFENywgMHg1QUU2LCAweDVBRTksIDB4NUFENiwgMHg1QUZBLCAweDVBRkIsIDB4NUIwQywNCi0gICAgMHg1QjBCLCAweDVCMTYsIDB4NUIzMiwgMHg1QUQwLCAweDVCMkEsIDB4NUIzNiwgMHg1QjNFLCAweDVCNDMsDQotICAgIDB4NUI0NSwgMHg1QjQwLCAweDVCNTEsIDB4NUI1NSwgMHg1QjVBLCAweDVCNUIsIDB4NUI2NSwgMHg1QjY5LA0KLSAgICAweDVCNzAsIDB4NUI3MywgMHg1Qjc1LCAweDVCNzgsIDB4NjU4OCwgMHg1QjdBLCAweDVCODAsIDB4NUI4MywNCi0gICAgMHg1QkE2LCAweDVCQjgsIDB4NUJDMywgMHg1QkM3LCAweDVCQzksIDB4NUJENCwgMHg1QkQwLCAweDVCRTQsDQotICAgIDB4NUJFNiwgMHg1QkUyLCAweDVCREUsIDB4NUJFNSwgMHg1QkVCLCAweDVCRjAsIDB4NUJGNiwgMHg1QkYzLA0KLSAgICAweDVDMDUsIDB4NUMwNywgMHg1QzA4LCAweDVDMEQsIDB4NUMxMywgMHg1QzIwLCAweDVDMjIsIDB4NUMyOCwNCi0gICAgMHg1QzM4LCAweDVDMzksIDB4NUM0MSwgMHg1QzQ2LCAweDVDNEUsIDB4NUM1MywgMHg1QzUwLCAweDVDNEYsDQotICAgIDB4NUI3MSwgMHg1QzZDLCAweDVDNkUsIDB4NEU2MiwgMHg1Qzc2LCAweDVDNzksIDB4NUM4QywgMHg1QzkxLA0KLSAgICAweDVDOTQsIDB4NTk5QiwgMHg1Q0FCLCAweDVDQkIsIDB4NUNCNiwgMHg1Q0JDLCAweDVDQjcsIDB4NUNDNSwNCi0gICAgMHg1Q0JFLCAweDVDQzcsIDB4NUNEOSwgMHg1Q0U5LCAweDVDRkQsIDB4NUNGQSwgMHg1Q0VELCAweDVEOEMsDQotICAgIDB4NUNFQSwgMHg1RDBCLCAweDVEMTUsIDB4NUQxNywgMHg1RDVDLCAweDVEMUYsIDB4NUQxQiwgMHg1RDExLA0KLSAgICAweDVEMTQsIDB4NUQyMiwgMHg1RDFBLCAweDVEMTksIDB4NUQxOCwgMHg1RDRDLCAweDVENTIsIDB4NUQ0RSwNCi0gICAgMHg1RDRCLCAweDVENkMsIDB4NUQ3MywgMHg1RDc2LCAweDVEODcsIDB4NUQ4NCwgMHg1RDgyLCAweDVEQTIsDQotICAgIDB4NUQ5RCwgMHg1REFDLCAweDVEQUUsIDB4NURCRCwgMHg1RDkwLCAweDVEQjcsIDB4NURCQywgMHg1REM5LA0KLSAgICAweDVEQ0QsIDB4NUREMywgMHg1REQyLCAweDVERDYsIDB4NUREQiwgMHg1REVCLCAweDVERjIsIDB4NURGNSwNCi0gICAgMHg1RTBCLCAweDVFMUEsIDB4NUUxOSwgMHg1RTExLCAweDVFMUIsIDB4NUUzNiwgMHg1RTM3LCAweDVFNDQsDQotICAgIDB4NUU0MywgMHg1RTQwLCAweDVFNEUsIDB4NUU1NywgMHg1RTU0LCAweDVFNUYsIDB4NUU2MiwgMHg1RTY0LA0KLSAgICAweDVFNDcsIDB4NUU3NSwgMHg1RTc2LCAweDVFN0EsIDB4OUVCQywgMHg1RTdGLCAweDVFQTAsIDB4NUVDMSwNCi0gICAgMHg1RUMyLCAweDVFQzgsIDB4NUVEMCwgMHg1RUNGLCAweDVFRDYsIDB4NUVFMywgMHg1RURELCAweDVFREEsDQotICAgIDB4NUVEQiwgMHg1RUUyLCAweDVFRTEsIDB4NUVFOCwgMHg1RUU5LCAweDVFRUMsIDB4NUVGMSwgMHg1RUYzLA0KLSAgICAweDVFRjAsIDB4NUVGNCwgMHg1RUY4LCAweDVFRkUsIDB4NUYwMywgMHg1RjA5LCAweDVGNUQsIDB4NUY1QywNCi0gICAgMHg1RjBCLCAweDVGMTEsIDB4NUYxNiwgMHg1RjI5LCAweDVGMkQsIDB4NUYzOCwgMHg1RjQxLCAweDVGNDgsDQotICAgIDB4NUY0QywgMHg1RjRFLCAweDVGMkYsIDB4NUY1MSwgMHg1RjU2LCAweDVGNTcsIDB4NUY1OSwgMHg1RjYxLA0KLSAgICAweDVGNkQsIDB4NUY3MywgMHg1Rjc3LCAweDVGODMsIDB4NUY4MiwgMHg1RjdGLCAweDVGOEEsIDB4NUY4OCwNCi0gICAgMHg1RjkxLCAweDVGODcsIDB4NUY5RSwgMHg1Rjk5LCAweDVGOTgsIDB4NUZBMCwgMHg1RkE4LCAweDVGQUQsDQotICAgIDB4NUZCQywgMHg1RkQ2LCAweDVGRkIsIDB4NUZFNCwgMHg1RkY4LCAweDVGRjEsIDB4NUZERCwgMHg2MEIzLA0KLSAgICAweDVGRkYsIDB4NjAyMSwgMHg2MDYwLCAweDYwMTksIDB4NjAxMCwgMHg2MDI5LCAweDYwMEUsIDB4NjAzMSwNCi0gICAgMHg2MDFCLCAweDYwMTUsIDB4NjAyQiwgMHg2MDI2LCAweDYwMEYsIDB4NjAzQSwgMHg2MDVBLCAweDYwNDEsDQotICAgIDB4NjA2QSwgMHg2MDc3LCAweDYwNUYsIDB4NjA0QSwgMHg2MDQ2LCAweDYwNEQsIDB4NjA2MywgMHg2MDQzLA0KLSAgICAweDYwNjQsIDB4NjA0MiwgMHg2MDZDLCAweDYwNkIsIDB4NjA1OSwgMHg2MDgxLCAweDYwOEQsIDB4NjBFNywNCi0gICAgMHg2MDgzLCAweDYwOUEsIDB4NjA4NCwgMHg2MDlCLCAweDYwOTYsIDB4NjA5NywgMHg2MDkyLCAweDYwQTcsDQotICAgIDB4NjA4QiwgMHg2MEUxLCAweDYwQjgsIDB4NjBFMCwgMHg2MEQzLCAweDYwQjQsIDB4NUZGMCwgMHg2MEJELA0KLSAgICAweDYwQzYsIDB4NjBCNSwgMHg2MEQ4LCAweDYxNEQsIDB4NjExNSwgMHg2MTA2LCAweDYwRjYsIDB4NjBGNywNCi0gICAgMHg2MTAwLCAweDYwRjQsIDB4NjBGQSwgMHg2MTAzLCAweDYxMjEsIDB4NjBGQiwgMHg2MEYxLCAweDYxMEQsDQotICAgIDB4NjEwRSwgMHg2MTQ3LCAweDYxM0UsIDB4NjEyOCwgMHg2MTI3LCAweDYxNEEsIDB4NjEzRiwgMHg2MTNDLA0KLSAgICAweDYxMkMsIDB4NjEzNCwgMHg2MTNELCAweDYxNDIsIDB4NjE0NCwgMHg2MTczLCAweDYxNzcsIDB4NjE1OCwNCi0gICAgMHg2MTU5LCAweDYxNUEsIDB4NjE2QiwgMHg2MTc0LCAweDYxNkYsIDB4NjE2NSwgMHg2MTcxLCAweDYxNUYsDQotICAgIDB4NjE1RCwgMHg2MTUzLCAweDYxNzUsIDB4NjE5OSwgMHg2MTk2LCAweDYxODcsIDB4NjFBQywgMHg2MTk0LA0KLSAgICAweDYxOUEsIDB4NjE4QSwgMHg2MTkxLCAweDYxQUIsIDB4NjFBRSwgMHg2MUNDLCAweDYxQ0EsIDB4NjFDOSwNCi0gICAgMHg2MUY3LCAweDYxQzgsIDB4NjFDMywgMHg2MUM2LCAweDYxQkEsIDB4NjFDQiwgMHg3Rjc5LCAweDYxQ0QsDQotICAgIDB4NjFFNiwgMHg2MUUzLCAweDYxRjYsIDB4NjFGQSwgMHg2MUY0LCAweDYxRkYsIDB4NjFGRCwgMHg2MUZDLA0KLSAgICAweDYxRkUsIDB4NjIwMCwgMHg2MjA4LCAweDYyMDksIDB4NjIwRCwgMHg2MjBDLCAweDYyMTQsIDB4NjIxQiwNCi0gICAgMHg2MjFFLCAweDYyMjEsIDB4NjIyQSwgMHg2MjJFLCAweDYyMzAsIDB4NjIzMiwgMHg2MjMzLCAweDYyNDEsDQotICAgIDB4NjI0RSwgMHg2MjVFLCAweDYyNjMsIDB4NjI1QiwgMHg2MjYwLCAweDYyNjgsIDB4NjI3QywgMHg2MjgyLA0KLSAgICAweDYyODksIDB4NjI3RSwgMHg2MjkyLCAweDYyOTMsIDB4NjI5NiwgMHg2MkQ0LCAweDYyODMsIDB4NjI5NCwNCi0gICAgMHg2MkQ3LCAweDYyRDEsIDB4NjJCQiwgMHg2MkNGLCAweDYyRkYsIDB4NjJDNiwgMHg2NEQ0LCAweDYyQzgsDQotICAgIDB4NjJEQywgMHg2MkNDLCAweDYyQ0EsIDB4NjJDMiwgMHg2MkM3LCAweDYyOUIsIDB4NjJDOSwgMHg2MzBDLA0KLSAgICAweDYyRUUsIDB4NjJGMSwgMHg2MzI3LCAweDYzMDIsIDB4NjMwOCwgMHg2MkVGLCAweDYyRjUsIDB4NjM1MCwNCi0gICAgMHg2MzNFLCAweDYzNEQsIDB4NjQxQywgMHg2MzRGLCAweDYzOTYsIDB4NjM4RSwgMHg2MzgwLCAweDYzQUIsDQotICAgIDB4NjM3NiwgMHg2M0EzLCAweDYzOEYsIDB4NjM4OSwgMHg2MzlGLCAweDYzQjUsIDB4NjM2QiwgMHg2MzY5LA0KLSAgICAweDYzQkUsIDB4NjNFOSwgMHg2M0MwLCAweDYzQzYsIDB4NjNFMywgMHg2M0M5LCAweDYzRDIsIDB4NjNGNiwNCi0gICAgMHg2M0M0LCAweDY0MTYsIDB4NjQzNCwgMHg2NDA2LCAweDY0MTMsIDB4NjQyNiwgMHg2NDM2LCAweDY1MUQsDQotICAgIDB4NjQxNywgMHg2NDI4LCAweDY0MEYsIDB4NjQ2NywgMHg2NDZGLCAweDY0NzYsIDB4NjQ0RSwgMHg2NTJBLA0KLSAgICAweDY0OTUsIDB4NjQ5MywgMHg2NEE1LCAweDY0QTksIDB4NjQ4OCwgMHg2NEJDLCAweDY0REEsIDB4NjREMiwNCi0gICAgMHg2NEM1LCAweDY0QzcsIDB4NjRCQiwgMHg2NEQ4LCAweDY0QzIsIDB4NjRGMSwgMHg2NEU3LCAweDgyMDksDQotICAgIDB4NjRFMCwgMHg2NEUxLCAweDYyQUMsIDB4NjRFMywgMHg2NEVGLCAweDY1MkMsIDB4NjRGNiwgMHg2NEY0LA0KLSAgICAweDY0RjIsIDB4NjRGQSwgMHg2NTAwLCAweDY0RkQsIDB4NjUxOCwgMHg2NTFDLCAweDY1MDUsIDB4NjUyNCwNCi0gICAgMHg2NTIzLCAweDY1MkIsIDB4NjUzNCwgMHg2NTM1LCAweDY1MzcsIDB4NjUzNiwgMHg2NTM4LCAweDc1NEIsDQotICAgIDB4NjU0OCwgMHg2NTU2LCAweDY1NTUsIDB4NjU0RCwgMHg2NTU4LCAweDY1NUUsIDB4NjU1RCwgMHg2NTcyLA0KLSAgICAweDY1NzgsIDB4NjU4MiwgMHg2NTgzLCAweDhCOEEsIDB4NjU5QiwgMHg2NTlGLCAweDY1QUIsIDB4NjVCNywNCi0gICAgMHg2NUMzLCAweDY1QzYsIDB4NjVDMSwgMHg2NUM0LCAweDY1Q0MsIDB4NjVEMiwgMHg2NURCLCAweDY1RDksDQotICAgIDB4NjVFMCwgMHg2NUUxLCAweDY1RjEsIDB4Njc3MiwgMHg2NjBBLCAweDY2MDMsIDB4NjVGQiwgMHg2NzczLA0KLSAgICAweDY2MzUsIDB4NjYzNiwgMHg2NjM0LCAweDY2MUMsIDB4NjY0RiwgMHg2NjQ0LCAweDY2NDksIDB4NjY0MSwNCi0gICAgMHg2NjVFLCAweDY2NUQsIDB4NjY2NCwgMHg2NjY3LCAweDY2NjgsIDB4NjY1RiwgMHg2NjYyLCAweDY2NzAsDQotICAgIDB4NjY4MywgMHg2Njg4LCAweDY2OEUsIDB4NjY4OSwgMHg2Njg0LCAweDY2OTgsIDB4NjY5RCwgMHg2NkMxLA0KLSAgICAweDY2QjksIDB4NjZDOSwgMHg2NkJFLCAweDY2QkMsIDB4NjZDNCwgMHg2NkI4LCAweDY2RDYsIDB4NjZEQSwNCi0gICAgMHg2NkUwLCAweDY2M0YsIDB4NjZFNiwgMHg2NkU5LCAweDY2RjAsIDB4NjZGNSwgMHg2NkY3LCAweDY3MEYsDQotICAgIDB4NjcxNiwgMHg2NzFFLCAweDY3MjYsIDB4NjcyNywgMHg5NzM4LCAweDY3MkUsIDB4NjczRiwgMHg2NzM2LA0KLSAgICAweDY3NDEsIDB4NjczOCwgMHg2NzM3LCAweDY3NDYsIDB4Njc1RSwgMHg2NzYwLCAweDY3NTksIDB4Njc2MywNCi0gICAgMHg2NzY0LCAweDY3ODksIDB4Njc3MCwgMHg2N0E5LCAweDY3N0MsIDB4Njc2QSwgMHg2NzhDLCAweDY3OEIsDQotICAgIDB4NjdBNiwgMHg2N0ExLCAweDY3ODUsIDB4NjdCNywgMHg2N0VGLCAweDY3QjQsIDB4NjdFQywgMHg2N0IzLA0KLSAgICAweDY3RTksIDB4NjdCOCwgMHg2N0U0LCAweDY3REUsIDB4NjdERCwgMHg2N0UyLCAweDY3RUUsIDB4NjdCOSwNCi0gICAgMHg2N0NFLCAweDY3QzYsIDB4NjdFNywgMHg2QTlDLCAweDY4MUUsIDB4Njg0NiwgMHg2ODI5LCAweDY4NDAsDQotICAgIDB4Njg0RCwgMHg2ODMyLCAweDY4NEUsIDB4NjhCMywgMHg2ODJCLCAweDY4NTksIDB4Njg2MywgMHg2ODc3LA0KLSAgICAweDY4N0YsIDB4Njg5RiwgMHg2ODhGLCAweDY4QUQsIDB4Njg5NCwgMHg2ODlELCAweDY4OUIsIDB4Njg4MywNCi0gICAgMHg2QUFFLCAweDY4QjksIDB4Njg3NCwgMHg2OEI1LCAweDY4QTAsIDB4NjhCQSwgMHg2OTBGLCAweDY4OEQsDQotICAgIDB4Njg3RSwgMHg2OTAxLCAweDY4Q0EsIDB4NjkwOCwgMHg2OEQ4LCAweDY5MjIsIDB4NjkyNiwgMHg2OEUxLA0KLSAgICAweDY5MEMsIDB4NjhDRCwgMHg2OEQ0LCAweDY4RTcsIDB4NjhENSwgMHg2OTM2LCAweDY5MTIsIDB4NjkwNCwNCi0gICAgMHg2OEQ3LCAweDY4RTMsIDB4NjkyNSwgMHg2OEY5LCAweDY4RTAsIDB4NjhFRiwgMHg2OTI4LCAweDY5MkEsDQotICAgIDB4NjkxQSwgMHg2OTIzLCAweDY5MjEsIDB4NjhDNiwgMHg2OTc5LCAweDY5NzcsIDB4Njk1QywgMHg2OTc4LA0KLSAgICAweDY5NkIsIDB4Njk1NCwgMHg2OTdFLCAweDY5NkUsIDB4NjkzOSwgMHg2OTc0LCAweDY5M0QsIDB4Njk1OSwNCi0gICAgMHg2OTMwLCAweDY5NjEsIDB4Njk1RSwgMHg2OTVELCAweDY5ODEsIDB4Njk2QSwgMHg2OUIyLCAweDY5QUUsDQotICAgIDB4NjlEMCwgMHg2OUJGLCAweDY5QzEsIDB4NjlEMywgMHg2OUJFLCAweDY5Q0UsIDB4NUJFOCwgMHg2OUNBLA0KLSAgICAweDY5REQsIDB4NjlCQiwgMHg2OUMzLCAweDY5QTcsIDB4NkEyRSwgMHg2OTkxLCAweDY5QTAsIDB4Njk5QywNCi0gICAgMHg2OTk1LCAweDY5QjQsIDB4NjlERSwgMHg2OUU4LCAweDZBMDIsIDB4NkExQiwgMHg2OUZGLCAweDZCMEEsDQotICAgIDB4NjlGOSwgMHg2OUYyLCAweDY5RTcsIDB4NkEwNSwgMHg2OUIxLCAweDZBMUUsIDB4NjlFRCwgMHg2QTE0LA0KLSAgICAweDY5RUIsIDB4NkEwQSwgMHg2QTEyLCAweDZBQzEsIDB4NkEyMywgMHg2QTEzLCAweDZBNDQsIDB4NkEwQywNCi0gICAgMHg2QTcyLCAweDZBMzYsIDB4NkE3OCwgMHg2QTQ3LCAweDZBNjIsIDB4NkE1OSwgMHg2QTY2LCAweDZBNDgsDQotICAgIDB4NkEzOCwgMHg2QTIyLCAweDZBOTAsIDB4NkE4RCwgMHg2QUEwLCAweDZBODQsIDB4NkFBMiwgMHg2QUEzLA0KLSAgICAweDZBOTcsIDB4ODYxNywgMHg2QUJCLCAweDZBQzMsIDB4NkFDMiwgMHg2QUI4LCAweDZBQjMsIDB4NkFBQywNCi0gICAgMHg2QURFLCAweDZBRDEsIDB4NkFERiwgMHg2QUFBLCAweDZBREEsIDB4NkFFQSwgMHg2QUZCLCAweDZCMDUsDQotICAgIDB4ODYxNiwgMHg2QUZBLCAweDZCMTIsIDB4NkIxNiwgMHg5QjMxLCAweDZCMUYsIDB4NkIzOCwgMHg2QjM3LA0KLSAgICAweDc2REMsIDB4NkIzOSwgMHg5OEVFLCAweDZCNDcsIDB4NkI0MywgMHg2QjQ5LCAweDZCNTAsIDB4NkI1OSwNCi0gICAgMHg2QjU0LCAweDZCNUIsIDB4NkI1RiwgMHg2QjYxLCAweDZCNzgsIDB4NkI3OSwgMHg2QjdGLCAweDZCODAsDQotICAgIDB4NkI4NCwgMHg2QjgzLCAweDZCOEQsIDB4NkI5OCwgMHg2Qjk1LCAweDZCOUUsIDB4NkJBNCwgMHg2QkFBLA0KLSAgICAweDZCQUIsIDB4NkJBRiwgMHg2QkIyLCAweDZCQjEsIDB4NkJCMywgMHg2QkI3LCAweDZCQkMsIDB4NkJDNiwNCi0gICAgMHg2QkNCLCAweDZCRDMsIDB4NkJERiwgMHg2QkVDLCAweDZCRUIsIDB4NkJGMywgMHg2QkVGLCAweDlFQkUsDQotICAgIDB4NkMwOCwgMHg2QzEzLCAweDZDMTQsIDB4NkMxQiwgMHg2QzI0LCAweDZDMjMsIDB4NkM1RSwgMHg2QzU1LA0KLSAgICAweDZDNjIsIDB4NkM2QSwgMHg2QzgyLCAweDZDOEQsIDB4NkM5QSwgMHg2QzgxLCAweDZDOUIsIDB4NkM3RSwNCi0gICAgMHg2QzY4LCAweDZDNzMsIDB4NkM5MiwgMHg2QzkwLCAweDZDQzQsIDB4NkNGMSwgMHg2Q0QzLCAweDZDQkQsDQotICAgIDB4NkNENywgMHg2Q0M1LCAweDZDREQsIDB4NkNBRSwgMHg2Q0IxLCAweDZDQkUsIDB4NkNCQSwgMHg2Q0RCLA0KLSAgICAweDZDRUYsIDB4NkNEOSwgMHg2Q0VBLCAweDZEMUYsIDB4ODg0RCwgMHg2RDM2LCAweDZEMkIsIDB4NkQzRCwNCi0gICAgMHg2RDM4LCAweDZEMTksIDB4NkQzNSwgMHg2RDMzLCAweDZEMTIsIDB4NkQwQywgMHg2RDYzLCAweDZEOTMsDQotICAgIDB4NkQ2NCwgMHg2RDVBLCAweDZENzksIDB4NkQ1OSwgMHg2RDhFLCAweDZEOTUsIDB4NkZFNCwgMHg2RDg1LA0KLSAgICAweDZERjksIDB4NkUxNSwgMHg2RTBBLCAweDZEQjUsIDB4NkRDNywgMHg2REU2LCAweDZEQjgsIDB4NkRDNiwNCi0gICAgMHg2REVDLCAweDZEREUsIDB4NkRDQywgMHg2REU4LCAweDZERDIsIDB4NkRDNSwgMHg2REZBLCAweDZERDksDQotICAgIDB4NkRFNCwgMHg2REQ1LCAweDZERUEsIDB4NkRFRSwgMHg2RTJELCAweDZFNkUsIDB4NkUyRSwgMHg2RTE5LA0KLSAgICAweDZFNzIsIDB4NkU1RiwgMHg2RTNFLCAweDZFMjMsIDB4NkU2QiwgMHg2RTJCLCAweDZFNzYsIDB4NkU0RCwNCi0gICAgMHg2RTFGLCAweDZFNDMsIDB4NkUzQSwgMHg2RTRFLCAweDZFMjQsIDB4NkVGRiwgMHg2RTFELCAweDZFMzgsDQotICAgIDB4NkU4MiwgMHg2RUFBLCAweDZFOTgsIDB4NkVDOSwgMHg2RUI3LCAweDZFRDMsIDB4NkVCRCwgMHg2RUFGLA0KLSAgICAweDZFQzQsIDB4NkVCMiwgMHg2RUQ0LCAweDZFRDUsIDB4NkU4RiwgMHg2RUE1LCAweDZFQzIsIDB4NkU5RiwNCi0gICAgMHg2RjQxLCAweDZGMTEsIDB4NzA0QywgMHg2RUVDLCAweDZFRjgsIDB4NkVGRSwgMHg2RjNGLCAweDZFRjIsDQotICAgIDB4NkYzMSwgMHg2RUVGLCAweDZGMzIsIDB4NkVDQywgMHg2RjNFLCAweDZGMTMsIDB4NkVGNywgMHg2Rjg2LA0KLSAgICAweDZGN0EsIDB4NkY3OCwgMHg2RjgxLCAweDZGODAsIDB4NkY2RiwgMHg2RjVCLCAweDZGRjMsIDB4NkY2RCwNCi0gICAgMHg2RjgyLCAweDZGN0MsIDB4NkY1OCwgMHg2RjhFLCAweDZGOTEsIDB4NkZDMiwgMHg2RjY2LCAweDZGQjMsDQotICAgIDB4NkZBMywgMHg2RkExLCAweDZGQTQsIDB4NkZCOSwgMHg2RkM2LCAweDZGQUEsIDB4NkZERiwgMHg2RkQ1LA0KLSAgICAweDZGRUMsIDB4NkZENCwgMHg2RkQ4LCAweDZGRjEsIDB4NkZFRSwgMHg2RkRCLCAweDcwMDksIDB4NzAwQiwNCi0gICAgMHg2RkZBLCAweDcwMTEsIDB4NzAwMSwgMHg3MDBGLCAweDZGRkUsIDB4NzAxQiwgMHg3MDFBLCAweDZGNzQsDQotICAgIDB4NzAxRCwgMHg3MDE4LCAweDcwMUYsIDB4NzAzMCwgMHg3MDNFLCAweDcwMzIsIDB4NzA1MSwgMHg3MDYzLA0KLSAgICAweDcwOTksIDB4NzA5MiwgMHg3MEFGLCAweDcwRjEsIDB4NzBBQywgMHg3MEI4LCAweDcwQjMsIDB4NzBBRSwNCi0gICAgMHg3MERGLCAweDcwQ0IsIDB4NzBERCwgMHg3MEQ5LCAweDcxMDksIDB4NzBGRCwgMHg3MTFDLCAweDcxMTksDQotICAgIDB4NzE2NSwgMHg3MTU1LCAweDcxODgsIDB4NzE2NiwgMHg3MTYyLCAweDcxNEMsIDB4NzE1NiwgMHg3MTZDLA0KLSAgICAweDcxOEYsIDB4NzFGQiwgMHg3MTg0LCAweDcxOTUsIDB4NzFBOCwgMHg3MUFDLCAweDcxRDcsIDB4NzFCOSwNCi0gICAgMHg3MUJFLCAweDcxRDIsIDB4NzFDOSwgMHg3MUQ0LCAweDcxQ0UsIDB4NzFFMCwgMHg3MUVDLCAweDcxRTcsDQotICAgIDB4NzFGNSwgMHg3MUZDLCAweDcxRjksIDB4NzFGRiwgMHg3MjBELCAweDcyMTAsIDB4NzIxQiwgMHg3MjI4LA0KLSAgICAweDcyMkQsIDB4NzIyQywgMHg3MjMwLCAweDcyMzIsIDB4NzIzQiwgMHg3MjNDLCAweDcyM0YsIDB4NzI0MCwNCi0gICAgMHg3MjQ2LCAweDcyNEIsIDB4NzI1OCwgMHg3Mjc0LCAweDcyN0UsIDB4NzI4MiwgMHg3MjgxLCAweDcyODcsDQotICAgIDB4NzI5MiwgMHg3Mjk2LCAweDcyQTIsIDB4NzJBNywgMHg3MkI5LCAweDcyQjIsIDB4NzJDMywgMHg3MkM2LA0KLSAgICAweDcyQzQsIDB4NzJDRSwgMHg3MkQyLCAweDcyRTIsIDB4NzJFMCwgMHg3MkUxLCAweDcyRjksIDB4NzJGNywNCi0gICAgMHg1MDBGLCAweDczMTcsIDB4NzMwQSwgMHg3MzFDLCAweDczMTYsIDB4NzMxRCwgMHg3MzM0LCAweDczMkYsDQotICAgIDB4NzMyOSwgMHg3MzI1LCAweDczM0UsIDB4NzM0RSwgMHg3MzRGLCAweDlFRDgsIDB4NzM1NywgMHg3MzZBLA0KLSAgICAweDczNjgsIDB4NzM3MCwgMHg3Mzc4LCAweDczNzUsIDB4NzM3QiwgMHg3MzdBLCAweDczQzgsIDB4NzNCMywNCi0gICAgMHg3M0NFLCAweDczQkIsIDB4NzNDMCwgMHg3M0U1LCAweDczRUUsIDB4NzNERSwgMHg3NEEyLCAweDc0MDUsDQotICAgIDB4NzQ2RiwgMHg3NDI1LCAweDczRjgsIDB4NzQzMiwgMHg3NDNBLCAweDc0NTUsIDB4NzQzRiwgMHg3NDVGLA0KLSAgICAweDc0NTksIDB4NzQ0MSwgMHg3NDVDLCAweDc0NjksIDB4NzQ3MCwgMHg3NDYzLCAweDc0NkEsIDB4NzQ3NiwNCi0gICAgMHg3NDdFLCAweDc0OEIsIDB4NzQ5RSwgMHg3NEE3LCAweDc0Q0EsIDB4NzRDRiwgMHg3NEQ0LCAweDczRjEsDQotICAgIDB4NzRFMCwgMHg3NEUzLCAweDc0RTcsIDB4NzRFOSwgMHg3NEVFLCAweDc0RjIsIDB4NzRGMCwgMHg3NEYxLA0KLSAgICAweDc0RjgsIDB4NzRGNywgMHg3NTA0LCAweDc1MDMsIDB4NzUwNSwgMHg3NTBDLCAweDc1MEUsIDB4NzUwRCwNCi0gICAgMHg3NTE1LCAweDc1MTMsIDB4NzUxRSwgMHg3NTI2LCAweDc1MkMsIDB4NzUzQywgMHg3NTQ0LCAweDc1NEQsDQotICAgIDB4NzU0QSwgMHg3NTQ5LCAweDc1NUIsIDB4NzU0NiwgMHg3NTVBLCAweDc1NjksIDB4NzU2NCwgMHg3NTY3LA0KLSAgICAweDc1NkIsIDB4NzU2RCwgMHg3NTc4LCAweDc1NzYsIDB4NzU4NiwgMHg3NTg3LCAweDc1NzQsIDB4NzU4QSwNCi0gICAgMHg3NTg5LCAweDc1ODIsIDB4NzU5NCwgMHg3NTlBLCAweDc1OUQsIDB4NzVBNSwgMHg3NUEzLCAweDc1QzIsDQotICAgIDB4NzVCMywgMHg3NUMzLCAweDc1QjUsIDB4NzVCRCwgMHg3NUI4LCAweDc1QkMsIDB4NzVCMSwgMHg3NUNELA0KLSAgICAweDc1Q0EsIDB4NzVEMiwgMHg3NUQ5LCAweDc1RTMsIDB4NzVERSwgMHg3NUZFLCAweDc1RkYsIDB4NzVGQywNCi0gICAgMHg3NjAxLCAweDc1RjAsIDB4NzVGQSwgMHg3NUYyLCAweDc1RjMsIDB4NzYwQiwgMHg3NjBELCAweDc2MDksDQotICAgIDB4NzYxRiwgMHg3NjI3LCAweDc2MjAsIDB4NzYyMSwgMHg3NjIyLCAweDc2MjQsIDB4NzYzNCwgMHg3NjMwLA0KLSAgICAweDc2M0IsIDB4NzY0NywgMHg3NjQ4LCAweDc2NDYsIDB4NzY1QywgMHg3NjU4LCAweDc2NjEsIDB4NzY2MiwNCi0gICAgMHg3NjY4LCAweDc2NjksIDB4NzY2QSwgMHg3NjY3LCAweDc2NkMsIDB4NzY3MCwgMHg3NjcyLCAweDc2NzYsDQotICAgIDB4NzY3OCwgMHg3NjdDLCAweDc2ODAsIDB4NzY4MywgMHg3Njg4LCAweDc2OEIsIDB4NzY4RSwgMHg3Njk2LA0KLSAgICAweDc2OTMsIDB4NzY5OSwgMHg3NjlBLCAweDc2QjAsIDB4NzZCNCwgMHg3NkI4LCAweDc2QjksIDB4NzZCQSwNCi0gICAgMHg3NkMyLCAweDc2Q0QsIDB4NzZENiwgMHg3NkQyLCAweDc2REUsIDB4NzZFMSwgMHg3NkU1LCAweDc2RTcsDQotICAgIDB4NzZFQSwgMHg4NjJGLCAweDc2RkIsIDB4NzcwOCwgMHg3NzA3LCAweDc3MDQsIDB4NzcyOSwgMHg3NzI0LA0KLSAgICAweDc3MUUsIDB4NzcyNSwgMHg3NzI2LCAweDc3MUIsIDB4NzczNywgMHg3NzM4LCAweDc3NDcsIDB4Nzc1QSwNCi0gICAgMHg3NzY4LCAweDc3NkIsIDB4Nzc1QiwgMHg3NzY1LCAweDc3N0YsIDB4Nzc3RSwgMHg3Nzc5LCAweDc3OEUsDQotICAgIDB4Nzc4QiwgMHg3NzkxLCAweDc3QTAsIDB4Nzc5RSwgMHg3N0IwLCAweDc3QjYsIDB4NzdCOSwgMHg3N0JGLA0KLSAgICAweDc3QkMsIDB4NzdCRCwgMHg3N0JCLCAweDc3QzcsIDB4NzdDRCwgMHg3N0Q3LCAweDc3REEsIDB4NzdEQywNCi0gICAgMHg3N0UzLCAweDc3RUUsIDB4NzdGQywgMHg3ODBDLCAweDc4MTIsIDB4NzkyNiwgMHg3ODIwLCAweDc5MkEsDQotICAgIDB4Nzg0NSwgMHg3ODhFLCAweDc4NzQsIDB4Nzg4NiwgMHg3ODdDLCAweDc4OUEsIDB4Nzg4QywgMHg3OEEzLA0KLSAgICAweDc4QjUsIDB4NzhBQSwgMHg3OEFGLCAweDc4RDEsIDB4NzhDNiwgMHg3OENCLCAweDc4RDQsIDB4NzhCRSwNCi0gICAgMHg3OEJDLCAweDc4QzUsIDB4NzhDQSwgMHg3OEVDLCAweDc4RTcsIDB4NzhEQSwgMHg3OEZELCAweDc4RjQsDQotICAgIDB4NzkwNywgMHg3OTEyLCAweDc5MTEsIDB4NzkxOSwgMHg3OTJDLCAweDc5MkIsIDB4Nzk0MCwgMHg3OTYwLA0KLSAgICAweDc5NTcsIDB4Nzk1RiwgMHg3OTVBLCAweDc5NTUsIDB4Nzk1MywgMHg3OTdBLCAweDc5N0YsIDB4Nzk4QSwNCi0gICAgMHg3OTlELCAweDc5QTcsIDB4OUY0QiwgMHg3OUFBLCAweDc5QUUsIDB4NzlCMywgMHg3OUI5LCAweDc5QkEsDQotICAgIDB4NzlDOSwgMHg3OUQ1LCAweDc5RTcsIDB4NzlFQywgMHg3OUUxLCAweDc5RTMsIDB4N0EwOCwgMHg3QTBELA0KLSAgICAweDdBMTgsIDB4N0ExOSwgMHg3QTIwLCAweDdBMUYsIDB4Nzk4MCwgMHg3QTMxLCAweDdBM0IsIDB4N0EzRSwNCi0gICAgMHg3QTM3LCAweDdBNDMsIDB4N0E1NywgMHg3QTQ5LCAweDdBNjEsIDB4N0E2MiwgMHg3QTY5LCAweDlGOUQsDQotICAgIDB4N0E3MCwgMHg3QTc5LCAweDdBN0QsIDB4N0E4OCwgMHg3QTk3LCAweDdBOTUsIDB4N0E5OCwgMHg3QTk2LA0KLSAgICAweDdBQTksIDB4N0FDOCwgMHg3QUIwLCAweDdBQjYsIDB4N0FDNSwgMHg3QUM0LCAweDdBQkYsIDB4OTA4MywNCi0gICAgMHg3QUM3LCAweDdBQ0EsIDB4N0FDRCwgMHg3QUNGLCAweDdBRDUsIDB4N0FEMywgMHg3QUQ5LCAweDdBREEsDQotICAgIDB4N0FERCwgMHg3QUUxLCAweDdBRTIsIDB4N0FFNiwgMHg3QUVELCAweDdBRjAsIDB4N0IwMiwgMHg3QjBGLA0KLSAgICAweDdCMEEsIDB4N0IwNiwgMHg3QjMzLCAweDdCMTgsIDB4N0IxOSwgMHg3QjFFLCAweDdCMzUsIDB4N0IyOCwNCi0gICAgMHg3QjM2LCAweDdCNTAsIDB4N0I3QSwgMHg3QjA0LCAweDdCNEQsIDB4N0IwQiwgMHg3QjRDLCAweDdCNDUsDQotICAgIDB4N0I3NSwgMHg3QjY1LCAweDdCNzQsIDB4N0I2NywgMHg3QjcwLCAweDdCNzEsIDB4N0I2QywgMHg3QjZFLA0KLSAgICAweDdCOUQsIDB4N0I5OCwgMHg3QjlGLCAweDdCOEQsIDB4N0I5QywgMHg3QjlBLCAweDdCOEIsIDB4N0I5MiwNCi0gICAgMHg3QjhGLCAweDdCNUQsIDB4N0I5OSwgMHg3QkNCLCAweDdCQzEsIDB4N0JDQywgMHg3QkNGLCAweDdCQjQsDQotICAgIDB4N0JDNiwgMHg3QkRELCAweDdCRTksIDB4N0MxMSwgMHg3QzE0LCAweDdCRTYsIDB4N0JFNSwgMHg3QzYwLA0KLSAgICAweDdDMDAsIDB4N0MwNywgMHg3QzEzLCAweDdCRjMsIDB4N0JGNywgMHg3QzE3LCAweDdDMEQsIDB4N0JGNiwNCi0gICAgMHg3QzIzLCAweDdDMjcsIDB4N0MyQSwgMHg3QzFGLCAweDdDMzcsIDB4N0MyQiwgMHg3QzNELCAweDdDNEMsDQotICAgIDB4N0M0MywgMHg3QzU0LCAweDdDNEYsIDB4N0M0MCwgMHg3QzUwLCAweDdDNTgsIDB4N0M1RiwgMHg3QzY0LA0KLSAgICAweDdDNTYsIDB4N0M2NSwgMHg3QzZDLCAweDdDNzUsIDB4N0M4MywgMHg3QzkwLCAweDdDQTQsIDB4N0NBRCwNCi0gICAgMHg3Q0EyLCAweDdDQUIsIDB4N0NBMSwgMHg3Q0E4LCAweDdDQjMsIDB4N0NCMiwgMHg3Q0IxLCAweDdDQUUsDQotICAgIDB4N0NCOSwgMHg3Q0JELCAweDdDQzAsIDB4N0NDNSwgMHg3Q0MyLCAweDdDRDgsIDB4N0NEMiwgMHg3Q0RDLA0KLSAgICAweDdDRTIsIDB4OUIzQiwgMHg3Q0VGLCAweDdDRjIsIDB4N0NGNCwgMHg3Q0Y2LCAweDdDRkEsIDB4N0QwNiwNCi0gICAgMHg3RDAyLCAweDdEMUMsIDB4N0QxNSwgMHg3RDBBLCAweDdENDUsIDB4N0Q0QiwgMHg3RDJFLCAweDdEMzIsDQotICAgIDB4N0QzRiwgMHg3RDM1LCAweDdENDYsIDB4N0Q3MywgMHg3RDU2LCAweDdENEUsIDB4N0Q3MiwgMHg3RDY4LA0KLSAgICAweDdENkUsIDB4N0Q0RiwgMHg3RDYzLCAweDdEOTMsIDB4N0Q4OSwgMHg3RDVCLCAweDdEOEYsIDB4N0Q3RCwNCi0gICAgMHg3RDlCLCAweDdEQkEsIDB4N0RBRSwgMHg3REEzLCAweDdEQjUsIDB4N0RDNywgMHg3REJELCAweDdEQUIsDQotICAgIDB4N0UzRCwgMHg3REEyLCAweDdEQUYsIDB4N0REQywgMHg3REI4LCAweDdEOUYsIDB4N0RCMCwgMHg3REQ4LA0KLSAgICAweDdEREQsIDB4N0RFNCwgMHg3RERFLCAweDdERkIsIDB4N0RGMiwgMHg3REUxLCAweDdFMDUsIDB4N0UwQSwNCi0gICAgMHg3RTIzLCAweDdFMjEsIDB4N0UxMiwgMHg3RTMxLCAweDdFMUYsIDB4N0UwOSwgMHg3RTBCLCAweDdFMjIsDQotICAgIDB4N0U0NiwgMHg3RTY2LCAweDdFM0IsIDB4N0UzNSwgMHg3RTM5LCAweDdFNDMsIDB4N0UzNywgMHg3RTMyLA0KLSAgICAweDdFM0EsIDB4N0U2NywgMHg3RTVELCAweDdFNTYsIDB4N0U1RSwgMHg3RTU5LCAweDdFNUEsIDB4N0U3OSwNCi0gICAgMHg3RTZBLCAweDdFNjksIDB4N0U3QywgMHg3RTdCLCAweDdFODMsIDB4N0RENSwgMHg3RTdELCAweDhGQUUsDQotICAgIDB4N0U3RiwgMHg3RTg4LCAweDdFODksIDB4N0U4QywgMHg3RTkyLCAweDdFOTAsIDB4N0U5MywgMHg3RTk0LA0KLSAgICAweDdFOTYsIDB4N0U4RSwgMHg3RTlCLCAweDdFOUMsIDB4N0YzOCwgMHg3RjNBLCAweDdGNDUsIDB4N0Y0QywNCi0gICAgMHg3RjRELCAweDdGNEUsIDB4N0Y1MCwgMHg3RjUxLCAweDdGNTUsIDB4N0Y1NCwgMHg3RjU4LCAweDdGNUYsDQotICAgIDB4N0Y2MCwgMHg3RjY4LCAweDdGNjksIDB4N0Y2NywgMHg3Rjc4LCAweDdGODIsIDB4N0Y4NiwgMHg3RjgzLA0KLSAgICAweDdGODgsIDB4N0Y4NywgMHg3RjhDLCAweDdGOTQsIDB4N0Y5RSwgMHg3RjlELCAweDdGOUEsIDB4N0ZBMywNCi0gICAgMHg3RkFGLCAweDdGQjIsIDB4N0ZCOSwgMHg3RkFFLCAweDdGQjYsIDB4N0ZCOCwgMHg4QjcxLCAweDdGQzUsDQotICAgIDB4N0ZDNiwgMHg3RkNBLCAweDdGRDUsIDB4N0ZENCwgMHg3RkUxLCAweDdGRTYsIDB4N0ZFOSwgMHg3RkYzLA0KLSAgICAweDdGRjksIDB4OThEQywgMHg4MDA2LCAweDgwMDQsIDB4ODAwQiwgMHg4MDEyLCAweDgwMTgsIDB4ODAxOSwNCi0gICAgMHg4MDFDLCAweDgwMjEsIDB4ODAyOCwgMHg4MDNGLCAweDgwM0IsIDB4ODA0QSwgMHg4MDQ2LCAweDgwNTIsDQotICAgIDB4ODA1OCwgMHg4MDVBLCAweDgwNUYsIDB4ODA2MiwgMHg4MDY4LCAweDgwNzMsIDB4ODA3MiwgMHg4MDcwLA0KLSAgICAweDgwNzYsIDB4ODA3OSwgMHg4MDdELCAweDgwN0YsIDB4ODA4NCwgMHg4MDg2LCAweDgwODUsIDB4ODA5QiwNCi0gICAgMHg4MDkzLCAweDgwOUEsIDB4ODBBRCwgMHg1MTkwLCAweDgwQUMsIDB4ODBEQiwgMHg4MEU1LCAweDgwRDksDQotICAgIDB4ODBERCwgMHg4MEM0LCAweDgwREEsIDB4ODBENiwgMHg4MTA5LCAweDgwRUYsIDB4ODBGMSwgMHg4MTFCLA0KLSAgICAweDgxMjksIDB4ODEyMywgMHg4MTJGLCAweDgxNEIsIDB4OTY4QiwgMHg4MTQ2LCAweDgxM0UsIDB4ODE1MywNCi0gICAgMHg4MTUxLCAweDgwRkMsIDB4ODE3MSwgMHg4MTZFLCAweDgxNjUsIDB4ODE2NiwgMHg4MTc0LCAweDgxODMsDQotICAgIDB4ODE4OCwgMHg4MThBLCAweDgxODAsIDB4ODE4MiwgMHg4MUEwLCAweDgxOTUsIDB4ODFBNCwgMHg4MUEzLA0KLSAgICAweDgxNUYsIDB4ODE5MywgMHg4MUE5LCAweDgxQjAsIDB4ODFCNSwgMHg4MUJFLCAweDgxQjgsIDB4ODFCRCwNCi0gICAgMHg4MUMwLCAweDgxQzIsIDB4ODFCQSwgMHg4MUM5LCAweDgxQ0QsIDB4ODFEMSwgMHg4MUQ5LCAweDgxRDgsDQotICAgIDB4ODFDOCwgMHg4MURBLCAweDgxREYsIDB4ODFFMCwgMHg4MUU3LCAweDgxRkEsIDB4ODFGQiwgMHg4MUZFLA0KLSAgICAweDgyMDEsIDB4ODIwMiwgMHg4MjA1LCAweDgyMDcsIDB4ODIwQSwgMHg4MjBELCAweDgyMTAsIDB4ODIxNiwNCi0gICAgMHg4MjI5LCAweDgyMkIsIDB4ODIzOCwgMHg4MjMzLCAweDgyNDAsIDB4ODI1OSwgMHg4MjU4LCAweDgyNUQsDQotICAgIDB4ODI1QSwgMHg4MjVGLCAweDgyNjQsIDB4ODI2MiwgMHg4MjY4LCAweDgyNkEsIDB4ODI2QiwgMHg4MjJFLA0KLSAgICAweDgyNzEsIDB4ODI3NywgMHg4Mjc4LCAweDgyN0UsIDB4ODI4RCwgMHg4MjkyLCAweDgyQUIsIDB4ODI5RiwNCi0gICAgMHg4MkJCLCAweDgyQUMsIDB4ODJFMSwgMHg4MkUzLCAweDgyREYsIDB4ODJEMiwgMHg4MkY0LCAweDgyRjMsDQotICAgIDB4ODJGQSwgMHg4MzkzLCAweDgzMDMsIDB4ODJGQiwgMHg4MkY5LCAweDgyREUsIDB4ODMwNiwgMHg4MkRDLA0KLSAgICAweDgzMDksIDB4ODJEOSwgMHg4MzM1LCAweDgzMzQsIDB4ODMxNiwgMHg4MzMyLCAweDgzMzEsIDB4ODM0MCwNCi0gICAgMHg4MzM5LCAweDgzNTAsIDB4ODM0NSwgMHg4MzJGLCAweDgzMkIsIDB4ODMxNywgMHg4MzE4LCAweDgzODUsDQotICAgIDB4ODM5QSwgMHg4M0FBLCAweDgzOUYsIDB4ODNBMiwgMHg4Mzk2LCAweDgzMjMsIDB4ODM4RSwgMHg4Mzg3LA0KLSAgICAweDgzOEEsIDB4ODM3QywgMHg4M0I1LCAweDgzNzMsIDB4ODM3NSwgMHg4M0EwLCAweDgzODksIDB4ODNBOCwNCi0gICAgMHg4M0Y0LCAweDg0MTMsIDB4ODNFQiwgMHg4M0NFLCAweDgzRkQsIDB4ODQwMywgMHg4M0Q4LCAweDg0MEIsDQotICAgIDB4ODNDMSwgMHg4M0Y3LCAweDg0MDcsIDB4ODNFMCwgMHg4M0YyLCAweDg0MEQsIDB4ODQyMiwgMHg4NDIwLA0KLSAgICAweDgzQkQsIDB4ODQzOCwgMHg4NTA2LCAweDgzRkIsIDB4ODQ2RCwgMHg4NDJBLCAweDg0M0MsIDB4ODU1QSwNCi0gICAgMHg4NDg0LCAweDg0NzcsIDB4ODQ2QiwgMHg4NEFELCAweDg0NkUsIDB4ODQ4MiwgMHg4NDY5LCAweDg0NDYsDQotICAgIDB4ODQyQywgMHg4NDZGLCAweDg0NzksIDB4ODQzNSwgMHg4NENBLCAweDg0NjIsIDB4ODRCOSwgMHg4NEJGLA0KLSAgICAweDg0OUYsIDB4ODREOSwgMHg4NENELCAweDg0QkIsIDB4ODREQSwgMHg4NEQwLCAweDg0QzEsIDB4ODRDNiwNCi0gICAgMHg4NEQ2LCAweDg0QTEsIDB4ODUyMSwgMHg4NEZGLCAweDg0RjQsIDB4ODUxNywgMHg4NTE4LCAweDg1MkMsDQotICAgIDB4ODUxRiwgMHg4NTE1LCAweDg1MTQsIDB4ODRGQywgMHg4NTQwLCAweDg1NjMsIDB4ODU1OCwgMHg4NTQ4LA0KLSAgICAweDg1NDEsIDB4ODYwMiwgMHg4NTRCLCAweDg1NTUsIDB4ODU4MCwgMHg4NUE0LCAweDg1ODgsIDB4ODU5MSwNCi0gICAgMHg4NThBLCAweDg1QTgsIDB4ODU2RCwgMHg4NTk0LCAweDg1OUIsIDB4ODVFQSwgMHg4NTg3LCAweDg1OUMsDQotICAgIDB4ODU3NywgMHg4NTdFLCAweDg1OTAsIDB4ODVDOSwgMHg4NUJBLCAweDg1Q0YsIDB4ODVCOSwgMHg4NUQwLA0KLSAgICAweDg1RDUsIDB4ODVERCwgMHg4NUU1LCAweDg1REMsIDB4ODVGOSwgMHg4NjBBLCAweDg2MTMsIDB4ODYwQiwNCi0gICAgMHg4NUZFLCAweDg1RkEsIDB4ODYwNiwgMHg4NjIyLCAweDg2MUEsIDB4ODYzMCwgMHg4NjNGLCAweDg2NEQsDQotICAgIDB4NEU1NSwgMHg4NjU0LCAweDg2NUYsIDB4ODY2NywgMHg4NjcxLCAweDg2OTMsIDB4ODZBMywgMHg4NkE5LA0KLSAgICAweDg2QUEsIDB4ODY4QiwgMHg4NjhDLCAweDg2QjYsIDB4ODZBRiwgMHg4NkM0LCAweDg2QzYsIDB4ODZCMCwNCi0gICAgMHg4NkM5LCAweDg4MjMsIDB4ODZBQiwgMHg4NkQ0LCAweDg2REUsIDB4ODZFOSwgMHg4NkVDLCAweDg2REYsDQotICAgIDB4ODZEQiwgMHg4NkVGLCAweDg3MTIsIDB4ODcwNiwgMHg4NzA4LCAweDg3MDAsIDB4ODcwMywgMHg4NkZCLA0KLSAgICAweDg3MTEsIDB4ODcwOSwgMHg4NzBELCAweDg2RjksIDB4ODcwQSwgMHg4NzM0LCAweDg3M0YsIDB4ODczNywNCi0gICAgMHg4NzNCLCAweDg3MjUsIDB4ODcyOSwgMHg4NzFBLCAweDg3NjAsIDB4ODc1RiwgMHg4Nzc4LCAweDg3NEMsDQotICAgIDB4ODc0RSwgMHg4Nzc0LCAweDg3NTcsIDB4ODc2OCwgMHg4NzZFLCAweDg3NTksIDB4ODc1MywgMHg4NzYzLA0KLSAgICAweDg3NkEsIDB4ODgwNSwgMHg4N0EyLCAweDg3OUYsIDB4ODc4MiwgMHg4N0FGLCAweDg3Q0IsIDB4ODdCRCwNCi0gICAgMHg4N0MwLCAweDg3RDAsIDB4OTZENiwgMHg4N0FCLCAweDg3QzQsIDB4ODdCMywgMHg4N0M3LCAweDg3QzYsDQotICAgIDB4ODdCQiwgMHg4N0VGLCAweDg3RjIsIDB4ODdFMCwgMHg4ODBGLCAweDg4MEQsIDB4ODdGRSwgMHg4N0Y2LA0KLSAgICAweDg3RjcsIDB4ODgwRSwgMHg4N0QyLCAweDg4MTEsIDB4ODgxNiwgMHg4ODE1LCAweDg4MjIsIDB4ODgyMSwNCi0gICAgMHg4ODMxLCAweDg4MzYsIDB4ODgzOSwgMHg4ODI3LCAweDg4M0IsIDB4ODg0NCwgMHg4ODQyLCAweDg4NTIsDQotICAgIDB4ODg1OSwgMHg4ODVFLCAweDg4NjIsIDB4ODg2QiwgMHg4ODgxLCAweDg4N0UsIDB4ODg5RSwgMHg4ODc1LA0KLSAgICAweDg4N0QsIDB4ODhCNSwgMHg4ODcyLCAweDg4ODIsIDB4ODg5NywgMHg4ODkyLCAweDg4QUUsIDB4ODg5OSwNCi0gICAgMHg4OEEyLCAweDg4OEQsIDB4ODhBNCwgMHg4OEIwLCAweDg4QkYsIDB4ODhCMSwgMHg4OEMzLCAweDg4QzQsDQotICAgIDB4ODhENCwgMHg4OEQ4LCAweDg4RDksIDB4ODhERCwgMHg4OEY5LCAweDg5MDIsIDB4ODhGQywgMHg4OEY0LA0KLSAgICAweDg4RTgsIDB4ODhGMiwgMHg4OTA0LCAweDg5MEMsIDB4ODkwQSwgMHg4OTEzLCAweDg5NDMsIDB4ODkxRSwNCi0gICAgMHg4OTI1LCAweDg5MkEsIDB4ODkyQiwgMHg4OTQxLCAweDg5NDQsIDB4ODkzQiwgMHg4OTM2LCAweDg5MzgsDQotICAgIDB4ODk0QywgMHg4OTFELCAweDg5NjAsIDB4ODk1RSwgMHg4OTY2LCAweDg5NjQsIDB4ODk2RCwgMHg4OTZBLA0KLSAgICAweDg5NkYsIDB4ODk3NCwgMHg4OTc3LCAweDg5N0UsIDB4ODk4MywgMHg4OTg4LCAweDg5OEEsIDB4ODk5MywNCi0gICAgMHg4OTk4LCAweDg5QTEsIDB4ODlBOSwgMHg4OUE2LCAweDg5QUMsIDB4ODlBRiwgMHg4OUIyLCAweDg5QkEsDQotICAgIDB4ODlCRCwgMHg4OUJGLCAweDg5QzAsIDB4ODlEQSwgMHg4OURDLCAweDg5REQsIDB4ODlFNywgMHg4OUY0LA0KLSAgICAweDg5RjgsIDB4OEEwMywgMHg4QTE2LCAweDhBMTAsIDB4OEEwQywgMHg4QTFCLCAweDhBMUQsIDB4OEEyNSwNCi0gICAgMHg4QTM2LCAweDhBNDEsIDB4OEE1QiwgMHg4QTUyLCAweDhBNDYsIDB4OEE0OCwgMHg4QTdDLCAweDhBNkQsDQotICAgIDB4OEE2QywgMHg4QTYyLCAweDhBODUsIDB4OEE4MiwgMHg4QTg0LCAweDhBQTgsIDB4OEFBMSwgMHg4QTkxLA0KLSAgICAweDhBQTUsIDB4OEFBNiwgMHg4QTlBLCAweDhBQTMsIDB4OEFDNCwgMHg4QUNELCAweDhBQzIsIDB4OEFEQSwNCi0gICAgMHg4QUVCLCAweDhBRjMsIDB4OEFFNywgMHg4QUU0LCAweDhBRjEsIDB4OEIxNCwgMHg4QUUwLCAweDhBRTIsDQotICAgIDB4OEFGNywgMHg4QURFLCAweDhBREIsIDB4OEIwQywgMHg4QjA3LCAweDhCMUEsIDB4OEFFMSwgMHg4QjE2LA0KLSAgICAweDhCMTAsIDB4OEIxNywgMHg4QjIwLCAweDhCMzMsIDB4OTdBQiwgMHg4QjI2LCAweDhCMkIsIDB4OEIzRSwNCi0gICAgMHg4QjI4LCAweDhCNDEsIDB4OEI0QywgMHg4QjRGLCAweDhCNEUsIDB4OEI0OSwgMHg4QjU2LCAweDhCNUIsDQotICAgIDB4OEI1QSwgMHg4QjZCLCAweDhCNUYsIDB4OEI2QywgMHg4QjZGLCAweDhCNzQsIDB4OEI3RCwgMHg4QjgwLA0KLSAgICAweDhCOEMsIDB4OEI4RSwgMHg4QjkyLCAweDhCOTMsIDB4OEI5NiwgMHg4Qjk5LCAweDhCOUEsIDB4OEMzQSwNCi0gICAgMHg4QzQxLCAweDhDM0YsIDB4OEM0OCwgMHg4QzRDLCAweDhDNEUsIDB4OEM1MCwgMHg4QzU1LCAweDhDNjIsDQotICAgIDB4OEM2QywgMHg4Qzc4LCAweDhDN0EsIDB4OEM4MiwgMHg4Qzg5LCAweDhDODUsIDB4OEM4QSwgMHg4QzhELA0KLSAgICAweDhDOEUsIDB4OEM5NCwgMHg4QzdDLCAweDhDOTgsIDB4NjIxRCwgMHg4Q0FELCAweDhDQUEsIDB4OENCRCwNCi0gICAgMHg4Q0IyLCAweDhDQjMsIDB4OENBRSwgMHg4Q0I2LCAweDhDQzgsIDB4OENDMSwgMHg4Q0U0LCAweDhDRTMsDQotICAgIDB4OENEQSwgMHg4Q0ZELCAweDhDRkEsIDB4OENGQiwgMHg4RDA0LCAweDhEMDUsIDB4OEQwQSwgMHg4RDA3LA0KLSAgICAweDhEMEYsIDB4OEQwRCwgMHg4RDEwLCAweDlGNEUsIDB4OEQxMywgMHg4Q0NELCAweDhEMTQsIDB4OEQxNiwNCi0gICAgMHg4RDY3LCAweDhENkQsIDB4OEQ3MSwgMHg4RDczLCAweDhEODEsIDB4OEQ5OSwgMHg4REMyLCAweDhEQkUsDQotICAgIDB4OERCQSwgMHg4RENGLCAweDhEREEsIDB4OERENiwgMHg4RENDLCAweDhEREIsIDB4OERDQiwgMHg4REVBLA0KLSAgICAweDhERUIsIDB4OERERiwgMHg4REUzLCAweDhERkMsIDB4OEUwOCwgMHg4RTA5LCAweDhERkYsIDB4OEUxRCwNCi0gICAgMHg4RTFFLCAweDhFMTAsIDB4OEUxRiwgMHg4RTQyLCAweDhFMzUsIDB4OEUzMCwgMHg4RTM0LCAweDhFNEEsDQotICAgIDB4OEU0NywgMHg4RTQ5LCAweDhFNEMsIDB4OEU1MCwgMHg4RTQ4LCAweDhFNTksIDB4OEU2NCwgMHg4RTYwLA0KLSAgICAweDhFMkEsIDB4OEU2MywgMHg4RTU1LCAweDhFNzYsIDB4OEU3MiwgMHg4RTdDLCAweDhFODEsIDB4OEU4NywNCi0gICAgMHg4RTg1LCAweDhFODQsIDB4OEU4QiwgMHg4RThBLCAweDhFOTMsIDB4OEU5MSwgMHg4RTk0LCAweDhFOTksDQotICAgIDB4OEVBQSwgMHg4RUExLCAweDhFQUMsIDB4OEVCMCwgMHg4RUM2LCAweDhFQjEsIDB4OEVCRSwgMHg4RUM1LA0KLSAgICAweDhFQzgsIDB4OEVDQiwgMHg4RURCLCAweDhFRTMsIDB4OEVGQywgMHg4RUZCLCAweDhFRUIsIDB4OEVGRSwNCi0gICAgMHg4RjBBLCAweDhGMDUsIDB4OEYxNSwgMHg4RjEyLCAweDhGMTksIDB4OEYxMywgMHg4RjFDLCAweDhGMUYsDQotICAgIDB4OEYxQiwgMHg4RjBDLCAweDhGMjYsIDB4OEYzMywgMHg4RjNCLCAweDhGMzksIDB4OEY0NSwgMHg4RjQyLA0KLSAgICAweDhGM0UsIDB4OEY0QywgMHg4RjQ5LCAweDhGNDYsIDB4OEY0RSwgMHg4RjU3LCAweDhGNUMsIDB4OEY2MiwNCi0gICAgMHg4RjYzLCAweDhGNjQsIDB4OEY5QywgMHg4RjlGLCAweDhGQTMsIDB4OEZBRCwgMHg4RkFGLCAweDhGQjcsDQotICAgIDB4OEZEQSwgMHg4RkU1LCAweDhGRTIsIDB4OEZFQSwgMHg4RkVGLCAweDkwODcsIDB4OEZGNCwgMHg5MDA1LA0KLSAgICAweDhGRjksIDB4OEZGQSwgMHg5MDExLCAweDkwMTUsIDB4OTAyMSwgMHg5MDBELCAweDkwMUUsIDB4OTAxNiwNCi0gICAgMHg5MDBCLCAweDkwMjcsIDB4OTAzNiwgMHg5MDM1LCAweDkwMzksIDB4OEZGOCwgMHg5MDRGLCAweDkwNTAsDQotICAgIDB4OTA1MSwgMHg5MDUyLCAweDkwMEUsIDB4OTA0OSwgMHg5MDNFLCAweDkwNTYsIDB4OTA1OCwgMHg5MDVFLA0KLSAgICAweDkwNjgsIDB4OTA2RiwgMHg5MDc2LCAweDk2QTgsIDB4OTA3MiwgMHg5MDgyLCAweDkwN0QsIDB4OTA4MSwNCi0gICAgMHg5MDgwLCAweDkwOEEsIDB4OTA4OSwgMHg5MDhGLCAweDkwQTgsIDB4OTBBRiwgMHg5MEIxLCAweDkwQjUsDQotICAgIDB4OTBFMiwgMHg5MEU0LCAweDYyNDgsIDB4OTBEQiwgMHg5MTAyLCAweDkxMTIsIDB4OTExOSwgMHg5MTMyLA0KLSAgICAweDkxMzAsIDB4OTE0QSwgMHg5MTU2LCAweDkxNTgsIDB4OTE2MywgMHg5MTY1LCAweDkxNjksIDB4OTE3MywNCi0gICAgMHg5MTcyLCAweDkxOEIsIDB4OTE4OSwgMHg5MTgyLCAweDkxQTIsIDB4OTFBQiwgMHg5MUFGLCAweDkxQUEsDQotICAgIDB4OTFCNSwgMHg5MUI0LCAweDkxQkEsIDB4OTFDMCwgMHg5MUMxLCAweDkxQzksIDB4OTFDQiwgMHg5MUQwLA0KLSAgICAweDkxRDYsIDB4OTFERiwgMHg5MUUxLCAweDkxREIsIDB4OTFGQywgMHg5MUY1LCAweDkxRjYsIDB4OTIxRSwNCi0gICAgMHg5MUZGLCAweDkyMTQsIDB4OTIyQywgMHg5MjE1LCAweDkyMTEsIDB4OTI1RSwgMHg5MjU3LCAweDkyNDUsDQotICAgIDB4OTI0OSwgMHg5MjY0LCAweDkyNDgsIDB4OTI5NSwgMHg5MjNGLCAweDkyNEIsIDB4OTI1MCwgMHg5MjlDLA0KLSAgICAweDkyOTYsIDB4OTI5MywgMHg5MjlCLCAweDkyNUEsIDB4OTJDRiwgMHg5MkI5LCAweDkyQjcsIDB4OTJFOSwNCi0gICAgMHg5MzBGLCAweDkyRkEsIDB4OTM0NCwgMHg5MzJFLCAweDkzMTksIDB4OTMyMiwgMHg5MzFBLCAweDkzMjMsDQotICAgIDB4OTMzQSwgMHg5MzM1LCAweDkzM0IsIDB4OTM1QywgMHg5MzYwLCAweDkzN0MsIDB4OTM2RSwgMHg5MzU2LA0KLSAgICAweDkzQjAsIDB4OTNBQywgMHg5M0FELCAweDkzOTQsIDB4OTNCOSwgMHg5M0Q2LCAweDkzRDcsIDB4OTNFOCwNCi0gICAgMHg5M0U1LCAweDkzRDgsIDB4OTNDMywgMHg5M0RELCAweDkzRDAsIDB4OTNDOCwgMHg5M0U0LCAweDk0MUEsDQotICAgIDB4OTQxNCwgMHg5NDEzLCAweDk0MDMsIDB4OTQwNywgMHg5NDEwLCAweDk0MzYsIDB4OTQyQiwgMHg5NDM1LA0KLSAgICAweDk0MjEsIDB4OTQzQSwgMHg5NDQxLCAweDk0NTIsIDB4OTQ0NCwgMHg5NDVCLCAweDk0NjAsIDB4OTQ2MiwNCi0gICAgMHg5NDVFLCAweDk0NkEsIDB4OTIyOSwgMHg5NDcwLCAweDk0NzUsIDB4OTQ3NywgMHg5NDdELCAweDk0NUEsDQotICAgIDB4OTQ3QywgMHg5NDdFLCAweDk0ODEsIDB4OTQ3RiwgMHg5NTgyLCAweDk1ODcsIDB4OTU4QSwgMHg5NTk0LA0KLSAgICAweDk1OTYsIDB4OTU5OCwgMHg5NTk5LCAweDk1QTAsIDB4OTVBOCwgMHg5NUE3LCAweDk1QUQsIDB4OTVCQywNCi0gICAgMHg5NUJCLCAweDk1QjksIDB4OTVCRSwgMHg5NUNBLCAweDZGRjYsIDB4OTVDMywgMHg5NUNELCAweDk1Q0MsDQotICAgIDB4OTVENSwgMHg5NUQ0LCAweDk1RDYsIDB4OTVEQywgMHg5NUUxLCAweDk1RTUsIDB4OTVFMiwgMHg5NjIxLA0KLSAgICAweDk2MjgsIDB4OTYyRSwgMHg5NjJGLCAweDk2NDIsIDB4OTY0QywgMHg5NjRGLCAweDk2NEIsIDB4OTY3NywNCi0gICAgMHg5NjVDLCAweDk2NUUsIDB4OTY1RCwgMHg5NjVGLCAweDk2NjYsIDB4OTY3MiwgMHg5NjZDLCAweDk2OEQsDQotICAgIDB4OTY5OCwgMHg5Njk1LCAweDk2OTcsIDB4OTZBQSwgMHg5NkE3LCAweDk2QjEsIDB4OTZCMiwgMHg5NkIwLA0KLSAgICAweDk2QjQsIDB4OTZCNiwgMHg5NkI4LCAweDk2QjksIDB4OTZDRSwgMHg5NkNCLCAweDk2QzksIDB4OTZDRCwNCi0gICAgMHg4OTRELCAweDk2REMsIDB4OTcwRCwgMHg5NkQ1LCAweDk2RjksIDB4OTcwNCwgMHg5NzA2LCAweDk3MDgsDQotICAgIDB4OTcxMywgMHg5NzBFLCAweDk3MTEsIDB4OTcwRiwgMHg5NzE2LCAweDk3MTksIDB4OTcyNCwgMHg5NzJBLA0KLSAgICAweDk3MzAsIDB4OTczOSwgMHg5NzNELCAweDk3M0UsIDB4OTc0NCwgMHg5NzQ2LCAweDk3NDgsIDB4OTc0MiwNCi0gICAgMHg5NzQ5LCAweDk3NUMsIDB4OTc2MCwgMHg5NzY0LCAweDk3NjYsIDB4OTc2OCwgMHg1MkQyLCAweDk3NkIsDQotICAgIDB4OTc3MSwgMHg5Nzc5LCAweDk3ODUsIDB4OTc3QywgMHg5NzgxLCAweDk3N0EsIDB4OTc4NiwgMHg5NzhCLA0KLSAgICAweDk3OEYsIDB4OTc5MCwgMHg5NzlDLCAweDk3QTgsIDB4OTdBNiwgMHg5N0EzLCAweDk3QjMsIDB4OTdCNCwNCi0gICAgMHg5N0MzLCAweDk3QzYsIDB4OTdDOCwgMHg5N0NCLCAweDk3REMsIDB4OTdFRCwgMHg5RjRGLCAweDk3RjIsDQotICAgIDB4N0FERiwgMHg5N0Y2LCAweDk3RjUsIDB4OTgwRiwgMHg5ODBDLCAweDk4MzgsIDB4OTgyNCwgMHg5ODIxLA0KLSAgICAweDk4MzcsIDB4OTgzRCwgMHg5ODQ2LCAweDk4NEYsIDB4OTg0QiwgMHg5ODZCLCAweDk4NkYsIDB4OTg3MCwNCi0gICAgMHg5ODcxLCAweDk4NzQsIDB4OTg3MywgMHg5OEFBLCAweDk4QUYsIDB4OThCMSwgMHg5OEI2LCAweDk4QzQsDQotICAgIDB4OThDMywgMHg5OEM2LCAweDk4RTksIDB4OThFQiwgMHg5OTAzLCAweDk5MDksIDB4OTkxMiwgMHg5OTE0LA0KLSAgICAweDk5MTgsIDB4OTkyMSwgMHg5OTFELCAweDk5MUUsIDB4OTkyNCwgMHg5OTIwLCAweDk5MkMsIDB4OTkyRSwNCi0gICAgMHg5OTNELCAweDk5M0UsIDB4OTk0MiwgMHg5OTQ5LCAweDk5NDUsIDB4OTk1MCwgMHg5OTRCLCAweDk5NTEsDQotICAgIDB4OTk1MiwgMHg5OTRDLCAweDk5NTUsIDB4OTk5NywgMHg5OTk4LCAweDk5QTUsIDB4OTlBRCwgMHg5OUFFLA0KLSAgICAweDk5QkMsIDB4OTlERiwgMHg5OURCLCAweDk5REQsIDB4OTlEOCwgMHg5OUQxLCAweDk5RUQsIDB4OTlFRSwNCi0gICAgMHg5OUYxLCAweDk5RjIsIDB4OTlGQiwgMHg5OUY4LCAweDlBMDEsIDB4OUEwRiwgMHg5QTA1LCAweDk5RTIsDQotICAgIDB4OUExOSwgMHg5QTJCLCAweDlBMzcsIDB4OUE0NSwgMHg5QTQyLCAweDlBNDAsIDB4OUE0MywgMHg5QTNFLA0KLSAgICAweDlBNTUsIDB4OUE0RCwgMHg5QTVCLCAweDlBNTcsIDB4OUE1RiwgMHg5QTYyLCAweDlBNjUsIDB4OUE2NCwNCi0gICAgMHg5QTY5LCAweDlBNkIsIDB4OUE2QSwgMHg5QUFELCAweDlBQjAsIDB4OUFCQywgMHg5QUMwLCAweDlBQ0YsDQotICAgIDB4OUFEMSwgMHg5QUQzLCAweDlBRDQsIDB4OUFERSwgMHg5QURGLCAweDlBRTIsIDB4OUFFMywgMHg5QUU2LA0KLSAgICAweDlBRUYsIDB4OUFFQiwgMHg5QUVFLCAweDlBRjQsIDB4OUFGMSwgMHg5QUY3LCAweDlBRkIsIDB4OUIwNiwNCi0gICAgMHg5QjE4LCAweDlCMUEsIDB4OUIxRiwgMHg5QjIyLCAweDlCMjMsIDB4OUIyNSwgMHg5QjI3LCAweDlCMjgsDQotICAgIDB4OUIyOSwgMHg5QjJBLCAweDlCMkUsIDB4OUIyRiwgMHg5QjMyLCAweDlCNDQsIDB4OUI0MywgMHg5QjRGLA0KLSAgICAweDlCNEQsIDB4OUI0RSwgMHg5QjUxLCAweDlCNTgsIDB4OUI3NCwgMHg5QjkzLCAweDlCODMsIDB4OUI5MSwNCi0gICAgMHg5Qjk2LCAweDlCOTcsIDB4OUI5RiwgMHg5QkEwLCAweDlCQTgsIDB4OUJCNCwgMHg5QkMwLCAweDlCQ0EsDQotICAgIDB4OUJCOSwgMHg5QkM2LCAweDlCQ0YsIDB4OUJEMSwgMHg5QkQyLCAweDlCRTMsIDB4OUJFMiwgMHg5QkU0LA0KLSAgICAweDlCRDQsIDB4OUJFMSwgMHg5QzNBLCAweDlCRjIsIDB4OUJGMSwgMHg5QkYwLCAweDlDMTUsIDB4OUMxNCwNCi0gICAgMHg5QzA5LCAweDlDMTMsIDB4OUMwQywgMHg5QzA2LCAweDlDMDgsIDB4OUMxMiwgMHg5QzBBLCAweDlDMDQsDQotICAgIDB4OUMyRSwgMHg5QzFCLCAweDlDMjUsIDB4OUMyNCwgMHg5QzIxLCAweDlDMzAsIDB4OUM0NywgMHg5QzMyLA0KLSAgICAweDlDNDYsIDB4OUMzRSwgMHg5QzVBLCAweDlDNjAsIDB4OUM2NywgMHg5Qzc2LCAweDlDNzgsIDB4OUNFNywNCi0gICAgMHg5Q0VDLCAweDlDRjAsIDB4OUQwOSwgMHg5RDA4LCAweDlDRUIsIDB4OUQwMywgMHg5RDA2LCAweDlEMkEsDQotICAgIDB4OUQyNiwgMHg5REFGLCAweDlEMjMsIDB4OUQxRiwgMHg5RDQ0LCAweDlEMTUsIDB4OUQxMiwgMHg5RDQxLA0KLSAgICAweDlEM0YsIDB4OUQzRSwgMHg5RDQ2LCAweDlENDgsIDB4OUQ1RCwgMHg5RDVFLCAweDlENjQsIDB4OUQ1MSwNCi0gICAgMHg5RDUwLCAweDlENTksIDB4OUQ3MiwgMHg5RDg5LCAweDlEODcsIDB4OURBQiwgMHg5RDZGLCAweDlEN0EsDQotICAgIDB4OUQ5QSwgMHg5REE0LCAweDlEQTksIDB4OURCMiwgMHg5REM0LCAweDlEQzEsIDB4OURCQiwgMHg5REI4LA0KLSAgICAweDlEQkEsIDB4OURDNiwgMHg5RENGLCAweDlEQzIsIDB4OUREOSwgMHg5REQzLCAweDlERjgsIDB4OURFNiwNCi0gICAgMHg5REVELCAweDlERUYsIDB4OURGRCwgMHg5RTFBLCAweDlFMUIsIDB4OUUxRSwgMHg5RTc1LCAweDlFNzksDQotICAgIDB4OUU3RCwgMHg5RTgxLCAweDlFODgsIDB4OUU4QiwgMHg5RThDLCAweDlFOTIsIDB4OUU5NSwgMHg5RTkxLA0KLSAgICAweDlFOUQsIDB4OUVBNSwgMHg5RUE5LCAweDlFQjgsIDB4OUVBQSwgMHg5RUFELCAweDk3NjEsIDB4OUVDQywNCi0gICAgMHg5RUNFLCAweDlFQ0YsIDB4OUVEMCwgMHg5RUQ0LCAweDlFREMsIDB4OUVERSwgMHg5RURELCAweDlFRTAsDQotICAgIDB4OUVFNSwgMHg5RUU4LCAweDlFRUYsIDB4OUVGNCwgMHg5RUY2LCAweDlFRjcsIDB4OUVGOSwgMHg5RUZCLA0KLSAgICAweDlFRkMsIDB4OUVGRCwgMHg5RjA3LCAweDlGMDgsIDB4NzZCNywgMHg5RjE1LCAweDlGMjEsIDB4OUYyQywNCi0gICAgMHg5RjNFLCAweDlGNEEsIDB4OUY1MiwgMHg5RjU0LCAweDlGNjMsIDB4OUY1RiwgMHg5RjYwLCAweDlGNjEsDQotICAgIDB4OUY2NiwgMHg5RjY3LCAweDlGNkMsIDB4OUY2QSwgMHg5Rjc3LCAweDlGNzIsIDB4OUY3NiwgMHg5Rjk1LA0KLSAgICAweDlGOUMsIDB4OUZBMCwgMHg1ODJGLCAweDY5QzcsIDB4OTA1OSwgMHg3NDY0LCAweDI2NDIsIDB4MjUwMCwNCi0gICAgMHgyNTAxLCAweDI1MDIsIDB4MjUwMywgMHgyNTA0LCAweDI1MDUsIDB4MjUwNiwgMHgyNTA3LCAweDI1MDgsDQotICAgIDB4MjUwOSwgMHgyNTBBLCAweDI1MEIsIDB4MjUwQywgMHgyNTBELCAweDI1MEUsIDB4MjUwRiwgMHgyNTEwLA0KLSAgICAweDI1MTEsIDB4MjUxMiwgMHgyNTEzLCAweDI1MTQsIDB4MjUxNSwgMHgyNTE2LCAweDI1MTcsIDB4MjUxOCwNCi0gICAgMHgyNTE5LCAweDI1MUEsIDB4MjUxQiwgMHgyNTFDLCAweDI1MUQsIDB4MjUxRSwgMHgyNTFGLCAweDI1MjAsDQotICAgIDB4MjUyMSwgMHgyNTIyLCAweDI1MjMsIDB4MjUyNCwgMHgyNTI1LCAweDI1MjYsIDB4MjUyNywgMHgyNTI4LA0KLSAgICAweDI1MjksIDB4MjUyQSwgMHgyNTJCLCAweDI1MkMsIDB4MjUyRCwgMHgyNTJFLCAweDI1MkYsIDB4MjUzMCwNCi0gICAgMHgyNTMxLCAweDI1MzIsIDB4MjUzMywgMHgyNTM0LCAweDI1MzUsIDB4MjUzNiwgMHgyNTM3LCAweDI1MzgsDQotICAgIDB4MjUzOSwgMHgyNTNBLCAweDI1M0IsIDB4MjUzQywgMHgyNTNELCAweDI1M0UsIDB4MjUzRiwgMHgyNTQwLA0KLSAgICAweDI1NDEsIDB4MjU0MiwgMHgyNTQzLCAweDI1NDQsIDB4MjU0NSwgMHgyNTQ2LCAweDI1NDcsIDB4MjU0OCwNCi0gICAgMHgyNTQ5LCAweDI1NEEsIDB4MjU0QiwgMHgyNDYwLCAweDI0NjEsIDB4MjQ2MiwgMHgyNDYzLCAweDI0NjQsDQotICAgIDB4MjQ2NSwgMHgyNDY2LCAweDI0NjcsIDB4MjQ2OCwgMHgyNDY5LCAweDI0NkEsIDB4MjQ2QiwgMHgyNDZDLA0KLSAgICAweDI0NkQsIDB4MjQ2RSwgMHgyNDZGLCAweDI0NzAsIDB4MjQ3MSwgMHgyNDcyLCAweDI0NzMsIDB4MjE2MCwNCi0gICAgMHgyMTYxLCAweDIxNjIsIDB4MjE2MywgMHgyMTY0LCAweDIxNjUsIDB4MjE2NiwgMHgyMTY3LCAweDIxNjgsDQotICAgIDB4MjE2OSwgMHgzMzQ5LCAweDMzMTQsIDB4MzMyMiwgMHgzMzRELCAweDMzMTgsIDB4MzMyNywgMHgzMzAzLA0KLSAgICAweDMzMzYsIDB4MzM1MSwgMHgzMzU3LCAweDMzMEQsIDB4MzMyNiwgMHgzMzIzLCAweDMzMkIsIDB4MzM0QSwNCi0gICAgMHgzMzNCLCAweDMzOUMsIDB4MzM5RCwgMHgzMzlFLCAweDMzOEUsIDB4MzM4RiwgMHgzM0M0LCAweDMzQTEsDQotICAgIDB4MzAxRCwgMHgzMDFGLCAweDIxMTYsIDB4MzNDRCwgMHgyMTIxLCAweDMyQTQsIDB4MzJBNSwgMHgzMkE2LA0KLSAgICAweDMyQTcsIDB4MzJBOCwgMHgzMjMxLCAweDMyMzIsIDB4MzIzOSwgMHgzMzdFLCAweDMzN0QsIDB4MzM3QywNCi0gICAgMHgyMjJFLCAweDIyMTEsIDB4MjIxQSwgMHgyMkE1LCAweDIyMjAsIDB4MjIxRiwgMHgyMkJGLCAweDIyMjksDQotICAgIDB4MjIyQSwgMHg1NTVFLCAweDk4RjQsIDB4NkVBMiwgMHg5QzJGLCAweDZERUIsIDB4OEZDMiwgMHg2QjFELA0KLSAgICAweDUzQTksIDB4OTU4RiwgMHg1NjQyLCAweDk5MEMsIDB4NzEzMCwgMHg4OTU2LCAweDlERDcsIDB4OEZFNiwNCi0gICAgMHg2MDYyLCAweDYyRDAsIDB4NjY2NiwgMHg1NTlELCAweDg0NUIsIDB4OTc4NCwgMHg1Njk5LCAweDZGOTcsDQotICAgIDB4N0ZGMCwgMHg3RkVCLCAweDVGQkQsIDB4Nzk0NywgMHg0RkUwLCAweDUzN0YsIDB4NTBDNSwgMHg4RUMwLA0KLSAgICAweDU1QjAsIDB4NkFEQiwgMHg1QzUxLCAweDk3NzQsIDB4Nzk0MSwgMHg2MTY3LCAweDdBM0QsIDB4N0U2QiwNCi0gICAgMHg4MzRBLCAweDk2OTksIDB4NTAyNiwgMHg1QUNDLCAweDYzNzIsIDB4OUU3QywgMHg4QUZBLCAweDVERjcsDQotICAgIDB4NjYzQiwgMHg2RTlELCAweDlFQjQsIDB4OUQ2MCwgMHg3NTExLCAweDkxQzcsIDB4Njk4QSwgMHg2ODA1LA0KLSAgICAweDg1QTksIDB4OUJENiwgMHg5MzA2LCAweDczQ0EsIDB4NTNGMSwgMHg1QzYyLCAweDkwNkUsIDB4Njc1MywNCi0gICAgMHg3MDdDLCAweDdFNjEsIDB4OTE0QiwgMHg2NkQ5LCAweDZFMUEsIDB4ODVBRiwgMHg4NUY3LCAweDU0RTgsDQotICAgIDB4NUVFMCwgMHg2OEEyLCAweDg1MjMsIDB4OTFBQywgMHg5Nzk4LCAweDg3NTUsIDB4OTc3MSwgMHg5MDE3LA0KLSAgICAweDdGRTAsIDB4NjQ3QSwgMHg5MDFELCAweDg3RUMsIDB4NjRCMCwgMHg2ODEzLCAweDcxNEUsIDB4NzE3RCwNCi0gICAgMHg4QTZFLCAweDU2NEMsIDB4OTA2MSwgMHg1Mjc1LCAweDY0MTQsIDB4NzYyNiwgMHg5MDVDLCAweDlBNTIsDQotICAgIDB4ODE3RiwgMHg5RURCLCAweDU1NDQsIDB4NkZFRiwgMHg3NDIyLCAweDg2RjgsIDB4NURGRCwgMHg4RkJGLA0KLSAgICAweDY4REEsIDB4OUM0OCwgMHg2QTNELCAweDdDMUUsIDB4OEEzQiwgMHg3MDI2LCAweDUxQ0IsIDB4NjM1NywNCi0gICAgMHg2OUNDLCAweDkzOUEsIDB4NTg1QSwgMHg2NDUxLCAweDkxMkQsIDB4NjRFMiwgMHg2RUJBLCAweDU4NjEsDQotICAgIDB4OTg1QSwgMHg1ODM1LCAweDVDNjAsIDB4ODNERiwgMHg4Q0VELCAweDU4NTgsIDB4NzlCMSwgMHg5RDA3LA0KLSAgICAweDcwMDYsIDB4NzAxRSwgMHg1Njc4LCAweDkwNDEsIDB4OTgxMywgMHg5MEEzLCAweDhCMEUsIDB4NzA1OCwNCi0gICAgMHg2OTYyLCAweDc5QjAsIDB4NTZDQSwgMHg3MjRDLCAweDkwMTksIDB4NzlFNCwgMHg1MjVELCAweDdCQjgsDQotICAgIDB4NkY1MSwgMHg5MUIxLCAweDYzM0QsIDB4NjI0OSwgMHg2QTBCLCAweDY3Q0EsIDB4N0ExNywgMHg5MDNDLA0KLSAgICAweDVBOUIsIDB4OEIyQywgMHg1RURGLCAweDcwMTUsIDB4OTgzQiwgMHg4NTNELCAweDc3QTUsIDB4NUEyOSwNCi0gICAgMHg1RTk2LCAweDZDRTEsIDB4ODRFQywgMHg5ODMwLCAweDlDNTIsIDB4OUVCNSwgMHg1MTMyLCAweDk5MDUsDQotICAgIDB4N0M3RSwgMHg5NDUzLCAweDYxMDgsIDB4NzY1MiwgMHg3MzM3LCAweDcxOTQsIDB4ODAwMCwgMHg4NDBBLA0KLSAgICAweDkwN0MsIDB4NkYyMywgMHg3MTQ5LCAweDg0RUUsIDB4Njk5NCwgMHg4ODFGLCAweDUxNTQsIDB4NTE4OSwNCi0gICAgMHg1MTk1LCAweDUxQTQsIDB4NTUzOSwgMHg1NTMzLCAweDU1RTQsIDB4NTYzMiwgMHg1NkE1LCAweDU4MEIsDQotICAgIDB4NUFCRSwgMHg1QkMzLCAweDVDNUIsIDB4NUU2NCwgMHg2MDk3LCAweDYzNjksIDB4NjQwNiwgMHg2NTIyLA0KLSAgICAweDY1ODMsIDB4NjdBNiwgMHg2N0I0LCAweDY4OUIsIDB4Njg4RSwgMHg2RTZFLCAweDcxRDcsIDB4NzIyOCwNCi0gICAgMHg3M0NFLCAweDc1MDQsIDB4NzUwRCwgMHg3NTE1LCAweDc2OTMsIDB4Nzg3QywgMHg3QTMxLCAweDlGOUQsDQotICAgIDB4N0I5OSwgMHg3QzkwLCAweDdDQUUsIDB4N0Q5QiwgMHg3REFFLCAweDdEOUYsIDB4N0ZENCwgMHg4MjJFLA0KLSAgICAweDgyOEQsIDB4ODJEMiwgMHg4MzIzLCAweDgzNzUsIDB4ODUxNywgMHg4NTNFLCAweDg3ODIsIDB4ODdEMiwNCi0gICAgMHg4OTBBLCAweDg5QUYsIDB4OEFERSwgMHg4QjQxLCAweDhEREEsIDB4OEUwOSwgMHg4RjEzLCAweDhGRUEsDQotICAgIDB4OEZFOSwgMHg5MDU4LCAweDYyNDgsIDB4OTFDMSwgMHg5NUJCLCAweDc3NjIsIDB4OTcyNCwgMHg5NzYwLA0KLSAgICAweDk3NkQsIDB4OTgyNCwgMHg5QjJFLCAweDlCOTcsIDB4OUJGMiwgMHg5RUFBLCAweDlGOUMsIDB4MzAwMSwNCi0gICAgMHgzMDAyLCAweDIwM0UsIDB4RkYzRiwgMHgzMEZDLCAweDIwMTUsIDB4MjAxMCwgMHgzMDFDLCAweDIwMTYsDQotICAgIDB4RkY1QywgMHgyMDI2LCAweDIwMjUsIDB4RkYwOCwgMHhGRjA5LCAweDMwMTQsIDB4MzAxNSwgMHhGRjNCLA0KLSAgICAweEZGM0QsIDB4RkY1QiwgMHhGRjVELCAweDMwMDgsIDB4MzAwOSwgMHgzMDBBLCAweDMwMEIsIDB4MzAwQywNCi0gICAgMHgzMDBELCAweDMwMEUsIDB4MzAwRiwgMHgzMDEwLCAweDMwMTEsIDB4RkYxRCwgMHgzMDQxLCAweDMwNDMsDQotICAgIDB4MzA0NSwgMHgzMDQ3LCAweDMwNDksIDB4MzA2MywgMHgzMDgzLCAweDMwODUsIDB4MzA4NywgMHgzMDhFLA0KLSAgICAweDMwQTEsIDB4MzBBMywgMHgzMEE1LCAweDMwQTcsIDB4MzBBOSwgMHgzMEMzLCAweDMwRTMsIDB4MzBFNSwNCi0gICAgMHgzMEU3LCAweDMwRUUsIDB4MzBGNSwgMHgzMEY2LCAweDMzNDksIDB4MzMxNCwgMHgzMzIyLCAweDMzNEQsDQotICAgIDB4MzMxOCwgMHgzMzI3LCAweDMzMDMsIDB4MzMzNiwgMHgzMzUxLCAweDMzNTcsIDB4MzMwRCwgMHgzMzI2LA0KLSAgICAweDMzMjMsIDB4MzMyQiwgMHgzMzRBLCAweDMzM0IsIDB4MzAxRCwgMHgzMDFFLCAweDMwOTQsIDB4MzA0QiwNCi0gICAgMHgzMDUxLCAweDgyQTYsIDB4ODMyOCwgMHg1NjUzLCAweDUzQTksIDB4NzI1OSwgMHg2QzcyLCAweDdCMDgsDQotICAgIDB4OTk1NywgMHg2MkYzLCAweDk5MTAsIDB4OTc2RCwgMHg3MTdELCAweDdBN0YsIDB4N0JBRCwgMHg2M0MzLA0KLSAgICAweDgzREYsIDB4Nzk2MiwgMHg1M0RCLCAweDdCQzcsIDB4OEZDNCwgMHg3QzNFLCAweDUwQ0EsIDB4NTMxNSwNCi0gICAgMHg1NUE5LCAweDU2QUUsIDB4NTgxOSwgMHg1OTFCLCAweDVDMjgsIDB4NUVEMCwgMHg1RUNGLCAweDYyNDEsDQotICAgIDB4NjZDMSwgMHg2QzA4LCAweDZFMjMsIDB4NkVFQywgMHg3QTk3LCAweDdCREQsIDB4N0ZFOSwgMHg4NDIyLA0KLSAgICAweDg3NTksIDB4ODgwRSwgMHg4N0QyLCAweDlBMTksIDB4OUVBRCwgMHhGRkU0LCAweEZGMDcsIDB4RkYwMiwNCi0gICAgMHgxMUE4LCAweDI1QzEsIDB4MjVCNywgMHgyMUU5LCAweDIxRTcsIDB4MjFFNiwgMHgyMUU4LCAweDI1QTIsDQotICAgIDB4MjY2NywgMHgyNjYxLCAweDI2NjQsIDB4MjY2MiwgMHgzM0EwLCAweDMzQTIsIDB4MzNBNCwgMHgzM0E1LA0KLSAgICAweDMzOTcsIDB4MjExMywgMHgzMzk4LCAweDMzQjMsIDB4MzNCMiwgMHgzM0IxLCAweDMzQjAsIDB4MzM4NSwNCi0gICAgMHgzMzg2LCAweDMzODcsIDB4MzNDQiwgMHgzMzkwLCAweDMzRDQsIDB4MzM5NiwgMHgzMzIyLCAweDMzMTYsDQotICAgIDB4MzMxOCwgMHgzMzE1LCAweDMzMDMsIDB4MzMyMywgMHgzMzU3LCAweDMzNDIsIDB4MzMzOSwgMHgzMzNCLA0KLSAgICAweDMzMDAsIDB4MzMzMSwgMHgzMzQ3LCAweDMzMUUsIDB4MzMyQSwgMHgzM0NELCAweDMzN0YsIDB4MjEyMSwNCi0gICAgMHgyNjBFLCAweDMwMzYsIDB4MzAyMCwgMHgwMEE5LCAweDAwQUUsIDB4MDAwMCwgMHgyNDg4LCAweDI0ODksDQotICAgIDB4MjQ4QSwgMHgyNDhCLCAweDI0OEMsIDB4MjQ4RCwgMHgyNDhFLCAweDI0OEYsIDB4MjQ5MCwgMHgyNDc0LA0KLSAgICAweDI0NzUsIDB4MjQ3NiwgMHgyNDc3LCAweDI0NzgsIDB4MjQ3OSwgMHgyNDdBLCAweDI0N0IsIDB4MjQ3QywNCi0gICAgMHgyNDdELCAweDI0N0UsIDB4MjQ3RiwgMHgyNDgwLCAweDI0ODEsIDB4MjQ4MiwgMHgyNDgzLCAweDI0ODQsDQotICAgIDB4MjQ4NSwgMHgyNDg2LCAweDI0ODcsIDB4MzI1MSwgMHgyMTcwLCAweDIxNzEsIDB4MjE3MiwgMHgyMTczLA0KLSAgICAweDIxNzQsIDB4MjE3NSwgMHgyMTc2LCAweDIxNzcsIDB4MjE3OCwgMHgyMTc5LCAweDMyNTIsIDB4MzI1MywNCi0gICAgMHgzMjU0LCAweDMyNTUsIDB4MzI1NiwgMHgzMjU3LCAweDMyNTgsIDB4MzI1OSwgMHgzMjVBLCAweDMyNUIsDQotICAgIDB4MjQ5QywgMHgyNDlELCAweDI0OUUsIDB4MjQ5RiwgMHgyNEEwLCAweDI0QTEsIDB4MjRBMiwgMHgyNEEzLA0KLSAgICAweDI0QTQsIDB4MjRBNSwgMHgyNEE2LCAweDI0QTcsIDB4MjRBOCwgMHgyNEE5LCAweDI0QUEsIDB4MjRBQiwNCi0gICAgMHgyNEFDLCAweDI0QUQsIDB4MjRBRSwgMHgyNEFGLCAweDI0QjAsIDB4MjRCMSwgMHgyNEIyLCAweDI0QjMsDQotICAgIDB4MjRCNCwgMHgyNEI1LCAweDMyNDMsIDB4MzIzRCwgMHgzMjNGLCAweDMyMzQsIDB4MzIzOCwgMHgzMjMzLA0KLSAgICAweDMyM0MsIDB4MzI0MiwgMHgzMjNFLCAweDMyMzYsIDB4MzIzNSwgMHgzMjNCLCAweDMyNDAsIDB4MzIzQSwNCi0gICAgMHgzMkIwLCAweDMyQUQsIDB4MzJBOSwgMHgzMkFGLCAweDMyOTQsIDB4MzJBQSwgMHgzMjk4LCAweDMyQUIsDQotICAgIDB4MzI5MiwgMHgzMjkxLCAweDMyOTMsIDB4MzJBQywgMHgzMkFFLCAweDMyOTYsIDB4MjNBOSwgMHgyM0E4LA0KLSAgICAweDIzQTcsIDB4RkUzOCwgMHgyM0FELCAweDIzQUMsIDB4MjNBQiwgMHhGRTM4LCAweDIzQUIsIDB4MjNBQywNCi0gICAgMHgyM0FELCAweEZFMzgsIDB4MjNBNywgMHgyM0E4LCAweDIzQTksIDB4RkUzOCwgMHgzM0NDLCAweDMzMDUsDQotICAgIDB4MDBCRCwgMHgwMEJDLCAweDMzOUYsIDB4MzNBMywgMHgzM0E2LCAweEZGRkQsIDB4RkZGRCwgMHgzMjlFLA0KLSAgICAweDMzODgsIDB4MzM4OSwgMHgzM0M4LCAweDIyMkQsIDB4NTM3MCwgMHgzMjMwLCAweDMyMkEsIDB4MzIyQiwNCi0gICAgMHgzMjJDLCAweDMyMkQsIDB4MzIyRSwgMHgzMjJGLCAweDMyMzcsIDB4MzI0MSwgMHgyN0ExLCAweDIxRTYsDQotICAgIDB4MjFFNywgMHgyMUU5LCAweDI1QzksIDB4MjY2MCwgMHgyNjY1LCAweDI2NjMsIDB4MjY2NiwgMHgyNjAwLA0KLSAgICAweDI2MDEsIDB4MjYwMiwgMHgyNjAzLCAweDI2MUUsIDB4MjYxQywgMHgyNjFELCAweDI2MUYsIDB4MzI5OSwNCi0gICAgMHgyNEVBLCAweDIxNkEsIDB4MjE2QiwgMHhGRjEwLCAweEZGMTAsIDB4MzAwMCwgMHgyNTgxLCAweDI1ODIsDQotICAgIDB4MjU4MywgMHgyNTg0LCAweDI1ODUsIDB4MjU4NiwgMHgyNTg3LCAweDI1ODgsIDB4MjU4RiwgMHgyNThFLA0KLSAgICAweDI1OEQsIDB4MjU4QywgMHgyNThCLCAweDI1OEEsIDB4MjU4OSwgMHgyNTk0LCAweDI1OTUsIDB4MjU2RCwNCi0gICAgMHgyNTZFLCAweDI1NzAsIDB4MjU2RiwgMHgyNTUwLCAweDI1NUUsIDB4MjU2QSwgMHgyNTYxLCAweDI1RTIsDQotICAgIDB4MjVFMywgMHgyNUU1LCAweDI1RTQsIDB4MjVDRiwgMHgwRUQwLCAweDI1NzEsIDB4MjU3MiwgMHgyNTczLA0KLSAgICAweDMwNEIsIDB4MzA1MSwgMHg5MDIyLCAweDhGQkIsIDB4RkYwQywgMHgwMEIwLCAweDMwMTMsIDB4MzA5QywNCi0gICAgMHgzMDlCLCAweDAyQ0YsIDB4RkYwRSwgMHgyMDE4LCAweDIwMTksIDB4MjAxQywgMHgyMDFELCAweDIwMUMsDQotICAgIDB4MjAxRSwgMHgyMDE4LCAweDIwMUEsIDB4MDJCQSwgMHg1MURDLCAweDcxOTksIDB4Mjc3NiwgMHgyNzc3LA0KLSAgICAweDI3NzgsIDB4Mjc3OSwgMHgyNzdBLCAweDI3N0IsIDB4Mjc3QywgMHgyNzdELCAweDI3N0UsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MjE3QSwgMHgyMTdCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIxN0YsDQotICAgIDB4MjEwQSwgMHgyMTA5LCAweDAwMDAsIDB4MDAwMCwgMHgzMDA0LCAweDIxQzYsIDB4MjFDNCwgMHgyMUM1LA0KLSAgICAweDAwMDAsIDB4MzBGNywgMHgzMEY4LCAweDMwRjksIDB4MzBGQSwgMHg1OTI3LCAweDVDMEYsIDB4MzI5RCwNCi0gICAgMHg2M0E3LCAweDAwMDAsIDB4MDAwMCwgMHgzMzdCLCAweDMzN0YsIDB4MDAwMCwgMHgwMDAwLCAweDMzMzMsDQotICAgIDB4MzM0RSwgMHgzMzIyLCAweDMzMTYsIDB4MzMwNSwgMHgzMzA1LCAweDMzMDUsIDB4MzMzMywgMHgzMzRFLA0KLSAgICAweDMzNEUsIDB4MzM0RSwgMHgzMzAzLCAweDMzMTgsIDB4MzMxNSwgMHgzMzM5LCAweDMzMzksIDB4MzMzOSwNCi0gICAgMHgzMzU3LCAweDMzNDIsIDB4MzM0MiwgMHgzMzQyLCAweDMzMjMsIDB4MzMzQiwgMHgzMzAwLCAweDMzMUUsDQotICAgIDB4MzMxRSwgMHgzMzFFLCAweDMzMkEsIDB4MzMyQSwgMHgzMzJBLCAweDMzNDcsIDB4MzMzMSwgMHg3RThBLA0KLSAgICAweDg5MUMsIDB4OTM0OCwgMHg5Mjg4LCAweDg0REMsIDB4NEZDOSwgMHg3MEJCLCAweDY2MzEsIDB4NjhDOCwNCi0gICAgMHg5MkY5LCAweDY2RkIsIDB4NUY0NSwgMHg0RTI4LCAweDRFRTEsIDB4NEVGQywgMHg0RjAwLCAweDRGMDMsDQotICAgIDB4NEYzOSwgMHg0RjU2LCAweDRGOTIsIDB4NEY4QSwgMHg0RjlBLCAweDRGOTQsIDB4NEZDRCwgMHg1MDQwLA0KLSAgICAweDUwMjIsIDB4NEZGRiwgMHg1MDFFLCAweDUwNDYsIDB4NTA3MCwgMHg1MDQyLCAweDUwOTQsIDB4NTBGNCwNCi0gICAgMHg1MEQ4LCAweDUxNEEsIDB4NTE2NCwgMHg1MTlELCAweDUxQkUsIDB4NTFFQywgMHg1MjE1LCAweDUyOUMsDQotICAgIDB4NTJBNiwgMHg1MkMwLCAweDUyREIsIDB4NTMwMCwgMHg1MzA3LCAweDUzMjQsIDB4NTM3MiwgMHg1MzkzLA0KLSAgICAweDUzQjIsIDB4NTNERCwgMHhGQTBFLCAweDU0OUMsIDB4NTQ4QSwgMHg1NEE5LCAweDU0RkYsIDB4NTU4NiwNCi0gICAgMHg1NzU5LCAweDU3NjUsIDB4NTdBQywgMHg1N0M4LCAweDU3QzcsIDB4RkEwRiwgMHhGQTEwLCAweDU4OUUsDQotICAgIDB4NThCMiwgMHg1OTBCLCAweDU5NTMsIDB4NTk1QiwgMHg1OTVELCAweDU5NjMsIDB4NTlBNCwgMHg1OUJBLA0KLSAgICAweDVCNTYsIDB4NUJDMCwgMHg3NTJGLCAweDVCRDgsIDB4NUJFQywgMHg1QzFFLCAweDVDQTYsIDB4NUNCQSwNCi0gICAgMHg1Q0Y1LCAweDVEMjcsIDB4NUQ1MywgMHhGQTExLCAweDVENDIsIDB4NUQ2RCwgMHg1REI4LCAweDVEQjksDQotICAgIDB4NUREMCwgMHg1RjIxLCAweDVGMzQsIDB4NUY2NywgMHg1RkI3LCAweDVGREUsIDB4NjA1RCwgMHg2MDg1LA0KLSAgICAweDYwOEEsIDB4NjBERSwgMHg2MEQ1LCAweDYxMjAsIDB4NjBGMiwgMHg2MTExLCAweDYxMzcsIDB4NjEzMCwNCi0gICAgMHg2MTk4LCAweDYyMTMsIDB4NjJBNiwgMHg2M0Y1LCAweDY0NjAsIDB4NjQ5RCwgMHg2NENFLCAweDY1NEUsDQotICAgIDB4NjYwMCwgMHg2NjE1LCAweDY2MDksIDB4NjYyRSwgMHg2NjFFLCAweDY2MjQsIDB4NjY2NSwgMHg2NjU3LA0KLSAgICAweDY2NTksIDB4RkExMiwgMHg2NjczLCAweDY2OTksIDB4NjZBMCwgMHg2NkIyLCAweDY2QkYsIDB4NjZGQSwNCi0gICAgMHg2NzBFLCAweEY5MjksIDB4Njc2NiwgMHg2N0JCLCAweDY4NTIsIDB4NjdDMCwgMHg2ODAxLCAweDY4NDQsDQotICAgIDB4NjhDRiwgMHhGQTEzLCAweDY5NjgsIDB4RkExNCwgMHg2OTk4LCAweDY5RTIsIDB4NkEzMCwgMHg2QTZCLA0KLSAgICAweDZBNDYsIDB4NkE3MywgMHg2QTdFLCAweDZBRTIsIDB4NkFFNCwgMHg2QkQ2LCAweDZDM0YsIDB4NkM1QywNCi0gICAgMHg2Qzg2LCAweDZDNkYsIDB4NkNEQSwgMHg2RDA0LCAweDZEODcsIDB4NkQ2RiwgMHg2RDk2LCAweDZEQUMsDQotICAgIDB4NkRDRiwgMHg2REY4LCAweDZERjIsIDB4NkRGQywgMHg2RTM5LCAweDZFNUMsIDB4NkUyNywgMHg2RTNDLA0KLSAgICAweDZFQkYsIDB4NkY4OCwgMHg2RkI1LCAweDZGRjUsIDB4NzAwNSwgMHg3MDA3LCAweDcwMjgsIDB4NzA4NSwNCi0gICAgMHg3MEFCLCAweDcxMEYsIDB4NzEwNCwgMHg3MTVDLCAweDcxNDYsIDB4NzE0NywgMHhGQTE1LCAweDcxQzEsDQotICAgIDB4NzFGRSwgMHg3MkIxLCAweDcyQkUsIDB4NzMyNCwgMHhGQTE2LCAweDczNzcsIDB4NzNCRCwgMHg3M0M5LA0KLSAgICAweDczRDYsIDB4NzNFMywgMHg3M0QyLCAweDc0MDcsIDB4NzNGNSwgMHg3NDI2LCAweDc0MkEsIDB4NzQyOSwNCi0gICAgMHg3NDJFLCAweDc0NjIsIDB4NzQ4OSwgMHg3NDlGLCAweDc1MDEsIDB4NzU2RiwgMHg3NjgyLCAweDc2OUMsDQotICAgIDB4NzY5RSwgMHg3NjlCLCAweDc2QTYsIDB4RkExNywgMHg3NzQ2LCAweDUyQUYsIDB4NzgyMSwgMHg3ODRFLA0KLSAgICAweDc4NjQsIDB4Nzg3QSwgMHg3OTMwLCAweEZBMTgsIDB4RkExOSwgMHhGQTFBLCAweDc5OTQsIDB4RkExQiwNCi0gICAgMHg3OTlCLCAweDdBRDEsIDB4N0FFNywgMHhGQTFDLCAweDdBRUIsIDB4N0I5RSwgMHhGQTFELCAweDdENDgsDQotICAgIDB4N0Q1QywgMHg3REI3LCAweDdEQTAsIDB4N0RENiwgMHg3RTUyLCAweDdGNDcsIDB4N0ZBMSwgMHhGQTFFLA0KLSAgICAweDgzMDEsIDB4ODM2MiwgMHg4MzdGLCAweDgzQzcsIDB4ODNGNiwgMHg4NDQ4LCAweDg0QjQsIDB4ODU1MywNCi0gICAgMHg4NTU5LCAweDg1NkIsIDB4RkExRiwgMHg4NUIwLCAweEZBMjAsIDB4RkEyMSwgMHg4ODA3LCAweDg4RjUsDQotICAgIDB4OEExMiwgMHg4QTM3LCAweDhBNzksIDB4OEFBNywgMHg4QUJFLCAweDhBREYsIDB4RkEyMiwgMHg4QUY2LA0KLSAgICAweDhCNTMsIDB4OEI3RiwgMHg4Q0YwLCAweDhDRjQsIDB4OEQxMiwgMHg4RDc2LCAweEZBMjMsIDB4OEVDRiwNCi0gICAgMHhGQTI0LCAweEZBMjUsIDB4OTA2NywgMHg5MERFLCAweEZBMjYsIDB4OTExNSwgMHg5MTI3LCAweDkxREEsDQotICAgIDB4OTFENywgMHg5MURFLCAweDkxRUQsIDB4OTFFRSwgMHg5MUU0LCAweDkxRTUsIDB4OTIwNiwgMHg5MjEwLA0KLSAgICAweDkyMEEsIDB4OTIzQSwgMHg5MjQwLCAweDkyM0MsIDB4OTI0RSwgMHg5MjU5LCAweDkyNTEsIDB4OTIzOSwNCi0gICAgMHg5MjY3LCAweDkyQTcsIDB4OTI3NywgMHg5Mjc4LCAweDkyRTcsIDB4OTJENywgMHg5MkQ5LCAweDkyRDAsDQotICAgIDB4RkEyNywgMHg5MkQ1LCAweDkyRTAsIDB4OTJEMywgMHg5MzI1LCAweDkzMjEsIDB4OTJGQiwgMHhGQTI4LA0KLSAgICAweDkzMUUsIDB4OTJGRiwgMHg5MzFELCAweDkzMDIsIDB4OTM3MCwgMHg5MzU3LCAweDkzQTQsIDB4OTNDNiwNCi0gICAgMHg5M0RFLCAweDkzRjgsIDB4OTQzMSwgMHg5NDQ1LCAweDk0NDgsIDB4OTU5MiwgMHhGOURDLCAweEZBMjksDQotICAgIDB4OTY5RCwgMHg5NkFGLCAweDk3MzMsIDB4OTczQiwgMHg5NzQzLCAweDk3NEQsIDB4OTc0RiwgMHg5NzUxLA0KLSAgICAweDk3NTUsIDB4OTg1NywgMHg5ODY1LCAweEZBMkEsIDB4RkEyQiwgMHg5OTI3LCAweEZBMkMsIDB4OTk5RSwNCi0gICAgMHg5QTRFLCAweDlBRDksIDB4OUFEQywgMHg5Qjc1LCAweDlCNzIsIDB4OUI4RiwgMHg5QkIxLCAweDlCQkIsDQotICAgIDB4OUMwMCwgMHg5RDcwLCAweDlENkIsIDB4RkEyRCwgMHg5RTE5LCAweDlFRDEsIDB4MDBBQywgMHgwMDVDLA0KLSAgICAweDAwMjAsIDB4MDAyMSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywNCi0gICAgMHgwMDI4LCAweDAwMjksIDB4MDAyQSwgMHgwMDJCLCAweDAwMkMsIDB4MDAyRCwgMHgwMDJFLCAweDAwMkYsDQotICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LA0KLSAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNBLCAweDAwM0IsIDB4MDAzQywgMHgwMDNELCAweDAwM0UsIDB4MDAzRiwNCi0gICAgMHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsDQotICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNEEsIDB4MDA0QiwgMHgwMDRDLCAweDAwNEQsIDB4MDA0RSwgMHgwMDRGLA0KLSAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywNCi0gICAgMHgwMDU4LCAweDAwNTksIDB4MDA1QSwgMHgwMDVCLCAweDAwQTUsIDB4MDA1RCwgMHgwMDVFLCAweDAwNUYsDQotICAgIDB4MDA2MCwgMHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LA0KLSAgICAweDAwNjgsIDB4MDA2OSwgMHgwMDZBLCAweDAwNkIsIDB4MDA2QywgMHgwMDZELCAweDAwNkUsIDB4MDA2RiwNCi0gICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsDQotICAgIDB4MDA3OCwgMHgwMDc5LCAweDAwN0EsIDB4MDA3QiwgMHgwMEE2LCAweDAwN0QsIDB4MDMwMywgMHgwMkJDLA0KLSAgICAweDAwNUMsIDB4MDJCQiwgMHgwMDdDLCAweDAwN0UsIDB4MDBBMSwgMHgwMEEyLCAweDAwQTMsIDB4MjA0NCwNCi0gICAgMHgwMTkyLCAweDAwQTcsIDB4MDBBNCwgMHgyMDFDLCAweDAwQUIsIDB4MjAzOSwgMHgyMDNBLCAweEZCMDEsDQotICAgIDB4RkIwMiwgMHgyMDEyLCAweDIwMjAsIDB4MjAyMSwgMHgwMEI3LCAweDAwQjYsIDB4MjAyMiwgMHgyMDFBLA0KLSAgICAweDIwMUUsIDB4MjAxRCwgMHgwMEJCLCAweDIwMjYsIDB4MjAzMCwgMHgwMEJGLCAweDAzMDEsIDB4MDMwMiwNCi0gICAgMHgwMEFGLCAweDAzMDYsIDB4MDMwNywgMHgwMzA4LCAweDAzMEEsIDB4MDBCOCwgMHgwMzBCLCAweDAzMjgsDQotICAgIDB4MDMwQywgMHgwMzM2LCAweDAwQzYsIDB4MDBBQSwgMHgwMTQxLCAweDAwRDgsIDB4MDE1MiwgMHgwMEJBLA0KLSAgICAweDAwRTYsIDB4MDEzMSwgMHgwMTQyLCAweDAwRjgsIDB4MDE1MywgMHgwMERGLCAweDAwMkQsIDB4MDBBOSwNCi0gICAgMHgwMEFDLCAweDAwQUUsIDB4MDBCMCwgMHgwMEIxLCAweDAwQjIsIDB4MDBCMywgMHgwMEI1LCAweDAwQjksDQotICAgIDB4MDBCQywgMHgwMEJELCAweDAwQkUsIDB4MDBDMCwgMHgwMEMxLCAweDAwQzIsIDB4MDBDMywgMHgwMEM0LA0KLSAgICAweDAwQzUsIDB4MDBDNywgMHgwMEM4LCAweDAwQzksIDB4MDBDQSwgMHgwMENCLCAweDAwQ0MsIDB4MDBDRCwNCi0gICAgMHgwMENFLCAweDAwQ0YsIDB4MDBEMCwgMHgwMEQxLCAweDAwRDIsIDB4MDBEMywgMHgwMEQ0LCAweDAwRDUsDQotICAgIDB4MDBENiwgMHgwMEQ3LCAweDAwRDksIDB4MDBEQSwgMHgwMERCLCAweDAwREMsIDB4MDBERCwgMHgwMERFLA0KLSAgICAweDAwRTAsIDB4MDBFMSwgMHgwMEUyLCAweDAwRTMsIDB4MDBFNCwgMHgwMEU1LCAweDAwRTcsIDB4MDBFOCwNCi0gICAgMHgwMEU5LCAweDAwRUEsIDB4MDBFQiwgMHgwMEVDLCAweDAwRUQsIDB4MDBFRSwgMHgwMEVGLCAweDAwRjAsDQotICAgIDB4MDBGMSwgMHgwMEYyLCAweDAwRjMsIDB4MDBGNCwgMHgwMEY1LCAweDAwRjYsIDB4MDBGNywgMHgwMEY5LA0KLSAgICAweDAwRkEsIDB4MDBGQiwgMHgwMEZDLCAweDAwRkQsIDB4MDBGRSwgMHgwMEZGLCAweDAxNjAsIDB4MDE3OCwNCi0gICAgMHgwMTdELCAweDAzMDUsIDB4MDE2MSwgMHgyMTIyLCAweDAxN0UsIDB4MDAzMCwgMHgyMDAyLCAweDAwMjEsDQotICAgIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsIDB4MDAyOCwgMHgwMDI5LA0KLSAgICAweDAwMkEsIDB4MDAyQiwgMHgwMDJDLCAweDAwMkQsIDB4MDAyRSwgMHgwMDJGLCAweDAwMzAsIDB4MDAzMSwNCi0gICAgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgMHgwMDM4LCAweDAwMzksDQotICAgIDB4MDAzQSwgMHgwMDNCLCAweDAwM0MsIDB4MDAzRCwgMHgwMDNFLCAweDAwM0YsIDB4MDA0MCwgMHgwMDQxLA0KLSAgICAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LCAweDAwNDgsIDB4MDA0OSwNCi0gICAgMHgwMDRBLCAweDAwNEIsIDB4MDA0QywgMHgwMDRELCAweDAwNEUsIDB4MDA0RiwgMHgwMDUwLCAweDAwNTEsDQotICAgIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsIDB4MDA1OCwgMHgwMDU5LA0KLSAgICAweDAwNUEsIDB4MDA1QiwgMHgwMEE1LCAweDAwNUQsIDB4MDA1RSwgMHgwMDVGLCAweDAwNjAsIDB4MDA2MSwNCi0gICAgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywgMHgwMDY4LCAweDAwNjksDQotICAgIDB4MDA2QSwgMHgwMDZCLCAweDAwNkMsIDB4MDA2RCwgMHgwMDZFLCAweDAwNkYsIDB4MDA3MCwgMHgwMDcxLA0KLSAgICAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LCAweDAwNzgsIDB4MDA3OSwNCi0gICAgMHgwMDdBLCAweDAwN0IsIDB4MDA3QywgMHgwMDdELCAweDIwM0UsIDB4RkY0MCwgMHgyMDMyLCAweDAwQTgsDQotICAgIDB4MjAzNiwgMHgwMEM0LCAweDAwRjksIDB4MDBFOSwgMHgwMEVELCAweDAwREYsIDB4MDBFNywgMHgwMEM3LA0KLSAgICAweDAwRDEsIDB4MDBGMSwgMHgwMEEyLCAweDAwQTMsIDB4MDBGMywgMHgwMEZBLCAweDAwQTEsIDB4MDBCRiwNCi0gICAgMHgwMEJELCAweDAwRDYsIDB4MDBEQywgMHgwMEU0LCAweDAwRUIsIDB4MDBFRiwgMHgwMEY2LCAweDAwREMsDQotICAgIDB4MDBFMiwgMHgwMEVBLCAweDAwRUUsIDB4MDBGNCwgMHgwMEZDLCAweDAwRTAsIDB4MDBFOSwgMHgwMEUxLA0KLSAgICAweDAwN0UsIDB4MDAzMCwgMHgwMEFDLCAweDAwNUMsIDB4RkY2MCwgMHhGRjYxLCAweEZGNjIsIDB4RkY2MywNCi0gICAgMHhGRjY0LCAweEZGNjUsIDB4RkY2NiwgMHhGRjY3LCAweEZGNjgsIDB4RkY2OSwgMHhGRjZBLCAweEZGNkIsDQotICAgIDB4RkY2QywgMHhGRjZELCAweEZGNkUsIDB4RkY2RiwgMHhGRjcwLCAweEZGNzEsIDB4RkY3MiwgMHhGRjczLA0KLSAgICAweEZGNzQsIDB4RkY3NSwgMHhGRjc2LCAweEZGNzcsIDB4RkY3OCwgMHhGRjc5LCAweEZGN0EsIDB4RkY3QiwNCi0gICAgMHhGRjdDLCAweEZGN0QsIDB4RkY3RSwgMHhGRjdGLCAweEZGODAsIDB4RkY4MSwgMHhGRjgyLCAweEZGODMsDQotICAgIDB4RkY4NCwgMHhGRjg1LCAweEZGODYsIDB4RkY4NywgMHhGRjg4LCAweEZGODksIDB4RkY4QSwgMHhGRjhCLA0KLSAgICAweEZGOEMsIDB4RkY4RCwgMHhGRjhFLCAweEZGOEYsIDB4RkY5MCwgMHhGRjkxLCAweEZGOTIsIDB4RkY5MywNCi0gICAgMHhGRjk0LCAweEZGOTUsIDB4RkY5NiwgMHhGRjk3LCAweEZGOTgsIDB4RkY5OSwgMHhGRjlBLCAweEZGOUIsDQotICAgIDB4RkY5QywgMHhGRjlELCAweEZGOUUsIDB4RkY5RiwgMHgzMEYwLCAweDMwRjEsIDB4MzBFRSwgMHgzMEFCLA0KLSAgICAweDMwQjEsIDB4MzBGNCwgMHgzMEFDLCAweDMwQUUsIDB4MzBCMCwgMHgzMEIyLCAweDMwQjQsIDB4MzBCNiwNCi0gICAgMHgzMEI4LCAweDMwQkEsIDB4MzBCQywgMHgzMEJFLCAweDMwQzAsIDB4MzBDMiwgMHgzMEM1LCAweDMwQzcsDQotICAgIDB4MzBDOSwgMHgzMEQwLCAweDMwRDEsIDB4MzBEMywgMHgzMEQ0LCAweDMwRDYsIDB4MzBENywgMHgzMEQ5LA0KLSAgICAweDMwREEsIDB4MzBEQywgMHgzMERELCAweEZGNjAsIDB4MzA5MiwgMHgzMDQxLCAweDMwNDMsIDB4MzA0NSwNCi0gICAgMHgzMDQ3LCAweDMwNDksIDB4MzA4MywgMHgzMDg1LCAweDMwODcsIDB4MzA2MywgMHgzMDQyLCAweDMwNDQsDQotICAgIDB4MzA0NiwgMHgzMDQ4LCAweDMwNEEsIDB4MzA0QiwgMHgzMDRELCAweDMwNEYsIDB4MzA1MSwgMHgzMDUzLA0KLSAgICAweDMwNTUsIDB4MzA1NywgMHgzMDU5LCAweDMwNUIsIDB4MzA1RCwgMHgzMDVGLCAweDMwNjEsIDB4MzA2NCwNCi0gICAgMHgzMDY2LCAweDMwNjgsIDB4MzA2QSwgMHgzMDZCLCAweDMwNkMsIDB4MzA2RCwgMHgzMDZFLCAweDMwNkYsDQotICAgIDB4MzA3MiwgMHgzMDc1LCAweDMwNzgsIDB4MzA3QiwgMHgzMDdFLCAweDMwN0YsIDB4MzA4MCwgMHgzMDgxLA0KLSAgICAweDMwODIsIDB4MzA4NCwgMHgzMDg2LCAweDMwODgsIDB4MzA4OSwgMHgzMDhBLCAweDMwOEIsIDB4MzA4QywNCi0gICAgMHgzMDhELCAweDMwOEYsIDB4MzA5MywgMHgzMDkwLCAweDMwOTEsIDB4MzA4RSwgMHgzMDRDLCAweDMwNEUsDQotICAgIDB4MzA1MCwgMHgzMDUyLCAweDMwNTQsIDB4MzA1NiwgMHgzMDY4LCAweDMwNUEsIDB4MzA1QywgMHgzMDVFLA0KLSAgICAweDMwNjAsIDB4MzA2MiwgMHgzMDY1LCAweDMwNjcsIDB4MzA2OSwgMHgzMDcwLCAweDMwNzEsIDB4MzA3MywNCi0gICAgMHgzMDc0LCAweDMwNzYsIDB4MzA3NywgMHgzMDc5LCAweDMwN0EsIDB4MzA3QywgMHgzMDdELCAweDMwMUQsDQotICAgIDB4MzAxRSwgMHgwMDVCLCAweDAwNUQsIDB4MzAwOCwgMHgzMDA5LCAweDMwMEEsIDB4MzAwQiwgMHgzMDBFLA0KLSAgICAweDMwMEYsIDB4MzAxMCwgMHgzMDExLCAweDIwMTIsIDB4RkY2MCwgMHgyNTAwLCAweDI1MDEsIDB4MjUwMiwNCi0gICAgMHgyNTAzLCAweDI1MDQsIDB4MjUwNSwgMHgyNTA2LCAweDI1MDcsIDB4MjUwOCwgMHgyNTA5LCAweDI1MEEsDQotICAgIDB4MjUwQiwgMHgyNTBDLCAweDI1MEQsIDB4MjUwRSwgMHgyNTBGLCAweDI1MTAsIDB4MjUxMSwgMHgyNTEyLA0KLSAgICAweDI1MTMsIDB4MjUxNCwgMHgyNTE1LCAweDI1MTYsIDB4MjUxNywgMHgyNTE4LCAweDI1MTksIDB4MjUxQSwNCi0gICAgMHgyNTFCLCAweDI1MUMsIDB4MjUxRCwgMHgyNTFFLCAweDI1MUYsIDB4MjUyMCwgMHgyNTIxLCAweDI1MjIsDQotICAgIDB4MjUyMywgMHgyNTI0LCAweDI1MjUsIDB4MjUyNiwgMHgyNTI3LCAweDI1MjgsIDB4MjUyOSwgMHgyNTJBLA0KLSAgICAweDI1MkIsIDB4MjUyQywgMHgyNTJELCAweDI1MkUsIDB4MjUyRiwgMHgyNTMwLCAweDI1MzEsIDB4MjUzMiwNCi0gICAgMHgyNTMzLCAweDI1MzQsIDB4MjUzNSwgMHgyNTM2LCAweDI1MzcsIDB4MjUzOCwgMHgyNTM5LCAweDI1M0EsDQotICAgIDB4MjUzQiwgMHgyNTNDLCAweDI1M0QsIDB4MjUzRSwgMHgyNTNGLCAweDI1NDAsIDB4MjU0MSwgMHgyNTQyLA0KLSAgICAweDI1NDMsIDB4MjU0NCwgMHgyNTQ1LCAweDI1NDYsIDB4MjU0NywgMHgyNTQ4LCAweDI1NDksIDB4MjU0QSwNCi0gICAgMHgyNTRCLCAweDI1QjIsIDB4MjBBQywgMHgyMTI2LCAweDIwMzIsIDB4MjAzMywgMHhGQjAwLCAweEZCMDMsDQotICAgIDB4RkIwNCwgMHgwMTAxLCAweDAxMkIsIDB4MDE2QiwgMHgwMTEzLCAweDAxNEQsIDB4MDEwMCwgMHgwMTJBLA0KLSAgICAweDAxNkEsIDB4MDExMiwgMHgwMTRDLCAweDIxNUIsIDB4MjE1QywgMHgyMTVELCAweDIxNUUsIDB4MjE1MywNCi0gICAgMHgyMTU0LCAweDIwNzAsIDB4MjA3NCwgMHgyMDc1LCAweDIwNzYsIDB4MjA3NywgMHgyMDc4LCAweDIwNzksDQotICAgIDB4MjA4MCwgMHgyMDgxLCAweDIwODIsIDB4MjA4MywgMHgyMDg0LCAweDIwODUsIDB4MjA4NiwgMHgyMDg3LA0KLSAgICAweDIwODgsIDB4MjA4OSwgMHgwMUNELCAweDAxMUEsIDB4MDAwMCwgMHgxRUJDLCAweDAxQ0YsIDB4MDAwMCwNCi0gICAgMHgwMTI4LCAweDAxRDEsIDB4MDAwMCwgMHgwMUQzLCAweDAxNkUsIDB4MDE2OCwgMHgwMUNFLCAweDAxMUIsDQotICAgIDB4MDAwMCwgMHgxRUJELCAweDAxRDAsIDB4MDAwMCwgMHgwMTI5LCAweDAxRDIsIDB4MDAwMCwgMHgwMUQ0LA0KLSAgICAweDAxNkYsIDB4MDE2OSwgMHgwMjUxLCAweDAyNTEsIDB4MDI1MSwgMHgwMUZELCAweDAwRTYsIDB4MDI1NCwNCi0gICAgMHgwMjU0LCAweDAyNTQsIDB4MDI1OSwgMHgwMjU5LCAweDAyNTksIDB4MDI1QSwgMHgwMjVBLCAweDAyNUEsDQotICAgIDB4MDI1QiwgMHgwMjVCLCAweDAyNUIsIDB4MDA2QSwgMHgwMTRCLCAweDAyNzUsIDB4MDI4QywgMHgwMjhDLA0KLSAgICAweDAyOEMsIDB4MDI5MiwgMHgwMjgzLCAweDAyRDAsIDB4MDAyMCwgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywNCi0gICAgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LCAweDAwMjgsIDB4MDAyOSwgMHgwMDJBLCAweDAwMkIsDQotICAgIDB4MDAyQywgMHgwMDJELCAweDAwMkUsIDB4MDAyRiwgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLA0KLSAgICAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsIDB4MDAzOCwgMHgwMDM5LCAweDAwM0EsIDB4MDAzQiwNCi0gICAgMHgwMDNDLCAweDAwM0QsIDB4MDAzRSwgMHgwMDNGLCAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsDQotICAgIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywgMHgwMDQ4LCAweDAwNDksIDB4MDA0QSwgMHgwMDRCLA0KLSAgICAweDAwNEMsIDB4MDA0RCwgMHgwMDRFLCAweDAwNEYsIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywNCi0gICAgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LCAweDAwNTgsIDB4MDA1OSwgMHgwMDVBLCAweDAwNUIsDQotICAgIDB4MDBBNSwgMHgwMDVELCAweDAwNUUsIDB4MDA1RiwgMHgwMDYwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLA0KLSAgICAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsIDB4MDA2OCwgMHgwMDY5LCAweDAwNkEsIDB4MDA2QiwNCi0gICAgMHgwMDZDLCAweDAwNkQsIDB4MDA2RSwgMHgwMDZGLCAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsDQotICAgIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywgMHgwMDc4LCAweDAwNzksIDB4MDA3QSwgMHgwMDdCLA0KLSAgICAweDAwQTYsIDB4MDA3RCwgMHgwMzAzLCAweDAyQkMsIDB4MDA1QywgMHgwMkJCLCAweDAwN0MsIDB4MDA3RSwNCi0gICAgMHgwMEExLCAweDAwQTIsIDB4MDBBMywgMHgyMDQ0LCAweDAxOTIsIDB4MDBBNywgMHgwMEE0LCAweDIwMUMsDQotICAgIDB4MDBBQiwgMHgyMDM5LCAweDIwM0EsIDB4RkIwMSwgMHhGQjAyLCAweDIwMTIsIDB4MjAyMCwgMHgyMDIxLA0KLSAgICAweDAwQjcsIDB4MDBCNiwgMHgyMDIyLCAweDIwMUEsIDB4MjAxRSwgMHgyMDFELCAweDAwQkIsIDB4MjAyNiwNCi0gICAgMHgyMDMwLCAweDAwQkYsIDB4MDMwMSwgMHgwMzAyLCAweDAwQUYsIDB4MDMwNiwgMHgwMzA3LCAweDAzMDgsDQotICAgIDB4MDMwQSwgMHgwMEI4LCAweDAzMEIsIDB4MDMyOCwgMHgwMzBDLCAweDAzMzYsIDB4MDBDNiwgMHgwMEFBLA0KLSAgICAweDAxNDEsIDB4MDBEOCwgMHgwMTUyLCAweDAwQkEsIDB4MDBFNiwgMHgwMTMxLCAweDAxNDIsIDB4MDBGOCwNCi0gICAgMHgwMTUzLCAweDAwREYsIDB4MDAyRCwgMHgwMEE5LCAweDAwQUMsIDB4MDBBRSwgMHgwMEIwLCAweDAwQjEsDQotICAgIDB4MDBCMiwgMHgwMEIzLCAweDAwQjUsIDB4MDBCOSwgMHgwMEJDLCAweDAwQkQsIDB4MDBCRSwgMHgwMEMwLA0KLSAgICAweDAwQzEsIDB4MDBDMiwgMHgwMEMzLCAweDAwQzQsIDB4MDBDNSwgMHgwMEM3LCAweDAwQzgsIDB4MDBDOSwNCi0gICAgMHgwMENBLCAweDAwQ0IsIDB4MDBDQywgMHgwMENELCAweDAwQ0UsIDB4MDBDRiwgMHgwMEQwLCAweDAwRDEsDQotICAgIDB4MDBEMiwgMHgwMEQzLCAweDAwRDQsIDB4MDBENSwgMHgwMEQ2LCAweDAwRDcsIDB4MDBEOSwgMHgwMERBLA0KLSAgICAweDAwREIsIDB4MDBEQywgMHgwMERELCAweDAwREUsIDB4MDBFMCwgMHgwMEUxLCAweDAwRTIsIDB4MDBFMywNCi0gICAgMHgwMEU0LCAweDAwRTUsIDB4MDBFNywgMHgwMEU4LCAweDAwRTksIDB4MDBFQSwgMHgwMEVCLCAweDAwRUMsDQotICAgIDB4MDBFRCwgMHgwMEVFLCAweDAwRUYsIDB4MDBGMCwgMHgwMEYxLCAweDAwRjIsIDB4MDBGMywgMHgwMEY0LA0KLSAgICAweDAwRjUsIDB4MDBGNiwgMHgwMEY3LCAweDAwRjksIDB4MDBGQSwgMHgwMEZCLCAweDAwRkMsIDB4MDBGRCwNCi0gICAgMHgwMEZFLCAweDAwRkYsIDB4MDE2MCwgMHgwMTc4LCAweDAxN0QsIDB4MDMwNSwgMHgwMTYxLCAweDIxMjIsDQotICAgIDB4MDE3RSwgMHgwMDMwLCAweDIwQUMsIDB4MjEyNiwgMHgyMDMyLCAweDIwMzMsIDB4RkIwMCwgMHhGQjAzLA0KLSAgICAweEZCMDQsIDB4MDEwMSwgMHgwMTJCLCAweDAxNkIsIDB4MDExMywgMHgwMTRELCAweDAxMDAsIDB4MDEyQSwNCi0gICAgMHgwMTZBLCAweDAxMTIsIDB4MDE0QywgMHgyMTVCLCAweDIxNUMsIDB4MjE1RCwgMHgyMTVFLCAweDIxNTMsDQotICAgIDB4MjE1NCwgMHgyMDcwLCAweDIwNzQsIDB4MjA3NSwgMHgyMDc2LCAweDIwNzcsIDB4MjA3OCwgMHgyMDc5LA0KLSAgICAweDIwODAsIDB4MjA4MSwgMHgyMDgyLCAweDIwODMsIDB4MjA4NCwgMHgyMDg1LCAweDIwODYsIDB4MjA4NywNCi0gICAgMHgyMDg4LCAweDIwODksIDB4MDFDRCwgMHgwMTFBLCAweDAwMDAsIDB4MUVCQywgMHgwMUNGLCAweDAwMDAsDQotICAgIDB4MDEyOCwgMHgwMUQxLCAweDAwMDAsIDB4MDFEMywgMHgwMTZFLCAweDAxNjgsIDB4MDFDRSwgMHgwMTFCLA0KLSAgICAweDAwMDAsIDB4MUVCRCwgMHgwMUQwLCAweDAwMDAsIDB4MDEyOSwgMHgwMUQyLCAweDAwMDAsIDB4MDFENCwNCi0gICAgMHgwMTZGLCAweDAxNjksIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsDQotICAgIDB4MDAzNiwgMHgwMDM3LCAweDAwMzgsIDB4MDAzOSwgMHgwMzM2LCAweDAwMkQsIDB4MDAzRCwgMHgwMDJDLA0KLSAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDJFLCAweDAwMkYsIDB4MDAzQSwgMHgwMDNCLCAweDAwMzAsIDB4MDAzMSwNCi0gICAgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgMHgwMDM4LCAweDAwMzksDQotICAgIDB4MDMzNiwgMHgwMDJELCAweDAwM0QsIDB4MDAyQywgMHgwMDI4LCAweDAwMjksIDB4MDAyRSwgMHgwMDJGLA0KLSAgICAweDAwM0EsIDB4MDAzQiwgMHgwMEI3LCAweDIwQUMsIDB4MDAwMCwgMHgyMTUzLCAweDIxNTQsIDB4MDBCRSwNCi0gICAgMHgyMTU1LCAweDIxNTYsIDB4MjE1NywgMHgyMTU4LCAweDIxNTksIDB4MjE1QSwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMTVCLCAweDIxNUMsIDB4MjE1RCwgMHgyMTVFLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywNCi0gICAgMHgwMDM4LCAweDAwMzksIDB4MDAzMCwgMHgyMTYzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIxNzAsIDB4MjE3MSwNCi0gICAgMHgyMTcyLCAweDIxNzMsIDB4MjE3NCwgMHgyMTc1LCAweDIxNzYsIDB4MjE3NywgMHgyMTc4LCAweDIxNzksDQotICAgIDB4MjE3QSwgMHgyMTdCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIxNjAsIDB4MjE2MSwgMHgyMTYyLA0KLSAgICAweDIxNjMsIDB4MjE2NCwgMHgyMTY1LCAweDIxNjYsIDB4MjE2NywgMHgyMTY4LCAweDIxNjksIDB4MjE2QSwNCi0gICAgMHgyMTZCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsDQotICAgIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsIDB4MDA0OCwgMHgwMDQ5LCAweDAwNEEsIDB4MDA0QiwgMHgwMDRDLA0KLSAgICAweDAwNEQsIDB4MDA0RSwgMHgwMDRGLCAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwNCi0gICAgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywgMHgwMDU4LCAweDAwNTksIDB4MDA1QSwgMHgzMDQyLCAweDMwNDQsDQotICAgIDB4MzA0NiwgMHgzMDQ4LCAweDMwNEEsIDB4MzA0QiwgMHgzMDRELCAweDMwNEYsIDB4MzA1MSwgMHgzMDUzLA0KLSAgICAweDMwNTUsIDB4MzA1NywgMHgzMDU5LCAweDMwNUIsIDB4MzA1RCwgMHgzMDVGLCAweDMwNjEsIDB4MzA2NCwNCi0gICAgMHgzMDY2LCAweDMwNjgsIDB4MzA2QSwgMHgzMDZCLCAweDMwNkMsIDB4MzA2RCwgMHgzMDZFLCAweDMwNkYsDQotICAgIDB4MzA3MiwgMHgzMDc1LCAweDMwNzgsIDB4MzA3QiwgMHgzMDdFLCAweDMwN0YsIDB4MzA4MCwgMHgzMDgxLA0KLSAgICAweDMwODIsIDB4MzA4NCwgMHgzMDg2LCAweDMwODgsIDB4MzA4OSwgMHgzMDhBLCAweDMwOEIsIDB4MzA4QywNCi0gICAgMHgzMDhELCAweDMwOEYsIDB4MzA5MCwgMHgzMDkxLCAweDMwOTIsIDB4MzA5MywgMHgzMEEyLCAweDMwQTQsDQotICAgIDB4MzBBNiwgMHgzMEE4LCAweDMwQUEsIDB4MzBBQiwgMHgzMEFELCAweDMwQUYsIDB4MzBCMSwgMHgzMEIzLA0KLSAgICAweDMwQjUsIDB4MzBCNywgMHgzMEI5LCAweDMwQkIsIDB4MzBCRCwgMHgzMEJGLCAweDMwQzEsIDB4MzBDNCwNCi0gICAgMHgzMEM2LCAweDMwQzgsIDB4MzBDQSwgMHgzMENCLCAweDMwQ0MsIDB4MzBDRCwgMHgzMENFLCAweDMwQ0YsDQotICAgIDB4MzBEMiwgMHgzMEQ1LCAweDMwRDgsIDB4MzBEQiwgMHgzMERFLCAweDMwREYsIDB4MzBFMCwgMHgzMEUxLA0KLSAgICAweDMwRTIsIDB4MzBFNCwgMHgzMEU2LCAweDMwRTgsIDB4MzBFOSwgMHgzMEVBLCAweDMwRUIsIDB4MzBFQywNCi0gICAgMHgzMEVELCAweDMwRUYsIDB4MzBGMCwgMHgzMEYxLCAweDMwRjIsIDB4MzBGMywgMHgzMjIwLCAweDMyMjEsDQotICAgIDB4MzIyMiwgMHgzMjIzLCAweDMyMjQsIDB4MzIyNSwgMHgzMjI2LCAweDMyMjcsIDB4MzIyOCwgMHgzMjI5LA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4NTVCNiwgMHg1NDA4LCAweDZDRUIsIDB4NTU0RiwgMHg3QjU0LCAweDRGOEIsDQotICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LA0KLSAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwNCi0gICAgMHgwMDM2LCAweDAwMzcsIDB4MDAzOCwgMHgwMDM5LCAweDMwNjMsIDB4NjI0RCwgMHgzMDA3LCAweDRFMDAsDQotICAgIDB4NEU4QywgMHg0RTA5LCAweDU2REIsIDB4NEU5NCwgMHg1MTZELCAweDRFMDMsIDB4NTE2QiwgMHg0RTVELA0KLSAgICAweDUzNDEsIDB4MzAwNywgMHg0RTAwLCAweDRFOEMsIDB4NEUwOSwgMHg1NkRCLCAweDRFOTQsIDB4NTE2RCwNCi0gICAgMHg0RTAzLCAweDUxNkIsIDB4NEU1RCwgMHg1MzQxLCAweDMwMDcsIDB4NEUwMCwgMHg0RThDLCAweDRFMDksDQotICAgIDB4NTZEQiwgMHg0RTk0LCAweDUxNkQsIDB4NEUwMywgMHg1MTZCLCAweDRFNUQsIDB4MzA2NCwgMHg2MjRELA0KLSAgICAweDRFMDAsIDB4NEU4QywgMHg0RTA5LCAweDU2REIsIDB4NEU5NCwgMHg1MTZELCAweDRFMDMsIDB4NTE2QiwNCi0gICAgMHg0RTVELCAweDUzNDEsIDB4MzAwNywgMHg0RTAwLCAweDRFOEMsIDB4NEUwOSwgMHg1NkRCLCAweDRFOTQsDQotICAgIDB4NTE2RCwgMHg0RTAzLCAweDUxNkIsIDB4NEU1RCwgMHg1MzQxLCAweDMwQjMsIDB4MzA2MywgMHgzMEMzLA0KLSAgICAweDMwQTksIDB4MDAwMCwgMHgwMDAwLCAweDI0NjAsIDB4MjQ2MSwgMHgyNDYyLCAweDI0NjMsIDB4MjQ2NCwNCi0gICAgMHgyNDY1LCAweDI0NjYsIDB4MjQ2NywgMHgyNDY4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDI0RDAsIDB4MjREMSwgMHgyNEQyLCAweDI0RDMsIDB4MjRENCwgMHgyNEQ1LCAweDI0RDYsDQotICAgIDB4MjRENywgMHgyNEQ4LCAweDI0RDksIDB4MjREQSwgMHgyNERCLCAweDI0REMsIDB4MjRERCwgMHgyNERFLA0KLSAgICAweDI0REYsIDB4MjRFMCwgMHgyNEUxLCAweDI0RTIsIDB4MjRFMywgMHgyNEU0LCAweDI0RTUsIDB4MjRFNiwNCi0gICAgMHgyNEU3LCAweDI0RTgsIDB4MjRFOSwgMHgyNEI2LCAweDI0QjcsIDB4MjRCOCwgMHgyNEI5LCAweDI0QkEsDQotICAgIDB4MjRCQiwgMHgyNEJDLCAweDI0QkQsIDB4MjRCRSwgMHgyNEJGLCAweDI0QzAsIDB4MjRDMSwgMHgyNEMyLA0KLSAgICAweDI0QzMsIDB4MjRDNCwgMHgyNEM1LCAweDI0QzYsIDB4MjRDNywgMHgyNEM4LCAweDI0QzksIDB4MjRDQSwNCi0gICAgMHgyNENCLCAweDI0Q0MsIDB4MjRDRCwgMHgyNENFLCAweDI0Q0YsIDB4MzA0MiwgMHgzMDQ0LCAweDMwNDYsDQotICAgIDB4MzA0OCwgMHgzMDRBLCAweDMwNEIsIDB4MzA0RCwgMHgzMDRGLCAweDMwNTEsIDB4MzA1MywgMHgzMDU1LA0KLSAgICAweDMwNTcsIDB4MzA1OSwgMHgzMDVCLCAweDMwNUQsIDB4MzA1RiwgMHgzMDYxLCAweDMwNjQsIDB4MzA2NiwNCi0gICAgMHgzMDY4LCAweDMwNkEsIDB4MzA2QiwgMHgzMDZDLCAweDMwNkQsIDB4MzA2RSwgMHgzMDZGLCAweDMwNzIsDQotICAgIDB4MzA3NSwgMHgzMDc4LCAweDMwN0IsIDB4MzA3RSwgMHgzMDdGLCAweDMwODAsIDB4MzA4MSwgMHgzMDgyLA0KLSAgICAweDMwODQsIDB4MzA4NiwgMHgzMDg4LCAweDMwODksIDB4MzA4QSwgMHgzMDhCLCAweDMwOEMsIDB4MzA4RCwNCi0gICAgMHgzMDhGLCAweDMwOTAsIDB4MzA5MSwgMHgzMDkyLCAweDMwOTMsIDB4MzJEMCwgMHgzMkQxLCAweDMyRDIsDQotICAgIDB4MzJEMywgMHgzMkQ0LCAweDMyRDUsIDB4MzJENiwgMHgzMkQ3LCAweDMyRDgsIDB4MzJEOSwgMHgzMkRBLA0KLSAgICAweDMyREIsIDB4MzJEQywgMHgzMkRELCAweDMyREUsIDB4MzJERiwgMHgzMkUwLCAweDMyRTEsIDB4MzJFMiwNCi0gICAgMHgzMkUzLCAweDMyRTQsIDB4MzJFNSwgMHgzMkU2LCAweDMyRTcsIDB4MzJFOCwgMHgzMkU5LCAweDMyRUEsDQotICAgIDB4MzJFQiwgMHgzMkVDLCAweDMyRUQsIDB4MzJFRSwgMHgzMkVGLCAweDMyRjAsIDB4MzJGMSwgMHgzMkYyLA0KLSAgICAweDMyRjMsIDB4MzJGNCwgMHgzMkY1LCAweDMyRjYsIDB4MzJGNywgMHgzMkY4LCAweDMyRjksIDB4MzJGQSwNCi0gICAgMHgzMkZCLCAweDMyRkMsIDB4MzJGRCwgMHgzMkZFLCAweDMwRjMsIDB4MzI4MCwgMHgzMjgxLCAweDMyODIsDQotICAgIDB4MzI4MywgMHgzMjg0LCAweDMyODUsIDB4MzI4NiwgMHgzMjg3LCAweDMyODgsIDB4MzI4OSwgMHgzMjkwLA0KLSAgICAweDMyOEEsIDB4MzI4QiwgMHgzMjhDLCAweDMyOEQsIDB4MzI4RSwgMHgzMjhGLCAweDhBQkYsIDB4MzI5RiwNCi0gICAgMHg1MjZGLCAweDZFMUIsIDB4NkExOSwgMHg2QjIwLCAweDU3RkEsIDB4Nzk4MSwgMHgzMkEwLCAweDMyQTEsDQotICAgIDB4MzI5QiwgMHgzMjlBLCAweDMyQTMsIDB4MzJBMiwgMHgzMjk3LCAweDUxRkEsIDB4MzI5QywgMHgzMjk1LA0KLSAgICAweDZFMDgsIDB4NTg5NywgMHg1NTRGLCAweDdCNTQsIDB4NEY4QiwgMHg5NkZCLCAweDI1Q0MsIDB4MDAzMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsDQotICAgIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywgMHgwMDY4LCAweDAwNjksIDB4MDA2QSwgMHgwMDZCLA0KLSAgICAweDAwNkMsIDB4MDA2RCwgMHgwMDZFLCAweDAwNkYsIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywNCi0gICAgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LCAweDAwNzgsIDB4MDA3OSwgMHgwMDdBLCAweDAwNDEsDQotICAgIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsIDB4MDA0OCwgMHgwMDQ5LA0KLSAgICAweDAwNEEsIDB4MDA0QiwgMHgwMDRDLCAweDAwNEQsIDB4MDA0RSwgMHgwMDRGLCAweDAwNTAsIDB4MDA1MSwNCi0gICAgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywgMHgwMDU4LCAweDAwNTksDQotICAgIDB4MDA1QSwgMHgzMDQyLCAweDMwNDQsIDB4MzA0NiwgMHgzMDQ4LCAweDMwNEEsIDB4MzA0QiwgMHgzMDRELA0KLSAgICAweDMwNEYsIDB4MzA1MSwgMHgzMDUzLCAweDMwNTUsIDB4MzA1NywgMHgzMDU5LCAweDMwNUIsIDB4MzA1RCwNCi0gICAgMHgzMDVGLCAweDMwNjEsIDB4MzA2NCwgMHgzMDY2LCAweDMwNjgsIDB4MzA2QSwgMHgzMDZCLCAweDMwNkMsDQotICAgIDB4MzA2RCwgMHgzMDZFLCAweDMwNkYsIDB4MzA3MiwgMHgzMDc1LCAweDMwNzgsIDB4MzA3QiwgMHgzMDdFLA0KLSAgICAweDMwN0YsIDB4MzA4MCwgMHgzMDgxLCAweDMwODIsIDB4MzA4NCwgMHgzMDg2LCAweDMwODgsIDB4MzA4OSwNCi0gICAgMHgzMDhBLCAweDMwOEIsIDB4MzA4QywgMHgzMDhELCAweDMwOEYsIDB4MzA5MCwgMHgzMDkxLCAweDMwOTIsDQotICAgIDB4MzA5MywgMHgzMEEyLCAweDMwQTQsIDB4MzBBNiwgMHgzMEE4LCAweDMwQUEsIDB4MzBBQiwgMHgzMEFELA0KLSAgICAweDMwQUYsIDB4MzBCMSwgMHgzMEIzLCAweDMwQjUsIDB4MzBCNywgMHgzMEI5LCAweDMwQkIsIDB4MzBCRCwNCi0gICAgMHgzMEJGLCAweDMwQzEsIDB4MzBDNCwgMHgzMEM2LCAweDMwQzgsIDB4MzBDQSwgMHgzMENCLCAweDMwQ0MsDQotICAgIDB4MzBDRCwgMHgzMENFLCAweDMwQ0YsIDB4MzBEMiwgMHgzMEQ1LCAweDMwRDgsIDB4MzBEQiwgMHgzMERFLA0KLSAgICAweDMwREYsIDB4MzBFMCwgMHgzMEUxLCAweDMwRTIsIDB4MzBFNCwgMHgzMEU2LCAweDMwRTgsIDB4MzBFOSwNCi0gICAgMHgzMEVBLCAweDMwRUIsIDB4MzBFQywgMHgzMEVELCAweDMwRUYsIDB4MzBGMCwgMHgzMEYxLCAweDMwRjIsDQotICAgIDB4MzBGMywgMHg2NUU1LCAweDY3MDgsIDB4NzA2QiwgMHg2QzM0LCAweDY3MjgsIDB4OTFEMSwgMHg1NzFGLA0KLSAgICAweDU1NEYsIDB4N0I1NCwgMHg0RjhCLCAweDI1Q0YsIDB4MDAzMCwgMHgwMDAwLCAweDAwMzEsIDB4MDAwMCwNCi0gICAgMHgwMDMyLCAweDAwMDAsIDB4MDAzMywgMHgwMDAwLCAweDAwMzQsIDB4MDAwMCwgMHgwMDM1LCAweDAwMDAsDQotICAgIDB4MDAzNiwgMHgwMDAwLCAweDAwMzcsIDB4MDAwMCwgMHgwMDM4LCAweDAwMDAsIDB4MDAzOSwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LA0KLSAgICAweDAwNjYsIDB4MDA2NywgMHgwMDY4LCAweDAwNjksIDB4MDA2QSwgMHgwMDZCLCAweDAwNkMsIDB4MDA2RCwNCi0gICAgMHgwMDZFLCAweDAwNkYsIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsDQotICAgIDB4MDA3NiwgMHgwMDc3LCAweDAwNzgsIDB4MDA3OSwgMHgwMDdBLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLA0KLSAgICAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsIDB4MDA0OCwgMHgwMDQ5LCAweDAwNEEsIDB4MDA0QiwNCi0gICAgMHgwMDRDLCAweDAwNEQsIDB4MDA0RSwgMHgwMDRGLCAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsDQotICAgIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywgMHgwMDU4LCAweDAwNTksIDB4MDA1QSwgMHgzMDQyLA0KLSAgICAweDMwNDQsIDB4MzA0NiwgMHgzMDQ4LCAweDMwNEEsIDB4MzA0QiwgMHgzMDRELCAweDMwNEYsIDB4MzA1MSwNCi0gICAgMHgzMDUzLCAweDMwNTUsIDB4MzA1NywgMHgzMDU5LCAweDMwNUIsIDB4MzA1RCwgMHgzMDVGLCAweDMwNjEsDQotICAgIDB4MzA2NCwgMHgzMDY2LCAweDMwNjgsIDB4MzA2QSwgMHgzMDZCLCAweDMwNkMsIDB4MzA2RCwgMHgzMDZFLA0KLSAgICAweDMwNkYsIDB4MzA3MiwgMHgzMDc1LCAweDMwNzgsIDB4MzA3QiwgMHgzMDdFLCAweDMwN0YsIDB4MzA4MCwNCi0gICAgMHgzMDgxLCAweDMwODIsIDB4MzA4NCwgMHgzMDg2LCAweDMwODgsIDB4MzA4OSwgMHgzMDhBLCAweDMwOEIsDQotICAgIDB4MzA4QywgMHgzMDhELCAweDMwOEYsIDB4MzA5MCwgMHgzMDkxLCAweDMwOTIsIDB4MzA5MywgMHgzMEEyLA0KLSAgICAweDMwQTQsIDB4MzBBNiwgMHgzMEE4LCAweDMwQUEsIDB4MzBBQiwgMHgzMEFELCAweDMwQUYsIDB4MzBCMSwNCi0gICAgMHgzMEIzLCAweDMwQjUsIDB4MzBCNywgMHgzMEI5LCAweDMwQkIsIDB4MzBCRCwgMHgzMEJGLCAweDMwQzEsDQotICAgIDB4MzBDNCwgMHgzMEM2LCAweDMwQzgsIDB4MzBDQSwgMHgzMENCLCAweDMwQ0MsIDB4MzBDRCwgMHgzMENFLA0KLSAgICAweDMwQ0YsIDB4MzBEMiwgMHgzMEQ1LCAweDMwRDgsIDB4MzBEQiwgMHgzMERFLCAweDMwREYsIDB4MzBFMCwNCi0gICAgMHgzMEUxLCAweDMwRTIsIDB4MzBFNCwgMHgzMEU2LCAweDMwRTgsIDB4MzBFOSwgMHgzMEVBLCAweDMwRUIsDQotICAgIDB4MzBFQywgMHgzMEVELCAweDMwRUYsIDB4MzBGMCwgMHgzMEYxLCAweDMwRjIsIDB4MzBGMywgMHg2NUU1LA0KLSAgICAweDY3MDgsIDB4NzA2QiwgMHg2QzM0LCAweDY3MjgsIDB4OTFEMSwgMHg1NzFGLCAweDhDQTAsIDB4NTJERCwNCi0gICAgMHg1NTRGLCAweDdCNTQsIDB4NEY4QiwgMHgyNUExLCAweDI1QTEsIDB4MDAzMCwgMHgwMDAwLCAweDAwMzEsDQotICAgIDB4MDAwMCwgMHgwMDMyLCAweDAwMDAsIDB4MDAzMywgMHgwMDAwLCAweDAwMzQsIDB4MDAwMCwgMHgwMDM1LA0KLSAgICAweDAwMDAsIDB4MDAzNiwgMHgwMDAwLCAweDAwMzcsIDB4MDAwMCwgMHgwMDM4LCAweDAwMDAsIDB4MDAzOSwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwNCi0gICAgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywgMHgwMDY4LCAweDAwNjksIDB4MDA2QSwgMHgwMDZCLCAweDAwNkMsDQotICAgIDB4MDA2RCwgMHgwMDZFLCAweDAwNkYsIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LA0KLSAgICAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LCAweDAwNzgsIDB4MDA3OSwgMHgwMDdBLCAweDAwNDEsIDB4MDA0MiwNCi0gICAgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsIDB4MDA0OCwgMHgwMDQ5LCAweDAwNEEsDQotICAgIDB4MDA0QiwgMHgwMDRDLCAweDAwNEQsIDB4MDA0RSwgMHgwMDRGLCAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLA0KLSAgICAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywgMHgwMDU4LCAweDAwNTksIDB4MDA1QSwNCi0gICAgMHgzMDQyLCAweDMwNDQsIDB4MzA0NiwgMHgzMDQ4LCAweDMwNEEsIDB4MzA0QiwgMHgzMDRELCAweDMwNEYsDQotICAgIDB4MzA1MSwgMHgzMDUzLCAweDMwNTUsIDB4MzA1NywgMHgzMDU5LCAweDMwNUIsIDB4MzA1RCwgMHgzMDVGLA0KLSAgICAweDMwNjEsIDB4MzA2NCwgMHgzMDY2LCAweDMwNjgsIDB4MzA2QSwgMHgzMDZCLCAweDMwNkMsIDB4MzA2RCwNCi0gICAgMHgzMDZFLCAweDMwNkYsIDB4MzA3MiwgMHgzMDc1LCAweDMwNzgsIDB4MzA3QiwgMHgzMDdFLCAweDMwN0YsDQotICAgIDB4MzA4MCwgMHgzMDgxLCAweDMwODIsIDB4MzA4NCwgMHgzMDg2LCAweDMwODgsIDB4MzA4OSwgMHgzMDhBLA0KLSAgICAweDMwOEIsIDB4MzA4QywgMHgzMDhELCAweDMwOEYsIDB4MzA5MCwgMHgzMDkxLCAweDMwOTIsIDB4MzA5MywNCi0gICAgMHgzMEEyLCAweDMwQTQsIDB4MzBBNiwgMHgzMEE4LCAweDMwQUEsIDB4MzBBQiwgMHgzMEFELCAweDMwQUYsDQotICAgIDB4MzBCMSwgMHgzMEIzLCAweDMwQjUsIDB4MzBCNywgMHgzMEI5LCAweDMwQkIsIDB4MzBCRCwgMHgzMEJGLA0KLSAgICAweDMwQzEsIDB4MzBDNCwgMHgzMEM2LCAweDMwQzgsIDB4MzBDQSwgMHgzMENCLCAweDMwQ0MsIDB4MzBDRCwNCi0gICAgMHgzMENFLCAweDMwQ0YsIDB4MzBEMiwgMHgzMEQ1LCAweDMwRDgsIDB4MzBEQiwgMHgzMERFLCAweDMwREYsDQotICAgIDB4MzBFMCwgMHgzMEUxLCAweDMwRTIsIDB4MzBFNCwgMHgzMEU2LCAweDMwRTgsIDB4MzBFOSwgMHgzMEVBLA0KLSAgICAweDMwRUIsIDB4MzBFQywgMHgzMEVELCAweDMwRUYsIDB4MzBGMCwgMHgzMEYxLCAweDMwRjIsIDB4MzBGMywNCi0gICAgMHg2NUU1LCAweDY3MDgsIDB4NzA2QiwgMHg2QzM0LCAweDY3MjgsIDB4OTFEMSwgMHg1NzFGLCAweDU1NEYsDQotICAgIDB4N0I1NCwgMHg0RjhCLCAweDI1QTAsIDB4MDAzMCwgMHgwMDAwLCAweDAwMzEsIDB4MDAwMCwgMHgwMDMyLA0KLSAgICAweDAwMDAsIDB4MDAzMywgMHgwMDAwLCAweDAwMzQsIDB4MDAwMCwgMHgwMDM1LCAweDAwMDAsIDB4MDAzNiwNCi0gICAgMHgwMDAwLCAweDAwMzcsIDB4MDAwMCwgMHgwMDM4LCAweDAwMDAsIDB4MDAzOSwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsDQotICAgIDB4MDA2NywgMHgwMDY4LCAweDAwNjksIDB4MDA2QSwgMHgwMDZCLCAweDAwNkMsIDB4MDA2RCwgMHgwMDZFLA0KLSAgICAweDAwNkYsIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwNCi0gICAgMHgwMDc3LCAweDAwNzgsIDB4MDA3OSwgMHgwMDdBLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsDQotICAgIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsIDB4MDA0OCwgMHgwMDQ5LCAweDAwNEEsIDB4MDA0QiwgMHgwMDRDLA0KLSAgICAweDAwNEQsIDB4MDA0RSwgMHgwMDRGLCAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwNCi0gICAgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywgMHgwMDU4LCAweDAwNTksIDB4MDA1QSwgMHgzMDQyLCAweDMwNDQsDQotICAgIDB4MzA0NiwgMHgzMDQ4LCAweDMwNEEsIDB4MzA0QiwgMHgzMDRELCAweDMwNEYsIDB4MzA1MSwgMHgzMDUzLA0KLSAgICAweDMwNTUsIDB4MzA1NywgMHgzMDU5LCAweDMwNUIsIDB4MzA1RCwgMHgzMDVGLCAweDMwNjEsIDB4MzA2NCwNCi0gICAgMHgzMDY2LCAweDMwNjgsIDB4MzA2QSwgMHgzMDZCLCAweDMwNkMsIDB4MzA2RCwgMHgzMDZFLCAweDMwNkYsDQotICAgIDB4MzA3MiwgMHgzMDc1LCAweDMwNzgsIDB4MzA3QiwgMHgzMDdFLCAweDMwN0YsIDB4MzA4MCwgMHgzMDgxLA0KLSAgICAweDMwODIsIDB4MzA4NCwgMHgzMDg2LCAweDMwODgsIDB4MzA4OSwgMHgzMDhBLCAweDMwOEIsIDB4MzA4QywNCi0gICAgMHgzMDhELCAweDMwOEYsIDB4MzA5MCwgMHgzMDkxLCAweDMwOTIsIDB4MzA5MywgMHgzMEEyLCAweDMwQTQsDQotICAgIDB4MzBBNiwgMHgzMEE4LCAweDMwQUEsIDB4MzBBQiwgMHgzMEFELCAweDMwQUYsIDB4MzBCMSwgMHgzMEIzLA0KLSAgICAweDMwQjUsIDB4MzBCNywgMHgzMEI5LCAweDMwQkIsIDB4MzBCRCwgMHgzMEJGLCAweDMwQzEsIDB4MzBDNCwNCi0gICAgMHgzMEM2LCAweDMwQzgsIDB4MzBDQSwgMHgzMENCLCAweDMwQ0MsIDB4MzBDRCwgMHgzMENFLCAweDMwQ0YsDQotICAgIDB4MzBEMiwgMHgzMEQ1LCAweDMwRDgsIDB4MzBEQiwgMHgzMERFLCAweDMwREYsIDB4MzBFMCwgMHgzMEUxLA0KLSAgICAweDMwRTIsIDB4MzBFNCwgMHgzMEU2LCAweDMwRTgsIDB4MzBFOSwgMHgzMEVBLCAweDMwRUIsIDB4MzBFQywNCi0gICAgMHgzMEVELCAweDMwRUYsIDB4MzBGMCwgMHgzMEYxLCAweDMwRjIsIDB4MzBGMywgMHg2NUU1LCAweDY3MDgsDQotICAgIDB4NzA2QiwgMHg2QzM0LCAweDY3MjgsIDB4OTFEMSwgMHg1NzFGLCAweDU1NEYsIDB4N0I1NCwgMHg0RjhCLA0KLSAgICAweDAwMzAsIDB4MDAwMCwgMHgwMDMxLCAweDAwMDAsIDB4MDAzMiwgMHgwMDAwLCAweDAwMzMsIDB4MDAwMCwNCi0gICAgMHgwMDM0LCAweDAwMDAsIDB4MDAzNSwgMHgwMDAwLCAweDAwMzYsIDB4MDAwMCwgMHgwMDM3LCAweDAwMDAsDQotICAgIDB4MDAzOCwgMHgwMDAwLCAweDAwMzksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwNjEsDQotICAgIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsIDB4MDA2OCwgMHgwMDY5LA0KLSAgICAweDAwNkEsIDB4MDA2QiwgMHgwMDZDLCAweDAwNkQsIDB4MDA2RSwgMHgwMDZGLCAweDAwNzAsIDB4MDA3MSwNCi0gICAgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywgMHgwMDc4LCAweDAwNzksDQotICAgIDB4MDA3QSwgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LA0KLSAgICAweDAwNDgsIDB4MDA0OSwgMHgwMDRBLCAweDAwNEIsIDB4MDA0QywgMHgwMDRELCAweDAwNEUsIDB4MDA0RiwNCi0gICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsDQotICAgIDB4MDA1OCwgMHgwMDU5LCAweDAwNUEsIDB4MzA0MiwgMHgzMDQ0LCAweDMwNDYsIDB4MzA0OCwgMHgzMDRBLA0KLSAgICAweDMwNEIsIDB4MzA0RCwgMHgzMDRGLCAweDMwNTEsIDB4MzA1MywgMHgzMDU1LCAweDMwNTcsIDB4MzA1OSwNCi0gICAgMHgzMDVCLCAweDMwNUQsIDB4MzA1RiwgMHgzMDYxLCAweDMwNjQsIDB4MzA2NiwgMHgzMDY4LCAweDMwNkEsDQotICAgIDB4MzA2QiwgMHgzMDZDLCAweDMwNkQsIDB4MzA2RSwgMHgzMDZGLCAweDMwNzIsIDB4MzA3NSwgMHgzMDc4LA0KLSAgICAweDMwN0IsIDB4MzA3RSwgMHgzMDdGLCAweDMwODAsIDB4MzA4MSwgMHgzMDgyLCAweDMwODQsIDB4MzA4NiwNCi0gICAgMHgzMDg4LCAweDMwODksIDB4MzA4QSwgMHgzMDhCLCAweDMwOEMsIDB4MzA4RCwgMHgzMDhGLCAweDMwOTAsDQotICAgIDB4MzA5MSwgMHgzMDkyLCAweDMwOTMsIDB4MzBBMiwgMHgzMEE0LCAweDMwQTYsIDB4MzBBOCwgMHgzMEFBLA0KLSAgICAweDMwQUIsIDB4MzBBRCwgMHgzMEFGLCAweDMwQjEsIDB4MzBCMywgMHgzMEI1LCAweDMwQjcsIDB4MzBCOSwNCi0gICAgMHgzMEJCLCAweDMwQkQsIDB4MzBCRiwgMHgzMEMxLCAweDMwQzQsIDB4MzBDNiwgMHgzMEM4LCAweDMwQ0EsDQotICAgIDB4MzBDQiwgMHgzMENDLCAweDMwQ0QsIDB4MzBDRSwgMHgzMENGLCAweDMwRDIsIDB4MzBENSwgMHgzMEQ4LA0KLSAgICAweDMwREIsIDB4MzBERSwgMHgzMERGLCAweDMwRTAsIDB4MzBFMSwgMHgzMEUyLCAweDMwRTQsIDB4MzBFNiwNCi0gICAgMHgzMEU4LCAweDMwRTksIDB4MzBFQSwgMHgzMEVCLCAweDMwRUMsIDB4MzBFRCwgMHgzMEVGLCAweDMwRjAsDQotICAgIDB4MzBGMSwgMHgzMEYyLCAweDMwRjMsIDB4NjVFNSwgMHg2NzA4LCAweDcwNkIsIDB4NkMzNCwgMHg2NzI4LA0KLSAgICAweDkxRDEsIDB4NTcxRiwgMHg1NTRGLCAweDdCNTQsIDB4NEY4QiwgMHgyNUEwLCAweDMzQzIsIDB4MzNDRCwNCi0gICAgMHgyMTE2LCAweDAwMDAsIDB4MzNEOCwgMHgzM0RBLCAweDIxMjEsIDB4MjEyMiwgMHgwMDAwLCAweDIxMDAsDQotICAgIDB4MzNDMiwgMHgwMDAwLCAweDMzQzQsIDB4MjEwNSwgMHgzMzk3LCAweDMzNzEsIDB4MzM5OCwgMHgyMTEzLA0KLSAgICAweDMzOEQsIDB4MzM5QiwgMHgzMzk2LCAweDAwMDAsIDB4MDAwMCwgMHgzM0Q3LCAweDMzRDgsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MzMwMSwgMHgzMzAyLCAweDMzMDQsIDB4MzMwNiwgMHgwMDAwLCAweDMzMDgsDQotICAgIDB4MDAwMCwgMHgzMzA3LCAweDMzMEEsIDB4MDAwMCwgMHgzMzA5LCAweDAwMDAsIDB4MzMwQiwgMHgwMDAwLA0KLSAgICAweDMzMEMsIDB4MzMwRSwgMHgzMzBGLCAweDMzMTAsIDB4MzMxMSwgMHgzMzEyLCAweDMzMTMsIDB4MDAwMCwNCi0gICAgMHgzMzE3LCAweDAwMDAsIDB4MzMxOSwgMHgwMDAwLCAweDMzMUEsIDB4MzMxQiwgMHgzMzFDLCAweDMzMUQsDQotICAgIDB4MzMxRiwgMHgzMzIwLCAweDMzMjEsIDB4MzMyNCwgMHgwMDAwLCAweDMzMjUsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDMzMjgsIDB4MzMyOSwgMHgwMDAwLCAweDMzMkQsIDB4MDAwMCwgMHgwMDAwLCAweDMzMkUsIDB4MzMyRiwNCi0gICAgMHgzMzMwLCAweDMzMzIsIDB4MDAwMCwgMHgwMDAwLCAweDMzMzQsIDB4MzMzNSwgMHgzMzNDLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDMzMzcsIDB4MDAwMCwgMHgzMzM4LCAweDMzM0EsIDB4MzMzRCwgMHgzMzQxLA0KLSAgICAweDMzM0UsIDB4MzMzRiwgMHgzMzQwLCAweDMzNDMsIDB4MzM0NCwgMHgzMzQ1LCAweDMzNDYsIDB4MzM0OCwNCi0gICAgMHgzMzRCLCAweDMzNEMsIDB4MzM0RiwgMHgzMzUwLCAweDAwMDAsIDB4MDAwMCwgMHgzMzUyLCAweDMzNTQsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDMzNTMsIDB4MzM1NSwgMHgzMzU2LCAweDAwMDAsIDB4MzMwMSwgMHgzMzAyLA0KLSAgICAweDMzMDQsIDB4MzMwNiwgMHgwMDAwLCAweDMzMDgsIDB4MDAwMCwgMHgzMzA3LCAweDMzMEEsIDB4MDAwMCwNCi0gICAgMHgzMzA5LCAweDAwMDAsIDB4MzMwQiwgMHgwMDAwLCAweDMzMEMsIDB4MzMwRSwgMHgzMzBGLCAweDMzMTAsDQotICAgIDB4MzMxMSwgMHgzMzEyLCAweDMzMTMsIDB4MDAwMCwgMHgzMzE3LCAweDAwMDAsIDB4MzMxOSwgMHgwMDAwLA0KLSAgICAweDMzMUEsIDB4MzMxQiwgMHgzMzFDLCAweDMzMUQsIDB4MzMxRiwgMHgzMzIwLCAweDMzMjEsIDB4MzMyNCwNCi0gICAgMHgwMDAwLCAweDMzMjUsIDB4MDAwMCwgMHgwMDAwLCAweDMzMjgsIDB4MzMyOSwgMHgwMDAwLCAweDMzMkQsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDMzMkUsIDB4MzMyRiwgMHgzMzMwLCAweDMzMzIsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDMzMzQsIDB4MzMzNSwgMHgzMzNDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDMzMzcsIDB4MDAwMCwNCi0gICAgMHgzMzM4LCAweDMzM0EsIDB4MzMzRCwgMHgzMzQxLCAweDMzM0UsIDB4MzMzRiwgMHgzMzQwLCAweDMzNDMsDQotICAgIDB4MzM0NCwgMHgzMzQ1LCAweDMzNDYsIDB4MzM0OCwgMHgzMzRCLCAweDMzNEMsIDB4MzM0RiwgMHgzMzUwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgzMzUyLCAweDMzNTQsIDB4MDAwMCwgMHgwMDAwLCAweDMzNTMsIDB4MzM1NSwNCi0gICAgMHgzMzU2LCAweDMzN0UsIDB4MzM3RCwgMHgzMzdDLCAweDMzN0IsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAyRCwNCi0gICAgMHgwMDNELCAweDIxMDMsIDB4MjY0MCwgMHgyNjQyLCAweDMwMTMsIDB4MzAxMiwgMHgzMDBDLCAweDMwMEQsDQotICAgIDB4MzAwRSwgMHgzMDBGLCAweDMwMUEsIDB4MzAxQiwgMHgzMDE4LCAweDMwMTksIDB4RkYwOCwgMHhGRjA5LA0KLSAgICAweDMwMUQsIDB4MzAxRSwgMHgyMDE4LCAweDIwMTksIDB4MjAxQywgMHgyMDFELCAweDAwMjcsIDB4MDAyMiwNCi0gICAgMHgwMDAwLCAweDIxMzUsIDB4MDNEMCwgMHgyMjBBLCAweDIxMEYsIDB4MDBCNSwgMHgwM0M2LCAweDAzREIsDQotICAgIDB4MDNEMSwgMHhGRkZELCAweDI2NjgsIDB4MjY2OSwgMHgyNjZDLCAweEZGMUEsIDB4MDBBOSwgMHgwMEE5LA0KLSAgICAweDAwQUUsIDB4MDBBRSwgMHgzMDNCLCAweDMwM0IsIDB4MzAzMywgMHgzMDM0LCAweDMwMzUsIDB4MjAzQywNCi0gICAgMHgyMDQ5LCAweDAwMjEsIDB4MjAzQywgMHgyMDQ5LCAweDI0NEEsIDB4MDAwMCwgMHgyMjEzLCAweDIyNjAsDQotICAgIDB4MjI0MywgMHgyMjcyLCAweDIyNzMsIDB4MzAwQywgMHgzMDBELCAweDMwMEUsIDB4MzAwRiwgMHgzMDFBLA0KLSAgICAweDMwMUIsIDB4MzAxOCwgMHgzMDE5LCAweEZGNUYsIDB4RkY2MCwgMHgzMDBDLCAweDMwMEQsIDB4MzAwRSwNCi0gICAgMHgzMDBGLCAweDMwMUEsIDB4MzAxQiwgMHgzMDE4LCAweDMwMTksIDB4RkY1RiwgMHhGRjYwLCAweDIzOUIsDQotICAgIDB4MjM5RCwgMHgyMzlFLCAweDIzQTAsIDB4MjM5RCwgMHgyMzlCLCAweDIzQTAsIDB4MjM5RSwgMHgyM0ExLA0KLSAgICAweDIzQTMsIDB4MjNBNCwgMHgyM0E2LCAweDIzQTMsIDB4MjNBMSwgMHgyM0E2LCAweDIzQTQsIDB4MjNBMSwNCi0gICAgMHgyM0EzLCAweDIzQTQsIDB4MjNBNiwgMHgyM0EzLCAweDIzQTEsIDB4MjNBNiwgMHgyM0E0LCAweEZGNUMsDQotICAgIDB4MjAxNSwgMHgzMDFELCAweDMwMUUsIDB4MjAxOCwgMHgyMDE5LCAweDIwMTgsIDB4MjAxOSwgMHgyNzAyLA0KLSAgICAweDI3MDIsIDB4MjcwMiwgMHgyNzAyLCAweDMwM0QsIDB4MzAxMiwgMHgzMDlGLCAweDUzNEQsIDB4MjIwNywNCi0gICAgMHgyMjA1LCAweDIyQTAsIDB4MjI5NiwgMHgyMjk4LCAweDIyOTUsIDB4MjI5NywgMHgyMjlFLCAweDIyOTUsDQotICAgIDB4MDAyMSwgMHgyNUIzLCAweDI1QzAsIDB4MjVCNiwgMHgyMUU2LCAweDIxRTgsIDB4MjFFNywgMHgyMUU5LA0KLSAgICAweDIxRDAsIDB4MjE5NCwgMHgyMTk4LCAweDIxOTksIDB4MjE5NiwgMHgyMTk3LCAweDIxQ0MsIDB4MjFDNiwNCi0gICAgMHgyMUM0LCAweDIxQzUsIDB4MjE5MCwgMHgyMTkyLCAweDIxOTEsIDB4MjE5MywgMHgyMTk0LCAweDIxOTUsDQotICAgIDB4MjUwNCwgMHgyNTA2LCAweDMwMzAsIDB4MjMwNywgMHgzMDMwLCAweDIzMDcsIDB4MzAzMCwgMHgyMzA3LA0KLSAgICAweDMwMzAsIDB4MjMwNywgMHgzMDMwLCAweDIzMDcsIDB4Mjc0MCwgMHgyNzNGLCAweDI1QTEsIDB4MjVBMCwNCi0gICAgMHgyNUExLCAweDI1QTEsIDB4MjVBMSwgMHgyNUExLCAweDI1QTEsIDB4MjVBQiwgMHgyNUEwLCAweDI1QUEsDQotICAgIDB4MjcxQSwgMHgyNzFBLCAweDI1QzcsIDB4MjVDNiwgMHgyNUM3LCAweDI1QzcsIDB4MjVDNywgMHgyNUM3LA0KLSAgICAweDI1QzcsIDB4MjVDNiwgMHgyNUM2LCAweDI1Q0UsIDB4MjVDOSwgMHgyNUNCLCAweDI1RTYsIDB4MjVDRiwNCi0gICAgMHgyMDIyLCAweDI3NTYsIDB4Mjc1NiwgMHgyNzU2LCAweDI3NTYsIDB4MzAwOCwgMHgzMDA5LCAweDMwMDgsDQotICAgIDB4MzAwOSwgMHgzMDBBLCAweDMwMEIsIDB4MzAwQSwgMHgzMDBCLCAweDMwNTMsIDB4MzA1MywgMHgzMEIzLA0KLSAgICAweDMwQjMsIDB4MzA5RCwgMHgzMDlFLCAweDMwNDEsIDB4MzA0MiwgMHgzMDQzLCAweDMwNDQsIDB4MzA0NSwNCi0gICAgMHgzMDQ2LCAweDMwNDcsIDB4MzA0OCwgMHgzMDQ5LCAweDMwNEEsIDB4MzA0QiwgMHgzMDRCLCAweDMwNEMsDQotICAgIDB4MzA0RCwgMHgzMDRFLCAweDMwNEYsIDB4MzA1MCwgMHgzMDUxLCAweDMwNTEsIDB4MzA1MiwgMHgzMDUzLA0KLSAgICAweDMwNTMsIDB4MzA1NCwgMHgzMDU1LCAweDMwNTYsIDB4MzA1NywgMHgzMDU4LCAweDMwNTksIDB4MzA1QSwNCi0gICAgMHgzMDVCLCAweDMwNUMsIDB4MzA1RCwgMHgzMDVFLCAweDMwNUYsIDB4MzA2MCwgMHgzMDYxLCAweDMwNjIsDQotICAgIDB4MzA2MywgMHgzMDY0LCAweDMwNjUsIDB4MzA2NiwgMHgzMDY3LCAweDMwNjgsIDB4MzA2OSwgMHgzMDZBLA0KLSAgICAweDMwNkIsIDB4MzA2QywgMHgzMDZELCAweDMwNkUsIDB4MzA2RiwgMHgzMDcwLCAweDMwNzEsIDB4MzA3MiwNCi0gICAgMHgzMDczLCAweDMwNzQsIDB4MzA3NSwgMHgzMDc2LCAweDMwNzcsIDB4MzA3OCwgMHgzMDc5LCAweDMwN0EsDQotICAgIDB4MzA3QiwgMHgzMDdDLCAweDMwN0QsIDB4MzA3RSwgMHgzMDdGLCAweDMwODAsIDB4MzA4MSwgMHgzMDgyLA0KLSAgICAweDMwODMsIDB4MzA4NCwgMHgzMDg1LCAweDMwODYsIDB4MzA4NywgMHgzMDg4LCAweDMwODksIDB4MzA4QSwNCi0gICAgMHgzMDhCLCAweDMwOEMsIDB4MzA4RCwgMHgzMDhFLCAweDMwOEYsIDB4MzA5MCwgMHgzMDkxLCAweDMwOTIsDQotICAgIDB4MzA5MywgMHgzMDk0LCAweDMwRkQsIDB4MzBGRSwgMHgzMEZDLCAweDMwQTEsIDB4MzBBMiwgMHgzMEEzLA0KLSAgICAweDMwQTQsIDB4MzBBNSwgMHgzMEE2LCAweDMwQTcsIDB4MzBBOCwgMHgzMEE5LCAweDMwQUEsIDB4MzBGNSwNCi0gICAgMHgzMEFCLCAweDMwQUMsIDB4MzBBRCwgMHgzMEFFLCAweDMwQUYsIDB4MzBCMCwgMHgzMEY2LCAweDMwQjEsDQotICAgIDB4MzBCMiwgMHgzMEIzLCAweDMwQjMsIDB4MzBCNCwgMHgzMEI1LCAweDMwQjYsIDB4MzBCNywgMHgzMEI4LA0KLSAgICAweDMwQjksIDB4MzBCQSwgMHgzMEJCLCAweDMwQkMsIDB4MzBCRCwgMHgzMEJFLCAweDMwQkYsIDB4MzBDMCwNCi0gICAgMHgzMEMxLCAweDMwQzIsIDB4MzBDMywgMHgzMEM0LCAweDMwQzUsIDB4MzBDNiwgMHgzMEM3LCAweDMwQzgsDQotICAgIDB4MzBDOSwgMHgzMENBLCAweDMwQ0IsIDB4MzBDQywgMHgzMENELCAweDMwQ0UsIDB4MzBDRiwgMHgzMEQwLA0KLSAgICAweDMwRDEsIDB4MzBEMiwgMHgzMEQzLCAweDMwRDQsIDB4MzBENSwgMHgzMEQ2LCAweDMwRDcsIDB4MzBEOCwNCi0gICAgMHgzMEQ5LCAweDMwREEsIDB4MzBEQiwgMHgzMERDLCAweDMwREQsIDB4MzBERSwgMHgzMERGLCAweDMwRTAsDQotICAgIDB4MzBFMSwgMHgzMEUyLCAweDMwRTMsIDB4MzBFNCwgMHgzMEU1LCAweDMwRTYsIDB4MzBFNywgMHgzMEU4LA0KLSAgICAweDMwRTksIDB4MzBFQSwgMHgzMEVCLCAweDMwRUMsIDB4MzBFRCwgMHgzMEVFLCAweDMwRUYsIDB4MzBGMCwNCi0gICAgMHgzMEYxLCAweDMwRjIsIDB4MzBGMywgMHgzMEY0LCAweDMwRjcsIDB4MzBGOCwgMHgzMEY5LCAweDMwRkEsDQotICAgIDB4MzA5RCwgMHgzMDlFLCAweDMwNDEsIDB4MzA0MiwgMHgzMDQzLCAweDMwNDQsIDB4MzA0NSwgMHgzMDQ2LA0KLSAgICAweDMwNDcsIDB4MzA0OCwgMHgzMDQ5LCAweDMwNEEsIDB4MzA0QiwgMHgzMDRCLCAweDMwNEMsIDB4MzA0RCwNCi0gICAgMHgzMDRFLCAweDMwNEYsIDB4MzA1MCwgMHgzMDUxLCAweDMwNTEsIDB4MzA1MiwgMHgzMDUzLCAweDMwNTMsDQotICAgIDB4MzA1NCwgMHgzMDU1LCAweDMwNTYsIDB4MzA1NywgMHgzMDU4LCAweDMwNTksIDB4MzA1QSwgMHgzMDVCLA0KLSAgICAweDMwNUMsIDB4MzA1RCwgMHgzMDVFLCAweDMwNUYsIDB4MzA2MCwgMHgzMDYxLCAweDMwNjIsIDB4MzA2MywNCi0gICAgMHgzMDY0LCAweDMwNjUsIDB4MzA2NiwgMHgzMDY3LCAweDMwNjgsIDB4MzA2OSwgMHgzMDZBLCAweDMwNkIsDQotICAgIDB4MzA2QywgMHgzMDZELCAweDMwNkUsIDB4MzA2RiwgMHgzMDcwLCAweDMwNzEsIDB4MzA3MiwgMHgzMDczLA0KLSAgICAweDMwNzQsIDB4MzA3NSwgMHgzMDc2LCAweDMwNzcsIDB4MzA3OCwgMHgzMDc5LCAweDMwN0EsIDB4MzA3QiwNCi0gICAgMHgzMDdDLCAweDMwN0QsIDB4MzA3RSwgMHgzMDdGLCAweDMwODAsIDB4MzA4MSwgMHgzMDgyLCAweDMwODMsDQotICAgIDB4MzA4NCwgMHgzMDg1LCAweDMwODYsIDB4MzA4NywgMHgzMDg4LCAweDMwODksIDB4MzA4QSwgMHgzMDhCLA0KLSAgICAweDMwOEMsIDB4MzA4RCwgMHgzMDhFLCAweDMwOEYsIDB4MzA5MCwgMHgzMDkxLCAweDMwOTIsIDB4MzA5MywNCi0gICAgMHgzMDk0LCAweDMwRkQsIDB4MzBGRSwgMHgzMEZDLCAweDMwQTEsIDB4MzBBMiwgMHgzMEEzLCAweDMwQTQsDQotICAgIDB4MzBBNSwgMHgzMEE2LCAweDMwQTcsIDB4MzBBOCwgMHgzMEE5LCAweDMwQUEsIDB4MzBGNSwgMHgzMEFCLA0KLSAgICAweDMwQUMsIDB4MzBBRCwgMHgzMEFFLCAweDMwQUYsIDB4MzBCMCwgMHgzMEY2LCAweDMwQjEsIDB4MzBCMiwNCi0gICAgMHgzMEIzLCAweDMwQjMsIDB4MzBCNCwgMHgzMEI1LCAweDMwQjYsIDB4MzBCNywgMHgzMEI4LCAweDMwQjksDQotICAgIDB4MzBCQSwgMHgzMEJCLCAweDMwQkMsIDB4MzBCRCwgMHgzMEJFLCAweDMwQkYsIDB4MzBDMCwgMHgzMEMxLA0KLSAgICAweDMwQzIsIDB4MzBDMywgMHgzMEM0LCAweDMwQzUsIDB4MzBDNiwgMHgzMEM3LCAweDMwQzgsIDB4MzBDOSwNCi0gICAgMHgzMENBLCAweDMwQ0IsIDB4MzBDQywgMHgzMENELCAweDMwQ0UsIDB4MzBDRiwgMHgzMEQwLCAweDMwRDEsDQotICAgIDB4MzBEMiwgMHgzMEQzLCAweDMwRDQsIDB4MzBENSwgMHgzMEQ2LCAweDMwRDcsIDB4MzBEOCwgMHgzMEQ5LA0KLSAgICAweDMwREEsIDB4MzBEQiwgMHgzMERDLCAweDMwREQsIDB4MzBERSwgMHgzMERGLCAweDMwRTAsIDB4MzBFMSwNCi0gICAgMHgzMEUyLCAweDMwRTMsIDB4MzBFNCwgMHgzMEU1LCAweDMwRTYsIDB4MzBFNywgMHgzMEU4LCAweDMwRTksDQotICAgIDB4MzBFQSwgMHgzMEVCLCAweDMwRUMsIDB4MzBFRCwgMHgzMEVFLCAweDMwRUYsIDB4MzBGMCwgMHgzMEYxLA0KLSAgICAweDMwRjIsIDB4MzBGMywgMHgzMEY0LCAweDMwRjcsIDB4MzBGOCwgMHgzMEY5LCAweDMwRkEsIDB4MzAwMSwNCi0gICAgMHgzMDAyLCAweDMwRkIsIDB4RkYwQSwgMHgyMDNCLCAweDI1Q0IsIDB4MjVDRSwgMHgyNUM5LCAweDI1QjMsDQotICAgIDB4MjVCMiwgMHgzMEZELCAweDMwRkUsIDB4MzA5RCwgMHgzMDlFLCAweEZGMDgsIDB4RkYwOSwgMHgzMDE0LA0KLSAgICAweDMwMTUsIDB4RkYwOCwgMHhGRjA5LCAweDMwMTQsIDB4MzAxNSwgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwNCi0gICAgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsIDB4MDAzOCwgMHgwMDM5LCAweDMwNDEsDQotICAgIDB4MzA0MiwgMHgzMDQzLCAweDMwNDQsIDB4MzA0NSwgMHgzMDQ2LCAweDMwNDcsIDB4MzA0OCwgMHgzMDQ5LA0KLSAgICAweDMwNEEsIDB4MzA0QiwgMHgzMDRCLCAweDMwNEMsIDB4MzA0RCwgMHgzMDRFLCAweDMwNEYsIDB4MzA1MCwNCi0gICAgMHgzMDUxLCAweDMwNTEsIDB4MzA1MiwgMHgzMDUzLCAweDMwNTQsIDB4MzA1NSwgMHgzMDU2LCAweDMwNTcsDQotICAgIDB4MzA1OCwgMHgzMDU5LCAweDMwNUEsIDB4MzA1QiwgMHgzMDVDLCAweDMwNUQsIDB4MzA1RSwgMHgzMDVGLA0KLSAgICAweDMwNjAsIDB4MzA2MSwgMHgzMDYyLCAweDMwNjMsIDB4MzA2NCwgMHgzMDY1LCAweDMwNjYsIDB4MzA2NywNCi0gICAgMHgzMDY4LCAweDMwNjksIDB4MzA2QSwgMHgzMDZCLCAweDMwNkMsIDB4MzA2RCwgMHgzMDZFLCAweDMwNkYsDQotICAgIDB4MzA3MCwgMHgzMDcxLCAweDMwNzIsIDB4MzA3MywgMHgzMDc0LCAweDMwNzUsIDB4MzA3NiwgMHgzMDc3LA0KLSAgICAweDMwNzgsIDB4MzA3OSwgMHgzMDdBLCAweDMwN0IsIDB4MzA3QywgMHgzMDdELCAweDMwN0UsIDB4MzA3RiwNCi0gICAgMHgzMDgwLCAweDMwODEsIDB4MzA4MiwgMHgzMDgzLCAweDMwODQsIDB4MzA4NSwgMHgzMDg2LCAweDMwODcsDQotICAgIDB4MzA4OCwgMHgzMDg5LCAweDMwOEEsIDB4MzA4QiwgMHgzMDhDLCAweDMwOEQsIDB4MzA4RSwgMHgzMDhGLA0KLSAgICAweDMwOTAsIDB4MzA5MSwgMHgzMDkyLCAweDMwOTMsIDB4MzA5NCwgMHgzMDQxLCAweDMwNDMsIDB4MzA0NSwNCi0gICAgMHgzMDQ3LCAweDMwNDksIDB4MzA0QiwgMHgzMDUxLCAweDMwNjMsIDB4MzA4MywgMHgzMDg1LCAweDMwODcsDQotICAgIDB4MzA4RSwgMHgzMEExLCAweDMwQTIsIDB4MzBBMywgMHgzMEE0LCAweDMwQTUsIDB4MzBBNiwgMHgzMEE3LA0KLSAgICAweDMwQTgsIDB4MzBBOSwgMHgzMEFBLCAweDMwQUIsIDB4MzBGNSwgMHgzMEFDLCAweDMwQUQsIDB4MzBBRSwNCi0gICAgMHgzMEFGLCAweDMwQjAsIDB4MzBCMSwgMHgzMEY2LCAweDMwQjIsIDB4MzBCMywgMHgzMEI0LCAweDMwQjUsDQotICAgIDB4MzBCNiwgMHgzMEI3LCAweDMwQjgsIDB4MzBCOSwgMHgzMEJBLCAweDMwQkIsIDB4MzBCQywgMHgzMEJELA0KLSAgICAweDMwQkUsIDB4MzBCRiwgMHgzMEMwLCAweDMwQzEsIDB4MzBDMiwgMHgzMEMzLCAweDMwQzQsIDB4MzBDNSwNCi0gICAgMHgzMEM2LCAweDMwQzcsIDB4MzBDOCwgMHgzMEM5LCAweDMwQ0EsIDB4MzBDQiwgMHgzMENDLCAweDMwQ0QsDQotICAgIDB4MzBDRSwgMHgzMENGLCAweDMwRDAsIDB4MzBEMSwgMHgzMEQyLCAweDMwRDMsIDB4MzBENCwgMHgzMEQ1LA0KLSAgICAweDMwRDYsIDB4MzBENywgMHgzMEQ4LCAweDMwRDksIDB4MzBEQSwgMHgzMERCLCAweDMwREMsIDB4MzBERCwNCi0gICAgMHgzMERFLCAweDMwREYsIDB4MzBFMCwgMHgzMEUxLCAweDMwRTIsIDB4MzBFMywgMHgzMEU0LCAweDMwRTUsDQotICAgIDB4MzBFNiwgMHgzMEU3LCAweDMwRTgsIDB4MzBFOSwgMHgzMEVBLCAweDMwRUIsIDB4MzBFQywgMHgzMEVELA0KLSAgICAweDMwRUUsIDB4MzBFRiwgMHgzMEYwLCAweDMwRjEsIDB4MzBGMiwgMHgzMEYzLCAweDMwRjQsIDB4MzBBMSwNCi0gICAgMHgzMEEzLCAweDMwQTUsIDB4MzBBNywgMHgzMEE5LCAweDMwRjUsIDB4MzBGNiwgMHgzMEMzLCAweDMwRTMsDQotICAgIDB4MzBFNSwgMHgzMEU3LCAweDMwRUUsIDB4MzBGQywgMHgzMEZDLCAweDZDRTgsIDB4MjBBQywgMHgyMTI2LA0KLSAgICAweDIwMzIsIDB4MjAzMywgMHhGQjAwLCAweEZCMDMsIDB4RkIwNCwgMHgwMTAxLCAweDAxMkIsIDB4MDE2QiwNCi0gICAgMHgwMTEzLCAweDAxNEQsIDB4MDEwMCwgMHgwMTJBLCAweDAxNkEsIDB4MDExMiwgMHgwMTRDLCAweDIxNUIsDQotICAgIDB4MjE1QywgMHgyMTVELCAweDIxNUUsIDB4MjE1MywgMHgyMTU0LCAweDIwNzAsIDB4MjA3NCwgMHgyMDc1LA0KLSAgICAweDIwNzYsIDB4MjA3NywgMHgyMDc4LCAweDIwNzksIDB4MjA4MCwgMHgyMDgxLCAweDIwODIsIDB4MjA4MywNCi0gICAgMHgyMDg0LCAweDIwODUsIDB4MjA4NiwgMHgyMDg3LCAweDIwODgsIDB4MjA4OSwgMHgwMUNELCAweDAxMUEsDQotICAgIDB4MDAwMCwgMHgxRUJDLCAweDAxQ0YsIDB4MDAwMCwgMHgwMTI4LCAweDAxRDEsIDB4MDAwMCwgMHgwMUQzLA0KLSAgICAweDAxNkUsIDB4MDE2OCwgMHgwMUNFLCAweDAxMUIsIDB4MDAwMCwgMHgxRUJELCAweDAxRDAsIDB4MDAwMCwNCi0gICAgMHgwMTI5LCAweDAxRDIsIDB4MDAwMCwgMHgwMUQ0LCAweDAxNkYsIDB4MDE2OSwgMHgwMjUxLCAweDAyNTEsDQotICAgIDB4MDI1MSwgMHgwMUZELCAweDAwRTYsIDB4MDI1NCwgMHgwMjU0LCAweDAyNTQsIDB4MDI1OSwgMHgwMjU5LA0KLSAgICAweDAyNTksIDB4MDI1QSwgMHgwMjVBLCAweDAyNUEsIDB4MDI1QiwgMHgwMjVCLCAweDAyNUIsIDB4MDA2QSwNCi0gICAgMHgwMTRCLCAweDAyNzUsIDB4MDI4QywgMHgwMjhDLCAweDAyOEMsIDB4MDI5MiwgMHgwMjgzLCAweDAyRDAsDQotICAgIDB4MDAyMCwgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LA0KLSAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDJBLCAweDAwMkIsIDB4MDAyQywgMHgwMDJELCAweDAwMkUsIDB4MDAyRiwNCi0gICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsDQotICAgIDB4MDAzOCwgMHgwMDM5LCAweDAwM0EsIDB4MDAzQiwgMHgwMDNDLCAweDAwM0QsIDB4MDAzRSwgMHgwMDNGLA0KLSAgICAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywNCi0gICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0QSwgMHgwMDRCLCAweDAwNEMsIDB4MDA0RCwgMHgwMDRFLCAweDAwNEYsDQotICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LA0KLSAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVBLCAweDAwNUIsIDB4MDBBNSwgMHgwMDVELCAweDAwNUUsIDB4MDA1RiwNCi0gICAgMHgwMDYwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsDQotICAgIDB4MDA2OCwgMHgwMDY5LCAweDAwNkEsIDB4MDA2QiwgMHgwMDZDLCAweDAwNkQsIDB4MDA2RSwgMHgwMDZGLA0KLSAgICAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywNCi0gICAgMHgwMDc4LCAweDAwNzksIDB4MDA3QSwgMHgwMDdCLCAweDAwQTYsIDB4MDA3RCwgMHgwMzAzLCAweDAyQkMsDQotICAgIDB4MDA1QywgMHgwMkJCLCAweDAwN0MsIDB4MDA3RSwgMHgwMEExLCAweDAwQTIsIDB4MDBBMywgMHgyMDQ0LA0KLSAgICAweDAxOTIsIDB4MDBBNywgMHgwMEE0LCAweDIwMUMsIDB4MDBBQiwgMHgyMDM5LCAweDIwM0EsIDB4RkIwMSwNCi0gICAgMHhGQjAyLCAweDIwMTIsIDB4MjAyMCwgMHgyMDIxLCAweDAwQjcsIDB4MDBCNiwgMHgyMDIyLCAweDIwMUEsDQotICAgIDB4MjAxRSwgMHgyMDFELCAweDAwQkIsIDB4MjAyNiwgMHgyMDMwLCAweDAwQkYsIDB4MDMwMSwgMHgwMzAyLA0KLSAgICAweDAwQUYsIDB4MDMwNiwgMHgwMzA3LCAweDAzMDgsIDB4MDMwQSwgMHgwMEI4LCAweDAzMEIsIDB4MDMyOCwNCi0gICAgMHgwMzBDLCAweDAzMzYsIDB4MDBDNiwgMHgwMEFBLCAweDAxNDEsIDB4MDBEOCwgMHgwMTUyLCAweDAwQkEsDQotICAgIDB4MDBFNiwgMHgwMTMxLCAweDAxNDIsIDB4MDBGOCwgMHgwMTUzLCAweDAwREYsIDB4MDAyRCwgMHgwMEE5LA0KLSAgICAweDAwQUMsIDB4MDBBRSwgMHgwMEIwLCAweDAwQjEsIDB4MDBCMiwgMHgwMEIzLCAweDAwQjUsIDB4MDBCOSwNCi0gICAgMHgwMEJDLCAweDAwQkQsIDB4MDBCRSwgMHgwMEMwLCAweDAwQzEsIDB4MDBDMiwgMHgwMEMzLCAweDAwQzQsDQotICAgIDB4MDBDNSwgMHgwMEM3LCAweDAwQzgsIDB4MDBDOSwgMHgwMENBLCAweDAwQ0IsIDB4MDBDQywgMHgwMENELA0KLSAgICAweDAwQ0UsIDB4MDBDRiwgMHgwMEQwLCAweDAwRDEsIDB4MDBEMiwgMHgwMEQzLCAweDAwRDQsIDB4MDBENSwNCi0gICAgMHgwMEQ2LCAweDAwRDcsIDB4MDBEOSwgMHgwMERBLCAweDAwREIsIDB4MDBEQywgMHgwMERELCAweDAwREUsDQotICAgIDB4MDBFMCwgMHgwMEUxLCAweDAwRTIsIDB4MDBFMywgMHgwMEU0LCAweDAwRTUsIDB4MDBFNywgMHgwMEU4LA0KLSAgICAweDAwRTksIDB4MDBFQSwgMHgwMEVCLCAweDAwRUMsIDB4MDBFRCwgMHgwMEVFLCAweDAwRUYsIDB4MDBGMCwNCi0gICAgMHgwMEYxLCAweDAwRjIsIDB4MDBGMywgMHgwMEY0LCAweDAwRjUsIDB4MDBGNiwgMHgwMEY3LCAweDAwRjksDQotICAgIDB4MDBGQSwgMHgwMEZCLCAweDAwRkMsIDB4MDBGRCwgMHgwMEZFLCAweDAwRkYsIDB4MDE2MCwgMHgwMTc4LA0KLSAgICAweDAxN0QsIDB4MDMwNSwgMHgwMTYxLCAweDIxMjIsIDB4MDE3RSwgMHgwMDMwLCAweDIwQUMsIDB4MjEyNiwNCi0gICAgMHgyMDMyLCAweDIwMzMsIDB4RkIwMCwgMHhGQjAzLCAweEZCMDQsIDB4MDEwMSwgMHgwMTJCLCAweDAxNkIsDQotICAgIDB4MDExMywgMHgwMTRELCAweDAxMDAsIDB4MDEyQSwgMHgwMTZBLCAweDAxMTIsIDB4MDE0QywgMHgyMTVCLA0KLSAgICAweDIxNUMsIDB4MjE1RCwgMHgyMTVFLCAweDIxNTMsIDB4MjE1NCwgMHgyMDcwLCAweDIwNzQsIDB4MjA3NSwNCi0gICAgMHgyMDc2LCAweDIwNzcsIDB4MjA3OCwgMHgyMDc5LCAweDIwODAsIDB4MjA4MSwgMHgyMDgyLCAweDIwODMsDQotICAgIDB4MjA4NCwgMHgyMDg1LCAweDIwODYsIDB4MjA4NywgMHgyMDg4LCAweDIwODksIDB4MDFDRCwgMHgwMTFBLA0KLSAgICAweDAwMDAsIDB4MUVCQywgMHgwMUNGLCAweDAwMDAsIDB4MDEyOCwgMHgwMUQxLCAweDAwMDAsIDB4MDFEMywNCi0gICAgMHgwMTZFLCAweDAxNjgsIDB4MDFDRSwgMHgwMTFCLCAweDAwMDAsIDB4MUVCRCwgMHgwMUQwLCAweDAwMDAsDQotICAgIDB4MDEyOSwgMHgwMUQyLCAweDAwMDAsIDB4MDFENCwgMHgwMTZGLCAweDAxNjksIDB4MDAzMCwgMHgwMDMxLA0KLSAgICAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LCAweDAwMzgsIDB4MDAzOSwNCi0gICAgMHgwMzM2LCAweDAwMkQsIDB4MDAzRCwgMHgwMDJDLCAweDAwMjgsIDB4MDAyOSwgMHgwMDJFLCAweDAwMkYsDQotICAgIDB4MDAzQSwgMHgwMDNCLCAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LA0KLSAgICAweDAwMzYsIDB4MDAzNywgMHgwMDM4LCAweDAwMzksIDB4MDMzNiwgMHgwMDJELCAweDAwM0QsIDB4MDAyQywNCi0gICAgMHgwMDI4LCAweDAwMjksIDB4MDAyRSwgMHgwMDJGLCAweDAwM0EsIDB4MDAzQiwgMHgwMEI3LCAweDAwMkQsDQotICAgIDB4MDAzRCwgMHgyMTAzLCAweDI2NDAsIDB4MjY0MiwgMHgzMDEzLCAweDMwMTIsIDB4MzAwQywgMHgzMDBELA0KLSAgICAweDMwMEUsIDB4MzAwRiwgMHgzMDFBLCAweDMwMUIsIDB4MzAxOCwgMHgzMDE5LCAweEZGMDgsIDB4RkYwOSwNCi0gICAgMHgzMDFELCAweDMwMUUsIDB4MjAxOCwgMHgyMDE5LCAweDIwMUMsIDB4MjAxRCwgMHgwMDI3LCAweDAwMjIsDQotICAgIDB4OTAzOCwgMHg4QjAxLCAweDdERTMsIDB4OUVDMywgMHg2RUFCLCAweDc5OEQsIDB4NjA5NCwgMHg2RDc3LA0KLSAgICAweDYxNjgsIDB4Njk4MiwgMHg2RTM0LCAweDg5MTAsIDB4NkYyMiwgMHg1NjY4LCAweDY1RTIsIDB4Nzk0OCwNCi0gICAgMHg4NjVCLCAweDk3RkYsIDB4NTJFNCwgMHg4QjM5LCAweDYzRUQsIDB4NjRDQSwgMHg3ODRGLCAweDdBNDAsDQotICAgIDB4NkJCQSwgMHg3OTQ5LCAweDg5OTYsIDB4NzE2RSwgMHg3OTNFLCAweDgwMDUsIDB4ODFFRCwgMHg3OTVELA0KLSAgICAweDY2OTEsIDB4N0Y3MiwgMHg2RDg5LCAweDcyQzAsIDB4NjEzQywgMHg3NzFFLCAweDdCQzAsIDB4Nzk1NiwNCi0gICAgMHg1MEU3LCAweDVDNjQsIDB4NURFMiwgMHg2MThFLCAweDhEMDgsIDB4NTM3RCwgMHg1NjA2LCAweDg0NTcsDQotICAgIDB4NUZCNSwgMHg2MUYyLCAweDkzQUQsIDB4Nzk4RSwgMHg5QjJELCAweDdBODEsIDB4OTZFMywgMHg2ODg1LA0KLSAgICAweDdFNDEsIDB4NjY2OSwgMHg1MzUxLCAweDc4OTEsIDB4OENEMywgMHg2NTRGLCAweDRGQUUsIDB4NTAwMiwNCi0gICAgMHg1ODQwLCAweDUyQzksIDB4NkI2NSwgMHg1OEE4LCAweDZCQ0YsIDB4NTE0RCwgMHg2MjNFLCAweDc5NTAsDQotICAgIDB4NkIwNCwgMHg5Njg2LCAweDg2NUMsIDB4NkREQSwgMHg5ODVFLCAweDY2QzYsIDB4NkI3NywgMHg3REY0LA0KLSAgICAweDkzNEEsIDB4NUVDQSwgMHg5MzA0LCAweDY5ODIsIDB4NTFCNCwgMHg2MzRDLCAweDg2REIsIDB4OTA4OSwNCi0gICAgMHg5MDIyLCAweDUwNDksIDB4N0RFRiwgMHg5MDU1LCAweDUzQTksIDB4OTkwQywgMHg4ODVCLCAweDVFRjYsDQotICAgIDB4NkNCRiwgMHg5MjVCLCAweDdGQzEsIDB4ODJCRCwgMHg5NkM1LCAweDVCQjMsIDB4NjE2OCwgMHg2OTgyLA0KLSAgICAweDZCQkIsIDB4NjU2MiwgMHg4Q0FCLCAweDVEQ0MsIDB4OTgxMSwgMHg1RTMwLCAweDhFQ0MsIDB4N0FBRSwNCi0gICAgMHg1NzQ3LCAweDUwOTEsIDB4N0E3NCwgMHg1MDY1LCAweDVFRkEsIDB4OTIzNywgMHg2QThFLCAweDRFQTQsDQotICAgIDB4NTE2QywgMHg2NkY0LCAweDY4MjEsIDB4Nzg2QywgMHg3RDVFLCAweDgwMDMsIDB4OENGQywgMHg5NjRELA0KLSAgICAweDYyRjcsIDB4N0Y2QSwgMHg0RjdGLCAweDUzRjIsIDB4NTlDOSwgMHg4QjFELCAweDkwQUEsIDB4NTNDRSwNCi0gICAgMHg4RjJGLCAweDY3RDQsIDB4NzdBQywgMHg4MjFDLCAweDY5NkYsIDB4Njc3RSwgMHg4QTFGLCAweDRFMDgsDQotICAgIDB4NTdGNCwgMHg2OTBELCAweDgwNzcsIDB4ODlBQSwgMHg5MDQyLCAweDYzNkUsIDB4NjQ0MiwgMHg4MjM5LA0KLSAgICAweDdEQ0YsIDB4ODA2MSwgMHg1MENGLCAweDhBOTUsIDB4NjA2NSwgMHg1MTQ2LCAweDc3M0EsIDB4ODA3NCwNCi0gICAgMHg4REYzLCAweDVFQUQsIDB4NUVGNywgMHg4MjQ3LCAweDY4NDMsIDB4OTAwMywgMHg2RDNFLCAweDYzOTIsDQotICAgIDB4OEYyOSwgMHg3M0VELCAweDk4MTIsIDB4NjBCMiwgMHg2MjQ5LCAweDY1OTAsIDB4N0RDQiwgMHg4QUI5LA0KLSAgICAweDhDQTcsIDB4NzIzNiwgMHg4NDdBLCAweDUyMDYsIDB4NTY3NCwgMHg2MUE0LCAweDdDODksIDB4N0QxQiwNCi0gICAgMHg5NkYwLCAweDg1M0QsIDB4NEZCRiwgMHg2MzY3LCAweDc2QzYsIDB4Njg1RCwgMHg4MTA4LCAweDgwMzYsDQotICAgIDB4N0ZGQywgMHg1NDBGLCAweDk2QTMsIDB4OUU5RiwgMHg5RTk3LCAweDgwNkYsIDB4ODA3RSwgMHg2RTdFLA0KLSAgICAweDUwODUsIDB4NTE5MywgMHg1MURCLCAweDUzMTUsIDB4NTM0MCwgMHg5NkQ5LCAweDU1QTksIDB4NTZDMSwNCi0gICAgMHg1NzBELCAweDU4QUIsIDB4NTlEQSwgMHg1QTM2LCAweDVBQkUsIDB4NUQ0RSwgMHg1RDg3LCAweDVEQzksDQotICAgIDB4NUREMywgMHg1RjJELCAweDVGOTgsIDB4NjBEOCwgMHg2MTNELCAweDYxRkUsIDB4NjI2OCwgMHg2MkNGLA0KLSAgICAweDY1MUQsIDB4NjQwRiwgMHg2NEYyLCAweDY1NUQsIDB4NjY1RiwgMHg2N0E5LCAweDY3RTcsIDB4Njk2QiwNCi0gICAgMHg2OTMwLCAweDY5QTcsIDB4NkE0NCwgMHg2QTkwLCAweDZDMDgsIDB4NkMxMywgMHg2RTIzLCAweDZGMTEsDQotICAgIDB4NkVGRSwgMHg2RjNFLCAweDcxRkYsIDB4NzNFNSwgMHg3NDMyLCAweDc0NUYsIDB4NzRFMCwgMHg3NTBDLA0KLSAgICAweDc2NzIsIDB4NzkyQSwgMHg3OEQ0LCAweDc5QkEsIDB4N0ExOSwgMHg3QTk1LCAweDdDRjIsIDB4N0Q3MywNCi0gICAgMHg3RERELCAweDdFMzUsIDB4N0ZBRSwgMHg3RkUxLCAweDgwNUEsIDB4ODA1RiwgMHg4MDczLCAweDgwNzAsDQotICAgIDB4ODA3NiwgMHg4MTUzLCAweDgxOEEsIDB4ODFCNSwgMHg4MUNELCAweDgzRjIsIDB4ODU1NSwgMHg4NUQ1LA0KLSAgICAweDg3MUEsIDB4ODgzNiwgMHg4ODlFLCAweDg4RDgsIDB4ODhGNCwgMHg4OTJCLCAweDg5M0IsIDB4ODk2QSwNCi0gICAgMHg4OTZGLCAweDhBMUQsIDB4OEQwNSwgMHg4RDBGLCAweDlGNEUsIDB4OEU5MSwgMHg4RUExLCAweDkwNTIsDQotICAgIDB4OTAwRSwgMHg5MTMwLCAweDkxNTYsIDB4OTE1OCwgMHg5MTY1LCAweDkxNzMsIDB4OTE3MiwgMHg5MUEyLA0KLSAgICAweDkxQUYsIDB4OTFBQSwgMHg5MUI0LCAweDkxQkEsIDB4OTQ3NywgMHg5Njk4LCAweDk3M0QsIDB4OTc2MCwNCi0gICAgMHg5NzcxLCAweDk4MEMsIDB4OTg3MywgMHg5OEMzLCAweDlBNDUsIDB4OUI0RCwgMHg5QjU4LCAweDlCQzYsDQotICAgIDB4OUJFMSwgMHg5QkYxLCAweDlENDgsIDB4OURDRiwgMHg5RjA4LCAweDYyNzEsIDB4NjY5NywgMHg2MTBGLA0KLSAgICAweDg4NjMsIDB4OTA1NSwgMHg5MDdBLCAweDc4RUYsIDB4NTRFMSwgMHgyRUQ3LCAweDJFQkQsIDB4NTNBOSwNCi0gICAgMHg3NERDLCAweDkwNEIsIDB4OTkwQywgMHg4ODVFLCAweDkyQjMsIDB4OTVCMSwgMHg1RUY2LCAweDYzRjQsDQotICAgIDB4NkNCRiwgMHg3MTU5LCAweDkwNjAsIDB4OTI1QiwgMHg2NUJDLCAweDVGODAsIDB4N0ZDMSwgMHg1Mzc4LA0KLSAgICAweDk3RjMsIDB4NTMxNiwgMHg4MkIxLCAweDgzRDMsIDB4OENBOCwgMHg5MDRFLCAweDgyQkQsIDB4OTZDNSwNCi0gICAgMHg5OTEzLCAweDVFRkIsIDB4NzA3MCwgMHg1QkIzLCAweDYxNjgsIDB4NjE2OCwgMHg2MTY4LCAweDY5RUEsDQotICAgIDB4Njk4MiwgMHg2NzZFLCAweDg5RDIsIDB4OTY5NCwgMHg1MjcyLCAweDhGNDQsIDB4OTM4QywgMHg4MkM1LA0KLSAgICAweDVCRDIsIDB4NzRCMCwgMHg3REU5LCAweDdGMzYsIDB4OTA4NCwgMHg5NTkyLCAweDk3RDMsIDB4ODIxOCwNCi0gICAgMHg1MzcxLCAweDU1OUMsIDB4MzQwMiwgMHgzNDAyLCAweDVFN0UsIDB4NjVFMywgMHg2NzFGLCAweDZBNUYsDQotICAgIDB4OEQ3NywgMHg5OEUyLCAweDU0MDksIDB4NTVBQiwgMHg4NjUwLCAweDkwMDYsIDB4NTNDQSwgMHg1NDM4LA0KLSAgICAweDYwMjUsIDB4N0QxQSwgMHg1REU4LCAweDYyRDIsIDB4OERERCwgMHg5QjVBLCAweDlCNUEsIDB4NTM3RiwNCi0gICAgMHg1RjNBLCAweDYwNTAsIDB4NjlDMSwgMHg2QTRCLCAweDZBNEIsIDB4OTExNSwgMHg5N0ZGLCAweDk5NTcsDQotICAgIDB4NjY4MSwgMHgyRUE5LCAweDhGRDEsIDB4NTAzNiwgMHg3N0U5LCAweDUxNzcsIDB4ODY1RSwgMHg3QTdBLA0KLSAgICAweDkwNDcsIDB4NkFEQiwgMHg1NTUzLCAweDU5NTEsIDB4NjA3NSwgMHg2MTY3LCAweDhGQ0UsIDB4NTA5MSwNCi0gICAgMHg2RjU0LCAweDdBNzQsIDB4MkVCQywgMHgyRUJDLCAweDUxN0MsIDB4NTIzOCwgMHg2MUIyLCAweDY3NDMsDQotICAgIDB4ODBBOSwgMHg4QjE5LCAweDkwNjMsIDB4NTM5RiwgMHg4QTAxLCAweDYyMzYsIDB4OTZDNywgMHg5ODY3LA0KLSAgICAweDU0MzMsIDB4NUExQiwgMHg4QUE0LCAweDVERTUsIDB4NjE0QywgMHg2Mjg1LCAweDYzQTcsIDB4NjlDQiwNCi0gICAgMHg2RDY5LCAweDZFMkYsIDB4ODAxNSwgMHg4MTU0LCAweDgzNTIsIDB4OEIxQiwgMHg4Q0ZDLCAweDU0M0YsDQotICAgIDB4OTE3NywgMHg4MTcwLCAweDc1MTEsIDB4OEZCQywgMHg0RUNBLCAweDkzOTYsIDB4NUVBNywgMHg1RjY5LA0KLSAgICAweDYzQTEsIDB4NkI3MiwgMHg4M0RDLCAweDUxQjQsIDB4NTRCMiwgMHg1MjRBLCAweDc1MjIsIDB4OTkxMCwNCi0gICAgMHg1OUZGLCAweDU5RkYsIDB4NURGRiwgMHg4QUVFLCAweDhBRUUsIDB4OENDNywgMHg4Q0M3LCAweDZCMjEsDQotICAgIDB4NkIyMSwgMHg2RUNCLCAweDczQkEsIDB4NTNGMSwgMHg2MzY4LCAweDY1OUMsIDB4OTBBQSwgMHg1MkZBLA0KLSAgICAweDcyMzUsIDB4NzIzNSwgMHg5MTRDLCAweDVGMzEsIDB4NEUzQiwgMHg1M0Q3LCAweDYzODgsIDB4NTQ2OCwNCi0gICAgMHg3RDQyLCAweDdGRDIsIDB4ODg0NiwgMHg5MDMxLCAweDRGNEYsIDB4ODg1MywgMHg4RkYwLCAweDVERTEsDQotICAgIDB4OTA3NSwgMHg5MDc1LCAweDYyNDAsIDB4NjZGOCwgMHg1OTczLCAweDUyREQsIDB4NTU0NiwgMHg1QkI1LA0KLSAgICAweDVDMDYsIDB4MkU4QywgMHgyRThELCAweDVDMTksIDB4NkQ4OCwgMHg3ODVELCAweDgwOTYsIDB4NEUwOCwNCi0gICAgMHg1QjgyLCAweDU3Q0UsIDB4NjBDNSwgMHg1N0Y0LCAweDk4RkUsIDB4NjkwRCwgMHg2Qjk2LCAweDk4REYsDQotICAgIDB4OThFMCwgMHgyRURFLCAweDM3OEQsIDB4NEZCNSwgMHgyRTk3LCAweDZENzgsIDB4NzcxRiwgMHg5MDMyLA0KLSAgICAweDRFQkIsIDB4NEVCQSwgMHg1MjAzLCAweDVDMEIsIDB4OEEwQSwgMHg4QTBBLCAweDhGQzUsIDB4ODg3MCwNCi0gICAgMHg5MDQyLCAweDM1MUYsIDB4NTJFMiwgMHg2MjEwLCAweDc2REIsIDB4ODA1NiwgMHg4OTgwLCAweDhBQTAsDQotICAgIDB4OEFDQiwgMHg5NzVDLCAweDk3NUMsIDB4N0EwNSwgMHg4MTA2LCAweDk2QkIsIDB4N0M0RCwgMHg3QkMwLA0KLSAgICAweDhBQUEsIDB4OTZFQSwgMHg3RDc2LCAweDYyNDcsIDB4NkY5OCwgMHg3RkExLCAweDgyMzksIDB4OTA3OCwNCi0gICAgMHg5MDc3LCAweDUyNEQsIDB4NTE2OCwgMHg2MzgzLCAweDYzRjcsIDB4NzYyNiwgMHg4RDcwLCAweDkwMDEsDQotICAgIDB4OTA2RCwgMHg5MDIwLCAweDJFQ0EsIDB4OTAxRiwgMHg4Q0NBLCAweDVDMEEsIDB4NUMwQSwgMHg1OUE1LA0KLSAgICAweDZDRjAsIDB4OTAwMCwgMHg5MDJFLCAweDk2OEEsIDB4OUJEQiwgMHg1OTI3LCAweDM0MjcsIDB4NzAyNywNCi0gICAgMHg5MDU0LCAweDgxMkIsIDB4NEUzOSwgMHg2QjRFLCAweDcwQUQsIDB4OEE5NSwgMHg2Njk2LCAweDUwMjQsDQotICAgIDB4N0Y2RSwgMHg3QkM5LCAweDJFQUUsIDB4N0I1MSwgMHg5MDEwLCAweDY3RjEsIDB4NkNFOCwgMHg5OUQwLA0KLSAgICAweDVGNkIsIDB4NUZCNSwgMHg2MUYyLCAweDY3MUQsIDB4NkY2RSwgMHg4QUJGLCAweDc2RjQsIDB4NjcxNSwNCi0gICAgMHg2NzE1LCAweDU4OUMsIDB4OEZGRCwgMHg5MDFBLCAweDU3NkEsIDB4OTFFMywgMHg1NDQ4LCAweDVFMUQsDQotICAgIDB4N0EwQiwgMHg3Njg0LCAweDkwNjksIDB4OEZFRCwgMHg2REZCLCAweDUxNEUsIDB4OTAxNCwgMHg3ODNBLA0KLSAgICAweDU3MjEsIDB4NTcxRiwgMHg1MUFDLCAweDU1MTAsIDB4N0NENiwgMHg4NUU0LCAweDhCMDQsIDB4OTAwMywNCi0gICAgMHg5MDBGLCAweDlBMzAsIDB4NUMwRSwgMHg5MDUzLCAweDU0NTEsIDB4M0I4OCwgMHg1MTY3LCAweDgwODksDQotICAgIDB4NEU3MywgMHg1RkNELCAweDhBOEQsIDB4NUJFNywgMHg3RDBELCAweDg5ODcsIDB4NkQzRSwgMHg4MEJBLA0KLSAgICAweDUzNUEsIDB4ODU4NCwgMHg4RkVCLCAweDdFMUIsIDB4ODA4NywgMHg0RTM3LCAweDZGNTEsIDB4OTFCMSwNCi0gICAgMHg0RjM0LCAweDUyMjQsIDB4NTM0QSwgMHg1RTA2LCAweDc1NTQsIDB4NjY2OSwgMHg4NTQzLCAweDkwN0YsDQotICAgIDB4NUZBRSwgMHg5RjNCLCAweDUzMzksIDB4MkVBQSwgMHg1RjY1LCAweDU5RUMsIDB4NTlFQiwgMHg4QTU1LA0KLSAgICAweDVFOTksIDB4NzVDNSwgMHg1QTY2LCAweDY1NzcsIDB4NkQ2RSwgMHg4Q0EwLCAweDhDQTAsIDB4NjcwRCwNCi0gICAgMHg4OTg2LCAweDRFMTksIDB4NUU2MywgMHg1RTczLCAweDVGMEEsIDB4ODUxMSwgMHg1MDRGLCAweDdERTgsDQotICAgIDB4OEZENCwgMHg5MDRELCAweDdDM0YsIDB4NTMwNSwgMHg1RDI5LCAweDYyQjEsIDB4NjcwQiwgMHg3ODMyLA0KLSAgICAweDdFMkIsIDB4ODBERSwgMHg4NDBDLCAweDkwQTYsIDB4OTBBNiwgMHg5OEZELCAweDlENkMsIDB4NEVBMSwNCi0gICAgMHg1RTNELCAweDVGRDgsIDB4NUZEOSwgMHg2MjNGLCAweDY3MUIsIDB4NjcxQiwgMHg1MTkyLCAweDY0NjksDQotICAgIDB4N0ZGQiwgMHg1MUUxLCAweDc4RTgsIDB4OUI1NCwgMHgyRkM3LCAweDY5RDksIDB4Njg1RCwgMHg0RkUzLA0KLSAgICAweDUzQzgsIDB4N0U2RCwgMHg5RUJGLCAweDgxMDgsIDB4NjYwRSwgMHg3NkRGLCAweDhGRjcsIDB4NTk4NCwNCi0gICAgMHg1MkQwLCAweDc2RjIsIDB4ODAxNywgMHg2MjNFLCAweDdEMEIsIDB4OTU4MCwgMHg3RDA0LCAweDhFOEQsDQotICAgIDB4Njg3QSwgMHg2ODdBLCAweDY4MDEsIDB4NjEwOSwgMHg4QUVELCAweDhGMzgsIDB4NTJDNywgMHg2NzA5LA0KLSAgICAweDczMzYsIDB4NzMzNiwgMHg3MzM3LCAweDg4RDUsIDB4OTA0QSwgMHg2NkRDLCAweDJFQjcsIDB4ODk4MSwNCi0gICAgMHg5OTBBLCAweDdGQ0MsIDB4N0ZGQywgMHg4RUI2LCAweDg2MkQsIDB4NzM4NywgMHg5RjhELCAweDlGOEQsDQotICAgIDB4NjVDNSwgMHg2ODgxLCAweDcxRDAsIDB4OTZBMywgMHg5QzU3LCAweDlFOUYsIDB4N0M3QiwgMHg1RUM5LA0KLSAgICAweDYxOTAsIDB4OTAyMywgMHg2NzE3LCAweDgwMDIsIDB4ODEwNywgMHg1MENBLCAweDUxMUEsIDB4NTE1NCwNCi0gICAgMHg1MTk1LCAweDJFODcsIDB4NTI4RCwgMHg1MkQ3LCAweDUyRjksIDB4NTM0OSwgMHgzNTNFLCAweDUzREYsDQotICAgIDB4NjZGQywgMHg1NTMzLCAweDU1RTQsIDB4NTQ1NSwgMHg1NkMwLCAweDU5MzksIDB4NUExQywgMHg1QUMyLA0KLSAgICAweDVCNzMsIDB4NUJDMywgMHg1QzE0LCAweDM3RTIsIDB4NUNFNiwgMHg1RTU0LCAweDRFNDgsIDB4NUVFMywNCi0gICAgMHg2MDk3LCAweDYyRDQsIDB4NjJDQywgMHg2NDFDLCAweDYzQzYsIDB4NjQyOCwgMHg4MjA5LCAweDYzMUIsDQotICAgIDB4NjY1RiwgMHg2NjVGLCAweDY2NjMsIDB4NjZGNSwgMHg2NzVFLCAweDY4OUQsIDB4Njg4RCwgMHg2OUY2LA0KLSAgICAweDY5NjEsIDB4NUJFOCwgMHg1QkU4LCAweDY5QkIsIDB4NkJDQywgMHg2RjExLCAweDZFMTcsIDB4NkY5OCwNCi0gICAgMHg2Q0FBLCAweDZDQUEsIDB4NzAxQiwgMHg3MTYyLCAweDcyM0IsIDB4NEUyQywgMHg3MzFDLCAweDc0Q0EsDQotICAgIDB4NzRFRiwgMHg3NTc1LCAweDc1RUMsIDB4NzY0RSwgMHgzRkIxLCAweDc3NkEsIDB4NzdBOSwgMHg3OTQwLA0KLSAgICAweDc5NTMsIDB4Nzk1MywgMHg5RjRCLCAweDc5QUUsIDB4OTA4MywgMHg3QjUzLCAweDdDMTEsIDB4N0MxNCwNCi0gICAgMHg0MjY0LCAweDdDNTAsIDB4N0M1OCwgMHg3RDQ2LCAweDdENjMsIDB4N0UyMiwgMHg3RTIyLCAweDdFNDgsDQotICAgIDB4N0UzNSwgMHg3RTQzLCAweDdFOEMsIDB4N0Y1MCwgMHg3RjUxLCAweDdGNTEsIDB4N0Y1MSwgMHg3RkM1LA0KLSAgICAweDdGQzYsIDB4N0ZFOSwgMHg4MTQxLCAweDQ0NTMsIDB4ODI1OCwgMHg4Mjc5LCAweDJFQkYsIDB4MkVDMCwNCi0gICAgMHg4MkUzLCAweDUxNzksIDB4ODNBMiwgMHg4NDIwLCAweDgzQkQsIDB4ODRGNCwgMHg4NTZELCAweDg1ODcsDQotICAgIDB4ODVGNCwgMHg0RTU1LCAweDg3MzcsIDB4ODczQiwgMHg4ODA1LCAweDg3QkQsIDB4ODY3RCwgMHg4ODM2LA0KLSAgICAweDg5NDQsIDB4ODhDNiwgMHg4OUJELCAweDhBREIsIDB4OEIzRSwgMHg4QjVBLCAweDhENzMsIDB4OEQ5OSwNCi0gICAgMHg4RENCLCAweDhFMzQsIDB4OEU0QSwgMHg4RkVGLCAweDkwODcsIDB4OEZGQSwgMHg5MDFFLCAweDkwMzUsDQotICAgIDB4OTA1MCwgMHg4RkM4LCAweDkwODEsIDB4OTA4QSwgMHg5MDhBLCAweDkwOEEsIDB4OTA4QSwgMHg5MDhBLA0KLSAgICAweDkwOEEsIDB4OTA4OSwgMHg5MDg5LCAweDkwODksIDB4OTA4OSwgMHg5MDg5LCAweDkwODksIDB4OTA4OSwNCi0gICAgMHg5MDg5LCAweDkwODksIDB4OTA4OSwgMHg5MDg5LCAweDkwODksIDB4OTJDRiwgMHg5M0RELCAweDk1QkMsDQotICAgIDB4OTYyMSwgMHg5NkIyLCAweDk3NUMsIDB4OTgzOSwgMHg5OEVCLCAweDk5MDMsIDB4OTkwOSwgMHg5OTQ1LA0KLSAgICAweDk5NDUsIDB4OTk0QiwgMHg5QTA4LCAweDlBNUYsIDB4OUE2NSwgMHg5QUVGLCAweDlCMTgsIDB4OUJERiwNCi0gICAgMHg5RDA5LCAweDlEMDgsIDB4OUVBNSwgMHg5RUNDLCAweDlGMDgsIDB4OUY0QSwgMHg5RjYzLCAweDlGNjcsDQotICAgIDB4OUY2QywgMHg3MTk5LCAweDcxOTksIDB4ODkxQywgMHg2OEM4LCAweDY2RkIsIDB4NUY0NSwgMHg1MzAwLA0KLSAgICAweDUzODksIDB4NTk1MywgMHhGQTExLCAweDY4NTIsIDB4NkE3MywgMHg2RDg3LCAweEZBMTUsIDB4OEExMiwNCi0gICAgMHg0RTA0LCAweDRFMDUsIDB4NEUxRiwgMHg0RTJCLCAweDRFMkYsIDB4NEUzMCwgMHg0RTQwLCAweDRFNDEsDQotICAgIDB4NEU0NCwgMHg0RTVBLCAweDRFN0YsIDB4NEU4RCwgMHg0RTk2LCAweDRFQjksIDB4NEVEMCwgMHg0RUUwLA0KLSAgICAweDRFRkQsIDB4NEVGRiwgMHg0RjBCLCAweDRGMTUsIDB4NEY2MCwgMHg0RjNCLCAweDRGNDksIDB4NEY1NCwNCi0gICAgMHg0RjdBLCAweDRGN0QsIDB4NEY3RSwgMHg0Rjk3LCAweDRGQkUsIDB4NEZDRiwgMHg0RkZELCAweDUwMDAsDQotICAgIDB4NTAwMSwgMHg1MDEwLCAweDUwMUIsIDB4NTAyNywgMHg1MDJFLCAweDUwNTcsIDB4NTA2NiwgMHg1MDZBLA0KLSAgICAweDUwM0IsIDB4NTA4RiwgMHg1MDk2LCAweDUwOUMsIDB4NTBDQywgMHg1MEU2LCAweDUwRTksIDB4NTBFRiwNCi0gICAgMHg1MTA4LCAweDUxMEIsIDB4NTExMCwgMHg1MTFCLCAweDUxMUUsIDB4NTE1RiwgMHg1MUExLCAweDUxQkMsDQotICAgIDB4NTFERSwgMHg1MUVFLCAweDUxRjQsIDB4NTIwMSwgMHg1MjAyLCAweDUyMTMsIDB4NTI0OSwgMHg1MjYxLA0KLSAgICAweDUyNjYsIDB4NTI5MywgMHg1MkM4LCAweDUyRjAsIDB4NTMwQSwgMHg1MzBCLCAweDUzM0UsIDB4NTM0QywNCi0gICAgMHg1MzRCLCAweDUzNjEsIDB4NTM2QywgMHg1M0FCLCAweDUzREEsIDB4NTNFNiwgMHg1M0Y1LCAweDU0MjcsDQotICAgIDB4NTQ0RCwgMHg1NDY2LCAweDU0NkIsIDB4NTQ3NCwgMHg1NDhELCAweDU0OTYsIDB4NTRBMSwgMHg1NEFELA0KLSAgICAweDU0QjksIDB4NTRCRiwgMHg1NEM2LCAweDU0Q0QsIDB4NTUwRSwgMHg1NTJCLCAweDU1MzUsIDB4NTU0QSwNCi0gICAgMHg1NTYwLCAweDU1NjEsIDB4NTU4OCwgMHg1NThFLCAweDU2MDgsIDB4NTYwRSwgMHg1NjBGLCAweDU2MzcsDQotICAgIDB4NTYzRiwgMHg1NjQ5LCAweDU2NEIsIDB4NTY0RiwgMHg1NjY2LCAweDU2NjksIDB4NTY2RiwgMHg1NjcxLA0KLSAgICAweDU2NzIsIDB4NTY5NSwgMHg1NjlBLCAweDU2QUMsIDB4NTZBRCwgMHg1NkIxLCAweDU2QzksIDB4NTZERCwNCi0gICAgMHg1NkU0LCAweDU3MEEsIDB4NTcxNSwgMHg1NzIzLCAweDU3MkYsIDB4NTczMywgMHg1NzM0LCAweDU3NEMsDQotICAgIDB4NTc3MCwgMHg1NzhDLCAweDU3OUMsIDB4NTdCOCwgMHg1N0U2LCAweDU3RUQsIDB4NTdGNSwgMHg1N0Y2LA0KLSAgICAweDU3RkYsIDB4NTgwOSwgMHg1ODIwLCAweDU4MzIsIDB4NTg3QywgMHg1ODgwLCAweDU4QTksIDB4NThDRSwNCi0gICAgMHg1OEQwLCAweDU4RDQsIDB4NThEQSwgMHg1OEU5LCAweDU5MEMsIDB4NTkyNCwgMHg1OTJGLCAweDU5NjEsDQotICAgIDB4NTk2RCwgMHg1OUNBLCAweDU5RDIsIDB4NTlERCwgMHg1OUUzLCAweDU5RTQsIDB4NUEwNCwgMHg1QTBDLA0KLSAgICAweDVBMjMsIDB4NUE0NywgMHg1QTU1LCAweDVBNjMsIDB4NUE2RCwgMHg1QTdFLCAweDVBOUUsIDB4NUFBNywNCi0gICAgMHg1QUFDLCAweDVBQjMsIDB4NUFFMCwgMHg1QjAwLCAweDVCMTksIDB4NUIyNSwgMHg1QjJELCAweDVCNDEsDQotICAgIDB4NUI3QywgMHg1QjdFLCAweDVCN0YsIDB4NUI4QSwgMHg1QzIzLCAweDVDMkIsIDB4NUMzMCwgMHg1QzYzLA0KLSAgICAweDVDNjksIDB4NUM3QywgMHg1Q0NCLCAweDVDRDIsIDB4NUNGNCwgMHg1RDI0LCAweDVEMjYsIDB4NUQ0MywNCi0gICAgMHg1RDQ2LCAweDVENEEsIDB4NUQ5MiwgMHg1RDk0LCAweDVEOTksIDB4NURBMCwgMHg1REQ4LCAweDVERTAsDQotICAgIDB4NURGOCwgMHg1RTAwLCAweDVFMTIsIDB4NUUxNCwgMHg1RTE1LCAweDVFMTgsIDB4NUUyRSwgMHg1RTU4LA0KLSAgICAweDVFNkIsIDB4NUU2QywgMHg1RUE4LCAweDVFQUEsIDB4NUVCRSwgMHg1RUJGLCAweDVFQ0IsIDB4NUVEMiwNCi0gICAgMHg1RjA3LCAweDVGMEUsIDB4NUYxQywgMHg1RjFELCAweDVGMjIsIDB4NUYyOCwgMHg1RjM2LCAweDVGM0IsDQotICAgIDB4NUY0MCwgMHg1RjUwLCAweDVGNTgsIDB4NUY2NCwgMHg1Rjg5LCAweDVGOUMsIDB4NUZBNywgMHg1RkE0LA0KLSAgICAweDVGQUYsIDB4NUZCOCwgMHg1RkM0LCAweDVGQzksIDB4NUZFMSwgMHg1RkU5LCAweDVGRUQsIDB4NUZGQywNCi0gICAgMHg2MDE3LCAweDYwMUEsIDB4NjAzMywgMHg2MDYxLCAweDYwN0YsIDB4NjA5RSwgMHg2MEE0LCAweDYwQjAsDQotICAgIDB4NjBDQiwgMHg2MERCLCAweDYwRjgsIDB4NjExMiwgMHg2MTEzLCAweDYxMTQsIDB4NjExQywgMHg2MTdDLA0KLSAgICAweDYxOEQsIDB4NjE5RiwgMHg2MUE4LCAweDYxQzIsIDB4NjFERiwgMHg2MjE1LCAweDYyMjksIDB4NjI0MywNCi0gICAgMHg2MjQ2LCAweDYyNEMsIDB4NjI1MSwgMHg2MjU2LCAweDYyQzQsIDB4NjJGQywgMHg2MzBBLCAweDYzMEQsDQotICAgIDB4NjMxOCwgMHg2MzM5LCAweDYzNDIsIDB4NjM0MywgMHg2MzY1LCAweDYzNzQsIDB4NjM3RCwgMHg2Mzg0LA0KLSAgICAweDYzODcsIDB4NjM5MCwgMHg2MzlFLCAweDYzRDEsIDB4NjNEQywgMHg2NDA5LCAweDY0MTAsIDB4NjQyMiwNCi0gICAgMHg2NDU0LCAweDY0NUIsIDB4NjQ2RCwgMHg2NDdCLCAweDY0QkUsIDB4NjRCRiwgMHg2NEU1LCAweDY0RjcsDQotICAgIDB4NjRGQiwgMHg2NTA0LCAweDY1MTYsIDB4NjUxOSwgMHg2NTQ3LCAweDY1NjcsIDB4NjU4MSwgMHg2NTg1LA0KLSAgICAweDY1QzIsIDB4NjVGMCwgMHg2NUYyLCAweDY2MkMsIDB4NjY0QywgMHg2NjVCLCAweDY2NUMsIDB4NjY2MSwNCi0gICAgMHg2NjZCLCAweDY2NzcsIDB4NjZBNCwgMHg2NkM4LCAweDY2RUMsIDB4NjcwNSwgMHg2NzEzLCAweDY3MzMsDQotICAgIDB4Njc0OCwgMHg2NzRDLCAweDY3NzYsIDB4Njc3QiwgMHg2N0IwLCAweDY3QjIsIDB4NjdGOSwgMHg2N0Q3LA0KLSAgICAweDY3RDksIDB4NjdGMCwgMHg2ODJDLCAweDY4MzAsIDB4NjgzMSwgMHg2ODVCLCAweDY4NzIsIDB4Njg3NSwNCi0gICAgMHg2ODdBLCAweDY4ODQsIDB4NjhBNSwgMHg2OEIyLCAweDY4RDAsIDB4NjhENiwgMHg2OEU4LCAweDY4RUQsDQotICAgIDB4NjhGMCwgMHg2OEYxLCAweDY4RkMsIDB4NjkxMSwgMHg2OTEzLCAweDY5MzUsIDB4NjkzQiwgMHg2OTU3LA0KLSAgICAweDY5NjMsIDB4Njk3MiwgMHg2OTdGLCAweDY5ODAsIDB4NjlBNiwgMHg2OUFELCAweDY5QjcsIDB4NjlENiwNCi0gICAgMHg2OUQ3LCAweDZBMDEsIDB4NkEwRiwgMHg2QTE1LCAweDZBMjgsIDB4NkEzNCwgMHg2QTNFLCAweDZBNDUsDQotICAgIDB4NkE1MCwgMHg2QTUxLCAweDZBNTYsIDB4NkE1QiwgMHg2QTgzLCAweDZBODksIDB4NkE5MSwgMHg2QTlELA0KLSAgICAweDZBOUUsIDB4NkE5RiwgMHg2QURDLCAweDZBRTcsIDB4NkFFQywgMHg2QjFFLCAweDZCMjQsIDB4NkIzNSwNCi0gICAgMHg2QjQ2LCAweDZCNTYsIDB4NkI2MCwgMHg2QjgyLCAweDZCQkUsIDB4NkJFMSwgMHg2QkYxLCAweDZDMTAsDQotICAgIDB4NkMzMywgMHg2QzM1LCAweDZDM0EsIDB4NkM1OSwgMHg2Qzc2LCAweDZDN0IsIDB4NkM4NSwgMHg2Qzk1LA0KLSAgICAweDZDOUMsIDB4NkNEMCwgMHg2Q0Q0LCAweDZDRDYsIDB4NkNFMCwgMHg2Q0VCLCAweDZDRUMsIDB4NkNFRSwNCi0gICAgMHg2RDBBLCAweDZEMEUsIDB4NkQxMSwgMHg2RDJFLCAweDZENTcsIDB4NkQ1RSwgMHg2RDY1LCAweDZEODIsDQotICAgIDB4NkRCRiwgMHg2REM0LCAweDZEQ0EsIDB4NkRENiwgMHg2REU5LCAweDZFMjIsIDB4NkU1MSwgMHg2RUM3LA0KLSAgICAweDZFQ0EsIDB4NkVDRSwgMHg2RUZELCAweDZGMUEsIDB4NkYyQSwgMHg2RjJGLCAweDZGMzMsIDB4NkY1QSwNCi0gICAgMHg2RjVFLCAweDZGNjIsIDB4NkY3RCwgMHg2RjhCLCAweDZGOEQsIDB4NkY5MiwgMHg2Rjk0LCAweDZGOUEsDQotICAgIDB4NkZBNywgMHg2RkE4LCAweDZGQjYsIDB4NkZEQSwgMHg2RkRFLCAweDZGRjksIDB4NzAzOSwgMHg3MDNDLA0KLSAgICAweDcwNEEsIDB4NzA1NCwgMHg3MDVELCAweDcwNUUsIDB4NzA2NCwgMHg3MDZDLCAweDcwN0UsIDB4NzA4MSwNCi0gICAgMHg3MDk1LCAweDcwQjcsIDB4NzBEMywgMHg3MEQ0LCAweDcwRDgsIDB4NzBEQywgMHg3MTA3LCAweDcxMjAsDQotICAgIDB4NzEzMSwgMHg3MTRBLCAweDcxNTIsIDB4NzE2MCwgMHg3MTc5LCAweDcxOTIsIDB4NzFCMywgMHg3MUNCLA0KLSAgICAweDcxRDMsIDB4NzFENiwgMHg3MjAwLCAweDcyMUQsIDB4NzIyQiwgMHg3MjM4LCAweDcyNDEsIDB4NzI1MywNCi0gICAgMHg3MjU1LCAweDcyNTYsIDB4NzI1QywgMHg3MjhELCAweDcyQUQsIDB4NzJCNCwgMHg3MkM3LCAweDcyRkIsDQotICAgIDB4NzMwNCwgMHg3MzA1LCAweDczMjgsIDB4NzMzMSwgMHg3MzQzLCAweDczNkMsIDB4NzM3QywgMHg3MzgzLA0KLSAgICAweDczODUsIDB4NzM4NiwgMHg3Mzk1LCAweDczOUUsIDB4NzM5RiwgMHg3M0EwLCAweDczQTYsIDB4NzNBQiwNCi0gICAgMHg3M0I1LCAweDczQjcsIDB4NzNCQywgMHg3M0NGLCAweDczRDksIDB4NzNFOSwgMHg3M0Y0LCAweDczRkQsDQotICAgIDB4NzQwNCwgMHg3NDBBLCAweDc0MUEsIDB4NzQxQiwgMHg3NDI0LCAweDc0MjgsIDB4NzQyQywgMHg3NDJGLA0KLSAgICAweDc0MzAsIDB4NzQzMSwgMHg3NDM5LCAweDc0NDQsIDB4NzQ0NywgMHg3NDRCLCAweDc0NEQsIDB4NzQ1MSwNCi0gICAgMHg3NDU3LCAweDc0NjYsIDB4NzQ2QiwgMHg3NDcxLCAweDc0ODAsIDB4NzQ4NSwgMHg3NDg2LCAweDc0ODcsDQotICAgIDB4NzQ5MCwgMHg3NDk4LCAweDc0OUMsIDB4NzRBMCwgMHg3NEEzLCAweDc0QTgsIDB4NzRBQiwgMHg3NEI1LA0KLSAgICAweDc0QkYsIDB4NzRDOCwgMHg3NERBLCAweDc0REUsIDB4NzU0RSwgMHg3NTc5LCAweDc1ODEsIDB4NzU5MCwNCi0gICAgMHg3NTkyLCAweDc1OTMsIDB4NzVCNCwgMHg3NUU0LCAweDc1RjksIDB4NzYwMCwgMHg3NjBBLCAweDc2MTUsDQotICAgIDB4NzYxNiwgMHg3NjE5LCAweDc2MUUsIDB4NzYyRCwgMHg3NjM1LCAweDc2NDMsIDB4NzY0QiwgMHg3NjY1LA0KLSAgICAweDc2NkQsIDB4NzY2RiwgMHg3NjcxLCAweDc2NzQsIDB4NzZBNCwgMHg3NkE1LCAweDc2QzUsIDB4NzZDQywNCi0gICAgMHg3NkVDLCAweDc2RkMsIDB4NzczNCwgMHg3NzM2LCAweDc3NUMsIDB4Nzc1RiwgMHg3NzYwLCAweDc3NzIsDQotICAgIDB4Nzc3RCwgMHg3Nzk1LCAweDc3QUEsIDB4NzdFNiwgMHg3N0YwLCAweDc3RjQsIDB4NzgwNiwgMHg3ODIyLA0KLSAgICAweDc4MkQsIDB4NzgyRSwgMHg3ODMwLCAweDc4MzUsIDB4Nzg2OCwgMHg3ODlFLCAweDc4QzgsIDB4NzhDQywNCi0gICAgMHg3OENFLCAweDc4RTQsIDB4NzhFMCwgMHg3OEUxLCAweDc4RjIsIDB4NzhGNywgMHg3OEZCLCAweDc5MzEsDQotICAgIDB4NzkzNCwgMHg3OTNCLCAweDc5M0QsIDB4Nzk0NSwgMHg3OTVCLCAweDc5NUMsIDB4Nzk4QiwgMHg3OTk2LA0KLSAgICAweDc5OTgsIDB4NzlCOCwgMHg3OUJCLCAweDc5Q0EsIDB4NzlEQSwgMHg3QTAzLCAweDdBMDksIDB4N0ExMSwNCi0gICAgMHg3QTFFLCAweDdBMkQsIDB4N0EzOSwgMHg3QTQ1LCAweDdBNEMsIDB4N0E1RCwgMHg3QTYwLCAweDdBNkQsDQotICAgIDB4N0E3OCwgMHg3QUEwLCAweDdBQTMsIDB4N0FCMywgMHg3QUJCLCAweDdBQkMsIDB4N0FDNiwgMHg3QjA3LA0KLSAgICAweDdCMTQsIDB4N0IyNywgMHg3QjMxLCAweDdCNDcsIDB4N0I0RSwgMHg3QjYwLCAweDdCNjksIDB4N0I2RCwNCi0gICAgMHg3QjcyLCAweDdCOTEsIDB4N0JBRiwgMHg3QkQ3LCAweDdCRDksIDB4N0MwQiwgMHg3QzBGLCAweDdDMjAsDQotICAgIDB4N0MyNiwgMHg3QzMxLCAweDdDMzYsIDB4N0M1MSwgMHg3QzU5LCAweDdDNjcsIDB4N0M2RSwgMHg3QzcwLA0KLSAgICAweDdDQkMsIDB4N0NCRiwgMHg3Q0M4LCAweDdDQzksIDB4N0NENywgMHg3Q0Q5LCAweDdDREQsIDB4N0NFQiwNCi0gICAgMHg3RDA3LCAweDdEMDgsIDB4N0QwOSwgMHg3RDEzLCAweDdEMUQsIDB4N0QyMywgMHg3RDQxLCAweDdENTMsDQotICAgIDB4N0Q1OSwgMHg3RDVELCAweDdEN0EsIDB4N0Q4NiwgMHg3RDhCLCAweDdEOEMsIDB4N0RDQywgMHg3REVCLA0KLSAgICAweDdERjEsIDB4N0RGOSwgMHg3RTA4LCAweDdFMTEsIDB4N0UxNSwgMHg3RTIwLCAweDdFNDcsIDB4N0U2MiwNCi0gICAgMHg3RTZFLCAweDdFNzMsIDB4N0U4RCwgMHg3RTkxLCAweDdFOTgsIDB4N0Y0NCwgMHg3RjRGLCAweDdGNTIsDQotICAgIDB4N0Y1MywgMHg3RjYxLCAweDdGOTEsIDB4N0ZCRiwgMHg3RkNFLCAweDdGREYsIDB4N0ZFNSwgMHg3RkVDLA0KLSAgICAweDdGRUUsIDB4N0ZFRiwgMHg3RkZBLCAweDgwMEUsIDB4ODAxMSwgMHg4MDE0LCAweDgwMjQsIDB4ODAyNiwNCi0gICAgMHg4MDNBLCAweDgwM0MsIDB4ODA2MCwgMHg4MDcxLCAweDgwNzUsIDB4ODA5RSwgMHg4MEE2LCAweDgwQUIsDQotICAgIDB4ODBENywgMHg4MEQ4LCAweDgxMTYsIDB4ODExOCwgMHg4MTNBLCAweDgxNEEsIDB4ODE0QywgMHg4MTgxLA0KLSAgICAweDgxODQsIDB4ODFCNCwgMHg4MUNGLCAweDgxRjksIDB4ODIwMywgMHg4MjIxLCAweDgyMzIsIDB4ODIzNCwNCi0gICAgMHg4MjQ2LCAweDgyNEIsIDB4ODI0RiwgMHg4MjhFLCAweDgyQUUsIDB4ODJCNywgMHg4MkJFLCAweDgyQzYsDQotICAgIDB4ODJGRSwgMHg4MzQzLCAweDgzNTEsIDB4ODM1NSwgMHg4Mzg2LCAweDgzOEQsIDB4ODM5MiwgMHg4Mzk4LA0KLSAgICAweDgzQTksIDB4ODNCRiwgMHg4M0MwLCAweDgzRUEsIDB4ODQwRiwgMHg4NDExLCAweDg0NEEsIDB4ODQ3NiwNCi0gICAgMHg4NEE4LCAweDg0QUYsIDB4ODRDMCwgMHg4NEMyLCAweDg0RjAsIDB4ODRGRCwgMHg4NTBDLCAweDg1MzQsDQotICAgIDB4ODU1RSwgMHg4NThGLCAweDg1QjcsIDB4ODVDRSwgMHg4NUFELCAweDg2MTIsIDB4ODYyOSwgMHg4NjUyLA0KLSAgICAweDg2NjMsIDB4ODY2QywgMHg4NjZGLCAweDg2N0EsIDB4ODY4RCwgMHg4NjkxLCAweDg2OTgsIDB4ODZBNywNCi0gICAgMHg4NkE4LCAweDg2RkEsIDB4ODZGRCwgMHg4NzBCLCAweDg3MTMsIDB4ODcxOSwgMHg4NzFFLCAweDg3MjgsDQotICAgIDB4ODczRSwgMHg4NzcxLCAweDg3ODgsIDB4ODc5OSwgMHg4N0FDLCAweDg3QUQsIDB4ODdCNSwgMHg4N0Q2LA0KLSAgICAweDg3RUIsIDB4ODdFRCwgMHg4ODAxLCAweDg4MDMsIDB4ODgwNiwgMHg4ODBCLCAweDg4MTQsIDB4ODgxQywNCi0gICAgMHg4ODU2LCAweDg4NUYsIDB4ODg2NCwgMHg4ODk4LCAweDg4QUEsIDB4ODhCRCwgMHg4OEJFLCAweDg4Q0EsDQotICAgIDB4ODhEMiwgMHg4OERCLCAweDg4RjAsIDB4ODhGMSwgMHg4OTA2LCAweDg5MTgsIDB4ODkxOSwgMHg4OTFBLA0KLSAgICAweDg5MjcsIDB4ODkzMCwgMHg4OTNFLCAweDg5N0IsIDB4ODlENCwgMHg4OUQ2LCAweDg5RTUsIDB4ODlGMSwNCi0gICAgMHg4QTA3LCAweDhBMEYsIDB4OEExNSwgMHg4QTIyLCAweDhBNEUsIDB4OEE3RiwgMHg4QUY0LCAweDhCMUYsDQotICAgIDB4OEIzNywgMHg4QjQzLCAweDhCNDQsIDB4OEI1NCwgMHg4QjlDLCAweDhCOUUsIDB4OEM0NywgMHg4QzU0LA0KLSAgICAweDhDNzMsIDB4OENBNCwgMHg4Q0Q5LCAweDhDRTEsIDB4OENGOCwgMHg4Q0ZFLCAweDhEMUIsIDB4OEQ2OSwNCi0gICAgMHg4RDZDLCAweDhEODQsIDB4OEQ4RCwgMHg4RDk1LCAweDhEQTYsIDB4OERDNiwgMHg4RENFLCAweDhERTQsDQotICAgIDB4OERFQywgMHg4RTIwLCAweDhFNEIsIDB4OEU2QywgMHg4RTcwLCAweDhFN0EsIDB4OEU5MiwgMHg4RUFFLA0KLSAgICAweDhFQjMsIDB4OEVEMSwgMHg4RUQ0LCAweDhFRjksIDB4OEYxNywgMHg4RjM2LCAweDhGQTYsIDB4OEZCNSwNCi0gICAgMHg4RkI2LCAweDhGQzYsIDB4OEZFMCwgMHg4RkU0LCAweDhGRjYsIDB4OTAwMiwgMHg5MDJDLCAweDkwNDQsDQotICAgIDB4OTA4OCwgMHg5MDk1LCAweDkwOTksIDB4OTA5QiwgMHg5MEEyLCAweDkwQjQsIDB4OTBENywgMHg5MERELA0KLSAgICAweDkwRjQsIDB4OTExNywgMHg5MTFDLCAweDkxMzEsIDB4OTEzQSwgMHg5MTNELCAweDkxNDgsIDB4OTE1QiwNCi0gICAgMHg5MTYxLCAweDkxNjQsIDB4OTE4RSwgMHg5MTlFLCAweDkxQTgsIDB4OTFBRCwgMHg5MUFFLCAweDkxQjIsDQotICAgIDB4OTFCQywgMHg5MUYwLCAweDkxRjcsIDB4OTFGQiwgMHg5MjA3LCAweDkyMjgsIDB4OTIzMywgMHg5MjM4LA0KLSAgICAweDkyNDMsIDB4OTI0NywgMHg5MjRGLCAweDkyNjAsIDB4OTJDMiwgMHg5MkNCLCAweDkyQ0MsIDB4OTJERiwNCi0gICAgMHg5MzBELCAweDkzMTUsIDB4OTMxRiwgMHg5MzI3LCAweDkzNDcsIDB4OTM1MiwgMHg5MzY1LCAweDkzNkEsDQotICAgIDB4OTM2RCwgMHg5MzlCLCAweDkzQkEsIDB4OTNBOSwgMHg5M0MxLCAweDkzQ0EsIDB4OTNFMiwgMHg5M0ZBLA0KLSAgICAweDkzRkQsIDB4OTQwRiwgMHg5NDM0LCAweDk0M0YsIDB4OTQ1NSwgMHg5NDZCLCAweDk0NzIsIDB4OTU3OCwNCi0gICAgMHg5NUE2LCAweDk1QTksIDB4OTVBQiwgMHg5NUI0LCAweDk1QkQsIDB4OTVEQSwgMHg5NjFELCAweDk2NDEsDQotICAgIDB4OTY1OCwgMHg5Njg0LCAweDk2QTQsIDB4OTZBOSwgMHg5NkQyLCAweDVEQjIsIDB4OTZERSwgMHg5NkU5LA0KLSAgICAweDk2RjEsIDB4OTcwMiwgMHg5NzA5LCAweDk3NUEsIDB4OTc2MywgMHg5NzZFLCAweDk3NzMsIDB4OTc5QSwNCi0gICAgMHg5N0EyLCAweDk3QjUsIDB4OTdCNiwgMHg5N0Q5LCAweDk3REUsIDB4OTdGNCwgMHg5ODBBLCAweDk4MEUsDQotICAgIDB4OTgxRSwgMHg5ODIzLCAweDk4MkIsIDB4OTgzRSwgMHg5ODUyLCAweDk4NTMsIDB4OTg1OSwgMHg5ODZDLA0KLSAgICAweDk4QjgsIDB4OThCQSwgMHg5OEJGLCAweDk4QzgsIDB4OThFNSwgMHg5OTMyLCAweDk5MzMsIDB4OTk0MCwNCi0gICAgMHg5OTRELCAweDk5NUMsIDB4OTk1RiwgMHg5OUIxLCAweDk5QjksIDB4OTlCQSwgMHg5OUM5LCAweDlBMDIsDQotICAgIDB4OUExNiwgMHg5QTI0LCAweDlBMjcsIDB4OUEyRCwgMHg5QTJFLCAweDlBMzYsIDB4OUEzOCwgMHg5QTRBLA0KLSAgICAweDlBNTYsIDB4OUFCNSwgMHg5QUI2LCAweDlBRjksIDB4OUIwMywgMHg5QjIwLCAweDlCMzMsIDB4OUIzNCwNCi0gICAgMHg5QjczLCAweDlCNzksIDB4OUJBNywgMHg5QkMxLCAweDlCQzcsIDB4OUJENywgMHg5QkU3LCAweDlCRUIsDQotICAgIDB4OUJGNywgMHg5QkZBLCAweDlCRkQsIDB4OUMwQiwgMHg5QzI3LCAweDlDMkEsIDB4OUMzNiwgMHg5QzQxLA0KLSAgICAweDlDNTMsIDB4OUM2MywgMHg5QzZBLCAweDlDNzcsIDB4OUQwMiwgMHg5RDQyLCAweDlENDcsIDB4OUQ2MywNCi0gICAgMHg5RDY5LCAweDlEN0MsIDB4OUQ3RSwgMHg5RDhELCAweDlEQjEsIDB4OURDMywgMHg5REM3LCAweDlERDYsDQotICAgIDB4OURERiwgMHg5REVCLCAweDlERjQsIDB4OUUxNSwgMHg5RTFELCAweDlFQTQsIDB4OUVBOCwgMHg5RUFDLA0KLSAgICAweDlFRTcsIDB4OUVFRSwgMHg5RjEwLCAweDlGMTIsIDB4OUYxNywgMHg5RjE5LCAweDlGMkYsIDB4OUYzNywNCi0gICAgMHg5RjM5LCAweDlGNDEsIDB4OUY0NSwgMHg5RjU3LCAweDlGNjgsIDB4OUY3MSwgMHg5Rjc1LCAweDlGOTAsDQotICAgIDB4OUY5NCwgMHg5RkEyLCAweDRFMzAsIDB4MzQwNSwgMHg0RjYwLCAweDU2MjAsIDB4NUVDQiwgMHgyRTk1LA0KLSAgICAweDYwQTQsIDB4NjlENywgMHg2QjI0LCAweDZGRjksIDB4NkVFNiwgMHg3MUIzLCAweDJFQTQsIDB4N0FDNiwNCi0gICAgMHg3RjYxLCAweDgwNzEsIDB4ODA5RSwgMHgyRUNDLCAweDkxRjAsIDB4NURCMiwgMHg5N0RFLCAweDRGRDMsDQotICAgIDB4NTBEOSwgMHg1MEYwLCAweDUxQzMsIDB4NTY3NiwgMHg2QTU0LCAweDZEMDEsIDB4NkREMCwgMHg2RTQyLA0KLSAgICAweDZFRDksIDB4NzNFNCwgMHg3NDIxLCAweDc1NkMsIDB4Nzg1MSwgMHg4N0Y1LCAweEZGRkQsIDB4NzNBOCwNCi0gICAgMHgzQUYzLCAweDM0REIsIDB4NDQwQywgMHgzRThBLCAweEZGRkQsIDB4RkZGRCwgMHg0QkU4LCAweEZGRkQsDQotICAgIDB4M0VEQSwgMHgzQjIyLCAweEZGRkQsIDB4NDU3QSwgMHg0MDkzLCAweEZGRkQsIDB4NDY2NSwgMHg0MTAzLA0KLSAgICAweDQyOTMsIDB4NDZBRSwgMHgzNDg4LCAweEZGRkQsDQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfSmFwYW4xQ0lEMlVuaWNvZGVfNFsxNTQ0NF0gPSB7CisgICAgMHhGRkZELCAweDAwMjAsIDB4MDAyMSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsCisgICAgMHgwMDI3LCAweDAwMjgsIDB4MDAyOSwgMHgwMDJBLCAweDAwMkIsIDB4MDAyQywgMHgwMDJELCAweDAwMkUsCisgICAgMHgwMDJGLCAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsCisgICAgMHgwMDM3LCAweDAwMzgsIDB4MDAzOSwgMHgwMDNBLCAweDAwM0IsIDB4MDAzQywgMHgwMDNELCAweDAwM0UsCisgICAgMHgwMDNGLCAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsCisgICAgMHgwMDQ3LCAweDAwNDgsIDB4MDA0OSwgMHgwMDRBLCAweDAwNEIsIDB4MDA0QywgMHgwMDRELCAweDAwNEUsCisgICAgMHgwMDRGLCAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsCisgICAgMHgwMDU3LCAweDAwNTgsIDB4MDA1OSwgMHgwMDVBLCAweDAwNUIsIDB4MDBBNSwgMHgwMDVELCAweDAwNUUsCisgICAgMHgwMDVGLCAweDAwNjAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsCisgICAgMHgwMDY3LCAweDAwNjgsIDB4MDA2OSwgMHgwMDZBLCAweDAwNkIsIDB4MDA2QywgMHgwMDZELCAweDAwNkUsCisgICAgMHgwMDZGLCAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsCisgICAgMHgwMDc3LCAweDAwNzgsIDB4MDA3OSwgMHgwMDdBLCAweDAwN0IsIDB4MDBBNiwgMHgwMDdELCAweDAzMDMsCisgICAgMHgwMkJDLCAweDAwNUMsIDB4MDJCQiwgMHgwMDdDLCAweDAwN0UsIDB4MDBBMSwgMHgwMEEyLCAweDAwQTMsCisgICAgMHgyMDQ0LCAweDAxOTIsIDB4MDBBNywgMHgwMEE0LCAweDIwMUMsIDB4MDBBQiwgMHgyMDM5LCAweDIwM0EsCisgICAgMHhGQjAxLCAweEZCMDIsIDB4MjAxMiwgMHgyMDIwLCAweDIwMjEsIDB4MDBCNywgMHgwMEI2LCAweDIwMjIsCisgICAgMHgyMDFBLCAweDIwMUUsIDB4MjAxRCwgMHgwMEJCLCAweDIwMjYsIDB4MjAzMCwgMHgwMEJGLCAweDAzMDEsCisgICAgMHgwMzAyLCAweDAwQUYsIDB4MDMwNiwgMHgwMzA3LCAweDAzMDgsIDB4MDMwQSwgMHgwMEI4LCAweDAzMEIsCisgICAgMHgwMzI4LCAweDAzMEMsIDB4MDMzNiwgMHgwMEM2LCAweDAwQUEsIDB4MDE0MSwgMHgwMEQ4LCAweDAxNTIsCisgICAgMHgwMEJBLCAweDAwRTYsIDB4MDEzMSwgMHgwMTQyLCAweDAwRjgsIDB4MDE1MywgMHgwMERGLCAweDAwMkQsCisgICAgMHgwMEE5LCAweDAwQUMsIDB4MDBBRSwgMHgwMEIwLCAweDAwQjEsIDB4MDBCMiwgMHgwMEIzLCAweDAwQjUsCisgICAgMHgwMEI5LCAweDAwQkMsIDB4MDBCRCwgMHgwMEJFLCAweDAwQzAsIDB4MDBDMSwgMHgwMEMyLCAweDAwQzMsCisgICAgMHgwMEM0LCAweDAwQzUsIDB4MDBDNywgMHgwMEM4LCAweDAwQzksIDB4MDBDQSwgMHgwMENCLCAweDAwQ0MsCisgICAgMHgwMENELCAweDAwQ0UsIDB4MDBDRiwgMHgwMEQwLCAweDAwRDEsIDB4MDBEMiwgMHgwMEQzLCAweDAwRDQsCisgICAgMHgwMEQ1LCAweDAwRDYsIDB4MDBENywgMHgwMEQ5LCAweDAwREEsIDB4MDBEQiwgMHgwMERDLCAweDAwREQsCisgICAgMHgwMERFLCAweDAwRTAsIDB4MDBFMSwgMHgwMEUyLCAweDAwRTMsIDB4MDBFNCwgMHgwMEU1LCAweDAwRTcsCisgICAgMHgwMEU4LCAweDAwRTksIDB4MDBFQSwgMHgwMEVCLCAweDAwRUMsIDB4MDBFRCwgMHgwMEVFLCAweDAwRUYsCisgICAgMHgwMEYwLCAweDAwRjEsIDB4MDBGMiwgMHgwMEYzLCAweDAwRjQsIDB4MDBGNSwgMHgwMEY2LCAweDAwRjcsCisgICAgMHgwMEY5LCAweDAwRkEsIDB4MDBGQiwgMHgwMEZDLCAweDAwRkQsIDB4MDBGRSwgMHgwMEZGLCAweDAxNjAsCisgICAgMHgwMTc4LCAweDAxN0QsIDB4MDMwNSwgMHgwMTYxLCAweDIxMjIsIDB4MDE3RSwgMHgwMDMwLCAweDAwMjAsCisgICAgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LCAweDAwMjgsCisgICAgMHgwMDI5LCAweDAwMkEsIDB4MDAyQiwgMHgwMDJDLCAweDAwMkQsIDB4MDAyRSwgMHgwMDJGLCAweDAwMzAsCisgICAgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LCAweDAwMzgsCisgICAgMHgwMDM5LCAweDAwM0EsIDB4MDAzQiwgMHgwMDNDLCAweDAwM0QsIDB4MDAzRSwgMHgwMDNGLCAweDAwNDAsCisgICAgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LCAweDAwNDgsCisgICAgMHgwMDQ5LCAweDAwNEEsIDB4MDA0QiwgMHgwMDRDLCAweDAwNEQsIDB4MDA0RSwgMHgwMDRGLCAweDAwNTAsCisgICAgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LCAweDAwNTgsCisgICAgMHgwMDU5LCAweDAwNUEsIDB4MDA1QiwgMHgwMEE1LCAweDAwNUQsIDB4MDA1RSwgMHgwMDVGLCAweDAwNjAsCisgICAgMHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LCAweDAwNjgsCisgICAgMHgwMDY5LCAweDAwNkEsIDB4MDA2QiwgMHgwMDZDLCAweDAwNkQsIDB4MDA2RSwgMHgwMDZGLCAweDAwNzAsCisgICAgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LCAweDAwNzgsCisgICAgMHgwMDc5LCAweDAwN0EsIDB4MDA3QiwgMHgwMDdDLCAweDAwN0QsIDB4MjAzRSwgMHhGRjYwLCAweEZGNjEsCisgICAgMHhGRjYyLCAweEZGNjMsIDB4RkY2NCwgMHhGRjY1LCAweEZGNjYsIDB4RkY2NywgMHhGRjY4LCAweEZGNjksCisgICAgMHhGRjZBLCAweEZGNkIsIDB4RkY2QywgMHhGRjZELCAweEZGNkUsIDB4RkY2RiwgMHhGRjcwLCAweEZGNzEsCisgICAgMHhGRjcyLCAweEZGNzMsIDB4RkY3NCwgMHhGRjc1LCAweEZGNzYsIDB4RkY3NywgMHhGRjc4LCAweEZGNzksCisgICAgMHhGRjdBLCAweEZGN0IsIDB4RkY3QywgMHhGRjdELCAweEZGN0UsIDB4RkY3RiwgMHhGRjgwLCAweEZGODEsCisgICAgMHhGRjgyLCAweEZGODMsIDB4RkY4NCwgMHhGRjg1LCAweEZGODYsIDB4RkY4NywgMHhGRjg4LCAweEZGODksCisgICAgMHhGRjhBLCAweEZGOEIsIDB4RkY4QywgMHhGRjhELCAweEZGOEUsIDB4RkY4RiwgMHhGRjkwLCAweEZGOTEsCisgICAgMHhGRjkyLCAweEZGOTMsIDB4RkY5NCwgMHhGRjk1LCAweEZGOTYsIDB4RkY5NywgMHhGRjk4LCAweEZGOTksCisgICAgMHhGRjlBLCAweEZGOUIsIDB4RkY5QywgMHhGRjlELCAweEZGOUUsIDB4RkY5RiwgMHhGRjQwLCAweDMwRjAsCisgICAgMHgzMEYxLCAweDMwRUUsIDB4MzBBQiwgMHgzMEIxLCAweDMwRjQsIDB4MzBBQywgMHgzMEFFLCAweDMwQjAsCisgICAgMHgzMEIyLCAweDMwQjQsIDB4MzBCNiwgMHgzMEI4LCAweDMwQkEsIDB4MzBCQywgMHgzMEJFLCAweDMwQzAsCisgICAgMHgzMEMyLCAweDMwQzUsIDB4MzBDNywgMHgzMEM5LCAweDMwRDAsIDB4MzBEMSwgMHgzMEQzLCAweDMwRDQsCisgICAgMHgzMEQ2LCAweDMwRDcsIDB4MzBEOSwgMHgzMERBLCAweDMwREMsIDB4MzBERCwgMHhGRjYwLCAweDMwMUQsCisgICAgMHgzMDFFLCAweDI1MDAsIDB4MjUwMSwgMHgyNTAyLCAweDI1MDMsIDB4MjUwNCwgMHgyNTA1LCAweDI1MDYsCisgICAgMHgyNTA3LCAweDI1MDgsIDB4MjUwOSwgMHgyNTBBLCAweDI1MEIsIDB4MjUwQywgMHgyNTBELCAweDI1MEUsCisgICAgMHgyNTBGLCAweDI1MTAsIDB4MjUxMSwgMHgyNTEyLCAweDI1MTMsIDB4MjUxNCwgMHgyNTE1LCAweDI1MTYsCisgICAgMHgyNTE3LCAweDI1MTgsIDB4MjUxOSwgMHgyNTFBLCAweDI1MUIsIDB4MjUxQywgMHgyNTFELCAweDI1MUUsCisgICAgMHgyNTFGLCAweDI1MjAsIDB4MjUyMSwgMHgyNTIyLCAweDI1MjMsIDB4MjUyNCwgMHgyNTI1LCAweDI1MjYsCisgICAgMHgyNTI3LCAweDI1MjgsIDB4MjUyOSwgMHgyNTJBLCAweDI1MkIsIDB4MjUyQywgMHgyNTJELCAweDI1MkUsCisgICAgMHgyNTJGLCAweDI1MzAsIDB4MjUzMSwgMHgyNTMyLCAweDI1MzMsIDB4MjUzNCwgMHgyNTM1LCAweDI1MzYsCisgICAgMHgyNTM3LCAweDI1MzgsIDB4MjUzOSwgMHgyNTNBLCAweDI1M0IsIDB4MjUzQywgMHgyNTNELCAweDI1M0UsCisgICAgMHgyNTNGLCAweDI1NDAsIDB4MjU0MSwgMHgyNTQyLCAweDI1NDMsIDB4MjU0NCwgMHgyNTQ1LCAweDI1NDYsCisgICAgMHgyNTQ3LCAweDI1NDgsIDB4MjU0OSwgMHgyNTRBLCAweDI1NEIsIDB4MjAzMiwgMHgwMEE4LCAweDIwMzYsCisgICAgMHgwMDVCLCAweDAwNUQsIDB4MzAwOCwgMHgzMDA5LCAweDMwMEEsIDB4MzAwQiwgMHgzMDBFLCAweDMwMEYsCisgICAgMHgzMDEwLCAweDMwMTEsIDB4MjAxMiwgMHhGRjYwLCAweDMwOTIsIDB4MzA0MSwgMHgzMDQzLCAweDMwNDUsCisgICAgMHgzMDQ3LCAweDMwNDksIDB4MzA4MywgMHgzMDg1LCAweDMwODcsIDB4MzA2MywgMHgzMDQyLCAweDMwNDQsCisgICAgMHgzMDQ2LCAweDMwNDgsIDB4MzA0QSwgMHgzMDRCLCAweDMwNEQsIDB4MzA0RiwgMHgzMDUxLCAweDMwNTMsCisgICAgMHgzMDU1LCAweDMwNTcsIDB4MzA1OSwgMHgzMDVCLCAweDMwNUQsIDB4MzA1RiwgMHgzMDYxLCAweDMwNjQsCisgICAgMHgzMDY2LCAweDMwNjgsIDB4MzA2QSwgMHgzMDZCLCAweDMwNkMsIDB4MzA2RCwgMHgzMDZFLCAweDMwNkYsCisgICAgMHgzMDcyLCAweDMwNzUsIDB4MzA3OCwgMHgzMDdCLCAweDMwN0UsIDB4MzA3RiwgMHgzMDgwLCAweDMwODEsCisgICAgMHgzMDgyLCAweDMwODQsIDB4MzA4NiwgMHgzMDg4LCAweDMwODksIDB4MzA4QSwgMHgzMDhCLCAweDMwOEMsCisgICAgMHgzMDhELCAweDMwOEYsIDB4MzA5MywgMHgzMDkwLCAweDMwOTEsIDB4MzA4RSwgMHgzMDRDLCAweDMwNEUsCisgICAgMHgzMDUwLCAweDMwNTIsIDB4MzA1NCwgMHgzMDU2LCAweDMwNjgsIDB4MzA1QSwgMHgzMDVDLCAweDMwNUUsCisgICAgMHgzMDYwLCAweDMwNjIsIDB4MzA2NSwgMHgzMDY3LCAweDMwNjksIDB4MzA3MCwgMHgzMDcxLCAweDMwNzMsCisgICAgMHgzMDc0LCAweDMwNzYsIDB4MzA3NywgMHgzMDc5LCAweDMwN0EsIDB4MzA3QywgMHgzMDdELCAweDAwQzQsCisgICAgMHgwMEY5LCAweDAwRTksIDB4MDBFRCwgMHgwMERGLCAweDAwRTcsIDB4MDBDNywgMHgwMEQxLCAweDAwRjEsCisgICAgMHgwMEEyLCAweDAwQTMsIDB4MDBGMywgMHgwMEZBLCAweDAwQTEsIDB4MDBCRiwgMHgwMEJELCAweDAwRDYsCisgICAgMHgwMERDLCAweDAwRTQsIDB4MDBFQiwgMHgwMEVGLCAweDAwRjYsIDB4MDBEQywgMHgwMEUyLCAweDAwRUEsCisgICAgMHgwMEVFLCAweDAwRjQsIDB4MDBGQywgMHgwMEUwLCAweDAwRTksIDB4MjVCMiwgMHgwMEUxLCAweDAwN0UsCisgICAgMHgwMDMwLCAweDMwMDAsIDB4MzAwMSwgMHgzMDAyLCAweEZGMEMsIDB4RkYwRSwgMHgzMEZCLCAweEZGMUEsCisgICAgMHhGRjFCLCAweEZGMUYsIDB4RkYwMSwgMHgzMDlCLCAweDMwOUMsIDB4MDBCNCwgMHhGRjQwLCAweDAwQTgsCisgICAgMHhGRjNFLCAweDIwM0UsIDB4RkYzRiwgMHgzMEZELCAweDMwRkUsIDB4MzA5RCwgMHgzMDlFLCAweDMwMDMsCisgICAgMHg0RURELCAweDMwMDUsIDB4MzAwNiwgMHgzMDA3LCAweDMwRkMsIDB4MjAxNSwgMHgyMDEwLCAweEZGMEYsCisgICAgMHhGRjNDLCAweEZGNUUsIDB4MjAxNiwgMHhGRjVDLCAweDIwMjYsIDB4MjAyNSwgMHgyMDE4LCAweDIwMTksCisgICAgMHgyMDFDLCAweDIwMUQsIDB4RkYwOCwgMHhGRjA5LCAweDMwMTQsIDB4MzAxNSwgMHhGRjNCLCAweEZGM0QsCisgICAgMHhGRjVCLCAweEZGNUQsIDB4MzAwOCwgMHgzMDA5LCAweDMwMEEsIDB4MzAwQiwgMHgzMDBDLCAweDMwMEQsCisgICAgMHgzMDBFLCAweDMwMEYsIDB4MzAxMCwgMHgzMDExLCAweEZGMEIsIDB4RkYwRCwgMHgwMEIxLCAweDAwRDcsCisgICAgMHgwMEY3LCAweEZGMUQsIDB4MjI2MCwgMHhGRjFDLCAweEZGMUUsIDB4MjI2NiwgMHgyMjY3LCAweDIyMUUsCisgICAgMHgyMjM0LCAweDI2NDIsIDB4MjY0MCwgMHgwMEIwLCAweDIwMzIsIDB4MjAzMywgMHgyMTAzLCAweEZGRTUsCisgICAgMHhGRjA0LCAweDAwQTIsIDB4MDBBMywgMHhGRjA1LCAweEZGMDMsIDB4RkYwNiwgMHhGRjBBLCAweEZGMjAsCisgICAgMHgwMEE3LCAweDI2MDYsIDB4MjYwNSwgMHgyNUNCLCAweDI1Q0YsIDB4MjVDRSwgMHgyNUM3LCAweDI1QzYsCisgICAgMHgyNUExLCAweDI1QTAsIDB4MjVCMywgMHgyNUIyLCAweDI1QkQsIDB4MjVCQywgMHgyMDNCLCAweDMwMTIsCisgICAgMHgyMTkyLCAweDIxOTAsIDB4MjE5MSwgMHgyMTkzLCAweDMwMTMsIDB4MjIwOCwgMHgyMjBCLCAweDIyODYsCisgICAgMHgyMjg3LCAweDIyODIsIDB4MjI4MywgMHgyMjJBLCAweDIyMjksIDB4MjIyNywgMHgyMjI4LCAweDAwQUMsCisgICAgMHgyMUQyLCAweDIxRDQsIDB4MjIwMCwgMHgyMjAzLCAweDIyMjAsIDB4MjJBNSwgMHgyMzEyLCAweDIyMDIsCisgICAgMHgyMjA3LCAweDIyNjEsIDB4MjI1MiwgMHgyMjZBLCAweDIyNkIsIDB4MjIxQSwgMHgyMjNELCAweDIyMUQsCisgICAgMHgyMjM1LCAweDIyMkIsIDB4MjIyQywgMHgyMTJCLCAweDIwMzAsIDB4MjY2RiwgMHgyNjZELCAweDI2NkEsCisgICAgMHgyMDIwLCAweDIwMjEsIDB4MDBCNiwgMHgyNUVGLCAweEZGMTAsIDB4RkYxMSwgMHhGRjEyLCAweEZGMTMsCisgICAgMHhGRjE0LCAweEZGMTUsIDB4RkYxNiwgMHhGRjE3LCAweEZGMTgsIDB4RkYxOSwgMHhGRjIxLCAweEZGMjIsCisgICAgMHhGRjIzLCAweEZGMjQsIDB4RkYyNSwgMHhGRjI2LCAweEZGMjcsIDB4RkYyOCwgMHhGRjI5LCAweEZGMkEsCisgICAgMHhGRjJCLCAweEZGMkMsIDB4RkYyRCwgMHhGRjJFLCAweEZGMkYsIDB4RkYzMCwgMHhGRjMxLCAweEZGMzIsCisgICAgMHhGRjMzLCAweEZGMzQsIDB4RkYzNSwgMHhGRjM2LCAweEZGMzcsIDB4RkYzOCwgMHhGRjM5LCAweEZGM0EsCisgICAgMHhGRjQxLCAweEZGNDIsIDB4RkY0MywgMHhGRjQ0LCAweEZGNDUsIDB4RkY0NiwgMHhGRjQ3LCAweEZGNDgsCisgICAgMHhGRjQ5LCAweEZGNEEsIDB4RkY0QiwgMHhGRjRDLCAweEZGNEQsIDB4RkY0RSwgMHhGRjRGLCAweEZGNTAsCisgICAgMHhGRjUxLCAweEZGNTIsIDB4RkY1MywgMHhGRjU0LCAweEZGNTUsIDB4RkY1NiwgMHhGRjU3LCAweEZGNTgsCisgICAgMHhGRjU5LCAweEZGNUEsIDB4MzA0MSwgMHgzMDQyLCAweDMwNDMsIDB4MzA0NCwgMHgzMDQ1LCAweDMwNDYsCisgICAgMHgzMDQ3LCAweDMwNDgsIDB4MzA0OSwgMHgzMDRBLCAweDMwNEIsIDB4MzA0QywgMHgzMDRELCAweDMwNEUsCisgICAgMHgzMDRGLCAweDMwNTAsIDB4MzA1MSwgMHgzMDUyLCAweDMwNTMsIDB4MzA1NCwgMHgzMDU1LCAweDMwNTYsCisgICAgMHgzMDU3LCAweDMwNTgsIDB4MzA1OSwgMHgzMDVBLCAweDMwNUIsIDB4MzA1QywgMHgzMDVELCAweDMwNUUsCisgICAgMHgzMDVGLCAweDMwNjAsIDB4MzA2MSwgMHgzMDYyLCAweDMwNjMsIDB4MzA2NCwgMHgzMDY1LCAweDMwNjYsCisgICAgMHgzMDY3LCAweDMwNjgsIDB4MzA2OSwgMHgzMDZBLCAweDMwNkIsIDB4MzA2QywgMHgzMDZELCAweDMwNkUsCisgICAgMHgzMDZGLCAweDMwNzAsIDB4MzA3MSwgMHgzMDcyLCAweDMwNzMsIDB4MzA3NCwgMHgzMDc1LCAweDMwNzYsCisgICAgMHgzMDc3LCAweDMwNzgsIDB4MzA3OSwgMHgzMDdBLCAweDMwN0IsIDB4MzA3QywgMHgzMDdELCAweDMwN0UsCisgICAgMHgzMDdGLCAweDMwODAsIDB4MzA4MSwgMHgzMDgyLCAweDMwODMsIDB4MzA4NCwgMHgzMDg1LCAweDMwODYsCisgICAgMHgzMDg3LCAweDMwODgsIDB4MzA4OSwgMHgzMDhBLCAweDMwOEIsIDB4MzA4QywgMHgzMDhELCAweDMwOEUsCisgICAgMHgzMDhGLCAweDMwOTAsIDB4MzA5MSwgMHgzMDkyLCAweDMwOTMsIDB4MzBBMSwgMHgzMEEyLCAweDMwQTMsCisgICAgMHgzMEE0LCAweDMwQTUsIDB4MzBBNiwgMHgzMEE3LCAweDMwQTgsIDB4MzBBOSwgMHgzMEFBLCAweDMwQUIsCisgICAgMHgzMEFDLCAweDMwQUQsIDB4MzBBRSwgMHgzMEFGLCAweDMwQjAsIDB4MzBCMSwgMHgzMEIyLCAweDMwQjMsCisgICAgMHgzMEI0LCAweDMwQjUsIDB4MzBCNiwgMHgzMEI3LCAweDMwQjgsIDB4MzBCOSwgMHgzMEJBLCAweDMwQkIsCisgICAgMHgzMEJDLCAweDMwQkQsIDB4MzBCRSwgMHgzMEJGLCAweDMwQzAsIDB4MzBDMSwgMHgzMEMyLCAweDMwQzMsCisgICAgMHgzMEM0LCAweDMwQzUsIDB4MzBDNiwgMHgzMEM3LCAweDMwQzgsIDB4MzBDOSwgMHgzMENBLCAweDMwQ0IsCisgICAgMHgzMENDLCAweDMwQ0QsIDB4MzBDRSwgMHgzMENGLCAweDMwRDAsIDB4MzBEMSwgMHgzMEQyLCAweDMwRDMsCisgICAgMHgzMEQ0LCAweDMwRDUsIDB4MzBENiwgMHgzMEQ3LCAweDMwRDgsIDB4MzBEOSwgMHgzMERBLCAweDMwREIsCisgICAgMHgzMERDLCAweDMwREQsIDB4MzBERSwgMHgzMERGLCAweDMwRTAsIDB4MzBFMSwgMHgzMEUyLCAweDMwRTMsCisgICAgMHgzMEU0LCAweDMwRTUsIDB4MzBFNiwgMHgzMEU3LCAweDMwRTgsIDB4MzBFOSwgMHgzMEVBLCAweDMwRUIsCisgICAgMHgzMEVDLCAweDMwRUQsIDB4MzBFRSwgMHgzMEVGLCAweDMwRjAsIDB4MzBGMSwgMHgzMEYyLCAweDMwRjMsCisgICAgMHgzMEY0LCAweDMwRjUsIDB4MzBGNiwgMHgwMzkxLCAweDAzOTIsIDB4MDM5MywgMHgwMzk0LCAweDAzOTUsCisgICAgMHgwMzk2LCAweDAzOTcsIDB4MDM5OCwgMHgwMzk5LCAweDAzOUEsIDB4MDM5QiwgMHgwMzlDLCAweDAzOUQsCisgICAgMHgwMzlFLCAweDAzOUYsIDB4MDNBMCwgMHgwM0ExLCAweDAzQTMsIDB4MDNBNCwgMHgwM0E1LCAweDAzQTYsCisgICAgMHgwM0E3LCAweDAzQTgsIDB4MDNBOSwgMHgwM0IxLCAweDAzQjIsIDB4MDNCMywgMHgwM0I0LCAweDAzQjUsCisgICAgMHgwM0I2LCAweDAzQjcsIDB4MDNCOCwgMHgwM0I5LCAweDAzQkEsIDB4MDNCQiwgMHgwM0JDLCAweDAzQkQsCisgICAgMHgwM0JFLCAweDAzQkYsIDB4MDNDMCwgMHgwM0MxLCAweDAzQzMsIDB4MDNDNCwgMHgwM0M1LCAweDAzQzYsCisgICAgMHgwM0M3LCAweDAzQzgsIDB4MDNDOSwgMHgwNDEwLCAweDA0MTEsIDB4MDQxMiwgMHgwNDEzLCAweDA0MTQsCisgICAgMHgwNDE1LCAweDA0MDEsIDB4MDQxNiwgMHgwNDE3LCAweDA0MTgsIDB4MDQxOSwgMHgwNDFBLCAweDA0MUIsCisgICAgMHgwNDFDLCAweDA0MUQsIDB4MDQxRSwgMHgwNDFGLCAweDA0MjAsIDB4MDQyMSwgMHgwNDIyLCAweDA0MjMsCisgICAgMHgwNDI0LCAweDA0MjUsIDB4MDQyNiwgMHgwNDI3LCAweDA0MjgsIDB4MDQyOSwgMHgwNDJBLCAweDA0MkIsCisgICAgMHgwNDJDLCAweDA0MkQsIDB4MDQyRSwgMHgwNDJGLCAweDA0MzAsIDB4MDQzMSwgMHgwNDMyLCAweDA0MzMsCisgICAgMHgwNDM0LCAweDA0MzUsIDB4MDQ1MSwgMHgwNDM2LCAweDA0MzcsIDB4MDQzOCwgMHgwNDM5LCAweDA0M0EsCisgICAgMHgwNDNCLCAweDA0M0MsIDB4MDQzRCwgMHgwNDNFLCAweDA0M0YsIDB4MDQ0MCwgMHgwNDQxLCAweDA0NDIsCisgICAgMHgwNDQzLCAweDA0NDQsIDB4MDQ0NSwgMHgwNDQ2LCAweDA0NDcsIDB4MDQ0OCwgMHgwNDQ5LCAweDA0NEEsCisgICAgMHgwNDRCLCAweDA0NEMsIDB4MDQ0RCwgMHgwNDRFLCAweDA0NEYsIDB4NEU5QywgMHg1NTE2LCAweDVBMDMsCisgICAgMHg5NjNGLCAweDU0QzAsIDB4NjExQiwgMHg2MzI4LCAweDU5RjYsIDB4OTAyMiwgMHg4NDc1LCAweDgzMUMsCisgICAgMHg3QTUwLCAweDYwQUEsIDB4NjNFMSwgMHg2RTI1LCAweDY1RUQsIDB4ODQ2NiwgMHg4MkE2LCAweDlCRjUsCisgICAgMHg2ODkzLCAweDU3MjcsIDB4NjVBMSwgMHg2MjcxLCAweDVCOUIsIDB4NTlEMCwgMHg4NjdCLCAweDk4RjQsCisgICAgMHg3RDYyLCAweDdEQkUsIDB4OUI4RSwgMHg2MjE2LCAweDdDOUYsIDB4ODhCNywgMHg1Qjg5LCAweDVFQjUsCisgICAgMHg2MzA5LCAweDY2OTcsIDB4Njg0OCwgMHg5NUM3LCAweDk3OEQsIDB4Njc0RiwgMHg0RUU1LCAweDRGMEEsCisgICAgMHg0RjRELCAweDRGOUQsIDB4NTA0OSwgMHg1NkYyLCAweDU5MzcsIDB4NTlENCwgMHg1QTAxLCAweDVDMDksCisgICAgMHg2MERGLCAweDYxMEYsIDB4NjE3MCwgMHg2NjEzLCAweDY5MDUsIDB4NzBCQSwgMHg3NTRGLCAweDc1NzAsCisgICAgMHg3OUZCLCAweDdEQUQsIDB4N0RFRiwgMHg4MEMzLCAweDg0MEUsIDB4ODg2MywgMHg4QjAyLCAweDkwNTUsCisgICAgMHg5MDdBLCAweDUzM0IsIDB4NEU5NSwgMHg0RUE1LCAweDU3REYsIDB4ODBCMiwgMHg5MEMxLCAweDc4RUYsCisgICAgMHg0RTAwLCAweDU4RjEsIDB4NkVBMiwgMHg5MDM4LCAweDdBMzIsIDB4ODMyOCwgMHg4MjhCLCAweDlDMkYsCisgICAgMHg1MTQxLCAweDUzNzAsIDB4NTRCRCwgMHg1NEUxLCAweDU2RTAsIDB4NTlGQiwgMHg1RjE1LCAweDk4RjIsCisgICAgMHg2REVCLCAweDgwRTQsIDB4ODUyRCwgMHg5NjYyLCAweDk2NzAsIDB4OTZBMCwgMHg5N0ZCLCAweDU0MEIsCisgICAgMHg1M0YzLCAweDVCODcsIDB4NzBDRiwgMHg3RkJELCAweDhGQzIsIDB4OTZFOCwgMHg1MzZGLCAweDlENUMsCisgICAgMHg3QUJBLCAweDRFMTEsIDB4Nzg5MywgMHg4MUZDLCAweDZFMjYsIDB4NTYxOCwgMHg1NTA0LCAweDZCMUQsCisgICAgMHg4NTFBLCAweDlDM0IsIDB4NTlFNSwgMHg1M0E5LCAweDZENjYsIDB4NzREQywgMHg5NThGLCAweDU2NDIsCisgICAgMHg0RTkxLCAweDkwNEIsIDB4OTZGMiwgMHg4MzRGLCAweDk5MEMsIDB4NTNFMSwgMHg1NUI2LCAweDVCMzAsCisgICAgMHg1RjcxLCAweDY2MjAsIDB4NjZGMywgMHg2ODA0LCAweDZDMzgsIDB4NkNGMywgMHg2RDI5LCAweDc0NUIsCisgICAgMHg3NkM4LCAweDdBNEUsIDB4OTgzNCwgMHg4MkYxLCAweDg4NUIsIDB4OEE2MCwgMHg5MkVELCAweDZEQjIsCisgICAgMHg3NUFCLCAweDc2Q0EsIDB4OTlDNSwgMHg2MEE2LCAweDhCMDEsIDB4OEQ4QSwgMHg5NUIyLCAweDY5OEUsCisgICAgMHg1M0FELCAweDUxODYsIDB4NTcxMiwgMHg1ODMwLCAweDU5NDQsIDB4NUJCNCwgMHg1RUY2LCAweDYwMjgsCisgICAgMHg2M0E5LCAweDYzRjQsIDB4NkNCRiwgMHg2RjE0LCAweDcwOEUsIDB4NzExNCwgMHg3MTU5LCAweDcxRDUsCisgICAgMHg3MzNGLCAweDdFMDEsIDB4ODI3NiwgMHg4MkQxLCAweDg1OTcsIDB4OTA2MCwgMHg5MjVCLCAweDlEMUIsCisgICAgMHg1ODY5LCAweDY1QkMsIDB4NkM1QSwgMHg3NTI1LCAweDUxRjksIDB4NTkyRSwgMHg1OTY1LCAweDVGODAsCisgICAgMHg1RkRDLCAweDYyQkMsIDB4NjVGQSwgMHg2QTJBLCAweDZCMjcsIDB4NkJCNCwgMHg3MzhCLCAweDdGQzEsCisgICAgMHg4OTU2LCAweDlEMkMsIDB4OUQwRSwgMHg5RUM0LCAweDVDQTEsIDB4NkM5NiwgMHg4MzdCLCAweDUxMDQsCisgICAgMHg1QzRCLCAweDYxQjYsIDB4ODFDNiwgMHg2ODc2LCAweDcyNjEsIDB4NEU1OSwgMHg0RkZBLCAweDUzNzgsCisgICAgMHg2MDY5LCAweDZFMjksIDB4N0E0RiwgMHg5N0YzLCAweDRFMEIsIDB4NTMxNiwgMHg0RUVFLCAweDRGNTUsCisgICAgMHg0RjNELCAweDRGQTEsIDB4NEY3MywgMHg1MkEwLCAweDUzRUYsIDB4NTYwOSwgMHg1OTBGLCAweDVBQzEsCisgICAgMHg1QkI2LCAweDVCRTEsIDB4NzlEMSwgMHg2Njg3LCAweDY3OUMsIDB4NjdCNiwgMHg2QjRDLCAweDZDQjMsCisgICAgMHg3MDZCLCAweDczQzIsIDB4Nzk4RCwgMHg3OUJFLCAweDdBM0MsIDB4N0I4NywgMHg4MkIxLCAweDgyREIsCisgICAgMHg4MzA0LCAweDgzNzcsIDB4ODNFRiwgMHg4M0QzLCAweDg3NjYsIDB4OEFCMiwgMHg1NjI5LCAweDhDQTgsCisgICAgMHg4RkU2LCAweDkwNEUsIDB4OTcxRSwgMHg4NjhBLCAweDRGQzQsIDB4NUNFOCwgMHg2MjExLCAweDcyNTksCisgICAgMHg3NTNCLCAweDgxRTUsIDB4ODJCRCwgMHg4NkZFLCAweDhDQzAsIDB4OTZDNSwgMHg5OTEzLCAweDk5RDUsCisgICAgMHg0RUNCLCAweDRGMUEsIDB4ODlFMywgMHg1NkRFLCAweDU4NEEsIDB4NThDQSwgMHg1RUZCLCAweDVGRUIsCisgICAgMHg2MDJBLCAweDYwOTQsIDB4NjA2MiwgMHg2MUQwLCAweDYyMTIsIDB4NjJEMCwgMHg2NTM5LCAweDlCNDEsCisgICAgMHg2NjY2LCAweDY4QjAsIDB4NkQ3NywgMHg3MDcwLCAweDc1NEMsIDB4NzY4NiwgMHg3RDc1LCAweDgyQTUsCisgICAgMHg4N0Y5LCAweDk1OEIsIDB4OTY4RSwgMHg4QzlELCAweDUxRjEsIDB4NTJCRSwgMHg1OTE2LCAweDU0QjMsCisgICAgMHg1QkIzLCAweDVEMTYsIDB4NjE2OCwgMHg2OTgyLCAweDZEQUYsIDB4Nzg4RCwgMHg4NENCLCAweDg4NTcsCisgICAgMHg4QTcyLCAweDkzQTcsIDB4OUFCOCwgMHg2RDZDLCAweDk5QTgsIDB4ODZEOSwgMHg1N0EzLCAweDY3RkYsCisgICAgMHg4NkNFLCAweDkyMEUsIDB4NTI4MywgMHg1Njg3LCAweDU0MDQsIDB4NUVEMywgMHg2MkUxLCAweDY0QjksCisgICAgMHg2ODNDLCAweDY4MzgsIDB4NkJCQiwgMHg3MzcyLCAweDc4QkEsIDB4N0E2QiwgMHg4OTlBLCAweDg5RDIsCisgICAgMHg4RDZCLCAweDhGMDMsIDB4OTBFRCwgMHg5NUEzLCAweDk2OTQsIDB4OTc2OSwgMHg1QjY2LCAweDVDQjMsCisgICAgMHg2OTdELCAweDk4NEQsIDB4OTg0RSwgMHg2MzlCLCAweDdCMjAsIDB4NkEyQiwgMHg2QTdGLCAweDY4QjYsCisgICAgMHg5QzBELCAweDZGNUYsIDB4NTI3MiwgMHg1NTlELCAweDYwNzAsIDB4NjJFQywgMHg2RDNCLCAweDZFMDcsCisgICAgMHg2RUQxLCAweDg0NUIsIDB4ODkxMCwgMHg4RjQ0LCAweDRFMTQsIDB4OUMzOSwgMHg1M0Y2LCAweDY5MUIsCisgICAgMHg2QTNBLCAweDk3ODQsIDB4NjgyQSwgMHg1MTVDLCAweDdBQzMsIDB4ODRCMiwgMHg5MURDLCAweDkzOEMsCisgICAgMHg1NjVCLCAweDlEMjgsIDB4NjgyMiwgMHg4MzA1LCAweDg0MzEsIDB4N0NBNSwgMHg1MjA4LCAweDgyQzUsCisgICAgMHg3NEU2LCAweDRFN0UsIDB4NEY4MywgMHg1MUEwLCAweDVCRDIsIDB4NTIwQSwgMHg1MkQ4LCAweDUyRTcsCisgICAgMHg1REZCLCAweDU1OUEsIDB4NTgyQSwgMHg1OUU2LCAweDVCOEMsIDB4NUI5OCwgMHg1QkRCLCAweDVFNzIsCisgICAgMHg1RTc5LCAweDYwQTMsIDB4NjExRiwgMHg2MTYzLCAweDYxQkUsIDB4NjNEQiwgMHg2NTYyLCAweDY3RDEsCisgICAgMHg2ODUzLCAweDY4RkEsIDB4NkIzRSwgMHg2QjUzLCAweDZDNTcsIDB4NkYyMiwgMHg2Rjk3LCAweDZGNDUsCisgICAgMHg3NEIwLCAweDc1MTgsIDB4NzZFMywgMHg3NzBCLCAweDdBRkYsIDB4N0JBMSwgMHg3QzIxLCAweDdERTksCisgICAgMHg3RjM2LCAweDdGRjAsIDB4ODA5RCwgMHg4MjY2LCAweDgzOUUsIDB4ODlCMywgMHg4QUNDLCAweDhDQUIsCisgICAgMHg5MDg0LCAweDk0NTEsIDB4OTU5MywgMHg5NTkxLCAweDk1QTIsIDB4OTY2NSwgMHg5N0QzLCAweDk5MjgsCisgICAgMHg4MjE4LCAweDRFMzgsIDB4NTQyQiwgMHg1Q0I4LCAweDVEQ0MsIDB4NzNBOSwgMHg3NjRDLCAweDc3M0MsCisgICAgMHg1Q0E5LCAweDdGRUIsIDB4OEQwQiwgMHg5NkMxLCAweDk4MTEsIDB4OTg1NCwgMHg5ODU4LCAweDRGMDEsCisgICAgMHg0RjBFLCAweDUzNzEsIDB4NTU5QywgMHg1NjY4LCAweDU3RkEsIDB4NTk0NywgMHg1QjA5LCAweDVCQzQsCisgICAgMHg1QzkwLCAweDVFMEMsIDB4NUU3RSwgMHg1RkNDLCAweDYzRUUsIDB4NjczQSwgMHg2NUQ3LCAweDY1RTIsCisgICAgMHg2NzFGLCAweDY4Q0IsIDB4NjhDNCwgMHg2QTVGLCAweDVFMzAsIDB4NkJDNSwgMHg2QzE3LCAweDZDN0QsCisgICAgMHg3NTdGLCAweDc5NDgsIDB4NUI2MywgMHg3QTAwLCAweDdEMDAsIDB4NUZCRCwgMHg4OThGLCAweDhBMTgsCisgICAgMHg4Q0I0LCAweDhENzcsIDB4OEVDQywgMHg4RjFELCAweDk4RTIsIDB4OUEwRSwgMHg5QjNDLCAweDRFODAsCisgICAgMHg1MDdELCAweDUxMDAsIDB4NTk5MywgMHg1QjlDLCAweDYyMkYsIDB4NjI4MCwgMHg2NEVDLCAweDZCM0EsCisgICAgMHg3MkEwLCAweDc1OTEsIDB4Nzk0NywgMHg3RkE5LCAweDg3RkIsIDB4OEFCQywgMHg4QjcwLCAweDYzQUMsCisgICAgMHg4M0NBLCAweDk3QTAsIDB4NTQwOSwgMHg1NDAzLCAweDU1QUIsIDB4Njg1NCwgMHg2QTU4LCAweDhBNzAsCisgICAgMHg3ODI3LCAweDY3NzUsIDB4OUVDRCwgMHg1Mzc0LCAweDVCQTIsIDB4ODExQSwgMHg4NjUwLCAweDkwMDYsCisgICAgMHg0RTE4LCAweDRFNDUsIDB4NEVDNywgMHg0RjExLCAweDUzQ0EsIDB4NTQzOCwgMHg1QkFFLCAweDVGMTMsCisgICAgMHg2MDI1LCAweDY1NTEsIDB4NjczRCwgMHg2QzQyLCAweDZDNzIsIDB4NkNFMywgMHg3MDc4LCAweDc0MDMsCisgICAgMHg3QTc2LCAweDdBQUUsIDB4N0IwOCwgMHg3RDFBLCAweDdDRkUsIDB4N0Q2NiwgMHg2NUU3LCAweDcyNUIsCisgICAgMHg1M0JCLCAweDVDNDUsIDB4NURFOCwgMHg2MkQyLCAweDYyRTAsIDB4NjMxOSwgMHg2RTIwLCAweDg2NUEsCisgICAgMHg4QTMxLCAweDhEREQsIDB4OTJGOCwgMHg2RjAxLCAweDc5QTYsIDB4OUI1QSwgMHg0RUE4LCAweDRFQUIsCisgICAgMHg0RUFDLCAweDRGOUIsIDB4NEZBMCwgMHg1MEQxLCAweDUxNDcsIDB4N0FGNiwgMHg1MTcxLCAweDUxRjYsCisgICAgMHg1MzU0LCAweDUzMjEsIDB4NTM3RiwgMHg1M0VCLCAweDU1QUMsIDB4NTg4MywgMHg1Q0UxLCAweDVGMzcsCisgICAgMHg1RjRBLCAweDYwMkYsIDB4NjA1MCwgMHg2MDZELCAweDYzMUYsIDB4NjU1OSwgMHg2QTRCLCAweDZDQzEsCisgICAgMHg3MkMyLCAweDcyRUQsIDB4NzdFRiwgMHg4MEY4LCAweDgxMDUsIDB4ODIwOCwgMHg4NTRFLCAweDkwRjcsCisgICAgMHg5M0UxLCAweDk3RkYsIDB4OTk1NywgMHg5QTVBLCAweDRFRjAsIDB4NTFERCwgMHg1QzJELCAweDY2ODEsCisgICAgMHg2OTZELCAweDVDNDAsIDB4NjZGMiwgMHg2OTc1LCAweDczODksIDB4Njg1MCwgMHg3QzgxLCAweDUwQzUsCisgICAgMHg1MkU0LCAweDU3NDcsIDB4NURGRSwgMHg5MzI2LCAweDY1QTQsIDB4NkIyMywgMHg2QjNELCAweDc0MzQsCisgICAgMHg3OTgxLCAweDc5QkQsIDB4N0I0QiwgMHg3RENBLCAweDgyQjksIDB4ODNDQywgMHg4ODdGLCAweDg5NUYsCisgICAgMHg4QjM5LCAweDhGRDEsIDB4OTFEMSwgMHg1NDFGLCAweDkyODAsIDB4NEU1RCwgMHg1MDM2LCAweDUzRTUsCisgICAgMHg1MzNBLCAweDcyRDcsIDB4NzM5NiwgMHg3N0U5LCAweDgyRTYsIDB4OEVBRiwgMHg5OUM2LCAweDk5QzgsCisgICAgMHg5OUQyLCAweDUxNzcsIDB4NjExQSwgMHg4NjVFLCAweDU1QjAsIDB4N0E3QSwgMHg1MDc2LCAweDVCRDMsCisgICAgMHg5MDQ3LCAweDk2ODUsIDB4NEUzMiwgMHg2QURCLCAweDkxRTcsIDB4NUM1MSwgMHg1QzQ4LCAweDYzOTgsCisgICAgMHg3QTlGLCAweDZDOTMsIDB4OTc3NCwgMHg4RjYxLCAweDdBQUEsIDB4NzE4QSwgMHg5Njg4LCAweDdDODIsCisgICAgMHg2ODE3LCAweDdFNzAsIDB4Njg1MSwgMHg5MzZDLCAweDUyRjIsIDB4NTQxQiwgMHg4NUFCLCAweDhBMTMsCisgICAgMHg3RkE0LCAweDhFQ0QsIDB4OTBFMSwgMHg1MzY2LCAweDg4ODgsIDB4Nzk0MSwgMHg0RkMyLCAweDUwQkUsCisgICAgMHg1MjExLCAweDUxNDQsIDB4NTU1MywgMHg1NzJELCAweDczRUEsIDB4NTc4QiwgMHg1OTUxLCAweDVGNjIsCisgICAgMHg1Rjg0LCAweDYwNzUsIDB4NjE3NiwgMHg2MTY3LCAweDYxQTksIDB4NjNCMiwgMHg2NDNBLCAweDY1NkMsCisgICAgMHg2NjZGLCAweDY4NDIsIDB4NkUxMywgMHg3NTY2LCAweDdBM0QsIDB4N0NGQiwgMHg3RDRDLCAweDdEOTksCisgICAgMHg3RTRCLCAweDdGNkIsIDB4ODMwRSwgMHg4MzRBLCAweDg2Q0QsIDB4OEEwOCwgMHg4QTYzLCAweDhCNjYsCisgICAgMHg4RUZELCAweDk4MUEsIDB4OUQ4RiwgMHg4MkI4LCAweDhGQ0UsIDB4OUJFOCwgMHg1Mjg3LCAweDYyMUYsCisgICAgMHg2NDgzLCAweDZGQzAsIDB4OTY5OSwgMHg2ODQxLCAweDUwOTEsIDB4NkIyMCwgMHg2QzdBLCAweDZGNTQsCisgICAgMHg3QTc0LCAweDdENTAsIDB4ODg0MCwgMHg4QTIzLCAweDY3MDgsIDB4NEVGNiwgMHg1MDM5LCAweDUwMjYsCisgICAgMHg1MDY1LCAweDUxN0MsIDB4NTIzOCwgMHg1MjYzLCAweDU1QTcsIDB4NTcwRiwgMHg1ODA1LCAweDVBQ0MsCisgICAgMHg1RUZBLCAweDYxQjIsIDB4NjFGOCwgMHg2MkYzLCAweDYzNzIsIDB4NjkxQywgMHg2QTI5LCAweDcyN0QsCisgICAgMHg3MkFDLCAweDczMkUsIDB4NzgxNCwgMHg3ODZGLCAweDdENzksIDB4NzcwQywgMHg4MEE5LCAweDg5OEIsCisgICAgMHg4QjE5LCAweDhDRTIsIDB4OEVEMiwgMHg5MDYzLCAweDkzNzUsIDB4OTY3QSwgMHg5ODU1LCAweDlBMTMsCisgICAgMHg5RTc4LCAweDUxNDMsIDB4NTM5RiwgMHg1M0IzLCAweDVFN0IsIDB4NUYyNiwgMHg2RTFCLCAweDZFOTAsCisgICAgMHg3Mzg0LCAweDczRkUsIDB4N0Q0MywgMHg4MjM3LCAweDhBMDAsIDB4OEFGQSwgMHg5NjUwLCAweDRFNEUsCisgICAgMHg1MDBCLCAweDUzRTQsIDB4NTQ3QywgMHg1NkZBLCAweDU5RDEsIDB4NUI2NCwgMHg1REYxLCAweDVFQUIsCisgICAgMHg1RjI3LCAweDYyMzgsIDB4NjU0NSwgMHg2N0FGLCAweDZFNTYsIDB4NzJEMCwgMHg3Q0NBLCAweDg4QjQsCisgICAgMHg4MEExLCAweDgwRTEsIDB4ODNGMCwgMHg4NjRFLCAweDhBODcsIDB4OERFOCwgMHg5MjM3LCAweDk2QzcsCisgICAgMHg5ODY3LCAweDlGMTMsIDB4NEU5NCwgMHg0RTkyLCAweDRGMEQsIDB4NTM0OCwgMHg1NDQ5LCAweDU0M0UsCisgICAgMHg1QTJGLCAweDVGOEMsIDB4NUZBMSwgMHg2MDlGLCAweDY4QTcsIDB4NkE4RSwgMHg3NDVBLCAweDc4ODEsCisgICAgMHg4QTlFLCAweDhBQTQsIDB4OEI3NywgMHg5MTkwLCAweDRFNUUsIDB4OUJDOSwgMHg0RUE0LCAweDRGN0MsCisgICAgMHg0RkFGLCAweDUwMTksIDB4NTAxNiwgMHg1MTQ5LCAweDUxNkMsIDB4NTI5RiwgMHg1MkI5LCAweDUyRkUsCisgICAgMHg1MzlBLCAweDUzRTMsIDB4NTQxMSwgMHg1NDBFLCAweDU1ODksIDB4NTc1MSwgMHg1N0EyLCAweDU5N0QsCisgICAgMHg1QjU0LCAweDVCNUQsIDB4NUI4RiwgMHg1REU1LCAweDVERTcsIDB4NURGNywgMHg1RTc4LCAweDVFODMsCisgICAgMHg1RTlBLCAweDVFQjcsIDB4NUYxOCwgMHg2MDUyLCAweDYxNEMsIDB4NjI5NywgMHg2MkQ4LCAweDYzQTcsCisgICAgMHg2NTNCLCAweDY2MDIsIDB4NjY0MywgMHg2NkY0LCAweDY3NkQsIDB4NjgyMSwgMHg2ODk3LCAweDY5Q0IsCisgICAgMHg2QzVGLCAweDZEMkEsIDB4NkQ2OSwgMHg2RTJGLCAweDZFOUQsIDB4NzUzMiwgMHg3Njg3LCAweDc4NkMsCisgICAgMHg3QTNGLCAweDdDRTAsIDB4N0QwNSwgMHg3RDE4LCAweDdENUUsIDB4N0RCMSwgMHg4MDE1LCAweDgwMDMsCisgICAgMHg4MEFGLCAweDgwQjEsIDB4ODE1NCwgMHg4MThGLCAweDgyMkEsIDB4ODM1MiwgMHg4ODRDLCAweDg4NjEsCisgICAgMHg4QjFCLCAweDhDQTIsIDB4OENGQywgMHg5MENBLCAweDkxNzUsIDB4OTI3MSwgMHg3ODNGLCAweDkyRkMsCisgICAgMHg5NUE0LCAweDk2NEQsIDB4OTgwNSwgMHg5OTk5LCAweDlBRDgsIDB4OUQzQiwgMHg1MjVCLCAweDUyQUIsCisgICAgMHg1M0Y3LCAweDU0MDgsIDB4NThENSwgMHg2MkY3LCAweDZGRTAsIDB4OEM2QSwgMHg4RjVGLCAweDlFQjksCisgICAgMHg1MTRCLCAweDUyM0IsIDB4NTQ0QSwgMHg1NkZELCAweDdBNDAsIDB4OTE3NywgMHg5RDYwLCAweDlFRDIsCisgICAgMHg3MzQ0LCAweDZGMDksIDB4ODE3MCwgMHg3NTExLCAweDVGRkQsIDB4NjBEQSwgMHg5QUE4LCAweDcyREIsCisgICAgMHg4RkJDLCAweDZCNjQsIDB4OTgwMywgMHg0RUNBLCAweDU2RjAsIDB4NTc2NCwgMHg1OEJFLCAweDVBNUEsCisgICAgMHg2MDY4LCAweDYxQzcsIDB4NjYwRiwgMHg2NjA2LCAweDY4MzksIDB4NjhCMSwgMHg2REY3LCAweDc1RDUsCisgICAgMHg3RDNBLCAweDgyNkUsIDB4OUI0MiwgMHg0RTlCLCAweDRGNTAsIDB4NTNDOSwgMHg1NTA2LCAweDVENkYsCisgICAgMHg1REU2LCAweDVERUUsIDB4NjdGQiwgMHg2Qzk5LCAweDc0NzMsIDB4NzgwMiwgMHg4QTUwLCAweDkzOTYsCisgICAgMHg4OERGLCAweDU3NTAsIDB4NUVBNywgMHg2MzJCLCAweDUwQjUsIDB4NTBBQywgMHg1MThELCAweDY3MDAsCisgICAgMHg1NEM5LCAweDU4NUUsIDB4NTlCQiwgMHg1QkIwLCAweDVGNjksIDB4NjI0RCwgMHg2M0ExLCAweDY4M0QsCisgICAgMHg2QjczLCAweDZFMDgsIDB4NzA3RCwgMHg5MUM3LCAweDcyODAsIDB4NzgxNSwgMHg3ODI2LCAweDc5NkQsCisgICAgMHg2NThFLCAweDdEMzAsIDB4ODNEQywgMHg4OEMxLCAweDhGMDksIDB4OTY5QiwgMHg1MjY0LCAweDU3MjgsCisgICAgMHg2NzUwLCAweDdGNkEsIDB4OENBMSwgMHg1MUI0LCAweDU3NDIsIDB4OTYyQSwgMHg1ODNBLCAweDY5OEEsCisgICAgMHg4MEI0LCAweDU0QjIsIDB4NUQwRSwgMHg1N0ZDLCAweDc4OTUsIDB4OURGQSwgMHg0RjVDLCAweDUyNEEsCisgICAgMHg1NDhCLCAweDY0M0UsIDB4NjYyOCwgMHg2NzE0LCAweDY3RjUsIDB4N0E4NCwgMHg3QjU2LCAweDdEMjIsCisgICAgMHg5MzJGLCAweDY4NUMsIDB4OUJBRCwgMHg3QjM5LCAweDUzMTksIDB4NTE4QSwgMHg1MjM3LCAweDVCREYsCisgICAgMHg2MkY2LCAweDY0QUUsIDB4NjRFNiwgMHg2NzJELCAweDZCQkEsIDB4ODVBOSwgMHg5NkQxLCAweDc2OTAsCisgICAgMHg5QkQ2LCAweDYzNEMsIDB4OTMwNiwgMHg5QkFCLCAweDc2QkYsIDB4NjY1MiwgMHg0RTA5LCAweDUwOTgsCisgICAgMHg1M0MyLCAweDVDNzEsIDB4NjBFOCwgMHg2NDkyLCAweDY1NjMsIDB4Njg1RiwgMHg3MUU2LCAweDczQ0EsCisgICAgMHg3NTIzLCAweDdCOTcsIDB4N0U4MiwgMHg4Njk1LCAweDhCODMsIDB4OENEQiwgMHg5MTc4LCAweDk5MTAsCisgICAgMHg2NUFDLCAweDY2QUIsIDB4NkI4QiwgMHg0RUQ1LCAweDRFRDQsIDB4NEYzQSwgMHg0RjdGLCAweDUyM0EsCisgICAgMHg1M0Y4LCAweDUzRjIsIDB4NTVFMywgMHg1NkRCLCAweDU4RUIsIDB4NTlDQiwgMHg1OUM5LCAweDU5RkYsCisgICAgMHg1QjUwLCAweDVDNEQsIDB4NUUwMiwgMHg1RTJCLCAweDVGRDcsIDB4NjAxRCwgMHg2MzA3LCAweDY1MkYsCisgICAgMHg1QjVDLCAweDY1QUYsIDB4NjVCRCwgMHg2NUU4LCAweDY3OUQsIDB4NkI2MiwgMHg2QjdCLCAweDZDMEYsCisgICAgMHg3MzQ1LCAweDc5NDksIDB4NzlDMSwgMHg3Q0Y4LCAweDdEMTksIDB4N0QyQiwgMHg4MEEyLCAweDgxMDIsCisgICAgMHg4MUYzLCAweDg5OTYsIDB4OEE1RSwgMHg4QTY5LCAweDhBNjYsIDB4OEE4QywgMHg4QUVFLCAweDhDQzcsCisgICAgMHg4Q0RDLCAweDk2Q0MsIDB4OThGQywgMHg2QjZGLCAweDRFOEIsIDB4NEYzQywgMHg0RjhELCAweDUxNTAsCisgICAgMHg1QjU3LCAweDVCRkEsIDB4NjE0OCwgMHg2MzAxLCAweDY2NDIsIDB4NkIyMSwgMHg2RUNCLCAweDZDQkIsCisgICAgMHg3MjNFLCAweDc0QkQsIDB4NzVENCwgMHg3OEMxLCAweDc5M0EsIDB4ODAwQywgMHg4MDMzLCAweDgxRUEsCisgICAgMHg4NDk0LCAweDhGOUUsIDB4NkM1MCwgMHg5RTdGLCAweDVGMEYsIDB4OEI1OCwgMHg5RDJCLCAweDdBRkEsCisgICAgMHg4RUY4LCAweDVCOEQsIDB4OTZFQiwgMHg0RTAzLCAweDUzRjEsIDB4NTdGNywgMHg1OTMxLCAweDVBQzksCisgICAgMHg1QkE0LCAweDYwODksIDB4NkU3RiwgMHg2RjA2LCAweDc1QkUsIDB4OENFQSwgMHg1QjlGLCAweDg1MDAsCisgICAgMHg3QkUwLCAweDUwNzIsIDB4NjdGNCwgMHg4MjlELCAweDVDNjEsIDB4ODU0QSwgMHg3RTFFLCAweDgyMEUsCisgICAgMHg1MTk5LCAweDVDMDQsIDB4NjM2OCwgMHg4RDY2LCAweDY1OUMsIDB4NzE2RSwgMHg3OTNFLCAweDdEMTcsCisgICAgMHg4MDA1LCAweDhCMUQsIDB4OEVDQSwgMHg5MDZFLCAweDg2QzcsIDB4OTBBQSwgMHg1MDFGLCAweDUyRkEsCisgICAgMHg1QzNBLCAweDY3NTMsIDB4NzA3QywgMHg3MjM1LCAweDkxNEMsIDB4OTFDOCwgMHg5MzJCLCAweDgyRTUsCisgICAgMHg1QkMyLCAweDVGMzEsIDB4NjBGOSwgMHg0RTNCLCAweDUzRDYsIDB4NUI4OCwgMHg2MjRCLCAweDY3MzEsCisgICAgMHg2QjhBLCAweDcyRTksIDB4NzNFMCwgMHg3QTJFLCAweDgxNkIsIDB4OERBMywgMHg5MTUyLCAweDk5OTYsCisgICAgMHg1MTEyLCAweDUzRDcsIDB4NTQ2QSwgMHg1QkZGLCAweDYzODgsIDB4NkEzOSwgMHg3REFDLCAweDk3MDAsCisgICAgMHg1NkRBLCAweDUzQ0UsIDB4NTQ2OCwgMHg1Qjk3LCAweDVDMzEsIDB4NURERSwgMHg0RkVFLCAweDYxMDEsCisgICAgMHg2MkZFLCAweDZEMzIsIDB4NzlDMCwgMHg3OUNCLCAweDdENDIsIDB4N0U0RCwgMHg3RkQyLCAweDgxRUQsCisgICAgMHg4MjFGLCAweDg0OTAsIDB4ODg0NiwgMHg4OTcyLCAweDhCOTAsIDB4OEU3NCwgMHg4RjJGLCAweDkwMzEsCisgICAgMHg5MTRCLCAweDkxNkMsIDB4OTZDNiwgMHg5MTlDLCAweDRFQzAsIDB4NEY0RiwgMHg1MTQ1LCAweDUzNDEsCisgICAgMHg1RjkzLCAweDYyMEUsIDB4NjdENCwgMHg2QzQxLCAweDZFMEIsIDB4NzM2MywgMHg3RTI2LCAweDkxQ0QsCisgICAgMHg5MjgzLCAweDUzRDQsIDB4NTkxOSwgMHg1QkJGLCAweDZERDEsIDB4Nzk1RCwgMHg3RTJFLCAweDdDOUIsCisgICAgMHg1ODdFLCAweDcxOUYsIDB4NTFGQSwgMHg4ODUzLCAweDhGRjAsIDB4NEZDQSwgMHg1Q0ZCLCAweDY2MjUsCisgICAgMHg3N0FDLCAweDdBRTMsIDB4ODIxQywgMHg5OUZGLCAweDUxQzYsIDB4NUZBQSwgMHg2NUVDLCAweDY5NkYsCisgICAgMHg2Qjg5LCAweDZERjMsIDB4NkU5NiwgMHg2RjY0LCAweDc2RkUsIDB4N0QxNCwgMHg1REUxLCAweDkwNzUsCisgICAgMHg5MTg3LCAweDk4MDYsIDB4NTFFNiwgMHg1MjFELCAweDYyNDAsIDB4NjY5MSwgMHg2NkQ5LCAweDZFMUEsCisgICAgMHg1RUI2LCAweDdERDIsIDB4N0Y3MiwgMHg2NkY4LCAweDg1QUYsIDB4ODVGNywgMHg4QUY4LCAweDUyQTksCisgICAgMHg1M0Q5LCAweDU5NzMsIDB4NUU4RiwgMHg1RjkwLCAweDYwNTUsIDB4OTJFNCwgMHg5NjY0LCAweDUwQjcsCisgICAgMHg1MTFGLCAweDUyREQsIDB4NTMyMCwgMHg1MzQ3LCAweDUzRUMsIDB4NTRFOCwgMHg1NTQ2LCAweDU1MzEsCisgICAgMHg1NjE3LCAweDU5NjgsIDB4NTlCRSwgMHg1QTNDLCAweDVCQjUsIDB4NUMwNiwgMHg1QzBGLCAweDVDMTEsCisgICAgMHg1QzFBLCAweDVFODQsIDB4NUU4QSwgMHg1RUUwLCAweDVGNzAsIDB4NjI3RiwgMHg2Mjg0LCAweDYyREIsCisgICAgMHg2MzhDLCAweDYzNzcsIDB4NjYwNywgMHg2NjBDLCAweDY2MkQsIDB4NjY3NiwgMHg2NzdFLCAweDY4QTIsCisgICAgMHg2QTFGLCAweDZBMzUsIDB4NkNCQywgMHg2RDg4LCAweDZFMDksIDB4NkU1OCwgMHg3MTNDLCAweDcxMjYsCisgICAgMHg3MTY3LCAweDc1QzcsIDB4NzcwMSwgMHg3ODVELCAweDc5MDEsIDB4Nzk2NSwgMHg3OUYwLCAweDdBRTAsCisgICAgMHg3QjExLCAweDdDQTcsIDB4N0QzOSwgMHg4MDk2LCAweDgzRDYsIDB4ODQ4QiwgMHg4NTQ5LCAweDg4NUQsCisgICAgMHg4OEYzLCAweDhBMUYsIDB4OEEzQywgMHg4QTU0LCAweDhBNzMsIDB4OEM2MSwgMHg4Q0RFLCAweDkxQTQsCisgICAgMHg5MjY2LCAweDkzN0UsIDB4OTQxOCwgMHg5NjlDLCAweDk3OTgsIDB4NEUwQSwgMHg0RTA4LCAweDRFMUUsCisgICAgMHg0RTU3LCAweDUxOTcsIDB4NTI3MCwgMHg1N0NFLCAweDU4MzQsIDB4NThDQywgMHg1QjIyLCAweDVFMzgsCisgICAgMHg2MEM1LCAweDY0RkUsIDB4Njc2MSwgMHg2NzU2LCAweDZENDQsIDB4NzJCNiwgMHg3NTczLCAweDdBNjMsCisgICAgMHg4NEI4LCAweDhCNzIsIDB4OTFCOCwgMHg5MzIwLCAweDU2MzEsIDB4NTdGNCwgMHg5OEZFLCAweDYyRUQsCisgICAgMHg2OTBELCAweDZCOTYsIDB4NzFFRCwgMHg3RTU0LCAweDgwNzcsIDB4ODI3MiwgMHg4OUU2LCAweDk4REYsCisgICAgMHg4NzU1LCAweDhGQjEsIDB4NUMzQiwgMHg0RjM4LCAweDRGRTEsIDB4NEZCNSwgMHg1NTA3LCAweDVBMjAsCisgICAgMHg1QkRELCAweDVCRTksIDB4NUZDMywgMHg2MTRFLCAweDYzMkYsIDB4NjVCMCwgMHg2NjRCLCAweDY4RUUsCisgICAgMHg2OTlCLCAweDZENzgsIDB4NkRGMSwgMHg3NTMzLCAweDc1QjksIDB4NzcxRiwgMHg3OTVFLCAweDc5RTYsCisgICAgMHg3RDMzLCAweDgxRTMsIDB4ODJBRiwgMHg4NUFBLCAweDg5QUEsIDB4OEEzQSwgMHg4RUFCLCAweDhGOUIsCisgICAgMHg5MDMyLCAweDkxREQsIDB4OTcwNywgMHg0RUJBLCAweDRFQzEsIDB4NTIwMywgMHg1ODc1LCAweDU4RUMsCisgICAgMHg1QzBCLCAweDc1MUEsIDB4NUMzRCwgMHg4MTRFLCAweDhBMEEsIDB4OEZDNSwgMHg5NjYzLCAweDk3NkQsCisgICAgMHg3QjI1LCAweDhBQ0YsIDB4OTgwOCwgMHg5MTYyLCAweDU2RjMsIDB4NTNBOCwgMHg5MDE3LCAweDU0MzksCisgICAgMHg1NzgyLCAweDVFMjUsIDB4NjNBOCwgMHg2QzM0LCAweDcwOEEsIDB4Nzc2MSwgMHg3QzhCLCAweDdGRTAsCisgICAgMHg4ODcwLCAweDkwNDIsIDB4OTE1NCwgMHg5MzEwLCAweDkzMTgsIDB4OTY4RiwgMHg3NDVFLCAweDlBQzQsCisgICAgMHg1RDA3LCAweDVENjksIDB4NjU3MCwgMHg2N0EyLCAweDhEQTgsIDB4OTZEQiwgMHg2MzZFLCAweDY3NDksCisgICAgMHg2OTE5LCAweDgzQzUsIDB4OTgxNywgMHg5NkMwLCAweDg4RkUsIDB4NkY4NCwgMHg2NDdBLCAweDVCRjgsCisgICAgMHg0RTE2LCAweDcwMkMsIDB4NzU1RCwgMHg2NjJGLCAweDUxQzQsIDB4NTIzNiwgMHg1MkUyLCAweDU5RDMsCisgICAgMHg1RjgxLCAweDYwMjcsIDB4NjIxMCwgMHg2NTNGLCAweDY1NzQsIDB4NjYxRiwgMHg2Njc0LCAweDY4RjIsCisgICAgMHg2ODE2LCAweDZCNjMsIDB4NkUwNSwgMHg3MjcyLCAweDc1MUYsIDB4NzZEQiwgMHg3Q0JFLCAweDgwNTYsCisgICAgMHg1OEYwLCAweDg4RkQsIDB4ODk3RiwgMHg4QUEwLCAweDhBOTMsIDB4OEFDQiwgMHg5MDFELCAweDkxOTIsCisgICAgMHg5NzUyLCAweDk3NTksIDB4NjU4OSwgMHg3QTBFLCAweDgxMDYsIDB4OTZCQiwgMHg1RTJELCAweDYwREMsCisgICAgMHg2MjFBLCAweDY1QTUsIDB4NjYxNCwgMHg2NzkwLCAweDc3RjMsIDB4N0E0RCwgMHg3QzRELCAweDdFM0UsCisgICAgMHg4MTBBLCAweDhDQUMsIDB4OEQ2NCwgMHg4REUxLCAweDhFNUYsIDB4NzhBOSwgMHg1MjA3LCAweDYyRDksCisgICAgMHg2M0E1LCAweDY0NDIsIDB4NjI5OCwgMHg4QTJELCAweDdBODMsIDB4N0JDMCwgMHg4QUFDLCAweDk2RUEsCisgICAgMHg3RDc2LCAweDgyMEMsIDB4ODc0OSwgMHg0RUQ5LCAweDUxNDgsIDB4NTM0MywgMHg1MzYwLCAweDVCQTMsCisgICAgMHg1QzAyLCAweDVDMTYsIDB4NURERCwgMHg2MjI2LCAweDYyNDcsIDB4NjRCMCwgMHg2ODEzLCAweDY4MzQsCisgICAgMHg2Q0M5LCAweDZENDUsIDB4NkQxNywgMHg2N0QzLCAweDZGNUMsIDB4NzE0RSwgMHg3MTdELCAweDY1Q0IsCisgICAgMHg3QTdGLCAweDdCQUQsIDB4N0REQSwgMHg3RTRBLCAweDdGQTgsIDB4ODE3QSwgMHg4MjFCLCAweDgyMzksCisgICAgMHg4NUE2LCAweDhBNkUsIDB4OENDRSwgMHg4REY1LCAweDkwNzgsIDB4OTA3NywgMHg5MkFELCAweDkyOTEsCisgICAgMHg5NTgzLCAweDlCQUUsIDB4NTI0RCwgMHg1NTg0LCAweDZGMzgsIDB4NzEzNiwgMHg1MTY4LCAweDc5ODUsCisgICAgMHg3RTU1LCAweDgxQjMsIDB4N0NDRSwgMHg1NjRDLCAweDU4NTEsIDB4NUNBOCwgMHg2M0FBLCAweDY2RkUsCisgICAgMHg2NkZELCAweDY5NUEsIDB4NzJEOSwgMHg3NThGLCAweDc1OEUsIDB4NzkwRSwgMHg3OTU2LCAweDc5REYsCisgICAgMHg3Qzk3LCAweDdEMjAsIDB4N0Q0NCwgMHg4NjA3LCAweDhBMzQsIDB4OTYzQiwgMHg5MDYxLCAweDlGMjAsCisgICAgMHg1MEU3LCAweDUyNzUsIDB4NTNDQywgMHg1M0UyLCAweDUwMDksIDB4NTVBQSwgMHg1OEVFLCAweDU5NEYsCisgICAgMHg3MjNELCAweDVCOEIsIDB4NUM2NCwgMHg1MzFELCAweDYwRTMsIDB4NjBGMywgMHg2MzVDLCAweDYzODMsCisgICAgMHg2MzNGLCAweDYzQkIsIDB4NjRDRCwgMHg2NUU5LCAweDY2RjksIDB4NURFMywgMHg2OUNELCAweDY5RkQsCisgICAgMHg2RjE1LCAweDcxRTUsIDB4NEU4OSwgMHg3NUU5LCAweDc2RjgsIDB4N0E5MywgMHg3Q0RGLCAweDdEQ0YsCisgICAgMHg3RDlDLCAweDgwNjEsIDB4ODM0OSwgMHg4MzU4LCAweDg0NkMsIDB4ODRCQywgMHg4NUZCLCAweDg4QzUsCisgICAgMHg4RDcwLCAweDkwMDEsIDB4OTA2RCwgMHg5Mzk3LCAweDk3MUMsIDB4OUExMiwgMHg1MENGLCAweDU4OTcsCisgICAgMHg2MThFLCAweDgxRDMsIDB4ODUzNSwgMHg4RDA4LCAweDkwMjAsIDB4NEZDMywgMHg1MDc0LCAweDUyNDcsCisgICAgMHg1MzczLCAweDYwNkYsIDB4NjM0OSwgMHg2NzVGLCAweDZFMkMsIDB4OERCMywgMHg5MDFGLCAweDRGRDcsCisgICAgMHg1QzVFLCAweDhDQ0EsIDB4NjVDRiwgMHg3RDlBLCAweDUzNTIsIDB4ODg5NiwgMHg1MTc2LCAweDYzQzMsCisgICAgMHg1QjU4LCAweDVCNkIsIDB4NUMwQSwgMHg2NDBELCAweDY3NTEsIDB4OTA1QywgMHg0RUQ2LCAweDU5MUEsCisgICAgMHg1OTJBLCAweDZDNzAsIDB4OEE1MSwgMHg1NTNFLCAweDU4MTUsIDB4NTlBNSwgMHg2MEYwLCAweDYyNTMsCisgICAgMHg2N0MxLCAweDgyMzUsIDB4Njk1NSwgMHg5NjQwLCAweDk5QzQsIDB4OUEyOCwgMHg0RjUzLCAweDU4MDYsCisgICAgMHg1QkZFLCAweDgwMTAsIDB4NUNCMSwgMHg1RTJGLCAweDVGODUsIDB4NjAyMCwgMHg2MTRCLCAweDYyMzQsCisgICAgMHg2NkZGLCAweDZDRjAsIDB4NkVERSwgMHg4MENFLCAweDgxN0YsIDB4ODJENCwgMHg4ODhCLCAweDhDQjgsCisgICAgMHg5MDAwLCAweDkwMkUsIDB4OTY4QSwgMHg5RURCLCAweDlCREIsIDB4NEVFMywgMHg1M0YwLCAweDU5MjcsCisgICAgMHg3QjJDLCAweDkxOEQsIDB4OTg0QywgMHg5REY5LCAweDZFREQsIDB4NzAyNywgMHg1MzUzLCAweDU1NDQsCisgICAgMHg1Qjg1LCAweDYyNTgsIDB4NjI5RSwgMHg2MkQzLCAweDZDQTIsIDB4NkZFRiwgMHg3NDIyLCAweDhBMTcsCisgICAgMHg5NDM4LCAweDZGQzEsIDB4OEFGRSwgMHg4MzM4LCAweDUxRTcsIDB4ODZGOCwgMHg1M0VBLCAweDUzRTksCisgICAgMHg0RjQ2LCAweDkwNTQsIDB4OEZCMCwgMHg1OTZBLCAweDgxMzEsIDB4NURGRCwgMHg3QUVBLCAweDhGQkYsCisgICAgMHg2OERBLCAweDhDMzcsIDB4NzJGOCwgMHg5QzQ4LCAweDZBM0QsIDB4OEFCMCwgMHg0RTM5LCAweDUzNTgsCisgICAgMHg1NjA2LCAweDU3NjYsIDB4NjJDNSwgMHg2M0EyLCAweDY1RTYsIDB4NkI0RSwgMHg2REUxLCAweDZFNUIsCisgICAgMHg3MEFELCAweDc3RUQsIDB4N0FFRiwgMHg3QkFBLCAweDdEQkIsIDB4ODAzRCwgMHg4MEM2LCAweDg2Q0IsCisgICAgMHg4QTk1LCAweDkzNUIsIDB4NTZFMywgMHg1OEM3LCAweDVGM0UsIDB4NjVBRCwgMHg2Njk2LCAweDZBODAsCisgICAgMHg2QkI1LCAweDc1MzcsIDB4OEFDNywgMHg1MDI0LCAweDc3RTUsIDB4NTczMCwgMHg1RjFCLCAweDYwNjUsCisgICAgMHg2NjdBLCAweDZDNjAsIDB4NzVGNCwgMHg3QTFBLCAweDdGNkUsIDB4ODFGNCwgMHg4NzE4LCAweDkwNDUsCisgICAgMHg5OUIzLCAweDdCQzksIDB4NzU1QywgMHg3QUY5LCAweDdCNTEsIDB4ODRDNCwgMHg5MDEwLCAweDc5RTksCisgICAgMHg3QTkyLCAweDgzMzYsIDB4NUFFMSwgMHg3NzQwLCAweDRFMkQsIDB4NEVGMiwgMHg1Qjk5LCAweDVGRTAsCisgICAgMHg2MkJELCAweDY2M0MsIDB4NjdGMSwgMHg2Q0U4LCAweDg2NkIsIDB4ODg3NywgMHg4QTNCLCAweDkxNEUsCisgICAgMHg5MkYzLCAweDk5RDAsIDB4NkExNywgMHg3MDI2LCAweDczMkEsIDB4ODJFNywgMHg4NDU3LCAweDhDQUYsCisgICAgMHg0RTAxLCAweDUxNDYsIDB4NTFDQiwgMHg1NThCLCAweDVCRjUsIDB4NUUxNiwgMHg1RTMzLCAweDVFODEsCisgICAgMHg1RjE0LCAweDVGMzUsIDB4NUY2QiwgMHg1RkI0LCAweDYxRjIsIDB4NjMxMSwgMHg2NkEyLCAweDY3MUQsCisgICAgMHg2RjZFLCAweDcyNTIsIDB4NzUzQSwgMHg3NzNBLCAweDgwNzQsIDB4ODEzOSwgMHg4MTc4LCAweDg3NzYsCisgICAgMHg4QUJGLCAweDhBREMsIDB4OEQ4NSwgMHg4REYzLCAweDkyOUEsIDB4OTU3NywgMHg5ODAyLCAweDlDRTUsCisgICAgMHg1MkM1LCAweDYzNTcsIDB4NzZGNCwgMHg2NzE1LCAweDZDODgsIDB4NzNDRCwgMHg4Q0MzLCAweDkzQUUsCisgICAgMHg5NjczLCAweDZEMjUsIDB4NTg5QywgMHg2OTBFLCAweDY5Q0MsIDB4OEZGRCwgMHg5MzlBLCAweDc1REIsCisgICAgMHg5MDFBLCAweDU4NUEsIDB4NjgwMiwgMHg2M0I0LCAweDY5RkIsIDB4NEY0MywgMHg2RjJDLCAweDY3RDgsCisgICAgMHg4RkJCLCAweDg1MjYsIDB4N0RCNCwgMHg5MzU0LCAweDY5M0YsIDB4NkY3MCwgMHg1NzZBLCAweDU4RjcsCisgICAgMHg1QjJDLCAweDdEMkMsIDB4NzIyQSwgMHg1NDBBLCAweDkxRTMsIDB4OURCNCwgMHg0RUFELCAweDRGNEUsCisgICAgMHg1MDVDLCAweDUwNzUsIDB4NTI0MywgMHg4QzlFLCAweDU0NDgsIDB4NTgyNCwgMHg1QjlBLCAweDVFMUQsCisgICAgMHg1RTk1LCAweDVFQUQsIDB4NUVGNywgMHg1RjFGLCAweDYwOEMsIDB4NjJCNSwgMHg2MzNBLCAweDYzRDAsCisgICAgMHg2OEFGLCAweDZDNDAsIDB4Nzg4NywgMHg3OThFLCAweDdBMEIsIDB4N0RFMCwgMHg4MjQ3LCAweDhBMDIsCisgICAgMHg4QUU2LCAweDhFNDQsIDB4OTAxMywgMHg5MEI4LCAweDkxMkQsIDB4OTFEOCwgMHg5RjBFLCAweDZDRTUsCisgICAgMHg2NDU4LCAweDY0RTIsIDB4NjU3NSwgMHg2RUY0LCAweDc2ODQsIDB4N0IxQiwgMHg5MDY5LCAweDkzRDEsCisgICAgMHg2RUJBLCAweDU0RjIsIDB4NUZCOSwgMHg2NEE0LCAweDhGNEQsIDB4OEZFRCwgMHg5MjQ0LCAweDUxNzgsCisgICAgMHg1ODZCLCAweDU5MjksIDB4NUM1NSwgMHg1RTk3LCAweDZERkIsIDB4N0U4RiwgMHg3NTFDLCAweDhDQkMsCisgICAgMHg4RUUyLCAweDk4NUIsIDB4NzBCOSwgMHg0RjFELCAweDZCQkYsIDB4NkZCMSwgMHg3NTMwLCAweDk2RkIsCisgICAgMHg1MTRFLCAweDU0MTAsIDB4NTgzNSwgMHg1ODU3LCAweDU5QUMsIDB4NUM2MCwgMHg1RjkyLCAweDY1OTcsCisgICAgMHg2NzVDLCAweDZFMjEsIDB4NzY3QiwgMHg4M0RGLCAweDhDRUQsIDB4OTAxNCwgMHg5MEZELCAweDkzNEQsCisgICAgMHg3ODI1LCAweDc4M0EsIDB4NTJBQSwgMHg1RUE2LCAweDU3MUYsIDB4NTk3NCwgMHg2MDEyLCAweDUwMTIsCisgICAgMHg1MTVBLCAweDUxQUMsIDB4NTFDRCwgMHg1MjAwLCAweDU1MTAsIDB4NTg1NCwgMHg1ODU4LCAweDU5NTcsCisgICAgMHg1Qjk1LCAweDVDRjYsIDB4NUQ4QiwgMHg2MEJDLCAweDYyOTUsIDB4NjQyRCwgMHg2NzcxLCAweDY4NDMsCisgICAgMHg2OEJDLCAweDY4REYsIDB4NzZENywgMHg2REQ4LCAweDZFNkYsIDB4NkQ5QiwgMHg3MDZGLCAweDcxQzgsCisgICAgMHg1RjUzLCAweDc1RDgsIDB4Nzk3NywgMHg3QjQ5LCAweDdCNTQsIDB4N0I1MiwgMHg3Q0Q2LCAweDdENzEsCisgICAgMHg1MjMwLCAweDg0NjMsIDB4ODU2OSwgMHg4NUU0LCAweDhBMEUsIDB4OEIwNCwgMHg4QzQ2LCAweDhFMEYsCisgICAgMHg5MDAzLCAweDkwMEYsIDB4OTQxOSwgMHg5Njc2LCAweDk4MkQsIDB4OUEzMCwgMHg5NUQ4LCAweDUwQ0QsCisgICAgMHg1MkQ1LCAweDU0MEMsIDB4NTgwMiwgMHg1QzBFLCAweDYxQTcsIDB4NjQ5RSwgMHg2RDFFLCAweDc3QjMsCisgICAgMHg3QUU1LCAweDgwRjQsIDB4ODQwNCwgMHg5MDUzLCAweDkyODUsIDB4NUNFMCwgMHg5RDA3LCAweDUzM0YsCisgICAgMHg1Rjk3LCAweDVGQjMsIDB4NkQ5QywgMHg3Mjc5LCAweDc3NjMsIDB4NzlCRiwgMHg3QkU0LCAweDZCRDIsCisgICAgMHg3MkVDLCAweDhBQUQsIDB4NjgwMywgMHg2QTYxLCAweDUxRjgsIDB4N0E4MSwgMHg2OTM0LCAweDVDNEEsCisgICAgMHg5Q0Y2LCAweDgyRUIsIDB4NUJDNSwgMHg5MTQ5LCAweDcwMUUsIDB4NTY3OCwgMHg1QzZGLCAweDYwQzcsCisgICAgMHg2NTY2LCAweDZDOEMsIDB4OEM1QSwgMHg5MDQxLCAweDk4MTMsIDB4NTQ1MSwgMHg2NkM3LCAweDkyMEQsCisgICAgMHg1OTQ4LCAweDkwQTMsIDB4NTE4NSwgMHg0RTRELCAweDUxRUEsIDB4ODU5OSwgMHg4QjBFLCAweDcwNTgsCisgICAgMHg2MzdBLCAweDkzNEIsIDB4Njk2MiwgMHg5OUI0LCAweDdFMDQsIDB4NzU3NywgMHg1MzU3LCAweDY5NjAsCisgICAgMHg4RURGLCAweDk2RTMsIDB4NkM1RCwgMHg0RThDLCAweDVDM0MsIDB4NUYxMCwgMHg4RkU5LCAweDUzMDIsCisgICAgMHg4Q0QxLCAweDgwODksIDB4ODY3OSwgMHg1RUZGLCAweDY1RTUsIDB4NEU3MywgMHg1MTY1LCAweDU5ODIsCisgICAgMHg1QzNGLCAweDk3RUUsIDB4NEVGQiwgMHg1OThBLCAweDVGQ0QsIDB4OEE4RCwgMHg2RkUxLCAweDc5QjAsCisgICAgMHg3OTYyLCAweDVCRTcsIDB4ODQ3MSwgMHg3MzJCLCAweDcxQjEsIDB4NUU3NCwgMHg1RkY1LCAweDYzN0IsCisgICAgMHg2NDlBLCAweDcxQzMsIDB4N0M5OCwgMHg0RTQzLCAweDVFRkMsIDB4NEU0QiwgMHg1N0RDLCAweDU2QTIsCisgICAgMHg2MEE5LCAweDZGQzMsIDB4N0QwRCwgMHg4MEZELCAweDgxMzMsIDB4ODFCRiwgMHg4RkIyLCAweDg5OTcsCisgICAgMHg4NkE0LCAweDVERjQsIDB4NjI4QSwgMHg2NEFELCAweDg5ODcsIDB4Njc3NywgMHg2Q0UyLCAweDZEM0UsCisgICAgMHg3NDM2LCAweDc4MzQsIDB4NUE0NiwgMHg3Rjc1LCAweDgyQUQsIDB4OTlBQywgMHg0RkYzLCAweDVFQzMsCisgICAgMHg2MkRELCAweDYzOTIsIDB4NjU1NywgMHg2NzZGLCAweDc2QzMsIDB4NzI0QywgMHg4MENDLCAweDgwQkEsCisgICAgMHg4RjI5LCAweDkxNEQsIDB4NTAwRCwgMHg1N0Y5LCAweDVBOTIsIDB4Njg4NSwgMHg2OTczLCAweDcxNjQsCisgICAgMHg3MkZELCAweDhDQjcsIDB4NThGMiwgMHg4Q0UwLCAweDk2NkEsIDB4OTAxOSwgMHg4NzdGLCAweDc5RTQsCisgICAgMHg3N0U3LCAweDg0MjksIDB4NEYyRiwgMHg1MjY1LCAweDUzNUEsIDB4NjJDRCwgMHg2N0NGLCAweDZDQ0EsCisgICAgMHg3NjdELCAweDdCOTQsIDB4N0M5NSwgMHg4MjM2LCAweDg1ODQsIDB4OEZFQiwgMHg2NkRELCAweDZGMjAsCisgICAgMHg3MjA2LCAweDdFMUIsIDB4ODNBQiwgMHg5OUMxLCAweDlFQTYsIDB4NTFGRCwgMHg3QkIxLCAweDc4NzIsCisgICAgMHg3QkI4LCAweDgwODcsIDB4N0I0OCwgMHg2QUU4LCAweDVFNjEsIDB4ODA4QywgMHg3NTUxLCAweDc1NjAsCisgICAgMHg1MTZCLCAweDkyNjIsIDB4NkU4QywgMHg3NjdBLCAweDkxOTcsIDB4OUFFQSwgMHg0RjEwLCAweDdGNzAsCisgICAgMHg2MjlDLCAweDdCNEYsIDB4OTVBNSwgMHg5Q0U5LCAweDU2N0EsIDB4NTg1OSwgMHg4NkU0LCAweDk2QkMsCisgICAgMHg0RjM0LCAweDUyMjQsIDB4NTM0QSwgMHg1M0NELCAweDUzREIsIDB4NUUwNiwgMHg2NDJDLCAweDY1OTEsCisgICAgMHg2NzdGLCAweDZDM0UsIDB4NkM0RSwgMHg3MjQ4LCAweDcyQUYsIDB4NzNFRCwgMHg3NTU0LCAweDdFNDEsCisgICAgMHg4MjJDLCAweDg1RTksIDB4OENBOSwgMHg3QkM0LCAweDkxQzYsIDB4NzE2OSwgMHg5ODEyLCAweDk4RUYsCisgICAgMHg2MzNELCAweDY2NjksIDB4NzU2QSwgMHg3NkU0LCAweDc4RDAsIDB4ODU0MywgMHg4NkVFLCAweDUzMkEsCisgICAgMHg1MzUxLCAweDU0MjYsIDB4NTk4MywgMHg1RTg3LCAweDVGN0MsIDB4NjBCMiwgMHg2MjQ5LCAweDYyNzksCisgICAgMHg2MkFCLCAweDY1OTAsIDB4NkJENCwgMHg2Q0NDLCAweDc1QjIsIDB4NzZBRSwgMHg3ODkxLCAweDc5RDgsCisgICAgMHg3RENCLCAweDdGNzcsIDB4ODBBNSwgMHg4OEFCLCAweDhBQjksIDB4OENCQiwgMHg5MDdGLCAweDk3NUUsCisgICAgMHg5OERCLCAweDZBMEIsIDB4N0MzOCwgMHg1MDk5LCAweDVDM0UsIDB4NUZBRSwgMHg2Nzg3LCAweDZCRDgsCisgICAgMHg3NDM1LCAweDc3MDksIDB4N0Y4RSwgMHg5RjNCLCAweDY3Q0EsIDB4N0ExNywgMHg1MzM5LCAweDc1OEIsCisgICAgMHg5QUVELCAweDVGNjYsIDB4ODE5RCwgMHg4M0YxLCAweDgwOTgsIDB4NUYzQywgMHg1RkM1LCAweDc1NjIsCisgICAgMHg3QjQ2LCAweDkwM0MsIDB4Njg2NywgMHg1OUVCLCAweDVBOUIsIDB4N0QxMCwgMHg3NjdFLCAweDhCMkMsCisgICAgMHg0RkY1LCAweDVGNkEsIDB4NkExOSwgMHg2QzM3LCAweDZGMDIsIDB4NzRFMiwgMHg3OTY4LCAweDg4NjgsCisgICAgMHg4QTU1LCAweDhDNzksIDB4NUVERiwgMHg2M0NGLCAweDc1QzUsIDB4NzlEMiwgMHg4MkQ3LCAweDkzMjgsCisgICAgMHg5MkYyLCAweDg0OUMsIDB4ODZFRCwgMHg5QzJELCAweDU0QzEsIDB4NUY2QywgMHg2NThDLCAweDZENUMsCisgICAgMHg3MDE1LCAweDhDQTcsIDB4OENEMywgMHg5ODNCLCAweDY1NEYsIDB4NzRGNiwgMHg0RTBELCAweDRFRDgsCisgICAgMHg1N0UwLCAweDU5MkIsIDB4NUE2NiwgMHg1QkNDLCAweDUxQTgsIDB4NUUwMywgMHg1RTlDLCAweDYwMTYsCisgICAgMHg2Mjc2LCAweDY1NzcsIDB4NjVBNywgMHg2NjZFLCAweDZENkUsIDB4NzIzNiwgMHg3QjI2LCAweDgxNTAsCisgICAgMHg4MTlBLCAweDgyOTksIDB4OEI1QywgMHg4Q0EwLCAweDhDRTYsIDB4OEQ3NCwgMHg5NjFDLCAweDk2NDQsCisgICAgMHg0RkFFLCAweDY0QUIsIDB4NkI2NiwgMHg4MjFFLCAweDg0NjEsIDB4ODU2QSwgMHg5MEU4LCAweDVDMDEsCisgICAgMHg2OTUzLCAweDk4QTgsIDB4ODQ3QSwgMHg4NTU3LCAweDRGMEYsIDB4NTI2RiwgMHg1RkE5LCAweDVFNDUsCisgICAgMHg2NzBELCAweDc5OEYsIDB4ODE3OSwgMHg4OTA3LCAweDg5ODYsIDB4NkRGNSwgMHg1RjE3LCAweDYyNTUsCisgICAgMHg2Q0I4LCAweDRFQ0YsIDB4NzI2OSwgMHg5QjkyLCAweDUyMDYsIDB4NTQzQiwgMHg1Njc0LCAweDU4QjMsCisgICAgMHg2MUE0LCAweDYyNkUsIDB4NzExQSwgMHg1OTZFLCAweDdDODksIDB4N0NERSwgMHg3RDFCLCAweDk2RjAsCisgICAgMHg2NTg3LCAweDgwNUUsIDB4NEUxOSwgMHg0Rjc1LCAweDUxNzUsIDB4NTg0MCwgMHg1RTYzLCAweDVFNzMsCisgICAgMHg1RjBBLCAweDY3QzQsIDB4NEUyNiwgMHg4NTNELCAweDk1ODksIDB4OTY1QiwgMHg3QzczLCAweDk4MDEsCisgICAgMHg1MEZCLCAweDU4QzEsIDB4NzY1NiwgMHg3OEE3LCAweDUyMjUsIDB4NzdBNSwgMHg4NTExLCAweDdCODYsCisgICAgMHg1MDRGLCAweDU5MDksIDB4NzI0NywgMHg3QkM3LCAweDdERTgsIDB4OEZCQSwgMHg4RkQ0LCAweDkwNEQsCisgICAgMHg0RkJGLCAweDUyQzksIDB4NUEyOSwgMHg1RjAxLCAweDk3QUQsIDB4NEZERCwgMHg4MjE3LCAweDkyRUEsCisgICAgMHg1NzAzLCAweDYzNTUsIDB4NkI2OSwgMHg3NTJCLCAweDg4REMsIDB4OEYxNCwgMHg3QTQyLCAweDUyREYsCisgICAgMHg1ODkzLCAweDYxNTUsIDB4NjIwQSwgMHg2NkFFLCAweDZCQ0QsIDB4N0MzRiwgMHg4M0U5LCAweDUwMjMsCisgICAgMHg0RkY4LCAweDUzMDUsIDB4NTQ0NiwgMHg1ODMxLCAweDU5NDksIDB4NUI5RCwgMHg1Q0YwLCAweDVDRUYsCisgICAgMHg1RDI5LCAweDVFOTYsIDB4NjJCMSwgMHg2MzY3LCAweDY1M0UsIDB4NjVCOSwgMHg2NzBCLCAweDZDRDUsCisgICAgMHg2Q0UxLCAweDcwRjksIDB4NzgzMiwgMHg3RTJCLCAweDgwREUsIDB4ODJCMywgMHg4NDBDLCAweDg0RUMsCisgICAgMHg4NzAyLCAweDg5MTIsIDB4OEEyQSwgMHg4QzRBLCAweDkwQTYsIDB4OTJEMiwgMHg5OEZELCAweDlDRjMsCisgICAgMHg5RDZDLCAweDRFNEYsIDB4NEVBMSwgMHg1MDhELCAweDUyNTYsIDB4NTc0QSwgMHg1OUE4LCAweDVFM0QsCisgICAgMHg1RkQ4LCAweDVGRDksIDB4NjIzRiwgMHg2NkI0LCAweDY3MUIsIDB4NjdEMCwgMHg2OEQyLCAweDUxOTIsCisgICAgMHg3RDIxLCAweDgwQUEsIDB4ODFBOCwgMHg4QjAwLCAweDhDOEMsIDB4OENCRiwgMHg5MjdFLCAweDk2MzIsCisgICAgMHg1NDIwLCAweDk4MkMsIDB4NTMxNywgMHg1MEQ1LCAweDUzNUMsIDB4NThBOCwgMHg2NEIyLCAweDY3MzQsCisgICAgMHg3MjY3LCAweDc3NjYsIDB4N0E0NiwgMHg5MUU2LCAweDUyQzMsIDB4NkNBMSwgMHg2Qjg2LCAweDU4MDAsCisgICAgMHg1RTRDLCAweDU5NTQsIDB4NjcyQywgMHg3RkZCLCAweDUxRTEsIDB4NzZDNiwgMHg2NDY5LCAweDc4RTgsCisgICAgMHg5QjU0LCAweDlFQkIsIDB4NTdDQiwgMHg1OUI5LCAweDY2MjcsIDB4Njc5QSwgMHg2QkNFLCAweDU0RTksCisgICAgMHg2OUQ5LCAweDVFNTUsIDB4ODE5QywgMHg2Nzk1LCAweDlCQUEsIDB4NjdGRSwgMHg5QzUyLCAweDY4NUQsCisgICAgMHg0RUE2LCAweDRGRTMsIDB4NTNDOCwgMHg2MkI5LCAweDY3MkIsIDB4NkNBQiwgMHg4RkM0LCAweDRGQUQsCisgICAgMHg3RTZELCAweDlFQkYsIDB4NEUwNywgMHg2MTYyLCAweDZFODAsIDB4NkYyQiwgMHg4NTEzLCAweDU0NzMsCisgICAgMHg2NzJBLCAweDlCNDUsIDB4NURGMywgMHg3Qjk1LCAweDVDQUMsIDB4NUJDNiwgMHg4NzFDLCAweDZFNEEsCisgICAgMHg4NEQxLCAweDdBMTQsIDB4ODEwOCwgMHg1OTk5LCAweDdDOEQsIDB4NkMxMSwgMHg3NzIwLCAweDUyRDksCisgICAgMHg1OTIyLCAweDcxMjEsIDB4NzI1RiwgMHg3N0RCLCAweDk3MjcsIDB4OUQ2MSwgMHg2OTBCLCAweDVBN0YsCisgICAgMHg1QTE4LCAweDUxQTUsIDB4NTQwRCwgMHg1NDdELCAweDY2MEUsIDB4NzZERiwgMHg4RkY3LCAweDkyOTgsCisgICAgMHg5Q0Y0LCAweDU5RUEsIDB4NzI1RCwgMHg2RUM1LCAweDUxNEQsIDB4NjhDOSwgMHg3REJGLCAweDdERUMsCisgICAgMHg5NzYyLCAweDlFQkEsIDB4NjQ3OCwgMHg2QTIxLCAweDgzMDIsIDB4NTk4NCwgMHg1QjVGLCAweDZCREIsCisgICAgMHg3MzFCLCAweDc2RjIsIDB4N0RCMiwgMHg4MDE3LCAweDg0OTksIDB4NTEzMiwgMHg2NzI4LCAweDlFRDksCisgICAgMHg3NkVFLCAweDY3NjIsIDB4NTJGRiwgMHg5OTA1LCAweDVDMjQsIDB4NjIzQiwgMHg3QzdFLCAweDhDQjAsCisgICAgMHg1NTRGLCAweDYwQjYsIDB4N0QwQiwgMHg5NTgwLCAweDUzMDEsIDB4NEU1RiwgMHg1MUI2LCAweDU5MUMsCisgICAgMHg3MjNBLCAweDgwMzYsIDB4OTFDRSwgMHg1RjI1LCAweDc3RTIsIDB4NTM4NCwgMHg1Rjc5LCAweDdEMDQsCisgICAgMHg4NUFDLCAweDhBMzMsIDB4OEU4RCwgMHg5NzU2LCAweDY3RjMsIDB4ODVBRSwgMHg5NDUzLCAweDYxMDksCisgICAgMHg2MTA4LCAweDZDQjksIDB4NzY1MiwgMHg4QUVELCAweDhGMzgsIDB4NTUyRiwgMHg0RjUxLCAweDUxMkEsCisgICAgMHg1MkM3LCAweDUzQ0IsIDB4NUJBNSwgMHg1RTdELCAweDYwQTAsIDB4NjE4MiwgMHg2M0Q2LCAweDY3MDksCisgICAgMHg2N0RBLCAweDZFNjcsIDB4NkQ4QywgMHg3MzM2LCAweDczMzcsIDB4NzUzMSwgMHg3OTUwLCAweDg4RDUsCisgICAgMHg4QTk4LCAweDkwNEEsIDB4OTA5MSwgMHg5MEY1LCAweDk2QzQsIDB4ODc4RCwgMHg1OTE1LCAweDRFODgsCisgICAgMHg0RjU5LCAweDRFMEUsIDB4OEE4OSwgMHg4RjNGLCAweDk4MTAsIDB4NTBBRCwgMHg1RTdDLCAweDU5OTYsCisgICAgMHg1QkI5LCAweDVFQjgsIDB4NjNEQSwgMHg2M0ZBLCAweDY0QzEsIDB4NjZEQywgMHg2OTRBLCAweDY5RDgsCisgICAgMHg2RDBCLCAweDZFQjYsIDB4NzE5NCwgMHg3NTI4LCAweDdBQUYsIDB4N0Y4QSwgMHg4MDAwLCAweDg0NDksCisgICAgMHg4NEM5LCAweDg5ODEsIDB4OEIyMSwgMHg4RTBBLCAweDkwNjUsIDB4OTY3RCwgMHg5OTBBLCAweDYxN0UsCisgICAgMHg2MjkxLCAweDZCMzIsIDB4NkM4MywgMHg2RDc0LCAweDdGQ0MsIDB4N0ZGQywgMHg2REMwLCAweDdGODUsCisgICAgMHg4N0JBLCAweDg4RjgsIDB4Njc2NSwgMHg4M0IxLCAweDk4M0MsIDB4OTZGNywgMHg2RDFCLCAweDdENjEsCisgICAgMHg4NDNELCAweDkxNkEsIDB4NEU3MSwgMHg1Mzc1LCAweDVENTAsIDB4NkIwNCwgMHg2RkVCLCAweDg1Q0QsCisgICAgMHg4NjJELCAweDg5QTcsIDB4NTIyOSwgMHg1NDBGLCAweDVDNjUsIDB4Njc0RSwgMHg2OEE4LCAweDc0MDYsCisgICAgMHg3NDgzLCAweDc1RTIsIDB4ODhDRiwgMHg4OEUxLCAweDkxQ0MsIDB4OTZFMiwgMHg5Njc4LCAweDVGOEIsCisgICAgMHg3Mzg3LCAweDdBQ0IsIDB4ODQ0RSwgMHg2M0EwLCAweDc1NjUsIDB4NTI4OSwgMHg2RDQxLCAweDZFOUMsCisgICAgMHg3NDA5LCAweDc1NTksIDB4Nzg2QiwgMHg3QzkyLCAweDk2ODYsIDB4N0FEQywgMHg5RjhELCAweDRGQjYsCisgICAgMHg2MTZFLCAweDY1QzUsIDB4ODY1QywgMHg0RTg2LCAweDRFQUUsIDB4NTBEQSwgMHg0RTIxLCAweDUxQ0MsCisgICAgMHg1QkVFLCAweDY1OTksIDB4Njg4MSwgMHg2REJDLCAweDczMUYsIDB4NzY0MiwgMHg3N0FELCAweDdBMUMsCisgICAgMHg3Q0U3LCAweDgyNkYsIDB4OEFEMiwgMHg5MDdDLCAweDkxQ0YsIDB4OTY3NSwgMHg5ODE4LCAweDUyOUIsCisgICAgMHg3REQxLCAweDUwMkIsIDB4NTM5OCwgMHg2Nzk3LCAweDZEQ0IsIDB4NzFEMCwgMHg3NDMzLCAweDgxRTgsCisgICAgMHg4RjJBLCAweDk2QTMsIDB4OUM1NywgMHg5RTlGLCAweDc0NjAsIDB4NTg0MSwgMHg2RDk5LCAweDdEMkYsCisgICAgMHg5ODVFLCAweDRFRTQsIDB4NEYzNiwgMHg0RjhCLCAweDUxQjcsIDB4NTJCMSwgMHg1REJBLCAweDYwMUMsCisgICAgMHg3M0IyLCAweDc5M0MsIDB4ODJEMywgMHg5MjM0LCAweDk2QjcsIDB4OTZGNiwgMHg5NzBBLCAweDlFOTcsCisgICAgMHg5RjYyLCAweDY2QTYsIDB4NkI3NCwgMHg1MjE3LCAweDUyQTMsIDB4NzBDOCwgMHg4OEMyLCAweDVFQzksCisgICAgMHg2MDRCLCAweDYxOTAsIDB4NkYyMywgMHg3MTQ5LCAweDdDM0UsIDB4N0RGNCwgMHg4MDZGLCAweDg0RUUsCisgICAgMHg5MDIzLCAweDkzMkMsIDB4NTQ0MiwgMHg5QjZGLCAweDZBRDMsIDB4NzA4OSwgMHg4Q0MyLCAweDhERUYsCisgICAgMHg5NzMyLCAweDUyQjQsIDB4NUE0MSwgMHg1RUNBLCAweDVGMDQsIDB4NjcxNywgMHg2OTdDLCAweDY5OTQsCisgICAgMHg2RDZBLCAweDZGMEYsIDB4NzI2MiwgMHg3MkZDLCAweDdCRUQsIDB4ODAwMSwgMHg4MDdFLCAweDg3NEIsCisgICAgMHg5MENFLCAweDUxNkQsIDB4OUU5MywgMHg3OTg0LCAweDgwOEIsIDB4OTMzMiwgMHg4QUQ2LCAweDUwMkQsCisgICAgMHg1NDhDLCAweDhBNzEsIDB4NkI2QSwgMHg4Q0M0LCAweDgxMDcsIDB4NjBEMSwgMHg2N0EwLCAweDlERjIsCisgICAgMHg0RTk5LCAweDRFOTgsIDB4OUMxMCwgMHg4QTZCLCAweDg1QzEsIDB4ODU2OCwgMHg2OTAwLCAweDZFN0UsCisgICAgMHg3ODk3LCAweDgxNTUsIDB4NUYwQywgMHg0RTEwLCAweDRFMTUsIDB4NEUyQSwgMHg0RTMxLCAweDRFMzYsCisgICAgMHg0RTNDLCAweDRFM0YsIDB4NEU0MiwgMHg0RTU2LCAweDRFNTgsIDB4NEU4MiwgMHg0RTg1LCAweDhDNkIsCisgICAgMHg0RThBLCAweDgyMTIsIDB4NUYwRCwgMHg0RThFLCAweDRFOUUsIDB4NEU5RiwgMHg0RUEwLCAweDRFQTIsCisgICAgMHg0RUIwLCAweDRFQjMsIDB4NEVCNiwgMHg0RUNFLCAweDRFQ0QsIDB4NEVDNCwgMHg0RUM2LCAweDRFQzIsCisgICAgMHg0RUQ3LCAweDRFREUsIDB4NEVFRCwgMHg0RURGLCAweDRFRjcsIDB4NEYwOSwgMHg0RjVBLCAweDRGMzAsCisgICAgMHg0RjVCLCAweDRGNUQsIDB4NEY1NywgMHg0RjQ3LCAweDRGNzYsIDB4NEY4OCwgMHg0RjhGLCAweDRGOTgsCisgICAgMHg0RjdCLCAweDRGNjksIDB4NEY3MCwgMHg0RjkxLCAweDRGNkYsIDB4NEY4NiwgMHg0Rjk2LCAweDUxMTgsCisgICAgMHg0RkQ0LCAweDRGREYsIDB4NEZDRSwgMHg0RkQ4LCAweDRGREIsIDB4NEZEMSwgMHg0RkRBLCAweDRGRDAsCisgICAgMHg0RkU0LCAweDRGRTUsIDB4NTAxQSwgMHg1MDI4LCAweDUwMTQsIDB4NTAyQSwgMHg1MDI1LCAweDUwMDUsCisgICAgMHg0RjFDLCAweDRGRjYsIDB4NTAyMSwgMHg1MDI5LCAweDUwMkMsIDB4NEZGRSwgMHg0RkVGLCAweDUwMTEsCisgICAgMHg1MDA2LCAweDUwNDMsIDB4NTA0NywgMHg2NzAzLCAweDUwNTUsIDB4NTA1MCwgMHg1MDQ4LCAweDUwNUEsCisgICAgMHg1MDU2LCAweDUwNkMsIDB4NTA3OCwgMHg1MDgwLCAweDUwOUEsIDB4NTA4NSwgMHg1MEI0LCAweDUwQjIsCisgICAgMHg1MEM5LCAweDUwQ0EsIDB4NTBCMywgMHg1MEMyLCAweDUwRDYsIDB4NTBERSwgMHg1MEU1LCAweDUwRUQsCisgICAgMHg1MEUzLCAweDUwRUUsIDB4NTBGOSwgMHg1MEY1LCAweDUxMDksIDB4NTEwMSwgMHg1MTAyLCAweDUxMTYsCisgICAgMHg1MTE1LCAweDUxMTQsIDB4NTExQSwgMHg1MTIxLCAweDUxM0EsIDB4NTEzNywgMHg1MTNDLCAweDUxM0IsCisgICAgMHg1MTNGLCAweDUxNDAsIDB4NTE1MiwgMHg1MTRDLCAweDUxNTQsIDB4NTE2MiwgMHg3QUY4LCAweDUxNjksCisgICAgMHg1MTZBLCAweDUxNkUsIDB4NTE4MCwgMHg1MTgyLCAweDU2RDgsIDB4NTE4QywgMHg1MTg5LCAweDUxOEYsCisgICAgMHg1MTkxLCAweDUxOTMsIDB4NTE5NSwgMHg1MTk2LCAweDUxQTQsIDB4NTFBNiwgMHg1MUEyLCAweDUxQTksCisgICAgMHg1MUFBLCAweDUxQUIsIDB4NTFCMywgMHg1MUIxLCAweDUxQjIsIDB4NTFCMCwgMHg1MUI1LCAweDUxQkQsCisgICAgMHg1MUM1LCAweDUxQzksIDB4NTFEQiwgMHg1MUUwLCAweDg2NTUsIDB4NTFFOSwgMHg1MUVELCAweDUxRjAsCisgICAgMHg1MUY1LCAweDUxRkUsIDB4NTIwNCwgMHg1MjBCLCAweDUyMTQsIDB4NTIwRSwgMHg1MjI3LCAweDUyMkEsCisgICAgMHg1MjJFLCAweDUyMzMsIDB4NTIzOSwgMHg1MjRGLCAweDUyNDQsIDB4NTI0QiwgMHg1MjRDLCAweDUyNUUsCisgICAgMHg1MjU0LCAweDUyNkEsIDB4NTI3NCwgMHg1MjY5LCAweDUyNzMsIDB4NTI3RiwgMHg1MjdELCAweDUyOEQsCisgICAgMHg1Mjk0LCAweDUyOTIsIDB4NTI3MSwgMHg1Mjg4LCAweDUyOTEsIDB4OEZBOCwgMHg4RkE3LCAweDUyQUMsCisgICAgMHg1MkFELCAweDUyQkMsIDB4NTJCNSwgMHg1MkMxLCAweDUyQ0QsIDB4NTJENywgMHg1MkRFLCAweDUyRTMsCisgICAgMHg1MkU2LCAweDk4RUQsIDB4NTJFMCwgMHg1MkYzLCAweDUyRjUsIDB4NTJGOCwgMHg1MkY5LCAweDUzMDYsCisgICAgMHg1MzA4LCAweDc1MzgsIDB4NTMwRCwgMHg1MzEwLCAweDUzMEYsIDB4NTMxNSwgMHg1MzFBLCAweDUzMjMsCisgICAgMHg1MzJGLCAweDUzMzEsIDB4NTMzMywgMHg1MzM4LCAweDUzNDAsIDB4NTM0NiwgMHg1MzQ1LCAweDRFMTcsCisgICAgMHg1MzQ5LCAweDUzNEQsIDB4NTFENiwgMHg1MzVFLCAweDUzNjksIDB4NTM2RSwgMHg1OTE4LCAweDUzN0IsCisgICAgMHg1Mzc3LCAweDUzODIsIDB4NTM5NiwgMHg1M0EwLCAweDUzQTYsIDB4NTNBNSwgMHg1M0FFLCAweDUzQjAsCisgICAgMHg1M0I2LCAweDUzQzMsIDB4N0MxMiwgMHg5NkQ5LCAweDUzREYsIDB4NjZGQywgMHg3MUVFLCAweDUzRUUsCisgICAgMHg1M0U4LCAweDUzRUQsIDB4NTNGQSwgMHg1NDAxLCAweDU0M0QsIDB4NTQ0MCwgMHg1NDJDLCAweDU0MkQsCisgICAgMHg1NDNDLCAweDU0MkUsIDB4NTQzNiwgMHg1NDI5LCAweDU0MUQsIDB4NTQ0RSwgMHg1NDhGLCAweDU0NzUsCisgICAgMHg1NDhFLCAweDU0NUYsIDB4NTQ3MSwgMHg1NDc3LCAweDU0NzAsIDB4NTQ5MiwgMHg1NDdCLCAweDU0ODAsCisgICAgMHg1NDc2LCAweDU0ODQsIDB4NTQ5MCwgMHg1NDg2LCAweDU0QzcsIDB4NTRBMiwgMHg1NEI4LCAweDU0QTUsCisgICAgMHg1NEFDLCAweDU0QzQsIDB4NTRDOCwgMHg1NEE4LCAweDU0QUIsIDB4NTRDMiwgMHg1NEE0LCAweDU0QkUsCisgICAgMHg1NEJDLCAweDU0RDgsIDB4NTRFNSwgMHg1NEU2LCAweDU1MEYsIDB4NTUxNCwgMHg1NEZELCAweDU0RUUsCisgICAgMHg1NEVELCAweDU0RkEsIDB4NTRFMiwgMHg1NTM5LCAweDU1NDAsIDB4NTU2MywgMHg1NTRDLCAweDU1MkUsCisgICAgMHg1NTVDLCAweDU1NDUsIDB4NTU1NiwgMHg1NTU3LCAweDU1MzgsIDB4NTUzMywgMHg1NTVELCAweDU1OTksCisgICAgMHg1NTgwLCAweDU0QUYsIDB4NTU4QSwgMHg1NTlGLCAweDU1N0IsIDB4NTU3RSwgMHg1NTk4LCAweDU1OUUsCisgICAgMHg1NUFFLCAweDU1N0MsIDB4NTU4MywgMHg1NUE5LCAweDU1ODcsIDB4NTVBOCwgMHg1NURBLCAweDU1QzUsCisgICAgMHg1NURGLCAweDU1QzQsIDB4NTVEQywgMHg1NUU0LCAweDU1RDQsIDB4NTYxNCwgMHg1NUY3LCAweDU2MTYsCisgICAgMHg1NUZFLCAweDU1RkQsIDB4NTYxQiwgMHg1NUY5LCAweDU2NEUsIDB4NTY1MCwgMHg3MURGLCAweDU2MzQsCisgICAgMHg1NjM2LCAweDU2MzIsIDB4NTYzOCwgMHg1NjZCLCAweDU2NjQsIDB4NTYyRiwgMHg1NjZDLCAweDU2NkEsCisgICAgMHg1Njg2LCAweDU2ODAsIDB4NTY4QSwgMHg1NkEwLCAweDU2OTQsIDB4NTY4RiwgMHg1NkE1LCAweDU2QUUsCisgICAgMHg1NkI2LCAweDU2QjQsIDB4NTZDMiwgMHg1NkJDLCAweDU2QzEsIDB4NTZDMywgMHg1NkMwLCAweDU2QzgsCisgICAgMHg1NkNFLCAweDU2RDEsIDB4NTZEMywgMHg1NkQ3LCAweDU2RUUsIDB4NTZGOSwgMHg1NzAwLCAweDU2RkYsCisgICAgMHg1NzA0LCAweDU3MDksIDB4NTcwOCwgMHg1NzBCLCAweDU3MEQsIDB4NTcxMywgMHg1NzE4LCAweDU3MTYsCisgICAgMHg1NUM3LCAweDU3MUMsIDB4NTcyNiwgMHg1NzM3LCAweDU3MzgsIDB4NTc0RSwgMHg1NzNCLCAweDU3NDAsCisgICAgMHg1NzRGLCAweDU3NjksIDB4NTdDMCwgMHg1Nzg4LCAweDU3NjEsIDB4NTc3RiwgMHg1Nzg5LCAweDU3OTMsCisgICAgMHg1N0EwLCAweDU3QjMsIDB4NTdBNCwgMHg1N0FBLCAweDU3QjAsIDB4NTdDMywgMHg1N0M2LCAweDU3RDQsCisgICAgMHg1N0QyLCAweDU3RDMsIDB4NTgwQSwgMHg1N0Q2LCAweDU3RTMsIDB4NTgwQiwgMHg1ODE5LCAweDU4MUQsCisgICAgMHg1ODcyLCAweDU4MjEsIDB4NTg2MiwgMHg1ODRCLCAweDU4NzAsIDB4NkJDMCwgMHg1ODUyLCAweDU4M0QsCisgICAgMHg1ODc5LCAweDU4ODUsIDB4NThCOSwgMHg1ODlGLCAweDU4QUIsIDB4NThCQSwgMHg1OERFLCAweDU4QkIsCisgICAgMHg1OEI4LCAweDU4QUUsIDB4NThDNSwgMHg1OEQzLCAweDU4RDEsIDB4NThENywgMHg1OEQ5LCAweDU4RDgsCisgICAgMHg1OEU1LCAweDU4REMsIDB4NThFNCwgMHg1OERGLCAweDU4RUYsIDB4NThGQSwgMHg1OEY5LCAweDU4RkIsCisgICAgMHg1OEZDLCAweDU4RkQsIDB4NTkwMiwgMHg1OTBBLCAweDU5MTAsIDB4NTkxQiwgMHg2OEE2LCAweDU5MjUsCisgICAgMHg1OTJDLCAweDU5MkQsIDB4NTkzMiwgMHg1OTM4LCAweDU5M0UsIDB4N0FEMiwgMHg1OTU1LCAweDU5NTAsCisgICAgMHg1OTRFLCAweDU5NUEsIDB4NTk1OCwgMHg1OTYyLCAweDU5NjAsIDB4NTk2NywgMHg1OTZDLCAweDU5NjksCisgICAgMHg1OTc4LCAweDU5ODEsIDB4NTk5RCwgMHg0RjVFLCAweDRGQUIsIDB4NTlBMywgMHg1OUIyLCAweDU5QzYsCisgICAgMHg1OUU4LCAweDU5REMsIDB4NTk4RCwgMHg1OUQ5LCAweDU5REEsIDB4NUEyNSwgMHg1QTFGLCAweDVBMTEsCisgICAgMHg1QTFDLCAweDVBMDksIDB4NUExQSwgMHg1QTQwLCAweDVBNkMsIDB4NUE0OSwgMHg1QTM1LCAweDVBMzYsCisgICAgMHg1QTYyLCAweDVBNkEsIDB4NUE5QSwgMHg1QUJDLCAweDVBQkUsIDB4NUFDQiwgMHg1QUMyLCAweDVBQkQsCisgICAgMHg1QUUzLCAweDVBRDcsIDB4NUFFNiwgMHg1QUU5LCAweDVBRDYsIDB4NUFGQSwgMHg1QUZCLCAweDVCMEMsCisgICAgMHg1QjBCLCAweDVCMTYsIDB4NUIzMiwgMHg1QUQwLCAweDVCMkEsIDB4NUIzNiwgMHg1QjNFLCAweDVCNDMsCisgICAgMHg1QjQ1LCAweDVCNDAsIDB4NUI1MSwgMHg1QjU1LCAweDVCNUEsIDB4NUI1QiwgMHg1QjY1LCAweDVCNjksCisgICAgMHg1QjcwLCAweDVCNzMsIDB4NUI3NSwgMHg1Qjc4LCAweDY1ODgsIDB4NUI3QSwgMHg1QjgwLCAweDVCODMsCisgICAgMHg1QkE2LCAweDVCQjgsIDB4NUJDMywgMHg1QkM3LCAweDVCQzksIDB4NUJENCwgMHg1QkQwLCAweDVCRTQsCisgICAgMHg1QkU2LCAweDVCRTIsIDB4NUJERSwgMHg1QkU1LCAweDVCRUIsIDB4NUJGMCwgMHg1QkY2LCAweDVCRjMsCisgICAgMHg1QzA1LCAweDVDMDcsIDB4NUMwOCwgMHg1QzBELCAweDVDMTMsIDB4NUMyMCwgMHg1QzIyLCAweDVDMjgsCisgICAgMHg1QzM4LCAweDVDMzksIDB4NUM0MSwgMHg1QzQ2LCAweDVDNEUsIDB4NUM1MywgMHg1QzUwLCAweDVDNEYsCisgICAgMHg1QjcxLCAweDVDNkMsIDB4NUM2RSwgMHg0RTYyLCAweDVDNzYsIDB4NUM3OSwgMHg1QzhDLCAweDVDOTEsCisgICAgMHg1Qzk0LCAweDU5OUIsIDB4NUNBQiwgMHg1Q0JCLCAweDVDQjYsIDB4NUNCQywgMHg1Q0I3LCAweDVDQzUsCisgICAgMHg1Q0JFLCAweDVDQzcsIDB4NUNEOSwgMHg1Q0U5LCAweDVDRkQsIDB4NUNGQSwgMHg1Q0VELCAweDVEOEMsCisgICAgMHg1Q0VBLCAweDVEMEIsIDB4NUQxNSwgMHg1RDE3LCAweDVENUMsIDB4NUQxRiwgMHg1RDFCLCAweDVEMTEsCisgICAgMHg1RDE0LCAweDVEMjIsIDB4NUQxQSwgMHg1RDE5LCAweDVEMTgsIDB4NUQ0QywgMHg1RDUyLCAweDVENEUsCisgICAgMHg1RDRCLCAweDVENkMsIDB4NUQ3MywgMHg1RDc2LCAweDVEODcsIDB4NUQ4NCwgMHg1RDgyLCAweDVEQTIsCisgICAgMHg1RDlELCAweDVEQUMsIDB4NURBRSwgMHg1REJELCAweDVEOTAsIDB4NURCNywgMHg1REJDLCAweDVEQzksCisgICAgMHg1RENELCAweDVERDMsIDB4NUREMiwgMHg1REQ2LCAweDVEREIsIDB4NURFQiwgMHg1REYyLCAweDVERjUsCisgICAgMHg1RTBCLCAweDVFMUEsIDB4NUUxOSwgMHg1RTExLCAweDVFMUIsIDB4NUUzNiwgMHg1RTM3LCAweDVFNDQsCisgICAgMHg1RTQzLCAweDVFNDAsIDB4NUU0RSwgMHg1RTU3LCAweDVFNTQsIDB4NUU1RiwgMHg1RTYyLCAweDVFNjQsCisgICAgMHg1RTQ3LCAweDVFNzUsIDB4NUU3NiwgMHg1RTdBLCAweDlFQkMsIDB4NUU3RiwgMHg1RUEwLCAweDVFQzEsCisgICAgMHg1RUMyLCAweDVFQzgsIDB4NUVEMCwgMHg1RUNGLCAweDVFRDYsIDB4NUVFMywgMHg1RURELCAweDVFREEsCisgICAgMHg1RURCLCAweDVFRTIsIDB4NUVFMSwgMHg1RUU4LCAweDVFRTksIDB4NUVFQywgMHg1RUYxLCAweDVFRjMsCisgICAgMHg1RUYwLCAweDVFRjQsIDB4NUVGOCwgMHg1RUZFLCAweDVGMDMsIDB4NUYwOSwgMHg1RjVELCAweDVGNUMsCisgICAgMHg1RjBCLCAweDVGMTEsIDB4NUYxNiwgMHg1RjI5LCAweDVGMkQsIDB4NUYzOCwgMHg1RjQxLCAweDVGNDgsCisgICAgMHg1RjRDLCAweDVGNEUsIDB4NUYyRiwgMHg1RjUxLCAweDVGNTYsIDB4NUY1NywgMHg1RjU5LCAweDVGNjEsCisgICAgMHg1RjZELCAweDVGNzMsIDB4NUY3NywgMHg1RjgzLCAweDVGODIsIDB4NUY3RiwgMHg1RjhBLCAweDVGODgsCisgICAgMHg1RjkxLCAweDVGODcsIDB4NUY5RSwgMHg1Rjk5LCAweDVGOTgsIDB4NUZBMCwgMHg1RkE4LCAweDVGQUQsCisgICAgMHg1RkJDLCAweDVGRDYsIDB4NUZGQiwgMHg1RkU0LCAweDVGRjgsIDB4NUZGMSwgMHg1RkRELCAweDYwQjMsCisgICAgMHg1RkZGLCAweDYwMjEsIDB4NjA2MCwgMHg2MDE5LCAweDYwMTAsIDB4NjAyOSwgMHg2MDBFLCAweDYwMzEsCisgICAgMHg2MDFCLCAweDYwMTUsIDB4NjAyQiwgMHg2MDI2LCAweDYwMEYsIDB4NjAzQSwgMHg2MDVBLCAweDYwNDEsCisgICAgMHg2MDZBLCAweDYwNzcsIDB4NjA1RiwgMHg2MDRBLCAweDYwNDYsIDB4NjA0RCwgMHg2MDYzLCAweDYwNDMsCisgICAgMHg2MDY0LCAweDYwNDIsIDB4NjA2QywgMHg2MDZCLCAweDYwNTksIDB4NjA4MSwgMHg2MDhELCAweDYwRTcsCisgICAgMHg2MDgzLCAweDYwOUEsIDB4NjA4NCwgMHg2MDlCLCAweDYwOTYsIDB4NjA5NywgMHg2MDkyLCAweDYwQTcsCisgICAgMHg2MDhCLCAweDYwRTEsIDB4NjBCOCwgMHg2MEUwLCAweDYwRDMsIDB4NjBCNCwgMHg1RkYwLCAweDYwQkQsCisgICAgMHg2MEM2LCAweDYwQjUsIDB4NjBEOCwgMHg2MTRELCAweDYxMTUsIDB4NjEwNiwgMHg2MEY2LCAweDYwRjcsCisgICAgMHg2MTAwLCAweDYwRjQsIDB4NjBGQSwgMHg2MTAzLCAweDYxMjEsIDB4NjBGQiwgMHg2MEYxLCAweDYxMEQsCisgICAgMHg2MTBFLCAweDYxNDcsIDB4NjEzRSwgMHg2MTI4LCAweDYxMjcsIDB4NjE0QSwgMHg2MTNGLCAweDYxM0MsCisgICAgMHg2MTJDLCAweDYxMzQsIDB4NjEzRCwgMHg2MTQyLCAweDYxNDQsIDB4NjE3MywgMHg2MTc3LCAweDYxNTgsCisgICAgMHg2MTU5LCAweDYxNUEsIDB4NjE2QiwgMHg2MTc0LCAweDYxNkYsIDB4NjE2NSwgMHg2MTcxLCAweDYxNUYsCisgICAgMHg2MTVELCAweDYxNTMsIDB4NjE3NSwgMHg2MTk5LCAweDYxOTYsIDB4NjE4NywgMHg2MUFDLCAweDYxOTQsCisgICAgMHg2MTlBLCAweDYxOEEsIDB4NjE5MSwgMHg2MUFCLCAweDYxQUUsIDB4NjFDQywgMHg2MUNBLCAweDYxQzksCisgICAgMHg2MUY3LCAweDYxQzgsIDB4NjFDMywgMHg2MUM2LCAweDYxQkEsIDB4NjFDQiwgMHg3Rjc5LCAweDYxQ0QsCisgICAgMHg2MUU2LCAweDYxRTMsIDB4NjFGNiwgMHg2MUZBLCAweDYxRjQsIDB4NjFGRiwgMHg2MUZELCAweDYxRkMsCisgICAgMHg2MUZFLCAweDYyMDAsIDB4NjIwOCwgMHg2MjA5LCAweDYyMEQsIDB4NjIwQywgMHg2MjE0LCAweDYyMUIsCisgICAgMHg2MjFFLCAweDYyMjEsIDB4NjIyQSwgMHg2MjJFLCAweDYyMzAsIDB4NjIzMiwgMHg2MjMzLCAweDYyNDEsCisgICAgMHg2MjRFLCAweDYyNUUsIDB4NjI2MywgMHg2MjVCLCAweDYyNjAsIDB4NjI2OCwgMHg2MjdDLCAweDYyODIsCisgICAgMHg2Mjg5LCAweDYyN0UsIDB4NjI5MiwgMHg2MjkzLCAweDYyOTYsIDB4NjJENCwgMHg2MjgzLCAweDYyOTQsCisgICAgMHg2MkQ3LCAweDYyRDEsIDB4NjJCQiwgMHg2MkNGLCAweDYyRkYsIDB4NjJDNiwgMHg2NEQ0LCAweDYyQzgsCisgICAgMHg2MkRDLCAweDYyQ0MsIDB4NjJDQSwgMHg2MkMyLCAweDYyQzcsIDB4NjI5QiwgMHg2MkM5LCAweDYzMEMsCisgICAgMHg2MkVFLCAweDYyRjEsIDB4NjMyNywgMHg2MzAyLCAweDYzMDgsIDB4NjJFRiwgMHg2MkY1LCAweDYzNTAsCisgICAgMHg2MzNFLCAweDYzNEQsIDB4NjQxQywgMHg2MzRGLCAweDYzOTYsIDB4NjM4RSwgMHg2MzgwLCAweDYzQUIsCisgICAgMHg2Mzc2LCAweDYzQTMsIDB4NjM4RiwgMHg2Mzg5LCAweDYzOUYsIDB4NjNCNSwgMHg2MzZCLCAweDYzNjksCisgICAgMHg2M0JFLCAweDYzRTksIDB4NjNDMCwgMHg2M0M2LCAweDYzRTMsIDB4NjNDOSwgMHg2M0QyLCAweDYzRjYsCisgICAgMHg2M0M0LCAweDY0MTYsIDB4NjQzNCwgMHg2NDA2LCAweDY0MTMsIDB4NjQyNiwgMHg2NDM2LCAweDY1MUQsCisgICAgMHg2NDE3LCAweDY0MjgsIDB4NjQwRiwgMHg2NDY3LCAweDY0NkYsIDB4NjQ3NiwgMHg2NDRFLCAweDY1MkEsCisgICAgMHg2NDk1LCAweDY0OTMsIDB4NjRBNSwgMHg2NEE5LCAweDY0ODgsIDB4NjRCQywgMHg2NERBLCAweDY0RDIsCisgICAgMHg2NEM1LCAweDY0QzcsIDB4NjRCQiwgMHg2NEQ4LCAweDY0QzIsIDB4NjRGMSwgMHg2NEU3LCAweDgyMDksCisgICAgMHg2NEUwLCAweDY0RTEsIDB4NjJBQywgMHg2NEUzLCAweDY0RUYsIDB4NjUyQywgMHg2NEY2LCAweDY0RjQsCisgICAgMHg2NEYyLCAweDY0RkEsIDB4NjUwMCwgMHg2NEZELCAweDY1MTgsIDB4NjUxQywgMHg2NTA1LCAweDY1MjQsCisgICAgMHg2NTIzLCAweDY1MkIsIDB4NjUzNCwgMHg2NTM1LCAweDY1MzcsIDB4NjUzNiwgMHg2NTM4LCAweDc1NEIsCisgICAgMHg2NTQ4LCAweDY1NTYsIDB4NjU1NSwgMHg2NTRELCAweDY1NTgsIDB4NjU1RSwgMHg2NTVELCAweDY1NzIsCisgICAgMHg2NTc4LCAweDY1ODIsIDB4NjU4MywgMHg4QjhBLCAweDY1OUIsIDB4NjU5RiwgMHg2NUFCLCAweDY1QjcsCisgICAgMHg2NUMzLCAweDY1QzYsIDB4NjVDMSwgMHg2NUM0LCAweDY1Q0MsIDB4NjVEMiwgMHg2NURCLCAweDY1RDksCisgICAgMHg2NUUwLCAweDY1RTEsIDB4NjVGMSwgMHg2NzcyLCAweDY2MEEsIDB4NjYwMywgMHg2NUZCLCAweDY3NzMsCisgICAgMHg2NjM1LCAweDY2MzYsIDB4NjYzNCwgMHg2NjFDLCAweDY2NEYsIDB4NjY0NCwgMHg2NjQ5LCAweDY2NDEsCisgICAgMHg2NjVFLCAweDY2NUQsIDB4NjY2NCwgMHg2NjY3LCAweDY2NjgsIDB4NjY1RiwgMHg2NjYyLCAweDY2NzAsCisgICAgMHg2NjgzLCAweDY2ODgsIDB4NjY4RSwgMHg2Njg5LCAweDY2ODQsIDB4NjY5OCwgMHg2NjlELCAweDY2QzEsCisgICAgMHg2NkI5LCAweDY2QzksIDB4NjZCRSwgMHg2NkJDLCAweDY2QzQsIDB4NjZCOCwgMHg2NkQ2LCAweDY2REEsCisgICAgMHg2NkUwLCAweDY2M0YsIDB4NjZFNiwgMHg2NkU5LCAweDY2RjAsIDB4NjZGNSwgMHg2NkY3LCAweDY3MEYsCisgICAgMHg2NzE2LCAweDY3MUUsIDB4NjcyNiwgMHg2NzI3LCAweDk3MzgsIDB4NjcyRSwgMHg2NzNGLCAweDY3MzYsCisgICAgMHg2NzQxLCAweDY3MzgsIDB4NjczNywgMHg2NzQ2LCAweDY3NUUsIDB4Njc2MCwgMHg2NzU5LCAweDY3NjMsCisgICAgMHg2NzY0LCAweDY3ODksIDB4Njc3MCwgMHg2N0E5LCAweDY3N0MsIDB4Njc2QSwgMHg2NzhDLCAweDY3OEIsCisgICAgMHg2N0E2LCAweDY3QTEsIDB4Njc4NSwgMHg2N0I3LCAweDY3RUYsIDB4NjdCNCwgMHg2N0VDLCAweDY3QjMsCisgICAgMHg2N0U5LCAweDY3QjgsIDB4NjdFNCwgMHg2N0RFLCAweDY3REQsIDB4NjdFMiwgMHg2N0VFLCAweDY3QjksCisgICAgMHg2N0NFLCAweDY3QzYsIDB4NjdFNywgMHg2QTlDLCAweDY4MUUsIDB4Njg0NiwgMHg2ODI5LCAweDY4NDAsCisgICAgMHg2ODRELCAweDY4MzIsIDB4Njg0RSwgMHg2OEIzLCAweDY4MkIsIDB4Njg1OSwgMHg2ODYzLCAweDY4NzcsCisgICAgMHg2ODdGLCAweDY4OUYsIDB4Njg4RiwgMHg2OEFELCAweDY4OTQsIDB4Njg5RCwgMHg2ODlCLCAweDY4ODMsCisgICAgMHg2QUFFLCAweDY4QjksIDB4Njg3NCwgMHg2OEI1LCAweDY4QTAsIDB4NjhCQSwgMHg2OTBGLCAweDY4OEQsCisgICAgMHg2ODdFLCAweDY5MDEsIDB4NjhDQSwgMHg2OTA4LCAweDY4RDgsIDB4NjkyMiwgMHg2OTI2LCAweDY4RTEsCisgICAgMHg2OTBDLCAweDY4Q0QsIDB4NjhENCwgMHg2OEU3LCAweDY4RDUsIDB4NjkzNiwgMHg2OTEyLCAweDY5MDQsCisgICAgMHg2OEQ3LCAweDY4RTMsIDB4NjkyNSwgMHg2OEY5LCAweDY4RTAsIDB4NjhFRiwgMHg2OTI4LCAweDY5MkEsCisgICAgMHg2OTFBLCAweDY5MjMsIDB4NjkyMSwgMHg2OEM2LCAweDY5NzksIDB4Njk3NywgMHg2OTVDLCAweDY5NzgsCisgICAgMHg2OTZCLCAweDY5NTQsIDB4Njk3RSwgMHg2OTZFLCAweDY5MzksIDB4Njk3NCwgMHg2OTNELCAweDY5NTksCisgICAgMHg2OTMwLCAweDY5NjEsIDB4Njk1RSwgMHg2OTVELCAweDY5ODEsIDB4Njk2QSwgMHg2OUIyLCAweDY5QUUsCisgICAgMHg2OUQwLCAweDY5QkYsIDB4NjlDMSwgMHg2OUQzLCAweDY5QkUsIDB4NjlDRSwgMHg1QkU4LCAweDY5Q0EsCisgICAgMHg2OURELCAweDY5QkIsIDB4NjlDMywgMHg2OUE3LCAweDZBMkUsIDB4Njk5MSwgMHg2OUEwLCAweDY5OUMsCisgICAgMHg2OTk1LCAweDY5QjQsIDB4NjlERSwgMHg2OUU4LCAweDZBMDIsIDB4NkExQiwgMHg2OUZGLCAweDZCMEEsCisgICAgMHg2OUY5LCAweDY5RjIsIDB4NjlFNywgMHg2QTA1LCAweDY5QjEsIDB4NkExRSwgMHg2OUVELCAweDZBMTQsCisgICAgMHg2OUVCLCAweDZBMEEsIDB4NkExMiwgMHg2QUMxLCAweDZBMjMsIDB4NkExMywgMHg2QTQ0LCAweDZBMEMsCisgICAgMHg2QTcyLCAweDZBMzYsIDB4NkE3OCwgMHg2QTQ3LCAweDZBNjIsIDB4NkE1OSwgMHg2QTY2LCAweDZBNDgsCisgICAgMHg2QTM4LCAweDZBMjIsIDB4NkE5MCwgMHg2QThELCAweDZBQTAsIDB4NkE4NCwgMHg2QUEyLCAweDZBQTMsCisgICAgMHg2QTk3LCAweDg2MTcsIDB4NkFCQiwgMHg2QUMzLCAweDZBQzIsIDB4NkFCOCwgMHg2QUIzLCAweDZBQUMsCisgICAgMHg2QURFLCAweDZBRDEsIDB4NkFERiwgMHg2QUFBLCAweDZBREEsIDB4NkFFQSwgMHg2QUZCLCAweDZCMDUsCisgICAgMHg4NjE2LCAweDZBRkEsIDB4NkIxMiwgMHg2QjE2LCAweDlCMzEsIDB4NkIxRiwgMHg2QjM4LCAweDZCMzcsCisgICAgMHg3NkRDLCAweDZCMzksIDB4OThFRSwgMHg2QjQ3LCAweDZCNDMsIDB4NkI0OSwgMHg2QjUwLCAweDZCNTksCisgICAgMHg2QjU0LCAweDZCNUIsIDB4NkI1RiwgMHg2QjYxLCAweDZCNzgsIDB4NkI3OSwgMHg2QjdGLCAweDZCODAsCisgICAgMHg2Qjg0LCAweDZCODMsIDB4NkI4RCwgMHg2Qjk4LCAweDZCOTUsIDB4NkI5RSwgMHg2QkE0LCAweDZCQUEsCisgICAgMHg2QkFCLCAweDZCQUYsIDB4NkJCMiwgMHg2QkIxLCAweDZCQjMsIDB4NkJCNywgMHg2QkJDLCAweDZCQzYsCisgICAgMHg2QkNCLCAweDZCRDMsIDB4NkJERiwgMHg2QkVDLCAweDZCRUIsIDB4NkJGMywgMHg2QkVGLCAweDlFQkUsCisgICAgMHg2QzA4LCAweDZDMTMsIDB4NkMxNCwgMHg2QzFCLCAweDZDMjQsIDB4NkMyMywgMHg2QzVFLCAweDZDNTUsCisgICAgMHg2QzYyLCAweDZDNkEsIDB4NkM4MiwgMHg2QzhELCAweDZDOUEsIDB4NkM4MSwgMHg2QzlCLCAweDZDN0UsCisgICAgMHg2QzY4LCAweDZDNzMsIDB4NkM5MiwgMHg2QzkwLCAweDZDQzQsIDB4NkNGMSwgMHg2Q0QzLCAweDZDQkQsCisgICAgMHg2Q0Q3LCAweDZDQzUsIDB4NkNERCwgMHg2Q0FFLCAweDZDQjEsIDB4NkNCRSwgMHg2Q0JBLCAweDZDREIsCisgICAgMHg2Q0VGLCAweDZDRDksIDB4NkNFQSwgMHg2RDFGLCAweDg4NEQsIDB4NkQzNiwgMHg2RDJCLCAweDZEM0QsCisgICAgMHg2RDM4LCAweDZEMTksIDB4NkQzNSwgMHg2RDMzLCAweDZEMTIsIDB4NkQwQywgMHg2RDYzLCAweDZEOTMsCisgICAgMHg2RDY0LCAweDZENUEsIDB4NkQ3OSwgMHg2RDU5LCAweDZEOEUsIDB4NkQ5NSwgMHg2RkU0LCAweDZEODUsCisgICAgMHg2REY5LCAweDZFMTUsIDB4NkUwQSwgMHg2REI1LCAweDZEQzcsIDB4NkRFNiwgMHg2REI4LCAweDZEQzYsCisgICAgMHg2REVDLCAweDZEREUsIDB4NkRDQywgMHg2REU4LCAweDZERDIsIDB4NkRDNSwgMHg2REZBLCAweDZERDksCisgICAgMHg2REU0LCAweDZERDUsIDB4NkRFQSwgMHg2REVFLCAweDZFMkQsIDB4NkU2RSwgMHg2RTJFLCAweDZFMTksCisgICAgMHg2RTcyLCAweDZFNUYsIDB4NkUzRSwgMHg2RTIzLCAweDZFNkIsIDB4NkUyQiwgMHg2RTc2LCAweDZFNEQsCisgICAgMHg2RTFGLCAweDZFNDMsIDB4NkUzQSwgMHg2RTRFLCAweDZFMjQsIDB4NkVGRiwgMHg2RTFELCAweDZFMzgsCisgICAgMHg2RTgyLCAweDZFQUEsIDB4NkU5OCwgMHg2RUM5LCAweDZFQjcsIDB4NkVEMywgMHg2RUJELCAweDZFQUYsCisgICAgMHg2RUM0LCAweDZFQjIsIDB4NkVENCwgMHg2RUQ1LCAweDZFOEYsIDB4NkVBNSwgMHg2RUMyLCAweDZFOUYsCisgICAgMHg2RjQxLCAweDZGMTEsIDB4NzA0QywgMHg2RUVDLCAweDZFRjgsIDB4NkVGRSwgMHg2RjNGLCAweDZFRjIsCisgICAgMHg2RjMxLCAweDZFRUYsIDB4NkYzMiwgMHg2RUNDLCAweDZGM0UsIDB4NkYxMywgMHg2RUY3LCAweDZGODYsCisgICAgMHg2RjdBLCAweDZGNzgsIDB4NkY4MSwgMHg2RjgwLCAweDZGNkYsIDB4NkY1QiwgMHg2RkYzLCAweDZGNkQsCisgICAgMHg2RjgyLCAweDZGN0MsIDB4NkY1OCwgMHg2RjhFLCAweDZGOTEsIDB4NkZDMiwgMHg2RjY2LCAweDZGQjMsCisgICAgMHg2RkEzLCAweDZGQTEsIDB4NkZBNCwgMHg2RkI5LCAweDZGQzYsIDB4NkZBQSwgMHg2RkRGLCAweDZGRDUsCisgICAgMHg2RkVDLCAweDZGRDQsIDB4NkZEOCwgMHg2RkYxLCAweDZGRUUsIDB4NkZEQiwgMHg3MDA5LCAweDcwMEIsCisgICAgMHg2RkZBLCAweDcwMTEsIDB4NzAwMSwgMHg3MDBGLCAweDZGRkUsIDB4NzAxQiwgMHg3MDFBLCAweDZGNzQsCisgICAgMHg3MDFELCAweDcwMTgsIDB4NzAxRiwgMHg3MDMwLCAweDcwM0UsIDB4NzAzMiwgMHg3MDUxLCAweDcwNjMsCisgICAgMHg3MDk5LCAweDcwOTIsIDB4NzBBRiwgMHg3MEYxLCAweDcwQUMsIDB4NzBCOCwgMHg3MEIzLCAweDcwQUUsCisgICAgMHg3MERGLCAweDcwQ0IsIDB4NzBERCwgMHg3MEQ5LCAweDcxMDksIDB4NzBGRCwgMHg3MTFDLCAweDcxMTksCisgICAgMHg3MTY1LCAweDcxNTUsIDB4NzE4OCwgMHg3MTY2LCAweDcxNjIsIDB4NzE0QywgMHg3MTU2LCAweDcxNkMsCisgICAgMHg3MThGLCAweDcxRkIsIDB4NzE4NCwgMHg3MTk1LCAweDcxQTgsIDB4NzFBQywgMHg3MUQ3LCAweDcxQjksCisgICAgMHg3MUJFLCAweDcxRDIsIDB4NzFDOSwgMHg3MUQ0LCAweDcxQ0UsIDB4NzFFMCwgMHg3MUVDLCAweDcxRTcsCisgICAgMHg3MUY1LCAweDcxRkMsIDB4NzFGOSwgMHg3MUZGLCAweDcyMEQsIDB4NzIxMCwgMHg3MjFCLCAweDcyMjgsCisgICAgMHg3MjJELCAweDcyMkMsIDB4NzIzMCwgMHg3MjMyLCAweDcyM0IsIDB4NzIzQywgMHg3MjNGLCAweDcyNDAsCisgICAgMHg3MjQ2LCAweDcyNEIsIDB4NzI1OCwgMHg3Mjc0LCAweDcyN0UsIDB4NzI4MiwgMHg3MjgxLCAweDcyODcsCisgICAgMHg3MjkyLCAweDcyOTYsIDB4NzJBMiwgMHg3MkE3LCAweDcyQjksIDB4NzJCMiwgMHg3MkMzLCAweDcyQzYsCisgICAgMHg3MkM0LCAweDcyQ0UsIDB4NzJEMiwgMHg3MkUyLCAweDcyRTAsIDB4NzJFMSwgMHg3MkY5LCAweDcyRjcsCisgICAgMHg1MDBGLCAweDczMTcsIDB4NzMwQSwgMHg3MzFDLCAweDczMTYsIDB4NzMxRCwgMHg3MzM0LCAweDczMkYsCisgICAgMHg3MzI5LCAweDczMjUsIDB4NzMzRSwgMHg3MzRFLCAweDczNEYsIDB4OUVEOCwgMHg3MzU3LCAweDczNkEsCisgICAgMHg3MzY4LCAweDczNzAsIDB4NzM3OCwgMHg3Mzc1LCAweDczN0IsIDB4NzM3QSwgMHg3M0M4LCAweDczQjMsCisgICAgMHg3M0NFLCAweDczQkIsIDB4NzNDMCwgMHg3M0U1LCAweDczRUUsIDB4NzNERSwgMHg3NEEyLCAweDc0MDUsCisgICAgMHg3NDZGLCAweDc0MjUsIDB4NzNGOCwgMHg3NDMyLCAweDc0M0EsIDB4NzQ1NSwgMHg3NDNGLCAweDc0NUYsCisgICAgMHg3NDU5LCAweDc0NDEsIDB4NzQ1QywgMHg3NDY5LCAweDc0NzAsIDB4NzQ2MywgMHg3NDZBLCAweDc0NzYsCisgICAgMHg3NDdFLCAweDc0OEIsIDB4NzQ5RSwgMHg3NEE3LCAweDc0Q0EsIDB4NzRDRiwgMHg3NEQ0LCAweDczRjEsCisgICAgMHg3NEUwLCAweDc0RTMsIDB4NzRFNywgMHg3NEU5LCAweDc0RUUsIDB4NzRGMiwgMHg3NEYwLCAweDc0RjEsCisgICAgMHg3NEY4LCAweDc0RjcsIDB4NzUwNCwgMHg3NTAzLCAweDc1MDUsIDB4NzUwQywgMHg3NTBFLCAweDc1MEQsCisgICAgMHg3NTE1LCAweDc1MTMsIDB4NzUxRSwgMHg3NTI2LCAweDc1MkMsIDB4NzUzQywgMHg3NTQ0LCAweDc1NEQsCisgICAgMHg3NTRBLCAweDc1NDksIDB4NzU1QiwgMHg3NTQ2LCAweDc1NUEsIDB4NzU2OSwgMHg3NTY0LCAweDc1NjcsCisgICAgMHg3NTZCLCAweDc1NkQsIDB4NzU3OCwgMHg3NTc2LCAweDc1ODYsIDB4NzU4NywgMHg3NTc0LCAweDc1OEEsCisgICAgMHg3NTg5LCAweDc1ODIsIDB4NzU5NCwgMHg3NTlBLCAweDc1OUQsIDB4NzVBNSwgMHg3NUEzLCAweDc1QzIsCisgICAgMHg3NUIzLCAweDc1QzMsIDB4NzVCNSwgMHg3NUJELCAweDc1QjgsIDB4NzVCQywgMHg3NUIxLCAweDc1Q0QsCisgICAgMHg3NUNBLCAweDc1RDIsIDB4NzVEOSwgMHg3NUUzLCAweDc1REUsIDB4NzVGRSwgMHg3NUZGLCAweDc1RkMsCisgICAgMHg3NjAxLCAweDc1RjAsIDB4NzVGQSwgMHg3NUYyLCAweDc1RjMsIDB4NzYwQiwgMHg3NjBELCAweDc2MDksCisgICAgMHg3NjFGLCAweDc2MjcsIDB4NzYyMCwgMHg3NjIxLCAweDc2MjIsIDB4NzYyNCwgMHg3NjM0LCAweDc2MzAsCisgICAgMHg3NjNCLCAweDc2NDcsIDB4NzY0OCwgMHg3NjQ2LCAweDc2NUMsIDB4NzY1OCwgMHg3NjYxLCAweDc2NjIsCisgICAgMHg3NjY4LCAweDc2NjksIDB4NzY2QSwgMHg3NjY3LCAweDc2NkMsIDB4NzY3MCwgMHg3NjcyLCAweDc2NzYsCisgICAgMHg3Njc4LCAweDc2N0MsIDB4NzY4MCwgMHg3NjgzLCAweDc2ODgsIDB4NzY4QiwgMHg3NjhFLCAweDc2OTYsCisgICAgMHg3NjkzLCAweDc2OTksIDB4NzY5QSwgMHg3NkIwLCAweDc2QjQsIDB4NzZCOCwgMHg3NkI5LCAweDc2QkEsCisgICAgMHg3NkMyLCAweDc2Q0QsIDB4NzZENiwgMHg3NkQyLCAweDc2REUsIDB4NzZFMSwgMHg3NkU1LCAweDc2RTcsCisgICAgMHg3NkVBLCAweDg2MkYsIDB4NzZGQiwgMHg3NzA4LCAweDc3MDcsIDB4NzcwNCwgMHg3NzI5LCAweDc3MjQsCisgICAgMHg3NzFFLCAweDc3MjUsIDB4NzcyNiwgMHg3NzFCLCAweDc3MzcsIDB4NzczOCwgMHg3NzQ3LCAweDc3NUEsCisgICAgMHg3NzY4LCAweDc3NkIsIDB4Nzc1QiwgMHg3NzY1LCAweDc3N0YsIDB4Nzc3RSwgMHg3Nzc5LCAweDc3OEUsCisgICAgMHg3NzhCLCAweDc3OTEsIDB4NzdBMCwgMHg3NzlFLCAweDc3QjAsIDB4NzdCNiwgMHg3N0I5LCAweDc3QkYsCisgICAgMHg3N0JDLCAweDc3QkQsIDB4NzdCQiwgMHg3N0M3LCAweDc3Q0QsIDB4NzdENywgMHg3N0RBLCAweDc3REMsCisgICAgMHg3N0UzLCAweDc3RUUsIDB4NzdGQywgMHg3ODBDLCAweDc4MTIsIDB4NzkyNiwgMHg3ODIwLCAweDc5MkEsCisgICAgMHg3ODQ1LCAweDc4OEUsIDB4Nzg3NCwgMHg3ODg2LCAweDc4N0MsIDB4Nzg5QSwgMHg3ODhDLCAweDc4QTMsCisgICAgMHg3OEI1LCAweDc4QUEsIDB4NzhBRiwgMHg3OEQxLCAweDc4QzYsIDB4NzhDQiwgMHg3OEQ0LCAweDc4QkUsCisgICAgMHg3OEJDLCAweDc4QzUsIDB4NzhDQSwgMHg3OEVDLCAweDc4RTcsIDB4NzhEQSwgMHg3OEZELCAweDc4RjQsCisgICAgMHg3OTA3LCAweDc5MTIsIDB4NzkxMSwgMHg3OTE5LCAweDc5MkMsIDB4NzkyQiwgMHg3OTQwLCAweDc5NjAsCisgICAgMHg3OTU3LCAweDc5NUYsIDB4Nzk1QSwgMHg3OTU1LCAweDc5NTMsIDB4Nzk3QSwgMHg3OTdGLCAweDc5OEEsCisgICAgMHg3OTlELCAweDc5QTcsIDB4OUY0QiwgMHg3OUFBLCAweDc5QUUsIDB4NzlCMywgMHg3OUI5LCAweDc5QkEsCisgICAgMHg3OUM5LCAweDc5RDUsIDB4NzlFNywgMHg3OUVDLCAweDc5RTEsIDB4NzlFMywgMHg3QTA4LCAweDdBMEQsCisgICAgMHg3QTE4LCAweDdBMTksIDB4N0EyMCwgMHg3QTFGLCAweDc5ODAsIDB4N0EzMSwgMHg3QTNCLCAweDdBM0UsCisgICAgMHg3QTM3LCAweDdBNDMsIDB4N0E1NywgMHg3QTQ5LCAweDdBNjEsIDB4N0E2MiwgMHg3QTY5LCAweDlGOUQsCisgICAgMHg3QTcwLCAweDdBNzksIDB4N0E3RCwgMHg3QTg4LCAweDdBOTcsIDB4N0E5NSwgMHg3QTk4LCAweDdBOTYsCisgICAgMHg3QUE5LCAweDdBQzgsIDB4N0FCMCwgMHg3QUI2LCAweDdBQzUsIDB4N0FDNCwgMHg3QUJGLCAweDkwODMsCisgICAgMHg3QUM3LCAweDdBQ0EsIDB4N0FDRCwgMHg3QUNGLCAweDdBRDUsIDB4N0FEMywgMHg3QUQ5LCAweDdBREEsCisgICAgMHg3QURELCAweDdBRTEsIDB4N0FFMiwgMHg3QUU2LCAweDdBRUQsIDB4N0FGMCwgMHg3QjAyLCAweDdCMEYsCisgICAgMHg3QjBBLCAweDdCMDYsIDB4N0IzMywgMHg3QjE4LCAweDdCMTksIDB4N0IxRSwgMHg3QjM1LCAweDdCMjgsCisgICAgMHg3QjM2LCAweDdCNTAsIDB4N0I3QSwgMHg3QjA0LCAweDdCNEQsIDB4N0IwQiwgMHg3QjRDLCAweDdCNDUsCisgICAgMHg3Qjc1LCAweDdCNjUsIDB4N0I3NCwgMHg3QjY3LCAweDdCNzAsIDB4N0I3MSwgMHg3QjZDLCAweDdCNkUsCisgICAgMHg3QjlELCAweDdCOTgsIDB4N0I5RiwgMHg3QjhELCAweDdCOUMsIDB4N0I5QSwgMHg3QjhCLCAweDdCOTIsCisgICAgMHg3QjhGLCAweDdCNUQsIDB4N0I5OSwgMHg3QkNCLCAweDdCQzEsIDB4N0JDQywgMHg3QkNGLCAweDdCQjQsCisgICAgMHg3QkM2LCAweDdCREQsIDB4N0JFOSwgMHg3QzExLCAweDdDMTQsIDB4N0JFNiwgMHg3QkU1LCAweDdDNjAsCisgICAgMHg3QzAwLCAweDdDMDcsIDB4N0MxMywgMHg3QkYzLCAweDdCRjcsIDB4N0MxNywgMHg3QzBELCAweDdCRjYsCisgICAgMHg3QzIzLCAweDdDMjcsIDB4N0MyQSwgMHg3QzFGLCAweDdDMzcsIDB4N0MyQiwgMHg3QzNELCAweDdDNEMsCisgICAgMHg3QzQzLCAweDdDNTQsIDB4N0M0RiwgMHg3QzQwLCAweDdDNTAsIDB4N0M1OCwgMHg3QzVGLCAweDdDNjQsCisgICAgMHg3QzU2LCAweDdDNjUsIDB4N0M2QywgMHg3Qzc1LCAweDdDODMsIDB4N0M5MCwgMHg3Q0E0LCAweDdDQUQsCisgICAgMHg3Q0EyLCAweDdDQUIsIDB4N0NBMSwgMHg3Q0E4LCAweDdDQjMsIDB4N0NCMiwgMHg3Q0IxLCAweDdDQUUsCisgICAgMHg3Q0I5LCAweDdDQkQsIDB4N0NDMCwgMHg3Q0M1LCAweDdDQzIsIDB4N0NEOCwgMHg3Q0QyLCAweDdDREMsCisgICAgMHg3Q0UyLCAweDlCM0IsIDB4N0NFRiwgMHg3Q0YyLCAweDdDRjQsIDB4N0NGNiwgMHg3Q0ZBLCAweDdEMDYsCisgICAgMHg3RDAyLCAweDdEMUMsIDB4N0QxNSwgMHg3RDBBLCAweDdENDUsIDB4N0Q0QiwgMHg3RDJFLCAweDdEMzIsCisgICAgMHg3RDNGLCAweDdEMzUsIDB4N0Q0NiwgMHg3RDczLCAweDdENTYsIDB4N0Q0RSwgMHg3RDcyLCAweDdENjgsCisgICAgMHg3RDZFLCAweDdENEYsIDB4N0Q2MywgMHg3RDkzLCAweDdEODksIDB4N0Q1QiwgMHg3RDhGLCAweDdEN0QsCisgICAgMHg3RDlCLCAweDdEQkEsIDB4N0RBRSwgMHg3REEzLCAweDdEQjUsIDB4N0RDNywgMHg3REJELCAweDdEQUIsCisgICAgMHg3RTNELCAweDdEQTIsIDB4N0RBRiwgMHg3RERDLCAweDdEQjgsIDB4N0Q5RiwgMHg3REIwLCAweDdERDgsCisgICAgMHg3RERELCAweDdERTQsIDB4N0RERSwgMHg3REZCLCAweDdERjIsIDB4N0RFMSwgMHg3RTA1LCAweDdFMEEsCisgICAgMHg3RTIzLCAweDdFMjEsIDB4N0UxMiwgMHg3RTMxLCAweDdFMUYsIDB4N0UwOSwgMHg3RTBCLCAweDdFMjIsCisgICAgMHg3RTQ2LCAweDdFNjYsIDB4N0UzQiwgMHg3RTM1LCAweDdFMzksIDB4N0U0MywgMHg3RTM3LCAweDdFMzIsCisgICAgMHg3RTNBLCAweDdFNjcsIDB4N0U1RCwgMHg3RTU2LCAweDdFNUUsIDB4N0U1OSwgMHg3RTVBLCAweDdFNzksCisgICAgMHg3RTZBLCAweDdFNjksIDB4N0U3QywgMHg3RTdCLCAweDdFODMsIDB4N0RENSwgMHg3RTdELCAweDhGQUUsCisgICAgMHg3RTdGLCAweDdFODgsIDB4N0U4OSwgMHg3RThDLCAweDdFOTIsIDB4N0U5MCwgMHg3RTkzLCAweDdFOTQsCisgICAgMHg3RTk2LCAweDdFOEUsIDB4N0U5QiwgMHg3RTlDLCAweDdGMzgsIDB4N0YzQSwgMHg3RjQ1LCAweDdGNEMsCisgICAgMHg3RjRELCAweDdGNEUsIDB4N0Y1MCwgMHg3RjUxLCAweDdGNTUsIDB4N0Y1NCwgMHg3RjU4LCAweDdGNUYsCisgICAgMHg3RjYwLCAweDdGNjgsIDB4N0Y2OSwgMHg3RjY3LCAweDdGNzgsIDB4N0Y4MiwgMHg3Rjg2LCAweDdGODMsCisgICAgMHg3Rjg4LCAweDdGODcsIDB4N0Y4QywgMHg3Rjk0LCAweDdGOUUsIDB4N0Y5RCwgMHg3RjlBLCAweDdGQTMsCisgICAgMHg3RkFGLCAweDdGQjIsIDB4N0ZCOSwgMHg3RkFFLCAweDdGQjYsIDB4N0ZCOCwgMHg4QjcxLCAweDdGQzUsCisgICAgMHg3RkM2LCAweDdGQ0EsIDB4N0ZENSwgMHg3RkQ0LCAweDdGRTEsIDB4N0ZFNiwgMHg3RkU5LCAweDdGRjMsCisgICAgMHg3RkY5LCAweDk4REMsIDB4ODAwNiwgMHg4MDA0LCAweDgwMEIsIDB4ODAxMiwgMHg4MDE4LCAweDgwMTksCisgICAgMHg4MDFDLCAweDgwMjEsIDB4ODAyOCwgMHg4MDNGLCAweDgwM0IsIDB4ODA0QSwgMHg4MDQ2LCAweDgwNTIsCisgICAgMHg4MDU4LCAweDgwNUEsIDB4ODA1RiwgMHg4MDYyLCAweDgwNjgsIDB4ODA3MywgMHg4MDcyLCAweDgwNzAsCisgICAgMHg4MDc2LCAweDgwNzksIDB4ODA3RCwgMHg4MDdGLCAweDgwODQsIDB4ODA4NiwgMHg4MDg1LCAweDgwOUIsCisgICAgMHg4MDkzLCAweDgwOUEsIDB4ODBBRCwgMHg1MTkwLCAweDgwQUMsIDB4ODBEQiwgMHg4MEU1LCAweDgwRDksCisgICAgMHg4MERELCAweDgwQzQsIDB4ODBEQSwgMHg4MEQ2LCAweDgxMDksIDB4ODBFRiwgMHg4MEYxLCAweDgxMUIsCisgICAgMHg4MTI5LCAweDgxMjMsIDB4ODEyRiwgMHg4MTRCLCAweDk2OEIsIDB4ODE0NiwgMHg4MTNFLCAweDgxNTMsCisgICAgMHg4MTUxLCAweDgwRkMsIDB4ODE3MSwgMHg4MTZFLCAweDgxNjUsIDB4ODE2NiwgMHg4MTc0LCAweDgxODMsCisgICAgMHg4MTg4LCAweDgxOEEsIDB4ODE4MCwgMHg4MTgyLCAweDgxQTAsIDB4ODE5NSwgMHg4MUE0LCAweDgxQTMsCisgICAgMHg4MTVGLCAweDgxOTMsIDB4ODFBOSwgMHg4MUIwLCAweDgxQjUsIDB4ODFCRSwgMHg4MUI4LCAweDgxQkQsCisgICAgMHg4MUMwLCAweDgxQzIsIDB4ODFCQSwgMHg4MUM5LCAweDgxQ0QsIDB4ODFEMSwgMHg4MUQ5LCAweDgxRDgsCisgICAgMHg4MUM4LCAweDgxREEsIDB4ODFERiwgMHg4MUUwLCAweDgxRTcsIDB4ODFGQSwgMHg4MUZCLCAweDgxRkUsCisgICAgMHg4MjAxLCAweDgyMDIsIDB4ODIwNSwgMHg4MjA3LCAweDgyMEEsIDB4ODIwRCwgMHg4MjEwLCAweDgyMTYsCisgICAgMHg4MjI5LCAweDgyMkIsIDB4ODIzOCwgMHg4MjMzLCAweDgyNDAsIDB4ODI1OSwgMHg4MjU4LCAweDgyNUQsCisgICAgMHg4MjVBLCAweDgyNUYsIDB4ODI2NCwgMHg4MjYyLCAweDgyNjgsIDB4ODI2QSwgMHg4MjZCLCAweDgyMkUsCisgICAgMHg4MjcxLCAweDgyNzcsIDB4ODI3OCwgMHg4MjdFLCAweDgyOEQsIDB4ODI5MiwgMHg4MkFCLCAweDgyOUYsCisgICAgMHg4MkJCLCAweDgyQUMsIDB4ODJFMSwgMHg4MkUzLCAweDgyREYsIDB4ODJEMiwgMHg4MkY0LCAweDgyRjMsCisgICAgMHg4MkZBLCAweDgzOTMsIDB4ODMwMywgMHg4MkZCLCAweDgyRjksIDB4ODJERSwgMHg4MzA2LCAweDgyREMsCisgICAgMHg4MzA5LCAweDgyRDksIDB4ODMzNSwgMHg4MzM0LCAweDgzMTYsIDB4ODMzMiwgMHg4MzMxLCAweDgzNDAsCisgICAgMHg4MzM5LCAweDgzNTAsIDB4ODM0NSwgMHg4MzJGLCAweDgzMkIsIDB4ODMxNywgMHg4MzE4LCAweDgzODUsCisgICAgMHg4MzlBLCAweDgzQUEsIDB4ODM5RiwgMHg4M0EyLCAweDgzOTYsIDB4ODMyMywgMHg4MzhFLCAweDgzODcsCisgICAgMHg4MzhBLCAweDgzN0MsIDB4ODNCNSwgMHg4MzczLCAweDgzNzUsIDB4ODNBMCwgMHg4Mzg5LCAweDgzQTgsCisgICAgMHg4M0Y0LCAweDg0MTMsIDB4ODNFQiwgMHg4M0NFLCAweDgzRkQsIDB4ODQwMywgMHg4M0Q4LCAweDg0MEIsCisgICAgMHg4M0MxLCAweDgzRjcsIDB4ODQwNywgMHg4M0UwLCAweDgzRjIsIDB4ODQwRCwgMHg4NDIyLCAweDg0MjAsCisgICAgMHg4M0JELCAweDg0MzgsIDB4ODUwNiwgMHg4M0ZCLCAweDg0NkQsIDB4ODQyQSwgMHg4NDNDLCAweDg1NUEsCisgICAgMHg4NDg0LCAweDg0NzcsIDB4ODQ2QiwgMHg4NEFELCAweDg0NkUsIDB4ODQ4MiwgMHg4NDY5LCAweDg0NDYsCisgICAgMHg4NDJDLCAweDg0NkYsIDB4ODQ3OSwgMHg4NDM1LCAweDg0Q0EsIDB4ODQ2MiwgMHg4NEI5LCAweDg0QkYsCisgICAgMHg4NDlGLCAweDg0RDksIDB4ODRDRCwgMHg4NEJCLCAweDg0REEsIDB4ODREMCwgMHg4NEMxLCAweDg0QzYsCisgICAgMHg4NEQ2LCAweDg0QTEsIDB4ODUyMSwgMHg4NEZGLCAweDg0RjQsIDB4ODUxNywgMHg4NTE4LCAweDg1MkMsCisgICAgMHg4NTFGLCAweDg1MTUsIDB4ODUxNCwgMHg4NEZDLCAweDg1NDAsIDB4ODU2MywgMHg4NTU4LCAweDg1NDgsCisgICAgMHg4NTQxLCAweDg2MDIsIDB4ODU0QiwgMHg4NTU1LCAweDg1ODAsIDB4ODVBNCwgMHg4NTg4LCAweDg1OTEsCisgICAgMHg4NThBLCAweDg1QTgsIDB4ODU2RCwgMHg4NTk0LCAweDg1OUIsIDB4ODVFQSwgMHg4NTg3LCAweDg1OUMsCisgICAgMHg4NTc3LCAweDg1N0UsIDB4ODU5MCwgMHg4NUM5LCAweDg1QkEsIDB4ODVDRiwgMHg4NUI5LCAweDg1RDAsCisgICAgMHg4NUQ1LCAweDg1REQsIDB4ODVFNSwgMHg4NURDLCAweDg1RjksIDB4ODYwQSwgMHg4NjEzLCAweDg2MEIsCisgICAgMHg4NUZFLCAweDg1RkEsIDB4ODYwNiwgMHg4NjIyLCAweDg2MUEsIDB4ODYzMCwgMHg4NjNGLCAweDg2NEQsCisgICAgMHg0RTU1LCAweDg2NTQsIDB4ODY1RiwgMHg4NjY3LCAweDg2NzEsIDB4ODY5MywgMHg4NkEzLCAweDg2QTksCisgICAgMHg4NkFBLCAweDg2OEIsIDB4ODY4QywgMHg4NkI2LCAweDg2QUYsIDB4ODZDNCwgMHg4NkM2LCAweDg2QjAsCisgICAgMHg4NkM5LCAweDg4MjMsIDB4ODZBQiwgMHg4NkQ0LCAweDg2REUsIDB4ODZFOSwgMHg4NkVDLCAweDg2REYsCisgICAgMHg4NkRCLCAweDg2RUYsIDB4ODcxMiwgMHg4NzA2LCAweDg3MDgsIDB4ODcwMCwgMHg4NzAzLCAweDg2RkIsCisgICAgMHg4NzExLCAweDg3MDksIDB4ODcwRCwgMHg4NkY5LCAweDg3MEEsIDB4ODczNCwgMHg4NzNGLCAweDg3MzcsCisgICAgMHg4NzNCLCAweDg3MjUsIDB4ODcyOSwgMHg4NzFBLCAweDg3NjAsIDB4ODc1RiwgMHg4Nzc4LCAweDg3NEMsCisgICAgMHg4NzRFLCAweDg3NzQsIDB4ODc1NywgMHg4NzY4LCAweDg3NkUsIDB4ODc1OSwgMHg4NzUzLCAweDg3NjMsCisgICAgMHg4NzZBLCAweDg4MDUsIDB4ODdBMiwgMHg4NzlGLCAweDg3ODIsIDB4ODdBRiwgMHg4N0NCLCAweDg3QkQsCisgICAgMHg4N0MwLCAweDg3RDAsIDB4OTZENiwgMHg4N0FCLCAweDg3QzQsIDB4ODdCMywgMHg4N0M3LCAweDg3QzYsCisgICAgMHg4N0JCLCAweDg3RUYsIDB4ODdGMiwgMHg4N0UwLCAweDg4MEYsIDB4ODgwRCwgMHg4N0ZFLCAweDg3RjYsCisgICAgMHg4N0Y3LCAweDg4MEUsIDB4ODdEMiwgMHg4ODExLCAweDg4MTYsIDB4ODgxNSwgMHg4ODIyLCAweDg4MjEsCisgICAgMHg4ODMxLCAweDg4MzYsIDB4ODgzOSwgMHg4ODI3LCAweDg4M0IsIDB4ODg0NCwgMHg4ODQyLCAweDg4NTIsCisgICAgMHg4ODU5LCAweDg4NUUsIDB4ODg2MiwgMHg4ODZCLCAweDg4ODEsIDB4ODg3RSwgMHg4ODlFLCAweDg4NzUsCisgICAgMHg4ODdELCAweDg4QjUsIDB4ODg3MiwgMHg4ODgyLCAweDg4OTcsIDB4ODg5MiwgMHg4OEFFLCAweDg4OTksCisgICAgMHg4OEEyLCAweDg4OEQsIDB4ODhBNCwgMHg4OEIwLCAweDg4QkYsIDB4ODhCMSwgMHg4OEMzLCAweDg4QzQsCisgICAgMHg4OEQ0LCAweDg4RDgsIDB4ODhEOSwgMHg4OERELCAweDg4RjksIDB4ODkwMiwgMHg4OEZDLCAweDg4RjQsCisgICAgMHg4OEU4LCAweDg4RjIsIDB4ODkwNCwgMHg4OTBDLCAweDg5MEEsIDB4ODkxMywgMHg4OTQzLCAweDg5MUUsCisgICAgMHg4OTI1LCAweDg5MkEsIDB4ODkyQiwgMHg4OTQxLCAweDg5NDQsIDB4ODkzQiwgMHg4OTM2LCAweDg5MzgsCisgICAgMHg4OTRDLCAweDg5MUQsIDB4ODk2MCwgMHg4OTVFLCAweDg5NjYsIDB4ODk2NCwgMHg4OTZELCAweDg5NkEsCisgICAgMHg4OTZGLCAweDg5NzQsIDB4ODk3NywgMHg4OTdFLCAweDg5ODMsIDB4ODk4OCwgMHg4OThBLCAweDg5OTMsCisgICAgMHg4OTk4LCAweDg5QTEsIDB4ODlBOSwgMHg4OUE2LCAweDg5QUMsIDB4ODlBRiwgMHg4OUIyLCAweDg5QkEsCisgICAgMHg4OUJELCAweDg5QkYsIDB4ODlDMCwgMHg4OURBLCAweDg5REMsIDB4ODlERCwgMHg4OUU3LCAweDg5RjQsCisgICAgMHg4OUY4LCAweDhBMDMsIDB4OEExNiwgMHg4QTEwLCAweDhBMEMsIDB4OEExQiwgMHg4QTFELCAweDhBMjUsCisgICAgMHg4QTM2LCAweDhBNDEsIDB4OEE1QiwgMHg4QTUyLCAweDhBNDYsIDB4OEE0OCwgMHg4QTdDLCAweDhBNkQsCisgICAgMHg4QTZDLCAweDhBNjIsIDB4OEE4NSwgMHg4QTgyLCAweDhBODQsIDB4OEFBOCwgMHg4QUExLCAweDhBOTEsCisgICAgMHg4QUE1LCAweDhBQTYsIDB4OEE5QSwgMHg4QUEzLCAweDhBQzQsIDB4OEFDRCwgMHg4QUMyLCAweDhBREEsCisgICAgMHg4QUVCLCAweDhBRjMsIDB4OEFFNywgMHg4QUU0LCAweDhBRjEsIDB4OEIxNCwgMHg4QUUwLCAweDhBRTIsCisgICAgMHg4QUY3LCAweDhBREUsIDB4OEFEQiwgMHg4QjBDLCAweDhCMDcsIDB4OEIxQSwgMHg4QUUxLCAweDhCMTYsCisgICAgMHg4QjEwLCAweDhCMTcsIDB4OEIyMCwgMHg4QjMzLCAweDk3QUIsIDB4OEIyNiwgMHg4QjJCLCAweDhCM0UsCisgICAgMHg4QjI4LCAweDhCNDEsIDB4OEI0QywgMHg4QjRGLCAweDhCNEUsIDB4OEI0OSwgMHg4QjU2LCAweDhCNUIsCisgICAgMHg4QjVBLCAweDhCNkIsIDB4OEI1RiwgMHg4QjZDLCAweDhCNkYsIDB4OEI3NCwgMHg4QjdELCAweDhCODAsCisgICAgMHg4QjhDLCAweDhCOEUsIDB4OEI5MiwgMHg4QjkzLCAweDhCOTYsIDB4OEI5OSwgMHg4QjlBLCAweDhDM0EsCisgICAgMHg4QzQxLCAweDhDM0YsIDB4OEM0OCwgMHg4QzRDLCAweDhDNEUsIDB4OEM1MCwgMHg4QzU1LCAweDhDNjIsCisgICAgMHg4QzZDLCAweDhDNzgsIDB4OEM3QSwgMHg4QzgyLCAweDhDODksIDB4OEM4NSwgMHg4QzhBLCAweDhDOEQsCisgICAgMHg4QzhFLCAweDhDOTQsIDB4OEM3QywgMHg4Qzk4LCAweDYyMUQsIDB4OENBRCwgMHg4Q0FBLCAweDhDQkQsCisgICAgMHg4Q0IyLCAweDhDQjMsIDB4OENBRSwgMHg4Q0I2LCAweDhDQzgsIDB4OENDMSwgMHg4Q0U0LCAweDhDRTMsCisgICAgMHg4Q0RBLCAweDhDRkQsIDB4OENGQSwgMHg4Q0ZCLCAweDhEMDQsIDB4OEQwNSwgMHg4RDBBLCAweDhEMDcsCisgICAgMHg4RDBGLCAweDhEMEQsIDB4OEQxMCwgMHg5RjRFLCAweDhEMTMsIDB4OENDRCwgMHg4RDE0LCAweDhEMTYsCisgICAgMHg4RDY3LCAweDhENkQsIDB4OEQ3MSwgMHg4RDczLCAweDhEODEsIDB4OEQ5OSwgMHg4REMyLCAweDhEQkUsCisgICAgMHg4REJBLCAweDhEQ0YsIDB4OEREQSwgMHg4REQ2LCAweDhEQ0MsIDB4OEREQiwgMHg4RENCLCAweDhERUEsCisgICAgMHg4REVCLCAweDhEREYsIDB4OERFMywgMHg4REZDLCAweDhFMDgsIDB4OEUwOSwgMHg4REZGLCAweDhFMUQsCisgICAgMHg4RTFFLCAweDhFMTAsIDB4OEUxRiwgMHg4RTQyLCAweDhFMzUsIDB4OEUzMCwgMHg4RTM0LCAweDhFNEEsCisgICAgMHg4RTQ3LCAweDhFNDksIDB4OEU0QywgMHg4RTUwLCAweDhFNDgsIDB4OEU1OSwgMHg4RTY0LCAweDhFNjAsCisgICAgMHg4RTJBLCAweDhFNjMsIDB4OEU1NSwgMHg4RTc2LCAweDhFNzIsIDB4OEU3QywgMHg4RTgxLCAweDhFODcsCisgICAgMHg4RTg1LCAweDhFODQsIDB4OEU4QiwgMHg4RThBLCAweDhFOTMsIDB4OEU5MSwgMHg4RTk0LCAweDhFOTksCisgICAgMHg4RUFBLCAweDhFQTEsIDB4OEVBQywgMHg4RUIwLCAweDhFQzYsIDB4OEVCMSwgMHg4RUJFLCAweDhFQzUsCisgICAgMHg4RUM4LCAweDhFQ0IsIDB4OEVEQiwgMHg4RUUzLCAweDhFRkMsIDB4OEVGQiwgMHg4RUVCLCAweDhFRkUsCisgICAgMHg4RjBBLCAweDhGMDUsIDB4OEYxNSwgMHg4RjEyLCAweDhGMTksIDB4OEYxMywgMHg4RjFDLCAweDhGMUYsCisgICAgMHg4RjFCLCAweDhGMEMsIDB4OEYyNiwgMHg4RjMzLCAweDhGM0IsIDB4OEYzOSwgMHg4RjQ1LCAweDhGNDIsCisgICAgMHg4RjNFLCAweDhGNEMsIDB4OEY0OSwgMHg4RjQ2LCAweDhGNEUsIDB4OEY1NywgMHg4RjVDLCAweDhGNjIsCisgICAgMHg4RjYzLCAweDhGNjQsIDB4OEY5QywgMHg4RjlGLCAweDhGQTMsIDB4OEZBRCwgMHg4RkFGLCAweDhGQjcsCisgICAgMHg4RkRBLCAweDhGRTUsIDB4OEZFMiwgMHg4RkVBLCAweDhGRUYsIDB4OTA4NywgMHg4RkY0LCAweDkwMDUsCisgICAgMHg4RkY5LCAweDhGRkEsIDB4OTAxMSwgMHg5MDE1LCAweDkwMjEsIDB4OTAwRCwgMHg5MDFFLCAweDkwMTYsCisgICAgMHg5MDBCLCAweDkwMjcsIDB4OTAzNiwgMHg5MDM1LCAweDkwMzksIDB4OEZGOCwgMHg5MDRGLCAweDkwNTAsCisgICAgMHg5MDUxLCAweDkwNTIsIDB4OTAwRSwgMHg5MDQ5LCAweDkwM0UsIDB4OTA1NiwgMHg5MDU4LCAweDkwNUUsCisgICAgMHg5MDY4LCAweDkwNkYsIDB4OTA3NiwgMHg5NkE4LCAweDkwNzIsIDB4OTA4MiwgMHg5MDdELCAweDkwODEsCisgICAgMHg5MDgwLCAweDkwOEEsIDB4OTA4OSwgMHg5MDhGLCAweDkwQTgsIDB4OTBBRiwgMHg5MEIxLCAweDkwQjUsCisgICAgMHg5MEUyLCAweDkwRTQsIDB4NjI0OCwgMHg5MERCLCAweDkxMDIsIDB4OTExMiwgMHg5MTE5LCAweDkxMzIsCisgICAgMHg5MTMwLCAweDkxNEEsIDB4OTE1NiwgMHg5MTU4LCAweDkxNjMsIDB4OTE2NSwgMHg5MTY5LCAweDkxNzMsCisgICAgMHg5MTcyLCAweDkxOEIsIDB4OTE4OSwgMHg5MTgyLCAweDkxQTIsIDB4OTFBQiwgMHg5MUFGLCAweDkxQUEsCisgICAgMHg5MUI1LCAweDkxQjQsIDB4OTFCQSwgMHg5MUMwLCAweDkxQzEsIDB4OTFDOSwgMHg5MUNCLCAweDkxRDAsCisgICAgMHg5MUQ2LCAweDkxREYsIDB4OTFFMSwgMHg5MURCLCAweDkxRkMsIDB4OTFGNSwgMHg5MUY2LCAweDkyMUUsCisgICAgMHg5MUZGLCAweDkyMTQsIDB4OTIyQywgMHg5MjE1LCAweDkyMTEsIDB4OTI1RSwgMHg5MjU3LCAweDkyNDUsCisgICAgMHg5MjQ5LCAweDkyNjQsIDB4OTI0OCwgMHg5Mjk1LCAweDkyM0YsIDB4OTI0QiwgMHg5MjUwLCAweDkyOUMsCisgICAgMHg5Mjk2LCAweDkyOTMsIDB4OTI5QiwgMHg5MjVBLCAweDkyQ0YsIDB4OTJCOSwgMHg5MkI3LCAweDkyRTksCisgICAgMHg5MzBGLCAweDkyRkEsIDB4OTM0NCwgMHg5MzJFLCAweDkzMTksIDB4OTMyMiwgMHg5MzFBLCAweDkzMjMsCisgICAgMHg5MzNBLCAweDkzMzUsIDB4OTMzQiwgMHg5MzVDLCAweDkzNjAsIDB4OTM3QywgMHg5MzZFLCAweDkzNTYsCisgICAgMHg5M0IwLCAweDkzQUMsIDB4OTNBRCwgMHg5Mzk0LCAweDkzQjksIDB4OTNENiwgMHg5M0Q3LCAweDkzRTgsCisgICAgMHg5M0U1LCAweDkzRDgsIDB4OTNDMywgMHg5M0RELCAweDkzRDAsIDB4OTNDOCwgMHg5M0U0LCAweDk0MUEsCisgICAgMHg5NDE0LCAweDk0MTMsIDB4OTQwMywgMHg5NDA3LCAweDk0MTAsIDB4OTQzNiwgMHg5NDJCLCAweDk0MzUsCisgICAgMHg5NDIxLCAweDk0M0EsIDB4OTQ0MSwgMHg5NDUyLCAweDk0NDQsIDB4OTQ1QiwgMHg5NDYwLCAweDk0NjIsCisgICAgMHg5NDVFLCAweDk0NkEsIDB4OTIyOSwgMHg5NDcwLCAweDk0NzUsIDB4OTQ3NywgMHg5NDdELCAweDk0NUEsCisgICAgMHg5NDdDLCAweDk0N0UsIDB4OTQ4MSwgMHg5NDdGLCAweDk1ODIsIDB4OTU4NywgMHg5NThBLCAweDk1OTQsCisgICAgMHg5NTk2LCAweDk1OTgsIDB4OTU5OSwgMHg5NUEwLCAweDk1QTgsIDB4OTVBNywgMHg5NUFELCAweDk1QkMsCisgICAgMHg5NUJCLCAweDk1QjksIDB4OTVCRSwgMHg5NUNBLCAweDZGRjYsIDB4OTVDMywgMHg5NUNELCAweDk1Q0MsCisgICAgMHg5NUQ1LCAweDk1RDQsIDB4OTVENiwgMHg5NURDLCAweDk1RTEsIDB4OTVFNSwgMHg5NUUyLCAweDk2MjEsCisgICAgMHg5NjI4LCAweDk2MkUsIDB4OTYyRiwgMHg5NjQyLCAweDk2NEMsIDB4OTY0RiwgMHg5NjRCLCAweDk2NzcsCisgICAgMHg5NjVDLCAweDk2NUUsIDB4OTY1RCwgMHg5NjVGLCAweDk2NjYsIDB4OTY3MiwgMHg5NjZDLCAweDk2OEQsCisgICAgMHg5Njk4LCAweDk2OTUsIDB4OTY5NywgMHg5NkFBLCAweDk2QTcsIDB4OTZCMSwgMHg5NkIyLCAweDk2QjAsCisgICAgMHg5NkI0LCAweDk2QjYsIDB4OTZCOCwgMHg5NkI5LCAweDk2Q0UsIDB4OTZDQiwgMHg5NkM5LCAweDk2Q0QsCisgICAgMHg4OTRELCAweDk2REMsIDB4OTcwRCwgMHg5NkQ1LCAweDk2RjksIDB4OTcwNCwgMHg5NzA2LCAweDk3MDgsCisgICAgMHg5NzEzLCAweDk3MEUsIDB4OTcxMSwgMHg5NzBGLCAweDk3MTYsIDB4OTcxOSwgMHg5NzI0LCAweDk3MkEsCisgICAgMHg5NzMwLCAweDk3MzksIDB4OTczRCwgMHg5NzNFLCAweDk3NDQsIDB4OTc0NiwgMHg5NzQ4LCAweDk3NDIsCisgICAgMHg5NzQ5LCAweDk3NUMsIDB4OTc2MCwgMHg5NzY0LCAweDk3NjYsIDB4OTc2OCwgMHg1MkQyLCAweDk3NkIsCisgICAgMHg5NzcxLCAweDk3NzksIDB4OTc4NSwgMHg5NzdDLCAweDk3ODEsIDB4OTc3QSwgMHg5Nzg2LCAweDk3OEIsCisgICAgMHg5NzhGLCAweDk3OTAsIDB4OTc5QywgMHg5N0E4LCAweDk3QTYsIDB4OTdBMywgMHg5N0IzLCAweDk3QjQsCisgICAgMHg5N0MzLCAweDk3QzYsIDB4OTdDOCwgMHg5N0NCLCAweDk3REMsIDB4OTdFRCwgMHg5RjRGLCAweDk3RjIsCisgICAgMHg3QURGLCAweDk3RjYsIDB4OTdGNSwgMHg5ODBGLCAweDk4MEMsIDB4OTgzOCwgMHg5ODI0LCAweDk4MjEsCisgICAgMHg5ODM3LCAweDk4M0QsIDB4OTg0NiwgMHg5ODRGLCAweDk4NEIsIDB4OTg2QiwgMHg5ODZGLCAweDk4NzAsCisgICAgMHg5ODcxLCAweDk4NzQsIDB4OTg3MywgMHg5OEFBLCAweDk4QUYsIDB4OThCMSwgMHg5OEI2LCAweDk4QzQsCisgICAgMHg5OEMzLCAweDk4QzYsIDB4OThFOSwgMHg5OEVCLCAweDk5MDMsIDB4OTkwOSwgMHg5OTEyLCAweDk5MTQsCisgICAgMHg5OTE4LCAweDk5MjEsIDB4OTkxRCwgMHg5OTFFLCAweDk5MjQsIDB4OTkyMCwgMHg5OTJDLCAweDk5MkUsCisgICAgMHg5OTNELCAweDk5M0UsIDB4OTk0MiwgMHg5OTQ5LCAweDk5NDUsIDB4OTk1MCwgMHg5OTRCLCAweDk5NTEsCisgICAgMHg5OTUyLCAweDk5NEMsIDB4OTk1NSwgMHg5OTk3LCAweDk5OTgsIDB4OTlBNSwgMHg5OUFELCAweDk5QUUsCisgICAgMHg5OUJDLCAweDk5REYsIDB4OTlEQiwgMHg5OURELCAweDk5RDgsIDB4OTlEMSwgMHg5OUVELCAweDk5RUUsCisgICAgMHg5OUYxLCAweDk5RjIsIDB4OTlGQiwgMHg5OUY4LCAweDlBMDEsIDB4OUEwRiwgMHg5QTA1LCAweDk5RTIsCisgICAgMHg5QTE5LCAweDlBMkIsIDB4OUEzNywgMHg5QTQ1LCAweDlBNDIsIDB4OUE0MCwgMHg5QTQzLCAweDlBM0UsCisgICAgMHg5QTU1LCAweDlBNEQsIDB4OUE1QiwgMHg5QTU3LCAweDlBNUYsIDB4OUE2MiwgMHg5QTY1LCAweDlBNjQsCisgICAgMHg5QTY5LCAweDlBNkIsIDB4OUE2QSwgMHg5QUFELCAweDlBQjAsIDB4OUFCQywgMHg5QUMwLCAweDlBQ0YsCisgICAgMHg5QUQxLCAweDlBRDMsIDB4OUFENCwgMHg5QURFLCAweDlBREYsIDB4OUFFMiwgMHg5QUUzLCAweDlBRTYsCisgICAgMHg5QUVGLCAweDlBRUIsIDB4OUFFRSwgMHg5QUY0LCAweDlBRjEsIDB4OUFGNywgMHg5QUZCLCAweDlCMDYsCisgICAgMHg5QjE4LCAweDlCMUEsIDB4OUIxRiwgMHg5QjIyLCAweDlCMjMsIDB4OUIyNSwgMHg5QjI3LCAweDlCMjgsCisgICAgMHg5QjI5LCAweDlCMkEsIDB4OUIyRSwgMHg5QjJGLCAweDlCMzIsIDB4OUI0NCwgMHg5QjQzLCAweDlCNEYsCisgICAgMHg5QjRELCAweDlCNEUsIDB4OUI1MSwgMHg5QjU4LCAweDlCNzQsIDB4OUI5MywgMHg5QjgzLCAweDlCOTEsCisgICAgMHg5Qjk2LCAweDlCOTcsIDB4OUI5RiwgMHg5QkEwLCAweDlCQTgsIDB4OUJCNCwgMHg5QkMwLCAweDlCQ0EsCisgICAgMHg5QkI5LCAweDlCQzYsIDB4OUJDRiwgMHg5QkQxLCAweDlCRDIsIDB4OUJFMywgMHg5QkUyLCAweDlCRTQsCisgICAgMHg5QkQ0LCAweDlCRTEsIDB4OUMzQSwgMHg5QkYyLCAweDlCRjEsIDB4OUJGMCwgMHg5QzE1LCAweDlDMTQsCisgICAgMHg5QzA5LCAweDlDMTMsIDB4OUMwQywgMHg5QzA2LCAweDlDMDgsIDB4OUMxMiwgMHg5QzBBLCAweDlDMDQsCisgICAgMHg5QzJFLCAweDlDMUIsIDB4OUMyNSwgMHg5QzI0LCAweDlDMjEsIDB4OUMzMCwgMHg5QzQ3LCAweDlDMzIsCisgICAgMHg5QzQ2LCAweDlDM0UsIDB4OUM1QSwgMHg5QzYwLCAweDlDNjcsIDB4OUM3NiwgMHg5Qzc4LCAweDlDRTcsCisgICAgMHg5Q0VDLCAweDlDRjAsIDB4OUQwOSwgMHg5RDA4LCAweDlDRUIsIDB4OUQwMywgMHg5RDA2LCAweDlEMkEsCisgICAgMHg5RDI2LCAweDlEQUYsIDB4OUQyMywgMHg5RDFGLCAweDlENDQsIDB4OUQxNSwgMHg5RDEyLCAweDlENDEsCisgICAgMHg5RDNGLCAweDlEM0UsIDB4OUQ0NiwgMHg5RDQ4LCAweDlENUQsIDB4OUQ1RSwgMHg5RDY0LCAweDlENTEsCisgICAgMHg5RDUwLCAweDlENTksIDB4OUQ3MiwgMHg5RDg5LCAweDlEODcsIDB4OURBQiwgMHg5RDZGLCAweDlEN0EsCisgICAgMHg5RDlBLCAweDlEQTQsIDB4OURBOSwgMHg5REIyLCAweDlEQzQsIDB4OURDMSwgMHg5REJCLCAweDlEQjgsCisgICAgMHg5REJBLCAweDlEQzYsIDB4OURDRiwgMHg5REMyLCAweDlERDksIDB4OUREMywgMHg5REY4LCAweDlERTYsCisgICAgMHg5REVELCAweDlERUYsIDB4OURGRCwgMHg5RTFBLCAweDlFMUIsIDB4OUUxRSwgMHg5RTc1LCAweDlFNzksCisgICAgMHg5RTdELCAweDlFODEsIDB4OUU4OCwgMHg5RThCLCAweDlFOEMsIDB4OUU5MiwgMHg5RTk1LCAweDlFOTEsCisgICAgMHg5RTlELCAweDlFQTUsIDB4OUVBOSwgMHg5RUI4LCAweDlFQUEsIDB4OUVBRCwgMHg5NzYxLCAweDlFQ0MsCisgICAgMHg5RUNFLCAweDlFQ0YsIDB4OUVEMCwgMHg5RUQ0LCAweDlFREMsIDB4OUVERSwgMHg5RURELCAweDlFRTAsCisgICAgMHg5RUU1LCAweDlFRTgsIDB4OUVFRiwgMHg5RUY0LCAweDlFRjYsIDB4OUVGNywgMHg5RUY5LCAweDlFRkIsCisgICAgMHg5RUZDLCAweDlFRkQsIDB4OUYwNywgMHg5RjA4LCAweDc2QjcsIDB4OUYxNSwgMHg5RjIxLCAweDlGMkMsCisgICAgMHg5RjNFLCAweDlGNEEsIDB4OUY1MiwgMHg5RjU0LCAweDlGNjMsIDB4OUY1RiwgMHg5RjYwLCAweDlGNjEsCisgICAgMHg5RjY2LCAweDlGNjcsIDB4OUY2QywgMHg5RjZBLCAweDlGNzcsIDB4OUY3MiwgMHg5Rjc2LCAweDlGOTUsCisgICAgMHg5RjlDLCAweDlGQTAsIDB4NTgyRiwgMHg2OUM3LCAweDkwNTksIDB4NzQ2NCwgMHgyNjQyLCAweDI1MDAsCisgICAgMHgyNTAxLCAweDI1MDIsIDB4MjUwMywgMHgyNTA0LCAweDI1MDUsIDB4MjUwNiwgMHgyNTA3LCAweDI1MDgsCisgICAgMHgyNTA5LCAweDI1MEEsIDB4MjUwQiwgMHgyNTBDLCAweDI1MEQsIDB4MjUwRSwgMHgyNTBGLCAweDI1MTAsCisgICAgMHgyNTExLCAweDI1MTIsIDB4MjUxMywgMHgyNTE0LCAweDI1MTUsIDB4MjUxNiwgMHgyNTE3LCAweDI1MTgsCisgICAgMHgyNTE5LCAweDI1MUEsIDB4MjUxQiwgMHgyNTFDLCAweDI1MUQsIDB4MjUxRSwgMHgyNTFGLCAweDI1MjAsCisgICAgMHgyNTIxLCAweDI1MjIsIDB4MjUyMywgMHgyNTI0LCAweDI1MjUsIDB4MjUyNiwgMHgyNTI3LCAweDI1MjgsCisgICAgMHgyNTI5LCAweDI1MkEsIDB4MjUyQiwgMHgyNTJDLCAweDI1MkQsIDB4MjUyRSwgMHgyNTJGLCAweDI1MzAsCisgICAgMHgyNTMxLCAweDI1MzIsIDB4MjUzMywgMHgyNTM0LCAweDI1MzUsIDB4MjUzNiwgMHgyNTM3LCAweDI1MzgsCisgICAgMHgyNTM5LCAweDI1M0EsIDB4MjUzQiwgMHgyNTNDLCAweDI1M0QsIDB4MjUzRSwgMHgyNTNGLCAweDI1NDAsCisgICAgMHgyNTQxLCAweDI1NDIsIDB4MjU0MywgMHgyNTQ0LCAweDI1NDUsIDB4MjU0NiwgMHgyNTQ3LCAweDI1NDgsCisgICAgMHgyNTQ5LCAweDI1NEEsIDB4MjU0QiwgMHgyNDYwLCAweDI0NjEsIDB4MjQ2MiwgMHgyNDYzLCAweDI0NjQsCisgICAgMHgyNDY1LCAweDI0NjYsIDB4MjQ2NywgMHgyNDY4LCAweDI0NjksIDB4MjQ2QSwgMHgyNDZCLCAweDI0NkMsCisgICAgMHgyNDZELCAweDI0NkUsIDB4MjQ2RiwgMHgyNDcwLCAweDI0NzEsIDB4MjQ3MiwgMHgyNDczLCAweDIxNjAsCisgICAgMHgyMTYxLCAweDIxNjIsIDB4MjE2MywgMHgyMTY0LCAweDIxNjUsIDB4MjE2NiwgMHgyMTY3LCAweDIxNjgsCisgICAgMHgyMTY5LCAweDMzNDksIDB4MzMxNCwgMHgzMzIyLCAweDMzNEQsIDB4MzMxOCwgMHgzMzI3LCAweDMzMDMsCisgICAgMHgzMzM2LCAweDMzNTEsIDB4MzM1NywgMHgzMzBELCAweDMzMjYsIDB4MzMyMywgMHgzMzJCLCAweDMzNEEsCisgICAgMHgzMzNCLCAweDMzOUMsIDB4MzM5RCwgMHgzMzlFLCAweDMzOEUsIDB4MzM4RiwgMHgzM0M0LCAweDMzQTEsCisgICAgMHgzMDFELCAweDMwMUYsIDB4MjExNiwgMHgzM0NELCAweDIxMjEsIDB4MzJBNCwgMHgzMkE1LCAweDMyQTYsCisgICAgMHgzMkE3LCAweDMyQTgsIDB4MzIzMSwgMHgzMjMyLCAweDMyMzksIDB4MzM3RSwgMHgzMzdELCAweDMzN0MsCisgICAgMHgyMjJFLCAweDIyMTEsIDB4MjIxQSwgMHgyMkE1LCAweDIyMjAsIDB4MjIxRiwgMHgyMkJGLCAweDIyMjksCisgICAgMHgyMjJBLCAweDU1NUUsIDB4OThGNCwgMHg2RUEyLCAweDlDMkYsIDB4NkRFQiwgMHg4RkMyLCAweDZCMUQsCisgICAgMHg1M0E5LCAweDk1OEYsIDB4NTY0MiwgMHg5OTBDLCAweDcxMzAsIDB4ODk1NiwgMHg5REQ3LCAweDhGRTYsCisgICAgMHg2MDYyLCAweDYyRDAsIDB4NjY2NiwgMHg1NTlELCAweDg0NUIsIDB4OTc4NCwgMHg1Njk5LCAweDZGOTcsCisgICAgMHg3RkYwLCAweDdGRUIsIDB4NUZCRCwgMHg3OTQ3LCAweDRGRTAsIDB4NTM3RiwgMHg1MEM1LCAweDhFQzAsCisgICAgMHg1NUIwLCAweDZBREIsIDB4NUM1MSwgMHg5Nzc0LCAweDc5NDEsIDB4NjE2NywgMHg3QTNELCAweDdFNkIsCisgICAgMHg4MzRBLCAweDk2OTksIDB4NTAyNiwgMHg1QUNDLCAweDYzNzIsIDB4OUU3QywgMHg4QUZBLCAweDVERjcsCisgICAgMHg2NjNCLCAweDZFOUQsIDB4OUVCNCwgMHg5RDYwLCAweDc1MTEsIDB4OTFDNywgMHg2OThBLCAweDY4MDUsCisgICAgMHg4NUE5LCAweDlCRDYsIDB4OTMwNiwgMHg3M0NBLCAweDUzRjEsIDB4NUM2MiwgMHg5MDZFLCAweDY3NTMsCisgICAgMHg3MDdDLCAweDdFNjEsIDB4OTE0QiwgMHg2NkQ5LCAweDZFMUEsIDB4ODVBRiwgMHg4NUY3LCAweDU0RTgsCisgICAgMHg1RUUwLCAweDY4QTIsIDB4ODUyMywgMHg5MUFDLCAweDk3OTgsIDB4ODc1NSwgMHg5NzcxLCAweDkwMTcsCisgICAgMHg3RkUwLCAweDY0N0EsIDB4OTAxRCwgMHg4N0VDLCAweDY0QjAsIDB4NjgxMywgMHg3MTRFLCAweDcxN0QsCisgICAgMHg4QTZFLCAweDU2NEMsIDB4OTA2MSwgMHg1Mjc1LCAweDY0MTQsIDB4NzYyNiwgMHg5MDVDLCAweDlBNTIsCisgICAgMHg4MTdGLCAweDlFREIsIDB4NTU0NCwgMHg2RkVGLCAweDc0MjIsIDB4ODZGOCwgMHg1REZELCAweDhGQkYsCisgICAgMHg2OERBLCAweDlDNDgsIDB4NkEzRCwgMHg3QzFFLCAweDhBM0IsIDB4NzAyNiwgMHg1MUNCLCAweDYzNTcsCisgICAgMHg2OUNDLCAweDkzOUEsIDB4NTg1QSwgMHg2NDUxLCAweDkxMkQsIDB4NjRFMiwgMHg2RUJBLCAweDU4NjEsCisgICAgMHg5ODVBLCAweDU4MzUsIDB4NUM2MCwgMHg4M0RGLCAweDhDRUQsIDB4NTg1OCwgMHg3OUIxLCAweDlEMDcsCisgICAgMHg3MDA2LCAweDcwMUUsIDB4NTY3OCwgMHg5MDQxLCAweDk4MTMsIDB4OTBBMywgMHg4QjBFLCAweDcwNTgsCisgICAgMHg2OTYyLCAweDc5QjAsIDB4NTZDQSwgMHg3MjRDLCAweDkwMTksIDB4NzlFNCwgMHg1MjVELCAweDdCQjgsCisgICAgMHg2RjUxLCAweDkxQjEsIDB4NjMzRCwgMHg2MjQ5LCAweDZBMEIsIDB4NjdDQSwgMHg3QTE3LCAweDkwM0MsCisgICAgMHg1QTlCLCAweDhCMkMsIDB4NUVERiwgMHg3MDE1LCAweDk4M0IsIDB4ODUzRCwgMHg3N0E1LCAweDVBMjksCisgICAgMHg1RTk2LCAweDZDRTEsIDB4ODRFQywgMHg5ODMwLCAweDlDNTIsIDB4OUVCNSwgMHg1MTMyLCAweDk5MDUsCisgICAgMHg3QzdFLCAweDk0NTMsIDB4NjEwOCwgMHg3NjUyLCAweDczMzcsIDB4NzE5NCwgMHg4MDAwLCAweDg0MEEsCisgICAgMHg5MDdDLCAweDZGMjMsIDB4NzE0OSwgMHg4NEVFLCAweDY5OTQsIDB4ODgxRiwgMHg1MTU0LCAweDUxODksCisgICAgMHg1MTk1LCAweDUxQTQsIDB4NTUzOSwgMHg1NTMzLCAweDU1RTQsIDB4NTYzMiwgMHg1NkE1LCAweDU4MEIsCisgICAgMHg1QUJFLCAweDVCQzMsIDB4NUM1QiwgMHg1RTY0LCAweDYwOTcsIDB4NjM2OSwgMHg2NDA2LCAweDY1MjIsCisgICAgMHg2NTgzLCAweDY3QTYsIDB4NjdCNCwgMHg2ODlCLCAweDY4OEUsIDB4NkU2RSwgMHg3MUQ3LCAweDcyMjgsCisgICAgMHg3M0NFLCAweDc1MDQsIDB4NzUwRCwgMHg3NTE1LCAweDc2OTMsIDB4Nzg3QywgMHg3QTMxLCAweDlGOUQsCisgICAgMHg3Qjk5LCAweDdDOTAsIDB4N0NBRSwgMHg3RDlCLCAweDdEQUUsIDB4N0Q5RiwgMHg3RkQ0LCAweDgyMkUsCisgICAgMHg4MjhELCAweDgyRDIsIDB4ODMyMywgMHg4Mzc1LCAweDg1MTcsIDB4ODUzRSwgMHg4NzgyLCAweDg3RDIsCisgICAgMHg4OTBBLCAweDg5QUYsIDB4OEFERSwgMHg4QjQxLCAweDhEREEsIDB4OEUwOSwgMHg4RjEzLCAweDhGRUEsCisgICAgMHg4RkU5LCAweDkwNTgsIDB4NjI0OCwgMHg5MUMxLCAweDk1QkIsIDB4Nzc2MiwgMHg5NzI0LCAweDk3NjAsCisgICAgMHg5NzZELCAweDk4MjQsIDB4OUIyRSwgMHg5Qjk3LCAweDlCRjIsIDB4OUVBQSwgMHg5RjlDLCAweDMwMDEsCisgICAgMHgzMDAyLCAweDIwM0UsIDB4RkYzRiwgMHgzMEZDLCAweDIwMTUsIDB4MjAxMCwgMHgzMDFDLCAweDIwMTYsCisgICAgMHhGRjVDLCAweDIwMjYsIDB4MjAyNSwgMHhGRjA4LCAweEZGMDksIDB4MzAxNCwgMHgzMDE1LCAweEZGM0IsCisgICAgMHhGRjNELCAweEZGNUIsIDB4RkY1RCwgMHgzMDA4LCAweDMwMDksIDB4MzAwQSwgMHgzMDBCLCAweDMwMEMsCisgICAgMHgzMDBELCAweDMwMEUsIDB4MzAwRiwgMHgzMDEwLCAweDMwMTEsIDB4RkYxRCwgMHgzMDQxLCAweDMwNDMsCisgICAgMHgzMDQ1LCAweDMwNDcsIDB4MzA0OSwgMHgzMDYzLCAweDMwODMsIDB4MzA4NSwgMHgzMDg3LCAweDMwOEUsCisgICAgMHgzMEExLCAweDMwQTMsIDB4MzBBNSwgMHgzMEE3LCAweDMwQTksIDB4MzBDMywgMHgzMEUzLCAweDMwRTUsCisgICAgMHgzMEU3LCAweDMwRUUsIDB4MzBGNSwgMHgzMEY2LCAweDMzNDksIDB4MzMxNCwgMHgzMzIyLCAweDMzNEQsCisgICAgMHgzMzE4LCAweDMzMjcsIDB4MzMwMywgMHgzMzM2LCAweDMzNTEsIDB4MzM1NywgMHgzMzBELCAweDMzMjYsCisgICAgMHgzMzIzLCAweDMzMkIsIDB4MzM0QSwgMHgzMzNCLCAweDMwMUQsIDB4MzAxRSwgMHgzMDk0LCAweDMwNEIsCisgICAgMHgzMDUxLCAweDgyQTYsIDB4ODMyOCwgMHg1NjUzLCAweDUzQTksIDB4NzI1OSwgMHg2QzcyLCAweDdCMDgsCisgICAgMHg5OTU3LCAweDYyRjMsIDB4OTkxMCwgMHg5NzZELCAweDcxN0QsIDB4N0E3RiwgMHg3QkFELCAweDYzQzMsCisgICAgMHg4M0RGLCAweDc5NjIsIDB4NTNEQiwgMHg3QkM3LCAweDhGQzQsIDB4N0MzRSwgMHg1MENBLCAweDUzMTUsCisgICAgMHg1NUE5LCAweDU2QUUsIDB4NTgxOSwgMHg1OTFCLCAweDVDMjgsIDB4NUVEMCwgMHg1RUNGLCAweDYyNDEsCisgICAgMHg2NkMxLCAweDZDMDgsIDB4NkUyMywgMHg2RUVDLCAweDdBOTcsIDB4N0JERCwgMHg3RkU5LCAweDg0MjIsCisgICAgMHg4NzU5LCAweDg4MEUsIDB4ODdEMiwgMHg5QTE5LCAweDlFQUQsIDB4RkZFNCwgMHhGRjA3LCAweEZGMDIsCisgICAgMHgxMUE4LCAweDI1QzEsIDB4MjVCNywgMHgyMUU5LCAweDIxRTcsIDB4MjFFNiwgMHgyMUU4LCAweDI1QTIsCisgICAgMHgyNjY3LCAweDI2NjEsIDB4MjY2NCwgMHgyNjYyLCAweDMzQTAsIDB4MzNBMiwgMHgzM0E0LCAweDMzQTUsCisgICAgMHgzMzk3LCAweDIxMTMsIDB4MzM5OCwgMHgzM0IzLCAweDMzQjIsIDB4MzNCMSwgMHgzM0IwLCAweDMzODUsCisgICAgMHgzMzg2LCAweDMzODcsIDB4MzNDQiwgMHgzMzkwLCAweDMzRDQsIDB4MzM5NiwgMHgzMzIyLCAweDMzMTYsCisgICAgMHgzMzE4LCAweDMzMTUsIDB4MzMwMywgMHgzMzIzLCAweDMzNTcsIDB4MzM0MiwgMHgzMzM5LCAweDMzM0IsCisgICAgMHgzMzAwLCAweDMzMzEsIDB4MzM0NywgMHgzMzFFLCAweDMzMkEsIDB4MzNDRCwgMHgzMzdGLCAweDIxMjEsCisgICAgMHgyNjBFLCAweDMwMzYsIDB4MzAyMCwgMHgwMEE5LCAweDAwQUUsIDB4MDAwMCwgMHgyNDg4LCAweDI0ODksCisgICAgMHgyNDhBLCAweDI0OEIsIDB4MjQ4QywgMHgyNDhELCAweDI0OEUsIDB4MjQ4RiwgMHgyNDkwLCAweDI0NzQsCisgICAgMHgyNDc1LCAweDI0NzYsIDB4MjQ3NywgMHgyNDc4LCAweDI0NzksIDB4MjQ3QSwgMHgyNDdCLCAweDI0N0MsCisgICAgMHgyNDdELCAweDI0N0UsIDB4MjQ3RiwgMHgyNDgwLCAweDI0ODEsIDB4MjQ4MiwgMHgyNDgzLCAweDI0ODQsCisgICAgMHgyNDg1LCAweDI0ODYsIDB4MjQ4NywgMHgzMjUxLCAweDIxNzAsIDB4MjE3MSwgMHgyMTcyLCAweDIxNzMsCisgICAgMHgyMTc0LCAweDIxNzUsIDB4MjE3NiwgMHgyMTc3LCAweDIxNzgsIDB4MjE3OSwgMHgzMjUyLCAweDMyNTMsCisgICAgMHgzMjU0LCAweDMyNTUsIDB4MzI1NiwgMHgzMjU3LCAweDMyNTgsIDB4MzI1OSwgMHgzMjVBLCAweDMyNUIsCisgICAgMHgyNDlDLCAweDI0OUQsIDB4MjQ5RSwgMHgyNDlGLCAweDI0QTAsIDB4MjRBMSwgMHgyNEEyLCAweDI0QTMsCisgICAgMHgyNEE0LCAweDI0QTUsIDB4MjRBNiwgMHgyNEE3LCAweDI0QTgsIDB4MjRBOSwgMHgyNEFBLCAweDI0QUIsCisgICAgMHgyNEFDLCAweDI0QUQsIDB4MjRBRSwgMHgyNEFGLCAweDI0QjAsIDB4MjRCMSwgMHgyNEIyLCAweDI0QjMsCisgICAgMHgyNEI0LCAweDI0QjUsIDB4MzI0MywgMHgzMjNELCAweDMyM0YsIDB4MzIzNCwgMHgzMjM4LCAweDMyMzMsCisgICAgMHgzMjNDLCAweDMyNDIsIDB4MzIzRSwgMHgzMjM2LCAweDMyMzUsIDB4MzIzQiwgMHgzMjQwLCAweDMyM0EsCisgICAgMHgzMkIwLCAweDMyQUQsIDB4MzJBOSwgMHgzMkFGLCAweDMyOTQsIDB4MzJBQSwgMHgzMjk4LCAweDMyQUIsCisgICAgMHgzMjkyLCAweDMyOTEsIDB4MzI5MywgMHgzMkFDLCAweDMyQUUsIDB4MzI5NiwgMHgyM0E5LCAweDIzQTgsCisgICAgMHgyM0E3LCAweEZFMzgsIDB4MjNBRCwgMHgyM0FDLCAweDIzQUIsIDB4RkUzOCwgMHgyM0FCLCAweDIzQUMsCisgICAgMHgyM0FELCAweEZFMzgsIDB4MjNBNywgMHgyM0E4LCAweDIzQTksIDB4RkUzOCwgMHgzM0NDLCAweDMzMDUsCisgICAgMHgwMEJELCAweDAwQkMsIDB4MzM5RiwgMHgzM0EzLCAweDMzQTYsIDB4RkZGRCwgMHhGRkZELCAweDMyOUUsCisgICAgMHgzMzg4LCAweDMzODksIDB4MzNDOCwgMHgyMjJELCAweDUzNzAsIDB4MzIzMCwgMHgzMjJBLCAweDMyMkIsCisgICAgMHgzMjJDLCAweDMyMkQsIDB4MzIyRSwgMHgzMjJGLCAweDMyMzcsIDB4MzI0MSwgMHgyN0ExLCAweDIxRTYsCisgICAgMHgyMUU3LCAweDIxRTksIDB4MjVDOSwgMHgyNjYwLCAweDI2NjUsIDB4MjY2MywgMHgyNjY2LCAweDI2MDAsCisgICAgMHgyNjAxLCAweDI2MDIsIDB4MjYwMywgMHgyNjFFLCAweDI2MUMsIDB4MjYxRCwgMHgyNjFGLCAweDMyOTksCisgICAgMHgyNEVBLCAweDIxNkEsIDB4MjE2QiwgMHhGRjEwLCAweEZGMTAsIDB4MzAwMCwgMHgyNTgxLCAweDI1ODIsCisgICAgMHgyNTgzLCAweDI1ODQsIDB4MjU4NSwgMHgyNTg2LCAweDI1ODcsIDB4MjU4OCwgMHgyNThGLCAweDI1OEUsCisgICAgMHgyNThELCAweDI1OEMsIDB4MjU4QiwgMHgyNThBLCAweDI1ODksIDB4MjU5NCwgMHgyNTk1LCAweDI1NkQsCisgICAgMHgyNTZFLCAweDI1NzAsIDB4MjU2RiwgMHgyNTUwLCAweDI1NUUsIDB4MjU2QSwgMHgyNTYxLCAweDI1RTIsCisgICAgMHgyNUUzLCAweDI1RTUsIDB4MjVFNCwgMHgyNUNGLCAweDBFRDAsIDB4MjU3MSwgMHgyNTcyLCAweDI1NzMsCisgICAgMHgzMDRCLCAweDMwNTEsIDB4OTAyMiwgMHg4RkJCLCAweEZGMEMsIDB4MDBCMCwgMHgzMDEzLCAweDMwOUMsCisgICAgMHgzMDlCLCAweDAyQ0YsIDB4RkYwRSwgMHgyMDE4LCAweDIwMTksIDB4MjAxQywgMHgyMDFELCAweDIwMUMsCisgICAgMHgyMDFFLCAweDIwMTgsIDB4MjAxQSwgMHgwMkJBLCAweDUxREMsIDB4NzE5OSwgMHgyNzc2LCAweDI3NzcsCisgICAgMHgyNzc4LCAweDI3NzksIDB4Mjc3QSwgMHgyNzdCLCAweDI3N0MsIDB4Mjc3RCwgMHgyNzdFLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MjE3QSwgMHgyMTdCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIxN0YsCisgICAgMHgyMTBBLCAweDIxMDksIDB4MDAwMCwgMHgwMDAwLCAweDMwMDQsIDB4MjFDNiwgMHgyMUM0LCAweDIxQzUsCisgICAgMHgwMDAwLCAweDMwRjcsIDB4MzBGOCwgMHgzMEY5LCAweDMwRkEsIDB4NTkyNywgMHg1QzBGLCAweDMyOUQsCisgICAgMHg2M0E3LCAweDAwMDAsIDB4MDAwMCwgMHgzMzdCLCAweDMzN0YsIDB4MDAwMCwgMHgwMDAwLCAweDMzMzMsCisgICAgMHgzMzRFLCAweDMzMjIsIDB4MzMxNiwgMHgzMzA1LCAweDMzMDUsIDB4MzMwNSwgMHgzMzMzLCAweDMzNEUsCisgICAgMHgzMzRFLCAweDMzNEUsIDB4MzMwMywgMHgzMzE4LCAweDMzMTUsIDB4MzMzOSwgMHgzMzM5LCAweDMzMzksCisgICAgMHgzMzU3LCAweDMzNDIsIDB4MzM0MiwgMHgzMzQyLCAweDMzMjMsIDB4MzMzQiwgMHgzMzAwLCAweDMzMUUsCisgICAgMHgzMzFFLCAweDMzMUUsIDB4MzMyQSwgMHgzMzJBLCAweDMzMkEsIDB4MzM0NywgMHgzMzMxLCAweDdFOEEsCisgICAgMHg4OTFDLCAweDkzNDgsIDB4OTI4OCwgMHg4NERDLCAweDRGQzksIDB4NzBCQiwgMHg2NjMxLCAweDY4QzgsCisgICAgMHg5MkY5LCAweDY2RkIsIDB4NUY0NSwgMHg0RTI4LCAweDRFRTEsIDB4NEVGQywgMHg0RjAwLCAweDRGMDMsCisgICAgMHg0RjM5LCAweDRGNTYsIDB4NEY5MiwgMHg0RjhBLCAweDRGOUEsIDB4NEY5NCwgMHg0RkNELCAweDUwNDAsCisgICAgMHg1MDIyLCAweDRGRkYsIDB4NTAxRSwgMHg1MDQ2LCAweDUwNzAsIDB4NTA0MiwgMHg1MDk0LCAweDUwRjQsCisgICAgMHg1MEQ4LCAweDUxNEEsIDB4NTE2NCwgMHg1MTlELCAweDUxQkUsIDB4NTFFQywgMHg1MjE1LCAweDUyOUMsCisgICAgMHg1MkE2LCAweDUyQzAsIDB4NTJEQiwgMHg1MzAwLCAweDUzMDcsIDB4NTMyNCwgMHg1MzcyLCAweDUzOTMsCisgICAgMHg1M0IyLCAweDUzREQsIDB4RkEwRSwgMHg1NDlDLCAweDU0OEEsIDB4NTRBOSwgMHg1NEZGLCAweDU1ODYsCisgICAgMHg1NzU5LCAweDU3NjUsIDB4NTdBQywgMHg1N0M4LCAweDU3QzcsIDB4RkEwRiwgMHhGQTEwLCAweDU4OUUsCisgICAgMHg1OEIyLCAweDU5MEIsIDB4NTk1MywgMHg1OTVCLCAweDU5NUQsIDB4NTk2MywgMHg1OUE0LCAweDU5QkEsCisgICAgMHg1QjU2LCAweDVCQzAsIDB4NzUyRiwgMHg1QkQ4LCAweDVCRUMsIDB4NUMxRSwgMHg1Q0E2LCAweDVDQkEsCisgICAgMHg1Q0Y1LCAweDVEMjcsIDB4NUQ1MywgMHhGQTExLCAweDVENDIsIDB4NUQ2RCwgMHg1REI4LCAweDVEQjksCisgICAgMHg1REQwLCAweDVGMjEsIDB4NUYzNCwgMHg1RjY3LCAweDVGQjcsIDB4NUZERSwgMHg2MDVELCAweDYwODUsCisgICAgMHg2MDhBLCAweDYwREUsIDB4NjBENSwgMHg2MTIwLCAweDYwRjIsIDB4NjExMSwgMHg2MTM3LCAweDYxMzAsCisgICAgMHg2MTk4LCAweDYyMTMsIDB4NjJBNiwgMHg2M0Y1LCAweDY0NjAsIDB4NjQ5RCwgMHg2NENFLCAweDY1NEUsCisgICAgMHg2NjAwLCAweDY2MTUsIDB4NjYwOSwgMHg2NjJFLCAweDY2MUUsIDB4NjYyNCwgMHg2NjY1LCAweDY2NTcsCisgICAgMHg2NjU5LCAweEZBMTIsIDB4NjY3MywgMHg2Njk5LCAweDY2QTAsIDB4NjZCMiwgMHg2NkJGLCAweDY2RkEsCisgICAgMHg2NzBFLCAweEY5MjksIDB4Njc2NiwgMHg2N0JCLCAweDY4NTIsIDB4NjdDMCwgMHg2ODAxLCAweDY4NDQsCisgICAgMHg2OENGLCAweEZBMTMsIDB4Njk2OCwgMHhGQTE0LCAweDY5OTgsIDB4NjlFMiwgMHg2QTMwLCAweDZBNkIsCisgICAgMHg2QTQ2LCAweDZBNzMsIDB4NkE3RSwgMHg2QUUyLCAweDZBRTQsIDB4NkJENiwgMHg2QzNGLCAweDZDNUMsCisgICAgMHg2Qzg2LCAweDZDNkYsIDB4NkNEQSwgMHg2RDA0LCAweDZEODcsIDB4NkQ2RiwgMHg2RDk2LCAweDZEQUMsCisgICAgMHg2RENGLCAweDZERjgsIDB4NkRGMiwgMHg2REZDLCAweDZFMzksIDB4NkU1QywgMHg2RTI3LCAweDZFM0MsCisgICAgMHg2RUJGLCAweDZGODgsIDB4NkZCNSwgMHg2RkY1LCAweDcwMDUsIDB4NzAwNywgMHg3MDI4LCAweDcwODUsCisgICAgMHg3MEFCLCAweDcxMEYsIDB4NzEwNCwgMHg3MTVDLCAweDcxNDYsIDB4NzE0NywgMHhGQTE1LCAweDcxQzEsCisgICAgMHg3MUZFLCAweDcyQjEsIDB4NzJCRSwgMHg3MzI0LCAweEZBMTYsIDB4NzM3NywgMHg3M0JELCAweDczQzksCisgICAgMHg3M0Q2LCAweDczRTMsIDB4NzNEMiwgMHg3NDA3LCAweDczRjUsIDB4NzQyNiwgMHg3NDJBLCAweDc0MjksCisgICAgMHg3NDJFLCAweDc0NjIsIDB4NzQ4OSwgMHg3NDlGLCAweDc1MDEsIDB4NzU2RiwgMHg3NjgyLCAweDc2OUMsCisgICAgMHg3NjlFLCAweDc2OUIsIDB4NzZBNiwgMHhGQTE3LCAweDc3NDYsIDB4NTJBRiwgMHg3ODIxLCAweDc4NEUsCisgICAgMHg3ODY0LCAweDc4N0EsIDB4NzkzMCwgMHhGQTE4LCAweEZBMTksIDB4RkExQSwgMHg3OTk0LCAweEZBMUIsCisgICAgMHg3OTlCLCAweDdBRDEsIDB4N0FFNywgMHhGQTFDLCAweDdBRUIsIDB4N0I5RSwgMHhGQTFELCAweDdENDgsCisgICAgMHg3RDVDLCAweDdEQjcsIDB4N0RBMCwgMHg3REQ2LCAweDdFNTIsIDB4N0Y0NywgMHg3RkExLCAweEZBMUUsCisgICAgMHg4MzAxLCAweDgzNjIsIDB4ODM3RiwgMHg4M0M3LCAweDgzRjYsIDB4ODQ0OCwgMHg4NEI0LCAweDg1NTMsCisgICAgMHg4NTU5LCAweDg1NkIsIDB4RkExRiwgMHg4NUIwLCAweEZBMjAsIDB4RkEyMSwgMHg4ODA3LCAweDg4RjUsCisgICAgMHg4QTEyLCAweDhBMzcsIDB4OEE3OSwgMHg4QUE3LCAweDhBQkUsIDB4OEFERiwgMHhGQTIyLCAweDhBRjYsCisgICAgMHg4QjUzLCAweDhCN0YsIDB4OENGMCwgMHg4Q0Y0LCAweDhEMTIsIDB4OEQ3NiwgMHhGQTIzLCAweDhFQ0YsCisgICAgMHhGQTI0LCAweEZBMjUsIDB4OTA2NywgMHg5MERFLCAweEZBMjYsIDB4OTExNSwgMHg5MTI3LCAweDkxREEsCisgICAgMHg5MUQ3LCAweDkxREUsIDB4OTFFRCwgMHg5MUVFLCAweDkxRTQsIDB4OTFFNSwgMHg5MjA2LCAweDkyMTAsCisgICAgMHg5MjBBLCAweDkyM0EsIDB4OTI0MCwgMHg5MjNDLCAweDkyNEUsIDB4OTI1OSwgMHg5MjUxLCAweDkyMzksCisgICAgMHg5MjY3LCAweDkyQTcsIDB4OTI3NywgMHg5Mjc4LCAweDkyRTcsIDB4OTJENywgMHg5MkQ5LCAweDkyRDAsCisgICAgMHhGQTI3LCAweDkyRDUsIDB4OTJFMCwgMHg5MkQzLCAweDkzMjUsIDB4OTMyMSwgMHg5MkZCLCAweEZBMjgsCisgICAgMHg5MzFFLCAweDkyRkYsIDB4OTMxRCwgMHg5MzAyLCAweDkzNzAsIDB4OTM1NywgMHg5M0E0LCAweDkzQzYsCisgICAgMHg5M0RFLCAweDkzRjgsIDB4OTQzMSwgMHg5NDQ1LCAweDk0NDgsIDB4OTU5MiwgMHhGOURDLCAweEZBMjksCisgICAgMHg5NjlELCAweDk2QUYsIDB4OTczMywgMHg5NzNCLCAweDk3NDMsIDB4OTc0RCwgMHg5NzRGLCAweDk3NTEsCisgICAgMHg5NzU1LCAweDk4NTcsIDB4OTg2NSwgMHhGQTJBLCAweEZBMkIsIDB4OTkyNywgMHhGQTJDLCAweDk5OUUsCisgICAgMHg5QTRFLCAweDlBRDksIDB4OUFEQywgMHg5Qjc1LCAweDlCNzIsIDB4OUI4RiwgMHg5QkIxLCAweDlCQkIsCisgICAgMHg5QzAwLCAweDlENzAsIDB4OUQ2QiwgMHhGQTJELCAweDlFMTksIDB4OUVEMSwgMHgwMEFDLCAweDAwNUMsCisgICAgMHgwMDIwLCAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCisgICAgMHgwMDI4LCAweDAwMjksIDB4MDAyQSwgMHgwMDJCLCAweDAwMkMsIDB4MDAyRCwgMHgwMDJFLCAweDAwMkYsCisgICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCisgICAgMHgwMDM4LCAweDAwMzksIDB4MDAzQSwgMHgwMDNCLCAweDAwM0MsIDB4MDAzRCwgMHgwMDNFLCAweDAwM0YsCisgICAgMHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCisgICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0QSwgMHgwMDRCLCAweDAwNEMsIDB4MDA0RCwgMHgwMDRFLCAweDAwNEYsCisgICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCisgICAgMHgwMDU4LCAweDAwNTksIDB4MDA1QSwgMHgwMDVCLCAweDAwQTUsIDB4MDA1RCwgMHgwMDVFLCAweDAwNUYsCisgICAgMHgwMDYwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsCisgICAgMHgwMDY4LCAweDAwNjksIDB4MDA2QSwgMHgwMDZCLCAweDAwNkMsIDB4MDA2RCwgMHgwMDZFLCAweDAwNkYsCisgICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCisgICAgMHgwMDc4LCAweDAwNzksIDB4MDA3QSwgMHgwMDdCLCAweDAwQTYsIDB4MDA3RCwgMHgwMzAzLCAweDAyQkMsCisgICAgMHgwMDVDLCAweDAyQkIsIDB4MDA3QywgMHgwMDdFLCAweDAwQTEsIDB4MDBBMiwgMHgwMEEzLCAweDIwNDQsCisgICAgMHgwMTkyLCAweDAwQTcsIDB4MDBBNCwgMHgyMDFDLCAweDAwQUIsIDB4MjAzOSwgMHgyMDNBLCAweEZCMDEsCisgICAgMHhGQjAyLCAweDIwMTIsIDB4MjAyMCwgMHgyMDIxLCAweDAwQjcsIDB4MDBCNiwgMHgyMDIyLCAweDIwMUEsCisgICAgMHgyMDFFLCAweDIwMUQsIDB4MDBCQiwgMHgyMDI2LCAweDIwMzAsIDB4MDBCRiwgMHgwMzAxLCAweDAzMDIsCisgICAgMHgwMEFGLCAweDAzMDYsIDB4MDMwNywgMHgwMzA4LCAweDAzMEEsIDB4MDBCOCwgMHgwMzBCLCAweDAzMjgsCisgICAgMHgwMzBDLCAweDAzMzYsIDB4MDBDNiwgMHgwMEFBLCAweDAxNDEsIDB4MDBEOCwgMHgwMTUyLCAweDAwQkEsCisgICAgMHgwMEU2LCAweDAxMzEsIDB4MDE0MiwgMHgwMEY4LCAweDAxNTMsIDB4MDBERiwgMHgwMDJELCAweDAwQTksCisgICAgMHgwMEFDLCAweDAwQUUsIDB4MDBCMCwgMHgwMEIxLCAweDAwQjIsIDB4MDBCMywgMHgwMEI1LCAweDAwQjksCisgICAgMHgwMEJDLCAweDAwQkQsIDB4MDBCRSwgMHgwMEMwLCAweDAwQzEsIDB4MDBDMiwgMHgwMEMzLCAweDAwQzQsCisgICAgMHgwMEM1LCAweDAwQzcsIDB4MDBDOCwgMHgwMEM5LCAweDAwQ0EsIDB4MDBDQiwgMHgwMENDLCAweDAwQ0QsCisgICAgMHgwMENFLCAweDAwQ0YsIDB4MDBEMCwgMHgwMEQxLCAweDAwRDIsIDB4MDBEMywgMHgwMEQ0LCAweDAwRDUsCisgICAgMHgwMEQ2LCAweDAwRDcsIDB4MDBEOSwgMHgwMERBLCAweDAwREIsIDB4MDBEQywgMHgwMERELCAweDAwREUsCisgICAgMHgwMEUwLCAweDAwRTEsIDB4MDBFMiwgMHgwMEUzLCAweDAwRTQsIDB4MDBFNSwgMHgwMEU3LCAweDAwRTgsCisgICAgMHgwMEU5LCAweDAwRUEsIDB4MDBFQiwgMHgwMEVDLCAweDAwRUQsIDB4MDBFRSwgMHgwMEVGLCAweDAwRjAsCisgICAgMHgwMEYxLCAweDAwRjIsIDB4MDBGMywgMHgwMEY0LCAweDAwRjUsIDB4MDBGNiwgMHgwMEY3LCAweDAwRjksCisgICAgMHgwMEZBLCAweDAwRkIsIDB4MDBGQywgMHgwMEZELCAweDAwRkUsIDB4MDBGRiwgMHgwMTYwLCAweDAxNzgsCisgICAgMHgwMTdELCAweDAzMDUsIDB4MDE2MSwgMHgyMTIyLCAweDAxN0UsIDB4MDAzMCwgMHgyMDAyLCAweDAwMjEsCisgICAgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywgMHgwMDI4LCAweDAwMjksCisgICAgMHgwMDJBLCAweDAwMkIsIDB4MDAyQywgMHgwMDJELCAweDAwMkUsIDB4MDAyRiwgMHgwMDMwLCAweDAwMzEsCisgICAgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgMHgwMDM4LCAweDAwMzksCisgICAgMHgwMDNBLCAweDAwM0IsIDB4MDAzQywgMHgwMDNELCAweDAwM0UsIDB4MDAzRiwgMHgwMDQwLCAweDAwNDEsCisgICAgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywgMHgwMDQ4LCAweDAwNDksCisgICAgMHgwMDRBLCAweDAwNEIsIDB4MDA0QywgMHgwMDRELCAweDAwNEUsIDB4MDA0RiwgMHgwMDUwLCAweDAwNTEsCisgICAgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywgMHgwMDU4LCAweDAwNTksCisgICAgMHgwMDVBLCAweDAwNUIsIDB4MDBBNSwgMHgwMDVELCAweDAwNUUsIDB4MDA1RiwgMHgwMDYwLCAweDAwNjEsCisgICAgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywgMHgwMDY4LCAweDAwNjksCisgICAgMHgwMDZBLCAweDAwNkIsIDB4MDA2QywgMHgwMDZELCAweDAwNkUsIDB4MDA2RiwgMHgwMDcwLCAweDAwNzEsCisgICAgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywgMHgwMDc4LCAweDAwNzksCisgICAgMHgwMDdBLCAweDAwN0IsIDB4MDA3QywgMHgwMDdELCAweDIwM0UsIDB4RkY0MCwgMHgyMDMyLCAweDAwQTgsCisgICAgMHgyMDM2LCAweDAwQzQsIDB4MDBGOSwgMHgwMEU5LCAweDAwRUQsIDB4MDBERiwgMHgwMEU3LCAweDAwQzcsCisgICAgMHgwMEQxLCAweDAwRjEsIDB4MDBBMiwgMHgwMEEzLCAweDAwRjMsIDB4MDBGQSwgMHgwMEExLCAweDAwQkYsCisgICAgMHgwMEJELCAweDAwRDYsIDB4MDBEQywgMHgwMEU0LCAweDAwRUIsIDB4MDBFRiwgMHgwMEY2LCAweDAwREMsCisgICAgMHgwMEUyLCAweDAwRUEsIDB4MDBFRSwgMHgwMEY0LCAweDAwRkMsIDB4MDBFMCwgMHgwMEU5LCAweDAwRTEsCisgICAgMHgwMDdFLCAweDAwMzAsIDB4MDBBQywgMHgwMDVDLCAweEZGNjAsIDB4RkY2MSwgMHhGRjYyLCAweEZGNjMsCisgICAgMHhGRjY0LCAweEZGNjUsIDB4RkY2NiwgMHhGRjY3LCAweEZGNjgsIDB4RkY2OSwgMHhGRjZBLCAweEZGNkIsCisgICAgMHhGRjZDLCAweEZGNkQsIDB4RkY2RSwgMHhGRjZGLCAweEZGNzAsIDB4RkY3MSwgMHhGRjcyLCAweEZGNzMsCisgICAgMHhGRjc0LCAweEZGNzUsIDB4RkY3NiwgMHhGRjc3LCAweEZGNzgsIDB4RkY3OSwgMHhGRjdBLCAweEZGN0IsCisgICAgMHhGRjdDLCAweEZGN0QsIDB4RkY3RSwgMHhGRjdGLCAweEZGODAsIDB4RkY4MSwgMHhGRjgyLCAweEZGODMsCisgICAgMHhGRjg0LCAweEZGODUsIDB4RkY4NiwgMHhGRjg3LCAweEZGODgsIDB4RkY4OSwgMHhGRjhBLCAweEZGOEIsCisgICAgMHhGRjhDLCAweEZGOEQsIDB4RkY4RSwgMHhGRjhGLCAweEZGOTAsIDB4RkY5MSwgMHhGRjkyLCAweEZGOTMsCisgICAgMHhGRjk0LCAweEZGOTUsIDB4RkY5NiwgMHhGRjk3LCAweEZGOTgsIDB4RkY5OSwgMHhGRjlBLCAweEZGOUIsCisgICAgMHhGRjlDLCAweEZGOUQsIDB4RkY5RSwgMHhGRjlGLCAweDMwRjAsIDB4MzBGMSwgMHgzMEVFLCAweDMwQUIsCisgICAgMHgzMEIxLCAweDMwRjQsIDB4MzBBQywgMHgzMEFFLCAweDMwQjAsIDB4MzBCMiwgMHgzMEI0LCAweDMwQjYsCisgICAgMHgzMEI4LCAweDMwQkEsIDB4MzBCQywgMHgzMEJFLCAweDMwQzAsIDB4MzBDMiwgMHgzMEM1LCAweDMwQzcsCisgICAgMHgzMEM5LCAweDMwRDAsIDB4MzBEMSwgMHgzMEQzLCAweDMwRDQsIDB4MzBENiwgMHgzMEQ3LCAweDMwRDksCisgICAgMHgzMERBLCAweDMwREMsIDB4MzBERCwgMHhGRjYwLCAweDMwOTIsIDB4MzA0MSwgMHgzMDQzLCAweDMwNDUsCisgICAgMHgzMDQ3LCAweDMwNDksIDB4MzA4MywgMHgzMDg1LCAweDMwODcsIDB4MzA2MywgMHgzMDQyLCAweDMwNDQsCisgICAgMHgzMDQ2LCAweDMwNDgsIDB4MzA0QSwgMHgzMDRCLCAweDMwNEQsIDB4MzA0RiwgMHgzMDUxLCAweDMwNTMsCisgICAgMHgzMDU1LCAweDMwNTcsIDB4MzA1OSwgMHgzMDVCLCAweDMwNUQsIDB4MzA1RiwgMHgzMDYxLCAweDMwNjQsCisgICAgMHgzMDY2LCAweDMwNjgsIDB4MzA2QSwgMHgzMDZCLCAweDMwNkMsIDB4MzA2RCwgMHgzMDZFLCAweDMwNkYsCisgICAgMHgzMDcyLCAweDMwNzUsIDB4MzA3OCwgMHgzMDdCLCAweDMwN0UsIDB4MzA3RiwgMHgzMDgwLCAweDMwODEsCisgICAgMHgzMDgyLCAweDMwODQsIDB4MzA4NiwgMHgzMDg4LCAweDMwODksIDB4MzA4QSwgMHgzMDhCLCAweDMwOEMsCisgICAgMHgzMDhELCAweDMwOEYsIDB4MzA5MywgMHgzMDkwLCAweDMwOTEsIDB4MzA4RSwgMHgzMDRDLCAweDMwNEUsCisgICAgMHgzMDUwLCAweDMwNTIsIDB4MzA1NCwgMHgzMDU2LCAweDMwNjgsIDB4MzA1QSwgMHgzMDVDLCAweDMwNUUsCisgICAgMHgzMDYwLCAweDMwNjIsIDB4MzA2NSwgMHgzMDY3LCAweDMwNjksIDB4MzA3MCwgMHgzMDcxLCAweDMwNzMsCisgICAgMHgzMDc0LCAweDMwNzYsIDB4MzA3NywgMHgzMDc5LCAweDMwN0EsIDB4MzA3QywgMHgzMDdELCAweDMwMUQsCisgICAgMHgzMDFFLCAweDAwNUIsIDB4MDA1RCwgMHgzMDA4LCAweDMwMDksIDB4MzAwQSwgMHgzMDBCLCAweDMwMEUsCisgICAgMHgzMDBGLCAweDMwMTAsIDB4MzAxMSwgMHgyMDEyLCAweEZGNjAsIDB4MjUwMCwgMHgyNTAxLCAweDI1MDIsCisgICAgMHgyNTAzLCAweDI1MDQsIDB4MjUwNSwgMHgyNTA2LCAweDI1MDcsIDB4MjUwOCwgMHgyNTA5LCAweDI1MEEsCisgICAgMHgyNTBCLCAweDI1MEMsIDB4MjUwRCwgMHgyNTBFLCAweDI1MEYsIDB4MjUxMCwgMHgyNTExLCAweDI1MTIsCisgICAgMHgyNTEzLCAweDI1MTQsIDB4MjUxNSwgMHgyNTE2LCAweDI1MTcsIDB4MjUxOCwgMHgyNTE5LCAweDI1MUEsCisgICAgMHgyNTFCLCAweDI1MUMsIDB4MjUxRCwgMHgyNTFFLCAweDI1MUYsIDB4MjUyMCwgMHgyNTIxLCAweDI1MjIsCisgICAgMHgyNTIzLCAweDI1MjQsIDB4MjUyNSwgMHgyNTI2LCAweDI1MjcsIDB4MjUyOCwgMHgyNTI5LCAweDI1MkEsCisgICAgMHgyNTJCLCAweDI1MkMsIDB4MjUyRCwgMHgyNTJFLCAweDI1MkYsIDB4MjUzMCwgMHgyNTMxLCAweDI1MzIsCisgICAgMHgyNTMzLCAweDI1MzQsIDB4MjUzNSwgMHgyNTM2LCAweDI1MzcsIDB4MjUzOCwgMHgyNTM5LCAweDI1M0EsCisgICAgMHgyNTNCLCAweDI1M0MsIDB4MjUzRCwgMHgyNTNFLCAweDI1M0YsIDB4MjU0MCwgMHgyNTQxLCAweDI1NDIsCisgICAgMHgyNTQzLCAweDI1NDQsIDB4MjU0NSwgMHgyNTQ2LCAweDI1NDcsIDB4MjU0OCwgMHgyNTQ5LCAweDI1NEEsCisgICAgMHgyNTRCLCAweDI1QjIsIDB4MjBBQywgMHgyMTI2LCAweDIwMzIsIDB4MjAzMywgMHhGQjAwLCAweEZCMDMsCisgICAgMHhGQjA0LCAweDAxMDEsIDB4MDEyQiwgMHgwMTZCLCAweDAxMTMsIDB4MDE0RCwgMHgwMTAwLCAweDAxMkEsCisgICAgMHgwMTZBLCAweDAxMTIsIDB4MDE0QywgMHgyMTVCLCAweDIxNUMsIDB4MjE1RCwgMHgyMTVFLCAweDIxNTMsCisgICAgMHgyMTU0LCAweDIwNzAsIDB4MjA3NCwgMHgyMDc1LCAweDIwNzYsIDB4MjA3NywgMHgyMDc4LCAweDIwNzksCisgICAgMHgyMDgwLCAweDIwODEsIDB4MjA4MiwgMHgyMDgzLCAweDIwODQsIDB4MjA4NSwgMHgyMDg2LCAweDIwODcsCisgICAgMHgyMDg4LCAweDIwODksIDB4MDFDRCwgMHgwMTFBLCAweDAwMDAsIDB4MUVCQywgMHgwMUNGLCAweDAwMDAsCisgICAgMHgwMTI4LCAweDAxRDEsIDB4MDAwMCwgMHgwMUQzLCAweDAxNkUsIDB4MDE2OCwgMHgwMUNFLCAweDAxMUIsCisgICAgMHgwMDAwLCAweDFFQkQsIDB4MDFEMCwgMHgwMDAwLCAweDAxMjksIDB4MDFEMiwgMHgwMDAwLCAweDAxRDQsCisgICAgMHgwMTZGLCAweDAxNjksIDB4MDI1MSwgMHgwMjUxLCAweDAyNTEsIDB4MDFGRCwgMHgwMEU2LCAweDAyNTQsCisgICAgMHgwMjU0LCAweDAyNTQsIDB4MDI1OSwgMHgwMjU5LCAweDAyNTksIDB4MDI1QSwgMHgwMjVBLCAweDAyNUEsCisgICAgMHgwMjVCLCAweDAyNUIsIDB4MDI1QiwgMHgwMDZBLCAweDAxNEIsIDB4MDI3NSwgMHgwMjhDLCAweDAyOEMsCisgICAgMHgwMjhDLCAweDAyOTIsIDB4MDI4MywgMHgwMkQwLCAweDAwMjAsIDB4MDAyMSwgMHgwMDIyLCAweDAwMjMsCisgICAgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LCAweDAwMjgsIDB4MDAyOSwgMHgwMDJBLCAweDAwMkIsCisgICAgMHgwMDJDLCAweDAwMkQsIDB4MDAyRSwgMHgwMDJGLCAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsCisgICAgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LCAweDAwMzgsIDB4MDAzOSwgMHgwMDNBLCAweDAwM0IsCisgICAgMHgwMDNDLCAweDAwM0QsIDB4MDAzRSwgMHgwMDNGLCAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsCisgICAgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LCAweDAwNDgsIDB4MDA0OSwgMHgwMDRBLCAweDAwNEIsCisgICAgMHgwMDRDLCAweDAwNEQsIDB4MDA0RSwgMHgwMDRGLCAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsCisgICAgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LCAweDAwNTgsIDB4MDA1OSwgMHgwMDVBLCAweDAwNUIsCisgICAgMHgwMEE1LCAweDAwNUQsIDB4MDA1RSwgMHgwMDVGLCAweDAwNjAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsCisgICAgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LCAweDAwNjgsIDB4MDA2OSwgMHgwMDZBLCAweDAwNkIsCisgICAgMHgwMDZDLCAweDAwNkQsIDB4MDA2RSwgMHgwMDZGLCAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsCisgICAgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LCAweDAwNzgsIDB4MDA3OSwgMHgwMDdBLCAweDAwN0IsCisgICAgMHgwMEE2LCAweDAwN0QsIDB4MDMwMywgMHgwMkJDLCAweDAwNUMsIDB4MDJCQiwgMHgwMDdDLCAweDAwN0UsCisgICAgMHgwMEExLCAweDAwQTIsIDB4MDBBMywgMHgyMDQ0LCAweDAxOTIsIDB4MDBBNywgMHgwMEE0LCAweDIwMUMsCisgICAgMHgwMEFCLCAweDIwMzksIDB4MjAzQSwgMHhGQjAxLCAweEZCMDIsIDB4MjAxMiwgMHgyMDIwLCAweDIwMjEsCisgICAgMHgwMEI3LCAweDAwQjYsIDB4MjAyMiwgMHgyMDFBLCAweDIwMUUsIDB4MjAxRCwgMHgwMEJCLCAweDIwMjYsCisgICAgMHgyMDMwLCAweDAwQkYsIDB4MDMwMSwgMHgwMzAyLCAweDAwQUYsIDB4MDMwNiwgMHgwMzA3LCAweDAzMDgsCisgICAgMHgwMzBBLCAweDAwQjgsIDB4MDMwQiwgMHgwMzI4LCAweDAzMEMsIDB4MDMzNiwgMHgwMEM2LCAweDAwQUEsCisgICAgMHgwMTQxLCAweDAwRDgsIDB4MDE1MiwgMHgwMEJBLCAweDAwRTYsIDB4MDEzMSwgMHgwMTQyLCAweDAwRjgsCisgICAgMHgwMTUzLCAweDAwREYsIDB4MDAyRCwgMHgwMEE5LCAweDAwQUMsIDB4MDBBRSwgMHgwMEIwLCAweDAwQjEsCisgICAgMHgwMEIyLCAweDAwQjMsIDB4MDBCNSwgMHgwMEI5LCAweDAwQkMsIDB4MDBCRCwgMHgwMEJFLCAweDAwQzAsCisgICAgMHgwMEMxLCAweDAwQzIsIDB4MDBDMywgMHgwMEM0LCAweDAwQzUsIDB4MDBDNywgMHgwMEM4LCAweDAwQzksCisgICAgMHgwMENBLCAweDAwQ0IsIDB4MDBDQywgMHgwMENELCAweDAwQ0UsIDB4MDBDRiwgMHgwMEQwLCAweDAwRDEsCisgICAgMHgwMEQyLCAweDAwRDMsIDB4MDBENCwgMHgwMEQ1LCAweDAwRDYsIDB4MDBENywgMHgwMEQ5LCAweDAwREEsCisgICAgMHgwMERCLCAweDAwREMsIDB4MDBERCwgMHgwMERFLCAweDAwRTAsIDB4MDBFMSwgMHgwMEUyLCAweDAwRTMsCisgICAgMHgwMEU0LCAweDAwRTUsIDB4MDBFNywgMHgwMEU4LCAweDAwRTksIDB4MDBFQSwgMHgwMEVCLCAweDAwRUMsCisgICAgMHgwMEVELCAweDAwRUUsIDB4MDBFRiwgMHgwMEYwLCAweDAwRjEsIDB4MDBGMiwgMHgwMEYzLCAweDAwRjQsCisgICAgMHgwMEY1LCAweDAwRjYsIDB4MDBGNywgMHgwMEY5LCAweDAwRkEsIDB4MDBGQiwgMHgwMEZDLCAweDAwRkQsCisgICAgMHgwMEZFLCAweDAwRkYsIDB4MDE2MCwgMHgwMTc4LCAweDAxN0QsIDB4MDMwNSwgMHgwMTYxLCAweDIxMjIsCisgICAgMHgwMTdFLCAweDAwMzAsIDB4MjBBQywgMHgyMTI2LCAweDIwMzIsIDB4MjAzMywgMHhGQjAwLCAweEZCMDMsCisgICAgMHhGQjA0LCAweDAxMDEsIDB4MDEyQiwgMHgwMTZCLCAweDAxMTMsIDB4MDE0RCwgMHgwMTAwLCAweDAxMkEsCisgICAgMHgwMTZBLCAweDAxMTIsIDB4MDE0QywgMHgyMTVCLCAweDIxNUMsIDB4MjE1RCwgMHgyMTVFLCAweDIxNTMsCisgICAgMHgyMTU0LCAweDIwNzAsIDB4MjA3NCwgMHgyMDc1LCAweDIwNzYsIDB4MjA3NywgMHgyMDc4LCAweDIwNzksCisgICAgMHgyMDgwLCAweDIwODEsIDB4MjA4MiwgMHgyMDgzLCAweDIwODQsIDB4MjA4NSwgMHgyMDg2LCAweDIwODcsCisgICAgMHgyMDg4LCAweDIwODksIDB4MDFDRCwgMHgwMTFBLCAweDAwMDAsIDB4MUVCQywgMHgwMUNGLCAweDAwMDAsCisgICAgMHgwMTI4LCAweDAxRDEsIDB4MDAwMCwgMHgwMUQzLCAweDAxNkUsIDB4MDE2OCwgMHgwMUNFLCAweDAxMUIsCisgICAgMHgwMDAwLCAweDFFQkQsIDB4MDFEMCwgMHgwMDAwLCAweDAxMjksIDB4MDFEMiwgMHgwMDAwLCAweDAxRDQsCisgICAgMHgwMTZGLCAweDAxNjksIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsCisgICAgMHgwMDM2LCAweDAwMzcsIDB4MDAzOCwgMHgwMDM5LCAweDAzMzYsIDB4MDAyRCwgMHgwMDNELCAweDAwMkMsCisgICAgMHgwMDI4LCAweDAwMjksIDB4MDAyRSwgMHgwMDJGLCAweDAwM0EsIDB4MDAzQiwgMHgwMDMwLCAweDAwMzEsCisgICAgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgMHgwMDM4LCAweDAwMzksCisgICAgMHgwMzM2LCAweDAwMkQsIDB4MDAzRCwgMHgwMDJDLCAweDAwMjgsIDB4MDAyOSwgMHgwMDJFLCAweDAwMkYsCisgICAgMHgwMDNBLCAweDAwM0IsIDB4MDBCNywgMHgyMEFDLCAweDAwMDAsIDB4MjE1MywgMHgyMTU0LCAweDAwQkUsCisgICAgMHgyMTU1LCAweDIxNTYsIDB4MjE1NywgMHgyMTU4LCAweDIxNTksIDB4MjE1QSwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIxNUIsIDB4MjE1QywgMHgyMTVELCAweDIxNUUsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCisgICAgMHgwMDM4LCAweDAwMzksIDB4MDAzMCwgMHgyMTYzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMTcwLCAweDIxNzEsCisgICAgMHgyMTcyLCAweDIxNzMsIDB4MjE3NCwgMHgyMTc1LCAweDIxNzYsIDB4MjE3NywgMHgyMTc4LCAweDIxNzksCisgICAgMHgyMTdBLCAweDIxN0IsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjE2MCwgMHgyMTYxLCAweDIxNjIsCisgICAgMHgyMTYzLCAweDIxNjQsIDB4MjE2NSwgMHgyMTY2LCAweDIxNjcsIDB4MjE2OCwgMHgyMTY5LCAweDIxNkEsCisgICAgMHgyMTZCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsCisgICAgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywgMHgwMDQ4LCAweDAwNDksIDB4MDA0QSwgMHgwMDRCLCAweDAwNEMsCisgICAgMHgwMDRELCAweDAwNEUsIDB4MDA0RiwgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsCisgICAgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywgMHgwMDU4LCAweDAwNTksIDB4MDA1QSwgMHgzMDQyLCAweDMwNDQsCisgICAgMHgzMDQ2LCAweDMwNDgsIDB4MzA0QSwgMHgzMDRCLCAweDMwNEQsIDB4MzA0RiwgMHgzMDUxLCAweDMwNTMsCisgICAgMHgzMDU1LCAweDMwNTcsIDB4MzA1OSwgMHgzMDVCLCAweDMwNUQsIDB4MzA1RiwgMHgzMDYxLCAweDMwNjQsCisgICAgMHgzMDY2LCAweDMwNjgsIDB4MzA2QSwgMHgzMDZCLCAweDMwNkMsIDB4MzA2RCwgMHgzMDZFLCAweDMwNkYsCisgICAgMHgzMDcyLCAweDMwNzUsIDB4MzA3OCwgMHgzMDdCLCAweDMwN0UsIDB4MzA3RiwgMHgzMDgwLCAweDMwODEsCisgICAgMHgzMDgyLCAweDMwODQsIDB4MzA4NiwgMHgzMDg4LCAweDMwODksIDB4MzA4QSwgMHgzMDhCLCAweDMwOEMsCisgICAgMHgzMDhELCAweDMwOEYsIDB4MzA5MCwgMHgzMDkxLCAweDMwOTIsIDB4MzA5MywgMHgzMEEyLCAweDMwQTQsCisgICAgMHgzMEE2LCAweDMwQTgsIDB4MzBBQSwgMHgzMEFCLCAweDMwQUQsIDB4MzBBRiwgMHgzMEIxLCAweDMwQjMsCisgICAgMHgzMEI1LCAweDMwQjcsIDB4MzBCOSwgMHgzMEJCLCAweDMwQkQsIDB4MzBCRiwgMHgzMEMxLCAweDMwQzQsCisgICAgMHgzMEM2LCAweDMwQzgsIDB4MzBDQSwgMHgzMENCLCAweDMwQ0MsIDB4MzBDRCwgMHgzMENFLCAweDMwQ0YsCisgICAgMHgzMEQyLCAweDMwRDUsIDB4MzBEOCwgMHgzMERCLCAweDMwREUsIDB4MzBERiwgMHgzMEUwLCAweDMwRTEsCisgICAgMHgzMEUyLCAweDMwRTQsIDB4MzBFNiwgMHgzMEU4LCAweDMwRTksIDB4MzBFQSwgMHgzMEVCLCAweDMwRUMsCisgICAgMHgzMEVELCAweDMwRUYsIDB4MzBGMCwgMHgzMEYxLCAweDMwRjIsIDB4MzBGMywgMHgzMjIwLCAweDMyMjEsCisgICAgMHgzMjIyLCAweDMyMjMsIDB4MzIyNCwgMHgzMjI1LCAweDMyMjYsIDB4MzIyNywgMHgzMjI4LCAweDMyMjksCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4NTVCNiwgMHg1NDA4LCAweDZDRUIsIDB4NTU0RiwgMHg3QjU0LCAweDRGOEIsCisgICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCisgICAgMHgwMDM4LCAweDAwMzksIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsCisgICAgMHgwMDM2LCAweDAwMzcsIDB4MDAzOCwgMHgwMDM5LCAweDMwNjMsIDB4NjI0RCwgMHgzMDA3LCAweDRFMDAsCisgICAgMHg0RThDLCAweDRFMDksIDB4NTZEQiwgMHg0RTk0LCAweDUxNkQsIDB4NEUwMywgMHg1MTZCLCAweDRFNUQsCisgICAgMHg1MzQxLCAweDMwMDcsIDB4NEUwMCwgMHg0RThDLCAweDRFMDksIDB4NTZEQiwgMHg0RTk0LCAweDUxNkQsCisgICAgMHg0RTAzLCAweDUxNkIsIDB4NEU1RCwgMHg1MzQxLCAweDMwMDcsIDB4NEUwMCwgMHg0RThDLCAweDRFMDksCisgICAgMHg1NkRCLCAweDRFOTQsIDB4NTE2RCwgMHg0RTAzLCAweDUxNkIsIDB4NEU1RCwgMHgzMDY0LCAweDYyNEQsCisgICAgMHg0RTAwLCAweDRFOEMsIDB4NEUwOSwgMHg1NkRCLCAweDRFOTQsIDB4NTE2RCwgMHg0RTAzLCAweDUxNkIsCisgICAgMHg0RTVELCAweDUzNDEsIDB4MzAwNywgMHg0RTAwLCAweDRFOEMsIDB4NEUwOSwgMHg1NkRCLCAweDRFOTQsCisgICAgMHg1MTZELCAweDRFMDMsIDB4NTE2QiwgMHg0RTVELCAweDUzNDEsIDB4MzBCMywgMHgzMDYzLCAweDMwQzMsCisgICAgMHgzMEE5LCAweDAwMDAsIDB4MDAwMCwgMHgyNDYwLCAweDI0NjEsIDB4MjQ2MiwgMHgyNDYzLCAweDI0NjQsCisgICAgMHgyNDY1LCAweDI0NjYsIDB4MjQ2NywgMHgyNDY4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDI0RDAsIDB4MjREMSwgMHgyNEQyLCAweDI0RDMsIDB4MjRENCwgMHgyNEQ1LCAweDI0RDYsCisgICAgMHgyNEQ3LCAweDI0RDgsIDB4MjREOSwgMHgyNERBLCAweDI0REIsIDB4MjREQywgMHgyNERELCAweDI0REUsCisgICAgMHgyNERGLCAweDI0RTAsIDB4MjRFMSwgMHgyNEUyLCAweDI0RTMsIDB4MjRFNCwgMHgyNEU1LCAweDI0RTYsCisgICAgMHgyNEU3LCAweDI0RTgsIDB4MjRFOSwgMHgyNEI2LCAweDI0QjcsIDB4MjRCOCwgMHgyNEI5LCAweDI0QkEsCisgICAgMHgyNEJCLCAweDI0QkMsIDB4MjRCRCwgMHgyNEJFLCAweDI0QkYsIDB4MjRDMCwgMHgyNEMxLCAweDI0QzIsCisgICAgMHgyNEMzLCAweDI0QzQsIDB4MjRDNSwgMHgyNEM2LCAweDI0QzcsIDB4MjRDOCwgMHgyNEM5LCAweDI0Q0EsCisgICAgMHgyNENCLCAweDI0Q0MsIDB4MjRDRCwgMHgyNENFLCAweDI0Q0YsIDB4MzA0MiwgMHgzMDQ0LCAweDMwNDYsCisgICAgMHgzMDQ4LCAweDMwNEEsIDB4MzA0QiwgMHgzMDRELCAweDMwNEYsIDB4MzA1MSwgMHgzMDUzLCAweDMwNTUsCisgICAgMHgzMDU3LCAweDMwNTksIDB4MzA1QiwgMHgzMDVELCAweDMwNUYsIDB4MzA2MSwgMHgzMDY0LCAweDMwNjYsCisgICAgMHgzMDY4LCAweDMwNkEsIDB4MzA2QiwgMHgzMDZDLCAweDMwNkQsIDB4MzA2RSwgMHgzMDZGLCAweDMwNzIsCisgICAgMHgzMDc1LCAweDMwNzgsIDB4MzA3QiwgMHgzMDdFLCAweDMwN0YsIDB4MzA4MCwgMHgzMDgxLCAweDMwODIsCisgICAgMHgzMDg0LCAweDMwODYsIDB4MzA4OCwgMHgzMDg5LCAweDMwOEEsIDB4MzA4QiwgMHgzMDhDLCAweDMwOEQsCisgICAgMHgzMDhGLCAweDMwOTAsIDB4MzA5MSwgMHgzMDkyLCAweDMwOTMsIDB4MzJEMCwgMHgzMkQxLCAweDMyRDIsCisgICAgMHgzMkQzLCAweDMyRDQsIDB4MzJENSwgMHgzMkQ2LCAweDMyRDcsIDB4MzJEOCwgMHgzMkQ5LCAweDMyREEsCisgICAgMHgzMkRCLCAweDMyREMsIDB4MzJERCwgMHgzMkRFLCAweDMyREYsIDB4MzJFMCwgMHgzMkUxLCAweDMyRTIsCisgICAgMHgzMkUzLCAweDMyRTQsIDB4MzJFNSwgMHgzMkU2LCAweDMyRTcsIDB4MzJFOCwgMHgzMkU5LCAweDMyRUEsCisgICAgMHgzMkVCLCAweDMyRUMsIDB4MzJFRCwgMHgzMkVFLCAweDMyRUYsIDB4MzJGMCwgMHgzMkYxLCAweDMyRjIsCisgICAgMHgzMkYzLCAweDMyRjQsIDB4MzJGNSwgMHgzMkY2LCAweDMyRjcsIDB4MzJGOCwgMHgzMkY5LCAweDMyRkEsCisgICAgMHgzMkZCLCAweDMyRkMsIDB4MzJGRCwgMHgzMkZFLCAweDMwRjMsIDB4MzI4MCwgMHgzMjgxLCAweDMyODIsCisgICAgMHgzMjgzLCAweDMyODQsIDB4MzI4NSwgMHgzMjg2LCAweDMyODcsIDB4MzI4OCwgMHgzMjg5LCAweDMyOTAsCisgICAgMHgzMjhBLCAweDMyOEIsIDB4MzI4QywgMHgzMjhELCAweDMyOEUsIDB4MzI4RiwgMHg4QUJGLCAweDMyOUYsCisgICAgMHg1MjZGLCAweDZFMUIsIDB4NkExOSwgMHg2QjIwLCAweDU3RkEsIDB4Nzk4MSwgMHgzMkEwLCAweDMyQTEsCisgICAgMHgzMjlCLCAweDMyOUEsIDB4MzJBMywgMHgzMkEyLCAweDMyOTcsIDB4NTFGQSwgMHgzMjlDLCAweDMyOTUsCisgICAgMHg2RTA4LCAweDU4OTcsIDB4NTU0RiwgMHg3QjU0LCAweDRGOEIsIDB4OTZGQiwgMHgyNUNDLCAweDAwMzAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsCisgICAgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LCAweDAwNjgsIDB4MDA2OSwgMHgwMDZBLCAweDAwNkIsCisgICAgMHgwMDZDLCAweDAwNkQsIDB4MDA2RSwgMHgwMDZGLCAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsCisgICAgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LCAweDAwNzgsIDB4MDA3OSwgMHgwMDdBLCAweDAwNDEsCisgICAgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywgMHgwMDQ4LCAweDAwNDksCisgICAgMHgwMDRBLCAweDAwNEIsIDB4MDA0QywgMHgwMDRELCAweDAwNEUsIDB4MDA0RiwgMHgwMDUwLCAweDAwNTEsCisgICAgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywgMHgwMDU4LCAweDAwNTksCisgICAgMHgwMDVBLCAweDMwNDIsIDB4MzA0NCwgMHgzMDQ2LCAweDMwNDgsIDB4MzA0QSwgMHgzMDRCLCAweDMwNEQsCisgICAgMHgzMDRGLCAweDMwNTEsIDB4MzA1MywgMHgzMDU1LCAweDMwNTcsIDB4MzA1OSwgMHgzMDVCLCAweDMwNUQsCisgICAgMHgzMDVGLCAweDMwNjEsIDB4MzA2NCwgMHgzMDY2LCAweDMwNjgsIDB4MzA2QSwgMHgzMDZCLCAweDMwNkMsCisgICAgMHgzMDZELCAweDMwNkUsIDB4MzA2RiwgMHgzMDcyLCAweDMwNzUsIDB4MzA3OCwgMHgzMDdCLCAweDMwN0UsCisgICAgMHgzMDdGLCAweDMwODAsIDB4MzA4MSwgMHgzMDgyLCAweDMwODQsIDB4MzA4NiwgMHgzMDg4LCAweDMwODksCisgICAgMHgzMDhBLCAweDMwOEIsIDB4MzA4QywgMHgzMDhELCAweDMwOEYsIDB4MzA5MCwgMHgzMDkxLCAweDMwOTIsCisgICAgMHgzMDkzLCAweDMwQTIsIDB4MzBBNCwgMHgzMEE2LCAweDMwQTgsIDB4MzBBQSwgMHgzMEFCLCAweDMwQUQsCisgICAgMHgzMEFGLCAweDMwQjEsIDB4MzBCMywgMHgzMEI1LCAweDMwQjcsIDB4MzBCOSwgMHgzMEJCLCAweDMwQkQsCisgICAgMHgzMEJGLCAweDMwQzEsIDB4MzBDNCwgMHgzMEM2LCAweDMwQzgsIDB4MzBDQSwgMHgzMENCLCAweDMwQ0MsCisgICAgMHgzMENELCAweDMwQ0UsIDB4MzBDRiwgMHgzMEQyLCAweDMwRDUsIDB4MzBEOCwgMHgzMERCLCAweDMwREUsCisgICAgMHgzMERGLCAweDMwRTAsIDB4MzBFMSwgMHgzMEUyLCAweDMwRTQsIDB4MzBFNiwgMHgzMEU4LCAweDMwRTksCisgICAgMHgzMEVBLCAweDMwRUIsIDB4MzBFQywgMHgzMEVELCAweDMwRUYsIDB4MzBGMCwgMHgzMEYxLCAweDMwRjIsCisgICAgMHgzMEYzLCAweDY1RTUsIDB4NjcwOCwgMHg3MDZCLCAweDZDMzQsIDB4NjcyOCwgMHg5MUQxLCAweDU3MUYsCisgICAgMHg1NTRGLCAweDdCNTQsIDB4NEY4QiwgMHgyNUNGLCAweDAwMzAsIDB4MDAwMCwgMHgwMDMxLCAweDAwMDAsCisgICAgMHgwMDMyLCAweDAwMDAsIDB4MDAzMywgMHgwMDAwLCAweDAwMzQsIDB4MDAwMCwgMHgwMDM1LCAweDAwMDAsCisgICAgMHgwMDM2LCAweDAwMDAsIDB4MDAzNywgMHgwMDAwLCAweDAwMzgsIDB4MDAwMCwgMHgwMDM5LCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsCisgICAgMHgwMDY2LCAweDAwNjcsIDB4MDA2OCwgMHgwMDY5LCAweDAwNkEsIDB4MDA2QiwgMHgwMDZDLCAweDAwNkQsCisgICAgMHgwMDZFLCAweDAwNkYsIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsCisgICAgMHgwMDc2LCAweDAwNzcsIDB4MDA3OCwgMHgwMDc5LCAweDAwN0EsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsCisgICAgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LCAweDAwNDgsIDB4MDA0OSwgMHgwMDRBLCAweDAwNEIsCisgICAgMHgwMDRDLCAweDAwNEQsIDB4MDA0RSwgMHgwMDRGLCAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsCisgICAgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LCAweDAwNTgsIDB4MDA1OSwgMHgwMDVBLCAweDMwNDIsCisgICAgMHgzMDQ0LCAweDMwNDYsIDB4MzA0OCwgMHgzMDRBLCAweDMwNEIsIDB4MzA0RCwgMHgzMDRGLCAweDMwNTEsCisgICAgMHgzMDUzLCAweDMwNTUsIDB4MzA1NywgMHgzMDU5LCAweDMwNUIsIDB4MzA1RCwgMHgzMDVGLCAweDMwNjEsCisgICAgMHgzMDY0LCAweDMwNjYsIDB4MzA2OCwgMHgzMDZBLCAweDMwNkIsIDB4MzA2QywgMHgzMDZELCAweDMwNkUsCisgICAgMHgzMDZGLCAweDMwNzIsIDB4MzA3NSwgMHgzMDc4LCAweDMwN0IsIDB4MzA3RSwgMHgzMDdGLCAweDMwODAsCisgICAgMHgzMDgxLCAweDMwODIsIDB4MzA4NCwgMHgzMDg2LCAweDMwODgsIDB4MzA4OSwgMHgzMDhBLCAweDMwOEIsCisgICAgMHgzMDhDLCAweDMwOEQsIDB4MzA4RiwgMHgzMDkwLCAweDMwOTEsIDB4MzA5MiwgMHgzMDkzLCAweDMwQTIsCisgICAgMHgzMEE0LCAweDMwQTYsIDB4MzBBOCwgMHgzMEFBLCAweDMwQUIsIDB4MzBBRCwgMHgzMEFGLCAweDMwQjEsCisgICAgMHgzMEIzLCAweDMwQjUsIDB4MzBCNywgMHgzMEI5LCAweDMwQkIsIDB4MzBCRCwgMHgzMEJGLCAweDMwQzEsCisgICAgMHgzMEM0LCAweDMwQzYsIDB4MzBDOCwgMHgzMENBLCAweDMwQ0IsIDB4MzBDQywgMHgzMENELCAweDMwQ0UsCisgICAgMHgzMENGLCAweDMwRDIsIDB4MzBENSwgMHgzMEQ4LCAweDMwREIsIDB4MzBERSwgMHgzMERGLCAweDMwRTAsCisgICAgMHgzMEUxLCAweDMwRTIsIDB4MzBFNCwgMHgzMEU2LCAweDMwRTgsIDB4MzBFOSwgMHgzMEVBLCAweDMwRUIsCisgICAgMHgzMEVDLCAweDMwRUQsIDB4MzBFRiwgMHgzMEYwLCAweDMwRjEsIDB4MzBGMiwgMHgzMEYzLCAweDY1RTUsCisgICAgMHg2NzA4LCAweDcwNkIsIDB4NkMzNCwgMHg2NzI4LCAweDkxRDEsIDB4NTcxRiwgMHg4Q0EwLCAweDUyREQsCisgICAgMHg1NTRGLCAweDdCNTQsIDB4NEY4QiwgMHgyNUExLCAweDI1QTEsIDB4MDAzMCwgMHgwMDAwLCAweDAwMzEsCisgICAgMHgwMDAwLCAweDAwMzIsIDB4MDAwMCwgMHgwMDMzLCAweDAwMDAsIDB4MDAzNCwgMHgwMDAwLCAweDAwMzUsCisgICAgMHgwMDAwLCAweDAwMzYsIDB4MDAwMCwgMHgwMDM3LCAweDAwMDAsIDB4MDAzOCwgMHgwMDAwLCAweDAwMzksCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsCisgICAgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywgMHgwMDY4LCAweDAwNjksIDB4MDA2QSwgMHgwMDZCLCAweDAwNkMsCisgICAgMHgwMDZELCAweDAwNkUsIDB4MDA2RiwgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsCisgICAgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywgMHgwMDc4LCAweDAwNzksIDB4MDA3QSwgMHgwMDQxLCAweDAwNDIsCisgICAgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsIDB4MDA0OCwgMHgwMDQ5LCAweDAwNEEsCisgICAgMHgwMDRCLCAweDAwNEMsIDB4MDA0RCwgMHgwMDRFLCAweDAwNEYsIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsCisgICAgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsIDB4MDA1OCwgMHgwMDU5LCAweDAwNUEsCisgICAgMHgzMDQyLCAweDMwNDQsIDB4MzA0NiwgMHgzMDQ4LCAweDMwNEEsIDB4MzA0QiwgMHgzMDRELCAweDMwNEYsCisgICAgMHgzMDUxLCAweDMwNTMsIDB4MzA1NSwgMHgzMDU3LCAweDMwNTksIDB4MzA1QiwgMHgzMDVELCAweDMwNUYsCisgICAgMHgzMDYxLCAweDMwNjQsIDB4MzA2NiwgMHgzMDY4LCAweDMwNkEsIDB4MzA2QiwgMHgzMDZDLCAweDMwNkQsCisgICAgMHgzMDZFLCAweDMwNkYsIDB4MzA3MiwgMHgzMDc1LCAweDMwNzgsIDB4MzA3QiwgMHgzMDdFLCAweDMwN0YsCisgICAgMHgzMDgwLCAweDMwODEsIDB4MzA4MiwgMHgzMDg0LCAweDMwODYsIDB4MzA4OCwgMHgzMDg5LCAweDMwOEEsCisgICAgMHgzMDhCLCAweDMwOEMsIDB4MzA4RCwgMHgzMDhGLCAweDMwOTAsIDB4MzA5MSwgMHgzMDkyLCAweDMwOTMsCisgICAgMHgzMEEyLCAweDMwQTQsIDB4MzBBNiwgMHgzMEE4LCAweDMwQUEsIDB4MzBBQiwgMHgzMEFELCAweDMwQUYsCisgICAgMHgzMEIxLCAweDMwQjMsIDB4MzBCNSwgMHgzMEI3LCAweDMwQjksIDB4MzBCQiwgMHgzMEJELCAweDMwQkYsCisgICAgMHgzMEMxLCAweDMwQzQsIDB4MzBDNiwgMHgzMEM4LCAweDMwQ0EsIDB4MzBDQiwgMHgzMENDLCAweDMwQ0QsCisgICAgMHgzMENFLCAweDMwQ0YsIDB4MzBEMiwgMHgzMEQ1LCAweDMwRDgsIDB4MzBEQiwgMHgzMERFLCAweDMwREYsCisgICAgMHgzMEUwLCAweDMwRTEsIDB4MzBFMiwgMHgzMEU0LCAweDMwRTYsIDB4MzBFOCwgMHgzMEU5LCAweDMwRUEsCisgICAgMHgzMEVCLCAweDMwRUMsIDB4MzBFRCwgMHgzMEVGLCAweDMwRjAsIDB4MzBGMSwgMHgzMEYyLCAweDMwRjMsCisgICAgMHg2NUU1LCAweDY3MDgsIDB4NzA2QiwgMHg2QzM0LCAweDY3MjgsIDB4OTFEMSwgMHg1NzFGLCAweDU1NEYsCisgICAgMHg3QjU0LCAweDRGOEIsIDB4MjVBMCwgMHgwMDMwLCAweDAwMDAsIDB4MDAzMSwgMHgwMDAwLCAweDAwMzIsCisgICAgMHgwMDAwLCAweDAwMzMsIDB4MDAwMCwgMHgwMDM0LCAweDAwMDAsIDB4MDAzNSwgMHgwMDAwLCAweDAwMzYsCisgICAgMHgwMDAwLCAweDAwMzcsIDB4MDAwMCwgMHgwMDM4LCAweDAwMDAsIDB4MDAzOSwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsCisgICAgMHgwMDY3LCAweDAwNjgsIDB4MDA2OSwgMHgwMDZBLCAweDAwNkIsIDB4MDA2QywgMHgwMDZELCAweDAwNkUsCisgICAgMHgwMDZGLCAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsCisgICAgMHgwMDc3LCAweDAwNzgsIDB4MDA3OSwgMHgwMDdBLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsCisgICAgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywgMHgwMDQ4LCAweDAwNDksIDB4MDA0QSwgMHgwMDRCLCAweDAwNEMsCisgICAgMHgwMDRELCAweDAwNEUsIDB4MDA0RiwgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsCisgICAgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywgMHgwMDU4LCAweDAwNTksIDB4MDA1QSwgMHgzMDQyLCAweDMwNDQsCisgICAgMHgzMDQ2LCAweDMwNDgsIDB4MzA0QSwgMHgzMDRCLCAweDMwNEQsIDB4MzA0RiwgMHgzMDUxLCAweDMwNTMsCisgICAgMHgzMDU1LCAweDMwNTcsIDB4MzA1OSwgMHgzMDVCLCAweDMwNUQsIDB4MzA1RiwgMHgzMDYxLCAweDMwNjQsCisgICAgMHgzMDY2LCAweDMwNjgsIDB4MzA2QSwgMHgzMDZCLCAweDMwNkMsIDB4MzA2RCwgMHgzMDZFLCAweDMwNkYsCisgICAgMHgzMDcyLCAweDMwNzUsIDB4MzA3OCwgMHgzMDdCLCAweDMwN0UsIDB4MzA3RiwgMHgzMDgwLCAweDMwODEsCisgICAgMHgzMDgyLCAweDMwODQsIDB4MzA4NiwgMHgzMDg4LCAweDMwODksIDB4MzA4QSwgMHgzMDhCLCAweDMwOEMsCisgICAgMHgzMDhELCAweDMwOEYsIDB4MzA5MCwgMHgzMDkxLCAweDMwOTIsIDB4MzA5MywgMHgzMEEyLCAweDMwQTQsCisgICAgMHgzMEE2LCAweDMwQTgsIDB4MzBBQSwgMHgzMEFCLCAweDMwQUQsIDB4MzBBRiwgMHgzMEIxLCAweDMwQjMsCisgICAgMHgzMEI1LCAweDMwQjcsIDB4MzBCOSwgMHgzMEJCLCAweDMwQkQsIDB4MzBCRiwgMHgzMEMxLCAweDMwQzQsCisgICAgMHgzMEM2LCAweDMwQzgsIDB4MzBDQSwgMHgzMENCLCAweDMwQ0MsIDB4MzBDRCwgMHgzMENFLCAweDMwQ0YsCisgICAgMHgzMEQyLCAweDMwRDUsIDB4MzBEOCwgMHgzMERCLCAweDMwREUsIDB4MzBERiwgMHgzMEUwLCAweDMwRTEsCisgICAgMHgzMEUyLCAweDMwRTQsIDB4MzBFNiwgMHgzMEU4LCAweDMwRTksIDB4MzBFQSwgMHgzMEVCLCAweDMwRUMsCisgICAgMHgzMEVELCAweDMwRUYsIDB4MzBGMCwgMHgzMEYxLCAweDMwRjIsIDB4MzBGMywgMHg2NUU1LCAweDY3MDgsCisgICAgMHg3MDZCLCAweDZDMzQsIDB4NjcyOCwgMHg5MUQxLCAweDU3MUYsIDB4NTU0RiwgMHg3QjU0LCAweDRGOEIsCisgICAgMHgwMDMwLCAweDAwMDAsIDB4MDAzMSwgMHgwMDAwLCAweDAwMzIsIDB4MDAwMCwgMHgwMDMzLCAweDAwMDAsCisgICAgMHgwMDM0LCAweDAwMDAsIDB4MDAzNSwgMHgwMDAwLCAweDAwMzYsIDB4MDAwMCwgMHgwMDM3LCAweDAwMDAsCisgICAgMHgwMDM4LCAweDAwMDAsIDB4MDAzOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwNjEsCisgICAgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywgMHgwMDY4LCAweDAwNjksCisgICAgMHgwMDZBLCAweDAwNkIsIDB4MDA2QywgMHgwMDZELCAweDAwNkUsIDB4MDA2RiwgMHgwMDcwLCAweDAwNzEsCisgICAgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywgMHgwMDc4LCAweDAwNzksCisgICAgMHgwMDdBLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCisgICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0QSwgMHgwMDRCLCAweDAwNEMsIDB4MDA0RCwgMHgwMDRFLCAweDAwNEYsCisgICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCisgICAgMHgwMDU4LCAweDAwNTksIDB4MDA1QSwgMHgzMDQyLCAweDMwNDQsIDB4MzA0NiwgMHgzMDQ4LCAweDMwNEEsCisgICAgMHgzMDRCLCAweDMwNEQsIDB4MzA0RiwgMHgzMDUxLCAweDMwNTMsIDB4MzA1NSwgMHgzMDU3LCAweDMwNTksCisgICAgMHgzMDVCLCAweDMwNUQsIDB4MzA1RiwgMHgzMDYxLCAweDMwNjQsIDB4MzA2NiwgMHgzMDY4LCAweDMwNkEsCisgICAgMHgzMDZCLCAweDMwNkMsIDB4MzA2RCwgMHgzMDZFLCAweDMwNkYsIDB4MzA3MiwgMHgzMDc1LCAweDMwNzgsCisgICAgMHgzMDdCLCAweDMwN0UsIDB4MzA3RiwgMHgzMDgwLCAweDMwODEsIDB4MzA4MiwgMHgzMDg0LCAweDMwODYsCisgICAgMHgzMDg4LCAweDMwODksIDB4MzA4QSwgMHgzMDhCLCAweDMwOEMsIDB4MzA4RCwgMHgzMDhGLCAweDMwOTAsCisgICAgMHgzMDkxLCAweDMwOTIsIDB4MzA5MywgMHgzMEEyLCAweDMwQTQsIDB4MzBBNiwgMHgzMEE4LCAweDMwQUEsCisgICAgMHgzMEFCLCAweDMwQUQsIDB4MzBBRiwgMHgzMEIxLCAweDMwQjMsIDB4MzBCNSwgMHgzMEI3LCAweDMwQjksCisgICAgMHgzMEJCLCAweDMwQkQsIDB4MzBCRiwgMHgzMEMxLCAweDMwQzQsIDB4MzBDNiwgMHgzMEM4LCAweDMwQ0EsCisgICAgMHgzMENCLCAweDMwQ0MsIDB4MzBDRCwgMHgzMENFLCAweDMwQ0YsIDB4MzBEMiwgMHgzMEQ1LCAweDMwRDgsCisgICAgMHgzMERCLCAweDMwREUsIDB4MzBERiwgMHgzMEUwLCAweDMwRTEsIDB4MzBFMiwgMHgzMEU0LCAweDMwRTYsCisgICAgMHgzMEU4LCAweDMwRTksIDB4MzBFQSwgMHgzMEVCLCAweDMwRUMsIDB4MzBFRCwgMHgzMEVGLCAweDMwRjAsCisgICAgMHgzMEYxLCAweDMwRjIsIDB4MzBGMywgMHg2NUU1LCAweDY3MDgsIDB4NzA2QiwgMHg2QzM0LCAweDY3MjgsCisgICAgMHg5MUQxLCAweDU3MUYsIDB4NTU0RiwgMHg3QjU0LCAweDRGOEIsIDB4MjVBMCwgMHgzM0MyLCAweDMzQ0QsCisgICAgMHgyMTE2LCAweDAwMDAsIDB4MzNEOCwgMHgzM0RBLCAweDIxMjEsIDB4MjEyMiwgMHgwMDAwLCAweDIxMDAsCisgICAgMHgzM0MyLCAweDAwMDAsIDB4MzNDNCwgMHgyMTA1LCAweDMzOTcsIDB4MzM3MSwgMHgzMzk4LCAweDIxMTMsCisgICAgMHgzMzhELCAweDMzOUIsIDB4MzM5NiwgMHgwMDAwLCAweDAwMDAsIDB4MzNENywgMHgzM0Q4LCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MzMwMSwgMHgzMzAyLCAweDMzMDQsIDB4MzMwNiwgMHgwMDAwLCAweDMzMDgsCisgICAgMHgwMDAwLCAweDMzMDcsIDB4MzMwQSwgMHgwMDAwLCAweDMzMDksIDB4MDAwMCwgMHgzMzBCLCAweDAwMDAsCisgICAgMHgzMzBDLCAweDMzMEUsIDB4MzMwRiwgMHgzMzEwLCAweDMzMTEsIDB4MzMxMiwgMHgzMzEzLCAweDAwMDAsCisgICAgMHgzMzE3LCAweDAwMDAsIDB4MzMxOSwgMHgwMDAwLCAweDMzMUEsIDB4MzMxQiwgMHgzMzFDLCAweDMzMUQsCisgICAgMHgzMzFGLCAweDMzMjAsIDB4MzMyMSwgMHgzMzI0LCAweDAwMDAsIDB4MzMyNSwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgzMzI4LCAweDMzMjksIDB4MDAwMCwgMHgzMzJELCAweDAwMDAsIDB4MDAwMCwgMHgzMzJFLCAweDMzMkYsCisgICAgMHgzMzMwLCAweDMzMzIsIDB4MDAwMCwgMHgwMDAwLCAweDMzMzQsIDB4MzMzNSwgMHgzMzNDLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MzMzNywgMHgwMDAwLCAweDMzMzgsIDB4MzMzQSwgMHgzMzNELCAweDMzNDEsCisgICAgMHgzMzNFLCAweDMzM0YsIDB4MzM0MCwgMHgzMzQzLCAweDMzNDQsIDB4MzM0NSwgMHgzMzQ2LCAweDMzNDgsCisgICAgMHgzMzRCLCAweDMzNEMsIDB4MzM0RiwgMHgzMzUwLCAweDAwMDAsIDB4MDAwMCwgMHgzMzUyLCAweDMzNTQsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MzM1MywgMHgzMzU1LCAweDMzNTYsIDB4MDAwMCwgMHgzMzAxLCAweDMzMDIsCisgICAgMHgzMzA0LCAweDMzMDYsIDB4MDAwMCwgMHgzMzA4LCAweDAwMDAsIDB4MzMwNywgMHgzMzBBLCAweDAwMDAsCisgICAgMHgzMzA5LCAweDAwMDAsIDB4MzMwQiwgMHgwMDAwLCAweDMzMEMsIDB4MzMwRSwgMHgzMzBGLCAweDMzMTAsCisgICAgMHgzMzExLCAweDMzMTIsIDB4MzMxMywgMHgwMDAwLCAweDMzMTcsIDB4MDAwMCwgMHgzMzE5LCAweDAwMDAsCisgICAgMHgzMzFBLCAweDMzMUIsIDB4MzMxQywgMHgzMzFELCAweDMzMUYsIDB4MzMyMCwgMHgzMzIxLCAweDMzMjQsCisgICAgMHgwMDAwLCAweDMzMjUsIDB4MDAwMCwgMHgwMDAwLCAweDMzMjgsIDB4MzMyOSwgMHgwMDAwLCAweDMzMkQsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MzMyRSwgMHgzMzJGLCAweDMzMzAsIDB4MzMzMiwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgzMzM0LCAweDMzMzUsIDB4MzMzQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgzMzM3LCAweDAwMDAsCisgICAgMHgzMzM4LCAweDMzM0EsIDB4MzMzRCwgMHgzMzQxLCAweDMzM0UsIDB4MzMzRiwgMHgzMzQwLCAweDMzNDMsCisgICAgMHgzMzQ0LCAweDMzNDUsIDB4MzM0NiwgMHgzMzQ4LCAweDMzNEIsIDB4MzM0QywgMHgzMzRGLCAweDMzNTAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MzM1MiwgMHgzMzU0LCAweDAwMDAsIDB4MDAwMCwgMHgzMzUzLCAweDMzNTUsCisgICAgMHgzMzU2LCAweDMzN0UsIDB4MzM3RCwgMHgzMzdDLCAweDMzN0IsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMkQsCisgICAgMHgwMDNELCAweDIxMDMsIDB4MjY0MCwgMHgyNjQyLCAweDMwMTMsIDB4MzAxMiwgMHgzMDBDLCAweDMwMEQsCisgICAgMHgzMDBFLCAweDMwMEYsIDB4MzAxQSwgMHgzMDFCLCAweDMwMTgsIDB4MzAxOSwgMHhGRjA4LCAweEZGMDksCisgICAgMHgzMDFELCAweDMwMUUsIDB4MjAxOCwgMHgyMDE5LCAweDIwMUMsIDB4MjAxRCwgMHgwMDI3LCAweDAwMjIsCisgICAgMHgwMDAwLCAweDIxMzUsIDB4MDNEMCwgMHgyMjBBLCAweDIxMEYsIDB4MDBCNSwgMHgwM0M2LCAweDAzREIsCisgICAgMHgwM0QxLCAweEZGRkQsIDB4MjY2OCwgMHgyNjY5LCAweDI2NkMsIDB4RkYxQSwgMHgwMEE5LCAweDAwQTksCisgICAgMHgwMEFFLCAweDAwQUUsIDB4MzAzQiwgMHgzMDNCLCAweDMwMzMsIDB4MzAzNCwgMHgzMDM1LCAweDIwM0MsCisgICAgMHgyMDQ5LCAweDAwMjEsIDB4MjAzQywgMHgyMDQ5LCAweDI0NEEsIDB4MDAwMCwgMHgyMjEzLCAweDIyNjAsCisgICAgMHgyMjQzLCAweDIyNzIsIDB4MjI3MywgMHgzMDBDLCAweDMwMEQsIDB4MzAwRSwgMHgzMDBGLCAweDMwMUEsCisgICAgMHgzMDFCLCAweDMwMTgsIDB4MzAxOSwgMHhGRjVGLCAweEZGNjAsIDB4MzAwQywgMHgzMDBELCAweDMwMEUsCisgICAgMHgzMDBGLCAweDMwMUEsIDB4MzAxQiwgMHgzMDE4LCAweDMwMTksIDB4RkY1RiwgMHhGRjYwLCAweDIzOUIsCisgICAgMHgyMzlELCAweDIzOUUsIDB4MjNBMCwgMHgyMzlELCAweDIzOUIsIDB4MjNBMCwgMHgyMzlFLCAweDIzQTEsCisgICAgMHgyM0EzLCAweDIzQTQsIDB4MjNBNiwgMHgyM0EzLCAweDIzQTEsIDB4MjNBNiwgMHgyM0E0LCAweDIzQTEsCisgICAgMHgyM0EzLCAweDIzQTQsIDB4MjNBNiwgMHgyM0EzLCAweDIzQTEsIDB4MjNBNiwgMHgyM0E0LCAweEZGNUMsCisgICAgMHgyMDE1LCAweDMwMUQsIDB4MzAxRSwgMHgyMDE4LCAweDIwMTksIDB4MjAxOCwgMHgyMDE5LCAweDI3MDIsCisgICAgMHgyNzAyLCAweDI3MDIsIDB4MjcwMiwgMHgzMDNELCAweDMwMTIsIDB4MzA5RiwgMHg1MzRELCAweDIyMDcsCisgICAgMHgyMjA1LCAweDIyQTAsIDB4MjI5NiwgMHgyMjk4LCAweDIyOTUsIDB4MjI5NywgMHgyMjlFLCAweDIyOTUsCisgICAgMHgwMDIxLCAweDI1QjMsIDB4MjVDMCwgMHgyNUI2LCAweDIxRTYsIDB4MjFFOCwgMHgyMUU3LCAweDIxRTksCisgICAgMHgyMUQwLCAweDIxOTQsIDB4MjE5OCwgMHgyMTk5LCAweDIxOTYsIDB4MjE5NywgMHgyMUNDLCAweDIxQzYsCisgICAgMHgyMUM0LCAweDIxQzUsIDB4MjE5MCwgMHgyMTkyLCAweDIxOTEsIDB4MjE5MywgMHgyMTk0LCAweDIxOTUsCisgICAgMHgyNTA0LCAweDI1MDYsIDB4MzAzMCwgMHgyMzA3LCAweDMwMzAsIDB4MjMwNywgMHgzMDMwLCAweDIzMDcsCisgICAgMHgzMDMwLCAweDIzMDcsIDB4MzAzMCwgMHgyMzA3LCAweDI3NDAsIDB4MjczRiwgMHgyNUExLCAweDI1QTAsCisgICAgMHgyNUExLCAweDI1QTEsIDB4MjVBMSwgMHgyNUExLCAweDI1QTEsIDB4MjVBQiwgMHgyNUEwLCAweDI1QUEsCisgICAgMHgyNzFBLCAweDI3MUEsIDB4MjVDNywgMHgyNUM2LCAweDI1QzcsIDB4MjVDNywgMHgyNUM3LCAweDI1QzcsCisgICAgMHgyNUM3LCAweDI1QzYsIDB4MjVDNiwgMHgyNUNFLCAweDI1QzksIDB4MjVDQiwgMHgyNUU2LCAweDI1Q0YsCisgICAgMHgyMDIyLCAweDI3NTYsIDB4Mjc1NiwgMHgyNzU2LCAweDI3NTYsIDB4MzAwOCwgMHgzMDA5LCAweDMwMDgsCisgICAgMHgzMDA5LCAweDMwMEEsIDB4MzAwQiwgMHgzMDBBLCAweDMwMEIsIDB4MzA1MywgMHgzMDUzLCAweDMwQjMsCisgICAgMHgzMEIzLCAweDMwOUQsIDB4MzA5RSwgMHgzMDQxLCAweDMwNDIsIDB4MzA0MywgMHgzMDQ0LCAweDMwNDUsCisgICAgMHgzMDQ2LCAweDMwNDcsIDB4MzA0OCwgMHgzMDQ5LCAweDMwNEEsIDB4MzA0QiwgMHgzMDRCLCAweDMwNEMsCisgICAgMHgzMDRELCAweDMwNEUsIDB4MzA0RiwgMHgzMDUwLCAweDMwNTEsIDB4MzA1MSwgMHgzMDUyLCAweDMwNTMsCisgICAgMHgzMDUzLCAweDMwNTQsIDB4MzA1NSwgMHgzMDU2LCAweDMwNTcsIDB4MzA1OCwgMHgzMDU5LCAweDMwNUEsCisgICAgMHgzMDVCLCAweDMwNUMsIDB4MzA1RCwgMHgzMDVFLCAweDMwNUYsIDB4MzA2MCwgMHgzMDYxLCAweDMwNjIsCisgICAgMHgzMDYzLCAweDMwNjQsIDB4MzA2NSwgMHgzMDY2LCAweDMwNjcsIDB4MzA2OCwgMHgzMDY5LCAweDMwNkEsCisgICAgMHgzMDZCLCAweDMwNkMsIDB4MzA2RCwgMHgzMDZFLCAweDMwNkYsIDB4MzA3MCwgMHgzMDcxLCAweDMwNzIsCisgICAgMHgzMDczLCAweDMwNzQsIDB4MzA3NSwgMHgzMDc2LCAweDMwNzcsIDB4MzA3OCwgMHgzMDc5LCAweDMwN0EsCisgICAgMHgzMDdCLCAweDMwN0MsIDB4MzA3RCwgMHgzMDdFLCAweDMwN0YsIDB4MzA4MCwgMHgzMDgxLCAweDMwODIsCisgICAgMHgzMDgzLCAweDMwODQsIDB4MzA4NSwgMHgzMDg2LCAweDMwODcsIDB4MzA4OCwgMHgzMDg5LCAweDMwOEEsCisgICAgMHgzMDhCLCAweDMwOEMsIDB4MzA4RCwgMHgzMDhFLCAweDMwOEYsIDB4MzA5MCwgMHgzMDkxLCAweDMwOTIsCisgICAgMHgzMDkzLCAweDMwOTQsIDB4MzBGRCwgMHgzMEZFLCAweDMwRkMsIDB4MzBBMSwgMHgzMEEyLCAweDMwQTMsCisgICAgMHgzMEE0LCAweDMwQTUsIDB4MzBBNiwgMHgzMEE3LCAweDMwQTgsIDB4MzBBOSwgMHgzMEFBLCAweDMwRjUsCisgICAgMHgzMEFCLCAweDMwQUMsIDB4MzBBRCwgMHgzMEFFLCAweDMwQUYsIDB4MzBCMCwgMHgzMEY2LCAweDMwQjEsCisgICAgMHgzMEIyLCAweDMwQjMsIDB4MzBCMywgMHgzMEI0LCAweDMwQjUsIDB4MzBCNiwgMHgzMEI3LCAweDMwQjgsCisgICAgMHgzMEI5LCAweDMwQkEsIDB4MzBCQiwgMHgzMEJDLCAweDMwQkQsIDB4MzBCRSwgMHgzMEJGLCAweDMwQzAsCisgICAgMHgzMEMxLCAweDMwQzIsIDB4MzBDMywgMHgzMEM0LCAweDMwQzUsIDB4MzBDNiwgMHgzMEM3LCAweDMwQzgsCisgICAgMHgzMEM5LCAweDMwQ0EsIDB4MzBDQiwgMHgzMENDLCAweDMwQ0QsIDB4MzBDRSwgMHgzMENGLCAweDMwRDAsCisgICAgMHgzMEQxLCAweDMwRDIsIDB4MzBEMywgMHgzMEQ0LCAweDMwRDUsIDB4MzBENiwgMHgzMEQ3LCAweDMwRDgsCisgICAgMHgzMEQ5LCAweDMwREEsIDB4MzBEQiwgMHgzMERDLCAweDMwREQsIDB4MzBERSwgMHgzMERGLCAweDMwRTAsCisgICAgMHgzMEUxLCAweDMwRTIsIDB4MzBFMywgMHgzMEU0LCAweDMwRTUsIDB4MzBFNiwgMHgzMEU3LCAweDMwRTgsCisgICAgMHgzMEU5LCAweDMwRUEsIDB4MzBFQiwgMHgzMEVDLCAweDMwRUQsIDB4MzBFRSwgMHgzMEVGLCAweDMwRjAsCisgICAgMHgzMEYxLCAweDMwRjIsIDB4MzBGMywgMHgzMEY0LCAweDMwRjcsIDB4MzBGOCwgMHgzMEY5LCAweDMwRkEsCisgICAgMHgzMDlELCAweDMwOUUsIDB4MzA0MSwgMHgzMDQyLCAweDMwNDMsIDB4MzA0NCwgMHgzMDQ1LCAweDMwNDYsCisgICAgMHgzMDQ3LCAweDMwNDgsIDB4MzA0OSwgMHgzMDRBLCAweDMwNEIsIDB4MzA0QiwgMHgzMDRDLCAweDMwNEQsCisgICAgMHgzMDRFLCAweDMwNEYsIDB4MzA1MCwgMHgzMDUxLCAweDMwNTEsIDB4MzA1MiwgMHgzMDUzLCAweDMwNTMsCisgICAgMHgzMDU0LCAweDMwNTUsIDB4MzA1NiwgMHgzMDU3LCAweDMwNTgsIDB4MzA1OSwgMHgzMDVBLCAweDMwNUIsCisgICAgMHgzMDVDLCAweDMwNUQsIDB4MzA1RSwgMHgzMDVGLCAweDMwNjAsIDB4MzA2MSwgMHgzMDYyLCAweDMwNjMsCisgICAgMHgzMDY0LCAweDMwNjUsIDB4MzA2NiwgMHgzMDY3LCAweDMwNjgsIDB4MzA2OSwgMHgzMDZBLCAweDMwNkIsCisgICAgMHgzMDZDLCAweDMwNkQsIDB4MzA2RSwgMHgzMDZGLCAweDMwNzAsIDB4MzA3MSwgMHgzMDcyLCAweDMwNzMsCisgICAgMHgzMDc0LCAweDMwNzUsIDB4MzA3NiwgMHgzMDc3LCAweDMwNzgsIDB4MzA3OSwgMHgzMDdBLCAweDMwN0IsCisgICAgMHgzMDdDLCAweDMwN0QsIDB4MzA3RSwgMHgzMDdGLCAweDMwODAsIDB4MzA4MSwgMHgzMDgyLCAweDMwODMsCisgICAgMHgzMDg0LCAweDMwODUsIDB4MzA4NiwgMHgzMDg3LCAweDMwODgsIDB4MzA4OSwgMHgzMDhBLCAweDMwOEIsCisgICAgMHgzMDhDLCAweDMwOEQsIDB4MzA4RSwgMHgzMDhGLCAweDMwOTAsIDB4MzA5MSwgMHgzMDkyLCAweDMwOTMsCisgICAgMHgzMDk0LCAweDMwRkQsIDB4MzBGRSwgMHgzMEZDLCAweDMwQTEsIDB4MzBBMiwgMHgzMEEzLCAweDMwQTQsCisgICAgMHgzMEE1LCAweDMwQTYsIDB4MzBBNywgMHgzMEE4LCAweDMwQTksIDB4MzBBQSwgMHgzMEY1LCAweDMwQUIsCisgICAgMHgzMEFDLCAweDMwQUQsIDB4MzBBRSwgMHgzMEFGLCAweDMwQjAsIDB4MzBGNiwgMHgzMEIxLCAweDMwQjIsCisgICAgMHgzMEIzLCAweDMwQjMsIDB4MzBCNCwgMHgzMEI1LCAweDMwQjYsIDB4MzBCNywgMHgzMEI4LCAweDMwQjksCisgICAgMHgzMEJBLCAweDMwQkIsIDB4MzBCQywgMHgzMEJELCAweDMwQkUsIDB4MzBCRiwgMHgzMEMwLCAweDMwQzEsCisgICAgMHgzMEMyLCAweDMwQzMsIDB4MzBDNCwgMHgzMEM1LCAweDMwQzYsIDB4MzBDNywgMHgzMEM4LCAweDMwQzksCisgICAgMHgzMENBLCAweDMwQ0IsIDB4MzBDQywgMHgzMENELCAweDMwQ0UsIDB4MzBDRiwgMHgzMEQwLCAweDMwRDEsCisgICAgMHgzMEQyLCAweDMwRDMsIDB4MzBENCwgMHgzMEQ1LCAweDMwRDYsIDB4MzBENywgMHgzMEQ4LCAweDMwRDksCisgICAgMHgzMERBLCAweDMwREIsIDB4MzBEQywgMHgzMERELCAweDMwREUsIDB4MzBERiwgMHgzMEUwLCAweDMwRTEsCisgICAgMHgzMEUyLCAweDMwRTMsIDB4MzBFNCwgMHgzMEU1LCAweDMwRTYsIDB4MzBFNywgMHgzMEU4LCAweDMwRTksCisgICAgMHgzMEVBLCAweDMwRUIsIDB4MzBFQywgMHgzMEVELCAweDMwRUUsIDB4MzBFRiwgMHgzMEYwLCAweDMwRjEsCisgICAgMHgzMEYyLCAweDMwRjMsIDB4MzBGNCwgMHgzMEY3LCAweDMwRjgsIDB4MzBGOSwgMHgzMEZBLCAweDMwMDEsCisgICAgMHgzMDAyLCAweDMwRkIsIDB4RkYwQSwgMHgyMDNCLCAweDI1Q0IsIDB4MjVDRSwgMHgyNUM5LCAweDI1QjMsCisgICAgMHgyNUIyLCAweDMwRkQsIDB4MzBGRSwgMHgzMDlELCAweDMwOUUsIDB4RkYwOCwgMHhGRjA5LCAweDMwMTQsCisgICAgMHgzMDE1LCAweEZGMDgsIDB4RkYwOSwgMHgzMDE0LCAweDMwMTUsIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsCisgICAgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsIDB4MDAzOCwgMHgwMDM5LCAweDMwNDEsCisgICAgMHgzMDQyLCAweDMwNDMsIDB4MzA0NCwgMHgzMDQ1LCAweDMwNDYsIDB4MzA0NywgMHgzMDQ4LCAweDMwNDksCisgICAgMHgzMDRBLCAweDMwNEIsIDB4MzA0QiwgMHgzMDRDLCAweDMwNEQsIDB4MzA0RSwgMHgzMDRGLCAweDMwNTAsCisgICAgMHgzMDUxLCAweDMwNTEsIDB4MzA1MiwgMHgzMDUzLCAweDMwNTQsIDB4MzA1NSwgMHgzMDU2LCAweDMwNTcsCisgICAgMHgzMDU4LCAweDMwNTksIDB4MzA1QSwgMHgzMDVCLCAweDMwNUMsIDB4MzA1RCwgMHgzMDVFLCAweDMwNUYsCisgICAgMHgzMDYwLCAweDMwNjEsIDB4MzA2MiwgMHgzMDYzLCAweDMwNjQsIDB4MzA2NSwgMHgzMDY2LCAweDMwNjcsCisgICAgMHgzMDY4LCAweDMwNjksIDB4MzA2QSwgMHgzMDZCLCAweDMwNkMsIDB4MzA2RCwgMHgzMDZFLCAweDMwNkYsCisgICAgMHgzMDcwLCAweDMwNzEsIDB4MzA3MiwgMHgzMDczLCAweDMwNzQsIDB4MzA3NSwgMHgzMDc2LCAweDMwNzcsCisgICAgMHgzMDc4LCAweDMwNzksIDB4MzA3QSwgMHgzMDdCLCAweDMwN0MsIDB4MzA3RCwgMHgzMDdFLCAweDMwN0YsCisgICAgMHgzMDgwLCAweDMwODEsIDB4MzA4MiwgMHgzMDgzLCAweDMwODQsIDB4MzA4NSwgMHgzMDg2LCAweDMwODcsCisgICAgMHgzMDg4LCAweDMwODksIDB4MzA4QSwgMHgzMDhCLCAweDMwOEMsIDB4MzA4RCwgMHgzMDhFLCAweDMwOEYsCisgICAgMHgzMDkwLCAweDMwOTEsIDB4MzA5MiwgMHgzMDkzLCAweDMwOTQsIDB4MzA0MSwgMHgzMDQzLCAweDMwNDUsCisgICAgMHgzMDQ3LCAweDMwNDksIDB4MzA0QiwgMHgzMDUxLCAweDMwNjMsIDB4MzA4MywgMHgzMDg1LCAweDMwODcsCisgICAgMHgzMDhFLCAweDMwQTEsIDB4MzBBMiwgMHgzMEEzLCAweDMwQTQsIDB4MzBBNSwgMHgzMEE2LCAweDMwQTcsCisgICAgMHgzMEE4LCAweDMwQTksIDB4MzBBQSwgMHgzMEFCLCAweDMwRjUsIDB4MzBBQywgMHgzMEFELCAweDMwQUUsCisgICAgMHgzMEFGLCAweDMwQjAsIDB4MzBCMSwgMHgzMEY2LCAweDMwQjIsIDB4MzBCMywgMHgzMEI0LCAweDMwQjUsCisgICAgMHgzMEI2LCAweDMwQjcsIDB4MzBCOCwgMHgzMEI5LCAweDMwQkEsIDB4MzBCQiwgMHgzMEJDLCAweDMwQkQsCisgICAgMHgzMEJFLCAweDMwQkYsIDB4MzBDMCwgMHgzMEMxLCAweDMwQzIsIDB4MzBDMywgMHgzMEM0LCAweDMwQzUsCisgICAgMHgzMEM2LCAweDMwQzcsIDB4MzBDOCwgMHgzMEM5LCAweDMwQ0EsIDB4MzBDQiwgMHgzMENDLCAweDMwQ0QsCisgICAgMHgzMENFLCAweDMwQ0YsIDB4MzBEMCwgMHgzMEQxLCAweDMwRDIsIDB4MzBEMywgMHgzMEQ0LCAweDMwRDUsCisgICAgMHgzMEQ2LCAweDMwRDcsIDB4MzBEOCwgMHgzMEQ5LCAweDMwREEsIDB4MzBEQiwgMHgzMERDLCAweDMwREQsCisgICAgMHgzMERFLCAweDMwREYsIDB4MzBFMCwgMHgzMEUxLCAweDMwRTIsIDB4MzBFMywgMHgzMEU0LCAweDMwRTUsCisgICAgMHgzMEU2LCAweDMwRTcsIDB4MzBFOCwgMHgzMEU5LCAweDMwRUEsIDB4MzBFQiwgMHgzMEVDLCAweDMwRUQsCisgICAgMHgzMEVFLCAweDMwRUYsIDB4MzBGMCwgMHgzMEYxLCAweDMwRjIsIDB4MzBGMywgMHgzMEY0LCAweDMwQTEsCisgICAgMHgzMEEzLCAweDMwQTUsIDB4MzBBNywgMHgzMEE5LCAweDMwRjUsIDB4MzBGNiwgMHgzMEMzLCAweDMwRTMsCisgICAgMHgzMEU1LCAweDMwRTcsIDB4MzBFRSwgMHgzMEZDLCAweDMwRkMsIDB4NkNFOCwgMHgyMEFDLCAweDIxMjYsCisgICAgMHgyMDMyLCAweDIwMzMsIDB4RkIwMCwgMHhGQjAzLCAweEZCMDQsIDB4MDEwMSwgMHgwMTJCLCAweDAxNkIsCisgICAgMHgwMTEzLCAweDAxNEQsIDB4MDEwMCwgMHgwMTJBLCAweDAxNkEsIDB4MDExMiwgMHgwMTRDLCAweDIxNUIsCisgICAgMHgyMTVDLCAweDIxNUQsIDB4MjE1RSwgMHgyMTUzLCAweDIxNTQsIDB4MjA3MCwgMHgyMDc0LCAweDIwNzUsCisgICAgMHgyMDc2LCAweDIwNzcsIDB4MjA3OCwgMHgyMDc5LCAweDIwODAsIDB4MjA4MSwgMHgyMDgyLCAweDIwODMsCisgICAgMHgyMDg0LCAweDIwODUsIDB4MjA4NiwgMHgyMDg3LCAweDIwODgsIDB4MjA4OSwgMHgwMUNELCAweDAxMUEsCisgICAgMHgwMDAwLCAweDFFQkMsIDB4MDFDRiwgMHgwMDAwLCAweDAxMjgsIDB4MDFEMSwgMHgwMDAwLCAweDAxRDMsCisgICAgMHgwMTZFLCAweDAxNjgsIDB4MDFDRSwgMHgwMTFCLCAweDAwMDAsIDB4MUVCRCwgMHgwMUQwLCAweDAwMDAsCisgICAgMHgwMTI5LCAweDAxRDIsIDB4MDAwMCwgMHgwMUQ0LCAweDAxNkYsIDB4MDE2OSwgMHgwMjUxLCAweDAyNTEsCisgICAgMHgwMjUxLCAweDAxRkQsIDB4MDBFNiwgMHgwMjU0LCAweDAyNTQsIDB4MDI1NCwgMHgwMjU5LCAweDAyNTksCisgICAgMHgwMjU5LCAweDAyNUEsIDB4MDI1QSwgMHgwMjVBLCAweDAyNUIsIDB4MDI1QiwgMHgwMjVCLCAweDAwNkEsCisgICAgMHgwMTRCLCAweDAyNzUsIDB4MDI4QywgMHgwMjhDLCAweDAyOEMsIDB4MDI5MiwgMHgwMjgzLCAweDAyRDAsCisgICAgMHgwMDIwLCAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCisgICAgMHgwMDI4LCAweDAwMjksIDB4MDAyQSwgMHgwMDJCLCAweDAwMkMsIDB4MDAyRCwgMHgwMDJFLCAweDAwMkYsCisgICAgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsCisgICAgMHgwMDM4LCAweDAwMzksIDB4MDAzQSwgMHgwMDNCLCAweDAwM0MsIDB4MDAzRCwgMHgwMDNFLCAweDAwM0YsCisgICAgMHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsCisgICAgMHgwMDQ4LCAweDAwNDksIDB4MDA0QSwgMHgwMDRCLCAweDAwNEMsIDB4MDA0RCwgMHgwMDRFLCAweDAwNEYsCisgICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsCisgICAgMHgwMDU4LCAweDAwNTksIDB4MDA1QSwgMHgwMDVCLCAweDAwQTUsIDB4MDA1RCwgMHgwMDVFLCAweDAwNUYsCisgICAgMHgwMDYwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsCisgICAgMHgwMDY4LCAweDAwNjksIDB4MDA2QSwgMHgwMDZCLCAweDAwNkMsIDB4MDA2RCwgMHgwMDZFLCAweDAwNkYsCisgICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCisgICAgMHgwMDc4LCAweDAwNzksIDB4MDA3QSwgMHgwMDdCLCAweDAwQTYsIDB4MDA3RCwgMHgwMzAzLCAweDAyQkMsCisgICAgMHgwMDVDLCAweDAyQkIsIDB4MDA3QywgMHgwMDdFLCAweDAwQTEsIDB4MDBBMiwgMHgwMEEzLCAweDIwNDQsCisgICAgMHgwMTkyLCAweDAwQTcsIDB4MDBBNCwgMHgyMDFDLCAweDAwQUIsIDB4MjAzOSwgMHgyMDNBLCAweEZCMDEsCisgICAgMHhGQjAyLCAweDIwMTIsIDB4MjAyMCwgMHgyMDIxLCAweDAwQjcsIDB4MDBCNiwgMHgyMDIyLCAweDIwMUEsCisgICAgMHgyMDFFLCAweDIwMUQsIDB4MDBCQiwgMHgyMDI2LCAweDIwMzAsIDB4MDBCRiwgMHgwMzAxLCAweDAzMDIsCisgICAgMHgwMEFGLCAweDAzMDYsIDB4MDMwNywgMHgwMzA4LCAweDAzMEEsIDB4MDBCOCwgMHgwMzBCLCAweDAzMjgsCisgICAgMHgwMzBDLCAweDAzMzYsIDB4MDBDNiwgMHgwMEFBLCAweDAxNDEsIDB4MDBEOCwgMHgwMTUyLCAweDAwQkEsCisgICAgMHgwMEU2LCAweDAxMzEsIDB4MDE0MiwgMHgwMEY4LCAweDAxNTMsIDB4MDBERiwgMHgwMDJELCAweDAwQTksCisgICAgMHgwMEFDLCAweDAwQUUsIDB4MDBCMCwgMHgwMEIxLCAweDAwQjIsIDB4MDBCMywgMHgwMEI1LCAweDAwQjksCisgICAgMHgwMEJDLCAweDAwQkQsIDB4MDBCRSwgMHgwMEMwLCAweDAwQzEsIDB4MDBDMiwgMHgwMEMzLCAweDAwQzQsCisgICAgMHgwMEM1LCAweDAwQzcsIDB4MDBDOCwgMHgwMEM5LCAweDAwQ0EsIDB4MDBDQiwgMHgwMENDLCAweDAwQ0QsCisgICAgMHgwMENFLCAweDAwQ0YsIDB4MDBEMCwgMHgwMEQxLCAweDAwRDIsIDB4MDBEMywgMHgwMEQ0LCAweDAwRDUsCisgICAgMHgwMEQ2LCAweDAwRDcsIDB4MDBEOSwgMHgwMERBLCAweDAwREIsIDB4MDBEQywgMHgwMERELCAweDAwREUsCisgICAgMHgwMEUwLCAweDAwRTEsIDB4MDBFMiwgMHgwMEUzLCAweDAwRTQsIDB4MDBFNSwgMHgwMEU3LCAweDAwRTgsCisgICAgMHgwMEU5LCAweDAwRUEsIDB4MDBFQiwgMHgwMEVDLCAweDAwRUQsIDB4MDBFRSwgMHgwMEVGLCAweDAwRjAsCisgICAgMHgwMEYxLCAweDAwRjIsIDB4MDBGMywgMHgwMEY0LCAweDAwRjUsIDB4MDBGNiwgMHgwMEY3LCAweDAwRjksCisgICAgMHgwMEZBLCAweDAwRkIsIDB4MDBGQywgMHgwMEZELCAweDAwRkUsIDB4MDBGRiwgMHgwMTYwLCAweDAxNzgsCisgICAgMHgwMTdELCAweDAzMDUsIDB4MDE2MSwgMHgyMTIyLCAweDAxN0UsIDB4MDAzMCwgMHgyMEFDLCAweDIxMjYsCisgICAgMHgyMDMyLCAweDIwMzMsIDB4RkIwMCwgMHhGQjAzLCAweEZCMDQsIDB4MDEwMSwgMHgwMTJCLCAweDAxNkIsCisgICAgMHgwMTEzLCAweDAxNEQsIDB4MDEwMCwgMHgwMTJBLCAweDAxNkEsIDB4MDExMiwgMHgwMTRDLCAweDIxNUIsCisgICAgMHgyMTVDLCAweDIxNUQsIDB4MjE1RSwgMHgyMTUzLCAweDIxNTQsIDB4MjA3MCwgMHgyMDc0LCAweDIwNzUsCisgICAgMHgyMDc2LCAweDIwNzcsIDB4MjA3OCwgMHgyMDc5LCAweDIwODAsIDB4MjA4MSwgMHgyMDgyLCAweDIwODMsCisgICAgMHgyMDg0LCAweDIwODUsIDB4MjA4NiwgMHgyMDg3LCAweDIwODgsIDB4MjA4OSwgMHgwMUNELCAweDAxMUEsCisgICAgMHgwMDAwLCAweDFFQkMsIDB4MDFDRiwgMHgwMDAwLCAweDAxMjgsIDB4MDFEMSwgMHgwMDAwLCAweDAxRDMsCisgICAgMHgwMTZFLCAweDAxNjgsIDB4MDFDRSwgMHgwMTFCLCAweDAwMDAsIDB4MUVCRCwgMHgwMUQwLCAweDAwMDAsCisgICAgMHgwMTI5LCAweDAxRDIsIDB4MDAwMCwgMHgwMUQ0LCAweDAxNkYsIDB4MDE2OSwgMHgwMDMwLCAweDAwMzEsCisgICAgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgMHgwMDM4LCAweDAwMzksCisgICAgMHgwMzM2LCAweDAwMkQsIDB4MDAzRCwgMHgwMDJDLCAweDAwMjgsIDB4MDAyOSwgMHgwMDJFLCAweDAwMkYsCisgICAgMHgwMDNBLCAweDAwM0IsIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsCisgICAgMHgwMDM2LCAweDAwMzcsIDB4MDAzOCwgMHgwMDM5LCAweDAzMzYsIDB4MDAyRCwgMHgwMDNELCAweDAwMkMsCisgICAgMHgwMDI4LCAweDAwMjksIDB4MDAyRSwgMHgwMDJGLCAweDAwM0EsIDB4MDAzQiwgMHgwMEI3LCAweDAwMkQsCisgICAgMHgwMDNELCAweDIxMDMsIDB4MjY0MCwgMHgyNjQyLCAweDMwMTMsIDB4MzAxMiwgMHgzMDBDLCAweDMwMEQsCisgICAgMHgzMDBFLCAweDMwMEYsIDB4MzAxQSwgMHgzMDFCLCAweDMwMTgsIDB4MzAxOSwgMHhGRjA4LCAweEZGMDksCisgICAgMHgzMDFELCAweDMwMUUsIDB4MjAxOCwgMHgyMDE5LCAweDIwMUMsIDB4MjAxRCwgMHgwMDI3LCAweDAwMjIsCisgICAgMHg5MDM4LCAweDhCMDEsIDB4N0RFMywgMHg5RUMzLCAweDZFQUIsIDB4Nzk4RCwgMHg2MDk0LCAweDZENzcsCisgICAgMHg2MTY4LCAweDY5ODIsIDB4NkUzNCwgMHg4OTEwLCAweDZGMjIsIDB4NTY2OCwgMHg2NUUyLCAweDc5NDgsCisgICAgMHg4NjVCLCAweDk3RkYsIDB4NTJFNCwgMHg4QjM5LCAweDYzRUQsIDB4NjRDQSwgMHg3ODRGLCAweDdBNDAsCisgICAgMHg2QkJBLCAweDc5NDksIDB4ODk5NiwgMHg3MTZFLCAweDc5M0UsIDB4ODAwNSwgMHg4MUVELCAweDc5NUQsCisgICAgMHg2NjkxLCAweDdGNzIsIDB4NkQ4OSwgMHg3MkMwLCAweDYxM0MsIDB4NzcxRSwgMHg3QkMwLCAweDc5NTYsCisgICAgMHg1MEU3LCAweDVDNjQsIDB4NURFMiwgMHg2MThFLCAweDhEMDgsIDB4NTM3RCwgMHg1NjA2LCAweDg0NTcsCisgICAgMHg1RkI1LCAweDYxRjIsIDB4OTNBRCwgMHg3OThFLCAweDlCMkQsIDB4N0E4MSwgMHg5NkUzLCAweDY4ODUsCisgICAgMHg3RTQxLCAweDY2NjksIDB4NTM1MSwgMHg3ODkxLCAweDhDRDMsIDB4NjU0RiwgMHg0RkFFLCAweDUwMDIsCisgICAgMHg1ODQwLCAweDUyQzksIDB4NkI2NSwgMHg1OEE4LCAweDZCQ0YsIDB4NTE0RCwgMHg2MjNFLCAweDc5NTAsCisgICAgMHg2QjA0LCAweDk2ODYsIDB4ODY1QywgMHg2RERBLCAweDk4NUUsIDB4NjZDNiwgMHg2Qjc3LCAweDdERjQsCisgICAgMHg5MzRBLCAweDVFQ0EsIDB4OTMwNCwgMHg2OTgyLCAweDUxQjQsIDB4NjM0QywgMHg4NkRCLCAweDkwODksCisgICAgMHg5MDIyLCAweDUwNDksIDB4N0RFRiwgMHg5MDU1LCAweDUzQTksIDB4OTkwQywgMHg4ODVCLCAweDVFRjYsCisgICAgMHg2Q0JGLCAweDkyNUIsIDB4N0ZDMSwgMHg4MkJELCAweDk2QzUsIDB4NUJCMywgMHg2MTY4LCAweDY5ODIsCisgICAgMHg2QkJCLCAweDY1NjIsIDB4OENBQiwgMHg1RENDLCAweDk4MTEsIDB4NUUzMCwgMHg4RUNDLCAweDdBQUUsCisgICAgMHg1NzQ3LCAweDUwOTEsIDB4N0E3NCwgMHg1MDY1LCAweDVFRkEsIDB4OTIzNywgMHg2QThFLCAweDRFQTQsCisgICAgMHg1MTZDLCAweDY2RjQsIDB4NjgyMSwgMHg3ODZDLCAweDdENUUsIDB4ODAwMywgMHg4Q0ZDLCAweDk2NEQsCisgICAgMHg2MkY3LCAweDdGNkEsIDB4NEY3RiwgMHg1M0YyLCAweDU5QzksIDB4OEIxRCwgMHg5MEFBLCAweDUzQ0UsCisgICAgMHg4RjJGLCAweDY3RDQsIDB4NzdBQywgMHg4MjFDLCAweDY5NkYsIDB4Njc3RSwgMHg4QTFGLCAweDRFMDgsCisgICAgMHg1N0Y0LCAweDY5MEQsIDB4ODA3NywgMHg4OUFBLCAweDkwNDIsIDB4NjM2RSwgMHg2NDQyLCAweDgyMzksCisgICAgMHg3RENGLCAweDgwNjEsIDB4NTBDRiwgMHg4QTk1LCAweDYwNjUsIDB4NTE0NiwgMHg3NzNBLCAweDgwNzQsCisgICAgMHg4REYzLCAweDVFQUQsIDB4NUVGNywgMHg4MjQ3LCAweDY4NDMsIDB4OTAwMywgMHg2RDNFLCAweDYzOTIsCisgICAgMHg4RjI5LCAweDczRUQsIDB4OTgxMiwgMHg2MEIyLCAweDYyNDksIDB4NjU5MCwgMHg3RENCLCAweDhBQjksCisgICAgMHg4Q0E3LCAweDcyMzYsIDB4ODQ3QSwgMHg1MjA2LCAweDU2NzQsIDB4NjFBNCwgMHg3Qzg5LCAweDdEMUIsCisgICAgMHg5NkYwLCAweDg1M0QsIDB4NEZCRiwgMHg2MzY3LCAweDc2QzYsIDB4Njg1RCwgMHg4MTA4LCAweDgwMzYsCisgICAgMHg3RkZDLCAweDU0MEYsIDB4OTZBMywgMHg5RTlGLCAweDlFOTcsIDB4ODA2RiwgMHg4MDdFLCAweDZFN0UsCisgICAgMHg1MDg1LCAweDUxOTMsIDB4NTFEQiwgMHg1MzE1LCAweDUzNDAsIDB4OTZEOSwgMHg1NUE5LCAweDU2QzEsCisgICAgMHg1NzBELCAweDU4QUIsIDB4NTlEQSwgMHg1QTM2LCAweDVBQkUsIDB4NUQ0RSwgMHg1RDg3LCAweDVEQzksCisgICAgMHg1REQzLCAweDVGMkQsIDB4NUY5OCwgMHg2MEQ4LCAweDYxM0QsIDB4NjFGRSwgMHg2MjY4LCAweDYyQ0YsCisgICAgMHg2NTFELCAweDY0MEYsIDB4NjRGMiwgMHg2NTVELCAweDY2NUYsIDB4NjdBOSwgMHg2N0U3LCAweDY5NkIsCisgICAgMHg2OTMwLCAweDY5QTcsIDB4NkE0NCwgMHg2QTkwLCAweDZDMDgsIDB4NkMxMywgMHg2RTIzLCAweDZGMTEsCisgICAgMHg2RUZFLCAweDZGM0UsIDB4NzFGRiwgMHg3M0U1LCAweDc0MzIsIDB4NzQ1RiwgMHg3NEUwLCAweDc1MEMsCisgICAgMHg3NjcyLCAweDc5MkEsIDB4NzhENCwgMHg3OUJBLCAweDdBMTksIDB4N0E5NSwgMHg3Q0YyLCAweDdENzMsCisgICAgMHg3RERELCAweDdFMzUsIDB4N0ZBRSwgMHg3RkUxLCAweDgwNUEsIDB4ODA1RiwgMHg4MDczLCAweDgwNzAsCisgICAgMHg4MDc2LCAweDgxNTMsIDB4ODE4QSwgMHg4MUI1LCAweDgxQ0QsIDB4ODNGMiwgMHg4NTU1LCAweDg1RDUsCisgICAgMHg4NzFBLCAweDg4MzYsIDB4ODg5RSwgMHg4OEQ4LCAweDg4RjQsIDB4ODkyQiwgMHg4OTNCLCAweDg5NkEsCisgICAgMHg4OTZGLCAweDhBMUQsIDB4OEQwNSwgMHg4RDBGLCAweDlGNEUsIDB4OEU5MSwgMHg4RUExLCAweDkwNTIsCisgICAgMHg5MDBFLCAweDkxMzAsIDB4OTE1NiwgMHg5MTU4LCAweDkxNjUsIDB4OTE3MywgMHg5MTcyLCAweDkxQTIsCisgICAgMHg5MUFGLCAweDkxQUEsIDB4OTFCNCwgMHg5MUJBLCAweDk0NzcsIDB4OTY5OCwgMHg5NzNELCAweDk3NjAsCisgICAgMHg5NzcxLCAweDk4MEMsIDB4OTg3MywgMHg5OEMzLCAweDlBNDUsIDB4OUI0RCwgMHg5QjU4LCAweDlCQzYsCisgICAgMHg5QkUxLCAweDlCRjEsIDB4OUQ0OCwgMHg5RENGLCAweDlGMDgsIDB4NjI3MSwgMHg2Njk3LCAweDYxMEYsCisgICAgMHg4ODYzLCAweDkwNTUsIDB4OTA3QSwgMHg3OEVGLCAweDU0RTEsIDB4MkVENywgMHgyRUJELCAweDUzQTksCisgICAgMHg3NERDLCAweDkwNEIsIDB4OTkwQywgMHg4ODVFLCAweDkyQjMsIDB4OTVCMSwgMHg1RUY2LCAweDYzRjQsCisgICAgMHg2Q0JGLCAweDcxNTksIDB4OTA2MCwgMHg5MjVCLCAweDY1QkMsIDB4NUY4MCwgMHg3RkMxLCAweDUzNzgsCisgICAgMHg5N0YzLCAweDUzMTYsIDB4ODJCMSwgMHg4M0QzLCAweDhDQTgsIDB4OTA0RSwgMHg4MkJELCAweDk2QzUsCisgICAgMHg5OTEzLCAweDVFRkIsIDB4NzA3MCwgMHg1QkIzLCAweDYxNjgsIDB4NjE2OCwgMHg2MTY4LCAweDY5RUEsCisgICAgMHg2OTgyLCAweDY3NkUsIDB4ODlEMiwgMHg5Njk0LCAweDUyNzIsIDB4OEY0NCwgMHg5MzhDLCAweDgyQzUsCisgICAgMHg1QkQyLCAweDc0QjAsIDB4N0RFOSwgMHg3RjM2LCAweDkwODQsIDB4OTU5MiwgMHg5N0QzLCAweDgyMTgsCisgICAgMHg1MzcxLCAweDU1OUMsIDB4MzQwMiwgMHgzNDAyLCAweDVFN0UsIDB4NjVFMywgMHg2NzFGLCAweDZBNUYsCisgICAgMHg4RDc3LCAweDk4RTIsIDB4NTQwOSwgMHg1NUFCLCAweDg2NTAsIDB4OTAwNiwgMHg1M0NBLCAweDU0MzgsCisgICAgMHg2MDI1LCAweDdEMUEsIDB4NURFOCwgMHg2MkQyLCAweDhEREQsIDB4OUI1QSwgMHg5QjVBLCAweDUzN0YsCisgICAgMHg1RjNBLCAweDYwNTAsIDB4NjlDMSwgMHg2QTRCLCAweDZBNEIsIDB4OTExNSwgMHg5N0ZGLCAweDk5NTcsCisgICAgMHg2NjgxLCAweDJFQTksIDB4OEZEMSwgMHg1MDM2LCAweDc3RTksIDB4NTE3NywgMHg4NjVFLCAweDdBN0EsCisgICAgMHg5MDQ3LCAweDZBREIsIDB4NTU1MywgMHg1OTUxLCAweDYwNzUsIDB4NjE2NywgMHg4RkNFLCAweDUwOTEsCisgICAgMHg2RjU0LCAweDdBNzQsIDB4MkVCQywgMHgyRUJDLCAweDUxN0MsIDB4NTIzOCwgMHg2MUIyLCAweDY3NDMsCisgICAgMHg4MEE5LCAweDhCMTksIDB4OTA2MywgMHg1MzlGLCAweDhBMDEsIDB4NjIzNiwgMHg5NkM3LCAweDk4NjcsCisgICAgMHg1NDMzLCAweDVBMUIsIDB4OEFBNCwgMHg1REU1LCAweDYxNEMsIDB4NjI4NSwgMHg2M0E3LCAweDY5Q0IsCisgICAgMHg2RDY5LCAweDZFMkYsIDB4ODAxNSwgMHg4MTU0LCAweDgzNTIsIDB4OEIxQiwgMHg4Q0ZDLCAweDU0M0YsCisgICAgMHg5MTc3LCAweDgxNzAsIDB4NzUxMSwgMHg4RkJDLCAweDRFQ0EsIDB4OTM5NiwgMHg1RUE3LCAweDVGNjksCisgICAgMHg2M0ExLCAweDZCNzIsIDB4ODNEQywgMHg1MUI0LCAweDU0QjIsIDB4NTI0QSwgMHg3NTIyLCAweDk5MTAsCisgICAgMHg1OUZGLCAweDU5RkYsIDB4NURGRiwgMHg4QUVFLCAweDhBRUUsIDB4OENDNywgMHg4Q0M3LCAweDZCMjEsCisgICAgMHg2QjIxLCAweDZFQ0IsIDB4NzNCQSwgMHg1M0YxLCAweDYzNjgsIDB4NjU5QywgMHg5MEFBLCAweDUyRkEsCisgICAgMHg3MjM1LCAweDcyMzUsIDB4OTE0QywgMHg1RjMxLCAweDRFM0IsIDB4NTNENywgMHg2Mzg4LCAweDU0NjgsCisgICAgMHg3RDQyLCAweDdGRDIsIDB4ODg0NiwgMHg5MDMxLCAweDRGNEYsIDB4ODg1MywgMHg4RkYwLCAweDVERTEsCisgICAgMHg5MDc1LCAweDkwNzUsIDB4NjI0MCwgMHg2NkY4LCAweDU5NzMsIDB4NTJERCwgMHg1NTQ2LCAweDVCQjUsCisgICAgMHg1QzA2LCAweDJFOEMsIDB4MkU4RCwgMHg1QzE5LCAweDZEODgsIDB4Nzg1RCwgMHg4MDk2LCAweDRFMDgsCisgICAgMHg1QjgyLCAweDU3Q0UsIDB4NjBDNSwgMHg1N0Y0LCAweDk4RkUsIDB4NjkwRCwgMHg2Qjk2LCAweDk4REYsCisgICAgMHg5OEUwLCAweDJFREUsIDB4Mzc4RCwgMHg0RkI1LCAweDJFOTcsIDB4NkQ3OCwgMHg3NzFGLCAweDkwMzIsCisgICAgMHg0RUJCLCAweDRFQkEsIDB4NTIwMywgMHg1QzBCLCAweDhBMEEsIDB4OEEwQSwgMHg4RkM1LCAweDg4NzAsCisgICAgMHg5MDQyLCAweDM1MUYsIDB4NTJFMiwgMHg2MjEwLCAweDc2REIsIDB4ODA1NiwgMHg4OTgwLCAweDhBQTAsCisgICAgMHg4QUNCLCAweDk3NUMsIDB4OTc1QywgMHg3QTA1LCAweDgxMDYsIDB4OTZCQiwgMHg3QzRELCAweDdCQzAsCisgICAgMHg4QUFBLCAweDk2RUEsIDB4N0Q3NiwgMHg2MjQ3LCAweDZGOTgsIDB4N0ZBMSwgMHg4MjM5LCAweDkwNzgsCisgICAgMHg5MDc3LCAweDUyNEQsIDB4NTE2OCwgMHg2MzgzLCAweDYzRjcsIDB4NzYyNiwgMHg4RDcwLCAweDkwMDEsCisgICAgMHg5MDZELCAweDkwMjAsIDB4MkVDQSwgMHg5MDFGLCAweDhDQ0EsIDB4NUMwQSwgMHg1QzBBLCAweDU5QTUsCisgICAgMHg2Q0YwLCAweDkwMDAsIDB4OTAyRSwgMHg5NjhBLCAweDlCREIsIDB4NTkyNywgMHgzNDI3LCAweDcwMjcsCisgICAgMHg5MDU0LCAweDgxMkIsIDB4NEUzOSwgMHg2QjRFLCAweDcwQUQsIDB4OEE5NSwgMHg2Njk2LCAweDUwMjQsCisgICAgMHg3RjZFLCAweDdCQzksIDB4MkVBRSwgMHg3QjUxLCAweDkwMTAsIDB4NjdGMSwgMHg2Q0U4LCAweDk5RDAsCisgICAgMHg1RjZCLCAweDVGQjUsIDB4NjFGMiwgMHg2NzFELCAweDZGNkUsIDB4OEFCRiwgMHg3NkY0LCAweDY3MTUsCisgICAgMHg2NzE1LCAweDU4OUMsIDB4OEZGRCwgMHg5MDFBLCAweDU3NkEsIDB4OTFFMywgMHg1NDQ4LCAweDVFMUQsCisgICAgMHg3QTBCLCAweDc2ODQsIDB4OTA2OSwgMHg4RkVELCAweDZERkIsIDB4NTE0RSwgMHg5MDE0LCAweDc4M0EsCisgICAgMHg1NzIxLCAweDU3MUYsIDB4NTFBQywgMHg1NTEwLCAweDdDRDYsIDB4ODVFNCwgMHg4QjA0LCAweDkwMDMsCisgICAgMHg5MDBGLCAweDlBMzAsIDB4NUMwRSwgMHg5MDUzLCAweDU0NTEsIDB4M0I4OCwgMHg1MTY3LCAweDgwODksCisgICAgMHg0RTczLCAweDVGQ0QsIDB4OEE4RCwgMHg1QkU3LCAweDdEMEQsIDB4ODk4NywgMHg2RDNFLCAweDgwQkEsCisgICAgMHg1MzVBLCAweDg1ODQsIDB4OEZFQiwgMHg3RTFCLCAweDgwODcsIDB4NEUzNywgMHg2RjUxLCAweDkxQjEsCisgICAgMHg0RjM0LCAweDUyMjQsIDB4NTM0QSwgMHg1RTA2LCAweDc1NTQsIDB4NjY2OSwgMHg4NTQzLCAweDkwN0YsCisgICAgMHg1RkFFLCAweDlGM0IsIDB4NTMzOSwgMHgyRUFBLCAweDVGNjUsIDB4NTlFQywgMHg1OUVCLCAweDhBNTUsCisgICAgMHg1RTk5LCAweDc1QzUsIDB4NUE2NiwgMHg2NTc3LCAweDZENkUsIDB4OENBMCwgMHg4Q0EwLCAweDY3MEQsCisgICAgMHg4OTg2LCAweDRFMTksIDB4NUU2MywgMHg1RTczLCAweDVGMEEsIDB4ODUxMSwgMHg1MDRGLCAweDdERTgsCisgICAgMHg4RkQ0LCAweDkwNEQsIDB4N0MzRiwgMHg1MzA1LCAweDVEMjksIDB4NjJCMSwgMHg2NzBCLCAweDc4MzIsCisgICAgMHg3RTJCLCAweDgwREUsIDB4ODQwQywgMHg5MEE2LCAweDkwQTYsIDB4OThGRCwgMHg5RDZDLCAweDRFQTEsCisgICAgMHg1RTNELCAweDVGRDgsIDB4NUZEOSwgMHg2MjNGLCAweDY3MUIsIDB4NjcxQiwgMHg1MTkyLCAweDY0NjksCisgICAgMHg3RkZCLCAweDUxRTEsIDB4NzhFOCwgMHg5QjU0LCAweDJGQzcsIDB4NjlEOSwgMHg2ODVELCAweDRGRTMsCisgICAgMHg1M0M4LCAweDdFNkQsIDB4OUVCRiwgMHg4MTA4LCAweDY2MEUsIDB4NzZERiwgMHg4RkY3LCAweDU5ODQsCisgICAgMHg1MkQwLCAweDc2RjIsIDB4ODAxNywgMHg2MjNFLCAweDdEMEIsIDB4OTU4MCwgMHg3RDA0LCAweDhFOEQsCisgICAgMHg2ODdBLCAweDY4N0EsIDB4NjgwMSwgMHg2MTA5LCAweDhBRUQsIDB4OEYzOCwgMHg1MkM3LCAweDY3MDksCisgICAgMHg3MzM2LCAweDczMzYsIDB4NzMzNywgMHg4OEQ1LCAweDkwNEEsIDB4NjZEQywgMHgyRUI3LCAweDg5ODEsCisgICAgMHg5OTBBLCAweDdGQ0MsIDB4N0ZGQywgMHg4RUI2LCAweDg2MkQsIDB4NzM4NywgMHg5RjhELCAweDlGOEQsCisgICAgMHg2NUM1LCAweDY4ODEsIDB4NzFEMCwgMHg5NkEzLCAweDlDNTcsIDB4OUU5RiwgMHg3QzdCLCAweDVFQzksCisgICAgMHg2MTkwLCAweDkwMjMsIDB4NjcxNywgMHg4MDAyLCAweDgxMDcsIDB4NTBDQSwgMHg1MTFBLCAweDUxNTQsCisgICAgMHg1MTk1LCAweDJFODcsIDB4NTI4RCwgMHg1MkQ3LCAweDUyRjksIDB4NTM0OSwgMHgzNTNFLCAweDUzREYsCisgICAgMHg2NkZDLCAweDU1MzMsIDB4NTVFNCwgMHg1NDU1LCAweDU2QzAsIDB4NTkzOSwgMHg1QTFDLCAweDVBQzIsCisgICAgMHg1QjczLCAweDVCQzMsIDB4NUMxNCwgMHgzN0UyLCAweDVDRTYsIDB4NUU1NCwgMHg0RTQ4LCAweDVFRTMsCisgICAgMHg2MDk3LCAweDYyRDQsIDB4NjJDQywgMHg2NDFDLCAweDYzQzYsIDB4NjQyOCwgMHg4MjA5LCAweDYzMUIsCisgICAgMHg2NjVGLCAweDY2NUYsIDB4NjY2MywgMHg2NkY1LCAweDY3NUUsIDB4Njg5RCwgMHg2ODhELCAweDY5RjYsCisgICAgMHg2OTYxLCAweDVCRTgsIDB4NUJFOCwgMHg2OUJCLCAweDZCQ0MsIDB4NkYxMSwgMHg2RTE3LCAweDZGOTgsCisgICAgMHg2Q0FBLCAweDZDQUEsIDB4NzAxQiwgMHg3MTYyLCAweDcyM0IsIDB4NEUyQywgMHg3MzFDLCAweDc0Q0EsCisgICAgMHg3NEVGLCAweDc1NzUsIDB4NzVFQywgMHg3NjRFLCAweDNGQjEsIDB4Nzc2QSwgMHg3N0E5LCAweDc5NDAsCisgICAgMHg3OTUzLCAweDc5NTMsIDB4OUY0QiwgMHg3OUFFLCAweDkwODMsIDB4N0I1MywgMHg3QzExLCAweDdDMTQsCisgICAgMHg0MjY0LCAweDdDNTAsIDB4N0M1OCwgMHg3RDQ2LCAweDdENjMsIDB4N0UyMiwgMHg3RTIyLCAweDdFNDgsCisgICAgMHg3RTM1LCAweDdFNDMsIDB4N0U4QywgMHg3RjUwLCAweDdGNTEsIDB4N0Y1MSwgMHg3RjUxLCAweDdGQzUsCisgICAgMHg3RkM2LCAweDdGRTksIDB4ODE0MSwgMHg0NDUzLCAweDgyNTgsIDB4ODI3OSwgMHgyRUJGLCAweDJFQzAsCisgICAgMHg4MkUzLCAweDUxNzksIDB4ODNBMiwgMHg4NDIwLCAweDgzQkQsIDB4ODRGNCwgMHg4NTZELCAweDg1ODcsCisgICAgMHg4NUY0LCAweDRFNTUsIDB4ODczNywgMHg4NzNCLCAweDg4MDUsIDB4ODdCRCwgMHg4NjdELCAweDg4MzYsCisgICAgMHg4OTQ0LCAweDg4QzYsIDB4ODlCRCwgMHg4QURCLCAweDhCM0UsIDB4OEI1QSwgMHg4RDczLCAweDhEOTksCisgICAgMHg4RENCLCAweDhFMzQsIDB4OEU0QSwgMHg4RkVGLCAweDkwODcsIDB4OEZGQSwgMHg5MDFFLCAweDkwMzUsCisgICAgMHg5MDUwLCAweDhGQzgsIDB4OTA4MSwgMHg5MDhBLCAweDkwOEEsIDB4OTA4QSwgMHg5MDhBLCAweDkwOEEsCisgICAgMHg5MDhBLCAweDkwODksIDB4OTA4OSwgMHg5MDg5LCAweDkwODksIDB4OTA4OSwgMHg5MDg5LCAweDkwODksCisgICAgMHg5MDg5LCAweDkwODksIDB4OTA4OSwgMHg5MDg5LCAweDkwODksIDB4OTJDRiwgMHg5M0RELCAweDk1QkMsCisgICAgMHg5NjIxLCAweDk2QjIsIDB4OTc1QywgMHg5ODM5LCAweDk4RUIsIDB4OTkwMywgMHg5OTA5LCAweDk5NDUsCisgICAgMHg5OTQ1LCAweDk5NEIsIDB4OUEwOCwgMHg5QTVGLCAweDlBNjUsIDB4OUFFRiwgMHg5QjE4LCAweDlCREYsCisgICAgMHg5RDA5LCAweDlEMDgsIDB4OUVBNSwgMHg5RUNDLCAweDlGMDgsIDB4OUY0QSwgMHg5RjYzLCAweDlGNjcsCisgICAgMHg5RjZDLCAweDcxOTksIDB4NzE5OSwgMHg4OTFDLCAweDY4QzgsIDB4NjZGQiwgMHg1RjQ1LCAweDUzMDAsCisgICAgMHg1Mzg5LCAweDU5NTMsIDB4RkExMSwgMHg2ODUyLCAweDZBNzMsIDB4NkQ4NywgMHhGQTE1LCAweDhBMTIsCisgICAgMHg0RTA0LCAweDRFMDUsIDB4NEUxRiwgMHg0RTJCLCAweDRFMkYsIDB4NEUzMCwgMHg0RTQwLCAweDRFNDEsCisgICAgMHg0RTQ0LCAweDRFNUEsIDB4NEU3RiwgMHg0RThELCAweDRFOTYsIDB4NEVCOSwgMHg0RUQwLCAweDRFRTAsCisgICAgMHg0RUZELCAweDRFRkYsIDB4NEYwQiwgMHg0RjE1LCAweDRGNjAsIDB4NEYzQiwgMHg0RjQ5LCAweDRGNTQsCisgICAgMHg0RjdBLCAweDRGN0QsIDB4NEY3RSwgMHg0Rjk3LCAweDRGQkUsIDB4NEZDRiwgMHg0RkZELCAweDUwMDAsCisgICAgMHg1MDAxLCAweDUwMTAsIDB4NTAxQiwgMHg1MDI3LCAweDUwMkUsIDB4NTA1NywgMHg1MDY2LCAweDUwNkEsCisgICAgMHg1MDNCLCAweDUwOEYsIDB4NTA5NiwgMHg1MDlDLCAweDUwQ0MsIDB4NTBFNiwgMHg1MEU5LCAweDUwRUYsCisgICAgMHg1MTA4LCAweDUxMEIsIDB4NTExMCwgMHg1MTFCLCAweDUxMUUsIDB4NTE1RiwgMHg1MUExLCAweDUxQkMsCisgICAgMHg1MURFLCAweDUxRUUsIDB4NTFGNCwgMHg1MjAxLCAweDUyMDIsIDB4NTIxMywgMHg1MjQ5LCAweDUyNjEsCisgICAgMHg1MjY2LCAweDUyOTMsIDB4NTJDOCwgMHg1MkYwLCAweDUzMEEsIDB4NTMwQiwgMHg1MzNFLCAweDUzNEMsCisgICAgMHg1MzRCLCAweDUzNjEsIDB4NTM2QywgMHg1M0FCLCAweDUzREEsIDB4NTNFNiwgMHg1M0Y1LCAweDU0MjcsCisgICAgMHg1NDRELCAweDU0NjYsIDB4NTQ2QiwgMHg1NDc0LCAweDU0OEQsIDB4NTQ5NiwgMHg1NEExLCAweDU0QUQsCisgICAgMHg1NEI5LCAweDU0QkYsIDB4NTRDNiwgMHg1NENELCAweDU1MEUsIDB4NTUyQiwgMHg1NTM1LCAweDU1NEEsCisgICAgMHg1NTYwLCAweDU1NjEsIDB4NTU4OCwgMHg1NThFLCAweDU2MDgsIDB4NTYwRSwgMHg1NjBGLCAweDU2MzcsCisgICAgMHg1NjNGLCAweDU2NDksIDB4NTY0QiwgMHg1NjRGLCAweDU2NjYsIDB4NTY2OSwgMHg1NjZGLCAweDU2NzEsCisgICAgMHg1NjcyLCAweDU2OTUsIDB4NTY5QSwgMHg1NkFDLCAweDU2QUQsIDB4NTZCMSwgMHg1NkM5LCAweDU2REQsCisgICAgMHg1NkU0LCAweDU3MEEsIDB4NTcxNSwgMHg1NzIzLCAweDU3MkYsIDB4NTczMywgMHg1NzM0LCAweDU3NEMsCisgICAgMHg1NzcwLCAweDU3OEMsIDB4NTc5QywgMHg1N0I4LCAweDU3RTYsIDB4NTdFRCwgMHg1N0Y1LCAweDU3RjYsCisgICAgMHg1N0ZGLCAweDU4MDksIDB4NTgyMCwgMHg1ODMyLCAweDU4N0MsIDB4NTg4MCwgMHg1OEE5LCAweDU4Q0UsCisgICAgMHg1OEQwLCAweDU4RDQsIDB4NThEQSwgMHg1OEU5LCAweDU5MEMsIDB4NTkyNCwgMHg1OTJGLCAweDU5NjEsCisgICAgMHg1OTZELCAweDU5Q0EsIDB4NTlEMiwgMHg1OURELCAweDU5RTMsIDB4NTlFNCwgMHg1QTA0LCAweDVBMEMsCisgICAgMHg1QTIzLCAweDVBNDcsIDB4NUE1NSwgMHg1QTYzLCAweDVBNkQsIDB4NUE3RSwgMHg1QTlFLCAweDVBQTcsCisgICAgMHg1QUFDLCAweDVBQjMsIDB4NUFFMCwgMHg1QjAwLCAweDVCMTksIDB4NUIyNSwgMHg1QjJELCAweDVCNDEsCisgICAgMHg1QjdDLCAweDVCN0UsIDB4NUI3RiwgMHg1QjhBLCAweDVDMjMsIDB4NUMyQiwgMHg1QzMwLCAweDVDNjMsCisgICAgMHg1QzY5LCAweDVDN0MsIDB4NUNDQiwgMHg1Q0QyLCAweDVDRjQsIDB4NUQyNCwgMHg1RDI2LCAweDVENDMsCisgICAgMHg1RDQ2LCAweDVENEEsIDB4NUQ5MiwgMHg1RDk0LCAweDVEOTksIDB4NURBMCwgMHg1REQ4LCAweDVERTAsCisgICAgMHg1REY4LCAweDVFMDAsIDB4NUUxMiwgMHg1RTE0LCAweDVFMTUsIDB4NUUxOCwgMHg1RTJFLCAweDVFNTgsCisgICAgMHg1RTZCLCAweDVFNkMsIDB4NUVBOCwgMHg1RUFBLCAweDVFQkUsIDB4NUVCRiwgMHg1RUNCLCAweDVFRDIsCisgICAgMHg1RjA3LCAweDVGMEUsIDB4NUYxQywgMHg1RjFELCAweDVGMjIsIDB4NUYyOCwgMHg1RjM2LCAweDVGM0IsCisgICAgMHg1RjQwLCAweDVGNTAsIDB4NUY1OCwgMHg1RjY0LCAweDVGODksIDB4NUY5QywgMHg1RkE3LCAweDVGQTQsCisgICAgMHg1RkFGLCAweDVGQjgsIDB4NUZDNCwgMHg1RkM5LCAweDVGRTEsIDB4NUZFOSwgMHg1RkVELCAweDVGRkMsCisgICAgMHg2MDE3LCAweDYwMUEsIDB4NjAzMywgMHg2MDYxLCAweDYwN0YsIDB4NjA5RSwgMHg2MEE0LCAweDYwQjAsCisgICAgMHg2MENCLCAweDYwREIsIDB4NjBGOCwgMHg2MTEyLCAweDYxMTMsIDB4NjExNCwgMHg2MTFDLCAweDYxN0MsCisgICAgMHg2MThELCAweDYxOUYsIDB4NjFBOCwgMHg2MUMyLCAweDYxREYsIDB4NjIxNSwgMHg2MjI5LCAweDYyNDMsCisgICAgMHg2MjQ2LCAweDYyNEMsIDB4NjI1MSwgMHg2MjU2LCAweDYyQzQsIDB4NjJGQywgMHg2MzBBLCAweDYzMEQsCisgICAgMHg2MzE4LCAweDYzMzksIDB4NjM0MiwgMHg2MzQzLCAweDYzNjUsIDB4NjM3NCwgMHg2MzdELCAweDYzODQsCisgICAgMHg2Mzg3LCAweDYzOTAsIDB4NjM5RSwgMHg2M0QxLCAweDYzREMsIDB4NjQwOSwgMHg2NDEwLCAweDY0MjIsCisgICAgMHg2NDU0LCAweDY0NUIsIDB4NjQ2RCwgMHg2NDdCLCAweDY0QkUsIDB4NjRCRiwgMHg2NEU1LCAweDY0RjcsCisgICAgMHg2NEZCLCAweDY1MDQsIDB4NjUxNiwgMHg2NTE5LCAweDY1NDcsIDB4NjU2NywgMHg2NTgxLCAweDY1ODUsCisgICAgMHg2NUMyLCAweDY1RjAsIDB4NjVGMiwgMHg2NjJDLCAweDY2NEMsIDB4NjY1QiwgMHg2NjVDLCAweDY2NjEsCisgICAgMHg2NjZCLCAweDY2NzcsIDB4NjZBNCwgMHg2NkM4LCAweDY2RUMsIDB4NjcwNSwgMHg2NzEzLCAweDY3MzMsCisgICAgMHg2NzQ4LCAweDY3NEMsIDB4Njc3NiwgMHg2NzdCLCAweDY3QjAsIDB4NjdCMiwgMHg2N0Y5LCAweDY3RDcsCisgICAgMHg2N0Q5LCAweDY3RjAsIDB4NjgyQywgMHg2ODMwLCAweDY4MzEsIDB4Njg1QiwgMHg2ODcyLCAweDY4NzUsCisgICAgMHg2ODdBLCAweDY4ODQsIDB4NjhBNSwgMHg2OEIyLCAweDY4RDAsIDB4NjhENiwgMHg2OEU4LCAweDY4RUQsCisgICAgMHg2OEYwLCAweDY4RjEsIDB4NjhGQywgMHg2OTExLCAweDY5MTMsIDB4NjkzNSwgMHg2OTNCLCAweDY5NTcsCisgICAgMHg2OTYzLCAweDY5NzIsIDB4Njk3RiwgMHg2OTgwLCAweDY5QTYsIDB4NjlBRCwgMHg2OUI3LCAweDY5RDYsCisgICAgMHg2OUQ3LCAweDZBMDEsIDB4NkEwRiwgMHg2QTE1LCAweDZBMjgsIDB4NkEzNCwgMHg2QTNFLCAweDZBNDUsCisgICAgMHg2QTUwLCAweDZBNTEsIDB4NkE1NiwgMHg2QTVCLCAweDZBODMsIDB4NkE4OSwgMHg2QTkxLCAweDZBOUQsCisgICAgMHg2QTlFLCAweDZBOUYsIDB4NkFEQywgMHg2QUU3LCAweDZBRUMsIDB4NkIxRSwgMHg2QjI0LCAweDZCMzUsCisgICAgMHg2QjQ2LCAweDZCNTYsIDB4NkI2MCwgMHg2QjgyLCAweDZCQkUsIDB4NkJFMSwgMHg2QkYxLCAweDZDMTAsCisgICAgMHg2QzMzLCAweDZDMzUsIDB4NkMzQSwgMHg2QzU5LCAweDZDNzYsIDB4NkM3QiwgMHg2Qzg1LCAweDZDOTUsCisgICAgMHg2QzlDLCAweDZDRDAsIDB4NkNENCwgMHg2Q0Q2LCAweDZDRTAsIDB4NkNFQiwgMHg2Q0VDLCAweDZDRUUsCisgICAgMHg2RDBBLCAweDZEMEUsIDB4NkQxMSwgMHg2RDJFLCAweDZENTcsIDB4NkQ1RSwgMHg2RDY1LCAweDZEODIsCisgICAgMHg2REJGLCAweDZEQzQsIDB4NkRDQSwgMHg2REQ2LCAweDZERTksIDB4NkUyMiwgMHg2RTUxLCAweDZFQzcsCisgICAgMHg2RUNBLCAweDZFQ0UsIDB4NkVGRCwgMHg2RjFBLCAweDZGMkEsIDB4NkYyRiwgMHg2RjMzLCAweDZGNUEsCisgICAgMHg2RjVFLCAweDZGNjIsIDB4NkY3RCwgMHg2RjhCLCAweDZGOEQsIDB4NkY5MiwgMHg2Rjk0LCAweDZGOUEsCisgICAgMHg2RkE3LCAweDZGQTgsIDB4NkZCNiwgMHg2RkRBLCAweDZGREUsIDB4NkZGOSwgMHg3MDM5LCAweDcwM0MsCisgICAgMHg3MDRBLCAweDcwNTQsIDB4NzA1RCwgMHg3MDVFLCAweDcwNjQsIDB4NzA2QywgMHg3MDdFLCAweDcwODEsCisgICAgMHg3MDk1LCAweDcwQjcsIDB4NzBEMywgMHg3MEQ0LCAweDcwRDgsIDB4NzBEQywgMHg3MTA3LCAweDcxMjAsCisgICAgMHg3MTMxLCAweDcxNEEsIDB4NzE1MiwgMHg3MTYwLCAweDcxNzksIDB4NzE5MiwgMHg3MUIzLCAweDcxQ0IsCisgICAgMHg3MUQzLCAweDcxRDYsIDB4NzIwMCwgMHg3MjFELCAweDcyMkIsIDB4NzIzOCwgMHg3MjQxLCAweDcyNTMsCisgICAgMHg3MjU1LCAweDcyNTYsIDB4NzI1QywgMHg3MjhELCAweDcyQUQsIDB4NzJCNCwgMHg3MkM3LCAweDcyRkIsCisgICAgMHg3MzA0LCAweDczMDUsIDB4NzMyOCwgMHg3MzMxLCAweDczNDMsIDB4NzM2QywgMHg3MzdDLCAweDczODMsCisgICAgMHg3Mzg1LCAweDczODYsIDB4NzM5NSwgMHg3MzlFLCAweDczOUYsIDB4NzNBMCwgMHg3M0E2LCAweDczQUIsCisgICAgMHg3M0I1LCAweDczQjcsIDB4NzNCQywgMHg3M0NGLCAweDczRDksIDB4NzNFOSwgMHg3M0Y0LCAweDczRkQsCisgICAgMHg3NDA0LCAweDc0MEEsIDB4NzQxQSwgMHg3NDFCLCAweDc0MjQsIDB4NzQyOCwgMHg3NDJDLCAweDc0MkYsCisgICAgMHg3NDMwLCAweDc0MzEsIDB4NzQzOSwgMHg3NDQ0LCAweDc0NDcsIDB4NzQ0QiwgMHg3NDRELCAweDc0NTEsCisgICAgMHg3NDU3LCAweDc0NjYsIDB4NzQ2QiwgMHg3NDcxLCAweDc0ODAsIDB4NzQ4NSwgMHg3NDg2LCAweDc0ODcsCisgICAgMHg3NDkwLCAweDc0OTgsIDB4NzQ5QywgMHg3NEEwLCAweDc0QTMsIDB4NzRBOCwgMHg3NEFCLCAweDc0QjUsCisgICAgMHg3NEJGLCAweDc0QzgsIDB4NzREQSwgMHg3NERFLCAweDc1NEUsIDB4NzU3OSwgMHg3NTgxLCAweDc1OTAsCisgICAgMHg3NTkyLCAweDc1OTMsIDB4NzVCNCwgMHg3NUU0LCAweDc1RjksIDB4NzYwMCwgMHg3NjBBLCAweDc2MTUsCisgICAgMHg3NjE2LCAweDc2MTksIDB4NzYxRSwgMHg3NjJELCAweDc2MzUsIDB4NzY0MywgMHg3NjRCLCAweDc2NjUsCisgICAgMHg3NjZELCAweDc2NkYsIDB4NzY3MSwgMHg3Njc0LCAweDc2QTQsIDB4NzZBNSwgMHg3NkM1LCAweDc2Q0MsCisgICAgMHg3NkVDLCAweDc2RkMsIDB4NzczNCwgMHg3NzM2LCAweDc3NUMsIDB4Nzc1RiwgMHg3NzYwLCAweDc3NzIsCisgICAgMHg3NzdELCAweDc3OTUsIDB4NzdBQSwgMHg3N0U2LCAweDc3RjAsIDB4NzdGNCwgMHg3ODA2LCAweDc4MjIsCisgICAgMHg3ODJELCAweDc4MkUsIDB4NzgzMCwgMHg3ODM1LCAweDc4NjgsIDB4Nzg5RSwgMHg3OEM4LCAweDc4Q0MsCisgICAgMHg3OENFLCAweDc4RTQsIDB4NzhFMCwgMHg3OEUxLCAweDc4RjIsIDB4NzhGNywgMHg3OEZCLCAweDc5MzEsCisgICAgMHg3OTM0LCAweDc5M0IsIDB4NzkzRCwgMHg3OTQ1LCAweDc5NUIsIDB4Nzk1QywgMHg3OThCLCAweDc5OTYsCisgICAgMHg3OTk4LCAweDc5QjgsIDB4NzlCQiwgMHg3OUNBLCAweDc5REEsIDB4N0EwMywgMHg3QTA5LCAweDdBMTEsCisgICAgMHg3QTFFLCAweDdBMkQsIDB4N0EzOSwgMHg3QTQ1LCAweDdBNEMsIDB4N0E1RCwgMHg3QTYwLCAweDdBNkQsCisgICAgMHg3QTc4LCAweDdBQTAsIDB4N0FBMywgMHg3QUIzLCAweDdBQkIsIDB4N0FCQywgMHg3QUM2LCAweDdCMDcsCisgICAgMHg3QjE0LCAweDdCMjcsIDB4N0IzMSwgMHg3QjQ3LCAweDdCNEUsIDB4N0I2MCwgMHg3QjY5LCAweDdCNkQsCisgICAgMHg3QjcyLCAweDdCOTEsIDB4N0JBRiwgMHg3QkQ3LCAweDdCRDksIDB4N0MwQiwgMHg3QzBGLCAweDdDMjAsCisgICAgMHg3QzI2LCAweDdDMzEsIDB4N0MzNiwgMHg3QzUxLCAweDdDNTksIDB4N0M2NywgMHg3QzZFLCAweDdDNzAsCisgICAgMHg3Q0JDLCAweDdDQkYsIDB4N0NDOCwgMHg3Q0M5LCAweDdDRDcsIDB4N0NEOSwgMHg3Q0RELCAweDdDRUIsCisgICAgMHg3RDA3LCAweDdEMDgsIDB4N0QwOSwgMHg3RDEzLCAweDdEMUQsIDB4N0QyMywgMHg3RDQxLCAweDdENTMsCisgICAgMHg3RDU5LCAweDdENUQsIDB4N0Q3QSwgMHg3RDg2LCAweDdEOEIsIDB4N0Q4QywgMHg3RENDLCAweDdERUIsCisgICAgMHg3REYxLCAweDdERjksIDB4N0UwOCwgMHg3RTExLCAweDdFMTUsIDB4N0UyMCwgMHg3RTQ3LCAweDdFNjIsCisgICAgMHg3RTZFLCAweDdFNzMsIDB4N0U4RCwgMHg3RTkxLCAweDdFOTgsIDB4N0Y0NCwgMHg3RjRGLCAweDdGNTIsCisgICAgMHg3RjUzLCAweDdGNjEsIDB4N0Y5MSwgMHg3RkJGLCAweDdGQ0UsIDB4N0ZERiwgMHg3RkU1LCAweDdGRUMsCisgICAgMHg3RkVFLCAweDdGRUYsIDB4N0ZGQSwgMHg4MDBFLCAweDgwMTEsIDB4ODAxNCwgMHg4MDI0LCAweDgwMjYsCisgICAgMHg4MDNBLCAweDgwM0MsIDB4ODA2MCwgMHg4MDcxLCAweDgwNzUsIDB4ODA5RSwgMHg4MEE2LCAweDgwQUIsCisgICAgMHg4MEQ3LCAweDgwRDgsIDB4ODExNiwgMHg4MTE4LCAweDgxM0EsIDB4ODE0QSwgMHg4MTRDLCAweDgxODEsCisgICAgMHg4MTg0LCAweDgxQjQsIDB4ODFDRiwgMHg4MUY5LCAweDgyMDMsIDB4ODIyMSwgMHg4MjMyLCAweDgyMzQsCisgICAgMHg4MjQ2LCAweDgyNEIsIDB4ODI0RiwgMHg4MjhFLCAweDgyQUUsIDB4ODJCNywgMHg4MkJFLCAweDgyQzYsCisgICAgMHg4MkZFLCAweDgzNDMsIDB4ODM1MSwgMHg4MzU1LCAweDgzODYsIDB4ODM4RCwgMHg4MzkyLCAweDgzOTgsCisgICAgMHg4M0E5LCAweDgzQkYsIDB4ODNDMCwgMHg4M0VBLCAweDg0MEYsIDB4ODQxMSwgMHg4NDRBLCAweDg0NzYsCisgICAgMHg4NEE4LCAweDg0QUYsIDB4ODRDMCwgMHg4NEMyLCAweDg0RjAsIDB4ODRGRCwgMHg4NTBDLCAweDg1MzQsCisgICAgMHg4NTVFLCAweDg1OEYsIDB4ODVCNywgMHg4NUNFLCAweDg1QUQsIDB4ODYxMiwgMHg4NjI5LCAweDg2NTIsCisgICAgMHg4NjYzLCAweDg2NkMsIDB4ODY2RiwgMHg4NjdBLCAweDg2OEQsIDB4ODY5MSwgMHg4Njk4LCAweDg2QTcsCisgICAgMHg4NkE4LCAweDg2RkEsIDB4ODZGRCwgMHg4NzBCLCAweDg3MTMsIDB4ODcxOSwgMHg4NzFFLCAweDg3MjgsCisgICAgMHg4NzNFLCAweDg3NzEsIDB4ODc4OCwgMHg4Nzk5LCAweDg3QUMsIDB4ODdBRCwgMHg4N0I1LCAweDg3RDYsCisgICAgMHg4N0VCLCAweDg3RUQsIDB4ODgwMSwgMHg4ODAzLCAweDg4MDYsIDB4ODgwQiwgMHg4ODE0LCAweDg4MUMsCisgICAgMHg4ODU2LCAweDg4NUYsIDB4ODg2NCwgMHg4ODk4LCAweDg4QUEsIDB4ODhCRCwgMHg4OEJFLCAweDg4Q0EsCisgICAgMHg4OEQyLCAweDg4REIsIDB4ODhGMCwgMHg4OEYxLCAweDg5MDYsIDB4ODkxOCwgMHg4OTE5LCAweDg5MUEsCisgICAgMHg4OTI3LCAweDg5MzAsIDB4ODkzRSwgMHg4OTdCLCAweDg5RDQsIDB4ODlENiwgMHg4OUU1LCAweDg5RjEsCisgICAgMHg4QTA3LCAweDhBMEYsIDB4OEExNSwgMHg4QTIyLCAweDhBNEUsIDB4OEE3RiwgMHg4QUY0LCAweDhCMUYsCisgICAgMHg4QjM3LCAweDhCNDMsIDB4OEI0NCwgMHg4QjU0LCAweDhCOUMsIDB4OEI5RSwgMHg4QzQ3LCAweDhDNTQsCisgICAgMHg4QzczLCAweDhDQTQsIDB4OENEOSwgMHg4Q0UxLCAweDhDRjgsIDB4OENGRSwgMHg4RDFCLCAweDhENjksCisgICAgMHg4RDZDLCAweDhEODQsIDB4OEQ4RCwgMHg4RDk1LCAweDhEQTYsIDB4OERDNiwgMHg4RENFLCAweDhERTQsCisgICAgMHg4REVDLCAweDhFMjAsIDB4OEU0QiwgMHg4RTZDLCAweDhFNzAsIDB4OEU3QSwgMHg4RTkyLCAweDhFQUUsCisgICAgMHg4RUIzLCAweDhFRDEsIDB4OEVENCwgMHg4RUY5LCAweDhGMTcsIDB4OEYzNiwgMHg4RkE2LCAweDhGQjUsCisgICAgMHg4RkI2LCAweDhGQzYsIDB4OEZFMCwgMHg4RkU0LCAweDhGRjYsIDB4OTAwMiwgMHg5MDJDLCAweDkwNDQsCisgICAgMHg5MDg4LCAweDkwOTUsIDB4OTA5OSwgMHg5MDlCLCAweDkwQTIsIDB4OTBCNCwgMHg5MEQ3LCAweDkwREQsCisgICAgMHg5MEY0LCAweDkxMTcsIDB4OTExQywgMHg5MTMxLCAweDkxM0EsIDB4OTEzRCwgMHg5MTQ4LCAweDkxNUIsCisgICAgMHg5MTYxLCAweDkxNjQsIDB4OTE4RSwgMHg5MTlFLCAweDkxQTgsIDB4OTFBRCwgMHg5MUFFLCAweDkxQjIsCisgICAgMHg5MUJDLCAweDkxRjAsIDB4OTFGNywgMHg5MUZCLCAweDkyMDcsIDB4OTIyOCwgMHg5MjMzLCAweDkyMzgsCisgICAgMHg5MjQzLCAweDkyNDcsIDB4OTI0RiwgMHg5MjYwLCAweDkyQzIsIDB4OTJDQiwgMHg5MkNDLCAweDkyREYsCisgICAgMHg5MzBELCAweDkzMTUsIDB4OTMxRiwgMHg5MzI3LCAweDkzNDcsIDB4OTM1MiwgMHg5MzY1LCAweDkzNkEsCisgICAgMHg5MzZELCAweDkzOUIsIDB4OTNCQSwgMHg5M0E5LCAweDkzQzEsIDB4OTNDQSwgMHg5M0UyLCAweDkzRkEsCisgICAgMHg5M0ZELCAweDk0MEYsIDB4OTQzNCwgMHg5NDNGLCAweDk0NTUsIDB4OTQ2QiwgMHg5NDcyLCAweDk1NzgsCisgICAgMHg5NUE2LCAweDk1QTksIDB4OTVBQiwgMHg5NUI0LCAweDk1QkQsIDB4OTVEQSwgMHg5NjFELCAweDk2NDEsCisgICAgMHg5NjU4LCAweDk2ODQsIDB4OTZBNCwgMHg5NkE5LCAweDk2RDIsIDB4NURCMiwgMHg5NkRFLCAweDk2RTksCisgICAgMHg5NkYxLCAweDk3MDIsIDB4OTcwOSwgMHg5NzVBLCAweDk3NjMsIDB4OTc2RSwgMHg5NzczLCAweDk3OUEsCisgICAgMHg5N0EyLCAweDk3QjUsIDB4OTdCNiwgMHg5N0Q5LCAweDk3REUsIDB4OTdGNCwgMHg5ODBBLCAweDk4MEUsCisgICAgMHg5ODFFLCAweDk4MjMsIDB4OTgyQiwgMHg5ODNFLCAweDk4NTIsIDB4OTg1MywgMHg5ODU5LCAweDk4NkMsCisgICAgMHg5OEI4LCAweDk4QkEsIDB4OThCRiwgMHg5OEM4LCAweDk4RTUsIDB4OTkzMiwgMHg5OTMzLCAweDk5NDAsCisgICAgMHg5OTRELCAweDk5NUMsIDB4OTk1RiwgMHg5OUIxLCAweDk5QjksIDB4OTlCQSwgMHg5OUM5LCAweDlBMDIsCisgICAgMHg5QTE2LCAweDlBMjQsIDB4OUEyNywgMHg5QTJELCAweDlBMkUsIDB4OUEzNiwgMHg5QTM4LCAweDlBNEEsCisgICAgMHg5QTU2LCAweDlBQjUsIDB4OUFCNiwgMHg5QUY5LCAweDlCMDMsIDB4OUIyMCwgMHg5QjMzLCAweDlCMzQsCisgICAgMHg5QjczLCAweDlCNzksIDB4OUJBNywgMHg5QkMxLCAweDlCQzcsIDB4OUJENywgMHg5QkU3LCAweDlCRUIsCisgICAgMHg5QkY3LCAweDlCRkEsIDB4OUJGRCwgMHg5QzBCLCAweDlDMjcsIDB4OUMyQSwgMHg5QzM2LCAweDlDNDEsCisgICAgMHg5QzUzLCAweDlDNjMsIDB4OUM2QSwgMHg5Qzc3LCAweDlEMDIsIDB4OUQ0MiwgMHg5RDQ3LCAweDlENjMsCisgICAgMHg5RDY5LCAweDlEN0MsIDB4OUQ3RSwgMHg5RDhELCAweDlEQjEsIDB4OURDMywgMHg5REM3LCAweDlERDYsCisgICAgMHg5RERGLCAweDlERUIsIDB4OURGNCwgMHg5RTE1LCAweDlFMUQsIDB4OUVBNCwgMHg5RUE4LCAweDlFQUMsCisgICAgMHg5RUU3LCAweDlFRUUsIDB4OUYxMCwgMHg5RjEyLCAweDlGMTcsIDB4OUYxOSwgMHg5RjJGLCAweDlGMzcsCisgICAgMHg5RjM5LCAweDlGNDEsIDB4OUY0NSwgMHg5RjU3LCAweDlGNjgsIDB4OUY3MSwgMHg5Rjc1LCAweDlGOTAsCisgICAgMHg5Rjk0LCAweDlGQTIsIDB4NEUzMCwgMHgzNDA1LCAweDRGNjAsIDB4NTYyMCwgMHg1RUNCLCAweDJFOTUsCisgICAgMHg2MEE0LCAweDY5RDcsIDB4NkIyNCwgMHg2RkY5LCAweDZFRTYsIDB4NzFCMywgMHgyRUE0LCAweDdBQzYsCisgICAgMHg3RjYxLCAweDgwNzEsIDB4ODA5RSwgMHgyRUNDLCAweDkxRjAsIDB4NURCMiwgMHg5N0RFLCAweDRGRDMsCisgICAgMHg1MEQ5LCAweDUwRjAsIDB4NTFDMywgMHg1Njc2LCAweDZBNTQsIDB4NkQwMSwgMHg2REQwLCAweDZFNDIsCisgICAgMHg2RUQ5LCAweDczRTQsIDB4NzQyMSwgMHg3NTZDLCAweDc4NTEsIDB4ODdGNSwgMHhGRkZELCAweDczQTgsCisgICAgMHgzQUYzLCAweDM0REIsIDB4NDQwQywgMHgzRThBLCAweEZGRkQsIDB4RkZGRCwgMHg0QkU4LCAweEZGRkQsCisgICAgMHgzRURBLCAweDNCMjIsIDB4RkZGRCwgMHg0NTdBLCAweDQwOTMsIDB4RkZGRCwgMHg0NjY1LCAweDQxMDMsCisgICAgMHg0MjkzLCAweDQ2QUUsIDB4MzQ4OCwgMHhGRkZELAorfTsKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvRVVDLUhfMS5jcHAgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvSmFwYW4xL0VVQy1IXzEuY3BwCmluZGV4IGYwZTAxZTEuLjdlYTU4NjYgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvRVVDLUhfMS5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0phcGFuMS9FVUMtSF8xLmNwcApAQCAtMSw0OCArMSw0OCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0VVQ19IXzFbMTIwICogM10gPSB7DQotICAgIDB4MDAyMCwgMHgwMDdFLCAweDAwRTcsIDB4OEVBMCwgMHg4RURGLCAweDAxNDYsIDB4QTFBMSwgMHhBMUZFLCAweDAyNzksDQotICAgIDB4QTJBMSwgMHhBMkFFLCAweDAyRDcsIDB4QTJCQSwgMHhBMkMxLCAweDAyRTUsIDB4QTJDQSwgMHhBMkQwLCAweDAyRUQsDQotICAgIDB4QTJEQywgMHhBMkVBLCAweDAyRjQsIDB4QTJGMiwgMHhBMkY5LCAweDAzMDMsIDB4QTJGRSwgMHhBMkZFLCAweDAzMEIsDQotICAgIDB4QTNCMCwgMHhBM0I5LCAweDAzMEMsIDB4QTNDMSwgMHhBM0RBLCAweDAzMTYsIDB4QTNFMSwgMHhBM0ZBLCAweDAzMzAsDQotICAgIDB4QTRBMSwgMHhBNEYzLCAweDAzNEEsIDB4QTVBMSwgMHhBNUY2LCAweDAzOUQsIDB4QTZBMSwgMHhBNkI4LCAweDAzRjMsDQotICAgIDB4QTZDMSwgMHhBNkQ4LCAweDA0MEIsIDB4QTdBMSwgMHhBN0MxLCAweDA0MjMsIDB4QTdEMSwgMHhBN0YxLCAweDA0NDQsDQotICAgIDB4QThBMSwgMHhBOEExLCAweDFEMzcsIDB4QThBMiwgMHhBOEEyLCAweDFEMzksIDB4QThBMywgMHhBOEEzLCAweDFENDMsDQotICAgIDB4QThBNCwgMHhBOEE0LCAweDFENDcsIDB4QThBNSwgMHhBOEE1LCAweDFENEYsIDB4QThBNiwgMHhBOEE2LCAweDFENEIsDQotICAgIDB4QThBNywgMHhBOEE3LCAweDFENTMsIDB4QThBOCwgMHhBOEE4LCAweDFENjMsIDB4QThBOSwgMHhBOEE5LCAweDFENUIsDQotICAgIDB4QThBQSwgMHhBOEFBLCAweDFENkIsIDB4QThBQiwgMHhBOEFCLCAweDFENzMsIDB4QThBQywgMHhBOEFDLCAweDFEMzgsDQotICAgIDB4QThBRCwgMHhBOEFELCAweDFEM0EsIDB4QThBRSwgMHhBOEFFLCAweDFENDYsIDB4QThBRiwgMHhBOEFGLCAweDFENEEsDQotICAgIDB4QThCMCwgMHhBOEIwLCAweDFENTIsIDB4QThCMSwgMHhBOEIxLCAweDFENEUsIDB4QThCMiwgMHhBOEIyLCAweDFENUEsDQotICAgIDB4QThCMywgMHhBOEIzLCAweDFENkEsIDB4QThCNCwgMHhBOEI0LCAweDFENjIsIDB4QThCNSwgMHhBOEI1LCAweDFENzIsDQotICAgIDB4QThCNiwgMHhBOEI2LCAweDFEODIsIDB4QThCNywgMHhBOEI3LCAweDFENTcsIDB4QThCOCwgMHhBOEI4LCAweDFENjYsDQotICAgIDB4QThCOSwgMHhBOEI5LCAweDFENUYsIDB4QThCQSwgMHhBOEJBLCAweDFENkUsIDB4QThCQiwgMHhBOEJCLCAweDFENzYsDQotICAgIDB4QThCQywgMHhBOEJDLCAweDFENTQsIDB4QThCRCwgMHhBOEJELCAweDFENjcsIDB4QThCRSwgMHhBOEJFLCAweDFENUMsDQotICAgIDB4QThCRiwgMHhBOEJGLCAweDFENkYsIDB4QThDMCwgMHhBOEMwLCAweDFENzksIDB4QjBBMSwgMHhCMEZFLCAweDA0NjUsDQotICAgIDB4QjFBMSwgMHhCMUZFLCAweDA0QzMsIDB4QjJBMSwgMHhCMkZFLCAweDA1MjEsIDB4QjNBMSwgMHhCM0ZFLCAweDA1N0YsDQotICAgIDB4QjRBMSwgMHhCNEZFLCAweDA1REQsIDB4QjVBMSwgMHhCNUZFLCAweDA2M0IsIDB4QjZBMSwgMHhCNkZFLCAweDA2OTksDQotICAgIDB4QjdBMSwgMHhCN0ZFLCAweDA2RjcsIDB4QjhBMSwgMHhCOEZFLCAweDA3NTUsIDB4QjlBMSwgMHhCOUZFLCAweDA3QjMsDQotICAgIDB4QkFBMSwgMHhCQUZFLCAweDA4MTEsIDB4QkJBMSwgMHhCQkZFLCAweDA4NkYsIDB4QkNBMSwgMHhCQ0ZFLCAweDA4Q0QsDQotICAgIDB4QkRBMSwgMHhCREZFLCAweDA5MkIsIDB4QkVBMSwgMHhCRUZFLCAweDA5ODksIDB4QkZBMSwgMHhCRkZFLCAweDA5RTcsDQotICAgIDB4QzBBMSwgMHhDMEZFLCAweDBBNDUsIDB4QzFBMSwgMHhDMUZFLCAweDBBQTMsIDB4QzJBMSwgMHhDMkZFLCAweDBCMDEsDQotICAgIDB4QzNBMSwgMHhDM0ZFLCAweDBCNUYsIDB4QzRBMSwgMHhDNEZFLCAweDBCQkQsIDB4QzVBMSwgMHhDNUZFLCAweDBDMUIsDQotICAgIDB4QzZBMSwgMHhDNkZFLCAweDBDNzksIDB4QzdBMSwgMHhDN0ZFLCAweDBDRDcsIDB4QzhBMSwgMHhDOEZFLCAweDBEMzUsDQotICAgIDB4QzlBMSwgMHhDOUZFLCAweDBEOTMsIDB4Q0FBMSwgMHhDQUZFLCAweDBERjEsIDB4Q0JBMSwgMHhDQkZFLCAweDBFNEYsDQotICAgIDB4Q0NBMSwgMHhDQ0ZFLCAweDBFQUQsIDB4Q0RBMSwgMHhDREZFLCAweDBGMEIsIDB4Q0VBMSwgMHhDRUZFLCAweDBGNjksDQotICAgIDB4Q0ZBMSwgMHhDRkQzLCAweDBGQzcsIDB4RDBBMSwgMHhEMEZFLCAweDBGRkEsIDB4RDFBMSwgMHhEMUZFLCAweDEwNTgsDQotICAgIDB4RDJBMSwgMHhEMkZFLCAweDEwQjYsIDB4RDNBMSwgMHhEM0ZFLCAweDExMTQsIDB4RDRBMSwgMHhENEZFLCAweDExNzIsDQotICAgIDB4RDVBMSwgMHhENUZFLCAweDExRDAsIDB4RDZBMSwgMHhENkZFLCAweDEyMkUsIDB4RDdBMSwgMHhEN0ZFLCAweDEyOEMsDQotICAgIDB4RDhBMSwgMHhEOEZFLCAweDEyRUEsIDB4RDlBMSwgMHhEOUZFLCAweDEzNDgsIDB4REFBMSwgMHhEQUZFLCAweDEzQTYsDQotICAgIDB4REJBMSwgMHhEQkZFLCAweDE0MDQsIDB4RENBMSwgMHhEQ0ZFLCAweDE0NjIsIDB4RERBMSwgMHhEREZFLCAweDE0QzAsDQotICAgIDB4REVBMSwgMHhERUZFLCAweDE1MUUsIDB4REZBMSwgMHhERkZFLCAweDE1N0MsIDB4RTBBMSwgMHhFMEZFLCAweDE1REEsDQotICAgIDB4RTFBMSwgMHhFMUZFLCAweDE2MzgsIDB4RTJBMSwgMHhFMkZFLCAweDE2OTYsIDB4RTNBMSwgMHhFM0ZFLCAweDE2RjQsDQotICAgIDB4RTRBMSwgMHhFNEZFLCAweDE3NTIsIDB4RTVBMSwgMHhFNUZFLCAweDE3QjAsIDB4RTZBMSwgMHhFNkZFLCAweDE4MEUsDQotICAgIDB4RTdBMSwgMHhFN0ZFLCAweDE4NkMsIDB4RThBMSwgMHhFOEZFLCAweDE4Q0EsIDB4RTlBMSwgMHhFOUZFLCAweDE5MjgsDQotICAgIDB4RUFBMSwgMHhFQUZFLCAweDE5ODYsIDB4RUJBMSwgMHhFQkZFLCAweDE5RTQsIDB4RUNBMSwgMHhFQ0ZFLCAweDFBNDIsDQotICAgIDB4RURBMSwgMHhFREZFLCAweDFBQTAsIDB4RUVBMSwgMHhFRUZFLCAweDFBRkUsIDB4RUZBMSwgMHhFRkZFLCAweDFCNUMsDQotICAgIDB4RjBBMSwgMHhGMEZFLCAweDFCQkEsIDB4RjFBMSwgMHhGMUZFLCAweDFDMTgsIDB4RjJBMSwgMHhGMkZFLCAweDFDNzYsDQotICAgIDB4RjNBMSwgMHhGM0ZFLCAweDFDRDQsIDB4RjRBMSwgMHhGNEE0LCAweDFEMzIsIDB4RjRBNSwgMHhGNEE2LCAweDIwNUMsDQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfRVVDX0hfMVsxMjAgKiAzXSA9IHsKKyAgICAweDAwMjAsIDB4MDA3RSwgMHgwMEU3LCAweDhFQTAsIDB4OEVERiwgMHgwMTQ2LCAweEExQTEsIDB4QTFGRSwgMHgwMjc5LAorICAgIDB4QTJBMSwgMHhBMkFFLCAweDAyRDcsIDB4QTJCQSwgMHhBMkMxLCAweDAyRTUsIDB4QTJDQSwgMHhBMkQwLCAweDAyRUQsCisgICAgMHhBMkRDLCAweEEyRUEsIDB4MDJGNCwgMHhBMkYyLCAweEEyRjksIDB4MDMwMywgMHhBMkZFLCAweEEyRkUsIDB4MDMwQiwKKyAgICAweEEzQjAsIDB4QTNCOSwgMHgwMzBDLCAweEEzQzEsIDB4QTNEQSwgMHgwMzE2LCAweEEzRTEsIDB4QTNGQSwgMHgwMzMwLAorICAgIDB4QTRBMSwgMHhBNEYzLCAweDAzNEEsIDB4QTVBMSwgMHhBNUY2LCAweDAzOUQsIDB4QTZBMSwgMHhBNkI4LCAweDAzRjMsCisgICAgMHhBNkMxLCAweEE2RDgsIDB4MDQwQiwgMHhBN0ExLCAweEE3QzEsIDB4MDQyMywgMHhBN0QxLCAweEE3RjEsIDB4MDQ0NCwKKyAgICAweEE4QTEsIDB4QThBMSwgMHgxRDM3LCAweEE4QTIsIDB4QThBMiwgMHgxRDM5LCAweEE4QTMsIDB4QThBMywgMHgxRDQzLAorICAgIDB4QThBNCwgMHhBOEE0LCAweDFENDcsIDB4QThBNSwgMHhBOEE1LCAweDFENEYsIDB4QThBNiwgMHhBOEE2LCAweDFENEIsCisgICAgMHhBOEE3LCAweEE4QTcsIDB4MUQ1MywgMHhBOEE4LCAweEE4QTgsIDB4MUQ2MywgMHhBOEE5LCAweEE4QTksIDB4MUQ1QiwKKyAgICAweEE4QUEsIDB4QThBQSwgMHgxRDZCLCAweEE4QUIsIDB4QThBQiwgMHgxRDczLCAweEE4QUMsIDB4QThBQywgMHgxRDM4LAorICAgIDB4QThBRCwgMHhBOEFELCAweDFEM0EsIDB4QThBRSwgMHhBOEFFLCAweDFENDYsIDB4QThBRiwgMHhBOEFGLCAweDFENEEsCisgICAgMHhBOEIwLCAweEE4QjAsIDB4MUQ1MiwgMHhBOEIxLCAweEE4QjEsIDB4MUQ0RSwgMHhBOEIyLCAweEE4QjIsIDB4MUQ1QSwKKyAgICAweEE4QjMsIDB4QThCMywgMHgxRDZBLCAweEE4QjQsIDB4QThCNCwgMHgxRDYyLCAweEE4QjUsIDB4QThCNSwgMHgxRDcyLAorICAgIDB4QThCNiwgMHhBOEI2LCAweDFEODIsIDB4QThCNywgMHhBOEI3LCAweDFENTcsIDB4QThCOCwgMHhBOEI4LCAweDFENjYsCisgICAgMHhBOEI5LCAweEE4QjksIDB4MUQ1RiwgMHhBOEJBLCAweEE4QkEsIDB4MUQ2RSwgMHhBOEJCLCAweEE4QkIsIDB4MUQ3NiwKKyAgICAweEE4QkMsIDB4QThCQywgMHgxRDU0LCAweEE4QkQsIDB4QThCRCwgMHgxRDY3LCAweEE4QkUsIDB4QThCRSwgMHgxRDVDLAorICAgIDB4QThCRiwgMHhBOEJGLCAweDFENkYsIDB4QThDMCwgMHhBOEMwLCAweDFENzksIDB4QjBBMSwgMHhCMEZFLCAweDA0NjUsCisgICAgMHhCMUExLCAweEIxRkUsIDB4MDRDMywgMHhCMkExLCAweEIyRkUsIDB4MDUyMSwgMHhCM0ExLCAweEIzRkUsIDB4MDU3RiwKKyAgICAweEI0QTEsIDB4QjRGRSwgMHgwNURELCAweEI1QTEsIDB4QjVGRSwgMHgwNjNCLCAweEI2QTEsIDB4QjZGRSwgMHgwNjk5LAorICAgIDB4QjdBMSwgMHhCN0ZFLCAweDA2RjcsIDB4QjhBMSwgMHhCOEZFLCAweDA3NTUsIDB4QjlBMSwgMHhCOUZFLCAweDA3QjMsCisgICAgMHhCQUExLCAweEJBRkUsIDB4MDgxMSwgMHhCQkExLCAweEJCRkUsIDB4MDg2RiwgMHhCQ0ExLCAweEJDRkUsIDB4MDhDRCwKKyAgICAweEJEQTEsIDB4QkRGRSwgMHgwOTJCLCAweEJFQTEsIDB4QkVGRSwgMHgwOTg5LCAweEJGQTEsIDB4QkZGRSwgMHgwOUU3LAorICAgIDB4QzBBMSwgMHhDMEZFLCAweDBBNDUsIDB4QzFBMSwgMHhDMUZFLCAweDBBQTMsIDB4QzJBMSwgMHhDMkZFLCAweDBCMDEsCisgICAgMHhDM0ExLCAweEMzRkUsIDB4MEI1RiwgMHhDNEExLCAweEM0RkUsIDB4MEJCRCwgMHhDNUExLCAweEM1RkUsIDB4MEMxQiwKKyAgICAweEM2QTEsIDB4QzZGRSwgMHgwQzc5LCAweEM3QTEsIDB4QzdGRSwgMHgwQ0Q3LCAweEM4QTEsIDB4QzhGRSwgMHgwRDM1LAorICAgIDB4QzlBMSwgMHhDOUZFLCAweDBEOTMsIDB4Q0FBMSwgMHhDQUZFLCAweDBERjEsIDB4Q0JBMSwgMHhDQkZFLCAweDBFNEYsCisgICAgMHhDQ0ExLCAweENDRkUsIDB4MEVBRCwgMHhDREExLCAweENERkUsIDB4MEYwQiwgMHhDRUExLCAweENFRkUsIDB4MEY2OSwKKyAgICAweENGQTEsIDB4Q0ZEMywgMHgwRkM3LCAweEQwQTEsIDB4RDBGRSwgMHgwRkZBLCAweEQxQTEsIDB4RDFGRSwgMHgxMDU4LAorICAgIDB4RDJBMSwgMHhEMkZFLCAweDEwQjYsIDB4RDNBMSwgMHhEM0ZFLCAweDExMTQsIDB4RDRBMSwgMHhENEZFLCAweDExNzIsCisgICAgMHhENUExLCAweEQ1RkUsIDB4MTFEMCwgMHhENkExLCAweEQ2RkUsIDB4MTIyRSwgMHhEN0ExLCAweEQ3RkUsIDB4MTI4QywKKyAgICAweEQ4QTEsIDB4RDhGRSwgMHgxMkVBLCAweEQ5QTEsIDB4RDlGRSwgMHgxMzQ4LCAweERBQTEsIDB4REFGRSwgMHgxM0E2LAorICAgIDB4REJBMSwgMHhEQkZFLCAweDE0MDQsIDB4RENBMSwgMHhEQ0ZFLCAweDE0NjIsIDB4RERBMSwgMHhEREZFLCAweDE0QzAsCisgICAgMHhERUExLCAweERFRkUsIDB4MTUxRSwgMHhERkExLCAweERGRkUsIDB4MTU3QywgMHhFMEExLCAweEUwRkUsIDB4MTVEQSwKKyAgICAweEUxQTEsIDB4RTFGRSwgMHgxNjM4LCAweEUyQTEsIDB4RTJGRSwgMHgxNjk2LCAweEUzQTEsIDB4RTNGRSwgMHgxNkY0LAorICAgIDB4RTRBMSwgMHhFNEZFLCAweDE3NTIsIDB4RTVBMSwgMHhFNUZFLCAweDE3QjAsIDB4RTZBMSwgMHhFNkZFLCAweDE4MEUsCisgICAgMHhFN0ExLCAweEU3RkUsIDB4MTg2QywgMHhFOEExLCAweEU4RkUsIDB4MThDQSwgMHhFOUExLCAweEU5RkUsIDB4MTkyOCwKKyAgICAweEVBQTEsIDB4RUFGRSwgMHgxOTg2LCAweEVCQTEsIDB4RUJGRSwgMHgxOUU0LCAweEVDQTEsIDB4RUNGRSwgMHgxQTQyLAorICAgIDB4RURBMSwgMHhFREZFLCAweDFBQTAsIDB4RUVBMSwgMHhFRUZFLCAweDFBRkUsIDB4RUZBMSwgMHhFRkZFLCAweDFCNUMsCisgICAgMHhGMEExLCAweEYwRkUsIDB4MUJCQSwgMHhGMUExLCAweEYxRkUsIDB4MUMxOCwgMHhGMkExLCAweEYyRkUsIDB4MUM3NiwKKyAgICAweEYzQTEsIDB4RjNGRSwgMHgxQ0Q0LCAweEY0QTEsIDB4RjRBNCwgMHgxRDMyLCAweEY0QTUsIDB4RjRBNiwgMHgyMDVDLAorfTsKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvSF8xLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvSF8xLmNwcAppbmRleCBlMTRlNjk5Li40MzA3NmEwIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvSmFwYW4xL0hfMS5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0phcGFuMS9IXzEuY3BwCkBAIC0xLDQ4ICsxLDQ4IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfSF8xWzExOCAqIDNdID0gew0KLSAgICAweDIxMjEsIDB4MjE3RSwgMHgwMjc5LCAweDIyMjEsIDB4MjIyRSwgMHgwMkQ3LCAweDIyM0EsIDB4MjI0MSwgMHgwMkU1LA0KLSAgICAweDIyNEEsIDB4MjI1MCwgMHgwMkVELCAweDIyNUMsIDB4MjI2QSwgMHgwMkY0LCAweDIyNzIsIDB4MjI3OSwgMHgwMzAzLA0KLSAgICAweDIyN0UsIDB4MjI3RSwgMHgwMzBCLCAweDIzMzAsIDB4MjMzOSwgMHgwMzBDLCAweDIzNDEsIDB4MjM1QSwgMHgwMzE2LA0KLSAgICAweDIzNjEsIDB4MjM3QSwgMHgwMzMwLCAweDI0MjEsIDB4MjQ3MywgMHgwMzRBLCAweDI1MjEsIDB4MjU3NiwgMHgwMzlELA0KLSAgICAweDI2MjEsIDB4MjYzOCwgMHgwM0YzLCAweDI2NDEsIDB4MjY1OCwgMHgwNDBCLCAweDI3MjEsIDB4Mjc0MSwgMHgwNDIzLA0KLSAgICAweDI3NTEsIDB4Mjc3MSwgMHgwNDQ0LCAweDI4MjEsIDB4MjgyMSwgMHgxRDM3LCAweDI4MjIsIDB4MjgyMiwgMHgxRDM5LA0KLSAgICAweDI4MjMsIDB4MjgyMywgMHgxRDQzLCAweDI4MjQsIDB4MjgyNCwgMHgxRDQ3LCAweDI4MjUsIDB4MjgyNSwgMHgxRDRGLA0KLSAgICAweDI4MjYsIDB4MjgyNiwgMHgxRDRCLCAweDI4MjcsIDB4MjgyNywgMHgxRDUzLCAweDI4MjgsIDB4MjgyOCwgMHgxRDYzLA0KLSAgICAweDI4MjksIDB4MjgyOSwgMHgxRDVCLCAweDI4MkEsIDB4MjgyQSwgMHgxRDZCLCAweDI4MkIsIDB4MjgyQiwgMHgxRDczLA0KLSAgICAweDI4MkMsIDB4MjgyQywgMHgxRDM4LCAweDI4MkQsIDB4MjgyRCwgMHgxRDNBLCAweDI4MkUsIDB4MjgyRSwgMHgxRDQ2LA0KLSAgICAweDI4MkYsIDB4MjgyRiwgMHgxRDRBLCAweDI4MzAsIDB4MjgzMCwgMHgxRDUyLCAweDI4MzEsIDB4MjgzMSwgMHgxRDRFLA0KLSAgICAweDI4MzIsIDB4MjgzMiwgMHgxRDVBLCAweDI4MzMsIDB4MjgzMywgMHgxRDZBLCAweDI4MzQsIDB4MjgzNCwgMHgxRDYyLA0KLSAgICAweDI4MzUsIDB4MjgzNSwgMHgxRDcyLCAweDI4MzYsIDB4MjgzNiwgMHgxRDgyLCAweDI4MzcsIDB4MjgzNywgMHgxRDU3LA0KLSAgICAweDI4MzgsIDB4MjgzOCwgMHgxRDY2LCAweDI4MzksIDB4MjgzOSwgMHgxRDVGLCAweDI4M0EsIDB4MjgzQSwgMHgxRDZFLA0KLSAgICAweDI4M0IsIDB4MjgzQiwgMHgxRDc2LCAweDI4M0MsIDB4MjgzQywgMHgxRDU0LCAweDI4M0QsIDB4MjgzRCwgMHgxRDY3LA0KLSAgICAweDI4M0UsIDB4MjgzRSwgMHgxRDVDLCAweDI4M0YsIDB4MjgzRiwgMHgxRDZGLCAweDI4NDAsIDB4Mjg0MCwgMHgxRDc5LA0KLSAgICAweDMwMjEsIDB4MzA3RSwgMHgwNDY1LCAweDMxMjEsIDB4MzE3RSwgMHgwNEMzLCAweDMyMjEsIDB4MzI3RSwgMHgwNTIxLA0KLSAgICAweDMzMjEsIDB4MzM3RSwgMHgwNTdGLCAweDM0MjEsIDB4MzQ3RSwgMHgwNURELCAweDM1MjEsIDB4MzU3RSwgMHgwNjNCLA0KLSAgICAweDM2MjEsIDB4MzY3RSwgMHgwNjk5LCAweDM3MjEsIDB4Mzc3RSwgMHgwNkY3LCAweDM4MjEsIDB4Mzg3RSwgMHgwNzU1LA0KLSAgICAweDM5MjEsIDB4Mzk3RSwgMHgwN0IzLCAweDNBMjEsIDB4M0E3RSwgMHgwODExLCAweDNCMjEsIDB4M0I3RSwgMHgwODZGLA0KLSAgICAweDNDMjEsIDB4M0M3RSwgMHgwOENELCAweDNEMjEsIDB4M0Q3RSwgMHgwOTJCLCAweDNFMjEsIDB4M0U3RSwgMHgwOTg5LA0KLSAgICAweDNGMjEsIDB4M0Y3RSwgMHgwOUU3LCAweDQwMjEsIDB4NDA3RSwgMHgwQTQ1LCAweDQxMjEsIDB4NDE3RSwgMHgwQUEzLA0KLSAgICAweDQyMjEsIDB4NDI3RSwgMHgwQjAxLCAweDQzMjEsIDB4NDM3RSwgMHgwQjVGLCAweDQ0MjEsIDB4NDQ3RSwgMHgwQkJELA0KLSAgICAweDQ1MjEsIDB4NDU3RSwgMHgwQzFCLCAweDQ2MjEsIDB4NDY3RSwgMHgwQzc5LCAweDQ3MjEsIDB4NDc3RSwgMHgwQ0Q3LA0KLSAgICAweDQ4MjEsIDB4NDg3RSwgMHgwRDM1LCAweDQ5MjEsIDB4NDk3RSwgMHgwRDkzLCAweDRBMjEsIDB4NEE3RSwgMHgwREYxLA0KLSAgICAweDRCMjEsIDB4NEI3RSwgMHgwRTRGLCAweDRDMjEsIDB4NEM3RSwgMHgwRUFELCAweDREMjEsIDB4NEQ3RSwgMHgwRjBCLA0KLSAgICAweDRFMjEsIDB4NEU3RSwgMHgwRjY5LCAweDRGMjEsIDB4NEY1MywgMHgwRkM3LCAweDUwMjEsIDB4NTA3RSwgMHgwRkZBLA0KLSAgICAweDUxMjEsIDB4NTE3RSwgMHgxMDU4LCAweDUyMjEsIDB4NTI3RSwgMHgxMEI2LCAweDUzMjEsIDB4NTM3RSwgMHgxMTE0LA0KLSAgICAweDU0MjEsIDB4NTQ3RSwgMHgxMTcyLCAweDU1MjEsIDB4NTU3RSwgMHgxMUQwLCAweDU2MjEsIDB4NTY3RSwgMHgxMjJFLA0KLSAgICAweDU3MjEsIDB4NTc3RSwgMHgxMjhDLCAweDU4MjEsIDB4NTg3RSwgMHgxMkVBLCAweDU5MjEsIDB4NTk3RSwgMHgxMzQ4LA0KLSAgICAweDVBMjEsIDB4NUE3RSwgMHgxM0E2LCAweDVCMjEsIDB4NUI3RSwgMHgxNDA0LCAweDVDMjEsIDB4NUM3RSwgMHgxNDYyLA0KLSAgICAweDVEMjEsIDB4NUQ3RSwgMHgxNEMwLCAweDVFMjEsIDB4NUU3RSwgMHgxNTFFLCAweDVGMjEsIDB4NUY3RSwgMHgxNTdDLA0KLSAgICAweDYwMjEsIDB4NjA3RSwgMHgxNURBLCAweDYxMjEsIDB4NjE3RSwgMHgxNjM4LCAweDYyMjEsIDB4NjI3RSwgMHgxNjk2LA0KLSAgICAweDYzMjEsIDB4NjM3RSwgMHgxNkY0LCAweDY0MjEsIDB4NjQ3RSwgMHgxNzUyLCAweDY1MjEsIDB4NjU3RSwgMHgxN0IwLA0KLSAgICAweDY2MjEsIDB4NjY3RSwgMHgxODBFLCAweDY3MjEsIDB4Njc3RSwgMHgxODZDLCAweDY4MjEsIDB4Njg3RSwgMHgxOENBLA0KLSAgICAweDY5MjEsIDB4Njk3RSwgMHgxOTI4LCAweDZBMjEsIDB4NkE3RSwgMHgxOTg2LCAweDZCMjEsIDB4NkI3RSwgMHgxOUU0LA0KLSAgICAweDZDMjEsIDB4NkM3RSwgMHgxQTQyLCAweDZEMjEsIDB4NkQ3RSwgMHgxQUEwLCAweDZFMjEsIDB4NkU3RSwgMHgxQUZFLA0KLSAgICAweDZGMjEsIDB4NkY3RSwgMHgxQjVDLCAweDcwMjEsIDB4NzA3RSwgMHgxQkJBLCAweDcxMjEsIDB4NzE3RSwgMHgxQzE4LA0KLSAgICAweDcyMjEsIDB4NzI3RSwgMHgxQzc2LCAweDczMjEsIDB4NzM3RSwgMHgxQ0Q0LCAweDc0MjEsIDB4NzQyNCwgMHgxRDMyLA0KLSAgICAweDc0MjUsIDB4NzQyNiwgMHgyMDVDLA0KLX07DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0hfMVsxMTggKiAzXSA9IHsKKyAgICAweDIxMjEsIDB4MjE3RSwgMHgwMjc5LCAweDIyMjEsIDB4MjIyRSwgMHgwMkQ3LCAweDIyM0EsIDB4MjI0MSwgMHgwMkU1LAorICAgIDB4MjI0QSwgMHgyMjUwLCAweDAyRUQsIDB4MjI1QywgMHgyMjZBLCAweDAyRjQsIDB4MjI3MiwgMHgyMjc5LCAweDAzMDMsCisgICAgMHgyMjdFLCAweDIyN0UsIDB4MDMwQiwgMHgyMzMwLCAweDIzMzksIDB4MDMwQywgMHgyMzQxLCAweDIzNUEsIDB4MDMxNiwKKyAgICAweDIzNjEsIDB4MjM3QSwgMHgwMzMwLCAweDI0MjEsIDB4MjQ3MywgMHgwMzRBLCAweDI1MjEsIDB4MjU3NiwgMHgwMzlELAorICAgIDB4MjYyMSwgMHgyNjM4LCAweDAzRjMsIDB4MjY0MSwgMHgyNjU4LCAweDA0MEIsIDB4MjcyMSwgMHgyNzQxLCAweDA0MjMsCisgICAgMHgyNzUxLCAweDI3NzEsIDB4MDQ0NCwgMHgyODIxLCAweDI4MjEsIDB4MUQzNywgMHgyODIyLCAweDI4MjIsIDB4MUQzOSwKKyAgICAweDI4MjMsIDB4MjgyMywgMHgxRDQzLCAweDI4MjQsIDB4MjgyNCwgMHgxRDQ3LCAweDI4MjUsIDB4MjgyNSwgMHgxRDRGLAorICAgIDB4MjgyNiwgMHgyODI2LCAweDFENEIsIDB4MjgyNywgMHgyODI3LCAweDFENTMsIDB4MjgyOCwgMHgyODI4LCAweDFENjMsCisgICAgMHgyODI5LCAweDI4MjksIDB4MUQ1QiwgMHgyODJBLCAweDI4MkEsIDB4MUQ2QiwgMHgyODJCLCAweDI4MkIsIDB4MUQ3MywKKyAgICAweDI4MkMsIDB4MjgyQywgMHgxRDM4LCAweDI4MkQsIDB4MjgyRCwgMHgxRDNBLCAweDI4MkUsIDB4MjgyRSwgMHgxRDQ2LAorICAgIDB4MjgyRiwgMHgyODJGLCAweDFENEEsIDB4MjgzMCwgMHgyODMwLCAweDFENTIsIDB4MjgzMSwgMHgyODMxLCAweDFENEUsCisgICAgMHgyODMyLCAweDI4MzIsIDB4MUQ1QSwgMHgyODMzLCAweDI4MzMsIDB4MUQ2QSwgMHgyODM0LCAweDI4MzQsIDB4MUQ2MiwKKyAgICAweDI4MzUsIDB4MjgzNSwgMHgxRDcyLCAweDI4MzYsIDB4MjgzNiwgMHgxRDgyLCAweDI4MzcsIDB4MjgzNywgMHgxRDU3LAorICAgIDB4MjgzOCwgMHgyODM4LCAweDFENjYsIDB4MjgzOSwgMHgyODM5LCAweDFENUYsIDB4MjgzQSwgMHgyODNBLCAweDFENkUsCisgICAgMHgyODNCLCAweDI4M0IsIDB4MUQ3NiwgMHgyODNDLCAweDI4M0MsIDB4MUQ1NCwgMHgyODNELCAweDI4M0QsIDB4MUQ2NywKKyAgICAweDI4M0UsIDB4MjgzRSwgMHgxRDVDLCAweDI4M0YsIDB4MjgzRiwgMHgxRDZGLCAweDI4NDAsIDB4Mjg0MCwgMHgxRDc5LAorICAgIDB4MzAyMSwgMHgzMDdFLCAweDA0NjUsIDB4MzEyMSwgMHgzMTdFLCAweDA0QzMsIDB4MzIyMSwgMHgzMjdFLCAweDA1MjEsCisgICAgMHgzMzIxLCAweDMzN0UsIDB4MDU3RiwgMHgzNDIxLCAweDM0N0UsIDB4MDVERCwgMHgzNTIxLCAweDM1N0UsIDB4MDYzQiwKKyAgICAweDM2MjEsIDB4MzY3RSwgMHgwNjk5LCAweDM3MjEsIDB4Mzc3RSwgMHgwNkY3LCAweDM4MjEsIDB4Mzg3RSwgMHgwNzU1LAorICAgIDB4MzkyMSwgMHgzOTdFLCAweDA3QjMsIDB4M0EyMSwgMHgzQTdFLCAweDA4MTEsIDB4M0IyMSwgMHgzQjdFLCAweDA4NkYsCisgICAgMHgzQzIxLCAweDNDN0UsIDB4MDhDRCwgMHgzRDIxLCAweDNEN0UsIDB4MDkyQiwgMHgzRTIxLCAweDNFN0UsIDB4MDk4OSwKKyAgICAweDNGMjEsIDB4M0Y3RSwgMHgwOUU3LCAweDQwMjEsIDB4NDA3RSwgMHgwQTQ1LCAweDQxMjEsIDB4NDE3RSwgMHgwQUEzLAorICAgIDB4NDIyMSwgMHg0MjdFLCAweDBCMDEsIDB4NDMyMSwgMHg0MzdFLCAweDBCNUYsIDB4NDQyMSwgMHg0NDdFLCAweDBCQkQsCisgICAgMHg0NTIxLCAweDQ1N0UsIDB4MEMxQiwgMHg0NjIxLCAweDQ2N0UsIDB4MEM3OSwgMHg0NzIxLCAweDQ3N0UsIDB4MENENywKKyAgICAweDQ4MjEsIDB4NDg3RSwgMHgwRDM1LCAweDQ5MjEsIDB4NDk3RSwgMHgwRDkzLCAweDRBMjEsIDB4NEE3RSwgMHgwREYxLAorICAgIDB4NEIyMSwgMHg0QjdFLCAweDBFNEYsIDB4NEMyMSwgMHg0QzdFLCAweDBFQUQsIDB4NEQyMSwgMHg0RDdFLCAweDBGMEIsCisgICAgMHg0RTIxLCAweDRFN0UsIDB4MEY2OSwgMHg0RjIxLCAweDRGNTMsIDB4MEZDNywgMHg1MDIxLCAweDUwN0UsIDB4MEZGQSwKKyAgICAweDUxMjEsIDB4NTE3RSwgMHgxMDU4LCAweDUyMjEsIDB4NTI3RSwgMHgxMEI2LCAweDUzMjEsIDB4NTM3RSwgMHgxMTE0LAorICAgIDB4NTQyMSwgMHg1NDdFLCAweDExNzIsIDB4NTUyMSwgMHg1NTdFLCAweDExRDAsIDB4NTYyMSwgMHg1NjdFLCAweDEyMkUsCisgICAgMHg1NzIxLCAweDU3N0UsIDB4MTI4QywgMHg1ODIxLCAweDU4N0UsIDB4MTJFQSwgMHg1OTIxLCAweDU5N0UsIDB4MTM0OCwKKyAgICAweDVBMjEsIDB4NUE3RSwgMHgxM0E2LCAweDVCMjEsIDB4NUI3RSwgMHgxNDA0LCAweDVDMjEsIDB4NUM3RSwgMHgxNDYyLAorICAgIDB4NUQyMSwgMHg1RDdFLCAweDE0QzAsIDB4NUUyMSwgMHg1RTdFLCAweDE1MUUsIDB4NUYyMSwgMHg1RjdFLCAweDE1N0MsCisgICAgMHg2MDIxLCAweDYwN0UsIDB4MTVEQSwgMHg2MTIxLCAweDYxN0UsIDB4MTYzOCwgMHg2MjIxLCAweDYyN0UsIDB4MTY5NiwKKyAgICAweDYzMjEsIDB4NjM3RSwgMHgxNkY0LCAweDY0MjEsIDB4NjQ3RSwgMHgxNzUyLCAweDY1MjEsIDB4NjU3RSwgMHgxN0IwLAorICAgIDB4NjYyMSwgMHg2NjdFLCAweDE4MEUsIDB4NjcyMSwgMHg2NzdFLCAweDE4NkMsIDB4NjgyMSwgMHg2ODdFLCAweDE4Q0EsCisgICAgMHg2OTIxLCAweDY5N0UsIDB4MTkyOCwgMHg2QTIxLCAweDZBN0UsIDB4MTk4NiwgMHg2QjIxLCAweDZCN0UsIDB4MTlFNCwKKyAgICAweDZDMjEsIDB4NkM3RSwgMHgxQTQyLCAweDZEMjEsIDB4NkQ3RSwgMHgxQUEwLCAweDZFMjEsIDB4NkU3RSwgMHgxQUZFLAorICAgIDB4NkYyMSwgMHg2RjdFLCAweDFCNUMsIDB4NzAyMSwgMHg3MDdFLCAweDFCQkEsIDB4NzEyMSwgMHg3MTdFLCAweDFDMTgsCisgICAgMHg3MjIxLCAweDcyN0UsIDB4MUM3NiwgMHg3MzIxLCAweDczN0UsIDB4MUNENCwgMHg3NDIxLCAweDc0MjQsIDB4MUQzMiwKKyAgICAweDc0MjUsIDB4NzQyNiwgMHgyMDVDLAorfTsKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvVW5pSklTLVVDUzItSFctVl80LmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvVW5pSklTLVVDUzItSFctVl80LmNwcAppbmRleCBhNTk0MjBhLi5lOTk2YWViIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvSmFwYW4xL1VuaUpJUy1VQ1MyLUhXLVZfNC5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0phcGFuMS9VbmlKSVMtVUNTMi1IVy1WXzQuY3BwCkBAIC0xLDc1ICsxLDc1IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfVW5pSklTX1VDUzJfSFdfVl80WzE5OSAqIDNdID0gew0KLSAgICAweDAwMjAsIDB4MDA1QiwgMHgwMEU3LCAweDAwNUMsIDB4MDA1QywgMHgyMjBGLCAweDAwNUQsIDB4MDA3RSwgMHgwMTI0LA0KLSAgICAweDAwQTUsIDB4MDBBNSwgMHgwMTIzLCAweDAwQjAsIDB4MDBCMCwgMHgyMDRELCAweDIwMTAsIDB4MjAxMCwgMHgxRUQ1LA0KLSAgICAweDIwMTUsIDB4MjAxNSwgMHgxRUQ0LCAweDIwMTYsIDB4MjAxNiwgMHgxRUQ3LCAweDIwMTgsIDB4MjAxOSwgMHgyMDU5LA0KLSAgICAweDIwMUMsIDB4MjAxRCwgMHgyMDU3LCAweDIwMjUsIDB4MjAyNSwgMHgxRURBLCAweDIwMjYsIDB4MjAyNiwgMHgxRUQ5LA0KLSAgICAweDIwMzIsIDB4MjAzMiwgMHgyMDUxLCAweDIwMzMsIDB4MjAzMywgMHgyMDVCLCAweDIxOTAsIDB4MjE5MCwgMHgwMkUyLA0KLSAgICAweDIxOTEsIDB4MjE5MSwgMHgwMkUwLCAweDIxOTIsIDB4MjE5MiwgMHgwMkUzLCAweDIxOTMsIDB4MjE5MywgMHgwMkUxLA0KLSAgICAweDIxOTUsIDB4MjE5NSwgMHgyRkI2LCAweDIxQzQsIDB4MjFDNCwgMHgyMDc3LCAweDIxQzUsIDB4MjFDNSwgMHgyMDc2LA0KLSAgICAweDIxQzYsIDB4MjFDNiwgMHgyMDc4LCAweDIxRTYsIDB4MjFFNiwgMHgxRjRDLCAweDIxRTcsIDB4MjFFNywgMHgxRjRFLA0KLSAgICAweDIxRTgsIDB4MjFFOCwgMHgxRjRCLCAweDIxRTksIDB4MjFFOSwgMHgxRjRELCAweDIyMjUsIDB4MjIyNSwgMHgxRUQ3LA0KLSAgICAweDIyM0MsIDB4MjIzQywgMHgxRUQ2LCAweDIyRUYsIDB4MjJFRiwgMHgxRUQ5LCAweDI1MDAsIDB4MjUwMSwgMHgxRDM5LA0KLSAgICAweDI1MDIsIDB4MjUwMywgMHgxRDM3LCAweDI1MDQsIDB4MjUwNSwgMHgxRDNELCAweDI1MDYsIDB4MjUwNywgMHgxRDNCLA0KLSAgICAweDI1MDgsIDB4MjUwOSwgMHgxRDQxLCAweDI1MEEsIDB4MjUwQiwgMHgxRDNGLCAweDI1MEMsIDB4MjUwQywgMHgxRDQ3LA0KLSAgICAweDI1MEQsIDB4MjUwRCwgMHgxRDQ5LCAweDI1MEUsIDB4MjUwRSwgMHgxRDQ4LCAweDI1MEYsIDB4MjUwRiwgMHgxRDRBLA0KLSAgICAweDI1MTAsIDB4MjUxMCwgMHgxRDRGLCAweDI1MTEsIDB4MjUxMSwgMHgxRDUxLCAweDI1MTIsIDB4MjUxMiwgMHgxRDUwLA0KLSAgICAweDI1MTMsIDB4MjUxMywgMHgxRDUyLCAweDI1MTQsIDB4MjUxNCwgMHgxRDQzLCAweDI1MTUsIDB4MjUxNSwgMHgxRDQ1LA0KLSAgICAweDI1MTYsIDB4MjUxNiwgMHgxRDQ0LCAweDI1MTcsIDB4MjUxNywgMHgxRDQ2LCAweDI1MTgsIDB4MjUxOCwgMHgxRDRCLA0KLSAgICAweDI1MTksIDB4MjUxOSwgMHgxRDRELCAweDI1MUEsIDB4MjUxQSwgMHgxRDRDLCAweDI1MUIsIDB4MjUxQiwgMHgxRDRFLA0KLSAgICAweDI1MUMsIDB4MjUxQywgMHgxRDYzLCAweDI1MUQsIDB4MjUxRCwgMHgxRDY3LCAweDI1MUUsIDB4MjUxRSwgMHgxRDY1LA0KLSAgICAweDI1MUYsIDB4MjUxRiwgMHgxRDY0LCAweDI1MjAsIDB4MjUyMCwgMHgxRDY2LCAweDI1MjEsIDB4MjUyMSwgMHgxRDY5LA0KLSAgICAweDI1MjIsIDB4MjUyMiwgMHgxRDY4LCAweDI1MjMsIDB4MjUyNCwgMHgxRDZBLCAweDI1MjUsIDB4MjUyNSwgMHgxRDZGLA0KLSAgICAweDI1MjYsIDB4MjUyNiwgMHgxRDZELCAweDI1MjcsIDB4MjUyNywgMHgxRDZDLCAweDI1MjgsIDB4MjUyOCwgMHgxRDZFLA0KLSAgICAweDI1MjksIDB4MjUyOSwgMHgxRDcxLCAweDI1MkEsIDB4MjUyQSwgMHgxRDcwLCAweDI1MkIsIDB4MjUyQiwgMHgxRDcyLA0KLSAgICAweDI1MkMsIDB4MjUyQywgMHgxRDVCLCAweDI1MkQsIDB4MjUyRiwgMHgxRDVELCAweDI1MzAsIDB4MjUzMCwgMHgxRDVDLA0KLSAgICAweDI1MzEsIDB4MjUzMywgMHgxRDYwLCAweDI1MzQsIDB4MjUzNCwgMHgxRDUzLCAweDI1MzUsIDB4MjUzNywgMHgxRDU1LA0KLSAgICAweDI1MzgsIDB4MjUzOCwgMHgxRDU0LCAweDI1MzksIDB4MjUzQiwgMHgxRDU4LCAweDI1M0QsIDB4MjUzRiwgMHgxRDc3LA0KLSAgICAweDI1NDAsIDB4MjU0MCwgMHgxRDc1LCAweDI1NDEsIDB4MjU0MSwgMHgxRDc0LCAweDI1NDIsIDB4MjU0MiwgMHgxRDc2LA0KLSAgICAweDI1NDMsIDB4MjU0MywgMHgxRDdCLCAweDI1NDQsIDB4MjU0NCwgMHgxRDdELCAweDI1NDUsIDB4MjU0NSwgMHgxRDdBLA0KLSAgICAweDI1NDYsIDB4MjU0NiwgMHgxRDdDLCAweDI1NDcsIDB4MjU0NywgMHgxRDgxLCAweDI1NDgsIDB4MjU0OCwgMHgxRDgwLA0KLSAgICAweDI1NDksIDB4MjU0QSwgMHgxRDdFLCAweDI2MUMsIDB4MjYxQywgMHgyMDFELCAweDI2MUQsIDB4MjYxRCwgMHgyMDFCLA0KLSAgICAweDI2MUUsIDB4MjYxRSwgMHgyMDFFLCAweDI2MUYsIDB4MjYxRiwgMHgyMDFDLCAweDI3MDIsIDB4MjcwMiwgMHgyRjkyLA0KLSAgICAweDI3QTEsIDB4MjdBMSwgMHgyMDExLCAweDMwMDEsIDB4MzAwMiwgMHgxRUNGLCAweDMwMDgsIDB4MzAxMSwgMHgxRUUzLA0KLSAgICAweDMwMTMsIDB4MzAxMywgMHgyMDRFLCAweDMwMTQsIDB4MzAxNSwgMHgxRURELCAweDMwMUMsIDB4MzAxQywgMHgxRUQ2LA0KLSAgICAweDMwMUQsIDB4MzAxRCwgMHgxRjE0LCAweDMwMUYsIDB4MzAxRiwgMHgxRjE1LCAweDMwNDEsIDB4MzA0MSwgMHgxRUVFLA0KLSAgICAweDMwNDMsIDB4MzA0MywgMHgxRUVGLCAweDMwNDUsIDB4MzA0NSwgMHgxRUYwLCAweDMwNDcsIDB4MzA0NywgMHgxRUYxLA0KLSAgICAweDMwNDksIDB4MzA0OSwgMHgxRUYyLCAweDMwNjMsIDB4MzA2MywgMHgxRUYzLCAweDMwODMsIDB4MzA4MywgMHgxRUY0LA0KLSAgICAweDMwODUsIDB4MzA4NSwgMHgxRUY1LCAweDMwODcsIDB4MzA4NywgMHgxRUY2LCAweDMwOEUsIDB4MzA4RSwgMHgxRUY3LA0KLSAgICAweDMwOUIsIDB4MzA5QiwgMHgyMDUwLCAweDMwOUMsIDB4MzA5QywgMHgyMDRGLCAweDMwQTEsIDB4MzBBMSwgMHgxRUY4LA0KLSAgICAweDMwQTMsIDB4MzBBMywgMHgxRUY5LCAweDMwQTUsIDB4MzBBNSwgMHgxRUZBLCAweDMwQTcsIDB4MzBBNywgMHgxRUZCLA0KLSAgICAweDMwQTksIDB4MzBBOSwgMHgxRUZDLCAweDMwQzMsIDB4MzBDMywgMHgxRUZELCAweDMwRTMsIDB4MzBFMywgMHgxRUZFLA0KLSAgICAweDMwRTUsIDB4MzBFNSwgMHgxRUZGLCAweDMwRTcsIDB4MzBFNywgMHgxRjAwLCAweDMwRUUsIDB4MzBFRSwgMHgxRjAxLA0KLSAgICAweDMwRjUsIDB4MzBGNiwgMHgxRjAyLCAweDMwRkMsIDB4MzBGQywgMHgxRUQzLCAweDMzMDAsIDB4MzMwMCwgMHgyMDlFLA0KLSAgICAweDMzMDEsIDB4MzMwMiwgMHgyRUI2LCAweDMzMDMsIDB4MzMwMywgMHgyMDkyLCAweDMzMDQsIDB4MzMwNCwgMHgyRUI4LA0KLSAgICAweDMzMDUsIDB4MzMwNSwgMHgyMDhELCAweDMzMDYsIDB4MzMwNiwgMHgyRUI5LCAweDMzMDcsIDB4MzMwNywgMHgyRUJELA0KLSAgICAweDMzMDgsIDB4MzMwOCwgMHgyRUJCLCAweDMzMDksIDB4MzMwOSwgMHgyRUMwLCAweDMzMEEsIDB4MzMwQSwgMHgyRUJFLA0KLSAgICAweDMzMEIsIDB4MzMwQiwgMHgyRUMyLCAweDMzMEMsIDB4MzMwQywgMHgyRUM0LCAweDMzMEQsIDB4MzMwRCwgMHgxRjBFLA0KLSAgICAweDMzMEUsIDB4MzMxMywgMHgyRUM1LCAweDMzMTQsIDB4MzMxNCwgMHgxRjA1LCAweDMzMTUsIDB4MzMxNSwgMHgyMDk0LA0KLSAgICAweDMzMTYsIDB4MzMxNiwgMHgyMDhBLCAweDMzMTcsIDB4MzMxNywgMHgyRUNDLCAweDMzMTgsIDB4MzMxOCwgMHgyMDkzLA0KLSAgICAweDMzMTksIDB4MzMxOSwgMHgyRUNFLCAweDMzMUEsIDB4MzMxRCwgMHgyRUQwLCAweDMzMUUsIDB4MzMxRSwgMHgyMEExLA0KLSAgICAweDMzMUYsIDB4MzMyMSwgMHgyRUQ0LCAweDMzMjIsIDB4MzMyMiwgMHgyMDg5LCAweDMzMjMsIDB4MzMyMywgMHgyMDlDLA0KLSAgICAweDMzMjQsIDB4MzMyNCwgMHgyRUQ3LCAweDMzMjUsIDB4MzMyNSwgMHgyRUQ5LCAweDMzMjYsIDB4MzMyNiwgMHgxRjBGLA0KLSAgICAweDMzMjcsIDB4MzMyNywgMHgxRjA5LCAweDMzMjgsIDB4MzMyOSwgMHgyRURDLCAweDMzMkEsIDB4MzMyQSwgMHgyMEE0LA0KLSAgICAweDMzMkIsIDB4MzMyQiwgMHgxRjExLCAweDMzMkQsIDB4MzMyRCwgMHgyRURGLCAweDMzMkUsIDB4MzMzMCwgMHgyRUUyLA0KLSAgICAweDMzMzEsIDB4MzMzMSwgMHgyMEE2LCAweDMzMzIsIDB4MzMzMiwgMHgyRUU1LCAweDMzMzMsIDB4MzMzMywgMHgyMDhFLA0KLSAgICAweDMzMzQsIDB4MzMzNSwgMHgyRUU4LCAweDMzMzYsIDB4MzMzNiwgMHgxRjBCLCAweDMzMzcsIDB4MzMzNywgMHgyRUVFLA0KLSAgICAweDMzMzgsIDB4MzMzOCwgMHgyRUYwLCAweDMzMzksIDB4MzMzOSwgMHgyMDk3LCAweDMzM0EsIDB4MzMzQSwgMHgyRUYxLA0KLSAgICAweDMzM0IsIDB4MzMzQiwgMHgyMDlELCAweDMzM0MsIDB4MzMzQywgMHgyRUVBLCAweDMzM0QsIDB4MzMzRCwgMHgyRUYyLA0KLSAgICAweDMzM0UsIDB4MzM0MCwgMHgyRUY0LCAweDMzNDEsIDB4MzM0MSwgMHgyRUYzLCAweDMzNDIsIDB4MzM0MiwgMHgyMDlCLA0KLSAgICAweDMzNDMsIDB4MzM0NiwgMHgyRUY3LCAweDMzNDcsIDB4MzM0NywgMHgyMEE1LCAweDMzNDgsIDB4MzM0OCwgMHgyRUZCLA0KLSAgICAweDMzNDksIDB4MzM0OSwgMHgxRjA0LCAweDMzNEEsIDB4MzM0QSwgMHgxRjEyLCAweDMzNEIsIDB4MzM0QywgMHgyRUZDLA0KLSAgICAweDMzNEQsIDB4MzM0RCwgMHgxRjA3LCAweDMzNEUsIDB4MzM0RSwgMHgyMDkxLCAweDMzNEYsIDB4MzM1MCwgMHgyRUZFLA0KLSAgICAweDMzNTEsIDB4MzM1MSwgMHgxRjBDLCAweDMzNTIsIDB4MzM1MiwgMHgyRjAyLCAweDMzNTMsIDB4MzM1MywgMHgyRjA2LA0KLSAgICAweDMzNTQsIDB4MzM1NCwgMHgyRjAzLCAweDMzNTUsIDB4MzM1NiwgMHgyRjA3LCAweDMzNTcsIDB4MzM1NywgMHgyMDk4LA0KLSAgICAweDMzN0YsIDB4MzM3RiwgMHgyMDg0LCAweEZGMDgsIDB4RkYwOSwgMHgxRURCLCAweEZGMEMsIDB4RkYwQywgMHgyMDRDLA0KLSAgICAweEZGMEUsIDB4RkYwRSwgMHgyMDUyLCAweEZGMUQsIDB4RkYxRCwgMHgxRUVELCAweEZGM0IsIDB4RkYzQiwgMHgxRURGLA0KLSAgICAweEZGM0QsIDB4RkYzRCwgMHgxRUUwLCAweEZGM0YsIDB4RkYzRiwgMHgxRUQyLCAweEZGNUIsIDB4RkY1QiwgMHgxRUUxLA0KLSAgICAweEZGNUMsIDB4RkY1QywgMHgxRUQ4LCAweEZGNUQsIDB4RkY1RCwgMHgxRUUyLCAweEZGNUUsIDB4RkY1RSwgMHgxRUQ2LA0KLSAgICAweEZGRTMsIDB4RkZFMywgMHgxRUQxLA0KLX07DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX1VuaUpJU19VQ1MyX0hXX1ZfNFsxOTkgKiAzXSA9IHsKKyAgICAweDAwMjAsIDB4MDA1QiwgMHgwMEU3LCAweDAwNUMsIDB4MDA1QywgMHgyMjBGLCAweDAwNUQsIDB4MDA3RSwgMHgwMTI0LAorICAgIDB4MDBBNSwgMHgwMEE1LCAweDAxMjMsIDB4MDBCMCwgMHgwMEIwLCAweDIwNEQsIDB4MjAxMCwgMHgyMDEwLCAweDFFRDUsCisgICAgMHgyMDE1LCAweDIwMTUsIDB4MUVENCwgMHgyMDE2LCAweDIwMTYsIDB4MUVENywgMHgyMDE4LCAweDIwMTksIDB4MjA1OSwKKyAgICAweDIwMUMsIDB4MjAxRCwgMHgyMDU3LCAweDIwMjUsIDB4MjAyNSwgMHgxRURBLCAweDIwMjYsIDB4MjAyNiwgMHgxRUQ5LAorICAgIDB4MjAzMiwgMHgyMDMyLCAweDIwNTEsIDB4MjAzMywgMHgyMDMzLCAweDIwNUIsIDB4MjE5MCwgMHgyMTkwLCAweDAyRTIsCisgICAgMHgyMTkxLCAweDIxOTEsIDB4MDJFMCwgMHgyMTkyLCAweDIxOTIsIDB4MDJFMywgMHgyMTkzLCAweDIxOTMsIDB4MDJFMSwKKyAgICAweDIxOTUsIDB4MjE5NSwgMHgyRkI2LCAweDIxQzQsIDB4MjFDNCwgMHgyMDc3LCAweDIxQzUsIDB4MjFDNSwgMHgyMDc2LAorICAgIDB4MjFDNiwgMHgyMUM2LCAweDIwNzgsIDB4MjFFNiwgMHgyMUU2LCAweDFGNEMsIDB4MjFFNywgMHgyMUU3LCAweDFGNEUsCisgICAgMHgyMUU4LCAweDIxRTgsIDB4MUY0QiwgMHgyMUU5LCAweDIxRTksIDB4MUY0RCwgMHgyMjI1LCAweDIyMjUsIDB4MUVENywKKyAgICAweDIyM0MsIDB4MjIzQywgMHgxRUQ2LCAweDIyRUYsIDB4MjJFRiwgMHgxRUQ5LCAweDI1MDAsIDB4MjUwMSwgMHgxRDM5LAorICAgIDB4MjUwMiwgMHgyNTAzLCAweDFEMzcsIDB4MjUwNCwgMHgyNTA1LCAweDFEM0QsIDB4MjUwNiwgMHgyNTA3LCAweDFEM0IsCisgICAgMHgyNTA4LCAweDI1MDksIDB4MUQ0MSwgMHgyNTBBLCAweDI1MEIsIDB4MUQzRiwgMHgyNTBDLCAweDI1MEMsIDB4MUQ0NywKKyAgICAweDI1MEQsIDB4MjUwRCwgMHgxRDQ5LCAweDI1MEUsIDB4MjUwRSwgMHgxRDQ4LCAweDI1MEYsIDB4MjUwRiwgMHgxRDRBLAorICAgIDB4MjUxMCwgMHgyNTEwLCAweDFENEYsIDB4MjUxMSwgMHgyNTExLCAweDFENTEsIDB4MjUxMiwgMHgyNTEyLCAweDFENTAsCisgICAgMHgyNTEzLCAweDI1MTMsIDB4MUQ1MiwgMHgyNTE0LCAweDI1MTQsIDB4MUQ0MywgMHgyNTE1LCAweDI1MTUsIDB4MUQ0NSwKKyAgICAweDI1MTYsIDB4MjUxNiwgMHgxRDQ0LCAweDI1MTcsIDB4MjUxNywgMHgxRDQ2LCAweDI1MTgsIDB4MjUxOCwgMHgxRDRCLAorICAgIDB4MjUxOSwgMHgyNTE5LCAweDFENEQsIDB4MjUxQSwgMHgyNTFBLCAweDFENEMsIDB4MjUxQiwgMHgyNTFCLCAweDFENEUsCisgICAgMHgyNTFDLCAweDI1MUMsIDB4MUQ2MywgMHgyNTFELCAweDI1MUQsIDB4MUQ2NywgMHgyNTFFLCAweDI1MUUsIDB4MUQ2NSwKKyAgICAweDI1MUYsIDB4MjUxRiwgMHgxRDY0LCAweDI1MjAsIDB4MjUyMCwgMHgxRDY2LCAweDI1MjEsIDB4MjUyMSwgMHgxRDY5LAorICAgIDB4MjUyMiwgMHgyNTIyLCAweDFENjgsIDB4MjUyMywgMHgyNTI0LCAweDFENkEsIDB4MjUyNSwgMHgyNTI1LCAweDFENkYsCisgICAgMHgyNTI2LCAweDI1MjYsIDB4MUQ2RCwgMHgyNTI3LCAweDI1MjcsIDB4MUQ2QywgMHgyNTI4LCAweDI1MjgsIDB4MUQ2RSwKKyAgICAweDI1MjksIDB4MjUyOSwgMHgxRDcxLCAweDI1MkEsIDB4MjUyQSwgMHgxRDcwLCAweDI1MkIsIDB4MjUyQiwgMHgxRDcyLAorICAgIDB4MjUyQywgMHgyNTJDLCAweDFENUIsIDB4MjUyRCwgMHgyNTJGLCAweDFENUQsIDB4MjUzMCwgMHgyNTMwLCAweDFENUMsCisgICAgMHgyNTMxLCAweDI1MzMsIDB4MUQ2MCwgMHgyNTM0LCAweDI1MzQsIDB4MUQ1MywgMHgyNTM1LCAweDI1MzcsIDB4MUQ1NSwKKyAgICAweDI1MzgsIDB4MjUzOCwgMHgxRDU0LCAweDI1MzksIDB4MjUzQiwgMHgxRDU4LCAweDI1M0QsIDB4MjUzRiwgMHgxRDc3LAorICAgIDB4MjU0MCwgMHgyNTQwLCAweDFENzUsIDB4MjU0MSwgMHgyNTQxLCAweDFENzQsIDB4MjU0MiwgMHgyNTQyLCAweDFENzYsCisgICAgMHgyNTQzLCAweDI1NDMsIDB4MUQ3QiwgMHgyNTQ0LCAweDI1NDQsIDB4MUQ3RCwgMHgyNTQ1LCAweDI1NDUsIDB4MUQ3QSwKKyAgICAweDI1NDYsIDB4MjU0NiwgMHgxRDdDLCAweDI1NDcsIDB4MjU0NywgMHgxRDgxLCAweDI1NDgsIDB4MjU0OCwgMHgxRDgwLAorICAgIDB4MjU0OSwgMHgyNTRBLCAweDFEN0UsIDB4MjYxQywgMHgyNjFDLCAweDIwMUQsIDB4MjYxRCwgMHgyNjFELCAweDIwMUIsCisgICAgMHgyNjFFLCAweDI2MUUsIDB4MjAxRSwgMHgyNjFGLCAweDI2MUYsIDB4MjAxQywgMHgyNzAyLCAweDI3MDIsIDB4MkY5MiwKKyAgICAweDI3QTEsIDB4MjdBMSwgMHgyMDExLCAweDMwMDEsIDB4MzAwMiwgMHgxRUNGLCAweDMwMDgsIDB4MzAxMSwgMHgxRUUzLAorICAgIDB4MzAxMywgMHgzMDEzLCAweDIwNEUsIDB4MzAxNCwgMHgzMDE1LCAweDFFREQsIDB4MzAxQywgMHgzMDFDLCAweDFFRDYsCisgICAgMHgzMDFELCAweDMwMUQsIDB4MUYxNCwgMHgzMDFGLCAweDMwMUYsIDB4MUYxNSwgMHgzMDQxLCAweDMwNDEsIDB4MUVFRSwKKyAgICAweDMwNDMsIDB4MzA0MywgMHgxRUVGLCAweDMwNDUsIDB4MzA0NSwgMHgxRUYwLCAweDMwNDcsIDB4MzA0NywgMHgxRUYxLAorICAgIDB4MzA0OSwgMHgzMDQ5LCAweDFFRjIsIDB4MzA2MywgMHgzMDYzLCAweDFFRjMsIDB4MzA4MywgMHgzMDgzLCAweDFFRjQsCisgICAgMHgzMDg1LCAweDMwODUsIDB4MUVGNSwgMHgzMDg3LCAweDMwODcsIDB4MUVGNiwgMHgzMDhFLCAweDMwOEUsIDB4MUVGNywKKyAgICAweDMwOUIsIDB4MzA5QiwgMHgyMDUwLCAweDMwOUMsIDB4MzA5QywgMHgyMDRGLCAweDMwQTEsIDB4MzBBMSwgMHgxRUY4LAorICAgIDB4MzBBMywgMHgzMEEzLCAweDFFRjksIDB4MzBBNSwgMHgzMEE1LCAweDFFRkEsIDB4MzBBNywgMHgzMEE3LCAweDFFRkIsCisgICAgMHgzMEE5LCAweDMwQTksIDB4MUVGQywgMHgzMEMzLCAweDMwQzMsIDB4MUVGRCwgMHgzMEUzLCAweDMwRTMsIDB4MUVGRSwKKyAgICAweDMwRTUsIDB4MzBFNSwgMHgxRUZGLCAweDMwRTcsIDB4MzBFNywgMHgxRjAwLCAweDMwRUUsIDB4MzBFRSwgMHgxRjAxLAorICAgIDB4MzBGNSwgMHgzMEY2LCAweDFGMDIsIDB4MzBGQywgMHgzMEZDLCAweDFFRDMsIDB4MzMwMCwgMHgzMzAwLCAweDIwOUUsCisgICAgMHgzMzAxLCAweDMzMDIsIDB4MkVCNiwgMHgzMzAzLCAweDMzMDMsIDB4MjA5MiwgMHgzMzA0LCAweDMzMDQsIDB4MkVCOCwKKyAgICAweDMzMDUsIDB4MzMwNSwgMHgyMDhELCAweDMzMDYsIDB4MzMwNiwgMHgyRUI5LCAweDMzMDcsIDB4MzMwNywgMHgyRUJELAorICAgIDB4MzMwOCwgMHgzMzA4LCAweDJFQkIsIDB4MzMwOSwgMHgzMzA5LCAweDJFQzAsIDB4MzMwQSwgMHgzMzBBLCAweDJFQkUsCisgICAgMHgzMzBCLCAweDMzMEIsIDB4MkVDMiwgMHgzMzBDLCAweDMzMEMsIDB4MkVDNCwgMHgzMzBELCAweDMzMEQsIDB4MUYwRSwKKyAgICAweDMzMEUsIDB4MzMxMywgMHgyRUM1LCAweDMzMTQsIDB4MzMxNCwgMHgxRjA1LCAweDMzMTUsIDB4MzMxNSwgMHgyMDk0LAorICAgIDB4MzMxNiwgMHgzMzE2LCAweDIwOEEsIDB4MzMxNywgMHgzMzE3LCAweDJFQ0MsIDB4MzMxOCwgMHgzMzE4LCAweDIwOTMsCisgICAgMHgzMzE5LCAweDMzMTksIDB4MkVDRSwgMHgzMzFBLCAweDMzMUQsIDB4MkVEMCwgMHgzMzFFLCAweDMzMUUsIDB4MjBBMSwKKyAgICAweDMzMUYsIDB4MzMyMSwgMHgyRUQ0LCAweDMzMjIsIDB4MzMyMiwgMHgyMDg5LCAweDMzMjMsIDB4MzMyMywgMHgyMDlDLAorICAgIDB4MzMyNCwgMHgzMzI0LCAweDJFRDcsIDB4MzMyNSwgMHgzMzI1LCAweDJFRDksIDB4MzMyNiwgMHgzMzI2LCAweDFGMEYsCisgICAgMHgzMzI3LCAweDMzMjcsIDB4MUYwOSwgMHgzMzI4LCAweDMzMjksIDB4MkVEQywgMHgzMzJBLCAweDMzMkEsIDB4MjBBNCwKKyAgICAweDMzMkIsIDB4MzMyQiwgMHgxRjExLCAweDMzMkQsIDB4MzMyRCwgMHgyRURGLCAweDMzMkUsIDB4MzMzMCwgMHgyRUUyLAorICAgIDB4MzMzMSwgMHgzMzMxLCAweDIwQTYsIDB4MzMzMiwgMHgzMzMyLCAweDJFRTUsIDB4MzMzMywgMHgzMzMzLCAweDIwOEUsCisgICAgMHgzMzM0LCAweDMzMzUsIDB4MkVFOCwgMHgzMzM2LCAweDMzMzYsIDB4MUYwQiwgMHgzMzM3LCAweDMzMzcsIDB4MkVFRSwKKyAgICAweDMzMzgsIDB4MzMzOCwgMHgyRUYwLCAweDMzMzksIDB4MzMzOSwgMHgyMDk3LCAweDMzM0EsIDB4MzMzQSwgMHgyRUYxLAorICAgIDB4MzMzQiwgMHgzMzNCLCAweDIwOUQsIDB4MzMzQywgMHgzMzNDLCAweDJFRUEsIDB4MzMzRCwgMHgzMzNELCAweDJFRjIsCisgICAgMHgzMzNFLCAweDMzNDAsIDB4MkVGNCwgMHgzMzQxLCAweDMzNDEsIDB4MkVGMywgMHgzMzQyLCAweDMzNDIsIDB4MjA5QiwKKyAgICAweDMzNDMsIDB4MzM0NiwgMHgyRUY3LCAweDMzNDcsIDB4MzM0NywgMHgyMEE1LCAweDMzNDgsIDB4MzM0OCwgMHgyRUZCLAorICAgIDB4MzM0OSwgMHgzMzQ5LCAweDFGMDQsIDB4MzM0QSwgMHgzMzRBLCAweDFGMTIsIDB4MzM0QiwgMHgzMzRDLCAweDJFRkMsCisgICAgMHgzMzRELCAweDMzNEQsIDB4MUYwNywgMHgzMzRFLCAweDMzNEUsIDB4MjA5MSwgMHgzMzRGLCAweDMzNTAsIDB4MkVGRSwKKyAgICAweDMzNTEsIDB4MzM1MSwgMHgxRjBDLCAweDMzNTIsIDB4MzM1MiwgMHgyRjAyLCAweDMzNTMsIDB4MzM1MywgMHgyRjA2LAorICAgIDB4MzM1NCwgMHgzMzU0LCAweDJGMDMsIDB4MzM1NSwgMHgzMzU2LCAweDJGMDcsIDB4MzM1NywgMHgzMzU3LCAweDIwOTgsCisgICAgMHgzMzdGLCAweDMzN0YsIDB4MjA4NCwgMHhGRjA4LCAweEZGMDksIDB4MUVEQiwgMHhGRjBDLCAweEZGMEMsIDB4MjA0QywKKyAgICAweEZGMEUsIDB4RkYwRSwgMHgyMDUyLCAweEZGMUQsIDB4RkYxRCwgMHgxRUVELCAweEZGM0IsIDB4RkYzQiwgMHgxRURGLAorICAgIDB4RkYzRCwgMHhGRjNELCAweDFFRTAsIDB4RkYzRiwgMHhGRjNGLCAweDFFRDIsIDB4RkY1QiwgMHhGRjVCLCAweDFFRTEsCisgICAgMHhGRjVDLCAweEZGNUMsIDB4MUVEOCwgMHhGRjVELCAweEZGNUQsIDB4MUVFMiwgMHhGRjVFLCAweEZGNUUsIDB4MUVENiwKKyAgICAweEZGRTMsIDB4RkZFMywgMHgxRUQxLAorfTsKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvVW5pSklTLVVDUzItSF80LmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvVW5pSklTLVVDUzItSF80LmNwcAppbmRleCAzNWYwYjcxLi5jNmFiODM0IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvSmFwYW4xL1VuaUpJUy1VQ1MyLUhfNC5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0phcGFuMS9VbmlKSVMtVUNTMi1IXzQuY3BwCkBAIC0xLDI0NTEgKzEsMjQ1MSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX1VuaUpJU19VQ1MyX0hfNFs5NzcyICogMl0gPSB7DQotICAgIDB4MDAyMCwgMHgwMDAxLCAweDAwMjEsIDB4MDAwMiwgMHgwMDIyLCAweDAwMDMsIDB4MDAyMywgMHgwMDA0LA0KLSAgICAweDAwMjQsIDB4MDAwNSwgMHgwMDI1LCAweDAwMDYsIDB4MDAyNiwgMHgwMDA3LCAweDAwMjcsIDB4MDAwOCwNCi0gICAgMHgwMDI4LCAweDAwMDksIDB4MDAyOSwgMHgwMDBBLCAweDAwMkEsIDB4MDAwQiwgMHgwMDJCLCAweDAwMEMsDQotICAgIDB4MDAyQywgMHgwMDBELCAweDAwMkQsIDB4MDAwRSwgMHgwMDJFLCAweDAwMEYsIDB4MDAyRiwgMHgwMDEwLA0KLSAgICAweDAwMzAsIDB4MDAxMSwgMHgwMDMxLCAweDAwMTIsIDB4MDAzMiwgMHgwMDEzLCAweDAwMzMsIDB4MDAxNCwNCi0gICAgMHgwMDM0LCAweDAwMTUsIDB4MDAzNSwgMHgwMDE2LCAweDAwMzYsIDB4MDAxNywgMHgwMDM3LCAweDAwMTgsDQotICAgIDB4MDAzOCwgMHgwMDE5LCAweDAwMzksIDB4MDAxQSwgMHgwMDNBLCAweDAwMUIsIDB4MDAzQiwgMHgwMDFDLA0KLSAgICAweDAwM0MsIDB4MDAxRCwgMHgwMDNELCAweDAwMUUsIDB4MDAzRSwgMHgwMDFGLCAweDAwM0YsIDB4MDAyMCwNCi0gICAgMHgwMDQwLCAweDAwMjEsIDB4MDA0MSwgMHgwMDIyLCAweDAwNDIsIDB4MDAyMywgMHgwMDQzLCAweDAwMjQsDQotICAgIDB4MDA0NCwgMHgwMDI1LCAweDAwNDUsIDB4MDAyNiwgMHgwMDQ2LCAweDAwMjcsIDB4MDA0NywgMHgwMDI4LA0KLSAgICAweDAwNDgsIDB4MDAyOSwgMHgwMDQ5LCAweDAwMkEsIDB4MDA0QSwgMHgwMDJCLCAweDAwNEIsIDB4MDAyQywNCi0gICAgMHgwMDRDLCAweDAwMkQsIDB4MDA0RCwgMHgwMDJFLCAweDAwNEUsIDB4MDAyRiwgMHgwMDRGLCAweDAwMzAsDQotICAgIDB4MDA1MCwgMHgwMDMxLCAweDAwNTEsIDB4MDAzMiwgMHgwMDUyLCAweDAwMzMsIDB4MDA1MywgMHgwMDM0LA0KLSAgICAweDAwNTQsIDB4MDAzNSwgMHgwMDU1LCAweDAwMzYsIDB4MDA1NiwgMHgwMDM3LCAweDAwNTcsIDB4MDAzOCwNCi0gICAgMHgwMDU4LCAweDAwMzksIDB4MDA1OSwgMHgwMDNBLCAweDAwNUEsIDB4MDAzQiwgMHgwMDVCLCAweDAwM0MsDQotICAgIDB4MDA1QywgMHgwMDYxLCAweDAwNUQsIDB4MDAzRSwgMHgwMDVFLCAweDAwM0YsIDB4MDA1RiwgMHgwMDQwLA0KLSAgICAweDAwNjAsIDB4MDA0MSwgMHgwMDYxLCAweDAwNDIsIDB4MDA2MiwgMHgwMDQzLCAweDAwNjMsIDB4MDA0NCwNCi0gICAgMHgwMDY0LCAweDAwNDUsIDB4MDA2NSwgMHgwMDQ2LCAweDAwNjYsIDB4MDA0NywgMHgwMDY3LCAweDAwNDgsDQotICAgIDB4MDA2OCwgMHgwMDQ5LCAweDAwNjksIDB4MDA0QSwgMHgwMDZBLCAweDAwNEIsIDB4MDA2QiwgMHgwMDRDLA0KLSAgICAweDAwNkMsIDB4MDA0RCwgMHgwMDZELCAweDAwNEUsIDB4MDA2RSwgMHgwMDRGLCAweDAwNkYsIDB4MDA1MCwNCi0gICAgMHgwMDcwLCAweDAwNTEsIDB4MDA3MSwgMHgwMDUyLCAweDAwNzIsIDB4MDA1MywgMHgwMDczLCAweDAwNTQsDQotICAgIDB4MDA3NCwgMHgwMDU1LCAweDAwNzUsIDB4MDA1NiwgMHgwMDc2LCAweDAwNTcsIDB4MDA3NywgMHgwMDU4LA0KLSAgICAweDAwNzgsIDB4MDA1OSwgMHgwMDc5LCAweDAwNUEsIDB4MDA3QSwgMHgwMDVCLCAweDAwN0IsIDB4MDA1QywNCi0gICAgMHgwMDdDLCAweDAwNUQsIDB4MDA3RCwgMHgwMDVFLCAweDAwN0UsIDB4MDA1RiwgMHgwMEExLCAweDAwNjUsDQotICAgIDB4MDBBMiwgMHgwMDY2LCAweDAwQTMsIDB4MDA2NywgMHgwMEE0LCAweDAwNkIsIDB4MDBBNSwgMHgwMDNELA0KLSAgICAweDAwQTYsIDB4MDA2MywgMHgwMEE3LCAweDAyRDAsIDB4MDBBOCwgMHgwMjg3LCAweDAwQTksIDB4MDA5OCwNCi0gICAgMHgwMEFBLCAweDAwOEMsIDB4MDBBQiwgMHgwMDZELCAweDAwQUMsIDB4MDA5OSwgMHgwMEFELCAweDAwOTcsDQotICAgIDB4MDBBRSwgMHgwMDlBLCAweDAwQUYsIDB4MDA4MSwgMHgwMEIwLCAweDAyQzMsIDB4MDBCMSwgMHgwMkI2LA0KLSAgICAweDAwQjIsIDB4MDA5RCwgMHgwMEIzLCAweDAwOUUsIDB4MDBCNCwgMHgwMjg1LCAweDAwQjUsIDB4MDA5RiwNCi0gICAgMHgwMEI2LCAweDAzMEEsIDB4MDBCNywgMHgwMDc1LCAweDAwQjgsIDB4MDA4NiwgMHgwMEI5LCAweDAwQTAsDQotICAgIDB4MDBCQSwgMHgwMDkwLCAweDAwQkIsIDB4MDA3QiwgMHgwMEJDLCAweDAwQTEsIDB4MDBCRCwgMHgwMEEyLA0KLSAgICAweDAwQkUsIDB4MDBBMywgMHgwMEJGLCAweDAwN0UsIDB4MDBDMCwgMHgwMEE0LCAweDAwQzEsIDB4MDBBNSwNCi0gICAgMHgwMEMyLCAweDAwQTYsIDB4MDBDMywgMHgwMEE3LCAweDAwQzQsIDB4MDBBOCwgMHgwMEM1LCAweDAwQTksDQotICAgIDB4MDBDNiwgMHgwMDhCLCAweDAwQzcsIDB4MDBBQSwgMHgwMEM4LCAweDAwQUIsIDB4MDBDOSwgMHgwMEFDLA0KLSAgICAweDAwQ0EsIDB4MDBBRCwgMHgwMENCLCAweDAwQUUsIDB4MDBDQywgMHgwMEFGLCAweDAwQ0QsIDB4MDBCMCwNCi0gICAgMHgwMENFLCAweDAwQjEsIDB4MDBDRiwgMHgwMEIyLCAweDAwRDAsIDB4MDBCMywgMHgwMEQxLCAweDAwQjQsDQotICAgIDB4MDBEMiwgMHgwMEI1LCAweDAwRDMsIDB4MDBCNiwgMHgwMEQ0LCAweDAwQjcsIDB4MDBENSwgMHgwMEI4LA0KLSAgICAweDAwRDYsIDB4MDBCOSwgMHgwMEQ3LCAweDAyQjcsIDB4MDBEOCwgMHgwMDhFLCAweDAwRDksIDB4MDBCQiwNCi0gICAgMHgwMERBLCAweDAwQkMsIDB4MDBEQiwgMHgwMEJELCAweDAwREMsIDB4MDBCRSwgMHgwMERELCAweDAwQkYsDQotICAgIDB4MDBERSwgMHgwMEMwLCAweDAwREYsIDB4MDA5NiwgMHgwMEUwLCAweDAwQzEsIDB4MDBFMSwgMHgwMEMyLA0KLSAgICAweDAwRTIsIDB4MDBDMywgMHgwMEUzLCAweDAwQzQsIDB4MDBFNCwgMHgwMEM1LCAweDAwRTUsIDB4MDBDNiwNCi0gICAgMHgwMEU2LCAweDAwOTEsIDB4MDBFNywgMHgwMEM3LCAweDAwRTgsIDB4MDBDOCwgMHgwMEU5LCAweDAwQzksDQotICAgIDB4MDBFQSwgMHgwMENBLCAweDAwRUIsIDB4MDBDQiwgMHgwMEVDLCAweDAwQ0MsIDB4MDBFRCwgMHgwMENELA0KLSAgICAweDAwRUUsIDB4MDBDRSwgMHgwMEVGLCAweDAwQ0YsIDB4MDBGMCwgMHgwMEQwLCAweDAwRjEsIDB4MDBEMSwNCi0gICAgMHgwMEYyLCAweDAwRDIsIDB4MDBGMywgMHgwMEQzLCAweDAwRjQsIDB4MDBENCwgMHgwMEY1LCAweDAwRDUsDQotICAgIDB4MDBGNiwgMHgwMEQ2LCAweDAwRjcsIDB4MDJCOCwgMHgwMEY4LCAweDAwOTQsIDB4MDBGOSwgMHgwMEQ4LA0KLSAgICAweDAwRkEsIDB4MDBEOSwgMHgwMEZCLCAweDAwREEsIDB4MDBGQywgMHgwMERCLCAweDAwRkQsIDB4MDBEQywNCi0gICAgMHgwMEZFLCAweDAwREQsIDB4MDBGRiwgMHgwMERFLCAweDAxMDAsIDB4MjQ5NiwgMHgwMTAxLCAweDI0OTEsDQotICAgIDB4MDExMiwgMHgyNDk5LCAweDAxMTMsIDB4MjQ5NCwgMHgwMTFBLCAweDI0QjMsIDB4MDExQiwgMHgyNEJGLA0KLSAgICAweDAxMjcsIDB4MkYzQywgMHgwMTI4LCAweDI0QjgsIDB4MDEyOSwgMHgyNEM0LCAweDAxMkEsIDB4MjQ5NywNCi0gICAgMHgwMTJCLCAweDI0OTIsIDB4MDEzMSwgMHgwMDkyLCAweDAxNDEsIDB4MDA4RCwgMHgwMTQyLCAweDAwOTMsDQotICAgIDB4MDE0QiwgMHgyNERDLCAweDAxNEMsIDB4MjQ5QSwgMHgwMTRELCAweDI0OTUsIDB4MDE1MiwgMHgwMDhGLA0KLSAgICAweDAxNTMsIDB4MDA5NSwgMHgwMTYwLCAweDAwREYsIDB4MDE2MSwgMHgwMEUzLCAweDAxNjgsIDB4MjRCRCwNCi0gICAgMHgwMTY5LCAweDI0QzksIDB4MDE2QSwgMHgyNDk4LCAweDAxNkIsIDB4MjQ5MywgMHgwMTZFLCAweDI0QkMsDQotICAgIDB4MDE2RiwgMHgyNEM4LCAweDAxNzgsIDB4MDBFMCwgMHgwMTdELCAweDAwRTEsIDB4MDE3RSwgMHgwMEU1LA0KLSAgICAweDAxQzAsIDB4MDA2MywgMHgwMUNELCAweDI0QjIsIDB4MDFDRSwgMHgyNEJFLCAweDAxQ0YsIDB4MjRCNiwNCi0gICAgMHgwMUQwLCAweDI0QzIsIDB4MDFEMSwgMHgyNEI5LCAweDAxRDIsIDB4MjRDNSwgMHgwMUQzLCAweDI0QkIsDQotICAgIDB4MDFENCwgMHgyNEM3LCAweDAxRkQsIDB4MjRDRCwgMHgwMjUxLCAweDI0Q0EsIDB4MDI1NCwgMHgyNENGLA0KLSAgICAweDAyNTksIDB4MjREMiwgMHgwMjVBLCAweDI0RDUsIDB4MDI1QiwgMHgyNEQ4LCAweDAyNzUsIDB4MjRERCwNCi0gICAgMHgwMjgzLCAweDI0RTIsIDB4MDI4QywgMHgyNERFLCAweDAyOTIsIDB4MjRFMSwgMHgwMkQwLCAweDI0RTMsDQotICAgIDB4MDMwMCwgMHgwMDQxLCAweDAzMDEsIDB4MDA3RiwgMHgwMzAyLCAweDAwODAsIDB4MDMwMywgMHgwMDVGLA0KLSAgICAweDAzMDQsIDB4MDA4MSwgMHgwMzA1LCAweDAwRTIsIDB4MDMwNiwgMHgwMDgyLCAweDAzMDcsIDB4MDA4MywNCi0gICAgMHgwMzA4LCAweDAwODQsIDB4MDMwQSwgMHgwMDg1LCAweDAzMEIsIDB4MDA4NywgMHgwMzBDLCAweDAwODksDQotICAgIDB4MDMyNywgMHgwMDg2LCAweDAzMjgsIDB4MDA4OCwgMHgwMzMyLCAweDAwNDAsIDB4MDMzNiwgMHgwMDhBLA0KLSAgICAweDAzNjEsIDB4MDJGNiwgMHgwMzkxLCAweDAzRjMsIDB4MDM5MiwgMHgwM0Y0LCAweDAzOTMsIDB4MDNGNSwNCi0gICAgMHgwMzk0LCAweDAzRjYsIDB4MDM5NSwgMHgwM0Y3LCAweDAzOTYsIDB4MDNGOCwgMHgwMzk3LCAweDAzRjksDQotICAgIDB4MDM5OCwgMHgwM0ZBLCAweDAzOTksIDB4MDNGQiwgMHgwMzlBLCAweDAzRkMsIDB4MDM5QiwgMHgwM0ZELA0KLSAgICAweDAzOUMsIDB4MDNGRSwgMHgwMzlELCAweDAzRkYsIDB4MDM5RSwgMHgwNDAwLCAweDAzOUYsIDB4MDQwMSwNCi0gICAgMHgwM0EwLCAweDA0MDIsIDB4MDNBMSwgMHgwNDAzLCAweDAzQTMsIDB4MDQwNCwgMHgwM0E0LCAweDA0MDUsDQotICAgIDB4MDNBNSwgMHgwNDA2LCAweDAzQTYsIDB4MDQwNywgMHgwM0E3LCAweDA0MDgsIDB4MDNBOCwgMHgwNDA5LA0KLSAgICAweDAzQTksIDB4MDQwQSwgMHgwM0IxLCAweDA0MEIsIDB4MDNCMiwgMHgwNDBDLCAweDAzQjMsIDB4MDQwRCwNCi0gICAgMHgwM0I0LCAweDA0MEUsIDB4MDNCNSwgMHgwNDBGLCAweDAzQjYsIDB4MDQxMCwgMHgwM0I3LCAweDA0MTEsDQotICAgIDB4MDNCOCwgMHgwNDEyLCAweDAzQjksIDB4MDQxMywgMHgwM0JBLCAweDA0MTQsIDB4MDNCQiwgMHgwNDE1LA0KLSAgICAweDAzQkMsIDB4MDQxNiwgMHgwM0JELCAweDA0MTcsIDB4MDNCRSwgMHgwNDE4LCAweDAzQkYsIDB4MDQxOSwNCi0gICAgMHgwM0MwLCAweDA0MUEsIDB4MDNDMSwgMHgwNDFCLCAweDAzQzMsIDB4MDQxQywgMHgwM0M0LCAweDA0MUQsDQotICAgIDB4MDNDNSwgMHgwNDFFLCAweDAzQzYsIDB4MDQxRiwgMHgwM0M3LCAweDA0MjAsIDB4MDNDOCwgMHgwNDIxLA0KLSAgICAweDAzQzksIDB4MDQyMiwgMHgwM0QwLCAweDJGM0EsIDB4MDNEMSwgMHgyRjQwLCAweDAzREIsIDB4MkYzRiwNCi0gICAgMHgwNDAxLCAweDA0MjksIDB4MDQxMCwgMHgwNDIzLCAweDA0MTEsIDB4MDQyNCwgMHgwNDEyLCAweDA0MjUsDQotICAgIDB4MDQxMywgMHgwNDI2LCAweDA0MTQsIDB4MDQyNywgMHgwNDE1LCAweDA0MjgsIDB4MDQxNiwgMHgwNDJBLA0KLSAgICAweDA0MTcsIDB4MDQyQiwgMHgwNDE4LCAweDA0MkMsIDB4MDQxOSwgMHgwNDJELCAweDA0MUEsIDB4MDQyRSwNCi0gICAgMHgwNDFCLCAweDA0MkYsIDB4MDQxQywgMHgwNDMwLCAweDA0MUQsIDB4MDQzMSwgMHgwNDFFLCAweDA0MzIsDQotICAgIDB4MDQxRiwgMHgwNDMzLCAweDA0MjAsIDB4MDQzNCwgMHgwNDIxLCAweDA0MzUsIDB4MDQyMiwgMHgwNDM2LA0KLSAgICAweDA0MjMsIDB4MDQzNywgMHgwNDI0LCAweDA0MzgsIDB4MDQyNSwgMHgwNDM5LCAweDA0MjYsIDB4MDQzQSwNCi0gICAgMHgwNDI3LCAweDA0M0IsIDB4MDQyOCwgMHgwNDNDLCAweDA0MjksIDB4MDQzRCwgMHgwNDJBLCAweDA0M0UsDQotICAgIDB4MDQyQiwgMHgwNDNGLCAweDA0MkMsIDB4MDQ0MCwgMHgwNDJELCAweDA0NDEsIDB4MDQyRSwgMHgwNDQyLA0KLSAgICAweDA0MkYsIDB4MDQ0MywgMHgwNDMwLCAweDA0NDQsIDB4MDQzMSwgMHgwNDQ1LCAweDA0MzIsIDB4MDQ0NiwNCi0gICAgMHgwNDMzLCAweDA0NDcsIDB4MDQzNCwgMHgwNDQ4LCAweDA0MzUsIDB4MDQ0OSwgMHgwNDM2LCAweDA0NEIsDQotICAgIDB4MDQzNywgMHgwNDRDLCAweDA0MzgsIDB4MDQ0RCwgMHgwNDM5LCAweDA0NEUsIDB4MDQzQSwgMHgwNDRGLA0KLSAgICAweDA0M0IsIDB4MDQ1MCwgMHgwNDNDLCAweDA0NTEsIDB4MDQzRCwgMHgwNDUyLCAweDA0M0UsIDB4MDQ1MywNCi0gICAgMHgwNDNGLCAweDA0NTQsIDB4MDQ0MCwgMHgwNDU1LCAweDA0NDEsIDB4MDQ1NiwgMHgwNDQyLCAweDA0NTcsDQotICAgIDB4MDQ0MywgMHgwNDU4LCAweDA0NDQsIDB4MDQ1OSwgMHgwNDQ1LCAweDA0NUEsIDB4MDQ0NiwgMHgwNDVCLA0KLSAgICAweDA0NDcsIDB4MDQ1QywgMHgwNDQ4LCAweDA0NUQsIDB4MDQ0OSwgMHgwNDVFLCAweDA0NEEsIDB4MDQ1RiwNCi0gICAgMHgwNDRCLCAweDA0NjAsIDB4MDQ0QywgMHgwNDYxLCAweDA0NEQsIDB4MDQ2MiwgMHgwNDRFLCAweDA0NjMsDQotICAgIDB4MDQ0RiwgMHgwNDY0LCAweDA0NTEsIDB4MDQ0QSwgMHgwNDVCLCAweDJGM0MsIDB4MUVCQywgMHgyNEI1LA0KLSAgICAweDFFQkQsIDB4MjRDMSwgMHgyMDAyLCAweDAwRTcsIDB4MjAwMywgMHgwMjc5LCAweDIwMTAsIDB4MDI5NiwNCi0gICAgMHgyMDExLCAweDAwMEUsIDB4MjAxMiwgMHgwMDcyLCAweDIwMTMsIDB4MDA3MiwgMHgyMDE0LCAweDAwOEEsDQotICAgIDB4MjAxNSwgMHgwMjk1LCAweDIwMTYsIDB4MDI5QSwgMHgyMDE4LCAweDAyOUUsIDB4MjAxOSwgMHgwMjlGLA0KLSAgICAweDIwMUEsIDB4MDA3OCwgMHgyMDFDLCAweDAyQTAsIDB4MjAxRCwgMHgwMkExLCAweDIwMUUsIDB4MDA3OSwNCi0gICAgMHgyMDIwLCAweDAzMDgsIDB4MjAyMSwgMHgwMzA5LCAweDIwMjIsIDB4MDA3NywgMHgyMDI1LCAweDAyOUQsDQotICAgIDB4MjAyNiwgMHgwMjlDLCAweDIwMzAsIDB4MDMwNCwgMHgyMDMyLCAweDAyQzQsIDB4MjAzMywgMHgwMkM1LA0KLSAgICAweDIwMzksIDB4MDA2RSwgMHgyMDNBLCAweDAwNkYsIDB4MjAzQiwgMHgwMkRFLCAweDIwM0MsIDB4MkY0RiwNCi0gICAgMHgyMDNFLCAweDAxNDUsIDB4MjA0NCwgMHgwMDY4LCAweDIwNDksIDB4MkY1MCwgMHgyMDcwLCAweDI0QTEsDQotICAgIDB4MjA3NCwgMHgyNEEyLCAweDIwNzUsIDB4MjRBMywgMHgyMDc2LCAweDI0QTQsIDB4MjA3NywgMHgyNEE1LA0KLSAgICAweDIwNzgsIDB4MjRBNiwgMHgyMDc5LCAweDI0QTcsIDB4MjA4MCwgMHgyNEE4LCAweDIwODEsIDB4MjRBOSwNCi0gICAgMHgyMDgyLCAweDI0QUEsIDB4MjA4MywgMHgyNEFCLCAweDIwODQsIDB4MjRBQywgMHgyMDg1LCAweDI0QUQsDQotICAgIDB4MjA4NiwgMHgyNEFFLCAweDIwODcsIDB4MjRBRiwgMHgyMDg4LCAweDI0QjAsIDB4MjA4OSwgMHgyNEIxLA0KLSAgICAweDIwQUMsIDB4MjQ4QSwgMHgyMERELCAweDAzMEIsIDB4MjEwMCwgMHgyRTRGLCAweDIxMDMsIDB4MDJDNiwNCi0gICAgMHgyMTA1LCAweDJFNTMsIDB4MjEwOSwgMHgyMDcxLCAweDIxMEEsIDB4MjA3MCwgMHgyMTBGLCAweDJGM0MsDQotICAgIDB4MjExMywgMHgxRjU5LCAweDIxMTYsIDB4MURCQSwgMHgyMTIxLCAweDFGNzcsIDB4MjEyMiwgMHgwMEU0LA0KLSAgICAweDIxMjYsIDB4MjQ4QiwgMHgyMTJCLCAweDAzMDMsIDB4MjEzNSwgMHgyRjM5LCAweDIxNTMsIDB4MjQ5RiwNCi0gICAgMHgyMTU0LCAweDI0QTAsIDB4MjE1QiwgMHgyNDlCLCAweDIxNUMsIDB4MjQ5QywgMHgyMTVELCAweDI0OUQsDQotICAgIDB4MjE1RSwgMHgyNDlFLCAweDIxNjAsIDB4MUQ5NywgMHgyMTYxLCAweDFEOTgsIDB4MjE2MiwgMHgxRDk5LA0KLSAgICAweDIxNjMsIDB4MUQ5QSwgMHgyMTY0LCAweDFEOUIsIDB4MjE2NSwgMHgxRDlDLCAweDIxNjYsIDB4MUQ5RCwNCi0gICAgMHgyMTY3LCAweDFEOUUsIDB4MjE2OCwgMHgxRDlGLCAweDIxNjksIDB4MURBMCwgMHgyMTZBLCAweDIwMjEsDQotICAgIDB4MjE2QiwgMHgyMDIyLCAweDIxNzAsIDB4MUY5QywgMHgyMTcxLCAweDFGOUQsIDB4MjE3MiwgMHgxRjlFLA0KLSAgICAweDIxNzMsIDB4MUY5RiwgMHgyMTc0LCAweDFGQTAsIDB4MjE3NSwgMHgxRkExLCAweDIxNzYsIDB4MUZBMiwNCi0gICAgMHgyMTc3LCAweDFGQTMsIDB4MjE3OCwgMHgxRkE0LCAweDIxNzksIDB4MUZBNSwgMHgyMTdBLCAweDIwNkEsDQotICAgIDB4MjE3QiwgMHgyMDZCLCAweDIxN0YsIDB4MjA2RiwgMHgyMTkwLCAweDAyRTEsIDB4MjE5MSwgMHgwMkUyLA0KLSAgICAweDIxOTIsIDB4MDJFMCwgMHgyMTkzLCAweDAyRTMsIDB4MjE5NCwgMHgyRkE5LCAweDIxOTUsIDB4MkZCNywNCi0gICAgMHgyMTk2LCAweDJGQUMsIDB4MjE5NywgMHgyRkFELCAweDIxOTgsIDB4MkZBQSwgMHgyMTk5LCAweDJGQUIsDQotICAgIDB4MjFDNCwgMHgyMDc2LCAweDIxQzUsIDB4MjA3NywgMHgyMUM2LCAweDIwNzUsIDB4MjFDQywgMHgyRkFFLA0KLSAgICAweDIxRDAsIDB4MkZBOCwgMHgyMUQyLCAweDAyRjAsIDB4MjFENCwgMHgwMkYxLCAweDIxRTYsIDB4MUY0RCwNCi0gICAgMHgyMUU3LCAweDFGNEMsIDB4MjFFOCwgMHgxRjRFLCAweDIxRTksIDB4MUY0QiwgMHgyMjAwLCAweDAyRjIsDQotICAgIDB4MjIwMiwgMHgwMkY3LCAweDIyMDMsIDB4MDJGMywgMHgyMjA1LCAweDJGOTgsIDB4MjIwNywgMHgwMkY4LA0KLSAgICAweDIyMDgsIDB4MDJFNSwgMHgyMjBBLCAweDJGM0IsIDB4MjIwQiwgMHgwMkU2LCAweDIyMTEsIDB4MURDOSwNCi0gICAgMHgyMjEyLCAweDAyQjUsIDB4MjIxMywgMHgyRjU2LCAweDIyMUEsIDB4MDJGRCwgMHgyMjFELCAweDAyRkYsDQotICAgIDB4MjIxRSwgMHgwMkJGLCAweDIyMUYsIDB4MURDRCwgMHgyMjIwLCAweDAyRjQsIDB4MjIyNSwgMHgwMjlBLA0KLSAgICAweDIyMjcsIDB4MDJFRCwgMHgyMjI4LCAweDAyRUUsIDB4MjIyOSwgMHgwMkVDLCAweDIyMkEsIDB4MDJFQiwNCi0gICAgMHgyMjJCLCAweDAzMDEsIDB4MjIyQywgMHgwMzAyLCAweDIyMkQsIDB4MjAwMywgMHgyMjJFLCAweDFEQzgsDQotICAgIDB4MjIzNCwgMHgwMkMwLCAweDIyMzUsIDB4MDMwMCwgMHgyMjNDLCAweDAyOTksIDB4MjIzRCwgMHgwMkZFLA0KLSAgICAweDIyNDMsIDB4MkY1OCwgMHgyMjUyLCAweDAyRkEsIDB4MjI2MCwgMHgwMkJBLCAweDIyNjEsIDB4MDJGOSwNCi0gICAgMHgyMjY2LCAweDAyQkQsIDB4MjI2NywgMHgwMkJFLCAweDIyNkEsIDB4MDJGQiwgMHgyMjZCLCAweDAyRkMsDQotICAgIDB4MjI3MiwgMHgyRjU5LCAweDIyNzMsIDB4MkY1QSwgMHgyMjgyLCAweDAyRTksIDB4MjI4MywgMHgwMkVBLA0KLSAgICAweDIyODYsIDB4MDJFNywgMHgyMjg3LCAweDAyRTgsIDB4MjI5NSwgMHgyRjlDLCAweDIyOTYsIDB4MkY5QSwNCi0gICAgMHgyMjk3LCAweDJGOUQsIDB4MjI5OCwgMHgyRjlCLCAweDIyOUQsIDB4MkY5QSwgMHgyMjlFLCAweDJGOUUsDQotICAgIDB4MjJBMCwgMHgyRjk5LCAweDIyQTUsIDB4MDJGNSwgMHgyMkJGLCAweDFEQ0UsIDB4MjJFRSwgMHgxRUQ5LA0KLSAgICAweDIyRUYsIDB4MDI5QywgMHgyMzAwLCAweDJGOTgsIDB4MjMwNywgMHgyRkJCLCAweDIzMTIsIDB4MDJGNiwNCi0gICAgMHgyNDRBLCAweDJGNTQsIDB4MjQ2MCwgMHgxRDgzLCAweDI0NjEsIDB4MUQ4NCwgMHgyNDYyLCAweDFEODUsDQotICAgIDB4MjQ2MywgMHgxRDg2LCAweDI0NjQsIDB4MUQ4NywgMHgyNDY1LCAweDFEODgsIDB4MjQ2NiwgMHgxRDg5LA0KLSAgICAweDI0NjcsIDB4MUQ4QSwgMHgyNDY4LCAweDFEOEIsIDB4MjQ2OSwgMHgxRDhDLCAweDI0NkEsIDB4MUQ4RCwNCi0gICAgMHgyNDZCLCAweDFEOEUsIDB4MjQ2QywgMHgxRDhGLCAweDI0NkQsIDB4MUQ5MCwgMHgyNDZFLCAweDFEOTEsDQotICAgIDB4MjQ2RiwgMHgxRDkyLCAweDI0NzAsIDB4MUQ5MywgMHgyNDcxLCAweDFEOTQsIDB4MjQ3MiwgMHgxRDk1LA0KLSAgICAweDI0NzMsIDB4MUQ5NiwgMHgyNDc0LCAweDFGODcsIDB4MjQ3NSwgMHgxRjg4LCAweDI0NzYsIDB4MUY4OSwNCi0gICAgMHgyNDc3LCAweDFGOEEsIDB4MjQ3OCwgMHgxRjhCLCAweDI0NzksIDB4MUY4QywgMHgyNDdBLCAweDFGOEQsDQotICAgIDB4MjQ3QiwgMHgxRjhFLCAweDI0N0MsIDB4MUY4RiwgMHgyNDdELCAweDFGOTAsIDB4MjQ3RSwgMHgxRjkxLA0KLSAgICAweDI0N0YsIDB4MUY5MiwgMHgyNDgwLCAweDFGOTMsIDB4MjQ4MSwgMHgxRjk0LCAweDI0ODIsIDB4MUY5NSwNCi0gICAgMHgyNDgzLCAweDFGOTYsIDB4MjQ4NCwgMHgxRjk3LCAweDI0ODUsIDB4MUY5OCwgMHgyNDg2LCAweDFGOTksDQotICAgIDB4MjQ4NywgMHgxRjlBLCAweDI0ODgsIDB4MUY3RSwgMHgyNDg5LCAweDFGN0YsIDB4MjQ4QSwgMHgxRjgwLA0KLSAgICAweDI0OEIsIDB4MUY4MSwgMHgyNDhDLCAweDFGODIsIDB4MjQ4RCwgMHgxRjgzLCAweDI0OEUsIDB4MUY4NCwNCi0gICAgMHgyNDhGLCAweDFGODUsIDB4MjQ5MCwgMHgxRjg2LCAweDI0OUMsIDB4MUZCMCwgMHgyNDlELCAweDFGQjEsDQotICAgIDB4MjQ5RSwgMHgxRkIyLCAweDI0OUYsIDB4MUZCMywgMHgyNEEwLCAweDFGQjQsIDB4MjRBMSwgMHgxRkI1LA0KLSAgICAweDI0QTIsIDB4MUZCNiwgMHgyNEEzLCAweDFGQjcsIDB4MjRBNCwgMHgxRkI4LCAweDI0QTUsIDB4MUZCOSwNCi0gICAgMHgyNEE2LCAweDFGQkEsIDB4MjRBNywgMHgxRkJCLCAweDI0QTgsIDB4MUZCQywgMHgyNEE5LCAweDFGQkQsDQotICAgIDB4MjRBQSwgMHgxRkJFLCAweDI0QUIsIDB4MUZCRiwgMHgyNEFDLCAweDFGQzAsIDB4MjRBRCwgMHgxRkMxLA0KLSAgICAweDI0QUUsIDB4MUZDMiwgMHgyNEFGLCAweDFGQzMsIDB4MjRCMCwgMHgxRkM0LCAweDI0QjEsIDB4MUZDNSwNCi0gICAgMHgyNEIyLCAweDFGQzYsIDB4MjRCMywgMHgxRkM3LCAweDI0QjQsIDB4MUZDOCwgMHgyNEI1LCAweDFGQzksDQotICAgIDB4MjRCNiwgMHgyODYzLCAweDI0QjcsIDB4Mjg2NCwgMHgyNEI4LCAweDI4NjUsIDB4MjRCOSwgMHgyODY2LA0KLSAgICAweDI0QkEsIDB4Mjg2NywgMHgyNEJCLCAweDI4NjgsIDB4MjRCQywgMHgyODY5LCAweDI0QkQsIDB4Mjg2QSwNCi0gICAgMHgyNEJFLCAweDI4NkIsIDB4MjRCRiwgMHgyODZDLCAweDI0QzAsIDB4Mjg2RCwgMHgyNEMxLCAweDI4NkUsDQotICAgIDB4MjRDMiwgMHgyODZGLCAweDI0QzMsIDB4Mjg3MCwgMHgyNEM0LCAweDI4NzEsIDB4MjRDNSwgMHgyODcyLA0KLSAgICAweDI0QzYsIDB4Mjg3MywgMHgyNEM3LCAweDI4NzQsIDB4MjRDOCwgMHgyODc1LCAweDI0QzksIDB4Mjg3NiwNCi0gICAgMHgyNENBLCAweDI4NzcsIDB4MjRDQiwgMHgyODc4LCAweDI0Q0MsIDB4Mjg3OSwgMHgyNENELCAweDI4N0EsDQotICAgIDB4MjRDRSwgMHgyODdCLCAweDI0Q0YsIDB4Mjg3QywgMHgyNEQwLCAweDI4NDksIDB4MjREMSwgMHgyODRBLA0KLSAgICAweDI0RDIsIDB4Mjg0QiwgMHgyNEQzLCAweDI4NEMsIDB4MjRENCwgMHgyODRELCAweDI0RDUsIDB4Mjg0RSwNCi0gICAgMHgyNEQ2LCAweDI4NEYsIDB4MjRENywgMHgyODUwLCAweDI0RDgsIDB4Mjg1MSwgMHgyNEQ5LCAweDI4NTIsDQotICAgIDB4MjREQSwgMHgyODUzLCAweDI0REIsIDB4Mjg1NCwgMHgyNERDLCAweDI4NTUsIDB4MjRERCwgMHgyODU2LA0KLSAgICAweDI0REUsIDB4Mjg1NywgMHgyNERGLCAweDI4NTgsIDB4MjRFMCwgMHgyODU5LCAweDI0RTEsIDB4Mjg1QSwNCi0gICAgMHgyNEUyLCAweDI4NUIsIDB4MjRFMywgMHgyODVDLCAweDI0RTQsIDB4Mjg1RCwgMHgyNEU1LCAweDI4NUUsDQotICAgIDB4MjRFNiwgMHgyODVGLCAweDI0RTcsIDB4Mjg2MCwgMHgyNEU4LCAweDI4NjEsIDB4MjRFOSwgMHgyODYyLA0KLSAgICAweDI0RUEsIDB4MjAyMCwgMHgyNTAwLCAweDFEMzcsIDB4MjUwMSwgMHgxRDM4LCAweDI1MDIsIDB4MUQzOSwNCi0gICAgMHgyNTAzLCAweDFEM0EsIDB4MjUwNCwgMHgxRDNCLCAweDI1MDUsIDB4MUQzQywgMHgyNTA2LCAweDFEM0QsDQotICAgIDB4MjUwNywgMHgxRDNFLCAweDI1MDgsIDB4MUQzRiwgMHgyNTA5LCAweDFENDAsIDB4MjUwQSwgMHgxRDQxLA0KLSAgICAweDI1MEIsIDB4MUQ0MiwgMHgyNTBDLCAweDFENDMsIDB4MjUwRCwgMHgxRDQ0LCAweDI1MEUsIDB4MUQ0NSwNCi0gICAgMHgyNTBGLCAweDFENDYsIDB4MjUxMCwgMHgxRDQ3LCAweDI1MTEsIDB4MUQ0OCwgMHgyNTEyLCAweDFENDksDQotICAgIDB4MjUxMywgMHgxRDRBLCAweDI1MTQsIDB4MUQ0QiwgMHgyNTE1LCAweDFENEMsIDB4MjUxNiwgMHgxRDRELA0KLSAgICAweDI1MTcsIDB4MUQ0RSwgMHgyNTE4LCAweDFENEYsIDB4MjUxOSwgMHgxRDUwLCAweDI1MUEsIDB4MUQ1MSwNCi0gICAgMHgyNTFCLCAweDFENTIsIDB4MjUxQywgMHgxRDUzLCAweDI1MUQsIDB4MUQ1NCwgMHgyNTFFLCAweDFENTUsDQotICAgIDB4MjUxRiwgMHgxRDU2LCAweDI1MjAsIDB4MUQ1NywgMHgyNTIxLCAweDFENTgsIDB4MjUyMiwgMHgxRDU5LA0KLSAgICAweDI1MjMsIDB4MUQ1QSwgMHgyNTI0LCAweDFENUIsIDB4MjUyNSwgMHgxRDVDLCAweDI1MjYsIDB4MUQ1RCwNCi0gICAgMHgyNTI3LCAweDFENUUsIDB4MjUyOCwgMHgxRDVGLCAweDI1MjksIDB4MUQ2MCwgMHgyNTJBLCAweDFENjEsDQotICAgIDB4MjUyQiwgMHgxRDYyLCAweDI1MkMsIDB4MUQ2MywgMHgyNTJELCAweDFENjQsIDB4MjUyRSwgMHgxRDY1LA0KLSAgICAweDI1MkYsIDB4MUQ2NiwgMHgyNTMwLCAweDFENjcsIDB4MjUzMSwgMHgxRDY4LCAweDI1MzIsIDB4MUQ2OSwNCi0gICAgMHgyNTMzLCAweDFENkEsIDB4MjUzNCwgMHgxRDZCLCAweDI1MzUsIDB4MUQ2QywgMHgyNTM2LCAweDFENkQsDQotICAgIDB4MjUzNywgMHgxRDZFLCAweDI1MzgsIDB4MUQ2RiwgMHgyNTM5LCAweDFENzAsIDB4MjUzQSwgMHgxRDcxLA0KLSAgICAweDI1M0IsIDB4MUQ3MiwgMHgyNTNDLCAweDFENzMsIDB4MjUzRCwgMHgxRDc0LCAweDI1M0UsIDB4MUQ3NSwNCi0gICAgMHgyNTNGLCAweDFENzYsIDB4MjU0MCwgMHgxRDc3LCAweDI1NDEsIDB4MUQ3OCwgMHgyNTQyLCAweDFENzksDQotICAgIDB4MjU0MywgMHgxRDdBLCAweDI1NDQsIDB4MUQ3QiwgMHgyNTQ1LCAweDFEN0MsIDB4MjU0NiwgMHgxRDdELA0KLSAgICAweDI1NDcsIDB4MUQ3RSwgMHgyNTQ4LCAweDFEN0YsIDB4MjU0OSwgMHgxRDgwLCAweDI1NEEsIDB4MUQ4MSwNCi0gICAgMHgyNTRCLCAweDFEODIsIDB4MjU1MCwgMHgyMDNCLCAweDI1NUUsIDB4MjAzQywgMHgyNTYxLCAweDIwM0UsDQotICAgIDB4MjU2QSwgMHgyMDNELCAweDI1NkQsIDB4MjAzNywgMHgyNTZFLCAweDIwMzgsIDB4MjU2RiwgMHgyMDNBLA0KLSAgICAweDI1NzAsIDB4MjAzOSwgMHgyNTcxLCAweDIwNDUsIDB4MjU3MiwgMHgyMDQ2LCAweDI1NzMsIDB4MjA0NywNCi0gICAgMHgyNTgxLCAweDIwMjYsIDB4MjU4MiwgMHgyMDI3LCAweDI1ODMsIDB4MjAyOCwgMHgyNTg0LCAweDIwMjksDQotICAgIDB4MjU4NSwgMHgyMDJBLCAweDI1ODYsIDB4MjAyQiwgMHgyNTg3LCAweDIwMkMsIDB4MjU4OCwgMHgyMDJELA0KLSAgICAweDI1ODksIDB4MjAzNCwgMHgyNThBLCAweDIwMzMsIDB4MjU4QiwgMHgyMDMyLCAweDI1OEMsIDB4MjAzMSwNCi0gICAgMHgyNThELCAweDIwMzAsIDB4MjU4RSwgMHgyMDJGLCAweDI1OEYsIDB4MjAyRSwgMHgyNTk0LCAweDIwMzUsDQotICAgIDB4MjU5NSwgMHgyMDM2LCAweDI1QTAsIDB4MDJEOSwgMHgyNUExLCAweDAyRDgsIDB4MjVBMiwgMHgxRjRGLA0KLSAgICAweDI1QUEsIDB4MkZDRiwgMHgyNUFCLCAweDJGQ0QsIDB4MjVCMiwgMHgwMkRCLCAweDI1QjMsIDB4MDJEQSwNCi0gICAgMHgyNUI2LCAweDJGQTMsIDB4MjVCNywgMHgxRjRBLCAweDI1QkMsIDB4MDJERCwgMHgyNUJELCAweDAyREMsDQotICAgIDB4MjVDMCwgMHgyRkEyLCAweDI1QzEsIDB4MUY0OSwgMHgyNUM2LCAweDAyRDcsIDB4MjVDNywgMHgwMkQ2LA0KLSAgICAweDI1QzksIDB4MjAxMiwgMHgyNUNCLCAweDAyRDMsIDB4MjVDQywgMHgyOTA2LCAweDI1Q0UsIDB4MDJENSwNCi0gICAgMHgyNUNGLCAweDAyRDQsIDB4MjVFMiwgMHgyMDNGLCAweDI1RTMsIDB4MjA0MCwgMHgyNUU0LCAweDIwNDIsDQotICAgIDB4MjVFNSwgMHgyMDQxLCAweDI1RTYsIDB4MkZERSwgMHgyNUVGLCAweDAzMEIsIDB4MjYwMCwgMHgyMDE3LA0KLSAgICAweDI2MDEsIDB4MjAxOCwgMHgyNjAyLCAweDIwMTksIDB4MjYwMywgMHgyMDFBLCAweDI2MDUsIDB4MDJEMiwNCi0gICAgMHgyNjA2LCAweDAyRDEsIDB4MjYwRSwgMHgxRjc4LCAweDI2MTIsIDB4MkY5OSwgMHgyNjFDLCAweDIwMUMsDQotICAgIDB4MjYxRCwgMHgyMDFELCAweDI2MUUsIDB4MjAxQiwgMHgyNjFGLCAweDIwMUUsIDB4MjY0MCwgMHgwMkMyLA0KLSAgICAweDI2NDIsIDB4MDJDMSwgMHgyNjYwLCAweDIwMTMsIDB4MjY2MSwgMHgxRjUxLCAweDI2NjIsIDB4MUY1MywNCi0gICAgMHgyNjYzLCAweDIwMTUsIDB4MjY2NCwgMHgxRjUyLCAweDI2NjUsIDB4MjAxNCwgMHgyNjY2LCAweDIwMTYsDQotICAgIDB4MjY2NywgMHgxRjUwLCAweDI2NjgsIDB4MkY0MiwgMHgyNjY5LCAweDJGNDMsIDB4MjY2QSwgMHgwMzA3LA0KLSAgICAweDI2NkMsIDB4MkY0NCwgMHgyNjZELCAweDAzMDYsIDB4MjY2RiwgMHgwMzA1LCAweDI3MDIsIDB4MkY5MCwNCi0gICAgMHgyNzFBLCAweDJGRDEsIDB4Mjc1NiwgMHgyRkUzLCAweDI3NzYsIDB4MjA1RSwgMHgyNzc3LCAweDIwNUYsDQotICAgIDB4Mjc3OCwgMHgyMDYwLCAweDI3NzksIDB4MjA2MSwgMHgyNzdBLCAweDIwNjIsIDB4Mjc3QiwgMHgyMDYzLA0KLSAgICAweDI3N0MsIDB4MjA2NCwgMHgyNzdELCAweDIwNjUsIDB4Mjc3RSwgMHgyMDY2LCAweDI3QTEsIDB4MjAwRSwNCi0gICAgMHgyRTgzLCAweDM3RTEsIDB4MkU4NSwgMHgzNjIwLCAweDJFODcsIDB4MzcxOSwgMHgyRTg5LCAweDM4MTQsDQotICAgIDB4MkU4QiwgMHgzNzFFLCAweDJFOEMsIDB4MzYwOSwgMHgyRThELCAweDM2MEEsIDB4MkU4RSwgMHgxMDcxLA0KLSAgICAweDJFOEYsIDB4Mzg4QywgMHgyRTkwLCAweDEyMjYsIDB4MkU5MiwgMHgwRUIyLCAweDJFOTMsIDB4MTI4MywNCi0gICAgMHgyRTk0LCAweDEyQUIsIDB4MkU5NSwgMHgzQzFGLCAweDJFOTYsIDB4MzhDMiwgMHgyRTk3LCAweDM2MUMsDQotICAgIDB4MkU5OCwgMHgzOEUxLCAweDJFOTksIDB4MTNDMywgMHgyRTlCLCAweDEzRTEsIDB4MkU5RiwgMHgwRTNDLA0KLSAgICAweDJFQTAsIDB4MEVCRCwgMHgyRUExLCAweDM5NjEsIDB4MkVBMiwgMHgzOTYyLCAweDJFQTMsIDB4Mzk5RCwNCi0gICAgMHgyRUE0LCAweDNDMjYsIDB4MkVBNiwgMHgzNzRELCAweDJFQTgsIDB4MzlCQywgMHgyRUE5LCAweDM1QTEsDQotICAgIDB4MkVBQSwgMHgzNkFCLCAweDJFQUIsIDB4M0E5NywgMHgyRUFDLCAweDA4RDQsIDB4MkVBRCwgMHgzQTM5LA0KLSAgICAweDJFQUUsIDB4MzY2MiwgMHgyRUIxLCAweDNBOTgsIDB4MkVCMiwgMHgzQTk3LCAweDJFQjMsIDB4Mzc2RCwNCi0gICAgMHgyRUI3LCAweDM2RkUsIDB4MkVCOSwgMHgzNzEzLCAweDJFQkMsIDB4MzVCMywgMHgyRUJELCAweDM1NEUsDQotICAgIDB4MkVCRSwgMHgzNzc1LCAweDJFQkYsIDB4Mzc3NiwgMHgyRUMwLCAweDM3NzcsIDB4MkVDMSwgMHgwNzhCLA0KLSAgICAweDJFQzIsIDB4M0IwQSwgMHgyRUMzLCAweDM2MkUsIDB4MkVDNCwgMHgwQTYyLCAweDJFQzYsIDB4MzU3MiwNCi0gICAgMHgyRUNBLCAweDM2NEEsIDB4MkVDQywgMHgzQzJCLCAweDJFQ0QsIDB4M0I1MCwgMHgyRUNGLCAweDNCOUUsDQotICAgIDB4MkVEMSwgMHgwQkQ1LCAweDJFRDIsIDB4M0I5NywgMHgyRUQ2LCAweDNCOUUsIDB4MkVENywgMHgzNTRELA0KLSAgICAweDJFRDgsIDB4MEE2OCwgMHgyRURELCAweDM2MTcsIDB4MkVERSwgMHgzNjE5LCAweDJFREYsIDB4MzYxOCwNCi0gICAgMHgyRUU0LCAweDA2NEUsIDB4MkVFOCwgMHgwRDM0LCAweDJFRTksIDB4MDUyQiwgMHgyRUVCLCAweDBBNkEsDQotICAgIDB4MkVFRCwgMHgwOEMzLCAweDJFRUYsIDB4MEY3RCwgMHgyRUYyLCAweDA2NEYsIDB4MkYwMCwgMHgwNEIwLA0KLSAgICAweDJGMDEsIDB4MjBCMywgMHgyRjAyLCAweDBGRkYsIDB4MkYwMywgMHgxMDAxLCAweDJGMDQsIDB4MDUzNSwNCi0gICAgMHgyRjA1LCAweDEwMDYsIDB4MkYwNiwgMHgwQ0NCLCAweDJGMDcsIDB4MTAwRSwgMHgyRjA4LCAweDBBMTMsDQotICAgIDB4MkYwOSwgMHgxMDcwLCAweDJGMEEsIDB4MENENiwgMHgyRjBCLCAweDBENDAsIDB4MkYwQywgMHgxMDdCLA0KLSAgICAweDJGMEQsIDB4MTA4MywgMHgyRjBFLCAweDEwODksIDB4MkYwRiwgMHgxMDkzLCAweDJGMTAsIDB4MTA5OCwNCi0gICAgMHgyRjExLCAweDBDNUIsIDB4MkYxMiwgMHgwRjk3LCAweDJGMTMsIDB4MTBDNiwgMHgyRjE0LCAweDEwQ0QsDQotICAgIDB4MkYxNSwgMHgxMENFLCAweDJGMTYsIDB4MTBEMywgMHgyRjE3LCAweDA5NDcsIDB4MkYxOCwgMHgwRTdDLA0KLSAgICAweDJGMTksIDB4MTBEQywgMHgyRjFBLCAweDEwRTEsIDB4MkYxQiwgMHgxMEU4LCAweDJGMUMsIDB4MEVBMiwNCi0gICAgMHgyRjFELCAweDA3QjEsIDB4MkYxRSwgMHgxMTZCLCAweDJGMUYsIDB4MEM1NCwgMHgyRjIwLCAweDA4OUMsDQotICAgIDB4MkYyMSwgMHgxMUJBLCAweDJGMjIsIDB4MTFCQiwgMHgyRjIzLCAweDBGMjYsIDB4MkYyNCwgMHgwQjQ3LA0KLSAgICAweDJGMjUsIDB4MDk4MSwgMHgyRjI2LCAweDA4QTAsIDB4MkYyNywgMHgxMjBFLCAweDJGMjgsIDB4MEE0NywNCi0gICAgMHgyRjI5LCAweDA5OTYsIDB4MkYyQSwgMHgxMjI2LCAweDJGMkIsIDB4MTIyOCwgMHgyRjJDLCAweDEyMzIsDQotICAgIDB4MkYyRCwgMHgwODgxLCAweDJGMkUsIDB4MTI2QywgMHgyRjJGLCAweDA3QkIsIDB4MkYzMCwgMHgwNzdFLA0KLSAgICAweDJGMzEsIDB4MDZDQSwgMHgyRjMyLCAweDA1RUYsIDB4MkYzMywgMHgxMjgzLCAweDJGMzQsIDB4MTI4NSwNCi0gICAgMHgyRjM1LCAweDEyOTksIDB4MkYzNiwgMHgxMjlCLCAweDJGMzcsIDB4MTJBMCwgMHgyRjM4LCAweDA2NzcsDQotICAgIDB4MkYzOSwgMHgzOEI5LCAweDJGM0EsIDB4MTJBRiwgMHgyRjNCLCAweDEyQjEsIDB4MkYzQywgMHgwOUZBLA0KLSAgICAweDJGM0QsIDB4MTM0MiwgMHgyRjNFLCAweDA3ODEsIDB4MkYzRiwgMHgwOTE2LCAweDJGNDAsIDB4MDhBNywNCi0gICAgMHgyRjQxLCAweDEzQzIsIDB4MkY0MiwgMHgwRTA4LCAweDJGNDMsIDB4MEM0NywgMHgyRjQ0LCAweDA2Q0MsDQotICAgIDB4MkY0NSwgMHgwRTRELCAweDJGNDYsIDB4MTNFMCwgMHgyRjQ3LCAweDBDRDQsIDB4MkY0OCwgMHgxNDBDLA0KLSAgICAweDJGNDksIDB4MDc0NCwgMHgyRjRBLCAweDBFRTYsIDB4MkY0QiwgMHgwNzNELCAweDJGNEMsIDB4MDhBRCwNCi0gICAgMHgyRjRELCAweDE0RTUsIDB4MkY0RSwgMHgxNEY0LCAweDJGNEYsIDB4MTRGOCwgMHgyRjUwLCAweDBEN0EsDQotICAgIDB4MkY1MSwgMHgwRURGLCAweDJGNTIsIDB4MDhBRiwgMHgyRjUzLCAweDE1MDIsIDB4MkY1NCwgMHgwQTJCLA0KLSAgICAweDJGNTUsIDB4MDU1MCwgMHgyRjU2LCAweDBCRkEsIDB4MkY1NywgMHgwREQ1LCAweDJGNTgsIDB4MTVFNCwNCi0gICAgMHgyRjU5LCAweDE1RTYsIDB4MkY1QSwgMHgwRTIyLCAweDJGNUIsIDB4MDU2NywgMHgyRjVDLCAweDA2ODcsDQotICAgIDB4MkY1RCwgMHgwNzU4LCAweDJGNUUsIDB4MDc3MCwgMHgyRjVGLCAweDA2QzQsIDB4MkY2MCwgMHgwNERELA0KLSAgICAweDJGNjEsIDB4MDVFMCwgMHgyRjYyLCAweDA2MDEsIDB4MkY2MywgMHgwQTVDLCAweDJGNjQsIDB4MEYzQiwNCi0gICAgMHgyRjY1LCAweDBDM0UsIDB4MkY2NiwgMHgwRDk3LCAweDJGNjcsIDB4M0EwMCwgMHgyRjY4LCAweDE2OTcsDQotICAgIDB4MkY2OSwgMHgwRDI4LCAweDJGNkEsIDB4MEQ3RCwgMHgyRjZCLCAweDA4N0MsIDB4MkY2QywgMHgwRUU4LA0KLSAgICAweDJGNkQsIDB4MEVDMywgMHgyRjZFLCAweDBFRkMsIDB4MkY2RiwgMHgwQTc0LCAweDJGNzAsIDB4MDhENCwNCi0gICAgMHgyRjcxLCAweDNBNDEsIDB4MkY3MiwgMHgwNTUzLCAweDJGNzMsIDB4MDc0MCwgMHgyRjc0LCAweDBGNzEsDQotICAgIDB4MkY3NSwgMHgwQjlCLCAweDJGNzYsIDB4MEUxNiwgMHgyRjc3LCAweDA4QjMsIDB4MkY3OCwgMHgwNjA4LA0KLSAgICAweDJGNzksIDB4MTgxMywgMHgyRjdBLCAweDBGM0QsIDB4MkY3QiwgMHgwNENCLCAweDJGN0MsIDB4MEZERCwNCi0gICAgMHgyRjdELCAweDA4RDUsIDB4MkY3RSwgMHgxODNELCAweDJGN0YsIDB4MDhENiwgMHgyRjgwLCAweDE4NTMsDQotICAgIDB4MkY4MSwgMHgwQ0QxLCAweDJGODIsIDB4MEEwOSwgMHgyRjgzLCAweDA4RDcsIDB4MkY4NCwgMHgwOEI4LA0KLSAgICAweDJGODUsIDB4MDREMywgMHgyRjg2LCAweDBBODksIDB4MkY4NywgMHgwQUE2LCAweDJGODgsIDB4MDkzOCwNCi0gICAgMHgyRjg5LCAweDA4MjEsIDB4MkY4QSwgMHgwOUVELCAweDJGOEIsIDB4MThCMiwgMHgyRjhDLCAweDE5NEYsDQotICAgIDB4MkY4RCwgMHgwQkFDLCAweDJGOEUsIDB4MDc0MiwgMHgyRjhGLCAweDA3RTYsIDB4MkY5MCwgMHgwNEE1LA0KLSAgICAweDJGOTEsIDB4MTlFQiwgMHgyRjkyLCAweDA3NUYsIDB4MkY5MywgMHgwNUFGLCAweDJGOTQsIDB4MDc3NCwNCi0gICAgMHgyRjk1LCAweDBCNjksIDB4MkY5NiwgMHgwQzdFLCAweDJGOTcsIDB4MUE1NiwgMHgyRjk4LCAweDFBNTksDQotICAgIDB4MkY5OSwgMHgwNThCLCAweDJGOUEsIDB4MEE3QSwgMHgyRjlCLCAweDBBRjgsIDB4MkY5QywgMHgwQjBELA0KLSAgICAweDJGOUQsIDB4MEEwRSwgMHgyRjlFLCAweDA5MDIsIDB4MkY5RiwgMHgwQTBGLCAweDJGQTAsIDB4MEI2MiwNCi0gICAgMHgyRkExLCAweDNCNEYsIDB4MkZBMiwgMHgwRjIyLCAweDJGQTMsIDB4MENBQiwgMHgyRkE0LCAweDBENjQsDQotICAgIDB4MkZBNSwgMHgwRjZDLCAweDJGQTYsIDB4MDZEQSwgMHgyRkE3LCAweDBCRDUsIDB4MkZBOCwgMHgwRUYzLA0KLSAgICAweDJGQTksIDB4MERERSwgMHgyRkFBLCAweDFCQzksIDB4MkZBQiwgMHgxQkNCLCAweDJGQUMsIDB4MDRDRCwNCi0gICAgMHgyRkFELCAweDIxRjcsIDB4MkZBRSwgMHgwRDg3LCAweDJGQUYsIDB4MEVEOCwgMHgyRkIwLCAweDA1QjUsDQotICAgIDB4MkZCMSwgMHgxQzAzLCAweDJGQjIsIDB4MUMwNSwgMHgyRkIzLCAweDA1M0IsIDB4MkZCNCwgMHgwRTE3LA0KLSAgICAweDJGQjUsIDB4MERFOSwgMHgyRkI2LCAweDBEODgsIDB4MkZCNywgMHgwOUVGLCAweDJGQjgsIDB4MDkxRiwNCi0gICAgMHgyRkI5LCAweDA3RjMsIDB4MkZCQSwgMHgwRDA1LCAweDJGQkIsIDB4MDgwRSwgMHgyRkJDLCAweDA3RjQsDQotICAgIDB4MkZCRCwgMHgxQzZDLCAweDJGQkUsIDB4MUM3RCwgMHgyRkJGLCAweDFDODMsIDB4MkZDMCwgMHgxQzg0LA0KLSAgICAweDJGQzEsIDB4MDY0RSwgMHgyRkMyLCAweDA2OTUsIDB4MkZDMywgMHgwQkQ3LCAweDJGQzQsIDB4MUNGNiwNCi0gICAgMHgyRkM1LCAweDA4REIsIDB4MkZDNiwgMHgxRDAxLCAweDJGQzcsIDB4MEU5MSwgMHgyRkM4LCAweDM0MEIsDQotICAgIDB4MkZDOSwgMHgwNjZBLCAweDJGQ0EsIDB4MDgwNywgMHgyRkNCLCAweDFEMTYsIDB4MkZDQywgMHgxRDE5LA0KLSAgICAweDJGQ0QsIDB4MEMxRSwgMHgyRkNFLCAweDA3OTEsIDB4MkZDRiwgMHgwQUNGLCAweDJGRDAsIDB4MEQ5MywNCi0gICAgMHgyRkQxLCAweDFEMjEsIDB4MkZEMiwgMHgxRDIyLCAweDJGRDMsIDB4MEY3RSwgMHgyRkQ0LCAweDFEMzAsDQotICAgIDB4MkZENSwgMHgxRDMxLCAweDMwMDAsIDB4MDI3OSwgMHgzMDAxLCAweDAyN0EsIDB4MzAwMiwgMHgwMjdCLA0KLSAgICAweDMwMDMsIDB4MDI4RiwgMHgzMDA0LCAweDIwNzQsIDB4MzAwNSwgMHgwMjkxLCAweDMwMDYsIDB4MDI5MiwNCi0gICAgMHgzMDA3LCAweDAyOTMsIDB4MzAwOCwgMHgwMkFBLCAweDMwMDksIDB4MDJBQiwgMHgzMDBBLCAweDAyQUMsDQotICAgIDB4MzAwQiwgMHgwMkFELCAweDMwMEMsIDB4MDJBRSwgMHgzMDBELCAweDAyQUYsIDB4MzAwRSwgMHgwMkIwLA0KLSAgICAweDMwMEYsIDB4MDJCMSwgMHgzMDEwLCAweDAyQjIsIDB4MzAxMSwgMHgwMkIzLCAweDMwMTIsIDB4MDJERiwNCi0gICAgMHgzMDEzLCAweDAyRTQsIDB4MzAxNCwgMHgwMkE0LCAweDMwMTUsIDB4MDJBNSwgMHgzMDFDLCAweDAyOTksDQotICAgIDB4MzAxRCwgMHgxREI4LCAweDMwMUYsIDB4MURCOSwgMHgzMDIwLCAweDFGN0EsIDB4MzAzMCwgMHgyRkJBLA0KLSAgICAweDMwMzMsIDB4MkY0QywgMHgzMDM0LCAweDJGNEQsIDB4MzAzNSwgMHgyRjRFLCAweDMwMzYsIDB4MUY3OSwNCi0gICAgMHgzMDQxLCAweDAzNEEsIDB4MzA0MiwgMHgwMzRCLCAweDMwNDMsIDB4MDM0QywgMHgzMDQ0LCAweDAzNEQsDQotICAgIDB4MzA0NSwgMHgwMzRFLCAweDMwNDYsIDB4MDM0RiwgMHgzMDQ3LCAweDAzNTAsIDB4MzA0OCwgMHgwMzUxLA0KLSAgICAweDMwNDksIDB4MDM1MiwgMHgzMDRBLCAweDAzNTMsIDB4MzA0QiwgMHgwMzU0LCAweDMwNEMsIDB4MDM1NSwNCi0gICAgMHgzMDRELCAweDAzNTYsIDB4MzA0RSwgMHgwMzU3LCAweDMwNEYsIDB4MDM1OCwgMHgzMDUwLCAweDAzNTksDQotICAgIDB4MzA1MSwgMHgwMzVBLCAweDMwNTIsIDB4MDM1QiwgMHgzMDUzLCAweDAzNUMsIDB4MzA1NCwgMHgwMzVELA0KLSAgICAweDMwNTUsIDB4MDM1RSwgMHgzMDU2LCAweDAzNUYsIDB4MzA1NywgMHgwMzYwLCAweDMwNTgsIDB4MDM2MSwNCi0gICAgMHgzMDU5LCAweDAzNjIsIDB4MzA1QSwgMHgwMzYzLCAweDMwNUIsIDB4MDM2NCwgMHgzMDVDLCAweDAzNjUsDQotICAgIDB4MzA1RCwgMHgwMzY2LCAweDMwNUUsIDB4MDM2NywgMHgzMDVGLCAweDAzNjgsIDB4MzA2MCwgMHgwMzY5LA0KLSAgICAweDMwNjEsIDB4MDM2QSwgMHgzMDYyLCAweDAzNkIsIDB4MzA2MywgMHgwMzZDLCAweDMwNjQsIDB4MDM2RCwNCi0gICAgMHgzMDY1LCAweDAzNkUsIDB4MzA2NiwgMHgwMzZGLCAweDMwNjcsIDB4MDM3MCwgMHgzMDY4LCAweDAzNzEsDQotICAgIDB4MzA2OSwgMHgwMzcyLCAweDMwNkEsIDB4MDM3MywgMHgzMDZCLCAweDAzNzQsIDB4MzA2QywgMHgwMzc1LA0KLSAgICAweDMwNkQsIDB4MDM3NiwgMHgzMDZFLCAweDAzNzcsIDB4MzA2RiwgMHgwMzc4LCAweDMwNzAsIDB4MDM3OSwNCi0gICAgMHgzMDcxLCAweDAzN0EsIDB4MzA3MiwgMHgwMzdCLCAweDMwNzMsIDB4MDM3QywgMHgzMDc0LCAweDAzN0QsDQotICAgIDB4MzA3NSwgMHgwMzdFLCAweDMwNzYsIDB4MDM3RiwgMHgzMDc3LCAweDAzODAsIDB4MzA3OCwgMHgwMzgxLA0KLSAgICAweDMwNzksIDB4MDM4MiwgMHgzMDdBLCAweDAzODMsIDB4MzA3QiwgMHgwMzg0LCAweDMwN0MsIDB4MDM4NSwNCi0gICAgMHgzMDdELCAweDAzODYsIDB4MzA3RSwgMHgwMzg3LCAweDMwN0YsIDB4MDM4OCwgMHgzMDgwLCAweDAzODksDQotICAgIDB4MzA4MSwgMHgwMzhBLCAweDMwODIsIDB4MDM4QiwgMHgzMDgzLCAweDAzOEMsIDB4MzA4NCwgMHgwMzhELA0KLSAgICAweDMwODUsIDB4MDM4RSwgMHgzMDg2LCAweDAzOEYsIDB4MzA4NywgMHgwMzkwLCAweDMwODgsIDB4MDM5MSwNCi0gICAgMHgzMDg5LCAweDAzOTIsIDB4MzA4QSwgMHgwMzkzLCAweDMwOEIsIDB4MDM5NCwgMHgzMDhDLCAweDAzOTUsDQotICAgIDB4MzA4RCwgMHgwMzk2LCAweDMwOEUsIDB4MDM5NywgMHgzMDhGLCAweDAzOTgsIDB4MzA5MCwgMHgwMzk5LA0KLSAgICAweDMwOTEsIDB4MDM5QSwgMHgzMDkyLCAweDAzOUIsIDB4MzA5MywgMHgwMzlDLCAweDMwOTQsIDB4MUYxNiwNCi0gICAgMHgzMDlCLCAweDAyODMsIDB4MzA5QywgMHgwMjg0LCAweDMwOUQsIDB4MDI4RCwgMHgzMDlFLCAweDAyOEUsDQotICAgIDB4MzBBMSwgMHgwMzlELCAweDMwQTIsIDB4MDM5RSwgMHgzMEEzLCAweDAzOUYsIDB4MzBBNCwgMHgwM0EwLA0KLSAgICAweDMwQTUsIDB4MDNBMSwgMHgzMEE2LCAweDAzQTIsIDB4MzBBNywgMHgwM0EzLCAweDMwQTgsIDB4MDNBNCwNCi0gICAgMHgzMEE5LCAweDAzQTUsIDB4MzBBQSwgMHgwM0E2LCAweDMwQUIsIDB4MDNBNywgMHgzMEFDLCAweDAzQTgsDQotICAgIDB4MzBBRCwgMHgwM0E5LCAweDMwQUUsIDB4MDNBQSwgMHgzMEFGLCAweDAzQUIsIDB4MzBCMCwgMHgwM0FDLA0KLSAgICAweDMwQjEsIDB4MDNBRCwgMHgzMEIyLCAweDAzQUUsIDB4MzBCMywgMHgwM0FGLCAweDMwQjQsIDB4MDNCMCwNCi0gICAgMHgzMEI1LCAweDAzQjEsIDB4MzBCNiwgMHgwM0IyLCAweDMwQjcsIDB4MDNCMywgMHgzMEI4LCAweDAzQjQsDQotICAgIDB4MzBCOSwgMHgwM0I1LCAweDMwQkEsIDB4MDNCNiwgMHgzMEJCLCAweDAzQjcsIDB4MzBCQywgMHgwM0I4LA0KLSAgICAweDMwQkQsIDB4MDNCOSwgMHgzMEJFLCAweDAzQkEsIDB4MzBCRiwgMHgwM0JCLCAweDMwQzAsIDB4MDNCQywNCi0gICAgMHgzMEMxLCAweDAzQkQsIDB4MzBDMiwgMHgwM0JFLCAweDMwQzMsIDB4MDNCRiwgMHgzMEM0LCAweDAzQzAsDQotICAgIDB4MzBDNSwgMHgwM0MxLCAweDMwQzYsIDB4MDNDMiwgMHgzMEM3LCAweDAzQzMsIDB4MzBDOCwgMHgwM0M0LA0KLSAgICAweDMwQzksIDB4MDNDNSwgMHgzMENBLCAweDAzQzYsIDB4MzBDQiwgMHgwM0M3LCAweDMwQ0MsIDB4MDNDOCwNCi0gICAgMHgzMENELCAweDAzQzksIDB4MzBDRSwgMHgwM0NBLCAweDMwQ0YsIDB4MDNDQiwgMHgzMEQwLCAweDAzQ0MsDQotICAgIDB4MzBEMSwgMHgwM0NELCAweDMwRDIsIDB4MDNDRSwgMHgzMEQzLCAweDAzQ0YsIDB4MzBENCwgMHgwM0QwLA0KLSAgICAweDMwRDUsIDB4MDNEMSwgMHgzMEQ2LCAweDAzRDIsIDB4MzBENywgMHgwM0QzLCAweDMwRDgsIDB4MDNENCwNCi0gICAgMHgzMEQ5LCAweDAzRDUsIDB4MzBEQSwgMHgwM0Q2LCAweDMwREIsIDB4MDNENywgMHgzMERDLCAweDAzRDgsDQotICAgIDB4MzBERCwgMHgwM0Q5LCAweDMwREUsIDB4MDNEQSwgMHgzMERGLCAweDAzREIsIDB4MzBFMCwgMHgwM0RDLA0KLSAgICAweDMwRTEsIDB4MDNERCwgMHgzMEUyLCAweDAzREUsIDB4MzBFMywgMHgwM0RGLCAweDMwRTQsIDB4MDNFMCwNCi0gICAgMHgzMEU1LCAweDAzRTEsIDB4MzBFNiwgMHgwM0UyLCAweDMwRTcsIDB4MDNFMywgMHgzMEU4LCAweDAzRTQsDQotICAgIDB4MzBFOSwgMHgwM0U1LCAweDMwRUEsIDB4MDNFNiwgMHgzMEVCLCAweDAzRTcsIDB4MzBFQywgMHgwM0U4LA0KLSAgICAweDMwRUQsIDB4MDNFOSwgMHgzMEVFLCAweDAzRUEsIDB4MzBFRiwgMHgwM0VCLCAweDMwRjAsIDB4MDNFQywNCi0gICAgMHgzMEYxLCAweDAzRUQsIDB4MzBGMiwgMHgwM0VFLCAweDMwRjMsIDB4MDNFRiwgMHgzMEY0LCAweDAzRjAsDQotICAgIDB4MzBGNSwgMHgwM0YxLCAweDMwRjYsIDB4MDNGMiwgMHgzMEY3LCAweDIwNzksIDB4MzBGOCwgMHgyMDdBLA0KLSAgICAweDMwRjksIDB4MjA3QiwgMHgzMEZBLCAweDIwN0MsIDB4MzBGQiwgMHgwMjdFLCAweDMwRkMsIDB4MDI5NCwNCi0gICAgMHgzMEZELCAweDAyOEIsIDB4MzBGRSwgMHgwMjhDLCAweDMyMjAsIDB4Mjc4RSwgMHgzMjIxLCAweDI3OEYsDQotICAgIDB4MzIyMiwgMHgyNzkwLCAweDMyMjMsIDB4Mjc5MSwgMHgzMjI0LCAweDI3OTIsIDB4MzIyNSwgMHgyNzkzLA0KLSAgICAweDMyMjYsIDB4Mjc5NCwgMHgzMjI3LCAweDI3OTUsIDB4MzIyOCwgMHgyNzk2LCAweDMyMjksIDB4Mjc5NywNCi0gICAgMHgzMjJBLCAweDIwMDYsIDB4MzIyQiwgMHgyMDA3LCAweDMyMkMsIDB4MjAwOCwgMHgzMjJELCAweDIwMDksDQotICAgIDB4MzIyRSwgMHgyMDBBLCAweDMyMkYsIDB4MjAwQiwgMHgzMjMwLCAweDIwMDUsIDB4MzIzMSwgMHgxREMyLA0KLSAgICAweDMyMzIsIDB4MURDMywgMHgzMjMzLCAweDFGQ0YsIDB4MzIzNCwgMHgxRkNELCAweDMyMzUsIDB4MUZENCwNCi0gICAgMHgzMjM2LCAweDFGRDMsIDB4MzIzNywgMHgyMDBDLCAweDMyMzgsIDB4MUZDRSwgMHgzMjM5LCAweDFEQzQsDQotICAgIDB4MzIzQSwgMHgxRkQ3LCAweDMyM0IsIDB4MUZENSwgMHgzMjNDLCAweDFGRDAsIDB4MzIzRCwgMHgxRkNCLA0KLSAgICAweDMyM0UsIDB4MUZEMiwgMHgzMjNGLCAweDFGQ0MsIDB4MzI0MCwgMHgxRkQ2LCAweDMyNDEsIDB4MjAwRCwNCi0gICAgMHgzMjQyLCAweDFGRDEsIDB4MzI0MywgMHgxRkNBLCAweDMyODAsIDB4MjhERCwgMHgzMjgxLCAweDI4REUsDQotICAgIDB4MzI4MiwgMHgyOERGLCAweDMyODMsIDB4MjhFMCwgMHgzMjg0LCAweDI4RTEsIDB4MzI4NSwgMHgyOEUyLA0KLSAgICAweDMyODYsIDB4MjhFMywgMHgzMjg3LCAweDI4RTQsIDB4MzI4OCwgMHgyOEU1LCAweDMyODksIDB4MjhFNiwNCi0gICAgMHgzMjhBLCAweDI4RTgsIDB4MzI4QiwgMHgyOEU5LCAweDMyOEMsIDB4MjhFQSwgMHgzMjhELCAweDI4RUIsDQotICAgIDB4MzI4RSwgMHgyOEVDLCAweDMyOEYsIDB4MjhFRCwgMHgzMjkwLCAweDI4RTcsIDB4MzI5MSwgMHgxRkUxLA0KLSAgICAweDMyOTIsIDB4MUZFMCwgMHgzMjkzLCAweDFGRTIsIDB4MzI5NCwgMHgxRkRDLCAweDMyOTUsIDB4MjhGRiwNCi0gICAgMHgzMjk2LCAweDFGRTUsIDB4MzI5NywgMHgyOEZDLCAweDMyOTgsIDB4MUZERSwgMHgzMjk5LCAweDIwMUYsDQotICAgIDB4MzI5QSwgMHgyOEY5LCAweDMyOUIsIDB4MjhGOCwgMHgzMjlDLCAweDI4RkUsIDB4MzI5RCwgMHgyMDdGLA0KLSAgICAweDMyOUUsIDB4MUZGRiwgMHgzMjlGLCAweDI4RUYsIDB4MzJBMCwgMHgyOEY2LCAweDMyQTEsIDB4MjhGNywNCi0gICAgMHgzMkEyLCAweDI4RkIsIDB4MzJBMywgMHgyOEZBLCAweDMyQTQsIDB4MURCRCwgMHgzMkE1LCAweDFEQkUsDQotICAgIDB4MzJBNiwgMHgxREJGLCAweDMyQTcsIDB4MURDMCwgMHgzMkE4LCAweDFEQzEsIDB4MzJBOSwgMHgxRkRBLA0KLSAgICAweDMyQUEsIDB4MUZERCwgMHgzMkFCLCAweDFGREYsIDB4MzJBQywgMHgxRkUzLCAweDMyQUQsIDB4MUZEOSwNCi0gICAgMHgzMkFFLCAweDFGRTQsIDB4MzJBRiwgMHgxRkRCLCAweDMyQjAsIDB4MUZEOCwgMHgzMkQwLCAweDI4QUQsDQotICAgIDB4MzJEMSwgMHgyOEFFLCAweDMyRDIsIDB4MjhBRiwgMHgzMkQzLCAweDI4QjAsIDB4MzJENCwgMHgyOEIxLA0KLSAgICAweDMyRDUsIDB4MjhCMiwgMHgzMkQ2LCAweDI4QjMsIDB4MzJENywgMHgyOEI0LCAweDMyRDgsIDB4MjhCNSwNCi0gICAgMHgzMkQ5LCAweDI4QjYsIDB4MzJEQSwgMHgyOEI3LCAweDMyREIsIDB4MjhCOCwgMHgzMkRDLCAweDI4QjksDQotICAgIDB4MzJERCwgMHgyOEJBLCAweDMyREUsIDB4MjhCQiwgMHgzMkRGLCAweDI4QkMsIDB4MzJFMCwgMHgyOEJELA0KLSAgICAweDMyRTEsIDB4MjhCRSwgMHgzMkUyLCAweDI4QkYsIDB4MzJFMywgMHgyOEMwLCAweDMyRTQsIDB4MjhDMSwNCi0gICAgMHgzMkU1LCAweDI4QzIsIDB4MzJFNiwgMHgyOEMzLCAweDMyRTcsIDB4MjhDNCwgMHgzMkU4LCAweDI4QzUsDQotICAgIDB4MzJFOSwgMHgyOEM2LCAweDMyRUEsIDB4MjhDNywgMHgzMkVCLCAweDI4QzgsIDB4MzJFQywgMHgyOEM5LA0KLSAgICAweDMyRUQsIDB4MjhDQSwgMHgzMkVFLCAweDI4Q0IsIDB4MzJFRiwgMHgyOENDLCAweDMyRjAsIDB4MjhDRCwNCi0gICAgMHgzMkYxLCAweDI4Q0UsIDB4MzJGMiwgMHgyOENGLCAweDMyRjMsIDB4MjhEMCwgMHgzMkY0LCAweDI4RDEsDQotICAgIDB4MzJGNSwgMHgyOEQyLCAweDMyRjYsIDB4MjhEMywgMHgzMkY3LCAweDI4RDQsIDB4MzJGOCwgMHgyOEQ1LA0KLSAgICAweDMyRjksIDB4MjhENiwgMHgzMkZBLCAweDI4RDcsIDB4MzJGQiwgMHgyOEQ4LCAweDMyRkMsIDB4MjhEOSwNCi0gICAgMHgzMkZELCAweDI4REEsIDB4MzJGRSwgMHgyOERCLCAweDMzMDAsIDB4MUY3MCwgMHgzMzAxLCAweDJFNjIsDQotICAgIDB4MzMwMiwgMHgyRTYzLCAweDMzMDMsIDB4MUY2QSwgMHgzMzA0LCAweDJFNjQsIDB4MzMwNSwgMHgxRkY3LA0KLSAgICAweDMzMDYsIDB4MkU2NSwgMHgzMzA3LCAweDJFNjksIDB4MzMwOCwgMHgyRTY3LCAweDMzMDksIDB4MkU2QywNCi0gICAgMHgzMzBBLCAweDJFNkEsIDB4MzMwQiwgMHgyRTZFLCAweDMzMEMsIDB4MkU3MCwgMHgzMzBELCAweDFEQUIsDQotICAgIDB4MzMwRSwgMHgyRTcxLCAweDMzMEYsIDB4MkU3MiwgMHgzMzEwLCAweDJFNzMsIDB4MzMxMSwgMHgyRTc0LA0KLSAgICAweDMzMTIsIDB4MkU3NSwgMHgzMzEzLCAweDJFNzYsIDB4MzMxNCwgMHgxREEyLCAweDMzMTUsIDB4MUY2OSwNCi0gICAgMHgzMzE2LCAweDFGNjcsIDB4MzMxNywgMHgyRTc4LCAweDMzMTgsIDB4MUY2OCwgMHgzMzE5LCAweDJFN0EsDQotICAgIDB4MzMxQSwgMHgyRTdDLCAweDMzMUIsIDB4MkU3RCwgMHgzMzFDLCAweDJFN0UsIDB4MzMxRCwgMHgyRTdGLA0KLSAgICAweDMzMUUsIDB4MUY3MywgMHgzMzFGLCAweDJFODAsIDB4MzMyMCwgMHgyRTgxLCAweDMzMjEsIDB4MkU4MiwNCi0gICAgMHgzMzIyLCAweDFGNjYsIDB4MzMyMywgMHgxRjZCLCAweDMzMjQsIDB4MkU4MywgMHgzMzI1LCAweDJFODUsDQotICAgIDB4MzMyNiwgMHgxREFDLCAweDMzMjcsIDB4MURBNiwgMHgzMzI4LCAweDJFODgsIDB4MzMyOSwgMHgyRTg5LA0KLSAgICAweDMzMkEsIDB4MUY3NCwgMHgzMzJCLCAweDFEQUUsIDB4MzMyRCwgMHgyRThCLCAweDMzMkUsIDB4MkU4RSwNCi0gICAgMHgzMzJGLCAweDJFOEYsIDB4MzMzMCwgMHgyRTkwLCAweDMzMzEsIDB4MUY3MSwgMHgzMzMyLCAweDJFOTEsDQotICAgIDB4MzMzMywgMHgyMDg3LCAweDMzMzQsIDB4MkU5NCwgMHgzMzM1LCAweDJFOTUsIDB4MzMzNiwgMHgxREE4LA0KLSAgICAweDMzMzcsIDB4MkU5QSwgMHgzMzM4LCAweDJFOUMsIDB4MzMzOSwgMHgxRjZFLCAweDMzM0EsIDB4MkU5RCwNCi0gICAgMHgzMzNCLCAweDFGNkYsIDB4MzMzQywgMHgyRTk2LCAweDMzM0QsIDB4MkU5RSwgMHgzMzNFLCAweDJFQTAsDQotICAgIDB4MzMzRiwgMHgyRUExLCAweDMzNDAsIDB4MkVBMiwgMHgzMzQxLCAweDJFOUYsIDB4MzM0MiwgMHgxRjZELA0KLSAgICAweDMzNDMsIDB4MkVBMywgMHgzMzQ0LCAweDJFQTQsIDB4MzM0NSwgMHgyRUE1LCAweDMzNDYsIDB4MkVBNiwNCi0gICAgMHgzMzQ3LCAweDFGNzIsIDB4MzM0OCwgMHgyRUE3LCAweDMzNDksIDB4MURBMSwgMHgzMzRBLCAweDFEQUYsDQotICAgIDB4MzM0QiwgMHgyRUE4LCAweDMzNEMsIDB4MkVBOSwgMHgzMzRELCAweDFEQTQsIDB4MzM0RSwgMHgyMDg4LA0KLSAgICAweDMzNEYsIDB4MkVBQSwgMHgzMzUwLCAweDJFQUIsIDB4MzM1MSwgMHgxREE5LCAweDMzNTIsIDB4MkVBRSwNCi0gICAgMHgzMzUzLCAweDJFQjIsIDB4MzM1NCwgMHgyRUFGLCAweDMzNTUsIDB4MkVCMywgMHgzMzU2LCAweDJFQjQsDQotICAgIDB4MzM1NywgMHgxRjZDLCAweDMzNzEsIDB4MkU1NSwgMHgzMzdCLCAweDIwODMsIDB4MzM3QywgMHgxREM3LA0KLSAgICAweDMzN0QsIDB4MURDNiwgMHgzMzdFLCAweDFEQzUsIDB4MzM3RiwgMHgxRjc2LCAweDMzODUsIDB4MUY1RiwNCi0gICAgMHgzMzg2LCAweDFGNjAsIDB4MzM4NywgMHgxRjYxLCAweDMzODgsIDB4MjAwMCwgMHgzMzg5LCAweDIwMDEsDQotICAgIDB4MzM4RCwgMHgyRTU4LCAweDMzOEUsIDB4MURCNCwgMHgzMzhGLCAweDFEQjUsIDB4MzM5MCwgMHgxRjYzLA0KLSAgICAweDMzOTYsIDB4MUY2NSwgMHgzMzk3LCAweDFGNTgsIDB4MzM5OCwgMHgxRjVBLCAweDMzOUIsIDB4MkU1OSwNCi0gICAgMHgzMzlDLCAweDFEQjEsIDB4MzM5RCwgMHgxREIyLCAweDMzOUUsIDB4MURCMywgMHgzMzlGLCAweDFGRkEsDQotICAgIDB4MzNBMCwgMHgxRjU0LCAweDMzQTEsIDB4MURCNywgMHgzM0EyLCAweDFGNTUsIDB4MzNBMywgMHgxRkZCLA0KLSAgICAweDMzQTQsIDB4MUY1NiwgMHgzM0E1LCAweDFGNTcsIDB4MzNBNiwgMHgxRkZDLCAweDMzQjAsIDB4MUY1RSwNCi0gICAgMHgzM0IxLCAweDFGNUQsIDB4MzNCMiwgMHgxRjVDLCAweDMzQjMsIDB4MUY1QiwgMHgzM0MyLCAweDJFNTAsDQotICAgIDB4MzNDNCwgMHgxREI2LCAweDMzQzgsIDB4MjAwMiwgMHgzM0NCLCAweDFGNjIsIDB4MzNDQywgMHgxRkY2LA0KLSAgICAweDMzQ0QsIDB4MURCQiwgMHgzM0Q0LCAweDFGNjQsIDB4MzNENywgMHgyRTVELCAweDMzRDgsIDB4MkU1RSwNCi0gICAgMHgzM0RBLCAweDJFNEIsIDB4MzQwMiwgMHgzNTgyLCAweDM0MDUsIDB4M0MxQiwgMHgzNDI3LCAweDM2NTYsDQotICAgIDB4MzQ4OCwgMHgzQzUyLCAweDM0REIsIDB4M0M0MSwgMHgzNTFGLCAweDM2MjksIDB4MzUzRSwgMHgzNzFFLA0KLSAgICAweDM3OEQsIDB4MzYxQSwgMHgzN0UyLCAweDM3MkIsIDB4M0FGMywgMHgzQzQwLCAweDNCMjIsIDB4M0M0OSwNCi0gICAgMHgzQjg4LCAweDM2OEQsIDB4M0U4QSwgMHgzQzQzLCAweDNFREEsIDB4M0M0OCwgMHgzRkIxLCAweDM3NTQsDQotICAgIDB4NDA5MywgMHgzQzRDLCAweDQxMDMsIDB4M0M0RiwgMHg0MjY0LCAweDM3NjAsIDB4NDI5MywgMHgzQzUwLA0KLSAgICAweDQ0MEMsIDB4M0M0MiwgMHg0NDUzLCAweDM3NzMsIDB4NDU3QSwgMHgzQzRCLCAweDQ2NjUsIDB4M0M0RSwNCi0gICAgMHg0NkFFLCAweDNDNTEsIDB4NEJFOCwgMHgzQzQ2LCAweDRFMDAsIDB4MDRCMCwgMHg0RTAxLCAweDBCQjgsDQotICAgIDB4NEUwMywgMHgwOEUzLCAweDRFMDQsIDB4MzdEOCwgMHg0RTA1LCAweDM3RDksIDB4NEUwNywgMHgwRUFBLA0KLSAgICAweDRFMDgsIDB4MDlDRSwgMHg0RTA5LCAweDA4N0UsIDB4NEUwQSwgMHgwOUNELCAweDRFMEIsIDB4MDUzQywNCi0gICAgMHg0RTBELCAweDBEQzYsIDB4NEUwRSwgMHgwRjI5LCAweDRFMTAsIDB4MEZGQiwgMHg0RTExLCAweDA0RDEsDQotICAgIDB4NEUxNCwgMHgwNUNDLCAweDRFMTUsIDB4MEZGQywgMHg0RTE2LCAweDBBNDgsIDB4NEUxNywgMHgxMEQ3LA0KLSAgICAweDRFMTgsIDB4MDY3MCwgMHg0RTE5LCAweDBFMEEsIDB4NEUxRSwgMHgwOUNGLCAweDRFMUYsIDB4MzdEQSwNCi0gICAgMHg0RTIxLCAweDBGODYsIDB4NEUyNiwgMHgwRTEyLCAweDRFMjgsIDB4MjBCMywgMHg0RTJBLCAweDBGRkQsDQotICAgIDB4NEUyQiwgMHgzN0RCLCAweDRFMkMsIDB4Mzc0RCwgMHg0RTJELCAweDBCQTQsIDB4NEUyRiwgMHgzN0RDLA0KLSAgICAweDRFMzAsIDB4MzdERCwgMHg0RTMxLCAweDBGRkUsIDB4NEUzMiwgMHgwNkYyLCAweDRFMzYsIDB4MEZGRiwNCi0gICAgMHg0RTM3LCAweDM2OUQsIDB4NEUzOCwgMHgwNjE5LCAweDRFMzksIDB4MEI2RSwgMHg0RTNCLCAweDA5MTMsDQotICAgIDB4NEUzQywgMHgxMDAwLCAweDRFM0YsIDB4MTAwMSwgMHg0RTQwLCAweDM3REUsIDB4NEU0MSwgMHgzN0RGLA0KLSAgICAweDRFNDIsIDB4MTAwMiwgMHg0RTQzLCAweDBDRUIsIDB4NEU0NCwgMHgzN0UwLCAweDRFNDUsIDB4MDY3MSwNCi0gICAgMHg0RTQ4LCAweDM3MkUsIDB4NEU0QiwgMHgwQ0VELCAweDRFNEQsIDB4MENCQiwgMHg0RTRFLCAweDA3NzcsDQotICAgIDB4NEU0RiwgMHgwRTYxLCAweDRFNTUsIDB4MTk1MCwgMHg0RTU2LCAweDEwMDMsIDB4NEU1NywgMHgwOUQwLA0KLSAgICAweDRFNTgsIDB4MTAwNCwgMHg0RTU5LCAweDA1MzUsIDB4NEU1QSwgMHgzN0UxLCAweDRFNUQsIDB4MDZERCwNCi0gICAgMHg0RTVFLCAweDA3QTQsIDB4NEU1RiwgMHgwRUY1LCAweDRFNjIsIDB4MTIzMywgMHg0RTcxLCAweDBGNUEsDQotICAgIDB4NEU3MywgMHgwQ0Q1LCAweDRFN0UsIDB4MDVFMSwgMHg0RTdGLCAweDM3RTIsIDB4NEU4MCwgMHgwNjRGLA0KLSAgICAweDRFODIsIDB4MTAwNSwgMHg0RTg1LCAweDEwMDYsIDB4NEU4NiwgMHgwRjgzLCAweDRFODgsIDB4MEYyNywNCi0gICAgMHg0RTg5LCAweDBBRUEsIDB4NEU4QSwgMHgxMDA4LCAweDRFOEIsIDB4MDhDNCwgMHg0RThDLCAweDBDQ0IsDQotICAgIDB4NEU4RCwgMHgzN0UzLCAweDRFOEUsIDB4MTAwQiwgMHg0RTkxLCAweDA0RTAsIDB4NEU5MiwgMHgwNzkzLA0KLSAgICAweDRFOTQsIDB4MDc5MiwgMHg0RTk1LCAweDA0QUEsIDB4NEU5NiwgMHgzN0U0LCAweDRFOTgsIDB4MEZGMSwNCi0gICAgMHg0RTk5LCAweDBGRjAsIDB4NEU5QiwgMHgwODIzLCAweDRFOUMsIDB4MDQ2NSwgMHg0RTlFLCAweDEwMEMsDQotICAgIDB4NEU5RiwgMHgxMDBELCAweDRFQTAsIDB4MTAwRSwgMHg0RUExLCAweDBFNjIsIDB4NEVBMiwgMHgxMDBGLA0KLSAgICAweDRFQTQsIDB4MDdBNiwgMHg0RUE1LCAweDA0QUIsIDB4NEVBNiwgMHgwRUEwLCAweDRFQTgsIDB4MDY5NiwNCi0gICAgMHg0RUFCLCAweDA2OTcsIDB4NEVBQywgMHgwNjk4LCAweDRFQUQsIDB4MEJGRSwgMHg0RUFFLCAweDBGODQsDQotICAgIDB4NEVCMCwgMHgxMDEwLCAweDRFQjMsIDB4MTAxMSwgMHg0RUI2LCAweDEwMTIsIDB4NEVCOSwgMHgzN0U1LA0KLSAgICAweDRFQkEsIDB4MEExMywgMHg0RUJCLCAweDM2MjAsIDB4NEVDMCwgMHgwOTQ0LCAweDRFQzEsIDB4MEExNCwNCi0gICAgMHg0RUMyLCAweDEwMTcsIDB4NEVDNCwgMHgxMDE1LCAweDRFQzYsIDB4MTAxNiwgMHg0RUM3LCAweDA2NzIsDQotICAgIDB4NEVDQSwgMHgwODEzLCAweDRFQ0IsIDB4MDU3MCwgMHg0RUNELCAweDEwMTQsIDB4NEVDRSwgMHgxMDEzLA0KLSAgICAweDRFQ0YsIDB4MERGOSwgMHg0RUQwLCAweDM3RTYsIDB4NEVENCwgMHgwODk0LCAweDRFRDUsIDB4MDg5MywNCi0gICAgMHg0RUQ2LCAweDBCMUUsIDB4NEVENywgMHgxMDE4LCAweDRFRDgsIDB4MERDNywgMHg0RUQ5LCAweDBBOEIsDQotICAgIDB4NEVERCwgMHgwMjkwLCAweDRFREUsIDB4MTAxOSwgMHg0RURGLCAweDEwMUIsIDB4NEVFMCwgMHgzN0U3LA0KLSAgICAweDRFRTEsIDB4MjBCNCwgMHg0RUUzLCAweDBCNDUsIDB4NEVFNCwgMHgwRkE5LCAweDRFRTUsIDB4MDQ4RSwNCi0gICAgMHg0RUVELCAweDEwMUEsIDB4NEVFRSwgMHgwNTNFLCAweDRFRjAsIDB4MDZCQywgMHg0RUYyLCAweDBCQTUsDQotICAgIDB4NEVGNiwgMHgwNzQ1LCAweDRFRjcsIDB4MTAxQywgMHg0RUZCLCAweDBDREEsIDB4NEVGQywgMHgyMEI1LA0KLSAgICAweDRFRkQsIDB4MzdFOCwgMHg0RUZGLCAweDM3RTksIDB4NEYwMCwgMHgyMEI2LCAweDRGMDEsIDB4MDYyNywNCi0gICAgMHg0RjAzLCAweDIwQjcsIDB4NEYwOSwgMHgxMDFELCAweDRGMEEsIDB4MDQ4RiwgMHg0RjBCLCAweDM3RUEsDQotICAgIDB4NEYwRCwgMHgwNzk0LCAweDRGMEUsIDB4MDYyOCwgMHg0RjBGLCAweDBERUMsIDB4NEYxMCwgMHgwRDQ2LA0KLSAgICAweDRGMTEsIDB4MDY3MywgMHg0RjE1LCAweDM3RUIsIDB4NEYxQSwgMHgwNTcxLCAweDRGMUMsIDB4MTA0MCwNCi0gICAgMHg0RjFELCAweDBDM0IsIDB4NEYyRiwgMHgwRDIyLCAweDRGMzAsIDB4MTAxRiwgMHg0RjM0LCAweDBENTAsDQotICAgIDB4NEYzNiwgMHgwRkFBLCAweDRGMzgsIDB4MDlGMywgMHg0RjM5LCAweDIwQjgsIDB4NEYzQSwgMHgwODk1LA0KLSAgICAweDRGM0IsIDB4MzdFRCwgMHg0RjNDLCAweDA4QzUsIDB4NEYzRCwgMHgwNTQwLCAweDRGNDMsIDB4MEJFRCwNCi0gICAgMHg0RjQ2LCAweDBCNjAsIDB4NEY0NywgMHgxMDIzLCAweDRGNDksIDB4MzdFRSwgMHg0RjRELCAweDA0OTAsDQotICAgIDB4NEY0RSwgMHgwQkZGLCAweDRGNEYsIDB4MDk0NSwgMHg0RjUwLCAweDA4MjQsIDB4NEY1MSwgMHgwRjBFLA0KLSAgICAweDRGNTMsIDB4MEIyRSwgMHg0RjU0LCAweDM3RUYsIDB4NEY1NSwgMHgwNTNGLCAweDRGNTYsIDB4MjBCOSwNCi0gICAgMHg0RjU3LCAweDEwMjIsIDB4NEY1OSwgMHgwRjI4LCAweDRGNUEsIDB4MTAxRSwgMHg0RjVCLCAweDEwMjAsDQotICAgIDB4NEY1QywgMHgwODVFLCAweDRGNUQsIDB4MTAyMSwgMHg0RjVFLCAweDExRDMsIDB4NEY2MCwgMHgzN0VDLA0KLSAgICAweDRGNjksIDB4MTAyOSwgMHg0RjZGLCAweDEwMkMsIDB4NEY3MCwgMHgxMDJBLCAweDRGNzMsIDB4MDU0MiwNCi0gICAgMHg0Rjc1LCAweDBFMEIsIDB4NEY3NiwgMHgxMDI0LCAweDRGN0EsIDB4MzdGMCwgMHg0RjdCLCAweDEwMjgsDQotICAgIDB4NEY3QywgMHgwN0E3LCAweDRGN0QsIDB4MzdGMSwgMHg0RjdFLCAweDM3RjIsIDB4NEY3RiwgMHgwODk2LA0KLSAgICAweDRGODMsIDB4MDVFMiwgMHg0Rjg2LCAweDEwMkQsIDB4NEY4OCwgMHgxMDI1LCAweDRGOEEsIDB4MjBCQiwNCi0gICAgMHg0RjhCLCAweDBGQUIsIDB4NEY4RCwgMHgwOEM2LCAweDRGOEYsIDB4MTAyNiwgMHg0RjkxLCAweDEwMkIsDQotICAgIDB4NEY5MiwgMHgyMEJBLCAweDRGOTQsIDB4MjBCRCwgMHg0Rjk2LCAweDEwMkUsIDB4NEY5NywgMHgzN0YzLA0KLSAgICAweDRGOTgsIDB4MTAyNywgMHg0RjlBLCAweDIwQkMsIDB4NEY5QiwgMHgwNjk5LCAweDRGOUQsIDB4MDQ5MSwNCi0gICAgMHg0RkEwLCAweDA2OUEsIDB4NEZBMSwgMHgwNTQxLCAweDRGQUIsIDB4MTFENCwgMHg0RkFELCAweDBFQTcsDQotICAgIDB4NEZBRSwgMHgwREUwLCAweDRGQUYsIDB4MDdBOCwgMHg0RkI1LCAweDA5RjUsIDB4NEZCNiwgMHgwRjdGLA0KLSAgICAweDRGQkUsIDB4MzdGNCwgMHg0RkJGLCAweDBFMjgsIDB4NEZDMiwgMHgwNzBFLCAweDRGQzMsIDB4MEIwNSwNCi0gICAgMHg0RkM0LCAweDA1NjQsIDB4NEZDOSwgMHgyMEFDLCAweDRGQ0EsIDB4MDk1RCwgMHg0RkNELCAweDIwQkUsDQotICAgIDB4NEZDRSwgMHgxMDMyLCAweDRGQ0YsIDB4MzdGNSwgMHg0RkQwLCAweDEwMzcsIDB4NEZEMSwgMHgxMDM1LA0KLSAgICAweDRGRDMsIDB4M0MyRiwgMHg0RkQ0LCAweDEwMzAsIDB4NEZENywgMHgwQjBGLCAweDRGRDgsIDB4MTAzMywNCi0gICAgMHg0RkRBLCAweDEwMzYsIDB4NEZEQiwgMHgxMDM0LCAweDRGREQsIDB4MEUyRCwgMHg0RkRGLCAweDEwMzEsDQotICAgIDB4NEZFMCwgMHgxREVDLCAweDRGRTEsIDB4MDlGNCwgMHg0RkUzLCAweDBFQTEsIDB4NEZFNCwgMHgxMDM4LA0KLSAgICAweDRGRTUsIDB4MTAzOSwgMHg0RkVFLCAweDA5MkUsIDB4NEZFRiwgMHgxMDQ2LCAweDRGRjMsIDB4MEQwNiwNCi0gICAgMHg0RkY1LCAweDBEQTgsIDB4NEZGNiwgMHgxMDQxLCAweDRGRjgsIDB4MEU0MCwgMHg0RkZBLCAweDA1MzYsDQotICAgIDB4NEZGRCwgMHgzN0Y2LCAweDRGRkUsIDB4MTA0NSwgMHg0RkZGLCAweDIwQzEsIDB4NTAwMCwgMHgzN0Y3LA0KLSAgICAweDUwMDEsIDB4MzdGOCwgMHg1MDAyLCAweDM0NDcsIDB4NTAwNSwgMHgxMDNGLCAweDUwMDYsIDB4MTA0OCwNCi0gICAgMHg1MDA5LCAweDBBRDQsIDB4NTAwQiwgMHgwNzc4LCAweDUwMEQsIDB4MEQxMiwgMHg1MDBGLCAweDE2MDAsDQotICAgIDB4NTAxMCwgMHgzN0Y5LCAweDUwMTEsIDB4MTA0NywgMHg1MDEyLCAweDBDNTcsIDB4NTAxNCwgMHgxMDNDLA0KLSAgICAweDUwMTYsIDB4MDdBQSwgMHg1MDE5LCAweDA3QTksIDB4NTAxQSwgMHgxMDNBLCAweDUwMUIsIDB4MzdGQSwNCi0gICAgMHg1MDFFLCAweDIwQzIsIDB4NTAxRiwgMHgwOTA2LCAweDUwMjEsIDB4MTA0MiwgMHg1MDIyLCAweDIwQzAsDQotICAgIDB4NTAyMywgMHgwRTNGLCAweDUwMjQsIDB4MEI4QiwgMHg1MDI1LCAweDEwM0UsIDB4NTAyNiwgMHgwNzQ3LA0KLSAgICAweDUwMjcsIDB4MzdGQiwgMHg1MDI4LCAweDEwM0IsIDB4NTAyOSwgMHgxMDQzLCAweDUwMkEsIDB4MTAzRCwNCi0gICAgMHg1MDJCLCAweDBGOTksIDB4NTAyQywgMHgxMDQ0LCAweDUwMkQsIDB4MEZFNywgMHg1MDJFLCAweDM3RkMsDQotICAgIDB4NTAzNiwgMHgwNkRFLCAweDUwMzksIDB4MDc0NiwgMHg1MDNCLCAweDM4MDAsIDB4NTA0MCwgMHgyMEJGLA0KLSAgICAweDUwNDIsIDB4MjBDNSwgMHg1MDQzLCAweDEwNDksIDB4NTA0NiwgMHgyMEMzLCAweDUwNDcsIDB4MTA0QSwNCi0gICAgMHg1MDQ4LCAweDEwNEUsIDB4NTA0OSwgMHgwNDkyLCAweDUwNEYsIDB4MEUyMCwgMHg1MDUwLCAweDEwNEQsDQotICAgIDB4NTA1NSwgMHgxMDRDLCAweDUwNTYsIDB4MTA1MCwgMHg1MDU3LCAweDM3RkQsIDB4NTA1QSwgMHgxMDRGLA0KLSAgICAweDUwNUMsIDB4MEMwMCwgMHg1MDY1LCAweDA3NDgsIDB4NTA2NiwgMHgzN0ZFLCAweDUwNkEsIDB4MzdGRiwNCi0gICAgMHg1MDZDLCAweDEwNTEsIDB4NTA3MCwgMHgyMEM0LCAweDUwNzIsIDB4MDhGMSwgMHg1MDc0LCAweDBCMDYsDQotICAgIDB4NTA3NSwgMHgwQzAxLCAweDUwNzYsIDB4MDZFRSwgMHg1MDc4LCAweDEwNTIsIDB4NTA3RCwgMHgwNjUwLA0KLSAgICAweDUwODAsIDB4MTA1MywgMHg1MDg1LCAweDEwNTUsIDB4NTA4RCwgMHgwRTYzLCAweDUwOEYsIDB4MzgwMSwNCi0gICAgMHg1MDkxLCAweDA3M0MsIDB4NTA5NCwgMHgyMEM2LCAweDUwOTYsIDB4MzgwMiwgMHg1MDk4LCAweDA4N0YsDQotICAgIDB4NTA5OSwgMHgwRDhCLCAweDUwOUEsIDB4MTA1NCwgMHg1MDlDLCAweDM4MDMsIDB4NTBBQywgMHgwODM1LA0KLSAgICAweDUwQUQsIDB4MEYyRCwgMHg1MEIyLCAweDEwNTcsIDB4NTBCMywgMHgxMDVBLCAweDUwQjQsIDB4MTA1NiwNCi0gICAgMHg1MEI1LCAweDA4MzQsIDB4NTBCNywgMHgwOTg3LCAweDUwQkUsIDB4MDcwRiwgMHg1MEMyLCAweDEwNUIsDQotICAgIDB4NTBDNSwgMHgwNkM3LCAweDUwQzksIDB4MTA1OCwgMHg1MENBLCAweDEwNTksIDB4NTBDQywgMHgzODA0LA0KLSAgICAweDUwQ0QsIDB4MEM4NywgMHg1MENGLCAweDBBRkUsIDB4NTBEMSwgMHgwNjlCLCAweDUwRDUsIDB4MEU3QiwNCi0gICAgMHg1MEQ2LCAweDEwNUMsIDB4NTBEOCwgMHgyMEM4LCAweDUwRDksIDB4M0MzMCwgMHg1MERBLCAweDBGODUsDQotICAgIDB4NTBERSwgMHgxMDVELCAweDUwRTMsIDB4MTA2MCwgMHg1MEU1LCAweDEwNUUsIDB4NTBFNiwgMHgzODA1LA0KLSAgICAweDUwRTcsIDB4MEFEMCwgMHg1MEU5LCAweDM4MDYsIDB4NTBFRCwgMHgxMDVGLCAweDUwRUUsIDB4MTA2MSwNCi0gICAgMHg1MEVGLCAweDM4MDcsIDB4NTBGMCwgMHgzQzMxLCAweDUwRjQsIDB4MjBDNywgMHg1MEY1LCAweDEwNjMsDQotICAgIDB4NTBGOSwgMHgxMDYyLCAweDUwRkIsIDB4MEUxOCwgMHg1MTAwLCAweDA2NTEsIDB4NTEwMSwgMHgxMDY1LA0KLSAgICAweDUxMDIsIDB4MTA2NiwgMHg1MTA0LCAweDA1MkYsIDB4NTEwOCwgMHgzODA4LCAweDUxMDksIDB4MTA2NCwNCi0gICAgMHg1MTBCLCAweDM4MDksIDB4NTExMCwgMHgzODBBLCAweDUxMTIsIDB4MDkyMCwgMHg1MTE0LCAweDEwNjksDQotICAgIDB4NTExNSwgMHgxMDY4LCAweDUxMTYsIDB4MTA2NywgMHg1MTE4LCAweDEwMkYsIDB4NTExQSwgMHgxMDZBLA0KLSAgICAweDUxMUIsIDB4MzgwQiwgMHg1MTFFLCAweDM4MEMsIDB4NTExRiwgMHgwOTg4LCAweDUxMjEsIDB4MTA2QiwNCi0gICAgMHg1MTJBLCAweDBGMEYsIDB4NTEzMiwgMHgwRUU1LCAweDUxMzcsIDB4MTA2RCwgMHg1MTNBLCAweDEwNkMsDQotICAgIDB4NTEzQiwgMHgxMDZGLCAweDUxM0MsIDB4MTA2RSwgMHg1MTNGLCAweDEwNzAsIDB4NTE0MCwgMHgxMDcxLA0KLSAgICAweDUxNDEsIDB4MDRCOCwgMHg1MTQzLCAweDA3NjksIDB4NTE0NCwgMHgwNzExLCAweDUxNDUsIDB4MDk0NiwNCi0gICAgMHg1MTQ2LCAweDBCQjksIDB4NTE0NywgMHgwNjlDLCAweDUxNDgsIDB4MEE4QywgMHg1MTQ5LCAweDA3QUIsDQotICAgIDB4NTE0QSwgMHgyMEM5LCAweDUxNEIsIDB4MDgwMCwgMHg1MTRDLCAweDEwNzMsIDB4NTE0RCwgMHgwRUQ0LA0KLSAgICAweDUxNEUsIDB4MEM0MCwgMHg1MTUwLCAweDA4QzcsIDB4NTE1MiwgMHgxMDcyLCAweDUxNTQsIDB4MTA3NCwNCi0gICAgMHg1MTVBLCAweDBDNTgsIDB4NTE1QywgMHgwNUQzLCAweDUxNUYsIDB4MzgwRCwgMHg1MTYyLCAweDEwNzUsDQotICAgIDB4NTE2NCwgMHgyMENBLCAweDUxNjUsIDB4MENENiwgMHg1MTY3LCAweDM2OEUsIDB4NTE2OCwgMHgwQUI2LA0KLSAgICAweDUxNjksIDB4MTA3NywgMHg1MTZBLCAweDEwNzgsIDB4NTE2QiwgMHgwRDQwLCAweDUxNkMsIDB4MDdBQywNCi0gICAgMHg1MTZELCAweDBGRTEsIDB4NTE2RSwgMHgxMDc5LCAweDUxNzEsIDB4MDY5RSwgMHg1MTc1LCAweDBFMEMsDQotICAgIDB4NTE3NiwgMHgwQjE2LCAweDUxNzcsIDB4MDZFOSwgMHg1MTc4LCAweDBDMkYsIDB4NTE3OSwgMHgzNzc5LA0KLSAgICAweDUxN0MsIDB4MDc0OSwgMHg1MTgwLCAweDEwN0EsIDB4NTE4MiwgMHgxMDdCLCAweDUxODUsIDB4MENCQSwNCi0gICAgMHg1MTg2LCAweDA1MDEsIDB4NTE4OSwgMHgxMDdFLCAweDUxOEEsIDB4MDg2RCwgMHg1MThDLCAweDEwN0QsDQotICAgIDB4NTE4RCwgMHgwODM2LCAweDUxOEYsIDB4MTA3RiwgMHg1MTkwLCAweDE4NUIsIDB4NTE5MSwgMHgxMDgwLA0KLSAgICAweDUxOTIsIDB4MEU2RiwgMHg1MTkzLCAweDEwODEsIDB4NTE5NSwgMHgxMDgyLCAweDUxOTYsIDB4MTA4MywNCi0gICAgMHg1MTk3LCAweDA5RDEsIDB4NTE5OSwgMHgwOEY4LCAweDUxOUQsIDB4MjBDQiwgMHg1MUEwLCAweDA1RTMsDQotICAgIDB4NTFBMSwgMHgzODBFLCAweDUxQTIsIDB4MTA4NiwgMHg1MUE0LCAweDEwODQsIDB4NTFBNSwgMHgwRUM5LA0KLSAgICAweDUxQTYsIDB4MTA4NSwgMHg1MUE4LCAweDBEQ0MsIDB4NTFBOSwgMHgxMDg3LCAweDUxQUEsIDB4MTA4OCwNCi0gICAgMHg1MUFCLCAweDEwODksIDB4NTFBQywgMHgwQzU5LCAweDUxQjAsIDB4MTA4RCwgMHg1MUIxLCAweDEwOEIsDQotICAgIDB4NTFCMiwgMHgxMDhDLCAweDUxQjMsIDB4MTA4QSwgMHg1MUI0LCAweDA4NTMsIDB4NTFCNSwgMHgxMDhFLA0KLSAgICAweDUxQjYsIDB4MEVGNiwgMHg1MUI3LCAweDBGQUMsIDB4NTFCQywgMHgzODBGLCAweDUxQkQsIDB4MTA4RiwNCi0gICAgMHg1MUJFLCAweDIwQ0MsIDB4NTFDMywgMHgzQzMyLCAweDUxQzQsIDB4MEE0QywgMHg1MUM1LCAweDEwOTAsDQotICAgIDB4NTFDNiwgMHgwOTY0LCAweDUxQzksIDB4MTA5MSwgMHg1MUNCLCAweDBCQkEsIDB4NTFDQywgMHgwRjg3LA0KLSAgICAweDUxQ0QsIDB4MEM1QSwgMHg1MUQ2LCAweDEwREEsIDB4NTFEQiwgMHgxMDkyLCAweDUxREMsIDB4MjA1QywNCi0gICAgMHg1MURELCAweDA2QkQsIDB4NTFERSwgMHgzODEwLCAweDUxRTAsIDB4MTA5MywgMHg1MUUxLCAweDBFOEMsDQotICAgIDB4NTFFNiwgMHgwOTcyLCAweDUxRTcsIDB4MEI1QywgMHg1MUU5LCAweDEwOTUsIDB4NTFFQSwgMHgwQ0JDLA0KLSAgICAweDUxRUMsIDB4MjBDRCwgMHg1MUVELCAweDEwOTYsIDB4NTFFRSwgMHgzODExLCAweDUxRjAsIDB4MTA5NywNCi0gICAgMHg1MUYxLCAweDA1OEMsIDB4NTFGNCwgMHgzODEyLCAweDUxRjUsIDB4MTA5OCwgMHg1MUY2LCAweDA2OUYsDQotICAgIDB4NTFGOCwgMHgwQ0E0LCAweDUxRjksIDB4MDUxQywgMHg1MUZBLCAweDA5NUEsIDB4NTFGRCwgMHgwRDM1LA0KLSAgICAweDUxRkUsIDB4MTA5OSwgMHg1MjAwLCAweDBDNUIsIDB4NTIwMSwgMHgzODEzLCAweDUyMDIsIDB4MzgxNCwNCi0gICAgMHg1MjAzLCAweDBBMTUsIDB4NTIwNCwgMHgxMDlBLCAweDUyMDYsIDB4MERGQywgMHg1MjA3LCAweDBBN0UsDQotICAgIDB4NTIwOCwgMHgwNURFLCAweDUyMEEsIDB4MDVFNSwgMHg1MjBCLCAweDEwOUIsIDB4NTIwRSwgMHgxMDlELA0KLSAgICAweDUyMTEsIDB4MDcxMCwgMHg1MjEzLCAweDM4MTUsIDB4NTIxNCwgMHgxMDlDLCAweDUyMTUsIDB4MjBDRSwNCi0gICAgMHg1MjE3LCAweDBGQkIsIDB4NTIxRCwgMHgwOTczLCAweDUyMjQsIDB4MEQ1MSwgMHg1MjI1LCAweDBFMUMsDQotICAgIDB4NTIyNywgMHgxMDlFLCAweDUyMjksIDB4MEY2MiwgMHg1MjJBLCAweDEwOUYsIDB4NTIyRSwgMHgxMEEwLA0KLSAgICAweDUyMzAsIDB4MEM3OCwgMHg1MjMzLCAweDEwQTEsIDB4NTIzNiwgMHgwQTRELCAweDUyMzcsIDB4MDg2RSwNCi0gICAgMHg1MjM4LCAweDA3NEEsIDB4NTIzOSwgMHgxMEEyLCAweDUyM0EsIDB4MDg5NywgMHg1MjNCLCAweDA4MDEsDQotICAgIDB4NTI0MywgMHgwQzAyLCAweDUyNDQsIDB4MTBBNCwgMHg1MjQ3LCAweDBCMDcsIDB4NTI0OSwgMHgzODE2LA0KLSAgICAweDUyNEEsIDB4MDg1RiwgMHg1MjRCLCAweDEwQTUsIDB4NTI0QywgMHgxMEE2LCAweDUyNEQsIDB4MEFCMiwNCi0gICAgMHg1MjRGLCAweDEwQTMsIDB4NTI1NCwgMHgxMEE4LCAweDUyNTYsIDB4MEU2NCwgMHg1MjVCLCAweDA3RjYsDQotICAgIDB4NTI1RCwgMHgxRTVFLCAweDUyNUUsIDB4MTBBNywgMHg1MjYxLCAweDM4MTcsIDB4NTI2MywgMHgwNzRCLA0KLSAgICAweDUyNjQsIDB4MDg0RSwgMHg1MjY1LCAweDBEMjMsIDB4NTI2NiwgMHgzODE4LCAweDUyNjksIDB4MTBBQiwNCi0gICAgMHg1MjZBLCAweDEwQTksIDB4NTI2RiwgMHgwREVELCAweDUyNzAsIDB4MDlEMiwgMHg1MjcxLCAweDEwQjIsDQotICAgIDB4NTI3MiwgMHgwNUMyLCAweDUyNzMsIDB4MTBBQywgMHg1Mjc0LCAweDEwQUEsIDB4NTI3NSwgMHgwQUQxLA0KLSAgICAweDUyN0QsIDB4MTBBRSwgMHg1MjdGLCAweDEwQUQsIDB4NTI4MywgMHgwNUEyLCAweDUyODcsIDB4MDczNiwNCi0gICAgMHg1Mjg4LCAweDEwQjMsIDB4NTI4OSwgMHgwRjc1LCAweDUyOEQsIDB4MTBBRiwgMHg1MjkxLCAweDEwQjQsDQotICAgIDB4NTI5MiwgMHgxMEIxLCAweDUyOTMsIDB4MzgxOSwgMHg1Mjk0LCAweDEwQjAsIDB4NTI5QiwgMHgwRjk3LA0KLSAgICAweDUyOUMsIDB4MjBDRiwgMHg1MjlGLCAweDA3QUQsIDB4NTJBMCwgMHgwNTQzLCAweDUyQTMsIDB4MEZCQywNCi0gICAgMHg1MkE2LCAweDIwRDAsIDB4NTJBOSwgMHgwOTdGLCAweDUyQUEsIDB4MEM1MiwgMHg1MkFCLCAweDA3RjcsDQotICAgIDB4NTJBQywgMHgxMEI3LCAweDUyQUQsIDB4MTBCOCwgMHg1MkFGLCAweDIxN0QsIDB4NTJCMSwgMHgwRkFELA0KLSAgICAweDUyQjQsIDB4MEZEMSwgMHg1MkI1LCAweDEwQkEsIDB4NTJCOSwgMHgwN0FFLCAweDUyQkMsIDB4MTBCOSwNCi0gICAgMHg1MkJFLCAweDA1OEQsIDB4NTJDMCwgMHgyMEQxLCAweDUyQzEsIDB4MTBCQiwgMHg1MkMzLCAweDBFODQsDQotICAgIDB4NTJDNSwgMHgwQkQ4LCAweDUyQzcsIDB4MEYxMCwgMHg1MkM4LCAweDM4MUEsIDB4NTJDOSwgMHgwRTI5LA0KLSAgICAweDUyQ0QsIDB4MTBCQywgMHg1MkQwLCAweDM2RTgsIDB4NTJEMiwgMHgxQkVFLCAweDUyRDUsIDB4MEM4OCwNCi0gICAgMHg1MkQ3LCAweDEwQkQsIDB4NTJEOCwgMHgwNUU2LCAweDUyRDksIDB4MEVCRiwgMHg1MkRCLCAweDIwRDIsDQotICAgIDB4NTJERCwgMHgwOTg5LCAweDUyREUsIDB4MTBCRSwgMHg1MkRGLCAweDBFMzcsIDB4NTJFMCwgMHgxMEMyLA0KLSAgICAweDUyRTIsIDB4MEE0RSwgMHg1MkUzLCAweDEwQkYsIDB4NTJFNCwgMHgwNkM4LCAweDUyRTYsIDB4MTBDMCwNCi0gICAgMHg1MkU3LCAweDA1RTcsIDB4NTJGMCwgMHgzODFCLCAweDUyRjIsIDB4MDcwNCwgMHg1MkYzLCAweDEwQzMsDQotICAgIDB4NTJGNSwgMHgxMEM0LCAweDUyRjgsIDB4MTBDNSwgMHg1MkY5LCAweDEwQzYsIDB4NTJGQSwgMHgwOTA3LA0KLSAgICAweDUyRkUsIDB4MDdBRiwgMHg1MkZGLCAweDBFRUEsIDB4NTMwMCwgMHgyMEQzLCAweDUzMDEsIDB4MEVGNCwNCi0gICAgMHg1MzAyLCAweDBDQ0YsIDB4NTMwNSwgMHgwRTQxLCAweDUzMDYsIDB4MTBDNywgMHg1MzA3LCAweDIwRDQsDQotICAgIDB4NTMwOCwgMHgxMEM4LCAweDUzMEEsIDB4MzgxQywgMHg1MzBCLCAweDM4MUQsIDB4NTMwRCwgMHgxMENBLA0KLSAgICAweDUzMEYsIDB4MTBDQywgMHg1MzEwLCAweDEwQ0IsIDB4NTMxNSwgMHgxMENELCAweDUzMTYsIDB4MDUzRCwNCi0gICAgMHg1MzE3LCAweDBFN0EsIDB4NTMxOSwgMHgwODZDLCAweDUzMUEsIDB4MTBDRSwgMHg1MzFELCAweDBBREIsDQotICAgIDB4NTMyMCwgMHgwOThBLCAweDUzMjEsIDB4MDZBMSwgMHg1MzIzLCAweDEwQ0YsIDB4NTMyNCwgMHgyMEQ1LA0KLSAgICAweDUzMkEsIDB4MEQ2RiwgMHg1MzJGLCAweDEwRDAsIDB4NTMzMSwgMHgxMEQxLCAweDUzMzMsIDB4MTBEMiwNCi0gICAgMHg1MzM4LCAweDEwRDMsIDB4NTMzOSwgMHgwRDk2LCAweDUzM0EsIDB4MDZFMCwgMHg1MzNCLCAweDA0QTksDQotICAgIDB4NTMzRSwgMHgzODFFLCAweDUzM0YsIDB4MEM5NywgMHg1MzQwLCAweDEwRDQsIDB4NTM0MSwgMHgwOTQ3LA0KLSAgICAweDUzNDMsIDB4MEE4RCwgMHg1MzQ1LCAweDEwRDYsIDB4NTM0NiwgMHgxMEQ1LCAweDUzNDcsIDB4MDk4QiwNCi0gICAgMHg1MzQ4LCAweDA3OTUsIDB4NTM0OSwgMHgxMEQ4LCAweDUzNEEsIDB4MEQ1MiwgMHg1MzRCLCAweDM4MjAsDQotICAgIDB4NTM0QywgMHgzODFGLCAweDUzNEQsIDB4MTBEOSwgMHg1MzUxLCAweDBENzAsIDB4NTM1MiwgMHgwQjE0LA0KLSAgICAweDUzNTMsIDB4MEI0RSwgMHg1MzU0LCAweDA2QTAsIDB4NTM1NywgMHgwQ0M2LCAweDUzNTgsIDB4MEI2RiwNCi0gICAgMHg1MzVBLCAweDBEMjQsIDB4NTM1QywgMHgwRTdDLCAweDUzNUUsIDB4MTBEQiwgMHg1MzYwLCAweDBBOEUsDQotICAgIDB4NTM2MSwgMHgzODIxLCAweDUzNjYsIDB4MDcwQiwgMHg1MzY5LCAweDEwREMsIDB4NTM2QywgMHgzODIyLA0KLSAgICAweDUzNkUsIDB4MTBERCwgMHg1MzZGLCAweDA0Q0UsIDB4NTM3MCwgMHgwNEI5LCAweDUzNzEsIDB4MDYyOSwNCi0gICAgMHg1MzcyLCAweDIwRDYsIDB4NTM3MywgMHgwQjA4LCAweDUzNzQsIDB4MDY2QiwgMHg1Mzc1LCAweDBGNUIsDQotICAgIDB4NTM3NywgMHgxMEUwLCAweDUzNzgsIDB4MDUzNywgMHg1MzdCLCAweDEwREYsIDB4NTM3RCwgMHgzNDM1LA0KLSAgICAweDUzN0YsIDB4MDZBMiwgMHg1MzgyLCAweDEwRTEsIDB4NTM4NCwgMHgwRUZELCAweDUzODksIDB4MzdEMCwNCi0gICAgMHg1MzkzLCAweDIwRDcsIDB4NTM5NiwgMHgxMEUyLCAweDUzOTgsIDB4MEY5QSwgMHg1MzlBLCAweDA3QjAsDQotICAgIDB4NTM5RiwgMHgwNzZBLCAweDUzQTAsIDB4MTBFMywgMHg1M0E1LCAweDEwRTUsIDB4NTNBNiwgMHgxMEU0LA0KLSAgICAweDUzQTgsIDB4MEEyNSwgMHg1M0E5LCAweDA0REIsIDB4NTNBQiwgMHgzODIzLCAweDUzQUQsIDB4MDUwMCwNCi0gICAgMHg1M0FFLCAweDEwRTYsIDB4NTNCMCwgMHgxMEU3LCAweDUzQjIsIDB4MjBEOCwgMHg1M0IzLCAweDA3NkIsDQotICAgIDB4NTNCNiwgMHgxMEU4LCAweDUzQkIsIDB4MDY4OCwgMHg1M0MyLCAweDA4ODAsIDB4NTNDMywgMHgxMEU5LA0KLSAgICAweDUzQzgsIDB4MEVBMiwgMHg1M0M5LCAweDA4MjUsIDB4NTNDQSwgMHgwNjc0LCAweDUzQ0IsIDB4MEYxMSwNCi0gICAgMHg1M0NDLCAweDBBRDIsIDB4NTNDRCwgMHgwRDUzLCAweDUzQ0UsIDB4MDkyOSwgMHg1M0Q0LCAweDA5NTEsDQotICAgIDB4NTNENiwgMHgwOTE0LCAweDUzRDcsIDB4MDkyMSwgMHg1M0Q5LCAweDA5ODAsIDB4NTNEQSwgMHgzODI0LA0KLSAgICAweDUzREIsIDB4MEQ1NCwgMHg1M0RELCAweDIwRDksIDB4NTNERiwgMHgxMEVDLCAweDUzRTEsIDB4MDRFNSwNCi0gICAgMHg1M0UyLCAweDBBRDMsIDB4NTNFMywgMHgwN0IxLCAweDUzRTQsIDB4MDc3OSwgMHg1M0U1LCAweDA2REYsDQotICAgIDB4NTNFNiwgMHgzODI1LCAweDUzRTgsIDB4MTBGMCwgMHg1M0U5LCAweDBCNUYsIDB4NTNFQSwgMHgwQjVFLA0KLSAgICAweDUzRUIsIDB4MDZBMywgMHg1M0VDLCAweDA5OEMsIDB4NTNFRCwgMHgxMEYxLCAweDUzRUUsIDB4MTBFRiwNCi0gICAgMHg1M0VGLCAweDA1NDQsIDB4NTNGMCwgMHgwQjQ2LCAweDUzRjEsIDB4MDhFNCwgMHg1M0YyLCAweDA4OTksDQotICAgIDB4NTNGMywgMHgwNEM4LCAweDUzRjUsIDB4MzgyNiwgMHg1M0Y2LCAweDA1Q0UsIDB4NTNGNywgMHgwN0Y4LA0KLSAgICAweDUzRjgsIDB4MDg5OCwgMHg1M0ZBLCAweDEwRjIsIDB4NTQwMSwgMHgxMEYzLCAweDU0MDMsIDB4MDY2MywNCi0gICAgMHg1NDA0LCAweDA1QTQsIDB4NTQwOCwgMHgwN0Y5LCAweDU0MDksIDB4MDY2MiwgMHg1NDBBLCAweDBCRkIsDQotICAgIDB4NTQwQiwgMHgwNEM3LCAweDU0MEMsIDB4MEM4OSwgMHg1NDBELCAweDBFQ0EsIDB4NTQwRSwgMHgwN0IzLA0KLSAgICAweDU0MEYsIDB4MEY2MywgMHg1NDEwLCAweDBDNDEsIDB4NTQxMSwgMHgwN0IyLCAweDU0MUIsIDB4MDcwNSwNCi0gICAgMHg1NDFELCAweDEwRkMsIDB4NTQxRiwgMHgwNkRCLCAweDU0MjAsIDB4MEU3OCwgMHg1NDI2LCAweDBENzEsDQotICAgIDB4NTQyNywgMHgzODI3LCAweDU0MjksIDB4MTBGQiwgMHg1NDJCLCAweDA2MUEsIDB4NTQyQywgMHgxMEY2LA0KLSAgICAweDU0MkQsIDB4MTBGNywgMHg1NDJFLCAweDEwRjksIDB4NTQzMywgMHgzNUMwLCAweDU0MzYsIDB4MTBGQSwNCi0gICAgMHg1NDM4LCAweDA2NzUsIDB4NTQzOSwgMHgwQTI3LCAweDU0M0IsIDB4MERGRCwgMHg1NDNDLCAweDEwRjgsDQotICAgIDB4NTQzRCwgMHgxMEY0LCAweDU0M0UsIDB4MDc5NywgMHg1NDNGLCAweDM1Q0YsIDB4NTQ0MCwgMHgxMEY1LA0KLSAgICAweDU0NDIsIDB4MEZDQSwgMHg1NDQ2LCAweDBFNDIsIDB4NTQ0OCwgMHgwQzA0LCAweDU0NDksIDB4MDc5NiwNCi0gICAgMHg1NDRBLCAweDA4MDIsIDB4NTQ0RCwgMHgzODI4LCAweDU0NEUsIDB4MTBGRCwgMHg1NDUxLCAweDBDQjUsDQotICAgIDB4NTQ1NSwgMHgzNzIzLCAweDU0NUYsIDB4MTEwMSwgMHg1NDY2LCAweDM4MjksIDB4NTQ2OCwgMHgwOTJBLA0KLSAgICAweDU0NkEsIDB4MDkyMiwgMHg1NDZCLCAweDM4MkEsIDB4NTQ3MCwgMHgxMTA0LCAweDU0NzEsIDB4MTEwMiwNCi0gICAgMHg1NDczLCAweDBFQUYsIDB4NTQ3NCwgMHgzODJCLCAweDU0NzUsIDB4MTBGRiwgMHg1NDc2LCAweDExMDgsDQotICAgIDB4NTQ3NywgMHgxMTAzLCAweDU0N0IsIDB4MTEwNiwgMHg1NDdDLCAweDA3N0EsIDB4NTQ3RCwgMHgwRUNCLA0KLSAgICAweDU0ODAsIDB4MTEwNywgMHg1NDg0LCAweDExMDksIDB4NTQ4NiwgMHgxMTBCLCAweDU0OEEsIDB4MjBEQywNCi0gICAgMHg1NDhCLCAweDA4NjAsIDB4NTQ4QywgMHgwRkU4LCAweDU0OEQsIDB4MzgyQywgMHg1NDhFLCAweDExMDAsDQotICAgIDB4NTQ4RiwgMHgxMEZFLCAweDU0OTAsIDB4MTEwQSwgMHg1NDkyLCAweDExMDUsIDB4NTQ5NiwgMHgzODJELA0KLSAgICAweDU0OUMsIDB4MjBEQiwgMHg1NEExLCAweDM4MkUsIDB4NTRBMiwgMHgxMTBELCAweDU0QTQsIDB4MTExNiwNCi0gICAgMHg1NEE1LCAweDExMEYsIDB4NTRBOCwgMHgxMTEzLCAweDU0QTksIDB4MjBERCwgMHg1NEFCLCAweDExMTQsDQotICAgIDB4NTRBQywgMHgxMTEwLCAweDU0QUQsIDB4MzgyRiwgMHg1NEFGLCAweDExMzEsIDB4NTRCMiwgMHgwODU5LA0KLSAgICAweDU0QjMsIDB4MDU4RiwgMHg1NEI4LCAweDExMEUsIDB4NTRCOSwgMHgzODMwLCAweDU0QkMsIDB4MTExOCwNCi0gICAgMHg1NEJELCAweDA0QkEsIDB4NTRCRSwgMHgxMTE3LCAweDU0QkYsIDB4MzgzMSwgMHg1NEMwLCAweDA0NjksDQotICAgIDB4NTRDMSwgMHgwREJDLCAweDU0QzIsIDB4MTExNSwgMHg1NEM0LCAweDExMTEsIDB4NTRDNiwgMHgzODMyLA0KLSAgICAweDU0QzcsIDB4MTEwQywgMHg1NEM4LCAweDExMTIsIDB4NTRDOSwgMHgwODM4LCAweDU0Q0QsIDB4MzgzMywNCi0gICAgMHg1NEQ4LCAweDExMTksIDB4NTRFMSwgMHgwNEJCLCAweDU0RTIsIDB4MTEyMiwgMHg1NEU1LCAweDExMUEsDQotICAgIDB4NTRFNiwgMHgxMTFCLCAweDU0RTgsIDB4MDk4RCwgMHg1NEU5LCAweDBFOTcsIDB4NTRFRCwgMHgxMTIwLA0KLSAgICAweDU0RUUsIDB4MTExRiwgMHg1NEYyLCAweDBDMjksIDB4NTRGQSwgMHgxMTIxLCAweDU0RkQsIDB4MTExRSwNCi0gICAgMHg1NEZGLCAweDIwREUsIDB4NTUwNCwgMHgwNEQ2LCAweDU1MDYsIDB4MDgyNiwgMHg1NTA3LCAweDA5RjYsDQotICAgIDB4NTUwRSwgMHgzODM0LCAweDU1MEYsIDB4MTExQywgMHg1NTEwLCAweDBDNUMsIDB4NTUxNCwgMHgxMTFELA0KLSAgICAweDU1MTYsIDB4MDQ2NiwgMHg1NTJCLCAweDM4MzUsIDB4NTUyRSwgMHgxMTI3LCAweDU1MkYsIDB4MEYwRCwNCi0gICAgMHg1NTMxLCAweDA5OEYsIDB4NTUzMywgMHgxMTJELCAweDU1MzUsIDB4MzgzNiwgMHg1NTM4LCAweDExMkMsDQotICAgIDB4NTUzOSwgMHgxMTIzLCAweDU1M0UsIDB4MEIyMywgMHg1NTQwLCAweDExMjQsIDB4NTU0NCwgMHgwQjRGLA0KLSAgICAweDU1NDUsIDB4MTEyOSwgMHg1NTQ2LCAweDA5OEUsIDB4NTU0QSwgMHgzODM3LCAweDU1NEMsIDB4MTEyNiwNCi0gICAgMHg1NTRGLCAweDBFRjAsIDB4NTU1MywgMHgwNzEyLCAweDU1NTYsIDB4MTEyQSwgMHg1NTU3LCAweDExMkIsDQotICAgIDB4NTU1QywgMHgxMTI4LCAweDU1NUQsIDB4MTEyRSwgMHg1NTVFLCAweDFERDEsIDB4NTU2MCwgMHgzODM4LA0KLSAgICAweDU1NjEsIDB4MzgzOSwgMHg1NTYzLCAweDExMjUsIDB4NTU3QiwgMHgxMTM0LCAweDU1N0MsIDB4MTEzOSwNCi0gICAgMHg1NTdFLCAweDExMzUsIDB4NTU4MCwgMHgxMTMwLCAweDU1ODMsIDB4MTEzQSwgMHg1NTg0LCAweDBBQjMsDQotICAgIDB4NTU4NiwgMHgyMERGLCAweDU1ODcsIDB4MTEzQywgMHg1NTg4LCAweDM4M0EsIDB4NTU4OSwgMHgwN0I0LA0KLSAgICAweDU1OEEsIDB4MTEzMiwgMHg1NThCLCAweDBCQkIsIDB4NTU4RSwgMHgzODNCLCAweDU1OTgsIDB4MTEzNiwNCi0gICAgMHg1NTk5LCAweDExMkYsIDB4NTU5QSwgMHgwNUU5LCAweDU1OUMsIDB4MDYyQSwgMHg1NTlELCAweDA1QzMsDQotICAgIDB4NTU5RSwgMHgxMTM3LCAweDU1OUYsIDB4MTEzMywgMHg1NUE3LCAweDA3NEMsIDB4NTVBOCwgMHgxMTNELA0KLSAgICAweDU1QTksIDB4MTEzQiwgMHg1NUFBLCAweDBBRDUsIDB4NTVBQiwgMHgwNjY0LCAweDU1QUMsIDB4MDZBNCwNCi0gICAgMHg1NUFFLCAweDExMzgsIDB4NTVCMCwgMHgwNkVDLCAweDU1QjYsIDB4MDRFNiwgMHg1NUM0LCAweDExNDEsDQotICAgIDB4NTVDNSwgMHgxMTNGLCAweDU1QzcsIDB4MTE3OCwgMHg1NUQ0LCAweDExNDQsIDB4NTVEQSwgMHgxMTNFLA0KLSAgICAweDU1REMsIDB4MTE0MiwgMHg1NURGLCAweDExNDAsIDB4NTVFMywgMHgwODlBLCAweDU1RTQsIDB4MTE0MywNCi0gICAgMHg1NUY3LCAweDExNDYsIDB4NTVGOSwgMHgxMTRCLCAweDU1RkQsIDB4MTE0OSwgMHg1NUZFLCAweDExNDgsDQotICAgIDB4NTYwNiwgMHgwQjcwLCAweDU2MDgsIDB4MzgzQywgMHg1NjA5LCAweDA1NDUsIDB4NTYwRSwgMHgzODNELA0KLSAgICAweDU2MEYsIDB4MzgzRSwgMHg1NjE0LCAweDExNDUsIDB4NTYxNiwgMHgxMTQ3LCAweDU2MTcsIDB4MDk5MCwNCi0gICAgMHg1NjE4LCAweDA0RDUsIDB4NTYxQiwgMHgxMTRBLCAweDU2MjAsIDB4M0MxRCwgMHg1NjI5LCAweDA1NUUsDQotICAgIDB4NTYyRiwgMHgxMTU1LCAweDU2MzEsIDB4MDlFNCwgMHg1NjMyLCAweDExNTEsIDB4NTYzNCwgMHgxMTRGLA0KLSAgICAweDU2MzYsIDB4MTE1MCwgMHg1NjM3LCAweDM4M0YsIDB4NTYzOCwgMHgxMTUyLCAweDU2M0YsIDB4Mzg0MCwNCi0gICAgMHg1NjQyLCAweDA0REYsIDB4NTY0OSwgMHgzODQxLCAweDU2NEIsIDB4Mzg0MiwgMHg1NjRDLCAweDBBQkIsDQotICAgIDB4NTY0RSwgMHgxMTRDLCAweDU2NEYsIDB4Mzg0MywgMHg1NjUwLCAweDExNEQsIDB4NTY1MywgMHgxRjFCLA0KLSAgICAweDU2NUIsIDB4MDVEOCwgMHg1NjY0LCAweDExNTQsIDB4NTY2NiwgMHgzODQ0LCAweDU2NjgsIDB4MDYyQiwNCi0gICAgMHg1NjY5LCAweDM4NDUsIDB4NTY2QSwgMHgxMTU3LCAweDU2NkIsIDB4MTE1MywgMHg1NjZDLCAweDExNTYsDQotICAgIDB4NTY2RiwgMHgzODQ2LCAweDU2NzEsIDB4Mzg0NywgMHg1NjcyLCAweDM4NDgsIDB4NTY3NCwgMHgwREZFLA0KLSAgICAweDU2NzYsIDB4M0MzMywgMHg1Njc4LCAweDBDQUQsIDB4NTY3QSwgMHgwRDRDLCAweDU2ODAsIDB4MTE1OSwNCi0gICAgMHg1Njg2LCAweDExNTgsIDB4NTY4NywgMHgwNUEzLCAweDU2OEEsIDB4MTE1QSwgMHg1NjhGLCAweDExNUQsDQotICAgIDB4NTY5NCwgMHgxMTVDLCAweDU2OTUsIDB4Mzg0OSwgMHg1Njk5LCAweDFERTYsIDB4NTY5QSwgMHgzODRBLA0KLSAgICAweDU2QTAsIDB4MTE1QiwgMHg1NkEyLCAweDBDRUYsIDB4NTZBNSwgMHgxMTVFLCAweDU2QUMsIDB4Mzg0QiwNCi0gICAgMHg1NkFELCAweDM4NEMsIDB4NTZBRSwgMHgxMTVGLCAweDU2QjEsIDB4Mzg0RCwgMHg1NkI0LCAweDExNjEsDQotICAgIDB4NTZCNiwgMHgxMTYwLCAweDU2QkMsIDB4MTE2MywgMHg1NkMwLCAweDExNjYsIDB4NTZDMSwgMHgxMTY0LA0KLSAgICAweDU2QzIsIDB4MTE2MiwgMHg1NkMzLCAweDExNjUsIDB4NTZDOCwgMHgxMTY3LCAweDU2QzksIDB4Mzg0RSwNCi0gICAgMHg1NkNBLCAweDFFNUEsIDB4NTZDRSwgMHgxMTY4LCAweDU2RDEsIDB4MTE2OSwgMHg1NkQzLCAweDExNkEsDQotICAgIDB4NTZENywgMHgxMTZCLCAweDU2RDgsIDB4MTA3QywgMHg1NkRBLCAweDA5MjgsIDB4NTZEQiwgMHgwODlCLA0KLSAgICAweDU2REQsIDB4Mzg0RiwgMHg1NkRFLCAweDA1NzMsIDB4NTZFMCwgMHgwNEJDLCAweDU2RTMsIDB4MEI4MiwNCi0gICAgMHg1NkU0LCAweDM4NTAsIDB4NTZFRSwgMHgxMTZDLCAweDU2RjAsIDB4MDgxNCwgMHg1NkYyLCAweDA0OTMsDQotICAgIDB4NTZGMywgMHgwQTI0LCAweDU2RjksIDB4MTE2RCwgMHg1NkZBLCAweDA3N0IsIDB4NTZGRCwgMHgwODAzLA0KLSAgICAweDU2RkYsIDB4MTE2RiwgMHg1NzAwLCAweDExNkUsIDB4NTcwMywgMHgwRTMwLCAweDU3MDQsIDB4MTE3MCwNCi0gICAgMHg1NzA4LCAweDExNzIsIDB4NTcwOSwgMHgxMTcxLCAweDU3MEEsIDB4Mzg1MSwgMHg1NzBCLCAweDExNzMsDQotICAgIDB4NTcwRCwgMHgxMTc0LCAweDU3MEYsIDB4MDc0RCwgMHg1NzEyLCAweDA1MDIsIDB4NTcxMywgMHgxMTc1LA0KLSAgICAweDU3MTUsIDB4Mzg1MiwgMHg1NzE2LCAweDExNzcsIDB4NTcxOCwgMHgxMTc2LCAweDU3MUMsIDB4MTE3OSwNCi0gICAgMHg1NzFGLCAweDBDNTQsIDB4NTcyMSwgMHgzNjgwLCAweDU3MjMsIDB4Mzg1MywgMHg1NzI2LCAweDExN0EsDQotICAgIDB4NTcyNywgMHgwNDc5LCAweDU3MjgsIDB4MDg0RiwgMHg1NzJELCAweDA3MTMsIDB4NTcyRiwgMHgzODU0LA0KLSAgICAweDU3MzAsIDB4MEI4RCwgMHg1NzMzLCAweDM4NTUsIDB4NTczNCwgMHgzODU2LCAweDU3MzcsIDB4MTE3QiwNCi0gICAgMHg1NzM4LCAweDExN0MsIDB4NTczQiwgMHgxMTdFLCAweDU3NDAsIDB4MTE3RiwgMHg1NzQyLCAweDA4NTQsDQotICAgIDB4NTc0NywgMHgwNkM5LCAweDU3NEEsIDB4MEU2NSwgMHg1NzRDLCAweDM4NTcsIDB4NTc0RSwgMHgxMTdELA0KLSAgICAweDU3NEYsIDB4MTE4MCwgMHg1NzUwLCAweDA4MzEsIDB4NTc1MSwgMHgwN0I1LCAweDU3NTksIDB4MjBFMCwNCi0gICAgMHg1NzYxLCAweDExODQsIDB4NTc2NCwgMHgwODE1LCAweDU3NjUsIDB4MjBFMSwgMHg1NzY2LCAweDBCNzEsDQotICAgIDB4NTc2OSwgMHgxMTgxLCAweDU3NkEsIDB4MEJGNiwgMHg1NzcwLCAweDM4NTgsIDB4NTc3RiwgMHgxMTg1LA0KLSAgICAweDU3ODIsIDB4MEEyOCwgMHg1Nzg4LCAweDExODMsIDB4NTc4OSwgMHgxMTg2LCAweDU3OEIsIDB4MDcxNSwNCi0gICAgMHg1NzhDLCAweDM4NTksIDB4NTc5MywgMHgxMTg3LCAweDU3OUMsIDB4Mzg1QSwgMHg1N0EwLCAweDExODgsDQotICAgIDB4NTdBMiwgMHgwN0I2LCAweDU3QTMsIDB4MDU5RSwgMHg1N0E0LCAweDExOEEsIDB4NTdBQSwgMHgxMThCLA0KLSAgICAweDU3QUMsIDB4MjBFMiwgMHg1N0IwLCAweDExOEMsIDB4NTdCMywgMHgxMTg5LCAweDU3QjgsIDB4Mzg1QiwNCi0gICAgMHg1N0MwLCAweDExODIsIDB4NTdDMywgMHgxMThELCAweDU3QzYsIDB4MTE4RSwgMHg1N0M3LCAweDIwRTQsDQotICAgIDB4NTdDOCwgMHgyMEUzLCAweDU3Q0IsIDB4MEU5MiwgMHg1N0NFLCAweDA5RDMsIDB4NTdEMiwgMHgxMTkwLA0KLSAgICAweDU3RDMsIDB4MTE5MSwgMHg1N0Q0LCAweDExOEYsIDB4NTdENiwgMHgxMTkzLCAweDU3REMsIDB4MENFRSwNCi0gICAgMHg1N0RGLCAweDA0QUMsIDB4NTdFMCwgMHgwREM4LCAweDU3RTMsIDB4MTE5NCwgMHg1N0U2LCAweDM4NUMsDQotICAgIDB4NTdFRCwgMHgzODVELCAweDU3RjQsIDB4MDlFNSwgMHg1N0Y1LCAweDM4NUUsIDB4NTdGNiwgMHgzODVGLA0KLSAgICAweDU3RjcsIDB4MDhFNSwgMHg1N0Y5LCAweDBEMTMsIDB4NTdGQSwgMHgwNjJDLCAweDU3RkMsIDB4MDg1QiwNCi0gICAgMHg1N0ZGLCAweDM4NjAsIDB4NTgwMCwgMHgwRTg3LCAweDU4MDIsIDB4MEM4QSwgMHg1ODA1LCAweDA3NEUsDQotICAgIDB4NTgwNiwgMHgwQjJGLCAweDU4MDksIDB4Mzg2MSwgMHg1ODBBLCAweDExOTIsIDB4NTgwQiwgMHgxMTk1LA0KLSAgICAweDU4MTUsIDB4MEIyNCwgMHg1ODE5LCAweDExOTYsIDB4NTgxRCwgMHgxMTk3LCAweDU4MjAsIDB4Mzg2MiwNCi0gICAgMHg1ODIxLCAweDExOTksIDB4NTgyNCwgMHgwQzA1LCAweDU4MkEsIDB4MDVFQSwgMHg1ODJGLCAweDFEMzIsDQotICAgIDB4NTgzMCwgMHgwNTAzLCAweDU4MzEsIDB4MEU0MywgMHg1ODMyLCAweDM4NjMsIDB4NTgzNCwgMHgwOUQ0LA0KLSAgICAweDU4MzUsIDB4MEM0MiwgMHg1ODNBLCAweDA4NTYsIDB4NTgzRCwgMHgxMTlGLCAweDU4NDAsIDB4MEUwRCwNCi0gICAgMHg1ODQxLCAweDBGQTUsIDB4NTg0QSwgMHgwNTc0LCAweDU4NEIsIDB4MTE5QiwgMHg1ODUxLCAweDBBQkMsDQotICAgIDB4NTg1MiwgMHgxMTlFLCAweDU4NTQsIDB4MEM1RCwgMHg1ODU3LCAweDBDNDMsIDB4NTg1OCwgMHgwQzVFLA0KLSAgICAweDU4NTksIDB4MEQ0RCwgMHg1ODVBLCAweDBCRTksIDB4NTg1RSwgMHgwODM5LCAweDU4NjEsIDB4MUU0NywNCi0gICAgMHg1ODYyLCAweDExOUEsIDB4NTg2OSwgMHgwNTE4LCAweDU4NkIsIDB4MEMzMCwgMHg1ODcwLCAweDExOUMsDQotICAgIDB4NTg3MiwgMHgxMTk4LCAweDU4NzUsIDB4MEExNiwgMHg1ODc5LCAweDExQTAsIDB4NTg3QywgMHgzODY0LA0KLSAgICAweDU4N0UsIDB4MDk1OCwgMHg1ODgwLCAweDM4NjUsIDB4NTg4MywgMHgwNkE1LCAweDU4ODUsIDB4MTFBMSwNCi0gICAgMHg1ODkzLCAweDBFMzgsIDB4NTg5NywgMHgwQUZGLCAweDU4OUMsIDB4MEJFMiwgMHg1ODlFLCAweDIwRTcsDQotICAgIDB4NTg5RiwgMHgxMUEzLCAweDU4QTgsIDB4MEU3RCwgMHg1OEE5LCAweDM4NjYsIDB4NThBQiwgMHgxMUE0LA0KLSAgICAweDU4QUUsIDB4MTFBOSwgMHg1OEIyLCAweDIwRTgsIDB4NThCMywgMHgwREZGLCAweDU4QjgsIDB4MTFBOCwNCi0gICAgMHg1OEI5LCAweDExQTIsIDB4NThCQSwgMHgxMUE1LCAweDU4QkIsIDB4MTFBNywgMHg1OEJFLCAweDA4MTYsDQotICAgIDB4NThDMSwgMHgwRTE5LCAweDU4QzUsIDB4MTFBQSwgMHg1OEM3LCAweDBCODMsIDB4NThDQSwgMHgwNTc1LA0KLSAgICAweDU4Q0MsIDB4MDlENSwgMHg1OENFLCAweDM4NjcsIDB4NThEMCwgMHgzODY4LCAweDU4RDEsIDB4MTFBQywNCi0gICAgMHg1OEQzLCAweDExQUIsIDB4NThENCwgMHgzODY5LCAweDU4RDUsIDB4MDdGQSwgMHg1OEQ3LCAweDExQUQsDQotICAgIDB4NThEOCwgMHgxMUFGLCAweDU4RDksIDB4MTFBRSwgMHg1OERBLCAweDM4NkEsIDB4NThEQywgMHgxMUIxLA0KLSAgICAweDU4REUsIDB4MTFBNiwgMHg1OERGLCAweDExQjMsIDB4NThFNCwgMHgxMUIyLCAweDU4RTUsIDB4MTFCMCwNCi0gICAgMHg1OEU5LCAweDM4NkIsIDB4NThFQiwgMHgwODlDLCAweDU4RUMsIDB4MEExNywgMHg1OEVFLCAweDBBRDYsDQotICAgIDB4NThFRiwgMHgxMUI0LCAweDU4RjAsIDB4MEE2MCwgMHg1OEYxLCAweDA0QjEsIDB4NThGMiwgMHgwRDFBLA0KLSAgICAweDU4RjcsIDB4MEJGNywgMHg1OEY5LCAweDExQjYsIDB4NThGQSwgMHgxMUI1LCAweDU4RkIsIDB4MTFCNywNCi0gICAgMHg1OEZDLCAweDExQjgsIDB4NThGRCwgMHgxMUI5LCAweDU5MDIsIDB4MTFCQSwgMHg1OTA5LCAweDBFMjEsDQotICAgIDB4NTkwQSwgMHgxMUJCLCAweDU5MEIsIDB4MjBFOSwgMHg1OTBDLCAweDM4NkMsIDB4NTkwRiwgMHgwNTQ2LA0KLSAgICAweDU5MTAsIDB4MTFCQywgMHg1OTE1LCAweDBGMjYsIDB4NTkxNiwgMHgwNThFLCAweDU5MTgsIDB4MTBERSwNCi0gICAgMHg1OTE5LCAweDA5NTIsIDB4NTkxQSwgMHgwQjFGLCAweDU5MUIsIDB4MTFCRCwgMHg1OTFDLCAweDBFRjcsDQotICAgIDB4NTkyMiwgMHgwRUMwLCAweDU5MjQsIDB4Mzg2RCwgMHg1OTI1LCAweDExQkYsIDB4NTkyNywgMHgwQjQ3LA0KLSAgICAweDU5MjksIDB4MEMzMSwgMHg1OTJBLCAweDBCMjAsIDB4NTkyQiwgMHgwREM5LCAweDU5MkMsIDB4MTFDMCwNCi0gICAgMHg1OTJELCAweDExQzEsIDB4NTkyRSwgMHgwNTFELCAweDU5MkYsIDB4Mzg2RSwgMHg1OTMxLCAweDA4RTYsDQotICAgIDB4NTkzMiwgMHgxMUMyLCAweDU5MzcsIDB4MDQ5NCwgMHg1OTM4LCAweDExQzMsIDB4NTkzOSwgMHgzNzI1LA0KLSAgICAweDU5M0UsIDB4MTFDNCwgMHg1OTQ0LCAweDA1MDQsIDB4NTk0NywgMHgwNjJELCAweDU5NDgsIDB4MENCOCwNCi0gICAgMHg1OTQ5LCAweDBFNDQsIDB4NTk0RSwgMHgxMUM4LCAweDU5NEYsIDB4MEFENywgMHg1OTUwLCAweDExQzcsDQotICAgIDB4NTk1MSwgMHgwNzE2LCAweDU5NTMsIDB4MjBFQSwgMHg1OTU0LCAweDBFODksIDB4NTk1NSwgMHgxMUM2LA0KLSAgICAweDU5NTcsIDB4MEM1RiwgMHg1OTU4LCAweDExQ0EsIDB4NTk1QSwgMHgxMUM5LCAweDU5NUIsIDB4MjBFQiwNCi0gICAgMHg1OTVELCAweDIwRUMsIDB4NTk2MCwgMHgxMUNDLCAweDU5NjEsIDB4Mzg2RiwgMHg1OTYyLCAweDExQ0IsDQotICAgIDB4NTk2MywgMHgyMEVELCAweDU5NjUsIDB4MDUxRSwgMHg1OTY3LCAweDExQ0QsIDB4NTk2OCwgMHgwOTkxLA0KLSAgICAweDU5NjksIDB4MTFDRiwgMHg1OTZBLCAweDBCNjMsIDB4NTk2QywgMHgxMUNFLCAweDU5NkQsIDB4Mzg3MCwNCi0gICAgMHg1OTZFLCAweDBFMDMsIDB4NTk3MywgMHgwOTgxLCAweDU5NzQsIDB4MEM1NSwgMHg1OTc4LCAweDExRDAsDQotICAgIDB4NTk3RCwgMHgwN0I3LCAweDU5ODEsIDB4MTFEMSwgMHg1OTgyLCAweDBDRDcsIDB4NTk4MywgMHgwRDcyLA0KLSAgICAweDU5ODQsIDB4MEVERCwgMHg1OThBLCAweDBDREIsIDB4NTk4RCwgMHgxMURBLCAweDU5OTMsIDB4MDY1MiwNCi0gICAgMHg1OTk2LCAweDBGMkYsIDB4NTk5OSwgMHgwRUJCLCAweDU5OUIsIDB4MTIzOSwgMHg1OTlELCAweDExRDIsDQotICAgIDB4NTlBMywgMHgxMUQ1LCAweDU5QTQsIDB4MjBFRSwgMHg1OUE1LCAweDBCMjUsIDB4NTlBOCwgMHgwRTY2LA0KLSAgICAweDU5QUMsIDB4MEM0NCwgMHg1OUIyLCAweDExRDYsIDB4NTlCOSwgMHgwRTkzLCAweDU5QkEsIDB4MjBFRiwNCi0gICAgMHg1OUJCLCAweDA4M0EsIDB4NTlCRSwgMHgwOTkyLCAweDU5QzYsIDB4MTFENywgMHg1OUM5LCAweDA4OUUsDQotICAgIDB4NTlDQSwgMHgzODcxLCAweDU5Q0IsIDB4MDg5RCwgMHg1OUQwLCAweDA0N0QsIDB4NTlEMSwgMHgwNzdDLA0KLSAgICAweDU5RDIsIDB4Mzg3MiwgMHg1OUQzLCAweDBBNEYsIDB4NTlENCwgMHgwNDk1LCAweDU5RDksIDB4MTFEQiwNCi0gICAgMHg1OURBLCAweDExREMsIDB4NTlEQywgMHgxMUQ5LCAweDU5REQsIDB4Mzg3MywgMHg1OUUzLCAweDM4NzQsDQotICAgIDB4NTlFNCwgMHgzODc1LCAweDU5RTUsIDB4MDREQSwgMHg1OUU2LCAweDA1RUIsIDB4NTlFOCwgMHgxMUQ4LA0KLSAgICAweDU5RUEsIDB4MEVEMSwgMHg1OUVCLCAweDBEQTMsIDB4NTlFQywgMHgzNkFELCAweDU5RjYsIDB4MDQ2QywNCi0gICAgMHg1OUZCLCAweDA0QkQsIDB4NTlGRiwgMHgwODlGLCAweDVBMDEsIDB4MDQ5NiwgMHg1QTAzLCAweDA0NjcsDQotICAgIDB4NUEwNCwgMHgzODc2LCAweDVBMDksIDB4MTFFMSwgMHg1QTBDLCAweDM4NzcsIDB4NUExMSwgMHgxMURGLA0KLSAgICAweDVBMTgsIDB4MEVDOCwgMHg1QTFBLCAweDExRTIsIDB4NUExQiwgMHgzNUMxLCAweDVBMUMsIDB4MTFFMCwNCi0gICAgMHg1QTFGLCAweDExREUsIDB4NUEyMCwgMHgwOUY3LCAweDVBMjMsIDB4Mzg3OCwgMHg1QTI1LCAweDExREQsDQotICAgIDB4NUEyOSwgMHgwRTJBLCAweDVBMkYsIDB4MDc5OCwgMHg1QTM1LCAweDExRTYsIDB4NUEzNiwgMHgxMUU3LA0KLSAgICAweDVBM0MsIDB4MDk5MywgMHg1QTQwLCAweDExRTMsIDB4NUE0MSwgMHgwRkQyLCAweDVBNDYsIDB4MEQwMiwNCi0gICAgMHg1QTQ3LCAweDM4NzksIDB4NUE0OSwgMHgxMUU1LCAweDVBNTUsIDB4Mzg3QSwgMHg1QTVBLCAweDA4MTcsDQotICAgIDB4NUE2MiwgMHgxMUU4LCAweDVBNjMsIDB4Mzg3QiwgMHg1QTY2LCAweDBEQ0EsIDB4NUE2QSwgMHgxMUU5LA0KLSAgICAweDVBNkMsIDB4MTFFNCwgMHg1QTZELCAweDM4N0MsIDB4NUE3RSwgMHgzODdELCAweDVBN0YsIDB4MEVDNywNCi0gICAgMHg1QTkyLCAweDBEMTQsIDB4NUE5QSwgMHgxMUVBLCAweDVBOUIsIDB4MERBNCwgMHg1QTlFLCAweDM4N0UsDQotICAgIDB4NUFBNywgMHgzODdGLCAweDVBQUMsIDB4Mzg4MCwgMHg1QUIzLCAweDM4ODEsIDB4NUFCQywgMHgxMUVCLA0KLSAgICAweDVBQkQsIDB4MTFFRiwgMHg1QUJFLCAweDExRUMsIDB4NUFDMSwgMHgwNTQ3LCAweDVBQzIsIDB4MTFFRSwNCi0gICAgMHg1QUM5LCAweDA4RTcsIDB4NUFDQiwgMHgxMUVELCAweDVBQ0MsIDB4MDc0RiwgMHg1QUQwLCAweDExRkIsDQotICAgIDB4NUFENiwgMHgxMUY0LCAweDVBRDcsIDB4MTFGMSwgMHg1QUUwLCAweDM4ODIsIDB4NUFFMSwgMHgwQkEyLA0KLSAgICAweDVBRTMsIDB4MTFGMCwgMHg1QUU2LCAweDExRjIsIDB4NUFFOSwgMHgxMUYzLCAweDVBRkEsIDB4MTFGNSwNCi0gICAgMHg1QUZCLCAweDExRjYsIDB4NUIwMCwgMHgzODgzLCAweDVCMDksIDB4MDYyRSwgMHg1QjBCLCAweDExRjgsDQotICAgIDB4NUIwQywgMHgxMUY3LCAweDVCMTYsIDB4MTFGOSwgMHg1QjE5LCAweDM4ODQsIDB4NUIyMiwgMHgwOUQ2LA0KLSAgICAweDVCMjUsIDB4Mzg4NSwgMHg1QjJBLCAweDExRkMsIDB4NUIyQywgMHgwQkY4LCAweDVCMkQsIDB4Mzg4NiwNCi0gICAgMHg1QjMwLCAweDA0RTcsIDB4NUIzMiwgMHgxMUZBLCAweDVCMzYsIDB4MTFGRCwgMHg1QjNFLCAweDExRkUsDQotICAgIDB4NUI0MCwgMHgxMjAxLCAweDVCNDEsIDB4Mzg4NywgMHg1QjQzLCAweDExRkYsIDB4NUI0NSwgMHgxMjAwLA0KLSAgICAweDVCNTAsIDB4MDhBMCwgMHg1QjUxLCAweDEyMDIsIDB4NUI1NCwgMHgwN0I4LCAweDVCNTUsIDB4MTIwMywNCi0gICAgMHg1QjU2LCAweDIwRjAsIDB4NUI1NywgMHgwOEM4LCAweDVCNTgsIDB4MEIxOCwgMHg1QjVBLCAweDEyMDQsDQotICAgIDB4NUI1QiwgMHgxMjA1LCAweDVCNUMsIDB4MDhBOCwgMHg1QjVELCAweDA3QjksIDB4NUI1RiwgMHgwRURFLA0KLSAgICAweDVCNjMsIDB4MDY0MiwgMHg1QjY0LCAweDA3N0QsIDB4NUI2NSwgMHgxMjA2LCAweDVCNjYsIDB4MDVCNiwNCi0gICAgMHg1QjY5LCAweDEyMDcsIDB4NUI2QiwgMHgwQjE5LCAweDVCNzAsIDB4MTIwOCwgMHg1QjcxLCAweDEyMzAsDQotICAgIDB4NUI3MywgMHgxMjA5LCAweDVCNzUsIDB4MTIwQSwgMHg1Qjc4LCAweDEyMEIsIDB4NUI3QSwgMHgxMjBELA0KLSAgICAweDVCN0MsIDB4Mzg4OCwgMHg1QjdFLCAweDM4ODksIDB4NUI3RiwgMHgzODhBLCAweDVCODAsIDB4MTIwRSwNCi0gICAgMHg1QjgyLCAweDM2MTAsIDB4NUI4MywgMHgxMjBGLCAweDVCODUsIDB4MEI1MCwgMHg1Qjg3LCAweDA0QzksDQotICAgIDB4NUI4OCwgMHgwOTE1LCAweDVCODksIDB4MDQ4NiwgMHg1QjhBLCAweDM4OEIsIDB4NUI4QiwgMHgwQUQ5LA0KLSAgICAweDVCOEMsIDB4MDVFQywgMHg1QjhELCAweDA4RTEsIDB4NUI4RiwgMHgwN0JBLCAweDVCOTUsIDB4MEM2MCwNCi0gICAgMHg1Qjk3LCAweDA5MkIsIDB4NUI5OCwgMHgwNUVELCAweDVCOTksIDB4MEJBNiwgMHg1QjlBLCAweDBDMDYsDQotICAgIDB4NUI5QiwgMHgwNDdDLCAweDVCOUMsIDB4MDY1MywgMHg1QjlELCAweDBFNDUsIDB4NUI5RiwgMHgwOEVFLA0KLSAgICAweDVCQTIsIDB4MDY2QywgMHg1QkEzLCAweDBBOEYsIDB4NUJBNCwgMHgwOEU4LCAweDVCQTUsIDB4MEYxMiwNCi0gICAgMHg1QkE2LCAweDEyMTAsIDB4NUJBRSwgMHgwNjc2LCAweDVCQjAsIDB4MDgzQiwgMHg1QkIzLCAweDA1OTAsDQotICAgIDB4NUJCNCwgMHgwNTA1LCAweDVCQjUsIDB4MDk5NCwgMHg1QkI2LCAweDA1NDgsIDB4NUJCOCwgMHgxMjExLA0KLSAgICAweDVCQjksIDB4MEYzMCwgMHg1QkJGLCAweDA5NTMsIDB4NUJDMCwgMHgyMEYxLCAweDVCQzIsIDB4MDkxMCwNCi0gICAgMHg1QkMzLCAweDEyMTIsIDB4NUJDNCwgMHgwNjJGLCAweDVCQzUsIDB4MENBQSwgMHg1QkM2LCAweDBFQjUsDQotICAgIDB4NUJDNywgMHgxMjEzLCAweDVCQzksIDB4MTIxNCwgMHg1QkNDLCAweDBEQ0IsIDB4NUJEMCwgMHgxMjE2LA0KLSAgICAweDVCRDIsIDB4MDVFNCwgMHg1QkQzLCAweDA2RUYsIDB4NUJENCwgMHgxMjE1LCAweDVCRDgsIDB4MjBGMywNCi0gICAgMHg1QkRCLCAweDA1RUUsIDB4NUJERCwgMHgwOUY4LCAweDVCREUsIDB4MTIxQSwgMHg1QkRGLCAweDA4NkYsDQotICAgIDB4NUJFMSwgMHgwNTQ5LCAweDVCRTIsIDB4MTIxOSwgMHg1QkU0LCAweDEyMTcsIDB4NUJFNSwgMHgxMjFCLA0KLSAgICAweDVCRTYsIDB4MTIxOCwgMHg1QkU3LCAweDBDRTEsIDB4NUJFOCwgMHgxNDhFLCAweDVCRTksIDB4MDlGOSwNCi0gICAgMHg1QkVCLCAweDEyMUMsIDB4NUJFQywgMHgyMEY0LCAweDVCRUUsIDB4MEY4OCwgMHg1QkYwLCAweDEyMUQsDQotICAgIDB4NUJGMywgMHgxMjFGLCAweDVCRjUsIDB4MEJCQywgMHg1QkY2LCAweDEyMUUsIDB4NUJGOCwgMHgwQTQ3LA0KLSAgICAweDVCRkEsIDB4MDhDOSwgMHg1QkZFLCAweDBCMzAsIDB4NUJGRiwgMHgwOTIzLCAweDVDMDEsIDB4MERFNywNCi0gICAgMHg1QzAyLCAweDBBOTAsIDB4NUMwNCwgMHgwOEY5LCAweDVDMDUsIDB4MTIyMCwgMHg1QzA2LCAweDA5OTUsDQotICAgIDB4NUMwNywgMHgxMjIxLCAweDVDMDgsIDB4MTIyMiwgMHg1QzA5LCAweDA0OTcsIDB4NUMwQSwgMHgwQjFBLA0KLSAgICAweDVDMEIsIDB4MEExOCwgMHg1QzBELCAweDEyMjMsIDB4NUMwRSwgMHgwQzhCLCAweDVDMEYsIDB4MDk5NiwNCi0gICAgMHg1QzExLCAweDA5OTcsIDB4NUMxMywgMHgxMjI0LCAweDVDMTQsIDB4MzcyQSwgMHg1QzE2LCAweDBBOTEsDQotICAgIDB4NUMxOSwgMHgzNjBCLCAweDVDMUEsIDB4MDk5OCwgMHg1QzFFLCAweDIwRjUsIDB4NUMyMCwgMHgxMjI1LA0KLSAgICAweDVDMjIsIDB4MTIyNiwgMHg1QzIzLCAweDM4OEMsIDB4NUMyNCwgMHgwRUVDLCAweDVDMjgsIDB4MTIyNywNCi0gICAgMHg1QzJCLCAweDM4OEQsIDB4NUMyRCwgMHgwNkJFLCAweDVDMzAsIDB4Mzg4RSwgMHg1QzMxLCAweDA5MkMsDQotICAgIDB4NUMzOCwgMHgxMjI4LCAweDVDMzksIDB4MTIyOSwgMHg1QzNBLCAweDA5MDgsIDB4NUMzQiwgMHgwOUYyLA0KLSAgICAweDVDM0MsIDB4MENDQywgMHg1QzNELCAweDBBMUEsIDB4NUMzRSwgMHgwRDhDLCAweDVDM0YsIDB4MENEOCwNCi0gICAgMHg1QzQwLCAweDA2QzEsIDB4NUM0MSwgMHgxMjJBLCAweDVDNDUsIDB4MDY4OSwgMHg1QzQ2LCAweDEyMkIsDQotICAgIDB4NUM0OCwgMHgwNkY2LCAweDVDNEEsIDB4MENBNywgMHg1QzRCLCAweDA1MzAsIDB4NUM0RCwgMHgwOEExLA0KLSAgICAweDVDNEUsIDB4MTIyQywgMHg1QzRGLCAweDEyMkYsIDB4NUM1MCwgMHgxMjJFLCAweDVDNTEsIDB4MDZGNSwNCi0gICAgMHg1QzUzLCAweDEyMkQsIDB4NUM1NSwgMHgwQzMyLCAweDVDNUIsIDB4MUU5MiwgMHg1QzVFLCAweDBCMTAsDQotICAgIDB4NUM2MCwgMHgwQzQ1LCAweDVDNjEsIDB4MDhGNCwgMHg1QzYyLCAweDFFMEQsIDB4NUM2MywgMHgzODhGLA0KLSAgICAweDVDNjQsIDB4MEFEQSwgMHg1QzY1LCAweDBGNjQsIDB4NUM2OSwgMHgzODkwLCAweDVDNkMsIDB4MTIzMSwNCi0gICAgMHg1QzZFLCAweDEyMzIsIDB4NUM2RiwgMHgwQ0FFLCAweDVDNzEsIDB4MDg4MSwgMHg1Qzc2LCAweDEyMzQsDQotICAgIDB4NUM3OSwgMHgxMjM1LCAweDVDN0MsIDB4Mzg5MSwgMHg1QzhDLCAweDEyMzYsIDB4NUM5MCwgMHgwNjMwLA0KLSAgICAweDVDOTEsIDB4MTIzNywgMHg1Qzk0LCAweDEyMzgsIDB4NUNBMSwgMHgwNTJDLCAweDVDQTYsIDB4MjBGNiwNCi0gICAgMHg1Q0E4LCAweDBBQkQsIDB4NUNBOSwgMHgwNjIwLCAweDVDQUIsIDB4MTIzQSwgMHg1Q0FDLCAweDBFQjQsDQotICAgIDB4NUNCMSwgMHgwQjMyLCAweDVDQjMsIDB4MDVCNywgMHg1Q0I2LCAweDEyM0MsIDB4NUNCNywgMHgxMjNFLA0KLSAgICAweDVDQjgsIDB4MDYxQiwgMHg1Q0JBLCAweDIwRjcsIDB4NUNCQiwgMHgxMjNCLCAweDVDQkMsIDB4MTIzRCwNCi0gICAgMHg1Q0JFLCAweDEyNDAsIDB4NUNDNSwgMHgxMjNGLCAweDVDQzcsIDB4MTI0MSwgMHg1Q0NCLCAweDM4OTIsDQotICAgIDB4NUNEMiwgMHgzODkzLCAweDVDRDksIDB4MTI0MiwgMHg1Q0UwLCAweDBDOTUsIDB4NUNFMSwgMHgwNkE2LA0KLSAgICAweDVDRTYsIDB4MzcyQywgMHg1Q0U4LCAweDA1NjUsIDB4NUNFOSwgMHgxMjQzLCAweDVDRUEsIDB4MTI0OCwNCi0gICAgMHg1Q0VELCAweDEyNDYsIDB4NUNFRiwgMHgwRTQ3LCAweDVDRjAsIDB4MEU0NiwgMHg1Q0Y0LCAweDM4OTQsDQotICAgIDB4NUNGNSwgMHgyMEY4LCAweDVDRjYsIDB4MEM2MSwgMHg1Q0ZBLCAweDEyNDUsIDB4NUNGQiwgMHgwOTVFLA0KLSAgICAweDVDRkQsIDB4MTI0NCwgMHg1RDA3LCAweDBBMzgsIDB4NUQwQiwgMHgxMjQ5LCAweDVEMEUsIDB4MDg1QSwNCi0gICAgMHg1RDExLCAweDEyNEYsIDB4NUQxNCwgMHgxMjUwLCAweDVEMTUsIDB4MTI0QSwgMHg1RDE2LCAweDA1OTEsDQotICAgIDB4NUQxNywgMHgxMjRCLCAweDVEMTgsIDB4MTI1NCwgMHg1RDE5LCAweDEyNTMsIDB4NUQxQSwgMHgxMjUyLA0KLSAgICAweDVEMUIsIDB4MTI0RSwgMHg1RDFGLCAweDEyNEQsIDB4NUQyMiwgMHgxMjUxLCAweDVEMjQsIDB4Mzg5NSwNCi0gICAgMHg1RDI2LCAweDM4OTYsIDB4NUQyNywgMHgyMEY5LCAweDVEMjksIDB4MEU0OCwgMHg1RDQyLCAweDIwRkMsDQotICAgIDB4NUQ0MywgMHgzODk3LCAweDVENDYsIDB4Mzg5OCwgMHg1RDRBLCAweDM4OTksIDB4NUQ0QiwgMHgxMjU4LA0KLSAgICAweDVENEMsIDB4MTI1NSwgMHg1RDRFLCAweDEyNTcsIDB4NUQ1MCwgMHgwRjVDLCAweDVENTIsIDB4MTI1NiwNCi0gICAgMHg1RDUzLCAweDIwRkEsIDB4NUQ1QywgMHgxMjRDLCAweDVENjksIDB4MEEzOSwgMHg1RDZDLCAweDEyNTksDQotICAgIDB4NUQ2RCwgMHgyMEZELCAweDVENkYsIDB4MDgyNywgMHg1RDczLCAweDEyNUEsIDB4NUQ3NiwgMHgxMjVCLA0KLSAgICAweDVEODIsIDB4MTI1RSwgMHg1RDg0LCAweDEyNUQsIDB4NUQ4NywgMHgxMjVDLCAweDVEOEIsIDB4MEM2MiwNCi0gICAgMHg1RDhDLCAweDEyNDcsIDB4NUQ5MCwgMHgxMjY0LCAweDVEOTIsIDB4Mzg5QSwgMHg1RDk0LCAweDM4OUIsDQotICAgIDB4NUQ5OSwgMHgzODlDLCAweDVEOUQsIDB4MTI2MCwgMHg1REEwLCAweDM4OUQsIDB4NURBMiwgMHgxMjVGLA0KLSAgICAweDVEQUMsIDB4MTI2MSwgMHg1REFFLCAweDEyNjIsIDB4NURCMiwgMHgzQkE1LCAweDVEQjcsIDB4MTI2NSwNCi0gICAgMHg1REI4LCAweDIwRkUsIDB4NURCOSwgMHgyMEZGLCAweDVEQkEsIDB4MEZBRSwgMHg1REJDLCAweDEyNjYsDQotICAgIDB4NURCRCwgMHgxMjYzLCAweDVEQzksIDB4MTI2NywgMHg1RENDLCAweDA2MUMsIDB4NURDRCwgMHgxMjY4LA0KLSAgICAweDVERDAsIDB4MjEwMCwgMHg1REQyLCAweDEyNkEsIDB4NUREMywgMHgxMjY5LCAweDVERDYsIDB4MTI2QiwNCi0gICAgMHg1REQ4LCAweDM4OUUsIDB4NUREQiwgMHgxMjZDLCAweDVEREQsIDB4MEE5MiwgMHg1RERFLCAweDA5MkQsDQotICAgIDB4NURFMCwgMHgzODlGLCAweDVERTEsIDB4MDk2RSwgMHg1REUyLCAweDM0MzIsIDB4NURFMywgMHgwQUU1LA0KLSAgICAweDVERTUsIDB4MDdCQiwgMHg1REU2LCAweDA4MjgsIDB4NURFNywgMHgwN0JDLCAweDVERTgsIDB4MDY4QSwNCi0gICAgMHg1REVCLCAweDEyNkQsIDB4NURFRSwgMHgwODI5LCAweDVERjEsIDB4MDc3RSwgMHg1REYyLCAweDEyNkUsDQotICAgIDB4NURGMywgMHgwRUIyLCAweDVERjQsIDB4MENGOSwgMHg1REY1LCAweDEyNkYsIDB4NURGNywgMHgwN0JELA0KLSAgICAweDVERjgsIDB4MzhBMCwgMHg1REZCLCAweDA1RTgsIDB4NURGRCwgMHgwQjY1LCAweDVERkUsIDB4MDZDQSwNCi0gICAgMHg1REZGLCAweDM1RTIsIDB4NUUwMCwgMHgzOEExLCAweDVFMDIsIDB4MDhBMiwgMHg1RTAzLCAweDBEQ0QsDQotICAgIDB4NUUwNiwgMHgwRDU1LCAweDVFMEIsIDB4MTI3MCwgMHg1RTBDLCAweDA2MzEsIDB4NUUxMSwgMHgxMjczLA0KLSAgICAweDVFMTIsIDB4MzhBMiwgMHg1RTE0LCAweDM4QTMsIDB4NUUxNSwgMHgzOEE0LCAweDVFMTYsIDB4MEJCRCwNCi0gICAgMHg1RTE4LCAweDM4QTUsIDB4NUUxOSwgMHgxMjcyLCAweDVFMUEsIDB4MTI3MSwgMHg1RTFCLCAweDEyNzQsDQotICAgIDB4NUUxRCwgMHgwQzA3LCAweDVFMjUsIDB4MEEyOSwgMHg1RTJCLCAweDA4QTMsIDB4NUUyRCwgMHgwQTZFLA0KLSAgICAweDVFMkUsIDB4MzhBNiwgMHg1RTJGLCAweDBCMzMsIDB4NUUzMCwgMHgwNjNDLCAweDVFMzMsIDB4MEJCRSwNCi0gICAgMHg1RTM2LCAweDEyNzUsIDB4NUUzNywgMHgxMjc2LCAweDVFMzgsIDB4MDlENywgMHg1RTNELCAweDBFNjcsDQotICAgIDB4NUU0MCwgMHgxMjc5LCAweDVFNDMsIDB4MTI3OCwgMHg1RTQ0LCAweDEyNzcsIDB4NUU0NSwgMHgwREVGLA0KLSAgICAweDVFNDcsIDB4MTI4MCwgMHg1RTRDLCAweDBFODgsIDB4NUU0RSwgMHgxMjdBLCAweDVFNTQsIDB4MTI3QywNCi0gICAgMHg1RTU1LCAweDBFOTksIDB4NUU1NywgMHgxMjdCLCAweDVFNTgsIDB4MzhBNywgMHg1RTVGLCAweDEyN0QsDQotICAgIDB4NUU2MSwgMHgwRDNDLCAweDVFNjIsIDB4MTI3RSwgMHg1RTYzLCAweDBFMEUsIDB4NUU2NCwgMHgxMjdGLA0KLSAgICAweDVFNkIsIDB4MzhBOCwgMHg1RTZDLCAweDM4QTksIDB4NUU3MiwgMHgwNUVGLCAweDVFNzMsIDB4MEUwRiwNCi0gICAgMHg1RTc0LCAweDBDRTUsIDB4NUU3NSwgMHgxMjgxLCAweDVFNzYsIDB4MTI4MiwgMHg1RTc4LCAweDA3QkUsDQotICAgIDB4NUU3OSwgMHgwNUYwLCAweDVFN0EsIDB4MTI4MywgMHg1RTdCLCAweDA3NkMsIDB4NUU3QywgMHgwRjJFLA0KLSAgICAweDVFN0QsIDB4MEYxMywgMHg1RTdFLCAweDA2MzIsIDB4NUU3RiwgMHgxMjg1LCAweDVFODEsIDB4MEJCRiwNCi0gICAgMHg1RTgzLCAweDA3QkYsIDB4NUU4NCwgMHgwOTk5LCAweDVFODcsIDB4MEQ3MywgMHg1RThBLCAweDA5OUEsDQotICAgIDB4NUU4RiwgMHgwOTgyLCAweDVFOTUsIDB4MEMwOCwgMHg1RTk2LCAweDBFNDksIDB4NUU5NywgMHgwQzMzLA0KLSAgICAweDVFOTksIDB4MzZCMCwgMHg1RTlBLCAweDA3QzAsIDB4NUU5QywgMHgwRENFLCAweDVFQTAsIDB4MTI4NiwNCi0gICAgMHg1RUE2LCAweDBDNTMsIDB4NUVBNywgMHgwODMyLCAweDVFQTgsIDB4MzhBQSwgMHg1RUFBLCAweDM4QUIsDQotICAgIDB4NUVBQiwgMHgwNzdGLCAweDVFQUQsIDB4MEMwOSwgMHg1RUI1LCAweDA0ODcsIDB4NUVCNiwgMHgwOTc4LA0KLSAgICAweDVFQjcsIDB4MDdDMSwgMHg1RUI4LCAweDBGMzEsIDB4NUVCRSwgMHgzOEFDLCAweDVFQkYsIDB4MzhBRCwNCi0gICAgMHg1RUMxLCAweDEyODcsIDB4NUVDMiwgMHgxMjg4LCAweDVFQzMsIDB4MEQwNywgMHg1RUM4LCAweDEyODksDQotICAgIDB4NUVDOSwgMHgwRkJGLCAweDVFQ0EsIDB4MEZEMywgMHg1RUNCLCAweDM4QUUsIDB4NUVDRiwgMHgxMjhCLA0KLSAgICAweDVFRDAsIDB4MTI4QSwgMHg1RUQyLCAweDM4QUYsIDB4NUVEMywgMHgwNUE1LCAweDVFRDYsIDB4MTI4QywNCi0gICAgMHg1RURBLCAweDEyOEYsIDB4NUVEQiwgMHgxMjkwLCAweDVFREQsIDB4MTI4RSwgMHg1RURGLCAweDBEQjIsDQotICAgIDB4NUVFMCwgMHgwOTlCLCAweDVFRTEsIDB4MTI5MiwgMHg1RUUyLCAweDEyOTEsIDB4NUVFMywgMHgxMjhELA0KLSAgICAweDVFRTgsIDB4MTI5MywgMHg1RUU5LCAweDEyOTQsIDB4NUVFQywgMHgxMjk1LCAweDVFRjAsIDB4MTI5OCwNCi0gICAgMHg1RUYxLCAweDEyOTYsIDB4NUVGMywgMHgxMjk3LCAweDVFRjQsIDB4MTI5OSwgMHg1RUY2LCAweDA1MDYsDQotICAgIDB4NUVGNywgMHgwQzBBLCAweDVFRjgsIDB4MTI5QSwgMHg1RUZBLCAweDA3NTAsIDB4NUVGQiwgMHgwNTc2LA0KLSAgICAweDVFRkMsIDB4MENFQywgMHg1RUZFLCAweDEyOUIsIDB4NUVGRiwgMHgwQ0QzLCAweDVGMDEsIDB4MEUyQiwNCi0gICAgMHg1RjAzLCAweDEyOUMsIDB4NUYwNCwgMHgwRkQ0LCAweDVGMDcsIDB4MzhCMCwgMHg1RjA5LCAweDEyOUQsDQotICAgIDB4NUYwQSwgMHgwRTEwLCAweDVGMEIsIDB4MTJBMCwgMHg1RjBDLCAweDBGRkEsIDB4NUYwRCwgMHgxMDBBLA0KLSAgICAweDVGMEUsIDB4MzhCMSwgMHg1RjBGLCAweDA4REMsIDB4NUYxMCwgMHgwQ0NELCAweDVGMTEsIDB4MTJBMSwNCi0gICAgMHg1RjEzLCAweDA2NzcsIDB4NUYxNCwgMHgwQkMwLCAweDVGMTUsIDB4MDRCRSwgMHg1RjE2LCAweDEyQTIsDQotICAgIDB4NUYxNywgMHgwREY2LCAweDVGMTgsIDB4MDdDMiwgMHg1RjFCLCAweDBCOEUsIDB4NUYxQywgMHgzOEIyLA0KLSAgICAweDVGMUQsIDB4MzhCMywgMHg1RjFGLCAweDBDMEIsIDB4NUYyMSwgMHgyMTAxLCAweDVGMjIsIDB4MzhCNCwNCi0gICAgMHg1RjI1LCAweDBFRkIsIDB4NUYyNiwgMHgwNzZELCAweDVGMjcsIDB4MDc4MCwgMHg1RjI4LCAweDM4QjUsDQotICAgIDB4NUYyOSwgMHgxMkEzLCAweDVGMkQsIDB4MTJBNCwgMHg1RjJGLCAweDEyQUEsIDB4NUYzMSwgMHgwOTExLA0KLSAgICAweDVGMzQsIDB4MjEwMiwgMHg1RjM1LCAweDBCQzEsIDB4NUYzNiwgMHgzOEI2LCAweDVGMzcsIDB4MDZBNywNCi0gICAgMHg1RjM4LCAweDEyQTUsIDB4NUYzQSwgMHgzNTk4LCAweDVGM0IsIDB4MzhCNywgMHg1RjNDLCAweDBEOUQsDQotICAgIDB4NUYzRSwgMHgwQjg0LCAweDVGNDAsIDB4MzhCOCwgMHg1RjQxLCAweDEyQTYsIDB4NUY0NSwgMHgyMEIyLA0KLSAgICAweDVGNDgsIDB4MTJBNywgMHg1RjRBLCAweDA2QTgsIDB4NUY0QywgMHgxMkE4LCAweDVGNEUsIDB4MTJBOSwNCi0gICAgMHg1RjUwLCAweDM4QjksIDB4NUY1MSwgMHgxMkFCLCAweDVGNTMsIDB4MEM3MCwgMHg1RjU2LCAweDEyQUMsDQotICAgIDB4NUY1NywgMHgxMkFELCAweDVGNTgsIDB4MzhCQSwgMHg1RjU5LCAweDEyQUUsIDB4NUY1QywgMHgxMjlGLA0KLSAgICAweDVGNUQsIDB4MTI5RSwgMHg1RjYxLCAweDEyQUYsIDB4NUY2MiwgMHgwNzE3LCAweDVGNjQsIDB4MzhCQiwNCi0gICAgMHg1RjY1LCAweDM2QUMsIDB4NUY2NiwgMHgwRDk5LCAweDVGNjcsIDB4MjEwMywgMHg1RjY5LCAweDA4M0MsDQotICAgIDB4NUY2QSwgMHgwREE5LCAweDVGNkIsIDB4MEJDMiwgMHg1RjZDLCAweDBEQkQsIDB4NUY2RCwgMHgxMkIwLA0KLSAgICAweDVGNzAsIDB4MDk5QywgMHg1RjcxLCAweDA0RTgsIDB4NUY3MywgMHgxMkIxLCAweDVGNzcsIDB4MTJCMiwNCi0gICAgMHg1Rjc5LCAweDBFRkUsIDB4NUY3QywgMHgwRDc0LCAweDVGN0YsIDB4MTJCNSwgMHg1RjgwLCAweDA1MUYsDQotICAgIDB4NUY4MSwgMHgwQTUwLCAweDVGODIsIDB4MTJCNCwgMHg1RjgzLCAweDEyQjMsIDB4NUY4NCwgMHgwNzE4LA0KLSAgICAweDVGODUsIDB4MEIzNCwgMHg1Rjg3LCAweDEyQjksIDB4NUY4OCwgMHgxMkI3LCAweDVGODksIDB4MzhCQywNCi0gICAgMHg1RjhBLCAweDEyQjYsIDB4NUY4QiwgMHgwRjZGLCAweDVGOEMsIDB4MDc5OSwgMHg1RjkwLCAweDA5ODMsDQotICAgIDB4NUY5MSwgMHgxMkI4LCAweDVGOTIsIDB4MEM0NiwgMHg1RjkzLCAweDA5NDgsIDB4NUY5NywgMHgwQzk4LA0KLSAgICAweDVGOTgsIDB4MTJCQywgMHg1Rjk5LCAweDEyQkIsIDB4NUY5QywgMHgzOEJELCAweDVGOUUsIDB4MTJCQSwNCi0gICAgMHg1RkEwLCAweDEyQkQsIDB4NUZBMSwgMHgwNzlBLCAweDVGQTQsIDB4MzhCRiwgMHg1RkE3LCAweDM4QkUsDQotICAgIDB4NUZBOCwgMHgxMkJFLCAweDVGQTksIDB4MERFRSwgMHg1RkFBLCAweDA5NjUsIDB4NUZBRCwgMHgxMkJGLA0KLSAgICAweDVGQUUsIDB4MEQ4RCwgMHg1RkFGLCAweDM4QzAsIDB4NUZCMywgMHgwQzk5LCAweDVGQjQsIDB4MEJDMywNCi0gICAgMHg1RkI1LCAweDM0MzgsIDB4NUZCNywgMHgyMTA0LCAweDVGQjgsIDB4MzhDMSwgMHg1RkI5LCAweDBDMkEsDQotICAgIDB4NUZCQywgMHgxMkMwLCAweDVGQkQsIDB4MDY0NSwgMHg1RkMzLCAweDA5RkEsIDB4NUZDNCwgMHgzOEMyLA0KLSAgICAweDVGQzUsIDB4MEQ5RSwgMHg1RkM5LCAweDM4QzMsIDB4NUZDQywgMHgwNjMzLCAweDVGQ0QsIDB4MENEQywNCi0gICAgMHg1RkQ2LCAweDEyQzEsIDB4NUZENywgMHgwOEE0LCAweDVGRDgsIDB4MEU2OCwgMHg1RkQ5LCAweDBFNjksDQotICAgIDB4NUZEQywgMHgwNTIwLCAweDVGREQsIDB4MTJDNiwgMHg1RkRFLCAweDIxMDUsIDB4NUZFMCwgMHgwQkE3LA0KLSAgICAweDVGRTEsIDB4MzhDNCwgMHg1RkU0LCAweDEyQzMsIDB4NUZFOSwgMHgzOEM1LCAweDVGRUIsIDB4MDU3NywNCi0gICAgMHg1RkVELCAweDM4QzYsIDB4NUZGMCwgMHgxMkY2LCAweDVGRjEsIDB4MTJDNSwgMHg1RkY1LCAweDBDRTYsDQotICAgIDB4NUZGOCwgMHgxMkM0LCAweDVGRkIsIDB4MTJDMiwgMHg1RkZDLCAweDM4QzcsIDB4NUZGRCwgMHgwODBDLA0KLSAgICAweDVGRkYsIDB4MTJDOCwgMHg2MDBFLCAweDEyQ0UsIDB4NjAwRiwgMHgxMkQ0LCAweDYwMTAsIDB4MTJDQywNCi0gICAgMHg2MDEyLCAweDBDNTYsIDB4NjAxNSwgMHgxMkQxLCAweDYwMTYsIDB4MERDRiwgMHg2MDE3LCAweDM4QzgsDQotICAgIDB4NjAxOSwgMHgxMkNCLCAweDYwMUEsIDB4MzhDOSwgMHg2MDFCLCAweDEyRDAsIDB4NjAxQywgMHgwRkFGLA0KLSAgICAweDYwMUQsIDB4MDhBNSwgMHg2MDIwLCAweDBCMzUsIDB4NjAyMSwgMHgxMkM5LCAweDYwMjUsIDB4MDY3OCwNCi0gICAgMHg2MDI2LCAweDEyRDMsIDB4NjAyNywgMHgwQTUxLCAweDYwMjgsIDB4MDUwNywgMHg2MDI5LCAweDEyQ0QsDQotICAgIDB4NjAyQSwgMHgwNTc4LCAweDYwMkIsIDB4MTJEMiwgMHg2MDJGLCAweDA2QTksIDB4NjAzMSwgMHgxMkNGLA0KLSAgICAweDYwMzMsIDB4MzhDQSwgMHg2MDNBLCAweDEyRDUsIDB4NjA0MSwgMHgxMkQ3LCAweDYwNDIsIDB4MTJFMSwNCi0gICAgMHg2MDQzLCAweDEyREYsIDB4NjA0NiwgMHgxMkRDLCAweDYwNEEsIDB4MTJEQiwgMHg2MDRCLCAweDBGQzAsDQotICAgIDB4NjA0RCwgMHgxMkRELCAweDYwNTAsIDB4MDZBQSwgMHg2MDUyLCAweDA3QzMsIDB4NjA1NSwgMHgwOTg0LA0KLSAgICAweDYwNTksIDB4MTJFNCwgMHg2MDVBLCAweDEyRDYsIDB4NjA1RCwgMHgyMTA2LCAweDYwNUYsIDB4MTJEQSwNCi0gICAgMHg2MDYwLCAweDEyQ0EsIDB4NjA2MSwgMHgzOENCLCAweDYwNjIsIDB4MDU3QSwgMHg2MDYzLCAweDEyREUsDQotICAgIDB4NjA2NCwgMHgxMkUwLCAweDYwNjUsIDB4MEI4RiwgMHg2MDY4LCAweDA4MTgsIDB4NjA2OSwgMHgwNTM4LA0KLSAgICAweDYwNkEsIDB4MTJEOCwgMHg2MDZCLCAweDEyRTMsIDB4NjA2QywgMHgxMkUyLCAweDYwNkQsIDB4MDZBQiwNCi0gICAgMHg2MDZGLCAweDBCMDksIDB4NjA3MCwgMHgwNUM0LCAweDYwNzUsIDB4MDcxOSwgMHg2MDc3LCAweDEyRDksDQotICAgIDB4NjA3RiwgMHgzOENDLCAweDYwODEsIDB4MTJFNSwgMHg2MDgzLCAweDEyRTgsIDB4NjA4NCwgMHgxMkVBLA0KLSAgICAweDYwODUsIDB4MjEwNywgMHg2MDg5LCAweDA4RTksIDB4NjA4QSwgMHgyMTA4LCAweDYwOEIsIDB4MTJGMCwNCi0gICAgMHg2MDhDLCAweDBDMEMsIDB4NjA4RCwgMHgxMkU2LCAweDYwOTIsIDB4MTJFRSwgMHg2MDk0LCAweDA1NzksDQotICAgIDB4NjA5NiwgMHgxMkVDLCAweDYwOTcsIDB4MTJFRCwgMHg2MDlBLCAweDEyRTksIDB4NjA5QiwgMHgxMkVCLA0KLSAgICAweDYwOUUsIDB4MzhDRCwgMHg2MDlGLCAweDA3OUIsIDB4NjBBMCwgMHgwRjE0LCAweDYwQTMsIDB4MDVGMSwNCi0gICAgMHg2MEE0LCAweDM4Q0UsIDB4NjBBNiwgMHgwNEZCLCAweDYwQTcsIDB4MTJFRiwgMHg2MEE5LCAweDBDRjAsDQotICAgIDB4NjBBQSwgMHgwNDcxLCAweDYwQjAsIDB4MzhDRiwgMHg2MEIyLCAweDBENzUsIDB4NjBCMywgMHgxMkM3LA0KLSAgICAweDYwQjQsIDB4MTJGNSwgMHg2MEI1LCAweDEyRjksIDB4NjBCNiwgMHgwRUYxLCAweDYwQjgsIDB4MTJGMiwNCi0gICAgMHg2MEJDLCAweDBDNjMsIDB4NjBCRCwgMHgxMkY3LCAweDYwQzUsIDB4MDlEOCwgMHg2MEM2LCAweDEyRjgsDQotICAgIDB4NjBDNywgMHgwQ0FGLCAweDYwQ0IsIDB4MzhEMCwgMHg2MEQxLCAweDBGRUQsIDB4NjBEMywgMHgxMkY0LA0KLSAgICAweDYwRDUsIDB4MjEwQSwgMHg2MEQ4LCAweDEyRkEsIDB4NjBEQSwgMHgwODBELCAweDYwREIsIDB4MzhEMSwNCi0gICAgMHg2MERDLCAweDBBNkYsIDB4NjBERSwgMHgyMTA5LCAweDYwREYsIDB4MDQ5OCwgMHg2MEUwLCAweDEyRjMsDQotICAgIDB4NjBFMSwgMHgxMkYxLCAweDYwRTMsIDB4MEFEQywgMHg2MEU3LCAweDEyRTcsIDB4NjBFOCwgMHgwODgyLA0KLSAgICAweDYwRjAsIDB4MEIyNiwgMHg2MEYxLCAweDEzMDYsIDB4NjBGMiwgMHgyMTBDLCAweDYwRjMsIDB4MEFERCwNCi0gICAgMHg2MEY0LCAweDEzMDEsIDB4NjBGNiwgMHgxMkZFLCAweDYwRjcsIDB4MTJGRiwgMHg2MEY4LCAweDM4RDIsDQotICAgIDB4NjBGOSwgMHgwOTEyLCAweDYwRkEsIDB4MTMwMiwgMHg2MEZCLCAweDEzMDUsIDB4NjEwMCwgMHgxMzAwLA0KLSAgICAweDYxMDEsIDB4MDkyRiwgMHg2MTAzLCAweDEzMDMsIDB4NjEwNiwgMHgxMkZELCAweDYxMDgsIDB4MEYwOCwNCi0gICAgMHg2MTA5LCAweDBGMDcsIDB4NjEwRCwgMHgxMzA3LCAweDYxMEUsIDB4MTMwOCwgMHg2MTBGLCAweDA0OTksDQotICAgIDB4NjExMSwgMHgyMTBELCAweDYxMTIsIDB4MzhEMywgMHg2MTEzLCAweDM4RDQsIDB4NjExNCwgMHgzOEQ1LA0KLSAgICAweDYxMTUsIDB4MTJGQywgMHg2MTFBLCAweDA2RUEsIDB4NjExQiwgMHgwNDZBLCAweDYxMUMsIDB4MzhENiwNCi0gICAgMHg2MTFGLCAweDA1RjIsIDB4NjEyMCwgMHgyMTBCLCAweDYxMjEsIDB4MTMwNCwgMHg2MTI3LCAweDEzMEMsDQotICAgIDB4NjEyOCwgMHgxMzBCLCAweDYxMkMsIDB4MTMxMCwgMHg2MTMwLCAweDIxMEYsIDB4NjEzNCwgMHgxMzExLA0KLSAgICAweDYxMzcsIDB4MjEwRSwgMHg2MTNDLCAweDEzMEYsIDB4NjEzRCwgMHgxMzEyLCAweDYxM0UsIDB4MTMwQSwNCi0gICAgMHg2MTNGLCAweDEzMEUsIDB4NjE0MiwgMHgxMzEzLCAweDYxNDQsIDB4MTMxNCwgMHg2MTQ3LCAweDEzMDksDQotICAgIDB4NjE0OCwgMHgwOENBLCAweDYxNEEsIDB4MTMwRCwgMHg2MTRCLCAweDBCMzYsIDB4NjE0QywgMHgwN0M0LA0KLSAgICAweDYxNEQsIDB4MTJGQiwgMHg2MTRFLCAweDA5RkIsIDB4NjE1MywgMHgxMzIxLCAweDYxNTUsIDB4MEUzOSwNCi0gICAgMHg2MTU4LCAweDEzMTcsIDB4NjE1OSwgMHgxMzE4LCAweDYxNUEsIDB4MTMxOSwgMHg2MTVELCAweDEzMjAsDQotICAgIDB4NjE1RiwgMHgxMzFGLCAweDYxNjIsIDB4MEVBQiwgMHg2MTYzLCAweDA1RjMsIDB4NjE2NSwgMHgxMzFELA0KLSAgICAweDYxNjcsIDB4MDcxQiwgMHg2MTY4LCAweDA1OTIsIDB4NjE2QiwgMHgxMzFBLCAweDYxNkUsIDB4MEY4MCwNCi0gICAgMHg2MTZGLCAweDEzMUMsIDB4NjE3MCwgMHgwNDlBLCAweDYxNzEsIDB4MTMxRSwgMHg2MTczLCAweDEzMTUsDQotICAgIDB4NjE3NCwgMHgxMzFCLCAweDYxNzUsIDB4MTMyMiwgMHg2MTc2LCAweDA3MUEsIDB4NjE3NywgMHgxMzE2LA0KLSAgICAweDYxN0MsIDB4MzhENywgMHg2MTdFLCAweDBGNDcsIDB4NjE4MiwgMHgwRjE1LCAweDYxODcsIDB4MTMyNSwNCi0gICAgMHg2MThBLCAweDEzMjksIDB4NjE4RCwgMHgzOEQ4LCAweDYxOEUsIDB4MEIwMCwgMHg2MTkwLCAweDBGQzEsDQotICAgIDB4NjE5MSwgMHgxMzJBLCAweDYxOTQsIDB4MTMyNywgMHg2MTk2LCAweDEzMjQsIDB4NjE5OCwgMHgyMTEwLA0KLSAgICAweDYxOTksIDB4MTMyMywgMHg2MTlBLCAweDEzMjgsIDB4NjE5RiwgMHgzOEQ5LCAweDYxQTQsIDB4MEUwMCwNCi0gICAgMHg2MUE3LCAweDBDOEMsIDB4NjFBOCwgMHgzOERBLCAweDYxQTksIDB4MDcxQywgMHg2MUFCLCAweDEzMkIsDQotICAgIDB4NjFBQywgMHgxMzI2LCAweDYxQUUsIDB4MTMyQywgMHg2MUIyLCAweDA3NTEsIDB4NjFCNiwgMHgwNTMxLA0KLSAgICAweDYxQkEsIDB4MTMzNCwgMHg2MUJFLCAweDA1RjQsIDB4NjFDMiwgMHgzOERCLCAweDYxQzMsIDB4MTMzMiwNCi0gICAgMHg2MUM2LCAweDEzMzMsIDB4NjFDNywgMHgwODE5LCAweDYxQzgsIDB4MTMzMSwgMHg2MUM5LCAweDEzMkYsDQotICAgIDB4NjFDQSwgMHgxMzJFLCAweDYxQ0IsIDB4MTMzNSwgMHg2MUNDLCAweDEzMkQsIDB4NjFDRCwgMHgxMzM3LA0KLSAgICAweDYxRDAsIDB4MDU3QiwgMHg2MURGLCAweDM4REMsIDB4NjFFMywgMHgxMzM5LCAweDYxRTYsIDB4MTMzOCwNCi0gICAgMHg2MUYyLCAweDBCQzQsIDB4NjFGNCwgMHgxMzNDLCAweDYxRjYsIDB4MTMzQSwgMHg2MUY3LCAweDEzMzAsDQotICAgIDB4NjFGOCwgMHgwNzUyLCAweDYxRkEsIDB4MTMzQiwgMHg2MUZDLCAweDEzM0YsIDB4NjFGRCwgMHgxMzNFLA0KLSAgICAweDYxRkUsIDB4MTM0MCwgMHg2MUZGLCAweDEzM0QsIDB4NjIwMCwgMHgxMzQxLCAweDYyMDgsIDB4MTM0MiwNCi0gICAgMHg2MjA5LCAweDEzNDMsIDB4NjIwQSwgMHgwRTNBLCAweDYyMEMsIDB4MTM0NSwgMHg2MjBELCAweDEzNDQsDQotICAgIDB4NjIwRSwgMHgwOTQ5LCAweDYyMTAsIDB4MEE1MiwgMHg2MjExLCAweDA1NjYsIDB4NjIxMiwgMHgwNTdDLA0KLSAgICAweDYyMTMsIDB4MjExMSwgMHg2MjE0LCAweDEzNDYsIDB4NjIxNSwgMHgzOERELCAweDYyMTYsIDB4MDQ4MywNCi0gICAgMHg2MjFBLCAweDBBNzAsIDB4NjIxQiwgMHgxMzQ3LCAweDYyMUQsIDB4MUE2NCwgMHg2MjFFLCAweDEzNDgsDQotICAgIDB4NjIxRiwgMHgwNzM3LCAweDYyMjEsIDB4MTM0OSwgMHg2MjI2LCAweDBBOTMsIDB4NjIyOSwgMHgzOERFLA0KLSAgICAweDYyMkEsIDB4MTM0QSwgMHg2MjJFLCAweDEzNEIsIDB4NjIyRiwgMHgwNjU0LCAweDYyMzAsIDB4MTM0QywNCi0gICAgMHg2MjMyLCAweDEzNEQsIDB4NjIzMywgMHgxMzRFLCAweDYyMzQsIDB4MEIzNywgMHg2MjM2LCAweDM1QkQsDQotICAgIDB4NjIzOCwgMHgwNzgxLCAweDYyM0IsIDB4MEVFRCwgMHg2MjNFLCAweDM0NEUsIDB4NjIzRiwgMHgwRTZBLA0KLSAgICAweDYyNDAsIDB4MDk3NCwgMHg2MjQxLCAweDEzNEYsIDB4NjI0MywgMHgzOERGLCAweDYyNDYsIDB4MzhFMCwNCi0gICAgMHg2MjQ3LCAweDBBOTQsIDB4NjI0OCwgMHgxQjFBLCAweDYyNDksIDB4MEQ3NiwgMHg2MjRCLCAweDA5MTYsDQotICAgIDB4NjI0QywgMHgzOEUxLCAweDYyNEQsIDB4MDgzRCwgMHg2MjRFLCAweDEzNTAsIDB4NjI1MSwgMHgzOEUyLA0KLSAgICAweDYyNTMsIDB4MEIyNywgMHg2MjU1LCAweDBERjcsIDB4NjI1NiwgMHgzOEUzLCAweDYyNTgsIDB4MEI1MSwNCi0gICAgMHg2MjVCLCAweDEzNTMsIDB4NjI1RSwgMHgxMzUxLCAweDYyNjAsIDB4MTM1NCwgMHg2MjYzLCAweDEzNTIsDQotICAgIDB4NjI2OCwgMHgxMzU1LCAweDYyNkUsIDB4MEUwMSwgMHg2MjcxLCAweDA0N0IsIDB4NjI3NiwgMHgwREQwLA0KLSAgICAweDYyNzksIDB4MEQ3NywgMHg2MjdDLCAweDEzNTYsIDB4NjI3RSwgMHgxMzU5LCAweDYyN0YsIDB4MDk5RCwNCi0gICAgMHg2MjgwLCAweDA2NTUsIDB4NjI4MiwgMHgxMzU3LCAweDYyODMsIDB4MTM1RSwgMHg2Mjg0LCAweDA5OUUsDQotICAgIDB4NjI4NSwgMHgzNUM1LCAweDYyODksIDB4MTM1OCwgMHg2MjhBLCAweDBDRkEsIDB4NjI5MSwgMHgwRjQ4LA0KLSAgICAweDYyOTIsIDB4MTM1QSwgMHg2MjkzLCAweDEzNUIsIDB4NjI5NCwgMHgxMzVGLCAweDYyOTUsIDB4MEM2NCwNCi0gICAgMHg2Mjk2LCAweDEzNUMsIDB4NjI5NywgMHgwN0M1LCAweDYyOTgsIDB4MEE4MiwgMHg2MjlCLCAweDEzNkQsDQotICAgIDB4NjI5QywgMHgwRDQ4LCAweDYyOUUsIDB4MEI1MiwgMHg2MkE2LCAweDIxMTIsIDB4NjJBQiwgMHgwRDc4LA0KLSAgICAweDYyQUMsIDB4MTNCMiwgMHg2MkIxLCAweDBFNEEsIDB4NjJCNSwgMHgwQzBELCAweDYyQjksIDB4MEVBMywNCi0gICAgMHg2MkJCLCAweDEzNjIsIDB4NjJCQywgMHgwNTIxLCAweDYyQkQsIDB4MEJBOCwgMHg2MkMyLCAweDEzNkIsDQotICAgIDB4NjJDNCwgMHgzOEU0LCAweDYyQzUsIDB4MEI3MiwgMHg2MkM2LCAweDEzNjUsIDB4NjJDNywgMHgxMzZDLA0KLSAgICAweDYyQzgsIDB4MTM2NywgMHg2MkM5LCAweDEzNkUsIDB4NjJDQSwgMHgxMzZBLCAweDYyQ0MsIDB4MTM2OSwNCi0gICAgMHg2MkNELCAweDBEMjUsIDB4NjJDRiwgMHgxMzYzLCAweDYyRDAsIDB4MDU3RCwgMHg2MkQxLCAweDEzNjEsDQotICAgIDB4NjJEMiwgMHgwNjhCLCAweDYyRDMsIDB4MEI1MywgMHg2MkQ0LCAweDEzNUQsIDB4NjJENywgMHgxMzYwLA0KLSAgICAweDYyRDgsIDB4MDdDNiwgMHg2MkQ5LCAweDBBN0YsIDB4NjJEQiwgMHgwOTlGLCAweDYyREMsIDB4MTM2OCwNCi0gICAgMHg2MkRELCAweDBEMDgsIDB4NjJFMCwgMHgwNjhDLCAweDYyRTEsIDB4MDVBNiwgMHg2MkVDLCAweDA1QzUsDQotICAgIDB4NjJFRCwgMHgwOUU3LCAweDYyRUUsIDB4MTM3MCwgMHg2MkVGLCAweDEzNzUsIDB4NjJGMSwgMHgxMzcxLA0KLSAgICAweDYyRjMsIDB4MDc1MywgMHg2MkY1LCAweDEzNzYsIDB4NjJGNiwgMHgwODcwLCAweDYyRjcsIDB4MDdGQiwNCi0gICAgMHg2MkZDLCAweDM4RTUsIDB4NjJGRSwgMHgwOTMwLCAweDYyRkYsIDB4MTM2NCwgMHg2MzAxLCAweDA4Q0IsDQotICAgIDB4NjMwMiwgMHgxMzczLCAweDYzMDcsIDB4MDhBNiwgMHg2MzA4LCAweDEzNzQsIDB4NjMwOSwgMHgwNDg4LA0KLSAgICAweDYzMEEsIDB4MzhFNiwgMHg2MzBDLCAweDEzNkYsIDB4NjMwRCwgMHgzOEU3LCAweDYzMTEsIDB4MEJDNSwNCi0gICAgMHg2MzE4LCAweDM4RTgsIDB4NjMxOSwgMHgwNjhELCAweDYzMUIsIDB4MzczNywgMHg2MzFGLCAweDA2QUMsDQotICAgIDB4NjMyNywgMHgxMzcyLCAweDYzMjgsIDB4MDQ2QiwgMHg2MzJCLCAweDA4MzMsIDB4NjMyRiwgMHgwOUZDLA0KLSAgICAweDYzMzksIDB4MzhFOSwgMHg2MzNBLCAweDBDMEUsIDB4NjMzRCwgMHgwRDY4LCAweDYzM0UsIDB4MTM3OCwNCi0gICAgMHg2MzNGLCAweDBBRTAsIDB4NjM0MiwgMHgzOEVBLCAweDYzNDMsIDB4MzhFQiwgMHg2MzQ5LCAweDBCMEEsDQotICAgIDB4NjM0QywgMHgwODc5LCAweDYzNEQsIDB4MTM3OSwgMHg2MzRGLCAweDEzN0IsIDB4NjM1MCwgMHgxMzc3LA0KLSAgICAweDYzNTUsIDB4MEUzMSwgMHg2MzU3LCAweDBCRDksIDB4NjM1QywgMHgwQURFLCAweDYzNjUsIDB4MzhFQywNCi0gICAgMHg2MzY3LCAweDBFNEIsIDB4NjM2OCwgMHgwOEZBLCAweDYzNjksIDB4MTM4NywgMHg2MzZCLCAweDEzODYsDQotICAgIDB4NjM2RSwgMHgwQTNFLCAweDYzNzIsIDB4MDc1NCwgMHg2Mzc0LCAweDM4RUQsIDB4NjM3NiwgMHgxMzgwLA0KLSAgICAweDYzNzcsIDB4MDlBMSwgMHg2MzdBLCAweDBDQzAsIDB4NjM3QiwgMHgwQ0U3LCAweDYzN0QsIDB4MzhFRSwNCi0gICAgMHg2MzgwLCAweDEzN0UsIDB4NjM4MywgMHgwQURGLCAweDYzODQsIDB4MzhFRiwgMHg2Mzg3LCAweDM4RjAsDQotICAgIDB4NjM4OCwgMHgwOTI0LCAweDYzODksIDB4MTM4MywgMHg2MzhDLCAweDA5QTAsIDB4NjM4RSwgMHgxMzdELA0KLSAgICAweDYzOEYsIDB4MTM4MiwgMHg2MzkwLCAweDM4RjEsIDB4NjM5MiwgMHgwRDA5LCAweDYzOTYsIDB4MTM3QywNCi0gICAgMHg2Mzk4LCAweDA2RjcsIDB4NjM5QiwgMHgwNUJCLCAweDYzOUUsIDB4MzhGMiwgMHg2MzlGLCAweDEzODQsDQotICAgIDB4NjNBMCwgMHgwRjczLCAweDYzQTEsIDB4MDgzRSwgMHg2M0EyLCAweDBCNzMsIDB4NjNBMywgMHgxMzgxLA0KLSAgICAweDYzQTUsIDB4MEE4MCwgMHg2M0E3LCAweDA3QzcsIDB4NjNBOCwgMHgwQTJBLCAweDYzQTksIDB4MDUwOCwNCi0gICAgMHg2M0FBLCAweDBBQkUsIDB4NjNBQiwgMHgxMzdGLCAweDYzQUMsIDB4MDY1RiwgMHg2M0IyLCAweDA3MUQsDQotICAgIDB4NjNCNCwgMHgwQkVCLCAweDYzQjUsIDB4MTM4NSwgMHg2M0JCLCAweDBBRTEsIDB4NjNCRSwgMHgxMzg4LA0KLSAgICAweDYzQzAsIDB4MTM4QSwgMHg2M0MzLCAweDBCMTcsIDB4NjNDNCwgMHgxMzkwLCAweDYzQzYsIDB4MTM4QiwNCi0gICAgMHg2M0M5LCAweDEzOEQsIDB4NjNDRiwgMHgwREIzLCAweDYzRDAsIDB4MEMwRiwgMHg2M0QxLCAweDM4RjMsDQotICAgIDB4NjNEMiwgMHgxMzhFLCAweDYzRDYsIDB4MEYxNiwgMHg2M0RBLCAweDBGMzIsIDB4NjNEQiwgMHgwNUY1LA0KLSAgICAweDYzREMsIDB4MzhGNCwgMHg2M0UxLCAweDA0NzIsIDB4NjNFMywgMHgxMzhDLCAweDYzRTksIDB4MTM4OSwNCi0gICAgMHg2M0VELCAweDM0MUMsIDB4NjNFRSwgMHgwNjM0LCAweDYzRjQsIDB4MDUwOSwgMHg2M0Y1LCAweDIxMTMsDQotICAgIDB4NjNGNiwgMHgxMzhGLCAweDYzRjcsIDB4MzY0NCwgMHg2M0ZBLCAweDBGMzMsIDB4NjQwNiwgMHgxMzkzLA0KLSAgICAweDY0MDksIDB4MzhGNSwgMHg2NDBELCAweDBCMUIsIDB4NjQwRiwgMHgxMzlBLCAweDY0MTAsIDB4MzhGNiwNCi0gICAgMHg2NDEzLCAweDEzOTQsIDB4NjQxNCwgMHgxRTJDLCAweDY0MTYsIDB4MTM5MSwgMHg2NDE3LCAweDEzOTgsDQotICAgIDB4NjQxQywgMHgxMzdBLCAweDY0MjIsIDB4MzhGNywgMHg2NDI2LCAweDEzOTUsIDB4NjQyOCwgMHgxMzk5LA0KLSAgICAweDY0MkMsIDB4MEQ1NiwgMHg2NDJELCAweDBDNjUsIDB4NjQzNCwgMHgxMzkyLCAweDY0MzYsIDB4MTM5NiwNCi0gICAgMHg2NDNBLCAweDA3MUUsIDB4NjQzRSwgMHgwODYxLCAweDY0NDIsIDB4MEE4MSwgMHg2NDRFLCAweDEzOUUsDQotICAgIDB4NjQ1MSwgMHgxRTQzLCAweDY0NTQsIDB4MzhGOCwgMHg2NDU4LCAweDBDMjAsIDB4NjQ1QiwgMHgzOEY5LA0KLSAgICAweDY0NjAsIDB4MjExNCwgMHg2NDY3LCAweDEzOUIsIDB4NjQ2OSwgMHgwRThFLCAweDY0NkQsIDB4MzhGQSwNCi0gICAgMHg2NDZGLCAweDEzOUMsIDB4NjQ3NiwgMHgxMzlELCAweDY0NzgsIDB4MEVEQSwgMHg2NDdBLCAweDBBNDYsDQotICAgIDB4NjQ3QiwgMHgzOEZCLCAweDY0ODMsIDB4MDczOCwgMHg2NDg4LCAweDEzQTQsIDB4NjQ5MiwgMHgwODgzLA0KLSAgICAweDY0OTMsIDB4MTNBMSwgMHg2NDk1LCAweDEzQTAsIDB4NjQ5QSwgMHgwQ0U4LCAweDY0OUQsIDB4MjExNSwNCi0gICAgMHg2NDlFLCAweDBDOEQsIDB4NjRBNCwgMHgwQzJCLCAweDY0QTUsIDB4MTNBMiwgMHg2NEE5LCAweDEzQTMsDQotICAgIDB4NjRBQiwgMHgwREUxLCAweDY0QUQsIDB4MENGQiwgMHg2NEFFLCAweDA4NzEsIDB4NjRCMCwgMHgwQTk1LA0KLSAgICAweDY0QjIsIDB4MEU3RSwgMHg2NEI5LCAweDA1QTcsIDB4NjRCQiwgMHgxM0FBLCAweDY0QkMsIDB4MTNBNSwNCi0gICAgMHg2NEJFLCAweDM4RkMsIDB4NjRCRiwgMHgzOEZELCAweDY0QzEsIDB4MEYzNCwgMHg2NEMyLCAweDEzQUMsDQotICAgIDB4NjRDNSwgMHgxM0E4LCAweDY0QzcsIDB4MTNBOSwgMHg2NENBLCAweDM0MUQsIDB4NjRDRCwgMHgwQUUyLA0KLSAgICAweDY0Q0UsIDB4MjExNiwgMHg2NEQyLCAweDEzQTcsIDB4NjRENCwgMHgxMzY2LCAweDY0RDgsIDB4MTNBQiwNCi0gICAgMHg2NERBLCAweDEzQTYsIDB4NjRFMCwgMHgxM0IwLCAweDY0RTEsIDB4MTNCMSwgMHg2NEUyLCAweDBDMjEsDQotICAgIDB4NjRFMywgMHgxM0IzLCAweDY0RTUsIDB4MzhGRSwgMHg2NEU2LCAweDA4NzIsIDB4NjRFNywgMHgxM0FFLA0KLSAgICAweDY0RUMsIDB4MDY1NiwgMHg2NEVGLCAweDEzQjQsIDB4NjRGMSwgMHgxM0FELCAweDY0RjIsIDB4MTNCOCwNCi0gICAgMHg2NEY0LCAweDEzQjcsIDB4NjRGNiwgMHgxM0I2LCAweDY0RjcsIDB4MzhGRiwgMHg2NEZBLCAweDEzQjksDQotICAgIDB4NjRGQiwgMHgzOTAwLCAweDY0RkQsIDB4MTNCQiwgMHg2NEZFLCAweDA5RDksIDB4NjUwMCwgMHgxM0JBLA0KLSAgICAweDY1MDQsIDB4MzkwMSwgMHg2NTA1LCAweDEzQkUsIDB4NjUxNiwgMHgzOTAyLCAweDY1MTgsIDB4MTNCQywNCi0gICAgMHg2NTE5LCAweDM5MDMsIDB4NjUxQywgMHgxM0JELCAweDY1MUQsIDB4MTM5NywgMHg2NTIyLCAweDFFOTcsDQotICAgIDB4NjUyMywgMHgxM0MwLCAweDY1MjQsIDB4MTNCRiwgMHg2NTJBLCAweDEzOUYsIDB4NjUyQiwgMHgxM0MxLA0KLSAgICAweDY1MkMsIDB4MTNCNSwgMHg2NTJGLCAweDA4QTcsIDB4NjUzNCwgMHgxM0MyLCAweDY1MzUsIDB4MTNDMywNCi0gICAgMHg2NTM2LCAweDEzQzUsIDB4NjUzNywgMHgxM0M0LCAweDY1MzgsIDB4MTNDNiwgMHg2NTM5LCAweDA1N0UsDQotICAgIDB4NjUzQiwgMHgwN0M4LCAweDY1M0UsIDB4MEU0QywgMHg2NTNGLCAweDBBNTMsIDB4NjU0NSwgMHgwNzgyLA0KLSAgICAweDY1NDcsIDB4MzkwNCwgMHg2NTQ4LCAweDEzQzgsIDB4NjU0RCwgMHgxM0NCLCAweDY1NEUsIDB4MjExNywNCi0gICAgMHg2NTRGLCAweDBEQzQsIDB4NjU1MSwgMHgwNjc5LCAweDY1NTUsIDB4MTNDQSwgMHg2NTU2LCAweDEzQzksDQotICAgIDB4NjU1NywgMHgwRDBBLCAweDY1NTgsIDB4MTNDQywgMHg2NTU5LCAweDA2QUQsIDB4NjU1RCwgMHgxM0NFLA0KLSAgICAweDY1NUUsIDB4MTNDRCwgMHg2NTYyLCAweDA1RjYsIDB4NjU2MywgMHgwODg0LCAweDY1NjYsIDB4MENCMCwNCi0gICAgMHg2NTY3LCAweDM5MDUsIDB4NjU2QywgMHgwNzFGLCAweDY1NzAsIDB4MEEzQSwgMHg2NTcyLCAweDEzQ0YsDQotICAgIDB4NjU3NCwgMHgwQTU0LCAweDY1NzUsIDB4MEMyMiwgMHg2NTc3LCAweDBERDEsIDB4NjU3OCwgMHgxM0QwLA0KLSAgICAweDY1ODEsIDB4MzkwNiwgMHg2NTgyLCAweDEzRDEsIDB4NjU4MywgMHgxM0QyLCAweDY1ODUsIDB4MzkwNywNCi0gICAgMHg2NTg3LCAweDBFMDgsIDB4NjU4OCwgMHgxMjBDLCAweDY1ODksIDB4MEE2QSwgMHg2NThDLCAweDBEQkUsDQotICAgIDB4NjU4RSwgMHgwODQ4LCAweDY1OTAsIDB4MEQ3OSwgMHg2NTkxLCAweDBENTcsIDB4NjU5NywgMHgwQzQ3LA0KLSAgICAweDY1OTksIDB4MEY4OSwgMHg2NTlCLCAweDEzRDQsIDB4NjU5QywgMHgwOEZDLCAweDY1OUYsIDB4MTNENSwNCi0gICAgMHg2NUExLCAweDA0N0EsIDB4NjVBNCwgMHgwNkNDLCAweDY1QTUsIDB4MEE3MSwgMHg2NUE3LCAweDBERDIsDQotICAgIDB4NjVBQiwgMHgxM0Q2LCAweDY1QUMsIDB4MDg5MCwgMHg2NUFELCAweDBCODUsIDB4NjVBRiwgMHgwOEE5LA0KLSAgICAweDY1QjAsIDB4MDlGRCwgMHg2NUI3LCAweDEzRDcsIDB4NjVCOSwgMHgwRTRELCAweDY1QkMsIDB4MDUxOSwNCi0gICAgMHg2NUJELCAweDA4QUEsIDB4NjVDMSwgMHgxM0RBLCAweDY1QzIsIDB4MzkwOCwgMHg2NUMzLCAweDEzRDgsDQotICAgIDB4NjVDNCwgMHgxM0RCLCAweDY1QzUsIDB4MEY4MSwgMHg2NUM2LCAweDEzRDksIDB4NjVDQiwgMHgwQTlGLA0KLSAgICAweDY1Q0MsIDB4MTNEQywgMHg2NUNGLCAweDBCMTIsIDB4NjVEMiwgMHgxM0RELCAweDY1RDcsIDB4MDYzNiwNCi0gICAgMHg2NUQ5LCAweDEzREYsIDB4NjVEQiwgMHgxM0RFLCAweDY1RTAsIDB4MTNFMCwgMHg2NUUxLCAweDEzRTEsDQotICAgIDB4NjVFMiwgMHgwNjM3LCAweDY1RTMsIDB4MzU4NSwgMHg2NUU1LCAweDBDRDQsIDB4NjVFNiwgMHgwQjc0LA0KLSAgICAweDY1RTcsIDB4MDY4NiwgMHg2NUU4LCAweDA4QUIsIDB4NjVFOSwgMHgwQUUzLCAweDY1RUMsIDB4MDk2NiwNCi0gICAgMHg2NUVELCAweDA0NzQsIDB4NjVGMCwgMHgzOTA5LCAweDY1RjEsIDB4MTNFMiwgMHg2NUYyLCAweDM5MEEsDQotICAgIDB4NjVGQSwgMHgwNTIyLCAweDY1RkIsIDB4MTNFNiwgMHg2NjAwLCAweDIxMTgsIDB4NjYwMiwgMHgwN0M5LA0KLSAgICAweDY2MDMsIDB4MTNFNSwgMHg2NjA2LCAweDA4MUIsIDB4NjYwNywgMHgwOUEyLCAweDY2MDksIDB4MjExQSwNCi0gICAgMHg2NjBBLCAweDEzRTQsIDB4NjYwQywgMHgwOUEzLCAweDY2MEUsIDB4MEVDQywgMHg2NjBGLCAweDA4MUEsDQotICAgIDB4NjYxMywgMHgwNDlCLCAweDY2MTQsIDB4MEE3MiwgMHg2NjE1LCAweDIxMTksIDB4NjYxQywgMHgxM0VCLA0KLSAgICAweDY2MUUsIDB4MjExQywgMHg2NjFGLCAweDBBNTUsIDB4NjYyMCwgMHgwNEU5LCAweDY2MjQsIDB4MjExRCwNCi0gICAgMHg2NjI1LCAweDA5NUYsIDB4NjYyNywgMHgwRTk0LCAweDY2MjgsIDB4MDg2MiwgMHg2NjJDLCAweDM5MEIsDQotICAgIDB4NjYyRCwgMHgwOUE0LCAweDY2MkUsIDB4MjExQiwgMHg2NjJGLCAweDBBNEIsIDB4NjYzMSwgMHgyMEFFLA0KLSAgICAweDY2MzQsIDB4MTNFQSwgMHg2NjM1LCAweDEzRTgsIDB4NjYzNiwgMHgxM0U5LCAweDY2M0IsIDB4MUUwMCwNCi0gICAgMHg2NjNDLCAweDBCQTksIDB4NjYzRiwgMHgxNDA5LCAweDY2NDEsIDB4MTNFRiwgMHg2NjQyLCAweDA4Q0MsDQotICAgIDB4NjY0MywgMHgwN0NBLCAweDY2NDQsIDB4MTNFRCwgMHg2NjQ5LCAweDEzRUUsIDB4NjY0QiwgMHgwOUZFLA0KLSAgICAweDY2NEMsIDB4MzkwQywgMHg2NjRGLCAweDEzRUMsIDB4NjY1MiwgMHgwODdELCAweDY2NTcsIDB4MjExRiwNCi0gICAgMHg2NjU5LCAweDIxMjAsIDB4NjY1QiwgMHgzOTBELCAweDY2NUMsIDB4MzkwRSwgMHg2NjVELCAweDEzRjEsDQotICAgIDB4NjY1RSwgMHgxM0YwLCAweDY2NUYsIDB4MTNGNSwgMHg2NjYxLCAweDM5MEYsIDB4NjY2MiwgMHgxM0Y2LA0KLSAgICAweDY2NjMsIDB4MzczQSwgMHg2NjY0LCAweDEzRjIsIDB4NjY2NSwgMHgyMTFFLCAweDY2NjYsIDB4MDU4MCwNCi0gICAgMHg2NjY3LCAweDEzRjMsIDB4NjY2OCwgMHgxM0Y0LCAweDY2NjksIDB4MEQ2OSwgMHg2NjZCLCAweDM5MTAsDQotICAgIDB4NjY2RSwgMHgwREQzLCAweDY2NkYsIDB4MDcyMCwgMHg2NjcwLCAweDEzRjcsIDB4NjY3MywgMHgyMTIyLA0KLSAgICAweDY2NzQsIDB4MEE1NiwgMHg2Njc2LCAweDA5QTUsIDB4NjY3NywgMHgzOTExLCAweDY2N0EsIDB4MEI5MCwNCi0gICAgMHg2NjgxLCAweDA2QkYsIDB4NjY4MywgMHgxM0Y4LCAweDY2ODQsIDB4MTNGQywgMHg2Njg3LCAweDA1NEIsDQotICAgIDB4NjY4OCwgMHgxM0Y5LCAweDY2ODksIDB4MTNGQiwgMHg2NjhFLCAweDEzRkEsIDB4NjY5MSwgMHgwOTc1LA0KLSAgICAweDY2OTYsIDB4MEI4NiwgMHg2Njk3LCAweDA0ODksIDB4NjY5OCwgMHgxM0ZELCAweDY2OTksIDB4MjEyMywNCi0gICAgMHg2NjlELCAweDEzRkUsIDB4NjZBMCwgMHgyMTI0LCAweDY2QTIsIDB4MEJDNiwgMHg2NkE0LCAweDM5MTIsDQotICAgIDB4NjZBNiwgMHgwRkI5LCAweDY2QUIsIDB4MDg5MSwgMHg2NkFFLCAweDBFM0IsIDB4NjZCMiwgMHgyMTI1LA0KLSAgICAweDY2QjQsIDB4MEU2QiwgMHg2NkI4LCAweDE0MDUsIDB4NjZCOSwgMHgxNDAwLCAweDY2QkMsIDB4MTQwMywNCi0gICAgMHg2NkJFLCAweDE0MDIsIDB4NjZCRiwgMHgyMTI2LCAweDY2QzEsIDB4MTNGRiwgMHg2NkM0LCAweDE0MDQsDQotICAgIDB4NjZDNiwgMHgzNDU1LCAweDY2QzcsIDB4MENCNiwgMHg2NkM4LCAweDM5MTMsIDB4NjZDOSwgMHgxNDAxLA0KLSAgICAweDY2RDYsIDB4MTQwNiwgMHg2NkQ5LCAweDA5NzYsIDB4NjZEQSwgMHgxNDA3LCAweDY2REMsIDB4MEYzNSwNCi0gICAgMHg2NkRELCAweDBEMkUsIDB4NjZFMCwgMHgxNDA4LCAweDY2RTYsIDB4MTQwQSwgMHg2NkU5LCAweDE0MEIsDQotICAgIDB4NjZFQywgMHgzOTE0LCAweDY2RjAsIDB4MTQwQywgMHg2NkYyLCAweDA2QzIsIDB4NjZGMywgMHgwNEVBLA0KLSAgICAweDY2RjQsIDB4MDdDQiwgMHg2NkY1LCAweDE0MEQsIDB4NjZGNywgMHgxNDBFLCAweDY2RjgsIDB4MDk3QiwNCi0gICAgMHg2NkY5LCAweDBBRTQsIDB4NjZGQSwgMHgyMTI3LCAweDY2RkIsIDB4MjBCMSwgMHg2NkZDLCAweDEwRUQsDQotICAgIDB4NjZGRCwgMHgwQUMwLCAweDY2RkUsIDB4MEFCRiwgMHg2NkZGLCAweDBCMzgsIDB4NjcwMCwgMHgwODM3LA0KLSAgICAweDY3MDMsIDB4MTA0QiwgMHg2NzA1LCAweDM5MTUsIDB4NjcwOCwgMHgwNzQ0LCAweDY3MDksIDB4MEYxNywNCi0gICAgMHg2NzBCLCAweDBFNEUsIDB4NjcwRCwgMHgwREYwLCAweDY3MEUsIDB4MjEyOCwgMHg2NzBGLCAweDE0MEYsDQotICAgIDB4NjcxMywgMHgzOTE2LCAweDY3MTQsIDB4MDg2MywgMHg2NzE1LCAweDBCREIsIDB4NjcxNiwgMHgxNDEwLA0KLSAgICAweDY3MTcsIDB4MEZENSwgMHg2NzFCLCAweDBFNkMsIDB4NjcxRCwgMHgwQkM3LCAweDY3MUUsIDB4MTQxMSwNCi0gICAgMHg2NzFGLCAweDA2MzgsIDB4NjcyNiwgMHgxNDEyLCAweDY3MjcsIDB4MTQxMywgMHg2NzI4LCAweDBFRTYsDQotICAgIDB4NjcyQSwgMHgwRUIwLCAweDY3MkIsIDB4MEVBNCwgMHg2NzJDLCAweDBFOEEsIDB4NjcyRCwgMHgwODczLA0KLSAgICAweDY3MkUsIDB4MTQxNSwgMHg2NzMxLCAweDA5MTcsIDB4NjczMywgMHgzOTE3LCAweDY3MzQsIDB4MEU3RiwNCi0gICAgMHg2NzM2LCAweDE0MTcsIDB4NjczNywgMHgxNDFBLCAweDY3MzgsIDB4MTQxOSwgMHg2NzNBLCAweDA2MzUsDQotICAgIDB4NjczRCwgMHgwNjdBLCAweDY3M0YsIDB4MTQxNiwgMHg2NzQxLCAweDE0MTgsIDB4Njc0MywgMHgzNUI3LA0KLSAgICAweDY3NDYsIDB4MTQxQiwgMHg2NzQ4LCAweDM5MTgsIDB4Njc0OSwgMHgwQTNGLCAweDY3NEMsIDB4MzkxOSwNCi0gICAgMHg2NzRFLCAweDBGNjUsIDB4Njc0RiwgMHgwNDhELCAweDY3NTAsIDB4MDg1MCwgMHg2NzUxLCAweDBCMUMsDQotICAgIDB4Njc1MywgMHgwOTA5LCAweDY3NTYsIDB4MDlEQiwgMHg2NzU5LCAweDE0MUUsIDB4Njc1QywgMHgwQzQ4LA0KLSAgICAweDY3NUUsIDB4MTQxQywgMHg2NzVGLCAweDBCMEIsIDB4Njc2MCwgMHgxNDFELCAweDY3NjEsIDB4MDlEQSwNCi0gICAgMHg2NzYyLCAweDBFRTksIDB4Njc2MywgMHgxNDFGLCAweDY3NjQsIDB4MTQyMCwgMHg2NzY1LCAweDBGNTIsDQotICAgIDB4Njc2NiwgMHgyMTJBLCAweDY3NkEsIDB4MTQyNSwgMHg2NzZELCAweDA3Q0MsIDB4Njc2RSwgMHgzNTcxLA0KLSAgICAweDY3NkYsIDB4MEQwQiwgMHg2NzcwLCAweDE0MjIsIDB4Njc3MSwgMHgwQzY2LCAweDY3NzIsIDB4MTNFMywNCi0gICAgMHg2NzczLCAweDEzRTcsIDB4Njc3NSwgMHgwNjY5LCAweDY3NzYsIDB4MzkxQSwgMHg2Nzc3LCAweDBDRkQsDQotICAgIDB4Njc3QiwgMHgzOTFCLCAweDY3N0MsIDB4MTQyNCwgMHg2NzdFLCAweDA5QTYsIDB4Njc3RiwgMHgwRDU4LA0KLSAgICAweDY3ODUsIDB4MTQyQSwgMHg2Nzg3LCAweDBEOEUsIDB4Njc4OSwgMHgxNDIxLCAweDY3OEIsIDB4MTQyNywNCi0gICAgMHg2NzhDLCAweDE0MjYsIDB4Njc5MCwgMHgwQTczLCAweDY3OTUsIDB4MEU5QiwgMHg2Nzk3LCAweDBGOUIsDQotICAgIDB4Njc5QSwgMHgwRTk1LCAweDY3OUMsIDB4MDU0QywgMHg2NzlELCAweDA4QUMsIDB4NjdBMCwgMHgwRkVFLA0KLSAgICAweDY3QTEsIDB4MTQyOSwgMHg2N0EyLCAweDBBM0IsIDB4NjdBNiwgMHgxNDI4LCAweDY3QTksIDB4MTQyMywNCi0gICAgMHg2N0FGLCAweDA3ODMsIDB4NjdCMCwgMHgzOTFDLCAweDY3QjIsIDB4MzkxRCwgMHg2N0IzLCAweDE0MkYsDQotICAgIDB4NjdCNCwgMHgxNDJELCAweDY3QjYsIDB4MDU0RCwgMHg2N0I3LCAweDE0MkIsIDB4NjdCOCwgMHgxNDMxLA0KLSAgICAweDY3QjksIDB4MTQzNywgMHg2N0JCLCAweDIxMkIsIDB4NjdDMCwgMHgyMTJELCAweDY3QzEsIDB4MEIyOCwNCi0gICAgMHg2N0M0LCAweDBFMTEsIDB4NjdDNiwgMHgxNDM5LCAweDY3Q0EsIDB4MEQ5NCwgMHg2N0NFLCAweDE0MzgsDQotICAgIDB4NjdDRiwgMHgwRDI2LCAweDY3RDAsIDB4MEU2RCwgMHg2N0QxLCAweDA1RjcsIDB4NjdEMywgMHgwQTlCLA0KLSAgICAweDY3RDQsIDB4MDk0QSwgMHg2N0Q3LCAweDM5MUYsIDB4NjdEOCwgMHgwQkVGLCAweDY3RDksIDB4MzkyMCwNCi0gICAgMHg2N0RBLCAweDBGMTgsIDB4NjdERCwgMHgxNDM0LCAweDY3REUsIDB4MTQzMywgMHg2N0UyLCAweDE0MzUsDQotICAgIDB4NjdFNCwgMHgxNDMyLCAweDY3RTcsIDB4MTQzQSwgMHg2N0U5LCAweDE0MzAsIDB4NjdFQywgMHgxNDJFLA0KLSAgICAweDY3RUUsIDB4MTQzNiwgMHg2N0VGLCAweDE0MkMsIDB4NjdGMCwgMHgzOTIxLCAweDY3RjEsIDB4MEJBQSwNCi0gICAgMHg2N0YzLCAweDBGMDQsIDB4NjdGNCwgMHgwOEYyLCAweDY3RjUsIDB4MDg2NCwgMHg2N0Y5LCAweDM5MUUsDQotICAgIDB4NjdGQiwgMHgwODJBLCAweDY3RkUsIDB4MEU5RCwgMHg2N0ZGLCAweDA1OUYsIDB4NjgwMSwgMHgyMTJFLA0KLSAgICAweDY4MDIsIDB4MEJFQSwgMHg2ODAzLCAweDBDQTIsIDB4NjgwNCwgMHgwNEVCLCAweDY4MDUsIDB4MUUwNywNCi0gICAgMHg2ODEzLCAweDBBOTYsIDB4NjgxNiwgMHgwQTU4LCAweDY4MTcsIDB4MDcwMCwgMHg2ODFFLCAweDE0M0MsDQotICAgIDB4NjgyMSwgMHgwN0NELCAweDY4MjIsIDB4MDVEQSwgMHg2ODI5LCAweDE0M0UsIDB4NjgyQSwgMHgwNUQyLA0KLSAgICAweDY4MkIsIDB4MTQ0NCwgMHg2ODJDLCAweDM5MjIsIDB4NjgzMCwgMHgzOTIzLCAweDY4MzEsIDB4MzkyNCwNCi0gICAgMHg2ODMyLCAweDE0NDEsIDB4NjgzNCwgMHgwQTk3LCAweDY4MzgsIDB4MDVBOSwgMHg2ODM5LCAweDA4MUMsDQotICAgIDB4NjgzQywgMHgwNUE4LCAweDY4M0QsIDB4MDgzRiwgMHg2ODQwLCAweDE0M0YsIDB4Njg0MSwgMHgwNzNCLA0KLSAgICAweDY4NDIsIDB4MDcyMSwgMHg2ODQzLCAweDBDNjcsIDB4Njg0NCwgMHgyMTJGLCAweDY4NDYsIDB4MTQzRCwNCi0gICAgMHg2ODQ4LCAweDA0OEEsIDB4Njg0RCwgMHgxNDQwLCAweDY4NEUsIDB4MTQ0MiwgMHg2ODUwLCAweDA2QzUsDQotICAgIDB4Njg1MSwgMHgwNzAyLCAweDY4NTIsIDB4MjEyQywgMHg2ODUzLCAweDA1RjgsIDB4Njg1NCwgMHgwNjY1LA0KLSAgICAweDY4NTksIDB4MTQ0NSwgMHg2ODVCLCAweDM5MjUsIDB4Njg1QywgMHgwODY5LCAweDY4NUQsIDB4MEU5RiwNCi0gICAgMHg2ODVGLCAweDA4ODUsIDB4Njg2MywgMHgxNDQ2LCAweDY4NjcsIDB4MERBMiwgMHg2ODcyLCAweDM5MjYsDQotICAgIDB4Njg3NCwgMHgxNDUyLCAweDY4NzUsIDB4MzkyNywgMHg2ODc2LCAweDA1MzMsIDB4Njg3NywgMHgxNDQ3LA0KLSAgICAweDY4N0EsIDB4MzkyOCwgMHg2ODdFLCAweDE0NTgsIDB4Njg3RiwgMHgxNDQ4LCAweDY4ODEsIDB4MEY4QSwNCi0gICAgMHg2ODgzLCAweDE0NEYsIDB4Njg4NCwgMHgzOTI5LCAweDY4ODUsIDB4MEQxNSwgMHg2ODhELCAweDE0NTcsDQotICAgIDB4Njg4RSwgMHgxRTlDLCAweDY4OEYsIDB4MTQ0QSwgMHg2ODkzLCAweDA0NzgsIDB4Njg5NCwgMHgxNDRDLA0KLSAgICAweDY4OTcsIDB4MDdDRSwgMHg2ODlCLCAweDE0NEUsIDB4Njg5RCwgMHgxNDRELCAweDY4OUYsIDB4MTQ0OSwNCi0gICAgMHg2OEEwLCAweDE0NTQsIDB4NjhBMiwgMHgwOUE3LCAweDY4QTUsIDB4MzkyQSwgMHg2OEE2LCAweDExQkUsDQotICAgIDB4NjhBNywgMHgwNzlDLCAweDY4QTgsIDB4MEY2NiwgMHg2OEFELCAweDE0NEIsIDB4NjhBRiwgMHgwQzEwLA0KLSAgICAweDY4QjAsIDB4MDU4MSwgMHg2OEIxLCAweDA4MUQsIDB4NjhCMiwgMHgzOTJCLCAweDY4QjMsIDB4MTQ0MywNCi0gICAgMHg2OEI1LCAweDE0NTMsIDB4NjhCNiwgMHgwNUJGLCAweDY4QjksIDB4MTQ1MSwgMHg2OEJBLCAweDE0NTUsDQotICAgIDB4NjhCQywgMHgwQzY4LCAweDY4QzQsIDB4MDYzQSwgMHg2OEM2LCAweDE0NzMsIDB4NjhDOCwgMHgyMEFGLA0KLSAgICAweDY4QzksIDB4MEVENSwgMHg2OENBLCAweDE0NUEsIDB4NjhDQiwgMHgwNjM5LCAweDY4Q0QsIDB4MTQ2MSwNCi0gICAgMHg2OENGLCAweDIxMzAsIDB4NjhEMCwgMHgzOTJDLCAweDY4RDIsIDB4MEU2RSwgMHg2OEQ0LCAweDE0NjIsDQotICAgIDB4NjhENSwgMHgxNDY0LCAweDY4RDYsIDB4MzkyRCwgMHg2OEQ3LCAweDE0NjgsIDB4NjhEOCwgMHgxNDVDLA0KLSAgICAweDY4REEsIDB4MEI2OCwgMHg2OERGLCAweDBDNjksIDB4NjhFMCwgMHgxNDZDLCAweDY4RTEsIDB4MTQ1RiwNCi0gICAgMHg2OEUzLCAweDE0NjksIDB4NjhFNywgMHgxNDYzLCAweDY4RTgsIDB4MzkyRSwgMHg2OEVELCAweDM5MkYsDQotICAgIDB4NjhFRSwgMHgwOUZGLCAweDY4RUYsIDB4MTQ2RCwgMHg2OEYwLCAweDM5MzAsIDB4NjhGMSwgMHgzOTMxLA0KLSAgICAweDY4RjIsIDB4MEE1NywgMHg2OEY5LCAweDE0NkIsIDB4NjhGQSwgMHgwNUY5LCAweDY4RkMsIDB4MzkzMiwNCi0gICAgMHg2OTAwLCAweDBGRjYsIDB4NjkwMSwgMHgxNDU5LCAweDY5MDQsIDB4MTQ2NywgMHg2OTA1LCAweDA0OUMsDQotICAgIDB4NjkwOCwgMHgxNDVCLCAweDY5MEIsIDB4MEVDNiwgMHg2OTBDLCAweDE0NjAsIDB4NjkwRCwgMHgwOUU4LA0KLSAgICAweDY5MEUsIDB4MEJFMywgMHg2OTBGLCAweDE0NTYsIDB4NjkxMSwgMHgzOTMzLCAweDY5MTIsIDB4MTQ2NiwNCi0gICAgMHg2OTEzLCAweDM5MzQsIDB4NjkxOSwgMHgwQTQwLCAweDY5MUEsIDB4MTQ3MCwgMHg2OTFCLCAweDA1Q0YsDQotICAgIDB4NjkxQywgMHgwNzU1LCAweDY5MjEsIDB4MTQ3MiwgMHg2OTIyLCAweDE0NUQsIDB4NjkyMywgMHgxNDcxLA0KLSAgICAweDY5MjUsIDB4MTQ2QSwgMHg2OTI2LCAweDE0NUUsIDB4NjkyOCwgMHgxNDZFLCAweDY5MkEsIDB4MTQ2RiwNCi0gICAgMHg2OTMwLCAweDE0ODAsIDB4NjkzNCwgMHgwQ0E2LCAweDY5MzUsIDB4MzkzNSwgMHg2OTM2LCAweDE0NjUsDQotICAgIDB4NjkzOSwgMHgxNDdDLCAweDY5M0IsIDB4MzkzNiwgMHg2OTNELCAweDE0N0UsIDB4NjkzRiwgMHgwQkY0LA0KLSAgICAweDY5NEEsIDB4MEYzNiwgMHg2OTUzLCAweDBERTgsIDB4Njk1NCwgMHgxNDc5LCAweDY5NTUsIDB4MEIyQSwNCi0gICAgMHg2OTU3LCAweDM5MzcsIDB4Njk1OSwgMHgxNDdGLCAweDY5NUEsIDB4MEFDMSwgMHg2OTVDLCAweDE0NzYsDQotICAgIDB4Njk1RCwgMHgxNDgzLCAweDY5NUUsIDB4MTQ4MiwgMHg2OTYwLCAweDBDQzcsIDB4Njk2MSwgMHgxNDgxLA0KLSAgICAweDY5NjIsIDB4MENDMiwgMHg2OTYzLCAweDM5MzgsIDB4Njk2OCwgMHgyMTMyLCAweDY5NkEsIDB4MTQ4NSwNCi0gICAgMHg2OTZCLCAweDE0NzgsIDB4Njk2RCwgMHgwNkMwLCAweDY5NkUsIDB4MTQ3QiwgMHg2OTZGLCAweDA5NjcsDQotICAgIDB4Njk3MiwgMHgzOTM5LCAweDY5NzMsIDB4MEQxNiwgMHg2OTc0LCAweDE0N0QsIDB4Njk3NSwgMHgwNkMzLA0KLSAgICAweDY5NzcsIDB4MTQ3NSwgMHg2OTc4LCAweDE0NzcsIDB4Njk3OSwgMHgxNDc0LCAweDY5N0MsIDB4MEZENiwNCi0gICAgMHg2OTdELCAweDA1QjgsIDB4Njk3RSwgMHgxNDdBLCAweDY5N0YsIDB4MzkzQSwgMHg2OTgwLCAweDM5M0IsDQotICAgIDB4Njk4MSwgMHgxNDg0LCAweDY5ODIsIDB4MDU5MywgMHg2OThBLCAweDA4NTcsIDB4Njk4RSwgMHgwNEZGLA0KLSAgICAweDY5OTEsIDB4MTQ5NSwgMHg2OTk0LCAweDBGRDcsIDB4Njk5NSwgMHgxNDk4LCAweDY5OTgsIDB4MjEzNCwNCi0gICAgMHg2OTlCLCAweDBBMDAsIDB4Njk5QywgMHgxNDk3LCAweDY5QTAsIDB4MTQ5NiwgMHg2OUE2LCAweDM5M0MsDQotICAgIDB4NjlBNywgMHgxNDkzLCAweDY5QUQsIDB4MzkzRCwgMHg2OUFFLCAweDE0ODcsIDB4NjlCMSwgMHgxNEE0LA0KLSAgICAweDY5QjIsIDB4MTQ4NiwgMHg2OUI0LCAweDE0OTksIDB4NjlCNywgMHgzOTNFLCAweDY5QkIsIDB4MTQ5MSwNCi0gICAgMHg2OUJFLCAweDE0OEMsIDB4NjlCRiwgMHgxNDg5LCAweDY5QzEsIDB4MTQ4QSwgMHg2OUMzLCAweDE0OTIsDQotICAgIDB4NjlDNywgMHgxRDMzLCAweDY5Q0EsIDB4MTQ4RiwgMHg2OUNCLCAweDA3Q0YsIDB4NjlDQywgMHgwQkU0LA0KLSAgICAweDY5Q0QsIDB4MEFFNiwgMHg2OUNFLCAweDE0OEQsIDB4NjlEMCwgMHgxNDg4LCAweDY5RDMsIDB4MTQ4QiwNCi0gICAgMHg2OUQ2LCAweDM5M0YsIDB4NjlENywgMHgzOTQwLCAweDY5RDgsIDB4MEYzNywgMHg2OUQ5LCAweDBFOTgsDQotICAgIDB4NjlERCwgMHgxNDkwLCAweDY5REUsIDB4MTQ5QSwgMHg2OUUyLCAweDIxMzUsIDB4NjlFNywgMHgxNEEyLA0KLSAgICAweDY5RTgsIDB4MTQ5QiwgMHg2OUVBLCAweDM1NkYsIDB4NjlFQiwgMHgxNEE4LCAweDY5RUQsIDB4MTRBNiwNCi0gICAgMHg2OUYyLCAweDE0QTEsIDB4NjlGNiwgMHgzNzNGLCAweDY5RjksIDB4MTRBMCwgMHg2OUZCLCAweDBCRUMsDQotICAgIDB4NjlGRCwgMHgwQUU3LCAweDY5RkYsIDB4MTQ5RSwgMHg2QTAxLCAweDM5NDEsIDB4NkEwMiwgMHgxNDlDLA0KLSAgICAweDZBMDUsIDB4MTRBMywgMHg2QTBBLCAweDE0QTksIDB4NkEwQiwgMHgwRDg5LCAweDZBMEMsIDB4MTRBRiwNCi0gICAgMHg2QTBGLCAweDM5NDIsIDB4NkExMiwgMHgxNEFBLCAweDZBMTMsIDB4MTRBRCwgMHg2QTE0LCAweDE0QTcsDQotICAgIDB4NkExNSwgMHgzOTQzLCAweDZBMTcsIDB4MEJCMiwgMHg2QTE5LCAweDBEQUEsIDB4NkExQiwgMHgxNDlELA0KLSAgICAweDZBMUUsIDB4MTRBNSwgMHg2QTFGLCAweDA5QTgsIDB4NkEyMSwgMHgwRURCLCAweDZBMjIsIDB4MTRCOSwNCi0gICAgMHg2QTIzLCAweDE0QUMsIDB4NkEyOCwgMHgzOTQ0LCAweDZBMjksIDB4MDc1NiwgMHg2QTJBLCAweDA1MjMsDQotICAgIDB4NkEyQiwgMHgwNUJELCAweDZBMkUsIDB4MTQ5NCwgMHg2QTMwLCAweDIxMzYsIDB4NkEzNCwgMHgzOTQ1LA0KLSAgICAweDZBMzUsIDB4MDlBOSwgMHg2QTM2LCAweDE0QjEsIDB4NkEzOCwgMHgxNEI4LCAweDZBMzksIDB4MDkyNSwNCi0gICAgMHg2QTNBLCAweDA1RDAsIDB4NkEzRCwgMHgwQjZDLCAweDZBM0UsIDB4Mzk0NiwgMHg2QTQ0LCAweDE0QUUsDQotICAgIDB4NkE0NSwgMHgzOTQ3LCAweDZBNDYsIDB4MjEzOCwgMHg2QTQ3LCAweDE0QjMsIDB4NkE0OCwgMHgxNEI3LA0KLSAgICAweDZBNEIsIDB4MDZBRSwgMHg2QTUwLCAweDM5NDgsIDB4NkE1MSwgMHgzOTQ5LCAweDZBNTQsIDB4M0MzNCwNCi0gICAgMHg2QTU2LCAweDM5NEEsIDB4NkE1OCwgMHgwNjY2LCAweDZBNTksIDB4MTRCNSwgMHg2QTVCLCAweDM5NEIsDQotICAgIDB4NkE1RiwgMHgwNjNCLCAweDZBNjEsIDB4MENBMywgMHg2QTYyLCAweDE0QjQsIDB4NkE2NiwgMHgxNEI2LA0KLSAgICAweDZBNkIsIDB4MjEzNywgMHg2QTcyLCAweDE0QjAsIDB4NkE3MywgMHgyMTM5LCAweDZBNzgsIDB4MTRCMiwNCi0gICAgMHg2QTdFLCAweDIxM0EsIDB4NkE3RiwgMHgwNUJFLCAweDZBODAsIDB4MEI4NywgMHg2QTgzLCAweDM5NEMsDQotICAgIDB4NkE4NCwgMHgxNEJELCAweDZBODksIDB4Mzk0RCwgMHg2QThELCAweDE0QkIsIDB4NkE4RSwgMHgwNzlELA0KLSAgICAweDZBOTAsIDB4MTRCQSwgMHg2QTkxLCAweDM5NEUsIDB4NkE5NywgMHgxNEMwLCAweDZBOUMsIDB4MTQzQiwNCi0gICAgMHg2QTlELCAweDM5NEYsIDB4NkE5RSwgMHgzOTUwLCAweDZBOUYsIDB4Mzk1MSwgMHg2QUEwLCAweDE0QkMsDQotICAgIDB4NkFBMiwgMHgxNEJFLCAweDZBQTMsIDB4MTRCRiwgMHg2QUFBLCAweDE0Q0IsIDB4NkFBQywgMHgxNEM3LA0KLSAgICAweDZBQUUsIDB4MTQ1MCwgMHg2QUIzLCAweDE0QzYsIDB4NkFCOCwgMHgxNEM1LCAweDZBQkIsIDB4MTRDMiwNCi0gICAgMHg2QUMxLCAweDE0QUIsIDB4NkFDMiwgMHgxNEM0LCAweDZBQzMsIDB4MTRDMywgMHg2QUQxLCAweDE0QzksDQotICAgIDB4NkFEMywgMHgwRkNDLCAweDZBREEsIDB4MTRDQywgMHg2QURCLCAweDA2RjMsIDB4NkFEQywgMHgzOTUyLA0KLSAgICAweDZBREUsIDB4MTRDOCwgMHg2QURGLCAweDE0Q0EsIDB4NkFFMiwgMHgyMTNCLCAweDZBRTQsIDB4MjEzQywNCi0gICAgMHg2QUU3LCAweDM5NTMsIDB4NkFFOCwgMHgwRDNCLCAweDZBRUEsIDB4MTRDRCwgMHg2QUVDLCAweDM5NTQsDQotICAgIDB4NkFGQSwgMHgxNEQxLCAweDZBRkIsIDB4MTRDRSwgMHg2QjA0LCAweDBGNUQsIDB4NkIwNSwgMHgxNENGLA0KLSAgICAweDZCMEEsIDB4MTQ5RiwgMHg2QjEyLCAweDE0RDIsIDB4NkIxNiwgMHgxNEQzLCAweDZCMUQsIDB4MDRENywNCi0gICAgMHg2QjFFLCAweDM5NTUsIDB4NkIxRiwgMHgxNEQ1LCAweDZCMjAsIDB4MDczRCwgMHg2QjIxLCAweDA4Q0QsDQotICAgIDB4NkIyMywgMHgwNkNELCAweDZCMjQsIDB4Mzk1NiwgMHg2QjI3LCAweDA1MjQsIDB4NkIzMiwgMHgwRjQ5LA0KLSAgICAweDZCMzUsIDB4Mzk1NywgMHg2QjM3LCAweDE0RDcsIDB4NkIzOCwgMHgxNEQ2LCAweDZCMzksIDB4MTREOSwNCi0gICAgMHg2QjNBLCAweDA2NTcsIDB4NkIzRCwgMHgwNkNFLCAweDZCM0UsIDB4MDVGQSwgMHg2QjQzLCAweDE0REMsDQotICAgIDB4NkI0NiwgMHgzOTU4LCAweDZCNDcsIDB4MTREQiwgMHg2QjQ5LCAweDE0REQsIDB4NkI0QywgMHgwNTRFLA0KLSAgICAweDZCNEUsIDB4MEI3NSwgMHg2QjUwLCAweDE0REUsIDB4NkI1MywgMHgwNUZCLCAweDZCNTQsIDB4MTRFMCwNCi0gICAgMHg2QjU2LCAweDM5NTksIDB4NkI1OSwgMHgxNERGLCAweDZCNUIsIDB4MTRFMSwgMHg2QjVGLCAweDE0RTIsDQotICAgIDB4NkI2MCwgMHgzOTVBLCAweDZCNjEsIDB4MTRFMywgMHg2QjYyLCAweDA4QUQsIDB4NkI2MywgMHgwQTU5LA0KLSAgICAweDZCNjQsIDB4MDgxMSwgMHg2QjY1LCAweDM0NEEsIDB4NkI2NiwgMHgwREUyLCAweDZCNjksIDB4MEUzMiwNCi0gICAgMHg2QjZBLCAweDBGRUEsIDB4NkI2RiwgMHgwOEMzLCAweDZCNzIsIDB4MzVEOSwgMHg2QjczLCAweDA4NDAsDQotICAgIDB4NkI3NCwgMHgwRkJBLCAweDZCNzcsIDB4MzQ1NiwgMHg2Qjc4LCAweDE0RTQsIDB4NkI3OSwgMHgxNEU1LA0KLSAgICAweDZCN0IsIDB4MDhBRSwgMHg2QjdGLCAweDE0RTYsIDB4NkI4MCwgMHgxNEU3LCAweDZCODIsIDB4Mzk1QiwNCi0gICAgMHg2QjgzLCAweDE0RTksIDB4NkI4NCwgMHgxNEU4LCAweDZCODYsIDB4MEU4NiwgMHg2Qjg5LCAweDA5NjgsDQotICAgIDB4NkI4QSwgMHgwOTE4LCAweDZCOEIsIDB4MDg5MiwgMHg2QjhELCAweDE0RUEsIDB4NkI5NSwgMHgxNEVDLA0KLSAgICAweDZCOTYsIDB4MDlFOSwgMHg2Qjk4LCAweDE0RUIsIDB4NkI5RSwgMHgxNEVELCAweDZCQTQsIDB4MTRFRSwNCi0gICAgMHg2QkFBLCAweDE0RUYsIDB4NkJBQiwgMHgxNEYwLCAweDZCQUYsIDB4MTRGMSwgMHg2QkIxLCAweDE0RjMsDQotICAgIDB4NkJCMiwgMHgxNEYyLCAweDZCQjMsIDB4MTRGNCwgMHg2QkI0LCAweDA1MjUsIDB4NkJCNSwgMHgwQjg4LA0KLSAgICAweDZCQjcsIDB4MTRGNSwgMHg2QkJBLCAweDA4NzQsIDB4NkJCQiwgMHgwNUFBLCAweDZCQkMsIDB4MTRGNiwNCi0gICAgMHg2QkJFLCAweDM5NUMsIDB4NkJCRiwgMHgwQzNDLCAweDZCQzAsIDB4MTE5RCwgMHg2QkM1LCAweDA2M0QsDQotICAgIDB4NkJDNiwgMHgxNEY3LCAweDZCQ0IsIDB4MTRGOCwgMHg2QkNDLCAweDM3NDQsIDB4NkJDRCwgMHgwRTNDLA0KLSAgICAweDZCQ0UsIDB4MEU5NiwgMHg2QkNGLCAweDM0NEMsIDB4NkJEMiwgMHgwQzlGLCAweDZCRDMsIDB4MTRGOSwNCi0gICAgMHg2QkQ0LCAweDBEN0EsIDB4NkJENiwgMHgyMTNELCAweDZCRDgsIDB4MEQ4RiwgMHg2QkRCLCAweDBFREYsDQotICAgIDB4NkJERiwgMHgxNEZBLCAweDZCRTEsIDB4Mzk1RCwgMHg2QkVCLCAweDE0RkMsIDB4NkJFQywgMHgxNEZCLA0KLSAgICAweDZCRUYsIDB4MTRGRSwgMHg2QkYxLCAweDM5NUUsIDB4NkJGMywgMHgxNEZELCAweDZDMDgsIDB4MTUwMCwNCi0gICAgMHg2QzBGLCAweDA4QUYsIDB4NkMxMCwgMHgzOTVGLCAweDZDMTEsIDB4MEVCRCwgMHg2QzEzLCAweDE1MDEsDQotICAgIDB4NkMxNCwgMHgxNTAyLCAweDZDMTcsIDB4MDYzRSwgMHg2QzFCLCAweDE1MDMsIDB4NkMyMywgMHgxNTA1LA0KLSAgICAweDZDMjQsIDB4MTUwNCwgMHg2QzMzLCAweDM5NjAsIDB4NkMzNCwgMHgwQTJCLCAweDZDMzUsIDB4Mzk2MSwNCi0gICAgMHg2QzM3LCAweDBEQUIsIDB4NkMzOCwgMHgwNEVDLCAweDZDM0EsIDB4Mzk2MiwgMHg2QzNFLCAweDBENTksDQotICAgIDB4NkMzRiwgMHgyMTNFLCAweDZDNDAsIDB4MEMxMSwgMHg2QzQxLCAweDA5NEIsIDB4NkM0MiwgMHgwNjdCLA0KLSAgICAweDZDNEUsIDB4MEQ1QSwgMHg2QzUwLCAweDA4REEsIDB4NkM1NSwgMHgxNTA3LCAweDZDNTcsIDB4MDVGQywNCi0gICAgMHg2QzU5LCAweDM5NjMsIDB4NkM1QSwgMHgwNTFBLCAweDZDNUMsIDB4MjEzRiwgMHg2QzVELCAweDBDQ0EsDQotICAgIDB4NkM1RSwgMHgxNTA2LCAweDZDNUYsIDB4MDdEMCwgMHg2QzYwLCAweDBCOTEsIDB4NkM2MiwgMHgxNTA4LA0KLSAgICAweDZDNjgsIDB4MTUxMCwgMHg2QzZBLCAweDE1MDksIDB4NkM2RiwgMHgyMTQxLCAweDZDNzAsIDB4MEIyMSwNCi0gICAgMHg2QzcyLCAweDA2N0MsIDB4NkM3MywgMHgxNTExLCAweDZDNzYsIDB4Mzk2NCwgMHg2QzdBLCAweDA3M0UsDQotICAgIDB4NkM3QiwgMHgzOTY1LCAweDZDN0QsIDB4MDYzRiwgMHg2QzdFLCAweDE1MEYsIDB4NkM4MSwgMHgxNTBELA0KLSAgICAweDZDODIsIDB4MTUwQSwgMHg2QzgzLCAweDBGNEEsIDB4NkM4NSwgMHgzOTY2LCAweDZDODYsIDB4MjE0MCwNCi0gICAgMHg2Qzg4LCAweDBCREMsIDB4NkM4QywgMHgwQ0IxLCAweDZDOEQsIDB4MTUwQiwgMHg2QzkwLCAweDE1MTMsDQotICAgIDB4NkM5MiwgMHgxNTEyLCAweDZDOTMsIDB4MDZGOSwgMHg2Qzk1LCAweDM5NjcsIDB4NkM5NiwgMHgwNTJELA0KLSAgICAweDZDOTksIDB4MDgyQiwgMHg2QzlBLCAweDE1MEMsIDB4NkM5QiwgMHgxNTBFLCAweDZDOUMsIDB4Mzk2OCwNCi0gICAgMHg2Q0ExLCAweDBFODUsIDB4NkNBMiwgMHgwQjU0LCAweDZDQUEsIDB4Mzc0OSwgMHg2Q0FCLCAweDBFQTUsDQotICAgIDB4NkNBRSwgMHgxNTFCLCAweDZDQjEsIDB4MTUxQywgMHg2Q0IzLCAweDA1NEYsIDB4NkNCOCwgMHgwREY4LA0KLSAgICAweDZDQjksIDB4MEYwOSwgMHg2Q0JBLCAweDE1MUUsIDB4NkNCQiwgMHgwOENGLCAweDZDQkMsIDB4MDlBQSwNCi0gICAgMHg2Q0JELCAweDE1MTcsIDB4NkNCRSwgMHgxNTFELCAweDZDQkYsIDB4MDUwQSwgMHg2Q0MxLCAweDA2QUYsDQotICAgIDB4NkNDNCwgMHgxNTE0LCAweDZDQzUsIDB4MTUxOSwgMHg2Q0M5LCAweDBBOTgsIDB4NkNDQSwgMHgwRDI3LA0KLSAgICAweDZDQ0MsIDB4MEQ3QiwgMHg2Q0QwLCAweDM5NjksIDB4NkNEMywgMHgxNTE2LCAweDZDRDQsIDB4Mzk2QSwNCi0gICAgMHg2Q0Q1LCAweDBFNEYsIDB4NkNENiwgMHgzOTZCLCAweDZDRDcsIDB4MTUxOCwgMHg2Q0Q5LCAweDE1MjEsDQotICAgIDB4NkNEQSwgMHgyMTQyLCAweDZDREIsIDB4MTUxRiwgMHg2Q0RELCAweDE1MUEsIDB4NkNFMCwgMHgzOTZDLA0KLSAgICAweDZDRTEsIDB4MEU1MCwgMHg2Q0UyLCAweDBDRkUsIDB4NkNFMywgMHgwNjdELCAweDZDRTUsIDB4MEMxRiwNCi0gICAgMHg2Q0U4LCAweDBCQUIsIDB4NkNFQSwgMHgxNTIyLCAweDZDRUIsIDB4Mzk2RCwgMHg2Q0VDLCAweDM5NkUsDQotICAgIDB4NkNFRSwgMHgzOTZGLCAweDZDRUYsIDB4MTUyMCwgMHg2Q0YwLCAweDBCMzksIDB4NkNGMSwgMHgxNTE1LA0KLSAgICAweDZDRjMsIDB4MDRFRCwgMHg2RDAxLCAweDNDMzUsIDB4NkQwNCwgMHgyMTQzLCAweDZEMEEsIDB4Mzk3MCwNCi0gICAgMHg2RDBCLCAweDBGMzgsIDB4NkQwQywgMHgxNTJELCAweDZEMEUsIDB4Mzk3MSwgMHg2RDExLCAweDM5NzIsDQotICAgIDB4NkQxMiwgMHgxNTJDLCAweDZEMTcsIDB4MEE5QSwgMHg2RDE5LCAweDE1MjksIDB4NkQxQiwgMHgwRjU2LA0KLSAgICAweDZEMUUsIDB4MEM4RSwgMHg2RDFGLCAweDE1MjMsIDB4NkQyNSwgMHgwQkUxLCAweDZEMjksIDB4MDRFRSwNCi0gICAgMHg2RDJBLCAweDA3RDEsIDB4NkQyQiwgMHgxNTI2LCAweDZEMkUsIDB4Mzk3MywgMHg2RDMyLCAweDA5MzEsDQotICAgIDB4NkQzMywgMHgxNTJCLCAweDZEMzUsIDB4MTUyQSwgMHg2RDM2LCAweDE1MjUsIDB4NkQzOCwgMHgxNTI4LA0KLSAgICAweDZEM0IsIDB4MDVDNiwgMHg2RDNELCAweDE1MjcsIDB4NkQzRSwgMHgwQ0ZGLCAweDZENDEsIDB4MEY3NiwNCi0gICAgMHg2RDQ0LCAweDA5REMsIDB4NkQ0NSwgMHgwQTk5LCAweDZENTcsIDB4Mzk3NCwgMHg2RDU5LCAweDE1MzMsDQotICAgIDB4NkQ1QSwgMHgxNTMxLCAweDZENUMsIDB4MERCRiwgMHg2RDVFLCAweDM5NzUsIDB4NkQ2MywgMHgxNTJFLA0KLSAgICAweDZENjQsIDB4MTUzMCwgMHg2RDY1LCAweDM5NzYsIDB4NkQ2NiwgMHgwNERDLCAweDZENjksIDB4MDdEMiwNCi0gICAgMHg2RDZBLCAweDBGRDgsIDB4NkQ2QywgMHgwNTlCLCAweDZENkUsIDB4MERENCwgMHg2RDZGLCAweDIxNDUsDQotICAgIDB4NkQ3NCwgMHgwRjRCLCAweDZENzcsIDB4MDU4MiwgMHg2RDc4LCAweDBBMDEsIDB4NkQ3OSwgMHgxNTMyLA0KLSAgICAweDZEODIsIDB4Mzk3NywgMHg2RDg1LCAweDE1MzcsIDB4NkQ4NywgMHgyMTQ0LCAweDZEODgsIDB4MDlBQiwNCi0gICAgMHg2RDg5LCAweDM0MkEsIDB4NkQ4QywgMHgwRjFBLCAweDZEOEUsIDB4MTUzNCwgMHg2RDkzLCAweDE1MkYsDQotICAgIDB4NkQ5NSwgMHgxNTM1LCAweDZEOTYsIDB4MjE0NiwgMHg2RDk5LCAweDBGQTYsIDB4NkQ5QiwgMHgwQzZELA0KLSAgICAweDZEOUMsIDB4MEM5QSwgMHg2REFDLCAweDIxNDcsIDB4NkRBRiwgMHgwNTk0LCAweDZEQjIsIDB4MDRGNywNCi0gICAgMHg2REI1LCAweDE1M0IsIDB4NkRCOCwgMHgxNTNFLCAweDZEQkMsIDB4MEY4QiwgMHg2REJGLCAweDM5NzgsDQotICAgIDB4NkRDMCwgMHgwRjRFLCAweDZEQzQsIDB4Mzk3OSwgMHg2REM1LCAweDE1NDUsIDB4NkRDNiwgMHgxNTNGLA0KLSAgICAweDZEQzcsIDB4MTUzQywgMHg2RENBLCAweDM5N0EsIDB4NkRDQiwgMHgwRjlDLCAweDZEQ0MsIDB4MTU0MiwNCi0gICAgMHg2RENGLCAweDIxNDgsIDB4NkREMCwgMHgzQzM2LCAweDZERDEsIDB4MDk1NCwgMHg2REQyLCAweDE1NDQsDQotICAgIDB4NkRENSwgMHgxNTQ5LCAweDZERDYsIDB4Mzk3QiwgMHg2REQ4LCAweDBDNkIsIDB4NkREOSwgMHgxNTQ3LA0KLSAgICAweDZEREEsIDB4MzQ1MywgMHg2RERFLCAweDE1NDEsIDB4NkRFMSwgMHgwQjc2LCAweDZERTQsIDB4MTU0OCwNCi0gICAgMHg2REU2LCAweDE1M0QsIDB4NkRFOCwgMHgxNTQzLCAweDZERTksIDB4Mzk3QywgMHg2REVBLCAweDE1NEEsDQotICAgIDB4NkRFQiwgMHgwNEMwLCAweDZERUMsIDB4MTU0MCwgMHg2REVFLCAweDE1NEIsIDB4NkRGMSwgMHgwQTAyLA0KLSAgICAweDZERjIsIDB4MjE0QSwgMHg2REYzLCAweDA5NjksIDB4NkRGNSwgMHgwREY1LCAweDZERjcsIDB4MDgxRSwNCi0gICAgMHg2REY4LCAweDIxNDksIDB4NkRGOSwgMHgxNTM4LCAweDZERkEsIDB4MTU0NiwgMHg2REZCLCAweDBDMzQsDQotICAgIDB4NkRGQywgMHgyMTRCLCAweDZFMDUsIDB4MEE1QSwgMHg2RTA3LCAweDA1QzcsIDB4NkUwOCwgMHgwODQxLA0KLSAgICAweDZFMDksIDB4MDlBQywgMHg2RTBBLCAweDE1M0EsIDB4NkUwQiwgMHgwOTRDLCAweDZFMTMsIDB4MDcyMiwNCi0gICAgMHg2RTE1LCAweDE1MzksIDB4NkUxNywgMHgzNzQ2LCAweDZFMTksIDB4MTU0RiwgMHg2RTFBLCAweDA5NzcsDQotICAgIDB4NkUxQiwgMHgwNzZFLCAweDZFMUQsIDB4MTU1RSwgMHg2RTFGLCAweDE1NTgsIDB4NkUyMCwgMHgwNjhFLA0KLSAgICAweDZFMjEsIDB4MEM0OSwgMHg2RTIyLCAweDM5N0QsIDB4NkUyMywgMHgxNTUzLCAweDZFMjQsIDB4MTU1QywNCi0gICAgMHg2RTI1LCAweDA0NzMsIDB4NkUyNiwgMHgwNEQ0LCAweDZFMjcsIDB4MjE0RSwgMHg2RTI5LCAweDA1MzksDQotICAgIDB4NkUyQiwgMHgxNTU1LCAweDZFMkMsIDB4MEIwQywgMHg2RTJELCAweDE1NEMsIDB4NkUyRSwgMHgxNTRFLA0KLSAgICAweDZFMkYsIDB4MDdEMywgMHg2RTM0LCAweDM0MTIsIDB4NkUzOCwgMHgxNTVGLCAweDZFMzksIDB4MjE0QywNCi0gICAgMHg2RTNBLCAweDE1NUEsIDB4NkUzQywgMHgyMTRGLCAweDZFM0UsIDB4MTU1MiwgMHg2RTQyLCAweDNDMzcsDQotICAgIDB4NkU0MywgMHgxNTU5LCAweDZFNEEsIDB4MEVCNywgMHg2RTRELCAweDE1NTcsIDB4NkU0RSwgMHgxNTVCLA0KLSAgICAweDZFNTEsIDB4Mzk3RSwgMHg2RTU2LCAweDA3ODQsIDB4NkU1OCwgMHgwOUFELCAweDZFNUIsIDB4MEI3NywNCi0gICAgMHg2RTVDLCAweDIxNEQsIDB4NkU1RiwgMHgxNTUxLCAweDZFNjcsIDB4MEYxOSwgMHg2RTZCLCAweDE1NTQsDQotICAgIDB4NkU2RSwgMHgxNTRELCAweDZFNkYsIDB4MEM2QywgMHg2RTcyLCAweDE1NTAsIDB4NkU3NiwgMHgxNTU2LA0KLSAgICAweDZFN0UsIDB4MEZGNywgMHg2RTdGLCAweDA4RUEsIDB4NkU4MCwgMHgwRUFDLCAweDZFODIsIDB4MTU2MCwNCi0gICAgMHg2RThDLCAweDBENDIsIDB4NkU4RiwgMHgxNTZDLCAweDZFOTAsIDB4MDc2RiwgMHg2RTk2LCAweDA5NkEsDQotICAgIDB4NkU5OCwgMHgxNTYyLCAweDZFOUMsIDB4MEY3NywgMHg2RTlELCAweDA3RDQsIDB4NkU5RiwgMHgxNTZGLA0KLSAgICAweDZFQTIsIDB4MDRCMiwgMHg2RUE1LCAweDE1NkQsIDB4NkVBQSwgMHgxNTYxLCAweDZFQUIsIDB4MzQwQywNCi0gICAgMHg2RUFGLCAweDE1NjcsIDB4NkVCMiwgMHgxNTY5LCAweDZFQjYsIDB4MEYzOSwgMHg2RUI3LCAweDE1NjQsDQotICAgIDB4NkVCQSwgMHgwQzI4LCAweDZFQkQsIDB4MTU2NiwgMHg2RUJGLCAweDIxNTAsIDB4NkVDMiwgMHgxNTZFLA0KLSAgICAweDZFQzQsIDB4MTU2OCwgMHg2RUM1LCAweDBFRDMsIDB4NkVDNywgMHgzOTdGLCAweDZFQzksIDB4MTU2MywNCi0gICAgMHg2RUNBLCAweDM5ODAsIDB4NkVDQiwgMHgwOENFLCAweDZFQ0MsIDB4MTU3QiwgMHg2RUNFLCAweDM5ODEsDQotICAgIDB4NkVEMSwgMHgwNUM4LCAweDZFRDMsIDB4MTU2NSwgMHg2RUQ0LCAweDE1NkEsIDB4NkVENSwgMHgxNTZCLA0KLSAgICAweDZFRDksIDB4M0MzOCwgMHg2RURELCAweDBCNEMsIDB4NkVERSwgMHgwQjNBLCAweDZFRTYsIDB4M0MyNCwNCi0gICAgMHg2RUVDLCAweDE1NzMsIDB4NkVFRiwgMHgxNTc5LCAweDZFRjIsIDB4MTU3NywgMHg2RUY0LCAweDBDMjMsDQotICAgIDB4NkVGNywgMHgxNTdFLCAweDZFRjgsIDB4MTU3NCwgMHg2RUZELCAweDM5ODIsIDB4NkVGRSwgMHgxNTc1LA0KLSAgICAweDZFRkYsIDB4MTU1RCwgMHg2RjAxLCAweDA2OTMsIDB4NkYwMiwgMHgwREFDLCAweDZGMDYsIDB4MDhFQiwNCi0gICAgMHg2RjA5LCAweDA4MDksIDB4NkYwRiwgMHgwRkQ5LCAweDZGMTEsIDB4MTU3MSwgMHg2RjEzLCAweDE1N0QsDQotICAgIDB4NkYxNCwgMHgwNTBCLCAweDZGMTUsIDB4MEFFOCwgMHg2RjFBLCAweDM5ODMsIDB4NkYyMCwgMHgwRDJGLA0KLSAgICAweDZGMjIsIDB4MDVGRCwgMHg2RjIzLCAweDBGQzIsIDB4NkYyQSwgMHgzOTg0LCAweDZGMkIsIDB4MEVBRCwNCi0gICAgMHg2RjJDLCAweDBCRUUsIDB4NkYyRiwgMHgzOTg1LCAweDZGMzEsIDB4MTU3OCwgMHg2RjMyLCAweDE1N0EsDQotICAgIDB4NkYzMywgMHgzOTg2LCAweDZGMzgsIDB4MEFCNCwgMHg2RjNFLCAweDE1N0MsIDB4NkYzRiwgMHgxNTc2LA0KLSAgICAweDZGNDEsIDB4MTU3MCwgMHg2RjQ1LCAweDA1RkYsIDB4NkY1MSwgMHgxRTYwLCAweDZGNTQsIDB4MDczRiwNCi0gICAgMHg2RjU4LCAweDE1OEEsIDB4NkY1QSwgMHgzOTg3LCAweDZGNUIsIDB4MTU4NSwgMHg2RjVDLCAweDBBOUMsDQotICAgIDB4NkY1RSwgMHgzOTg4LCAweDZGNUYsIDB4MDVDMSwgMHg2RjYyLCAweDM5ODksIDB4NkY2NCwgMHgwOTZCLA0KLSAgICAweDZGNjYsIDB4MTU4RSwgMHg2RjZELCAweDE1ODcsIDB4NkY2RSwgMHgwQkM4LCAweDZGNkYsIDB4MTU4NCwNCi0gICAgMHg2RjcwLCAweDBCRjUsIDB4NkY3NCwgMHgxNUE3LCAweDZGNzgsIDB4MTU4MSwgMHg2RjdBLCAweDE1ODAsDQotICAgIDB4NkY3QywgMHgxNTg5LCAweDZGN0QsIDB4Mzk4QSwgMHg2RjgwLCAweDE1ODMsIDB4NkY4MSwgMHgxNTgyLA0KLSAgICAweDZGODIsIDB4MTU4OCwgMHg2Rjg0LCAweDBBNDUsIDB4NkY4NiwgMHgxNTdGLCAweDZGODgsIDB4MjE1MSwNCi0gICAgMHg2RjhCLCAweDM5OEIsIDB4NkY4RCwgMHgzOThDLCAweDZGOEUsIDB4MTU4QiwgMHg2RjkxLCAweDE1OEMsDQotICAgIDB4NkY5MiwgMHgzOThELCAweDZGOTQsIDB4Mzk4RSwgMHg2Rjk3LCAweDA1RkUsIDB4NkY5OCwgMHgzNjNDLA0KLSAgICAweDZGOUEsIDB4Mzk4RiwgMHg2RkExLCAweDE1OTEsIDB4NkZBMywgMHgxNTkwLCAweDZGQTQsIDB4MTU5MiwNCi0gICAgMHg2RkE3LCAweDM5OTAsIDB4NkZBOCwgMHgzOTkxLCAweDZGQUEsIDB4MTU5NSwgMHg2RkIxLCAweDBDM0QsDQotICAgIDB4NkZCMywgMHgxNThGLCAweDZGQjUsIDB4MjE1MiwgMHg2RkI2LCAweDM5OTIsIDB4NkZCOSwgMHgxNTkzLA0KLSAgICAweDZGQzAsIDB4MDczOSwgMHg2RkMxLCAweDBCNTksIDB4NkZDMiwgMHgxNThELCAweDZGQzMsIDB4MENGMSwNCi0gICAgMHg2RkM2LCAweDE1OTQsIDB4NkZENCwgMHgxNTk5LCAweDZGRDUsIDB4MTU5NywgMHg2RkQ4LCAweDE1OUEsDQotICAgIDB4NkZEQSwgMHgzOTkzLCAweDZGREIsIDB4MTU5RCwgMHg2RkRFLCAweDM5OTQsIDB4NkZERiwgMHgxNTk2LA0KLSAgICAweDZGRTAsIDB4MDdGQywgMHg2RkUxLCAweDBDREUsIDB4NkZFNCwgMHgxNTM2LCAweDZGRUIsIDB4MEY1RSwNCi0gICAgMHg2RkVDLCAweDE1OTgsIDB4NkZFRSwgMHgxNTlDLCAweDZGRUYsIDB4MEI1NSwgMHg2RkYxLCAweDE1OUIsDQotICAgIDB4NkZGMywgMHgxNTg2LCAweDZGRjUsIDB4MjE1MywgMHg2RkY2LCAweDFCQTQsIDB4NkZGOSwgMHgzOTk1LA0KLSAgICAweDZGRkEsIDB4MTVBMCwgMHg2RkZFLCAweDE1QTQsIDB4NzAwMSwgMHgxNUEyLCAweDcwMDUsIDB4MjE1NCwNCi0gICAgMHg3MDA2LCAweDFFNTAsIDB4NzAwNywgMHgyMTU1LCAweDcwMDksIDB4MTU5RSwgMHg3MDBCLCAweDE1OUYsDQotICAgIDB4NzAwRiwgMHgxNUEzLCAweDcwMTEsIDB4MTVBMSwgMHg3MDE1LCAweDBEQzAsIDB4NzAxOCwgMHgxNUE5LA0KLSAgICAweDcwMUEsIDB4MTVBNiwgMHg3MDFCLCAweDE1QTUsIDB4NzAxRCwgMHgxNUE4LCAweDcwMUUsIDB4MENBQywNCi0gICAgMHg3MDFGLCAweDE1QUEsIDB4NzAyNiwgMHgwQkIzLCAweDcwMjcsIDB4MEI0RCwgMHg3MDI4LCAweDIxNTYsDQotICAgIDB4NzAyQywgMHgwQTQ5LCAweDcwMzAsIDB4MTVBQiwgMHg3MDMyLCAweDE1QUQsIDB4NzAzOSwgMHgzOTk2LA0KLSAgICAweDcwM0MsIDB4Mzk5NywgMHg3MDNFLCAweDE1QUMsIDB4NzA0QSwgMHgzOTk4LCAweDcwNEMsIDB4MTU3MiwNCi0gICAgMHg3MDUxLCAweDE1QUUsIDB4NzA1NCwgMHgzOTk5LCAweDcwNTgsIDB4MENCRiwgMHg3MDVELCAweDM5OUEsDQotICAgIDB4NzA1RSwgMHgzOTlCLCAweDcwNjMsIDB4MTVBRiwgMHg3MDY0LCAweDM5OUMsIDB4NzA2QiwgMHgwNTUwLA0KLSAgICAweDcwNkMsIDB4Mzk5RCwgMHg3MDZGLCAweDBDNkUsIDB4NzA3MCwgMHgwNTgzLCAweDcwNzgsIDB4MDY3RSwNCi0gICAgMHg3MDdDLCAweDA5MEEsIDB4NzA3RCwgMHgwODQyLCAweDcwN0UsIDB4Mzk5RSwgMHg3MDgxLCAweDM5OUYsDQotICAgIDB4NzA4NSwgMHgyMTU3LCAweDcwODksIDB4MEZDRCwgMHg3MDhBLCAweDBBMkMsIDB4NzA4RSwgMHgwNTBDLA0KLSAgICAweDcwOTIsIDB4MTVCMSwgMHg3MDk1LCAweDM5QTAsIDB4NzA5OSwgMHgxNUIwLCAweDcwQUIsIDB4MjE1OCwNCi0gICAgMHg3MEFDLCAweDE1QjQsIDB4NzBBRCwgMHgwQjc4LCAweDcwQUUsIDB4MTVCNywgMHg3MEFGLCAweDE1QjIsDQotICAgIDB4NzBCMywgMHgxNUI2LCAweDcwQjcsIDB4MzlBMSwgMHg3MEI4LCAweDE1QjUsIDB4NzBCOSwgMHgwQzNBLA0KLSAgICAweDcwQkEsIDB4MDQ5RCwgMHg3MEJCLCAweDIwQUQsIDB4NzBDOCwgMHgwRkJELCAweDcwQ0IsIDB4MTVCOSwNCi0gICAgMHg3MENGLCAweDA0Q0EsIDB4NzBEMywgMHgzOUEyLCAweDcwRDQsIDB4MzlBMywgMHg3MEQ4LCAweDM5QTQsDQotICAgIDB4NzBEOSwgMHgxNUJCLCAweDcwREMsIDB4MzlBNSwgMHg3MERELCAweDE1QkEsIDB4NzBERiwgMHgxNUI4LA0KLSAgICAweDcwRjEsIDB4MTVCMywgMHg3MEY5LCAweDBFNTEsIDB4NzBGRCwgMHgxNUJELCAweDcxMDQsIDB4MjE1QSwNCi0gICAgMHg3MTA3LCAweDM5QTYsIDB4NzEwOSwgMHgxNUJDLCAweDcxMEYsIDB4MjE1OSwgMHg3MTE0LCAweDA1MEQsDQotICAgIDB4NzExOSwgMHgxNUJGLCAweDcxMUEsIDB4MEUwMiwgMHg3MTFDLCAweDE1QkUsIDB4NzEyMCwgMHgzOUE3LA0KLSAgICAweDcxMjEsIDB4MEVDMSwgMHg3MTI2LCAweDA5QUYsIDB4NzEzMCwgMHgxRERDLCAweDcxMzEsIDB4MzlBOCwNCi0gICAgMHg3MTM2LCAweDBBQjUsIDB4NzEzQywgMHgwOUFFLCAweDcxNDYsIDB4MjE1QywgMHg3MTQ3LCAweDIxNUQsDQotICAgIDB4NzE0OSwgMHgwRkMzLCAweDcxNEEsIDB4MzlBOSwgMHg3MTRDLCAweDE1QzUsIDB4NzE0RSwgMHgwQTlELA0KLSAgICAweDcxNTIsIDB4MzlBQSwgMHg3MTU1LCAweDE1QzEsIDB4NzE1NiwgMHgxNUM2LCAweDcxNTksIDB4MDUwRSwNCi0gICAgMHg3MTVDLCAweDIxNUIsIDB4NzE2MCwgMHgzOUFCLCAweDcxNjIsIDB4MTVDNCwgMHg3MTY0LCAweDBEMTcsDQotICAgIDB4NzE2NSwgMHgxNUMwLCAweDcxNjYsIDB4MTVDMywgMHg3MTY3LCAweDA5QjAsIDB4NzE2OSwgMHgwRDY1LA0KLSAgICAweDcxNkMsIDB4MTVDNywgMHg3MTZFLCAweDA4RkQsIDB4NzE3OSwgMHgzOUFDLCAweDcxN0QsIDB4MEE5RSwNCi0gICAgMHg3MTg0LCAweDE1Q0EsIDB4NzE4OCwgMHgxNUMyLCAweDcxOEEsIDB4MDZGRCwgMHg3MThGLCAweDE1QzgsDQotICAgIDB4NzE5MiwgMHgzOUFELCAweDcxOTQsIDB4MEYzQSwgMHg3MTk1LCAweDE1Q0IsIDB4NzE5OSwgMHgyMDVELA0KLSAgICAweDcxOUYsIDB4MDk1OSwgMHg3MUE4LCAweDE1Q0MsIDB4NzFBQywgMHgxNUNELCAweDcxQjEsIDB4MENFNCwNCi0gICAgMHg3MUIzLCAweDM5QUUsIDB4NzFCOSwgMHgxNUNGLCAweDcxQkUsIDB4MTVEMCwgMHg3MUMxLCAweDIxNUYsDQotICAgIDB4NzFDMywgMHgwQ0U5LCAweDcxQzgsIDB4MEM2RiwgMHg3MUM5LCAweDE1RDIsIDB4NzFDQiwgMHgzOUFGLA0KLSAgICAweDcxQ0UsIDB4MTVENCwgMHg3MUQwLCAweDBGOUQsIDB4NzFEMiwgMHgxNUQxLCAweDcxRDMsIDB4MzlCMCwNCi0gICAgMHg3MUQ0LCAweDE1RDMsIDB4NzFENSwgMHgwNTBGLCAweDcxRDYsIDB4MzlCMSwgMHg3MUQ3LCAweDE1Q0UsDQotICAgIDB4NzFERiwgMHgxMTRFLCAweDcxRTAsIDB4MTVENSwgMHg3MUU1LCAweDBBRTksIDB4NzFFNiwgMHgwODg2LA0KLSAgICAweDcxRTcsIDB4MTVENywgMHg3MUVDLCAweDE1RDYsIDB4NzFFRCwgMHgwOUVBLCAweDcxRUUsIDB4MTBFRSwNCi0gICAgMHg3MUY1LCAweDE1RDgsIDB4NzFGOSwgMHgxNURBLCAweDcxRkIsIDB4MTVDOSwgMHg3MUZDLCAweDE1RDksDQotICAgIDB4NzFGRSwgMHgyMTYwLCAweDcxRkYsIDB4MTVEQiwgMHg3MjAwLCAweDM5QjIsIDB4NzIwNiwgMHgwRDMwLA0KLSAgICAweDcyMEQsIDB4MTVEQywgMHg3MjEwLCAweDE1REQsIDB4NzIxQiwgMHgxNURFLCAweDcyMUQsIDB4MzlCMywNCi0gICAgMHg3MjI4LCAweDE1REYsIDB4NzIyQSwgMHgwQkZBLCAweDcyMkIsIDB4MzlCNCwgMHg3MjJDLCAweDE1RTEsDQotICAgIDB4NzIyRCwgMHgxNUUwLCAweDcyMzAsIDB4MTVFMiwgMHg3MjMyLCAweDE1RTMsIDB4NzIzNSwgMHgwOTBCLA0KLSAgICAweDcyMzYsIDB4MERENSwgMHg3MjM4LCAweDM5QjUsIDB4NzIzQSwgMHgwRUY4LCAweDcyM0IsIDB4MTVFNCwNCi0gICAgMHg3MjNDLCAweDE1RTUsIDB4NzIzRCwgMHgwQUQ4LCAweDcyM0UsIDB4MDhEMCwgMHg3MjNGLCAweDE1RTYsDQotICAgIDB4NzI0MCwgMHgxNUU3LCAweDcyNDEsIDB4MzlCNiwgMHg3MjQ2LCAweDE1RTgsIDB4NzI0NywgMHgwRTIyLA0KLSAgICAweDcyNDgsIDB4MEQ1QiwgMHg3MjRCLCAweDE1RTksIDB4NzI0QywgMHgwRDBELCAweDcyNTIsIDB4MEJDOSwNCi0gICAgMHg3MjUzLCAweDM5QjcsIDB4NzI1NSwgMHgzOUI4LCAweDcyNTYsIDB4MzlCOSwgMHg3MjU4LCAweDE1RUEsDQotICAgIDB4NzI1OSwgMHgwNTY3LCAweDcyNUIsIDB4MDY4NywgMHg3MjVDLCAweDM5QkEsIDB4NzI1RCwgMHgwRUQyLA0KLSAgICAweDcyNUYsIDB4MEVDMiwgMHg3MjYxLCAweDA1MzQsIDB4NzI2MiwgMHgwRkRBLCAweDcyNjcsIDB4MEU4MCwNCi0gICAgMHg3MjY5LCAweDBERkEsIDB4NzI3MiwgMHgwQTVCLCAweDcyNzQsIDB4MTVFQiwgMHg3Mjc5LCAweDBDOUIsDQotICAgIDB4NzI3RCwgMHgwNzU3LCAweDcyN0UsIDB4MTVFQywgMHg3MjgwLCAweDA4NDQsIDB4NzI4MSwgMHgxNUVFLA0KLSAgICAweDcyODIsIDB4MTVFRCwgMHg3Mjg3LCAweDE1RUYsIDB4NzI4RCwgMHgzOUJCLCAweDcyOTIsIDB4MTVGMCwNCi0gICAgMHg3Mjk2LCAweDE1RjEsIDB4NzJBMCwgMHgwNjU4LCAweDcyQTIsIDB4MTVGMiwgMHg3MkE3LCAweDE1RjMsDQotICAgIDB4NzJBQywgMHgwNzU4LCAweDcyQUQsIDB4MzlCQywgMHg3MkFGLCAweDBENUMsIDB4NzJCMSwgMHgyMTYxLA0KLSAgICAweDcyQjIsIDB4MTVGNSwgMHg3MkI0LCAweDM5QkQsIDB4NzJCNiwgMHgwOURELCAweDcyQjksIDB4MTVGNCwNCi0gICAgMHg3MkJFLCAweDIxNjIsIDB4NzJDMCwgMHgzNDJCLCAweDcyQzIsIDB4MDZCMCwgMHg3MkMzLCAweDE1RjYsDQotICAgIDB4NzJDNCwgMHgxNUY4LCAweDcyQzYsIDB4MTVGNywgMHg3MkM3LCAweDM5QkUsIDB4NzJDRSwgMHgxNUY5LA0KLSAgICAweDcyRDAsIDB4MDc4NSwgMHg3MkQyLCAweDE1RkEsIDB4NzJENywgMHgwNkUxLCAweDcyRDksIDB4MEFDMiwNCi0gICAgMHg3MkRCLCAweDA4MEYsIDB4NzJFMCwgMHgxNUZDLCAweDcyRTEsIDB4MTVGRCwgMHg3MkUyLCAweDE1RkIsDQotICAgIDB4NzJFOSwgMHgwOTE5LCAweDcyRUMsIDB4MENBMCwgMHg3MkVELCAweDA2QjEsIDB4NzJGNywgMHgxNUZGLA0KLSAgICAweDcyRjgsIDB4MEI2QSwgMHg3MkY5LCAweDE1RkUsIDB4NzJGQiwgMHgzOUJGLCAweDcyRkMsIDB4MEZEQiwNCi0gICAgMHg3MkZELCAweDBEMTgsIDB4NzMwNCwgMHgzOUMwLCAweDczMDUsIDB4MzlDMSwgMHg3MzBBLCAweDE2MDIsDQotICAgIDB4NzMxNiwgMHgxNjA0LCAweDczMTcsIDB4MTYwMSwgMHg3MzFCLCAweDBFRTAsIDB4NzMxQywgMHgxNjAzLA0KLSAgICAweDczMUQsIDB4MTYwNSwgMHg3MzFGLCAweDBGOEMsIDB4NzMyNCwgMHgyMTYzLCAweDczMjUsIDB4MTYwOSwNCi0gICAgMHg3MzI4LCAweDM5QzIsIDB4NzMyOSwgMHgxNjA4LCAweDczMkEsIDB4MEJCNCwgMHg3MzJCLCAweDBDRTMsDQotICAgIDB4NzMyRSwgMHgwNzU5LCAweDczMkYsIDB4MTYwNywgMHg3MzMxLCAweDM5QzMsIDB4NzMzNCwgMHgxNjA2LA0KLSAgICAweDczMzYsIDB4MEYxQiwgMHg3MzM3LCAweDBGMUMsIDB4NzMzRSwgMHgxNjBBLCAweDczM0YsIDB4MDUxMCwNCi0gICAgMHg3MzQzLCAweDM5QzQsIDB4NzM0NCwgMHgwODA4LCAweDczNDUsIDB4MDhCMCwgMHg3MzRFLCAweDE2MEIsDQotICAgIDB4NzM0RiwgMHgxNjBDLCAweDczNTcsIDB4MTYwRSwgMHg3MzYzLCAweDA5NEQsIDB4NzM2OCwgMHgxNjEwLA0KLSAgICAweDczNkEsIDB4MTYwRiwgMHg3MzZDLCAweDM5QzUsIDB4NzM3MCwgMHgxNjExLCAweDczNzIsIDB4MDVBQiwNCi0gICAgMHg3Mzc1LCAweDE2MTMsIDB4NzM3NywgMHgyMTY1LCAweDczNzgsIDB4MTYxMiwgMHg3MzdBLCAweDE2MTUsDQotICAgIDB4NzM3QiwgMHgxNjE0LCAweDczN0MsIDB4MzlDNiwgMHg3MzgzLCAweDM5QzcsIDB4NzM4NCwgMHgwNzcwLA0KLSAgICAweDczODUsIDB4MzlDOCwgMHg3Mzg2LCAweDM5QzksIDB4NzM4NywgMHgwRjcwLCAweDczODksIDB4MDZDNCwNCi0gICAgMHg3MzhCLCAweDA1MjYsIDB4NzM5NSwgMHgzOUNBLCAweDczOTYsIDB4MDZFMiwgMHg3MzlFLCAweDM5Q0IsDQotICAgIDB4NzM5RiwgMHgzOUNDLCAweDczQTAsIDB4MzlDRCwgMHg3M0E2LCAweDM5Q0UsIDB4NzNBOCwgMHgzQzNGLA0KLSAgICAweDczQTksIDB4MDYxRCwgMHg3M0FCLCAweDM5Q0YsIDB4NzNCMiwgMHgwRkIwLCAweDczQjMsIDB4MTYxNywNCi0gICAgMHg3M0I1LCAweDM5RDAsIDB4NzNCNywgMHgzOUQxLCAweDczQkEsIDB4MzVFQSwgMHg3M0JCLCAweDE2MTksDQotICAgIDB4NzNCQywgMHgzOUQyLCAweDczQkQsIDB4MjE2NiwgMHg3M0MwLCAweDE2MUEsIDB4NzNDMiwgMHgwNTUxLA0KLSAgICAweDczQzgsIDB4MTYxNiwgMHg3M0M5LCAweDIxNjcsIDB4NzNDQSwgMHgwODg3LCAweDczQ0QsIDB4MEJERCwNCi0gICAgMHg3M0NFLCAweDE2MTgsIDB4NzNDRiwgMHgzOUQzLCAweDczRDIsIDB4MjE2QSwgMHg3M0Q2LCAweDIxNjgsDQotICAgIDB4NzNEOSwgMHgzOUQ0LCAweDczREUsIDB4MTYxRCwgMHg3M0UwLCAweDA5MUEsIDB4NzNFMywgMHgyMTY5LA0KLSAgICAweDczRTQsIDB4M0MzOSwgMHg3M0U1LCAweDE2MUIsIDB4NzNFOSwgMHgzOUQ1LCAweDczRUEsIDB4MDcxNCwNCi0gICAgMHg3M0VELCAweDBENUQsIDB4NzNFRSwgMHgxNjFDLCAweDczRjEsIDB4MTYzNywgMHg3M0Y0LCAweDM5RDYsDQotICAgIDB4NzNGNSwgMHgyMTZDLCAweDczRjgsIDB4MTYyMiwgMHg3M0ZELCAweDM5RDcsIDB4NzNGRSwgMHgwNzcxLA0KLSAgICAweDc0MDMsIDB4MDY3RiwgMHg3NDA0LCAweDM5RDgsIDB4NzQwNSwgMHgxNjFGLCAweDc0MDYsIDB4MEY2NywNCi0gICAgMHg3NDA3LCAweDIxNkIsIDB4NzQwOSwgMHgwRjc4LCAweDc0MEEsIDB4MzlEOSwgMHg3NDFBLCAweDM5REEsDQotICAgIDB4NzQxQiwgMHgzOURCLCAweDc0MjEsIDB4M0MzQSwgMHg3NDIyLCAweDBCNTYsIDB4NzQyNCwgMHgzOURDLA0KLSAgICAweDc0MjUsIDB4MTYyMSwgMHg3NDI2LCAweDIxNkQsIDB4NzQyOCwgMHgzOURELCAweDc0MjksIDB4MjE2RiwNCi0gICAgMHg3NDJBLCAweDIxNkUsIDB4NzQyQywgMHgzOURFLCAweDc0MkUsIDB4MjE3MCwgMHg3NDJGLCAweDM5REYsDQotICAgIDB4NzQzMCwgMHgzOUUwLCAweDc0MzEsIDB4MzlFMSwgMHg3NDMyLCAweDE2MjMsIDB4NzQzMywgMHgwRjlFLA0KLSAgICAweDc0MzQsIDB4MDZDRiwgMHg3NDM1LCAweDBEOTAsIDB4NzQzNiwgMHgwRDAwLCAweDc0MzksIDB4MzlFMiwNCi0gICAgMHg3NDNBLCAweDE2MjQsIDB4NzQzRiwgMHgxNjI2LCAweDc0NDEsIDB4MTYyOSwgMHg3NDQ0LCAweDM5RTMsDQotICAgIDB4NzQ0NywgMHgzOUU0LCAweDc0NEIsIDB4MzlFNSwgMHg3NDRELCAweDM5RTYsIDB4NzQ1MSwgMHgzOUU3LA0KLSAgICAweDc0NTUsIDB4MTYyNSwgMHg3NDU3LCAweDM5RTgsIDB4NzQ1OSwgMHgxNjI4LCAweDc0NUEsIDB4MDc5RSwNCi0gICAgMHg3NDVCLCAweDA0RUYsIDB4NzQ1QywgMHgxNjJBLCAweDc0NUUsIDB4MEEzNiwgMHg3NDVGLCAweDE2MjcsDQotICAgIDB4NzQ2MCwgMHgwRkE0LCAweDc0NjIsIDB4MjE3MSwgMHg3NDYzLCAweDE2MkQsIDB4NzQ2NCwgMHgxRDM1LA0KLSAgICAweDc0NjYsIDB4MzlFOSwgMHg3NDY5LCAweDE2MkIsIDB4NzQ2QSwgMHgxNjJFLCAweDc0NkIsIDB4MzlFQSwNCi0gICAgMHg3NDZGLCAweDE2MjAsIDB4NzQ3MCwgMHgxNjJDLCAweDc0NzEsIDB4MzlFQiwgMHg3NDczLCAweDA4MkMsDQotICAgIDB4NzQ3NiwgMHgxNjJGLCAweDc0N0UsIDB4MTYzMCwgMHg3NDgwLCAweDM5RUMsIDB4NzQ4MywgMHgwRjY4LA0KLSAgICAweDc0ODUsIDB4MzlFRCwgMHg3NDg2LCAweDM5RUUsIDB4NzQ4NywgMHgzOUVGLCAweDc0ODksIDB4MjE3MiwNCi0gICAgMHg3NDhCLCAweDE2MzEsIDB4NzQ5MCwgMHgzOUYwLCAweDc0OTgsIDB4MzlGMSwgMHg3NDlDLCAweDM5RjIsDQotICAgIDB4NzQ5RSwgMHgxNjMyLCAweDc0OUYsIDB4MjE3MywgMHg3NEEwLCAweDM5RjMsIDB4NzRBMiwgMHgxNjFFLA0KLSAgICAweDc0QTMsIDB4MzlGNCwgMHg3NEE3LCAweDE2MzMsIDB4NzRBOCwgMHgzOUY1LCAweDc0QUIsIDB4MzlGNiwNCi0gICAgMHg3NEIwLCAweDA2MDAsIDB4NzRCNSwgMHgzOUY3LCAweDc0QkQsIDB4MDhEMSwgMHg3NEJGLCAweDM5RjgsDQotICAgIDB4NzRDOCwgMHgzOUY5LCAweDc0Q0EsIDB4MTYzNCwgMHg3NENGLCAweDE2MzUsIDB4NzRENCwgMHgxNjM2LA0KLSAgICAweDc0REEsIDB4MzlGQSwgMHg3NERDLCAweDA0REQsIDB4NzRERSwgMHgzOUZCLCAweDc0RTAsIDB4MTYzOCwNCi0gICAgMHg3NEUyLCAweDBEQUQsIDB4NzRFMywgMHgxNjM5LCAweDc0RTYsIDB4MDVFMCwgMHg3NEU3LCAweDE2M0EsDQotICAgIDB4NzRFOSwgMHgxNjNCLCAweDc0RUUsIDB4MTYzQywgMHg3NEVGLCAweDM3NTAsIDB4NzRGMCwgMHgxNjNFLA0KLSAgICAweDc0RjEsIDB4MTYzRiwgMHg3NEYyLCAweDE2M0QsIDB4NzRGNiwgMHgwREM1LCAweDc0RjcsIDB4MTY0MSwNCi0gICAgMHg3NEY4LCAweDE2NDAsIDB4NzUwMSwgMHgyMTc0LCAweDc1MDMsIDB4MTY0MywgMHg3NTA0LCAweDE2NDIsDQotICAgIDB4NzUwNSwgMHgxNjQ0LCAweDc1MEMsIDB4MTY0NSwgMHg3NTBELCAweDE2NDcsIDB4NzUwRSwgMHgxNjQ2LA0KLSAgICAweDc1MTEsIDB4MDgwQiwgMHg3NTEzLCAweDE2NDksIDB4NzUxNSwgMHgxNjQ4LCAweDc1MTgsIDB4MDYwMSwNCi0gICAgMHg3NTFBLCAweDBBMTksIDB4NzUxQywgMHgwQzM2LCAweDc1MUUsIDB4MTY0QSwgMHg3NTFGLCAweDBBNUMsDQotICAgIDB4NzUyMiwgMHgzNURFLCAweDc1MjMsIDB4MDg4OCwgMHg3NTI1LCAweDA1MUIsIDB4NzUyNiwgMHgxNjRCLA0KLSAgICAweDc1MjgsIDB4MEYzQiwgMHg3NTJCLCAweDBFMzMsIDB4NzUyQywgMHgxNjRDLCAweDc1MkYsIDB4MjBGMiwNCi0gICAgMHg3NTMwLCAweDBDM0UsIDB4NzUzMSwgMHgwRjFELCAweDc1MzIsIDB4MDdENSwgMHg3NTMzLCAweDBBMDMsDQotICAgIDB4NzUzNywgMHgwQjg5LCAweDc1MzgsIDB4MTBDOSwgMHg3NTNBLCAweDBCQ0EsIDB4NzUzQiwgMHgwNTY4LA0KLSAgICAweDc1M0MsIDB4MTY0RCwgMHg3NTQ0LCAweDE2NEUsIDB4NzU0NiwgMHgxNjUzLCAweDc1NDksIDB4MTY1MSwNCi0gICAgMHg3NTRBLCAweDE2NTAsIDB4NzU0QiwgMHgxM0M3LCAweDc1NEMsIDB4MDU4NCwgMHg3NTRELCAweDE2NEYsDQotICAgIDB4NzU0RSwgMHgzOUZDLCAweDc1NEYsIDB4MDQ5RSwgMHg3NTUxLCAweDBEM0UsIDB4NzU1NCwgMHgwRDVFLA0KLSAgICAweDc1NTksIDB4MEY3OSwgMHg3NTVBLCAweDE2NTQsIDB4NzU1QiwgMHgxNjUyLCAweDc1NUMsIDB4MEI5QSwNCi0gICAgMHg3NTVELCAweDBBNEEsIDB4NzU2MCwgMHgwRDNGLCAweDc1NjIsIDB4MEQ5RiwgMHg3NTY0LCAweDE2NTYsDQotICAgIDB4NzU2NSwgMHgwRjc0LCAweDc1NjYsIDB4MDcyMywgMHg3NTY3LCAweDE2NTcsIDB4NzU2OSwgMHgxNjU1LA0KLSAgICAweDc1NkEsIDB4MEQ2QSwgMHg3NTZCLCAweDE2NTgsIDB4NzU2QywgMHgzQzNCLCAweDc1NkQsIDB4MTY1OSwNCi0gICAgMHg3NTZGLCAweDIxNzUsIDB4NzU3MCwgMHgwNDlGLCAweDc1NzMsIDB4MDlERSwgMHg3NTc0LCAweDE2NUUsDQotICAgIDB4NzU3NSwgMHgzNzUxLCAweDc1NzYsIDB4MTY1QiwgMHg3NTc3LCAweDBDQzUsIDB4NzU3OCwgMHgxNjVBLA0KLSAgICAweDc1NzksIDB4MzlGRCwgMHg3NTdGLCAweDA2NDAsIDB4NzU4MSwgMHgzOUZFLCAweDc1ODIsIDB4MTY2MSwNCi0gICAgMHg3NTg2LCAweDE2NUMsIDB4NzU4NywgMHgxNjVELCAweDc1ODksIDB4MTY2MCwgMHg3NThBLCAweDE2NUYsDQotICAgIDB4NzU4QiwgMHgwRDk3LCAweDc1OEUsIDB4MEFDNCwgMHg3NThGLCAweDBBQzMsIDB4NzU5MCwgMHgzOUZGLA0KLSAgICAweDc1OTEsIDB4MDY1OSwgMHg3NTkyLCAweDNBMDAsIDB4NzU5MywgMHgzQTAxLCAweDc1OTQsIDB4MTY2MiwNCi0gICAgMHg3NTlBLCAweDE2NjMsIDB4NzU5RCwgMHgxNjY0LCAweDc1QTMsIDB4MTY2NiwgMHg3NUE1LCAweDE2NjUsDQotICAgIDB4NzVBQiwgMHgwNEY4LCAweDc1QjEsIDB4MTY2RSwgMHg3NUIyLCAweDBEN0MsIDB4NzVCMywgMHgxNjY4LA0KLSAgICAweDc1QjQsIDB4M0EwMiwgMHg3NUI1LCAweDE2NkEsIDB4NzVCOCwgMHgxNjZDLCAweDc1QjksIDB4MEEwNCwNCi0gICAgMHg3NUJDLCAweDE2NkQsIDB4NzVCRCwgMHgxNjZCLCAweDc1QkUsIDB4MDhFQywgMHg3NUMyLCAweDE2NjcsDQotICAgIDB4NzVDMywgMHgxNjY5LCAweDc1QzUsIDB4MERCNCwgMHg3NUM3LCAweDA5QjEsIDB4NzVDQSwgMHgxNjcwLA0KLSAgICAweDc1Q0QsIDB4MTY2RiwgMHg3NUQyLCAweDE2NzEsIDB4NzVENCwgMHgwOEQyLCAweDc1RDUsIDB4MDgxRiwNCi0gICAgMHg3NUQ4LCAweDBDNzEsIDB4NzVEOSwgMHgxNjcyLCAweDc1REIsIDB4MEJFNywgMHg3NURFLCAweDE2NzQsDQotICAgIDB4NzVFMiwgMHgwRjY5LCAweDc1RTMsIDB4MTY3MywgMHg3NUU0LCAweDNBMDMsIDB4NzVFOSwgMHgwQUVCLA0KLSAgICAweDc1RUMsIDB4Mzc1MiwgMHg3NUYwLCAweDE2NzksIDB4NzVGMiwgMHgxNjdCLCAweDc1RjMsIDB4MTY3QywNCi0gICAgMHg3NUY0LCAweDBCOTIsIDB4NzVGOSwgMHgzQTA0LCAweDc1RkEsIDB4MTY3QSwgMHg3NUZDLCAweDE2NzcsDQotICAgIDB4NzVGRSwgMHgxNjc1LCAweDc1RkYsIDB4MTY3NiwgMHg3NjAwLCAweDNBMDUsIDB4NzYwMSwgMHgxNjc4LA0KLSAgICAweDc2MDksIDB4MTY3RiwgMHg3NjBBLCAweDNBMDYsIDB4NzYwQiwgMHgxNjdELCAweDc2MEQsIDB4MTY3RSwNCi0gICAgMHg3NjE1LCAweDNBMDcsIDB4NzYxNiwgMHgzQTA4LCAweDc2MTksIDB4M0EwOSwgMHg3NjFFLCAweDNBMEEsDQotICAgIDB4NzYxRiwgMHgxNjgwLCAweDc2MjAsIDB4MTY4MiwgMHg3NjIxLCAweDE2ODMsIDB4NzYyMiwgMHgxNjg0LA0KLSAgICAweDc2MjQsIDB4MTY4NSwgMHg3NjI2LCAweDFFMkQsIDB4NzYyNywgMHgxNjgxLCAweDc2MkQsIDB4M0EwQiwNCi0gICAgMHg3NjMwLCAweDE2ODcsIDB4NzYzNCwgMHgxNjg2LCAweDc2MzUsIDB4M0EwQywgMHg3NjNCLCAweDE2ODgsDQotICAgIDB4NzY0MiwgMHgwRjhELCAweDc2NDMsIDB4M0EwRCwgMHg3NjQ2LCAweDE2OEIsIDB4NzY0NywgMHgxNjg5LA0KLSAgICAweDc2NDgsIDB4MTY4QSwgMHg3NjRCLCAweDNBMEUsIDB4NzY0QywgMHgwNjFFLCAweDc2NEUsIDB4Mzc1MywNCi0gICAgMHg3NjUyLCAweDBGMEEsIDB4NzY1NiwgMHgwRTFBLCAweDc2NTgsIDB4MTY4RCwgMHg3NjVDLCAweDE2OEMsDQotICAgIDB4NzY2MSwgMHgxNjhFLCAweDc2NjIsIDB4MTY4RiwgMHg3NjY1LCAweDNBMEYsIDB4NzY2NywgMHgxNjkzLA0KLSAgICAweDc2NjgsIDB4MTY5MCwgMHg3NjY5LCAweDE2OTEsIDB4NzY2QSwgMHgxNjkyLCAweDc2NkMsIDB4MTY5NCwNCi0gICAgMHg3NjZELCAweDNBMTAsIDB4NzY2RiwgMHgzQTExLCAweDc2NzAsIDB4MTY5NSwgMHg3NjcxLCAweDNBMTIsDQotICAgIDB4NzY3MiwgMHgxNjk2LCAweDc2NzQsIDB4M0ExMywgMHg3Njc2LCAweDE2OTcsIDB4NzY3OCwgMHgxNjk4LA0KLSAgICAweDc2N0EsIDB4MEQ0MywgMHg3NjdCLCAweDBDNEEsIDB4NzY3QywgMHgxNjk5LCAweDc2N0QsIDB4MEQyOCwNCi0gICAgMHg3NjdFLCAweDBEQTYsIDB4NzY4MCwgMHgxNjlBLCAweDc2ODIsIDB4MjE3NiwgMHg3NjgzLCAweDE2OUIsDQotICAgIDB4NzY4NCwgMHgwQzI0LCAweDc2ODYsIDB4MDU4NSwgMHg3Njg3LCAweDA3RDYsIDB4NzY4OCwgMHgxNjlDLA0KLSAgICAweDc2OEIsIDB4MTY5RCwgMHg3NjhFLCAweDE2OUUsIDB4NzY5MCwgMHgwODc3LCAweDc2OTMsIDB4MTZBMCwNCi0gICAgMHg3Njk2LCAweDE2OUYsIDB4NzY5OSwgMHgxNkExLCAweDc2OUEsIDB4MTZBMiwgMHg3NjlCLCAweDIxNzksDQotICAgIDB4NzY5QywgMHgyMTc3LCAweDc2OUUsIDB4MjE3OCwgMHg3NkE0LCAweDNBMTQsIDB4NzZBNSwgMHgzQTE1LA0KLSAgICAweDc2QTYsIDB4MjE3QSwgMHg3NkFFLCAweDBEN0QsIDB4NzZCMCwgMHgxNkEzLCAweDc2QjQsIDB4MTZBNCwNCi0gICAgMHg3NkI3LCAweDFEMUMsIDB4NzZCOCwgMHgxNkE1LCAweDc2QjksIDB4MTZBNiwgMHg3NkJBLCAweDE2QTcsDQotICAgIDB4NzZCRiwgMHgwODdDLCAweDc2QzIsIDB4MTZBOCwgMHg3NkMzLCAweDBEMEMsIDB4NzZDNSwgMHgzQTE2LA0KLSAgICAweDc2QzYsIDB4MEU4RCwgMHg3NkM4LCAweDA0RjAsIDB4NzZDQSwgMHgwNEY5LCAweDc2Q0MsIDB4M0ExNywNCi0gICAgMHg3NkNELCAweDE2QTksIDB4NzZEMiwgMHgxNkFCLCAweDc2RDYsIDB4MTZBQSwgMHg3NkQ3LCAweDBDNkEsDQotICAgIDB4NzZEQiwgMHgwQTVELCAweDc2REMsIDB4MTREOCwgMHg3NkRFLCAweDE2QUMsIDB4NzZERiwgMHgwRUNELA0KLSAgICAweDc2RTEsIDB4MTZBRCwgMHg3NkUzLCAweDA2MDIsIDB4NzZFNCwgMHgwRDZCLCAweDc2RTUsIDB4MTZBRSwNCi0gICAgMHg3NkU3LCAweDE2QUYsIDB4NzZFQSwgMHgxNkIwLCAweDc2RUMsIDB4M0ExOCwgMHg3NkVFLCAweDBFRTgsDQotICAgIDB4NzZGMiwgMHgwRUUxLCAweDc2RjQsIDB4MEJEQSwgMHg3NkY4LCAweDBBRUMsIDB4NzZGQiwgMHgxNkIyLA0KLSAgICAweDc2RkMsIDB4M0ExOSwgMHg3NkZFLCAweDA5NkMsIDB4NzcwMSwgMHgwOUIyLCAweDc3MDQsIDB4MTZCNSwNCi0gICAgMHg3NzA3LCAweDE2QjQsIDB4NzcwOCwgMHgxNkIzLCAweDc3MDksIDB4MEQ5MSwgMHg3NzBCLCAweDA2MDMsDQotICAgIDB4NzcwQywgMHgwNzVELCAweDc3MUIsIDB4MTZCQiwgMHg3NzFFLCAweDE2QjgsIDB4NzcxRiwgMHgwQTA1LA0KLSAgICAweDc3MjAsIDB4MEVCRSwgMHg3NzI0LCAweDE2QjcsIDB4NzcyNSwgMHgxNkI5LCAweDc3MjYsIDB4MTZCQSwNCi0gICAgMHg3NzI5LCAweDE2QjYsIDB4NzczNCwgMHgzQTFBLCAweDc3MzYsIDB4M0ExQiwgMHg3NzM3LCAweDE2QkMsDQotICAgIDB4NzczOCwgMHgxNkJELCAweDc3M0EsIDB4MEJDQiwgMHg3NzNDLCAweDA2MUYsIDB4Nzc0MCwgMHgwQkEzLA0KLSAgICAweDc3NDYsIDB4MjE3QywgMHg3NzQ3LCAweDE2QkUsIDB4Nzc1QSwgMHgxNkJGLCAweDc3NUIsIDB4MTZDMiwNCi0gICAgMHg3NzVDLCAweDNBMUMsIDB4Nzc1RiwgMHgzQTFELCAweDc3NjAsIDB4M0ExRSwgMHg3NzYxLCAweDBBMkQsDQotICAgIDB4Nzc2MiwgMHgxRUM1LCAweDc3NjMsIDB4MEM5QywgMHg3NzY1LCAweDE2QzMsIDB4Nzc2NiwgMHgwRTgxLA0KLSAgICAweDc3NjgsIDB4MTZDMCwgMHg3NzZBLCAweDM3NTUsIDB4Nzc2QiwgMHgxNkMxLCAweDc3NzIsIDB4M0ExRiwNCi0gICAgMHg3Nzc5LCAweDE2QzYsIDB4Nzc3RCwgMHgzQTIwLCAweDc3N0UsIDB4MTZDNSwgMHg3NzdGLCAweDE2QzQsDQotICAgIDB4Nzc4QiwgMHgxNkM4LCAweDc3OEUsIDB4MTZDNywgMHg3NzkxLCAweDE2QzksIDB4Nzc5NSwgMHgzQTIxLA0KLSAgICAweDc3OUUsIDB4MTZDQiwgMHg3N0EwLCAweDE2Q0EsIDB4NzdBNSwgMHgwRTFELCAweDc3QTksIDB4Mzc1NiwNCi0gICAgMHg3N0FBLCAweDNBMjIsIDB4NzdBQywgMHgwOTYwLCAweDc3QUQsIDB4MEY4RSwgMHg3N0IwLCAweDE2Q0MsDQotICAgIDB4NzdCMywgMHgwQzhGLCAweDc3QjYsIDB4MTZDRCwgMHg3N0I5LCAweDE2Q0UsIDB4NzdCQiwgMHgxNkQyLA0KLSAgICAweDc3QkMsIDB4MTZEMCwgMHg3N0JELCAweDE2RDEsIDB4NzdCRiwgMHgxNkNGLCAweDc3QzcsIDB4MTZEMywNCi0gICAgMHg3N0NELCAweDE2RDQsIDB4NzdENywgMHgxNkQ1LCAweDc3REEsIDB4MTZENiwgMHg3N0RCLCAweDBFQzMsDQotICAgIDB4NzdEQywgMHgxNkQ3LCAweDc3RTIsIDB4MEVGQywgMHg3N0UzLCAweDE2RDgsIDB4NzdFNSwgMHgwQjhDLA0KLSAgICAweDc3RTYsIDB4M0EyMywgMHg3N0U3LCAweDBEMjAsIDB4NzdFOSwgMHgwNkUzLCAweDc3RUQsIDB4MEI3OSwNCi0gICAgMHg3N0VFLCAweDE2RDksIDB4NzdFRiwgMHgwNkIyLCAweDc3RjAsIDB4M0EyNCwgMHg3N0YzLCAweDBBNzQsDQotICAgIDB4NzdGNCwgMHgzQTI1LCAweDc3RkMsIDB4MTZEQSwgMHg3ODAyLCAweDA4MkQsIDB4NzgwNiwgMHgzQTI2LA0KLSAgICAweDc4MEMsIDB4MTZEQiwgMHg3ODEyLCAweDE2REMsIDB4NzgxNCwgMHgwNzVBLCAweDc4MTUsIDB4MDg0NSwNCi0gICAgMHg3ODIwLCAweDE2REUsIDB4NzgyMSwgMHgyMTdFLCAweDc4MjIsIDB4M0EyNywgMHg3ODI1LCAweDBDNTAsDQotICAgIDB4NzgyNiwgMHgwODQ2LCAweDc4MjcsIDB4MDY2OCwgMHg3ODJELCAweDNBMjgsIDB4NzgyRSwgMHgzQTI5LA0KLSAgICAweDc4MzAsIDB4M0EyQSwgMHg3ODMyLCAweDBFNTIsIDB4NzgzNCwgMHgwRDAxLCAweDc4MzUsIDB4M0EyQiwNCi0gICAgMHg3ODNBLCAweDBDNTEsIDB4NzgzRiwgMHgwN0VFLCAweDc4NDUsIDB4MTZFMCwgMHg3ODRFLCAweDIxN0YsDQotICAgIDB4Nzg0RiwgMHgzNDFFLCAweDc4NTEsIDB4M0MzQywgMHg3ODVELCAweDA5QjMsIDB4Nzg2NCwgMHgyMTgwLA0KLSAgICAweDc4NjgsIDB4M0EyQywgMHg3ODZCLCAweDBGN0EsIDB4Nzg2QywgMHgwN0Q3LCAweDc4NkYsIDB4MDc1QiwNCi0gICAgMHg3ODcyLCAweDBEMzcsIDB4Nzg3NCwgMHgxNkUyLCAweDc4N0EsIDB4MjE4MSwgMHg3ODdDLCAweDE2RTQsDQotICAgIDB4Nzg4MSwgMHgwNzlGLCAweDc4ODYsIDB4MTZFMywgMHg3ODg3LCAweDBDMTIsIDB4Nzg4QywgMHgxNkU2LA0KLSAgICAweDc4OEQsIDB4MDU5NSwgMHg3ODhFLCAweDE2RTEsIDB4Nzg5MSwgMHgwRDdFLCAweDc4OTMsIDB4MDREMiwNCi0gICAgMHg3ODk1LCAweDA4NUMsIDB4Nzg5NywgMHgwRkY4LCAweDc4OUEsIDB4MTZFNSwgMHg3ODlFLCAweDNBMkQsDQotICAgIDB4NzhBMywgMHgxNkU3LCAweDc4QTcsIDB4MEUxQiwgMHg3OEE5LCAweDBBN0QsIDB4NzhBQSwgMHgxNkU5LA0KLSAgICAweDc4QUYsIDB4MTZFQSwgMHg3OEI1LCAweDE2RTgsIDB4NzhCQSwgMHgwNUFDLCAweDc4QkMsIDB4MTZGMCwNCi0gICAgMHg3OEJFLCAweDE2RUYsIDB4NzhDMSwgMHgwOEQzLCAweDc4QzUsIDB4MTZGMSwgMHg3OEM2LCAweDE2RUMsDQotICAgIDB4NzhDOCwgMHgzQTJFLCAweDc4Q0EsIDB4MTZGMiwgMHg3OENCLCAweDE2RUQsIDB4NzhDQywgMHgzQTJGLA0KLSAgICAweDc4Q0UsIDB4M0EzMCwgMHg3OEQwLCAweDBENkMsIDB4NzhEMSwgMHgxNkVCLCAweDc4RDQsIDB4MTZFRSwNCi0gICAgMHg3OERBLCAweDE2RjUsIDB4NzhFMCwgMHgzQTMyLCAweDc4RTEsIDB4M0EzMywgMHg3OEU0LCAweDNBMzEsDQotICAgIDB4NzhFNywgMHgxNkY0LCAweDc4RTgsIDB4MEU4RiwgMHg3OEVDLCAweDE2RjMsIDB4NzhFRiwgMHgwNEFGLA0KLSAgICAweDc4RjIsIDB4M0EzNCwgMHg3OEY0LCAweDE2RjcsIDB4NzhGNywgMHgzQTM1LCAweDc4RkIsIDB4M0EzNiwNCi0gICAgMHg3OEZELCAweDE2RjYsIDB4NzkwMSwgMHgwOUI0LCAweDc5MDcsIDB4MTZGOCwgMHg3OTBFLCAweDBBQzUsDQotICAgIDB4NzkxMSwgMHgxNkZBLCAweDc5MTIsIDB4MTZGOSwgMHg3OTE5LCAweDE2RkIsIDB4NzkyNiwgMHgxNkRELA0KLSAgICAweDc5MkEsIDB4MTZERiwgMHg3OTJCLCAweDE2RkQsIDB4NzkyQywgMHgxNkZDLCAweDc5MzAsIDB4MjE4MiwNCi0gICAgMHg3OTMxLCAweDNBMzcsIDB4NzkzNCwgMHgzQTM4LCAweDc5M0EsIDB4MDhENCwgMHg3OTNCLCAweDNBMzksDQotICAgIDB4NzkzQywgMHgwRkIxLCAweDc5M0QsIDB4M0EzQSwgMHg3OTNFLCAweDA4RkUsIDB4Nzk0MCwgMHgxNkZFLA0KLSAgICAweDc5NDEsIDB4MDcwRCwgMHg3OTQ1LCAweDNBM0IsIDB4Nzk0NywgMHgwNjVBLCAweDc5NDgsIDB4MDY0MSwNCi0gICAgMHg3OTQ5LCAweDA4QjEsIDB4Nzk1MCwgMHgwRjFFLCAweDc5NTMsIDB4MTcwNCwgMHg3OTU1LCAweDE3MDMsDQotICAgIDB4Nzk1NiwgMHgwQUM2LCAweDc5NTcsIDB4MTcwMCwgMHg3OTVBLCAweDE3MDIsIDB4Nzk1QiwgMHgzQTNDLA0KLSAgICAweDc5NUMsIDB4M0EzRCwgMHg3OTVELCAweDA5NTUsIDB4Nzk1RSwgMHgwQTA2LCAweDc5NUYsIDB4MTcwMSwNCi0gICAgMHg3OTYwLCAweDE2RkYsIDB4Nzk2MiwgMHgwQ0UwLCAweDc5NjUsIDB4MDlCNSwgMHg3OTY4LCAweDBEQUUsDQotICAgIDB4Nzk2RCwgMHgwODQ3LCAweDc5NzcsIDB4MEM3MiwgMHg3OTdBLCAweDE3MDUsIDB4Nzk3RiwgMHgxNzA2LA0KLSAgICAweDc5ODAsIDB4MTcxQywgMHg3OTgxLCAweDA2RDAsIDB4Nzk4NCwgMHgwRkUzLCAweDc5ODUsIDB4MEFCNywNCi0gICAgMHg3OThBLCAweDE3MDcsIDB4Nzk4QiwgMHgzQTNFLCAweDc5OEQsIDB4MDU1MiwgMHg3OThFLCAweDBDMTMsDQotICAgIDB4Nzk4RiwgMHgwREYxLCAweDc5OTQsIDB4MjE4NiwgMHg3OTk2LCAweDNBM0YsIDB4Nzk5OCwgMHgzQTQwLA0KLSAgICAweDc5OUIsIDB4MjE4OCwgMHg3OTlELCAweDE3MDgsIDB4NzlBNiwgMHgwNjk0LCAweDc5QTcsIDB4MTcwOSwNCi0gICAgMHg3OUFBLCAweDE3MEIsIDB4NzlBRSwgMHgxNzBDLCAweDc5QjAsIDB4MENERiwgMHg3OUIxLCAweDFFNEUsDQotICAgIDB4NzlCMywgMHgxNzBELCAweDc5QjgsIDB4M0E0MSwgMHg3OUI5LCAweDE3MEUsIDB4NzlCQSwgMHgxNzBGLA0KLSAgICAweDc5QkIsIDB4M0E0MiwgMHg3OUJELCAweDA2RDEsIDB4NzlCRSwgMHgwNTUzLCAweDc5QkYsIDB4MEM5RCwNCi0gICAgMHg3OUMwLCAweDA5MzIsIDB4NzlDMSwgMHgwOEIyLCAweDc5QzksIDB4MTcxMCwgMHg3OUNBLCAweDNBNDMsDQotICAgIDB4NzlDQiwgMHgwOTMzLCAweDc5RDEsIDB4MDU0QSwgMHg3OUQyLCAweDBEQjUsIDB4NzlENSwgMHgxNzExLA0KLSAgICAweDc5RDgsIDB4MEQ3RiwgMHg3OURBLCAweDNBNDQsIDB4NzlERiwgMHgwQUM3LCAweDc5RTEsIDB4MTcxNCwNCi0gICAgMHg3OUUzLCAweDE3MTUsIDB4NzlFNCwgMHgwRDFGLCAweDc5RTYsIDB4MEEwNywgMHg3OUU3LCAweDE3MTIsDQotICAgIDB4NzlFOSwgMHgwQjlGLCAweDc5RUMsIDB4MTcxMywgMHg3OUYwLCAweDA5QjYsIDB4NzlGQiwgMHgwNEEwLA0KLSAgICAweDdBMDAsIDB4MDY0MywgMHg3QTAzLCAweDNBNDUsIDB4N0EwNSwgMHgzNjMzLCAweDdBMDgsIDB4MTcxNiwNCi0gICAgMHg3QTA5LCAweDNBNDYsIDB4N0EwQiwgMHgwQzE0LCAweDdBMEQsIDB4MTcxNywgMHg3QTBFLCAweDBBNkIsDQotICAgIDB4N0ExMSwgMHgzQTQ3LCAweDdBMTQsIDB4MEVCOSwgMHg3QTE3LCAweDBEOTUsIDB4N0ExOCwgMHgxNzE4LA0KLSAgICAweDdBMTksIDB4MTcxOSwgMHg3QTFBLCAweDBCOTMsIDB4N0ExQywgMHgwRjhGLCAweDdBMUUsIDB4M0E0OCwNCi0gICAgMHg3QTFGLCAweDE3MUIsIDB4N0EyMCwgMHgxNzFBLCAweDdBMkQsIDB4M0E0OSwgMHg3QTJFLCAweDA5MUIsDQotICAgIDB4N0EzMSwgMHgxNzFELCAweDdBMzIsIDB4MDRCNCwgMHg3QTM3LCAweDE3MjAsIDB4N0EzOSwgMHgzQTRBLA0KLSAgICAweDdBM0IsIDB4MTcxRSwgMHg3QTNDLCAweDA1NTQsIDB4N0EzRCwgMHgwNzI0LCAweDdBM0UsIDB4MTcxRiwNCi0gICAgMHg3QTNGLCAweDA3RDgsIDB4N0E0MCwgMHgwODA0LCAweDdBNDIsIDB4MEUzNiwgMHg3QTQzLCAweDE3MjEsDQotICAgIDB4N0E0NSwgMHgzQTRCLCAweDdBNDYsIDB4MEU4MiwgMHg3QTQ5LCAweDE3MjMsIDB4N0E0QywgMHgzQTRDLA0KLSAgICAweDdBNEQsIDB4MEE3NSwgMHg3QTRFLCAweDA0RjEsIDB4N0E0RiwgMHgwNTNBLCAweDdBNTAsIDB4MDQ3MCwNCi0gICAgMHg3QTU3LCAweDE3MjIsIDB4N0E1RCwgMHgzQTRELCAweDdBNjAsIDB4M0E0RSwgMHg3QTYxLCAweDE3MjQsDQotICAgIDB4N0E2MiwgMHgxNzI1LCAweDdBNjMsIDB4MDlERiwgMHg3QTY5LCAweDE3MjYsIDB4N0E2QiwgMHgwNUFELA0KLSAgICAweDdBNkQsIDB4M0E0RiwgMHg3QTcwLCAweDE3MjgsIDB4N0E3NCwgMHgwNzQwLCAweDdBNzYsIDB4MDY4MCwNCi0gICAgMHg3QTc4LCAweDNBNTAsIDB4N0E3OSwgMHgxNzI5LCAweDdBN0EsIDB4MDZFRCwgMHg3QTdELCAweDE3MkEsDQotICAgIDB4N0E3RiwgMHgwQUEwLCAweDdBODEsIDB4MENBNSwgMHg3QTgzLCAweDBBODQsIDB4N0E4NCwgMHgwODY1LA0KLSAgICAweDdBODgsIDB4MTcyQiwgMHg3QTkyLCAweDBCQTAsIDB4N0E5MywgMHgwQUVELCAweDdBOTUsIDB4MTcyRCwNCi0gICAgMHg3QTk2LCAweDE3MkYsIDB4N0E5NywgMHgxNzJDLCAweDdBOTgsIDB4MTcyRSwgMHg3QTlGLCAweDA2RjgsDQotICAgIDB4N0FBMCwgMHgzQTUxLCAweDdBQTMsIDB4M0E1MiwgMHg3QUE5LCAweDE3MzAsIDB4N0FBQSwgMHgwNkZDLA0KLSAgICAweDdBQUUsIDB4MDY4MSwgMHg3QUFGLCAweDBGM0MsIDB4N0FCMCwgMHgxNzMyLCAweDdBQjMsIDB4M0E1MywNCi0gICAgMHg3QUI2LCAweDE3MzMsIDB4N0FCQSwgMHgwNEQwLCAweDdBQkIsIDB4M0E1NCwgMHg3QUJDLCAweDNBNTUsDQotICAgIDB4N0FCRiwgMHgxNzM2LCAweDdBQzMsIDB4MDVENCwgMHg3QUM0LCAweDE3MzUsIDB4N0FDNSwgMHgxNzM0LA0KLSAgICAweDdBQzYsIDB4M0E1NiwgMHg3QUM3LCAweDE3MzgsIDB4N0FDOCwgMHgxNzMxLCAweDdBQ0EsIDB4MTczOSwNCi0gICAgMHg3QUNCLCAweDBGNzEsIDB4N0FDRCwgMHgxNzNBLCAweDdBQ0YsIDB4MTczQiwgMHg3QUQxLCAweDIxODksDQotICAgIDB4N0FEMiwgMHgxMUM1LCAweDdBRDMsIDB4MTczRCwgMHg3QUQ1LCAweDE3M0MsIDB4N0FEOSwgMHgxNzNFLA0KLSAgICAweDdBREEsIDB4MTczRiwgMHg3QURDLCAweDBGN0QsIDB4N0FERCwgMHgxNzQwLCAweDdBREYsIDB4MUMwOCwNCi0gICAgMHg3QUUwLCAweDA5QjcsIDB4N0FFMSwgMHgxNzQxLCAweDdBRTIsIDB4MTc0MiwgMHg3QUUzLCAweDA5NjEsDQotICAgIDB4N0FFNSwgMHgwQzkwLCAweDdBRTYsIDB4MTc0MywgMHg3QUU3LCAweDIxOEEsIDB4N0FFQSwgMHgwQjY2LA0KLSAgICAweDdBRUIsIDB4MjE4QywgMHg3QUVELCAweDE3NDQsIDB4N0FFRiwgMHgwQjdBLCAweDdBRjAsIDB4MTc0NSwNCi0gICAgMHg3QUY2LCAweDA2OUQsIDB4N0FGOCwgMHgxMDc2LCAweDdBRjksIDB4MEI5QiwgMHg3QUZBLCAweDA4REYsDQotICAgIDB4N0FGRiwgMHgwNjA0LCAweDdCMDIsIDB4MTc0NiwgMHg3QjA0LCAweDE3NTMsIDB4N0IwNiwgMHgxNzQ5LA0KLSAgICAweDdCMDcsIDB4M0E1NywgMHg3QjA4LCAweDA2ODIsIDB4N0IwQSwgMHgxNzQ4LCAweDdCMEIsIDB4MTc1NSwNCi0gICAgMHg3QjBGLCAweDE3NDcsIDB4N0IxMSwgMHgwOUI4LCAweDdCMTQsIDB4M0E1OCwgMHg3QjE4LCAweDE3NEIsDQotICAgIDB4N0IxOSwgMHgxNzRDLCAweDdCMUIsIDB4MEMyNSwgMHg3QjFFLCAweDE3NEQsIDB4N0IyMCwgMHgwNUJDLA0KLSAgICAweDdCMjUsIDB4MEEyMCwgMHg3QjI2LCAweDBERDYsIDB4N0IyNywgMHgzQTU5LCAweDdCMjgsIDB4MTc0RiwNCi0gICAgMHg3QjJDLCAweDBCNDgsIDB4N0IzMSwgMHgzQTVBLCAweDdCMzMsIDB4MTc0QSwgMHg3QjM1LCAweDE3NEUsDQotICAgIDB4N0IzNiwgMHgxNzUwLCAweDdCMzksIDB4MDg2QiwgMHg3QjQ1LCAweDE3NTcsIDB4N0I0NiwgMHgwREEwLA0KLSAgICAweDdCNDcsIDB4M0E1QiwgMHg3QjQ4LCAweDBEM0EsIDB4N0I0OSwgMHgwQzczLCAweDdCNEIsIDB4MDZEMiwNCi0gICAgMHg3QjRDLCAweDE3NTYsIDB4N0I0RCwgMHgxNzU0LCAweDdCNEUsIDB4M0E1QywgMHg3QjRGLCAweDBENDksDQotICAgIDB4N0I1MCwgMHgxNzUxLCAweDdCNTEsIDB4MEI5QywgMHg3QjUyLCAweDBDNzUsIDB4N0I1MywgMHgzNzVELA0KLSAgICAweDdCNTQsIDB4MEM3NCwgMHg3QjU2LCAweDA4NjYsIDB4N0I1RCwgMHgxNzY5LCAweDdCNjAsIDB4M0E1RCwNCi0gICAgMHg3QjY1LCAweDE3NTksIDB4N0I2NywgMHgxNzVCLCAweDdCNjksIDB4M0E1RSwgMHg3QjZDLCAweDE3NUUsDQotICAgIDB4N0I2RCwgMHgzQTVGLCAweDdCNkUsIDB4MTc1RiwgMHg3QjcwLCAweDE3NUMsIDB4N0I3MSwgMHgxNzVELA0KLSAgICAweDdCNzIsIDB4M0E2MCwgMHg3Qjc0LCAweDE3NUEsIDB4N0I3NSwgMHgxNzU4LCAweDdCN0EsIDB4MTc1MiwNCi0gICAgMHg3Qjg2LCAweDBFMUYsIDB4N0I4NywgMHgwNTU1LCAweDdCOEIsIDB4MTc2NiwgMHg3QjhELCAweDE3NjMsDQotICAgIDB4N0I4RiwgMHgxNzY4LCAweDdCOTEsIDB4M0E2MSwgMHg3QjkyLCAweDE3NjcsIDB4N0I5NCwgMHgwRDI5LA0KLSAgICAweDdCOTUsIDB4MEVCMywgMHg3Qjk3LCAweDA4ODksIDB4N0I5OCwgMHgxNzYxLCAweDdCOTksIDB4MTc2QSwNCi0gICAgMHg3QjlBLCAweDE3NjUsIDB4N0I5QywgMHgxNzY0LCAweDdCOUQsIDB4MTc2MCwgMHg3QjlFLCAweDIxOEQsDQotICAgIDB4N0I5RiwgMHgxNzYyLCAweDdCQTEsIDB4MDYwNSwgMHg3QkFBLCAweDBCN0IsIDB4N0JBRCwgMHgwQUExLA0KLSAgICAweDdCQUYsIDB4M0E2MiwgMHg3QkIxLCAweDBEMzYsIDB4N0JCNCwgMHgxNzZGLCAweDdCQjgsIDB4MEQzOCwNCi0gICAgMHg3QkMwLCAweDBBODUsIDB4N0JDMSwgMHgxNzZDLCAweDdCQzQsIDB4MEQ2MywgMHg3QkM2LCAweDE3NzAsDQotICAgIDB4N0JDNywgMHgwRTIzLCAweDdCQzksIDB4MEI5OSwgMHg3QkNCLCAweDE3NkIsIDB4N0JDQywgMHgxNzZELA0KLSAgICAweDdCQ0YsIDB4MTc2RSwgMHg3QkQ3LCAweDNBNjMsIDB4N0JEOSwgMHgzQTY0LCAweDdCREQsIDB4MTc3MSwNCi0gICAgMHg3QkUwLCAweDA4RjAsIDB4N0JFNCwgMHgwQzlFLCAweDdCRTUsIDB4MTc3NiwgMHg3QkU2LCAweDE3NzUsDQotICAgIDB4N0JFOSwgMHgxNzcyLCAweDdCRUQsIDB4MEZEQywgMHg3QkYzLCAweDE3N0IsIDB4N0JGNiwgMHgxNzdGLA0KLSAgICAweDdCRjcsIDB4MTc3QywgMHg3QzAwLCAweDE3NzgsIDB4N0MwNywgMHgxNzc5LCAweDdDMEIsIDB4M0E2NSwNCi0gICAgMHg3QzBELCAweDE3N0UsIDB4N0MwRiwgMHgzQTY2LCAweDdDMTEsIDB4MTc3MywgMHg3QzEyLCAweDEwRUEsDQotICAgIDB4N0MxMywgMHgxNzdBLCAweDdDMTQsIDB4MTc3NCwgMHg3QzE3LCAweDE3N0QsIDB4N0MxRSwgMHgxRTNCLA0KLSAgICAweDdDMUYsIDB4MTc4MywgMHg3QzIwLCAweDNBNjcsIDB4N0MyMSwgMHgwNjA2LCAweDdDMjMsIDB4MTc4MCwNCi0gICAgMHg3QzI2LCAweDNBNjgsIDB4N0MyNywgMHgxNzgxLCAweDdDMkEsIDB4MTc4MiwgMHg3QzJCLCAweDE3ODUsDQotICAgIDB4N0MzMSwgMHgzQTY5LCAweDdDMzYsIDB4M0E2QSwgMHg3QzM3LCAweDE3ODQsIDB4N0MzOCwgMHgwRDhBLA0KLSAgICAweDdDM0QsIDB4MTc4NiwgMHg3QzNFLCAweDBGQzQsIDB4N0MzRiwgMHgwRTNELCAweDdDNDAsIDB4MTc4QiwNCi0gICAgMHg3QzQzLCAweDE3ODgsIDB4N0M0QywgMHgxNzg3LCAweDdDNEQsIDB4MEE3NiwgMHg3QzRGLCAweDE3OEEsDQotICAgIDB4N0M1MCwgMHgxNzhDLCAweDdDNTEsIDB4M0E2QiwgMHg3QzU0LCAweDE3ODksIDB4N0M1NiwgMHgxNzkwLA0KLSAgICAweDdDNTgsIDB4MTc4RCwgMHg3QzU5LCAweDNBNkMsIDB4N0M1RiwgMHgxNzhFLCAweDdDNjAsIDB4MTc3NywNCi0gICAgMHg3QzY0LCAweDE3OEYsIDB4N0M2NSwgMHgxNzkxLCAweDdDNjcsIDB4M0E2RCwgMHg3QzZDLCAweDE3OTIsDQotICAgIDB4N0M2RSwgMHgzQTZFLCAweDdDNzAsIDB4M0E2RiwgMHg3QzczLCAweDBFMTYsIDB4N0M3NSwgMHgxNzkzLA0KLSAgICAweDdDN0IsIDB4MzcwRSwgMHg3QzdFLCAweDBFRUUsIDB4N0M4MSwgMHgwNkM2LCAweDdDODIsIDB4MDZGRiwNCi0gICAgMHg3QzgzLCAweDE3OTQsIDB4N0M4OSwgMHgwRTA0LCAweDdDOEIsIDB4MEEyRSwgMHg3QzhELCAweDBFQkMsDQotICAgIDB4N0M5MCwgMHgxNzk1LCAweDdDOTIsIDB4MEY3QiwgMHg3Qzk1LCAweDBEMkEsIDB4N0M5NywgMHgwQUM4LA0KLSAgICAweDdDOTgsIDB4MENFQSwgMHg3QzlCLCAweDA5NTcsIDB4N0M5RiwgMHgwNDg0LCAweDdDQTEsIDB4MTc5QSwNCi0gICAgMHg3Q0EyLCAweDE3OTgsIDB4N0NBNCwgMHgxNzk2LCAweDdDQTUsIDB4MDVERCwgMHg3Q0E3LCAweDA5QjksDQotICAgIDB4N0NBOCwgMHgxNzlCLCAweDdDQUIsIDB4MTc5OSwgMHg3Q0FELCAweDE3OTcsIDB4N0NBRSwgMHgxNzlGLA0KLSAgICAweDdDQjEsIDB4MTc5RSwgMHg3Q0IyLCAweDE3OUQsIDB4N0NCMywgMHgxNzlDLCAweDdDQjksIDB4MTdBMCwNCi0gICAgMHg3Q0JDLCAweDNBNzAsIDB4N0NCRCwgMHgxN0ExLCAweDdDQkUsIDB4MEE1RSwgMHg3Q0JGLCAweDNBNzEsDQotICAgIDB4N0NDMCwgMHgxN0EyLCAweDdDQzIsIDB4MTdBNCwgMHg3Q0M1LCAweDE3QTMsIDB4N0NDOCwgMHgzQTcyLA0KLSAgICAweDdDQzksIDB4M0E3MywgMHg3Q0NBLCAweDA3ODYsIDB4N0NDRSwgMHgwQUJBLCAweDdDRDIsIDB4MTdBNiwNCi0gICAgMHg3Q0Q2LCAweDBDNzYsIDB4N0NENywgMHgzQTc0LCAweDdDRDgsIDB4MTdBNSwgMHg3Q0Q5LCAweDNBNzUsDQotICAgIDB4N0NEQywgMHgxN0E3LCAweDdDREQsIDB4M0E3NiwgMHg3Q0RFLCAweDBFMDUsIDB4N0NERiwgMHgwQUVFLA0KLSAgICAweDdDRTAsIDB4MDdEOSwgMHg3Q0UyLCAweDE3QTgsIDB4N0NFNywgMHgwRjkwLCAweDdDRUIsIDB4M0E3NywNCi0gICAgMHg3Q0VGLCAweDE3QUEsIDB4N0NGMiwgMHgxN0FCLCAweDdDRjQsIDB4MTdBQywgMHg3Q0Y2LCAweDE3QUQsDQotICAgIDB4N0NGOCwgMHgwOEIzLCAweDdDRkEsIDB4MTdBRSwgMHg3Q0ZCLCAweDA3MjUsIDB4N0NGRSwgMHgwNjg0LA0KLSAgICAweDdEMDAsIDB4MDY0NCwgMHg3RDAyLCAweDE3QjAsIDB4N0QwNCwgMHgwRUZGLCAweDdEMDUsIDB4MDdEQSwNCi0gICAgMHg3RDA2LCAweDE3QUYsIDB4N0QwNywgMHgzQTc4LCAweDdEMDgsIDB4M0E3OSwgMHg3RDA5LCAweDNBN0EsDQotICAgIDB4N0QwQSwgMHgxN0IzLCAweDdEMEIsIDB4MEVGMiwgMHg3RDBELCAweDBDRjIsIDB4N0QxMCwgMHgwREE1LA0KLSAgICAweDdEMTMsIDB4M0E3QiwgMHg3RDE0LCAweDA5NkQsIDB4N0QxNSwgMHgxN0IyLCAweDdEMTcsIDB4MDhGRiwNCi0gICAgMHg3RDE4LCAweDA3REIsIDB4N0QxOSwgMHgwOEI0LCAweDdEMUEsIDB4MDY4MywgMHg3RDFCLCAweDBFMDYsDQotICAgIDB4N0QxQywgMHgxN0IxLCAweDdEMUQsIDB4M0E3QywgMHg3RDIwLCAweDBBQzksIDB4N0QyMSwgMHgwRTcwLA0KLSAgICAweDdEMjIsIDB4MDg2NywgMHg3RDIzLCAweDNBN0QsIDB4N0QyQiwgMHgwOEI1LCAweDdEMkMsIDB4MEJGOSwNCi0gICAgMHg3RDJFLCAweDE3QjYsIDB4N0QyRiwgMHgwRkE3LCAweDdEMzAsIDB4MDg0OSwgMHg3RDMyLCAweDE3QjcsDQotICAgIDB4N0QzMywgMHgwQTA4LCAweDdEMzUsIDB4MTdCOSwgMHg3RDM5LCAweDA5QkEsIDB4N0QzQSwgMHgwODIwLA0KLSAgICAweDdEM0YsIDB4MTdCOCwgMHg3RDQxLCAweDNBN0UsIDB4N0Q0MiwgMHgwOTM0LCAweDdENDMsIDB4MDc3MiwNCi0gICAgMHg3RDQ0LCAweDBBQ0EsIDB4N0Q0NSwgMHgxN0I0LCAweDdENDYsIDB4MTdCQSwgMHg3RDQ4LCAweDIxOEYsDQotICAgIDB4N0Q0QiwgMHgxN0I1LCAweDdENEMsIDB4MDcyNiwgMHg3RDRFLCAweDE3QkQsIDB4N0Q0RiwgMHgxN0MxLA0KLSAgICAweDdENTAsIDB4MDc0MSwgMHg3RDUzLCAweDNBN0YsIDB4N0Q1NiwgMHgxN0JDLCAweDdENTksIDB4M0E4MCwNCi0gICAgMHg3RDVCLCAweDE3QzUsIDB4N0Q1QywgMHgyMTkwLCAweDdENUQsIDB4M0E4MSwgMHg3RDVFLCAweDA3REMsDQotICAgIDB4N0Q2MSwgMHgwRjU3LCAweDdENjIsIDB4MDQ4MCwgMHg3RDYzLCAweDE3QzIsIDB4N0Q2NiwgMHgwNjg1LA0KLSAgICAweDdENjgsIDB4MTdCRiwgMHg3RDZFLCAweDE3QzAsIDB4N0Q3MSwgMHgwQzc3LCAweDdENzIsIDB4MTdCRSwNCi0gICAgMHg3RDczLCAweDE3QkIsIDB4N0Q3NSwgMHgwNTg2LCAweDdENzYsIDB4MEE4OCwgMHg3RDc5LCAweDA3NUMsDQotICAgIDB4N0Q3QSwgMHgzQTgyLCAweDdEN0QsIDB4MTdDNywgMHg3RDg2LCAweDNBODMsIDB4N0Q4OSwgMHgxN0M0LA0KLSAgICAweDdEOEIsIDB4M0E4NCwgMHg3RDhDLCAweDNBODUsIDB4N0Q4RiwgMHgxN0M2LCAweDdEOTMsIDB4MTdDMywNCi0gICAgMHg3RDk5LCAweDA3MjcsIDB4N0Q5QSwgMHgwQjEzLCAweDdEOUIsIDB4MTdDOCwgMHg3RDlDLCAweDBBRjAsDQotICAgIDB4N0Q5RiwgMHgxN0Q1LCAweDdEQTAsIDB4MjE5MiwgMHg3REEyLCAweDE3RDEsIDB4N0RBMywgMHgxN0NCLA0KLSAgICAweDdEQUIsIDB4MTdDRiwgMHg3REFDLCAweDA5MjYsIDB4N0RBRCwgMHgwNEExLCAweDdEQUUsIDB4MTdDQSwNCi0gICAgMHg3REFGLCAweDE3RDIsIDB4N0RCMCwgMHgxN0Q2LCAweDdEQjEsIDB4MDdERCwgMHg3REIyLCAweDBFRTIsDQotICAgIDB4N0RCNCwgMHgwQkYyLCAweDdEQjUsIDB4MTdDQywgMHg3REI3LCAweDIxOTEsIDB4N0RCOCwgMHgxN0Q0LA0KLSAgICAweDdEQkEsIDB4MTdDOSwgMHg3REJCLCAweDBCN0MsIDB4N0RCRCwgMHgxN0NFLCAweDdEQkUsIDB4MDQ4MSwNCi0gICAgMHg3REJGLCAweDBFRDYsIDB4N0RDNywgMHgxN0NELCAweDdEQ0EsIDB4MDZEMywgMHg3RENCLCAweDBEODAsDQotICAgIDB4N0RDQywgMHgzQTg2LCAweDdEQ0YsIDB4MEFFRiwgMHg3REQxLCAweDBGOTgsIDB4N0REMiwgMHgwOTc5LA0KLSAgICAweDdERDUsIDB4MTdGRCwgMHg3REQ2LCAweDIxOTMsIDB4N0REOCwgMHgxN0Q3LCAweDdEREEsIDB4MEFBMiwNCi0gICAgMHg3RERDLCAweDE3RDMsIDB4N0RERCwgMHgxN0Q4LCAweDdEREUsIDB4MTdEQSwgMHg3REUwLCAweDBDMTUsDQotICAgIDB4N0RFMSwgMHgxN0RELCAweDdERTMsIDB4MzQwQSwgMHg3REU0LCAweDE3RDksIDB4N0RFOCwgMHgwRTI0LA0KLSAgICAweDdERTksIDB4MDYwNywgMHg3REVCLCAweDNBODcsIDB4N0RFQywgMHgwRUQ3LCAweDdERUYsIDB4MDRBMiwNCi0gICAgMHg3REYxLCAweDNBODgsIDB4N0RGMiwgMHgxN0RDLCAweDdERjQsIDB4MEZDNSwgMHg3REY5LCAweDNBODksDQotICAgIDB4N0RGQiwgMHgxN0RCLCAweDdFMDEsIDB4MDUxMSwgMHg3RTA0LCAweDBDQzQsIDB4N0UwNSwgMHgxN0RFLA0KLSAgICAweDdFMDgsIDB4M0E4QSwgMHg3RTA5LCAweDE3RTUsIDB4N0UwQSwgMHgxN0RGLCAweDdFMEIsIDB4MTdFNiwNCi0gICAgMHg3RTExLCAweDNBOEIsIDB4N0UxMiwgMHgxN0UyLCAweDdFMTUsIDB4M0E4QywgMHg3RTFCLCAweDBEMzEsDQotICAgIDB4N0UxRSwgMHgwOEY2LCAweDdFMUYsIDB4MTdFNCwgMHg3RTIwLCAweDNBOEQsIDB4N0UyMSwgMHgxN0UxLA0KLSAgICAweDdFMjIsIDB4MTdFNywgMHg3RTIzLCAweDE3RTAsIDB4N0UyNiwgMHgwOTRFLCAweDdFMkIsIDB4MEU1MywNCi0gICAgMHg3RTJFLCAweDA5NTYsIDB4N0UzMSwgMHgxN0UzLCAweDdFMzIsIDB4MTdFRiwgMHg3RTM1LCAweDE3RUIsDQotICAgIDB4N0UzNywgMHgxN0VFLCAweDdFMzksIDB4MTdFQywgMHg3RTNBLCAweDE3RjAsIDB4N0UzQiwgMHgxN0VBLA0KLSAgICAweDdFM0QsIDB4MTdEMCwgMHg3RTNFLCAweDBBNzcsIDB4N0U0MSwgMHgwRDVGLCAweDdFNDMsIDB4MTdFRCwNCi0gICAgMHg3RTQ2LCAweDE3RTgsIDB4N0U0NywgMHgzQThFLCAweDdFNDgsIDB4Mzc2NywgMHg3RTRBLCAweDBBQTMsDQotICAgIDB4N0U0QiwgMHgwNzI4LCAweDdFNEQsIDB4MDkzNSwgMHg3RTUyLCAweDIxOTQsIDB4N0U1NCwgMHgwOUVCLA0KLSAgICAweDdFNTUsIDB4MEFCOCwgMHg3RTU2LCAweDE3RjMsIDB4N0U1OSwgMHgxN0Y1LCAweDdFNUEsIDB4MTdGNiwNCi0gICAgMHg3RTVELCAweDE3RjIsIDB4N0U1RSwgMHgxN0Y0LCAweDdFNjEsIDB4MUUxMSwgMHg3RTYyLCAweDNBOEYsDQotICAgIDB4N0U2NiwgMHgxN0U5LCAweDdFNjcsIDB4MTdGMSwgMHg3RTY5LCAweDE3RjksIDB4N0U2QSwgMHgxN0Y4LA0KLSAgICAweDdFNkIsIDB4MURGNywgMHg3RTZELCAweDBFQTgsIDB4N0U2RSwgMHgzQTkwLCAweDdFNzAsIDB4MDcwMSwNCi0gICAgMHg3RTczLCAweDNBOTEsIDB4N0U3OSwgMHgxN0Y3LCAweDdFN0IsIDB4MTdGQiwgMHg3RTdDLCAweDE3RkEsDQotICAgIDB4N0U3RCwgMHgxN0ZFLCAweDdFN0YsIDB4MTgwMCwgMHg3RTgyLCAweDA4OEEsIDB4N0U4MywgMHgxN0ZDLA0KLSAgICAweDdFODgsIDB4MTgwMSwgMHg3RTg5LCAweDE4MDIsIDB4N0U4QSwgMHgyMEE3LCAweDdFOEMsIDB4MTgwMywNCi0gICAgMHg3RThELCAweDNBOTIsIDB4N0U4RSwgMHgxODA5LCAweDdFOEYsIDB4MEMzNSwgMHg3RTkwLCAweDE4MDUsDQotICAgIDB4N0U5MSwgMHgzQTkzLCAweDdFOTIsIDB4MTgwNCwgMHg3RTkzLCAweDE4MDYsIDB4N0U5NCwgMHgxODA3LA0KLSAgICAweDdFOTYsIDB4MTgwOCwgMHg3RTk4LCAweDNBOTQsIDB4N0U5QiwgMHgxODBBLCAweDdFOUMsIDB4MTgwQiwNCi0gICAgMHg3RjM2LCAweDA2MDgsIDB4N0YzOCwgMHgxODBDLCAweDdGM0EsIDB4MTgwRCwgMHg3RjQ0LCAweDNBOTUsDQotICAgIDB4N0Y0NSwgMHgxODBFLCAweDdGNDcsIDB4MjE5NSwgMHg3RjRDLCAweDE4MEYsIDB4N0Y0RCwgMHgxODEwLA0KLSAgICAweDdGNEUsIDB4MTgxMSwgMHg3RjRGLCAweDNBOTYsIDB4N0Y1MCwgMHgxODEyLCAweDdGNTEsIDB4MTgxMywNCi0gICAgMHg3RjUyLCAweDNBOTcsIDB4N0Y1MywgMHgzQTk4LCAweDdGNTQsIDB4MTgxNSwgMHg3RjU1LCAweDE4MTQsDQotICAgIDB4N0Y1OCwgMHgxODE2LCAweDdGNUYsIDB4MTgxNywgMHg3RjYwLCAweDE4MTgsIDB4N0Y2MSwgMHgzQTk5LA0KLSAgICAweDdGNjcsIDB4MTgxQiwgMHg3RjY4LCAweDE4MTksIDB4N0Y2OSwgMHgxODFBLCAweDdGNkEsIDB4MDg1MSwNCi0gICAgMHg3RjZCLCAweDA3MjksIDB4N0Y2RSwgMHgwQjk0LCAweDdGNzAsIDB4MEQ0NywgMHg3RjcyLCAweDA5N0EsDQotICAgIDB4N0Y3NSwgMHgwRDAzLCAweDdGNzcsIDB4MEQ4MSwgMHg3Rjc4LCAweDE4MUMsIDB4N0Y3OSwgMHgxMzM2LA0KLSAgICAweDdGODIsIDB4MTgxRCwgMHg3RjgzLCAweDE4MUYsIDB4N0Y4NSwgMHgwRjRGLCAweDdGODYsIDB4MTgxRSwNCi0gICAgMHg3Rjg3LCAweDE4MjEsIDB4N0Y4OCwgMHgxODIwLCAweDdGOEEsIDB4MEYzRCwgMHg3RjhDLCAweDE4MjIsDQotICAgIDB4N0Y4RSwgMHgwRDkyLCAweDdGOTEsIDB4M0E5QSwgMHg3Rjk0LCAweDE4MjMsIDB4N0Y5QSwgMHgxODI2LA0KLSAgICAweDdGOUQsIDB4MTgyNSwgMHg3RjlFLCAweDE4MjQsIDB4N0ZBMSwgMHgyMTk2LCAweDdGQTMsIDB4MTgyNywNCi0gICAgMHg3RkE0LCAweDA3MDgsIDB4N0ZBOCwgMHgwQUE0LCAweDdGQTksIDB4MDY1QiwgMHg3RkFFLCAweDE4MkIsDQotICAgIDB4N0ZBRiwgMHgxODI4LCAweDdGQjIsIDB4MTgyOSwgMHg3RkI2LCAweDE4MkMsIDB4N0ZCOCwgMHgxODJELA0KLSAgICAweDdGQjksIDB4MTgyQSwgMHg3RkJELCAweDA0Q0IsIDB4N0ZCRiwgMHgzQTlCLCAweDdGQzEsIDB4MDUyNywNCi0gICAgMHg3RkM1LCAweDE4MkYsIDB4N0ZDNiwgMHgxODMwLCAweDdGQ0EsIDB4MTgzMSwgMHg3RkNDLCAweDBGNEMsDQotICAgIDB4N0ZDRSwgMHgzQTlDLCAweDdGRDIsIDB4MDkzNiwgMHg3RkQ0LCAweDE4MzMsIDB4N0ZENSwgMHgxODMyLA0KLSAgICAweDdGREYsIDB4M0E5RCwgMHg3RkUwLCAweDBBMkYsIDB4N0ZFMSwgMHgxODM0LCAweDdGRTUsIDB4M0E5RSwNCi0gICAgMHg3RkU2LCAweDE4MzUsIDB4N0ZFOSwgMHgxODM2LCAweDdGRUIsIDB4MDYyMSwgMHg3RkVDLCAweDNBOUYsDQotICAgIDB4N0ZFRSwgMHgzQUEwLCAweDdGRUYsIDB4M0FBMSwgMHg3RkYwLCAweDA2MDksIDB4N0ZGMywgMHgxODM3LA0KLSAgICAweDdGRjksIDB4MTgzOCwgMHg3RkZBLCAweDNBQTIsIDB4N0ZGQiwgMHgwRThCLCAweDdGRkMsIDB4MEY0RCwNCi0gICAgMHg4MDAwLCAweDBGM0UsIDB4ODAwMSwgMHgwRkRELCAweDgwMDIsIDB4MzcxMywgMHg4MDAzLCAweDA3REYsDQotICAgIDB4ODAwNCwgMHgxODNCLCAweDgwMDUsIDB4MDkwMCwgMHg4MDA2LCAweDE4M0EsIDB4ODAwQiwgMHgxODNDLA0KLSAgICAweDgwMEMsIDB4MDhENSwgMHg4MDBFLCAweDNBQTMsIDB4ODAxMCwgMHgwQjMxLCAweDgwMTEsIDB4M0FBNCwNCi0gICAgMHg4MDEyLCAweDE4M0QsIDB4ODAxNCwgMHgzQUE1LCAweDgwMTUsIDB4MDdERSwgMHg4MDE3LCAweDBFRTMsDQotICAgIDB4ODAxOCwgMHgxODNFLCAweDgwMTksIDB4MTgzRiwgMHg4MDFDLCAweDE4NDAsIDB4ODAyMSwgMHgxODQxLA0KLSAgICAweDgwMjQsIDB4M0FBNiwgMHg4MDI2LCAweDNBQTcsIDB4ODAyOCwgMHgxODQyLCAweDgwMzMsIDB4MDhENiwNCi0gICAgMHg4MDM2LCAweDBFRjksIDB4ODAzQSwgMHgzQUE4LCAweDgwM0IsIDB4MTg0NCwgMHg4MDNDLCAweDNBQTksDQotICAgIDB4ODAzRCwgMHgwQjdELCAweDgwM0YsIDB4MTg0MywgMHg4MDQ2LCAweDE4NDYsIDB4ODA0QSwgMHgxODQ1LA0KLSAgICAweDgwNTIsIDB4MTg0NywgMHg4MDU2LCAweDBBNUYsIDB4ODA1OCwgMHgxODQ4LCAweDgwNUEsIDB4MTg0OSwNCi0gICAgMHg4MDVFLCAweDBFMDksIDB4ODA1RiwgMHgxODRBLCAweDgwNjAsIDB4M0FBQSwgMHg4MDYxLCAweDBBRjEsDQotICAgIDB4ODA2MiwgMHgxODRCLCAweDgwNjgsIDB4MTg0QywgMHg4MDZGLCAweDBGQzYsIDB4ODA3MCwgMHgxODRGLA0KLSAgICAweDgwNzEsIDB4M0FBQiwgMHg4MDcyLCAweDE4NEUsIDB4ODA3MywgMHgxODRELCAweDgwNzQsIDB4MEJDQywNCi0gICAgMHg4MDc1LCAweDNBQUMsIDB4ODA3NiwgMHgxODUwLCAweDgwNzcsIDB4MDlFQywgMHg4MDc5LCAweDE4NTEsDQotICAgIDB4ODA3RCwgMHgxODUyLCAweDgwN0UsIDB4MEZERSwgMHg4MDdGLCAweDE4NTMsIDB4ODA4NCwgMHgxODU0LA0KLSAgICAweDgwODUsIDB4MTg1NiwgMHg4MDg2LCAweDE4NTUsIDB4ODA4NywgMHgwRDM5LCAweDgwODksIDB4MENEMSwNCi0gICAgMHg4MDhCLCAweDBGRTQsIDB4ODA4QywgMHgwRDNELCAweDgwOTMsIDB4MTg1OCwgMHg4MDk2LCAweDA5QkIsDQotICAgIDB4ODA5OCwgMHgwRDlDLCAweDgwOUEsIDB4MTg1OSwgMHg4MDlCLCAweDE4NTcsIDB4ODA5RCwgMHgwNjBBLA0KLSAgICAweDgwOUUsIDB4M0FBRCwgMHg4MEExLCAweDA3ODgsIDB4ODBBMiwgMHgwOEI2LCAweDgwQTUsIDB4MEQ4MiwNCi0gICAgMHg4MEE2LCAweDNBQUUsIDB4ODBBOSwgMHgwNzVFLCAweDgwQUEsIDB4MEU3MSwgMHg4MEFCLCAweDNBQUYsDQotICAgIDB4ODBBQywgMHgxODVDLCAweDgwQUQsIDB4MTg1QSwgMHg4MEFGLCAweDA3RTAsIDB4ODBCMSwgMHgwN0UxLA0KLSAgICAweDgwQjIsIDB4MDRBRCwgMHg4MEI0LCAweDA4NTgsIDB4ODBCQSwgMHgwRDBGLCAweDgwQzMsIDB4MDRBMywNCi0gICAgMHg4MEM0LCAweDE4NjEsIDB4ODBDNiwgMHgwQjdFLCAweDgwQ0MsIDB4MEQwRSwgMHg4MENFLCAweDBCM0IsDQotICAgIDB4ODBENiwgMHgxODYzLCAweDgwRDcsIDB4M0FCMCwgMHg4MEQ4LCAweDNBQjEsIDB4ODBEOSwgMHgxODVGLA0KLSAgICAweDgwREEsIDB4MTg2MiwgMHg4MERCLCAweDE4NUQsIDB4ODBERCwgMHgxODYwLCAweDgwREUsIDB4MEU1NCwNCi0gICAgMHg4MEUxLCAweDA3ODksIDB4ODBFNCwgMHgwNEMxLCAweDgwRTUsIDB4MTg1RSwgMHg4MEVGLCAweDE4NjUsDQotICAgIDB4ODBGMSwgMHgxODY2LCAweDgwRjQsIDB4MEM5MSwgMHg4MEY4LCAweDA2QjMsIDB4ODBGQywgMHgxODcxLA0KLSAgICAweDgwRkQsIDB4MENGMywgMHg4MTAyLCAweDA4QjcsIDB4ODEwNSwgMHgwNkI0LCAweDgxMDYsIDB4MEE2QywNCi0gICAgMHg4MTA3LCAweDBGRUMsIDB4ODEwOCwgMHgwRUJBLCAweDgxMDksIDB4MTg2NCwgMHg4MTBBLCAweDBBNzgsDQotICAgIDB4ODExNiwgMHgzQUIyLCAweDgxMTgsIDB4M0FCMywgMHg4MTFBLCAweDA2NkQsIDB4ODExQiwgMHgxODY3LA0KLSAgICAweDgxMjMsIDB4MTg2OSwgMHg4MTI5LCAweDE4NjgsIDB4ODEyQiwgMHgzNjU5LCAweDgxMkYsIDB4MTg2QSwNCi0gICAgMHg4MTMxLCAweDBCNjQsIDB4ODEzMywgMHgwQ0Y0LCAweDgxMzksIDB4MEJDRCwgMHg4MTNBLCAweDNBQjQsDQotICAgIDB4ODEzRSwgMHgxODZFLCAweDgxNDEsIDB4Mzc3MiwgMHg4MTQ2LCAweDE4NkQsIDB4ODE0QSwgMHgzQUI1LA0KLSAgICAweDgxNEIsIDB4MTg2QiwgMHg4MTRDLCAweDNBQjYsIDB4ODE0RSwgMHgwQTFCLCAweDgxNTAsIDB4MERENywNCi0gICAgMHg4MTUxLCAweDE4NzAsIDB4ODE1MywgMHgxODZGLCAweDgxNTQsIDB4MDdFMiwgMHg4MTU1LCAweDBGRjksDQotICAgIDB4ODE1RiwgMHgxODgwLCAweDgxNjUsIDB4MTg3NCwgMHg4MTY2LCAweDE4NzUsIDB4ODE2QiwgMHgwOTFDLA0KLSAgICAweDgxNkUsIDB4MTg3MywgMHg4MTcwLCAweDA4MEEsIDB4ODE3MSwgMHgxODcyLCAweDgxNzQsIDB4MTg3NiwNCi0gICAgMHg4MTc4LCAweDBCQ0UsIDB4ODE3OSwgMHgwREYyLCAweDgxN0EsIDB4MEFBNSwgMHg4MTdGLCAweDBCM0MsDQotICAgIDB4ODE4MCwgMHgxODdBLCAweDgxODEsIDB4M0FCNywgMHg4MTgyLCAweDE4N0IsIDB4ODE4MywgMHgxODc3LA0KLSAgICAweDgxODQsIDB4M0FCOCwgMHg4MTg4LCAweDE4NzgsIDB4ODE4QSwgMHgxODc5LCAweDgxOEYsIDB4MDdFMywNCi0gICAgMHg4MTkzLCAweDE4ODEsIDB4ODE5NSwgMHgxODdELCAweDgxOUEsIDB4MEREOCwgMHg4MTlDLCAweDBFOUEsDQotICAgIDB4ODE5RCwgMHgwRDlBLCAweDgxQTAsIDB4MTg3QywgMHg4MUEzLCAweDE4N0YsIDB4ODFBNCwgMHgxODdFLA0KLSAgICAweDgxQTgsIDB4MEU3MiwgMHg4MUE5LCAweDE4ODIsIDB4ODFCMCwgMHgxODgzLCAweDgxQjMsIDB4MEFCOSwNCi0gICAgMHg4MUI0LCAweDNBQjksIDB4ODFCNSwgMHgxODg0LCAweDgxQjgsIDB4MTg4NiwgMHg4MUJBLCAweDE4OEEsDQotICAgIDB4ODFCRCwgMHgxODg3LCAweDgxQkUsIDB4MTg4NSwgMHg4MUJGLCAweDBDRjUsIDB4ODFDMCwgMHgxODg4LA0KLSAgICAweDgxQzIsIDB4MTg4OSwgMHg4MUM2LCAweDA1MzIsIDB4ODFDOCwgMHgxODkwLCAweDgxQzksIDB4MTg4QiwNCi0gICAgMHg4MUNELCAweDE4OEMsIDB4ODFDRiwgMHgzQUJBLCAweDgxRDEsIDB4MTg4RCwgMHg4MUQzLCAweDBCMDEsDQotICAgIDB4ODFEOCwgMHgxODhGLCAweDgxRDksIDB4MTg4RSwgMHg4MURBLCAweDE4OTEsIDB4ODFERiwgMHgxODkyLA0KLSAgICAweDgxRTAsIDB4MTg5MywgMHg4MUUzLCAweDBBMDksIDB4ODFFNSwgMHgwNTY5LCAweDgxRTcsIDB4MTg5NCwNCi0gICAgMHg4MUU4LCAweDBGOUYsIDB4ODFFQSwgMHgwOEQ3LCAweDgxRUQsIDB4MDkzNywgMHg4MUYzLCAweDA4QjgsDQotICAgIDB4ODFGNCwgMHgwQjk1LCAweDgxRjksIDB4M0FCQiwgMHg4MUZBLCAweDE4OTUsIDB4ODFGQiwgMHgxODk2LA0KLSAgICAweDgxRkMsIDB4MDREMywgMHg4MUZFLCAweDE4OTcsIDB4ODIwMSwgMHgxODk4LCAweDgyMDIsIDB4MTg5OSwNCi0gICAgMHg4MjAzLCAweDNBQkMsIDB4ODIwNSwgMHgxODlBLCAweDgyMDcsIDB4MTg5QiwgMHg4MjA4LCAweDA2QjUsDQotICAgIDB4ODIwOSwgMHgxM0FGLCAweDgyMEEsIDB4MTg5QywgMHg4MjBDLCAweDBBODksIDB4ODIwRCwgMHgxODlELA0KLSAgICAweDgyMEUsIDB4MDhGNywgMHg4MjEwLCAweDE4OUUsIDB4ODIxMiwgMHgxMDA5LCAweDgyMTYsIDB4MTg5RiwNCi0gICAgMHg4MjE3LCAweDBFMkUsIDB4ODIxOCwgMHgwNjE4LCAweDgyMUIsIDB4MEFBNiwgMHg4MjFDLCAweDA5NjIsDQotICAgIDB4ODIxRSwgMHgwREUzLCAweDgyMUYsIDB4MDkzOCwgMHg4MjIxLCAweDNBQkQsIDB4ODIyOSwgMHgxOEEwLA0KLSAgICAweDgyMkEsIDB4MDdFNCwgMHg4MjJCLCAweDE4QTEsIDB4ODIyQywgMHgwRDYwLCAweDgyMkUsIDB4MThBRiwNCi0gICAgMHg4MjMyLCAweDNBQkUsIDB4ODIzMywgMHgxOEEzLCAweDgyMzQsIDB4M0FCRiwgMHg4MjM1LCAweDBCMjksDQotICAgIDB4ODIzNiwgMHgwRDJCLCAweDgyMzcsIDB4MDc3MywgMHg4MjM4LCAweDE4QTIsIDB4ODIzOSwgMHgwQUE3LA0KLSAgICAweDgyNDAsIDB4MThBNCwgMHg4MjQ2LCAweDNBQzAsIDB4ODI0NywgMHgwQzE2LCAweDgyNEIsIDB4M0FDMSwNCi0gICAgMHg4MjRGLCAweDNBQzIsIDB4ODI1OCwgMHgxOEE2LCAweDgyNTksIDB4MThBNSwgMHg4MjVBLCAweDE4QTgsDQotICAgIDB4ODI1RCwgMHgxOEE3LCAweDgyNUYsIDB4MThBOSwgMHg4MjYyLCAweDE4QUIsIDB4ODI2NCwgMHgxOEFBLA0KLSAgICAweDgyNjYsIDB4MDYwQiwgMHg4MjY4LCAweDE4QUMsIDB4ODI2QSwgMHgxOEFELCAweDgyNkIsIDB4MThBRSwNCi0gICAgMHg4MjZFLCAweDA4MjEsIDB4ODI2RiwgMHgwRjkxLCAweDgyNzEsIDB4MThCMCwgMHg4MjcyLCAweDA5RUQsDQotICAgIDB4ODI3NiwgMHgwNTEyLCAweDgyNzcsIDB4MThCMSwgMHg4Mjc4LCAweDE4QjIsIDB4ODI3OSwgMHgzNzc1LA0KLSAgICAweDgyN0UsIDB4MThCMywgMHg4MjhCLCAweDA0QjYsIDB4ODI4RCwgMHgxOEI0LCAweDgyOEUsIDB4M0FDMywNCi0gICAgMHg4MjkyLCAweDE4QjUsIDB4ODI5OSwgMHgwREQ5LCAweDgyOUQsIDB4MDhGMywgMHg4MjlGLCAweDE4QjcsDQotICAgIDB4ODJBNSwgMHgwNTg3LCAweDgyQTYsIDB4MDQ3NiwgMHg4MkFCLCAweDE4QjYsIDB4ODJBQywgMHgxOEI5LA0KLSAgICAweDgyQUQsIDB4MEQwNCwgMHg4MkFFLCAweDNBQzQsIDB4ODJBRiwgMHgwQTBBLCAweDgyQjEsIDB4MDU1NiwNCi0gICAgMHg4MkIzLCAweDBFNTUsIDB4ODJCNywgMHgzQUM1LCAweDgyQjgsIDB4MDczMywgMHg4MkI5LCAweDA2RDQsDQotICAgIDB4ODJCQiwgMHgxOEI4LCAweDgyQkQsIDB4MDU2QSwgMHg4MkJFLCAweDNBQzYsIDB4ODJDNSwgMHgwNURGLA0KLSAgICAweDgyQzYsIDB4M0FDNywgMHg4MkQxLCAweDA1MTMsIDB4ODJEMiwgMHgxOEJELCAweDgyRDMsIDB4MEZCMiwNCi0gICAgMHg4MkQ0LCAweDBCM0QsIDB4ODJENywgMHgwREI2LCAweDgyRDksIDB4MThDOSwgMHg4MkRCLCAweDA1NTcsDQotICAgIDB4ODJEQywgMHgxOEM3LCAweDgyREUsIDB4MThDNSwgMHg4MkRGLCAweDE4QkMsIDB4ODJFMSwgMHgxOEJBLA0KLSAgICAweDgyRTMsIDB4MThCQiwgMHg4MkU1LCAweDA5MEYsIDB4ODJFNiwgMHgwNkU0LCAweDgyRTcsIDB4MEJCNSwNCi0gICAgMHg4MkVCLCAweDBDQTksIDB4ODJGMSwgMHgwNEYzLCAweDgyRjMsIDB4MThCRiwgMHg4MkY0LCAweDE4QkUsDQotICAgIDB4ODJGOSwgMHgxOEM0LCAweDgyRkEsIDB4MThDMCwgMHg4MkZCLCAweDE4QzMsIDB4ODJGRSwgMHgzQUM4LA0KLSAgICAweDgzMDEsIDB4MjE5OCwgMHg4MzAyLCAweDBFREMsIDB4ODMwMywgMHgxOEMyLCAweDgzMDQsIDB4MDU1OCwNCi0gICAgMHg4MzA1LCAweDA1REIsIDB4ODMwNiwgMHgxOEM2LCAweDgzMDksIDB4MThDOCwgMHg4MzBFLCAweDA3MkEsDQotICAgIDB4ODMxNiwgMHgxOENDLCAweDgzMTcsIDB4MThENSwgMHg4MzE4LCAweDE4RDYsIDB4ODMxQywgMHgwNDZGLA0KLSAgICAweDgzMjMsIDB4MThERCwgMHg4MzI4LCAweDA0QjUsIDB4ODMyQiwgMHgxOEQ0LCAweDgzMkYsIDB4MThEMywNCi0gICAgMHg4MzMxLCAweDE4Q0UsIDB4ODMzMiwgMHgxOENELCAweDgzMzQsIDB4MThDQiwgMHg4MzM1LCAweDE4Q0EsDQotICAgIDB4ODMzNiwgMHgwQkExLCAweDgzMzgsIDB4MEI1QiwgMHg4MzM5LCAweDE4RDAsIDB4ODM0MCwgMHgxOENGLA0KLSAgICAweDgzNDMsIDB4M0FDOSwgMHg4MzQ1LCAweDE4RDIsIDB4ODM0OSwgMHgwQUYyLCAweDgzNEEsIDB4MDcyQiwNCi0gICAgMHg4MzRGLCAweDA0RTMsIDB4ODM1MCwgMHgxOEQxLCAweDgzNTEsIDB4M0FDQSwgMHg4MzUyLCAweDA3RTUsDQotICAgIDB4ODM1NSwgMHgzQUNCLCAweDgzNTgsIDB4MEFGMywgMHg4MzYyLCAweDIxOTksIDB4ODM3MywgMHgxOEUzLA0KLSAgICAweDgzNzUsIDB4MThFNCwgMHg4Mzc3LCAweDA1NTksIDB4ODM3QiwgMHgwNTJFLCAweDgzN0MsIDB4MThFMSwNCi0gICAgMHg4MzdGLCAweDIxOUEsIDB4ODM4NSwgMHgxOEQ3LCAweDgzODYsIDB4M0FDQywgMHg4Mzg3LCAweDE4REYsDQotICAgIDB4ODM4OSwgMHgxOEU2LCAweDgzOEEsIDB4MThFMCwgMHg4MzhELCAweDNBQ0QsIDB4ODM4RSwgMHgxOERFLA0KLSAgICAweDgzOTIsIDB4M0FDRSwgMHg4MzkzLCAweDE4QzEsIDB4ODM5NiwgMHgxOERDLCAweDgzOTgsIDB4M0FDRiwNCi0gICAgMHg4MzlBLCAweDE4RDgsIDB4ODM5RSwgMHgwNjBDLCAweDgzOUYsIDB4MThEQSwgMHg4M0EwLCAweDE4RTUsDQotICAgIDB4ODNBMiwgMHgxOERCLCAweDgzQTgsIDB4MThFNywgMHg4M0E5LCAweDNBRDAsIDB4ODNBQSwgMHgxOEQ5LA0KLSAgICAweDgzQUIsIDB4MEQzMiwgMHg4M0IxLCAweDBGNTMsIDB4ODNCNSwgMHgxOEUyLCAweDgzQkQsIDB4MThGOCwNCi0gICAgMHg4M0JGLCAweDNBRDEsIDB4ODNDMCwgMHgzQUQyLCAweDgzQzEsIDB4MThGMCwgMHg4M0M1LCAweDBBNDEsDQotICAgIDB4ODNDNywgMHgyMTlCLCAweDgzQ0EsIDB4MDY2MCwgMHg4M0NDLCAweDA2RDUsIDB4ODNDRSwgMHgxOEVCLA0KLSAgICAweDgzRDMsIDB4MDU1QiwgMHg4M0Q2LCAweDA5QkMsIDB4ODNEOCwgMHgxOEVFLCAweDgzREMsIDB4MDg0QSwNCi0gICAgMHg4M0RGLCAweDBDNEIsIDB4ODNFMCwgMHgxOEYzLCAweDgzRTksIDB4MEUzRSwgMHg4M0VBLCAweDNBRDMsDQotICAgIDB4ODNFQiwgMHgxOEVBLCAweDgzRUYsIDB4MDU1QSwgMHg4M0YwLCAweDA3OEEsIDB4ODNGMSwgMHgwRDlCLA0KLSAgICAweDgzRjIsIDB4MThGNCwgMHg4M0Y0LCAweDE4RTgsIDB4ODNGNiwgMHgyMTlDLCAweDgzRjcsIDB4MThGMSwNCi0gICAgMHg4M0ZCLCAweDE4RkIsIDB4ODNGRCwgMHgxOEVDLCAweDg0MDMsIDB4MThFRCwgMHg4NDA0LCAweDBDOTIsDQotICAgIDB4ODQwNywgMHgxOEYyLCAweDg0MEEsIDB4MUU3RiwgMHg4NDBCLCAweDE4RUYsIDB4ODQwQywgMHgwRTU2LA0KLSAgICAweDg0MEQsIDB4MThGNSwgMHg4NDBFLCAweDA0QTQsIDB4ODQwRiwgMHgzQUQ0LCAweDg0MTEsIDB4M0FENSwNCi0gICAgMHg4NDEzLCAweDE4RTksIDB4ODQyMCwgMHgxOEY3LCAweDg0MjIsIDB4MThGNiwgMHg4NDI5LCAweDBEMjEsDQotICAgIDB4ODQyQSwgMHgxOEZELCAweDg0MkMsIDB4MTkwOCwgMHg4NDMxLCAweDA1REMsIDB4ODQzNSwgMHgxOTBCLA0KLSAgICAweDg0MzgsIDB4MThGOSwgMHg4NDNDLCAweDE4RkUsIDB4ODQzRCwgMHgwRjU4LCAweDg0NDYsIDB4MTkwNywNCi0gICAgMHg4NDQ4LCAweDIxOUQsIDB4ODQ0OSwgMHgwRjNGLCAweDg0NEEsIDB4M0FENiwgMHg4NDRFLCAweDBGNzIsDQotICAgIDB4ODQ1NywgMHgwQkI2LCAweDg0NUIsIDB4MDVDOSwgMHg4NDYxLCAweDBERTQsIDB4ODQ2MiwgMHgxOTBELA0KLSAgICAweDg0NjMsIDB4MEM3OSwgMHg4NDY2LCAweDA0NzUsIDB4ODQ2OSwgMHgxOTA2LCAweDg0NkIsIDB4MTkwMiwNCi0gICAgMHg4NDZDLCAweDBBRjQsIDB4ODQ2RCwgMHgxOEZDLCAweDg0NkUsIDB4MTkwNCwgMHg4NDZGLCAweDE5MDksDQotICAgIDB4ODQ3MSwgMHgwQ0UyLCAweDg0NzUsIDB4MDQ2RSwgMHg4NDc2LCAweDNBRDcsIDB4ODQ3NywgMHgxOTAxLA0KLSAgICAweDg0NzksIDB4MTkwQSwgMHg4NDdBLCAweDBERUEsIDB4ODQ4MiwgMHgxOTA1LCAweDg0ODQsIDB4MTkwMCwNCi0gICAgMHg4NDhCLCAweDA5QkQsIDB4ODQ5MCwgMHgwOTM5LCAweDg0OTQsIDB4MDhEOCwgMHg4NDk5LCAweDBFRTQsDQotICAgIDB4ODQ5QywgMHgwREI5LCAweDg0OUYsIDB4MTkxMCwgMHg4NEExLCAweDE5MTksIDB4ODRBOCwgMHgzQUQ4LA0KLSAgICAweDg0QUQsIDB4MTkwMywgMHg4NEFGLCAweDNBRDksIDB4ODRCMiwgMHgwNUQ1LCAweDg0QjQsIDB4MjE5RSwNCi0gICAgMHg4NEI4LCAweDA5RTAsIDB4ODRCOSwgMHgxOTBFLCAweDg0QkIsIDB4MTkxMywgMHg4NEJDLCAweDBBRjUsDQotICAgIDB4ODRCRiwgMHgxOTBGLCAweDg0QzAsIDB4M0FEQSwgMHg4NEMxLCAweDE5MTYsIDB4ODRDMiwgMHgzQURCLA0KLSAgICAweDg0QzQsIDB4MEI5RCwgMHg4NEM2LCAweDE5MTcsIDB4ODRDOSwgMHgwRjQwLCAweDg0Q0EsIDB4MTkwQywNCi0gICAgMHg4NENCLCAweDA1OTYsIDB4ODRDRCwgMHgxOTEyLCAweDg0RDAsIDB4MTkxNSwgMHg4NEQxLCAweDBFQjgsDQotICAgIDB4ODRENiwgMHgxOTE4LCAweDg0RDksIDB4MTkxMSwgMHg4NERBLCAweDE5MTQsIDB4ODREQywgMHgyMEFCLA0KLSAgICAweDg0RUMsIDB4MEU1NywgMHg4NEVFLCAweDBGQzcsIDB4ODRGMCwgMHgzQURDLCAweDg0RjQsIDB4MTkxQywNCi0gICAgMHg4NEZDLCAweDE5MjMsIDB4ODRGRCwgMHgzQURELCAweDg0RkYsIDB4MTkxQiwgMHg4NTAwLCAweDA4RUYsDQotICAgIDB4ODUwNiwgMHgxOEZBLCAweDg1MEMsIDB4M0FERSwgMHg4NTExLCAweDBFMUUsIDB4ODUxMywgMHgwRUFFLA0KLSAgICAweDg1MTQsIDB4MTkyMiwgMHg4NTE1LCAweDE5MjEsIDB4ODUxNywgMHgxOTFELCAweDg1MTgsIDB4MTkxRSwNCi0gICAgMHg4NTFBLCAweDA0RDgsIDB4ODUxRiwgMHgxOTIwLCAweDg1MjEsIDB4MTkxQSwgMHg4NTIzLCAweDFFMUEsDQotICAgIDB4ODUyNiwgMHgwQkYxLCAweDg1MkMsIDB4MTkxRiwgMHg4NTJELCAweDA0QzIsIDB4ODUzNCwgMHgzQURGLA0KLSAgICAweDg1MzUsIDB4MEIwMiwgMHg4NTNELCAweDBFMTMsIDB4ODUzRSwgMHgxRUI1LCAweDg1NDAsIDB4MTkyNCwNCi0gICAgMHg4NTQxLCAweDE5MjgsIDB4ODU0MywgMHgwRDZELCAweDg1NDgsIDB4MTkyNywgMHg4NTQ5LCAweDA5QkUsDQotICAgIDB4ODU0QSwgMHgwOEY1LCAweDg1NEIsIDB4MTkyQSwgMHg4NTRFLCAweDA2QjYsIDB4ODU1MywgMHgyMTlGLA0KLSAgICAweDg1NTUsIDB4MTkyQiwgMHg4NTU3LCAweDBERUIsIDB4ODU1OCwgMHgxOTI2LCAweDg1NTksIDB4MjFBMCwNCi0gICAgMHg4NTVBLCAweDE4RkYsIDB4ODU1RSwgMHgzQUUwLCAweDg1NjMsIDB4MTkyNSwgMHg4NTY4LCAweDBGRjUsDQotICAgIDB4ODU2OSwgMHgwQzdBLCAweDg1NkEsIDB4MERFNSwgMHg4NTZCLCAweDIxQTEsIDB4ODU2RCwgMHgxOTMyLA0KLSAgICAweDg1NzcsIDB4MTkzOCwgMHg4NTdFLCAweDE5MzksIDB4ODU4MCwgMHgxOTJDLCAweDg1ODQsIDB4MEQyQywNCi0gICAgMHg4NTg3LCAweDE5MzYsIDB4ODU4OCwgMHgxOTJFLCAweDg1OEEsIDB4MTkzMCwgMHg4NThGLCAweDNBRTEsDQotICAgIDB4ODU5MCwgMHgxOTNBLCAweDg1OTEsIDB4MTkyRiwgMHg4NTk0LCAweDE5MzMsIDB4ODU5NywgMHgwNTE0LA0KLSAgICAweDg1OTksIDB4MENCRCwgMHg4NTlCLCAweDE5MzQsIDB4ODU5QywgMHgxOTM3LCAweDg1QTQsIDB4MTkyRCwNCi0gICAgMHg4NUE2LCAweDBBQTgsIDB4ODVBOCwgMHgxOTMxLCAweDg1QTksIDB4MDg3NSwgMHg4NUFBLCAweDBBMEIsDQotICAgIDB4ODVBQiwgMHgwNzA2LCAweDg1QUMsIDB4MEYwMCwgMHg4NUFELCAweDNBRTQsIDB4ODVBRSwgMHgwRjA1LA0KLSAgICAweDg1QUYsIDB4MDk3QywgMHg4NUIwLCAweDIxQTMsIDB4ODVCNywgMHgzQUUyLCAweDg1QjksIDB4MTkzRSwNCi0gICAgMHg4NUJBLCAweDE5M0MsIDB4ODVDMSwgMHgwRkY0LCAweDg1QzksIDB4MTkzQiwgMHg4NUNELCAweDBGNUYsDQotICAgIDB4ODVDRSwgMHgzQUUzLCAweDg1Q0YsIDB4MTkzRCwgMHg4NUQwLCAweDE5M0YsIDB4ODVENSwgMHgxOTQwLA0KLSAgICAweDg1REMsIDB4MTk0MywgMHg4NURELCAweDE5NDEsIDB4ODVFNCwgMHgwQzdCLCAweDg1RTUsIDB4MTk0MiwNCi0gICAgMHg4NUU5LCAweDBENjEsIDB4ODVFQSwgMHgxOTM1LCAweDg1RjQsIDB4Mzc4MCwgMHg4NUY3LCAweDA5N0QsDQotICAgIDB4ODVGOSwgMHgxOTQ0LCAweDg1RkEsIDB4MTk0OSwgMHg4NUZCLCAweDBBRjYsIDB4ODVGRSwgMHgxOTQ4LA0KLSAgICAweDg2MDIsIDB4MTkyOSwgMHg4NjA2LCAweDE5NEEsIDB4ODYwNywgMHgwQUNCLCAweDg2MEEsIDB4MTk0NSwNCi0gICAgMHg4NjBCLCAweDE5NDcsIDB4ODYxMiwgMHgzQUU1LCAweDg2MTMsIDB4MTk0NiwgMHg4NjE2LCAweDE0RDAsDQotICAgIDB4ODYxNywgMHgxNEMxLCAweDg2MUEsIDB4MTk0QywgMHg4NjIyLCAweDE5NEIsIDB4ODYyOSwgMHgzQUU2LA0KLSAgICAweDg2MkQsIDB4MEY2MCwgMHg4NjJGLCAweDE2QjEsIDB4ODYzMCwgMHgxOTRELCAweDg2M0YsIDB4MTk0RSwNCi0gICAgMHg4NjRELCAweDE5NEYsIDB4ODY0RSwgMHgwNzhCLCAweDg2NTAsIDB4MDY2RSwgMHg4NjUyLCAweDNBRTcsDQotICAgIDB4ODY1NCwgMHgxOTUxLCAweDg2NTUsIDB4MTA5NCwgMHg4NjVBLCAweDA2OEYsIDB4ODY1QiwgMHgzNDE4LA0KLSAgICAweDg2NUMsIDB4MEY4MiwgMHg4NjVFLCAweDA2RUIsIDB4ODY1RiwgMHgxOTUyLCAweDg2NjMsIDB4M0FFOCwNCi0gICAgMHg4NjY3LCAweDE5NTMsIDB4ODY2QiwgMHgwQkFDLCAweDg2NkMsIDB4M0FFOSwgMHg4NjZGLCAweDNBRUEsDQotICAgIDB4ODY3MSwgMHgxOTU0LCAweDg2NzksIDB4MENEMiwgMHg4NjdBLCAweDNBRUIsIDB4ODY3QiwgMHgwNDdFLA0KLSAgICAweDg2N0QsIDB4Mzc4NiwgMHg4NjhBLCAweDA1NjMsIDB4ODY4QiwgMHgxOTU5LCAweDg2OEMsIDB4MTk1QSwNCi0gICAgMHg4NjhELCAweDNBRUMsIDB4ODY5MSwgMHgzQUVELCAweDg2OTMsIDB4MTk1NSwgMHg4Njk1LCAweDA4OEIsDQotICAgIDB4ODY5OCwgMHgzQUVFLCAweDg2QTMsIDB4MTk1NiwgMHg4NkE0LCAweDBDRjgsIDB4ODZBNywgMHgzQUVGLA0KLSAgICAweDg2QTgsIDB4M0FGMCwgMHg4NkE5LCAweDE5NTcsIDB4ODZBQSwgMHgxOTU4LCAweDg2QUIsIDB4MTk2MiwNCi0gICAgMHg4NkFGLCAweDE5NUMsIDB4ODZCMCwgMHgxOTVGLCAweDg2QjYsIDB4MTk1QiwgMHg4NkM0LCAweDE5NUQsDQotICAgIDB4ODZDNiwgMHgxOTVFLCAweDg2QzcsIDB4MDkwNCwgMHg4NkM5LCAweDE5NjAsIDB4ODZDQiwgMHgwQjdGLA0KLSAgICAweDg2Q0QsIDB4MDcyQywgMHg4NkNFLCAweDA1QTAsIDB4ODZENCwgMHgxOTYzLCAweDg2RDksIDB4MDU5RCwNCi0gICAgMHg4NkRCLCAweDE5NjgsIDB4ODZERSwgMHgxOTY0LCAweDg2REYsIDB4MTk2NywgMHg4NkU0LCAweDBENEUsDQotICAgIDB4ODZFOSwgMHgxOTY1LCAweDg2RUMsIDB4MTk2NiwgMHg4NkVELCAweDBEQkEsIDB4ODZFRSwgMHgwRDZFLA0KLSAgICAweDg2RUYsIDB4MTk2OSwgMHg4NkY4LCAweDBCNUQsIDB4ODZGOSwgMHgxOTczLCAweDg2RkEsIDB4M0FGMSwNCi0gICAgMHg4NkZCLCAweDE5NkYsIDB4ODZGRCwgMHgzQUYyLCAweDg2RkUsIDB4MDU2QiwgMHg4NzAwLCAweDE5NkQsDQotICAgIDB4ODcwMiwgMHgwRTU4LCAweDg3MDMsIDB4MTk2RSwgMHg4NzA2LCAweDE5NkIsIDB4ODcwOCwgMHgxOTZDLA0KLSAgICAweDg3MDksIDB4MTk3MSwgMHg4NzBBLCAweDE5NzQsIDB4ODcwQiwgMHgzQUYzLCAweDg3MEQsIDB4MTk3MiwNCi0gICAgMHg4NzExLCAweDE5NzAsIDB4ODcxMiwgMHgxOTZBLCAweDg3MTMsIDB4M0FGNCwgMHg4NzE4LCAweDBCOTYsDQotICAgIDB4ODcxOSwgMHgzQUY1LCAweDg3MUEsIDB4MTk3QiwgMHg4NzFDLCAweDBFQjYsIDB4ODcxRSwgMHgzQUY2LA0KLSAgICAweDg3MjUsIDB4MTk3OSwgMHg4NzI4LCAweDNBRjcsIDB4ODcyOSwgMHgxOTdBLCAweDg3MzQsIDB4MTk3NSwNCi0gICAgMHg4NzM3LCAweDE5NzcsIDB4ODczQiwgMHgxOTc4LCAweDg3M0UsIDB4M0FGOCwgMHg4NzNGLCAweDE5NzYsDQotICAgIDB4ODc0OSwgMHgwQThBLCAweDg3NEIsIDB4MEZERiwgMHg4NzRDLCAweDE5N0YsIDB4ODc0RSwgMHgxOTgwLA0KLSAgICAweDg3NTMsIDB4MTk4NiwgMHg4NzU1LCAweDA5RjAsIDB4ODc1NywgMHgxOTgyLCAweDg3NTksIDB4MTk4NSwNCi0gICAgMHg4NzVGLCAweDE5N0QsIDB4ODc2MCwgMHgxOTdDLCAweDg3NjMsIDB4MTk4NywgMHg4NzY2LCAweDA1NUMsDQotICAgIDB4ODc2OCwgMHgxOTgzLCAweDg3NkEsIDB4MTk4OCwgMHg4NzZFLCAweDE5ODQsIDB4ODc3MSwgMHgzQUY5LA0KLSAgICAweDg3NzQsIDB4MTk4MSwgMHg4Nzc2LCAweDBCQ0YsIDB4ODc3OCwgMHgxOTdFLCAweDg3N0YsIDB4MEQxRSwNCi0gICAgMHg4NzgyLCAweDE5OEMsIDB4ODc4OCwgMHgzQUZBLCAweDg3OEQsIDB4MEYyNSwgMHg4Nzk5LCAweDNBRkIsDQotICAgIDB4ODc5RiwgMHgxOThCLCAweDg3QTIsIDB4MTk4QSwgMHg4N0FCLCAweDE5OTMsIDB4ODdBQywgMHgzQUZDLA0KLSAgICAweDg3QUQsIDB4M0FGRCwgMHg4N0FGLCAweDE5OEQsIDB4ODdCMywgMHgxOTk1LCAweDg3QjUsIDB4M0FGRSwNCi0gICAgMHg4N0JBLCAweDBGNTAsIDB4ODdCQiwgMHgxOTk4LCAweDg3QkQsIDB4MTk4RiwgMHg4N0MwLCAweDE5OTAsDQotICAgIDB4ODdDNCwgMHgxOTk0LCAweDg3QzYsIDB4MTk5NywgMHg4N0M3LCAweDE5OTYsIDB4ODdDQiwgMHgxOThFLA0KLSAgICAweDg3RDAsIDB4MTk5MSwgMHg4N0QyLCAweDE5QTIsIDB4ODdENiwgMHgzQUZGLCAweDg3RTAsIDB4MTk5QiwNCi0gICAgMHg4N0VCLCAweDNCMDAsIDB4ODdFQywgMHgxRTIzLCAweDg3RUQsIDB4M0IwMSwgMHg4N0VGLCAweDE5OTksDQotICAgIDB4ODdGMiwgMHgxOTlBLCAweDg3RjUsIDB4M0MzRCwgMHg4N0Y2LCAweDE5OUYsIDB4ODdGNywgMHgxOUEwLA0KLSAgICAweDg3RjksIDB4MDU4OCwgMHg4N0ZCLCAweDA2NUMsIDB4ODdGRSwgMHgxOTlFLCAweDg4MDEsIDB4M0IwMiwNCi0gICAgMHg4ODAzLCAweDNCMDMsIDB4ODgwNSwgMHgxOTg5LCAweDg4MDYsIDB4M0IwNCwgMHg4ODA3LCAweDIxQTYsDQotICAgIDB4ODgwQiwgMHgzQjA1LCAweDg4MEQsIDB4MTk5RCwgMHg4ODBFLCAweDE5QTEsIDB4ODgwRiwgMHgxOTlDLA0KLSAgICAweDg4MTEsIDB4MTlBMywgMHg4ODE0LCAweDNCMDYsIDB4ODgxNSwgMHgxOUE1LCAweDg4MTYsIDB4MTlBNCwNCi0gICAgMHg4ODFDLCAweDNCMDcsIDB4ODgxRiwgMHgxRTg1LCAweDg4MjEsIDB4MTlBNywgMHg4ODIyLCAweDE5QTYsDQotICAgIDB4ODgyMywgMHgxOTYxLCAweDg4MjcsIDB4MTlBQiwgMHg4ODMxLCAweDE5QTgsIDB4ODgzNiwgMHgxOUE5LA0KLSAgICAweDg4MzksIDB4MTlBQSwgMHg4ODNCLCAweDE5QUMsIDB4ODg0MCwgMHgwNzQyLCAweDg4NDIsIDB4MTlBRSwNCi0gICAgMHg4ODQ0LCAweDE5QUQsIDB4ODg0NiwgMHgwOTNBLCAweDg4NEMsIDB4MDdFNiwgMHg4ODRELCAweDE1MjQsDQotICAgIDB4ODg1MiwgMHgxOUFGLCAweDg4NTMsIDB4MDk1QiwgMHg4ODU2LCAweDNCMDgsIDB4ODg1NywgMHgwNTk3LA0KLSAgICAweDg4NTksIDB4MTlCMCwgMHg4ODVCLCAweDA0RjQsIDB4ODg1RCwgMHgwOUJGLCAweDg4NUUsIDB4MTlCMSwNCi0gICAgMHg4ODVGLCAweDNCMDksIDB4ODg2MSwgMHgwN0U3LCAweDg4NjIsIDB4MTlCMiwgMHg4ODYzLCAweDA0QTUsDQotICAgIDB4ODg2NCwgMHgzQjBBLCAweDg4NjgsIDB4MERBRiwgMHg4ODZCLCAweDE5QjMsIDB4ODg3MCwgMHgwQTMwLA0KLSAgICAweDg4NzIsIDB4MTlCQSwgMHg4ODc1LCAweDE5QjcsIDB4ODg3NywgMHgwQkFELCAweDg4N0QsIDB4MTlCOCwNCi0gICAgMHg4ODdFLCAweDE5QjUsIDB4ODg3RiwgMHgwNkQ2LCAweDg4ODEsIDB4MTlCNCwgMHg4ODgyLCAweDE5QkIsDQotICAgIDB4ODg4OCwgMHgwNzBDLCAweDg4OEIsIDB4MEIzRSwgMHg4ODhELCAweDE5QzEsIDB4ODg5MiwgMHgxOUJELA0KLSAgICAweDg4OTYsIDB4MEIxNSwgMHg4ODk3LCAweDE5QkMsIDB4ODg5OCwgMHgzQjBCLCAweDg4OTksIDB4MTlCRiwNCi0gICAgMHg4ODlFLCAweDE5QjYsIDB4ODhBMiwgMHgxOUMwLCAweDg4QTQsIDB4MTlDMiwgMHg4OEFBLCAweDNCMEMsDQotICAgIDB4ODhBQiwgMHgwRDgzLCAweDg4QUUsIDB4MTlCRSwgMHg4OEIwLCAweDE5QzMsIDB4ODhCMSwgMHgxOUM1LA0KLSAgICAweDg4QjQsIDB4MDc4NywgMHg4OEI1LCAweDE5QjksIDB4ODhCNywgMHgwNDg1LCAweDg4QkQsIDB4M0IwRCwNCi0gICAgMHg4OEJFLCAweDNCMEUsIDB4ODhCRiwgMHgxOUM0LCAweDg4QzEsIDB4MDg0QiwgMHg4OEMyLCAweDBGQkUsDQotICAgIDB4ODhDMywgMHgxOUM2LCAweDg4QzQsIDB4MTlDNywgMHg4OEM1LCAweDBBRjcsIDB4ODhDNiwgMHgzNzg5LA0KLSAgICAweDg4Q0EsIDB4M0IwRiwgMHg4OENGLCAweDBGNkEsIDB4ODhEMiwgMHgzQjEwLCAweDg4RDQsIDB4MTlDOCwNCi0gICAgMHg4OEQ1LCAweDBGMUYsIDB4ODhEOCwgMHgxOUM5LCAweDg4RDksIDB4MTlDQSwgMHg4OERCLCAweDNCMTEsDQotICAgIDB4ODhEQywgMHgwRTM0LCAweDg4REQsIDB4MTlDQiwgMHg4OERGLCAweDA4MzAsIDB4ODhFMSwgMHgwRjZCLA0KLSAgICAweDg4RTgsIDB4MTlEMCwgMHg4OEYwLCAweDNCMTIsIDB4ODhGMSwgMHgzQjEzLCAweDg4RjIsIDB4MTlEMSwNCi0gICAgMHg4OEYzLCAweDA5QzAsIDB4ODhGNCwgMHgxOUNGLCAweDg4RjUsIDB4MjFBNywgMHg4OEY4LCAweDBGNTEsDQotICAgIDB4ODhGOSwgMHgxOUNDLCAweDg4RkMsIDB4MTlDRSwgMHg4OEZELCAweDBBNjEsIDB4ODhGRSwgMHgwQTQ0LA0KLSAgICAweDg5MDIsIDB4MTlDRCwgMHg4OTA0LCAweDE5RDIsIDB4ODkwNiwgMHgzQjE0LCAweDg5MDcsIDB4MERGMywNCi0gICAgMHg4OTBBLCAweDE5RDQsIDB4ODkwQywgMHgxOUQzLCAweDg5MTAsIDB4MDVDQSwgMHg4OTEyLCAweDBFNTksDQotICAgIDB4ODkxMywgMHgxOUQ1LCAweDg5MTgsIDB4M0IxNSwgMHg4OTE5LCAweDNCMTYsIDB4ODkxQSwgMHgzQjE3LA0KLSAgICAweDg5MUMsIDB4MjBBOCwgMHg4OTFELCAweDE5RTEsIDB4ODkxRSwgMHgxOUQ3LCAweDg5MjUsIDB4MTlEOCwNCi0gICAgMHg4OTI3LCAweDNCMTgsIDB4ODkyQSwgMHgxOUQ5LCAweDg5MkIsIDB4MTlEQSwgMHg4OTMwLCAweDNCMTksDQotICAgIDB4ODkzNiwgMHgxOURFLCAweDg5MzgsIDB4MTlERiwgMHg4OTNCLCAweDE5REQsIDB4ODkzRSwgMHgzQjFBLA0KLSAgICAweDg5NDEsIDB4MTlEQiwgMHg4OTQzLCAweDE5RDYsIDB4ODk0NCwgMHgxOURDLCAweDg5NEMsIDB4MTlFMCwNCi0gICAgMHg4OTRELCAweDFCRDAsIDB4ODk1NiwgMHgwNTI4LCAweDg5NUUsIDB4MTlFMywgMHg4OTVGLCAweDA2RDcsDQotICAgIDB4ODk2MCwgMHgxOUUyLCAweDg5NjQsIDB4MTlFNSwgMHg4OTY2LCAweDE5RTQsIDB4ODk2QSwgMHgxOUU3LA0KLSAgICAweDg5NkQsIDB4MTlFNiwgMHg4OTZGLCAweDE5RTgsIDB4ODk3MiwgMHgwOTNCLCAweDg5NzQsIDB4MTlFOSwNCi0gICAgMHg4OTc3LCAweDE5RUEsIDB4ODk3QiwgMHgzQjFCLCAweDg5N0UsIDB4MTlFQiwgMHg4OTdGLCAweDBBNjIsDQotICAgIDB4ODk4MCwgMHgzNjJFLCAweDg5ODEsIDB4MEY0MSwgMHg4OTgzLCAweDE5RUMsIDB4ODk4NiwgMHgwREY0LA0KLSAgICAweDg5ODcsIDB4MENGQywgMHg4OTg4LCAweDE5RUQsIDB4ODk4QSwgMHgxOUVFLCAweDg5OEIsIDB4MDc1RiwNCi0gICAgMHg4OThGLCAweDA2NDYsIDB4ODk5MywgMHgxOUVGLCAweDg5OTYsIDB4MDhCOSwgMHg4OTk3LCAweDBDRjcsDQotICAgIDB4ODk5OCwgMHgxOUYwLCAweDg5OUEsIDB4MDVBRSwgMHg4OUExLCAweDE5RjEsIDB4ODlBNiwgMHgxOUYzLA0KLSAgICAweDg5QTcsIDB4MEY2MSwgMHg4OUE5LCAweDE5RjIsIDB4ODlBQSwgMHgwQTBDLCAweDg5QUMsIDB4MTlGNCwNCi0gICAgMHg4OUFGLCAweDE5RjUsIDB4ODlCMiwgMHgxOUY2LCAweDg5QjMsIDB4MDYwRCwgMHg4OUJBLCAweDE5RjcsDQotICAgIDB4ODlCRCwgMHgxOUY4LCAweDg5QkYsIDB4MTlGOSwgMHg4OUMwLCAweDE5RkEsIDB4ODlEMiwgMHgwNUFGLA0KLSAgICAweDg5RDQsIDB4M0IxQywgMHg4OUQ2LCAweDNCMUQsIDB4ODlEQSwgMHgxOUZCLCAweDg5REMsIDB4MTlGQywNCi0gICAgMHg4OURELCAweDE5RkQsIDB4ODlFMywgMHgwNTcyLCAweDg5RTUsIDB4M0IxRSwgMHg4OUU2LCAweDA5RUUsDQotICAgIDB4ODlFNywgMHgxOUZFLCAweDg5RjEsIDB4M0IxRiwgMHg4OUY0LCAweDE5RkYsIDB4ODlGOCwgMHgxQTAwLA0KLSAgICAweDhBMDAsIDB4MDc3NCwgMHg4QTAxLCAweDM1QkMsIDB4OEEwMiwgMHgwQzE3LCAweDhBMDMsIDB4MUEwMSwNCi0gICAgMHg4QTA3LCAweDNCMjAsIDB4OEEwOCwgMHgwNzJELCAweDhBMEEsIDB4MEExQywgMHg4QTBDLCAweDFBMDQsDQotICAgIDB4OEEwRSwgMHgwQzdDLCAweDhBMEYsIDB4M0IyMSwgMHg4QTEwLCAweDFBMDMsIDB4OEExMiwgMHgyMUE4LA0KLSAgICAweDhBMTMsIDB4MDcwNywgMHg4QTE1LCAweDNCMjIsIDB4OEExNiwgMHgxQTAyLCAweDhBMTcsIDB4MEI1NywNCi0gICAgMHg4QTE4LCAweDA2NDcsIDB4OEExQiwgMHgxQTA1LCAweDhBMUQsIDB4MUEwNiwgMHg4QTFGLCAweDA5QzEsDQotICAgIDB4OEEyMiwgMHgzQjIzLCAweDhBMjMsIDB4MDc0MywgMHg4QTI1LCAweDFBMDcsIDB4OEEyQSwgMHgwRTVBLA0KLSAgICAweDhBMkQsIDB4MEE4MywgMHg4QTMxLCAweDA2OTAsIDB4OEEzMywgMHgwRjAxLCAweDhBMzQsIDB4MEFDQywNCi0gICAgMHg4QTM2LCAweDFBMDgsIDB4OEEzNywgMHgyMUE5LCAweDhBM0EsIDB4MEEwRCwgMHg4QTNCLCAweDBCQUUsDQotICAgIDB4OEEzQywgMHgwOUMyLCAweDhBNDEsIDB4MUEwOSwgMHg4QTQ2LCAweDFBMEMsIDB4OEE0OCwgMHgxQTBELA0KLSAgICAweDhBNEUsIDB4M0IyNCwgMHg4QTUwLCAweDA4MkUsIDB4OEE1MSwgMHgwQjIyLCAweDhBNTIsIDB4MUEwQiwNCi0gICAgMHg4QTU0LCAweDA5QzMsIDB4OEE1NSwgMHgwREIwLCAweDhBNUIsIDB4MUEwQSwgMHg4QTVFLCAweDA4QkEsDQotICAgIDB4OEE2MCwgMHgwNEY1LCAweDhBNjIsIDB4MUExMSwgMHg4QTYzLCAweDA3MkUsIDB4OEE2NiwgMHgwOEJDLA0KLSAgICAweDhBNjksIDB4MDhCQiwgMHg4QTZCLCAweDBGRjMsIDB4OEE2QywgMHgxQTEwLCAweDhBNkQsIDB4MUEwRiwNCi0gICAgMHg4QTZFLCAweDBBQTksIDB4OEE3MCwgMHgwNjY3LCAweDhBNzEsIDB4MEZFOSwgMHg4QTcyLCAweDA1OTgsDQotICAgIDB4OEE3MywgMHgwOUM0LCAweDhBNzksIDB4MjFBQSwgMHg4QTdDLCAweDFBMEUsIDB4OEE3RiwgMHgzQjI1LA0KLSAgICAweDhBODIsIDB4MUExMywgMHg4QTg0LCAweDFBMTQsIDB4OEE4NSwgMHgxQTEyLCAweDhBODcsIDB4MDc4QywNCi0gICAgMHg4QTg5LCAweDBGMkEsIDB4OEE4QywgMHgwOEJELCAweDhBOEQsIDB4MENERCwgMHg4QTkxLCAweDFBMTcsDQotICAgIDB4OEE5MywgMHgwQTY0LCAweDhBOTUsIDB4MEI4MCwgMHg4QTk4LCAweDBGMjAsIDB4OEE5QSwgMHgxQTFBLA0KLSAgICAweDhBOUUsIDB4MDdBMCwgMHg4QUEwLCAweDBBNjMsIDB4OEFBMSwgMHgxQTE2LCAweDhBQTMsIDB4MUExQiwNCi0gICAgMHg4QUE0LCAweDA3QTEsIDB4OEFBNSwgMHgxQTE4LCAweDhBQTYsIDB4MUExOSwgMHg4QUE3LCAweDIxQUIsDQotICAgIDB4OEFBOCwgMHgxQTE1LCAweDhBQUEsIDB4MzYzOCwgMHg4QUFDLCAweDBBODYsIDB4OEFBRCwgMHgwQ0ExLA0KLSAgICAweDhBQjAsIDB4MEI2RCwgMHg4QUIyLCAweDA1NUQsIDB4OEFCOSwgMHgwRDg0LCAweDhBQkMsIDB4MDY1RCwNCi0gICAgMHg4QUJFLCAweDIxQUMsIDB4OEFCRiwgMHgwQkQwLCAweDhBQzIsIDB4MUExRSwgMHg4QUM0LCAweDFBMUMsDQotICAgIDB4OEFDNywgMHgwQjhBLCAweDhBQ0IsIDB4MEE2NSwgMHg4QUNDLCAweDA2MEUsIDB4OEFDRCwgMHgxQTFELA0KLSAgICAweDhBQ0YsIDB4MEEyMSwgMHg4QUQyLCAweDBGOTIsIDB4OEFENiwgMHgwRkU2LCAweDhBREEsIDB4MUExRiwNCi0gICAgMHg4QURCLCAweDFBMkEsIDB4OEFEQywgMHgwQkQxLCAweDhBREUsIDB4MUEyOSwgMHg4QURGLCAweDIxQUQsDQotICAgIDB4OEFFMCwgMHgxQTI2LCAweDhBRTEsIDB4MUEyRSwgMHg4QUUyLCAweDFBMjcsIDB4OEFFNCwgMHgxQTIzLA0KLSAgICAweDhBRTYsIDB4MEMxOCwgMHg4QUU3LCAweDFBMjIsIDB4OEFFQiwgMHgxQTIwLCAweDhBRUQsIDB4MEYwQiwNCi0gICAgMHg4QUVFLCAweDA4QkUsIDB4OEFGMSwgMHgxQTI0LCAweDhBRjMsIDB4MUEyMSwgMHg4QUY0LCAweDNCMjYsDQotICAgIDB4OEFGNiwgMHgyMUFGLCAweDhBRjcsIDB4MUEyOCwgMHg4QUY4LCAweDA5N0UsIDB4OEFGQSwgMHgwNzc1LA0KLSAgICAweDhBRkUsIDB4MEI1QSwgMHg4QjAwLCAweDBFNzMsIDB4OEIwMSwgMHgwNEZDLCAweDhCMDIsIDB4MDRBNiwNCi0gICAgMHg4QjA0LCAweDBDN0QsIDB4OEIwNywgMHgxQTJDLCAweDhCMEMsIDB4MUEyQiwgMHg4QjBFLCAweDBDQkUsDQotICAgIDB4OEIxMCwgMHgxQTMwLCAweDhCMTQsIDB4MUEyNSwgMHg4QjE2LCAweDFBMkYsIDB4OEIxNywgMHgxQTMxLA0KLSAgICAweDhCMTksIDB4MDc2MCwgMHg4QjFBLCAweDFBMkQsIDB4OEIxQiwgMHgwN0U4LCAweDhCMUQsIDB4MDkwMSwNCi0gICAgMHg4QjFGLCAweDNCMjcsIDB4OEIyMCwgMHgxQTMyLCAweDhCMjEsIDB4MEY0MiwgMHg4QjI2LCAweDFBMzUsDQotICAgIDB4OEIyOCwgMHgxQTM4LCAweDhCMkIsIDB4MUEzNiwgMHg4QjJDLCAweDBEQTcsIDB4OEIzMywgMHgxQTMzLA0KLSAgICAweDhCMzcsIDB4M0IyOCwgMHg4QjM5LCAweDA2RDgsIDB4OEIzRSwgMHgxQTM3LCAweDhCNDEsIDB4MUEzOSwNCi0gICAgMHg4QjQzLCAweDNCMjksIDB4OEI0NCwgMHgzQjJBLCAweDhCNDksIDB4MUEzRCwgMHg4QjRDLCAweDFBM0EsDQotICAgIDB4OEI0RSwgMHgxQTNDLCAweDhCNEYsIDB4MUEzQiwgMHg4QjUzLCAweDIxQjAsIDB4OEI1NCwgMHgzQjJCLA0KLSAgICAweDhCNTYsIDB4MUEzRSwgMHg4QjU4LCAweDA4REQsIDB4OEI1QSwgMHgxQTQwLCAweDhCNUIsIDB4MUEzRiwNCi0gICAgMHg4QjVDLCAweDBEREEsIDB4OEI1RiwgMHgxQTQyLCAweDhCNjYsIDB4MDcyRiwgMHg4QjZCLCAweDFBNDEsDQotICAgIDB4OEI2QywgMHgxQTQzLCAweDhCNkYsIDB4MUE0NCwgMHg4QjcwLCAweDA2NUUsIDB4OEI3MSwgMHgxODJFLA0KLSAgICAweDhCNzIsIDB4MDlFMSwgMHg4Qjc0LCAweDFBNDUsIDB4OEI3NywgMHgwN0EyLCAweDhCN0QsIDB4MUE0NiwNCi0gICAgMHg4QjdGLCAweDIxQjEsIDB4OEI4MCwgMHgxQTQ3LCAweDhCODMsIDB4MDg4QywgMHg4QjhBLCAweDEzRDMsDQotICAgIDB4OEI4QywgMHgxQTQ4LCAweDhCOEUsIDB4MUE0OSwgMHg4QjkwLCAweDA5M0MsIDB4OEI5MiwgMHgxQTRBLA0KLSAgICAweDhCOTMsIDB4MUE0QiwgMHg4Qjk2LCAweDFBNEMsIDB4OEI5OSwgMHgxQTRELCAweDhCOUEsIDB4MUE0RSwNCi0gICAgMHg4QjlDLCAweDNCMkMsIDB4OEI5RSwgMHgzQjJELCAweDhDMzcsIDB4MEI2OSwgMHg4QzNBLCAweDFBNEYsDQotICAgIDB4OEMzRiwgMHgxQTUxLCAweDhDNDEsIDB4MUE1MCwgMHg4QzQ2LCAweDBDN0UsIDB4OEM0NywgMHgzQjJFLA0KLSAgICAweDhDNDgsIDB4MUE1MiwgMHg4QzRBLCAweDBFNUIsIDB4OEM0QywgMHgxQTUzLCAweDhDNEUsIDB4MUE1NCwNCi0gICAgMHg4QzUwLCAweDFBNTUsIDB4OEM1NCwgMHgzQjJGLCAweDhDNTUsIDB4MUE1NiwgMHg4QzVBLCAweDBDQjIsDQotICAgIDB4OEM2MSwgMHgwOUM1LCAweDhDNjIsIDB4MUE1NywgMHg4QzZBLCAweDA3RkQsIDB4OEM2QiwgMHgxMDA3LA0KLSAgICAweDhDNkMsIDB4MUE1OCwgMHg4QzczLCAweDNCMzAsIDB4OEM3OCwgMHgxQTU5LCAweDhDNzksIDB4MERCMSwNCi0gICAgMHg4QzdBLCAweDFBNUEsIDB4OEM3QywgMHgxQTYyLCAweDhDODIsIDB4MUE1QiwgMHg4Qzg1LCAweDFBNUQsDQotICAgIDB4OEM4OSwgMHgxQTVDLCAweDhDOEEsIDB4MUE1RSwgMHg4QzhDLCAweDBFNzQsIDB4OEM4RCwgMHgxQTVGLA0KLSAgICAweDhDOEUsIDB4MUE2MCwgMHg4Qzk0LCAweDFBNjEsIDB4OEM5OCwgMHgxQTYzLCAweDhDOUQsIDB4MDU4QiwNCi0gICAgMHg4QzlFLCAweDBDMDMsIDB4OENBMCwgMHgwRERCLCAweDhDQTEsIDB4MDg1MiwgMHg4Q0EyLCAweDA3RTksDQotICAgIDB4OENBNCwgMHgzQjMxLCAweDhDQTcsIDB4MERDMSwgMHg4Q0E4LCAweDA1NUYsIDB4OENBOSwgMHgwRDYyLA0KLSAgICAweDhDQUEsIDB4MUE2NiwgMHg4Q0FCLCAweDA2MEYsIDB4OENBQywgMHgwQTc5LCAweDhDQUQsIDB4MUE2NSwNCi0gICAgMHg4Q0FFLCAweDFBNkEsIDB4OENBRiwgMHgwQkI3LCAweDhDQjAsIDB4MEVFRiwgMHg4Q0IyLCAweDFBNjgsDQotICAgIDB4OENCMywgMHgxQTY5LCAweDhDQjQsIDB4MDY0OCwgMHg4Q0I2LCAweDFBNkIsIDB4OENCNywgMHgwRDE5LA0KLSAgICAweDhDQjgsIDB4MEIzRiwgMHg4Q0JCLCAweDBEODUsIDB4OENCQywgMHgwQzM3LCAweDhDQkQsIDB4MUE2NywNCi0gICAgMHg4Q0JGLCAweDBFNzUsIDB4OENDMCwgMHgwNTZDLCAweDhDQzEsIDB4MUE2RCwgMHg4Q0MyLCAweDBGQ0UsDQotICAgIDB4OENDMywgMHgwQkRFLCAweDhDQzQsIDB4MEZFQiwgMHg4Q0M3LCAweDA4QkYsIDB4OENDOCwgMHgxQTZDLA0KLSAgICAweDhDQ0EsIDB4MEIxMSwgMHg4Q0NELCAweDFBN0QsIDB4OENDRSwgMHgwQUFBLCAweDhDRDEsIDB4MENEMCwNCi0gICAgMHg4Q0QzLCAweDBEQzIsIDB4OENEOSwgMHgzQjMyLCAweDhDREEsIDB4MUE3MCwgMHg4Q0RCLCAweDA4OEQsDQotICAgIDB4OENEQywgMHgwOEMwLCAweDhDREUsIDB4MDlDNiwgMHg4Q0UwLCAweDBEMUIsIDB4OENFMSwgMHgzQjMzLA0KLSAgICAweDhDRTIsIDB4MDc2MSwgMHg4Q0UzLCAweDFBNkYsIDB4OENFNCwgMHgxQTZFLCAweDhDRTYsIDB4MEREQywNCi0gICAgMHg4Q0VBLCAweDA4RUQsIDB4OENFRCwgMHgwQzRDLCAweDhDRjAsIDB4MjFCMiwgMHg4Q0Y0LCAweDIxQjMsDQotICAgIDB4OENGOCwgMHgzQjM0LCAweDhDRkEsIDB4MUE3MiwgMHg4Q0ZCLCAweDFBNzMsIDB4OENGQywgMHgwN0VBLA0KLSAgICAweDhDRkQsIDB4MUE3MSwgMHg4Q0ZFLCAweDNCMzUsIDB4OEQwNCwgMHgxQTc0LCAweDhEMDUsIDB4MUE3NSwNCi0gICAgMHg4RDA3LCAweDFBNzcsIDB4OEQwOCwgMHgwQjAzLCAweDhEMEEsIDB4MUE3NiwgMHg4RDBCLCAweDA2MjIsDQotICAgIDB4OEQwRCwgMHgxQTc5LCAweDhEMEYsIDB4MUE3OCwgMHg4RDEwLCAweDFBN0EsIDB4OEQxMiwgMHgyMUI0LA0KLSAgICAweDhEMTMsIDB4MUE3QywgMHg4RDE0LCAweDFBN0UsIDB4OEQxNiwgMHgxQTdGLCAweDhEMUIsIDB4M0IzNiwNCi0gICAgMHg4RDY0LCAweDBBN0EsIDB4OEQ2NiwgMHgwOEZCLCAweDhENjcsIDB4MUE4MCwgMHg4RDY5LCAweDNCMzcsDQotICAgIDB4OEQ2QiwgMHgwNUIwLCAweDhENkMsIDB4M0IzOCwgMHg4RDZELCAweDFBODEsIDB4OEQ3MCwgMHgwQUY4LA0KLSAgICAweDhENzEsIDB4MUE4MiwgMHg4RDczLCAweDFBODMsIDB4OEQ3NCwgMHgwRERELCAweDhENzYsIDB4MjFCNSwNCi0gICAgMHg4RDc3LCAweDA2NDksIDB4OEQ4MSwgMHgxQTg0LCAweDhEODQsIDB4M0IzOSwgMHg4RDg1LCAweDBCRDIsDQotICAgIDB4OEQ4QSwgMHgwNEZELCAweDhEOEQsIDB4M0IzQSwgMHg4RDk1LCAweDNCM0IsIDB4OEQ5OSwgMHgxQTg1LA0KLSAgICAweDhEQTMsIDB4MDkxRCwgMHg4REE2LCAweDNCM0MsIDB4OERBOCwgMHgwQTNDLCAweDhEQjMsIDB4MEIwRCwNCi0gICAgMHg4REJBLCAweDFBODgsIDB4OERCRSwgMHgxQTg3LCAweDhEQzIsIDB4MUE4NiwgMHg4REM2LCAweDNCM0QsDQotICAgIDB4OERDQiwgMHgxQThFLCAweDhEQ0MsIDB4MUE4QywgMHg4RENFLCAweDNCM0UsIDB4OERDRiwgMHgxQTg5LA0KLSAgICAweDhERDYsIDB4MUE4QiwgMHg4RERBLCAweDFBOEEsIDB4OEREQiwgMHgxQThELCAweDhEREQsIDB4MDY5MSwNCi0gICAgMHg4RERGLCAweDFBOTEsIDB4OERFMSwgMHgwQTdCLCAweDhERTMsIDB4MUE5MiwgMHg4REU0LCAweDNCM0YsDQotICAgIDB4OERFOCwgMHgwNzhELCAweDhERUEsIDB4MUE4RiwgMHg4REVCLCAweDFBOTAsIDB4OERFQywgMHgzQjQwLA0KLSAgICAweDhERUYsIDB4MEZDRiwgMHg4REYzLCAweDBCRDMsIDB4OERGNSwgMHgwQUFCLCAweDhERkMsIDB4MUE5MywNCi0gICAgMHg4REZGLCAweDFBOTYsIDB4OEUwOCwgMHgxQTk0LCAweDhFMDksIDB4MUE5NSwgMHg4RTBBLCAweDBGNDMsDQotICAgIDB4OEUwRiwgMHgwQzdGLCAweDhFMTAsIDB4MUE5OSwgMHg4RTFELCAweDFBOTcsIDB4OEUxRSwgMHgxQTk4LA0KLSAgICAweDhFMUYsIDB4MUE5QSwgMHg4RTIwLCAweDNCNDEsIDB4OEUyQSwgMHgxQUE4LCAweDhFMzAsIDB4MUE5RCwNCi0gICAgMHg4RTM0LCAweDFBOUUsIDB4OEUzNSwgMHgxQTlDLCAweDhFNDIsIDB4MUE5QiwgMHg4RTQ0LCAweDBDMTksDQotICAgIDB4OEU0NywgMHgxQUEwLCAweDhFNDgsIDB4MUFBNCwgMHg4RTQ5LCAweDFBQTEsIDB4OEU0QSwgMHgxQTlGLA0KLSAgICAweDhFNEIsIDB4M0I0MiwgMHg4RTRDLCAweDFBQTIsIDB4OEU1MCwgMHgxQUEzLCAweDhFNTUsIDB4MUFBQSwNCi0gICAgMHg4RTU5LCAweDFBQTUsIDB4OEU1RiwgMHgwQTdDLCAweDhFNjAsIDB4MUFBNywgMHg4RTYzLCAweDFBQTksDQotICAgIDB4OEU2NCwgMHgxQUE2LCAweDhFNkMsIDB4M0I0MywgMHg4RTcwLCAweDNCNDQsIDB4OEU3MiwgMHgxQUFDLA0KLSAgICAweDhFNzQsIDB4MDkzRCwgMHg4RTc2LCAweDFBQUIsIDB4OEU3QSwgMHgzQjQ1LCAweDhFN0MsIDB4MUFBRCwNCi0gICAgMHg4RTgxLCAweDFBQUUsIDB4OEU4NCwgMHgxQUIxLCAweDhFODUsIDB4MUFCMCwgMHg4RTg3LCAweDFBQUYsDQotICAgIDB4OEU4QSwgMHgxQUIzLCAweDhFOEIsIDB4MUFCMiwgMHg4RThELCAweDBGMDIsIDB4OEU5MSwgMHgxQUI1LA0KLSAgICAweDhFOTIsIDB4M0I0NiwgMHg4RTkzLCAweDFBQjQsIDB4OEU5NCwgMHgxQUI2LCAweDhFOTksIDB4MUFCNywNCi0gICAgMHg4RUExLCAweDFBQjksIDB4OEVBQSwgMHgxQUI4LCAweDhFQUIsIDB4MEEwRSwgMHg4RUFDLCAweDFBQkEsDQotICAgIDB4OEVBRSwgMHgzQjQ3LCAweDhFQUYsIDB4MDZFNSwgMHg4RUIwLCAweDFBQkIsIDB4OEVCMSwgMHgxQUJELA0KLSAgICAweDhFQjMsIDB4M0I0OCwgMHg4RUI2LCAweDM3MDMsIDB4OEVCRSwgMHgxQUJFLCAweDhFQzAsIDB4MURFRiwNCi0gICAgMHg4RUM1LCAweDFBQkYsIDB4OEVDNiwgMHgxQUJDLCAweDhFQzgsIDB4MUFDMCwgMHg4RUNBLCAweDA5MDIsDQotICAgIDB4OEVDQiwgMHgxQUMxLCAweDhFQ0MsIDB4MDY0QSwgMHg4RUNELCAweDA3MDksIDB4OEVDRiwgMHgyMUI3LA0KLSAgICAweDhFRDEsIDB4M0I0OSwgMHg4RUQyLCAweDA3NjIsIDB4OEVENCwgMHgzQjRBLCAweDhFREIsIDB4MUFDMiwNCi0gICAgMHg4RURGLCAweDBDQzgsIDB4OEVFMiwgMHgwQzM4LCAweDhFRTMsIDB4MUFDMywgMHg4RUVCLCAweDFBQzYsDQotICAgIDB4OEVGOCwgMHgwOEUwLCAweDhFRjksIDB4M0I0QiwgMHg4RUZCLCAweDFBQzUsIDB4OEVGQywgMHgxQUM0LA0KLSAgICAweDhFRkQsIDB4MDczMCwgMHg4RUZFLCAweDFBQzcsIDB4OEYwMywgMHgwNUIxLCAweDhGMDUsIDB4MUFDOSwNCi0gICAgMHg4RjA5LCAweDA4NEMsIDB4OEYwQSwgMHgxQUM4LCAweDhGMEMsIDB4MUFEMSwgMHg4RjEyLCAweDFBQ0IsDQotICAgIDB4OEYxMywgMHgxQUNELCAweDhGMTQsIDB4MEUzNSwgMHg4RjE1LCAweDFBQ0EsIDB4OEYxNywgMHgzQjRDLA0KLSAgICAweDhGMTksIDB4MUFDQywgMHg4RjFCLCAweDFBRDAsIDB4OEYxQywgMHgxQUNFLCAweDhGMUQsIDB4MDY0QiwNCi0gICAgMHg4RjFGLCAweDFBQ0YsIDB4OEYyNiwgMHgxQUQyLCAweDhGMjksIDB4MEQxMCwgMHg4RjJBLCAweDBGQTAsDQotICAgIDB4OEYyRiwgMHgwOTNFLCAweDhGMzMsIDB4MUFEMywgMHg4RjM2LCAweDNCNEQsIDB4OEYzOCwgMHgwRjBDLA0KLSAgICAweDhGMzksIDB4MUFENSwgMHg4RjNCLCAweDFBRDQsIDB4OEYzRSwgMHgxQUQ4LCAweDhGM0YsIDB4MEYyQiwNCi0gICAgMHg4RjQyLCAweDFBRDcsIDB4OEY0NCwgMHgwNUNCLCAweDhGNDUsIDB4MUFENiwgMHg4RjQ2LCAweDFBREIsDQotICAgIDB4OEY0OSwgMHgxQURBLCAweDhGNEMsIDB4MUFEOSwgMHg4RjRELCAweDBDMkMsIDB4OEY0RSwgMHgxQURDLA0KLSAgICAweDhGNTcsIDB4MUFERCwgMHg4RjVDLCAweDFBREUsIDB4OEY1RiwgMHgwN0ZFLCAweDhGNjEsIDB4MDZGQiwNCi0gICAgMHg4RjYyLCAweDFBREYsIDB4OEY2MywgMHgxQUUwLCAweDhGNjQsIDB4MUFFMSwgMHg4RjlCLCAweDBBMEYsDQotICAgIDB4OEY5QywgMHgxQUUyLCAweDhGOUUsIDB4MDhEOSwgMHg4RjlGLCAweDFBRTMsIDB4OEZBMywgMHgxQUU0LA0KLSAgICAweDhGQTYsIDB4M0I0RSwgMHg4RkE3LCAweDEwQjYsIDB4OEZBOCwgMHgxMEI1LCAweDhGQUQsIDB4MUFFNSwNCi0gICAgMHg4RkFFLCAweDE3RkYsIDB4OEZBRiwgMHgxQUU2LCAweDhGQjAsIDB4MEI2MiwgMHg4RkIxLCAweDA5RjEsDQotICAgIDB4OEZCMiwgMHgwQ0Y2LCAweDhGQjUsIDB4M0I0RiwgMHg4RkI2LCAweDNCNTAsIDB4OEZCNywgMHgxQUU3LA0KLSAgICAweDhGQkEsIDB4MEUyNSwgMHg4RkJCLCAweDBCRjAsIDB4OEZCQywgMHgwODEwLCAweDhGQkYsIDB4MEI2NywNCi0gICAgMHg4RkMyLCAweDA0Q0MsIDB4OEZDNCwgMHgwRUE2LCAweDhGQzUsIDB4MEExRCwgMHg4RkM2LCAweDNCNTEsDQotICAgIDB4OEZDOCwgMHgzNzk5LCAweDhGQ0UsIDB4MDczNCwgMHg4RkQxLCAweDA2RDksIDB4OEZENCwgMHgwRTI2LA0KLSAgICAweDhGREEsIDB4MUFFOCwgMHg4RkUwLCAweDNCNTIsIDB4OEZFMiwgMHgxQUVBLCAweDhGRTQsIDB4M0I1MywNCi0gICAgMHg4RkU1LCAweDFBRTksIDB4OEZFNiwgMHgwNTYwLCAweDhGRTksIDB4MENDRSwgMHg4RkVBLCAweDFBRUIsDQotICAgIDB4OEZFQiwgMHgwRDJELCAweDhGRUQsIDB4MEMyRCwgMHg4RkVGLCAweDFBRUMsIDB4OEZGMCwgMHgwOTVDLA0KLSAgICAweDhGRjQsIDB4MUFFRSwgMHg4RkY2LCAweDNCNTQsIDB4OEZGNywgMHgwRUNFLCAweDhGRjgsIDB4MUFGRCwNCi0gICAgMHg4RkY5LCAweDFBRjAsIDB4OEZGQSwgMHgxQUYxLCAweDhGRkQsIDB4MEJFNSwgMHg5MDAwLCAweDBCNDAsDQotICAgIDB4OTAwMSwgMHgwQUY5LCAweDkwMDIsIDB4M0I1NSwgMHg5MDAzLCAweDBDODAsIDB4OTAwNSwgMHgxQUVGLA0KLSAgICAweDkwMDYsIDB4MDY2RiwgMHg5MDBCLCAweDFBRjgsIDB4OTAwRCwgMHgxQUY1LCAweDkwMEUsIDB4MUIwMiwNCi0gICAgMHg5MDBGLCAweDBDODEsIDB4OTAxMCwgMHgwQjlFLCAweDkwMTEsIDB4MUFGMiwgMHg5MDEzLCAweDBDMUEsDQotICAgIDB4OTAxNCwgMHgwQzRELCAweDkwMTUsIDB4MUFGMywgMHg5MDE2LCAweDFBRjcsIDB4OTAxNywgMHgwQTI2LA0KLSAgICAweDkwMTksIDB4MEQxRCwgMHg5MDFBLCAweDBCRTgsIDB4OTAxRCwgMHgwQTY2LCAweDkwMUUsIDB4MUFGNiwNCi0gICAgMHg5MDFGLCAweDBCMEUsIDB4OTAyMCwgMHgwQjA0LCAweDkwMjEsIDB4MUFGNCwgMHg5MDIyLCAweDA0NkQsDQotICAgIDB4OTAyMywgMHgwRkM4LCAweDkwMjcsIDB4MUFGOSwgMHg5MDJDLCAweDNCNTYsIDB4OTAyRSwgMHgwQjQxLA0KLSAgICAweDkwMzEsIDB4MDkzRiwgMHg5MDMyLCAweDBBMTAsIDB4OTAzNSwgMHgxQUZCLCAweDkwMzYsIDB4MUFGQSwNCi0gICAgMHg5MDM4LCAweDA0QjMsIDB4OTAzOSwgMHgxQUZDLCAweDkwM0MsIDB4MERBMSwgMHg5MDNFLCAweDFCMDQsDQotICAgIDB4OTA0MSwgMHgwQ0IzLCAweDkwNDIsIDB4MEEzMSwgMHg5MDQ0LCAweDNCNTcsIDB4OTA0NSwgMHgwQjk3LA0KLSAgICAweDkwNDcsIDB4MDZGMCwgMHg5MDQ5LCAweDFCMDMsIDB4OTA0QSwgMHgwRjIxLCAweDkwNEIsIDB4MDRFMSwNCi0gICAgMHg5MDRELCAweDBFMjcsIDB4OTA0RSwgMHgwNTYxLCAweDkwNEYsIDB4MUFGRSwgMHg5MDUwLCAweDFBRkYsDQotICAgIDB4OTA1MSwgMHgxQjAwLCAweDkwNTIsIDB4MUIwMSwgMHg5MDUzLCAweDBDOTMsIDB4OTA1NCwgMHgwQjYxLA0KLSAgICAweDkwNTUsIDB4MDRBNywgMHg5MDU2LCAweDFCMDUsIDB4OTA1OCwgMHgxQjA2LCAweDkwNTksIDB4MUQzNCwNCi0gICAgMHg5MDVDLCAweDBCMUQsIDB4OTA1RSwgMHgxQjA3LCAweDkwNjAsIDB4MDUxNSwgMHg5MDYxLCAweDBBQ0UsDQotICAgIDB4OTA2MywgMHgwNzYzLCAweDkwNjUsIDB4MEY0NCwgMHg5MDY3LCAweDIxQkEsIDB4OTA2OCwgMHgxQjA4LA0KLSAgICAweDkwNjksIDB4MEMyNiwgMHg5MDZELCAweDBBRkEsIDB4OTA2RSwgMHgwOTAzLCAweDkwNkYsIDB4MUIwOSwNCi0gICAgMHg5MDcyLCAweDFCMEMsIDB4OTA3NSwgMHgwOTZGLCAweDkwNzYsIDB4MUIwQSwgMHg5MDc3LCAweDBBQUQsDQotICAgIDB4OTA3OCwgMHgwQUFDLCAweDkwN0EsIDB4MDRBOCwgMHg5MDdDLCAweDBGOTMsIDB4OTA3RCwgMHgxQjBFLA0KLSAgICAweDkwN0YsIDB4MEQ4NiwgMHg5MDgwLCAweDFCMTAsIDB4OTA4MSwgMHgxQjBGLCAweDkwODIsIDB4MUIwRCwNCi0gICAgMHg5MDgzLCAweDE3MzcsIDB4OTA4NCwgMHgwNjEwLCAweDkwODcsIDB4MUFFRCwgMHg5MDg4LCAweDNCNTgsDQotICAgIDB4OTA4OSwgMHgxQjEyLCAweDkwOEEsIDB4MUIxMSwgMHg5MDhGLCAweDFCMTMsIDB4OTA5MSwgMHgwRjIyLA0KLSAgICAweDkwOTUsIDB4M0I1OSwgMHg5MDk5LCAweDNCNUEsIDB4OTA5QiwgMHgzQjVCLCAweDkwQTIsIDB4M0I1QywNCi0gICAgMHg5MEEzLCAweDBDQjksIDB4OTBBNiwgMHgwRTVDLCAweDkwQTgsIDB4MUIxNCwgMHg5MEFBLCAweDA5MDUsDQotICAgIDB4OTBBRiwgMHgxQjE1LCAweDkwQjEsIDB4MUIxNiwgMHg5MEI0LCAweDNCNUQsIDB4OTBCNSwgMHgxQjE3LA0KLSAgICAweDkwQjgsIDB4MEMxQiwgMHg5MEMxLCAweDA0QUUsIDB4OTBDQSwgMHgwN0VCLCAweDkwQ0UsIDB4MEZFMCwNCi0gICAgMHg5MEQ3LCAweDNCNUUsIDB4OTBEQiwgMHgxQjFCLCAweDkwREQsIDB4M0I1RiwgMHg5MERFLCAweDIxQkIsDQotICAgIDB4OTBFMSwgMHgwNzBBLCAweDkwRTIsIDB4MUIxOCwgMHg5MEU0LCAweDFCMTksIDB4OTBFOCwgMHgwREU2LA0KLSAgICAweDkwRUQsIDB4MDVCMiwgMHg5MEY0LCAweDNCNjAsIDB4OTBGNSwgMHgwRjIzLCAweDkwRjcsIDB4MDZCNywNCi0gICAgMHg5MEZELCAweDBDNEUsIDB4OTEwMiwgMHgxQjFDLCAweDkxMTIsIDB4MUIxRCwgMHg5MTE1LCAweDIxQkQsDQotICAgIDB4OTExNywgMHgzQjYxLCAweDkxMTksIDB4MUIxRSwgMHg5MTFDLCAweDNCNjIsIDB4OTEyNywgMHgyMUJFLA0KLSAgICAweDkxMkQsIDB4MEMxQywgMHg5MTMwLCAweDFCMjAsIDB4OTEzMSwgMHgzQjYzLCAweDkxMzIsIDB4MUIxRiwNCi0gICAgMHg5MTNBLCAweDNCNjQsIDB4OTEzRCwgMHgzQjY1LCAweDkxNDgsIDB4M0I2NiwgMHg5MTQ5LCAweDBDQUIsDQotICAgIDB4OTE0QSwgMHgxQjIxLCAweDkxNEIsIDB4MDk0MCwgMHg5MTRDLCAweDA5MEMsIDB4OTE0RCwgMHgwRDExLA0KLSAgICAweDkxNEUsIDB4MEJBRiwgMHg5MTUyLCAweDA5MUUsIDB4OTE1NCwgMHgwQTMyLCAweDkxNTYsIDB4MUIyMiwNCi0gICAgMHg5MTU4LCAweDFCMjMsIDB4OTE1QiwgMHgzQjY3LCAweDkxNjEsIDB4M0I2OCwgMHg5MTYyLCAweDBBMjMsDQotICAgIDB4OTE2MywgMHgxQjI0LCAweDkxNjQsIDB4M0I2OSwgMHg5MTY1LCAweDFCMjUsIDB4OTE2OSwgMHgxQjI2LA0KLSAgICAweDkxNkEsIDB4MEY1OSwgMHg5MTZDLCAweDA5NDEsIDB4OTE3MiwgMHgxQjI4LCAweDkxNzMsIDB4MUIyNywNCi0gICAgMHg5MTc1LCAweDA3RUMsIDB4OTE3NywgMHgwODA1LCAweDkxNzgsIDB4MDg4RSwgMHg5MTgyLCAweDFCMkIsDQotICAgIDB4OTE4NywgMHgwOTcwLCAweDkxODksIDB4MUIyQSwgMHg5MThCLCAweDFCMjksIDB4OTE4RCwgMHgwQjQ5LA0KLSAgICAweDkxOEUsIDB4M0I2QSwgMHg5MTkwLCAweDA3QTMsIDB4OTE5MiwgMHgwQTY3LCAweDkxOTcsIDB4MEQ0NCwNCi0gICAgMHg5MTlDLCAweDA5NDMsIDB4OTE5RSwgMHgzQjZCLCAweDkxQTIsIDB4MUIyQywgMHg5MUE0LCAweDA5QzcsDQotICAgIDB4OTFBOCwgMHgzQjZDLCAweDkxQUEsIDB4MUIyRiwgMHg5MUFCLCAweDFCMkQsIDB4OTFBQywgMHgxRTFCLA0KLSAgICAweDkxQUQsIDB4M0I2RCwgMHg5MUFFLCAweDNCNkUsIDB4OTFBRiwgMHgxQjJFLCAweDkxQjEsIDB4MUU2MSwNCi0gICAgMHg5MUIyLCAweDNCNkYsIDB4OTFCNCwgMHgxQjMxLCAweDkxQjUsIDB4MUIzMCwgMHg5MUI4LCAweDA5RTIsDQotICAgIDB4OTFCQSwgMHgxQjMyLCAweDkxQkMsIDB4M0I3MCwgMHg5MUMwLCAweDFCMzMsIDB4OTFDMSwgMHgxQjM0LA0KLSAgICAweDkxQzYsIDB4MEQ2NCwgMHg5MUM3LCAweDA4NDMsIDB4OTFDOCwgMHgwOTBELCAweDkxQzksIDB4MUIzNSwNCi0gICAgMHg5MUNCLCAweDFCMzYsIDB4OTFDQywgMHgwRjZDLCAweDkxQ0QsIDB4MDk0RiwgMHg5MUNFLCAweDBFRkEsDQotICAgIDB4OTFDRiwgMHgwRjk0LCAweDkxRDAsIDB4MUIzNywgMHg5MUQxLCAweDA2REEsIDB4OTFENiwgMHgxQjM4LA0KLSAgICAweDkxRDcsIDB4MjFDMCwgMHg5MUQ4LCAweDBDMUQsIDB4OTFEQSwgMHgyMUJGLCAweDkxREIsIDB4MUIzQiwNCi0gICAgMHg5MURDLCAweDA1RDYsIDB4OTFERCwgMHgwQTExLCAweDkxREUsIDB4MjFDMSwgMHg5MURGLCAweDFCMzksDQotICAgIDB4OTFFMSwgMHgxQjNBLCAweDkxRTMsIDB4MEJGQywgMHg5MUU0LCAweDIxQzQsIDB4OTFFNSwgMHgyMUM1LA0KLSAgICAweDkxRTYsIDB4MEU4MywgMHg5MUU3LCAweDA2RjQsIDB4OTFFRCwgMHgyMUMyLCAweDkxRUUsIDB4MjFDMywNCi0gICAgMHg5MUYwLCAweDNCNzEsIDB4OTFGNSwgMHgxQjNELCAweDkxRjYsIDB4MUIzRSwgMHg5MUY3LCAweDNCNzIsDQotICAgIDB4OTFGQiwgMHgzQjczLCAweDkxRkMsIDB4MUIzQywgMHg5MUZGLCAweDFCNDAsIDB4OTIwNiwgMHgyMUM2LA0KLSAgICAweDkyMDcsIDB4M0I3NCwgMHg5MjBBLCAweDIxQzgsIDB4OTIwRCwgMHgwQ0I3LCAweDkyMEUsIDB4MDVBMSwNCi0gICAgMHg5MjEwLCAweDIxQzcsIDB4OTIxMSwgMHgxQjQ0LCAweDkyMTQsIDB4MUI0MSwgMHg5MjE1LCAweDFCNDMsDQotICAgIDB4OTIxRSwgMHgxQjNGLCAweDkyMjgsIDB4M0I3NSwgMHg5MjI5LCAweDFCOEEsIDB4OTIyQywgMHgxQjQyLA0KLSAgICAweDkyMzMsIDB4M0I3NiwgMHg5MjM0LCAweDBGQjMsIDB4OTIzNywgMHgwNzhFLCAweDkyMzgsIDB4M0I3NywNCi0gICAgMHg5MjM5LCAweDIxQ0YsIDB4OTIzQSwgMHgyMUM5LCAweDkyM0MsIDB4MjFDQiwgMHg5MjNGLCAweDFCNEMsDQotICAgIDB4OTI0MCwgMHgyMUNBLCAweDkyNDMsIDB4M0I3OCwgMHg5MjQ0LCAweDBDMkUsIDB4OTI0NSwgMHgxQjQ3LA0KLSAgICAweDkyNDcsIDB4M0I3OSwgMHg5MjQ4LCAweDFCNEEsIDB4OTI0OSwgMHgxQjQ4LCAweDkyNEIsIDB4MUI0RCwNCi0gICAgMHg5MjRFLCAweDIxQ0MsIDB4OTI0RiwgMHgzQjdBLCAweDkyNTAsIDB4MUI0RSwgMHg5MjUxLCAweDIxQ0UsDQotICAgIDB4OTI1NywgMHgxQjQ2LCAweDkyNTksIDB4MjFDRCwgMHg5MjVBLCAweDFCNTMsIDB4OTI1QiwgMHgwNTE2LA0KLSAgICAweDkyNUUsIDB4MUI0NSwgMHg5MjYwLCAweDNCN0IsIDB4OTI2MiwgMHgwRDQxLCAweDkyNjQsIDB4MUI0OSwNCi0gICAgMHg5MjY2LCAweDA5QzgsIDB4OTI2NywgMHgyMUQwLCAweDkyNzEsIDB4MDdFRCwgMHg5Mjc3LCAweDIxRDIsDQotICAgIDB4OTI3OCwgMHgyMUQzLCAweDkyN0UsIDB4MEU3NiwgMHg5MjgwLCAweDA2REMsIDB4OTI4MywgMHgwOTUwLA0KLSAgICAweDkyODUsIDB4MEM5NCwgMHg5Mjg4LCAweDIwQUEsIDB4OTI5MSwgMHgwQUFGLCAweDkyOTMsIDB4MUI1MSwNCi0gICAgMHg5Mjk1LCAweDFCNEIsIDB4OTI5NiwgMHgxQjUwLCAweDkyOTgsIDB4MEVDRiwgMHg5MjlBLCAweDBCRDQsDQotICAgIDB4OTI5QiwgMHgxQjUyLCAweDkyOUMsIDB4MUI0RiwgMHg5MkE3LCAweDIxRDEsIDB4OTJBRCwgMHgwQUFFLA0KLSAgICAweDkyQjMsIDB4MzU1NCwgMHg5MkI3LCAweDFCNTYsIDB4OTJCOSwgMHgxQjU1LCAweDkyQzIsIDB4M0I3QywNCi0gICAgMHg5MkNCLCAweDNCN0QsIDB4OTJDQywgMHgzQjdFLCAweDkyQ0YsIDB4MUI1NCwgMHg5MkQwLCAweDIxRDcsDQotICAgIDB4OTJEMiwgMHgwRTVELCAweDkyRDMsIDB4MjFEQiwgMHg5MkQ1LCAweDIxRDksIDB4OTJENywgMHgyMUQ1LA0KLSAgICAweDkyRDksIDB4MjFENiwgMHg5MkRGLCAweDNCN0YsIDB4OTJFMCwgMHgyMURBLCAweDkyRTQsIDB4MDk4NSwNCi0gICAgMHg5MkU3LCAweDIxRDQsIDB4OTJFOSwgMHgxQjU3LCAweDkyRUEsIDB4MEUyRiwgMHg5MkVELCAweDA0RjYsDQotICAgIDB4OTJGMiwgMHgwREI4LCAweDkyRjMsIDB4MEJCMCwgMHg5MkY4LCAweDA2OTIsIDB4OTJGOSwgMHgyMEIwLA0KLSAgICAweDkyRkEsIDB4MUI1OSwgMHg5MkZCLCAweDIxREUsIDB4OTJGQywgMHgwN0VGLCAweDkyRkYsIDB4MjFFMSwNCi0gICAgMHg5MzAyLCAweDIxRTMsIDB4OTMwNCwgMHgzNDVBLCAweDkzMDYsIDB4MDg3QSwgMHg5MzBELCAweDNCODAsDQotICAgIDB4OTMwRiwgMHgxQjU4LCAweDkzMTAsIDB4MEEzMywgMHg5MzE1LCAweDNCODEsIDB4OTMxOCwgMHgwQTM0LA0KLSAgICAweDkzMTksIDB4MUI1QywgMHg5MzFBLCAweDFCNUUsIDB4OTMxRCwgMHgyMUUyLCAweDkzMUUsIDB4MjFFMCwNCi0gICAgMHg5MzFGLCAweDNCODIsIDB4OTMyMCwgMHgwOUUzLCAweDkzMjEsIDB4MjFERCwgMHg5MzIyLCAweDFCNUQsDQotICAgIDB4OTMyMywgMHgxQjVGLCAweDkzMjUsIDB4MjFEQywgMHg5MzI2LCAweDA2Q0IsIDB4OTMyNywgMHgzQjgzLA0KLSAgICAweDkzMjgsIDB4MERCNywgMHg5MzJCLCAweDA5MEUsIDB4OTMyQywgMHgwRkM5LCAweDkzMkUsIDB4MUI1QiwNCi0gICAgMHg5MzJGLCAweDA4NjgsIDB4OTMzMiwgMHgwRkU1LCAweDkzMzUsIDB4MUI2MSwgMHg5MzNBLCAweDFCNjAsDQotICAgIDB4OTMzQiwgMHgxQjYyLCAweDkzNDQsIDB4MUI1QSwgMHg5MzQ3LCAweDNCODQsIDB4OTM0OCwgMHgyMEE5LA0KLSAgICAweDkzNEEsIDB4MzQ1OCwgMHg5MzRCLCAweDBDQzEsIDB4OTM0RCwgMHgwQzRGLCAweDkzNTIsIDB4M0I4NSwNCi0gICAgMHg5MzU0LCAweDBCRjMsIDB4OTM1NiwgMHgxQjY3LCAweDkzNTcsIDB4MjFFNSwgMHg5MzVCLCAweDBCODEsDQotICAgIDB4OTM1QywgMHgxQjYzLCAweDkzNjAsIDB4MUI2NCwgMHg5MzY1LCAweDNCODYsIDB4OTM2QSwgMHgzQjg3LA0KLSAgICAweDkzNkMsIDB4MDcwMywgMHg5MzZELCAweDNCODgsIDB4OTM2RSwgMHgxQjY2LCAweDkzNzAsIDB4MjFFNCwNCi0gICAgMHg5Mzc1LCAweDA3NjQsIDB4OTM3QywgMHgxQjY1LCAweDkzN0UsIDB4MDlDOSwgMHg5MzhDLCAweDA1RDcsDQotICAgIDB4OTM5NCwgMHgxQjZCLCAweDkzOTYsIDB4MDgyRiwgMHg5Mzk3LCAweDBBRkIsIDB4OTM5QSwgMHgwQkU2LA0KLSAgICAweDkzOUIsIDB4M0I4OSwgMHg5M0E0LCAweDIxRTYsIDB4OTNBNywgMHgwNTk5LCAweDkzQTksIDB4M0I4QiwNCi0gICAgMHg5M0FDLCAweDFCNjksIDB4OTNBRCwgMHgxQjZBLCAweDkzQUUsIDB4MEJERiwgMHg5M0IwLCAweDFCNjgsDQotICAgIDB4OTNCOSwgMHgxQjZDLCAweDkzQkEsIDB4M0I4QSwgMHg5M0MxLCAweDNCOEMsIDB4OTNDMywgMHgxQjcyLA0KLSAgICAweDkzQzYsIDB4MjFFNywgMHg5M0M4LCAweDFCNzUsIDB4OTNDQSwgMHgzQjhELCAweDkzRDAsIDB4MUI3NCwNCi0gICAgMHg5M0QxLCAweDBDMjcsIDB4OTNENiwgMHgxQjZELCAweDkzRDcsIDB4MUI2RSwgMHg5M0Q4LCAweDFCNzEsDQotICAgIDB4OTNERCwgMHgxQjczLCAweDkzREUsIDB4MjFFOCwgMHg5M0UxLCAweDA2QjgsIDB4OTNFMiwgMHgzQjhFLA0KLSAgICAweDkzRTQsIDB4MUI3NiwgMHg5M0U1LCAweDFCNzAsIDB4OTNFOCwgMHgxQjZGLCAweDkzRjgsIDB4MjFFOSwNCi0gICAgMHg5M0ZBLCAweDNCOEYsIDB4OTNGRCwgMHgzQjkwLCAweDk0MDMsIDB4MUI3QSwgMHg5NDA3LCAweDFCN0IsDQotICAgIDB4OTQwRiwgMHgzQjkxLCAweDk0MTAsIDB4MUI3QywgMHg5NDEzLCAweDFCNzksIDB4OTQxNCwgMHgxQjc4LA0KLSAgICAweDk0MTgsIDB4MDlDQSwgMHg5NDE5LCAweDBDODIsIDB4OTQxQSwgMHgxQjc3LCAweDk0MjEsIDB4MUI4MCwNCi0gICAgMHg5NDJCLCAweDFCN0UsIDB4OTQzMSwgMHgyMUVBLCAweDk0MzQsIDB4M0I5MiwgMHg5NDM1LCAweDFCN0YsDQotICAgIDB4OTQzNiwgMHgxQjdELCAweDk0MzgsIDB4MEI1OCwgMHg5NDNBLCAweDFCODEsIDB4OTQzRiwgMHgzQjkzLA0KLSAgICAweDk0NDEsIDB4MUI4MiwgMHg5NDQ0LCAweDFCODQsIDB4OTQ0NSwgMHgyMUVCLCAweDk0NDgsIDB4MjFFQywNCi0gICAgMHg5NDUxLCAweDA2MTEsIDB4OTQ1MiwgMHgxQjgzLCAweDk0NTMsIDB4MEYwNiwgMHg5NDU1LCAweDNCOTQsDQotICAgIDB4OTQ1QSwgMHgxQjhGLCAweDk0NUIsIDB4MUI4NSwgMHg5NDVFLCAweDFCODgsIDB4OTQ2MCwgMHgxQjg2LA0KLSAgICAweDk0NjIsIDB4MUI4NywgMHg5NDZBLCAweDFCODksIDB4OTQ2QiwgMHgzQjk1LCAweDk0NzAsIDB4MUI4QiwNCi0gICAgMHg5NDcyLCAweDNCOTYsIDB4OTQ3NSwgMHgxQjhDLCAweDk0NzcsIDB4MUI4RCwgMHg5NDdDLCAweDFCOTAsDQotICAgIDB4OTQ3RCwgMHgxQjhFLCAweDk0N0UsIDB4MUI5MSwgMHg5NDdGLCAweDFCOTMsIDB4OTQ4MSwgMHgxQjkyLA0KLSAgICAweDk1NzcsIDB4MEJENSwgMHg5NTc4LCAweDNCOTcsIDB4OTU4MCwgMHgwRUYzLCAweDk1ODIsIDB4MUI5NCwNCi0gICAgMHg5NTgzLCAweDBBQjAsIDB4OTU4NywgMHgxQjk1LCAweDk1ODksIDB4MEUxNCwgMHg5NThBLCAweDFCOTYsDQotICAgIDB4OTU4QiwgMHgwNTg5LCAweDk1OEYsIDB4MDRERSwgMHg5NTkxLCAweDA2MTMsIDB4OTU5MiwgMHgyMUVELA0KLSAgICAweDk1OTMsIDB4MDYxMiwgMHg5NTk0LCAweDFCOTcsIDB4OTU5NiwgMHgxQjk4LCAweDk1OTgsIDB4MUI5OSwNCi0gICAgMHg5NTk5LCAweDFCOUEsIDB4OTVBMCwgMHgxQjlCLCAweDk1QTIsIDB4MDYxNCwgMHg5NUEzLCAweDA1QjMsDQotICAgIDB4OTVBNCwgMHgwN0YwLCAweDk1QTUsIDB4MEQ0QSwgMHg5NUE2LCAweDNCOTgsIDB4OTVBNywgMHgxQjlELA0KLSAgICAweDk1QTgsIDB4MUI5QywgMHg5NUE5LCAweDNCOTksIDB4OTVBQiwgMHgzQjlBLCAweDk1QUQsIDB4MUI5RSwNCi0gICAgMHg5NUIxLCAweDM1NTUsIDB4OTVCMiwgMHgwNEZFLCAweDk1QjQsIDB4M0I5QiwgMHg5NUI5LCAweDFCQTEsDQotICAgIDB4OTVCQiwgMHgxQkEwLCAweDk1QkMsIDB4MUI5RiwgMHg5NUJELCAweDNCOUMsIDB4OTVCRSwgMHgxQkEyLA0KLSAgICAweDk1QzMsIDB4MUJBNSwgMHg5NUM3LCAweDA0OEIsIDB4OTVDQSwgMHgxQkEzLCAweDk1Q0MsIDB4MUJBNywNCi0gICAgMHg5NUNELCAweDFCQTYsIDB4OTVENCwgMHgxQkE5LCAweDk1RDUsIDB4MUJBOCwgMHg5NUQ2LCAweDFCQUEsDQotICAgIDB4OTVEOCwgMHgwQzg2LCAweDk1REEsIDB4M0I5RCwgMHg5NURDLCAweDFCQUIsIDB4OTVFMSwgMHgxQkFDLA0KLSAgICAweDk1RTIsIDB4MUJBRSwgMHg5NUU1LCAweDFCQUQsIDB4OTYxQywgMHgwRERFLCAweDk2MUQsIDB4M0I5RSwNCi0gICAgMHg5NjIxLCAweDFCQUYsIDB4OTYyOCwgMHgxQkIwLCAweDk2MkEsIDB4MDg1NSwgMHg5NjJFLCAweDFCQjEsDQotICAgIDB4OTYyRiwgMHgxQkIyLCAweDk2MzIsIDB4MEU3NywgMHg5NjNCLCAweDBBQ0QsIDB4OTYzRiwgMHgwNDY4LA0KLSAgICAweDk2NDAsIDB4MEIyQiwgMHg5NjQxLCAweDNCOUYsIDB4OTY0MiwgMHgxQkIzLCAweDk2NDQsIDB4MERERiwNCi0gICAgMHg5NjRCLCAweDFCQjYsIDB4OTY0QywgMHgxQkI0LCAweDk2NEQsIDB4MDdGMSwgMHg5NjRGLCAweDFCQjUsDQotICAgIDB4OTY1MCwgMHgwNzc2LCAweDk2NTgsIDB4M0JBMCwgMHg5NjVCLCAweDBFMTUsIDB4OTY1QywgMHgxQkI4LA0KLSAgICAweDk2NUQsIDB4MUJCQSwgMHg5NjVFLCAweDFCQjksIDB4OTY1RiwgMHgxQkJCLCAweDk2NjIsIDB4MDRDMywNCi0gICAgMHg5NjYzLCAweDBBMUUsIDB4OTY2NCwgMHgwOTg2LCAweDk2NjUsIDB4MDYxNSwgMHg5NjY2LCAweDFCQkMsDQotICAgIDB4OTY2QSwgMHgwRDFDLCAweDk2NkMsIDB4MUJCRSwgMHg5NjcwLCAweDA0QzQsIDB4OTY3MiwgMHgxQkJELA0KLSAgICAweDk2NzMsIDB4MEJFMCwgMHg5Njc1LCAweDBGOTUsIDB4OTY3NiwgMHgwQzgzLCAweDk2NzcsIDB4MUJCNywNCi0gICAgMHg5Njc4LCAweDBGNkUsIDB4OTY3QSwgMHgwNzY1LCAweDk2N0QsIDB4MEY0NSwgMHg5Njg0LCAweDNCQTEsDQotICAgIDB4OTY4NSwgMHgwNkYxLCAweDk2ODYsIDB4MEY3QywgMHg5Njg4LCAweDA2RkUsIDB4OTY4QSwgMHgwQjQyLA0KLSAgICAweDk2OEIsIDB4MTg2QywgMHg5NjhELCAweDFCQkYsIDB4OTY4RSwgMHgwNThBLCAweDk2OEYsIDB4MEEzNSwNCi0gICAgMHg5Njk0LCAweDA1QjQsIDB4OTY5NSwgMHgxQkMxLCAweDk2OTcsIDB4MUJDMiwgMHg5Njk4LCAweDFCQzAsDQotICAgIDB4OTY5OSwgMHgwNzNBLCAweDk2OUIsIDB4MDg0RCwgMHg5NjlDLCAweDA5Q0IsIDB4OTY5RCwgMHgyMUYwLA0KLSAgICAweDk2QTAsIDB4MDRDNSwgMHg5NkEzLCAweDBGQTEsIDB4OTZBNCwgMHgzQkEyLCAweDk2QTcsIDB4MUJDNCwNCi0gICAgMHg5NkE4LCAweDFCMEIsIDB4OTZBOSwgMHgzQkEzLCAweDk2QUEsIDB4MUJDMywgMHg5NkFGLCAweDIxRjEsDQotICAgIDB4OTZCMCwgMHgxQkM3LCAweDk2QjEsIDB4MUJDNSwgMHg5NkIyLCAweDFCQzYsIDB4OTZCNCwgMHgxQkM4LA0KLSAgICAweDk2QjYsIDB4MUJDOSwgMHg5NkI3LCAweDBGQjQsIDB4OTZCOCwgMHgxQkNBLCAweDk2QjksIDB4MUJDQiwNCi0gICAgMHg5NkJCLCAweDBBNkQsIDB4OTZCQywgMHgwRDRGLCAweDk2QzAsIDB4MEE0MywgMHg5NkMxLCAweDA2MjMsDQotICAgIDB4OTZDNCwgMHgwRjI0LCAweDk2QzUsIDB4MDU2RCwgMHg5NkM2LCAweDA5NDIsIDB4OTZDNywgMHgwNzhGLA0KLSAgICAweDk2QzksIDB4MUJDRSwgMHg5NkNCLCAweDFCQ0QsIDB4OTZDQywgMHgwOEMxLCAweDk2Q0QsIDB4MUJDRiwNCi0gICAgMHg5NkNFLCAweDFCQ0MsIDB4OTZEMSwgMHgwODc2LCAweDk2RDIsIDB4M0JBNCwgMHg5NkQ1LCAweDFCRDMsDQotICAgIDB4OTZENiwgMHgxOTkyLCAweDk2RDksIDB4MTBFQiwgMHg5NkRCLCAweDBBM0QsIDB4OTZEQywgMHgxQkQxLA0KLSAgICAweDk2REUsIDB4M0JBNiwgMHg5NkUyLCAweDBGNkQsIDB4OTZFMywgMHgwQ0M5LCAweDk2RTgsIDB4MDRDRCwNCi0gICAgMHg5NkU5LCAweDNCQTcsIDB4OTZFQSwgMHgwQTg3LCAweDk2RUIsIDB4MDhFMiwgMHg5NkYwLCAweDBFMDcsDQotICAgIDB4OTZGMSwgMHgzQkE4LCAweDk2RjIsIDB4MDRFMiwgMHg5NkY2LCAweDBGQjUsIDB4OTZGNywgMHgwRjU1LA0KLSAgICAweDk2RjksIDB4MUJENCwgMHg5NkZCLCAweDBDM0YsIDB4OTcwMCwgMHgwOTI3LCAweDk3MDIsIDB4M0JBOSwNCi0gICAgMHg5NzA0LCAweDFCRDUsIDB4OTcwNiwgMHgxQkQ2LCAweDk3MDcsIDB4MEExMiwgMHg5NzA4LCAweDFCRDcsDQotICAgIDB4OTcwOSwgMHgzQkFBLCAweDk3MEEsIDB4MEZCNiwgMHg5NzBELCAweDFCRDIsIDB4OTcwRSwgMHgxQkQ5LA0KLSAgICAweDk3MEYsIDB4MUJEQiwgMHg5NzExLCAweDFCREEsIDB4OTcxMywgMHgxQkQ4LCAweDk3MTYsIDB4MUJEQywNCi0gICAgMHg5NzE5LCAweDFCREQsIDB4OTcxQywgMHgwQUZDLCAweDk3MUUsIDB4MDU2MiwgMHg5NzI0LCAweDFCREUsDQotICAgIDB4OTcyNywgMHgwRUM0LCAweDk3MkEsIDB4MUJERiwgMHg5NzMwLCAweDFCRTAsIDB4OTczMiwgMHgwRkQwLA0KLSAgICAweDk3MzMsIDB4MjFGMiwgMHg5NzM4LCAweDE0MTQsIDB4OTczOSwgMHgxQkUxLCAweDk3M0IsIDB4MjFGMywNCi0gICAgMHg5NzNELCAweDFCRTIsIDB4OTczRSwgMHgxQkUzLCAweDk3NDIsIDB4MUJFNywgMHg5NzQzLCAweDIxRjQsDQotICAgIDB4OTc0NCwgMHgxQkU0LCAweDk3NDYsIDB4MUJFNSwgMHg5NzQ4LCAweDFCRTYsIDB4OTc0OSwgMHgxQkU4LA0KLSAgICAweDk3NEQsIDB4MjFGNSwgMHg5NzRGLCAweDIxRjYsIDB4OTc1MSwgMHgyMUY3LCAweDk3NTIsIDB4MEE2OCwNCi0gICAgMHg5NzU1LCAweDIxRjgsIDB4OTc1NiwgMHgwRjAzLCAweDk3NTksIDB4MEE2OSwgMHg5NzVBLCAweDNCQUIsDQotICAgIDB4OTc1QywgMHgxQkU5LCAweDk3NUUsIDB4MEQ4NywgMHg5NzYwLCAweDFCRUEsIDB4OTc2MSwgMHgxRDA2LA0KLSAgICAweDk3NjIsIDB4MEVEOCwgMHg5NzYzLCAweDNCQUMsIDB4OTc2NCwgMHgxQkVCLCAweDk3NjYsIDB4MUJFQywNCi0gICAgMHg5NzY4LCAweDFCRUQsIDB4OTc2OSwgMHgwNUI1LCAweDk3NkIsIDB4MUJFRiwgMHg5NzZELCAweDBBMUYsDQotICAgIDB4OTc2RSwgMHgzQkFELCAweDk3NzEsIDB4MUJGMCwgMHg5NzczLCAweDNCQUUsIDB4OTc3NCwgMHgwNkZBLA0KLSAgICAweDk3NzksIDB4MUJGMSwgMHg5NzdBLCAweDFCRjUsIDB4OTc3QywgMHgxQkYzLCAweDk3ODEsIDB4MUJGNCwNCi0gICAgMHg5Nzg0LCAweDA1RDEsIDB4OTc4NSwgMHgxQkYyLCAweDk3ODYsIDB4MUJGNiwgMHg5NzhCLCAweDFCRjcsDQotICAgIDB4OTc4RCwgMHgwNDhDLCAweDk3OEYsIDB4MUJGOCwgMHg5NzkwLCAweDFCRjksIDB4OTc5OCwgMHgwOUNDLA0KLSAgICAweDk3OUEsIDB4M0JBRiwgMHg5NzlDLCAweDFCRkEsIDB4OTdBMCwgMHgwNjYxLCAweDk3QTIsIDB4M0JCMCwNCi0gICAgMHg5N0EzLCAweDFCRkQsIDB4OTdBNiwgMHgxQkZDLCAweDk3QTgsIDB4MUJGQiwgMHg5N0FCLCAweDFBMzQsDQotICAgIDB4OTdBRCwgMHgwRTJDLCAweDk3QjMsIDB4MUJGRSwgMHg5N0I0LCAweDFCRkYsIDB4OTdCNSwgMHgzQkIxLA0KLSAgICAweDk3QjYsIDB4M0JCMiwgMHg5N0MzLCAweDFDMDAsIDB4OTdDNiwgMHgxQzAxLCAweDk3QzgsIDB4MUMwMiwNCi0gICAgMHg5N0NCLCAweDFDMDMsIDB4OTdEMywgMHgwNjE2LCAweDk3RDksIDB4M0JCMywgMHg5N0RDLCAweDFDMDQsDQotICAgIDB4OTdERSwgMHgzQkI0LCAweDk3RUQsIDB4MUMwNSwgMHg5N0VFLCAweDBDRDksIDB4OTdGMiwgMHgxQzA3LA0KLSAgICAweDk3RjMsIDB4MDUzQiwgMHg5N0Y0LCAweDNCQjUsIDB4OTdGNSwgMHgxQzBBLCAweDk3RjYsIDB4MUMwOSwNCi0gICAgMHg5N0ZCLCAweDA0QzYsIDB4OTdGRiwgMHgwNkI5LCAweDk4MDEsIDB4MEUxNywgMHg5ODAyLCAweDBCRDYsDQotICAgIDB4OTgwMywgMHgwODEyLCAweDk4MDUsIDB4MDdGMiwgMHg5ODA2LCAweDA5NzEsIDB4OTgwOCwgMHgwQTIyLA0KLSAgICAweDk4MEEsIDB4M0JCNiwgMHg5ODBDLCAweDFDMEMsIDB4OTgwRSwgMHgzQkI3LCAweDk4MEYsIDB4MUMwQiwNCi0gICAgMHg5ODEwLCAweDBGMkMsIDB4OTgxMSwgMHgwNjI0LCAweDk4MTIsIDB4MEQ2NiwgMHg5ODEzLCAweDBDQjQsDQotICAgIDB4OTgxNywgMHgwQTQyLCAweDk4MTgsIDB4MEY5NiwgMHg5ODFBLCAweDA3MzEsIDB4OTgxRSwgMHgzQkI4LA0KLSAgICAweDk4MjEsIDB4MUMwRiwgMHg5ODIzLCAweDNCQjksIDB4OTgyNCwgMHgxQzBFLCAweDk4MkIsIDB4M0JCQSwNCi0gICAgMHg5ODJDLCAweDBFNzksIDB4OTgyRCwgMHgwQzg0LCAweDk4MzAsIDB4MUU3MywgMHg5ODM0LCAweDA0RjIsDQotICAgIDB4OTgzNywgMHgxQzEwLCAweDk4MzgsIDB4MUMwRCwgMHg5ODM5LCAweDM3QjMsIDB4OTgzQiwgMHgwREMzLA0KLSAgICAweDk4M0MsIDB4MEY1NCwgMHg5ODNELCAweDFDMTEsIDB4OTgzRSwgMHgzQkJCLCAweDk4NDYsIDB4MUMxMiwNCi0gICAgMHg5ODRCLCAweDFDMTQsIDB4OTg0QywgMHgwQjRBLCAweDk4NEQsIDB4MDVCOSwgMHg5ODRFLCAweDA1QkEsDQotICAgIDB4OTg0RiwgMHgxQzEzLCAweDk4NTIsIDB4M0JCQywgMHg5ODUzLCAweDNCQkQsIDB4OTg1NCwgMHgwNjI1LA0KLSAgICAweDk4NTUsIDB4MDc2NiwgMHg5ODU3LCAweDIxRjksIDB4OTg1OCwgMHgwNjI2LCAweDk4NTksIDB4M0JCRSwNCi0gICAgMHg5ODVBLCAweDFFNDgsIDB4OTg1QiwgMHgwQzM5LCAweDk4NUUsIDB4MEZBOCwgMHg5ODY1LCAweDIxRkEsDQotICAgIDB4OTg2NywgMHgwNzkwLCAweDk4NkIsIDB4MUMxNSwgMHg5ODZDLCAweDNCQkYsIDB4OTg2RiwgMHgxQzE2LA0KLSAgICAweDk4NzAsIDB4MUMxNywgMHg5ODcxLCAweDFDMTgsIDB4OTg3MywgMHgxQzFBLCAweDk4NzQsIDB4MUMxOSwNCi0gICAgMHg5OEE4LCAweDBERTksIDB4OThBQSwgMHgxQzFCLCAweDk4QUYsIDB4MUMxQywgMHg5OEIxLCAweDFDMUQsDQotICAgIDB4OThCNiwgMHgxQzFFLCAweDk4QjgsIDB4M0JDMCwgMHg5OEJBLCAweDNCQzEsIDB4OThCRiwgMHgzQkMyLA0KLSAgICAweDk4QzMsIDB4MUMyMCwgMHg5OEM0LCAweDFDMUYsIDB4OThDNiwgMHgxQzIxLCAweDk4QzgsIDB4M0JDMywNCi0gICAgMHg5OERCLCAweDBEODgsIDB4OThEQywgMHgxODM5LCAweDk4REYsIDB4MDlFRiwgMHg5OEUwLCAweDM2MTgsDQotICAgIDB4OThFMiwgMHgwNjRDLCAweDk4RTUsIDB4M0JDNCwgMHg5OEU5LCAweDFDMjIsIDB4OThFQiwgMHgxQzIzLA0KLSAgICAweDk4RUQsIDB4MTBDMSwgMHg5OEVFLCAweDE0REEsIDB4OThFRiwgMHgwRDY3LCAweDk4RjIsIDB4MDRCRiwNCi0gICAgMHg5OEY0LCAweDA0N0YsIDB4OThGQywgMHgwOEMyLCAweDk4RkQsIDB4MEU1RSwgMHg5OEZFLCAweDA5RTYsDQotICAgIDB4OTkwMywgMHgxQzI0LCAweDk5MDUsIDB4MEVFQiwgMHg5OTA5LCAweDFDMjUsIDB4OTkwQSwgMHgwRjQ2LA0KLSAgICAweDk5MEMsIDB4MDRFNCwgMHg5OTEwLCAweDA4OEYsIDB4OTkxMiwgMHgxQzI2LCAweDk5MTMsIDB4MDU2RSwNCi0gICAgMHg5OTE0LCAweDFDMjcsIDB4OTkxOCwgMHgxQzI4LCAweDk5MUQsIDB4MUMyQSwgMHg5OTFFLCAweDFDMkIsDQotICAgIDB4OTkyMCwgMHgxQzJELCAweDk5MjEsIDB4MUMyOSwgMHg5OTI0LCAweDFDMkMsIDB4OTkyNywgMHgyMUZELA0KLSAgICAweDk5MjgsIDB4MDYxNywgMHg5OTJDLCAweDFDMkUsIDB4OTkyRSwgMHgxQzJGLCAweDk5MzIsIDB4M0JDNSwNCi0gICAgMHg5OTMzLCAweDNCQzYsIDB4OTkzRCwgMHgxQzMwLCAweDk5M0UsIDB4MUMzMSwgMHg5OTQwLCAweDNCQzcsDQotICAgIDB4OTk0MiwgMHgxQzMyLCAweDk5NDUsIDB4MUMzNCwgMHg5OTQ5LCAweDFDMzMsIDB4OTk0QiwgMHgxQzM2LA0KLSAgICAweDk5NEMsIDB4MUMzOSwgMHg5OTRELCAweDNCQzgsIDB4OTk1MCwgMHgxQzM1LCAweDk5NTEsIDB4MUMzNywNCi0gICAgMHg5OTUyLCAweDFDMzgsIDB4OTk1NSwgMHgxQzNBLCAweDk5NTcsIDB4MDZCQSwgMHg5OTVDLCAweDNCQzksDQotICAgIDB4OTk1RiwgMHgzQkNBLCAweDk5OTYsIDB4MDkxRiwgMHg5OTk3LCAweDFDM0IsIDB4OTk5OCwgMHgxQzNDLA0KLSAgICAweDk5OTksIDB4MDdGMywgMHg5OTlFLCAweDIxRkYsIDB4OTlBNSwgMHgxQzNELCAweDk5QTgsIDB4MDU5QywNCi0gICAgMHg5OUFDLCAweDBEMDUsIDB4OTlBRCwgMHgxQzNFLCAweDk5QUUsIDB4MUMzRiwgMHg5OUIxLCAweDNCQ0IsDQotICAgIDB4OTlCMywgMHgwQjk4LCAweDk5QjQsIDB4MENDMywgMHg5OUI5LCAweDNCQ0MsIDB4OTlCQSwgMHgzQkNELA0KLSAgICAweDk5QkMsIDB4MUM0MCwgMHg5OUMxLCAweDBEMzMsIDB4OTlDNCwgMHgwQjJDLCAweDk5QzUsIDB4MDRGQSwNCi0gICAgMHg5OUM2LCAweDA2RTYsIDB4OTlDOCwgMHgwNkU3LCAweDk5QzksIDB4M0JDRSwgMHg5OUQwLCAweDBCQjEsDQotICAgIDB4OTlEMSwgMHgxQzQ1LCAweDk5RDIsIDB4MDZFOCwgMHg5OUQ1LCAweDA1NkYsIDB4OTlEOCwgMHgxQzQ0LA0KLSAgICAweDk5REIsIDB4MUM0MiwgMHg5OURELCAweDFDNDMsIDB4OTlERiwgMHgxQzQxLCAweDk5RTIsIDB4MUM0RiwNCi0gICAgMHg5OUVELCAweDFDNDYsIDB4OTlFRSwgMHgxQzQ3LCAweDk5RjEsIDB4MUM0OCwgMHg5OUYyLCAweDFDNDksDQotICAgIDB4OTlGOCwgMHgxQzRCLCAweDk5RkIsIDB4MUM0QSwgMHg5OUZGLCAweDA5NjMsIDB4OUEwMSwgMHgxQzRDLA0KLSAgICAweDlBMDIsIDB4M0JDRiwgMHg5QTA1LCAweDFDNEUsIDB4OUEwOCwgMHgzN0JBLCAweDlBMEUsIDB4MDY0RCwNCi0gICAgMHg5QTBGLCAweDFDNEQsIDB4OUExMiwgMHgwQUZELCAweDlBMTMsIDB4MDc2NywgMHg5QTE2LCAweDNCRDAsDQotICAgIDB4OUExOSwgMHgxQzUwLCAweDlBMjQsIDB4M0JEMSwgMHg5QTI3LCAweDNCRDIsIDB4OUEyOCwgMHgwQjJELA0KLSAgICAweDlBMkIsIDB4MUM1MSwgMHg5QTJELCAweDNCRDMsIDB4OUEyRSwgMHgzQkQ0LCAweDlBMzAsIDB4MEM4NSwNCi0gICAgMHg5QTM2LCAweDNCRDUsIDB4OUEzNywgMHgxQzUyLCAweDlBMzgsIDB4M0JENiwgMHg5QTNFLCAweDFDNTcsDQotICAgIDB4OUE0MCwgMHgxQzU1LCAweDlBNDIsIDB4MUM1NCwgMHg5QTQzLCAweDFDNTYsIDB4OUE0NSwgMHgxQzUzLA0KLSAgICAweDlBNEEsIDB4M0JENywgMHg5QTRELCAweDFDNTksIDB4OUE0RSwgMHgyMjAwLCAweDlBNTIsIDB4MUUyRiwNCi0gICAgMHg5QTU1LCAweDFDNTgsIDB4OUE1NiwgMHgzQkQ4LCAweDlBNTcsIDB4MUM1QiwgMHg5QTVBLCAweDA2QkIsDQotICAgIDB4OUE1QiwgMHgxQzVBLCAweDlBNUYsIDB4MUM1QywgMHg5QTYyLCAweDFDNUQsIDB4OUE2NCwgMHgxQzVGLA0KLSAgICAweDlBNjUsIDB4MUM1RSwgMHg5QTY5LCAweDFDNjAsIDB4OUE2QSwgMHgxQzYyLCAweDlBNkIsIDB4MUM2MSwNCi0gICAgMHg5QUE4LCAweDA4MEUsIDB4OUFBRCwgMHgxQzYzLCAweDlBQjAsIDB4MUM2NCwgMHg5QUI1LCAweDNCRDksDQotICAgIDB4OUFCNiwgMHgzQkRBLCAweDlBQjgsIDB4MDU5QSwgMHg5QUJDLCAweDFDNjUsIDB4OUFDMCwgMHgxQzY2LA0KLSAgICAweDlBQzQsIDB4MEEzNywgMHg5QUNGLCAweDFDNjcsIDB4OUFEMSwgMHgxQzY4LCAweDlBRDMsIDB4MUM2OSwNCi0gICAgMHg5QUQ0LCAweDFDNkEsIDB4OUFEOCwgMHgwN0Y0LCAweDlBRDksIDB4MjIwMSwgMHg5QURDLCAweDIyMDIsDQotICAgIDB4OUFERSwgMHgxQzZCLCAweDlBREYsIDB4MUM2QywgMHg5QUUyLCAweDFDNkQsIDB4OUFFMywgMHgxQzZFLA0KLSAgICAweDlBRTYsIDB4MUM2RiwgMHg5QUVBLCAweDBENDUsIDB4OUFFQiwgMHgxQzcxLCAweDlBRUQsIDB4MEQ5OCwNCi0gICAgMHg5QUVFLCAweDFDNzIsIDB4OUFFRiwgMHgxQzcwLCAweDlBRjEsIDB4MUM3NCwgMHg5QUY0LCAweDFDNzMsDQotICAgIDB4OUFGNywgMHgxQzc1LCAweDlBRjksIDB4M0JEQiwgMHg5QUZCLCAweDFDNzYsIDB4OUIwMywgMHgzQkRDLA0KLSAgICAweDlCMDYsIDB4MUM3NywgMHg5QjE4LCAweDFDNzgsIDB4OUIxQSwgMHgxQzc5LCAweDlCMUYsIDB4MUM3QSwNCi0gICAgMHg5QjIwLCAweDNCREQsIDB4OUIyMiwgMHgxQzdCLCAweDlCMjMsIDB4MUM3QywgMHg5QjI1LCAweDFDN0QsDQotICAgIDB4OUIyNywgMHgxQzdFLCAweDlCMjgsIDB4MUM3RiwgMHg5QjI5LCAweDFDODAsIDB4OUIyQSwgMHgxQzgxLA0KLSAgICAweDlCMkQsIDB4MzQzQywgMHg5QjJFLCAweDFDODIsIDB4OUIyRiwgMHgxQzgzLCAweDlCMzEsIDB4MTRENCwNCi0gICAgMHg5QjMyLCAweDFDODQsIDB4OUIzMywgMHgzQkRFLCAweDlCMzQsIDB4M0JERiwgMHg5QjNCLCAweDE3QTksDQotICAgIDB4OUIzQywgMHgwNjRFLCAweDlCNDEsIDB4MDU3RiwgMHg5QjQyLCAweDA4MjIsIDB4OUI0MywgMHgxQzg2LA0KLSAgICAweDlCNDQsIDB4MUM4NSwgMHg5QjQ1LCAweDBFQjEsIDB4OUI0RCwgMHgxQzg4LCAweDlCNEUsIDB4MUM4OSwNCi0gICAgMHg5QjRGLCAweDFDODcsIDB4OUI1MSwgMHgxQzhBLCAweDlCNTQsIDB4MEU5MCwgMHg5QjU4LCAweDFDOEIsDQotICAgIDB4OUI1QSwgMHgwNjk1LCAweDlCNkYsIDB4MEZDQiwgMHg5QjcyLCAweDIyMDQsIDB4OUI3MywgMHgzQkUwLA0KLSAgICAweDlCNzQsIDB4MUM4QywgMHg5Qjc1LCAweDIyMDMsIDB4OUI3OSwgMHgzQkUxLCAweDlCODMsIDB4MUM4RSwNCi0gICAgMHg5QjhFLCAweDA0ODIsIDB4OUI4RiwgMHgyMjA1LCAweDlCOTEsIDB4MUM4RiwgMHg5QjkyLCAweDBERkIsDQotICAgIDB4OUI5MywgMHgxQzhELCAweDlCOTYsIDB4MUM5MCwgMHg5Qjk3LCAweDFDOTEsIDB4OUI5RiwgMHgxQzkyLA0KLSAgICAweDlCQTAsIDB4MUM5MywgMHg5QkE3LCAweDNCRTIsIDB4OUJBOCwgMHgxQzk0LCAweDlCQUEsIDB4MEU5QywNCi0gICAgMHg5QkFCLCAweDA4N0IsIDB4OUJBRCwgMHgwODZBLCAweDlCQUUsIDB4MEFCMSwgMHg5QkIxLCAweDIyMDYsDQotICAgIDB4OUJCNCwgMHgxQzk1LCAweDlCQjksIDB4MUM5OCwgMHg5QkJCLCAweDIyMDcsIDB4OUJDMCwgMHgxQzk2LA0KLSAgICAweDlCQzEsIDB4M0JFMywgMHg5QkM2LCAweDFDOTksIDB4OUJDNywgMHgzQkU0LCAweDlCQzksIDB4MDdBNSwNCi0gICAgMHg5QkNBLCAweDFDOTcsIDB4OUJDRiwgMHgxQzlBLCAweDlCRDEsIDB4MUM5QiwgMHg5QkQyLCAweDFDOUMsDQotICAgIDB4OUJENCwgMHgxQ0EwLCAweDlCRDYsIDB4MDg3OCwgMHg5QkQ3LCAweDNCRTUsIDB4OUJEQiwgMHgwQjQ0LA0KLSAgICAweDlCREYsIDB4MzdCRiwgMHg5QkUxLCAweDFDQTEsIDB4OUJFMiwgMHgxQzlFLCAweDlCRTMsIDB4MUM5RCwNCi0gICAgMHg5QkU0LCAweDFDOUYsIDB4OUJFNywgMHgzQkU2LCAweDlCRTgsIDB4MDczNSwgMHg5QkVCLCAweDNCRTcsDQotICAgIDB4OUJGMCwgMHgxQ0E1LCAweDlCRjEsIDB4MUNBNCwgMHg5QkYyLCAweDFDQTMsIDB4OUJGNSwgMHgwNDc3LA0KLSAgICAweDlCRjcsIDB4M0JFOCwgMHg5QkZBLCAweDNCRTksIDB4OUJGRCwgMHgzQkVBLCAweDlDMDAsIDB4MjIwOCwNCi0gICAgMHg5QzA0LCAweDFDQUYsIDB4OUMwNiwgMHgxQ0FCLCAweDlDMDgsIDB4MUNBQywgMHg5QzA5LCAweDFDQTgsDQotICAgIDB4OUMwQSwgMHgxQ0FFLCAweDlDMEIsIDB4M0JFQiwgMHg5QzBDLCAweDFDQUEsIDB4OUMwRCwgMHgwNUMwLA0KLSAgICAweDlDMTAsIDB4MEZGMiwgMHg5QzEyLCAweDFDQUQsIDB4OUMxMywgMHgxQ0E5LCAweDlDMTQsIDB4MUNBNywNCi0gICAgMHg5QzE1LCAweDFDQTYsIDB4OUMxQiwgMHgxQ0IxLCAweDlDMjEsIDB4MUNCNCwgMHg5QzI0LCAweDFDQjMsDQotICAgIDB4OUMyNSwgMHgxQ0IyLCAweDlDMjcsIDB4M0JFQywgMHg5QzJBLCAweDNCRUQsIDB4OUMyRCwgMHgwREJCLA0KLSAgICAweDlDMkUsIDB4MUNCMCwgMHg5QzJGLCAweDA0QjcsIDB4OUMzMCwgMHgxQ0I1LCAweDlDMzIsIDB4MUNCNywNCi0gICAgMHg5QzM2LCAweDNCRUUsIDB4OUMzOSwgMHgwNUNELCAweDlDM0EsIDB4MUNBMiwgMHg5QzNCLCAweDA0RDksDQotICAgIDB4OUMzRSwgMHgxQ0I5LCAweDlDNDEsIDB4M0JFRiwgMHg5QzQ2LCAweDFDQjgsIDB4OUM0NywgMHgxQ0I2LA0KLSAgICAweDlDNDgsIDB4MEI2QiwgMHg5QzUyLCAweDBFOUUsIDB4OUM1MywgMHgzQkYwLCAweDlDNTcsIDB4MEZBMiwNCi0gICAgMHg5QzVBLCAweDFDQkEsIDB4OUM2MCwgMHgxQ0JCLCAweDlDNjMsIDB4M0JGMSwgMHg5QzY3LCAweDFDQkMsDQotICAgIDB4OUM2QSwgMHgzQkYyLCAweDlDNzYsIDB4MUNCRCwgMHg5Qzc3LCAweDNCRjMsIDB4OUM3OCwgMHgxQ0JFLA0KLSAgICAweDlDRTUsIDB4MEJENywgMHg5Q0U3LCAweDFDQkYsIDB4OUNFOSwgMHgwRDRCLCAweDlDRUIsIDB4MUNDNCwNCi0gICAgMHg5Q0VDLCAweDFDQzAsIDB4OUNGMCwgMHgxQ0MxLCAweDlDRjMsIDB4MEU1RiwgMHg5Q0Y0LCAweDBFRDAsDQotICAgIDB4OUNGNiwgMHgwQ0E4LCAweDlEMDIsIDB4M0JGNCwgMHg5RDAzLCAweDFDQzUsIDB4OUQwNiwgMHgxQ0M2LA0KLSAgICAweDlEMDcsIDB4MEM5NiwgMHg5RDA4LCAweDFDQzMsIDB4OUQwOSwgMHgxQ0MyLCAweDlEMEUsIDB4MDUyQSwNCi0gICAgMHg5RDEyLCAweDFDQ0UsIDB4OUQxNSwgMHgxQ0NELCAweDlEMUIsIDB4MDUxNywgMHg5RDFGLCAweDFDQ0IsDQotICAgIDB4OUQyMywgMHgxQ0NBLCAweDlEMjYsIDB4MUNDOCwgMHg5RDI4LCAweDA1RDksIDB4OUQyQSwgMHgxQ0M3LA0KLSAgICAweDlEMkIsIDB4MDhERSwgMHg5RDJDLCAweDA1MjksIDB4OUQzQiwgMHgwN0Y1LCAweDlEM0UsIDB4MUNEMSwNCi0gICAgMHg5RDNGLCAweDFDRDAsIDB4OUQ0MSwgMHgxQ0NGLCAweDlENDIsIDB4M0JGNSwgMHg5RDQ0LCAweDFDQ0MsDQotICAgIDB4OUQ0NiwgMHgxQ0QyLCAweDlENDcsIDB4M0JGNiwgMHg5RDQ4LCAweDFDRDMsIDB4OUQ1MCwgMHgxQ0Q4LA0KLSAgICAweDlENTEsIDB4MUNENywgMHg5RDU5LCAweDFDRDksIDB4OUQ1QywgMHgwNENGLCAweDlENUQsIDB4MUNENCwNCi0gICAgMHg5RDVFLCAweDFDRDUsIDB4OUQ2MCwgMHgwODA2LCAweDlENjEsIDB4MEVDNSwgMHg5RDYzLCAweDNCRjcsDQotICAgIDB4OUQ2NCwgMHgxQ0Q2LCAweDlENjksIDB4M0JGOCwgMHg5RDZCLCAweDIyMEEsIDB4OUQ2QywgMHgwRTYwLA0KLSAgICAweDlENkYsIDB4MUNERSwgMHg5RDcwLCAweDIyMDksIDB4OUQ3MiwgMHgxQ0RBLCAweDlEN0EsIDB4MUNERiwNCi0gICAgMHg5RDdDLCAweDNCRjksIDB4OUQ3RSwgMHgzQkZBLCAweDlEODcsIDB4MUNEQywgMHg5RDg5LCAweDFDREIsDQotICAgIDB4OUQ4RCwgMHgzQkZCLCAweDlEOEYsIDB4MDczMiwgMHg5RDlBLCAweDFDRTAsIDB4OURBNCwgMHgxQ0UxLA0KLSAgICAweDlEQTksIDB4MUNFMiwgMHg5REFCLCAweDFDREQsIDB4OURBRiwgMHgxQ0M5LCAweDlEQjEsIDB4M0JGQywNCi0gICAgMHg5REIyLCAweDFDRTMsIDB4OURCNCwgMHgwQkZELCAweDlEQjgsIDB4MUNFNywgMHg5REJBLCAweDFDRTgsDQotICAgIDB4OURCQiwgMHgxQ0U2LCAweDlEQzEsIDB4MUNFNSwgMHg5REMyLCAweDFDRUIsIDB4OURDMywgMHgzQkZELA0KLSAgICAweDlEQzQsIDB4MUNFNCwgMHg5REM2LCAweDFDRTksIDB4OURDNywgMHgzQkZFLCAweDlEQ0YsIDB4MUNFQSwNCi0gICAgMHg5REQzLCAweDFDRUQsIDB4OURENiwgMHgzQkZGLCAweDlERDcsIDB4MURERSwgMHg5REQ5LCAweDFDRUMsDQotICAgIDB4OURERiwgMHgzQzAwLCAweDlERTYsIDB4MUNFRiwgMHg5REVCLCAweDNDMDEsIDB4OURFRCwgMHgxQ0YwLA0KLSAgICAweDlERUYsIDB4MUNGMSwgMHg5REYyLCAweDBGRUYsIDB4OURGNCwgMHgzQzAyLCAweDlERjgsIDB4MUNFRSwNCi0gICAgMHg5REY5LCAweDBCNEIsIDB4OURGQSwgMHgwODVELCAweDlERkQsIDB4MUNGMiwgMHg5RTE1LCAweDNDMDMsDQotICAgIDB4OUUxOSwgMHgyMjBDLCAweDlFMUEsIDB4MUNGMywgMHg5RTFCLCAweDFDRjQsIDB4OUUxRCwgMHgzQzA0LA0KLSAgICAweDlFMUUsIDB4MUNGNSwgMHg5RTc1LCAweDFDRjYsIDB4OUU3OCwgMHgwNzY4LCAweDlFNzksIDB4MUNGNywNCi0gICAgMHg5RTdDLCAweDFERkQsIDB4OUU3RCwgMHgxQ0Y4LCAweDlFN0YsIDB4MDhEQiwgMHg5RTgxLCAweDFDRjksDQotICAgIDB4OUU4OCwgMHgxQ0ZBLCAweDlFOEIsIDB4MUNGQiwgMHg5RThDLCAweDFDRkMsIDB4OUU5MSwgMHgxQ0ZGLA0KLSAgICAweDlFOTIsIDB4MUNGRCwgMHg5RTkzLCAweDBGRTIsIDB4OUU5NSwgMHgxQ0ZFLCAweDlFOTcsIDB4MEZCNywNCi0gICAgMHg5RTlELCAweDFEMDAsIDB4OUU5RiwgMHgwRkEzLCAweDlFQTQsIDB4M0MwNSwgMHg5RUE1LCAweDFEMDEsDQotICAgIDB4OUVBNiwgMHgwRDM0LCAweDlFQTgsIDB4M0MwNiwgMHg5RUE5LCAweDFEMDIsIDB4OUVBQSwgMHgxRDA0LA0KLSAgICAweDlFQUMsIDB4M0MwNywgMHg5RUFELCAweDFEMDUsIDB4OUVCNCwgMHgxRTAyLCAweDlFQjUsIDB4MUU3NSwNCi0gICAgMHg5RUI4LCAweDFEMDMsIDB4OUVCOSwgMHgwN0ZGLCAweDlFQkEsIDB4MEVEOSwgMHg5RUJCLCAweDBFOTEsDQotICAgIDB4OUVCQywgMHgxMjg0LCAweDlFQkUsIDB4MTRGRiwgMHg5RUJGLCAweDBFQTksIDB4OUVDMywgMHgzNDBCLA0KLSAgICAweDlFQzQsIDB4MDUyQiwgMHg5RUNDLCAweDFEMDcsIDB4OUVDRCwgMHgwNjZBLCAweDlFQ0UsIDB4MUQwOCwNCi0gICAgMHg5RUNGLCAweDFEMDksIDB4OUVEMCwgMHgxRDBBLCAweDlFRDEsIDB4MjIwRCwgMHg5RUQyLCAweDA4MDcsDQotICAgIDB4OUVENCwgMHgxRDBCLCAweDlFRDgsIDB4MTYwRCwgMHg5RUQ5LCAweDBFRTcsIDB4OUVEQiwgMHgwQjQzLA0KLSAgICAweDlFREMsIDB4MUQwQywgMHg5RURELCAweDFEMEUsIDB4OUVERSwgMHgxRDBELCAweDlFRTAsIDB4MUQwRiwNCi0gICAgMHg5RUU1LCAweDFEMTAsIDB4OUVFNywgMHgzQzA4LCAweDlFRTgsIDB4MUQxMSwgMHg5RUVFLCAweDNDMDksDQotICAgIDB4OUVFRiwgMHgxRDEyLCAweDlFRjQsIDB4MUQxMywgMHg5RUY2LCAweDFEMTQsIDB4OUVGNywgMHgxRDE1LA0KLSAgICAweDlFRjksIDB4MUQxNiwgMHg5RUZCLCAweDFEMTcsIDB4OUVGQywgMHgxRDE4LCAweDlFRkQsIDB4MUQxOSwNCi0gICAgMHg5RjA3LCAweDFEMUEsIDB4OUYwOCwgMHgxRDFCLCAweDlGMEUsIDB4MEMxRSwgMHg5RjEwLCAweDNDMEEsDQotICAgIDB4OUYxMiwgMHgzQzBCLCAweDlGMTMsIDB4MDc5MSwgMHg5RjE1LCAweDFEMUQsIDB4OUYxNywgMHgzQzBDLA0KLSAgICAweDlGMTksIDB4M0MwRCwgMHg5RjIwLCAweDBBQ0YsIDB4OUYyMSwgMHgxRDFFLCAweDlGMkMsIDB4MUQxRiwNCi0gICAgMHg5RjJGLCAweDNDMEUsIDB4OUYzNywgMHgzQzBGLCAweDlGMzksIDB4M0MxMCwgMHg5RjNCLCAweDBEOTMsDQotICAgIDB4OUYzRSwgMHgxRDIwLCAweDlGNDEsIDB4M0MxMSwgMHg5RjQ1LCAweDNDMTIsIDB4OUY0QSwgMHgxRDIxLA0KLSAgICAweDlGNEIsIDB4MTcwQSwgMHg5RjRFLCAweDFBN0IsIDB4OUY0RiwgMHgxQzA2LCAweDlGNTIsIDB4MUQyMiwNCi0gICAgMHg5RjU0LCAweDFEMjMsIDB4OUY1NywgMHgzQzEzLCAweDlGNUYsIDB4MUQyNSwgMHg5RjYwLCAweDFEMjYsDQotICAgIDB4OUY2MSwgMHgxRDI3LCAweDlGNjIsIDB4MEZCOCwgMHg5RjYzLCAweDFEMjQsIDB4OUY2NiwgMHgxRDI4LA0KLSAgICAweDlGNjcsIDB4MUQyOSwgMHg5RjY4LCAweDNDMTQsIDB4OUY2QSwgMHgxRDJCLCAweDlGNkMsIDB4MUQyQSwNCi0gICAgMHg5RjcxLCAweDNDMTUsIDB4OUY3MiwgMHgxRDJELCAweDlGNzUsIDB4M0MxNiwgMHg5Rjc2LCAweDFEMkUsDQotICAgIDB4OUY3NywgMHgxRDJDLCAweDlGOEQsIDB4MEY3RSwgMHg5RjkwLCAweDNDMTcsIDB4OUY5NCwgMHgzQzE4LA0KLSAgICAweDlGOTUsIDB4MUQyRiwgMHg5RjlDLCAweDFEMzAsIDB4OUY5RCwgMHgxNzI3LCAweDlGQTAsIDB4MUQzMSwNCi0gICAgMHg5RkEyLCAweDNDMTksIDB4RjkyOSwgMHgyMTI5LCAweEY5REMsIDB4MjFFRSwgMHhGQTBFLCAweDIwREEsDQotICAgIDB4RkEwRiwgMHgyMEU1LCAweEZBMTAsIDB4MjBFNiwgMHhGQTExLCAweDIwRkIsIDB4RkExMiwgMHgyMTIxLA0KLSAgICAweEZBMTMsIDB4MjEzMSwgMHhGQTE0LCAweDIxMzMsIDB4RkExNSwgMHgyMTVFLCAweEZBMTYsIDB4MjE2NCwNCi0gICAgMHhGQTE3LCAweDIxN0IsIDB4RkExOCwgMHgyMTgzLCAweEZBMTksIDB4MjE4NCwgMHhGQTFBLCAweDIxODUsDQotICAgIDB4RkExQiwgMHgyMTg3LCAweEZBMUMsIDB4MjE4QiwgMHhGQTFELCAweDIxOEUsIDB4RkExRSwgMHgyMTk3LA0KLSAgICAweEZBMUYsIDB4MjFBMiwgMHhGQTIwLCAweDIxQTQsIDB4RkEyMSwgMHgyMUE1LCAweEZBMjIsIDB4MjFBRSwNCi0gICAgMHhGQTIzLCAweDIxQjYsIDB4RkEyNCwgMHgyMUI4LCAweEZBMjUsIDB4MjFCOSwgMHhGQTI2LCAweDIxQkMsDQotICAgIDB4RkEyNywgMHgyMUQ4LCAweEZBMjgsIDB4MjFERiwgMHhGQTI5LCAweDIxRUYsIDB4RkEyQSwgMHgyMUZCLA0KLSAgICAweEZBMkIsIDB4MjFGQywgMHhGQTJDLCAweDIxRkUsIDB4RkEyRCwgMHgyMjBCLCAweEZCMDAsIDB4MjQ4RSwNCi0gICAgMHhGQjAxLCAweDAwNzAsIDB4RkIwMiwgMHgwMDcxLCAweEZCMDMsIDB4MjQ4RiwgMHhGQjA0LCAweDI0OTAsDQotICAgIDB4RkUzMCwgMHgxRURBLCAweEZFMzEsIDB4MUVENCwgMHhGRTMyLCAweDFFRDUsIDB4RkUzMywgMHgxRUQyLA0KLSAgICAweEZFMzUsIDB4MUVEQiwgMHhGRTM2LCAweDFFREMsIDB4RkUzNywgMHgxRUUxLCAweEZFMzgsIDB4MUVFMiwNCi0gICAgMHhGRTM5LCAweDFFREQsIDB4RkUzQSwgMHgxRURFLCAweEZFM0IsIDB4MUVFQiwgMHhGRTNDLCAweDFFRUMsDQotICAgIDB4RkUzRCwgMHgxRUU1LCAweEZFM0UsIDB4MUVFNiwgMHhGRTNGLCAweDFFRTMsIDB4RkU0MCwgMHgxRUU0LA0KLSAgICAweEZFNDEsIDB4MUVFNywgMHhGRTQyLCAweDFFRTgsIDB4RkU0MywgMHgxRUU5LCAweEZFNDQsIDB4MUVFQSwNCi0gICAgMHhGRjAxLCAweDAyODIsIDB4RkYwMiwgMHgxRjQ3LCAweEZGMDMsIDB4MDJDQywgMHhGRjA0LCAweDAyQzgsDQotICAgIDB4RkYwNSwgMHgwMkNCLCAweEZGMDYsIDB4MDJDRCwgMHhGRjA3LCAweDFGNDYsIDB4RkYwOCwgMHgwMkEyLA0KLSAgICAweEZGMDksIDB4MDJBMywgMHhGRjBBLCAweDAyQ0UsIDB4RkYwQiwgMHgwMkI0LCAweEZGMEMsIDB4MDI3QywNCi0gICAgMHhGRjBELCAweDAyQjUsIDB4RkYwRSwgMHgwMjdELCAweEZGMEYsIDB4MDI5NywgMHhGRjEwLCAweDAzMEMsDQotICAgIDB4RkYxMSwgMHgwMzBELCAweEZGMTIsIDB4MDMwRSwgMHhGRjEzLCAweDAzMEYsIDB4RkYxNCwgMHgwMzEwLA0KLSAgICAweEZGMTUsIDB4MDMxMSwgMHhGRjE2LCAweDAzMTIsIDB4RkYxNywgMHgwMzEzLCAweEZGMTgsIDB4MDMxNCwNCi0gICAgMHhGRjE5LCAweDAzMTUsIDB4RkYxQSwgMHgwMjdGLCAweEZGMUIsIDB4MDI4MCwgMHhGRjFDLCAweDAyQkIsDQotICAgIDB4RkYxRCwgMHgwMkI5LCAweEZGMUUsIDB4MDJCQywgMHhGRjFGLCAweDAyODEsIDB4RkYyMCwgMHgwMkNGLA0KLSAgICAweEZGMjEsIDB4MDMxNiwgMHhGRjIyLCAweDAzMTcsIDB4RkYyMywgMHgwMzE4LCAweEZGMjQsIDB4MDMxOSwNCi0gICAgMHhGRjI1LCAweDAzMUEsIDB4RkYyNiwgMHgwMzFCLCAweEZGMjcsIDB4MDMxQywgMHhGRjI4LCAweDAzMUQsDQotICAgIDB4RkYyOSwgMHgwMzFFLCAweEZGMkEsIDB4MDMxRiwgMHhGRjJCLCAweDAzMjAsIDB4RkYyQywgMHgwMzIxLA0KLSAgICAweEZGMkQsIDB4MDMyMiwgMHhGRjJFLCAweDAzMjMsIDB4RkYyRiwgMHgwMzI0LCAweEZGMzAsIDB4MDMyNSwNCi0gICAgMHhGRjMxLCAweDAzMjYsIDB4RkYzMiwgMHgwMzI3LCAweEZGMzMsIDB4MDMyOCwgMHhGRjM0LCAweDAzMjksDQotICAgIDB4RkYzNSwgMHgwMzJBLCAweEZGMzYsIDB4MDMyQiwgMHhGRjM3LCAweDAzMkMsIDB4RkYzOCwgMHgwMzJELA0KLSAgICAweEZGMzksIDB4MDMyRSwgMHhGRjNBLCAweDAzMkYsIDB4RkYzQiwgMHgwMkE2LCAweEZGM0MsIDB4MDI5OCwNCi0gICAgMHhGRjNELCAweDAyQTcsIDB4RkYzRSwgMHgwMjg4LCAweEZGM0YsIDB4MDI4QSwgMHhGRjQwLCAweDAyODYsDQotICAgIDB4RkY0MSwgMHgwMzMwLCAweEZGNDIsIDB4MDMzMSwgMHhGRjQzLCAweDAzMzIsIDB4RkY0NCwgMHgwMzMzLA0KLSAgICAweEZGNDUsIDB4MDMzNCwgMHhGRjQ2LCAweDAzMzUsIDB4RkY0NywgMHgwMzM2LCAweEZGNDgsIDB4MDMzNywNCi0gICAgMHhGRjQ5LCAweDAzMzgsIDB4RkY0QSwgMHgwMzM5LCAweEZGNEIsIDB4MDMzQSwgMHhGRjRDLCAweDAzM0IsDQotICAgIDB4RkY0RCwgMHgwMzNDLCAweEZGNEUsIDB4MDMzRCwgMHhGRjRGLCAweDAzM0UsIDB4RkY1MCwgMHgwMzNGLA0KLSAgICAweEZGNTEsIDB4MDM0MCwgMHhGRjUyLCAweDAzNDEsIDB4RkY1MywgMHgwMzQyLCAweEZGNTQsIDB4MDM0MywNCi0gICAgMHhGRjU1LCAweDAzNDQsIDB4RkY1NiwgMHgwMzQ1LCAweEZGNTcsIDB4MDM0NiwgMHhGRjU4LCAweDAzNDcsDQotICAgIDB4RkY1OSwgMHgwMzQ4LCAweEZGNUEsIDB4MDM0OSwgMHhGRjVCLCAweDAyQTgsIDB4RkY1QywgMHgwMjlCLA0KLSAgICAweEZGNUQsIDB4MDJBOSwgMHhGRjVFLCAweDAyOTksIDB4RkY2MSwgMHgwMTQ3LCAweEZGNjIsIDB4MDE0OCwNCi0gICAgMHhGRjYzLCAweDAxNDksIDB4RkY2NCwgMHgwMTRBLCAweEZGNjUsIDB4MDE0QiwgMHhGRjY2LCAweDAxNEMsDQotICAgIDB4RkY2NywgMHgwMTRELCAweEZGNjgsIDB4MDE0RSwgMHhGRjY5LCAweDAxNEYsIDB4RkY2QSwgMHgwMTUwLA0KLSAgICAweEZGNkIsIDB4MDE1MSwgMHhGRjZDLCAweDAxNTIsIDB4RkY2RCwgMHgwMTUzLCAweEZGNkUsIDB4MDE1NCwNCi0gICAgMHhGRjZGLCAweDAxNTUsIDB4RkY3MCwgMHgwMTU2LCAweEZGNzEsIDB4MDE1NywgMHhGRjcyLCAweDAxNTgsDQotICAgIDB4RkY3MywgMHgwMTU5LCAweEZGNzQsIDB4MDE1QSwgMHhGRjc1LCAweDAxNUIsIDB4RkY3NiwgMHgwMTVDLA0KLSAgICAweEZGNzcsIDB4MDE1RCwgMHhGRjc4LCAweDAxNUUsIDB4RkY3OSwgMHgwMTVGLCAweEZGN0EsIDB4MDE2MCwNCi0gICAgMHhGRjdCLCAweDAxNjEsIDB4RkY3QywgMHgwMTYyLCAweEZGN0QsIDB4MDE2MywgMHhGRjdFLCAweDAxNjQsDQotICAgIDB4RkY3RiwgMHgwMTY1LCAweEZGODAsIDB4MDE2NiwgMHhGRjgxLCAweDAxNjcsIDB4RkY4MiwgMHgwMTY4LA0KLSAgICAweEZGODMsIDB4MDE2OSwgMHhGRjg0LCAweDAxNkEsIDB4RkY4NSwgMHgwMTZCLCAweEZGODYsIDB4MDE2QywNCi0gICAgMHhGRjg3LCAweDAxNkQsIDB4RkY4OCwgMHgwMTZFLCAweEZGODksIDB4MDE2RiwgMHhGRjhBLCAweDAxNzAsDQotICAgIDB4RkY4QiwgMHgwMTcxLCAweEZGOEMsIDB4MDE3MiwgMHhGRjhELCAweDAxNzMsIDB4RkY4RSwgMHgwMTc0LA0KLSAgICAweEZGOEYsIDB4MDE3NSwgMHhGRjkwLCAweDAxNzYsIDB4RkY5MSwgMHgwMTc3LCAweEZGOTIsIDB4MDE3OCwNCi0gICAgMHhGRjkzLCAweDAxNzksIDB4RkY5NCwgMHgwMTdBLCAweEZGOTUsIDB4MDE3QiwgMHhGRjk2LCAweDAxN0MsDQotICAgIDB4RkY5NywgMHgwMTdELCAweEZGOTgsIDB4MDE3RSwgMHhGRjk5LCAweDAxN0YsIDB4RkY5QSwgMHgwMTgwLA0KLSAgICAweEZGOUIsIDB4MDE4MSwgMHhGRjlDLCAweDAxODIsIDB4RkY5RCwgMHgwMTgzLCAweEZGOUUsIDB4MDE4NCwNCi0gICAgMHhGRjlGLCAweDAxODUsIDB4RkZFMCwgMHgwMkM5LCAweEZGRTEsIDB4MDJDQSwgMHhGRkUyLCAweDAyRUYsDQotICAgIDB4RkZFMywgMHgwMjg5LCAweEZGRTQsIDB4MUY0NSwgMHhGRkU1LCAweDAyQzcsIDB4RkZFOCwgMHgwMTQzLA0KLX07DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX1VuaUpJU19VQ1MyX0hfNFs5NzcyICogMl0gPSB7CisgICAgMHgwMDIwLCAweDAwMDEsIDB4MDAyMSwgMHgwMDAyLCAweDAwMjIsIDB4MDAwMywgMHgwMDIzLCAweDAwMDQsCisgICAgMHgwMDI0LCAweDAwMDUsIDB4MDAyNSwgMHgwMDA2LCAweDAwMjYsIDB4MDAwNywgMHgwMDI3LCAweDAwMDgsCisgICAgMHgwMDI4LCAweDAwMDksIDB4MDAyOSwgMHgwMDBBLCAweDAwMkEsIDB4MDAwQiwgMHgwMDJCLCAweDAwMEMsCisgICAgMHgwMDJDLCAweDAwMEQsIDB4MDAyRCwgMHgwMDBFLCAweDAwMkUsIDB4MDAwRiwgMHgwMDJGLCAweDAwMTAsCisgICAgMHgwMDMwLCAweDAwMTEsIDB4MDAzMSwgMHgwMDEyLCAweDAwMzIsIDB4MDAxMywgMHgwMDMzLCAweDAwMTQsCisgICAgMHgwMDM0LCAweDAwMTUsIDB4MDAzNSwgMHgwMDE2LCAweDAwMzYsIDB4MDAxNywgMHgwMDM3LCAweDAwMTgsCisgICAgMHgwMDM4LCAweDAwMTksIDB4MDAzOSwgMHgwMDFBLCAweDAwM0EsIDB4MDAxQiwgMHgwMDNCLCAweDAwMUMsCisgICAgMHgwMDNDLCAweDAwMUQsIDB4MDAzRCwgMHgwMDFFLCAweDAwM0UsIDB4MDAxRiwgMHgwMDNGLCAweDAwMjAsCisgICAgMHgwMDQwLCAweDAwMjEsIDB4MDA0MSwgMHgwMDIyLCAweDAwNDIsIDB4MDAyMywgMHgwMDQzLCAweDAwMjQsCisgICAgMHgwMDQ0LCAweDAwMjUsIDB4MDA0NSwgMHgwMDI2LCAweDAwNDYsIDB4MDAyNywgMHgwMDQ3LCAweDAwMjgsCisgICAgMHgwMDQ4LCAweDAwMjksIDB4MDA0OSwgMHgwMDJBLCAweDAwNEEsIDB4MDAyQiwgMHgwMDRCLCAweDAwMkMsCisgICAgMHgwMDRDLCAweDAwMkQsIDB4MDA0RCwgMHgwMDJFLCAweDAwNEUsIDB4MDAyRiwgMHgwMDRGLCAweDAwMzAsCisgICAgMHgwMDUwLCAweDAwMzEsIDB4MDA1MSwgMHgwMDMyLCAweDAwNTIsIDB4MDAzMywgMHgwMDUzLCAweDAwMzQsCisgICAgMHgwMDU0LCAweDAwMzUsIDB4MDA1NSwgMHgwMDM2LCAweDAwNTYsIDB4MDAzNywgMHgwMDU3LCAweDAwMzgsCisgICAgMHgwMDU4LCAweDAwMzksIDB4MDA1OSwgMHgwMDNBLCAweDAwNUEsIDB4MDAzQiwgMHgwMDVCLCAweDAwM0MsCisgICAgMHgwMDVDLCAweDAwNjEsIDB4MDA1RCwgMHgwMDNFLCAweDAwNUUsIDB4MDAzRiwgMHgwMDVGLCAweDAwNDAsCisgICAgMHgwMDYwLCAweDAwNDEsIDB4MDA2MSwgMHgwMDQyLCAweDAwNjIsIDB4MDA0MywgMHgwMDYzLCAweDAwNDQsCisgICAgMHgwMDY0LCAweDAwNDUsIDB4MDA2NSwgMHgwMDQ2LCAweDAwNjYsIDB4MDA0NywgMHgwMDY3LCAweDAwNDgsCisgICAgMHgwMDY4LCAweDAwNDksIDB4MDA2OSwgMHgwMDRBLCAweDAwNkEsIDB4MDA0QiwgMHgwMDZCLCAweDAwNEMsCisgICAgMHgwMDZDLCAweDAwNEQsIDB4MDA2RCwgMHgwMDRFLCAweDAwNkUsIDB4MDA0RiwgMHgwMDZGLCAweDAwNTAsCisgICAgMHgwMDcwLCAweDAwNTEsIDB4MDA3MSwgMHgwMDUyLCAweDAwNzIsIDB4MDA1MywgMHgwMDczLCAweDAwNTQsCisgICAgMHgwMDc0LCAweDAwNTUsIDB4MDA3NSwgMHgwMDU2LCAweDAwNzYsIDB4MDA1NywgMHgwMDc3LCAweDAwNTgsCisgICAgMHgwMDc4LCAweDAwNTksIDB4MDA3OSwgMHgwMDVBLCAweDAwN0EsIDB4MDA1QiwgMHgwMDdCLCAweDAwNUMsCisgICAgMHgwMDdDLCAweDAwNUQsIDB4MDA3RCwgMHgwMDVFLCAweDAwN0UsIDB4MDA1RiwgMHgwMEExLCAweDAwNjUsCisgICAgMHgwMEEyLCAweDAwNjYsIDB4MDBBMywgMHgwMDY3LCAweDAwQTQsIDB4MDA2QiwgMHgwMEE1LCAweDAwM0QsCisgICAgMHgwMEE2LCAweDAwNjMsIDB4MDBBNywgMHgwMkQwLCAweDAwQTgsIDB4MDI4NywgMHgwMEE5LCAweDAwOTgsCisgICAgMHgwMEFBLCAweDAwOEMsIDB4MDBBQiwgMHgwMDZELCAweDAwQUMsIDB4MDA5OSwgMHgwMEFELCAweDAwOTcsCisgICAgMHgwMEFFLCAweDAwOUEsIDB4MDBBRiwgMHgwMDgxLCAweDAwQjAsIDB4MDJDMywgMHgwMEIxLCAweDAyQjYsCisgICAgMHgwMEIyLCAweDAwOUQsIDB4MDBCMywgMHgwMDlFLCAweDAwQjQsIDB4MDI4NSwgMHgwMEI1LCAweDAwOUYsCisgICAgMHgwMEI2LCAweDAzMEEsIDB4MDBCNywgMHgwMDc1LCAweDAwQjgsIDB4MDA4NiwgMHgwMEI5LCAweDAwQTAsCisgICAgMHgwMEJBLCAweDAwOTAsIDB4MDBCQiwgMHgwMDdCLCAweDAwQkMsIDB4MDBBMSwgMHgwMEJELCAweDAwQTIsCisgICAgMHgwMEJFLCAweDAwQTMsIDB4MDBCRiwgMHgwMDdFLCAweDAwQzAsIDB4MDBBNCwgMHgwMEMxLCAweDAwQTUsCisgICAgMHgwMEMyLCAweDAwQTYsIDB4MDBDMywgMHgwMEE3LCAweDAwQzQsIDB4MDBBOCwgMHgwMEM1LCAweDAwQTksCisgICAgMHgwMEM2LCAweDAwOEIsIDB4MDBDNywgMHgwMEFBLCAweDAwQzgsIDB4MDBBQiwgMHgwMEM5LCAweDAwQUMsCisgICAgMHgwMENBLCAweDAwQUQsIDB4MDBDQiwgMHgwMEFFLCAweDAwQ0MsIDB4MDBBRiwgMHgwMENELCAweDAwQjAsCisgICAgMHgwMENFLCAweDAwQjEsIDB4MDBDRiwgMHgwMEIyLCAweDAwRDAsIDB4MDBCMywgMHgwMEQxLCAweDAwQjQsCisgICAgMHgwMEQyLCAweDAwQjUsIDB4MDBEMywgMHgwMEI2LCAweDAwRDQsIDB4MDBCNywgMHgwMEQ1LCAweDAwQjgsCisgICAgMHgwMEQ2LCAweDAwQjksIDB4MDBENywgMHgwMkI3LCAweDAwRDgsIDB4MDA4RSwgMHgwMEQ5LCAweDAwQkIsCisgICAgMHgwMERBLCAweDAwQkMsIDB4MDBEQiwgMHgwMEJELCAweDAwREMsIDB4MDBCRSwgMHgwMERELCAweDAwQkYsCisgICAgMHgwMERFLCAweDAwQzAsIDB4MDBERiwgMHgwMDk2LCAweDAwRTAsIDB4MDBDMSwgMHgwMEUxLCAweDAwQzIsCisgICAgMHgwMEUyLCAweDAwQzMsIDB4MDBFMywgMHgwMEM0LCAweDAwRTQsIDB4MDBDNSwgMHgwMEU1LCAweDAwQzYsCisgICAgMHgwMEU2LCAweDAwOTEsIDB4MDBFNywgMHgwMEM3LCAweDAwRTgsIDB4MDBDOCwgMHgwMEU5LCAweDAwQzksCisgICAgMHgwMEVBLCAweDAwQ0EsIDB4MDBFQiwgMHgwMENCLCAweDAwRUMsIDB4MDBDQywgMHgwMEVELCAweDAwQ0QsCisgICAgMHgwMEVFLCAweDAwQ0UsIDB4MDBFRiwgMHgwMENGLCAweDAwRjAsIDB4MDBEMCwgMHgwMEYxLCAweDAwRDEsCisgICAgMHgwMEYyLCAweDAwRDIsIDB4MDBGMywgMHgwMEQzLCAweDAwRjQsIDB4MDBENCwgMHgwMEY1LCAweDAwRDUsCisgICAgMHgwMEY2LCAweDAwRDYsIDB4MDBGNywgMHgwMkI4LCAweDAwRjgsIDB4MDA5NCwgMHgwMEY5LCAweDAwRDgsCisgICAgMHgwMEZBLCAweDAwRDksIDB4MDBGQiwgMHgwMERBLCAweDAwRkMsIDB4MDBEQiwgMHgwMEZELCAweDAwREMsCisgICAgMHgwMEZFLCAweDAwREQsIDB4MDBGRiwgMHgwMERFLCAweDAxMDAsIDB4MjQ5NiwgMHgwMTAxLCAweDI0OTEsCisgICAgMHgwMTEyLCAweDI0OTksIDB4MDExMywgMHgyNDk0LCAweDAxMUEsIDB4MjRCMywgMHgwMTFCLCAweDI0QkYsCisgICAgMHgwMTI3LCAweDJGM0MsIDB4MDEyOCwgMHgyNEI4LCAweDAxMjksIDB4MjRDNCwgMHgwMTJBLCAweDI0OTcsCisgICAgMHgwMTJCLCAweDI0OTIsIDB4MDEzMSwgMHgwMDkyLCAweDAxNDEsIDB4MDA4RCwgMHgwMTQyLCAweDAwOTMsCisgICAgMHgwMTRCLCAweDI0REMsIDB4MDE0QywgMHgyNDlBLCAweDAxNEQsIDB4MjQ5NSwgMHgwMTUyLCAweDAwOEYsCisgICAgMHgwMTUzLCAweDAwOTUsIDB4MDE2MCwgMHgwMERGLCAweDAxNjEsIDB4MDBFMywgMHgwMTY4LCAweDI0QkQsCisgICAgMHgwMTY5LCAweDI0QzksIDB4MDE2QSwgMHgyNDk4LCAweDAxNkIsIDB4MjQ5MywgMHgwMTZFLCAweDI0QkMsCisgICAgMHgwMTZGLCAweDI0QzgsIDB4MDE3OCwgMHgwMEUwLCAweDAxN0QsIDB4MDBFMSwgMHgwMTdFLCAweDAwRTUsCisgICAgMHgwMUMwLCAweDAwNjMsIDB4MDFDRCwgMHgyNEIyLCAweDAxQ0UsIDB4MjRCRSwgMHgwMUNGLCAweDI0QjYsCisgICAgMHgwMUQwLCAweDI0QzIsIDB4MDFEMSwgMHgyNEI5LCAweDAxRDIsIDB4MjRDNSwgMHgwMUQzLCAweDI0QkIsCisgICAgMHgwMUQ0LCAweDI0QzcsIDB4MDFGRCwgMHgyNENELCAweDAyNTEsIDB4MjRDQSwgMHgwMjU0LCAweDI0Q0YsCisgICAgMHgwMjU5LCAweDI0RDIsIDB4MDI1QSwgMHgyNEQ1LCAweDAyNUIsIDB4MjREOCwgMHgwMjc1LCAweDI0REQsCisgICAgMHgwMjgzLCAweDI0RTIsIDB4MDI4QywgMHgyNERFLCAweDAyOTIsIDB4MjRFMSwgMHgwMkQwLCAweDI0RTMsCisgICAgMHgwMzAwLCAweDAwNDEsIDB4MDMwMSwgMHgwMDdGLCAweDAzMDIsIDB4MDA4MCwgMHgwMzAzLCAweDAwNUYsCisgICAgMHgwMzA0LCAweDAwODEsIDB4MDMwNSwgMHgwMEUyLCAweDAzMDYsIDB4MDA4MiwgMHgwMzA3LCAweDAwODMsCisgICAgMHgwMzA4LCAweDAwODQsIDB4MDMwQSwgMHgwMDg1LCAweDAzMEIsIDB4MDA4NywgMHgwMzBDLCAweDAwODksCisgICAgMHgwMzI3LCAweDAwODYsIDB4MDMyOCwgMHgwMDg4LCAweDAzMzIsIDB4MDA0MCwgMHgwMzM2LCAweDAwOEEsCisgICAgMHgwMzYxLCAweDAyRjYsIDB4MDM5MSwgMHgwM0YzLCAweDAzOTIsIDB4MDNGNCwgMHgwMzkzLCAweDAzRjUsCisgICAgMHgwMzk0LCAweDAzRjYsIDB4MDM5NSwgMHgwM0Y3LCAweDAzOTYsIDB4MDNGOCwgMHgwMzk3LCAweDAzRjksCisgICAgMHgwMzk4LCAweDAzRkEsIDB4MDM5OSwgMHgwM0ZCLCAweDAzOUEsIDB4MDNGQywgMHgwMzlCLCAweDAzRkQsCisgICAgMHgwMzlDLCAweDAzRkUsIDB4MDM5RCwgMHgwM0ZGLCAweDAzOUUsIDB4MDQwMCwgMHgwMzlGLCAweDA0MDEsCisgICAgMHgwM0EwLCAweDA0MDIsIDB4MDNBMSwgMHgwNDAzLCAweDAzQTMsIDB4MDQwNCwgMHgwM0E0LCAweDA0MDUsCisgICAgMHgwM0E1LCAweDA0MDYsIDB4MDNBNiwgMHgwNDA3LCAweDAzQTcsIDB4MDQwOCwgMHgwM0E4LCAweDA0MDksCisgICAgMHgwM0E5LCAweDA0MEEsIDB4MDNCMSwgMHgwNDBCLCAweDAzQjIsIDB4MDQwQywgMHgwM0IzLCAweDA0MEQsCisgICAgMHgwM0I0LCAweDA0MEUsIDB4MDNCNSwgMHgwNDBGLCAweDAzQjYsIDB4MDQxMCwgMHgwM0I3LCAweDA0MTEsCisgICAgMHgwM0I4LCAweDA0MTIsIDB4MDNCOSwgMHgwNDEzLCAweDAzQkEsIDB4MDQxNCwgMHgwM0JCLCAweDA0MTUsCisgICAgMHgwM0JDLCAweDA0MTYsIDB4MDNCRCwgMHgwNDE3LCAweDAzQkUsIDB4MDQxOCwgMHgwM0JGLCAweDA0MTksCisgICAgMHgwM0MwLCAweDA0MUEsIDB4MDNDMSwgMHgwNDFCLCAweDAzQzMsIDB4MDQxQywgMHgwM0M0LCAweDA0MUQsCisgICAgMHgwM0M1LCAweDA0MUUsIDB4MDNDNiwgMHgwNDFGLCAweDAzQzcsIDB4MDQyMCwgMHgwM0M4LCAweDA0MjEsCisgICAgMHgwM0M5LCAweDA0MjIsIDB4MDNEMCwgMHgyRjNBLCAweDAzRDEsIDB4MkY0MCwgMHgwM0RCLCAweDJGM0YsCisgICAgMHgwNDAxLCAweDA0MjksIDB4MDQxMCwgMHgwNDIzLCAweDA0MTEsIDB4MDQyNCwgMHgwNDEyLCAweDA0MjUsCisgICAgMHgwNDEzLCAweDA0MjYsIDB4MDQxNCwgMHgwNDI3LCAweDA0MTUsIDB4MDQyOCwgMHgwNDE2LCAweDA0MkEsCisgICAgMHgwNDE3LCAweDA0MkIsIDB4MDQxOCwgMHgwNDJDLCAweDA0MTksIDB4MDQyRCwgMHgwNDFBLCAweDA0MkUsCisgICAgMHgwNDFCLCAweDA0MkYsIDB4MDQxQywgMHgwNDMwLCAweDA0MUQsIDB4MDQzMSwgMHgwNDFFLCAweDA0MzIsCisgICAgMHgwNDFGLCAweDA0MzMsIDB4MDQyMCwgMHgwNDM0LCAweDA0MjEsIDB4MDQzNSwgMHgwNDIyLCAweDA0MzYsCisgICAgMHgwNDIzLCAweDA0MzcsIDB4MDQyNCwgMHgwNDM4LCAweDA0MjUsIDB4MDQzOSwgMHgwNDI2LCAweDA0M0EsCisgICAgMHgwNDI3LCAweDA0M0IsIDB4MDQyOCwgMHgwNDNDLCAweDA0MjksIDB4MDQzRCwgMHgwNDJBLCAweDA0M0UsCisgICAgMHgwNDJCLCAweDA0M0YsIDB4MDQyQywgMHgwNDQwLCAweDA0MkQsIDB4MDQ0MSwgMHgwNDJFLCAweDA0NDIsCisgICAgMHgwNDJGLCAweDA0NDMsIDB4MDQzMCwgMHgwNDQ0LCAweDA0MzEsIDB4MDQ0NSwgMHgwNDMyLCAweDA0NDYsCisgICAgMHgwNDMzLCAweDA0NDcsIDB4MDQzNCwgMHgwNDQ4LCAweDA0MzUsIDB4MDQ0OSwgMHgwNDM2LCAweDA0NEIsCisgICAgMHgwNDM3LCAweDA0NEMsIDB4MDQzOCwgMHgwNDRELCAweDA0MzksIDB4MDQ0RSwgMHgwNDNBLCAweDA0NEYsCisgICAgMHgwNDNCLCAweDA0NTAsIDB4MDQzQywgMHgwNDUxLCAweDA0M0QsIDB4MDQ1MiwgMHgwNDNFLCAweDA0NTMsCisgICAgMHgwNDNGLCAweDA0NTQsIDB4MDQ0MCwgMHgwNDU1LCAweDA0NDEsIDB4MDQ1NiwgMHgwNDQyLCAweDA0NTcsCisgICAgMHgwNDQzLCAweDA0NTgsIDB4MDQ0NCwgMHgwNDU5LCAweDA0NDUsIDB4MDQ1QSwgMHgwNDQ2LCAweDA0NUIsCisgICAgMHgwNDQ3LCAweDA0NUMsIDB4MDQ0OCwgMHgwNDVELCAweDA0NDksIDB4MDQ1RSwgMHgwNDRBLCAweDA0NUYsCisgICAgMHgwNDRCLCAweDA0NjAsIDB4MDQ0QywgMHgwNDYxLCAweDA0NEQsIDB4MDQ2MiwgMHgwNDRFLCAweDA0NjMsCisgICAgMHgwNDRGLCAweDA0NjQsIDB4MDQ1MSwgMHgwNDRBLCAweDA0NUIsIDB4MkYzQywgMHgxRUJDLCAweDI0QjUsCisgICAgMHgxRUJELCAweDI0QzEsIDB4MjAwMiwgMHgwMEU3LCAweDIwMDMsIDB4MDI3OSwgMHgyMDEwLCAweDAyOTYsCisgICAgMHgyMDExLCAweDAwMEUsIDB4MjAxMiwgMHgwMDcyLCAweDIwMTMsIDB4MDA3MiwgMHgyMDE0LCAweDAwOEEsCisgICAgMHgyMDE1LCAweDAyOTUsIDB4MjAxNiwgMHgwMjlBLCAweDIwMTgsIDB4MDI5RSwgMHgyMDE5LCAweDAyOUYsCisgICAgMHgyMDFBLCAweDAwNzgsIDB4MjAxQywgMHgwMkEwLCAweDIwMUQsIDB4MDJBMSwgMHgyMDFFLCAweDAwNzksCisgICAgMHgyMDIwLCAweDAzMDgsIDB4MjAyMSwgMHgwMzA5LCAweDIwMjIsIDB4MDA3NywgMHgyMDI1LCAweDAyOUQsCisgICAgMHgyMDI2LCAweDAyOUMsIDB4MjAzMCwgMHgwMzA0LCAweDIwMzIsIDB4MDJDNCwgMHgyMDMzLCAweDAyQzUsCisgICAgMHgyMDM5LCAweDAwNkUsIDB4MjAzQSwgMHgwMDZGLCAweDIwM0IsIDB4MDJERSwgMHgyMDNDLCAweDJGNEYsCisgICAgMHgyMDNFLCAweDAxNDUsIDB4MjA0NCwgMHgwMDY4LCAweDIwNDksIDB4MkY1MCwgMHgyMDcwLCAweDI0QTEsCisgICAgMHgyMDc0LCAweDI0QTIsIDB4MjA3NSwgMHgyNEEzLCAweDIwNzYsIDB4MjRBNCwgMHgyMDc3LCAweDI0QTUsCisgICAgMHgyMDc4LCAweDI0QTYsIDB4MjA3OSwgMHgyNEE3LCAweDIwODAsIDB4MjRBOCwgMHgyMDgxLCAweDI0QTksCisgICAgMHgyMDgyLCAweDI0QUEsIDB4MjA4MywgMHgyNEFCLCAweDIwODQsIDB4MjRBQywgMHgyMDg1LCAweDI0QUQsCisgICAgMHgyMDg2LCAweDI0QUUsIDB4MjA4NywgMHgyNEFGLCAweDIwODgsIDB4MjRCMCwgMHgyMDg5LCAweDI0QjEsCisgICAgMHgyMEFDLCAweDI0OEEsIDB4MjBERCwgMHgwMzBCLCAweDIxMDAsIDB4MkU0RiwgMHgyMTAzLCAweDAyQzYsCisgICAgMHgyMTA1LCAweDJFNTMsIDB4MjEwOSwgMHgyMDcxLCAweDIxMEEsIDB4MjA3MCwgMHgyMTBGLCAweDJGM0MsCisgICAgMHgyMTEzLCAweDFGNTksIDB4MjExNiwgMHgxREJBLCAweDIxMjEsIDB4MUY3NywgMHgyMTIyLCAweDAwRTQsCisgICAgMHgyMTI2LCAweDI0OEIsIDB4MjEyQiwgMHgwMzAzLCAweDIxMzUsIDB4MkYzOSwgMHgyMTUzLCAweDI0OUYsCisgICAgMHgyMTU0LCAweDI0QTAsIDB4MjE1QiwgMHgyNDlCLCAweDIxNUMsIDB4MjQ5QywgMHgyMTVELCAweDI0OUQsCisgICAgMHgyMTVFLCAweDI0OUUsIDB4MjE2MCwgMHgxRDk3LCAweDIxNjEsIDB4MUQ5OCwgMHgyMTYyLCAweDFEOTksCisgICAgMHgyMTYzLCAweDFEOUEsIDB4MjE2NCwgMHgxRDlCLCAweDIxNjUsIDB4MUQ5QywgMHgyMTY2LCAweDFEOUQsCisgICAgMHgyMTY3LCAweDFEOUUsIDB4MjE2OCwgMHgxRDlGLCAweDIxNjksIDB4MURBMCwgMHgyMTZBLCAweDIwMjEsCisgICAgMHgyMTZCLCAweDIwMjIsIDB4MjE3MCwgMHgxRjlDLCAweDIxNzEsIDB4MUY5RCwgMHgyMTcyLCAweDFGOUUsCisgICAgMHgyMTczLCAweDFGOUYsIDB4MjE3NCwgMHgxRkEwLCAweDIxNzUsIDB4MUZBMSwgMHgyMTc2LCAweDFGQTIsCisgICAgMHgyMTc3LCAweDFGQTMsIDB4MjE3OCwgMHgxRkE0LCAweDIxNzksIDB4MUZBNSwgMHgyMTdBLCAweDIwNkEsCisgICAgMHgyMTdCLCAweDIwNkIsIDB4MjE3RiwgMHgyMDZGLCAweDIxOTAsIDB4MDJFMSwgMHgyMTkxLCAweDAyRTIsCisgICAgMHgyMTkyLCAweDAyRTAsIDB4MjE5MywgMHgwMkUzLCAweDIxOTQsIDB4MkZBOSwgMHgyMTk1LCAweDJGQjcsCisgICAgMHgyMTk2LCAweDJGQUMsIDB4MjE5NywgMHgyRkFELCAweDIxOTgsIDB4MkZBQSwgMHgyMTk5LCAweDJGQUIsCisgICAgMHgyMUM0LCAweDIwNzYsIDB4MjFDNSwgMHgyMDc3LCAweDIxQzYsIDB4MjA3NSwgMHgyMUNDLCAweDJGQUUsCisgICAgMHgyMUQwLCAweDJGQTgsIDB4MjFEMiwgMHgwMkYwLCAweDIxRDQsIDB4MDJGMSwgMHgyMUU2LCAweDFGNEQsCisgICAgMHgyMUU3LCAweDFGNEMsIDB4MjFFOCwgMHgxRjRFLCAweDIxRTksIDB4MUY0QiwgMHgyMjAwLCAweDAyRjIsCisgICAgMHgyMjAyLCAweDAyRjcsIDB4MjIwMywgMHgwMkYzLCAweDIyMDUsIDB4MkY5OCwgMHgyMjA3LCAweDAyRjgsCisgICAgMHgyMjA4LCAweDAyRTUsIDB4MjIwQSwgMHgyRjNCLCAweDIyMEIsIDB4MDJFNiwgMHgyMjExLCAweDFEQzksCisgICAgMHgyMjEyLCAweDAyQjUsIDB4MjIxMywgMHgyRjU2LCAweDIyMUEsIDB4MDJGRCwgMHgyMjFELCAweDAyRkYsCisgICAgMHgyMjFFLCAweDAyQkYsIDB4MjIxRiwgMHgxRENELCAweDIyMjAsIDB4MDJGNCwgMHgyMjI1LCAweDAyOUEsCisgICAgMHgyMjI3LCAweDAyRUQsIDB4MjIyOCwgMHgwMkVFLCAweDIyMjksIDB4MDJFQywgMHgyMjJBLCAweDAyRUIsCisgICAgMHgyMjJCLCAweDAzMDEsIDB4MjIyQywgMHgwMzAyLCAweDIyMkQsIDB4MjAwMywgMHgyMjJFLCAweDFEQzgsCisgICAgMHgyMjM0LCAweDAyQzAsIDB4MjIzNSwgMHgwMzAwLCAweDIyM0MsIDB4MDI5OSwgMHgyMjNELCAweDAyRkUsCisgICAgMHgyMjQzLCAweDJGNTgsIDB4MjI1MiwgMHgwMkZBLCAweDIyNjAsIDB4MDJCQSwgMHgyMjYxLCAweDAyRjksCisgICAgMHgyMjY2LCAweDAyQkQsIDB4MjI2NywgMHgwMkJFLCAweDIyNkEsIDB4MDJGQiwgMHgyMjZCLCAweDAyRkMsCisgICAgMHgyMjcyLCAweDJGNTksIDB4MjI3MywgMHgyRjVBLCAweDIyODIsIDB4MDJFOSwgMHgyMjgzLCAweDAyRUEsCisgICAgMHgyMjg2LCAweDAyRTcsIDB4MjI4NywgMHgwMkU4LCAweDIyOTUsIDB4MkY5QywgMHgyMjk2LCAweDJGOUEsCisgICAgMHgyMjk3LCAweDJGOUQsIDB4MjI5OCwgMHgyRjlCLCAweDIyOUQsIDB4MkY5QSwgMHgyMjlFLCAweDJGOUUsCisgICAgMHgyMkEwLCAweDJGOTksIDB4MjJBNSwgMHgwMkY1LCAweDIyQkYsIDB4MURDRSwgMHgyMkVFLCAweDFFRDksCisgICAgMHgyMkVGLCAweDAyOUMsIDB4MjMwMCwgMHgyRjk4LCAweDIzMDcsIDB4MkZCQiwgMHgyMzEyLCAweDAyRjYsCisgICAgMHgyNDRBLCAweDJGNTQsIDB4MjQ2MCwgMHgxRDgzLCAweDI0NjEsIDB4MUQ4NCwgMHgyNDYyLCAweDFEODUsCisgICAgMHgyNDYzLCAweDFEODYsIDB4MjQ2NCwgMHgxRDg3LCAweDI0NjUsIDB4MUQ4OCwgMHgyNDY2LCAweDFEODksCisgICAgMHgyNDY3LCAweDFEOEEsIDB4MjQ2OCwgMHgxRDhCLCAweDI0NjksIDB4MUQ4QywgMHgyNDZBLCAweDFEOEQsCisgICAgMHgyNDZCLCAweDFEOEUsIDB4MjQ2QywgMHgxRDhGLCAweDI0NkQsIDB4MUQ5MCwgMHgyNDZFLCAweDFEOTEsCisgICAgMHgyNDZGLCAweDFEOTIsIDB4MjQ3MCwgMHgxRDkzLCAweDI0NzEsIDB4MUQ5NCwgMHgyNDcyLCAweDFEOTUsCisgICAgMHgyNDczLCAweDFEOTYsIDB4MjQ3NCwgMHgxRjg3LCAweDI0NzUsIDB4MUY4OCwgMHgyNDc2LCAweDFGODksCisgICAgMHgyNDc3LCAweDFGOEEsIDB4MjQ3OCwgMHgxRjhCLCAweDI0NzksIDB4MUY4QywgMHgyNDdBLCAweDFGOEQsCisgICAgMHgyNDdCLCAweDFGOEUsIDB4MjQ3QywgMHgxRjhGLCAweDI0N0QsIDB4MUY5MCwgMHgyNDdFLCAweDFGOTEsCisgICAgMHgyNDdGLCAweDFGOTIsIDB4MjQ4MCwgMHgxRjkzLCAweDI0ODEsIDB4MUY5NCwgMHgyNDgyLCAweDFGOTUsCisgICAgMHgyNDgzLCAweDFGOTYsIDB4MjQ4NCwgMHgxRjk3LCAweDI0ODUsIDB4MUY5OCwgMHgyNDg2LCAweDFGOTksCisgICAgMHgyNDg3LCAweDFGOUEsIDB4MjQ4OCwgMHgxRjdFLCAweDI0ODksIDB4MUY3RiwgMHgyNDhBLCAweDFGODAsCisgICAgMHgyNDhCLCAweDFGODEsIDB4MjQ4QywgMHgxRjgyLCAweDI0OEQsIDB4MUY4MywgMHgyNDhFLCAweDFGODQsCisgICAgMHgyNDhGLCAweDFGODUsIDB4MjQ5MCwgMHgxRjg2LCAweDI0OUMsIDB4MUZCMCwgMHgyNDlELCAweDFGQjEsCisgICAgMHgyNDlFLCAweDFGQjIsIDB4MjQ5RiwgMHgxRkIzLCAweDI0QTAsIDB4MUZCNCwgMHgyNEExLCAweDFGQjUsCisgICAgMHgyNEEyLCAweDFGQjYsIDB4MjRBMywgMHgxRkI3LCAweDI0QTQsIDB4MUZCOCwgMHgyNEE1LCAweDFGQjksCisgICAgMHgyNEE2LCAweDFGQkEsIDB4MjRBNywgMHgxRkJCLCAweDI0QTgsIDB4MUZCQywgMHgyNEE5LCAweDFGQkQsCisgICAgMHgyNEFBLCAweDFGQkUsIDB4MjRBQiwgMHgxRkJGLCAweDI0QUMsIDB4MUZDMCwgMHgyNEFELCAweDFGQzEsCisgICAgMHgyNEFFLCAweDFGQzIsIDB4MjRBRiwgMHgxRkMzLCAweDI0QjAsIDB4MUZDNCwgMHgyNEIxLCAweDFGQzUsCisgICAgMHgyNEIyLCAweDFGQzYsIDB4MjRCMywgMHgxRkM3LCAweDI0QjQsIDB4MUZDOCwgMHgyNEI1LCAweDFGQzksCisgICAgMHgyNEI2LCAweDI4NjMsIDB4MjRCNywgMHgyODY0LCAweDI0QjgsIDB4Mjg2NSwgMHgyNEI5LCAweDI4NjYsCisgICAgMHgyNEJBLCAweDI4NjcsIDB4MjRCQiwgMHgyODY4LCAweDI0QkMsIDB4Mjg2OSwgMHgyNEJELCAweDI4NkEsCisgICAgMHgyNEJFLCAweDI4NkIsIDB4MjRCRiwgMHgyODZDLCAweDI0QzAsIDB4Mjg2RCwgMHgyNEMxLCAweDI4NkUsCisgICAgMHgyNEMyLCAweDI4NkYsIDB4MjRDMywgMHgyODcwLCAweDI0QzQsIDB4Mjg3MSwgMHgyNEM1LCAweDI4NzIsCisgICAgMHgyNEM2LCAweDI4NzMsIDB4MjRDNywgMHgyODc0LCAweDI0QzgsIDB4Mjg3NSwgMHgyNEM5LCAweDI4NzYsCisgICAgMHgyNENBLCAweDI4NzcsIDB4MjRDQiwgMHgyODc4LCAweDI0Q0MsIDB4Mjg3OSwgMHgyNENELCAweDI4N0EsCisgICAgMHgyNENFLCAweDI4N0IsIDB4MjRDRiwgMHgyODdDLCAweDI0RDAsIDB4Mjg0OSwgMHgyNEQxLCAweDI4NEEsCisgICAgMHgyNEQyLCAweDI4NEIsIDB4MjREMywgMHgyODRDLCAweDI0RDQsIDB4Mjg0RCwgMHgyNEQ1LCAweDI4NEUsCisgICAgMHgyNEQ2LCAweDI4NEYsIDB4MjRENywgMHgyODUwLCAweDI0RDgsIDB4Mjg1MSwgMHgyNEQ5LCAweDI4NTIsCisgICAgMHgyNERBLCAweDI4NTMsIDB4MjREQiwgMHgyODU0LCAweDI0REMsIDB4Mjg1NSwgMHgyNERELCAweDI4NTYsCisgICAgMHgyNERFLCAweDI4NTcsIDB4MjRERiwgMHgyODU4LCAweDI0RTAsIDB4Mjg1OSwgMHgyNEUxLCAweDI4NUEsCisgICAgMHgyNEUyLCAweDI4NUIsIDB4MjRFMywgMHgyODVDLCAweDI0RTQsIDB4Mjg1RCwgMHgyNEU1LCAweDI4NUUsCisgICAgMHgyNEU2LCAweDI4NUYsIDB4MjRFNywgMHgyODYwLCAweDI0RTgsIDB4Mjg2MSwgMHgyNEU5LCAweDI4NjIsCisgICAgMHgyNEVBLCAweDIwMjAsIDB4MjUwMCwgMHgxRDM3LCAweDI1MDEsIDB4MUQzOCwgMHgyNTAyLCAweDFEMzksCisgICAgMHgyNTAzLCAweDFEM0EsIDB4MjUwNCwgMHgxRDNCLCAweDI1MDUsIDB4MUQzQywgMHgyNTA2LCAweDFEM0QsCisgICAgMHgyNTA3LCAweDFEM0UsIDB4MjUwOCwgMHgxRDNGLCAweDI1MDksIDB4MUQ0MCwgMHgyNTBBLCAweDFENDEsCisgICAgMHgyNTBCLCAweDFENDIsIDB4MjUwQywgMHgxRDQzLCAweDI1MEQsIDB4MUQ0NCwgMHgyNTBFLCAweDFENDUsCisgICAgMHgyNTBGLCAweDFENDYsIDB4MjUxMCwgMHgxRDQ3LCAweDI1MTEsIDB4MUQ0OCwgMHgyNTEyLCAweDFENDksCisgICAgMHgyNTEzLCAweDFENEEsIDB4MjUxNCwgMHgxRDRCLCAweDI1MTUsIDB4MUQ0QywgMHgyNTE2LCAweDFENEQsCisgICAgMHgyNTE3LCAweDFENEUsIDB4MjUxOCwgMHgxRDRGLCAweDI1MTksIDB4MUQ1MCwgMHgyNTFBLCAweDFENTEsCisgICAgMHgyNTFCLCAweDFENTIsIDB4MjUxQywgMHgxRDUzLCAweDI1MUQsIDB4MUQ1NCwgMHgyNTFFLCAweDFENTUsCisgICAgMHgyNTFGLCAweDFENTYsIDB4MjUyMCwgMHgxRDU3LCAweDI1MjEsIDB4MUQ1OCwgMHgyNTIyLCAweDFENTksCisgICAgMHgyNTIzLCAweDFENUEsIDB4MjUyNCwgMHgxRDVCLCAweDI1MjUsIDB4MUQ1QywgMHgyNTI2LCAweDFENUQsCisgICAgMHgyNTI3LCAweDFENUUsIDB4MjUyOCwgMHgxRDVGLCAweDI1MjksIDB4MUQ2MCwgMHgyNTJBLCAweDFENjEsCisgICAgMHgyNTJCLCAweDFENjIsIDB4MjUyQywgMHgxRDYzLCAweDI1MkQsIDB4MUQ2NCwgMHgyNTJFLCAweDFENjUsCisgICAgMHgyNTJGLCAweDFENjYsIDB4MjUzMCwgMHgxRDY3LCAweDI1MzEsIDB4MUQ2OCwgMHgyNTMyLCAweDFENjksCisgICAgMHgyNTMzLCAweDFENkEsIDB4MjUzNCwgMHgxRDZCLCAweDI1MzUsIDB4MUQ2QywgMHgyNTM2LCAweDFENkQsCisgICAgMHgyNTM3LCAweDFENkUsIDB4MjUzOCwgMHgxRDZGLCAweDI1MzksIDB4MUQ3MCwgMHgyNTNBLCAweDFENzEsCisgICAgMHgyNTNCLCAweDFENzIsIDB4MjUzQywgMHgxRDczLCAweDI1M0QsIDB4MUQ3NCwgMHgyNTNFLCAweDFENzUsCisgICAgMHgyNTNGLCAweDFENzYsIDB4MjU0MCwgMHgxRDc3LCAweDI1NDEsIDB4MUQ3OCwgMHgyNTQyLCAweDFENzksCisgICAgMHgyNTQzLCAweDFEN0EsIDB4MjU0NCwgMHgxRDdCLCAweDI1NDUsIDB4MUQ3QywgMHgyNTQ2LCAweDFEN0QsCisgICAgMHgyNTQ3LCAweDFEN0UsIDB4MjU0OCwgMHgxRDdGLCAweDI1NDksIDB4MUQ4MCwgMHgyNTRBLCAweDFEODEsCisgICAgMHgyNTRCLCAweDFEODIsIDB4MjU1MCwgMHgyMDNCLCAweDI1NUUsIDB4MjAzQywgMHgyNTYxLCAweDIwM0UsCisgICAgMHgyNTZBLCAweDIwM0QsIDB4MjU2RCwgMHgyMDM3LCAweDI1NkUsIDB4MjAzOCwgMHgyNTZGLCAweDIwM0EsCisgICAgMHgyNTcwLCAweDIwMzksIDB4MjU3MSwgMHgyMDQ1LCAweDI1NzIsIDB4MjA0NiwgMHgyNTczLCAweDIwNDcsCisgICAgMHgyNTgxLCAweDIwMjYsIDB4MjU4MiwgMHgyMDI3LCAweDI1ODMsIDB4MjAyOCwgMHgyNTg0LCAweDIwMjksCisgICAgMHgyNTg1LCAweDIwMkEsIDB4MjU4NiwgMHgyMDJCLCAweDI1ODcsIDB4MjAyQywgMHgyNTg4LCAweDIwMkQsCisgICAgMHgyNTg5LCAweDIwMzQsIDB4MjU4QSwgMHgyMDMzLCAweDI1OEIsIDB4MjAzMiwgMHgyNThDLCAweDIwMzEsCisgICAgMHgyNThELCAweDIwMzAsIDB4MjU4RSwgMHgyMDJGLCAweDI1OEYsIDB4MjAyRSwgMHgyNTk0LCAweDIwMzUsCisgICAgMHgyNTk1LCAweDIwMzYsIDB4MjVBMCwgMHgwMkQ5LCAweDI1QTEsIDB4MDJEOCwgMHgyNUEyLCAweDFGNEYsCisgICAgMHgyNUFBLCAweDJGQ0YsIDB4MjVBQiwgMHgyRkNELCAweDI1QjIsIDB4MDJEQiwgMHgyNUIzLCAweDAyREEsCisgICAgMHgyNUI2LCAweDJGQTMsIDB4MjVCNywgMHgxRjRBLCAweDI1QkMsIDB4MDJERCwgMHgyNUJELCAweDAyREMsCisgICAgMHgyNUMwLCAweDJGQTIsIDB4MjVDMSwgMHgxRjQ5LCAweDI1QzYsIDB4MDJENywgMHgyNUM3LCAweDAyRDYsCisgICAgMHgyNUM5LCAweDIwMTIsIDB4MjVDQiwgMHgwMkQzLCAweDI1Q0MsIDB4MjkwNiwgMHgyNUNFLCAweDAyRDUsCisgICAgMHgyNUNGLCAweDAyRDQsIDB4MjVFMiwgMHgyMDNGLCAweDI1RTMsIDB4MjA0MCwgMHgyNUU0LCAweDIwNDIsCisgICAgMHgyNUU1LCAweDIwNDEsIDB4MjVFNiwgMHgyRkRFLCAweDI1RUYsIDB4MDMwQiwgMHgyNjAwLCAweDIwMTcsCisgICAgMHgyNjAxLCAweDIwMTgsIDB4MjYwMiwgMHgyMDE5LCAweDI2MDMsIDB4MjAxQSwgMHgyNjA1LCAweDAyRDIsCisgICAgMHgyNjA2LCAweDAyRDEsIDB4MjYwRSwgMHgxRjc4LCAweDI2MTIsIDB4MkY5OSwgMHgyNjFDLCAweDIwMUMsCisgICAgMHgyNjFELCAweDIwMUQsIDB4MjYxRSwgMHgyMDFCLCAweDI2MUYsIDB4MjAxRSwgMHgyNjQwLCAweDAyQzIsCisgICAgMHgyNjQyLCAweDAyQzEsIDB4MjY2MCwgMHgyMDEzLCAweDI2NjEsIDB4MUY1MSwgMHgyNjYyLCAweDFGNTMsCisgICAgMHgyNjYzLCAweDIwMTUsIDB4MjY2NCwgMHgxRjUyLCAweDI2NjUsIDB4MjAxNCwgMHgyNjY2LCAweDIwMTYsCisgICAgMHgyNjY3LCAweDFGNTAsIDB4MjY2OCwgMHgyRjQyLCAweDI2NjksIDB4MkY0MywgMHgyNjZBLCAweDAzMDcsCisgICAgMHgyNjZDLCAweDJGNDQsIDB4MjY2RCwgMHgwMzA2LCAweDI2NkYsIDB4MDMwNSwgMHgyNzAyLCAweDJGOTAsCisgICAgMHgyNzFBLCAweDJGRDEsIDB4Mjc1NiwgMHgyRkUzLCAweDI3NzYsIDB4MjA1RSwgMHgyNzc3LCAweDIwNUYsCisgICAgMHgyNzc4LCAweDIwNjAsIDB4Mjc3OSwgMHgyMDYxLCAweDI3N0EsIDB4MjA2MiwgMHgyNzdCLCAweDIwNjMsCisgICAgMHgyNzdDLCAweDIwNjQsIDB4Mjc3RCwgMHgyMDY1LCAweDI3N0UsIDB4MjA2NiwgMHgyN0ExLCAweDIwMEUsCisgICAgMHgyRTgzLCAweDM3RTEsIDB4MkU4NSwgMHgzNjIwLCAweDJFODcsIDB4MzcxOSwgMHgyRTg5LCAweDM4MTQsCisgICAgMHgyRThCLCAweDM3MUUsIDB4MkU4QywgMHgzNjA5LCAweDJFOEQsIDB4MzYwQSwgMHgyRThFLCAweDEwNzEsCisgICAgMHgyRThGLCAweDM4OEMsIDB4MkU5MCwgMHgxMjI2LCAweDJFOTIsIDB4MEVCMiwgMHgyRTkzLCAweDEyODMsCisgICAgMHgyRTk0LCAweDEyQUIsIDB4MkU5NSwgMHgzQzFGLCAweDJFOTYsIDB4MzhDMiwgMHgyRTk3LCAweDM2MUMsCisgICAgMHgyRTk4LCAweDM4RTEsIDB4MkU5OSwgMHgxM0MzLCAweDJFOUIsIDB4MTNFMSwgMHgyRTlGLCAweDBFM0MsCisgICAgMHgyRUEwLCAweDBFQkQsIDB4MkVBMSwgMHgzOTYxLCAweDJFQTIsIDB4Mzk2MiwgMHgyRUEzLCAweDM5OUQsCisgICAgMHgyRUE0LCAweDNDMjYsIDB4MkVBNiwgMHgzNzRELCAweDJFQTgsIDB4MzlCQywgMHgyRUE5LCAweDM1QTEsCisgICAgMHgyRUFBLCAweDM2QUIsIDB4MkVBQiwgMHgzQTk3LCAweDJFQUMsIDB4MDhENCwgMHgyRUFELCAweDNBMzksCisgICAgMHgyRUFFLCAweDM2NjIsIDB4MkVCMSwgMHgzQTk4LCAweDJFQjIsIDB4M0E5NywgMHgyRUIzLCAweDM3NkQsCisgICAgMHgyRUI3LCAweDM2RkUsIDB4MkVCOSwgMHgzNzEzLCAweDJFQkMsIDB4MzVCMywgMHgyRUJELCAweDM1NEUsCisgICAgMHgyRUJFLCAweDM3NzUsIDB4MkVCRiwgMHgzNzc2LCAweDJFQzAsIDB4Mzc3NywgMHgyRUMxLCAweDA3OEIsCisgICAgMHgyRUMyLCAweDNCMEEsIDB4MkVDMywgMHgzNjJFLCAweDJFQzQsIDB4MEE2MiwgMHgyRUM2LCAweDM1NzIsCisgICAgMHgyRUNBLCAweDM2NEEsIDB4MkVDQywgMHgzQzJCLCAweDJFQ0QsIDB4M0I1MCwgMHgyRUNGLCAweDNCOUUsCisgICAgMHgyRUQxLCAweDBCRDUsIDB4MkVEMiwgMHgzQjk3LCAweDJFRDYsIDB4M0I5RSwgMHgyRUQ3LCAweDM1NEQsCisgICAgMHgyRUQ4LCAweDBBNjgsIDB4MkVERCwgMHgzNjE3LCAweDJFREUsIDB4MzYxOSwgMHgyRURGLCAweDM2MTgsCisgICAgMHgyRUU0LCAweDA2NEUsIDB4MkVFOCwgMHgwRDM0LCAweDJFRTksIDB4MDUyQiwgMHgyRUVCLCAweDBBNkEsCisgICAgMHgyRUVELCAweDA4QzMsIDB4MkVFRiwgMHgwRjdELCAweDJFRjIsIDB4MDY0RiwgMHgyRjAwLCAweDA0QjAsCisgICAgMHgyRjAxLCAweDIwQjMsIDB4MkYwMiwgMHgwRkZGLCAweDJGMDMsIDB4MTAwMSwgMHgyRjA0LCAweDA1MzUsCisgICAgMHgyRjA1LCAweDEwMDYsIDB4MkYwNiwgMHgwQ0NCLCAweDJGMDcsIDB4MTAwRSwgMHgyRjA4LCAweDBBMTMsCisgICAgMHgyRjA5LCAweDEwNzAsIDB4MkYwQSwgMHgwQ0Q2LCAweDJGMEIsIDB4MEQ0MCwgMHgyRjBDLCAweDEwN0IsCisgICAgMHgyRjBELCAweDEwODMsIDB4MkYwRSwgMHgxMDg5LCAweDJGMEYsIDB4MTA5MywgMHgyRjEwLCAweDEwOTgsCisgICAgMHgyRjExLCAweDBDNUIsIDB4MkYxMiwgMHgwRjk3LCAweDJGMTMsIDB4MTBDNiwgMHgyRjE0LCAweDEwQ0QsCisgICAgMHgyRjE1LCAweDEwQ0UsIDB4MkYxNiwgMHgxMEQzLCAweDJGMTcsIDB4MDk0NywgMHgyRjE4LCAweDBFN0MsCisgICAgMHgyRjE5LCAweDEwREMsIDB4MkYxQSwgMHgxMEUxLCAweDJGMUIsIDB4MTBFOCwgMHgyRjFDLCAweDBFQTIsCisgICAgMHgyRjFELCAweDA3QjEsIDB4MkYxRSwgMHgxMTZCLCAweDJGMUYsIDB4MEM1NCwgMHgyRjIwLCAweDA4OUMsCisgICAgMHgyRjIxLCAweDExQkEsIDB4MkYyMiwgMHgxMUJCLCAweDJGMjMsIDB4MEYyNiwgMHgyRjI0LCAweDBCNDcsCisgICAgMHgyRjI1LCAweDA5ODEsIDB4MkYyNiwgMHgwOEEwLCAweDJGMjcsIDB4MTIwRSwgMHgyRjI4LCAweDBBNDcsCisgICAgMHgyRjI5LCAweDA5OTYsIDB4MkYyQSwgMHgxMjI2LCAweDJGMkIsIDB4MTIyOCwgMHgyRjJDLCAweDEyMzIsCisgICAgMHgyRjJELCAweDA4ODEsIDB4MkYyRSwgMHgxMjZDLCAweDJGMkYsIDB4MDdCQiwgMHgyRjMwLCAweDA3N0UsCisgICAgMHgyRjMxLCAweDA2Q0EsIDB4MkYzMiwgMHgwNUVGLCAweDJGMzMsIDB4MTI4MywgMHgyRjM0LCAweDEyODUsCisgICAgMHgyRjM1LCAweDEyOTksIDB4MkYzNiwgMHgxMjlCLCAweDJGMzcsIDB4MTJBMCwgMHgyRjM4LCAweDA2NzcsCisgICAgMHgyRjM5LCAweDM4QjksIDB4MkYzQSwgMHgxMkFGLCAweDJGM0IsIDB4MTJCMSwgMHgyRjNDLCAweDA5RkEsCisgICAgMHgyRjNELCAweDEzNDIsIDB4MkYzRSwgMHgwNzgxLCAweDJGM0YsIDB4MDkxNiwgMHgyRjQwLCAweDA4QTcsCisgICAgMHgyRjQxLCAweDEzQzIsIDB4MkY0MiwgMHgwRTA4LCAweDJGNDMsIDB4MEM0NywgMHgyRjQ0LCAweDA2Q0MsCisgICAgMHgyRjQ1LCAweDBFNEQsIDB4MkY0NiwgMHgxM0UwLCAweDJGNDcsIDB4MENENCwgMHgyRjQ4LCAweDE0MEMsCisgICAgMHgyRjQ5LCAweDA3NDQsIDB4MkY0QSwgMHgwRUU2LCAweDJGNEIsIDB4MDczRCwgMHgyRjRDLCAweDA4QUQsCisgICAgMHgyRjRELCAweDE0RTUsIDB4MkY0RSwgMHgxNEY0LCAweDJGNEYsIDB4MTRGOCwgMHgyRjUwLCAweDBEN0EsCisgICAgMHgyRjUxLCAweDBFREYsIDB4MkY1MiwgMHgwOEFGLCAweDJGNTMsIDB4MTUwMiwgMHgyRjU0LCAweDBBMkIsCisgICAgMHgyRjU1LCAweDA1NTAsIDB4MkY1NiwgMHgwQkZBLCAweDJGNTcsIDB4MERENSwgMHgyRjU4LCAweDE1RTQsCisgICAgMHgyRjU5LCAweDE1RTYsIDB4MkY1QSwgMHgwRTIyLCAweDJGNUIsIDB4MDU2NywgMHgyRjVDLCAweDA2ODcsCisgICAgMHgyRjVELCAweDA3NTgsIDB4MkY1RSwgMHgwNzcwLCAweDJGNUYsIDB4MDZDNCwgMHgyRjYwLCAweDA0REQsCisgICAgMHgyRjYxLCAweDA1RTAsIDB4MkY2MiwgMHgwNjAxLCAweDJGNjMsIDB4MEE1QywgMHgyRjY0LCAweDBGM0IsCisgICAgMHgyRjY1LCAweDBDM0UsIDB4MkY2NiwgMHgwRDk3LCAweDJGNjcsIDB4M0EwMCwgMHgyRjY4LCAweDE2OTcsCisgICAgMHgyRjY5LCAweDBEMjgsIDB4MkY2QSwgMHgwRDdELCAweDJGNkIsIDB4MDg3QywgMHgyRjZDLCAweDBFRTgsCisgICAgMHgyRjZELCAweDBFQzMsIDB4MkY2RSwgMHgwRUZDLCAweDJGNkYsIDB4MEE3NCwgMHgyRjcwLCAweDA4RDQsCisgICAgMHgyRjcxLCAweDNBNDEsIDB4MkY3MiwgMHgwNTUzLCAweDJGNzMsIDB4MDc0MCwgMHgyRjc0LCAweDBGNzEsCisgICAgMHgyRjc1LCAweDBCOUIsIDB4MkY3NiwgMHgwRTE2LCAweDJGNzcsIDB4MDhCMywgMHgyRjc4LCAweDA2MDgsCisgICAgMHgyRjc5LCAweDE4MTMsIDB4MkY3QSwgMHgwRjNELCAweDJGN0IsIDB4MDRDQiwgMHgyRjdDLCAweDBGREQsCisgICAgMHgyRjdELCAweDA4RDUsIDB4MkY3RSwgMHgxODNELCAweDJGN0YsIDB4MDhENiwgMHgyRjgwLCAweDE4NTMsCisgICAgMHgyRjgxLCAweDBDRDEsIDB4MkY4MiwgMHgwQTA5LCAweDJGODMsIDB4MDhENywgMHgyRjg0LCAweDA4QjgsCisgICAgMHgyRjg1LCAweDA0RDMsIDB4MkY4NiwgMHgwQTg5LCAweDJGODcsIDB4MEFBNiwgMHgyRjg4LCAweDA5MzgsCisgICAgMHgyRjg5LCAweDA4MjEsIDB4MkY4QSwgMHgwOUVELCAweDJGOEIsIDB4MThCMiwgMHgyRjhDLCAweDE5NEYsCisgICAgMHgyRjhELCAweDBCQUMsIDB4MkY4RSwgMHgwNzQyLCAweDJGOEYsIDB4MDdFNiwgMHgyRjkwLCAweDA0QTUsCisgICAgMHgyRjkxLCAweDE5RUIsIDB4MkY5MiwgMHgwNzVGLCAweDJGOTMsIDB4MDVBRiwgMHgyRjk0LCAweDA3NzQsCisgICAgMHgyRjk1LCAweDBCNjksIDB4MkY5NiwgMHgwQzdFLCAweDJGOTcsIDB4MUE1NiwgMHgyRjk4LCAweDFBNTksCisgICAgMHgyRjk5LCAweDA1OEIsIDB4MkY5QSwgMHgwQTdBLCAweDJGOUIsIDB4MEFGOCwgMHgyRjlDLCAweDBCMEQsCisgICAgMHgyRjlELCAweDBBMEUsIDB4MkY5RSwgMHgwOTAyLCAweDJGOUYsIDB4MEEwRiwgMHgyRkEwLCAweDBCNjIsCisgICAgMHgyRkExLCAweDNCNEYsIDB4MkZBMiwgMHgwRjIyLCAweDJGQTMsIDB4MENBQiwgMHgyRkE0LCAweDBENjQsCisgICAgMHgyRkE1LCAweDBGNkMsIDB4MkZBNiwgMHgwNkRBLCAweDJGQTcsIDB4MEJENSwgMHgyRkE4LCAweDBFRjMsCisgICAgMHgyRkE5LCAweDBEREUsIDB4MkZBQSwgMHgxQkM5LCAweDJGQUIsIDB4MUJDQiwgMHgyRkFDLCAweDA0Q0QsCisgICAgMHgyRkFELCAweDIxRjcsIDB4MkZBRSwgMHgwRDg3LCAweDJGQUYsIDB4MEVEOCwgMHgyRkIwLCAweDA1QjUsCisgICAgMHgyRkIxLCAweDFDMDMsIDB4MkZCMiwgMHgxQzA1LCAweDJGQjMsIDB4MDUzQiwgMHgyRkI0LCAweDBFMTcsCisgICAgMHgyRkI1LCAweDBERTksIDB4MkZCNiwgMHgwRDg4LCAweDJGQjcsIDB4MDlFRiwgMHgyRkI4LCAweDA5MUYsCisgICAgMHgyRkI5LCAweDA3RjMsIDB4MkZCQSwgMHgwRDA1LCAweDJGQkIsIDB4MDgwRSwgMHgyRkJDLCAweDA3RjQsCisgICAgMHgyRkJELCAweDFDNkMsIDB4MkZCRSwgMHgxQzdELCAweDJGQkYsIDB4MUM4MywgMHgyRkMwLCAweDFDODQsCisgICAgMHgyRkMxLCAweDA2NEUsIDB4MkZDMiwgMHgwNjk1LCAweDJGQzMsIDB4MEJENywgMHgyRkM0LCAweDFDRjYsCisgICAgMHgyRkM1LCAweDA4REIsIDB4MkZDNiwgMHgxRDAxLCAweDJGQzcsIDB4MEU5MSwgMHgyRkM4LCAweDM0MEIsCisgICAgMHgyRkM5LCAweDA2NkEsIDB4MkZDQSwgMHgwODA3LCAweDJGQ0IsIDB4MUQxNiwgMHgyRkNDLCAweDFEMTksCisgICAgMHgyRkNELCAweDBDMUUsIDB4MkZDRSwgMHgwNzkxLCAweDJGQ0YsIDB4MEFDRiwgMHgyRkQwLCAweDBEOTMsCisgICAgMHgyRkQxLCAweDFEMjEsIDB4MkZEMiwgMHgxRDIyLCAweDJGRDMsIDB4MEY3RSwgMHgyRkQ0LCAweDFEMzAsCisgICAgMHgyRkQ1LCAweDFEMzEsIDB4MzAwMCwgMHgwMjc5LCAweDMwMDEsIDB4MDI3QSwgMHgzMDAyLCAweDAyN0IsCisgICAgMHgzMDAzLCAweDAyOEYsIDB4MzAwNCwgMHgyMDc0LCAweDMwMDUsIDB4MDI5MSwgMHgzMDA2LCAweDAyOTIsCisgICAgMHgzMDA3LCAweDAyOTMsIDB4MzAwOCwgMHgwMkFBLCAweDMwMDksIDB4MDJBQiwgMHgzMDBBLCAweDAyQUMsCisgICAgMHgzMDBCLCAweDAyQUQsIDB4MzAwQywgMHgwMkFFLCAweDMwMEQsIDB4MDJBRiwgMHgzMDBFLCAweDAyQjAsCisgICAgMHgzMDBGLCAweDAyQjEsIDB4MzAxMCwgMHgwMkIyLCAweDMwMTEsIDB4MDJCMywgMHgzMDEyLCAweDAyREYsCisgICAgMHgzMDEzLCAweDAyRTQsIDB4MzAxNCwgMHgwMkE0LCAweDMwMTUsIDB4MDJBNSwgMHgzMDFDLCAweDAyOTksCisgICAgMHgzMDFELCAweDFEQjgsIDB4MzAxRiwgMHgxREI5LCAweDMwMjAsIDB4MUY3QSwgMHgzMDMwLCAweDJGQkEsCisgICAgMHgzMDMzLCAweDJGNEMsIDB4MzAzNCwgMHgyRjRELCAweDMwMzUsIDB4MkY0RSwgMHgzMDM2LCAweDFGNzksCisgICAgMHgzMDQxLCAweDAzNEEsIDB4MzA0MiwgMHgwMzRCLCAweDMwNDMsIDB4MDM0QywgMHgzMDQ0LCAweDAzNEQsCisgICAgMHgzMDQ1LCAweDAzNEUsIDB4MzA0NiwgMHgwMzRGLCAweDMwNDcsIDB4MDM1MCwgMHgzMDQ4LCAweDAzNTEsCisgICAgMHgzMDQ5LCAweDAzNTIsIDB4MzA0QSwgMHgwMzUzLCAweDMwNEIsIDB4MDM1NCwgMHgzMDRDLCAweDAzNTUsCisgICAgMHgzMDRELCAweDAzNTYsIDB4MzA0RSwgMHgwMzU3LCAweDMwNEYsIDB4MDM1OCwgMHgzMDUwLCAweDAzNTksCisgICAgMHgzMDUxLCAweDAzNUEsIDB4MzA1MiwgMHgwMzVCLCAweDMwNTMsIDB4MDM1QywgMHgzMDU0LCAweDAzNUQsCisgICAgMHgzMDU1LCAweDAzNUUsIDB4MzA1NiwgMHgwMzVGLCAweDMwNTcsIDB4MDM2MCwgMHgzMDU4LCAweDAzNjEsCisgICAgMHgzMDU5LCAweDAzNjIsIDB4MzA1QSwgMHgwMzYzLCAweDMwNUIsIDB4MDM2NCwgMHgzMDVDLCAweDAzNjUsCisgICAgMHgzMDVELCAweDAzNjYsIDB4MzA1RSwgMHgwMzY3LCAweDMwNUYsIDB4MDM2OCwgMHgzMDYwLCAweDAzNjksCisgICAgMHgzMDYxLCAweDAzNkEsIDB4MzA2MiwgMHgwMzZCLCAweDMwNjMsIDB4MDM2QywgMHgzMDY0LCAweDAzNkQsCisgICAgMHgzMDY1LCAweDAzNkUsIDB4MzA2NiwgMHgwMzZGLCAweDMwNjcsIDB4MDM3MCwgMHgzMDY4LCAweDAzNzEsCisgICAgMHgzMDY5LCAweDAzNzIsIDB4MzA2QSwgMHgwMzczLCAweDMwNkIsIDB4MDM3NCwgMHgzMDZDLCAweDAzNzUsCisgICAgMHgzMDZELCAweDAzNzYsIDB4MzA2RSwgMHgwMzc3LCAweDMwNkYsIDB4MDM3OCwgMHgzMDcwLCAweDAzNzksCisgICAgMHgzMDcxLCAweDAzN0EsIDB4MzA3MiwgMHgwMzdCLCAweDMwNzMsIDB4MDM3QywgMHgzMDc0LCAweDAzN0QsCisgICAgMHgzMDc1LCAweDAzN0UsIDB4MzA3NiwgMHgwMzdGLCAweDMwNzcsIDB4MDM4MCwgMHgzMDc4LCAweDAzODEsCisgICAgMHgzMDc5LCAweDAzODIsIDB4MzA3QSwgMHgwMzgzLCAweDMwN0IsIDB4MDM4NCwgMHgzMDdDLCAweDAzODUsCisgICAgMHgzMDdELCAweDAzODYsIDB4MzA3RSwgMHgwMzg3LCAweDMwN0YsIDB4MDM4OCwgMHgzMDgwLCAweDAzODksCisgICAgMHgzMDgxLCAweDAzOEEsIDB4MzA4MiwgMHgwMzhCLCAweDMwODMsIDB4MDM4QywgMHgzMDg0LCAweDAzOEQsCisgICAgMHgzMDg1LCAweDAzOEUsIDB4MzA4NiwgMHgwMzhGLCAweDMwODcsIDB4MDM5MCwgMHgzMDg4LCAweDAzOTEsCisgICAgMHgzMDg5LCAweDAzOTIsIDB4MzA4QSwgMHgwMzkzLCAweDMwOEIsIDB4MDM5NCwgMHgzMDhDLCAweDAzOTUsCisgICAgMHgzMDhELCAweDAzOTYsIDB4MzA4RSwgMHgwMzk3LCAweDMwOEYsIDB4MDM5OCwgMHgzMDkwLCAweDAzOTksCisgICAgMHgzMDkxLCAweDAzOUEsIDB4MzA5MiwgMHgwMzlCLCAweDMwOTMsIDB4MDM5QywgMHgzMDk0LCAweDFGMTYsCisgICAgMHgzMDlCLCAweDAyODMsIDB4MzA5QywgMHgwMjg0LCAweDMwOUQsIDB4MDI4RCwgMHgzMDlFLCAweDAyOEUsCisgICAgMHgzMEExLCAweDAzOUQsIDB4MzBBMiwgMHgwMzlFLCAweDMwQTMsIDB4MDM5RiwgMHgzMEE0LCAweDAzQTAsCisgICAgMHgzMEE1LCAweDAzQTEsIDB4MzBBNiwgMHgwM0EyLCAweDMwQTcsIDB4MDNBMywgMHgzMEE4LCAweDAzQTQsCisgICAgMHgzMEE5LCAweDAzQTUsIDB4MzBBQSwgMHgwM0E2LCAweDMwQUIsIDB4MDNBNywgMHgzMEFDLCAweDAzQTgsCisgICAgMHgzMEFELCAweDAzQTksIDB4MzBBRSwgMHgwM0FBLCAweDMwQUYsIDB4MDNBQiwgMHgzMEIwLCAweDAzQUMsCisgICAgMHgzMEIxLCAweDAzQUQsIDB4MzBCMiwgMHgwM0FFLCAweDMwQjMsIDB4MDNBRiwgMHgzMEI0LCAweDAzQjAsCisgICAgMHgzMEI1LCAweDAzQjEsIDB4MzBCNiwgMHgwM0IyLCAweDMwQjcsIDB4MDNCMywgMHgzMEI4LCAweDAzQjQsCisgICAgMHgzMEI5LCAweDAzQjUsIDB4MzBCQSwgMHgwM0I2LCAweDMwQkIsIDB4MDNCNywgMHgzMEJDLCAweDAzQjgsCisgICAgMHgzMEJELCAweDAzQjksIDB4MzBCRSwgMHgwM0JBLCAweDMwQkYsIDB4MDNCQiwgMHgzMEMwLCAweDAzQkMsCisgICAgMHgzMEMxLCAweDAzQkQsIDB4MzBDMiwgMHgwM0JFLCAweDMwQzMsIDB4MDNCRiwgMHgzMEM0LCAweDAzQzAsCisgICAgMHgzMEM1LCAweDAzQzEsIDB4MzBDNiwgMHgwM0MyLCAweDMwQzcsIDB4MDNDMywgMHgzMEM4LCAweDAzQzQsCisgICAgMHgzMEM5LCAweDAzQzUsIDB4MzBDQSwgMHgwM0M2LCAweDMwQ0IsIDB4MDNDNywgMHgzMENDLCAweDAzQzgsCisgICAgMHgzMENELCAweDAzQzksIDB4MzBDRSwgMHgwM0NBLCAweDMwQ0YsIDB4MDNDQiwgMHgzMEQwLCAweDAzQ0MsCisgICAgMHgzMEQxLCAweDAzQ0QsIDB4MzBEMiwgMHgwM0NFLCAweDMwRDMsIDB4MDNDRiwgMHgzMEQ0LCAweDAzRDAsCisgICAgMHgzMEQ1LCAweDAzRDEsIDB4MzBENiwgMHgwM0QyLCAweDMwRDcsIDB4MDNEMywgMHgzMEQ4LCAweDAzRDQsCisgICAgMHgzMEQ5LCAweDAzRDUsIDB4MzBEQSwgMHgwM0Q2LCAweDMwREIsIDB4MDNENywgMHgzMERDLCAweDAzRDgsCisgICAgMHgzMERELCAweDAzRDksIDB4MzBERSwgMHgwM0RBLCAweDMwREYsIDB4MDNEQiwgMHgzMEUwLCAweDAzREMsCisgICAgMHgzMEUxLCAweDAzREQsIDB4MzBFMiwgMHgwM0RFLCAweDMwRTMsIDB4MDNERiwgMHgzMEU0LCAweDAzRTAsCisgICAgMHgzMEU1LCAweDAzRTEsIDB4MzBFNiwgMHgwM0UyLCAweDMwRTcsIDB4MDNFMywgMHgzMEU4LCAweDAzRTQsCisgICAgMHgzMEU5LCAweDAzRTUsIDB4MzBFQSwgMHgwM0U2LCAweDMwRUIsIDB4MDNFNywgMHgzMEVDLCAweDAzRTgsCisgICAgMHgzMEVELCAweDAzRTksIDB4MzBFRSwgMHgwM0VBLCAweDMwRUYsIDB4MDNFQiwgMHgzMEYwLCAweDAzRUMsCisgICAgMHgzMEYxLCAweDAzRUQsIDB4MzBGMiwgMHgwM0VFLCAweDMwRjMsIDB4MDNFRiwgMHgzMEY0LCAweDAzRjAsCisgICAgMHgzMEY1LCAweDAzRjEsIDB4MzBGNiwgMHgwM0YyLCAweDMwRjcsIDB4MjA3OSwgMHgzMEY4LCAweDIwN0EsCisgICAgMHgzMEY5LCAweDIwN0IsIDB4MzBGQSwgMHgyMDdDLCAweDMwRkIsIDB4MDI3RSwgMHgzMEZDLCAweDAyOTQsCisgICAgMHgzMEZELCAweDAyOEIsIDB4MzBGRSwgMHgwMjhDLCAweDMyMjAsIDB4Mjc4RSwgMHgzMjIxLCAweDI3OEYsCisgICAgMHgzMjIyLCAweDI3OTAsIDB4MzIyMywgMHgyNzkxLCAweDMyMjQsIDB4Mjc5MiwgMHgzMjI1LCAweDI3OTMsCisgICAgMHgzMjI2LCAweDI3OTQsIDB4MzIyNywgMHgyNzk1LCAweDMyMjgsIDB4Mjc5NiwgMHgzMjI5LCAweDI3OTcsCisgICAgMHgzMjJBLCAweDIwMDYsIDB4MzIyQiwgMHgyMDA3LCAweDMyMkMsIDB4MjAwOCwgMHgzMjJELCAweDIwMDksCisgICAgMHgzMjJFLCAweDIwMEEsIDB4MzIyRiwgMHgyMDBCLCAweDMyMzAsIDB4MjAwNSwgMHgzMjMxLCAweDFEQzIsCisgICAgMHgzMjMyLCAweDFEQzMsIDB4MzIzMywgMHgxRkNGLCAweDMyMzQsIDB4MUZDRCwgMHgzMjM1LCAweDFGRDQsCisgICAgMHgzMjM2LCAweDFGRDMsIDB4MzIzNywgMHgyMDBDLCAweDMyMzgsIDB4MUZDRSwgMHgzMjM5LCAweDFEQzQsCisgICAgMHgzMjNBLCAweDFGRDcsIDB4MzIzQiwgMHgxRkQ1LCAweDMyM0MsIDB4MUZEMCwgMHgzMjNELCAweDFGQ0IsCisgICAgMHgzMjNFLCAweDFGRDIsIDB4MzIzRiwgMHgxRkNDLCAweDMyNDAsIDB4MUZENiwgMHgzMjQxLCAweDIwMEQsCisgICAgMHgzMjQyLCAweDFGRDEsIDB4MzI0MywgMHgxRkNBLCAweDMyODAsIDB4MjhERCwgMHgzMjgxLCAweDI4REUsCisgICAgMHgzMjgyLCAweDI4REYsIDB4MzI4MywgMHgyOEUwLCAweDMyODQsIDB4MjhFMSwgMHgzMjg1LCAweDI4RTIsCisgICAgMHgzMjg2LCAweDI4RTMsIDB4MzI4NywgMHgyOEU0LCAweDMyODgsIDB4MjhFNSwgMHgzMjg5LCAweDI4RTYsCisgICAgMHgzMjhBLCAweDI4RTgsIDB4MzI4QiwgMHgyOEU5LCAweDMyOEMsIDB4MjhFQSwgMHgzMjhELCAweDI4RUIsCisgICAgMHgzMjhFLCAweDI4RUMsIDB4MzI4RiwgMHgyOEVELCAweDMyOTAsIDB4MjhFNywgMHgzMjkxLCAweDFGRTEsCisgICAgMHgzMjkyLCAweDFGRTAsIDB4MzI5MywgMHgxRkUyLCAweDMyOTQsIDB4MUZEQywgMHgzMjk1LCAweDI4RkYsCisgICAgMHgzMjk2LCAweDFGRTUsIDB4MzI5NywgMHgyOEZDLCAweDMyOTgsIDB4MUZERSwgMHgzMjk5LCAweDIwMUYsCisgICAgMHgzMjlBLCAweDI4RjksIDB4MzI5QiwgMHgyOEY4LCAweDMyOUMsIDB4MjhGRSwgMHgzMjlELCAweDIwN0YsCisgICAgMHgzMjlFLCAweDFGRkYsIDB4MzI5RiwgMHgyOEVGLCAweDMyQTAsIDB4MjhGNiwgMHgzMkExLCAweDI4RjcsCisgICAgMHgzMkEyLCAweDI4RkIsIDB4MzJBMywgMHgyOEZBLCAweDMyQTQsIDB4MURCRCwgMHgzMkE1LCAweDFEQkUsCisgICAgMHgzMkE2LCAweDFEQkYsIDB4MzJBNywgMHgxREMwLCAweDMyQTgsIDB4MURDMSwgMHgzMkE5LCAweDFGREEsCisgICAgMHgzMkFBLCAweDFGREQsIDB4MzJBQiwgMHgxRkRGLCAweDMyQUMsIDB4MUZFMywgMHgzMkFELCAweDFGRDksCisgICAgMHgzMkFFLCAweDFGRTQsIDB4MzJBRiwgMHgxRkRCLCAweDMyQjAsIDB4MUZEOCwgMHgzMkQwLCAweDI4QUQsCisgICAgMHgzMkQxLCAweDI4QUUsIDB4MzJEMiwgMHgyOEFGLCAweDMyRDMsIDB4MjhCMCwgMHgzMkQ0LCAweDI4QjEsCisgICAgMHgzMkQ1LCAweDI4QjIsIDB4MzJENiwgMHgyOEIzLCAweDMyRDcsIDB4MjhCNCwgMHgzMkQ4LCAweDI4QjUsCisgICAgMHgzMkQ5LCAweDI4QjYsIDB4MzJEQSwgMHgyOEI3LCAweDMyREIsIDB4MjhCOCwgMHgzMkRDLCAweDI4QjksCisgICAgMHgzMkRELCAweDI4QkEsIDB4MzJERSwgMHgyOEJCLCAweDMyREYsIDB4MjhCQywgMHgzMkUwLCAweDI4QkQsCisgICAgMHgzMkUxLCAweDI4QkUsIDB4MzJFMiwgMHgyOEJGLCAweDMyRTMsIDB4MjhDMCwgMHgzMkU0LCAweDI4QzEsCisgICAgMHgzMkU1LCAweDI4QzIsIDB4MzJFNiwgMHgyOEMzLCAweDMyRTcsIDB4MjhDNCwgMHgzMkU4LCAweDI4QzUsCisgICAgMHgzMkU5LCAweDI4QzYsIDB4MzJFQSwgMHgyOEM3LCAweDMyRUIsIDB4MjhDOCwgMHgzMkVDLCAweDI4QzksCisgICAgMHgzMkVELCAweDI4Q0EsIDB4MzJFRSwgMHgyOENCLCAweDMyRUYsIDB4MjhDQywgMHgzMkYwLCAweDI4Q0QsCisgICAgMHgzMkYxLCAweDI4Q0UsIDB4MzJGMiwgMHgyOENGLCAweDMyRjMsIDB4MjhEMCwgMHgzMkY0LCAweDI4RDEsCisgICAgMHgzMkY1LCAweDI4RDIsIDB4MzJGNiwgMHgyOEQzLCAweDMyRjcsIDB4MjhENCwgMHgzMkY4LCAweDI4RDUsCisgICAgMHgzMkY5LCAweDI4RDYsIDB4MzJGQSwgMHgyOEQ3LCAweDMyRkIsIDB4MjhEOCwgMHgzMkZDLCAweDI4RDksCisgICAgMHgzMkZELCAweDI4REEsIDB4MzJGRSwgMHgyOERCLCAweDMzMDAsIDB4MUY3MCwgMHgzMzAxLCAweDJFNjIsCisgICAgMHgzMzAyLCAweDJFNjMsIDB4MzMwMywgMHgxRjZBLCAweDMzMDQsIDB4MkU2NCwgMHgzMzA1LCAweDFGRjcsCisgICAgMHgzMzA2LCAweDJFNjUsIDB4MzMwNywgMHgyRTY5LCAweDMzMDgsIDB4MkU2NywgMHgzMzA5LCAweDJFNkMsCisgICAgMHgzMzBBLCAweDJFNkEsIDB4MzMwQiwgMHgyRTZFLCAweDMzMEMsIDB4MkU3MCwgMHgzMzBELCAweDFEQUIsCisgICAgMHgzMzBFLCAweDJFNzEsIDB4MzMwRiwgMHgyRTcyLCAweDMzMTAsIDB4MkU3MywgMHgzMzExLCAweDJFNzQsCisgICAgMHgzMzEyLCAweDJFNzUsIDB4MzMxMywgMHgyRTc2LCAweDMzMTQsIDB4MURBMiwgMHgzMzE1LCAweDFGNjksCisgICAgMHgzMzE2LCAweDFGNjcsIDB4MzMxNywgMHgyRTc4LCAweDMzMTgsIDB4MUY2OCwgMHgzMzE5LCAweDJFN0EsCisgICAgMHgzMzFBLCAweDJFN0MsIDB4MzMxQiwgMHgyRTdELCAweDMzMUMsIDB4MkU3RSwgMHgzMzFELCAweDJFN0YsCisgICAgMHgzMzFFLCAweDFGNzMsIDB4MzMxRiwgMHgyRTgwLCAweDMzMjAsIDB4MkU4MSwgMHgzMzIxLCAweDJFODIsCisgICAgMHgzMzIyLCAweDFGNjYsIDB4MzMyMywgMHgxRjZCLCAweDMzMjQsIDB4MkU4MywgMHgzMzI1LCAweDJFODUsCisgICAgMHgzMzI2LCAweDFEQUMsIDB4MzMyNywgMHgxREE2LCAweDMzMjgsIDB4MkU4OCwgMHgzMzI5LCAweDJFODksCisgICAgMHgzMzJBLCAweDFGNzQsIDB4MzMyQiwgMHgxREFFLCAweDMzMkQsIDB4MkU4QiwgMHgzMzJFLCAweDJFOEUsCisgICAgMHgzMzJGLCAweDJFOEYsIDB4MzMzMCwgMHgyRTkwLCAweDMzMzEsIDB4MUY3MSwgMHgzMzMyLCAweDJFOTEsCisgICAgMHgzMzMzLCAweDIwODcsIDB4MzMzNCwgMHgyRTk0LCAweDMzMzUsIDB4MkU5NSwgMHgzMzM2LCAweDFEQTgsCisgICAgMHgzMzM3LCAweDJFOUEsIDB4MzMzOCwgMHgyRTlDLCAweDMzMzksIDB4MUY2RSwgMHgzMzNBLCAweDJFOUQsCisgICAgMHgzMzNCLCAweDFGNkYsIDB4MzMzQywgMHgyRTk2LCAweDMzM0QsIDB4MkU5RSwgMHgzMzNFLCAweDJFQTAsCisgICAgMHgzMzNGLCAweDJFQTEsIDB4MzM0MCwgMHgyRUEyLCAweDMzNDEsIDB4MkU5RiwgMHgzMzQyLCAweDFGNkQsCisgICAgMHgzMzQzLCAweDJFQTMsIDB4MzM0NCwgMHgyRUE0LCAweDMzNDUsIDB4MkVBNSwgMHgzMzQ2LCAweDJFQTYsCisgICAgMHgzMzQ3LCAweDFGNzIsIDB4MzM0OCwgMHgyRUE3LCAweDMzNDksIDB4MURBMSwgMHgzMzRBLCAweDFEQUYsCisgICAgMHgzMzRCLCAweDJFQTgsIDB4MzM0QywgMHgyRUE5LCAweDMzNEQsIDB4MURBNCwgMHgzMzRFLCAweDIwODgsCisgICAgMHgzMzRGLCAweDJFQUEsIDB4MzM1MCwgMHgyRUFCLCAweDMzNTEsIDB4MURBOSwgMHgzMzUyLCAweDJFQUUsCisgICAgMHgzMzUzLCAweDJFQjIsIDB4MzM1NCwgMHgyRUFGLCAweDMzNTUsIDB4MkVCMywgMHgzMzU2LCAweDJFQjQsCisgICAgMHgzMzU3LCAweDFGNkMsIDB4MzM3MSwgMHgyRTU1LCAweDMzN0IsIDB4MjA4MywgMHgzMzdDLCAweDFEQzcsCisgICAgMHgzMzdELCAweDFEQzYsIDB4MzM3RSwgMHgxREM1LCAweDMzN0YsIDB4MUY3NiwgMHgzMzg1LCAweDFGNUYsCisgICAgMHgzMzg2LCAweDFGNjAsIDB4MzM4NywgMHgxRjYxLCAweDMzODgsIDB4MjAwMCwgMHgzMzg5LCAweDIwMDEsCisgICAgMHgzMzhELCAweDJFNTgsIDB4MzM4RSwgMHgxREI0LCAweDMzOEYsIDB4MURCNSwgMHgzMzkwLCAweDFGNjMsCisgICAgMHgzMzk2LCAweDFGNjUsIDB4MzM5NywgMHgxRjU4LCAweDMzOTgsIDB4MUY1QSwgMHgzMzlCLCAweDJFNTksCisgICAgMHgzMzlDLCAweDFEQjEsIDB4MzM5RCwgMHgxREIyLCAweDMzOUUsIDB4MURCMywgMHgzMzlGLCAweDFGRkEsCisgICAgMHgzM0EwLCAweDFGNTQsIDB4MzNBMSwgMHgxREI3LCAweDMzQTIsIDB4MUY1NSwgMHgzM0EzLCAweDFGRkIsCisgICAgMHgzM0E0LCAweDFGNTYsIDB4MzNBNSwgMHgxRjU3LCAweDMzQTYsIDB4MUZGQywgMHgzM0IwLCAweDFGNUUsCisgICAgMHgzM0IxLCAweDFGNUQsIDB4MzNCMiwgMHgxRjVDLCAweDMzQjMsIDB4MUY1QiwgMHgzM0MyLCAweDJFNTAsCisgICAgMHgzM0M0LCAweDFEQjYsIDB4MzNDOCwgMHgyMDAyLCAweDMzQ0IsIDB4MUY2MiwgMHgzM0NDLCAweDFGRjYsCisgICAgMHgzM0NELCAweDFEQkIsIDB4MzNENCwgMHgxRjY0LCAweDMzRDcsIDB4MkU1RCwgMHgzM0Q4LCAweDJFNUUsCisgICAgMHgzM0RBLCAweDJFNEIsIDB4MzQwMiwgMHgzNTgyLCAweDM0MDUsIDB4M0MxQiwgMHgzNDI3LCAweDM2NTYsCisgICAgMHgzNDg4LCAweDNDNTIsIDB4MzREQiwgMHgzQzQxLCAweDM1MUYsIDB4MzYyOSwgMHgzNTNFLCAweDM3MUUsCisgICAgMHgzNzhELCAweDM2MUEsIDB4MzdFMiwgMHgzNzJCLCAweDNBRjMsIDB4M0M0MCwgMHgzQjIyLCAweDNDNDksCisgICAgMHgzQjg4LCAweDM2OEQsIDB4M0U4QSwgMHgzQzQzLCAweDNFREEsIDB4M0M0OCwgMHgzRkIxLCAweDM3NTQsCisgICAgMHg0MDkzLCAweDNDNEMsIDB4NDEwMywgMHgzQzRGLCAweDQyNjQsIDB4Mzc2MCwgMHg0MjkzLCAweDNDNTAsCisgICAgMHg0NDBDLCAweDNDNDIsIDB4NDQ1MywgMHgzNzczLCAweDQ1N0EsIDB4M0M0QiwgMHg0NjY1LCAweDNDNEUsCisgICAgMHg0NkFFLCAweDNDNTEsIDB4NEJFOCwgMHgzQzQ2LCAweDRFMDAsIDB4MDRCMCwgMHg0RTAxLCAweDBCQjgsCisgICAgMHg0RTAzLCAweDA4RTMsIDB4NEUwNCwgMHgzN0Q4LCAweDRFMDUsIDB4MzdEOSwgMHg0RTA3LCAweDBFQUEsCisgICAgMHg0RTA4LCAweDA5Q0UsIDB4NEUwOSwgMHgwODdFLCAweDRFMEEsIDB4MDlDRCwgMHg0RTBCLCAweDA1M0MsCisgICAgMHg0RTBELCAweDBEQzYsIDB4NEUwRSwgMHgwRjI5LCAweDRFMTAsIDB4MEZGQiwgMHg0RTExLCAweDA0RDEsCisgICAgMHg0RTE0LCAweDA1Q0MsIDB4NEUxNSwgMHgwRkZDLCAweDRFMTYsIDB4MEE0OCwgMHg0RTE3LCAweDEwRDcsCisgICAgMHg0RTE4LCAweDA2NzAsIDB4NEUxOSwgMHgwRTBBLCAweDRFMUUsIDB4MDlDRiwgMHg0RTFGLCAweDM3REEsCisgICAgMHg0RTIxLCAweDBGODYsIDB4NEUyNiwgMHgwRTEyLCAweDRFMjgsIDB4MjBCMywgMHg0RTJBLCAweDBGRkQsCisgICAgMHg0RTJCLCAweDM3REIsIDB4NEUyQywgMHgzNzRELCAweDRFMkQsIDB4MEJBNCwgMHg0RTJGLCAweDM3REMsCisgICAgMHg0RTMwLCAweDM3REQsIDB4NEUzMSwgMHgwRkZFLCAweDRFMzIsIDB4MDZGMiwgMHg0RTM2LCAweDBGRkYsCisgICAgMHg0RTM3LCAweDM2OUQsIDB4NEUzOCwgMHgwNjE5LCAweDRFMzksIDB4MEI2RSwgMHg0RTNCLCAweDA5MTMsCisgICAgMHg0RTNDLCAweDEwMDAsIDB4NEUzRiwgMHgxMDAxLCAweDRFNDAsIDB4MzdERSwgMHg0RTQxLCAweDM3REYsCisgICAgMHg0RTQyLCAweDEwMDIsIDB4NEU0MywgMHgwQ0VCLCAweDRFNDQsIDB4MzdFMCwgMHg0RTQ1LCAweDA2NzEsCisgICAgMHg0RTQ4LCAweDM3MkUsIDB4NEU0QiwgMHgwQ0VELCAweDRFNEQsIDB4MENCQiwgMHg0RTRFLCAweDA3NzcsCisgICAgMHg0RTRGLCAweDBFNjEsIDB4NEU1NSwgMHgxOTUwLCAweDRFNTYsIDB4MTAwMywgMHg0RTU3LCAweDA5RDAsCisgICAgMHg0RTU4LCAweDEwMDQsIDB4NEU1OSwgMHgwNTM1LCAweDRFNUEsIDB4MzdFMSwgMHg0RTVELCAweDA2REQsCisgICAgMHg0RTVFLCAweDA3QTQsIDB4NEU1RiwgMHgwRUY1LCAweDRFNjIsIDB4MTIzMywgMHg0RTcxLCAweDBGNUEsCisgICAgMHg0RTczLCAweDBDRDUsIDB4NEU3RSwgMHgwNUUxLCAweDRFN0YsIDB4MzdFMiwgMHg0RTgwLCAweDA2NEYsCisgICAgMHg0RTgyLCAweDEwMDUsIDB4NEU4NSwgMHgxMDA2LCAweDRFODYsIDB4MEY4MywgMHg0RTg4LCAweDBGMjcsCisgICAgMHg0RTg5LCAweDBBRUEsIDB4NEU4QSwgMHgxMDA4LCAweDRFOEIsIDB4MDhDNCwgMHg0RThDLCAweDBDQ0IsCisgICAgMHg0RThELCAweDM3RTMsIDB4NEU4RSwgMHgxMDBCLCAweDRFOTEsIDB4MDRFMCwgMHg0RTkyLCAweDA3OTMsCisgICAgMHg0RTk0LCAweDA3OTIsIDB4NEU5NSwgMHgwNEFBLCAweDRFOTYsIDB4MzdFNCwgMHg0RTk4LCAweDBGRjEsCisgICAgMHg0RTk5LCAweDBGRjAsIDB4NEU5QiwgMHgwODIzLCAweDRFOUMsIDB4MDQ2NSwgMHg0RTlFLCAweDEwMEMsCisgICAgMHg0RTlGLCAweDEwMEQsIDB4NEVBMCwgMHgxMDBFLCAweDRFQTEsIDB4MEU2MiwgMHg0RUEyLCAweDEwMEYsCisgICAgMHg0RUE0LCAweDA3QTYsIDB4NEVBNSwgMHgwNEFCLCAweDRFQTYsIDB4MEVBMCwgMHg0RUE4LCAweDA2OTYsCisgICAgMHg0RUFCLCAweDA2OTcsIDB4NEVBQywgMHgwNjk4LCAweDRFQUQsIDB4MEJGRSwgMHg0RUFFLCAweDBGODQsCisgICAgMHg0RUIwLCAweDEwMTAsIDB4NEVCMywgMHgxMDExLCAweDRFQjYsIDB4MTAxMiwgMHg0RUI5LCAweDM3RTUsCisgICAgMHg0RUJBLCAweDBBMTMsIDB4NEVCQiwgMHgzNjIwLCAweDRFQzAsIDB4MDk0NCwgMHg0RUMxLCAweDBBMTQsCisgICAgMHg0RUMyLCAweDEwMTcsIDB4NEVDNCwgMHgxMDE1LCAweDRFQzYsIDB4MTAxNiwgMHg0RUM3LCAweDA2NzIsCisgICAgMHg0RUNBLCAweDA4MTMsIDB4NEVDQiwgMHgwNTcwLCAweDRFQ0QsIDB4MTAxNCwgMHg0RUNFLCAweDEwMTMsCisgICAgMHg0RUNGLCAweDBERjksIDB4NEVEMCwgMHgzN0U2LCAweDRFRDQsIDB4MDg5NCwgMHg0RUQ1LCAweDA4OTMsCisgICAgMHg0RUQ2LCAweDBCMUUsIDB4NEVENywgMHgxMDE4LCAweDRFRDgsIDB4MERDNywgMHg0RUQ5LCAweDBBOEIsCisgICAgMHg0RURELCAweDAyOTAsIDB4NEVERSwgMHgxMDE5LCAweDRFREYsIDB4MTAxQiwgMHg0RUUwLCAweDM3RTcsCisgICAgMHg0RUUxLCAweDIwQjQsIDB4NEVFMywgMHgwQjQ1LCAweDRFRTQsIDB4MEZBOSwgMHg0RUU1LCAweDA0OEUsCisgICAgMHg0RUVELCAweDEwMUEsIDB4NEVFRSwgMHgwNTNFLCAweDRFRjAsIDB4MDZCQywgMHg0RUYyLCAweDBCQTUsCisgICAgMHg0RUY2LCAweDA3NDUsIDB4NEVGNywgMHgxMDFDLCAweDRFRkIsIDB4MENEQSwgMHg0RUZDLCAweDIwQjUsCisgICAgMHg0RUZELCAweDM3RTgsIDB4NEVGRiwgMHgzN0U5LCAweDRGMDAsIDB4MjBCNiwgMHg0RjAxLCAweDA2MjcsCisgICAgMHg0RjAzLCAweDIwQjcsIDB4NEYwOSwgMHgxMDFELCAweDRGMEEsIDB4MDQ4RiwgMHg0RjBCLCAweDM3RUEsCisgICAgMHg0RjBELCAweDA3OTQsIDB4NEYwRSwgMHgwNjI4LCAweDRGMEYsIDB4MERFQywgMHg0RjEwLCAweDBENDYsCisgICAgMHg0RjExLCAweDA2NzMsIDB4NEYxNSwgMHgzN0VCLCAweDRGMUEsIDB4MDU3MSwgMHg0RjFDLCAweDEwNDAsCisgICAgMHg0RjFELCAweDBDM0IsIDB4NEYyRiwgMHgwRDIyLCAweDRGMzAsIDB4MTAxRiwgMHg0RjM0LCAweDBENTAsCisgICAgMHg0RjM2LCAweDBGQUEsIDB4NEYzOCwgMHgwOUYzLCAweDRGMzksIDB4MjBCOCwgMHg0RjNBLCAweDA4OTUsCisgICAgMHg0RjNCLCAweDM3RUQsIDB4NEYzQywgMHgwOEM1LCAweDRGM0QsIDB4MDU0MCwgMHg0RjQzLCAweDBCRUQsCisgICAgMHg0RjQ2LCAweDBCNjAsIDB4NEY0NywgMHgxMDIzLCAweDRGNDksIDB4MzdFRSwgMHg0RjRELCAweDA0OTAsCisgICAgMHg0RjRFLCAweDBCRkYsIDB4NEY0RiwgMHgwOTQ1LCAweDRGNTAsIDB4MDgyNCwgMHg0RjUxLCAweDBGMEUsCisgICAgMHg0RjUzLCAweDBCMkUsIDB4NEY1NCwgMHgzN0VGLCAweDRGNTUsIDB4MDUzRiwgMHg0RjU2LCAweDIwQjksCisgICAgMHg0RjU3LCAweDEwMjIsIDB4NEY1OSwgMHgwRjI4LCAweDRGNUEsIDB4MTAxRSwgMHg0RjVCLCAweDEwMjAsCisgICAgMHg0RjVDLCAweDA4NUUsIDB4NEY1RCwgMHgxMDIxLCAweDRGNUUsIDB4MTFEMywgMHg0RjYwLCAweDM3RUMsCisgICAgMHg0RjY5LCAweDEwMjksIDB4NEY2RiwgMHgxMDJDLCAweDRGNzAsIDB4MTAyQSwgMHg0RjczLCAweDA1NDIsCisgICAgMHg0Rjc1LCAweDBFMEIsIDB4NEY3NiwgMHgxMDI0LCAweDRGN0EsIDB4MzdGMCwgMHg0RjdCLCAweDEwMjgsCisgICAgMHg0RjdDLCAweDA3QTcsIDB4NEY3RCwgMHgzN0YxLCAweDRGN0UsIDB4MzdGMiwgMHg0RjdGLCAweDA4OTYsCisgICAgMHg0RjgzLCAweDA1RTIsIDB4NEY4NiwgMHgxMDJELCAweDRGODgsIDB4MTAyNSwgMHg0RjhBLCAweDIwQkIsCisgICAgMHg0RjhCLCAweDBGQUIsIDB4NEY4RCwgMHgwOEM2LCAweDRGOEYsIDB4MTAyNiwgMHg0RjkxLCAweDEwMkIsCisgICAgMHg0RjkyLCAweDIwQkEsIDB4NEY5NCwgMHgyMEJELCAweDRGOTYsIDB4MTAyRSwgMHg0Rjk3LCAweDM3RjMsCisgICAgMHg0Rjk4LCAweDEwMjcsIDB4NEY5QSwgMHgyMEJDLCAweDRGOUIsIDB4MDY5OSwgMHg0RjlELCAweDA0OTEsCisgICAgMHg0RkEwLCAweDA2OUEsIDB4NEZBMSwgMHgwNTQxLCAweDRGQUIsIDB4MTFENCwgMHg0RkFELCAweDBFQTcsCisgICAgMHg0RkFFLCAweDBERTAsIDB4NEZBRiwgMHgwN0E4LCAweDRGQjUsIDB4MDlGNSwgMHg0RkI2LCAweDBGN0YsCisgICAgMHg0RkJFLCAweDM3RjQsIDB4NEZCRiwgMHgwRTI4LCAweDRGQzIsIDB4MDcwRSwgMHg0RkMzLCAweDBCMDUsCisgICAgMHg0RkM0LCAweDA1NjQsIDB4NEZDOSwgMHgyMEFDLCAweDRGQ0EsIDB4MDk1RCwgMHg0RkNELCAweDIwQkUsCisgICAgMHg0RkNFLCAweDEwMzIsIDB4NEZDRiwgMHgzN0Y1LCAweDRGRDAsIDB4MTAzNywgMHg0RkQxLCAweDEwMzUsCisgICAgMHg0RkQzLCAweDNDMkYsIDB4NEZENCwgMHgxMDMwLCAweDRGRDcsIDB4MEIwRiwgMHg0RkQ4LCAweDEwMzMsCisgICAgMHg0RkRBLCAweDEwMzYsIDB4NEZEQiwgMHgxMDM0LCAweDRGREQsIDB4MEUyRCwgMHg0RkRGLCAweDEwMzEsCisgICAgMHg0RkUwLCAweDFERUMsIDB4NEZFMSwgMHgwOUY0LCAweDRGRTMsIDB4MEVBMSwgMHg0RkU0LCAweDEwMzgsCisgICAgMHg0RkU1LCAweDEwMzksIDB4NEZFRSwgMHgwOTJFLCAweDRGRUYsIDB4MTA0NiwgMHg0RkYzLCAweDBEMDYsCisgICAgMHg0RkY1LCAweDBEQTgsIDB4NEZGNiwgMHgxMDQxLCAweDRGRjgsIDB4MEU0MCwgMHg0RkZBLCAweDA1MzYsCisgICAgMHg0RkZELCAweDM3RjYsIDB4NEZGRSwgMHgxMDQ1LCAweDRGRkYsIDB4MjBDMSwgMHg1MDAwLCAweDM3RjcsCisgICAgMHg1MDAxLCAweDM3RjgsIDB4NTAwMiwgMHgzNDQ3LCAweDUwMDUsIDB4MTAzRiwgMHg1MDA2LCAweDEwNDgsCisgICAgMHg1MDA5LCAweDBBRDQsIDB4NTAwQiwgMHgwNzc4LCAweDUwMEQsIDB4MEQxMiwgMHg1MDBGLCAweDE2MDAsCisgICAgMHg1MDEwLCAweDM3RjksIDB4NTAxMSwgMHgxMDQ3LCAweDUwMTIsIDB4MEM1NywgMHg1MDE0LCAweDEwM0MsCisgICAgMHg1MDE2LCAweDA3QUEsIDB4NTAxOSwgMHgwN0E5LCAweDUwMUEsIDB4MTAzQSwgMHg1MDFCLCAweDM3RkEsCisgICAgMHg1MDFFLCAweDIwQzIsIDB4NTAxRiwgMHgwOTA2LCAweDUwMjEsIDB4MTA0MiwgMHg1MDIyLCAweDIwQzAsCisgICAgMHg1MDIzLCAweDBFM0YsIDB4NTAyNCwgMHgwQjhCLCAweDUwMjUsIDB4MTAzRSwgMHg1MDI2LCAweDA3NDcsCisgICAgMHg1MDI3LCAweDM3RkIsIDB4NTAyOCwgMHgxMDNCLCAweDUwMjksIDB4MTA0MywgMHg1MDJBLCAweDEwM0QsCisgICAgMHg1MDJCLCAweDBGOTksIDB4NTAyQywgMHgxMDQ0LCAweDUwMkQsIDB4MEZFNywgMHg1MDJFLCAweDM3RkMsCisgICAgMHg1MDM2LCAweDA2REUsIDB4NTAzOSwgMHgwNzQ2LCAweDUwM0IsIDB4MzgwMCwgMHg1MDQwLCAweDIwQkYsCisgICAgMHg1MDQyLCAweDIwQzUsIDB4NTA0MywgMHgxMDQ5LCAweDUwNDYsIDB4MjBDMywgMHg1MDQ3LCAweDEwNEEsCisgICAgMHg1MDQ4LCAweDEwNEUsIDB4NTA0OSwgMHgwNDkyLCAweDUwNEYsIDB4MEUyMCwgMHg1MDUwLCAweDEwNEQsCisgICAgMHg1MDU1LCAweDEwNEMsIDB4NTA1NiwgMHgxMDUwLCAweDUwNTcsIDB4MzdGRCwgMHg1MDVBLCAweDEwNEYsCisgICAgMHg1MDVDLCAweDBDMDAsIDB4NTA2NSwgMHgwNzQ4LCAweDUwNjYsIDB4MzdGRSwgMHg1MDZBLCAweDM3RkYsCisgICAgMHg1MDZDLCAweDEwNTEsIDB4NTA3MCwgMHgyMEM0LCAweDUwNzIsIDB4MDhGMSwgMHg1MDc0LCAweDBCMDYsCisgICAgMHg1MDc1LCAweDBDMDEsIDB4NTA3NiwgMHgwNkVFLCAweDUwNzgsIDB4MTA1MiwgMHg1MDdELCAweDA2NTAsCisgICAgMHg1MDgwLCAweDEwNTMsIDB4NTA4NSwgMHgxMDU1LCAweDUwOEQsIDB4MEU2MywgMHg1MDhGLCAweDM4MDEsCisgICAgMHg1MDkxLCAweDA3M0MsIDB4NTA5NCwgMHgyMEM2LCAweDUwOTYsIDB4MzgwMiwgMHg1MDk4LCAweDA4N0YsCisgICAgMHg1MDk5LCAweDBEOEIsIDB4NTA5QSwgMHgxMDU0LCAweDUwOUMsIDB4MzgwMywgMHg1MEFDLCAweDA4MzUsCisgICAgMHg1MEFELCAweDBGMkQsIDB4NTBCMiwgMHgxMDU3LCAweDUwQjMsIDB4MTA1QSwgMHg1MEI0LCAweDEwNTYsCisgICAgMHg1MEI1LCAweDA4MzQsIDB4NTBCNywgMHgwOTg3LCAweDUwQkUsIDB4MDcwRiwgMHg1MEMyLCAweDEwNUIsCisgICAgMHg1MEM1LCAweDA2QzcsIDB4NTBDOSwgMHgxMDU4LCAweDUwQ0EsIDB4MTA1OSwgMHg1MENDLCAweDM4MDQsCisgICAgMHg1MENELCAweDBDODcsIDB4NTBDRiwgMHgwQUZFLCAweDUwRDEsIDB4MDY5QiwgMHg1MEQ1LCAweDBFN0IsCisgICAgMHg1MEQ2LCAweDEwNUMsIDB4NTBEOCwgMHgyMEM4LCAweDUwRDksIDB4M0MzMCwgMHg1MERBLCAweDBGODUsCisgICAgMHg1MERFLCAweDEwNUQsIDB4NTBFMywgMHgxMDYwLCAweDUwRTUsIDB4MTA1RSwgMHg1MEU2LCAweDM4MDUsCisgICAgMHg1MEU3LCAweDBBRDAsIDB4NTBFOSwgMHgzODA2LCAweDUwRUQsIDB4MTA1RiwgMHg1MEVFLCAweDEwNjEsCisgICAgMHg1MEVGLCAweDM4MDcsIDB4NTBGMCwgMHgzQzMxLCAweDUwRjQsIDB4MjBDNywgMHg1MEY1LCAweDEwNjMsCisgICAgMHg1MEY5LCAweDEwNjIsIDB4NTBGQiwgMHgwRTE4LCAweDUxMDAsIDB4MDY1MSwgMHg1MTAxLCAweDEwNjUsCisgICAgMHg1MTAyLCAweDEwNjYsIDB4NTEwNCwgMHgwNTJGLCAweDUxMDgsIDB4MzgwOCwgMHg1MTA5LCAweDEwNjQsCisgICAgMHg1MTBCLCAweDM4MDksIDB4NTExMCwgMHgzODBBLCAweDUxMTIsIDB4MDkyMCwgMHg1MTE0LCAweDEwNjksCisgICAgMHg1MTE1LCAweDEwNjgsIDB4NTExNiwgMHgxMDY3LCAweDUxMTgsIDB4MTAyRiwgMHg1MTFBLCAweDEwNkEsCisgICAgMHg1MTFCLCAweDM4MEIsIDB4NTExRSwgMHgzODBDLCAweDUxMUYsIDB4MDk4OCwgMHg1MTIxLCAweDEwNkIsCisgICAgMHg1MTJBLCAweDBGMEYsIDB4NTEzMiwgMHgwRUU1LCAweDUxMzcsIDB4MTA2RCwgMHg1MTNBLCAweDEwNkMsCisgICAgMHg1MTNCLCAweDEwNkYsIDB4NTEzQywgMHgxMDZFLCAweDUxM0YsIDB4MTA3MCwgMHg1MTQwLCAweDEwNzEsCisgICAgMHg1MTQxLCAweDA0QjgsIDB4NTE0MywgMHgwNzY5LCAweDUxNDQsIDB4MDcxMSwgMHg1MTQ1LCAweDA5NDYsCisgICAgMHg1MTQ2LCAweDBCQjksIDB4NTE0NywgMHgwNjlDLCAweDUxNDgsIDB4MEE4QywgMHg1MTQ5LCAweDA3QUIsCisgICAgMHg1MTRBLCAweDIwQzksIDB4NTE0QiwgMHgwODAwLCAweDUxNEMsIDB4MTA3MywgMHg1MTRELCAweDBFRDQsCisgICAgMHg1MTRFLCAweDBDNDAsIDB4NTE1MCwgMHgwOEM3LCAweDUxNTIsIDB4MTA3MiwgMHg1MTU0LCAweDEwNzQsCisgICAgMHg1MTVBLCAweDBDNTgsIDB4NTE1QywgMHgwNUQzLCAweDUxNUYsIDB4MzgwRCwgMHg1MTYyLCAweDEwNzUsCisgICAgMHg1MTY0LCAweDIwQ0EsIDB4NTE2NSwgMHgwQ0Q2LCAweDUxNjcsIDB4MzY4RSwgMHg1MTY4LCAweDBBQjYsCisgICAgMHg1MTY5LCAweDEwNzcsIDB4NTE2QSwgMHgxMDc4LCAweDUxNkIsIDB4MEQ0MCwgMHg1MTZDLCAweDA3QUMsCisgICAgMHg1MTZELCAweDBGRTEsIDB4NTE2RSwgMHgxMDc5LCAweDUxNzEsIDB4MDY5RSwgMHg1MTc1LCAweDBFMEMsCisgICAgMHg1MTc2LCAweDBCMTYsIDB4NTE3NywgMHgwNkU5LCAweDUxNzgsIDB4MEMyRiwgMHg1MTc5LCAweDM3NzksCisgICAgMHg1MTdDLCAweDA3NDksIDB4NTE4MCwgMHgxMDdBLCAweDUxODIsIDB4MTA3QiwgMHg1MTg1LCAweDBDQkEsCisgICAgMHg1MTg2LCAweDA1MDEsIDB4NTE4OSwgMHgxMDdFLCAweDUxOEEsIDB4MDg2RCwgMHg1MThDLCAweDEwN0QsCisgICAgMHg1MThELCAweDA4MzYsIDB4NTE4RiwgMHgxMDdGLCAweDUxOTAsIDB4MTg1QiwgMHg1MTkxLCAweDEwODAsCisgICAgMHg1MTkyLCAweDBFNkYsIDB4NTE5MywgMHgxMDgxLCAweDUxOTUsIDB4MTA4MiwgMHg1MTk2LCAweDEwODMsCisgICAgMHg1MTk3LCAweDA5RDEsIDB4NTE5OSwgMHgwOEY4LCAweDUxOUQsIDB4MjBDQiwgMHg1MUEwLCAweDA1RTMsCisgICAgMHg1MUExLCAweDM4MEUsIDB4NTFBMiwgMHgxMDg2LCAweDUxQTQsIDB4MTA4NCwgMHg1MUE1LCAweDBFQzksCisgICAgMHg1MUE2LCAweDEwODUsIDB4NTFBOCwgMHgwRENDLCAweDUxQTksIDB4MTA4NywgMHg1MUFBLCAweDEwODgsCisgICAgMHg1MUFCLCAweDEwODksIDB4NTFBQywgMHgwQzU5LCAweDUxQjAsIDB4MTA4RCwgMHg1MUIxLCAweDEwOEIsCisgICAgMHg1MUIyLCAweDEwOEMsIDB4NTFCMywgMHgxMDhBLCAweDUxQjQsIDB4MDg1MywgMHg1MUI1LCAweDEwOEUsCisgICAgMHg1MUI2LCAweDBFRjYsIDB4NTFCNywgMHgwRkFDLCAweDUxQkMsIDB4MzgwRiwgMHg1MUJELCAweDEwOEYsCisgICAgMHg1MUJFLCAweDIwQ0MsIDB4NTFDMywgMHgzQzMyLCAweDUxQzQsIDB4MEE0QywgMHg1MUM1LCAweDEwOTAsCisgICAgMHg1MUM2LCAweDA5NjQsIDB4NTFDOSwgMHgxMDkxLCAweDUxQ0IsIDB4MEJCQSwgMHg1MUNDLCAweDBGODcsCisgICAgMHg1MUNELCAweDBDNUEsIDB4NTFENiwgMHgxMERBLCAweDUxREIsIDB4MTA5MiwgMHg1MURDLCAweDIwNUMsCisgICAgMHg1MURELCAweDA2QkQsIDB4NTFERSwgMHgzODEwLCAweDUxRTAsIDB4MTA5MywgMHg1MUUxLCAweDBFOEMsCisgICAgMHg1MUU2LCAweDA5NzIsIDB4NTFFNywgMHgwQjVDLCAweDUxRTksIDB4MTA5NSwgMHg1MUVBLCAweDBDQkMsCisgICAgMHg1MUVDLCAweDIwQ0QsIDB4NTFFRCwgMHgxMDk2LCAweDUxRUUsIDB4MzgxMSwgMHg1MUYwLCAweDEwOTcsCisgICAgMHg1MUYxLCAweDA1OEMsIDB4NTFGNCwgMHgzODEyLCAweDUxRjUsIDB4MTA5OCwgMHg1MUY2LCAweDA2OUYsCisgICAgMHg1MUY4LCAweDBDQTQsIDB4NTFGOSwgMHgwNTFDLCAweDUxRkEsIDB4MDk1QSwgMHg1MUZELCAweDBEMzUsCisgICAgMHg1MUZFLCAweDEwOTksIDB4NTIwMCwgMHgwQzVCLCAweDUyMDEsIDB4MzgxMywgMHg1MjAyLCAweDM4MTQsCisgICAgMHg1MjAzLCAweDBBMTUsIDB4NTIwNCwgMHgxMDlBLCAweDUyMDYsIDB4MERGQywgMHg1MjA3LCAweDBBN0UsCisgICAgMHg1MjA4LCAweDA1REUsIDB4NTIwQSwgMHgwNUU1LCAweDUyMEIsIDB4MTA5QiwgMHg1MjBFLCAweDEwOUQsCisgICAgMHg1MjExLCAweDA3MTAsIDB4NTIxMywgMHgzODE1LCAweDUyMTQsIDB4MTA5QywgMHg1MjE1LCAweDIwQ0UsCisgICAgMHg1MjE3LCAweDBGQkIsIDB4NTIxRCwgMHgwOTczLCAweDUyMjQsIDB4MEQ1MSwgMHg1MjI1LCAweDBFMUMsCisgICAgMHg1MjI3LCAweDEwOUUsIDB4NTIyOSwgMHgwRjYyLCAweDUyMkEsIDB4MTA5RiwgMHg1MjJFLCAweDEwQTAsCisgICAgMHg1MjMwLCAweDBDNzgsIDB4NTIzMywgMHgxMEExLCAweDUyMzYsIDB4MEE0RCwgMHg1MjM3LCAweDA4NkUsCisgICAgMHg1MjM4LCAweDA3NEEsIDB4NTIzOSwgMHgxMEEyLCAweDUyM0EsIDB4MDg5NywgMHg1MjNCLCAweDA4MDEsCisgICAgMHg1MjQzLCAweDBDMDIsIDB4NTI0NCwgMHgxMEE0LCAweDUyNDcsIDB4MEIwNywgMHg1MjQ5LCAweDM4MTYsCisgICAgMHg1MjRBLCAweDA4NUYsIDB4NTI0QiwgMHgxMEE1LCAweDUyNEMsIDB4MTBBNiwgMHg1MjRELCAweDBBQjIsCisgICAgMHg1MjRGLCAweDEwQTMsIDB4NTI1NCwgMHgxMEE4LCAweDUyNTYsIDB4MEU2NCwgMHg1MjVCLCAweDA3RjYsCisgICAgMHg1MjVELCAweDFFNUUsIDB4NTI1RSwgMHgxMEE3LCAweDUyNjEsIDB4MzgxNywgMHg1MjYzLCAweDA3NEIsCisgICAgMHg1MjY0LCAweDA4NEUsIDB4NTI2NSwgMHgwRDIzLCAweDUyNjYsIDB4MzgxOCwgMHg1MjY5LCAweDEwQUIsCisgICAgMHg1MjZBLCAweDEwQTksIDB4NTI2RiwgMHgwREVELCAweDUyNzAsIDB4MDlEMiwgMHg1MjcxLCAweDEwQjIsCisgICAgMHg1MjcyLCAweDA1QzIsIDB4NTI3MywgMHgxMEFDLCAweDUyNzQsIDB4MTBBQSwgMHg1Mjc1LCAweDBBRDEsCisgICAgMHg1MjdELCAweDEwQUUsIDB4NTI3RiwgMHgxMEFELCAweDUyODMsIDB4MDVBMiwgMHg1Mjg3LCAweDA3MzYsCisgICAgMHg1Mjg4LCAweDEwQjMsIDB4NTI4OSwgMHgwRjc1LCAweDUyOEQsIDB4MTBBRiwgMHg1MjkxLCAweDEwQjQsCisgICAgMHg1MjkyLCAweDEwQjEsIDB4NTI5MywgMHgzODE5LCAweDUyOTQsIDB4MTBCMCwgMHg1MjlCLCAweDBGOTcsCisgICAgMHg1MjlDLCAweDIwQ0YsIDB4NTI5RiwgMHgwN0FELCAweDUyQTAsIDB4MDU0MywgMHg1MkEzLCAweDBGQkMsCisgICAgMHg1MkE2LCAweDIwRDAsIDB4NTJBOSwgMHgwOTdGLCAweDUyQUEsIDB4MEM1MiwgMHg1MkFCLCAweDA3RjcsCisgICAgMHg1MkFDLCAweDEwQjcsIDB4NTJBRCwgMHgxMEI4LCAweDUyQUYsIDB4MjE3RCwgMHg1MkIxLCAweDBGQUQsCisgICAgMHg1MkI0LCAweDBGRDEsIDB4NTJCNSwgMHgxMEJBLCAweDUyQjksIDB4MDdBRSwgMHg1MkJDLCAweDEwQjksCisgICAgMHg1MkJFLCAweDA1OEQsIDB4NTJDMCwgMHgyMEQxLCAweDUyQzEsIDB4MTBCQiwgMHg1MkMzLCAweDBFODQsCisgICAgMHg1MkM1LCAweDBCRDgsIDB4NTJDNywgMHgwRjEwLCAweDUyQzgsIDB4MzgxQSwgMHg1MkM5LCAweDBFMjksCisgICAgMHg1MkNELCAweDEwQkMsIDB4NTJEMCwgMHgzNkU4LCAweDUyRDIsIDB4MUJFRSwgMHg1MkQ1LCAweDBDODgsCisgICAgMHg1MkQ3LCAweDEwQkQsIDB4NTJEOCwgMHgwNUU2LCAweDUyRDksIDB4MEVCRiwgMHg1MkRCLCAweDIwRDIsCisgICAgMHg1MkRELCAweDA5ODksIDB4NTJERSwgMHgxMEJFLCAweDUyREYsIDB4MEUzNywgMHg1MkUwLCAweDEwQzIsCisgICAgMHg1MkUyLCAweDBBNEUsIDB4NTJFMywgMHgxMEJGLCAweDUyRTQsIDB4MDZDOCwgMHg1MkU2LCAweDEwQzAsCisgICAgMHg1MkU3LCAweDA1RTcsIDB4NTJGMCwgMHgzODFCLCAweDUyRjIsIDB4MDcwNCwgMHg1MkYzLCAweDEwQzMsCisgICAgMHg1MkY1LCAweDEwQzQsIDB4NTJGOCwgMHgxMEM1LCAweDUyRjksIDB4MTBDNiwgMHg1MkZBLCAweDA5MDcsCisgICAgMHg1MkZFLCAweDA3QUYsIDB4NTJGRiwgMHgwRUVBLCAweDUzMDAsIDB4MjBEMywgMHg1MzAxLCAweDBFRjQsCisgICAgMHg1MzAyLCAweDBDQ0YsIDB4NTMwNSwgMHgwRTQxLCAweDUzMDYsIDB4MTBDNywgMHg1MzA3LCAweDIwRDQsCisgICAgMHg1MzA4LCAweDEwQzgsIDB4NTMwQSwgMHgzODFDLCAweDUzMEIsIDB4MzgxRCwgMHg1MzBELCAweDEwQ0EsCisgICAgMHg1MzBGLCAweDEwQ0MsIDB4NTMxMCwgMHgxMENCLCAweDUzMTUsIDB4MTBDRCwgMHg1MzE2LCAweDA1M0QsCisgICAgMHg1MzE3LCAweDBFN0EsIDB4NTMxOSwgMHgwODZDLCAweDUzMUEsIDB4MTBDRSwgMHg1MzFELCAweDBBREIsCisgICAgMHg1MzIwLCAweDA5OEEsIDB4NTMyMSwgMHgwNkExLCAweDUzMjMsIDB4MTBDRiwgMHg1MzI0LCAweDIwRDUsCisgICAgMHg1MzJBLCAweDBENkYsIDB4NTMyRiwgMHgxMEQwLCAweDUzMzEsIDB4MTBEMSwgMHg1MzMzLCAweDEwRDIsCisgICAgMHg1MzM4LCAweDEwRDMsIDB4NTMzOSwgMHgwRDk2LCAweDUzM0EsIDB4MDZFMCwgMHg1MzNCLCAweDA0QTksCisgICAgMHg1MzNFLCAweDM4MUUsIDB4NTMzRiwgMHgwQzk3LCAweDUzNDAsIDB4MTBENCwgMHg1MzQxLCAweDA5NDcsCisgICAgMHg1MzQzLCAweDBBOEQsIDB4NTM0NSwgMHgxMEQ2LCAweDUzNDYsIDB4MTBENSwgMHg1MzQ3LCAweDA5OEIsCisgICAgMHg1MzQ4LCAweDA3OTUsIDB4NTM0OSwgMHgxMEQ4LCAweDUzNEEsIDB4MEQ1MiwgMHg1MzRCLCAweDM4MjAsCisgICAgMHg1MzRDLCAweDM4MUYsIDB4NTM0RCwgMHgxMEQ5LCAweDUzNTEsIDB4MEQ3MCwgMHg1MzUyLCAweDBCMTQsCisgICAgMHg1MzUzLCAweDBCNEUsIDB4NTM1NCwgMHgwNkEwLCAweDUzNTcsIDB4MENDNiwgMHg1MzU4LCAweDBCNkYsCisgICAgMHg1MzVBLCAweDBEMjQsIDB4NTM1QywgMHgwRTdDLCAweDUzNUUsIDB4MTBEQiwgMHg1MzYwLCAweDBBOEUsCisgICAgMHg1MzYxLCAweDM4MjEsIDB4NTM2NiwgMHgwNzBCLCAweDUzNjksIDB4MTBEQywgMHg1MzZDLCAweDM4MjIsCisgICAgMHg1MzZFLCAweDEwREQsIDB4NTM2RiwgMHgwNENFLCAweDUzNzAsIDB4MDRCOSwgMHg1MzcxLCAweDA2MjksCisgICAgMHg1MzcyLCAweDIwRDYsIDB4NTM3MywgMHgwQjA4LCAweDUzNzQsIDB4MDY2QiwgMHg1Mzc1LCAweDBGNUIsCisgICAgMHg1Mzc3LCAweDEwRTAsIDB4NTM3OCwgMHgwNTM3LCAweDUzN0IsIDB4MTBERiwgMHg1MzdELCAweDM0MzUsCisgICAgMHg1MzdGLCAweDA2QTIsIDB4NTM4MiwgMHgxMEUxLCAweDUzODQsIDB4MEVGRCwgMHg1Mzg5LCAweDM3RDAsCisgICAgMHg1MzkzLCAweDIwRDcsIDB4NTM5NiwgMHgxMEUyLCAweDUzOTgsIDB4MEY5QSwgMHg1MzlBLCAweDA3QjAsCisgICAgMHg1MzlGLCAweDA3NkEsIDB4NTNBMCwgMHgxMEUzLCAweDUzQTUsIDB4MTBFNSwgMHg1M0E2LCAweDEwRTQsCisgICAgMHg1M0E4LCAweDBBMjUsIDB4NTNBOSwgMHgwNERCLCAweDUzQUIsIDB4MzgyMywgMHg1M0FELCAweDA1MDAsCisgICAgMHg1M0FFLCAweDEwRTYsIDB4NTNCMCwgMHgxMEU3LCAweDUzQjIsIDB4MjBEOCwgMHg1M0IzLCAweDA3NkIsCisgICAgMHg1M0I2LCAweDEwRTgsIDB4NTNCQiwgMHgwNjg4LCAweDUzQzIsIDB4MDg4MCwgMHg1M0MzLCAweDEwRTksCisgICAgMHg1M0M4LCAweDBFQTIsIDB4NTNDOSwgMHgwODI1LCAweDUzQ0EsIDB4MDY3NCwgMHg1M0NCLCAweDBGMTEsCisgICAgMHg1M0NDLCAweDBBRDIsIDB4NTNDRCwgMHgwRDUzLCAweDUzQ0UsIDB4MDkyOSwgMHg1M0Q0LCAweDA5NTEsCisgICAgMHg1M0Q2LCAweDA5MTQsIDB4NTNENywgMHgwOTIxLCAweDUzRDksIDB4MDk4MCwgMHg1M0RBLCAweDM4MjQsCisgICAgMHg1M0RCLCAweDBENTQsIDB4NTNERCwgMHgyMEQ5LCAweDUzREYsIDB4MTBFQywgMHg1M0UxLCAweDA0RTUsCisgICAgMHg1M0UyLCAweDBBRDMsIDB4NTNFMywgMHgwN0IxLCAweDUzRTQsIDB4MDc3OSwgMHg1M0U1LCAweDA2REYsCisgICAgMHg1M0U2LCAweDM4MjUsIDB4NTNFOCwgMHgxMEYwLCAweDUzRTksIDB4MEI1RiwgMHg1M0VBLCAweDBCNUUsCisgICAgMHg1M0VCLCAweDA2QTMsIDB4NTNFQywgMHgwOThDLCAweDUzRUQsIDB4MTBGMSwgMHg1M0VFLCAweDEwRUYsCisgICAgMHg1M0VGLCAweDA1NDQsIDB4NTNGMCwgMHgwQjQ2LCAweDUzRjEsIDB4MDhFNCwgMHg1M0YyLCAweDA4OTksCisgICAgMHg1M0YzLCAweDA0QzgsIDB4NTNGNSwgMHgzODI2LCAweDUzRjYsIDB4MDVDRSwgMHg1M0Y3LCAweDA3RjgsCisgICAgMHg1M0Y4LCAweDA4OTgsIDB4NTNGQSwgMHgxMEYyLCAweDU0MDEsIDB4MTBGMywgMHg1NDAzLCAweDA2NjMsCisgICAgMHg1NDA0LCAweDA1QTQsIDB4NTQwOCwgMHgwN0Y5LCAweDU0MDksIDB4MDY2MiwgMHg1NDBBLCAweDBCRkIsCisgICAgMHg1NDBCLCAweDA0QzcsIDB4NTQwQywgMHgwQzg5LCAweDU0MEQsIDB4MEVDQSwgMHg1NDBFLCAweDA3QjMsCisgICAgMHg1NDBGLCAweDBGNjMsIDB4NTQxMCwgMHgwQzQxLCAweDU0MTEsIDB4MDdCMiwgMHg1NDFCLCAweDA3MDUsCisgICAgMHg1NDFELCAweDEwRkMsIDB4NTQxRiwgMHgwNkRCLCAweDU0MjAsIDB4MEU3OCwgMHg1NDI2LCAweDBENzEsCisgICAgMHg1NDI3LCAweDM4MjcsIDB4NTQyOSwgMHgxMEZCLCAweDU0MkIsIDB4MDYxQSwgMHg1NDJDLCAweDEwRjYsCisgICAgMHg1NDJELCAweDEwRjcsIDB4NTQyRSwgMHgxMEY5LCAweDU0MzMsIDB4MzVDMCwgMHg1NDM2LCAweDEwRkEsCisgICAgMHg1NDM4LCAweDA2NzUsIDB4NTQzOSwgMHgwQTI3LCAweDU0M0IsIDB4MERGRCwgMHg1NDNDLCAweDEwRjgsCisgICAgMHg1NDNELCAweDEwRjQsIDB4NTQzRSwgMHgwNzk3LCAweDU0M0YsIDB4MzVDRiwgMHg1NDQwLCAweDEwRjUsCisgICAgMHg1NDQyLCAweDBGQ0EsIDB4NTQ0NiwgMHgwRTQyLCAweDU0NDgsIDB4MEMwNCwgMHg1NDQ5LCAweDA3OTYsCisgICAgMHg1NDRBLCAweDA4MDIsIDB4NTQ0RCwgMHgzODI4LCAweDU0NEUsIDB4MTBGRCwgMHg1NDUxLCAweDBDQjUsCisgICAgMHg1NDU1LCAweDM3MjMsIDB4NTQ1RiwgMHgxMTAxLCAweDU0NjYsIDB4MzgyOSwgMHg1NDY4LCAweDA5MkEsCisgICAgMHg1NDZBLCAweDA5MjIsIDB4NTQ2QiwgMHgzODJBLCAweDU0NzAsIDB4MTEwNCwgMHg1NDcxLCAweDExMDIsCisgICAgMHg1NDczLCAweDBFQUYsIDB4NTQ3NCwgMHgzODJCLCAweDU0NzUsIDB4MTBGRiwgMHg1NDc2LCAweDExMDgsCisgICAgMHg1NDc3LCAweDExMDMsIDB4NTQ3QiwgMHgxMTA2LCAweDU0N0MsIDB4MDc3QSwgMHg1NDdELCAweDBFQ0IsCisgICAgMHg1NDgwLCAweDExMDcsIDB4NTQ4NCwgMHgxMTA5LCAweDU0ODYsIDB4MTEwQiwgMHg1NDhBLCAweDIwREMsCisgICAgMHg1NDhCLCAweDA4NjAsIDB4NTQ4QywgMHgwRkU4LCAweDU0OEQsIDB4MzgyQywgMHg1NDhFLCAweDExMDAsCisgICAgMHg1NDhGLCAweDEwRkUsIDB4NTQ5MCwgMHgxMTBBLCAweDU0OTIsIDB4MTEwNSwgMHg1NDk2LCAweDM4MkQsCisgICAgMHg1NDlDLCAweDIwREIsIDB4NTRBMSwgMHgzODJFLCAweDU0QTIsIDB4MTEwRCwgMHg1NEE0LCAweDExMTYsCisgICAgMHg1NEE1LCAweDExMEYsIDB4NTRBOCwgMHgxMTEzLCAweDU0QTksIDB4MjBERCwgMHg1NEFCLCAweDExMTQsCisgICAgMHg1NEFDLCAweDExMTAsIDB4NTRBRCwgMHgzODJGLCAweDU0QUYsIDB4MTEzMSwgMHg1NEIyLCAweDA4NTksCisgICAgMHg1NEIzLCAweDA1OEYsIDB4NTRCOCwgMHgxMTBFLCAweDU0QjksIDB4MzgzMCwgMHg1NEJDLCAweDExMTgsCisgICAgMHg1NEJELCAweDA0QkEsIDB4NTRCRSwgMHgxMTE3LCAweDU0QkYsIDB4MzgzMSwgMHg1NEMwLCAweDA0NjksCisgICAgMHg1NEMxLCAweDBEQkMsIDB4NTRDMiwgMHgxMTE1LCAweDU0QzQsIDB4MTExMSwgMHg1NEM2LCAweDM4MzIsCisgICAgMHg1NEM3LCAweDExMEMsIDB4NTRDOCwgMHgxMTEyLCAweDU0QzksIDB4MDgzOCwgMHg1NENELCAweDM4MzMsCisgICAgMHg1NEQ4LCAweDExMTksIDB4NTRFMSwgMHgwNEJCLCAweDU0RTIsIDB4MTEyMiwgMHg1NEU1LCAweDExMUEsCisgICAgMHg1NEU2LCAweDExMUIsIDB4NTRFOCwgMHgwOThELCAweDU0RTksIDB4MEU5NywgMHg1NEVELCAweDExMjAsCisgICAgMHg1NEVFLCAweDExMUYsIDB4NTRGMiwgMHgwQzI5LCAweDU0RkEsIDB4MTEyMSwgMHg1NEZELCAweDExMUUsCisgICAgMHg1NEZGLCAweDIwREUsIDB4NTUwNCwgMHgwNEQ2LCAweDU1MDYsIDB4MDgyNiwgMHg1NTA3LCAweDA5RjYsCisgICAgMHg1NTBFLCAweDM4MzQsIDB4NTUwRiwgMHgxMTFDLCAweDU1MTAsIDB4MEM1QywgMHg1NTE0LCAweDExMUQsCisgICAgMHg1NTE2LCAweDA0NjYsIDB4NTUyQiwgMHgzODM1LCAweDU1MkUsIDB4MTEyNywgMHg1NTJGLCAweDBGMEQsCisgICAgMHg1NTMxLCAweDA5OEYsIDB4NTUzMywgMHgxMTJELCAweDU1MzUsIDB4MzgzNiwgMHg1NTM4LCAweDExMkMsCisgICAgMHg1NTM5LCAweDExMjMsIDB4NTUzRSwgMHgwQjIzLCAweDU1NDAsIDB4MTEyNCwgMHg1NTQ0LCAweDBCNEYsCisgICAgMHg1NTQ1LCAweDExMjksIDB4NTU0NiwgMHgwOThFLCAweDU1NEEsIDB4MzgzNywgMHg1NTRDLCAweDExMjYsCisgICAgMHg1NTRGLCAweDBFRjAsIDB4NTU1MywgMHgwNzEyLCAweDU1NTYsIDB4MTEyQSwgMHg1NTU3LCAweDExMkIsCisgICAgMHg1NTVDLCAweDExMjgsIDB4NTU1RCwgMHgxMTJFLCAweDU1NUUsIDB4MUREMSwgMHg1NTYwLCAweDM4MzgsCisgICAgMHg1NTYxLCAweDM4MzksIDB4NTU2MywgMHgxMTI1LCAweDU1N0IsIDB4MTEzNCwgMHg1NTdDLCAweDExMzksCisgICAgMHg1NTdFLCAweDExMzUsIDB4NTU4MCwgMHgxMTMwLCAweDU1ODMsIDB4MTEzQSwgMHg1NTg0LCAweDBBQjMsCisgICAgMHg1NTg2LCAweDIwREYsIDB4NTU4NywgMHgxMTNDLCAweDU1ODgsIDB4MzgzQSwgMHg1NTg5LCAweDA3QjQsCisgICAgMHg1NThBLCAweDExMzIsIDB4NTU4QiwgMHgwQkJCLCAweDU1OEUsIDB4MzgzQiwgMHg1NTk4LCAweDExMzYsCisgICAgMHg1NTk5LCAweDExMkYsIDB4NTU5QSwgMHgwNUU5LCAweDU1OUMsIDB4MDYyQSwgMHg1NTlELCAweDA1QzMsCisgICAgMHg1NTlFLCAweDExMzcsIDB4NTU5RiwgMHgxMTMzLCAweDU1QTcsIDB4MDc0QywgMHg1NUE4LCAweDExM0QsCisgICAgMHg1NUE5LCAweDExM0IsIDB4NTVBQSwgMHgwQUQ1LCAweDU1QUIsIDB4MDY2NCwgMHg1NUFDLCAweDA2QTQsCisgICAgMHg1NUFFLCAweDExMzgsIDB4NTVCMCwgMHgwNkVDLCAweDU1QjYsIDB4MDRFNiwgMHg1NUM0LCAweDExNDEsCisgICAgMHg1NUM1LCAweDExM0YsIDB4NTVDNywgMHgxMTc4LCAweDU1RDQsIDB4MTE0NCwgMHg1NURBLCAweDExM0UsCisgICAgMHg1NURDLCAweDExNDIsIDB4NTVERiwgMHgxMTQwLCAweDU1RTMsIDB4MDg5QSwgMHg1NUU0LCAweDExNDMsCisgICAgMHg1NUY3LCAweDExNDYsIDB4NTVGOSwgMHgxMTRCLCAweDU1RkQsIDB4MTE0OSwgMHg1NUZFLCAweDExNDgsCisgICAgMHg1NjA2LCAweDBCNzAsIDB4NTYwOCwgMHgzODNDLCAweDU2MDksIDB4MDU0NSwgMHg1NjBFLCAweDM4M0QsCisgICAgMHg1NjBGLCAweDM4M0UsIDB4NTYxNCwgMHgxMTQ1LCAweDU2MTYsIDB4MTE0NywgMHg1NjE3LCAweDA5OTAsCisgICAgMHg1NjE4LCAweDA0RDUsIDB4NTYxQiwgMHgxMTRBLCAweDU2MjAsIDB4M0MxRCwgMHg1NjI5LCAweDA1NUUsCisgICAgMHg1NjJGLCAweDExNTUsIDB4NTYzMSwgMHgwOUU0LCAweDU2MzIsIDB4MTE1MSwgMHg1NjM0LCAweDExNEYsCisgICAgMHg1NjM2LCAweDExNTAsIDB4NTYzNywgMHgzODNGLCAweDU2MzgsIDB4MTE1MiwgMHg1NjNGLCAweDM4NDAsCisgICAgMHg1NjQyLCAweDA0REYsIDB4NTY0OSwgMHgzODQxLCAweDU2NEIsIDB4Mzg0MiwgMHg1NjRDLCAweDBBQkIsCisgICAgMHg1NjRFLCAweDExNEMsIDB4NTY0RiwgMHgzODQzLCAweDU2NTAsIDB4MTE0RCwgMHg1NjUzLCAweDFGMUIsCisgICAgMHg1NjVCLCAweDA1RDgsIDB4NTY2NCwgMHgxMTU0LCAweDU2NjYsIDB4Mzg0NCwgMHg1NjY4LCAweDA2MkIsCisgICAgMHg1NjY5LCAweDM4NDUsIDB4NTY2QSwgMHgxMTU3LCAweDU2NkIsIDB4MTE1MywgMHg1NjZDLCAweDExNTYsCisgICAgMHg1NjZGLCAweDM4NDYsIDB4NTY3MSwgMHgzODQ3LCAweDU2NzIsIDB4Mzg0OCwgMHg1Njc0LCAweDBERkUsCisgICAgMHg1Njc2LCAweDNDMzMsIDB4NTY3OCwgMHgwQ0FELCAweDU2N0EsIDB4MEQ0QywgMHg1NjgwLCAweDExNTksCisgICAgMHg1Njg2LCAweDExNTgsIDB4NTY4NywgMHgwNUEzLCAweDU2OEEsIDB4MTE1QSwgMHg1NjhGLCAweDExNUQsCisgICAgMHg1Njk0LCAweDExNUMsIDB4NTY5NSwgMHgzODQ5LCAweDU2OTksIDB4MURFNiwgMHg1NjlBLCAweDM4NEEsCisgICAgMHg1NkEwLCAweDExNUIsIDB4NTZBMiwgMHgwQ0VGLCAweDU2QTUsIDB4MTE1RSwgMHg1NkFDLCAweDM4NEIsCisgICAgMHg1NkFELCAweDM4NEMsIDB4NTZBRSwgMHgxMTVGLCAweDU2QjEsIDB4Mzg0RCwgMHg1NkI0LCAweDExNjEsCisgICAgMHg1NkI2LCAweDExNjAsIDB4NTZCQywgMHgxMTYzLCAweDU2QzAsIDB4MTE2NiwgMHg1NkMxLCAweDExNjQsCisgICAgMHg1NkMyLCAweDExNjIsIDB4NTZDMywgMHgxMTY1LCAweDU2QzgsIDB4MTE2NywgMHg1NkM5LCAweDM4NEUsCisgICAgMHg1NkNBLCAweDFFNUEsIDB4NTZDRSwgMHgxMTY4LCAweDU2RDEsIDB4MTE2OSwgMHg1NkQzLCAweDExNkEsCisgICAgMHg1NkQ3LCAweDExNkIsIDB4NTZEOCwgMHgxMDdDLCAweDU2REEsIDB4MDkyOCwgMHg1NkRCLCAweDA4OUIsCisgICAgMHg1NkRELCAweDM4NEYsIDB4NTZERSwgMHgwNTczLCAweDU2RTAsIDB4MDRCQywgMHg1NkUzLCAweDBCODIsCisgICAgMHg1NkU0LCAweDM4NTAsIDB4NTZFRSwgMHgxMTZDLCAweDU2RjAsIDB4MDgxNCwgMHg1NkYyLCAweDA0OTMsCisgICAgMHg1NkYzLCAweDBBMjQsIDB4NTZGOSwgMHgxMTZELCAweDU2RkEsIDB4MDc3QiwgMHg1NkZELCAweDA4MDMsCisgICAgMHg1NkZGLCAweDExNkYsIDB4NTcwMCwgMHgxMTZFLCAweDU3MDMsIDB4MEUzMCwgMHg1NzA0LCAweDExNzAsCisgICAgMHg1NzA4LCAweDExNzIsIDB4NTcwOSwgMHgxMTcxLCAweDU3MEEsIDB4Mzg1MSwgMHg1NzBCLCAweDExNzMsCisgICAgMHg1NzBELCAweDExNzQsIDB4NTcwRiwgMHgwNzRELCAweDU3MTIsIDB4MDUwMiwgMHg1NzEzLCAweDExNzUsCisgICAgMHg1NzE1LCAweDM4NTIsIDB4NTcxNiwgMHgxMTc3LCAweDU3MTgsIDB4MTE3NiwgMHg1NzFDLCAweDExNzksCisgICAgMHg1NzFGLCAweDBDNTQsIDB4NTcyMSwgMHgzNjgwLCAweDU3MjMsIDB4Mzg1MywgMHg1NzI2LCAweDExN0EsCisgICAgMHg1NzI3LCAweDA0NzksIDB4NTcyOCwgMHgwODRGLCAweDU3MkQsIDB4MDcxMywgMHg1NzJGLCAweDM4NTQsCisgICAgMHg1NzMwLCAweDBCOEQsIDB4NTczMywgMHgzODU1LCAweDU3MzQsIDB4Mzg1NiwgMHg1NzM3LCAweDExN0IsCisgICAgMHg1NzM4LCAweDExN0MsIDB4NTczQiwgMHgxMTdFLCAweDU3NDAsIDB4MTE3RiwgMHg1NzQyLCAweDA4NTQsCisgICAgMHg1NzQ3LCAweDA2QzksIDB4NTc0QSwgMHgwRTY1LCAweDU3NEMsIDB4Mzg1NywgMHg1NzRFLCAweDExN0QsCisgICAgMHg1NzRGLCAweDExODAsIDB4NTc1MCwgMHgwODMxLCAweDU3NTEsIDB4MDdCNSwgMHg1NzU5LCAweDIwRTAsCisgICAgMHg1NzYxLCAweDExODQsIDB4NTc2NCwgMHgwODE1LCAweDU3NjUsIDB4MjBFMSwgMHg1NzY2LCAweDBCNzEsCisgICAgMHg1NzY5LCAweDExODEsIDB4NTc2QSwgMHgwQkY2LCAweDU3NzAsIDB4Mzg1OCwgMHg1NzdGLCAweDExODUsCisgICAgMHg1NzgyLCAweDBBMjgsIDB4NTc4OCwgMHgxMTgzLCAweDU3ODksIDB4MTE4NiwgMHg1NzhCLCAweDA3MTUsCisgICAgMHg1NzhDLCAweDM4NTksIDB4NTc5MywgMHgxMTg3LCAweDU3OUMsIDB4Mzg1QSwgMHg1N0EwLCAweDExODgsCisgICAgMHg1N0EyLCAweDA3QjYsIDB4NTdBMywgMHgwNTlFLCAweDU3QTQsIDB4MTE4QSwgMHg1N0FBLCAweDExOEIsCisgICAgMHg1N0FDLCAweDIwRTIsIDB4NTdCMCwgMHgxMThDLCAweDU3QjMsIDB4MTE4OSwgMHg1N0I4LCAweDM4NUIsCisgICAgMHg1N0MwLCAweDExODIsIDB4NTdDMywgMHgxMThELCAweDU3QzYsIDB4MTE4RSwgMHg1N0M3LCAweDIwRTQsCisgICAgMHg1N0M4LCAweDIwRTMsIDB4NTdDQiwgMHgwRTkyLCAweDU3Q0UsIDB4MDlEMywgMHg1N0QyLCAweDExOTAsCisgICAgMHg1N0QzLCAweDExOTEsIDB4NTdENCwgMHgxMThGLCAweDU3RDYsIDB4MTE5MywgMHg1N0RDLCAweDBDRUUsCisgICAgMHg1N0RGLCAweDA0QUMsIDB4NTdFMCwgMHgwREM4LCAweDU3RTMsIDB4MTE5NCwgMHg1N0U2LCAweDM4NUMsCisgICAgMHg1N0VELCAweDM4NUQsIDB4NTdGNCwgMHgwOUU1LCAweDU3RjUsIDB4Mzg1RSwgMHg1N0Y2LCAweDM4NUYsCisgICAgMHg1N0Y3LCAweDA4RTUsIDB4NTdGOSwgMHgwRDEzLCAweDU3RkEsIDB4MDYyQywgMHg1N0ZDLCAweDA4NUIsCisgICAgMHg1N0ZGLCAweDM4NjAsIDB4NTgwMCwgMHgwRTg3LCAweDU4MDIsIDB4MEM4QSwgMHg1ODA1LCAweDA3NEUsCisgICAgMHg1ODA2LCAweDBCMkYsIDB4NTgwOSwgMHgzODYxLCAweDU4MEEsIDB4MTE5MiwgMHg1ODBCLCAweDExOTUsCisgICAgMHg1ODE1LCAweDBCMjQsIDB4NTgxOSwgMHgxMTk2LCAweDU4MUQsIDB4MTE5NywgMHg1ODIwLCAweDM4NjIsCisgICAgMHg1ODIxLCAweDExOTksIDB4NTgyNCwgMHgwQzA1LCAweDU4MkEsIDB4MDVFQSwgMHg1ODJGLCAweDFEMzIsCisgICAgMHg1ODMwLCAweDA1MDMsIDB4NTgzMSwgMHgwRTQzLCAweDU4MzIsIDB4Mzg2MywgMHg1ODM0LCAweDA5RDQsCisgICAgMHg1ODM1LCAweDBDNDIsIDB4NTgzQSwgMHgwODU2LCAweDU4M0QsIDB4MTE5RiwgMHg1ODQwLCAweDBFMEQsCisgICAgMHg1ODQxLCAweDBGQTUsIDB4NTg0QSwgMHgwNTc0LCAweDU4NEIsIDB4MTE5QiwgMHg1ODUxLCAweDBBQkMsCisgICAgMHg1ODUyLCAweDExOUUsIDB4NTg1NCwgMHgwQzVELCAweDU4NTcsIDB4MEM0MywgMHg1ODU4LCAweDBDNUUsCisgICAgMHg1ODU5LCAweDBENEQsIDB4NTg1QSwgMHgwQkU5LCAweDU4NUUsIDB4MDgzOSwgMHg1ODYxLCAweDFFNDcsCisgICAgMHg1ODYyLCAweDExOUEsIDB4NTg2OSwgMHgwNTE4LCAweDU4NkIsIDB4MEMzMCwgMHg1ODcwLCAweDExOUMsCisgICAgMHg1ODcyLCAweDExOTgsIDB4NTg3NSwgMHgwQTE2LCAweDU4NzksIDB4MTFBMCwgMHg1ODdDLCAweDM4NjQsCisgICAgMHg1ODdFLCAweDA5NTgsIDB4NTg4MCwgMHgzODY1LCAweDU4ODMsIDB4MDZBNSwgMHg1ODg1LCAweDExQTEsCisgICAgMHg1ODkzLCAweDBFMzgsIDB4NTg5NywgMHgwQUZGLCAweDU4OUMsIDB4MEJFMiwgMHg1ODlFLCAweDIwRTcsCisgICAgMHg1ODlGLCAweDExQTMsIDB4NThBOCwgMHgwRTdELCAweDU4QTksIDB4Mzg2NiwgMHg1OEFCLCAweDExQTQsCisgICAgMHg1OEFFLCAweDExQTksIDB4NThCMiwgMHgyMEU4LCAweDU4QjMsIDB4MERGRiwgMHg1OEI4LCAweDExQTgsCisgICAgMHg1OEI5LCAweDExQTIsIDB4NThCQSwgMHgxMUE1LCAweDU4QkIsIDB4MTFBNywgMHg1OEJFLCAweDA4MTYsCisgICAgMHg1OEMxLCAweDBFMTksIDB4NThDNSwgMHgxMUFBLCAweDU4QzcsIDB4MEI4MywgMHg1OENBLCAweDA1NzUsCisgICAgMHg1OENDLCAweDA5RDUsIDB4NThDRSwgMHgzODY3LCAweDU4RDAsIDB4Mzg2OCwgMHg1OEQxLCAweDExQUMsCisgICAgMHg1OEQzLCAweDExQUIsIDB4NThENCwgMHgzODY5LCAweDU4RDUsIDB4MDdGQSwgMHg1OEQ3LCAweDExQUQsCisgICAgMHg1OEQ4LCAweDExQUYsIDB4NThEOSwgMHgxMUFFLCAweDU4REEsIDB4Mzg2QSwgMHg1OERDLCAweDExQjEsCisgICAgMHg1OERFLCAweDExQTYsIDB4NThERiwgMHgxMUIzLCAweDU4RTQsIDB4MTFCMiwgMHg1OEU1LCAweDExQjAsCisgICAgMHg1OEU5LCAweDM4NkIsIDB4NThFQiwgMHgwODlDLCAweDU4RUMsIDB4MEExNywgMHg1OEVFLCAweDBBRDYsCisgICAgMHg1OEVGLCAweDExQjQsIDB4NThGMCwgMHgwQTYwLCAweDU4RjEsIDB4MDRCMSwgMHg1OEYyLCAweDBEMUEsCisgICAgMHg1OEY3LCAweDBCRjcsIDB4NThGOSwgMHgxMUI2LCAweDU4RkEsIDB4MTFCNSwgMHg1OEZCLCAweDExQjcsCisgICAgMHg1OEZDLCAweDExQjgsIDB4NThGRCwgMHgxMUI5LCAweDU5MDIsIDB4MTFCQSwgMHg1OTA5LCAweDBFMjEsCisgICAgMHg1OTBBLCAweDExQkIsIDB4NTkwQiwgMHgyMEU5LCAweDU5MEMsIDB4Mzg2QywgMHg1OTBGLCAweDA1NDYsCisgICAgMHg1OTEwLCAweDExQkMsIDB4NTkxNSwgMHgwRjI2LCAweDU5MTYsIDB4MDU4RSwgMHg1OTE4LCAweDEwREUsCisgICAgMHg1OTE5LCAweDA5NTIsIDB4NTkxQSwgMHgwQjFGLCAweDU5MUIsIDB4MTFCRCwgMHg1OTFDLCAweDBFRjcsCisgICAgMHg1OTIyLCAweDBFQzAsIDB4NTkyNCwgMHgzODZELCAweDU5MjUsIDB4MTFCRiwgMHg1OTI3LCAweDBCNDcsCisgICAgMHg1OTI5LCAweDBDMzEsIDB4NTkyQSwgMHgwQjIwLCAweDU5MkIsIDB4MERDOSwgMHg1OTJDLCAweDExQzAsCisgICAgMHg1OTJELCAweDExQzEsIDB4NTkyRSwgMHgwNTFELCAweDU5MkYsIDB4Mzg2RSwgMHg1OTMxLCAweDA4RTYsCisgICAgMHg1OTMyLCAweDExQzIsIDB4NTkzNywgMHgwNDk0LCAweDU5MzgsIDB4MTFDMywgMHg1OTM5LCAweDM3MjUsCisgICAgMHg1OTNFLCAweDExQzQsIDB4NTk0NCwgMHgwNTA0LCAweDU5NDcsIDB4MDYyRCwgMHg1OTQ4LCAweDBDQjgsCisgICAgMHg1OTQ5LCAweDBFNDQsIDB4NTk0RSwgMHgxMUM4LCAweDU5NEYsIDB4MEFENywgMHg1OTUwLCAweDExQzcsCisgICAgMHg1OTUxLCAweDA3MTYsIDB4NTk1MywgMHgyMEVBLCAweDU5NTQsIDB4MEU4OSwgMHg1OTU1LCAweDExQzYsCisgICAgMHg1OTU3LCAweDBDNUYsIDB4NTk1OCwgMHgxMUNBLCAweDU5NUEsIDB4MTFDOSwgMHg1OTVCLCAweDIwRUIsCisgICAgMHg1OTVELCAweDIwRUMsIDB4NTk2MCwgMHgxMUNDLCAweDU5NjEsIDB4Mzg2RiwgMHg1OTYyLCAweDExQ0IsCisgICAgMHg1OTYzLCAweDIwRUQsIDB4NTk2NSwgMHgwNTFFLCAweDU5NjcsIDB4MTFDRCwgMHg1OTY4LCAweDA5OTEsCisgICAgMHg1OTY5LCAweDExQ0YsIDB4NTk2QSwgMHgwQjYzLCAweDU5NkMsIDB4MTFDRSwgMHg1OTZELCAweDM4NzAsCisgICAgMHg1OTZFLCAweDBFMDMsIDB4NTk3MywgMHgwOTgxLCAweDU5NzQsIDB4MEM1NSwgMHg1OTc4LCAweDExRDAsCisgICAgMHg1OTdELCAweDA3QjcsIDB4NTk4MSwgMHgxMUQxLCAweDU5ODIsIDB4MENENywgMHg1OTgzLCAweDBENzIsCisgICAgMHg1OTg0LCAweDBFREQsIDB4NTk4QSwgMHgwQ0RCLCAweDU5OEQsIDB4MTFEQSwgMHg1OTkzLCAweDA2NTIsCisgICAgMHg1OTk2LCAweDBGMkYsIDB4NTk5OSwgMHgwRUJCLCAweDU5OUIsIDB4MTIzOSwgMHg1OTlELCAweDExRDIsCisgICAgMHg1OUEzLCAweDExRDUsIDB4NTlBNCwgMHgyMEVFLCAweDU5QTUsIDB4MEIyNSwgMHg1OUE4LCAweDBFNjYsCisgICAgMHg1OUFDLCAweDBDNDQsIDB4NTlCMiwgMHgxMUQ2LCAweDU5QjksIDB4MEU5MywgMHg1OUJBLCAweDIwRUYsCisgICAgMHg1OUJCLCAweDA4M0EsIDB4NTlCRSwgMHgwOTkyLCAweDU5QzYsIDB4MTFENywgMHg1OUM5LCAweDA4OUUsCisgICAgMHg1OUNBLCAweDM4NzEsIDB4NTlDQiwgMHgwODlELCAweDU5RDAsIDB4MDQ3RCwgMHg1OUQxLCAweDA3N0MsCisgICAgMHg1OUQyLCAweDM4NzIsIDB4NTlEMywgMHgwQTRGLCAweDU5RDQsIDB4MDQ5NSwgMHg1OUQ5LCAweDExREIsCisgICAgMHg1OURBLCAweDExREMsIDB4NTlEQywgMHgxMUQ5LCAweDU5REQsIDB4Mzg3MywgMHg1OUUzLCAweDM4NzQsCisgICAgMHg1OUU0LCAweDM4NzUsIDB4NTlFNSwgMHgwNERBLCAweDU5RTYsIDB4MDVFQiwgMHg1OUU4LCAweDExRDgsCisgICAgMHg1OUVBLCAweDBFRDEsIDB4NTlFQiwgMHgwREEzLCAweDU5RUMsIDB4MzZBRCwgMHg1OUY2LCAweDA0NkMsCisgICAgMHg1OUZCLCAweDA0QkQsIDB4NTlGRiwgMHgwODlGLCAweDVBMDEsIDB4MDQ5NiwgMHg1QTAzLCAweDA0NjcsCisgICAgMHg1QTA0LCAweDM4NzYsIDB4NUEwOSwgMHgxMUUxLCAweDVBMEMsIDB4Mzg3NywgMHg1QTExLCAweDExREYsCisgICAgMHg1QTE4LCAweDBFQzgsIDB4NUExQSwgMHgxMUUyLCAweDVBMUIsIDB4MzVDMSwgMHg1QTFDLCAweDExRTAsCisgICAgMHg1QTFGLCAweDExREUsIDB4NUEyMCwgMHgwOUY3LCAweDVBMjMsIDB4Mzg3OCwgMHg1QTI1LCAweDExREQsCisgICAgMHg1QTI5LCAweDBFMkEsIDB4NUEyRiwgMHgwNzk4LCAweDVBMzUsIDB4MTFFNiwgMHg1QTM2LCAweDExRTcsCisgICAgMHg1QTNDLCAweDA5OTMsIDB4NUE0MCwgMHgxMUUzLCAweDVBNDEsIDB4MEZEMiwgMHg1QTQ2LCAweDBEMDIsCisgICAgMHg1QTQ3LCAweDM4NzksIDB4NUE0OSwgMHgxMUU1LCAweDVBNTUsIDB4Mzg3QSwgMHg1QTVBLCAweDA4MTcsCisgICAgMHg1QTYyLCAweDExRTgsIDB4NUE2MywgMHgzODdCLCAweDVBNjYsIDB4MERDQSwgMHg1QTZBLCAweDExRTksCisgICAgMHg1QTZDLCAweDExRTQsIDB4NUE2RCwgMHgzODdDLCAweDVBN0UsIDB4Mzg3RCwgMHg1QTdGLCAweDBFQzcsCisgICAgMHg1QTkyLCAweDBEMTQsIDB4NUE5QSwgMHgxMUVBLCAweDVBOUIsIDB4MERBNCwgMHg1QTlFLCAweDM4N0UsCisgICAgMHg1QUE3LCAweDM4N0YsIDB4NUFBQywgMHgzODgwLCAweDVBQjMsIDB4Mzg4MSwgMHg1QUJDLCAweDExRUIsCisgICAgMHg1QUJELCAweDExRUYsIDB4NUFCRSwgMHgxMUVDLCAweDVBQzEsIDB4MDU0NywgMHg1QUMyLCAweDExRUUsCisgICAgMHg1QUM5LCAweDA4RTcsIDB4NUFDQiwgMHgxMUVELCAweDVBQ0MsIDB4MDc0RiwgMHg1QUQwLCAweDExRkIsCisgICAgMHg1QUQ2LCAweDExRjQsIDB4NUFENywgMHgxMUYxLCAweDVBRTAsIDB4Mzg4MiwgMHg1QUUxLCAweDBCQTIsCisgICAgMHg1QUUzLCAweDExRjAsIDB4NUFFNiwgMHgxMUYyLCAweDVBRTksIDB4MTFGMywgMHg1QUZBLCAweDExRjUsCisgICAgMHg1QUZCLCAweDExRjYsIDB4NUIwMCwgMHgzODgzLCAweDVCMDksIDB4MDYyRSwgMHg1QjBCLCAweDExRjgsCisgICAgMHg1QjBDLCAweDExRjcsIDB4NUIxNiwgMHgxMUY5LCAweDVCMTksIDB4Mzg4NCwgMHg1QjIyLCAweDA5RDYsCisgICAgMHg1QjI1LCAweDM4ODUsIDB4NUIyQSwgMHgxMUZDLCAweDVCMkMsIDB4MEJGOCwgMHg1QjJELCAweDM4ODYsCisgICAgMHg1QjMwLCAweDA0RTcsIDB4NUIzMiwgMHgxMUZBLCAweDVCMzYsIDB4MTFGRCwgMHg1QjNFLCAweDExRkUsCisgICAgMHg1QjQwLCAweDEyMDEsIDB4NUI0MSwgMHgzODg3LCAweDVCNDMsIDB4MTFGRiwgMHg1QjQ1LCAweDEyMDAsCisgICAgMHg1QjUwLCAweDA4QTAsIDB4NUI1MSwgMHgxMjAyLCAweDVCNTQsIDB4MDdCOCwgMHg1QjU1LCAweDEyMDMsCisgICAgMHg1QjU2LCAweDIwRjAsIDB4NUI1NywgMHgwOEM4LCAweDVCNTgsIDB4MEIxOCwgMHg1QjVBLCAweDEyMDQsCisgICAgMHg1QjVCLCAweDEyMDUsIDB4NUI1QywgMHgwOEE4LCAweDVCNUQsIDB4MDdCOSwgMHg1QjVGLCAweDBFREUsCisgICAgMHg1QjYzLCAweDA2NDIsIDB4NUI2NCwgMHgwNzdELCAweDVCNjUsIDB4MTIwNiwgMHg1QjY2LCAweDA1QjYsCisgICAgMHg1QjY5LCAweDEyMDcsIDB4NUI2QiwgMHgwQjE5LCAweDVCNzAsIDB4MTIwOCwgMHg1QjcxLCAweDEyMzAsCisgICAgMHg1QjczLCAweDEyMDksIDB4NUI3NSwgMHgxMjBBLCAweDVCNzgsIDB4MTIwQiwgMHg1QjdBLCAweDEyMEQsCisgICAgMHg1QjdDLCAweDM4ODgsIDB4NUI3RSwgMHgzODg5LCAweDVCN0YsIDB4Mzg4QSwgMHg1QjgwLCAweDEyMEUsCisgICAgMHg1QjgyLCAweDM2MTAsIDB4NUI4MywgMHgxMjBGLCAweDVCODUsIDB4MEI1MCwgMHg1Qjg3LCAweDA0QzksCisgICAgMHg1Qjg4LCAweDA5MTUsIDB4NUI4OSwgMHgwNDg2LCAweDVCOEEsIDB4Mzg4QiwgMHg1QjhCLCAweDBBRDksCisgICAgMHg1QjhDLCAweDA1RUMsIDB4NUI4RCwgMHgwOEUxLCAweDVCOEYsIDB4MDdCQSwgMHg1Qjk1LCAweDBDNjAsCisgICAgMHg1Qjk3LCAweDA5MkIsIDB4NUI5OCwgMHgwNUVELCAweDVCOTksIDB4MEJBNiwgMHg1QjlBLCAweDBDMDYsCisgICAgMHg1QjlCLCAweDA0N0MsIDB4NUI5QywgMHgwNjUzLCAweDVCOUQsIDB4MEU0NSwgMHg1QjlGLCAweDA4RUUsCisgICAgMHg1QkEyLCAweDA2NkMsIDB4NUJBMywgMHgwQThGLCAweDVCQTQsIDB4MDhFOCwgMHg1QkE1LCAweDBGMTIsCisgICAgMHg1QkE2LCAweDEyMTAsIDB4NUJBRSwgMHgwNjc2LCAweDVCQjAsIDB4MDgzQiwgMHg1QkIzLCAweDA1OTAsCisgICAgMHg1QkI0LCAweDA1MDUsIDB4NUJCNSwgMHgwOTk0LCAweDVCQjYsIDB4MDU0OCwgMHg1QkI4LCAweDEyMTEsCisgICAgMHg1QkI5LCAweDBGMzAsIDB4NUJCRiwgMHgwOTUzLCAweDVCQzAsIDB4MjBGMSwgMHg1QkMyLCAweDA5MTAsCisgICAgMHg1QkMzLCAweDEyMTIsIDB4NUJDNCwgMHgwNjJGLCAweDVCQzUsIDB4MENBQSwgMHg1QkM2LCAweDBFQjUsCisgICAgMHg1QkM3LCAweDEyMTMsIDB4NUJDOSwgMHgxMjE0LCAweDVCQ0MsIDB4MERDQiwgMHg1QkQwLCAweDEyMTYsCisgICAgMHg1QkQyLCAweDA1RTQsIDB4NUJEMywgMHgwNkVGLCAweDVCRDQsIDB4MTIxNSwgMHg1QkQ4LCAweDIwRjMsCisgICAgMHg1QkRCLCAweDA1RUUsIDB4NUJERCwgMHgwOUY4LCAweDVCREUsIDB4MTIxQSwgMHg1QkRGLCAweDA4NkYsCisgICAgMHg1QkUxLCAweDA1NDksIDB4NUJFMiwgMHgxMjE5LCAweDVCRTQsIDB4MTIxNywgMHg1QkU1LCAweDEyMUIsCisgICAgMHg1QkU2LCAweDEyMTgsIDB4NUJFNywgMHgwQ0UxLCAweDVCRTgsIDB4MTQ4RSwgMHg1QkU5LCAweDA5RjksCisgICAgMHg1QkVCLCAweDEyMUMsIDB4NUJFQywgMHgyMEY0LCAweDVCRUUsIDB4MEY4OCwgMHg1QkYwLCAweDEyMUQsCisgICAgMHg1QkYzLCAweDEyMUYsIDB4NUJGNSwgMHgwQkJDLCAweDVCRjYsIDB4MTIxRSwgMHg1QkY4LCAweDBBNDcsCisgICAgMHg1QkZBLCAweDA4QzksIDB4NUJGRSwgMHgwQjMwLCAweDVCRkYsIDB4MDkyMywgMHg1QzAxLCAweDBERTcsCisgICAgMHg1QzAyLCAweDBBOTAsIDB4NUMwNCwgMHgwOEY5LCAweDVDMDUsIDB4MTIyMCwgMHg1QzA2LCAweDA5OTUsCisgICAgMHg1QzA3LCAweDEyMjEsIDB4NUMwOCwgMHgxMjIyLCAweDVDMDksIDB4MDQ5NywgMHg1QzBBLCAweDBCMUEsCisgICAgMHg1QzBCLCAweDBBMTgsIDB4NUMwRCwgMHgxMjIzLCAweDVDMEUsIDB4MEM4QiwgMHg1QzBGLCAweDA5OTYsCisgICAgMHg1QzExLCAweDA5OTcsIDB4NUMxMywgMHgxMjI0LCAweDVDMTQsIDB4MzcyQSwgMHg1QzE2LCAweDBBOTEsCisgICAgMHg1QzE5LCAweDM2MEIsIDB4NUMxQSwgMHgwOTk4LCAweDVDMUUsIDB4MjBGNSwgMHg1QzIwLCAweDEyMjUsCisgICAgMHg1QzIyLCAweDEyMjYsIDB4NUMyMywgMHgzODhDLCAweDVDMjQsIDB4MEVFQywgMHg1QzI4LCAweDEyMjcsCisgICAgMHg1QzJCLCAweDM4OEQsIDB4NUMyRCwgMHgwNkJFLCAweDVDMzAsIDB4Mzg4RSwgMHg1QzMxLCAweDA5MkMsCisgICAgMHg1QzM4LCAweDEyMjgsIDB4NUMzOSwgMHgxMjI5LCAweDVDM0EsIDB4MDkwOCwgMHg1QzNCLCAweDA5RjIsCisgICAgMHg1QzNDLCAweDBDQ0MsIDB4NUMzRCwgMHgwQTFBLCAweDVDM0UsIDB4MEQ4QywgMHg1QzNGLCAweDBDRDgsCisgICAgMHg1QzQwLCAweDA2QzEsIDB4NUM0MSwgMHgxMjJBLCAweDVDNDUsIDB4MDY4OSwgMHg1QzQ2LCAweDEyMkIsCisgICAgMHg1QzQ4LCAweDA2RjYsIDB4NUM0QSwgMHgwQ0E3LCAweDVDNEIsIDB4MDUzMCwgMHg1QzRELCAweDA4QTEsCisgICAgMHg1QzRFLCAweDEyMkMsIDB4NUM0RiwgMHgxMjJGLCAweDVDNTAsIDB4MTIyRSwgMHg1QzUxLCAweDA2RjUsCisgICAgMHg1QzUzLCAweDEyMkQsIDB4NUM1NSwgMHgwQzMyLCAweDVDNUIsIDB4MUU5MiwgMHg1QzVFLCAweDBCMTAsCisgICAgMHg1QzYwLCAweDBDNDUsIDB4NUM2MSwgMHgwOEY0LCAweDVDNjIsIDB4MUUwRCwgMHg1QzYzLCAweDM4OEYsCisgICAgMHg1QzY0LCAweDBBREEsIDB4NUM2NSwgMHgwRjY0LCAweDVDNjksIDB4Mzg5MCwgMHg1QzZDLCAweDEyMzEsCisgICAgMHg1QzZFLCAweDEyMzIsIDB4NUM2RiwgMHgwQ0FFLCAweDVDNzEsIDB4MDg4MSwgMHg1Qzc2LCAweDEyMzQsCisgICAgMHg1Qzc5LCAweDEyMzUsIDB4NUM3QywgMHgzODkxLCAweDVDOEMsIDB4MTIzNiwgMHg1QzkwLCAweDA2MzAsCisgICAgMHg1QzkxLCAweDEyMzcsIDB4NUM5NCwgMHgxMjM4LCAweDVDQTEsIDB4MDUyQywgMHg1Q0E2LCAweDIwRjYsCisgICAgMHg1Q0E4LCAweDBBQkQsIDB4NUNBOSwgMHgwNjIwLCAweDVDQUIsIDB4MTIzQSwgMHg1Q0FDLCAweDBFQjQsCisgICAgMHg1Q0IxLCAweDBCMzIsIDB4NUNCMywgMHgwNUI3LCAweDVDQjYsIDB4MTIzQywgMHg1Q0I3LCAweDEyM0UsCisgICAgMHg1Q0I4LCAweDA2MUIsIDB4NUNCQSwgMHgyMEY3LCAweDVDQkIsIDB4MTIzQiwgMHg1Q0JDLCAweDEyM0QsCisgICAgMHg1Q0JFLCAweDEyNDAsIDB4NUNDNSwgMHgxMjNGLCAweDVDQzcsIDB4MTI0MSwgMHg1Q0NCLCAweDM4OTIsCisgICAgMHg1Q0QyLCAweDM4OTMsIDB4NUNEOSwgMHgxMjQyLCAweDVDRTAsIDB4MEM5NSwgMHg1Q0UxLCAweDA2QTYsCisgICAgMHg1Q0U2LCAweDM3MkMsIDB4NUNFOCwgMHgwNTY1LCAweDVDRTksIDB4MTI0MywgMHg1Q0VBLCAweDEyNDgsCisgICAgMHg1Q0VELCAweDEyNDYsIDB4NUNFRiwgMHgwRTQ3LCAweDVDRjAsIDB4MEU0NiwgMHg1Q0Y0LCAweDM4OTQsCisgICAgMHg1Q0Y1LCAweDIwRjgsIDB4NUNGNiwgMHgwQzYxLCAweDVDRkEsIDB4MTI0NSwgMHg1Q0ZCLCAweDA5NUUsCisgICAgMHg1Q0ZELCAweDEyNDQsIDB4NUQwNywgMHgwQTM4LCAweDVEMEIsIDB4MTI0OSwgMHg1RDBFLCAweDA4NUEsCisgICAgMHg1RDExLCAweDEyNEYsIDB4NUQxNCwgMHgxMjUwLCAweDVEMTUsIDB4MTI0QSwgMHg1RDE2LCAweDA1OTEsCisgICAgMHg1RDE3LCAweDEyNEIsIDB4NUQxOCwgMHgxMjU0LCAweDVEMTksIDB4MTI1MywgMHg1RDFBLCAweDEyNTIsCisgICAgMHg1RDFCLCAweDEyNEUsIDB4NUQxRiwgMHgxMjRELCAweDVEMjIsIDB4MTI1MSwgMHg1RDI0LCAweDM4OTUsCisgICAgMHg1RDI2LCAweDM4OTYsIDB4NUQyNywgMHgyMEY5LCAweDVEMjksIDB4MEU0OCwgMHg1RDQyLCAweDIwRkMsCisgICAgMHg1RDQzLCAweDM4OTcsIDB4NUQ0NiwgMHgzODk4LCAweDVENEEsIDB4Mzg5OSwgMHg1RDRCLCAweDEyNTgsCisgICAgMHg1RDRDLCAweDEyNTUsIDB4NUQ0RSwgMHgxMjU3LCAweDVENTAsIDB4MEY1QywgMHg1RDUyLCAweDEyNTYsCisgICAgMHg1RDUzLCAweDIwRkEsIDB4NUQ1QywgMHgxMjRDLCAweDVENjksIDB4MEEzOSwgMHg1RDZDLCAweDEyNTksCisgICAgMHg1RDZELCAweDIwRkQsIDB4NUQ2RiwgMHgwODI3LCAweDVENzMsIDB4MTI1QSwgMHg1RDc2LCAweDEyNUIsCisgICAgMHg1RDgyLCAweDEyNUUsIDB4NUQ4NCwgMHgxMjVELCAweDVEODcsIDB4MTI1QywgMHg1RDhCLCAweDBDNjIsCisgICAgMHg1RDhDLCAweDEyNDcsIDB4NUQ5MCwgMHgxMjY0LCAweDVEOTIsIDB4Mzg5QSwgMHg1RDk0LCAweDM4OUIsCisgICAgMHg1RDk5LCAweDM4OUMsIDB4NUQ5RCwgMHgxMjYwLCAweDVEQTAsIDB4Mzg5RCwgMHg1REEyLCAweDEyNUYsCisgICAgMHg1REFDLCAweDEyNjEsIDB4NURBRSwgMHgxMjYyLCAweDVEQjIsIDB4M0JBNSwgMHg1REI3LCAweDEyNjUsCisgICAgMHg1REI4LCAweDIwRkUsIDB4NURCOSwgMHgyMEZGLCAweDVEQkEsIDB4MEZBRSwgMHg1REJDLCAweDEyNjYsCisgICAgMHg1REJELCAweDEyNjMsIDB4NURDOSwgMHgxMjY3LCAweDVEQ0MsIDB4MDYxQywgMHg1RENELCAweDEyNjgsCisgICAgMHg1REQwLCAweDIxMDAsIDB4NUREMiwgMHgxMjZBLCAweDVERDMsIDB4MTI2OSwgMHg1REQ2LCAweDEyNkIsCisgICAgMHg1REQ4LCAweDM4OUUsIDB4NUREQiwgMHgxMjZDLCAweDVEREQsIDB4MEE5MiwgMHg1RERFLCAweDA5MkQsCisgICAgMHg1REUwLCAweDM4OUYsIDB4NURFMSwgMHgwOTZFLCAweDVERTIsIDB4MzQzMiwgMHg1REUzLCAweDBBRTUsCisgICAgMHg1REU1LCAweDA3QkIsIDB4NURFNiwgMHgwODI4LCAweDVERTcsIDB4MDdCQywgMHg1REU4LCAweDA2OEEsCisgICAgMHg1REVCLCAweDEyNkQsIDB4NURFRSwgMHgwODI5LCAweDVERjEsIDB4MDc3RSwgMHg1REYyLCAweDEyNkUsCisgICAgMHg1REYzLCAweDBFQjIsIDB4NURGNCwgMHgwQ0Y5LCAweDVERjUsIDB4MTI2RiwgMHg1REY3LCAweDA3QkQsCisgICAgMHg1REY4LCAweDM4QTAsIDB4NURGQiwgMHgwNUU4LCAweDVERkQsIDB4MEI2NSwgMHg1REZFLCAweDA2Q0EsCisgICAgMHg1REZGLCAweDM1RTIsIDB4NUUwMCwgMHgzOEExLCAweDVFMDIsIDB4MDhBMiwgMHg1RTAzLCAweDBEQ0QsCisgICAgMHg1RTA2LCAweDBENTUsIDB4NUUwQiwgMHgxMjcwLCAweDVFMEMsIDB4MDYzMSwgMHg1RTExLCAweDEyNzMsCisgICAgMHg1RTEyLCAweDM4QTIsIDB4NUUxNCwgMHgzOEEzLCAweDVFMTUsIDB4MzhBNCwgMHg1RTE2LCAweDBCQkQsCisgICAgMHg1RTE4LCAweDM4QTUsIDB4NUUxOSwgMHgxMjcyLCAweDVFMUEsIDB4MTI3MSwgMHg1RTFCLCAweDEyNzQsCisgICAgMHg1RTFELCAweDBDMDcsIDB4NUUyNSwgMHgwQTI5LCAweDVFMkIsIDB4MDhBMywgMHg1RTJELCAweDBBNkUsCisgICAgMHg1RTJFLCAweDM4QTYsIDB4NUUyRiwgMHgwQjMzLCAweDVFMzAsIDB4MDYzQywgMHg1RTMzLCAweDBCQkUsCisgICAgMHg1RTM2LCAweDEyNzUsIDB4NUUzNywgMHgxMjc2LCAweDVFMzgsIDB4MDlENywgMHg1RTNELCAweDBFNjcsCisgICAgMHg1RTQwLCAweDEyNzksIDB4NUU0MywgMHgxMjc4LCAweDVFNDQsIDB4MTI3NywgMHg1RTQ1LCAweDBERUYsCisgICAgMHg1RTQ3LCAweDEyODAsIDB4NUU0QywgMHgwRTg4LCAweDVFNEUsIDB4MTI3QSwgMHg1RTU0LCAweDEyN0MsCisgICAgMHg1RTU1LCAweDBFOTksIDB4NUU1NywgMHgxMjdCLCAweDVFNTgsIDB4MzhBNywgMHg1RTVGLCAweDEyN0QsCisgICAgMHg1RTYxLCAweDBEM0MsIDB4NUU2MiwgMHgxMjdFLCAweDVFNjMsIDB4MEUwRSwgMHg1RTY0LCAweDEyN0YsCisgICAgMHg1RTZCLCAweDM4QTgsIDB4NUU2QywgMHgzOEE5LCAweDVFNzIsIDB4MDVFRiwgMHg1RTczLCAweDBFMEYsCisgICAgMHg1RTc0LCAweDBDRTUsIDB4NUU3NSwgMHgxMjgxLCAweDVFNzYsIDB4MTI4MiwgMHg1RTc4LCAweDA3QkUsCisgICAgMHg1RTc5LCAweDA1RjAsIDB4NUU3QSwgMHgxMjgzLCAweDVFN0IsIDB4MDc2QywgMHg1RTdDLCAweDBGMkUsCisgICAgMHg1RTdELCAweDBGMTMsIDB4NUU3RSwgMHgwNjMyLCAweDVFN0YsIDB4MTI4NSwgMHg1RTgxLCAweDBCQkYsCisgICAgMHg1RTgzLCAweDA3QkYsIDB4NUU4NCwgMHgwOTk5LCAweDVFODcsIDB4MEQ3MywgMHg1RThBLCAweDA5OUEsCisgICAgMHg1RThGLCAweDA5ODIsIDB4NUU5NSwgMHgwQzA4LCAweDVFOTYsIDB4MEU0OSwgMHg1RTk3LCAweDBDMzMsCisgICAgMHg1RTk5LCAweDM2QjAsIDB4NUU5QSwgMHgwN0MwLCAweDVFOUMsIDB4MERDRSwgMHg1RUEwLCAweDEyODYsCisgICAgMHg1RUE2LCAweDBDNTMsIDB4NUVBNywgMHgwODMyLCAweDVFQTgsIDB4MzhBQSwgMHg1RUFBLCAweDM4QUIsCisgICAgMHg1RUFCLCAweDA3N0YsIDB4NUVBRCwgMHgwQzA5LCAweDVFQjUsIDB4MDQ4NywgMHg1RUI2LCAweDA5NzgsCisgICAgMHg1RUI3LCAweDA3QzEsIDB4NUVCOCwgMHgwRjMxLCAweDVFQkUsIDB4MzhBQywgMHg1RUJGLCAweDM4QUQsCisgICAgMHg1RUMxLCAweDEyODcsIDB4NUVDMiwgMHgxMjg4LCAweDVFQzMsIDB4MEQwNywgMHg1RUM4LCAweDEyODksCisgICAgMHg1RUM5LCAweDBGQkYsIDB4NUVDQSwgMHgwRkQzLCAweDVFQ0IsIDB4MzhBRSwgMHg1RUNGLCAweDEyOEIsCisgICAgMHg1RUQwLCAweDEyOEEsIDB4NUVEMiwgMHgzOEFGLCAweDVFRDMsIDB4MDVBNSwgMHg1RUQ2LCAweDEyOEMsCisgICAgMHg1RURBLCAweDEyOEYsIDB4NUVEQiwgMHgxMjkwLCAweDVFREQsIDB4MTI4RSwgMHg1RURGLCAweDBEQjIsCisgICAgMHg1RUUwLCAweDA5OUIsIDB4NUVFMSwgMHgxMjkyLCAweDVFRTIsIDB4MTI5MSwgMHg1RUUzLCAweDEyOEQsCisgICAgMHg1RUU4LCAweDEyOTMsIDB4NUVFOSwgMHgxMjk0LCAweDVFRUMsIDB4MTI5NSwgMHg1RUYwLCAweDEyOTgsCisgICAgMHg1RUYxLCAweDEyOTYsIDB4NUVGMywgMHgxMjk3LCAweDVFRjQsIDB4MTI5OSwgMHg1RUY2LCAweDA1MDYsCisgICAgMHg1RUY3LCAweDBDMEEsIDB4NUVGOCwgMHgxMjlBLCAweDVFRkEsIDB4MDc1MCwgMHg1RUZCLCAweDA1NzYsCisgICAgMHg1RUZDLCAweDBDRUMsIDB4NUVGRSwgMHgxMjlCLCAweDVFRkYsIDB4MENEMywgMHg1RjAxLCAweDBFMkIsCisgICAgMHg1RjAzLCAweDEyOUMsIDB4NUYwNCwgMHgwRkQ0LCAweDVGMDcsIDB4MzhCMCwgMHg1RjA5LCAweDEyOUQsCisgICAgMHg1RjBBLCAweDBFMTAsIDB4NUYwQiwgMHgxMkEwLCAweDVGMEMsIDB4MEZGQSwgMHg1RjBELCAweDEwMEEsCisgICAgMHg1RjBFLCAweDM4QjEsIDB4NUYwRiwgMHgwOERDLCAweDVGMTAsIDB4MENDRCwgMHg1RjExLCAweDEyQTEsCisgICAgMHg1RjEzLCAweDA2NzcsIDB4NUYxNCwgMHgwQkMwLCAweDVGMTUsIDB4MDRCRSwgMHg1RjE2LCAweDEyQTIsCisgICAgMHg1RjE3LCAweDBERjYsIDB4NUYxOCwgMHgwN0MyLCAweDVGMUIsIDB4MEI4RSwgMHg1RjFDLCAweDM4QjIsCisgICAgMHg1RjFELCAweDM4QjMsIDB4NUYxRiwgMHgwQzBCLCAweDVGMjEsIDB4MjEwMSwgMHg1RjIyLCAweDM4QjQsCisgICAgMHg1RjI1LCAweDBFRkIsIDB4NUYyNiwgMHgwNzZELCAweDVGMjcsIDB4MDc4MCwgMHg1RjI4LCAweDM4QjUsCisgICAgMHg1RjI5LCAweDEyQTMsIDB4NUYyRCwgMHgxMkE0LCAweDVGMkYsIDB4MTJBQSwgMHg1RjMxLCAweDA5MTEsCisgICAgMHg1RjM0LCAweDIxMDIsIDB4NUYzNSwgMHgwQkMxLCAweDVGMzYsIDB4MzhCNiwgMHg1RjM3LCAweDA2QTcsCisgICAgMHg1RjM4LCAweDEyQTUsIDB4NUYzQSwgMHgzNTk4LCAweDVGM0IsIDB4MzhCNywgMHg1RjNDLCAweDBEOUQsCisgICAgMHg1RjNFLCAweDBCODQsIDB4NUY0MCwgMHgzOEI4LCAweDVGNDEsIDB4MTJBNiwgMHg1RjQ1LCAweDIwQjIsCisgICAgMHg1RjQ4LCAweDEyQTcsIDB4NUY0QSwgMHgwNkE4LCAweDVGNEMsIDB4MTJBOCwgMHg1RjRFLCAweDEyQTksCisgICAgMHg1RjUwLCAweDM4QjksIDB4NUY1MSwgMHgxMkFCLCAweDVGNTMsIDB4MEM3MCwgMHg1RjU2LCAweDEyQUMsCisgICAgMHg1RjU3LCAweDEyQUQsIDB4NUY1OCwgMHgzOEJBLCAweDVGNTksIDB4MTJBRSwgMHg1RjVDLCAweDEyOUYsCisgICAgMHg1RjVELCAweDEyOUUsIDB4NUY2MSwgMHgxMkFGLCAweDVGNjIsIDB4MDcxNywgMHg1RjY0LCAweDM4QkIsCisgICAgMHg1RjY1LCAweDM2QUMsIDB4NUY2NiwgMHgwRDk5LCAweDVGNjcsIDB4MjEwMywgMHg1RjY5LCAweDA4M0MsCisgICAgMHg1RjZBLCAweDBEQTksIDB4NUY2QiwgMHgwQkMyLCAweDVGNkMsIDB4MERCRCwgMHg1RjZELCAweDEyQjAsCisgICAgMHg1RjcwLCAweDA5OUMsIDB4NUY3MSwgMHgwNEU4LCAweDVGNzMsIDB4MTJCMSwgMHg1Rjc3LCAweDEyQjIsCisgICAgMHg1Rjc5LCAweDBFRkUsIDB4NUY3QywgMHgwRDc0LCAweDVGN0YsIDB4MTJCNSwgMHg1RjgwLCAweDA1MUYsCisgICAgMHg1RjgxLCAweDBBNTAsIDB4NUY4MiwgMHgxMkI0LCAweDVGODMsIDB4MTJCMywgMHg1Rjg0LCAweDA3MTgsCisgICAgMHg1Rjg1LCAweDBCMzQsIDB4NUY4NywgMHgxMkI5LCAweDVGODgsIDB4MTJCNywgMHg1Rjg5LCAweDM4QkMsCisgICAgMHg1RjhBLCAweDEyQjYsIDB4NUY4QiwgMHgwRjZGLCAweDVGOEMsIDB4MDc5OSwgMHg1RjkwLCAweDA5ODMsCisgICAgMHg1RjkxLCAweDEyQjgsIDB4NUY5MiwgMHgwQzQ2LCAweDVGOTMsIDB4MDk0OCwgMHg1Rjk3LCAweDBDOTgsCisgICAgMHg1Rjk4LCAweDEyQkMsIDB4NUY5OSwgMHgxMkJCLCAweDVGOUMsIDB4MzhCRCwgMHg1RjlFLCAweDEyQkEsCisgICAgMHg1RkEwLCAweDEyQkQsIDB4NUZBMSwgMHgwNzlBLCAweDVGQTQsIDB4MzhCRiwgMHg1RkE3LCAweDM4QkUsCisgICAgMHg1RkE4LCAweDEyQkUsIDB4NUZBOSwgMHgwREVFLCAweDVGQUEsIDB4MDk2NSwgMHg1RkFELCAweDEyQkYsCisgICAgMHg1RkFFLCAweDBEOEQsIDB4NUZBRiwgMHgzOEMwLCAweDVGQjMsIDB4MEM5OSwgMHg1RkI0LCAweDBCQzMsCisgICAgMHg1RkI1LCAweDM0MzgsIDB4NUZCNywgMHgyMTA0LCAweDVGQjgsIDB4MzhDMSwgMHg1RkI5LCAweDBDMkEsCisgICAgMHg1RkJDLCAweDEyQzAsIDB4NUZCRCwgMHgwNjQ1LCAweDVGQzMsIDB4MDlGQSwgMHg1RkM0LCAweDM4QzIsCisgICAgMHg1RkM1LCAweDBEOUUsIDB4NUZDOSwgMHgzOEMzLCAweDVGQ0MsIDB4MDYzMywgMHg1RkNELCAweDBDREMsCisgICAgMHg1RkQ2LCAweDEyQzEsIDB4NUZENywgMHgwOEE0LCAweDVGRDgsIDB4MEU2OCwgMHg1RkQ5LCAweDBFNjksCisgICAgMHg1RkRDLCAweDA1MjAsIDB4NUZERCwgMHgxMkM2LCAweDVGREUsIDB4MjEwNSwgMHg1RkUwLCAweDBCQTcsCisgICAgMHg1RkUxLCAweDM4QzQsIDB4NUZFNCwgMHgxMkMzLCAweDVGRTksIDB4MzhDNSwgMHg1RkVCLCAweDA1NzcsCisgICAgMHg1RkVELCAweDM4QzYsIDB4NUZGMCwgMHgxMkY2LCAweDVGRjEsIDB4MTJDNSwgMHg1RkY1LCAweDBDRTYsCisgICAgMHg1RkY4LCAweDEyQzQsIDB4NUZGQiwgMHgxMkMyLCAweDVGRkMsIDB4MzhDNywgMHg1RkZELCAweDA4MEMsCisgICAgMHg1RkZGLCAweDEyQzgsIDB4NjAwRSwgMHgxMkNFLCAweDYwMEYsIDB4MTJENCwgMHg2MDEwLCAweDEyQ0MsCisgICAgMHg2MDEyLCAweDBDNTYsIDB4NjAxNSwgMHgxMkQxLCAweDYwMTYsIDB4MERDRiwgMHg2MDE3LCAweDM4QzgsCisgICAgMHg2MDE5LCAweDEyQ0IsIDB4NjAxQSwgMHgzOEM5LCAweDYwMUIsIDB4MTJEMCwgMHg2MDFDLCAweDBGQUYsCisgICAgMHg2MDFELCAweDA4QTUsIDB4NjAyMCwgMHgwQjM1LCAweDYwMjEsIDB4MTJDOSwgMHg2MDI1LCAweDA2NzgsCisgICAgMHg2MDI2LCAweDEyRDMsIDB4NjAyNywgMHgwQTUxLCAweDYwMjgsIDB4MDUwNywgMHg2MDI5LCAweDEyQ0QsCisgICAgMHg2MDJBLCAweDA1NzgsIDB4NjAyQiwgMHgxMkQyLCAweDYwMkYsIDB4MDZBOSwgMHg2MDMxLCAweDEyQ0YsCisgICAgMHg2MDMzLCAweDM4Q0EsIDB4NjAzQSwgMHgxMkQ1LCAweDYwNDEsIDB4MTJENywgMHg2MDQyLCAweDEyRTEsCisgICAgMHg2MDQzLCAweDEyREYsIDB4NjA0NiwgMHgxMkRDLCAweDYwNEEsIDB4MTJEQiwgMHg2MDRCLCAweDBGQzAsCisgICAgMHg2MDRELCAweDEyREQsIDB4NjA1MCwgMHgwNkFBLCAweDYwNTIsIDB4MDdDMywgMHg2MDU1LCAweDA5ODQsCisgICAgMHg2MDU5LCAweDEyRTQsIDB4NjA1QSwgMHgxMkQ2LCAweDYwNUQsIDB4MjEwNiwgMHg2MDVGLCAweDEyREEsCisgICAgMHg2MDYwLCAweDEyQ0EsIDB4NjA2MSwgMHgzOENCLCAweDYwNjIsIDB4MDU3QSwgMHg2MDYzLCAweDEyREUsCisgICAgMHg2MDY0LCAweDEyRTAsIDB4NjA2NSwgMHgwQjhGLCAweDYwNjgsIDB4MDgxOCwgMHg2MDY5LCAweDA1MzgsCisgICAgMHg2MDZBLCAweDEyRDgsIDB4NjA2QiwgMHgxMkUzLCAweDYwNkMsIDB4MTJFMiwgMHg2MDZELCAweDA2QUIsCisgICAgMHg2MDZGLCAweDBCMDksIDB4NjA3MCwgMHgwNUM0LCAweDYwNzUsIDB4MDcxOSwgMHg2MDc3LCAweDEyRDksCisgICAgMHg2MDdGLCAweDM4Q0MsIDB4NjA4MSwgMHgxMkU1LCAweDYwODMsIDB4MTJFOCwgMHg2MDg0LCAweDEyRUEsCisgICAgMHg2MDg1LCAweDIxMDcsIDB4NjA4OSwgMHgwOEU5LCAweDYwOEEsIDB4MjEwOCwgMHg2MDhCLCAweDEyRjAsCisgICAgMHg2MDhDLCAweDBDMEMsIDB4NjA4RCwgMHgxMkU2LCAweDYwOTIsIDB4MTJFRSwgMHg2MDk0LCAweDA1NzksCisgICAgMHg2MDk2LCAweDEyRUMsIDB4NjA5NywgMHgxMkVELCAweDYwOUEsIDB4MTJFOSwgMHg2MDlCLCAweDEyRUIsCisgICAgMHg2MDlFLCAweDM4Q0QsIDB4NjA5RiwgMHgwNzlCLCAweDYwQTAsIDB4MEYxNCwgMHg2MEEzLCAweDA1RjEsCisgICAgMHg2MEE0LCAweDM4Q0UsIDB4NjBBNiwgMHgwNEZCLCAweDYwQTcsIDB4MTJFRiwgMHg2MEE5LCAweDBDRjAsCisgICAgMHg2MEFBLCAweDA0NzEsIDB4NjBCMCwgMHgzOENGLCAweDYwQjIsIDB4MEQ3NSwgMHg2MEIzLCAweDEyQzcsCisgICAgMHg2MEI0LCAweDEyRjUsIDB4NjBCNSwgMHgxMkY5LCAweDYwQjYsIDB4MEVGMSwgMHg2MEI4LCAweDEyRjIsCisgICAgMHg2MEJDLCAweDBDNjMsIDB4NjBCRCwgMHgxMkY3LCAweDYwQzUsIDB4MDlEOCwgMHg2MEM2LCAweDEyRjgsCisgICAgMHg2MEM3LCAweDBDQUYsIDB4NjBDQiwgMHgzOEQwLCAweDYwRDEsIDB4MEZFRCwgMHg2MEQzLCAweDEyRjQsCisgICAgMHg2MEQ1LCAweDIxMEEsIDB4NjBEOCwgMHgxMkZBLCAweDYwREEsIDB4MDgwRCwgMHg2MERCLCAweDM4RDEsCisgICAgMHg2MERDLCAweDBBNkYsIDB4NjBERSwgMHgyMTA5LCAweDYwREYsIDB4MDQ5OCwgMHg2MEUwLCAweDEyRjMsCisgICAgMHg2MEUxLCAweDEyRjEsIDB4NjBFMywgMHgwQURDLCAweDYwRTcsIDB4MTJFNywgMHg2MEU4LCAweDA4ODIsCisgICAgMHg2MEYwLCAweDBCMjYsIDB4NjBGMSwgMHgxMzA2LCAweDYwRjIsIDB4MjEwQywgMHg2MEYzLCAweDBBREQsCisgICAgMHg2MEY0LCAweDEzMDEsIDB4NjBGNiwgMHgxMkZFLCAweDYwRjcsIDB4MTJGRiwgMHg2MEY4LCAweDM4RDIsCisgICAgMHg2MEY5LCAweDA5MTIsIDB4NjBGQSwgMHgxMzAyLCAweDYwRkIsIDB4MTMwNSwgMHg2MTAwLCAweDEzMDAsCisgICAgMHg2MTAxLCAweDA5MkYsIDB4NjEwMywgMHgxMzAzLCAweDYxMDYsIDB4MTJGRCwgMHg2MTA4LCAweDBGMDgsCisgICAgMHg2MTA5LCAweDBGMDcsIDB4NjEwRCwgMHgxMzA3LCAweDYxMEUsIDB4MTMwOCwgMHg2MTBGLCAweDA0OTksCisgICAgMHg2MTExLCAweDIxMEQsIDB4NjExMiwgMHgzOEQzLCAweDYxMTMsIDB4MzhENCwgMHg2MTE0LCAweDM4RDUsCisgICAgMHg2MTE1LCAweDEyRkMsIDB4NjExQSwgMHgwNkVBLCAweDYxMUIsIDB4MDQ2QSwgMHg2MTFDLCAweDM4RDYsCisgICAgMHg2MTFGLCAweDA1RjIsIDB4NjEyMCwgMHgyMTBCLCAweDYxMjEsIDB4MTMwNCwgMHg2MTI3LCAweDEzMEMsCisgICAgMHg2MTI4LCAweDEzMEIsIDB4NjEyQywgMHgxMzEwLCAweDYxMzAsIDB4MjEwRiwgMHg2MTM0LCAweDEzMTEsCisgICAgMHg2MTM3LCAweDIxMEUsIDB4NjEzQywgMHgxMzBGLCAweDYxM0QsIDB4MTMxMiwgMHg2MTNFLCAweDEzMEEsCisgICAgMHg2MTNGLCAweDEzMEUsIDB4NjE0MiwgMHgxMzEzLCAweDYxNDQsIDB4MTMxNCwgMHg2MTQ3LCAweDEzMDksCisgICAgMHg2MTQ4LCAweDA4Q0EsIDB4NjE0QSwgMHgxMzBELCAweDYxNEIsIDB4MEIzNiwgMHg2MTRDLCAweDA3QzQsCisgICAgMHg2MTRELCAweDEyRkIsIDB4NjE0RSwgMHgwOUZCLCAweDYxNTMsIDB4MTMyMSwgMHg2MTU1LCAweDBFMzksCisgICAgMHg2MTU4LCAweDEzMTcsIDB4NjE1OSwgMHgxMzE4LCAweDYxNUEsIDB4MTMxOSwgMHg2MTVELCAweDEzMjAsCisgICAgMHg2MTVGLCAweDEzMUYsIDB4NjE2MiwgMHgwRUFCLCAweDYxNjMsIDB4MDVGMywgMHg2MTY1LCAweDEzMUQsCisgICAgMHg2MTY3LCAweDA3MUIsIDB4NjE2OCwgMHgwNTkyLCAweDYxNkIsIDB4MTMxQSwgMHg2MTZFLCAweDBGODAsCisgICAgMHg2MTZGLCAweDEzMUMsIDB4NjE3MCwgMHgwNDlBLCAweDYxNzEsIDB4MTMxRSwgMHg2MTczLCAweDEzMTUsCisgICAgMHg2MTc0LCAweDEzMUIsIDB4NjE3NSwgMHgxMzIyLCAweDYxNzYsIDB4MDcxQSwgMHg2MTc3LCAweDEzMTYsCisgICAgMHg2MTdDLCAweDM4RDcsIDB4NjE3RSwgMHgwRjQ3LCAweDYxODIsIDB4MEYxNSwgMHg2MTg3LCAweDEzMjUsCisgICAgMHg2MThBLCAweDEzMjksIDB4NjE4RCwgMHgzOEQ4LCAweDYxOEUsIDB4MEIwMCwgMHg2MTkwLCAweDBGQzEsCisgICAgMHg2MTkxLCAweDEzMkEsIDB4NjE5NCwgMHgxMzI3LCAweDYxOTYsIDB4MTMyNCwgMHg2MTk4LCAweDIxMTAsCisgICAgMHg2MTk5LCAweDEzMjMsIDB4NjE5QSwgMHgxMzI4LCAweDYxOUYsIDB4MzhEOSwgMHg2MUE0LCAweDBFMDAsCisgICAgMHg2MUE3LCAweDBDOEMsIDB4NjFBOCwgMHgzOERBLCAweDYxQTksIDB4MDcxQywgMHg2MUFCLCAweDEzMkIsCisgICAgMHg2MUFDLCAweDEzMjYsIDB4NjFBRSwgMHgxMzJDLCAweDYxQjIsIDB4MDc1MSwgMHg2MUI2LCAweDA1MzEsCisgICAgMHg2MUJBLCAweDEzMzQsIDB4NjFCRSwgMHgwNUY0LCAweDYxQzIsIDB4MzhEQiwgMHg2MUMzLCAweDEzMzIsCisgICAgMHg2MUM2LCAweDEzMzMsIDB4NjFDNywgMHgwODE5LCAweDYxQzgsIDB4MTMzMSwgMHg2MUM5LCAweDEzMkYsCisgICAgMHg2MUNBLCAweDEzMkUsIDB4NjFDQiwgMHgxMzM1LCAweDYxQ0MsIDB4MTMyRCwgMHg2MUNELCAweDEzMzcsCisgICAgMHg2MUQwLCAweDA1N0IsIDB4NjFERiwgMHgzOERDLCAweDYxRTMsIDB4MTMzOSwgMHg2MUU2LCAweDEzMzgsCisgICAgMHg2MUYyLCAweDBCQzQsIDB4NjFGNCwgMHgxMzNDLCAweDYxRjYsIDB4MTMzQSwgMHg2MUY3LCAweDEzMzAsCisgICAgMHg2MUY4LCAweDA3NTIsIDB4NjFGQSwgMHgxMzNCLCAweDYxRkMsIDB4MTMzRiwgMHg2MUZELCAweDEzM0UsCisgICAgMHg2MUZFLCAweDEzNDAsIDB4NjFGRiwgMHgxMzNELCAweDYyMDAsIDB4MTM0MSwgMHg2MjA4LCAweDEzNDIsCisgICAgMHg2MjA5LCAweDEzNDMsIDB4NjIwQSwgMHgwRTNBLCAweDYyMEMsIDB4MTM0NSwgMHg2MjBELCAweDEzNDQsCisgICAgMHg2MjBFLCAweDA5NDksIDB4NjIxMCwgMHgwQTUyLCAweDYyMTEsIDB4MDU2NiwgMHg2MjEyLCAweDA1N0MsCisgICAgMHg2MjEzLCAweDIxMTEsIDB4NjIxNCwgMHgxMzQ2LCAweDYyMTUsIDB4MzhERCwgMHg2MjE2LCAweDA0ODMsCisgICAgMHg2MjFBLCAweDBBNzAsIDB4NjIxQiwgMHgxMzQ3LCAweDYyMUQsIDB4MUE2NCwgMHg2MjFFLCAweDEzNDgsCisgICAgMHg2MjFGLCAweDA3MzcsIDB4NjIyMSwgMHgxMzQ5LCAweDYyMjYsIDB4MEE5MywgMHg2MjI5LCAweDM4REUsCisgICAgMHg2MjJBLCAweDEzNEEsIDB4NjIyRSwgMHgxMzRCLCAweDYyMkYsIDB4MDY1NCwgMHg2MjMwLCAweDEzNEMsCisgICAgMHg2MjMyLCAweDEzNEQsIDB4NjIzMywgMHgxMzRFLCAweDYyMzQsIDB4MEIzNywgMHg2MjM2LCAweDM1QkQsCisgICAgMHg2MjM4LCAweDA3ODEsIDB4NjIzQiwgMHgwRUVELCAweDYyM0UsIDB4MzQ0RSwgMHg2MjNGLCAweDBFNkEsCisgICAgMHg2MjQwLCAweDA5NzQsIDB4NjI0MSwgMHgxMzRGLCAweDYyNDMsIDB4MzhERiwgMHg2MjQ2LCAweDM4RTAsCisgICAgMHg2MjQ3LCAweDBBOTQsIDB4NjI0OCwgMHgxQjFBLCAweDYyNDksIDB4MEQ3NiwgMHg2MjRCLCAweDA5MTYsCisgICAgMHg2MjRDLCAweDM4RTEsIDB4NjI0RCwgMHgwODNELCAweDYyNEUsIDB4MTM1MCwgMHg2MjUxLCAweDM4RTIsCisgICAgMHg2MjUzLCAweDBCMjcsIDB4NjI1NSwgMHgwREY3LCAweDYyNTYsIDB4MzhFMywgMHg2MjU4LCAweDBCNTEsCisgICAgMHg2MjVCLCAweDEzNTMsIDB4NjI1RSwgMHgxMzUxLCAweDYyNjAsIDB4MTM1NCwgMHg2MjYzLCAweDEzNTIsCisgICAgMHg2MjY4LCAweDEzNTUsIDB4NjI2RSwgMHgwRTAxLCAweDYyNzEsIDB4MDQ3QiwgMHg2Mjc2LCAweDBERDAsCisgICAgMHg2Mjc5LCAweDBENzcsIDB4NjI3QywgMHgxMzU2LCAweDYyN0UsIDB4MTM1OSwgMHg2MjdGLCAweDA5OUQsCisgICAgMHg2MjgwLCAweDA2NTUsIDB4NjI4MiwgMHgxMzU3LCAweDYyODMsIDB4MTM1RSwgMHg2Mjg0LCAweDA5OUUsCisgICAgMHg2Mjg1LCAweDM1QzUsIDB4NjI4OSwgMHgxMzU4LCAweDYyOEEsIDB4MENGQSwgMHg2MjkxLCAweDBGNDgsCisgICAgMHg2MjkyLCAweDEzNUEsIDB4NjI5MywgMHgxMzVCLCAweDYyOTQsIDB4MTM1RiwgMHg2Mjk1LCAweDBDNjQsCisgICAgMHg2Mjk2LCAweDEzNUMsIDB4NjI5NywgMHgwN0M1LCAweDYyOTgsIDB4MEE4MiwgMHg2MjlCLCAweDEzNkQsCisgICAgMHg2MjlDLCAweDBENDgsIDB4NjI5RSwgMHgwQjUyLCAweDYyQTYsIDB4MjExMiwgMHg2MkFCLCAweDBENzgsCisgICAgMHg2MkFDLCAweDEzQjIsIDB4NjJCMSwgMHgwRTRBLCAweDYyQjUsIDB4MEMwRCwgMHg2MkI5LCAweDBFQTMsCisgICAgMHg2MkJCLCAweDEzNjIsIDB4NjJCQywgMHgwNTIxLCAweDYyQkQsIDB4MEJBOCwgMHg2MkMyLCAweDEzNkIsCisgICAgMHg2MkM0LCAweDM4RTQsIDB4NjJDNSwgMHgwQjcyLCAweDYyQzYsIDB4MTM2NSwgMHg2MkM3LCAweDEzNkMsCisgICAgMHg2MkM4LCAweDEzNjcsIDB4NjJDOSwgMHgxMzZFLCAweDYyQ0EsIDB4MTM2QSwgMHg2MkNDLCAweDEzNjksCisgICAgMHg2MkNELCAweDBEMjUsIDB4NjJDRiwgMHgxMzYzLCAweDYyRDAsIDB4MDU3RCwgMHg2MkQxLCAweDEzNjEsCisgICAgMHg2MkQyLCAweDA2OEIsIDB4NjJEMywgMHgwQjUzLCAweDYyRDQsIDB4MTM1RCwgMHg2MkQ3LCAweDEzNjAsCisgICAgMHg2MkQ4LCAweDA3QzYsIDB4NjJEOSwgMHgwQTdGLCAweDYyREIsIDB4MDk5RiwgMHg2MkRDLCAweDEzNjgsCisgICAgMHg2MkRELCAweDBEMDgsIDB4NjJFMCwgMHgwNjhDLCAweDYyRTEsIDB4MDVBNiwgMHg2MkVDLCAweDA1QzUsCisgICAgMHg2MkVELCAweDA5RTcsIDB4NjJFRSwgMHgxMzcwLCAweDYyRUYsIDB4MTM3NSwgMHg2MkYxLCAweDEzNzEsCisgICAgMHg2MkYzLCAweDA3NTMsIDB4NjJGNSwgMHgxMzc2LCAweDYyRjYsIDB4MDg3MCwgMHg2MkY3LCAweDA3RkIsCisgICAgMHg2MkZDLCAweDM4RTUsIDB4NjJGRSwgMHgwOTMwLCAweDYyRkYsIDB4MTM2NCwgMHg2MzAxLCAweDA4Q0IsCisgICAgMHg2MzAyLCAweDEzNzMsIDB4NjMwNywgMHgwOEE2LCAweDYzMDgsIDB4MTM3NCwgMHg2MzA5LCAweDA0ODgsCisgICAgMHg2MzBBLCAweDM4RTYsIDB4NjMwQywgMHgxMzZGLCAweDYzMEQsIDB4MzhFNywgMHg2MzExLCAweDBCQzUsCisgICAgMHg2MzE4LCAweDM4RTgsIDB4NjMxOSwgMHgwNjhELCAweDYzMUIsIDB4MzczNywgMHg2MzFGLCAweDA2QUMsCisgICAgMHg2MzI3LCAweDEzNzIsIDB4NjMyOCwgMHgwNDZCLCAweDYzMkIsIDB4MDgzMywgMHg2MzJGLCAweDA5RkMsCisgICAgMHg2MzM5LCAweDM4RTksIDB4NjMzQSwgMHgwQzBFLCAweDYzM0QsIDB4MEQ2OCwgMHg2MzNFLCAweDEzNzgsCisgICAgMHg2MzNGLCAweDBBRTAsIDB4NjM0MiwgMHgzOEVBLCAweDYzNDMsIDB4MzhFQiwgMHg2MzQ5LCAweDBCMEEsCisgICAgMHg2MzRDLCAweDA4NzksIDB4NjM0RCwgMHgxMzc5LCAweDYzNEYsIDB4MTM3QiwgMHg2MzUwLCAweDEzNzcsCisgICAgMHg2MzU1LCAweDBFMzEsIDB4NjM1NywgMHgwQkQ5LCAweDYzNUMsIDB4MEFERSwgMHg2MzY1LCAweDM4RUMsCisgICAgMHg2MzY3LCAweDBFNEIsIDB4NjM2OCwgMHgwOEZBLCAweDYzNjksIDB4MTM4NywgMHg2MzZCLCAweDEzODYsCisgICAgMHg2MzZFLCAweDBBM0UsIDB4NjM3MiwgMHgwNzU0LCAweDYzNzQsIDB4MzhFRCwgMHg2Mzc2LCAweDEzODAsCisgICAgMHg2Mzc3LCAweDA5QTEsIDB4NjM3QSwgMHgwQ0MwLCAweDYzN0IsIDB4MENFNywgMHg2MzdELCAweDM4RUUsCisgICAgMHg2MzgwLCAweDEzN0UsIDB4NjM4MywgMHgwQURGLCAweDYzODQsIDB4MzhFRiwgMHg2Mzg3LCAweDM4RjAsCisgICAgMHg2Mzg4LCAweDA5MjQsIDB4NjM4OSwgMHgxMzgzLCAweDYzOEMsIDB4MDlBMCwgMHg2MzhFLCAweDEzN0QsCisgICAgMHg2MzhGLCAweDEzODIsIDB4NjM5MCwgMHgzOEYxLCAweDYzOTIsIDB4MEQwOSwgMHg2Mzk2LCAweDEzN0MsCisgICAgMHg2Mzk4LCAweDA2RjcsIDB4NjM5QiwgMHgwNUJCLCAweDYzOUUsIDB4MzhGMiwgMHg2MzlGLCAweDEzODQsCisgICAgMHg2M0EwLCAweDBGNzMsIDB4NjNBMSwgMHgwODNFLCAweDYzQTIsIDB4MEI3MywgMHg2M0EzLCAweDEzODEsCisgICAgMHg2M0E1LCAweDBBODAsIDB4NjNBNywgMHgwN0M3LCAweDYzQTgsIDB4MEEyQSwgMHg2M0E5LCAweDA1MDgsCisgICAgMHg2M0FBLCAweDBBQkUsIDB4NjNBQiwgMHgxMzdGLCAweDYzQUMsIDB4MDY1RiwgMHg2M0IyLCAweDA3MUQsCisgICAgMHg2M0I0LCAweDBCRUIsIDB4NjNCNSwgMHgxMzg1LCAweDYzQkIsIDB4MEFFMSwgMHg2M0JFLCAweDEzODgsCisgICAgMHg2M0MwLCAweDEzOEEsIDB4NjNDMywgMHgwQjE3LCAweDYzQzQsIDB4MTM5MCwgMHg2M0M2LCAweDEzOEIsCisgICAgMHg2M0M5LCAweDEzOEQsIDB4NjNDRiwgMHgwREIzLCAweDYzRDAsIDB4MEMwRiwgMHg2M0QxLCAweDM4RjMsCisgICAgMHg2M0QyLCAweDEzOEUsIDB4NjNENiwgMHgwRjE2LCAweDYzREEsIDB4MEYzMiwgMHg2M0RCLCAweDA1RjUsCisgICAgMHg2M0RDLCAweDM4RjQsIDB4NjNFMSwgMHgwNDcyLCAweDYzRTMsIDB4MTM4QywgMHg2M0U5LCAweDEzODksCisgICAgMHg2M0VELCAweDM0MUMsIDB4NjNFRSwgMHgwNjM0LCAweDYzRjQsIDB4MDUwOSwgMHg2M0Y1LCAweDIxMTMsCisgICAgMHg2M0Y2LCAweDEzOEYsIDB4NjNGNywgMHgzNjQ0LCAweDYzRkEsIDB4MEYzMywgMHg2NDA2LCAweDEzOTMsCisgICAgMHg2NDA5LCAweDM4RjUsIDB4NjQwRCwgMHgwQjFCLCAweDY0MEYsIDB4MTM5QSwgMHg2NDEwLCAweDM4RjYsCisgICAgMHg2NDEzLCAweDEzOTQsIDB4NjQxNCwgMHgxRTJDLCAweDY0MTYsIDB4MTM5MSwgMHg2NDE3LCAweDEzOTgsCisgICAgMHg2NDFDLCAweDEzN0EsIDB4NjQyMiwgMHgzOEY3LCAweDY0MjYsIDB4MTM5NSwgMHg2NDI4LCAweDEzOTksCisgICAgMHg2NDJDLCAweDBENTYsIDB4NjQyRCwgMHgwQzY1LCAweDY0MzQsIDB4MTM5MiwgMHg2NDM2LCAweDEzOTYsCisgICAgMHg2NDNBLCAweDA3MUUsIDB4NjQzRSwgMHgwODYxLCAweDY0NDIsIDB4MEE4MSwgMHg2NDRFLCAweDEzOUUsCisgICAgMHg2NDUxLCAweDFFNDMsIDB4NjQ1NCwgMHgzOEY4LCAweDY0NTgsIDB4MEMyMCwgMHg2NDVCLCAweDM4RjksCisgICAgMHg2NDYwLCAweDIxMTQsIDB4NjQ2NywgMHgxMzlCLCAweDY0NjksIDB4MEU4RSwgMHg2NDZELCAweDM4RkEsCisgICAgMHg2NDZGLCAweDEzOUMsIDB4NjQ3NiwgMHgxMzlELCAweDY0NzgsIDB4MEVEQSwgMHg2NDdBLCAweDBBNDYsCisgICAgMHg2NDdCLCAweDM4RkIsIDB4NjQ4MywgMHgwNzM4LCAweDY0ODgsIDB4MTNBNCwgMHg2NDkyLCAweDA4ODMsCisgICAgMHg2NDkzLCAweDEzQTEsIDB4NjQ5NSwgMHgxM0EwLCAweDY0OUEsIDB4MENFOCwgMHg2NDlELCAweDIxMTUsCisgICAgMHg2NDlFLCAweDBDOEQsIDB4NjRBNCwgMHgwQzJCLCAweDY0QTUsIDB4MTNBMiwgMHg2NEE5LCAweDEzQTMsCisgICAgMHg2NEFCLCAweDBERTEsIDB4NjRBRCwgMHgwQ0ZCLCAweDY0QUUsIDB4MDg3MSwgMHg2NEIwLCAweDBBOTUsCisgICAgMHg2NEIyLCAweDBFN0UsIDB4NjRCOSwgMHgwNUE3LCAweDY0QkIsIDB4MTNBQSwgMHg2NEJDLCAweDEzQTUsCisgICAgMHg2NEJFLCAweDM4RkMsIDB4NjRCRiwgMHgzOEZELCAweDY0QzEsIDB4MEYzNCwgMHg2NEMyLCAweDEzQUMsCisgICAgMHg2NEM1LCAweDEzQTgsIDB4NjRDNywgMHgxM0E5LCAweDY0Q0EsIDB4MzQxRCwgMHg2NENELCAweDBBRTIsCisgICAgMHg2NENFLCAweDIxMTYsIDB4NjREMiwgMHgxM0E3LCAweDY0RDQsIDB4MTM2NiwgMHg2NEQ4LCAweDEzQUIsCisgICAgMHg2NERBLCAweDEzQTYsIDB4NjRFMCwgMHgxM0IwLCAweDY0RTEsIDB4MTNCMSwgMHg2NEUyLCAweDBDMjEsCisgICAgMHg2NEUzLCAweDEzQjMsIDB4NjRFNSwgMHgzOEZFLCAweDY0RTYsIDB4MDg3MiwgMHg2NEU3LCAweDEzQUUsCisgICAgMHg2NEVDLCAweDA2NTYsIDB4NjRFRiwgMHgxM0I0LCAweDY0RjEsIDB4MTNBRCwgMHg2NEYyLCAweDEzQjgsCisgICAgMHg2NEY0LCAweDEzQjcsIDB4NjRGNiwgMHgxM0I2LCAweDY0RjcsIDB4MzhGRiwgMHg2NEZBLCAweDEzQjksCisgICAgMHg2NEZCLCAweDM5MDAsIDB4NjRGRCwgMHgxM0JCLCAweDY0RkUsIDB4MDlEOSwgMHg2NTAwLCAweDEzQkEsCisgICAgMHg2NTA0LCAweDM5MDEsIDB4NjUwNSwgMHgxM0JFLCAweDY1MTYsIDB4MzkwMiwgMHg2NTE4LCAweDEzQkMsCisgICAgMHg2NTE5LCAweDM5MDMsIDB4NjUxQywgMHgxM0JELCAweDY1MUQsIDB4MTM5NywgMHg2NTIyLCAweDFFOTcsCisgICAgMHg2NTIzLCAweDEzQzAsIDB4NjUyNCwgMHgxM0JGLCAweDY1MkEsIDB4MTM5RiwgMHg2NTJCLCAweDEzQzEsCisgICAgMHg2NTJDLCAweDEzQjUsIDB4NjUyRiwgMHgwOEE3LCAweDY1MzQsIDB4MTNDMiwgMHg2NTM1LCAweDEzQzMsCisgICAgMHg2NTM2LCAweDEzQzUsIDB4NjUzNywgMHgxM0M0LCAweDY1MzgsIDB4MTNDNiwgMHg2NTM5LCAweDA1N0UsCisgICAgMHg2NTNCLCAweDA3QzgsIDB4NjUzRSwgMHgwRTRDLCAweDY1M0YsIDB4MEE1MywgMHg2NTQ1LCAweDA3ODIsCisgICAgMHg2NTQ3LCAweDM5MDQsIDB4NjU0OCwgMHgxM0M4LCAweDY1NEQsIDB4MTNDQiwgMHg2NTRFLCAweDIxMTcsCisgICAgMHg2NTRGLCAweDBEQzQsIDB4NjU1MSwgMHgwNjc5LCAweDY1NTUsIDB4MTNDQSwgMHg2NTU2LCAweDEzQzksCisgICAgMHg2NTU3LCAweDBEMEEsIDB4NjU1OCwgMHgxM0NDLCAweDY1NTksIDB4MDZBRCwgMHg2NTVELCAweDEzQ0UsCisgICAgMHg2NTVFLCAweDEzQ0QsIDB4NjU2MiwgMHgwNUY2LCAweDY1NjMsIDB4MDg4NCwgMHg2NTY2LCAweDBDQjAsCisgICAgMHg2NTY3LCAweDM5MDUsIDB4NjU2QywgMHgwNzFGLCAweDY1NzAsIDB4MEEzQSwgMHg2NTcyLCAweDEzQ0YsCisgICAgMHg2NTc0LCAweDBBNTQsIDB4NjU3NSwgMHgwQzIyLCAweDY1NzcsIDB4MEREMSwgMHg2NTc4LCAweDEzRDAsCisgICAgMHg2NTgxLCAweDM5MDYsIDB4NjU4MiwgMHgxM0QxLCAweDY1ODMsIDB4MTNEMiwgMHg2NTg1LCAweDM5MDcsCisgICAgMHg2NTg3LCAweDBFMDgsIDB4NjU4OCwgMHgxMjBDLCAweDY1ODksIDB4MEE2QSwgMHg2NThDLCAweDBEQkUsCisgICAgMHg2NThFLCAweDA4NDgsIDB4NjU5MCwgMHgwRDc5LCAweDY1OTEsIDB4MEQ1NywgMHg2NTk3LCAweDBDNDcsCisgICAgMHg2NTk5LCAweDBGODksIDB4NjU5QiwgMHgxM0Q0LCAweDY1OUMsIDB4MDhGQywgMHg2NTlGLCAweDEzRDUsCisgICAgMHg2NUExLCAweDA0N0EsIDB4NjVBNCwgMHgwNkNDLCAweDY1QTUsIDB4MEE3MSwgMHg2NUE3LCAweDBERDIsCisgICAgMHg2NUFCLCAweDEzRDYsIDB4NjVBQywgMHgwODkwLCAweDY1QUQsIDB4MEI4NSwgMHg2NUFGLCAweDA4QTksCisgICAgMHg2NUIwLCAweDA5RkQsIDB4NjVCNywgMHgxM0Q3LCAweDY1QjksIDB4MEU0RCwgMHg2NUJDLCAweDA1MTksCisgICAgMHg2NUJELCAweDA4QUEsIDB4NjVDMSwgMHgxM0RBLCAweDY1QzIsIDB4MzkwOCwgMHg2NUMzLCAweDEzRDgsCisgICAgMHg2NUM0LCAweDEzREIsIDB4NjVDNSwgMHgwRjgxLCAweDY1QzYsIDB4MTNEOSwgMHg2NUNCLCAweDBBOUYsCisgICAgMHg2NUNDLCAweDEzREMsIDB4NjVDRiwgMHgwQjEyLCAweDY1RDIsIDB4MTNERCwgMHg2NUQ3LCAweDA2MzYsCisgICAgMHg2NUQ5LCAweDEzREYsIDB4NjVEQiwgMHgxM0RFLCAweDY1RTAsIDB4MTNFMCwgMHg2NUUxLCAweDEzRTEsCisgICAgMHg2NUUyLCAweDA2MzcsIDB4NjVFMywgMHgzNTg1LCAweDY1RTUsIDB4MENENCwgMHg2NUU2LCAweDBCNzQsCisgICAgMHg2NUU3LCAweDA2ODYsIDB4NjVFOCwgMHgwOEFCLCAweDY1RTksIDB4MEFFMywgMHg2NUVDLCAweDA5NjYsCisgICAgMHg2NUVELCAweDA0NzQsIDB4NjVGMCwgMHgzOTA5LCAweDY1RjEsIDB4MTNFMiwgMHg2NUYyLCAweDM5MEEsCisgICAgMHg2NUZBLCAweDA1MjIsIDB4NjVGQiwgMHgxM0U2LCAweDY2MDAsIDB4MjExOCwgMHg2NjAyLCAweDA3QzksCisgICAgMHg2NjAzLCAweDEzRTUsIDB4NjYwNiwgMHgwODFCLCAweDY2MDcsIDB4MDlBMiwgMHg2NjA5LCAweDIxMUEsCisgICAgMHg2NjBBLCAweDEzRTQsIDB4NjYwQywgMHgwOUEzLCAweDY2MEUsIDB4MEVDQywgMHg2NjBGLCAweDA4MUEsCisgICAgMHg2NjEzLCAweDA0OUIsIDB4NjYxNCwgMHgwQTcyLCAweDY2MTUsIDB4MjExOSwgMHg2NjFDLCAweDEzRUIsCisgICAgMHg2NjFFLCAweDIxMUMsIDB4NjYxRiwgMHgwQTU1LCAweDY2MjAsIDB4MDRFOSwgMHg2NjI0LCAweDIxMUQsCisgICAgMHg2NjI1LCAweDA5NUYsIDB4NjYyNywgMHgwRTk0LCAweDY2MjgsIDB4MDg2MiwgMHg2NjJDLCAweDM5MEIsCisgICAgMHg2NjJELCAweDA5QTQsIDB4NjYyRSwgMHgyMTFCLCAweDY2MkYsIDB4MEE0QiwgMHg2NjMxLCAweDIwQUUsCisgICAgMHg2NjM0LCAweDEzRUEsIDB4NjYzNSwgMHgxM0U4LCAweDY2MzYsIDB4MTNFOSwgMHg2NjNCLCAweDFFMDAsCisgICAgMHg2NjNDLCAweDBCQTksIDB4NjYzRiwgMHgxNDA5LCAweDY2NDEsIDB4MTNFRiwgMHg2NjQyLCAweDA4Q0MsCisgICAgMHg2NjQzLCAweDA3Q0EsIDB4NjY0NCwgMHgxM0VELCAweDY2NDksIDB4MTNFRSwgMHg2NjRCLCAweDA5RkUsCisgICAgMHg2NjRDLCAweDM5MEMsIDB4NjY0RiwgMHgxM0VDLCAweDY2NTIsIDB4MDg3RCwgMHg2NjU3LCAweDIxMUYsCisgICAgMHg2NjU5LCAweDIxMjAsIDB4NjY1QiwgMHgzOTBELCAweDY2NUMsIDB4MzkwRSwgMHg2NjVELCAweDEzRjEsCisgICAgMHg2NjVFLCAweDEzRjAsIDB4NjY1RiwgMHgxM0Y1LCAweDY2NjEsIDB4MzkwRiwgMHg2NjYyLCAweDEzRjYsCisgICAgMHg2NjYzLCAweDM3M0EsIDB4NjY2NCwgMHgxM0YyLCAweDY2NjUsIDB4MjExRSwgMHg2NjY2LCAweDA1ODAsCisgICAgMHg2NjY3LCAweDEzRjMsIDB4NjY2OCwgMHgxM0Y0LCAweDY2NjksIDB4MEQ2OSwgMHg2NjZCLCAweDM5MTAsCisgICAgMHg2NjZFLCAweDBERDMsIDB4NjY2RiwgMHgwNzIwLCAweDY2NzAsIDB4MTNGNywgMHg2NjczLCAweDIxMjIsCisgICAgMHg2Njc0LCAweDBBNTYsIDB4NjY3NiwgMHgwOUE1LCAweDY2NzcsIDB4MzkxMSwgMHg2NjdBLCAweDBCOTAsCisgICAgMHg2NjgxLCAweDA2QkYsIDB4NjY4MywgMHgxM0Y4LCAweDY2ODQsIDB4MTNGQywgMHg2Njg3LCAweDA1NEIsCisgICAgMHg2Njg4LCAweDEzRjksIDB4NjY4OSwgMHgxM0ZCLCAweDY2OEUsIDB4MTNGQSwgMHg2NjkxLCAweDA5NzUsCisgICAgMHg2Njk2LCAweDBCODYsIDB4NjY5NywgMHgwNDg5LCAweDY2OTgsIDB4MTNGRCwgMHg2Njk5LCAweDIxMjMsCisgICAgMHg2NjlELCAweDEzRkUsIDB4NjZBMCwgMHgyMTI0LCAweDY2QTIsIDB4MEJDNiwgMHg2NkE0LCAweDM5MTIsCisgICAgMHg2NkE2LCAweDBGQjksIDB4NjZBQiwgMHgwODkxLCAweDY2QUUsIDB4MEUzQiwgMHg2NkIyLCAweDIxMjUsCisgICAgMHg2NkI0LCAweDBFNkIsIDB4NjZCOCwgMHgxNDA1LCAweDY2QjksIDB4MTQwMCwgMHg2NkJDLCAweDE0MDMsCisgICAgMHg2NkJFLCAweDE0MDIsIDB4NjZCRiwgMHgyMTI2LCAweDY2QzEsIDB4MTNGRiwgMHg2NkM0LCAweDE0MDQsCisgICAgMHg2NkM2LCAweDM0NTUsIDB4NjZDNywgMHgwQ0I2LCAweDY2QzgsIDB4MzkxMywgMHg2NkM5LCAweDE0MDEsCisgICAgMHg2NkQ2LCAweDE0MDYsIDB4NjZEOSwgMHgwOTc2LCAweDY2REEsIDB4MTQwNywgMHg2NkRDLCAweDBGMzUsCisgICAgMHg2NkRELCAweDBEMkUsIDB4NjZFMCwgMHgxNDA4LCAweDY2RTYsIDB4MTQwQSwgMHg2NkU5LCAweDE0MEIsCisgICAgMHg2NkVDLCAweDM5MTQsIDB4NjZGMCwgMHgxNDBDLCAweDY2RjIsIDB4MDZDMiwgMHg2NkYzLCAweDA0RUEsCisgICAgMHg2NkY0LCAweDA3Q0IsIDB4NjZGNSwgMHgxNDBELCAweDY2RjcsIDB4MTQwRSwgMHg2NkY4LCAweDA5N0IsCisgICAgMHg2NkY5LCAweDBBRTQsIDB4NjZGQSwgMHgyMTI3LCAweDY2RkIsIDB4MjBCMSwgMHg2NkZDLCAweDEwRUQsCisgICAgMHg2NkZELCAweDBBQzAsIDB4NjZGRSwgMHgwQUJGLCAweDY2RkYsIDB4MEIzOCwgMHg2NzAwLCAweDA4MzcsCisgICAgMHg2NzAzLCAweDEwNEIsIDB4NjcwNSwgMHgzOTE1LCAweDY3MDgsIDB4MDc0NCwgMHg2NzA5LCAweDBGMTcsCisgICAgMHg2NzBCLCAweDBFNEUsIDB4NjcwRCwgMHgwREYwLCAweDY3MEUsIDB4MjEyOCwgMHg2NzBGLCAweDE0MEYsCisgICAgMHg2NzEzLCAweDM5MTYsIDB4NjcxNCwgMHgwODYzLCAweDY3MTUsIDB4MEJEQiwgMHg2NzE2LCAweDE0MTAsCisgICAgMHg2NzE3LCAweDBGRDUsIDB4NjcxQiwgMHgwRTZDLCAweDY3MUQsIDB4MEJDNywgMHg2NzFFLCAweDE0MTEsCisgICAgMHg2NzFGLCAweDA2MzgsIDB4NjcyNiwgMHgxNDEyLCAweDY3MjcsIDB4MTQxMywgMHg2NzI4LCAweDBFRTYsCisgICAgMHg2NzJBLCAweDBFQjAsIDB4NjcyQiwgMHgwRUE0LCAweDY3MkMsIDB4MEU4QSwgMHg2NzJELCAweDA4NzMsCisgICAgMHg2NzJFLCAweDE0MTUsIDB4NjczMSwgMHgwOTE3LCAweDY3MzMsIDB4MzkxNywgMHg2NzM0LCAweDBFN0YsCisgICAgMHg2NzM2LCAweDE0MTcsIDB4NjczNywgMHgxNDFBLCAweDY3MzgsIDB4MTQxOSwgMHg2NzNBLCAweDA2MzUsCisgICAgMHg2NzNELCAweDA2N0EsIDB4NjczRiwgMHgxNDE2LCAweDY3NDEsIDB4MTQxOCwgMHg2NzQzLCAweDM1QjcsCisgICAgMHg2NzQ2LCAweDE0MUIsIDB4Njc0OCwgMHgzOTE4LCAweDY3NDksIDB4MEEzRiwgMHg2NzRDLCAweDM5MTksCisgICAgMHg2NzRFLCAweDBGNjUsIDB4Njc0RiwgMHgwNDhELCAweDY3NTAsIDB4MDg1MCwgMHg2NzUxLCAweDBCMUMsCisgICAgMHg2NzUzLCAweDA5MDksIDB4Njc1NiwgMHgwOURCLCAweDY3NTksIDB4MTQxRSwgMHg2NzVDLCAweDBDNDgsCisgICAgMHg2NzVFLCAweDE0MUMsIDB4Njc1RiwgMHgwQjBCLCAweDY3NjAsIDB4MTQxRCwgMHg2NzYxLCAweDA5REEsCisgICAgMHg2NzYyLCAweDBFRTksIDB4Njc2MywgMHgxNDFGLCAweDY3NjQsIDB4MTQyMCwgMHg2NzY1LCAweDBGNTIsCisgICAgMHg2NzY2LCAweDIxMkEsIDB4Njc2QSwgMHgxNDI1LCAweDY3NkQsIDB4MDdDQywgMHg2NzZFLCAweDM1NzEsCisgICAgMHg2NzZGLCAweDBEMEIsIDB4Njc3MCwgMHgxNDIyLCAweDY3NzEsIDB4MEM2NiwgMHg2NzcyLCAweDEzRTMsCisgICAgMHg2NzczLCAweDEzRTcsIDB4Njc3NSwgMHgwNjY5LCAweDY3NzYsIDB4MzkxQSwgMHg2Nzc3LCAweDBDRkQsCisgICAgMHg2NzdCLCAweDM5MUIsIDB4Njc3QywgMHgxNDI0LCAweDY3N0UsIDB4MDlBNiwgMHg2NzdGLCAweDBENTgsCisgICAgMHg2Nzg1LCAweDE0MkEsIDB4Njc4NywgMHgwRDhFLCAweDY3ODksIDB4MTQyMSwgMHg2NzhCLCAweDE0MjcsCisgICAgMHg2NzhDLCAweDE0MjYsIDB4Njc5MCwgMHgwQTczLCAweDY3OTUsIDB4MEU5QiwgMHg2Nzk3LCAweDBGOUIsCisgICAgMHg2NzlBLCAweDBFOTUsIDB4Njc5QywgMHgwNTRDLCAweDY3OUQsIDB4MDhBQywgMHg2N0EwLCAweDBGRUUsCisgICAgMHg2N0ExLCAweDE0MjksIDB4NjdBMiwgMHgwQTNCLCAweDY3QTYsIDB4MTQyOCwgMHg2N0E5LCAweDE0MjMsCisgICAgMHg2N0FGLCAweDA3ODMsIDB4NjdCMCwgMHgzOTFDLCAweDY3QjIsIDB4MzkxRCwgMHg2N0IzLCAweDE0MkYsCisgICAgMHg2N0I0LCAweDE0MkQsIDB4NjdCNiwgMHgwNTRELCAweDY3QjcsIDB4MTQyQiwgMHg2N0I4LCAweDE0MzEsCisgICAgMHg2N0I5LCAweDE0MzcsIDB4NjdCQiwgMHgyMTJCLCAweDY3QzAsIDB4MjEyRCwgMHg2N0MxLCAweDBCMjgsCisgICAgMHg2N0M0LCAweDBFMTEsIDB4NjdDNiwgMHgxNDM5LCAweDY3Q0EsIDB4MEQ5NCwgMHg2N0NFLCAweDE0MzgsCisgICAgMHg2N0NGLCAweDBEMjYsIDB4NjdEMCwgMHgwRTZELCAweDY3RDEsIDB4MDVGNywgMHg2N0QzLCAweDBBOUIsCisgICAgMHg2N0Q0LCAweDA5NEEsIDB4NjdENywgMHgzOTFGLCAweDY3RDgsIDB4MEJFRiwgMHg2N0Q5LCAweDM5MjAsCisgICAgMHg2N0RBLCAweDBGMTgsIDB4NjdERCwgMHgxNDM0LCAweDY3REUsIDB4MTQzMywgMHg2N0UyLCAweDE0MzUsCisgICAgMHg2N0U0LCAweDE0MzIsIDB4NjdFNywgMHgxNDNBLCAweDY3RTksIDB4MTQzMCwgMHg2N0VDLCAweDE0MkUsCisgICAgMHg2N0VFLCAweDE0MzYsIDB4NjdFRiwgMHgxNDJDLCAweDY3RjAsIDB4MzkyMSwgMHg2N0YxLCAweDBCQUEsCisgICAgMHg2N0YzLCAweDBGMDQsIDB4NjdGNCwgMHgwOEYyLCAweDY3RjUsIDB4MDg2NCwgMHg2N0Y5LCAweDM5MUUsCisgICAgMHg2N0ZCLCAweDA4MkEsIDB4NjdGRSwgMHgwRTlELCAweDY3RkYsIDB4MDU5RiwgMHg2ODAxLCAweDIxMkUsCisgICAgMHg2ODAyLCAweDBCRUEsIDB4NjgwMywgMHgwQ0EyLCAweDY4MDQsIDB4MDRFQiwgMHg2ODA1LCAweDFFMDcsCisgICAgMHg2ODEzLCAweDBBOTYsIDB4NjgxNiwgMHgwQTU4LCAweDY4MTcsIDB4MDcwMCwgMHg2ODFFLCAweDE0M0MsCisgICAgMHg2ODIxLCAweDA3Q0QsIDB4NjgyMiwgMHgwNURBLCAweDY4MjksIDB4MTQzRSwgMHg2ODJBLCAweDA1RDIsCisgICAgMHg2ODJCLCAweDE0NDQsIDB4NjgyQywgMHgzOTIyLCAweDY4MzAsIDB4MzkyMywgMHg2ODMxLCAweDM5MjQsCisgICAgMHg2ODMyLCAweDE0NDEsIDB4NjgzNCwgMHgwQTk3LCAweDY4MzgsIDB4MDVBOSwgMHg2ODM5LCAweDA4MUMsCisgICAgMHg2ODNDLCAweDA1QTgsIDB4NjgzRCwgMHgwODNGLCAweDY4NDAsIDB4MTQzRiwgMHg2ODQxLCAweDA3M0IsCisgICAgMHg2ODQyLCAweDA3MjEsIDB4Njg0MywgMHgwQzY3LCAweDY4NDQsIDB4MjEyRiwgMHg2ODQ2LCAweDE0M0QsCisgICAgMHg2ODQ4LCAweDA0OEEsIDB4Njg0RCwgMHgxNDQwLCAweDY4NEUsIDB4MTQ0MiwgMHg2ODUwLCAweDA2QzUsCisgICAgMHg2ODUxLCAweDA3MDIsIDB4Njg1MiwgMHgyMTJDLCAweDY4NTMsIDB4MDVGOCwgMHg2ODU0LCAweDA2NjUsCisgICAgMHg2ODU5LCAweDE0NDUsIDB4Njg1QiwgMHgzOTI1LCAweDY4NUMsIDB4MDg2OSwgMHg2ODVELCAweDBFOUYsCisgICAgMHg2ODVGLCAweDA4ODUsIDB4Njg2MywgMHgxNDQ2LCAweDY4NjcsIDB4MERBMiwgMHg2ODcyLCAweDM5MjYsCisgICAgMHg2ODc0LCAweDE0NTIsIDB4Njg3NSwgMHgzOTI3LCAweDY4NzYsIDB4MDUzMywgMHg2ODc3LCAweDE0NDcsCisgICAgMHg2ODdBLCAweDM5MjgsIDB4Njg3RSwgMHgxNDU4LCAweDY4N0YsIDB4MTQ0OCwgMHg2ODgxLCAweDBGOEEsCisgICAgMHg2ODgzLCAweDE0NEYsIDB4Njg4NCwgMHgzOTI5LCAweDY4ODUsIDB4MEQxNSwgMHg2ODhELCAweDE0NTcsCisgICAgMHg2ODhFLCAweDFFOUMsIDB4Njg4RiwgMHgxNDRBLCAweDY4OTMsIDB4MDQ3OCwgMHg2ODk0LCAweDE0NEMsCisgICAgMHg2ODk3LCAweDA3Q0UsIDB4Njg5QiwgMHgxNDRFLCAweDY4OUQsIDB4MTQ0RCwgMHg2ODlGLCAweDE0NDksCisgICAgMHg2OEEwLCAweDE0NTQsIDB4NjhBMiwgMHgwOUE3LCAweDY4QTUsIDB4MzkyQSwgMHg2OEE2LCAweDExQkUsCisgICAgMHg2OEE3LCAweDA3OUMsIDB4NjhBOCwgMHgwRjY2LCAweDY4QUQsIDB4MTQ0QiwgMHg2OEFGLCAweDBDMTAsCisgICAgMHg2OEIwLCAweDA1ODEsIDB4NjhCMSwgMHgwODFELCAweDY4QjIsIDB4MzkyQiwgMHg2OEIzLCAweDE0NDMsCisgICAgMHg2OEI1LCAweDE0NTMsIDB4NjhCNiwgMHgwNUJGLCAweDY4QjksIDB4MTQ1MSwgMHg2OEJBLCAweDE0NTUsCisgICAgMHg2OEJDLCAweDBDNjgsIDB4NjhDNCwgMHgwNjNBLCAweDY4QzYsIDB4MTQ3MywgMHg2OEM4LCAweDIwQUYsCisgICAgMHg2OEM5LCAweDBFRDUsIDB4NjhDQSwgMHgxNDVBLCAweDY4Q0IsIDB4MDYzOSwgMHg2OENELCAweDE0NjEsCisgICAgMHg2OENGLCAweDIxMzAsIDB4NjhEMCwgMHgzOTJDLCAweDY4RDIsIDB4MEU2RSwgMHg2OEQ0LCAweDE0NjIsCisgICAgMHg2OEQ1LCAweDE0NjQsIDB4NjhENiwgMHgzOTJELCAweDY4RDcsIDB4MTQ2OCwgMHg2OEQ4LCAweDE0NUMsCisgICAgMHg2OERBLCAweDBCNjgsIDB4NjhERiwgMHgwQzY5LCAweDY4RTAsIDB4MTQ2QywgMHg2OEUxLCAweDE0NUYsCisgICAgMHg2OEUzLCAweDE0NjksIDB4NjhFNywgMHgxNDYzLCAweDY4RTgsIDB4MzkyRSwgMHg2OEVELCAweDM5MkYsCisgICAgMHg2OEVFLCAweDA5RkYsIDB4NjhFRiwgMHgxNDZELCAweDY4RjAsIDB4MzkzMCwgMHg2OEYxLCAweDM5MzEsCisgICAgMHg2OEYyLCAweDBBNTcsIDB4NjhGOSwgMHgxNDZCLCAweDY4RkEsIDB4MDVGOSwgMHg2OEZDLCAweDM5MzIsCisgICAgMHg2OTAwLCAweDBGRjYsIDB4NjkwMSwgMHgxNDU5LCAweDY5MDQsIDB4MTQ2NywgMHg2OTA1LCAweDA0OUMsCisgICAgMHg2OTA4LCAweDE0NUIsIDB4NjkwQiwgMHgwRUM2LCAweDY5MEMsIDB4MTQ2MCwgMHg2OTBELCAweDA5RTgsCisgICAgMHg2OTBFLCAweDBCRTMsIDB4NjkwRiwgMHgxNDU2LCAweDY5MTEsIDB4MzkzMywgMHg2OTEyLCAweDE0NjYsCisgICAgMHg2OTEzLCAweDM5MzQsIDB4NjkxOSwgMHgwQTQwLCAweDY5MUEsIDB4MTQ3MCwgMHg2OTFCLCAweDA1Q0YsCisgICAgMHg2OTFDLCAweDA3NTUsIDB4NjkyMSwgMHgxNDcyLCAweDY5MjIsIDB4MTQ1RCwgMHg2OTIzLCAweDE0NzEsCisgICAgMHg2OTI1LCAweDE0NkEsIDB4NjkyNiwgMHgxNDVFLCAweDY5MjgsIDB4MTQ2RSwgMHg2OTJBLCAweDE0NkYsCisgICAgMHg2OTMwLCAweDE0ODAsIDB4NjkzNCwgMHgwQ0E2LCAweDY5MzUsIDB4MzkzNSwgMHg2OTM2LCAweDE0NjUsCisgICAgMHg2OTM5LCAweDE0N0MsIDB4NjkzQiwgMHgzOTM2LCAweDY5M0QsIDB4MTQ3RSwgMHg2OTNGLCAweDBCRjQsCisgICAgMHg2OTRBLCAweDBGMzYsIDB4Njk1MywgMHgwREU4LCAweDY5NTQsIDB4MTQ3OSwgMHg2OTU1LCAweDBCMkEsCisgICAgMHg2OTU3LCAweDM5MzcsIDB4Njk1OSwgMHgxNDdGLCAweDY5NUEsIDB4MEFDMSwgMHg2OTVDLCAweDE0NzYsCisgICAgMHg2OTVELCAweDE0ODMsIDB4Njk1RSwgMHgxNDgyLCAweDY5NjAsIDB4MENDNywgMHg2OTYxLCAweDE0ODEsCisgICAgMHg2OTYyLCAweDBDQzIsIDB4Njk2MywgMHgzOTM4LCAweDY5NjgsIDB4MjEzMiwgMHg2OTZBLCAweDE0ODUsCisgICAgMHg2OTZCLCAweDE0NzgsIDB4Njk2RCwgMHgwNkMwLCAweDY5NkUsIDB4MTQ3QiwgMHg2OTZGLCAweDA5NjcsCisgICAgMHg2OTcyLCAweDM5MzksIDB4Njk3MywgMHgwRDE2LCAweDY5NzQsIDB4MTQ3RCwgMHg2OTc1LCAweDA2QzMsCisgICAgMHg2OTc3LCAweDE0NzUsIDB4Njk3OCwgMHgxNDc3LCAweDY5NzksIDB4MTQ3NCwgMHg2OTdDLCAweDBGRDYsCisgICAgMHg2OTdELCAweDA1QjgsIDB4Njk3RSwgMHgxNDdBLCAweDY5N0YsIDB4MzkzQSwgMHg2OTgwLCAweDM5M0IsCisgICAgMHg2OTgxLCAweDE0ODQsIDB4Njk4MiwgMHgwNTkzLCAweDY5OEEsIDB4MDg1NywgMHg2OThFLCAweDA0RkYsCisgICAgMHg2OTkxLCAweDE0OTUsIDB4Njk5NCwgMHgwRkQ3LCAweDY5OTUsIDB4MTQ5OCwgMHg2OTk4LCAweDIxMzQsCisgICAgMHg2OTlCLCAweDBBMDAsIDB4Njk5QywgMHgxNDk3LCAweDY5QTAsIDB4MTQ5NiwgMHg2OUE2LCAweDM5M0MsCisgICAgMHg2OUE3LCAweDE0OTMsIDB4NjlBRCwgMHgzOTNELCAweDY5QUUsIDB4MTQ4NywgMHg2OUIxLCAweDE0QTQsCisgICAgMHg2OUIyLCAweDE0ODYsIDB4NjlCNCwgMHgxNDk5LCAweDY5QjcsIDB4MzkzRSwgMHg2OUJCLCAweDE0OTEsCisgICAgMHg2OUJFLCAweDE0OEMsIDB4NjlCRiwgMHgxNDg5LCAweDY5QzEsIDB4MTQ4QSwgMHg2OUMzLCAweDE0OTIsCisgICAgMHg2OUM3LCAweDFEMzMsIDB4NjlDQSwgMHgxNDhGLCAweDY5Q0IsIDB4MDdDRiwgMHg2OUNDLCAweDBCRTQsCisgICAgMHg2OUNELCAweDBBRTYsIDB4NjlDRSwgMHgxNDhELCAweDY5RDAsIDB4MTQ4OCwgMHg2OUQzLCAweDE0OEIsCisgICAgMHg2OUQ2LCAweDM5M0YsIDB4NjlENywgMHgzOTQwLCAweDY5RDgsIDB4MEYzNywgMHg2OUQ5LCAweDBFOTgsCisgICAgMHg2OURELCAweDE0OTAsIDB4NjlERSwgMHgxNDlBLCAweDY5RTIsIDB4MjEzNSwgMHg2OUU3LCAweDE0QTIsCisgICAgMHg2OUU4LCAweDE0OUIsIDB4NjlFQSwgMHgzNTZGLCAweDY5RUIsIDB4MTRBOCwgMHg2OUVELCAweDE0QTYsCisgICAgMHg2OUYyLCAweDE0QTEsIDB4NjlGNiwgMHgzNzNGLCAweDY5RjksIDB4MTRBMCwgMHg2OUZCLCAweDBCRUMsCisgICAgMHg2OUZELCAweDBBRTcsIDB4NjlGRiwgMHgxNDlFLCAweDZBMDEsIDB4Mzk0MSwgMHg2QTAyLCAweDE0OUMsCisgICAgMHg2QTA1LCAweDE0QTMsIDB4NkEwQSwgMHgxNEE5LCAweDZBMEIsIDB4MEQ4OSwgMHg2QTBDLCAweDE0QUYsCisgICAgMHg2QTBGLCAweDM5NDIsIDB4NkExMiwgMHgxNEFBLCAweDZBMTMsIDB4MTRBRCwgMHg2QTE0LCAweDE0QTcsCisgICAgMHg2QTE1LCAweDM5NDMsIDB4NkExNywgMHgwQkIyLCAweDZBMTksIDB4MERBQSwgMHg2QTFCLCAweDE0OUQsCisgICAgMHg2QTFFLCAweDE0QTUsIDB4NkExRiwgMHgwOUE4LCAweDZBMjEsIDB4MEVEQiwgMHg2QTIyLCAweDE0QjksCisgICAgMHg2QTIzLCAweDE0QUMsIDB4NkEyOCwgMHgzOTQ0LCAweDZBMjksIDB4MDc1NiwgMHg2QTJBLCAweDA1MjMsCisgICAgMHg2QTJCLCAweDA1QkQsIDB4NkEyRSwgMHgxNDk0LCAweDZBMzAsIDB4MjEzNiwgMHg2QTM0LCAweDM5NDUsCisgICAgMHg2QTM1LCAweDA5QTksIDB4NkEzNiwgMHgxNEIxLCAweDZBMzgsIDB4MTRCOCwgMHg2QTM5LCAweDA5MjUsCisgICAgMHg2QTNBLCAweDA1RDAsIDB4NkEzRCwgMHgwQjZDLCAweDZBM0UsIDB4Mzk0NiwgMHg2QTQ0LCAweDE0QUUsCisgICAgMHg2QTQ1LCAweDM5NDcsIDB4NkE0NiwgMHgyMTM4LCAweDZBNDcsIDB4MTRCMywgMHg2QTQ4LCAweDE0QjcsCisgICAgMHg2QTRCLCAweDA2QUUsIDB4NkE1MCwgMHgzOTQ4LCAweDZBNTEsIDB4Mzk0OSwgMHg2QTU0LCAweDNDMzQsCisgICAgMHg2QTU2LCAweDM5NEEsIDB4NkE1OCwgMHgwNjY2LCAweDZBNTksIDB4MTRCNSwgMHg2QTVCLCAweDM5NEIsCisgICAgMHg2QTVGLCAweDA2M0IsIDB4NkE2MSwgMHgwQ0EzLCAweDZBNjIsIDB4MTRCNCwgMHg2QTY2LCAweDE0QjYsCisgICAgMHg2QTZCLCAweDIxMzcsIDB4NkE3MiwgMHgxNEIwLCAweDZBNzMsIDB4MjEzOSwgMHg2QTc4LCAweDE0QjIsCisgICAgMHg2QTdFLCAweDIxM0EsIDB4NkE3RiwgMHgwNUJFLCAweDZBODAsIDB4MEI4NywgMHg2QTgzLCAweDM5NEMsCisgICAgMHg2QTg0LCAweDE0QkQsIDB4NkE4OSwgMHgzOTRELCAweDZBOEQsIDB4MTRCQiwgMHg2QThFLCAweDA3OUQsCisgICAgMHg2QTkwLCAweDE0QkEsIDB4NkE5MSwgMHgzOTRFLCAweDZBOTcsIDB4MTRDMCwgMHg2QTlDLCAweDE0M0IsCisgICAgMHg2QTlELCAweDM5NEYsIDB4NkE5RSwgMHgzOTUwLCAweDZBOUYsIDB4Mzk1MSwgMHg2QUEwLCAweDE0QkMsCisgICAgMHg2QUEyLCAweDE0QkUsIDB4NkFBMywgMHgxNEJGLCAweDZBQUEsIDB4MTRDQiwgMHg2QUFDLCAweDE0QzcsCisgICAgMHg2QUFFLCAweDE0NTAsIDB4NkFCMywgMHgxNEM2LCAweDZBQjgsIDB4MTRDNSwgMHg2QUJCLCAweDE0QzIsCisgICAgMHg2QUMxLCAweDE0QUIsIDB4NkFDMiwgMHgxNEM0LCAweDZBQzMsIDB4MTRDMywgMHg2QUQxLCAweDE0QzksCisgICAgMHg2QUQzLCAweDBGQ0MsIDB4NkFEQSwgMHgxNENDLCAweDZBREIsIDB4MDZGMywgMHg2QURDLCAweDM5NTIsCisgICAgMHg2QURFLCAweDE0QzgsIDB4NkFERiwgMHgxNENBLCAweDZBRTIsIDB4MjEzQiwgMHg2QUU0LCAweDIxM0MsCisgICAgMHg2QUU3LCAweDM5NTMsIDB4NkFFOCwgMHgwRDNCLCAweDZBRUEsIDB4MTRDRCwgMHg2QUVDLCAweDM5NTQsCisgICAgMHg2QUZBLCAweDE0RDEsIDB4NkFGQiwgMHgxNENFLCAweDZCMDQsIDB4MEY1RCwgMHg2QjA1LCAweDE0Q0YsCisgICAgMHg2QjBBLCAweDE0OUYsIDB4NkIxMiwgMHgxNEQyLCAweDZCMTYsIDB4MTREMywgMHg2QjFELCAweDA0RDcsCisgICAgMHg2QjFFLCAweDM5NTUsIDB4NkIxRiwgMHgxNEQ1LCAweDZCMjAsIDB4MDczRCwgMHg2QjIxLCAweDA4Q0QsCisgICAgMHg2QjIzLCAweDA2Q0QsIDB4NkIyNCwgMHgzOTU2LCAweDZCMjcsIDB4MDUyNCwgMHg2QjMyLCAweDBGNDksCisgICAgMHg2QjM1LCAweDM5NTcsIDB4NkIzNywgMHgxNEQ3LCAweDZCMzgsIDB4MTRENiwgMHg2QjM5LCAweDE0RDksCisgICAgMHg2QjNBLCAweDA2NTcsIDB4NkIzRCwgMHgwNkNFLCAweDZCM0UsIDB4MDVGQSwgMHg2QjQzLCAweDE0REMsCisgICAgMHg2QjQ2LCAweDM5NTgsIDB4NkI0NywgMHgxNERCLCAweDZCNDksIDB4MTRERCwgMHg2QjRDLCAweDA1NEUsCisgICAgMHg2QjRFLCAweDBCNzUsIDB4NkI1MCwgMHgxNERFLCAweDZCNTMsIDB4MDVGQiwgMHg2QjU0LCAweDE0RTAsCisgICAgMHg2QjU2LCAweDM5NTksIDB4NkI1OSwgMHgxNERGLCAweDZCNUIsIDB4MTRFMSwgMHg2QjVGLCAweDE0RTIsCisgICAgMHg2QjYwLCAweDM5NUEsIDB4NkI2MSwgMHgxNEUzLCAweDZCNjIsIDB4MDhBRCwgMHg2QjYzLCAweDBBNTksCisgICAgMHg2QjY0LCAweDA4MTEsIDB4NkI2NSwgMHgzNDRBLCAweDZCNjYsIDB4MERFMiwgMHg2QjY5LCAweDBFMzIsCisgICAgMHg2QjZBLCAweDBGRUEsIDB4NkI2RiwgMHgwOEMzLCAweDZCNzIsIDB4MzVEOSwgMHg2QjczLCAweDA4NDAsCisgICAgMHg2Qjc0LCAweDBGQkEsIDB4NkI3NywgMHgzNDU2LCAweDZCNzgsIDB4MTRFNCwgMHg2Qjc5LCAweDE0RTUsCisgICAgMHg2QjdCLCAweDA4QUUsIDB4NkI3RiwgMHgxNEU2LCAweDZCODAsIDB4MTRFNywgMHg2QjgyLCAweDM5NUIsCisgICAgMHg2QjgzLCAweDE0RTksIDB4NkI4NCwgMHgxNEU4LCAweDZCODYsIDB4MEU4NiwgMHg2Qjg5LCAweDA5NjgsCisgICAgMHg2QjhBLCAweDA5MTgsIDB4NkI4QiwgMHgwODkyLCAweDZCOEQsIDB4MTRFQSwgMHg2Qjk1LCAweDE0RUMsCisgICAgMHg2Qjk2LCAweDA5RTksIDB4NkI5OCwgMHgxNEVCLCAweDZCOUUsIDB4MTRFRCwgMHg2QkE0LCAweDE0RUUsCisgICAgMHg2QkFBLCAweDE0RUYsIDB4NkJBQiwgMHgxNEYwLCAweDZCQUYsIDB4MTRGMSwgMHg2QkIxLCAweDE0RjMsCisgICAgMHg2QkIyLCAweDE0RjIsIDB4NkJCMywgMHgxNEY0LCAweDZCQjQsIDB4MDUyNSwgMHg2QkI1LCAweDBCODgsCisgICAgMHg2QkI3LCAweDE0RjUsIDB4NkJCQSwgMHgwODc0LCAweDZCQkIsIDB4MDVBQSwgMHg2QkJDLCAweDE0RjYsCisgICAgMHg2QkJFLCAweDM5NUMsIDB4NkJCRiwgMHgwQzNDLCAweDZCQzAsIDB4MTE5RCwgMHg2QkM1LCAweDA2M0QsCisgICAgMHg2QkM2LCAweDE0RjcsIDB4NkJDQiwgMHgxNEY4LCAweDZCQ0MsIDB4Mzc0NCwgMHg2QkNELCAweDBFM0MsCisgICAgMHg2QkNFLCAweDBFOTYsIDB4NkJDRiwgMHgzNDRDLCAweDZCRDIsIDB4MEM5RiwgMHg2QkQzLCAweDE0RjksCisgICAgMHg2QkQ0LCAweDBEN0EsIDB4NkJENiwgMHgyMTNELCAweDZCRDgsIDB4MEQ4RiwgMHg2QkRCLCAweDBFREYsCisgICAgMHg2QkRGLCAweDE0RkEsIDB4NkJFMSwgMHgzOTVELCAweDZCRUIsIDB4MTRGQywgMHg2QkVDLCAweDE0RkIsCisgICAgMHg2QkVGLCAweDE0RkUsIDB4NkJGMSwgMHgzOTVFLCAweDZCRjMsIDB4MTRGRCwgMHg2QzA4LCAweDE1MDAsCisgICAgMHg2QzBGLCAweDA4QUYsIDB4NkMxMCwgMHgzOTVGLCAweDZDMTEsIDB4MEVCRCwgMHg2QzEzLCAweDE1MDEsCisgICAgMHg2QzE0LCAweDE1MDIsIDB4NkMxNywgMHgwNjNFLCAweDZDMUIsIDB4MTUwMywgMHg2QzIzLCAweDE1MDUsCisgICAgMHg2QzI0LCAweDE1MDQsIDB4NkMzMywgMHgzOTYwLCAweDZDMzQsIDB4MEEyQiwgMHg2QzM1LCAweDM5NjEsCisgICAgMHg2QzM3LCAweDBEQUIsIDB4NkMzOCwgMHgwNEVDLCAweDZDM0EsIDB4Mzk2MiwgMHg2QzNFLCAweDBENTksCisgICAgMHg2QzNGLCAweDIxM0UsIDB4NkM0MCwgMHgwQzExLCAweDZDNDEsIDB4MDk0QiwgMHg2QzQyLCAweDA2N0IsCisgICAgMHg2QzRFLCAweDBENUEsIDB4NkM1MCwgMHgwOERBLCAweDZDNTUsIDB4MTUwNywgMHg2QzU3LCAweDA1RkMsCisgICAgMHg2QzU5LCAweDM5NjMsIDB4NkM1QSwgMHgwNTFBLCAweDZDNUMsIDB4MjEzRiwgMHg2QzVELCAweDBDQ0EsCisgICAgMHg2QzVFLCAweDE1MDYsIDB4NkM1RiwgMHgwN0QwLCAweDZDNjAsIDB4MEI5MSwgMHg2QzYyLCAweDE1MDgsCisgICAgMHg2QzY4LCAweDE1MTAsIDB4NkM2QSwgMHgxNTA5LCAweDZDNkYsIDB4MjE0MSwgMHg2QzcwLCAweDBCMjEsCisgICAgMHg2QzcyLCAweDA2N0MsIDB4NkM3MywgMHgxNTExLCAweDZDNzYsIDB4Mzk2NCwgMHg2QzdBLCAweDA3M0UsCisgICAgMHg2QzdCLCAweDM5NjUsIDB4NkM3RCwgMHgwNjNGLCAweDZDN0UsIDB4MTUwRiwgMHg2QzgxLCAweDE1MEQsCisgICAgMHg2QzgyLCAweDE1MEEsIDB4NkM4MywgMHgwRjRBLCAweDZDODUsIDB4Mzk2NiwgMHg2Qzg2LCAweDIxNDAsCisgICAgMHg2Qzg4LCAweDBCREMsIDB4NkM4QywgMHgwQ0IxLCAweDZDOEQsIDB4MTUwQiwgMHg2QzkwLCAweDE1MTMsCisgICAgMHg2QzkyLCAweDE1MTIsIDB4NkM5MywgMHgwNkY5LCAweDZDOTUsIDB4Mzk2NywgMHg2Qzk2LCAweDA1MkQsCisgICAgMHg2Qzk5LCAweDA4MkIsIDB4NkM5QSwgMHgxNTBDLCAweDZDOUIsIDB4MTUwRSwgMHg2QzlDLCAweDM5NjgsCisgICAgMHg2Q0ExLCAweDBFODUsIDB4NkNBMiwgMHgwQjU0LCAweDZDQUEsIDB4Mzc0OSwgMHg2Q0FCLCAweDBFQTUsCisgICAgMHg2Q0FFLCAweDE1MUIsIDB4NkNCMSwgMHgxNTFDLCAweDZDQjMsIDB4MDU0RiwgMHg2Q0I4LCAweDBERjgsCisgICAgMHg2Q0I5LCAweDBGMDksIDB4NkNCQSwgMHgxNTFFLCAweDZDQkIsIDB4MDhDRiwgMHg2Q0JDLCAweDA5QUEsCisgICAgMHg2Q0JELCAweDE1MTcsIDB4NkNCRSwgMHgxNTFELCAweDZDQkYsIDB4MDUwQSwgMHg2Q0MxLCAweDA2QUYsCisgICAgMHg2Q0M0LCAweDE1MTQsIDB4NkNDNSwgMHgxNTE5LCAweDZDQzksIDB4MEE5OCwgMHg2Q0NBLCAweDBEMjcsCisgICAgMHg2Q0NDLCAweDBEN0IsIDB4NkNEMCwgMHgzOTY5LCAweDZDRDMsIDB4MTUxNiwgMHg2Q0Q0LCAweDM5NkEsCisgICAgMHg2Q0Q1LCAweDBFNEYsIDB4NkNENiwgMHgzOTZCLCAweDZDRDcsIDB4MTUxOCwgMHg2Q0Q5LCAweDE1MjEsCisgICAgMHg2Q0RBLCAweDIxNDIsIDB4NkNEQiwgMHgxNTFGLCAweDZDREQsIDB4MTUxQSwgMHg2Q0UwLCAweDM5NkMsCisgICAgMHg2Q0UxLCAweDBFNTAsIDB4NkNFMiwgMHgwQ0ZFLCAweDZDRTMsIDB4MDY3RCwgMHg2Q0U1LCAweDBDMUYsCisgICAgMHg2Q0U4LCAweDBCQUIsIDB4NkNFQSwgMHgxNTIyLCAweDZDRUIsIDB4Mzk2RCwgMHg2Q0VDLCAweDM5NkUsCisgICAgMHg2Q0VFLCAweDM5NkYsIDB4NkNFRiwgMHgxNTIwLCAweDZDRjAsIDB4MEIzOSwgMHg2Q0YxLCAweDE1MTUsCisgICAgMHg2Q0YzLCAweDA0RUQsIDB4NkQwMSwgMHgzQzM1LCAweDZEMDQsIDB4MjE0MywgMHg2RDBBLCAweDM5NzAsCisgICAgMHg2RDBCLCAweDBGMzgsIDB4NkQwQywgMHgxNTJELCAweDZEMEUsIDB4Mzk3MSwgMHg2RDExLCAweDM5NzIsCisgICAgMHg2RDEyLCAweDE1MkMsIDB4NkQxNywgMHgwQTlBLCAweDZEMTksIDB4MTUyOSwgMHg2RDFCLCAweDBGNTYsCisgICAgMHg2RDFFLCAweDBDOEUsIDB4NkQxRiwgMHgxNTIzLCAweDZEMjUsIDB4MEJFMSwgMHg2RDI5LCAweDA0RUUsCisgICAgMHg2RDJBLCAweDA3RDEsIDB4NkQyQiwgMHgxNTI2LCAweDZEMkUsIDB4Mzk3MywgMHg2RDMyLCAweDA5MzEsCisgICAgMHg2RDMzLCAweDE1MkIsIDB4NkQzNSwgMHgxNTJBLCAweDZEMzYsIDB4MTUyNSwgMHg2RDM4LCAweDE1MjgsCisgICAgMHg2RDNCLCAweDA1QzYsIDB4NkQzRCwgMHgxNTI3LCAweDZEM0UsIDB4MENGRiwgMHg2RDQxLCAweDBGNzYsCisgICAgMHg2RDQ0LCAweDA5REMsIDB4NkQ0NSwgMHgwQTk5LCAweDZENTcsIDB4Mzk3NCwgMHg2RDU5LCAweDE1MzMsCisgICAgMHg2RDVBLCAweDE1MzEsIDB4NkQ1QywgMHgwREJGLCAweDZENUUsIDB4Mzk3NSwgMHg2RDYzLCAweDE1MkUsCisgICAgMHg2RDY0LCAweDE1MzAsIDB4NkQ2NSwgMHgzOTc2LCAweDZENjYsIDB4MDREQywgMHg2RDY5LCAweDA3RDIsCisgICAgMHg2RDZBLCAweDBGRDgsIDB4NkQ2QywgMHgwNTlCLCAweDZENkUsIDB4MERENCwgMHg2RDZGLCAweDIxNDUsCisgICAgMHg2RDc0LCAweDBGNEIsIDB4NkQ3NywgMHgwNTgyLCAweDZENzgsIDB4MEEwMSwgMHg2RDc5LCAweDE1MzIsCisgICAgMHg2RDgyLCAweDM5NzcsIDB4NkQ4NSwgMHgxNTM3LCAweDZEODcsIDB4MjE0NCwgMHg2RDg4LCAweDA5QUIsCisgICAgMHg2RDg5LCAweDM0MkEsIDB4NkQ4QywgMHgwRjFBLCAweDZEOEUsIDB4MTUzNCwgMHg2RDkzLCAweDE1MkYsCisgICAgMHg2RDk1LCAweDE1MzUsIDB4NkQ5NiwgMHgyMTQ2LCAweDZEOTksIDB4MEZBNiwgMHg2RDlCLCAweDBDNkQsCisgICAgMHg2RDlDLCAweDBDOUEsIDB4NkRBQywgMHgyMTQ3LCAweDZEQUYsIDB4MDU5NCwgMHg2REIyLCAweDA0RjcsCisgICAgMHg2REI1LCAweDE1M0IsIDB4NkRCOCwgMHgxNTNFLCAweDZEQkMsIDB4MEY4QiwgMHg2REJGLCAweDM5NzgsCisgICAgMHg2REMwLCAweDBGNEUsIDB4NkRDNCwgMHgzOTc5LCAweDZEQzUsIDB4MTU0NSwgMHg2REM2LCAweDE1M0YsCisgICAgMHg2REM3LCAweDE1M0MsIDB4NkRDQSwgMHgzOTdBLCAweDZEQ0IsIDB4MEY5QywgMHg2RENDLCAweDE1NDIsCisgICAgMHg2RENGLCAweDIxNDgsIDB4NkREMCwgMHgzQzM2LCAweDZERDEsIDB4MDk1NCwgMHg2REQyLCAweDE1NDQsCisgICAgMHg2REQ1LCAweDE1NDksIDB4NkRENiwgMHgzOTdCLCAweDZERDgsIDB4MEM2QiwgMHg2REQ5LCAweDE1NDcsCisgICAgMHg2RERBLCAweDM0NTMsIDB4NkRERSwgMHgxNTQxLCAweDZERTEsIDB4MEI3NiwgMHg2REU0LCAweDE1NDgsCisgICAgMHg2REU2LCAweDE1M0QsIDB4NkRFOCwgMHgxNTQzLCAweDZERTksIDB4Mzk3QywgMHg2REVBLCAweDE1NEEsCisgICAgMHg2REVCLCAweDA0QzAsIDB4NkRFQywgMHgxNTQwLCAweDZERUUsIDB4MTU0QiwgMHg2REYxLCAweDBBMDIsCisgICAgMHg2REYyLCAweDIxNEEsIDB4NkRGMywgMHgwOTY5LCAweDZERjUsIDB4MERGNSwgMHg2REY3LCAweDA4MUUsCisgICAgMHg2REY4LCAweDIxNDksIDB4NkRGOSwgMHgxNTM4LCAweDZERkEsIDB4MTU0NiwgMHg2REZCLCAweDBDMzQsCisgICAgMHg2REZDLCAweDIxNEIsIDB4NkUwNSwgMHgwQTVBLCAweDZFMDcsIDB4MDVDNywgMHg2RTA4LCAweDA4NDEsCisgICAgMHg2RTA5LCAweDA5QUMsIDB4NkUwQSwgMHgxNTNBLCAweDZFMEIsIDB4MDk0QywgMHg2RTEzLCAweDA3MjIsCisgICAgMHg2RTE1LCAweDE1MzksIDB4NkUxNywgMHgzNzQ2LCAweDZFMTksIDB4MTU0RiwgMHg2RTFBLCAweDA5NzcsCisgICAgMHg2RTFCLCAweDA3NkUsIDB4NkUxRCwgMHgxNTVFLCAweDZFMUYsIDB4MTU1OCwgMHg2RTIwLCAweDA2OEUsCisgICAgMHg2RTIxLCAweDBDNDksIDB4NkUyMiwgMHgzOTdELCAweDZFMjMsIDB4MTU1MywgMHg2RTI0LCAweDE1NUMsCisgICAgMHg2RTI1LCAweDA0NzMsIDB4NkUyNiwgMHgwNEQ0LCAweDZFMjcsIDB4MjE0RSwgMHg2RTI5LCAweDA1MzksCisgICAgMHg2RTJCLCAweDE1NTUsIDB4NkUyQywgMHgwQjBDLCAweDZFMkQsIDB4MTU0QywgMHg2RTJFLCAweDE1NEUsCisgICAgMHg2RTJGLCAweDA3RDMsIDB4NkUzNCwgMHgzNDEyLCAweDZFMzgsIDB4MTU1RiwgMHg2RTM5LCAweDIxNEMsCisgICAgMHg2RTNBLCAweDE1NUEsIDB4NkUzQywgMHgyMTRGLCAweDZFM0UsIDB4MTU1MiwgMHg2RTQyLCAweDNDMzcsCisgICAgMHg2RTQzLCAweDE1NTksIDB4NkU0QSwgMHgwRUI3LCAweDZFNEQsIDB4MTU1NywgMHg2RTRFLCAweDE1NUIsCisgICAgMHg2RTUxLCAweDM5N0UsIDB4NkU1NiwgMHgwNzg0LCAweDZFNTgsIDB4MDlBRCwgMHg2RTVCLCAweDBCNzcsCisgICAgMHg2RTVDLCAweDIxNEQsIDB4NkU1RiwgMHgxNTUxLCAweDZFNjcsIDB4MEYxOSwgMHg2RTZCLCAweDE1NTQsCisgICAgMHg2RTZFLCAweDE1NEQsIDB4NkU2RiwgMHgwQzZDLCAweDZFNzIsIDB4MTU1MCwgMHg2RTc2LCAweDE1NTYsCisgICAgMHg2RTdFLCAweDBGRjcsIDB4NkU3RiwgMHgwOEVBLCAweDZFODAsIDB4MEVBQywgMHg2RTgyLCAweDE1NjAsCisgICAgMHg2RThDLCAweDBENDIsIDB4NkU4RiwgMHgxNTZDLCAweDZFOTAsIDB4MDc2RiwgMHg2RTk2LCAweDA5NkEsCisgICAgMHg2RTk4LCAweDE1NjIsIDB4NkU5QywgMHgwRjc3LCAweDZFOUQsIDB4MDdENCwgMHg2RTlGLCAweDE1NkYsCisgICAgMHg2RUEyLCAweDA0QjIsIDB4NkVBNSwgMHgxNTZELCAweDZFQUEsIDB4MTU2MSwgMHg2RUFCLCAweDM0MEMsCisgICAgMHg2RUFGLCAweDE1NjcsIDB4NkVCMiwgMHgxNTY5LCAweDZFQjYsIDB4MEYzOSwgMHg2RUI3LCAweDE1NjQsCisgICAgMHg2RUJBLCAweDBDMjgsIDB4NkVCRCwgMHgxNTY2LCAweDZFQkYsIDB4MjE1MCwgMHg2RUMyLCAweDE1NkUsCisgICAgMHg2RUM0LCAweDE1NjgsIDB4NkVDNSwgMHgwRUQzLCAweDZFQzcsIDB4Mzk3RiwgMHg2RUM5LCAweDE1NjMsCisgICAgMHg2RUNBLCAweDM5ODAsIDB4NkVDQiwgMHgwOENFLCAweDZFQ0MsIDB4MTU3QiwgMHg2RUNFLCAweDM5ODEsCisgICAgMHg2RUQxLCAweDA1QzgsIDB4NkVEMywgMHgxNTY1LCAweDZFRDQsIDB4MTU2QSwgMHg2RUQ1LCAweDE1NkIsCisgICAgMHg2RUQ5LCAweDNDMzgsIDB4NkVERCwgMHgwQjRDLCAweDZFREUsIDB4MEIzQSwgMHg2RUU2LCAweDNDMjQsCisgICAgMHg2RUVDLCAweDE1NzMsIDB4NkVFRiwgMHgxNTc5LCAweDZFRjIsIDB4MTU3NywgMHg2RUY0LCAweDBDMjMsCisgICAgMHg2RUY3LCAweDE1N0UsIDB4NkVGOCwgMHgxNTc0LCAweDZFRkQsIDB4Mzk4MiwgMHg2RUZFLCAweDE1NzUsCisgICAgMHg2RUZGLCAweDE1NUQsIDB4NkYwMSwgMHgwNjkzLCAweDZGMDIsIDB4MERBQywgMHg2RjA2LCAweDA4RUIsCisgICAgMHg2RjA5LCAweDA4MDksIDB4NkYwRiwgMHgwRkQ5LCAweDZGMTEsIDB4MTU3MSwgMHg2RjEzLCAweDE1N0QsCisgICAgMHg2RjE0LCAweDA1MEIsIDB4NkYxNSwgMHgwQUU4LCAweDZGMUEsIDB4Mzk4MywgMHg2RjIwLCAweDBEMkYsCisgICAgMHg2RjIyLCAweDA1RkQsIDB4NkYyMywgMHgwRkMyLCAweDZGMkEsIDB4Mzk4NCwgMHg2RjJCLCAweDBFQUQsCisgICAgMHg2RjJDLCAweDBCRUUsIDB4NkYyRiwgMHgzOTg1LCAweDZGMzEsIDB4MTU3OCwgMHg2RjMyLCAweDE1N0EsCisgICAgMHg2RjMzLCAweDM5ODYsIDB4NkYzOCwgMHgwQUI0LCAweDZGM0UsIDB4MTU3QywgMHg2RjNGLCAweDE1NzYsCisgICAgMHg2RjQxLCAweDE1NzAsIDB4NkY0NSwgMHgwNUZGLCAweDZGNTEsIDB4MUU2MCwgMHg2RjU0LCAweDA3M0YsCisgICAgMHg2RjU4LCAweDE1OEEsIDB4NkY1QSwgMHgzOTg3LCAweDZGNUIsIDB4MTU4NSwgMHg2RjVDLCAweDBBOUMsCisgICAgMHg2RjVFLCAweDM5ODgsIDB4NkY1RiwgMHgwNUMxLCAweDZGNjIsIDB4Mzk4OSwgMHg2RjY0LCAweDA5NkIsCisgICAgMHg2RjY2LCAweDE1OEUsIDB4NkY2RCwgMHgxNTg3LCAweDZGNkUsIDB4MEJDOCwgMHg2RjZGLCAweDE1ODQsCisgICAgMHg2RjcwLCAweDBCRjUsIDB4NkY3NCwgMHgxNUE3LCAweDZGNzgsIDB4MTU4MSwgMHg2RjdBLCAweDE1ODAsCisgICAgMHg2RjdDLCAweDE1ODksIDB4NkY3RCwgMHgzOThBLCAweDZGODAsIDB4MTU4MywgMHg2RjgxLCAweDE1ODIsCisgICAgMHg2RjgyLCAweDE1ODgsIDB4NkY4NCwgMHgwQTQ1LCAweDZGODYsIDB4MTU3RiwgMHg2Rjg4LCAweDIxNTEsCisgICAgMHg2RjhCLCAweDM5OEIsIDB4NkY4RCwgMHgzOThDLCAweDZGOEUsIDB4MTU4QiwgMHg2RjkxLCAweDE1OEMsCisgICAgMHg2RjkyLCAweDM5OEQsIDB4NkY5NCwgMHgzOThFLCAweDZGOTcsIDB4MDVGRSwgMHg2Rjk4LCAweDM2M0MsCisgICAgMHg2RjlBLCAweDM5OEYsIDB4NkZBMSwgMHgxNTkxLCAweDZGQTMsIDB4MTU5MCwgMHg2RkE0LCAweDE1OTIsCisgICAgMHg2RkE3LCAweDM5OTAsIDB4NkZBOCwgMHgzOTkxLCAweDZGQUEsIDB4MTU5NSwgMHg2RkIxLCAweDBDM0QsCisgICAgMHg2RkIzLCAweDE1OEYsIDB4NkZCNSwgMHgyMTUyLCAweDZGQjYsIDB4Mzk5MiwgMHg2RkI5LCAweDE1OTMsCisgICAgMHg2RkMwLCAweDA3MzksIDB4NkZDMSwgMHgwQjU5LCAweDZGQzIsIDB4MTU4RCwgMHg2RkMzLCAweDBDRjEsCisgICAgMHg2RkM2LCAweDE1OTQsIDB4NkZENCwgMHgxNTk5LCAweDZGRDUsIDB4MTU5NywgMHg2RkQ4LCAweDE1OUEsCisgICAgMHg2RkRBLCAweDM5OTMsIDB4NkZEQiwgMHgxNTlELCAweDZGREUsIDB4Mzk5NCwgMHg2RkRGLCAweDE1OTYsCisgICAgMHg2RkUwLCAweDA3RkMsIDB4NkZFMSwgMHgwQ0RFLCAweDZGRTQsIDB4MTUzNiwgMHg2RkVCLCAweDBGNUUsCisgICAgMHg2RkVDLCAweDE1OTgsIDB4NkZFRSwgMHgxNTlDLCAweDZGRUYsIDB4MEI1NSwgMHg2RkYxLCAweDE1OUIsCisgICAgMHg2RkYzLCAweDE1ODYsIDB4NkZGNSwgMHgyMTUzLCAweDZGRjYsIDB4MUJBNCwgMHg2RkY5LCAweDM5OTUsCisgICAgMHg2RkZBLCAweDE1QTAsIDB4NkZGRSwgMHgxNUE0LCAweDcwMDEsIDB4MTVBMiwgMHg3MDA1LCAweDIxNTQsCisgICAgMHg3MDA2LCAweDFFNTAsIDB4NzAwNywgMHgyMTU1LCAweDcwMDksIDB4MTU5RSwgMHg3MDBCLCAweDE1OUYsCisgICAgMHg3MDBGLCAweDE1QTMsIDB4NzAxMSwgMHgxNUExLCAweDcwMTUsIDB4MERDMCwgMHg3MDE4LCAweDE1QTksCisgICAgMHg3MDFBLCAweDE1QTYsIDB4NzAxQiwgMHgxNUE1LCAweDcwMUQsIDB4MTVBOCwgMHg3MDFFLCAweDBDQUMsCisgICAgMHg3MDFGLCAweDE1QUEsIDB4NzAyNiwgMHgwQkIzLCAweDcwMjcsIDB4MEI0RCwgMHg3MDI4LCAweDIxNTYsCisgICAgMHg3MDJDLCAweDBBNDksIDB4NzAzMCwgMHgxNUFCLCAweDcwMzIsIDB4MTVBRCwgMHg3MDM5LCAweDM5OTYsCisgICAgMHg3MDNDLCAweDM5OTcsIDB4NzAzRSwgMHgxNUFDLCAweDcwNEEsIDB4Mzk5OCwgMHg3MDRDLCAweDE1NzIsCisgICAgMHg3MDUxLCAweDE1QUUsIDB4NzA1NCwgMHgzOTk5LCAweDcwNTgsIDB4MENCRiwgMHg3MDVELCAweDM5OUEsCisgICAgMHg3MDVFLCAweDM5OUIsIDB4NzA2MywgMHgxNUFGLCAweDcwNjQsIDB4Mzk5QywgMHg3MDZCLCAweDA1NTAsCisgICAgMHg3MDZDLCAweDM5OUQsIDB4NzA2RiwgMHgwQzZFLCAweDcwNzAsIDB4MDU4MywgMHg3MDc4LCAweDA2N0UsCisgICAgMHg3MDdDLCAweDA5MEEsIDB4NzA3RCwgMHgwODQyLCAweDcwN0UsIDB4Mzk5RSwgMHg3MDgxLCAweDM5OUYsCisgICAgMHg3MDg1LCAweDIxNTcsIDB4NzA4OSwgMHgwRkNELCAweDcwOEEsIDB4MEEyQywgMHg3MDhFLCAweDA1MEMsCisgICAgMHg3MDkyLCAweDE1QjEsIDB4NzA5NSwgMHgzOUEwLCAweDcwOTksIDB4MTVCMCwgMHg3MEFCLCAweDIxNTgsCisgICAgMHg3MEFDLCAweDE1QjQsIDB4NzBBRCwgMHgwQjc4LCAweDcwQUUsIDB4MTVCNywgMHg3MEFGLCAweDE1QjIsCisgICAgMHg3MEIzLCAweDE1QjYsIDB4NzBCNywgMHgzOUExLCAweDcwQjgsIDB4MTVCNSwgMHg3MEI5LCAweDBDM0EsCisgICAgMHg3MEJBLCAweDA0OUQsIDB4NzBCQiwgMHgyMEFELCAweDcwQzgsIDB4MEZCRCwgMHg3MENCLCAweDE1QjksCisgICAgMHg3MENGLCAweDA0Q0EsIDB4NzBEMywgMHgzOUEyLCAweDcwRDQsIDB4MzlBMywgMHg3MEQ4LCAweDM5QTQsCisgICAgMHg3MEQ5LCAweDE1QkIsIDB4NzBEQywgMHgzOUE1LCAweDcwREQsIDB4MTVCQSwgMHg3MERGLCAweDE1QjgsCisgICAgMHg3MEYxLCAweDE1QjMsIDB4NzBGOSwgMHgwRTUxLCAweDcwRkQsIDB4MTVCRCwgMHg3MTA0LCAweDIxNUEsCisgICAgMHg3MTA3LCAweDM5QTYsIDB4NzEwOSwgMHgxNUJDLCAweDcxMEYsIDB4MjE1OSwgMHg3MTE0LCAweDA1MEQsCisgICAgMHg3MTE5LCAweDE1QkYsIDB4NzExQSwgMHgwRTAyLCAweDcxMUMsIDB4MTVCRSwgMHg3MTIwLCAweDM5QTcsCisgICAgMHg3MTIxLCAweDBFQzEsIDB4NzEyNiwgMHgwOUFGLCAweDcxMzAsIDB4MUREQywgMHg3MTMxLCAweDM5QTgsCisgICAgMHg3MTM2LCAweDBBQjUsIDB4NzEzQywgMHgwOUFFLCAweDcxNDYsIDB4MjE1QywgMHg3MTQ3LCAweDIxNUQsCisgICAgMHg3MTQ5LCAweDBGQzMsIDB4NzE0QSwgMHgzOUE5LCAweDcxNEMsIDB4MTVDNSwgMHg3MTRFLCAweDBBOUQsCisgICAgMHg3MTUyLCAweDM5QUEsIDB4NzE1NSwgMHgxNUMxLCAweDcxNTYsIDB4MTVDNiwgMHg3MTU5LCAweDA1MEUsCisgICAgMHg3MTVDLCAweDIxNUIsIDB4NzE2MCwgMHgzOUFCLCAweDcxNjIsIDB4MTVDNCwgMHg3MTY0LCAweDBEMTcsCisgICAgMHg3MTY1LCAweDE1QzAsIDB4NzE2NiwgMHgxNUMzLCAweDcxNjcsIDB4MDlCMCwgMHg3MTY5LCAweDBENjUsCisgICAgMHg3MTZDLCAweDE1QzcsIDB4NzE2RSwgMHgwOEZELCAweDcxNzksIDB4MzlBQywgMHg3MTdELCAweDBBOUUsCisgICAgMHg3MTg0LCAweDE1Q0EsIDB4NzE4OCwgMHgxNUMyLCAweDcxOEEsIDB4MDZGRCwgMHg3MThGLCAweDE1QzgsCisgICAgMHg3MTkyLCAweDM5QUQsIDB4NzE5NCwgMHgwRjNBLCAweDcxOTUsIDB4MTVDQiwgMHg3MTk5LCAweDIwNUQsCisgICAgMHg3MTlGLCAweDA5NTksIDB4NzFBOCwgMHgxNUNDLCAweDcxQUMsIDB4MTVDRCwgMHg3MUIxLCAweDBDRTQsCisgICAgMHg3MUIzLCAweDM5QUUsIDB4NzFCOSwgMHgxNUNGLCAweDcxQkUsIDB4MTVEMCwgMHg3MUMxLCAweDIxNUYsCisgICAgMHg3MUMzLCAweDBDRTksIDB4NzFDOCwgMHgwQzZGLCAweDcxQzksIDB4MTVEMiwgMHg3MUNCLCAweDM5QUYsCisgICAgMHg3MUNFLCAweDE1RDQsIDB4NzFEMCwgMHgwRjlELCAweDcxRDIsIDB4MTVEMSwgMHg3MUQzLCAweDM5QjAsCisgICAgMHg3MUQ0LCAweDE1RDMsIDB4NzFENSwgMHgwNTBGLCAweDcxRDYsIDB4MzlCMSwgMHg3MUQ3LCAweDE1Q0UsCisgICAgMHg3MURGLCAweDExNEUsIDB4NzFFMCwgMHgxNUQ1LCAweDcxRTUsIDB4MEFFOSwgMHg3MUU2LCAweDA4ODYsCisgICAgMHg3MUU3LCAweDE1RDcsIDB4NzFFQywgMHgxNUQ2LCAweDcxRUQsIDB4MDlFQSwgMHg3MUVFLCAweDEwRUUsCisgICAgMHg3MUY1LCAweDE1RDgsIDB4NzFGOSwgMHgxNURBLCAweDcxRkIsIDB4MTVDOSwgMHg3MUZDLCAweDE1RDksCisgICAgMHg3MUZFLCAweDIxNjAsIDB4NzFGRiwgMHgxNURCLCAweDcyMDAsIDB4MzlCMiwgMHg3MjA2LCAweDBEMzAsCisgICAgMHg3MjBELCAweDE1REMsIDB4NzIxMCwgMHgxNURELCAweDcyMUIsIDB4MTVERSwgMHg3MjFELCAweDM5QjMsCisgICAgMHg3MjI4LCAweDE1REYsIDB4NzIyQSwgMHgwQkZBLCAweDcyMkIsIDB4MzlCNCwgMHg3MjJDLCAweDE1RTEsCisgICAgMHg3MjJELCAweDE1RTAsIDB4NzIzMCwgMHgxNUUyLCAweDcyMzIsIDB4MTVFMywgMHg3MjM1LCAweDA5MEIsCisgICAgMHg3MjM2LCAweDBERDUsIDB4NzIzOCwgMHgzOUI1LCAweDcyM0EsIDB4MEVGOCwgMHg3MjNCLCAweDE1RTQsCisgICAgMHg3MjNDLCAweDE1RTUsIDB4NzIzRCwgMHgwQUQ4LCAweDcyM0UsIDB4MDhEMCwgMHg3MjNGLCAweDE1RTYsCisgICAgMHg3MjQwLCAweDE1RTcsIDB4NzI0MSwgMHgzOUI2LCAweDcyNDYsIDB4MTVFOCwgMHg3MjQ3LCAweDBFMjIsCisgICAgMHg3MjQ4LCAweDBENUIsIDB4NzI0QiwgMHgxNUU5LCAweDcyNEMsIDB4MEQwRCwgMHg3MjUyLCAweDBCQzksCisgICAgMHg3MjUzLCAweDM5QjcsIDB4NzI1NSwgMHgzOUI4LCAweDcyNTYsIDB4MzlCOSwgMHg3MjU4LCAweDE1RUEsCisgICAgMHg3MjU5LCAweDA1NjcsIDB4NzI1QiwgMHgwNjg3LCAweDcyNUMsIDB4MzlCQSwgMHg3MjVELCAweDBFRDIsCisgICAgMHg3MjVGLCAweDBFQzIsIDB4NzI2MSwgMHgwNTM0LCAweDcyNjIsIDB4MEZEQSwgMHg3MjY3LCAweDBFODAsCisgICAgMHg3MjY5LCAweDBERkEsIDB4NzI3MiwgMHgwQTVCLCAweDcyNzQsIDB4MTVFQiwgMHg3Mjc5LCAweDBDOUIsCisgICAgMHg3MjdELCAweDA3NTcsIDB4NzI3RSwgMHgxNUVDLCAweDcyODAsIDB4MDg0NCwgMHg3MjgxLCAweDE1RUUsCisgICAgMHg3MjgyLCAweDE1RUQsIDB4NzI4NywgMHgxNUVGLCAweDcyOEQsIDB4MzlCQiwgMHg3MjkyLCAweDE1RjAsCisgICAgMHg3Mjk2LCAweDE1RjEsIDB4NzJBMCwgMHgwNjU4LCAweDcyQTIsIDB4MTVGMiwgMHg3MkE3LCAweDE1RjMsCisgICAgMHg3MkFDLCAweDA3NTgsIDB4NzJBRCwgMHgzOUJDLCAweDcyQUYsIDB4MEQ1QywgMHg3MkIxLCAweDIxNjEsCisgICAgMHg3MkIyLCAweDE1RjUsIDB4NzJCNCwgMHgzOUJELCAweDcyQjYsIDB4MDlERCwgMHg3MkI5LCAweDE1RjQsCisgICAgMHg3MkJFLCAweDIxNjIsIDB4NzJDMCwgMHgzNDJCLCAweDcyQzIsIDB4MDZCMCwgMHg3MkMzLCAweDE1RjYsCisgICAgMHg3MkM0LCAweDE1RjgsIDB4NzJDNiwgMHgxNUY3LCAweDcyQzcsIDB4MzlCRSwgMHg3MkNFLCAweDE1RjksCisgICAgMHg3MkQwLCAweDA3ODUsIDB4NzJEMiwgMHgxNUZBLCAweDcyRDcsIDB4MDZFMSwgMHg3MkQ5LCAweDBBQzIsCisgICAgMHg3MkRCLCAweDA4MEYsIDB4NzJFMCwgMHgxNUZDLCAweDcyRTEsIDB4MTVGRCwgMHg3MkUyLCAweDE1RkIsCisgICAgMHg3MkU5LCAweDA5MTksIDB4NzJFQywgMHgwQ0EwLCAweDcyRUQsIDB4MDZCMSwgMHg3MkY3LCAweDE1RkYsCisgICAgMHg3MkY4LCAweDBCNkEsIDB4NzJGOSwgMHgxNUZFLCAweDcyRkIsIDB4MzlCRiwgMHg3MkZDLCAweDBGREIsCisgICAgMHg3MkZELCAweDBEMTgsIDB4NzMwNCwgMHgzOUMwLCAweDczMDUsIDB4MzlDMSwgMHg3MzBBLCAweDE2MDIsCisgICAgMHg3MzE2LCAweDE2MDQsIDB4NzMxNywgMHgxNjAxLCAweDczMUIsIDB4MEVFMCwgMHg3MzFDLCAweDE2MDMsCisgICAgMHg3MzFELCAweDE2MDUsIDB4NzMxRiwgMHgwRjhDLCAweDczMjQsIDB4MjE2MywgMHg3MzI1LCAweDE2MDksCisgICAgMHg3MzI4LCAweDM5QzIsIDB4NzMyOSwgMHgxNjA4LCAweDczMkEsIDB4MEJCNCwgMHg3MzJCLCAweDBDRTMsCisgICAgMHg3MzJFLCAweDA3NTksIDB4NzMyRiwgMHgxNjA3LCAweDczMzEsIDB4MzlDMywgMHg3MzM0LCAweDE2MDYsCisgICAgMHg3MzM2LCAweDBGMUIsIDB4NzMzNywgMHgwRjFDLCAweDczM0UsIDB4MTYwQSwgMHg3MzNGLCAweDA1MTAsCisgICAgMHg3MzQzLCAweDM5QzQsIDB4NzM0NCwgMHgwODA4LCAweDczNDUsIDB4MDhCMCwgMHg3MzRFLCAweDE2MEIsCisgICAgMHg3MzRGLCAweDE2MEMsIDB4NzM1NywgMHgxNjBFLCAweDczNjMsIDB4MDk0RCwgMHg3MzY4LCAweDE2MTAsCisgICAgMHg3MzZBLCAweDE2MEYsIDB4NzM2QywgMHgzOUM1LCAweDczNzAsIDB4MTYxMSwgMHg3MzcyLCAweDA1QUIsCisgICAgMHg3Mzc1LCAweDE2MTMsIDB4NzM3NywgMHgyMTY1LCAweDczNzgsIDB4MTYxMiwgMHg3MzdBLCAweDE2MTUsCisgICAgMHg3MzdCLCAweDE2MTQsIDB4NzM3QywgMHgzOUM2LCAweDczODMsIDB4MzlDNywgMHg3Mzg0LCAweDA3NzAsCisgICAgMHg3Mzg1LCAweDM5QzgsIDB4NzM4NiwgMHgzOUM5LCAweDczODcsIDB4MEY3MCwgMHg3Mzg5LCAweDA2QzQsCisgICAgMHg3MzhCLCAweDA1MjYsIDB4NzM5NSwgMHgzOUNBLCAweDczOTYsIDB4MDZFMiwgMHg3MzlFLCAweDM5Q0IsCisgICAgMHg3MzlGLCAweDM5Q0MsIDB4NzNBMCwgMHgzOUNELCAweDczQTYsIDB4MzlDRSwgMHg3M0E4LCAweDNDM0YsCisgICAgMHg3M0E5LCAweDA2MUQsIDB4NzNBQiwgMHgzOUNGLCAweDczQjIsIDB4MEZCMCwgMHg3M0IzLCAweDE2MTcsCisgICAgMHg3M0I1LCAweDM5RDAsIDB4NzNCNywgMHgzOUQxLCAweDczQkEsIDB4MzVFQSwgMHg3M0JCLCAweDE2MTksCisgICAgMHg3M0JDLCAweDM5RDIsIDB4NzNCRCwgMHgyMTY2LCAweDczQzAsIDB4MTYxQSwgMHg3M0MyLCAweDA1NTEsCisgICAgMHg3M0M4LCAweDE2MTYsIDB4NzNDOSwgMHgyMTY3LCAweDczQ0EsIDB4MDg4NywgMHg3M0NELCAweDBCREQsCisgICAgMHg3M0NFLCAweDE2MTgsIDB4NzNDRiwgMHgzOUQzLCAweDczRDIsIDB4MjE2QSwgMHg3M0Q2LCAweDIxNjgsCisgICAgMHg3M0Q5LCAweDM5RDQsIDB4NzNERSwgMHgxNjFELCAweDczRTAsIDB4MDkxQSwgMHg3M0UzLCAweDIxNjksCisgICAgMHg3M0U0LCAweDNDMzksIDB4NzNFNSwgMHgxNjFCLCAweDczRTksIDB4MzlENSwgMHg3M0VBLCAweDA3MTQsCisgICAgMHg3M0VELCAweDBENUQsIDB4NzNFRSwgMHgxNjFDLCAweDczRjEsIDB4MTYzNywgMHg3M0Y0LCAweDM5RDYsCisgICAgMHg3M0Y1LCAweDIxNkMsIDB4NzNGOCwgMHgxNjIyLCAweDczRkQsIDB4MzlENywgMHg3M0ZFLCAweDA3NzEsCisgICAgMHg3NDAzLCAweDA2N0YsIDB4NzQwNCwgMHgzOUQ4LCAweDc0MDUsIDB4MTYxRiwgMHg3NDA2LCAweDBGNjcsCisgICAgMHg3NDA3LCAweDIxNkIsIDB4NzQwOSwgMHgwRjc4LCAweDc0MEEsIDB4MzlEOSwgMHg3NDFBLCAweDM5REEsCisgICAgMHg3NDFCLCAweDM5REIsIDB4NzQyMSwgMHgzQzNBLCAweDc0MjIsIDB4MEI1NiwgMHg3NDI0LCAweDM5REMsCisgICAgMHg3NDI1LCAweDE2MjEsIDB4NzQyNiwgMHgyMTZELCAweDc0MjgsIDB4MzlERCwgMHg3NDI5LCAweDIxNkYsCisgICAgMHg3NDJBLCAweDIxNkUsIDB4NzQyQywgMHgzOURFLCAweDc0MkUsIDB4MjE3MCwgMHg3NDJGLCAweDM5REYsCisgICAgMHg3NDMwLCAweDM5RTAsIDB4NzQzMSwgMHgzOUUxLCAweDc0MzIsIDB4MTYyMywgMHg3NDMzLCAweDBGOUUsCisgICAgMHg3NDM0LCAweDA2Q0YsIDB4NzQzNSwgMHgwRDkwLCAweDc0MzYsIDB4MEQwMCwgMHg3NDM5LCAweDM5RTIsCisgICAgMHg3NDNBLCAweDE2MjQsIDB4NzQzRiwgMHgxNjI2LCAweDc0NDEsIDB4MTYyOSwgMHg3NDQ0LCAweDM5RTMsCisgICAgMHg3NDQ3LCAweDM5RTQsIDB4NzQ0QiwgMHgzOUU1LCAweDc0NEQsIDB4MzlFNiwgMHg3NDUxLCAweDM5RTcsCisgICAgMHg3NDU1LCAweDE2MjUsIDB4NzQ1NywgMHgzOUU4LCAweDc0NTksIDB4MTYyOCwgMHg3NDVBLCAweDA3OUUsCisgICAgMHg3NDVCLCAweDA0RUYsIDB4NzQ1QywgMHgxNjJBLCAweDc0NUUsIDB4MEEzNiwgMHg3NDVGLCAweDE2MjcsCisgICAgMHg3NDYwLCAweDBGQTQsIDB4NzQ2MiwgMHgyMTcxLCAweDc0NjMsIDB4MTYyRCwgMHg3NDY0LCAweDFEMzUsCisgICAgMHg3NDY2LCAweDM5RTksIDB4NzQ2OSwgMHgxNjJCLCAweDc0NkEsIDB4MTYyRSwgMHg3NDZCLCAweDM5RUEsCisgICAgMHg3NDZGLCAweDE2MjAsIDB4NzQ3MCwgMHgxNjJDLCAweDc0NzEsIDB4MzlFQiwgMHg3NDczLCAweDA4MkMsCisgICAgMHg3NDc2LCAweDE2MkYsIDB4NzQ3RSwgMHgxNjMwLCAweDc0ODAsIDB4MzlFQywgMHg3NDgzLCAweDBGNjgsCisgICAgMHg3NDg1LCAweDM5RUQsIDB4NzQ4NiwgMHgzOUVFLCAweDc0ODcsIDB4MzlFRiwgMHg3NDg5LCAweDIxNzIsCisgICAgMHg3NDhCLCAweDE2MzEsIDB4NzQ5MCwgMHgzOUYwLCAweDc0OTgsIDB4MzlGMSwgMHg3NDlDLCAweDM5RjIsCisgICAgMHg3NDlFLCAweDE2MzIsIDB4NzQ5RiwgMHgyMTczLCAweDc0QTAsIDB4MzlGMywgMHg3NEEyLCAweDE2MUUsCisgICAgMHg3NEEzLCAweDM5RjQsIDB4NzRBNywgMHgxNjMzLCAweDc0QTgsIDB4MzlGNSwgMHg3NEFCLCAweDM5RjYsCisgICAgMHg3NEIwLCAweDA2MDAsIDB4NzRCNSwgMHgzOUY3LCAweDc0QkQsIDB4MDhEMSwgMHg3NEJGLCAweDM5RjgsCisgICAgMHg3NEM4LCAweDM5RjksIDB4NzRDQSwgMHgxNjM0LCAweDc0Q0YsIDB4MTYzNSwgMHg3NEQ0LCAweDE2MzYsCisgICAgMHg3NERBLCAweDM5RkEsIDB4NzREQywgMHgwNERELCAweDc0REUsIDB4MzlGQiwgMHg3NEUwLCAweDE2MzgsCisgICAgMHg3NEUyLCAweDBEQUQsIDB4NzRFMywgMHgxNjM5LCAweDc0RTYsIDB4MDVFMCwgMHg3NEU3LCAweDE2M0EsCisgICAgMHg3NEU5LCAweDE2M0IsIDB4NzRFRSwgMHgxNjNDLCAweDc0RUYsIDB4Mzc1MCwgMHg3NEYwLCAweDE2M0UsCisgICAgMHg3NEYxLCAweDE2M0YsIDB4NzRGMiwgMHgxNjNELCAweDc0RjYsIDB4MERDNSwgMHg3NEY3LCAweDE2NDEsCisgICAgMHg3NEY4LCAweDE2NDAsIDB4NzUwMSwgMHgyMTc0LCAweDc1MDMsIDB4MTY0MywgMHg3NTA0LCAweDE2NDIsCisgICAgMHg3NTA1LCAweDE2NDQsIDB4NzUwQywgMHgxNjQ1LCAweDc1MEQsIDB4MTY0NywgMHg3NTBFLCAweDE2NDYsCisgICAgMHg3NTExLCAweDA4MEIsIDB4NzUxMywgMHgxNjQ5LCAweDc1MTUsIDB4MTY0OCwgMHg3NTE4LCAweDA2MDEsCisgICAgMHg3NTFBLCAweDBBMTksIDB4NzUxQywgMHgwQzM2LCAweDc1MUUsIDB4MTY0QSwgMHg3NTFGLCAweDBBNUMsCisgICAgMHg3NTIyLCAweDM1REUsIDB4NzUyMywgMHgwODg4LCAweDc1MjUsIDB4MDUxQiwgMHg3NTI2LCAweDE2NEIsCisgICAgMHg3NTI4LCAweDBGM0IsIDB4NzUyQiwgMHgwRTMzLCAweDc1MkMsIDB4MTY0QywgMHg3NTJGLCAweDIwRjIsCisgICAgMHg3NTMwLCAweDBDM0UsIDB4NzUzMSwgMHgwRjFELCAweDc1MzIsIDB4MDdENSwgMHg3NTMzLCAweDBBMDMsCisgICAgMHg3NTM3LCAweDBCODksIDB4NzUzOCwgMHgxMEM5LCAweDc1M0EsIDB4MEJDQSwgMHg3NTNCLCAweDA1NjgsCisgICAgMHg3NTNDLCAweDE2NEQsIDB4NzU0NCwgMHgxNjRFLCAweDc1NDYsIDB4MTY1MywgMHg3NTQ5LCAweDE2NTEsCisgICAgMHg3NTRBLCAweDE2NTAsIDB4NzU0QiwgMHgxM0M3LCAweDc1NEMsIDB4MDU4NCwgMHg3NTRELCAweDE2NEYsCisgICAgMHg3NTRFLCAweDM5RkMsIDB4NzU0RiwgMHgwNDlFLCAweDc1NTEsIDB4MEQzRSwgMHg3NTU0LCAweDBENUUsCisgICAgMHg3NTU5LCAweDBGNzksIDB4NzU1QSwgMHgxNjU0LCAweDc1NUIsIDB4MTY1MiwgMHg3NTVDLCAweDBCOUEsCisgICAgMHg3NTVELCAweDBBNEEsIDB4NzU2MCwgMHgwRDNGLCAweDc1NjIsIDB4MEQ5RiwgMHg3NTY0LCAweDE2NTYsCisgICAgMHg3NTY1LCAweDBGNzQsIDB4NzU2NiwgMHgwNzIzLCAweDc1NjcsIDB4MTY1NywgMHg3NTY5LCAweDE2NTUsCisgICAgMHg3NTZBLCAweDBENkEsIDB4NzU2QiwgMHgxNjU4LCAweDc1NkMsIDB4M0MzQiwgMHg3NTZELCAweDE2NTksCisgICAgMHg3NTZGLCAweDIxNzUsIDB4NzU3MCwgMHgwNDlGLCAweDc1NzMsIDB4MDlERSwgMHg3NTc0LCAweDE2NUUsCisgICAgMHg3NTc1LCAweDM3NTEsIDB4NzU3NiwgMHgxNjVCLCAweDc1NzcsIDB4MENDNSwgMHg3NTc4LCAweDE2NUEsCisgICAgMHg3NTc5LCAweDM5RkQsIDB4NzU3RiwgMHgwNjQwLCAweDc1ODEsIDB4MzlGRSwgMHg3NTgyLCAweDE2NjEsCisgICAgMHg3NTg2LCAweDE2NUMsIDB4NzU4NywgMHgxNjVELCAweDc1ODksIDB4MTY2MCwgMHg3NThBLCAweDE2NUYsCisgICAgMHg3NThCLCAweDBEOTcsIDB4NzU4RSwgMHgwQUM0LCAweDc1OEYsIDB4MEFDMywgMHg3NTkwLCAweDM5RkYsCisgICAgMHg3NTkxLCAweDA2NTksIDB4NzU5MiwgMHgzQTAwLCAweDc1OTMsIDB4M0EwMSwgMHg3NTk0LCAweDE2NjIsCisgICAgMHg3NTlBLCAweDE2NjMsIDB4NzU5RCwgMHgxNjY0LCAweDc1QTMsIDB4MTY2NiwgMHg3NUE1LCAweDE2NjUsCisgICAgMHg3NUFCLCAweDA0RjgsIDB4NzVCMSwgMHgxNjZFLCAweDc1QjIsIDB4MEQ3QywgMHg3NUIzLCAweDE2NjgsCisgICAgMHg3NUI0LCAweDNBMDIsIDB4NzVCNSwgMHgxNjZBLCAweDc1QjgsIDB4MTY2QywgMHg3NUI5LCAweDBBMDQsCisgICAgMHg3NUJDLCAweDE2NkQsIDB4NzVCRCwgMHgxNjZCLCAweDc1QkUsIDB4MDhFQywgMHg3NUMyLCAweDE2NjcsCisgICAgMHg3NUMzLCAweDE2NjksIDB4NzVDNSwgMHgwREI0LCAweDc1QzcsIDB4MDlCMSwgMHg3NUNBLCAweDE2NzAsCisgICAgMHg3NUNELCAweDE2NkYsIDB4NzVEMiwgMHgxNjcxLCAweDc1RDQsIDB4MDhEMiwgMHg3NUQ1LCAweDA4MUYsCisgICAgMHg3NUQ4LCAweDBDNzEsIDB4NzVEOSwgMHgxNjcyLCAweDc1REIsIDB4MEJFNywgMHg3NURFLCAweDE2NzQsCisgICAgMHg3NUUyLCAweDBGNjksIDB4NzVFMywgMHgxNjczLCAweDc1RTQsIDB4M0EwMywgMHg3NUU5LCAweDBBRUIsCisgICAgMHg3NUVDLCAweDM3NTIsIDB4NzVGMCwgMHgxNjc5LCAweDc1RjIsIDB4MTY3QiwgMHg3NUYzLCAweDE2N0MsCisgICAgMHg3NUY0LCAweDBCOTIsIDB4NzVGOSwgMHgzQTA0LCAweDc1RkEsIDB4MTY3QSwgMHg3NUZDLCAweDE2NzcsCisgICAgMHg3NUZFLCAweDE2NzUsIDB4NzVGRiwgMHgxNjc2LCAweDc2MDAsIDB4M0EwNSwgMHg3NjAxLCAweDE2NzgsCisgICAgMHg3NjA5LCAweDE2N0YsIDB4NzYwQSwgMHgzQTA2LCAweDc2MEIsIDB4MTY3RCwgMHg3NjBELCAweDE2N0UsCisgICAgMHg3NjE1LCAweDNBMDcsIDB4NzYxNiwgMHgzQTA4LCAweDc2MTksIDB4M0EwOSwgMHg3NjFFLCAweDNBMEEsCisgICAgMHg3NjFGLCAweDE2ODAsIDB4NzYyMCwgMHgxNjgyLCAweDc2MjEsIDB4MTY4MywgMHg3NjIyLCAweDE2ODQsCisgICAgMHg3NjI0LCAweDE2ODUsIDB4NzYyNiwgMHgxRTJELCAweDc2MjcsIDB4MTY4MSwgMHg3NjJELCAweDNBMEIsCisgICAgMHg3NjMwLCAweDE2ODcsIDB4NzYzNCwgMHgxNjg2LCAweDc2MzUsIDB4M0EwQywgMHg3NjNCLCAweDE2ODgsCisgICAgMHg3NjQyLCAweDBGOEQsIDB4NzY0MywgMHgzQTBELCAweDc2NDYsIDB4MTY4QiwgMHg3NjQ3LCAweDE2ODksCisgICAgMHg3NjQ4LCAweDE2OEEsIDB4NzY0QiwgMHgzQTBFLCAweDc2NEMsIDB4MDYxRSwgMHg3NjRFLCAweDM3NTMsCisgICAgMHg3NjUyLCAweDBGMEEsIDB4NzY1NiwgMHgwRTFBLCAweDc2NTgsIDB4MTY4RCwgMHg3NjVDLCAweDE2OEMsCisgICAgMHg3NjYxLCAweDE2OEUsIDB4NzY2MiwgMHgxNjhGLCAweDc2NjUsIDB4M0EwRiwgMHg3NjY3LCAweDE2OTMsCisgICAgMHg3NjY4LCAweDE2OTAsIDB4NzY2OSwgMHgxNjkxLCAweDc2NkEsIDB4MTY5MiwgMHg3NjZDLCAweDE2OTQsCisgICAgMHg3NjZELCAweDNBMTAsIDB4NzY2RiwgMHgzQTExLCAweDc2NzAsIDB4MTY5NSwgMHg3NjcxLCAweDNBMTIsCisgICAgMHg3NjcyLCAweDE2OTYsIDB4NzY3NCwgMHgzQTEzLCAweDc2NzYsIDB4MTY5NywgMHg3Njc4LCAweDE2OTgsCisgICAgMHg3NjdBLCAweDBENDMsIDB4NzY3QiwgMHgwQzRBLCAweDc2N0MsIDB4MTY5OSwgMHg3NjdELCAweDBEMjgsCisgICAgMHg3NjdFLCAweDBEQTYsIDB4NzY4MCwgMHgxNjlBLCAweDc2ODIsIDB4MjE3NiwgMHg3NjgzLCAweDE2OUIsCisgICAgMHg3Njg0LCAweDBDMjQsIDB4NzY4NiwgMHgwNTg1LCAweDc2ODcsIDB4MDdENiwgMHg3Njg4LCAweDE2OUMsCisgICAgMHg3NjhCLCAweDE2OUQsIDB4NzY4RSwgMHgxNjlFLCAweDc2OTAsIDB4MDg3NywgMHg3NjkzLCAweDE2QTAsCisgICAgMHg3Njk2LCAweDE2OUYsIDB4NzY5OSwgMHgxNkExLCAweDc2OUEsIDB4MTZBMiwgMHg3NjlCLCAweDIxNzksCisgICAgMHg3NjlDLCAweDIxNzcsIDB4NzY5RSwgMHgyMTc4LCAweDc2QTQsIDB4M0ExNCwgMHg3NkE1LCAweDNBMTUsCisgICAgMHg3NkE2LCAweDIxN0EsIDB4NzZBRSwgMHgwRDdELCAweDc2QjAsIDB4MTZBMywgMHg3NkI0LCAweDE2QTQsCisgICAgMHg3NkI3LCAweDFEMUMsIDB4NzZCOCwgMHgxNkE1LCAweDc2QjksIDB4MTZBNiwgMHg3NkJBLCAweDE2QTcsCisgICAgMHg3NkJGLCAweDA4N0MsIDB4NzZDMiwgMHgxNkE4LCAweDc2QzMsIDB4MEQwQywgMHg3NkM1LCAweDNBMTYsCisgICAgMHg3NkM2LCAweDBFOEQsIDB4NzZDOCwgMHgwNEYwLCAweDc2Q0EsIDB4MDRGOSwgMHg3NkNDLCAweDNBMTcsCisgICAgMHg3NkNELCAweDE2QTksIDB4NzZEMiwgMHgxNkFCLCAweDc2RDYsIDB4MTZBQSwgMHg3NkQ3LCAweDBDNkEsCisgICAgMHg3NkRCLCAweDBBNUQsIDB4NzZEQywgMHgxNEQ4LCAweDc2REUsIDB4MTZBQywgMHg3NkRGLCAweDBFQ0QsCisgICAgMHg3NkUxLCAweDE2QUQsIDB4NzZFMywgMHgwNjAyLCAweDc2RTQsIDB4MEQ2QiwgMHg3NkU1LCAweDE2QUUsCisgICAgMHg3NkU3LCAweDE2QUYsIDB4NzZFQSwgMHgxNkIwLCAweDc2RUMsIDB4M0ExOCwgMHg3NkVFLCAweDBFRTgsCisgICAgMHg3NkYyLCAweDBFRTEsIDB4NzZGNCwgMHgwQkRBLCAweDc2RjgsIDB4MEFFQywgMHg3NkZCLCAweDE2QjIsCisgICAgMHg3NkZDLCAweDNBMTksIDB4NzZGRSwgMHgwOTZDLCAweDc3MDEsIDB4MDlCMiwgMHg3NzA0LCAweDE2QjUsCisgICAgMHg3NzA3LCAweDE2QjQsIDB4NzcwOCwgMHgxNkIzLCAweDc3MDksIDB4MEQ5MSwgMHg3NzBCLCAweDA2MDMsCisgICAgMHg3NzBDLCAweDA3NUQsIDB4NzcxQiwgMHgxNkJCLCAweDc3MUUsIDB4MTZCOCwgMHg3NzFGLCAweDBBMDUsCisgICAgMHg3NzIwLCAweDBFQkUsIDB4NzcyNCwgMHgxNkI3LCAweDc3MjUsIDB4MTZCOSwgMHg3NzI2LCAweDE2QkEsCisgICAgMHg3NzI5LCAweDE2QjYsIDB4NzczNCwgMHgzQTFBLCAweDc3MzYsIDB4M0ExQiwgMHg3NzM3LCAweDE2QkMsCisgICAgMHg3NzM4LCAweDE2QkQsIDB4NzczQSwgMHgwQkNCLCAweDc3M0MsIDB4MDYxRiwgMHg3NzQwLCAweDBCQTMsCisgICAgMHg3NzQ2LCAweDIxN0MsIDB4Nzc0NywgMHgxNkJFLCAweDc3NUEsIDB4MTZCRiwgMHg3NzVCLCAweDE2QzIsCisgICAgMHg3NzVDLCAweDNBMUMsIDB4Nzc1RiwgMHgzQTFELCAweDc3NjAsIDB4M0ExRSwgMHg3NzYxLCAweDBBMkQsCisgICAgMHg3NzYyLCAweDFFQzUsIDB4Nzc2MywgMHgwQzlDLCAweDc3NjUsIDB4MTZDMywgMHg3NzY2LCAweDBFODEsCisgICAgMHg3NzY4LCAweDE2QzAsIDB4Nzc2QSwgMHgzNzU1LCAweDc3NkIsIDB4MTZDMSwgMHg3NzcyLCAweDNBMUYsCisgICAgMHg3Nzc5LCAweDE2QzYsIDB4Nzc3RCwgMHgzQTIwLCAweDc3N0UsIDB4MTZDNSwgMHg3NzdGLCAweDE2QzQsCisgICAgMHg3NzhCLCAweDE2QzgsIDB4Nzc4RSwgMHgxNkM3LCAweDc3OTEsIDB4MTZDOSwgMHg3Nzk1LCAweDNBMjEsCisgICAgMHg3NzlFLCAweDE2Q0IsIDB4NzdBMCwgMHgxNkNBLCAweDc3QTUsIDB4MEUxRCwgMHg3N0E5LCAweDM3NTYsCisgICAgMHg3N0FBLCAweDNBMjIsIDB4NzdBQywgMHgwOTYwLCAweDc3QUQsIDB4MEY4RSwgMHg3N0IwLCAweDE2Q0MsCisgICAgMHg3N0IzLCAweDBDOEYsIDB4NzdCNiwgMHgxNkNELCAweDc3QjksIDB4MTZDRSwgMHg3N0JCLCAweDE2RDIsCisgICAgMHg3N0JDLCAweDE2RDAsIDB4NzdCRCwgMHgxNkQxLCAweDc3QkYsIDB4MTZDRiwgMHg3N0M3LCAweDE2RDMsCisgICAgMHg3N0NELCAweDE2RDQsIDB4NzdENywgMHgxNkQ1LCAweDc3REEsIDB4MTZENiwgMHg3N0RCLCAweDBFQzMsCisgICAgMHg3N0RDLCAweDE2RDcsIDB4NzdFMiwgMHgwRUZDLCAweDc3RTMsIDB4MTZEOCwgMHg3N0U1LCAweDBCOEMsCisgICAgMHg3N0U2LCAweDNBMjMsIDB4NzdFNywgMHgwRDIwLCAweDc3RTksIDB4MDZFMywgMHg3N0VELCAweDBCNzksCisgICAgMHg3N0VFLCAweDE2RDksIDB4NzdFRiwgMHgwNkIyLCAweDc3RjAsIDB4M0EyNCwgMHg3N0YzLCAweDBBNzQsCisgICAgMHg3N0Y0LCAweDNBMjUsIDB4NzdGQywgMHgxNkRBLCAweDc4MDIsIDB4MDgyRCwgMHg3ODA2LCAweDNBMjYsCisgICAgMHg3ODBDLCAweDE2REIsIDB4NzgxMiwgMHgxNkRDLCAweDc4MTQsIDB4MDc1QSwgMHg3ODE1LCAweDA4NDUsCisgICAgMHg3ODIwLCAweDE2REUsIDB4NzgyMSwgMHgyMTdFLCAweDc4MjIsIDB4M0EyNywgMHg3ODI1LCAweDBDNTAsCisgICAgMHg3ODI2LCAweDA4NDYsIDB4NzgyNywgMHgwNjY4LCAweDc4MkQsIDB4M0EyOCwgMHg3ODJFLCAweDNBMjksCisgICAgMHg3ODMwLCAweDNBMkEsIDB4NzgzMiwgMHgwRTUyLCAweDc4MzQsIDB4MEQwMSwgMHg3ODM1LCAweDNBMkIsCisgICAgMHg3ODNBLCAweDBDNTEsIDB4NzgzRiwgMHgwN0VFLCAweDc4NDUsIDB4MTZFMCwgMHg3ODRFLCAweDIxN0YsCisgICAgMHg3ODRGLCAweDM0MUUsIDB4Nzg1MSwgMHgzQzNDLCAweDc4NUQsIDB4MDlCMywgMHg3ODY0LCAweDIxODAsCisgICAgMHg3ODY4LCAweDNBMkMsIDB4Nzg2QiwgMHgwRjdBLCAweDc4NkMsIDB4MDdENywgMHg3ODZGLCAweDA3NUIsCisgICAgMHg3ODcyLCAweDBEMzcsIDB4Nzg3NCwgMHgxNkUyLCAweDc4N0EsIDB4MjE4MSwgMHg3ODdDLCAweDE2RTQsCisgICAgMHg3ODgxLCAweDA3OUYsIDB4Nzg4NiwgMHgxNkUzLCAweDc4ODcsIDB4MEMxMiwgMHg3ODhDLCAweDE2RTYsCisgICAgMHg3ODhELCAweDA1OTUsIDB4Nzg4RSwgMHgxNkUxLCAweDc4OTEsIDB4MEQ3RSwgMHg3ODkzLCAweDA0RDIsCisgICAgMHg3ODk1LCAweDA4NUMsIDB4Nzg5NywgMHgwRkY4LCAweDc4OUEsIDB4MTZFNSwgMHg3ODlFLCAweDNBMkQsCisgICAgMHg3OEEzLCAweDE2RTcsIDB4NzhBNywgMHgwRTFCLCAweDc4QTksIDB4MEE3RCwgMHg3OEFBLCAweDE2RTksCisgICAgMHg3OEFGLCAweDE2RUEsIDB4NzhCNSwgMHgxNkU4LCAweDc4QkEsIDB4MDVBQywgMHg3OEJDLCAweDE2RjAsCisgICAgMHg3OEJFLCAweDE2RUYsIDB4NzhDMSwgMHgwOEQzLCAweDc4QzUsIDB4MTZGMSwgMHg3OEM2LCAweDE2RUMsCisgICAgMHg3OEM4LCAweDNBMkUsIDB4NzhDQSwgMHgxNkYyLCAweDc4Q0IsIDB4MTZFRCwgMHg3OENDLCAweDNBMkYsCisgICAgMHg3OENFLCAweDNBMzAsIDB4NzhEMCwgMHgwRDZDLCAweDc4RDEsIDB4MTZFQiwgMHg3OEQ0LCAweDE2RUUsCisgICAgMHg3OERBLCAweDE2RjUsIDB4NzhFMCwgMHgzQTMyLCAweDc4RTEsIDB4M0EzMywgMHg3OEU0LCAweDNBMzEsCisgICAgMHg3OEU3LCAweDE2RjQsIDB4NzhFOCwgMHgwRThGLCAweDc4RUMsIDB4MTZGMywgMHg3OEVGLCAweDA0QUYsCisgICAgMHg3OEYyLCAweDNBMzQsIDB4NzhGNCwgMHgxNkY3LCAweDc4RjcsIDB4M0EzNSwgMHg3OEZCLCAweDNBMzYsCisgICAgMHg3OEZELCAweDE2RjYsIDB4NzkwMSwgMHgwOUI0LCAweDc5MDcsIDB4MTZGOCwgMHg3OTBFLCAweDBBQzUsCisgICAgMHg3OTExLCAweDE2RkEsIDB4NzkxMiwgMHgxNkY5LCAweDc5MTksIDB4MTZGQiwgMHg3OTI2LCAweDE2REQsCisgICAgMHg3OTJBLCAweDE2REYsIDB4NzkyQiwgMHgxNkZELCAweDc5MkMsIDB4MTZGQywgMHg3OTMwLCAweDIxODIsCisgICAgMHg3OTMxLCAweDNBMzcsIDB4NzkzNCwgMHgzQTM4LCAweDc5M0EsIDB4MDhENCwgMHg3OTNCLCAweDNBMzksCisgICAgMHg3OTNDLCAweDBGQjEsIDB4NzkzRCwgMHgzQTNBLCAweDc5M0UsIDB4MDhGRSwgMHg3OTQwLCAweDE2RkUsCisgICAgMHg3OTQxLCAweDA3MEQsIDB4Nzk0NSwgMHgzQTNCLCAweDc5NDcsIDB4MDY1QSwgMHg3OTQ4LCAweDA2NDEsCisgICAgMHg3OTQ5LCAweDA4QjEsIDB4Nzk1MCwgMHgwRjFFLCAweDc5NTMsIDB4MTcwNCwgMHg3OTU1LCAweDE3MDMsCisgICAgMHg3OTU2LCAweDBBQzYsIDB4Nzk1NywgMHgxNzAwLCAweDc5NUEsIDB4MTcwMiwgMHg3OTVCLCAweDNBM0MsCisgICAgMHg3OTVDLCAweDNBM0QsIDB4Nzk1RCwgMHgwOTU1LCAweDc5NUUsIDB4MEEwNiwgMHg3OTVGLCAweDE3MDEsCisgICAgMHg3OTYwLCAweDE2RkYsIDB4Nzk2MiwgMHgwQ0UwLCAweDc5NjUsIDB4MDlCNSwgMHg3OTY4LCAweDBEQUUsCisgICAgMHg3OTZELCAweDA4NDcsIDB4Nzk3NywgMHgwQzcyLCAweDc5N0EsIDB4MTcwNSwgMHg3OTdGLCAweDE3MDYsCisgICAgMHg3OTgwLCAweDE3MUMsIDB4Nzk4MSwgMHgwNkQwLCAweDc5ODQsIDB4MEZFMywgMHg3OTg1LCAweDBBQjcsCisgICAgMHg3OThBLCAweDE3MDcsIDB4Nzk4QiwgMHgzQTNFLCAweDc5OEQsIDB4MDU1MiwgMHg3OThFLCAweDBDMTMsCisgICAgMHg3OThGLCAweDBERjEsIDB4Nzk5NCwgMHgyMTg2LCAweDc5OTYsIDB4M0EzRiwgMHg3OTk4LCAweDNBNDAsCisgICAgMHg3OTlCLCAweDIxODgsIDB4Nzk5RCwgMHgxNzA4LCAweDc5QTYsIDB4MDY5NCwgMHg3OUE3LCAweDE3MDksCisgICAgMHg3OUFBLCAweDE3MEIsIDB4NzlBRSwgMHgxNzBDLCAweDc5QjAsIDB4MENERiwgMHg3OUIxLCAweDFFNEUsCisgICAgMHg3OUIzLCAweDE3MEQsIDB4NzlCOCwgMHgzQTQxLCAweDc5QjksIDB4MTcwRSwgMHg3OUJBLCAweDE3MEYsCisgICAgMHg3OUJCLCAweDNBNDIsIDB4NzlCRCwgMHgwNkQxLCAweDc5QkUsIDB4MDU1MywgMHg3OUJGLCAweDBDOUQsCisgICAgMHg3OUMwLCAweDA5MzIsIDB4NzlDMSwgMHgwOEIyLCAweDc5QzksIDB4MTcxMCwgMHg3OUNBLCAweDNBNDMsCisgICAgMHg3OUNCLCAweDA5MzMsIDB4NzlEMSwgMHgwNTRBLCAweDc5RDIsIDB4MERCNSwgMHg3OUQ1LCAweDE3MTEsCisgICAgMHg3OUQ4LCAweDBEN0YsIDB4NzlEQSwgMHgzQTQ0LCAweDc5REYsIDB4MEFDNywgMHg3OUUxLCAweDE3MTQsCisgICAgMHg3OUUzLCAweDE3MTUsIDB4NzlFNCwgMHgwRDFGLCAweDc5RTYsIDB4MEEwNywgMHg3OUU3LCAweDE3MTIsCisgICAgMHg3OUU5LCAweDBCOUYsIDB4NzlFQywgMHgxNzEzLCAweDc5RjAsIDB4MDlCNiwgMHg3OUZCLCAweDA0QTAsCisgICAgMHg3QTAwLCAweDA2NDMsIDB4N0EwMywgMHgzQTQ1LCAweDdBMDUsIDB4MzYzMywgMHg3QTA4LCAweDE3MTYsCisgICAgMHg3QTA5LCAweDNBNDYsIDB4N0EwQiwgMHgwQzE0LCAweDdBMEQsIDB4MTcxNywgMHg3QTBFLCAweDBBNkIsCisgICAgMHg3QTExLCAweDNBNDcsIDB4N0ExNCwgMHgwRUI5LCAweDdBMTcsIDB4MEQ5NSwgMHg3QTE4LCAweDE3MTgsCisgICAgMHg3QTE5LCAweDE3MTksIDB4N0ExQSwgMHgwQjkzLCAweDdBMUMsIDB4MEY4RiwgMHg3QTFFLCAweDNBNDgsCisgICAgMHg3QTFGLCAweDE3MUIsIDB4N0EyMCwgMHgxNzFBLCAweDdBMkQsIDB4M0E0OSwgMHg3QTJFLCAweDA5MUIsCisgICAgMHg3QTMxLCAweDE3MUQsIDB4N0EzMiwgMHgwNEI0LCAweDdBMzcsIDB4MTcyMCwgMHg3QTM5LCAweDNBNEEsCisgICAgMHg3QTNCLCAweDE3MUUsIDB4N0EzQywgMHgwNTU0LCAweDdBM0QsIDB4MDcyNCwgMHg3QTNFLCAweDE3MUYsCisgICAgMHg3QTNGLCAweDA3RDgsIDB4N0E0MCwgMHgwODA0LCAweDdBNDIsIDB4MEUzNiwgMHg3QTQzLCAweDE3MjEsCisgICAgMHg3QTQ1LCAweDNBNEIsIDB4N0E0NiwgMHgwRTgyLCAweDdBNDksIDB4MTcyMywgMHg3QTRDLCAweDNBNEMsCisgICAgMHg3QTRELCAweDBBNzUsIDB4N0E0RSwgMHgwNEYxLCAweDdBNEYsIDB4MDUzQSwgMHg3QTUwLCAweDA0NzAsCisgICAgMHg3QTU3LCAweDE3MjIsIDB4N0E1RCwgMHgzQTRELCAweDdBNjAsIDB4M0E0RSwgMHg3QTYxLCAweDE3MjQsCisgICAgMHg3QTYyLCAweDE3MjUsIDB4N0E2MywgMHgwOURGLCAweDdBNjksIDB4MTcyNiwgMHg3QTZCLCAweDA1QUQsCisgICAgMHg3QTZELCAweDNBNEYsIDB4N0E3MCwgMHgxNzI4LCAweDdBNzQsIDB4MDc0MCwgMHg3QTc2LCAweDA2ODAsCisgICAgMHg3QTc4LCAweDNBNTAsIDB4N0E3OSwgMHgxNzI5LCAweDdBN0EsIDB4MDZFRCwgMHg3QTdELCAweDE3MkEsCisgICAgMHg3QTdGLCAweDBBQTAsIDB4N0E4MSwgMHgwQ0E1LCAweDdBODMsIDB4MEE4NCwgMHg3QTg0LCAweDA4NjUsCisgICAgMHg3QTg4LCAweDE3MkIsIDB4N0E5MiwgMHgwQkEwLCAweDdBOTMsIDB4MEFFRCwgMHg3QTk1LCAweDE3MkQsCisgICAgMHg3QTk2LCAweDE3MkYsIDB4N0E5NywgMHgxNzJDLCAweDdBOTgsIDB4MTcyRSwgMHg3QTlGLCAweDA2RjgsCisgICAgMHg3QUEwLCAweDNBNTEsIDB4N0FBMywgMHgzQTUyLCAweDdBQTksIDB4MTczMCwgMHg3QUFBLCAweDA2RkMsCisgICAgMHg3QUFFLCAweDA2ODEsIDB4N0FBRiwgMHgwRjNDLCAweDdBQjAsIDB4MTczMiwgMHg3QUIzLCAweDNBNTMsCisgICAgMHg3QUI2LCAweDE3MzMsIDB4N0FCQSwgMHgwNEQwLCAweDdBQkIsIDB4M0E1NCwgMHg3QUJDLCAweDNBNTUsCisgICAgMHg3QUJGLCAweDE3MzYsIDB4N0FDMywgMHgwNUQ0LCAweDdBQzQsIDB4MTczNSwgMHg3QUM1LCAweDE3MzQsCisgICAgMHg3QUM2LCAweDNBNTYsIDB4N0FDNywgMHgxNzM4LCAweDdBQzgsIDB4MTczMSwgMHg3QUNBLCAweDE3MzksCisgICAgMHg3QUNCLCAweDBGNzEsIDB4N0FDRCwgMHgxNzNBLCAweDdBQ0YsIDB4MTczQiwgMHg3QUQxLCAweDIxODksCisgICAgMHg3QUQyLCAweDExQzUsIDB4N0FEMywgMHgxNzNELCAweDdBRDUsIDB4MTczQywgMHg3QUQ5LCAweDE3M0UsCisgICAgMHg3QURBLCAweDE3M0YsIDB4N0FEQywgMHgwRjdELCAweDdBREQsIDB4MTc0MCwgMHg3QURGLCAweDFDMDgsCisgICAgMHg3QUUwLCAweDA5QjcsIDB4N0FFMSwgMHgxNzQxLCAweDdBRTIsIDB4MTc0MiwgMHg3QUUzLCAweDA5NjEsCisgICAgMHg3QUU1LCAweDBDOTAsIDB4N0FFNiwgMHgxNzQzLCAweDdBRTcsIDB4MjE4QSwgMHg3QUVBLCAweDBCNjYsCisgICAgMHg3QUVCLCAweDIxOEMsIDB4N0FFRCwgMHgxNzQ0LCAweDdBRUYsIDB4MEI3QSwgMHg3QUYwLCAweDE3NDUsCisgICAgMHg3QUY2LCAweDA2OUQsIDB4N0FGOCwgMHgxMDc2LCAweDdBRjksIDB4MEI5QiwgMHg3QUZBLCAweDA4REYsCisgICAgMHg3QUZGLCAweDA2MDQsIDB4N0IwMiwgMHgxNzQ2LCAweDdCMDQsIDB4MTc1MywgMHg3QjA2LCAweDE3NDksCisgICAgMHg3QjA3LCAweDNBNTcsIDB4N0IwOCwgMHgwNjgyLCAweDdCMEEsIDB4MTc0OCwgMHg3QjBCLCAweDE3NTUsCisgICAgMHg3QjBGLCAweDE3NDcsIDB4N0IxMSwgMHgwOUI4LCAweDdCMTQsIDB4M0E1OCwgMHg3QjE4LCAweDE3NEIsCisgICAgMHg3QjE5LCAweDE3NEMsIDB4N0IxQiwgMHgwQzI1LCAweDdCMUUsIDB4MTc0RCwgMHg3QjIwLCAweDA1QkMsCisgICAgMHg3QjI1LCAweDBBMjAsIDB4N0IyNiwgMHgwREQ2LCAweDdCMjcsIDB4M0E1OSwgMHg3QjI4LCAweDE3NEYsCisgICAgMHg3QjJDLCAweDBCNDgsIDB4N0IzMSwgMHgzQTVBLCAweDdCMzMsIDB4MTc0QSwgMHg3QjM1LCAweDE3NEUsCisgICAgMHg3QjM2LCAweDE3NTAsIDB4N0IzOSwgMHgwODZCLCAweDdCNDUsIDB4MTc1NywgMHg3QjQ2LCAweDBEQTAsCisgICAgMHg3QjQ3LCAweDNBNUIsIDB4N0I0OCwgMHgwRDNBLCAweDdCNDksIDB4MEM3MywgMHg3QjRCLCAweDA2RDIsCisgICAgMHg3QjRDLCAweDE3NTYsIDB4N0I0RCwgMHgxNzU0LCAweDdCNEUsIDB4M0E1QywgMHg3QjRGLCAweDBENDksCisgICAgMHg3QjUwLCAweDE3NTEsIDB4N0I1MSwgMHgwQjlDLCAweDdCNTIsIDB4MEM3NSwgMHg3QjUzLCAweDM3NUQsCisgICAgMHg3QjU0LCAweDBDNzQsIDB4N0I1NiwgMHgwODY2LCAweDdCNUQsIDB4MTc2OSwgMHg3QjYwLCAweDNBNUQsCisgICAgMHg3QjY1LCAweDE3NTksIDB4N0I2NywgMHgxNzVCLCAweDdCNjksIDB4M0E1RSwgMHg3QjZDLCAweDE3NUUsCisgICAgMHg3QjZELCAweDNBNUYsIDB4N0I2RSwgMHgxNzVGLCAweDdCNzAsIDB4MTc1QywgMHg3QjcxLCAweDE3NUQsCisgICAgMHg3QjcyLCAweDNBNjAsIDB4N0I3NCwgMHgxNzVBLCAweDdCNzUsIDB4MTc1OCwgMHg3QjdBLCAweDE3NTIsCisgICAgMHg3Qjg2LCAweDBFMUYsIDB4N0I4NywgMHgwNTU1LCAweDdCOEIsIDB4MTc2NiwgMHg3QjhELCAweDE3NjMsCisgICAgMHg3QjhGLCAweDE3NjgsIDB4N0I5MSwgMHgzQTYxLCAweDdCOTIsIDB4MTc2NywgMHg3Qjk0LCAweDBEMjksCisgICAgMHg3Qjk1LCAweDBFQjMsIDB4N0I5NywgMHgwODg5LCAweDdCOTgsIDB4MTc2MSwgMHg3Qjk5LCAweDE3NkEsCisgICAgMHg3QjlBLCAweDE3NjUsIDB4N0I5QywgMHgxNzY0LCAweDdCOUQsIDB4MTc2MCwgMHg3QjlFLCAweDIxOEQsCisgICAgMHg3QjlGLCAweDE3NjIsIDB4N0JBMSwgMHgwNjA1LCAweDdCQUEsIDB4MEI3QiwgMHg3QkFELCAweDBBQTEsCisgICAgMHg3QkFGLCAweDNBNjIsIDB4N0JCMSwgMHgwRDM2LCAweDdCQjQsIDB4MTc2RiwgMHg3QkI4LCAweDBEMzgsCisgICAgMHg3QkMwLCAweDBBODUsIDB4N0JDMSwgMHgxNzZDLCAweDdCQzQsIDB4MEQ2MywgMHg3QkM2LCAweDE3NzAsCisgICAgMHg3QkM3LCAweDBFMjMsIDB4N0JDOSwgMHgwQjk5LCAweDdCQ0IsIDB4MTc2QiwgMHg3QkNDLCAweDE3NkQsCisgICAgMHg3QkNGLCAweDE3NkUsIDB4N0JENywgMHgzQTYzLCAweDdCRDksIDB4M0E2NCwgMHg3QkRELCAweDE3NzEsCisgICAgMHg3QkUwLCAweDA4RjAsIDB4N0JFNCwgMHgwQzlFLCAweDdCRTUsIDB4MTc3NiwgMHg3QkU2LCAweDE3NzUsCisgICAgMHg3QkU5LCAweDE3NzIsIDB4N0JFRCwgMHgwRkRDLCAweDdCRjMsIDB4MTc3QiwgMHg3QkY2LCAweDE3N0YsCisgICAgMHg3QkY3LCAweDE3N0MsIDB4N0MwMCwgMHgxNzc4LCAweDdDMDcsIDB4MTc3OSwgMHg3QzBCLCAweDNBNjUsCisgICAgMHg3QzBELCAweDE3N0UsIDB4N0MwRiwgMHgzQTY2LCAweDdDMTEsIDB4MTc3MywgMHg3QzEyLCAweDEwRUEsCisgICAgMHg3QzEzLCAweDE3N0EsIDB4N0MxNCwgMHgxNzc0LCAweDdDMTcsIDB4MTc3RCwgMHg3QzFFLCAweDFFM0IsCisgICAgMHg3QzFGLCAweDE3ODMsIDB4N0MyMCwgMHgzQTY3LCAweDdDMjEsIDB4MDYwNiwgMHg3QzIzLCAweDE3ODAsCisgICAgMHg3QzI2LCAweDNBNjgsIDB4N0MyNywgMHgxNzgxLCAweDdDMkEsIDB4MTc4MiwgMHg3QzJCLCAweDE3ODUsCisgICAgMHg3QzMxLCAweDNBNjksIDB4N0MzNiwgMHgzQTZBLCAweDdDMzcsIDB4MTc4NCwgMHg3QzM4LCAweDBEOEEsCisgICAgMHg3QzNELCAweDE3ODYsIDB4N0MzRSwgMHgwRkM0LCAweDdDM0YsIDB4MEUzRCwgMHg3QzQwLCAweDE3OEIsCisgICAgMHg3QzQzLCAweDE3ODgsIDB4N0M0QywgMHgxNzg3LCAweDdDNEQsIDB4MEE3NiwgMHg3QzRGLCAweDE3OEEsCisgICAgMHg3QzUwLCAweDE3OEMsIDB4N0M1MSwgMHgzQTZCLCAweDdDNTQsIDB4MTc4OSwgMHg3QzU2LCAweDE3OTAsCisgICAgMHg3QzU4LCAweDE3OEQsIDB4N0M1OSwgMHgzQTZDLCAweDdDNUYsIDB4MTc4RSwgMHg3QzYwLCAweDE3NzcsCisgICAgMHg3QzY0LCAweDE3OEYsIDB4N0M2NSwgMHgxNzkxLCAweDdDNjcsIDB4M0E2RCwgMHg3QzZDLCAweDE3OTIsCisgICAgMHg3QzZFLCAweDNBNkUsIDB4N0M3MCwgMHgzQTZGLCAweDdDNzMsIDB4MEUxNiwgMHg3Qzc1LCAweDE3OTMsCisgICAgMHg3QzdCLCAweDM3MEUsIDB4N0M3RSwgMHgwRUVFLCAweDdDODEsIDB4MDZDNiwgMHg3QzgyLCAweDA2RkYsCisgICAgMHg3QzgzLCAweDE3OTQsIDB4N0M4OSwgMHgwRTA0LCAweDdDOEIsIDB4MEEyRSwgMHg3QzhELCAweDBFQkMsCisgICAgMHg3QzkwLCAweDE3OTUsIDB4N0M5MiwgMHgwRjdCLCAweDdDOTUsIDB4MEQyQSwgMHg3Qzk3LCAweDBBQzgsCisgICAgMHg3Qzk4LCAweDBDRUEsIDB4N0M5QiwgMHgwOTU3LCAweDdDOUYsIDB4MDQ4NCwgMHg3Q0ExLCAweDE3OUEsCisgICAgMHg3Q0EyLCAweDE3OTgsIDB4N0NBNCwgMHgxNzk2LCAweDdDQTUsIDB4MDVERCwgMHg3Q0E3LCAweDA5QjksCisgICAgMHg3Q0E4LCAweDE3OUIsIDB4N0NBQiwgMHgxNzk5LCAweDdDQUQsIDB4MTc5NywgMHg3Q0FFLCAweDE3OUYsCisgICAgMHg3Q0IxLCAweDE3OUUsIDB4N0NCMiwgMHgxNzlELCAweDdDQjMsIDB4MTc5QywgMHg3Q0I5LCAweDE3QTAsCisgICAgMHg3Q0JDLCAweDNBNzAsIDB4N0NCRCwgMHgxN0ExLCAweDdDQkUsIDB4MEE1RSwgMHg3Q0JGLCAweDNBNzEsCisgICAgMHg3Q0MwLCAweDE3QTIsIDB4N0NDMiwgMHgxN0E0LCAweDdDQzUsIDB4MTdBMywgMHg3Q0M4LCAweDNBNzIsCisgICAgMHg3Q0M5LCAweDNBNzMsIDB4N0NDQSwgMHgwNzg2LCAweDdDQ0UsIDB4MEFCQSwgMHg3Q0QyLCAweDE3QTYsCisgICAgMHg3Q0Q2LCAweDBDNzYsIDB4N0NENywgMHgzQTc0LCAweDdDRDgsIDB4MTdBNSwgMHg3Q0Q5LCAweDNBNzUsCisgICAgMHg3Q0RDLCAweDE3QTcsIDB4N0NERCwgMHgzQTc2LCAweDdDREUsIDB4MEUwNSwgMHg3Q0RGLCAweDBBRUUsCisgICAgMHg3Q0UwLCAweDA3RDksIDB4N0NFMiwgMHgxN0E4LCAweDdDRTcsIDB4MEY5MCwgMHg3Q0VCLCAweDNBNzcsCisgICAgMHg3Q0VGLCAweDE3QUEsIDB4N0NGMiwgMHgxN0FCLCAweDdDRjQsIDB4MTdBQywgMHg3Q0Y2LCAweDE3QUQsCisgICAgMHg3Q0Y4LCAweDA4QjMsIDB4N0NGQSwgMHgxN0FFLCAweDdDRkIsIDB4MDcyNSwgMHg3Q0ZFLCAweDA2ODQsCisgICAgMHg3RDAwLCAweDA2NDQsIDB4N0QwMiwgMHgxN0IwLCAweDdEMDQsIDB4MEVGRiwgMHg3RDA1LCAweDA3REEsCisgICAgMHg3RDA2LCAweDE3QUYsIDB4N0QwNywgMHgzQTc4LCAweDdEMDgsIDB4M0E3OSwgMHg3RDA5LCAweDNBN0EsCisgICAgMHg3RDBBLCAweDE3QjMsIDB4N0QwQiwgMHgwRUYyLCAweDdEMEQsIDB4MENGMiwgMHg3RDEwLCAweDBEQTUsCisgICAgMHg3RDEzLCAweDNBN0IsIDB4N0QxNCwgMHgwOTZELCAweDdEMTUsIDB4MTdCMiwgMHg3RDE3LCAweDA4RkYsCisgICAgMHg3RDE4LCAweDA3REIsIDB4N0QxOSwgMHgwOEI0LCAweDdEMUEsIDB4MDY4MywgMHg3RDFCLCAweDBFMDYsCisgICAgMHg3RDFDLCAweDE3QjEsIDB4N0QxRCwgMHgzQTdDLCAweDdEMjAsIDB4MEFDOSwgMHg3RDIxLCAweDBFNzAsCisgICAgMHg3RDIyLCAweDA4NjcsIDB4N0QyMywgMHgzQTdELCAweDdEMkIsIDB4MDhCNSwgMHg3RDJDLCAweDBCRjksCisgICAgMHg3RDJFLCAweDE3QjYsIDB4N0QyRiwgMHgwRkE3LCAweDdEMzAsIDB4MDg0OSwgMHg3RDMyLCAweDE3QjcsCisgICAgMHg3RDMzLCAweDBBMDgsIDB4N0QzNSwgMHgxN0I5LCAweDdEMzksIDB4MDlCQSwgMHg3RDNBLCAweDA4MjAsCisgICAgMHg3RDNGLCAweDE3QjgsIDB4N0Q0MSwgMHgzQTdFLCAweDdENDIsIDB4MDkzNCwgMHg3RDQzLCAweDA3NzIsCisgICAgMHg3RDQ0LCAweDBBQ0EsIDB4N0Q0NSwgMHgxN0I0LCAweDdENDYsIDB4MTdCQSwgMHg3RDQ4LCAweDIxOEYsCisgICAgMHg3RDRCLCAweDE3QjUsIDB4N0Q0QywgMHgwNzI2LCAweDdENEUsIDB4MTdCRCwgMHg3RDRGLCAweDE3QzEsCisgICAgMHg3RDUwLCAweDA3NDEsIDB4N0Q1MywgMHgzQTdGLCAweDdENTYsIDB4MTdCQywgMHg3RDU5LCAweDNBODAsCisgICAgMHg3RDVCLCAweDE3QzUsIDB4N0Q1QywgMHgyMTkwLCAweDdENUQsIDB4M0E4MSwgMHg3RDVFLCAweDA3REMsCisgICAgMHg3RDYxLCAweDBGNTcsIDB4N0Q2MiwgMHgwNDgwLCAweDdENjMsIDB4MTdDMiwgMHg3RDY2LCAweDA2ODUsCisgICAgMHg3RDY4LCAweDE3QkYsIDB4N0Q2RSwgMHgxN0MwLCAweDdENzEsIDB4MEM3NywgMHg3RDcyLCAweDE3QkUsCisgICAgMHg3RDczLCAweDE3QkIsIDB4N0Q3NSwgMHgwNTg2LCAweDdENzYsIDB4MEE4OCwgMHg3RDc5LCAweDA3NUMsCisgICAgMHg3RDdBLCAweDNBODIsIDB4N0Q3RCwgMHgxN0M3LCAweDdEODYsIDB4M0E4MywgMHg3RDg5LCAweDE3QzQsCisgICAgMHg3RDhCLCAweDNBODQsIDB4N0Q4QywgMHgzQTg1LCAweDdEOEYsIDB4MTdDNiwgMHg3RDkzLCAweDE3QzMsCisgICAgMHg3RDk5LCAweDA3MjcsIDB4N0Q5QSwgMHgwQjEzLCAweDdEOUIsIDB4MTdDOCwgMHg3RDlDLCAweDBBRjAsCisgICAgMHg3RDlGLCAweDE3RDUsIDB4N0RBMCwgMHgyMTkyLCAweDdEQTIsIDB4MTdEMSwgMHg3REEzLCAweDE3Q0IsCisgICAgMHg3REFCLCAweDE3Q0YsIDB4N0RBQywgMHgwOTI2LCAweDdEQUQsIDB4MDRBMSwgMHg3REFFLCAweDE3Q0EsCisgICAgMHg3REFGLCAweDE3RDIsIDB4N0RCMCwgMHgxN0Q2LCAweDdEQjEsIDB4MDdERCwgMHg3REIyLCAweDBFRTIsCisgICAgMHg3REI0LCAweDBCRjIsIDB4N0RCNSwgMHgxN0NDLCAweDdEQjcsIDB4MjE5MSwgMHg3REI4LCAweDE3RDQsCisgICAgMHg3REJBLCAweDE3QzksIDB4N0RCQiwgMHgwQjdDLCAweDdEQkQsIDB4MTdDRSwgMHg3REJFLCAweDA0ODEsCisgICAgMHg3REJGLCAweDBFRDYsIDB4N0RDNywgMHgxN0NELCAweDdEQ0EsIDB4MDZEMywgMHg3RENCLCAweDBEODAsCisgICAgMHg3RENDLCAweDNBODYsIDB4N0RDRiwgMHgwQUVGLCAweDdERDEsIDB4MEY5OCwgMHg3REQyLCAweDA5NzksCisgICAgMHg3REQ1LCAweDE3RkQsIDB4N0RENiwgMHgyMTkzLCAweDdERDgsIDB4MTdENywgMHg3RERBLCAweDBBQTIsCisgICAgMHg3RERDLCAweDE3RDMsIDB4N0RERCwgMHgxN0Q4LCAweDdEREUsIDB4MTdEQSwgMHg3REUwLCAweDBDMTUsCisgICAgMHg3REUxLCAweDE3REQsIDB4N0RFMywgMHgzNDBBLCAweDdERTQsIDB4MTdEOSwgMHg3REU4LCAweDBFMjQsCisgICAgMHg3REU5LCAweDA2MDcsIDB4N0RFQiwgMHgzQTg3LCAweDdERUMsIDB4MEVENywgMHg3REVGLCAweDA0QTIsCisgICAgMHg3REYxLCAweDNBODgsIDB4N0RGMiwgMHgxN0RDLCAweDdERjQsIDB4MEZDNSwgMHg3REY5LCAweDNBODksCisgICAgMHg3REZCLCAweDE3REIsIDB4N0UwMSwgMHgwNTExLCAweDdFMDQsIDB4MENDNCwgMHg3RTA1LCAweDE3REUsCisgICAgMHg3RTA4LCAweDNBOEEsIDB4N0UwOSwgMHgxN0U1LCAweDdFMEEsIDB4MTdERiwgMHg3RTBCLCAweDE3RTYsCisgICAgMHg3RTExLCAweDNBOEIsIDB4N0UxMiwgMHgxN0UyLCAweDdFMTUsIDB4M0E4QywgMHg3RTFCLCAweDBEMzEsCisgICAgMHg3RTFFLCAweDA4RjYsIDB4N0UxRiwgMHgxN0U0LCAweDdFMjAsIDB4M0E4RCwgMHg3RTIxLCAweDE3RTEsCisgICAgMHg3RTIyLCAweDE3RTcsIDB4N0UyMywgMHgxN0UwLCAweDdFMjYsIDB4MDk0RSwgMHg3RTJCLCAweDBFNTMsCisgICAgMHg3RTJFLCAweDA5NTYsIDB4N0UzMSwgMHgxN0UzLCAweDdFMzIsIDB4MTdFRiwgMHg3RTM1LCAweDE3RUIsCisgICAgMHg3RTM3LCAweDE3RUUsIDB4N0UzOSwgMHgxN0VDLCAweDdFM0EsIDB4MTdGMCwgMHg3RTNCLCAweDE3RUEsCisgICAgMHg3RTNELCAweDE3RDAsIDB4N0UzRSwgMHgwQTc3LCAweDdFNDEsIDB4MEQ1RiwgMHg3RTQzLCAweDE3RUQsCisgICAgMHg3RTQ2LCAweDE3RTgsIDB4N0U0NywgMHgzQThFLCAweDdFNDgsIDB4Mzc2NywgMHg3RTRBLCAweDBBQTMsCisgICAgMHg3RTRCLCAweDA3MjgsIDB4N0U0RCwgMHgwOTM1LCAweDdFNTIsIDB4MjE5NCwgMHg3RTU0LCAweDA5RUIsCisgICAgMHg3RTU1LCAweDBBQjgsIDB4N0U1NiwgMHgxN0YzLCAweDdFNTksIDB4MTdGNSwgMHg3RTVBLCAweDE3RjYsCisgICAgMHg3RTVELCAweDE3RjIsIDB4N0U1RSwgMHgxN0Y0LCAweDdFNjEsIDB4MUUxMSwgMHg3RTYyLCAweDNBOEYsCisgICAgMHg3RTY2LCAweDE3RTksIDB4N0U2NywgMHgxN0YxLCAweDdFNjksIDB4MTdGOSwgMHg3RTZBLCAweDE3RjgsCisgICAgMHg3RTZCLCAweDFERjcsIDB4N0U2RCwgMHgwRUE4LCAweDdFNkUsIDB4M0E5MCwgMHg3RTcwLCAweDA3MDEsCisgICAgMHg3RTczLCAweDNBOTEsIDB4N0U3OSwgMHgxN0Y3LCAweDdFN0IsIDB4MTdGQiwgMHg3RTdDLCAweDE3RkEsCisgICAgMHg3RTdELCAweDE3RkUsIDB4N0U3RiwgMHgxODAwLCAweDdFODIsIDB4MDg4QSwgMHg3RTgzLCAweDE3RkMsCisgICAgMHg3RTg4LCAweDE4MDEsIDB4N0U4OSwgMHgxODAyLCAweDdFOEEsIDB4MjBBNywgMHg3RThDLCAweDE4MDMsCisgICAgMHg3RThELCAweDNBOTIsIDB4N0U4RSwgMHgxODA5LCAweDdFOEYsIDB4MEMzNSwgMHg3RTkwLCAweDE4MDUsCisgICAgMHg3RTkxLCAweDNBOTMsIDB4N0U5MiwgMHgxODA0LCAweDdFOTMsIDB4MTgwNiwgMHg3RTk0LCAweDE4MDcsCisgICAgMHg3RTk2LCAweDE4MDgsIDB4N0U5OCwgMHgzQTk0LCAweDdFOUIsIDB4MTgwQSwgMHg3RTlDLCAweDE4MEIsCisgICAgMHg3RjM2LCAweDA2MDgsIDB4N0YzOCwgMHgxODBDLCAweDdGM0EsIDB4MTgwRCwgMHg3RjQ0LCAweDNBOTUsCisgICAgMHg3RjQ1LCAweDE4MEUsIDB4N0Y0NywgMHgyMTk1LCAweDdGNEMsIDB4MTgwRiwgMHg3RjRELCAweDE4MTAsCisgICAgMHg3RjRFLCAweDE4MTEsIDB4N0Y0RiwgMHgzQTk2LCAweDdGNTAsIDB4MTgxMiwgMHg3RjUxLCAweDE4MTMsCisgICAgMHg3RjUyLCAweDNBOTcsIDB4N0Y1MywgMHgzQTk4LCAweDdGNTQsIDB4MTgxNSwgMHg3RjU1LCAweDE4MTQsCisgICAgMHg3RjU4LCAweDE4MTYsIDB4N0Y1RiwgMHgxODE3LCAweDdGNjAsIDB4MTgxOCwgMHg3RjYxLCAweDNBOTksCisgICAgMHg3RjY3LCAweDE4MUIsIDB4N0Y2OCwgMHgxODE5LCAweDdGNjksIDB4MTgxQSwgMHg3RjZBLCAweDA4NTEsCisgICAgMHg3RjZCLCAweDA3MjksIDB4N0Y2RSwgMHgwQjk0LCAweDdGNzAsIDB4MEQ0NywgMHg3RjcyLCAweDA5N0EsCisgICAgMHg3Rjc1LCAweDBEMDMsIDB4N0Y3NywgMHgwRDgxLCAweDdGNzgsIDB4MTgxQywgMHg3Rjc5LCAweDEzMzYsCisgICAgMHg3RjgyLCAweDE4MUQsIDB4N0Y4MywgMHgxODFGLCAweDdGODUsIDB4MEY0RiwgMHg3Rjg2LCAweDE4MUUsCisgICAgMHg3Rjg3LCAweDE4MjEsIDB4N0Y4OCwgMHgxODIwLCAweDdGOEEsIDB4MEYzRCwgMHg3RjhDLCAweDE4MjIsCisgICAgMHg3RjhFLCAweDBEOTIsIDB4N0Y5MSwgMHgzQTlBLCAweDdGOTQsIDB4MTgyMywgMHg3RjlBLCAweDE4MjYsCisgICAgMHg3RjlELCAweDE4MjUsIDB4N0Y5RSwgMHgxODI0LCAweDdGQTEsIDB4MjE5NiwgMHg3RkEzLCAweDE4MjcsCisgICAgMHg3RkE0LCAweDA3MDgsIDB4N0ZBOCwgMHgwQUE0LCAweDdGQTksIDB4MDY1QiwgMHg3RkFFLCAweDE4MkIsCisgICAgMHg3RkFGLCAweDE4MjgsIDB4N0ZCMiwgMHgxODI5LCAweDdGQjYsIDB4MTgyQywgMHg3RkI4LCAweDE4MkQsCisgICAgMHg3RkI5LCAweDE4MkEsIDB4N0ZCRCwgMHgwNENCLCAweDdGQkYsIDB4M0E5QiwgMHg3RkMxLCAweDA1MjcsCisgICAgMHg3RkM1LCAweDE4MkYsIDB4N0ZDNiwgMHgxODMwLCAweDdGQ0EsIDB4MTgzMSwgMHg3RkNDLCAweDBGNEMsCisgICAgMHg3RkNFLCAweDNBOUMsIDB4N0ZEMiwgMHgwOTM2LCAweDdGRDQsIDB4MTgzMywgMHg3RkQ1LCAweDE4MzIsCisgICAgMHg3RkRGLCAweDNBOUQsIDB4N0ZFMCwgMHgwQTJGLCAweDdGRTEsIDB4MTgzNCwgMHg3RkU1LCAweDNBOUUsCisgICAgMHg3RkU2LCAweDE4MzUsIDB4N0ZFOSwgMHgxODM2LCAweDdGRUIsIDB4MDYyMSwgMHg3RkVDLCAweDNBOUYsCisgICAgMHg3RkVFLCAweDNBQTAsIDB4N0ZFRiwgMHgzQUExLCAweDdGRjAsIDB4MDYwOSwgMHg3RkYzLCAweDE4MzcsCisgICAgMHg3RkY5LCAweDE4MzgsIDB4N0ZGQSwgMHgzQUEyLCAweDdGRkIsIDB4MEU4QiwgMHg3RkZDLCAweDBGNEQsCisgICAgMHg4MDAwLCAweDBGM0UsIDB4ODAwMSwgMHgwRkRELCAweDgwMDIsIDB4MzcxMywgMHg4MDAzLCAweDA3REYsCisgICAgMHg4MDA0LCAweDE4M0IsIDB4ODAwNSwgMHgwOTAwLCAweDgwMDYsIDB4MTgzQSwgMHg4MDBCLCAweDE4M0MsCisgICAgMHg4MDBDLCAweDA4RDUsIDB4ODAwRSwgMHgzQUEzLCAweDgwMTAsIDB4MEIzMSwgMHg4MDExLCAweDNBQTQsCisgICAgMHg4MDEyLCAweDE4M0QsIDB4ODAxNCwgMHgzQUE1LCAweDgwMTUsIDB4MDdERSwgMHg4MDE3LCAweDBFRTMsCisgICAgMHg4MDE4LCAweDE4M0UsIDB4ODAxOSwgMHgxODNGLCAweDgwMUMsIDB4MTg0MCwgMHg4MDIxLCAweDE4NDEsCisgICAgMHg4MDI0LCAweDNBQTYsIDB4ODAyNiwgMHgzQUE3LCAweDgwMjgsIDB4MTg0MiwgMHg4MDMzLCAweDA4RDYsCisgICAgMHg4MDM2LCAweDBFRjksIDB4ODAzQSwgMHgzQUE4LCAweDgwM0IsIDB4MTg0NCwgMHg4MDNDLCAweDNBQTksCisgICAgMHg4MDNELCAweDBCN0QsIDB4ODAzRiwgMHgxODQzLCAweDgwNDYsIDB4MTg0NiwgMHg4MDRBLCAweDE4NDUsCisgICAgMHg4MDUyLCAweDE4NDcsIDB4ODA1NiwgMHgwQTVGLCAweDgwNTgsIDB4MTg0OCwgMHg4MDVBLCAweDE4NDksCisgICAgMHg4MDVFLCAweDBFMDksIDB4ODA1RiwgMHgxODRBLCAweDgwNjAsIDB4M0FBQSwgMHg4MDYxLCAweDBBRjEsCisgICAgMHg4MDYyLCAweDE4NEIsIDB4ODA2OCwgMHgxODRDLCAweDgwNkYsIDB4MEZDNiwgMHg4MDcwLCAweDE4NEYsCisgICAgMHg4MDcxLCAweDNBQUIsIDB4ODA3MiwgMHgxODRFLCAweDgwNzMsIDB4MTg0RCwgMHg4MDc0LCAweDBCQ0MsCisgICAgMHg4MDc1LCAweDNBQUMsIDB4ODA3NiwgMHgxODUwLCAweDgwNzcsIDB4MDlFQywgMHg4MDc5LCAweDE4NTEsCisgICAgMHg4MDdELCAweDE4NTIsIDB4ODA3RSwgMHgwRkRFLCAweDgwN0YsIDB4MTg1MywgMHg4MDg0LCAweDE4NTQsCisgICAgMHg4MDg1LCAweDE4NTYsIDB4ODA4NiwgMHgxODU1LCAweDgwODcsIDB4MEQzOSwgMHg4MDg5LCAweDBDRDEsCisgICAgMHg4MDhCLCAweDBGRTQsIDB4ODA4QywgMHgwRDNELCAweDgwOTMsIDB4MTg1OCwgMHg4MDk2LCAweDA5QkIsCisgICAgMHg4MDk4LCAweDBEOUMsIDB4ODA5QSwgMHgxODU5LCAweDgwOUIsIDB4MTg1NywgMHg4MDlELCAweDA2MEEsCisgICAgMHg4MDlFLCAweDNBQUQsIDB4ODBBMSwgMHgwNzg4LCAweDgwQTIsIDB4MDhCNiwgMHg4MEE1LCAweDBEODIsCisgICAgMHg4MEE2LCAweDNBQUUsIDB4ODBBOSwgMHgwNzVFLCAweDgwQUEsIDB4MEU3MSwgMHg4MEFCLCAweDNBQUYsCisgICAgMHg4MEFDLCAweDE4NUMsIDB4ODBBRCwgMHgxODVBLCAweDgwQUYsIDB4MDdFMCwgMHg4MEIxLCAweDA3RTEsCisgICAgMHg4MEIyLCAweDA0QUQsIDB4ODBCNCwgMHgwODU4LCAweDgwQkEsIDB4MEQwRiwgMHg4MEMzLCAweDA0QTMsCisgICAgMHg4MEM0LCAweDE4NjEsIDB4ODBDNiwgMHgwQjdFLCAweDgwQ0MsIDB4MEQwRSwgMHg4MENFLCAweDBCM0IsCisgICAgMHg4MEQ2LCAweDE4NjMsIDB4ODBENywgMHgzQUIwLCAweDgwRDgsIDB4M0FCMSwgMHg4MEQ5LCAweDE4NUYsCisgICAgMHg4MERBLCAweDE4NjIsIDB4ODBEQiwgMHgxODVELCAweDgwREQsIDB4MTg2MCwgMHg4MERFLCAweDBFNTQsCisgICAgMHg4MEUxLCAweDA3ODksIDB4ODBFNCwgMHgwNEMxLCAweDgwRTUsIDB4MTg1RSwgMHg4MEVGLCAweDE4NjUsCisgICAgMHg4MEYxLCAweDE4NjYsIDB4ODBGNCwgMHgwQzkxLCAweDgwRjgsIDB4MDZCMywgMHg4MEZDLCAweDE4NzEsCisgICAgMHg4MEZELCAweDBDRjMsIDB4ODEwMiwgMHgwOEI3LCAweDgxMDUsIDB4MDZCNCwgMHg4MTA2LCAweDBBNkMsCisgICAgMHg4MTA3LCAweDBGRUMsIDB4ODEwOCwgMHgwRUJBLCAweDgxMDksIDB4MTg2NCwgMHg4MTBBLCAweDBBNzgsCisgICAgMHg4MTE2LCAweDNBQjIsIDB4ODExOCwgMHgzQUIzLCAweDgxMUEsIDB4MDY2RCwgMHg4MTFCLCAweDE4NjcsCisgICAgMHg4MTIzLCAweDE4NjksIDB4ODEyOSwgMHgxODY4LCAweDgxMkIsIDB4MzY1OSwgMHg4MTJGLCAweDE4NkEsCisgICAgMHg4MTMxLCAweDBCNjQsIDB4ODEzMywgMHgwQ0Y0LCAweDgxMzksIDB4MEJDRCwgMHg4MTNBLCAweDNBQjQsCisgICAgMHg4MTNFLCAweDE4NkUsIDB4ODE0MSwgMHgzNzcyLCAweDgxNDYsIDB4MTg2RCwgMHg4MTRBLCAweDNBQjUsCisgICAgMHg4MTRCLCAweDE4NkIsIDB4ODE0QywgMHgzQUI2LCAweDgxNEUsIDB4MEExQiwgMHg4MTUwLCAweDBERDcsCisgICAgMHg4MTUxLCAweDE4NzAsIDB4ODE1MywgMHgxODZGLCAweDgxNTQsIDB4MDdFMiwgMHg4MTU1LCAweDBGRjksCisgICAgMHg4MTVGLCAweDE4ODAsIDB4ODE2NSwgMHgxODc0LCAweDgxNjYsIDB4MTg3NSwgMHg4MTZCLCAweDA5MUMsCisgICAgMHg4MTZFLCAweDE4NzMsIDB4ODE3MCwgMHgwODBBLCAweDgxNzEsIDB4MTg3MiwgMHg4MTc0LCAweDE4NzYsCisgICAgMHg4MTc4LCAweDBCQ0UsIDB4ODE3OSwgMHgwREYyLCAweDgxN0EsIDB4MEFBNSwgMHg4MTdGLCAweDBCM0MsCisgICAgMHg4MTgwLCAweDE4N0EsIDB4ODE4MSwgMHgzQUI3LCAweDgxODIsIDB4MTg3QiwgMHg4MTgzLCAweDE4NzcsCisgICAgMHg4MTg0LCAweDNBQjgsIDB4ODE4OCwgMHgxODc4LCAweDgxOEEsIDB4MTg3OSwgMHg4MThGLCAweDA3RTMsCisgICAgMHg4MTkzLCAweDE4ODEsIDB4ODE5NSwgMHgxODdELCAweDgxOUEsIDB4MEREOCwgMHg4MTlDLCAweDBFOUEsCisgICAgMHg4MTlELCAweDBEOUEsIDB4ODFBMCwgMHgxODdDLCAweDgxQTMsIDB4MTg3RiwgMHg4MUE0LCAweDE4N0UsCisgICAgMHg4MUE4LCAweDBFNzIsIDB4ODFBOSwgMHgxODgyLCAweDgxQjAsIDB4MTg4MywgMHg4MUIzLCAweDBBQjksCisgICAgMHg4MUI0LCAweDNBQjksIDB4ODFCNSwgMHgxODg0LCAweDgxQjgsIDB4MTg4NiwgMHg4MUJBLCAweDE4OEEsCisgICAgMHg4MUJELCAweDE4ODcsIDB4ODFCRSwgMHgxODg1LCAweDgxQkYsIDB4MENGNSwgMHg4MUMwLCAweDE4ODgsCisgICAgMHg4MUMyLCAweDE4ODksIDB4ODFDNiwgMHgwNTMyLCAweDgxQzgsIDB4MTg5MCwgMHg4MUM5LCAweDE4OEIsCisgICAgMHg4MUNELCAweDE4OEMsIDB4ODFDRiwgMHgzQUJBLCAweDgxRDEsIDB4MTg4RCwgMHg4MUQzLCAweDBCMDEsCisgICAgMHg4MUQ4LCAweDE4OEYsIDB4ODFEOSwgMHgxODhFLCAweDgxREEsIDB4MTg5MSwgMHg4MURGLCAweDE4OTIsCisgICAgMHg4MUUwLCAweDE4OTMsIDB4ODFFMywgMHgwQTA5LCAweDgxRTUsIDB4MDU2OSwgMHg4MUU3LCAweDE4OTQsCisgICAgMHg4MUU4LCAweDBGOUYsIDB4ODFFQSwgMHgwOEQ3LCAweDgxRUQsIDB4MDkzNywgMHg4MUYzLCAweDA4QjgsCisgICAgMHg4MUY0LCAweDBCOTUsIDB4ODFGOSwgMHgzQUJCLCAweDgxRkEsIDB4MTg5NSwgMHg4MUZCLCAweDE4OTYsCisgICAgMHg4MUZDLCAweDA0RDMsIDB4ODFGRSwgMHgxODk3LCAweDgyMDEsIDB4MTg5OCwgMHg4MjAyLCAweDE4OTksCisgICAgMHg4MjAzLCAweDNBQkMsIDB4ODIwNSwgMHgxODlBLCAweDgyMDcsIDB4MTg5QiwgMHg4MjA4LCAweDA2QjUsCisgICAgMHg4MjA5LCAweDEzQUYsIDB4ODIwQSwgMHgxODlDLCAweDgyMEMsIDB4MEE4OSwgMHg4MjBELCAweDE4OUQsCisgICAgMHg4MjBFLCAweDA4RjcsIDB4ODIxMCwgMHgxODlFLCAweDgyMTIsIDB4MTAwOSwgMHg4MjE2LCAweDE4OUYsCisgICAgMHg4MjE3LCAweDBFMkUsIDB4ODIxOCwgMHgwNjE4LCAweDgyMUIsIDB4MEFBNiwgMHg4MjFDLCAweDA5NjIsCisgICAgMHg4MjFFLCAweDBERTMsIDB4ODIxRiwgMHgwOTM4LCAweDgyMjEsIDB4M0FCRCwgMHg4MjI5LCAweDE4QTAsCisgICAgMHg4MjJBLCAweDA3RTQsIDB4ODIyQiwgMHgxOEExLCAweDgyMkMsIDB4MEQ2MCwgMHg4MjJFLCAweDE4QUYsCisgICAgMHg4MjMyLCAweDNBQkUsIDB4ODIzMywgMHgxOEEzLCAweDgyMzQsIDB4M0FCRiwgMHg4MjM1LCAweDBCMjksCisgICAgMHg4MjM2LCAweDBEMkIsIDB4ODIzNywgMHgwNzczLCAweDgyMzgsIDB4MThBMiwgMHg4MjM5LCAweDBBQTcsCisgICAgMHg4MjQwLCAweDE4QTQsIDB4ODI0NiwgMHgzQUMwLCAweDgyNDcsIDB4MEMxNiwgMHg4MjRCLCAweDNBQzEsCisgICAgMHg4MjRGLCAweDNBQzIsIDB4ODI1OCwgMHgxOEE2LCAweDgyNTksIDB4MThBNSwgMHg4MjVBLCAweDE4QTgsCisgICAgMHg4MjVELCAweDE4QTcsIDB4ODI1RiwgMHgxOEE5LCAweDgyNjIsIDB4MThBQiwgMHg4MjY0LCAweDE4QUEsCisgICAgMHg4MjY2LCAweDA2MEIsIDB4ODI2OCwgMHgxOEFDLCAweDgyNkEsIDB4MThBRCwgMHg4MjZCLCAweDE4QUUsCisgICAgMHg4MjZFLCAweDA4MjEsIDB4ODI2RiwgMHgwRjkxLCAweDgyNzEsIDB4MThCMCwgMHg4MjcyLCAweDA5RUQsCisgICAgMHg4Mjc2LCAweDA1MTIsIDB4ODI3NywgMHgxOEIxLCAweDgyNzgsIDB4MThCMiwgMHg4Mjc5LCAweDM3NzUsCisgICAgMHg4MjdFLCAweDE4QjMsIDB4ODI4QiwgMHgwNEI2LCAweDgyOEQsIDB4MThCNCwgMHg4MjhFLCAweDNBQzMsCisgICAgMHg4MjkyLCAweDE4QjUsIDB4ODI5OSwgMHgwREQ5LCAweDgyOUQsIDB4MDhGMywgMHg4MjlGLCAweDE4QjcsCisgICAgMHg4MkE1LCAweDA1ODcsIDB4ODJBNiwgMHgwNDc2LCAweDgyQUIsIDB4MThCNiwgMHg4MkFDLCAweDE4QjksCisgICAgMHg4MkFELCAweDBEMDQsIDB4ODJBRSwgMHgzQUM0LCAweDgyQUYsIDB4MEEwQSwgMHg4MkIxLCAweDA1NTYsCisgICAgMHg4MkIzLCAweDBFNTUsIDB4ODJCNywgMHgzQUM1LCAweDgyQjgsIDB4MDczMywgMHg4MkI5LCAweDA2RDQsCisgICAgMHg4MkJCLCAweDE4QjgsIDB4ODJCRCwgMHgwNTZBLCAweDgyQkUsIDB4M0FDNiwgMHg4MkM1LCAweDA1REYsCisgICAgMHg4MkM2LCAweDNBQzcsIDB4ODJEMSwgMHgwNTEzLCAweDgyRDIsIDB4MThCRCwgMHg4MkQzLCAweDBGQjIsCisgICAgMHg4MkQ0LCAweDBCM0QsIDB4ODJENywgMHgwREI2LCAweDgyRDksIDB4MThDOSwgMHg4MkRCLCAweDA1NTcsCisgICAgMHg4MkRDLCAweDE4QzcsIDB4ODJERSwgMHgxOEM1LCAweDgyREYsIDB4MThCQywgMHg4MkUxLCAweDE4QkEsCisgICAgMHg4MkUzLCAweDE4QkIsIDB4ODJFNSwgMHgwOTBGLCAweDgyRTYsIDB4MDZFNCwgMHg4MkU3LCAweDBCQjUsCisgICAgMHg4MkVCLCAweDBDQTksIDB4ODJGMSwgMHgwNEYzLCAweDgyRjMsIDB4MThCRiwgMHg4MkY0LCAweDE4QkUsCisgICAgMHg4MkY5LCAweDE4QzQsIDB4ODJGQSwgMHgxOEMwLCAweDgyRkIsIDB4MThDMywgMHg4MkZFLCAweDNBQzgsCisgICAgMHg4MzAxLCAweDIxOTgsIDB4ODMwMiwgMHgwRURDLCAweDgzMDMsIDB4MThDMiwgMHg4MzA0LCAweDA1NTgsCisgICAgMHg4MzA1LCAweDA1REIsIDB4ODMwNiwgMHgxOEM2LCAweDgzMDksIDB4MThDOCwgMHg4MzBFLCAweDA3MkEsCisgICAgMHg4MzE2LCAweDE4Q0MsIDB4ODMxNywgMHgxOEQ1LCAweDgzMTgsIDB4MThENiwgMHg4MzFDLCAweDA0NkYsCisgICAgMHg4MzIzLCAweDE4REQsIDB4ODMyOCwgMHgwNEI1LCAweDgzMkIsIDB4MThENCwgMHg4MzJGLCAweDE4RDMsCisgICAgMHg4MzMxLCAweDE4Q0UsIDB4ODMzMiwgMHgxOENELCAweDgzMzQsIDB4MThDQiwgMHg4MzM1LCAweDE4Q0EsCisgICAgMHg4MzM2LCAweDBCQTEsIDB4ODMzOCwgMHgwQjVCLCAweDgzMzksIDB4MThEMCwgMHg4MzQwLCAweDE4Q0YsCisgICAgMHg4MzQzLCAweDNBQzksIDB4ODM0NSwgMHgxOEQyLCAweDgzNDksIDB4MEFGMiwgMHg4MzRBLCAweDA3MkIsCisgICAgMHg4MzRGLCAweDA0RTMsIDB4ODM1MCwgMHgxOEQxLCAweDgzNTEsIDB4M0FDQSwgMHg4MzUyLCAweDA3RTUsCisgICAgMHg4MzU1LCAweDNBQ0IsIDB4ODM1OCwgMHgwQUYzLCAweDgzNjIsIDB4MjE5OSwgMHg4MzczLCAweDE4RTMsCisgICAgMHg4Mzc1LCAweDE4RTQsIDB4ODM3NywgMHgwNTU5LCAweDgzN0IsIDB4MDUyRSwgMHg4MzdDLCAweDE4RTEsCisgICAgMHg4MzdGLCAweDIxOUEsIDB4ODM4NSwgMHgxOEQ3LCAweDgzODYsIDB4M0FDQywgMHg4Mzg3LCAweDE4REYsCisgICAgMHg4Mzg5LCAweDE4RTYsIDB4ODM4QSwgMHgxOEUwLCAweDgzOEQsIDB4M0FDRCwgMHg4MzhFLCAweDE4REUsCisgICAgMHg4MzkyLCAweDNBQ0UsIDB4ODM5MywgMHgxOEMxLCAweDgzOTYsIDB4MThEQywgMHg4Mzk4LCAweDNBQ0YsCisgICAgMHg4MzlBLCAweDE4RDgsIDB4ODM5RSwgMHgwNjBDLCAweDgzOUYsIDB4MThEQSwgMHg4M0EwLCAweDE4RTUsCisgICAgMHg4M0EyLCAweDE4REIsIDB4ODNBOCwgMHgxOEU3LCAweDgzQTksIDB4M0FEMCwgMHg4M0FBLCAweDE4RDksCisgICAgMHg4M0FCLCAweDBEMzIsIDB4ODNCMSwgMHgwRjUzLCAweDgzQjUsIDB4MThFMiwgMHg4M0JELCAweDE4RjgsCisgICAgMHg4M0JGLCAweDNBRDEsIDB4ODNDMCwgMHgzQUQyLCAweDgzQzEsIDB4MThGMCwgMHg4M0M1LCAweDBBNDEsCisgICAgMHg4M0M3LCAweDIxOUIsIDB4ODNDQSwgMHgwNjYwLCAweDgzQ0MsIDB4MDZENSwgMHg4M0NFLCAweDE4RUIsCisgICAgMHg4M0QzLCAweDA1NUIsIDB4ODNENiwgMHgwOUJDLCAweDgzRDgsIDB4MThFRSwgMHg4M0RDLCAweDA4NEEsCisgICAgMHg4M0RGLCAweDBDNEIsIDB4ODNFMCwgMHgxOEYzLCAweDgzRTksIDB4MEUzRSwgMHg4M0VBLCAweDNBRDMsCisgICAgMHg4M0VCLCAweDE4RUEsIDB4ODNFRiwgMHgwNTVBLCAweDgzRjAsIDB4MDc4QSwgMHg4M0YxLCAweDBEOUIsCisgICAgMHg4M0YyLCAweDE4RjQsIDB4ODNGNCwgMHgxOEU4LCAweDgzRjYsIDB4MjE5QywgMHg4M0Y3LCAweDE4RjEsCisgICAgMHg4M0ZCLCAweDE4RkIsIDB4ODNGRCwgMHgxOEVDLCAweDg0MDMsIDB4MThFRCwgMHg4NDA0LCAweDBDOTIsCisgICAgMHg4NDA3LCAweDE4RjIsIDB4ODQwQSwgMHgxRTdGLCAweDg0MEIsIDB4MThFRiwgMHg4NDBDLCAweDBFNTYsCisgICAgMHg4NDBELCAweDE4RjUsIDB4ODQwRSwgMHgwNEE0LCAweDg0MEYsIDB4M0FENCwgMHg4NDExLCAweDNBRDUsCisgICAgMHg4NDEzLCAweDE4RTksIDB4ODQyMCwgMHgxOEY3LCAweDg0MjIsIDB4MThGNiwgMHg4NDI5LCAweDBEMjEsCisgICAgMHg4NDJBLCAweDE4RkQsIDB4ODQyQywgMHgxOTA4LCAweDg0MzEsIDB4MDVEQywgMHg4NDM1LCAweDE5MEIsCisgICAgMHg4NDM4LCAweDE4RjksIDB4ODQzQywgMHgxOEZFLCAweDg0M0QsIDB4MEY1OCwgMHg4NDQ2LCAweDE5MDcsCisgICAgMHg4NDQ4LCAweDIxOUQsIDB4ODQ0OSwgMHgwRjNGLCAweDg0NEEsIDB4M0FENiwgMHg4NDRFLCAweDBGNzIsCisgICAgMHg4NDU3LCAweDBCQjYsIDB4ODQ1QiwgMHgwNUM5LCAweDg0NjEsIDB4MERFNCwgMHg4NDYyLCAweDE5MEQsCisgICAgMHg4NDYzLCAweDBDNzksIDB4ODQ2NiwgMHgwNDc1LCAweDg0NjksIDB4MTkwNiwgMHg4NDZCLCAweDE5MDIsCisgICAgMHg4NDZDLCAweDBBRjQsIDB4ODQ2RCwgMHgxOEZDLCAweDg0NkUsIDB4MTkwNCwgMHg4NDZGLCAweDE5MDksCisgICAgMHg4NDcxLCAweDBDRTIsIDB4ODQ3NSwgMHgwNDZFLCAweDg0NzYsIDB4M0FENywgMHg4NDc3LCAweDE5MDEsCisgICAgMHg4NDc5LCAweDE5MEEsIDB4ODQ3QSwgMHgwREVBLCAweDg0ODIsIDB4MTkwNSwgMHg4NDg0LCAweDE5MDAsCisgICAgMHg4NDhCLCAweDA5QkQsIDB4ODQ5MCwgMHgwOTM5LCAweDg0OTQsIDB4MDhEOCwgMHg4NDk5LCAweDBFRTQsCisgICAgMHg4NDlDLCAweDBEQjksIDB4ODQ5RiwgMHgxOTEwLCAweDg0QTEsIDB4MTkxOSwgMHg4NEE4LCAweDNBRDgsCisgICAgMHg4NEFELCAweDE5MDMsIDB4ODRBRiwgMHgzQUQ5LCAweDg0QjIsIDB4MDVENSwgMHg4NEI0LCAweDIxOUUsCisgICAgMHg4NEI4LCAweDA5RTAsIDB4ODRCOSwgMHgxOTBFLCAweDg0QkIsIDB4MTkxMywgMHg4NEJDLCAweDBBRjUsCisgICAgMHg4NEJGLCAweDE5MEYsIDB4ODRDMCwgMHgzQURBLCAweDg0QzEsIDB4MTkxNiwgMHg4NEMyLCAweDNBREIsCisgICAgMHg4NEM0LCAweDBCOUQsIDB4ODRDNiwgMHgxOTE3LCAweDg0QzksIDB4MEY0MCwgMHg4NENBLCAweDE5MEMsCisgICAgMHg4NENCLCAweDA1OTYsIDB4ODRDRCwgMHgxOTEyLCAweDg0RDAsIDB4MTkxNSwgMHg4NEQxLCAweDBFQjgsCisgICAgMHg4NEQ2LCAweDE5MTgsIDB4ODREOSwgMHgxOTExLCAweDg0REEsIDB4MTkxNCwgMHg4NERDLCAweDIwQUIsCisgICAgMHg4NEVDLCAweDBFNTcsIDB4ODRFRSwgMHgwRkM3LCAweDg0RjAsIDB4M0FEQywgMHg4NEY0LCAweDE5MUMsCisgICAgMHg4NEZDLCAweDE5MjMsIDB4ODRGRCwgMHgzQURELCAweDg0RkYsIDB4MTkxQiwgMHg4NTAwLCAweDA4RUYsCisgICAgMHg4NTA2LCAweDE4RkEsIDB4ODUwQywgMHgzQURFLCAweDg1MTEsIDB4MEUxRSwgMHg4NTEzLCAweDBFQUUsCisgICAgMHg4NTE0LCAweDE5MjIsIDB4ODUxNSwgMHgxOTIxLCAweDg1MTcsIDB4MTkxRCwgMHg4NTE4LCAweDE5MUUsCisgICAgMHg4NTFBLCAweDA0RDgsIDB4ODUxRiwgMHgxOTIwLCAweDg1MjEsIDB4MTkxQSwgMHg4NTIzLCAweDFFMUEsCisgICAgMHg4NTI2LCAweDBCRjEsIDB4ODUyQywgMHgxOTFGLCAweDg1MkQsIDB4MDRDMiwgMHg4NTM0LCAweDNBREYsCisgICAgMHg4NTM1LCAweDBCMDIsIDB4ODUzRCwgMHgwRTEzLCAweDg1M0UsIDB4MUVCNSwgMHg4NTQwLCAweDE5MjQsCisgICAgMHg4NTQxLCAweDE5MjgsIDB4ODU0MywgMHgwRDZELCAweDg1NDgsIDB4MTkyNywgMHg4NTQ5LCAweDA5QkUsCisgICAgMHg4NTRBLCAweDA4RjUsIDB4ODU0QiwgMHgxOTJBLCAweDg1NEUsIDB4MDZCNiwgMHg4NTUzLCAweDIxOUYsCisgICAgMHg4NTU1LCAweDE5MkIsIDB4ODU1NywgMHgwREVCLCAweDg1NTgsIDB4MTkyNiwgMHg4NTU5LCAweDIxQTAsCisgICAgMHg4NTVBLCAweDE4RkYsIDB4ODU1RSwgMHgzQUUwLCAweDg1NjMsIDB4MTkyNSwgMHg4NTY4LCAweDBGRjUsCisgICAgMHg4NTY5LCAweDBDN0EsIDB4ODU2QSwgMHgwREU1LCAweDg1NkIsIDB4MjFBMSwgMHg4NTZELCAweDE5MzIsCisgICAgMHg4NTc3LCAweDE5MzgsIDB4ODU3RSwgMHgxOTM5LCAweDg1ODAsIDB4MTkyQywgMHg4NTg0LCAweDBEMkMsCisgICAgMHg4NTg3LCAweDE5MzYsIDB4ODU4OCwgMHgxOTJFLCAweDg1OEEsIDB4MTkzMCwgMHg4NThGLCAweDNBRTEsCisgICAgMHg4NTkwLCAweDE5M0EsIDB4ODU5MSwgMHgxOTJGLCAweDg1OTQsIDB4MTkzMywgMHg4NTk3LCAweDA1MTQsCisgICAgMHg4NTk5LCAweDBDQkQsIDB4ODU5QiwgMHgxOTM0LCAweDg1OUMsIDB4MTkzNywgMHg4NUE0LCAweDE5MkQsCisgICAgMHg4NUE2LCAweDBBQTgsIDB4ODVBOCwgMHgxOTMxLCAweDg1QTksIDB4MDg3NSwgMHg4NUFBLCAweDBBMEIsCisgICAgMHg4NUFCLCAweDA3MDYsIDB4ODVBQywgMHgwRjAwLCAweDg1QUQsIDB4M0FFNCwgMHg4NUFFLCAweDBGMDUsCisgICAgMHg4NUFGLCAweDA5N0MsIDB4ODVCMCwgMHgyMUEzLCAweDg1QjcsIDB4M0FFMiwgMHg4NUI5LCAweDE5M0UsCisgICAgMHg4NUJBLCAweDE5M0MsIDB4ODVDMSwgMHgwRkY0LCAweDg1QzksIDB4MTkzQiwgMHg4NUNELCAweDBGNUYsCisgICAgMHg4NUNFLCAweDNBRTMsIDB4ODVDRiwgMHgxOTNELCAweDg1RDAsIDB4MTkzRiwgMHg4NUQ1LCAweDE5NDAsCisgICAgMHg4NURDLCAweDE5NDMsIDB4ODVERCwgMHgxOTQxLCAweDg1RTQsIDB4MEM3QiwgMHg4NUU1LCAweDE5NDIsCisgICAgMHg4NUU5LCAweDBENjEsIDB4ODVFQSwgMHgxOTM1LCAweDg1RjQsIDB4Mzc4MCwgMHg4NUY3LCAweDA5N0QsCisgICAgMHg4NUY5LCAweDE5NDQsIDB4ODVGQSwgMHgxOTQ5LCAweDg1RkIsIDB4MEFGNiwgMHg4NUZFLCAweDE5NDgsCisgICAgMHg4NjAyLCAweDE5MjksIDB4ODYwNiwgMHgxOTRBLCAweDg2MDcsIDB4MEFDQiwgMHg4NjBBLCAweDE5NDUsCisgICAgMHg4NjBCLCAweDE5NDcsIDB4ODYxMiwgMHgzQUU1LCAweDg2MTMsIDB4MTk0NiwgMHg4NjE2LCAweDE0RDAsCisgICAgMHg4NjE3LCAweDE0QzEsIDB4ODYxQSwgMHgxOTRDLCAweDg2MjIsIDB4MTk0QiwgMHg4NjI5LCAweDNBRTYsCisgICAgMHg4NjJELCAweDBGNjAsIDB4ODYyRiwgMHgxNkIxLCAweDg2MzAsIDB4MTk0RCwgMHg4NjNGLCAweDE5NEUsCisgICAgMHg4NjRELCAweDE5NEYsIDB4ODY0RSwgMHgwNzhCLCAweDg2NTAsIDB4MDY2RSwgMHg4NjUyLCAweDNBRTcsCisgICAgMHg4NjU0LCAweDE5NTEsIDB4ODY1NSwgMHgxMDk0LCAweDg2NUEsIDB4MDY4RiwgMHg4NjVCLCAweDM0MTgsCisgICAgMHg4NjVDLCAweDBGODIsIDB4ODY1RSwgMHgwNkVCLCAweDg2NUYsIDB4MTk1MiwgMHg4NjYzLCAweDNBRTgsCisgICAgMHg4NjY3LCAweDE5NTMsIDB4ODY2QiwgMHgwQkFDLCAweDg2NkMsIDB4M0FFOSwgMHg4NjZGLCAweDNBRUEsCisgICAgMHg4NjcxLCAweDE5NTQsIDB4ODY3OSwgMHgwQ0QyLCAweDg2N0EsIDB4M0FFQiwgMHg4NjdCLCAweDA0N0UsCisgICAgMHg4NjdELCAweDM3ODYsIDB4ODY4QSwgMHgwNTYzLCAweDg2OEIsIDB4MTk1OSwgMHg4NjhDLCAweDE5NUEsCisgICAgMHg4NjhELCAweDNBRUMsIDB4ODY5MSwgMHgzQUVELCAweDg2OTMsIDB4MTk1NSwgMHg4Njk1LCAweDA4OEIsCisgICAgMHg4Njk4LCAweDNBRUUsIDB4ODZBMywgMHgxOTU2LCAweDg2QTQsIDB4MENGOCwgMHg4NkE3LCAweDNBRUYsCisgICAgMHg4NkE4LCAweDNBRjAsIDB4ODZBOSwgMHgxOTU3LCAweDg2QUEsIDB4MTk1OCwgMHg4NkFCLCAweDE5NjIsCisgICAgMHg4NkFGLCAweDE5NUMsIDB4ODZCMCwgMHgxOTVGLCAweDg2QjYsIDB4MTk1QiwgMHg4NkM0LCAweDE5NUQsCisgICAgMHg4NkM2LCAweDE5NUUsIDB4ODZDNywgMHgwOTA0LCAweDg2QzksIDB4MTk2MCwgMHg4NkNCLCAweDBCN0YsCisgICAgMHg4NkNELCAweDA3MkMsIDB4ODZDRSwgMHgwNUEwLCAweDg2RDQsIDB4MTk2MywgMHg4NkQ5LCAweDA1OUQsCisgICAgMHg4NkRCLCAweDE5NjgsIDB4ODZERSwgMHgxOTY0LCAweDg2REYsIDB4MTk2NywgMHg4NkU0LCAweDBENEUsCisgICAgMHg4NkU5LCAweDE5NjUsIDB4ODZFQywgMHgxOTY2LCAweDg2RUQsIDB4MERCQSwgMHg4NkVFLCAweDBENkUsCisgICAgMHg4NkVGLCAweDE5NjksIDB4ODZGOCwgMHgwQjVELCAweDg2RjksIDB4MTk3MywgMHg4NkZBLCAweDNBRjEsCisgICAgMHg4NkZCLCAweDE5NkYsIDB4ODZGRCwgMHgzQUYyLCAweDg2RkUsIDB4MDU2QiwgMHg4NzAwLCAweDE5NkQsCisgICAgMHg4NzAyLCAweDBFNTgsIDB4ODcwMywgMHgxOTZFLCAweDg3MDYsIDB4MTk2QiwgMHg4NzA4LCAweDE5NkMsCisgICAgMHg4NzA5LCAweDE5NzEsIDB4ODcwQSwgMHgxOTc0LCAweDg3MEIsIDB4M0FGMywgMHg4NzBELCAweDE5NzIsCisgICAgMHg4NzExLCAweDE5NzAsIDB4ODcxMiwgMHgxOTZBLCAweDg3MTMsIDB4M0FGNCwgMHg4NzE4LCAweDBCOTYsCisgICAgMHg4NzE5LCAweDNBRjUsIDB4ODcxQSwgMHgxOTdCLCAweDg3MUMsIDB4MEVCNiwgMHg4NzFFLCAweDNBRjYsCisgICAgMHg4NzI1LCAweDE5NzksIDB4ODcyOCwgMHgzQUY3LCAweDg3MjksIDB4MTk3QSwgMHg4NzM0LCAweDE5NzUsCisgICAgMHg4NzM3LCAweDE5NzcsIDB4ODczQiwgMHgxOTc4LCAweDg3M0UsIDB4M0FGOCwgMHg4NzNGLCAweDE5NzYsCisgICAgMHg4NzQ5LCAweDBBOEEsIDB4ODc0QiwgMHgwRkRGLCAweDg3NEMsIDB4MTk3RiwgMHg4NzRFLCAweDE5ODAsCisgICAgMHg4NzUzLCAweDE5ODYsIDB4ODc1NSwgMHgwOUYwLCAweDg3NTcsIDB4MTk4MiwgMHg4NzU5LCAweDE5ODUsCisgICAgMHg4NzVGLCAweDE5N0QsIDB4ODc2MCwgMHgxOTdDLCAweDg3NjMsIDB4MTk4NywgMHg4NzY2LCAweDA1NUMsCisgICAgMHg4NzY4LCAweDE5ODMsIDB4ODc2QSwgMHgxOTg4LCAweDg3NkUsIDB4MTk4NCwgMHg4NzcxLCAweDNBRjksCisgICAgMHg4Nzc0LCAweDE5ODEsIDB4ODc3NiwgMHgwQkNGLCAweDg3NzgsIDB4MTk3RSwgMHg4NzdGLCAweDBEMUUsCisgICAgMHg4NzgyLCAweDE5OEMsIDB4ODc4OCwgMHgzQUZBLCAweDg3OEQsIDB4MEYyNSwgMHg4Nzk5LCAweDNBRkIsCisgICAgMHg4NzlGLCAweDE5OEIsIDB4ODdBMiwgMHgxOThBLCAweDg3QUIsIDB4MTk5MywgMHg4N0FDLCAweDNBRkMsCisgICAgMHg4N0FELCAweDNBRkQsIDB4ODdBRiwgMHgxOThELCAweDg3QjMsIDB4MTk5NSwgMHg4N0I1LCAweDNBRkUsCisgICAgMHg4N0JBLCAweDBGNTAsIDB4ODdCQiwgMHgxOTk4LCAweDg3QkQsIDB4MTk4RiwgMHg4N0MwLCAweDE5OTAsCisgICAgMHg4N0M0LCAweDE5OTQsIDB4ODdDNiwgMHgxOTk3LCAweDg3QzcsIDB4MTk5NiwgMHg4N0NCLCAweDE5OEUsCisgICAgMHg4N0QwLCAweDE5OTEsIDB4ODdEMiwgMHgxOUEyLCAweDg3RDYsIDB4M0FGRiwgMHg4N0UwLCAweDE5OUIsCisgICAgMHg4N0VCLCAweDNCMDAsIDB4ODdFQywgMHgxRTIzLCAweDg3RUQsIDB4M0IwMSwgMHg4N0VGLCAweDE5OTksCisgICAgMHg4N0YyLCAweDE5OUEsIDB4ODdGNSwgMHgzQzNELCAweDg3RjYsIDB4MTk5RiwgMHg4N0Y3LCAweDE5QTAsCisgICAgMHg4N0Y5LCAweDA1ODgsIDB4ODdGQiwgMHgwNjVDLCAweDg3RkUsIDB4MTk5RSwgMHg4ODAxLCAweDNCMDIsCisgICAgMHg4ODAzLCAweDNCMDMsIDB4ODgwNSwgMHgxOTg5LCAweDg4MDYsIDB4M0IwNCwgMHg4ODA3LCAweDIxQTYsCisgICAgMHg4ODBCLCAweDNCMDUsIDB4ODgwRCwgMHgxOTlELCAweDg4MEUsIDB4MTlBMSwgMHg4ODBGLCAweDE5OUMsCisgICAgMHg4ODExLCAweDE5QTMsIDB4ODgxNCwgMHgzQjA2LCAweDg4MTUsIDB4MTlBNSwgMHg4ODE2LCAweDE5QTQsCisgICAgMHg4ODFDLCAweDNCMDcsIDB4ODgxRiwgMHgxRTg1LCAweDg4MjEsIDB4MTlBNywgMHg4ODIyLCAweDE5QTYsCisgICAgMHg4ODIzLCAweDE5NjEsIDB4ODgyNywgMHgxOUFCLCAweDg4MzEsIDB4MTlBOCwgMHg4ODM2LCAweDE5QTksCisgICAgMHg4ODM5LCAweDE5QUEsIDB4ODgzQiwgMHgxOUFDLCAweDg4NDAsIDB4MDc0MiwgMHg4ODQyLCAweDE5QUUsCisgICAgMHg4ODQ0LCAweDE5QUQsIDB4ODg0NiwgMHgwOTNBLCAweDg4NEMsIDB4MDdFNiwgMHg4ODRELCAweDE1MjQsCisgICAgMHg4ODUyLCAweDE5QUYsIDB4ODg1MywgMHgwOTVCLCAweDg4NTYsIDB4M0IwOCwgMHg4ODU3LCAweDA1OTcsCisgICAgMHg4ODU5LCAweDE5QjAsIDB4ODg1QiwgMHgwNEY0LCAweDg4NUQsIDB4MDlCRiwgMHg4ODVFLCAweDE5QjEsCisgICAgMHg4ODVGLCAweDNCMDksIDB4ODg2MSwgMHgwN0U3LCAweDg4NjIsIDB4MTlCMiwgMHg4ODYzLCAweDA0QTUsCisgICAgMHg4ODY0LCAweDNCMEEsIDB4ODg2OCwgMHgwREFGLCAweDg4NkIsIDB4MTlCMywgMHg4ODcwLCAweDBBMzAsCisgICAgMHg4ODcyLCAweDE5QkEsIDB4ODg3NSwgMHgxOUI3LCAweDg4NzcsIDB4MEJBRCwgMHg4ODdELCAweDE5QjgsCisgICAgMHg4ODdFLCAweDE5QjUsIDB4ODg3RiwgMHgwNkQ2LCAweDg4ODEsIDB4MTlCNCwgMHg4ODgyLCAweDE5QkIsCisgICAgMHg4ODg4LCAweDA3MEMsIDB4ODg4QiwgMHgwQjNFLCAweDg4OEQsIDB4MTlDMSwgMHg4ODkyLCAweDE5QkQsCisgICAgMHg4ODk2LCAweDBCMTUsIDB4ODg5NywgMHgxOUJDLCAweDg4OTgsIDB4M0IwQiwgMHg4ODk5LCAweDE5QkYsCisgICAgMHg4ODlFLCAweDE5QjYsIDB4ODhBMiwgMHgxOUMwLCAweDg4QTQsIDB4MTlDMiwgMHg4OEFBLCAweDNCMEMsCisgICAgMHg4OEFCLCAweDBEODMsIDB4ODhBRSwgMHgxOUJFLCAweDg4QjAsIDB4MTlDMywgMHg4OEIxLCAweDE5QzUsCisgICAgMHg4OEI0LCAweDA3ODcsIDB4ODhCNSwgMHgxOUI5LCAweDg4QjcsIDB4MDQ4NSwgMHg4OEJELCAweDNCMEQsCisgICAgMHg4OEJFLCAweDNCMEUsIDB4ODhCRiwgMHgxOUM0LCAweDg4QzEsIDB4MDg0QiwgMHg4OEMyLCAweDBGQkUsCisgICAgMHg4OEMzLCAweDE5QzYsIDB4ODhDNCwgMHgxOUM3LCAweDg4QzUsIDB4MEFGNywgMHg4OEM2LCAweDM3ODksCisgICAgMHg4OENBLCAweDNCMEYsIDB4ODhDRiwgMHgwRjZBLCAweDg4RDIsIDB4M0IxMCwgMHg4OEQ0LCAweDE5QzgsCisgICAgMHg4OEQ1LCAweDBGMUYsIDB4ODhEOCwgMHgxOUM5LCAweDg4RDksIDB4MTlDQSwgMHg4OERCLCAweDNCMTEsCisgICAgMHg4OERDLCAweDBFMzQsIDB4ODhERCwgMHgxOUNCLCAweDg4REYsIDB4MDgzMCwgMHg4OEUxLCAweDBGNkIsCisgICAgMHg4OEU4LCAweDE5RDAsIDB4ODhGMCwgMHgzQjEyLCAweDg4RjEsIDB4M0IxMywgMHg4OEYyLCAweDE5RDEsCisgICAgMHg4OEYzLCAweDA5QzAsIDB4ODhGNCwgMHgxOUNGLCAweDg4RjUsIDB4MjFBNywgMHg4OEY4LCAweDBGNTEsCisgICAgMHg4OEY5LCAweDE5Q0MsIDB4ODhGQywgMHgxOUNFLCAweDg4RkQsIDB4MEE2MSwgMHg4OEZFLCAweDBBNDQsCisgICAgMHg4OTAyLCAweDE5Q0QsIDB4ODkwNCwgMHgxOUQyLCAweDg5MDYsIDB4M0IxNCwgMHg4OTA3LCAweDBERjMsCisgICAgMHg4OTBBLCAweDE5RDQsIDB4ODkwQywgMHgxOUQzLCAweDg5MTAsIDB4MDVDQSwgMHg4OTEyLCAweDBFNTksCisgICAgMHg4OTEzLCAweDE5RDUsIDB4ODkxOCwgMHgzQjE1LCAweDg5MTksIDB4M0IxNiwgMHg4OTFBLCAweDNCMTcsCisgICAgMHg4OTFDLCAweDIwQTgsIDB4ODkxRCwgMHgxOUUxLCAweDg5MUUsIDB4MTlENywgMHg4OTI1LCAweDE5RDgsCisgICAgMHg4OTI3LCAweDNCMTgsIDB4ODkyQSwgMHgxOUQ5LCAweDg5MkIsIDB4MTlEQSwgMHg4OTMwLCAweDNCMTksCisgICAgMHg4OTM2LCAweDE5REUsIDB4ODkzOCwgMHgxOURGLCAweDg5M0IsIDB4MTlERCwgMHg4OTNFLCAweDNCMUEsCisgICAgMHg4OTQxLCAweDE5REIsIDB4ODk0MywgMHgxOUQ2LCAweDg5NDQsIDB4MTlEQywgMHg4OTRDLCAweDE5RTAsCisgICAgMHg4OTRELCAweDFCRDAsIDB4ODk1NiwgMHgwNTI4LCAweDg5NUUsIDB4MTlFMywgMHg4OTVGLCAweDA2RDcsCisgICAgMHg4OTYwLCAweDE5RTIsIDB4ODk2NCwgMHgxOUU1LCAweDg5NjYsIDB4MTlFNCwgMHg4OTZBLCAweDE5RTcsCisgICAgMHg4OTZELCAweDE5RTYsIDB4ODk2RiwgMHgxOUU4LCAweDg5NzIsIDB4MDkzQiwgMHg4OTc0LCAweDE5RTksCisgICAgMHg4OTc3LCAweDE5RUEsIDB4ODk3QiwgMHgzQjFCLCAweDg5N0UsIDB4MTlFQiwgMHg4OTdGLCAweDBBNjIsCisgICAgMHg4OTgwLCAweDM2MkUsIDB4ODk4MSwgMHgwRjQxLCAweDg5ODMsIDB4MTlFQywgMHg4OTg2LCAweDBERjQsCisgICAgMHg4OTg3LCAweDBDRkMsIDB4ODk4OCwgMHgxOUVELCAweDg5OEEsIDB4MTlFRSwgMHg4OThCLCAweDA3NUYsCisgICAgMHg4OThGLCAweDA2NDYsIDB4ODk5MywgMHgxOUVGLCAweDg5OTYsIDB4MDhCOSwgMHg4OTk3LCAweDBDRjcsCisgICAgMHg4OTk4LCAweDE5RjAsIDB4ODk5QSwgMHgwNUFFLCAweDg5QTEsIDB4MTlGMSwgMHg4OUE2LCAweDE5RjMsCisgICAgMHg4OUE3LCAweDBGNjEsIDB4ODlBOSwgMHgxOUYyLCAweDg5QUEsIDB4MEEwQywgMHg4OUFDLCAweDE5RjQsCisgICAgMHg4OUFGLCAweDE5RjUsIDB4ODlCMiwgMHgxOUY2LCAweDg5QjMsIDB4MDYwRCwgMHg4OUJBLCAweDE5RjcsCisgICAgMHg4OUJELCAweDE5RjgsIDB4ODlCRiwgMHgxOUY5LCAweDg5QzAsIDB4MTlGQSwgMHg4OUQyLCAweDA1QUYsCisgICAgMHg4OUQ0LCAweDNCMUMsIDB4ODlENiwgMHgzQjFELCAweDg5REEsIDB4MTlGQiwgMHg4OURDLCAweDE5RkMsCisgICAgMHg4OURELCAweDE5RkQsIDB4ODlFMywgMHgwNTcyLCAweDg5RTUsIDB4M0IxRSwgMHg4OUU2LCAweDA5RUUsCisgICAgMHg4OUU3LCAweDE5RkUsIDB4ODlGMSwgMHgzQjFGLCAweDg5RjQsIDB4MTlGRiwgMHg4OUY4LCAweDFBMDAsCisgICAgMHg4QTAwLCAweDA3NzQsIDB4OEEwMSwgMHgzNUJDLCAweDhBMDIsIDB4MEMxNywgMHg4QTAzLCAweDFBMDEsCisgICAgMHg4QTA3LCAweDNCMjAsIDB4OEEwOCwgMHgwNzJELCAweDhBMEEsIDB4MEExQywgMHg4QTBDLCAweDFBMDQsCisgICAgMHg4QTBFLCAweDBDN0MsIDB4OEEwRiwgMHgzQjIxLCAweDhBMTAsIDB4MUEwMywgMHg4QTEyLCAweDIxQTgsCisgICAgMHg4QTEzLCAweDA3MDcsIDB4OEExNSwgMHgzQjIyLCAweDhBMTYsIDB4MUEwMiwgMHg4QTE3LCAweDBCNTcsCisgICAgMHg4QTE4LCAweDA2NDcsIDB4OEExQiwgMHgxQTA1LCAweDhBMUQsIDB4MUEwNiwgMHg4QTFGLCAweDA5QzEsCisgICAgMHg4QTIyLCAweDNCMjMsIDB4OEEyMywgMHgwNzQzLCAweDhBMjUsIDB4MUEwNywgMHg4QTJBLCAweDBFNUEsCisgICAgMHg4QTJELCAweDBBODMsIDB4OEEzMSwgMHgwNjkwLCAweDhBMzMsIDB4MEYwMSwgMHg4QTM0LCAweDBBQ0MsCisgICAgMHg4QTM2LCAweDFBMDgsIDB4OEEzNywgMHgyMUE5LCAweDhBM0EsIDB4MEEwRCwgMHg4QTNCLCAweDBCQUUsCisgICAgMHg4QTNDLCAweDA5QzIsIDB4OEE0MSwgMHgxQTA5LCAweDhBNDYsIDB4MUEwQywgMHg4QTQ4LCAweDFBMEQsCisgICAgMHg4QTRFLCAweDNCMjQsIDB4OEE1MCwgMHgwODJFLCAweDhBNTEsIDB4MEIyMiwgMHg4QTUyLCAweDFBMEIsCisgICAgMHg4QTU0LCAweDA5QzMsIDB4OEE1NSwgMHgwREIwLCAweDhBNUIsIDB4MUEwQSwgMHg4QTVFLCAweDA4QkEsCisgICAgMHg4QTYwLCAweDA0RjUsIDB4OEE2MiwgMHgxQTExLCAweDhBNjMsIDB4MDcyRSwgMHg4QTY2LCAweDA4QkMsCisgICAgMHg4QTY5LCAweDA4QkIsIDB4OEE2QiwgMHgwRkYzLCAweDhBNkMsIDB4MUExMCwgMHg4QTZELCAweDFBMEYsCisgICAgMHg4QTZFLCAweDBBQTksIDB4OEE3MCwgMHgwNjY3LCAweDhBNzEsIDB4MEZFOSwgMHg4QTcyLCAweDA1OTgsCisgICAgMHg4QTczLCAweDA5QzQsIDB4OEE3OSwgMHgyMUFBLCAweDhBN0MsIDB4MUEwRSwgMHg4QTdGLCAweDNCMjUsCisgICAgMHg4QTgyLCAweDFBMTMsIDB4OEE4NCwgMHgxQTE0LCAweDhBODUsIDB4MUExMiwgMHg4QTg3LCAweDA3OEMsCisgICAgMHg4QTg5LCAweDBGMkEsIDB4OEE4QywgMHgwOEJELCAweDhBOEQsIDB4MENERCwgMHg4QTkxLCAweDFBMTcsCisgICAgMHg4QTkzLCAweDBBNjQsIDB4OEE5NSwgMHgwQjgwLCAweDhBOTgsIDB4MEYyMCwgMHg4QTlBLCAweDFBMUEsCisgICAgMHg4QTlFLCAweDA3QTAsIDB4OEFBMCwgMHgwQTYzLCAweDhBQTEsIDB4MUExNiwgMHg4QUEzLCAweDFBMUIsCisgICAgMHg4QUE0LCAweDA3QTEsIDB4OEFBNSwgMHgxQTE4LCAweDhBQTYsIDB4MUExOSwgMHg4QUE3LCAweDIxQUIsCisgICAgMHg4QUE4LCAweDFBMTUsIDB4OEFBQSwgMHgzNjM4LCAweDhBQUMsIDB4MEE4NiwgMHg4QUFELCAweDBDQTEsCisgICAgMHg4QUIwLCAweDBCNkQsIDB4OEFCMiwgMHgwNTVELCAweDhBQjksIDB4MEQ4NCwgMHg4QUJDLCAweDA2NUQsCisgICAgMHg4QUJFLCAweDIxQUMsIDB4OEFCRiwgMHgwQkQwLCAweDhBQzIsIDB4MUExRSwgMHg4QUM0LCAweDFBMUMsCisgICAgMHg4QUM3LCAweDBCOEEsIDB4OEFDQiwgMHgwQTY1LCAweDhBQ0MsIDB4MDYwRSwgMHg4QUNELCAweDFBMUQsCisgICAgMHg4QUNGLCAweDBBMjEsIDB4OEFEMiwgMHgwRjkyLCAweDhBRDYsIDB4MEZFNiwgMHg4QURBLCAweDFBMUYsCisgICAgMHg4QURCLCAweDFBMkEsIDB4OEFEQywgMHgwQkQxLCAweDhBREUsIDB4MUEyOSwgMHg4QURGLCAweDIxQUQsCisgICAgMHg4QUUwLCAweDFBMjYsIDB4OEFFMSwgMHgxQTJFLCAweDhBRTIsIDB4MUEyNywgMHg4QUU0LCAweDFBMjMsCisgICAgMHg4QUU2LCAweDBDMTgsIDB4OEFFNywgMHgxQTIyLCAweDhBRUIsIDB4MUEyMCwgMHg4QUVELCAweDBGMEIsCisgICAgMHg4QUVFLCAweDA4QkUsIDB4OEFGMSwgMHgxQTI0LCAweDhBRjMsIDB4MUEyMSwgMHg4QUY0LCAweDNCMjYsCisgICAgMHg4QUY2LCAweDIxQUYsIDB4OEFGNywgMHgxQTI4LCAweDhBRjgsIDB4MDk3RSwgMHg4QUZBLCAweDA3NzUsCisgICAgMHg4QUZFLCAweDBCNUEsIDB4OEIwMCwgMHgwRTczLCAweDhCMDEsIDB4MDRGQywgMHg4QjAyLCAweDA0QTYsCisgICAgMHg4QjA0LCAweDBDN0QsIDB4OEIwNywgMHgxQTJDLCAweDhCMEMsIDB4MUEyQiwgMHg4QjBFLCAweDBDQkUsCisgICAgMHg4QjEwLCAweDFBMzAsIDB4OEIxNCwgMHgxQTI1LCAweDhCMTYsIDB4MUEyRiwgMHg4QjE3LCAweDFBMzEsCisgICAgMHg4QjE5LCAweDA3NjAsIDB4OEIxQSwgMHgxQTJELCAweDhCMUIsIDB4MDdFOCwgMHg4QjFELCAweDA5MDEsCisgICAgMHg4QjFGLCAweDNCMjcsIDB4OEIyMCwgMHgxQTMyLCAweDhCMjEsIDB4MEY0MiwgMHg4QjI2LCAweDFBMzUsCisgICAgMHg4QjI4LCAweDFBMzgsIDB4OEIyQiwgMHgxQTM2LCAweDhCMkMsIDB4MERBNywgMHg4QjMzLCAweDFBMzMsCisgICAgMHg4QjM3LCAweDNCMjgsIDB4OEIzOSwgMHgwNkQ4LCAweDhCM0UsIDB4MUEzNywgMHg4QjQxLCAweDFBMzksCisgICAgMHg4QjQzLCAweDNCMjksIDB4OEI0NCwgMHgzQjJBLCAweDhCNDksIDB4MUEzRCwgMHg4QjRDLCAweDFBM0EsCisgICAgMHg4QjRFLCAweDFBM0MsIDB4OEI0RiwgMHgxQTNCLCAweDhCNTMsIDB4MjFCMCwgMHg4QjU0LCAweDNCMkIsCisgICAgMHg4QjU2LCAweDFBM0UsIDB4OEI1OCwgMHgwOERELCAweDhCNUEsIDB4MUE0MCwgMHg4QjVCLCAweDFBM0YsCisgICAgMHg4QjVDLCAweDBEREEsIDB4OEI1RiwgMHgxQTQyLCAweDhCNjYsIDB4MDcyRiwgMHg4QjZCLCAweDFBNDEsCisgICAgMHg4QjZDLCAweDFBNDMsIDB4OEI2RiwgMHgxQTQ0LCAweDhCNzAsIDB4MDY1RSwgMHg4QjcxLCAweDE4MkUsCisgICAgMHg4QjcyLCAweDA5RTEsIDB4OEI3NCwgMHgxQTQ1LCAweDhCNzcsIDB4MDdBMiwgMHg4QjdELCAweDFBNDYsCisgICAgMHg4QjdGLCAweDIxQjEsIDB4OEI4MCwgMHgxQTQ3LCAweDhCODMsIDB4MDg4QywgMHg4QjhBLCAweDEzRDMsCisgICAgMHg4QjhDLCAweDFBNDgsIDB4OEI4RSwgMHgxQTQ5LCAweDhCOTAsIDB4MDkzQywgMHg4QjkyLCAweDFBNEEsCisgICAgMHg4QjkzLCAweDFBNEIsIDB4OEI5NiwgMHgxQTRDLCAweDhCOTksIDB4MUE0RCwgMHg4QjlBLCAweDFBNEUsCisgICAgMHg4QjlDLCAweDNCMkMsIDB4OEI5RSwgMHgzQjJELCAweDhDMzcsIDB4MEI2OSwgMHg4QzNBLCAweDFBNEYsCisgICAgMHg4QzNGLCAweDFBNTEsIDB4OEM0MSwgMHgxQTUwLCAweDhDNDYsIDB4MEM3RSwgMHg4QzQ3LCAweDNCMkUsCisgICAgMHg4QzQ4LCAweDFBNTIsIDB4OEM0QSwgMHgwRTVCLCAweDhDNEMsIDB4MUE1MywgMHg4QzRFLCAweDFBNTQsCisgICAgMHg4QzUwLCAweDFBNTUsIDB4OEM1NCwgMHgzQjJGLCAweDhDNTUsIDB4MUE1NiwgMHg4QzVBLCAweDBDQjIsCisgICAgMHg4QzYxLCAweDA5QzUsIDB4OEM2MiwgMHgxQTU3LCAweDhDNkEsIDB4MDdGRCwgMHg4QzZCLCAweDEwMDcsCisgICAgMHg4QzZDLCAweDFBNTgsIDB4OEM3MywgMHgzQjMwLCAweDhDNzgsIDB4MUE1OSwgMHg4Qzc5LCAweDBEQjEsCisgICAgMHg4QzdBLCAweDFBNUEsIDB4OEM3QywgMHgxQTYyLCAweDhDODIsIDB4MUE1QiwgMHg4Qzg1LCAweDFBNUQsCisgICAgMHg4Qzg5LCAweDFBNUMsIDB4OEM4QSwgMHgxQTVFLCAweDhDOEMsIDB4MEU3NCwgMHg4QzhELCAweDFBNUYsCisgICAgMHg4QzhFLCAweDFBNjAsIDB4OEM5NCwgMHgxQTYxLCAweDhDOTgsIDB4MUE2MywgMHg4QzlELCAweDA1OEIsCisgICAgMHg4QzlFLCAweDBDMDMsIDB4OENBMCwgMHgwRERCLCAweDhDQTEsIDB4MDg1MiwgMHg4Q0EyLCAweDA3RTksCisgICAgMHg4Q0E0LCAweDNCMzEsIDB4OENBNywgMHgwREMxLCAweDhDQTgsIDB4MDU1RiwgMHg4Q0E5LCAweDBENjIsCisgICAgMHg4Q0FBLCAweDFBNjYsIDB4OENBQiwgMHgwNjBGLCAweDhDQUMsIDB4MEE3OSwgMHg4Q0FELCAweDFBNjUsCisgICAgMHg4Q0FFLCAweDFBNkEsIDB4OENBRiwgMHgwQkI3LCAweDhDQjAsIDB4MEVFRiwgMHg4Q0IyLCAweDFBNjgsCisgICAgMHg4Q0IzLCAweDFBNjksIDB4OENCNCwgMHgwNjQ4LCAweDhDQjYsIDB4MUE2QiwgMHg4Q0I3LCAweDBEMTksCisgICAgMHg4Q0I4LCAweDBCM0YsIDB4OENCQiwgMHgwRDg1LCAweDhDQkMsIDB4MEMzNywgMHg4Q0JELCAweDFBNjcsCisgICAgMHg4Q0JGLCAweDBFNzUsIDB4OENDMCwgMHgwNTZDLCAweDhDQzEsIDB4MUE2RCwgMHg4Q0MyLCAweDBGQ0UsCisgICAgMHg4Q0MzLCAweDBCREUsIDB4OENDNCwgMHgwRkVCLCAweDhDQzcsIDB4MDhCRiwgMHg4Q0M4LCAweDFBNkMsCisgICAgMHg4Q0NBLCAweDBCMTEsIDB4OENDRCwgMHgxQTdELCAweDhDQ0UsIDB4MEFBQSwgMHg4Q0QxLCAweDBDRDAsCisgICAgMHg4Q0QzLCAweDBEQzIsIDB4OENEOSwgMHgzQjMyLCAweDhDREEsIDB4MUE3MCwgMHg4Q0RCLCAweDA4OEQsCisgICAgMHg4Q0RDLCAweDA4QzAsIDB4OENERSwgMHgwOUM2LCAweDhDRTAsIDB4MEQxQiwgMHg4Q0UxLCAweDNCMzMsCisgICAgMHg4Q0UyLCAweDA3NjEsIDB4OENFMywgMHgxQTZGLCAweDhDRTQsIDB4MUE2RSwgMHg4Q0U2LCAweDBEREMsCisgICAgMHg4Q0VBLCAweDA4RUQsIDB4OENFRCwgMHgwQzRDLCAweDhDRjAsIDB4MjFCMiwgMHg4Q0Y0LCAweDIxQjMsCisgICAgMHg4Q0Y4LCAweDNCMzQsIDB4OENGQSwgMHgxQTcyLCAweDhDRkIsIDB4MUE3MywgMHg4Q0ZDLCAweDA3RUEsCisgICAgMHg4Q0ZELCAweDFBNzEsIDB4OENGRSwgMHgzQjM1LCAweDhEMDQsIDB4MUE3NCwgMHg4RDA1LCAweDFBNzUsCisgICAgMHg4RDA3LCAweDFBNzcsIDB4OEQwOCwgMHgwQjAzLCAweDhEMEEsIDB4MUE3NiwgMHg4RDBCLCAweDA2MjIsCisgICAgMHg4RDBELCAweDFBNzksIDB4OEQwRiwgMHgxQTc4LCAweDhEMTAsIDB4MUE3QSwgMHg4RDEyLCAweDIxQjQsCisgICAgMHg4RDEzLCAweDFBN0MsIDB4OEQxNCwgMHgxQTdFLCAweDhEMTYsIDB4MUE3RiwgMHg4RDFCLCAweDNCMzYsCisgICAgMHg4RDY0LCAweDBBN0EsIDB4OEQ2NiwgMHgwOEZCLCAweDhENjcsIDB4MUE4MCwgMHg4RDY5LCAweDNCMzcsCisgICAgMHg4RDZCLCAweDA1QjAsIDB4OEQ2QywgMHgzQjM4LCAweDhENkQsIDB4MUE4MSwgMHg4RDcwLCAweDBBRjgsCisgICAgMHg4RDcxLCAweDFBODIsIDB4OEQ3MywgMHgxQTgzLCAweDhENzQsIDB4MERERCwgMHg4RDc2LCAweDIxQjUsCisgICAgMHg4RDc3LCAweDA2NDksIDB4OEQ4MSwgMHgxQTg0LCAweDhEODQsIDB4M0IzOSwgMHg4RDg1LCAweDBCRDIsCisgICAgMHg4RDhBLCAweDA0RkQsIDB4OEQ4RCwgMHgzQjNBLCAweDhEOTUsIDB4M0IzQiwgMHg4RDk5LCAweDFBODUsCisgICAgMHg4REEzLCAweDA5MUQsIDB4OERBNiwgMHgzQjNDLCAweDhEQTgsIDB4MEEzQywgMHg4REIzLCAweDBCMEQsCisgICAgMHg4REJBLCAweDFBODgsIDB4OERCRSwgMHgxQTg3LCAweDhEQzIsIDB4MUE4NiwgMHg4REM2LCAweDNCM0QsCisgICAgMHg4RENCLCAweDFBOEUsIDB4OERDQywgMHgxQThDLCAweDhEQ0UsIDB4M0IzRSwgMHg4RENGLCAweDFBODksCisgICAgMHg4REQ2LCAweDFBOEIsIDB4OEREQSwgMHgxQThBLCAweDhEREIsIDB4MUE4RCwgMHg4RERELCAweDA2OTEsCisgICAgMHg4RERGLCAweDFBOTEsIDB4OERFMSwgMHgwQTdCLCAweDhERTMsIDB4MUE5MiwgMHg4REU0LCAweDNCM0YsCisgICAgMHg4REU4LCAweDA3OEQsIDB4OERFQSwgMHgxQThGLCAweDhERUIsIDB4MUE5MCwgMHg4REVDLCAweDNCNDAsCisgICAgMHg4REVGLCAweDBGQ0YsIDB4OERGMywgMHgwQkQzLCAweDhERjUsIDB4MEFBQiwgMHg4REZDLCAweDFBOTMsCisgICAgMHg4REZGLCAweDFBOTYsIDB4OEUwOCwgMHgxQTk0LCAweDhFMDksIDB4MUE5NSwgMHg4RTBBLCAweDBGNDMsCisgICAgMHg4RTBGLCAweDBDN0YsIDB4OEUxMCwgMHgxQTk5LCAweDhFMUQsIDB4MUE5NywgMHg4RTFFLCAweDFBOTgsCisgICAgMHg4RTFGLCAweDFBOUEsIDB4OEUyMCwgMHgzQjQxLCAweDhFMkEsIDB4MUFBOCwgMHg4RTMwLCAweDFBOUQsCisgICAgMHg4RTM0LCAweDFBOUUsIDB4OEUzNSwgMHgxQTlDLCAweDhFNDIsIDB4MUE5QiwgMHg4RTQ0LCAweDBDMTksCisgICAgMHg4RTQ3LCAweDFBQTAsIDB4OEU0OCwgMHgxQUE0LCAweDhFNDksIDB4MUFBMSwgMHg4RTRBLCAweDFBOUYsCisgICAgMHg4RTRCLCAweDNCNDIsIDB4OEU0QywgMHgxQUEyLCAweDhFNTAsIDB4MUFBMywgMHg4RTU1LCAweDFBQUEsCisgICAgMHg4RTU5LCAweDFBQTUsIDB4OEU1RiwgMHgwQTdDLCAweDhFNjAsIDB4MUFBNywgMHg4RTYzLCAweDFBQTksCisgICAgMHg4RTY0LCAweDFBQTYsIDB4OEU2QywgMHgzQjQzLCAweDhFNzAsIDB4M0I0NCwgMHg4RTcyLCAweDFBQUMsCisgICAgMHg4RTc0LCAweDA5M0QsIDB4OEU3NiwgMHgxQUFCLCAweDhFN0EsIDB4M0I0NSwgMHg4RTdDLCAweDFBQUQsCisgICAgMHg4RTgxLCAweDFBQUUsIDB4OEU4NCwgMHgxQUIxLCAweDhFODUsIDB4MUFCMCwgMHg4RTg3LCAweDFBQUYsCisgICAgMHg4RThBLCAweDFBQjMsIDB4OEU4QiwgMHgxQUIyLCAweDhFOEQsIDB4MEYwMiwgMHg4RTkxLCAweDFBQjUsCisgICAgMHg4RTkyLCAweDNCNDYsIDB4OEU5MywgMHgxQUI0LCAweDhFOTQsIDB4MUFCNiwgMHg4RTk5LCAweDFBQjcsCisgICAgMHg4RUExLCAweDFBQjksIDB4OEVBQSwgMHgxQUI4LCAweDhFQUIsIDB4MEEwRSwgMHg4RUFDLCAweDFBQkEsCisgICAgMHg4RUFFLCAweDNCNDcsIDB4OEVBRiwgMHgwNkU1LCAweDhFQjAsIDB4MUFCQiwgMHg4RUIxLCAweDFBQkQsCisgICAgMHg4RUIzLCAweDNCNDgsIDB4OEVCNiwgMHgzNzAzLCAweDhFQkUsIDB4MUFCRSwgMHg4RUMwLCAweDFERUYsCisgICAgMHg4RUM1LCAweDFBQkYsIDB4OEVDNiwgMHgxQUJDLCAweDhFQzgsIDB4MUFDMCwgMHg4RUNBLCAweDA5MDIsCisgICAgMHg4RUNCLCAweDFBQzEsIDB4OEVDQywgMHgwNjRBLCAweDhFQ0QsIDB4MDcwOSwgMHg4RUNGLCAweDIxQjcsCisgICAgMHg4RUQxLCAweDNCNDksIDB4OEVEMiwgMHgwNzYyLCAweDhFRDQsIDB4M0I0QSwgMHg4RURCLCAweDFBQzIsCisgICAgMHg4RURGLCAweDBDQzgsIDB4OEVFMiwgMHgwQzM4LCAweDhFRTMsIDB4MUFDMywgMHg4RUVCLCAweDFBQzYsCisgICAgMHg4RUY4LCAweDA4RTAsIDB4OEVGOSwgMHgzQjRCLCAweDhFRkIsIDB4MUFDNSwgMHg4RUZDLCAweDFBQzQsCisgICAgMHg4RUZELCAweDA3MzAsIDB4OEVGRSwgMHgxQUM3LCAweDhGMDMsIDB4MDVCMSwgMHg4RjA1LCAweDFBQzksCisgICAgMHg4RjA5LCAweDA4NEMsIDB4OEYwQSwgMHgxQUM4LCAweDhGMEMsIDB4MUFEMSwgMHg4RjEyLCAweDFBQ0IsCisgICAgMHg4RjEzLCAweDFBQ0QsIDB4OEYxNCwgMHgwRTM1LCAweDhGMTUsIDB4MUFDQSwgMHg4RjE3LCAweDNCNEMsCisgICAgMHg4RjE5LCAweDFBQ0MsIDB4OEYxQiwgMHgxQUQwLCAweDhGMUMsIDB4MUFDRSwgMHg4RjFELCAweDA2NEIsCisgICAgMHg4RjFGLCAweDFBQ0YsIDB4OEYyNiwgMHgxQUQyLCAweDhGMjksIDB4MEQxMCwgMHg4RjJBLCAweDBGQTAsCisgICAgMHg4RjJGLCAweDA5M0UsIDB4OEYzMywgMHgxQUQzLCAweDhGMzYsIDB4M0I0RCwgMHg4RjM4LCAweDBGMEMsCisgICAgMHg4RjM5LCAweDFBRDUsIDB4OEYzQiwgMHgxQUQ0LCAweDhGM0UsIDB4MUFEOCwgMHg4RjNGLCAweDBGMkIsCisgICAgMHg4RjQyLCAweDFBRDcsIDB4OEY0NCwgMHgwNUNCLCAweDhGNDUsIDB4MUFENiwgMHg4RjQ2LCAweDFBREIsCisgICAgMHg4RjQ5LCAweDFBREEsIDB4OEY0QywgMHgxQUQ5LCAweDhGNEQsIDB4MEMyQywgMHg4RjRFLCAweDFBREMsCisgICAgMHg4RjU3LCAweDFBREQsIDB4OEY1QywgMHgxQURFLCAweDhGNUYsIDB4MDdGRSwgMHg4RjYxLCAweDA2RkIsCisgICAgMHg4RjYyLCAweDFBREYsIDB4OEY2MywgMHgxQUUwLCAweDhGNjQsIDB4MUFFMSwgMHg4RjlCLCAweDBBMEYsCisgICAgMHg4RjlDLCAweDFBRTIsIDB4OEY5RSwgMHgwOEQ5LCAweDhGOUYsIDB4MUFFMywgMHg4RkEzLCAweDFBRTQsCisgICAgMHg4RkE2LCAweDNCNEUsIDB4OEZBNywgMHgxMEI2LCAweDhGQTgsIDB4MTBCNSwgMHg4RkFELCAweDFBRTUsCisgICAgMHg4RkFFLCAweDE3RkYsIDB4OEZBRiwgMHgxQUU2LCAweDhGQjAsIDB4MEI2MiwgMHg4RkIxLCAweDA5RjEsCisgICAgMHg4RkIyLCAweDBDRjYsIDB4OEZCNSwgMHgzQjRGLCAweDhGQjYsIDB4M0I1MCwgMHg4RkI3LCAweDFBRTcsCisgICAgMHg4RkJBLCAweDBFMjUsIDB4OEZCQiwgMHgwQkYwLCAweDhGQkMsIDB4MDgxMCwgMHg4RkJGLCAweDBCNjcsCisgICAgMHg4RkMyLCAweDA0Q0MsIDB4OEZDNCwgMHgwRUE2LCAweDhGQzUsIDB4MEExRCwgMHg4RkM2LCAweDNCNTEsCisgICAgMHg4RkM4LCAweDM3OTksIDB4OEZDRSwgMHgwNzM0LCAweDhGRDEsIDB4MDZEOSwgMHg4RkQ0LCAweDBFMjYsCisgICAgMHg4RkRBLCAweDFBRTgsIDB4OEZFMCwgMHgzQjUyLCAweDhGRTIsIDB4MUFFQSwgMHg4RkU0LCAweDNCNTMsCisgICAgMHg4RkU1LCAweDFBRTksIDB4OEZFNiwgMHgwNTYwLCAweDhGRTksIDB4MENDRSwgMHg4RkVBLCAweDFBRUIsCisgICAgMHg4RkVCLCAweDBEMkQsIDB4OEZFRCwgMHgwQzJELCAweDhGRUYsIDB4MUFFQywgMHg4RkYwLCAweDA5NUMsCisgICAgMHg4RkY0LCAweDFBRUUsIDB4OEZGNiwgMHgzQjU0LCAweDhGRjcsIDB4MEVDRSwgMHg4RkY4LCAweDFBRkQsCisgICAgMHg4RkY5LCAweDFBRjAsIDB4OEZGQSwgMHgxQUYxLCAweDhGRkQsIDB4MEJFNSwgMHg5MDAwLCAweDBCNDAsCisgICAgMHg5MDAxLCAweDBBRjksIDB4OTAwMiwgMHgzQjU1LCAweDkwMDMsIDB4MEM4MCwgMHg5MDA1LCAweDFBRUYsCisgICAgMHg5MDA2LCAweDA2NkYsIDB4OTAwQiwgMHgxQUY4LCAweDkwMEQsIDB4MUFGNSwgMHg5MDBFLCAweDFCMDIsCisgICAgMHg5MDBGLCAweDBDODEsIDB4OTAxMCwgMHgwQjlFLCAweDkwMTEsIDB4MUFGMiwgMHg5MDEzLCAweDBDMUEsCisgICAgMHg5MDE0LCAweDBDNEQsIDB4OTAxNSwgMHgxQUYzLCAweDkwMTYsIDB4MUFGNywgMHg5MDE3LCAweDBBMjYsCisgICAgMHg5MDE5LCAweDBEMUQsIDB4OTAxQSwgMHgwQkU4LCAweDkwMUQsIDB4MEE2NiwgMHg5MDFFLCAweDFBRjYsCisgICAgMHg5MDFGLCAweDBCMEUsIDB4OTAyMCwgMHgwQjA0LCAweDkwMjEsIDB4MUFGNCwgMHg5MDIyLCAweDA0NkQsCisgICAgMHg5MDIzLCAweDBGQzgsIDB4OTAyNywgMHgxQUY5LCAweDkwMkMsIDB4M0I1NiwgMHg5MDJFLCAweDBCNDEsCisgICAgMHg5MDMxLCAweDA5M0YsIDB4OTAzMiwgMHgwQTEwLCAweDkwMzUsIDB4MUFGQiwgMHg5MDM2LCAweDFBRkEsCisgICAgMHg5MDM4LCAweDA0QjMsIDB4OTAzOSwgMHgxQUZDLCAweDkwM0MsIDB4MERBMSwgMHg5MDNFLCAweDFCMDQsCisgICAgMHg5MDQxLCAweDBDQjMsIDB4OTA0MiwgMHgwQTMxLCAweDkwNDQsIDB4M0I1NywgMHg5MDQ1LCAweDBCOTcsCisgICAgMHg5MDQ3LCAweDA2RjAsIDB4OTA0OSwgMHgxQjAzLCAweDkwNEEsIDB4MEYyMSwgMHg5MDRCLCAweDA0RTEsCisgICAgMHg5MDRELCAweDBFMjcsIDB4OTA0RSwgMHgwNTYxLCAweDkwNEYsIDB4MUFGRSwgMHg5MDUwLCAweDFBRkYsCisgICAgMHg5MDUxLCAweDFCMDAsIDB4OTA1MiwgMHgxQjAxLCAweDkwNTMsIDB4MEM5MywgMHg5MDU0LCAweDBCNjEsCisgICAgMHg5MDU1LCAweDA0QTcsIDB4OTA1NiwgMHgxQjA1LCAweDkwNTgsIDB4MUIwNiwgMHg5MDU5LCAweDFEMzQsCisgICAgMHg5MDVDLCAweDBCMUQsIDB4OTA1RSwgMHgxQjA3LCAweDkwNjAsIDB4MDUxNSwgMHg5MDYxLCAweDBBQ0UsCisgICAgMHg5MDYzLCAweDA3NjMsIDB4OTA2NSwgMHgwRjQ0LCAweDkwNjcsIDB4MjFCQSwgMHg5MDY4LCAweDFCMDgsCisgICAgMHg5MDY5LCAweDBDMjYsIDB4OTA2RCwgMHgwQUZBLCAweDkwNkUsIDB4MDkwMywgMHg5MDZGLCAweDFCMDksCisgICAgMHg5MDcyLCAweDFCMEMsIDB4OTA3NSwgMHgwOTZGLCAweDkwNzYsIDB4MUIwQSwgMHg5MDc3LCAweDBBQUQsCisgICAgMHg5MDc4LCAweDBBQUMsIDB4OTA3QSwgMHgwNEE4LCAweDkwN0MsIDB4MEY5MywgMHg5MDdELCAweDFCMEUsCisgICAgMHg5MDdGLCAweDBEODYsIDB4OTA4MCwgMHgxQjEwLCAweDkwODEsIDB4MUIwRiwgMHg5MDgyLCAweDFCMEQsCisgICAgMHg5MDgzLCAweDE3MzcsIDB4OTA4NCwgMHgwNjEwLCAweDkwODcsIDB4MUFFRCwgMHg5MDg4LCAweDNCNTgsCisgICAgMHg5MDg5LCAweDFCMTIsIDB4OTA4QSwgMHgxQjExLCAweDkwOEYsIDB4MUIxMywgMHg5MDkxLCAweDBGMjIsCisgICAgMHg5MDk1LCAweDNCNTksIDB4OTA5OSwgMHgzQjVBLCAweDkwOUIsIDB4M0I1QiwgMHg5MEEyLCAweDNCNUMsCisgICAgMHg5MEEzLCAweDBDQjksIDB4OTBBNiwgMHgwRTVDLCAweDkwQTgsIDB4MUIxNCwgMHg5MEFBLCAweDA5MDUsCisgICAgMHg5MEFGLCAweDFCMTUsIDB4OTBCMSwgMHgxQjE2LCAweDkwQjQsIDB4M0I1RCwgMHg5MEI1LCAweDFCMTcsCisgICAgMHg5MEI4LCAweDBDMUIsIDB4OTBDMSwgMHgwNEFFLCAweDkwQ0EsIDB4MDdFQiwgMHg5MENFLCAweDBGRTAsCisgICAgMHg5MEQ3LCAweDNCNUUsIDB4OTBEQiwgMHgxQjFCLCAweDkwREQsIDB4M0I1RiwgMHg5MERFLCAweDIxQkIsCisgICAgMHg5MEUxLCAweDA3MEEsIDB4OTBFMiwgMHgxQjE4LCAweDkwRTQsIDB4MUIxOSwgMHg5MEU4LCAweDBERTYsCisgICAgMHg5MEVELCAweDA1QjIsIDB4OTBGNCwgMHgzQjYwLCAweDkwRjUsIDB4MEYyMywgMHg5MEY3LCAweDA2QjcsCisgICAgMHg5MEZELCAweDBDNEUsIDB4OTEwMiwgMHgxQjFDLCAweDkxMTIsIDB4MUIxRCwgMHg5MTE1LCAweDIxQkQsCisgICAgMHg5MTE3LCAweDNCNjEsIDB4OTExOSwgMHgxQjFFLCAweDkxMUMsIDB4M0I2MiwgMHg5MTI3LCAweDIxQkUsCisgICAgMHg5MTJELCAweDBDMUMsIDB4OTEzMCwgMHgxQjIwLCAweDkxMzEsIDB4M0I2MywgMHg5MTMyLCAweDFCMUYsCisgICAgMHg5MTNBLCAweDNCNjQsIDB4OTEzRCwgMHgzQjY1LCAweDkxNDgsIDB4M0I2NiwgMHg5MTQ5LCAweDBDQUIsCisgICAgMHg5MTRBLCAweDFCMjEsIDB4OTE0QiwgMHgwOTQwLCAweDkxNEMsIDB4MDkwQywgMHg5MTRELCAweDBEMTEsCisgICAgMHg5MTRFLCAweDBCQUYsIDB4OTE1MiwgMHgwOTFFLCAweDkxNTQsIDB4MEEzMiwgMHg5MTU2LCAweDFCMjIsCisgICAgMHg5MTU4LCAweDFCMjMsIDB4OTE1QiwgMHgzQjY3LCAweDkxNjEsIDB4M0I2OCwgMHg5MTYyLCAweDBBMjMsCisgICAgMHg5MTYzLCAweDFCMjQsIDB4OTE2NCwgMHgzQjY5LCAweDkxNjUsIDB4MUIyNSwgMHg5MTY5LCAweDFCMjYsCisgICAgMHg5MTZBLCAweDBGNTksIDB4OTE2QywgMHgwOTQxLCAweDkxNzIsIDB4MUIyOCwgMHg5MTczLCAweDFCMjcsCisgICAgMHg5MTc1LCAweDA3RUMsIDB4OTE3NywgMHgwODA1LCAweDkxNzgsIDB4MDg4RSwgMHg5MTgyLCAweDFCMkIsCisgICAgMHg5MTg3LCAweDA5NzAsIDB4OTE4OSwgMHgxQjJBLCAweDkxOEIsIDB4MUIyOSwgMHg5MThELCAweDBCNDksCisgICAgMHg5MThFLCAweDNCNkEsIDB4OTE5MCwgMHgwN0EzLCAweDkxOTIsIDB4MEE2NywgMHg5MTk3LCAweDBENDQsCisgICAgMHg5MTlDLCAweDA5NDMsIDB4OTE5RSwgMHgzQjZCLCAweDkxQTIsIDB4MUIyQywgMHg5MUE0LCAweDA5QzcsCisgICAgMHg5MUE4LCAweDNCNkMsIDB4OTFBQSwgMHgxQjJGLCAweDkxQUIsIDB4MUIyRCwgMHg5MUFDLCAweDFFMUIsCisgICAgMHg5MUFELCAweDNCNkQsIDB4OTFBRSwgMHgzQjZFLCAweDkxQUYsIDB4MUIyRSwgMHg5MUIxLCAweDFFNjEsCisgICAgMHg5MUIyLCAweDNCNkYsIDB4OTFCNCwgMHgxQjMxLCAweDkxQjUsIDB4MUIzMCwgMHg5MUI4LCAweDA5RTIsCisgICAgMHg5MUJBLCAweDFCMzIsIDB4OTFCQywgMHgzQjcwLCAweDkxQzAsIDB4MUIzMywgMHg5MUMxLCAweDFCMzQsCisgICAgMHg5MUM2LCAweDBENjQsIDB4OTFDNywgMHgwODQzLCAweDkxQzgsIDB4MDkwRCwgMHg5MUM5LCAweDFCMzUsCisgICAgMHg5MUNCLCAweDFCMzYsIDB4OTFDQywgMHgwRjZDLCAweDkxQ0QsIDB4MDk0RiwgMHg5MUNFLCAweDBFRkEsCisgICAgMHg5MUNGLCAweDBGOTQsIDB4OTFEMCwgMHgxQjM3LCAweDkxRDEsIDB4MDZEQSwgMHg5MUQ2LCAweDFCMzgsCisgICAgMHg5MUQ3LCAweDIxQzAsIDB4OTFEOCwgMHgwQzFELCAweDkxREEsIDB4MjFCRiwgMHg5MURCLCAweDFCM0IsCisgICAgMHg5MURDLCAweDA1RDYsIDB4OTFERCwgMHgwQTExLCAweDkxREUsIDB4MjFDMSwgMHg5MURGLCAweDFCMzksCisgICAgMHg5MUUxLCAweDFCM0EsIDB4OTFFMywgMHgwQkZDLCAweDkxRTQsIDB4MjFDNCwgMHg5MUU1LCAweDIxQzUsCisgICAgMHg5MUU2LCAweDBFODMsIDB4OTFFNywgMHgwNkY0LCAweDkxRUQsIDB4MjFDMiwgMHg5MUVFLCAweDIxQzMsCisgICAgMHg5MUYwLCAweDNCNzEsIDB4OTFGNSwgMHgxQjNELCAweDkxRjYsIDB4MUIzRSwgMHg5MUY3LCAweDNCNzIsCisgICAgMHg5MUZCLCAweDNCNzMsIDB4OTFGQywgMHgxQjNDLCAweDkxRkYsIDB4MUI0MCwgMHg5MjA2LCAweDIxQzYsCisgICAgMHg5MjA3LCAweDNCNzQsIDB4OTIwQSwgMHgyMUM4LCAweDkyMEQsIDB4MENCNywgMHg5MjBFLCAweDA1QTEsCisgICAgMHg5MjEwLCAweDIxQzcsIDB4OTIxMSwgMHgxQjQ0LCAweDkyMTQsIDB4MUI0MSwgMHg5MjE1LCAweDFCNDMsCisgICAgMHg5MjFFLCAweDFCM0YsIDB4OTIyOCwgMHgzQjc1LCAweDkyMjksIDB4MUI4QSwgMHg5MjJDLCAweDFCNDIsCisgICAgMHg5MjMzLCAweDNCNzYsIDB4OTIzNCwgMHgwRkIzLCAweDkyMzcsIDB4MDc4RSwgMHg5MjM4LCAweDNCNzcsCisgICAgMHg5MjM5LCAweDIxQ0YsIDB4OTIzQSwgMHgyMUM5LCAweDkyM0MsIDB4MjFDQiwgMHg5MjNGLCAweDFCNEMsCisgICAgMHg5MjQwLCAweDIxQ0EsIDB4OTI0MywgMHgzQjc4LCAweDkyNDQsIDB4MEMyRSwgMHg5MjQ1LCAweDFCNDcsCisgICAgMHg5MjQ3LCAweDNCNzksIDB4OTI0OCwgMHgxQjRBLCAweDkyNDksIDB4MUI0OCwgMHg5MjRCLCAweDFCNEQsCisgICAgMHg5MjRFLCAweDIxQ0MsIDB4OTI0RiwgMHgzQjdBLCAweDkyNTAsIDB4MUI0RSwgMHg5MjUxLCAweDIxQ0UsCisgICAgMHg5MjU3LCAweDFCNDYsIDB4OTI1OSwgMHgyMUNELCAweDkyNUEsIDB4MUI1MywgMHg5MjVCLCAweDA1MTYsCisgICAgMHg5MjVFLCAweDFCNDUsIDB4OTI2MCwgMHgzQjdCLCAweDkyNjIsIDB4MEQ0MSwgMHg5MjY0LCAweDFCNDksCisgICAgMHg5MjY2LCAweDA5QzgsIDB4OTI2NywgMHgyMUQwLCAweDkyNzEsIDB4MDdFRCwgMHg5Mjc3LCAweDIxRDIsCisgICAgMHg5Mjc4LCAweDIxRDMsIDB4OTI3RSwgMHgwRTc2LCAweDkyODAsIDB4MDZEQywgMHg5MjgzLCAweDA5NTAsCisgICAgMHg5Mjg1LCAweDBDOTQsIDB4OTI4OCwgMHgyMEFBLCAweDkyOTEsIDB4MEFBRiwgMHg5MjkzLCAweDFCNTEsCisgICAgMHg5Mjk1LCAweDFCNEIsIDB4OTI5NiwgMHgxQjUwLCAweDkyOTgsIDB4MEVDRiwgMHg5MjlBLCAweDBCRDQsCisgICAgMHg5MjlCLCAweDFCNTIsIDB4OTI5QywgMHgxQjRGLCAweDkyQTcsIDB4MjFEMSwgMHg5MkFELCAweDBBQUUsCisgICAgMHg5MkIzLCAweDM1NTQsIDB4OTJCNywgMHgxQjU2LCAweDkyQjksIDB4MUI1NSwgMHg5MkMyLCAweDNCN0MsCisgICAgMHg5MkNCLCAweDNCN0QsIDB4OTJDQywgMHgzQjdFLCAweDkyQ0YsIDB4MUI1NCwgMHg5MkQwLCAweDIxRDcsCisgICAgMHg5MkQyLCAweDBFNUQsIDB4OTJEMywgMHgyMURCLCAweDkyRDUsIDB4MjFEOSwgMHg5MkQ3LCAweDIxRDUsCisgICAgMHg5MkQ5LCAweDIxRDYsIDB4OTJERiwgMHgzQjdGLCAweDkyRTAsIDB4MjFEQSwgMHg5MkU0LCAweDA5ODUsCisgICAgMHg5MkU3LCAweDIxRDQsIDB4OTJFOSwgMHgxQjU3LCAweDkyRUEsIDB4MEUyRiwgMHg5MkVELCAweDA0RjYsCisgICAgMHg5MkYyLCAweDBEQjgsIDB4OTJGMywgMHgwQkIwLCAweDkyRjgsIDB4MDY5MiwgMHg5MkY5LCAweDIwQjAsCisgICAgMHg5MkZBLCAweDFCNTksIDB4OTJGQiwgMHgyMURFLCAweDkyRkMsIDB4MDdFRiwgMHg5MkZGLCAweDIxRTEsCisgICAgMHg5MzAyLCAweDIxRTMsIDB4OTMwNCwgMHgzNDVBLCAweDkzMDYsIDB4MDg3QSwgMHg5MzBELCAweDNCODAsCisgICAgMHg5MzBGLCAweDFCNTgsIDB4OTMxMCwgMHgwQTMzLCAweDkzMTUsIDB4M0I4MSwgMHg5MzE4LCAweDBBMzQsCisgICAgMHg5MzE5LCAweDFCNUMsIDB4OTMxQSwgMHgxQjVFLCAweDkzMUQsIDB4MjFFMiwgMHg5MzFFLCAweDIxRTAsCisgICAgMHg5MzFGLCAweDNCODIsIDB4OTMyMCwgMHgwOUUzLCAweDkzMjEsIDB4MjFERCwgMHg5MzIyLCAweDFCNUQsCisgICAgMHg5MzIzLCAweDFCNUYsIDB4OTMyNSwgMHgyMURDLCAweDkzMjYsIDB4MDZDQiwgMHg5MzI3LCAweDNCODMsCisgICAgMHg5MzI4LCAweDBEQjcsIDB4OTMyQiwgMHgwOTBFLCAweDkzMkMsIDB4MEZDOSwgMHg5MzJFLCAweDFCNUIsCisgICAgMHg5MzJGLCAweDA4NjgsIDB4OTMzMiwgMHgwRkU1LCAweDkzMzUsIDB4MUI2MSwgMHg5MzNBLCAweDFCNjAsCisgICAgMHg5MzNCLCAweDFCNjIsIDB4OTM0NCwgMHgxQjVBLCAweDkzNDcsIDB4M0I4NCwgMHg5MzQ4LCAweDIwQTksCisgICAgMHg5MzRBLCAweDM0NTgsIDB4OTM0QiwgMHgwQ0MxLCAweDkzNEQsIDB4MEM0RiwgMHg5MzUyLCAweDNCODUsCisgICAgMHg5MzU0LCAweDBCRjMsIDB4OTM1NiwgMHgxQjY3LCAweDkzNTcsIDB4MjFFNSwgMHg5MzVCLCAweDBCODEsCisgICAgMHg5MzVDLCAweDFCNjMsIDB4OTM2MCwgMHgxQjY0LCAweDkzNjUsIDB4M0I4NiwgMHg5MzZBLCAweDNCODcsCisgICAgMHg5MzZDLCAweDA3MDMsIDB4OTM2RCwgMHgzQjg4LCAweDkzNkUsIDB4MUI2NiwgMHg5MzcwLCAweDIxRTQsCisgICAgMHg5Mzc1LCAweDA3NjQsIDB4OTM3QywgMHgxQjY1LCAweDkzN0UsIDB4MDlDOSwgMHg5MzhDLCAweDA1RDcsCisgICAgMHg5Mzk0LCAweDFCNkIsIDB4OTM5NiwgMHgwODJGLCAweDkzOTcsIDB4MEFGQiwgMHg5MzlBLCAweDBCRTYsCisgICAgMHg5MzlCLCAweDNCODksIDB4OTNBNCwgMHgyMUU2LCAweDkzQTcsIDB4MDU5OSwgMHg5M0E5LCAweDNCOEIsCisgICAgMHg5M0FDLCAweDFCNjksIDB4OTNBRCwgMHgxQjZBLCAweDkzQUUsIDB4MEJERiwgMHg5M0IwLCAweDFCNjgsCisgICAgMHg5M0I5LCAweDFCNkMsIDB4OTNCQSwgMHgzQjhBLCAweDkzQzEsIDB4M0I4QywgMHg5M0MzLCAweDFCNzIsCisgICAgMHg5M0M2LCAweDIxRTcsIDB4OTNDOCwgMHgxQjc1LCAweDkzQ0EsIDB4M0I4RCwgMHg5M0QwLCAweDFCNzQsCisgICAgMHg5M0QxLCAweDBDMjcsIDB4OTNENiwgMHgxQjZELCAweDkzRDcsIDB4MUI2RSwgMHg5M0Q4LCAweDFCNzEsCisgICAgMHg5M0RELCAweDFCNzMsIDB4OTNERSwgMHgyMUU4LCAweDkzRTEsIDB4MDZCOCwgMHg5M0UyLCAweDNCOEUsCisgICAgMHg5M0U0LCAweDFCNzYsIDB4OTNFNSwgMHgxQjcwLCAweDkzRTgsIDB4MUI2RiwgMHg5M0Y4LCAweDIxRTksCisgICAgMHg5M0ZBLCAweDNCOEYsIDB4OTNGRCwgMHgzQjkwLCAweDk0MDMsIDB4MUI3QSwgMHg5NDA3LCAweDFCN0IsCisgICAgMHg5NDBGLCAweDNCOTEsIDB4OTQxMCwgMHgxQjdDLCAweDk0MTMsIDB4MUI3OSwgMHg5NDE0LCAweDFCNzgsCisgICAgMHg5NDE4LCAweDA5Q0EsIDB4OTQxOSwgMHgwQzgyLCAweDk0MUEsIDB4MUI3NywgMHg5NDIxLCAweDFCODAsCisgICAgMHg5NDJCLCAweDFCN0UsIDB4OTQzMSwgMHgyMUVBLCAweDk0MzQsIDB4M0I5MiwgMHg5NDM1LCAweDFCN0YsCisgICAgMHg5NDM2LCAweDFCN0QsIDB4OTQzOCwgMHgwQjU4LCAweDk0M0EsIDB4MUI4MSwgMHg5NDNGLCAweDNCOTMsCisgICAgMHg5NDQxLCAweDFCODIsIDB4OTQ0NCwgMHgxQjg0LCAweDk0NDUsIDB4MjFFQiwgMHg5NDQ4LCAweDIxRUMsCisgICAgMHg5NDUxLCAweDA2MTEsIDB4OTQ1MiwgMHgxQjgzLCAweDk0NTMsIDB4MEYwNiwgMHg5NDU1LCAweDNCOTQsCisgICAgMHg5NDVBLCAweDFCOEYsIDB4OTQ1QiwgMHgxQjg1LCAweDk0NUUsIDB4MUI4OCwgMHg5NDYwLCAweDFCODYsCisgICAgMHg5NDYyLCAweDFCODcsIDB4OTQ2QSwgMHgxQjg5LCAweDk0NkIsIDB4M0I5NSwgMHg5NDcwLCAweDFCOEIsCisgICAgMHg5NDcyLCAweDNCOTYsIDB4OTQ3NSwgMHgxQjhDLCAweDk0NzcsIDB4MUI4RCwgMHg5NDdDLCAweDFCOTAsCisgICAgMHg5NDdELCAweDFCOEUsIDB4OTQ3RSwgMHgxQjkxLCAweDk0N0YsIDB4MUI5MywgMHg5NDgxLCAweDFCOTIsCisgICAgMHg5NTc3LCAweDBCRDUsIDB4OTU3OCwgMHgzQjk3LCAweDk1ODAsIDB4MEVGMywgMHg5NTgyLCAweDFCOTQsCisgICAgMHg5NTgzLCAweDBBQjAsIDB4OTU4NywgMHgxQjk1LCAweDk1ODksIDB4MEUxNCwgMHg5NThBLCAweDFCOTYsCisgICAgMHg5NThCLCAweDA1ODksIDB4OTU4RiwgMHgwNERFLCAweDk1OTEsIDB4MDYxMywgMHg5NTkyLCAweDIxRUQsCisgICAgMHg5NTkzLCAweDA2MTIsIDB4OTU5NCwgMHgxQjk3LCAweDk1OTYsIDB4MUI5OCwgMHg5NTk4LCAweDFCOTksCisgICAgMHg5NTk5LCAweDFCOUEsIDB4OTVBMCwgMHgxQjlCLCAweDk1QTIsIDB4MDYxNCwgMHg5NUEzLCAweDA1QjMsCisgICAgMHg5NUE0LCAweDA3RjAsIDB4OTVBNSwgMHgwRDRBLCAweDk1QTYsIDB4M0I5OCwgMHg5NUE3LCAweDFCOUQsCisgICAgMHg5NUE4LCAweDFCOUMsIDB4OTVBOSwgMHgzQjk5LCAweDk1QUIsIDB4M0I5QSwgMHg5NUFELCAweDFCOUUsCisgICAgMHg5NUIxLCAweDM1NTUsIDB4OTVCMiwgMHgwNEZFLCAweDk1QjQsIDB4M0I5QiwgMHg5NUI5LCAweDFCQTEsCisgICAgMHg5NUJCLCAweDFCQTAsIDB4OTVCQywgMHgxQjlGLCAweDk1QkQsIDB4M0I5QywgMHg5NUJFLCAweDFCQTIsCisgICAgMHg5NUMzLCAweDFCQTUsIDB4OTVDNywgMHgwNDhCLCAweDk1Q0EsIDB4MUJBMywgMHg5NUNDLCAweDFCQTcsCisgICAgMHg5NUNELCAweDFCQTYsIDB4OTVENCwgMHgxQkE5LCAweDk1RDUsIDB4MUJBOCwgMHg5NUQ2LCAweDFCQUEsCisgICAgMHg5NUQ4LCAweDBDODYsIDB4OTVEQSwgMHgzQjlELCAweDk1REMsIDB4MUJBQiwgMHg5NUUxLCAweDFCQUMsCisgICAgMHg5NUUyLCAweDFCQUUsIDB4OTVFNSwgMHgxQkFELCAweDk2MUMsIDB4MERERSwgMHg5NjFELCAweDNCOUUsCisgICAgMHg5NjIxLCAweDFCQUYsIDB4OTYyOCwgMHgxQkIwLCAweDk2MkEsIDB4MDg1NSwgMHg5NjJFLCAweDFCQjEsCisgICAgMHg5NjJGLCAweDFCQjIsIDB4OTYzMiwgMHgwRTc3LCAweDk2M0IsIDB4MEFDRCwgMHg5NjNGLCAweDA0NjgsCisgICAgMHg5NjQwLCAweDBCMkIsIDB4OTY0MSwgMHgzQjlGLCAweDk2NDIsIDB4MUJCMywgMHg5NjQ0LCAweDBEREYsCisgICAgMHg5NjRCLCAweDFCQjYsIDB4OTY0QywgMHgxQkI0LCAweDk2NEQsIDB4MDdGMSwgMHg5NjRGLCAweDFCQjUsCisgICAgMHg5NjUwLCAweDA3NzYsIDB4OTY1OCwgMHgzQkEwLCAweDk2NUIsIDB4MEUxNSwgMHg5NjVDLCAweDFCQjgsCisgICAgMHg5NjVELCAweDFCQkEsIDB4OTY1RSwgMHgxQkI5LCAweDk2NUYsIDB4MUJCQiwgMHg5NjYyLCAweDA0QzMsCisgICAgMHg5NjYzLCAweDBBMUUsIDB4OTY2NCwgMHgwOTg2LCAweDk2NjUsIDB4MDYxNSwgMHg5NjY2LCAweDFCQkMsCisgICAgMHg5NjZBLCAweDBEMUMsIDB4OTY2QywgMHgxQkJFLCAweDk2NzAsIDB4MDRDNCwgMHg5NjcyLCAweDFCQkQsCisgICAgMHg5NjczLCAweDBCRTAsIDB4OTY3NSwgMHgwRjk1LCAweDk2NzYsIDB4MEM4MywgMHg5Njc3LCAweDFCQjcsCisgICAgMHg5Njc4LCAweDBGNkUsIDB4OTY3QSwgMHgwNzY1LCAweDk2N0QsIDB4MEY0NSwgMHg5Njg0LCAweDNCQTEsCisgICAgMHg5Njg1LCAweDA2RjEsIDB4OTY4NiwgMHgwRjdDLCAweDk2ODgsIDB4MDZGRSwgMHg5NjhBLCAweDBCNDIsCisgICAgMHg5NjhCLCAweDE4NkMsIDB4OTY4RCwgMHgxQkJGLCAweDk2OEUsIDB4MDU4QSwgMHg5NjhGLCAweDBBMzUsCisgICAgMHg5Njk0LCAweDA1QjQsIDB4OTY5NSwgMHgxQkMxLCAweDk2OTcsIDB4MUJDMiwgMHg5Njk4LCAweDFCQzAsCisgICAgMHg5Njk5LCAweDA3M0EsIDB4OTY5QiwgMHgwODRELCAweDk2OUMsIDB4MDlDQiwgMHg5NjlELCAweDIxRjAsCisgICAgMHg5NkEwLCAweDA0QzUsIDB4OTZBMywgMHgwRkExLCAweDk2QTQsIDB4M0JBMiwgMHg5NkE3LCAweDFCQzQsCisgICAgMHg5NkE4LCAweDFCMEIsIDB4OTZBOSwgMHgzQkEzLCAweDk2QUEsIDB4MUJDMywgMHg5NkFGLCAweDIxRjEsCisgICAgMHg5NkIwLCAweDFCQzcsIDB4OTZCMSwgMHgxQkM1LCAweDk2QjIsIDB4MUJDNiwgMHg5NkI0LCAweDFCQzgsCisgICAgMHg5NkI2LCAweDFCQzksIDB4OTZCNywgMHgwRkI0LCAweDk2QjgsIDB4MUJDQSwgMHg5NkI5LCAweDFCQ0IsCisgICAgMHg5NkJCLCAweDBBNkQsIDB4OTZCQywgMHgwRDRGLCAweDk2QzAsIDB4MEE0MywgMHg5NkMxLCAweDA2MjMsCisgICAgMHg5NkM0LCAweDBGMjQsIDB4OTZDNSwgMHgwNTZELCAweDk2QzYsIDB4MDk0MiwgMHg5NkM3LCAweDA3OEYsCisgICAgMHg5NkM5LCAweDFCQ0UsIDB4OTZDQiwgMHgxQkNELCAweDk2Q0MsIDB4MDhDMSwgMHg5NkNELCAweDFCQ0YsCisgICAgMHg5NkNFLCAweDFCQ0MsIDB4OTZEMSwgMHgwODc2LCAweDk2RDIsIDB4M0JBNCwgMHg5NkQ1LCAweDFCRDMsCisgICAgMHg5NkQ2LCAweDE5OTIsIDB4OTZEOSwgMHgxMEVCLCAweDk2REIsIDB4MEEzRCwgMHg5NkRDLCAweDFCRDEsCisgICAgMHg5NkRFLCAweDNCQTYsIDB4OTZFMiwgMHgwRjZELCAweDk2RTMsIDB4MENDOSwgMHg5NkU4LCAweDA0Q0QsCisgICAgMHg5NkU5LCAweDNCQTcsIDB4OTZFQSwgMHgwQTg3LCAweDk2RUIsIDB4MDhFMiwgMHg5NkYwLCAweDBFMDcsCisgICAgMHg5NkYxLCAweDNCQTgsIDB4OTZGMiwgMHgwNEUyLCAweDk2RjYsIDB4MEZCNSwgMHg5NkY3LCAweDBGNTUsCisgICAgMHg5NkY5LCAweDFCRDQsIDB4OTZGQiwgMHgwQzNGLCAweDk3MDAsIDB4MDkyNywgMHg5NzAyLCAweDNCQTksCisgICAgMHg5NzA0LCAweDFCRDUsIDB4OTcwNiwgMHgxQkQ2LCAweDk3MDcsIDB4MEExMiwgMHg5NzA4LCAweDFCRDcsCisgICAgMHg5NzA5LCAweDNCQUEsIDB4OTcwQSwgMHgwRkI2LCAweDk3MEQsIDB4MUJEMiwgMHg5NzBFLCAweDFCRDksCisgICAgMHg5NzBGLCAweDFCREIsIDB4OTcxMSwgMHgxQkRBLCAweDk3MTMsIDB4MUJEOCwgMHg5NzE2LCAweDFCREMsCisgICAgMHg5NzE5LCAweDFCREQsIDB4OTcxQywgMHgwQUZDLCAweDk3MUUsIDB4MDU2MiwgMHg5NzI0LCAweDFCREUsCisgICAgMHg5NzI3LCAweDBFQzQsIDB4OTcyQSwgMHgxQkRGLCAweDk3MzAsIDB4MUJFMCwgMHg5NzMyLCAweDBGRDAsCisgICAgMHg5NzMzLCAweDIxRjIsIDB4OTczOCwgMHgxNDE0LCAweDk3MzksIDB4MUJFMSwgMHg5NzNCLCAweDIxRjMsCisgICAgMHg5NzNELCAweDFCRTIsIDB4OTczRSwgMHgxQkUzLCAweDk3NDIsIDB4MUJFNywgMHg5NzQzLCAweDIxRjQsCisgICAgMHg5NzQ0LCAweDFCRTQsIDB4OTc0NiwgMHgxQkU1LCAweDk3NDgsIDB4MUJFNiwgMHg5NzQ5LCAweDFCRTgsCisgICAgMHg5NzRELCAweDIxRjUsIDB4OTc0RiwgMHgyMUY2LCAweDk3NTEsIDB4MjFGNywgMHg5NzUyLCAweDBBNjgsCisgICAgMHg5NzU1LCAweDIxRjgsIDB4OTc1NiwgMHgwRjAzLCAweDk3NTksIDB4MEE2OSwgMHg5NzVBLCAweDNCQUIsCisgICAgMHg5NzVDLCAweDFCRTksIDB4OTc1RSwgMHgwRDg3LCAweDk3NjAsIDB4MUJFQSwgMHg5NzYxLCAweDFEMDYsCisgICAgMHg5NzYyLCAweDBFRDgsIDB4OTc2MywgMHgzQkFDLCAweDk3NjQsIDB4MUJFQiwgMHg5NzY2LCAweDFCRUMsCisgICAgMHg5NzY4LCAweDFCRUQsIDB4OTc2OSwgMHgwNUI1LCAweDk3NkIsIDB4MUJFRiwgMHg5NzZELCAweDBBMUYsCisgICAgMHg5NzZFLCAweDNCQUQsIDB4OTc3MSwgMHgxQkYwLCAweDk3NzMsIDB4M0JBRSwgMHg5Nzc0LCAweDA2RkEsCisgICAgMHg5Nzc5LCAweDFCRjEsIDB4OTc3QSwgMHgxQkY1LCAweDk3N0MsIDB4MUJGMywgMHg5NzgxLCAweDFCRjQsCisgICAgMHg5Nzg0LCAweDA1RDEsIDB4OTc4NSwgMHgxQkYyLCAweDk3ODYsIDB4MUJGNiwgMHg5NzhCLCAweDFCRjcsCisgICAgMHg5NzhELCAweDA0OEMsIDB4OTc4RiwgMHgxQkY4LCAweDk3OTAsIDB4MUJGOSwgMHg5Nzk4LCAweDA5Q0MsCisgICAgMHg5NzlBLCAweDNCQUYsIDB4OTc5QywgMHgxQkZBLCAweDk3QTAsIDB4MDY2MSwgMHg5N0EyLCAweDNCQjAsCisgICAgMHg5N0EzLCAweDFCRkQsIDB4OTdBNiwgMHgxQkZDLCAweDk3QTgsIDB4MUJGQiwgMHg5N0FCLCAweDFBMzQsCisgICAgMHg5N0FELCAweDBFMkMsIDB4OTdCMywgMHgxQkZFLCAweDk3QjQsIDB4MUJGRiwgMHg5N0I1LCAweDNCQjEsCisgICAgMHg5N0I2LCAweDNCQjIsIDB4OTdDMywgMHgxQzAwLCAweDk3QzYsIDB4MUMwMSwgMHg5N0M4LCAweDFDMDIsCisgICAgMHg5N0NCLCAweDFDMDMsIDB4OTdEMywgMHgwNjE2LCAweDk3RDksIDB4M0JCMywgMHg5N0RDLCAweDFDMDQsCisgICAgMHg5N0RFLCAweDNCQjQsIDB4OTdFRCwgMHgxQzA1LCAweDk3RUUsIDB4MENEOSwgMHg5N0YyLCAweDFDMDcsCisgICAgMHg5N0YzLCAweDA1M0IsIDB4OTdGNCwgMHgzQkI1LCAweDk3RjUsIDB4MUMwQSwgMHg5N0Y2LCAweDFDMDksCisgICAgMHg5N0ZCLCAweDA0QzYsIDB4OTdGRiwgMHgwNkI5LCAweDk4MDEsIDB4MEUxNywgMHg5ODAyLCAweDBCRDYsCisgICAgMHg5ODAzLCAweDA4MTIsIDB4OTgwNSwgMHgwN0YyLCAweDk4MDYsIDB4MDk3MSwgMHg5ODA4LCAweDBBMjIsCisgICAgMHg5ODBBLCAweDNCQjYsIDB4OTgwQywgMHgxQzBDLCAweDk4MEUsIDB4M0JCNywgMHg5ODBGLCAweDFDMEIsCisgICAgMHg5ODEwLCAweDBGMkMsIDB4OTgxMSwgMHgwNjI0LCAweDk4MTIsIDB4MEQ2NiwgMHg5ODEzLCAweDBDQjQsCisgICAgMHg5ODE3LCAweDBBNDIsIDB4OTgxOCwgMHgwRjk2LCAweDk4MUEsIDB4MDczMSwgMHg5ODFFLCAweDNCQjgsCisgICAgMHg5ODIxLCAweDFDMEYsIDB4OTgyMywgMHgzQkI5LCAweDk4MjQsIDB4MUMwRSwgMHg5ODJCLCAweDNCQkEsCisgICAgMHg5ODJDLCAweDBFNzksIDB4OTgyRCwgMHgwQzg0LCAweDk4MzAsIDB4MUU3MywgMHg5ODM0LCAweDA0RjIsCisgICAgMHg5ODM3LCAweDFDMTAsIDB4OTgzOCwgMHgxQzBELCAweDk4MzksIDB4MzdCMywgMHg5ODNCLCAweDBEQzMsCisgICAgMHg5ODNDLCAweDBGNTQsIDB4OTgzRCwgMHgxQzExLCAweDk4M0UsIDB4M0JCQiwgMHg5ODQ2LCAweDFDMTIsCisgICAgMHg5ODRCLCAweDFDMTQsIDB4OTg0QywgMHgwQjRBLCAweDk4NEQsIDB4MDVCOSwgMHg5ODRFLCAweDA1QkEsCisgICAgMHg5ODRGLCAweDFDMTMsIDB4OTg1MiwgMHgzQkJDLCAweDk4NTMsIDB4M0JCRCwgMHg5ODU0LCAweDA2MjUsCisgICAgMHg5ODU1LCAweDA3NjYsIDB4OTg1NywgMHgyMUY5LCAweDk4NTgsIDB4MDYyNiwgMHg5ODU5LCAweDNCQkUsCisgICAgMHg5ODVBLCAweDFFNDgsIDB4OTg1QiwgMHgwQzM5LCAweDk4NUUsIDB4MEZBOCwgMHg5ODY1LCAweDIxRkEsCisgICAgMHg5ODY3LCAweDA3OTAsIDB4OTg2QiwgMHgxQzE1LCAweDk4NkMsIDB4M0JCRiwgMHg5ODZGLCAweDFDMTYsCisgICAgMHg5ODcwLCAweDFDMTcsIDB4OTg3MSwgMHgxQzE4LCAweDk4NzMsIDB4MUMxQSwgMHg5ODc0LCAweDFDMTksCisgICAgMHg5OEE4LCAweDBERTksIDB4OThBQSwgMHgxQzFCLCAweDk4QUYsIDB4MUMxQywgMHg5OEIxLCAweDFDMUQsCisgICAgMHg5OEI2LCAweDFDMUUsIDB4OThCOCwgMHgzQkMwLCAweDk4QkEsIDB4M0JDMSwgMHg5OEJGLCAweDNCQzIsCisgICAgMHg5OEMzLCAweDFDMjAsIDB4OThDNCwgMHgxQzFGLCAweDk4QzYsIDB4MUMyMSwgMHg5OEM4LCAweDNCQzMsCisgICAgMHg5OERCLCAweDBEODgsIDB4OThEQywgMHgxODM5LCAweDk4REYsIDB4MDlFRiwgMHg5OEUwLCAweDM2MTgsCisgICAgMHg5OEUyLCAweDA2NEMsIDB4OThFNSwgMHgzQkM0LCAweDk4RTksIDB4MUMyMiwgMHg5OEVCLCAweDFDMjMsCisgICAgMHg5OEVELCAweDEwQzEsIDB4OThFRSwgMHgxNERBLCAweDk4RUYsIDB4MEQ2NywgMHg5OEYyLCAweDA0QkYsCisgICAgMHg5OEY0LCAweDA0N0YsIDB4OThGQywgMHgwOEMyLCAweDk4RkQsIDB4MEU1RSwgMHg5OEZFLCAweDA5RTYsCisgICAgMHg5OTAzLCAweDFDMjQsIDB4OTkwNSwgMHgwRUVCLCAweDk5MDksIDB4MUMyNSwgMHg5OTBBLCAweDBGNDYsCisgICAgMHg5OTBDLCAweDA0RTQsIDB4OTkxMCwgMHgwODhGLCAweDk5MTIsIDB4MUMyNiwgMHg5OTEzLCAweDA1NkUsCisgICAgMHg5OTE0LCAweDFDMjcsIDB4OTkxOCwgMHgxQzI4LCAweDk5MUQsIDB4MUMyQSwgMHg5OTFFLCAweDFDMkIsCisgICAgMHg5OTIwLCAweDFDMkQsIDB4OTkyMSwgMHgxQzI5LCAweDk5MjQsIDB4MUMyQywgMHg5OTI3LCAweDIxRkQsCisgICAgMHg5OTI4LCAweDA2MTcsIDB4OTkyQywgMHgxQzJFLCAweDk5MkUsIDB4MUMyRiwgMHg5OTMyLCAweDNCQzUsCisgICAgMHg5OTMzLCAweDNCQzYsIDB4OTkzRCwgMHgxQzMwLCAweDk5M0UsIDB4MUMzMSwgMHg5OTQwLCAweDNCQzcsCisgICAgMHg5OTQyLCAweDFDMzIsIDB4OTk0NSwgMHgxQzM0LCAweDk5NDksIDB4MUMzMywgMHg5OTRCLCAweDFDMzYsCisgICAgMHg5OTRDLCAweDFDMzksIDB4OTk0RCwgMHgzQkM4LCAweDk5NTAsIDB4MUMzNSwgMHg5OTUxLCAweDFDMzcsCisgICAgMHg5OTUyLCAweDFDMzgsIDB4OTk1NSwgMHgxQzNBLCAweDk5NTcsIDB4MDZCQSwgMHg5OTVDLCAweDNCQzksCisgICAgMHg5OTVGLCAweDNCQ0EsIDB4OTk5NiwgMHgwOTFGLCAweDk5OTcsIDB4MUMzQiwgMHg5OTk4LCAweDFDM0MsCisgICAgMHg5OTk5LCAweDA3RjMsIDB4OTk5RSwgMHgyMUZGLCAweDk5QTUsIDB4MUMzRCwgMHg5OUE4LCAweDA1OUMsCisgICAgMHg5OUFDLCAweDBEMDUsIDB4OTlBRCwgMHgxQzNFLCAweDk5QUUsIDB4MUMzRiwgMHg5OUIxLCAweDNCQ0IsCisgICAgMHg5OUIzLCAweDBCOTgsIDB4OTlCNCwgMHgwQ0MzLCAweDk5QjksIDB4M0JDQywgMHg5OUJBLCAweDNCQ0QsCisgICAgMHg5OUJDLCAweDFDNDAsIDB4OTlDMSwgMHgwRDMzLCAweDk5QzQsIDB4MEIyQywgMHg5OUM1LCAweDA0RkEsCisgICAgMHg5OUM2LCAweDA2RTYsIDB4OTlDOCwgMHgwNkU3LCAweDk5QzksIDB4M0JDRSwgMHg5OUQwLCAweDBCQjEsCisgICAgMHg5OUQxLCAweDFDNDUsIDB4OTlEMiwgMHgwNkU4LCAweDk5RDUsIDB4MDU2RiwgMHg5OUQ4LCAweDFDNDQsCisgICAgMHg5OURCLCAweDFDNDIsIDB4OTlERCwgMHgxQzQzLCAweDk5REYsIDB4MUM0MSwgMHg5OUUyLCAweDFDNEYsCisgICAgMHg5OUVELCAweDFDNDYsIDB4OTlFRSwgMHgxQzQ3LCAweDk5RjEsIDB4MUM0OCwgMHg5OUYyLCAweDFDNDksCisgICAgMHg5OUY4LCAweDFDNEIsIDB4OTlGQiwgMHgxQzRBLCAweDk5RkYsIDB4MDk2MywgMHg5QTAxLCAweDFDNEMsCisgICAgMHg5QTAyLCAweDNCQ0YsIDB4OUEwNSwgMHgxQzRFLCAweDlBMDgsIDB4MzdCQSwgMHg5QTBFLCAweDA2NEQsCisgICAgMHg5QTBGLCAweDFDNEQsIDB4OUExMiwgMHgwQUZELCAweDlBMTMsIDB4MDc2NywgMHg5QTE2LCAweDNCRDAsCisgICAgMHg5QTE5LCAweDFDNTAsIDB4OUEyNCwgMHgzQkQxLCAweDlBMjcsIDB4M0JEMiwgMHg5QTI4LCAweDBCMkQsCisgICAgMHg5QTJCLCAweDFDNTEsIDB4OUEyRCwgMHgzQkQzLCAweDlBMkUsIDB4M0JENCwgMHg5QTMwLCAweDBDODUsCisgICAgMHg5QTM2LCAweDNCRDUsIDB4OUEzNywgMHgxQzUyLCAweDlBMzgsIDB4M0JENiwgMHg5QTNFLCAweDFDNTcsCisgICAgMHg5QTQwLCAweDFDNTUsIDB4OUE0MiwgMHgxQzU0LCAweDlBNDMsIDB4MUM1NiwgMHg5QTQ1LCAweDFDNTMsCisgICAgMHg5QTRBLCAweDNCRDcsIDB4OUE0RCwgMHgxQzU5LCAweDlBNEUsIDB4MjIwMCwgMHg5QTUyLCAweDFFMkYsCisgICAgMHg5QTU1LCAweDFDNTgsIDB4OUE1NiwgMHgzQkQ4LCAweDlBNTcsIDB4MUM1QiwgMHg5QTVBLCAweDA2QkIsCisgICAgMHg5QTVCLCAweDFDNUEsIDB4OUE1RiwgMHgxQzVDLCAweDlBNjIsIDB4MUM1RCwgMHg5QTY0LCAweDFDNUYsCisgICAgMHg5QTY1LCAweDFDNUUsIDB4OUE2OSwgMHgxQzYwLCAweDlBNkEsIDB4MUM2MiwgMHg5QTZCLCAweDFDNjEsCisgICAgMHg5QUE4LCAweDA4MEUsIDB4OUFBRCwgMHgxQzYzLCAweDlBQjAsIDB4MUM2NCwgMHg5QUI1LCAweDNCRDksCisgICAgMHg5QUI2LCAweDNCREEsIDB4OUFCOCwgMHgwNTlBLCAweDlBQkMsIDB4MUM2NSwgMHg5QUMwLCAweDFDNjYsCisgICAgMHg5QUM0LCAweDBBMzcsIDB4OUFDRiwgMHgxQzY3LCAweDlBRDEsIDB4MUM2OCwgMHg5QUQzLCAweDFDNjksCisgICAgMHg5QUQ0LCAweDFDNkEsIDB4OUFEOCwgMHgwN0Y0LCAweDlBRDksIDB4MjIwMSwgMHg5QURDLCAweDIyMDIsCisgICAgMHg5QURFLCAweDFDNkIsIDB4OUFERiwgMHgxQzZDLCAweDlBRTIsIDB4MUM2RCwgMHg5QUUzLCAweDFDNkUsCisgICAgMHg5QUU2LCAweDFDNkYsIDB4OUFFQSwgMHgwRDQ1LCAweDlBRUIsIDB4MUM3MSwgMHg5QUVELCAweDBEOTgsCisgICAgMHg5QUVFLCAweDFDNzIsIDB4OUFFRiwgMHgxQzcwLCAweDlBRjEsIDB4MUM3NCwgMHg5QUY0LCAweDFDNzMsCisgICAgMHg5QUY3LCAweDFDNzUsIDB4OUFGOSwgMHgzQkRCLCAweDlBRkIsIDB4MUM3NiwgMHg5QjAzLCAweDNCREMsCisgICAgMHg5QjA2LCAweDFDNzcsIDB4OUIxOCwgMHgxQzc4LCAweDlCMUEsIDB4MUM3OSwgMHg5QjFGLCAweDFDN0EsCisgICAgMHg5QjIwLCAweDNCREQsIDB4OUIyMiwgMHgxQzdCLCAweDlCMjMsIDB4MUM3QywgMHg5QjI1LCAweDFDN0QsCisgICAgMHg5QjI3LCAweDFDN0UsIDB4OUIyOCwgMHgxQzdGLCAweDlCMjksIDB4MUM4MCwgMHg5QjJBLCAweDFDODEsCisgICAgMHg5QjJELCAweDM0M0MsIDB4OUIyRSwgMHgxQzgyLCAweDlCMkYsIDB4MUM4MywgMHg5QjMxLCAweDE0RDQsCisgICAgMHg5QjMyLCAweDFDODQsIDB4OUIzMywgMHgzQkRFLCAweDlCMzQsIDB4M0JERiwgMHg5QjNCLCAweDE3QTksCisgICAgMHg5QjNDLCAweDA2NEUsIDB4OUI0MSwgMHgwNTdGLCAweDlCNDIsIDB4MDgyMiwgMHg5QjQzLCAweDFDODYsCisgICAgMHg5QjQ0LCAweDFDODUsIDB4OUI0NSwgMHgwRUIxLCAweDlCNEQsIDB4MUM4OCwgMHg5QjRFLCAweDFDODksCisgICAgMHg5QjRGLCAweDFDODcsIDB4OUI1MSwgMHgxQzhBLCAweDlCNTQsIDB4MEU5MCwgMHg5QjU4LCAweDFDOEIsCisgICAgMHg5QjVBLCAweDA2OTUsIDB4OUI2RiwgMHgwRkNCLCAweDlCNzIsIDB4MjIwNCwgMHg5QjczLCAweDNCRTAsCisgICAgMHg5Qjc0LCAweDFDOEMsIDB4OUI3NSwgMHgyMjAzLCAweDlCNzksIDB4M0JFMSwgMHg5QjgzLCAweDFDOEUsCisgICAgMHg5QjhFLCAweDA0ODIsIDB4OUI4RiwgMHgyMjA1LCAweDlCOTEsIDB4MUM4RiwgMHg5QjkyLCAweDBERkIsCisgICAgMHg5QjkzLCAweDFDOEQsIDB4OUI5NiwgMHgxQzkwLCAweDlCOTcsIDB4MUM5MSwgMHg5QjlGLCAweDFDOTIsCisgICAgMHg5QkEwLCAweDFDOTMsIDB4OUJBNywgMHgzQkUyLCAweDlCQTgsIDB4MUM5NCwgMHg5QkFBLCAweDBFOUMsCisgICAgMHg5QkFCLCAweDA4N0IsIDB4OUJBRCwgMHgwODZBLCAweDlCQUUsIDB4MEFCMSwgMHg5QkIxLCAweDIyMDYsCisgICAgMHg5QkI0LCAweDFDOTUsIDB4OUJCOSwgMHgxQzk4LCAweDlCQkIsIDB4MjIwNywgMHg5QkMwLCAweDFDOTYsCisgICAgMHg5QkMxLCAweDNCRTMsIDB4OUJDNiwgMHgxQzk5LCAweDlCQzcsIDB4M0JFNCwgMHg5QkM5LCAweDA3QTUsCisgICAgMHg5QkNBLCAweDFDOTcsIDB4OUJDRiwgMHgxQzlBLCAweDlCRDEsIDB4MUM5QiwgMHg5QkQyLCAweDFDOUMsCisgICAgMHg5QkQ0LCAweDFDQTAsIDB4OUJENiwgMHgwODc4LCAweDlCRDcsIDB4M0JFNSwgMHg5QkRCLCAweDBCNDQsCisgICAgMHg5QkRGLCAweDM3QkYsIDB4OUJFMSwgMHgxQ0ExLCAweDlCRTIsIDB4MUM5RSwgMHg5QkUzLCAweDFDOUQsCisgICAgMHg5QkU0LCAweDFDOUYsIDB4OUJFNywgMHgzQkU2LCAweDlCRTgsIDB4MDczNSwgMHg5QkVCLCAweDNCRTcsCisgICAgMHg5QkYwLCAweDFDQTUsIDB4OUJGMSwgMHgxQ0E0LCAweDlCRjIsIDB4MUNBMywgMHg5QkY1LCAweDA0NzcsCisgICAgMHg5QkY3LCAweDNCRTgsIDB4OUJGQSwgMHgzQkU5LCAweDlCRkQsIDB4M0JFQSwgMHg5QzAwLCAweDIyMDgsCisgICAgMHg5QzA0LCAweDFDQUYsIDB4OUMwNiwgMHgxQ0FCLCAweDlDMDgsIDB4MUNBQywgMHg5QzA5LCAweDFDQTgsCisgICAgMHg5QzBBLCAweDFDQUUsIDB4OUMwQiwgMHgzQkVCLCAweDlDMEMsIDB4MUNBQSwgMHg5QzBELCAweDA1QzAsCisgICAgMHg5QzEwLCAweDBGRjIsIDB4OUMxMiwgMHgxQ0FELCAweDlDMTMsIDB4MUNBOSwgMHg5QzE0LCAweDFDQTcsCisgICAgMHg5QzE1LCAweDFDQTYsIDB4OUMxQiwgMHgxQ0IxLCAweDlDMjEsIDB4MUNCNCwgMHg5QzI0LCAweDFDQjMsCisgICAgMHg5QzI1LCAweDFDQjIsIDB4OUMyNywgMHgzQkVDLCAweDlDMkEsIDB4M0JFRCwgMHg5QzJELCAweDBEQkIsCisgICAgMHg5QzJFLCAweDFDQjAsIDB4OUMyRiwgMHgwNEI3LCAweDlDMzAsIDB4MUNCNSwgMHg5QzMyLCAweDFDQjcsCisgICAgMHg5QzM2LCAweDNCRUUsIDB4OUMzOSwgMHgwNUNELCAweDlDM0EsIDB4MUNBMiwgMHg5QzNCLCAweDA0RDksCisgICAgMHg5QzNFLCAweDFDQjksIDB4OUM0MSwgMHgzQkVGLCAweDlDNDYsIDB4MUNCOCwgMHg5QzQ3LCAweDFDQjYsCisgICAgMHg5QzQ4LCAweDBCNkIsIDB4OUM1MiwgMHgwRTlFLCAweDlDNTMsIDB4M0JGMCwgMHg5QzU3LCAweDBGQTIsCisgICAgMHg5QzVBLCAweDFDQkEsIDB4OUM2MCwgMHgxQ0JCLCAweDlDNjMsIDB4M0JGMSwgMHg5QzY3LCAweDFDQkMsCisgICAgMHg5QzZBLCAweDNCRjIsIDB4OUM3NiwgMHgxQ0JELCAweDlDNzcsIDB4M0JGMywgMHg5Qzc4LCAweDFDQkUsCisgICAgMHg5Q0U1LCAweDBCRDcsIDB4OUNFNywgMHgxQ0JGLCAweDlDRTksIDB4MEQ0QiwgMHg5Q0VCLCAweDFDQzQsCisgICAgMHg5Q0VDLCAweDFDQzAsIDB4OUNGMCwgMHgxQ0MxLCAweDlDRjMsIDB4MEU1RiwgMHg5Q0Y0LCAweDBFRDAsCisgICAgMHg5Q0Y2LCAweDBDQTgsIDB4OUQwMiwgMHgzQkY0LCAweDlEMDMsIDB4MUNDNSwgMHg5RDA2LCAweDFDQzYsCisgICAgMHg5RDA3LCAweDBDOTYsIDB4OUQwOCwgMHgxQ0MzLCAweDlEMDksIDB4MUNDMiwgMHg5RDBFLCAweDA1MkEsCisgICAgMHg5RDEyLCAweDFDQ0UsIDB4OUQxNSwgMHgxQ0NELCAweDlEMUIsIDB4MDUxNywgMHg5RDFGLCAweDFDQ0IsCisgICAgMHg5RDIzLCAweDFDQ0EsIDB4OUQyNiwgMHgxQ0M4LCAweDlEMjgsIDB4MDVEOSwgMHg5RDJBLCAweDFDQzcsCisgICAgMHg5RDJCLCAweDA4REUsIDB4OUQyQywgMHgwNTI5LCAweDlEM0IsIDB4MDdGNSwgMHg5RDNFLCAweDFDRDEsCisgICAgMHg5RDNGLCAweDFDRDAsIDB4OUQ0MSwgMHgxQ0NGLCAweDlENDIsIDB4M0JGNSwgMHg5RDQ0LCAweDFDQ0MsCisgICAgMHg5RDQ2LCAweDFDRDIsIDB4OUQ0NywgMHgzQkY2LCAweDlENDgsIDB4MUNEMywgMHg5RDUwLCAweDFDRDgsCisgICAgMHg5RDUxLCAweDFDRDcsIDB4OUQ1OSwgMHgxQ0Q5LCAweDlENUMsIDB4MDRDRiwgMHg5RDVELCAweDFDRDQsCisgICAgMHg5RDVFLCAweDFDRDUsIDB4OUQ2MCwgMHgwODA2LCAweDlENjEsIDB4MEVDNSwgMHg5RDYzLCAweDNCRjcsCisgICAgMHg5RDY0LCAweDFDRDYsIDB4OUQ2OSwgMHgzQkY4LCAweDlENkIsIDB4MjIwQSwgMHg5RDZDLCAweDBFNjAsCisgICAgMHg5RDZGLCAweDFDREUsIDB4OUQ3MCwgMHgyMjA5LCAweDlENzIsIDB4MUNEQSwgMHg5RDdBLCAweDFDREYsCisgICAgMHg5RDdDLCAweDNCRjksIDB4OUQ3RSwgMHgzQkZBLCAweDlEODcsIDB4MUNEQywgMHg5RDg5LCAweDFDREIsCisgICAgMHg5RDhELCAweDNCRkIsIDB4OUQ4RiwgMHgwNzMyLCAweDlEOUEsIDB4MUNFMCwgMHg5REE0LCAweDFDRTEsCisgICAgMHg5REE5LCAweDFDRTIsIDB4OURBQiwgMHgxQ0RELCAweDlEQUYsIDB4MUNDOSwgMHg5REIxLCAweDNCRkMsCisgICAgMHg5REIyLCAweDFDRTMsIDB4OURCNCwgMHgwQkZELCAweDlEQjgsIDB4MUNFNywgMHg5REJBLCAweDFDRTgsCisgICAgMHg5REJCLCAweDFDRTYsIDB4OURDMSwgMHgxQ0U1LCAweDlEQzIsIDB4MUNFQiwgMHg5REMzLCAweDNCRkQsCisgICAgMHg5REM0LCAweDFDRTQsIDB4OURDNiwgMHgxQ0U5LCAweDlEQzcsIDB4M0JGRSwgMHg5RENGLCAweDFDRUEsCisgICAgMHg5REQzLCAweDFDRUQsIDB4OURENiwgMHgzQkZGLCAweDlERDcsIDB4MURERSwgMHg5REQ5LCAweDFDRUMsCisgICAgMHg5RERGLCAweDNDMDAsIDB4OURFNiwgMHgxQ0VGLCAweDlERUIsIDB4M0MwMSwgMHg5REVELCAweDFDRjAsCisgICAgMHg5REVGLCAweDFDRjEsIDB4OURGMiwgMHgwRkVGLCAweDlERjQsIDB4M0MwMiwgMHg5REY4LCAweDFDRUUsCisgICAgMHg5REY5LCAweDBCNEIsIDB4OURGQSwgMHgwODVELCAweDlERkQsIDB4MUNGMiwgMHg5RTE1LCAweDNDMDMsCisgICAgMHg5RTE5LCAweDIyMEMsIDB4OUUxQSwgMHgxQ0YzLCAweDlFMUIsIDB4MUNGNCwgMHg5RTFELCAweDNDMDQsCisgICAgMHg5RTFFLCAweDFDRjUsIDB4OUU3NSwgMHgxQ0Y2LCAweDlFNzgsIDB4MDc2OCwgMHg5RTc5LCAweDFDRjcsCisgICAgMHg5RTdDLCAweDFERkQsIDB4OUU3RCwgMHgxQ0Y4LCAweDlFN0YsIDB4MDhEQiwgMHg5RTgxLCAweDFDRjksCisgICAgMHg5RTg4LCAweDFDRkEsIDB4OUU4QiwgMHgxQ0ZCLCAweDlFOEMsIDB4MUNGQywgMHg5RTkxLCAweDFDRkYsCisgICAgMHg5RTkyLCAweDFDRkQsIDB4OUU5MywgMHgwRkUyLCAweDlFOTUsIDB4MUNGRSwgMHg5RTk3LCAweDBGQjcsCisgICAgMHg5RTlELCAweDFEMDAsIDB4OUU5RiwgMHgwRkEzLCAweDlFQTQsIDB4M0MwNSwgMHg5RUE1LCAweDFEMDEsCisgICAgMHg5RUE2LCAweDBEMzQsIDB4OUVBOCwgMHgzQzA2LCAweDlFQTksIDB4MUQwMiwgMHg5RUFBLCAweDFEMDQsCisgICAgMHg5RUFDLCAweDNDMDcsIDB4OUVBRCwgMHgxRDA1LCAweDlFQjQsIDB4MUUwMiwgMHg5RUI1LCAweDFFNzUsCisgICAgMHg5RUI4LCAweDFEMDMsIDB4OUVCOSwgMHgwN0ZGLCAweDlFQkEsIDB4MEVEOSwgMHg5RUJCLCAweDBFOTEsCisgICAgMHg5RUJDLCAweDEyODQsIDB4OUVCRSwgMHgxNEZGLCAweDlFQkYsIDB4MEVBOSwgMHg5RUMzLCAweDM0MEIsCisgICAgMHg5RUM0LCAweDA1MkIsIDB4OUVDQywgMHgxRDA3LCAweDlFQ0QsIDB4MDY2QSwgMHg5RUNFLCAweDFEMDgsCisgICAgMHg5RUNGLCAweDFEMDksIDB4OUVEMCwgMHgxRDBBLCAweDlFRDEsIDB4MjIwRCwgMHg5RUQyLCAweDA4MDcsCisgICAgMHg5RUQ0LCAweDFEMEIsIDB4OUVEOCwgMHgxNjBELCAweDlFRDksIDB4MEVFNywgMHg5RURCLCAweDBCNDMsCisgICAgMHg5RURDLCAweDFEMEMsIDB4OUVERCwgMHgxRDBFLCAweDlFREUsIDB4MUQwRCwgMHg5RUUwLCAweDFEMEYsCisgICAgMHg5RUU1LCAweDFEMTAsIDB4OUVFNywgMHgzQzA4LCAweDlFRTgsIDB4MUQxMSwgMHg5RUVFLCAweDNDMDksCisgICAgMHg5RUVGLCAweDFEMTIsIDB4OUVGNCwgMHgxRDEzLCAweDlFRjYsIDB4MUQxNCwgMHg5RUY3LCAweDFEMTUsCisgICAgMHg5RUY5LCAweDFEMTYsIDB4OUVGQiwgMHgxRDE3LCAweDlFRkMsIDB4MUQxOCwgMHg5RUZELCAweDFEMTksCisgICAgMHg5RjA3LCAweDFEMUEsIDB4OUYwOCwgMHgxRDFCLCAweDlGMEUsIDB4MEMxRSwgMHg5RjEwLCAweDNDMEEsCisgICAgMHg5RjEyLCAweDNDMEIsIDB4OUYxMywgMHgwNzkxLCAweDlGMTUsIDB4MUQxRCwgMHg5RjE3LCAweDNDMEMsCisgICAgMHg5RjE5LCAweDNDMEQsIDB4OUYyMCwgMHgwQUNGLCAweDlGMjEsIDB4MUQxRSwgMHg5RjJDLCAweDFEMUYsCisgICAgMHg5RjJGLCAweDNDMEUsIDB4OUYzNywgMHgzQzBGLCAweDlGMzksIDB4M0MxMCwgMHg5RjNCLCAweDBEOTMsCisgICAgMHg5RjNFLCAweDFEMjAsIDB4OUY0MSwgMHgzQzExLCAweDlGNDUsIDB4M0MxMiwgMHg5RjRBLCAweDFEMjEsCisgICAgMHg5RjRCLCAweDE3MEEsIDB4OUY0RSwgMHgxQTdCLCAweDlGNEYsIDB4MUMwNiwgMHg5RjUyLCAweDFEMjIsCisgICAgMHg5RjU0LCAweDFEMjMsIDB4OUY1NywgMHgzQzEzLCAweDlGNUYsIDB4MUQyNSwgMHg5RjYwLCAweDFEMjYsCisgICAgMHg5RjYxLCAweDFEMjcsIDB4OUY2MiwgMHgwRkI4LCAweDlGNjMsIDB4MUQyNCwgMHg5RjY2LCAweDFEMjgsCisgICAgMHg5RjY3LCAweDFEMjksIDB4OUY2OCwgMHgzQzE0LCAweDlGNkEsIDB4MUQyQiwgMHg5RjZDLCAweDFEMkEsCisgICAgMHg5RjcxLCAweDNDMTUsIDB4OUY3MiwgMHgxRDJELCAweDlGNzUsIDB4M0MxNiwgMHg5Rjc2LCAweDFEMkUsCisgICAgMHg5Rjc3LCAweDFEMkMsIDB4OUY4RCwgMHgwRjdFLCAweDlGOTAsIDB4M0MxNywgMHg5Rjk0LCAweDNDMTgsCisgICAgMHg5Rjk1LCAweDFEMkYsIDB4OUY5QywgMHgxRDMwLCAweDlGOUQsIDB4MTcyNywgMHg5RkEwLCAweDFEMzEsCisgICAgMHg5RkEyLCAweDNDMTksIDB4RjkyOSwgMHgyMTI5LCAweEY5REMsIDB4MjFFRSwgMHhGQTBFLCAweDIwREEsCisgICAgMHhGQTBGLCAweDIwRTUsIDB4RkExMCwgMHgyMEU2LCAweEZBMTEsIDB4MjBGQiwgMHhGQTEyLCAweDIxMjEsCisgICAgMHhGQTEzLCAweDIxMzEsIDB4RkExNCwgMHgyMTMzLCAweEZBMTUsIDB4MjE1RSwgMHhGQTE2LCAweDIxNjQsCisgICAgMHhGQTE3LCAweDIxN0IsIDB4RkExOCwgMHgyMTgzLCAweEZBMTksIDB4MjE4NCwgMHhGQTFBLCAweDIxODUsCisgICAgMHhGQTFCLCAweDIxODcsIDB4RkExQywgMHgyMThCLCAweEZBMUQsIDB4MjE4RSwgMHhGQTFFLCAweDIxOTcsCisgICAgMHhGQTFGLCAweDIxQTIsIDB4RkEyMCwgMHgyMUE0LCAweEZBMjEsIDB4MjFBNSwgMHhGQTIyLCAweDIxQUUsCisgICAgMHhGQTIzLCAweDIxQjYsIDB4RkEyNCwgMHgyMUI4LCAweEZBMjUsIDB4MjFCOSwgMHhGQTI2LCAweDIxQkMsCisgICAgMHhGQTI3LCAweDIxRDgsIDB4RkEyOCwgMHgyMURGLCAweEZBMjksIDB4MjFFRiwgMHhGQTJBLCAweDIxRkIsCisgICAgMHhGQTJCLCAweDIxRkMsIDB4RkEyQywgMHgyMUZFLCAweEZBMkQsIDB4MjIwQiwgMHhGQjAwLCAweDI0OEUsCisgICAgMHhGQjAxLCAweDAwNzAsIDB4RkIwMiwgMHgwMDcxLCAweEZCMDMsIDB4MjQ4RiwgMHhGQjA0LCAweDI0OTAsCisgICAgMHhGRTMwLCAweDFFREEsIDB4RkUzMSwgMHgxRUQ0LCAweEZFMzIsIDB4MUVENSwgMHhGRTMzLCAweDFFRDIsCisgICAgMHhGRTM1LCAweDFFREIsIDB4RkUzNiwgMHgxRURDLCAweEZFMzcsIDB4MUVFMSwgMHhGRTM4LCAweDFFRTIsCisgICAgMHhGRTM5LCAweDFFREQsIDB4RkUzQSwgMHgxRURFLCAweEZFM0IsIDB4MUVFQiwgMHhGRTNDLCAweDFFRUMsCisgICAgMHhGRTNELCAweDFFRTUsIDB4RkUzRSwgMHgxRUU2LCAweEZFM0YsIDB4MUVFMywgMHhGRTQwLCAweDFFRTQsCisgICAgMHhGRTQxLCAweDFFRTcsIDB4RkU0MiwgMHgxRUU4LCAweEZFNDMsIDB4MUVFOSwgMHhGRTQ0LCAweDFFRUEsCisgICAgMHhGRjAxLCAweDAyODIsIDB4RkYwMiwgMHgxRjQ3LCAweEZGMDMsIDB4MDJDQywgMHhGRjA0LCAweDAyQzgsCisgICAgMHhGRjA1LCAweDAyQ0IsIDB4RkYwNiwgMHgwMkNELCAweEZGMDcsIDB4MUY0NiwgMHhGRjA4LCAweDAyQTIsCisgICAgMHhGRjA5LCAweDAyQTMsIDB4RkYwQSwgMHgwMkNFLCAweEZGMEIsIDB4MDJCNCwgMHhGRjBDLCAweDAyN0MsCisgICAgMHhGRjBELCAweDAyQjUsIDB4RkYwRSwgMHgwMjdELCAweEZGMEYsIDB4MDI5NywgMHhGRjEwLCAweDAzMEMsCisgICAgMHhGRjExLCAweDAzMEQsIDB4RkYxMiwgMHgwMzBFLCAweEZGMTMsIDB4MDMwRiwgMHhGRjE0LCAweDAzMTAsCisgICAgMHhGRjE1LCAweDAzMTEsIDB4RkYxNiwgMHgwMzEyLCAweEZGMTcsIDB4MDMxMywgMHhGRjE4LCAweDAzMTQsCisgICAgMHhGRjE5LCAweDAzMTUsIDB4RkYxQSwgMHgwMjdGLCAweEZGMUIsIDB4MDI4MCwgMHhGRjFDLCAweDAyQkIsCisgICAgMHhGRjFELCAweDAyQjksIDB4RkYxRSwgMHgwMkJDLCAweEZGMUYsIDB4MDI4MSwgMHhGRjIwLCAweDAyQ0YsCisgICAgMHhGRjIxLCAweDAzMTYsIDB4RkYyMiwgMHgwMzE3LCAweEZGMjMsIDB4MDMxOCwgMHhGRjI0LCAweDAzMTksCisgICAgMHhGRjI1LCAweDAzMUEsIDB4RkYyNiwgMHgwMzFCLCAweEZGMjcsIDB4MDMxQywgMHhGRjI4LCAweDAzMUQsCisgICAgMHhGRjI5LCAweDAzMUUsIDB4RkYyQSwgMHgwMzFGLCAweEZGMkIsIDB4MDMyMCwgMHhGRjJDLCAweDAzMjEsCisgICAgMHhGRjJELCAweDAzMjIsIDB4RkYyRSwgMHgwMzIzLCAweEZGMkYsIDB4MDMyNCwgMHhGRjMwLCAweDAzMjUsCisgICAgMHhGRjMxLCAweDAzMjYsIDB4RkYzMiwgMHgwMzI3LCAweEZGMzMsIDB4MDMyOCwgMHhGRjM0LCAweDAzMjksCisgICAgMHhGRjM1LCAweDAzMkEsIDB4RkYzNiwgMHgwMzJCLCAweEZGMzcsIDB4MDMyQywgMHhGRjM4LCAweDAzMkQsCisgICAgMHhGRjM5LCAweDAzMkUsIDB4RkYzQSwgMHgwMzJGLCAweEZGM0IsIDB4MDJBNiwgMHhGRjNDLCAweDAyOTgsCisgICAgMHhGRjNELCAweDAyQTcsIDB4RkYzRSwgMHgwMjg4LCAweEZGM0YsIDB4MDI4QSwgMHhGRjQwLCAweDAyODYsCisgICAgMHhGRjQxLCAweDAzMzAsIDB4RkY0MiwgMHgwMzMxLCAweEZGNDMsIDB4MDMzMiwgMHhGRjQ0LCAweDAzMzMsCisgICAgMHhGRjQ1LCAweDAzMzQsIDB4RkY0NiwgMHgwMzM1LCAweEZGNDcsIDB4MDMzNiwgMHhGRjQ4LCAweDAzMzcsCisgICAgMHhGRjQ5LCAweDAzMzgsIDB4RkY0QSwgMHgwMzM5LCAweEZGNEIsIDB4MDMzQSwgMHhGRjRDLCAweDAzM0IsCisgICAgMHhGRjRELCAweDAzM0MsIDB4RkY0RSwgMHgwMzNELCAweEZGNEYsIDB4MDMzRSwgMHhGRjUwLCAweDAzM0YsCisgICAgMHhGRjUxLCAweDAzNDAsIDB4RkY1MiwgMHgwMzQxLCAweEZGNTMsIDB4MDM0MiwgMHhGRjU0LCAweDAzNDMsCisgICAgMHhGRjU1LCAweDAzNDQsIDB4RkY1NiwgMHgwMzQ1LCAweEZGNTcsIDB4MDM0NiwgMHhGRjU4LCAweDAzNDcsCisgICAgMHhGRjU5LCAweDAzNDgsIDB4RkY1QSwgMHgwMzQ5LCAweEZGNUIsIDB4MDJBOCwgMHhGRjVDLCAweDAyOUIsCisgICAgMHhGRjVELCAweDAyQTksIDB4RkY1RSwgMHgwMjk5LCAweEZGNjEsIDB4MDE0NywgMHhGRjYyLCAweDAxNDgsCisgICAgMHhGRjYzLCAweDAxNDksIDB4RkY2NCwgMHgwMTRBLCAweEZGNjUsIDB4MDE0QiwgMHhGRjY2LCAweDAxNEMsCisgICAgMHhGRjY3LCAweDAxNEQsIDB4RkY2OCwgMHgwMTRFLCAweEZGNjksIDB4MDE0RiwgMHhGRjZBLCAweDAxNTAsCisgICAgMHhGRjZCLCAweDAxNTEsIDB4RkY2QywgMHgwMTUyLCAweEZGNkQsIDB4MDE1MywgMHhGRjZFLCAweDAxNTQsCisgICAgMHhGRjZGLCAweDAxNTUsIDB4RkY3MCwgMHgwMTU2LCAweEZGNzEsIDB4MDE1NywgMHhGRjcyLCAweDAxNTgsCisgICAgMHhGRjczLCAweDAxNTksIDB4RkY3NCwgMHgwMTVBLCAweEZGNzUsIDB4MDE1QiwgMHhGRjc2LCAweDAxNUMsCisgICAgMHhGRjc3LCAweDAxNUQsIDB4RkY3OCwgMHgwMTVFLCAweEZGNzksIDB4MDE1RiwgMHhGRjdBLCAweDAxNjAsCisgICAgMHhGRjdCLCAweDAxNjEsIDB4RkY3QywgMHgwMTYyLCAweEZGN0QsIDB4MDE2MywgMHhGRjdFLCAweDAxNjQsCisgICAgMHhGRjdGLCAweDAxNjUsIDB4RkY4MCwgMHgwMTY2LCAweEZGODEsIDB4MDE2NywgMHhGRjgyLCAweDAxNjgsCisgICAgMHhGRjgzLCAweDAxNjksIDB4RkY4NCwgMHgwMTZBLCAweEZGODUsIDB4MDE2QiwgMHhGRjg2LCAweDAxNkMsCisgICAgMHhGRjg3LCAweDAxNkQsIDB4RkY4OCwgMHgwMTZFLCAweEZGODksIDB4MDE2RiwgMHhGRjhBLCAweDAxNzAsCisgICAgMHhGRjhCLCAweDAxNzEsIDB4RkY4QywgMHgwMTcyLCAweEZGOEQsIDB4MDE3MywgMHhGRjhFLCAweDAxNzQsCisgICAgMHhGRjhGLCAweDAxNzUsIDB4RkY5MCwgMHgwMTc2LCAweEZGOTEsIDB4MDE3NywgMHhGRjkyLCAweDAxNzgsCisgICAgMHhGRjkzLCAweDAxNzksIDB4RkY5NCwgMHgwMTdBLCAweEZGOTUsIDB4MDE3QiwgMHhGRjk2LCAweDAxN0MsCisgICAgMHhGRjk3LCAweDAxN0QsIDB4RkY5OCwgMHgwMTdFLCAweEZGOTksIDB4MDE3RiwgMHhGRjlBLCAweDAxODAsCisgICAgMHhGRjlCLCAweDAxODEsIDB4RkY5QywgMHgwMTgyLCAweEZGOUQsIDB4MDE4MywgMHhGRjlFLCAweDAxODQsCisgICAgMHhGRjlGLCAweDAxODUsIDB4RkZFMCwgMHgwMkM5LCAweEZGRTEsIDB4MDJDQSwgMHhGRkUyLCAweDAyRUYsCisgICAgMHhGRkUzLCAweDAyODksIDB4RkZFNCwgMHgxRjQ1LCAweEZGRTUsIDB4MDJDNywgMHhGRkU4LCAweDAxNDMsCit9OwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0phcGFuMS9VbmlKSVMtVUNTMi1WXzQuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0phcGFuMS9VbmlKSVMtVUNTMi1WXzQuY3BwCmluZGV4IDUyZjEwMDguLjkxNjYzMWIgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvVW5pSklTLVVDUzItVl80LmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvSmFwYW4xL1VuaUpJUy1VQ1MyLVZfNC5jcHAKQEAgLTEsNzEgKzEsNzEgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLWV4dGVybiBjb25zdCB1bnNpZ25lZCBzaG9ydCBnX0ZYQ01BUF9VbmlKSVNfVUNTMl9WXzRbMjUxICogMl0gPSB7DQotICAgIDB4MDBCMCwgMHgyMDRELCAweDIwMTAsIDB4MUVENSwgMHgyMDE1LCAweDFFRDQsIDB4MjAxNiwgMHgxRUQ3LA0KLSAgICAweDIwMTgsIDB4MjA1OSwgMHgyMDE5LCAweDIwNUEsIDB4MjAxQywgMHgyMDU3LCAweDIwMUQsIDB4MjA1OCwNCi0gICAgMHgyMDI1LCAweDFFREEsIDB4MjAyNiwgMHgxRUQ5LCAweDIwMzIsIDB4MjA1MSwgMHgyMDMzLCAweDIwNUIsDQotICAgIDB4MjE5MCwgMHgwMkUyLCAweDIxOTEsIDB4MDJFMCwgMHgyMTkyLCAweDAyRTMsIDB4MjE5MywgMHgwMkUxLA0KLSAgICAweDIxOTUsIDB4MkZCNiwgMHgyMUM0LCAweDIwNzcsIDB4MjFDNSwgMHgyMDc2LCAweDIxQzYsIDB4MjA3OCwNCi0gICAgMHgyMUU2LCAweDFGNEMsIDB4MjFFNywgMHgxRjRFLCAweDIxRTgsIDB4MUY0QiwgMHgyMUU5LCAweDFGNEQsDQotICAgIDB4MjIyNSwgMHgxRUQ3LCAweDIyM0MsIDB4MUVENiwgMHgyMkVGLCAweDFFRDksIDB4MjUwMCwgMHgxRDM5LA0KLSAgICAweDI1MDEsIDB4MUQzQSwgMHgyNTAyLCAweDFEMzcsIDB4MjUwMywgMHgxRDM4LCAweDI1MDQsIDB4MUQzRCwNCi0gICAgMHgyNTA1LCAweDFEM0UsIDB4MjUwNiwgMHgxRDNCLCAweDI1MDcsIDB4MUQzQywgMHgyNTA4LCAweDFENDEsDQotICAgIDB4MjUwOSwgMHgxRDQyLCAweDI1MEEsIDB4MUQzRiwgMHgyNTBCLCAweDFENDAsIDB4MjUwQywgMHgxRDQ3LA0KLSAgICAweDI1MEQsIDB4MUQ0OSwgMHgyNTBFLCAweDFENDgsIDB4MjUwRiwgMHgxRDRBLCAweDI1MTAsIDB4MUQ0RiwNCi0gICAgMHgyNTExLCAweDFENTEsIDB4MjUxMiwgMHgxRDUwLCAweDI1MTMsIDB4MUQ1MiwgMHgyNTE0LCAweDFENDMsDQotICAgIDB4MjUxNSwgMHgxRDQ1LCAweDI1MTYsIDB4MUQ0NCwgMHgyNTE3LCAweDFENDYsIDB4MjUxOCwgMHgxRDRCLA0KLSAgICAweDI1MTksIDB4MUQ0RCwgMHgyNTFBLCAweDFENEMsIDB4MjUxQiwgMHgxRDRFLCAweDI1MUMsIDB4MUQ2MywNCi0gICAgMHgyNTFELCAweDFENjcsIDB4MjUxRSwgMHgxRDY1LCAweDI1MUYsIDB4MUQ2NCwgMHgyNTIwLCAweDFENjYsDQotICAgIDB4MjUyMSwgMHgxRDY5LCAweDI1MjIsIDB4MUQ2OCwgMHgyNTIzLCAweDFENkEsIDB4MjUyNCwgMHgxRDZCLA0KLSAgICAweDI1MjUsIDB4MUQ2RiwgMHgyNTI2LCAweDFENkQsIDB4MjUyNywgMHgxRDZDLCAweDI1MjgsIDB4MUQ2RSwNCi0gICAgMHgyNTI5LCAweDFENzEsIDB4MjUyQSwgMHgxRDcwLCAweDI1MkIsIDB4MUQ3MiwgMHgyNTJDLCAweDFENUIsDQotICAgIDB4MjUyRCwgMHgxRDVELCAweDI1MkUsIDB4MUQ1RSwgMHgyNTJGLCAweDFENUYsIDB4MjUzMCwgMHgxRDVDLA0KLSAgICAweDI1MzEsIDB4MUQ2MCwgMHgyNTMyLCAweDFENjEsIDB4MjUzMywgMHgxRDYyLCAweDI1MzQsIDB4MUQ1MywNCi0gICAgMHgyNTM1LCAweDFENTUsIDB4MjUzNiwgMHgxRDU2LCAweDI1MzcsIDB4MUQ1NywgMHgyNTM4LCAweDFENTQsDQotICAgIDB4MjUzOSwgMHgxRDU4LCAweDI1M0EsIDB4MUQ1OSwgMHgyNTNCLCAweDFENUEsIDB4MjUzRCwgMHgxRDc3LA0KLSAgICAweDI1M0UsIDB4MUQ3OCwgMHgyNTNGLCAweDFENzksIDB4MjU0MCwgMHgxRDc1LCAweDI1NDEsIDB4MUQ3NCwNCi0gICAgMHgyNTQyLCAweDFENzYsIDB4MjU0MywgMHgxRDdCLCAweDI1NDQsIDB4MUQ3RCwgMHgyNTQ1LCAweDFEN0EsDQotICAgIDB4MjU0NiwgMHgxRDdDLCAweDI1NDcsIDB4MUQ4MSwgMHgyNTQ4LCAweDFEODAsIDB4MjU0OSwgMHgxRDdFLA0KLSAgICAweDI1NEEsIDB4MUQ3RiwgMHgyNjFDLCAweDIwMUQsIDB4MjYxRCwgMHgyMDFCLCAweDI2MUUsIDB4MjAxRSwNCi0gICAgMHgyNjFGLCAweDIwMUMsIDB4MjcwMiwgMHgyRjkyLCAweDI3QTEsIDB4MjAxMSwgMHgzMDAxLCAweDFFQ0YsDQotICAgIDB4MzAwMiwgMHgxRUQwLCAweDMwMDgsIDB4MUVFMywgMHgzMDA5LCAweDFFRTQsIDB4MzAwQSwgMHgxRUU1LA0KLSAgICAweDMwMEIsIDB4MUVFNiwgMHgzMDBDLCAweDFFRTcsIDB4MzAwRCwgMHgxRUU4LCAweDMwMEUsIDB4MUVFOSwNCi0gICAgMHgzMDBGLCAweDFFRUEsIDB4MzAxMCwgMHgxRUVCLCAweDMwMTEsIDB4MUVFQywgMHgzMDEzLCAweDIwNEUsDQotICAgIDB4MzAxNCwgMHgxRURELCAweDMwMTUsIDB4MUVERSwgMHgzMDFDLCAweDFFRDYsIDB4MzAxRCwgMHgxRjE0LA0KLSAgICAweDMwMUYsIDB4MUYxNSwgMHgzMDQxLCAweDFFRUUsIDB4MzA0MywgMHgxRUVGLCAweDMwNDUsIDB4MUVGMCwNCi0gICAgMHgzMDQ3LCAweDFFRjEsIDB4MzA0OSwgMHgxRUYyLCAweDMwNjMsIDB4MUVGMywgMHgzMDgzLCAweDFFRjQsDQotICAgIDB4MzA4NSwgMHgxRUY1LCAweDMwODcsIDB4MUVGNiwgMHgzMDhFLCAweDFFRjcsIDB4MzA5QiwgMHgyMDUwLA0KLSAgICAweDMwOUMsIDB4MjA0RiwgMHgzMEExLCAweDFFRjgsIDB4MzBBMywgMHgxRUY5LCAweDMwQTUsIDB4MUVGQSwNCi0gICAgMHgzMEE3LCAweDFFRkIsIDB4MzBBOSwgMHgxRUZDLCAweDMwQzMsIDB4MUVGRCwgMHgzMEUzLCAweDFFRkUsDQotICAgIDB4MzBFNSwgMHgxRUZGLCAweDMwRTcsIDB4MUYwMCwgMHgzMEVFLCAweDFGMDEsIDB4MzBGNSwgMHgxRjAyLA0KLSAgICAweDMwRjYsIDB4MUYwMywgMHgzMEZDLCAweDFFRDMsIDB4MzMwMCwgMHgyMDlFLCAweDMzMDEsIDB4MkVCNiwNCi0gICAgMHgzMzAyLCAweDJFQjcsIDB4MzMwMywgMHgyMDkyLCAweDMzMDQsIDB4MkVCOCwgMHgzMzA1LCAweDIwOEQsDQotICAgIDB4MzMwNiwgMHgyRUI5LCAweDMzMDcsIDB4MkVCRCwgMHgzMzA4LCAweDJFQkIsIDB4MzMwOSwgMHgyRUMwLA0KLSAgICAweDMzMEEsIDB4MkVCRSwgMHgzMzBCLCAweDJFQzIsIDB4MzMwQywgMHgyRUM0LCAweDMzMEQsIDB4MUYwRSwNCi0gICAgMHgzMzBFLCAweDJFQzUsIDB4MzMwRiwgMHgyRUM2LCAweDMzMTAsIDB4MkVDNywgMHgzMzExLCAweDJFQzgsDQotICAgIDB4MzMxMiwgMHgyRUM5LCAweDMzMTMsIDB4MkVDQSwgMHgzMzE0LCAweDFGMDUsIDB4MzMxNSwgMHgyMDk0LA0KLSAgICAweDMzMTYsIDB4MjA4QSwgMHgzMzE3LCAweDJFQ0MsIDB4MzMxOCwgMHgyMDkzLCAweDMzMTksIDB4MkVDRSwNCi0gICAgMHgzMzFBLCAweDJFRDAsIDB4MzMxQiwgMHgyRUQxLCAweDMzMUMsIDB4MkVEMiwgMHgzMzFELCAweDJFRDMsDQotICAgIDB4MzMxRSwgMHgyMEExLCAweDMzMUYsIDB4MkVENCwgMHgzMzIwLCAweDJFRDUsIDB4MzMyMSwgMHgyRUQ2LA0KLSAgICAweDMzMjIsIDB4MjA4OSwgMHgzMzIzLCAweDIwOUMsIDB4MzMyNCwgMHgyRUQ3LCAweDMzMjUsIDB4MkVEOSwNCi0gICAgMHgzMzI2LCAweDFGMEYsIDB4MzMyNywgMHgxRjA5LCAweDMzMjgsIDB4MkVEQywgMHgzMzI5LCAweDJFREQsDQotICAgIDB4MzMyQSwgMHgyMEE0LCAweDMzMkIsIDB4MUYxMSwgMHgzMzJELCAweDJFREYsIDB4MzMyRSwgMHgyRUUyLA0KLSAgICAweDMzMkYsIDB4MkVFMywgMHgzMzMwLCAweDJFRTQsIDB4MzMzMSwgMHgyMEE2LCAweDMzMzIsIDB4MkVFNSwNCi0gICAgMHgzMzMzLCAweDIwOEUsIDB4MzMzNCwgMHgyRUU4LCAweDMzMzUsIDB4MkVFOSwgMHgzMzM2LCAweDFGMEIsDQotICAgIDB4MzMzNywgMHgyRUVFLCAweDMzMzgsIDB4MkVGMCwgMHgzMzM5LCAweDIwOTcsIDB4MzMzQSwgMHgyRUYxLA0KLSAgICAweDMzM0IsIDB4MjA5RCwgMHgzMzNDLCAweDJFRUEsIDB4MzMzRCwgMHgyRUYyLCAweDMzM0UsIDB4MkVGNCwNCi0gICAgMHgzMzNGLCAweDJFRjUsIDB4MzM0MCwgMHgyRUY2LCAweDMzNDEsIDB4MkVGMywgMHgzMzQyLCAweDIwOUIsDQotICAgIDB4MzM0MywgMHgyRUY3LCAweDMzNDQsIDB4MkVGOCwgMHgzMzQ1LCAweDJFRjksIDB4MzM0NiwgMHgyRUZBLA0KLSAgICAweDMzNDcsIDB4MjBBNSwgMHgzMzQ4LCAweDJFRkIsIDB4MzM0OSwgMHgxRjA0LCAweDMzNEEsIDB4MUYxMiwNCi0gICAgMHgzMzRCLCAweDJFRkMsIDB4MzM0QywgMHgyRUZELCAweDMzNEQsIDB4MUYwNywgMHgzMzRFLCAweDIwOTEsDQotICAgIDB4MzM0RiwgMHgyRUZFLCAweDMzNTAsIDB4MkVGRiwgMHgzMzUxLCAweDFGMEMsIDB4MzM1MiwgMHgyRjAyLA0KLSAgICAweDMzNTMsIDB4MkYwNiwgMHgzMzU0LCAweDJGMDMsIDB4MzM1NSwgMHgyRjA3LCAweDMzNTYsIDB4MkYwOCwNCi0gICAgMHgzMzU3LCAweDIwOTgsIDB4MzM3RiwgMHgyMDg0LCAweEZGMDgsIDB4MUVEQiwgMHhGRjA5LCAweDFFREMsDQotICAgIDB4RkYwQywgMHgyMDRDLCAweEZGMEUsIDB4MjA1MiwgMHhGRjFELCAweDFFRUQsIDB4RkYzQiwgMHgxRURGLA0KLSAgICAweEZGM0QsIDB4MUVFMCwgMHhGRjNGLCAweDFFRDIsIDB4RkY1QiwgMHgxRUUxLCAweEZGNUMsIDB4MUVEOCwNCi0gICAgMHhGRjVELCAweDFFRTIsIDB4RkY1RSwgMHgxRUQ2LCAweEZGRTMsIDB4MUVEMSwNCi19Ow0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBzaG9ydCBnX0ZYQ01BUF9VbmlKSVNfVUNTMl9WXzRbMjUxICogMl0gPSB7CisgICAgMHgwMEIwLCAweDIwNEQsIDB4MjAxMCwgMHgxRUQ1LCAweDIwMTUsIDB4MUVENCwgMHgyMDE2LCAweDFFRDcsCisgICAgMHgyMDE4LCAweDIwNTksIDB4MjAxOSwgMHgyMDVBLCAweDIwMUMsIDB4MjA1NywgMHgyMDFELCAweDIwNTgsCisgICAgMHgyMDI1LCAweDFFREEsIDB4MjAyNiwgMHgxRUQ5LCAweDIwMzIsIDB4MjA1MSwgMHgyMDMzLCAweDIwNUIsCisgICAgMHgyMTkwLCAweDAyRTIsIDB4MjE5MSwgMHgwMkUwLCAweDIxOTIsIDB4MDJFMywgMHgyMTkzLCAweDAyRTEsCisgICAgMHgyMTk1LCAweDJGQjYsIDB4MjFDNCwgMHgyMDc3LCAweDIxQzUsIDB4MjA3NiwgMHgyMUM2LCAweDIwNzgsCisgICAgMHgyMUU2LCAweDFGNEMsIDB4MjFFNywgMHgxRjRFLCAweDIxRTgsIDB4MUY0QiwgMHgyMUU5LCAweDFGNEQsCisgICAgMHgyMjI1LCAweDFFRDcsIDB4MjIzQywgMHgxRUQ2LCAweDIyRUYsIDB4MUVEOSwgMHgyNTAwLCAweDFEMzksCisgICAgMHgyNTAxLCAweDFEM0EsIDB4MjUwMiwgMHgxRDM3LCAweDI1MDMsIDB4MUQzOCwgMHgyNTA0LCAweDFEM0QsCisgICAgMHgyNTA1LCAweDFEM0UsIDB4MjUwNiwgMHgxRDNCLCAweDI1MDcsIDB4MUQzQywgMHgyNTA4LCAweDFENDEsCisgICAgMHgyNTA5LCAweDFENDIsIDB4MjUwQSwgMHgxRDNGLCAweDI1MEIsIDB4MUQ0MCwgMHgyNTBDLCAweDFENDcsCisgICAgMHgyNTBELCAweDFENDksIDB4MjUwRSwgMHgxRDQ4LCAweDI1MEYsIDB4MUQ0QSwgMHgyNTEwLCAweDFENEYsCisgICAgMHgyNTExLCAweDFENTEsIDB4MjUxMiwgMHgxRDUwLCAweDI1MTMsIDB4MUQ1MiwgMHgyNTE0LCAweDFENDMsCisgICAgMHgyNTE1LCAweDFENDUsIDB4MjUxNiwgMHgxRDQ0LCAweDI1MTcsIDB4MUQ0NiwgMHgyNTE4LCAweDFENEIsCisgICAgMHgyNTE5LCAweDFENEQsIDB4MjUxQSwgMHgxRDRDLCAweDI1MUIsIDB4MUQ0RSwgMHgyNTFDLCAweDFENjMsCisgICAgMHgyNTFELCAweDFENjcsIDB4MjUxRSwgMHgxRDY1LCAweDI1MUYsIDB4MUQ2NCwgMHgyNTIwLCAweDFENjYsCisgICAgMHgyNTIxLCAweDFENjksIDB4MjUyMiwgMHgxRDY4LCAweDI1MjMsIDB4MUQ2QSwgMHgyNTI0LCAweDFENkIsCisgICAgMHgyNTI1LCAweDFENkYsIDB4MjUyNiwgMHgxRDZELCAweDI1MjcsIDB4MUQ2QywgMHgyNTI4LCAweDFENkUsCisgICAgMHgyNTI5LCAweDFENzEsIDB4MjUyQSwgMHgxRDcwLCAweDI1MkIsIDB4MUQ3MiwgMHgyNTJDLCAweDFENUIsCisgICAgMHgyNTJELCAweDFENUQsIDB4MjUyRSwgMHgxRDVFLCAweDI1MkYsIDB4MUQ1RiwgMHgyNTMwLCAweDFENUMsCisgICAgMHgyNTMxLCAweDFENjAsIDB4MjUzMiwgMHgxRDYxLCAweDI1MzMsIDB4MUQ2MiwgMHgyNTM0LCAweDFENTMsCisgICAgMHgyNTM1LCAweDFENTUsIDB4MjUzNiwgMHgxRDU2LCAweDI1MzcsIDB4MUQ1NywgMHgyNTM4LCAweDFENTQsCisgICAgMHgyNTM5LCAweDFENTgsIDB4MjUzQSwgMHgxRDU5LCAweDI1M0IsIDB4MUQ1QSwgMHgyNTNELCAweDFENzcsCisgICAgMHgyNTNFLCAweDFENzgsIDB4MjUzRiwgMHgxRDc5LCAweDI1NDAsIDB4MUQ3NSwgMHgyNTQxLCAweDFENzQsCisgICAgMHgyNTQyLCAweDFENzYsIDB4MjU0MywgMHgxRDdCLCAweDI1NDQsIDB4MUQ3RCwgMHgyNTQ1LCAweDFEN0EsCisgICAgMHgyNTQ2LCAweDFEN0MsIDB4MjU0NywgMHgxRDgxLCAweDI1NDgsIDB4MUQ4MCwgMHgyNTQ5LCAweDFEN0UsCisgICAgMHgyNTRBLCAweDFEN0YsIDB4MjYxQywgMHgyMDFELCAweDI2MUQsIDB4MjAxQiwgMHgyNjFFLCAweDIwMUUsCisgICAgMHgyNjFGLCAweDIwMUMsIDB4MjcwMiwgMHgyRjkyLCAweDI3QTEsIDB4MjAxMSwgMHgzMDAxLCAweDFFQ0YsCisgICAgMHgzMDAyLCAweDFFRDAsIDB4MzAwOCwgMHgxRUUzLCAweDMwMDksIDB4MUVFNCwgMHgzMDBBLCAweDFFRTUsCisgICAgMHgzMDBCLCAweDFFRTYsIDB4MzAwQywgMHgxRUU3LCAweDMwMEQsIDB4MUVFOCwgMHgzMDBFLCAweDFFRTksCisgICAgMHgzMDBGLCAweDFFRUEsIDB4MzAxMCwgMHgxRUVCLCAweDMwMTEsIDB4MUVFQywgMHgzMDEzLCAweDIwNEUsCisgICAgMHgzMDE0LCAweDFFREQsIDB4MzAxNSwgMHgxRURFLCAweDMwMUMsIDB4MUVENiwgMHgzMDFELCAweDFGMTQsCisgICAgMHgzMDFGLCAweDFGMTUsIDB4MzA0MSwgMHgxRUVFLCAweDMwNDMsIDB4MUVFRiwgMHgzMDQ1LCAweDFFRjAsCisgICAgMHgzMDQ3LCAweDFFRjEsIDB4MzA0OSwgMHgxRUYyLCAweDMwNjMsIDB4MUVGMywgMHgzMDgzLCAweDFFRjQsCisgICAgMHgzMDg1LCAweDFFRjUsIDB4MzA4NywgMHgxRUY2LCAweDMwOEUsIDB4MUVGNywgMHgzMDlCLCAweDIwNTAsCisgICAgMHgzMDlDLCAweDIwNEYsIDB4MzBBMSwgMHgxRUY4LCAweDMwQTMsIDB4MUVGOSwgMHgzMEE1LCAweDFFRkEsCisgICAgMHgzMEE3LCAweDFFRkIsIDB4MzBBOSwgMHgxRUZDLCAweDMwQzMsIDB4MUVGRCwgMHgzMEUzLCAweDFFRkUsCisgICAgMHgzMEU1LCAweDFFRkYsIDB4MzBFNywgMHgxRjAwLCAweDMwRUUsIDB4MUYwMSwgMHgzMEY1LCAweDFGMDIsCisgICAgMHgzMEY2LCAweDFGMDMsIDB4MzBGQywgMHgxRUQzLCAweDMzMDAsIDB4MjA5RSwgMHgzMzAxLCAweDJFQjYsCisgICAgMHgzMzAyLCAweDJFQjcsIDB4MzMwMywgMHgyMDkyLCAweDMzMDQsIDB4MkVCOCwgMHgzMzA1LCAweDIwOEQsCisgICAgMHgzMzA2LCAweDJFQjksIDB4MzMwNywgMHgyRUJELCAweDMzMDgsIDB4MkVCQiwgMHgzMzA5LCAweDJFQzAsCisgICAgMHgzMzBBLCAweDJFQkUsIDB4MzMwQiwgMHgyRUMyLCAweDMzMEMsIDB4MkVDNCwgMHgzMzBELCAweDFGMEUsCisgICAgMHgzMzBFLCAweDJFQzUsIDB4MzMwRiwgMHgyRUM2LCAweDMzMTAsIDB4MkVDNywgMHgzMzExLCAweDJFQzgsCisgICAgMHgzMzEyLCAweDJFQzksIDB4MzMxMywgMHgyRUNBLCAweDMzMTQsIDB4MUYwNSwgMHgzMzE1LCAweDIwOTQsCisgICAgMHgzMzE2LCAweDIwOEEsIDB4MzMxNywgMHgyRUNDLCAweDMzMTgsIDB4MjA5MywgMHgzMzE5LCAweDJFQ0UsCisgICAgMHgzMzFBLCAweDJFRDAsIDB4MzMxQiwgMHgyRUQxLCAweDMzMUMsIDB4MkVEMiwgMHgzMzFELCAweDJFRDMsCisgICAgMHgzMzFFLCAweDIwQTEsIDB4MzMxRiwgMHgyRUQ0LCAweDMzMjAsIDB4MkVENSwgMHgzMzIxLCAweDJFRDYsCisgICAgMHgzMzIyLCAweDIwODksIDB4MzMyMywgMHgyMDlDLCAweDMzMjQsIDB4MkVENywgMHgzMzI1LCAweDJFRDksCisgICAgMHgzMzI2LCAweDFGMEYsIDB4MzMyNywgMHgxRjA5LCAweDMzMjgsIDB4MkVEQywgMHgzMzI5LCAweDJFREQsCisgICAgMHgzMzJBLCAweDIwQTQsIDB4MzMyQiwgMHgxRjExLCAweDMzMkQsIDB4MkVERiwgMHgzMzJFLCAweDJFRTIsCisgICAgMHgzMzJGLCAweDJFRTMsIDB4MzMzMCwgMHgyRUU0LCAweDMzMzEsIDB4MjBBNiwgMHgzMzMyLCAweDJFRTUsCisgICAgMHgzMzMzLCAweDIwOEUsIDB4MzMzNCwgMHgyRUU4LCAweDMzMzUsIDB4MkVFOSwgMHgzMzM2LCAweDFGMEIsCisgICAgMHgzMzM3LCAweDJFRUUsIDB4MzMzOCwgMHgyRUYwLCAweDMzMzksIDB4MjA5NywgMHgzMzNBLCAweDJFRjEsCisgICAgMHgzMzNCLCAweDIwOUQsIDB4MzMzQywgMHgyRUVBLCAweDMzM0QsIDB4MkVGMiwgMHgzMzNFLCAweDJFRjQsCisgICAgMHgzMzNGLCAweDJFRjUsIDB4MzM0MCwgMHgyRUY2LCAweDMzNDEsIDB4MkVGMywgMHgzMzQyLCAweDIwOUIsCisgICAgMHgzMzQzLCAweDJFRjcsIDB4MzM0NCwgMHgyRUY4LCAweDMzNDUsIDB4MkVGOSwgMHgzMzQ2LCAweDJFRkEsCisgICAgMHgzMzQ3LCAweDIwQTUsIDB4MzM0OCwgMHgyRUZCLCAweDMzNDksIDB4MUYwNCwgMHgzMzRBLCAweDFGMTIsCisgICAgMHgzMzRCLCAweDJFRkMsIDB4MzM0QywgMHgyRUZELCAweDMzNEQsIDB4MUYwNywgMHgzMzRFLCAweDIwOTEsCisgICAgMHgzMzRGLCAweDJFRkUsIDB4MzM1MCwgMHgyRUZGLCAweDMzNTEsIDB4MUYwQywgMHgzMzUyLCAweDJGMDIsCisgICAgMHgzMzUzLCAweDJGMDYsIDB4MzM1NCwgMHgyRjAzLCAweDMzNTUsIDB4MkYwNywgMHgzMzU2LCAweDJGMDgsCisgICAgMHgzMzU3LCAweDIwOTgsIDB4MzM3RiwgMHgyMDg0LCAweEZGMDgsIDB4MUVEQiwgMHhGRjA5LCAweDFFREMsCisgICAgMHhGRjBDLCAweDIwNEMsIDB4RkYwRSwgMHgyMDUyLCAweEZGMUQsIDB4MUVFRCwgMHhGRjNCLCAweDFFREYsCisgICAgMHhGRjNELCAweDFFRTAsIDB4RkYzRiwgMHgxRUQyLCAweEZGNUIsIDB4MUVFMSwgMHhGRjVDLCAweDFFRDgsCisgICAgMHhGRjVELCAweDFFRTIsIDB4RkY1RSwgMHgxRUQ2LCAweEZGRTMsIDB4MUVEMSwKK307CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvSmFwYW4xL1VuaUpJUy1VVEYxNi1IXzUuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0phcGFuMS9VbmlKSVMtVVRGMTYtSF81LmNwcAppbmRleCAxY2MyMzEyLi41YzIyZDk5IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvSmFwYW4xL1VuaUpJUy1VVEYxNi1IXzUuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvVW5pSklTLVVURjE2LUhfNS5jcHAKQEAgLTEsMzQ0OSArMSwzNDQ5IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfVW5pSklTX1VURjE2X0hfNVsxMzI0MSAqIDJdID0gew0KLSAgICAweDAwMjAsIDB4MDAwMSwgMHgwMDIxLCAweDAwMDIsIDB4MDAyMiwgMHgwMDAzLCAweDAwMjMsIDB4MDAwNCwNCi0gICAgMHgwMDI0LCAweDAwMDUsIDB4MDAyNSwgMHgwMDA2LCAweDAwMjYsIDB4MDAwNywgMHgwMDI3LCAweDAwMDgsDQotICAgIDB4MDAyOCwgMHgwMDA5LCAweDAwMjksIDB4MDAwQSwgMHgwMDJBLCAweDAwMEIsIDB4MDAyQiwgMHgwMDBDLA0KLSAgICAweDAwMkMsIDB4MDAwRCwgMHgwMDJELCAweDAwMEUsIDB4MDAyRSwgMHgwMDBGLCAweDAwMkYsIDB4MDAxMCwNCi0gICAgMHgwMDMwLCAweDAwMTEsIDB4MDAzMSwgMHgwMDEyLCAweDAwMzIsIDB4MDAxMywgMHgwMDMzLCAweDAwMTQsDQotICAgIDB4MDAzNCwgMHgwMDE1LCAweDAwMzUsIDB4MDAxNiwgMHgwMDM2LCAweDAwMTcsIDB4MDAzNywgMHgwMDE4LA0KLSAgICAweDAwMzgsIDB4MDAxOSwgMHgwMDM5LCAweDAwMUEsIDB4MDAzQSwgMHgwMDFCLCAweDAwM0IsIDB4MDAxQywNCi0gICAgMHgwMDNDLCAweDAwMUQsIDB4MDAzRCwgMHgwMDFFLCAweDAwM0UsIDB4MDAxRiwgMHgwMDNGLCAweDAwMjAsDQotICAgIDB4MDA0MCwgMHgwMDIxLCAweDAwNDEsIDB4MDAyMiwgMHgwMDQyLCAweDAwMjMsIDB4MDA0MywgMHgwMDI0LA0KLSAgICAweDAwNDQsIDB4MDAyNSwgMHgwMDQ1LCAweDAwMjYsIDB4MDA0NiwgMHgwMDI3LCAweDAwNDcsIDB4MDAyOCwNCi0gICAgMHgwMDQ4LCAweDAwMjksIDB4MDA0OSwgMHgwMDJBLCAweDAwNEEsIDB4MDAyQiwgMHgwMDRCLCAweDAwMkMsDQotICAgIDB4MDA0QywgMHgwMDJELCAweDAwNEQsIDB4MDAyRSwgMHgwMDRFLCAweDAwMkYsIDB4MDA0RiwgMHgwMDMwLA0KLSAgICAweDAwNTAsIDB4MDAzMSwgMHgwMDUxLCAweDAwMzIsIDB4MDA1MiwgMHgwMDMzLCAweDAwNTMsIDB4MDAzNCwNCi0gICAgMHgwMDU0LCAweDAwMzUsIDB4MDA1NSwgMHgwMDM2LCAweDAwNTYsIDB4MDAzNywgMHgwMDU3LCAweDAwMzgsDQotICAgIDB4MDA1OCwgMHgwMDM5LCAweDAwNTksIDB4MDAzQSwgMHgwMDVBLCAweDAwM0IsIDB4MDA1QiwgMHgwMDNDLA0KLSAgICAweDAwNUMsIDB4MDA2MSwgMHgwMDVELCAweDAwM0UsIDB4MDA1RSwgMHgwMDNGLCAweDAwNUYsIDB4MDA0MCwNCi0gICAgMHgwMDYwLCAweDAwNDEsIDB4MDA2MSwgMHgwMDQyLCAweDAwNjIsIDB4MDA0MywgMHgwMDYzLCAweDAwNDQsDQotICAgIDB4MDA2NCwgMHgwMDQ1LCAweDAwNjUsIDB4MDA0NiwgMHgwMDY2LCAweDAwNDcsIDB4MDA2NywgMHgwMDQ4LA0KLSAgICAweDAwNjgsIDB4MDA0OSwgMHgwMDY5LCAweDAwNEEsIDB4MDA2QSwgMHgwMDRCLCAweDAwNkIsIDB4MDA0QywNCi0gICAgMHgwMDZDLCAweDAwNEQsIDB4MDA2RCwgMHgwMDRFLCAweDAwNkUsIDB4MDA0RiwgMHgwMDZGLCAweDAwNTAsDQotICAgIDB4MDA3MCwgMHgwMDUxLCAweDAwNzEsIDB4MDA1MiwgMHgwMDcyLCAweDAwNTMsIDB4MDA3MywgMHgwMDU0LA0KLSAgICAweDAwNzQsIDB4MDA1NSwgMHgwMDc1LCAweDAwNTYsIDB4MDA3NiwgMHgwMDU3LCAweDAwNzcsIDB4MDA1OCwNCi0gICAgMHgwMDc4LCAweDAwNTksIDB4MDA3OSwgMHgwMDVBLCAweDAwN0EsIDB4MDA1QiwgMHgwMDdCLCAweDAwNUMsDQotICAgIDB4MDA3QywgMHgwMDYzLCAweDAwN0QsIDB4MDA1RSwgMHgwMDdFLCAweDAwNjQsIDB4MDBBMCwgMHgwMDAxLA0KLSAgICAweDAwQTEsIDB4MDA2NSwgMHgwMEEyLCAweDAwNjYsIDB4MDBBMywgMHgwMDY3LCAweDAwQTQsIDB4MDA2QiwNCi0gICAgMHgwMEE1LCAweDAwM0QsIDB4MDBBNiwgMHgwMDVELCAweDAwQTcsIDB4MDJEMCwgMHgwMEE4LCAweDAyODcsDQotICAgIDB4MDBBOSwgMHgwMDk4LCAweDAwQUEsIDB4MDA4QywgMHgwMEFCLCAweDAwNkQsIDB4MDBBQywgMHgwMDk5LA0KLSAgICAweDAwQUQsIDB4MDA5NywgMHgwMEFFLCAweDAwOUEsIDB4MDBBRiwgMHgwMDgxLCAweDAwQjAsIDB4MDJDMywNCi0gICAgMHgwMEIxLCAweDAyQjYsIDB4MDBCMiwgMHgwMDlELCAweDAwQjMsIDB4MDA5RSwgMHgwMEI0LCAweDAyODUsDQotICAgIDB4MDBCNSwgMHgwMDlGLCAweDAwQjYsIDB4MDMwQSwgMHgwMEI3LCAweDAwNzUsIDB4MDBCOCwgMHgwMDg2LA0KLSAgICAweDAwQjksIDB4MDBBMCwgMHgwMEJBLCAweDAwOTAsIDB4MDBCQiwgMHgwMDdCLCAweDAwQkMsIDB4MDBBMSwNCi0gICAgMHgwMEJELCAweDAwQTIsIDB4MDBCRSwgMHgwMEEzLCAweDAwQkYsIDB4MDA3RSwgMHgwMEMwLCAweDAwQTQsDQotICAgIDB4MDBDMSwgMHgwMEE1LCAweDAwQzIsIDB4MDBBNiwgMHgwMEMzLCAweDAwQTcsIDB4MDBDNCwgMHgwMEE4LA0KLSAgICAweDAwQzUsIDB4MDBBOSwgMHgwMEM2LCAweDAwOEIsIDB4MDBDNywgMHgwMEFBLCAweDAwQzgsIDB4MDBBQiwNCi0gICAgMHgwMEM5LCAweDAwQUMsIDB4MDBDQSwgMHgwMEFELCAweDAwQ0IsIDB4MDBBRSwgMHgwMENDLCAweDAwQUYsDQotICAgIDB4MDBDRCwgMHgwMEIwLCAweDAwQ0UsIDB4MDBCMSwgMHgwMENGLCAweDAwQjIsIDB4MDBEMCwgMHgwMEIzLA0KLSAgICAweDAwRDEsIDB4MDBCNCwgMHgwMEQyLCAweDAwQjUsIDB4MDBEMywgMHgwMEI2LCAweDAwRDQsIDB4MDBCNywNCi0gICAgMHgwMEQ1LCAweDAwQjgsIDB4MDBENiwgMHgwMEI5LCAweDAwRDcsIDB4MDJCNywgMHgwMEQ4LCAweDAwOEUsDQotICAgIDB4MDBEOSwgMHgwMEJCLCAweDAwREEsIDB4MDBCQywgMHgwMERCLCAweDAwQkQsIDB4MDBEQywgMHgwMEJFLA0KLSAgICAweDAwREQsIDB4MDBCRiwgMHgwMERFLCAweDAwQzAsIDB4MDBERiwgMHgwMDk2LCAweDAwRTAsIDB4MDBDMSwNCi0gICAgMHgwMEUxLCAweDAwQzIsIDB4MDBFMiwgMHgwMEMzLCAweDAwRTMsIDB4MDBDNCwgMHgwMEU0LCAweDAwQzUsDQotICAgIDB4MDBFNSwgMHgwMEM2LCAweDAwRTYsIDB4MDA5MSwgMHgwMEU3LCAweDAwQzcsIDB4MDBFOCwgMHgwMEM4LA0KLSAgICAweDAwRTksIDB4MDBDOSwgMHgwMEVBLCAweDAwQ0EsIDB4MDBFQiwgMHgwMENCLCAweDAwRUMsIDB4MDBDQywNCi0gICAgMHgwMEVELCAweDAwQ0QsIDB4MDBFRSwgMHgwMENFLCAweDAwRUYsIDB4MDBDRiwgMHgwMEYwLCAweDAwRDAsDQotICAgIDB4MDBGMSwgMHgwMEQxLCAweDAwRjIsIDB4MDBEMiwgMHgwMEYzLCAweDAwRDMsIDB4MDBGNCwgMHgwMEQ0LA0KLSAgICAweDAwRjUsIDB4MDBENSwgMHgwMEY2LCAweDAwRDYsIDB4MDBGNywgMHgwMkI4LCAweDAwRjgsIDB4MDA5NCwNCi0gICAgMHgwMEY5LCAweDAwRDgsIDB4MDBGQSwgMHgwMEQ5LCAweDAwRkIsIDB4MDBEQSwgMHgwMEZDLCAweDAwREIsDQotICAgIDB4MDBGRCwgMHgwMERDLCAweDAwRkUsIDB4MDBERCwgMHgwMEZGLCAweDAwREUsIDB4MDEwMCwgMHgyNDk2LA0KLSAgICAweDAxMDEsIDB4MjQ5MSwgMHgwMTAyLCAweDNEOEMsIDB4MDEwMywgMHgzRDk5LCAweDAxMDQsIDB4M0Q3OSwNCi0gICAgMHgwMTA1LCAweDNEODEsIDB4MDEwNiwgMHgzRDhFLCAweDAxMDcsIDB4M0Q5QiwgMHgwMTA4LCAweDNEQTcsDQotICAgIDB4MDEwOSwgMHgzREFELCAweDAxMEMsIDB4M0Q4RiwgMHgwMTBELCAweDNEOUMsIDB4MDEwRSwgMHgzRDkxLA0KLSAgICAweDAxMEYsIDB4M0Q5RSwgMHgwMTExLCAweDNEOUYsIDB4MDExMiwgMHgyNDk5LCAweDAxMTMsIDB4MjQ5NCwNCi0gICAgMHgwMTE4LCAweDNEOTAsIDB4MDExOSwgMHgzRDlELCAweDAxMUEsIDB4MjRCMywgMHgwMTFCLCAweDI0QkYsDQotICAgIDB4MDExQywgMHgzREE4LCAweDAxMUQsIDB4M0RBRSwgMHgwMTI0LCAweDNEQTksIDB4MDEyNSwgMHgzREFGLA0KLSAgICAweDAxMjcsIDB4M0RDOCwgMHgwMTI4LCAweDI0QjgsIDB4MDEyOSwgMHgyNEM0LCAweDAxMkEsIDB4MjQ5NywNCi0gICAgMHgwMTJCLCAweDI0OTIsIDB4MDEzMSwgMHgwMDkyLCAweDAxMzQsIDB4M0RBQSwgMHgwMTM1LCAweDNEQjAsDQotICAgIDB4MDEzOSwgMHgzRDhELCAweDAxM0EsIDB4M0Q5QSwgMHgwMTNELCAweDNEN0IsIDB4MDEzRSwgMHgzRDgzLA0KLSAgICAweDAxNDEsIDB4MDA4RCwgMHgwMTQyLCAweDAwOTMsIDB4MDE0MywgMHgzRDkyLCAweDAxNDQsIDB4M0RBMCwNCi0gICAgMHgwMTQ3LCAweDNEOTMsIDB4MDE0OCwgMHgzREExLCAweDAxNEIsIDB4MjREQywgMHgwMTRDLCAweDI0OUEsDQotICAgIDB4MDE0RCwgMHgyNDk1LCAweDAxNTAsIDB4M0Q5NCwgMHgwMTUxLCAweDNEQTIsIDB4MDE1MiwgMHgwMDhGLA0KLSAgICAweDAxNTMsIDB4MDA5NSwgMHgwMTU0LCAweDNEOEIsIDB4MDE1NSwgMHgzRDk4LCAweDAxNTgsIDB4M0Q5NSwNCi0gICAgMHgwMTU5LCAweDNEQTMsIDB4MDE1QSwgMHgzRDdDLCAweDAxNUIsIDB4M0Q4NCwgMHgwMTVDLCAweDNEQUIsDQotICAgIDB4MDE1RCwgMHgzREIxLCAweDAxNUUsIDB4M0Q3RCwgMHgwMTVGLCAweDNEODYsIDB4MDE2MCwgMHgwMERGLA0KLSAgICAweDAxNjEsIDB4MDBFMywgMHgwMTYyLCAweDNEOTcsIDB4MDE2MywgMHgzREE1LCAweDAxNjQsIDB4M0Q3RSwNCi0gICAgMHgwMTY1LCAweDNEODcsIDB4MDE2OCwgMHgyNEJELCAweDAxNjksIDB4MjRDOSwgMHgwMTZBLCAweDI0OTgsDQotICAgIDB4MDE2QiwgMHgyNDkzLCAweDAxNkMsIDB4M0RBQywgMHgwMTZELCAweDNEQjIsIDB4MDE2RSwgMHgyNEJDLA0KLSAgICAweDAxNkYsIDB4MjRDOCwgMHgwMTcwLCAweDNEOTYsIDB4MDE3MSwgMHgzREE0LCAweDAxNzgsIDB4MDBFMCwNCi0gICAgMHgwMTc5LCAweDNEN0YsIDB4MDE3QSwgMHgzRDg4LCAweDAxN0IsIDB4M0Q4MCwgMHgwMTdDLCAweDNEOEEsDQotICAgIDB4MDE3RCwgMHgwMEUxLCAweDAxN0UsIDB4MDBFNSwgMHgwMTkyLCAweDAwNjksIDB4MDE5MywgMHgzREQyLA0KLSAgICAweDAxQzIsIDB4M0RDRCwgMHgwMUNELCAweDI0QjIsIDB4MDFDRSwgMHgyNEJFLCAweDAxQ0YsIDB4MjRCNiwNCi0gICAgMHgwMUQwLCAweDI0QzIsIDB4MDFEMSwgMHgyNEI5LCAweDAxRDIsIDB4MjRDNSwgMHgwMUQzLCAweDI0QkIsDQotICAgIDB4MDFENCwgMHgyNEM3LCAweDAxRDYsIDB4M0Q3NSwgMHgwMUQ4LCAweDNENzYsIDB4MDFEQSwgMHgzRDc3LA0KLSAgICAweDAxREMsIDB4M0Q3OCwgMHgwMUY4LCAweDNENzMsIDB4MDFGOSwgMHgzRDc0LCAweDAxRkQsIDB4MjRDRCwNCi0gICAgMHgwMjUwLCAweDNERDgsIDB4MDI1MSwgMHgyNENBLCAweDAyNTIsIDB4M0REQywgMHgwMjUzLCAweDNEQ0UsDQotICAgIDB4MDI1NCwgMHgyNENGLCAweDAyNTUsIDB4M0RFMSwgMHgwMjU2LCAweDNEQkEsIDB4MDI1NywgMHgzRENGLA0KLSAgICAweDAyNTgsIDB4M0RENSwgMHgwMjU5LCAweDI0RDIsIDB4MDI1QSwgMHgyNEQ1LCAweDAyNUIsIDB4MjREOCwNCi0gICAgMHgwMjVDLCAweDNERDYsIDB4MDI1RSwgMHgzREQ3LCAweDAyNUYsIDB4M0RDMSwgMHgwMjYwLCAweDNERDEsDQotICAgIDB4MDI2MSwgMHgzREM1LCAweDAyNjIsIDB4M0UwQiwgMHgwMjYzLCAweDNFMEMsIDB4MDI2NCwgMHgzRERCLA0KLSAgICAweDAyNjUsIDB4M0RERSwgMHgwMjY2LCAweDNEQ0IsIDB4MDI2NywgMHgzREU0LCAweDAyNjgsIDB4M0REMywNCi0gICAgMHgwMjZBLCAweDNFMEQsIDB4MDI2QywgMHgzREI2LCAweDAyNkQsIDB4M0RDMCwgMHgwMjZFLCAweDNEQjcsDQotICAgIDB4MDI2RiwgMHgzREQ5LCAweDAyNzAsIDB4M0RDNiwgMHgwMjcxLCAweDNEQjMsIDB4MDI3MiwgMHgzREMyLA0KLSAgICAweDAyNzMsIDB4M0RCQiwgMHgwMjc0LCAweDNFMEUsIDB4MDI3NSwgMHgyNERELCAweDAyNzYsIDB4M0UwRiwNCi0gICAgMHgwMjc4LCAweDNFMTAsIDB4MDI3OSwgMHgzREI4LCAweDAyN0EsIDB4M0RFMywgMHgwMjdCLCAweDNEQkYsDQotICAgIDB4MDI3RCwgMHgzREJDLCAweDAyN0UsIDB4M0RCNSwgMHgwMjgwLCAweDNFMTEsIDB4MDI4MSwgMHgzREM3LA0KLSAgICAweDAyODIsIDB4M0RCRCwgMHgwMjgzLCAweDI0RTIsIDB4MDI4NCwgMHgzREQwLCAweDAyODgsIDB4M0RCOSwNCi0gICAgMHgwMjg5LCAweDNERDQsIDB4MDI4QSwgMHgzRERBLCAweDAyOEIsIDB4M0RCNCwgMHgwMjhDLCAweDI0REUsDQotICAgIDB4MDI4RCwgMHgzRERELCAweDAyOEUsIDB4M0RDNCwgMHgwMjhGLCAweDNFMTIsIDB4MDI5MCwgMHgzREJFLA0KLSAgICAweDAyOTEsIDB4M0RFMiwgMHgwMjkyLCAweDI0RTEsIDB4MDI5NCwgMHgzRENBLCAweDAyOTUsIDB4M0RDOSwNCi0gICAgMHgwMjk4LCAweDNEQ0MsIDB4MDI5OSwgMHgzRTEzLCAweDAyOUMsIDB4M0UxNCwgMHgwMjlELCAweDNEQzMsDQotICAgIDB4MDI5RiwgMHgzRTE1LCAweDAyQTEsIDB4M0RFMCwgMHgwMkEyLCAweDNEREYsIDB4MDJCMCwgMHgzRTE2LA0KLSAgICAweDAyQjIsIDB4M0UxNywgMHgwMkI3LCAweDNFMTgsIDB4MDJCQiwgMHgwMDYyLCAweDAyQkMsIDB4MDA2MCwNCi0gICAgMHgwMkMxLCAweDNFMTksIDB4MDJDNiwgMHgwMDgwLCAweDAyQzcsIDB4M0Q4NSwgMHgwMkM4LCAweDNERTYsDQotICAgIDB4MDJDQywgMHgzREU3LCAweDAyRDAsIDB4MjRFMywgMHgwMkQxLCAweDNERTgsIDB4MDJEOCwgMHgzRDdBLA0KLSAgICAweDAyRDksIDB4M0RBNiwgMHgwMkRBLCAweDAwODUsIDB4MDJEQiwgMHgzRDgyLCAweDAyREMsIDB4MDA1RiwNCi0gICAgMHgwMkRELCAweDNEODksIDB4MDJERSwgMHgzREZCLCAweDAyRTAsIDB4M0UxQSwgMHgwMkUxLCAweDNFMUIsDQotICAgIDB4MDJFNSwgMHgzREVCLCAweDAyRTYsIDB4M0RFQywgMHgwMkU3LCAweDNERUQsIDB4MDJFOCwgMHgzREVFLA0KLSAgICAweDAyRTksIDB4M0RFRiwgMHgwMzAwLCAweDAwNDEsIDB4MDMwMSwgMHgwMDdGLCAweDAzMDIsIDB4MDA4MCwNCi0gICAgMHgwMzAzLCAweDAwNUYsIDB4MDMwNCwgMHgwMDgxLCAweDAzMDUsIDB4MDBFMiwgMHgwMzA2LCAweDAwODIsDQotICAgIDB4MDMwNywgMHgwMDgzLCAweDAzMDgsIDB4MDA4NCwgMHgwMzBBLCAweDAwODUsIDB4MDMwQiwgMHgwMDg3LA0KLSAgICAweDAzMEMsIDB4MDA4OSwgMHgwMzBGLCAweDNERUEsIDB4MDMxOCwgMHgzRTAyLCAweDAzMTksIDB4M0UwMywNCi0gICAgMHgwMzFBLCAweDNFMDcsIDB4MDMxQywgMHgzREY1LCAweDAzMUQsIDB4M0UwMCwgMHgwMzFFLCAweDNFMDEsDQotICAgIDB4MDMxRiwgMHgzREY2LCAweDAzMjAsIDB4M0RGNywgMHgwMzI0LCAweDNERkMsIDB4MDMyNSwgMHgzREYyLA0KLSAgICAweDAzMjcsIDB4MDA4NiwgMHgwMzI4LCAweDAwODgsIDB4MDMyOSwgMHgzREY5LCAweDAzMkEsIDB4M0UwNCwNCi0gICAgMHgwMzJDLCAweDNERjMsIDB4MDMyRiwgMHgzREZBLCAweDAzMzAsIDB4M0RGRCwgMHgwMzMyLCAweDAwNDAsDQotICAgIDB4MDMzNCwgMHgzREZGLCAweDAzMzYsIDB4MDA4QSwgMHgwMzM5LCAweDNERjQsIDB4MDMzQSwgMHgzRTA1LA0KLSAgICAweDAzM0IsIDB4M0UwNiwgMHgwMzNDLCAweDNERkUsIDB4MDMzRCwgMHgzREY4LCAweDAzNjEsIDB4M0RFNSwNCi0gICAgMHgwMzkxLCAweDAzRjMsIDB4MDM5MiwgMHgwM0Y0LCAweDAzOTMsIDB4MDNGNSwgMHgwMzk0LCAweDAzRjYsDQotICAgIDB4MDM5NSwgMHgwM0Y3LCAweDAzOTYsIDB4MDNGOCwgMHgwMzk3LCAweDAzRjksIDB4MDM5OCwgMHgwM0ZBLA0KLSAgICAweDAzOTksIDB4MDNGQiwgMHgwMzlBLCAweDAzRkMsIDB4MDM5QiwgMHgwM0ZELCAweDAzOUMsIDB4MDNGRSwNCi0gICAgMHgwMzlELCAweDAzRkYsIDB4MDM5RSwgMHgwNDAwLCAweDAzOUYsIDB4MDQwMSwgMHgwM0EwLCAweDA0MDIsDQotICAgIDB4MDNBMSwgMHgwNDAzLCAweDAzQTMsIDB4MDQwNCwgMHgwM0E0LCAweDA0MDUsIDB4MDNBNSwgMHgwNDA2LA0KLSAgICAweDAzQTYsIDB4MDQwNywgMHgwM0E3LCAweDA0MDgsIDB4MDNBOCwgMHgwNDA5LCAweDAzQTksIDB4MDQwQSwNCi0gICAgMHgwM0IxLCAweDA0MEIsIDB4MDNCMiwgMHgwNDBDLCAweDAzQjMsIDB4MDQwRCwgMHgwM0I0LCAweDA0MEUsDQotICAgIDB4MDNCNSwgMHgwNDBGLCAweDAzQjYsIDB4MDQxMCwgMHgwM0I3LCAweDA0MTEsIDB4MDNCOCwgMHgwNDEyLA0KLSAgICAweDAzQjksIDB4MDQxMywgMHgwM0JBLCAweDA0MTQsIDB4MDNCQiwgMHgwNDE1LCAweDAzQkMsIDB4MDQxNiwNCi0gICAgMHgwM0JELCAweDA0MTcsIDB4MDNCRSwgMHgwNDE4LCAweDAzQkYsIDB4MDQxOSwgMHgwM0MwLCAweDA0MUEsDQotICAgIDB4MDNDMSwgMHgwNDFCLCAweDAzQzIsIDB4M0Y1RSwgMHgwM0MzLCAweDA0MUMsIDB4MDNDNCwgMHgwNDFELA0KLSAgICAweDAzQzUsIDB4MDQxRSwgMHgwM0M2LCAweDA0MUYsIDB4MDNDNywgMHgwNDIwLCAweDAzQzgsIDB4MDQyMSwNCi0gICAgMHgwM0M5LCAweDA0MjIsIDB4MDNEMCwgMHgyRjNBLCAweDAzRDEsIDB4MkY0MCwgMHgwM0Q1LCAweDJGM0UsDQotICAgIDB4MDNEQiwgMHgyRjNGLCAweDA0MDEsIDB4MDQyOSwgMHgwNDEwLCAweDA0MjMsIDB4MDQxMSwgMHgwNDI0LA0KLSAgICAweDA0MTIsIDB4MDQyNSwgMHgwNDEzLCAweDA0MjYsIDB4MDQxNCwgMHgwNDI3LCAweDA0MTUsIDB4MDQyOCwNCi0gICAgMHgwNDE2LCAweDA0MkEsIDB4MDQxNywgMHgwNDJCLCAweDA0MTgsIDB4MDQyQywgMHgwNDE5LCAweDA0MkQsDQotICAgIDB4MDQxQSwgMHgwNDJFLCAweDA0MUIsIDB4MDQyRiwgMHgwNDFDLCAweDA0MzAsIDB4MDQxRCwgMHgwNDMxLA0KLSAgICAweDA0MUUsIDB4MDQzMiwgMHgwNDFGLCAweDA0MzMsIDB4MDQyMCwgMHgwNDM0LCAweDA0MjEsIDB4MDQzNSwNCi0gICAgMHgwNDIyLCAweDA0MzYsIDB4MDQyMywgMHgwNDM3LCAweDA0MjQsIDB4MDQzOCwgMHgwNDI1LCAweDA0MzksDQotICAgIDB4MDQyNiwgMHgwNDNBLCAweDA0MjcsIDB4MDQzQiwgMHgwNDI4LCAweDA0M0MsIDB4MDQyOSwgMHgwNDNELA0KLSAgICAweDA0MkEsIDB4MDQzRSwgMHgwNDJCLCAweDA0M0YsIDB4MDQyQywgMHgwNDQwLCAweDA0MkQsIDB4MDQ0MSwNCi0gICAgMHgwNDJFLCAweDA0NDIsIDB4MDQyRiwgMHgwNDQzLCAweDA0MzAsIDB4MDQ0NCwgMHgwNDMxLCAweDA0NDUsDQotICAgIDB4MDQzMiwgMHgwNDQ2LCAweDA0MzMsIDB4MDQ0NywgMHgwNDM0LCAweDA0NDgsIDB4MDQzNSwgMHgwNDQ5LA0KLSAgICAweDA0MzYsIDB4MDQ0QiwgMHgwNDM3LCAweDA0NEMsIDB4MDQzOCwgMHgwNDRELCAweDA0MzksIDB4MDQ0RSwNCi0gICAgMHgwNDNBLCAweDA0NEYsIDB4MDQzQiwgMHgwNDUwLCAweDA0M0MsIDB4MDQ1MSwgMHgwNDNELCAweDA0NTIsDQotICAgIDB4MDQzRSwgMHgwNDUzLCAweDA0M0YsIDB4MDQ1NCwgMHgwNDQwLCAweDA0NTUsIDB4MDQ0MSwgMHgwNDU2LA0KLSAgICAweDA0NDIsIDB4MDQ1NywgMHgwNDQzLCAweDA0NTgsIDB4MDQ0NCwgMHgwNDU5LCAweDA0NDUsIDB4MDQ1QSwNCi0gICAgMHgwNDQ2LCAweDA0NUIsIDB4MDQ0NywgMHgwNDVDLCAweDA0NDgsIDB4MDQ1RCwgMHgwNDQ5LCAweDA0NUUsDQotICAgIDB4MDQ0QSwgMHgwNDVGLCAweDA0NEIsIDB4MDQ2MCwgMHgwNDRDLCAweDA0NjEsIDB4MDQ0RCwgMHgwNDYyLA0KLSAgICAweDA0NEUsIDB4MDQ2MywgMHgwNDRGLCAweDA0NjQsIDB4MDQ1MSwgMHgwNDRBLCAweDFFM0UsIDB4M0Q3MSwNCi0gICAgMHgxRTNGLCAweDNENzIsIDB4MUVCQywgMHgyNEI1LCAweDFFQkQsIDB4MjRDMSwgMHgxRjcwLCAweDI0Q0MsDQotICAgIDB4MUY3MSwgMHgyNENCLCAweDFGNzIsIDB4MjREQSwgMHgxRjczLCAweDI0RDksIDB4MjAwMiwgMHgwMEU3LA0KLSAgICAweDIwMDMsIDB4MDI3OSwgMHgyMDEwLCAweDAyOTYsIDB4MjAxMSwgMHgwMDBFLCAweDIwMTIsIDB4MDA3MiwNCi0gICAgMHgyMDEzLCAweDAwNzIsIDB4MjAxNCwgMHgwMDhBLCAweDIwMTUsIDB4MDI5NSwgMHgyMDE2LCAweDAyOUEsDQotICAgIDB4MjAxOCwgMHgwMDYyLCAweDIwMTksIDB4MDA2MCwgMHgyMDFBLCAweDAwNzgsIDB4MjAxQywgMHgwMDZDLA0KLSAgICAweDIwMUQsIDB4MDA3QSwgMHgyMDFFLCAweDAwNzksIDB4MjAyMCwgMHgwMzA4LCAweDIwMjEsIDB4MDMwOSwNCi0gICAgMHgyMDIyLCAweDAwNzcsIDB4MjAyNSwgMHgwMjlELCAweDIwMjYsIDB4MDI5QywgMHgyMDMwLCAweDAzMDQsDQotICAgIDB4MjAzMiwgMHgwMkM0LCAweDIwMzMsIDB4MDJDNSwgMHgyMDM5LCAweDAwNkUsIDB4MjAzQSwgMHgwMDZGLA0KLSAgICAweDIwM0IsIDB4MDJERSwgMHgyMDNDLCAweDJGNEYsIDB4MjAzRSwgMHgwMEUyLCAweDIwM0YsIDB4M0RFOSwNCi0gICAgMHgyMDQyLCAweDNGOUEsIDB4MjA0NCwgMHgwMDY4LCAweDIwNDcsIDB4M0Y5NiwgMHgyMDQ4LCAweDNGOTcsDQotICAgIDB4MjA0OSwgMHgyRjUwLCAweDIwNTEsIDB4M0Y5OSwgMHgyMDcwLCAweDI0QTEsIDB4MjA3NCwgMHgyNEEyLA0KLSAgICAweDIwNzUsIDB4MjRBMywgMHgyMDc2LCAweDI0QTQsIDB4MjA3NywgMHgyNEE1LCAweDIwNzgsIDB4MjRBNiwNCi0gICAgMHgyMDc5LCAweDI0QTcsIDB4MjA4MCwgMHgyNEE4LCAweDIwODEsIDB4MjRBOSwgMHgyMDgyLCAweDI0QUEsDQotICAgIDB4MjA4MywgMHgyNEFCLCAweDIwODQsIDB4MjRBQywgMHgyMDg1LCAweDI0QUQsIDB4MjA4NiwgMHgyNEFFLA0KLSAgICAweDIwODcsIDB4MjRBRiwgMHgyMDg4LCAweDI0QjAsIDB4MjA4OSwgMHgyNEIxLCAweDIwQUMsIDB4MjQ4QSwNCi0gICAgMHgyMERELCAweDNGQzgsIDB4MjBERSwgMHgyQjFCLCAweDIxMDAsIDB4MkU0RiwgMHgyMTAzLCAweDAyQzYsDQotICAgIDB4MjEwNSwgMHgyRTUzLCAweDIxMDksIDB4MjA3MSwgMHgyMTBBLCAweDIwNzAsIDB4MjEwRiwgMHgyRjNDLA0KLSAgICAweDIxMTMsIDB4MUY1OSwgMHgyMTE2LCAweDFEQkEsIDB4MjEyMSwgMHgxRjc3LCAweDIxMjIsIDB4MDBFNCwNCi0gICAgMHgyMTI2LCAweDI0OEIsIDB4MjEyNywgMHgzQzlCLCAweDIxMkIsIDB4MDMwMywgMHgyMTM1LCAweDJGMzksDQotICAgIDB4MjEzQiwgMHgyMDczLCAweDIxNTMsIDB4MjQ5RiwgMHgyMTU0LCAweDI0QTAsIDB4MjE1NSwgMHgzRDZGLA0KLSAgICAweDIxNTYsIDB4MjYzOSwgMHgyMTU3LCAweDI2M0EsIDB4MjE1OCwgMHgyNjNCLCAweDIxNTksIDB4MjYzQywNCi0gICAgMHgyMTVBLCAweDI2M0QsIDB4MjE1QiwgMHgyNDlCLCAweDIxNUMsIDB4MjQ5QywgMHgyMTVELCAweDI0OUQsDQotICAgIDB4MjE1RSwgMHgyNDlFLCAweDIxNjAsIDB4MUQ5NywgMHgyMTYxLCAweDFEOTgsIDB4MjE2MiwgMHgxRDk5LA0KLSAgICAweDIxNjMsIDB4MUQ5QSwgMHgyMTY0LCAweDFEOUIsIDB4MjE2NSwgMHgxRDlDLCAweDIxNjYsIDB4MUQ5RCwNCi0gICAgMHgyMTY3LCAweDFEOUUsIDB4MjE2OCwgMHgxRDlGLCAweDIxNjksIDB4MURBMCwgMHgyMTZBLCAweDIwMjEsDQotICAgIDB4MjE2QiwgMHgyMDIyLCAweDIxNzAsIDB4MUY5QywgMHgyMTcxLCAweDFGOUQsIDB4MjE3MiwgMHgxRjlFLA0KLSAgICAweDIxNzMsIDB4MUY5RiwgMHgyMTc0LCAweDFGQTAsIDB4MjE3NSwgMHgxRkExLCAweDIxNzYsIDB4MUZBMiwNCi0gICAgMHgyMTc3LCAweDFGQTMsIDB4MjE3OCwgMHgxRkE0LCAweDIxNzksIDB4MUZBNSwgMHgyMTdBLCAweDIwNkEsDQotICAgIDB4MjE3QiwgMHgyMDZCLCAweDIxN0YsIDB4MjA2RiwgMHgyMTkwLCAweDAyRTEsIDB4MjE5MSwgMHgwMkUyLA0KLSAgICAweDIxOTIsIDB4MDJFMCwgMHgyMTkzLCAweDAyRTMsIDB4MjE5NCwgMHgyRkE5LCAweDIxOTYsIDB4MkZBQywNCi0gICAgMHgyMTk3LCAweDJGQUQsIDB4MjE5OCwgMHgyRkFBLCAweDIxOTksIDB4MkZBQiwgMHgyMUM0LCAweDIwNzYsDQotICAgIDB4MjFDNSwgMHgyMDc3LCAweDIxQzYsIDB4MjA3NSwgMHgyMUNCLCAweDJGQUYsIDB4MjFDQywgMHgyRkFFLA0KLSAgICAweDIxRDAsIDB4MkZBOCwgMHgyMUQyLCAweDAyRjAsIDB4MjFENCwgMHgwMkYxLCAweDIxRTYsIDB4MUY0RCwNCi0gICAgMHgyMUU3LCAweDFGNEMsIDB4MjFFOCwgMHgxRjRFLCAweDIxRTksIDB4MUY0QiwgMHgyMjAwLCAweDAyRjIsDQotICAgIDB4MjIwMiwgMHgwMkY3LCAweDIyMDMsIDB4MDJGMywgMHgyMjA1LCAweDJGOTgsIDB4MjIwNywgMHgwMkY4LA0KLSAgICAweDIyMDgsIDB4MDJFNSwgMHgyMjA5LCAweDNDNzQsIDB4MjIwQSwgMHgyRjNCLCAweDIyMEIsIDB4MDJFNiwNCi0gICAgMHgyMjExLCAweDFEQzksIDB4MjIxMiwgMHgwMkI1LCAweDIyMTMsIDB4MkY1NiwgMHgyMjE5LCAweDAwNzUsDQotICAgIDB4MjIxQSwgMHgwMkZELCAweDIyMUQsIDB4MDJGRiwgMHgyMjFFLCAweDAyQkYsIDB4MjIxRiwgMHgxRENELA0KLSAgICAweDIyMjAsIDB4MDJGNCwgMHgyMjI1LCAweDNDODEsIDB4MjIyNiwgMHgzQzgyLCAweDIyMjcsIDB4MDJFRCwNCi0gICAgMHgyMjI4LCAweDAyRUUsIDB4MjIyOSwgMHgwMkVDLCAweDIyMkEsIDB4MDJFQiwgMHgyMjJCLCAweDAzMDEsDQotICAgIDB4MjIyQywgMHgwMzAyLCAweDIyMkQsIDB4MjAwMywgMHgyMjJFLCAweDFEQzgsIDB4MjIzNCwgMHgwMkMwLA0KLSAgICAweDIyMzUsIDB4MDMwMCwgMHgyMjNDLCAweDAwNjQsIDB4MjIzRCwgMHgwMkZFLCAweDIyNDMsIDB4MkY1OCwNCi0gICAgMHgyMjQ1LCAweDNDOTMsIDB4MjI0OCwgMHgzQzk0LCAweDIyNTIsIDB4MDJGQSwgMHgyMjYwLCAweDAyQkEsDQotICAgIDB4MjI2MSwgMHgwMkY5LCAweDIyNjIsIDB4M0M5MSwgMHgyMjY2LCAweDAyQkQsIDB4MjI2NywgMHgwMkJFLA0KLSAgICAweDIyNkEsIDB4MDJGQiwgMHgyMjZCLCAweDAyRkMsIDB4MjI3MiwgMHgyRjU5LCAweDIyNzMsIDB4MkY1QSwNCi0gICAgMHgyMjc2LCAweDNDOTUsIDB4MjI3NywgMHgzQzk2LCAweDIyODIsIDB4MDJFOSwgMHgyMjgzLCAweDAyRUEsDQotICAgIDB4MjI4NCwgMHgzQzcwLCAweDIyODUsIDB4M0M3MSwgMHgyMjg2LCAweDAyRTcsIDB4MjI4NywgMHgwMkU4LA0KLSAgICAweDIyOEEsIDB4M0M3MiwgMHgyMjhCLCAweDNDNzMsIDB4MjI5NSwgMHgyRjlDLCAweDIyOTYsIDB4MkY5QSwNCi0gICAgMHgyMjk3LCAweDJGOUQsIDB4MjI5OCwgMHgyRjlCLCAweDIyOUUsIDB4M0UyMiwgMHgyMkEwLCAweDJGOTksDQotICAgIDB4MjJBNSwgMHgwMkY1LCAweDIyQkYsIDB4MURDRSwgMHgyMkRBLCAweDNENkQsIDB4MjJEQiwgMHgzRDZFLA0KLSAgICAweDIzMDUsIDB4M0M3NiwgMHgyMzA2LCAweDNDNzcsIDB4MjMwNywgMHgyRkJCLCAweDIzMTIsIDB4MDJGNiwNCi0gICAgMHgyMzE4LCAweDNENzAsIDB4MjM5QiwgMHgyRjZGLCAweDIzOUMsIDB4MkY4NywgMHgyMzlELCAweDJGNzAsDQotICAgIDB4MjM5RSwgMHgyRjcxLCAweDIzOUYsIDB4MkY4NywgMHgyM0EwLCAweDJGNzIsIDB4MjNBMSwgMHgyRjc3LA0KLSAgICAweDIzQTIsIDB4MkY4NywgMHgyM0EzLCAweDJGNzgsIDB4MjNBNCwgMHgyRjc5LCAweDIzQTUsIDB4MkY4NywNCi0gICAgMHgyM0E2LCAweDJGN0EsIDB4MjNBNywgMHgxRkYyLCAweDIzQTgsIDB4MUZGMywgMHgyM0E5LCAweDFGRjQsDQotICAgIDB4MjNBQSwgMHgyRjg3LCAweDIzQUIsIDB4MUZFRSwgMHgyM0FDLCAweDFGRUYsIDB4MjNBRCwgMHgxRkYwLA0KLSAgICAweDIzQjAsIDB4M0ZCOCwgMHgyM0IxLCAweDNGQjksIDB4MjNCRSwgMHgzRjdELCAweDIzQkYsIDB4M0Y3RSwNCi0gICAgMHgyM0MwLCAweDNGN0YsIDB4MjNDMSwgMHgzRjgwLCAweDIzQzIsIDB4M0Y4MSwgMHgyM0MzLCAweDNGODIsDQotICAgIDB4MjNDNCwgMHgzRjgzLCAweDIzQzUsIDB4M0Y4NCwgMHgyM0M2LCAweDNGODUsIDB4MjNDNywgMHgzRjg2LA0KLSAgICAweDIzQzgsIDB4M0Y4NywgMHgyM0M5LCAweDNGODgsIDB4MjNDQSwgMHgzRjg5LCAweDIzQ0IsIDB4M0Y4QSwNCi0gICAgMHgyM0NDLCAweDNGOEIsIDB4MjNDRSwgMHgzRjkxLCAweDI0MjMsIDB4M0Y5MCwgMHgyNDYwLCAweDFEODMsDQotICAgIDB4MjQ2MSwgMHgxRDg0LCAweDI0NjIsIDB4MUQ4NSwgMHgyNDYzLCAweDFEODYsIDB4MjQ2NCwgMHgxRDg3LA0KLSAgICAweDI0NjUsIDB4MUQ4OCwgMHgyNDY2LCAweDFEODksIDB4MjQ2NywgMHgxRDhBLCAweDI0NjgsIDB4MUQ4QiwNCi0gICAgMHgyNDY5LCAweDFEOEMsIDB4MjQ2QSwgMHgxRDhELCAweDI0NkIsIDB4MUQ4RSwgMHgyNDZDLCAweDFEOEYsDQotICAgIDB4MjQ2RCwgMHgxRDkwLCAweDI0NkUsIDB4MUQ5MSwgMHgyNDZGLCAweDFEOTIsIDB4MjQ3MCwgMHgxRDkzLA0KLSAgICAweDI0NzEsIDB4MUQ5NCwgMHgyNDcyLCAweDFEOTUsIDB4MjQ3MywgMHgxRDk2LCAweDI0NzQsIDB4MUY4NywNCi0gICAgMHgyNDc1LCAweDFGODgsIDB4MjQ3NiwgMHgxRjg5LCAweDI0NzcsIDB4MUY4QSwgMHgyNDc4LCAweDFGOEIsDQotICAgIDB4MjQ3OSwgMHgxRjhDLCAweDI0N0EsIDB4MUY4RCwgMHgyNDdCLCAweDFGOEUsIDB4MjQ3QywgMHgxRjhGLA0KLSAgICAweDI0N0QsIDB4MUY5MCwgMHgyNDdFLCAweDFGOTEsIDB4MjQ3RiwgMHgxRjkyLCAweDI0ODAsIDB4MUY5MywNCi0gICAgMHgyNDgxLCAweDFGOTQsIDB4MjQ4MiwgMHgxRjk1LCAweDI0ODMsIDB4MUY5NiwgMHgyNDg0LCAweDFGOTcsDQotICAgIDB4MjQ4NSwgMHgxRjk4LCAweDI0ODYsIDB4MUY5OSwgMHgyNDg3LCAweDFGOUEsIDB4MjQ4OCwgMHgxRjdFLA0KLSAgICAweDI0ODksIDB4MUY3RiwgMHgyNDhBLCAweDFGODAsIDB4MjQ4QiwgMHgxRjgxLCAweDI0OEMsIDB4MUY4MiwNCi0gICAgMHgyNDhELCAweDFGODMsIDB4MjQ4RSwgMHgxRjg0LCAweDI0OEYsIDB4MUY4NSwgMHgyNDkwLCAweDFGODYsDQotICAgIDB4MjQ5QywgMHgxRkIwLCAweDI0OUQsIDB4MUZCMSwgMHgyNDlFLCAweDFGQjIsIDB4MjQ5RiwgMHgxRkIzLA0KLSAgICAweDI0QTAsIDB4MUZCNCwgMHgyNEExLCAweDFGQjUsIDB4MjRBMiwgMHgxRkI2LCAweDI0QTMsIDB4MUZCNywNCi0gICAgMHgyNEE0LCAweDFGQjgsIDB4MjRBNSwgMHgxRkI5LCAweDI0QTYsIDB4MUZCQSwgMHgyNEE3LCAweDFGQkIsDQotICAgIDB4MjRBOCwgMHgxRkJDLCAweDI0QTksIDB4MUZCRCwgMHgyNEFBLCAweDFGQkUsIDB4MjRBQiwgMHgxRkJGLA0KLSAgICAweDI0QUMsIDB4MUZDMCwgMHgyNEFELCAweDFGQzEsIDB4MjRBRSwgMHgxRkMyLCAweDI0QUYsIDB4MUZDMywNCi0gICAgMHgyNEIwLCAweDFGQzQsIDB4MjRCMSwgMHgxRkM1LCAweDI0QjIsIDB4MUZDNiwgMHgyNEIzLCAweDFGQzcsDQotICAgIDB4MjRCNCwgMHgxRkM4LCAweDI0QjUsIDB4MUZDOSwgMHgyNEI2LCAweDI4NjMsIDB4MjRCNywgMHgyODY0LA0KLSAgICAweDI0QjgsIDB4Mjg2NSwgMHgyNEI5LCAweDI4NjYsIDB4MjRCQSwgMHgyODY3LCAweDI0QkIsIDB4Mjg2OCwNCi0gICAgMHgyNEJDLCAweDI4NjksIDB4MjRCRCwgMHgyODZBLCAweDI0QkUsIDB4Mjg2QiwgMHgyNEJGLCAweDI4NkMsDQotICAgIDB4MjRDMCwgMHgyODZELCAweDI0QzEsIDB4Mjg2RSwgMHgyNEMyLCAweDI4NkYsIDB4MjRDMywgMHgyODcwLA0KLSAgICAweDI0QzQsIDB4Mjg3MSwgMHgyNEM1LCAweDI4NzIsIDB4MjRDNiwgMHgyODczLCAweDI0QzcsIDB4Mjg3NCwNCi0gICAgMHgyNEM4LCAweDI4NzUsIDB4MjRDOSwgMHgyODc2LCAweDI0Q0EsIDB4Mjg3NywgMHgyNENCLCAweDI4NzgsDQotICAgIDB4MjRDQywgMHgyODc5LCAweDI0Q0QsIDB4Mjg3QSwgMHgyNENFLCAweDI4N0IsIDB4MjRDRiwgMHgyODdDLA0KLSAgICAweDI0RDAsIDB4Mjg0OSwgMHgyNEQxLCAweDI4NEEsIDB4MjREMiwgMHgyODRCLCAweDI0RDMsIDB4Mjg0QywNCi0gICAgMHgyNEQ0LCAweDI4NEQsIDB4MjRENSwgMHgyODRFLCAweDI0RDYsIDB4Mjg0RiwgMHgyNEQ3LCAweDI4NTAsDQotICAgIDB4MjREOCwgMHgyODUxLCAweDI0RDksIDB4Mjg1MiwgMHgyNERBLCAweDI4NTMsIDB4MjREQiwgMHgyODU0LA0KLSAgICAweDI0REMsIDB4Mjg1NSwgMHgyNERELCAweDI4NTYsIDB4MjRERSwgMHgyODU3LCAweDI0REYsIDB4Mjg1OCwNCi0gICAgMHgyNEUwLCAweDI4NTksIDB4MjRFMSwgMHgyODVBLCAweDI0RTIsIDB4Mjg1QiwgMHgyNEUzLCAweDI4NUMsDQotICAgIDB4MjRFNCwgMHgyODVELCAweDI0RTUsIDB4Mjg1RSwgMHgyNEU2LCAweDI4NUYsIDB4MjRFNywgMHgyODYwLA0KLSAgICAweDI0RTgsIDB4Mjg2MSwgMHgyNEU5LCAweDI4NjIsIDB4MjRFQSwgMHgyMDIwLCAweDI0RUIsIDB4MjkxMywNCi0gICAgMHgyNEVDLCAweDI5MTQsIDB4MjRFRCwgMHgyOTE1LCAweDI0RUUsIDB4MjkxNiwgMHgyNEVGLCAweDI5MTcsDQotICAgIDB4MjRGMCwgMHgyOTE4LCAweDI0RjEsIDB4MjkxOSwgMHgyNEYyLCAweDI5MUEsIDB4MjRGMywgMHgyOTFCLA0KLSAgICAweDI0RjQsIDB4MjkxQywgMHgyNEY1LCAweDNGNUYsIDB4MjRGNiwgMHgzRjYwLCAweDI0RjcsIDB4M0Y2MSwNCi0gICAgMHgyNEY4LCAweDNGNjIsIDB4MjRGOSwgMHgzRjYzLCAweDI0RkEsIDB4M0Y2NCwgMHgyNEZCLCAweDNGNjUsDQotICAgIDB4MjRGQywgMHgzRjY2LCAweDI0RkQsIDB4M0Y2NywgMHgyNEZFLCAweDNGNjgsIDB4MjRGRiwgMHgyOTA3LA0KLSAgICAweDI1MDAsIDB4MUQzNywgMHgyNTAxLCAweDFEMzgsIDB4MjUwMiwgMHgxRDM5LCAweDI1MDMsIDB4MUQzQSwNCi0gICAgMHgyNTA0LCAweDFEM0IsIDB4MjUwNSwgMHgxRDNDLCAweDI1MDYsIDB4MUQzRCwgMHgyNTA3LCAweDFEM0UsDQotICAgIDB4MjUwOCwgMHgxRDNGLCAweDI1MDksIDB4MUQ0MCwgMHgyNTBBLCAweDFENDEsIDB4MjUwQiwgMHgxRDQyLA0KLSAgICAweDI1MEMsIDB4MUQ0MywgMHgyNTBELCAweDFENDQsIDB4MjUwRSwgMHgxRDQ1LCAweDI1MEYsIDB4MUQ0NiwNCi0gICAgMHgyNTEwLCAweDFENDcsIDB4MjUxMSwgMHgxRDQ4LCAweDI1MTIsIDB4MUQ0OSwgMHgyNTEzLCAweDFENEEsDQotICAgIDB4MjUxNCwgMHgxRDRCLCAweDI1MTUsIDB4MUQ0QywgMHgyNTE2LCAweDFENEQsIDB4MjUxNywgMHgxRDRFLA0KLSAgICAweDI1MTgsIDB4MUQ0RiwgMHgyNTE5LCAweDFENTAsIDB4MjUxQSwgMHgxRDUxLCAweDI1MUIsIDB4MUQ1MiwNCi0gICAgMHgyNTFDLCAweDFENTMsIDB4MjUxRCwgMHgxRDU0LCAweDI1MUUsIDB4MUQ1NSwgMHgyNTFGLCAweDFENTYsDQotICAgIDB4MjUyMCwgMHgxRDU3LCAweDI1MjEsIDB4MUQ1OCwgMHgyNTIyLCAweDFENTksIDB4MjUyMywgMHgxRDVBLA0KLSAgICAweDI1MjQsIDB4MUQ1QiwgMHgyNTI1LCAweDFENUMsIDB4MjUyNiwgMHgxRDVELCAweDI1MjcsIDB4MUQ1RSwNCi0gICAgMHgyNTI4LCAweDFENUYsIDB4MjUyOSwgMHgxRDYwLCAweDI1MkEsIDB4MUQ2MSwgMHgyNTJCLCAweDFENjIsDQotICAgIDB4MjUyQywgMHgxRDYzLCAweDI1MkQsIDB4MUQ2NCwgMHgyNTJFLCAweDFENjUsIDB4MjUyRiwgMHgxRDY2LA0KLSAgICAweDI1MzAsIDB4MUQ2NywgMHgyNTMxLCAweDFENjgsIDB4MjUzMiwgMHgxRDY5LCAweDI1MzMsIDB4MUQ2QSwNCi0gICAgMHgyNTM0LCAweDFENkIsIDB4MjUzNSwgMHgxRDZDLCAweDI1MzYsIDB4MUQ2RCwgMHgyNTM3LCAweDFENkUsDQotICAgIDB4MjUzOCwgMHgxRDZGLCAweDI1MzksIDB4MUQ3MCwgMHgyNTNBLCAweDFENzEsIDB4MjUzQiwgMHgxRDcyLA0KLSAgICAweDI1M0MsIDB4MUQ3MywgMHgyNTNELCAweDFENzQsIDB4MjUzRSwgMHgxRDc1LCAweDI1M0YsIDB4MUQ3NiwNCi0gICAgMHgyNTQwLCAweDFENzcsIDB4MjU0MSwgMHgxRDc4LCAweDI1NDIsIDB4MUQ3OSwgMHgyNTQzLCAweDFEN0EsDQotICAgIDB4MjU0NCwgMHgxRDdCLCAweDI1NDUsIDB4MUQ3QywgMHgyNTQ2LCAweDFEN0QsIDB4MjU0NywgMHgxRDdFLA0KLSAgICAweDI1NDgsIDB4MUQ3RiwgMHgyNTQ5LCAweDFEODAsIDB4MjU0QSwgMHgxRDgxLCAweDI1NEIsIDB4MUQ4MiwNCi0gICAgMHgyNTUwLCAweDIwM0IsIDB4MjU1RSwgMHgyMDNDLCAweDI1NjEsIDB4MjAzRSwgMHgyNTZBLCAweDIwM0QsDQotICAgIDB4MjU2RCwgMHgyMDM3LCAweDI1NkUsIDB4MjAzOCwgMHgyNTZGLCAweDIwM0EsIDB4MjU3MCwgMHgyMDM5LA0KLSAgICAweDI1NzEsIDB4MjA0NSwgMHgyNTcyLCAweDIwNDYsIDB4MjU3MywgMHgyMDQ3LCAweDI1ODEsIDB4MjAyNiwNCi0gICAgMHgyNTgyLCAweDIwMjcsIDB4MjU4MywgMHgyMDI4LCAweDI1ODQsIDB4MjAyOSwgMHgyNTg1LCAweDIwMkEsDQotICAgIDB4MjU4NiwgMHgyMDJCLCAweDI1ODcsIDB4MjAyQywgMHgyNTg4LCAweDIwMkQsIDB4MjU4OSwgMHgyMDM0LA0KLSAgICAweDI1OEEsIDB4MjAzMywgMHgyNThCLCAweDIwMzIsIDB4MjU4QywgMHgyMDMxLCAweDI1OEQsIDB4MjAzMCwNCi0gICAgMHgyNThFLCAweDIwMkYsIDB4MjU4RiwgMHgyMDJFLCAweDI1OTQsIDB4MjAzNSwgMHgyNTk1LCAweDIwMzYsDQotICAgIDB4MjVBMCwgMHgwMkQ5LCAweDI1QTEsIDB4MDJEOCwgMHgyNUEyLCAweDFGNEYsIDB4MjVBQSwgMHgyRkNGLA0KLSAgICAweDI1QUIsIDB4MkZDRCwgMHgyNUIxLCAweDNGNkIsIDB4MjVCMiwgMHgwMkRCLCAweDI1QjMsIDB4MDJEQSwNCi0gICAgMHgyNUI2LCAweDJGQTMsIDB4MjVCNywgMHgxRjRBLCAweDI1QkMsIDB4MDJERCwgMHgyNUJELCAweDAyREMsDQotICAgIDB4MjVDMCwgMHgyRkEyLCAweDI1QzEsIDB4MUY0OSwgMHgyNUM2LCAweDAyRDcsIDB4MjVDNywgMHgwMkQ2LA0KLSAgICAweDI1QzksIDB4MjAxMiwgMHgyNUNCLCAweDAyRDMsIDB4MjVDQywgMHgyOTA2LCAweDI1Q0UsIDB4MDJENSwNCi0gICAgMHgyNUNGLCAweDAyRDQsIDB4MjVEMCwgMHgzRjkyLCAweDI1RDEsIDB4M0Y5MywgMHgyNUQyLCAweDNGOTQsDQotICAgIDB4MjVEMywgMHgzRjk1LCAweDI1RTIsIDB4MjAzRiwgMHgyNUUzLCAweDIwNDAsIDB4MjVFNCwgMHgyMDQyLA0KLSAgICAweDI1RTUsIDB4MjA0MSwgMHgyNUU2LCAweDJGREUsIDB4MjVFRiwgMHgwMzBCLCAweDI2MDAsIDB4MjAxNywNCi0gICAgMHgyNjAxLCAweDIwMTgsIDB4MjYwMiwgMHgyMDE5LCAweDI2MDMsIDB4MjAxQSwgMHgyNjA1LCAweDAyRDIsDQotICAgIDB4MjYwNiwgMHgwMkQxLCAweDI2MEUsIDB4MUY3OCwgMHgyNjE2LCAweDNGNjksIDB4MjYxNywgMHgzRjZBLA0KLSAgICAweDI2MUMsIDB4MjAxQywgMHgyNjFELCAweDIwMUQsIDB4MjYxRSwgMHgyMDFCLCAweDI2MUYsIDB4MjAxRSwNCi0gICAgMHgyNjQwLCAweDAyQzIsIDB4MjY0MiwgMHgwMkMxLCAweDI2NjAsIDB4MjAxMywgMHgyNjYxLCAweDFGNTEsDQotICAgIDB4MjY2MiwgMHgxRjUzLCAweDI2NjMsIDB4MjAxNSwgMHgyNjY0LCAweDFGNTIsIDB4MjY2NSwgMHgyMDE0LA0KLSAgICAweDI2NjYsIDB4MjAxNiwgMHgyNjY3LCAweDFGNTAsIDB4MjY2OCwgMHgyRjQyLCAweDI2NjksIDB4MkY0MywNCi0gICAgMHgyNjZBLCAweDAzMDcsIDB4MjY2QiwgMHgzRjQ4LCAweDI2NkMsIDB4MkY0NCwgMHgyNjZELCAweDAzMDYsDQotICAgIDB4MjY2RSwgMHgzRjQ3LCAweDI2NkYsIDB4MDMwNSwgMHgyNjcyLCAweDNGQkEsIDB4MjY3MywgMHgzRkJCLA0KLSAgICAweDI2NzQsIDB4M0ZCQywgMHgyNjc1LCAweDNGQkQsIDB4MjY3NiwgMHgzRkJFLCAweDI2NzcsIDB4M0ZCRiwNCi0gICAgMHgyNjc4LCAweDNGQzAsIDB4MjY3OSwgMHgzRkMxLCAweDI2N0EsIDB4M0ZDMiwgMHgyNjdCLCAweDNGQzMsDQotICAgIDB4MjY3QywgMHgzRkM0LCAweDI2N0QsIDB4M0ZDNSwgMHgyNkEwLCAweDJGQTAsIDB4MjcwMiwgMHgyRjkwLA0KLSAgICAweDI3MTMsIDB4M0Y4RSwgMHgyNzFBLCAweDJGRDEsIDB4MjczRiwgMHgyRkM1LCAweDI3NDAsIDB4MkZDNCwNCi0gICAgMHgyNzU2LCAweDJGRTMsIDB4Mjc3NiwgMHgyMDVFLCAweDI3NzcsIDB4MjA1RiwgMHgyNzc4LCAweDIwNjAsDQotICAgIDB4Mjc3OSwgMHgyMDYxLCAweDI3N0EsIDB4MjA2MiwgMHgyNzdCLCAweDIwNjMsIDB4Mjc3QywgMHgyMDY0LA0KLSAgICAweDI3N0QsIDB4MjA2NSwgMHgyNzdFLCAweDIwNjYsIDB4Mjc3RiwgMHgyOTEyLCAweDI3QTEsIDB4MjAwRSwNCi0gICAgMHgyOTM0LCAweDNGNDksIDB4MjkzNSwgMHgzRjRBLCAweDI5QkYsIDB4M0Y0QiwgMHgyOUZBLCAweDNGNEYsDQotICAgIDB4MjlGQiwgMHgzRjUwLCAweDJCMDUsIDB4MjAwRiwgMHgyQjA2LCAweDIwMTAsIDB4MkIwNywgMHgyMDExLA0KLSAgICAweDJFODMsIDB4MzdFMSwgMHgyRTg1LCAweDM2MjAsIDB4MkU4NywgMHgzNzE5LCAweDJFODksIDB4MzgxNCwNCi0gICAgMHgyRThCLCAweDM3MUUsIDB4MkU4QywgMHgzNjA5LCAweDJFOEQsIDB4MzYwQSwgMHgyRThFLCAweDEwNzEsDQotICAgIDB4MkU4RiwgMHgzODhDLCAweDJFOTAsIDB4MTIyNiwgMHgyRTkyLCAweDBFQjIsIDB4MkU5MywgMHgxMjgzLA0KLSAgICAweDJFOTQsIDB4MTJBQiwgMHgyRTk1LCAweDNDMUYsIDB4MkU5NiwgMHgzOEMyLCAweDJFOTcsIDB4MzYxQywNCi0gICAgMHgyRTk4LCAweDM4RTEsIDB4MkU5OSwgMHgxM0MzLCAweDJFOUIsIDB4MTNFMSwgMHgyRTlFLCAweDQ1RTUsDQotICAgIDB4MkU5RiwgMHgwRTNDLCAweDJFQTAsIDB4MEVCRCwgMHgyRUExLCAweDM5NjEsIDB4MkVBMiwgMHgzOTYyLA0KLSAgICAweDJFQTMsIDB4Mzk5RCwgMHgyRUE0LCAweDNDMjYsIDB4MkVBNiwgMHgzNzRELCAweDJFQTgsIDB4MzlCQywNCi0gICAgMHgyRUE5LCAweDM1QTEsIDB4MkVBQSwgMHgzNkFCLCAweDJFQUIsIDB4M0E5NywgMHgyRUFDLCAweDRBQkEsDQotICAgIDB4MkVBRCwgMHgzQTM5LCAweDJFQUUsIDB4MzY2MiwgMHgyRUIxLCAweDNBOTgsIDB4MkVCMiwgMHgzQTk3LA0KLSAgICAweDJFQjMsIDB4Mzc2RCwgMHgyRUI3LCAweDM2RkUsIDB4MkVCOSwgMHgzNzEzLCAweDJFQkMsIDB4MzVCMywNCi0gICAgMHgyRUJELCAweDM1NEUsIDB4MkVCRSwgMHgzNzc1LCAweDJFQkYsIDB4Mzc3NiwgMHgyRUMwLCAweDM3NzcsDQotICAgIDB4MkVDMSwgMHgwNzhCLCAweDJFQzIsIDB4M0IwQSwgMHgyRUMzLCAweDM2MkUsIDB4MkVDNCwgMHgwQTYyLA0KLSAgICAweDJFQzYsIDB4MzU3MiwgMHgyRUNBLCAweDM2NEEsIDB4MkVDQywgMHgzQzJCLCAweDJFQ0QsIDB4M0I1MCwNCi0gICAgMHgyRUNGLCAweDNCOUUsIDB4MkVEMSwgMHgwQkQ1LCAweDJFRDIsIDB4M0I5NywgMHgyRUQ2LCAweDNCOUUsDQotICAgIDB4MkVENywgMHgzNTRELCAweDJFRDgsIDB4MEE2OCwgMHgyRURELCAweDM2MTcsIDB4MkVERSwgMHgzNjE5LA0KLSAgICAweDJFREYsIDB4MzYxOCwgMHgyRUU0LCAweDA2NEUsIDB4MkVFOCwgMHgwRDM0LCAweDJFRTksIDB4MDUyQiwNCi0gICAgMHgyRUVCLCAweDBBNkEsIDB4MkVFRCwgMHgwOEMzLCAweDJFRUYsIDB4MEY3RCwgMHgyRUYyLCAweDA2NEYsDQotICAgIDB4MkYwMCwgMHgwNEIwLCAweDJGMDEsIDB4MjBCMywgMHgyRjAyLCAweDBGRkYsIDB4MkYwMywgMHgxMDAxLA0KLSAgICAweDJGMDQsIDB4MDUzNSwgMHgyRjA1LCAweDEwMDYsIDB4MkYwNiwgMHgwQ0NCLCAweDJGMDcsIDB4MTAwRSwNCi0gICAgMHgyRjA4LCAweDBBMTMsIDB4MkYwOSwgMHgxMDcwLCAweDJGMEEsIDB4MENENiwgMHgyRjBCLCAweDBENDAsDQotICAgIDB4MkYwQywgMHgxMDdCLCAweDJGMEQsIDB4MTA4MywgMHgyRjBFLCAweDEwODksIDB4MkYwRiwgMHgxMDkzLA0KLSAgICAweDJGMTAsIDB4MTA5OCwgMHgyRjExLCAweDBDNUIsIDB4MkYxMiwgMHgwRjk3LCAweDJGMTMsIDB4MTBDNiwNCi0gICAgMHgyRjE0LCAweDEwQ0QsIDB4MkYxNSwgMHgxMENFLCAweDJGMTYsIDB4MTBEMywgMHgyRjE3LCAweDA5NDcsDQotICAgIDB4MkYxOCwgMHgwRTdDLCAweDJGMTksIDB4MTBEQywgMHgyRjFBLCAweDEwRTEsIDB4MkYxQiwgMHgxMEU4LA0KLSAgICAweDJGMUMsIDB4MEVBMiwgMHgyRjFELCAweDA3QjEsIDB4MkYxRSwgMHgxMTZCLCAweDJGMUYsIDB4MEM1NCwNCi0gICAgMHgyRjIwLCAweDA4OUMsIDB4MkYyMSwgMHgxMUJBLCAweDJGMjIsIDB4MTFCQiwgMHgyRjIzLCAweDBGMjYsDQotICAgIDB4MkYyNCwgMHgwQjQ3LCAweDJGMjUsIDB4MDk4MSwgMHgyRjI2LCAweDA4QTAsIDB4MkYyNywgMHgxMjBFLA0KLSAgICAweDJGMjgsIDB4MEE0NywgMHgyRjI5LCAweDA5OTYsIDB4MkYyQSwgMHgxMjI2LCAweDJGMkIsIDB4MTIyOCwNCi0gICAgMHgyRjJDLCAweDEyMzIsIDB4MkYyRCwgMHgwODgxLCAweDJGMkUsIDB4MTI2QywgMHgyRjJGLCAweDA3QkIsDQotICAgIDB4MkYzMCwgMHgwNzdFLCAweDJGMzEsIDB4MDZDQSwgMHgyRjMyLCAweDA1RUYsIDB4MkYzMywgMHgxMjgzLA0KLSAgICAweDJGMzQsIDB4MTI4NSwgMHgyRjM1LCAweDEyOTksIDB4MkYzNiwgMHgxMjlCLCAweDJGMzcsIDB4MTJBMCwNCi0gICAgMHgyRjM4LCAweDA2NzcsIDB4MkYzOSwgMHgzOEI5LCAweDJGM0EsIDB4MTJBRiwgMHgyRjNCLCAweDEyQjEsDQotICAgIDB4MkYzQywgMHgwOUZBLCAweDJGM0QsIDB4MTM0MiwgMHgyRjNFLCAweDA3ODEsIDB4MkYzRiwgMHgwOTE2LA0KLSAgICAweDJGNDAsIDB4MDhBNywgMHgyRjQxLCAweDEzQzIsIDB4MkY0MiwgMHgwRTA4LCAweDJGNDMsIDB4MEM0NywNCi0gICAgMHgyRjQ0LCAweDA2Q0MsIDB4MkY0NSwgMHgwRTRELCAweDJGNDYsIDB4MTNFMCwgMHgyRjQ3LCAweDBDRDQsDQotICAgIDB4MkY0OCwgMHgxNDBDLCAweDJGNDksIDB4MDc0NCwgMHgyRjRBLCAweDBFRTYsIDB4MkY0QiwgMHgwNzNELA0KLSAgICAweDJGNEMsIDB4MDhBRCwgMHgyRjRELCAweDE0RTUsIDB4MkY0RSwgMHgxNEY0LCAweDJGNEYsIDB4MTRGOCwNCi0gICAgMHgyRjUwLCAweDBEN0EsIDB4MkY1MSwgMHgwRURGLCAweDJGNTIsIDB4MDhBRiwgMHgyRjUzLCAweDE1MDIsDQotICAgIDB4MkY1NCwgMHgwQTJCLCAweDJGNTUsIDB4MDU1MCwgMHgyRjU2LCAweDBCRkEsIDB4MkY1NywgMHgwREQ1LA0KLSAgICAweDJGNTgsIDB4MTVFNCwgMHgyRjU5LCAweDE1RTYsIDB4MkY1QSwgMHgwRTIyLCAweDJGNUIsIDB4MDU2NywNCi0gICAgMHgyRjVDLCAweDA2ODcsIDB4MkY1RCwgMHgwNzU4LCAweDJGNUUsIDB4MDc3MCwgMHgyRjVGLCAweDA2QzQsDQotICAgIDB4MkY2MCwgMHgwNERELCAweDJGNjEsIDB4MDVFMCwgMHgyRjYyLCAweDA2MDEsIDB4MkY2MywgMHgwQTVDLA0KLSAgICAweDJGNjQsIDB4MEYzQiwgMHgyRjY1LCAweDBDM0UsIDB4MkY2NiwgMHgwRDk3LCAweDJGNjcsIDB4M0EwMCwNCi0gICAgMHgyRjY4LCAweDE2OTcsIDB4MkY2OSwgMHgwRDI4LCAweDJGNkEsIDB4MEQ3RCwgMHgyRjZCLCAweDA4N0MsDQotICAgIDB4MkY2QywgMHgwRUU4LCAweDJGNkQsIDB4MEVDMywgMHgyRjZFLCAweDBFRkMsIDB4MkY2RiwgMHgwQTc0LA0KLSAgICAweDJGNzAsIDB4MDhENCwgMHgyRjcxLCAweDNBNDEsIDB4MkY3MiwgMHgwNTUzLCAweDJGNzMsIDB4MDc0MCwNCi0gICAgMHgyRjc0LCAweDBGNzEsIDB4MkY3NSwgMHgwQjlCLCAweDJGNzYsIDB4MEUxNiwgMHgyRjc3LCAweDA4QjMsDQotICAgIDB4MkY3OCwgMHgwNjA4LCAweDJGNzksIDB4MTgxMywgMHgyRjdBLCAweDBGM0QsIDB4MkY3QiwgMHgwNENCLA0KLSAgICAweDJGN0MsIDB4MEZERCwgMHgyRjdELCAweDA4RDUsIDB4MkY3RSwgMHgxODNELCAweDJGN0YsIDB4MDhENiwNCi0gICAgMHgyRjgwLCAweDE4NTMsIDB4MkY4MSwgMHgwQ0QxLCAweDJGODIsIDB4MEEwOSwgMHgyRjgzLCAweDA4RDcsDQotICAgIDB4MkY4NCwgMHgwOEI4LCAweDJGODUsIDB4MDREMywgMHgyRjg2LCAweDBBODksIDB4MkY4NywgMHgwQUE2LA0KLSAgICAweDJGODgsIDB4MDkzOCwgMHgyRjg5LCAweDA4MjEsIDB4MkY4QSwgMHgwOUVELCAweDJGOEIsIDB4MThCMiwNCi0gICAgMHgyRjhDLCAweDE5NEYsIDB4MkY4RCwgMHgwQkFDLCAweDJGOEUsIDB4MDc0MiwgMHgyRjhGLCAweDA3RTYsDQotICAgIDB4MkY5MCwgMHgwNEE1LCAweDJGOTEsIDB4MTlFQiwgMHgyRjkyLCAweDA3NUYsIDB4MkY5MywgMHgwNUFGLA0KLSAgICAweDJGOTQsIDB4MDc3NCwgMHgyRjk1LCAweDBCNjksIDB4MkY5NiwgMHgwQzdFLCAweDJGOTcsIDB4MUE1NiwNCi0gICAgMHgyRjk4LCAweDFBNTksIDB4MkY5OSwgMHgwNThCLCAweDJGOUEsIDB4MEE3QSwgMHgyRjlCLCAweDBBRjgsDQotICAgIDB4MkY5QywgMHgwQjBELCAweDJGOUQsIDB4MEEwRSwgMHgyRjlFLCAweDA5MDIsIDB4MkY5RiwgMHgwQTBGLA0KLSAgICAweDJGQTAsIDB4MEI2MiwgMHgyRkExLCAweDNCNEYsIDB4MkZBMiwgMHgwRjIyLCAweDJGQTMsIDB4MENBQiwNCi0gICAgMHgyRkE0LCAweDBENjQsIDB4MkZBNSwgMHgwRjZDLCAweDJGQTYsIDB4MDZEQSwgMHgyRkE3LCAweDBCRDUsDQotICAgIDB4MkZBOCwgMHgwRUYzLCAweDJGQTksIDB4MERERSwgMHgyRkFBLCAweDFCQzksIDB4MkZBQiwgMHgxQkNCLA0KLSAgICAweDJGQUMsIDB4MDRDRCwgMHgyRkFELCAweDIxRjcsIDB4MkZBRSwgMHgwRDg3LCAweDJGQUYsIDB4MEVEOCwNCi0gICAgMHgyRkIwLCAweDA1QjUsIDB4MkZCMSwgMHgxQzAzLCAweDJGQjIsIDB4MUMwNSwgMHgyRkIzLCAweDA1M0IsDQotICAgIDB4MkZCNCwgMHgwRTE3LCAweDJGQjUsIDB4MERFOSwgMHgyRkI2LCAweDBEODgsIDB4MkZCNywgMHgwOUVGLA0KLSAgICAweDJGQjgsIDB4MDkxRiwgMHgyRkI5LCAweDA3RjMsIDB4MkZCQSwgMHgwRDA1LCAweDJGQkIsIDB4MDgwRSwNCi0gICAgMHgyRkJDLCAweDA3RjQsIDB4MkZCRCwgMHgxQzZDLCAweDJGQkUsIDB4MUM3RCwgMHgyRkJGLCAweDFDODMsDQotICAgIDB4MkZDMCwgMHgxQzg0LCAweDJGQzEsIDB4MDY0RSwgMHgyRkMyLCAweDA2OTUsIDB4MkZDMywgMHgwQkQ3LA0KLSAgICAweDJGQzQsIDB4MUNGNiwgMHgyRkM1LCAweDA4REIsIDB4MkZDNiwgMHgxRDAxLCAweDJGQzcsIDB4MEU5MSwNCi0gICAgMHgyRkM4LCAweDM0MEIsIDB4MkZDOSwgMHgwNjZBLCAweDJGQ0EsIDB4MDgwNywgMHgyRkNCLCAweDFEMTYsDQotICAgIDB4MkZDQywgMHgxRDE5LCAweDJGQ0QsIDB4MEMxRSwgMHgyRkNFLCAweDA3OTEsIDB4MkZDRiwgMHgwQUNGLA0KLSAgICAweDJGRDAsIDB4MEQ5MywgMHgyRkQxLCAweDFEMjEsIDB4MkZEMiwgMHgxRDIyLCAweDJGRDMsIDB4MEY3RSwNCi0gICAgMHgyRkQ0LCAweDFEMzAsIDB4MkZENSwgMHgxRDMxLCAweDMwMDAsIDB4MDI3OSwgMHgzMDAxLCAweDAyN0EsDQotICAgIDB4MzAwMiwgMHgwMjdCLCAweDMwMDMsIDB4MDI4RiwgMHgzMDA0LCAweDIwNzQsIDB4MzAwNSwgMHgwMjkxLA0KLSAgICAweDMwMDYsIDB4MDI5MiwgMHgzMDA3LCAweDAyOTMsIDB4MzAwOCwgMHgwMkFBLCAweDMwMDksIDB4MDJBQiwNCi0gICAgMHgzMDBBLCAweDAyQUMsIDB4MzAwQiwgMHgwMkFELCAweDMwMEMsIDB4MDJBRSwgMHgzMDBELCAweDAyQUYsDQotICAgIDB4MzAwRSwgMHgwMkIwLCAweDMwMEYsIDB4MDJCMSwgMHgzMDEwLCAweDAyQjIsIDB4MzAxMSwgMHgwMkIzLA0KLSAgICAweDMwMTIsIDB4MDJERiwgMHgzMDEzLCAweDAyRTQsIDB4MzAxNCwgMHgwMkE0LCAweDMwMTUsIDB4MDJBNSwNCi0gICAgMHgzMDE2LCAweDNGNDUsIDB4MzAxNywgMHgzRjQ2LCAweDMwMTgsIDB4MkY2MSwgMHgzMDE5LCAweDJGNjIsDQotICAgIDB4MzAxQywgMHgwMjk5LCAweDMwMUQsIDB4MURCOCwgMHgzMDFGLCAweDFEQjksIDB4MzAyMCwgMHgxRjdBLA0KLSAgICAweDMwMzAsIDB4MkZCQSwgMHgzMDMzLCAweDJGNEMsIDB4MzAzNCwgMHgyRjRELCAweDMwMzUsIDB4MkY0RSwNCi0gICAgMHgzMDM2LCAweDFGNzksIDB4MzAzQiwgMHgyRjRBLCAweDMwM0MsIDB4M0Y0MiwgMHgzMDNELCAweDJGOTMsDQotICAgIDB4MzA0MSwgMHgwMzRBLCAweDMwNDIsIDB4MDM0QiwgMHgzMDQzLCAweDAzNEMsIDB4MzA0NCwgMHgwMzRELA0KLSAgICAweDMwNDUsIDB4MDM0RSwgMHgzMDQ2LCAweDAzNEYsIDB4MzA0NywgMHgwMzUwLCAweDMwNDgsIDB4MDM1MSwNCi0gICAgMHgzMDQ5LCAweDAzNTIsIDB4MzA0QSwgMHgwMzUzLCAweDMwNEIsIDB4MDM1NCwgMHgzMDRDLCAweDAzNTUsDQotICAgIDB4MzA0RCwgMHgwMzU2LCAweDMwNEUsIDB4MDM1NywgMHgzMDRGLCAweDAzNTgsIDB4MzA1MCwgMHgwMzU5LA0KLSAgICAweDMwNTEsIDB4MDM1QSwgMHgzMDUyLCAweDAzNUIsIDB4MzA1MywgMHgwMzVDLCAweDMwNTQsIDB4MDM1RCwNCi0gICAgMHgzMDU1LCAweDAzNUUsIDB4MzA1NiwgMHgwMzVGLCAweDMwNTcsIDB4MDM2MCwgMHgzMDU4LCAweDAzNjEsDQotICAgIDB4MzA1OSwgMHgwMzYyLCAweDMwNUEsIDB4MDM2MywgMHgzMDVCLCAweDAzNjQsIDB4MzA1QywgMHgwMzY1LA0KLSAgICAweDMwNUQsIDB4MDM2NiwgMHgzMDVFLCAweDAzNjcsIDB4MzA1RiwgMHgwMzY4LCAweDMwNjAsIDB4MDM2OSwNCi0gICAgMHgzMDYxLCAweDAzNkEsIDB4MzA2MiwgMHgwMzZCLCAweDMwNjMsIDB4MDM2QywgMHgzMDY0LCAweDAzNkQsDQotICAgIDB4MzA2NSwgMHgwMzZFLCAweDMwNjYsIDB4MDM2RiwgMHgzMDY3LCAweDAzNzAsIDB4MzA2OCwgMHgwMzcxLA0KLSAgICAweDMwNjksIDB4MDM3MiwgMHgzMDZBLCAweDAzNzMsIDB4MzA2QiwgMHgwMzc0LCAweDMwNkMsIDB4MDM3NSwNCi0gICAgMHgzMDZELCAweDAzNzYsIDB4MzA2RSwgMHgwMzc3LCAweDMwNkYsIDB4MDM3OCwgMHgzMDcwLCAweDAzNzksDQotICAgIDB4MzA3MSwgMHgwMzdBLCAweDMwNzIsIDB4MDM3QiwgMHgzMDczLCAweDAzN0MsIDB4MzA3NCwgMHgwMzdELA0KLSAgICAweDMwNzUsIDB4MDM3RSwgMHgzMDc2LCAweDAzN0YsIDB4MzA3NywgMHgwMzgwLCAweDMwNzgsIDB4MDM4MSwNCi0gICAgMHgzMDc5LCAweDAzODIsIDB4MzA3QSwgMHgwMzgzLCAweDMwN0IsIDB4MDM4NCwgMHgzMDdDLCAweDAzODUsDQotICAgIDB4MzA3RCwgMHgwMzg2LCAweDMwN0UsIDB4MDM4NywgMHgzMDdGLCAweDAzODgsIDB4MzA4MCwgMHgwMzg5LA0KLSAgICAweDMwODEsIDB4MDM4QSwgMHgzMDgyLCAweDAzOEIsIDB4MzA4MywgMHgwMzhDLCAweDMwODQsIDB4MDM4RCwNCi0gICAgMHgzMDg1LCAweDAzOEUsIDB4MzA4NiwgMHgwMzhGLCAweDMwODcsIDB4MDM5MCwgMHgzMDg4LCAweDAzOTEsDQotICAgIDB4MzA4OSwgMHgwMzkyLCAweDMwOEEsIDB4MDM5MywgMHgzMDhCLCAweDAzOTQsIDB4MzA4QywgMHgwMzk1LA0KLSAgICAweDMwOEQsIDB4MDM5NiwgMHgzMDhFLCAweDAzOTcsIDB4MzA4RiwgMHgwMzk4LCAweDMwOTAsIDB4MDM5OSwNCi0gICAgMHgzMDkxLCAweDAzOUEsIDB4MzA5MiwgMHgwMzlCLCAweDMwOTMsIDB4MDM5QywgMHgzMDk0LCAweDFGMTYsDQotICAgIDB4MzA5NSwgMHgxRjE3LCAweDMwOTYsIDB4MUYxOCwgMHgzMDk5LCAweDNGQzYsIDB4MzA5QSwgMHgzRkM3LA0KLSAgICAweDMwOUIsIDB4MDI4MywgMHgzMDlDLCAweDAyODQsIDB4MzA5RCwgMHgwMjhELCAweDMwOUUsIDB4MDI4RSwNCi0gICAgMHgzMDlGLCAweDJGOTUsIDB4MzBBMCwgMHgzRjRELCAweDMwQTEsIDB4MDM5RCwgMHgzMEEyLCAweDAzOUUsDQotICAgIDB4MzBBMywgMHgwMzlGLCAweDMwQTQsIDB4MDNBMCwgMHgzMEE1LCAweDAzQTEsIDB4MzBBNiwgMHgwM0EyLA0KLSAgICAweDMwQTcsIDB4MDNBMywgMHgzMEE4LCAweDAzQTQsIDB4MzBBOSwgMHgwM0E1LCAweDMwQUEsIDB4MDNBNiwNCi0gICAgMHgzMEFCLCAweDAzQTcsIDB4MzBBQywgMHgwM0E4LCAweDMwQUQsIDB4MDNBOSwgMHgzMEFFLCAweDAzQUEsDQotICAgIDB4MzBBRiwgMHgwM0FCLCAweDMwQjAsIDB4MDNBQywgMHgzMEIxLCAweDAzQUQsIDB4MzBCMiwgMHgwM0FFLA0KLSAgICAweDMwQjMsIDB4MDNBRiwgMHgzMEI0LCAweDAzQjAsIDB4MzBCNSwgMHgwM0IxLCAweDMwQjYsIDB4MDNCMiwNCi0gICAgMHgzMEI3LCAweDAzQjMsIDB4MzBCOCwgMHgwM0I0LCAweDMwQjksIDB4MDNCNSwgMHgzMEJBLCAweDAzQjYsDQotICAgIDB4MzBCQiwgMHgwM0I3LCAweDMwQkMsIDB4MDNCOCwgMHgzMEJELCAweDAzQjksIDB4MzBCRSwgMHgwM0JBLA0KLSAgICAweDMwQkYsIDB4MDNCQiwgMHgzMEMwLCAweDAzQkMsIDB4MzBDMSwgMHgwM0JELCAweDMwQzIsIDB4MDNCRSwNCi0gICAgMHgzMEMzLCAweDAzQkYsIDB4MzBDNCwgMHgwM0MwLCAweDMwQzUsIDB4MDNDMSwgMHgzMEM2LCAweDAzQzIsDQotICAgIDB4MzBDNywgMHgwM0MzLCAweDMwQzgsIDB4MDNDNCwgMHgzMEM5LCAweDAzQzUsIDB4MzBDQSwgMHgwM0M2LA0KLSAgICAweDMwQ0IsIDB4MDNDNywgMHgzMENDLCAweDAzQzgsIDB4MzBDRCwgMHgwM0M5LCAweDMwQ0UsIDB4MDNDQSwNCi0gICAgMHgzMENGLCAweDAzQ0IsIDB4MzBEMCwgMHgwM0NDLCAweDMwRDEsIDB4MDNDRCwgMHgzMEQyLCAweDAzQ0UsDQotICAgIDB4MzBEMywgMHgwM0NGLCAweDMwRDQsIDB4MDNEMCwgMHgzMEQ1LCAweDAzRDEsIDB4MzBENiwgMHgwM0QyLA0KLSAgICAweDMwRDcsIDB4MDNEMywgMHgzMEQ4LCAweDAzRDQsIDB4MzBEOSwgMHgwM0Q1LCAweDMwREEsIDB4MDNENiwNCi0gICAgMHgzMERCLCAweDAzRDcsIDB4MzBEQywgMHgwM0Q4LCAweDMwREQsIDB4MDNEOSwgMHgzMERFLCAweDAzREEsDQotICAgIDB4MzBERiwgMHgwM0RCLCAweDMwRTAsIDB4MDNEQywgMHgzMEUxLCAweDAzREQsIDB4MzBFMiwgMHgwM0RFLA0KLSAgICAweDMwRTMsIDB4MDNERiwgMHgzMEU0LCAweDAzRTAsIDB4MzBFNSwgMHgwM0UxLCAweDMwRTYsIDB4MDNFMiwNCi0gICAgMHgzMEU3LCAweDAzRTMsIDB4MzBFOCwgMHgwM0U0LCAweDMwRTksIDB4MDNFNSwgMHgzMEVBLCAweDAzRTYsDQotICAgIDB4MzBFQiwgMHgwM0U3LCAweDMwRUMsIDB4MDNFOCwgMHgzMEVELCAweDAzRTksIDB4MzBFRSwgMHgwM0VBLA0KLSAgICAweDMwRUYsIDB4MDNFQiwgMHgzMEYwLCAweDAzRUMsIDB4MzBGMSwgMHgwM0VELCAweDMwRjIsIDB4MDNFRSwNCi0gICAgMHgzMEYzLCAweDAzRUYsIDB4MzBGNCwgMHgwM0YwLCAweDMwRjUsIDB4MDNGMSwgMHgzMEY2LCAweDAzRjIsDQotICAgIDB4MzBGNywgMHgyMDc5LCAweDMwRjgsIDB4MjA3QSwgMHgzMEY5LCAweDIwN0IsIDB4MzBGQSwgMHgyMDdDLA0KLSAgICAweDMwRkIsIDB4MDI3RSwgMHgzMEZDLCAweDAyOTQsIDB4MzBGRCwgMHgwMjhCLCAweDMwRkUsIDB4MDI4QywNCi0gICAgMHgzMEZGLCAweDNGNDMsIDB4MzE5MCwgMHgzRjlCLCAweDMxOTEsIDB4M0Y5QywgMHgzMTkyLCAweDNGOUQsDQotICAgIDB4MzE5MywgMHgzRjlFLCAweDMxOTQsIDB4M0Y5RiwgMHgzMTk1LCAweDNGQTAsIDB4MzE5NiwgMHgzRkExLA0KLSAgICAweDMxOTcsIDB4M0ZBMiwgMHgzMTk4LCAweDNGQTMsIDB4MzE5OSwgMHgzRkE0LCAweDMxOUEsIDB4M0ZBNSwNCi0gICAgMHgzMTlCLCAweDNGQTYsIDB4MzE5QywgMHgzRkE3LCAweDMxOUQsIDB4M0ZBOCwgMHgzMTlFLCAweDNGQTksDQotICAgIDB4MzE5RiwgMHgzRkFBLCAweDMxRjAsIDB4M0Y2QywgMHgzMUYxLCAweDNGNkQsIDB4MzFGMiwgMHgzRjZFLA0KLSAgICAweDMxRjMsIDB4M0Y2RiwgMHgzMUY0LCAweDNGNzAsIDB4MzFGNSwgMHgzRjcxLCAweDMxRjYsIDB4M0Y3MiwNCi0gICAgMHgzMUY3LCAweDNGNzMsIDB4MzFGOCwgMHgzRjc0LCAweDMxRjksIDB4M0Y3NSwgMHgzMUZBLCAweDNGNzcsDQotICAgIDB4MzFGQiwgMHgzRjc4LCAweDMxRkMsIDB4M0Y3OSwgMHgzMUZELCAweDNGN0EsIDB4MzFGRSwgMHgzRjdCLA0KLSAgICAweDMxRkYsIDB4M0Y3QywgMHgzMjIwLCAweDI3OEUsIDB4MzIyMSwgMHgyNzhGLCAweDMyMjIsIDB4Mjc5MCwNCi0gICAgMHgzMjIzLCAweDI3OTEsIDB4MzIyNCwgMHgyNzkyLCAweDMyMjUsIDB4Mjc5MywgMHgzMjI2LCAweDI3OTQsDQotICAgIDB4MzIyNywgMHgyNzk1LCAweDMyMjgsIDB4Mjc5NiwgMHgzMjI5LCAweDI3OTcsIDB4MzIyQSwgMHgyMDA2LA0KLSAgICAweDMyMkIsIDB4MjAwNywgMHgzMjJDLCAweDIwMDgsIDB4MzIyRCwgMHgyMDA5LCAweDMyMkUsIDB4MjAwQSwNCi0gICAgMHgzMjJGLCAweDIwMEIsIDB4MzIzMCwgMHgyMDA1LCAweDMyMzEsIDB4MURDMiwgMHgzMjMyLCAweDFEQzMsDQotICAgIDB4MzIzMywgMHgxRkNGLCAweDMyMzQsIDB4MUZDRCwgMHgzMjM1LCAweDFGRDQsIDB4MzIzNiwgMHgxRkQzLA0KLSAgICAweDMyMzcsIDB4MjAwQywgMHgzMjM4LCAweDFGQ0UsIDB4MzIzOSwgMHgxREM0LCAweDMyM0EsIDB4MUZENywNCi0gICAgMHgzMjNCLCAweDFGRDUsIDB4MzIzQywgMHgxRkQwLCAweDMyM0QsIDB4MUZDQiwgMHgzMjNFLCAweDFGRDIsDQotICAgIDB4MzIzRiwgMHgxRkNDLCAweDMyNDAsIDB4MUZENiwgMHgzMjQxLCAweDIwMEQsIDB4MzI0MiwgMHgxRkQxLA0KLSAgICAweDMyNDMsIDB4MUZDQSwgMHgzMjUxLCAweDFGOUIsIDB4MzI1MiwgMHgxRkE2LCAweDMyNTMsIDB4MUZBNywNCi0gICAgMHgzMjU0LCAweDFGQTgsIDB4MzI1NSwgMHgxRkE5LCAweDMyNTYsIDB4MUZBQSwgMHgzMjU3LCAweDFGQUIsDQotICAgIDB4MzI1OCwgMHgxRkFDLCAweDMyNTksIDB4MUZBRCwgMHgzMjVBLCAweDFGQUUsIDB4MzI1QiwgMHgxRkFGLA0KLSAgICAweDMyNUMsIDB4MjgwNCwgMHgzMjVELCAweDI4MDUsIDB4MzI1RSwgMHgyODA2LCAweDMyNUYsIDB4MjgwNywNCi0gICAgMHgzMjgwLCAweDI4REQsIDB4MzI4MSwgMHgyOERFLCAweDMyODIsIDB4MjhERiwgMHgzMjgzLCAweDI4RTAsDQotICAgIDB4MzI4NCwgMHgyOEUxLCAweDMyODUsIDB4MjhFMiwgMHgzMjg2LCAweDI4RTMsIDB4MzI4NywgMHgyOEU0LA0KLSAgICAweDMyODgsIDB4MjhFNSwgMHgzMjg5LCAweDI4RTYsIDB4MzI4QSwgMHgyOEU4LCAweDMyOEIsIDB4MjhFOSwNCi0gICAgMHgzMjhDLCAweDI4RUEsIDB4MzI4RCwgMHgyOEVCLCAweDMyOEUsIDB4MjhFQywgMHgzMjhGLCAweDI4RUQsDQotICAgIDB4MzI5MCwgMHgyOEU3LCAweDMyOTEsIDB4MUZFMSwgMHgzMjkyLCAweDFGRTAsIDB4MzI5MywgMHgxRkUyLA0KLSAgICAweDMyOTQsIDB4MUZEQywgMHgzMjk1LCAweDI4RkYsIDB4MzI5NiwgMHgxRkU1LCAweDMyOTcsIDB4MjhGQywNCi0gICAgMHgzMjk4LCAweDFGREUsIDB4MzI5OSwgMHgyMDFGLCAweDMyOUEsIDB4MjhGOSwgMHgzMjlCLCAweDI4RjgsDQotICAgIDB4MzI5QywgMHgyOEZFLCAweDMyOUQsIDB4MjA3RiwgMHgzMjlFLCAweDFGRkYsIDB4MzI5RiwgMHgyOEVGLA0KLSAgICAweDMyQTAsIDB4MjhGNiwgMHgzMkExLCAweDI4RjcsIDB4MzJBMiwgMHgyOEZCLCAweDMyQTMsIDB4MjhGQSwNCi0gICAgMHgzMkE0LCAweDFEQkQsIDB4MzJBNSwgMHgxREJFLCAweDMyQTYsIDB4MURCRiwgMHgzMkE3LCAweDFEQzAsDQotICAgIDB4MzJBOCwgMHgxREMxLCAweDMyQTksIDB4MUZEQSwgMHgzMkFBLCAweDFGREQsIDB4MzJBQiwgMHgxRkRGLA0KLSAgICAweDMyQUMsIDB4MUZFMywgMHgzMkFELCAweDFGRDksIDB4MzJBRSwgMHgxRkU0LCAweDMyQUYsIDB4MUZEQiwNCi0gICAgMHgzMkIwLCAweDFGRDgsIDB4MzJCMSwgMHgyODA4LCAweDMyQjIsIDB4MjgwOSwgMHgzMkIzLCAweDI4MEEsDQotICAgIDB4MzJCNCwgMHgyODBCLCAweDMyQjUsIDB4MjgwQywgMHgzMkI2LCAweDI4MEQsIDB4MzJCNywgMHgyODBFLA0KLSAgICAweDMyQjgsIDB4MjgwRiwgMHgzMkI5LCAweDI4MTAsIDB4MzJCQSwgMHgyODExLCAweDMyQkIsIDB4MjgxMiwNCi0gICAgMHgzMkJDLCAweDI4MTMsIDB4MzJCRCwgMHgyODE0LCAweDMyQkUsIDB4MjgxNSwgMHgzMkJGLCAweDI4MTYsDQotICAgIDB4MzJEMCwgMHgyOEFELCAweDMyRDEsIDB4MjhBRSwgMHgzMkQyLCAweDI4QUYsIDB4MzJEMywgMHgyOEIwLA0KLSAgICAweDMyRDQsIDB4MjhCMSwgMHgzMkQ1LCAweDI4QjIsIDB4MzJENiwgMHgyOEIzLCAweDMyRDcsIDB4MjhCNCwNCi0gICAgMHgzMkQ4LCAweDI4QjUsIDB4MzJEOSwgMHgyOEI2LCAweDMyREEsIDB4MjhCNywgMHgzMkRCLCAweDI4QjgsDQotICAgIDB4MzJEQywgMHgyOEI5LCAweDMyREQsIDB4MjhCQSwgMHgzMkRFLCAweDI4QkIsIDB4MzJERiwgMHgyOEJDLA0KLSAgICAweDMyRTAsIDB4MjhCRCwgMHgzMkUxLCAweDI4QkUsIDB4MzJFMiwgMHgyOEJGLCAweDMyRTMsIDB4MjhDMCwNCi0gICAgMHgzMkU0LCAweDI4QzEsIDB4MzJFNSwgMHgyOEMyLCAweDMyRTYsIDB4MjhDMywgMHgzMkU3LCAweDI4QzQsDQotICAgIDB4MzJFOCwgMHgyOEM1LCAweDMyRTksIDB4MjhDNiwgMHgzMkVBLCAweDI4QzcsIDB4MzJFQiwgMHgyOEM4LA0KLSAgICAweDMyRUMsIDB4MjhDOSwgMHgzMkVELCAweDI4Q0EsIDB4MzJFRSwgMHgyOENCLCAweDMyRUYsIDB4MjhDQywNCi0gICAgMHgzMkYwLCAweDI4Q0QsIDB4MzJGMSwgMHgyOENFLCAweDMyRjIsIDB4MjhDRiwgMHgzMkYzLCAweDI4RDAsDQotICAgIDB4MzJGNCwgMHgyOEQxLCAweDMyRjUsIDB4MjhEMiwgMHgzMkY2LCAweDI4RDMsIDB4MzJGNywgMHgyOEQ0LA0KLSAgICAweDMyRjgsIDB4MjhENSwgMHgzMkY5LCAweDI4RDYsIDB4MzJGQSwgMHgyOEQ3LCAweDMyRkIsIDB4MjhEOCwNCi0gICAgMHgzMkZDLCAweDI4RDksIDB4MzJGRCwgMHgyOERBLCAweDMyRkUsIDB4MjhEQiwgMHgzMzAwLCAweDFGNzAsDQotICAgIDB4MzMwMSwgMHgyRTYyLCAweDMzMDIsIDB4MkU2MywgMHgzMzAzLCAweDFGNkEsIDB4MzMwNCwgMHgyRTY0LA0KLSAgICAweDMzMDUsIDB4MUZGNywgMHgzMzA2LCAweDJFNjUsIDB4MzMwNywgMHgyRTY5LCAweDMzMDgsIDB4MkU2NywNCi0gICAgMHgzMzA5LCAweDJFNkMsIDB4MzMwQSwgMHgyRTZBLCAweDMzMEIsIDB4MkU2RSwgMHgzMzBDLCAweDJFNzAsDQotICAgIDB4MzMwRCwgMHgxREFCLCAweDMzMEUsIDB4MkU3MSwgMHgzMzBGLCAweDJFNzIsIDB4MzMxMCwgMHgyRTczLA0KLSAgICAweDMzMTEsIDB4MkU3NCwgMHgzMzEyLCAweDJFNzUsIDB4MzMxMywgMHgyRTc2LCAweDMzMTQsIDB4MURBMiwNCi0gICAgMHgzMzE1LCAweDFGNjksIDB4MzMxNiwgMHgxRjY3LCAweDMzMTcsIDB4MkU3OCwgMHgzMzE4LCAweDFGNjgsDQotICAgIDB4MzMxOSwgMHgyRTdBLCAweDMzMUEsIDB4MkU3QywgMHgzMzFCLCAweDJFN0QsIDB4MzMxQywgMHgyRTdFLA0KLSAgICAweDMzMUQsIDB4MkU3RiwgMHgzMzFFLCAweDFGNzMsIDB4MzMxRiwgMHgyRTgwLCAweDMzMjAsIDB4MkU4MSwNCi0gICAgMHgzMzIxLCAweDJFODIsIDB4MzMyMiwgMHgxRjY2LCAweDMzMjMsIDB4MUY2QiwgMHgzMzI0LCAweDJFODMsDQotICAgIDB4MzMyNSwgMHgyRTg1LCAweDMzMjYsIDB4MURBQywgMHgzMzI3LCAweDFEQTYsIDB4MzMyOCwgMHgyRTg4LA0KLSAgICAweDMzMjksIDB4MkU4OSwgMHgzMzJBLCAweDFGNzQsIDB4MzMyQiwgMHgxREFFLCAweDMzMkQsIDB4MkU4QiwNCi0gICAgMHgzMzJFLCAweDJFOEUsIDB4MzMyRiwgMHgyRThGLCAweDMzMzAsIDB4MkU5MCwgMHgzMzMxLCAweDFGNzEsDQotICAgIDB4MzMzMiwgMHgyRTkxLCAweDMzMzMsIDB4MjA4NywgMHgzMzM0LCAweDJFOTQsIDB4MzMzNSwgMHgyRTk1LA0KLSAgICAweDMzMzYsIDB4MURBOCwgMHgzMzM3LCAweDJFOUEsIDB4MzMzOCwgMHgyRTlDLCAweDMzMzksIDB4MUY2RSwNCi0gICAgMHgzMzNBLCAweDJFOUQsIDB4MzMzQiwgMHgxRjZGLCAweDMzM0MsIDB4MkU5NiwgMHgzMzNELCAweDJFOUUsDQotICAgIDB4MzMzRSwgMHgyRUEwLCAweDMzM0YsIDB4MkVBMSwgMHgzMzQwLCAweDJFQTIsIDB4MzM0MSwgMHgyRTlGLA0KLSAgICAweDMzNDIsIDB4MUY2RCwgMHgzMzQzLCAweDJFQTMsIDB4MzM0NCwgMHgyRUE0LCAweDMzNDUsIDB4MkVBNSwNCi0gICAgMHgzMzQ2LCAweDJFQTYsIDB4MzM0NywgMHgxRjcyLCAweDMzNDgsIDB4MkVBNywgMHgzMzQ5LCAweDFEQTEsDQotICAgIDB4MzM0QSwgMHgxREFGLCAweDMzNEIsIDB4MkVBOCwgMHgzMzRDLCAweDJFQTksIDB4MzM0RCwgMHgxREE0LA0KLSAgICAweDMzNEUsIDB4MjA4OCwgMHgzMzRGLCAweDJFQUEsIDB4MzM1MCwgMHgyRUFCLCAweDMzNTEsIDB4MURBOSwNCi0gICAgMHgzMzUyLCAweDJFQUUsIDB4MzM1MywgMHgyRUIyLCAweDMzNTQsIDB4MkVBRiwgMHgzMzU1LCAweDJFQjMsDQotICAgIDB4MzM1NiwgMHgyRUI0LCAweDMzNTcsIDB4MUY2QywgMHgzMzcxLCAweDJFNTUsIDB4MzM3QiwgMHgyMDgzLA0KLSAgICAweDMzN0MsIDB4MURDNywgMHgzMzdELCAweDFEQzYsIDB4MzM3RSwgMHgxREM1LCAweDMzN0YsIDB4MUY3NiwNCi0gICAgMHgzMzg1LCAweDFGNUYsIDB4MzM4NiwgMHgxRjYwLCAweDMzODcsIDB4MUY2MSwgMHgzMzg4LCAweDIwMDAsDQotICAgIDB4MzM4OSwgMHgyMDAxLCAweDMzOEQsIDB4MkU1OCwgMHgzMzhFLCAweDFEQjQsIDB4MzM4RiwgMHgxREI1LA0KLSAgICAweDMzOTAsIDB4MUY2MywgMHgzMzk2LCAweDFGNjUsIDB4MzM5NywgMHgxRjU4LCAweDMzOTgsIDB4MUY1QSwNCi0gICAgMHgzMzlCLCAweDJFNTksIDB4MzM5QywgMHgxREIxLCAweDMzOUQsIDB4MURCMiwgMHgzMzlFLCAweDFEQjMsDQotICAgIDB4MzM5RiwgMHgxRkZBLCAweDMzQTAsIDB4MUY1NCwgMHgzM0ExLCAweDFEQjcsIDB4MzNBMiwgMHgxRjU1LA0KLSAgICAweDMzQTMsIDB4MUZGQiwgMHgzM0E0LCAweDFGNTYsIDB4MzNBNSwgMHgxRjU3LCAweDMzQTYsIDB4MUZGQywNCi0gICAgMHgzM0IwLCAweDFGNUUsIDB4MzNCMSwgMHgxRjVELCAweDMzQjIsIDB4MUY1QywgMHgzM0IzLCAweDFGNUIsDQotICAgIDB4MzNDMiwgMHgyRTUwLCAweDMzQzQsIDB4MURCNiwgMHgzM0M4LCAweDIwMDIsIDB4MzNDQiwgMHgxRjYyLA0KLSAgICAweDMzQ0MsIDB4MUZGNiwgMHgzM0NELCAweDFEQkIsIDB4MzNENCwgMHgxRjY0LCAweDMzRDcsIDB4MkU1RCwNCi0gICAgMHgzM0Q4LCAweDJFNUUsIDB4MzNEQSwgMHgyRTRCLCAweDM0MDIsIDB4MzU4MiwgMHgzNDA1LCAweDNDMUIsDQotICAgIDB4MzQwNiwgMHg0MzVBLCAweDM0MjcsIDB4MzY1NiwgMHgzNDJDLCAweDQzNUUsIDB4MzQyRSwgMHgzNzg4LA0KLSAgICAweDM0NjgsIDB4MzZERiwgMHgzNDZBLCAweDQzNzUsIDB4MzQ4OCwgMHgzQzUyLCAweDM0OTIsIDB4NDM4RSwNCi0gICAgMHgzNEI1LCAweDQxOTksIDB4MzRCQywgMHg0Mzk3LCAweDM0QzEsIDB4NDdEMCwgMHgzNEM3LCAweDQzOUIsDQotICAgIDB4MzREQiwgMHgzQzQxLCAweDM1MUYsIDB4MzYyOSwgMHgzNTNFLCAweDM3MUUsIDB4MzU1RCwgMHg0M0JELA0KLSAgICAweDM1NUUsIDB4NDNCRSwgMHgzNTYzLCAweDQzQzAsIDB4MzU2RSwgMHg0M0M0LCAweDM1QTYsIDB4NDNEOSwNCi0gICAgMHgzNUE4LCAweDQzREIsIDB4MzVDNSwgMHg0M0UxLCAweDM1REEsIDB4NDNFQSwgMHgzNURFLCAweDRFNjMsDQotICAgIDB4MzVGNCwgMHg0M0YzLCAweDM2MDUsIDB4NDNGQSwgMHgzNjE0LCAweDRBQkIsIDB4MzY0QSwgMHg0NDIxLA0KLSAgICAweDM2OTEsIDB4NDQ0MSwgMHgzNjk2LCAweDQ0NDUsIDB4MzY5OSwgMHg0NDQzLCAweDM2Q0YsIDB4NDQ1NiwNCi0gICAgMHgzNzYxLCAweDQ0NzgsIDB4Mzc2MiwgMHg0NDc5LCAweDM3NkIsIDB4NDQ3RCwgMHgzNzZDLCAweDQ0N0MsDQotICAgIDB4Mzc3NSwgMHg0NDgwLCAweDM3OEQsIDB4MzYxQSwgMHgzN0MxLCAweDQ0OEUsIDB4MzdFMiwgMHgzNzJCLA0KLSAgICAweDM3RTgsIDB4NDRBMiwgMHgzN0Y0LCAweDQ0QTUsIDB4MzdGRCwgMHg0NEE4LCAweDM4MDAsIDB4NDRBQSwNCi0gICAgMHgzODJGLCAweDQ0QjQsIDB4MzgzNiwgMHg0NEI1LCAweDM4NDAsIDB4NDRCNiwgMHgzODVDLCAweDQ0QkEsDQotICAgIDB4Mzg2MSwgMHg0NEJDLCAweDM4QTEsIDB4NEVDQiwgMHgzOEFELCAweDRBQkMsIDB4MzhGQSwgMHgzNjFDLA0KLSAgICAweDM5MTcsIDB4NDREOSwgMHgzOTFBLCAweDQ0REMsIDB4Mzk2RiwgMHg0NEVCLCAweDM5QTQsIDB4NEU5QSwNCi0gICAgMHgzOUI4LCAweDRFOUIsIDB4M0E1QywgMHg0RTlGLCAweDNBNkUsIDB4NDUzMSwgMHgzQTczLCAweDQ1MzQsDQotICAgIDB4M0E4NSwgMHg0RUFFLCAweDNBQzQsIDB4NEVBNywgMHgzQUNCLCAweDRFQTgsIDB4M0FENiwgMHg0NTQzLA0KLSAgICAweDNBRDcsIDB4NDU1RSwgMHgzQUVBLCAweDQ1NEQsIDB4M0FGMywgMHgzQzQwLCAweDNCMEUsIDB4NDU1OCwNCi0gICAgMHgzQjFBLCAweDQ1NUMsIDB4M0IxQywgMHg0NTVELCAweDNCMjIsIDB4M0M0OSwgMHgzQjZELCAweDQ1OEMsDQotICAgIDB4M0I3NywgMHg0NTg1LCAweDNCODcsIDB4NDVBMiwgMHgzQjg4LCAweDM2OEQsIDB4M0I4RCwgMHg0NUE0LA0KLSAgICAweDNCQTQsIDB4NDVBQSwgMHgzQkI2LCAweDQyMEUsIDB4M0JDMywgMHg0MjBGLCAweDNCQ0QsIDB4NDVCOCwNCi0gICAgMHgzQkYwLCAweDQ1QzksIDB4M0JGMywgMHg0RUI3LCAweDNDMEYsIDB4NDIxNywgMHgzQzI2LCAweDQ1REYsDQotICAgIDB4M0NDMywgMHg0NUZDLCAweDNDRDIsIDB4NDYwMSwgMHgzRDExLCAweDQ2MjUsIDB4M0QxRSwgMHg0NjMwLA0KLSAgICAweDNEMzEsIDB4NEVCRSwgMHgzRDRFLCAweDFERTcsIDB4M0Q2NCwgMHg0NjRBLCAweDNEOUEsIDB4NDY1OCwNCi0gICAgMHgzREMwLCAweDQ2NkEsIDB4M0RDQywgMHg0QUJELCAweDNERDQsIDB4NDY2RiwgMHgzRTA1LCAweDQ2N0IsDQotICAgIDB4M0UzRiwgMHg0MjQ4LCAweDNFNDAsIDB4NEVDQSwgMHgzRTYwLCAweDQ2OEIsIDB4M0U2NiwgMHg0NjhELA0KLSAgICAweDNFNjgsIDB4NDY4RSwgMHgzRTgzLCAweDQ2OTUsIDB4M0U4QSwgMHgzQzQzLCAweDNFOTQsIDB4NDY5QiwNCi0gICAgMHgzRURBLCAweDNDNDgsIDB4M0Y1NywgMHg0NkNCLCAweDNGNzIsIDB4NDI1OCwgMHgzRjc1LCAweDQ2RDksDQotICAgIDB4M0Y3NywgMHg0NkRCLCAweDNGQUUsIDB4NDZFRCwgMHgzRkIxLCAweDM3NTQsIDB4M0ZDOSwgMHg0NkY4LA0KLSAgICAweDNGRDcsIDB4NDZGRCwgMHgzRkRDLCAweDRBQkUsIDB4NDAzOSwgMHg0NzBGLCAweDQwNTgsIDB4NDcxNiwNCi0gICAgMHg0MDkzLCAweDNDNEMsIDB4NDEwMywgMHgzQzRGLCAweDQxMDUsIDB4NDczQiwgMHg0MTQ4LCAweDQ3NDcsDQotICAgIDB4NDE0RiwgMHg0NzRBLCAweDQxNjMsIDB4NDc0RSwgMHg0MUI0LCAweDQ3NUQsIDB4NDFCRiwgMHg0NzYwLA0KLSAgICAweDQxRTYsIDB4NDc2QiwgMHg0MUVFLCAweDQ3NkYsIDB4NDFGMywgMHg0NzZDLCAweDQyMDcsIDB4NDc3NiwNCi0gICAgMHg0MjBFLCAweDQ3NzksIDB4NDI2NCwgMHgzNzYwLCAweDQyOTMsIDB4M0M1MCwgMHg0MkM2LCAweDQ3OUYsDQotICAgIDB4NDJENiwgMHg0N0FBLCAweDQyREQsIDB4NDdBRSwgMHg0MzAyLCAweDQ3QkMsIDB4NDMyQiwgMHg0N0M5LA0KLSAgICAweDQzNDMsIDB4NDdDQiwgMHg0M0VFLCAweDQ3RjcsIDB4NDNGMCwgMHg0N0ZBLCAweDQ0MDgsIDB4NDgwMCwNCi0gICAgMHg0NDBDLCAweDNDNDIsIDB4NDQxNywgMHg0ODAyLCAweDQ0MUMsIDB4NDgwMywgMHg0NDIyLCAweDQ4MDUsDQotICAgIDB4NDQ1MywgMHgzNzczLCAweDQ0NUIsIDB4NDJBNCwgMHg0NDc2LCAweDQ4MUMsIDB4NDQ3QSwgMHg0ODFELA0KLSAgICAweDQ0OTEsIDB4NDgyMywgMHg0NEIzLCAweDQ4M0UsIDB4NDRCRSwgMHg0ODNDLCAweDQ0RDQsIDB4NDgzRCwNCi0gICAgMHg0NTA4LCAweDQ4NUMsIDB4NDUwRCwgMHg0ODU4LCAweDQ1MjUsIDB4Mzc3RSwgMHg0NTQzLCAweDQ4NkMsDQotICAgIDB4NDU3QSwgMHgzQzRCLCAweDQ1OUQsIDB4NDJENCwgMHg0NUI4LCAweDQ4QTAsIDB4NDVCRSwgMHg0QUJGLA0KLSAgICAweDQ1RTUsIDB4NDhCQSwgMHg0NUVBLCAweDQyRDksIDB4NDYwRiwgMHg0OENBLCAweDQ2MTAsIDB4NEFDMCwNCi0gICAgMHg0NjQxLCAweDQ4RDgsIDB4NDY2NSwgMHgzQzRFLCAweDQ2QTEsIDB4NDhFOSwgMHg0NkFFLCAweDNDNTEsDQotICAgIDB4NDZBRiwgMHg0OEVELCAweDQ3MEMsIDB4NDkwMiwgMHg0NzFGLCAweDRFRkIsIDB4NDc2NCwgMHg0OTE4LA0KLSAgICAweDQ3RTYsIDB4Mzc5MCwgMHg0N0ZELCAweDQ5MjQsIDB4NDgxNiwgMHg0OTJFLCAweDQ4MUUsIDB4NEYwMSwNCi0gICAgMHg0ODQ0LCAweDQyRjUsIDB4NDg0RSwgMHg0OTNBLCAweDQ4QjUsIDB4NDk1QiwgMHg0OUIwLCAweDQzMUYsDQotICAgIDB4NDlFNywgMHg0OUQyLCAweDQ5RkEsIDB4NDlENiwgMHg0QTA0LCAweDQ5REIsIDB4NEEyOSwgMHg0OURFLA0KLSAgICAweDRBQkMsIDB4NDlGNiwgMHg0QjM4LCAweDM1REYsIDB4NEIzQiwgMHg0QTBFLCAweDRCN0UsIDB4NEFDMSwNCi0gICAgMHg0QkMyLCAweDRBMzMsIDB4NEJDQSwgMHg0QTM1LCAweDRCRDIsIDB4NEEzNywgMHg0QkU4LCAweDNDNDYsDQotICAgIDB4NEMxNywgMHg0MzM0LCAweDRDMjAsIDB4NEE0OCwgMHg0QzM4LCAweDRBQzIsIDB4NENDNCwgMHg0QTg0LA0KLSAgICAweDRDRDEsIDB4NEE4NywgMHg0Q0UxLCAweDRBQzMsIDB4NEQwNywgMHg0QTlCLCAweDRENzcsIDB4NEFBQiwNCi0gICAgMHg0RTAwLCAweDA0QjAsIDB4NEUwMSwgMHgwQkI4LCAweDRFMDIsIDB4NDM1MiwgMHg0RTAzLCAweDA4RTMsDQotICAgIDB4NEUwNCwgMHgzN0Q4LCAweDRFMDUsIDB4MzdEOSwgMHg0RTA3LCAweDBFQUEsIDB4NEUwOCwgMHgwOUNFLA0KLSAgICAweDRFMDksIDB4MDg3RSwgMHg0RTBBLCAweDA5Q0QsIDB4NEUwQiwgMHgwNTNDLCAweDRFMEMsIDB4NEFDNCwNCi0gICAgMHg0RTBELCAweDBEQzYsIDB4NEUwRSwgMHgwRjI5LCAweDRFMEYsIDB4NDM1MywgMHg0RTEwLCAweDBGRkIsDQotICAgIDB4NEUxMSwgMHgwNEQxLCAweDRFMTIsIDB4NDM1NCwgMHg0RTE0LCAweDA1Q0MsIDB4NEUxNSwgMHgwRkZDLA0KLSAgICAweDRFMTYsIDB4MEE0OCwgMHg0RTE3LCAweDEwRDcsIDB4NEUxOCwgMHgwNjcwLCAweDRFMTksIDB4MEUwQSwNCi0gICAgMHg0RTFFLCAweDA5Q0YsIDB4NEUxRiwgMHgzN0RBLCAweDRFMjEsIDB4MEY4NiwgMHg0RTIzLCAweDRBQzUsDQotICAgIDB4NEUyNCwgMHg0QUM2LCAweDRFMjYsIDB4MEUxMiwgMHg0RTI4LCAweDIwQjMsIDB4NEUyOSwgMHg0MzU1LA0KLSAgICAweDRFMkEsIDB4MEZGRCwgMHg0RTJCLCAweDM3REIsIDB4NEUyQywgMHgzNzRELCAweDRFMkQsIDB4MEJBNCwNCi0gICAgMHg0RTJFLCAweDQzNTYsIDB4NEUyRiwgMHgzN0RDLCAweDRFMzAsIDB4MzdERCwgMHg0RTMxLCAweDBGRkUsDQotICAgIDB4NEUzMiwgMHgwNkYyLCAweDRFMzYsIDB4MEZGRiwgMHg0RTM3LCAweDM2OUQsIDB4NEUzOCwgMHgwNjE5LA0KLSAgICAweDRFMzksIDB4MEI2RSwgMHg0RTNCLCAweDA5MTMsIDB4NEUzQywgMHgxMDAwLCAweDRFM0YsIDB4MTAwMSwNCi0gICAgMHg0RTQwLCAweDM3REUsIDB4NEU0MSwgMHgzN0RGLCAweDRFNDIsIDB4MTAwMiwgMHg0RTQzLCAweDBDRUIsDQotICAgIDB4NEU0NCwgMHgzN0UwLCAweDRFNDUsIDB4MDY3MSwgMHg0RTQ3LCAweDQzNTcsIDB4NEU0OCwgMHgzNzJFLA0KLSAgICAweDRFNEIsIDB4MENFRCwgMHg0RTRELCAweDBDQkIsIDB4NEU0RSwgMHgwNzc3LCAweDRFNEYsIDB4MEU2MSwNCi0gICAgMHg0RTUxLCAweDQzNTksIDB4NEU1NSwgMHgxOTUwLCAweDRFNTYsIDB4MTAwMywgMHg0RTU3LCAweDA5RDAsDQotICAgIDB4NEU1OCwgMHgxMDA0LCAweDRFNTksIDB4MDUzNSwgMHg0RTVBLCAweDM3RTEsIDB4NEU1RCwgMHgwNkRELA0KLSAgICAweDRFNUUsIDB4MDdBNCwgMHg0RTVGLCAweDBFRjUsIDB4NEU2MiwgMHgxMjMzLCAweDRFNjksIDB4NDM1QywNCi0gICAgMHg0RTcxLCAweDBGNUEsIDB4NEU3MywgMHgwQ0Q1LCAweDRFNzksIDB4NEFDNywgMHg0RTdFLCAweDA1RTEsDQotICAgIDB4NEU3RiwgMHgzN0UyLCAweDRFODAsIDB4MDY0RiwgMHg0RTgyLCAweDEwMDUsIDB4NEU4NSwgMHgxMDA2LA0KLSAgICAweDRFODYsIDB4MEY4MywgMHg0RTg4LCAweDBGMjcsIDB4NEU4OSwgMHgwQUVBLCAweDRFOEEsIDB4MTAwOCwNCi0gICAgMHg0RThCLCAweDA4QzQsIDB4NEU4QywgMHgwQ0NCLCAweDRFOEQsIDB4MzdFMywgMHg0RThFLCAweDEwMEIsDQotICAgIDB4NEU5MSwgMHgwNEUwLCAweDRFOTIsIDB4MDc5MywgMHg0RTk0LCAweDA3OTIsIDB4NEU5NSwgMHgwNEFBLA0KLSAgICAweDRFOTYsIDB4MzdFNCwgMHg0RTk4LCAweDBGRjEsIDB4NEU5OSwgMHgwRkYwLCAweDRFOUIsIDB4MDgyMywNCi0gICAgMHg0RTlDLCAweDA0NjUsIDB4NEU5RCwgMHg0MzVELCAweDRFOUUsIDB4MTAwQywgMHg0RTlGLCAweDEwMEQsDQotICAgIDB4NEVBMCwgMHgxMDBFLCAweDRFQTEsIDB4MEU2MiwgMHg0RUEyLCAweDEwMEYsIDB4NEVBNCwgMHgwN0E2LA0KLSAgICAweDRFQTUsIDB4MDRBQiwgMHg0RUE2LCAweDBFQTAsIDB4NEVBOCwgMHgwNjk2LCAweDRFQUIsIDB4MDY5NywNCi0gICAgMHg0RUFDLCAweDA2OTgsIDB4NEVBRCwgMHgwQkZFLCAweDRFQUUsIDB4MEY4NCwgMHg0RUIwLCAweDEwMTAsDQotICAgIDB4NEVCMywgMHgxMDExLCAweDRFQjYsIDB4MTAxMiwgMHg0RUI5LCAweDM3RTUsIDB4NEVCQSwgMHgwQTEzLA0KLSAgICAweDRFQkIsIDB4MzYyMCwgMHg0RUJDLCAweDQzNUYsIDB4NEVDMCwgMHgwOTQ0LCAweDRFQzEsIDB4MEExNCwNCi0gICAgMHg0RUMyLCAweDEwMTcsIDB4NEVDMywgMHg0MzYwLCAweDRFQzQsIDB4MTAxNSwgMHg0RUM2LCAweDEwMTYsDQotICAgIDB4NEVDNywgMHgwNjcyLCAweDRFQzgsIDB4NDM2MSwgMHg0RUNBLCAweDA4MTMsIDB4NEVDQiwgMHgwNTcwLA0KLSAgICAweDRFQ0QsIDB4MTAxNCwgMHg0RUNFLCAweDEwMTMsIDB4NEVDRiwgMHgwREY5LCAweDRFRDAsIDB4MzdFNiwNCi0gICAgMHg0RUQ0LCAweDA4OTQsIDB4NEVENSwgMHgwODkzLCAweDRFRDYsIDB4MEIxRSwgMHg0RUQ3LCAweDEwMTgsDQotICAgIDB4NEVEOCwgMHgwREM3LCAweDRFRDksIDB4MEE4QiwgMHg0RURBLCAweDQzNjMsIDB4NEVERCwgMHgwMjkwLA0KLSAgICAweDRFREUsIDB4MTAxOSwgMHg0RURGLCAweDEwMUIsIDB4NEVFMCwgMHgzN0U3LCAweDRFRTEsIDB4MjBCNCwNCi0gICAgMHg0RUUzLCAweDBCNDUsIDB4NEVFNCwgMHgwRkE5LCAweDRFRTUsIDB4MDQ4RSwgMHg0RUVCLCAweDQzNjIsDQotICAgIDB4NEVFRCwgMHgxMDFBLCAweDRFRUUsIDB4MDUzRSwgMHg0RUYwLCAweDA2QkMsIDB4NEVGMSwgMHg0MzY0LA0KLSAgICAweDRFRjIsIDB4MEJBNSwgMHg0RUYzLCAweDRBQzgsIDB4NEVGNSwgMHg0MzY1LCAweDRFRjYsIDB4MDc0NSwNCi0gICAgMHg0RUY3LCAweDEwMUMsIDB4NEVGQiwgMHgwQ0RBLCAweDRFRkMsIDB4MjBCNSwgMHg0RUZELCAweDM3RTgsDQotICAgIDB4NEVGRiwgMHgzN0U5LCAweDRGMDAsIDB4MjBCNiwgMHg0RjAxLCAweDA2MjcsIDB4NEYwMywgMHgyMEI3LA0KLSAgICAweDRGMDksIDB4MTAxRCwgMHg0RjBBLCAweDA0OEYsIDB4NEYwQiwgMHgzN0VBLCAweDRGMEMsIDB4NEFDOSwNCi0gICAgMHg0RjBELCAweDA3OTQsIDB4NEYwRSwgMHgwNjI4LCAweDRGMEYsIDB4MERFQywgMHg0RjEwLCAweDBENDYsDQotICAgIDB4NEYxMSwgMHgwNjczLCAweDRGMTUsIDB4MzdFQiwgMHg0RjE2LCAweDQzNjYsIDB4NEYxOSwgMHg0QUNBLA0KLSAgICAweDRGMUEsIDB4MDU3MSwgMHg0RjFDLCAweDEwNDAsIDB4NEYxRCwgMHgwQzNCLCAweDRGMkIsIDB4NEFDQiwNCi0gICAgMHg0RjJFLCAweDRBQ0MsIDB4NEYyRiwgMHgwRDIyLCAweDRGMzAsIDB4MTAxRiwgMHg0RjMxLCAweDRBQ0QsDQotICAgIDB4NEYzNCwgMHgwRDUwLCAweDRGMzYsIDB4MEZBQSwgMHg0RjM3LCAweDQzNjgsIDB4NEYzOCwgMHgwOUYzLA0KLSAgICAweDRGMzksIDB4MjBCOCwgMHg0RjNBLCAweDA4OTUsIDB4NEYzQiwgMHgzN0VELCAweDRGM0MsIDB4MDhDNSwNCi0gICAgMHg0RjNELCAweDA1NDAsIDB4NEYzRSwgMHg0MzY5LCAweDRGNDMsIDB4MEJFRCwgMHg0RjQ2LCAweDBCNjAsDQotICAgIDB4NEY0NywgMHgxMDIzLCAweDRGNDgsIDB4NDE4QiwgMHg0RjQ5LCAweDM3RUUsIDB4NEY0RCwgMHgwNDkwLA0KLSAgICAweDRGNEUsIDB4MEJGRiwgMHg0RjRGLCAweDA5NDUsIDB4NEY1MCwgMHgwODI0LCAweDRGNTEsIDB4MEYwRSwNCi0gICAgMHg0RjUzLCAweDBCMkUsIDB4NEY1NCwgMHgzN0VGLCAweDRGNTUsIDB4MDUzRiwgMHg0RjU2LCAweDIwQjksDQotICAgIDB4NEY1NywgMHgxMDIyLCAweDRGNTgsIDB4NDM2QSwgMHg0RjU5LCAweDBGMjgsIDB4NEY1QSwgMHgxMDFFLA0KLSAgICAweDRGNUIsIDB4MTAyMCwgMHg0RjVDLCAweDA4NUUsIDB4NEY1RCwgMHgxMDIxLCAweDRGNUUsIDB4MTFEMywNCi0gICAgMHg0RjVGLCAweDQxOEMsIDB4NEY2MCwgMHgzN0VDLCAweDRGNjQsIDB4NDM2NywgMHg0RjY5LCAweDEwMjksDQotICAgIDB4NEY2QSwgMHg0MThELCAweDRGNkMsIDB4NDE4RSwgMHg0RjZGLCAweDEwMkMsIDB4NEY3MCwgMHgxMDJBLA0KLSAgICAweDRGNzMsIDB4MDU0MiwgMHg0Rjc1LCAweDBFMEIsIDB4NEY3NiwgMHgxMDI0LCAweDRGNzcsIDB4NDM2QywNCi0gICAgMHg0Rjc4LCAweDQzNkQsIDB4NEY3QSwgMHgzN0YwLCAweDRGN0IsIDB4MTAyOCwgMHg0RjdDLCAweDA3QTcsDQotICAgIDB4NEY3RCwgMHgzN0YxLCAweDRGN0UsIDB4MzdGMiwgMHg0RjdGLCAweDA4OTYsIDB4NEY4MiwgMHg0MzZFLA0KLSAgICAweDRGODMsIDB4MDVFMiwgMHg0Rjg0LCAweDRBQ0UsIDB4NEY4NSwgMHg0MzZGLCAweDRGODYsIDB4MTAyRCwNCi0gICAgMHg0Rjg4LCAweDEwMjUsIDB4NEY4QSwgMHgyMEJCLCAweDRGOEIsIDB4MEZBQiwgMHg0RjhELCAweDA4QzYsDQotICAgIDB4NEY4RiwgMHgxMDI2LCAweDRGOTEsIDB4MTAyQiwgMHg0RjkyLCAweDIwQkEsIDB4NEY5NCwgMHgyMEJELA0KLSAgICAweDRGOTYsIDB4MTAyRSwgMHg0Rjk3LCAweDM3RjMsIDB4NEY5OCwgMHgxMDI3LCAweDRGOUEsIDB4MjBCQywNCi0gICAgMHg0RjlCLCAweDA2OTksIDB4NEY5RCwgMHgwNDkxLCAweDRGOUUsIDB4NEFDRiwgMHg0RkEwLCAweDA2OUEsDQotICAgIDB4NEZBMSwgMHgwNTQxLCAweDRGQUIsIDB4MTFENCwgMHg0RkFELCAweDBFQTcsIDB4NEZBRSwgMHgwREUwLA0KLSAgICAweDRGQUYsIDB4MDdBOCwgMHg0RkIyLCAweDQzNzEsIDB4NEZCNSwgMHgwOUY1LCAweDRGQjYsIDB4MEY3RiwNCi0gICAgMHg0RkI3LCAweDRBRDAsIDB4NEZCRSwgMHgzN0Y0LCAweDRGQkYsIDB4MEUyOCwgMHg0RkMyLCAweDA3MEUsDQotICAgIDB4NEZDMywgMHgwQjA1LCAweDRGQzQsIDB4MDU2NCwgMHg0RkM1LCAweDQzNzIsIDB4NEZDOSwgMHgyMEFDLA0KLSAgICAweDRGQ0EsIDB4MDk1RCwgMHg0RkNCLCAweDQzNzMsIDB4NEZDRCwgMHgyMEJFLCAweDRGQ0UsIDB4MTAzMiwNCi0gICAgMHg0RkNGLCAweDM3RjUsIDB4NEZEMCwgMHgxMDM3LCAweDRGRDEsIDB4MTAzNSwgMHg0RkQyLCAweDQzNzQsDQotICAgIDB4NEZEMywgMHgzQzJGLCAweDRGRDQsIDB4MTAzMCwgMHg0RkQ3LCAweDBCMEYsIDB4NEZEOCwgMHgxMDMzLA0KLSAgICAweDRGREEsIDB4MTAzNiwgMHg0RkRCLCAweDEwMzQsIDB4NEZERCwgMHgwRTJELCAweDRGREYsIDB4MTAzMSwNCi0gICAgMHg0RkUwLCAweDFERUMsIDB4NEZFMSwgMHgwOUY0LCAweDRGRTMsIDB4MEVBMSwgMHg0RkU0LCAweDEwMzgsDQotICAgIDB4NEZFNSwgMHgxMDM5LCAweDRGRTYsIDB4NDM3MCwgMHg0RkVFLCAweDA5MkUsIDB4NEZFRiwgMHgxMDQ2LA0KLSAgICAweDRGRjEsIDB4MzVBMywgMHg0RkYyLCAweDQzNzYsIDB4NEZGMywgMHgwRDA2LCAweDRGRjUsIDB4MERBOCwNCi0gICAgMHg0RkY2LCAweDEwNDEsIDB4NEZGOCwgMHgwRTQwLCAweDRGRkEsIDB4MDUzNiwgMHg0RkZELCAweDM3RjYsDQotICAgIDB4NEZGRSwgMHgxMDQ1LCAweDRGRkYsIDB4MjBDMSwgMHg1MDAwLCAweDM3RjcsIDB4NTAwMSwgMHgzN0Y4LA0KLSAgICAweDUwMDIsIDB4NEY0QiwgMHg1MDA0LCAweDRBRDEsIDB4NTAwNSwgMHgxMDNGLCAweDUwMDYsIDB4MTA0OCwNCi0gICAgMHg1MDA5LCAweDBBRDQsIDB4NTAwQiwgMHgwNzc4LCAweDUwMEMsIDB4NEFEMiwgMHg1MDBELCAweDBEMTIsDQotICAgIDB4NTAwRSwgMHg0MThGLCAweDUwMEYsIDB4MTYwMCwgMHg1MDEwLCAweDM3RjksIDB4NTAxMSwgMHgxMDQ3LA0KLSAgICAweDUwMTIsIDB4MEM1NywgMHg1MDEzLCAweDQzNzcsIDB4NTAxNCwgMHgxMDNDLCAweDUwMTYsIDB4MDdBQSwNCi0gICAgMHg1MDE4LCAweDQxOTAsIDB4NTAxOSwgMHgwN0E5LCAweDUwMUEsIDB4MTAzQSwgMHg1MDFCLCAweDM3RkEsDQotICAgIDB4NTAxQywgMHg0Mzc4LCAweDUwMUUsIDB4MjBDMiwgMHg1MDFGLCAweDA5MDYsIDB4NTAyMSwgMHgxMDQyLA0KLSAgICAweDUwMjIsIDB4MjBDMCwgMHg1MDIzLCAweDBFM0YsIDB4NTAyNCwgMHgwQjhCLCAweDUwMjUsIDB4MTAzRSwNCi0gICAgMHg1MDI2LCAweDA3NDcsIDB4NTAyNywgMHgzN0ZCLCAweDUwMjgsIDB4MTAzQiwgMHg1MDI5LCAweDEwNDMsDQotICAgIDB4NTAyQSwgMHgxMDNELCAweDUwMkIsIDB4MEY5OSwgMHg1MDJDLCAweDEwNDQsIDB4NTAyRCwgMHgwRkU3LA0KLSAgICAweDUwMkUsIDB4MzdGQywgMHg1MDM2LCAweDA2REUsIDB4NTAzOSwgMHgwNzQ2LCAweDUwM0IsIDB4MzgwMCwNCi0gICAgMHg1MDQwLCAweDIwQkYsIDB4NTA0MSwgMHg0MTkxLCAweDUwNDIsIDB4MjBDNSwgMHg1MDQzLCAweDEwNDksDQotICAgIDB4NTA0NiwgMHgyMEMzLCAweDUwNDcsIDB4MTA0QSwgMHg1MDQ4LCAweDEwNEUsIDB4NTA0OSwgMHgwNDkyLA0KLSAgICAweDUwNEMsIDB4NEFEMywgMHg1MDRFLCAweDQzNzksIDB4NTA0RiwgMHgwRTIwLCAweDUwNTAsIDB4MTA0RCwNCi0gICAgMHg1MDUzLCAweDQzN0EsIDB4NTA1NSwgMHgxMDRDLCAweDUwNTYsIDB4MTA1MCwgMHg1MDU3LCAweDM3RkQsDQotICAgIDB4NTA1QSwgMHgxMDRGLCAweDUwNUMsIDB4MEMwMCwgMHg1MDVGLCAweDRBRDQsIDB4NTA2MiwgMHg0QUQ1LA0KLSAgICAweDUwNjMsIDB4NDM3QiwgMHg1MDY1LCAweDA3NDgsIDB4NTA2NiwgMHgzN0ZFLCAweDUwNkEsIDB4MzdGRiwNCi0gICAgMHg1MDZDLCAweDEwNTEsIDB4NTA3MCwgMHgyMEM0LCAweDUwNzIsIDB4MDhGMSwgMHg1MDc0LCAweDBCMDYsDQotICAgIDB4NTA3NSwgMHgwQzAxLCAweDUwNzYsIDB4MDZFRSwgMHg1MDc3LCAweDRBRDYsIDB4NTA3OCwgMHgxMDUyLA0KLSAgICAweDUwN0QsIDB4MDY1MCwgMHg1MDgwLCAweDEwNTMsIDB4NTA4NSwgMHgxMDU1LCAweDUwODgsIDB4NDM3RCwNCi0gICAgMHg1MDhELCAweDBFNjMsIDB4NTA4RSwgMHg0QUQ3LCAweDUwOEYsIDB4MzgwMSwgMHg1MDkxLCAweDA3M0MsDQotICAgIDB4NTA5MiwgMHg0MzdFLCAweDUwOTMsIDB4NDM3RiwgMHg1MDk0LCAweDIwQzYsIDB4NTA5NSwgMHg0MzgwLA0KLSAgICAweDUwOTYsIDB4MzgwMiwgMHg1MDk4LCAweDA4N0YsIDB4NTA5OSwgMHgwRDhCLCAweDUwOUEsIDB4MTA1NCwNCi0gICAgMHg1MDlDLCAweDM4MDMsIDB4NTA5RSwgMHg0QUQ4LCAweDUwQTIsIDB4NEFEOSwgMHg1MEEzLCAweDQzN0MsDQotICAgIDB4NTBBQSwgMHg0MzgxLCAweDUwQUMsIDB4MDgzNSwgMHg1MEFELCAweDBGMkQsIDB4NTBCMSwgMHg0MzgzLA0KLSAgICAweDUwQjIsIDB4MTA1NywgMHg1MEIzLCAweDEwNUEsIDB4NTBCNCwgMHgxMDU2LCAweDUwQjUsIDB4MDgzNCwNCi0gICAgMHg1MEI3LCAweDA5ODcsIDB4NTBCQSwgMHg0Mzg0LCAweDUwQkIsIDB4NDM4NSwgMHg1MEJFLCAweDA3MEYsDQotICAgIDB4NTBDMiwgMHgxMDVCLCAweDUwQzMsIDB4NEFEQSwgMHg1MEM0LCAweDQzODYsIDB4NTBDNSwgMHgwNkM3LA0KLSAgICAweDUwQzcsIDB4NDM4NywgMHg1MEM5LCAweDEwNTgsIDB4NTBDQSwgMHgxMDU5LCAweDUwQ0MsIDB4MzgwNCwNCi0gICAgMHg1MENELCAweDBDODcsIDB4NTBDRSwgMHg0MzhBLCAweDUwQ0YsIDB4MEFGRSwgMHg1MEQwLCAweDQxOTMsDQotICAgIDB4NTBEMSwgMHgwNjlCLCAweDUwRDQsIDB4NDM4QywgMHg1MEQ1LCAweDBFN0IsIDB4NTBENiwgMHgxMDVDLA0KLSAgICAweDUwRDgsIDB4MjBDOCwgMHg1MEQ5LCAweDNDMzAsIDB4NTBEQSwgMHgwRjg1LCAweDUwREUsIDB4MTA1RCwNCi0gICAgMHg1MEUxLCAweDQzOEQsIDB4NTBFMywgMHgxMDYwLCAweDUwRTUsIDB4MTA1RSwgMHg1MEU2LCAweDM4MDUsDQotICAgIDB4NTBFNywgMHgwQUQwLCAweDUwRTgsIDB4NEFEQiwgMHg1MEU5LCAweDM4MDYsIDB4NTBFRCwgMHgxMDVGLA0KLSAgICAweDUwRUUsIDB4MTA2MSwgMHg1MEVGLCAweDM4MDcsIDB4NTBGMCwgMHgzQzMxLCAweDUwRjEsIDB4NEFEQywNCi0gICAgMHg1MEYyLCAweDQxOTIsIDB4NTBGMywgMHg0Mzg4LCAweDUwRjQsIDB4MjBDNywgMHg1MEY1LCAweDEwNjMsDQotICAgIDB4NTBGOSwgMHgxMDYyLCAweDUwRkIsIDB4MEUxOCwgMHg1MEZFLCAweDRBREQsIDB4NTEwMCwgMHgwNjUxLA0KLSAgICAweDUxMDEsIDB4MTA2NSwgMHg1MTAyLCAweDEwNjYsIDB4NTEwMywgMHg0MTk1LCAweDUxMDQsIDB4MDUyRiwNCi0gICAgMHg1MTA2LCAweDQxOTQsIDB4NTEwNywgMHg0QURFLCAweDUxMDgsIDB4MzgwOCwgMHg1MTA5LCAweDEwNjQsDQotICAgIDB4NTEwQiwgMHgzODA5LCAweDUxMEMsIDB4NEFERiwgMHg1MTBELCAweDRBRTAsIDB4NTEwRSwgMHg0QUUxLA0KLSAgICAweDUxMTAsIDB4MzgwQSwgMHg1MTEyLCAweDA5MjAsIDB4NTExNCwgMHgxMDY5LCAweDUxMTUsIDB4MTA2OCwNCi0gICAgMHg1MTE2LCAweDEwNjcsIDB4NTExNywgMHg0MzkwLCAweDUxMTgsIDB4MTAyRiwgMHg1MTFBLCAweDEwNkEsDQotICAgIDB4NTExQiwgMHgzODBCLCAweDUxMUUsIDB4MzgwQywgMHg1MTFGLCAweDA5ODgsIDB4NTEyMSwgMHgxMDZCLA0KLSAgICAweDUxMkEsIDB4MEYwRiwgMHg1MTMyLCAweDBFRTUsIDB4NTEzMywgMHg0QUUyLCAweDUxMzUsIDB4NDE5NiwNCi0gICAgMHg1MTM3LCAweDEwNkQsIDB4NTEzOCwgMHg0QUUzLCAweDUxM0EsIDB4MTA2QywgMHg1MTNCLCAweDEwNkYsDQotICAgIDB4NTEzQywgMHgxMDZFLCAweDUxM0YsIDB4MTA3MCwgMHg1MTQwLCAweDEwNzEsIDB4NTE0MSwgMHgwNEI4LA0KLSAgICAweDUxNDMsIDB4MDc2OSwgMHg1MTQ0LCAweDA3MTEsIDB4NTE0NSwgMHgwOTQ2LCAweDUxNDYsIDB4MEJCOSwNCi0gICAgMHg1MTQ3LCAweDA2OUMsIDB4NTE0OCwgMHgwQThDLCAweDUxNDksIDB4MDdBQiwgMHg1MTRBLCAweDIwQzksDQotICAgIDB4NTE0QiwgMHgwODAwLCAweDUxNEMsIDB4MTA3MywgMHg1MTRELCAweDBFRDQsIDB4NTE0RSwgMHgwQzQwLA0KLSAgICAweDUxNTAsIDB4MDhDNywgMHg1MTUyLCAweDEwNzIsIDB4NTE1NCwgMHgxMDc0LCAweDUxNTUsIDB4NDE5NywNCi0gICAgMHg1MTU3LCAweDQxOTgsIDB4NTE1QSwgMHgwQzU4LCAweDUxNUMsIDB4MDVEMywgMHg1MTVGLCAweDM4MEQsDQotICAgIDB4NTE2MCwgMHg0MzkyLCAweDUxNjIsIDB4MTA3NSwgMHg1MTY0LCAweDIwQ0EsIDB4NTE2NSwgMHgwQ0Q2LA0KLSAgICAweDUxNjcsIDB4MzY4RSwgMHg1MTY4LCAweDBBQjYsIDB4NTE2OSwgMHgxMDc3LCAweDUxNkEsIDB4MTA3OCwNCi0gICAgMHg1MTZCLCAweDBENDAsIDB4NTE2QywgMHgwN0FDLCAweDUxNkQsIDB4MEZFMSwgMHg1MTZFLCAweDEwNzksDQotICAgIDB4NTE3MSwgMHgwNjlFLCAweDUxNzMsIDB4NDM5NCwgMHg1MTc0LCAweDRBRTQsIDB4NTE3NSwgMHgwRTBDLA0KLSAgICAweDUxNzYsIDB4MEIxNiwgMHg1MTc3LCAweDA2RTksIDB4NTE3OCwgMHgwQzJGLCAweDUxNzksIDB4Mzc3OSwNCi0gICAgMHg1MTdCLCAweDQ3RDksIDB4NTE3QywgMHgwNzQ5LCAweDUxODAsIDB4MTA3QSwgMHg1MTgyLCAweDEwN0IsDQotICAgIDB4NTE4MywgMHg0Mzk1LCAweDUxODQsIDB4NEFFNSwgMHg1MTg1LCAweDBDQkEsIDB4NTE4NiwgMHgwNTAxLA0KLSAgICAweDUxODksIDB4MTA3RSwgMHg1MThBLCAweDA4NkQsIDB4NTE4QiwgMHg0Mzk2LCAweDUxOEMsIDB4MTA3RCwNCi0gICAgMHg1MThELCAweDA4MzYsIDB4NTE4RiwgMHgxMDdGLCAweDUxOTAsIDB4MTg1QiwgMHg1MTkxLCAweDEwODAsDQotICAgIDB4NTE5MiwgMHgwRTZGLCAweDUxOTMsIDB4MTA4MSwgMHg1MTk1LCAweDEwODIsIDB4NTE5NiwgMHgxMDgzLA0KLSAgICAweDUxOTcsIDB4MDlEMSwgMHg1MTk4LCAweDQzOTgsIDB4NTE5OSwgMHgwOEY4LCAweDUxOUQsIDB4MjBDQiwNCi0gICAgMHg1MUEwLCAweDA1RTMsIDB4NTFBMSwgMHgzODBFLCAweDUxQTIsIDB4MTA4NiwgMHg1MUEzLCAweDQzOTksDQotICAgIDB4NTFBNCwgMHgxMDg0LCAweDUxQTUsIDB4MEVDOSwgMHg1MUE2LCAweDEwODUsIDB4NTFBOCwgMHgwRENDLA0KLSAgICAweDUxQTksIDB4MTA4NywgMHg1MUFBLCAweDEwODgsIDB4NTFBQiwgMHgxMDg5LCAweDUxQUMsIDB4MEM1OSwNCi0gICAgMHg1MUFELCAweDQzOUEsIDB4NTFCMCwgMHgxMDhELCAweDUxQjEsIDB4MTA4QiwgMHg1MUIyLCAweDEwOEMsDQotICAgIDB4NTFCMywgMHgxMDhBLCAweDUxQjQsIDB4MDg1MywgMHg1MUI1LCAweDEwOEUsIDB4NTFCNiwgMHgwRUY2LA0KLSAgICAweDUxQjcsIDB4MEZBQywgMHg1MUI4LCAweDRBRTYsIDB4NTFCQSwgMHg0QUU3LCAweDUxQkMsIDB4MzgwRiwNCi0gICAgMHg1MUJELCAweDEwOEYsIDB4NTFCRSwgMHgyMENDLCAweDUxQzMsIDB4M0MzMiwgMHg1MUM0LCAweDBBNEMsDQotICAgIDB4NTFDNSwgMHgxMDkwLCAweDUxQzYsIDB4MDk2NCwgMHg1MUM4LCAweDRBRTgsIDB4NTFDOSwgMHgxMDkxLA0KLSAgICAweDUxQ0EsIDB4NDE5QSwgMHg1MUNCLCAweDBCQkEsIDB4NTFDQywgMHgwRjg3LCAweDUxQ0QsIDB4MEM1QSwNCi0gICAgMHg1MUNGLCAweDRBRTksIDB4NTFEMSwgMHg0QUVBLCAweDUxRDMsIDB4NEFFQiwgMHg1MUQ0LCAweDRBRUMsDQotICAgIDB4NTFENiwgMHgxMERBLCAweDUxRDgsIDB4NEFFRCwgMHg1MURCLCAweDEwOTIsIDB4NTFEQywgMHgyMDVDLA0KLSAgICAweDUxREQsIDB4MDZCRCwgMHg1MURFLCAweDRGNEMsIDB4NTFERiwgMHg0QUVFLCAweDUxRTAsIDB4MTA5MywNCi0gICAgMHg1MUUxLCAweDBFOEMsIDB4NTFFMiwgMHg0MTlCLCAweDUxRTYsIDB4MDk3MiwgMHg1MUU3LCAweDBCNUMsDQotICAgIDB4NTFFOSwgMHgxMDk1LCAweDUxRUEsIDB4MENCQywgMHg1MUVDLCAweDIwQ0QsIDB4NTFFRCwgMHgxMDk2LA0KLSAgICAweDUxRUUsIDB4MzgxMSwgMHg1MUYwLCAweDEwOTcsIDB4NTFGMSwgMHgwNThDLCAweDUxRjMsIDB4NDM5RCwNCi0gICAgMHg1MUY0LCAweDM4MTIsIDB4NTFGNSwgMHgxMDk4LCAweDUxRjYsIDB4MDY5RiwgMHg1MUY4LCAweDBDQTQsDQotICAgIDB4NTFGOSwgMHgwNTFDLCAweDUxRkEsIDB4MDk1QSwgMHg1MUZELCAweDBEMzUsIDB4NTFGRSwgMHgxMDk5LA0KLSAgICAweDUyMDAsIDB4MEM1QiwgMHg1MjAxLCAweDM4MTMsIDB4NTIwMiwgMHgzODE0LCAweDUyMDMsIDB4MEExNSwNCi0gICAgMHg1MjA0LCAweDEwOUEsIDB4NTIwNSwgMHg0QUVGLCAweDUyMDYsIDB4MERGQywgMHg1MjA3LCAweDBBN0UsDQotICAgIDB4NTIwOCwgMHgwNURFLCAweDUyMEEsIDB4MDVFNSwgMHg1MjBCLCAweDEwOUIsIDB4NTIwRSwgMHgxMDlELA0KLSAgICAweDUyMTEsIDB4MDcxMCwgMHg1MjEyLCAweDQzOUUsIDB4NTIxMywgMHgzODE1LCAweDUyMTQsIDB4MTA5QywNCi0gICAgMHg1MjE1LCAweDIwQ0UsIDB4NTIxNiwgMHg0MzlGLCAweDUyMTcsIDB4MEZCQiwgMHg1MjFELCAweDA5NzMsDQotICAgIDB4NTIyNCwgMHgwRDUxLCAweDUyMjUsIDB4MEUxQywgMHg1MjI2LCAweDRBRjAsIDB4NTIyNywgMHgxMDlFLA0KLSAgICAweDUyMjgsIDB4NEFGMSwgMHg1MjI5LCAweDBGNjIsIDB4NTIyQSwgMHgxMDlGLCAweDUyMkIsIDB4NEFGMiwNCi0gICAgMHg1MjJFLCAweDEwQTAsIDB4NTIzMCwgMHgwQzc4LCAweDUyMzEsIDB4NEFGMywgMHg1MjMyLCAweDRBRjQsDQotICAgIDB4NTIzMywgMHgxMEExLCAweDUyMzUsIDB4NEFGNSwgMHg1MjM2LCAweDBBNEQsIDB4NTIzNywgMHgwODZFLA0KLSAgICAweDUyMzgsIDB4MDc0QSwgMHg1MjM5LCAweDEwQTIsIDB4NTIzQSwgMHgwODk3LCAweDUyM0IsIDB4MDgwMSwNCi0gICAgMHg1MjNDLCAweDRBRjYsIDB4NTI0MywgMHgwQzAyLCAweDUyNDQsIDB4MTBBNCwgMHg1MjQ3LCAweDBCMDcsDQotICAgIDB4NTI0OSwgMHgzODE2LCAweDUyNEEsIDB4MDg1RiwgMHg1MjRCLCAweDEwQTUsIDB4NTI0QywgMHgxMEE2LA0KLSAgICAweDUyNEQsIDB4MEFCMiwgMHg1MjRGLCAweDEwQTMsIDB4NTI1NCwgMHgxMEE4LCAweDUyNTUsIDB4NDNBMSwNCi0gICAgMHg1MjU2LCAweDBFNjQsIDB4NTI1NywgMHg0MTlDLCAweDUyNUEsIDB4NEFGNywgMHg1MjVCLCAweDA3RjYsDQotICAgIDB4NTI1QywgMHg0M0EyLCAweDUyNUQsIDB4MUU1RSwgMHg1MjVFLCAweDEwQTcsIDB4NTI2MCwgMHg0QUY4LA0KLSAgICAweDUyNjEsIDB4MzgxNywgMHg1MjYzLCAweDA3NEIsIDB4NTI2NCwgMHgwODRFLCAweDUyNjUsIDB4MEQyMywNCi0gICAgMHg1MjY2LCAweDM4MTgsIDB4NTI2OSwgMHgxMEFCLCAweDUyNkEsIDB4MTBBOSwgMHg1MjZDLCAweDQzQTMsDQotICAgIDB4NTI2RSwgMHg0QUY5LCAweDUyNkYsIDB4MERFRCwgMHg1MjcwLCAweDA5RDIsIDB4NTI3MSwgMHgxMEIyLA0KLSAgICAweDUyNzIsIDB4MDVDMiwgMHg1MjczLCAweDEwQUMsIDB4NTI3NCwgMHgxMEFBLCAweDUyNzUsIDB4MEFEMSwNCi0gICAgMHg1Mjc3LCAweDQzQTQsIDB4NTI3OCwgMHg0QUZBLCAweDUyNzksIDB4NEFGQiwgMHg1MjdELCAweDEwQUUsDQotICAgIDB4NTI3RiwgMHgxMEFELCAweDUyODIsIDB4NDNBNiwgMHg1MjgzLCAweDA1QTIsIDB4NTI4NCwgMHg0M0E1LA0KLSAgICAweDUyODcsIDB4MDczNiwgMHg1Mjg4LCAweDEwQjMsIDB4NTI4OSwgMHgwRjc1LCAweDUyOEEsIDB4NEFGQywNCi0gICAgMHg1MjhDLCAweDRBRkQsIDB4NTI4RCwgMHgxMEFGLCAweDUyOTEsIDB4MTBCNCwgMHg1MjkyLCAweDEwQjEsDQotICAgIDB4NTI5MywgMHgzODE5LCAweDUyOTQsIDB4MTBCMCwgMHg1Mjk4LCAweDQzQTgsIDB4NTI5QiwgMHgwRjk3LA0KLSAgICAweDUyOUMsIDB4MjBDRiwgMHg1MjlGLCAweDA3QUQsIDB4NTJBMCwgMHgwNTQzLCAweDUyQTMsIDB4MEZCQywNCi0gICAgMHg1MkE0LCAweDQzQUEsIDB4NTJBNiwgMHgyMEQwLCAweDUyQTksIDB4MDk3RiwgMHg1MkFBLCAweDBDNTIsDQotICAgIDB4NTJBQiwgMHgwN0Y3LCAweDUyQUMsIDB4MTBCNywgMHg1MkFELCAweDEwQjgsIDB4NTJBRiwgMHgyMTdELA0KLSAgICAweDUyQjEsIDB4MEZBRCwgMHg1MkI0LCAweDBGRDEsIDB4NTJCNSwgMHgxMEJBLCAweDUyQjksIDB4MDdBRSwNCi0gICAgMHg1MkJBLCAweDQzQUIsIDB4NTJCQiwgMHg0M0FDLCAweDUyQkMsIDB4MTBCOSwgMHg1MkJFLCAweDA1OEQsDQotICAgIDB4NTJDMCwgMHgyMEQxLCAweDUyQzEsIDB4MTBCQiwgMHg1MkMzLCAweDBFODQsIDB4NTJDNSwgMHgwQkQ4LA0KLSAgICAweDUyQzcsIDB4MEYxMCwgMHg1MkM4LCAweDM4MUEsIDB4NTJDOSwgMHgwRTI5LCAweDUyQ0EsIDB4NDNBRCwNCi0gICAgMHg1MkNDLCAweDQxOUQsIDB4NTJDRCwgMHgxMEJDLCAweDUyRDAsIDB4MzZFOCwgMHg1MkQxLCAweDQzQUUsDQotICAgIDB4NTJEMiwgMHgxQkVFLCAweDUyRDUsIDB4MEM4OCwgMHg1MkQ2LCAweDQxOUUsIDB4NTJENywgMHgxMEJELA0KLSAgICAweDUyRDgsIDB4MDVFNiwgMHg1MkQ5LCAweDBFQkYsIDB4NTJEQiwgMHgyMEQyLCAweDUyREQsIDB4MDk4OSwNCi0gICAgMHg1MkRFLCAweDEwQkUsIDB4NTJERiwgMHgwRTM3LCAweDUyRTAsIDB4MTBDMiwgMHg1MkUxLCAweDRBRkUsDQotICAgIDB4NTJFMiwgMHgwQTRFLCAweDUyRTMsIDB4MTBCRiwgMHg1MkU0LCAweDA2QzgsIDB4NTJFNiwgMHgxMEMwLA0KLSAgICAweDUyRTcsIDB4MDVFNywgMHg1MkU5LCAweDRBRkYsIDB4NTJGMCwgMHgzODFCLCAweDUyRjEsIDB4NEIwMCwNCi0gICAgMHg1MkYyLCAweDA3MDQsIDB4NTJGMywgMHgxMEMzLCAweDUyRjUsIDB4MTBDNCwgMHg1MkY3LCAweDQzQjAsDQotICAgIDB4NTJGOCwgMHgxMEM1LCAweDUyRjksIDB4MTBDNiwgMHg1MkZBLCAweDA5MDcsIDB4NTJGQiwgMHg0MTlGLA0KLSAgICAweDUyRkUsIDB4MDdBRiwgMHg1MkZGLCAweDBFRUEsIDB4NTMwMCwgMHgyMEQzLCAweDUzMDEsIDB4MEVGNCwNCi0gICAgMHg1MzAyLCAweDBDQ0YsIDB4NTMwMywgMHg0QjAxLCAweDUzMDUsIDB4MEU0MSwgMHg1MzA2LCAweDEwQzcsDQotICAgIDB4NTMwNywgMHg0RjRELCAweDUzMDgsIDB4MTBDOCwgMHg1MzBBLCAweDM4MUMsIDB4NTMwQiwgMHgzODFELA0KLSAgICAweDUzMEQsIDB4MTBDQSwgMHg1MzBGLCAweDEwQ0MsIDB4NTMxMCwgMHgxMENCLCAweDUzMTEsIDB4NEIwMiwNCi0gICAgMHg1MzE1LCAweDEwQ0QsIDB4NTMxNiwgMHgwNTNELCAweDUzMTcsIDB4MEU3QSwgMHg1MzE5LCAweDA4NkMsDQotICAgIDB4NTMxQSwgMHgxMENFLCAweDUzMUMsIDB4NDFBMCwgMHg1MzFELCAweDBBREIsIDB4NTMxRiwgMHg0QjAzLA0KLSAgICAweDUzMjAsIDB4MDk4QSwgMHg1MzIxLCAweDA2QTEsIDB4NTMyMywgMHgxMENGLCAweDUzMjQsIDB4MjBENSwNCi0gICAgMHg1MzJBLCAweDBENkYsIDB4NTMyRCwgMHg0QjA0LCAweDUzMkYsIDB4MTBEMCwgMHg1MzMxLCAweDEwRDEsDQotICAgIDB4NTMzMiwgMHg0QjA1LCAweDUzMzMsIDB4MTBEMiwgMHg1MzM1LCAweDQzQjEsIDB4NTMzOCwgMHgxMEQzLA0KLSAgICAweDUzMzksIDB4MEQ5NiwgMHg1MzNBLCAweDA2RTAsIDB4NTMzQiwgMHgwNEE5LCAweDUzM0QsIDB4NEIwNiwNCi0gICAgMHg1MzNFLCAweDM4MUUsIDB4NTMzRiwgMHgwQzk3LCAweDUzNDAsIDB4MTBENCwgMHg1MzQxLCAweDA5NDcsDQotICAgIDB4NTM0MiwgMHg0M0IyLCAweDUzNDMsIDB4MEE4RCwgMHg1MzQ1LCAweDEwRDYsIDB4NTM0NiwgMHgxMEQ1LA0KLSAgICAweDUzNDcsIDB4MDk4QiwgMHg1MzQ4LCAweDA3OTUsIDB4NTM0OSwgMHgxMEQ4LCAweDUzNEEsIDB4MEQ1MiwNCi0gICAgMHg1MzRCLCAweDM4MjAsIDB4NTM0QywgMHgzODFGLCAweDUzNEQsIDB4MTBEOSwgMHg1MzUxLCAweDBENzAsDQotICAgIDB4NTM1MiwgMHgwQjE0LCAweDUzNTMsIDB4MEI0RSwgMHg1MzU0LCAweDA2QTAsIDB4NTM1NywgMHgwQ0M2LA0KLSAgICAweDUzNTgsIDB4MEI2RiwgMHg1MzVBLCAweDBEMjQsIDB4NTM1QywgMHgwRTdDLCAweDUzNUUsIDB4MTBEQiwNCi0gICAgMHg1MzYwLCAweDBBOEUsIDB4NTM2MSwgMHgzODIxLCAweDUzNjMsIDB4NDFBMSwgMHg1MzY1LCAweDRCMDcsDQotICAgIDB4NTM2NiwgMHgwNzBCLCAweDUzNjcsIDB4NDNCNSwgMHg1MzY5LCAweDEwREMsIDB4NTM2QywgMHgzODIyLA0KLSAgICAweDUzNkQsIDB4NEIwOCwgMHg1MzZFLCAweDEwREQsIDB4NTM2RiwgMHgwNENFLCAweDUzNzAsIDB4MDRCOSwNCi0gICAgMHg1MzcxLCAweDA2MjksIDB4NTM3MiwgMHgyMEQ2LCAweDUzNzMsIDB4MEIwOCwgMHg1Mzc0LCAweDA2NkIsDQotICAgIDB4NTM3NSwgMHgwRjVCLCAweDUzNzcsIDB4MTBFMCwgMHg1Mzc4LCAweDA1MzcsIDB4NTM3OSwgMHg0QjA5LA0KLSAgICAweDUzN0EsIDB4NDNCNiwgMHg1MzdCLCAweDEwREYsIDB4NTM3RCwgMHgzNDM1LCAweDUzN0UsIDB4NEIwQSwNCi0gICAgMHg1MzdGLCAweDA2QTIsIDB4NTM4MiwgMHgxMEUxLCAweDUzODQsIDB4MEVGRCwgMHg1Mzg5LCAweDM3RDAsDQotICAgIDB4NTM5MywgMHgyMEQ3LCAweDUzOTQsIDB4NEIwQiwgMHg1Mzk2LCAweDEwRTIsIDB4NTM5OCwgMHgwRjlBLA0KLSAgICAweDUzOTksIDB4NEIwQywgMHg1MzlBLCAweDA3QjAsIDB4NTM5RCwgMHg0MUEyLCAweDUzOUYsIDB4MDc2QSwNCi0gICAgMHg1M0EwLCAweDEwRTMsIDB4NTNBNCwgMHg0M0I3LCAweDUzQTUsIDB4MTBFNSwgMHg1M0E2LCAweDEwRTQsDQotICAgIDB4NTNBOCwgMHgwQTI1LCAweDUzQTksIDB4MDREQiwgMHg1M0FBLCAweDRCMEQsIDB4NTNBQiwgMHgzODIzLA0KLSAgICAweDUzQUQsIDB4MDUwMCwgMHg1M0FFLCAweDEwRTYsIDB4NTNBRiwgMHg0QjBFLCAweDUzQjAsIDB4MTBFNywNCi0gICAgMHg1M0IyLCAweDIwRDgsIDB4NTNCMywgMHgwNzZCLCAweDUzQjQsIDB4NDNCOCwgMHg1M0I2LCAweDEwRTgsDQotICAgIDB4NTNCNywgMHg0M0JBLCAweDUzQkEsIDB4NEIwRiwgMHg1M0JCLCAweDA2ODgsIDB4NTNDMCwgMHg0M0JCLA0KLSAgICAweDUzQzEsIDB4NEIxMCwgMHg1M0MyLCAweDA4ODAsIDB4NTNDMywgMHgxMEU5LCAweDUzQzQsIDB4NEIxMSwNCi0gICAgMHg1M0M1LCAweDRCMTIsIDB4NTNDOCwgMHgwRUEyLCAweDUzQzksIDB4MDgyNSwgMHg1M0NBLCAweDA2NzQsDQotICAgIDB4NTNDQiwgMHgwRjExLCAweDUzQ0MsIDB4MEFEMiwgMHg1M0NELCAweDBENTMsIDB4NTNDRSwgMHgwOTI5LA0KLSAgICAweDUzRDQsIDB4MDk1MSwgMHg1M0Q1LCAweDQzQkYsIDB4NTNENiwgMHgwOTE0LCAweDUzRDcsIDB4MDkyMSwNCi0gICAgMHg1M0Q5LCAweDA5ODAsIDB4NTNEQSwgMHgzODI0LCAweDUzREIsIDB4MEQ1NCwgMHg1M0RELCAweDIwRDksDQotICAgIDB4NTNERiwgMHgxMEVDLCAweDUzRTAsIDB4NEIxMywgMHg1M0UxLCAweDA0RTUsIDB4NTNFMiwgMHgwQUQzLA0KLSAgICAweDUzRTMsIDB4MDdCMSwgMHg1M0U0LCAweDA3NzksIDB4NTNFNSwgMHgwNkRGLCAweDUzRTYsIDB4MzgyNSwNCi0gICAgMHg1M0U4LCAweDEwRjAsIDB4NTNFOSwgMHgwQjVGLCAweDUzRUEsIDB4MEI1RSwgMHg1M0VCLCAweDA2QTMsDQotICAgIDB4NTNFQywgMHgwOThDLCAweDUzRUQsIDB4MTBGMSwgMHg1M0VFLCAweDEwRUYsIDB4NTNFRiwgMHgwNTQ0LA0KLSAgICAweDUzRjAsIDB4MEI0NiwgMHg1M0YxLCAweDA4RTQsIDB4NTNGMiwgMHgwODk5LCAweDUzRjMsIDB4MDRDOCwNCi0gICAgMHg1M0Y0LCAweDQzQzEsIDB4NTNGNSwgMHgzODI2LCAweDUzRjYsIDB4MDVDRSwgMHg1M0Y3LCAweDA3RjgsDQotICAgIDB4NTNGOCwgMHgwODk4LCAweDUzRkEsIDB4MTBGMiwgMHg1NDAxLCAweDEwRjMsIDB4NTQwMywgMHgwNjYzLA0KLSAgICAweDU0MDQsIDB4MDVBNCwgMHg1NDA4LCAweDA3RjksIDB4NTQwOSwgMHgwNjYyLCAweDU0MEEsIDB4MEJGQiwNCi0gICAgMHg1NDBCLCAweDA0QzcsIDB4NTQwQywgMHgwQzg5LCAweDU0MEQsIDB4MEVDQSwgMHg1NDBFLCAweDA3QjMsDQotICAgIDB4NTQwRiwgMHgwRjYzLCAweDU0MTAsIDB4MEM0MSwgMHg1NDExLCAweDA3QjIsIDB4NTQxMiwgMHg0MUEzLA0KLSAgICAweDU0MTMsIDB4NEIxNCwgMHg1NDFCLCAweDA3MDUsIDB4NTQxRCwgMHgxMEZDLCAweDU0MUUsIDB4MzY4QywNCi0gICAgMHg1NDFGLCAweDA2REIsIDB4NTQyMCwgMHgwRTc4LCAweDU0MjQsIDB4NDNDMiwgMHg1NDI2LCAweDBENzEsDQotICAgIDB4NTQyNywgMHgzODI3LCAweDU0MjgsIDB4NDNDMywgMHg1NDI5LCAweDEwRkIsIDB4NTQyQSwgMHg0QjE1LA0KLSAgICAweDU0MkIsIDB4MDYxQSwgMHg1NDJDLCAweDEwRjYsIDB4NTQyRCwgMHgxMEY3LCAweDU0MkUsIDB4MTBGOSwNCi0gICAgMHg1NDMxLCAweDRCMTYsIDB4NTQzMywgMHgzNUMwLCAweDU0MzQsIDB4NEIxNywgMHg1NDM1LCAweDRCMTgsDQotICAgIDB4NTQzNiwgMHgxMEZBLCAweDU0MzgsIDB4MDY3NSwgMHg1NDM5LCAweDBBMjcsIDB4NTQzQiwgMHgwREZELA0KLSAgICAweDU0M0MsIDB4MTBGOCwgMHg1NDNELCAweDEwRjQsIDB4NTQzRSwgMHgwNzk3LCAweDU0M0YsIDB4MzVDRiwNCi0gICAgMHg1NDQwLCAweDEwRjUsIDB4NTQ0MiwgMHgwRkNBLCAweDU0NDMsIDB4NDNDNSwgMHg1NDQ2LCAweDBFNDIsDQotICAgIDB4NTQ0OCwgMHgwQzA0LCAweDU0NDksIDB4MDc5NiwgMHg1NDRBLCAweDA4MDIsIDB4NTQ0QywgMHg0QjE5LA0KLSAgICAweDU0NEQsIDB4MzgyOCwgMHg1NDRFLCAweDEwRkQsIDB4NTQ1MSwgMHgwQ0I1LCAweDU0NTUsIDB4MzcyMywNCi0gICAgMHg1NDVGLCAweDExMDEsIDB4NTQ2MiwgMHg0M0M2LCAweDU0NjYsIDB4MzgyOSwgMHg1NDY4LCAweDA5MkEsDQotICAgIDB4NTQ2QSwgMHgwOTIyLCAweDU0NkIsIDB4MzgyQSwgMHg1NDZDLCAweDQzQzcsIDB4NTQ3MCwgMHgxMTA0LA0KLSAgICAweDU0NzEsIDB4MTEwMiwgMHg1NDczLCAweDBFQUYsIDB4NTQ3NCwgMHgzODJCLCAweDU0NzUsIDB4MTBGRiwNCi0gICAgMHg1NDc2LCAweDExMDgsIDB4NTQ3NywgMHgxMTAzLCAweDU0N0IsIDB4MTEwNiwgMHg1NDdDLCAweDA3N0EsDQotICAgIDB4NTQ3RCwgMHgwRUNCLCAweDU0N0YsIDB4NDFBNCwgMHg1NDgwLCAweDExMDcsIDB4NTQ4NCwgMHgxMTA5LA0KLSAgICAweDU0ODYsIDB4MTEwQiwgMHg1NDg4LCAweDQxQTUsIDB4NTQ4QSwgMHgyMERDLCAweDU0OEIsIDB4MDg2MCwNCi0gICAgMHg1NDhDLCAweDBGRTgsIDB4NTQ4RCwgMHgzODJDLCAweDU0OEUsIDB4MTEwMCwgMHg1NDhGLCAweDEwRkUsDQotICAgIDB4NTQ5MCwgMHgxMTBBLCAweDU0OTIsIDB4MTEwNSwgMHg1NDk1LCAweDQzQzgsIDB4NTQ5NiwgMHgzODJELA0KLSAgICAweDU0OUMsIDB4MjBEQiwgMHg1NEEwLCAweDQzQzksIDB4NTRBMSwgMHgzODJFLCAweDU0QTIsIDB4MTEwRCwNCi0gICAgMHg1NEE0LCAweDExMTYsIDB4NTRBNSwgMHgxMTBGLCAweDU0QTYsIDB4NDNDQSwgMHg1NEE3LCAweDRCMUEsDQotICAgIDB4NTRBOCwgMHgxMTEzLCAweDU0QTksIDB4MjBERCwgMHg1NEFBLCAweDRCMUIsIDB4NTRBQiwgMHgxMTE0LA0KLSAgICAweDU0QUMsIDB4MTExMCwgMHg1NEFELCAweDM4MkYsIDB4NTRBRSwgMHg0M0NCLCAweDU0QUYsIDB4MTEzMSwNCi0gICAgMHg1NEIxLCAweDRCMUMsIDB4NTRCMiwgMHgwODU5LCAweDU0QjMsIDB4MDU4RiwgMHg1NEI3LCAweDQzQ0MsDQotICAgIDB4NTRCOCwgMHgxMTBFLCAweDU0QjksIDB4MzgzMCwgMHg1NEJBLCAweDQzQ0QsIDB4NTRCQiwgMHg0QjFELA0KLSAgICAweDU0QkMsIDB4MTExOCwgMHg1NEJELCAweDA0QkEsIDB4NTRCRSwgMHgxMTE3LCAweDU0QkYsIDB4MzgzMSwNCi0gICAgMHg1NEMwLCAweDA0NjksIDB4NTRDMSwgMHgwREJDLCAweDU0QzIsIDB4MTExNSwgMHg1NEMzLCAweDQzQ0UsDQotICAgIDB4NTRDNCwgMHgxMTExLCAweDU0QzYsIDB4MzgzMiwgMHg1NEM3LCAweDExMEMsIDB4NTRDOCwgMHgxMTEyLA0KLSAgICAweDU0QzksIDB4MDgzOCwgMHg1NENELCAweDM4MzMsIDB4NTRDRSwgMHg0QjFFLCAweDU0RDgsIDB4MTExOSwNCi0gICAgMHg1NEUxLCAweDA0QkIsIDB4NTRFMiwgMHgxMTIyLCAweDU0RTUsIDB4MTExQSwgMHg1NEU2LCAweDExMUIsDQotICAgIDB4NTRFOCwgMHgwOThELCAweDU0RTksIDB4MEU5NywgMHg1NEVBLCAweDRCMUYsIDB4NTRFQywgMHg0M0QwLA0KLSAgICAweDU0RUQsIDB4MTEyMCwgMHg1NEVFLCAweDExMUYsIDB4NTRFRiwgMHg0M0QxLCAweDU0RjEsIDB4NDNEMiwNCi0gICAgMHg1NEYyLCAweDBDMjksIDB4NTRGMywgMHg0M0QzLCAweDU0RkEsIDB4MTEyMSwgMHg1NEZDLCAweDRCMjAsDQotICAgIDB4NTRGRCwgMHgxMTFFLCAweDU0RkYsIDB4MjBERSwgMHg1NTAwLCAweDQzRDQsIDB4NTUwMSwgMHg0M0Q1LA0KLSAgICAweDU1MDQsIDB4MDRENiwgMHg1NTA1LCAweDRCMjEsIDB4NTUwNiwgMHgwODI2LCAweDU1MDcsIDB4MDlGNiwNCi0gICAgMHg1NTA4LCAweDRCMjIsIDB4NTUwOSwgMHg0M0Q2LCAweDU1MEUsIDB4MzgzNCwgMHg1NTBGLCAweDExMUMsDQotICAgIDB4NTUxMCwgMHgwQzVDLCAweDU1MTQsIDB4MTExRCwgMHg1NTE1LCAweDRCMjMsIDB4NTUxNiwgMHgwNDY2LA0KLSAgICAweDU1MjcsIDB4NEIyNCwgMHg1NTJBLCAweDRCMjUsIDB4NTUyQiwgMHgzODM1LCAweDU1MkUsIDB4MTEyNywNCi0gICAgMHg1NTJGLCAweDBGMEQsIDB4NTUzMSwgMHgwOThGLCAweDU1MzMsIDB4MTEyRCwgMHg1NTM1LCAweDM4MzYsDQotICAgIDB4NTUzNiwgMHg0QjI2LCAweDU1MzgsIDB4MTEyQywgMHg1NTM5LCAweDExMjMsIDB4NTUzQywgMHg0M0Q3LA0KLSAgICAweDU1M0UsIDB4MEIyMywgMHg1NTQwLCAweDExMjQsIDB4NTU0MSwgMHg0M0Q4LCAweDU1NDQsIDB4MEI0RiwNCi0gICAgMHg1NTQ1LCAweDExMjksIDB4NTU0NiwgMHgwOThFLCAweDU1NDcsIDB4NDNEQSwgMHg1NTRBLCAweDM4MzcsDQotICAgIDB4NTU0QywgMHgxMTI2LCAweDU1NEYsIDB4MEVGMCwgMHg1NTUwLCAweDQxQTYsIDB4NTU1MSwgMHg0QjI3LA0KLSAgICAweDU1NTMsIDB4MDcxMiwgMHg1NTU2LCAweDExMkEsIDB4NTU1NywgMHgxMTJCLCAweDU1NUMsIDB4MTEyOCwNCi0gICAgMHg1NTVELCAweDExMkUsIDB4NTU1RSwgMHgxREQxLCAweDU1NjAsIDB4MzgzOCwgMHg1NTYxLCAweDRGNTQsDQotICAgIDB4NTU2MywgMHgxMTI1LCAweDU1NjQsIDB4NDNEQywgMHg1NTY2LCAweDRCMjgsIDB4NTU3QiwgMHgxMTM0LA0KLSAgICAweDU1N0MsIDB4MTEzOSwgMHg1NTdELCAweDQzREUsIDB4NTU3RSwgMHgxMTM1LCAweDU1ODAsIDB4MTEzMCwNCi0gICAgMHg1NTgxLCAweDQxQTcsIDB4NTU4MiwgMHg0M0RGLCAweDU1ODMsIDB4MTEzQSwgMHg1NTg0LCAweDBBQjMsDQotICAgIDB4NTU4NiwgMHgyMERGLCAweDU1ODcsIDB4MTEzQywgMHg1NTg4LCAweDM4M0EsIDB4NTU4OSwgMHgwN0I0LA0KLSAgICAweDU1OEEsIDB4MTEzMiwgMHg1NThCLCAweDBCQkIsIDB4NTU4RSwgMHgzODNCLCAweDU1OEYsIDB4NEIyOSwNCi0gICAgMHg1NTkxLCAweDQzRTAsIDB4NTU5MiwgMHg0QjJBLCAweDU1OTQsIDB4NEIyQiwgMHg1NTk4LCAweDExMzYsDQotICAgIDB4NTU5OSwgMHgxMTJGLCAweDU1OUEsIDB4MDVFOSwgMHg1NTlDLCAweDA2MkEsIDB4NTU5RCwgMHgwNUMzLA0KLSAgICAweDU1OUUsIDB4MTEzNywgMHg1NTlGLCAweDExMzMsIDB4NTVBNCwgMHg0QjJDLCAweDU1QTcsIDB4MDc0QywNCi0gICAgMHg1NUE4LCAweDExM0QsIDB4NTVBOSwgMHgxMTNCLCAweDU1QUEsIDB4MEFENSwgMHg1NUFCLCAweDA2NjQsDQotICAgIDB4NTVBQywgMHgwNkE0LCAweDU1QUQsIDB4NDFBOCwgMHg1NUFFLCAweDExMzgsIDB4NTVCMCwgMHgwNkVDLA0KLSAgICAweDU1QjIsIDB4NEIyRCwgMHg1NUI2LCAweDA0RTYsIDB4NTVCRiwgMHg0M0U1LCAweDU1QzMsIDB4NEIyRSwNCi0gICAgMHg1NUM0LCAweDExNDEsIDB4NTVDNSwgMHgxMTNGLCAweDU1QzYsIDB4NEIyRiwgMHg1NUM3LCAweDExNzgsDQotICAgIDB4NTVDOSwgMHg0M0U2LCAweDU1Q0MsIDB4NDNFNywgMHg1NUNFLCAweDQxQTksIDB4NTVEMSwgMHg0M0U4LA0KLSAgICAweDU1RDIsIDB4NDNFMiwgMHg1NUQzLCAweDRCMzAsIDB4NTVENCwgMHgxMTQ0LCAweDU1REEsIDB4MTEzRSwNCi0gICAgMHg1NURCLCAweDRCMzEsIDB4NTVEQywgMHgxMTQyLCAweDU1REQsIDB4NDNFOSwgMHg1NURGLCAweDExNDAsDQotICAgIDB4NTVFMiwgMHg0M0VCLCAweDU1RTMsIDB4MDg5QSwgMHg1NUU0LCAweDExNDMsIDB4NTVFOSwgMHg0M0VELA0KLSAgICAweDU1RUMsIDB4NEIzMiwgMHg1NUVFLCAweDRCMzMsIDB4NTVGMSwgMHg0QjM0LCAweDU1RjYsIDB4NEIzNSwNCi0gICAgMHg1NUY3LCAweDExNDYsIDB4NTVGOCwgMHg0QjM2LCAweDU1RjksIDB4MTE0QiwgMHg1NUZELCAweDExNDksDQotICAgIDB4NTVGRSwgMHgxMTQ4LCAweDU2MDUsIDB4NEIzNywgMHg1NjA2LCAweDBCNzAsIDB4NTYwNywgMHg0M0YwLA0KLSAgICAweDU2MDgsIDB4MzgzQywgMHg1NjA5LCAweDA1NDUsIDB4NTYwRCwgMHg0QjM4LCAweDU2MEUsIDB4MzgzRCwNCi0gICAgMHg1NjBGLCAweDM4M0UsIDB4NTYxMCwgMHg0M0YxLCAweDU2MTEsIDB4NEIzOSwgMHg1NjEyLCAweDRCM0EsDQotICAgIDB4NTYxNCwgMHgxMTQ1LCAweDU2MTYsIDB4MTE0NywgMHg1NjE3LCAweDA5OTAsIDB4NTYxOCwgMHgwNEQ1LA0KLSAgICAweDU2MUIsIDB4MTE0QSwgMHg1NjIwLCAweDNDMUQsIDB4NTYyOCwgMHg0M0VFLCAweDU2MjksIDB4MDU1RSwNCi0gICAgMHg1NjJDLCAweDRCM0IsIDB4NTYyRiwgMHgxMTU1LCAweDU2MzAsIDB4NDNGMiwgMHg1NjMxLCAweDA5RTQsDQotICAgIDB4NTYzMiwgMHgxMTUxLCAweDU2MzQsIDB4MTE0RiwgMHg1NjM1LCAweDRCM0MsIDB4NTYzNiwgMHgxMTUwLA0KLSAgICAweDU2MzcsIDB4MzgzRiwgMHg1NjM4LCAweDExNTIsIDB4NTYzOSwgMHg0QjNELCAweDU2M0IsIDB4NDFBQSwNCi0gICAgMHg1NjNELCAweDQzRjQsIDB4NTYzRiwgMHgzODQwLCAweDU2NDAsIDB4NDNGNSwgMHg1NjQyLCAweDA0REYsDQotICAgIDB4NTY0NywgMHg0M0Y2LCAweDU2NDksIDB4Mzg0MSwgMHg1NjRCLCAweDM4NDIsIDB4NTY0QywgMHgwQUJCLA0KLSAgICAweDU2NEQsIDB4NEIzRSwgMHg1NjRFLCAweDExNEMsIDB4NTY0RiwgMHgzODQzLCAweDU2NTAsIDB4MTE0RCwNCi0gICAgMHg1NjUzLCAweDFGMUIsIDB4NTY1NCwgMHg0QjNGLCAweDU2NUIsIDB4MDVEOCwgMHg1NjVFLCAweDQzRjcsDQotICAgIDB4NTY2MCwgMHg0M0Y4LCAweDU2NjQsIDB4MTE1NCwgMHg1NjY2LCAweDM4NDQsIDB4NTY2OCwgMHgwNjJCLA0KLSAgICAweDU2NjksIDB4Mzg0NSwgMHg1NjZBLCAweDExNTcsIDB4NTY2QiwgMHgxMTUzLCAweDU2NkMsIDB4MTE1NiwNCi0gICAgMHg1NjZELCAweDQzRjksIDB4NTY2RiwgMHgzODQ2LCAweDU2NzEsIDB4Mzg0NywgMHg1NjcyLCAweDM4NDgsDQotICAgIDB4NTY3NCwgMHgwREZFLCAweDU2NzYsIDB4M0MzMywgMHg1Njc4LCAweDBDQUQsIDB4NTY3QSwgMHgwRDRDLA0KLSAgICAweDU2ODAsIDB4MTE1OSwgMHg1Njg1LCAweDRCNDAsIDB4NTY4NiwgMHgxMTU4LCAweDU2ODcsIDB4MDVBMywNCi0gICAgMHg1Njg4LCAweDQzRkIsIDB4NTY4QSwgMHgxMTVBLCAweDU2OEMsIDB4NDNGQywgMHg1NjhGLCAweDExNUQsDQotICAgIDB4NTY5NCwgMHgxMTVDLCAweDU2OTUsIDB4Mzg0OSwgMHg1Njk5LCAweDFERTYsIDB4NTY5QSwgMHgzODRBLA0KLSAgICAweDU2OUQsIDB4NDNGRCwgMHg1NjlFLCAweDQxQUIsIDB4NTY5RiwgMHg0QjQxLCAweDU2QTAsIDB4MTE1QiwNCi0gICAgMHg1NkEyLCAweDBDRUYsIDB4NTZBNSwgMHgxMTVFLCAweDU2QTYsIDB4NEI0MiwgMHg1NkE4LCAweDQzRkUsDQotICAgIDB4NTZBOSwgMHg0MUFDLCAweDU2QUMsIDB4Mzg0QiwgMHg1NkFELCAweDM4NEMsIDB4NTZBRSwgMHgxMTVGLA0KLSAgICAweDU2QjEsIDB4Mzg0RCwgMHg1NkIyLCAweDQzRkYsIDB4NTZCMywgMHg0MUFELCAweDU2QjQsIDB4MTE2MSwNCi0gICAgMHg1NkI2LCAweDExNjAsIDB4NTZCNywgMHg0QjQzLCAweDU2QkMsIDB4MTE2MywgMHg1NkMwLCAweDExNjYsDQotICAgIDB4NTZDMSwgMHgxMTY0LCAweDU2QzIsIDB4MTE2MiwgMHg1NkMzLCAweDExNjUsIDB4NTZDNSwgMHg0NDAwLA0KLSAgICAweDU2QzgsIDB4MTE2NywgMHg1NkM5LCAweDM4NEUsIDB4NTZDQSwgMHgxRTVBLCAweDU2Q0MsIDB4NEI0NCwNCi0gICAgMHg1NkNELCAweDQ0MDEsIDB4NTZDRSwgMHgxMTY4LCAweDU2Q0YsIDB4NEI0NSwgMHg1NkQxLCAweDExNjksDQotICAgIDB4NTZEMywgMHgxMTZBLCAweDU2RDcsIDB4MTE2QiwgMHg1NkQ4LCAweDEwN0MsIDB4NTZEOSwgMHg0QjQ2LA0KLSAgICAweDU2REEsIDB4MDkyOCwgMHg1NkRCLCAweDA4OUIsIDB4NTZERCwgMHgzODRGLCAweDU2REUsIDB4MDU3MywNCi0gICAgMHg1NkRGLCAweDQ0MDIsIDB4NTZFMCwgMHgwNEJDLCAweDU2RTEsIDB4NEI0NywgMHg1NkUzLCAweDBCODIsDQotICAgIDB4NTZFNCwgMHgzODUwLCAweDU2RTgsIDB4NDQwMywgMHg1NkVCLCAweDRCNDgsIDB4NTZFRCwgMHg0QjQ5LA0KLSAgICAweDU2RUUsIDB4MTE2QywgMHg1NkYwLCAweDA4MTQsIDB4NTZGMSwgMHg0QjRBLCAweDU2RjIsIDB4MDQ5MywNCi0gICAgMHg1NkYzLCAweDBBMjQsIDB4NTZGNiwgMHg0NDA0LCAweDU2RjcsIDB4NDQwNSwgMHg1NkY5LCAweDExNkQsDQotICAgIDB4NTZGQSwgMHgwNzdCLCAweDU2RkQsIDB4MDgwMywgMHg1NkZGLCAweDExNkYsIDB4NTcwMCwgMHgxMTZFLA0KLSAgICAweDU3MDMsIDB4MEUzMCwgMHg1NzA0LCAweDExNzAsIDB4NTcwNywgMHg0QjRCLCAweDU3MDgsIDB4MTE3MiwNCi0gICAgMHg1NzA5LCAweDExNzEsIDB4NTcwQSwgMHgzODUxLCAweDU3MEIsIDB4MTE3MywgMHg1NzBDLCAweDRCNEMsDQotICAgIDB4NTcwRCwgMHgxMTc0LCAweDU3MEYsIDB4MDc0RCwgMHg1NzEyLCAweDA1MDIsIDB4NTcxMywgMHgxMTc1LA0KLSAgICAweDU3MTUsIDB4Mzg1MiwgMHg1NzE2LCAweDExNzcsIDB4NTcxOCwgMHgxMTc2LCAweDU3MUEsIDB4NEI0RCwNCi0gICAgMHg1NzFCLCAweDRCNEUsIDB4NTcxQywgMHgxMTc5LCAweDU3MUQsIDB4NEI0RiwgMHg1NzFGLCAweDBDNTQsDQotICAgIDB4NTcyMSwgMHgzNjgwLCAweDU3MjMsIDB4Mzg1MywgMHg1NzI2LCAweDExN0EsIDB4NTcyNywgMHgwNDc5LA0KLSAgICAweDU3MjgsIDB4MDg0RiwgMHg1NzI5LCAweDQ0MDgsIDB4NTcyQywgMHg0QjUwLCAweDU3MkQsIDB4MDcxMywNCi0gICAgMHg1NzJFLCAweDRCNTEsIDB4NTcyRiwgMHgzODU0LCAweDU3MzAsIDB4MEI4RCwgMHg1NzMzLCAweDM4NTUsDQotICAgIDB4NTczNCwgMHgzODU2LCAweDU3MzcsIDB4MTE3QiwgMHg1NzM4LCAweDExN0MsIDB4NTczQiwgMHgxMTdFLA0KLSAgICAweDU3M0QsIDB4NEI1MiwgMHg1NzNFLCAweDRCNTMsIDB4NTc0MCwgMHgxMTdGLCAweDU3NDIsIDB4MDg1NCwNCi0gICAgMHg1NzQ1LCAweDQ0MEEsIDB4NTc0NiwgMHg0NDBCLCAweDU3NDcsIDB4MDZDOSwgMHg1NzRBLCAweDBFNjUsDQotICAgIDB4NTc0QywgMHgzODU3LCAweDU3NEQsIDB4NDQwQywgMHg1NzRFLCAweDExN0QsIDB4NTc0RiwgMHgxMTgwLA0KLSAgICAweDU3NTAsIDB4MDgzMSwgMHg1NzUxLCAweDA3QjUsIDB4NTc1OSwgMHgyMEUwLCAweDU3NUYsIDB4NEI1NCwNCi0gICAgMHg1NzYxLCAweDExODQsIDB4NTc2NCwgMHgwODE1LCAweDU3NjUsIDB4MjBFMSwgMHg1NzY2LCAweDBCNzEsDQotICAgIDB4NTc2OCwgMHg0NDBFLCAweDU3NjksIDB4MTE4MSwgMHg1NzZBLCAweDBCRjYsIDB4NTc2QiwgMHg0QjU1LA0KLSAgICAweDU3NkQsIDB4NEI1NiwgMHg1NzZGLCAweDQ0MEYsIDB4NTc3MCwgMHgzODU4LCAweDU3NzMsIDB4NDQxMCwNCi0gICAgMHg1Nzc0LCAweDQ0MTEsIDB4NTc3NSwgMHg0NDEyLCAweDU3NzcsIDB4NDFBRSwgMHg1NzdBLCAweDRCNTcsDQotICAgIDB4NTc3QiwgMHg0NDEzLCAweDU3N0MsIDB4NDFBRiwgMHg1NzdGLCAweDExODUsIDB4NTc4MiwgMHgwQTI4LA0KLSAgICAweDU3ODMsIDB4NEI1OCwgMHg1Nzg4LCAweDExODMsIDB4NTc4OSwgMHgxMTg2LCAweDU3OEIsIDB4MDcxNSwNCi0gICAgMHg1NzhDLCAweDM4NTksIDB4NTc5MywgMHgxMTg3LCAweDU3OTcsIDB4NEI1OSwgMHg1NzlBLCAweDQ0MTYsDQotICAgIDB4NTc5QywgMHgzODVBLCAweDU3OUQsIDB4NDQxNywgMHg1NzlFLCAweDQ0MTgsIDB4NTdBMCwgMHgxMTg4LA0KLSAgICAweDU3QTIsIDB4MDdCNiwgMHg1N0EzLCAweDA1OUUsIDB4NTdBNCwgMHgxMThBLCAweDU3QTgsIDB4NDQxOSwNCi0gICAgMHg1N0FBLCAweDExOEIsIDB4NTdBQywgMHgyMEUyLCAweDU3QUUsIDB4NEI1QSwgMHg1N0IwLCAweDExOEMsDQotICAgIDB4NTdCMywgMHgxMTg5LCAweDU3QjgsIDB4Mzg1QiwgMHg1N0MwLCAweDExODIsIDB4NTdDMywgMHgxMThELA0KLSAgICAweDU3QzYsIDB4MTE4RSwgMHg1N0M3LCAweDIwRTQsIDB4NTdDOCwgMHgyMEUzLCAweDU3Q0IsIDB4MEU5MiwNCi0gICAgMHg1N0NDLCAweDQ0MUMsIDB4NTdDRSwgMHgwOUQzLCAweDU3Q0YsIDB4NDFCMSwgMHg1N0QyLCAweDExOTAsDQotICAgIDB4NTdEMywgMHgxMTkxLCAweDU3RDQsIDB4MTE4RiwgMHg1N0Q1LCAweDRCNUIsIDB4NTdENiwgMHgxMTkzLA0KLSAgICAweDU3RDcsIDB4NDQxQSwgMHg1N0RDLCAweDBDRUUsIDB4NTdERSwgMHg0NDFGLCAweDU3REYsIDB4MDRBQywNCi0gICAgMHg1N0UwLCAweDBEQzgsIDB4NTdFMywgMHgxMTk0LCAweDU3RTQsIDB4NDFCMiwgMHg1N0U2LCAweDM4NUMsDQotICAgIDB4NTdFNywgMHg0QjVDLCAweDU3RUQsIDB4Mzg1RCwgMHg1N0YwLCAweDQ0MjAsIDB4NTdGNCwgMHgwOUU1LA0KLSAgICAweDU3RjUsIDB4Mzg1RSwgMHg1N0Y2LCAweDM4NUYsIDB4NTdGNywgMHgwOEU1LCAweDU3RjgsIDB4NDQyMiwNCi0gICAgMHg1N0Y5LCAweDBEMTMsIDB4NTdGQSwgMHgwNjJDLCAweDU3RkIsIDB4NDQyMywgMHg1N0ZDLCAweDA4NUIsDQotICAgIDB4NTdGRCwgMHg0NDI0LCAweDU3RkYsIDB4Mzg2MCwgMHg1ODAwLCAweDBFODcsIDB4NTgwMiwgMHgwQzhBLA0KLSAgICAweDU4MDQsIDB4NDQyNSwgMHg1ODA1LCAweDA3NEUsIDB4NTgwNiwgMHgwQjJGLCAweDU4MDksIDB4Mzg2MSwNCi0gICAgMHg1ODBBLCAweDExOTIsIDB4NTgwQiwgMHgxMTk1LCAweDU4MEQsIDB4NEI1RCwgMHg1ODE1LCAweDBCMjQsDQotICAgIDB4NTgxOSwgMHgxMTk2LCAweDU4MUQsIDB4MTE5NywgMHg1ODFFLCAweDQ0MjYsIDB4NTgyMCwgMHgzODYyLA0KLSAgICAweDU4MjEsIDB4MTE5OSwgMHg1ODI0LCAweDBDMDUsIDB4NTgyNiwgMHg0QjVFLCAweDU4MjcsIDB4NDQyNywNCi0gICAgMHg1ODJBLCAweDA1RUEsIDB4NTgyRiwgMHgxRDMyLCAweDU4MzAsIDB4MDUwMywgMHg1ODMxLCAweDBFNDMsDQotICAgIDB4NTgzMiwgMHgzODYzLCAweDU4MzQsIDB4MDlENCwgMHg1ODM1LCAweDBDNDIsIDB4NTgzOSwgMHg0NDI4LA0KLSAgICAweDU4M0EsIDB4MDg1NiwgMHg1ODNELCAweDExOUYsIDB4NTg0MCwgMHgwRTBELCAweDU4NDEsIDB4MEZBNSwNCi0gICAgMHg1ODQ5LCAweDQ0MkEsIDB4NTg0QSwgMHgwNTc0LCAweDU4NEIsIDB4MTE5QiwgMHg1ODRDLCAweDQ0MkIsDQotICAgIDB4NTg0RCwgMHg0QjVGLCAweDU4NEYsIDB4NEI2MCwgMHg1ODUxLCAweDBBQkMsIDB4NTg1MiwgMHgxMTlFLA0KLSAgICAweDU4NTQsIDB4MEM1RCwgMHg1ODU3LCAweDBDNDMsIDB4NTg1OCwgMHgwQzVFLCAweDU4NTksIDB4MEQ0RCwNCi0gICAgMHg1ODVBLCAweDBCRTksIDB4NTg1RSwgMHgwODM5LCAweDU4NUYsIDB4NEI2MSwgMHg1ODYxLCAweDFFNDcsDQotICAgIDB4NTg2MiwgMHgxMTlBLCAweDU4NjQsIDB4NDFCMywgMHg1ODY3LCAweDQ0MkMsIDB4NTg2OSwgMHgwNTE4LA0KLSAgICAweDU4NkIsIDB4MEMzMCwgMHg1ODZELCAweDRCNjIsIDB4NTg3MCwgMHgxMTlDLCAweDU4NzIsIDB4MTE5OCwNCi0gICAgMHg1ODc1LCAweDBBMTYsIDB4NTg3OSwgMHgxMUEwLCAweDU4N0MsIDB4Mzg2NCwgMHg1ODdFLCAweDA5NTgsDQotICAgIDB4NTg3RiwgMHg0QjYzLCAweDU4ODAsIDB4Mzg2NSwgMHg1ODgxLCAweDRCNjQsIDB4NTg4MywgMHgwNkE1LA0KLSAgICAweDU4ODUsIDB4MTFBMSwgMHg1ODg5LCAweDQxQjQsIDB4NTg4QSwgMHg0NDJELCAweDU4OEIsIDB4NDQyRSwNCi0gICAgMHg1ODhELCAweDQ0MkYsIDB4NTg4RiwgMHg0NDMwLCAweDU4OTAsIDB4NDQzMSwgMHg1ODkzLCAweDBFMzgsDQotICAgIDB4NTg5NCwgMHg0NDMyLCAweDU4OTcsIDB4MEFGRiwgMHg1ODk4LCAweDRCNjUsIDB4NTg5QywgMHgwQkUyLA0KLSAgICAweDU4OUQsIDB4NDQzMywgMHg1ODlFLCAweDIwRTcsIDB4NTg5RiwgMHgxMUEzLCAweDU4QTgsIDB4MEU3RCwNCi0gICAgMHg1OEE5LCAweDM4NjYsIDB4NThBQSwgMHg0NDM0LCAweDU4QUIsIDB4MTFBNCwgMHg1OEFFLCAweDExQTksDQotICAgIDB4NThCMSwgMHg0NDM1LCAweDU4QjIsIDB4MjBFOCwgMHg1OEIzLCAweDBERkYsIDB4NThCOCwgMHgxMUE4LA0KLSAgICAweDU4QjksIDB4MTFBMiwgMHg1OEJBLCAweDExQTUsIDB4NThCQiwgMHgxMUE3LCAweDU4QkMsIDB4NEI2NiwNCi0gICAgMHg1OEJFLCAweDA4MTYsIDB4NThDMSwgMHgwRTE5LCAweDU4QzMsIDB4NDQzNywgMHg1OEM1LCAweDExQUEsDQotICAgIDB4NThDNywgMHgwQjgzLCAweDU4Q0EsIDB4MDU3NSwgMHg1OENDLCAweDA5RDUsIDB4NThDRCwgMHg0NDM4LA0KLSAgICAweDU4Q0UsIDB4Mzg2NywgMHg1OEQwLCAweDM4NjgsIDB4NThEMSwgMHgxMUFDLCAweDU4RDIsIDB4NDFCNiwNCi0gICAgMHg1OEQzLCAweDExQUIsIDB4NThENCwgMHgzODY5LCAweDU4RDUsIDB4MDdGQSwgMHg1OEQ3LCAweDExQUQsDQotICAgIDB4NThEOCwgMHgxMUFGLCAweDU4RDksIDB4MTFBRSwgMHg1OERBLCAweDM4NkEsIDB4NThEQywgMHgxMUIxLA0KLSAgICAweDU4REUsIDB4MTFBNiwgMHg1OERGLCAweDExQjMsIDB4NThFMCwgMHg0MUI3LCAweDU4RTIsIDB4NDQzOSwNCi0gICAgMHg1OEU0LCAweDExQjIsIDB4NThFNSwgMHgxMUIwLCAweDU4RTksIDB4Mzg2QiwgMHg1OEVCLCAweDA4OUMsDQotICAgIDB4NThFQywgMHgwQTE3LCAweDU4RUUsIDB4MEFENiwgMHg1OEVGLCAweDExQjQsIDB4NThGMCwgMHgwQTYwLA0KLSAgICAweDU4RjEsIDB4MDRCMSwgMHg1OEYyLCAweDBEMUEsIDB4NThGMywgMHg0NDNBLCAweDU4RjQsIDB4NDQzQiwNCi0gICAgMHg1OEY3LCAweDBCRjcsIDB4NThGOSwgMHgxMUI2LCAweDU4RkEsIDB4MTFCNSwgMHg1OEZCLCAweDExQjcsDQotICAgIDB4NThGQywgMHgxMUI4LCAweDU4RkQsIDB4MTFCOSwgMHg1OTAyLCAweDExQkEsIDB4NTkwNSwgMHg0NDNDLA0KLSAgICAweDU5MDYsIDB4NDQzRCwgMHg1OTA5LCAweDBFMjEsIDB4NTkwQSwgMHgxMUJCLCAweDU5MEIsIDB4MjBFOSwNCi0gICAgMHg1OTBDLCAweDM4NkMsIDB4NTkwRCwgMHg0NDNFLCAweDU5MEYsIDB4MDU0NiwgMHg1OTEwLCAweDExQkMsDQotICAgIDB4NTkxNCwgMHg0NDNGLCAweDU5MTUsIDB4MEYyNiwgMHg1OTE2LCAweDA1OEUsIDB4NTkxOCwgMHgxMERFLA0KLSAgICAweDU5MTksIDB4MDk1MiwgMHg1OTFBLCAweDBCMUYsIDB4NTkxQiwgMHgxMUJELCAweDU5MUMsIDB4MEVGNywNCi0gICAgMHg1OTFGLCAweDRCNjcsIDB4NTkyMiwgMHgwRUMwLCAweDU5MjMsIDB4NEI2OCwgMHg1OTI0LCAweDM4NkQsDQotICAgIDB4NTkyNSwgMHgxMUJGLCAweDU5MjcsIDB4MEI0NywgMHg1OTI5LCAweDBDMzEsIDB4NTkyQSwgMHgwQjIwLA0KLSAgICAweDU5MkIsIDB4MERDOSwgMHg1OTJDLCAweDExQzAsIDB4NTkyRCwgMHgxMUMxLCAweDU5MkUsIDB4MDUxRCwNCi0gICAgMHg1OTJGLCAweDM4NkUsIDB4NTkzMSwgMHgwOEU2LCAweDU5MzIsIDB4MTFDMiwgMHg1OTM3LCAweDA0OTQsDQotICAgIDB4NTkzOCwgMHgxMUMzLCAweDU5MzksIDB4MzcyNSwgMHg1OTNELCAweDQ0NDIsIDB4NTkzRSwgMHgxMUM0LA0KLSAgICAweDU5NDQsIDB4MDUwNCwgMHg1OTQ2LCAweDQ0NDQsIDB4NTk0NywgMHgwNjJELCAweDU5NDgsIDB4MENCOCwNCi0gICAgMHg1OTQ5LCAweDBFNDQsIDB4NTk0RSwgMHgxMUM4LCAweDU5NEYsIDB4MEFENywgMHg1OTUwLCAweDExQzcsDQotICAgIDB4NTk1MSwgMHgwNzE2LCAweDU5NTMsIDB4MjBFQSwgMHg1OTU0LCAweDBFODksIDB4NTk1NSwgMHgxMUM2LA0KLSAgICAweDU5NTcsIDB4MEM1RiwgMHg1OTU4LCAweDExQ0EsIDB4NTk1OSwgMHg0QjY5LCAweDU5NUEsIDB4MTFDOSwNCi0gICAgMHg1OTVCLCAweDIwRUIsIDB4NTk1RCwgMHgyMEVDLCAweDU5NUYsIDB4NDQ0NywgMHg1OTYwLCAweDExQ0MsDQotICAgIDB4NTk2MSwgMHgzODZGLCAweDU5NjIsIDB4MTFDQiwgMHg1OTYzLCAweDIwRUQsIDB4NTk2NSwgMHgwNTFFLA0KLSAgICAweDU5NjcsIDB4MTFDRCwgMHg1OTY4LCAweDA5OTEsIDB4NTk2OSwgMHgxMUNGLCAweDU5NkEsIDB4MEI2MywNCi0gICAgMHg1OTZDLCAweDExQ0UsIDB4NTk2RCwgMHgzODcwLCAweDU5NkUsIDB4MEUwMywgMHg1OTczLCAweDA5ODEsDQotICAgIDB4NTk3NCwgMHgwQzU1LCAweDU5NzUsIDB4NDQ0OSwgMHg1OTc2LCAweDQ0NEEsIDB4NTk3OCwgMHgxMUQwLA0KLSAgICAweDU5NzksIDB4NEI2QSwgMHg1OTdDLCAweDQ0NEIsIDB4NTk3RCwgMHgwN0I3LCAweDU5ODEsIDB4MTFEMSwNCi0gICAgMHg1OTgyLCAweDBDRDcsIDB4NTk4MywgMHgwRDcyLCAweDU5ODQsIDB4MEVERCwgMHg1OThBLCAweDBDREIsDQotICAgIDB4NTk4QiwgMHg0MUI5LCAweDU5OEQsIDB4MTFEQSwgMHg1OTkyLCAweDQxQkEsIDB4NTk5MywgMHgwNjUyLA0KLSAgICAweDU5OTYsIDB4MEYyRiwgMHg1OTk3LCAweDRCNkIsIDB4NTk5OSwgMHgwRUJCLCAweDU5OUIsIDB4MTIzOSwNCi0gICAgMHg1OTlELCAweDExRDIsIDB4NTk5RiwgMHg0NDRDLCAweDU5QTMsIDB4MTFENSwgMHg1OUE0LCAweDIwRUUsDQotICAgIDB4NTlBNSwgMHgwQjI1LCAweDU5QTgsIDB4MEU2NiwgMHg1OUFDLCAweDBDNDQsIDB4NTlBRSwgMHg0NDRELA0KLSAgICAweDU5QUYsIDB4NEI2QywgMHg1OUIyLCAweDExRDYsIDB4NTlCMywgMHg0QjZELCAweDU5QjksIDB4MEU5MywNCi0gICAgMHg1OUJBLCAweDIwRUYsIDB4NTlCQiwgMHgwODNBLCAweDU5QkMsIDB4NDQ0RSwgMHg1OUJFLCAweDA5OTIsDQotICAgIDB4NTlDMywgMHg0MUJCLCAweDU5QzYsIDB4MTFENywgMHg1OUM4LCAweDQ0NEYsIDB4NTlDOSwgMHgwODlFLA0KLSAgICAweDU5Q0EsIDB4Mzg3MSwgMHg1OUNCLCAweDA4OUQsIDB4NTlDRCwgMHg0NDUwLCAweDU5RDAsIDB4MDQ3RCwNCi0gICAgMHg1OUQxLCAweDA3N0MsIDB4NTlEMiwgMHgzODcyLCAweDU5RDMsIDB4MEE0RiwgMHg1OUQ0LCAweDA0OTUsDQotICAgIDB4NTlEOSwgMHgxMURCLCAweDU5REEsIDB4MTFEQywgMHg1OURDLCAweDExRDksIDB4NTlERCwgMHgzODczLA0KLSAgICAweDU5REUsIDB4NDQ1MSwgMHg1OURGLCAweDRCNkUsIDB4NTlFMywgMHgzODc0LCAweDU5RTQsIDB4Mzg3NSwNCi0gICAgMHg1OUU1LCAweDA0REEsIDB4NTlFNiwgMHgwNUVCLCAweDU5RTcsIDB4NDQ1MiwgMHg1OUU4LCAweDExRDgsDQotICAgIDB4NTlFQSwgMHgwRUQxLCAweDU5RUIsIDB4MERBMywgMHg1OUVDLCAweDM2QUQsIDB4NTlFRSwgMHg0NDUzLA0KLSAgICAweDU5RjEsIDB4NEI2RiwgMHg1OUY2LCAweDA0NkMsIDB4NTlGOCwgMHg0QjcwLCAweDU5RkIsIDB4MDRCRCwNCi0gICAgMHg1OUZGLCAweDA4OUYsIDB4NUEwMSwgMHgwNDk2LCAweDVBMDMsIDB4MDQ2NywgMHg1QTA0LCAweDM4NzYsDQotICAgIDB4NUEwOSwgMHgxMUUxLCAweDVBMEMsIDB4Mzg3NywgMHg1QTBELCAweDQ0NTcsIDB4NUExMSwgMHgxMURGLA0KLSAgICAweDVBMTMsIDB4NDFCQywgMHg1QTE3LCAweDQ0NTgsIDB4NUExOCwgMHgwRUM4LCAweDVBMUEsIDB4MTFFMiwNCi0gICAgMHg1QTFCLCAweDM1QzEsIDB4NUExQywgMHgxMUUwLCAweDVBMUYsIDB4MTFERSwgMHg1QTIwLCAweDA5RjcsDQotICAgIDB4NUEyMywgMHgzODc4LCAweDVBMjUsIDB4MTFERCwgMHg1QTI3LCAweDQ0NTksIDB4NUEyOSwgMHgwRTJBLA0KLSAgICAweDVBMkQsIDB4NDQ1QSwgMHg1QTJGLCAweDA3OTgsIDB4NUEzNSwgMHgxMUU2LCAweDVBMzYsIDB4MTFFNywNCi0gICAgMHg1QTNDLCAweDA5OTMsIDB4NUE0MCwgMHgxMUUzLCAweDVBNDEsIDB4MEZEMiwgMHg1QTQ2LCAweDBEMDIsDQotICAgIDB4NUE0NywgMHgzODc5LCAweDVBNDksIDB4MTFFNSwgMHg1QTU1LCAweDM4N0EsIDB4NUE1QSwgMHgwODE3LA0KLSAgICAweDVBNjIsIDB4MTFFOCwgMHg1QTYzLCAweDM4N0IsIDB4NUE2NSwgMHg0NDVCLCAweDVBNjYsIDB4MERDQSwNCi0gICAgMHg1QTY3LCAweDQxQkQsIDB4NUE2QSwgMHgxMUU5LCAweDVBNkMsIDB4MTFFNCwgMHg1QTZELCAweDM4N0MsDQotICAgIDB4NUE3NywgMHg0MUJFLCAweDVBN0EsIDB4NDQ1QywgMHg1QTdFLCAweDM4N0QsIDB4NUE3RiwgMHgwRUM3LA0KLSAgICAweDVBODQsIDB4NDFCRiwgMHg1QThCLCAweDQ0NUQsIDB4NUE5MiwgMHgwRDE0LCAweDVBOUEsIDB4MTFFQSwNCi0gICAgMHg1QTlCLCAweDBEQTQsIDB4NUE5QywgMHg0NDVFLCAweDVBOUUsIDB4Mzg3RSwgMHg1QTlGLCAweDQ0NUYsDQotICAgIDB4NUFBMCwgMHg0NDYwLCAweDVBQTIsIDB4NDQ2MSwgMHg1QUE3LCAweDM4N0YsIDB4NUFBQywgMHgzODgwLA0KLSAgICAweDVBQjEsIDB4NDQ2MiwgMHg1QUIyLCAweDRCNzEsIDB4NUFCMywgMHgzODgxLCAweDVBQjUsIDB4NDQ2MywNCi0gICAgMHg1QUI4LCAweDRCNzIsIDB4NUFCQSwgMHg0NDY0LCAweDVBQkMsIDB4MTFFQiwgMHg1QUJELCAweDExRUYsDQotICAgIDB4NUFCRSwgMHgxMUVDLCAweDVBQkYsIDB4NDQ2NSwgMHg1QUMxLCAweDA1NDcsIDB4NUFDMiwgMHgxMUVFLA0KLSAgICAweDVBQzQsIDB4NDFDMCwgMHg1QUM5LCAweDA4RTcsIDB4NUFDQiwgMHgxMUVELCAweDVBQ0MsIDB4MDc0RiwNCi0gICAgMHg1QUQwLCAweDExRkIsIDB4NUFENiwgMHgxMUY0LCAweDVBRDcsIDB4MTFGMSwgMHg1QURBLCAweDQ0NjYsDQotICAgIDB4NUFEQywgMHg0NDY3LCAweDVBRTAsIDB4Mzg4MiwgMHg1QUUxLCAweDBCQTIsIDB4NUFFMywgMHgxMUYwLA0KLSAgICAweDVBRTUsIDB4NDQ2OCwgMHg1QUU2LCAweDExRjIsIDB4NUFFOSwgMHgxMUYzLCAweDVBRUEsIDB4NEI3MywNCi0gICAgMHg1QUVFLCAweDQ0NkEsIDB4NUFGMCwgMHg0NDY5LCAweDVBRjUsIDB4NDQ2QiwgMHg1QUY2LCAweDRCNzQsDQotICAgIDB4NUFGQSwgMHgxMUY1LCAweDVBRkIsIDB4MTFGNiwgMHg1QjAwLCAweDM4ODMsIDB4NUIwOCwgMHg0NDZDLA0KLSAgICAweDVCMDksIDB4MDYyRSwgMHg1QjBCLCAweDExRjgsIDB4NUIwQywgMHgxMUY3LCAweDVCMTYsIDB4MTFGOSwNCi0gICAgMHg1QjE3LCAweDQ0NkQsIDB4NUIxOSwgMHgzODg0LCAweDVCMUIsIDB4NEI3NSwgMHg1QjFELCAweDRCNzYsDQotICAgIDB4NUIyMSwgMHg0Qjc3LCAweDVCMjIsIDB4MDlENiwgMHg1QjI1LCAweDM4ODUsIDB4NUIyQSwgMHgxMUZDLA0KLSAgICAweDVCMkMsIDB4MEJGOCwgMHg1QjJELCAweDM4ODYsIDB4NUIzMCwgMHgwNEU3LCAweDVCMzIsIDB4MTFGQSwNCi0gICAgMHg1QjM0LCAweDQ0NkUsIDB4NUIzNiwgMHgxMUZELCAweDVCMzgsIDB4NEI3OCwgMHg1QjNFLCAweDExRkUsDQotICAgIDB4NUI0MCwgMHgxMjAxLCAweDVCNDEsIDB4Mzg4NywgMHg1QjQzLCAweDExRkYsIDB4NUI0NSwgMHgxMjAwLA0KLSAgICAweDVCNEMsIDB4NDQ2RiwgMHg1QjUwLCAweDA4QTAsIDB4NUI1MSwgMHgxMjAyLCAweDVCNTIsIDB4NDQ3MCwNCi0gICAgMHg1QjU0LCAweDA3QjgsIDB4NUI1NSwgMHgxMjAzLCAweDVCNTYsIDB4MjBGMCwgMHg1QjU3LCAweDA4QzgsDQotICAgIDB4NUI1OCwgMHgwQjE4LCAweDVCNUEsIDB4MTIwNCwgMHg1QjVCLCAweDEyMDUsIDB4NUI1QywgMHgwOEE4LA0KLSAgICAweDVCNUQsIDB4MDdCOSwgMHg1QjVGLCAweDBFREUsIDB4NUI2MywgMHgwNjQyLCAweDVCNjQsIDB4MDc3RCwNCi0gICAgMHg1QjY1LCAweDEyMDYsIDB4NUI2NiwgMHgwNUI2LCAweDVCNjgsIDB4NDQ3MSwgMHg1QjY5LCAweDEyMDcsDQotICAgIDB4NUI2QiwgMHgwQjE5LCAweDVCNkYsIDB4NDQ3MiwgMHg1QjcwLCAweDEyMDgsIDB4NUI3MSwgMHgxMjMwLA0KLSAgICAweDVCNzMsIDB4MTIwOSwgMHg1Qjc1LCAweDEyMEEsIDB4NUI3NiwgMHgzNzI4LCAweDVCNzgsIDB4MTIwQiwNCi0gICAgMHg1QjdBLCAweDEyMEQsIDB4NUI3QywgMHgzODg4LCAweDVCN0QsIDB4NDFDMiwgMHg1QjdFLCAweDM4ODksDQotICAgIDB4NUI3RiwgMHgzODhBLCAweDVCODAsIDB4MTIwRSwgMHg1QjgxLCAweDQ0NzMsIDB4NUI4MiwgMHgzNjEwLA0KLSAgICAweDVCODMsIDB4MTIwRiwgMHg1Qjg0LCAweDQ0NzQsIDB4NUI4NSwgMHgwQjUwLCAweDVCODcsIDB4MDRDOSwNCi0gICAgMHg1Qjg4LCAweDA5MTUsIDB4NUI4OSwgMHgwNDg2LCAweDVCOEEsIDB4Mzg4QiwgMHg1QjhCLCAweDBBRDksDQotICAgIDB4NUI4QywgMHgwNUVDLCAweDVCOEQsIDB4MDhFMSwgMHg1QjhGLCAweDA3QkEsIDB4NUI5MywgMHg0MUMzLA0KLSAgICAweDVCOTUsIDB4MEM2MCwgMHg1Qjk2LCAweDQ0NzYsIDB4NUI5NywgMHgwOTJCLCAweDVCOTgsIDB4MDVFRCwNCi0gICAgMHg1Qjk5LCAweDBCQTYsIDB4NUI5QSwgMHgwQzA2LCAweDVCOUIsIDB4MDQ3QywgMHg1QjlDLCAweDA2NTMsDQotICAgIDB4NUI5RCwgMHgwRTQ1LCAweDVCOUYsIDB4MDhFRSwgMHg1QkEyLCAweDA2NkMsIDB4NUJBMywgMHgwQThGLA0KLSAgICAweDVCQTQsIDB4MDhFOCwgMHg1QkE1LCAweDBGMTIsIDB4NUJBNiwgMHgxMjEwLCAweDVCQUMsIDB4NDQ3NywNCi0gICAgMHg1QkFFLCAweDA2NzYsIDB4NUJCMCwgMHgwODNCLCAweDVCQjMsIDB4MDU5MCwgMHg1QkI0LCAweDA1MDUsDQotICAgIDB4NUJCNSwgMHgwOTk0LCAweDVCQjYsIDB4MDU0OCwgMHg1QkI3LCAweDRCNzksIDB4NUJCOCwgMHgxMjExLA0KLSAgICAweDVCQjksIDB4MEYzMCwgMHg1QkJGLCAweDA5NTMsIDB4NUJDMCwgMHgyMEYxLCAweDVCQzIsIDB4MDkxMCwNCi0gICAgMHg1QkMzLCAweDEyMTIsIDB4NUJDNCwgMHgwNjJGLCAweDVCQzUsIDB4MENBQSwgMHg1QkM2LCAweDBFQjUsDQotICAgIDB4NUJDNywgMHgxMjEzLCAweDVCQzksIDB4MTIxNCwgMHg1QkNDLCAweDBEQ0IsIDB4NUJDRSwgMHg0NDdBLA0KLSAgICAweDVCRDAsIDB4MTIxNiwgMHg1QkQyLCAweDA1RTQsIDB4NUJEMywgMHgwNkVGLCAweDVCRDQsIDB4MTIxNSwNCi0gICAgMHg1QkQ2LCAweDQ0N0IsIDB4NUJENywgMHg0QjdBLCAweDVCRDgsIDB4MjBGMywgMHg1QkRCLCAweDA1RUUsDQotICAgIDB4NUJERCwgMHgwOUY4LCAweDVCREUsIDB4MTIxQSwgMHg1QkRGLCAweDA4NkYsIDB4NUJFMCwgMHg0QjdCLA0KLSAgICAweDVCRTEsIDB4MDU0OSwgMHg1QkUyLCAweDEyMTksIDB4NUJFNCwgMHgxMjE3LCAweDVCRTUsIDB4MTIxQiwNCi0gICAgMHg1QkU2LCAweDEyMTgsIDB4NUJFNywgMHgwQ0UxLCAweDVCRTgsIDB4MTQ4RSwgMHg1QkU5LCAweDA5RjksDQotICAgIDB4NUJFQiwgMHgxMjFDLCAweDVCRUMsIDB4NEY0RSwgMHg1QkVFLCAweDBGODgsIDB4NUJGMCwgMHgxMjFELA0KLSAgICAweDVCRjEsIDB4NDQ3RSwgMHg1QkYzLCAweDEyMUYsIDB4NUJGNSwgMHgwQkJDLCAweDVCRjYsIDB4MTIxRSwNCi0gICAgMHg1QkY4LCAweDBBNDcsIDB4NUJGQSwgMHgwOEM5LCAweDVCRkQsIDB4NDQ3RiwgMHg1QkZFLCAweDBCMzAsDQotICAgIDB4NUJGRiwgMHgwOTIzLCAweDVDMDEsIDB4MERFNywgMHg1QzAyLCAweDBBOTAsIDB4NUMwMywgMHg0NDgxLA0KLSAgICAweDVDMDQsIDB4MDhGOSwgMHg1QzA1LCAweDEyMjAsIDB4NUMwNiwgMHgwOTk1LCAweDVDMDcsIDB4MTIyMSwNCi0gICAgMHg1QzA4LCAweDEyMjIsIDB4NUMwOSwgMHgwNDk3LCAweDVDMEEsIDB4MEIxQSwgMHg1QzBCLCAweDBBMTgsDQotICAgIDB4NUMwRCwgMHgxMjIzLCAweDVDMEUsIDB4MEM4QiwgMHg1QzBGLCAweDA5OTYsIDB4NUMxMSwgMHgwOTk3LA0KLSAgICAweDVDMTIsIDB4NDFDNCwgMHg1QzEzLCAweDEyMjQsIDB4NUMxNCwgMHgzNzJBLCAweDVDMTYsIDB4MEE5MSwNCi0gICAgMHg1QzE5LCAweDM2MEIsIDB4NUMxQSwgMHgwOTk4LCAweDVDMUUsIDB4MjBGNSwgMHg1QzFGLCAweDRCN0MsDQotICAgIDB4NUMyMCwgMHgxMjI1LCAweDVDMjIsIDB4MTIyNiwgMHg1QzIzLCAweDM4OEMsIDB4NUMyNCwgMHgwRUVDLA0KLSAgICAweDVDMjgsIDB4MTIyNywgMHg1QzI5LCAweDQ0ODIsIDB4NUMyQSwgMHg0QjdELCAweDVDMkIsIDB4Mzg4RCwNCi0gICAgMHg1QzJDLCAweDRCN0UsIDB4NUMyRCwgMHgwNkJFLCAweDVDMzAsIDB4Mzg4RSwgMHg1QzMxLCAweDA5MkMsDQotICAgIDB4NUMzNiwgMHg0QjdGLCAweDVDMzgsIDB4MTIyOCwgMHg1QzM5LCAweDEyMjksIDB4NUMzQSwgMHgwOTA4LA0KLSAgICAweDVDM0IsIDB4MDlGMiwgMHg1QzNDLCAweDBDQ0MsIDB4NUMzRCwgMHgwQTFBLCAweDVDM0UsIDB4MEQ4QywNCi0gICAgMHg1QzNGLCAweDBDRDgsIDB4NUM0MCwgMHgwNkMxLCAweDVDNDEsIDB4MTIyQSwgMHg1QzQ1LCAweDA2ODksDQotICAgIDB4NUM0NiwgMHgxMjJCLCAweDVDNDgsIDB4MDZGNiwgMHg1QzRBLCAweDBDQTcsIDB4NUM0QiwgMHgwNTMwLA0KLSAgICAweDVDNEQsIDB4MDhBMSwgMHg1QzRFLCAweDEyMkMsIDB4NUM0RiwgMHgxMjJGLCAweDVDNTAsIDB4MTIyRSwNCi0gICAgMHg1QzUxLCAweDA2RjUsIDB4NUM1MywgMHgxMjJELCAweDVDNTUsIDB4MEMzMiwgMHg1QzU5LCAweDRCODAsDQotICAgIDB4NUM1QiwgMHgxRTkyLCAweDVDNUMsIDB4NEI4MSwgMHg1QzVFLCAweDBCMTAsIDB4NUM1RiwgMHg0NDg0LA0KLSAgICAweDVDNjAsIDB4MEM0NSwgMHg1QzYxLCAweDA4RjQsIDB4NUM2MiwgMHgxRTBELCAweDVDNjMsIDB4Mzg4RiwNCi0gICAgMHg1QzY0LCAweDBBREEsIDB4NUM2NSwgMHgwRjY0LCAweDVDNjcsIDB4NDQ4NSwgMHg1QzY4LCAweDQ0ODYsDQotICAgIDB4NUM2OSwgMHgzODkwLCAweDVDNkMsIDB4MTIzMSwgMHg1QzZELCAweDRCODIsIDB4NUM2RSwgMHgxMjMyLA0KLSAgICAweDVDNkYsIDB4MENBRSwgMHg1QzcwLCAweDQ0ODcsIDB4NUM3MSwgMHgwODgxLCAweDVDNzYsIDB4MTIzNCwNCi0gICAgMHg1Qzc5LCAweDEyMzUsIDB4NUM3QSwgMHg0MUM3LCAweDVDN0MsIDB4Mzg5MSwgMHg1Qzg4LCAweDQ0OEMsDQotICAgIDB4NUM4QSwgMHg0NDhELCAweDVDOEMsIDB4MTIzNiwgMHg1QzhGLCAweDQxQzgsIDB4NUM5MCwgMHgwNjMwLA0KLSAgICAweDVDOTEsIDB4MTIzNywgMHg1Qzk0LCAweDEyMzgsIDB4NUM5RiwgMHg0MUM5LCAweDVDQTAsIDB4NDQ5MSwNCi0gICAgMHg1Q0ExLCAweDA1MkMsIDB4NUNBMiwgMHg0NDkyLCAweDVDQTMsIDB4NDFDQSwgMHg1Q0E2LCAweDIwRjYsDQotICAgIDB4NUNBNywgMHg0NDkzLCAweDVDQTgsIDB4MEFCRCwgMHg1Q0E5LCAweDA2MjAsIDB4NUNBQSwgMHg0MUNCLA0KLSAgICAweDVDQUIsIDB4MTIzQSwgMHg1Q0FDLCAweDBFQjQsIDB4NUNBRCwgMHg0NDk1LCAweDVDQjEsIDB4MEIzMiwNCi0gICAgMHg1Q0IzLCAweDA1QjcsIDB4NUNCNSwgMHg0NDk2LCAweDVDQjYsIDB4MTIzQywgMHg1Q0I3LCAweDEyM0UsDQotICAgIDB4NUNCOCwgMHgwNjFCLCAweDVDQkEsIDB4MjBGNywgMHg1Q0JCLCAweDEyM0IsIDB4NUNCQywgMHgxMjNELA0KLSAgICAweDVDQkUsIDB4MTI0MCwgMHg1Q0M1LCAweDEyM0YsIDB4NUNDNywgMHgxMjQxLCAweDVDQzksIDB4NDQ5OCwNCi0gICAgMHg1Q0NCLCAweDM4OTIsIDB4NUNEMCwgMHg0MUNDLCAweDVDRDIsIDB4Mzg5MywgMHg1Q0Q5LCAweDEyNDIsDQotICAgIDB4NUNERCwgMHg0QjgzLCAweDVDRTAsIDB4MEM5NSwgMHg1Q0UxLCAweDA2QTYsIDB4NUNFNiwgMHgzNzJDLA0KLSAgICAweDVDRTgsIDB4MDU2NSwgMHg1Q0U5LCAweDEyNDMsIDB4NUNFQSwgMHgxMjQ4LCAweDVDRUQsIDB4MTI0NiwNCi0gICAgMHg1Q0VGLCAweDBFNDcsIDB4NUNGMCwgMHgwRTQ2LCAweDVDRjQsIDB4Mzg5NCwgMHg1Q0Y1LCAweDIwRjgsDQotICAgIDB4NUNGNiwgMHgwQzYxLCAweDVDRkEsIDB4MTI0NSwgMHg1Q0ZCLCAweDA5NUUsIDB4NUNGRCwgMHgxMjQ0LA0KLSAgICAweDVEMDEsIDB4NEI4NCwgMHg1RDA2LCAweDQ0OUIsIDB4NUQwNywgMHgwQTM4LCAweDVEMEIsIDB4MTI0OSwNCi0gICAgMHg1RDBELCAweDQxQ0UsIDB4NUQwRSwgMHgwODVBLCAweDVEMTAsIDB4NDQ5QywgMHg1RDExLCAweDEyNEYsDQotICAgIDB4NUQxNCwgMHgxMjUwLCAweDVEMTUsIDB4MTI0QSwgMHg1RDE2LCAweDA1OTEsIDB4NUQxNywgMHgxMjRCLA0KLSAgICAweDVEMTgsIDB4MTI1NCwgMHg1RDE5LCAweDEyNTMsIDB4NUQxQSwgMHgxMjUyLCAweDVEMUIsIDB4MTI0RSwNCi0gICAgMHg1RDFELCAweDQ0OUUsIDB4NUQxRiwgMHgxMjRELCAweDVEMjAsIDB4NDQ5RiwgMHg1RDIyLCAweDEyNTEsDQotICAgIDB4NUQyNCwgMHgzODk1LCAweDVEMjYsIDB4Mzg5NiwgMHg1RDI3LCAweDIwRjksIDB4NUQyOSwgMHgwRTQ4LA0KLSAgICAweDVEMkIsIDB4NDQ5RCwgMHg1RDMxLCAweDQ0QTAsIDB4NUQzNCwgMHg0Qjg1LCAweDVEMzksIDB4NDRBMSwNCi0gICAgMHg1RDNELCAweDRCODYsIDB4NUQ0MiwgMHgyMEZDLCAweDVENDMsIDB4Mzg5NywgMHg1RDQ2LCAweDM4OTgsDQotICAgIDB4NUQ0NywgMHg0MUNGLCAweDVENEEsIDB4Mzg5OSwgMHg1RDRCLCAweDEyNTgsIDB4NUQ0QywgMHgxMjU1LA0KLSAgICAweDVENEUsIDB4MTI1NywgMHg1RDUwLCAweDBGNUMsIDB4NUQ1MiwgMHgxMjU2LCAweDVENTMsIDB4MjBGQSwNCi0gICAgMHg1RDU5LCAweDRCODcsIDB4NUQ1QywgMHgxMjRDLCAweDVENjEsIDB4NDRBMywgMHg1RDY5LCAweDBBMzksDQotICAgIDB4NUQ2QSwgMHg0NEE0LCAweDVENkMsIDB4MTI1OSwgMHg1RDZELCAweDIwRkQsIDB4NUQ2RiwgMHgwODI3LA0KLSAgICAweDVENzAsIDB4NDRBNiwgMHg1RDczLCAweDEyNUEsIDB4NUQ3NiwgMHgxMjVCLCAweDVEN0UsIDB4NEI4OCwNCi0gICAgMHg1RDgxLCAweDQxRDAsIDB4NUQ4MiwgMHgxMjVFLCAweDVEODMsIDB4NEI4OSwgMHg1RDg0LCAweDEyNUQsDQotICAgIDB4NUQ4NywgMHgxMjVDLCAweDVEODgsIDB4NDRBOSwgMHg1RDhCLCAweDBDNjIsIDB4NUQ4QywgMHgxMjQ3LA0KLSAgICAweDVEOTAsIDB4MTI2NCwgMHg1RDkyLCAweDM4OUEsIDB4NUQ5NCwgMHgzODlCLCAweDVEOTcsIDB4NDRBQiwNCi0gICAgMHg1RDk5LCAweDM4OUMsIDB4NUQ5RCwgMHgxMjYwLCAweDVEQTAsIDB4Mzg5RCwgMHg1REEyLCAweDEyNUYsDQotICAgIDB4NURBNCwgMHg0MUQxLCAweDVEQTcsIDB4NDFEMiwgMHg1REFDLCAweDEyNjEsIDB4NURBRSwgMHgxMjYyLA0KLSAgICAweDVEQjAsIDB4NDRBQywgMHg1REIyLCAweDNDMkQsIDB4NURCNCwgMHg0NEFELCAweDVEQjcsIDB4MTI2NSwNCi0gICAgMHg1REI4LCAweDIwRkUsIDB4NURCOSwgMHgyMEZGLCAweDVEQkEsIDB4MEZBRSwgMHg1REJDLCAweDEyNjYsDQotICAgIDB4NURCRCwgMHgxMjYzLCAweDVEQzcsIDB4NEI4QSwgMHg1REM5LCAweDEyNjcsIDB4NURDQiwgMHg0MUQzLA0KLSAgICAweDVEQ0MsIDB4MDYxQywgMHg1RENELCAweDEyNjgsIDB4NUREMCwgMHgyMTAwLCAweDVERDEsIDB4NDRBRiwNCi0gICAgMHg1REQyLCAweDEyNkEsIDB4NUREMywgMHgxMjY5LCAweDVERDYsIDB4MTI2QiwgMHg1REQ3LCAweDQ0QjAsDQotICAgIDB4NUREOCwgMHgzODlFLCAweDVEREIsIDB4MTI2QywgMHg1RERELCAweDBBOTIsIDB4NURERSwgMHgwOTJELA0KLSAgICAweDVERTAsIDB4Mzg5RiwgMHg1REUxLCAweDA5NkUsIDB4NURFMiwgMHgzNDMyLCAweDVERTMsIDB4MEFFNSwNCi0gICAgMHg1REU0LCAweDQ0QjIsIDB4NURFNSwgMHgwN0JCLCAweDVERTYsIDB4MDgyOCwgMHg1REU3LCAweDA3QkMsDQotICAgIDB4NURFOCwgMHgwNjhBLCAweDVERTksIDB4NDRCMywgMHg1REVCLCAweDEyNkQsIDB4NURFRSwgMHgwODI5LA0KLSAgICAweDVERjEsIDB4MDc3RSwgMHg1REYyLCAweDEyNkUsIDB4NURGMywgMHgwRUIyLCAweDVERjQsIDB4MENGOSwNCi0gICAgMHg1REY1LCAweDEyNkYsIDB4NURGNywgMHgwN0JELCAweDVERjgsIDB4MzhBMCwgMHg1REY5LCAweDRCOEIsDQotICAgIDB4NURGQiwgMHgwNUU4LCAweDVERkQsIDB4MEI2NSwgMHg1REZFLCAweDA2Q0EsIDB4NURGRiwgMHgzNUUyLA0KLSAgICAweDVFMDAsIDB4MzhBMSwgMHg1RTAyLCAweDA4QTIsIDB4NUUwMywgMHgwRENELCAweDVFMDYsIDB4MEQ1NSwNCi0gICAgMHg1RTBCLCAweDEyNzAsIDB4NUUwQywgMHgwNjMxLCAweDVFMTEsIDB4MTI3MywgMHg1RTEyLCAweDM4QTIsDQotICAgIDB4NUUxNCwgMHgzOEEzLCAweDVFMTUsIDB4MzhBNCwgMHg1RTE2LCAweDBCQkQsIDB4NUUxOCwgMHgzOEE1LA0KLSAgICAweDVFMTksIDB4MTI3MiwgMHg1RTFBLCAweDEyNzEsIDB4NUUxQiwgMHgxMjc0LCAweDVFMUQsIDB4MEMwNywNCi0gICAgMHg1RTFGLCAweDQ0QjcsIDB4NUUyNSwgMHgwQTI5LCAweDVFMjgsIDB4NEI4QywgMHg1RTJCLCAweDA4QTMsDQotICAgIDB4NUUyRCwgMHgwQTZFLCAweDVFMkUsIDB4MzhBNiwgMHg1RTJGLCAweDBCMzMsIDB4NUUzMCwgMHgwNjNDLA0KLSAgICAweDVFMzIsIDB4NEI4RCwgMHg1RTMzLCAweDBCQkUsIDB4NUUzNSwgMHg0QjhFLCAweDVFMzYsIDB4MTI3NSwNCi0gICAgMHg1RTM3LCAweDEyNzYsIDB4NUUzOCwgMHgwOUQ3LCAweDVFM0QsIDB4MEU2NywgMHg1RTNFLCAweDQ0QjgsDQotICAgIDB4NUU0MCwgMHgxMjc5LCAweDVFNDMsIDB4MTI3OCwgMHg1RTQ0LCAweDEyNzcsIDB4NUU0NSwgMHgwREVGLA0KLSAgICAweDVFNDcsIDB4MTI4MCwgMHg1RTQ5LCAweDQ0QjksIDB4NUU0QywgMHgwRTg4LCAweDVFNEUsIDB4MTI3QSwNCi0gICAgMHg1RTU0LCAweDEyN0MsIDB4NUU1NSwgMHgwRTk5LCAweDVFNTYsIDB4NDRCQiwgMHg1RTU3LCAweDEyN0IsDQotICAgIDB4NUU1OCwgMHgzOEE3LCAweDVFNUIsIDB4NEI4RiwgMHg1RTVFLCAweDQxRDQsIDB4NUU1RiwgMHgxMjdELA0KLSAgICAweDVFNjEsIDB4MEQzQywgMHg1RTYyLCAweDEyN0UsIDB4NUU2MywgMHgwRTBFLCAweDVFNjQsIDB4MTI3RiwNCi0gICAgMHg1RTY4LCAweDRCOTAsIDB4NUU2QSwgMHg0QjkxLCAweDVFNkIsIDB4MzhBOCwgMHg1RTZDLCAweDM4QTksDQotICAgIDB4NUU2RCwgMHg0NEJELCAweDVFNkUsIDB4NDRCRSwgMHg1RTcyLCAweDA1RUYsIDB4NUU3MywgMHgwRTBGLA0KLSAgICAweDVFNzQsIDB4MENFNSwgMHg1RTc1LCAweDEyODEsIDB4NUU3NiwgMHgxMjgyLCAweDVFNzcsIDB4NEI5MiwNCi0gICAgMHg1RTc4LCAweDA3QkUsIDB4NUU3OSwgMHgwNUYwLCAweDVFN0EsIDB4MTI4MywgMHg1RTdCLCAweDA3NkMsDQotICAgIDB4NUU3QywgMHgwRjJFLCAweDVFN0QsIDB4MEYxMywgMHg1RTdFLCAweDA2MzIsIDB4NUU3RiwgMHgxMjg1LA0KLSAgICAweDVFODAsIDB4NEI5MywgMHg1RTgxLCAweDBCQkYsIDB4NUU4MywgMHgwN0JGLCAweDVFODQsIDB4MDk5OSwNCi0gICAgMHg1RTg3LCAweDBENzMsIDB4NUU4QSwgMHgwOTlBLCAweDVFOEIsIDB4NEI5NCwgMHg1RThGLCAweDA5ODIsDQotICAgIDB4NUU5NSwgMHgwQzA4LCAweDVFOTYsIDB4MEU0OSwgMHg1RTk3LCAweDBDMzMsIDB4NUU5OSwgMHgzNkIwLA0KLSAgICAweDVFOUEsIDB4MDdDMCwgMHg1RTlDLCAweDBEQ0UsIDB4NUVBMCwgMHgxMjg2LCAweDVFQTUsIDB4NDRDMCwNCi0gICAgMHg1RUE2LCAweDBDNTMsIDB4NUVBNywgMHgwODMyLCAweDVFQTgsIDB4MzhBQSwgMHg1RUFBLCAweDM4QUIsDQotICAgIDB4NUVBQiwgMHgwNzdGLCAweDVFQUMsIDB4NDRDMSwgMHg1RUFELCAweDBDMDksIDB4NUVCMywgMHg0Qjk1LA0KLSAgICAweDVFQjUsIDB4MDQ4NywgMHg1RUI2LCAweDA5NzgsIDB4NUVCNywgMHgwN0MxLCAweDVFQjgsIDB4MEYzMSwNCi0gICAgMHg1RUI5LCAweDQ0QzIsIDB4NUVCRCwgMHg0Qjk2LCAweDVFQkUsIDB4MzhBQywgMHg1RUJGLCAweDM4QUQsDQotICAgIDB4NUVDMSwgMHgxMjg3LCAweDVFQzIsIDB4MTI4OCwgMHg1RUMzLCAweDBEMDcsIDB4NUVDNiwgMHg0NEMzLA0KLSAgICAweDVFQzgsIDB4MTI4OSwgMHg1RUM5LCAweDBGQkYsIDB4NUVDQSwgMHgwRkQzLCAweDVFQ0IsIDB4M0MxRSwNCi0gICAgMHg1RUNGLCAweDEyOEIsIDB4NUVEMCwgMHgxMjhBLCAweDVFRDEsIDB4NEI5NywgMHg1RUQyLCAweDM4QUYsDQotICAgIDB4NUVEMywgMHgwNUE1LCAweDVFRDQsIDB4NEI5OCwgMHg1RUQ1LCAweDRCOTksIDB4NUVENiwgMHgxMjhDLA0KLSAgICAweDVFRDksIDB4NDRDNCwgMHg1RURBLCAweDEyOEYsIDB4NUVEQiwgMHgxMjkwLCAweDVFREQsIDB4MTI4RSwNCi0gICAgMHg1RURGLCAweDBEQjIsIDB4NUVFMCwgMHgwOTlCLCAweDVFRTEsIDB4MTI5MiwgMHg1RUUyLCAweDEyOTEsDQotICAgIDB4NUVFMywgMHgxMjhELCAweDVFRTgsIDB4MTI5MywgMHg1RUU5LCAweDEyOTQsIDB4NUVFQywgMHgxMjk1LA0KLSAgICAweDVFRjAsIDB4MTI5OCwgMHg1RUYxLCAweDEyOTYsIDB4NUVGMywgMHgxMjk3LCAweDVFRjQsIDB4MTI5OSwNCi0gICAgMHg1RUY2LCAweDA1MDYsIDB4NUVGNywgMHgwQzBBLCAweDVFRjgsIDB4MTI5QSwgMHg1RUY5LCAweDQxRDUsDQotICAgIDB4NUVGQSwgMHgwNzUwLCAweDVFRkIsIDB4MDU3NiwgMHg1RUZDLCAweDBDRUMsIDB4NUVGRCwgMHg0NEM2LA0KLSAgICAweDVFRkUsIDB4MTI5QiwgMHg1RUZGLCAweDBDRDMsIDB4NUYwMCwgMHg0MUQ2LCAweDVGMDEsIDB4MEUyQiwNCi0gICAgMHg1RjAyLCAweDQxRDcsIDB4NUYwMywgMHgxMjlDLCAweDVGMDQsIDB4MEZENCwgMHg1RjA3LCAweDM4QjAsDQotICAgIDB4NUYwOCwgMHg0NEM3LCAweDVGMDksIDB4MTI5RCwgMHg1RjBBLCAweDBFMTAsIDB4NUYwQiwgMHgxMkEwLA0KLSAgICAweDVGMEMsIDB4MEZGQSwgMHg1RjBELCAweDEwMEEsIDB4NUYwRSwgMHgzOEIxLCAweDVGMEYsIDB4MDhEQywNCi0gICAgMHg1RjEwLCAweDBDQ0QsIDB4NUYxMSwgMHgxMkExLCAweDVGMTMsIDB4MDY3NywgMHg1RjE0LCAweDBCQzAsDQotICAgIDB4NUYxNSwgMHgwNEJFLCAweDVGMTYsIDB4MTJBMiwgMHg1RjE3LCAweDBERjYsIDB4NUYxOCwgMHgwN0MyLA0KLSAgICAweDVGMUIsIDB4MEI4RSwgMHg1RjFDLCAweDM4QjIsIDB4NUYxRCwgMHgzOEIzLCAweDVGMUUsIDB4NDRDOSwNCi0gICAgMHg1RjFGLCAweDBDMEIsIDB4NUYyMSwgMHgyMTAxLCAweDVGMjIsIDB4MzhCNCwgMHg1RjIzLCAweDQxRDgsDQotICAgIDB4NUYyNSwgMHgwRUZCLCAweDVGMjYsIDB4MDc2RCwgMHg1RjI3LCAweDA3ODAsIDB4NUYyOCwgMHgzOEI1LA0KLSAgICAweDVGMjksIDB4MTJBMywgMHg1RjJELCAweDEyQTQsIDB4NUYyRiwgMHgxMkFBLCAweDVGMzEsIDB4MDkxMSwNCi0gICAgMHg1RjM0LCAweDIxMDIsIDB4NUYzNSwgMHgwQkMxLCAweDVGMzYsIDB4MzhCNiwgMHg1RjM3LCAweDA2QTcsDQotICAgIDB4NUYzOCwgMHgxMkE1LCAweDVGM0EsIDB4MzU5OCwgMHg1RjNCLCAweDM4QjcsIDB4NUYzQywgMHgwRDlELA0KLSAgICAweDVGM0QsIDB4NDFEOSwgMHg1RjNFLCAweDBCODQsIDB4NUY0MCwgMHgzOEI4LCAweDVGNDEsIDB4MTJBNiwNCi0gICAgMHg1RjQ1LCAweDIwQjIsIDB4NUY0NywgMHg0NENBLCAweDVGNDgsIDB4MTJBNywgMHg1RjRBLCAweDA2QTgsDQotICAgIDB4NUY0QywgMHgxMkE4LCAweDVGNEQsIDB4NEI5QSwgMHg1RjRFLCAweDEyQTksIDB4NUY1MCwgMHgzOEI5LA0KLSAgICAweDVGNTEsIDB4MTJBQiwgMHg1RjUzLCAweDBDNzAsIDB4NUY1NCwgMHg0MURBLCAweDVGNTYsIDB4MTJBQywNCi0gICAgMHg1RjU3LCAweDEyQUQsIDB4NUY1OCwgMHgzOEJBLCAweDVGNTksIDB4MTJBRSwgMHg1RjVDLCAweDEyOUYsDQotICAgIDB4NUY1RCwgMHgxMjlFLCAweDVGNjEsIDB4MTJBRiwgMHg1RjYyLCAweDA3MTcsIDB4NUY2MywgMHg0NENCLA0KLSAgICAweDVGNjQsIDB4MzhCQiwgMHg1RjY1LCAweDM2QUMsIDB4NUY2NiwgMHgwRDk5LCAweDVGNjcsIDB4MjEwMywNCi0gICAgMHg1RjY5LCAweDA4M0MsIDB4NUY2QSwgMHgwREE5LCAweDVGNkIsIDB4MEJDMiwgMHg1RjZDLCAweDBEQkQsDQotICAgIDB4NUY2RCwgMHgxMkIwLCAweDVGNzAsIDB4MDk5QywgMHg1RjcxLCAweDA0RTgsIDB4NUY3MiwgMHg0NENDLA0KLSAgICAweDVGNzMsIDB4MTJCMSwgMHg1Rjc3LCAweDEyQjIsIDB4NUY3OSwgMHgwRUZFLCAweDVGN0MsIDB4MEQ3NCwNCi0gICAgMHg1RjdELCAweDQxREIsIDB4NUY3RSwgMHg0NENELCAweDVGN0YsIDB4MTJCNSwgMHg1RjgwLCAweDA1MUYsDQotICAgIDB4NUY4MSwgMHgwQTUwLCAweDVGODIsIDB4MTJCNCwgMHg1RjgzLCAweDEyQjMsIDB4NUY4NCwgMHgwNzE4LA0KLSAgICAweDVGODUsIDB4MEIzNCwgMHg1Rjg3LCAweDEyQjksIDB4NUY4OCwgMHgxMkI3LCAweDVGODksIDB4MzhCQywNCi0gICAgMHg1RjhBLCAweDEyQjYsIDB4NUY4QiwgMHgwRjZGLCAweDVGOEMsIDB4MDc5OSwgMHg1RjhGLCAweDQ0Q0UsDQotICAgIDB4NUY5MCwgMHgwOTgzLCAweDVGOTEsIDB4MTJCOCwgMHg1RjkyLCAweDBDNDYsIDB4NUY5MywgMHgwOTQ4LA0KLSAgICAweDVGOTcsIDB4MEM5OCwgMHg1Rjk4LCAweDEyQkMsIDB4NUY5OSwgMHgxMkJCLCAweDVGOUMsIDB4MzhCRCwNCi0gICAgMHg1RjlFLCAweDEyQkEsIDB4NUZBMCwgMHgxMkJELCAweDVGQTEsIDB4MDc5QSwgMHg1RkEyLCAweDQ0Q0YsDQotICAgIDB4NUZBNCwgMHgzOEJGLCAweDVGQTcsIDB4MzhCRSwgMHg1RkE4LCAweDEyQkUsIDB4NUZBOSwgMHgwREVFLA0KLSAgICAweDVGQUEsIDB4MDk2NSwgMHg1RkFDLCAweDRCOUIsIDB4NUZBRCwgMHgxMkJGLCAweDVGQUUsIDB4MEQ4RCwNCi0gICAgMHg1RkFGLCAweDM4QzAsIDB4NUZCMywgMHgwQzk5LCAweDVGQjQsIDB4MEJDMywgMHg1RkI1LCAweDM0MzgsDQotICAgIDB4NUZCNywgMHgyMTA0LCAweDVGQjgsIDB4MzhDMSwgMHg1RkI5LCAweDBDMkEsIDB4NUZCQywgMHgxMkMwLA0KLSAgICAweDVGQkQsIDB4MDY0NSwgMHg1RkMzLCAweDA5RkEsIDB4NUZDNCwgMHgzOEMyLCAweDVGQzUsIDB4MEQ5RSwNCi0gICAgMHg1RkM3LCAweDQ0RDAsIDB4NUZDOSwgMHgzOEMzLCAweDVGQ0IsIDB4NDREMSwgMHg1RkNDLCAweDA2MzMsDQotICAgIDB4NUZDRCwgMHgwQ0RDLCAweDVGRDIsIDB4NDREMiwgMHg1RkQzLCAweDQ0RDMsIDB4NUZENCwgMHg0NEQ0LA0KLSAgICAweDVGRDYsIDB4MTJDMSwgMHg1RkQ3LCAweDA4QTQsIDB4NUZEOCwgMHgwRTY4LCAweDVGRDksIDB4MEU2OSwNCi0gICAgMHg1RkRDLCAweDA1MjAsIDB4NUZERCwgMHgxMkM2LCAweDVGREUsIDB4MjEwNSwgMHg1RkUwLCAweDBCQTcsDQotICAgIDB4NUZFMSwgMHgzOEM0LCAweDVGRTIsIDB4NDRENSwgMHg1RkU0LCAweDEyQzMsIDB4NUZFOSwgMHgzOEM1LA0KLSAgICAweDVGRUEsIDB4NEI5QywgMHg1RkVCLCAweDA1NzcsIDB4NUZFRCwgMHgzOEM2LCAweDVGRUUsIDB4NDRENiwNCi0gICAgMHg1RkVGLCAweDQ0RDcsIDB4NUZGMCwgMHgxMkY2LCAweDVGRjEsIDB4MTJDNSwgMHg1RkYzLCAweDQ0RDgsDQotICAgIDB4NUZGNSwgMHgwQ0U2LCAweDVGRjgsIDB4MTJDNCwgMHg1RkZCLCAweDEyQzIsIDB4NUZGQywgMHgzOEM3LA0KLSAgICAweDVGRkQsIDB4MDgwQywgMHg1RkZGLCAweDEyQzgsIDB4NjAwNywgMHg0QjlELCAweDYwMEQsIDB4NDFEQywNCi0gICAgMHg2MDBFLCAweDEyQ0UsIDB4NjAwRiwgMHgxMkQ0LCAweDYwMTAsIDB4MTJDQywgMHg2MDEyLCAweDBDNTYsDQotICAgIDB4NjAxNCwgMHg0MURELCAweDYwMTUsIDB4MTJEMSwgMHg2MDE2LCAweDBEQ0YsIDB4NjAxNywgMHgzOEM4LA0KLSAgICAweDYwMTgsIDB4NDFERSwgMHg2MDE5LCAweDEyQ0IsIDB4NjAxQSwgMHgzOEM5LCAweDYwMUIsIDB4MTJEMCwNCi0gICAgMHg2MDFDLCAweDBGQUYsIDB4NjAxRCwgMHgwOEE1LCAweDYwMjAsIDB4MEIzNSwgMHg2MDIxLCAweDEyQzksDQotICAgIDB4NjAyMiwgMHg0NERBLCAweDYwMjQsIDB4NDREQiwgMHg2MDI1LCAweDA2NzgsIDB4NjAyNiwgMHgxMkQzLA0KLSAgICAweDYwMjcsIDB4MEE1MSwgMHg2MDI4LCAweDA1MDcsIDB4NjAyOSwgMHgxMkNELCAweDYwMkEsIDB4MDU3OCwNCi0gICAgMHg2MDJCLCAweDEyRDIsIDB4NjAyRiwgMHgwNkE5LCAweDYwMzEsIDB4MTJDRiwgMHg2MDMzLCAweDM4Q0EsDQotICAgIDB4NjAzNSwgMHg0MURGLCAweDYwM0EsIDB4MTJENSwgMHg2MDQxLCAweDEyRDcsIDB4NjA0MiwgMHgxMkUxLA0KLSAgICAweDYwNDMsIDB4MTJERiwgMHg2MDQ2LCAweDEyREMsIDB4NjA0NywgMHg0MUUwLCAweDYwNDksIDB4NEI5RSwNCi0gICAgMHg2MDRBLCAweDEyREIsIDB4NjA0QiwgMHgwRkMwLCAweDYwNEMsIDB4NDRERCwgMHg2MDRELCAweDEyREQsDQotICAgIDB4NjA1MCwgMHgwNkFBLCAweDYwNTIsIDB4MDdDMywgMHg2MDU0LCAweDRCOUYsIDB4NjA1NSwgMHgwOTg0LA0KLSAgICAweDYwNTksIDB4MTJFNCwgMHg2MDVBLCAweDEyRDYsIDB4NjA1RCwgMHgyMTA2LCAweDYwNUYsIDB4MTJEQSwNCi0gICAgMHg2MDYwLCAweDEyQ0EsIDB4NjA2MSwgMHgzOENCLCAweDYwNjIsIDB4MDU3QSwgMHg2MDYzLCAweDEyREUsDQotICAgIDB4NjA2NCwgMHgxMkUwLCAweDYwNjUsIDB4MEI4RiwgMHg2MDY3LCAweDRCQTAsIDB4NjA2OCwgMHgwODE4LA0KLSAgICAweDYwNjksIDB4MDUzOCwgMHg2MDZBLCAweDEyRDgsIDB4NjA2QiwgMHgxMkUzLCAweDYwNkMsIDB4MTJFMiwNCi0gICAgMHg2MDZELCAweDA2QUIsIDB4NjA2RiwgMHgwQjA5LCAweDYwNzAsIDB4MDVDNCwgMHg2MDc1LCAweDA3MTksDQotICAgIDB4NjA3NywgMHgxMkQ5LCAweDYwN0YsIDB4MzhDQywgMHg2MDgxLCAweDEyRTUsIDB4NjA4MywgMHgxMkU4LA0KLSAgICAweDYwODQsIDB4MTJFQSwgMHg2MDg1LCAweDIxMDcsIDB4NjA4OSwgMHgwOEU5LCAweDYwOEEsIDB4MjEwOCwNCi0gICAgMHg2MDhCLCAweDEyRjAsIDB4NjA4QywgMHgwQzBDLCAweDYwOEQsIDB4MTJFNiwgMHg2MDkyLCAweDEyRUUsDQotICAgIDB4NjA5NCwgMHgwNTc5LCAweDYwOTUsIDB4NDRERSwgMHg2MDk2LCAweDEyRUMsIDB4NjA5NywgMHgxMkVELA0KLSAgICAweDYwOUEsIDB4MTJFOSwgMHg2MDlCLCAweDEyRUIsIDB4NjA5RCwgMHg0MUUxLCAweDYwOUUsIDB4MzhDRCwNCi0gICAgMHg2MDlGLCAweDA3OUIsIDB4NjBBMCwgMHgwRjE0LCAweDYwQTMsIDB4MDVGMSwgMHg2MEE0LCAweDM4Q0UsDQotICAgIDB4NjBBNiwgMHgwNEZCLCAweDYwQTcsIDB4MTJFRiwgMHg2MEE4LCAweDQ0REYsIDB4NjBBOSwgMHgwQ0YwLA0KLSAgICAweDYwQUEsIDB4MDQ3MSwgMHg2MEIwLCAweDM4Q0YsIDB4NjBCMSwgMHg0NEUxLCAweDYwQjIsIDB4MEQ3NSwNCi0gICAgMHg2MEIzLCAweDEyQzcsIDB4NjBCNCwgMHgxMkY1LCAweDYwQjUsIDB4MTJGOSwgMHg2MEI2LCAweDBFRjEsDQotICAgIDB4NjBCOCwgMHgxMkYyLCAweDYwQkIsIDB4NEJBMSwgMHg2MEJDLCAweDBDNjMsIDB4NjBCRCwgMHgxMkY3LA0KLSAgICAweDYwQkUsIDB4NDRFMiwgMHg2MEM0LCAweDRCQTIsIDB4NjBDNSwgMHgwOUQ4LCAweDYwQzYsIDB4MTJGOCwNCi0gICAgMHg2MEM3LCAweDBDQUYsIDB4NjBDOCwgMHg0NEUzLCAweDYwQ0IsIDB4MzhEMCwgMHg2MEQxLCAweDBGRUQsDQotICAgIDB4NjBEMywgMHgxMkY0LCAweDYwRDQsIDB4NDFFMiwgMHg2MEQ1LCAweDIxMEEsIDB4NjBEOCwgMHgxMkZBLA0KLSAgICAweDYwRDksIDB4NDRFNCwgMHg2MERBLCAweDA4MEQsIDB4NjBEQiwgMHgzOEQxLCAweDYwREMsIDB4MEE2RiwNCi0gICAgMHg2MERELCAweDQxRTMsIDB4NjBERSwgMHgyMTA5LCAweDYwREYsIDB4MDQ5OCwgMHg2MEUwLCAweDEyRjMsDQotICAgIDB4NjBFMSwgMHgxMkYxLCAweDYwRTMsIDB4MEFEQywgMHg2MEU3LCAweDEyRTcsIDB4NjBFOCwgMHgwODgyLA0KLSAgICAweDYwRUUsIDB4NDRFNSwgMHg2MEYwLCAweDBCMjYsIDB4NjBGMSwgMHgxMzA2LCAweDYwRjIsIDB4MjEwQywNCi0gICAgMHg2MEYzLCAweDBBREQsIDB4NjBGNCwgMHgxMzAxLCAweDYwRjUsIDB4NDRFNiwgMHg2MEY2LCAweDEyRkUsDQotICAgIDB4NjBGNywgMHgxMkZGLCAweDYwRjgsIDB4MzhEMiwgMHg2MEY5LCAweDA5MTIsIDB4NjBGQSwgMHgxMzAyLA0KLSAgICAweDYwRkIsIDB4MTMwNSwgMHg2MEZELCAweDRCQTMsIDB4NjEwMCwgMHgxMzAwLCAweDYxMDEsIDB4MDkyRiwNCi0gICAgMHg2MTAzLCAweDEzMDMsIDB4NjEwNiwgMHgxMkZELCAweDYxMDgsIDB4MEYwOCwgMHg2MTA5LCAweDBGMDcsDQotICAgIDB4NjEwQSwgMHg0QkE0LCAweDYxMEQsIDB4MTMwNywgMHg2MTBFLCAweDEzMDgsIDB4NjEwRiwgMHgwNDk5LA0KLSAgICAweDYxMTAsIDB4NDRFNywgMHg2MTExLCAweDIxMEQsIDB4NjExMiwgMHgzOEQzLCAweDYxMTMsIDB4MzhENCwNCi0gICAgMHg2MTE0LCAweDM4RDUsIDB4NjExNSwgMHgxMkZDLCAweDYxMTYsIDB4NEJBNSwgMHg2MTE5LCAweDQ0RTgsDQotICAgIDB4NjExQSwgMHgwNkVBLCAweDYxMUIsIDB4MDQ2QSwgMHg2MTFDLCAweDM4RDYsIDB4NjExRSwgMHg0NEU5LA0KLSAgICAweDYxMUYsIDB4MDVGMiwgMHg2MTIwLCAweDIxMEIsIDB4NjEyMSwgMHgxMzA0LCAweDYxMjcsIDB4MTMwQywNCi0gICAgMHg2MTI4LCAweDEzMEIsIDB4NjEyQSwgMHg0QkE2LCAweDYxMkIsIDB4NDFFNCwgMHg2MTJDLCAweDEzMTAsDQotICAgIDB4NjEzMCwgMHgyMTBGLCAweDYxMzQsIDB4MTMxMSwgMHg2MTM2LCAweDRCQTcsIDB4NjEzNywgMHgyMTBFLA0KLSAgICAweDYxM0EsIDB4NDRFQSwgMHg2MTNDLCAweDEzMEYsIDB4NjEzRCwgMHgxMzEyLCAweDYxM0UsIDB4MTMwQSwNCi0gICAgMHg2MTNGLCAweDEzMEUsIDB4NjE0MSwgMHg0NEVDLCAweDYxNDIsIDB4MTMxMywgMHg2MTQ0LCAweDEzMTQsDQotICAgIDB4NjE0NiwgMHg0NEVELCAweDYxNDcsIDB4MTMwOSwgMHg2MTQ4LCAweDA4Q0EsIDB4NjE0QSwgMHgxMzBELA0KLSAgICAweDYxNEIsIDB4MEIzNiwgMHg2MTRDLCAweDA3QzQsIDB4NjE0RCwgMHgxMkZCLCAweDYxNEUsIDB4MDlGQiwNCi0gICAgMHg2MTUzLCAweDEzMjEsIDB4NjE1NSwgMHgwRTM5LCAweDYxNTgsIDB4MTMxNywgMHg2MTU5LCAweDEzMTgsDQotICAgIDB4NjE1QSwgMHgxMzE5LCAweDYxNUQsIDB4MTMyMCwgMHg2MTVFLCAweDRCQTgsIDB4NjE1RiwgMHgxMzFGLA0KLSAgICAweDYxNjAsIDB4NDRFRSwgMHg2MTYyLCAweDBFQUIsIDB4NjE2MywgMHgwNUYzLCAweDYxNjQsIDB4NEJBOSwNCi0gICAgMHg2MTY1LCAweDEzMUQsIDB4NjE2NywgMHgwNzFCLCAweDYxNjgsIDB4MDU5MiwgMHg2MTZCLCAweDEzMUEsDQotICAgIDB4NjE2RSwgMHgwRjgwLCAweDYxNkYsIDB4MTMxQywgMHg2MTcwLCAweDA0OUEsIDB4NjE3MSwgMHgxMzFFLA0KLSAgICAweDYxNzMsIDB4MTMxNSwgMHg2MTc0LCAweDEzMUIsIDB4NjE3NSwgMHgxMzIyLCAweDYxNzYsIDB4MDcxQSwNCi0gICAgMHg2MTc3LCAweDEzMTYsIDB4NjE3QiwgMHg0QkFBLCAweDYxN0MsIDB4MzhENywgMHg2MTdELCAweDRCQUIsDQotICAgIDB4NjE3RSwgMHgwRjQ3LCAweDYxN0YsIDB4NEJBQywgMHg2MTgyLCAweDBGMTUsIDB4NjE4NywgMHgxMzI1LA0KLSAgICAweDYxOEEsIDB4MTMyOSwgMHg2MThELCAweDM4RDgsIDB4NjE4RSwgMHgwQjAwLCAweDYxOTAsIDB4MEZDMSwNCi0gICAgMHg2MTkxLCAweDEzMkEsIDB4NjE5MiwgMHg0NEYwLCAweDYxOTMsIDB4NDRGMSwgMHg2MTk0LCAweDEzMjcsDQotICAgIDB4NjE5NiwgMHgxMzI0LCAweDYxOTcsIDB4NDRGMiwgMHg2MTk4LCAweDIxMTAsIDB4NjE5OSwgMHgxMzIzLA0KLSAgICAweDYxOUEsIDB4MTMyOCwgMHg2MTlELCAweDRCQUQsIDB4NjE5RiwgMHgzOEQ5LCAweDYxQTQsIDB4MEUwMCwNCi0gICAgMHg2MUE1LCAweDQ0RjMsIDB4NjFBNywgMHgwQzhDLCAweDYxQTgsIDB4MzhEQSwgMHg2MUE5LCAweDA3MUMsDQotICAgIDB4NjFBQiwgMHgxMzJCLCAweDYxQUMsIDB4MTMyNiwgMHg2MUFELCAweDQ0RjQsIDB4NjFBRSwgMHgxMzJDLA0KLSAgICAweDYxQjIsIDB4MDc1MSwgMHg2MUI2LCAweDA1MzEsIDB4NjFCOCwgMHg0QkFFLCAweDYxQjksIDB4NDFFNiwNCi0gICAgMHg2MUJBLCAweDEzMzQsIDB4NjFCQywgMHg0MUU1LCAweDYxQkUsIDB4MDVGNCwgMHg2MUMyLCAweDM4REIsDQotICAgIDB4NjFDMywgMHgxMzMyLCAweDYxQzYsIDB4MTMzMywgMHg2MUM3LCAweDA4MTksIDB4NjFDOCwgMHgxMzMxLA0KLSAgICAweDYxQzksIDB4MTMyRiwgMHg2MUNBLCAweDEzMkUsIDB4NjFDQiwgMHgxMzM1LCAweDYxQ0MsIDB4MTMyRCwNCi0gICAgMHg2MUNELCAweDEzMzcsIDB4NjFEMCwgMHgwNTdCLCAweDYxRDUsIDB4NDRGNiwgMHg2MURDLCAweDRCQUYsDQotICAgIDB4NjFERCwgMHg0NEY3LCAweDYxREYsIDB4MzhEQywgMHg2MUUyLCAweDRCQjAsIDB4NjFFMywgMHgxMzM5LA0KLSAgICAweDYxRTUsIDB4NEJCMSwgMHg2MUU2LCAweDEzMzgsIDB4NjFFOCwgMHg0QkIyLCAweDYxRjIsIDB4MEJDNCwNCi0gICAgMHg2MUY0LCAweDEzM0MsIDB4NjFGNSwgMHg0NEY4LCAweDYxRjYsIDB4MTMzQSwgMHg2MUY3LCAweDEzMzAsDQotICAgIDB4NjFGOCwgMHgwNzUyLCAweDYxRkEsIDB4MTMzQiwgMHg2MUZDLCAweDEzM0YsIDB4NjFGRCwgMHgxMzNFLA0KLSAgICAweDYxRkUsIDB4MTM0MCwgMHg2MUZGLCAweDEzM0QsIDB4NjIwMCwgMHgxMzQxLCAweDYyMDQsIDB4NEJCMywNCi0gICAgMHg2MjA3LCAweDRCQjQsIDB4NjIwOCwgMHgxMzQyLCAweDYyMDksIDB4MTM0MywgMHg2MjBBLCAweDBFM0EsDQotICAgIDB4NjIwQywgMHgxMzQ1LCAweDYyMEQsIDB4MTM0NCwgMHg2MjBFLCAweDA5NDksIDB4NjIxMCwgMHgwQTUyLA0KLSAgICAweDYyMTEsIDB4MDU2NiwgMHg2MjEyLCAweDA1N0MsIDB4NjIxMywgMHgyMTExLCAweDYyMTQsIDB4MTM0NiwNCi0gICAgMHg2MjE1LCAweDM4REQsIDB4NjIxNiwgMHgwNDgzLCAweDYyMUEsIDB4MEE3MCwgMHg2MjFCLCAweDEzNDcsDQotICAgIDB4NjIxRCwgMHgxQTY0LCAweDYyMUUsIDB4MTM0OCwgMHg2MjFGLCAweDA3MzcsIDB4NjIyMSwgMHgxMzQ5LA0KLSAgICAweDYyMjIsIDB4NDFFNywgMHg2MjIzLCAweDQ0RkEsIDB4NjIyNiwgMHgwQTkzLCAweDYyMjksIDB4MzhERSwNCi0gICAgMHg2MjJBLCAweDEzNEEsIDB4NjIyRSwgMHgxMzRCLCAweDYyMkYsIDB4MDY1NCwgMHg2MjMwLCAweDEzNEMsDQotICAgIDB4NjIzMSwgMHg0QkI1LCAweDYyMzIsIDB4MTM0RCwgMHg2MjMzLCAweDEzNEUsIDB4NjIzNCwgMHgwQjM3LA0KLSAgICAweDYyMzYsIDB4MzVCRCwgMHg2MjM4LCAweDA3ODEsIDB4NjIzOSwgMHg0QkI2LCAweDYyM0IsIDB4MEVFRCwNCi0gICAgMHg2MjNELCAweDRCQjcsIDB4NjIzRSwgMHgzNDRFLCAweDYyM0YsIDB4MEU2QSwgMHg2MjQwLCAweDA5NzQsDQotICAgIDB4NjI0MSwgMHgxMzRGLCAweDYyNDMsIDB4MzhERiwgMHg2MjQ2LCAweDM4RTAsIDB4NjI0NywgMHgwQTk0LA0KLSAgICAweDYyNDgsIDB4MUIxQSwgMHg2MjQ5LCAweDBENzYsIDB4NjI0QiwgMHgwOTE2LCAweDYyNEMsIDB4MzhFMSwNCi0gICAgMHg2MjRELCAweDA4M0QsIDB4NjI0RSwgMHgxMzUwLCAweDYyNTEsIDB4MzhFMiwgMHg2MjUyLCAweDQ0RkIsDQotICAgIDB4NjI1MywgMHgwQjI3LCAweDYyNTUsIDB4MERGNywgMHg2MjU2LCAweDM4RTMsIDB4NjI1OCwgMHgwQjUxLA0KLSAgICAweDYyNUEsIDB4NDFFOCwgMHg2MjVCLCAweDEzNTMsIDB4NjI1RSwgMHgxMzUxLCAweDYyNjAsIDB4MTM1NCwNCi0gICAgMHg2MjYxLCAweDQ0RkMsIDB4NjI2MywgMHgxMzUyLCAweDYyNjQsIDB4NDRGRCwgMHg2MjY4LCAweDEzNTUsDQotICAgIDB4NjI2RCwgMHg0NEZGLCAweDYyNkUsIDB4MEUwMSwgMHg2MjZGLCAweDQxRTksIDB4NjI3MSwgMHgwNDdCLA0KLSAgICAweDYyNzMsIDB4NDUwMCwgMHg2Mjc2LCAweDBERDAsIDB4NjI3OSwgMHgwRDc3LCAweDYyN0EsIDB4NEJCOCwNCi0gICAgMHg2MjdCLCAweDQ0RkUsIDB4NjI3QywgMHgxMzU2LCAweDYyN0UsIDB4MTM1OSwgMHg2MjdGLCAweDA5OUQsDQotICAgIDB4NjI4MCwgMHgwNjU1LCAweDYyODIsIDB4MTM1NywgMHg2MjgzLCAweDEzNUUsIDB4NjI4NCwgMHgwOTlFLA0KLSAgICAweDYyODUsIDB4MzVDNSwgMHg2Mjg5LCAweDEzNTgsIDB4NjI4QSwgMHgwQ0ZBLCAweDYyOTAsIDB4NEJCOSwNCi0gICAgMHg2MjkxLCAweDBGNDgsIDB4NjI5MiwgMHgxMzVBLCAweDYyOTMsIDB4MTM1QiwgMHg2Mjk0LCAweDEzNUYsDQotICAgIDB4NjI5NSwgMHgwQzY0LCAweDYyOTYsIDB4MTM1QywgMHg2Mjk3LCAweDA3QzUsIDB4NjI5OCwgMHgwQTgyLA0KLSAgICAweDYyOTksIDB4NDUwMSwgMHg2MjlCLCAweDEzNkQsIDB4NjI5QywgMHgwRDQ4LCAweDYyOUUsIDB4MEI1MiwNCi0gICAgMHg2MkE2LCAweDIxMTIsIDB4NjJBOCwgMHg0QkJBLCAweDYyQUIsIDB4MEQ3OCwgMHg2MkFDLCAweDEzQjIsDQotICAgIDB4NjJCMSwgMHgwRTRBLCAweDYyQjUsIDB4MEMwRCwgMHg2MkI5LCAweDBFQTMsIDB4NjJCQiwgMHgxMzYyLA0KLSAgICAweDYyQkMsIDB4MDUyMSwgMHg2MkJELCAweDBCQTgsIDB4NjJDMiwgMHgxMzZCLCAweDYyQzQsIDB4MzhFNCwNCi0gICAgMHg2MkM1LCAweDBCNzIsIDB4NjJDNiwgMHgxMzY1LCAweDYyQzcsIDB4MTM2QywgMHg2MkM4LCAweDEzNjcsDQotICAgIDB4NjJDOSwgMHgxMzZFLCAweDYyQ0EsIDB4MTM2QSwgMHg2MkNDLCAweDEzNjksIDB4NjJDRCwgMHgwRDI1LA0KLSAgICAweDYyQ0YsIDB4MTM2MywgMHg2MkQwLCAweDA1N0QsIDB4NjJEMSwgMHgxMzYxLCAweDYyRDIsIDB4MDY4QiwNCi0gICAgMHg2MkQzLCAweDBCNTMsIDB4NjJENCwgMHgxMzVELCAweDYyRDUsIDB4NDUwMiwgMHg2MkQ2LCAweDQxRUEsDQotICAgIDB4NjJENywgMHgxMzYwLCAweDYyRDgsIDB4MDdDNiwgMHg2MkQ5LCAweDBBN0YsIDB4NjJEQSwgMHg0QkJCLA0KLSAgICAweDYyREIsIDB4MDk5RiwgMHg2MkRDLCAweDEzNjgsIDB4NjJERCwgMHgwRDA4LCAweDYyRTAsIDB4MDY4QywNCi0gICAgMHg2MkUxLCAweDA1QTYsIDB4NjJFQywgMHgwNUM1LCAweDYyRUQsIDB4MDlFNywgMHg2MkVFLCAweDEzNzAsDQotICAgIDB4NjJFRiwgMHgxMzc1LCAweDYyRjEsIDB4MTM3MSwgMHg2MkYzLCAweDA3NTMsIDB4NjJGNCwgMHg0QkJDLA0KLSAgICAweDYyRjUsIDB4MTM3NiwgMHg2MkY2LCAweDA4NzAsIDB4NjJGNywgMHgwN0ZCLCAweDYyRkMsIDB4MzhFNSwNCi0gICAgMHg2MkZELCAweDQ1MDQsIDB4NjJGRSwgMHgwOTMwLCAweDYyRkYsIDB4MTM2NCwgMHg2MzAxLCAweDA4Q0IsDQotICAgIDB4NjMwMiwgMHgxMzczLCAweDYzMDMsIDB4NDUwNSwgMHg2MzA3LCAweDA4QTYsIDB4NjMwOCwgMHgxMzc0LA0KLSAgICAweDYzMDksIDB4MDQ4OCwgMHg2MzBBLCAweDM4RTYsIDB4NjMwQywgMHgxMzZGLCAweDYzMEQsIDB4MzhFNywNCi0gICAgMHg2MzEwLCAweDQ1MDYsIDB4NjMxMSwgMHgwQkM1LCAweDYzMTYsIDB4NEJCRCwgMHg2MzE4LCAweDM4RTgsDQotICAgIDB4NjMxOSwgMHgwNjhELCAweDYzMUIsIDB4MzczNywgMHg2MzFGLCAweDA2QUMsIDB4NjMyNywgMHgxMzcyLA0KLSAgICAweDYzMjgsIDB4MDQ2QiwgMHg2MzJBLCAweDRCQkUsIDB4NjMyQiwgMHgwODMzLCAweDYzMkYsIDB4MDlGQywNCi0gICAgMHg2MzMyLCAweDQ1MDksIDB4NjMzNSwgMHg0NTBBLCAweDYzMzYsIDB4NEJCRiwgMHg2MzM5LCAweDM4RTksDQotICAgIDB4NjMzQSwgMHgwQzBFLCAweDYzM0IsIDB4NDUwQiwgMHg2MzNDLCAweDQ1MEMsIDB4NjMzRCwgMHgwRDY4LA0KLSAgICAweDYzM0UsIDB4MTM3OCwgMHg2MzNGLCAweDBBRTAsIDB4NjM0MSwgMHg0NTBELCAweDYzNDIsIDB4MzhFQSwNCi0gICAgMHg2MzQzLCAweDM4RUIsIDB4NjM0NCwgMHg0NTBFLCAweDYzNDYsIDB4NEJDMCwgMHg2MzQ5LCAweDBCMEEsDQotICAgIDB4NjM0QiwgMHg0QkMxLCAweDYzNEMsIDB4MDg3OSwgMHg2MzRELCAweDEzNzksIDB4NjM0RSwgMHg0NTBGLA0KLSAgICAweDYzNEYsIDB4MTM3QiwgMHg2MzUwLCAweDEzNzcsIDB4NjM1MywgMHg0QkMyLCAweDYzNTUsIDB4MEUzMSwNCi0gICAgMHg2MzU3LCAweDBCRDksIDB4NjM1OSwgMHg0NTExLCAweDYzNUMsIDB4MEFERSwgMHg2MzY1LCAweDM4RUMsDQotICAgIDB4NjM2NywgMHgwRTRCLCAweDYzNjgsIDB4MDhGQSwgMHg2MzY5LCAweDEzODcsIDB4NjM2QiwgMHgxMzg2LA0KLSAgICAweDYzNkMsIDB4NDUxNCwgMHg2MzZFLCAweDBBM0UsIDB4NjM3MSwgMHg0QkMzLCAweDYzNzIsIDB4MDc1NCwNCi0gICAgMHg2Mzc0LCAweDM4RUQsIDB4NjM3NSwgMHg0QkM0LCAweDYzNzYsIDB4MTM4MCwgMHg2Mzc3LCAweDA5QTEsDQotICAgIDB4NjM3QSwgMHgwQ0MwLCAweDYzN0IsIDB4MENFNywgMHg2MzdDLCAweDQxRUIsIDB4NjM3RCwgMHgzOEVFLA0KLSAgICAweDYzN0YsIDB4NEJDNSwgMHg2MzgwLCAweDEzN0UsIDB4NjM4MiwgMHg0QkM2LCAweDYzODMsIDB4MEFERiwNCi0gICAgMHg2Mzg0LCAweDM4RUYsIDB4NjM4NywgMHgzOEYwLCAweDYzODgsIDB4MDkyNCwgMHg2Mzg5LCAweDEzODMsDQotICAgIDB4NjM4QSwgMHg0QkM3LCAweDYzOEMsIDB4MDlBMCwgMHg2MzhFLCAweDEzN0QsIDB4NjM4RiwgMHgxMzgyLA0KLSAgICAweDYzOTAsIDB4MzhGMSwgMHg2MzkyLCAweDBEMDksIDB4NjM5NCwgMHg0NTE3LCAweDYzOTYsIDB4MTM3QywNCi0gICAgMHg2Mzk4LCAweDA2RjcsIDB4NjM5OSwgMHg0NTE1LCAweDYzOUIsIDB4MDVCQiwgMHg2MzlFLCAweDM4RjIsDQotICAgIDB4NjM5RiwgMHgxMzg0LCAweDYzQTAsIDB4MEY3MywgMHg2M0ExLCAweDA4M0UsIDB4NjNBMiwgMHgwQjczLA0KLSAgICAweDYzQTMsIDB4MTM4MSwgMHg2M0E1LCAweDBBODAsIDB4NjNBNywgMHgwN0M3LCAweDYzQTgsIDB4MEEyQSwNCi0gICAgMHg2M0E5LCAweDA1MDgsIDB4NjNBQSwgMHgwQUJFLCAweDYzQUIsIDB4MTM3RiwgMHg2M0FDLCAweDA2NUYsDQotICAgIDB4NjNBRSwgMHg0QkM4LCAweDYzQUYsIDB4NEJDOSwgMHg2M0IyLCAweDA3MUQsIDB4NjNCNCwgMHgwQkVCLA0KLSAgICAweDYzQjUsIDB4MTM4NSwgMHg2M0JCLCAweDBBRTEsIDB4NjNCRCwgMHg0NTE4LCAweDYzQkUsIDB4MTM4OCwNCi0gICAgMHg2M0MwLCAweDEzOEEsIDB4NjNDMywgMHgwQjE3LCAweDYzQzQsIDB4MTM5MCwgMHg2M0M2LCAweDEzOEIsDQotICAgIDB4NjNDOSwgMHgxMzhELCAweDYzQ0YsIDB4MERCMywgMHg2M0QwLCAweDBDMEYsIDB4NjNEMSwgMHgzOEYzLA0KLSAgICAweDYzRDIsIDB4MTM4RSwgMHg2M0Q0LCAweDQ1MTksIDB4NjNENSwgMHg0NTFBLCAweDYzRDYsIDB4MEYxNiwNCi0gICAgMHg2M0RBLCAweDBGMzIsIDB4NjNEQiwgMHgwNUY1LCAweDYzREMsIDB4MzhGNCwgMHg2M0UwLCAweDQ1MUIsDQotICAgIDB4NjNFMSwgMHgwNDcyLCAweDYzRTMsIDB4MTM4QywgMHg2M0U1LCAweDQxRUMsIDB4NjNFOSwgMHgxMzg5LA0KLSAgICAweDYzRUEsIDB4NEJDQSwgMHg2M0VCLCAweDQ1MUMsIDB4NjNFQywgMHg0NTFELCAweDYzRUQsIDB4MzQxQywNCi0gICAgMHg2M0VFLCAweDA2MzQsIDB4NjNGMiwgMHg0NTFFLCAweDYzRjQsIDB4MDUwOSwgMHg2M0Y1LCAweDIxMTMsDQotICAgIDB4NjNGNiwgMHgxMzhGLCAweDYzRjcsIDB4MzY0NCwgMHg2M0Y4LCAweDRCQ0IsIDB4NjNGOSwgMHg0QkNDLA0KLSAgICAweDYzRkEsIDB4MEYzMywgMHg2NDA2LCAweDEzOTMsIDB4NjQwOSwgMHgzOEY1LCAweDY0MEQsIDB4MEIxQiwNCi0gICAgMHg2NDBGLCAweDEzOUEsIDB4NjQxMCwgMHgzOEY2LCAweDY0MTIsIDB4NEJDRCwgMHg2NDEzLCAweDEzOTQsDQotICAgIDB4NjQxNCwgMHgxRTJDLCAweDY0MTYsIDB4MTM5MSwgMHg2NDE3LCAweDEzOTgsIDB4NjQxOCwgMHg0QkNFLA0KLSAgICAweDY0MUMsIDB4MTM3QSwgMHg2NDFFLCAweDQ1MUYsIDB4NjQyMCwgMHg0QkNGLCAweDY0MjIsIDB4MzhGNywNCi0gICAgMHg2NDI0LCAweDRCRDAsIDB4NjQyNSwgMHg0NTIwLCAweDY0MjYsIDB4MTM5NSwgMHg2NDI4LCAweDEzOTksDQotICAgIDB4NjQyOSwgMHg0NTIxLCAweDY0MkEsIDB4NEJEMSwgMHg2NDJDLCAweDBENTYsIDB4NjQyRCwgMHgwQzY1LA0KLSAgICAweDY0MkYsIDB4NDUyMiwgMHg2NDM0LCAweDEzOTIsIDB4NjQzNSwgMHg0QkQyLCAweDY0MzYsIDB4MTM5NiwNCi0gICAgMHg2NDNBLCAweDA3MUUsIDB4NjQzRCwgMHg0QkQzLCAweDY0M0UsIDB4MDg2MSwgMHg2NDNGLCAweDRCRDQsDQotICAgIDB4NjQ0MiwgMHgwQTgxLCAweDY0NEUsIDB4MTM5RSwgMHg2NDUxLCAweDFFNDMsIDB4NjQ1MiwgMHg0QkQ1LA0KLSAgICAweDY0NTQsIDB4MzhGOCwgMHg2NDU4LCAweDBDMjAsIDB4NjQ1QSwgMHg0NTIzLCAweDY0NUIsIDB4MzhGOSwNCi0gICAgMHg2NDVELCAweDQ1MjQsIDB4NjQ1RiwgMHg0QkQ2LCAweDY0NjAsIDB4MjExNCwgMHg2NDY3LCAweDEzOUIsDQotICAgIDB4NjQ2OSwgMHgwRThFLCAweDY0NkQsIDB4MzhGQSwgMHg2NDZGLCAweDEzOUMsIDB4NjQ3MywgMHg0NTI1LA0KLSAgICAweDY0NzQsIDB4NEJENywgMHg2NDc2LCAweDEzOUQsIDB4NjQ3OCwgMHgwRURBLCAweDY0NzksIDB4NDFFRCwNCi0gICAgMHg2NDdBLCAweDBBNDYsIDB4NjQ3QiwgMHgzOEZCLCAweDY0N0QsIDB4NDUyNiwgMHg2NDgzLCAweDA3MzgsDQotICAgIDB4NjQ4NywgMHg0NTI3LCAweDY0ODgsIDB4MTNBNCwgMHg2NDkwLCAweDRCRDgsIDB4NjQ5MSwgMHg0NTI4LA0KLSAgICAweDY0OTIsIDB4MDg4MywgMHg2NDkzLCAweDEzQTEsIDB4NjQ5NSwgMHgxM0EwLCAweDY0OTgsIDB4NEJEOSwNCi0gICAgMHg2NDk5LCAweDRCREEsIDB4NjQ5QSwgMHgwQ0U4LCAweDY0OUQsIDB4MjExNSwgMHg2NDlFLCAweDBDOEQsDQotICAgIDB4NjQ5RiwgMHg0NTI5LCAweDY0QTQsIDB4MEMyQiwgMHg2NEE1LCAweDEzQTIsIDB4NjRBOSwgMHgxM0EzLA0KLSAgICAweDY0QUIsIDB4MERFMSwgMHg2NEFDLCAweDRCREIsIDB4NjRBRCwgMHgwQ0ZCLCAweDY0QUUsIDB4MDg3MSwNCi0gICAgMHg2NEIwLCAweDBBOTUsIDB4NjRCMiwgMHgwRTdFLCAweDY0QjMsIDB4NEJEQywgMHg2NEI5LCAweDA1QTcsDQotICAgIDB4NjRCQiwgMHgxM0FBLCAweDY0QkMsIDB4MTNBNSwgMHg2NEJFLCAweDM4RkMsIDB4NjRCRiwgMHgzOEZELA0KLSAgICAweDY0QzEsIDB4MEYzNCwgMHg2NEMyLCAweDEzQUMsIDB4NjRDNCwgMHg0MUVFLCAweDY0QzUsIDB4MTNBOCwNCi0gICAgMHg2NEM3LCAweDEzQTksIDB4NjRDQSwgMHgzNDFELCAweDY0Q0IsIDB4NDUyQSwgMHg2NENDLCAweDQ1MkIsDQotICAgIDB4NjRDRCwgMHgwQUUyLCAweDY0Q0UsIDB4MjExNiwgMHg2NEQwLCAweDQxRUYsIDB4NjREMiwgMHgxM0E3LA0KLSAgICAweDY0RDQsIDB4MTM2NiwgMHg2NEQ1LCAweDQ1MkMsIDB4NjRENywgMHg0NTJELCAweDY0RDgsIDB4MTNBQiwNCi0gICAgMHg2NERBLCAweDEzQTYsIDB4NjRFMCwgMHgxM0IwLCAweDY0RTEsIDB4MTNCMSwgMHg2NEUyLCAweDBDMjEsDQotICAgIDB4NjRFMywgMHgxM0IzLCAweDY0RTQsIDB4NDUyRiwgMHg2NEU1LCAweDM4RkUsIDB4NjRFNiwgMHgwODcyLA0KLSAgICAweDY0RTcsIDB4MTNBRSwgMHg2NEVDLCAweDA2NTYsIDB4NjRFRCwgMHg0QkRELCAweDY0RUYsIDB4MTNCNCwNCi0gICAgMHg2NEYwLCAweDRCREUsIDB4NjRGMSwgMHgxM0FELCAweDY0RjIsIDB4MTNCOCwgMHg2NEY0LCAweDEzQjcsDQotICAgIDB4NjRGNiwgMHgxM0I2LCAweDY0RjcsIDB4MzhGRiwgMHg2NEZBLCAweDEzQjksIDB4NjRGQiwgMHgzOTAwLA0KLSAgICAweDY0RkQsIDB4MTNCQiwgMHg2NEZFLCAweDA5RDksIDB4NjRGRiwgMHg0NTMwLCAweDY1MDAsIDB4MTNCQSwNCi0gICAgMHg2NTA0LCAweDM5MDEsIDB4NjUwNSwgMHgxM0JFLCAweDY1MEYsIDB4NDUzMiwgMHg2NTE0LCAweDQ1MzMsDQotICAgIDB4NjUxNiwgMHgzOTAyLCAweDY1MTgsIDB4MTNCQywgMHg2NTE5LCAweDM5MDMsIDB4NjUxQiwgMHg0QkRGLA0KLSAgICAweDY1MUMsIDB4MTNCRCwgMHg2NTFELCAweDEzOTcsIDB4NjUxRSwgMHg0NTM1LCAweDY1MUYsIDB4NEJFMCwNCi0gICAgMHg2NTIyLCAweDFFOTcsIDB4NjUyMywgMHgxM0MwLCAweDY1MjQsIDB4MTNCRiwgMHg2NTI5LCAweDQxRjAsDQotICAgIDB4NjUyQSwgMHgxMzlGLCAweDY1MkIsIDB4MTNDMSwgMHg2NTJDLCAweDEzQjUsIDB4NjUyRSwgMHg0QkUxLA0KLSAgICAweDY1MkYsIDB4MDhBNywgMHg2NTMyLCAweDQ1MzYsIDB4NjUzNCwgMHgxM0MyLCAweDY1MzUsIDB4MTNDMywNCi0gICAgMHg2NTM2LCAweDEzQzUsIDB4NjUzNywgMHgxM0M0LCAweDY1MzgsIDB4MTNDNiwgMHg2NTM5LCAweDA1N0UsDQotICAgIDB4NjUzQiwgMHgwN0M4LCAweDY1M0UsIDB4MEU0QywgMHg2NTNGLCAweDBBNTMsIDB4NjU0NCwgMHg0NTM3LA0KLSAgICAweDY1NDUsIDB4MDc4MiwgMHg2NTQ3LCAweDM5MDQsIDB4NjU0OCwgMHgxM0M4LCAweDY1NDksIDB4NEJFMiwNCi0gICAgMHg2NTRELCAweDEzQ0IsIDB4NjU0RSwgMHgyMTE3LCAweDY1NEYsIDB4MERDNCwgMHg2NTUxLCAweDA2NzksDQotICAgIDB4NjU1NCwgMHg0NTM4LCAweDY1NTUsIDB4MTNDQSwgMHg2NTU2LCAweDEzQzksIDB4NjU1NywgMHgwRDBBLA0KLSAgICAweDY1NTgsIDB4MTNDQywgMHg2NTU5LCAweDA2QUQsIDB4NjU1RCwgMHgxM0NFLCAweDY1NUUsIDB4MTNDRCwNCi0gICAgMHg2NTYwLCAweDRCRTMsIDB4NjU2MiwgMHgwNUY2LCAweDY1NjMsIDB4MDg4NCwgMHg2NTY2LCAweDBDQjAsDQotICAgIDB4NjU2NywgMHgzOTA1LCAweDY1NkIsIDB4NDUzOSwgMHg2NTZDLCAweDA3MUYsIDB4NjU3MCwgMHgwQTNBLA0KLSAgICAweDY1NzIsIDB4MTNDRiwgMHg2NTc0LCAweDBBNTQsIDB4NjU3NSwgMHgwQzIyLCAweDY1NzcsIDB4MEREMSwNCi0gICAgMHg2NTc4LCAweDEzRDAsIDB4NjU3QSwgMHg0NTNBLCAweDY1ODEsIDB4MzkwNiwgMHg2NTgyLCAweDEzRDEsDQotICAgIDB4NjU4MywgMHgxM0QyLCAweDY1ODQsIDB4NDUzQiwgMHg2NTg1LCAweDM5MDcsIDB4NjU4NywgMHgwRTA4LA0KLSAgICAweDY1ODgsIDB4MTIwQywgMHg2NTg5LCAweDBBNkEsIDB4NjU4QSwgMHg0NTNDLCAweDY1OEMsIDB4MERCRSwNCi0gICAgMHg2NThFLCAweDA4NDgsIDB4NjU5MCwgMHgwRDc5LCAweDY1OTEsIDB4MEQ1NywgMHg2NTkyLCAweDRCRTQsDQotICAgIDB4NjU5NSwgMHg0QkU1LCAweDY1OTcsIDB4MEM0NywgMHg2NTk5LCAweDBGODksIDB4NjU5QiwgMHgxM0Q0LA0KLSAgICAweDY1OUMsIDB4MDhGQywgMHg2NTlELCAweDQxRjEsIDB4NjU5RiwgMHgxM0Q1LCAweDY1QTEsIDB4MDQ3QSwNCi0gICAgMHg2NUE0LCAweDA2Q0MsIDB4NjVBNSwgMHgwQTcxLCAweDY1QTcsIDB4MEREMiwgMHg2NUFCLCAweDEzRDYsDQotICAgIDB4NjVBQywgMHgwODkwLCAweDY1QUQsIDB4MEI4NSwgMHg2NUFGLCAweDA4QTksIDB4NjVCMCwgMHgwOUZELA0KLSAgICAweDY1QjIsIDB4NDUzRCwgMHg2NUI0LCAweDRCRTYsIDB4NjVCNSwgMHg0NTNFLCAweDY1QjcsIDB4MTNENywNCi0gICAgMHg2NUI4LCAweDQ1M0YsIDB4NjVCOSwgMHgwRTRELCAweDY1QkMsIDB4MDUxOSwgMHg2NUJELCAweDA4QUEsDQotICAgIDB4NjVCRSwgMHg0QkU3LCAweDY1QkYsIDB4NDU0MCwgMHg2NUMxLCAweDEzREEsIDB4NjVDMiwgMHgzOTA4LA0KLSAgICAweDY1QzMsIDB4MTNEOCwgMHg2NUM0LCAweDEzREIsIDB4NjVDNSwgMHgwRjgxLCAweDY1QzYsIDB4MTNEOSwNCi0gICAgMHg2NUM4LCAweDRCRTgsIDB4NjVDOSwgMHg0NTQxLCAweDY1Q0IsIDB4MEE5RiwgMHg2NUNDLCAweDEzREMsDQotICAgIDB4NjVDRSwgMHg0QkU5LCAweDY1Q0YsIDB4MEIxMiwgMHg2NUQwLCAweDRCRUEsIDB4NjVEMiwgMHgxM0RELA0KLSAgICAweDY1RDQsIDB4NDU0MiwgMHg2NUQ3LCAweDA2MzYsIDB4NjVEOSwgMHgxM0RGLCAweDY1REIsIDB4MTNERSwNCi0gICAgMHg2NURGLCAweDRCRUIsIDB4NjVFMCwgMHgxM0UwLCAweDY1RTEsIDB4MTNFMSwgMHg2NUUyLCAweDA2MzcsDQotICAgIDB4NjVFMywgMHgzNTg1LCAweDY1RTUsIDB4MENENCwgMHg2NUU2LCAweDBCNzQsIDB4NjVFNywgMHgwNjg2LA0KLSAgICAweDY1RTgsIDB4MDhBQiwgMHg2NUU5LCAweDBBRTMsIDB4NjVFQywgMHgwOTY2LCAweDY1RUQsIDB4MDQ3NCwNCi0gICAgMHg2NUYwLCAweDM5MDksIDB4NjVGMSwgMHgxM0UyLCAweDY1RjIsIDB4MzkwQSwgMHg2NUY5LCAweDQ1NDQsDQotICAgIDB4NjVGQSwgMHgwNTIyLCAweDY1RkIsIDB4MTNFNiwgMHg2NUZDLCAweDQ1NDUsIDB4NjYwMCwgMHgyMTE4LA0KLSAgICAweDY2MDIsIDB4MDdDOSwgMHg2NjAzLCAweDEzRTUsIDB4NjYwNCwgMHg0NTQ2LCAweDY2MDYsIDB4MDgxQiwNCi0gICAgMHg2NjA3LCAweDA5QTIsIDB4NjYwOCwgMHg0NTQ3LCAweDY2MDksIDB4MjExQSwgMHg2NjBBLCAweDEzRTQsDQotICAgIDB4NjYwQywgMHgwOUEzLCAweDY2MEUsIDB4MEVDQywgMHg2NjBGLCAweDA4MUEsIDB4NjYxMywgMHgwNDlCLA0KLSAgICAweDY2MTQsIDB4MEE3MiwgMHg2NjE1LCAweDIxMTksIDB4NjYxQywgMHgxM0VCLCAweDY2MUUsIDB4NEY1MCwNCi0gICAgMHg2NjFGLCAweDBBNTUsIDB4NjYyMCwgMHgwNEU5LCAweDY2MjEsIDB4NDU0OCwgMHg2NjIyLCAweDQxRjMsDQotICAgIDB4NjYyNCwgMHgyMTFELCAweDY2MjUsIDB4MDk1RiwgMHg2NjI3LCAweDBFOTQsIDB4NjYyOCwgMHgwODYyLA0KLSAgICAweDY2MkEsIDB4NDU0OSwgMHg2NjJCLCAweDQxRjQsIDB4NjYyQywgMHgzOTBCLCAweDY2MkQsIDB4MDlBNCwNCi0gICAgMHg2NjJFLCAweDIxMUIsIDB4NjYyRiwgMHgwQTRCLCAweDY2MzAsIDB4NDFGNSwgMHg2NjMxLCAweDIwQUUsDQotICAgIDB4NjYzMywgMHg0MUY2LCAweDY2MzQsIDB4MTNFQSwgMHg2NjM1LCAweDEzRTgsIDB4NjYzNiwgMHgxM0U5LA0KLSAgICAweDY2M0EsIDB4NDFGMiwgMHg2NjNCLCAweDFFMDAsIDB4NjYzQywgMHgwQkE5LCAweDY2M0YsIDB4MTQwOSwNCi0gICAgMHg2NjQxLCAweDEzRUYsIDB4NjY0MiwgMHgwOENDLCAweDY2NDMsIDB4MDdDQSwgMHg2NjQ0LCAweDEzRUQsDQotICAgIDB4NjY0NSwgMHg0NTRBLCAweDY2NDgsIDB4NDFGNywgMHg2NjQ5LCAweDEzRUUsIDB4NjY0QiwgMHgwOUZFLA0KLSAgICAweDY2NEMsIDB4MzkwQywgMHg2NjRFLCAweDQ1NEMsIDB4NjY0RiwgMHgxM0VDLCAweDY2NTEsIDB4NDU0QiwNCi0gICAgMHg2NjUyLCAweDA4N0QsIDB4NjY1NywgMHgyMTFGLCAweDY2NTksIDB4MjEyMCwgMHg2NjVBLCAweDM0NDEsDQotICAgIDB4NjY1QiwgMHgzOTBELCAweDY2NUMsIDB4MzkwRSwgMHg2NjVELCAweDEzRjEsIDB4NjY1RSwgMHgxM0YwLA0KLSAgICAweDY2NUYsIDB4MTNGNSwgMHg2NjYxLCAweDM5MEYsIDB4NjY2MiwgMHgxM0Y2LCAweDY2NjMsIDB4MzczQSwNCi0gICAgMHg2NjY0LCAweDEzRjIsIDB4NjY2NSwgMHgyMTFFLCAweDY2NjYsIDB4MDU4MCwgMHg2NjY3LCAweDEzRjMsDQotICAgIDB4NjY2OCwgMHgxM0Y0LCAweDY2NjksIDB4MEQ2OSwgMHg2NjZBLCAweDQ1NTEsIDB4NjY2QiwgMHgzOTEwLA0KLSAgICAweDY2NkMsIDB4NDU1MiwgMHg2NjZELCAweDQ1NTMsIDB4NjY2RSwgMHgwREQzLCAweDY2NkYsIDB4MDcyMCwNCi0gICAgMHg2NjcwLCAweDEzRjcsIDB4NjY3MywgMHgyMTIyLCAweDY2NzQsIDB4MEE1NiwgMHg2Njc2LCAweDA5QTUsDQotICAgIDB4NjY3NywgMHg0MUY5LCAweDY2NzgsIDB4NDFGQSwgMHg2NjdBLCAweDBCOTAsIDB4NjY3QiwgMHg0NTU0LA0KLSAgICAweDY2N0UsIDB4NEJFQywgMHg2NjgwLCAweDQ1NTUsIDB4NjY4MSwgMHgwNkJGLCAweDY2ODMsIDB4MTNGOCwNCi0gICAgMHg2Njg0LCAweDEzRkMsIDB4NjY4NywgMHgwNTRCLCAweDY2ODgsIDB4MTNGOSwgMHg2Njg5LCAweDEzRkIsDQotICAgIDB4NjY4QiwgMHg0QkVELCAweDY2OEMsIDB4NEJFRSwgMHg2NjhELCAweDQxRkIsIDB4NjY4RSwgMHgxM0ZBLA0KLSAgICAweDY2OTAsIDB4NDU1NiwgMHg2NjkxLCAweDA5NzUsIDB4NjY5MiwgMHg0NTU3LCAweDY2OTYsIDB4MEI4NiwNCi0gICAgMHg2Njk3LCAweDA0ODksIDB4NjY5OCwgMHgxM0ZELCAweDY2OTksIDB4MjEyMywgMHg2NjlELCAweDEzRkUsDQotICAgIDB4NjZBMCwgMHgyMTI0LCAweDY2QTIsIDB4MEJDNiwgMHg2NkE0LCAweDM5MTIsIDB4NjZBNiwgMHgwRkI5LA0KLSAgICAweDY2QUIsIDB4MDg5MSwgMHg2NkFELCAweDQ1NTksIDB4NjZBRSwgMHgwRTNCLCAweDY2QjEsIDB4NDU1QSwNCi0gICAgMHg2NkIyLCAweDIxMjUsIDB4NjZCMywgMHg0QkVGLCAweDY2QjQsIDB4MEU2QiwgMHg2NkI1LCAweDQ1NUIsDQotICAgIDB4NjZCOCwgMHgxNDA1LCAweDY2QjksIDB4MTQwMCwgMHg2NkJCLCAweDQxRkMsIDB4NjZCQywgMHgxNDAzLA0KLSAgICAweDY2QkUsIDB4MTQwMiwgMHg2NkJGLCAweDIxMjYsIDB4NjZDMCwgMHg0QkYwLCAweDY2QzEsIDB4MTNGRiwNCi0gICAgMHg2NkM0LCAweDE0MDQsIDB4NjZDNiwgMHgzNDU1LCAweDY2QzcsIDB4MENCNiwgMHg2NkM4LCAweDM5MTMsDQotICAgIDB4NjZDOSwgMHgxNDAxLCAweDY2Q0YsIDB4NEJGMSwgMHg2NkQ2LCAweDE0MDYsIDB4NjZEOSwgMHgwOTc2LA0KLSAgICAweDY2REEsIDB4MTQwNywgMHg2NkRCLCAweDQxRkQsIDB4NjZEQywgMHgwRjM1LCAweDY2REQsIDB4MEQyRSwNCi0gICAgMHg2NkUwLCAweDE0MDgsIDB4NjZFNiwgMHgxNDBBLCAweDY2RTgsIDB4NDFGRSwgMHg2NkU5LCAweDE0MEIsDQotICAgIDB4NjZFQywgMHgzOTE0LCAweDY2RjAsIDB4MTQwQywgMHg2NkYyLCAweDA2QzIsIDB4NjZGMywgMHgwNEVBLA0KLSAgICAweDY2RjQsIDB4MDdDQiwgMHg2NkY1LCAweDE0MEQsIDB4NjZGNywgMHgxNDBFLCAweDY2RjgsIDB4MDk3QiwNCi0gICAgMHg2NkY5LCAweDBBRTQsIDB4NjZGQSwgMHgyMTI3LCAweDY2RkIsIDB4MjBCMSwgMHg2NkZDLCAweDEwRUQsDQotICAgIDB4NjZGRCwgMHgwQUMwLCAweDY2RkUsIDB4MEFCRiwgMHg2NkZGLCAweDBCMzgsIDB4NjcwMCwgMHgwODM3LA0KLSAgICAweDY3MDEsIDB4NDU1RiwgMHg2NzAzLCAweDEwNEIsIDB4NjcwNSwgMHgzOTE1LCAweDY3MDgsIDB4MDc0NCwNCi0gICAgMHg2NzA5LCAweDBGMTcsIDB4NjcwQiwgMHgwRTRFLCAweDY3MEQsIDB4MERGMCwgMHg2NzBFLCAweDIxMjgsDQotICAgIDB4NjcwRiwgMHgxNDBGLCAweDY3MTIsIDB4NDU2MCwgMHg2NzEzLCAweDM5MTYsIDB4NjcxNCwgMHgwODYzLA0KLSAgICAweDY3MTUsIDB4MEJEQiwgMHg2NzE2LCAweDE0MTAsIDB4NjcxNywgMHgwRkQ1LCAweDY3MTksIDB4NDU2MiwNCi0gICAgMHg2NzFCLCAweDBFNkMsIDB4NjcxRCwgMHgwQkM3LCAweDY3MUUsIDB4MTQxMSwgMHg2NzFGLCAweDA2MzgsDQotICAgIDB4NjcyNSwgMHg0QkYyLCAweDY3MjYsIDB4MTQxMiwgMHg2NzI3LCAweDE0MTMsIDB4NjcyOCwgMHgwRUU2LA0KLSAgICAweDY3MkEsIDB4MEVCMCwgMHg2NzJCLCAweDBFQTQsIDB4NjcyQywgMHgwRThBLCAweDY3MkQsIDB4MDg3MywNCi0gICAgMHg2NzJFLCAweDE0MTUsIDB4NjczMSwgMHgwOTE3LCAweDY3MzMsIDB4MzkxNywgMHg2NzM0LCAweDBFN0YsDQotICAgIDB4NjczNSwgMHg0QkYzLCAweDY3MzYsIDB4MTQxNywgMHg2NzM3LCAweDE0MUEsIDB4NjczOCwgMHgxNDE5LA0KLSAgICAweDY3M0EsIDB4MDYzNSwgMHg2NzNELCAweDA2N0EsIDB4NjczRiwgMHgxNDE2LCAweDY3NDEsIDB4MTQxOCwNCi0gICAgMHg2NzQzLCAweDM1QjcsIDB4Njc0NiwgMHgxNDFCLCAweDY3NDcsIDB4NDFGRiwgMHg2NzQ4LCAweDM5MTgsDQotICAgIDB4Njc0OSwgMHgwQTNGLCAweDY3NEMsIDB4MzkxOSwgMHg2NzRELCAweDQ1NjUsIDB4Njc0RSwgMHgwRjY1LA0KLSAgICAweDY3NEYsIDB4MDQ4RCwgMHg2NzUwLCAweDA4NTAsIDB4Njc1MSwgMHgwQjFDLCAweDY3NTMsIDB4MDkwOSwNCi0gICAgMHg2NzU0LCAweDQ1NjYsIDB4Njc1NSwgMHg0QkY0LCAweDY3NTYsIDB4MDlEQiwgMHg2NzU5LCAweDE0MUUsDQotICAgIDB4Njc1QywgMHgwQzQ4LCAweDY3NUQsIDB4NDU2NywgMHg2NzVFLCAweDE0MUMsIDB4Njc1RiwgMHgwQjBCLA0KLSAgICAweDY3NjAsIDB4MTQxRCwgMHg2NzYxLCAweDA5REEsIDB4Njc2MiwgMHgwRUU5LCAweDY3NjMsIDB4MTQxRiwNCi0gICAgMHg2NzY0LCAweDE0MjAsIDB4Njc2NSwgMHgwRjUyLCAweDY3NjYsIDB4MjEyQSwgMHg2NzZBLCAweDE0MjUsDQotICAgIDB4Njc2RCwgMHgwN0NDLCAweDY3NkUsIDB4MzU3MSwgMHg2NzZGLCAweDBEMEIsIDB4Njc3MCwgMHgxNDIyLA0KLSAgICAweDY3NzEsIDB4MEM2NiwgMHg2NzcyLCAweDEzRTMsIDB4Njc3MywgMHgxM0U3LCAweDY3NzQsIDB4NDU2QiwNCi0gICAgMHg2Nzc1LCAweDA2NjksIDB4Njc3NiwgMHgzOTFBLCAweDY3NzcsIDB4MENGRCwgMHg2NzdCLCAweDM5MUIsDQotICAgIDB4Njc3QywgMHgxNDI0LCAweDY3N0UsIDB4MDlBNiwgMHg2NzdGLCAweDBENTgsIDB4Njc4MCwgMHg0QkY1LA0KLSAgICAweDY3ODEsIDB4NDIwMCwgMHg2Nzg1LCAweDE0MkEsIDB4Njc4NywgMHgwRDhFLCAweDY3ODksIDB4MTQyMSwNCi0gICAgMHg2NzhCLCAweDE0MjcsIDB4Njc4QywgMHgxNDI2LCAweDY3OEYsIDB4NEJGNiwgMHg2NzkwLCAweDBBNzMsDQotICAgIDB4Njc5MSwgMHg0QkY3LCAweDY3OTIsIDB4NDU2RCwgMHg2NzkzLCAweDQyMDEsIDB4Njc5NSwgMHgwRTlCLA0KLSAgICAweDY3OTcsIDB4MEY5QiwgMHg2Nzk4LCAweDQyMDIsIDB4Njc5QSwgMHgwRTk1LCAweDY3OUIsIDB4NDIwMywNCi0gICAgMHg2NzlDLCAweDA1NEMsIDB4Njc5RCwgMHgwOEFDLCAweDY3QTAsIDB4MEZFRSwgMHg2N0ExLCAweDE0MjksDQotICAgIDB4NjdBMiwgMHgwQTNCLCAweDY3QTQsIDB4NEJGOCwgMHg2N0E2LCAweDE0MjgsIDB4NjdBOSwgMHgxNDIzLA0KLSAgICAweDY3QUYsIDB4MDc4MywgMHg2N0IwLCAweDM5MUMsIDB4NjdCMSwgMHg0QkY5LCAweDY3QjIsIDB4MzkxRCwNCi0gICAgMHg2N0IzLCAweDE0MkYsIDB4NjdCNCwgMHgxNDJELCAweDY3QjUsIDB4NEJGQSwgMHg2N0I2LCAweDA1NEQsDQotICAgIDB4NjdCNywgMHgxNDJCLCAweDY3QjgsIDB4MTQzMSwgMHg2N0I5LCAweDE0MzcsIDB4NjdCQiwgMHgyMTJCLA0KLSAgICAweDY3QkUsIDB4NEJGQiwgMHg2N0MwLCAweDIxMkQsIDB4NjdDMSwgMHgwQjI4LCAweDY3QzMsIDB4NDU3MSwNCi0gICAgMHg2N0M0LCAweDBFMTEsIDB4NjdDNiwgMHgxNDM5LCAweDY3QzgsIDB4NDU3MiwgMHg2N0NBLCAweDBEOTQsDQotICAgIDB4NjdDRSwgMHgxNDM4LCAweDY3Q0YsIDB4MEQyNiwgMHg2N0QwLCAweDBFNkQsIDB4NjdEMSwgMHgwNUY3LA0KLSAgICAweDY3RDIsIDB4NDU3MywgMHg2N0QzLCAweDBBOUIsIDB4NjdENCwgMHgwOTRBLCAweDY3RDcsIDB4MzkxRiwNCi0gICAgMHg2N0Q4LCAweDBCRUYsIDB4NjdEOSwgMHgzOTIwLCAweDY3REEsIDB4MEYxOCwgMHg2N0RCLCAweDQ1NzQsDQotICAgIDB4NjdERCwgMHgxNDM0LCAweDY3REUsIDB4MTQzMywgMHg2N0UyLCAweDE0MzUsIDB4NjdFNCwgMHgxNDMyLA0KLSAgICAweDY3RTcsIDB4MTQzQSwgMHg2N0U5LCAweDE0MzAsIDB4NjdFQywgMHgxNDJFLCAweDY3RUUsIDB4MTQzNiwNCi0gICAgMHg2N0VGLCAweDE0MkMsIDB4NjdGMCwgMHgzOTIxLCAweDY3RjEsIDB4MEJBQSwgMHg2N0YzLCAweDBGMDQsDQotICAgIDB4NjdGNCwgMHgwOEYyLCAweDY3RjUsIDB4MDg2NCwgMHg2N0Y3LCAweDQ1NzUsIDB4NjdGOSwgMHgzOTFFLA0KLSAgICAweDY3RkEsIDB4MUU5QSwgMHg2N0ZCLCAweDA4MkEsIDB4NjdGQywgMHg0MjA0LCAweDY3RkUsIDB4MEU5RCwNCi0gICAgMHg2N0ZGLCAweDA1OUYsIDB4NjgwMSwgMHgzNkYyLCAweDY4MDIsIDB4MEJFQSwgMHg2ODAzLCAweDBDQTIsDQotICAgIDB4NjgwNCwgMHgwNEVCLCAweDY4MDUsIDB4MUUwNywgMHg2ODEwLCAweDQ1NzAsIDB4NjgxMywgMHgwQTk2LA0KLSAgICAweDY4MTYsIDB4MEE1OCwgMHg2ODE3LCAweDA3MDAsIDB4NjgxOCwgMHg0NTc5LCAweDY4MUQsIDB4NDIwNSwNCi0gICAgMHg2ODFFLCAweDE0M0MsIDB4NjgxRiwgMHg0NTdBLCAweDY4MjEsIDB4MDdDRCwgMHg2ODIyLCAweDA1REEsDQotICAgIDB4NjgyOCwgMHg0QkZDLCAweDY4MjksIDB4MTQzRSwgMHg2ODJBLCAweDA1RDIsIDB4NjgyQiwgMHgxNDQ0LA0KLSAgICAweDY4MkMsIDB4MzkyMiwgMHg2ODJELCAweDQ1N0IsIDB4NjgzMCwgMHgzOTIzLCAweDY4MzEsIDB4MzkyNCwNCi0gICAgMHg2ODMyLCAweDE0NDEsIDB4NjgzMywgMHg0NTdELCAweDY4MzQsIDB4MEE5NywgMHg2ODM4LCAweDA1QTksDQotICAgIDB4NjgzOSwgMHgwODFDLCAweDY4M0IsIDB4NDU3RSwgMHg2ODNDLCAweDA1QTgsIDB4NjgzRCwgMHgwODNGLA0KLSAgICAweDY4M0UsIDB4NDU3RiwgMHg2ODQwLCAweDE0M0YsIDB4Njg0MSwgMHgwNzNCLCAweDY4NDIsIDB4MDcyMSwNCi0gICAgMHg2ODQzLCAweDBDNjcsIDB4Njg0NCwgMHgyMTJGLCAweDY4NDUsIDB4NDU4MCwgMHg2ODQ2LCAweDE0M0QsDQotICAgIDB4Njg0OCwgMHgwNDhBLCAweDY4NDksIDB4NDU4MSwgMHg2ODRDLCAweDQ1ODIsIDB4Njg0RCwgMHgxNDQwLA0KLSAgICAweDY4NEUsIDB4MTQ0MiwgMHg2ODUwLCAweDA2QzUsIDB4Njg1MSwgMHgwNzAyLCAweDY4NTIsIDB4MjEyQywNCi0gICAgMHg2ODUzLCAweDA1RjgsIDB4Njg1NCwgMHgwNjY1LCAweDY4NTUsIDB4NDU4MywgMHg2ODU3LCAweDQ1ODQsDQotICAgIDB4Njg1OSwgMHgxNDQ1LCAweDY4NUIsIDB4MzkyNSwgMHg2ODVDLCAweDA4NjksIDB4Njg1RCwgMHgwRTlGLA0KLSAgICAweDY4NUYsIDB4MDg4NSwgMHg2ODYzLCAweDE0NDYsIDB4Njg2NywgMHgwREEyLCAweDY4NkIsIDB4NDU4NiwNCi0gICAgMHg2ODZFLCAweDQ1ODcsIDB4Njg3MiwgMHgzOTI2LCAweDY4NzQsIDB4MTQ1MiwgMHg2ODc1LCAweDM5MjcsDQotICAgIDB4Njg3NiwgMHgwNTMzLCAweDY4NzcsIDB4MTQ0NywgMHg2ODdBLCAweDM5MjgsIDB4Njg3QywgMHg0NTg4LA0KLSAgICAweDY4N0UsIDB4MTQ1OCwgMHg2ODdGLCAweDE0NDgsIDB4Njg4MSwgMHgwRjhBLCAweDY4ODIsIDB4NDU4OSwNCi0gICAgMHg2ODgzLCAweDE0NEYsIDB4Njg4NCwgMHgzOTI5LCAweDY4ODUsIDB4MEQxNSwgMHg2ODg2LCAweDRCRkQsDQotICAgIDB4Njg4RCwgMHgxNDU3LCAweDY4OEUsIDB4MUU5QywgMHg2ODhGLCAweDE0NEEsIDB4Njg5MCwgMHg0NThBLA0KLSAgICAweDY4OTMsIDB4MDQ3OCwgMHg2ODk0LCAweDE0NEMsIDB4Njg5NiwgMHg0NThCLCAweDY4OTcsIDB4MDdDRSwNCi0gICAgMHg2ODk4LCAweDQ1OEQsIDB4Njg5OSwgMHg0NThFLCAweDY4OUEsIDB4NDU4RiwgMHg2ODlCLCAweDE0NEUsDQotICAgIDB4Njg5QywgMHg0NTkwLCAweDY4OUQsIDB4MTQ0RCwgMHg2ODlGLCAweDE0NDksIDB4NjhBMCwgMHgxNDU0LA0KLSAgICAweDY4QTIsIDB4MDlBNywgMHg2OEEzLCAweDQyMDYsIDB4NjhBNSwgMHgzOTJBLCAweDY4QTYsIDB4MTFCRSwNCi0gICAgMHg2OEE3LCAweDA3OUMsIDB4NjhBOCwgMHgwRjY2LCAweDY4QUEsIDB4NDU5MSwgMHg2OEFCLCAweDQ1OTIsDQotICAgIDB4NjhBRCwgMHgxNDRCLCAweDY4QUYsIDB4MEMxMCwgMHg2OEIwLCAweDA1ODEsIDB4NjhCMSwgMHgwODFELA0KLSAgICAweDY4QjIsIDB4MzkyQiwgMHg2OEIzLCAweDE0NDMsIDB4NjhCNCwgMHg0NTkzLCAweDY4QjUsIDB4MTQ1MywNCi0gICAgMHg2OEI2LCAweDA1QkYsIDB4NjhCOSwgMHgxNDUxLCAweDY4QkEsIDB4MTQ1NSwgMHg2OEJCLCAweDQ1OTQsDQotICAgIDB4NjhCQywgMHgwQzY4LCAweDY4QzMsIDB4NDU5OCwgMHg2OEM0LCAweDA2M0EsIDB4NjhDNSwgMHg0NTk5LA0KLSAgICAweDY4QzYsIDB4MTQ3MywgMHg2OEM4LCAweDIwQUYsIDB4NjhDOSwgMHgwRUQ1LCAweDY4Q0EsIDB4MTQ1QSwNCi0gICAgMHg2OENCLCAweDA2MzksIDB4NjhDQywgMHg0NTlBLCAweDY4Q0QsIDB4MTQ2MSwgMHg2OENGLCAweDIxMzAsDQotICAgIDB4NjhEMCwgMHgzOTJDLCAweDY4RDIsIDB4MEU2RSwgMHg2OEQ0LCAweDE0NjIsIDB4NjhENSwgMHgxNDY0LA0KLSAgICAweDY4RDYsIDB4MzkyRCwgMHg2OEQ3LCAweDE0NjgsIDB4NjhEOCwgMHgxNDVDLCAweDY4RDksIDB4NDU5QiwNCi0gICAgMHg2OERBLCAweDBCNjgsIDB4NjhERiwgMHgwQzY5LCAweDY4RTAsIDB4MTQ2QywgMHg2OEUxLCAweDE0NUYsDQotICAgIDB4NjhFMywgMHgxNDY5LCAweDY4RTQsIDB4NDU5QywgMHg2OEU1LCAweDQ1OUQsIDB4NjhFNywgMHgxNDYzLA0KLSAgICAweDY4RTgsIDB4MzkyRSwgMHg2OEVCLCAweDRCRkUsIDB4NjhFQywgMHg0NTlFLCAweDY4RUQsIDB4MzkyRiwNCi0gICAgMHg2OEVFLCAweDA5RkYsIDB4NjhFRiwgMHgxNDZELCAweDY4RjAsIDB4MzkzMCwgMHg2OEYxLCAweDM5MzEsDQotICAgIDB4NjhGMiwgMHgwQTU3LCAweDY4RjUsIDB4NEJGRiwgMHg2OEY3LCAweDQ1OUYsIDB4NjhGOSwgMHgxNDZCLA0KLSAgICAweDY4RkEsIDB4MDVGOSwgMHg2OEZCLCAweDQ1OTUsIDB4NjhGQywgMHgzOTMyLCAweDY5MDAsIDB4MEZGNiwNCi0gICAgMHg2OTAxLCAweDE0NTksIDB4NjkwMywgMHg0NUEwLCAweDY5MDQsIDB4MTQ2NywgMHg2OTA1LCAweDA0OUMsDQotICAgIDB4NjkwNywgMHg0NUExLCAweDY5MDgsIDB4MTQ1QiwgMHg2OTBBLCAweDQyMDcsIDB4NjkwQiwgMHgwRUM2LA0KLSAgICAweDY5MEMsIDB4MTQ2MCwgMHg2OTBELCAweDA5RTgsIDB4NjkwRSwgMHgwQkUzLCAweDY5MEYsIDB4MTQ1NiwNCi0gICAgMHg2OTExLCAweDM5MzMsIDB4NjkxMiwgMHgxNDY2LCAweDY5MTMsIDB4MzkzNCwgMHg2OTE3LCAweDRDMDAsDQotICAgIDB4NjkxOSwgMHgwQTQwLCAweDY5MUEsIDB4MTQ3MCwgMHg2OTFCLCAweDA1Q0YsIDB4NjkxQywgMHgwNzU1LA0KLSAgICAweDY5MjEsIDB4MTQ3MiwgMHg2OTIyLCAweDE0NUQsIDB4NjkyMywgMHgxNDcxLCAweDY5MjUsIDB4MTQ2QSwNCi0gICAgMHg2OTI2LCAweDE0NUUsIDB4NjkyOCwgMHgxNDZFLCAweDY5MkEsIDB4MTQ2RiwgMHg2OTMwLCAweDE0ODAsDQotICAgIDB4NjkzMywgMHg0QzAxLCAweDY5MzQsIDB4MENBNiwgMHg2OTM1LCAweDM5MzUsIDB4NjkzNiwgMHgxNDY1LA0KLSAgICAweDY5MzgsIDB4NEMwMiwgMHg2OTM5LCAweDE0N0MsIDB4NjkzQiwgMHgzOTM2LCAweDY5M0QsIDB4MTQ3RSwNCi0gICAgMHg2OTNGLCAweDBCRjQsIDB4Njk0MiwgMHg0MjBBLCAweDY5NDYsIDB4NDVBNSwgMHg2OTQ5LCAweDQyMDgsDQotICAgIDB4Njk0QSwgMHgwRjM2LCAweDY5NTMsIDB4MERFOCwgMHg2OTU0LCAweDE0NzksIDB4Njk1NSwgMHgwQjJBLA0KLSAgICAweDY5NTcsIDB4MzkzNywgMHg2OTU5LCAweDE0N0YsIDB4Njk1QSwgMHgwQUMxLCAweDY5NUIsIDB4NEMwMywNCi0gICAgMHg2OTVDLCAweDE0NzYsIDB4Njk1RCwgMHgxNDgzLCAweDY5NUUsIDB4MTQ4MiwgMHg2OTYwLCAweDBDQzcsDQotICAgIDB4Njk2MSwgMHgxNDgxLCAweDY5NjIsIDB4MENDMiwgMHg2OTYzLCAweDM5MzgsIDB4Njk2NCwgMHg0MjBCLA0KLSAgICAweDY5NjUsIDB4NEMwNCwgMHg2OTY4LCAweDIxMzIsIDB4Njk2OSwgMHg0NUE2LCAweDY5NkEsIDB4MTQ4NSwNCi0gICAgMHg2OTZCLCAweDE0NzgsIDB4Njk2QywgMHg0NUE3LCAweDY5NkQsIDB4MDZDMCwgMHg2OTZFLCAweDE0N0IsDQotICAgIDB4Njk2RiwgMHgwOTY3LCAweDY5NzIsIDB4MzkzOSwgMHg2OTczLCAweDBEMTYsIDB4Njk3NCwgMHgxNDdELA0KLSAgICAweDY5NzUsIDB4MDZDMywgMHg2OTc3LCAweDE0NzUsIDB4Njk3OCwgMHgxNDc3LCAweDY5NzksIDB4MTQ3NCwNCi0gICAgMHg2OTdBLCAweDQ1QTgsIDB4Njk3QywgMHgwRkQ2LCAweDY5N0QsIDB4MDVCOCwgMHg2OTdFLCAweDE0N0EsDQotICAgIDB4Njk3RiwgMHgzOTNBLCAweDY5ODAsIDB4MzkzQiwgMHg2OTgxLCAweDE0ODQsIDB4Njk4MiwgMHgwNTkzLA0KLSAgICAweDY5ODYsIDB4Mzc0MCwgMHg2OThBLCAweDA4NTcsIDB4Njk4RSwgMHgwNEZGLCAweDY5OTEsIDB4MTQ5NSwNCi0gICAgMHg2OTkyLCAweDQ1QTksIDB4Njk5NCwgMHgwRkQ3LCAweDY5OTUsIDB4MTQ5OCwgMHg2OTk2LCAweDQ1QUIsDQotICAgIDB4Njk5OCwgMHgyMTM0LCAweDY5OUIsIDB4MEEwMCwgMHg2OTlDLCAweDE0OTcsIDB4NjlBMCwgMHgxNDk2LA0KLSAgICAweDY5QTUsIDB4NDIwQywgMHg2OUE2LCAweDM5M0MsIDB4NjlBNywgMHgxNDkzLCAweDY5QTgsIDB4NEMwNSwNCi0gICAgMHg2OUFCLCAweDRDMDYsIDB4NjlBRCwgMHgzOTNELCAweDY5QUUsIDB4MTQ4NywgMHg2OUFGLCAweDRDMDcsDQotICAgIDB4NjlCMCwgMHg0NUFDLCAweDY5QjEsIDB4MTRBNCwgMHg2OUIyLCAweDE0ODYsIDB4NjlCNCwgMHgxNDk5LA0KLSAgICAweDY5QjcsIDB4MzkzRSwgMHg2OUJBLCAweDQ1QUQsIDB4NjlCQiwgMHgxNDkxLCAweDY5QkMsIDB4NDVBRSwNCi0gICAgMHg2OUJFLCAweDE0OEMsIDB4NjlCRiwgMHgxNDg5LCAweDY5QzAsIDB4NDVBRiwgMHg2OUMxLCAweDE0OEEsDQotICAgIDB4NjlDMywgMHgxNDkyLCAweDY5QzcsIDB4MUQzMywgMHg2OUNBLCAweDE0OEYsIDB4NjlDQiwgMHgwN0NGLA0KLSAgICAweDY5Q0MsIDB4MEJFNCwgMHg2OUNELCAweDBBRTYsIDB4NjlDRSwgMHgxNDhELCAweDY5Q0YsIDB4NDIwRCwNCi0gICAgMHg2OUQwLCAweDE0ODgsIDB4NjlEMSwgMHg0NUIwLCAweDY5RDMsIDB4MTQ4QiwgMHg2OUQ2LCAweDM5M0YsDQotICAgIDB4NjlENywgMHgzOTQwLCAweDY5RDgsIDB4MEYzNywgMHg2OUQ5LCAweDBFOTgsIDB4NjlERCwgMHgxNDkwLA0KLSAgICAweDY5REUsIDB4MTQ5QSwgMHg2OUUyLCAweDIxMzUsIDB4NjlFMywgMHg0NUI0LCAweDY5RTUsIDB4NEMwOCwNCi0gICAgMHg2OUU3LCAweDE0QTIsIDB4NjlFOCwgMHgxNDlCLCAweDY5RTksIDB4NDIxMCwgMHg2OUVBLCAweDM0MTEsDQotICAgIDB4NjlFQiwgMHgxNEE4LCAweDY5RUQsIDB4MTRBNiwgMHg2OUVFLCAweDQ1QjUsIDB4NjlFRiwgMHg0NUI2LA0KLSAgICAweDY5RjEsIDB4NEMwOSwgMHg2OUYyLCAweDE0QTEsIDB4NjlGMywgMHg0NUI3LCAweDY5RjQsIDB4NDVCOSwNCi0gICAgMHg2OUY1LCAweDQyMTEsIDB4NjlGNiwgMHgzNzNGLCAweDY5RjksIDB4MTRBMCwgMHg2OUZCLCAweDBCRUMsDQotICAgIDB4NjlGRCwgMHgwQUU3LCAweDY5RkUsIDB4NDVCQSwgMHg2OUZGLCAweDE0OUUsIDB4NkEwMSwgMHgzOTQxLA0KLSAgICAweDZBMDIsIDB4MTQ5QywgMHg2QTA1LCAweDE0QTMsIDB4NkEwQSwgMHgxNEE5LCAweDZBMEIsIDB4MEQ4OSwNCi0gICAgMHg2QTBDLCAweDE0QUYsIDB4NkEwRiwgMHgzOTQyLCAweDZBMTEsIDB4NDVCQiwgMHg2QTEyLCAweDE0QUEsDQotICAgIDB4NkExMywgMHgxNEFELCAweDZBMTQsIDB4MTRBNywgMHg2QTE1LCAweDM5NDMsIDB4NkExNywgMHgwQkIyLA0KLSAgICAweDZBMTksIDB4MERBQSwgMHg2QTFBLCAweDQ1QkMsIDB4NkExQiwgMHgxNDlELCAweDZBMUQsIDB4NDVCRCwNCi0gICAgMHg2QTFFLCAweDE0QTUsIDB4NkExRiwgMHgwOUE4LCAweDZBMjEsIDB4MEVEQiwgMHg2QTIyLCAweDE0QjksDQotICAgIDB4NkEyMywgMHgxNEFDLCAweDZBMjgsIDB4Mzk0NCwgMHg2QTI5LCAweDA3NTYsIDB4NkEyQSwgMHgwNTIzLA0KLSAgICAweDZBMkIsIDB4MDVCRCwgMHg2QTJFLCAweDE0OTQsIDB4NkEzMCwgMHgyMTM2LCAweDZBMzIsIDB4NDVCRiwNCi0gICAgMHg2QTMzLCAweDQ1QzAsIDB4NkEzNCwgMHgzOTQ1LCAweDZBMzUsIDB4MDlBOSwgMHg2QTM2LCAweDE0QjEsDQotICAgIDB4NkEzOCwgMHgxNEI4LCAweDZBMzksIDB4MDkyNSwgMHg2QTNBLCAweDA1RDAsIDB4NkEzQiwgMHg0MjEzLA0KLSAgICAweDZBM0QsIDB4MEI2QywgMHg2QTNFLCAweDM5NDYsIDB4NkEzRiwgMHg0NUMxLCAweDZBNDQsIDB4MTRBRSwNCi0gICAgMHg2QTQ1LCAweDM5NDcsIDB4NkE0NiwgMHgyMTM4LCAweDZBNDcsIDB4MTRCMywgMHg2QTQ4LCAweDE0QjcsDQotICAgIDB4NkE0OSwgMHg0NUMyLCAweDZBNEEsIDB4NEMwQSwgMHg2QTRCLCAweDA2QUUsIDB4NkE0RSwgMHg0NUM0LA0KLSAgICAweDZBNTAsIDB4Mzk0OCwgMHg2QTUxLCAweDM5NDksIDB4NkE1MiwgMHg0NUM1LCAweDZBNTQsIDB4M0MzNCwNCi0gICAgMHg2QTU1LCAweDRDMEIsIDB4NkE1NiwgMHgzOTRBLCAweDZBNTgsIDB4MDY2NiwgMHg2QTU5LCAweDE0QjUsDQotICAgIDB4NkE1QiwgMHgzOTRCLCAweDZBNUYsIDB4MDYzQiwgMHg2QTYxLCAweDBDQTMsIDB4NkE2MiwgMHgxNEI0LA0KLSAgICAweDZBNjQsIDB4NDVDNiwgMHg2QTY2LCAweDE0QjYsIDB4NkE2NywgMHg0QzBDLCAweDZBNkIsIDB4MjEzNywNCi0gICAgMHg2QTcxLCAweDRDMEQsIDB4NkE3MiwgMHgxNEIwLCAweDZBNzMsIDB4MjEzOSwgMHg2QTc4LCAweDE0QjIsDQotICAgIDB4NkE3QSwgMHg0NUMzLCAweDZBN0UsIDB4MjEzQSwgMHg2QTdGLCAweDA1QkUsIDB4NkE4MCwgMHgwQjg3LA0KLSAgICAweDZBODMsIDB4Mzk0QywgMHg2QTg0LCAweDE0QkQsIDB4NkE4OSwgMHgzOTRELCAweDZBOEIsIDB4NDVDOCwNCi0gICAgMHg2QThELCAweDE0QkIsIDB4NkE4RSwgMHgwNzlELCAweDZBOTAsIDB4MTRCQSwgMHg2QTkxLCAweDM5NEUsDQotICAgIDB4NkE5NCwgMHg0MjE1LCAweDZBOTcsIDB4MTRDMCwgMHg2QTlDLCAweDE0M0IsIDB4NkE5RCwgMHgzOTRGLA0KLSAgICAweDZBOUUsIDB4Mzk1MCwgMHg2QTlGLCAweDM5NTEsIDB4NkFBMCwgMHgxNEJDLCAweDZBQTEsIDB4NDVDQSwNCi0gICAgMHg2QUEyLCAweDE0QkUsIDB4NkFBMywgMHgxNEJGLCAweDZBQTUsIDB4NDIxNiwgMHg2QUFBLCAweDE0Q0IsDQotICAgIDB4NkFBQiwgMHg0NUNDLCAweDZBQUMsIDB4MTRDNywgMHg2QUFFLCAweDE0NTAsIDB4NkFBRiwgMHg0QzBFLA0KLSAgICAweDZBQjMsIDB4MTRDNiwgMHg2QUI4LCAweDE0QzUsIDB4NkFCQiwgMHgxNEMyLCAweDZBQkQsIDB4NDVDRCwNCi0gICAgMHg2QUMxLCAweDE0QUIsIDB4NkFDMiwgMHgxNEM0LCAweDZBQzMsIDB4MTRDMywgMHg2QUM2LCAweDQ1Q0UsDQotICAgIDB4NkFDOCwgMHg0QzBGLCAweDZBQzksIDB4NEMxMCwgMHg2QUQwLCAweDQ1RDAsIDB4NkFEMSwgMHgxNEM5LA0KLSAgICAweDZBRDMsIDB4MEZDQywgMHg2QUQ0LCAweDQ1Q0YsIDB4NkFEQSwgMHgxNENDLCAweDZBREIsIDB4MDZGMywNCi0gICAgMHg2QURDLCAweDM5NTIsIDB4NkFERCwgMHg0NUQxLCAweDZBREUsIDB4MTRDOCwgMHg2QURGLCAweDE0Q0EsDQotICAgIDB4NkFFMiwgMHgyMTNCLCAweDZBRTQsIDB4MjEzQywgMHg2QUU3LCAweDM5NTMsIDB4NkFFOCwgMHgwRDNCLA0KLSAgICAweDZBRUEsIDB4MTRDRCwgMHg2QUVDLCAweDM5NTQsIDB4NkFGMSwgMHg0NUQ0LCAweDZBRjIsIDB4NDVENSwNCi0gICAgMHg2QUYzLCAweDQ1RDYsIDB4NkFGOCwgMHg0RUI4LCAweDZBRkEsIDB4MTREMSwgMHg2QUZCLCAweDE0Q0UsDQotICAgIDB4NkFGRCwgMHg0NUQ3LCAweDZCMDMsIDB4NEMxMSwgMHg2QjA0LCAweDBGNUQsIDB4NkIwNSwgMHgxNENGLA0KLSAgICAweDZCMEEsIDB4MTQ5RiwgMHg2QjBCLCAweDQ1RDksIDB4NkIwRiwgMHg0NURBLCAweDZCMTAsIDB4NDVEQiwNCi0gICAgMHg2QjExLCAweDQ1REMsIDB4NkIxMiwgMHgxNEQyLCAweDZCMTYsIDB4MTREMywgMHg2QjE3LCAweDQ1REUsDQotICAgIDB4NkIxQiwgMHg0MjE4LCAweDZCMUQsIDB4MDRENywgMHg2QjFFLCAweDM5NTUsIDB4NkIxRiwgMHgxNEQ1LA0KLSAgICAweDZCMjAsIDB4MDczRCwgMHg2QjIxLCAweDA4Q0QsIDB4NkIyMywgMHgwNkNELCAweDZCMjQsIDB4Mzk1NiwNCi0gICAgMHg2QjI3LCAweDA1MjQsIDB4NkIyQywgMHg0MjE5LCAweDZCMkYsIDB4NDVFMCwgMHg2QjMyLCAweDBGNDksDQotICAgIDB4NkIzNSwgMHgzOTU3LCAweDZCMzcsIDB4MTRENywgMHg2QjM4LCAweDE0RDYsIDB4NkIzOSwgMHgxNEQ5LA0KLSAgICAweDZCM0EsIDB4MDY1NywgMHg2QjNCLCAweDRDMTIsIDB4NkIzRCwgMHgwNkNFLCAweDZCM0UsIDB4MDVGQSwNCi0gICAgMHg2QjNGLCAweDRDMTMsIDB4NkI0MywgMHgxNERDLCAweDZCNDYsIDB4Mzk1OCwgMHg2QjQ3LCAweDE0REIsDQotICAgIDB4NkI0OSwgMHgxNERELCAweDZCNEEsIDB4NDVFMSwgMHg2QjRDLCAweDA1NEUsIDB4NkI0RSwgMHgwQjc1LA0KLSAgICAweDZCNTAsIDB4MTRERSwgMHg2QjUzLCAweDA1RkIsIDB4NkI1NCwgMHgxNEUwLCAweDZCNTYsIDB4Mzk1OSwNCi0gICAgMHg2QjU4LCAweDQ1RTIsIDB4NkI1OSwgMHgxNERGLCAweDZCNUIsIDB4MTRFMSwgMHg2QjVGLCAweDE0RTIsDQotICAgIDB4NkI2MCwgMHgzOTVBLCAweDZCNjEsIDB4MTRFMywgMHg2QjYyLCAweDA4QUQsIDB4NkI2MywgMHgwQTU5LA0KLSAgICAweDZCNjQsIDB4MDgxMSwgMHg2QjY1LCAweDM0NEEsIDB4NkI2NiwgMHgwREUyLCAweDZCNjcsIDB4NDIxQSwNCi0gICAgMHg2QjY5LCAweDBFMzIsIDB4NkI2QSwgMHgwRkVBLCAweDZCNkMsIDB4NDVFMywgMHg2QjZGLCAweDA4QzMsDQotICAgIDB4NkI3MiwgMHgzNUQ5LCAweDZCNzMsIDB4MDg0MCwgMHg2Qjc0LCAweDBGQkEsIDB4NkI3NSwgMHg0NUU0LA0KLSAgICAweDZCNzcsIDB4MzQ1NiwgMHg2Qjc4LCAweDE0RTQsIDB4NkI3OSwgMHgxNEU1LCAweDZCN0EsIDB4NDVFNSwNCi0gICAgMHg2QjdCLCAweDA4QUUsIDB4NkI3RCwgMHg0QzE0LCAweDZCN0UsIDB4NEMxNSwgMHg2QjdGLCAweDE0RTYsDQotICAgIDB4NkI4MCwgMHgxNEU3LCAweDZCODEsIDB4NDVFNiwgMHg2QjgyLCAweDM5NUIsIDB4NkI4MywgMHgxNEU5LA0KLSAgICAweDZCODQsIDB4MTRFOCwgMHg2Qjg2LCAweDBFODYsIDB4NkI4OSwgMHgwOTY4LCAweDZCOEEsIDB4MDkxOCwNCi0gICAgMHg2QjhCLCAweDA4OTIsIDB4NkI4RCwgMHgxNEVBLCAweDZCOTUsIDB4MTRFQywgMHg2Qjk2LCAweDA5RTksDQotICAgIDB4NkI5OCwgMHgxNEVCLCAweDZCOUIsIDB4NDVFNywgMHg2QjlFLCAweDE0RUQsIDB4NkJBNCwgMHgxNEVFLA0KLSAgICAweDZCQTksIDB4NDIxQiwgMHg2QkFBLCAweDE0RUYsIDB4NkJBQiwgMHgxNEYwLCAweDZCQUQsIDB4NDIxQywNCi0gICAgMHg2QkFFLCAweDQ1RTgsIDB4NkJBRiwgMHgxNEYxLCAweDZCQjAsIDB4NEMxNiwgMHg2QkIxLCAweDE0RjMsDQotICAgIDB4NkJCMiwgMHgxNEYyLCAweDZCQjMsIDB4MTRGNCwgMHg2QkI0LCAweDA1MjUsIDB4NkJCNSwgMHgwQjg4LA0KLSAgICAweDZCQjcsIDB4MTRGNSwgMHg2QkJBLCAweDA4NzQsIDB4NkJCQiwgMHgwNUFBLCAweDZCQkMsIDB4MTRGNiwNCi0gICAgMHg2QkJELCAweDQ1RUEsIDB4NkJCRSwgMHgzOTVDLCAweDZCQkYsIDB4MEMzQywgMHg2QkMwLCAweDExOUQsDQotICAgIDB4NkJDNSwgMHgwNjNELCAweDZCQzYsIDB4MTRGNywgMHg2QkM3LCAweDQ1RUIsIDB4NkJDOCwgMHg0NUVDLA0KLSAgICAweDZCQzksIDB4NDVFRCwgMHg2QkNCLCAweDE0RjgsIDB4NkJDQywgMHgzNzQ0LCAweDZCQ0QsIDB4MEUzQywNCi0gICAgMHg2QkNFLCAweDBFOTYsIDB4NkJDRiwgMHgzNDRDLCAweDZCRDIsIDB4MEM5RiwgMHg2QkQzLCAweDE0RjksDQotICAgIDB4NkJENCwgMHgwRDdBLCAweDZCRDYsIDB4MjEzRCwgMHg2QkQ3LCAweDQyMUQsIDB4NkJEOCwgMHgwRDhGLA0KLSAgICAweDZCREEsIDB4NDVFRSwgMHg2QkRCLCAweDBFREYsIDB4NkJERiwgMHgxNEZBLCAweDZCRTEsIDB4Mzk1RCwNCi0gICAgMHg2QkU2LCAweDQ1RUYsIDB4NkJFNywgMHg0NUYwLCAweDZCRUIsIDB4MTRGQywgMHg2QkVDLCAweDE0RkIsDQotICAgIDB4NkJFRSwgMHg0NUYxLCAweDZCRUYsIDB4MTRGRSwgMHg2QkYxLCAweDM5NUUsIDB4NkJGMywgMHgxNEZELA0KLSAgICAweDZCRjcsIDB4NEMxNywgMHg2QkY5LCAweDRDMTgsIDB4NkJGRiwgMHg0MjFFLCAweDZDMDIsIDB4NDVGMiwNCi0gICAgMHg2QzA0LCAweDRDMTksIDB4NkMwNSwgMHg0MjFGLCAweDZDMDgsIDB4MTUwMCwgMHg2QzA5LCAweDRDMUEsDQotICAgIDB4NkMwQSwgMHg0NUYzLCAweDZDMEQsIDB4NEMxQiwgMHg2QzBFLCAweDQ1RjQsIDB4NkMwRiwgMHgwOEFGLA0KLSAgICAweDZDMTAsIDB4Mzk1RiwgMHg2QzExLCAweDBFQkQsIDB4NkMxMywgMHgxNTAxLCAweDZDMTQsIDB4MTUwMiwNCi0gICAgMHg2QzE3LCAweDA2M0UsIDB4NkMxQiwgMHgxNTAzLCAweDZDMjMsIDB4MTUwNSwgMHg2QzI0LCAweDE1MDQsDQotICAgIDB4NkMyQywgMHg0QzFDLCAweDZDMzMsIDB4Mzk2MCwgMHg2QzM0LCAweDBBMkIsIDB4NkMzNSwgMHgzOTYxLA0KLSAgICAweDZDMzYsIDB4NDVGNSwgMHg2QzM3LCAweDBEQUIsIDB4NkMzOCwgMHgwNEVDLCAweDZDM0EsIDB4NEY1NSwNCi0gICAgMHg2QzNFLCAweDBENTksIDB4NkMzRiwgMHgyMTNFLCAweDZDNDAsIDB4MEMxMSwgMHg2QzQxLCAweDA5NEIsDQotICAgIDB4NkM0MiwgMHgwNjdCLCAweDZDNEEsIDB4NEMxRCwgMHg2QzRELCAweDQ1RjcsIDB4NkM0RSwgMHgwRDVBLA0KLSAgICAweDZDNTAsIDB4MDhEQSwgMHg2QzUyLCAweDRDMUUsIDB4NkM1NCwgMHg0QzFGLCAweDZDNTUsIDB4MTUwNywNCi0gICAgMHg2QzU3LCAweDA1RkMsIDB4NkM1OSwgMHgzOTYzLCAweDZDNUEsIDB4MDUxQSwgMHg2QzVCLCAweDQ1RjgsDQotICAgIDB4NkM1QywgMHgyMTNGLCAweDZDNUQsIDB4MENDQSwgMHg2QzVFLCAweDE1MDYsIDB4NkM1RiwgMHgwN0QwLA0KLSAgICAweDZDNjAsIDB4MEI5MSwgMHg2QzYyLCAweDE1MDgsIDB4NkM2NywgMHg0NjBBLCAweDZDNjgsIDB4MTUxMCwNCi0gICAgMHg2QzZBLCAweDE1MDksIDB4NkM2RCwgMHg0NUY5LCAweDZDNkYsIDB4MjE0MSwgMHg2QzcwLCAweDBCMjEsDQotICAgIDB4NkM3MiwgMHgwNjdDLCAweDZDNzMsIDB4MTUxMSwgMHg2Qzc0LCAweDQyMjAsIDB4NkM3NiwgMHgzOTY0LA0KLSAgICAweDZDNzksIDB4NEMyMCwgMHg2QzdBLCAweDA3M0UsIDB4NkM3QiwgMHgzOTY1LCAweDZDN0QsIDB4MDYzRiwNCi0gICAgMHg2QzdFLCAweDE1MEYsIDB4NkM4MSwgMHgxNTBELCAweDZDODIsIDB4MTUwQSwgMHg2QzgzLCAweDBGNEEsDQotICAgIDB4NkM4NCwgMHg0NUZBLCAweDZDODUsIDB4Mzk2NiwgMHg2Qzg2LCAweDIxNDAsIDB4NkM4OCwgMHgwQkRDLA0KLSAgICAweDZDODksIDB4NDVGQiwgMHg2QzhDLCAweDBDQjEsIDB4NkM4RCwgMHgxNTBCLCAweDZDOTAsIDB4MTUxMywNCi0gICAgMHg2QzkyLCAweDE1MTIsIDB4NkM5MywgMHgwNkY5LCAweDZDOTQsIDB4NDVGRCwgMHg2Qzk1LCAweDM5NjcsDQotICAgIDB4NkM5NiwgMHgwNTJELCAweDZDOTcsIDB4NDVGRSwgMHg2Qzk4LCAweDQyMjEsIDB4NkM5OSwgMHgwODJCLA0KLSAgICAweDZDOUEsIDB4MTUwQywgMHg2QzlCLCAweDE1MEUsIDB4NkM5QywgMHgzOTY4LCAweDZDQTEsIDB4MEU4NSwNCi0gICAgMHg2Q0EyLCAweDBCNTQsIDB4NkNBQSwgMHgzNzQ5LCAweDZDQUIsIDB4MEVBNSwgMHg2Q0FDLCAweDRDMjEsDQotICAgIDB4NkNBRCwgMHg0NUZGLCAweDZDQUUsIDB4MTUxQiwgMHg2Q0IxLCAweDE1MUMsIDB4NkNCMywgMHgwNTRGLA0KLSAgICAweDZDQjQsIDB4NEMyMiwgMHg2Q0I4LCAweDBERjgsIDB4NkNCOSwgMHgwRjA5LCAweDZDQkEsIDB4MTUxRSwNCi0gICAgMHg2Q0JCLCAweDA4Q0YsIDB4NkNCQywgMHgwOUFBLCAweDZDQkQsIDB4MTUxNywgMHg2Q0JFLCAweDE1MUQsDQotICAgIDB4NkNCRiwgMHgwNTBBLCAweDZDQzEsIDB4MDZBRiwgMHg2Q0MyLCAweDQ2MDAsIDB4NkNDNCwgMHgxNTE0LA0KLSAgICAweDZDQzUsIDB4MTUxOSwgMHg2Q0M2LCAweDQyMjMsIDB4NkNDOSwgMHgwQTk4LCAweDZDQ0EsIDB4MEQyNywNCi0gICAgMHg2Q0NDLCAweDBEN0IsIDB4NkNEMCwgMHgzOTY5LCAweDZDRDIsIDB4NEMyMywgMHg2Q0QzLCAweDE1MTYsDQotICAgIDB4NkNENCwgMHgzOTZBLCAweDZDRDUsIDB4MEU0RiwgMHg2Q0Q2LCAweDM5NkIsIDB4NkNENywgMHgxNTE4LA0KLSAgICAweDZDRDksIDB4MTUyMSwgMHg2Q0RBLCAweDIxNDIsIDB4NkNEQiwgMHgxNTFGLCAweDZDREMsIDB4NDYwMiwNCi0gICAgMHg2Q0RELCAweDE1MUEsIDB4NkNFMCwgMHgzOTZDLCAweDZDRTEsIDB4MEU1MCwgMHg2Q0UyLCAweDBDRkUsDQotICAgIDB4NkNFMywgMHgwNjdELCAweDZDRTUsIDB4MEMxRiwgMHg2Q0U4LCAweDBCQUIsIDB4NkNFOSwgMHg0NjAzLA0KLSAgICAweDZDRUEsIDB4MTUyMiwgMHg2Q0VCLCAweDM5NkQsIDB4NkNFQywgMHgzOTZFLCAweDZDRUQsIDB4NDYwNCwNCi0gICAgMHg2Q0VFLCAweDM5NkYsIDB4NkNFRiwgMHgxNTIwLCAweDZDRjAsIDB4MEIzOSwgMHg2Q0YxLCAweDE1MTUsDQotICAgIDB4NkNGMywgMHgwNEVELCAweDZDRkIsIDB4NDIyMiwgMHg2RDAwLCAweDQ2MDYsIDB4NkQwMSwgMHgzQzM1LA0KLSAgICAweDZEMDQsIDB4MjE0MywgMHg2RDBBLCAweDM5NzAsIDB4NkQwQiwgMHgwRjM4LCAweDZEMEMsIDB4MTUyRCwNCi0gICAgMHg2RDBFLCAweDM5NzEsIDB4NkQxMSwgMHgzOTcyLCAweDZEMTIsIDB4MTUyQywgMHg2RDE3LCAweDBBOUEsDQotICAgIDB4NkQxOSwgMHgxNTI5LCAweDZEMUIsIDB4MEY1NiwgMHg2RDFFLCAweDBDOEUsIDB4NkQxRiwgMHgxNTIzLA0KLSAgICAweDZEMjQsIDB4NDYwNywgMHg2RDI1LCAweDBCRTEsIDB4NkQyNiwgMHg0NjA4LCAweDZEMjcsIDB4NDYwOSwNCi0gICAgMHg2RDI5LCAweDA0RUUsIDB4NkQyQSwgMHgwN0QxLCAweDZEMkIsIDB4MTUyNiwgMHg2RDJFLCAweDM5NzMsDQotICAgIDB4NkQyRiwgMHg0NjBCLCAweDZEMzEsIDB4NDIyNCwgMHg2RDMyLCAweDA5MzEsIDB4NkQzMywgMHgxNTJCLA0KLSAgICAweDZEMzQsIDB4NDYxRSwgMHg2RDM1LCAweDE1MkEsIDB4NkQzNiwgMHgxNTI1LCAweDZEMzgsIDB4MTUyOCwNCi0gICAgMHg2RDM5LCAweDQyMjUsIDB4NkQzQiwgMHgwNUM2LCAweDZEM0MsIDB4NDYwQywgMHg2RDNELCAweDE1MjcsDQotICAgIDB4NkQzRSwgMHgwQ0ZGLCAweDZEM0YsIDB4NDIyNiwgMHg2RDQxLCAweDBGNzYsIDB4NkQ0NCwgMHgwOURDLA0KLSAgICAweDZENDUsIDB4MEE5OSwgMHg2RDU3LCAweDM5NzQsIDB4NkQ1OCwgMHg0MjI3LCAweDZENTksIDB4MTUzMywNCi0gICAgMHg2RDVBLCAweDE1MzEsIDB4NkQ1QiwgMHg0NjBELCAweDZENUMsIDB4MERCRiwgMHg2RDVFLCAweDM5NzUsDQotICAgIDB4NkQ2MCwgMHg0NjBFLCAweDZENjEsIDB4NEMyNCwgMHg2RDYzLCAweDE1MkUsIDB4NkQ2NCwgMHgxNTMwLA0KLSAgICAweDZENjUsIDB4Mzk3NiwgMHg2RDY2LCAweDA0REMsIDB4NkQ2OSwgMHgwN0QyLCAweDZENkEsIDB4MEZEOCwNCi0gICAgMHg2RDZDLCAweDA1OUIsIDB4NkQ2RSwgMHgwREQ0LCAweDZENkYsIDB4MjE0NSwgMHg2RDcwLCAweDQ2MEYsDQotICAgIDB4NkQ3NCwgMHgwRjRCLCAweDZENzcsIDB4MDU4MiwgMHg2RDc4LCAweDBBMDEsIDB4NkQ3OSwgMHgxNTMyLA0KLSAgICAweDZEN0MsIDB4NEMyNSwgMHg2RDgwLCAweDQ2MTAsIDB4NkQ4MSwgMHg0NjExLCAweDZEODIsIDB4Mzk3NywNCi0gICAgMHg2RDg1LCAweDE1MzcsIDB4NkQ4NywgMHgyMTQ0LCAweDZEODgsIDB4MDlBQiwgMHg2RDg5LCAweDM0MkEsDQotICAgIDB4NkQ4QSwgMHg0NjEyLCAweDZEOEMsIDB4MEYxQSwgMHg2RDhELCAweDQ2MTMsIDB4NkQ4RSwgMHgxNTM0LA0KLSAgICAweDZEOTEsIDB4NDYxNCwgMHg2RDkzLCAweDE1MkYsIDB4NkQ5NCwgMHg0MjI4LCAweDZEOTUsIDB4MTUzNSwNCi0gICAgMHg2RDk2LCAweDIxNDYsIDB4NkQ5OCwgMHg0NjE1LCAweDZEOTksIDB4MEZBNiwgMHg2RDlCLCAweDBDNkQsDQotICAgIDB4NkQ5QywgMHgwQzlBLCAweDZEQUEsIDB4NDIyOSwgMHg2REFCLCAweDQ2MUEsIDB4NkRBQywgMHgyMTQ3LA0KLSAgICAweDZEQUUsIDB4NDYxQiwgMHg2REFGLCAweDA1OTQsIDB4NkRCMiwgMHgwNEY3LCAweDZEQjQsIDB4NDYxQywNCi0gICAgMHg2REI1LCAweDE1M0IsIDB4NkRCOCwgMHgxNTNFLCAweDZEQjksIDB4NEMyNiwgMHg2REJDLCAweDBGOEIsDQotICAgIDB4NkRCRiwgMHgzOTc4LCAweDZEQzAsIDB4MEY0RSwgMHg2REMyLCAweDQ2MUQsIDB4NkRDNCwgMHgzOTc5LA0KLSAgICAweDZEQzUsIDB4MTU0NSwgMHg2REM2LCAweDE1M0YsIDB4NkRDNywgMHgxNTNDLCAweDZEQzgsIDB4NDYxRiwNCi0gICAgMHg2RENBLCAweDM5N0EsIDB4NkRDQiwgMHgwRjlDLCAweDZEQ0MsIDB4MTU0MiwgMHg2RENFLCAweDQ2MjAsDQotICAgIDB4NkRDRiwgMHgyMTQ4LCAweDZERDAsIDB4M0MzNiwgMHg2REQxLCAweDA5NTQsIDB4NkREMiwgMHgxNTQ0LA0KLSAgICAweDZERDUsIDB4MTU0OSwgMHg2REQ2LCAweDM5N0IsIDB4NkREOCwgMHgwQzZCLCAweDZERDksIDB4MTU0NywNCi0gICAgMHg2RERBLCAweDM0NTMsIDB4NkREQiwgMHg0MjJBLCAweDZEREQsIDB4NDIyQiwgMHg2RERFLCAweDE1NDEsDQotICAgIDB4NkRERiwgMHg0NjIxLCAweDZERTEsIDB4MEI3NiwgMHg2REU0LCAweDE1NDgsIDB4NkRFNiwgMHgxNTNELA0KLSAgICAweDZERTgsIDB4MTU0MywgMHg2REU5LCAweDM5N0MsIDB4NkRFQSwgMHgxNTRBLCAweDZERUIsIDB4MDRDMCwNCi0gICAgMHg2REVDLCAweDE1NDAsIDB4NkRFRSwgMHgxNTRCLCAweDZERjAsIDB4NEMyNywgMHg2REYxLCAweDBBMDIsDQotICAgIDB4NkRGMiwgMHgyMTRBLCAweDZERjMsIDB4MDk2OSwgMHg2REY1LCAweDBERjUsIDB4NkRGNiwgMHg0NjIyLA0KLSAgICAweDZERjcsIDB4MDgxRSwgMHg2REY4LCAweDIxNDksIDB4NkRGOSwgMHgxNTM4LCAweDZERkEsIDB4MTU0NiwNCi0gICAgMHg2REZCLCAweDBDMzQsIDB4NkRGQywgMHgyMTRCLCAweDZFMDUsIDB4MEE1QSwgMHg2RTA3LCAweDA1QzcsDQotICAgIDB4NkUwOCwgMHgwODQxLCAweDZFMDksIDB4MDlBQywgMHg2RTBBLCAweDE1M0EsIDB4NkUwQiwgMHgwOTRDLA0KLSAgICAweDZFMTMsIDB4MDcyMiwgMHg2RTE1LCAweDE1MzksIDB4NkUxNywgMHgzNzQ2LCAweDZFMTksIDB4MTU0RiwNCi0gICAgMHg2RTFBLCAweDA5NzcsIDB4NkUxQiwgMHgwNzZFLCAweDZFMUQsIDB4MTU1RSwgMHg2RTFFLCAweDQ2MjQsDQotICAgIDB4NkUxRiwgMHgxNTU4LCAweDZFMjAsIDB4MDY4RSwgMHg2RTIxLCAweDBDNDksIDB4NkUyMiwgMHgzOTdELA0KLSAgICAweDZFMjMsIDB4MTU1MywgMHg2RTI0LCAweDE1NUMsIDB4NkUyNSwgMHgwNDczLCAweDZFMjYsIDB4MDRENCwNCi0gICAgMHg2RTI3LCAweDIxNEUsIDB4NkUyOSwgMHgwNTM5LCAweDZFMkIsIDB4MTU1NSwgMHg2RTJDLCAweDBCMEMsDQotICAgIDB4NkUyRCwgMHgxNTRDLCAweDZFMkUsIDB4MTU0RSwgMHg2RTJGLCAweDA3RDMsIDB4NkUzMiwgMHg0NjI2LA0KLSAgICAweDZFMzQsIDB4MzQxMiwgMHg2RTM2LCAweDQ2MjMsIDB4NkUzOCwgMHgxNTVGLCAweDZFMzksIDB4MjE0QywNCi0gICAgMHg2RTNBLCAweDE1NUEsIDB4NkUzQywgMHgyMTRGLCAweDZFM0UsIDB4MTU1MiwgMHg2RTQyLCAweDNDMzcsDQotICAgIDB4NkU0MywgMHgxNTU5LCAweDZFNDQsIDB4NDIyQywgMHg2RTQ1LCAweDRDMjgsIDB4NkU0OCwgMHg0NjI3LA0KLSAgICAweDZFNDksIDB4NDYyOCwgMHg2RTRBLCAweDBFQjcsIDB4NkU0QiwgMHg0NjI5LCAweDZFNEMsIDB4NDYyQSwNCi0gICAgMHg2RTRELCAweDE1NTcsIDB4NkU0RSwgMHgxNTVCLCAweDZFNEYsIDB4NDYyQiwgMHg2RTUxLCAweDM5N0UsDQotICAgIDB4NkU1MywgMHg0NjJDLCAweDZFNTQsIDB4NDYyRCwgMHg2RTU2LCAweDA3ODQsIDB4NkU1NywgMHg0NjJFLA0KLSAgICAweDZFNTgsIDB4MDlBRCwgMHg2RTVCLCAweDBCNzcsIDB4NkU1QywgMHgyMTRELCAweDZFNUUsIDB4NDIyRCwNCi0gICAgMHg2RTVGLCAweDE1NTEsIDB4NkU2MywgMHg0NjJGLCAweDZFNjcsIDB4MEYxOSwgMHg2RTZCLCAweDE1NTQsDQotICAgIDB4NkU2RSwgMHgxNTRELCAweDZFNkYsIDB4MEM2QywgMHg2RTcyLCAweDE1NTAsIDB4NkU3MywgMHg0QzI5LA0KLSAgICAweDZFNzYsIDB4MTU1NiwgMHg2RTdCLCAweDRDMkEsIDB4NkU3RCwgMHg0QzJCLCAweDZFN0UsIDB4MEZGNywNCi0gICAgMHg2RTdGLCAweDA4RUEsIDB4NkU4MCwgMHgwRUFDLCAweDZFODIsIDB4MTU2MCwgMHg2RTg5LCAweDRDMkMsDQotICAgIDB4NkU4QywgMHgwRDQyLCAweDZFOEYsIDB4MTU2QywgMHg2RTkwLCAweDA3NkYsIDB4NkU5MywgMHg0NjMxLA0KLSAgICAweDZFOTYsIDB4MDk2QSwgMHg2RTk4LCAweDE1NjIsIDB4NkU5QywgMHgwRjc3LCAweDZFOUQsIDB4MDdENCwNCi0gICAgMHg2RTlGLCAweDE1NkYsIDB4NkVBMiwgMHgwNEIyLCAweDZFQTUsIDB4MTU2RCwgMHg2RUE3LCAweDQ2MzIsDQotICAgIDB4NkVBQSwgMHgxNTYxLCAweDZFQUIsIDB4MzQwQywgMHg2RUFGLCAweDE1NjcsIDB4NkVCMSwgMHg0MjJFLA0KLSAgICAweDZFQjIsIDB4MTU2OSwgMHg2RUI0LCAweDQ2MzMsIDB4NkVCNiwgMHgwRjM5LCAweDZFQjcsIDB4MTU2NCwNCi0gICAgMHg2RUJBLCAweDBDMjgsIDB4NkVCQywgMHg0QzJELCAweDZFQkQsIDB4MTU2NiwgMHg2RUJGLCAweDIxNTAsDQotICAgIDB4NkVDMSwgMHg0MjJGLCAweDZFQzIsIDB4MTU2RSwgMHg2RUMzLCAweDQ2MzQsIDB4NkVDNCwgMHgxNTY4LA0KLSAgICAweDZFQzUsIDB4MEVEMywgMHg2RUM3LCAweDM5N0YsIDB4NkVDOSwgMHgxNTYzLCAweDZFQ0EsIDB4Mzk4MCwNCi0gICAgMHg2RUNCLCAweDA4Q0UsIDB4NkVDQywgMHgxNTdCLCAweDZFQ0UsIDB4Mzk4MSwgMHg2RUQxLCAweDA1QzgsDQotICAgIDB4NkVEMywgMHgxNTY1LCAweDZFRDQsIDB4MTU2QSwgMHg2RUQ1LCAweDE1NkIsIDB4NkVEOSwgMHgzQzM4LA0KLSAgICAweDZFREEsIDB4NEMyRSwgMHg2RURCLCAweDRDMkYsIDB4NkVERCwgMHgwQjRDLCAweDZFREUsIDB4MEIzQSwNCi0gICAgMHg2RUU2LCAweDNDMjQsIDB4NkVFQiwgMHg0NjM2LCAweDZFRUMsIDB4MTU3MywgMHg2RUVGLCAweDE1NzksDQotICAgIDB4NkVGMiwgMHgxNTc3LCAweDZFRjQsIDB4MEMyMywgMHg2RUY3LCAweDE1N0UsIDB4NkVGOCwgMHgxNTc0LA0KLSAgICAweDZFRjksIDB4NDYzNywgMHg2RUZCLCAweDQ2MzgsIDB4NkVGRCwgMHgzOTgyLCAweDZFRkUsIDB4MTU3NSwNCi0gICAgMHg2RUZGLCAweDE1NUQsIDB4NkYwMSwgMHgwNjkzLCAweDZGMDIsIDB4MERBQywgMHg2RjA2LCAweDA4RUIsDQotICAgIDB4NkYwOSwgMHgwODA5LCAweDZGMEEsIDB4NDYzOSwgMHg2RjBDLCAweDQ2M0EsIDB4NkYwRiwgMHgwRkQ5LA0KLSAgICAweDZGMTAsIDB4NDIzMCwgMHg2RjExLCAweDE1NzEsIDB4NkYxMywgMHgxNTdELCAweDZGMTQsIDB4MDUwQiwNCi0gICAgMHg2RjE1LCAweDBBRTgsIDB4NkYxOCwgMHg0NjNCLCAweDZGMUEsIDB4Mzk4MywgMHg2RjIwLCAweDBEMkYsDQotICAgIDB4NkYyMiwgMHgwNUZELCAweDZGMjMsIDB4MEZDMiwgMHg2RjI1LCAweDQ2M0MsIDB4NkYyNiwgMHg0QzMwLA0KLSAgICAweDZGMjksIDB4NEMzMSwgMHg2RjJBLCAweDM5ODQsIDB4NkYyQiwgMHgwRUFELCAweDZGMkMsIDB4MEJFRSwNCi0gICAgMHg2RjJGLCAweDM5ODUsIDB4NkYzMCwgMHg0QzMyLCAweDZGMzEsIDB4MTU3OCwgMHg2RjMyLCAweDE1N0EsDQotICAgIDB4NkYzMywgMHgzOTg2LCAweDZGMzUsIDB4NDYzNSwgMHg2RjM2LCAweDQ2M0QsIDB4NkYzOCwgMHgwQUI0LA0KLSAgICAweDZGM0MsIDB4NDYzRSwgMHg2RjNFLCAweDE1N0MsIDB4NkYzRiwgMHgxNTc2LCAweDZGNDEsIDB4MTU3MCwNCi0gICAgMHg2RjQ1LCAweDA1RkYsIDB4NkY1MSwgMHgxRTYwLCAweDZGNTIsIDB4NDY0MCwgMHg2RjU0LCAweDA3M0YsDQotICAgIDB4NkY1NywgMHg0NjQxLCAweDZGNTgsIDB4MTU4QSwgMHg2RjU5LCAweDQyMzEsIDB4NkY1QSwgMHgzOTg3LA0KLSAgICAweDZGNUIsIDB4MTU4NSwgMHg2RjVDLCAweDBBOUMsIDB4NkY1RSwgMHgzOTg4LCAweDZGNUYsIDB4MDVDMSwNCi0gICAgMHg2RjYwLCAweDQ2NDIsIDB4NkY2MSwgMHg0MjMyLCAweDZGNjIsIDB4Mzk4OSwgMHg2RjY0LCAweDA5NkIsDQotICAgIDB4NkY2NiwgMHgxNThFLCAweDZGNjgsIDB4NDY0MywgMHg2RjZELCAweDE1ODcsIDB4NkY2RSwgMHgwQkM4LA0KLSAgICAweDZGNkYsIDB4MTU4NCwgMHg2RjcwLCAweDBCRjUsIDB4NkY3NCwgMHgxNUE3LCAweDZGNzgsIDB4MTU4MSwNCi0gICAgMHg2RjdBLCAweDE1ODAsIDB4NkY3QywgMHgxNTg5LCAweDZGN0QsIDB4Mzk4QSwgMHg2RjdFLCAweDQyMzMsDQotICAgIDB4NkY4MCwgMHgxNTgzLCAweDZGODEsIDB4MTU4MiwgMHg2RjgyLCAweDE1ODgsIDB4NkY4NCwgMHgwQTQ1LA0KLSAgICAweDZGODYsIDB4MTU3RiwgMHg2Rjg3LCAweDRDMzMsIDB4NkY4OCwgMHgyMTUxLCAweDZGOEIsIDB4Mzk4QiwNCi0gICAgMHg2RjhDLCAweDQyMzQsIDB4NkY4RCwgMHgzOThDLCAweDZGOEUsIDB4MTU4QiwgMHg2RjkwLCAweDQ2NDQsDQotICAgIDB4NkY5MSwgMHgxNThDLCAweDZGOTIsIDB4Mzk4RCwgMHg2Rjk0LCAweDM5OEUsIDB4NkY5NiwgMHg0NjQ1LA0KLSAgICAweDZGOTcsIDB4MDVGRSwgMHg2Rjk4LCAweDM2M0MsIDB4NkY5QSwgMHgzOThGLCAweDZGOUQsIDB4NEMzNCwNCi0gICAgMHg2RjlGLCAweDQ2NDcsIDB4NkZBMCwgMHg0MjM1LCAweDZGQTEsIDB4MTU5MSwgMHg2RkEzLCAweDE1OTAsDQotICAgIDB4NkZBNCwgMHgxNTkyLCAweDZGQTUsIDB4NDY0OCwgMHg2RkE3LCAweDM5OTAsIDB4NkZBOCwgMHgzOTkxLA0KLSAgICAweDZGQUEsIDB4MTU5NSwgMHg2RkFFLCAweDRDMzUsIDB4NkZBRiwgMHg0NjQ5LCAweDZGQjEsIDB4MEMzRCwNCi0gICAgMHg2RkIzLCAweDE1OEYsIDB4NkZCNSwgMHgyMTUyLCAweDZGQjYsIDB4Mzk5MiwgMHg2RkI3LCAweDRDMzYsDQotICAgIDB4NkZCOSwgMHgxNTkzLCAweDZGQkMsIDB4NDIzNiwgMHg2RkJFLCAweDQ2NDYsIDB4NkZDMCwgMHgwNzM5LA0KLSAgICAweDZGQzEsIDB4MEI1OSwgMHg2RkMyLCAweDE1OEQsIDB4NkZDMywgMHgwQ0YxLCAweDZGQzYsIDB4MTU5NCwNCi0gICAgMHg2RkM3LCAweDQyMzcsIDB4NkZDOCwgMHg0NjRCLCAweDZGQzksIDB4NDY0QywgMHg2RkNBLCAweDQyMzgsDQotICAgIDB4NkZENCwgMHgxNTk5LCAweDZGRDUsIDB4MTU5NywgMHg2RkQ4LCAweDE1OUEsIDB4NkZEQSwgMHgzOTkzLA0KLSAgICAweDZGREIsIDB4MTU5RCwgMHg2RkRFLCAweDM5OTQsIDB4NkZERiwgMHgxNTk2LCAweDZGRTAsIDB4MDdGQywNCi0gICAgMHg2RkUxLCAweDBDREUsIDB4NkZFNCwgMHgxNTM2LCAweDZGRTksIDB4NDY0RCwgMHg2RkVCLCAweDBGNUUsDQotICAgIDB4NkZFQywgMHgxNTk4LCAweDZGRUUsIDB4MTU5QywgMHg2RkVGLCAweDBCNTUsIDB4NkZGMCwgMHg0MjM5LA0KLSAgICAweDZGRjEsIDB4MTU5QiwgMHg2RkYzLCAweDE1ODYsIDB4NkZGNSwgMHgyMTUzLCAweDZGRjYsIDB4MUJBNCwNCi0gICAgMHg2RkY5LCAweDNDMjMsIDB4NkZGQSwgMHgxNUEwLCAweDZGRkMsIDB4NDY0RiwgMHg2RkZFLCAweDE1QTQsDQotICAgIDB4NzAwMCwgMHg0NjUwLCAweDcwMDEsIDB4MTVBMiwgMHg3MDA1LCAweDIxNTQsIDB4NzAwNiwgMHgxRTUwLA0KLSAgICAweDcwMDcsIDB4MjE1NSwgMHg3MDA5LCAweDE1OUUsIDB4NzAwQSwgMHg0NjUxLCAweDcwMEIsIDB4MTU5RiwNCi0gICAgMHg3MDBELCAweDRDMzcsIDB4NzAwRiwgMHgxNUEzLCAweDcwMTEsIDB4MTVBMSwgMHg3MDE1LCAweDBEQzAsDQotICAgIDB4NzAxOCwgMHgxNUE5LCAweDcwMUEsIDB4MTVBNiwgMHg3MDFCLCAweDE1QTUsIDB4NzAxRCwgMHgxNUE4LA0KLSAgICAweDcwMUUsIDB4MENBQywgMHg3MDFGLCAweDE1QUEsIDB4NzAyMCwgMHg0QzM4LCAweDcwMjMsIDB4NDY1MiwNCi0gICAgMHg3MDI2LCAweDBCQjMsIDB4NzAyNywgMHgwQjRELCAweDcwMjgsIDB4MjE1NiwgMHg3MDJDLCAweDBBNDksDQotICAgIDB4NzAzMCwgMHgxNUFCLCAweDcwMzIsIDB4MTVBRCwgMHg3MDM5LCAweDM5OTYsIDB4NzAzQSwgMHg0NjU0LA0KLSAgICAweDcwM0MsIDB4Mzk5NywgMHg3MDNFLCAweDE1QUMsIDB4NzA0MywgMHg0NjU1LCAweDcwNDcsIDB4NDY1NiwNCi0gICAgMHg3MDQ5LCAweDRDMzksIDB4NzA0QSwgMHg0RjUyLCAweDcwNEIsIDB4NDY1NywgMHg3MDRDLCAweDE1NzIsDQotICAgIDB4NzA0RSwgMHg0MjNBLCAweDcwNTEsIDB4MTVBRSwgMHg3MDU0LCAweDM5OTksIDB4NzA1OCwgMHgwQ0JGLA0KLSAgICAweDcwNUQsIDB4Mzk5QSwgMHg3MDVFLCAweDM5OUIsIDB4NzA2MywgMHgxNUFGLCAweDcwNjQsIDB4Mzk5QywNCi0gICAgMHg3MDY1LCAweDQ2NTksIDB4NzA2OSwgMHg0NjVBLCAweDcwNkIsIDB4MDU1MCwgMHg3MDZDLCAweDM5OUQsDQotICAgIDB4NzA2RSwgMHg0NjVCLCAweDcwNkYsIDB4MEM2RSwgMHg3MDcwLCAweDA1ODMsIDB4NzA3NSwgMHg0MjNCLA0KLSAgICAweDcwNzYsIDB4NDY1QywgMHg3MDc4LCAweDA2N0UsIDB4NzA3QywgMHgwOTBBLCAweDcwN0QsIDB4MDg0MiwNCi0gICAgMHg3MDdFLCAweDM5OUUsIDB4NzA4MSwgMHgzOTlGLCAweDcwODUsIDB4MjE1NywgMHg3MDg2LCAweDQ2NUQsDQotICAgIDB4NzA4OSwgMHgwRkNELCAweDcwOEEsIDB4MEEyQywgMHg3MDhFLCAweDA1MEMsIDB4NzA5MiwgMHgxNUIxLA0KLSAgICAweDcwOTUsIDB4MzlBMCwgMHg3MDk3LCAweDQ2NUUsIDB4NzA5OCwgMHg0QzNBLCAweDcwOTksIDB4MTVCMCwNCi0gICAgMHg3MDlGLCAweDQ2NjAsIDB4NzBBNCwgMHg0MjNDLCAweDcwQUIsIDB4MjE1OCwgMHg3MEFDLCAweDE1QjQsDQotICAgIDB4NzBBRCwgMHgwQjc4LCAweDcwQUUsIDB4MTVCNywgMHg3MEFGLCAweDE1QjIsIDB4NzBCMCwgMHg0QzNCLA0KLSAgICAweDcwQjEsIDB4NDY2MSwgMHg3MEIzLCAweDE1QjYsIDB4NzBCNywgMHgzOUExLCAweDcwQjgsIDB4MTVCNSwNCi0gICAgMHg3MEI5LCAweDBDM0EsIDB4NzBCQSwgMHgwNDlELCAweDcwQkIsIDB4MjBBRCwgMHg3MEM4LCAweDBGQkQsDQotICAgIDB4NzBDQSwgMHg0NjY0LCAweDcwQ0IsIDB4MTVCOSwgMHg3MENGLCAweDA0Q0EsIDB4NzBEMSwgMHg0NjY1LA0KLSAgICAweDcwRDMsIDB4MzlBMiwgMHg3MEQ0LCAweDM5QTMsIDB4NzBENSwgMHg0QzNDLCAweDcwRDYsIDB4NEMzRCwNCi0gICAgMHg3MEQ4LCAweDM5QTQsIDB4NzBEOSwgMHgxNUJCLCAweDcwREMsIDB4MzlBNSwgMHg3MERELCAweDE1QkEsDQotICAgIDB4NzBERiwgMHgxNUI4LCAweDcwRTQsIDB4NDIzRCwgMHg3MEVDLCAweDQ2NjMsIDB4NzBGMSwgMHgxNUIzLA0KLSAgICAweDcwRjksIDB4MEU1MSwgMHg3MEZELCAweDE1QkQsIDB4NzEwMywgMHg0NjY2LCAweDcxMDQsIDB4MjE1QSwNCi0gICAgMHg3MTA2LCAweDQ2NjcsIDB4NzEwNywgMHgzOUE2LCAweDcxMDgsIDB4NDY2OCwgMHg3MTA5LCAweDE1QkMsDQotICAgIDB4NzEwQywgMHg0NjY5LCAweDcxMEYsIDB4MjE1OSwgMHg3MTE0LCAweDA1MEQsIDB4NzExOSwgMHgxNUJGLA0KLSAgICAweDcxMUEsIDB4MEUwMiwgMHg3MTFDLCAweDE1QkUsIDB4NzExRSwgMHg0MjNGLCAweDcxMjAsIDB4MzlBNywNCi0gICAgMHg3MTIxLCAweDBFQzEsIDB4NzEyNiwgMHgwOUFGLCAweDcxMkIsIDB4NDIzRSwgMHg3MTJFLCAweDQyNDAsDQotICAgIDB4NzEyRiwgMHg0NjZCLCAweDcxMzAsIDB4MUREQywgMHg3MTMxLCAweDM5QTgsIDB4NzEzNiwgMHgwQUI1LA0KLSAgICAweDcxM0MsIDB4MDlBRSwgMHg3MTQ1LCAweDRDM0UsIDB4NzE0NiwgMHgyMTVDLCAweDcxNDcsIDB4MjE1RCwNCi0gICAgMHg3MTQ5LCAweDBGQzMsIDB4NzE0QSwgMHgzOUE5LCAweDcxNEMsIDB4MTVDNSwgMHg3MTRFLCAweDBBOUQsDQotICAgIDB4NzE1MCwgMHg0NjZDLCAweDcxNTEsIDB4NDI0MSwgMHg3MTUyLCAweDM5QUEsIDB4NzE1MywgMHg0NjZELA0KLSAgICAweDcxNTUsIDB4MTVDMSwgMHg3MTU2LCAweDE1QzYsIDB4NzE1OSwgMHgwNTBFLCAweDcxNUMsIDB4MjE1QiwNCi0gICAgMHg3MTVFLCAweDQ2NkUsIDB4NzE2MCwgMHgzOUFCLCAweDcxNjIsIDB4MTVDNCwgMHg3MTY0LCAweDBEMTcsDQotICAgIDB4NzE2NSwgMHgxNUMwLCAweDcxNjYsIDB4MTVDMywgMHg3MTY3LCAweDA5QjAsIDB4NzE2OCwgMHg0MjQyLA0KLSAgICAweDcxNjksIDB4MEQ2NSwgMHg3MTZDLCAweDE1QzcsIDB4NzE2RSwgMHgwOEZELCAweDcxNzksIDB4MzlBQywNCi0gICAgMHg3MTdELCAweDBBOUUsIDB4NzE4MCwgMHg0NjcxLCAweDcxODQsIDB4MTVDQSwgMHg3MTg1LCAweDQyNDMsDQotICAgIDB4NzE4NywgMHg0MjQ0LCAweDcxODgsIDB4MTVDMiwgMHg3MThBLCAweDA2RkQsIDB4NzE4RiwgMHgxNUM4LA0KLSAgICAweDcxOTIsIDB4MzlBRCwgMHg3MTk0LCAweDBGM0EsIDB4NzE5NSwgMHgxNUNCLCAweDcxOTYsIDB4NDY3MCwNCi0gICAgMHg3MTk5LCAweDIwNUQsIDB4NzE5QiwgMHg0NjcyLCAweDcxOUYsIDB4MDk1OSwgMHg3MUEwLCAweDQ2NzMsDQotICAgIDB4NzFBMiwgMHg0Njc0LCAweDcxQTgsIDB4MTVDQywgMHg3MUFDLCAweDE1Q0QsIDB4NzFBRSwgMHg0Njc1LA0KLSAgICAweDcxQUYsIDB4NDY3NiwgMHg3MUIxLCAweDBDRTQsIDB4NzFCMiwgMHg0QzNGLCAweDcxQjMsIDB4M0MyNSwNCi0gICAgMHg3MUI5LCAweDE1Q0YsIDB4NzFCQSwgMHg0MjQ1LCAweDcxQkUsIDB4MTVEMCwgMHg3MUMxLCAweDIxNUYsDQotICAgIDB4NzFDMywgMHgwQ0U5LCAweDcxQzQsIDB4NDI0NiwgMHg3MUM4LCAweDBDNkYsIDB4NzFDOSwgMHgxNUQyLA0KLSAgICAweDcxQ0IsIDB4MzlBRiwgMHg3MUNFLCAweDE1RDQsIDB4NzFEMCwgMHgwRjlELCAweDcxRDIsIDB4MTVEMSwNCi0gICAgMHg3MUQzLCAweDM5QjAsIDB4NzFENCwgMHgxNUQzLCAweDcxRDUsIDB4MDUwRiwgMHg3MUQ2LCAweDM5QjEsDQotICAgIDB4NzFENywgMHgxNUNFLCAweDcxRDksIDB4NDY3OCwgMHg3MURDLCAweDQ2NzksIDB4NzFERiwgMHgxMTRFLA0KLSAgICAweDcxRTAsIDB4MTVENSwgMHg3MUU1LCAweDBBRTksIDB4NzFFNiwgMHgwODg2LCAweDcxRTcsIDB4MTVENywNCi0gICAgMHg3MUVDLCAweDE1RDYsIDB4NzFFRCwgMHgwOUVBLCAweDcxRUUsIDB4MTBFRSwgMHg3MUY0LCAweDRDNDAsDQotICAgIDB4NzFGNSwgMHgxNUQ4LCAweDcxRjksIDB4MTVEQSwgMHg3MUZCLCAweDE1QzksIDB4NzFGQywgMHgxNUQ5LA0KLSAgICAweDcxRkUsIDB4MjE2MCwgMHg3MUZGLCAweDE1REIsIDB4NzIwMCwgMHgzOUIyLCAweDcyMDYsIDB4MEQzMCwNCi0gICAgMHg3MjA3LCAweDQ2N0EsIDB4NzIwRCwgMHgxNURDLCAweDcyMTAsIDB4MTVERCwgMHg3MjE1LCAweDQyNDcsDQotICAgIDB4NzIxNywgMHg0QzQxLCAweDcyMUIsIDB4MTVERSwgMHg3MjFELCAweDM5QjMsIDB4NzIxRiwgMHg0QzQyLA0KLSAgICAweDcyMjgsIDB4MTVERiwgMHg3MjJBLCAweDBCRkEsIDB4NzIyQiwgMHgzOUI0LCAweDcyMkMsIDB4MTVFMSwNCi0gICAgMHg3MjJELCAweDE1RTAsIDB4NzIzMCwgMHgxNUUyLCAweDcyMzIsIDB4MTVFMywgMHg3MjM0LCAweDQ2N0MsDQotICAgIDB4NzIzNSwgMHgwOTBCLCAweDcyMzYsIDB4MERENSwgMHg3MjM4LCAweDM5QjUsIDB4NzIzOSwgMHg0NjdELA0KLSAgICAweDcyM0EsIDB4MEVGOCwgMHg3MjNCLCAweDE1RTQsIDB4NzIzQywgMHgxNUU1LCAweDcyM0QsIDB4MEFEOCwNCi0gICAgMHg3MjNFLCAweDA4RDAsIDB4NzIzRiwgMHgxNUU2LCAweDcyNDAsIDB4MTVFNywgMHg3MjQxLCAweDM5QjYsDQotICAgIDB4NzI0MiwgMHg0NjdFLCAweDcyNDMsIDB4NEM0MywgMHg3MjQ2LCAweDE1RTgsIDB4NzI0NywgMHgwRTIyLA0KLSAgICAweDcyNDgsIDB4MEQ1QiwgMHg3MjRCLCAweDE1RTksIDB4NzI0QywgMHgwRDBELCAweDcyNEYsIDB4NEM0NCwNCi0gICAgMHg3MjUwLCAweDRDNDUsIDB4NzI1MiwgMHgwQkM5LCAweDcyNTMsIDB4MzlCNywgMHg3MjU1LCAweDM5QjgsDQotICAgIDB4NzI1NiwgMHgzOUI5LCAweDcyNTcsIDB4NDY3RiwgMHg3MjU4LCAweDE1RUEsIDB4NzI1OSwgMHgwNTY3LA0KLSAgICAweDcyNUEsIDB4NEM0NiwgMHg3MjVCLCAweDA2ODcsIDB4NzI1QywgMHgzOUJBLCAweDcyNUQsIDB4MEVEMiwNCi0gICAgMHg3MjVGLCAweDBFQzIsIDB4NzI2MCwgMHg0QzQ3LCAweDcyNjEsIDB4MDUzNCwgMHg3MjYyLCAweDBGREEsDQotICAgIDB4NzI2MywgMHg0NjgwLCAweDcyNjcsIDB4MEU4MCwgMHg3MjY4LCAweDRDNDgsIDB4NzI2OSwgMHgwREZBLA0KLSAgICAweDcyNkUsIDB4NDY4MiwgMHg3MjZGLCAweDQ2ODMsIDB4NzI3MiwgMHgwQTVCLCAweDcyNzQsIDB4MTVFQiwNCi0gICAgMHg3Mjc3LCAweDRDNDksIDB4NzI3OCwgMHg0Njg0LCAweDcyNzksIDB4MEM5QiwgMHg3MjdELCAweDA3NTcsDQotICAgIDB4NzI3RSwgMHgxNUVDLCAweDcyN0YsIDB4NDY4NSwgMHg3MjgwLCAweDA4NDQsIDB4NzI4MSwgMHgxNUVFLA0KLSAgICAweDcyODIsIDB4MTVFRCwgMHg3Mjg0LCAweDRDNEEsIDB4NzI4NywgMHgxNUVGLCAweDcyOEQsIDB4MzlCQiwNCi0gICAgMHg3MjhFLCAweDQ2ODYsIDB4NzI5MiwgMHgxNUYwLCAweDcyOTYsIDB4MTVGMSwgMHg3MjlCLCAweDQyNDksDQotICAgIDB4NzJBMCwgMHgwNjU4LCAweDcyQTIsIDB4MTVGMiwgMHg3MkE3LCAweDE1RjMsIDB4NzJBQywgMHgwNzU4LA0KLSAgICAweDcyQUQsIDB4MzlCQywgMHg3MkFFLCAweDQ2ODgsIDB4NzJBRiwgMHgwRDVDLCAweDcyQjAsIDB4NDY4OSwNCi0gICAgMHg3MkIxLCAweDIxNjEsIDB4NzJCMiwgMHgxNUY1LCAweDcyQjQsIDB4MzlCRCwgMHg3MkI2LCAweDA5REQsDQotICAgIDB4NzJCOSwgMHgxNUY0LCAweDcyQkUsIDB4MjE2MiwgMHg3MkMwLCAweDM0MkIsIDB4NzJDMSwgMHg0NjhBLA0KLSAgICAweDcyQzIsIDB4MDZCMCwgMHg3MkMzLCAweDE1RjYsIDB4NzJDNCwgMHgxNUY4LCAweDcyQzYsIDB4MTVGNywNCi0gICAgMHg3MkM3LCAweDM5QkUsIDB4NzJDOSwgMHg0QzRCLCAweDcyQ0MsIDB4NDY4QywgMHg3MkNFLCAweDE1RjksDQotICAgIDB4NzJEMCwgMHgwNzg1LCAweDcyRDIsIDB4MTVGQSwgMHg3MkQ3LCAweDA2RTEsIDB4NzJEOSwgMHgwQUMyLA0KLSAgICAweDcyREIsIDB4MDgwRiwgMHg3MkUwLCAweDE1RkMsIDB4NzJFMSwgMHgxNUZELCAweDcyRTIsIDB4MTVGQiwNCi0gICAgMHg3MkU1LCAweDRDNEMsIDB4NzJFOSwgMHgwOTE5LCAweDcyRUMsIDB4MENBMCwgMHg3MkVELCAweDA2QjEsDQotICAgIDB4NzJGMywgMHg0NjhGLCAweDcyRjQsIDB4NEM0RCwgMHg3MkY3LCAweDE1RkYsIDB4NzJGOCwgMHgwQjZBLA0KLSAgICAweDcyRjksIDB4MTVGRSwgMHg3MkZBLCAweDQ2OTAsIDB4NzJGQiwgMHgzOUJGLCAweDcyRkMsIDB4MEZEQiwNCi0gICAgMHg3MkZELCAweDBEMTgsIDB4NzMwMiwgMHg0QzRFLCAweDczMDQsIDB4MzlDMCwgMHg3MzA1LCAweDM5QzEsDQotICAgIDB4NzMwNywgMHg0NjkxLCAweDczMEEsIDB4MTYwMiwgMHg3MzBCLCAweDRDNEYsIDB4NzMxMiwgMHg0NjkyLA0KLSAgICAweDczMTYsIDB4MTYwNCwgMHg3MzE3LCAweDE2MDEsIDB4NzMxOCwgMHg0NjkzLCAweDczMTksIDB4NDY5NCwNCi0gICAgMHg3MzFCLCAweDBFRTAsIDB4NzMxQywgMHgxNjAzLCAweDczMUQsIDB4MTYwNSwgMHg3MzFFLCAweDRDNTAsDQotICAgIDB4NzMxRiwgMHgwRjhDLCAweDczMjIsIDB4NEM1MSwgMHg3MzI0LCAweDIxNjMsIDB4NzMyNSwgMHgxNjA5LA0KLSAgICAweDczMjcsIDB4NDI0QiwgMHg3MzI4LCAweDM5QzIsIDB4NzMyOSwgMHgxNjA4LCAweDczMkEsIDB4MEJCNCwNCi0gICAgMHg3MzJCLCAweDBDRTMsIDB4NzMyQywgMHg0Njk3LCAweDczMkUsIDB4MDc1OSwgMHg3MzJGLCAweDE2MDcsDQotICAgIDB4NzMzMSwgMHgzOUMzLCAweDczMzMsIDB4NDY5OCwgMHg3MzM0LCAweDE2MDYsIDB4NzMzNiwgMHgwRjFCLA0KLSAgICAweDczMzcsIDB4MEYxQywgMHg3MzM5LCAweDQ2OTYsIDB4NzMzQSwgMHg0QzUyLCAweDczM0IsIDB4NEM1MywNCi0gICAgMHg3MzNELCAweDQ2OTksIDB4NzMzRSwgMHgxNjBBLCAweDczM0YsIDB4MDUxMCwgMHg3MzQzLCAweDM5QzQsDQotICAgIDB4NzM0NCwgMHgwODA4LCAweDczNDUsIDB4MDhCMCwgMHg3MzRELCAweDRDNTQsIDB4NzM0RSwgMHgxNjBCLA0KLSAgICAweDczNEYsIDB4MTYwQywgMHg3MzUwLCAweDQyNEMsIDB4NzM1MiwgMHg0NjlBLCAweDczNTcsIDB4MTYwRSwNCi0gICAgMHg3MzU4LCAweDRDNTUsIDB4NzM2MywgMHgwOTRELCAweDczNjYsIDB4NDI0RCwgMHg3MzY3LCAweDRDNTYsDQotICAgIDB4NzM2OCwgMHgxNjEwLCAweDczNkEsIDB4MTYwRiwgMHg3MzZCLCAweDQ2OUMsIDB4NzM2QywgMHgzOUM1LA0KLSAgICAweDczNkUsIDB4NDY5RSwgMHg3MzZGLCAweDQ2OUYsIDB4NzM3MCwgMHgxNjExLCAweDczNzEsIDB4NDZBMCwNCi0gICAgMHg3MzcyLCAweDA1QUIsIDB4NzM3NSwgMHgxNjEzLCAweDczNzcsIDB4MjE2NSwgMHg3Mzc4LCAweDE2MTIsDQotICAgIDB4NzM3QSwgMHgxNjE1LCAweDczN0IsIDB4MTYxNCwgMHg3MzdDLCAweDM5QzYsIDB4NzM4MSwgMHg0NkExLA0KLSAgICAweDczODMsIDB4MzlDNywgMHg3Mzg0LCAweDA3NzAsIDB4NzM4NSwgMHgzOUM4LCAweDczODYsIDB4MzlDOSwNCi0gICAgMHg3Mzg3LCAweDBGNzAsIDB4NzM4OSwgMHgwNkM0LCAweDczOEEsIDB4NDZBMiwgMHg3MzhCLCAweDA1MjYsDQotICAgIDB4NzM5NCwgMHg0NkEzLCAweDczOTUsIDB4MzlDQSwgMHg3Mzk2LCAweDA2RTIsIDB4NzM5OCwgMHg0NkE0LA0KLSAgICAweDczOUMsIDB4NDZBNSwgMHg3MzlFLCAweDM5Q0IsIDB4NzM5RiwgMHgzOUNDLCAweDczQTAsIDB4MzlDRCwNCi0gICAgMHg3M0EyLCAweDQyNEUsIDB4NzNBNSwgMHg0NkE2LCAweDczQTYsIDB4MzlDRSwgMHg3M0E4LCAweDNDM0YsDQotICAgIDB4NzNBOSwgMHgwNjFELCAweDczQUIsIDB4MzlDRiwgMHg3M0IyLCAweDBGQjAsIDB4NzNCMywgMHgxNjE3LA0KLSAgICAweDczQjUsIDB4MzlEMCwgMHg3M0I3LCAweDM5RDEsIDB4NzNCOSwgMHg0NkE3LCAweDczQkEsIDB4MzVFQSwNCi0gICAgMHg3M0JCLCAweDE2MTksIDB4NzNCQywgMHgzOUQyLCAweDczQkQsIDB4MjE2NiwgMHg3M0JGLCAweDQ2QTgsDQotICAgIDB4NzNDMCwgMHgxNjFBLCAweDczQzIsIDB4MDU1MSwgMHg3M0M1LCAweDQ2QTksIDB4NzNDOCwgMHgxNjE2LA0KLSAgICAweDczQzksIDB4MjE2NywgMHg3M0NBLCAweDA4ODcsIDB4NzNDQiwgMHg0NkFBLCAweDczQ0QsIDB4MEJERCwNCi0gICAgMHg3M0NFLCAweDE2MTgsIDB4NzNDRiwgMHgzOUQzLCAweDczRDIsIDB4MjE2QSwgMHg3M0Q2LCAweDIxNjgsDQotICAgIDB4NzNEOSwgMHgzOUQ0LCAweDczREUsIDB4MTYxRCwgMHg3M0UwLCAweDA5MUEsIDB4NzNFMSwgMHg0NkFCLA0KLSAgICAweDczRTMsIDB4MjE2OSwgMHg3M0U0LCAweDNDMzksIDB4NzNFNSwgMHgxNjFCLCAweDczRTcsIDB4NDZBQywNCi0gICAgMHg3M0U5LCAweDM5RDUsIDB4NzNFQSwgMHgwNzE0LCAweDczRUQsIDB4MEQ1RCwgMHg3M0VFLCAweDE2MUMsDQotICAgIDB4NzNGMSwgMHgxNjM3LCAweDczRjQsIDB4MzlENiwgMHg3M0Y1LCAweDIxNkMsIDB4NzNGOCwgMHgxNjIyLA0KLSAgICAweDczRjksIDB4NDZBRCwgMHg3M0ZBLCAweDQ2QUYsIDB4NzNGRCwgMHgzOUQ3LCAweDczRkUsIDB4MDc3MSwNCi0gICAgMHg3NDAxLCAweDQ2QjAsIDB4NzQwMywgMHgwNjdGLCAweDc0MDQsIDB4MzlEOCwgMHg3NDA1LCAweDE2MUYsDQotICAgIDB4NzQwNiwgMHgwRjY3LCAweDc0MDcsIDB4MjE2QiwgMHg3NDA5LCAweDBGNzgsIDB4NzQwQSwgMHgzOUQ5LA0KLSAgICAweDc0MTMsIDB4NDZBRSwgMHg3NDFBLCAweDM5REEsIDB4NzQxQiwgMHgzOURCLCAweDc0MjEsIDB4M0MzQSwNCi0gICAgMHg3NDIyLCAweDBCNTYsIDB4NzQyNCwgMHgzOURDLCAweDc0MjUsIDB4MTYyMSwgMHg3NDI2LCAweDIxNkQsDQotICAgIDB4NzQyOCwgMHgzOURELCAweDc0MjksIDB4MjE2RiwgMHg3NDJBLCAweDIxNkUsIDB4NzQyQiwgMHg0MjRGLA0KLSAgICAweDc0MkMsIDB4MzlERSwgMHg3NDJFLCAweDIxNzAsIDB4NzQyRiwgMHgzOURGLCAweDc0MzAsIDB4MzlFMCwNCi0gICAgMHg3NDMxLCAweDM5RTEsIDB4NzQzMiwgMHgxNjIzLCAweDc0MzMsIDB4MEY5RSwgMHg3NDM0LCAweDA2Q0YsDQotICAgIDB4NzQzNSwgMHgwRDkwLCAweDc0MzYsIDB4MEQwMCwgMHg3NDM5LCAweDM5RTIsIDB4NzQzQSwgMHgxNjI0LA0KLSAgICAweDc0M0YsIDB4MTYyNiwgMHg3NDQwLCAweDQ2QjIsIDB4NzQ0MSwgMHgxNjI5LCAweDc0NDMsIDB4NDZCMywNCi0gICAgMHg3NDQ0LCAweDM5RTMsIDB4NzQ0NiwgMHg0MjUwLCAweDc0NDcsIDB4MzlFNCwgMHg3NDRCLCAweDM5RTUsDQotICAgIDB4NzQ0RCwgMHgzOUU2LCAweDc0NTEsIDB4MzlFNywgMHg3NDUyLCAweDQ2QjQsIDB4NzQ1MywgMHg0NkIxLA0KLSAgICAweDc0NTUsIDB4MTYyNSwgMHg3NDU3LCAweDM5RTgsIDB4NzQ1OSwgMHgxNjI4LCAweDc0NUEsIDB4MDc5RSwNCi0gICAgMHg3NDVCLCAweDA0RUYsIDB4NzQ1QywgMHgxNjJBLCAweDc0NUQsIDB4NDZCNSwgMHg3NDVFLCAweDBBMzYsDQotICAgIDB4NzQ1RiwgMHgxNjI3LCAweDc0NjAsIDB4MEZBNCwgMHg3NDYyLCAweDQyNTEsIDB4NzQ2MywgMHgxNjJELA0KLSAgICAweDc0NjQsIDB4MUQzNSwgMHg3NDY2LCAweDM5RTksIDB4NzQ2OSwgMHgxNjJCLCAweDc0NkEsIDB4MTYyRSwNCi0gICAgMHg3NDZCLCAweDM5RUEsIDB4NzQ2RCwgMHg0MjUyLCAweDc0NkYsIDB4MTYyMCwgMHg3NDcwLCAweDE2MkMsDQotICAgIDB4NzQ3MSwgMHgzOUVCLCAweDc0NzIsIDB4NEM1NywgMHg3NDczLCAweDA4MkMsIDB4NzQ3NiwgMHgxNjJGLA0KLSAgICAweDc0N0UsIDB4MTYzMCwgMHg3NDgwLCAweDM5RUMsIDB4NzQ4MSwgMHg0NkI2LCAweDc0ODMsIDB4MEY2OCwNCi0gICAgMHg3NDg1LCAweDM5RUQsIDB4NzQ4NiwgMHgzOUVFLCAweDc0ODcsIDB4MzlFRiwgMHg3NDg4LCAweDQ2QjcsDQotICAgIDB4NzQ4OSwgMHgyMTcyLCAweDc0OEIsIDB4MTYzMSwgMHg3NDkwLCAweDM5RjAsIDB4NzQ5MiwgMHg0NkI5LA0KLSAgICAweDc0OTcsIDB4NDZCQSwgMHg3NDk4LCAweDM5RjEsIDB4NzQ5OSwgMHg0NkJCLCAweDc0OUMsIDB4MzlGMiwNCi0gICAgMHg3NDlFLCAweDE2MzIsIDB4NzQ5RiwgMHgyMTczLCAweDc0QTAsIDB4MzlGMywgMHg3NEExLCAweDQ2QkMsDQotICAgIDB4NzRBMiwgMHgxNjFFLCAweDc0QTMsIDB4MzlGNCwgMHg3NEE1LCAweDQ2QkQsIDB4NzRBNiwgMHg0MjUzLA0KLSAgICAweDc0QTcsIDB4MTYzMywgMHg3NEE4LCAweDM5RjUsIDB4NzRBOSwgMHg0MjU0LCAweDc0QUEsIDB4NDZCRSwNCi0gICAgMHg3NEFCLCAweDM5RjYsIDB4NzRBRiwgMHg0QzU4LCAweDc0QjAsIDB4MDYwMCwgMHg3NEI1LCAweDM5RjcsDQotICAgIDB4NzRCOSwgMHg0NkJGLCAweDc0QkEsIDB4NDZDMSwgMHg3NEJCLCAweDQ2QzAsIDB4NzRCRCwgMHgwOEQxLA0KLSAgICAweDc0QkYsIDB4MzlGOCwgMHg3NEM4LCAweDM5RjksIDB4NzRDOSwgMHg0MjU1LCAweDc0Q0EsIDB4MTYzNCwNCi0gICAgMHg3NENGLCAweDE2MzUsIDB4NzRENCwgMHgxNjM2LCAweDc0RDYsIDB4NDZDMiwgMHg3NEQ4LCAweDQ2QzMsDQotICAgIDB4NzREQSwgMHgzOUZBLCAweDc0REMsIDB4MDRERCwgMHg3NERFLCAweDM5RkIsIDB4NzRERiwgMHg0QzU5LA0KLSAgICAweDc0RTAsIDB4MTYzOCwgMHg3NEUyLCAweDBEQUQsIDB4NzRFMywgMHgxNjM5LCAweDc0RTQsIDB4NEM1QSwNCi0gICAgMHg3NEU2LCAweDA1RTAsIDB4NzRFNywgMHgxNjNBLCAweDc0RTksIDB4MTYzQiwgMHg3NEVCLCAweDQ2QzQsDQotICAgIDB4NzRFRSwgMHgxNjNDLCAweDc0RUYsIDB4Mzc1MCwgMHg3NEYwLCAweDE2M0UsIDB4NzRGMSwgMHgxNjNGLA0KLSAgICAweDc0RjIsIDB4MTYzRCwgMHg3NEY0LCAweDRDNUIsIDB4NzRGNiwgMHgwREM1LCAweDc0RjcsIDB4MTY0MSwNCi0gICAgMHg3NEY4LCAweDE2NDAsIDB4NzRGQSwgMHg0NkM2LCAweDc0RkIsIDB4NEM1QywgMHg3NEZGLCAweDQyNTYsDQotICAgIDB4NzUwMSwgMHgyMTc0LCAweDc1MDMsIDB4MTY0MywgMHg3NTA0LCAweDE2NDIsIDB4NzUwNSwgMHgxNjQ0LA0KLSAgICAweDc1MEMsIDB4MTY0NSwgMHg3NTBELCAweDE2NDcsIDB4NzUwRSwgMHgxNjQ2LCAweDc1MTEsIDB4MDgwQiwNCi0gICAgMHg3NTEzLCAweDE2NDksIDB4NzUxNSwgMHgxNjQ4LCAweDc1MTYsIDB4NEM1RCwgMHg3NTE3LCAweDQyNTcsDQotICAgIDB4NzUxOCwgMHgwNjAxLCAweDc1MUEsIDB4MEExOSwgMHg3NTFDLCAweDBDMzYsIDB4NzUxRSwgMHgxNjRBLA0KLSAgICAweDc1MUYsIDB4MEE1QywgMHg3NTIwLCAweDQ2QzgsIDB4NzUyMSwgMHg0QzVFLCAweDc1MjIsIDB4MzVERSwNCi0gICAgMHg3NTIzLCAweDA4ODgsIDB4NzUyNCwgMHg0NkM5LCAweDc1MjUsIDB4MDUxQiwgMHg3NTI2LCAweDE2NEIsDQotICAgIDB4NzUyOCwgMHgwRjNCLCAweDc1MkEsIDB4NDZDQSwgMHg3NTJCLCAweDBFMzMsIDB4NzUyQywgMHgxNjRDLA0KLSAgICAweDc1MkYsIDB4MjBGMiwgMHg3NTMwLCAweDBDM0UsIDB4NzUzMSwgMHgwRjFELCAweDc1MzIsIDB4MDdENSwNCi0gICAgMHg3NTMzLCAweDBBMDMsIDB4NzUzNywgMHgwQjg5LCAweDc1MzgsIDB4MTBDOSwgMHg3NTNBLCAweDBCQ0EsDQotICAgIDB4NzUzQiwgMHgwNTY4LCAweDc1M0MsIDB4MTY0RCwgMHg3NTNELCAweDQ2Q0QsIDB4NzUzRSwgMHg0NkNFLA0KLSAgICAweDc1M0YsIDB4NEM1RiwgMHg3NTQwLCAweDQ2Q0YsIDB4NzU0NCwgMHgxNjRFLCAweDc1NDYsIDB4MTY1MywNCi0gICAgMHg3NTQ4LCAweDQ2RDAsIDB4NzU0OSwgMHgxNjUxLCAweDc1NEEsIDB4MTY1MCwgMHg3NTRCLCAweDEzQzcsDQotICAgIDB4NzU0QywgMHgwNTg0LCAweDc1NEQsIDB4MTY0RiwgMHg3NTRFLCAweDM5RkMsIDB4NzU0RiwgMHgwNDlFLA0KLSAgICAweDc1NTAsIDB4NDZEMSwgMHg3NTUxLCAweDBEM0UsIDB4NzU1MiwgMHg0NkQyLCAweDc1NTQsIDB4MEQ1RSwNCi0gICAgMHg3NTU5LCAweDBGNzksIDB4NzU1QSwgMHgxNjU0LCAweDc1NUIsIDB4MTY1MiwgMHg3NTVDLCAweDBCOUEsDQotICAgIDB4NzU1RCwgMHgwQTRBLCAweDc1NUUsIDB4NEM2MCwgMHg3NTYwLCAweDBEM0YsIDB4NzU2MiwgMHgwRDlGLA0KLSAgICAweDc1NjQsIDB4MTY1NiwgMHg3NTY1LCAweDBGNzQsIDB4NzU2NiwgMHgwNzIzLCAweDc1NjcsIDB4MTY1NywNCi0gICAgMHg3NTY5LCAweDE2NTUsIDB4NzU2QSwgMHgwRDZBLCAweDc1NkIsIDB4MTY1OCwgMHg3NTZDLCAweDNDM0IsDQotICAgIDB4NzU2RCwgMHgxNjU5LCAweDc1NkYsIDB4MjE3NSwgMHg3NTcwLCAweDA0OUYsIDB4NzU3MSwgMHg0NkQ0LA0KLSAgICAweDc1NzIsIDB4NDZEMywgMHg3NTczLCAweDA5REUsIDB4NzU3NCwgMHgxNjVFLCAweDc1NzUsIDB4Mzc1MSwNCi0gICAgMHg3NTc2LCAweDE2NUIsIDB4NzU3NywgMHgwQ0M1LCAweDc1NzgsIDB4MTY1QSwgMHg3NTc5LCAweDM5RkQsDQotICAgIDB4NzU3QSwgMHg0NkQ1LCAweDc1N0QsIDB4NDZENiwgMHg3NTdFLCAweDQ2RDcsIDB4NzU3RiwgMHgwNjQwLA0KLSAgICAweDc1ODEsIDB4MzlGRSwgMHg3NTgyLCAweDE2NjEsIDB4NzU4NiwgMHgxNjVDLCAweDc1ODcsIDB4MTY1RCwNCi0gICAgMHg3NTg5LCAweDE2NjAsIDB4NzU4QSwgMHgxNjVGLCAweDc1OEIsIDB4MEQ5NywgMHg3NThDLCAweDQ2RDgsDQotICAgIDB4NzU4RSwgMHgwQUM0LCAweDc1OEYsIDB4MEFDMywgMHg3NTkwLCAweDM5RkYsIDB4NzU5MSwgMHgwNjU5LA0KLSAgICAweDc1OTIsIDB4M0EwMCwgMHg3NTkzLCAweDNBMDEsIDB4NzU5NCwgMHgxNjYyLCAweDc1OTksIDB4NEM2MSwNCi0gICAgMHg3NTlBLCAweDE2NjMsIDB4NzU5RCwgMHgxNjY0LCAweDc1QTIsIDB4NDZEQSwgMHg3NUEzLCAweDE2NjYsDQotICAgIDB4NzVBNCwgMHg0QzYyLCAweDc1QTUsIDB4MTY2NSwgMHg3NUFCLCAweDA0RjgsIDB4NzVCMCwgMHg0NkRDLA0KLSAgICAweDc1QjEsIDB4MTY2RSwgMHg3NUIyLCAweDBEN0MsIDB4NzVCMywgMHgxNjY4LCAweDc1QjQsIDB4M0EwMiwNCi0gICAgMHg3NUI1LCAweDE2NkEsIDB4NzVCNywgMHg0NkRELCAweDc1QjgsIDB4MTY2QywgMHg3NUI5LCAweDBBMDQsDQotICAgIDB4NzVCQywgMHgxNjZELCAweDc1QkQsIDB4MTY2QiwgMHg3NUJFLCAweDA4RUMsIDB4NzVCRiwgMHg0NkRFLA0KLSAgICAweDc1QzAsIDB4NDZERiwgMHg3NUMxLCAweDRDNjMsIDB4NzVDMiwgMHgxNjY3LCAweDc1QzMsIDB4MTY2OSwNCi0gICAgMHg3NUM0LCAweDRDNjQsIDB4NzVDNSwgMHgwREI0LCAweDc1QzYsIDB4NDZFMCwgMHg3NUM3LCAweDA5QjEsDQotICAgIDB4NzVDQSwgMHgxNjcwLCAweDc1Q0MsIDB4NEM2NSwgMHg3NUNELCAweDE2NkYsIDB4NzVDRSwgMHg0MjU5LA0KLSAgICAweDc1Q0YsIDB4NDZFMSwgMHg3NUQyLCAweDE2NzEsIDB4NzVEMywgMHg0NkUyLCAweDc1RDQsIDB4MDhEMiwNCi0gICAgMHg3NUQ1LCAweDA4MUYsIDB4NzVENywgMHg0QzY2LCAweDc1RDgsIDB4MEM3MSwgMHg3NUQ5LCAweDE2NzIsDQotICAgIDB4NzVEQiwgMHgwQkU3LCAweDc1REMsIDB4NEM2NywgMHg3NURELCAweDQ2RTMsIDB4NzVERSwgMHgxNjc0LA0KLSAgICAweDc1REYsIDB4NDZFNCwgMHg3NUUwLCAweDQ2RTUsIDB4NzVFMSwgMHg0QzY4LCAweDc1RTIsIDB4MEY2OSwNCi0gICAgMHg3NUUzLCAweDE2NzMsIDB4NzVFNCwgMHgzQTAzLCAweDc1RTcsIDB4NDZFNiwgMHg3NUU5LCAweDBBRUIsDQotICAgIDB4NzVFQywgMHgzNzUyLCAweDc1RUUsIDB4NDZFNywgMHg3NUVGLCAweDRDNjksIDB4NzVGMCwgMHgxNjc5LA0KLSAgICAweDc1RjEsIDB4NDZFOCwgMHg3NUYyLCAweDE2N0IsIDB4NzVGMywgMHgxNjdDLCAweDc1RjQsIDB4MEI5MiwNCi0gICAgMHg3NUY5LCAweDNBMDQsIDB4NzVGQSwgMHgxNjdBLCAweDc1RkMsIDB4MTY3NywgMHg3NUZFLCAweDE2NzUsDQotICAgIDB4NzVGRiwgMHgxNjc2LCAweDc2MDAsIDB4M0EwNSwgMHg3NjAxLCAweDE2NzgsIDB4NzYwMiwgMHg0MjVBLA0KLSAgICAweDc2MDMsIDB4NDZFOSwgMHg3NjA0LCAweDRDNkEsIDB4NzYwNywgMHg0NkVCLCAweDc2MDgsIDB4NDI1QiwNCi0gICAgMHg3NjA5LCAweDE2N0YsIDB4NzYwQSwgMHgzQTA2LCAweDc2MEIsIDB4MTY3RCwgMHg3NjBDLCAweDRDNkIsDQotICAgIDB4NzYwRCwgMHgxNjdFLCAweDc2MEYsIDB4NDZFQywgMHg3NjEzLCAweDQ2RUYsIDB4NzYxNSwgMHgzQTA3LA0KLSAgICAweDc2MTYsIDB4M0EwOCwgMHg3NjE4LCAweDQ2RUEsIDB4NzYxOSwgMHgzQTA5LCAweDc2MUIsIDB4NDZGMCwNCi0gICAgMHg3NjFDLCAweDQ2RjEsIDB4NzYxRCwgMHg0QzZDLCAweDc2MUUsIDB4M0EwQSwgMHg3NjFGLCAweDE2ODAsDQotICAgIDB4NzYyMCwgMHgxNjgyLCAweDc2MjEsIDB4MTY4MywgMHg3NjIyLCAweDE2ODQsIDB4NzYyNCwgMHgxNjg1LA0KLSAgICAweDc2MjUsIDB4NDZGMywgMHg3NjI2LCAweDM2NDUsIDB4NzYyNywgMHgxNjgxLCAweDc2MjgsIDB4NDZGNCwNCi0gICAgMHg3NjJELCAweDNBMEIsIDB4NzYzMCwgMHgxNjg3LCAweDc2MzIsIDB4NEM2RCwgMHg3NjMzLCAweDQ2RjYsDQotICAgIDB4NzYzNCwgMHgxNjg2LCAweDc2MzUsIDB4M0EwQywgMHg3NjM4LCAweDRDNkUsIDB4NzYzQiwgMHgxNjg4LA0KLSAgICAweDc2M0MsIDB4NDZGNSwgMHg3NjQxLCAweDQ2RjksIDB4NzY0MiwgMHgwRjhELCAweDc2NDMsIDB4M0EwRCwNCi0gICAgMHg3NjQ1LCAweDRDNkYsIDB4NzY0NiwgMHgxNjhCLCAweDc2NDcsIDB4MTY4OSwgMHg3NjQ4LCAweDE2OEEsDQotICAgIDB4NzY0OSwgMHg0NkZCLCAweDc2NEEsIDB4NEM3MCwgMHg3NjRCLCAweDNBMEUsIDB4NzY0QywgMHgwNjFFLA0KLSAgICAweDc2NEUsIDB4Mzc1MywgMHg3NjUyLCAweDBGMEEsIDB4NzY1NSwgMHg0NkZDLCAweDc2NTYsIDB4MEUxQSwNCi0gICAgMHg3NjU4LCAweDE2OEQsIDB4NzY1QywgMHgxNjhDLCAweDc2NUYsIDB4NEM3MSwgMHg3NjYxLCAweDE2OEUsDQotICAgIDB4NzY2MiwgMHgxNjhGLCAweDc2NjQsIDB4NDI1QywgMHg3NjY1LCAweDNBMEYsIDB4NzY2NywgMHgxNjkzLA0KLSAgICAweDc2NjgsIDB4MTY5MCwgMHg3NjY5LCAweDE2OTEsIDB4NzY2QSwgMHgxNjkyLCAweDc2NkMsIDB4MTY5NCwNCi0gICAgMHg3NjZELCAweDNBMTAsIDB4NzY2RSwgMHg0NkZFLCAweDc2NkYsIDB4M0ExMSwgMHg3NjcwLCAweDE2OTUsDQotICAgIDB4NzY3MSwgMHgzQTEyLCAweDc2NzIsIDB4MTY5NiwgMHg3Njc0LCAweDNBMTMsIDB4NzY3NiwgMHgxNjk3LA0KLSAgICAweDc2NzgsIDB4MTY5OCwgMHg3NjdBLCAweDBENDMsIDB4NzY3QiwgMHgwQzRBLCAweDc2N0MsIDB4MTY5OSwNCi0gICAgMHg3NjdELCAweDBEMjgsIDB4NzY3RSwgMHgwREE2LCAweDc2ODAsIDB4MTY5QSwgMHg3NjgxLCAweDQyNUQsDQotICAgIDB4NzY4MiwgMHgyMTc2LCAweDc2ODMsIDB4MTY5QiwgMHg3Njg0LCAweDBDMjQsIDB4NzY4NiwgMHgwNTg1LA0KLSAgICAweDc2ODcsIDB4MDdENiwgMHg3Njg4LCAweDE2OUMsIDB4NzY4QiwgMHgxNjlELCAweDc2OEUsIDB4MTY5RSwNCi0gICAgMHg3NjkwLCAweDA4NzcsIDB4NzY5MywgMHgxNkEwLCAweDc2OTUsIDB4NDZGRiwgMHg3Njk2LCAweDE2OUYsDQotICAgIDB4NzY5OSwgMHgxNkExLCAweDc2OUEsIDB4MTZBMiwgMHg3NjlCLCAweDIxNzksIDB4NzY5QywgMHgyMTc3LA0KLSAgICAweDc2OUQsIDB4NDI1RSwgMHg3NjlFLCAweDIxNzgsIDB4NzZBMCwgMHg0NzAxLCAweDc2QTEsIDB4NDcwMCwNCi0gICAgMHg3NkE0LCAweDNBMTQsIDB4NzZBNSwgMHgzQTE1LCAweDc2QTYsIDB4MjE3QSwgMHg3NkE3LCAweDQ3MDIsDQotICAgIDB4NzZBOCwgMHg0NzAzLCAweDc2QUEsIDB4NDI1RiwgMHg3NkFELCAweDRDNzIsIDB4NzZBRSwgMHgwRDdELA0KLSAgICAweDc2QUYsIDB4NDcwNCwgMHg3NkIwLCAweDE2QTMsIDB4NzZCNCwgMHgxNkE0LCAweDc2QjYsIDB4NDI2MCwNCi0gICAgMHg3NkI3LCAweDFEMUMsIDB4NzZCOCwgMHgxNkE1LCAweDc2QjksIDB4MTZBNiwgMHg3NkJBLCAweDE2QTcsDQotICAgIDB4NzZCRCwgMHg0QzczLCAweDc2QkYsIDB4MDg3QywgMHg3NkMyLCAweDE2QTgsIDB4NzZDMywgMHgwRDBDLA0KLSAgICAweDc2QzUsIDB4M0ExNiwgMHg3NkM2LCAweDBFOEQsIDB4NzZDOCwgMHgwNEYwLCAweDc2QzksIDB4NDcwNiwNCi0gICAgMHg3NkNBLCAweDA0RjksIDB4NzZDQywgMHgzQTE3LCAweDc2Q0QsIDB4MTZBOSwgMHg3NkNFLCAweDQyNjEsDQotICAgIDB4NzZEMiwgMHgxNkFCLCAweDc2RDQsIDB4NDI2MiwgMHg3NkQ2LCAweDE2QUEsIDB4NzZENywgMHgwQzZBLA0KLSAgICAweDc2RDksIDB4NEM3NCwgMHg3NkRCLCAweDBBNUQsIDB4NzZEQywgMHgxNEQ4LCAweDc2REUsIDB4MTZBQywNCi0gICAgMHg3NkRGLCAweDBFQ0QsIDB4NzZFMSwgMHgxNkFELCAweDc2RTMsIDB4MDYwMiwgMHg3NkU0LCAweDBENkIsDQotICAgIDB4NzZFNSwgMHgxNkFFLCAweDc2RTYsIDB4NDI2MywgMHg3NkU3LCAweDE2QUYsIDB4NzZFOCwgMHg0NzA4LA0KLSAgICAweDc2RUEsIDB4MTZCMCwgMHg3NkVCLCAweDRDNzUsIDB4NzZFQywgMHgzQTE4LCAweDc2RUUsIDB4MEVFOCwNCi0gICAgMHg3NkYwLCAweDRDNzYsIDB4NzZGMSwgMHg0MjY0LCAweDc2RjIsIDB4MEVFMSwgMHg3NkY0LCAweDBCREEsDQotICAgIDB4NzZGOCwgMHgwQUVDLCAweDc2RjksIDB4NEM3NywgMHg3NkZCLCAweDE2QjIsIDB4NzZGQywgMHgzQTE5LA0KLSAgICAweDc2RkUsIDB4MDk2QywgMHg3NzAwLCAweDRDNzgsIDB4NzcwMSwgMHgwOUIyLCAweDc3MDQsIDB4MTZCNSwNCi0gICAgMHg3NzA3LCAweDE2QjQsIDB4NzcwOCwgMHgxNkIzLCAweDc3MDksIDB4MEQ5MSwgMHg3NzBBLCAweDQyNjUsDQotICAgIDB4NzcwQiwgMHgwNjAzLCAweDc3MEMsIDB4MDc1RCwgMHg3NzBFLCAweDRDNzksIDB4NzcxNywgMHg0NzBBLA0KLSAgICAweDc3MTksIDB4NDI2NiwgMHg3NzFBLCAweDQ3MEIsIDB4NzcxQiwgMHgxNkJCLCAweDc3MUUsIDB4MTZCOCwNCi0gICAgMHg3NzFGLCAweDBBMDUsIDB4NzcyMCwgMHgwRUJFLCAweDc3MjIsIDB4NEM3QSwgMHg3NzI0LCAweDE2QjcsDQotICAgIDB4NzcyNSwgMHgxNkI5LCAweDc3MjYsIDB4MTZCQSwgMHg3NzI4LCAweDRDN0IsIDB4NzcyOSwgMHgxNkI2LA0KLSAgICAweDc3MkQsIDB4NDcwQywgMHg3NzJGLCAweDRDN0MsIDB4NzczNCwgMHgzQTFBLCAweDc3MzUsIDB4NDcwRCwNCi0gICAgMHg3NzM2LCAweDNBMUIsIDB4NzczNywgMHgxNkJDLCAweDc3MzgsIDB4MTZCRCwgMHg3NzM5LCAweDRDN0QsDQotICAgIDB4NzczQSwgMHgwQkNCLCAweDc3M0MsIDB4MDYxRiwgMHg3NzNFLCAweDRDN0UsIDB4Nzc0MCwgMHgwQkEzLA0KLSAgICAweDc3NDUsIDB4NEM3RiwgMHg3NzQ2LCAweDIxN0MsIDB4Nzc0NywgMHgxNkJFLCAweDc3NEEsIDB4NEM4MCwNCi0gICAgMHg3NzRELCAweDQyNjcsIDB4Nzc0RSwgMHg0MjY4LCAweDc3NEYsIDB4NEM4MSwgMHg3NzU4LCAweDQ3MTIsDQotICAgIDB4Nzc1QSwgMHgxNkJGLCAweDc3NUIsIDB4MTZDMiwgMHg3NzVDLCAweDNBMUMsIDB4Nzc1RSwgMHg0QzgyLA0KLSAgICAweDc3NUYsIDB4M0ExRCwgMHg3NzYwLCAweDNBMUUsIDB4Nzc2MSwgMHgwQTJELCAweDc3NjIsIDB4MUVDNSwNCi0gICAgMHg3NzYzLCAweDBDOUMsIDB4Nzc2NCwgMHg0QzgzLCAweDc3NjUsIDB4MTZDMywgMHg3NzY2LCAweDBFODEsDQotICAgIDB4Nzc2NywgMHg0Qzg0LCAweDc3NjgsIDB4MTZDMCwgMHg3NzZBLCAweDM3NTUsIDB4Nzc2QiwgMHgxNkMxLA0KLSAgICAweDc3NkMsIDB4NEM4NSwgMHg3NzcyLCAweDNBMUYsIDB4Nzc3OSwgMHgxNkM2LCAweDc3N0EsIDB4NDI2OSwNCi0gICAgMHg3NzdDLCAweDQ3MTQsIDB4Nzc3RCwgMHgzQTIwLCAweDc3N0UsIDB4MTZDNSwgMHg3NzdGLCAweDE2QzQsDQotICAgIDB4Nzc4MCwgMHg0MjZBLCAweDc3ODQsIDB4NEM4NiwgMHg3NzhCLCAweDE2QzgsIDB4Nzc4QywgMHg0Qzg3LA0KLSAgICAweDc3OEQsIDB4NEM4OCwgMHg3NzhFLCAweDE2QzcsIDB4Nzc5MSwgMHgxNkM5LCAweDc3OTQsIDB4NDI2QiwNCi0gICAgMHg3Nzk1LCAweDNBMjEsIDB4Nzc5NiwgMHg0Qzg5LCAweDc3OUEsIDB4NDcxNywgMHg3NzlFLCAweDE2Q0IsDQotICAgIDB4Nzc5RiwgMHg0NzE4LCAweDc3QTAsIDB4MTZDQSwgMHg3N0EyLCAweDQ3MTksIDB4NzdBNCwgMHg0NzFBLA0KLSAgICAweDc3QTUsIDB4MEUxRCwgMHg3N0E3LCAweDRDOEEsIDB4NzdBOSwgMHgzNzU2LCAweDc3QUEsIDB4M0EyMiwNCi0gICAgMHg3N0FDLCAweDA5NjAsIDB4NzdBRCwgMHgwRjhFLCAweDc3QUYsIDB4NEM4QiwgMHg3N0IwLCAweDE2Q0MsDQotICAgIDB4NzdCMywgMHgwQzhGLCAweDc3QjYsIDB4MTZDRCwgMHg3N0I3LCAweDRDOEMsIDB4NzdCOSwgMHgxNkNFLA0KLSAgICAweDc3QkIsIDB4MTZEMiwgMHg3N0JDLCAweDE2RDAsIDB4NzdCRCwgMHgxNkQxLCAweDc3QkUsIDB4NEM4RCwNCi0gICAgMHg3N0JGLCAweDE2Q0YsIDB4NzdDNywgMHgxNkQzLCAweDc3QzksIDB4NEM4RSwgMHg3N0NELCAweDE2RDQsDQotICAgIDB4NzdEMSwgMHg0QzhGLCAweDc3RDcsIDB4MTZENSwgMHg3N0Q5LCAweDRDOTAsIDB4NzdEQSwgMHgxNkQ2LA0KLSAgICAweDc3REIsIDB4MEVDMywgMHg3N0RDLCAweDE2RDcsIDB4NzdERSwgMHg0NzFCLCAweDc3REYsIDB4NDcxQywNCi0gICAgMHg3N0UwLCAweDQyNkMsIDB4NzdFMiwgMHgwRUZDLCAweDc3RTMsIDB4MTZEOCwgMHg3N0U0LCAweDQ3MUQsDQotICAgIDB4NzdFNSwgMHgwQjhDLCAweDc3RTYsIDB4M0EyMywgMHg3N0U3LCAweDBEMjAsIDB4NzdFOSwgMHgwNkUzLA0KLSAgICAweDc3RUEsIDB4NDcxRSwgMHg3N0VDLCAweDQ3MUYsIDB4NzdFRCwgMHgwQjc5LCAweDc3RUUsIDB4MTZEOSwNCi0gICAgMHg3N0VGLCAweDA2QjIsIDB4NzdGMCwgMHgzQTI0LCAweDc3RjEsIDB4NEM5MSwgMHg3N0YzLCAweDBBNzQsDQotICAgIDB4NzdGNCwgMHgzQTI1LCAweDc3RkIsIDB4NDcyMCwgMHg3N0ZDLCAweDE2REEsIDB4NzgwMiwgMHgwODJELA0KLSAgICAweDc4MDUsIDB4NDcyMiwgMHg3ODA2LCAweDNBMjYsIDB4NzgwOSwgMHg0NzIzLCAweDc4MEMsIDB4MTZEQiwNCi0gICAgMHg3ODBELCAweDQ3MjQsIDB4NzgxMiwgMHgxNkRDLCAweDc4MTQsIDB4MDc1QSwgMHg3ODE1LCAweDA4NDUsDQotICAgIDB4NzgxOSwgMHg0NzI1LCAweDc4MjAsIDB4MTZERSwgMHg3ODIxLCAweDIxN0UsIDB4NzgyMiwgMHgzQTI3LA0KLSAgICAweDc4MjUsIDB4MEM1MCwgMHg3ODI2LCAweDA4NDYsIDB4NzgyNywgMHgwNjY4LCAweDc4MkMsIDB4NDcyNiwNCi0gICAgMHg3ODJELCAweDNBMjgsIDB4NzgyRSwgMHgzQTI5LCAweDc4MzAsIDB4M0EyQSwgMHg3ODMyLCAweDBFNTIsDQotICAgIDB4NzgzNCwgMHgwRDAxLCAweDc4MzUsIDB4M0EyQiwgMHg3ODM3LCAweDRDOTIsIDB4NzgzQSwgMHgwQzUxLA0KLSAgICAweDc4M0YsIDB4MDdFRSwgMHg3ODQzLCAweDQyNkUsIDB4Nzg0NSwgMHgxNkUwLCAweDc4NDcsIDB4NDcyNywNCi0gICAgMHg3ODRFLCAweDIxN0YsIDB4Nzg0RiwgMHgzNDFFLCAweDc4NTEsIDB4M0MzQywgMHg3ODVDLCAweDRDOTMsDQotICAgIDB4Nzg1RCwgMHgwOUIzLCAweDc4NjQsIDB4MjE4MCwgMHg3ODY4LCAweDNBMkMsIDB4Nzg2QSwgMHg0NzI4LA0KLSAgICAweDc4NkIsIDB4MEY3QSwgMHg3ODZDLCAweDA3RDcsIDB4Nzg2RSwgMHg0MjZGLCAweDc4NkYsIDB4MDc1QiwNCi0gICAgMHg3ODcyLCAweDBEMzcsIDB4Nzg3NCwgMHgxNkUyLCAweDc4N0EsIDB4MjE4MSwgMHg3ODdDLCAweDE2RTQsDQotICAgIDB4Nzg3RSwgMHg0Qzk0LCAweDc4ODEsIDB4MDc5RiwgMHg3ODg2LCAweDE2RTMsIDB4Nzg4NywgMHgwQzEyLA0KLSAgICAweDc4OEEsIDB4NDcyQSwgMHg3ODhDLCAweDE2RTYsIDB4Nzg4RCwgMHgwNTk1LCAweDc4OEUsIDB4MTZFMSwNCi0gICAgMHg3ODkxLCAweDBEN0UsIDB4Nzg5MywgMHgwNEQyLCAweDc4OTQsIDB4NDcyQiwgMHg3ODk1LCAweDA4NUMsDQotICAgIDB4Nzg5NywgMHgwRkY4LCAweDc4OTgsIDB4NEM5NSwgMHg3ODlBLCAweDE2RTUsIDB4Nzg5RCwgMHg0NzJELA0KLSAgICAweDc4OUUsIDB4M0EyRCwgMHg3ODlGLCAweDQ3MkUsIDB4NzhBMSwgMHg0Qzk2LCAweDc4QTMsIDB4MTZFNywNCi0gICAgMHg3OEE0LCAweDQ3MkMsIDB4NzhBNywgMHgwRTFCLCAweDc4QTksIDB4MEE3RCwgMHg3OEFBLCAweDE2RTksDQotICAgIDB4NzhBRCwgMHg0MjcyLCAweDc4QUYsIDB4MTZFQSwgMHg3OEIwLCAweDQyNzAsIDB4NzhCMSwgMHg0Qzk3LA0KLSAgICAweDc4QjMsIDB4NEM5OCwgMHg3OEI1LCAweDE2RTgsIDB4NzhCQSwgMHgwNUFDLCAweDc4QkIsIDB4NDcyRiwNCi0gICAgMHg3OEJDLCAweDE2RjAsIDB4NzhCRSwgMHgxNkVGLCAweDc4QzEsIDB4MDhEMywgMHg3OEM1LCAweDE2RjEsDQotICAgIDB4NzhDNiwgMHgxNkVDLCAweDc4QzgsIDB4M0EyRSwgMHg3OEM5LCAweDRDOTksIDB4NzhDQSwgMHgxNkYyLA0KLSAgICAweDc4Q0IsIDB4MTZFRCwgMHg3OENDLCAweDNBMkYsIDB4NzhDRSwgMHgzQTMwLCAweDc4RDAsIDB4MEQ2QywNCi0gICAgMHg3OEQxLCAweDE2RUIsIDB4NzhEMywgMHg0QzlBLCAweDc4RDQsIDB4MTZFRSwgMHg3OEQ1LCAweDQ3MzAsDQotICAgIDB4NzhEQSwgMHgxNkY1LCAweDc4RTAsIDB4M0EzMiwgMHg3OEUxLCAweDNBMzMsIDB4NzhFNCwgMHgzQTMxLA0KLSAgICAweDc4RTYsIDB4NDczMSwgMHg3OEU3LCAweDE2RjQsIDB4NzhFOCwgMHgwRThGLCAweDc4RUMsIDB4MTZGMywNCi0gICAgMHg3OEVGLCAweDA0QUYsIDB4NzhGMiwgMHgzQTM0LCAweDc4RjQsIDB4MTZGNywgMHg3OEY3LCAweDNBMzUsDQotICAgIDB4NzhGOSwgMHg0NzMyLCAweDc4RkEsIDB4NDczMywgMHg3OEZCLCAweDNBMzYsIDB4NzhGRCwgMHgxNkY2LA0KLSAgICAweDc4RkUsIDB4NDczNCwgMHg3OTAwLCAweDQyNzMsIDB4NzkwMSwgMHgwOUI0LCAweDc5MDcsIDB4MTZGOCwNCi0gICAgMHg3OTBDLCAweDRDOUIsIDB4NzkwRSwgMHgwQUM1LCAweDc5MTAsIDB4NDczNiwgMHg3OTExLCAweDE2RkEsDQotICAgIDB4NzkxMiwgMHgxNkY5LCAweDc5MTksIDB4MTZGQiwgMHg3OTFCLCAweDQ3MzcsIDB4NzkxQywgMHg0Mjc0LA0KLSAgICAweDc5MUYsIDB4NEM5QywgMHg3OTI1LCAweDQ3MzgsIDB4NzkyNiwgMHgxNkRELCAweDc5MjcsIDB4NEM5RCwNCi0gICAgMHg3OTI4LCAweDRDOUUsIDB4NzkyQSwgMHgxNkRGLCAweDc5MkIsIDB4MTZGRCwgMHg3OTJDLCAweDE2RkMsDQotICAgIDB4NzkyRSwgMHg0Mjc1LCAweDc5MzAsIDB4MjE4MiwgMHg3OTMxLCAweDNBMzcsIDB4NzkzNCwgMHg0Mjc2LA0KLSAgICAweDc5M0EsIDB4MDhENCwgMHg3OTNCLCAweDNBMzksIDB4NzkzQywgMHgwRkIxLCAweDc5M0QsIDB4M0EzQSwNCi0gICAgMHg3OTNFLCAweDA4RkUsIDB4NzkzRiwgMHg0QzlGLCAweDc5NDAsIDB4MTZGRSwgMHg3OTQxLCAweDA3MEQsDQotICAgIDB4Nzk0MiwgMHg0Q0EwLCAweDc5NDUsIDB4M0EzQiwgMHg3OTQ2LCAweDQyNzcsIDB4Nzk0NywgMHgwNjVBLA0KLSAgICAweDc5NDgsIDB4MDY0MSwgMHg3OTQ5LCAweDA4QjEsIDB4Nzk0QSwgMHg0NzM5LCAweDc5NTAsIDB4MEYxRSwNCi0gICAgMHg3OTUzLCAweDE3MDQsIDB4Nzk1NCwgMHg0Q0ExLCAweDc5NTUsIDB4MTcwMywgMHg3OTU2LCAweDBBQzYsDQotICAgIDB4Nzk1NywgMHgxNzAwLCAweDc5NTgsIDB4NDczQSwgMHg3OTVBLCAweDE3MDIsIDB4Nzk1QiwgMHgzQTNDLA0KLSAgICAweDc5NUMsIDB4M0EzRCwgMHg3OTVELCAweDA5NTUsIDB4Nzk1RSwgMHgwQTA2LCAweDc5NUYsIDB4MTcwMSwNCi0gICAgMHg3OTYwLCAweDE2RkYsIDB4Nzk2MiwgMHgwQ0UwLCAweDc5NjUsIDB4MDlCNSwgMHg3OTY3LCAweDQ3M0MsDQotICAgIDB4Nzk2OCwgMHgwREFFLCAweDc5NkIsIDB4NENBMiwgMHg3OTZELCAweDA4NDcsIDB4Nzk3MiwgMHg0NzNELA0KLSAgICAweDc5NzcsIDB4MEM3MiwgMHg3OTc5LCAweDQyNzgsIDB4Nzk3QSwgMHgxNzA1LCAweDc5N0MsIDB4NENBMywNCi0gICAgMHg3OTdGLCAweDE3MDYsIDB4Nzk4MCwgMHgxNzFDLCAweDc5ODEsIDB4MDZEMCwgMHg3OTg0LCAweDBGRTMsDQotICAgIDB4Nzk4NSwgMHgwQUI3LCAweDc5OEEsIDB4MTcwNywgMHg3OThCLCAweDNBM0UsIDB4Nzk4RCwgMHgwNTUyLA0KLSAgICAweDc5OEUsIDB4MEMxMywgMHg3OThGLCAweDBERjEsIDB4Nzk5NCwgMHgyMTg2LCAweDc5OTUsIDB4NDczRSwNCi0gICAgMHg3OTk2LCAweDNBM0YsIDB4Nzk5OCwgMHgzQTQwLCAweDc5OUIsIDB4MjE4OCwgMHg3OTlELCAweDE3MDgsDQotICAgIDB4NzlBMSwgMHg0NzNGLCAweDc5QTYsIDB4MDY5NCwgMHg3OUE3LCAweDE3MDksIDB4NzlBOSwgMHg0NzQwLA0KLSAgICAweDc5QUEsIDB4MTcwQiwgMHg3OUFCLCAweDRDQTQsIDB4NzlBRSwgMHgxNzBDLCAweDc5QjAsIDB4MENERiwNCi0gICAgMHg3OUIxLCAweDFFNEUsIDB4NzlCMywgMHgxNzBELCAweDc5QjQsIDB4NDc0MSwgMHg3OUI4LCAweDNBNDEsDQotICAgIDB4NzlCOSwgMHgxNzBFLCAweDc5QkEsIDB4MTcwRiwgMHg3OUJCLCAweDNBNDIsIDB4NzlCRCwgMHgwNkQxLA0KLSAgICAweDc5QkUsIDB4MDU1MywgMHg3OUJGLCAweDBDOUQsIDB4NzlDMCwgMHgwOTMyLCAweDc5QzEsIDB4MDhCMiwNCi0gICAgMHg3OUMyLCAweDQ3NDIsIDB4NzlDNCwgMHg0Q0E1LCAweDc5QzcsIDB4NDc0MywgMHg3OUM4LCAweDQyNzksDQotICAgIDB4NzlDOSwgMHgxNzEwLCAweDc5Q0EsIDB4M0E0MywgMHg3OUNCLCAweDA5MzMsIDB4NzlDQywgMHg0NzQ0LA0KLSAgICAweDc5Q0QsIDB4NDc0NSwgMHg3OUQxLCAweDA1NEEsIDB4NzlEMiwgMHgwREI1LCAweDc5RDQsIDB4NDI3QiwNCi0gICAgMHg3OUQ1LCAweDE3MTEsIDB4NzlENiwgMHg0NzQ2LCAweDc5RDgsIDB4MEQ3RiwgMHg3OURBLCAweDNBNDQsDQotICAgIDB4NzlERSwgMHg0MjdDLCAweDc5REYsIDB4MEFDNywgMHg3OUUxLCAweDE3MTQsIDB4NzlFMywgMHgxNzE1LA0KLSAgICAweDc5RTQsIDB4MEQxRiwgMHg3OUU2LCAweDBBMDcsIDB4NzlFNywgMHgxNzEyLCAweDc5RTksIDB4MEI5RiwNCi0gICAgMHg3OUVBLCAweDRDQTYsIDB4NzlFQiwgMHg0MjdELCAweDc5RUMsIDB4MTcxMywgMHg3OUVELCAweDQyN0UsDQotICAgIDB4NzlGMCwgMHgwOUI2LCAweDc5RkIsIDB4MDRBMCwgMHg3QTAwLCAweDA2NDMsIDB4N0EwMiwgMHg0Q0E3LA0KLSAgICAweDdBMDMsIDB4M0E0NSwgMHg3QTA1LCAweDM2MzMsIDB4N0EwOCwgMHgxNzE2LCAweDdBMDksIDB4M0E0NiwNCi0gICAgMHg3QTBBLCAweDQ3NEIsIDB4N0EwQiwgMHgwQzE0LCAweDdBMEMsIDB4NENBOCwgMHg3QTBELCAweDE3MTcsDQotICAgIDB4N0EwRSwgMHgwQTZCLCAweDdBMTEsIDB4M0E0NywgMHg3QTE0LCAweDBFQjksIDB4N0ExNSwgMHg0NzRDLA0KLSAgICAweDdBMTcsIDB4MEQ5NSwgMHg3QTE4LCAweDE3MTgsIDB4N0ExOSwgMHgxNzE5LCAweDdBMUEsIDB4MEI5MywNCi0gICAgMHg3QTFCLCAweDQ3NEQsIDB4N0ExQywgMHgwRjhGLCAweDdBMUUsIDB4M0E0OCwgMHg3QTFGLCAweDE3MUIsDQotICAgIDB4N0EyMCwgMHgxNzFBLCAweDdBMkQsIDB4M0E0OSwgMHg3QTJFLCAweDA5MUIsIDB4N0EzMCwgMHg0Q0E5LA0KLSAgICAweDdBMzEsIDB4MTcxRCwgMHg3QTMyLCAweDA0QjQsIDB4N0EzNywgMHgxNzIwLCAweDdBMzgsIDB4NDc0RiwNCi0gICAgMHg3QTM5LCAweDNBNEEsIDB4N0EzQSwgMHg0Q0FBLCAweDdBM0IsIDB4MTcxRSwgMHg3QTNDLCAweDA1NTQsDQotICAgIDB4N0EzRCwgMHgwNzI0LCAweDdBM0UsIDB4MTcxRiwgMHg3QTNGLCAweDA3RDgsIDB4N0E0MCwgMHgwODA0LA0KLSAgICAweDdBNDIsIDB4MEUzNiwgMHg3QTQzLCAweDE3MjEsIDB4N0E0NCwgMHg0Q0FCLCAweDdBNDUsIDB4M0E0QiwNCi0gICAgMHg3QTQ2LCAweDBFODIsIDB4N0E0NywgMHg0NzUwLCAweDdBNDksIDB4MTcyMywgMHg3QTRDLCAweDNBNEMsDQotICAgIDB4N0E0RCwgMHgwQTc1LCAweDdBNEUsIDB4MDRGMSwgMHg3QTRGLCAweDA1M0EsIDB4N0E1MCwgMHgwNDcwLA0KLSAgICAweDdBNTYsIDB4NDc1MSwgMHg3QTU3LCAweDE3MjIsIDB4N0E1OSwgMHg0NzUyLCAweDdBNUMsIDB4NDc1MywNCi0gICAgMHg3QTVELCAweDNBNEQsIDB4N0E1RiwgMHg0NzU0LCAweDdBNjAsIDB4NEY1NiwgMHg3QTYxLCAweDE3MjQsDQotICAgIDB4N0E2MiwgMHgxNzI1LCAweDdBNjMsIDB4MDlERiwgMHg3QTY3LCAweDQ3NTUsIDB4N0E2OSwgMHgxNzI2LA0KLSAgICAweDdBNkEsIDB4NDc1NiwgMHg3QTZCLCAweDA1QUQsIDB4N0E2RCwgMHgzQTRGLCAweDdBNzAsIDB4MTcyOCwNCi0gICAgMHg3QTc0LCAweDA3NDAsIDB4N0E3NSwgMHg0NzU3LCAweDdBNzYsIDB4MDY4MCwgMHg3QTc4LCAweDNBNTAsDQotICAgIDB4N0E3OSwgMHgxNzI5LCAweDdBN0EsIDB4MDZFRCwgMHg3QTdELCAweDE3MkEsIDB4N0E3RiwgMHgwQUEwLA0KLSAgICAweDdBODAsIDB4NENBQywgMHg3QTgxLCAweDBDQTUsIDB4N0E4MiwgMHg0NzU4LCAweDdBODMsIDB4MEE4NCwNCi0gICAgMHg3QTg0LCAweDA4NjUsIDB4N0E4NSwgMHg0MjdGLCAweDdBODYsIDB4NENBRCwgMHg3QTg4LCAweDE3MkIsDQotICAgIDB4N0E4QSwgMHg0NzU5LCAweDdBOTAsIDB4NDc1QSwgMHg3QTkyLCAweDBCQTAsIDB4N0E5MywgMHgwQUVELA0KLSAgICAweDdBOTQsIDB4NENBRSwgMHg3QTk1LCAweDE3MkQsIDB4N0E5NiwgMHgxNzJGLCAweDdBOTcsIDB4MTcyQywNCi0gICAgMHg3QTk4LCAweDE3MkUsIDB4N0E5RiwgMHgwNkY4LCAweDdBQTAsIDB4M0E1MSwgMHg3QUEzLCAweDNBNTIsDQotICAgIDB4N0FBOSwgMHgxNzMwLCAweDdBQUEsIDB4MDZGQywgMHg3QUFDLCAweDQ3NUIsIDB4N0FBRSwgMHgwNjgxLA0KLSAgICAweDdBQUYsIDB4MEYzQywgMHg3QUIwLCAweDE3MzIsIDB4N0FCMywgMHgzQTUzLCAweDdBQjUsIDB4NENBRiwNCi0gICAgMHg3QUI2LCAweDE3MzMsIDB4N0FCOSwgMHg0NzVFLCAweDdBQkEsIDB4MDREMCwgMHg3QUJCLCAweDNBNTQsDQotICAgIDB4N0FCQywgMHgzQTU1LCAweDdBQkQsIDB4NENCMCwgMHg3QUJFLCAweDQ3NUYsIDB4N0FCRiwgMHgxNzM2LA0KLSAgICAweDdBQzMsIDB4MDVENCwgMHg3QUM0LCAweDE3MzUsIDB4N0FDNSwgMHgxNzM0LCAweDdBQzYsIDB4M0E1NiwNCi0gICAgMHg3QUM3LCAweDE3MzgsIDB4N0FDOCwgMHgxNzMxLCAweDdBQ0EsIDB4MTczOSwgMHg3QUNCLCAweDBGNzEsDQotICAgIDB4N0FDQywgMHg0NzYxLCAweDdBQ0QsIDB4MTczQSwgMHg3QUNFLCAweDQyODEsIDB4N0FDRiwgMHgxNzNCLA0KLSAgICAweDdBRDEsIDB4MjE4OSwgMHg3QUQyLCAweDExQzUsIDB4N0FEMywgMHgxNzNELCAweDdBRDUsIDB4MTczQywNCi0gICAgMHg3QUQ5LCAweDE3M0UsIDB4N0FEQSwgMHgxNzNGLCAweDdBREMsIDB4MEY3RCwgMHg3QURELCAweDE3NDAsDQotICAgIDB4N0FERiwgMHgxQzA4LCAweDdBRTAsIDB4MDlCNywgMHg3QUUxLCAweDE3NDEsIDB4N0FFMiwgMHgxNzQyLA0KLSAgICAweDdBRTMsIDB4MDk2MSwgMHg3QUU1LCAweDBDOTAsIDB4N0FFNiwgMHgxNzQzLCAweDdBRTcsIDB4MjE4QSwNCi0gICAgMHg3QUU4LCAweDQ3NjIsIDB4N0FFQSwgMHgwQjY2LCAweDdBRUIsIDB4MjE4QywgMHg3QUVELCAweDE3NDQsDQotICAgIDB4N0FFRiwgMHgwQjdBLCAweDdBRjAsIDB4MTc0NSwgMHg3QUY0LCAweDQ3NjMsIDB4N0FGNiwgMHgwNjlELA0KLSAgICAweDdBRjgsIDB4MTA3NiwgMHg3QUY5LCAweDBCOUIsIDB4N0FGQSwgMHgwOERGLCAweDdBRkQsIDB4NDI4MiwNCi0gICAgMHg3QUZFLCAweDRDQjEsIDB4N0FGRiwgMHgwNjA0LCAweDdCMDIsIDB4MTc0NiwgMHg3QjA0LCAweDE3NTMsDQotICAgIDB4N0IwNiwgMHgxNzQ5LCAweDdCMDcsIDB4M0E1NywgMHg3QjA4LCAweDA2ODIsIDB4N0IwQSwgMHgxNzQ4LA0KLSAgICAweDdCMEIsIDB4MTc1NSwgMHg3QjBGLCAweDE3NDcsIDB4N0IxMSwgMHgwOUI4LCAweDdCMTIsIDB4NDI4MywNCi0gICAgMHg3QjE0LCAweDNBNTgsIDB4N0IxOCwgMHgxNzRCLCAweDdCMTksIDB4MTc0QywgMHg3QjFCLCAweDBDMjUsDQotICAgIDB4N0IxRSwgMHgxNzRELCAweDdCMjAsIDB4MDVCQywgMHg3QjI1LCAweDBBMjAsIDB4N0IyNiwgMHgwREQ2LA0KLSAgICAweDdCMjcsIDB4M0E1OSwgMHg3QjI4LCAweDE3NEYsIDB4N0IyQSwgMHg0NzY4LCAweDdCMkIsIDB4NENCMiwNCi0gICAgMHg3QjJDLCAweDBCNDgsIDB4N0IyRCwgMHg0Mjg0LCAweDdCMkUsIDB4NDc2OSwgMHg3QjJGLCAweDQ3NkEsDQotICAgIDB4N0IzMSwgMHgzQTVBLCAweDdCMzMsIDB4MTc0QSwgMHg3QjM1LCAweDE3NEUsIDB4N0IzNiwgMHgxNzUwLA0KLSAgICAweDdCMzksIDB4MDg2QiwgMHg3QjNCLCAweDQyODUsIDB4N0IzRCwgMHg0NzY3LCAweDdCNDEsIDB4NDc2RSwNCi0gICAgMHg3QjQ1LCAweDE3NTcsIDB4N0I0NiwgMHgwREEwLCAweDdCNDcsIDB4M0E1QiwgMHg3QjQ4LCAweDBEM0EsDQotICAgIDB4N0I0OSwgMHgwQzczLCAweDdCNEIsIDB4MDZEMiwgMHg3QjRDLCAweDE3NTYsIDB4N0I0RCwgMHgxNzU0LA0KLSAgICAweDdCNEUsIDB4M0E1QywgMHg3QjRGLCAweDBENDksIDB4N0I1MCwgMHgxNzUxLCAweDdCNTEsIDB4MEI5QywNCi0gICAgMHg3QjUyLCAweDBDNzUsIDB4N0I1MywgMHgzNzVELCAweDdCNTQsIDB4MEM3NCwgMHg3QjU1LCAweDQ3NzAsDQotICAgIDB4N0I1NiwgMHgwODY2LCAweDdCNUQsIDB4MTc2OSwgMHg3QjYwLCAweDNBNUQsIDB4N0I2NCwgMHg0NzcyLA0KLSAgICAweDdCNjUsIDB4MTc1OSwgMHg3QjY2LCAweDQ3NzMsIDB4N0I2NywgMHgxNzVCLCAweDdCNjksIDB4M0E1RSwNCi0gICAgMHg3QjZDLCAweDE3NUUsIDB4N0I2RCwgMHgzQTVGLCAweDdCNkUsIDB4MTc1RiwgMHg3QjZGLCAweDQyODYsDQotICAgIDB4N0I3MCwgMHgxNzVDLCAweDdCNzEsIDB4MTc1RCwgMHg3QjcyLCAweDNBNjAsIDB4N0I3MywgMHg0Nzc0LA0KLSAgICAweDdCNzQsIDB4MTc1QSwgMHg3Qjc1LCAweDE3NTgsIDB4N0I3NywgMHg0Q0IzLCAweDdCNzksIDB4NDc3MSwNCi0gICAgMHg3QjdBLCAweDE3NTIsIDB4N0I3RiwgMHg0NzZELCAweDdCODYsIDB4MEUxRiwgMHg3Qjg3LCAweDA1NTUsDQotICAgIDB4N0I4QiwgMHgxNzY2LCAweDdCOEQsIDB4MTc2MywgMHg3QjhGLCAweDE3NjgsIDB4N0I5MCwgMHg0Nzc3LA0KLSAgICAweDdCOTEsIDB4M0E2MSwgMHg3QjkyLCAweDE3NjcsIDB4N0I5NCwgMHgwRDI5LCAweDdCOTUsIDB4MEVCMywNCi0gICAgMHg3Qjk3LCAweDA4ODksIDB4N0I5OCwgMHgxNzYxLCAweDdCOTksIDB4MTc2QSwgMHg3QjlBLCAweDE3NjUsDQotICAgIDB4N0I5QiwgMHg0Nzc4LCAweDdCOUMsIDB4MTc2NCwgMHg3QjlELCAweDE3NjAsIDB4N0I5RSwgMHgyMThELA0KLSAgICAweDdCOUYsIDB4MTc2MiwgMHg3QkEwLCAweDRDQjQsIDB4N0JBMSwgMHgwNjA1LCAweDdCQUEsIDB4MEI3QiwNCi0gICAgMHg3QkFDLCAweDRDQjUsIDB4N0JBRCwgMHgwQUExLCAweDdCQUYsIDB4M0E2MiwgMHg3QkIwLCAweDRDQjYsDQotICAgIDB4N0JCMSwgMHgwRDM2LCAweDdCQjQsIDB4MTc2RiwgMHg3QkI1LCAweDQ3N0EsIDB4N0JCOCwgMHgwRDM4LA0KLSAgICAweDdCQkMsIDB4NDc3QiwgMHg3QkMwLCAweDBBODUsIDB4N0JDMSwgMHgxNzZDLCAweDdCQzQsIDB4MEQ2MywNCi0gICAgMHg3QkM1LCAweDQ3N0MsIDB4N0JDNiwgMHgxNzcwLCAweDdCQzcsIDB4MEUyMywgMHg3QkM5LCAweDBCOTksDQotICAgIDB4N0JDQSwgMHg0NzdELCAweDdCQ0IsIDB4MTc2QiwgMHg3QkNDLCAweDE3NkQsIDB4N0JDRiwgMHgxNzZFLA0KLSAgICAweDdCRDQsIDB4NDc4MCwgMHg3QkQ2LCAweDQ3ODEsIDB4N0JENywgMHgzQTYzLCAweDdCRDksIDB4M0E2NCwNCi0gICAgMHg3QkRBLCAweDQ3ODIsIDB4N0JERCwgMHgxNzcxLCAweDdCRTAsIDB4MDhGMCwgMHg3QkU0LCAweDBDOUUsDQotICAgIDB4N0JFNSwgMHgxNzc2LCAweDdCRTYsIDB4MTc3NSwgMHg3QkU4LCAweDRDQjcsIDB4N0JFOSwgMHgxNzcyLA0KLSAgICAweDdCRUEsIDB4NDc4MywgMHg3QkVELCAweDBGREMsIDB4N0JGMCwgMHg0Nzg0LCAweDdCRjIsIDB4NENCOCwNCi0gICAgMHg3QkYzLCAweDE3N0IsIDB4N0JGNiwgMHgxNzdGLCAweDdCRjcsIDB4MTc3QywgMHg3QkY4LCAweDRDQjksDQotICAgIDB4N0JGQywgMHg0Q0JBLCAweDdCRkUsIDB4NENCQiwgMHg3QzAwLCAweDE3NzgsIDB4N0MwMSwgMHg0Mjg3LA0KLSAgICAweDdDMDMsIDB4NDc4NSwgMHg3QzA3LCAweDE3NzksIDB4N0MwOSwgMHg0Q0JDLCAweDdDMEIsIDB4M0E2NSwNCi0gICAgMHg3QzBELCAweDE3N0UsIDB4N0MwRSwgMHg0Nzg2LCAweDdDMEYsIDB4M0E2NiwgMHg3QzExLCAweDE3NzMsDQotICAgIDB4N0MxMiwgMHgxMEVBLCAweDdDMTMsIDB4MTc3QSwgMHg3QzE0LCAweDE3NzQsIDB4N0MxNywgMHgxNzdELA0KLSAgICAweDdDMUUsIDB4MUUzQiwgMHg3QzFGLCAweDE3ODMsIDB4N0MyMCwgMHgzQTY3LCAweDdDMjEsIDB4MDYwNiwNCi0gICAgMHg3QzIzLCAweDE3ODAsIDB4N0MyNiwgMHgzQTY4LCAweDdDMjcsIDB4MTc4MSwgMHg3QzI4LCAweDRDQkQsDQotICAgIDB4N0MyQSwgMHgxNzgyLCAweDdDMkIsIDB4MTc4NSwgMHg3QzJGLCAweDRDQkUsIDB4N0MzMSwgMHgzQTY5LA0KLSAgICAweDdDMzMsIDB4NDI4OCwgMHg3QzM2LCAweDNBNkEsIDB4N0MzNywgMHgxNzg0LCAweDdDMzgsIDB4MEQ4QSwNCi0gICAgMHg3QzNELCAweDE3ODYsIDB4N0MzRSwgMHgwRkM0LCAweDdDM0YsIDB4MEUzRCwgMHg3QzQwLCAweDE3OEIsDQotICAgIDB4N0M0MiwgMHg0Q0JGLCAweDdDNDMsIDB4MTc4OCwgMHg3QzQ1LCAweDQ3ODcsIDB4N0M0QSwgMHg0Nzg4LA0KLSAgICAweDdDNEMsIDB4MTc4NywgMHg3QzRELCAweDBBNzYsIDB4N0M0RiwgMHgxNzhBLCAweDdDNTAsIDB4MTc4QywNCi0gICAgMHg3QzUxLCAweDNBNkIsIDB4N0M1MiwgMHg0Q0MwLCAweDdDNTMsIDB4NENDMSwgMHg3QzU0LCAweDE3ODksDQotICAgIDB4N0M1NiwgMHgxNzkwLCAweDdDNTcsIDB4NDc4OSwgMHg3QzU4LCAweDE3OEQsIDB4N0M1OSwgMHgzQTZDLA0KLSAgICAweDdDNUIsIDB4NENDMiwgMHg3QzVDLCAweDRDQzMsIDB4N0M1RCwgMHg0Q0M0LCAweDdDNUUsIDB4NDc4QSwNCi0gICAgMHg3QzVGLCAweDE3OEUsIDB4N0M2MCwgMHgxNzc3LCAweDdDNjEsIDB4NDc4QiwgMHg3QzY0LCAweDE3OEYsDQotICAgIDB4N0M2NSwgMHgxNzkxLCAweDdDNjcsIDB4M0E2RCwgMHg3QzY5LCAweDQ3OEMsIDB4N0M2QywgMHgxNzkyLA0KLSAgICAweDdDNkQsIDB4NDI4QSwgMHg3QzZFLCAweDNBNkUsIDB4N0M2RiwgMHg0NzhELCAweDdDNzAsIDB4M0E2RiwNCi0gICAgMHg3QzcyLCAweDRDQzUsIDB4N0M3MywgMHgwRTE2LCAweDdDNzUsIDB4MTc5MywgMHg3Qzc5LCAweDQyOEIsDQotICAgIDB4N0M3QiwgMHgzNzBFLCAweDdDN0QsIDB4NENDNiwgMHg3QzdFLCAweDBFRUUsIDB4N0M4MSwgMHgwNkM2LA0KLSAgICAweDdDODIsIDB4MDZGRiwgMHg3QzgzLCAweDE3OTQsIDB4N0M4NywgMHg0Q0M3LCAweDdDODksIDB4MEUwNCwNCi0gICAgMHg3QzhCLCAweDBBMkUsIDB4N0M4RCwgMHgwRUJDLCAweDdDOEYsIDB4NDI4QywgMHg3QzkwLCAweDE3OTUsDQotICAgIDB4N0M5MiwgMHgwRjdCLCAweDdDOTQsIDB4NDI4RCwgMHg3Qzk1LCAweDBEMkEsIDB4N0M5NywgMHgwQUM4LA0KLSAgICAweDdDOTgsIDB4MENFQSwgMHg3QzlCLCAweDA5NTcsIDB4N0M5RSwgMHg0Q0M4LCAweDdDOUYsIDB4MDQ4NCwNCi0gICAgMHg3Q0EwLCAweDQyOEUsIDB4N0NBMSwgMHgxNzlBLCAweDdDQTIsIDB4MTc5OCwgMHg3Q0E0LCAweDE3OTYsDQotICAgIDB4N0NBNSwgMHgwNURELCAweDdDQTYsIDB4NDc5MSwgMHg3Q0E3LCAweDA5QjksIDB4N0NBOCwgMHgxNzlCLA0KLSAgICAweDdDQUIsIDB4MTc5OSwgMHg3Q0FELCAweDE3OTcsIDB4N0NBRSwgMHgxNzlGLCAweDdDQjEsIDB4MTc5RSwNCi0gICAgMHg3Q0IyLCAweDE3OUQsIDB4N0NCMywgMHgxNzlDLCAweDdDQjYsIDB4NDc5MywgMHg3Q0I3LCAweDQ3OTQsDQotICAgIDB4N0NCOSwgMHgxN0EwLCAweDdDQkEsIDB4NENDOSwgMHg3Q0JDLCAweDNBNzAsIDB4N0NCRCwgMHgxN0ExLA0KLSAgICAweDdDQkUsIDB4MEE1RSwgMHg3Q0JGLCAweDNBNzEsIDB4N0NDMCwgMHgxN0EyLCAweDdDQzIsIDB4MTdBNCwNCi0gICAgMHg3Q0M0LCAweDQ3OTYsIDB4N0NDNSwgMHgxN0EzLCAweDdDQzcsIDB4NENDQSwgMHg3Q0M4LCAweDNBNzIsDQotICAgIDB4N0NDOSwgMHgzQTczLCAweDdDQ0EsIDB4MDc4NiwgMHg3Q0NELCAweDQ3OTgsIDB4N0NDRSwgMHgwQUJBLA0KLSAgICAweDdDRDIsIDB4MTdBNiwgMHg3Q0QzLCAweDRDQ0IsIDB4N0NENSwgMHg0MjhGLCAweDdDRDYsIDB4MEM3NiwNCi0gICAgMHg3Q0Q3LCAweDNBNzQsIDB4N0NEOCwgMHgxN0E1LCAweDdDRDksIDB4M0E3NSwgMHg3Q0RBLCAweDRDQ0MsDQotICAgIDB4N0NEQywgMHgxN0E3LCAweDdDREQsIDB4M0E3NiwgMHg3Q0RFLCAweDBFMDUsIDB4N0NERiwgMHgwQUVFLA0KLSAgICAweDdDRTAsIDB4MDdEOSwgMHg3Q0UyLCAweDE3QTgsIDB4N0NFNiwgMHg0NzlCLCAweDdDRTcsIDB4MEY5MCwNCi0gICAgMHg3Q0VCLCAweDNBNzcsIDB4N0NFRiwgMHgxN0FBLCAweDdDRjIsIDB4MTdBQiwgMHg3Q0Y0LCAweDE3QUMsDQotICAgIDB4N0NGNSwgMHg0NzlELCAweDdDRjYsIDB4MTdBRCwgMHg3Q0Y4LCAweDA4QjMsIDB4N0NGQSwgMHgxN0FFLA0KLSAgICAweDdDRkIsIDB4MDcyNSwgMHg3Q0ZFLCAweDA2ODQsIDB4N0QwMCwgMHgwNjQ0LCAweDdEMDIsIDB4MTdCMCwNCi0gICAgMHg3RDAzLCAweDQ3OUUsIDB4N0QwNCwgMHgwRUZGLCAweDdEMDUsIDB4MDdEQSwgMHg3RDA2LCAweDE3QUYsDQotICAgIDB4N0QwNywgMHgzQTc4LCAweDdEMDgsIDB4M0E3OSwgMHg3RDA5LCAweDNBN0EsIDB4N0QwQSwgMHgxN0IzLA0KLSAgICAweDdEMEIsIDB4MEVGMiwgMHg3RDBELCAweDBDRjIsIDB4N0QxMCwgMHgwREE1LCAweDdEMTIsIDB4NDdBMCwNCi0gICAgMHg3RDEzLCAweDNBN0IsIDB4N0QxNCwgMHgwOTZELCAweDdEMTUsIDB4MTdCMiwgMHg3RDE3LCAweDA4RkYsDQotICAgIDB4N0QxOCwgMHgwN0RCLCAweDdEMTksIDB4MDhCNCwgMHg3RDFBLCAweDA2ODMsIDB4N0QxQiwgMHgwRTA2LA0KLSAgICAweDdEMUMsIDB4MTdCMSwgMHg3RDFELCAweDNBN0MsIDB4N0QxRSwgMHg0N0ExLCAweDdEMjAsIDB4MEFDOSwNCi0gICAgMHg3RDIxLCAweDBFNzAsIDB4N0QyMiwgMHgwODY3LCAweDdEMjMsIDB4M0E3RCwgMHg3RDJCLCAweDA4QjUsDQotICAgIDB4N0QyQywgMHgwQkY5LCAweDdEMkUsIDB4MTdCNiwgMHg3RDJGLCAweDBGQTcsIDB4N0QzMCwgMHgwODQ5LA0KLSAgICAweDdEMzEsIDB4NDI5MCwgMHg3RDMyLCAweDE3QjcsIDB4N0QzMywgMHgwQTA4LCAweDdEMzUsIDB4MTdCOSwNCi0gICAgMHg3RDM5LCAweDA5QkEsIDB4N0QzQSwgMHgwODIwLCAweDdEM0MsIDB4NENDRCwgMHg3RDNELCAweDQ3QTQsDQotICAgIDB4N0QzRSwgMHg0N0E1LCAweDdEM0YsIDB4MTdCOCwgMHg3RDQwLCAweDQ3QTYsIDB4N0Q0MSwgMHgzQTdFLA0KLSAgICAweDdENDIsIDB4MDkzNCwgMHg3RDQzLCAweDA3NzIsIDB4N0Q0NCwgMHgwQUNBLCAweDdENDUsIDB4MTdCNCwNCi0gICAgMHg3RDQ2LCAweDE3QkEsIDB4N0Q0NywgMHg0N0E3LCAweDdENDgsIDB4MjE4RiwgMHg3RDRCLCAweDE3QjUsDQotICAgIDB4N0Q0QywgMHgwNzI2LCAweDdENEQsIDB4NENDRSwgMHg3RDRFLCAweDE3QkQsIDB4N0Q0RiwgMHgxN0MxLA0KLSAgICAweDdENTAsIDB4MDc0MSwgMHg3RDUzLCAweDNBN0YsIDB4N0Q1NSwgMHgzNjNBLCAweDdENTYsIDB4MTdCQywNCi0gICAgMHg3RDU5LCAweDNBODAsIDB4N0Q1QSwgMHg0N0FCLCAweDdENUIsIDB4MTdDNSwgMHg3RDVDLCAweDQyOTEsDQotICAgIDB4N0Q1RCwgMHgzQTgxLCAweDdENUUsIDB4MDdEQywgMHg3RDYxLCAweDBGNTcsIDB4N0Q2MiwgMHgwNDgwLA0KLSAgICAweDdENjMsIDB4MTdDMiwgMHg3RDY2LCAweDA2ODUsIDB4N0Q2OCwgMHgxN0JGLCAweDdENkEsIDB4NDdBQywNCi0gICAgMHg3RDZFLCAweDE3QzAsIDB4N0Q3MCwgMHg0N0FELCAweDdENzEsIDB4MEM3NywgMHg3RDcyLCAweDE3QkUsDQotICAgIDB4N0Q3MywgMHgxN0JCLCAweDdENzUsIDB4MDU4NiwgMHg3RDc2LCAweDBBODgsIDB4N0Q3OSwgMHgwNzVDLA0KLSAgICAweDdEN0EsIDB4M0E4MiwgMHg3RDdELCAweDE3QzcsIDB4N0Q3RiwgMHg0N0FGLCAweDdEODIsIDB4NENDRiwNCi0gICAgMHg3RDgzLCAweDQyOTIsIDB4N0Q4NSwgMHg0Q0QwLCAweDdEODYsIDB4M0E4MywgMHg3RDg4LCAweDQ3QjEsDQotICAgIDB4N0Q4OSwgMHgxN0M0LCAweDdEOEIsIDB4M0E4NCwgMHg3RDhDLCAweDNBODUsIDB4N0Q4RCwgMHg0Q0QxLA0KLSAgICAweDdEOEYsIDB4MTdDNiwgMHg3RDkxLCAweDRDRDIsIDB4N0Q5MywgMHgxN0MzLCAweDdEOTcsIDB4NDdCMiwNCi0gICAgMHg3RDk5LCAweDA3MjcsIDB4N0Q5QSwgMHgwQjEzLCAweDdEOUIsIDB4MTdDOCwgMHg3RDlDLCAweDBBRjAsDQotICAgIDB4N0Q5RCwgMHg0N0I0LCAweDdEOUUsIDB4NENEMywgMHg3RDlGLCAweDE3RDUsIDB4N0RBMCwgMHgyMTkyLA0KLSAgICAweDdEQTIsIDB4MTdEMSwgMHg3REEzLCAweDE3Q0IsIDB4N0RBNiwgMHg0MjkzLCAweDdEQTcsIDB4NDdCNSwNCi0gICAgMHg3REFBLCAweDQ3QjYsIDB4N0RBQiwgMHgxN0NGLCAweDdEQUMsIDB4MDkyNiwgMHg3REFELCAweDA0QTEsDQotICAgIDB4N0RBRSwgMHgxN0NBLCAweDdEQUYsIDB4MTdEMiwgMHg3REIwLCAweDE3RDYsIDB4N0RCMSwgMHgwN0RELA0KLSAgICAweDdEQjIsIDB4MEVFMiwgMHg3REIzLCAweDRDRDQsIDB4N0RCNCwgMHgwQkYyLCAweDdEQjUsIDB4MTdDQywNCi0gICAgMHg3REI2LCAweDQ3QjcsIDB4N0RCNywgMHgyMTkxLCAweDdEQjgsIDB4MTdENCwgMHg3REI5LCAweDRDRDUsDQotICAgIDB4N0RCQSwgMHgxN0M5LCAweDdEQkIsIDB4MEI3QywgMHg3REJELCAweDE3Q0UsIDB4N0RCRSwgMHgwNDgxLA0KLSAgICAweDdEQkYsIDB4MEVENiwgMHg3REMwLCAweDQ3QjgsIDB4N0RDMiwgMHg0Mjk0LCAweDdEQzcsIDB4MTdDRCwNCi0gICAgMHg3RENBLCAweDA2RDMsIDB4N0RDQiwgMHgwRDgwLCAweDdEQ0MsIDB4M0E4NiwgMHg3RENGLCAweDBBRUYsDQotICAgIDB4N0REMCwgMHg0Q0Q2LCAweDdERDEsIDB4MEY5OCwgMHg3REQyLCAweDA5NzksIDB4N0RENSwgMHgxN0ZELA0KLSAgICAweDdERDYsIDB4MjE5MywgMHg3REQ3LCAweDQ3QjksIDB4N0REOCwgMHgxN0Q3LCAweDdERDksIDB4NDdCQSwNCi0gICAgMHg3RERBLCAweDBBQTIsIDB4N0REQywgMHgxN0QzLCAweDdEREQsIDB4MTdEOCwgMHg3RERFLCAweDE3REEsDQotICAgIDB4N0RFMCwgMHgwQzE1LCAweDdERTEsIDB4MTdERCwgMHg3REUzLCAweDM0MEEsIDB4N0RFNCwgMHgxN0Q5LA0KLSAgICAweDdERTUsIDB4NENENywgMHg3REU2LCAweDQ3QkIsIDB4N0RFOCwgMHgwRTI0LCAweDdERTksIDB4MDYwNywNCi0gICAgMHg3REVCLCAweDNBODcsIDB4N0RFQywgMHgwRUQ3LCAweDdERUYsIDB4MDRBMiwgMHg3REYxLCAweDNBODgsDQotICAgIDB4N0RGMiwgMHgxN0RDLCAweDdERjQsIDB4MEZDNSwgMHg3REY1LCAweDRDRDgsIDB4N0RGNiwgMHg0Q0Q5LA0KLSAgICAweDdERjksIDB4M0E4OSwgMHg3REZCLCAweDE3REIsIDB4N0UwMSwgMHgwNTExLCAweDdFMDQsIDB4MENDNCwNCi0gICAgMHg3RTA1LCAweDE3REUsIDB4N0UwOCwgMHgzQThBLCAweDdFMDksIDB4MTdFNSwgMHg3RTBBLCAweDE3REYsDQotICAgIDB4N0UwQiwgMHgxN0U2LCAweDdFMTAsIDB4NDdCRiwgMHg3RTExLCAweDNBOEIsIDB4N0UxMiwgMHgxN0UyLA0KLSAgICAweDdFMTUsIDB4M0E4QywgMHg3RTE3LCAweDQ3QzAsIDB4N0UxQiwgMHgwRDMxLCAweDdFMUQsIDB4NDdDMSwNCi0gICAgMHg3RTFFLCAweDA4RjYsIDB4N0UxRiwgMHgxN0U0LCAweDdFMjAsIDB4M0E4RCwgMHg3RTIxLCAweDE3RTEsDQotICAgIDB4N0UyMiwgMHgxN0U3LCAweDdFMjMsIDB4MTdFMCwgMHg3RTI2LCAweDA5NEUsIDB4N0UyNywgMHg0N0MyLA0KLSAgICAweDdFMjgsIDB4NDI5NSwgMHg3RTJCLCAweDBFNTMsIDB4N0UyQywgMHg0N0MzLCAweDdFMkUsIDB4MDk1NiwNCi0gICAgMHg3RTJGLCAweDRDREEsIDB4N0UzMSwgMHgxN0UzLCAweDdFMzIsIDB4MTdFRiwgMHg3RTM1LCAweDE3RUIsDQotICAgIDB4N0UzNiwgMHg0Q0RCLCAweDdFMzcsIDB4MTdFRSwgMHg3RTM5LCAweDE3RUMsIDB4N0UzQSwgMHgxN0YwLA0KLSAgICAweDdFM0IsIDB4MTdFQSwgMHg3RTNELCAweDE3RDAsIDB4N0UzRSwgMHgwQTc3LCAweDdFNDEsIDB4MEQ1RiwNCi0gICAgMHg3RTQzLCAweDE3RUQsIDB4N0U0NCwgMHg0Q0RDLCAweDdFNDUsIDB4NDdDNCwgMHg3RTQ2LCAweDE3RTgsDQotICAgIDB4N0U0NywgMHgzQThFLCAweDdFNDgsIDB4Mzc2NywgMHg3RTRBLCAweDBBQTMsIDB4N0U0QiwgMHgwNzI4LA0KLSAgICAweDdFNEQsIDB4MDkzNSwgMHg3RTUyLCAweDIxOTQsIDB4N0U1NCwgMHgwOUVCLCAweDdFNTUsIDB4MEFCOCwNCi0gICAgMHg3RTU2LCAweDE3RjMsIDB4N0U1OSwgMHgxN0Y1LCAweDdFNUEsIDB4MTdGNiwgMHg3RTVELCAweDE3RjIsDQotICAgIDB4N0U1RSwgMHgxN0Y0LCAweDdFNjEsIDB4MUUxMSwgMHg3RTYyLCAweDNBOEYsIDB4N0U2NiwgMHgxN0U5LA0KLSAgICAweDdFNjcsIDB4MTdGMSwgMHg3RTY5LCAweDE3RjksIDB4N0U2QSwgMHgxN0Y4LCAweDdFNkIsIDB4MURGNywNCi0gICAgMHg3RTZELCAweDBFQTgsIDB4N0U2RSwgMHgzQTkwLCAweDdFNkYsIDB4NENERCwgMHg3RTcwLCAweDA3MDEsDQotICAgIDB4N0U3MywgMHgzQTkxLCAweDdFNzUsIDB4NDdDNSwgMHg3RTc4LCAweDRDREUsIDB4N0U3OSwgMHgxN0Y3LA0KLSAgICAweDdFN0IsIDB4MTdGQiwgMHg3RTdDLCAweDE3RkEsIDB4N0U3RCwgMHgxN0ZFLCAweDdFN0UsIDB4NDdDNiwNCi0gICAgMHg3RTdGLCAweDE4MDAsIDB4N0U4MSwgMHg0Q0RGLCAweDdFODIsIDB4MDg4QSwgMHg3RTgzLCAweDE3RkMsDQotICAgIDB4N0U4NiwgMHg0N0M3LCAweDdFODcsIDB4NDdDOCwgMHg3RTg4LCAweDE4MDEsIDB4N0U4OSwgMHgxODAyLA0KLSAgICAweDdFOEEsIDB4MjBBNywgMHg3RThDLCAweDE4MDMsIDB4N0U4RCwgMHgzQTkyLCAweDdFOEUsIDB4MTgwOSwNCi0gICAgMHg3RThGLCAweDBDMzUsIDB4N0U5MCwgMHgxODA1LCAweDdFOTEsIDB4M0E5MywgMHg3RTkyLCAweDE4MDQsDQotICAgIDB4N0U5MywgMHgxODA2LCAweDdFOTQsIDB4MTgwNywgMHg3RTk2LCAweDE4MDgsIDB4N0U5OCwgMHgzQTk0LA0KLSAgICAweDdFOUEsIDB4NDdDQSwgMHg3RTlCLCAweDE4MEEsIDB4N0U5QywgMHgxODBCLCAweDdGMzYsIDB4MDYwOCwNCi0gICAgMHg3RjM4LCAweDE4MEMsIDB4N0YzQSwgMHgxODBELCAweDdGM0IsIDB4NDdDRCwgMHg3RjNDLCAweDQ3Q0MsDQotICAgIDB4N0YzRCwgMHg0Q0UwLCAweDdGM0UsIDB4NDdDRSwgMHg3RjQzLCAweDQ3Q0YsIDB4N0Y0NCwgMHgzQTk1LA0KLSAgICAweDdGNDUsIDB4MTgwRSwgMHg3RjQ3LCAweDIxOTUsIDB4N0Y0QywgMHgxODBGLCAweDdGNEQsIDB4MTgxMCwNCi0gICAgMHg3RjRFLCAweDE4MTEsIDB4N0Y0RiwgMHgzQTk2LCAweDdGNTAsIDB4MTgxMiwgMHg3RjUxLCAweDE4MTMsDQotICAgIDB4N0Y1MiwgMHgzQTk3LCAweDdGNTMsIDB4M0E5OCwgMHg3RjU0LCAweDE4MTUsIDB4N0Y1NSwgMHgxODE0LA0KLSAgICAweDdGNTgsIDB4MTgxNiwgMHg3RjVCLCAweDRDRTEsIDB4N0Y1RCwgMHg0Q0UyLCAweDdGNUYsIDB4MTgxNywNCi0gICAgMHg3RjYwLCAweDE4MTgsIDB4N0Y2MSwgMHgzQTk5LCAweDdGNjMsIDB4NDdEMywgMHg3RjY0LCAweDQ3RDQsDQotICAgIDB4N0Y2NSwgMHg0Q0UzLCAweDdGNjcsIDB4MTgxQiwgMHg3RjY4LCAweDE4MTksIDB4N0Y2OSwgMHgxODFBLA0KLSAgICAweDdGNkEsIDB4MDg1MSwgMHg3RjZCLCAweDA3MjksIDB4N0Y2RCwgMHg0N0Q1LCAweDdGNkUsIDB4MEI5NCwNCi0gICAgMHg3RjcwLCAweDBENDcsIDB4N0Y3MSwgMHg0Q0U0LCAweDdGNzIsIDB4MDk3QSwgMHg3Rjc1LCAweDBEMDMsDQotICAgIDB4N0Y3NywgMHgwRDgxLCAweDdGNzgsIDB4MTgxQywgMHg3Rjc5LCAweDEzMzYsIDB4N0Y3RCwgMHg0N0Q2LA0KLSAgICAweDdGN0UsIDB4NDdENywgMHg3RjdGLCAweDRDRTUsIDB4N0Y4MCwgMHg0Q0U2LCAweDdGODIsIDB4MTgxRCwNCi0gICAgMHg3RjgzLCAweDE4MUYsIDB4N0Y4NSwgMHgwRjRGLCAweDdGODYsIDB4MTgxRSwgMHg3Rjg3LCAweDE4MjEsDQotICAgIDB4N0Y4OCwgMHgxODIwLCAweDdGOEEsIDB4MEYzRCwgMHg3RjhCLCAweDRDRTcsIDB4N0Y4QywgMHgxODIyLA0KLSAgICAweDdGOEUsIDB4MEQ5MiwgMHg3RjkwLCAweDQ3RDgsIDB4N0Y5MSwgMHgzQTlBLCAweDdGOTQsIDB4MTgyMywNCi0gICAgMHg3Rjk2LCAweDQ3REIsIDB4N0Y5NywgMHg0Mjk2LCAweDdGOUEsIDB4MTgyNiwgMHg3RjlDLCAweDQ3REMsDQotICAgIDB4N0Y5RCwgMHgxODI1LCAweDdGOUUsIDB4MTgyNCwgMHg3RkExLCAweDIxOTYsIDB4N0ZBMiwgMHg0Q0U4LA0KLSAgICAweDdGQTMsIDB4MTgyNywgMHg3RkE0LCAweDA3MDgsIDB4N0ZBOCwgMHgwQUE0LCAweDdGQTksIDB4MDY1QiwNCi0gICAgMHg3RkFELCAweDQ3REQsIDB4N0ZBRSwgMHgxODJCLCAweDdGQUYsIDB4MTgyOCwgMHg3RkIyLCAweDE4MjksDQotICAgIDB4N0ZCNiwgMHgxODJDLCAweDdGQjgsIDB4MTgyRCwgMHg3RkI5LCAweDE4MkEsIDB4N0ZCRCwgMHgwNENCLA0KLSAgICAweDdGQkYsIDB4M0E5QiwgMHg3RkMxLCAweDA1MjcsIDB4N0ZDMywgMHg0N0RGLCAweDdGQzUsIDB4MTgyRiwNCi0gICAgMHg3RkM2LCAweDE4MzAsIDB4N0ZDQSwgMHgxODMxLCAweDdGQ0MsIDB4MEY0QywgMHg3RkNFLCAweDNBOUMsDQotICAgIDB4N0ZDRiwgMHg0N0UwLCAweDdGRDIsIDB4MDkzNiwgMHg3RkQ0LCAweDE4MzMsIDB4N0ZENSwgMHgxODMyLA0KLSAgICAweDdGREIsIDB4NDI5NywgMHg3RkRGLCAweDNBOUQsIDB4N0ZFMCwgMHgwQTJGLCAweDdGRTEsIDB4MTgzNCwNCi0gICAgMHg3RkUzLCAweDQ3RTEsIDB4N0ZFNSwgMHgzQTlFLCAweDdGRTYsIDB4MTgzNSwgMHg3RkU5LCAweDE4MzYsDQotICAgIDB4N0ZFQiwgMHgwNjIxLCAweDdGRUMsIDB4M0E5RiwgMHg3RkVFLCAweDNBQTAsIDB4N0ZFRiwgMHgzQUExLA0KLSAgICAweDdGRjAsIDB4MDYwOSwgMHg3RkYyLCAweDQ3RTIsIDB4N0ZGMywgMHgxODM3LCAweDdGRjksIDB4MTgzOCwNCi0gICAgMHg3RkZBLCAweDNBQTIsIDB4N0ZGQiwgMHgwRThCLCAweDdGRkMsIDB4MEY0RCwgMHg3RkZELCAweDRDRTksDQotICAgIDB4N0ZGRSwgMHg0Q0VBLCAweDdGRkYsIDB4NENFQiwgMHg4MDAwLCAweDBGM0UsIDB4ODAwMSwgMHgwRkRELA0KLSAgICAweDgwMDIsIDB4MzcxMywgMHg4MDAzLCAweDA3REYsIDB4ODAwNCwgMHgxODNCLCAweDgwMDUsIDB4MDkwMCwNCi0gICAgMHg4MDA2LCAweDE4M0EsIDB4ODAwNywgMHg0Q0VDLCAweDgwMDgsIDB4NDdFNCwgMHg4MDBBLCAweDQ3RTMsDQotICAgIDB4ODAwQiwgMHgxODNDLCAweDgwMEMsIDB4MDhENSwgMHg4MDBELCAweDRDRUQsIDB4ODAwRSwgMHgzQUEzLA0KLSAgICAweDgwMTAsIDB4MEIzMSwgMHg4MDExLCAweDNBQTQsIDB4ODAxMiwgMHgxODNELCAweDgwMTQsIDB4M0FBNSwNCi0gICAgMHg4MDE1LCAweDA3REUsIDB4ODAxNiwgMHg0N0U1LCAweDgwMTcsIDB4MEVFMywgMHg4MDE4LCAweDE4M0UsDQotICAgIDB4ODAxOSwgMHgxODNGLCAweDgwMUMsIDB4MTg0MCwgMHg4MDFFLCAweDRDRUUsIDB4ODAyMSwgMHgxODQxLA0KLSAgICAweDgwMjQsIDB4M0FBNiwgMHg4MDI2LCAweDNBQTcsIDB4ODAyOCwgMHgxODQyLCAweDgwMkMsIDB4NDdFNiwNCi0gICAgMHg4MDMwLCAweDQ3RTcsIDB4ODAzMywgMHgwOEQ2LCAweDgwMzUsIDB4NDI5OCwgMHg4MDM2LCAweDBFRjksDQotICAgIDB4ODAzNywgMHg0Mjk5LCAweDgwMzksIDB4NENFRiwgMHg4MDNBLCAweDNBQTgsIDB4ODAzQiwgMHgxODQ0LA0KLSAgICAweDgwM0MsIDB4M0FBOSwgMHg4MDNELCAweDBCN0QsIDB4ODAzRiwgMHgxODQzLCAweDgwNDMsIDB4NDdFOCwNCi0gICAgMHg4MDQ2LCAweDE4NDYsIDB4ODA0QSwgMHgxODQ1LCAweDgwNTIsIDB4MTg0NywgMHg4MDU2LCAweDBBNUYsDQotICAgIDB4ODA1OCwgMHgxODQ4LCAweDgwNUEsIDB4MTg0OSwgMHg4MDVFLCAweDBFMDksIDB4ODA1RiwgMHgxODRBLA0KLSAgICAweDgwNjAsIDB4M0FBQSwgMHg4MDYxLCAweDBBRjEsIDB4ODA2MiwgMHgxODRCLCAweDgwNjYsIDB4NDdFOSwNCi0gICAgMHg4MDY4LCAweDE4NEMsIDB4ODA2RiwgMHgwRkM2LCAweDgwNzAsIDB4MTg0RiwgMHg4MDcxLCAweDNBQUIsDQotICAgIDB4ODA3MiwgMHgxODRFLCAweDgwNzMsIDB4MTg0RCwgMHg4MDc0LCAweDBCQ0MsIDB4ODA3NSwgMHgzQUFDLA0KLSAgICAweDgwNzYsIDB4MTg1MCwgMHg4MDc3LCAweDA5RUMsIDB4ODA3OSwgMHgxODUxLCAweDgwN0IsIDB4NDdFQSwNCi0gICAgMHg4MDdELCAweDE4NTIsIDB4ODA3RSwgMHgwRkRFLCAweDgwN0YsIDB4MTg1MywgMHg4MDg0LCAweDE4NTQsDQotICAgIDB4ODA4NSwgMHgxODU2LCAweDgwODYsIDB4MTg1NSwgMHg4MDg3LCAweDBEMzksIDB4ODA4OCwgMHg0Q0YwLA0KLSAgICAweDgwODksIDB4MENEMSwgMHg4MDhCLCAweDBGRTQsIDB4ODA4QywgMHgwRDNELCAweDgwOEUsIDB4NENGMSwNCi0gICAgMHg4MDkzLCAweDE4NTgsIDB4ODA5NiwgMHgwOUJCLCAweDgwOTgsIDB4MEQ5QywgMHg4MDk5LCAweDQ3RUIsDQotICAgIDB4ODA5QSwgMHgxODU5LCAweDgwOUIsIDB4MTg1NywgMHg4MDlDLCAweDQ3RUMsIDB4ODA5RCwgMHgwNjBBLA0KLSAgICAweDgwOUUsIDB4M0FBRCwgMHg4MEExLCAweDA3ODgsIDB4ODBBMiwgMHgwOEI2LCAweDgwQTQsIDB4NDdFRCwNCi0gICAgMHg4MEE1LCAweDBEODIsIDB4ODBBNiwgMHgzQUFFLCAweDgwQTcsIDB4NDdFRSwgMHg4MEE5LCAweDA3NUUsDQotICAgIDB4ODBBQSwgMHgwRTcxLCAweDgwQUIsIDB4M0FBRiwgMHg4MEFDLCAweDE4NUMsIDB4ODBBRCwgMHgxODVBLA0KLSAgICAweDgwQUYsIDB4MDdFMCwgMHg4MEIxLCAweDA3RTEsIDB4ODBCMiwgMHgwNEFELCAweDgwQjQsIDB4MDg1OCwNCi0gICAgMHg4MEI4LCAweDQ3RUYsIDB4ODBCQSwgMHgwRDBGLCAweDgwQzMsIDB4MDRBMywgMHg4MEM0LCAweDE4NjEsDQotICAgIDB4ODBDNSwgMHg0N0YxLCAweDgwQzYsIDB4MEI3RSwgMHg4MENBLCAweDQyOUEsIDB4ODBDQywgMHgwRDBFLA0KLSAgICAweDgwQ0UsIDB4MEIzQiwgMHg4MENGLCAweDRDRjIsIDB4ODBENCwgMHg0Q0YzLCAweDgwRDUsIDB4NDdGMiwNCi0gICAgMHg4MEQ2LCAweDE4NjMsIDB4ODBENywgMHgzQUIwLCAweDgwRDgsIDB4M0FCMSwgMHg4MEQ5LCAweDE4NUYsDQotICAgIDB4ODBEQSwgMHgxODYyLCAweDgwREIsIDB4MTg1RCwgMHg4MERELCAweDE4NjAsIDB4ODBERSwgMHgwRTU0LA0KLSAgICAweDgwRTAsIDB4NDI5QiwgMHg4MEUxLCAweDA3ODksIDB4ODBFNCwgMHgwNEMxLCAweDgwRTUsIDB4MTg1RSwNCi0gICAgMHg4MEU2LCAweDQ3RjMsIDB4ODBFRCwgMHg0Q0Y0LCAweDgwRUYsIDB4MTg2NSwgMHg4MEYwLCAweDRDRjUsDQotICAgIDB4ODBGMSwgMHgxODY2LCAweDgwRjMsIDB4NDI5QywgMHg4MEY0LCAweDBDOTEsIDB4ODBGNSwgMHg0N0Y1LA0KLSAgICAweDgwRjcsIDB4NENGNiwgMHg4MEY4LCAweDA2QjMsIDB4ODBGQSwgMHg0Q0Y3LCAweDgwRkIsIDB4NDdGNiwNCi0gICAgMHg4MEZDLCAweDE4NzEsIDB4ODBGRCwgMHgwQ0YzLCAweDgwRkUsIDB4NENGOCwgMHg4MTAyLCAweDA4QjcsDQotICAgIDB4ODEwMywgMHg0Q0Y5LCAweDgxMDUsIDB4MDZCNCwgMHg4MTA2LCAweDBBNkMsIDB4ODEwNywgMHgwRkVDLA0KLSAgICAweDgxMDgsIDB4MEVCQSwgMHg4MTA5LCAweDE4NjQsIDB4ODEwQSwgMHgwQTc4LCAweDgxMEQsIDB4NDdGNCwNCi0gICAgMHg4MTE2LCAweDNBQjIsIDB4ODExNywgMHg0Q0ZBLCAweDgxMTgsIDB4M0FCMywgMHg4MTFBLCAweDA2NkQsDQotICAgIDB4ODExQiwgMHgxODY3LCAweDgxMUUsIDB4NDdGOSwgMHg4MTIzLCAweDE4NjksIDB4ODEyNCwgMHg0N0ZCLA0KLSAgICAweDgxMjcsIDB4NDdGQywgMHg4MTI5LCAweDE4NjgsIDB4ODEyQiwgMHgzNjU5LCAweDgxMkMsIDB4NDdGRCwNCi0gICAgMHg4MTJGLCAweDE4NkEsIDB4ODEzMCwgMHg0Q0ZCLCAweDgxMzEsIDB4MEI2NCwgMHg4MTMzLCAweDBDRjQsDQotICAgIDB4ODEzNSwgMHg0N0Y4LCAweDgxMzksIDB4MEJDRCwgMHg4MTNBLCAweDNBQjQsIDB4ODEzRCwgMHg0N0ZGLA0KLSAgICAweDgxM0UsIDB4MTg2RSwgMHg4MTQxLCAweDM3NzIsIDB4ODE0NiwgMHgxODZELCAweDgxNEEsIDB4M0FCNSwNCi0gICAgMHg4MTRCLCAweDE4NkIsIDB4ODE0QywgMHgzQUI2LCAweDgxNEUsIDB4MEExQiwgMHg4MTUwLCAweDBERDcsDQotICAgIDB4ODE1MSwgMHgxODcwLCAweDgxNTMsIDB4MTg2RiwgMHg4MTU0LCAweDA3RTIsIDB4ODE1NSwgMHgwRkY5LA0KLSAgICAweDgxNTcsIDB4NENGQywgMHg4MTVGLCAweDE4ODAsIDB4ODE2MCwgMHg0MjlELCAweDgxNjUsIDB4MTg3NCwNCi0gICAgMHg4MTY2LCAweDE4NzUsIDB4ODE2NywgMHg0MjlFLCAweDgxNjgsIDB4NDI5RiwgMHg4MTY5LCAweDQ4MDEsDQotICAgIDB4ODE2QiwgMHgwOTFDLCAweDgxNkQsIDB4NDJBMCwgMHg4MTZFLCAweDE4NzMsIDB4ODE2RiwgMHg0Q0ZELA0KLSAgICAweDgxNzAsIDB4MDgwQSwgMHg4MTcxLCAweDE4NzIsIDB4ODE3MywgMHg0Q0ZFLCAweDgxNzQsIDB4MTg3NiwNCi0gICAgMHg4MTc4LCAweDBCQ0UsIDB4ODE3OSwgMHgwREYyLCAweDgxN0EsIDB4MEFBNSwgMHg4MTdGLCAweDBCM0MsDQotICAgIDB4ODE4MCwgMHgxODdBLCAweDgxODEsIDB4M0FCNywgMHg4MTgyLCAweDE4N0IsIDB4ODE4MywgMHgxODc3LA0KLSAgICAweDgxODQsIDB4M0FCOCwgMHg4MTg1LCAweDQ4MDQsIDB4ODE4OCwgMHgxODc4LCAweDgxOEEsIDB4MTg3OSwNCi0gICAgMHg4MThCLCAweDRDRkYsIDB4ODE4RiwgMHgwN0UzLCAweDgxOTAsIDB4NEQwMCwgMHg4MTkzLCAweDE4ODEsDQotICAgIDB4ODE5NSwgMHgxODdELCAweDgxOTgsIDB4NDgwNiwgMHg4MTlBLCAweDBERDgsIDB4ODE5QiwgMHg0RDAxLA0KLSAgICAweDgxOUMsIDB4MEU5QSwgMHg4MTlELCAweDBEOUEsIDB4ODE5RSwgMHg0RDAyLCAweDgxQTAsIDB4MTg3QywNCi0gICAgMHg4MUEzLCAweDE4N0YsIDB4ODFBNCwgMHgxODdFLCAweDgxQTgsIDB4MEU3MiwgMHg4MUE5LCAweDE4ODIsDQotICAgIDB4ODFCMCwgMHgxODgzLCAweDgxQjIsIDB4NDgwNywgMHg4MUIzLCAweDBBQjksIDB4ODFCNCwgMHgzQUI5LA0KLSAgICAweDgxQjUsIDB4MTg4NCwgMHg4MUI4LCAweDE4ODYsIDB4ODFCQSwgMHgxODhBLCAweDgxQkIsIDB4NDJBMSwNCi0gICAgMHg4MUJELCAweDE4ODcsIDB4ODFCRSwgMHgxODg1LCAweDgxQkYsIDB4MENGNSwgMHg4MUMwLCAweDE4ODgsDQotICAgIDB4ODFDMSwgMHg0ODA4LCAweDgxQzIsIDB4MTg4OSwgMHg4MUMzLCAweDQ4MDksIDB4ODFDNiwgMHgwNTMyLA0KLSAgICAweDgxQzgsIDB4MTg5MCwgMHg4MUM5LCAweDE4OEIsIDB4ODFDQSwgMHg0MkEyLCAweDgxQ0IsIDB4NEQwMywNCi0gICAgMHg4MUNELCAweDE4OEMsIDB4ODFDRiwgMHgzQUJBLCAweDgxRDEsIDB4MTg4RCwgMHg4MUQzLCAweDBCMDEsDQotICAgIDB4ODFENSwgMHg0RDA0LCAweDgxRDYsIDB4NDgwQSwgMHg4MUQ3LCAweDQyQTMsIDB4ODFEOCwgMHgxODhGLA0KLSAgICAweDgxRDksIDB4MTg4RSwgMHg4MURBLCAweDE4OTEsIDB4ODFEQiwgMHg0ODBCLCAweDgxREQsIDB4NEQwNSwNCi0gICAgMHg4MURFLCAweDREMDYsIDB4ODFERiwgMHgxODkyLCAweDgxRTAsIDB4MTg5MywgMHg4MUUxLCAweDREMDcsDQotICAgIDB4ODFFMywgMHgwQTA5LCAweDgxRTQsIDB4NDgwRCwgMHg4MUU1LCAweDA1NjksIDB4ODFFNywgMHgxODk0LA0KLSAgICAweDgxRTgsIDB4MEY5RiwgMHg4MUVBLCAweDA4RDcsIDB4ODFFQywgMHg0ODBGLCAweDgxRUQsIDB4MDkzNywNCi0gICAgMHg4MUVGLCAweDREMDgsIDB4ODFGMywgMHgwOEI4LCAweDgxRjQsIDB4MEI5NSwgMHg4MUY2LCAweDREMDksDQotICAgIDB4ODFGOSwgMHgzQUJCLCAweDgxRkEsIDB4MTg5NSwgMHg4MUZCLCAweDE4OTYsIDB4ODFGQywgMHgwNEQzLA0KLSAgICAweDgxRkQsIDB4NDgxMCwgMHg4MUZFLCAweDE4OTcsIDB4ODFGRiwgMHg0ODExLCAweDgyMDAsIDB4NEQwQSwNCi0gICAgMHg4MjAxLCAweDE4OTgsIDB4ODIwMiwgMHgxODk5LCAweDgyMDMsIDB4M0FCQywgMHg4MjA0LCAweDQ4MTMsDQotICAgIDB4ODIwNSwgMHgxODlBLCAweDgyMDcsIDB4MTg5QiwgMHg4MjA4LCAweDA2QjUsIDB4ODIwOSwgMHgxM0FGLA0KLSAgICAweDgyMEEsIDB4MTg5QywgMHg4MjBCLCAweDREMEIsIDB4ODIwQywgMHgwQTg5LCAweDgyMEQsIDB4MTg5RCwNCi0gICAgMHg4MjBFLCAweDA4RjcsIDB4ODIxMCwgMHgxODlFLCAweDgyMTIsIDB4MTAwOSwgMHg4MjEzLCAweDREMEMsDQotICAgIDB4ODIxNCwgMHg0RDBELCAweDgyMTYsIDB4MTg5RiwgMHg4MjE3LCAweDBFMkUsIDB4ODIxOCwgMHgwNjE4LA0KLSAgICAweDgyMTksIDB4NDgxNSwgMHg4MjFBLCAweDREMEUsIDB4ODIxQiwgMHgwQUE2LCAweDgyMUMsIDB4MDk2MiwNCi0gICAgMHg4MjFFLCAweDBERTMsIDB4ODIxRiwgMHgwOTM4LCAweDgyMjEsIDB4M0FCRCwgMHg4MjIyLCAweDQ4MTYsDQotICAgIDB4ODIyOSwgMHgxOEEwLCAweDgyMkEsIDB4MDdFNCwgMHg4MjJCLCAweDE4QTEsIDB4ODIyQywgMHgwRDYwLA0KLSAgICAweDgyMkUsIDB4MThBRiwgMHg4MjMyLCAweDNBQkUsIDB4ODIzMywgMHgxOEEzLCAweDgyMzQsIDB4M0FCRiwNCi0gICAgMHg4MjM1LCAweDBCMjksIDB4ODIzNiwgMHgwRDJCLCAweDgyMzcsIDB4MDc3MywgMHg4MjM4LCAweDE4QTIsDQotICAgIDB4ODIzOSwgMHgwQUE3LCAweDgyM0EsIDB4NEQwRiwgMHg4MjNDLCAweDQ4MTgsIDB4ODI0MCwgMHgxOEE0LA0KLSAgICAweDgyNDQsIDB4NEQxMCwgMHg4MjQ1LCAweDQ4MUEsIDB4ODI0NiwgMHgzQUMwLCAweDgyNDcsIDB4MEMxNiwNCi0gICAgMHg4MjQ5LCAweDQ4MTksIDB4ODI0QiwgMHgzQUMxLCAweDgyNEYsIDB4M0FDMiwgMHg4MjU3LCAweDQ4MUUsDQotICAgIDB4ODI1OCwgMHgxOEE2LCAweDgyNTksIDB4MThBNSwgMHg4MjVBLCAweDE4QTgsIDB4ODI1QywgMHg0ODIwLA0KLSAgICAweDgyNUQsIDB4MThBNywgMHg4MjVGLCAweDE4QTksIDB4ODI2MCwgMHg0MkE1LCAweDgyNjIsIDB4MThBQiwNCi0gICAgMHg4MjYzLCAweDQ4MjEsIDB4ODI2NCwgMHgxOEFBLCAweDgyNjYsIDB4MDYwQiwgMHg4MjY4LCAweDE4QUMsDQotICAgIDB4ODI2QSwgMHgxOEFELCAweDgyNkIsIDB4MThBRSwgMHg4MjZELCAweDREMTEsIDB4ODI2RSwgMHgwODIxLA0KLSAgICAweDgyNkYsIDB4MEY5MSwgMHg4MjcxLCAweDE4QjAsIDB4ODI3MiwgMHgwOUVELCAweDgyNzQsIDB4NDJBNiwNCi0gICAgMHg4Mjc2LCAweDA1MTIsIDB4ODI3NywgMHgxOEIxLCAweDgyNzgsIDB4MThCMiwgMHg4Mjc5LCAweDM3NzUsDQotICAgIDB4ODI3RCwgMHg0ODI0LCAweDgyN0UsIDB4MThCMywgMHg4MjdGLCAweDQ4MjUsIDB4ODI4MywgMHg0ODI2LA0KLSAgICAweDgyODQsIDB4NEQxMiwgMHg4Mjg5LCAweDREMTMsIDB4ODI4QSwgMHg0ODI3LCAweDgyOEIsIDB4MDRCNiwNCi0gICAgMHg4MjhELCAweDE4QjQsIDB4ODI4RSwgMHgzQUMzLCAweDgyOTEsIDB4NEQxNCwgMHg4MjkyLCAweDE4QjUsDQotICAgIDB4ODI5MywgMHg0ODI4LCAweDgyOTksIDB4MEREOSwgMHg4MjlELCAweDA4RjMsIDB4ODI5RiwgMHgxOEI3LA0KLSAgICAweDgyQTEsIDB4NDJBOCwgMHg4MkEzLCAweDQyQTksIDB4ODJBNCwgMHg0MkFBLCAweDgyQTUsIDB4MDU4NywNCi0gICAgMHg4MkE2LCAweDA0NzYsIDB4ODJBNywgMHg0ODI5LCAweDgyQTgsIDB4NDgyQSwgMHg4MkE5LCAweDQyQUIsDQotICAgIDB4ODJBQSwgMHg0RDE1LCAweDgyQUIsIDB4MThCNiwgMHg4MkFDLCAweDE4QjksIDB4ODJBRCwgMHgwRDA0LA0KLSAgICAweDgyQUUsIDB4M0FDNCwgMHg4MkFGLCAweDBBMEEsIDB4ODJCMCwgMHg0RDE2LCAweDgyQjEsIDB4MDU1NiwNCi0gICAgMHg4MkIyLCAweDQ4MkIsIDB4ODJCMywgMHgwRTU1LCAweDgyQjQsIDB4NDgyQywgMHg4MkI3LCAweDNBQzUsDQotICAgIDB4ODJCOCwgMHgwNzMzLCAweDgyQjksIDB4MDZENCwgMHg4MkJBLCAweDQ4MkQsIDB4ODJCQiwgMHgxOEI4LA0KLSAgICAweDgyQkMsIDB4NDgyRSwgMHg4MkJELCAweDA1NkEsIDB4ODJCRSwgMHgzQUM2LCAweDgyQkYsIDB4NDJBQywNCi0gICAgMHg4MkM1LCAweDA1REYsIDB4ODJDNiwgMHgzQUM3LCAweDgyRDAsIDB4NEQxNywgMHg4MkQxLCAweDA1MTMsDQotICAgIDB4ODJEMiwgMHgxOEJELCAweDgyRDMsIDB4MEZCMiwgMHg4MkQ0LCAweDBCM0QsIDB4ODJENSwgMHg0MkFELA0KLSAgICAweDgyRDcsIDB4MERCNiwgMHg4MkQ5LCAweDE4QzksIDB4ODJEQiwgMHgwNTU3LCAweDgyREMsIDB4MThDNywNCi0gICAgMHg4MkRFLCAweDE4QzUsIDB4ODJERiwgMHgxOEJDLCAweDgyRTEsIDB4MThCQSwgMHg4MkUyLCAweDQ4MkYsDQotICAgIDB4ODJFMywgMHgxOEJCLCAweDgyRTUsIDB4MDkwRiwgMHg4MkU2LCAweDA2RTQsIDB4ODJFNywgMHgwQkI1LA0KLSAgICAweDgyRTgsIDB4NDgzMCwgMHg4MkVBLCAweDREMTgsIDB4ODJFQiwgMHgwQ0E5LCAweDgyRUYsIDB4NEQxOSwNCi0gICAgMHg4MkYxLCAweDA0RjMsIDB4ODJGMywgMHgxOEJGLCAweDgyRjQsIDB4MThCRSwgMHg4MkY2LCAweDREMUEsDQotICAgIDB4ODJGNywgMHg0ODMxLCAweDgyRjksIDB4MThDNCwgMHg4MkZBLCAweDE4QzAsIDB4ODJGQiwgMHgxOEMzLA0KLSAgICAweDgyRkQsIDB4NDJBRSwgMHg4MkZFLCAweDNBQzgsIDB4ODMwMCwgMHg0MkFGLCAweDgzMDEsIDB4MjE5OCwNCi0gICAgMHg4MzAyLCAweDBFREMsIDB4ODMwMywgMHgxOEMyLCAweDgzMDQsIDB4MDU1OCwgMHg4MzA1LCAweDA1REIsDQotICAgIDB4ODMwNiwgMHgxOEM2LCAweDgzMDcsIDB4NDgzMiwgMHg4MzA4LCAweDQ4MzMsIDB4ODMwOSwgMHgxOEM4LA0KLSAgICAweDgzMEMsIDB4NDgzNCwgMHg4MzBFLCAweDA3MkEsIDB4ODMxNiwgMHgxOENDLCAweDgzMTcsIDB4MThENSwNCi0gICAgMHg4MzE4LCAweDE4RDYsIDB4ODMxQiwgMHg0ODM2LCAweDgzMUMsIDB4MDQ2RiwgMHg4MzFELCAweDQ4MzcsDQotICAgIDB4ODMyMiwgMHg0MkIwLCAweDgzMjMsIDB4MThERCwgMHg4MzI4LCAweDA0QjUsIDB4ODMyQiwgMHgxOEQ0LA0KLSAgICAweDgzMkQsIDB4NDJCMSwgMHg4MzJGLCAweDE4RDMsIDB4ODMzMCwgMHg0ODM4LCAweDgzMzEsIDB4MThDRSwNCi0gICAgMHg4MzMyLCAweDE4Q0QsIDB4ODMzNCwgMHgxOENCLCAweDgzMzUsIDB4MThDQSwgMHg4MzM2LCAweDBCQTEsDQotICAgIDB4ODMzOCwgMHgwQjVCLCAweDgzMzksIDB4MThEMCwgMHg4MzNBLCAweDQyQjIsIDB4ODMzQywgMHg0ODM5LA0KLSAgICAweDgzNDAsIDB4MThDRiwgMHg4MzQzLCAweDNBQzksIDB4ODM0NCwgMHg0ODNBLCAweDgzNDUsIDB4MThEMiwNCi0gICAgMHg4MzQ2LCAweDFERjgsIDB4ODM0NywgMHg0MkIzLCAweDgzNDksIDB4MEFGMiwgMHg4MzRBLCAweDA3MkIsDQotICAgIDB4ODM0RiwgMHgwNEUzLCAweDgzNTAsIDB4MThEMSwgMHg4MzUxLCAweDNBQ0EsIDB4ODM1MiwgMHgwN0U1LA0KLSAgICAweDgzNTQsIDB4NDgzNSwgMHg4MzU1LCAweDNBQ0IsIDB4ODM1NiwgMHg0RDFCLCAweDgzNTcsIDB4NDgzQiwNCi0gICAgMHg4MzU4LCAweDBBRjMsIDB4ODM1QSwgMHgzNzdBLCAweDgzNjIsIDB4MjE5OSwgMHg4MzYzLCAweDQ1NkYsDQotICAgIDB4ODM3MywgMHgxOEUzLCAweDgzNzUsIDB4MThFNCwgMHg4Mzc3LCAweDA1NTksIDB4ODM3OCwgMHg0RDFDLA0KLSAgICAweDgzN0IsIDB4MDUyRSwgMHg4MzdDLCAweDE4RTEsIDB4ODM3RCwgMHg0MkI0LCAweDgzN0YsIDB4MjE5QSwNCi0gICAgMHg4Mzg1LCAweDE4RDcsIDB4ODM4NiwgMHgzQUNDLCAweDgzODcsIDB4MThERiwgMHg4Mzg5LCAweDE4RTYsDQotICAgIDB4ODM4QSwgMHgxOEUwLCAweDgzOEQsIDB4M0FDRCwgMHg4MzhFLCAweDE4REUsIDB4ODM5MiwgMHgzQUNFLA0KLSAgICAweDgzOTMsIDB4MThDMSwgMHg4Mzk0LCAweDQ4M0YsIDB4ODM5NSwgMHg0ODQwLCAweDgzOTYsIDB4MThEQywNCi0gICAgMHg4Mzk4LCAweDNBQ0YsIDB4ODM5QSwgMHgxOEQ4LCAweDgzOUIsIDB4NDg0MSwgMHg4MzlELCAweDQ4NDIsDQotICAgIDB4ODM5RSwgMHgwNjBDLCAweDgzOUYsIDB4MThEQSwgMHg4M0EwLCAweDE4RTUsIDB4ODNBMiwgMHgxOERCLA0KLSAgICAweDgzQTcsIDB4NDJCNSwgMHg4M0E4LCAweDE4RTcsIDB4ODNBOSwgMHgzQUQwLCAweDgzQUEsIDB4MThEOSwNCi0gICAgMHg4M0FCLCAweDBEMzIsIDB4ODNCMSwgMHgwRjUzLCAweDgzQjUsIDB4MThFMiwgMHg4M0JELCAweDE4RjgsDQotICAgIDB4ODNCRiwgMHgzQUQxLCAweDgzQzAsIDB4M0FEMiwgMHg4M0MxLCAweDE4RjAsIDB4ODNDNSwgMHgwQTQxLA0KLSAgICAweDgzQzcsIDB4MjE5QiwgMHg4M0M5LCAweDQ4NDMsIDB4ODNDQSwgMHgwNjYwLCAweDgzQ0MsIDB4MDZENSwNCi0gICAgMHg4M0NFLCAweDE4RUIsIDB4ODNDRiwgMHg0MkI2LCAweDgzRDAsIDB4NDg0NCwgMHg4M0QxLCAweDQyQjcsDQotICAgIDB4ODNEMywgMHgwNTVCLCAweDgzRDQsIDB4NDg0NSwgMHg4M0Q2LCAweDA5QkMsIDB4ODNEOCwgMHgxOEVFLA0KLSAgICAweDgzREMsIDB4MDg0QSwgMHg4M0RELCAweDQ4NDYsIDB4ODNERiwgMHgwQzRCLCAweDgzRTAsIDB4MThGMywNCi0gICAgMHg4M0UxLCAweDQyQjgsIDB4ODNFNSwgMHg0ODQ3LCAweDgzRTksIDB4MEUzRSwgMHg4M0VBLCAweDNBRDMsDQotICAgIDB4ODNFQiwgMHgxOEVBLCAweDgzRUYsIDB4MDU1QSwgMHg4M0YwLCAweDA3OEEsIDB4ODNGMSwgMHgwRDlCLA0KLSAgICAweDgzRjIsIDB4MThGNCwgMHg4M0Y0LCAweDE4RTgsIDB4ODNGNiwgMHgyMTlDLCAweDgzRjcsIDB4MThGMSwNCi0gICAgMHg4M0Y4LCAweDREMUQsIDB4ODNGOSwgMHg0ODQ4LCAweDgzRkIsIDB4MThGQiwgMHg4M0ZDLCAweDREMUUsDQotICAgIDB4ODNGRCwgMHgxOEVDLCAweDg0MDEsIDB4NDJCOSwgMHg4NDAzLCAweDE4RUQsIDB4ODQwNCwgMHgwQzkyLA0KLSAgICAweDg0MDYsIDB4NDJCQSwgMHg4NDA3LCAweDE4RjIsIDB4ODQwQSwgMHgxRTdGLCAweDg0MEIsIDB4MThFRiwNCi0gICAgMHg4NDBDLCAweDBFNTYsIDB4ODQwRCwgMHgxOEY1LCAweDg0MEUsIDB4MDRBNCwgMHg4NDBGLCAweDNBRDQsDQotICAgIDB4ODQxMSwgMHgzQUQ1LCAweDg0MTMsIDB4MThFOSwgMHg4NDE1LCAweDQ4NDksIDB4ODQxNywgMHg0ODRCLA0KLSAgICAweDg0MjAsIDB4MThGNywgMHg4NDIyLCAweDE4RjYsIDB4ODQyOSwgMHgwRDIxLCAweDg0MkEsIDB4MThGRCwNCi0gICAgMHg4NDJDLCAweDE5MDgsIDB4ODQzMSwgMHgwNURDLCAweDg0MzUsIDB4MTkwQiwgMHg4NDM4LCAweDE4RjksDQotICAgIDB4ODQzOSwgMHg0ODRDLCAweDg0M0MsIDB4MThGRSwgMHg4NDNELCAweDBGNTgsIDB4ODQ0NiwgMHgxOTA3LA0KLSAgICAweDg0NDgsIDB4MjE5RCwgMHg4NDQ5LCAweDBGM0YsIDB4ODQ0QSwgMHgzQUQ2LCAweDg0NEUsIDB4MEY3MiwNCi0gICAgMHg4NDRGLCAweDQ4NEQsIDB4ODQ1MSwgMHg0ODRFLCAweDg0NTIsIDB4NDg0RiwgMHg4NDU3LCAweDBCQjYsDQotICAgIDB4ODQ1OCwgMHg0RDFGLCAweDg0NTksIDB4NDg1MCwgMHg4NDVBLCAweDQ4NTEsIDB4ODQ1QiwgMHgwNUM5LA0KLSAgICAweDg0NUMsIDB4NDg1MiwgMHg4NDVGLCAweDQyQkIsIDB4ODQ2MSwgMHgwREU0LCAweDg0NjIsIDB4MTkwRCwNCi0gICAgMHg4NDYzLCAweDBDNzksIDB4ODQ2NSwgMHg0ODU0LCAweDg0NjYsIDB4MDQ3NSwgMHg4NDY5LCAweDE5MDYsDQotICAgIDB4ODQ2QiwgMHgxOTAyLCAweDg0NkMsIDB4MEFGNCwgMHg4NDZELCAweDE4RkMsIDB4ODQ2RSwgMHgxOTA0LA0KLSAgICAweDg0NkYsIDB4MTkwOSwgMHg4NDcwLCAweDQyQkMsIDB4ODQ3MSwgMHgwQ0UyLCAweDg0NzMsIDB4NDJCRCwNCi0gICAgMHg4NDc1LCAweDA0NkUsIDB4ODQ3NiwgMHgzQUQ3LCAweDg0NzcsIDB4MTkwMSwgMHg4NDc4LCAweDQ4NTUsDQotICAgIDB4ODQ3OSwgMHgxOTBBLCAweDg0N0EsIDB4MERFQSwgMHg4NDdDLCAweDQ4NTYsIDB4ODQ4MSwgMHg0ODU3LA0KLSAgICAweDg0ODIsIDB4MTkwNSwgMHg4NDg0LCAweDE5MDAsIDB4ODQ4NSwgMHg0MkJFLCAweDg0OEIsIDB4MDlCRCwNCi0gICAgMHg4NDkwLCAweDA5MzksIDB4ODQ5MywgMHg0RDIwLCAweDg0OTQsIDB4MDhEOCwgMHg4NDk3LCAweDQ4NTksDQotICAgIDB4ODQ5OSwgMHgwRUU0LCAweDg0OUMsIDB4MERCOSwgMHg4NDlFLCAweDQyQkYsIDB4ODQ5RiwgMHgxOTEwLA0KLSAgICAweDg0QTEsIDB4MTkxOSwgMHg4NEE2LCAweDQ4NUEsIDB4ODRBOCwgMHgzQUQ4LCAweDg0QUQsIDB4MTkwMywNCi0gICAgMHg4NEFGLCAweDNBRDksIDB4ODRCMSwgMHg0RDIxLCAweDg0QjIsIDB4MDVENSwgMHg4NEI0LCAweDIxOUUsDQotICAgIDB4ODRCOCwgMHgwOUUwLCAweDg0QjksIDB4MTkwRSwgMHg4NEJBLCAweDQyQzAsIDB4ODRCQiwgMHgxOTEzLA0KLSAgICAweDg0QkMsIDB4MEFGNSwgMHg4NEJELCAweDREMjIsIDB4ODRCRSwgMHg0ODVCLCAweDg0QkYsIDB4MTkwRiwNCi0gICAgMHg4NEMwLCAweDNBREEsIDB4ODRDMSwgMHgxOTE2LCAweDg0QzIsIDB4M0FEQiwgMHg4NEM0LCAweDBCOUQsDQotICAgIDB4ODRDNiwgMHgxOTE3LCAweDg0QzksIDB4MEY0MCwgMHg4NENBLCAweDE5MEMsIDB4ODRDQiwgMHgwNTk2LA0KLSAgICAweDg0Q0QsIDB4MTkxMiwgMHg4NENFLCAweDQ4NUQsIDB4ODRDRiwgMHg0ODVFLCAweDg0RDAsIDB4MTkxNSwNCi0gICAgMHg4NEQxLCAweDBFQjgsIDB4ODREMywgMHg0ODVGLCAweDg0RDYsIDB4MTkxOCwgMHg4NEQ5LCAweDE5MTEsDQotICAgIDB4ODREQSwgMHgxOTE0LCAweDg0REMsIDB4MjBBQiwgMHg4NEU3LCAweDQ4NjEsIDB4ODRFQSwgMHg0ODYyLA0KLSAgICAweDg0RUMsIDB4MEU1NywgMHg4NEVFLCAweDBGQzcsIDB4ODRFRiwgMHg0ODYzLCAweDg0RjAsIDB4M0FEQywNCi0gICAgMHg4NEYxLCAweDQ4NjQsIDB4ODRGNCwgMHgxOTFDLCAweDg0RkEsIDB4NDg2NSwgMHg4NEZCLCAweDREMjMsDQotICAgIDB4ODRGQywgMHgxOTIzLCAweDg0RkQsIDB4M0FERCwgMHg4NEZGLCAweDE5MUIsIDB4ODUwMCwgMHgwOEVGLA0KLSAgICAweDg1MDYsIDB4MThGQSwgMHg4NTBDLCAweDNBREUsIDB4ODUxMSwgMHgwRTFFLCAweDg1MTMsIDB4MEVBRSwNCi0gICAgMHg4NTE0LCAweDE5MjIsIDB4ODUxNSwgMHgxOTIxLCAweDg1MTcsIDB4MTkxRCwgMHg4NTE4LCAweDE5MUUsDQotICAgIDB4ODUxQSwgMHgwNEQ4LCAweDg1MUIsIDB4NDg2NiwgMHg4NTFFLCAweDQyQzMsIDB4ODUxRiwgMHgxOTIwLA0KLSAgICAweDg1MjEsIDB4MTkxQSwgMHg4NTIzLCAweDFFMUEsIDB4ODUyNCwgMHg0ODY3LCAweDg1MjUsIDB4NDg2OCwNCi0gICAgMHg4NTI2LCAweDBCRjEsIDB4ODUyQiwgMHg0ODY5LCAweDg1MkMsIDB4MTkxRiwgMHg4NTJELCAweDA0QzIsDQotICAgIDB4ODUyRiwgMHg0MkM0LCAweDg1MzIsIDB4NDJDMiwgMHg4NTM0LCAweDNBREYsIDB4ODUzNSwgMHgwQjAyLA0KLSAgICAweDg1M0QsIDB4MEUxMywgMHg4NTNFLCAweDFFQjUsIDB4ODU0MCwgMHgxOTI0LCAweDg1NDEsIDB4MTkyOCwNCi0gICAgMHg4NTQzLCAweDBENkQsIDB4ODU0NiwgMHg0RDI0LCAweDg1NDgsIDB4MTkyNywgMHg4NTQ5LCAweDA5QkUsDQotICAgIDB4ODU0QSwgMHgwOEY1LCAweDg1NEIsIDB4MTkyQSwgMHg4NTRFLCAweDA2QjYsIDB4ODU0RiwgMHg0ODZBLA0KLSAgICAweDg1NTEsIDB4NDg2RCwgMHg4NTUzLCAweDIxOUYsIDB4ODU1NSwgMHgxOTJCLCAweDg1NTYsIDB4NEQyNSwNCi0gICAgMHg4NTU3LCAweDBERUIsIDB4ODU1OCwgMHgxOTI2LCAweDg1NTksIDB4MjFBMCwgMHg4NTVBLCAweDE4RkYsDQotICAgIDB4ODU1RCwgMHg0RDI2LCAweDg1NUUsIDB4M0FFMCwgMHg4NTYxLCAweDQ4NkUsIDB4ODU2MiwgMHg0ODZGLA0KLSAgICAweDg1NjMsIDB4MTkyNSwgMHg4NTY0LCAweDQyQzUsIDB4ODU2OCwgMHgwRkY1LCAweDg1NjksIDB4MEM3QSwNCi0gICAgMHg4NTZBLCAweDBERTUsIDB4ODU2QiwgMHgyMUExLCAweDg1NkQsIDB4MTkzMiwgMHg4NTZGLCAweDQ4NkIsDQotICAgIDB4ODU3NywgMHgxOTM4LCAweDg1N0EsIDB4NDJDNiwgMHg4NTdCLCAweDQ4NzEsIDB4ODU3RCwgMHg0ODcyLA0KLSAgICAweDg1N0UsIDB4MTkzOSwgMHg4NTdGLCAweDQ4NzMsIDB4ODU4MCwgMHgxOTJDLCAweDg1ODEsIDB4NDg3NCwNCi0gICAgMHg4NTg0LCAweDBEMkMsIDB4ODU4NSwgMHg0RDI3LCAweDg1ODYsIDB4NDg3NSwgMHg4NTg3LCAweDE5MzYsDQotICAgIDB4ODU4OCwgMHgxOTJFLCAweDg1OEEsIDB4MTkzMCwgMHg4NThDLCAweDQyQzcsIDB4ODU4RiwgMHgzQUUxLA0KLSAgICAweDg1OTAsIDB4MTkzQSwgMHg4NTkxLCAweDE5MkYsIDB4ODU5MywgMHg0ODc2LCAweDg1OTQsIDB4MTkzMywNCi0gICAgMHg4NTk3LCAweDA1MTQsIDB4ODU5OCwgMHg0RDI4LCAweDg1OTksIDB4MENCRCwgMHg4NTlCLCAweDE5MzQsDQotICAgIDB4ODU5QywgMHgxOTM3LCAweDg1OUQsIDB4NDg3NywgMHg4NTlGLCAweDQ4NzgsIDB4ODVBMiwgMHg0MkM4LA0KLSAgICAweDg1QTQsIDB4MTkyRCwgMHg4NUE2LCAweDBBQTgsIDB4ODVBOCwgMHgxOTMxLCAweDg1QTksIDB4MDg3NSwNCi0gICAgMHg4NUFBLCAweDBBMEIsIDB4ODVBQiwgMHgwNzA2LCAweDg1QUMsIDB4MEYwMCwgMHg4NUFELCAweDNBRTQsDQotICAgIDB4ODVBRSwgMHgwRjA1LCAweDg1QUYsIDB4MDk3QywgMHg4NUIwLCAweDIxQTMsIDB4ODVCNywgMHgzQUUyLA0KLSAgICAweDg1QjksIDB4MTkzRSwgMHg4NUJBLCAweDE5M0MsIDB4ODVCQywgMHg0ODdDLCAweDg1QzEsIDB4MEZGNCwNCi0gICAgMHg4NUM3LCAweDQ4N0QsIDB4ODVDOSwgMHgxOTNCLCAweDg1Q0EsIDB4NDg3RSwgMHg4NUNCLCAweDQyQzksDQotICAgIDB4ODVDRCwgMHgwRjVGLCAweDg1Q0UsIDB4M0FFMywgMHg4NUNGLCAweDE5M0QsIDB4ODVEMCwgMHgxOTNGLA0KLSAgICAweDg1RDUsIDB4MTk0MCwgMHg4NUQ4LCAweDQ4N0YsIDB4ODVEOSwgMHg0ODgwLCAweDg1REMsIDB4MTk0MywNCi0gICAgMHg4NURELCAweDE5NDEsIDB4ODVERiwgMHg0ODgxLCAweDg1RTEsIDB4NDg4MiwgMHg4NUU0LCAweDBDN0IsDQotICAgIDB4ODVFNSwgMHgxOTQyLCAweDg1RTYsIDB4NDg4MywgMHg4NUU5LCAweDBENjEsIDB4ODVFQSwgMHgxOTM1LA0KLSAgICAweDg1RUQsIDB4NDJDQSwgMHg4NUY0LCAweDM3ODAsIDB4ODVGNiwgMHg0ODg0LCAweDg1RjcsIDB4MDk3RCwNCi0gICAgMHg4NUY5LCAweDE5NDQsIDB4ODVGQSwgMHgxOTQ5LCAweDg1RkIsIDB4MEFGNiwgMHg4NUZFLCAweDE5NDgsDQotICAgIDB4ODVGRiwgMHg0MkNCLCAweDg2MDAsIDB4NDg4NSwgMHg4NjAyLCAweDE5MjksIDB4ODYwNCwgMHg0MkNDLA0KLSAgICAweDg2MDUsIDB4NDJDRCwgMHg4NjA2LCAweDE5NEEsIDB4ODYwNywgMHgwQUNCLCAweDg2MEEsIDB4MTk0NSwNCi0gICAgMHg4NjBCLCAweDE5NDcsIDB4ODYxMCwgMHg0MkNFLCAweDg2MTEsIDB4NDg4NiwgMHg4NjEyLCAweDNBRTUsDQotICAgIDB4ODYxMywgMHgxOTQ2LCAweDg2MTYsIDB4MTREMCwgMHg4NjE3LCAweDE0QzEsIDB4ODYxOCwgMHg0MkQwLA0KLSAgICAweDg2MUEsIDB4MTk0QywgMHg4NjFFLCAweDQ4ODcsIDB4ODYyMSwgMHg0ODg4LCAweDg2MjIsIDB4MTk0QiwNCi0gICAgMHg4NjI0LCAweDQ4ODksIDB4ODYyNywgMHg0ODhBLCAweDg2MjksIDB4M0FFNiwgMHg4NjJELCAweDBGNjAsDQotICAgIDB4ODYyRiwgMHgxNkIxLCAweDg2MzAsIDB4MTk0RCwgMHg4NjM4LCAweDQyRDEsIDB4ODYzOSwgMHg0ODhDLA0KLSAgICAweDg2M0MsIDB4NDg4RCwgMHg4NjNGLCAweDE5NEUsIDB4ODY0MCwgMHg0ODhGLCAweDg2NDEsIDB4NDFCOCwNCi0gICAgMHg4NjQyLCAweDREMjksIDB4ODY0NiwgMHg0RDJBLCAweDg2NEQsIDB4MTk0RiwgMHg4NjRFLCAweDA3OEIsDQotICAgIDB4ODY1MCwgMHgwNjZFLCAweDg2NTIsIDB4M0FFNywgMHg4NjUzLCAweDQ4OTAsIDB4ODY1NCwgMHgxOTUxLA0KLSAgICAweDg2NTUsIDB4MTA5NCwgMHg4NjU2LCAweDQ4OTEsIDB4ODY1NywgMHg0MkQyLCAweDg2NUEsIDB4MDY4RiwNCi0gICAgMHg4NjVCLCAweDM0MTgsIDB4ODY1QywgMHgwRjgyLCAweDg2NUUsIDB4MDZFQiwgMHg4NjVGLCAweDE5NTIsDQotICAgIDB4ODY2MiwgMHg0MkQzLCAweDg2NjMsIDB4M0FFOCwgMHg4NjY3LCAweDE5NTMsIDB4ODY2QiwgMHgwQkFDLA0KLSAgICAweDg2NkMsIDB4M0FFOSwgMHg4NjZGLCAweDNBRUEsIDB4ODY3MSwgMHgxOTU0LCAweDg2NzUsIDB4NDJENSwNCi0gICAgMHg4Njc3LCAweDQ4OTIsIDB4ODY3OSwgMHgwQ0QyLCAweDg2N0EsIDB4M0FFQiwgMHg4NjdCLCAweDA0N0UsDQotICAgIDB4ODY3RCwgMHgzNzg2LCAweDg2ODcsIDB4NDg5MywgMHg4Njg5LCAweDQ4OTQsIDB4ODY4QSwgMHgwNTYzLA0KLSAgICAweDg2OEIsIDB4MTk1OSwgMHg4NjhDLCAweDE5NUEsIDB4ODY4RCwgMHgzQUVDLCAweDg2OTEsIDB4M0FFRCwNCi0gICAgMHg4NjkzLCAweDE5NTUsIDB4ODY5NSwgMHgwODhCLCAweDg2OTgsIDB4M0FFRSwgMHg4NjlDLCAweDQ4OTUsDQotICAgIDB4ODY5RCwgMHg0ODk2LCAweDg2QTMsIDB4MTk1NiwgMHg4NkE0LCAweDBDRjgsIDB4ODZBNywgMHgzQUVGLA0KLSAgICAweDg2QTgsIDB4M0FGMCwgMHg4NkE5LCAweDE5NTcsIDB4ODZBQSwgMHgxOTU4LCAweDg2QUIsIDB4MTk2MiwNCi0gICAgMHg4NkFGLCAweDE5NUMsIDB4ODZCMCwgMHgxOTVGLCAweDg2QjEsIDB4NDg5NywgMHg4NkIzLCAweDQ4OTgsDQotICAgIDB4ODZCNiwgMHgxOTVCLCAweDg2QjgsIDB4NDJENiwgMHg4NkMwLCAweDREMkIsIDB4ODZDMSwgMHg0ODk5LA0KLSAgICAweDg2QzMsIDB4NDg5QSwgMHg4NkM0LCAweDE5NUQsIDB4ODZDNiwgMHgxOTVFLCAweDg2QzcsIDB4MDkwNCwNCi0gICAgMHg4NkM5LCAweDE5NjAsIDB4ODZDQiwgMHgwQjdGLCAweDg2Q0QsIDB4MDcyQywgMHg4NkNFLCAweDA1QTAsDQotICAgIDB4ODZEMSwgMHg0ODlCLCAweDg2RDQsIDB4MTk2MywgMHg4NkQ1LCAweDQ4OUMsIDB4ODZENywgMHg0ODlELA0KLSAgICAweDg2RDksIDB4MDU5RCwgMHg4NkRCLCAweDE5NjgsIDB4ODZERSwgMHgxOTY0LCAweDg2REYsIDB4MTk2NywNCi0gICAgMHg4NkUzLCAweDQ4OUUsIDB4ODZFNCwgMHgwRDRFLCAweDg2RTYsIDB4NDg5RiwgMHg4NkU5LCAweDE5NjUsDQotICAgIDB4ODZFQywgMHgxOTY2LCAweDg2RUQsIDB4MERCQSwgMHg4NkVFLCAweDBENkUsIDB4ODZFRiwgMHgxOTY5LA0KLSAgICAweDg2RjgsIDB4MEI1RCwgMHg4NkY5LCAweDE5NzMsIDB4ODZGQSwgMHgzQUYxLCAweDg2RkIsIDB4MTk2RiwNCi0gICAgMHg4NkZDLCAweDQyRDcsIDB4ODZGRCwgMHgzQUYyLCAweDg2RkUsIDB4MDU2QiwgMHg4NzAwLCAweDE5NkQsDQotICAgIDB4ODcwMiwgMHgwRTU4LCAweDg3MDMsIDB4MTk2RSwgMHg4NzA1LCAweDQ4QTEsIDB4ODcwNiwgMHgxOTZCLA0KLSAgICAweDg3MDcsIDB4NDhBMiwgMHg4NzA4LCAweDE5NkMsIDB4ODcwOSwgMHgxOTcxLCAweDg3MEEsIDB4MTk3NCwNCi0gICAgMHg4NzBCLCAweDNBRjMsIDB4ODcwRCwgMHgxOTcyLCAweDg3MEUsIDB4NDhBMywgMHg4NzEwLCAweDQ4QTQsDQotICAgIDB4ODcxMSwgMHgxOTcwLCAweDg3MTIsIDB4MTk2QSwgMHg4NzEzLCAweDNBRjQsIDB4ODcxNCwgMHg0RDJDLA0KLSAgICAweDg3MTgsIDB4MEI5NiwgMHg4NzE5LCAweDNBRjUsIDB4ODcxQSwgMHgxOTdCLCAweDg3MUMsIDB4MEVCNiwNCi0gICAgMHg4NzFFLCAweDNBRjYsIDB4ODcxRiwgMHg0OEE1LCAweDg3MjEsIDB4NDhBNiwgMHg4NzIyLCAweDREMkQsDQotICAgIDB4ODcyMywgMHg0OEE3LCAweDg3MjUsIDB4MTk3OSwgMHg4NzI4LCAweDNBRjcsIDB4ODcyOSwgMHgxOTdBLA0KLSAgICAweDg3MkUsIDB4NEQyRSwgMHg4NzMxLCAweDQ4QTgsIDB4ODczNCwgMHgxOTc1LCAweDg3MzcsIDB4MTk3NywNCi0gICAgMHg4NzM5LCAweDREMkYsIDB4ODczQSwgMHg0OEE5LCAweDg3M0IsIDB4MTk3OCwgMHg4NzNFLCAweDNBRjgsDQotICAgIDB4ODczRiwgMHgxOTc2LCAweDg3NDAsIDB4NDhBQSwgMHg4NzQzLCAweDQ4QUIsIDB4ODc0OSwgMHgwQThBLA0KLSAgICAweDg3NEIsIDB4MEZERiwgMHg4NzRDLCAweDE5N0YsIDB4ODc0RSwgMHgxOTgwLCAweDg3NTEsIDB4NDhBQywNCi0gICAgMHg4NzUzLCAweDE5ODYsIDB4ODc1NSwgMHgwOUYwLCAweDg3NTcsIDB4MTk4MiwgMHg4NzU4LCAweDQ4QUQsDQotICAgIDB4ODc1OSwgMHgxOTg1LCAweDg3NUQsIDB4NEQzMCwgMHg4NzVGLCAweDE5N0QsIDB4ODc2MCwgMHgxOTdDLA0KLSAgICAweDg3NjMsIDB4MTk4NywgMHg4NzY0LCAweDQ4QUUsIDB4ODc2NSwgMHg0OEFGLCAweDg3NjYsIDB4MDU1QywNCi0gICAgMHg4NzY4LCAweDE5ODMsIDB4ODc2QSwgMHgxOTg4LCAweDg3NkUsIDB4MTk4NCwgMHg4NzcxLCAweDNBRjksDQotICAgIDB4ODc3MiwgMHg0OEIwLCAweDg3NzQsIDB4MTk4MSwgMHg4Nzc2LCAweDBCQ0YsIDB4ODc3OCwgMHgxOTdFLA0KLSAgICAweDg3N0IsIDB4NEQzMSwgMHg4NzdDLCAweDQ4QjEsIDB4ODc3RiwgMHgwRDFFLCAweDg3ODIsIDB4MTk4QywNCi0gICAgMHg4Nzg3LCAweDQyRDgsIDB4ODc4OCwgMHgzQUZBLCAweDg3ODksIDB4NDhCNSwgMHg4NzhCLCAweDQ4QjYsDQotICAgIDB4ODc4QywgMHg0RDMyLCAweDg3OEQsIDB4MEYyNSwgMHg4NzhFLCAweDREMzMsIDB4ODc5MywgMHg0OEI3LA0KLSAgICAweDg3OTcsIDB4NEQzNCwgMHg4Nzk4LCAweDREMzUsIDB4ODc5OSwgMHgzQUZCLCAweDg3OUUsIDB4NEQzNiwNCi0gICAgMHg4NzlGLCAweDE5OEIsIDB4ODdBMCwgMHg0OEI4LCAweDg3QTIsIDB4MTk4QSwgMHg4N0EzLCAweDREMzcsDQotICAgIDB4ODdBNywgMHg0OEI0LCAweDg3QUIsIDB4MTk5MywgMHg4N0FDLCAweDNBRkMsIDB4ODdBRCwgMHgzQUZELA0KLSAgICAweDg3QUUsIDB4NEQzOCwgMHg4N0FGLCAweDE5OEQsIDB4ODdCMywgMHgxOTk1LCAweDg3QjUsIDB4M0FGRSwNCi0gICAgMHg4N0JBLCAweDBGNTAsIDB4ODdCQiwgMHgxOTk4LCAweDg3QkQsIDB4MTk4RiwgMHg4N0JFLCAweDQ4QkIsDQotICAgIDB4ODdCRiwgMHg0RDM5LCAweDg3QzAsIDB4MTk5MCwgMHg4N0MxLCAweDQ4QkQsIDB4ODdDNCwgMHgxOTk0LA0KLSAgICAweDg3QzYsIDB4MTk5NywgMHg4N0M3LCAweDE5OTYsIDB4ODdDOSwgMHg0RDNBLCAweDg3Q0IsIDB4MTk4RSwNCi0gICAgMHg4N0NFLCAweDQ4QkUsIDB4ODdEMCwgMHgxOTkxLCAweDg3RDIsIDB4MTlBMiwgMHg4N0Q2LCAweDNBRkYsDQotICAgIDB4ODdEQSwgMHg0RDNCLCAweDg3REYsIDB4NDhCRiwgMHg4N0UwLCAweDE5OUIsIDB4ODdFMywgMHg0OEMxLA0KLSAgICAweDg3RTUsIDB4NDhDMiwgMHg4N0U2LCAweDQ4QzMsIDB4ODdFQSwgMHg0OEM0LCAweDg3RUIsIDB4M0IwMCwNCi0gICAgMHg4N0VDLCAweDFFMjMsIDB4ODdFRCwgMHgzQjAxLCAweDg3RUYsIDB4MTk5OSwgMHg4N0YyLCAweDE5OUEsDQotICAgIDB4ODdGNSwgMHgzQzNELCAweDg3RjYsIDB4MTk5RiwgMHg4N0Y3LCAweDE5QTAsIDB4ODdGOSwgMHgwNTg4LA0KLSAgICAweDg3RkIsIDB4MDY1QywgMHg4N0ZFLCAweDE5OUUsIDB4ODgwMSwgMHgzQjAyLCAweDg4MDMsIDB4NEY1OCwNCi0gICAgMHg4ODA1LCAweDE5ODksIDB4ODgwNiwgMHgzQjA0LCAweDg4MDcsIDB4MjFBNiwgMHg4ODBBLCAweDQyREEsDQotICAgIDB4ODgwQiwgMHgzQjA1LCAweDg4MEQsIDB4MTk5RCwgMHg4ODBFLCAweDE5QTEsIDB4ODgwRiwgMHgxOTlDLA0KLSAgICAweDg4MTAsIDB4NDJEQiwgMHg4ODExLCAweDE5QTMsIDB4ODgxMywgMHg0OEM1LCAweDg4MTQsIDB4M0IwNiwNCi0gICAgMHg4ODE1LCAweDE5QTUsIDB4ODgxNiwgMHgxOUE0LCAweDg4MTgsIDB4NEQzQywgMHg4ODFCLCAweDREM0QsDQotICAgIDB4ODgxQywgMHgzQjA3LCAweDg4MUYsIDB4MUU4NSwgMHg4ODIxLCAweDE5QTcsIDB4ODgyMiwgMHgxOUE2LA0KLSAgICAweDg4MjMsIDB4MTk2MSwgMHg4ODI3LCAweDE5QUIsIDB4ODgyOCwgMHg0OEM2LCAweDg4MkQsIDB4NEQzRSwNCi0gICAgMHg4ODJFLCAweDQ4QzcsIDB4ODgzMSwgMHgxOUE4LCAweDg4MzIsIDB4NDhDOCwgMHg4ODM2LCAweDE5QTksDQotICAgIDB4ODgzOSwgMHgxOUFBLCAweDg4M0EsIDB4NEQzRiwgMHg4ODNCLCAweDE5QUMsIDB4ODgzQywgMHg0OEM5LA0KLSAgICAweDg4NDAsIDB4MDc0MiwgMHg4ODQyLCAweDE5QUUsIDB4ODg0NCwgMHgxOUFELCAweDg4NDUsIDB4NEQ0MCwNCi0gICAgMHg4ODQ2LCAweDA5M0EsIDB4ODg0QSwgMHg0OENCLCAweDg4NEIsIDB4NEQ0MSwgMHg4ODRDLCAweDA3RTYsDQotICAgIDB4ODg0RCwgMHgxNTI0LCAweDg4NEUsIDB4NEQ0MiwgMHg4ODUyLCAweDE5QUYsIDB4ODg1MywgMHgwOTVCLA0KLSAgICAweDg4NTUsIDB4NEQ0MywgMHg4ODU2LCAweDNCMDgsIDB4ODg1NywgMHgwNTk3LCAweDg4NTgsIDB4NDhDQywNCi0gICAgMHg4ODU5LCAweDE5QjAsIDB4ODg1QSwgMHg0RDQ0LCAweDg4NUIsIDB4MDRGNCwgMHg4ODVELCAweDA5QkYsDQotICAgIDB4ODg1RSwgMHgxOUIxLCAweDg4NUYsIDB4M0IwOSwgMHg4ODYxLCAweDA3RTcsIDB4ODg2MiwgMHgxOUIyLA0KLSAgICAweDg4NjMsIDB4MDRBNSwgMHg4ODY0LCAweDNCMEEsIDB4ODg2OCwgMHgwREFGLCAweDg4NjksIDB4NDhDRiwNCi0gICAgMHg4ODZCLCAweDE5QjMsIDB4ODg2RSwgMHg0RDQ1LCAweDg4NkYsIDB4NDhEMSwgMHg4ODcwLCAweDBBMzAsDQotICAgIDB4ODg3MiwgMHgxOUJBLCAweDg4NzUsIDB4MTlCNywgMHg4ODc3LCAweDBCQUQsIDB4ODg3RCwgMHgxOUI4LA0KLSAgICAweDg4N0UsIDB4MTlCNSwgMHg4ODdGLCAweDA2RDYsIDB4ODg4MSwgMHgxOUI0LCAweDg4ODIsIDB4MTlCQiwNCi0gICAgMHg4ODg4LCAweDA3MEMsIDB4ODg4QiwgMHgwQjNFLCAweDg4OEQsIDB4MTlDMSwgMHg4ODkyLCAweDE5QkQsDQotICAgIDB4ODg5NiwgMHgwQjE1LCAweDg4OTcsIDB4MTlCQywgMHg4ODk4LCAweDNCMEIsIDB4ODg5OSwgMHgxOUJGLA0KLSAgICAweDg4OUEsIDB4NEQ0NiwgMHg4ODlCLCAweDRENDcsIDB4ODg5QywgMHg0RDQ4LCAweDg4OUUsIDB4MTlCNiwNCi0gICAgMHg4OEEwLCAweDQ4RDIsIDB4ODhBMiwgMHgxOUMwLCAweDg4QTQsIDB4MTlDMiwgMHg4OEFBLCAweDNCMEMsDQotICAgIDB4ODhBQiwgMHgwRDgzLCAweDg4QUUsIDB4MTlCRSwgMHg4OEIwLCAweDE5QzMsIDB4ODhCMSwgMHgxOUM1LA0KLSAgICAweDg4QjQsIDB4MDc4NywgMHg4OEI1LCAweDE5QjksIDB4ODhCNywgMHgwNDg1LCAweDg4QkMsIDB4NDhEMywNCi0gICAgMHg4OEJELCAweDNCMEQsIDB4ODhCRSwgMHgzQjBFLCAweDg4QkYsIDB4MTlDNCwgMHg4OEMwLCAweDQ4RDQsDQotICAgIDB4ODhDMSwgMHgwODRCLCAweDg4QzIsIDB4MEZCRSwgMHg4OEMzLCAweDE5QzYsIDB4ODhDNCwgMHgxOUM3LA0KLSAgICAweDg4QzUsIDB4MEFGNywgMHg4OEM2LCAweDM3ODksIDB4ODhDQSwgMHgzQjBGLCAweDg4Q0QsIDB4NEQ0OSwNCi0gICAgMHg4OENFLCAweDQyREMsIDB4ODhDRiwgMHgwRjZBLCAweDg4RDEsIDB4NDhENiwgMHg4OEQyLCAweDNCMTAsDQotICAgIDB4ODhEMywgMHg0OEQ3LCAweDg4RDQsIDB4MTlDOCwgMHg4OEQ1LCAweDBGMUYsIDB4ODhEOCwgMHgxOUM5LA0KLSAgICAweDg4RDksIDB4MTlDQSwgMHg4OERCLCAweDNCMTEsIDB4ODhEQywgMHgwRTM0LCAweDg4REQsIDB4MTlDQiwNCi0gICAgMHg4OERGLCAweDA4MzAsIDB4ODhFMCwgMHg0RDRBLCAweDg4RTEsIDB4MEY2QiwgMHg4OEU4LCAweDE5RDAsDQotICAgIDB4ODhFRiwgMHg0RDRCLCAweDg4RjAsIDB4M0IxMiwgMHg4OEYxLCAweDNCMTMsIDB4ODhGMiwgMHgxOUQxLA0KLSAgICAweDg4RjMsIDB4MDlDMCwgMHg4OEY0LCAweDE5Q0YsIDB4ODhGNSwgMHgyMUE3LCAweDg4RjgsIDB4MEY1MSwNCi0gICAgMHg4OEY5LCAweDE5Q0MsIDB4ODhGQywgMHgxOUNFLCAweDg4RkQsIDB4MEE2MSwgMHg4OEZFLCAweDBBNDQsDQotICAgIDB4ODkwMSwgMHg0OEQ5LCAweDg5MDIsIDB4MTlDRCwgMHg4OTA0LCAweDE5RDIsIDB4ODkwNiwgMHgzQjE0LA0KLSAgICAweDg5MDcsIDB4MERGMywgMHg4OTBBLCAweDE5RDQsIDB4ODkwQywgMHgxOUQzLCAweDg5MEUsIDB4NEQ0QywNCi0gICAgMHg4OTBGLCAweDRENEQsIDB4ODkxMCwgMHgwNUNBLCAweDg5MTIsIDB4MEU1OSwgMHg4OTEzLCAweDE5RDUsDQotICAgIDB4ODkxOCwgMHgzQjE1LCAweDg5MTksIDB4M0IxNiwgMHg4OTFBLCAweDNCMTcsIDB4ODkxQywgMHgyMEE4LA0KLSAgICAweDg5MUQsIDB4MTlFMSwgMHg4OTFFLCAweDE5RDcsIDB4ODkyNSwgMHgxOUQ4LCAweDg5MjYsIDB4NEQ0RSwNCi0gICAgMHg4OTI3LCAweDNCMTgsIDB4ODkyQSwgMHgxOUQ5LCAweDg5MkIsIDB4MTlEQSwgMHg4OTMwLCAweDNCMTksDQotICAgIDB4ODkzMiwgMHg0MkRFLCAweDg5MzUsIDB4NEQ0RiwgMHg4OTM2LCAweDE5REUsIDB4ODkzNywgMHg0OERCLA0KLSAgICAweDg5MzgsIDB4MTlERiwgMHg4OTM5LCAweDQyREYsIDB4ODkzQiwgMHgxOURELCAweDg5M0UsIDB4M0IxQSwNCi0gICAgMHg4OTQwLCAweDQyRTAsIDB4ODk0MSwgMHgxOURCLCAweDg5NDIsIDB4NDhERCwgMHg4OTQzLCAweDE5RDYsDQotICAgIDB4ODk0NCwgMHgxOURDLCAweDg5NDUsIDB4NDhERSwgMHg4OTQ5LCAweDQ4REYsIDB4ODk0QywgMHgxOUUwLA0KLSAgICAweDg5NEQsIDB4MUJEMCwgMHg4OTU2LCAweDA1MjgsIDB4ODk1QSwgMHg0RDUwLCAweDg5NUMsIDB4NEQ1MSwNCi0gICAgMHg4OTVFLCAweDE5RTMsIDB4ODk1RiwgMHgwNkQ3LCAweDg5NjAsIDB4MTlFMiwgMHg4OTYyLCAweDQ4RTEsDQotICAgIDB4ODk2NCwgMHgxOUU1LCAweDg5NjYsIDB4MTlFNCwgMHg4OTZBLCAweDE5RTcsIDB4ODk2QiwgMHg0RDUyLA0KLSAgICAweDg5NkQsIDB4MTlFNiwgMHg4OTZGLCAweDE5RTgsIDB4ODk3MCwgMHg0RDUzLCAweDg5NzIsIDB4MDkzQiwNCi0gICAgMHg4OTc0LCAweDE5RTksIDB4ODk3NywgMHgxOUVBLCAweDg5N0IsIDB4M0IxQiwgMHg4OTdDLCAweDRENTQsDQotICAgIDB4ODk3RSwgMHgxOUVCLCAweDg5N0YsIDB4MEE2MiwgMHg4OTgwLCAweDM2MkUsIDB4ODk4MSwgMHgwRjQxLA0KLSAgICAweDg5ODMsIDB4MTlFQywgMHg4OTg2LCAweDBERjQsIDB4ODk4NywgMHgwQ0ZDLCAweDg5ODgsIDB4MTlFRCwNCi0gICAgMHg4OTg5LCAweDQ4RTIsIDB4ODk4QSwgMHgxOUVFLCAweDg5OEIsIDB4MDc1RiwgMHg4OThGLCAweDA2NDYsDQotICAgIDB4ODk5MCwgMHg0OEUzLCAweDg5OTMsIDB4MTlFRiwgMHg4OTk0LCAweDQyRTEsIDB4ODk5NiwgMHgwOEI5LA0KLSAgICAweDg5OTcsIDB4MENGNywgMHg4OTk4LCAweDE5RjAsIDB4ODk5QSwgMHgwNUFFLCAweDg5OUYsIDB4NDhFNCwNCi0gICAgMHg4OUExLCAweDE5RjEsIDB4ODlBNSwgMHg0RDU1LCAweDg5QTYsIDB4MTlGMywgMHg4OUE3LCAweDBGNjEsDQotICAgIDB4ODlBOSwgMHgxOUYyLCAweDg5QUEsIDB4MEEwQywgMHg4OUFDLCAweDE5RjQsIDB4ODlBRiwgMHgxOUY1LA0KLSAgICAweDg5QjAsIDB4NDhFNSwgMHg4OUIyLCAweDE5RjYsIDB4ODlCMywgMHgwNjBELCAweDg5QjUsIDB4NEQ1NiwNCi0gICAgMHg4OUI3LCAweDQ4RTYsIDB4ODlCQSwgMHgxOUY3LCAweDg5QkMsIDB4NEQ1NywgMHg4OUJELCAweDE5RjgsDQotICAgIDB4ODlCRiwgMHgxOUY5LCAweDg5QzAsIDB4MTlGQSwgMHg4OUQyLCAweDA1QUYsIDB4ODlENCwgMHgzQjFDLA0KLSAgICAweDg5RDUsIDB4NEQ1OCwgMHg4OUQ2LCAweDNCMUQsIDB4ODlEOCwgMHg0OEU3LCAweDg5REEsIDB4MTlGQiwNCi0gICAgMHg4OURDLCAweDE5RkMsIDB4ODlERCwgMHgxOUZELCAweDg5RTMsIDB4MDU3MiwgMHg4OUU1LCAweDNCMUUsDQotICAgIDB4ODlFNiwgMHgwOUVFLCAweDg5RTcsIDB4MTlGRSwgMHg4OUVCLCAweDQ4RTgsIDB4ODlGMSwgMHgzQjFGLA0KLSAgICAweDg5RjMsIDB4NDhFQSwgMHg4OUY0LCAweDE5RkYsIDB4ODlGNiwgMHg0MkUyLCAweDg5RjgsIDB4MUEwMCwNCi0gICAgMHg4OUZELCAweDQ4RUIsIDB4ODlGRiwgMHg0OEVDLCAweDhBMDAsIDB4MDc3NCwgMHg4QTAxLCAweDM1QkMsDQotICAgIDB4OEEwMiwgMHgwQzE3LCAweDhBMDMsIDB4MUEwMSwgMHg4QTA3LCAweDNCMjAsIDB4OEEwOCwgMHgwNzJELA0KLSAgICAweDhBMEEsIDB4MEExQywgMHg4QTBDLCAweDFBMDQsIDB4OEEwRSwgMHgwQzdDLCAweDhBMEYsIDB4M0IyMSwNCi0gICAgMHg4QTEwLCAweDFBMDMsIDB4OEExMSwgMHg0OEVFLCAweDhBMTIsIDB4MjFBOCwgMHg4QTEzLCAweDA3MDcsDQotICAgIDB4OEExNCwgMHg0OEVGLCAweDhBMTUsIDB4M0IyMiwgMHg4QTE2LCAweDFBMDIsIDB4OEExNywgMHgwQjU3LA0KLSAgICAweDhBMTgsIDB4MDY0NywgMHg4QTFCLCAweDFBMDUsIDB4OEExRCwgMHgxQTA2LCAweDhBMUYsIDB4MDlDMSwNCi0gICAgMHg4QTIxLCAweDQ4RjEsIDB4OEEyMiwgMHgzQjIzLCAweDhBMjMsIDB4MDc0MywgMHg4QTI1LCAweDFBMDcsDQotICAgIDB4OEEyQSwgMHgwRTVBLCAweDhBMkQsIDB4MEE4MywgMHg4QTMxLCAweDA2OTAsIDB4OEEzMywgMHgwRjAxLA0KLSAgICAweDhBMzQsIDB4MEFDQywgMHg4QTM1LCAweDQ4RjIsIDB4OEEzNiwgMHgxQTA4LCAweDhBMzcsIDB4MjFBOSwNCi0gICAgMHg4QTNBLCAweDBBMEQsIDB4OEEzQiwgMHgwQkFFLCAweDhBM0MsIDB4MDlDMiwgMHg4QTNFLCAweDQ4RjMsDQotICAgIDB4OEE0MSwgMHgxQTA5LCAweDhBNDUsIDB4NDhGNCwgMHg4QTQ2LCAweDFBMEMsIDB4OEE0NywgMHg0MkUzLA0KLSAgICAweDhBNDgsIDB4MUEwRCwgMHg4QTQ5LCAweDRENTksIDB4OEE0RCwgMHg0OEY1LCAweDhBNEUsIDB4M0IyNCwNCi0gICAgMHg4QTUwLCAweDA4MkUsIDB4OEE1MSwgMHgwQjIyLCAweDhBNTIsIDB4MUEwQiwgMHg4QTU0LCAweDA5QzMsDQotICAgIDB4OEE1NSwgMHgwREIwLCAweDhBNTcsIDB4NEQ1QSwgMHg4QTU4LCAweDQ4RjYsIDB4OEE1QiwgMHgxQTBBLA0KLSAgICAweDhBNUQsIDB4NDJFNCwgMHg4QTVFLCAweDA4QkEsIDB4OEE2MCwgMHgwNEY1LCAweDhBNjEsIDB4NDJFNSwNCi0gICAgMHg4QTYyLCAweDFBMTEsIDB4OEE2MywgMHgwNzJFLCAweDhBNjYsIDB4MDhCQywgMHg4QTY3LCAweDRENUIsDQotICAgIDB4OEE2OSwgMHgwOEJCLCAweDhBNkIsIDB4MEZGMywgMHg4QTZDLCAweDFBMTAsIDB4OEE2RCwgMHgxQTBGLA0KLSAgICAweDhBNkUsIDB4MEFBOSwgMHg4QTcwLCAweDA2NjcsIDB4OEE3MSwgMHgwRkU5LCAweDhBNzIsIDB4MDU5OCwNCi0gICAgMHg4QTczLCAweDA5QzQsIDB4OEE3NSwgMHg0MkU2LCAweDhBNzksIDB4MjFBQSwgMHg4QTdDLCAweDFBMEUsDQotICAgIDB4OEE3RSwgMHg0RDVDLCAweDhBN0YsIDB4M0IyNSwgMHg4QTgyLCAweDFBMTMsIDB4OEE4NCwgMHgxQTE0LA0KLSAgICAweDhBODUsIDB4MUExMiwgMHg4QTg2LCAweDRENUQsIDB4OEE4NywgMHgwNzhDLCAweDhBODksIDB4MEYyQSwNCi0gICAgMHg4QThDLCAweDA4QkQsIDB4OEE4RCwgMHgwQ0RELCAweDhBOTAsIDB4NDhGOCwgMHg4QTkxLCAweDFBMTcsDQotICAgIDB4OEE5MywgMHgwQTY0LCAweDhBOTUsIDB4MEI4MCwgMHg4QTk2LCAweDRENUUsIDB4OEE5OCwgMHgwRjIwLA0KLSAgICAweDhBOUEsIDB4MUExQSwgMHg4QTlFLCAweDA3QTAsIDB4OEFBMCwgMHgwQTYzLCAweDhBQTEsIDB4MUExNiwNCi0gICAgMHg4QUEzLCAweDFBMUIsIDB4OEFBNCwgMHgwN0ExLCAweDhBQTUsIDB4MUExOCwgMHg4QUE2LCAweDFBMTksDQotICAgIDB4OEFBNywgMHgyMUFCLCAweDhBQTgsIDB4MUExNSwgMHg4QUFBLCAweDM2MzgsIDB4OEFBQywgMHgwQTg2LA0KLSAgICAweDhBQUQsIDB4MENBMSwgMHg4QUFFLCAweDQ4RjcsIDB4OEFCMCwgMHgwQjZELCAweDhBQjIsIDB4MDU1RCwNCi0gICAgMHg4QUI2LCAweDRENUYsIDB4OEFCNywgMHg0OEY5LCAweDhBQjksIDB4MEQ4NCwgMHg4QUJDLCAweDA2NUQsDQotICAgIDB4OEFCRSwgMHgyMUFDLCAweDhBQkYsIDB4MEJEMCwgMHg4QUMyLCAweDFBMUUsIDB4OEFDNCwgMHgxQTFDLA0KLSAgICAweDhBQzcsIDB4MEI4QSwgMHg4QUM5LCAweDRENjAsIDB4OEFDQiwgMHgwQTY1LCAweDhBQ0MsIDB4MDYwRSwNCi0gICAgMHg4QUNELCAweDFBMUQsIDB4OEFDRiwgMHgwQTIxLCAweDhBRDAsIDB4NDJFNywgMHg4QUQxLCAweDRENjEsDQotICAgIDB4OEFEMiwgMHgwRjkyLCAweDhBRDYsIDB4MEZFNiwgMHg4QUQ3LCAweDQ4RkEsIDB4OEFEQSwgMHgxQTFGLA0KLSAgICAweDhBREIsIDB4MUEyQSwgMHg4QURDLCAweDBCRDEsIDB4OEFERCwgMHg0RDYyLCAweDhBREUsIDB4MUEyOSwNCi0gICAgMHg4QURGLCAweDIxQUQsIDB4OEFFMCwgMHgxQTI2LCAweDhBRTEsIDB4MUEyRSwgMHg4QUUyLCAweDFBMjcsDQotICAgIDB4OEFFNCwgMHgxQTIzLCAweDhBRTYsIDB4MEMxOCwgMHg4QUU3LCAweDFBMjIsIDB4OEFFQiwgMHgxQTIwLA0KLSAgICAweDhBRUMsIDB4NEQ2MywgMHg4QUVELCAweDBGMEIsIDB4OEFFRSwgMHgwOEJFLCAweDhBRjEsIDB4MUEyNCwNCi0gICAgMHg4QUYzLCAweDFBMjEsIDB4OEFGNCwgMHgzQjI2LCAweDhBRjUsIDB4NEQ2NCwgMHg4QUY2LCAweDIxQUYsDQotICAgIDB4OEFGNywgMHgxQTI4LCAweDhBRjgsIDB4MDk3RSwgMHg4QUZBLCAweDA3NzUsIDB4OEFGQywgMHg0OEZCLA0KLSAgICAweDhBRkUsIDB4MEI1QSwgMHg4QjAwLCAweDBFNzMsIDB4OEIwMSwgMHgwNEZDLCAweDhCMDIsIDB4MDRBNiwNCi0gICAgMHg4QjA0LCAweDBDN0QsIDB4OEIwNSwgMHg0OEZFLCAweDhCMDYsIDB4NEQ2NSwgMHg4QjA3LCAweDFBMkMsDQotICAgIDB4OEIwQSwgMHg0OEZELCAweDhCMEMsIDB4MUEyQiwgMHg4QjBELCAweDQ4RkYsIDB4OEIwRSwgMHgwQ0JFLA0KLSAgICAweDhCMEYsIDB4NEQ2NiwgMHg4QjEwLCAweDFBMzAsIDB4OEIxMSwgMHg0RDY3LCAweDhCMTQsIDB4MUEyNSwNCi0gICAgMHg4QjE2LCAweDFBMkYsIDB4OEIxNywgMHgxQTMxLCAweDhCMTksIDB4MDc2MCwgMHg4QjFBLCAweDFBMkQsDQotICAgIDB4OEIxQiwgMHgwN0U4LCAweDhCMUMsIDB4NDkwMCwgMHg4QjFELCAweDA5MDEsIDB4OEIxRiwgMHgzQjI3LA0KLSAgICAweDhCMjAsIDB4MUEzMiwgMHg4QjIxLCAweDBGNDIsIDB4OEIyNiwgMHgxQTM1LCAweDhCMjgsIDB4MUEzOCwNCi0gICAgMHg4QjJCLCAweDFBMzYsIDB4OEIyQywgMHgwREE3LCAweDhCMkQsIDB4NDkwMSwgMHg4QjMzLCAweDFBMzMsDQotICAgIDB4OEIzNywgMHgzQjI4LCAweDhCMzksIDB4MDZEOCwgMHg4QjNFLCAweDFBMzcsIDB4OEI0MSwgMHgxQTM5LA0KLSAgICAweDhCNDMsIDB4M0IyOSwgMHg4QjQ0LCAweDNCMkEsIDB4OEI0NSwgMHg0RDY4LCAweDhCNDYsIDB4NDJFOCwNCi0gICAgMHg4QjQ5LCAweDFBM0QsIDB4OEI0QywgMHgxQTNBLCAweDhCNEUsIDB4MUEzQywgMHg4QjRGLCAweDFBM0IsDQotICAgIDB4OEI1MSwgMHg0OTAzLCAweDhCNTIsIDB4NEQ2OSwgMHg4QjUzLCAweDIxQjAsIDB4OEI1NCwgMHgzQjJCLA0KLSAgICAweDhCNTYsIDB4MUEzRSwgMHg4QjU4LCAweDA4REQsIDB4OEI1OSwgMHg0MkU5LCAweDhCNUEsIDB4MUE0MCwNCi0gICAgMHg4QjVCLCAweDFBM0YsIDB4OEI1QywgMHgwRERBLCAweDhCNUUsIDB4NDkwNCwgMHg4QjVGLCAweDFBNDIsDQotICAgIDB4OEI2NiwgMHgwNzJGLCAweDhCNjksIDB4NDJFQSwgMHg4QjZCLCAweDFBNDEsIDB4OEI2QywgMHgxQTQzLA0KLSAgICAweDhCNkQsIDB4NEQ2QSwgMHg4QjZGLCAweDFBNDQsIDB4OEI3MCwgMHgwNjVFLCAweDhCNzEsIDB4MTgyRSwNCi0gICAgMHg4QjcyLCAweDA5RTEsIDB4OEI3NCwgMHgxQTQ1LCAweDhCNzYsIDB4NDkwNSwgMHg4Qjc3LCAweDA3QTIsDQotICAgIDB4OEI3OCwgMHg0RDZCLCAweDhCN0MsIDB4NEQ2QywgMHg4QjdELCAweDFBNDYsIDB4OEI3RSwgMHg0RDZELA0KLSAgICAweDhCN0YsIDB4MjFCMSwgMHg4QjgwLCAweDFBNDcsIDB4OEI4MSwgMHg0OTA2LCAweDhCODMsIDB4MDg4QywNCi0gICAgMHg4Qjg1LCAweDRENkUsIDB4OEI4QSwgMHgxM0QzLCAweDhCOEIsIDB4NDkwNywgMHg4QjhDLCAweDFBNDgsDQotICAgIDB4OEI4RSwgMHgxQTQ5LCAweDhCOTAsIDB4MDkzQywgMHg4QjkyLCAweDFBNEEsIDB4OEI5MywgMHgxQTRCLA0KLSAgICAweDhCOTQsIDB4NDkwOCwgMHg4Qjk1LCAweDQ5MDksIDB4OEI5NiwgMHgxQTRDLCAweDhCOTksIDB4MUE0RCwNCi0gICAgMHg4QjlBLCAweDFBNEUsIDB4OEI5QywgMHgzQjJDLCAweDhCOUQsIDB4NDJFQiwgMHg4QjlFLCAweDNCMkQsDQotICAgIDB4OEI5RiwgMHg0RDZGLCAweDhDMzcsIDB4MEI2OSwgMHg4QzM5LCAweDQ5MEEsIDB4OEMzQSwgMHgxQTRGLA0KLSAgICAweDhDM0QsIDB4NDkwQywgMHg4QzNGLCAweDFBNTEsIDB4OEM0MSwgMHgxQTUwLCAweDhDNDUsIDB4NDkwRiwNCi0gICAgMHg4QzQ2LCAweDBDN0UsIDB4OEM0NywgMHgzQjJFLCAweDhDNDgsIDB4MUE1MiwgMHg4QzQ5LCAweDQyRUMsDQotICAgIDB4OEM0QSwgMHgwRTVCLCAweDhDNEIsIDB4NEQ3MCwgMHg4QzRDLCAweDFBNTMsIDB4OEM0RSwgMHgxQTU0LA0KLSAgICAweDhDNEYsIDB4NDkxMCwgMHg4QzUwLCAweDFBNTUsIDB4OEM1MywgMHg0RDcxLCAweDhDNTQsIDB4M0IyRiwNCi0gICAgMHg4QzU1LCAweDFBNTYsIDB4OEM1NywgMHg0OTExLCAweDhDNUEsIDB4MENCMiwgMHg4QzYxLCAweDA5QzUsDQotICAgIDB4OEM2MiwgMHgxQTU3LCAweDhDNjgsIDB4NDJFRCwgMHg4QzY5LCAweDQ5MTIsIDB4OEM2QSwgMHgwN0ZELA0KLSAgICAweDhDNkIsIDB4MTAwNywgMHg4QzZDLCAweDFBNTgsIDB4OEM2RCwgMHg0OTEzLCAweDhDNzMsIDB4M0IzMCwNCi0gICAgMHg4Qzc4LCAweDFBNTksIDB4OEM3OSwgMHgwREIxLCAweDhDN0EsIDB4MUE1QSwgMHg4QzdCLCAweDRENzIsDQotICAgIDB4OEM3QywgMHgxQTYyLCAweDhDODIsIDB4MUE1QiwgMHg4Qzg1LCAweDFBNUQsIDB4OEM4OSwgMHgxQTVDLA0KLSAgICAweDhDOEEsIDB4MUE1RSwgMHg4QzhDLCAweDBFNzQsIDB4OEM4RCwgMHgxQTVGLCAweDhDOEUsIDB4MUE2MCwNCi0gICAgMHg4QzkyLCAweDQ5MTYsIDB4OEM5MywgMHg0OTE1LCAweDhDOTQsIDB4MUE2MSwgMHg4Qzk4LCAweDFBNjMsDQotICAgIDB4OEM5OSwgMHg0OTE3LCAweDhDOUIsIDB4NDkxOSwgMHg4QzlELCAweDA1OEIsIDB4OEM5RSwgMHgwQzAzLA0KLSAgICAweDhDOUYsIDB4MzU0QywgMHg4Q0EwLCAweDBEREIsIDB4OENBMSwgMHgwODUyLCAweDhDQTIsIDB4MDdFOSwNCi0gICAgMHg4Q0E0LCAweDNCMzEsIDB4OENBNywgMHgwREMxLCAweDhDQTgsIDB4MDU1RiwgMHg4Q0E5LCAweDBENjIsDQotICAgIDB4OENBQSwgMHgxQTY2LCAweDhDQUIsIDB4MDYwRiwgMHg4Q0FDLCAweDBBNzksIDB4OENBRCwgMHgxQTY1LA0KLSAgICAweDhDQUUsIDB4MUE2QSwgMHg4Q0FGLCAweDBCQjcsIDB4OENCMCwgMHgwRUVGLCAweDhDQjIsIDB4MUE2OCwNCi0gICAgMHg4Q0IzLCAweDFBNjksIDB4OENCNCwgMHgwNjQ4LCAweDhDQjYsIDB4MUE2QiwgMHg4Q0I3LCAweDBEMTksDQotICAgIDB4OENCOCwgMHgwQjNGLCAweDhDQkEsIDB4NEQ3MywgMHg4Q0JCLCAweDBEODUsIDB4OENCQywgMHgwQzM3LA0KLSAgICAweDhDQkQsIDB4MUE2NywgMHg4Q0JGLCAweDBFNzUsIDB4OENDMCwgMHgwNTZDLCAweDhDQzEsIDB4MUE2RCwNCi0gICAgMHg4Q0MyLCAweDBGQ0UsIDB4OENDMywgMHgwQkRFLCAweDhDQzQsIDB4MEZFQiwgMHg4Q0M1LCAweDRENzQsDQotICAgIDB4OENDNywgMHgwOEJGLCAweDhDQzgsIDB4MUE2QywgMHg4Q0M5LCAweDRENzUsIDB4OENDQSwgMHgwQjExLA0KLSAgICAweDhDQ0QsIDB4MUE3RCwgMHg4Q0NFLCAweDBBQUEsIDB4OENEMSwgMHgwQ0QwLCAweDhDRDIsIDB4NEQ3NiwNCi0gICAgMHg4Q0QzLCAweDBEQzIsIDB4OENENSwgMHg0OTFCLCAweDhDRDYsIDB4NDkxQSwgMHg4Q0Q5LCAweDNCMzIsDQotICAgIDB4OENEQSwgMHgxQTcwLCAweDhDREIsIDB4MDg4RCwgMHg4Q0RDLCAweDA4QzAsIDB4OENERSwgMHgwOUM2LA0KLSAgICAweDhDRTAsIDB4MEQxQiwgMHg4Q0UxLCAweDNCMzMsIDB4OENFMiwgMHgwNzYxLCAweDhDRTMsIDB4MUE2RiwNCi0gICAgMHg4Q0U0LCAweDFBNkUsIDB4OENFNiwgMHgwRERDLCAweDhDRUEsIDB4MDhFRCwgMHg4Q0VDLCAweDRENzcsDQotICAgIDB4OENFRCwgMHgwQzRDLCAweDhDRjAsIDB4MjFCMiwgMHg4Q0YxLCAweDQ5MUQsIDB4OENGNCwgMHgyMUIzLA0KLSAgICAweDhDRjUsIDB4NEQ3OCwgMHg4Q0Y3LCAweDRENzksIDB4OENGOCwgMHgzQjM0LCAweDhDRkEsIDB4MUE3MiwNCi0gICAgMHg4Q0ZCLCAweDFBNzMsIDB4OENGQywgMHgwN0VBLCAweDhDRkQsIDB4MUE3MSwgMHg4Q0ZFLCAweDNCMzUsDQotICAgIDB4OEQwMSwgMHg0RDdBLCAweDhEMDMsIDB4NEQ3QiwgMHg4RDA0LCAweDFBNzQsIDB4OEQwNSwgMHgxQTc1LA0KLSAgICAweDhEMDcsIDB4MUE3NywgMHg4RDA4LCAweDBCMDMsIDB4OEQwOSwgMHg0OTFGLCAweDhEMEEsIDB4MUE3NiwNCi0gICAgMHg4RDBCLCAweDA2MjIsIDB4OEQwRCwgMHgxQTc5LCAweDhEMEUsIDB4NDkyMCwgMHg4RDBGLCAweDFBNzgsDQotICAgIDB4OEQxMCwgMHgxQTdBLCAweDhEMTIsIDB4MjFCNCwgMHg4RDEzLCAweDFBN0MsIDB4OEQxNCwgMHgxQTdFLA0KLSAgICAweDhEMTYsIDB4MUE3RiwgMHg4RDE3LCAweDREN0MsIDB4OEQxQiwgMHgzQjM2LCAweDhEMUMsIDB4NEQ3RCwNCi0gICAgMHg4RDY0LCAweDBBN0EsIDB4OEQ2NiwgMHgwOEZCLCAweDhENjcsIDB4MUE4MCwgMHg4RDY5LCAweDNCMzcsDQotICAgIDB4OEQ2QiwgMHgwNUIwLCAweDhENkMsIDB4M0IzOCwgMHg4RDZELCAweDFBODEsIDB4OEQ2RSwgMHg0RDdFLA0KLSAgICAweDhENzAsIDB4MEFGOCwgMHg4RDcxLCAweDFBODIsIDB4OEQ3MywgMHgxQTgzLCAweDhENzQsIDB4MERERCwNCi0gICAgMHg4RDc2LCAweDIxQjUsIDB4OEQ3NywgMHgwNjQ5LCAweDhEODEsIDB4MUE4NCwgMHg4RDg0LCAweDNCMzksDQotICAgIDB4OEQ4NSwgMHgwQkQyLCAweDhEOEEsIDB4MDRGRCwgMHg4RDhELCAweDNCM0EsIDB4OEQ5MSwgMHg0RDdGLA0KLSAgICAweDhEOTUsIDB4M0IzQiwgMHg4RDk5LCAweDFBODUsIDB4OEQ5RiwgMHg0RDgwLCAweDhEQTMsIDB4MDkxRCwNCi0gICAgMHg4REE2LCAweDNCM0MsIDB4OERBOCwgMHgwQTNDLCAweDhEQUIsIDB4NEQ4MSwgMHg4REFGLCAweDQyRUUsDQotICAgIDB4OERCMiwgMHg0RDgyLCAweDhEQjMsIDB4MEIwRCwgMHg4REJBLCAweDFBODgsIDB4OERCRSwgMHgxQTg3LA0KLSAgICAweDhEQzIsIDB4MUE4NiwgMHg4REM2LCAweDNCM0QsIDB4OERDOCwgMHg0OTIxLCAweDhEQ0IsIDB4MUE4RSwNCi0gICAgMHg4RENDLCAweDFBOEMsIDB4OERDRSwgMHgzQjNFLCAweDhEQ0YsIDB4MUE4OSwgMHg4REQxLCAweDQyRUYsDQotICAgIDB4OERENSwgMHg0RDgzLCAweDhERDYsIDB4MUE4QiwgMHg4REQ3LCAweDQyRjAsIDB4OEREOSwgMHg0OTIyLA0KLSAgICAweDhEREEsIDB4MUE4QSwgMHg4RERCLCAweDFBOEQsIDB4OERERCwgMHgwNjkxLCAweDhEREYsIDB4MUE5MSwNCi0gICAgMHg4REUxLCAweDBBN0IsIDB4OERFMywgMHgxQTkyLCAweDhERTQsIDB4M0IzRiwgMHg4REU3LCAweDREODQsDQotICAgIDB4OERFOCwgMHgwNzhELCAweDhERUEsIDB4MUE4RiwgMHg4REVCLCAweDFBOTAsIDB4OERFQywgMHgzQjQwLA0KLSAgICAweDhERUYsIDB4MEZDRiwgMHg4REYxLCAweDREODUsIDB4OERGMiwgMHg0RDg2LCAweDhERjMsIDB4MEJEMywNCi0gICAgMHg4REY0LCAweDREODcsIDB4OERGNSwgMHgwQUFCLCAweDhERkMsIDB4MUE5MywgMHg4REZELCAweDQ5MjUsDQotICAgIDB4OERGRiwgMHgxQTk2LCAweDhFMDEsIDB4NEQ4OCwgMHg4RTA2LCAweDQ5MjYsIDB4OEUwOCwgMHgxQTk0LA0KLSAgICAweDhFMDksIDB4MUE5NSwgMHg4RTBBLCAweDBGNDMsIDB4OEUwQiwgMHg0RDg5LCAweDhFMEMsIDB4NDkyMywNCi0gICAgMHg4RTBGLCAweDBDN0YsIDB4OEUxMCwgMHgxQTk5LCAweDhFMTQsIDB4NDkyOCwgMHg4RTE2LCAweDQ5MjksDQotICAgIDB4OEUxRCwgMHgxQTk3LCAweDhFMUUsIDB4MUE5OCwgMHg4RTFGLCAweDFBOUEsIDB4OEUyMCwgMHgzQjQxLA0KLSAgICAweDhFMjEsIDB4NDkyQSwgMHg4RTIyLCAweDQ5MkIsIDB4OEUyMywgMHg0MkYxLCAweDhFMjYsIDB4NEQ4QSwNCi0gICAgMHg4RTI3LCAweDQ5MkMsIDB4OEUyQSwgMHgxQUE4LCAweDhFMzAsIDB4MUE5RCwgMHg4RTMxLCAweDREOEIsDQotICAgIDB4OEUzNCwgMHgxQTlFLCAweDhFMzUsIDB4MUE5QywgMHg4RTM2LCAweDQ5MkYsIDB4OEUzOSwgMHg0OTMwLA0KLSAgICAweDhFM0QsIDB4NDJGMiwgMHg4RTQwLCAweDREOEMsIDB4OEU0MSwgMHg0RDhELCAweDhFNDIsIDB4MUE5QiwNCi0gICAgMHg4RTQ0LCAweDBDMTksIDB4OEU0NywgMHgxQUEwLCAweDhFNDgsIDB4MUFBNCwgMHg4RTQ5LCAweDFBQTEsDQotICAgIDB4OEU0QSwgMHgxQTlGLCAweDhFNEIsIDB4M0I0MiwgMHg4RTRDLCAweDFBQTIsIDB4OEU0RCwgMHg0RDhFLA0KLSAgICAweDhFNEYsIDB4NEQ4RiwgMHg4RTUwLCAweDFBQTMsIDB4OEU1NCwgMHg0OTMxLCAweDhFNTUsIDB4MUFBQSwNCi0gICAgMHg4RTU5LCAweDFBQTUsIDB4OEU1QywgMHg0RDkwLCAweDhFNUYsIDB4MEE3QywgMHg4RTYwLCAweDFBQTcsDQotICAgIDB4OEU2MSwgMHg0RDkxLCAweDhFNjIsIDB4NDkzMiwgMHg4RTYzLCAweDFBQTksIDB4OEU2NCwgMHgxQUE2LA0KLSAgICAweDhFNjksIDB4NEQ5MiwgMHg4RTZDLCAweDNCNDMsIDB4OEU2RCwgMHg0OTMzLCAweDhFNkYsIDB4NDkzNCwNCi0gICAgMHg4RTcwLCAweDNCNDQsIDB4OEU3MSwgMHg0RDkzLCAweDhFNzIsIDB4MUFBQywgMHg4RTc0LCAweDA5M0QsDQotICAgIDB4OEU3NSwgMHg0RDk0LCAweDhFNzYsIDB4MUFBQiwgMHg4RTc3LCAweDREOTUsIDB4OEU3QSwgMHgzQjQ1LA0KLSAgICAweDhFN0IsIDB4NDJGMywgMHg4RTdDLCAweDFBQUQsIDB4OEU4MSwgMHgxQUFFLCAweDhFODQsIDB4MUFCMSwNCi0gICAgMHg4RTg1LCAweDFBQjAsIDB4OEU4NywgMHgxQUFGLCAweDhFODksIDB4NEQ5NiwgMHg4RThBLCAweDFBQjMsDQotICAgIDB4OEU4QiwgMHgxQUIyLCAweDhFOEQsIDB4MEYwMiwgMHg4RTkwLCAweDREOTcsIDB4OEU5MSwgMHgxQUI1LA0KLSAgICAweDhFOTIsIDB4M0I0NiwgMHg4RTkzLCAweDFBQjQsIDB4OEU5NCwgMHgxQUI2LCAweDhFOTUsIDB4NEQ5OCwNCi0gICAgMHg4RTk4LCAweDQ5MzUsIDB4OEU5OSwgMHgxQUI3LCAweDhFOUEsIDB4NEQ5OSwgMHg4RTlFLCAweDQ5MzYsDQotICAgIDB4OEVBMSwgMHgxQUI5LCAweDhFQTcsIDB4NEQ5QSwgMHg4RUE5LCAweDREOUIsIDB4OEVBQSwgMHgxQUI4LA0KLSAgICAweDhFQUIsIDB4MEEwRSwgMHg4RUFDLCAweDFBQkEsIDB4OEVBRCwgMHg0RDlDLCAweDhFQUUsIDB4M0I0NywNCi0gICAgMHg4RUFGLCAweDA2RTUsIDB4OEVCMCwgMHgxQUJCLCAweDhFQjEsIDB4MUFCRCwgMHg4RUIzLCAweDNCNDgsDQotICAgIDB4OEVCNSwgMHg0OTM3LCAweDhFQjYsIDB4MzcwMywgMHg4RUJCLCAweDQ5MzgsIDB4OEVCRSwgMHgxQUJFLA0KLSAgICAweDhFQzAsIDB4MURFRiwgMHg4RUM1LCAweDFBQkYsIDB4OEVDNiwgMHgxQUJDLCAweDhFQzgsIDB4MUFDMCwNCi0gICAgMHg4RUNBLCAweDA5MDIsIDB4OEVDQiwgMHgxQUMxLCAweDhFQ0MsIDB4MDY0QSwgMHg4RUNELCAweDA3MDksDQotICAgIDB4OEVDRiwgMHgyMUI3LCAweDhFRDEsIDB4M0I0OSwgMHg4RUQyLCAweDA3NjIsIDB4OEVENCwgMHgzQjRBLA0KLSAgICAweDhFREIsIDB4MUFDMiwgMHg4RURGLCAweDBDQzgsIDB4OEVFMiwgMHgwQzM4LCAweDhFRTMsIDB4MUFDMywNCi0gICAgMHg4RUU4LCAweDREOUQsIDB4OEVFQiwgMHgxQUM2LCAweDhFRjAsIDB4NEQ5RSwgMHg4RUY4LCAweDA4RTAsDQotICAgIDB4OEVGOSwgMHgzQjRCLCAweDhFRkEsIDB4NDJGNiwgMHg4RUZCLCAweDFBQzUsIDB4OEVGQywgMHgxQUM0LA0KLSAgICAweDhFRkQsIDB4MDczMCwgMHg4RUZFLCAweDFBQzcsIDB4OEYwMCwgMHg0OTNDLCAweDhGMDMsIDB4MDVCMSwNCi0gICAgMHg4RjA1LCAweDFBQzksIDB4OEYwNywgMHg0RDlGLCAweDhGMDgsIDB4NDkzRCwgMHg4RjA5LCAweDA4NEMsDQotICAgIDB4OEYwQSwgMHgxQUM4LCAweDhGMEMsIDB4MUFEMSwgMHg4RjEyLCAweDFBQ0IsIDB4OEYxMywgMHgxQUNELA0KLSAgICAweDhGMTQsIDB4MEUzNSwgMHg4RjE1LCAweDFBQ0EsIDB4OEYxNywgMHgzQjRDLCAweDhGMTgsIDB4NERBMCwNCi0gICAgMHg4RjE5LCAweDFBQ0MsIDB4OEYxQiwgMHgxQUQwLCAweDhGMUMsIDB4MUFDRSwgMHg4RjFELCAweDA2NEIsDQotICAgIDB4OEYxRSwgMHg0MkY3LCAweDhGMUYsIDB4MUFDRiwgMHg4RjI1LCAweDREQTEsIDB4OEYyNiwgMHgxQUQyLA0KLSAgICAweDhGMjcsIDB4NERBMiwgMHg4RjI5LCAweDBEMTAsIDB4OEYyQSwgMHgwRkEwLCAweDhGMkIsIDB4NDkzRSwNCi0gICAgMHg4RjJDLCAweDREQTMsIDB4OEYyRCwgMHg0MkY4LCAweDhGMkYsIDB4MDkzRSwgMHg4RjMzLCAweDFBRDMsDQotICAgIDB4OEYzNSwgMHg0REE0LCAweDhGMzYsIDB4M0I0RCwgMHg4RjM4LCAweDBGMEMsIDB4OEYzOSwgMHgxQUQ1LA0KLSAgICAweDhGM0EsIDB4NERBNSwgMHg4RjNCLCAweDFBRDQsIDB4OEYzRSwgMHgxQUQ4LCAweDhGM0YsIDB4MEYyQiwNCi0gICAgMHg4RjQwLCAweDQ5M0YsIDB4OEY0MiwgMHgxQUQ3LCAweDhGNDMsIDB4NERBNiwgMHg4RjQ0LCAweDA1Q0IsDQotICAgIDB4OEY0NSwgMHgxQUQ2LCAweDhGNDYsIDB4MUFEQiwgMHg4RjQ3LCAweDREQTcsIDB4OEY0OSwgMHgxQURBLA0KLSAgICAweDhGNEEsIDB4NDk0MCwgMHg4RjRDLCAweDFBRDksIDB4OEY0RCwgMHgwQzJDLCAweDhGNEUsIDB4MUFEQywNCi0gICAgMHg4RjUxLCAweDREQTgsIDB4OEY1NCwgMHg0MkY5LCAweDhGNTUsIDB4NERBOSwgMHg4RjU3LCAweDFBREQsDQotICAgIDB4OEY1OCwgMHg0OTQxLCAweDhGNUMsIDB4MUFERSwgMHg4RjVGLCAweDA3RkUsIDB4OEY2MSwgMHgwNkZCLA0KLSAgICAweDhGNjIsIDB4MUFERiwgMHg4RjYzLCAweDFBRTAsIDB4OEY2NCwgMHgxQUUxLCAweDhGOUIsIDB4MEEwRiwNCi0gICAgMHg4RjlDLCAweDFBRTIsIDB4OEY5RSwgMHgwOEQ5LCAweDhGOUYsIDB4MUFFMywgMHg4RkEwLCAweDREQUEsDQotICAgIDB4OEZBMSwgMHg0REFCLCAweDhGQTIsIDB4NERBQywgMHg4RkEzLCAweDFBRTQsIDB4OEZBNCwgMHg0OTQzLA0KLSAgICAweDhGQTUsIDB4NERBRCwgMHg4RkE2LCAweDNCNEUsIDB4OEZBNywgMHgxMEI2LCAweDhGQTgsIDB4MTBCNSwNCi0gICAgMHg4RkFELCAweDFBRTUsIDB4OEZBRSwgMHgxN0ZGLCAweDhGQUYsIDB4MUFFNiwgMHg4RkIwLCAweDBCNjIsDQotICAgIDB4OEZCMSwgMHgwOUYxLCAweDhGQjIsIDB4MENGNiwgMHg4RkI0LCAweDQ5NDQsIDB4OEZCNSwgMHgzQjRGLA0KLSAgICAweDhGQjYsIDB4M0I1MCwgMHg4RkI3LCAweDFBRTcsIDB4OEZCQSwgMHgwRTI1LCAweDhGQkIsIDB4MEJGMCwNCi0gICAgMHg4RkJDLCAweDA4MTAsIDB4OEZCRiwgMHgwQjY3LCAweDhGQzEsIDB4NDk0NiwgMHg4RkMyLCAweDA0Q0MsDQotICAgIDB4OEZDNCwgMHgwRUE2LCAweDhGQzUsIDB4MEExRCwgMHg4RkM2LCAweDQ5NDcsIDB4OEZDOCwgMHgzNzk5LA0KLSAgICAweDhGQ0EsIDB4NDk0OSwgMHg4RkNELCAweDQ5NEEsIDB4OEZDRSwgMHgwNzM0LCAweDhGRDEsIDB4MDZEOSwNCi0gICAgMHg4RkQzLCAweDQ5NEIsIDB4OEZENCwgMHgwRTI2LCAweDhGRDUsIDB4NDk0QywgMHg4RkRBLCAweDFBRTgsDQotICAgIDB4OEZFMCwgMHgzQjUyLCAweDhGRTIsIDB4MUFFQSwgMHg4RkU0LCAweDNCNTMsIDB4OEZFNSwgMHgxQUU5LA0KLSAgICAweDhGRTYsIDB4MDU2MCwgMHg4RkU4LCAweDQyRkIsIDB4OEZFOSwgMHgwQ0NFLCAweDhGRUEsIDB4MUFFQiwNCi0gICAgMHg4RkVCLCAweDBEMkQsIDB4OEZFRCwgMHgwQzJELCAweDhGRUUsIDB4NDJGQywgMHg4RkVGLCAweDFBRUMsDQotICAgIDB4OEZGMCwgMHgwOTVDLCAweDhGRjEsIDB4NDk0RCwgMHg4RkY0LCAweDFBRUUsIDB4OEZGNSwgMHg0OTRFLA0KLSAgICAweDhGRjYsIDB4M0I1NCwgMHg4RkY3LCAweDBFQ0UsIDB4OEZGOCwgMHgxQUZELCAweDhGRjksIDB4MUFGMCwNCi0gICAgMHg4RkZBLCAweDFBRjEsIDB4OEZGQiwgMHg0OTRGLCAweDhGRkQsIDB4MEJFNSwgMHg5MDAwLCAweDBCNDAsDQotICAgIDB4OTAwMSwgMHgwQUY5LCAweDkwMDIsIDB4M0I1NSwgMHg5MDAzLCAweDBDODAsIDB4OTAwNCwgMHg0REFFLA0KLSAgICAweDkwMDUsIDB4MUFFRiwgMHg5MDA2LCAweDA2NkYsIDB4OTAwOCwgMHg0MkZELCAweDkwMEIsIDB4MUFGOCwNCi0gICAgMHg5MDBDLCAweDQ5NTAsIDB4OTAwRCwgMHgxQUY1LCAweDkwMEUsIDB4MUIwMiwgMHg5MDBGLCAweDBDODEsDQotICAgIDB4OTAxMCwgMHgwQjlFLCAweDkwMTEsIDB4MUFGMiwgMHg5MDEzLCAweDBDMUEsIDB4OTAxNCwgMHgwQzRELA0KLSAgICAweDkwMTUsIDB4MUFGMywgMHg5MDE2LCAweDFBRjcsIDB4OTAxNywgMHgwQTI2LCAweDkwMTksIDB4MEQxRCwNCi0gICAgMHg5MDFBLCAweDBCRTgsIDB4OTAxQiwgMHg0REFGLCAweDkwMUQsIDB4MEE2NiwgMHg5MDFFLCAweDFBRjYsDQotICAgIDB4OTAxRiwgMHgwQjBFLCAweDkwMjAsIDB4MEIwNCwgMHg5MDIxLCAweDFBRjQsIDB4OTAyMiwgMHgwNDZELA0KLSAgICAweDkwMjMsIDB4MEZDOCwgMHg5MDI3LCAweDFBRjksIDB4OTAyQywgMHgzQjU2LCAweDkwMkQsIDB4NDJGRSwNCi0gICAgMHg5MDJFLCAweDBCNDEsIDB4OTAyRiwgMHg0REIwLCAweDkwMzEsIDB4MDkzRiwgMHg5MDMyLCAweDBBMTAsDQotICAgIDB4OTAzNSwgMHgxQUZCLCAweDkwMzYsIDB4MUFGQSwgMHg5MDM3LCAweDQ5NTEsIDB4OTAzOCwgMHgwNEIzLA0KLSAgICAweDkwMzksIDB4MUFGQywgMHg5MDNDLCAweDBEQTEsIDB4OTAzRSwgMHgxQjA0LCAweDkwNDEsIDB4MENCMywNCi0gICAgMHg5MDQyLCAweDBBMzEsIDB4OTA0MywgMHg0OTUzLCAweDkwNDQsIDB4M0I1NywgMHg5MDQ1LCAweDBCOTcsDQotICAgIDB4OTA0NywgMHgwNkYwLCAweDkwNDksIDB4MUIwMywgMHg5MDRBLCAweDBGMjEsIDB4OTA0QiwgMHgwNEUxLA0KLSAgICAweDkwNEMsIDB4NERCMSwgMHg5MDRELCAweDBFMjcsIDB4OTA0RSwgMHgwNTYxLCAweDkwNEYsIDB4MUFGRSwNCi0gICAgMHg5MDUwLCAweDFBRkYsIDB4OTA1MSwgMHgxQjAwLCAweDkwNTIsIDB4MUIwMSwgMHg5MDUzLCAweDBDOTMsDQotICAgIDB4OTA1NCwgMHgwQjYxLCAweDkwNTUsIDB4MDRBNywgMHg5MDU2LCAweDFCMDUsIDB4OTA1OCwgMHgxQjA2LA0KLSAgICAweDkwNTksIDB4MUQzNCwgMHg5MDVCLCAweDREQjIsIDB4OTA1QywgMHgwQjFELCAweDkwNUQsIDB4NDk1NCwNCi0gICAgMHg5MDVFLCAweDFCMDcsIDB4OTA2MCwgMHgwNTE1LCAweDkwNjEsIDB4MEFDRSwgMHg5MDYzLCAweDA3NjMsDQotICAgIDB4OTA2NSwgMHgwRjQ0LCAweDkwNjcsIDB4MjFCQSwgMHg5MDY4LCAweDFCMDgsIDB4OTA2OSwgMHgwQzI2LA0KLSAgICAweDkwNkQsIDB4MEFGQSwgMHg5MDZFLCAweDA5MDMsIDB4OTA2RiwgMHgxQjA5LCAweDkwNzAsIDB4NERCMywNCi0gICAgMHg5MDcyLCAweDFCMEMsIDB4OTA3NCwgMHg0REI0LCAweDkwNzUsIDB4MDk2RiwgMHg5MDc2LCAweDFCMEEsDQotICAgIDB4OTA3NywgMHgwQUFELCAweDkwNzgsIDB4MEFBQywgMHg5MDc5LCAweDREQjUsIDB4OTA3QSwgMHgwNEE4LA0KLSAgICAweDkwN0MsIDB4MEY5MywgMHg5MDdELCAweDFCMEUsIDB4OTA3RiwgMHgwRDg2LCAweDkwODAsIDB4MUIxMCwNCi0gICAgMHg5MDgxLCAweDFCMEYsIDB4OTA4MiwgMHgxQjBELCAweDkwODMsIDB4MTczNywgMHg5MDg0LCAweDA2MTAsDQotICAgIDB4OTA4NSwgMHg0OTU3LCAweDkwODcsIDB4MUFFRCwgMHg5MDg4LCAweDNCNTgsIDB4OTA4OSwgMHgxQjEyLA0KLSAgICAweDkwOEEsIDB4MUIxMSwgMHg5MDhCLCAweDREQjYsIDB4OTA4QywgMHg0OTU4LCAweDkwOEYsIDB4MUIxMywNCi0gICAgMHg5MDkwLCAweDQ5NTksIDB4OTA5MSwgMHgwRjIyLCAweDkwOTUsIDB4M0I1OSwgMHg5MDk3LCAweDQyRkYsDQotICAgIDB4OTA5OCwgMHg0REI3LCAweDkwOTksIDB4M0I1QSwgMHg5MDlCLCAweDNCNUIsIDB4OTBBMCwgMHg0REI4LA0KLSAgICAweDkwQTEsIDB4NDk1QSwgMHg5MEEyLCAweDNCNUMsIDB4OTBBMywgMHgwQ0I5LCAweDkwQTYsIDB4MEU1QywNCi0gICAgMHg5MEE4LCAweDFCMTQsIDB4OTBBQSwgMHgwOTA1LCAweDkwQUYsIDB4MUIxNSwgMHg5MEIwLCAweDQ5NUMsDQotICAgIDB4OTBCMSwgMHgxQjE2LCAweDkwQjIsIDB4NERCOSwgMHg5MEIzLCAweDQzMDAsIDB4OTBCNCwgMHgzQjVELA0KLSAgICAweDkwQjUsIDB4MUIxNywgMHg5MEI2LCAweDQ5NUQsIDB4OTBCOCwgMHgwQzFCLCAweDkwQkQsIDB4NERCQSwNCi0gICAgMHg5MEJFLCAweDQzMDEsIDB4OTBDMSwgMHgwNEFFLCAweDkwQzMsIDB4NDk1RSwgMHg5MEM0LCAweDQzMDIsDQotICAgIDB4OTBDNSwgMHg0MzAzLCAweDkwQzcsIDB4NDMwNCwgMHg5MEM4LCAweDQ5NUYsIDB4OTBDOSwgMHg0REJCLA0KLSAgICAweDkwQ0EsIDB4MDdFQiwgMHg5MENFLCAweDBGRTAsIDB4OTBENywgMHgzQjVFLCAweDkwREIsIDB4MUIxQiwNCi0gICAgMHg5MERDLCAweDQ5NjEsIDB4OTBERCwgMHgzQjVGLCAweDkwREUsIDB4MjFCQiwgMHg5MERGLCAweDQ5NjIsDQotICAgIDB4OTBFMSwgMHgwNzBBLCAweDkwRTIsIDB4MUIxOCwgMHg5MEU0LCAweDFCMTksIDB4OTBFOCwgMHgwREU2LA0KLSAgICAweDkwRUIsIDB4NDk2NywgMHg5MEVELCAweDA1QjIsIDB4OTBFRiwgMHg0MzA1LCAweDkwRjAsIDB4NERCQywNCi0gICAgMHg5MEYyLCAweDQ5NjUsIDB4OTBGNCwgMHgzQjYwLCAweDkwRjUsIDB4MEYyMywgMHg5MEY2LCAweDQ5NjQsDQotICAgIDB4OTBGNywgMHgwNkI3LCAweDkwRkQsIDB4MEM0RSwgMHg5MEZFLCAweDQ5NjgsIDB4OTBGRiwgMHg0OTY5LA0KLSAgICAweDkxMDAsIDB4NDk2NiwgMHg5MTAyLCAweDFCMUMsIDB4OTEwNCwgMHg0OTZBLCAweDkxMDUsIDB4NERCRCwNCi0gICAgMHg5MTA2LCAweDQ5NkIsIDB4OTExMiwgMHgxQjFELCAweDkxMTQsIDB4NDMwNiwgMHg5MTE1LCAweDIxQkQsDQotICAgIDB4OTExNiwgMHg0MzA3LCAweDkxMTcsIDB4M0I2MSwgMHg5MTE4LCAweDQ5NkMsIDB4OTExOSwgMHgxQjFFLA0KLSAgICAweDkxMUMsIDB4M0I2MiwgMHg5MTFFLCAweDQ5NkQsIDB4OTEyMiwgMHg0MzA4LCAweDkxMjMsIDB4NDMwOSwNCi0gICAgMHg5MTI1LCAweDREQkUsIDB4OTEyNywgMHgyMUJFLCAweDkxMkQsIDB4MEMxQywgMHg5MTJGLCAweDQzMEEsDQotICAgIDB4OTEzMCwgMHgxQjIwLCAweDkxMzEsIDB4M0I2MywgMHg5MTMyLCAweDFCMUYsIDB4OTEzNCwgMHg0MzBCLA0KLSAgICAweDkxMzcsIDB4NDk2RSwgMHg5MTM5LCAweDQ5NkYsIDB4OTEzQSwgMHgzQjY0LCAweDkxM0QsIDB4M0I2NSwNCi0gICAgMHg5MTQ2LCAweDQ5NzAsIDB4OTE0NywgMHg0OTcxLCAweDkxNDgsIDB4M0I2NiwgMHg5MTQ5LCAweDBDQUIsDQotICAgIDB4OTE0QSwgMHgxQjIxLCAweDkxNEIsIDB4MDk0MCwgMHg5MTRDLCAweDA5MEMsIDB4OTE0RCwgMHgwRDExLA0KLSAgICAweDkxNEUsIDB4MEJBRiwgMHg5MTUyLCAweDA5MUUsIDB4OTE1NCwgMHgwQTMyLCAweDkxNTYsIDB4MUIyMiwNCi0gICAgMHg5MTU3LCAweDQ5NzIsIDB4OTE1OCwgMHgxQjIzLCAweDkxNTksIDB4NDk3MywgMHg5MTVBLCAweDREQkYsDQotICAgIDB4OTE1QiwgMHgzQjY3LCAweDkxNjEsIDB4M0I2OCwgMHg5MTYyLCAweDBBMjMsIDB4OTE2MywgMHgxQjI0LA0KLSAgICAweDkxNjQsIDB4M0I2OSwgMHg5MTY1LCAweDFCMjUsIDB4OTE2NywgMHg0REMwLCAweDkxNjksIDB4MUIyNiwNCi0gICAgMHg5MTZBLCAweDBGNTksIDB4OTE2QywgMHgwOTQxLCAweDkxNzIsIDB4MUIyOCwgMHg5MTczLCAweDFCMjcsDQotICAgIDB4OTE3NCwgMHg0OTc0LCAweDkxNzUsIDB4MDdFQywgMHg5MTc3LCAweDA4MDUsIDB4OTE3OCwgMHgwODhFLA0KLSAgICAweDkxNzksIDB4NDk3NSwgMHg5MTdBLCAweDREQzEsIDB4OTE4MiwgMHgxQjJCLCAweDkxODMsIDB4NDMwQywNCi0gICAgMHg5MTg1LCAweDQ5NzYsIDB4OTE4NywgMHgwOTcwLCAweDkxODksIDB4MUIyQSwgMHg5MThBLCAweDREQzIsDQotICAgIDB4OTE4QiwgMHgxQjI5LCAweDkxOEQsIDB4MEI0OSwgMHg5MThFLCAweDNCNkEsIDB4OTE5MCwgMHgwN0EzLA0KLSAgICAweDkxOTEsIDB4NERDMywgMHg5MTkyLCAweDBBNjcsIDB4OTE5NSwgMHg0REM0LCAweDkxOTcsIDB4MEQ0NCwNCi0gICAgMHg5MTlDLCAweDA5NDMsIDB4OTE5RSwgMHgzQjZCLCAweDkxQTIsIDB4MUIyQywgMHg5MUE0LCAweDA5QzcsDQotICAgIDB4OTFBOCwgMHgzQjZDLCAweDkxQUEsIDB4MUIyRiwgMHg5MUFCLCAweDFCMkQsIDB4OTFBQywgMHgxRTFCLA0KLSAgICAweDkxQUQsIDB4M0I2RCwgMHg5MUFFLCAweDNCNkUsIDB4OTFBRiwgMHgxQjJFLCAweDkxQjAsIDB4NERDNSwNCi0gICAgMHg5MUIxLCAweDFFNjEsIDB4OTFCMiwgMHgzQjZGLCAweDkxQjMsIDB4NDk3NywgMHg5MUI0LCAweDFCMzEsDQotICAgIDB4OTFCNSwgMHgxQjMwLCAweDkxQjYsIDB4NDk3OCwgMHg5MUI4LCAweDA5RTIsIDB4OTFCQSwgMHgxQjMyLA0KLSAgICAweDkxQkIsIDB4NERDNiwgMHg5MUJDLCAweDNCNzAsIDB4OTFCRCwgMHg0REM3LCAweDkxQzAsIDB4MUIzMywNCi0gICAgMHg5MUMxLCAweDFCMzQsIDB4OTFDMiwgMHg0REM4LCAweDkxQzMsIDB4NDk3OSwgMHg5MUM0LCAweDQ5N0EsDQotICAgIDB4OTFDNSwgMHg0REM5LCAweDkxQzYsIDB4MEQ2NCwgMHg5MUM3LCAweDA4NDMsIDB4OTFDOCwgMHgwOTBELA0KLSAgICAweDkxQzksIDB4MUIzNSwgMHg5MUNCLCAweDFCMzYsIDB4OTFDQywgMHgwRjZDLCAweDkxQ0QsIDB4MDk0RiwNCi0gICAgMHg5MUNFLCAweDBFRkEsIDB4OTFDRiwgMHgwRjk0LCAweDkxRDAsIDB4MUIzNywgMHg5MUQxLCAweDA2REEsDQotICAgIDB4OTFENiwgMHgxQjM4LCAweDkxRDcsIDB4MjFDMCwgMHg5MUQ4LCAweDBDMUQsIDB4OTFEQSwgMHgyMUJGLA0KLSAgICAweDkxREIsIDB4MUIzQiwgMHg5MURDLCAweDA1RDYsIDB4OTFERCwgMHgwQTExLCAweDkxREUsIDB4MjFDMSwNCi0gICAgMHg5MURGLCAweDFCMzksIDB4OTFFMSwgMHgxQjNBLCAweDkxRTMsIDB4MEJGQywgMHg5MUU0LCAweDIxQzQsDQotICAgIDB4OTFFNSwgMHgyMUM1LCAweDkxRTYsIDB4MEU4MywgMHg5MUU3LCAweDA2RjQsIDB4OTFFQywgMHg0OTdELA0KLSAgICAweDkxRUQsIDB4MjFDMiwgMHg5MUVFLCAweDIxQzMsIDB4OTFGMCwgMHgzQjcxLCAweDkxRjEsIDB4NDMwRCwNCi0gICAgMHg5MUY1LCAweDFCM0QsIDB4OTFGNiwgMHgxQjNFLCAweDkxRjcsIDB4M0I3MiwgMHg5MUZCLCAweDNCNzMsDQotICAgIDB4OTFGQywgMHgxQjNDLCAweDkxRkYsIDB4MUI0MCwgMHg5MjAwLCAweDREQ0EsIDB4OTIwMSwgMHg0OTdFLA0KLSAgICAweDkyMDYsIDB4MjFDNiwgMHg5MjA3LCAweDNCNzQsIDB4OTIwOSwgMHg0RENCLCAweDkyMEEsIDB4MjFDOCwNCi0gICAgMHg5MjBELCAweDBDQjcsIDB4OTIwRSwgMHgwNUExLCAweDkyMTAsIDB4MjFDNywgMHg5MjExLCAweDFCNDQsDQotICAgIDB4OTIxNCwgMHgxQjQxLCAweDkyMTUsIDB4MUI0MywgMHg5MjE2LCAweDQ5N0YsIDB4OTIxNywgMHg0OTgwLA0KLSAgICAweDkyMUUsIDB4MUIzRiwgMHg5MjIzLCAweDREQ0MsIDB4OTIyOCwgMHgzQjc1LCAweDkyMjksIDB4MUI4QSwNCi0gICAgMHg5MjJDLCAweDFCNDIsIDB4OTIzMywgMHgzQjc2LCAweDkyMzQsIDB4MEZCMywgMHg5MjM3LCAweDA3OEUsDQotICAgIDB4OTIzOCwgMHgzQjc3LCAweDkyMzksIDB4MjFDRiwgMHg5MjNBLCAweDIxQzksIDB4OTIzQywgMHgyMUNCLA0KLSAgICAweDkyM0YsIDB4MUI0QywgMHg5MjQwLCAweDIxQ0EsIDB4OTI0MiwgMHg0OTgyLCAweDkyNDMsIDB4M0I3OCwNCi0gICAgMHg5MjQ0LCAweDBDMkUsIDB4OTI0NSwgMHgxQjQ3LCAweDkyNDcsIDB4M0I3OSwgMHg5MjQ4LCAweDFCNEEsDQotICAgIDB4OTI0OSwgMHgxQjQ4LCAweDkyNEEsIDB4NDk4MywgMHg5MjRCLCAweDFCNEQsIDB4OTI0RSwgMHgyMUNDLA0KLSAgICAweDkyNEYsIDB4M0I3QSwgMHg5MjUwLCAweDFCNEUsIDB4OTI1MSwgMHgyMUNFLCAweDkyNTYsIDB4NDk4NCwNCi0gICAgMHg5MjU3LCAweDFCNDYsIDB4OTI1OSwgMHgyMUNELCAweDkyNUEsIDB4MUI1MywgMHg5MjVCLCAweDA1MTYsDQotICAgIDB4OTI1RSwgMHgxQjQ1LCAweDkyNjAsIDB4M0I3QiwgMHg5MjYxLCAweDQ5ODUsIDB4OTI2MiwgMHgwRDQxLA0KLSAgICAweDkyNjQsIDB4MUI0OSwgMHg5MjY1LCAweDQ5ODYsIDB4OTI2NiwgMHgwOUM4LCAweDkyNjcsIDB4MjFEMCwNCi0gICAgMHg5MjY4LCAweDQ5ODcsIDB4OTI3MSwgMHgwN0VELCAweDkyNzYsIDB4NERDRCwgMHg5Mjc3LCAweDIxRDIsDQotICAgIDB4OTI3OCwgMHgyMUQzLCAweDkyN0MsIDB4NDk4OSwgMHg5MjdELCAweDQ5OEEsIDB4OTI3RSwgMHgwRTc2LA0KLSAgICAweDkyN0YsIDB4NDk4QiwgMHg5MjgwLCAweDA2REMsIDB4OTI4MywgMHgwOTUwLCAweDkyODUsIDB4MEM5NCwNCi0gICAgMHg5Mjg4LCAweDIwQUEsIDB4OTI4OSwgMHg0OThDLCAweDkyOEQsIDB4NDk4RCwgMHg5MjhFLCAweDREQ0UsDQotICAgIDB4OTI5MSwgMHgwQUFGLCAweDkyOTMsIDB4MUI1MSwgMHg5Mjk1LCAweDFCNEIsIDB4OTI5NiwgMHgxQjUwLA0KLSAgICAweDkyOTcsIDB4NDk4RSwgMHg5Mjk4LCAweDBFQ0YsIDB4OTI5OSwgMHg0OThGLCAweDkyOUEsIDB4MEJENCwNCi0gICAgMHg5MjlCLCAweDFCNTIsIDB4OTI5QywgMHgxQjRGLCAweDkyOUYsIDB4NDk5MCwgMHg5MkE3LCAweDIxRDEsDQotICAgIDB4OTJBQiwgMHg0OTkxLCAweDkyQUQsIDB4MEFBRSwgMHg5MkFGLCAweDREQ0YsIDB4OTJCMiwgMHg0OTk0LA0KLSAgICAweDkyQjMsIDB4MzU1NCwgMHg5MkI3LCAweDFCNTYsIDB4OTJCOSwgMHgxQjU1LCAweDkyQkIsIDB4NEREMCwNCi0gICAgMHg5MkJDLCAweDRERDEsIDB4OTJCRiwgMHg0OTk1LCAweDkyQzAsIDB4NDk5NiwgMHg5MkMxLCAweDRERDIsDQotICAgIDB4OTJDMiwgMHgzQjdDLCAweDkyQzMsIDB4NEREMywgMHg5MkM1LCAweDRERDQsIDB4OTJDNiwgMHg0OTk3LA0KLSAgICAweDkyQzgsIDB4NERENSwgMHg5MkNCLCAweDNCN0QsIDB4OTJDQywgMHgzQjdFLCAweDkyQ0UsIDB4NDk5OCwNCi0gICAgMHg5MkNGLCAweDFCNTQsIDB4OTJEMCwgMHgyMUQ3LCAweDkyRDIsIDB4MEU1RCwgMHg5MkQzLCAweDIxREIsDQotICAgIDB4OTJENSwgMHgyMUQ5LCAweDkyRDcsIDB4MjFENSwgMHg5MkQ5LCAweDIxRDYsIDB4OTJERiwgMHgzQjdGLA0KLSAgICAweDkyRTAsIDB4MjFEQSwgMHg5MkU0LCAweDA5ODUsIDB4OTJFNSwgMHg0OTk5LCAweDkyRTcsIDB4MjFENCwNCi0gICAgMHg5MkU5LCAweDFCNTcsIDB4OTJFQSwgMHgwRTJGLCAweDkyRUQsIDB4MDRGNiwgMHg5MkYyLCAweDBEQjgsDQotICAgIDB4OTJGMywgMHgwQkIwLCAweDkyRjcsIDB4NDk5RCwgMHg5MkY4LCAweDA2OTIsIDB4OTJGOSwgMHgyMEIwLA0KLSAgICAweDkyRkEsIDB4MUI1OSwgMHg5MkZCLCAweDIxREUsIDB4OTJGQywgMHgwN0VGLCAweDkyRkYsIDB4MjFFMSwNCi0gICAgMHg5MzAyLCAweDIxRTMsIDB4OTMwNCwgMHgzNDVBLCAweDkzMDYsIDB4MDg3QSwgMHg5MzBELCAweDNCODAsDQotICAgIDB4OTMwRiwgMHgxQjU4LCAweDkzMTAsIDB4MEEzMywgMHg5MzExLCAweDQ5OUEsIDB4OTMxNCwgMHg0REQ2LA0KLSAgICAweDkzMTUsIDB4M0I4MSwgMHg5MzE4LCAweDBBMzQsIDB4OTMxOSwgMHgxQjVDLCAweDkzMUEsIDB4MUI1RSwNCi0gICAgMHg5MzFELCAweDIxRTIsIDB4OTMxRSwgMHgyMUUwLCAweDkzMUYsIDB4M0I4MiwgMHg5MzIwLCAweDA5RTMsDQotICAgIDB4OTMyMSwgMHgyMURELCAweDkzMjIsIDB4MUI1RCwgMHg5MzIzLCAweDFCNUYsIDB4OTMyNSwgMHgyMURDLA0KLSAgICAweDkzMjYsIDB4MDZDQiwgMHg5MzI3LCAweDNCODMsIDB4OTMyOCwgMHgwREI3LCAweDkzMjksIDB4NDk5RSwNCi0gICAgMHg5MzJCLCAweDA5MEUsIDB4OTMyQywgMHgwRkM5LCAweDkzMkUsIDB4MUI1QiwgMHg5MzJGLCAweDA4NjgsDQotICAgIDB4OTMzMiwgMHgwRkU1LCAweDkzMzMsIDB4NERENywgMHg5MzM1LCAweDFCNjEsIDB4OTMzNiwgMHg0REQ4LA0KLSAgICAweDkzM0EsIDB4MUI2MCwgMHg5MzNCLCAweDFCNjIsIDB4OTM0NCwgMHgxQjVBLCAweDkzNDcsIDB4M0I4NCwNCi0gICAgMHg5MzQ4LCAweDIwQTksIDB4OTM0OSwgMHg0MzBFLCAweDkzNEEsIDB4MzQ1OCwgMHg5MzRCLCAweDBDQzEsDQotICAgIDB4OTM0RCwgMHgwQzRGLCAweDkzNTEsIDB4NDlBMSwgMHg5MzUyLCAweDNCODUsIDB4OTM1NCwgMHgwQkYzLA0KLSAgICAweDkzNTYsIDB4MUI2NywgMHg5MzU3LCAweDIxRTUsIDB4OTM1OCwgMHg0REQ5LCAweDkzNUEsIDB4NDlBMiwNCi0gICAgMHg5MzVCLCAweDBCODEsIDB4OTM1QywgMHgxQjYzLCAweDkzNjAsIDB4MUI2NCwgMHg5MzY0LCAweDQzMEYsDQotICAgIDB4OTM2NSwgMHg0MzEwLCAweDkzNkEsIDB4M0I4NywgMHg5MzZCLCAweDQ5QTMsIDB4OTM2QywgMHgwNzAzLA0KLSAgICAweDkzNkQsIDB4M0I4OCwgMHg5MzZFLCAweDFCNjYsIDB4OTM3MCwgMHgyMUU0LCAweDkzNzEsIDB4NDlBNCwNCi0gICAgMHg5MzczLCAweDQ5QTUsIDB4OTM3NSwgMHgwNzY0LCAweDkzN0MsIDB4MUI2NSwgMHg5MzdFLCAweDA5QzksDQotICAgIDB4OTM3RiwgMHg0RERBLCAweDkzODIsIDB4NEREQiwgMHg5Mzg4LCAweDQ5QTksIDB4OTM4QSwgMHg0RERDLA0KLSAgICAweDkzOEIsIDB4NDlBQSwgMHg5MzhDLCAweDA1RDcsIDB4OTM4RiwgMHg0OUFCLCAweDkzOTQsIDB4MUI2QiwNCi0gICAgMHg5Mzk2LCAweDA4MkYsIDB4OTM5NywgMHgwQUZCLCAweDkzOUEsIDB4MEJFNiwgMHg5MzlCLCAweDNCODksDQotICAgIDB4OTM5RSwgMHg0OUFDLCAweDkzQTEsIDB4NDlBNiwgMHg5M0EzLCAweDQzMTEsIDB4OTNBNCwgMHgyMUU2LA0KLSAgICAweDkzQTcsIDB4MDU5OSwgMHg5M0E5LCAweDNCOEIsIDB4OTNBQywgMHgxQjY5LCAweDkzQUQsIDB4MUI2QSwNCi0gICAgMHg5M0FFLCAweDBCREYsIDB4OTNCMCwgMHgxQjY4LCAweDkzQjksIDB4MUI2QywgMHg5M0JBLCAweDNCOEEsDQotICAgIDB4OTNCQiwgMHg0RERELCAweDkzQzEsIDB4M0I4QywgMHg5M0MzLCAweDFCNzIsIDB4OTNDNiwgMHgyMUU3LA0KLSAgICAweDkzQzcsIDB4NDlCMSwgMHg5M0M4LCAweDFCNzUsIDB4OTNDQSwgMHgzQjhELCAweDkzQ0MsIDB4NERERSwNCi0gICAgMHg5M0QwLCAweDFCNzQsIDB4OTNEMSwgMHgwQzI3LCAweDkzRDYsIDB4MUI2RCwgMHg5M0Q3LCAweDFCNkUsDQotICAgIDB4OTNEOCwgMHgxQjcxLCAweDkzREMsIDB4NDlCMiwgMHg5M0RELCAweDFCNzMsIDB4OTNERSwgMHgyMUU4LA0KLSAgICAweDkzREYsIDB4NDMxMiwgMHg5M0UxLCAweDA2QjgsIDB4OTNFMiwgMHgzQjhFLCAweDkzRTQsIDB4MUI3NiwNCi0gICAgMHg5M0U1LCAweDFCNzAsIDB4OTNFNiwgMHg0RERGLCAweDkzRTcsIDB4NDlCMywgMHg5M0U4LCAweDFCNkYsDQotICAgIDB4OTNGMSwgMHg0OUIwLCAweDkzRjUsIDB4NDlBRCwgMHg5M0Y4LCAweDIxRTksIDB4OTNGOSwgMHg0REUwLA0KLSAgICAweDkzRkEsIDB4M0I4RiwgMHg5M0ZCLCAweDQ5QjcsIDB4OTNGRCwgMHgzQjkwLCAweDk0MDIsIDB4NERFMSwNCi0gICAgMHg5NDAzLCAweDFCN0EsIDB4OTQwNCwgMHg0MzEzLCAweDk0MDcsIDB4MUI3QiwgMHg5NDA5LCAweDQ5QjQsDQotICAgIDB4OTQwRCwgMHg0REUyLCAweDk0MEUsIDB4NERFMywgMHg5NDBGLCAweDNCOTEsIDB4OTQxMCwgMHgxQjdDLA0KLSAgICAweDk0MTMsIDB4MUI3OSwgMHg5NDE0LCAweDFCNzgsIDB4OTQxNiwgMHg0OUI1LCAweDk0MTcsIDB4NDlCNiwNCi0gICAgMHg5NDE4LCAweDA5Q0EsIDB4OTQxOSwgMHgwQzgyLCAweDk0MUEsIDB4MUI3NywgMHg5NDIxLCAweDFCODAsDQotICAgIDB4OTQyQiwgMHgxQjdFLCAweDk0MkUsIDB4NERFNCwgMHg5NDMxLCAweDIxRUEsIDB4OTQzMiwgMHg0OUI4LA0KLSAgICAweDk0MzMsIDB4NDMxNCwgMHg5NDM0LCAweDNCOTIsIDB4OTQzNSwgMHgxQjdGLCAweDk0MzYsIDB4MUI3RCwNCi0gICAgMHg5NDM4LCAweDBCNTgsIDB4OTQzQSwgMHgxQjgxLCAweDk0M0IsIDB4NDlCOSwgMHg5NDNGLCAweDNCOTMsDQotICAgIDB4OTQ0MSwgMHgxQjgyLCAweDk0NDQsIDB4MUI4NCwgMHg5NDQ1LCAweDIxRUIsIDB4OTQ0OCwgMHgyMUVDLA0KLSAgICAweDk0NEEsIDB4NDMxNSwgMHg5NDRDLCAweDRERTUsIDB4OTQ1MSwgMHgwNjExLCAweDk0NTIsIDB4MUI4MywNCi0gICAgMHg5NDUzLCAweDBGMDYsIDB4OTQ1NSwgMHgzQjk0LCAweDk0NUEsIDB4MUI4RiwgMHg5NDVCLCAweDFCODUsDQotICAgIDB4OTQ1RSwgMHgxQjg4LCAweDk0NjAsIDB4MUI4NiwgMHg5NDYyLCAweDFCODcsIDB4OTQ2MywgMHg0MzE2LA0KLSAgICAweDk0NkEsIDB4MUI4OSwgMHg5NDZCLCAweDNCOTUsIDB4OTQ2RCwgMHg0OUJDLCAweDk0NkYsIDB4NDlCRCwNCi0gICAgMHg5NDcwLCAweDFCOEIsIDB4OTQ3MSwgMHg0MzE3LCAweDk0NzIsIDB4M0I5NiwgMHg5NDc1LCAweDFCOEMsDQotICAgIDB4OTQ3NywgMHgxQjhELCAweDk0N0MsIDB4MUI5MCwgMHg5NDdELCAweDFCOEUsIDB4OTQ3RSwgMHgxQjkxLA0KLSAgICAweDk0N0YsIDB4MUI5MywgMHg5NDgxLCAweDFCOTIsIDB4OTU3NywgMHgwQkQ1LCAweDk1NzgsIDB4M0I5NywNCi0gICAgMHg5NTc5LCAweDQ5QkUsIDB4OTU4MCwgMHgwRUYzLCAweDk1ODIsIDB4MUI5NCwgMHg5NTgzLCAweDBBQjAsDQotICAgIDB4OTU4NiwgMHg0OUJGLCAweDk1ODcsIDB4MUI5NSwgMHg5NTg4LCAweDRERTYsIDB4OTU4OSwgMHgwRTE0LA0KLSAgICAweDk1OEEsIDB4MUI5NiwgMHg5NThCLCAweDA1ODksIDB4OTU4QywgMHg0OUMwLCAweDk1OEQsIDB4NDlDMSwNCi0gICAgMHg5NThFLCAweDQzMTgsIDB4OTU4RiwgMHgwNERFLCAweDk1OTEsIDB4MDYxMywgMHg5NTkyLCAweDIxRUQsDQotICAgIDB4OTU5MywgMHgwNjEyLCAweDk1OTQsIDB4MUI5NywgMHg5NTk2LCAweDFCOTgsIDB4OTU5OCwgMHgxQjk5LA0KLSAgICAweDk1OTksIDB4MUI5QSwgMHg5NTlGLCAweDQzMTksIDB4OTVBMCwgMHgxQjlCLCAweDk1QTEsIDB4NERFNywNCi0gICAgMHg5NUEyLCAweDA2MTQsIDB4OTVBMywgMHgwNUIzLCAweDk1QTQsIDB4MDdGMCwgMHg5NUE1LCAweDBENEEsDQotICAgIDB4OTVBNiwgMHgzQjk4LCAweDk1QTcsIDB4MUI5RCwgMHg5NUE4LCAweDFCOUMsIDB4OTVBOSwgMHgzQjk5LA0KLSAgICAweDk1QUIsIDB4NEY1OSwgMHg5NUFDLCAweDQzMUEsIDB4OTVBRCwgMHgxQjlFLCAweDk1QjEsIDB4MzU1NSwNCi0gICAgMHg5NUIyLCAweDA0RkUsIDB4OTVCNCwgMHgzQjlCLCAweDk1QjYsIDB4NDMxQiwgMHg5NUI5LCAweDFCQTEsDQotICAgIDB4OTVCQiwgMHgxQkEwLCAweDk1QkMsIDB4MUI5RiwgMHg5NUJELCAweDNCOUMsIDB4OTVCRSwgMHgxQkEyLA0KLSAgICAweDk1QkYsIDB4NERFOCwgMHg5NUMzLCAweDFCQTUsIDB4OTVDNiwgMHg0REU5LCAweDk1QzcsIDB4MDQ4QiwNCi0gICAgMHg5NUM4LCAweDQ5QzQsIDB4OTVDOSwgMHg0REVBLCAweDk1Q0EsIDB4MUJBMywgMHg5NUNCLCAweDQzMUMsDQotICAgIDB4OTVDQywgMHgxQkE3LCAweDk1Q0QsIDB4MUJBNiwgMHg5NUQwLCAweDQzMUQsIDB4OTVEMSwgMHg0REVCLA0KLSAgICAweDk1RDIsIDB4NERFQywgMHg5NUQzLCAweDQzMUUsIDB4OTVENCwgMHgxQkE5LCAweDk1RDUsIDB4MUJBOCwNCi0gICAgMHg5NUQ2LCAweDFCQUEsIDB4OTVEOCwgMHgwQzg2LCAweDk1REEsIDB4M0I5RCwgMHg5NURDLCAweDFCQUIsDQotICAgIDB4OTVERSwgMHg0MzIwLCAweDk1RTAsIDB4NERFRCwgMHg5NUUxLCAweDFCQUMsIDB4OTVFMiwgMHgxQkFFLA0KLSAgICAweDk1RTQsIDB4NERFRSwgMHg5NUU1LCAweDFCQUQsIDB4OTVFNiwgMHg0REVGLCAweDk2MUMsIDB4MERERSwNCi0gICAgMHg5NjFELCAweDNCOUUsIDB4OTYyMSwgMHgxQkFGLCAweDk2MjQsIDB4NERGMCwgMHg5NjI4LCAweDFCQjAsDQotICAgIDB4OTYyQSwgMHgwODU1LCAweDk2MkMsIDB4NDlDNywgMHg5NjJFLCAweDFCQjEsIDB4OTYyRiwgMHgxQkIyLA0KLSAgICAweDk2MzEsIDB4NERGMSwgMHg5NjMyLCAweDBFNzcsIDB4OTYzMywgMHg0OUM4LCAweDk2MzQsIDB4NDlDOSwNCi0gICAgMHg5NjM4LCAweDRERjIsIDB4OTYzQiwgMHgwQUNELCAweDk2M0MsIDB4NDlDQiwgMHg5NjNELCAweDRERjMsDQotICAgIDB4OTYzRiwgMHgwNDY4LCAweDk2NDAsIDB4MEIyQiwgMHg5NjQxLCAweDNCOUYsIDB4OTY0MiwgMHgxQkIzLA0KLSAgICAweDk2NDQsIDB4MERERiwgMHg5NjRCLCAweDFCQjYsIDB4OTY0QywgMHgxQkI0LCAweDk2NEQsIDB4MDdGMSwNCi0gICAgMHg5NjRGLCAweDFCQjUsIDB4OTY1MCwgMHgwNzc2LCAweDk2NTQsIDB4NERGNCwgMHg5NjU4LCAweDNCQTAsDQotICAgIDB4OTY1QiwgMHgwRTE1LCAweDk2NUMsIDB4MUJCOCwgMHg5NjVELCAweDFCQkEsIDB4OTY1RSwgMHgxQkI5LA0KLSAgICAweDk2NUYsIDB4MUJCQiwgMHg5NjYxLCAweDQ5Q0MsIDB4OTY2MiwgMHgwNEMzLCAweDk2NjMsIDB4MEExRSwNCi0gICAgMHg5NjY0LCAweDA5ODYsIDB4OTY2NSwgMHgwNjE1LCAweDk2NjYsIDB4MUJCQywgMHg5NjZBLCAweDBEMUMsDQotICAgIDB4OTY2QywgMHgxQkJFLCAweDk2NzAsIDB4MDRDNCwgMHg5NjcyLCAweDFCQkQsIDB4OTY3MywgMHgwQkUwLA0KLSAgICAweDk2NzQsIDB4NERGNSwgMHg5Njc1LCAweDBGOTUsIDB4OTY3NiwgMHgwQzgzLCAweDk2NzcsIDB4MUJCNywNCi0gICAgMHg5Njc4LCAweDBGNkUsIDB4OTY3QSwgMHgwNzY1LCAweDk2N0IsIDB4NERGNiwgMHg5NjdELCAweDBGNDUsDQotICAgIDB4OTY3RiwgMHg0REY3LCAweDk2ODEsIDB4NERGOCwgMHg5NjgyLCAweDQ5Q0UsIDB4OTY4MywgMHg0REY5LA0KLSAgICAweDk2ODQsIDB4M0JBMSwgMHg5Njg1LCAweDA2RjEsIDB4OTY4NiwgMHgwRjdDLCAweDk2ODgsIDB4MDZGRSwNCi0gICAgMHg5Njg5LCAweDRERkEsIDB4OTY4QSwgMHgwQjQyLCAweDk2OEIsIDB4MTg2QywgMHg5NjhELCAweDFCQkYsDQotICAgIDB4OTY4RSwgMHgwNThBLCAweDk2OEYsIDB4MEEzNSwgMHg5Njk0LCAweDA1QjQsIDB4OTY5NSwgMHgxQkMxLA0KLSAgICAweDk2OTYsIDB4NERGQiwgMHg5Njk3LCAweDFCQzIsIDB4OTY5OCwgMHgxQkMwLCAweDk2OTksIDB4MDczQSwNCi0gICAgMHg5NjlBLCAweDQ5RDAsIDB4OTY5QiwgMHgwODRELCAweDk2OUMsIDB4MDlDQiwgMHg5NjlELCAweDIxRjAsDQotICAgIDB4OTZBMCwgMHgwNEM1LCAweDk2QTMsIDB4MEZBMSwgMHg5NkE0LCAweDNCQTIsIDB4OTZBNSwgMHg0MzIxLA0KLSAgICAweDk2QTcsIDB4MUJDNCwgMHg5NkE4LCAweDFCMEIsIDB4OTZBOSwgMHgzQkEzLCAweDk2QUEsIDB4MUJDMywNCi0gICAgMHg5NkFFLCAweDRERkMsIDB4OTZBRiwgMHgyMUYxLCAweDk2QjAsIDB4MUJDNywgMHg5NkIxLCAweDFCQzUsDQotICAgIDB4OTZCMiwgMHgxQkM2LCAweDk2QjMsIDB4NDlEMywgMHg5NkI0LCAweDFCQzgsIDB4OTZCNiwgMHgxQkM5LA0KLSAgICAweDk2QjcsIDB4MEZCNCwgMHg5NkI4LCAweDFCQ0EsIDB4OTZCOSwgMHgxQkNCLCAweDk2QkEsIDB4NDlENCwNCi0gICAgMHg5NkJCLCAweDBBNkQsIDB4OTZCQywgMHgwRDRGLCAweDk2QkQsIDB4NDlENSwgMHg5NkMwLCAweDBBNDMsDQotICAgIDB4OTZDMSwgMHgwNjIzLCAweDk2QzQsIDB4MEYyNCwgMHg5NkM1LCAweDA1NkQsIDB4OTZDNiwgMHgwOTQyLA0KLSAgICAweDk2QzcsIDB4MDc4RiwgMHg5NkM5LCAweDFCQ0UsIDB4OTZDQiwgMHgxQkNELCAweDk2Q0MsIDB4MDhDMSwNCi0gICAgMHg5NkNELCAweDFCQ0YsIDB4OTZDRSwgMHgxQkNDLCAweDk2RDEsIDB4MDg3NiwgMHg5NkQyLCAweDNCQTQsDQotICAgIDB4OTZENSwgMHgxQkQzLCAweDk2RDYsIDB4MTk5MiwgMHg5NkQ4LCAweDQ5RDgsIDB4OTZEOSwgMHgxMEVCLA0KLSAgICAweDk2REEsIDB4NDlEOSwgMHg5NkRCLCAweDBBM0QsIDB4OTZEQywgMHgxQkQxLCAweDk2REQsIDB4NDlEQSwNCi0gICAgMHg5NkRFLCAweDNCQTYsIDB4OTZFMiwgMHgwRjZELCAweDk2RTMsIDB4MENDOSwgMHg5NkU4LCAweDA0Q0QsDQotICAgIDB4OTZFOSwgMHgzQkE3LCAweDk2RUEsIDB4MEE4NywgMHg5NkVCLCAweDA4RTIsIDB4OTZFRiwgMHg0MzIyLA0KLSAgICAweDk2RjAsIDB4MEUwNywgMHg5NkYxLCAweDNCQTgsIDB4OTZGMiwgMHgwNEUyLCAweDk2RjYsIDB4MEZCNSwNCi0gICAgMHg5NkY3LCAweDBGNTUsIDB4OTZGOSwgMHgxQkQ0LCAweDk2RkIsIDB4MEMzRiwgMHg5NzAwLCAweDA5MjcsDQotICAgIDB4OTcwMiwgMHgzQkE5LCAweDk3MDMsIDB4NERGRCwgMHg5NzA0LCAweDFCRDUsIDB4OTcwNiwgMHgxQkQ2LA0KLSAgICAweDk3MDcsIDB4MEExMiwgMHg5NzA4LCAweDFCRDcsIDB4OTcwOSwgMHgzQkFBLCAweDk3MEEsIDB4MEZCNiwNCi0gICAgMHg5NzBELCAweDFCRDIsIDB4OTcwRSwgMHgxQkQ5LCAweDk3MEYsIDB4MUJEQiwgMHg5NzExLCAweDFCREEsDQotICAgIDB4OTcxMywgMHgxQkQ4LCAweDk3MTQsIDB4NDlEQywgMHg5NzE2LCAweDFCREMsIDB4OTcxOSwgMHgxQkRELA0KLSAgICAweDk3MUIsIDB4NERGRSwgMHg5NzFDLCAweDBBRkMsIDB4OTcxRSwgMHgwNTYyLCAweDk3MjEsIDB4NERGRiwNCi0gICAgMHg5NzIyLCAweDRFMDAsIDB4OTcyMywgMHg0OURELCAweDk3MjQsIDB4MUJERSwgMHg5NzI3LCAweDBFQzQsDQotICAgIDB4OTcyOCwgMHg0RTAxLCAweDk3MkEsIDB4MUJERiwgMHg5NzMwLCAweDFCRTAsIDB4OTczMSwgMHg0RTAyLA0KLSAgICAweDk3MzIsIDB4MEZEMCwgMHg5NzMzLCAweDIxRjIsIDB4OTczNiwgMHg0OURGLCAweDk3MzgsIDB4MTQxNCwNCi0gICAgMHg5NzM5LCAweDFCRTEsIDB4OTczQiwgMHgyMUYzLCAweDk3M0QsIDB4MUJFMiwgMHg5NzNFLCAweDFCRTMsDQotICAgIDB4OTc0MSwgMHg0OUUwLCAweDk3NDIsIDB4MUJFNywgMHg5NzQzLCAweDIxRjQsIDB4OTc0NCwgMHgxQkU0LA0KLSAgICAweDk3NDYsIDB4MUJFNSwgMHg5NzQ3LCAweDQ5RTEsIDB4OTc0OCwgMHgxQkU2LCAweDk3NDksIDB4MUJFOCwNCi0gICAgMHg5NzRELCAweDIxRjUsIDB4OTc0RSwgMHg0MzIzLCAweDk3NEYsIDB4MjFGNiwgMHg5NzUxLCAweDIxRjcsDQotICAgIDB4OTc1MiwgMHgwQTY4LCAweDk3NTUsIDB4NEY1QSwgMHg5NzU2LCAweDBGMDMsIDB4OTc1NywgMHg0OUUyLA0KLSAgICAweDk3NTksIDB4MEE2OSwgMHg5NzVBLCAweDNCQUIsIDB4OTc1QiwgMHg0OUUzLCAweDk3NUMsIDB4MUJFOSwNCi0gICAgMHg5NzVFLCAweDBEODcsIDB4OTc2MCwgMHgxQkVBLCAweDk3NjEsIDB4MUQwNiwgMHg5NzYyLCAweDBFRDgsDQotICAgIDB4OTc2MywgMHgzQkFDLCAweDk3NjQsIDB4MUJFQiwgMHg5NzY2LCAweDFCRUMsIDB4OTc2NywgMHg0RTAzLA0KLSAgICAweDk3NjgsIDB4MUJFRCwgMHg5NzY5LCAweDA1QjUsIDB4OTc2QSwgMHg0OUU0LCAweDk3NkIsIDB4MUJFRiwNCi0gICAgMHg5NzZELCAweDBBMUYsIDB4OTc2RSwgMHgzQkFELCAweDk3NzEsIDB4MUJGMCwgMHg5NzczLCAweDNCQUUsDQotICAgIDB4OTc3NCwgMHgwNkZBLCAweDk3NzYsIDB4NEUwNCwgMHg5Nzc5LCAweDFCRjEsIDB4OTc3QSwgMHgxQkY1LA0KLSAgICAweDk3N0MsIDB4MUJGMywgMHg5NzdELCAweDRFMDUsIDB4OTc3RiwgMHg0RTA2LCAweDk3ODEsIDB4MUJGNCwNCi0gICAgMHg5Nzg0LCAweDA1RDEsIDB4OTc4NSwgMHgxQkYyLCAweDk3ODYsIDB4MUJGNiwgMHg5NzhCLCAweDFCRjcsDQotICAgIDB4OTc4RCwgMHgwNDhDLCAweDk3OEYsIDB4MUJGOCwgMHg5NzkwLCAweDFCRjksIDB4OTc5NSwgMHg0MzI0LA0KLSAgICAweDk3OTYsIDB4NDlFNywgMHg5Nzk4LCAweDA5Q0MsIDB4OTc5OSwgMHg0RTA3LCAweDk3OUEsIDB4M0JBRiwNCi0gICAgMHg5NzlDLCAweDFCRkEsIDB4OTc5RSwgMHg0OUU4LCAweDk3OUYsIDB4NEUwOCwgMHg5N0EwLCAweDA2NjEsDQotICAgIDB4OTdBMiwgMHgzQkIwLCAweDk3QTMsIDB4MUJGRCwgMHg5N0E2LCAweDFCRkMsIDB4OTdBOCwgMHgxQkZCLA0KLSAgICAweDk3QUIsIDB4MUEzNCwgMHg5N0FDLCAweDRFMDksIDB4OTdBRCwgMHgwRTJDLCAweDk3QUUsIDB4NDMyNSwNCi0gICAgMHg5N0IxLCAweDQ5RTksIDB4OTdCMiwgMHg0OUVBLCAweDk3QjMsIDB4MUJGRSwgMHg5N0I0LCAweDFCRkYsDQotICAgIDB4OTdCNSwgMHgzQkIxLCAweDk3QjYsIDB4M0JCMiwgMHg5N0I5LCAweDRFMEEsIDB4OTdCQSwgMHg0MzI2LA0KLSAgICAweDk3QkUsIDB4NDlFQiwgMHg5N0MxLCAweDQzMjcsIDB4OTdDMywgMHgxQzAwLCAweDk3QzYsIDB4MUMwMSwNCi0gICAgMHg5N0M4LCAweDFDMDIsIDB4OTdDOSwgMHg0MzI4LCAweDk3Q0IsIDB4MUMwMywgMHg5N0NDLCAweDQ5RUMsDQotICAgIDB4OTdDRCwgMHg0RTBCLCAweDk3RDEsIDB4NDlFRCwgMHg5N0QzLCAweDA2MTYsIDB4OTdENCwgMHg0OUVFLA0KLSAgICAweDk3RDgsIDB4NDlFRiwgMHg5N0Q5LCAweDNCQjMsIDB4OTdEQiwgMHg0MzI5LCAweDk3REMsIDB4MUMwNCwNCi0gICAgMHg5N0RFLCAweDNCQjQsIDB4OTdFMCwgMHg0RTBDLCAweDk3RTEsIDB4NDlGMCwgMHg5N0VELCAweDFDMDUsDQotICAgIDB4OTdFRSwgMHgwQ0Q5LCAweDk3RUYsIDB4NEUwRCwgMHg5N0YxLCAweDQ5RjEsIDB4OTdGMiwgMHgxQzA3LA0KLSAgICAweDk3RjMsIDB4MDUzQiwgMHg5N0Y0LCAweDNCQjUsIDB4OTdGNSwgMHgxQzBBLCAweDk3RjYsIDB4MUMwOSwNCi0gICAgMHg5N0ZCLCAweDA0QzYsIDB4OTdGRiwgMHgwNkI5LCAweDk4MDEsIDB4MEUxNywgMHg5ODAyLCAweDBCRDYsDQotICAgIDB4OTgwMywgMHgwODEyLCAweDk4MDQsIDB4NDlGMiwgMHg5ODA1LCAweDA3RjIsIDB4OTgwNiwgMHgwOTcxLA0KLSAgICAweDk4MDcsIDB4NEUwRSwgMHg5ODA4LCAweDBBMjIsIDB4OTgwQSwgMHgzQkI2LCAweDk4MEMsIDB4MUMwQywNCi0gICAgMHg5ODBELCAweDQ5RjMsIDB4OTgwRSwgMHgzQkI3LCAweDk4MEYsIDB4MUMwQiwgMHg5ODEwLCAweDBGMkMsDQotICAgIDB4OTgxMSwgMHgwNjI0LCAweDk4MTIsIDB4MEQ2NiwgMHg5ODEzLCAweDBDQjQsIDB4OTgxNCwgMHg0OUY0LA0KLSAgICAweDk4MTYsIDB4NDlGNSwgMHg5ODE3LCAweDBBNDIsIDB4OTgxOCwgMHgwRjk2LCAweDk4MUEsIDB4MDczMSwNCi0gICAgMHg5ODFFLCAweDNCQjgsIDB4OTgyMSwgMHgxQzBGLCAweDk4MjMsIDB4M0JCOSwgMHg5ODI0LCAweDFDMEUsDQotICAgIDB4OTgyNSwgMHg0OUZBLCAweDk4MjYsIDB4NEUwRiwgMHg5ODJCLCAweDNCQkEsIDB4OTgyQywgMHgwRTc5LA0KLSAgICAweDk4MkQsIDB4MEM4NCwgMHg5ODJFLCAweDRFMTAsIDB4OTgzMCwgMHgxRTczLCAweDk4MzIsIDB4NDlGOCwNCi0gICAgMHg5ODMzLCAweDQ5RjksIDB4OTgzNCwgMHgwNEYyLCAweDk4MzcsIDB4MUMxMCwgMHg5ODM4LCAweDFDMEQsDQotICAgIDB4OTgzOSwgMHgzN0IzLCAweDk4M0IsIDB4MERDMywgMHg5ODNDLCAweDBGNTQsIDB4OTgzRCwgMHgxQzExLA0KLSAgICAweDk4M0UsIDB4M0JCQiwgMHg5ODQ2LCAweDFDMTIsIDB4OTg0NywgMHg0OUZCLCAweDk4NEIsIDB4MUMxNCwNCi0gICAgMHg5ODRDLCAweDBCNEEsIDB4OTg0RCwgMHgwNUI5LCAweDk4NEUsIDB4MDVCQSwgMHg5ODRGLCAweDFDMTMsDQotICAgIDB4OTg1MiwgMHgzQkJDLCAweDk4NTMsIDB4M0JCRCwgMHg5ODU0LCAweDA2MjUsIDB4OTg1NSwgMHgwNzY2LA0KLSAgICAweDk4NTYsIDB4NDMyQSwgMHg5ODU3LCAweDIxRjksIDB4OTg1OCwgMHgwNjI2LCAweDk4NTksIDB4M0JCRSwNCi0gICAgMHg5ODVBLCAweDFFNDgsIDB4OTg1QiwgMHgwQzM5LCAweDk4NUUsIDB4MEZBOCwgMHg5ODYyLCAweDRFMTEsDQotICAgIDB4OTg2MywgMHg0RTEyLCAweDk4NjUsIDB4MjFGQSwgMHg5ODY2LCAweDQ5RkMsIDB4OTg2NywgMHgwNzkwLA0KLSAgICAweDk4NkIsIDB4MUMxNSwgMHg5ODZDLCAweDNCQkYsIDB4OTg2RiwgMHgxQzE2LCAweDk4NzAsIDB4MUMxNywNCi0gICAgMHg5ODcxLCAweDFDMTgsIDB4OTg3MywgMHgxQzFBLCAweDk4NzQsIDB4MUMxOSwgMHg5OEE4LCAweDBERTksDQotICAgIDB4OThBQSwgMHgxQzFCLCAweDk4QUIsIDB4NDlGRCwgMHg5OEFELCAweDQ5RkUsIDB4OThBRiwgMHgxQzFDLA0KLSAgICAweDk4QjAsIDB4NDlGRiwgMHg5OEIxLCAweDFDMUQsIDB4OThCNCwgMHg0RTEzLCAweDk4QjYsIDB4MUMxRSwNCi0gICAgMHg5OEI3LCAweDRBMDEsIDB4OThCOCwgMHgzQkMwLCAweDk4QkEsIDB4M0JDMSwgMHg5OEJCLCAweDRBMDIsDQotICAgIDB4OThCQywgMHg0QTAzLCAweDk4QkYsIDB4M0JDMiwgMHg5OEMyLCAweDRBMDQsIDB4OThDMywgMHgxQzIwLA0KLSAgICAweDk4QzQsIDB4MUMxRiwgMHg5OEM1LCAweDRFMTQsIDB4OThDNiwgMHgxQzIxLCAweDk4QzcsIDB4NEEwNSwNCi0gICAgMHg5OEM4LCAweDNCQzMsIDB4OThDQiwgMHg0QTA2LCAweDk4REIsIDB4MEQ4OCwgMHg5OERDLCAweDE4MzksDQotICAgIDB4OThERiwgMHgwOUVGLCAweDk4RTAsIDB4MzYxOCwgMHg5OEUxLCAweDRBMDcsIDB4OThFMiwgMHgwNjRDLA0KLSAgICAweDk4RTMsIDB4NEEwOCwgMHg5OEU1LCAweDNCQzQsIDB4OThFNywgMHg0MzJCLCAweDk4RTksIDB4MUMyMiwNCi0gICAgMHg5OEVBLCAweDRBMDksIDB4OThFQiwgMHgxQzIzLCAweDk4RUQsIDB4MTBDMSwgMHg5OEVFLCAweDE0REEsDQotICAgIDB4OThFRiwgMHgwRDY3LCAweDk4RjAsIDB4NEEwQSwgMHg5OEYxLCAweDRBMEIsIDB4OThGMiwgMHgwNEJGLA0KLSAgICAweDk4RjMsIDB4NEEwQywgMHg5OEY0LCAweDA0N0YsIDB4OThGQywgMHgwOEMyLCAweDk4RkQsIDB4MEU1RSwNCi0gICAgMHg5OEZFLCAweDA5RTYsIDB4OTkwMiwgMHg0RTE1LCAweDk5MDMsIDB4MUMyNCwgMHg5OTA1LCAweDBFRUIsDQotICAgIDB4OTkwOCwgMHg0QTBELCAweDk5MDksIDB4MUMyNSwgMHg5OTBBLCAweDBGNDYsIDB4OTkwQywgMHgwNEU0LA0KLSAgICAweDk5MTAsIDB4MDg4RiwgMHg5OTExLCAweDRFMTYsIDB4OTkxMiwgMHgxQzI2LCAweDk5MTMsIDB4MDU2RSwNCi0gICAgMHg5OTE0LCAweDFDMjcsIDB4OTkxNSwgMHg0RTE3LCAweDk5MTYsIDB4NEExMCwgMHg5OTE3LCAweDRBMTEsDQotICAgIDB4OTkxOCwgMHgxQzI4LCAweDk5MUEsIDB4NEExMywgMHg5OTFCLCAweDRBMTQsIDB4OTkxQywgMHg0QTE1LA0KLSAgICAweDk5MUQsIDB4MUMyQSwgMHg5OTFFLCAweDFDMkIsIDB4OTkyMCwgMHgxQzJELCAweDk5MjEsIDB4MUMyOSwNCi0gICAgMHg5OTI0LCAweDFDMkMsIDB4OTkyNywgMHgyMUZELCAweDk5MjgsIDB4MDYxNywgMHg5OTJDLCAweDFDMkUsDQotICAgIDB4OTkyRSwgMHgxQzJGLCAweDk5MzEsIDB4NEExNywgMHg5OTMyLCAweDNCQzUsIDB4OTkzMywgMHgzQkM2LA0KLSAgICAweDk5MzUsIDB4NEUxOCwgMHg5OTNBLCAweDRBMTgsIDB4OTkzQiwgMHg0QTE5LCAweDk5M0MsIDB4NEExQSwNCi0gICAgMHg5OTNELCAweDFDMzAsIDB4OTkzRSwgMHgxQzMxLCAweDk5NDAsIDB4M0JDNywgMHg5OTQxLCAweDRBMUIsDQotICAgIDB4OTk0MiwgMHgxQzMyLCAweDk5NDUsIDB4MUMzNCwgMHg5OTQ2LCAweDRBMUMsIDB4OTk0OCwgMHg0RTE5LA0KLSAgICAweDk5NDksIDB4MUMzMywgMHg5OTRCLCAweDFDMzYsIDB4OTk0QywgMHgxQzM5LCAweDk5NEQsIDB4M0JDOCwNCi0gICAgMHg5OTRFLCAweDRBMUQsIDB4OTk1MCwgMHgxQzM1LCAweDk5NTEsIDB4MUMzNywgMHg5OTUyLCAweDFDMzgsDQotICAgIDB4OTk1NCwgMHg0RTFBLCAweDk5NTUsIDB4MUMzQSwgMHg5OTU3LCAweDA2QkEsIDB4OTk1OCwgMHg0MzJDLA0KLSAgICAweDk5NUMsIDB4M0JDOSwgMHg5OTVFLCAweDRFMUIsIDB4OTk1RiwgMHgzQkNBLCAweDk5NjAsIDB4NEExRSwNCi0gICAgMHg5OTk2LCAweDA5MUYsIDB4OTk5NywgMHgxQzNCLCAweDk5OTgsIDB4MUMzQywgMHg5OTk5LCAweDA3RjMsDQotICAgIDB4OTk5RSwgMHgyMUZGLCAweDk5QTMsIDB4NEExRiwgMHg5OUE1LCAweDFDM0QsIDB4OTlBNiwgMHg0QTIwLA0KLSAgICAweDk5QTgsIDB4MDU5QywgMHg5OUFDLCAweDBEMDUsIDB4OTlBRCwgMHgxQzNFLCAweDk5QUUsIDB4MUMzRiwNCi0gICAgMHg5OUIxLCAweDNCQ0IsIDB4OTlCMywgMHgwQjk4LCAweDk5QjQsIDB4MENDMywgMHg5OUI5LCAweDNCQ0MsDQotICAgIDB4OTlCQSwgMHgzQkNELCAweDk5QkMsIDB4MUM0MCwgMHg5OUJELCAweDRBMjEsIDB4OTlCRiwgMHg0QTIyLA0KLSAgICAweDk5QzEsIDB4MEQzMywgMHg5OUMzLCAweDRBMjMsIDB4OTlDNCwgMHgwQjJDLCAweDk5QzUsIDB4MDRGQSwNCi0gICAgMHg5OUM2LCAweDA2RTYsIDB4OTlDOCwgMHgwNkU3LCAweDk5QzksIDB4M0JDRSwgMHg5OUQwLCAweDBCQjEsDQotICAgIDB4OTlEMSwgMHgxQzQ1LCAweDk5RDIsIDB4MDZFOCwgMHg5OUQ0LCAweDRBMjQsIDB4OTlENSwgMHgwNTZGLA0KLSAgICAweDk5RDgsIDB4MUM0NCwgMHg5OUQ5LCAweDRBMjUsIDB4OTlEQiwgMHgxQzQyLCAweDk5REQsIDB4MUM0MywNCi0gICAgMHg5OURFLCAweDRBMjYsIDB4OTlERiwgMHgxQzQxLCAweDk5RTEsIDB4NEUxQywgMHg5OUUyLCAweDFDNEYsDQotICAgIDB4OTlFRCwgMHgxQzQ2LCAweDk5RUUsIDB4MUM0NywgMHg5OUYwLCAweDRBMjgsIDB4OTlGMSwgMHgxQzQ4LA0KLSAgICAweDk5RjIsIDB4MUM0OSwgMHg5OUY4LCAweDFDNEIsIDB4OTlGOSwgMHg0QTI5LCAweDk5RkIsIDB4MUM0QSwNCi0gICAgMHg5OUZDLCAweDRBMkEsIDB4OTlGRiwgMHgwOTYzLCAweDlBMDEsIDB4MUM0QywgMHg5QTAyLCAweDNCQ0YsDQotICAgIDB4OUEwMywgMHg0MzJELCAweDlBMDUsIDB4MUM0RSwgMHg5QTA4LCAweDM3QkEsIDB4OUEwQSwgMHg0QTJCLA0KLSAgICAweDlBMEMsIDB4NEUxRCwgMHg5QTBFLCAweDA2NEQsIDB4OUEwRiwgMHgxQzRELCAweDlBMTAsIDB4NEUxRSwNCi0gICAgMHg5QTExLCAweDRBMkMsIDB4OUExMiwgMHgwQUZELCAweDlBMTMsIDB4MDc2NywgMHg5QTE2LCAweDNCRDAsDQotICAgIDB4OUExOSwgMHgxQzUwLCAweDlBMUEsIDB4NEEyRCwgMHg5QTIwLCAweDRBMkUsIDB4OUEyMywgMHg0RTFGLA0KLSAgICAweDlBMjQsIDB4M0JEMSwgMHg5QTI3LCAweDNCRDIsIDB4OUEyOCwgMHgwQjJELCAweDlBMkIsIDB4MUM1MSwNCi0gICAgMHg5QTJELCAweDNCRDMsIDB4OUEyRSwgMHgzQkQ0LCAweDlBMzAsIDB4MEM4NSwgMHg5QTMxLCAweDRBMkYsDQotICAgIDB4OUEzNiwgMHgzQkQ1LCAweDlBMzcsIDB4MUM1MiwgMHg5QTM4LCAweDNCRDYsIDB4OUEzRSwgMHgxQzU3LA0KLSAgICAweDlBNDAsIDB4MUM1NSwgMHg5QTQxLCAweDRFMjAsIDB4OUE0MiwgMHgxQzU0LCAweDlBNDMsIDB4MUM1NiwNCi0gICAgMHg5QTQ0LCAweDRBMzAsIDB4OUE0NSwgMHgxQzUzLCAweDlBNEEsIDB4M0JENywgMHg5QTRDLCAweDRBMzEsDQotICAgIDB4OUE0RCwgMHgxQzU5LCAweDlBNEUsIDB4MjIwMCwgMHg5QTUxLCAweDRFMjEsIDB4OUE1MiwgMHgxRTJGLA0KLSAgICAweDlBNTUsIDB4MUM1OCwgMHg5QTU2LCAweDNCRDgsIDB4OUE1NywgMHgxQzVCLCAweDlBNTgsIDB4NEEzMiwNCi0gICAgMHg5QTVBLCAweDA2QkIsIDB4OUE1QiwgMHgxQzVBLCAweDlBNUYsIDB4MUM1QywgMHg5QTYyLCAweDFDNUQsDQotICAgIDB4OUE2NCwgMHgxQzVGLCAweDlBNjUsIDB4MUM1RSwgMHg5QTY5LCAweDFDNjAsIDB4OUE2QSwgMHgxQzYyLA0KLSAgICAweDlBNkIsIDB4MUM2MSwgMHg5QUE4LCAweDA4MEUsIDB4OUFBRCwgMHgxQzYzLCAweDlBQUYsIDB4NEEzNCwNCi0gICAgMHg5QUIwLCAweDFDNjQsIDB4OUFCNSwgMHgzQkQ5LCAweDlBQjYsIDB4M0JEQSwgMHg5QUI3LCAweDRBMzYsDQotICAgIDB4OUFCOCwgMHgwNTlBLCAweDlBQjksIDB4NEEzOCwgMHg5QUJDLCAweDFDNjUsIDB4OUFCRCwgMHg0RTIyLA0KLSAgICAweDlBQkUsIDB4NEUyMywgMHg5QUMwLCAweDFDNjYsIDB4OUFDMSwgMHg0MzJFLCAweDlBQzMsIDB4NDMyRiwNCi0gICAgMHg5QUM0LCAweDBBMzcsIDB4OUFDNiwgMHg0QTNBLCAweDlBQ0UsIDB4NDMzMCwgMHg5QUNGLCAweDFDNjcsDQotICAgIDB4OUFEMCwgMHg0QTNCLCAweDlBRDEsIDB4MUM2OCwgMHg5QUQyLCAweDRBM0MsIDB4OUFEMywgMHgxQzY5LA0KLSAgICAweDlBRDQsIDB4MUM2QSwgMHg5QUQ1LCAweDRBM0QsIDB4OUFENiwgMHg0MzMxLCAweDlBRDgsIDB4MDdGNCwNCi0gICAgMHg5QUQ5LCAweDIyMDEsIDB4OUFEQywgMHgyMjAyLCAweDlBREUsIDB4MUM2QiwgMHg5QURGLCAweDFDNkMsDQotICAgIDB4OUFFMCwgMHg0QTNFLCAweDlBRTIsIDB4MUM2RCwgMHg5QUUzLCAweDFDNkUsIDB4OUFFNSwgMHg0QTNGLA0KLSAgICAweDlBRTYsIDB4MUM2RiwgMHg5QUU5LCAweDRBNDAsIDB4OUFFQSwgMHgwRDQ1LCAweDlBRUIsIDB4MUM3MSwNCi0gICAgMHg5QUVELCAweDBEOTgsIDB4OUFFRSwgMHgxQzcyLCAweDlBRUYsIDB4MUM3MCwgMHg5QUYxLCAweDFDNzQsDQotICAgIDB4OUFGNCwgMHgxQzczLCAweDlBRjcsIDB4MUM3NSwgMHg5QUY5LCAweDNCREIsIDB4OUFGQiwgMHgxQzc2LA0KLSAgICAweDlCMDEsIDB4NEUyNCwgMHg5QjAyLCAweDQzMzIsIDB4OUIwMywgMHgzQkRDLCAweDlCMDYsIDB4MUM3NywNCi0gICAgMHg5QjA4LCAweDQzMzMsIDB4OUIwOSwgMHg0RTI1LCAweDlCMEIsIDB4NEUyNiwgMHg5QjBDLCAweDRBNDEsDQotICAgIDB4OUIwRCwgMHg0RTI3LCAweDlCMEUsIDB4NEUyOCwgMHg5QjEwLCAweDRBNDIsIDB4OUIxMiwgMHg0QTQzLA0KLSAgICAweDlCMTYsIDB4NEE0NCwgMHg5QjE4LCAweDFDNzgsIDB4OUIxOSwgMHg0RTI5LCAweDlCMUEsIDB4MUM3OSwNCi0gICAgMHg5QjFDLCAweDRBNDUsIDB4OUIxRCwgMHg0RjQ5LCAweDlCMUYsIDB4MUM3QSwgMHg5QjIwLCAweDNCREQsDQotICAgIDB4OUIyMiwgMHgxQzdCLCAweDlCMjMsIDB4MUM3QywgMHg5QjI1LCAweDFDN0QsIDB4OUIyNywgMHgxQzdFLA0KLSAgICAweDlCMjgsIDB4MUM3RiwgMHg5QjI5LCAweDFDODAsIDB4OUIyQSwgMHgxQzgxLCAweDlCMkIsIDB4NEE0NiwNCi0gICAgMHg5QjJDLCAweDRGNEEsIDB4OUIyRCwgMHg0MzM1LCAweDlCMkUsIDB4MUM4MiwgMHg5QjJGLCAweDFDODMsDQotICAgIDB4OUIzMSwgMHgxNEQ0LCAweDlCMzIsIDB4MUM4NCwgMHg5QjMzLCAweDNCREUsIDB4OUIzNCwgMHgzQkRGLA0KLSAgICAweDlCMzUsIDB4NEUyQSwgMHg5QjNCLCAweDE3QTksIDB4OUIzQywgMHgwNjRFLCAweDlCM0QsIDB4NEE0NywNCi0gICAgMHg5QjQxLCAweDA1N0YsIDB4OUI0MiwgMHgwODIyLCAweDlCNDMsIDB4MUM4NiwgMHg5QjQ0LCAweDFDODUsDQotICAgIDB4OUI0NSwgMHgwRUIxLCAweDlCNDgsIDB4NEUyQiwgMHg5QjRCLCAweDRBNDksIDB4OUI0RCwgMHgxQzg4LA0KLSAgICAweDlCNEUsIDB4MUM4OSwgMHg5QjRGLCAweDFDODcsIDB4OUI1MSwgMHgxQzhBLCAweDlCNTQsIDB4MEU5MCwNCi0gICAgMHg5QjU1LCAweDRFMkMsIDB4OUI1OCwgMHgxQzhCLCAweDlCNUEsIDB4MDY5NSwgMHg5QjVFLCAweDQzMzYsDQotICAgIDB4OUI2MywgMHg0QTRBLCAweDlCNjUsIDB4NEE0QiwgMHg5QjY2LCAweDQzMzcsIDB4OUI2OCwgMHg0RTJELA0KLSAgICAweDlCNkIsIDB4NEE0QywgMHg5QjZDLCAweDRBNEQsIDB4OUI2RiwgMHgwRkNCLCAweDlCNzIsIDB4MjIwNCwNCi0gICAgMHg5QjczLCAweDNCRTAsIDB4OUI3NCwgMHgxQzhDLCAweDlCNzUsIDB4MjIwMywgMHg5Qjc2LCAweDRBNEUsDQotICAgIDB4OUI3NywgMHg0QTRGLCAweDlCNzksIDB4M0JFMSwgMHg5QjgwLCAweDRFMkUsIDB4OUI4MywgMHgxQzhFLA0KLSAgICAweDlCODQsIDB4NDMzOCwgMHg5Qjg2LCAweDRFMkYsIDB4OUI4QSwgMHg0MzM5LCAweDlCOEUsIDB4MDQ4MiwNCi0gICAgMHg5QjhGLCAweDIyMDUsIDB4OUI5MCwgMHg0RTMwLCAweDlCOTEsIDB4MUM4RiwgMHg5QjkyLCAweDBERkIsDQotICAgIDB4OUI5MywgMHgxQzhELCAweDlCOTYsIDB4MUM5MCwgMHg5Qjk3LCAweDFDOTEsIDB4OUI5RCwgMHg0RTMxLA0KLSAgICAweDlCOUUsIDB4NDMzQSwgMHg5QjlGLCAweDFDOTIsIDB4OUJBMCwgMHgxQzkzLCAweDlCQTYsIDB4NEE1MCwNCi0gICAgMHg5QkE3LCAweDNCRTIsIDB4OUJBOCwgMHgxQzk0LCAweDlCQUEsIDB4MEU5QywgMHg5QkFCLCAweDA4N0IsDQotICAgIDB4OUJBQywgMHg0QTUxLCAweDlCQUQsIDB4MDg2QSwgMHg5QkFFLCAweDBBQjEsIDB4OUJCMCwgMHg0RTMyLA0KLSAgICAweDlCQjEsIDB4MjIwNiwgMHg5QkIyLCAweDRBNTMsIDB4OUJCNCwgMHgxQzk1LCAweDlCQjgsIDB4NEE1NCwNCi0gICAgMHg5QkI5LCAweDFDOTgsIDB4OUJCQiwgMHgyMjA3LCAweDlCQkUsIDB4NEE1NSwgMHg5QkJGLCAweDRFMzMsDQotICAgIDB4OUJDMCwgMHgxQzk2LCAweDlCQzEsIDB4M0JFMywgMHg5QkM2LCAweDFDOTksIDB4OUJDNywgMHgzQkU0LA0KLSAgICAweDlCQzgsIDB4NEUzNCwgMHg5QkM5LCAweDA3QTUsIDB4OUJDQSwgMHgxQzk3LCAweDlCQ0UsIDB4NDMzQiwNCi0gICAgMHg5QkNGLCAweDFDOUEsIDB4OUJEMSwgMHgxQzlCLCAweDlCRDIsIDB4MUM5QywgMHg5QkQ0LCAweDFDQTAsDQotICAgIDB4OUJENiwgMHgwODc4LCAweDlCRDcsIDB4M0JFNSwgMHg5QkQ4LCAweDRBNTcsIDB4OUJEQiwgMHgwQjQ0LA0KLSAgICAweDlCREQsIDB4NEE1OCwgMHg5QkRGLCAweDM3QkYsIDB4OUJFMSwgMHgxQ0ExLCAweDlCRTIsIDB4MUM5RSwNCi0gICAgMHg5QkUzLCAweDFDOUQsIDB4OUJFNCwgMHgxQzlGLCAweDlCRTUsIDB4NDMzQywgMHg5QkU3LCAweDNCRTYsDQotICAgIDB4OUJFOCwgMHgwNzM1LCAweDlCRUEsIDB4NEE1OSwgMHg5QkVCLCAweDNCRTcsIDB4OUJFRSwgMHg0QTVCLA0KLSAgICAweDlCRUYsIDB4NEE1QSwgMHg5QkYwLCAweDFDQTUsIDB4OUJGMSwgMHgxQ0E0LCAweDlCRjIsIDB4MUNBMywNCi0gICAgMHg5QkYzLCAweDRBNTYsIDB4OUJGNSwgMHgwNDc3LCAweDlCRjcsIDB4M0JFOCwgMHg5QkY4LCAweDQzM0QsDQotICAgIDB4OUJGQSwgMHgzQkU5LCAweDlCRkQsIDB4M0JFQSwgMHg5QkZGLCAweDRFMzUsIDB4OUMwMCwgMHgyMjA4LA0KLSAgICAweDlDMDIsIDB4NEUzNiwgMHg5QzA0LCAweDFDQUYsIDB4OUMwNiwgMHgxQ0FCLCAweDlDMDgsIDB4MUNBQywNCi0gICAgMHg5QzA5LCAweDFDQTgsIDB4OUMwQSwgMHgxQ0FFLCAweDlDMEIsIDB4M0JFQiwgMHg5QzBDLCAweDFDQUEsDQotICAgIDB4OUMwRCwgMHgwNUMwLCAweDlDMTAsIDB4MEZGMiwgMHg5QzEyLCAweDFDQUQsIDB4OUMxMywgMHgxQ0E5LA0KLSAgICAweDlDMTQsIDB4MUNBNywgMHg5QzE1LCAweDFDQTYsIDB4OUMxNiwgMHg0QTVGLCAweDlDMTgsIDB4NEE2MCwNCi0gICAgMHg5QzE5LCAweDRBNjEsIDB4OUMxQSwgMHg0QTYyLCAweDlDMUIsIDB4MUNCMSwgMHg5QzFDLCAweDRFMzcsDQotICAgIDB4OUMxRCwgMHg0QTYzLCAweDlDMjEsIDB4MUNCNCwgMHg5QzIyLCAweDRBNjQsIDB4OUMyMywgMHg0MzNFLA0KLSAgICAweDlDMjQsIDB4MUNCMywgMHg5QzI1LCAweDFDQjIsIDB4OUMyNywgMHgzQkVDLCAweDlDMjksIDB4NEE2NSwNCi0gICAgMHg5QzJBLCAweDNCRUQsIDB4OUMyRCwgMHgwREJCLCAweDlDMkUsIDB4MUNCMCwgMHg5QzJGLCAweDA0QjcsDQotICAgIDB4OUMzMCwgMHgxQ0I1LCAweDlDMzEsIDB4NEE2NywgMHg5QzMyLCAweDFDQjcsIDB4OUMzNSwgMHg0RTM4LA0KLSAgICAweDlDMzYsIDB4M0JFRSwgMHg5QzM3LCAweDRBNjgsIDB4OUMzOSwgMHgwNUNELCAweDlDM0EsIDB4MUNBMiwNCi0gICAgMHg5QzNCLCAweDA0RDksIDB4OUMzRSwgMHgxQ0I5LCAweDlDNDEsIDB4M0JFRiwgMHg5QzQ0LCAweDRFMzksDQotICAgIDB4OUM0NSwgMHg0QTY5LCAweDlDNDYsIDB4MUNCOCwgMHg5QzQ3LCAweDFDQjYsIDB4OUM0OCwgMHgwQjZCLA0KLSAgICAweDlDNDksIDB4NEE2QywgMHg5QzRBLCAweDRBNkQsIDB4OUM0RiwgMHg0MzNGLCAweDlDNTAsIDB4NDM0MCwNCi0gICAgMHg5QzUyLCAweDBFOUUsIDB4OUM1MywgMHgzQkYwLCAweDlDNTQsIDB4NEE2RiwgMHg5QzU2LCAweDRFM0EsDQotICAgIDB4OUM1NywgMHgwRkEyLCAweDlDNTgsIDB4NEE3MCwgMHg5QzVBLCAweDFDQkEsIDB4OUM1QiwgMHg0QTcxLA0KLSAgICAweDlDNUMsIDB4NEE2QSwgMHg5QzVELCAweDRBNzIsIDB4OUM1RiwgMHg0QTczLCAweDlDNjAsIDB4MUNCQiwNCi0gICAgMHg5QzYxLCAweDRFM0IsIDB4OUM2MywgMHgzQkYxLCAweDlDNjUsIDB4NDM0MSwgMHg5QzY3LCAweDFDQkMsDQotICAgIDB4OUM2OCwgMHg0RTNDLCAweDlDNjksIDB4NEE3NCwgMHg5QzZBLCAweDRBNzUsIDB4OUM2QiwgMHg0QTc2LA0KLSAgICAweDlDNkQsIDB4NEE3NywgMHg5QzZFLCAweDRBNzgsIDB4OUM3MCwgMHgzQkYyLCAweDlDNzIsIDB4NEE3OSwNCi0gICAgMHg5Qzc1LCAweDRBN0EsIDB4OUM3NiwgMHgxQ0JELCAweDlDNzcsIDB4M0JGMywgMHg5Qzc4LCAweDFDQkUsDQotICAgIDB4OUM3QSwgMHg0QTdCLCAweDlDRTUsIDB4MEJENywgMHg5Q0U2LCAweDRBN0MsIDB4OUNFNywgMHgxQ0JGLA0KLSAgICAweDlDRTksIDB4MEQ0QiwgMHg5Q0VCLCAweDFDQzQsIDB4OUNFQywgMHgxQ0MwLCAweDlDRjAsIDB4MUNDMSwNCi0gICAgMHg5Q0YyLCAweDRBN0QsIDB4OUNGMywgMHgwRTVGLCAweDlDRjQsIDB4MEVEMCwgMHg5Q0Y2LCAweDBDQTgsDQotICAgIDB4OUQwMiwgMHgzQkY0LCAweDlEMDMsIDB4MUNDNSwgMHg5RDA2LCAweDFDQzYsIDB4OUQwNywgMHgwQzk2LA0KLSAgICAweDlEMDgsIDB4MUNDMywgMHg5RDA5LCAweDFDQzIsIDB4OUQwQiwgMHg0QTdFLCAweDlEMEUsIDB4MDUyQSwNCi0gICAgMHg5RDExLCAweDRBODAsIDB4OUQxMiwgMHgxQ0NFLCAweDlEMTUsIDB4MUNDRCwgMHg5RDE3LCAweDRBODEsDQotICAgIDB4OUQxOCwgMHg0QTgyLCAweDlEMUIsIDB4MDUxNywgMHg5RDFELCAweDQzNDIsIDB4OUQxRSwgMHg0MzQzLA0KLSAgICAweDlEMUYsIDB4MUNDQiwgMHg5RDIzLCAweDFDQ0EsIDB4OUQyNiwgMHgxQ0M4LCAweDlEMjgsIDB4MDVEOSwNCi0gICAgMHg5RDJBLCAweDFDQzcsIDB4OUQyQiwgMHgwOERFLCAweDlEMkMsIDB4MDUyOSwgMHg5RDMwLCAweDRFM0QsDQotICAgIDB4OUQzMiwgMHg0QTg2LCAweDlEM0IsIDB4MDdGNSwgMHg5RDNELCAweDRFM0UsIDB4OUQzRSwgMHgxQ0QxLA0KLSAgICAweDlEM0YsIDB4MUNEMCwgMHg5RDQxLCAweDFDQ0YsIDB4OUQ0MiwgMHgzQkY1LCAweDlENDMsIDB4NDM0NCwNCi0gICAgMHg5RDQ0LCAweDFDQ0MsIDB4OUQ0NiwgMHgxQ0QyLCAweDlENDcsIDB4M0JGNiwgMHg5RDQ4LCAweDFDRDMsDQotICAgIDB4OUQ0QSwgMHg0QTg4LCAweDlENTAsIDB4MUNEOCwgMHg5RDUxLCAweDFDRDcsIDB4OUQ1MiwgMHg0MzQ1LA0KLSAgICAweDlENTksIDB4MUNEOSwgMHg5RDVDLCAweDA0Q0YsIDB4OUQ1RCwgMHgxQ0Q0LCAweDlENUUsIDB4MUNENSwNCi0gICAgMHg5RDVGLCAweDRBODksIDB4OUQ2MCwgMHgwODA2LCAweDlENjEsIDB4MEVDNSwgMHg5RDYyLCAweDRBOEEsDQotICAgIDB4OUQ2MywgMHgzQkY3LCAweDlENjQsIDB4MUNENiwgMHg5RDY5LCAweDNCRjgsIDB4OUQ2QSwgMHg0RTNGLA0KLSAgICAweDlENkIsIDB4MjIwQSwgMHg5RDZDLCAweDBFNjAsIDB4OUQ2RiwgMHgxQ0RFLCAweDlENzAsIDB4MjIwOSwNCi0gICAgMHg5RDcyLCAweDFDREEsIDB4OUQ3MywgMHg0QThELCAweDlENzYsIDB4NEE4RSwgMHg5RDc3LCAweDRBOEYsDQotICAgIDB4OUQ3QSwgMHgxQ0RGLCAweDlEN0IsIDB4NEU0MCwgMHg5RDdDLCAweDNCRjksIDB4OUQ3RSwgMHgzQkZBLA0KLSAgICAweDlEODQsIDB4NEE5MCwgMHg5RDg3LCAweDFDREMsIDB4OUQ4OSwgMHgxQ0RCLCAweDlEOEEsIDB4NDM0NiwNCi0gICAgMHg5RDhELCAweDNCRkIsIDB4OUQ4RiwgMHgwNzMyLCAweDlEOTYsIDB4NDM0NywgMHg5RDk5LCAweDRBOTEsDQotICAgIDB4OUQ5QSwgMHgxQ0UwLCAweDlEQTEsIDB4NEE5MiwgMHg5REE0LCAweDFDRTEsIDB4OURBOSwgMHgxQ0UyLA0KLSAgICAweDlEQUIsIDB4MUNERCwgMHg5REFDLCAweDQzNDksIDB4OURBRiwgMHgxQ0M5LCAweDlEQjEsIDB4M0JGQywNCi0gICAgMHg5REIyLCAweDFDRTMsIDB4OURCNCwgMHgwQkZELCAweDlEQjUsIDB4NEE5NCwgMHg5REI4LCAweDFDRTcsDQotICAgIDB4OURCOSwgMHg0QTk1LCAweDlEQkEsIDB4MUNFOCwgMHg5REJCLCAweDFDRTYsIDB4OURCQywgMHg0MzRBLA0KLSAgICAweDlEQkQsIDB4NEE5NiwgMHg5REJGLCAweDRBOTMsIDB4OURDMCwgMHg0MzQ4LCAweDlEQzEsIDB4MUNFNSwNCi0gICAgMHg5REMyLCAweDFDRUIsIDB4OURDMywgMHgzQkZELCAweDlEQzQsIDB4MUNFNCwgMHg5REM2LCAweDFDRTksDQotICAgIDB4OURDNywgMHgzQkZFLCAweDlEQzksIDB4NEE5NywgMHg5RENGLCAweDFDRUEsIDB4OUREMywgMHgxQ0VELA0KLSAgICAweDlERDYsIDB4M0JGRiwgMHg5REQ3LCAweDFEREUsIDB4OUREOSwgMHgxQ0VDLCAweDlEREEsIDB4NEE5OCwNCi0gICAgMHg5RERGLCAweDNDMDAsIDB4OURFMCwgMHg0QTk5LCAweDlERTMsIDB4NEE5QSwgMHg5REU1LCAweDRFNDEsDQotICAgIDB4OURFNiwgMHgxQ0VGLCAweDlERTcsIDB4NDM0QywgMHg5REU5LCAweDRFNDIsIDB4OURFQiwgMHgzQzAxLA0KLSAgICAweDlERUQsIDB4MUNGMCwgMHg5REVGLCAweDFDRjEsIDB4OURGMiwgMHgwRkVGLCAweDlERjMsIDB4NEU0MywNCi0gICAgMHg5REY0LCAweDNDMDIsIDB4OURGOCwgMHgxQ0VFLCAweDlERjksIDB4MEI0QiwgMHg5REZBLCAweDA4NUQsDQotICAgIDB4OURGRCwgMHgxQ0YyLCAweDlFMDIsIDB4NEE5RCwgMHg5RTA3LCAweDQzNEQsIDB4OUUwQSwgMHg0QTlDLA0KLSAgICAweDlFMEQsIDB4NEE5RSwgMHg5RTE1LCAweDNDMDMsIDB4OUUxOSwgMHgyMjBDLCAweDlFMUEsIDB4MUNGMywNCi0gICAgMHg5RTFCLCAweDFDRjQsIDB4OUUxQywgMHg0QTlGLCAweDlFMUQsIDB4M0MwNCwgMHg5RTFFLCAweDFDRjUsDQotICAgIDB4OUU3NSwgMHgxQ0Y2LCAweDlFNzgsIDB4MDc2OCwgMHg5RTc5LCAweDFDRjcsIDB4OUU3QSwgMHg0RTQ0LA0KLSAgICAweDlFN0IsIDB4NEFBMCwgMHg5RTdDLCAweDFERkQsIDB4OUU3RCwgMHgxQ0Y4LCAweDlFN0YsIDB4MDhEQiwNCi0gICAgMHg5RTgwLCAweDRBQTIsIDB4OUU4MSwgMHgxQ0Y5LCAweDlFODIsIDB4NEU0NSwgMHg5RTgzLCAweDRFNDYsDQotICAgIDB4OUU4NCwgMHg0RTQ3LCAweDlFODUsIDB4NEFBMywgMHg5RTg4LCAweDFDRkEsIDB4OUU4QiwgMHgxQ0ZCLA0KLSAgICAweDlFOEMsIDB4MUNGQywgMHg5RTkxLCAweDFDRkYsIDB4OUU5MiwgMHgxQ0ZELCAweDlFOTMsIDB4MEZFMiwNCi0gICAgMHg5RTk1LCAweDFDRkUsIDB4OUU5NywgMHgwRkI3LCAweDlFOUIsIDB4NEFBNCwgMHg5RTlELCAweDFEMDAsDQotICAgIDB4OUU5RSwgMHg0MzRFLCAweDlFOUYsIDB4MEZBMywgMHg5RUE0LCAweDNDMDUsIDB4OUVBNSwgMHgxRDAxLA0KLSAgICAweDlFQTYsIDB4MEQzNCwgMHg5RUE4LCAweDNDMDYsIDB4OUVBOSwgMHgxRDAyLCAweDlFQUEsIDB4MUQwNCwNCi0gICAgMHg5RUFDLCAweDNDMDcsIDB4OUVBRCwgMHgxRDA1LCAweDlFQUYsIDB4NDM0RiwgMHg5RUIwLCAweDRFNDgsDQotICAgIDB4OUVCNCwgMHgxRTAyLCAweDlFQjUsIDB4MUU3NSwgMHg5RUI4LCAweDFEMDMsIDB4OUVCOSwgMHgwN0ZGLA0KLSAgICAweDlFQkEsIDB4MEVEOSwgMHg5RUJCLCAweDBFOTEsIDB4OUVCQywgMHgxMjg0LCAweDlFQkQsIDB4NEFBNiwNCi0gICAgMHg5RUJFLCAweDE0RkYsIDB4OUVCRiwgMHgwRUE5LCAweDlFQzMsIDB4MzQwQiwgMHg5RUM0LCAweDA1MkIsDQotICAgIDB4OUVDQywgMHgxRDA3LCAweDlFQ0QsIDB4MDY2QSwgMHg5RUNFLCAweDFEMDgsIDB4OUVDRiwgMHgxRDA5LA0KLSAgICAweDlFRDAsIDB4MUQwQSwgMHg5RUQxLCAweDIyMEQsIDB4OUVEMiwgMHgwODA3LCAweDlFRDQsIDB4MUQwQiwNCi0gICAgMHg5RUQ4LCAweDE2MEQsIDB4OUVEOSwgMHgwRUU3LCAweDlFREIsIDB4MEI0MywgMHg5RURDLCAweDFEMEMsDQotICAgIDB4OUVERCwgMHgxRDBFLCAweDlFREUsIDB4MUQwRCwgMHg5RURGLCAweDRBQTgsIDB4OUVFMCwgMHgxRDBGLA0KLSAgICAweDlFRTQsIDB4NEU0OSwgMHg5RUU1LCAweDFEMTAsIDB4OUVFNywgMHgzQzA4LCAweDlFRTgsIDB4MUQxMSwNCi0gICAgMHg5RUVFLCAweDNDMDksIDB4OUVFRiwgMHgxRDEyLCAweDlFRjAsIDB4NEU0QSwgMHg5RUYyLCAweDRFNEIsDQotICAgIDB4OUVGNCwgMHgxRDEzLCAweDlFRjYsIDB4MUQxNCwgMHg5RUY3LCAweDFEMTUsIDB4OUVGOSwgMHgxRDE2LA0KLSAgICAweDlFRkIsIDB4MUQxNywgMHg5RUZDLCAweDFEMTgsIDB4OUVGRCwgMHgxRDE5LCAweDlFRkYsIDB4NEFBOSwNCi0gICAgMHg5RjAyLCAweDRBQUEsIDB4OUYwMywgMHg0QUFDLCAweDlGMDcsIDB4MUQxQSwgMHg5RjA4LCAweDFEMUIsDQotICAgIDB4OUYwOSwgMHg0RTRDLCAweDlGMEUsIDB4MEMxRSwgMHg5RjBGLCAweDRFNEQsIDB4OUYxMCwgMHgzQzBBLA0KLSAgICAweDlGMTIsIDB4M0MwQiwgMHg5RjEzLCAweDA3OTEsIDB4OUYxNCwgMHg0RTRFLCAweDlGMTUsIDB4MUQxRCwNCi0gICAgMHg5RjE3LCAweDNDMEMsIDB4OUYxOSwgMHgzQzBELCAweDlGMUIsIDB4NEU0RiwgMHg5RjIwLCAweDBBQ0YsDQotICAgIDB4OUYyMSwgMHgxRDFFLCAweDlGMjIsIDB4NEU1MCwgMHg5RjI2LCAweDRFNTEsIDB4OUYyQSwgMHg0RTUyLA0KLSAgICAweDlGMkIsIDB4NEU1MywgMHg5RjJDLCAweDFEMUYsIDB4OUYyRiwgMHgzQzBFLCAweDlGMzQsIDB4NEU1NCwNCi0gICAgMHg5RjM3LCAweDNDMEYsIDB4OUYzOSwgMHgzQzEwLCAweDlGM0EsIDB4NEFBRCwgMHg5RjNCLCAweDBEOTMsDQotICAgIDB4OUYzRCwgMHg0QUFFLCAweDlGM0UsIDB4MUQyMCwgMHg5RjQxLCAweDNDMTEsIDB4OUY0NSwgMHgzQzEyLA0KLSAgICAweDlGNDYsIDB4NEFBRiwgMHg5RjRBLCAweDFEMjEsIDB4OUY0QiwgMHgxNzBBLCAweDlGNEUsIDB4MUE3QiwNCi0gICAgMHg5RjRGLCAweDFDMDYsIDB4OUY1MiwgMHgxRDIyLCAweDlGNTMsIDB4NEFCMCwgMHg5RjU0LCAweDFEMjMsDQotICAgIDB4OUY1NSwgMHg0QUIxLCAweDlGNTcsIDB4M0MxMywgMHg5RjU4LCAweDRBQjIsIDB4OUY1QSwgMHg0RTU1LA0KLSAgICAweDlGNUQsIDB4NEFCNCwgMHg5RjVGLCAweDFEMjUsIDB4OUY2MCwgMHgxRDI2LCAweDlGNjEsIDB4MUQyNywNCi0gICAgMHg5RjYyLCAweDBGQjgsIDB4OUY2MywgMHgxRDI0LCAweDlGNjYsIDB4MUQyOCwgMHg5RjY3LCAweDFEMjksDQotICAgIDB4OUY2OCwgMHgzQzE0LCAweDlGNjksIDB4NEFCNiwgMHg5RjZBLCAweDFEMkIsIDB4OUY2QywgMHgxRDJBLA0KLSAgICAweDlGNkQsIDB4NEFCNywgMHg5RjZGLCAweDRFNTYsIDB4OUY3MCwgMHg0QUI4LCAweDlGNzEsIDB4M0MxNSwNCi0gICAgMHg5RjcyLCAweDFEMkQsIDB4OUY3NSwgMHgzQzE2LCAweDlGNzYsIDB4MUQyRSwgMHg5Rjc3LCAweDFEMkMsDQotICAgIDB4OUY4RCwgMHgwRjdFLCAweDlGOTAsIDB4M0MxNywgMHg5Rjk0LCAweDNDMTgsIDB4OUY5NSwgMHgxRDJGLA0KLSAgICAweDlGOTcsIDB4NDM1MCwgMHg5RjlDLCAweDFEMzAsIDB4OUY5RCwgMHgxNzI3LCAweDlGOUUsIDB4NEU1NywNCi0gICAgMHg5RkEwLCAweDFEMzEsIDB4OUZBMiwgMHgzQzE5LCAweDlGQTUsIDB4NEU1OCwgMHhGODYwLCAweDNDNTQsDQotICAgIDB4Rjg2MSwgMHgzQzU1LCAweEY4NjIsIDB4M0M1NiwgMHhGODdBLCAweDNDNTcsIDB4Rjg3RiwgMHgzQzU4LA0KLSAgICAweEY5MDksIDB4MzVBQiwgMHhGOTFELCAweDM0NTAsIDB4RjkxRiwgMHgzNzA0LCAweEY5MjgsIDB4NEY0RiwNCi0gICAgMHhGOTI5LCAweDRGNTEsIDB4RjkzNiwgMHgzNDUyLCAweEY5NUYsIDB4MzY5MywgMHhGOTcwLCAweDM0MjAsDQotICAgIDB4Rjk4MywgMHgzNzA4LCAweEY5OTIsIDB4MUU4MSwgMHhGOTkzLCAweDFFODIsIDB4Rjk5OSwgMHgxRTgzLA0KLSAgICAweEY5OUEsIDB4MzcxMSwgMHhGOUEyLCAweDM3MEYsIDB4RjlDMywgMHgxRTgwLCAweEY5RDAsIDB4MzQ1NCwNCi0gICAgMHhGOURDLCAweDM0NTEsIDB4RjlFQywgMHgxRTQ2LCAweEZBMDMsIDB4MzY4NCwgMHhGQTBFLCAweDIwREEsDQotICAgIDB4RkEwRiwgMHgyMEU1LCAweEZBMTAsIDB4MUU0MiwgMHhGQTExLCAweDM3RDIsIDB4RkExMiwgMHgyMTIxLA0KLSAgICAweEZBMTMsIDB4MjEzMSwgMHhGQTE0LCAweDIxMzMsIDB4RkExNSwgMHg0RjUzLCAweEZBMTYsIDB4MjE2NCwNCi0gICAgMHhGQTE3LCAweDIxN0IsIDB4RkExOCwgMHgyMTgzLCAweEZBMTksIDB4MjE4NCwgMHhGQTFBLCAweDIxODUsDQotICAgIDB4RkExQiwgMHgyMTg3LCAweEZBMUMsIDB4MjE4QiwgMHhGQTFELCAweDIxOEUsIDB4RkExRSwgMHgyMTk3LA0KLSAgICAweEZBMUYsIDB4MjFBMiwgMHhGQTIwLCAweDIxQTQsIDB4RkEyMSwgMHgyMUE1LCAweEZBMjIsIDB4MjFBRSwNCi0gICAgMHhGQTIzLCAweDIxQjYsIDB4RkEyNCwgMHg0OTQ4LCAweEZBMjUsIDB4MjFCOSwgMHhGQTI2LCAweDIxQkMsDQotICAgIDB4RkEyNywgMHgyMUQ4LCAweEZBMjgsIDB4MjFERiwgMHhGQTI5LCAweDIxRUYsIDB4RkEyQSwgMHgyMUZCLA0KLSAgICAweEZBMkIsIDB4MjFGQywgMHhGQTJDLCAweDIxRkUsIDB4RkEyRCwgMHgyMjBCLCAweEZBMzAsIDB4MzQ0NiwNCi0gICAgMHhGQTMxLCAweDM0MzAsIDB4RkEzMiwgMHgzNDRELCAweEZBMzMsIDB4MzQ0OSwgMHhGQTM0LCAweDM0MUEsDQotICAgIDB4RkEzNSwgMHgzNDQyLCAweEZBMzYsIDB4MURFMywgMHhGQTM3LCAweDM0MzYsIDB4RkEzOCwgMHgzNDE1LA0KLSAgICAweEZBMzksIDB4MzQ0OCwgMHhGQTNBLCAweDM0NEIsIDB4RkEzQiwgMHgzNDMxLCAweEZBM0MsIDB4NDFDNSwNCi0gICAgMHhGQTNELCAweDM0MEUsIDB4RkEzRSwgMHgzNDEwLCAweEZBM0YsIDB4MzQzMywgMHhGQTQwLCAweDM0MzksDQotICAgIDB4RkE0MSwgMHgzNDQ1LCAweEZBNDIsIDB4MzQxNiwgMHhGQTQzLCAweDM0MjgsIDB4RkE0NCwgMHgzNDNGLA0KLSAgICAweEZBNDUsIDB4MzQwRiwgMHhGQTQ2LCAweDFFMTQsIDB4RkE0NywgMHgzNDE0LCAweEZBNDgsIDB4MzQyMywNCi0gICAgMHhGQTQ5LCAweDNDMjYsIDB4RkE0QSwgMHgxRTM0LCAweEZBNEIsIDB4MzQ0MywgMHhGQTRDLCAweDM0MjQsDQotICAgIDB4RkE0RCwgMHgzNDIxLCAweEZBNEUsIDB4MzQxNywgMHhGQTRGLCAweDM0NEYsIDB4RkE1MCwgMHgzNDJGLA0KLSAgICAweEZBNTEsIDB4MzQyNywgMHhGQTUyLCAweDM0MEQsIDB4RkE1MywgMHgzNDNCLCAweEZBNTQsIDB4MzQxRiwNCi0gICAgMHhGQTU1LCAweDM0M0QsIDB4RkE1NiwgMHgzNDJFLCAweEZBNTcsIDB4MzQ1NywgMHhGQTU4LCAweDQ3QkUsDQotICAgIDB4RkE1OSwgMHgzNDQwLCAweEZBNUEsIDB4MzQyOSwgMHhGQTVCLCAweDM0MjUsIDB4RkE1QywgMHgzNDI2LA0KLSAgICAweEZBNUQsIDB4Mzc3NywgMHhGQTVFLCAweDM3NzYsIDB4RkE1RiwgMHgzNDM3LCAweEZBNjAsIDB4MzQxMywNCi0gICAgMHhGQTYxLCAweDM0MjIsIDB4RkE2MiwgMHgzNDA5LCAweEZBNjMsIDB4MzQxQiwgMHhGQTY0LCAweDM0NDQsDQotICAgIDB4RkE2NSwgMHgzNDM0LCAweEZBNjYsIDB4M0MyQiwgMHhGQTY3LCAweDM0MDgsIDB4RkE2OCwgMHgzNDNFLA0KLSAgICAweEZBNjksIDB4MzQxOSwgMHhGQTZBLCAweDFFNkMsIDB4RkIwMCwgMHgyNDhFLCAweEZCMDEsIDB4MDA3MCwNCi0gICAgMHhGQjAyLCAweDAwNzEsIDB4RkIwMywgMHgyNDhGLCAweEZCMDQsIDB4MjQ5MCwgMHhGRTMwLCAweDFFREEsDQotICAgIDB4RkUzMSwgMHgxRUQ0LCAweEZFMzIsIDB4MUVENSwgMHhGRTMzLCAweDFFRDIsIDB4RkUzNSwgMHgxRURCLA0KLSAgICAweEZFMzYsIDB4MUVEQywgMHhGRTM3LCAweDFFRTEsIDB4RkUzOCwgMHgxRUUyLCAweEZFMzksIDB4MUVERCwNCi0gICAgMHhGRTNBLCAweDFFREUsIDB4RkUzQiwgMHgxRUVCLCAweEZFM0MsIDB4MUVFQywgMHhGRTNELCAweDFFRTUsDQotICAgIDB4RkUzRSwgMHgxRUU2LCAweEZFM0YsIDB4MUVFMywgMHhGRTQwLCAweDFFRTQsIDB4RkU0MSwgMHgxRUU3LA0KLSAgICAweEZFNDIsIDB4MUVFOCwgMHhGRTQzLCAweDFFRTksIDB4RkU0NCwgMHgxRUVBLCAweEZFNDUsIDB4MzE1RiwNCi0gICAgMHhGRTQ2LCAweDMxNjAsIDB4RkU0NywgMHgxRURGLCAweEZFNDgsIDB4MUVFMCwgMHhGRjAxLCAweDAyODIsDQotICAgIDB4RkYwMiwgMHgxRjQ3LCAweEZGMDMsIDB4MDJDQywgMHhGRjA0LCAweDAyQzgsIDB4RkYwNSwgMHgwMkNCLA0KLSAgICAweEZGMDYsIDB4MDJDRCwgMHhGRjA3LCAweDFGNDYsIDB4RkYwOCwgMHgwMkEyLCAweEZGMDksIDB4MDJBMywNCi0gICAgMHhGRjBBLCAweDAyQ0UsIDB4RkYwQiwgMHgwMkI0LCAweEZGMEMsIDB4MDI3QywgMHhGRjBELCAweDAyQjUsDQotICAgIDB4RkYwRSwgMHgwMjdELCAweEZGMEYsIDB4MDI5NywgMHhGRjEwLCAweDAzMEMsIDB4RkYxMSwgMHgwMzBELA0KLSAgICAweEZGMTIsIDB4MDMwRSwgMHhGRjEzLCAweDAzMEYsIDB4RkYxNCwgMHgwMzEwLCAweEZGMTUsIDB4MDMxMSwNCi0gICAgMHhGRjE2LCAweDAzMTIsIDB4RkYxNywgMHgwMzEzLCAweEZGMTgsIDB4MDMxNCwgMHhGRjE5LCAweDAzMTUsDQotICAgIDB4RkYxQSwgMHgwMjdGLCAweEZGMUIsIDB4MDI4MCwgMHhGRjFDLCAweDAyQkIsIDB4RkYxRCwgMHgwMkI5LA0KLSAgICAweEZGMUUsIDB4MDJCQywgMHhGRjFGLCAweDAyODEsIDB4RkYyMCwgMHgwMkNGLCAweEZGMjEsIDB4MDMxNiwNCi0gICAgMHhGRjIyLCAweDAzMTcsIDB4RkYyMywgMHgwMzE4LCAweEZGMjQsIDB4MDMxOSwgMHhGRjI1LCAweDAzMUEsDQotICAgIDB4RkYyNiwgMHgwMzFCLCAweEZGMjcsIDB4MDMxQywgMHhGRjI4LCAweDAzMUQsIDB4RkYyOSwgMHgwMzFFLA0KLSAgICAweEZGMkEsIDB4MDMxRiwgMHhGRjJCLCAweDAzMjAsIDB4RkYyQywgMHgwMzIxLCAweEZGMkQsIDB4MDMyMiwNCi0gICAgMHhGRjJFLCAweDAzMjMsIDB4RkYyRiwgMHgwMzI0LCAweEZGMzAsIDB4MDMyNSwgMHhGRjMxLCAweDAzMjYsDQotICAgIDB4RkYzMiwgMHgwMzI3LCAweEZGMzMsIDB4MDMyOCwgMHhGRjM0LCAweDAzMjksIDB4RkYzNSwgMHgwMzJBLA0KLSAgICAweEZGMzYsIDB4MDMyQiwgMHhGRjM3LCAweDAzMkMsIDB4RkYzOCwgMHgwMzJELCAweEZGMzksIDB4MDMyRSwNCi0gICAgMHhGRjNBLCAweDAzMkYsIDB4RkYzQiwgMHgwMkE2LCAweEZGM0MsIDB4MDI5OCwgMHhGRjNELCAweDAyQTcsDQotICAgIDB4RkYzRSwgMHgwMjg4LCAweEZGM0YsIDB4MDI4QSwgMHhGRjQwLCAweDAyODYsIDB4RkY0MSwgMHgwMzMwLA0KLSAgICAweEZGNDIsIDB4MDMzMSwgMHhGRjQzLCAweDAzMzIsIDB4RkY0NCwgMHgwMzMzLCAweEZGNDUsIDB4MDMzNCwNCi0gICAgMHhGRjQ2LCAweDAzMzUsIDB4RkY0NywgMHgwMzM2LCAweEZGNDgsIDB4MDMzNywgMHhGRjQ5LCAweDAzMzgsDQotICAgIDB4RkY0QSwgMHgwMzM5LCAweEZGNEIsIDB4MDMzQSwgMHhGRjRDLCAweDAzM0IsIDB4RkY0RCwgMHgwMzNDLA0KLSAgICAweEZGNEUsIDB4MDMzRCwgMHhGRjRGLCAweDAzM0UsIDB4RkY1MCwgMHgwMzNGLCAweEZGNTEsIDB4MDM0MCwNCi0gICAgMHhGRjUyLCAweDAzNDEsIDB4RkY1MywgMHgwMzQyLCAweEZGNTQsIDB4MDM0MywgMHhGRjU1LCAweDAzNDQsDQotICAgIDB4RkY1NiwgMHgwMzQ1LCAweEZGNTcsIDB4MDM0NiwgMHhGRjU4LCAweDAzNDcsIDB4RkY1OSwgMHgwMzQ4LA0KLSAgICAweEZGNUEsIDB4MDM0OSwgMHhGRjVCLCAweDAyQTgsIDB4RkY1QywgMHgwMjlCLCAweEZGNUQsIDB4MDJBOSwNCi0gICAgMHhGRjVFLCAweDAyOTksIDB4RkY1RiwgMHgyRjYzLCAweEZGNjAsIDB4MkY2NCwgMHhGRjYxLCAweDAxNDcsDQotICAgIDB4RkY2MiwgMHgwMTQ4LCAweEZGNjMsIDB4MDE0OSwgMHhGRjY0LCAweDAxNEEsIDB4RkY2NSwgMHgwMTRCLA0KLSAgICAweEZGNjYsIDB4MDE0QywgMHhGRjY3LCAweDAxNEQsIDB4RkY2OCwgMHgwMTRFLCAweEZGNjksIDB4MDE0RiwNCi0gICAgMHhGRjZBLCAweDAxNTAsIDB4RkY2QiwgMHgwMTUxLCAweEZGNkMsIDB4MDE1MiwgMHhGRjZELCAweDAxNTMsDQotICAgIDB4RkY2RSwgMHgwMTU0LCAweEZGNkYsIDB4MDE1NSwgMHhGRjcwLCAweDAxNTYsIDB4RkY3MSwgMHgwMTU3LA0KLSAgICAweEZGNzIsIDB4MDE1OCwgMHhGRjczLCAweDAxNTksIDB4RkY3NCwgMHgwMTVBLCAweEZGNzUsIDB4MDE1QiwNCi0gICAgMHhGRjc2LCAweDAxNUMsIDB4RkY3NywgMHgwMTVELCAweEZGNzgsIDB4MDE1RSwgMHhGRjc5LCAweDAxNUYsDQotICAgIDB4RkY3QSwgMHgwMTYwLCAweEZGN0IsIDB4MDE2MSwgMHhGRjdDLCAweDAxNjIsIDB4RkY3RCwgMHgwMTYzLA0KLSAgICAweEZGN0UsIDB4MDE2NCwgMHhGRjdGLCAweDAxNjUsIDB4RkY4MCwgMHgwMTY2LCAweEZGODEsIDB4MDE2NywNCi0gICAgMHhGRjgyLCAweDAxNjgsIDB4RkY4MywgMHgwMTY5LCAweEZGODQsIDB4MDE2QSwgMHhGRjg1LCAweDAxNkIsDQotICAgIDB4RkY4NiwgMHgwMTZDLCAweEZGODcsIDB4MDE2RCwgMHhGRjg4LCAweDAxNkUsIDB4RkY4OSwgMHgwMTZGLA0KLSAgICAweEZGOEEsIDB4MDE3MCwgMHhGRjhCLCAweDAxNzEsIDB4RkY4QywgMHgwMTcyLCAweEZGOEQsIDB4MDE3MywNCi0gICAgMHhGRjhFLCAweDAxNzQsIDB4RkY4RiwgMHgwMTc1LCAweEZGOTAsIDB4MDE3NiwgMHhGRjkxLCAweDAxNzcsDQotICAgIDB4RkY5MiwgMHgwMTc4LCAweEZGOTMsIDB4MDE3OSwgMHhGRjk0LCAweDAxN0EsIDB4RkY5NSwgMHgwMTdCLA0KLSAgICAweEZGOTYsIDB4MDE3QywgMHhGRjk3LCAweDAxN0QsIDB4RkY5OCwgMHgwMTdFLCAweEZGOTksIDB4MDE3RiwNCi0gICAgMHhGRjlBLCAweDAxODAsIDB4RkY5QiwgMHgwMTgxLCAweEZGOUMsIDB4MDE4MiwgMHhGRjlELCAweDAxODMsDQotICAgIDB4RkY5RSwgMHgwMTg0LCAweEZGOUYsIDB4MDE4NSwgMHhGRkUwLCAweDAyQzksIDB4RkZFMSwgMHgwMkNBLA0KLSAgICAweEZGRTIsIDB4MDJFRiwgMHhGRkUzLCAweDAyODksIDB4RkZFNCwgMHgxRjQ1LCAweEZGRTUsIDB4MDJDNywNCi0gICAgMHhGRkU4LCAweDAxNDMsDQotfTsNCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfVW5pSklTX1VURjE2X0hfNV9EV29yZFszODQgKiAzXSA9IHsNCi0gICAgMHhEODQwLCAweERDMEIsIDB4MzYwRiwgMHhEODQwLCAweERDODksIDB4NDM1MSwgMHhEODQwLCAweERDOEEsIDB4MzcxQywNCi0gICAgMHhEODQwLCAweERDQTIsIDB4NDM1OCwgMHhEODQwLCAweERDQTQsIDB4NDM1QiwgMHhEODQwLCAweERDQjAsIDB4Mzc4MSwNCi0gICAgMHhEODQwLCAweERDRjUsIDB4NEU1OSwgMHhEODQwLCAweERENTgsIDB4NEU2QiwgMHhEODQwLCAweEREQTIsIDB4MzYyMSwNCi0gICAgMHhEODQwLCAweERFMTMsIDB4NDM2QiwgMHhEODQwLCAweERGMkIsIDB4NDM4MiwgMHhEODQwLCAweERGNzEsIDB4NDM4QiwNCi0gICAgMHhEODQwLCAweERGODEsIDB4NDM4OSwgMHhEODQwLCAweERGRjksIDB4NDM4RiwgMHhEODQxLCAweERDNEEsIDB4NDM5MSwNCi0gICAgMHhEODQxLCAweEREMDksIDB4NDM5MywgMHhEODQxLCAweEREQjEsIDB4NEU3MCwgMHhEODQxLCAweERERDYsIDB4NDM5QywNCi0gICAgMHhEODQxLCAweERFMTEsIDB4MzdENiwgMHhEODQxLCAweERFMjgsIDB4MzcxOSwgMHhEODQxLCAweERFRUMsIDB4NEU3MywNCi0gICAgMHhEODQxLCAweERGNEYsIDB4NDNBMCwgMHhEODQyLCAweERDMDcsIDB4NDNBNywgMHhEODQyLCAweERDM0EsIDB4NDNBOSwNCi0gICAgMHhEODQyLCAweERDQjksIDB4NDNBRiwgMHhEODQyLCAweEREMEUsIDB4MzREMywgMHhEODQyLCAweEREN0MsIDB4NDNCMywNCi0gICAgMHhEODQyLCAweEREOUQsIDB4NDNCNCwgMHhEODQyLCAweERFNjQsIDB4MzVCQiwgMHhEODQyLCAweERFRDMsIDB4NDNCOSwNCi0gICAgMHhEODQyLCAweERGMUQsIDB4NDNCQywgMHhEODQyLCAweERGOUYsIDB4MzVFQiwgMHhEODQyLCAweERGQjcsIDB4MzU4QSwNCi0gICAgMHhEODQzLCAweERENDUsIDB4NDNDRiwgMHhEODQzLCAweERENTgsIDB4NEU3QSwgMHhEODQzLCAweERERTEsIDB4NDNERCwNCi0gICAgMHhEODQzLCAweERFNjQsIDB4NDNFQywgMHhEODQzLCAweERFNkQsIDB4NDNFNCwgMHhEODQzLCAweERFOTUsIDB4NDNFMywNCi0gICAgMHhEODQzLCAweERGNUYsIDB4NDNFRiwgMHhEODQ0LCAweERFMDEsIDB4NDQwNiwgMHhEODQ0LCAweERFM0QsIDB4MzY4MSwNCi0gICAgMHhEODQ0LCAweERFNTUsIDB4NDQwNywgMHhEODQ0LCAweERFNzQsIDB4NDQwRCwgMHhEODQ0LCAweERFN0IsIDB4NDQwOSwNCi0gICAgMHhEODQ0LCAweERFRDcsIDB4NDQxNSwgMHhEODQ0LCAweERFRTQsIDB4NDQxNCwgMHhEODQ0LCAweERFRkQsIDB4NDQxQiwNCi0gICAgMHhEODQ0LCAweERGMUIsIDB4NDFCMCwgMHhEODQ0LCAweERGMzYsIDB4NDQxRCwgMHhEODQ0LCAweERGNDQsIDB4NDQxRSwNCi0gICAgMHhEODQ0LCAweERGQzQsIDB4NDQyOSwgMHhEODQ1LCAweERDNkQsIDB4NDQzNiwgMHhEODQ1LCAweERDNkUsIDB4NDFCNSwNCi0gICAgMHhEODQ1LCAweERERDcsIDB4NDQ0MCwgMHhEODQ1LCAweERFNDcsIDB4NDQ0OCwgMHhEODQ1LCAweERFQjQsIDB4NDFDNiwNCi0gICAgMHhEODQ1LCAweERGMDYsIDB4NDQ1NCwgMHhEODQ1LCAweERGNDIsIDB4NDQ1NSwgMHhEODQ2LCAweERDQkQsIDB4NDFDMSwNCi0gICAgMHhEODQ2LCAweEREQzMsIDB4NDQ3NSwgMHhEODQ2LCAweERFMUEsIDB4MUU5MSwgMHhEODQ3LCAweERDNTYsIDB4NDQ4MywNCi0gICAgMHhEODQ3LCAweEREMkQsIDB4NDQ4OCwgMHhEODQ3LCAweERENDUsIDB4NDQ4OSwgMHhEODQ3LCAweERENjIsIDB4NDQ4QiwNCi0gICAgMHhEODQ3LCAweERENzgsIDB4NDQ4QSwgMHhEODQ3LCAweEREOTIsIDB4NDQ5NCwgMHhEODQ3LCAweEREOUMsIDB4NDQ5MCwNCi0gICAgMHhEODQ3LCAweEREQTEsIDB4NDQ4RiwgMHhEODQ3LCAweEREQjcsIDB4NDQ5NywgMHhEODQ3LCAweERERTAsIDB4NDQ5OSwNCi0gICAgMHhEODQ3LCAweERFMzMsIDB4NDQ5QSwgMHhEODQ3LCAweERFMzQsIDB4NDFDRCwgMHhEODQ3LCAweERGMUUsIDB4NDRBNywNCi0gICAgMHhEODQ3LCAweERGNzYsIDB4NDRBRSwgMHhEODQ3LCAweERGRkEsIDB4NDRCMSwgMHhEODQ4LCAweEREN0IsIDB4NDRCRiwNCi0gICAgMHhEODQ4LCAweERFMTgsIDB4NEFBMSwgMHhEODQ4LCAweERGMUUsIDB4NDRDNSwgMHhEODQ4LCAweERGQUQsIDB4NDRDOCwNCi0gICAgMHhEODQ5LCAweERFMDksIDB4M0M1MywgMHhEODQ5LCAweERFRjMsIDB4NDRFMCwgMHhEODRBLCAweERDNUIsIDB4NDRFRiwNCi0gICAgMHhEODRBLCAweERDQUIsIDB4NDRGNSwgMHhEODRBLCAweEREOEYsIDB4NDRGOSwgMHhEODRBLCAweERFQjgsIDB4NDUwMywNCi0gICAgMHhEODRBLCAweERGNDYsIDB4NDUxMCwgMHhEODRBLCAweERGNEYsIDB4NDUwNywgMHhEODRBLCAweERGNTAsIDB4NDUwOCwNCi0gICAgMHhEODRBLCAweERGQTYsIDB4NDUxMywgMHhEODRCLCAweERDMUQsIDB4NDUxMiwgMHhEODRCLCAweERDMjQsIDB4NDUxNiwNCi0gICAgMHhEODRCLCAweERERTEsIDB4NDUyRSwgMHhEODRCLCAweERFNDIsIDB4NEU5QywgMHhEODRCLCAweERGRUIsIDB4NEVBMiwNCi0gICAgMHhEODRDLCAweEREQjYsIDB4NDU1MCwgMHhEODRDLCAweEREQzMsIDB4NDU0RSwgMHhEODRDLCAweEREQzQsIDB4NDFGOCwNCi0gICAgMHhEODRDLCAweERERjUsIDB4NDU0RiwgMHhEODRDLCAweERGNzIsIDB4NDU2MSwgMHhEODRDLCAweERGRDAsIDB4NDU2OCwNCi0gICAgMHhEODRDLCAweERGRDIsIDB4NDU2NCwgMHhEODRDLCAweERGRDMsIDB4NDU2MywgMHhEODRDLCAweERGRDUsIDB4NDU2QSwNCi0gICAgMHhEODRDLCAweERGREEsIDB4NDU2QywgMHhEODRDLCAweERGREYsIDB4NDU2RSwgMHhEODRDLCAweERGRTQsIDB4NDU2OSwNCi0gICAgMHhEODRDLCAweERGRkUsIDB4M0MzRSwgMHhEODRELCAweERDNEEsIDB4NDU3NiwgMHhEODRELCAweERDNEIsIDB4NDU3OCwNCi0gICAgMHhEODRELCAweERDNTEsIDB4NDU3NywgMHhEODRELCAweERDNjUsIDB4NDU3QywgMHhEODRELCAweERDRTQsIDB4NDU5NiwNCi0gICAgMHhEODRELCAweERENUEsIDB4NDU5NywgMHhEODRELCAweEREOTQsIDB4NDVBMywgMHhEODRELCAweEREQzQsIDB4NDIwOSwNCi0gICAgMHhEODRELCAweERFMzgsIDB4NDVCMywgMHhEODRELCAweERFMzksIDB4NDVCMSwgMHhEODRELCAweERFM0EsIDB4M0MyMSwNCi0gICAgMHhEODRELCAweERFNDcsIDB4NDVCMiwgMHhEODRELCAweERGMEMsIDB4NDVDNywgMHhEODRELCAweERGMUMsIDB4NDVCRSwNCi0gICAgMHhEODRELCAweERGM0YsIDB4NDIxMiwgMHhEODRELCAweERGNjMsIDB4NDIxNCwgMHhEODRELCAweERGNjQsIDB4NDVDQiwNCi0gICAgMHhEODRELCAweERGRTcsIDB4NDVEMywgMHhEODRELCAweERGRkYsIDB4NDVEMiwgMHhEODRFLCAweERDMjQsIDB4NDVEOCwNCi0gICAgMHhEODRFLCAweERDM0QsIDB4NDVERCwgMHhEODRFLCAweERFOTgsIDB4NDVFOSwgMHhEODRGLCAweERDN0YsIDB4NDVGNiwNCi0gICAgMHhEODRGLCAweERDQkUsIDB4MzdENSwgMHhEODRGLCAweERDRkUsIDB4MzY1MCwgMHhEODRGLCAweEREMDAsIDB4NDYwNSwNCi0gICAgMHhEODRGLCAweEREMEUsIDB4NDdEQSwgMHhEODRGLCAweERENDAsIDB4NDYxNiwgMHhEODRGLCAweERERDMsIDB4NDYxOSwNCi0gICAgMHhEODRGLCAweERERjksIDB4NDYxOCwgMHhEODRGLCAweERERkEsIDB4NDYxNywgMHhEODRGLCAweERGN0UsIDB4NDYzRiwNCi0gICAgMHhEODUwLCAweERDNEIsIDB4NEVDOCwgMHhEODUwLCAweERDOTYsIDB4NDY0RSwgMHhEODUwLCAweEREMDMsIDB4NDY1MywNCi0gICAgMHhEODUwLCAweEREQzYsIDB4NDY1RiwgMHhEODUwLCAweERERkUsIDB4NDY2MiwgMHhEODUwLCAweERFRUUsIDB4MzdDQSwNCi0gICAgMHhEODUwLCAweERGQkMsIDB4NDY3NywgMHhEODUwLCAweERGRDAsIDB4MUU5RSwgMHhEODUxLCAweERFMjksIDB4NDY4MSwNCi0gICAgMHhEODUxLCAweERFQTUsIDB4NDY4NywgMHhEODUxLCAweERGRjEsIDB4NDI0QSwgMHhEODUyLCAweERDOTYsIDB4NDY5RCwNCi0gICAgMHhEODUyLCAweERFNEQsIDB4NDZCOCwgMHhEODUyLCAweERGNTYsIDB4NDZDNSwgMHhEODUyLCAweERGNkYsIDB4NDZDNywNCi0gICAgMHhEODUzLCAweERDMTYsIDB4NDZDQywgMHhEODUzLCAweEREMTQsIDB4MzZBQiwgMHhEODUzLCAweERFMDQsIDB4NEU1QSwNCi0gICAgMHhEODUzLCAweERFMEUsIDB4NDZFRSwgMHhEODUzLCAweERFMzcsIDB4NDZGMiwgMHhEODUzLCAweERFNkEsIDB4NDZGNywNCi0gICAgMHhEODUzLCAweERFOEIsIDB4NDZGQSwgMHhEODUzLCAweERGRjIsIDB4NEU1QiwgMHhEODU0LCAweERDNEEsIDB4NDcwNSwNCi0gICAgMHhEODU0LCAweERDNTUsIDB4NDcwNywgMHhEODU0LCAweEREMjIsIDB4NDcwOSwgMHhEODU0LCAweEREQTksIDB4NDcwRSwNCi0gICAgMHhEODU0LCAweEREQ0QsIDB4NDcxMSwgMHhEODU0LCAweERERTUsIDB4NDcxMCwgMHhEODU0LCAweERFMUUsIDB4NDcxMywNCi0gICAgMHhEODU0LCAweERFNEMsIDB4NDcxNSwgMHhEODU1LCAweERDMkUsIDB4NDcyMSwgMHhEODU1LCAweERDOEUsIDB4NDI2RCwNCi0gICAgMHhEODU1LCAweERDRDksIDB4NDcyOSwgMHhEODU1LCAweEREMEUsIDB4NDI3MSwgMHhEODU1LCAweEREQTcsIDB4NDczNSwNCi0gICAgMHhEODU1LCAweERFN0YsIDB4MzZGQiwgMHhEODU1LCAweERGNzEsIDB4NDI3QSwgMHhEODU1LCAweERGQTksIDB4NDc0OCwNCi0gICAgMHhEODU1LCAweERGQjQsIDB4NDc0OSwgMHhEODU2LCAweERDNzQsIDB4MURGNiwgMHhEODU2LCAweEREQzQsIDB4NDI4MCwNCi0gICAgMHhEODU2LCAweEREQ0MsIDB4NEU5MCwgMHhEODU2LCAweERERDQsIDB4NDc1QywgMHhEODU2LCAweERFRTMsIDB4NDc2NSwNCi0gICAgMHhEODU2LCAweERFRTQsIDB4NDc2NCwgMHhEODU2LCAweERFRjEsIDB4NDc2NiwgMHhEODU2LCAweERGQjIsIDB4NDc3NSwNCi0gICAgMHhEODU3LCAweERDNEIsIDB4NDc3RSwgMHhEODU3LCAweERDNjQsIDB4NDc3RiwgMHhEODU3LCAweEREQTEsIDB4NDI4OSwNCi0gICAgMHhEODU3LCAweERFMkUsIDB4NDc4RSwgMHhEODU3LCAweERFNTYsIDB4NDc4RiwgMHhEODU3LCAweERFNjIsIDB4NDc5MiwNCi0gICAgMHhEODU3LCAweERFNjUsIDB4NDc5MCwgMHhEODU3LCAweERFQzIsIDB4NDc5NywgMHhEODU3LCAweERFRDgsIDB4NDc5NSwNCi0gICAgMHhEODU3LCAweERFRTgsIDB4NDc5OSwgMHhEODU3LCAweERGMjMsIDB4NDc5QSwgMHhEODU3LCAweERGNUMsIDB4NDc5QywNCi0gICAgMHhEODU3LCAweERGRDQsIDB4NDdBMywgMHhEODU3LCAweERGRTAsIDB4NDdBMiwgMHhEODU3LCAweERGRkIsIDB4NDdBOSwNCi0gICAgMHhEODU4LCAweERDMEMsIDB4NDdBOCwgMHhEODU4LCAweERDMTcsIDB4NDdCMCwgMHhEODU4LCAweERDNjAsIDB4NDdCMywNCi0gICAgMHhEODU4LCAweERDRUQsIDB4NDdCRCwgMHhEODU4LCAweERFNzAsIDB4NDdEMSwgMHhEODU4LCAweERFODYsIDB4NDdEMiwNCi0gICAgMHhEODU4LCAweERGNEMsIDB4NEY1NywgMHhEODU5LCAweERDMDIsIDB4NDdERSwgMHhEODU5LCAweERFN0UsIDB4NDdGMCwNCi0gICAgMHhEODU5LCAweERFQjAsIDB4MzcxNCwgMHhEODU5LCAweERGMUQsIDB4NDdGRSwgMHhEODVBLCAweERDREQsIDB4NDgwQywNCi0gICAgMHhEODVBLCAweERDRUEsIDB4NDgwRSwgMHhEODVBLCAweERENTEsIDB4MzU0RSwgMHhEODVBLCAweERENkYsIDB4NDgxMiwNCi0gICAgMHhEODVBLCAweEREOTksIDB4MzczNiwgMHhEODVBLCAweEREREQsIDB4NDgxNCwgMHhEODVBLCAweERFMUUsIDB4NDgxNywNCi0gICAgMHhEODVBLCAweERFNTgsIDB4NDgxQiwgMHhEODVBLCAweERFOEMsIDB4NDgxRiwgMHhEODVBLCAweERFQjcsIDB4NDgyMiwNCi0gICAgMHhEODVBLCAweERFRkYsIDB4NDJBNywgMHhEODVCLCAweERDMjksIDB4NDQ0NiwgMHhEODVCLCAweERDNzMsIDB4NDg0QSwNCi0gICAgMHhEODVCLCAweERDOUUsIDB4NEVFRSwgMHhEODVCLCAweERDREQsIDB4NDg1MywgMHhEODVCLCAweERFNDAsIDB4NDJDMSwNCi0gICAgMHhEODVCLCAweERFNjUsIDB4NDg2MCwgMHhEODVCLCAweERGOTQsIDB4NDg3MCwgMHhEODVCLCAweERGRjYsIDB4NDg3QSwNCi0gICAgMHhEODVCLCAweERGRjcsIDB4NDg3QiwgMHhEODVCLCAweERGRjgsIDB4NDg3OSwgMHhEODVDLCAweERDRjQsIDB4NDJDRiwNCi0gICAgMHhEODVDLCAweEREMEQsIDB4NDg4QiwgMHhEODVDLCAweEREMzksIDB4NDg4RSwgMHhEODVDLCAweERGREEsIDB4NDhCMywNCi0gICAgMHhEODVDLCAweERGREIsIDB4NDhCMiwgMHhEODVDLCAweERGRkUsIDB4NDhCOSwgMHhEODVELCAweERDMTAsIDB4NDhCQywNCi0gICAgMHhEODVELCAweERDNDksIDB4NDhDMCwgMHhEODVELCAweERFMTQsIDB4NDhDRSwgMHhEODVELCAweERFMTUsIDB4NDhDRCwNCi0gICAgMHhEODVELCAweERFMzEsIDB4NDhEMCwgMHhEODVELCAweERFODQsIDB4NDJERCwgMHhEODVELCAweERFOTMsIDB4NDhENSwNCi0gICAgMHhEODVELCAweERGMEUsIDB4NDhEQSwgMHhEODVELCAweERGMjMsIDB4NDhEQywgMHhEODVELCAweERGNTIsIDB4NDhFMCwNCi0gICAgMHhEODVFLCAweEREODUsIDB4NDhGMCwgMHhEODVFLCAweEREQjQsIDB4NEVBNSwgMHhEODVFLCAweERFODQsIDB4NDhGQywNCi0gICAgMHhEODVFLCAweERGQjMsIDB4NDkwQiwgMHhEODVFLCAweERGQkUsIDB4NDkwRCwgMHhEODVFLCAweERGQzcsIDB4NDkwRSwNCi0gICAgMHhEODVGLCAweERDM0MsIDB4NEVGQywgMHhEODVGLCAweERDQjgsIDB4NDkxNCwgMHhEODVGLCAweERENzMsIDB4NEU1QywNCi0gICAgMHhEODVGLCAweEREQTAsIDB4NDkxQywgMHhEODVGLCAweERFMTAsIDB4NDkxRSwgMHhEODVGLCAweERGQjcsIDB4MzY0QSwNCi0gICAgMHhEODYwLCAweERDOEEsIDB4NDkyNywgMHhEODYwLCAweERDQkIsIDB4NDkyRCwgMHhEODYwLCAweERFNzcsIDB4NDJGNCwNCi0gICAgMHhEODYwLCAweERFODIsIDB4NDkzOSwgMHhEODYwLCAweERFRjMsIDB4NDkzQiwgMHhEODYwLCAweERGQ0QsIDB4NDJGQSwNCi0gICAgMHhEODYxLCAweERDMEMsIDB4NDk0MiwgMHhEODYxLCAweERDNTUsIDB4NDk0NSwgMHhEODYxLCAweERENkIsIDB4NDk1MiwNCi0gICAgMHhEODYxLCAweEREQzgsIDB4NDk1NSwgMHhEODYxLCAweEREQzksIDB4NDk1NiwgMHhEODYxLCAweERFRDcsIDB4NDk2MCwNCi0gICAgMHhEODYxLCAweERFRkEsIDB4NDk2MywgMHhEODYyLCAweERENDYsIDB4NDk3QywgMHhEODYyLCAweERENDksIDB4NDk3QiwNCi0gICAgMHhEODYyLCAweERENkIsIDB4NDk4MSwgMHhEODYyLCAweEREODcsIDB4MzdBRCwgMHhEODYyLCAweEREODgsIDB4NDk4OCwNCi0gICAgMHhEODYyLCAweEREQkEsIDB4NDk5MiwgMHhEODYyLCAweEREQkIsIDB4NDk5MywgMHhEODYyLCAweERFMUUsIDB4NDk5QiwNCi0gICAgMHhEODYyLCAweERFMjksIDB4NDk5QywgMHhEODYyLCAweERFNDMsIDB4NDlBMCwgMHhEODYyLCAweERFNzEsIDB4NDk5RiwNCi0gICAgMHhEODYyLCAweERFOTksIDB4NDlBNywgMHhEODYyLCAweERFQ0QsIDB4NDlBOCwgMHhEODYyLCAweERFREQsIDB4NDlBRiwNCi0gICAgMHhEODYyLCAweERFRTQsIDB4NDlBRSwgMHhEODYyLCAweERGQzEsIDB4NDlCQSwgMHhEODYyLCAweERGRUYsIDB4NDlCQiwNCi0gICAgMHhEODYzLCAweERDREQsIDB4MUREOSwgMHhEODYzLCAweEREMTAsIDB4NDlDMiwgMHhEODYzLCAweERENzEsIDB4NDlDMywNCi0gICAgMHhEODYzLCAweERERkIsIDB4NDlDNSwgMHhEODYzLCAweERFMTcsIDB4MzdCMCwgMHhEODYzLCAweERFMUYsIDB4NDlDNiwNCi0gICAgMHhEODYzLCAweERFMzYsIDB4NDlDQSwgMHhEODYzLCAweERFODksIDB4NDlDRCwgMHhEODYzLCAweERFRUIsIDB4NDlDRiwNCi0gICAgMHhEODYzLCAweERFRjYsIDB4MURGOSwgMHhEODYzLCAweERGMzIsIDB4NDlEMSwgMHhEODYzLCAweERGRjgsIDB4NDlENywNCi0gICAgMHhEODY0LCAweERFQTAsIDB4NDlFNSwgMHhEODY0LCAweERFQjEsIDB4NDlFNiwgMHhEODY1LCAweERDOTAsIDB4NDlGNywNCi0gICAgMHhEODY1LCAweEREQ0YsIDB4NEEwMCwgMHhEODY1LCAweERFN0YsIDB4MzYxOSwgMHhEODY1LCAweERFRjAsIDB4NEEwRiwNCi0gICAgMHhEODY1LCAweERGMTksIDB4NEExMiwgMHhEODY1LCAweERGNTAsIDB4NEExNiwgMHhEODY2LCAweERDQzYsIDB4NEEyNywNCi0gICAgMHhEODY2LCAweERFNzIsIDB4NEEzOSwgMHhEODY3LCAweERENEIsIDB4MzU5NSwgMHhEODY3LCAweEREREIsIDB4NEE1MiwNCi0gICAgMHhEODY3LCAweERFMTUsIDB4NEE1QywgMHhEODY3LCAweERFM0QsIDB4NEY1QiwgMHhEODY3LCAweERFNDksIDB4NEE1RSwNCi0gICAgMHhEODY3LCAweERFOEEsIDB4NEE1RCwgMHhEODY3LCAweERFQzQsIDB4NEE2NiwgMHhEODY3LCAweERFREIsIDB4NEE2RSwNCi0gICAgMHhEODY3LCAweERFRTksIDB4NEE2QiwgMHhEODY3LCAweERGQ0UsIDB4NEE3RiwgMHhEODY3LCAweERGRDcsIDB4NEE3RiwNCi0gICAgMHhEODY4LCAweERDMUEsIDB4NEE4NSwgMHhEODY4LCAweERDMkYsIDB4NEE4MywgMHhEODY4LCAweERDODIsIDB4NEE4QywNCi0gICAgMHhEODY4LCAweERDRjksIDB4NEE4QiwgMHhEODY4LCAweEREOTAsIDB4NDM0QiwgMHhEODY4LCAweERFQjIsIDB4NEU2OCwNCi0gICAgMHhEODY4LCAweERGOEMsIDB4NEFBNSwgMHhEODY5LCAweERDMzcsIDB4NEFBNywgMHhEODY5LCAweERERjEsIDB4NEFCMywNCi0gICAgMHhEODY5LCAweERFMDIsIDB4NEFCNSwgMHhEODY5LCAweERFMUEsIDB4NEY1QywgMHhEODY5LCAweERFQjIsIDB4NEFCOSwNCi0gICAgMHhEODdFLCAweERDMDQsIDB4M0MxQywgMHhEODdFLCAweERDMEYsIDB4MUU4NiwgMHhEODdFLCAweERDMTUsIDB4NEU1RCwNCi0gICAgMHhEODdFLCAweERDMTgsIDB4MUU4OSwgMHhEODdFLCAweERDMUEsIDB4MzY4MiwgMHhEODdFLCAweERDMjIsIDB4MzU3NCwNCi0gICAgMHhEODdFLCAweERDMjgsIDB4MzVFRiwgMHhEODdFLCAweERDMkMsIDB4MzcxRCwgMHhEODdFLCAweERDMzMsIDB4MzU5NywNCi0gICAgMHhEODdFLCAweERDM0YsIDB4MzVGNywgMHhEODdFLCAweERDNDYsIDB4NEU1RSwgMHhEODdFLCAweERDNTIsIDB4MzYxMSwNCi0gICAgMHhEODdFLCAweERDNjIsIDB4MzZBRSwgMHhEODdFLCAweERDNkQsIDB4MzcyOSwgMHhEODdFLCAweERDNzMsIDB4MzYwOCwNCi0gICAgMHhEODdFLCAweERDNzcsIDB4MUU0QSwgMHhEODdFLCAweERDODQsIDB4MUUzNiwgMHhEODdFLCAweERDOTksIDB4NEU1RiwNCi0gICAgMHhEODdFLCAweERDOUEsIDB4MzY2OCwgMHhEODdFLCAweERDQTYsIDB4NEU2MCwgMHhEODdFLCAweERDQUMsIDB4MzVCNiwNCi0gICAgMHhEODdFLCAweERDQjIsIDB4MzYyQiwgMHhEODdFLCAweERDQjYsIDB4MzczMSwgMHhEODdFLCAweERDRDMsIDB4MUU4OCwNCi0gICAgMHhEODdFLCAweERDREIsIDB4MzczQywgMHhEODdFLCAweERDREMsIDB4MUUwRiwgMHhEODdFLCAweERDRTEsIDB4MzdEMywNCi0gICAgMHhEODdFLCAweERDRTUsIDB4NEU2MSwgMHhEODdFLCAweERDRUEsIDB4MzU2RiwgMHhEODdFLCAweERDRUQsIDB4MURGMSwNCi0gICAgMHhEODdFLCAweERDRkMsIDB4MzU1OCwgMHhEODdFLCAweEREMDMsIDB4MzVDOCwgMHhEODdFLCAweEREMEIsIDB4MzVFOSwNCi0gICAgMHhEODdFLCAweEREMEYsIDB4MzY2QywgMHhEODdFLCAweEREMUEsIDB4MzY1QywgMHhEODdFLCAweEREMjAsIDB4MUU5RiwNCi0gICAgMHhEODdFLCAweEREMjEsIDB4MzVGMSwgMHhEODdFLCAweERENDUsIDB4MzQyRCwgMHhEODdFLCAweERENDcsIDB4MzYxRSwNCi0gICAgMHhEODdFLCAweERENkMsIDB4Mzc2NCwgMHhEODdFLCAweEREOTUsIDB4MzU2NiwgMHhEODdFLCAweERERDAsIDB4MzZGNCwNCi0gICAgMHhEODdFLCAweEREREUsIDB4NEU2MiwgMHhEODdFLCAweEREREYsIDB4MzZGNSwgMHhEODdFLCAweERERjQsIDB4M0JBNSwNCi19Ow0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBzaG9ydCBnX0ZYQ01BUF9VbmlKSVNfVVRGMTZfSF81WzEzMjQxICogMl0gPSB7CisgICAgMHgwMDIwLCAweDAwMDEsIDB4MDAyMSwgMHgwMDAyLCAweDAwMjIsIDB4MDAwMywgMHgwMDIzLCAweDAwMDQsCisgICAgMHgwMDI0LCAweDAwMDUsIDB4MDAyNSwgMHgwMDA2LCAweDAwMjYsIDB4MDAwNywgMHgwMDI3LCAweDAwMDgsCisgICAgMHgwMDI4LCAweDAwMDksIDB4MDAyOSwgMHgwMDBBLCAweDAwMkEsIDB4MDAwQiwgMHgwMDJCLCAweDAwMEMsCisgICAgMHgwMDJDLCAweDAwMEQsIDB4MDAyRCwgMHgwMDBFLCAweDAwMkUsIDB4MDAwRiwgMHgwMDJGLCAweDAwMTAsCisgICAgMHgwMDMwLCAweDAwMTEsIDB4MDAzMSwgMHgwMDEyLCAweDAwMzIsIDB4MDAxMywgMHgwMDMzLCAweDAwMTQsCisgICAgMHgwMDM0LCAweDAwMTUsIDB4MDAzNSwgMHgwMDE2LCAweDAwMzYsIDB4MDAxNywgMHgwMDM3LCAweDAwMTgsCisgICAgMHgwMDM4LCAweDAwMTksIDB4MDAzOSwgMHgwMDFBLCAweDAwM0EsIDB4MDAxQiwgMHgwMDNCLCAweDAwMUMsCisgICAgMHgwMDNDLCAweDAwMUQsIDB4MDAzRCwgMHgwMDFFLCAweDAwM0UsIDB4MDAxRiwgMHgwMDNGLCAweDAwMjAsCisgICAgMHgwMDQwLCAweDAwMjEsIDB4MDA0MSwgMHgwMDIyLCAweDAwNDIsIDB4MDAyMywgMHgwMDQzLCAweDAwMjQsCisgICAgMHgwMDQ0LCAweDAwMjUsIDB4MDA0NSwgMHgwMDI2LCAweDAwNDYsIDB4MDAyNywgMHgwMDQ3LCAweDAwMjgsCisgICAgMHgwMDQ4LCAweDAwMjksIDB4MDA0OSwgMHgwMDJBLCAweDAwNEEsIDB4MDAyQiwgMHgwMDRCLCAweDAwMkMsCisgICAgMHgwMDRDLCAweDAwMkQsIDB4MDA0RCwgMHgwMDJFLCAweDAwNEUsIDB4MDAyRiwgMHgwMDRGLCAweDAwMzAsCisgICAgMHgwMDUwLCAweDAwMzEsIDB4MDA1MSwgMHgwMDMyLCAweDAwNTIsIDB4MDAzMywgMHgwMDUzLCAweDAwMzQsCisgICAgMHgwMDU0LCAweDAwMzUsIDB4MDA1NSwgMHgwMDM2LCAweDAwNTYsIDB4MDAzNywgMHgwMDU3LCAweDAwMzgsCisgICAgMHgwMDU4LCAweDAwMzksIDB4MDA1OSwgMHgwMDNBLCAweDAwNUEsIDB4MDAzQiwgMHgwMDVCLCAweDAwM0MsCisgICAgMHgwMDVDLCAweDAwNjEsIDB4MDA1RCwgMHgwMDNFLCAweDAwNUUsIDB4MDAzRiwgMHgwMDVGLCAweDAwNDAsCisgICAgMHgwMDYwLCAweDAwNDEsIDB4MDA2MSwgMHgwMDQyLCAweDAwNjIsIDB4MDA0MywgMHgwMDYzLCAweDAwNDQsCisgICAgMHgwMDY0LCAweDAwNDUsIDB4MDA2NSwgMHgwMDQ2LCAweDAwNjYsIDB4MDA0NywgMHgwMDY3LCAweDAwNDgsCisgICAgMHgwMDY4LCAweDAwNDksIDB4MDA2OSwgMHgwMDRBLCAweDAwNkEsIDB4MDA0QiwgMHgwMDZCLCAweDAwNEMsCisgICAgMHgwMDZDLCAweDAwNEQsIDB4MDA2RCwgMHgwMDRFLCAweDAwNkUsIDB4MDA0RiwgMHgwMDZGLCAweDAwNTAsCisgICAgMHgwMDcwLCAweDAwNTEsIDB4MDA3MSwgMHgwMDUyLCAweDAwNzIsIDB4MDA1MywgMHgwMDczLCAweDAwNTQsCisgICAgMHgwMDc0LCAweDAwNTUsIDB4MDA3NSwgMHgwMDU2LCAweDAwNzYsIDB4MDA1NywgMHgwMDc3LCAweDAwNTgsCisgICAgMHgwMDc4LCAweDAwNTksIDB4MDA3OSwgMHgwMDVBLCAweDAwN0EsIDB4MDA1QiwgMHgwMDdCLCAweDAwNUMsCisgICAgMHgwMDdDLCAweDAwNjMsIDB4MDA3RCwgMHgwMDVFLCAweDAwN0UsIDB4MDA2NCwgMHgwMEEwLCAweDAwMDEsCisgICAgMHgwMEExLCAweDAwNjUsIDB4MDBBMiwgMHgwMDY2LCAweDAwQTMsIDB4MDA2NywgMHgwMEE0LCAweDAwNkIsCisgICAgMHgwMEE1LCAweDAwM0QsIDB4MDBBNiwgMHgwMDVELCAweDAwQTcsIDB4MDJEMCwgMHgwMEE4LCAweDAyODcsCisgICAgMHgwMEE5LCAweDAwOTgsIDB4MDBBQSwgMHgwMDhDLCAweDAwQUIsIDB4MDA2RCwgMHgwMEFDLCAweDAwOTksCisgICAgMHgwMEFELCAweDAwOTcsIDB4MDBBRSwgMHgwMDlBLCAweDAwQUYsIDB4MDA4MSwgMHgwMEIwLCAweDAyQzMsCisgICAgMHgwMEIxLCAweDAyQjYsIDB4MDBCMiwgMHgwMDlELCAweDAwQjMsIDB4MDA5RSwgMHgwMEI0LCAweDAyODUsCisgICAgMHgwMEI1LCAweDAwOUYsIDB4MDBCNiwgMHgwMzBBLCAweDAwQjcsIDB4MDA3NSwgMHgwMEI4LCAweDAwODYsCisgICAgMHgwMEI5LCAweDAwQTAsIDB4MDBCQSwgMHgwMDkwLCAweDAwQkIsIDB4MDA3QiwgMHgwMEJDLCAweDAwQTEsCisgICAgMHgwMEJELCAweDAwQTIsIDB4MDBCRSwgMHgwMEEzLCAweDAwQkYsIDB4MDA3RSwgMHgwMEMwLCAweDAwQTQsCisgICAgMHgwMEMxLCAweDAwQTUsIDB4MDBDMiwgMHgwMEE2LCAweDAwQzMsIDB4MDBBNywgMHgwMEM0LCAweDAwQTgsCisgICAgMHgwMEM1LCAweDAwQTksIDB4MDBDNiwgMHgwMDhCLCAweDAwQzcsIDB4MDBBQSwgMHgwMEM4LCAweDAwQUIsCisgICAgMHgwMEM5LCAweDAwQUMsIDB4MDBDQSwgMHgwMEFELCAweDAwQ0IsIDB4MDBBRSwgMHgwMENDLCAweDAwQUYsCisgICAgMHgwMENELCAweDAwQjAsIDB4MDBDRSwgMHgwMEIxLCAweDAwQ0YsIDB4MDBCMiwgMHgwMEQwLCAweDAwQjMsCisgICAgMHgwMEQxLCAweDAwQjQsIDB4MDBEMiwgMHgwMEI1LCAweDAwRDMsIDB4MDBCNiwgMHgwMEQ0LCAweDAwQjcsCisgICAgMHgwMEQ1LCAweDAwQjgsIDB4MDBENiwgMHgwMEI5LCAweDAwRDcsIDB4MDJCNywgMHgwMEQ4LCAweDAwOEUsCisgICAgMHgwMEQ5LCAweDAwQkIsIDB4MDBEQSwgMHgwMEJDLCAweDAwREIsIDB4MDBCRCwgMHgwMERDLCAweDAwQkUsCisgICAgMHgwMERELCAweDAwQkYsIDB4MDBERSwgMHgwMEMwLCAweDAwREYsIDB4MDA5NiwgMHgwMEUwLCAweDAwQzEsCisgICAgMHgwMEUxLCAweDAwQzIsIDB4MDBFMiwgMHgwMEMzLCAweDAwRTMsIDB4MDBDNCwgMHgwMEU0LCAweDAwQzUsCisgICAgMHgwMEU1LCAweDAwQzYsIDB4MDBFNiwgMHgwMDkxLCAweDAwRTcsIDB4MDBDNywgMHgwMEU4LCAweDAwQzgsCisgICAgMHgwMEU5LCAweDAwQzksIDB4MDBFQSwgMHgwMENBLCAweDAwRUIsIDB4MDBDQiwgMHgwMEVDLCAweDAwQ0MsCisgICAgMHgwMEVELCAweDAwQ0QsIDB4MDBFRSwgMHgwMENFLCAweDAwRUYsIDB4MDBDRiwgMHgwMEYwLCAweDAwRDAsCisgICAgMHgwMEYxLCAweDAwRDEsIDB4MDBGMiwgMHgwMEQyLCAweDAwRjMsIDB4MDBEMywgMHgwMEY0LCAweDAwRDQsCisgICAgMHgwMEY1LCAweDAwRDUsIDB4MDBGNiwgMHgwMEQ2LCAweDAwRjcsIDB4MDJCOCwgMHgwMEY4LCAweDAwOTQsCisgICAgMHgwMEY5LCAweDAwRDgsIDB4MDBGQSwgMHgwMEQ5LCAweDAwRkIsIDB4MDBEQSwgMHgwMEZDLCAweDAwREIsCisgICAgMHgwMEZELCAweDAwREMsIDB4MDBGRSwgMHgwMERELCAweDAwRkYsIDB4MDBERSwgMHgwMTAwLCAweDI0OTYsCisgICAgMHgwMTAxLCAweDI0OTEsIDB4MDEwMiwgMHgzRDhDLCAweDAxMDMsIDB4M0Q5OSwgMHgwMTA0LCAweDNENzksCisgICAgMHgwMTA1LCAweDNEODEsIDB4MDEwNiwgMHgzRDhFLCAweDAxMDcsIDB4M0Q5QiwgMHgwMTA4LCAweDNEQTcsCisgICAgMHgwMTA5LCAweDNEQUQsIDB4MDEwQywgMHgzRDhGLCAweDAxMEQsIDB4M0Q5QywgMHgwMTBFLCAweDNEOTEsCisgICAgMHgwMTBGLCAweDNEOUUsIDB4MDExMSwgMHgzRDlGLCAweDAxMTIsIDB4MjQ5OSwgMHgwMTEzLCAweDI0OTQsCisgICAgMHgwMTE4LCAweDNEOTAsIDB4MDExOSwgMHgzRDlELCAweDAxMUEsIDB4MjRCMywgMHgwMTFCLCAweDI0QkYsCisgICAgMHgwMTFDLCAweDNEQTgsIDB4MDExRCwgMHgzREFFLCAweDAxMjQsIDB4M0RBOSwgMHgwMTI1LCAweDNEQUYsCisgICAgMHgwMTI3LCAweDNEQzgsIDB4MDEyOCwgMHgyNEI4LCAweDAxMjksIDB4MjRDNCwgMHgwMTJBLCAweDI0OTcsCisgICAgMHgwMTJCLCAweDI0OTIsIDB4MDEzMSwgMHgwMDkyLCAweDAxMzQsIDB4M0RBQSwgMHgwMTM1LCAweDNEQjAsCisgICAgMHgwMTM5LCAweDNEOEQsIDB4MDEzQSwgMHgzRDlBLCAweDAxM0QsIDB4M0Q3QiwgMHgwMTNFLCAweDNEODMsCisgICAgMHgwMTQxLCAweDAwOEQsIDB4MDE0MiwgMHgwMDkzLCAweDAxNDMsIDB4M0Q5MiwgMHgwMTQ0LCAweDNEQTAsCisgICAgMHgwMTQ3LCAweDNEOTMsIDB4MDE0OCwgMHgzREExLCAweDAxNEIsIDB4MjREQywgMHgwMTRDLCAweDI0OUEsCisgICAgMHgwMTRELCAweDI0OTUsIDB4MDE1MCwgMHgzRDk0LCAweDAxNTEsIDB4M0RBMiwgMHgwMTUyLCAweDAwOEYsCisgICAgMHgwMTUzLCAweDAwOTUsIDB4MDE1NCwgMHgzRDhCLCAweDAxNTUsIDB4M0Q5OCwgMHgwMTU4LCAweDNEOTUsCisgICAgMHgwMTU5LCAweDNEQTMsIDB4MDE1QSwgMHgzRDdDLCAweDAxNUIsIDB4M0Q4NCwgMHgwMTVDLCAweDNEQUIsCisgICAgMHgwMTVELCAweDNEQjEsIDB4MDE1RSwgMHgzRDdELCAweDAxNUYsIDB4M0Q4NiwgMHgwMTYwLCAweDAwREYsCisgICAgMHgwMTYxLCAweDAwRTMsIDB4MDE2MiwgMHgzRDk3LCAweDAxNjMsIDB4M0RBNSwgMHgwMTY0LCAweDNEN0UsCisgICAgMHgwMTY1LCAweDNEODcsIDB4MDE2OCwgMHgyNEJELCAweDAxNjksIDB4MjRDOSwgMHgwMTZBLCAweDI0OTgsCisgICAgMHgwMTZCLCAweDI0OTMsIDB4MDE2QywgMHgzREFDLCAweDAxNkQsIDB4M0RCMiwgMHgwMTZFLCAweDI0QkMsCisgICAgMHgwMTZGLCAweDI0QzgsIDB4MDE3MCwgMHgzRDk2LCAweDAxNzEsIDB4M0RBNCwgMHgwMTc4LCAweDAwRTAsCisgICAgMHgwMTc5LCAweDNEN0YsIDB4MDE3QSwgMHgzRDg4LCAweDAxN0IsIDB4M0Q4MCwgMHgwMTdDLCAweDNEOEEsCisgICAgMHgwMTdELCAweDAwRTEsIDB4MDE3RSwgMHgwMEU1LCAweDAxOTIsIDB4MDA2OSwgMHgwMTkzLCAweDNERDIsCisgICAgMHgwMUMyLCAweDNEQ0QsIDB4MDFDRCwgMHgyNEIyLCAweDAxQ0UsIDB4MjRCRSwgMHgwMUNGLCAweDI0QjYsCisgICAgMHgwMUQwLCAweDI0QzIsIDB4MDFEMSwgMHgyNEI5LCAweDAxRDIsIDB4MjRDNSwgMHgwMUQzLCAweDI0QkIsCisgICAgMHgwMUQ0LCAweDI0QzcsIDB4MDFENiwgMHgzRDc1LCAweDAxRDgsIDB4M0Q3NiwgMHgwMURBLCAweDNENzcsCisgICAgMHgwMURDLCAweDNENzgsIDB4MDFGOCwgMHgzRDczLCAweDAxRjksIDB4M0Q3NCwgMHgwMUZELCAweDI0Q0QsCisgICAgMHgwMjUwLCAweDNERDgsIDB4MDI1MSwgMHgyNENBLCAweDAyNTIsIDB4M0REQywgMHgwMjUzLCAweDNEQ0UsCisgICAgMHgwMjU0LCAweDI0Q0YsIDB4MDI1NSwgMHgzREUxLCAweDAyNTYsIDB4M0RCQSwgMHgwMjU3LCAweDNEQ0YsCisgICAgMHgwMjU4LCAweDNERDUsIDB4MDI1OSwgMHgyNEQyLCAweDAyNUEsIDB4MjRENSwgMHgwMjVCLCAweDI0RDgsCisgICAgMHgwMjVDLCAweDNERDYsIDB4MDI1RSwgMHgzREQ3LCAweDAyNUYsIDB4M0RDMSwgMHgwMjYwLCAweDNERDEsCisgICAgMHgwMjYxLCAweDNEQzUsIDB4MDI2MiwgMHgzRTBCLCAweDAyNjMsIDB4M0UwQywgMHgwMjY0LCAweDNEREIsCisgICAgMHgwMjY1LCAweDNEREUsIDB4MDI2NiwgMHgzRENCLCAweDAyNjcsIDB4M0RFNCwgMHgwMjY4LCAweDNERDMsCisgICAgMHgwMjZBLCAweDNFMEQsIDB4MDI2QywgMHgzREI2LCAweDAyNkQsIDB4M0RDMCwgMHgwMjZFLCAweDNEQjcsCisgICAgMHgwMjZGLCAweDNERDksIDB4MDI3MCwgMHgzREM2LCAweDAyNzEsIDB4M0RCMywgMHgwMjcyLCAweDNEQzIsCisgICAgMHgwMjczLCAweDNEQkIsIDB4MDI3NCwgMHgzRTBFLCAweDAyNzUsIDB4MjRERCwgMHgwMjc2LCAweDNFMEYsCisgICAgMHgwMjc4LCAweDNFMTAsIDB4MDI3OSwgMHgzREI4LCAweDAyN0EsIDB4M0RFMywgMHgwMjdCLCAweDNEQkYsCisgICAgMHgwMjdELCAweDNEQkMsIDB4MDI3RSwgMHgzREI1LCAweDAyODAsIDB4M0UxMSwgMHgwMjgxLCAweDNEQzcsCisgICAgMHgwMjgyLCAweDNEQkQsIDB4MDI4MywgMHgyNEUyLCAweDAyODQsIDB4M0REMCwgMHgwMjg4LCAweDNEQjksCisgICAgMHgwMjg5LCAweDNERDQsIDB4MDI4QSwgMHgzRERBLCAweDAyOEIsIDB4M0RCNCwgMHgwMjhDLCAweDI0REUsCisgICAgMHgwMjhELCAweDNEREQsIDB4MDI4RSwgMHgzREM0LCAweDAyOEYsIDB4M0UxMiwgMHgwMjkwLCAweDNEQkUsCisgICAgMHgwMjkxLCAweDNERTIsIDB4MDI5MiwgMHgyNEUxLCAweDAyOTQsIDB4M0RDQSwgMHgwMjk1LCAweDNEQzksCisgICAgMHgwMjk4LCAweDNEQ0MsIDB4MDI5OSwgMHgzRTEzLCAweDAyOUMsIDB4M0UxNCwgMHgwMjlELCAweDNEQzMsCisgICAgMHgwMjlGLCAweDNFMTUsIDB4MDJBMSwgMHgzREUwLCAweDAyQTIsIDB4M0RERiwgMHgwMkIwLCAweDNFMTYsCisgICAgMHgwMkIyLCAweDNFMTcsIDB4MDJCNywgMHgzRTE4LCAweDAyQkIsIDB4MDA2MiwgMHgwMkJDLCAweDAwNjAsCisgICAgMHgwMkMxLCAweDNFMTksIDB4MDJDNiwgMHgwMDgwLCAweDAyQzcsIDB4M0Q4NSwgMHgwMkM4LCAweDNERTYsCisgICAgMHgwMkNDLCAweDNERTcsIDB4MDJEMCwgMHgyNEUzLCAweDAyRDEsIDB4M0RFOCwgMHgwMkQ4LCAweDNEN0EsCisgICAgMHgwMkQ5LCAweDNEQTYsIDB4MDJEQSwgMHgwMDg1LCAweDAyREIsIDB4M0Q4MiwgMHgwMkRDLCAweDAwNUYsCisgICAgMHgwMkRELCAweDNEODksIDB4MDJERSwgMHgzREZCLCAweDAyRTAsIDB4M0UxQSwgMHgwMkUxLCAweDNFMUIsCisgICAgMHgwMkU1LCAweDNERUIsIDB4MDJFNiwgMHgzREVDLCAweDAyRTcsIDB4M0RFRCwgMHgwMkU4LCAweDNERUUsCisgICAgMHgwMkU5LCAweDNERUYsIDB4MDMwMCwgMHgwMDQxLCAweDAzMDEsIDB4MDA3RiwgMHgwMzAyLCAweDAwODAsCisgICAgMHgwMzAzLCAweDAwNUYsIDB4MDMwNCwgMHgwMDgxLCAweDAzMDUsIDB4MDBFMiwgMHgwMzA2LCAweDAwODIsCisgICAgMHgwMzA3LCAweDAwODMsIDB4MDMwOCwgMHgwMDg0LCAweDAzMEEsIDB4MDA4NSwgMHgwMzBCLCAweDAwODcsCisgICAgMHgwMzBDLCAweDAwODksIDB4MDMwRiwgMHgzREVBLCAweDAzMTgsIDB4M0UwMiwgMHgwMzE5LCAweDNFMDMsCisgICAgMHgwMzFBLCAweDNFMDcsIDB4MDMxQywgMHgzREY1LCAweDAzMUQsIDB4M0UwMCwgMHgwMzFFLCAweDNFMDEsCisgICAgMHgwMzFGLCAweDNERjYsIDB4MDMyMCwgMHgzREY3LCAweDAzMjQsIDB4M0RGQywgMHgwMzI1LCAweDNERjIsCisgICAgMHgwMzI3LCAweDAwODYsIDB4MDMyOCwgMHgwMDg4LCAweDAzMjksIDB4M0RGOSwgMHgwMzJBLCAweDNFMDQsCisgICAgMHgwMzJDLCAweDNERjMsIDB4MDMyRiwgMHgzREZBLCAweDAzMzAsIDB4M0RGRCwgMHgwMzMyLCAweDAwNDAsCisgICAgMHgwMzM0LCAweDNERkYsIDB4MDMzNiwgMHgwMDhBLCAweDAzMzksIDB4M0RGNCwgMHgwMzNBLCAweDNFMDUsCisgICAgMHgwMzNCLCAweDNFMDYsIDB4MDMzQywgMHgzREZFLCAweDAzM0QsIDB4M0RGOCwgMHgwMzYxLCAweDNERTUsCisgICAgMHgwMzkxLCAweDAzRjMsIDB4MDM5MiwgMHgwM0Y0LCAweDAzOTMsIDB4MDNGNSwgMHgwMzk0LCAweDAzRjYsCisgICAgMHgwMzk1LCAweDAzRjcsIDB4MDM5NiwgMHgwM0Y4LCAweDAzOTcsIDB4MDNGOSwgMHgwMzk4LCAweDAzRkEsCisgICAgMHgwMzk5LCAweDAzRkIsIDB4MDM5QSwgMHgwM0ZDLCAweDAzOUIsIDB4MDNGRCwgMHgwMzlDLCAweDAzRkUsCisgICAgMHgwMzlELCAweDAzRkYsIDB4MDM5RSwgMHgwNDAwLCAweDAzOUYsIDB4MDQwMSwgMHgwM0EwLCAweDA0MDIsCisgICAgMHgwM0ExLCAweDA0MDMsIDB4MDNBMywgMHgwNDA0LCAweDAzQTQsIDB4MDQwNSwgMHgwM0E1LCAweDA0MDYsCisgICAgMHgwM0E2LCAweDA0MDcsIDB4MDNBNywgMHgwNDA4LCAweDAzQTgsIDB4MDQwOSwgMHgwM0E5LCAweDA0MEEsCisgICAgMHgwM0IxLCAweDA0MEIsIDB4MDNCMiwgMHgwNDBDLCAweDAzQjMsIDB4MDQwRCwgMHgwM0I0LCAweDA0MEUsCisgICAgMHgwM0I1LCAweDA0MEYsIDB4MDNCNiwgMHgwNDEwLCAweDAzQjcsIDB4MDQxMSwgMHgwM0I4LCAweDA0MTIsCisgICAgMHgwM0I5LCAweDA0MTMsIDB4MDNCQSwgMHgwNDE0LCAweDAzQkIsIDB4MDQxNSwgMHgwM0JDLCAweDA0MTYsCisgICAgMHgwM0JELCAweDA0MTcsIDB4MDNCRSwgMHgwNDE4LCAweDAzQkYsIDB4MDQxOSwgMHgwM0MwLCAweDA0MUEsCisgICAgMHgwM0MxLCAweDA0MUIsIDB4MDNDMiwgMHgzRjVFLCAweDAzQzMsIDB4MDQxQywgMHgwM0M0LCAweDA0MUQsCisgICAgMHgwM0M1LCAweDA0MUUsIDB4MDNDNiwgMHgwNDFGLCAweDAzQzcsIDB4MDQyMCwgMHgwM0M4LCAweDA0MjEsCisgICAgMHgwM0M5LCAweDA0MjIsIDB4MDNEMCwgMHgyRjNBLCAweDAzRDEsIDB4MkY0MCwgMHgwM0Q1LCAweDJGM0UsCisgICAgMHgwM0RCLCAweDJGM0YsIDB4MDQwMSwgMHgwNDI5LCAweDA0MTAsIDB4MDQyMywgMHgwNDExLCAweDA0MjQsCisgICAgMHgwNDEyLCAweDA0MjUsIDB4MDQxMywgMHgwNDI2LCAweDA0MTQsIDB4MDQyNywgMHgwNDE1LCAweDA0MjgsCisgICAgMHgwNDE2LCAweDA0MkEsIDB4MDQxNywgMHgwNDJCLCAweDA0MTgsIDB4MDQyQywgMHgwNDE5LCAweDA0MkQsCisgICAgMHgwNDFBLCAweDA0MkUsIDB4MDQxQiwgMHgwNDJGLCAweDA0MUMsIDB4MDQzMCwgMHgwNDFELCAweDA0MzEsCisgICAgMHgwNDFFLCAweDA0MzIsIDB4MDQxRiwgMHgwNDMzLCAweDA0MjAsIDB4MDQzNCwgMHgwNDIxLCAweDA0MzUsCisgICAgMHgwNDIyLCAweDA0MzYsIDB4MDQyMywgMHgwNDM3LCAweDA0MjQsIDB4MDQzOCwgMHgwNDI1LCAweDA0MzksCisgICAgMHgwNDI2LCAweDA0M0EsIDB4MDQyNywgMHgwNDNCLCAweDA0MjgsIDB4MDQzQywgMHgwNDI5LCAweDA0M0QsCisgICAgMHgwNDJBLCAweDA0M0UsIDB4MDQyQiwgMHgwNDNGLCAweDA0MkMsIDB4MDQ0MCwgMHgwNDJELCAweDA0NDEsCisgICAgMHgwNDJFLCAweDA0NDIsIDB4MDQyRiwgMHgwNDQzLCAweDA0MzAsIDB4MDQ0NCwgMHgwNDMxLCAweDA0NDUsCisgICAgMHgwNDMyLCAweDA0NDYsIDB4MDQzMywgMHgwNDQ3LCAweDA0MzQsIDB4MDQ0OCwgMHgwNDM1LCAweDA0NDksCisgICAgMHgwNDM2LCAweDA0NEIsIDB4MDQzNywgMHgwNDRDLCAweDA0MzgsIDB4MDQ0RCwgMHgwNDM5LCAweDA0NEUsCisgICAgMHgwNDNBLCAweDA0NEYsIDB4MDQzQiwgMHgwNDUwLCAweDA0M0MsIDB4MDQ1MSwgMHgwNDNELCAweDA0NTIsCisgICAgMHgwNDNFLCAweDA0NTMsIDB4MDQzRiwgMHgwNDU0LCAweDA0NDAsIDB4MDQ1NSwgMHgwNDQxLCAweDA0NTYsCisgICAgMHgwNDQyLCAweDA0NTcsIDB4MDQ0MywgMHgwNDU4LCAweDA0NDQsIDB4MDQ1OSwgMHgwNDQ1LCAweDA0NUEsCisgICAgMHgwNDQ2LCAweDA0NUIsIDB4MDQ0NywgMHgwNDVDLCAweDA0NDgsIDB4MDQ1RCwgMHgwNDQ5LCAweDA0NUUsCisgICAgMHgwNDRBLCAweDA0NUYsIDB4MDQ0QiwgMHgwNDYwLCAweDA0NEMsIDB4MDQ2MSwgMHgwNDRELCAweDA0NjIsCisgICAgMHgwNDRFLCAweDA0NjMsIDB4MDQ0RiwgMHgwNDY0LCAweDA0NTEsIDB4MDQ0QSwgMHgxRTNFLCAweDNENzEsCisgICAgMHgxRTNGLCAweDNENzIsIDB4MUVCQywgMHgyNEI1LCAweDFFQkQsIDB4MjRDMSwgMHgxRjcwLCAweDI0Q0MsCisgICAgMHgxRjcxLCAweDI0Q0IsIDB4MUY3MiwgMHgyNERBLCAweDFGNzMsIDB4MjREOSwgMHgyMDAyLCAweDAwRTcsCisgICAgMHgyMDAzLCAweDAyNzksIDB4MjAxMCwgMHgwMjk2LCAweDIwMTEsIDB4MDAwRSwgMHgyMDEyLCAweDAwNzIsCisgICAgMHgyMDEzLCAweDAwNzIsIDB4MjAxNCwgMHgwMDhBLCAweDIwMTUsIDB4MDI5NSwgMHgyMDE2LCAweDAyOUEsCisgICAgMHgyMDE4LCAweDAwNjIsIDB4MjAxOSwgMHgwMDYwLCAweDIwMUEsIDB4MDA3OCwgMHgyMDFDLCAweDAwNkMsCisgICAgMHgyMDFELCAweDAwN0EsIDB4MjAxRSwgMHgwMDc5LCAweDIwMjAsIDB4MDMwOCwgMHgyMDIxLCAweDAzMDksCisgICAgMHgyMDIyLCAweDAwNzcsIDB4MjAyNSwgMHgwMjlELCAweDIwMjYsIDB4MDI5QywgMHgyMDMwLCAweDAzMDQsCisgICAgMHgyMDMyLCAweDAyQzQsIDB4MjAzMywgMHgwMkM1LCAweDIwMzksIDB4MDA2RSwgMHgyMDNBLCAweDAwNkYsCisgICAgMHgyMDNCLCAweDAyREUsIDB4MjAzQywgMHgyRjRGLCAweDIwM0UsIDB4MDBFMiwgMHgyMDNGLCAweDNERTksCisgICAgMHgyMDQyLCAweDNGOUEsIDB4MjA0NCwgMHgwMDY4LCAweDIwNDcsIDB4M0Y5NiwgMHgyMDQ4LCAweDNGOTcsCisgICAgMHgyMDQ5LCAweDJGNTAsIDB4MjA1MSwgMHgzRjk5LCAweDIwNzAsIDB4MjRBMSwgMHgyMDc0LCAweDI0QTIsCisgICAgMHgyMDc1LCAweDI0QTMsIDB4MjA3NiwgMHgyNEE0LCAweDIwNzcsIDB4MjRBNSwgMHgyMDc4LCAweDI0QTYsCisgICAgMHgyMDc5LCAweDI0QTcsIDB4MjA4MCwgMHgyNEE4LCAweDIwODEsIDB4MjRBOSwgMHgyMDgyLCAweDI0QUEsCisgICAgMHgyMDgzLCAweDI0QUIsIDB4MjA4NCwgMHgyNEFDLCAweDIwODUsIDB4MjRBRCwgMHgyMDg2LCAweDI0QUUsCisgICAgMHgyMDg3LCAweDI0QUYsIDB4MjA4OCwgMHgyNEIwLCAweDIwODksIDB4MjRCMSwgMHgyMEFDLCAweDI0OEEsCisgICAgMHgyMERELCAweDNGQzgsIDB4MjBERSwgMHgyQjFCLCAweDIxMDAsIDB4MkU0RiwgMHgyMTAzLCAweDAyQzYsCisgICAgMHgyMTA1LCAweDJFNTMsIDB4MjEwOSwgMHgyMDcxLCAweDIxMEEsIDB4MjA3MCwgMHgyMTBGLCAweDJGM0MsCisgICAgMHgyMTEzLCAweDFGNTksIDB4MjExNiwgMHgxREJBLCAweDIxMjEsIDB4MUY3NywgMHgyMTIyLCAweDAwRTQsCisgICAgMHgyMTI2LCAweDI0OEIsIDB4MjEyNywgMHgzQzlCLCAweDIxMkIsIDB4MDMwMywgMHgyMTM1LCAweDJGMzksCisgICAgMHgyMTNCLCAweDIwNzMsIDB4MjE1MywgMHgyNDlGLCAweDIxNTQsIDB4MjRBMCwgMHgyMTU1LCAweDNENkYsCisgICAgMHgyMTU2LCAweDI2MzksIDB4MjE1NywgMHgyNjNBLCAweDIxNTgsIDB4MjYzQiwgMHgyMTU5LCAweDI2M0MsCisgICAgMHgyMTVBLCAweDI2M0QsIDB4MjE1QiwgMHgyNDlCLCAweDIxNUMsIDB4MjQ5QywgMHgyMTVELCAweDI0OUQsCisgICAgMHgyMTVFLCAweDI0OUUsIDB4MjE2MCwgMHgxRDk3LCAweDIxNjEsIDB4MUQ5OCwgMHgyMTYyLCAweDFEOTksCisgICAgMHgyMTYzLCAweDFEOUEsIDB4MjE2NCwgMHgxRDlCLCAweDIxNjUsIDB4MUQ5QywgMHgyMTY2LCAweDFEOUQsCisgICAgMHgyMTY3LCAweDFEOUUsIDB4MjE2OCwgMHgxRDlGLCAweDIxNjksIDB4MURBMCwgMHgyMTZBLCAweDIwMjEsCisgICAgMHgyMTZCLCAweDIwMjIsIDB4MjE3MCwgMHgxRjlDLCAweDIxNzEsIDB4MUY5RCwgMHgyMTcyLCAweDFGOUUsCisgICAgMHgyMTczLCAweDFGOUYsIDB4MjE3NCwgMHgxRkEwLCAweDIxNzUsIDB4MUZBMSwgMHgyMTc2LCAweDFGQTIsCisgICAgMHgyMTc3LCAweDFGQTMsIDB4MjE3OCwgMHgxRkE0LCAweDIxNzksIDB4MUZBNSwgMHgyMTdBLCAweDIwNkEsCisgICAgMHgyMTdCLCAweDIwNkIsIDB4MjE3RiwgMHgyMDZGLCAweDIxOTAsIDB4MDJFMSwgMHgyMTkxLCAweDAyRTIsCisgICAgMHgyMTkyLCAweDAyRTAsIDB4MjE5MywgMHgwMkUzLCAweDIxOTQsIDB4MkZBOSwgMHgyMTk2LCAweDJGQUMsCisgICAgMHgyMTk3LCAweDJGQUQsIDB4MjE5OCwgMHgyRkFBLCAweDIxOTksIDB4MkZBQiwgMHgyMUM0LCAweDIwNzYsCisgICAgMHgyMUM1LCAweDIwNzcsIDB4MjFDNiwgMHgyMDc1LCAweDIxQ0IsIDB4MkZBRiwgMHgyMUNDLCAweDJGQUUsCisgICAgMHgyMUQwLCAweDJGQTgsIDB4MjFEMiwgMHgwMkYwLCAweDIxRDQsIDB4MDJGMSwgMHgyMUU2LCAweDFGNEQsCisgICAgMHgyMUU3LCAweDFGNEMsIDB4MjFFOCwgMHgxRjRFLCAweDIxRTksIDB4MUY0QiwgMHgyMjAwLCAweDAyRjIsCisgICAgMHgyMjAyLCAweDAyRjcsIDB4MjIwMywgMHgwMkYzLCAweDIyMDUsIDB4MkY5OCwgMHgyMjA3LCAweDAyRjgsCisgICAgMHgyMjA4LCAweDAyRTUsIDB4MjIwOSwgMHgzQzc0LCAweDIyMEEsIDB4MkYzQiwgMHgyMjBCLCAweDAyRTYsCisgICAgMHgyMjExLCAweDFEQzksIDB4MjIxMiwgMHgwMkI1LCAweDIyMTMsIDB4MkY1NiwgMHgyMjE5LCAweDAwNzUsCisgICAgMHgyMjFBLCAweDAyRkQsIDB4MjIxRCwgMHgwMkZGLCAweDIyMUUsIDB4MDJCRiwgMHgyMjFGLCAweDFEQ0QsCisgICAgMHgyMjIwLCAweDAyRjQsIDB4MjIyNSwgMHgzQzgxLCAweDIyMjYsIDB4M0M4MiwgMHgyMjI3LCAweDAyRUQsCisgICAgMHgyMjI4LCAweDAyRUUsIDB4MjIyOSwgMHgwMkVDLCAweDIyMkEsIDB4MDJFQiwgMHgyMjJCLCAweDAzMDEsCisgICAgMHgyMjJDLCAweDAzMDIsIDB4MjIyRCwgMHgyMDAzLCAweDIyMkUsIDB4MURDOCwgMHgyMjM0LCAweDAyQzAsCisgICAgMHgyMjM1LCAweDAzMDAsIDB4MjIzQywgMHgwMDY0LCAweDIyM0QsIDB4MDJGRSwgMHgyMjQzLCAweDJGNTgsCisgICAgMHgyMjQ1LCAweDNDOTMsIDB4MjI0OCwgMHgzQzk0LCAweDIyNTIsIDB4MDJGQSwgMHgyMjYwLCAweDAyQkEsCisgICAgMHgyMjYxLCAweDAyRjksIDB4MjI2MiwgMHgzQzkxLCAweDIyNjYsIDB4MDJCRCwgMHgyMjY3LCAweDAyQkUsCisgICAgMHgyMjZBLCAweDAyRkIsIDB4MjI2QiwgMHgwMkZDLCAweDIyNzIsIDB4MkY1OSwgMHgyMjczLCAweDJGNUEsCisgICAgMHgyMjc2LCAweDNDOTUsIDB4MjI3NywgMHgzQzk2LCAweDIyODIsIDB4MDJFOSwgMHgyMjgzLCAweDAyRUEsCisgICAgMHgyMjg0LCAweDNDNzAsIDB4MjI4NSwgMHgzQzcxLCAweDIyODYsIDB4MDJFNywgMHgyMjg3LCAweDAyRTgsCisgICAgMHgyMjhBLCAweDNDNzIsIDB4MjI4QiwgMHgzQzczLCAweDIyOTUsIDB4MkY5QywgMHgyMjk2LCAweDJGOUEsCisgICAgMHgyMjk3LCAweDJGOUQsIDB4MjI5OCwgMHgyRjlCLCAweDIyOUUsIDB4M0UyMiwgMHgyMkEwLCAweDJGOTksCisgICAgMHgyMkE1LCAweDAyRjUsIDB4MjJCRiwgMHgxRENFLCAweDIyREEsIDB4M0Q2RCwgMHgyMkRCLCAweDNENkUsCisgICAgMHgyMzA1LCAweDNDNzYsIDB4MjMwNiwgMHgzQzc3LCAweDIzMDcsIDB4MkZCQiwgMHgyMzEyLCAweDAyRjYsCisgICAgMHgyMzE4LCAweDNENzAsIDB4MjM5QiwgMHgyRjZGLCAweDIzOUMsIDB4MkY4NywgMHgyMzlELCAweDJGNzAsCisgICAgMHgyMzlFLCAweDJGNzEsIDB4MjM5RiwgMHgyRjg3LCAweDIzQTAsIDB4MkY3MiwgMHgyM0ExLCAweDJGNzcsCisgICAgMHgyM0EyLCAweDJGODcsIDB4MjNBMywgMHgyRjc4LCAweDIzQTQsIDB4MkY3OSwgMHgyM0E1LCAweDJGODcsCisgICAgMHgyM0E2LCAweDJGN0EsIDB4MjNBNywgMHgxRkYyLCAweDIzQTgsIDB4MUZGMywgMHgyM0E5LCAweDFGRjQsCisgICAgMHgyM0FBLCAweDJGODcsIDB4MjNBQiwgMHgxRkVFLCAweDIzQUMsIDB4MUZFRiwgMHgyM0FELCAweDFGRjAsCisgICAgMHgyM0IwLCAweDNGQjgsIDB4MjNCMSwgMHgzRkI5LCAweDIzQkUsIDB4M0Y3RCwgMHgyM0JGLCAweDNGN0UsCisgICAgMHgyM0MwLCAweDNGN0YsIDB4MjNDMSwgMHgzRjgwLCAweDIzQzIsIDB4M0Y4MSwgMHgyM0MzLCAweDNGODIsCisgICAgMHgyM0M0LCAweDNGODMsIDB4MjNDNSwgMHgzRjg0LCAweDIzQzYsIDB4M0Y4NSwgMHgyM0M3LCAweDNGODYsCisgICAgMHgyM0M4LCAweDNGODcsIDB4MjNDOSwgMHgzRjg4LCAweDIzQ0EsIDB4M0Y4OSwgMHgyM0NCLCAweDNGOEEsCisgICAgMHgyM0NDLCAweDNGOEIsIDB4MjNDRSwgMHgzRjkxLCAweDI0MjMsIDB4M0Y5MCwgMHgyNDYwLCAweDFEODMsCisgICAgMHgyNDYxLCAweDFEODQsIDB4MjQ2MiwgMHgxRDg1LCAweDI0NjMsIDB4MUQ4NiwgMHgyNDY0LCAweDFEODcsCisgICAgMHgyNDY1LCAweDFEODgsIDB4MjQ2NiwgMHgxRDg5LCAweDI0NjcsIDB4MUQ4QSwgMHgyNDY4LCAweDFEOEIsCisgICAgMHgyNDY5LCAweDFEOEMsIDB4MjQ2QSwgMHgxRDhELCAweDI0NkIsIDB4MUQ4RSwgMHgyNDZDLCAweDFEOEYsCisgICAgMHgyNDZELCAweDFEOTAsIDB4MjQ2RSwgMHgxRDkxLCAweDI0NkYsIDB4MUQ5MiwgMHgyNDcwLCAweDFEOTMsCisgICAgMHgyNDcxLCAweDFEOTQsIDB4MjQ3MiwgMHgxRDk1LCAweDI0NzMsIDB4MUQ5NiwgMHgyNDc0LCAweDFGODcsCisgICAgMHgyNDc1LCAweDFGODgsIDB4MjQ3NiwgMHgxRjg5LCAweDI0NzcsIDB4MUY4QSwgMHgyNDc4LCAweDFGOEIsCisgICAgMHgyNDc5LCAweDFGOEMsIDB4MjQ3QSwgMHgxRjhELCAweDI0N0IsIDB4MUY4RSwgMHgyNDdDLCAweDFGOEYsCisgICAgMHgyNDdELCAweDFGOTAsIDB4MjQ3RSwgMHgxRjkxLCAweDI0N0YsIDB4MUY5MiwgMHgyNDgwLCAweDFGOTMsCisgICAgMHgyNDgxLCAweDFGOTQsIDB4MjQ4MiwgMHgxRjk1LCAweDI0ODMsIDB4MUY5NiwgMHgyNDg0LCAweDFGOTcsCisgICAgMHgyNDg1LCAweDFGOTgsIDB4MjQ4NiwgMHgxRjk5LCAweDI0ODcsIDB4MUY5QSwgMHgyNDg4LCAweDFGN0UsCisgICAgMHgyNDg5LCAweDFGN0YsIDB4MjQ4QSwgMHgxRjgwLCAweDI0OEIsIDB4MUY4MSwgMHgyNDhDLCAweDFGODIsCisgICAgMHgyNDhELCAweDFGODMsIDB4MjQ4RSwgMHgxRjg0LCAweDI0OEYsIDB4MUY4NSwgMHgyNDkwLCAweDFGODYsCisgICAgMHgyNDlDLCAweDFGQjAsIDB4MjQ5RCwgMHgxRkIxLCAweDI0OUUsIDB4MUZCMiwgMHgyNDlGLCAweDFGQjMsCisgICAgMHgyNEEwLCAweDFGQjQsIDB4MjRBMSwgMHgxRkI1LCAweDI0QTIsIDB4MUZCNiwgMHgyNEEzLCAweDFGQjcsCisgICAgMHgyNEE0LCAweDFGQjgsIDB4MjRBNSwgMHgxRkI5LCAweDI0QTYsIDB4MUZCQSwgMHgyNEE3LCAweDFGQkIsCisgICAgMHgyNEE4LCAweDFGQkMsIDB4MjRBOSwgMHgxRkJELCAweDI0QUEsIDB4MUZCRSwgMHgyNEFCLCAweDFGQkYsCisgICAgMHgyNEFDLCAweDFGQzAsIDB4MjRBRCwgMHgxRkMxLCAweDI0QUUsIDB4MUZDMiwgMHgyNEFGLCAweDFGQzMsCisgICAgMHgyNEIwLCAweDFGQzQsIDB4MjRCMSwgMHgxRkM1LCAweDI0QjIsIDB4MUZDNiwgMHgyNEIzLCAweDFGQzcsCisgICAgMHgyNEI0LCAweDFGQzgsIDB4MjRCNSwgMHgxRkM5LCAweDI0QjYsIDB4Mjg2MywgMHgyNEI3LCAweDI4NjQsCisgICAgMHgyNEI4LCAweDI4NjUsIDB4MjRCOSwgMHgyODY2LCAweDI0QkEsIDB4Mjg2NywgMHgyNEJCLCAweDI4NjgsCisgICAgMHgyNEJDLCAweDI4NjksIDB4MjRCRCwgMHgyODZBLCAweDI0QkUsIDB4Mjg2QiwgMHgyNEJGLCAweDI4NkMsCisgICAgMHgyNEMwLCAweDI4NkQsIDB4MjRDMSwgMHgyODZFLCAweDI0QzIsIDB4Mjg2RiwgMHgyNEMzLCAweDI4NzAsCisgICAgMHgyNEM0LCAweDI4NzEsIDB4MjRDNSwgMHgyODcyLCAweDI0QzYsIDB4Mjg3MywgMHgyNEM3LCAweDI4NzQsCisgICAgMHgyNEM4LCAweDI4NzUsIDB4MjRDOSwgMHgyODc2LCAweDI0Q0EsIDB4Mjg3NywgMHgyNENCLCAweDI4NzgsCisgICAgMHgyNENDLCAweDI4NzksIDB4MjRDRCwgMHgyODdBLCAweDI0Q0UsIDB4Mjg3QiwgMHgyNENGLCAweDI4N0MsCisgICAgMHgyNEQwLCAweDI4NDksIDB4MjREMSwgMHgyODRBLCAweDI0RDIsIDB4Mjg0QiwgMHgyNEQzLCAweDI4NEMsCisgICAgMHgyNEQ0LCAweDI4NEQsIDB4MjRENSwgMHgyODRFLCAweDI0RDYsIDB4Mjg0RiwgMHgyNEQ3LCAweDI4NTAsCisgICAgMHgyNEQ4LCAweDI4NTEsIDB4MjREOSwgMHgyODUyLCAweDI0REEsIDB4Mjg1MywgMHgyNERCLCAweDI4NTQsCisgICAgMHgyNERDLCAweDI4NTUsIDB4MjRERCwgMHgyODU2LCAweDI0REUsIDB4Mjg1NywgMHgyNERGLCAweDI4NTgsCisgICAgMHgyNEUwLCAweDI4NTksIDB4MjRFMSwgMHgyODVBLCAweDI0RTIsIDB4Mjg1QiwgMHgyNEUzLCAweDI4NUMsCisgICAgMHgyNEU0LCAweDI4NUQsIDB4MjRFNSwgMHgyODVFLCAweDI0RTYsIDB4Mjg1RiwgMHgyNEU3LCAweDI4NjAsCisgICAgMHgyNEU4LCAweDI4NjEsIDB4MjRFOSwgMHgyODYyLCAweDI0RUEsIDB4MjAyMCwgMHgyNEVCLCAweDI5MTMsCisgICAgMHgyNEVDLCAweDI5MTQsIDB4MjRFRCwgMHgyOTE1LCAweDI0RUUsIDB4MjkxNiwgMHgyNEVGLCAweDI5MTcsCisgICAgMHgyNEYwLCAweDI5MTgsIDB4MjRGMSwgMHgyOTE5LCAweDI0RjIsIDB4MjkxQSwgMHgyNEYzLCAweDI5MUIsCisgICAgMHgyNEY0LCAweDI5MUMsIDB4MjRGNSwgMHgzRjVGLCAweDI0RjYsIDB4M0Y2MCwgMHgyNEY3LCAweDNGNjEsCisgICAgMHgyNEY4LCAweDNGNjIsIDB4MjRGOSwgMHgzRjYzLCAweDI0RkEsIDB4M0Y2NCwgMHgyNEZCLCAweDNGNjUsCisgICAgMHgyNEZDLCAweDNGNjYsIDB4MjRGRCwgMHgzRjY3LCAweDI0RkUsIDB4M0Y2OCwgMHgyNEZGLCAweDI5MDcsCisgICAgMHgyNTAwLCAweDFEMzcsIDB4MjUwMSwgMHgxRDM4LCAweDI1MDIsIDB4MUQzOSwgMHgyNTAzLCAweDFEM0EsCisgICAgMHgyNTA0LCAweDFEM0IsIDB4MjUwNSwgMHgxRDNDLCAweDI1MDYsIDB4MUQzRCwgMHgyNTA3LCAweDFEM0UsCisgICAgMHgyNTA4LCAweDFEM0YsIDB4MjUwOSwgMHgxRDQwLCAweDI1MEEsIDB4MUQ0MSwgMHgyNTBCLCAweDFENDIsCisgICAgMHgyNTBDLCAweDFENDMsIDB4MjUwRCwgMHgxRDQ0LCAweDI1MEUsIDB4MUQ0NSwgMHgyNTBGLCAweDFENDYsCisgICAgMHgyNTEwLCAweDFENDcsIDB4MjUxMSwgMHgxRDQ4LCAweDI1MTIsIDB4MUQ0OSwgMHgyNTEzLCAweDFENEEsCisgICAgMHgyNTE0LCAweDFENEIsIDB4MjUxNSwgMHgxRDRDLCAweDI1MTYsIDB4MUQ0RCwgMHgyNTE3LCAweDFENEUsCisgICAgMHgyNTE4LCAweDFENEYsIDB4MjUxOSwgMHgxRDUwLCAweDI1MUEsIDB4MUQ1MSwgMHgyNTFCLCAweDFENTIsCisgICAgMHgyNTFDLCAweDFENTMsIDB4MjUxRCwgMHgxRDU0LCAweDI1MUUsIDB4MUQ1NSwgMHgyNTFGLCAweDFENTYsCisgICAgMHgyNTIwLCAweDFENTcsIDB4MjUyMSwgMHgxRDU4LCAweDI1MjIsIDB4MUQ1OSwgMHgyNTIzLCAweDFENUEsCisgICAgMHgyNTI0LCAweDFENUIsIDB4MjUyNSwgMHgxRDVDLCAweDI1MjYsIDB4MUQ1RCwgMHgyNTI3LCAweDFENUUsCisgICAgMHgyNTI4LCAweDFENUYsIDB4MjUyOSwgMHgxRDYwLCAweDI1MkEsIDB4MUQ2MSwgMHgyNTJCLCAweDFENjIsCisgICAgMHgyNTJDLCAweDFENjMsIDB4MjUyRCwgMHgxRDY0LCAweDI1MkUsIDB4MUQ2NSwgMHgyNTJGLCAweDFENjYsCisgICAgMHgyNTMwLCAweDFENjcsIDB4MjUzMSwgMHgxRDY4LCAweDI1MzIsIDB4MUQ2OSwgMHgyNTMzLCAweDFENkEsCisgICAgMHgyNTM0LCAweDFENkIsIDB4MjUzNSwgMHgxRDZDLCAweDI1MzYsIDB4MUQ2RCwgMHgyNTM3LCAweDFENkUsCisgICAgMHgyNTM4LCAweDFENkYsIDB4MjUzOSwgMHgxRDcwLCAweDI1M0EsIDB4MUQ3MSwgMHgyNTNCLCAweDFENzIsCisgICAgMHgyNTNDLCAweDFENzMsIDB4MjUzRCwgMHgxRDc0LCAweDI1M0UsIDB4MUQ3NSwgMHgyNTNGLCAweDFENzYsCisgICAgMHgyNTQwLCAweDFENzcsIDB4MjU0MSwgMHgxRDc4LCAweDI1NDIsIDB4MUQ3OSwgMHgyNTQzLCAweDFEN0EsCisgICAgMHgyNTQ0LCAweDFEN0IsIDB4MjU0NSwgMHgxRDdDLCAweDI1NDYsIDB4MUQ3RCwgMHgyNTQ3LCAweDFEN0UsCisgICAgMHgyNTQ4LCAweDFEN0YsIDB4MjU0OSwgMHgxRDgwLCAweDI1NEEsIDB4MUQ4MSwgMHgyNTRCLCAweDFEODIsCisgICAgMHgyNTUwLCAweDIwM0IsIDB4MjU1RSwgMHgyMDNDLCAweDI1NjEsIDB4MjAzRSwgMHgyNTZBLCAweDIwM0QsCisgICAgMHgyNTZELCAweDIwMzcsIDB4MjU2RSwgMHgyMDM4LCAweDI1NkYsIDB4MjAzQSwgMHgyNTcwLCAweDIwMzksCisgICAgMHgyNTcxLCAweDIwNDUsIDB4MjU3MiwgMHgyMDQ2LCAweDI1NzMsIDB4MjA0NywgMHgyNTgxLCAweDIwMjYsCisgICAgMHgyNTgyLCAweDIwMjcsIDB4MjU4MywgMHgyMDI4LCAweDI1ODQsIDB4MjAyOSwgMHgyNTg1LCAweDIwMkEsCisgICAgMHgyNTg2LCAweDIwMkIsIDB4MjU4NywgMHgyMDJDLCAweDI1ODgsIDB4MjAyRCwgMHgyNTg5LCAweDIwMzQsCisgICAgMHgyNThBLCAweDIwMzMsIDB4MjU4QiwgMHgyMDMyLCAweDI1OEMsIDB4MjAzMSwgMHgyNThELCAweDIwMzAsCisgICAgMHgyNThFLCAweDIwMkYsIDB4MjU4RiwgMHgyMDJFLCAweDI1OTQsIDB4MjAzNSwgMHgyNTk1LCAweDIwMzYsCisgICAgMHgyNUEwLCAweDAyRDksIDB4MjVBMSwgMHgwMkQ4LCAweDI1QTIsIDB4MUY0RiwgMHgyNUFBLCAweDJGQ0YsCisgICAgMHgyNUFCLCAweDJGQ0QsIDB4MjVCMSwgMHgzRjZCLCAweDI1QjIsIDB4MDJEQiwgMHgyNUIzLCAweDAyREEsCisgICAgMHgyNUI2LCAweDJGQTMsIDB4MjVCNywgMHgxRjRBLCAweDI1QkMsIDB4MDJERCwgMHgyNUJELCAweDAyREMsCisgICAgMHgyNUMwLCAweDJGQTIsIDB4MjVDMSwgMHgxRjQ5LCAweDI1QzYsIDB4MDJENywgMHgyNUM3LCAweDAyRDYsCisgICAgMHgyNUM5LCAweDIwMTIsIDB4MjVDQiwgMHgwMkQzLCAweDI1Q0MsIDB4MjkwNiwgMHgyNUNFLCAweDAyRDUsCisgICAgMHgyNUNGLCAweDAyRDQsIDB4MjVEMCwgMHgzRjkyLCAweDI1RDEsIDB4M0Y5MywgMHgyNUQyLCAweDNGOTQsCisgICAgMHgyNUQzLCAweDNGOTUsIDB4MjVFMiwgMHgyMDNGLCAweDI1RTMsIDB4MjA0MCwgMHgyNUU0LCAweDIwNDIsCisgICAgMHgyNUU1LCAweDIwNDEsIDB4MjVFNiwgMHgyRkRFLCAweDI1RUYsIDB4MDMwQiwgMHgyNjAwLCAweDIwMTcsCisgICAgMHgyNjAxLCAweDIwMTgsIDB4MjYwMiwgMHgyMDE5LCAweDI2MDMsIDB4MjAxQSwgMHgyNjA1LCAweDAyRDIsCisgICAgMHgyNjA2LCAweDAyRDEsIDB4MjYwRSwgMHgxRjc4LCAweDI2MTYsIDB4M0Y2OSwgMHgyNjE3LCAweDNGNkEsCisgICAgMHgyNjFDLCAweDIwMUMsIDB4MjYxRCwgMHgyMDFELCAweDI2MUUsIDB4MjAxQiwgMHgyNjFGLCAweDIwMUUsCisgICAgMHgyNjQwLCAweDAyQzIsIDB4MjY0MiwgMHgwMkMxLCAweDI2NjAsIDB4MjAxMywgMHgyNjYxLCAweDFGNTEsCisgICAgMHgyNjYyLCAweDFGNTMsIDB4MjY2MywgMHgyMDE1LCAweDI2NjQsIDB4MUY1MiwgMHgyNjY1LCAweDIwMTQsCisgICAgMHgyNjY2LCAweDIwMTYsIDB4MjY2NywgMHgxRjUwLCAweDI2NjgsIDB4MkY0MiwgMHgyNjY5LCAweDJGNDMsCisgICAgMHgyNjZBLCAweDAzMDcsIDB4MjY2QiwgMHgzRjQ4LCAweDI2NkMsIDB4MkY0NCwgMHgyNjZELCAweDAzMDYsCisgICAgMHgyNjZFLCAweDNGNDcsIDB4MjY2RiwgMHgwMzA1LCAweDI2NzIsIDB4M0ZCQSwgMHgyNjczLCAweDNGQkIsCisgICAgMHgyNjc0LCAweDNGQkMsIDB4MjY3NSwgMHgzRkJELCAweDI2NzYsIDB4M0ZCRSwgMHgyNjc3LCAweDNGQkYsCisgICAgMHgyNjc4LCAweDNGQzAsIDB4MjY3OSwgMHgzRkMxLCAweDI2N0EsIDB4M0ZDMiwgMHgyNjdCLCAweDNGQzMsCisgICAgMHgyNjdDLCAweDNGQzQsIDB4MjY3RCwgMHgzRkM1LCAweDI2QTAsIDB4MkZBMCwgMHgyNzAyLCAweDJGOTAsCisgICAgMHgyNzEzLCAweDNGOEUsIDB4MjcxQSwgMHgyRkQxLCAweDI3M0YsIDB4MkZDNSwgMHgyNzQwLCAweDJGQzQsCisgICAgMHgyNzU2LCAweDJGRTMsIDB4Mjc3NiwgMHgyMDVFLCAweDI3NzcsIDB4MjA1RiwgMHgyNzc4LCAweDIwNjAsCisgICAgMHgyNzc5LCAweDIwNjEsIDB4Mjc3QSwgMHgyMDYyLCAweDI3N0IsIDB4MjA2MywgMHgyNzdDLCAweDIwNjQsCisgICAgMHgyNzdELCAweDIwNjUsIDB4Mjc3RSwgMHgyMDY2LCAweDI3N0YsIDB4MjkxMiwgMHgyN0ExLCAweDIwMEUsCisgICAgMHgyOTM0LCAweDNGNDksIDB4MjkzNSwgMHgzRjRBLCAweDI5QkYsIDB4M0Y0QiwgMHgyOUZBLCAweDNGNEYsCisgICAgMHgyOUZCLCAweDNGNTAsIDB4MkIwNSwgMHgyMDBGLCAweDJCMDYsIDB4MjAxMCwgMHgyQjA3LCAweDIwMTEsCisgICAgMHgyRTgzLCAweDM3RTEsIDB4MkU4NSwgMHgzNjIwLCAweDJFODcsIDB4MzcxOSwgMHgyRTg5LCAweDM4MTQsCisgICAgMHgyRThCLCAweDM3MUUsIDB4MkU4QywgMHgzNjA5LCAweDJFOEQsIDB4MzYwQSwgMHgyRThFLCAweDEwNzEsCisgICAgMHgyRThGLCAweDM4OEMsIDB4MkU5MCwgMHgxMjI2LCAweDJFOTIsIDB4MEVCMiwgMHgyRTkzLCAweDEyODMsCisgICAgMHgyRTk0LCAweDEyQUIsIDB4MkU5NSwgMHgzQzFGLCAweDJFOTYsIDB4MzhDMiwgMHgyRTk3LCAweDM2MUMsCisgICAgMHgyRTk4LCAweDM4RTEsIDB4MkU5OSwgMHgxM0MzLCAweDJFOUIsIDB4MTNFMSwgMHgyRTlFLCAweDQ1RTUsCisgICAgMHgyRTlGLCAweDBFM0MsIDB4MkVBMCwgMHgwRUJELCAweDJFQTEsIDB4Mzk2MSwgMHgyRUEyLCAweDM5NjIsCisgICAgMHgyRUEzLCAweDM5OUQsIDB4MkVBNCwgMHgzQzI2LCAweDJFQTYsIDB4Mzc0RCwgMHgyRUE4LCAweDM5QkMsCisgICAgMHgyRUE5LCAweDM1QTEsIDB4MkVBQSwgMHgzNkFCLCAweDJFQUIsIDB4M0E5NywgMHgyRUFDLCAweDRBQkEsCisgICAgMHgyRUFELCAweDNBMzksIDB4MkVBRSwgMHgzNjYyLCAweDJFQjEsIDB4M0E5OCwgMHgyRUIyLCAweDNBOTcsCisgICAgMHgyRUIzLCAweDM3NkQsIDB4MkVCNywgMHgzNkZFLCAweDJFQjksIDB4MzcxMywgMHgyRUJDLCAweDM1QjMsCisgICAgMHgyRUJELCAweDM1NEUsIDB4MkVCRSwgMHgzNzc1LCAweDJFQkYsIDB4Mzc3NiwgMHgyRUMwLCAweDM3NzcsCisgICAgMHgyRUMxLCAweDA3OEIsIDB4MkVDMiwgMHgzQjBBLCAweDJFQzMsIDB4MzYyRSwgMHgyRUM0LCAweDBBNjIsCisgICAgMHgyRUM2LCAweDM1NzIsIDB4MkVDQSwgMHgzNjRBLCAweDJFQ0MsIDB4M0MyQiwgMHgyRUNELCAweDNCNTAsCisgICAgMHgyRUNGLCAweDNCOUUsIDB4MkVEMSwgMHgwQkQ1LCAweDJFRDIsIDB4M0I5NywgMHgyRUQ2LCAweDNCOUUsCisgICAgMHgyRUQ3LCAweDM1NEQsIDB4MkVEOCwgMHgwQTY4LCAweDJFREQsIDB4MzYxNywgMHgyRURFLCAweDM2MTksCisgICAgMHgyRURGLCAweDM2MTgsIDB4MkVFNCwgMHgwNjRFLCAweDJFRTgsIDB4MEQzNCwgMHgyRUU5LCAweDA1MkIsCisgICAgMHgyRUVCLCAweDBBNkEsIDB4MkVFRCwgMHgwOEMzLCAweDJFRUYsIDB4MEY3RCwgMHgyRUYyLCAweDA2NEYsCisgICAgMHgyRjAwLCAweDA0QjAsIDB4MkYwMSwgMHgyMEIzLCAweDJGMDIsIDB4MEZGRiwgMHgyRjAzLCAweDEwMDEsCisgICAgMHgyRjA0LCAweDA1MzUsIDB4MkYwNSwgMHgxMDA2LCAweDJGMDYsIDB4MENDQiwgMHgyRjA3LCAweDEwMEUsCisgICAgMHgyRjA4LCAweDBBMTMsIDB4MkYwOSwgMHgxMDcwLCAweDJGMEEsIDB4MENENiwgMHgyRjBCLCAweDBENDAsCisgICAgMHgyRjBDLCAweDEwN0IsIDB4MkYwRCwgMHgxMDgzLCAweDJGMEUsIDB4MTA4OSwgMHgyRjBGLCAweDEwOTMsCisgICAgMHgyRjEwLCAweDEwOTgsIDB4MkYxMSwgMHgwQzVCLCAweDJGMTIsIDB4MEY5NywgMHgyRjEzLCAweDEwQzYsCisgICAgMHgyRjE0LCAweDEwQ0QsIDB4MkYxNSwgMHgxMENFLCAweDJGMTYsIDB4MTBEMywgMHgyRjE3LCAweDA5NDcsCisgICAgMHgyRjE4LCAweDBFN0MsIDB4MkYxOSwgMHgxMERDLCAweDJGMUEsIDB4MTBFMSwgMHgyRjFCLCAweDEwRTgsCisgICAgMHgyRjFDLCAweDBFQTIsIDB4MkYxRCwgMHgwN0IxLCAweDJGMUUsIDB4MTE2QiwgMHgyRjFGLCAweDBDNTQsCisgICAgMHgyRjIwLCAweDA4OUMsIDB4MkYyMSwgMHgxMUJBLCAweDJGMjIsIDB4MTFCQiwgMHgyRjIzLCAweDBGMjYsCisgICAgMHgyRjI0LCAweDBCNDcsIDB4MkYyNSwgMHgwOTgxLCAweDJGMjYsIDB4MDhBMCwgMHgyRjI3LCAweDEyMEUsCisgICAgMHgyRjI4LCAweDBBNDcsIDB4MkYyOSwgMHgwOTk2LCAweDJGMkEsIDB4MTIyNiwgMHgyRjJCLCAweDEyMjgsCisgICAgMHgyRjJDLCAweDEyMzIsIDB4MkYyRCwgMHgwODgxLCAweDJGMkUsIDB4MTI2QywgMHgyRjJGLCAweDA3QkIsCisgICAgMHgyRjMwLCAweDA3N0UsIDB4MkYzMSwgMHgwNkNBLCAweDJGMzIsIDB4MDVFRiwgMHgyRjMzLCAweDEyODMsCisgICAgMHgyRjM0LCAweDEyODUsIDB4MkYzNSwgMHgxMjk5LCAweDJGMzYsIDB4MTI5QiwgMHgyRjM3LCAweDEyQTAsCisgICAgMHgyRjM4LCAweDA2NzcsIDB4MkYzOSwgMHgzOEI5LCAweDJGM0EsIDB4MTJBRiwgMHgyRjNCLCAweDEyQjEsCisgICAgMHgyRjNDLCAweDA5RkEsIDB4MkYzRCwgMHgxMzQyLCAweDJGM0UsIDB4MDc4MSwgMHgyRjNGLCAweDA5MTYsCisgICAgMHgyRjQwLCAweDA4QTcsIDB4MkY0MSwgMHgxM0MyLCAweDJGNDIsIDB4MEUwOCwgMHgyRjQzLCAweDBDNDcsCisgICAgMHgyRjQ0LCAweDA2Q0MsIDB4MkY0NSwgMHgwRTRELCAweDJGNDYsIDB4MTNFMCwgMHgyRjQ3LCAweDBDRDQsCisgICAgMHgyRjQ4LCAweDE0MEMsIDB4MkY0OSwgMHgwNzQ0LCAweDJGNEEsIDB4MEVFNiwgMHgyRjRCLCAweDA3M0QsCisgICAgMHgyRjRDLCAweDA4QUQsIDB4MkY0RCwgMHgxNEU1LCAweDJGNEUsIDB4MTRGNCwgMHgyRjRGLCAweDE0RjgsCisgICAgMHgyRjUwLCAweDBEN0EsIDB4MkY1MSwgMHgwRURGLCAweDJGNTIsIDB4MDhBRiwgMHgyRjUzLCAweDE1MDIsCisgICAgMHgyRjU0LCAweDBBMkIsIDB4MkY1NSwgMHgwNTUwLCAweDJGNTYsIDB4MEJGQSwgMHgyRjU3LCAweDBERDUsCisgICAgMHgyRjU4LCAweDE1RTQsIDB4MkY1OSwgMHgxNUU2LCAweDJGNUEsIDB4MEUyMiwgMHgyRjVCLCAweDA1NjcsCisgICAgMHgyRjVDLCAweDA2ODcsIDB4MkY1RCwgMHgwNzU4LCAweDJGNUUsIDB4MDc3MCwgMHgyRjVGLCAweDA2QzQsCisgICAgMHgyRjYwLCAweDA0REQsIDB4MkY2MSwgMHgwNUUwLCAweDJGNjIsIDB4MDYwMSwgMHgyRjYzLCAweDBBNUMsCisgICAgMHgyRjY0LCAweDBGM0IsIDB4MkY2NSwgMHgwQzNFLCAweDJGNjYsIDB4MEQ5NywgMHgyRjY3LCAweDNBMDAsCisgICAgMHgyRjY4LCAweDE2OTcsIDB4MkY2OSwgMHgwRDI4LCAweDJGNkEsIDB4MEQ3RCwgMHgyRjZCLCAweDA4N0MsCisgICAgMHgyRjZDLCAweDBFRTgsIDB4MkY2RCwgMHgwRUMzLCAweDJGNkUsIDB4MEVGQywgMHgyRjZGLCAweDBBNzQsCisgICAgMHgyRjcwLCAweDA4RDQsIDB4MkY3MSwgMHgzQTQxLCAweDJGNzIsIDB4MDU1MywgMHgyRjczLCAweDA3NDAsCisgICAgMHgyRjc0LCAweDBGNzEsIDB4MkY3NSwgMHgwQjlCLCAweDJGNzYsIDB4MEUxNiwgMHgyRjc3LCAweDA4QjMsCisgICAgMHgyRjc4LCAweDA2MDgsIDB4MkY3OSwgMHgxODEzLCAweDJGN0EsIDB4MEYzRCwgMHgyRjdCLCAweDA0Q0IsCisgICAgMHgyRjdDLCAweDBGREQsIDB4MkY3RCwgMHgwOEQ1LCAweDJGN0UsIDB4MTgzRCwgMHgyRjdGLCAweDA4RDYsCisgICAgMHgyRjgwLCAweDE4NTMsIDB4MkY4MSwgMHgwQ0QxLCAweDJGODIsIDB4MEEwOSwgMHgyRjgzLCAweDA4RDcsCisgICAgMHgyRjg0LCAweDA4QjgsIDB4MkY4NSwgMHgwNEQzLCAweDJGODYsIDB4MEE4OSwgMHgyRjg3LCAweDBBQTYsCisgICAgMHgyRjg4LCAweDA5MzgsIDB4MkY4OSwgMHgwODIxLCAweDJGOEEsIDB4MDlFRCwgMHgyRjhCLCAweDE4QjIsCisgICAgMHgyRjhDLCAweDE5NEYsIDB4MkY4RCwgMHgwQkFDLCAweDJGOEUsIDB4MDc0MiwgMHgyRjhGLCAweDA3RTYsCisgICAgMHgyRjkwLCAweDA0QTUsIDB4MkY5MSwgMHgxOUVCLCAweDJGOTIsIDB4MDc1RiwgMHgyRjkzLCAweDA1QUYsCisgICAgMHgyRjk0LCAweDA3NzQsIDB4MkY5NSwgMHgwQjY5LCAweDJGOTYsIDB4MEM3RSwgMHgyRjk3LCAweDFBNTYsCisgICAgMHgyRjk4LCAweDFBNTksIDB4MkY5OSwgMHgwNThCLCAweDJGOUEsIDB4MEE3QSwgMHgyRjlCLCAweDBBRjgsCisgICAgMHgyRjlDLCAweDBCMEQsIDB4MkY5RCwgMHgwQTBFLCAweDJGOUUsIDB4MDkwMiwgMHgyRjlGLCAweDBBMEYsCisgICAgMHgyRkEwLCAweDBCNjIsIDB4MkZBMSwgMHgzQjRGLCAweDJGQTIsIDB4MEYyMiwgMHgyRkEzLCAweDBDQUIsCisgICAgMHgyRkE0LCAweDBENjQsIDB4MkZBNSwgMHgwRjZDLCAweDJGQTYsIDB4MDZEQSwgMHgyRkE3LCAweDBCRDUsCisgICAgMHgyRkE4LCAweDBFRjMsIDB4MkZBOSwgMHgwRERFLCAweDJGQUEsIDB4MUJDOSwgMHgyRkFCLCAweDFCQ0IsCisgICAgMHgyRkFDLCAweDA0Q0QsIDB4MkZBRCwgMHgyMUY3LCAweDJGQUUsIDB4MEQ4NywgMHgyRkFGLCAweDBFRDgsCisgICAgMHgyRkIwLCAweDA1QjUsIDB4MkZCMSwgMHgxQzAzLCAweDJGQjIsIDB4MUMwNSwgMHgyRkIzLCAweDA1M0IsCisgICAgMHgyRkI0LCAweDBFMTcsIDB4MkZCNSwgMHgwREU5LCAweDJGQjYsIDB4MEQ4OCwgMHgyRkI3LCAweDA5RUYsCisgICAgMHgyRkI4LCAweDA5MUYsIDB4MkZCOSwgMHgwN0YzLCAweDJGQkEsIDB4MEQwNSwgMHgyRkJCLCAweDA4MEUsCisgICAgMHgyRkJDLCAweDA3RjQsIDB4MkZCRCwgMHgxQzZDLCAweDJGQkUsIDB4MUM3RCwgMHgyRkJGLCAweDFDODMsCisgICAgMHgyRkMwLCAweDFDODQsIDB4MkZDMSwgMHgwNjRFLCAweDJGQzIsIDB4MDY5NSwgMHgyRkMzLCAweDBCRDcsCisgICAgMHgyRkM0LCAweDFDRjYsIDB4MkZDNSwgMHgwOERCLCAweDJGQzYsIDB4MUQwMSwgMHgyRkM3LCAweDBFOTEsCisgICAgMHgyRkM4LCAweDM0MEIsIDB4MkZDOSwgMHgwNjZBLCAweDJGQ0EsIDB4MDgwNywgMHgyRkNCLCAweDFEMTYsCisgICAgMHgyRkNDLCAweDFEMTksIDB4MkZDRCwgMHgwQzFFLCAweDJGQ0UsIDB4MDc5MSwgMHgyRkNGLCAweDBBQ0YsCisgICAgMHgyRkQwLCAweDBEOTMsIDB4MkZEMSwgMHgxRDIxLCAweDJGRDIsIDB4MUQyMiwgMHgyRkQzLCAweDBGN0UsCisgICAgMHgyRkQ0LCAweDFEMzAsIDB4MkZENSwgMHgxRDMxLCAweDMwMDAsIDB4MDI3OSwgMHgzMDAxLCAweDAyN0EsCisgICAgMHgzMDAyLCAweDAyN0IsIDB4MzAwMywgMHgwMjhGLCAweDMwMDQsIDB4MjA3NCwgMHgzMDA1LCAweDAyOTEsCisgICAgMHgzMDA2LCAweDAyOTIsIDB4MzAwNywgMHgwMjkzLCAweDMwMDgsIDB4MDJBQSwgMHgzMDA5LCAweDAyQUIsCisgICAgMHgzMDBBLCAweDAyQUMsIDB4MzAwQiwgMHgwMkFELCAweDMwMEMsIDB4MDJBRSwgMHgzMDBELCAweDAyQUYsCisgICAgMHgzMDBFLCAweDAyQjAsIDB4MzAwRiwgMHgwMkIxLCAweDMwMTAsIDB4MDJCMiwgMHgzMDExLCAweDAyQjMsCisgICAgMHgzMDEyLCAweDAyREYsIDB4MzAxMywgMHgwMkU0LCAweDMwMTQsIDB4MDJBNCwgMHgzMDE1LCAweDAyQTUsCisgICAgMHgzMDE2LCAweDNGNDUsIDB4MzAxNywgMHgzRjQ2LCAweDMwMTgsIDB4MkY2MSwgMHgzMDE5LCAweDJGNjIsCisgICAgMHgzMDFDLCAweDAyOTksIDB4MzAxRCwgMHgxREI4LCAweDMwMUYsIDB4MURCOSwgMHgzMDIwLCAweDFGN0EsCisgICAgMHgzMDMwLCAweDJGQkEsIDB4MzAzMywgMHgyRjRDLCAweDMwMzQsIDB4MkY0RCwgMHgzMDM1LCAweDJGNEUsCisgICAgMHgzMDM2LCAweDFGNzksIDB4MzAzQiwgMHgyRjRBLCAweDMwM0MsIDB4M0Y0MiwgMHgzMDNELCAweDJGOTMsCisgICAgMHgzMDQxLCAweDAzNEEsIDB4MzA0MiwgMHgwMzRCLCAweDMwNDMsIDB4MDM0QywgMHgzMDQ0LCAweDAzNEQsCisgICAgMHgzMDQ1LCAweDAzNEUsIDB4MzA0NiwgMHgwMzRGLCAweDMwNDcsIDB4MDM1MCwgMHgzMDQ4LCAweDAzNTEsCisgICAgMHgzMDQ5LCAweDAzNTIsIDB4MzA0QSwgMHgwMzUzLCAweDMwNEIsIDB4MDM1NCwgMHgzMDRDLCAweDAzNTUsCisgICAgMHgzMDRELCAweDAzNTYsIDB4MzA0RSwgMHgwMzU3LCAweDMwNEYsIDB4MDM1OCwgMHgzMDUwLCAweDAzNTksCisgICAgMHgzMDUxLCAweDAzNUEsIDB4MzA1MiwgMHgwMzVCLCAweDMwNTMsIDB4MDM1QywgMHgzMDU0LCAweDAzNUQsCisgICAgMHgzMDU1LCAweDAzNUUsIDB4MzA1NiwgMHgwMzVGLCAweDMwNTcsIDB4MDM2MCwgMHgzMDU4LCAweDAzNjEsCisgICAgMHgzMDU5LCAweDAzNjIsIDB4MzA1QSwgMHgwMzYzLCAweDMwNUIsIDB4MDM2NCwgMHgzMDVDLCAweDAzNjUsCisgICAgMHgzMDVELCAweDAzNjYsIDB4MzA1RSwgMHgwMzY3LCAweDMwNUYsIDB4MDM2OCwgMHgzMDYwLCAweDAzNjksCisgICAgMHgzMDYxLCAweDAzNkEsIDB4MzA2MiwgMHgwMzZCLCAweDMwNjMsIDB4MDM2QywgMHgzMDY0LCAweDAzNkQsCisgICAgMHgzMDY1LCAweDAzNkUsIDB4MzA2NiwgMHgwMzZGLCAweDMwNjcsIDB4MDM3MCwgMHgzMDY4LCAweDAzNzEsCisgICAgMHgzMDY5LCAweDAzNzIsIDB4MzA2QSwgMHgwMzczLCAweDMwNkIsIDB4MDM3NCwgMHgzMDZDLCAweDAzNzUsCisgICAgMHgzMDZELCAweDAzNzYsIDB4MzA2RSwgMHgwMzc3LCAweDMwNkYsIDB4MDM3OCwgMHgzMDcwLCAweDAzNzksCisgICAgMHgzMDcxLCAweDAzN0EsIDB4MzA3MiwgMHgwMzdCLCAweDMwNzMsIDB4MDM3QywgMHgzMDc0LCAweDAzN0QsCisgICAgMHgzMDc1LCAweDAzN0UsIDB4MzA3NiwgMHgwMzdGLCAweDMwNzcsIDB4MDM4MCwgMHgzMDc4LCAweDAzODEsCisgICAgMHgzMDc5LCAweDAzODIsIDB4MzA3QSwgMHgwMzgzLCAweDMwN0IsIDB4MDM4NCwgMHgzMDdDLCAweDAzODUsCisgICAgMHgzMDdELCAweDAzODYsIDB4MzA3RSwgMHgwMzg3LCAweDMwN0YsIDB4MDM4OCwgMHgzMDgwLCAweDAzODksCisgICAgMHgzMDgxLCAweDAzOEEsIDB4MzA4MiwgMHgwMzhCLCAweDMwODMsIDB4MDM4QywgMHgzMDg0LCAweDAzOEQsCisgICAgMHgzMDg1LCAweDAzOEUsIDB4MzA4NiwgMHgwMzhGLCAweDMwODcsIDB4MDM5MCwgMHgzMDg4LCAweDAzOTEsCisgICAgMHgzMDg5LCAweDAzOTIsIDB4MzA4QSwgMHgwMzkzLCAweDMwOEIsIDB4MDM5NCwgMHgzMDhDLCAweDAzOTUsCisgICAgMHgzMDhELCAweDAzOTYsIDB4MzA4RSwgMHgwMzk3LCAweDMwOEYsIDB4MDM5OCwgMHgzMDkwLCAweDAzOTksCisgICAgMHgzMDkxLCAweDAzOUEsIDB4MzA5MiwgMHgwMzlCLCAweDMwOTMsIDB4MDM5QywgMHgzMDk0LCAweDFGMTYsCisgICAgMHgzMDk1LCAweDFGMTcsIDB4MzA5NiwgMHgxRjE4LCAweDMwOTksIDB4M0ZDNiwgMHgzMDlBLCAweDNGQzcsCisgICAgMHgzMDlCLCAweDAyODMsIDB4MzA5QywgMHgwMjg0LCAweDMwOUQsIDB4MDI4RCwgMHgzMDlFLCAweDAyOEUsCisgICAgMHgzMDlGLCAweDJGOTUsIDB4MzBBMCwgMHgzRjRELCAweDMwQTEsIDB4MDM5RCwgMHgzMEEyLCAweDAzOUUsCisgICAgMHgzMEEzLCAweDAzOUYsIDB4MzBBNCwgMHgwM0EwLCAweDMwQTUsIDB4MDNBMSwgMHgzMEE2LCAweDAzQTIsCisgICAgMHgzMEE3LCAweDAzQTMsIDB4MzBBOCwgMHgwM0E0LCAweDMwQTksIDB4MDNBNSwgMHgzMEFBLCAweDAzQTYsCisgICAgMHgzMEFCLCAweDAzQTcsIDB4MzBBQywgMHgwM0E4LCAweDMwQUQsIDB4MDNBOSwgMHgzMEFFLCAweDAzQUEsCisgICAgMHgzMEFGLCAweDAzQUIsIDB4MzBCMCwgMHgwM0FDLCAweDMwQjEsIDB4MDNBRCwgMHgzMEIyLCAweDAzQUUsCisgICAgMHgzMEIzLCAweDAzQUYsIDB4MzBCNCwgMHgwM0IwLCAweDMwQjUsIDB4MDNCMSwgMHgzMEI2LCAweDAzQjIsCisgICAgMHgzMEI3LCAweDAzQjMsIDB4MzBCOCwgMHgwM0I0LCAweDMwQjksIDB4MDNCNSwgMHgzMEJBLCAweDAzQjYsCisgICAgMHgzMEJCLCAweDAzQjcsIDB4MzBCQywgMHgwM0I4LCAweDMwQkQsIDB4MDNCOSwgMHgzMEJFLCAweDAzQkEsCisgICAgMHgzMEJGLCAweDAzQkIsIDB4MzBDMCwgMHgwM0JDLCAweDMwQzEsIDB4MDNCRCwgMHgzMEMyLCAweDAzQkUsCisgICAgMHgzMEMzLCAweDAzQkYsIDB4MzBDNCwgMHgwM0MwLCAweDMwQzUsIDB4MDNDMSwgMHgzMEM2LCAweDAzQzIsCisgICAgMHgzMEM3LCAweDAzQzMsIDB4MzBDOCwgMHgwM0M0LCAweDMwQzksIDB4MDNDNSwgMHgzMENBLCAweDAzQzYsCisgICAgMHgzMENCLCAweDAzQzcsIDB4MzBDQywgMHgwM0M4LCAweDMwQ0QsIDB4MDNDOSwgMHgzMENFLCAweDAzQ0EsCisgICAgMHgzMENGLCAweDAzQ0IsIDB4MzBEMCwgMHgwM0NDLCAweDMwRDEsIDB4MDNDRCwgMHgzMEQyLCAweDAzQ0UsCisgICAgMHgzMEQzLCAweDAzQ0YsIDB4MzBENCwgMHgwM0QwLCAweDMwRDUsIDB4MDNEMSwgMHgzMEQ2LCAweDAzRDIsCisgICAgMHgzMEQ3LCAweDAzRDMsIDB4MzBEOCwgMHgwM0Q0LCAweDMwRDksIDB4MDNENSwgMHgzMERBLCAweDAzRDYsCisgICAgMHgzMERCLCAweDAzRDcsIDB4MzBEQywgMHgwM0Q4LCAweDMwREQsIDB4MDNEOSwgMHgzMERFLCAweDAzREEsCisgICAgMHgzMERGLCAweDAzREIsIDB4MzBFMCwgMHgwM0RDLCAweDMwRTEsIDB4MDNERCwgMHgzMEUyLCAweDAzREUsCisgICAgMHgzMEUzLCAweDAzREYsIDB4MzBFNCwgMHgwM0UwLCAweDMwRTUsIDB4MDNFMSwgMHgzMEU2LCAweDAzRTIsCisgICAgMHgzMEU3LCAweDAzRTMsIDB4MzBFOCwgMHgwM0U0LCAweDMwRTksIDB4MDNFNSwgMHgzMEVBLCAweDAzRTYsCisgICAgMHgzMEVCLCAweDAzRTcsIDB4MzBFQywgMHgwM0U4LCAweDMwRUQsIDB4MDNFOSwgMHgzMEVFLCAweDAzRUEsCisgICAgMHgzMEVGLCAweDAzRUIsIDB4MzBGMCwgMHgwM0VDLCAweDMwRjEsIDB4MDNFRCwgMHgzMEYyLCAweDAzRUUsCisgICAgMHgzMEYzLCAweDAzRUYsIDB4MzBGNCwgMHgwM0YwLCAweDMwRjUsIDB4MDNGMSwgMHgzMEY2LCAweDAzRjIsCisgICAgMHgzMEY3LCAweDIwNzksIDB4MzBGOCwgMHgyMDdBLCAweDMwRjksIDB4MjA3QiwgMHgzMEZBLCAweDIwN0MsCisgICAgMHgzMEZCLCAweDAyN0UsIDB4MzBGQywgMHgwMjk0LCAweDMwRkQsIDB4MDI4QiwgMHgzMEZFLCAweDAyOEMsCisgICAgMHgzMEZGLCAweDNGNDMsIDB4MzE5MCwgMHgzRjlCLCAweDMxOTEsIDB4M0Y5QywgMHgzMTkyLCAweDNGOUQsCisgICAgMHgzMTkzLCAweDNGOUUsIDB4MzE5NCwgMHgzRjlGLCAweDMxOTUsIDB4M0ZBMCwgMHgzMTk2LCAweDNGQTEsCisgICAgMHgzMTk3LCAweDNGQTIsIDB4MzE5OCwgMHgzRkEzLCAweDMxOTksIDB4M0ZBNCwgMHgzMTlBLCAweDNGQTUsCisgICAgMHgzMTlCLCAweDNGQTYsIDB4MzE5QywgMHgzRkE3LCAweDMxOUQsIDB4M0ZBOCwgMHgzMTlFLCAweDNGQTksCisgICAgMHgzMTlGLCAweDNGQUEsIDB4MzFGMCwgMHgzRjZDLCAweDMxRjEsIDB4M0Y2RCwgMHgzMUYyLCAweDNGNkUsCisgICAgMHgzMUYzLCAweDNGNkYsIDB4MzFGNCwgMHgzRjcwLCAweDMxRjUsIDB4M0Y3MSwgMHgzMUY2LCAweDNGNzIsCisgICAgMHgzMUY3LCAweDNGNzMsIDB4MzFGOCwgMHgzRjc0LCAweDMxRjksIDB4M0Y3NSwgMHgzMUZBLCAweDNGNzcsCisgICAgMHgzMUZCLCAweDNGNzgsIDB4MzFGQywgMHgzRjc5LCAweDMxRkQsIDB4M0Y3QSwgMHgzMUZFLCAweDNGN0IsCisgICAgMHgzMUZGLCAweDNGN0MsIDB4MzIyMCwgMHgyNzhFLCAweDMyMjEsIDB4Mjc4RiwgMHgzMjIyLCAweDI3OTAsCisgICAgMHgzMjIzLCAweDI3OTEsIDB4MzIyNCwgMHgyNzkyLCAweDMyMjUsIDB4Mjc5MywgMHgzMjI2LCAweDI3OTQsCisgICAgMHgzMjI3LCAweDI3OTUsIDB4MzIyOCwgMHgyNzk2LCAweDMyMjksIDB4Mjc5NywgMHgzMjJBLCAweDIwMDYsCisgICAgMHgzMjJCLCAweDIwMDcsIDB4MzIyQywgMHgyMDA4LCAweDMyMkQsIDB4MjAwOSwgMHgzMjJFLCAweDIwMEEsCisgICAgMHgzMjJGLCAweDIwMEIsIDB4MzIzMCwgMHgyMDA1LCAweDMyMzEsIDB4MURDMiwgMHgzMjMyLCAweDFEQzMsCisgICAgMHgzMjMzLCAweDFGQ0YsIDB4MzIzNCwgMHgxRkNELCAweDMyMzUsIDB4MUZENCwgMHgzMjM2LCAweDFGRDMsCisgICAgMHgzMjM3LCAweDIwMEMsIDB4MzIzOCwgMHgxRkNFLCAweDMyMzksIDB4MURDNCwgMHgzMjNBLCAweDFGRDcsCisgICAgMHgzMjNCLCAweDFGRDUsIDB4MzIzQywgMHgxRkQwLCAweDMyM0QsIDB4MUZDQiwgMHgzMjNFLCAweDFGRDIsCisgICAgMHgzMjNGLCAweDFGQ0MsIDB4MzI0MCwgMHgxRkQ2LCAweDMyNDEsIDB4MjAwRCwgMHgzMjQyLCAweDFGRDEsCisgICAgMHgzMjQzLCAweDFGQ0EsIDB4MzI1MSwgMHgxRjlCLCAweDMyNTIsIDB4MUZBNiwgMHgzMjUzLCAweDFGQTcsCisgICAgMHgzMjU0LCAweDFGQTgsIDB4MzI1NSwgMHgxRkE5LCAweDMyNTYsIDB4MUZBQSwgMHgzMjU3LCAweDFGQUIsCisgICAgMHgzMjU4LCAweDFGQUMsIDB4MzI1OSwgMHgxRkFELCAweDMyNUEsIDB4MUZBRSwgMHgzMjVCLCAweDFGQUYsCisgICAgMHgzMjVDLCAweDI4MDQsIDB4MzI1RCwgMHgyODA1LCAweDMyNUUsIDB4MjgwNiwgMHgzMjVGLCAweDI4MDcsCisgICAgMHgzMjgwLCAweDI4REQsIDB4MzI4MSwgMHgyOERFLCAweDMyODIsIDB4MjhERiwgMHgzMjgzLCAweDI4RTAsCisgICAgMHgzMjg0LCAweDI4RTEsIDB4MzI4NSwgMHgyOEUyLCAweDMyODYsIDB4MjhFMywgMHgzMjg3LCAweDI4RTQsCisgICAgMHgzMjg4LCAweDI4RTUsIDB4MzI4OSwgMHgyOEU2LCAweDMyOEEsIDB4MjhFOCwgMHgzMjhCLCAweDI4RTksCisgICAgMHgzMjhDLCAweDI4RUEsIDB4MzI4RCwgMHgyOEVCLCAweDMyOEUsIDB4MjhFQywgMHgzMjhGLCAweDI4RUQsCisgICAgMHgzMjkwLCAweDI4RTcsIDB4MzI5MSwgMHgxRkUxLCAweDMyOTIsIDB4MUZFMCwgMHgzMjkzLCAweDFGRTIsCisgICAgMHgzMjk0LCAweDFGREMsIDB4MzI5NSwgMHgyOEZGLCAweDMyOTYsIDB4MUZFNSwgMHgzMjk3LCAweDI4RkMsCisgICAgMHgzMjk4LCAweDFGREUsIDB4MzI5OSwgMHgyMDFGLCAweDMyOUEsIDB4MjhGOSwgMHgzMjlCLCAweDI4RjgsCisgICAgMHgzMjlDLCAweDI4RkUsIDB4MzI5RCwgMHgyMDdGLCAweDMyOUUsIDB4MUZGRiwgMHgzMjlGLCAweDI4RUYsCisgICAgMHgzMkEwLCAweDI4RjYsIDB4MzJBMSwgMHgyOEY3LCAweDMyQTIsIDB4MjhGQiwgMHgzMkEzLCAweDI4RkEsCisgICAgMHgzMkE0LCAweDFEQkQsIDB4MzJBNSwgMHgxREJFLCAweDMyQTYsIDB4MURCRiwgMHgzMkE3LCAweDFEQzAsCisgICAgMHgzMkE4LCAweDFEQzEsIDB4MzJBOSwgMHgxRkRBLCAweDMyQUEsIDB4MUZERCwgMHgzMkFCLCAweDFGREYsCisgICAgMHgzMkFDLCAweDFGRTMsIDB4MzJBRCwgMHgxRkQ5LCAweDMyQUUsIDB4MUZFNCwgMHgzMkFGLCAweDFGREIsCisgICAgMHgzMkIwLCAweDFGRDgsIDB4MzJCMSwgMHgyODA4LCAweDMyQjIsIDB4MjgwOSwgMHgzMkIzLCAweDI4MEEsCisgICAgMHgzMkI0LCAweDI4MEIsIDB4MzJCNSwgMHgyODBDLCAweDMyQjYsIDB4MjgwRCwgMHgzMkI3LCAweDI4MEUsCisgICAgMHgzMkI4LCAweDI4MEYsIDB4MzJCOSwgMHgyODEwLCAweDMyQkEsIDB4MjgxMSwgMHgzMkJCLCAweDI4MTIsCisgICAgMHgzMkJDLCAweDI4MTMsIDB4MzJCRCwgMHgyODE0LCAweDMyQkUsIDB4MjgxNSwgMHgzMkJGLCAweDI4MTYsCisgICAgMHgzMkQwLCAweDI4QUQsIDB4MzJEMSwgMHgyOEFFLCAweDMyRDIsIDB4MjhBRiwgMHgzMkQzLCAweDI4QjAsCisgICAgMHgzMkQ0LCAweDI4QjEsIDB4MzJENSwgMHgyOEIyLCAweDMyRDYsIDB4MjhCMywgMHgzMkQ3LCAweDI4QjQsCisgICAgMHgzMkQ4LCAweDI4QjUsIDB4MzJEOSwgMHgyOEI2LCAweDMyREEsIDB4MjhCNywgMHgzMkRCLCAweDI4QjgsCisgICAgMHgzMkRDLCAweDI4QjksIDB4MzJERCwgMHgyOEJBLCAweDMyREUsIDB4MjhCQiwgMHgzMkRGLCAweDI4QkMsCisgICAgMHgzMkUwLCAweDI4QkQsIDB4MzJFMSwgMHgyOEJFLCAweDMyRTIsIDB4MjhCRiwgMHgzMkUzLCAweDI4QzAsCisgICAgMHgzMkU0LCAweDI4QzEsIDB4MzJFNSwgMHgyOEMyLCAweDMyRTYsIDB4MjhDMywgMHgzMkU3LCAweDI4QzQsCisgICAgMHgzMkU4LCAweDI4QzUsIDB4MzJFOSwgMHgyOEM2LCAweDMyRUEsIDB4MjhDNywgMHgzMkVCLCAweDI4QzgsCisgICAgMHgzMkVDLCAweDI4QzksIDB4MzJFRCwgMHgyOENBLCAweDMyRUUsIDB4MjhDQiwgMHgzMkVGLCAweDI4Q0MsCisgICAgMHgzMkYwLCAweDI4Q0QsIDB4MzJGMSwgMHgyOENFLCAweDMyRjIsIDB4MjhDRiwgMHgzMkYzLCAweDI4RDAsCisgICAgMHgzMkY0LCAweDI4RDEsIDB4MzJGNSwgMHgyOEQyLCAweDMyRjYsIDB4MjhEMywgMHgzMkY3LCAweDI4RDQsCisgICAgMHgzMkY4LCAweDI4RDUsIDB4MzJGOSwgMHgyOEQ2LCAweDMyRkEsIDB4MjhENywgMHgzMkZCLCAweDI4RDgsCisgICAgMHgzMkZDLCAweDI4RDksIDB4MzJGRCwgMHgyOERBLCAweDMyRkUsIDB4MjhEQiwgMHgzMzAwLCAweDFGNzAsCisgICAgMHgzMzAxLCAweDJFNjIsIDB4MzMwMiwgMHgyRTYzLCAweDMzMDMsIDB4MUY2QSwgMHgzMzA0LCAweDJFNjQsCisgICAgMHgzMzA1LCAweDFGRjcsIDB4MzMwNiwgMHgyRTY1LCAweDMzMDcsIDB4MkU2OSwgMHgzMzA4LCAweDJFNjcsCisgICAgMHgzMzA5LCAweDJFNkMsIDB4MzMwQSwgMHgyRTZBLCAweDMzMEIsIDB4MkU2RSwgMHgzMzBDLCAweDJFNzAsCisgICAgMHgzMzBELCAweDFEQUIsIDB4MzMwRSwgMHgyRTcxLCAweDMzMEYsIDB4MkU3MiwgMHgzMzEwLCAweDJFNzMsCisgICAgMHgzMzExLCAweDJFNzQsIDB4MzMxMiwgMHgyRTc1LCAweDMzMTMsIDB4MkU3NiwgMHgzMzE0LCAweDFEQTIsCisgICAgMHgzMzE1LCAweDFGNjksIDB4MzMxNiwgMHgxRjY3LCAweDMzMTcsIDB4MkU3OCwgMHgzMzE4LCAweDFGNjgsCisgICAgMHgzMzE5LCAweDJFN0EsIDB4MzMxQSwgMHgyRTdDLCAweDMzMUIsIDB4MkU3RCwgMHgzMzFDLCAweDJFN0UsCisgICAgMHgzMzFELCAweDJFN0YsIDB4MzMxRSwgMHgxRjczLCAweDMzMUYsIDB4MkU4MCwgMHgzMzIwLCAweDJFODEsCisgICAgMHgzMzIxLCAweDJFODIsIDB4MzMyMiwgMHgxRjY2LCAweDMzMjMsIDB4MUY2QiwgMHgzMzI0LCAweDJFODMsCisgICAgMHgzMzI1LCAweDJFODUsIDB4MzMyNiwgMHgxREFDLCAweDMzMjcsIDB4MURBNiwgMHgzMzI4LCAweDJFODgsCisgICAgMHgzMzI5LCAweDJFODksIDB4MzMyQSwgMHgxRjc0LCAweDMzMkIsIDB4MURBRSwgMHgzMzJELCAweDJFOEIsCisgICAgMHgzMzJFLCAweDJFOEUsIDB4MzMyRiwgMHgyRThGLCAweDMzMzAsIDB4MkU5MCwgMHgzMzMxLCAweDFGNzEsCisgICAgMHgzMzMyLCAweDJFOTEsIDB4MzMzMywgMHgyMDg3LCAweDMzMzQsIDB4MkU5NCwgMHgzMzM1LCAweDJFOTUsCisgICAgMHgzMzM2LCAweDFEQTgsIDB4MzMzNywgMHgyRTlBLCAweDMzMzgsIDB4MkU5QywgMHgzMzM5LCAweDFGNkUsCisgICAgMHgzMzNBLCAweDJFOUQsIDB4MzMzQiwgMHgxRjZGLCAweDMzM0MsIDB4MkU5NiwgMHgzMzNELCAweDJFOUUsCisgICAgMHgzMzNFLCAweDJFQTAsIDB4MzMzRiwgMHgyRUExLCAweDMzNDAsIDB4MkVBMiwgMHgzMzQxLCAweDJFOUYsCisgICAgMHgzMzQyLCAweDFGNkQsIDB4MzM0MywgMHgyRUEzLCAweDMzNDQsIDB4MkVBNCwgMHgzMzQ1LCAweDJFQTUsCisgICAgMHgzMzQ2LCAweDJFQTYsIDB4MzM0NywgMHgxRjcyLCAweDMzNDgsIDB4MkVBNywgMHgzMzQ5LCAweDFEQTEsCisgICAgMHgzMzRBLCAweDFEQUYsIDB4MzM0QiwgMHgyRUE4LCAweDMzNEMsIDB4MkVBOSwgMHgzMzRELCAweDFEQTQsCisgICAgMHgzMzRFLCAweDIwODgsIDB4MzM0RiwgMHgyRUFBLCAweDMzNTAsIDB4MkVBQiwgMHgzMzUxLCAweDFEQTksCisgICAgMHgzMzUyLCAweDJFQUUsIDB4MzM1MywgMHgyRUIyLCAweDMzNTQsIDB4MkVBRiwgMHgzMzU1LCAweDJFQjMsCisgICAgMHgzMzU2LCAweDJFQjQsIDB4MzM1NywgMHgxRjZDLCAweDMzNzEsIDB4MkU1NSwgMHgzMzdCLCAweDIwODMsCisgICAgMHgzMzdDLCAweDFEQzcsIDB4MzM3RCwgMHgxREM2LCAweDMzN0UsIDB4MURDNSwgMHgzMzdGLCAweDFGNzYsCisgICAgMHgzMzg1LCAweDFGNUYsIDB4MzM4NiwgMHgxRjYwLCAweDMzODcsIDB4MUY2MSwgMHgzMzg4LCAweDIwMDAsCisgICAgMHgzMzg5LCAweDIwMDEsIDB4MzM4RCwgMHgyRTU4LCAweDMzOEUsIDB4MURCNCwgMHgzMzhGLCAweDFEQjUsCisgICAgMHgzMzkwLCAweDFGNjMsIDB4MzM5NiwgMHgxRjY1LCAweDMzOTcsIDB4MUY1OCwgMHgzMzk4LCAweDFGNUEsCisgICAgMHgzMzlCLCAweDJFNTksIDB4MzM5QywgMHgxREIxLCAweDMzOUQsIDB4MURCMiwgMHgzMzlFLCAweDFEQjMsCisgICAgMHgzMzlGLCAweDFGRkEsIDB4MzNBMCwgMHgxRjU0LCAweDMzQTEsIDB4MURCNywgMHgzM0EyLCAweDFGNTUsCisgICAgMHgzM0EzLCAweDFGRkIsIDB4MzNBNCwgMHgxRjU2LCAweDMzQTUsIDB4MUY1NywgMHgzM0E2LCAweDFGRkMsCisgICAgMHgzM0IwLCAweDFGNUUsIDB4MzNCMSwgMHgxRjVELCAweDMzQjIsIDB4MUY1QywgMHgzM0IzLCAweDFGNUIsCisgICAgMHgzM0MyLCAweDJFNTAsIDB4MzNDNCwgMHgxREI2LCAweDMzQzgsIDB4MjAwMiwgMHgzM0NCLCAweDFGNjIsCisgICAgMHgzM0NDLCAweDFGRjYsIDB4MzNDRCwgMHgxREJCLCAweDMzRDQsIDB4MUY2NCwgMHgzM0Q3LCAweDJFNUQsCisgICAgMHgzM0Q4LCAweDJFNUUsIDB4MzNEQSwgMHgyRTRCLCAweDM0MDIsIDB4MzU4MiwgMHgzNDA1LCAweDNDMUIsCisgICAgMHgzNDA2LCAweDQzNUEsIDB4MzQyNywgMHgzNjU2LCAweDM0MkMsIDB4NDM1RSwgMHgzNDJFLCAweDM3ODgsCisgICAgMHgzNDY4LCAweDM2REYsIDB4MzQ2QSwgMHg0Mzc1LCAweDM0ODgsIDB4M0M1MiwgMHgzNDkyLCAweDQzOEUsCisgICAgMHgzNEI1LCAweDQxOTksIDB4MzRCQywgMHg0Mzk3LCAweDM0QzEsIDB4NDdEMCwgMHgzNEM3LCAweDQzOUIsCisgICAgMHgzNERCLCAweDNDNDEsIDB4MzUxRiwgMHgzNjI5LCAweDM1M0UsIDB4MzcxRSwgMHgzNTVELCAweDQzQkQsCisgICAgMHgzNTVFLCAweDQzQkUsIDB4MzU2MywgMHg0M0MwLCAweDM1NkUsIDB4NDNDNCwgMHgzNUE2LCAweDQzRDksCisgICAgMHgzNUE4LCAweDQzREIsIDB4MzVDNSwgMHg0M0UxLCAweDM1REEsIDB4NDNFQSwgMHgzNURFLCAweDRFNjMsCisgICAgMHgzNUY0LCAweDQzRjMsIDB4MzYwNSwgMHg0M0ZBLCAweDM2MTQsIDB4NEFCQiwgMHgzNjRBLCAweDQ0MjEsCisgICAgMHgzNjkxLCAweDQ0NDEsIDB4MzY5NiwgMHg0NDQ1LCAweDM2OTksIDB4NDQ0MywgMHgzNkNGLCAweDQ0NTYsCisgICAgMHgzNzYxLCAweDQ0NzgsIDB4Mzc2MiwgMHg0NDc5LCAweDM3NkIsIDB4NDQ3RCwgMHgzNzZDLCAweDQ0N0MsCisgICAgMHgzNzc1LCAweDQ0ODAsIDB4Mzc4RCwgMHgzNjFBLCAweDM3QzEsIDB4NDQ4RSwgMHgzN0UyLCAweDM3MkIsCisgICAgMHgzN0U4LCAweDQ0QTIsIDB4MzdGNCwgMHg0NEE1LCAweDM3RkQsIDB4NDRBOCwgMHgzODAwLCAweDQ0QUEsCisgICAgMHgzODJGLCAweDQ0QjQsIDB4MzgzNiwgMHg0NEI1LCAweDM4NDAsIDB4NDRCNiwgMHgzODVDLCAweDQ0QkEsCisgICAgMHgzODYxLCAweDQ0QkMsIDB4MzhBMSwgMHg0RUNCLCAweDM4QUQsIDB4NEFCQywgMHgzOEZBLCAweDM2MUMsCisgICAgMHgzOTE3LCAweDQ0RDksIDB4MzkxQSwgMHg0NERDLCAweDM5NkYsIDB4NDRFQiwgMHgzOUE0LCAweDRFOUEsCisgICAgMHgzOUI4LCAweDRFOUIsIDB4M0E1QywgMHg0RTlGLCAweDNBNkUsIDB4NDUzMSwgMHgzQTczLCAweDQ1MzQsCisgICAgMHgzQTg1LCAweDRFQUUsIDB4M0FDNCwgMHg0RUE3LCAweDNBQ0IsIDB4NEVBOCwgMHgzQUQ2LCAweDQ1NDMsCisgICAgMHgzQUQ3LCAweDQ1NUUsIDB4M0FFQSwgMHg0NTRELCAweDNBRjMsIDB4M0M0MCwgMHgzQjBFLCAweDQ1NTgsCisgICAgMHgzQjFBLCAweDQ1NUMsIDB4M0IxQywgMHg0NTVELCAweDNCMjIsIDB4M0M0OSwgMHgzQjZELCAweDQ1OEMsCisgICAgMHgzQjc3LCAweDQ1ODUsIDB4M0I4NywgMHg0NUEyLCAweDNCODgsIDB4MzY4RCwgMHgzQjhELCAweDQ1QTQsCisgICAgMHgzQkE0LCAweDQ1QUEsIDB4M0JCNiwgMHg0MjBFLCAweDNCQzMsIDB4NDIwRiwgMHgzQkNELCAweDQ1QjgsCisgICAgMHgzQkYwLCAweDQ1QzksIDB4M0JGMywgMHg0RUI3LCAweDNDMEYsIDB4NDIxNywgMHgzQzI2LCAweDQ1REYsCisgICAgMHgzQ0MzLCAweDQ1RkMsIDB4M0NEMiwgMHg0NjAxLCAweDNEMTEsIDB4NDYyNSwgMHgzRDFFLCAweDQ2MzAsCisgICAgMHgzRDMxLCAweDRFQkUsIDB4M0Q0RSwgMHgxREU3LCAweDNENjQsIDB4NDY0QSwgMHgzRDlBLCAweDQ2NTgsCisgICAgMHgzREMwLCAweDQ2NkEsIDB4M0RDQywgMHg0QUJELCAweDNERDQsIDB4NDY2RiwgMHgzRTA1LCAweDQ2N0IsCisgICAgMHgzRTNGLCAweDQyNDgsIDB4M0U0MCwgMHg0RUNBLCAweDNFNjAsIDB4NDY4QiwgMHgzRTY2LCAweDQ2OEQsCisgICAgMHgzRTY4LCAweDQ2OEUsIDB4M0U4MywgMHg0Njk1LCAweDNFOEEsIDB4M0M0MywgMHgzRTk0LCAweDQ2OUIsCisgICAgMHgzRURBLCAweDNDNDgsIDB4M0Y1NywgMHg0NkNCLCAweDNGNzIsIDB4NDI1OCwgMHgzRjc1LCAweDQ2RDksCisgICAgMHgzRjc3LCAweDQ2REIsIDB4M0ZBRSwgMHg0NkVELCAweDNGQjEsIDB4Mzc1NCwgMHgzRkM5LCAweDQ2RjgsCisgICAgMHgzRkQ3LCAweDQ2RkQsIDB4M0ZEQywgMHg0QUJFLCAweDQwMzksIDB4NDcwRiwgMHg0MDU4LCAweDQ3MTYsCisgICAgMHg0MDkzLCAweDNDNEMsIDB4NDEwMywgMHgzQzRGLCAweDQxMDUsIDB4NDczQiwgMHg0MTQ4LCAweDQ3NDcsCisgICAgMHg0MTRGLCAweDQ3NEEsIDB4NDE2MywgMHg0NzRFLCAweDQxQjQsIDB4NDc1RCwgMHg0MUJGLCAweDQ3NjAsCisgICAgMHg0MUU2LCAweDQ3NkIsIDB4NDFFRSwgMHg0NzZGLCAweDQxRjMsIDB4NDc2QywgMHg0MjA3LCAweDQ3NzYsCisgICAgMHg0MjBFLCAweDQ3NzksIDB4NDI2NCwgMHgzNzYwLCAweDQyOTMsIDB4M0M1MCwgMHg0MkM2LCAweDQ3OUYsCisgICAgMHg0MkQ2LCAweDQ3QUEsIDB4NDJERCwgMHg0N0FFLCAweDQzMDIsIDB4NDdCQywgMHg0MzJCLCAweDQ3QzksCisgICAgMHg0MzQzLCAweDQ3Q0IsIDB4NDNFRSwgMHg0N0Y3LCAweDQzRjAsIDB4NDdGQSwgMHg0NDA4LCAweDQ4MDAsCisgICAgMHg0NDBDLCAweDNDNDIsIDB4NDQxNywgMHg0ODAyLCAweDQ0MUMsIDB4NDgwMywgMHg0NDIyLCAweDQ4MDUsCisgICAgMHg0NDUzLCAweDM3NzMsIDB4NDQ1QiwgMHg0MkE0LCAweDQ0NzYsIDB4NDgxQywgMHg0NDdBLCAweDQ4MUQsCisgICAgMHg0NDkxLCAweDQ4MjMsIDB4NDRCMywgMHg0ODNFLCAweDQ0QkUsIDB4NDgzQywgMHg0NEQ0LCAweDQ4M0QsCisgICAgMHg0NTA4LCAweDQ4NUMsIDB4NDUwRCwgMHg0ODU4LCAweDQ1MjUsIDB4Mzc3RSwgMHg0NTQzLCAweDQ4NkMsCisgICAgMHg0NTdBLCAweDNDNEIsIDB4NDU5RCwgMHg0MkQ0LCAweDQ1QjgsIDB4NDhBMCwgMHg0NUJFLCAweDRBQkYsCisgICAgMHg0NUU1LCAweDQ4QkEsIDB4NDVFQSwgMHg0MkQ5LCAweDQ2MEYsIDB4NDhDQSwgMHg0NjEwLCAweDRBQzAsCisgICAgMHg0NjQxLCAweDQ4RDgsIDB4NDY2NSwgMHgzQzRFLCAweDQ2QTEsIDB4NDhFOSwgMHg0NkFFLCAweDNDNTEsCisgICAgMHg0NkFGLCAweDQ4RUQsIDB4NDcwQywgMHg0OTAyLCAweDQ3MUYsIDB4NEVGQiwgMHg0NzY0LCAweDQ5MTgsCisgICAgMHg0N0U2LCAweDM3OTAsIDB4NDdGRCwgMHg0OTI0LCAweDQ4MTYsIDB4NDkyRSwgMHg0ODFFLCAweDRGMDEsCisgICAgMHg0ODQ0LCAweDQyRjUsIDB4NDg0RSwgMHg0OTNBLCAweDQ4QjUsIDB4NDk1QiwgMHg0OUIwLCAweDQzMUYsCisgICAgMHg0OUU3LCAweDQ5RDIsIDB4NDlGQSwgMHg0OUQ2LCAweDRBMDQsIDB4NDlEQiwgMHg0QTI5LCAweDQ5REUsCisgICAgMHg0QUJDLCAweDQ5RjYsIDB4NEIzOCwgMHgzNURGLCAweDRCM0IsIDB4NEEwRSwgMHg0QjdFLCAweDRBQzEsCisgICAgMHg0QkMyLCAweDRBMzMsIDB4NEJDQSwgMHg0QTM1LCAweDRCRDIsIDB4NEEzNywgMHg0QkU4LCAweDNDNDYsCisgICAgMHg0QzE3LCAweDQzMzQsIDB4NEMyMCwgMHg0QTQ4LCAweDRDMzgsIDB4NEFDMiwgMHg0Q0M0LCAweDRBODQsCisgICAgMHg0Q0QxLCAweDRBODcsIDB4NENFMSwgMHg0QUMzLCAweDREMDcsIDB4NEE5QiwgMHg0RDc3LCAweDRBQUIsCisgICAgMHg0RTAwLCAweDA0QjAsIDB4NEUwMSwgMHgwQkI4LCAweDRFMDIsIDB4NDM1MiwgMHg0RTAzLCAweDA4RTMsCisgICAgMHg0RTA0LCAweDM3RDgsIDB4NEUwNSwgMHgzN0Q5LCAweDRFMDcsIDB4MEVBQSwgMHg0RTA4LCAweDA5Q0UsCisgICAgMHg0RTA5LCAweDA4N0UsIDB4NEUwQSwgMHgwOUNELCAweDRFMEIsIDB4MDUzQywgMHg0RTBDLCAweDRBQzQsCisgICAgMHg0RTBELCAweDBEQzYsIDB4NEUwRSwgMHgwRjI5LCAweDRFMEYsIDB4NDM1MywgMHg0RTEwLCAweDBGRkIsCisgICAgMHg0RTExLCAweDA0RDEsIDB4NEUxMiwgMHg0MzU0LCAweDRFMTQsIDB4MDVDQywgMHg0RTE1LCAweDBGRkMsCisgICAgMHg0RTE2LCAweDBBNDgsIDB4NEUxNywgMHgxMEQ3LCAweDRFMTgsIDB4MDY3MCwgMHg0RTE5LCAweDBFMEEsCisgICAgMHg0RTFFLCAweDA5Q0YsIDB4NEUxRiwgMHgzN0RBLCAweDRFMjEsIDB4MEY4NiwgMHg0RTIzLCAweDRBQzUsCisgICAgMHg0RTI0LCAweDRBQzYsIDB4NEUyNiwgMHgwRTEyLCAweDRFMjgsIDB4MjBCMywgMHg0RTI5LCAweDQzNTUsCisgICAgMHg0RTJBLCAweDBGRkQsIDB4NEUyQiwgMHgzN0RCLCAweDRFMkMsIDB4Mzc0RCwgMHg0RTJELCAweDBCQTQsCisgICAgMHg0RTJFLCAweDQzNTYsIDB4NEUyRiwgMHgzN0RDLCAweDRFMzAsIDB4MzdERCwgMHg0RTMxLCAweDBGRkUsCisgICAgMHg0RTMyLCAweDA2RjIsIDB4NEUzNiwgMHgwRkZGLCAweDRFMzcsIDB4MzY5RCwgMHg0RTM4LCAweDA2MTksCisgICAgMHg0RTM5LCAweDBCNkUsIDB4NEUzQiwgMHgwOTEzLCAweDRFM0MsIDB4MTAwMCwgMHg0RTNGLCAweDEwMDEsCisgICAgMHg0RTQwLCAweDM3REUsIDB4NEU0MSwgMHgzN0RGLCAweDRFNDIsIDB4MTAwMiwgMHg0RTQzLCAweDBDRUIsCisgICAgMHg0RTQ0LCAweDM3RTAsIDB4NEU0NSwgMHgwNjcxLCAweDRFNDcsIDB4NDM1NywgMHg0RTQ4LCAweDM3MkUsCisgICAgMHg0RTRCLCAweDBDRUQsIDB4NEU0RCwgMHgwQ0JCLCAweDRFNEUsIDB4MDc3NywgMHg0RTRGLCAweDBFNjEsCisgICAgMHg0RTUxLCAweDQzNTksIDB4NEU1NSwgMHgxOTUwLCAweDRFNTYsIDB4MTAwMywgMHg0RTU3LCAweDA5RDAsCisgICAgMHg0RTU4LCAweDEwMDQsIDB4NEU1OSwgMHgwNTM1LCAweDRFNUEsIDB4MzdFMSwgMHg0RTVELCAweDA2REQsCisgICAgMHg0RTVFLCAweDA3QTQsIDB4NEU1RiwgMHgwRUY1LCAweDRFNjIsIDB4MTIzMywgMHg0RTY5LCAweDQzNUMsCisgICAgMHg0RTcxLCAweDBGNUEsIDB4NEU3MywgMHgwQ0Q1LCAweDRFNzksIDB4NEFDNywgMHg0RTdFLCAweDA1RTEsCisgICAgMHg0RTdGLCAweDM3RTIsIDB4NEU4MCwgMHgwNjRGLCAweDRFODIsIDB4MTAwNSwgMHg0RTg1LCAweDEwMDYsCisgICAgMHg0RTg2LCAweDBGODMsIDB4NEU4OCwgMHgwRjI3LCAweDRFODksIDB4MEFFQSwgMHg0RThBLCAweDEwMDgsCisgICAgMHg0RThCLCAweDA4QzQsIDB4NEU4QywgMHgwQ0NCLCAweDRFOEQsIDB4MzdFMywgMHg0RThFLCAweDEwMEIsCisgICAgMHg0RTkxLCAweDA0RTAsIDB4NEU5MiwgMHgwNzkzLCAweDRFOTQsIDB4MDc5MiwgMHg0RTk1LCAweDA0QUEsCisgICAgMHg0RTk2LCAweDM3RTQsIDB4NEU5OCwgMHgwRkYxLCAweDRFOTksIDB4MEZGMCwgMHg0RTlCLCAweDA4MjMsCisgICAgMHg0RTlDLCAweDA0NjUsIDB4NEU5RCwgMHg0MzVELCAweDRFOUUsIDB4MTAwQywgMHg0RTlGLCAweDEwMEQsCisgICAgMHg0RUEwLCAweDEwMEUsIDB4NEVBMSwgMHgwRTYyLCAweDRFQTIsIDB4MTAwRiwgMHg0RUE0LCAweDA3QTYsCisgICAgMHg0RUE1LCAweDA0QUIsIDB4NEVBNiwgMHgwRUEwLCAweDRFQTgsIDB4MDY5NiwgMHg0RUFCLCAweDA2OTcsCisgICAgMHg0RUFDLCAweDA2OTgsIDB4NEVBRCwgMHgwQkZFLCAweDRFQUUsIDB4MEY4NCwgMHg0RUIwLCAweDEwMTAsCisgICAgMHg0RUIzLCAweDEwMTEsIDB4NEVCNiwgMHgxMDEyLCAweDRFQjksIDB4MzdFNSwgMHg0RUJBLCAweDBBMTMsCisgICAgMHg0RUJCLCAweDM2MjAsIDB4NEVCQywgMHg0MzVGLCAweDRFQzAsIDB4MDk0NCwgMHg0RUMxLCAweDBBMTQsCisgICAgMHg0RUMyLCAweDEwMTcsIDB4NEVDMywgMHg0MzYwLCAweDRFQzQsIDB4MTAxNSwgMHg0RUM2LCAweDEwMTYsCisgICAgMHg0RUM3LCAweDA2NzIsIDB4NEVDOCwgMHg0MzYxLCAweDRFQ0EsIDB4MDgxMywgMHg0RUNCLCAweDA1NzAsCisgICAgMHg0RUNELCAweDEwMTQsIDB4NEVDRSwgMHgxMDEzLCAweDRFQ0YsIDB4MERGOSwgMHg0RUQwLCAweDM3RTYsCisgICAgMHg0RUQ0LCAweDA4OTQsIDB4NEVENSwgMHgwODkzLCAweDRFRDYsIDB4MEIxRSwgMHg0RUQ3LCAweDEwMTgsCisgICAgMHg0RUQ4LCAweDBEQzcsIDB4NEVEOSwgMHgwQThCLCAweDRFREEsIDB4NDM2MywgMHg0RURELCAweDAyOTAsCisgICAgMHg0RURFLCAweDEwMTksIDB4NEVERiwgMHgxMDFCLCAweDRFRTAsIDB4MzdFNywgMHg0RUUxLCAweDIwQjQsCisgICAgMHg0RUUzLCAweDBCNDUsIDB4NEVFNCwgMHgwRkE5LCAweDRFRTUsIDB4MDQ4RSwgMHg0RUVCLCAweDQzNjIsCisgICAgMHg0RUVELCAweDEwMUEsIDB4NEVFRSwgMHgwNTNFLCAweDRFRjAsIDB4MDZCQywgMHg0RUYxLCAweDQzNjQsCisgICAgMHg0RUYyLCAweDBCQTUsIDB4NEVGMywgMHg0QUM4LCAweDRFRjUsIDB4NDM2NSwgMHg0RUY2LCAweDA3NDUsCisgICAgMHg0RUY3LCAweDEwMUMsIDB4NEVGQiwgMHgwQ0RBLCAweDRFRkMsIDB4MjBCNSwgMHg0RUZELCAweDM3RTgsCisgICAgMHg0RUZGLCAweDM3RTksIDB4NEYwMCwgMHgyMEI2LCAweDRGMDEsIDB4MDYyNywgMHg0RjAzLCAweDIwQjcsCisgICAgMHg0RjA5LCAweDEwMUQsIDB4NEYwQSwgMHgwNDhGLCAweDRGMEIsIDB4MzdFQSwgMHg0RjBDLCAweDRBQzksCisgICAgMHg0RjBELCAweDA3OTQsIDB4NEYwRSwgMHgwNjI4LCAweDRGMEYsIDB4MERFQywgMHg0RjEwLCAweDBENDYsCisgICAgMHg0RjExLCAweDA2NzMsIDB4NEYxNSwgMHgzN0VCLCAweDRGMTYsIDB4NDM2NiwgMHg0RjE5LCAweDRBQ0EsCisgICAgMHg0RjFBLCAweDA1NzEsIDB4NEYxQywgMHgxMDQwLCAweDRGMUQsIDB4MEMzQiwgMHg0RjJCLCAweDRBQ0IsCisgICAgMHg0RjJFLCAweDRBQ0MsIDB4NEYyRiwgMHgwRDIyLCAweDRGMzAsIDB4MTAxRiwgMHg0RjMxLCAweDRBQ0QsCisgICAgMHg0RjM0LCAweDBENTAsIDB4NEYzNiwgMHgwRkFBLCAweDRGMzcsIDB4NDM2OCwgMHg0RjM4LCAweDA5RjMsCisgICAgMHg0RjM5LCAweDIwQjgsIDB4NEYzQSwgMHgwODk1LCAweDRGM0IsIDB4MzdFRCwgMHg0RjNDLCAweDA4QzUsCisgICAgMHg0RjNELCAweDA1NDAsIDB4NEYzRSwgMHg0MzY5LCAweDRGNDMsIDB4MEJFRCwgMHg0RjQ2LCAweDBCNjAsCisgICAgMHg0RjQ3LCAweDEwMjMsIDB4NEY0OCwgMHg0MThCLCAweDRGNDksIDB4MzdFRSwgMHg0RjRELCAweDA0OTAsCisgICAgMHg0RjRFLCAweDBCRkYsIDB4NEY0RiwgMHgwOTQ1LCAweDRGNTAsIDB4MDgyNCwgMHg0RjUxLCAweDBGMEUsCisgICAgMHg0RjUzLCAweDBCMkUsIDB4NEY1NCwgMHgzN0VGLCAweDRGNTUsIDB4MDUzRiwgMHg0RjU2LCAweDIwQjksCisgICAgMHg0RjU3LCAweDEwMjIsIDB4NEY1OCwgMHg0MzZBLCAweDRGNTksIDB4MEYyOCwgMHg0RjVBLCAweDEwMUUsCisgICAgMHg0RjVCLCAweDEwMjAsIDB4NEY1QywgMHgwODVFLCAweDRGNUQsIDB4MTAyMSwgMHg0RjVFLCAweDExRDMsCisgICAgMHg0RjVGLCAweDQxOEMsIDB4NEY2MCwgMHgzN0VDLCAweDRGNjQsIDB4NDM2NywgMHg0RjY5LCAweDEwMjksCisgICAgMHg0RjZBLCAweDQxOEQsIDB4NEY2QywgMHg0MThFLCAweDRGNkYsIDB4MTAyQywgMHg0RjcwLCAweDEwMkEsCisgICAgMHg0RjczLCAweDA1NDIsIDB4NEY3NSwgMHgwRTBCLCAweDRGNzYsIDB4MTAyNCwgMHg0Rjc3LCAweDQzNkMsCisgICAgMHg0Rjc4LCAweDQzNkQsIDB4NEY3QSwgMHgzN0YwLCAweDRGN0IsIDB4MTAyOCwgMHg0RjdDLCAweDA3QTcsCisgICAgMHg0RjdELCAweDM3RjEsIDB4NEY3RSwgMHgzN0YyLCAweDRGN0YsIDB4MDg5NiwgMHg0RjgyLCAweDQzNkUsCisgICAgMHg0RjgzLCAweDA1RTIsIDB4NEY4NCwgMHg0QUNFLCAweDRGODUsIDB4NDM2RiwgMHg0Rjg2LCAweDEwMkQsCisgICAgMHg0Rjg4LCAweDEwMjUsIDB4NEY4QSwgMHgyMEJCLCAweDRGOEIsIDB4MEZBQiwgMHg0RjhELCAweDA4QzYsCisgICAgMHg0RjhGLCAweDEwMjYsIDB4NEY5MSwgMHgxMDJCLCAweDRGOTIsIDB4MjBCQSwgMHg0Rjk0LCAweDIwQkQsCisgICAgMHg0Rjk2LCAweDEwMkUsIDB4NEY5NywgMHgzN0YzLCAweDRGOTgsIDB4MTAyNywgMHg0RjlBLCAweDIwQkMsCisgICAgMHg0RjlCLCAweDA2OTksIDB4NEY5RCwgMHgwNDkxLCAweDRGOUUsIDB4NEFDRiwgMHg0RkEwLCAweDA2OUEsCisgICAgMHg0RkExLCAweDA1NDEsIDB4NEZBQiwgMHgxMUQ0LCAweDRGQUQsIDB4MEVBNywgMHg0RkFFLCAweDBERTAsCisgICAgMHg0RkFGLCAweDA3QTgsIDB4NEZCMiwgMHg0MzcxLCAweDRGQjUsIDB4MDlGNSwgMHg0RkI2LCAweDBGN0YsCisgICAgMHg0RkI3LCAweDRBRDAsIDB4NEZCRSwgMHgzN0Y0LCAweDRGQkYsIDB4MEUyOCwgMHg0RkMyLCAweDA3MEUsCisgICAgMHg0RkMzLCAweDBCMDUsIDB4NEZDNCwgMHgwNTY0LCAweDRGQzUsIDB4NDM3MiwgMHg0RkM5LCAweDIwQUMsCisgICAgMHg0RkNBLCAweDA5NUQsIDB4NEZDQiwgMHg0MzczLCAweDRGQ0QsIDB4MjBCRSwgMHg0RkNFLCAweDEwMzIsCisgICAgMHg0RkNGLCAweDM3RjUsIDB4NEZEMCwgMHgxMDM3LCAweDRGRDEsIDB4MTAzNSwgMHg0RkQyLCAweDQzNzQsCisgICAgMHg0RkQzLCAweDNDMkYsIDB4NEZENCwgMHgxMDMwLCAweDRGRDcsIDB4MEIwRiwgMHg0RkQ4LCAweDEwMzMsCisgICAgMHg0RkRBLCAweDEwMzYsIDB4NEZEQiwgMHgxMDM0LCAweDRGREQsIDB4MEUyRCwgMHg0RkRGLCAweDEwMzEsCisgICAgMHg0RkUwLCAweDFERUMsIDB4NEZFMSwgMHgwOUY0LCAweDRGRTMsIDB4MEVBMSwgMHg0RkU0LCAweDEwMzgsCisgICAgMHg0RkU1LCAweDEwMzksIDB4NEZFNiwgMHg0MzcwLCAweDRGRUUsIDB4MDkyRSwgMHg0RkVGLCAweDEwNDYsCisgICAgMHg0RkYxLCAweDM1QTMsIDB4NEZGMiwgMHg0Mzc2LCAweDRGRjMsIDB4MEQwNiwgMHg0RkY1LCAweDBEQTgsCisgICAgMHg0RkY2LCAweDEwNDEsIDB4NEZGOCwgMHgwRTQwLCAweDRGRkEsIDB4MDUzNiwgMHg0RkZELCAweDM3RjYsCisgICAgMHg0RkZFLCAweDEwNDUsIDB4NEZGRiwgMHgyMEMxLCAweDUwMDAsIDB4MzdGNywgMHg1MDAxLCAweDM3RjgsCisgICAgMHg1MDAyLCAweDRGNEIsIDB4NTAwNCwgMHg0QUQxLCAweDUwMDUsIDB4MTAzRiwgMHg1MDA2LCAweDEwNDgsCisgICAgMHg1MDA5LCAweDBBRDQsIDB4NTAwQiwgMHgwNzc4LCAweDUwMEMsIDB4NEFEMiwgMHg1MDBELCAweDBEMTIsCisgICAgMHg1MDBFLCAweDQxOEYsIDB4NTAwRiwgMHgxNjAwLCAweDUwMTAsIDB4MzdGOSwgMHg1MDExLCAweDEwNDcsCisgICAgMHg1MDEyLCAweDBDNTcsIDB4NTAxMywgMHg0Mzc3LCAweDUwMTQsIDB4MTAzQywgMHg1MDE2LCAweDA3QUEsCisgICAgMHg1MDE4LCAweDQxOTAsIDB4NTAxOSwgMHgwN0E5LCAweDUwMUEsIDB4MTAzQSwgMHg1MDFCLCAweDM3RkEsCisgICAgMHg1MDFDLCAweDQzNzgsIDB4NTAxRSwgMHgyMEMyLCAweDUwMUYsIDB4MDkwNiwgMHg1MDIxLCAweDEwNDIsCisgICAgMHg1MDIyLCAweDIwQzAsIDB4NTAyMywgMHgwRTNGLCAweDUwMjQsIDB4MEI4QiwgMHg1MDI1LCAweDEwM0UsCisgICAgMHg1MDI2LCAweDA3NDcsIDB4NTAyNywgMHgzN0ZCLCAweDUwMjgsIDB4MTAzQiwgMHg1MDI5LCAweDEwNDMsCisgICAgMHg1MDJBLCAweDEwM0QsIDB4NTAyQiwgMHgwRjk5LCAweDUwMkMsIDB4MTA0NCwgMHg1MDJELCAweDBGRTcsCisgICAgMHg1MDJFLCAweDM3RkMsIDB4NTAzNiwgMHgwNkRFLCAweDUwMzksIDB4MDc0NiwgMHg1MDNCLCAweDM4MDAsCisgICAgMHg1MDQwLCAweDIwQkYsIDB4NTA0MSwgMHg0MTkxLCAweDUwNDIsIDB4MjBDNSwgMHg1MDQzLCAweDEwNDksCisgICAgMHg1MDQ2LCAweDIwQzMsIDB4NTA0NywgMHgxMDRBLCAweDUwNDgsIDB4MTA0RSwgMHg1MDQ5LCAweDA0OTIsCisgICAgMHg1MDRDLCAweDRBRDMsIDB4NTA0RSwgMHg0Mzc5LCAweDUwNEYsIDB4MEUyMCwgMHg1MDUwLCAweDEwNEQsCisgICAgMHg1MDUzLCAweDQzN0EsIDB4NTA1NSwgMHgxMDRDLCAweDUwNTYsIDB4MTA1MCwgMHg1MDU3LCAweDM3RkQsCisgICAgMHg1MDVBLCAweDEwNEYsIDB4NTA1QywgMHgwQzAwLCAweDUwNUYsIDB4NEFENCwgMHg1MDYyLCAweDRBRDUsCisgICAgMHg1MDYzLCAweDQzN0IsIDB4NTA2NSwgMHgwNzQ4LCAweDUwNjYsIDB4MzdGRSwgMHg1MDZBLCAweDM3RkYsCisgICAgMHg1MDZDLCAweDEwNTEsIDB4NTA3MCwgMHgyMEM0LCAweDUwNzIsIDB4MDhGMSwgMHg1MDc0LCAweDBCMDYsCisgICAgMHg1MDc1LCAweDBDMDEsIDB4NTA3NiwgMHgwNkVFLCAweDUwNzcsIDB4NEFENiwgMHg1MDc4LCAweDEwNTIsCisgICAgMHg1MDdELCAweDA2NTAsIDB4NTA4MCwgMHgxMDUzLCAweDUwODUsIDB4MTA1NSwgMHg1MDg4LCAweDQzN0QsCisgICAgMHg1MDhELCAweDBFNjMsIDB4NTA4RSwgMHg0QUQ3LCAweDUwOEYsIDB4MzgwMSwgMHg1MDkxLCAweDA3M0MsCisgICAgMHg1MDkyLCAweDQzN0UsIDB4NTA5MywgMHg0MzdGLCAweDUwOTQsIDB4MjBDNiwgMHg1MDk1LCAweDQzODAsCisgICAgMHg1MDk2LCAweDM4MDIsIDB4NTA5OCwgMHgwODdGLCAweDUwOTksIDB4MEQ4QiwgMHg1MDlBLCAweDEwNTQsCisgICAgMHg1MDlDLCAweDM4MDMsIDB4NTA5RSwgMHg0QUQ4LCAweDUwQTIsIDB4NEFEOSwgMHg1MEEzLCAweDQzN0MsCisgICAgMHg1MEFBLCAweDQzODEsIDB4NTBBQywgMHgwODM1LCAweDUwQUQsIDB4MEYyRCwgMHg1MEIxLCAweDQzODMsCisgICAgMHg1MEIyLCAweDEwNTcsIDB4NTBCMywgMHgxMDVBLCAweDUwQjQsIDB4MTA1NiwgMHg1MEI1LCAweDA4MzQsCisgICAgMHg1MEI3LCAweDA5ODcsIDB4NTBCQSwgMHg0Mzg0LCAweDUwQkIsIDB4NDM4NSwgMHg1MEJFLCAweDA3MEYsCisgICAgMHg1MEMyLCAweDEwNUIsIDB4NTBDMywgMHg0QURBLCAweDUwQzQsIDB4NDM4NiwgMHg1MEM1LCAweDA2QzcsCisgICAgMHg1MEM3LCAweDQzODcsIDB4NTBDOSwgMHgxMDU4LCAweDUwQ0EsIDB4MTA1OSwgMHg1MENDLCAweDM4MDQsCisgICAgMHg1MENELCAweDBDODcsIDB4NTBDRSwgMHg0MzhBLCAweDUwQ0YsIDB4MEFGRSwgMHg1MEQwLCAweDQxOTMsCisgICAgMHg1MEQxLCAweDA2OUIsIDB4NTBENCwgMHg0MzhDLCAweDUwRDUsIDB4MEU3QiwgMHg1MEQ2LCAweDEwNUMsCisgICAgMHg1MEQ4LCAweDIwQzgsIDB4NTBEOSwgMHgzQzMwLCAweDUwREEsIDB4MEY4NSwgMHg1MERFLCAweDEwNUQsCisgICAgMHg1MEUxLCAweDQzOEQsIDB4NTBFMywgMHgxMDYwLCAweDUwRTUsIDB4MTA1RSwgMHg1MEU2LCAweDM4MDUsCisgICAgMHg1MEU3LCAweDBBRDAsIDB4NTBFOCwgMHg0QURCLCAweDUwRTksIDB4MzgwNiwgMHg1MEVELCAweDEwNUYsCisgICAgMHg1MEVFLCAweDEwNjEsIDB4NTBFRiwgMHgzODA3LCAweDUwRjAsIDB4M0MzMSwgMHg1MEYxLCAweDRBREMsCisgICAgMHg1MEYyLCAweDQxOTIsIDB4NTBGMywgMHg0Mzg4LCAweDUwRjQsIDB4MjBDNywgMHg1MEY1LCAweDEwNjMsCisgICAgMHg1MEY5LCAweDEwNjIsIDB4NTBGQiwgMHgwRTE4LCAweDUwRkUsIDB4NEFERCwgMHg1MTAwLCAweDA2NTEsCisgICAgMHg1MTAxLCAweDEwNjUsIDB4NTEwMiwgMHgxMDY2LCAweDUxMDMsIDB4NDE5NSwgMHg1MTA0LCAweDA1MkYsCisgICAgMHg1MTA2LCAweDQxOTQsIDB4NTEwNywgMHg0QURFLCAweDUxMDgsIDB4MzgwOCwgMHg1MTA5LCAweDEwNjQsCisgICAgMHg1MTBCLCAweDM4MDksIDB4NTEwQywgMHg0QURGLCAweDUxMEQsIDB4NEFFMCwgMHg1MTBFLCAweDRBRTEsCisgICAgMHg1MTEwLCAweDM4MEEsIDB4NTExMiwgMHgwOTIwLCAweDUxMTQsIDB4MTA2OSwgMHg1MTE1LCAweDEwNjgsCisgICAgMHg1MTE2LCAweDEwNjcsIDB4NTExNywgMHg0MzkwLCAweDUxMTgsIDB4MTAyRiwgMHg1MTFBLCAweDEwNkEsCisgICAgMHg1MTFCLCAweDM4MEIsIDB4NTExRSwgMHgzODBDLCAweDUxMUYsIDB4MDk4OCwgMHg1MTIxLCAweDEwNkIsCisgICAgMHg1MTJBLCAweDBGMEYsIDB4NTEzMiwgMHgwRUU1LCAweDUxMzMsIDB4NEFFMiwgMHg1MTM1LCAweDQxOTYsCisgICAgMHg1MTM3LCAweDEwNkQsIDB4NTEzOCwgMHg0QUUzLCAweDUxM0EsIDB4MTA2QywgMHg1MTNCLCAweDEwNkYsCisgICAgMHg1MTNDLCAweDEwNkUsIDB4NTEzRiwgMHgxMDcwLCAweDUxNDAsIDB4MTA3MSwgMHg1MTQxLCAweDA0QjgsCisgICAgMHg1MTQzLCAweDA3NjksIDB4NTE0NCwgMHgwNzExLCAweDUxNDUsIDB4MDk0NiwgMHg1MTQ2LCAweDBCQjksCisgICAgMHg1MTQ3LCAweDA2OUMsIDB4NTE0OCwgMHgwQThDLCAweDUxNDksIDB4MDdBQiwgMHg1MTRBLCAweDIwQzksCisgICAgMHg1MTRCLCAweDA4MDAsIDB4NTE0QywgMHgxMDczLCAweDUxNEQsIDB4MEVENCwgMHg1MTRFLCAweDBDNDAsCisgICAgMHg1MTUwLCAweDA4QzcsIDB4NTE1MiwgMHgxMDcyLCAweDUxNTQsIDB4MTA3NCwgMHg1MTU1LCAweDQxOTcsCisgICAgMHg1MTU3LCAweDQxOTgsIDB4NTE1QSwgMHgwQzU4LCAweDUxNUMsIDB4MDVEMywgMHg1MTVGLCAweDM4MEQsCisgICAgMHg1MTYwLCAweDQzOTIsIDB4NTE2MiwgMHgxMDc1LCAweDUxNjQsIDB4MjBDQSwgMHg1MTY1LCAweDBDRDYsCisgICAgMHg1MTY3LCAweDM2OEUsIDB4NTE2OCwgMHgwQUI2LCAweDUxNjksIDB4MTA3NywgMHg1MTZBLCAweDEwNzgsCisgICAgMHg1MTZCLCAweDBENDAsIDB4NTE2QywgMHgwN0FDLCAweDUxNkQsIDB4MEZFMSwgMHg1MTZFLCAweDEwNzksCisgICAgMHg1MTcxLCAweDA2OUUsIDB4NTE3MywgMHg0Mzk0LCAweDUxNzQsIDB4NEFFNCwgMHg1MTc1LCAweDBFMEMsCisgICAgMHg1MTc2LCAweDBCMTYsIDB4NTE3NywgMHgwNkU5LCAweDUxNzgsIDB4MEMyRiwgMHg1MTc5LCAweDM3NzksCisgICAgMHg1MTdCLCAweDQ3RDksIDB4NTE3QywgMHgwNzQ5LCAweDUxODAsIDB4MTA3QSwgMHg1MTgyLCAweDEwN0IsCisgICAgMHg1MTgzLCAweDQzOTUsIDB4NTE4NCwgMHg0QUU1LCAweDUxODUsIDB4MENCQSwgMHg1MTg2LCAweDA1MDEsCisgICAgMHg1MTg5LCAweDEwN0UsIDB4NTE4QSwgMHgwODZELCAweDUxOEIsIDB4NDM5NiwgMHg1MThDLCAweDEwN0QsCisgICAgMHg1MThELCAweDA4MzYsIDB4NTE4RiwgMHgxMDdGLCAweDUxOTAsIDB4MTg1QiwgMHg1MTkxLCAweDEwODAsCisgICAgMHg1MTkyLCAweDBFNkYsIDB4NTE5MywgMHgxMDgxLCAweDUxOTUsIDB4MTA4MiwgMHg1MTk2LCAweDEwODMsCisgICAgMHg1MTk3LCAweDA5RDEsIDB4NTE5OCwgMHg0Mzk4LCAweDUxOTksIDB4MDhGOCwgMHg1MTlELCAweDIwQ0IsCisgICAgMHg1MUEwLCAweDA1RTMsIDB4NTFBMSwgMHgzODBFLCAweDUxQTIsIDB4MTA4NiwgMHg1MUEzLCAweDQzOTksCisgICAgMHg1MUE0LCAweDEwODQsIDB4NTFBNSwgMHgwRUM5LCAweDUxQTYsIDB4MTA4NSwgMHg1MUE4LCAweDBEQ0MsCisgICAgMHg1MUE5LCAweDEwODcsIDB4NTFBQSwgMHgxMDg4LCAweDUxQUIsIDB4MTA4OSwgMHg1MUFDLCAweDBDNTksCisgICAgMHg1MUFELCAweDQzOUEsIDB4NTFCMCwgMHgxMDhELCAweDUxQjEsIDB4MTA4QiwgMHg1MUIyLCAweDEwOEMsCisgICAgMHg1MUIzLCAweDEwOEEsIDB4NTFCNCwgMHgwODUzLCAweDUxQjUsIDB4MTA4RSwgMHg1MUI2LCAweDBFRjYsCisgICAgMHg1MUI3LCAweDBGQUMsIDB4NTFCOCwgMHg0QUU2LCAweDUxQkEsIDB4NEFFNywgMHg1MUJDLCAweDM4MEYsCisgICAgMHg1MUJELCAweDEwOEYsIDB4NTFCRSwgMHgyMENDLCAweDUxQzMsIDB4M0MzMiwgMHg1MUM0LCAweDBBNEMsCisgICAgMHg1MUM1LCAweDEwOTAsIDB4NTFDNiwgMHgwOTY0LCAweDUxQzgsIDB4NEFFOCwgMHg1MUM5LCAweDEwOTEsCisgICAgMHg1MUNBLCAweDQxOUEsIDB4NTFDQiwgMHgwQkJBLCAweDUxQ0MsIDB4MEY4NywgMHg1MUNELCAweDBDNUEsCisgICAgMHg1MUNGLCAweDRBRTksIDB4NTFEMSwgMHg0QUVBLCAweDUxRDMsIDB4NEFFQiwgMHg1MUQ0LCAweDRBRUMsCisgICAgMHg1MUQ2LCAweDEwREEsIDB4NTFEOCwgMHg0QUVELCAweDUxREIsIDB4MTA5MiwgMHg1MURDLCAweDIwNUMsCisgICAgMHg1MURELCAweDA2QkQsIDB4NTFERSwgMHg0RjRDLCAweDUxREYsIDB4NEFFRSwgMHg1MUUwLCAweDEwOTMsCisgICAgMHg1MUUxLCAweDBFOEMsIDB4NTFFMiwgMHg0MTlCLCAweDUxRTYsIDB4MDk3MiwgMHg1MUU3LCAweDBCNUMsCisgICAgMHg1MUU5LCAweDEwOTUsIDB4NTFFQSwgMHgwQ0JDLCAweDUxRUMsIDB4MjBDRCwgMHg1MUVELCAweDEwOTYsCisgICAgMHg1MUVFLCAweDM4MTEsIDB4NTFGMCwgMHgxMDk3LCAweDUxRjEsIDB4MDU4QywgMHg1MUYzLCAweDQzOUQsCisgICAgMHg1MUY0LCAweDM4MTIsIDB4NTFGNSwgMHgxMDk4LCAweDUxRjYsIDB4MDY5RiwgMHg1MUY4LCAweDBDQTQsCisgICAgMHg1MUY5LCAweDA1MUMsIDB4NTFGQSwgMHgwOTVBLCAweDUxRkQsIDB4MEQzNSwgMHg1MUZFLCAweDEwOTksCisgICAgMHg1MjAwLCAweDBDNUIsIDB4NTIwMSwgMHgzODEzLCAweDUyMDIsIDB4MzgxNCwgMHg1MjAzLCAweDBBMTUsCisgICAgMHg1MjA0LCAweDEwOUEsIDB4NTIwNSwgMHg0QUVGLCAweDUyMDYsIDB4MERGQywgMHg1MjA3LCAweDBBN0UsCisgICAgMHg1MjA4LCAweDA1REUsIDB4NTIwQSwgMHgwNUU1LCAweDUyMEIsIDB4MTA5QiwgMHg1MjBFLCAweDEwOUQsCisgICAgMHg1MjExLCAweDA3MTAsIDB4NTIxMiwgMHg0MzlFLCAweDUyMTMsIDB4MzgxNSwgMHg1MjE0LCAweDEwOUMsCisgICAgMHg1MjE1LCAweDIwQ0UsIDB4NTIxNiwgMHg0MzlGLCAweDUyMTcsIDB4MEZCQiwgMHg1MjFELCAweDA5NzMsCisgICAgMHg1MjI0LCAweDBENTEsIDB4NTIyNSwgMHgwRTFDLCAweDUyMjYsIDB4NEFGMCwgMHg1MjI3LCAweDEwOUUsCisgICAgMHg1MjI4LCAweDRBRjEsIDB4NTIyOSwgMHgwRjYyLCAweDUyMkEsIDB4MTA5RiwgMHg1MjJCLCAweDRBRjIsCisgICAgMHg1MjJFLCAweDEwQTAsIDB4NTIzMCwgMHgwQzc4LCAweDUyMzEsIDB4NEFGMywgMHg1MjMyLCAweDRBRjQsCisgICAgMHg1MjMzLCAweDEwQTEsIDB4NTIzNSwgMHg0QUY1LCAweDUyMzYsIDB4MEE0RCwgMHg1MjM3LCAweDA4NkUsCisgICAgMHg1MjM4LCAweDA3NEEsIDB4NTIzOSwgMHgxMEEyLCAweDUyM0EsIDB4MDg5NywgMHg1MjNCLCAweDA4MDEsCisgICAgMHg1MjNDLCAweDRBRjYsIDB4NTI0MywgMHgwQzAyLCAweDUyNDQsIDB4MTBBNCwgMHg1MjQ3LCAweDBCMDcsCisgICAgMHg1MjQ5LCAweDM4MTYsIDB4NTI0QSwgMHgwODVGLCAweDUyNEIsIDB4MTBBNSwgMHg1MjRDLCAweDEwQTYsCisgICAgMHg1MjRELCAweDBBQjIsIDB4NTI0RiwgMHgxMEEzLCAweDUyNTQsIDB4MTBBOCwgMHg1MjU1LCAweDQzQTEsCisgICAgMHg1MjU2LCAweDBFNjQsIDB4NTI1NywgMHg0MTlDLCAweDUyNUEsIDB4NEFGNywgMHg1MjVCLCAweDA3RjYsCisgICAgMHg1MjVDLCAweDQzQTIsIDB4NTI1RCwgMHgxRTVFLCAweDUyNUUsIDB4MTBBNywgMHg1MjYwLCAweDRBRjgsCisgICAgMHg1MjYxLCAweDM4MTcsIDB4NTI2MywgMHgwNzRCLCAweDUyNjQsIDB4MDg0RSwgMHg1MjY1LCAweDBEMjMsCisgICAgMHg1MjY2LCAweDM4MTgsIDB4NTI2OSwgMHgxMEFCLCAweDUyNkEsIDB4MTBBOSwgMHg1MjZDLCAweDQzQTMsCisgICAgMHg1MjZFLCAweDRBRjksIDB4NTI2RiwgMHgwREVELCAweDUyNzAsIDB4MDlEMiwgMHg1MjcxLCAweDEwQjIsCisgICAgMHg1MjcyLCAweDA1QzIsIDB4NTI3MywgMHgxMEFDLCAweDUyNzQsIDB4MTBBQSwgMHg1Mjc1LCAweDBBRDEsCisgICAgMHg1Mjc3LCAweDQzQTQsIDB4NTI3OCwgMHg0QUZBLCAweDUyNzksIDB4NEFGQiwgMHg1MjdELCAweDEwQUUsCisgICAgMHg1MjdGLCAweDEwQUQsIDB4NTI4MiwgMHg0M0E2LCAweDUyODMsIDB4MDVBMiwgMHg1Mjg0LCAweDQzQTUsCisgICAgMHg1Mjg3LCAweDA3MzYsIDB4NTI4OCwgMHgxMEIzLCAweDUyODksIDB4MEY3NSwgMHg1MjhBLCAweDRBRkMsCisgICAgMHg1MjhDLCAweDRBRkQsIDB4NTI4RCwgMHgxMEFGLCAweDUyOTEsIDB4MTBCNCwgMHg1MjkyLCAweDEwQjEsCisgICAgMHg1MjkzLCAweDM4MTksIDB4NTI5NCwgMHgxMEIwLCAweDUyOTgsIDB4NDNBOCwgMHg1MjlCLCAweDBGOTcsCisgICAgMHg1MjlDLCAweDIwQ0YsIDB4NTI5RiwgMHgwN0FELCAweDUyQTAsIDB4MDU0MywgMHg1MkEzLCAweDBGQkMsCisgICAgMHg1MkE0LCAweDQzQUEsIDB4NTJBNiwgMHgyMEQwLCAweDUyQTksIDB4MDk3RiwgMHg1MkFBLCAweDBDNTIsCisgICAgMHg1MkFCLCAweDA3RjcsIDB4NTJBQywgMHgxMEI3LCAweDUyQUQsIDB4MTBCOCwgMHg1MkFGLCAweDIxN0QsCisgICAgMHg1MkIxLCAweDBGQUQsIDB4NTJCNCwgMHgwRkQxLCAweDUyQjUsIDB4MTBCQSwgMHg1MkI5LCAweDA3QUUsCisgICAgMHg1MkJBLCAweDQzQUIsIDB4NTJCQiwgMHg0M0FDLCAweDUyQkMsIDB4MTBCOSwgMHg1MkJFLCAweDA1OEQsCisgICAgMHg1MkMwLCAweDIwRDEsIDB4NTJDMSwgMHgxMEJCLCAweDUyQzMsIDB4MEU4NCwgMHg1MkM1LCAweDBCRDgsCisgICAgMHg1MkM3LCAweDBGMTAsIDB4NTJDOCwgMHgzODFBLCAweDUyQzksIDB4MEUyOSwgMHg1MkNBLCAweDQzQUQsCisgICAgMHg1MkNDLCAweDQxOUQsIDB4NTJDRCwgMHgxMEJDLCAweDUyRDAsIDB4MzZFOCwgMHg1MkQxLCAweDQzQUUsCisgICAgMHg1MkQyLCAweDFCRUUsIDB4NTJENSwgMHgwQzg4LCAweDUyRDYsIDB4NDE5RSwgMHg1MkQ3LCAweDEwQkQsCisgICAgMHg1MkQ4LCAweDA1RTYsIDB4NTJEOSwgMHgwRUJGLCAweDUyREIsIDB4MjBEMiwgMHg1MkRELCAweDA5ODksCisgICAgMHg1MkRFLCAweDEwQkUsIDB4NTJERiwgMHgwRTM3LCAweDUyRTAsIDB4MTBDMiwgMHg1MkUxLCAweDRBRkUsCisgICAgMHg1MkUyLCAweDBBNEUsIDB4NTJFMywgMHgxMEJGLCAweDUyRTQsIDB4MDZDOCwgMHg1MkU2LCAweDEwQzAsCisgICAgMHg1MkU3LCAweDA1RTcsIDB4NTJFOSwgMHg0QUZGLCAweDUyRjAsIDB4MzgxQiwgMHg1MkYxLCAweDRCMDAsCisgICAgMHg1MkYyLCAweDA3MDQsIDB4NTJGMywgMHgxMEMzLCAweDUyRjUsIDB4MTBDNCwgMHg1MkY3LCAweDQzQjAsCisgICAgMHg1MkY4LCAweDEwQzUsIDB4NTJGOSwgMHgxMEM2LCAweDUyRkEsIDB4MDkwNywgMHg1MkZCLCAweDQxOUYsCisgICAgMHg1MkZFLCAweDA3QUYsIDB4NTJGRiwgMHgwRUVBLCAweDUzMDAsIDB4MjBEMywgMHg1MzAxLCAweDBFRjQsCisgICAgMHg1MzAyLCAweDBDQ0YsIDB4NTMwMywgMHg0QjAxLCAweDUzMDUsIDB4MEU0MSwgMHg1MzA2LCAweDEwQzcsCisgICAgMHg1MzA3LCAweDRGNEQsIDB4NTMwOCwgMHgxMEM4LCAweDUzMEEsIDB4MzgxQywgMHg1MzBCLCAweDM4MUQsCisgICAgMHg1MzBELCAweDEwQ0EsIDB4NTMwRiwgMHgxMENDLCAweDUzMTAsIDB4MTBDQiwgMHg1MzExLCAweDRCMDIsCisgICAgMHg1MzE1LCAweDEwQ0QsIDB4NTMxNiwgMHgwNTNELCAweDUzMTcsIDB4MEU3QSwgMHg1MzE5LCAweDA4NkMsCisgICAgMHg1MzFBLCAweDEwQ0UsIDB4NTMxQywgMHg0MUEwLCAweDUzMUQsIDB4MEFEQiwgMHg1MzFGLCAweDRCMDMsCisgICAgMHg1MzIwLCAweDA5OEEsIDB4NTMyMSwgMHgwNkExLCAweDUzMjMsIDB4MTBDRiwgMHg1MzI0LCAweDIwRDUsCisgICAgMHg1MzJBLCAweDBENkYsIDB4NTMyRCwgMHg0QjA0LCAweDUzMkYsIDB4MTBEMCwgMHg1MzMxLCAweDEwRDEsCisgICAgMHg1MzMyLCAweDRCMDUsIDB4NTMzMywgMHgxMEQyLCAweDUzMzUsIDB4NDNCMSwgMHg1MzM4LCAweDEwRDMsCisgICAgMHg1MzM5LCAweDBEOTYsIDB4NTMzQSwgMHgwNkUwLCAweDUzM0IsIDB4MDRBOSwgMHg1MzNELCAweDRCMDYsCisgICAgMHg1MzNFLCAweDM4MUUsIDB4NTMzRiwgMHgwQzk3LCAweDUzNDAsIDB4MTBENCwgMHg1MzQxLCAweDA5NDcsCisgICAgMHg1MzQyLCAweDQzQjIsIDB4NTM0MywgMHgwQThELCAweDUzNDUsIDB4MTBENiwgMHg1MzQ2LCAweDEwRDUsCisgICAgMHg1MzQ3LCAweDA5OEIsIDB4NTM0OCwgMHgwNzk1LCAweDUzNDksIDB4MTBEOCwgMHg1MzRBLCAweDBENTIsCisgICAgMHg1MzRCLCAweDM4MjAsIDB4NTM0QywgMHgzODFGLCAweDUzNEQsIDB4MTBEOSwgMHg1MzUxLCAweDBENzAsCisgICAgMHg1MzUyLCAweDBCMTQsIDB4NTM1MywgMHgwQjRFLCAweDUzNTQsIDB4MDZBMCwgMHg1MzU3LCAweDBDQzYsCisgICAgMHg1MzU4LCAweDBCNkYsIDB4NTM1QSwgMHgwRDI0LCAweDUzNUMsIDB4MEU3QywgMHg1MzVFLCAweDEwREIsCisgICAgMHg1MzYwLCAweDBBOEUsIDB4NTM2MSwgMHgzODIxLCAweDUzNjMsIDB4NDFBMSwgMHg1MzY1LCAweDRCMDcsCisgICAgMHg1MzY2LCAweDA3MEIsIDB4NTM2NywgMHg0M0I1LCAweDUzNjksIDB4MTBEQywgMHg1MzZDLCAweDM4MjIsCisgICAgMHg1MzZELCAweDRCMDgsIDB4NTM2RSwgMHgxMERELCAweDUzNkYsIDB4MDRDRSwgMHg1MzcwLCAweDA0QjksCisgICAgMHg1MzcxLCAweDA2MjksIDB4NTM3MiwgMHgyMEQ2LCAweDUzNzMsIDB4MEIwOCwgMHg1Mzc0LCAweDA2NkIsCisgICAgMHg1Mzc1LCAweDBGNUIsIDB4NTM3NywgMHgxMEUwLCAweDUzNzgsIDB4MDUzNywgMHg1Mzc5LCAweDRCMDksCisgICAgMHg1MzdBLCAweDQzQjYsIDB4NTM3QiwgMHgxMERGLCAweDUzN0QsIDB4MzQzNSwgMHg1MzdFLCAweDRCMEEsCisgICAgMHg1MzdGLCAweDA2QTIsIDB4NTM4MiwgMHgxMEUxLCAweDUzODQsIDB4MEVGRCwgMHg1Mzg5LCAweDM3RDAsCisgICAgMHg1MzkzLCAweDIwRDcsIDB4NTM5NCwgMHg0QjBCLCAweDUzOTYsIDB4MTBFMiwgMHg1Mzk4LCAweDBGOUEsCisgICAgMHg1Mzk5LCAweDRCMEMsIDB4NTM5QSwgMHgwN0IwLCAweDUzOUQsIDB4NDFBMiwgMHg1MzlGLCAweDA3NkEsCisgICAgMHg1M0EwLCAweDEwRTMsIDB4NTNBNCwgMHg0M0I3LCAweDUzQTUsIDB4MTBFNSwgMHg1M0E2LCAweDEwRTQsCisgICAgMHg1M0E4LCAweDBBMjUsIDB4NTNBOSwgMHgwNERCLCAweDUzQUEsIDB4NEIwRCwgMHg1M0FCLCAweDM4MjMsCisgICAgMHg1M0FELCAweDA1MDAsIDB4NTNBRSwgMHgxMEU2LCAweDUzQUYsIDB4NEIwRSwgMHg1M0IwLCAweDEwRTcsCisgICAgMHg1M0IyLCAweDIwRDgsIDB4NTNCMywgMHgwNzZCLCAweDUzQjQsIDB4NDNCOCwgMHg1M0I2LCAweDEwRTgsCisgICAgMHg1M0I3LCAweDQzQkEsIDB4NTNCQSwgMHg0QjBGLCAweDUzQkIsIDB4MDY4OCwgMHg1M0MwLCAweDQzQkIsCisgICAgMHg1M0MxLCAweDRCMTAsIDB4NTNDMiwgMHgwODgwLCAweDUzQzMsIDB4MTBFOSwgMHg1M0M0LCAweDRCMTEsCisgICAgMHg1M0M1LCAweDRCMTIsIDB4NTNDOCwgMHgwRUEyLCAweDUzQzksIDB4MDgyNSwgMHg1M0NBLCAweDA2NzQsCisgICAgMHg1M0NCLCAweDBGMTEsIDB4NTNDQywgMHgwQUQyLCAweDUzQ0QsIDB4MEQ1MywgMHg1M0NFLCAweDA5MjksCisgICAgMHg1M0Q0LCAweDA5NTEsIDB4NTNENSwgMHg0M0JGLCAweDUzRDYsIDB4MDkxNCwgMHg1M0Q3LCAweDA5MjEsCisgICAgMHg1M0Q5LCAweDA5ODAsIDB4NTNEQSwgMHgzODI0LCAweDUzREIsIDB4MEQ1NCwgMHg1M0RELCAweDIwRDksCisgICAgMHg1M0RGLCAweDEwRUMsIDB4NTNFMCwgMHg0QjEzLCAweDUzRTEsIDB4MDRFNSwgMHg1M0UyLCAweDBBRDMsCisgICAgMHg1M0UzLCAweDA3QjEsIDB4NTNFNCwgMHgwNzc5LCAweDUzRTUsIDB4MDZERiwgMHg1M0U2LCAweDM4MjUsCisgICAgMHg1M0U4LCAweDEwRjAsIDB4NTNFOSwgMHgwQjVGLCAweDUzRUEsIDB4MEI1RSwgMHg1M0VCLCAweDA2QTMsCisgICAgMHg1M0VDLCAweDA5OEMsIDB4NTNFRCwgMHgxMEYxLCAweDUzRUUsIDB4MTBFRiwgMHg1M0VGLCAweDA1NDQsCisgICAgMHg1M0YwLCAweDBCNDYsIDB4NTNGMSwgMHgwOEU0LCAweDUzRjIsIDB4MDg5OSwgMHg1M0YzLCAweDA0QzgsCisgICAgMHg1M0Y0LCAweDQzQzEsIDB4NTNGNSwgMHgzODI2LCAweDUzRjYsIDB4MDVDRSwgMHg1M0Y3LCAweDA3RjgsCisgICAgMHg1M0Y4LCAweDA4OTgsIDB4NTNGQSwgMHgxMEYyLCAweDU0MDEsIDB4MTBGMywgMHg1NDAzLCAweDA2NjMsCisgICAgMHg1NDA0LCAweDA1QTQsIDB4NTQwOCwgMHgwN0Y5LCAweDU0MDksIDB4MDY2MiwgMHg1NDBBLCAweDBCRkIsCisgICAgMHg1NDBCLCAweDA0QzcsIDB4NTQwQywgMHgwQzg5LCAweDU0MEQsIDB4MEVDQSwgMHg1NDBFLCAweDA3QjMsCisgICAgMHg1NDBGLCAweDBGNjMsIDB4NTQxMCwgMHgwQzQxLCAweDU0MTEsIDB4MDdCMiwgMHg1NDEyLCAweDQxQTMsCisgICAgMHg1NDEzLCAweDRCMTQsIDB4NTQxQiwgMHgwNzA1LCAweDU0MUQsIDB4MTBGQywgMHg1NDFFLCAweDM2OEMsCisgICAgMHg1NDFGLCAweDA2REIsIDB4NTQyMCwgMHgwRTc4LCAweDU0MjQsIDB4NDNDMiwgMHg1NDI2LCAweDBENzEsCisgICAgMHg1NDI3LCAweDM4MjcsIDB4NTQyOCwgMHg0M0MzLCAweDU0MjksIDB4MTBGQiwgMHg1NDJBLCAweDRCMTUsCisgICAgMHg1NDJCLCAweDA2MUEsIDB4NTQyQywgMHgxMEY2LCAweDU0MkQsIDB4MTBGNywgMHg1NDJFLCAweDEwRjksCisgICAgMHg1NDMxLCAweDRCMTYsIDB4NTQzMywgMHgzNUMwLCAweDU0MzQsIDB4NEIxNywgMHg1NDM1LCAweDRCMTgsCisgICAgMHg1NDM2LCAweDEwRkEsIDB4NTQzOCwgMHgwNjc1LCAweDU0MzksIDB4MEEyNywgMHg1NDNCLCAweDBERkQsCisgICAgMHg1NDNDLCAweDEwRjgsIDB4NTQzRCwgMHgxMEY0LCAweDU0M0UsIDB4MDc5NywgMHg1NDNGLCAweDM1Q0YsCisgICAgMHg1NDQwLCAweDEwRjUsIDB4NTQ0MiwgMHgwRkNBLCAweDU0NDMsIDB4NDNDNSwgMHg1NDQ2LCAweDBFNDIsCisgICAgMHg1NDQ4LCAweDBDMDQsIDB4NTQ0OSwgMHgwNzk2LCAweDU0NEEsIDB4MDgwMiwgMHg1NDRDLCAweDRCMTksCisgICAgMHg1NDRELCAweDM4MjgsIDB4NTQ0RSwgMHgxMEZELCAweDU0NTEsIDB4MENCNSwgMHg1NDU1LCAweDM3MjMsCisgICAgMHg1NDVGLCAweDExMDEsIDB4NTQ2MiwgMHg0M0M2LCAweDU0NjYsIDB4MzgyOSwgMHg1NDY4LCAweDA5MkEsCisgICAgMHg1NDZBLCAweDA5MjIsIDB4NTQ2QiwgMHgzODJBLCAweDU0NkMsIDB4NDNDNywgMHg1NDcwLCAweDExMDQsCisgICAgMHg1NDcxLCAweDExMDIsIDB4NTQ3MywgMHgwRUFGLCAweDU0NzQsIDB4MzgyQiwgMHg1NDc1LCAweDEwRkYsCisgICAgMHg1NDc2LCAweDExMDgsIDB4NTQ3NywgMHgxMTAzLCAweDU0N0IsIDB4MTEwNiwgMHg1NDdDLCAweDA3N0EsCisgICAgMHg1NDdELCAweDBFQ0IsIDB4NTQ3RiwgMHg0MUE0LCAweDU0ODAsIDB4MTEwNywgMHg1NDg0LCAweDExMDksCisgICAgMHg1NDg2LCAweDExMEIsIDB4NTQ4OCwgMHg0MUE1LCAweDU0OEEsIDB4MjBEQywgMHg1NDhCLCAweDA4NjAsCisgICAgMHg1NDhDLCAweDBGRTgsIDB4NTQ4RCwgMHgzODJDLCAweDU0OEUsIDB4MTEwMCwgMHg1NDhGLCAweDEwRkUsCisgICAgMHg1NDkwLCAweDExMEEsIDB4NTQ5MiwgMHgxMTA1LCAweDU0OTUsIDB4NDNDOCwgMHg1NDk2LCAweDM4MkQsCisgICAgMHg1NDlDLCAweDIwREIsIDB4NTRBMCwgMHg0M0M5LCAweDU0QTEsIDB4MzgyRSwgMHg1NEEyLCAweDExMEQsCisgICAgMHg1NEE0LCAweDExMTYsIDB4NTRBNSwgMHgxMTBGLCAweDU0QTYsIDB4NDNDQSwgMHg1NEE3LCAweDRCMUEsCisgICAgMHg1NEE4LCAweDExMTMsIDB4NTRBOSwgMHgyMERELCAweDU0QUEsIDB4NEIxQiwgMHg1NEFCLCAweDExMTQsCisgICAgMHg1NEFDLCAweDExMTAsIDB4NTRBRCwgMHgzODJGLCAweDU0QUUsIDB4NDNDQiwgMHg1NEFGLCAweDExMzEsCisgICAgMHg1NEIxLCAweDRCMUMsIDB4NTRCMiwgMHgwODU5LCAweDU0QjMsIDB4MDU4RiwgMHg1NEI3LCAweDQzQ0MsCisgICAgMHg1NEI4LCAweDExMEUsIDB4NTRCOSwgMHgzODMwLCAweDU0QkEsIDB4NDNDRCwgMHg1NEJCLCAweDRCMUQsCisgICAgMHg1NEJDLCAweDExMTgsIDB4NTRCRCwgMHgwNEJBLCAweDU0QkUsIDB4MTExNywgMHg1NEJGLCAweDM4MzEsCisgICAgMHg1NEMwLCAweDA0NjksIDB4NTRDMSwgMHgwREJDLCAweDU0QzIsIDB4MTExNSwgMHg1NEMzLCAweDQzQ0UsCisgICAgMHg1NEM0LCAweDExMTEsIDB4NTRDNiwgMHgzODMyLCAweDU0QzcsIDB4MTEwQywgMHg1NEM4LCAweDExMTIsCisgICAgMHg1NEM5LCAweDA4MzgsIDB4NTRDRCwgMHgzODMzLCAweDU0Q0UsIDB4NEIxRSwgMHg1NEQ4LCAweDExMTksCisgICAgMHg1NEUxLCAweDA0QkIsIDB4NTRFMiwgMHgxMTIyLCAweDU0RTUsIDB4MTExQSwgMHg1NEU2LCAweDExMUIsCisgICAgMHg1NEU4LCAweDA5OEQsIDB4NTRFOSwgMHgwRTk3LCAweDU0RUEsIDB4NEIxRiwgMHg1NEVDLCAweDQzRDAsCisgICAgMHg1NEVELCAweDExMjAsIDB4NTRFRSwgMHgxMTFGLCAweDU0RUYsIDB4NDNEMSwgMHg1NEYxLCAweDQzRDIsCisgICAgMHg1NEYyLCAweDBDMjksIDB4NTRGMywgMHg0M0QzLCAweDU0RkEsIDB4MTEyMSwgMHg1NEZDLCAweDRCMjAsCisgICAgMHg1NEZELCAweDExMUUsIDB4NTRGRiwgMHgyMERFLCAweDU1MDAsIDB4NDNENCwgMHg1NTAxLCAweDQzRDUsCisgICAgMHg1NTA0LCAweDA0RDYsIDB4NTUwNSwgMHg0QjIxLCAweDU1MDYsIDB4MDgyNiwgMHg1NTA3LCAweDA5RjYsCisgICAgMHg1NTA4LCAweDRCMjIsIDB4NTUwOSwgMHg0M0Q2LCAweDU1MEUsIDB4MzgzNCwgMHg1NTBGLCAweDExMUMsCisgICAgMHg1NTEwLCAweDBDNUMsIDB4NTUxNCwgMHgxMTFELCAweDU1MTUsIDB4NEIyMywgMHg1NTE2LCAweDA0NjYsCisgICAgMHg1NTI3LCAweDRCMjQsIDB4NTUyQSwgMHg0QjI1LCAweDU1MkIsIDB4MzgzNSwgMHg1NTJFLCAweDExMjcsCisgICAgMHg1NTJGLCAweDBGMEQsIDB4NTUzMSwgMHgwOThGLCAweDU1MzMsIDB4MTEyRCwgMHg1NTM1LCAweDM4MzYsCisgICAgMHg1NTM2LCAweDRCMjYsIDB4NTUzOCwgMHgxMTJDLCAweDU1MzksIDB4MTEyMywgMHg1NTNDLCAweDQzRDcsCisgICAgMHg1NTNFLCAweDBCMjMsIDB4NTU0MCwgMHgxMTI0LCAweDU1NDEsIDB4NDNEOCwgMHg1NTQ0LCAweDBCNEYsCisgICAgMHg1NTQ1LCAweDExMjksIDB4NTU0NiwgMHgwOThFLCAweDU1NDcsIDB4NDNEQSwgMHg1NTRBLCAweDM4MzcsCisgICAgMHg1NTRDLCAweDExMjYsIDB4NTU0RiwgMHgwRUYwLCAweDU1NTAsIDB4NDFBNiwgMHg1NTUxLCAweDRCMjcsCisgICAgMHg1NTUzLCAweDA3MTIsIDB4NTU1NiwgMHgxMTJBLCAweDU1NTcsIDB4MTEyQiwgMHg1NTVDLCAweDExMjgsCisgICAgMHg1NTVELCAweDExMkUsIDB4NTU1RSwgMHgxREQxLCAweDU1NjAsIDB4MzgzOCwgMHg1NTYxLCAweDRGNTQsCisgICAgMHg1NTYzLCAweDExMjUsIDB4NTU2NCwgMHg0M0RDLCAweDU1NjYsIDB4NEIyOCwgMHg1NTdCLCAweDExMzQsCisgICAgMHg1NTdDLCAweDExMzksIDB4NTU3RCwgMHg0M0RFLCAweDU1N0UsIDB4MTEzNSwgMHg1NTgwLCAweDExMzAsCisgICAgMHg1NTgxLCAweDQxQTcsIDB4NTU4MiwgMHg0M0RGLCAweDU1ODMsIDB4MTEzQSwgMHg1NTg0LCAweDBBQjMsCisgICAgMHg1NTg2LCAweDIwREYsIDB4NTU4NywgMHgxMTNDLCAweDU1ODgsIDB4MzgzQSwgMHg1NTg5LCAweDA3QjQsCisgICAgMHg1NThBLCAweDExMzIsIDB4NTU4QiwgMHgwQkJCLCAweDU1OEUsIDB4MzgzQiwgMHg1NThGLCAweDRCMjksCisgICAgMHg1NTkxLCAweDQzRTAsIDB4NTU5MiwgMHg0QjJBLCAweDU1OTQsIDB4NEIyQiwgMHg1NTk4LCAweDExMzYsCisgICAgMHg1NTk5LCAweDExMkYsIDB4NTU5QSwgMHgwNUU5LCAweDU1OUMsIDB4MDYyQSwgMHg1NTlELCAweDA1QzMsCisgICAgMHg1NTlFLCAweDExMzcsIDB4NTU5RiwgMHgxMTMzLCAweDU1QTQsIDB4NEIyQywgMHg1NUE3LCAweDA3NEMsCisgICAgMHg1NUE4LCAweDExM0QsIDB4NTVBOSwgMHgxMTNCLCAweDU1QUEsIDB4MEFENSwgMHg1NUFCLCAweDA2NjQsCisgICAgMHg1NUFDLCAweDA2QTQsIDB4NTVBRCwgMHg0MUE4LCAweDU1QUUsIDB4MTEzOCwgMHg1NUIwLCAweDA2RUMsCisgICAgMHg1NUIyLCAweDRCMkQsIDB4NTVCNiwgMHgwNEU2LCAweDU1QkYsIDB4NDNFNSwgMHg1NUMzLCAweDRCMkUsCisgICAgMHg1NUM0LCAweDExNDEsIDB4NTVDNSwgMHgxMTNGLCAweDU1QzYsIDB4NEIyRiwgMHg1NUM3LCAweDExNzgsCisgICAgMHg1NUM5LCAweDQzRTYsIDB4NTVDQywgMHg0M0U3LCAweDU1Q0UsIDB4NDFBOSwgMHg1NUQxLCAweDQzRTgsCisgICAgMHg1NUQyLCAweDQzRTIsIDB4NTVEMywgMHg0QjMwLCAweDU1RDQsIDB4MTE0NCwgMHg1NURBLCAweDExM0UsCisgICAgMHg1NURCLCAweDRCMzEsIDB4NTVEQywgMHgxMTQyLCAweDU1REQsIDB4NDNFOSwgMHg1NURGLCAweDExNDAsCisgICAgMHg1NUUyLCAweDQzRUIsIDB4NTVFMywgMHgwODlBLCAweDU1RTQsIDB4MTE0MywgMHg1NUU5LCAweDQzRUQsCisgICAgMHg1NUVDLCAweDRCMzIsIDB4NTVFRSwgMHg0QjMzLCAweDU1RjEsIDB4NEIzNCwgMHg1NUY2LCAweDRCMzUsCisgICAgMHg1NUY3LCAweDExNDYsIDB4NTVGOCwgMHg0QjM2LCAweDU1RjksIDB4MTE0QiwgMHg1NUZELCAweDExNDksCisgICAgMHg1NUZFLCAweDExNDgsIDB4NTYwNSwgMHg0QjM3LCAweDU2MDYsIDB4MEI3MCwgMHg1NjA3LCAweDQzRjAsCisgICAgMHg1NjA4LCAweDM4M0MsIDB4NTYwOSwgMHgwNTQ1LCAweDU2MEQsIDB4NEIzOCwgMHg1NjBFLCAweDM4M0QsCisgICAgMHg1NjBGLCAweDM4M0UsIDB4NTYxMCwgMHg0M0YxLCAweDU2MTEsIDB4NEIzOSwgMHg1NjEyLCAweDRCM0EsCisgICAgMHg1NjE0LCAweDExNDUsIDB4NTYxNiwgMHgxMTQ3LCAweDU2MTcsIDB4MDk5MCwgMHg1NjE4LCAweDA0RDUsCisgICAgMHg1NjFCLCAweDExNEEsIDB4NTYyMCwgMHgzQzFELCAweDU2MjgsIDB4NDNFRSwgMHg1NjI5LCAweDA1NUUsCisgICAgMHg1NjJDLCAweDRCM0IsIDB4NTYyRiwgMHgxMTU1LCAweDU2MzAsIDB4NDNGMiwgMHg1NjMxLCAweDA5RTQsCisgICAgMHg1NjMyLCAweDExNTEsIDB4NTYzNCwgMHgxMTRGLCAweDU2MzUsIDB4NEIzQywgMHg1NjM2LCAweDExNTAsCisgICAgMHg1NjM3LCAweDM4M0YsIDB4NTYzOCwgMHgxMTUyLCAweDU2MzksIDB4NEIzRCwgMHg1NjNCLCAweDQxQUEsCisgICAgMHg1NjNELCAweDQzRjQsIDB4NTYzRiwgMHgzODQwLCAweDU2NDAsIDB4NDNGNSwgMHg1NjQyLCAweDA0REYsCisgICAgMHg1NjQ3LCAweDQzRjYsIDB4NTY0OSwgMHgzODQxLCAweDU2NEIsIDB4Mzg0MiwgMHg1NjRDLCAweDBBQkIsCisgICAgMHg1NjRELCAweDRCM0UsIDB4NTY0RSwgMHgxMTRDLCAweDU2NEYsIDB4Mzg0MywgMHg1NjUwLCAweDExNEQsCisgICAgMHg1NjUzLCAweDFGMUIsIDB4NTY1NCwgMHg0QjNGLCAweDU2NUIsIDB4MDVEOCwgMHg1NjVFLCAweDQzRjcsCisgICAgMHg1NjYwLCAweDQzRjgsIDB4NTY2NCwgMHgxMTU0LCAweDU2NjYsIDB4Mzg0NCwgMHg1NjY4LCAweDA2MkIsCisgICAgMHg1NjY5LCAweDM4NDUsIDB4NTY2QSwgMHgxMTU3LCAweDU2NkIsIDB4MTE1MywgMHg1NjZDLCAweDExNTYsCisgICAgMHg1NjZELCAweDQzRjksIDB4NTY2RiwgMHgzODQ2LCAweDU2NzEsIDB4Mzg0NywgMHg1NjcyLCAweDM4NDgsCisgICAgMHg1Njc0LCAweDBERkUsIDB4NTY3NiwgMHgzQzMzLCAweDU2NzgsIDB4MENBRCwgMHg1NjdBLCAweDBENEMsCisgICAgMHg1NjgwLCAweDExNTksIDB4NTY4NSwgMHg0QjQwLCAweDU2ODYsIDB4MTE1OCwgMHg1Njg3LCAweDA1QTMsCisgICAgMHg1Njg4LCAweDQzRkIsIDB4NTY4QSwgMHgxMTVBLCAweDU2OEMsIDB4NDNGQywgMHg1NjhGLCAweDExNUQsCisgICAgMHg1Njk0LCAweDExNUMsIDB4NTY5NSwgMHgzODQ5LCAweDU2OTksIDB4MURFNiwgMHg1NjlBLCAweDM4NEEsCisgICAgMHg1NjlELCAweDQzRkQsIDB4NTY5RSwgMHg0MUFCLCAweDU2OUYsIDB4NEI0MSwgMHg1NkEwLCAweDExNUIsCisgICAgMHg1NkEyLCAweDBDRUYsIDB4NTZBNSwgMHgxMTVFLCAweDU2QTYsIDB4NEI0MiwgMHg1NkE4LCAweDQzRkUsCisgICAgMHg1NkE5LCAweDQxQUMsIDB4NTZBQywgMHgzODRCLCAweDU2QUQsIDB4Mzg0QywgMHg1NkFFLCAweDExNUYsCisgICAgMHg1NkIxLCAweDM4NEQsIDB4NTZCMiwgMHg0M0ZGLCAweDU2QjMsIDB4NDFBRCwgMHg1NkI0LCAweDExNjEsCisgICAgMHg1NkI2LCAweDExNjAsIDB4NTZCNywgMHg0QjQzLCAweDU2QkMsIDB4MTE2MywgMHg1NkMwLCAweDExNjYsCisgICAgMHg1NkMxLCAweDExNjQsIDB4NTZDMiwgMHgxMTYyLCAweDU2QzMsIDB4MTE2NSwgMHg1NkM1LCAweDQ0MDAsCisgICAgMHg1NkM4LCAweDExNjcsIDB4NTZDOSwgMHgzODRFLCAweDU2Q0EsIDB4MUU1QSwgMHg1NkNDLCAweDRCNDQsCisgICAgMHg1NkNELCAweDQ0MDEsIDB4NTZDRSwgMHgxMTY4LCAweDU2Q0YsIDB4NEI0NSwgMHg1NkQxLCAweDExNjksCisgICAgMHg1NkQzLCAweDExNkEsIDB4NTZENywgMHgxMTZCLCAweDU2RDgsIDB4MTA3QywgMHg1NkQ5LCAweDRCNDYsCisgICAgMHg1NkRBLCAweDA5MjgsIDB4NTZEQiwgMHgwODlCLCAweDU2REQsIDB4Mzg0RiwgMHg1NkRFLCAweDA1NzMsCisgICAgMHg1NkRGLCAweDQ0MDIsIDB4NTZFMCwgMHgwNEJDLCAweDU2RTEsIDB4NEI0NywgMHg1NkUzLCAweDBCODIsCisgICAgMHg1NkU0LCAweDM4NTAsIDB4NTZFOCwgMHg0NDAzLCAweDU2RUIsIDB4NEI0OCwgMHg1NkVELCAweDRCNDksCisgICAgMHg1NkVFLCAweDExNkMsIDB4NTZGMCwgMHgwODE0LCAweDU2RjEsIDB4NEI0QSwgMHg1NkYyLCAweDA0OTMsCisgICAgMHg1NkYzLCAweDBBMjQsIDB4NTZGNiwgMHg0NDA0LCAweDU2RjcsIDB4NDQwNSwgMHg1NkY5LCAweDExNkQsCisgICAgMHg1NkZBLCAweDA3N0IsIDB4NTZGRCwgMHgwODAzLCAweDU2RkYsIDB4MTE2RiwgMHg1NzAwLCAweDExNkUsCisgICAgMHg1NzAzLCAweDBFMzAsIDB4NTcwNCwgMHgxMTcwLCAweDU3MDcsIDB4NEI0QiwgMHg1NzA4LCAweDExNzIsCisgICAgMHg1NzA5LCAweDExNzEsIDB4NTcwQSwgMHgzODUxLCAweDU3MEIsIDB4MTE3MywgMHg1NzBDLCAweDRCNEMsCisgICAgMHg1NzBELCAweDExNzQsIDB4NTcwRiwgMHgwNzRELCAweDU3MTIsIDB4MDUwMiwgMHg1NzEzLCAweDExNzUsCisgICAgMHg1NzE1LCAweDM4NTIsIDB4NTcxNiwgMHgxMTc3LCAweDU3MTgsIDB4MTE3NiwgMHg1NzFBLCAweDRCNEQsCisgICAgMHg1NzFCLCAweDRCNEUsIDB4NTcxQywgMHgxMTc5LCAweDU3MUQsIDB4NEI0RiwgMHg1NzFGLCAweDBDNTQsCisgICAgMHg1NzIxLCAweDM2ODAsIDB4NTcyMywgMHgzODUzLCAweDU3MjYsIDB4MTE3QSwgMHg1NzI3LCAweDA0NzksCisgICAgMHg1NzI4LCAweDA4NEYsIDB4NTcyOSwgMHg0NDA4LCAweDU3MkMsIDB4NEI1MCwgMHg1NzJELCAweDA3MTMsCisgICAgMHg1NzJFLCAweDRCNTEsIDB4NTcyRiwgMHgzODU0LCAweDU3MzAsIDB4MEI4RCwgMHg1NzMzLCAweDM4NTUsCisgICAgMHg1NzM0LCAweDM4NTYsIDB4NTczNywgMHgxMTdCLCAweDU3MzgsIDB4MTE3QywgMHg1NzNCLCAweDExN0UsCisgICAgMHg1NzNELCAweDRCNTIsIDB4NTczRSwgMHg0QjUzLCAweDU3NDAsIDB4MTE3RiwgMHg1NzQyLCAweDA4NTQsCisgICAgMHg1NzQ1LCAweDQ0MEEsIDB4NTc0NiwgMHg0NDBCLCAweDU3NDcsIDB4MDZDOSwgMHg1NzRBLCAweDBFNjUsCisgICAgMHg1NzRDLCAweDM4NTcsIDB4NTc0RCwgMHg0NDBDLCAweDU3NEUsIDB4MTE3RCwgMHg1NzRGLCAweDExODAsCisgICAgMHg1NzUwLCAweDA4MzEsIDB4NTc1MSwgMHgwN0I1LCAweDU3NTksIDB4MjBFMCwgMHg1NzVGLCAweDRCNTQsCisgICAgMHg1NzYxLCAweDExODQsIDB4NTc2NCwgMHgwODE1LCAweDU3NjUsIDB4MjBFMSwgMHg1NzY2LCAweDBCNzEsCisgICAgMHg1NzY4LCAweDQ0MEUsIDB4NTc2OSwgMHgxMTgxLCAweDU3NkEsIDB4MEJGNiwgMHg1NzZCLCAweDRCNTUsCisgICAgMHg1NzZELCAweDRCNTYsIDB4NTc2RiwgMHg0NDBGLCAweDU3NzAsIDB4Mzg1OCwgMHg1NzczLCAweDQ0MTAsCisgICAgMHg1Nzc0LCAweDQ0MTEsIDB4NTc3NSwgMHg0NDEyLCAweDU3NzcsIDB4NDFBRSwgMHg1NzdBLCAweDRCNTcsCisgICAgMHg1NzdCLCAweDQ0MTMsIDB4NTc3QywgMHg0MUFGLCAweDU3N0YsIDB4MTE4NSwgMHg1NzgyLCAweDBBMjgsCisgICAgMHg1NzgzLCAweDRCNTgsIDB4NTc4OCwgMHgxMTgzLCAweDU3ODksIDB4MTE4NiwgMHg1NzhCLCAweDA3MTUsCisgICAgMHg1NzhDLCAweDM4NTksIDB4NTc5MywgMHgxMTg3LCAweDU3OTcsIDB4NEI1OSwgMHg1NzlBLCAweDQ0MTYsCisgICAgMHg1NzlDLCAweDM4NUEsIDB4NTc5RCwgMHg0NDE3LCAweDU3OUUsIDB4NDQxOCwgMHg1N0EwLCAweDExODgsCisgICAgMHg1N0EyLCAweDA3QjYsIDB4NTdBMywgMHgwNTlFLCAweDU3QTQsIDB4MTE4QSwgMHg1N0E4LCAweDQ0MTksCisgICAgMHg1N0FBLCAweDExOEIsIDB4NTdBQywgMHgyMEUyLCAweDU3QUUsIDB4NEI1QSwgMHg1N0IwLCAweDExOEMsCisgICAgMHg1N0IzLCAweDExODksIDB4NTdCOCwgMHgzODVCLCAweDU3QzAsIDB4MTE4MiwgMHg1N0MzLCAweDExOEQsCisgICAgMHg1N0M2LCAweDExOEUsIDB4NTdDNywgMHgyMEU0LCAweDU3QzgsIDB4MjBFMywgMHg1N0NCLCAweDBFOTIsCisgICAgMHg1N0NDLCAweDQ0MUMsIDB4NTdDRSwgMHgwOUQzLCAweDU3Q0YsIDB4NDFCMSwgMHg1N0QyLCAweDExOTAsCisgICAgMHg1N0QzLCAweDExOTEsIDB4NTdENCwgMHgxMThGLCAweDU3RDUsIDB4NEI1QiwgMHg1N0Q2LCAweDExOTMsCisgICAgMHg1N0Q3LCAweDQ0MUEsIDB4NTdEQywgMHgwQ0VFLCAweDU3REUsIDB4NDQxRiwgMHg1N0RGLCAweDA0QUMsCisgICAgMHg1N0UwLCAweDBEQzgsIDB4NTdFMywgMHgxMTk0LCAweDU3RTQsIDB4NDFCMiwgMHg1N0U2LCAweDM4NUMsCisgICAgMHg1N0U3LCAweDRCNUMsIDB4NTdFRCwgMHgzODVELCAweDU3RjAsIDB4NDQyMCwgMHg1N0Y0LCAweDA5RTUsCisgICAgMHg1N0Y1LCAweDM4NUUsIDB4NTdGNiwgMHgzODVGLCAweDU3RjcsIDB4MDhFNSwgMHg1N0Y4LCAweDQ0MjIsCisgICAgMHg1N0Y5LCAweDBEMTMsIDB4NTdGQSwgMHgwNjJDLCAweDU3RkIsIDB4NDQyMywgMHg1N0ZDLCAweDA4NUIsCisgICAgMHg1N0ZELCAweDQ0MjQsIDB4NTdGRiwgMHgzODYwLCAweDU4MDAsIDB4MEU4NywgMHg1ODAyLCAweDBDOEEsCisgICAgMHg1ODA0LCAweDQ0MjUsIDB4NTgwNSwgMHgwNzRFLCAweDU4MDYsIDB4MEIyRiwgMHg1ODA5LCAweDM4NjEsCisgICAgMHg1ODBBLCAweDExOTIsIDB4NTgwQiwgMHgxMTk1LCAweDU4MEQsIDB4NEI1RCwgMHg1ODE1LCAweDBCMjQsCisgICAgMHg1ODE5LCAweDExOTYsIDB4NTgxRCwgMHgxMTk3LCAweDU4MUUsIDB4NDQyNiwgMHg1ODIwLCAweDM4NjIsCisgICAgMHg1ODIxLCAweDExOTksIDB4NTgyNCwgMHgwQzA1LCAweDU4MjYsIDB4NEI1RSwgMHg1ODI3LCAweDQ0MjcsCisgICAgMHg1ODJBLCAweDA1RUEsIDB4NTgyRiwgMHgxRDMyLCAweDU4MzAsIDB4MDUwMywgMHg1ODMxLCAweDBFNDMsCisgICAgMHg1ODMyLCAweDM4NjMsIDB4NTgzNCwgMHgwOUQ0LCAweDU4MzUsIDB4MEM0MiwgMHg1ODM5LCAweDQ0MjgsCisgICAgMHg1ODNBLCAweDA4NTYsIDB4NTgzRCwgMHgxMTlGLCAweDU4NDAsIDB4MEUwRCwgMHg1ODQxLCAweDBGQTUsCisgICAgMHg1ODQ5LCAweDQ0MkEsIDB4NTg0QSwgMHgwNTc0LCAweDU4NEIsIDB4MTE5QiwgMHg1ODRDLCAweDQ0MkIsCisgICAgMHg1ODRELCAweDRCNUYsIDB4NTg0RiwgMHg0QjYwLCAweDU4NTEsIDB4MEFCQywgMHg1ODUyLCAweDExOUUsCisgICAgMHg1ODU0LCAweDBDNUQsIDB4NTg1NywgMHgwQzQzLCAweDU4NTgsIDB4MEM1RSwgMHg1ODU5LCAweDBENEQsCisgICAgMHg1ODVBLCAweDBCRTksIDB4NTg1RSwgMHgwODM5LCAweDU4NUYsIDB4NEI2MSwgMHg1ODYxLCAweDFFNDcsCisgICAgMHg1ODYyLCAweDExOUEsIDB4NTg2NCwgMHg0MUIzLCAweDU4NjcsIDB4NDQyQywgMHg1ODY5LCAweDA1MTgsCisgICAgMHg1ODZCLCAweDBDMzAsIDB4NTg2RCwgMHg0QjYyLCAweDU4NzAsIDB4MTE5QywgMHg1ODcyLCAweDExOTgsCisgICAgMHg1ODc1LCAweDBBMTYsIDB4NTg3OSwgMHgxMUEwLCAweDU4N0MsIDB4Mzg2NCwgMHg1ODdFLCAweDA5NTgsCisgICAgMHg1ODdGLCAweDRCNjMsIDB4NTg4MCwgMHgzODY1LCAweDU4ODEsIDB4NEI2NCwgMHg1ODgzLCAweDA2QTUsCisgICAgMHg1ODg1LCAweDExQTEsIDB4NTg4OSwgMHg0MUI0LCAweDU4OEEsIDB4NDQyRCwgMHg1ODhCLCAweDQ0MkUsCisgICAgMHg1ODhELCAweDQ0MkYsIDB4NTg4RiwgMHg0NDMwLCAweDU4OTAsIDB4NDQzMSwgMHg1ODkzLCAweDBFMzgsCisgICAgMHg1ODk0LCAweDQ0MzIsIDB4NTg5NywgMHgwQUZGLCAweDU4OTgsIDB4NEI2NSwgMHg1ODlDLCAweDBCRTIsCisgICAgMHg1ODlELCAweDQ0MzMsIDB4NTg5RSwgMHgyMEU3LCAweDU4OUYsIDB4MTFBMywgMHg1OEE4LCAweDBFN0QsCisgICAgMHg1OEE5LCAweDM4NjYsIDB4NThBQSwgMHg0NDM0LCAweDU4QUIsIDB4MTFBNCwgMHg1OEFFLCAweDExQTksCisgICAgMHg1OEIxLCAweDQ0MzUsIDB4NThCMiwgMHgyMEU4LCAweDU4QjMsIDB4MERGRiwgMHg1OEI4LCAweDExQTgsCisgICAgMHg1OEI5LCAweDExQTIsIDB4NThCQSwgMHgxMUE1LCAweDU4QkIsIDB4MTFBNywgMHg1OEJDLCAweDRCNjYsCisgICAgMHg1OEJFLCAweDA4MTYsIDB4NThDMSwgMHgwRTE5LCAweDU4QzMsIDB4NDQzNywgMHg1OEM1LCAweDExQUEsCisgICAgMHg1OEM3LCAweDBCODMsIDB4NThDQSwgMHgwNTc1LCAweDU4Q0MsIDB4MDlENSwgMHg1OENELCAweDQ0MzgsCisgICAgMHg1OENFLCAweDM4NjcsIDB4NThEMCwgMHgzODY4LCAweDU4RDEsIDB4MTFBQywgMHg1OEQyLCAweDQxQjYsCisgICAgMHg1OEQzLCAweDExQUIsIDB4NThENCwgMHgzODY5LCAweDU4RDUsIDB4MDdGQSwgMHg1OEQ3LCAweDExQUQsCisgICAgMHg1OEQ4LCAweDExQUYsIDB4NThEOSwgMHgxMUFFLCAweDU4REEsIDB4Mzg2QSwgMHg1OERDLCAweDExQjEsCisgICAgMHg1OERFLCAweDExQTYsIDB4NThERiwgMHgxMUIzLCAweDU4RTAsIDB4NDFCNywgMHg1OEUyLCAweDQ0MzksCisgICAgMHg1OEU0LCAweDExQjIsIDB4NThFNSwgMHgxMUIwLCAweDU4RTksIDB4Mzg2QiwgMHg1OEVCLCAweDA4OUMsCisgICAgMHg1OEVDLCAweDBBMTcsIDB4NThFRSwgMHgwQUQ2LCAweDU4RUYsIDB4MTFCNCwgMHg1OEYwLCAweDBBNjAsCisgICAgMHg1OEYxLCAweDA0QjEsIDB4NThGMiwgMHgwRDFBLCAweDU4RjMsIDB4NDQzQSwgMHg1OEY0LCAweDQ0M0IsCisgICAgMHg1OEY3LCAweDBCRjcsIDB4NThGOSwgMHgxMUI2LCAweDU4RkEsIDB4MTFCNSwgMHg1OEZCLCAweDExQjcsCisgICAgMHg1OEZDLCAweDExQjgsIDB4NThGRCwgMHgxMUI5LCAweDU5MDIsIDB4MTFCQSwgMHg1OTA1LCAweDQ0M0MsCisgICAgMHg1OTA2LCAweDQ0M0QsIDB4NTkwOSwgMHgwRTIxLCAweDU5MEEsIDB4MTFCQiwgMHg1OTBCLCAweDIwRTksCisgICAgMHg1OTBDLCAweDM4NkMsIDB4NTkwRCwgMHg0NDNFLCAweDU5MEYsIDB4MDU0NiwgMHg1OTEwLCAweDExQkMsCisgICAgMHg1OTE0LCAweDQ0M0YsIDB4NTkxNSwgMHgwRjI2LCAweDU5MTYsIDB4MDU4RSwgMHg1OTE4LCAweDEwREUsCisgICAgMHg1OTE5LCAweDA5NTIsIDB4NTkxQSwgMHgwQjFGLCAweDU5MUIsIDB4MTFCRCwgMHg1OTFDLCAweDBFRjcsCisgICAgMHg1OTFGLCAweDRCNjcsIDB4NTkyMiwgMHgwRUMwLCAweDU5MjMsIDB4NEI2OCwgMHg1OTI0LCAweDM4NkQsCisgICAgMHg1OTI1LCAweDExQkYsIDB4NTkyNywgMHgwQjQ3LCAweDU5MjksIDB4MEMzMSwgMHg1OTJBLCAweDBCMjAsCisgICAgMHg1OTJCLCAweDBEQzksIDB4NTkyQywgMHgxMUMwLCAweDU5MkQsIDB4MTFDMSwgMHg1OTJFLCAweDA1MUQsCisgICAgMHg1OTJGLCAweDM4NkUsIDB4NTkzMSwgMHgwOEU2LCAweDU5MzIsIDB4MTFDMiwgMHg1OTM3LCAweDA0OTQsCisgICAgMHg1OTM4LCAweDExQzMsIDB4NTkzOSwgMHgzNzI1LCAweDU5M0QsIDB4NDQ0MiwgMHg1OTNFLCAweDExQzQsCisgICAgMHg1OTQ0LCAweDA1MDQsIDB4NTk0NiwgMHg0NDQ0LCAweDU5NDcsIDB4MDYyRCwgMHg1OTQ4LCAweDBDQjgsCisgICAgMHg1OTQ5LCAweDBFNDQsIDB4NTk0RSwgMHgxMUM4LCAweDU5NEYsIDB4MEFENywgMHg1OTUwLCAweDExQzcsCisgICAgMHg1OTUxLCAweDA3MTYsIDB4NTk1MywgMHgyMEVBLCAweDU5NTQsIDB4MEU4OSwgMHg1OTU1LCAweDExQzYsCisgICAgMHg1OTU3LCAweDBDNUYsIDB4NTk1OCwgMHgxMUNBLCAweDU5NTksIDB4NEI2OSwgMHg1OTVBLCAweDExQzksCisgICAgMHg1OTVCLCAweDIwRUIsIDB4NTk1RCwgMHgyMEVDLCAweDU5NUYsIDB4NDQ0NywgMHg1OTYwLCAweDExQ0MsCisgICAgMHg1OTYxLCAweDM4NkYsIDB4NTk2MiwgMHgxMUNCLCAweDU5NjMsIDB4MjBFRCwgMHg1OTY1LCAweDA1MUUsCisgICAgMHg1OTY3LCAweDExQ0QsIDB4NTk2OCwgMHgwOTkxLCAweDU5NjksIDB4MTFDRiwgMHg1OTZBLCAweDBCNjMsCisgICAgMHg1OTZDLCAweDExQ0UsIDB4NTk2RCwgMHgzODcwLCAweDU5NkUsIDB4MEUwMywgMHg1OTczLCAweDA5ODEsCisgICAgMHg1OTc0LCAweDBDNTUsIDB4NTk3NSwgMHg0NDQ5LCAweDU5NzYsIDB4NDQ0QSwgMHg1OTc4LCAweDExRDAsCisgICAgMHg1OTc5LCAweDRCNkEsIDB4NTk3QywgMHg0NDRCLCAweDU5N0QsIDB4MDdCNywgMHg1OTgxLCAweDExRDEsCisgICAgMHg1OTgyLCAweDBDRDcsIDB4NTk4MywgMHgwRDcyLCAweDU5ODQsIDB4MEVERCwgMHg1OThBLCAweDBDREIsCisgICAgMHg1OThCLCAweDQxQjksIDB4NTk4RCwgMHgxMURBLCAweDU5OTIsIDB4NDFCQSwgMHg1OTkzLCAweDA2NTIsCisgICAgMHg1OTk2LCAweDBGMkYsIDB4NTk5NywgMHg0QjZCLCAweDU5OTksIDB4MEVCQiwgMHg1OTlCLCAweDEyMzksCisgICAgMHg1OTlELCAweDExRDIsIDB4NTk5RiwgMHg0NDRDLCAweDU5QTMsIDB4MTFENSwgMHg1OUE0LCAweDIwRUUsCisgICAgMHg1OUE1LCAweDBCMjUsIDB4NTlBOCwgMHgwRTY2LCAweDU5QUMsIDB4MEM0NCwgMHg1OUFFLCAweDQ0NEQsCisgICAgMHg1OUFGLCAweDRCNkMsIDB4NTlCMiwgMHgxMUQ2LCAweDU5QjMsIDB4NEI2RCwgMHg1OUI5LCAweDBFOTMsCisgICAgMHg1OUJBLCAweDIwRUYsIDB4NTlCQiwgMHgwODNBLCAweDU5QkMsIDB4NDQ0RSwgMHg1OUJFLCAweDA5OTIsCisgICAgMHg1OUMzLCAweDQxQkIsIDB4NTlDNiwgMHgxMUQ3LCAweDU5QzgsIDB4NDQ0RiwgMHg1OUM5LCAweDA4OUUsCisgICAgMHg1OUNBLCAweDM4NzEsIDB4NTlDQiwgMHgwODlELCAweDU5Q0QsIDB4NDQ1MCwgMHg1OUQwLCAweDA0N0QsCisgICAgMHg1OUQxLCAweDA3N0MsIDB4NTlEMiwgMHgzODcyLCAweDU5RDMsIDB4MEE0RiwgMHg1OUQ0LCAweDA0OTUsCisgICAgMHg1OUQ5LCAweDExREIsIDB4NTlEQSwgMHgxMURDLCAweDU5REMsIDB4MTFEOSwgMHg1OURELCAweDM4NzMsCisgICAgMHg1OURFLCAweDQ0NTEsIDB4NTlERiwgMHg0QjZFLCAweDU5RTMsIDB4Mzg3NCwgMHg1OUU0LCAweDM4NzUsCisgICAgMHg1OUU1LCAweDA0REEsIDB4NTlFNiwgMHgwNUVCLCAweDU5RTcsIDB4NDQ1MiwgMHg1OUU4LCAweDExRDgsCisgICAgMHg1OUVBLCAweDBFRDEsIDB4NTlFQiwgMHgwREEzLCAweDU5RUMsIDB4MzZBRCwgMHg1OUVFLCAweDQ0NTMsCisgICAgMHg1OUYxLCAweDRCNkYsIDB4NTlGNiwgMHgwNDZDLCAweDU5RjgsIDB4NEI3MCwgMHg1OUZCLCAweDA0QkQsCisgICAgMHg1OUZGLCAweDA4OUYsIDB4NUEwMSwgMHgwNDk2LCAweDVBMDMsIDB4MDQ2NywgMHg1QTA0LCAweDM4NzYsCisgICAgMHg1QTA5LCAweDExRTEsIDB4NUEwQywgMHgzODc3LCAweDVBMEQsIDB4NDQ1NywgMHg1QTExLCAweDExREYsCisgICAgMHg1QTEzLCAweDQxQkMsIDB4NUExNywgMHg0NDU4LCAweDVBMTgsIDB4MEVDOCwgMHg1QTFBLCAweDExRTIsCisgICAgMHg1QTFCLCAweDM1QzEsIDB4NUExQywgMHgxMUUwLCAweDVBMUYsIDB4MTFERSwgMHg1QTIwLCAweDA5RjcsCisgICAgMHg1QTIzLCAweDM4NzgsIDB4NUEyNSwgMHgxMURELCAweDVBMjcsIDB4NDQ1OSwgMHg1QTI5LCAweDBFMkEsCisgICAgMHg1QTJELCAweDQ0NUEsIDB4NUEyRiwgMHgwNzk4LCAweDVBMzUsIDB4MTFFNiwgMHg1QTM2LCAweDExRTcsCisgICAgMHg1QTNDLCAweDA5OTMsIDB4NUE0MCwgMHgxMUUzLCAweDVBNDEsIDB4MEZEMiwgMHg1QTQ2LCAweDBEMDIsCisgICAgMHg1QTQ3LCAweDM4NzksIDB4NUE0OSwgMHgxMUU1LCAweDVBNTUsIDB4Mzg3QSwgMHg1QTVBLCAweDA4MTcsCisgICAgMHg1QTYyLCAweDExRTgsIDB4NUE2MywgMHgzODdCLCAweDVBNjUsIDB4NDQ1QiwgMHg1QTY2LCAweDBEQ0EsCisgICAgMHg1QTY3LCAweDQxQkQsIDB4NUE2QSwgMHgxMUU5LCAweDVBNkMsIDB4MTFFNCwgMHg1QTZELCAweDM4N0MsCisgICAgMHg1QTc3LCAweDQxQkUsIDB4NUE3QSwgMHg0NDVDLCAweDVBN0UsIDB4Mzg3RCwgMHg1QTdGLCAweDBFQzcsCisgICAgMHg1QTg0LCAweDQxQkYsIDB4NUE4QiwgMHg0NDVELCAweDVBOTIsIDB4MEQxNCwgMHg1QTlBLCAweDExRUEsCisgICAgMHg1QTlCLCAweDBEQTQsIDB4NUE5QywgMHg0NDVFLCAweDVBOUUsIDB4Mzg3RSwgMHg1QTlGLCAweDQ0NUYsCisgICAgMHg1QUEwLCAweDQ0NjAsIDB4NUFBMiwgMHg0NDYxLCAweDVBQTcsIDB4Mzg3RiwgMHg1QUFDLCAweDM4ODAsCisgICAgMHg1QUIxLCAweDQ0NjIsIDB4NUFCMiwgMHg0QjcxLCAweDVBQjMsIDB4Mzg4MSwgMHg1QUI1LCAweDQ0NjMsCisgICAgMHg1QUI4LCAweDRCNzIsIDB4NUFCQSwgMHg0NDY0LCAweDVBQkMsIDB4MTFFQiwgMHg1QUJELCAweDExRUYsCisgICAgMHg1QUJFLCAweDExRUMsIDB4NUFCRiwgMHg0NDY1LCAweDVBQzEsIDB4MDU0NywgMHg1QUMyLCAweDExRUUsCisgICAgMHg1QUM0LCAweDQxQzAsIDB4NUFDOSwgMHgwOEU3LCAweDVBQ0IsIDB4MTFFRCwgMHg1QUNDLCAweDA3NEYsCisgICAgMHg1QUQwLCAweDExRkIsIDB4NUFENiwgMHgxMUY0LCAweDVBRDcsIDB4MTFGMSwgMHg1QURBLCAweDQ0NjYsCisgICAgMHg1QURDLCAweDQ0NjcsIDB4NUFFMCwgMHgzODgyLCAweDVBRTEsIDB4MEJBMiwgMHg1QUUzLCAweDExRjAsCisgICAgMHg1QUU1LCAweDQ0NjgsIDB4NUFFNiwgMHgxMUYyLCAweDVBRTksIDB4MTFGMywgMHg1QUVBLCAweDRCNzMsCisgICAgMHg1QUVFLCAweDQ0NkEsIDB4NUFGMCwgMHg0NDY5LCAweDVBRjUsIDB4NDQ2QiwgMHg1QUY2LCAweDRCNzQsCisgICAgMHg1QUZBLCAweDExRjUsIDB4NUFGQiwgMHgxMUY2LCAweDVCMDAsIDB4Mzg4MywgMHg1QjA4LCAweDQ0NkMsCisgICAgMHg1QjA5LCAweDA2MkUsIDB4NUIwQiwgMHgxMUY4LCAweDVCMEMsIDB4MTFGNywgMHg1QjE2LCAweDExRjksCisgICAgMHg1QjE3LCAweDQ0NkQsIDB4NUIxOSwgMHgzODg0LCAweDVCMUIsIDB4NEI3NSwgMHg1QjFELCAweDRCNzYsCisgICAgMHg1QjIxLCAweDRCNzcsIDB4NUIyMiwgMHgwOUQ2LCAweDVCMjUsIDB4Mzg4NSwgMHg1QjJBLCAweDExRkMsCisgICAgMHg1QjJDLCAweDBCRjgsIDB4NUIyRCwgMHgzODg2LCAweDVCMzAsIDB4MDRFNywgMHg1QjMyLCAweDExRkEsCisgICAgMHg1QjM0LCAweDQ0NkUsIDB4NUIzNiwgMHgxMUZELCAweDVCMzgsIDB4NEI3OCwgMHg1QjNFLCAweDExRkUsCisgICAgMHg1QjQwLCAweDEyMDEsIDB4NUI0MSwgMHgzODg3LCAweDVCNDMsIDB4MTFGRiwgMHg1QjQ1LCAweDEyMDAsCisgICAgMHg1QjRDLCAweDQ0NkYsIDB4NUI1MCwgMHgwOEEwLCAweDVCNTEsIDB4MTIwMiwgMHg1QjUyLCAweDQ0NzAsCisgICAgMHg1QjU0LCAweDA3QjgsIDB4NUI1NSwgMHgxMjAzLCAweDVCNTYsIDB4MjBGMCwgMHg1QjU3LCAweDA4QzgsCisgICAgMHg1QjU4LCAweDBCMTgsIDB4NUI1QSwgMHgxMjA0LCAweDVCNUIsIDB4MTIwNSwgMHg1QjVDLCAweDA4QTgsCisgICAgMHg1QjVELCAweDA3QjksIDB4NUI1RiwgMHgwRURFLCAweDVCNjMsIDB4MDY0MiwgMHg1QjY0LCAweDA3N0QsCisgICAgMHg1QjY1LCAweDEyMDYsIDB4NUI2NiwgMHgwNUI2LCAweDVCNjgsIDB4NDQ3MSwgMHg1QjY5LCAweDEyMDcsCisgICAgMHg1QjZCLCAweDBCMTksIDB4NUI2RiwgMHg0NDcyLCAweDVCNzAsIDB4MTIwOCwgMHg1QjcxLCAweDEyMzAsCisgICAgMHg1QjczLCAweDEyMDksIDB4NUI3NSwgMHgxMjBBLCAweDVCNzYsIDB4MzcyOCwgMHg1Qjc4LCAweDEyMEIsCisgICAgMHg1QjdBLCAweDEyMEQsIDB4NUI3QywgMHgzODg4LCAweDVCN0QsIDB4NDFDMiwgMHg1QjdFLCAweDM4ODksCisgICAgMHg1QjdGLCAweDM4OEEsIDB4NUI4MCwgMHgxMjBFLCAweDVCODEsIDB4NDQ3MywgMHg1QjgyLCAweDM2MTAsCisgICAgMHg1QjgzLCAweDEyMEYsIDB4NUI4NCwgMHg0NDc0LCAweDVCODUsIDB4MEI1MCwgMHg1Qjg3LCAweDA0QzksCisgICAgMHg1Qjg4LCAweDA5MTUsIDB4NUI4OSwgMHgwNDg2LCAweDVCOEEsIDB4Mzg4QiwgMHg1QjhCLCAweDBBRDksCisgICAgMHg1QjhDLCAweDA1RUMsIDB4NUI4RCwgMHgwOEUxLCAweDVCOEYsIDB4MDdCQSwgMHg1QjkzLCAweDQxQzMsCisgICAgMHg1Qjk1LCAweDBDNjAsIDB4NUI5NiwgMHg0NDc2LCAweDVCOTcsIDB4MDkyQiwgMHg1Qjk4LCAweDA1RUQsCisgICAgMHg1Qjk5LCAweDBCQTYsIDB4NUI5QSwgMHgwQzA2LCAweDVCOUIsIDB4MDQ3QywgMHg1QjlDLCAweDA2NTMsCisgICAgMHg1QjlELCAweDBFNDUsIDB4NUI5RiwgMHgwOEVFLCAweDVCQTIsIDB4MDY2QywgMHg1QkEzLCAweDBBOEYsCisgICAgMHg1QkE0LCAweDA4RTgsIDB4NUJBNSwgMHgwRjEyLCAweDVCQTYsIDB4MTIxMCwgMHg1QkFDLCAweDQ0NzcsCisgICAgMHg1QkFFLCAweDA2NzYsIDB4NUJCMCwgMHgwODNCLCAweDVCQjMsIDB4MDU5MCwgMHg1QkI0LCAweDA1MDUsCisgICAgMHg1QkI1LCAweDA5OTQsIDB4NUJCNiwgMHgwNTQ4LCAweDVCQjcsIDB4NEI3OSwgMHg1QkI4LCAweDEyMTEsCisgICAgMHg1QkI5LCAweDBGMzAsIDB4NUJCRiwgMHgwOTUzLCAweDVCQzAsIDB4MjBGMSwgMHg1QkMyLCAweDA5MTAsCisgICAgMHg1QkMzLCAweDEyMTIsIDB4NUJDNCwgMHgwNjJGLCAweDVCQzUsIDB4MENBQSwgMHg1QkM2LCAweDBFQjUsCisgICAgMHg1QkM3LCAweDEyMTMsIDB4NUJDOSwgMHgxMjE0LCAweDVCQ0MsIDB4MERDQiwgMHg1QkNFLCAweDQ0N0EsCisgICAgMHg1QkQwLCAweDEyMTYsIDB4NUJEMiwgMHgwNUU0LCAweDVCRDMsIDB4MDZFRiwgMHg1QkQ0LCAweDEyMTUsCisgICAgMHg1QkQ2LCAweDQ0N0IsIDB4NUJENywgMHg0QjdBLCAweDVCRDgsIDB4MjBGMywgMHg1QkRCLCAweDA1RUUsCisgICAgMHg1QkRELCAweDA5RjgsIDB4NUJERSwgMHgxMjFBLCAweDVCREYsIDB4MDg2RiwgMHg1QkUwLCAweDRCN0IsCisgICAgMHg1QkUxLCAweDA1NDksIDB4NUJFMiwgMHgxMjE5LCAweDVCRTQsIDB4MTIxNywgMHg1QkU1LCAweDEyMUIsCisgICAgMHg1QkU2LCAweDEyMTgsIDB4NUJFNywgMHgwQ0UxLCAweDVCRTgsIDB4MTQ4RSwgMHg1QkU5LCAweDA5RjksCisgICAgMHg1QkVCLCAweDEyMUMsIDB4NUJFQywgMHg0RjRFLCAweDVCRUUsIDB4MEY4OCwgMHg1QkYwLCAweDEyMUQsCisgICAgMHg1QkYxLCAweDQ0N0UsIDB4NUJGMywgMHgxMjFGLCAweDVCRjUsIDB4MEJCQywgMHg1QkY2LCAweDEyMUUsCisgICAgMHg1QkY4LCAweDBBNDcsIDB4NUJGQSwgMHgwOEM5LCAweDVCRkQsIDB4NDQ3RiwgMHg1QkZFLCAweDBCMzAsCisgICAgMHg1QkZGLCAweDA5MjMsIDB4NUMwMSwgMHgwREU3LCAweDVDMDIsIDB4MEE5MCwgMHg1QzAzLCAweDQ0ODEsCisgICAgMHg1QzA0LCAweDA4RjksIDB4NUMwNSwgMHgxMjIwLCAweDVDMDYsIDB4MDk5NSwgMHg1QzA3LCAweDEyMjEsCisgICAgMHg1QzA4LCAweDEyMjIsIDB4NUMwOSwgMHgwNDk3LCAweDVDMEEsIDB4MEIxQSwgMHg1QzBCLCAweDBBMTgsCisgICAgMHg1QzBELCAweDEyMjMsIDB4NUMwRSwgMHgwQzhCLCAweDVDMEYsIDB4MDk5NiwgMHg1QzExLCAweDA5OTcsCisgICAgMHg1QzEyLCAweDQxQzQsIDB4NUMxMywgMHgxMjI0LCAweDVDMTQsIDB4MzcyQSwgMHg1QzE2LCAweDBBOTEsCisgICAgMHg1QzE5LCAweDM2MEIsIDB4NUMxQSwgMHgwOTk4LCAweDVDMUUsIDB4MjBGNSwgMHg1QzFGLCAweDRCN0MsCisgICAgMHg1QzIwLCAweDEyMjUsIDB4NUMyMiwgMHgxMjI2LCAweDVDMjMsIDB4Mzg4QywgMHg1QzI0LCAweDBFRUMsCisgICAgMHg1QzI4LCAweDEyMjcsIDB4NUMyOSwgMHg0NDgyLCAweDVDMkEsIDB4NEI3RCwgMHg1QzJCLCAweDM4OEQsCisgICAgMHg1QzJDLCAweDRCN0UsIDB4NUMyRCwgMHgwNkJFLCAweDVDMzAsIDB4Mzg4RSwgMHg1QzMxLCAweDA5MkMsCisgICAgMHg1QzM2LCAweDRCN0YsIDB4NUMzOCwgMHgxMjI4LCAweDVDMzksIDB4MTIyOSwgMHg1QzNBLCAweDA5MDgsCisgICAgMHg1QzNCLCAweDA5RjIsIDB4NUMzQywgMHgwQ0NDLCAweDVDM0QsIDB4MEExQSwgMHg1QzNFLCAweDBEOEMsCisgICAgMHg1QzNGLCAweDBDRDgsIDB4NUM0MCwgMHgwNkMxLCAweDVDNDEsIDB4MTIyQSwgMHg1QzQ1LCAweDA2ODksCisgICAgMHg1QzQ2LCAweDEyMkIsIDB4NUM0OCwgMHgwNkY2LCAweDVDNEEsIDB4MENBNywgMHg1QzRCLCAweDA1MzAsCisgICAgMHg1QzRELCAweDA4QTEsIDB4NUM0RSwgMHgxMjJDLCAweDVDNEYsIDB4MTIyRiwgMHg1QzUwLCAweDEyMkUsCisgICAgMHg1QzUxLCAweDA2RjUsIDB4NUM1MywgMHgxMjJELCAweDVDNTUsIDB4MEMzMiwgMHg1QzU5LCAweDRCODAsCisgICAgMHg1QzVCLCAweDFFOTIsIDB4NUM1QywgMHg0QjgxLCAweDVDNUUsIDB4MEIxMCwgMHg1QzVGLCAweDQ0ODQsCisgICAgMHg1QzYwLCAweDBDNDUsIDB4NUM2MSwgMHgwOEY0LCAweDVDNjIsIDB4MUUwRCwgMHg1QzYzLCAweDM4OEYsCisgICAgMHg1QzY0LCAweDBBREEsIDB4NUM2NSwgMHgwRjY0LCAweDVDNjcsIDB4NDQ4NSwgMHg1QzY4LCAweDQ0ODYsCisgICAgMHg1QzY5LCAweDM4OTAsIDB4NUM2QywgMHgxMjMxLCAweDVDNkQsIDB4NEI4MiwgMHg1QzZFLCAweDEyMzIsCisgICAgMHg1QzZGLCAweDBDQUUsIDB4NUM3MCwgMHg0NDg3LCAweDVDNzEsIDB4MDg4MSwgMHg1Qzc2LCAweDEyMzQsCisgICAgMHg1Qzc5LCAweDEyMzUsIDB4NUM3QSwgMHg0MUM3LCAweDVDN0MsIDB4Mzg5MSwgMHg1Qzg4LCAweDQ0OEMsCisgICAgMHg1QzhBLCAweDQ0OEQsIDB4NUM4QywgMHgxMjM2LCAweDVDOEYsIDB4NDFDOCwgMHg1QzkwLCAweDA2MzAsCisgICAgMHg1QzkxLCAweDEyMzcsIDB4NUM5NCwgMHgxMjM4LCAweDVDOUYsIDB4NDFDOSwgMHg1Q0EwLCAweDQ0OTEsCisgICAgMHg1Q0ExLCAweDA1MkMsIDB4NUNBMiwgMHg0NDkyLCAweDVDQTMsIDB4NDFDQSwgMHg1Q0E2LCAweDIwRjYsCisgICAgMHg1Q0E3LCAweDQ0OTMsIDB4NUNBOCwgMHgwQUJELCAweDVDQTksIDB4MDYyMCwgMHg1Q0FBLCAweDQxQ0IsCisgICAgMHg1Q0FCLCAweDEyM0EsIDB4NUNBQywgMHgwRUI0LCAweDVDQUQsIDB4NDQ5NSwgMHg1Q0IxLCAweDBCMzIsCisgICAgMHg1Q0IzLCAweDA1QjcsIDB4NUNCNSwgMHg0NDk2LCAweDVDQjYsIDB4MTIzQywgMHg1Q0I3LCAweDEyM0UsCisgICAgMHg1Q0I4LCAweDA2MUIsIDB4NUNCQSwgMHgyMEY3LCAweDVDQkIsIDB4MTIzQiwgMHg1Q0JDLCAweDEyM0QsCisgICAgMHg1Q0JFLCAweDEyNDAsIDB4NUNDNSwgMHgxMjNGLCAweDVDQzcsIDB4MTI0MSwgMHg1Q0M5LCAweDQ0OTgsCisgICAgMHg1Q0NCLCAweDM4OTIsIDB4NUNEMCwgMHg0MUNDLCAweDVDRDIsIDB4Mzg5MywgMHg1Q0Q5LCAweDEyNDIsCisgICAgMHg1Q0RELCAweDRCODMsIDB4NUNFMCwgMHgwQzk1LCAweDVDRTEsIDB4MDZBNiwgMHg1Q0U2LCAweDM3MkMsCisgICAgMHg1Q0U4LCAweDA1NjUsIDB4NUNFOSwgMHgxMjQzLCAweDVDRUEsIDB4MTI0OCwgMHg1Q0VELCAweDEyNDYsCisgICAgMHg1Q0VGLCAweDBFNDcsIDB4NUNGMCwgMHgwRTQ2LCAweDVDRjQsIDB4Mzg5NCwgMHg1Q0Y1LCAweDIwRjgsCisgICAgMHg1Q0Y2LCAweDBDNjEsIDB4NUNGQSwgMHgxMjQ1LCAweDVDRkIsIDB4MDk1RSwgMHg1Q0ZELCAweDEyNDQsCisgICAgMHg1RDAxLCAweDRCODQsIDB4NUQwNiwgMHg0NDlCLCAweDVEMDcsIDB4MEEzOCwgMHg1RDBCLCAweDEyNDksCisgICAgMHg1RDBELCAweDQxQ0UsIDB4NUQwRSwgMHgwODVBLCAweDVEMTAsIDB4NDQ5QywgMHg1RDExLCAweDEyNEYsCisgICAgMHg1RDE0LCAweDEyNTAsIDB4NUQxNSwgMHgxMjRBLCAweDVEMTYsIDB4MDU5MSwgMHg1RDE3LCAweDEyNEIsCisgICAgMHg1RDE4LCAweDEyNTQsIDB4NUQxOSwgMHgxMjUzLCAweDVEMUEsIDB4MTI1MiwgMHg1RDFCLCAweDEyNEUsCisgICAgMHg1RDFELCAweDQ0OUUsIDB4NUQxRiwgMHgxMjRELCAweDVEMjAsIDB4NDQ5RiwgMHg1RDIyLCAweDEyNTEsCisgICAgMHg1RDI0LCAweDM4OTUsIDB4NUQyNiwgMHgzODk2LCAweDVEMjcsIDB4MjBGOSwgMHg1RDI5LCAweDBFNDgsCisgICAgMHg1RDJCLCAweDQ0OUQsIDB4NUQzMSwgMHg0NEEwLCAweDVEMzQsIDB4NEI4NSwgMHg1RDM5LCAweDQ0QTEsCisgICAgMHg1RDNELCAweDRCODYsIDB4NUQ0MiwgMHgyMEZDLCAweDVENDMsIDB4Mzg5NywgMHg1RDQ2LCAweDM4OTgsCisgICAgMHg1RDQ3LCAweDQxQ0YsIDB4NUQ0QSwgMHgzODk5LCAweDVENEIsIDB4MTI1OCwgMHg1RDRDLCAweDEyNTUsCisgICAgMHg1RDRFLCAweDEyNTcsIDB4NUQ1MCwgMHgwRjVDLCAweDVENTIsIDB4MTI1NiwgMHg1RDUzLCAweDIwRkEsCisgICAgMHg1RDU5LCAweDRCODcsIDB4NUQ1QywgMHgxMjRDLCAweDVENjEsIDB4NDRBMywgMHg1RDY5LCAweDBBMzksCisgICAgMHg1RDZBLCAweDQ0QTQsIDB4NUQ2QywgMHgxMjU5LCAweDVENkQsIDB4MjBGRCwgMHg1RDZGLCAweDA4MjcsCisgICAgMHg1RDcwLCAweDQ0QTYsIDB4NUQ3MywgMHgxMjVBLCAweDVENzYsIDB4MTI1QiwgMHg1RDdFLCAweDRCODgsCisgICAgMHg1RDgxLCAweDQxRDAsIDB4NUQ4MiwgMHgxMjVFLCAweDVEODMsIDB4NEI4OSwgMHg1RDg0LCAweDEyNUQsCisgICAgMHg1RDg3LCAweDEyNUMsIDB4NUQ4OCwgMHg0NEE5LCAweDVEOEIsIDB4MEM2MiwgMHg1RDhDLCAweDEyNDcsCisgICAgMHg1RDkwLCAweDEyNjQsIDB4NUQ5MiwgMHgzODlBLCAweDVEOTQsIDB4Mzg5QiwgMHg1RDk3LCAweDQ0QUIsCisgICAgMHg1RDk5LCAweDM4OUMsIDB4NUQ5RCwgMHgxMjYwLCAweDVEQTAsIDB4Mzg5RCwgMHg1REEyLCAweDEyNUYsCisgICAgMHg1REE0LCAweDQxRDEsIDB4NURBNywgMHg0MUQyLCAweDVEQUMsIDB4MTI2MSwgMHg1REFFLCAweDEyNjIsCisgICAgMHg1REIwLCAweDQ0QUMsIDB4NURCMiwgMHgzQzJELCAweDVEQjQsIDB4NDRBRCwgMHg1REI3LCAweDEyNjUsCisgICAgMHg1REI4LCAweDIwRkUsIDB4NURCOSwgMHgyMEZGLCAweDVEQkEsIDB4MEZBRSwgMHg1REJDLCAweDEyNjYsCisgICAgMHg1REJELCAweDEyNjMsIDB4NURDNywgMHg0QjhBLCAweDVEQzksIDB4MTI2NywgMHg1RENCLCAweDQxRDMsCisgICAgMHg1RENDLCAweDA2MUMsIDB4NURDRCwgMHgxMjY4LCAweDVERDAsIDB4MjEwMCwgMHg1REQxLCAweDQ0QUYsCisgICAgMHg1REQyLCAweDEyNkEsIDB4NUREMywgMHgxMjY5LCAweDVERDYsIDB4MTI2QiwgMHg1REQ3LCAweDQ0QjAsCisgICAgMHg1REQ4LCAweDM4OUUsIDB4NUREQiwgMHgxMjZDLCAweDVEREQsIDB4MEE5MiwgMHg1RERFLCAweDA5MkQsCisgICAgMHg1REUwLCAweDM4OUYsIDB4NURFMSwgMHgwOTZFLCAweDVERTIsIDB4MzQzMiwgMHg1REUzLCAweDBBRTUsCisgICAgMHg1REU0LCAweDQ0QjIsIDB4NURFNSwgMHgwN0JCLCAweDVERTYsIDB4MDgyOCwgMHg1REU3LCAweDA3QkMsCisgICAgMHg1REU4LCAweDA2OEEsIDB4NURFOSwgMHg0NEIzLCAweDVERUIsIDB4MTI2RCwgMHg1REVFLCAweDA4MjksCisgICAgMHg1REYxLCAweDA3N0UsIDB4NURGMiwgMHgxMjZFLCAweDVERjMsIDB4MEVCMiwgMHg1REY0LCAweDBDRjksCisgICAgMHg1REY1LCAweDEyNkYsIDB4NURGNywgMHgwN0JELCAweDVERjgsIDB4MzhBMCwgMHg1REY5LCAweDRCOEIsCisgICAgMHg1REZCLCAweDA1RTgsIDB4NURGRCwgMHgwQjY1LCAweDVERkUsIDB4MDZDQSwgMHg1REZGLCAweDM1RTIsCisgICAgMHg1RTAwLCAweDM4QTEsIDB4NUUwMiwgMHgwOEEyLCAweDVFMDMsIDB4MERDRCwgMHg1RTA2LCAweDBENTUsCisgICAgMHg1RTBCLCAweDEyNzAsIDB4NUUwQywgMHgwNjMxLCAweDVFMTEsIDB4MTI3MywgMHg1RTEyLCAweDM4QTIsCisgICAgMHg1RTE0LCAweDM4QTMsIDB4NUUxNSwgMHgzOEE0LCAweDVFMTYsIDB4MEJCRCwgMHg1RTE4LCAweDM4QTUsCisgICAgMHg1RTE5LCAweDEyNzIsIDB4NUUxQSwgMHgxMjcxLCAweDVFMUIsIDB4MTI3NCwgMHg1RTFELCAweDBDMDcsCisgICAgMHg1RTFGLCAweDQ0QjcsIDB4NUUyNSwgMHgwQTI5LCAweDVFMjgsIDB4NEI4QywgMHg1RTJCLCAweDA4QTMsCisgICAgMHg1RTJELCAweDBBNkUsIDB4NUUyRSwgMHgzOEE2LCAweDVFMkYsIDB4MEIzMywgMHg1RTMwLCAweDA2M0MsCisgICAgMHg1RTMyLCAweDRCOEQsIDB4NUUzMywgMHgwQkJFLCAweDVFMzUsIDB4NEI4RSwgMHg1RTM2LCAweDEyNzUsCisgICAgMHg1RTM3LCAweDEyNzYsIDB4NUUzOCwgMHgwOUQ3LCAweDVFM0QsIDB4MEU2NywgMHg1RTNFLCAweDQ0QjgsCisgICAgMHg1RTQwLCAweDEyNzksIDB4NUU0MywgMHgxMjc4LCAweDVFNDQsIDB4MTI3NywgMHg1RTQ1LCAweDBERUYsCisgICAgMHg1RTQ3LCAweDEyODAsIDB4NUU0OSwgMHg0NEI5LCAweDVFNEMsIDB4MEU4OCwgMHg1RTRFLCAweDEyN0EsCisgICAgMHg1RTU0LCAweDEyN0MsIDB4NUU1NSwgMHgwRTk5LCAweDVFNTYsIDB4NDRCQiwgMHg1RTU3LCAweDEyN0IsCisgICAgMHg1RTU4LCAweDM4QTcsIDB4NUU1QiwgMHg0QjhGLCAweDVFNUUsIDB4NDFENCwgMHg1RTVGLCAweDEyN0QsCisgICAgMHg1RTYxLCAweDBEM0MsIDB4NUU2MiwgMHgxMjdFLCAweDVFNjMsIDB4MEUwRSwgMHg1RTY0LCAweDEyN0YsCisgICAgMHg1RTY4LCAweDRCOTAsIDB4NUU2QSwgMHg0QjkxLCAweDVFNkIsIDB4MzhBOCwgMHg1RTZDLCAweDM4QTksCisgICAgMHg1RTZELCAweDQ0QkQsIDB4NUU2RSwgMHg0NEJFLCAweDVFNzIsIDB4MDVFRiwgMHg1RTczLCAweDBFMEYsCisgICAgMHg1RTc0LCAweDBDRTUsIDB4NUU3NSwgMHgxMjgxLCAweDVFNzYsIDB4MTI4MiwgMHg1RTc3LCAweDRCOTIsCisgICAgMHg1RTc4LCAweDA3QkUsIDB4NUU3OSwgMHgwNUYwLCAweDVFN0EsIDB4MTI4MywgMHg1RTdCLCAweDA3NkMsCisgICAgMHg1RTdDLCAweDBGMkUsIDB4NUU3RCwgMHgwRjEzLCAweDVFN0UsIDB4MDYzMiwgMHg1RTdGLCAweDEyODUsCisgICAgMHg1RTgwLCAweDRCOTMsIDB4NUU4MSwgMHgwQkJGLCAweDVFODMsIDB4MDdCRiwgMHg1RTg0LCAweDA5OTksCisgICAgMHg1RTg3LCAweDBENzMsIDB4NUU4QSwgMHgwOTlBLCAweDVFOEIsIDB4NEI5NCwgMHg1RThGLCAweDA5ODIsCisgICAgMHg1RTk1LCAweDBDMDgsIDB4NUU5NiwgMHgwRTQ5LCAweDVFOTcsIDB4MEMzMywgMHg1RTk5LCAweDM2QjAsCisgICAgMHg1RTlBLCAweDA3QzAsIDB4NUU5QywgMHgwRENFLCAweDVFQTAsIDB4MTI4NiwgMHg1RUE1LCAweDQ0QzAsCisgICAgMHg1RUE2LCAweDBDNTMsIDB4NUVBNywgMHgwODMyLCAweDVFQTgsIDB4MzhBQSwgMHg1RUFBLCAweDM4QUIsCisgICAgMHg1RUFCLCAweDA3N0YsIDB4NUVBQywgMHg0NEMxLCAweDVFQUQsIDB4MEMwOSwgMHg1RUIzLCAweDRCOTUsCisgICAgMHg1RUI1LCAweDA0ODcsIDB4NUVCNiwgMHgwOTc4LCAweDVFQjcsIDB4MDdDMSwgMHg1RUI4LCAweDBGMzEsCisgICAgMHg1RUI5LCAweDQ0QzIsIDB4NUVCRCwgMHg0Qjk2LCAweDVFQkUsIDB4MzhBQywgMHg1RUJGLCAweDM4QUQsCisgICAgMHg1RUMxLCAweDEyODcsIDB4NUVDMiwgMHgxMjg4LCAweDVFQzMsIDB4MEQwNywgMHg1RUM2LCAweDQ0QzMsCisgICAgMHg1RUM4LCAweDEyODksIDB4NUVDOSwgMHgwRkJGLCAweDVFQ0EsIDB4MEZEMywgMHg1RUNCLCAweDNDMUUsCisgICAgMHg1RUNGLCAweDEyOEIsIDB4NUVEMCwgMHgxMjhBLCAweDVFRDEsIDB4NEI5NywgMHg1RUQyLCAweDM4QUYsCisgICAgMHg1RUQzLCAweDA1QTUsIDB4NUVENCwgMHg0Qjk4LCAweDVFRDUsIDB4NEI5OSwgMHg1RUQ2LCAweDEyOEMsCisgICAgMHg1RUQ5LCAweDQ0QzQsIDB4NUVEQSwgMHgxMjhGLCAweDVFREIsIDB4MTI5MCwgMHg1RURELCAweDEyOEUsCisgICAgMHg1RURGLCAweDBEQjIsIDB4NUVFMCwgMHgwOTlCLCAweDVFRTEsIDB4MTI5MiwgMHg1RUUyLCAweDEyOTEsCisgICAgMHg1RUUzLCAweDEyOEQsIDB4NUVFOCwgMHgxMjkzLCAweDVFRTksIDB4MTI5NCwgMHg1RUVDLCAweDEyOTUsCisgICAgMHg1RUYwLCAweDEyOTgsIDB4NUVGMSwgMHgxMjk2LCAweDVFRjMsIDB4MTI5NywgMHg1RUY0LCAweDEyOTksCisgICAgMHg1RUY2LCAweDA1MDYsIDB4NUVGNywgMHgwQzBBLCAweDVFRjgsIDB4MTI5QSwgMHg1RUY5LCAweDQxRDUsCisgICAgMHg1RUZBLCAweDA3NTAsIDB4NUVGQiwgMHgwNTc2LCAweDVFRkMsIDB4MENFQywgMHg1RUZELCAweDQ0QzYsCisgICAgMHg1RUZFLCAweDEyOUIsIDB4NUVGRiwgMHgwQ0QzLCAweDVGMDAsIDB4NDFENiwgMHg1RjAxLCAweDBFMkIsCisgICAgMHg1RjAyLCAweDQxRDcsIDB4NUYwMywgMHgxMjlDLCAweDVGMDQsIDB4MEZENCwgMHg1RjA3LCAweDM4QjAsCisgICAgMHg1RjA4LCAweDQ0QzcsIDB4NUYwOSwgMHgxMjlELCAweDVGMEEsIDB4MEUxMCwgMHg1RjBCLCAweDEyQTAsCisgICAgMHg1RjBDLCAweDBGRkEsIDB4NUYwRCwgMHgxMDBBLCAweDVGMEUsIDB4MzhCMSwgMHg1RjBGLCAweDA4REMsCisgICAgMHg1RjEwLCAweDBDQ0QsIDB4NUYxMSwgMHgxMkExLCAweDVGMTMsIDB4MDY3NywgMHg1RjE0LCAweDBCQzAsCisgICAgMHg1RjE1LCAweDA0QkUsIDB4NUYxNiwgMHgxMkEyLCAweDVGMTcsIDB4MERGNiwgMHg1RjE4LCAweDA3QzIsCisgICAgMHg1RjFCLCAweDBCOEUsIDB4NUYxQywgMHgzOEIyLCAweDVGMUQsIDB4MzhCMywgMHg1RjFFLCAweDQ0QzksCisgICAgMHg1RjFGLCAweDBDMEIsIDB4NUYyMSwgMHgyMTAxLCAweDVGMjIsIDB4MzhCNCwgMHg1RjIzLCAweDQxRDgsCisgICAgMHg1RjI1LCAweDBFRkIsIDB4NUYyNiwgMHgwNzZELCAweDVGMjcsIDB4MDc4MCwgMHg1RjI4LCAweDM4QjUsCisgICAgMHg1RjI5LCAweDEyQTMsIDB4NUYyRCwgMHgxMkE0LCAweDVGMkYsIDB4MTJBQSwgMHg1RjMxLCAweDA5MTEsCisgICAgMHg1RjM0LCAweDIxMDIsIDB4NUYzNSwgMHgwQkMxLCAweDVGMzYsIDB4MzhCNiwgMHg1RjM3LCAweDA2QTcsCisgICAgMHg1RjM4LCAweDEyQTUsIDB4NUYzQSwgMHgzNTk4LCAweDVGM0IsIDB4MzhCNywgMHg1RjNDLCAweDBEOUQsCisgICAgMHg1RjNELCAweDQxRDksIDB4NUYzRSwgMHgwQjg0LCAweDVGNDAsIDB4MzhCOCwgMHg1RjQxLCAweDEyQTYsCisgICAgMHg1RjQ1LCAweDIwQjIsIDB4NUY0NywgMHg0NENBLCAweDVGNDgsIDB4MTJBNywgMHg1RjRBLCAweDA2QTgsCisgICAgMHg1RjRDLCAweDEyQTgsIDB4NUY0RCwgMHg0QjlBLCAweDVGNEUsIDB4MTJBOSwgMHg1RjUwLCAweDM4QjksCisgICAgMHg1RjUxLCAweDEyQUIsIDB4NUY1MywgMHgwQzcwLCAweDVGNTQsIDB4NDFEQSwgMHg1RjU2LCAweDEyQUMsCisgICAgMHg1RjU3LCAweDEyQUQsIDB4NUY1OCwgMHgzOEJBLCAweDVGNTksIDB4MTJBRSwgMHg1RjVDLCAweDEyOUYsCisgICAgMHg1RjVELCAweDEyOUUsIDB4NUY2MSwgMHgxMkFGLCAweDVGNjIsIDB4MDcxNywgMHg1RjYzLCAweDQ0Q0IsCisgICAgMHg1RjY0LCAweDM4QkIsIDB4NUY2NSwgMHgzNkFDLCAweDVGNjYsIDB4MEQ5OSwgMHg1RjY3LCAweDIxMDMsCisgICAgMHg1RjY5LCAweDA4M0MsIDB4NUY2QSwgMHgwREE5LCAweDVGNkIsIDB4MEJDMiwgMHg1RjZDLCAweDBEQkQsCisgICAgMHg1RjZELCAweDEyQjAsIDB4NUY3MCwgMHgwOTlDLCAweDVGNzEsIDB4MDRFOCwgMHg1RjcyLCAweDQ0Q0MsCisgICAgMHg1RjczLCAweDEyQjEsIDB4NUY3NywgMHgxMkIyLCAweDVGNzksIDB4MEVGRSwgMHg1RjdDLCAweDBENzQsCisgICAgMHg1RjdELCAweDQxREIsIDB4NUY3RSwgMHg0NENELCAweDVGN0YsIDB4MTJCNSwgMHg1RjgwLCAweDA1MUYsCisgICAgMHg1RjgxLCAweDBBNTAsIDB4NUY4MiwgMHgxMkI0LCAweDVGODMsIDB4MTJCMywgMHg1Rjg0LCAweDA3MTgsCisgICAgMHg1Rjg1LCAweDBCMzQsIDB4NUY4NywgMHgxMkI5LCAweDVGODgsIDB4MTJCNywgMHg1Rjg5LCAweDM4QkMsCisgICAgMHg1RjhBLCAweDEyQjYsIDB4NUY4QiwgMHgwRjZGLCAweDVGOEMsIDB4MDc5OSwgMHg1RjhGLCAweDQ0Q0UsCisgICAgMHg1RjkwLCAweDA5ODMsIDB4NUY5MSwgMHgxMkI4LCAweDVGOTIsIDB4MEM0NiwgMHg1RjkzLCAweDA5NDgsCisgICAgMHg1Rjk3LCAweDBDOTgsIDB4NUY5OCwgMHgxMkJDLCAweDVGOTksIDB4MTJCQiwgMHg1RjlDLCAweDM4QkQsCisgICAgMHg1RjlFLCAweDEyQkEsIDB4NUZBMCwgMHgxMkJELCAweDVGQTEsIDB4MDc5QSwgMHg1RkEyLCAweDQ0Q0YsCisgICAgMHg1RkE0LCAweDM4QkYsIDB4NUZBNywgMHgzOEJFLCAweDVGQTgsIDB4MTJCRSwgMHg1RkE5LCAweDBERUUsCisgICAgMHg1RkFBLCAweDA5NjUsIDB4NUZBQywgMHg0QjlCLCAweDVGQUQsIDB4MTJCRiwgMHg1RkFFLCAweDBEOEQsCisgICAgMHg1RkFGLCAweDM4QzAsIDB4NUZCMywgMHgwQzk5LCAweDVGQjQsIDB4MEJDMywgMHg1RkI1LCAweDM0MzgsCisgICAgMHg1RkI3LCAweDIxMDQsIDB4NUZCOCwgMHgzOEMxLCAweDVGQjksIDB4MEMyQSwgMHg1RkJDLCAweDEyQzAsCisgICAgMHg1RkJELCAweDA2NDUsIDB4NUZDMywgMHgwOUZBLCAweDVGQzQsIDB4MzhDMiwgMHg1RkM1LCAweDBEOUUsCisgICAgMHg1RkM3LCAweDQ0RDAsIDB4NUZDOSwgMHgzOEMzLCAweDVGQ0IsIDB4NDREMSwgMHg1RkNDLCAweDA2MzMsCisgICAgMHg1RkNELCAweDBDREMsIDB4NUZEMiwgMHg0NEQyLCAweDVGRDMsIDB4NDREMywgMHg1RkQ0LCAweDQ0RDQsCisgICAgMHg1RkQ2LCAweDEyQzEsIDB4NUZENywgMHgwOEE0LCAweDVGRDgsIDB4MEU2OCwgMHg1RkQ5LCAweDBFNjksCisgICAgMHg1RkRDLCAweDA1MjAsIDB4NUZERCwgMHgxMkM2LCAweDVGREUsIDB4MjEwNSwgMHg1RkUwLCAweDBCQTcsCisgICAgMHg1RkUxLCAweDM4QzQsIDB4NUZFMiwgMHg0NEQ1LCAweDVGRTQsIDB4MTJDMywgMHg1RkU5LCAweDM4QzUsCisgICAgMHg1RkVBLCAweDRCOUMsIDB4NUZFQiwgMHgwNTc3LCAweDVGRUQsIDB4MzhDNiwgMHg1RkVFLCAweDQ0RDYsCisgICAgMHg1RkVGLCAweDQ0RDcsIDB4NUZGMCwgMHgxMkY2LCAweDVGRjEsIDB4MTJDNSwgMHg1RkYzLCAweDQ0RDgsCisgICAgMHg1RkY1LCAweDBDRTYsIDB4NUZGOCwgMHgxMkM0LCAweDVGRkIsIDB4MTJDMiwgMHg1RkZDLCAweDM4QzcsCisgICAgMHg1RkZELCAweDA4MEMsIDB4NUZGRiwgMHgxMkM4LCAweDYwMDcsIDB4NEI5RCwgMHg2MDBELCAweDQxREMsCisgICAgMHg2MDBFLCAweDEyQ0UsIDB4NjAwRiwgMHgxMkQ0LCAweDYwMTAsIDB4MTJDQywgMHg2MDEyLCAweDBDNTYsCisgICAgMHg2MDE0LCAweDQxREQsIDB4NjAxNSwgMHgxMkQxLCAweDYwMTYsIDB4MERDRiwgMHg2MDE3LCAweDM4QzgsCisgICAgMHg2MDE4LCAweDQxREUsIDB4NjAxOSwgMHgxMkNCLCAweDYwMUEsIDB4MzhDOSwgMHg2MDFCLCAweDEyRDAsCisgICAgMHg2MDFDLCAweDBGQUYsIDB4NjAxRCwgMHgwOEE1LCAweDYwMjAsIDB4MEIzNSwgMHg2MDIxLCAweDEyQzksCisgICAgMHg2MDIyLCAweDQ0REEsIDB4NjAyNCwgMHg0NERCLCAweDYwMjUsIDB4MDY3OCwgMHg2MDI2LCAweDEyRDMsCisgICAgMHg2MDI3LCAweDBBNTEsIDB4NjAyOCwgMHgwNTA3LCAweDYwMjksIDB4MTJDRCwgMHg2MDJBLCAweDA1NzgsCisgICAgMHg2MDJCLCAweDEyRDIsIDB4NjAyRiwgMHgwNkE5LCAweDYwMzEsIDB4MTJDRiwgMHg2MDMzLCAweDM4Q0EsCisgICAgMHg2MDM1LCAweDQxREYsIDB4NjAzQSwgMHgxMkQ1LCAweDYwNDEsIDB4MTJENywgMHg2MDQyLCAweDEyRTEsCisgICAgMHg2MDQzLCAweDEyREYsIDB4NjA0NiwgMHgxMkRDLCAweDYwNDcsIDB4NDFFMCwgMHg2MDQ5LCAweDRCOUUsCisgICAgMHg2MDRBLCAweDEyREIsIDB4NjA0QiwgMHgwRkMwLCAweDYwNEMsIDB4NDRERCwgMHg2MDRELCAweDEyREQsCisgICAgMHg2MDUwLCAweDA2QUEsIDB4NjA1MiwgMHgwN0MzLCAweDYwNTQsIDB4NEI5RiwgMHg2MDU1LCAweDA5ODQsCisgICAgMHg2MDU5LCAweDEyRTQsIDB4NjA1QSwgMHgxMkQ2LCAweDYwNUQsIDB4MjEwNiwgMHg2MDVGLCAweDEyREEsCisgICAgMHg2MDYwLCAweDEyQ0EsIDB4NjA2MSwgMHgzOENCLCAweDYwNjIsIDB4MDU3QSwgMHg2MDYzLCAweDEyREUsCisgICAgMHg2MDY0LCAweDEyRTAsIDB4NjA2NSwgMHgwQjhGLCAweDYwNjcsIDB4NEJBMCwgMHg2MDY4LCAweDA4MTgsCisgICAgMHg2MDY5LCAweDA1MzgsIDB4NjA2QSwgMHgxMkQ4LCAweDYwNkIsIDB4MTJFMywgMHg2MDZDLCAweDEyRTIsCisgICAgMHg2MDZELCAweDA2QUIsIDB4NjA2RiwgMHgwQjA5LCAweDYwNzAsIDB4MDVDNCwgMHg2MDc1LCAweDA3MTksCisgICAgMHg2MDc3LCAweDEyRDksIDB4NjA3RiwgMHgzOENDLCAweDYwODEsIDB4MTJFNSwgMHg2MDgzLCAweDEyRTgsCisgICAgMHg2MDg0LCAweDEyRUEsIDB4NjA4NSwgMHgyMTA3LCAweDYwODksIDB4MDhFOSwgMHg2MDhBLCAweDIxMDgsCisgICAgMHg2MDhCLCAweDEyRjAsIDB4NjA4QywgMHgwQzBDLCAweDYwOEQsIDB4MTJFNiwgMHg2MDkyLCAweDEyRUUsCisgICAgMHg2MDk0LCAweDA1NzksIDB4NjA5NSwgMHg0NERFLCAweDYwOTYsIDB4MTJFQywgMHg2MDk3LCAweDEyRUQsCisgICAgMHg2MDlBLCAweDEyRTksIDB4NjA5QiwgMHgxMkVCLCAweDYwOUQsIDB4NDFFMSwgMHg2MDlFLCAweDM4Q0QsCisgICAgMHg2MDlGLCAweDA3OUIsIDB4NjBBMCwgMHgwRjE0LCAweDYwQTMsIDB4MDVGMSwgMHg2MEE0LCAweDM4Q0UsCisgICAgMHg2MEE2LCAweDA0RkIsIDB4NjBBNywgMHgxMkVGLCAweDYwQTgsIDB4NDRERiwgMHg2MEE5LCAweDBDRjAsCisgICAgMHg2MEFBLCAweDA0NzEsIDB4NjBCMCwgMHgzOENGLCAweDYwQjEsIDB4NDRFMSwgMHg2MEIyLCAweDBENzUsCisgICAgMHg2MEIzLCAweDEyQzcsIDB4NjBCNCwgMHgxMkY1LCAweDYwQjUsIDB4MTJGOSwgMHg2MEI2LCAweDBFRjEsCisgICAgMHg2MEI4LCAweDEyRjIsIDB4NjBCQiwgMHg0QkExLCAweDYwQkMsIDB4MEM2MywgMHg2MEJELCAweDEyRjcsCisgICAgMHg2MEJFLCAweDQ0RTIsIDB4NjBDNCwgMHg0QkEyLCAweDYwQzUsIDB4MDlEOCwgMHg2MEM2LCAweDEyRjgsCisgICAgMHg2MEM3LCAweDBDQUYsIDB4NjBDOCwgMHg0NEUzLCAweDYwQ0IsIDB4MzhEMCwgMHg2MEQxLCAweDBGRUQsCisgICAgMHg2MEQzLCAweDEyRjQsIDB4NjBENCwgMHg0MUUyLCAweDYwRDUsIDB4MjEwQSwgMHg2MEQ4LCAweDEyRkEsCisgICAgMHg2MEQ5LCAweDQ0RTQsIDB4NjBEQSwgMHgwODBELCAweDYwREIsIDB4MzhEMSwgMHg2MERDLCAweDBBNkYsCisgICAgMHg2MERELCAweDQxRTMsIDB4NjBERSwgMHgyMTA5LCAweDYwREYsIDB4MDQ5OCwgMHg2MEUwLCAweDEyRjMsCisgICAgMHg2MEUxLCAweDEyRjEsIDB4NjBFMywgMHgwQURDLCAweDYwRTcsIDB4MTJFNywgMHg2MEU4LCAweDA4ODIsCisgICAgMHg2MEVFLCAweDQ0RTUsIDB4NjBGMCwgMHgwQjI2LCAweDYwRjEsIDB4MTMwNiwgMHg2MEYyLCAweDIxMEMsCisgICAgMHg2MEYzLCAweDBBREQsIDB4NjBGNCwgMHgxMzAxLCAweDYwRjUsIDB4NDRFNiwgMHg2MEY2LCAweDEyRkUsCisgICAgMHg2MEY3LCAweDEyRkYsIDB4NjBGOCwgMHgzOEQyLCAweDYwRjksIDB4MDkxMiwgMHg2MEZBLCAweDEzMDIsCisgICAgMHg2MEZCLCAweDEzMDUsIDB4NjBGRCwgMHg0QkEzLCAweDYxMDAsIDB4MTMwMCwgMHg2MTAxLCAweDA5MkYsCisgICAgMHg2MTAzLCAweDEzMDMsIDB4NjEwNiwgMHgxMkZELCAweDYxMDgsIDB4MEYwOCwgMHg2MTA5LCAweDBGMDcsCisgICAgMHg2MTBBLCAweDRCQTQsIDB4NjEwRCwgMHgxMzA3LCAweDYxMEUsIDB4MTMwOCwgMHg2MTBGLCAweDA0OTksCisgICAgMHg2MTEwLCAweDQ0RTcsIDB4NjExMSwgMHgyMTBELCAweDYxMTIsIDB4MzhEMywgMHg2MTEzLCAweDM4RDQsCisgICAgMHg2MTE0LCAweDM4RDUsIDB4NjExNSwgMHgxMkZDLCAweDYxMTYsIDB4NEJBNSwgMHg2MTE5LCAweDQ0RTgsCisgICAgMHg2MTFBLCAweDA2RUEsIDB4NjExQiwgMHgwNDZBLCAweDYxMUMsIDB4MzhENiwgMHg2MTFFLCAweDQ0RTksCisgICAgMHg2MTFGLCAweDA1RjIsIDB4NjEyMCwgMHgyMTBCLCAweDYxMjEsIDB4MTMwNCwgMHg2MTI3LCAweDEzMEMsCisgICAgMHg2MTI4LCAweDEzMEIsIDB4NjEyQSwgMHg0QkE2LCAweDYxMkIsIDB4NDFFNCwgMHg2MTJDLCAweDEzMTAsCisgICAgMHg2MTMwLCAweDIxMEYsIDB4NjEzNCwgMHgxMzExLCAweDYxMzYsIDB4NEJBNywgMHg2MTM3LCAweDIxMEUsCisgICAgMHg2MTNBLCAweDQ0RUEsIDB4NjEzQywgMHgxMzBGLCAweDYxM0QsIDB4MTMxMiwgMHg2MTNFLCAweDEzMEEsCisgICAgMHg2MTNGLCAweDEzMEUsIDB4NjE0MSwgMHg0NEVDLCAweDYxNDIsIDB4MTMxMywgMHg2MTQ0LCAweDEzMTQsCisgICAgMHg2MTQ2LCAweDQ0RUQsIDB4NjE0NywgMHgxMzA5LCAweDYxNDgsIDB4MDhDQSwgMHg2MTRBLCAweDEzMEQsCisgICAgMHg2MTRCLCAweDBCMzYsIDB4NjE0QywgMHgwN0M0LCAweDYxNEQsIDB4MTJGQiwgMHg2MTRFLCAweDA5RkIsCisgICAgMHg2MTUzLCAweDEzMjEsIDB4NjE1NSwgMHgwRTM5LCAweDYxNTgsIDB4MTMxNywgMHg2MTU5LCAweDEzMTgsCisgICAgMHg2MTVBLCAweDEzMTksIDB4NjE1RCwgMHgxMzIwLCAweDYxNUUsIDB4NEJBOCwgMHg2MTVGLCAweDEzMUYsCisgICAgMHg2MTYwLCAweDQ0RUUsIDB4NjE2MiwgMHgwRUFCLCAweDYxNjMsIDB4MDVGMywgMHg2MTY0LCAweDRCQTksCisgICAgMHg2MTY1LCAweDEzMUQsIDB4NjE2NywgMHgwNzFCLCAweDYxNjgsIDB4MDU5MiwgMHg2MTZCLCAweDEzMUEsCisgICAgMHg2MTZFLCAweDBGODAsIDB4NjE2RiwgMHgxMzFDLCAweDYxNzAsIDB4MDQ5QSwgMHg2MTcxLCAweDEzMUUsCisgICAgMHg2MTczLCAweDEzMTUsIDB4NjE3NCwgMHgxMzFCLCAweDYxNzUsIDB4MTMyMiwgMHg2MTc2LCAweDA3MUEsCisgICAgMHg2MTc3LCAweDEzMTYsIDB4NjE3QiwgMHg0QkFBLCAweDYxN0MsIDB4MzhENywgMHg2MTdELCAweDRCQUIsCisgICAgMHg2MTdFLCAweDBGNDcsIDB4NjE3RiwgMHg0QkFDLCAweDYxODIsIDB4MEYxNSwgMHg2MTg3LCAweDEzMjUsCisgICAgMHg2MThBLCAweDEzMjksIDB4NjE4RCwgMHgzOEQ4LCAweDYxOEUsIDB4MEIwMCwgMHg2MTkwLCAweDBGQzEsCisgICAgMHg2MTkxLCAweDEzMkEsIDB4NjE5MiwgMHg0NEYwLCAweDYxOTMsIDB4NDRGMSwgMHg2MTk0LCAweDEzMjcsCisgICAgMHg2MTk2LCAweDEzMjQsIDB4NjE5NywgMHg0NEYyLCAweDYxOTgsIDB4MjExMCwgMHg2MTk5LCAweDEzMjMsCisgICAgMHg2MTlBLCAweDEzMjgsIDB4NjE5RCwgMHg0QkFELCAweDYxOUYsIDB4MzhEOSwgMHg2MUE0LCAweDBFMDAsCisgICAgMHg2MUE1LCAweDQ0RjMsIDB4NjFBNywgMHgwQzhDLCAweDYxQTgsIDB4MzhEQSwgMHg2MUE5LCAweDA3MUMsCisgICAgMHg2MUFCLCAweDEzMkIsIDB4NjFBQywgMHgxMzI2LCAweDYxQUQsIDB4NDRGNCwgMHg2MUFFLCAweDEzMkMsCisgICAgMHg2MUIyLCAweDA3NTEsIDB4NjFCNiwgMHgwNTMxLCAweDYxQjgsIDB4NEJBRSwgMHg2MUI5LCAweDQxRTYsCisgICAgMHg2MUJBLCAweDEzMzQsIDB4NjFCQywgMHg0MUU1LCAweDYxQkUsIDB4MDVGNCwgMHg2MUMyLCAweDM4REIsCisgICAgMHg2MUMzLCAweDEzMzIsIDB4NjFDNiwgMHgxMzMzLCAweDYxQzcsIDB4MDgxOSwgMHg2MUM4LCAweDEzMzEsCisgICAgMHg2MUM5LCAweDEzMkYsIDB4NjFDQSwgMHgxMzJFLCAweDYxQ0IsIDB4MTMzNSwgMHg2MUNDLCAweDEzMkQsCisgICAgMHg2MUNELCAweDEzMzcsIDB4NjFEMCwgMHgwNTdCLCAweDYxRDUsIDB4NDRGNiwgMHg2MURDLCAweDRCQUYsCisgICAgMHg2MURELCAweDQ0RjcsIDB4NjFERiwgMHgzOERDLCAweDYxRTIsIDB4NEJCMCwgMHg2MUUzLCAweDEzMzksCisgICAgMHg2MUU1LCAweDRCQjEsIDB4NjFFNiwgMHgxMzM4LCAweDYxRTgsIDB4NEJCMiwgMHg2MUYyLCAweDBCQzQsCisgICAgMHg2MUY0LCAweDEzM0MsIDB4NjFGNSwgMHg0NEY4LCAweDYxRjYsIDB4MTMzQSwgMHg2MUY3LCAweDEzMzAsCisgICAgMHg2MUY4LCAweDA3NTIsIDB4NjFGQSwgMHgxMzNCLCAweDYxRkMsIDB4MTMzRiwgMHg2MUZELCAweDEzM0UsCisgICAgMHg2MUZFLCAweDEzNDAsIDB4NjFGRiwgMHgxMzNELCAweDYyMDAsIDB4MTM0MSwgMHg2MjA0LCAweDRCQjMsCisgICAgMHg2MjA3LCAweDRCQjQsIDB4NjIwOCwgMHgxMzQyLCAweDYyMDksIDB4MTM0MywgMHg2MjBBLCAweDBFM0EsCisgICAgMHg2MjBDLCAweDEzNDUsIDB4NjIwRCwgMHgxMzQ0LCAweDYyMEUsIDB4MDk0OSwgMHg2MjEwLCAweDBBNTIsCisgICAgMHg2MjExLCAweDA1NjYsIDB4NjIxMiwgMHgwNTdDLCAweDYyMTMsIDB4MjExMSwgMHg2MjE0LCAweDEzNDYsCisgICAgMHg2MjE1LCAweDM4REQsIDB4NjIxNiwgMHgwNDgzLCAweDYyMUEsIDB4MEE3MCwgMHg2MjFCLCAweDEzNDcsCisgICAgMHg2MjFELCAweDFBNjQsIDB4NjIxRSwgMHgxMzQ4LCAweDYyMUYsIDB4MDczNywgMHg2MjIxLCAweDEzNDksCisgICAgMHg2MjIyLCAweDQxRTcsIDB4NjIyMywgMHg0NEZBLCAweDYyMjYsIDB4MEE5MywgMHg2MjI5LCAweDM4REUsCisgICAgMHg2MjJBLCAweDEzNEEsIDB4NjIyRSwgMHgxMzRCLCAweDYyMkYsIDB4MDY1NCwgMHg2MjMwLCAweDEzNEMsCisgICAgMHg2MjMxLCAweDRCQjUsIDB4NjIzMiwgMHgxMzRELCAweDYyMzMsIDB4MTM0RSwgMHg2MjM0LCAweDBCMzcsCisgICAgMHg2MjM2LCAweDM1QkQsIDB4NjIzOCwgMHgwNzgxLCAweDYyMzksIDB4NEJCNiwgMHg2MjNCLCAweDBFRUQsCisgICAgMHg2MjNELCAweDRCQjcsIDB4NjIzRSwgMHgzNDRFLCAweDYyM0YsIDB4MEU2QSwgMHg2MjQwLCAweDA5NzQsCisgICAgMHg2MjQxLCAweDEzNEYsIDB4NjI0MywgMHgzOERGLCAweDYyNDYsIDB4MzhFMCwgMHg2MjQ3LCAweDBBOTQsCisgICAgMHg2MjQ4LCAweDFCMUEsIDB4NjI0OSwgMHgwRDc2LCAweDYyNEIsIDB4MDkxNiwgMHg2MjRDLCAweDM4RTEsCisgICAgMHg2MjRELCAweDA4M0QsIDB4NjI0RSwgMHgxMzUwLCAweDYyNTEsIDB4MzhFMiwgMHg2MjUyLCAweDQ0RkIsCisgICAgMHg2MjUzLCAweDBCMjcsIDB4NjI1NSwgMHgwREY3LCAweDYyNTYsIDB4MzhFMywgMHg2MjU4LCAweDBCNTEsCisgICAgMHg2MjVBLCAweDQxRTgsIDB4NjI1QiwgMHgxMzUzLCAweDYyNUUsIDB4MTM1MSwgMHg2MjYwLCAweDEzNTQsCisgICAgMHg2MjYxLCAweDQ0RkMsIDB4NjI2MywgMHgxMzUyLCAweDYyNjQsIDB4NDRGRCwgMHg2MjY4LCAweDEzNTUsCisgICAgMHg2MjZELCAweDQ0RkYsIDB4NjI2RSwgMHgwRTAxLCAweDYyNkYsIDB4NDFFOSwgMHg2MjcxLCAweDA0N0IsCisgICAgMHg2MjczLCAweDQ1MDAsIDB4NjI3NiwgMHgwREQwLCAweDYyNzksIDB4MEQ3NywgMHg2MjdBLCAweDRCQjgsCisgICAgMHg2MjdCLCAweDQ0RkUsIDB4NjI3QywgMHgxMzU2LCAweDYyN0UsIDB4MTM1OSwgMHg2MjdGLCAweDA5OUQsCisgICAgMHg2MjgwLCAweDA2NTUsIDB4NjI4MiwgMHgxMzU3LCAweDYyODMsIDB4MTM1RSwgMHg2Mjg0LCAweDA5OUUsCisgICAgMHg2Mjg1LCAweDM1QzUsIDB4NjI4OSwgMHgxMzU4LCAweDYyOEEsIDB4MENGQSwgMHg2MjkwLCAweDRCQjksCisgICAgMHg2MjkxLCAweDBGNDgsIDB4NjI5MiwgMHgxMzVBLCAweDYyOTMsIDB4MTM1QiwgMHg2Mjk0LCAweDEzNUYsCisgICAgMHg2Mjk1LCAweDBDNjQsIDB4NjI5NiwgMHgxMzVDLCAweDYyOTcsIDB4MDdDNSwgMHg2Mjk4LCAweDBBODIsCisgICAgMHg2Mjk5LCAweDQ1MDEsIDB4NjI5QiwgMHgxMzZELCAweDYyOUMsIDB4MEQ0OCwgMHg2MjlFLCAweDBCNTIsCisgICAgMHg2MkE2LCAweDIxMTIsIDB4NjJBOCwgMHg0QkJBLCAweDYyQUIsIDB4MEQ3OCwgMHg2MkFDLCAweDEzQjIsCisgICAgMHg2MkIxLCAweDBFNEEsIDB4NjJCNSwgMHgwQzBELCAweDYyQjksIDB4MEVBMywgMHg2MkJCLCAweDEzNjIsCisgICAgMHg2MkJDLCAweDA1MjEsIDB4NjJCRCwgMHgwQkE4LCAweDYyQzIsIDB4MTM2QiwgMHg2MkM0LCAweDM4RTQsCisgICAgMHg2MkM1LCAweDBCNzIsIDB4NjJDNiwgMHgxMzY1LCAweDYyQzcsIDB4MTM2QywgMHg2MkM4LCAweDEzNjcsCisgICAgMHg2MkM5LCAweDEzNkUsIDB4NjJDQSwgMHgxMzZBLCAweDYyQ0MsIDB4MTM2OSwgMHg2MkNELCAweDBEMjUsCisgICAgMHg2MkNGLCAweDEzNjMsIDB4NjJEMCwgMHgwNTdELCAweDYyRDEsIDB4MTM2MSwgMHg2MkQyLCAweDA2OEIsCisgICAgMHg2MkQzLCAweDBCNTMsIDB4NjJENCwgMHgxMzVELCAweDYyRDUsIDB4NDUwMiwgMHg2MkQ2LCAweDQxRUEsCisgICAgMHg2MkQ3LCAweDEzNjAsIDB4NjJEOCwgMHgwN0M2LCAweDYyRDksIDB4MEE3RiwgMHg2MkRBLCAweDRCQkIsCisgICAgMHg2MkRCLCAweDA5OUYsIDB4NjJEQywgMHgxMzY4LCAweDYyREQsIDB4MEQwOCwgMHg2MkUwLCAweDA2OEMsCisgICAgMHg2MkUxLCAweDA1QTYsIDB4NjJFQywgMHgwNUM1LCAweDYyRUQsIDB4MDlFNywgMHg2MkVFLCAweDEzNzAsCisgICAgMHg2MkVGLCAweDEzNzUsIDB4NjJGMSwgMHgxMzcxLCAweDYyRjMsIDB4MDc1MywgMHg2MkY0LCAweDRCQkMsCisgICAgMHg2MkY1LCAweDEzNzYsIDB4NjJGNiwgMHgwODcwLCAweDYyRjcsIDB4MDdGQiwgMHg2MkZDLCAweDM4RTUsCisgICAgMHg2MkZELCAweDQ1MDQsIDB4NjJGRSwgMHgwOTMwLCAweDYyRkYsIDB4MTM2NCwgMHg2MzAxLCAweDA4Q0IsCisgICAgMHg2MzAyLCAweDEzNzMsIDB4NjMwMywgMHg0NTA1LCAweDYzMDcsIDB4MDhBNiwgMHg2MzA4LCAweDEzNzQsCisgICAgMHg2MzA5LCAweDA0ODgsIDB4NjMwQSwgMHgzOEU2LCAweDYzMEMsIDB4MTM2RiwgMHg2MzBELCAweDM4RTcsCisgICAgMHg2MzEwLCAweDQ1MDYsIDB4NjMxMSwgMHgwQkM1LCAweDYzMTYsIDB4NEJCRCwgMHg2MzE4LCAweDM4RTgsCisgICAgMHg2MzE5LCAweDA2OEQsIDB4NjMxQiwgMHgzNzM3LCAweDYzMUYsIDB4MDZBQywgMHg2MzI3LCAweDEzNzIsCisgICAgMHg2MzI4LCAweDA0NkIsIDB4NjMyQSwgMHg0QkJFLCAweDYzMkIsIDB4MDgzMywgMHg2MzJGLCAweDA5RkMsCisgICAgMHg2MzMyLCAweDQ1MDksIDB4NjMzNSwgMHg0NTBBLCAweDYzMzYsIDB4NEJCRiwgMHg2MzM5LCAweDM4RTksCisgICAgMHg2MzNBLCAweDBDMEUsIDB4NjMzQiwgMHg0NTBCLCAweDYzM0MsIDB4NDUwQywgMHg2MzNELCAweDBENjgsCisgICAgMHg2MzNFLCAweDEzNzgsIDB4NjMzRiwgMHgwQUUwLCAweDYzNDEsIDB4NDUwRCwgMHg2MzQyLCAweDM4RUEsCisgICAgMHg2MzQzLCAweDM4RUIsIDB4NjM0NCwgMHg0NTBFLCAweDYzNDYsIDB4NEJDMCwgMHg2MzQ5LCAweDBCMEEsCisgICAgMHg2MzRCLCAweDRCQzEsIDB4NjM0QywgMHgwODc5LCAweDYzNEQsIDB4MTM3OSwgMHg2MzRFLCAweDQ1MEYsCisgICAgMHg2MzRGLCAweDEzN0IsIDB4NjM1MCwgMHgxMzc3LCAweDYzNTMsIDB4NEJDMiwgMHg2MzU1LCAweDBFMzEsCisgICAgMHg2MzU3LCAweDBCRDksIDB4NjM1OSwgMHg0NTExLCAweDYzNUMsIDB4MEFERSwgMHg2MzY1LCAweDM4RUMsCisgICAgMHg2MzY3LCAweDBFNEIsIDB4NjM2OCwgMHgwOEZBLCAweDYzNjksIDB4MTM4NywgMHg2MzZCLCAweDEzODYsCisgICAgMHg2MzZDLCAweDQ1MTQsIDB4NjM2RSwgMHgwQTNFLCAweDYzNzEsIDB4NEJDMywgMHg2MzcyLCAweDA3NTQsCisgICAgMHg2Mzc0LCAweDM4RUQsIDB4NjM3NSwgMHg0QkM0LCAweDYzNzYsIDB4MTM4MCwgMHg2Mzc3LCAweDA5QTEsCisgICAgMHg2MzdBLCAweDBDQzAsIDB4NjM3QiwgMHgwQ0U3LCAweDYzN0MsIDB4NDFFQiwgMHg2MzdELCAweDM4RUUsCisgICAgMHg2MzdGLCAweDRCQzUsIDB4NjM4MCwgMHgxMzdFLCAweDYzODIsIDB4NEJDNiwgMHg2MzgzLCAweDBBREYsCisgICAgMHg2Mzg0LCAweDM4RUYsIDB4NjM4NywgMHgzOEYwLCAweDYzODgsIDB4MDkyNCwgMHg2Mzg5LCAweDEzODMsCisgICAgMHg2MzhBLCAweDRCQzcsIDB4NjM4QywgMHgwOUEwLCAweDYzOEUsIDB4MTM3RCwgMHg2MzhGLCAweDEzODIsCisgICAgMHg2MzkwLCAweDM4RjEsIDB4NjM5MiwgMHgwRDA5LCAweDYzOTQsIDB4NDUxNywgMHg2Mzk2LCAweDEzN0MsCisgICAgMHg2Mzk4LCAweDA2RjcsIDB4NjM5OSwgMHg0NTE1LCAweDYzOUIsIDB4MDVCQiwgMHg2MzlFLCAweDM4RjIsCisgICAgMHg2MzlGLCAweDEzODQsIDB4NjNBMCwgMHgwRjczLCAweDYzQTEsIDB4MDgzRSwgMHg2M0EyLCAweDBCNzMsCisgICAgMHg2M0EzLCAweDEzODEsIDB4NjNBNSwgMHgwQTgwLCAweDYzQTcsIDB4MDdDNywgMHg2M0E4LCAweDBBMkEsCisgICAgMHg2M0E5LCAweDA1MDgsIDB4NjNBQSwgMHgwQUJFLCAweDYzQUIsIDB4MTM3RiwgMHg2M0FDLCAweDA2NUYsCisgICAgMHg2M0FFLCAweDRCQzgsIDB4NjNBRiwgMHg0QkM5LCAweDYzQjIsIDB4MDcxRCwgMHg2M0I0LCAweDBCRUIsCisgICAgMHg2M0I1LCAweDEzODUsIDB4NjNCQiwgMHgwQUUxLCAweDYzQkQsIDB4NDUxOCwgMHg2M0JFLCAweDEzODgsCisgICAgMHg2M0MwLCAweDEzOEEsIDB4NjNDMywgMHgwQjE3LCAweDYzQzQsIDB4MTM5MCwgMHg2M0M2LCAweDEzOEIsCisgICAgMHg2M0M5LCAweDEzOEQsIDB4NjNDRiwgMHgwREIzLCAweDYzRDAsIDB4MEMwRiwgMHg2M0QxLCAweDM4RjMsCisgICAgMHg2M0QyLCAweDEzOEUsIDB4NjNENCwgMHg0NTE5LCAweDYzRDUsIDB4NDUxQSwgMHg2M0Q2LCAweDBGMTYsCisgICAgMHg2M0RBLCAweDBGMzIsIDB4NjNEQiwgMHgwNUY1LCAweDYzREMsIDB4MzhGNCwgMHg2M0UwLCAweDQ1MUIsCisgICAgMHg2M0UxLCAweDA0NzIsIDB4NjNFMywgMHgxMzhDLCAweDYzRTUsIDB4NDFFQywgMHg2M0U5LCAweDEzODksCisgICAgMHg2M0VBLCAweDRCQ0EsIDB4NjNFQiwgMHg0NTFDLCAweDYzRUMsIDB4NDUxRCwgMHg2M0VELCAweDM0MUMsCisgICAgMHg2M0VFLCAweDA2MzQsIDB4NjNGMiwgMHg0NTFFLCAweDYzRjQsIDB4MDUwOSwgMHg2M0Y1LCAweDIxMTMsCisgICAgMHg2M0Y2LCAweDEzOEYsIDB4NjNGNywgMHgzNjQ0LCAweDYzRjgsIDB4NEJDQiwgMHg2M0Y5LCAweDRCQ0MsCisgICAgMHg2M0ZBLCAweDBGMzMsIDB4NjQwNiwgMHgxMzkzLCAweDY0MDksIDB4MzhGNSwgMHg2NDBELCAweDBCMUIsCisgICAgMHg2NDBGLCAweDEzOUEsIDB4NjQxMCwgMHgzOEY2LCAweDY0MTIsIDB4NEJDRCwgMHg2NDEzLCAweDEzOTQsCisgICAgMHg2NDE0LCAweDFFMkMsIDB4NjQxNiwgMHgxMzkxLCAweDY0MTcsIDB4MTM5OCwgMHg2NDE4LCAweDRCQ0UsCisgICAgMHg2NDFDLCAweDEzN0EsIDB4NjQxRSwgMHg0NTFGLCAweDY0MjAsIDB4NEJDRiwgMHg2NDIyLCAweDM4RjcsCisgICAgMHg2NDI0LCAweDRCRDAsIDB4NjQyNSwgMHg0NTIwLCAweDY0MjYsIDB4MTM5NSwgMHg2NDI4LCAweDEzOTksCisgICAgMHg2NDI5LCAweDQ1MjEsIDB4NjQyQSwgMHg0QkQxLCAweDY0MkMsIDB4MEQ1NiwgMHg2NDJELCAweDBDNjUsCisgICAgMHg2NDJGLCAweDQ1MjIsIDB4NjQzNCwgMHgxMzkyLCAweDY0MzUsIDB4NEJEMiwgMHg2NDM2LCAweDEzOTYsCisgICAgMHg2NDNBLCAweDA3MUUsIDB4NjQzRCwgMHg0QkQzLCAweDY0M0UsIDB4MDg2MSwgMHg2NDNGLCAweDRCRDQsCisgICAgMHg2NDQyLCAweDBBODEsIDB4NjQ0RSwgMHgxMzlFLCAweDY0NTEsIDB4MUU0MywgMHg2NDUyLCAweDRCRDUsCisgICAgMHg2NDU0LCAweDM4RjgsIDB4NjQ1OCwgMHgwQzIwLCAweDY0NUEsIDB4NDUyMywgMHg2NDVCLCAweDM4RjksCisgICAgMHg2NDVELCAweDQ1MjQsIDB4NjQ1RiwgMHg0QkQ2LCAweDY0NjAsIDB4MjExNCwgMHg2NDY3LCAweDEzOUIsCisgICAgMHg2NDY5LCAweDBFOEUsIDB4NjQ2RCwgMHgzOEZBLCAweDY0NkYsIDB4MTM5QywgMHg2NDczLCAweDQ1MjUsCisgICAgMHg2NDc0LCAweDRCRDcsIDB4NjQ3NiwgMHgxMzlELCAweDY0NzgsIDB4MEVEQSwgMHg2NDc5LCAweDQxRUQsCisgICAgMHg2NDdBLCAweDBBNDYsIDB4NjQ3QiwgMHgzOEZCLCAweDY0N0QsIDB4NDUyNiwgMHg2NDgzLCAweDA3MzgsCisgICAgMHg2NDg3LCAweDQ1MjcsIDB4NjQ4OCwgMHgxM0E0LCAweDY0OTAsIDB4NEJEOCwgMHg2NDkxLCAweDQ1MjgsCisgICAgMHg2NDkyLCAweDA4ODMsIDB4NjQ5MywgMHgxM0ExLCAweDY0OTUsIDB4MTNBMCwgMHg2NDk4LCAweDRCRDksCisgICAgMHg2NDk5LCAweDRCREEsIDB4NjQ5QSwgMHgwQ0U4LCAweDY0OUQsIDB4MjExNSwgMHg2NDlFLCAweDBDOEQsCisgICAgMHg2NDlGLCAweDQ1MjksIDB4NjRBNCwgMHgwQzJCLCAweDY0QTUsIDB4MTNBMiwgMHg2NEE5LCAweDEzQTMsCisgICAgMHg2NEFCLCAweDBERTEsIDB4NjRBQywgMHg0QkRCLCAweDY0QUQsIDB4MENGQiwgMHg2NEFFLCAweDA4NzEsCisgICAgMHg2NEIwLCAweDBBOTUsIDB4NjRCMiwgMHgwRTdFLCAweDY0QjMsIDB4NEJEQywgMHg2NEI5LCAweDA1QTcsCisgICAgMHg2NEJCLCAweDEzQUEsIDB4NjRCQywgMHgxM0E1LCAweDY0QkUsIDB4MzhGQywgMHg2NEJGLCAweDM4RkQsCisgICAgMHg2NEMxLCAweDBGMzQsIDB4NjRDMiwgMHgxM0FDLCAweDY0QzQsIDB4NDFFRSwgMHg2NEM1LCAweDEzQTgsCisgICAgMHg2NEM3LCAweDEzQTksIDB4NjRDQSwgMHgzNDFELCAweDY0Q0IsIDB4NDUyQSwgMHg2NENDLCAweDQ1MkIsCisgICAgMHg2NENELCAweDBBRTIsIDB4NjRDRSwgMHgyMTE2LCAweDY0RDAsIDB4NDFFRiwgMHg2NEQyLCAweDEzQTcsCisgICAgMHg2NEQ0LCAweDEzNjYsIDB4NjRENSwgMHg0NTJDLCAweDY0RDcsIDB4NDUyRCwgMHg2NEQ4LCAweDEzQUIsCisgICAgMHg2NERBLCAweDEzQTYsIDB4NjRFMCwgMHgxM0IwLCAweDY0RTEsIDB4MTNCMSwgMHg2NEUyLCAweDBDMjEsCisgICAgMHg2NEUzLCAweDEzQjMsIDB4NjRFNCwgMHg0NTJGLCAweDY0RTUsIDB4MzhGRSwgMHg2NEU2LCAweDA4NzIsCisgICAgMHg2NEU3LCAweDEzQUUsIDB4NjRFQywgMHgwNjU2LCAweDY0RUQsIDB4NEJERCwgMHg2NEVGLCAweDEzQjQsCisgICAgMHg2NEYwLCAweDRCREUsIDB4NjRGMSwgMHgxM0FELCAweDY0RjIsIDB4MTNCOCwgMHg2NEY0LCAweDEzQjcsCisgICAgMHg2NEY2LCAweDEzQjYsIDB4NjRGNywgMHgzOEZGLCAweDY0RkEsIDB4MTNCOSwgMHg2NEZCLCAweDM5MDAsCisgICAgMHg2NEZELCAweDEzQkIsIDB4NjRGRSwgMHgwOUQ5LCAweDY0RkYsIDB4NDUzMCwgMHg2NTAwLCAweDEzQkEsCisgICAgMHg2NTA0LCAweDM5MDEsIDB4NjUwNSwgMHgxM0JFLCAweDY1MEYsIDB4NDUzMiwgMHg2NTE0LCAweDQ1MzMsCisgICAgMHg2NTE2LCAweDM5MDIsIDB4NjUxOCwgMHgxM0JDLCAweDY1MTksIDB4MzkwMywgMHg2NTFCLCAweDRCREYsCisgICAgMHg2NTFDLCAweDEzQkQsIDB4NjUxRCwgMHgxMzk3LCAweDY1MUUsIDB4NDUzNSwgMHg2NTFGLCAweDRCRTAsCisgICAgMHg2NTIyLCAweDFFOTcsIDB4NjUyMywgMHgxM0MwLCAweDY1MjQsIDB4MTNCRiwgMHg2NTI5LCAweDQxRjAsCisgICAgMHg2NTJBLCAweDEzOUYsIDB4NjUyQiwgMHgxM0MxLCAweDY1MkMsIDB4MTNCNSwgMHg2NTJFLCAweDRCRTEsCisgICAgMHg2NTJGLCAweDA4QTcsIDB4NjUzMiwgMHg0NTM2LCAweDY1MzQsIDB4MTNDMiwgMHg2NTM1LCAweDEzQzMsCisgICAgMHg2NTM2LCAweDEzQzUsIDB4NjUzNywgMHgxM0M0LCAweDY1MzgsIDB4MTNDNiwgMHg2NTM5LCAweDA1N0UsCisgICAgMHg2NTNCLCAweDA3QzgsIDB4NjUzRSwgMHgwRTRDLCAweDY1M0YsIDB4MEE1MywgMHg2NTQ0LCAweDQ1MzcsCisgICAgMHg2NTQ1LCAweDA3ODIsIDB4NjU0NywgMHgzOTA0LCAweDY1NDgsIDB4MTNDOCwgMHg2NTQ5LCAweDRCRTIsCisgICAgMHg2NTRELCAweDEzQ0IsIDB4NjU0RSwgMHgyMTE3LCAweDY1NEYsIDB4MERDNCwgMHg2NTUxLCAweDA2NzksCisgICAgMHg2NTU0LCAweDQ1MzgsIDB4NjU1NSwgMHgxM0NBLCAweDY1NTYsIDB4MTNDOSwgMHg2NTU3LCAweDBEMEEsCisgICAgMHg2NTU4LCAweDEzQ0MsIDB4NjU1OSwgMHgwNkFELCAweDY1NUQsIDB4MTNDRSwgMHg2NTVFLCAweDEzQ0QsCisgICAgMHg2NTYwLCAweDRCRTMsIDB4NjU2MiwgMHgwNUY2LCAweDY1NjMsIDB4MDg4NCwgMHg2NTY2LCAweDBDQjAsCisgICAgMHg2NTY3LCAweDM5MDUsIDB4NjU2QiwgMHg0NTM5LCAweDY1NkMsIDB4MDcxRiwgMHg2NTcwLCAweDBBM0EsCisgICAgMHg2NTcyLCAweDEzQ0YsIDB4NjU3NCwgMHgwQTU0LCAweDY1NzUsIDB4MEMyMiwgMHg2NTc3LCAweDBERDEsCisgICAgMHg2NTc4LCAweDEzRDAsIDB4NjU3QSwgMHg0NTNBLCAweDY1ODEsIDB4MzkwNiwgMHg2NTgyLCAweDEzRDEsCisgICAgMHg2NTgzLCAweDEzRDIsIDB4NjU4NCwgMHg0NTNCLCAweDY1ODUsIDB4MzkwNywgMHg2NTg3LCAweDBFMDgsCisgICAgMHg2NTg4LCAweDEyMEMsIDB4NjU4OSwgMHgwQTZBLCAweDY1OEEsIDB4NDUzQywgMHg2NThDLCAweDBEQkUsCisgICAgMHg2NThFLCAweDA4NDgsIDB4NjU5MCwgMHgwRDc5LCAweDY1OTEsIDB4MEQ1NywgMHg2NTkyLCAweDRCRTQsCisgICAgMHg2NTk1LCAweDRCRTUsIDB4NjU5NywgMHgwQzQ3LCAweDY1OTksIDB4MEY4OSwgMHg2NTlCLCAweDEzRDQsCisgICAgMHg2NTlDLCAweDA4RkMsIDB4NjU5RCwgMHg0MUYxLCAweDY1OUYsIDB4MTNENSwgMHg2NUExLCAweDA0N0EsCisgICAgMHg2NUE0LCAweDA2Q0MsIDB4NjVBNSwgMHgwQTcxLCAweDY1QTcsIDB4MEREMiwgMHg2NUFCLCAweDEzRDYsCisgICAgMHg2NUFDLCAweDA4OTAsIDB4NjVBRCwgMHgwQjg1LCAweDY1QUYsIDB4MDhBOSwgMHg2NUIwLCAweDA5RkQsCisgICAgMHg2NUIyLCAweDQ1M0QsIDB4NjVCNCwgMHg0QkU2LCAweDY1QjUsIDB4NDUzRSwgMHg2NUI3LCAweDEzRDcsCisgICAgMHg2NUI4LCAweDQ1M0YsIDB4NjVCOSwgMHgwRTRELCAweDY1QkMsIDB4MDUxOSwgMHg2NUJELCAweDA4QUEsCisgICAgMHg2NUJFLCAweDRCRTcsIDB4NjVCRiwgMHg0NTQwLCAweDY1QzEsIDB4MTNEQSwgMHg2NUMyLCAweDM5MDgsCisgICAgMHg2NUMzLCAweDEzRDgsIDB4NjVDNCwgMHgxM0RCLCAweDY1QzUsIDB4MEY4MSwgMHg2NUM2LCAweDEzRDksCisgICAgMHg2NUM4LCAweDRCRTgsIDB4NjVDOSwgMHg0NTQxLCAweDY1Q0IsIDB4MEE5RiwgMHg2NUNDLCAweDEzREMsCisgICAgMHg2NUNFLCAweDRCRTksIDB4NjVDRiwgMHgwQjEyLCAweDY1RDAsIDB4NEJFQSwgMHg2NUQyLCAweDEzREQsCisgICAgMHg2NUQ0LCAweDQ1NDIsIDB4NjVENywgMHgwNjM2LCAweDY1RDksIDB4MTNERiwgMHg2NURCLCAweDEzREUsCisgICAgMHg2NURGLCAweDRCRUIsIDB4NjVFMCwgMHgxM0UwLCAweDY1RTEsIDB4MTNFMSwgMHg2NUUyLCAweDA2MzcsCisgICAgMHg2NUUzLCAweDM1ODUsIDB4NjVFNSwgMHgwQ0Q0LCAweDY1RTYsIDB4MEI3NCwgMHg2NUU3LCAweDA2ODYsCisgICAgMHg2NUU4LCAweDA4QUIsIDB4NjVFOSwgMHgwQUUzLCAweDY1RUMsIDB4MDk2NiwgMHg2NUVELCAweDA0NzQsCisgICAgMHg2NUYwLCAweDM5MDksIDB4NjVGMSwgMHgxM0UyLCAweDY1RjIsIDB4MzkwQSwgMHg2NUY5LCAweDQ1NDQsCisgICAgMHg2NUZBLCAweDA1MjIsIDB4NjVGQiwgMHgxM0U2LCAweDY1RkMsIDB4NDU0NSwgMHg2NjAwLCAweDIxMTgsCisgICAgMHg2NjAyLCAweDA3QzksIDB4NjYwMywgMHgxM0U1LCAweDY2MDQsIDB4NDU0NiwgMHg2NjA2LCAweDA4MUIsCisgICAgMHg2NjA3LCAweDA5QTIsIDB4NjYwOCwgMHg0NTQ3LCAweDY2MDksIDB4MjExQSwgMHg2NjBBLCAweDEzRTQsCisgICAgMHg2NjBDLCAweDA5QTMsIDB4NjYwRSwgMHgwRUNDLCAweDY2MEYsIDB4MDgxQSwgMHg2NjEzLCAweDA0OUIsCisgICAgMHg2NjE0LCAweDBBNzIsIDB4NjYxNSwgMHgyMTE5LCAweDY2MUMsIDB4MTNFQiwgMHg2NjFFLCAweDRGNTAsCisgICAgMHg2NjFGLCAweDBBNTUsIDB4NjYyMCwgMHgwNEU5LCAweDY2MjEsIDB4NDU0OCwgMHg2NjIyLCAweDQxRjMsCisgICAgMHg2NjI0LCAweDIxMUQsIDB4NjYyNSwgMHgwOTVGLCAweDY2MjcsIDB4MEU5NCwgMHg2NjI4LCAweDA4NjIsCisgICAgMHg2NjJBLCAweDQ1NDksIDB4NjYyQiwgMHg0MUY0LCAweDY2MkMsIDB4MzkwQiwgMHg2NjJELCAweDA5QTQsCisgICAgMHg2NjJFLCAweDIxMUIsIDB4NjYyRiwgMHgwQTRCLCAweDY2MzAsIDB4NDFGNSwgMHg2NjMxLCAweDIwQUUsCisgICAgMHg2NjMzLCAweDQxRjYsIDB4NjYzNCwgMHgxM0VBLCAweDY2MzUsIDB4MTNFOCwgMHg2NjM2LCAweDEzRTksCisgICAgMHg2NjNBLCAweDQxRjIsIDB4NjYzQiwgMHgxRTAwLCAweDY2M0MsIDB4MEJBOSwgMHg2NjNGLCAweDE0MDksCisgICAgMHg2NjQxLCAweDEzRUYsIDB4NjY0MiwgMHgwOENDLCAweDY2NDMsIDB4MDdDQSwgMHg2NjQ0LCAweDEzRUQsCisgICAgMHg2NjQ1LCAweDQ1NEEsIDB4NjY0OCwgMHg0MUY3LCAweDY2NDksIDB4MTNFRSwgMHg2NjRCLCAweDA5RkUsCisgICAgMHg2NjRDLCAweDM5MEMsIDB4NjY0RSwgMHg0NTRDLCAweDY2NEYsIDB4MTNFQywgMHg2NjUxLCAweDQ1NEIsCisgICAgMHg2NjUyLCAweDA4N0QsIDB4NjY1NywgMHgyMTFGLCAweDY2NTksIDB4MjEyMCwgMHg2NjVBLCAweDM0NDEsCisgICAgMHg2NjVCLCAweDM5MEQsIDB4NjY1QywgMHgzOTBFLCAweDY2NUQsIDB4MTNGMSwgMHg2NjVFLCAweDEzRjAsCisgICAgMHg2NjVGLCAweDEzRjUsIDB4NjY2MSwgMHgzOTBGLCAweDY2NjIsIDB4MTNGNiwgMHg2NjYzLCAweDM3M0EsCisgICAgMHg2NjY0LCAweDEzRjIsIDB4NjY2NSwgMHgyMTFFLCAweDY2NjYsIDB4MDU4MCwgMHg2NjY3LCAweDEzRjMsCisgICAgMHg2NjY4LCAweDEzRjQsIDB4NjY2OSwgMHgwRDY5LCAweDY2NkEsIDB4NDU1MSwgMHg2NjZCLCAweDM5MTAsCisgICAgMHg2NjZDLCAweDQ1NTIsIDB4NjY2RCwgMHg0NTUzLCAweDY2NkUsIDB4MEREMywgMHg2NjZGLCAweDA3MjAsCisgICAgMHg2NjcwLCAweDEzRjcsIDB4NjY3MywgMHgyMTIyLCAweDY2NzQsIDB4MEE1NiwgMHg2Njc2LCAweDA5QTUsCisgICAgMHg2Njc3LCAweDQxRjksIDB4NjY3OCwgMHg0MUZBLCAweDY2N0EsIDB4MEI5MCwgMHg2NjdCLCAweDQ1NTQsCisgICAgMHg2NjdFLCAweDRCRUMsIDB4NjY4MCwgMHg0NTU1LCAweDY2ODEsIDB4MDZCRiwgMHg2NjgzLCAweDEzRjgsCisgICAgMHg2Njg0LCAweDEzRkMsIDB4NjY4NywgMHgwNTRCLCAweDY2ODgsIDB4MTNGOSwgMHg2Njg5LCAweDEzRkIsCisgICAgMHg2NjhCLCAweDRCRUQsIDB4NjY4QywgMHg0QkVFLCAweDY2OEQsIDB4NDFGQiwgMHg2NjhFLCAweDEzRkEsCisgICAgMHg2NjkwLCAweDQ1NTYsIDB4NjY5MSwgMHgwOTc1LCAweDY2OTIsIDB4NDU1NywgMHg2Njk2LCAweDBCODYsCisgICAgMHg2Njk3LCAweDA0ODksIDB4NjY5OCwgMHgxM0ZELCAweDY2OTksIDB4MjEyMywgMHg2NjlELCAweDEzRkUsCisgICAgMHg2NkEwLCAweDIxMjQsIDB4NjZBMiwgMHgwQkM2LCAweDY2QTQsIDB4MzkxMiwgMHg2NkE2LCAweDBGQjksCisgICAgMHg2NkFCLCAweDA4OTEsIDB4NjZBRCwgMHg0NTU5LCAweDY2QUUsIDB4MEUzQiwgMHg2NkIxLCAweDQ1NUEsCisgICAgMHg2NkIyLCAweDIxMjUsIDB4NjZCMywgMHg0QkVGLCAweDY2QjQsIDB4MEU2QiwgMHg2NkI1LCAweDQ1NUIsCisgICAgMHg2NkI4LCAweDE0MDUsIDB4NjZCOSwgMHgxNDAwLCAweDY2QkIsIDB4NDFGQywgMHg2NkJDLCAweDE0MDMsCisgICAgMHg2NkJFLCAweDE0MDIsIDB4NjZCRiwgMHgyMTI2LCAweDY2QzAsIDB4NEJGMCwgMHg2NkMxLCAweDEzRkYsCisgICAgMHg2NkM0LCAweDE0MDQsIDB4NjZDNiwgMHgzNDU1LCAweDY2QzcsIDB4MENCNiwgMHg2NkM4LCAweDM5MTMsCisgICAgMHg2NkM5LCAweDE0MDEsIDB4NjZDRiwgMHg0QkYxLCAweDY2RDYsIDB4MTQwNiwgMHg2NkQ5LCAweDA5NzYsCisgICAgMHg2NkRBLCAweDE0MDcsIDB4NjZEQiwgMHg0MUZELCAweDY2REMsIDB4MEYzNSwgMHg2NkRELCAweDBEMkUsCisgICAgMHg2NkUwLCAweDE0MDgsIDB4NjZFNiwgMHgxNDBBLCAweDY2RTgsIDB4NDFGRSwgMHg2NkU5LCAweDE0MEIsCisgICAgMHg2NkVDLCAweDM5MTQsIDB4NjZGMCwgMHgxNDBDLCAweDY2RjIsIDB4MDZDMiwgMHg2NkYzLCAweDA0RUEsCisgICAgMHg2NkY0LCAweDA3Q0IsIDB4NjZGNSwgMHgxNDBELCAweDY2RjcsIDB4MTQwRSwgMHg2NkY4LCAweDA5N0IsCisgICAgMHg2NkY5LCAweDBBRTQsIDB4NjZGQSwgMHgyMTI3LCAweDY2RkIsIDB4MjBCMSwgMHg2NkZDLCAweDEwRUQsCisgICAgMHg2NkZELCAweDBBQzAsIDB4NjZGRSwgMHgwQUJGLCAweDY2RkYsIDB4MEIzOCwgMHg2NzAwLCAweDA4MzcsCisgICAgMHg2NzAxLCAweDQ1NUYsIDB4NjcwMywgMHgxMDRCLCAweDY3MDUsIDB4MzkxNSwgMHg2NzA4LCAweDA3NDQsCisgICAgMHg2NzA5LCAweDBGMTcsIDB4NjcwQiwgMHgwRTRFLCAweDY3MEQsIDB4MERGMCwgMHg2NzBFLCAweDIxMjgsCisgICAgMHg2NzBGLCAweDE0MEYsIDB4NjcxMiwgMHg0NTYwLCAweDY3MTMsIDB4MzkxNiwgMHg2NzE0LCAweDA4NjMsCisgICAgMHg2NzE1LCAweDBCREIsIDB4NjcxNiwgMHgxNDEwLCAweDY3MTcsIDB4MEZENSwgMHg2NzE5LCAweDQ1NjIsCisgICAgMHg2NzFCLCAweDBFNkMsIDB4NjcxRCwgMHgwQkM3LCAweDY3MUUsIDB4MTQxMSwgMHg2NzFGLCAweDA2MzgsCisgICAgMHg2NzI1LCAweDRCRjIsIDB4NjcyNiwgMHgxNDEyLCAweDY3MjcsIDB4MTQxMywgMHg2NzI4LCAweDBFRTYsCisgICAgMHg2NzJBLCAweDBFQjAsIDB4NjcyQiwgMHgwRUE0LCAweDY3MkMsIDB4MEU4QSwgMHg2NzJELCAweDA4NzMsCisgICAgMHg2NzJFLCAweDE0MTUsIDB4NjczMSwgMHgwOTE3LCAweDY3MzMsIDB4MzkxNywgMHg2NzM0LCAweDBFN0YsCisgICAgMHg2NzM1LCAweDRCRjMsIDB4NjczNiwgMHgxNDE3LCAweDY3MzcsIDB4MTQxQSwgMHg2NzM4LCAweDE0MTksCisgICAgMHg2NzNBLCAweDA2MzUsIDB4NjczRCwgMHgwNjdBLCAweDY3M0YsIDB4MTQxNiwgMHg2NzQxLCAweDE0MTgsCisgICAgMHg2NzQzLCAweDM1QjcsIDB4Njc0NiwgMHgxNDFCLCAweDY3NDcsIDB4NDFGRiwgMHg2NzQ4LCAweDM5MTgsCisgICAgMHg2NzQ5LCAweDBBM0YsIDB4Njc0QywgMHgzOTE5LCAweDY3NEQsIDB4NDU2NSwgMHg2NzRFLCAweDBGNjUsCisgICAgMHg2NzRGLCAweDA0OEQsIDB4Njc1MCwgMHgwODUwLCAweDY3NTEsIDB4MEIxQywgMHg2NzUzLCAweDA5MDksCisgICAgMHg2NzU0LCAweDQ1NjYsIDB4Njc1NSwgMHg0QkY0LCAweDY3NTYsIDB4MDlEQiwgMHg2NzU5LCAweDE0MUUsCisgICAgMHg2NzVDLCAweDBDNDgsIDB4Njc1RCwgMHg0NTY3LCAweDY3NUUsIDB4MTQxQywgMHg2NzVGLCAweDBCMEIsCisgICAgMHg2NzYwLCAweDE0MUQsIDB4Njc2MSwgMHgwOURBLCAweDY3NjIsIDB4MEVFOSwgMHg2NzYzLCAweDE0MUYsCisgICAgMHg2NzY0LCAweDE0MjAsIDB4Njc2NSwgMHgwRjUyLCAweDY3NjYsIDB4MjEyQSwgMHg2NzZBLCAweDE0MjUsCisgICAgMHg2NzZELCAweDA3Q0MsIDB4Njc2RSwgMHgzNTcxLCAweDY3NkYsIDB4MEQwQiwgMHg2NzcwLCAweDE0MjIsCisgICAgMHg2NzcxLCAweDBDNjYsIDB4Njc3MiwgMHgxM0UzLCAweDY3NzMsIDB4MTNFNywgMHg2Nzc0LCAweDQ1NkIsCisgICAgMHg2Nzc1LCAweDA2NjksIDB4Njc3NiwgMHgzOTFBLCAweDY3NzcsIDB4MENGRCwgMHg2NzdCLCAweDM5MUIsCisgICAgMHg2NzdDLCAweDE0MjQsIDB4Njc3RSwgMHgwOUE2LCAweDY3N0YsIDB4MEQ1OCwgMHg2NzgwLCAweDRCRjUsCisgICAgMHg2NzgxLCAweDQyMDAsIDB4Njc4NSwgMHgxNDJBLCAweDY3ODcsIDB4MEQ4RSwgMHg2Nzg5LCAweDE0MjEsCisgICAgMHg2NzhCLCAweDE0MjcsIDB4Njc4QywgMHgxNDI2LCAweDY3OEYsIDB4NEJGNiwgMHg2NzkwLCAweDBBNzMsCisgICAgMHg2NzkxLCAweDRCRjcsIDB4Njc5MiwgMHg0NTZELCAweDY3OTMsIDB4NDIwMSwgMHg2Nzk1LCAweDBFOUIsCisgICAgMHg2Nzk3LCAweDBGOUIsIDB4Njc5OCwgMHg0MjAyLCAweDY3OUEsIDB4MEU5NSwgMHg2NzlCLCAweDQyMDMsCisgICAgMHg2NzlDLCAweDA1NEMsIDB4Njc5RCwgMHgwOEFDLCAweDY3QTAsIDB4MEZFRSwgMHg2N0ExLCAweDE0MjksCisgICAgMHg2N0EyLCAweDBBM0IsIDB4NjdBNCwgMHg0QkY4LCAweDY3QTYsIDB4MTQyOCwgMHg2N0E5LCAweDE0MjMsCisgICAgMHg2N0FGLCAweDA3ODMsIDB4NjdCMCwgMHgzOTFDLCAweDY3QjEsIDB4NEJGOSwgMHg2N0IyLCAweDM5MUQsCisgICAgMHg2N0IzLCAweDE0MkYsIDB4NjdCNCwgMHgxNDJELCAweDY3QjUsIDB4NEJGQSwgMHg2N0I2LCAweDA1NEQsCisgICAgMHg2N0I3LCAweDE0MkIsIDB4NjdCOCwgMHgxNDMxLCAweDY3QjksIDB4MTQzNywgMHg2N0JCLCAweDIxMkIsCisgICAgMHg2N0JFLCAweDRCRkIsIDB4NjdDMCwgMHgyMTJELCAweDY3QzEsIDB4MEIyOCwgMHg2N0MzLCAweDQ1NzEsCisgICAgMHg2N0M0LCAweDBFMTEsIDB4NjdDNiwgMHgxNDM5LCAweDY3QzgsIDB4NDU3MiwgMHg2N0NBLCAweDBEOTQsCisgICAgMHg2N0NFLCAweDE0MzgsIDB4NjdDRiwgMHgwRDI2LCAweDY3RDAsIDB4MEU2RCwgMHg2N0QxLCAweDA1RjcsCisgICAgMHg2N0QyLCAweDQ1NzMsIDB4NjdEMywgMHgwQTlCLCAweDY3RDQsIDB4MDk0QSwgMHg2N0Q3LCAweDM5MUYsCisgICAgMHg2N0Q4LCAweDBCRUYsIDB4NjdEOSwgMHgzOTIwLCAweDY3REEsIDB4MEYxOCwgMHg2N0RCLCAweDQ1NzQsCisgICAgMHg2N0RELCAweDE0MzQsIDB4NjdERSwgMHgxNDMzLCAweDY3RTIsIDB4MTQzNSwgMHg2N0U0LCAweDE0MzIsCisgICAgMHg2N0U3LCAweDE0M0EsIDB4NjdFOSwgMHgxNDMwLCAweDY3RUMsIDB4MTQyRSwgMHg2N0VFLCAweDE0MzYsCisgICAgMHg2N0VGLCAweDE0MkMsIDB4NjdGMCwgMHgzOTIxLCAweDY3RjEsIDB4MEJBQSwgMHg2N0YzLCAweDBGMDQsCisgICAgMHg2N0Y0LCAweDA4RjIsIDB4NjdGNSwgMHgwODY0LCAweDY3RjcsIDB4NDU3NSwgMHg2N0Y5LCAweDM5MUUsCisgICAgMHg2N0ZBLCAweDFFOUEsIDB4NjdGQiwgMHgwODJBLCAweDY3RkMsIDB4NDIwNCwgMHg2N0ZFLCAweDBFOUQsCisgICAgMHg2N0ZGLCAweDA1OUYsIDB4NjgwMSwgMHgzNkYyLCAweDY4MDIsIDB4MEJFQSwgMHg2ODAzLCAweDBDQTIsCisgICAgMHg2ODA0LCAweDA0RUIsIDB4NjgwNSwgMHgxRTA3LCAweDY4MTAsIDB4NDU3MCwgMHg2ODEzLCAweDBBOTYsCisgICAgMHg2ODE2LCAweDBBNTgsIDB4NjgxNywgMHgwNzAwLCAweDY4MTgsIDB4NDU3OSwgMHg2ODFELCAweDQyMDUsCisgICAgMHg2ODFFLCAweDE0M0MsIDB4NjgxRiwgMHg0NTdBLCAweDY4MjEsIDB4MDdDRCwgMHg2ODIyLCAweDA1REEsCisgICAgMHg2ODI4LCAweDRCRkMsIDB4NjgyOSwgMHgxNDNFLCAweDY4MkEsIDB4MDVEMiwgMHg2ODJCLCAweDE0NDQsCisgICAgMHg2ODJDLCAweDM5MjIsIDB4NjgyRCwgMHg0NTdCLCAweDY4MzAsIDB4MzkyMywgMHg2ODMxLCAweDM5MjQsCisgICAgMHg2ODMyLCAweDE0NDEsIDB4NjgzMywgMHg0NTdELCAweDY4MzQsIDB4MEE5NywgMHg2ODM4LCAweDA1QTksCisgICAgMHg2ODM5LCAweDA4MUMsIDB4NjgzQiwgMHg0NTdFLCAweDY4M0MsIDB4MDVBOCwgMHg2ODNELCAweDA4M0YsCisgICAgMHg2ODNFLCAweDQ1N0YsIDB4Njg0MCwgMHgxNDNGLCAweDY4NDEsIDB4MDczQiwgMHg2ODQyLCAweDA3MjEsCisgICAgMHg2ODQzLCAweDBDNjcsIDB4Njg0NCwgMHgyMTJGLCAweDY4NDUsIDB4NDU4MCwgMHg2ODQ2LCAweDE0M0QsCisgICAgMHg2ODQ4LCAweDA0OEEsIDB4Njg0OSwgMHg0NTgxLCAweDY4NEMsIDB4NDU4MiwgMHg2ODRELCAweDE0NDAsCisgICAgMHg2ODRFLCAweDE0NDIsIDB4Njg1MCwgMHgwNkM1LCAweDY4NTEsIDB4MDcwMiwgMHg2ODUyLCAweDIxMkMsCisgICAgMHg2ODUzLCAweDA1RjgsIDB4Njg1NCwgMHgwNjY1LCAweDY4NTUsIDB4NDU4MywgMHg2ODU3LCAweDQ1ODQsCisgICAgMHg2ODU5LCAweDE0NDUsIDB4Njg1QiwgMHgzOTI1LCAweDY4NUMsIDB4MDg2OSwgMHg2ODVELCAweDBFOUYsCisgICAgMHg2ODVGLCAweDA4ODUsIDB4Njg2MywgMHgxNDQ2LCAweDY4NjcsIDB4MERBMiwgMHg2ODZCLCAweDQ1ODYsCisgICAgMHg2ODZFLCAweDQ1ODcsIDB4Njg3MiwgMHgzOTI2LCAweDY4NzQsIDB4MTQ1MiwgMHg2ODc1LCAweDM5MjcsCisgICAgMHg2ODc2LCAweDA1MzMsIDB4Njg3NywgMHgxNDQ3LCAweDY4N0EsIDB4MzkyOCwgMHg2ODdDLCAweDQ1ODgsCisgICAgMHg2ODdFLCAweDE0NTgsIDB4Njg3RiwgMHgxNDQ4LCAweDY4ODEsIDB4MEY4QSwgMHg2ODgyLCAweDQ1ODksCisgICAgMHg2ODgzLCAweDE0NEYsIDB4Njg4NCwgMHgzOTI5LCAweDY4ODUsIDB4MEQxNSwgMHg2ODg2LCAweDRCRkQsCisgICAgMHg2ODhELCAweDE0NTcsIDB4Njg4RSwgMHgxRTlDLCAweDY4OEYsIDB4MTQ0QSwgMHg2ODkwLCAweDQ1OEEsCisgICAgMHg2ODkzLCAweDA0NzgsIDB4Njg5NCwgMHgxNDRDLCAweDY4OTYsIDB4NDU4QiwgMHg2ODk3LCAweDA3Q0UsCisgICAgMHg2ODk4LCAweDQ1OEQsIDB4Njg5OSwgMHg0NThFLCAweDY4OUEsIDB4NDU4RiwgMHg2ODlCLCAweDE0NEUsCisgICAgMHg2ODlDLCAweDQ1OTAsIDB4Njg5RCwgMHgxNDRELCAweDY4OUYsIDB4MTQ0OSwgMHg2OEEwLCAweDE0NTQsCisgICAgMHg2OEEyLCAweDA5QTcsIDB4NjhBMywgMHg0MjA2LCAweDY4QTUsIDB4MzkyQSwgMHg2OEE2LCAweDExQkUsCisgICAgMHg2OEE3LCAweDA3OUMsIDB4NjhBOCwgMHgwRjY2LCAweDY4QUEsIDB4NDU5MSwgMHg2OEFCLCAweDQ1OTIsCisgICAgMHg2OEFELCAweDE0NEIsIDB4NjhBRiwgMHgwQzEwLCAweDY4QjAsIDB4MDU4MSwgMHg2OEIxLCAweDA4MUQsCisgICAgMHg2OEIyLCAweDM5MkIsIDB4NjhCMywgMHgxNDQzLCAweDY4QjQsIDB4NDU5MywgMHg2OEI1LCAweDE0NTMsCisgICAgMHg2OEI2LCAweDA1QkYsIDB4NjhCOSwgMHgxNDUxLCAweDY4QkEsIDB4MTQ1NSwgMHg2OEJCLCAweDQ1OTQsCisgICAgMHg2OEJDLCAweDBDNjgsIDB4NjhDMywgMHg0NTk4LCAweDY4QzQsIDB4MDYzQSwgMHg2OEM1LCAweDQ1OTksCisgICAgMHg2OEM2LCAweDE0NzMsIDB4NjhDOCwgMHgyMEFGLCAweDY4QzksIDB4MEVENSwgMHg2OENBLCAweDE0NUEsCisgICAgMHg2OENCLCAweDA2MzksIDB4NjhDQywgMHg0NTlBLCAweDY4Q0QsIDB4MTQ2MSwgMHg2OENGLCAweDIxMzAsCisgICAgMHg2OEQwLCAweDM5MkMsIDB4NjhEMiwgMHgwRTZFLCAweDY4RDQsIDB4MTQ2MiwgMHg2OEQ1LCAweDE0NjQsCisgICAgMHg2OEQ2LCAweDM5MkQsIDB4NjhENywgMHgxNDY4LCAweDY4RDgsIDB4MTQ1QywgMHg2OEQ5LCAweDQ1OUIsCisgICAgMHg2OERBLCAweDBCNjgsIDB4NjhERiwgMHgwQzY5LCAweDY4RTAsIDB4MTQ2QywgMHg2OEUxLCAweDE0NUYsCisgICAgMHg2OEUzLCAweDE0NjksIDB4NjhFNCwgMHg0NTlDLCAweDY4RTUsIDB4NDU5RCwgMHg2OEU3LCAweDE0NjMsCisgICAgMHg2OEU4LCAweDM5MkUsIDB4NjhFQiwgMHg0QkZFLCAweDY4RUMsIDB4NDU5RSwgMHg2OEVELCAweDM5MkYsCisgICAgMHg2OEVFLCAweDA5RkYsIDB4NjhFRiwgMHgxNDZELCAweDY4RjAsIDB4MzkzMCwgMHg2OEYxLCAweDM5MzEsCisgICAgMHg2OEYyLCAweDBBNTcsIDB4NjhGNSwgMHg0QkZGLCAweDY4RjcsIDB4NDU5RiwgMHg2OEY5LCAweDE0NkIsCisgICAgMHg2OEZBLCAweDA1RjksIDB4NjhGQiwgMHg0NTk1LCAweDY4RkMsIDB4MzkzMiwgMHg2OTAwLCAweDBGRjYsCisgICAgMHg2OTAxLCAweDE0NTksIDB4NjkwMywgMHg0NUEwLCAweDY5MDQsIDB4MTQ2NywgMHg2OTA1LCAweDA0OUMsCisgICAgMHg2OTA3LCAweDQ1QTEsIDB4NjkwOCwgMHgxNDVCLCAweDY5MEEsIDB4NDIwNywgMHg2OTBCLCAweDBFQzYsCisgICAgMHg2OTBDLCAweDE0NjAsIDB4NjkwRCwgMHgwOUU4LCAweDY5MEUsIDB4MEJFMywgMHg2OTBGLCAweDE0NTYsCisgICAgMHg2OTExLCAweDM5MzMsIDB4NjkxMiwgMHgxNDY2LCAweDY5MTMsIDB4MzkzNCwgMHg2OTE3LCAweDRDMDAsCisgICAgMHg2OTE5LCAweDBBNDAsIDB4NjkxQSwgMHgxNDcwLCAweDY5MUIsIDB4MDVDRiwgMHg2OTFDLCAweDA3NTUsCisgICAgMHg2OTIxLCAweDE0NzIsIDB4NjkyMiwgMHgxNDVELCAweDY5MjMsIDB4MTQ3MSwgMHg2OTI1LCAweDE0NkEsCisgICAgMHg2OTI2LCAweDE0NUUsIDB4NjkyOCwgMHgxNDZFLCAweDY5MkEsIDB4MTQ2RiwgMHg2OTMwLCAweDE0ODAsCisgICAgMHg2OTMzLCAweDRDMDEsIDB4NjkzNCwgMHgwQ0E2LCAweDY5MzUsIDB4MzkzNSwgMHg2OTM2LCAweDE0NjUsCisgICAgMHg2OTM4LCAweDRDMDIsIDB4NjkzOSwgMHgxNDdDLCAweDY5M0IsIDB4MzkzNiwgMHg2OTNELCAweDE0N0UsCisgICAgMHg2OTNGLCAweDBCRjQsIDB4Njk0MiwgMHg0MjBBLCAweDY5NDYsIDB4NDVBNSwgMHg2OTQ5LCAweDQyMDgsCisgICAgMHg2OTRBLCAweDBGMzYsIDB4Njk1MywgMHgwREU4LCAweDY5NTQsIDB4MTQ3OSwgMHg2OTU1LCAweDBCMkEsCisgICAgMHg2OTU3LCAweDM5MzcsIDB4Njk1OSwgMHgxNDdGLCAweDY5NUEsIDB4MEFDMSwgMHg2OTVCLCAweDRDMDMsCisgICAgMHg2OTVDLCAweDE0NzYsIDB4Njk1RCwgMHgxNDgzLCAweDY5NUUsIDB4MTQ4MiwgMHg2OTYwLCAweDBDQzcsCisgICAgMHg2OTYxLCAweDE0ODEsIDB4Njk2MiwgMHgwQ0MyLCAweDY5NjMsIDB4MzkzOCwgMHg2OTY0LCAweDQyMEIsCisgICAgMHg2OTY1LCAweDRDMDQsIDB4Njk2OCwgMHgyMTMyLCAweDY5NjksIDB4NDVBNiwgMHg2OTZBLCAweDE0ODUsCisgICAgMHg2OTZCLCAweDE0NzgsIDB4Njk2QywgMHg0NUE3LCAweDY5NkQsIDB4MDZDMCwgMHg2OTZFLCAweDE0N0IsCisgICAgMHg2OTZGLCAweDA5NjcsIDB4Njk3MiwgMHgzOTM5LCAweDY5NzMsIDB4MEQxNiwgMHg2OTc0LCAweDE0N0QsCisgICAgMHg2OTc1LCAweDA2QzMsIDB4Njk3NywgMHgxNDc1LCAweDY5NzgsIDB4MTQ3NywgMHg2OTc5LCAweDE0NzQsCisgICAgMHg2OTdBLCAweDQ1QTgsIDB4Njk3QywgMHgwRkQ2LCAweDY5N0QsIDB4MDVCOCwgMHg2OTdFLCAweDE0N0EsCisgICAgMHg2OTdGLCAweDM5M0EsIDB4Njk4MCwgMHgzOTNCLCAweDY5ODEsIDB4MTQ4NCwgMHg2OTgyLCAweDA1OTMsCisgICAgMHg2OTg2LCAweDM3NDAsIDB4Njk4QSwgMHgwODU3LCAweDY5OEUsIDB4MDRGRiwgMHg2OTkxLCAweDE0OTUsCisgICAgMHg2OTkyLCAweDQ1QTksIDB4Njk5NCwgMHgwRkQ3LCAweDY5OTUsIDB4MTQ5OCwgMHg2OTk2LCAweDQ1QUIsCisgICAgMHg2OTk4LCAweDIxMzQsIDB4Njk5QiwgMHgwQTAwLCAweDY5OUMsIDB4MTQ5NywgMHg2OUEwLCAweDE0OTYsCisgICAgMHg2OUE1LCAweDQyMEMsIDB4NjlBNiwgMHgzOTNDLCAweDY5QTcsIDB4MTQ5MywgMHg2OUE4LCAweDRDMDUsCisgICAgMHg2OUFCLCAweDRDMDYsIDB4NjlBRCwgMHgzOTNELCAweDY5QUUsIDB4MTQ4NywgMHg2OUFGLCAweDRDMDcsCisgICAgMHg2OUIwLCAweDQ1QUMsIDB4NjlCMSwgMHgxNEE0LCAweDY5QjIsIDB4MTQ4NiwgMHg2OUI0LCAweDE0OTksCisgICAgMHg2OUI3LCAweDM5M0UsIDB4NjlCQSwgMHg0NUFELCAweDY5QkIsIDB4MTQ5MSwgMHg2OUJDLCAweDQ1QUUsCisgICAgMHg2OUJFLCAweDE0OEMsIDB4NjlCRiwgMHgxNDg5LCAweDY5QzAsIDB4NDVBRiwgMHg2OUMxLCAweDE0OEEsCisgICAgMHg2OUMzLCAweDE0OTIsIDB4NjlDNywgMHgxRDMzLCAweDY5Q0EsIDB4MTQ4RiwgMHg2OUNCLCAweDA3Q0YsCisgICAgMHg2OUNDLCAweDBCRTQsIDB4NjlDRCwgMHgwQUU2LCAweDY5Q0UsIDB4MTQ4RCwgMHg2OUNGLCAweDQyMEQsCisgICAgMHg2OUQwLCAweDE0ODgsIDB4NjlEMSwgMHg0NUIwLCAweDY5RDMsIDB4MTQ4QiwgMHg2OUQ2LCAweDM5M0YsCisgICAgMHg2OUQ3LCAweDM5NDAsIDB4NjlEOCwgMHgwRjM3LCAweDY5RDksIDB4MEU5OCwgMHg2OURELCAweDE0OTAsCisgICAgMHg2OURFLCAweDE0OUEsIDB4NjlFMiwgMHgyMTM1LCAweDY5RTMsIDB4NDVCNCwgMHg2OUU1LCAweDRDMDgsCisgICAgMHg2OUU3LCAweDE0QTIsIDB4NjlFOCwgMHgxNDlCLCAweDY5RTksIDB4NDIxMCwgMHg2OUVBLCAweDM0MTEsCisgICAgMHg2OUVCLCAweDE0QTgsIDB4NjlFRCwgMHgxNEE2LCAweDY5RUUsIDB4NDVCNSwgMHg2OUVGLCAweDQ1QjYsCisgICAgMHg2OUYxLCAweDRDMDksIDB4NjlGMiwgMHgxNEExLCAweDY5RjMsIDB4NDVCNywgMHg2OUY0LCAweDQ1QjksCisgICAgMHg2OUY1LCAweDQyMTEsIDB4NjlGNiwgMHgzNzNGLCAweDY5RjksIDB4MTRBMCwgMHg2OUZCLCAweDBCRUMsCisgICAgMHg2OUZELCAweDBBRTcsIDB4NjlGRSwgMHg0NUJBLCAweDY5RkYsIDB4MTQ5RSwgMHg2QTAxLCAweDM5NDEsCisgICAgMHg2QTAyLCAweDE0OUMsIDB4NkEwNSwgMHgxNEEzLCAweDZBMEEsIDB4MTRBOSwgMHg2QTBCLCAweDBEODksCisgICAgMHg2QTBDLCAweDE0QUYsIDB4NkEwRiwgMHgzOTQyLCAweDZBMTEsIDB4NDVCQiwgMHg2QTEyLCAweDE0QUEsCisgICAgMHg2QTEzLCAweDE0QUQsIDB4NkExNCwgMHgxNEE3LCAweDZBMTUsIDB4Mzk0MywgMHg2QTE3LCAweDBCQjIsCisgICAgMHg2QTE5LCAweDBEQUEsIDB4NkExQSwgMHg0NUJDLCAweDZBMUIsIDB4MTQ5RCwgMHg2QTFELCAweDQ1QkQsCisgICAgMHg2QTFFLCAweDE0QTUsIDB4NkExRiwgMHgwOUE4LCAweDZBMjEsIDB4MEVEQiwgMHg2QTIyLCAweDE0QjksCisgICAgMHg2QTIzLCAweDE0QUMsIDB4NkEyOCwgMHgzOTQ0LCAweDZBMjksIDB4MDc1NiwgMHg2QTJBLCAweDA1MjMsCisgICAgMHg2QTJCLCAweDA1QkQsIDB4NkEyRSwgMHgxNDk0LCAweDZBMzAsIDB4MjEzNiwgMHg2QTMyLCAweDQ1QkYsCisgICAgMHg2QTMzLCAweDQ1QzAsIDB4NkEzNCwgMHgzOTQ1LCAweDZBMzUsIDB4MDlBOSwgMHg2QTM2LCAweDE0QjEsCisgICAgMHg2QTM4LCAweDE0QjgsIDB4NkEzOSwgMHgwOTI1LCAweDZBM0EsIDB4MDVEMCwgMHg2QTNCLCAweDQyMTMsCisgICAgMHg2QTNELCAweDBCNkMsIDB4NkEzRSwgMHgzOTQ2LCAweDZBM0YsIDB4NDVDMSwgMHg2QTQ0LCAweDE0QUUsCisgICAgMHg2QTQ1LCAweDM5NDcsIDB4NkE0NiwgMHgyMTM4LCAweDZBNDcsIDB4MTRCMywgMHg2QTQ4LCAweDE0QjcsCisgICAgMHg2QTQ5LCAweDQ1QzIsIDB4NkE0QSwgMHg0QzBBLCAweDZBNEIsIDB4MDZBRSwgMHg2QTRFLCAweDQ1QzQsCisgICAgMHg2QTUwLCAweDM5NDgsIDB4NkE1MSwgMHgzOTQ5LCAweDZBNTIsIDB4NDVDNSwgMHg2QTU0LCAweDNDMzQsCisgICAgMHg2QTU1LCAweDRDMEIsIDB4NkE1NiwgMHgzOTRBLCAweDZBNTgsIDB4MDY2NiwgMHg2QTU5LCAweDE0QjUsCisgICAgMHg2QTVCLCAweDM5NEIsIDB4NkE1RiwgMHgwNjNCLCAweDZBNjEsIDB4MENBMywgMHg2QTYyLCAweDE0QjQsCisgICAgMHg2QTY0LCAweDQ1QzYsIDB4NkE2NiwgMHgxNEI2LCAweDZBNjcsIDB4NEMwQywgMHg2QTZCLCAweDIxMzcsCisgICAgMHg2QTcxLCAweDRDMEQsIDB4NkE3MiwgMHgxNEIwLCAweDZBNzMsIDB4MjEzOSwgMHg2QTc4LCAweDE0QjIsCisgICAgMHg2QTdBLCAweDQ1QzMsIDB4NkE3RSwgMHgyMTNBLCAweDZBN0YsIDB4MDVCRSwgMHg2QTgwLCAweDBCODcsCisgICAgMHg2QTgzLCAweDM5NEMsIDB4NkE4NCwgMHgxNEJELCAweDZBODksIDB4Mzk0RCwgMHg2QThCLCAweDQ1QzgsCisgICAgMHg2QThELCAweDE0QkIsIDB4NkE4RSwgMHgwNzlELCAweDZBOTAsIDB4MTRCQSwgMHg2QTkxLCAweDM5NEUsCisgICAgMHg2QTk0LCAweDQyMTUsIDB4NkE5NywgMHgxNEMwLCAweDZBOUMsIDB4MTQzQiwgMHg2QTlELCAweDM5NEYsCisgICAgMHg2QTlFLCAweDM5NTAsIDB4NkE5RiwgMHgzOTUxLCAweDZBQTAsIDB4MTRCQywgMHg2QUExLCAweDQ1Q0EsCisgICAgMHg2QUEyLCAweDE0QkUsIDB4NkFBMywgMHgxNEJGLCAweDZBQTUsIDB4NDIxNiwgMHg2QUFBLCAweDE0Q0IsCisgICAgMHg2QUFCLCAweDQ1Q0MsIDB4NkFBQywgMHgxNEM3LCAweDZBQUUsIDB4MTQ1MCwgMHg2QUFGLCAweDRDMEUsCisgICAgMHg2QUIzLCAweDE0QzYsIDB4NkFCOCwgMHgxNEM1LCAweDZBQkIsIDB4MTRDMiwgMHg2QUJELCAweDQ1Q0QsCisgICAgMHg2QUMxLCAweDE0QUIsIDB4NkFDMiwgMHgxNEM0LCAweDZBQzMsIDB4MTRDMywgMHg2QUM2LCAweDQ1Q0UsCisgICAgMHg2QUM4LCAweDRDMEYsIDB4NkFDOSwgMHg0QzEwLCAweDZBRDAsIDB4NDVEMCwgMHg2QUQxLCAweDE0QzksCisgICAgMHg2QUQzLCAweDBGQ0MsIDB4NkFENCwgMHg0NUNGLCAweDZBREEsIDB4MTRDQywgMHg2QURCLCAweDA2RjMsCisgICAgMHg2QURDLCAweDM5NTIsIDB4NkFERCwgMHg0NUQxLCAweDZBREUsIDB4MTRDOCwgMHg2QURGLCAweDE0Q0EsCisgICAgMHg2QUUyLCAweDIxM0IsIDB4NkFFNCwgMHgyMTNDLCAweDZBRTcsIDB4Mzk1MywgMHg2QUU4LCAweDBEM0IsCisgICAgMHg2QUVBLCAweDE0Q0QsIDB4NkFFQywgMHgzOTU0LCAweDZBRjEsIDB4NDVENCwgMHg2QUYyLCAweDQ1RDUsCisgICAgMHg2QUYzLCAweDQ1RDYsIDB4NkFGOCwgMHg0RUI4LCAweDZBRkEsIDB4MTREMSwgMHg2QUZCLCAweDE0Q0UsCisgICAgMHg2QUZELCAweDQ1RDcsIDB4NkIwMywgMHg0QzExLCAweDZCMDQsIDB4MEY1RCwgMHg2QjA1LCAweDE0Q0YsCisgICAgMHg2QjBBLCAweDE0OUYsIDB4NkIwQiwgMHg0NUQ5LCAweDZCMEYsIDB4NDVEQSwgMHg2QjEwLCAweDQ1REIsCisgICAgMHg2QjExLCAweDQ1REMsIDB4NkIxMiwgMHgxNEQyLCAweDZCMTYsIDB4MTREMywgMHg2QjE3LCAweDQ1REUsCisgICAgMHg2QjFCLCAweDQyMTgsIDB4NkIxRCwgMHgwNEQ3LCAweDZCMUUsIDB4Mzk1NSwgMHg2QjFGLCAweDE0RDUsCisgICAgMHg2QjIwLCAweDA3M0QsIDB4NkIyMSwgMHgwOENELCAweDZCMjMsIDB4MDZDRCwgMHg2QjI0LCAweDM5NTYsCisgICAgMHg2QjI3LCAweDA1MjQsIDB4NkIyQywgMHg0MjE5LCAweDZCMkYsIDB4NDVFMCwgMHg2QjMyLCAweDBGNDksCisgICAgMHg2QjM1LCAweDM5NTcsIDB4NkIzNywgMHgxNEQ3LCAweDZCMzgsIDB4MTRENiwgMHg2QjM5LCAweDE0RDksCisgICAgMHg2QjNBLCAweDA2NTcsIDB4NkIzQiwgMHg0QzEyLCAweDZCM0QsIDB4MDZDRSwgMHg2QjNFLCAweDA1RkEsCisgICAgMHg2QjNGLCAweDRDMTMsIDB4NkI0MywgMHgxNERDLCAweDZCNDYsIDB4Mzk1OCwgMHg2QjQ3LCAweDE0REIsCisgICAgMHg2QjQ5LCAweDE0REQsIDB4NkI0QSwgMHg0NUUxLCAweDZCNEMsIDB4MDU0RSwgMHg2QjRFLCAweDBCNzUsCisgICAgMHg2QjUwLCAweDE0REUsIDB4NkI1MywgMHgwNUZCLCAweDZCNTQsIDB4MTRFMCwgMHg2QjU2LCAweDM5NTksCisgICAgMHg2QjU4LCAweDQ1RTIsIDB4NkI1OSwgMHgxNERGLCAweDZCNUIsIDB4MTRFMSwgMHg2QjVGLCAweDE0RTIsCisgICAgMHg2QjYwLCAweDM5NUEsIDB4NkI2MSwgMHgxNEUzLCAweDZCNjIsIDB4MDhBRCwgMHg2QjYzLCAweDBBNTksCisgICAgMHg2QjY0LCAweDA4MTEsIDB4NkI2NSwgMHgzNDRBLCAweDZCNjYsIDB4MERFMiwgMHg2QjY3LCAweDQyMUEsCisgICAgMHg2QjY5LCAweDBFMzIsIDB4NkI2QSwgMHgwRkVBLCAweDZCNkMsIDB4NDVFMywgMHg2QjZGLCAweDA4QzMsCisgICAgMHg2QjcyLCAweDM1RDksIDB4NkI3MywgMHgwODQwLCAweDZCNzQsIDB4MEZCQSwgMHg2Qjc1LCAweDQ1RTQsCisgICAgMHg2Qjc3LCAweDM0NTYsIDB4NkI3OCwgMHgxNEU0LCAweDZCNzksIDB4MTRFNSwgMHg2QjdBLCAweDQ1RTUsCisgICAgMHg2QjdCLCAweDA4QUUsIDB4NkI3RCwgMHg0QzE0LCAweDZCN0UsIDB4NEMxNSwgMHg2QjdGLCAweDE0RTYsCisgICAgMHg2QjgwLCAweDE0RTcsIDB4NkI4MSwgMHg0NUU2LCAweDZCODIsIDB4Mzk1QiwgMHg2QjgzLCAweDE0RTksCisgICAgMHg2Qjg0LCAweDE0RTgsIDB4NkI4NiwgMHgwRTg2LCAweDZCODksIDB4MDk2OCwgMHg2QjhBLCAweDA5MTgsCisgICAgMHg2QjhCLCAweDA4OTIsIDB4NkI4RCwgMHgxNEVBLCAweDZCOTUsIDB4MTRFQywgMHg2Qjk2LCAweDA5RTksCisgICAgMHg2Qjk4LCAweDE0RUIsIDB4NkI5QiwgMHg0NUU3LCAweDZCOUUsIDB4MTRFRCwgMHg2QkE0LCAweDE0RUUsCisgICAgMHg2QkE5LCAweDQyMUIsIDB4NkJBQSwgMHgxNEVGLCAweDZCQUIsIDB4MTRGMCwgMHg2QkFELCAweDQyMUMsCisgICAgMHg2QkFFLCAweDQ1RTgsIDB4NkJBRiwgMHgxNEYxLCAweDZCQjAsIDB4NEMxNiwgMHg2QkIxLCAweDE0RjMsCisgICAgMHg2QkIyLCAweDE0RjIsIDB4NkJCMywgMHgxNEY0LCAweDZCQjQsIDB4MDUyNSwgMHg2QkI1LCAweDBCODgsCisgICAgMHg2QkI3LCAweDE0RjUsIDB4NkJCQSwgMHgwODc0LCAweDZCQkIsIDB4MDVBQSwgMHg2QkJDLCAweDE0RjYsCisgICAgMHg2QkJELCAweDQ1RUEsIDB4NkJCRSwgMHgzOTVDLCAweDZCQkYsIDB4MEMzQywgMHg2QkMwLCAweDExOUQsCisgICAgMHg2QkM1LCAweDA2M0QsIDB4NkJDNiwgMHgxNEY3LCAweDZCQzcsIDB4NDVFQiwgMHg2QkM4LCAweDQ1RUMsCisgICAgMHg2QkM5LCAweDQ1RUQsIDB4NkJDQiwgMHgxNEY4LCAweDZCQ0MsIDB4Mzc0NCwgMHg2QkNELCAweDBFM0MsCisgICAgMHg2QkNFLCAweDBFOTYsIDB4NkJDRiwgMHgzNDRDLCAweDZCRDIsIDB4MEM5RiwgMHg2QkQzLCAweDE0RjksCisgICAgMHg2QkQ0LCAweDBEN0EsIDB4NkJENiwgMHgyMTNELCAweDZCRDcsIDB4NDIxRCwgMHg2QkQ4LCAweDBEOEYsCisgICAgMHg2QkRBLCAweDQ1RUUsIDB4NkJEQiwgMHgwRURGLCAweDZCREYsIDB4MTRGQSwgMHg2QkUxLCAweDM5NUQsCisgICAgMHg2QkU2LCAweDQ1RUYsIDB4NkJFNywgMHg0NUYwLCAweDZCRUIsIDB4MTRGQywgMHg2QkVDLCAweDE0RkIsCisgICAgMHg2QkVFLCAweDQ1RjEsIDB4NkJFRiwgMHgxNEZFLCAweDZCRjEsIDB4Mzk1RSwgMHg2QkYzLCAweDE0RkQsCisgICAgMHg2QkY3LCAweDRDMTcsIDB4NkJGOSwgMHg0QzE4LCAweDZCRkYsIDB4NDIxRSwgMHg2QzAyLCAweDQ1RjIsCisgICAgMHg2QzA0LCAweDRDMTksIDB4NkMwNSwgMHg0MjFGLCAweDZDMDgsIDB4MTUwMCwgMHg2QzA5LCAweDRDMUEsCisgICAgMHg2QzBBLCAweDQ1RjMsIDB4NkMwRCwgMHg0QzFCLCAweDZDMEUsIDB4NDVGNCwgMHg2QzBGLCAweDA4QUYsCisgICAgMHg2QzEwLCAweDM5NUYsIDB4NkMxMSwgMHgwRUJELCAweDZDMTMsIDB4MTUwMSwgMHg2QzE0LCAweDE1MDIsCisgICAgMHg2QzE3LCAweDA2M0UsIDB4NkMxQiwgMHgxNTAzLCAweDZDMjMsIDB4MTUwNSwgMHg2QzI0LCAweDE1MDQsCisgICAgMHg2QzJDLCAweDRDMUMsIDB4NkMzMywgMHgzOTYwLCAweDZDMzQsIDB4MEEyQiwgMHg2QzM1LCAweDM5NjEsCisgICAgMHg2QzM2LCAweDQ1RjUsIDB4NkMzNywgMHgwREFCLCAweDZDMzgsIDB4MDRFQywgMHg2QzNBLCAweDRGNTUsCisgICAgMHg2QzNFLCAweDBENTksIDB4NkMzRiwgMHgyMTNFLCAweDZDNDAsIDB4MEMxMSwgMHg2QzQxLCAweDA5NEIsCisgICAgMHg2QzQyLCAweDA2N0IsIDB4NkM0QSwgMHg0QzFELCAweDZDNEQsIDB4NDVGNywgMHg2QzRFLCAweDBENUEsCisgICAgMHg2QzUwLCAweDA4REEsIDB4NkM1MiwgMHg0QzFFLCAweDZDNTQsIDB4NEMxRiwgMHg2QzU1LCAweDE1MDcsCisgICAgMHg2QzU3LCAweDA1RkMsIDB4NkM1OSwgMHgzOTYzLCAweDZDNUEsIDB4MDUxQSwgMHg2QzVCLCAweDQ1RjgsCisgICAgMHg2QzVDLCAweDIxM0YsIDB4NkM1RCwgMHgwQ0NBLCAweDZDNUUsIDB4MTUwNiwgMHg2QzVGLCAweDA3RDAsCisgICAgMHg2QzYwLCAweDBCOTEsIDB4NkM2MiwgMHgxNTA4LCAweDZDNjcsIDB4NDYwQSwgMHg2QzY4LCAweDE1MTAsCisgICAgMHg2QzZBLCAweDE1MDksIDB4NkM2RCwgMHg0NUY5LCAweDZDNkYsIDB4MjE0MSwgMHg2QzcwLCAweDBCMjEsCisgICAgMHg2QzcyLCAweDA2N0MsIDB4NkM3MywgMHgxNTExLCAweDZDNzQsIDB4NDIyMCwgMHg2Qzc2LCAweDM5NjQsCisgICAgMHg2Qzc5LCAweDRDMjAsIDB4NkM3QSwgMHgwNzNFLCAweDZDN0IsIDB4Mzk2NSwgMHg2QzdELCAweDA2M0YsCisgICAgMHg2QzdFLCAweDE1MEYsIDB4NkM4MSwgMHgxNTBELCAweDZDODIsIDB4MTUwQSwgMHg2QzgzLCAweDBGNEEsCisgICAgMHg2Qzg0LCAweDQ1RkEsIDB4NkM4NSwgMHgzOTY2LCAweDZDODYsIDB4MjE0MCwgMHg2Qzg4LCAweDBCREMsCisgICAgMHg2Qzg5LCAweDQ1RkIsIDB4NkM4QywgMHgwQ0IxLCAweDZDOEQsIDB4MTUwQiwgMHg2QzkwLCAweDE1MTMsCisgICAgMHg2QzkyLCAweDE1MTIsIDB4NkM5MywgMHgwNkY5LCAweDZDOTQsIDB4NDVGRCwgMHg2Qzk1LCAweDM5NjcsCisgICAgMHg2Qzk2LCAweDA1MkQsIDB4NkM5NywgMHg0NUZFLCAweDZDOTgsIDB4NDIyMSwgMHg2Qzk5LCAweDA4MkIsCisgICAgMHg2QzlBLCAweDE1MEMsIDB4NkM5QiwgMHgxNTBFLCAweDZDOUMsIDB4Mzk2OCwgMHg2Q0ExLCAweDBFODUsCisgICAgMHg2Q0EyLCAweDBCNTQsIDB4NkNBQSwgMHgzNzQ5LCAweDZDQUIsIDB4MEVBNSwgMHg2Q0FDLCAweDRDMjEsCisgICAgMHg2Q0FELCAweDQ1RkYsIDB4NkNBRSwgMHgxNTFCLCAweDZDQjEsIDB4MTUxQywgMHg2Q0IzLCAweDA1NEYsCisgICAgMHg2Q0I0LCAweDRDMjIsIDB4NkNCOCwgMHgwREY4LCAweDZDQjksIDB4MEYwOSwgMHg2Q0JBLCAweDE1MUUsCisgICAgMHg2Q0JCLCAweDA4Q0YsIDB4NkNCQywgMHgwOUFBLCAweDZDQkQsIDB4MTUxNywgMHg2Q0JFLCAweDE1MUQsCisgICAgMHg2Q0JGLCAweDA1MEEsIDB4NkNDMSwgMHgwNkFGLCAweDZDQzIsIDB4NDYwMCwgMHg2Q0M0LCAweDE1MTQsCisgICAgMHg2Q0M1LCAweDE1MTksIDB4NkNDNiwgMHg0MjIzLCAweDZDQzksIDB4MEE5OCwgMHg2Q0NBLCAweDBEMjcsCisgICAgMHg2Q0NDLCAweDBEN0IsIDB4NkNEMCwgMHgzOTY5LCAweDZDRDIsIDB4NEMyMywgMHg2Q0QzLCAweDE1MTYsCisgICAgMHg2Q0Q0LCAweDM5NkEsIDB4NkNENSwgMHgwRTRGLCAweDZDRDYsIDB4Mzk2QiwgMHg2Q0Q3LCAweDE1MTgsCisgICAgMHg2Q0Q5LCAweDE1MjEsIDB4NkNEQSwgMHgyMTQyLCAweDZDREIsIDB4MTUxRiwgMHg2Q0RDLCAweDQ2MDIsCisgICAgMHg2Q0RELCAweDE1MUEsIDB4NkNFMCwgMHgzOTZDLCAweDZDRTEsIDB4MEU1MCwgMHg2Q0UyLCAweDBDRkUsCisgICAgMHg2Q0UzLCAweDA2N0QsIDB4NkNFNSwgMHgwQzFGLCAweDZDRTgsIDB4MEJBQiwgMHg2Q0U5LCAweDQ2MDMsCisgICAgMHg2Q0VBLCAweDE1MjIsIDB4NkNFQiwgMHgzOTZELCAweDZDRUMsIDB4Mzk2RSwgMHg2Q0VELCAweDQ2MDQsCisgICAgMHg2Q0VFLCAweDM5NkYsIDB4NkNFRiwgMHgxNTIwLCAweDZDRjAsIDB4MEIzOSwgMHg2Q0YxLCAweDE1MTUsCisgICAgMHg2Q0YzLCAweDA0RUQsIDB4NkNGQiwgMHg0MjIyLCAweDZEMDAsIDB4NDYwNiwgMHg2RDAxLCAweDNDMzUsCisgICAgMHg2RDA0LCAweDIxNDMsIDB4NkQwQSwgMHgzOTcwLCAweDZEMEIsIDB4MEYzOCwgMHg2RDBDLCAweDE1MkQsCisgICAgMHg2RDBFLCAweDM5NzEsIDB4NkQxMSwgMHgzOTcyLCAweDZEMTIsIDB4MTUyQywgMHg2RDE3LCAweDBBOUEsCisgICAgMHg2RDE5LCAweDE1MjksIDB4NkQxQiwgMHgwRjU2LCAweDZEMUUsIDB4MEM4RSwgMHg2RDFGLCAweDE1MjMsCisgICAgMHg2RDI0LCAweDQ2MDcsIDB4NkQyNSwgMHgwQkUxLCAweDZEMjYsIDB4NDYwOCwgMHg2RDI3LCAweDQ2MDksCisgICAgMHg2RDI5LCAweDA0RUUsIDB4NkQyQSwgMHgwN0QxLCAweDZEMkIsIDB4MTUyNiwgMHg2RDJFLCAweDM5NzMsCisgICAgMHg2RDJGLCAweDQ2MEIsIDB4NkQzMSwgMHg0MjI0LCAweDZEMzIsIDB4MDkzMSwgMHg2RDMzLCAweDE1MkIsCisgICAgMHg2RDM0LCAweDQ2MUUsIDB4NkQzNSwgMHgxNTJBLCAweDZEMzYsIDB4MTUyNSwgMHg2RDM4LCAweDE1MjgsCisgICAgMHg2RDM5LCAweDQyMjUsIDB4NkQzQiwgMHgwNUM2LCAweDZEM0MsIDB4NDYwQywgMHg2RDNELCAweDE1MjcsCisgICAgMHg2RDNFLCAweDBDRkYsIDB4NkQzRiwgMHg0MjI2LCAweDZENDEsIDB4MEY3NiwgMHg2RDQ0LCAweDA5REMsCisgICAgMHg2RDQ1LCAweDBBOTksIDB4NkQ1NywgMHgzOTc0LCAweDZENTgsIDB4NDIyNywgMHg2RDU5LCAweDE1MzMsCisgICAgMHg2RDVBLCAweDE1MzEsIDB4NkQ1QiwgMHg0NjBELCAweDZENUMsIDB4MERCRiwgMHg2RDVFLCAweDM5NzUsCisgICAgMHg2RDYwLCAweDQ2MEUsIDB4NkQ2MSwgMHg0QzI0LCAweDZENjMsIDB4MTUyRSwgMHg2RDY0LCAweDE1MzAsCisgICAgMHg2RDY1LCAweDM5NzYsIDB4NkQ2NiwgMHgwNERDLCAweDZENjksIDB4MDdEMiwgMHg2RDZBLCAweDBGRDgsCisgICAgMHg2RDZDLCAweDA1OUIsIDB4NkQ2RSwgMHgwREQ0LCAweDZENkYsIDB4MjE0NSwgMHg2RDcwLCAweDQ2MEYsCisgICAgMHg2RDc0LCAweDBGNEIsIDB4NkQ3NywgMHgwNTgyLCAweDZENzgsIDB4MEEwMSwgMHg2RDc5LCAweDE1MzIsCisgICAgMHg2RDdDLCAweDRDMjUsIDB4NkQ4MCwgMHg0NjEwLCAweDZEODEsIDB4NDYxMSwgMHg2RDgyLCAweDM5NzcsCisgICAgMHg2RDg1LCAweDE1MzcsIDB4NkQ4NywgMHgyMTQ0LCAweDZEODgsIDB4MDlBQiwgMHg2RDg5LCAweDM0MkEsCisgICAgMHg2RDhBLCAweDQ2MTIsIDB4NkQ4QywgMHgwRjFBLCAweDZEOEQsIDB4NDYxMywgMHg2RDhFLCAweDE1MzQsCisgICAgMHg2RDkxLCAweDQ2MTQsIDB4NkQ5MywgMHgxNTJGLCAweDZEOTQsIDB4NDIyOCwgMHg2RDk1LCAweDE1MzUsCisgICAgMHg2RDk2LCAweDIxNDYsIDB4NkQ5OCwgMHg0NjE1LCAweDZEOTksIDB4MEZBNiwgMHg2RDlCLCAweDBDNkQsCisgICAgMHg2RDlDLCAweDBDOUEsIDB4NkRBQSwgMHg0MjI5LCAweDZEQUIsIDB4NDYxQSwgMHg2REFDLCAweDIxNDcsCisgICAgMHg2REFFLCAweDQ2MUIsIDB4NkRBRiwgMHgwNTk0LCAweDZEQjIsIDB4MDRGNywgMHg2REI0LCAweDQ2MUMsCisgICAgMHg2REI1LCAweDE1M0IsIDB4NkRCOCwgMHgxNTNFLCAweDZEQjksIDB4NEMyNiwgMHg2REJDLCAweDBGOEIsCisgICAgMHg2REJGLCAweDM5NzgsIDB4NkRDMCwgMHgwRjRFLCAweDZEQzIsIDB4NDYxRCwgMHg2REM0LCAweDM5NzksCisgICAgMHg2REM1LCAweDE1NDUsIDB4NkRDNiwgMHgxNTNGLCAweDZEQzcsIDB4MTUzQywgMHg2REM4LCAweDQ2MUYsCisgICAgMHg2RENBLCAweDM5N0EsIDB4NkRDQiwgMHgwRjlDLCAweDZEQ0MsIDB4MTU0MiwgMHg2RENFLCAweDQ2MjAsCisgICAgMHg2RENGLCAweDIxNDgsIDB4NkREMCwgMHgzQzM2LCAweDZERDEsIDB4MDk1NCwgMHg2REQyLCAweDE1NDQsCisgICAgMHg2REQ1LCAweDE1NDksIDB4NkRENiwgMHgzOTdCLCAweDZERDgsIDB4MEM2QiwgMHg2REQ5LCAweDE1NDcsCisgICAgMHg2RERBLCAweDM0NTMsIDB4NkREQiwgMHg0MjJBLCAweDZEREQsIDB4NDIyQiwgMHg2RERFLCAweDE1NDEsCisgICAgMHg2RERGLCAweDQ2MjEsIDB4NkRFMSwgMHgwQjc2LCAweDZERTQsIDB4MTU0OCwgMHg2REU2LCAweDE1M0QsCisgICAgMHg2REU4LCAweDE1NDMsIDB4NkRFOSwgMHgzOTdDLCAweDZERUEsIDB4MTU0QSwgMHg2REVCLCAweDA0QzAsCisgICAgMHg2REVDLCAweDE1NDAsIDB4NkRFRSwgMHgxNTRCLCAweDZERjAsIDB4NEMyNywgMHg2REYxLCAweDBBMDIsCisgICAgMHg2REYyLCAweDIxNEEsIDB4NkRGMywgMHgwOTY5LCAweDZERjUsIDB4MERGNSwgMHg2REY2LCAweDQ2MjIsCisgICAgMHg2REY3LCAweDA4MUUsIDB4NkRGOCwgMHgyMTQ5LCAweDZERjksIDB4MTUzOCwgMHg2REZBLCAweDE1NDYsCisgICAgMHg2REZCLCAweDBDMzQsIDB4NkRGQywgMHgyMTRCLCAweDZFMDUsIDB4MEE1QSwgMHg2RTA3LCAweDA1QzcsCisgICAgMHg2RTA4LCAweDA4NDEsIDB4NkUwOSwgMHgwOUFDLCAweDZFMEEsIDB4MTUzQSwgMHg2RTBCLCAweDA5NEMsCisgICAgMHg2RTEzLCAweDA3MjIsIDB4NkUxNSwgMHgxNTM5LCAweDZFMTcsIDB4Mzc0NiwgMHg2RTE5LCAweDE1NEYsCisgICAgMHg2RTFBLCAweDA5NzcsIDB4NkUxQiwgMHgwNzZFLCAweDZFMUQsIDB4MTU1RSwgMHg2RTFFLCAweDQ2MjQsCisgICAgMHg2RTFGLCAweDE1NTgsIDB4NkUyMCwgMHgwNjhFLCAweDZFMjEsIDB4MEM0OSwgMHg2RTIyLCAweDM5N0QsCisgICAgMHg2RTIzLCAweDE1NTMsIDB4NkUyNCwgMHgxNTVDLCAweDZFMjUsIDB4MDQ3MywgMHg2RTI2LCAweDA0RDQsCisgICAgMHg2RTI3LCAweDIxNEUsIDB4NkUyOSwgMHgwNTM5LCAweDZFMkIsIDB4MTU1NSwgMHg2RTJDLCAweDBCMEMsCisgICAgMHg2RTJELCAweDE1NEMsIDB4NkUyRSwgMHgxNTRFLCAweDZFMkYsIDB4MDdEMywgMHg2RTMyLCAweDQ2MjYsCisgICAgMHg2RTM0LCAweDM0MTIsIDB4NkUzNiwgMHg0NjIzLCAweDZFMzgsIDB4MTU1RiwgMHg2RTM5LCAweDIxNEMsCisgICAgMHg2RTNBLCAweDE1NUEsIDB4NkUzQywgMHgyMTRGLCAweDZFM0UsIDB4MTU1MiwgMHg2RTQyLCAweDNDMzcsCisgICAgMHg2RTQzLCAweDE1NTksIDB4NkU0NCwgMHg0MjJDLCAweDZFNDUsIDB4NEMyOCwgMHg2RTQ4LCAweDQ2MjcsCisgICAgMHg2RTQ5LCAweDQ2MjgsIDB4NkU0QSwgMHgwRUI3LCAweDZFNEIsIDB4NDYyOSwgMHg2RTRDLCAweDQ2MkEsCisgICAgMHg2RTRELCAweDE1NTcsIDB4NkU0RSwgMHgxNTVCLCAweDZFNEYsIDB4NDYyQiwgMHg2RTUxLCAweDM5N0UsCisgICAgMHg2RTUzLCAweDQ2MkMsIDB4NkU1NCwgMHg0NjJELCAweDZFNTYsIDB4MDc4NCwgMHg2RTU3LCAweDQ2MkUsCisgICAgMHg2RTU4LCAweDA5QUQsIDB4NkU1QiwgMHgwQjc3LCAweDZFNUMsIDB4MjE0RCwgMHg2RTVFLCAweDQyMkQsCisgICAgMHg2RTVGLCAweDE1NTEsIDB4NkU2MywgMHg0NjJGLCAweDZFNjcsIDB4MEYxOSwgMHg2RTZCLCAweDE1NTQsCisgICAgMHg2RTZFLCAweDE1NEQsIDB4NkU2RiwgMHgwQzZDLCAweDZFNzIsIDB4MTU1MCwgMHg2RTczLCAweDRDMjksCisgICAgMHg2RTc2LCAweDE1NTYsIDB4NkU3QiwgMHg0QzJBLCAweDZFN0QsIDB4NEMyQiwgMHg2RTdFLCAweDBGRjcsCisgICAgMHg2RTdGLCAweDA4RUEsIDB4NkU4MCwgMHgwRUFDLCAweDZFODIsIDB4MTU2MCwgMHg2RTg5LCAweDRDMkMsCisgICAgMHg2RThDLCAweDBENDIsIDB4NkU4RiwgMHgxNTZDLCAweDZFOTAsIDB4MDc2RiwgMHg2RTkzLCAweDQ2MzEsCisgICAgMHg2RTk2LCAweDA5NkEsIDB4NkU5OCwgMHgxNTYyLCAweDZFOUMsIDB4MEY3NywgMHg2RTlELCAweDA3RDQsCisgICAgMHg2RTlGLCAweDE1NkYsIDB4NkVBMiwgMHgwNEIyLCAweDZFQTUsIDB4MTU2RCwgMHg2RUE3LCAweDQ2MzIsCisgICAgMHg2RUFBLCAweDE1NjEsIDB4NkVBQiwgMHgzNDBDLCAweDZFQUYsIDB4MTU2NywgMHg2RUIxLCAweDQyMkUsCisgICAgMHg2RUIyLCAweDE1NjksIDB4NkVCNCwgMHg0NjMzLCAweDZFQjYsIDB4MEYzOSwgMHg2RUI3LCAweDE1NjQsCisgICAgMHg2RUJBLCAweDBDMjgsIDB4NkVCQywgMHg0QzJELCAweDZFQkQsIDB4MTU2NiwgMHg2RUJGLCAweDIxNTAsCisgICAgMHg2RUMxLCAweDQyMkYsIDB4NkVDMiwgMHgxNTZFLCAweDZFQzMsIDB4NDYzNCwgMHg2RUM0LCAweDE1NjgsCisgICAgMHg2RUM1LCAweDBFRDMsIDB4NkVDNywgMHgzOTdGLCAweDZFQzksIDB4MTU2MywgMHg2RUNBLCAweDM5ODAsCisgICAgMHg2RUNCLCAweDA4Q0UsIDB4NkVDQywgMHgxNTdCLCAweDZFQ0UsIDB4Mzk4MSwgMHg2RUQxLCAweDA1QzgsCisgICAgMHg2RUQzLCAweDE1NjUsIDB4NkVENCwgMHgxNTZBLCAweDZFRDUsIDB4MTU2QiwgMHg2RUQ5LCAweDNDMzgsCisgICAgMHg2RURBLCAweDRDMkUsIDB4NkVEQiwgMHg0QzJGLCAweDZFREQsIDB4MEI0QywgMHg2RURFLCAweDBCM0EsCisgICAgMHg2RUU2LCAweDNDMjQsIDB4NkVFQiwgMHg0NjM2LCAweDZFRUMsIDB4MTU3MywgMHg2RUVGLCAweDE1NzksCisgICAgMHg2RUYyLCAweDE1NzcsIDB4NkVGNCwgMHgwQzIzLCAweDZFRjcsIDB4MTU3RSwgMHg2RUY4LCAweDE1NzQsCisgICAgMHg2RUY5LCAweDQ2MzcsIDB4NkVGQiwgMHg0NjM4LCAweDZFRkQsIDB4Mzk4MiwgMHg2RUZFLCAweDE1NzUsCisgICAgMHg2RUZGLCAweDE1NUQsIDB4NkYwMSwgMHgwNjkzLCAweDZGMDIsIDB4MERBQywgMHg2RjA2LCAweDA4RUIsCisgICAgMHg2RjA5LCAweDA4MDksIDB4NkYwQSwgMHg0NjM5LCAweDZGMEMsIDB4NDYzQSwgMHg2RjBGLCAweDBGRDksCisgICAgMHg2RjEwLCAweDQyMzAsIDB4NkYxMSwgMHgxNTcxLCAweDZGMTMsIDB4MTU3RCwgMHg2RjE0LCAweDA1MEIsCisgICAgMHg2RjE1LCAweDBBRTgsIDB4NkYxOCwgMHg0NjNCLCAweDZGMUEsIDB4Mzk4MywgMHg2RjIwLCAweDBEMkYsCisgICAgMHg2RjIyLCAweDA1RkQsIDB4NkYyMywgMHgwRkMyLCAweDZGMjUsIDB4NDYzQywgMHg2RjI2LCAweDRDMzAsCisgICAgMHg2RjI5LCAweDRDMzEsIDB4NkYyQSwgMHgzOTg0LCAweDZGMkIsIDB4MEVBRCwgMHg2RjJDLCAweDBCRUUsCisgICAgMHg2RjJGLCAweDM5ODUsIDB4NkYzMCwgMHg0QzMyLCAweDZGMzEsIDB4MTU3OCwgMHg2RjMyLCAweDE1N0EsCisgICAgMHg2RjMzLCAweDM5ODYsIDB4NkYzNSwgMHg0NjM1LCAweDZGMzYsIDB4NDYzRCwgMHg2RjM4LCAweDBBQjQsCisgICAgMHg2RjNDLCAweDQ2M0UsIDB4NkYzRSwgMHgxNTdDLCAweDZGM0YsIDB4MTU3NiwgMHg2RjQxLCAweDE1NzAsCisgICAgMHg2RjQ1LCAweDA1RkYsIDB4NkY1MSwgMHgxRTYwLCAweDZGNTIsIDB4NDY0MCwgMHg2RjU0LCAweDA3M0YsCisgICAgMHg2RjU3LCAweDQ2NDEsIDB4NkY1OCwgMHgxNThBLCAweDZGNTksIDB4NDIzMSwgMHg2RjVBLCAweDM5ODcsCisgICAgMHg2RjVCLCAweDE1ODUsIDB4NkY1QywgMHgwQTlDLCAweDZGNUUsIDB4Mzk4OCwgMHg2RjVGLCAweDA1QzEsCisgICAgMHg2RjYwLCAweDQ2NDIsIDB4NkY2MSwgMHg0MjMyLCAweDZGNjIsIDB4Mzk4OSwgMHg2RjY0LCAweDA5NkIsCisgICAgMHg2RjY2LCAweDE1OEUsIDB4NkY2OCwgMHg0NjQzLCAweDZGNkQsIDB4MTU4NywgMHg2RjZFLCAweDBCQzgsCisgICAgMHg2RjZGLCAweDE1ODQsIDB4NkY3MCwgMHgwQkY1LCAweDZGNzQsIDB4MTVBNywgMHg2Rjc4LCAweDE1ODEsCisgICAgMHg2RjdBLCAweDE1ODAsIDB4NkY3QywgMHgxNTg5LCAweDZGN0QsIDB4Mzk4QSwgMHg2RjdFLCAweDQyMzMsCisgICAgMHg2RjgwLCAweDE1ODMsIDB4NkY4MSwgMHgxNTgyLCAweDZGODIsIDB4MTU4OCwgMHg2Rjg0LCAweDBBNDUsCisgICAgMHg2Rjg2LCAweDE1N0YsIDB4NkY4NywgMHg0QzMzLCAweDZGODgsIDB4MjE1MSwgMHg2RjhCLCAweDM5OEIsCisgICAgMHg2RjhDLCAweDQyMzQsIDB4NkY4RCwgMHgzOThDLCAweDZGOEUsIDB4MTU4QiwgMHg2RjkwLCAweDQ2NDQsCisgICAgMHg2RjkxLCAweDE1OEMsIDB4NkY5MiwgMHgzOThELCAweDZGOTQsIDB4Mzk4RSwgMHg2Rjk2LCAweDQ2NDUsCisgICAgMHg2Rjk3LCAweDA1RkUsIDB4NkY5OCwgMHgzNjNDLCAweDZGOUEsIDB4Mzk4RiwgMHg2RjlELCAweDRDMzQsCisgICAgMHg2RjlGLCAweDQ2NDcsIDB4NkZBMCwgMHg0MjM1LCAweDZGQTEsIDB4MTU5MSwgMHg2RkEzLCAweDE1OTAsCisgICAgMHg2RkE0LCAweDE1OTIsIDB4NkZBNSwgMHg0NjQ4LCAweDZGQTcsIDB4Mzk5MCwgMHg2RkE4LCAweDM5OTEsCisgICAgMHg2RkFBLCAweDE1OTUsIDB4NkZBRSwgMHg0QzM1LCAweDZGQUYsIDB4NDY0OSwgMHg2RkIxLCAweDBDM0QsCisgICAgMHg2RkIzLCAweDE1OEYsIDB4NkZCNSwgMHgyMTUyLCAweDZGQjYsIDB4Mzk5MiwgMHg2RkI3LCAweDRDMzYsCisgICAgMHg2RkI5LCAweDE1OTMsIDB4NkZCQywgMHg0MjM2LCAweDZGQkUsIDB4NDY0NiwgMHg2RkMwLCAweDA3MzksCisgICAgMHg2RkMxLCAweDBCNTksIDB4NkZDMiwgMHgxNThELCAweDZGQzMsIDB4MENGMSwgMHg2RkM2LCAweDE1OTQsCisgICAgMHg2RkM3LCAweDQyMzcsIDB4NkZDOCwgMHg0NjRCLCAweDZGQzksIDB4NDY0QywgMHg2RkNBLCAweDQyMzgsCisgICAgMHg2RkQ0LCAweDE1OTksIDB4NkZENSwgMHgxNTk3LCAweDZGRDgsIDB4MTU5QSwgMHg2RkRBLCAweDM5OTMsCisgICAgMHg2RkRCLCAweDE1OUQsIDB4NkZERSwgMHgzOTk0LCAweDZGREYsIDB4MTU5NiwgMHg2RkUwLCAweDA3RkMsCisgICAgMHg2RkUxLCAweDBDREUsIDB4NkZFNCwgMHgxNTM2LCAweDZGRTksIDB4NDY0RCwgMHg2RkVCLCAweDBGNUUsCisgICAgMHg2RkVDLCAweDE1OTgsIDB4NkZFRSwgMHgxNTlDLCAweDZGRUYsIDB4MEI1NSwgMHg2RkYwLCAweDQyMzksCisgICAgMHg2RkYxLCAweDE1OUIsIDB4NkZGMywgMHgxNTg2LCAweDZGRjUsIDB4MjE1MywgMHg2RkY2LCAweDFCQTQsCisgICAgMHg2RkY5LCAweDNDMjMsIDB4NkZGQSwgMHgxNUEwLCAweDZGRkMsIDB4NDY0RiwgMHg2RkZFLCAweDE1QTQsCisgICAgMHg3MDAwLCAweDQ2NTAsIDB4NzAwMSwgMHgxNUEyLCAweDcwMDUsIDB4MjE1NCwgMHg3MDA2LCAweDFFNTAsCisgICAgMHg3MDA3LCAweDIxNTUsIDB4NzAwOSwgMHgxNTlFLCAweDcwMEEsIDB4NDY1MSwgMHg3MDBCLCAweDE1OUYsCisgICAgMHg3MDBELCAweDRDMzcsIDB4NzAwRiwgMHgxNUEzLCAweDcwMTEsIDB4MTVBMSwgMHg3MDE1LCAweDBEQzAsCisgICAgMHg3MDE4LCAweDE1QTksIDB4NzAxQSwgMHgxNUE2LCAweDcwMUIsIDB4MTVBNSwgMHg3MDFELCAweDE1QTgsCisgICAgMHg3MDFFLCAweDBDQUMsIDB4NzAxRiwgMHgxNUFBLCAweDcwMjAsIDB4NEMzOCwgMHg3MDIzLCAweDQ2NTIsCisgICAgMHg3MDI2LCAweDBCQjMsIDB4NzAyNywgMHgwQjRELCAweDcwMjgsIDB4MjE1NiwgMHg3MDJDLCAweDBBNDksCisgICAgMHg3MDMwLCAweDE1QUIsIDB4NzAzMiwgMHgxNUFELCAweDcwMzksIDB4Mzk5NiwgMHg3MDNBLCAweDQ2NTQsCisgICAgMHg3MDNDLCAweDM5OTcsIDB4NzAzRSwgMHgxNUFDLCAweDcwNDMsIDB4NDY1NSwgMHg3MDQ3LCAweDQ2NTYsCisgICAgMHg3MDQ5LCAweDRDMzksIDB4NzA0QSwgMHg0RjUyLCAweDcwNEIsIDB4NDY1NywgMHg3MDRDLCAweDE1NzIsCisgICAgMHg3MDRFLCAweDQyM0EsIDB4NzA1MSwgMHgxNUFFLCAweDcwNTQsIDB4Mzk5OSwgMHg3MDU4LCAweDBDQkYsCisgICAgMHg3MDVELCAweDM5OUEsIDB4NzA1RSwgMHgzOTlCLCAweDcwNjMsIDB4MTVBRiwgMHg3MDY0LCAweDM5OUMsCisgICAgMHg3MDY1LCAweDQ2NTksIDB4NzA2OSwgMHg0NjVBLCAweDcwNkIsIDB4MDU1MCwgMHg3MDZDLCAweDM5OUQsCisgICAgMHg3MDZFLCAweDQ2NUIsIDB4NzA2RiwgMHgwQzZFLCAweDcwNzAsIDB4MDU4MywgMHg3MDc1LCAweDQyM0IsCisgICAgMHg3MDc2LCAweDQ2NUMsIDB4NzA3OCwgMHgwNjdFLCAweDcwN0MsIDB4MDkwQSwgMHg3MDdELCAweDA4NDIsCisgICAgMHg3MDdFLCAweDM5OUUsIDB4NzA4MSwgMHgzOTlGLCAweDcwODUsIDB4MjE1NywgMHg3MDg2LCAweDQ2NUQsCisgICAgMHg3MDg5LCAweDBGQ0QsIDB4NzA4QSwgMHgwQTJDLCAweDcwOEUsIDB4MDUwQywgMHg3MDkyLCAweDE1QjEsCisgICAgMHg3MDk1LCAweDM5QTAsIDB4NzA5NywgMHg0NjVFLCAweDcwOTgsIDB4NEMzQSwgMHg3MDk5LCAweDE1QjAsCisgICAgMHg3MDlGLCAweDQ2NjAsIDB4NzBBNCwgMHg0MjNDLCAweDcwQUIsIDB4MjE1OCwgMHg3MEFDLCAweDE1QjQsCisgICAgMHg3MEFELCAweDBCNzgsIDB4NzBBRSwgMHgxNUI3LCAweDcwQUYsIDB4MTVCMiwgMHg3MEIwLCAweDRDM0IsCisgICAgMHg3MEIxLCAweDQ2NjEsIDB4NzBCMywgMHgxNUI2LCAweDcwQjcsIDB4MzlBMSwgMHg3MEI4LCAweDE1QjUsCisgICAgMHg3MEI5LCAweDBDM0EsIDB4NzBCQSwgMHgwNDlELCAweDcwQkIsIDB4MjBBRCwgMHg3MEM4LCAweDBGQkQsCisgICAgMHg3MENBLCAweDQ2NjQsIDB4NzBDQiwgMHgxNUI5LCAweDcwQ0YsIDB4MDRDQSwgMHg3MEQxLCAweDQ2NjUsCisgICAgMHg3MEQzLCAweDM5QTIsIDB4NzBENCwgMHgzOUEzLCAweDcwRDUsIDB4NEMzQywgMHg3MEQ2LCAweDRDM0QsCisgICAgMHg3MEQ4LCAweDM5QTQsIDB4NzBEOSwgMHgxNUJCLCAweDcwREMsIDB4MzlBNSwgMHg3MERELCAweDE1QkEsCisgICAgMHg3MERGLCAweDE1QjgsIDB4NzBFNCwgMHg0MjNELCAweDcwRUMsIDB4NDY2MywgMHg3MEYxLCAweDE1QjMsCisgICAgMHg3MEY5LCAweDBFNTEsIDB4NzBGRCwgMHgxNUJELCAweDcxMDMsIDB4NDY2NiwgMHg3MTA0LCAweDIxNUEsCisgICAgMHg3MTA2LCAweDQ2NjcsIDB4NzEwNywgMHgzOUE2LCAweDcxMDgsIDB4NDY2OCwgMHg3MTA5LCAweDE1QkMsCisgICAgMHg3MTBDLCAweDQ2NjksIDB4NzEwRiwgMHgyMTU5LCAweDcxMTQsIDB4MDUwRCwgMHg3MTE5LCAweDE1QkYsCisgICAgMHg3MTFBLCAweDBFMDIsIDB4NzExQywgMHgxNUJFLCAweDcxMUUsIDB4NDIzRiwgMHg3MTIwLCAweDM5QTcsCisgICAgMHg3MTIxLCAweDBFQzEsIDB4NzEyNiwgMHgwOUFGLCAweDcxMkIsIDB4NDIzRSwgMHg3MTJFLCAweDQyNDAsCisgICAgMHg3MTJGLCAweDQ2NkIsIDB4NzEzMCwgMHgxRERDLCAweDcxMzEsIDB4MzlBOCwgMHg3MTM2LCAweDBBQjUsCisgICAgMHg3MTNDLCAweDA5QUUsIDB4NzE0NSwgMHg0QzNFLCAweDcxNDYsIDB4MjE1QywgMHg3MTQ3LCAweDIxNUQsCisgICAgMHg3MTQ5LCAweDBGQzMsIDB4NzE0QSwgMHgzOUE5LCAweDcxNEMsIDB4MTVDNSwgMHg3MTRFLCAweDBBOUQsCisgICAgMHg3MTUwLCAweDQ2NkMsIDB4NzE1MSwgMHg0MjQxLCAweDcxNTIsIDB4MzlBQSwgMHg3MTUzLCAweDQ2NkQsCisgICAgMHg3MTU1LCAweDE1QzEsIDB4NzE1NiwgMHgxNUM2LCAweDcxNTksIDB4MDUwRSwgMHg3MTVDLCAweDIxNUIsCisgICAgMHg3MTVFLCAweDQ2NkUsIDB4NzE2MCwgMHgzOUFCLCAweDcxNjIsIDB4MTVDNCwgMHg3MTY0LCAweDBEMTcsCisgICAgMHg3MTY1LCAweDE1QzAsIDB4NzE2NiwgMHgxNUMzLCAweDcxNjcsIDB4MDlCMCwgMHg3MTY4LCAweDQyNDIsCisgICAgMHg3MTY5LCAweDBENjUsIDB4NzE2QywgMHgxNUM3LCAweDcxNkUsIDB4MDhGRCwgMHg3MTc5LCAweDM5QUMsCisgICAgMHg3MTdELCAweDBBOUUsIDB4NzE4MCwgMHg0NjcxLCAweDcxODQsIDB4MTVDQSwgMHg3MTg1LCAweDQyNDMsCisgICAgMHg3MTg3LCAweDQyNDQsIDB4NzE4OCwgMHgxNUMyLCAweDcxOEEsIDB4MDZGRCwgMHg3MThGLCAweDE1QzgsCisgICAgMHg3MTkyLCAweDM5QUQsIDB4NzE5NCwgMHgwRjNBLCAweDcxOTUsIDB4MTVDQiwgMHg3MTk2LCAweDQ2NzAsCisgICAgMHg3MTk5LCAweDIwNUQsIDB4NzE5QiwgMHg0NjcyLCAweDcxOUYsIDB4MDk1OSwgMHg3MUEwLCAweDQ2NzMsCisgICAgMHg3MUEyLCAweDQ2NzQsIDB4NzFBOCwgMHgxNUNDLCAweDcxQUMsIDB4MTVDRCwgMHg3MUFFLCAweDQ2NzUsCisgICAgMHg3MUFGLCAweDQ2NzYsIDB4NzFCMSwgMHgwQ0U0LCAweDcxQjIsIDB4NEMzRiwgMHg3MUIzLCAweDNDMjUsCisgICAgMHg3MUI5LCAweDE1Q0YsIDB4NzFCQSwgMHg0MjQ1LCAweDcxQkUsIDB4MTVEMCwgMHg3MUMxLCAweDIxNUYsCisgICAgMHg3MUMzLCAweDBDRTksIDB4NzFDNCwgMHg0MjQ2LCAweDcxQzgsIDB4MEM2RiwgMHg3MUM5LCAweDE1RDIsCisgICAgMHg3MUNCLCAweDM5QUYsIDB4NzFDRSwgMHgxNUQ0LCAweDcxRDAsIDB4MEY5RCwgMHg3MUQyLCAweDE1RDEsCisgICAgMHg3MUQzLCAweDM5QjAsIDB4NzFENCwgMHgxNUQzLCAweDcxRDUsIDB4MDUwRiwgMHg3MUQ2LCAweDM5QjEsCisgICAgMHg3MUQ3LCAweDE1Q0UsIDB4NzFEOSwgMHg0Njc4LCAweDcxREMsIDB4NDY3OSwgMHg3MURGLCAweDExNEUsCisgICAgMHg3MUUwLCAweDE1RDUsIDB4NzFFNSwgMHgwQUU5LCAweDcxRTYsIDB4MDg4NiwgMHg3MUU3LCAweDE1RDcsCisgICAgMHg3MUVDLCAweDE1RDYsIDB4NzFFRCwgMHgwOUVBLCAweDcxRUUsIDB4MTBFRSwgMHg3MUY0LCAweDRDNDAsCisgICAgMHg3MUY1LCAweDE1RDgsIDB4NzFGOSwgMHgxNURBLCAweDcxRkIsIDB4MTVDOSwgMHg3MUZDLCAweDE1RDksCisgICAgMHg3MUZFLCAweDIxNjAsIDB4NzFGRiwgMHgxNURCLCAweDcyMDAsIDB4MzlCMiwgMHg3MjA2LCAweDBEMzAsCisgICAgMHg3MjA3LCAweDQ2N0EsIDB4NzIwRCwgMHgxNURDLCAweDcyMTAsIDB4MTVERCwgMHg3MjE1LCAweDQyNDcsCisgICAgMHg3MjE3LCAweDRDNDEsIDB4NzIxQiwgMHgxNURFLCAweDcyMUQsIDB4MzlCMywgMHg3MjFGLCAweDRDNDIsCisgICAgMHg3MjI4LCAweDE1REYsIDB4NzIyQSwgMHgwQkZBLCAweDcyMkIsIDB4MzlCNCwgMHg3MjJDLCAweDE1RTEsCisgICAgMHg3MjJELCAweDE1RTAsIDB4NzIzMCwgMHgxNUUyLCAweDcyMzIsIDB4MTVFMywgMHg3MjM0LCAweDQ2N0MsCisgICAgMHg3MjM1LCAweDA5MEIsIDB4NzIzNiwgMHgwREQ1LCAweDcyMzgsIDB4MzlCNSwgMHg3MjM5LCAweDQ2N0QsCisgICAgMHg3MjNBLCAweDBFRjgsIDB4NzIzQiwgMHgxNUU0LCAweDcyM0MsIDB4MTVFNSwgMHg3MjNELCAweDBBRDgsCisgICAgMHg3MjNFLCAweDA4RDAsIDB4NzIzRiwgMHgxNUU2LCAweDcyNDAsIDB4MTVFNywgMHg3MjQxLCAweDM5QjYsCisgICAgMHg3MjQyLCAweDQ2N0UsIDB4NzI0MywgMHg0QzQzLCAweDcyNDYsIDB4MTVFOCwgMHg3MjQ3LCAweDBFMjIsCisgICAgMHg3MjQ4LCAweDBENUIsIDB4NzI0QiwgMHgxNUU5LCAweDcyNEMsIDB4MEQwRCwgMHg3MjRGLCAweDRDNDQsCisgICAgMHg3MjUwLCAweDRDNDUsIDB4NzI1MiwgMHgwQkM5LCAweDcyNTMsIDB4MzlCNywgMHg3MjU1LCAweDM5QjgsCisgICAgMHg3MjU2LCAweDM5QjksIDB4NzI1NywgMHg0NjdGLCAweDcyNTgsIDB4MTVFQSwgMHg3MjU5LCAweDA1NjcsCisgICAgMHg3MjVBLCAweDRDNDYsIDB4NzI1QiwgMHgwNjg3LCAweDcyNUMsIDB4MzlCQSwgMHg3MjVELCAweDBFRDIsCisgICAgMHg3MjVGLCAweDBFQzIsIDB4NzI2MCwgMHg0QzQ3LCAweDcyNjEsIDB4MDUzNCwgMHg3MjYyLCAweDBGREEsCisgICAgMHg3MjYzLCAweDQ2ODAsIDB4NzI2NywgMHgwRTgwLCAweDcyNjgsIDB4NEM0OCwgMHg3MjY5LCAweDBERkEsCisgICAgMHg3MjZFLCAweDQ2ODIsIDB4NzI2RiwgMHg0NjgzLCAweDcyNzIsIDB4MEE1QiwgMHg3Mjc0LCAweDE1RUIsCisgICAgMHg3Mjc3LCAweDRDNDksIDB4NzI3OCwgMHg0Njg0LCAweDcyNzksIDB4MEM5QiwgMHg3MjdELCAweDA3NTcsCisgICAgMHg3MjdFLCAweDE1RUMsIDB4NzI3RiwgMHg0Njg1LCAweDcyODAsIDB4MDg0NCwgMHg3MjgxLCAweDE1RUUsCisgICAgMHg3MjgyLCAweDE1RUQsIDB4NzI4NCwgMHg0QzRBLCAweDcyODcsIDB4MTVFRiwgMHg3MjhELCAweDM5QkIsCisgICAgMHg3MjhFLCAweDQ2ODYsIDB4NzI5MiwgMHgxNUYwLCAweDcyOTYsIDB4MTVGMSwgMHg3MjlCLCAweDQyNDksCisgICAgMHg3MkEwLCAweDA2NTgsIDB4NzJBMiwgMHgxNUYyLCAweDcyQTcsIDB4MTVGMywgMHg3MkFDLCAweDA3NTgsCisgICAgMHg3MkFELCAweDM5QkMsIDB4NzJBRSwgMHg0Njg4LCAweDcyQUYsIDB4MEQ1QywgMHg3MkIwLCAweDQ2ODksCisgICAgMHg3MkIxLCAweDIxNjEsIDB4NzJCMiwgMHgxNUY1LCAweDcyQjQsIDB4MzlCRCwgMHg3MkI2LCAweDA5REQsCisgICAgMHg3MkI5LCAweDE1RjQsIDB4NzJCRSwgMHgyMTYyLCAweDcyQzAsIDB4MzQyQiwgMHg3MkMxLCAweDQ2OEEsCisgICAgMHg3MkMyLCAweDA2QjAsIDB4NzJDMywgMHgxNUY2LCAweDcyQzQsIDB4MTVGOCwgMHg3MkM2LCAweDE1RjcsCisgICAgMHg3MkM3LCAweDM5QkUsIDB4NzJDOSwgMHg0QzRCLCAweDcyQ0MsIDB4NDY4QywgMHg3MkNFLCAweDE1RjksCisgICAgMHg3MkQwLCAweDA3ODUsIDB4NzJEMiwgMHgxNUZBLCAweDcyRDcsIDB4MDZFMSwgMHg3MkQ5LCAweDBBQzIsCisgICAgMHg3MkRCLCAweDA4MEYsIDB4NzJFMCwgMHgxNUZDLCAweDcyRTEsIDB4MTVGRCwgMHg3MkUyLCAweDE1RkIsCisgICAgMHg3MkU1LCAweDRDNEMsIDB4NzJFOSwgMHgwOTE5LCAweDcyRUMsIDB4MENBMCwgMHg3MkVELCAweDA2QjEsCisgICAgMHg3MkYzLCAweDQ2OEYsIDB4NzJGNCwgMHg0QzRELCAweDcyRjcsIDB4MTVGRiwgMHg3MkY4LCAweDBCNkEsCisgICAgMHg3MkY5LCAweDE1RkUsIDB4NzJGQSwgMHg0NjkwLCAweDcyRkIsIDB4MzlCRiwgMHg3MkZDLCAweDBGREIsCisgICAgMHg3MkZELCAweDBEMTgsIDB4NzMwMiwgMHg0QzRFLCAweDczMDQsIDB4MzlDMCwgMHg3MzA1LCAweDM5QzEsCisgICAgMHg3MzA3LCAweDQ2OTEsIDB4NzMwQSwgMHgxNjAyLCAweDczMEIsIDB4NEM0RiwgMHg3MzEyLCAweDQ2OTIsCisgICAgMHg3MzE2LCAweDE2MDQsIDB4NzMxNywgMHgxNjAxLCAweDczMTgsIDB4NDY5MywgMHg3MzE5LCAweDQ2OTQsCisgICAgMHg3MzFCLCAweDBFRTAsIDB4NzMxQywgMHgxNjAzLCAweDczMUQsIDB4MTYwNSwgMHg3MzFFLCAweDRDNTAsCisgICAgMHg3MzFGLCAweDBGOEMsIDB4NzMyMiwgMHg0QzUxLCAweDczMjQsIDB4MjE2MywgMHg3MzI1LCAweDE2MDksCisgICAgMHg3MzI3LCAweDQyNEIsIDB4NzMyOCwgMHgzOUMyLCAweDczMjksIDB4MTYwOCwgMHg3MzJBLCAweDBCQjQsCisgICAgMHg3MzJCLCAweDBDRTMsIDB4NzMyQywgMHg0Njk3LCAweDczMkUsIDB4MDc1OSwgMHg3MzJGLCAweDE2MDcsCisgICAgMHg3MzMxLCAweDM5QzMsIDB4NzMzMywgMHg0Njk4LCAweDczMzQsIDB4MTYwNiwgMHg3MzM2LCAweDBGMUIsCisgICAgMHg3MzM3LCAweDBGMUMsIDB4NzMzOSwgMHg0Njk2LCAweDczM0EsIDB4NEM1MiwgMHg3MzNCLCAweDRDNTMsCisgICAgMHg3MzNELCAweDQ2OTksIDB4NzMzRSwgMHgxNjBBLCAweDczM0YsIDB4MDUxMCwgMHg3MzQzLCAweDM5QzQsCisgICAgMHg3MzQ0LCAweDA4MDgsIDB4NzM0NSwgMHgwOEIwLCAweDczNEQsIDB4NEM1NCwgMHg3MzRFLCAweDE2MEIsCisgICAgMHg3MzRGLCAweDE2MEMsIDB4NzM1MCwgMHg0MjRDLCAweDczNTIsIDB4NDY5QSwgMHg3MzU3LCAweDE2MEUsCisgICAgMHg3MzU4LCAweDRDNTUsIDB4NzM2MywgMHgwOTRELCAweDczNjYsIDB4NDI0RCwgMHg3MzY3LCAweDRDNTYsCisgICAgMHg3MzY4LCAweDE2MTAsIDB4NzM2QSwgMHgxNjBGLCAweDczNkIsIDB4NDY5QywgMHg3MzZDLCAweDM5QzUsCisgICAgMHg3MzZFLCAweDQ2OUUsIDB4NzM2RiwgMHg0NjlGLCAweDczNzAsIDB4MTYxMSwgMHg3MzcxLCAweDQ2QTAsCisgICAgMHg3MzcyLCAweDA1QUIsIDB4NzM3NSwgMHgxNjEzLCAweDczNzcsIDB4MjE2NSwgMHg3Mzc4LCAweDE2MTIsCisgICAgMHg3MzdBLCAweDE2MTUsIDB4NzM3QiwgMHgxNjE0LCAweDczN0MsIDB4MzlDNiwgMHg3MzgxLCAweDQ2QTEsCisgICAgMHg3MzgzLCAweDM5QzcsIDB4NzM4NCwgMHgwNzcwLCAweDczODUsIDB4MzlDOCwgMHg3Mzg2LCAweDM5QzksCisgICAgMHg3Mzg3LCAweDBGNzAsIDB4NzM4OSwgMHgwNkM0LCAweDczOEEsIDB4NDZBMiwgMHg3MzhCLCAweDA1MjYsCisgICAgMHg3Mzk0LCAweDQ2QTMsIDB4NzM5NSwgMHgzOUNBLCAweDczOTYsIDB4MDZFMiwgMHg3Mzk4LCAweDQ2QTQsCisgICAgMHg3MzlDLCAweDQ2QTUsIDB4NzM5RSwgMHgzOUNCLCAweDczOUYsIDB4MzlDQywgMHg3M0EwLCAweDM5Q0QsCisgICAgMHg3M0EyLCAweDQyNEUsIDB4NzNBNSwgMHg0NkE2LCAweDczQTYsIDB4MzlDRSwgMHg3M0E4LCAweDNDM0YsCisgICAgMHg3M0E5LCAweDA2MUQsIDB4NzNBQiwgMHgzOUNGLCAweDczQjIsIDB4MEZCMCwgMHg3M0IzLCAweDE2MTcsCisgICAgMHg3M0I1LCAweDM5RDAsIDB4NzNCNywgMHgzOUQxLCAweDczQjksIDB4NDZBNywgMHg3M0JBLCAweDM1RUEsCisgICAgMHg3M0JCLCAweDE2MTksIDB4NzNCQywgMHgzOUQyLCAweDczQkQsIDB4MjE2NiwgMHg3M0JGLCAweDQ2QTgsCisgICAgMHg3M0MwLCAweDE2MUEsIDB4NzNDMiwgMHgwNTUxLCAweDczQzUsIDB4NDZBOSwgMHg3M0M4LCAweDE2MTYsCisgICAgMHg3M0M5LCAweDIxNjcsIDB4NzNDQSwgMHgwODg3LCAweDczQ0IsIDB4NDZBQSwgMHg3M0NELCAweDBCREQsCisgICAgMHg3M0NFLCAweDE2MTgsIDB4NzNDRiwgMHgzOUQzLCAweDczRDIsIDB4MjE2QSwgMHg3M0Q2LCAweDIxNjgsCisgICAgMHg3M0Q5LCAweDM5RDQsIDB4NzNERSwgMHgxNjFELCAweDczRTAsIDB4MDkxQSwgMHg3M0UxLCAweDQ2QUIsCisgICAgMHg3M0UzLCAweDIxNjksIDB4NzNFNCwgMHgzQzM5LCAweDczRTUsIDB4MTYxQiwgMHg3M0U3LCAweDQ2QUMsCisgICAgMHg3M0U5LCAweDM5RDUsIDB4NzNFQSwgMHgwNzE0LCAweDczRUQsIDB4MEQ1RCwgMHg3M0VFLCAweDE2MUMsCisgICAgMHg3M0YxLCAweDE2MzcsIDB4NzNGNCwgMHgzOUQ2LCAweDczRjUsIDB4MjE2QywgMHg3M0Y4LCAweDE2MjIsCisgICAgMHg3M0Y5LCAweDQ2QUQsIDB4NzNGQSwgMHg0NkFGLCAweDczRkQsIDB4MzlENywgMHg3M0ZFLCAweDA3NzEsCisgICAgMHg3NDAxLCAweDQ2QjAsIDB4NzQwMywgMHgwNjdGLCAweDc0MDQsIDB4MzlEOCwgMHg3NDA1LCAweDE2MUYsCisgICAgMHg3NDA2LCAweDBGNjcsIDB4NzQwNywgMHgyMTZCLCAweDc0MDksIDB4MEY3OCwgMHg3NDBBLCAweDM5RDksCisgICAgMHg3NDEzLCAweDQ2QUUsIDB4NzQxQSwgMHgzOURBLCAweDc0MUIsIDB4MzlEQiwgMHg3NDIxLCAweDNDM0EsCisgICAgMHg3NDIyLCAweDBCNTYsIDB4NzQyNCwgMHgzOURDLCAweDc0MjUsIDB4MTYyMSwgMHg3NDI2LCAweDIxNkQsCisgICAgMHg3NDI4LCAweDM5REQsIDB4NzQyOSwgMHgyMTZGLCAweDc0MkEsIDB4MjE2RSwgMHg3NDJCLCAweDQyNEYsCisgICAgMHg3NDJDLCAweDM5REUsIDB4NzQyRSwgMHgyMTcwLCAweDc0MkYsIDB4MzlERiwgMHg3NDMwLCAweDM5RTAsCisgICAgMHg3NDMxLCAweDM5RTEsIDB4NzQzMiwgMHgxNjIzLCAweDc0MzMsIDB4MEY5RSwgMHg3NDM0LCAweDA2Q0YsCisgICAgMHg3NDM1LCAweDBEOTAsIDB4NzQzNiwgMHgwRDAwLCAweDc0MzksIDB4MzlFMiwgMHg3NDNBLCAweDE2MjQsCisgICAgMHg3NDNGLCAweDE2MjYsIDB4NzQ0MCwgMHg0NkIyLCAweDc0NDEsIDB4MTYyOSwgMHg3NDQzLCAweDQ2QjMsCisgICAgMHg3NDQ0LCAweDM5RTMsIDB4NzQ0NiwgMHg0MjUwLCAweDc0NDcsIDB4MzlFNCwgMHg3NDRCLCAweDM5RTUsCisgICAgMHg3NDRELCAweDM5RTYsIDB4NzQ1MSwgMHgzOUU3LCAweDc0NTIsIDB4NDZCNCwgMHg3NDUzLCAweDQ2QjEsCisgICAgMHg3NDU1LCAweDE2MjUsIDB4NzQ1NywgMHgzOUU4LCAweDc0NTksIDB4MTYyOCwgMHg3NDVBLCAweDA3OUUsCisgICAgMHg3NDVCLCAweDA0RUYsIDB4NzQ1QywgMHgxNjJBLCAweDc0NUQsIDB4NDZCNSwgMHg3NDVFLCAweDBBMzYsCisgICAgMHg3NDVGLCAweDE2MjcsIDB4NzQ2MCwgMHgwRkE0LCAweDc0NjIsIDB4NDI1MSwgMHg3NDYzLCAweDE2MkQsCisgICAgMHg3NDY0LCAweDFEMzUsIDB4NzQ2NiwgMHgzOUU5LCAweDc0NjksIDB4MTYyQiwgMHg3NDZBLCAweDE2MkUsCisgICAgMHg3NDZCLCAweDM5RUEsIDB4NzQ2RCwgMHg0MjUyLCAweDc0NkYsIDB4MTYyMCwgMHg3NDcwLCAweDE2MkMsCisgICAgMHg3NDcxLCAweDM5RUIsIDB4NzQ3MiwgMHg0QzU3LCAweDc0NzMsIDB4MDgyQywgMHg3NDc2LCAweDE2MkYsCisgICAgMHg3NDdFLCAweDE2MzAsIDB4NzQ4MCwgMHgzOUVDLCAweDc0ODEsIDB4NDZCNiwgMHg3NDgzLCAweDBGNjgsCisgICAgMHg3NDg1LCAweDM5RUQsIDB4NzQ4NiwgMHgzOUVFLCAweDc0ODcsIDB4MzlFRiwgMHg3NDg4LCAweDQ2QjcsCisgICAgMHg3NDg5LCAweDIxNzIsIDB4NzQ4QiwgMHgxNjMxLCAweDc0OTAsIDB4MzlGMCwgMHg3NDkyLCAweDQ2QjksCisgICAgMHg3NDk3LCAweDQ2QkEsIDB4NzQ5OCwgMHgzOUYxLCAweDc0OTksIDB4NDZCQiwgMHg3NDlDLCAweDM5RjIsCisgICAgMHg3NDlFLCAweDE2MzIsIDB4NzQ5RiwgMHgyMTczLCAweDc0QTAsIDB4MzlGMywgMHg3NEExLCAweDQ2QkMsCisgICAgMHg3NEEyLCAweDE2MUUsIDB4NzRBMywgMHgzOUY0LCAweDc0QTUsIDB4NDZCRCwgMHg3NEE2LCAweDQyNTMsCisgICAgMHg3NEE3LCAweDE2MzMsIDB4NzRBOCwgMHgzOUY1LCAweDc0QTksIDB4NDI1NCwgMHg3NEFBLCAweDQ2QkUsCisgICAgMHg3NEFCLCAweDM5RjYsIDB4NzRBRiwgMHg0QzU4LCAweDc0QjAsIDB4MDYwMCwgMHg3NEI1LCAweDM5RjcsCisgICAgMHg3NEI5LCAweDQ2QkYsIDB4NzRCQSwgMHg0NkMxLCAweDc0QkIsIDB4NDZDMCwgMHg3NEJELCAweDA4RDEsCisgICAgMHg3NEJGLCAweDM5RjgsIDB4NzRDOCwgMHgzOUY5LCAweDc0QzksIDB4NDI1NSwgMHg3NENBLCAweDE2MzQsCisgICAgMHg3NENGLCAweDE2MzUsIDB4NzRENCwgMHgxNjM2LCAweDc0RDYsIDB4NDZDMiwgMHg3NEQ4LCAweDQ2QzMsCisgICAgMHg3NERBLCAweDM5RkEsIDB4NzREQywgMHgwNERELCAweDc0REUsIDB4MzlGQiwgMHg3NERGLCAweDRDNTksCisgICAgMHg3NEUwLCAweDE2MzgsIDB4NzRFMiwgMHgwREFELCAweDc0RTMsIDB4MTYzOSwgMHg3NEU0LCAweDRDNUEsCisgICAgMHg3NEU2LCAweDA1RTAsIDB4NzRFNywgMHgxNjNBLCAweDc0RTksIDB4MTYzQiwgMHg3NEVCLCAweDQ2QzQsCisgICAgMHg3NEVFLCAweDE2M0MsIDB4NzRFRiwgMHgzNzUwLCAweDc0RjAsIDB4MTYzRSwgMHg3NEYxLCAweDE2M0YsCisgICAgMHg3NEYyLCAweDE2M0QsIDB4NzRGNCwgMHg0QzVCLCAweDc0RjYsIDB4MERDNSwgMHg3NEY3LCAweDE2NDEsCisgICAgMHg3NEY4LCAweDE2NDAsIDB4NzRGQSwgMHg0NkM2LCAweDc0RkIsIDB4NEM1QywgMHg3NEZGLCAweDQyNTYsCisgICAgMHg3NTAxLCAweDIxNzQsIDB4NzUwMywgMHgxNjQzLCAweDc1MDQsIDB4MTY0MiwgMHg3NTA1LCAweDE2NDQsCisgICAgMHg3NTBDLCAweDE2NDUsIDB4NzUwRCwgMHgxNjQ3LCAweDc1MEUsIDB4MTY0NiwgMHg3NTExLCAweDA4MEIsCisgICAgMHg3NTEzLCAweDE2NDksIDB4NzUxNSwgMHgxNjQ4LCAweDc1MTYsIDB4NEM1RCwgMHg3NTE3LCAweDQyNTcsCisgICAgMHg3NTE4LCAweDA2MDEsIDB4NzUxQSwgMHgwQTE5LCAweDc1MUMsIDB4MEMzNiwgMHg3NTFFLCAweDE2NEEsCisgICAgMHg3NTFGLCAweDBBNUMsIDB4NzUyMCwgMHg0NkM4LCAweDc1MjEsIDB4NEM1RSwgMHg3NTIyLCAweDM1REUsCisgICAgMHg3NTIzLCAweDA4ODgsIDB4NzUyNCwgMHg0NkM5LCAweDc1MjUsIDB4MDUxQiwgMHg3NTI2LCAweDE2NEIsCisgICAgMHg3NTI4LCAweDBGM0IsIDB4NzUyQSwgMHg0NkNBLCAweDc1MkIsIDB4MEUzMywgMHg3NTJDLCAweDE2NEMsCisgICAgMHg3NTJGLCAweDIwRjIsIDB4NzUzMCwgMHgwQzNFLCAweDc1MzEsIDB4MEYxRCwgMHg3NTMyLCAweDA3RDUsCisgICAgMHg3NTMzLCAweDBBMDMsIDB4NzUzNywgMHgwQjg5LCAweDc1MzgsIDB4MTBDOSwgMHg3NTNBLCAweDBCQ0EsCisgICAgMHg3NTNCLCAweDA1NjgsIDB4NzUzQywgMHgxNjRELCAweDc1M0QsIDB4NDZDRCwgMHg3NTNFLCAweDQ2Q0UsCisgICAgMHg3NTNGLCAweDRDNUYsIDB4NzU0MCwgMHg0NkNGLCAweDc1NDQsIDB4MTY0RSwgMHg3NTQ2LCAweDE2NTMsCisgICAgMHg3NTQ4LCAweDQ2RDAsIDB4NzU0OSwgMHgxNjUxLCAweDc1NEEsIDB4MTY1MCwgMHg3NTRCLCAweDEzQzcsCisgICAgMHg3NTRDLCAweDA1ODQsIDB4NzU0RCwgMHgxNjRGLCAweDc1NEUsIDB4MzlGQywgMHg3NTRGLCAweDA0OUUsCisgICAgMHg3NTUwLCAweDQ2RDEsIDB4NzU1MSwgMHgwRDNFLCAweDc1NTIsIDB4NDZEMiwgMHg3NTU0LCAweDBENUUsCisgICAgMHg3NTU5LCAweDBGNzksIDB4NzU1QSwgMHgxNjU0LCAweDc1NUIsIDB4MTY1MiwgMHg3NTVDLCAweDBCOUEsCisgICAgMHg3NTVELCAweDBBNEEsIDB4NzU1RSwgMHg0QzYwLCAweDc1NjAsIDB4MEQzRiwgMHg3NTYyLCAweDBEOUYsCisgICAgMHg3NTY0LCAweDE2NTYsIDB4NzU2NSwgMHgwRjc0LCAweDc1NjYsIDB4MDcyMywgMHg3NTY3LCAweDE2NTcsCisgICAgMHg3NTY5LCAweDE2NTUsIDB4NzU2QSwgMHgwRDZBLCAweDc1NkIsIDB4MTY1OCwgMHg3NTZDLCAweDNDM0IsCisgICAgMHg3NTZELCAweDE2NTksIDB4NzU2RiwgMHgyMTc1LCAweDc1NzAsIDB4MDQ5RiwgMHg3NTcxLCAweDQ2RDQsCisgICAgMHg3NTcyLCAweDQ2RDMsIDB4NzU3MywgMHgwOURFLCAweDc1NzQsIDB4MTY1RSwgMHg3NTc1LCAweDM3NTEsCisgICAgMHg3NTc2LCAweDE2NUIsIDB4NzU3NywgMHgwQ0M1LCAweDc1NzgsIDB4MTY1QSwgMHg3NTc5LCAweDM5RkQsCisgICAgMHg3NTdBLCAweDQ2RDUsIDB4NzU3RCwgMHg0NkQ2LCAweDc1N0UsIDB4NDZENywgMHg3NTdGLCAweDA2NDAsCisgICAgMHg3NTgxLCAweDM5RkUsIDB4NzU4MiwgMHgxNjYxLCAweDc1ODYsIDB4MTY1QywgMHg3NTg3LCAweDE2NUQsCisgICAgMHg3NTg5LCAweDE2NjAsIDB4NzU4QSwgMHgxNjVGLCAweDc1OEIsIDB4MEQ5NywgMHg3NThDLCAweDQ2RDgsCisgICAgMHg3NThFLCAweDBBQzQsIDB4NzU4RiwgMHgwQUMzLCAweDc1OTAsIDB4MzlGRiwgMHg3NTkxLCAweDA2NTksCisgICAgMHg3NTkyLCAweDNBMDAsIDB4NzU5MywgMHgzQTAxLCAweDc1OTQsIDB4MTY2MiwgMHg3NTk5LCAweDRDNjEsCisgICAgMHg3NTlBLCAweDE2NjMsIDB4NzU5RCwgMHgxNjY0LCAweDc1QTIsIDB4NDZEQSwgMHg3NUEzLCAweDE2NjYsCisgICAgMHg3NUE0LCAweDRDNjIsIDB4NzVBNSwgMHgxNjY1LCAweDc1QUIsIDB4MDRGOCwgMHg3NUIwLCAweDQ2REMsCisgICAgMHg3NUIxLCAweDE2NkUsIDB4NzVCMiwgMHgwRDdDLCAweDc1QjMsIDB4MTY2OCwgMHg3NUI0LCAweDNBMDIsCisgICAgMHg3NUI1LCAweDE2NkEsIDB4NzVCNywgMHg0NkRELCAweDc1QjgsIDB4MTY2QywgMHg3NUI5LCAweDBBMDQsCisgICAgMHg3NUJDLCAweDE2NkQsIDB4NzVCRCwgMHgxNjZCLCAweDc1QkUsIDB4MDhFQywgMHg3NUJGLCAweDQ2REUsCisgICAgMHg3NUMwLCAweDQ2REYsIDB4NzVDMSwgMHg0QzYzLCAweDc1QzIsIDB4MTY2NywgMHg3NUMzLCAweDE2NjksCisgICAgMHg3NUM0LCAweDRDNjQsIDB4NzVDNSwgMHgwREI0LCAweDc1QzYsIDB4NDZFMCwgMHg3NUM3LCAweDA5QjEsCisgICAgMHg3NUNBLCAweDE2NzAsIDB4NzVDQywgMHg0QzY1LCAweDc1Q0QsIDB4MTY2RiwgMHg3NUNFLCAweDQyNTksCisgICAgMHg3NUNGLCAweDQ2RTEsIDB4NzVEMiwgMHgxNjcxLCAweDc1RDMsIDB4NDZFMiwgMHg3NUQ0LCAweDA4RDIsCisgICAgMHg3NUQ1LCAweDA4MUYsIDB4NzVENywgMHg0QzY2LCAweDc1RDgsIDB4MEM3MSwgMHg3NUQ5LCAweDE2NzIsCisgICAgMHg3NURCLCAweDBCRTcsIDB4NzVEQywgMHg0QzY3LCAweDc1REQsIDB4NDZFMywgMHg3NURFLCAweDE2NzQsCisgICAgMHg3NURGLCAweDQ2RTQsIDB4NzVFMCwgMHg0NkU1LCAweDc1RTEsIDB4NEM2OCwgMHg3NUUyLCAweDBGNjksCisgICAgMHg3NUUzLCAweDE2NzMsIDB4NzVFNCwgMHgzQTAzLCAweDc1RTcsIDB4NDZFNiwgMHg3NUU5LCAweDBBRUIsCisgICAgMHg3NUVDLCAweDM3NTIsIDB4NzVFRSwgMHg0NkU3LCAweDc1RUYsIDB4NEM2OSwgMHg3NUYwLCAweDE2NzksCisgICAgMHg3NUYxLCAweDQ2RTgsIDB4NzVGMiwgMHgxNjdCLCAweDc1RjMsIDB4MTY3QywgMHg3NUY0LCAweDBCOTIsCisgICAgMHg3NUY5LCAweDNBMDQsIDB4NzVGQSwgMHgxNjdBLCAweDc1RkMsIDB4MTY3NywgMHg3NUZFLCAweDE2NzUsCisgICAgMHg3NUZGLCAweDE2NzYsIDB4NzYwMCwgMHgzQTA1LCAweDc2MDEsIDB4MTY3OCwgMHg3NjAyLCAweDQyNUEsCisgICAgMHg3NjAzLCAweDQ2RTksIDB4NzYwNCwgMHg0QzZBLCAweDc2MDcsIDB4NDZFQiwgMHg3NjA4LCAweDQyNUIsCisgICAgMHg3NjA5LCAweDE2N0YsIDB4NzYwQSwgMHgzQTA2LCAweDc2MEIsIDB4MTY3RCwgMHg3NjBDLCAweDRDNkIsCisgICAgMHg3NjBELCAweDE2N0UsIDB4NzYwRiwgMHg0NkVDLCAweDc2MTMsIDB4NDZFRiwgMHg3NjE1LCAweDNBMDcsCisgICAgMHg3NjE2LCAweDNBMDgsIDB4NzYxOCwgMHg0NkVBLCAweDc2MTksIDB4M0EwOSwgMHg3NjFCLCAweDQ2RjAsCisgICAgMHg3NjFDLCAweDQ2RjEsIDB4NzYxRCwgMHg0QzZDLCAweDc2MUUsIDB4M0EwQSwgMHg3NjFGLCAweDE2ODAsCisgICAgMHg3NjIwLCAweDE2ODIsIDB4NzYyMSwgMHgxNjgzLCAweDc2MjIsIDB4MTY4NCwgMHg3NjI0LCAweDE2ODUsCisgICAgMHg3NjI1LCAweDQ2RjMsIDB4NzYyNiwgMHgzNjQ1LCAweDc2MjcsIDB4MTY4MSwgMHg3NjI4LCAweDQ2RjQsCisgICAgMHg3NjJELCAweDNBMEIsIDB4NzYzMCwgMHgxNjg3LCAweDc2MzIsIDB4NEM2RCwgMHg3NjMzLCAweDQ2RjYsCisgICAgMHg3NjM0LCAweDE2ODYsIDB4NzYzNSwgMHgzQTBDLCAweDc2MzgsIDB4NEM2RSwgMHg3NjNCLCAweDE2ODgsCisgICAgMHg3NjNDLCAweDQ2RjUsIDB4NzY0MSwgMHg0NkY5LCAweDc2NDIsIDB4MEY4RCwgMHg3NjQzLCAweDNBMEQsCisgICAgMHg3NjQ1LCAweDRDNkYsIDB4NzY0NiwgMHgxNjhCLCAweDc2NDcsIDB4MTY4OSwgMHg3NjQ4LCAweDE2OEEsCisgICAgMHg3NjQ5LCAweDQ2RkIsIDB4NzY0QSwgMHg0QzcwLCAweDc2NEIsIDB4M0EwRSwgMHg3NjRDLCAweDA2MUUsCisgICAgMHg3NjRFLCAweDM3NTMsIDB4NzY1MiwgMHgwRjBBLCAweDc2NTUsIDB4NDZGQywgMHg3NjU2LCAweDBFMUEsCisgICAgMHg3NjU4LCAweDE2OEQsIDB4NzY1QywgMHgxNjhDLCAweDc2NUYsIDB4NEM3MSwgMHg3NjYxLCAweDE2OEUsCisgICAgMHg3NjYyLCAweDE2OEYsIDB4NzY2NCwgMHg0MjVDLCAweDc2NjUsIDB4M0EwRiwgMHg3NjY3LCAweDE2OTMsCisgICAgMHg3NjY4LCAweDE2OTAsIDB4NzY2OSwgMHgxNjkxLCAweDc2NkEsIDB4MTY5MiwgMHg3NjZDLCAweDE2OTQsCisgICAgMHg3NjZELCAweDNBMTAsIDB4NzY2RSwgMHg0NkZFLCAweDc2NkYsIDB4M0ExMSwgMHg3NjcwLCAweDE2OTUsCisgICAgMHg3NjcxLCAweDNBMTIsIDB4NzY3MiwgMHgxNjk2LCAweDc2NzQsIDB4M0ExMywgMHg3Njc2LCAweDE2OTcsCisgICAgMHg3Njc4LCAweDE2OTgsIDB4NzY3QSwgMHgwRDQzLCAweDc2N0IsIDB4MEM0QSwgMHg3NjdDLCAweDE2OTksCisgICAgMHg3NjdELCAweDBEMjgsIDB4NzY3RSwgMHgwREE2LCAweDc2ODAsIDB4MTY5QSwgMHg3NjgxLCAweDQyNUQsCisgICAgMHg3NjgyLCAweDIxNzYsIDB4NzY4MywgMHgxNjlCLCAweDc2ODQsIDB4MEMyNCwgMHg3Njg2LCAweDA1ODUsCisgICAgMHg3Njg3LCAweDA3RDYsIDB4NzY4OCwgMHgxNjlDLCAweDc2OEIsIDB4MTY5RCwgMHg3NjhFLCAweDE2OUUsCisgICAgMHg3NjkwLCAweDA4NzcsIDB4NzY5MywgMHgxNkEwLCAweDc2OTUsIDB4NDZGRiwgMHg3Njk2LCAweDE2OUYsCisgICAgMHg3Njk5LCAweDE2QTEsIDB4NzY5QSwgMHgxNkEyLCAweDc2OUIsIDB4MjE3OSwgMHg3NjlDLCAweDIxNzcsCisgICAgMHg3NjlELCAweDQyNUUsIDB4NzY5RSwgMHgyMTc4LCAweDc2QTAsIDB4NDcwMSwgMHg3NkExLCAweDQ3MDAsCisgICAgMHg3NkE0LCAweDNBMTQsIDB4NzZBNSwgMHgzQTE1LCAweDc2QTYsIDB4MjE3QSwgMHg3NkE3LCAweDQ3MDIsCisgICAgMHg3NkE4LCAweDQ3MDMsIDB4NzZBQSwgMHg0MjVGLCAweDc2QUQsIDB4NEM3MiwgMHg3NkFFLCAweDBEN0QsCisgICAgMHg3NkFGLCAweDQ3MDQsIDB4NzZCMCwgMHgxNkEzLCAweDc2QjQsIDB4MTZBNCwgMHg3NkI2LCAweDQyNjAsCisgICAgMHg3NkI3LCAweDFEMUMsIDB4NzZCOCwgMHgxNkE1LCAweDc2QjksIDB4MTZBNiwgMHg3NkJBLCAweDE2QTcsCisgICAgMHg3NkJELCAweDRDNzMsIDB4NzZCRiwgMHgwODdDLCAweDc2QzIsIDB4MTZBOCwgMHg3NkMzLCAweDBEMEMsCisgICAgMHg3NkM1LCAweDNBMTYsIDB4NzZDNiwgMHgwRThELCAweDc2QzgsIDB4MDRGMCwgMHg3NkM5LCAweDQ3MDYsCisgICAgMHg3NkNBLCAweDA0RjksIDB4NzZDQywgMHgzQTE3LCAweDc2Q0QsIDB4MTZBOSwgMHg3NkNFLCAweDQyNjEsCisgICAgMHg3NkQyLCAweDE2QUIsIDB4NzZENCwgMHg0MjYyLCAweDc2RDYsIDB4MTZBQSwgMHg3NkQ3LCAweDBDNkEsCisgICAgMHg3NkQ5LCAweDRDNzQsIDB4NzZEQiwgMHgwQTVELCAweDc2REMsIDB4MTREOCwgMHg3NkRFLCAweDE2QUMsCisgICAgMHg3NkRGLCAweDBFQ0QsIDB4NzZFMSwgMHgxNkFELCAweDc2RTMsIDB4MDYwMiwgMHg3NkU0LCAweDBENkIsCisgICAgMHg3NkU1LCAweDE2QUUsIDB4NzZFNiwgMHg0MjYzLCAweDc2RTcsIDB4MTZBRiwgMHg3NkU4LCAweDQ3MDgsCisgICAgMHg3NkVBLCAweDE2QjAsIDB4NzZFQiwgMHg0Qzc1LCAweDc2RUMsIDB4M0ExOCwgMHg3NkVFLCAweDBFRTgsCisgICAgMHg3NkYwLCAweDRDNzYsIDB4NzZGMSwgMHg0MjY0LCAweDc2RjIsIDB4MEVFMSwgMHg3NkY0LCAweDBCREEsCisgICAgMHg3NkY4LCAweDBBRUMsIDB4NzZGOSwgMHg0Qzc3LCAweDc2RkIsIDB4MTZCMiwgMHg3NkZDLCAweDNBMTksCisgICAgMHg3NkZFLCAweDA5NkMsIDB4NzcwMCwgMHg0Qzc4LCAweDc3MDEsIDB4MDlCMiwgMHg3NzA0LCAweDE2QjUsCisgICAgMHg3NzA3LCAweDE2QjQsIDB4NzcwOCwgMHgxNkIzLCAweDc3MDksIDB4MEQ5MSwgMHg3NzBBLCAweDQyNjUsCisgICAgMHg3NzBCLCAweDA2MDMsIDB4NzcwQywgMHgwNzVELCAweDc3MEUsIDB4NEM3OSwgMHg3NzE3LCAweDQ3MEEsCisgICAgMHg3NzE5LCAweDQyNjYsIDB4NzcxQSwgMHg0NzBCLCAweDc3MUIsIDB4MTZCQiwgMHg3NzFFLCAweDE2QjgsCisgICAgMHg3NzFGLCAweDBBMDUsIDB4NzcyMCwgMHgwRUJFLCAweDc3MjIsIDB4NEM3QSwgMHg3NzI0LCAweDE2QjcsCisgICAgMHg3NzI1LCAweDE2QjksIDB4NzcyNiwgMHgxNkJBLCAweDc3MjgsIDB4NEM3QiwgMHg3NzI5LCAweDE2QjYsCisgICAgMHg3NzJELCAweDQ3MEMsIDB4NzcyRiwgMHg0QzdDLCAweDc3MzQsIDB4M0ExQSwgMHg3NzM1LCAweDQ3MEQsCisgICAgMHg3NzM2LCAweDNBMUIsIDB4NzczNywgMHgxNkJDLCAweDc3MzgsIDB4MTZCRCwgMHg3NzM5LCAweDRDN0QsCisgICAgMHg3NzNBLCAweDBCQ0IsIDB4NzczQywgMHgwNjFGLCAweDc3M0UsIDB4NEM3RSwgMHg3NzQwLCAweDBCQTMsCisgICAgMHg3NzQ1LCAweDRDN0YsIDB4Nzc0NiwgMHgyMTdDLCAweDc3NDcsIDB4MTZCRSwgMHg3NzRBLCAweDRDODAsCisgICAgMHg3NzRELCAweDQyNjcsIDB4Nzc0RSwgMHg0MjY4LCAweDc3NEYsIDB4NEM4MSwgMHg3NzU4LCAweDQ3MTIsCisgICAgMHg3NzVBLCAweDE2QkYsIDB4Nzc1QiwgMHgxNkMyLCAweDc3NUMsIDB4M0ExQywgMHg3NzVFLCAweDRDODIsCisgICAgMHg3NzVGLCAweDNBMUQsIDB4Nzc2MCwgMHgzQTFFLCAweDc3NjEsIDB4MEEyRCwgMHg3NzYyLCAweDFFQzUsCisgICAgMHg3NzYzLCAweDBDOUMsIDB4Nzc2NCwgMHg0QzgzLCAweDc3NjUsIDB4MTZDMywgMHg3NzY2LCAweDBFODEsCisgICAgMHg3NzY3LCAweDRDODQsIDB4Nzc2OCwgMHgxNkMwLCAweDc3NkEsIDB4Mzc1NSwgMHg3NzZCLCAweDE2QzEsCisgICAgMHg3NzZDLCAweDRDODUsIDB4Nzc3MiwgMHgzQTFGLCAweDc3NzksIDB4MTZDNiwgMHg3NzdBLCAweDQyNjksCisgICAgMHg3NzdDLCAweDQ3MTQsIDB4Nzc3RCwgMHgzQTIwLCAweDc3N0UsIDB4MTZDNSwgMHg3NzdGLCAweDE2QzQsCisgICAgMHg3NzgwLCAweDQyNkEsIDB4Nzc4NCwgMHg0Qzg2LCAweDc3OEIsIDB4MTZDOCwgMHg3NzhDLCAweDRDODcsCisgICAgMHg3NzhELCAweDRDODgsIDB4Nzc4RSwgMHgxNkM3LCAweDc3OTEsIDB4MTZDOSwgMHg3Nzk0LCAweDQyNkIsCisgICAgMHg3Nzk1LCAweDNBMjEsIDB4Nzc5NiwgMHg0Qzg5LCAweDc3OUEsIDB4NDcxNywgMHg3NzlFLCAweDE2Q0IsCisgICAgMHg3NzlGLCAweDQ3MTgsIDB4NzdBMCwgMHgxNkNBLCAweDc3QTIsIDB4NDcxOSwgMHg3N0E0LCAweDQ3MUEsCisgICAgMHg3N0E1LCAweDBFMUQsIDB4NzdBNywgMHg0QzhBLCAweDc3QTksIDB4Mzc1NiwgMHg3N0FBLCAweDNBMjIsCisgICAgMHg3N0FDLCAweDA5NjAsIDB4NzdBRCwgMHgwRjhFLCAweDc3QUYsIDB4NEM4QiwgMHg3N0IwLCAweDE2Q0MsCisgICAgMHg3N0IzLCAweDBDOEYsIDB4NzdCNiwgMHgxNkNELCAweDc3QjcsIDB4NEM4QywgMHg3N0I5LCAweDE2Q0UsCisgICAgMHg3N0JCLCAweDE2RDIsIDB4NzdCQywgMHgxNkQwLCAweDc3QkQsIDB4MTZEMSwgMHg3N0JFLCAweDRDOEQsCisgICAgMHg3N0JGLCAweDE2Q0YsIDB4NzdDNywgMHgxNkQzLCAweDc3QzksIDB4NEM4RSwgMHg3N0NELCAweDE2RDQsCisgICAgMHg3N0QxLCAweDRDOEYsIDB4NzdENywgMHgxNkQ1LCAweDc3RDksIDB4NEM5MCwgMHg3N0RBLCAweDE2RDYsCisgICAgMHg3N0RCLCAweDBFQzMsIDB4NzdEQywgMHgxNkQ3LCAweDc3REUsIDB4NDcxQiwgMHg3N0RGLCAweDQ3MUMsCisgICAgMHg3N0UwLCAweDQyNkMsIDB4NzdFMiwgMHgwRUZDLCAweDc3RTMsIDB4MTZEOCwgMHg3N0U0LCAweDQ3MUQsCisgICAgMHg3N0U1LCAweDBCOEMsIDB4NzdFNiwgMHgzQTIzLCAweDc3RTcsIDB4MEQyMCwgMHg3N0U5LCAweDA2RTMsCisgICAgMHg3N0VBLCAweDQ3MUUsIDB4NzdFQywgMHg0NzFGLCAweDc3RUQsIDB4MEI3OSwgMHg3N0VFLCAweDE2RDksCisgICAgMHg3N0VGLCAweDA2QjIsIDB4NzdGMCwgMHgzQTI0LCAweDc3RjEsIDB4NEM5MSwgMHg3N0YzLCAweDBBNzQsCisgICAgMHg3N0Y0LCAweDNBMjUsIDB4NzdGQiwgMHg0NzIwLCAweDc3RkMsIDB4MTZEQSwgMHg3ODAyLCAweDA4MkQsCisgICAgMHg3ODA1LCAweDQ3MjIsIDB4NzgwNiwgMHgzQTI2LCAweDc4MDksIDB4NDcyMywgMHg3ODBDLCAweDE2REIsCisgICAgMHg3ODBELCAweDQ3MjQsIDB4NzgxMiwgMHgxNkRDLCAweDc4MTQsIDB4MDc1QSwgMHg3ODE1LCAweDA4NDUsCisgICAgMHg3ODE5LCAweDQ3MjUsIDB4NzgyMCwgMHgxNkRFLCAweDc4MjEsIDB4MjE3RSwgMHg3ODIyLCAweDNBMjcsCisgICAgMHg3ODI1LCAweDBDNTAsIDB4NzgyNiwgMHgwODQ2LCAweDc4MjcsIDB4MDY2OCwgMHg3ODJDLCAweDQ3MjYsCisgICAgMHg3ODJELCAweDNBMjgsIDB4NzgyRSwgMHgzQTI5LCAweDc4MzAsIDB4M0EyQSwgMHg3ODMyLCAweDBFNTIsCisgICAgMHg3ODM0LCAweDBEMDEsIDB4NzgzNSwgMHgzQTJCLCAweDc4MzcsIDB4NEM5MiwgMHg3ODNBLCAweDBDNTEsCisgICAgMHg3ODNGLCAweDA3RUUsIDB4Nzg0MywgMHg0MjZFLCAweDc4NDUsIDB4MTZFMCwgMHg3ODQ3LCAweDQ3MjcsCisgICAgMHg3ODRFLCAweDIxN0YsIDB4Nzg0RiwgMHgzNDFFLCAweDc4NTEsIDB4M0MzQywgMHg3ODVDLCAweDRDOTMsCisgICAgMHg3ODVELCAweDA5QjMsIDB4Nzg2NCwgMHgyMTgwLCAweDc4NjgsIDB4M0EyQywgMHg3ODZBLCAweDQ3MjgsCisgICAgMHg3ODZCLCAweDBGN0EsIDB4Nzg2QywgMHgwN0Q3LCAweDc4NkUsIDB4NDI2RiwgMHg3ODZGLCAweDA3NUIsCisgICAgMHg3ODcyLCAweDBEMzcsIDB4Nzg3NCwgMHgxNkUyLCAweDc4N0EsIDB4MjE4MSwgMHg3ODdDLCAweDE2RTQsCisgICAgMHg3ODdFLCAweDRDOTQsIDB4Nzg4MSwgMHgwNzlGLCAweDc4ODYsIDB4MTZFMywgMHg3ODg3LCAweDBDMTIsCisgICAgMHg3ODhBLCAweDQ3MkEsIDB4Nzg4QywgMHgxNkU2LCAweDc4OEQsIDB4MDU5NSwgMHg3ODhFLCAweDE2RTEsCisgICAgMHg3ODkxLCAweDBEN0UsIDB4Nzg5MywgMHgwNEQyLCAweDc4OTQsIDB4NDcyQiwgMHg3ODk1LCAweDA4NUMsCisgICAgMHg3ODk3LCAweDBGRjgsIDB4Nzg5OCwgMHg0Qzk1LCAweDc4OUEsIDB4MTZFNSwgMHg3ODlELCAweDQ3MkQsCisgICAgMHg3ODlFLCAweDNBMkQsIDB4Nzg5RiwgMHg0NzJFLCAweDc4QTEsIDB4NEM5NiwgMHg3OEEzLCAweDE2RTcsCisgICAgMHg3OEE0LCAweDQ3MkMsIDB4NzhBNywgMHgwRTFCLCAweDc4QTksIDB4MEE3RCwgMHg3OEFBLCAweDE2RTksCisgICAgMHg3OEFELCAweDQyNzIsIDB4NzhBRiwgMHgxNkVBLCAweDc4QjAsIDB4NDI3MCwgMHg3OEIxLCAweDRDOTcsCisgICAgMHg3OEIzLCAweDRDOTgsIDB4NzhCNSwgMHgxNkU4LCAweDc4QkEsIDB4MDVBQywgMHg3OEJCLCAweDQ3MkYsCisgICAgMHg3OEJDLCAweDE2RjAsIDB4NzhCRSwgMHgxNkVGLCAweDc4QzEsIDB4MDhEMywgMHg3OEM1LCAweDE2RjEsCisgICAgMHg3OEM2LCAweDE2RUMsIDB4NzhDOCwgMHgzQTJFLCAweDc4QzksIDB4NEM5OSwgMHg3OENBLCAweDE2RjIsCisgICAgMHg3OENCLCAweDE2RUQsIDB4NzhDQywgMHgzQTJGLCAweDc4Q0UsIDB4M0EzMCwgMHg3OEQwLCAweDBENkMsCisgICAgMHg3OEQxLCAweDE2RUIsIDB4NzhEMywgMHg0QzlBLCAweDc4RDQsIDB4MTZFRSwgMHg3OEQ1LCAweDQ3MzAsCisgICAgMHg3OERBLCAweDE2RjUsIDB4NzhFMCwgMHgzQTMyLCAweDc4RTEsIDB4M0EzMywgMHg3OEU0LCAweDNBMzEsCisgICAgMHg3OEU2LCAweDQ3MzEsIDB4NzhFNywgMHgxNkY0LCAweDc4RTgsIDB4MEU4RiwgMHg3OEVDLCAweDE2RjMsCisgICAgMHg3OEVGLCAweDA0QUYsIDB4NzhGMiwgMHgzQTM0LCAweDc4RjQsIDB4MTZGNywgMHg3OEY3LCAweDNBMzUsCisgICAgMHg3OEY5LCAweDQ3MzIsIDB4NzhGQSwgMHg0NzMzLCAweDc4RkIsIDB4M0EzNiwgMHg3OEZELCAweDE2RjYsCisgICAgMHg3OEZFLCAweDQ3MzQsIDB4NzkwMCwgMHg0MjczLCAweDc5MDEsIDB4MDlCNCwgMHg3OTA3LCAweDE2RjgsCisgICAgMHg3OTBDLCAweDRDOUIsIDB4NzkwRSwgMHgwQUM1LCAweDc5MTAsIDB4NDczNiwgMHg3OTExLCAweDE2RkEsCisgICAgMHg3OTEyLCAweDE2RjksIDB4NzkxOSwgMHgxNkZCLCAweDc5MUIsIDB4NDczNywgMHg3OTFDLCAweDQyNzQsCisgICAgMHg3OTFGLCAweDRDOUMsIDB4NzkyNSwgMHg0NzM4LCAweDc5MjYsIDB4MTZERCwgMHg3OTI3LCAweDRDOUQsCisgICAgMHg3OTI4LCAweDRDOUUsIDB4NzkyQSwgMHgxNkRGLCAweDc5MkIsIDB4MTZGRCwgMHg3OTJDLCAweDE2RkMsCisgICAgMHg3OTJFLCAweDQyNzUsIDB4NzkzMCwgMHgyMTgyLCAweDc5MzEsIDB4M0EzNywgMHg3OTM0LCAweDQyNzYsCisgICAgMHg3OTNBLCAweDA4RDQsIDB4NzkzQiwgMHgzQTM5LCAweDc5M0MsIDB4MEZCMSwgMHg3OTNELCAweDNBM0EsCisgICAgMHg3OTNFLCAweDA4RkUsIDB4NzkzRiwgMHg0QzlGLCAweDc5NDAsIDB4MTZGRSwgMHg3OTQxLCAweDA3MEQsCisgICAgMHg3OTQyLCAweDRDQTAsIDB4Nzk0NSwgMHgzQTNCLCAweDc5NDYsIDB4NDI3NywgMHg3OTQ3LCAweDA2NUEsCisgICAgMHg3OTQ4LCAweDA2NDEsIDB4Nzk0OSwgMHgwOEIxLCAweDc5NEEsIDB4NDczOSwgMHg3OTUwLCAweDBGMUUsCisgICAgMHg3OTUzLCAweDE3MDQsIDB4Nzk1NCwgMHg0Q0ExLCAweDc5NTUsIDB4MTcwMywgMHg3OTU2LCAweDBBQzYsCisgICAgMHg3OTU3LCAweDE3MDAsIDB4Nzk1OCwgMHg0NzNBLCAweDc5NUEsIDB4MTcwMiwgMHg3OTVCLCAweDNBM0MsCisgICAgMHg3OTVDLCAweDNBM0QsIDB4Nzk1RCwgMHgwOTU1LCAweDc5NUUsIDB4MEEwNiwgMHg3OTVGLCAweDE3MDEsCisgICAgMHg3OTYwLCAweDE2RkYsIDB4Nzk2MiwgMHgwQ0UwLCAweDc5NjUsIDB4MDlCNSwgMHg3OTY3LCAweDQ3M0MsCisgICAgMHg3OTY4LCAweDBEQUUsIDB4Nzk2QiwgMHg0Q0EyLCAweDc5NkQsIDB4MDg0NywgMHg3OTcyLCAweDQ3M0QsCisgICAgMHg3OTc3LCAweDBDNzIsIDB4Nzk3OSwgMHg0Mjc4LCAweDc5N0EsIDB4MTcwNSwgMHg3OTdDLCAweDRDQTMsCisgICAgMHg3OTdGLCAweDE3MDYsIDB4Nzk4MCwgMHgxNzFDLCAweDc5ODEsIDB4MDZEMCwgMHg3OTg0LCAweDBGRTMsCisgICAgMHg3OTg1LCAweDBBQjcsIDB4Nzk4QSwgMHgxNzA3LCAweDc5OEIsIDB4M0EzRSwgMHg3OThELCAweDA1NTIsCisgICAgMHg3OThFLCAweDBDMTMsIDB4Nzk4RiwgMHgwREYxLCAweDc5OTQsIDB4MjE4NiwgMHg3OTk1LCAweDQ3M0UsCisgICAgMHg3OTk2LCAweDNBM0YsIDB4Nzk5OCwgMHgzQTQwLCAweDc5OUIsIDB4MjE4OCwgMHg3OTlELCAweDE3MDgsCisgICAgMHg3OUExLCAweDQ3M0YsIDB4NzlBNiwgMHgwNjk0LCAweDc5QTcsIDB4MTcwOSwgMHg3OUE5LCAweDQ3NDAsCisgICAgMHg3OUFBLCAweDE3MEIsIDB4NzlBQiwgMHg0Q0E0LCAweDc5QUUsIDB4MTcwQywgMHg3OUIwLCAweDBDREYsCisgICAgMHg3OUIxLCAweDFFNEUsIDB4NzlCMywgMHgxNzBELCAweDc5QjQsIDB4NDc0MSwgMHg3OUI4LCAweDNBNDEsCisgICAgMHg3OUI5LCAweDE3MEUsIDB4NzlCQSwgMHgxNzBGLCAweDc5QkIsIDB4M0E0MiwgMHg3OUJELCAweDA2RDEsCisgICAgMHg3OUJFLCAweDA1NTMsIDB4NzlCRiwgMHgwQzlELCAweDc5QzAsIDB4MDkzMiwgMHg3OUMxLCAweDA4QjIsCisgICAgMHg3OUMyLCAweDQ3NDIsIDB4NzlDNCwgMHg0Q0E1LCAweDc5QzcsIDB4NDc0MywgMHg3OUM4LCAweDQyNzksCisgICAgMHg3OUM5LCAweDE3MTAsIDB4NzlDQSwgMHgzQTQzLCAweDc5Q0IsIDB4MDkzMywgMHg3OUNDLCAweDQ3NDQsCisgICAgMHg3OUNELCAweDQ3NDUsIDB4NzlEMSwgMHgwNTRBLCAweDc5RDIsIDB4MERCNSwgMHg3OUQ0LCAweDQyN0IsCisgICAgMHg3OUQ1LCAweDE3MTEsIDB4NzlENiwgMHg0NzQ2LCAweDc5RDgsIDB4MEQ3RiwgMHg3OURBLCAweDNBNDQsCisgICAgMHg3OURFLCAweDQyN0MsIDB4NzlERiwgMHgwQUM3LCAweDc5RTEsIDB4MTcxNCwgMHg3OUUzLCAweDE3MTUsCisgICAgMHg3OUU0LCAweDBEMUYsIDB4NzlFNiwgMHgwQTA3LCAweDc5RTcsIDB4MTcxMiwgMHg3OUU5LCAweDBCOUYsCisgICAgMHg3OUVBLCAweDRDQTYsIDB4NzlFQiwgMHg0MjdELCAweDc5RUMsIDB4MTcxMywgMHg3OUVELCAweDQyN0UsCisgICAgMHg3OUYwLCAweDA5QjYsIDB4NzlGQiwgMHgwNEEwLCAweDdBMDAsIDB4MDY0MywgMHg3QTAyLCAweDRDQTcsCisgICAgMHg3QTAzLCAweDNBNDUsIDB4N0EwNSwgMHgzNjMzLCAweDdBMDgsIDB4MTcxNiwgMHg3QTA5LCAweDNBNDYsCisgICAgMHg3QTBBLCAweDQ3NEIsIDB4N0EwQiwgMHgwQzE0LCAweDdBMEMsIDB4NENBOCwgMHg3QTBELCAweDE3MTcsCisgICAgMHg3QTBFLCAweDBBNkIsIDB4N0ExMSwgMHgzQTQ3LCAweDdBMTQsIDB4MEVCOSwgMHg3QTE1LCAweDQ3NEMsCisgICAgMHg3QTE3LCAweDBEOTUsIDB4N0ExOCwgMHgxNzE4LCAweDdBMTksIDB4MTcxOSwgMHg3QTFBLCAweDBCOTMsCisgICAgMHg3QTFCLCAweDQ3NEQsIDB4N0ExQywgMHgwRjhGLCAweDdBMUUsIDB4M0E0OCwgMHg3QTFGLCAweDE3MUIsCisgICAgMHg3QTIwLCAweDE3MUEsIDB4N0EyRCwgMHgzQTQ5LCAweDdBMkUsIDB4MDkxQiwgMHg3QTMwLCAweDRDQTksCisgICAgMHg3QTMxLCAweDE3MUQsIDB4N0EzMiwgMHgwNEI0LCAweDdBMzcsIDB4MTcyMCwgMHg3QTM4LCAweDQ3NEYsCisgICAgMHg3QTM5LCAweDNBNEEsIDB4N0EzQSwgMHg0Q0FBLCAweDdBM0IsIDB4MTcxRSwgMHg3QTNDLCAweDA1NTQsCisgICAgMHg3QTNELCAweDA3MjQsIDB4N0EzRSwgMHgxNzFGLCAweDdBM0YsIDB4MDdEOCwgMHg3QTQwLCAweDA4MDQsCisgICAgMHg3QTQyLCAweDBFMzYsIDB4N0E0MywgMHgxNzIxLCAweDdBNDQsIDB4NENBQiwgMHg3QTQ1LCAweDNBNEIsCisgICAgMHg3QTQ2LCAweDBFODIsIDB4N0E0NywgMHg0NzUwLCAweDdBNDksIDB4MTcyMywgMHg3QTRDLCAweDNBNEMsCisgICAgMHg3QTRELCAweDBBNzUsIDB4N0E0RSwgMHgwNEYxLCAweDdBNEYsIDB4MDUzQSwgMHg3QTUwLCAweDA0NzAsCisgICAgMHg3QTU2LCAweDQ3NTEsIDB4N0E1NywgMHgxNzIyLCAweDdBNTksIDB4NDc1MiwgMHg3QTVDLCAweDQ3NTMsCisgICAgMHg3QTVELCAweDNBNEQsIDB4N0E1RiwgMHg0NzU0LCAweDdBNjAsIDB4NEY1NiwgMHg3QTYxLCAweDE3MjQsCisgICAgMHg3QTYyLCAweDE3MjUsIDB4N0E2MywgMHgwOURGLCAweDdBNjcsIDB4NDc1NSwgMHg3QTY5LCAweDE3MjYsCisgICAgMHg3QTZBLCAweDQ3NTYsIDB4N0E2QiwgMHgwNUFELCAweDdBNkQsIDB4M0E0RiwgMHg3QTcwLCAweDE3MjgsCisgICAgMHg3QTc0LCAweDA3NDAsIDB4N0E3NSwgMHg0NzU3LCAweDdBNzYsIDB4MDY4MCwgMHg3QTc4LCAweDNBNTAsCisgICAgMHg3QTc5LCAweDE3MjksIDB4N0E3QSwgMHgwNkVELCAweDdBN0QsIDB4MTcyQSwgMHg3QTdGLCAweDBBQTAsCisgICAgMHg3QTgwLCAweDRDQUMsIDB4N0E4MSwgMHgwQ0E1LCAweDdBODIsIDB4NDc1OCwgMHg3QTgzLCAweDBBODQsCisgICAgMHg3QTg0LCAweDA4NjUsIDB4N0E4NSwgMHg0MjdGLCAweDdBODYsIDB4NENBRCwgMHg3QTg4LCAweDE3MkIsCisgICAgMHg3QThBLCAweDQ3NTksIDB4N0E5MCwgMHg0NzVBLCAweDdBOTIsIDB4MEJBMCwgMHg3QTkzLCAweDBBRUQsCisgICAgMHg3QTk0LCAweDRDQUUsIDB4N0E5NSwgMHgxNzJELCAweDdBOTYsIDB4MTcyRiwgMHg3QTk3LCAweDE3MkMsCisgICAgMHg3QTk4LCAweDE3MkUsIDB4N0E5RiwgMHgwNkY4LCAweDdBQTAsIDB4M0E1MSwgMHg3QUEzLCAweDNBNTIsCisgICAgMHg3QUE5LCAweDE3MzAsIDB4N0FBQSwgMHgwNkZDLCAweDdBQUMsIDB4NDc1QiwgMHg3QUFFLCAweDA2ODEsCisgICAgMHg3QUFGLCAweDBGM0MsIDB4N0FCMCwgMHgxNzMyLCAweDdBQjMsIDB4M0E1MywgMHg3QUI1LCAweDRDQUYsCisgICAgMHg3QUI2LCAweDE3MzMsIDB4N0FCOSwgMHg0NzVFLCAweDdBQkEsIDB4MDREMCwgMHg3QUJCLCAweDNBNTQsCisgICAgMHg3QUJDLCAweDNBNTUsIDB4N0FCRCwgMHg0Q0IwLCAweDdBQkUsIDB4NDc1RiwgMHg3QUJGLCAweDE3MzYsCisgICAgMHg3QUMzLCAweDA1RDQsIDB4N0FDNCwgMHgxNzM1LCAweDdBQzUsIDB4MTczNCwgMHg3QUM2LCAweDNBNTYsCisgICAgMHg3QUM3LCAweDE3MzgsIDB4N0FDOCwgMHgxNzMxLCAweDdBQ0EsIDB4MTczOSwgMHg3QUNCLCAweDBGNzEsCisgICAgMHg3QUNDLCAweDQ3NjEsIDB4N0FDRCwgMHgxNzNBLCAweDdBQ0UsIDB4NDI4MSwgMHg3QUNGLCAweDE3M0IsCisgICAgMHg3QUQxLCAweDIxODksIDB4N0FEMiwgMHgxMUM1LCAweDdBRDMsIDB4MTczRCwgMHg3QUQ1LCAweDE3M0MsCisgICAgMHg3QUQ5LCAweDE3M0UsIDB4N0FEQSwgMHgxNzNGLCAweDdBREMsIDB4MEY3RCwgMHg3QURELCAweDE3NDAsCisgICAgMHg3QURGLCAweDFDMDgsIDB4N0FFMCwgMHgwOUI3LCAweDdBRTEsIDB4MTc0MSwgMHg3QUUyLCAweDE3NDIsCisgICAgMHg3QUUzLCAweDA5NjEsIDB4N0FFNSwgMHgwQzkwLCAweDdBRTYsIDB4MTc0MywgMHg3QUU3LCAweDIxOEEsCisgICAgMHg3QUU4LCAweDQ3NjIsIDB4N0FFQSwgMHgwQjY2LCAweDdBRUIsIDB4MjE4QywgMHg3QUVELCAweDE3NDQsCisgICAgMHg3QUVGLCAweDBCN0EsIDB4N0FGMCwgMHgxNzQ1LCAweDdBRjQsIDB4NDc2MywgMHg3QUY2LCAweDA2OUQsCisgICAgMHg3QUY4LCAweDEwNzYsIDB4N0FGOSwgMHgwQjlCLCAweDdBRkEsIDB4MDhERiwgMHg3QUZELCAweDQyODIsCisgICAgMHg3QUZFLCAweDRDQjEsIDB4N0FGRiwgMHgwNjA0LCAweDdCMDIsIDB4MTc0NiwgMHg3QjA0LCAweDE3NTMsCisgICAgMHg3QjA2LCAweDE3NDksIDB4N0IwNywgMHgzQTU3LCAweDdCMDgsIDB4MDY4MiwgMHg3QjBBLCAweDE3NDgsCisgICAgMHg3QjBCLCAweDE3NTUsIDB4N0IwRiwgMHgxNzQ3LCAweDdCMTEsIDB4MDlCOCwgMHg3QjEyLCAweDQyODMsCisgICAgMHg3QjE0LCAweDNBNTgsIDB4N0IxOCwgMHgxNzRCLCAweDdCMTksIDB4MTc0QywgMHg3QjFCLCAweDBDMjUsCisgICAgMHg3QjFFLCAweDE3NEQsIDB4N0IyMCwgMHgwNUJDLCAweDdCMjUsIDB4MEEyMCwgMHg3QjI2LCAweDBERDYsCisgICAgMHg3QjI3LCAweDNBNTksIDB4N0IyOCwgMHgxNzRGLCAweDdCMkEsIDB4NDc2OCwgMHg3QjJCLCAweDRDQjIsCisgICAgMHg3QjJDLCAweDBCNDgsIDB4N0IyRCwgMHg0Mjg0LCAweDdCMkUsIDB4NDc2OSwgMHg3QjJGLCAweDQ3NkEsCisgICAgMHg3QjMxLCAweDNBNUEsIDB4N0IzMywgMHgxNzRBLCAweDdCMzUsIDB4MTc0RSwgMHg3QjM2LCAweDE3NTAsCisgICAgMHg3QjM5LCAweDA4NkIsIDB4N0IzQiwgMHg0Mjg1LCAweDdCM0QsIDB4NDc2NywgMHg3QjQxLCAweDQ3NkUsCisgICAgMHg3QjQ1LCAweDE3NTcsIDB4N0I0NiwgMHgwREEwLCAweDdCNDcsIDB4M0E1QiwgMHg3QjQ4LCAweDBEM0EsCisgICAgMHg3QjQ5LCAweDBDNzMsIDB4N0I0QiwgMHgwNkQyLCAweDdCNEMsIDB4MTc1NiwgMHg3QjRELCAweDE3NTQsCisgICAgMHg3QjRFLCAweDNBNUMsIDB4N0I0RiwgMHgwRDQ5LCAweDdCNTAsIDB4MTc1MSwgMHg3QjUxLCAweDBCOUMsCisgICAgMHg3QjUyLCAweDBDNzUsIDB4N0I1MywgMHgzNzVELCAweDdCNTQsIDB4MEM3NCwgMHg3QjU1LCAweDQ3NzAsCisgICAgMHg3QjU2LCAweDA4NjYsIDB4N0I1RCwgMHgxNzY5LCAweDdCNjAsIDB4M0E1RCwgMHg3QjY0LCAweDQ3NzIsCisgICAgMHg3QjY1LCAweDE3NTksIDB4N0I2NiwgMHg0NzczLCAweDdCNjcsIDB4MTc1QiwgMHg3QjY5LCAweDNBNUUsCisgICAgMHg3QjZDLCAweDE3NUUsIDB4N0I2RCwgMHgzQTVGLCAweDdCNkUsIDB4MTc1RiwgMHg3QjZGLCAweDQyODYsCisgICAgMHg3QjcwLCAweDE3NUMsIDB4N0I3MSwgMHgxNzVELCAweDdCNzIsIDB4M0E2MCwgMHg3QjczLCAweDQ3NzQsCisgICAgMHg3Qjc0LCAweDE3NUEsIDB4N0I3NSwgMHgxNzU4LCAweDdCNzcsIDB4NENCMywgMHg3Qjc5LCAweDQ3NzEsCisgICAgMHg3QjdBLCAweDE3NTIsIDB4N0I3RiwgMHg0NzZELCAweDdCODYsIDB4MEUxRiwgMHg3Qjg3LCAweDA1NTUsCisgICAgMHg3QjhCLCAweDE3NjYsIDB4N0I4RCwgMHgxNzYzLCAweDdCOEYsIDB4MTc2OCwgMHg3QjkwLCAweDQ3NzcsCisgICAgMHg3QjkxLCAweDNBNjEsIDB4N0I5MiwgMHgxNzY3LCAweDdCOTQsIDB4MEQyOSwgMHg3Qjk1LCAweDBFQjMsCisgICAgMHg3Qjk3LCAweDA4ODksIDB4N0I5OCwgMHgxNzYxLCAweDdCOTksIDB4MTc2QSwgMHg3QjlBLCAweDE3NjUsCisgICAgMHg3QjlCLCAweDQ3NzgsIDB4N0I5QywgMHgxNzY0LCAweDdCOUQsIDB4MTc2MCwgMHg3QjlFLCAweDIxOEQsCisgICAgMHg3QjlGLCAweDE3NjIsIDB4N0JBMCwgMHg0Q0I0LCAweDdCQTEsIDB4MDYwNSwgMHg3QkFBLCAweDBCN0IsCisgICAgMHg3QkFDLCAweDRDQjUsIDB4N0JBRCwgMHgwQUExLCAweDdCQUYsIDB4M0E2MiwgMHg3QkIwLCAweDRDQjYsCisgICAgMHg3QkIxLCAweDBEMzYsIDB4N0JCNCwgMHgxNzZGLCAweDdCQjUsIDB4NDc3QSwgMHg3QkI4LCAweDBEMzgsCisgICAgMHg3QkJDLCAweDQ3N0IsIDB4N0JDMCwgMHgwQTg1LCAweDdCQzEsIDB4MTc2QywgMHg3QkM0LCAweDBENjMsCisgICAgMHg3QkM1LCAweDQ3N0MsIDB4N0JDNiwgMHgxNzcwLCAweDdCQzcsIDB4MEUyMywgMHg3QkM5LCAweDBCOTksCisgICAgMHg3QkNBLCAweDQ3N0QsIDB4N0JDQiwgMHgxNzZCLCAweDdCQ0MsIDB4MTc2RCwgMHg3QkNGLCAweDE3NkUsCisgICAgMHg3QkQ0LCAweDQ3ODAsIDB4N0JENiwgMHg0NzgxLCAweDdCRDcsIDB4M0E2MywgMHg3QkQ5LCAweDNBNjQsCisgICAgMHg3QkRBLCAweDQ3ODIsIDB4N0JERCwgMHgxNzcxLCAweDdCRTAsIDB4MDhGMCwgMHg3QkU0LCAweDBDOUUsCisgICAgMHg3QkU1LCAweDE3NzYsIDB4N0JFNiwgMHgxNzc1LCAweDdCRTgsIDB4NENCNywgMHg3QkU5LCAweDE3NzIsCisgICAgMHg3QkVBLCAweDQ3ODMsIDB4N0JFRCwgMHgwRkRDLCAweDdCRjAsIDB4NDc4NCwgMHg3QkYyLCAweDRDQjgsCisgICAgMHg3QkYzLCAweDE3N0IsIDB4N0JGNiwgMHgxNzdGLCAweDdCRjcsIDB4MTc3QywgMHg3QkY4LCAweDRDQjksCisgICAgMHg3QkZDLCAweDRDQkEsIDB4N0JGRSwgMHg0Q0JCLCAweDdDMDAsIDB4MTc3OCwgMHg3QzAxLCAweDQyODcsCisgICAgMHg3QzAzLCAweDQ3ODUsIDB4N0MwNywgMHgxNzc5LCAweDdDMDksIDB4NENCQywgMHg3QzBCLCAweDNBNjUsCisgICAgMHg3QzBELCAweDE3N0UsIDB4N0MwRSwgMHg0Nzg2LCAweDdDMEYsIDB4M0E2NiwgMHg3QzExLCAweDE3NzMsCisgICAgMHg3QzEyLCAweDEwRUEsIDB4N0MxMywgMHgxNzdBLCAweDdDMTQsIDB4MTc3NCwgMHg3QzE3LCAweDE3N0QsCisgICAgMHg3QzFFLCAweDFFM0IsIDB4N0MxRiwgMHgxNzgzLCAweDdDMjAsIDB4M0E2NywgMHg3QzIxLCAweDA2MDYsCisgICAgMHg3QzIzLCAweDE3ODAsIDB4N0MyNiwgMHgzQTY4LCAweDdDMjcsIDB4MTc4MSwgMHg3QzI4LCAweDRDQkQsCisgICAgMHg3QzJBLCAweDE3ODIsIDB4N0MyQiwgMHgxNzg1LCAweDdDMkYsIDB4NENCRSwgMHg3QzMxLCAweDNBNjksCisgICAgMHg3QzMzLCAweDQyODgsIDB4N0MzNiwgMHgzQTZBLCAweDdDMzcsIDB4MTc4NCwgMHg3QzM4LCAweDBEOEEsCisgICAgMHg3QzNELCAweDE3ODYsIDB4N0MzRSwgMHgwRkM0LCAweDdDM0YsIDB4MEUzRCwgMHg3QzQwLCAweDE3OEIsCisgICAgMHg3QzQyLCAweDRDQkYsIDB4N0M0MywgMHgxNzg4LCAweDdDNDUsIDB4NDc4NywgMHg3QzRBLCAweDQ3ODgsCisgICAgMHg3QzRDLCAweDE3ODcsIDB4N0M0RCwgMHgwQTc2LCAweDdDNEYsIDB4MTc4QSwgMHg3QzUwLCAweDE3OEMsCisgICAgMHg3QzUxLCAweDNBNkIsIDB4N0M1MiwgMHg0Q0MwLCAweDdDNTMsIDB4NENDMSwgMHg3QzU0LCAweDE3ODksCisgICAgMHg3QzU2LCAweDE3OTAsIDB4N0M1NywgMHg0Nzg5LCAweDdDNTgsIDB4MTc4RCwgMHg3QzU5LCAweDNBNkMsCisgICAgMHg3QzVCLCAweDRDQzIsIDB4N0M1QywgMHg0Q0MzLCAweDdDNUQsIDB4NENDNCwgMHg3QzVFLCAweDQ3OEEsCisgICAgMHg3QzVGLCAweDE3OEUsIDB4N0M2MCwgMHgxNzc3LCAweDdDNjEsIDB4NDc4QiwgMHg3QzY0LCAweDE3OEYsCisgICAgMHg3QzY1LCAweDE3OTEsIDB4N0M2NywgMHgzQTZELCAweDdDNjksIDB4NDc4QywgMHg3QzZDLCAweDE3OTIsCisgICAgMHg3QzZELCAweDQyOEEsIDB4N0M2RSwgMHgzQTZFLCAweDdDNkYsIDB4NDc4RCwgMHg3QzcwLCAweDNBNkYsCisgICAgMHg3QzcyLCAweDRDQzUsIDB4N0M3MywgMHgwRTE2LCAweDdDNzUsIDB4MTc5MywgMHg3Qzc5LCAweDQyOEIsCisgICAgMHg3QzdCLCAweDM3MEUsIDB4N0M3RCwgMHg0Q0M2LCAweDdDN0UsIDB4MEVFRSwgMHg3QzgxLCAweDA2QzYsCisgICAgMHg3QzgyLCAweDA2RkYsIDB4N0M4MywgMHgxNzk0LCAweDdDODcsIDB4NENDNywgMHg3Qzg5LCAweDBFMDQsCisgICAgMHg3QzhCLCAweDBBMkUsIDB4N0M4RCwgMHgwRUJDLCAweDdDOEYsIDB4NDI4QywgMHg3QzkwLCAweDE3OTUsCisgICAgMHg3QzkyLCAweDBGN0IsIDB4N0M5NCwgMHg0MjhELCAweDdDOTUsIDB4MEQyQSwgMHg3Qzk3LCAweDBBQzgsCisgICAgMHg3Qzk4LCAweDBDRUEsIDB4N0M5QiwgMHgwOTU3LCAweDdDOUUsIDB4NENDOCwgMHg3QzlGLCAweDA0ODQsCisgICAgMHg3Q0EwLCAweDQyOEUsIDB4N0NBMSwgMHgxNzlBLCAweDdDQTIsIDB4MTc5OCwgMHg3Q0E0LCAweDE3OTYsCisgICAgMHg3Q0E1LCAweDA1REQsIDB4N0NBNiwgMHg0NzkxLCAweDdDQTcsIDB4MDlCOSwgMHg3Q0E4LCAweDE3OUIsCisgICAgMHg3Q0FCLCAweDE3OTksIDB4N0NBRCwgMHgxNzk3LCAweDdDQUUsIDB4MTc5RiwgMHg3Q0IxLCAweDE3OUUsCisgICAgMHg3Q0IyLCAweDE3OUQsIDB4N0NCMywgMHgxNzlDLCAweDdDQjYsIDB4NDc5MywgMHg3Q0I3LCAweDQ3OTQsCisgICAgMHg3Q0I5LCAweDE3QTAsIDB4N0NCQSwgMHg0Q0M5LCAweDdDQkMsIDB4M0E3MCwgMHg3Q0JELCAweDE3QTEsCisgICAgMHg3Q0JFLCAweDBBNUUsIDB4N0NCRiwgMHgzQTcxLCAweDdDQzAsIDB4MTdBMiwgMHg3Q0MyLCAweDE3QTQsCisgICAgMHg3Q0M0LCAweDQ3OTYsIDB4N0NDNSwgMHgxN0EzLCAweDdDQzcsIDB4NENDQSwgMHg3Q0M4LCAweDNBNzIsCisgICAgMHg3Q0M5LCAweDNBNzMsIDB4N0NDQSwgMHgwNzg2LCAweDdDQ0QsIDB4NDc5OCwgMHg3Q0NFLCAweDBBQkEsCisgICAgMHg3Q0QyLCAweDE3QTYsIDB4N0NEMywgMHg0Q0NCLCAweDdDRDUsIDB4NDI4RiwgMHg3Q0Q2LCAweDBDNzYsCisgICAgMHg3Q0Q3LCAweDNBNzQsIDB4N0NEOCwgMHgxN0E1LCAweDdDRDksIDB4M0E3NSwgMHg3Q0RBLCAweDRDQ0MsCisgICAgMHg3Q0RDLCAweDE3QTcsIDB4N0NERCwgMHgzQTc2LCAweDdDREUsIDB4MEUwNSwgMHg3Q0RGLCAweDBBRUUsCisgICAgMHg3Q0UwLCAweDA3RDksIDB4N0NFMiwgMHgxN0E4LCAweDdDRTYsIDB4NDc5QiwgMHg3Q0U3LCAweDBGOTAsCisgICAgMHg3Q0VCLCAweDNBNzcsIDB4N0NFRiwgMHgxN0FBLCAweDdDRjIsIDB4MTdBQiwgMHg3Q0Y0LCAweDE3QUMsCisgICAgMHg3Q0Y1LCAweDQ3OUQsIDB4N0NGNiwgMHgxN0FELCAweDdDRjgsIDB4MDhCMywgMHg3Q0ZBLCAweDE3QUUsCisgICAgMHg3Q0ZCLCAweDA3MjUsIDB4N0NGRSwgMHgwNjg0LCAweDdEMDAsIDB4MDY0NCwgMHg3RDAyLCAweDE3QjAsCisgICAgMHg3RDAzLCAweDQ3OUUsIDB4N0QwNCwgMHgwRUZGLCAweDdEMDUsIDB4MDdEQSwgMHg3RDA2LCAweDE3QUYsCisgICAgMHg3RDA3LCAweDNBNzgsIDB4N0QwOCwgMHgzQTc5LCAweDdEMDksIDB4M0E3QSwgMHg3RDBBLCAweDE3QjMsCisgICAgMHg3RDBCLCAweDBFRjIsIDB4N0QwRCwgMHgwQ0YyLCAweDdEMTAsIDB4MERBNSwgMHg3RDEyLCAweDQ3QTAsCisgICAgMHg3RDEzLCAweDNBN0IsIDB4N0QxNCwgMHgwOTZELCAweDdEMTUsIDB4MTdCMiwgMHg3RDE3LCAweDA4RkYsCisgICAgMHg3RDE4LCAweDA3REIsIDB4N0QxOSwgMHgwOEI0LCAweDdEMUEsIDB4MDY4MywgMHg3RDFCLCAweDBFMDYsCisgICAgMHg3RDFDLCAweDE3QjEsIDB4N0QxRCwgMHgzQTdDLCAweDdEMUUsIDB4NDdBMSwgMHg3RDIwLCAweDBBQzksCisgICAgMHg3RDIxLCAweDBFNzAsIDB4N0QyMiwgMHgwODY3LCAweDdEMjMsIDB4M0E3RCwgMHg3RDJCLCAweDA4QjUsCisgICAgMHg3RDJDLCAweDBCRjksIDB4N0QyRSwgMHgxN0I2LCAweDdEMkYsIDB4MEZBNywgMHg3RDMwLCAweDA4NDksCisgICAgMHg3RDMxLCAweDQyOTAsIDB4N0QzMiwgMHgxN0I3LCAweDdEMzMsIDB4MEEwOCwgMHg3RDM1LCAweDE3QjksCisgICAgMHg3RDM5LCAweDA5QkEsIDB4N0QzQSwgMHgwODIwLCAweDdEM0MsIDB4NENDRCwgMHg3RDNELCAweDQ3QTQsCisgICAgMHg3RDNFLCAweDQ3QTUsIDB4N0QzRiwgMHgxN0I4LCAweDdENDAsIDB4NDdBNiwgMHg3RDQxLCAweDNBN0UsCisgICAgMHg3RDQyLCAweDA5MzQsIDB4N0Q0MywgMHgwNzcyLCAweDdENDQsIDB4MEFDQSwgMHg3RDQ1LCAweDE3QjQsCisgICAgMHg3RDQ2LCAweDE3QkEsIDB4N0Q0NywgMHg0N0E3LCAweDdENDgsIDB4MjE4RiwgMHg3RDRCLCAweDE3QjUsCisgICAgMHg3RDRDLCAweDA3MjYsIDB4N0Q0RCwgMHg0Q0NFLCAweDdENEUsIDB4MTdCRCwgMHg3RDRGLCAweDE3QzEsCisgICAgMHg3RDUwLCAweDA3NDEsIDB4N0Q1MywgMHgzQTdGLCAweDdENTUsIDB4MzYzQSwgMHg3RDU2LCAweDE3QkMsCisgICAgMHg3RDU5LCAweDNBODAsIDB4N0Q1QSwgMHg0N0FCLCAweDdENUIsIDB4MTdDNSwgMHg3RDVDLCAweDQyOTEsCisgICAgMHg3RDVELCAweDNBODEsIDB4N0Q1RSwgMHgwN0RDLCAweDdENjEsIDB4MEY1NywgMHg3RDYyLCAweDA0ODAsCisgICAgMHg3RDYzLCAweDE3QzIsIDB4N0Q2NiwgMHgwNjg1LCAweDdENjgsIDB4MTdCRiwgMHg3RDZBLCAweDQ3QUMsCisgICAgMHg3RDZFLCAweDE3QzAsIDB4N0Q3MCwgMHg0N0FELCAweDdENzEsIDB4MEM3NywgMHg3RDcyLCAweDE3QkUsCisgICAgMHg3RDczLCAweDE3QkIsIDB4N0Q3NSwgMHgwNTg2LCAweDdENzYsIDB4MEE4OCwgMHg3RDc5LCAweDA3NUMsCisgICAgMHg3RDdBLCAweDNBODIsIDB4N0Q3RCwgMHgxN0M3LCAweDdEN0YsIDB4NDdBRiwgMHg3RDgyLCAweDRDQ0YsCisgICAgMHg3RDgzLCAweDQyOTIsIDB4N0Q4NSwgMHg0Q0QwLCAweDdEODYsIDB4M0E4MywgMHg3RDg4LCAweDQ3QjEsCisgICAgMHg3RDg5LCAweDE3QzQsIDB4N0Q4QiwgMHgzQTg0LCAweDdEOEMsIDB4M0E4NSwgMHg3RDhELCAweDRDRDEsCisgICAgMHg3RDhGLCAweDE3QzYsIDB4N0Q5MSwgMHg0Q0QyLCAweDdEOTMsIDB4MTdDMywgMHg3RDk3LCAweDQ3QjIsCisgICAgMHg3RDk5LCAweDA3MjcsIDB4N0Q5QSwgMHgwQjEzLCAweDdEOUIsIDB4MTdDOCwgMHg3RDlDLCAweDBBRjAsCisgICAgMHg3RDlELCAweDQ3QjQsIDB4N0Q5RSwgMHg0Q0QzLCAweDdEOUYsIDB4MTdENSwgMHg3REEwLCAweDIxOTIsCisgICAgMHg3REEyLCAweDE3RDEsIDB4N0RBMywgMHgxN0NCLCAweDdEQTYsIDB4NDI5MywgMHg3REE3LCAweDQ3QjUsCisgICAgMHg3REFBLCAweDQ3QjYsIDB4N0RBQiwgMHgxN0NGLCAweDdEQUMsIDB4MDkyNiwgMHg3REFELCAweDA0QTEsCisgICAgMHg3REFFLCAweDE3Q0EsIDB4N0RBRiwgMHgxN0QyLCAweDdEQjAsIDB4MTdENiwgMHg3REIxLCAweDA3REQsCisgICAgMHg3REIyLCAweDBFRTIsIDB4N0RCMywgMHg0Q0Q0LCAweDdEQjQsIDB4MEJGMiwgMHg3REI1LCAweDE3Q0MsCisgICAgMHg3REI2LCAweDQ3QjcsIDB4N0RCNywgMHgyMTkxLCAweDdEQjgsIDB4MTdENCwgMHg3REI5LCAweDRDRDUsCisgICAgMHg3REJBLCAweDE3QzksIDB4N0RCQiwgMHgwQjdDLCAweDdEQkQsIDB4MTdDRSwgMHg3REJFLCAweDA0ODEsCisgICAgMHg3REJGLCAweDBFRDYsIDB4N0RDMCwgMHg0N0I4LCAweDdEQzIsIDB4NDI5NCwgMHg3REM3LCAweDE3Q0QsCisgICAgMHg3RENBLCAweDA2RDMsIDB4N0RDQiwgMHgwRDgwLCAweDdEQ0MsIDB4M0E4NiwgMHg3RENGLCAweDBBRUYsCisgICAgMHg3REQwLCAweDRDRDYsIDB4N0REMSwgMHgwRjk4LCAweDdERDIsIDB4MDk3OSwgMHg3REQ1LCAweDE3RkQsCisgICAgMHg3REQ2LCAweDIxOTMsIDB4N0RENywgMHg0N0I5LCAweDdERDgsIDB4MTdENywgMHg3REQ5LCAweDQ3QkEsCisgICAgMHg3RERBLCAweDBBQTIsIDB4N0REQywgMHgxN0QzLCAweDdEREQsIDB4MTdEOCwgMHg3RERFLCAweDE3REEsCisgICAgMHg3REUwLCAweDBDMTUsIDB4N0RFMSwgMHgxN0RELCAweDdERTMsIDB4MzQwQSwgMHg3REU0LCAweDE3RDksCisgICAgMHg3REU1LCAweDRDRDcsIDB4N0RFNiwgMHg0N0JCLCAweDdERTgsIDB4MEUyNCwgMHg3REU5LCAweDA2MDcsCisgICAgMHg3REVCLCAweDNBODcsIDB4N0RFQywgMHgwRUQ3LCAweDdERUYsIDB4MDRBMiwgMHg3REYxLCAweDNBODgsCisgICAgMHg3REYyLCAweDE3REMsIDB4N0RGNCwgMHgwRkM1LCAweDdERjUsIDB4NENEOCwgMHg3REY2LCAweDRDRDksCisgICAgMHg3REY5LCAweDNBODksIDB4N0RGQiwgMHgxN0RCLCAweDdFMDEsIDB4MDUxMSwgMHg3RTA0LCAweDBDQzQsCisgICAgMHg3RTA1LCAweDE3REUsIDB4N0UwOCwgMHgzQThBLCAweDdFMDksIDB4MTdFNSwgMHg3RTBBLCAweDE3REYsCisgICAgMHg3RTBCLCAweDE3RTYsIDB4N0UxMCwgMHg0N0JGLCAweDdFMTEsIDB4M0E4QiwgMHg3RTEyLCAweDE3RTIsCisgICAgMHg3RTE1LCAweDNBOEMsIDB4N0UxNywgMHg0N0MwLCAweDdFMUIsIDB4MEQzMSwgMHg3RTFELCAweDQ3QzEsCisgICAgMHg3RTFFLCAweDA4RjYsIDB4N0UxRiwgMHgxN0U0LCAweDdFMjAsIDB4M0E4RCwgMHg3RTIxLCAweDE3RTEsCisgICAgMHg3RTIyLCAweDE3RTcsIDB4N0UyMywgMHgxN0UwLCAweDdFMjYsIDB4MDk0RSwgMHg3RTI3LCAweDQ3QzIsCisgICAgMHg3RTI4LCAweDQyOTUsIDB4N0UyQiwgMHgwRTUzLCAweDdFMkMsIDB4NDdDMywgMHg3RTJFLCAweDA5NTYsCisgICAgMHg3RTJGLCAweDRDREEsIDB4N0UzMSwgMHgxN0UzLCAweDdFMzIsIDB4MTdFRiwgMHg3RTM1LCAweDE3RUIsCisgICAgMHg3RTM2LCAweDRDREIsIDB4N0UzNywgMHgxN0VFLCAweDdFMzksIDB4MTdFQywgMHg3RTNBLCAweDE3RjAsCisgICAgMHg3RTNCLCAweDE3RUEsIDB4N0UzRCwgMHgxN0QwLCAweDdFM0UsIDB4MEE3NywgMHg3RTQxLCAweDBENUYsCisgICAgMHg3RTQzLCAweDE3RUQsIDB4N0U0NCwgMHg0Q0RDLCAweDdFNDUsIDB4NDdDNCwgMHg3RTQ2LCAweDE3RTgsCisgICAgMHg3RTQ3LCAweDNBOEUsIDB4N0U0OCwgMHgzNzY3LCAweDdFNEEsIDB4MEFBMywgMHg3RTRCLCAweDA3MjgsCisgICAgMHg3RTRELCAweDA5MzUsIDB4N0U1MiwgMHgyMTk0LCAweDdFNTQsIDB4MDlFQiwgMHg3RTU1LCAweDBBQjgsCisgICAgMHg3RTU2LCAweDE3RjMsIDB4N0U1OSwgMHgxN0Y1LCAweDdFNUEsIDB4MTdGNiwgMHg3RTVELCAweDE3RjIsCisgICAgMHg3RTVFLCAweDE3RjQsIDB4N0U2MSwgMHgxRTExLCAweDdFNjIsIDB4M0E4RiwgMHg3RTY2LCAweDE3RTksCisgICAgMHg3RTY3LCAweDE3RjEsIDB4N0U2OSwgMHgxN0Y5LCAweDdFNkEsIDB4MTdGOCwgMHg3RTZCLCAweDFERjcsCisgICAgMHg3RTZELCAweDBFQTgsIDB4N0U2RSwgMHgzQTkwLCAweDdFNkYsIDB4NENERCwgMHg3RTcwLCAweDA3MDEsCisgICAgMHg3RTczLCAweDNBOTEsIDB4N0U3NSwgMHg0N0M1LCAweDdFNzgsIDB4NENERSwgMHg3RTc5LCAweDE3RjcsCisgICAgMHg3RTdCLCAweDE3RkIsIDB4N0U3QywgMHgxN0ZBLCAweDdFN0QsIDB4MTdGRSwgMHg3RTdFLCAweDQ3QzYsCisgICAgMHg3RTdGLCAweDE4MDAsIDB4N0U4MSwgMHg0Q0RGLCAweDdFODIsIDB4MDg4QSwgMHg3RTgzLCAweDE3RkMsCisgICAgMHg3RTg2LCAweDQ3QzcsIDB4N0U4NywgMHg0N0M4LCAweDdFODgsIDB4MTgwMSwgMHg3RTg5LCAweDE4MDIsCisgICAgMHg3RThBLCAweDIwQTcsIDB4N0U4QywgMHgxODAzLCAweDdFOEQsIDB4M0E5MiwgMHg3RThFLCAweDE4MDksCisgICAgMHg3RThGLCAweDBDMzUsIDB4N0U5MCwgMHgxODA1LCAweDdFOTEsIDB4M0E5MywgMHg3RTkyLCAweDE4MDQsCisgICAgMHg3RTkzLCAweDE4MDYsIDB4N0U5NCwgMHgxODA3LCAweDdFOTYsIDB4MTgwOCwgMHg3RTk4LCAweDNBOTQsCisgICAgMHg3RTlBLCAweDQ3Q0EsIDB4N0U5QiwgMHgxODBBLCAweDdFOUMsIDB4MTgwQiwgMHg3RjM2LCAweDA2MDgsCisgICAgMHg3RjM4LCAweDE4MEMsIDB4N0YzQSwgMHgxODBELCAweDdGM0IsIDB4NDdDRCwgMHg3RjNDLCAweDQ3Q0MsCisgICAgMHg3RjNELCAweDRDRTAsIDB4N0YzRSwgMHg0N0NFLCAweDdGNDMsIDB4NDdDRiwgMHg3RjQ0LCAweDNBOTUsCisgICAgMHg3RjQ1LCAweDE4MEUsIDB4N0Y0NywgMHgyMTk1LCAweDdGNEMsIDB4MTgwRiwgMHg3RjRELCAweDE4MTAsCisgICAgMHg3RjRFLCAweDE4MTEsIDB4N0Y0RiwgMHgzQTk2LCAweDdGNTAsIDB4MTgxMiwgMHg3RjUxLCAweDE4MTMsCisgICAgMHg3RjUyLCAweDNBOTcsIDB4N0Y1MywgMHgzQTk4LCAweDdGNTQsIDB4MTgxNSwgMHg3RjU1LCAweDE4MTQsCisgICAgMHg3RjU4LCAweDE4MTYsIDB4N0Y1QiwgMHg0Q0UxLCAweDdGNUQsIDB4NENFMiwgMHg3RjVGLCAweDE4MTcsCisgICAgMHg3RjYwLCAweDE4MTgsIDB4N0Y2MSwgMHgzQTk5LCAweDdGNjMsIDB4NDdEMywgMHg3RjY0LCAweDQ3RDQsCisgICAgMHg3RjY1LCAweDRDRTMsIDB4N0Y2NywgMHgxODFCLCAweDdGNjgsIDB4MTgxOSwgMHg3RjY5LCAweDE4MUEsCisgICAgMHg3RjZBLCAweDA4NTEsIDB4N0Y2QiwgMHgwNzI5LCAweDdGNkQsIDB4NDdENSwgMHg3RjZFLCAweDBCOTQsCisgICAgMHg3RjcwLCAweDBENDcsIDB4N0Y3MSwgMHg0Q0U0LCAweDdGNzIsIDB4MDk3QSwgMHg3Rjc1LCAweDBEMDMsCisgICAgMHg3Rjc3LCAweDBEODEsIDB4N0Y3OCwgMHgxODFDLCAweDdGNzksIDB4MTMzNiwgMHg3RjdELCAweDQ3RDYsCisgICAgMHg3RjdFLCAweDQ3RDcsIDB4N0Y3RiwgMHg0Q0U1LCAweDdGODAsIDB4NENFNiwgMHg3RjgyLCAweDE4MUQsCisgICAgMHg3RjgzLCAweDE4MUYsIDB4N0Y4NSwgMHgwRjRGLCAweDdGODYsIDB4MTgxRSwgMHg3Rjg3LCAweDE4MjEsCisgICAgMHg3Rjg4LCAweDE4MjAsIDB4N0Y4QSwgMHgwRjNELCAweDdGOEIsIDB4NENFNywgMHg3RjhDLCAweDE4MjIsCisgICAgMHg3RjhFLCAweDBEOTIsIDB4N0Y5MCwgMHg0N0Q4LCAweDdGOTEsIDB4M0E5QSwgMHg3Rjk0LCAweDE4MjMsCisgICAgMHg3Rjk2LCAweDQ3REIsIDB4N0Y5NywgMHg0Mjk2LCAweDdGOUEsIDB4MTgyNiwgMHg3RjlDLCAweDQ3REMsCisgICAgMHg3RjlELCAweDE4MjUsIDB4N0Y5RSwgMHgxODI0LCAweDdGQTEsIDB4MjE5NiwgMHg3RkEyLCAweDRDRTgsCisgICAgMHg3RkEzLCAweDE4MjcsIDB4N0ZBNCwgMHgwNzA4LCAweDdGQTgsIDB4MEFBNCwgMHg3RkE5LCAweDA2NUIsCisgICAgMHg3RkFELCAweDQ3REQsIDB4N0ZBRSwgMHgxODJCLCAweDdGQUYsIDB4MTgyOCwgMHg3RkIyLCAweDE4MjksCisgICAgMHg3RkI2LCAweDE4MkMsIDB4N0ZCOCwgMHgxODJELCAweDdGQjksIDB4MTgyQSwgMHg3RkJELCAweDA0Q0IsCisgICAgMHg3RkJGLCAweDNBOUIsIDB4N0ZDMSwgMHgwNTI3LCAweDdGQzMsIDB4NDdERiwgMHg3RkM1LCAweDE4MkYsCisgICAgMHg3RkM2LCAweDE4MzAsIDB4N0ZDQSwgMHgxODMxLCAweDdGQ0MsIDB4MEY0QywgMHg3RkNFLCAweDNBOUMsCisgICAgMHg3RkNGLCAweDQ3RTAsIDB4N0ZEMiwgMHgwOTM2LCAweDdGRDQsIDB4MTgzMywgMHg3RkQ1LCAweDE4MzIsCisgICAgMHg3RkRCLCAweDQyOTcsIDB4N0ZERiwgMHgzQTlELCAweDdGRTAsIDB4MEEyRiwgMHg3RkUxLCAweDE4MzQsCisgICAgMHg3RkUzLCAweDQ3RTEsIDB4N0ZFNSwgMHgzQTlFLCAweDdGRTYsIDB4MTgzNSwgMHg3RkU5LCAweDE4MzYsCisgICAgMHg3RkVCLCAweDA2MjEsIDB4N0ZFQywgMHgzQTlGLCAweDdGRUUsIDB4M0FBMCwgMHg3RkVGLCAweDNBQTEsCisgICAgMHg3RkYwLCAweDA2MDksIDB4N0ZGMiwgMHg0N0UyLCAweDdGRjMsIDB4MTgzNywgMHg3RkY5LCAweDE4MzgsCisgICAgMHg3RkZBLCAweDNBQTIsIDB4N0ZGQiwgMHgwRThCLCAweDdGRkMsIDB4MEY0RCwgMHg3RkZELCAweDRDRTksCisgICAgMHg3RkZFLCAweDRDRUEsIDB4N0ZGRiwgMHg0Q0VCLCAweDgwMDAsIDB4MEYzRSwgMHg4MDAxLCAweDBGREQsCisgICAgMHg4MDAyLCAweDM3MTMsIDB4ODAwMywgMHgwN0RGLCAweDgwMDQsIDB4MTgzQiwgMHg4MDA1LCAweDA5MDAsCisgICAgMHg4MDA2LCAweDE4M0EsIDB4ODAwNywgMHg0Q0VDLCAweDgwMDgsIDB4NDdFNCwgMHg4MDBBLCAweDQ3RTMsCisgICAgMHg4MDBCLCAweDE4M0MsIDB4ODAwQywgMHgwOEQ1LCAweDgwMEQsIDB4NENFRCwgMHg4MDBFLCAweDNBQTMsCisgICAgMHg4MDEwLCAweDBCMzEsIDB4ODAxMSwgMHgzQUE0LCAweDgwMTIsIDB4MTgzRCwgMHg4MDE0LCAweDNBQTUsCisgICAgMHg4MDE1LCAweDA3REUsIDB4ODAxNiwgMHg0N0U1LCAweDgwMTcsIDB4MEVFMywgMHg4MDE4LCAweDE4M0UsCisgICAgMHg4MDE5LCAweDE4M0YsIDB4ODAxQywgMHgxODQwLCAweDgwMUUsIDB4NENFRSwgMHg4MDIxLCAweDE4NDEsCisgICAgMHg4MDI0LCAweDNBQTYsIDB4ODAyNiwgMHgzQUE3LCAweDgwMjgsIDB4MTg0MiwgMHg4MDJDLCAweDQ3RTYsCisgICAgMHg4MDMwLCAweDQ3RTcsIDB4ODAzMywgMHgwOEQ2LCAweDgwMzUsIDB4NDI5OCwgMHg4MDM2LCAweDBFRjksCisgICAgMHg4MDM3LCAweDQyOTksIDB4ODAzOSwgMHg0Q0VGLCAweDgwM0EsIDB4M0FBOCwgMHg4MDNCLCAweDE4NDQsCisgICAgMHg4MDNDLCAweDNBQTksIDB4ODAzRCwgMHgwQjdELCAweDgwM0YsIDB4MTg0MywgMHg4MDQzLCAweDQ3RTgsCisgICAgMHg4MDQ2LCAweDE4NDYsIDB4ODA0QSwgMHgxODQ1LCAweDgwNTIsIDB4MTg0NywgMHg4MDU2LCAweDBBNUYsCisgICAgMHg4MDU4LCAweDE4NDgsIDB4ODA1QSwgMHgxODQ5LCAweDgwNUUsIDB4MEUwOSwgMHg4MDVGLCAweDE4NEEsCisgICAgMHg4MDYwLCAweDNBQUEsIDB4ODA2MSwgMHgwQUYxLCAweDgwNjIsIDB4MTg0QiwgMHg4MDY2LCAweDQ3RTksCisgICAgMHg4MDY4LCAweDE4NEMsIDB4ODA2RiwgMHgwRkM2LCAweDgwNzAsIDB4MTg0RiwgMHg4MDcxLCAweDNBQUIsCisgICAgMHg4MDcyLCAweDE4NEUsIDB4ODA3MywgMHgxODRELCAweDgwNzQsIDB4MEJDQywgMHg4MDc1LCAweDNBQUMsCisgICAgMHg4MDc2LCAweDE4NTAsIDB4ODA3NywgMHgwOUVDLCAweDgwNzksIDB4MTg1MSwgMHg4MDdCLCAweDQ3RUEsCisgICAgMHg4MDdELCAweDE4NTIsIDB4ODA3RSwgMHgwRkRFLCAweDgwN0YsIDB4MTg1MywgMHg4MDg0LCAweDE4NTQsCisgICAgMHg4MDg1LCAweDE4NTYsIDB4ODA4NiwgMHgxODU1LCAweDgwODcsIDB4MEQzOSwgMHg4MDg4LCAweDRDRjAsCisgICAgMHg4MDg5LCAweDBDRDEsIDB4ODA4QiwgMHgwRkU0LCAweDgwOEMsIDB4MEQzRCwgMHg4MDhFLCAweDRDRjEsCisgICAgMHg4MDkzLCAweDE4NTgsIDB4ODA5NiwgMHgwOUJCLCAweDgwOTgsIDB4MEQ5QywgMHg4MDk5LCAweDQ3RUIsCisgICAgMHg4MDlBLCAweDE4NTksIDB4ODA5QiwgMHgxODU3LCAweDgwOUMsIDB4NDdFQywgMHg4MDlELCAweDA2MEEsCisgICAgMHg4MDlFLCAweDNBQUQsIDB4ODBBMSwgMHgwNzg4LCAweDgwQTIsIDB4MDhCNiwgMHg4MEE0LCAweDQ3RUQsCisgICAgMHg4MEE1LCAweDBEODIsIDB4ODBBNiwgMHgzQUFFLCAweDgwQTcsIDB4NDdFRSwgMHg4MEE5LCAweDA3NUUsCisgICAgMHg4MEFBLCAweDBFNzEsIDB4ODBBQiwgMHgzQUFGLCAweDgwQUMsIDB4MTg1QywgMHg4MEFELCAweDE4NUEsCisgICAgMHg4MEFGLCAweDA3RTAsIDB4ODBCMSwgMHgwN0UxLCAweDgwQjIsIDB4MDRBRCwgMHg4MEI0LCAweDA4NTgsCisgICAgMHg4MEI4LCAweDQ3RUYsIDB4ODBCQSwgMHgwRDBGLCAweDgwQzMsIDB4MDRBMywgMHg4MEM0LCAweDE4NjEsCisgICAgMHg4MEM1LCAweDQ3RjEsIDB4ODBDNiwgMHgwQjdFLCAweDgwQ0EsIDB4NDI5QSwgMHg4MENDLCAweDBEMEUsCisgICAgMHg4MENFLCAweDBCM0IsIDB4ODBDRiwgMHg0Q0YyLCAweDgwRDQsIDB4NENGMywgMHg4MEQ1LCAweDQ3RjIsCisgICAgMHg4MEQ2LCAweDE4NjMsIDB4ODBENywgMHgzQUIwLCAweDgwRDgsIDB4M0FCMSwgMHg4MEQ5LCAweDE4NUYsCisgICAgMHg4MERBLCAweDE4NjIsIDB4ODBEQiwgMHgxODVELCAweDgwREQsIDB4MTg2MCwgMHg4MERFLCAweDBFNTQsCisgICAgMHg4MEUwLCAweDQyOUIsIDB4ODBFMSwgMHgwNzg5LCAweDgwRTQsIDB4MDRDMSwgMHg4MEU1LCAweDE4NUUsCisgICAgMHg4MEU2LCAweDQ3RjMsIDB4ODBFRCwgMHg0Q0Y0LCAweDgwRUYsIDB4MTg2NSwgMHg4MEYwLCAweDRDRjUsCisgICAgMHg4MEYxLCAweDE4NjYsIDB4ODBGMywgMHg0MjlDLCAweDgwRjQsIDB4MEM5MSwgMHg4MEY1LCAweDQ3RjUsCisgICAgMHg4MEY3LCAweDRDRjYsIDB4ODBGOCwgMHgwNkIzLCAweDgwRkEsIDB4NENGNywgMHg4MEZCLCAweDQ3RjYsCisgICAgMHg4MEZDLCAweDE4NzEsIDB4ODBGRCwgMHgwQ0YzLCAweDgwRkUsIDB4NENGOCwgMHg4MTAyLCAweDA4QjcsCisgICAgMHg4MTAzLCAweDRDRjksIDB4ODEwNSwgMHgwNkI0LCAweDgxMDYsIDB4MEE2QywgMHg4MTA3LCAweDBGRUMsCisgICAgMHg4MTA4LCAweDBFQkEsIDB4ODEwOSwgMHgxODY0LCAweDgxMEEsIDB4MEE3OCwgMHg4MTBELCAweDQ3RjQsCisgICAgMHg4MTE2LCAweDNBQjIsIDB4ODExNywgMHg0Q0ZBLCAweDgxMTgsIDB4M0FCMywgMHg4MTFBLCAweDA2NkQsCisgICAgMHg4MTFCLCAweDE4NjcsIDB4ODExRSwgMHg0N0Y5LCAweDgxMjMsIDB4MTg2OSwgMHg4MTI0LCAweDQ3RkIsCisgICAgMHg4MTI3LCAweDQ3RkMsIDB4ODEyOSwgMHgxODY4LCAweDgxMkIsIDB4MzY1OSwgMHg4MTJDLCAweDQ3RkQsCisgICAgMHg4MTJGLCAweDE4NkEsIDB4ODEzMCwgMHg0Q0ZCLCAweDgxMzEsIDB4MEI2NCwgMHg4MTMzLCAweDBDRjQsCisgICAgMHg4MTM1LCAweDQ3RjgsIDB4ODEzOSwgMHgwQkNELCAweDgxM0EsIDB4M0FCNCwgMHg4MTNELCAweDQ3RkYsCisgICAgMHg4MTNFLCAweDE4NkUsIDB4ODE0MSwgMHgzNzcyLCAweDgxNDYsIDB4MTg2RCwgMHg4MTRBLCAweDNBQjUsCisgICAgMHg4MTRCLCAweDE4NkIsIDB4ODE0QywgMHgzQUI2LCAweDgxNEUsIDB4MEExQiwgMHg4MTUwLCAweDBERDcsCisgICAgMHg4MTUxLCAweDE4NzAsIDB4ODE1MywgMHgxODZGLCAweDgxNTQsIDB4MDdFMiwgMHg4MTU1LCAweDBGRjksCisgICAgMHg4MTU3LCAweDRDRkMsIDB4ODE1RiwgMHgxODgwLCAweDgxNjAsIDB4NDI5RCwgMHg4MTY1LCAweDE4NzQsCisgICAgMHg4MTY2LCAweDE4NzUsIDB4ODE2NywgMHg0MjlFLCAweDgxNjgsIDB4NDI5RiwgMHg4MTY5LCAweDQ4MDEsCisgICAgMHg4MTZCLCAweDA5MUMsIDB4ODE2RCwgMHg0MkEwLCAweDgxNkUsIDB4MTg3MywgMHg4MTZGLCAweDRDRkQsCisgICAgMHg4MTcwLCAweDA4MEEsIDB4ODE3MSwgMHgxODcyLCAweDgxNzMsIDB4NENGRSwgMHg4MTc0LCAweDE4NzYsCisgICAgMHg4MTc4LCAweDBCQ0UsIDB4ODE3OSwgMHgwREYyLCAweDgxN0EsIDB4MEFBNSwgMHg4MTdGLCAweDBCM0MsCisgICAgMHg4MTgwLCAweDE4N0EsIDB4ODE4MSwgMHgzQUI3LCAweDgxODIsIDB4MTg3QiwgMHg4MTgzLCAweDE4NzcsCisgICAgMHg4MTg0LCAweDNBQjgsIDB4ODE4NSwgMHg0ODA0LCAweDgxODgsIDB4MTg3OCwgMHg4MThBLCAweDE4NzksCisgICAgMHg4MThCLCAweDRDRkYsIDB4ODE4RiwgMHgwN0UzLCAweDgxOTAsIDB4NEQwMCwgMHg4MTkzLCAweDE4ODEsCisgICAgMHg4MTk1LCAweDE4N0QsIDB4ODE5OCwgMHg0ODA2LCAweDgxOUEsIDB4MEREOCwgMHg4MTlCLCAweDREMDEsCisgICAgMHg4MTlDLCAweDBFOUEsIDB4ODE5RCwgMHgwRDlBLCAweDgxOUUsIDB4NEQwMiwgMHg4MUEwLCAweDE4N0MsCisgICAgMHg4MUEzLCAweDE4N0YsIDB4ODFBNCwgMHgxODdFLCAweDgxQTgsIDB4MEU3MiwgMHg4MUE5LCAweDE4ODIsCisgICAgMHg4MUIwLCAweDE4ODMsIDB4ODFCMiwgMHg0ODA3LCAweDgxQjMsIDB4MEFCOSwgMHg4MUI0LCAweDNBQjksCisgICAgMHg4MUI1LCAweDE4ODQsIDB4ODFCOCwgMHgxODg2LCAweDgxQkEsIDB4MTg4QSwgMHg4MUJCLCAweDQyQTEsCisgICAgMHg4MUJELCAweDE4ODcsIDB4ODFCRSwgMHgxODg1LCAweDgxQkYsIDB4MENGNSwgMHg4MUMwLCAweDE4ODgsCisgICAgMHg4MUMxLCAweDQ4MDgsIDB4ODFDMiwgMHgxODg5LCAweDgxQzMsIDB4NDgwOSwgMHg4MUM2LCAweDA1MzIsCisgICAgMHg4MUM4LCAweDE4OTAsIDB4ODFDOSwgMHgxODhCLCAweDgxQ0EsIDB4NDJBMiwgMHg4MUNCLCAweDREMDMsCisgICAgMHg4MUNELCAweDE4OEMsIDB4ODFDRiwgMHgzQUJBLCAweDgxRDEsIDB4MTg4RCwgMHg4MUQzLCAweDBCMDEsCisgICAgMHg4MUQ1LCAweDREMDQsIDB4ODFENiwgMHg0ODBBLCAweDgxRDcsIDB4NDJBMywgMHg4MUQ4LCAweDE4OEYsCisgICAgMHg4MUQ5LCAweDE4OEUsIDB4ODFEQSwgMHgxODkxLCAweDgxREIsIDB4NDgwQiwgMHg4MURELCAweDREMDUsCisgICAgMHg4MURFLCAweDREMDYsIDB4ODFERiwgMHgxODkyLCAweDgxRTAsIDB4MTg5MywgMHg4MUUxLCAweDREMDcsCisgICAgMHg4MUUzLCAweDBBMDksIDB4ODFFNCwgMHg0ODBELCAweDgxRTUsIDB4MDU2OSwgMHg4MUU3LCAweDE4OTQsCisgICAgMHg4MUU4LCAweDBGOUYsIDB4ODFFQSwgMHgwOEQ3LCAweDgxRUMsIDB4NDgwRiwgMHg4MUVELCAweDA5MzcsCisgICAgMHg4MUVGLCAweDREMDgsIDB4ODFGMywgMHgwOEI4LCAweDgxRjQsIDB4MEI5NSwgMHg4MUY2LCAweDREMDksCisgICAgMHg4MUY5LCAweDNBQkIsIDB4ODFGQSwgMHgxODk1LCAweDgxRkIsIDB4MTg5NiwgMHg4MUZDLCAweDA0RDMsCisgICAgMHg4MUZELCAweDQ4MTAsIDB4ODFGRSwgMHgxODk3LCAweDgxRkYsIDB4NDgxMSwgMHg4MjAwLCAweDREMEEsCisgICAgMHg4MjAxLCAweDE4OTgsIDB4ODIwMiwgMHgxODk5LCAweDgyMDMsIDB4M0FCQywgMHg4MjA0LCAweDQ4MTMsCisgICAgMHg4MjA1LCAweDE4OUEsIDB4ODIwNywgMHgxODlCLCAweDgyMDgsIDB4MDZCNSwgMHg4MjA5LCAweDEzQUYsCisgICAgMHg4MjBBLCAweDE4OUMsIDB4ODIwQiwgMHg0RDBCLCAweDgyMEMsIDB4MEE4OSwgMHg4MjBELCAweDE4OUQsCisgICAgMHg4MjBFLCAweDA4RjcsIDB4ODIxMCwgMHgxODlFLCAweDgyMTIsIDB4MTAwOSwgMHg4MjEzLCAweDREMEMsCisgICAgMHg4MjE0LCAweDREMEQsIDB4ODIxNiwgMHgxODlGLCAweDgyMTcsIDB4MEUyRSwgMHg4MjE4LCAweDA2MTgsCisgICAgMHg4MjE5LCAweDQ4MTUsIDB4ODIxQSwgMHg0RDBFLCAweDgyMUIsIDB4MEFBNiwgMHg4MjFDLCAweDA5NjIsCisgICAgMHg4MjFFLCAweDBERTMsIDB4ODIxRiwgMHgwOTM4LCAweDgyMjEsIDB4M0FCRCwgMHg4MjIyLCAweDQ4MTYsCisgICAgMHg4MjI5LCAweDE4QTAsIDB4ODIyQSwgMHgwN0U0LCAweDgyMkIsIDB4MThBMSwgMHg4MjJDLCAweDBENjAsCisgICAgMHg4MjJFLCAweDE4QUYsIDB4ODIzMiwgMHgzQUJFLCAweDgyMzMsIDB4MThBMywgMHg4MjM0LCAweDNBQkYsCisgICAgMHg4MjM1LCAweDBCMjksIDB4ODIzNiwgMHgwRDJCLCAweDgyMzcsIDB4MDc3MywgMHg4MjM4LCAweDE4QTIsCisgICAgMHg4MjM5LCAweDBBQTcsIDB4ODIzQSwgMHg0RDBGLCAweDgyM0MsIDB4NDgxOCwgMHg4MjQwLCAweDE4QTQsCisgICAgMHg4MjQ0LCAweDREMTAsIDB4ODI0NSwgMHg0ODFBLCAweDgyNDYsIDB4M0FDMCwgMHg4MjQ3LCAweDBDMTYsCisgICAgMHg4MjQ5LCAweDQ4MTksIDB4ODI0QiwgMHgzQUMxLCAweDgyNEYsIDB4M0FDMiwgMHg4MjU3LCAweDQ4MUUsCisgICAgMHg4MjU4LCAweDE4QTYsIDB4ODI1OSwgMHgxOEE1LCAweDgyNUEsIDB4MThBOCwgMHg4MjVDLCAweDQ4MjAsCisgICAgMHg4MjVELCAweDE4QTcsIDB4ODI1RiwgMHgxOEE5LCAweDgyNjAsIDB4NDJBNSwgMHg4MjYyLCAweDE4QUIsCisgICAgMHg4MjYzLCAweDQ4MjEsIDB4ODI2NCwgMHgxOEFBLCAweDgyNjYsIDB4MDYwQiwgMHg4MjY4LCAweDE4QUMsCisgICAgMHg4MjZBLCAweDE4QUQsIDB4ODI2QiwgMHgxOEFFLCAweDgyNkQsIDB4NEQxMSwgMHg4MjZFLCAweDA4MjEsCisgICAgMHg4MjZGLCAweDBGOTEsIDB4ODI3MSwgMHgxOEIwLCAweDgyNzIsIDB4MDlFRCwgMHg4Mjc0LCAweDQyQTYsCisgICAgMHg4Mjc2LCAweDA1MTIsIDB4ODI3NywgMHgxOEIxLCAweDgyNzgsIDB4MThCMiwgMHg4Mjc5LCAweDM3NzUsCisgICAgMHg4MjdELCAweDQ4MjQsIDB4ODI3RSwgMHgxOEIzLCAweDgyN0YsIDB4NDgyNSwgMHg4MjgzLCAweDQ4MjYsCisgICAgMHg4Mjg0LCAweDREMTIsIDB4ODI4OSwgMHg0RDEzLCAweDgyOEEsIDB4NDgyNywgMHg4MjhCLCAweDA0QjYsCisgICAgMHg4MjhELCAweDE4QjQsIDB4ODI4RSwgMHgzQUMzLCAweDgyOTEsIDB4NEQxNCwgMHg4MjkyLCAweDE4QjUsCisgICAgMHg4MjkzLCAweDQ4MjgsIDB4ODI5OSwgMHgwREQ5LCAweDgyOUQsIDB4MDhGMywgMHg4MjlGLCAweDE4QjcsCisgICAgMHg4MkExLCAweDQyQTgsIDB4ODJBMywgMHg0MkE5LCAweDgyQTQsIDB4NDJBQSwgMHg4MkE1LCAweDA1ODcsCisgICAgMHg4MkE2LCAweDA0NzYsIDB4ODJBNywgMHg0ODI5LCAweDgyQTgsIDB4NDgyQSwgMHg4MkE5LCAweDQyQUIsCisgICAgMHg4MkFBLCAweDREMTUsIDB4ODJBQiwgMHgxOEI2LCAweDgyQUMsIDB4MThCOSwgMHg4MkFELCAweDBEMDQsCisgICAgMHg4MkFFLCAweDNBQzQsIDB4ODJBRiwgMHgwQTBBLCAweDgyQjAsIDB4NEQxNiwgMHg4MkIxLCAweDA1NTYsCisgICAgMHg4MkIyLCAweDQ4MkIsIDB4ODJCMywgMHgwRTU1LCAweDgyQjQsIDB4NDgyQywgMHg4MkI3LCAweDNBQzUsCisgICAgMHg4MkI4LCAweDA3MzMsIDB4ODJCOSwgMHgwNkQ0LCAweDgyQkEsIDB4NDgyRCwgMHg4MkJCLCAweDE4QjgsCisgICAgMHg4MkJDLCAweDQ4MkUsIDB4ODJCRCwgMHgwNTZBLCAweDgyQkUsIDB4M0FDNiwgMHg4MkJGLCAweDQyQUMsCisgICAgMHg4MkM1LCAweDA1REYsIDB4ODJDNiwgMHgzQUM3LCAweDgyRDAsIDB4NEQxNywgMHg4MkQxLCAweDA1MTMsCisgICAgMHg4MkQyLCAweDE4QkQsIDB4ODJEMywgMHgwRkIyLCAweDgyRDQsIDB4MEIzRCwgMHg4MkQ1LCAweDQyQUQsCisgICAgMHg4MkQ3LCAweDBEQjYsIDB4ODJEOSwgMHgxOEM5LCAweDgyREIsIDB4MDU1NywgMHg4MkRDLCAweDE4QzcsCisgICAgMHg4MkRFLCAweDE4QzUsIDB4ODJERiwgMHgxOEJDLCAweDgyRTEsIDB4MThCQSwgMHg4MkUyLCAweDQ4MkYsCisgICAgMHg4MkUzLCAweDE4QkIsIDB4ODJFNSwgMHgwOTBGLCAweDgyRTYsIDB4MDZFNCwgMHg4MkU3LCAweDBCQjUsCisgICAgMHg4MkU4LCAweDQ4MzAsIDB4ODJFQSwgMHg0RDE4LCAweDgyRUIsIDB4MENBOSwgMHg4MkVGLCAweDREMTksCisgICAgMHg4MkYxLCAweDA0RjMsIDB4ODJGMywgMHgxOEJGLCAweDgyRjQsIDB4MThCRSwgMHg4MkY2LCAweDREMUEsCisgICAgMHg4MkY3LCAweDQ4MzEsIDB4ODJGOSwgMHgxOEM0LCAweDgyRkEsIDB4MThDMCwgMHg4MkZCLCAweDE4QzMsCisgICAgMHg4MkZELCAweDQyQUUsIDB4ODJGRSwgMHgzQUM4LCAweDgzMDAsIDB4NDJBRiwgMHg4MzAxLCAweDIxOTgsCisgICAgMHg4MzAyLCAweDBFREMsIDB4ODMwMywgMHgxOEMyLCAweDgzMDQsIDB4MDU1OCwgMHg4MzA1LCAweDA1REIsCisgICAgMHg4MzA2LCAweDE4QzYsIDB4ODMwNywgMHg0ODMyLCAweDgzMDgsIDB4NDgzMywgMHg4MzA5LCAweDE4QzgsCisgICAgMHg4MzBDLCAweDQ4MzQsIDB4ODMwRSwgMHgwNzJBLCAweDgzMTYsIDB4MThDQywgMHg4MzE3LCAweDE4RDUsCisgICAgMHg4MzE4LCAweDE4RDYsIDB4ODMxQiwgMHg0ODM2LCAweDgzMUMsIDB4MDQ2RiwgMHg4MzFELCAweDQ4MzcsCisgICAgMHg4MzIyLCAweDQyQjAsIDB4ODMyMywgMHgxOERELCAweDgzMjgsIDB4MDRCNSwgMHg4MzJCLCAweDE4RDQsCisgICAgMHg4MzJELCAweDQyQjEsIDB4ODMyRiwgMHgxOEQzLCAweDgzMzAsIDB4NDgzOCwgMHg4MzMxLCAweDE4Q0UsCisgICAgMHg4MzMyLCAweDE4Q0QsIDB4ODMzNCwgMHgxOENCLCAweDgzMzUsIDB4MThDQSwgMHg4MzM2LCAweDBCQTEsCisgICAgMHg4MzM4LCAweDBCNUIsIDB4ODMzOSwgMHgxOEQwLCAweDgzM0EsIDB4NDJCMiwgMHg4MzNDLCAweDQ4MzksCisgICAgMHg4MzQwLCAweDE4Q0YsIDB4ODM0MywgMHgzQUM5LCAweDgzNDQsIDB4NDgzQSwgMHg4MzQ1LCAweDE4RDIsCisgICAgMHg4MzQ2LCAweDFERjgsIDB4ODM0NywgMHg0MkIzLCAweDgzNDksIDB4MEFGMiwgMHg4MzRBLCAweDA3MkIsCisgICAgMHg4MzRGLCAweDA0RTMsIDB4ODM1MCwgMHgxOEQxLCAweDgzNTEsIDB4M0FDQSwgMHg4MzUyLCAweDA3RTUsCisgICAgMHg4MzU0LCAweDQ4MzUsIDB4ODM1NSwgMHgzQUNCLCAweDgzNTYsIDB4NEQxQiwgMHg4MzU3LCAweDQ4M0IsCisgICAgMHg4MzU4LCAweDBBRjMsIDB4ODM1QSwgMHgzNzdBLCAweDgzNjIsIDB4MjE5OSwgMHg4MzYzLCAweDQ1NkYsCisgICAgMHg4MzczLCAweDE4RTMsIDB4ODM3NSwgMHgxOEU0LCAweDgzNzcsIDB4MDU1OSwgMHg4Mzc4LCAweDREMUMsCisgICAgMHg4MzdCLCAweDA1MkUsIDB4ODM3QywgMHgxOEUxLCAweDgzN0QsIDB4NDJCNCwgMHg4MzdGLCAweDIxOUEsCisgICAgMHg4Mzg1LCAweDE4RDcsIDB4ODM4NiwgMHgzQUNDLCAweDgzODcsIDB4MThERiwgMHg4Mzg5LCAweDE4RTYsCisgICAgMHg4MzhBLCAweDE4RTAsIDB4ODM4RCwgMHgzQUNELCAweDgzOEUsIDB4MThERSwgMHg4MzkyLCAweDNBQ0UsCisgICAgMHg4MzkzLCAweDE4QzEsIDB4ODM5NCwgMHg0ODNGLCAweDgzOTUsIDB4NDg0MCwgMHg4Mzk2LCAweDE4REMsCisgICAgMHg4Mzk4LCAweDNBQ0YsIDB4ODM5QSwgMHgxOEQ4LCAweDgzOUIsIDB4NDg0MSwgMHg4MzlELCAweDQ4NDIsCisgICAgMHg4MzlFLCAweDA2MEMsIDB4ODM5RiwgMHgxOERBLCAweDgzQTAsIDB4MThFNSwgMHg4M0EyLCAweDE4REIsCisgICAgMHg4M0E3LCAweDQyQjUsIDB4ODNBOCwgMHgxOEU3LCAweDgzQTksIDB4M0FEMCwgMHg4M0FBLCAweDE4RDksCisgICAgMHg4M0FCLCAweDBEMzIsIDB4ODNCMSwgMHgwRjUzLCAweDgzQjUsIDB4MThFMiwgMHg4M0JELCAweDE4RjgsCisgICAgMHg4M0JGLCAweDNBRDEsIDB4ODNDMCwgMHgzQUQyLCAweDgzQzEsIDB4MThGMCwgMHg4M0M1LCAweDBBNDEsCisgICAgMHg4M0M3LCAweDIxOUIsIDB4ODNDOSwgMHg0ODQzLCAweDgzQ0EsIDB4MDY2MCwgMHg4M0NDLCAweDA2RDUsCisgICAgMHg4M0NFLCAweDE4RUIsIDB4ODNDRiwgMHg0MkI2LCAweDgzRDAsIDB4NDg0NCwgMHg4M0QxLCAweDQyQjcsCisgICAgMHg4M0QzLCAweDA1NUIsIDB4ODNENCwgMHg0ODQ1LCAweDgzRDYsIDB4MDlCQywgMHg4M0Q4LCAweDE4RUUsCisgICAgMHg4M0RDLCAweDA4NEEsIDB4ODNERCwgMHg0ODQ2LCAweDgzREYsIDB4MEM0QiwgMHg4M0UwLCAweDE4RjMsCisgICAgMHg4M0UxLCAweDQyQjgsIDB4ODNFNSwgMHg0ODQ3LCAweDgzRTksIDB4MEUzRSwgMHg4M0VBLCAweDNBRDMsCisgICAgMHg4M0VCLCAweDE4RUEsIDB4ODNFRiwgMHgwNTVBLCAweDgzRjAsIDB4MDc4QSwgMHg4M0YxLCAweDBEOUIsCisgICAgMHg4M0YyLCAweDE4RjQsIDB4ODNGNCwgMHgxOEU4LCAweDgzRjYsIDB4MjE5QywgMHg4M0Y3LCAweDE4RjEsCisgICAgMHg4M0Y4LCAweDREMUQsIDB4ODNGOSwgMHg0ODQ4LCAweDgzRkIsIDB4MThGQiwgMHg4M0ZDLCAweDREMUUsCisgICAgMHg4M0ZELCAweDE4RUMsIDB4ODQwMSwgMHg0MkI5LCAweDg0MDMsIDB4MThFRCwgMHg4NDA0LCAweDBDOTIsCisgICAgMHg4NDA2LCAweDQyQkEsIDB4ODQwNywgMHgxOEYyLCAweDg0MEEsIDB4MUU3RiwgMHg4NDBCLCAweDE4RUYsCisgICAgMHg4NDBDLCAweDBFNTYsIDB4ODQwRCwgMHgxOEY1LCAweDg0MEUsIDB4MDRBNCwgMHg4NDBGLCAweDNBRDQsCisgICAgMHg4NDExLCAweDNBRDUsIDB4ODQxMywgMHgxOEU5LCAweDg0MTUsIDB4NDg0OSwgMHg4NDE3LCAweDQ4NEIsCisgICAgMHg4NDIwLCAweDE4RjcsIDB4ODQyMiwgMHgxOEY2LCAweDg0MjksIDB4MEQyMSwgMHg4NDJBLCAweDE4RkQsCisgICAgMHg4NDJDLCAweDE5MDgsIDB4ODQzMSwgMHgwNURDLCAweDg0MzUsIDB4MTkwQiwgMHg4NDM4LCAweDE4RjksCisgICAgMHg4NDM5LCAweDQ4NEMsIDB4ODQzQywgMHgxOEZFLCAweDg0M0QsIDB4MEY1OCwgMHg4NDQ2LCAweDE5MDcsCisgICAgMHg4NDQ4LCAweDIxOUQsIDB4ODQ0OSwgMHgwRjNGLCAweDg0NEEsIDB4M0FENiwgMHg4NDRFLCAweDBGNzIsCisgICAgMHg4NDRGLCAweDQ4NEQsIDB4ODQ1MSwgMHg0ODRFLCAweDg0NTIsIDB4NDg0RiwgMHg4NDU3LCAweDBCQjYsCisgICAgMHg4NDU4LCAweDREMUYsIDB4ODQ1OSwgMHg0ODUwLCAweDg0NUEsIDB4NDg1MSwgMHg4NDVCLCAweDA1QzksCisgICAgMHg4NDVDLCAweDQ4NTIsIDB4ODQ1RiwgMHg0MkJCLCAweDg0NjEsIDB4MERFNCwgMHg4NDYyLCAweDE5MEQsCisgICAgMHg4NDYzLCAweDBDNzksIDB4ODQ2NSwgMHg0ODU0LCAweDg0NjYsIDB4MDQ3NSwgMHg4NDY5LCAweDE5MDYsCisgICAgMHg4NDZCLCAweDE5MDIsIDB4ODQ2QywgMHgwQUY0LCAweDg0NkQsIDB4MThGQywgMHg4NDZFLCAweDE5MDQsCisgICAgMHg4NDZGLCAweDE5MDksIDB4ODQ3MCwgMHg0MkJDLCAweDg0NzEsIDB4MENFMiwgMHg4NDczLCAweDQyQkQsCisgICAgMHg4NDc1LCAweDA0NkUsIDB4ODQ3NiwgMHgzQUQ3LCAweDg0NzcsIDB4MTkwMSwgMHg4NDc4LCAweDQ4NTUsCisgICAgMHg4NDc5LCAweDE5MEEsIDB4ODQ3QSwgMHgwREVBLCAweDg0N0MsIDB4NDg1NiwgMHg4NDgxLCAweDQ4NTcsCisgICAgMHg4NDgyLCAweDE5MDUsIDB4ODQ4NCwgMHgxOTAwLCAweDg0ODUsIDB4NDJCRSwgMHg4NDhCLCAweDA5QkQsCisgICAgMHg4NDkwLCAweDA5MzksIDB4ODQ5MywgMHg0RDIwLCAweDg0OTQsIDB4MDhEOCwgMHg4NDk3LCAweDQ4NTksCisgICAgMHg4NDk5LCAweDBFRTQsIDB4ODQ5QywgMHgwREI5LCAweDg0OUUsIDB4NDJCRiwgMHg4NDlGLCAweDE5MTAsCisgICAgMHg4NEExLCAweDE5MTksIDB4ODRBNiwgMHg0ODVBLCAweDg0QTgsIDB4M0FEOCwgMHg4NEFELCAweDE5MDMsCisgICAgMHg4NEFGLCAweDNBRDksIDB4ODRCMSwgMHg0RDIxLCAweDg0QjIsIDB4MDVENSwgMHg4NEI0LCAweDIxOUUsCisgICAgMHg4NEI4LCAweDA5RTAsIDB4ODRCOSwgMHgxOTBFLCAweDg0QkEsIDB4NDJDMCwgMHg4NEJCLCAweDE5MTMsCisgICAgMHg4NEJDLCAweDBBRjUsIDB4ODRCRCwgMHg0RDIyLCAweDg0QkUsIDB4NDg1QiwgMHg4NEJGLCAweDE5MEYsCisgICAgMHg4NEMwLCAweDNBREEsIDB4ODRDMSwgMHgxOTE2LCAweDg0QzIsIDB4M0FEQiwgMHg4NEM0LCAweDBCOUQsCisgICAgMHg4NEM2LCAweDE5MTcsIDB4ODRDOSwgMHgwRjQwLCAweDg0Q0EsIDB4MTkwQywgMHg4NENCLCAweDA1OTYsCisgICAgMHg4NENELCAweDE5MTIsIDB4ODRDRSwgMHg0ODVELCAweDg0Q0YsIDB4NDg1RSwgMHg4NEQwLCAweDE5MTUsCisgICAgMHg4NEQxLCAweDBFQjgsIDB4ODREMywgMHg0ODVGLCAweDg0RDYsIDB4MTkxOCwgMHg4NEQ5LCAweDE5MTEsCisgICAgMHg4NERBLCAweDE5MTQsIDB4ODREQywgMHgyMEFCLCAweDg0RTcsIDB4NDg2MSwgMHg4NEVBLCAweDQ4NjIsCisgICAgMHg4NEVDLCAweDBFNTcsIDB4ODRFRSwgMHgwRkM3LCAweDg0RUYsIDB4NDg2MywgMHg4NEYwLCAweDNBREMsCisgICAgMHg4NEYxLCAweDQ4NjQsIDB4ODRGNCwgMHgxOTFDLCAweDg0RkEsIDB4NDg2NSwgMHg4NEZCLCAweDREMjMsCisgICAgMHg4NEZDLCAweDE5MjMsIDB4ODRGRCwgMHgzQURELCAweDg0RkYsIDB4MTkxQiwgMHg4NTAwLCAweDA4RUYsCisgICAgMHg4NTA2LCAweDE4RkEsIDB4ODUwQywgMHgzQURFLCAweDg1MTEsIDB4MEUxRSwgMHg4NTEzLCAweDBFQUUsCisgICAgMHg4NTE0LCAweDE5MjIsIDB4ODUxNSwgMHgxOTIxLCAweDg1MTcsIDB4MTkxRCwgMHg4NTE4LCAweDE5MUUsCisgICAgMHg4NTFBLCAweDA0RDgsIDB4ODUxQiwgMHg0ODY2LCAweDg1MUUsIDB4NDJDMywgMHg4NTFGLCAweDE5MjAsCisgICAgMHg4NTIxLCAweDE5MUEsIDB4ODUyMywgMHgxRTFBLCAweDg1MjQsIDB4NDg2NywgMHg4NTI1LCAweDQ4NjgsCisgICAgMHg4NTI2LCAweDBCRjEsIDB4ODUyQiwgMHg0ODY5LCAweDg1MkMsIDB4MTkxRiwgMHg4NTJELCAweDA0QzIsCisgICAgMHg4NTJGLCAweDQyQzQsIDB4ODUzMiwgMHg0MkMyLCAweDg1MzQsIDB4M0FERiwgMHg4NTM1LCAweDBCMDIsCisgICAgMHg4NTNELCAweDBFMTMsIDB4ODUzRSwgMHgxRUI1LCAweDg1NDAsIDB4MTkyNCwgMHg4NTQxLCAweDE5MjgsCisgICAgMHg4NTQzLCAweDBENkQsIDB4ODU0NiwgMHg0RDI0LCAweDg1NDgsIDB4MTkyNywgMHg4NTQ5LCAweDA5QkUsCisgICAgMHg4NTRBLCAweDA4RjUsIDB4ODU0QiwgMHgxOTJBLCAweDg1NEUsIDB4MDZCNiwgMHg4NTRGLCAweDQ4NkEsCisgICAgMHg4NTUxLCAweDQ4NkQsIDB4ODU1MywgMHgyMTlGLCAweDg1NTUsIDB4MTkyQiwgMHg4NTU2LCAweDREMjUsCisgICAgMHg4NTU3LCAweDBERUIsIDB4ODU1OCwgMHgxOTI2LCAweDg1NTksIDB4MjFBMCwgMHg4NTVBLCAweDE4RkYsCisgICAgMHg4NTVELCAweDREMjYsIDB4ODU1RSwgMHgzQUUwLCAweDg1NjEsIDB4NDg2RSwgMHg4NTYyLCAweDQ4NkYsCisgICAgMHg4NTYzLCAweDE5MjUsIDB4ODU2NCwgMHg0MkM1LCAweDg1NjgsIDB4MEZGNSwgMHg4NTY5LCAweDBDN0EsCisgICAgMHg4NTZBLCAweDBERTUsIDB4ODU2QiwgMHgyMUExLCAweDg1NkQsIDB4MTkzMiwgMHg4NTZGLCAweDQ4NkIsCisgICAgMHg4NTc3LCAweDE5MzgsIDB4ODU3QSwgMHg0MkM2LCAweDg1N0IsIDB4NDg3MSwgMHg4NTdELCAweDQ4NzIsCisgICAgMHg4NTdFLCAweDE5MzksIDB4ODU3RiwgMHg0ODczLCAweDg1ODAsIDB4MTkyQywgMHg4NTgxLCAweDQ4NzQsCisgICAgMHg4NTg0LCAweDBEMkMsIDB4ODU4NSwgMHg0RDI3LCAweDg1ODYsIDB4NDg3NSwgMHg4NTg3LCAweDE5MzYsCisgICAgMHg4NTg4LCAweDE5MkUsIDB4ODU4QSwgMHgxOTMwLCAweDg1OEMsIDB4NDJDNywgMHg4NThGLCAweDNBRTEsCisgICAgMHg4NTkwLCAweDE5M0EsIDB4ODU5MSwgMHgxOTJGLCAweDg1OTMsIDB4NDg3NiwgMHg4NTk0LCAweDE5MzMsCisgICAgMHg4NTk3LCAweDA1MTQsIDB4ODU5OCwgMHg0RDI4LCAweDg1OTksIDB4MENCRCwgMHg4NTlCLCAweDE5MzQsCisgICAgMHg4NTlDLCAweDE5MzcsIDB4ODU5RCwgMHg0ODc3LCAweDg1OUYsIDB4NDg3OCwgMHg4NUEyLCAweDQyQzgsCisgICAgMHg4NUE0LCAweDE5MkQsIDB4ODVBNiwgMHgwQUE4LCAweDg1QTgsIDB4MTkzMSwgMHg4NUE5LCAweDA4NzUsCisgICAgMHg4NUFBLCAweDBBMEIsIDB4ODVBQiwgMHgwNzA2LCAweDg1QUMsIDB4MEYwMCwgMHg4NUFELCAweDNBRTQsCisgICAgMHg4NUFFLCAweDBGMDUsIDB4ODVBRiwgMHgwOTdDLCAweDg1QjAsIDB4MjFBMywgMHg4NUI3LCAweDNBRTIsCisgICAgMHg4NUI5LCAweDE5M0UsIDB4ODVCQSwgMHgxOTNDLCAweDg1QkMsIDB4NDg3QywgMHg4NUMxLCAweDBGRjQsCisgICAgMHg4NUM3LCAweDQ4N0QsIDB4ODVDOSwgMHgxOTNCLCAweDg1Q0EsIDB4NDg3RSwgMHg4NUNCLCAweDQyQzksCisgICAgMHg4NUNELCAweDBGNUYsIDB4ODVDRSwgMHgzQUUzLCAweDg1Q0YsIDB4MTkzRCwgMHg4NUQwLCAweDE5M0YsCisgICAgMHg4NUQ1LCAweDE5NDAsIDB4ODVEOCwgMHg0ODdGLCAweDg1RDksIDB4NDg4MCwgMHg4NURDLCAweDE5NDMsCisgICAgMHg4NURELCAweDE5NDEsIDB4ODVERiwgMHg0ODgxLCAweDg1RTEsIDB4NDg4MiwgMHg4NUU0LCAweDBDN0IsCisgICAgMHg4NUU1LCAweDE5NDIsIDB4ODVFNiwgMHg0ODgzLCAweDg1RTksIDB4MEQ2MSwgMHg4NUVBLCAweDE5MzUsCisgICAgMHg4NUVELCAweDQyQ0EsIDB4ODVGNCwgMHgzNzgwLCAweDg1RjYsIDB4NDg4NCwgMHg4NUY3LCAweDA5N0QsCisgICAgMHg4NUY5LCAweDE5NDQsIDB4ODVGQSwgMHgxOTQ5LCAweDg1RkIsIDB4MEFGNiwgMHg4NUZFLCAweDE5NDgsCisgICAgMHg4NUZGLCAweDQyQ0IsIDB4ODYwMCwgMHg0ODg1LCAweDg2MDIsIDB4MTkyOSwgMHg4NjA0LCAweDQyQ0MsCisgICAgMHg4NjA1LCAweDQyQ0QsIDB4ODYwNiwgMHgxOTRBLCAweDg2MDcsIDB4MEFDQiwgMHg4NjBBLCAweDE5NDUsCisgICAgMHg4NjBCLCAweDE5NDcsIDB4ODYxMCwgMHg0MkNFLCAweDg2MTEsIDB4NDg4NiwgMHg4NjEyLCAweDNBRTUsCisgICAgMHg4NjEzLCAweDE5NDYsIDB4ODYxNiwgMHgxNEQwLCAweDg2MTcsIDB4MTRDMSwgMHg4NjE4LCAweDQyRDAsCisgICAgMHg4NjFBLCAweDE5NEMsIDB4ODYxRSwgMHg0ODg3LCAweDg2MjEsIDB4NDg4OCwgMHg4NjIyLCAweDE5NEIsCisgICAgMHg4NjI0LCAweDQ4ODksIDB4ODYyNywgMHg0ODhBLCAweDg2MjksIDB4M0FFNiwgMHg4NjJELCAweDBGNjAsCisgICAgMHg4NjJGLCAweDE2QjEsIDB4ODYzMCwgMHgxOTRELCAweDg2MzgsIDB4NDJEMSwgMHg4NjM5LCAweDQ4OEMsCisgICAgMHg4NjNDLCAweDQ4OEQsIDB4ODYzRiwgMHgxOTRFLCAweDg2NDAsIDB4NDg4RiwgMHg4NjQxLCAweDQxQjgsCisgICAgMHg4NjQyLCAweDREMjksIDB4ODY0NiwgMHg0RDJBLCAweDg2NEQsIDB4MTk0RiwgMHg4NjRFLCAweDA3OEIsCisgICAgMHg4NjUwLCAweDA2NkUsIDB4ODY1MiwgMHgzQUU3LCAweDg2NTMsIDB4NDg5MCwgMHg4NjU0LCAweDE5NTEsCisgICAgMHg4NjU1LCAweDEwOTQsIDB4ODY1NiwgMHg0ODkxLCAweDg2NTcsIDB4NDJEMiwgMHg4NjVBLCAweDA2OEYsCisgICAgMHg4NjVCLCAweDM0MTgsIDB4ODY1QywgMHgwRjgyLCAweDg2NUUsIDB4MDZFQiwgMHg4NjVGLCAweDE5NTIsCisgICAgMHg4NjYyLCAweDQyRDMsIDB4ODY2MywgMHgzQUU4LCAweDg2NjcsIDB4MTk1MywgMHg4NjZCLCAweDBCQUMsCisgICAgMHg4NjZDLCAweDNBRTksIDB4ODY2RiwgMHgzQUVBLCAweDg2NzEsIDB4MTk1NCwgMHg4Njc1LCAweDQyRDUsCisgICAgMHg4Njc3LCAweDQ4OTIsIDB4ODY3OSwgMHgwQ0QyLCAweDg2N0EsIDB4M0FFQiwgMHg4NjdCLCAweDA0N0UsCisgICAgMHg4NjdELCAweDM3ODYsIDB4ODY4NywgMHg0ODkzLCAweDg2ODksIDB4NDg5NCwgMHg4NjhBLCAweDA1NjMsCisgICAgMHg4NjhCLCAweDE5NTksIDB4ODY4QywgMHgxOTVBLCAweDg2OEQsIDB4M0FFQywgMHg4NjkxLCAweDNBRUQsCisgICAgMHg4NjkzLCAweDE5NTUsIDB4ODY5NSwgMHgwODhCLCAweDg2OTgsIDB4M0FFRSwgMHg4NjlDLCAweDQ4OTUsCisgICAgMHg4NjlELCAweDQ4OTYsIDB4ODZBMywgMHgxOTU2LCAweDg2QTQsIDB4MENGOCwgMHg4NkE3LCAweDNBRUYsCisgICAgMHg4NkE4LCAweDNBRjAsIDB4ODZBOSwgMHgxOTU3LCAweDg2QUEsIDB4MTk1OCwgMHg4NkFCLCAweDE5NjIsCisgICAgMHg4NkFGLCAweDE5NUMsIDB4ODZCMCwgMHgxOTVGLCAweDg2QjEsIDB4NDg5NywgMHg4NkIzLCAweDQ4OTgsCisgICAgMHg4NkI2LCAweDE5NUIsIDB4ODZCOCwgMHg0MkQ2LCAweDg2QzAsIDB4NEQyQiwgMHg4NkMxLCAweDQ4OTksCisgICAgMHg4NkMzLCAweDQ4OUEsIDB4ODZDNCwgMHgxOTVELCAweDg2QzYsIDB4MTk1RSwgMHg4NkM3LCAweDA5MDQsCisgICAgMHg4NkM5LCAweDE5NjAsIDB4ODZDQiwgMHgwQjdGLCAweDg2Q0QsIDB4MDcyQywgMHg4NkNFLCAweDA1QTAsCisgICAgMHg4NkQxLCAweDQ4OUIsIDB4ODZENCwgMHgxOTYzLCAweDg2RDUsIDB4NDg5QywgMHg4NkQ3LCAweDQ4OUQsCisgICAgMHg4NkQ5LCAweDA1OUQsIDB4ODZEQiwgMHgxOTY4LCAweDg2REUsIDB4MTk2NCwgMHg4NkRGLCAweDE5NjcsCisgICAgMHg4NkUzLCAweDQ4OUUsIDB4ODZFNCwgMHgwRDRFLCAweDg2RTYsIDB4NDg5RiwgMHg4NkU5LCAweDE5NjUsCisgICAgMHg4NkVDLCAweDE5NjYsIDB4ODZFRCwgMHgwREJBLCAweDg2RUUsIDB4MEQ2RSwgMHg4NkVGLCAweDE5NjksCisgICAgMHg4NkY4LCAweDBCNUQsIDB4ODZGOSwgMHgxOTczLCAweDg2RkEsIDB4M0FGMSwgMHg4NkZCLCAweDE5NkYsCisgICAgMHg4NkZDLCAweDQyRDcsIDB4ODZGRCwgMHgzQUYyLCAweDg2RkUsIDB4MDU2QiwgMHg4NzAwLCAweDE5NkQsCisgICAgMHg4NzAyLCAweDBFNTgsIDB4ODcwMywgMHgxOTZFLCAweDg3MDUsIDB4NDhBMSwgMHg4NzA2LCAweDE5NkIsCisgICAgMHg4NzA3LCAweDQ4QTIsIDB4ODcwOCwgMHgxOTZDLCAweDg3MDksIDB4MTk3MSwgMHg4NzBBLCAweDE5NzQsCisgICAgMHg4NzBCLCAweDNBRjMsIDB4ODcwRCwgMHgxOTcyLCAweDg3MEUsIDB4NDhBMywgMHg4NzEwLCAweDQ4QTQsCisgICAgMHg4NzExLCAweDE5NzAsIDB4ODcxMiwgMHgxOTZBLCAweDg3MTMsIDB4M0FGNCwgMHg4NzE0LCAweDREMkMsCisgICAgMHg4NzE4LCAweDBCOTYsIDB4ODcxOSwgMHgzQUY1LCAweDg3MUEsIDB4MTk3QiwgMHg4NzFDLCAweDBFQjYsCisgICAgMHg4NzFFLCAweDNBRjYsIDB4ODcxRiwgMHg0OEE1LCAweDg3MjEsIDB4NDhBNiwgMHg4NzIyLCAweDREMkQsCisgICAgMHg4NzIzLCAweDQ4QTcsIDB4ODcyNSwgMHgxOTc5LCAweDg3MjgsIDB4M0FGNywgMHg4NzI5LCAweDE5N0EsCisgICAgMHg4NzJFLCAweDREMkUsIDB4ODczMSwgMHg0OEE4LCAweDg3MzQsIDB4MTk3NSwgMHg4NzM3LCAweDE5NzcsCisgICAgMHg4NzM5LCAweDREMkYsIDB4ODczQSwgMHg0OEE5LCAweDg3M0IsIDB4MTk3OCwgMHg4NzNFLCAweDNBRjgsCisgICAgMHg4NzNGLCAweDE5NzYsIDB4ODc0MCwgMHg0OEFBLCAweDg3NDMsIDB4NDhBQiwgMHg4NzQ5LCAweDBBOEEsCisgICAgMHg4NzRCLCAweDBGREYsIDB4ODc0QywgMHgxOTdGLCAweDg3NEUsIDB4MTk4MCwgMHg4NzUxLCAweDQ4QUMsCisgICAgMHg4NzUzLCAweDE5ODYsIDB4ODc1NSwgMHgwOUYwLCAweDg3NTcsIDB4MTk4MiwgMHg4NzU4LCAweDQ4QUQsCisgICAgMHg4NzU5LCAweDE5ODUsIDB4ODc1RCwgMHg0RDMwLCAweDg3NUYsIDB4MTk3RCwgMHg4NzYwLCAweDE5N0MsCisgICAgMHg4NzYzLCAweDE5ODcsIDB4ODc2NCwgMHg0OEFFLCAweDg3NjUsIDB4NDhBRiwgMHg4NzY2LCAweDA1NUMsCisgICAgMHg4NzY4LCAweDE5ODMsIDB4ODc2QSwgMHgxOTg4LCAweDg3NkUsIDB4MTk4NCwgMHg4NzcxLCAweDNBRjksCisgICAgMHg4NzcyLCAweDQ4QjAsIDB4ODc3NCwgMHgxOTgxLCAweDg3NzYsIDB4MEJDRiwgMHg4Nzc4LCAweDE5N0UsCisgICAgMHg4NzdCLCAweDREMzEsIDB4ODc3QywgMHg0OEIxLCAweDg3N0YsIDB4MEQxRSwgMHg4NzgyLCAweDE5OEMsCisgICAgMHg4Nzg3LCAweDQyRDgsIDB4ODc4OCwgMHgzQUZBLCAweDg3ODksIDB4NDhCNSwgMHg4NzhCLCAweDQ4QjYsCisgICAgMHg4NzhDLCAweDREMzIsIDB4ODc4RCwgMHgwRjI1LCAweDg3OEUsIDB4NEQzMywgMHg4NzkzLCAweDQ4QjcsCisgICAgMHg4Nzk3LCAweDREMzQsIDB4ODc5OCwgMHg0RDM1LCAweDg3OTksIDB4M0FGQiwgMHg4NzlFLCAweDREMzYsCisgICAgMHg4NzlGLCAweDE5OEIsIDB4ODdBMCwgMHg0OEI4LCAweDg3QTIsIDB4MTk4QSwgMHg4N0EzLCAweDREMzcsCisgICAgMHg4N0E3LCAweDQ4QjQsIDB4ODdBQiwgMHgxOTkzLCAweDg3QUMsIDB4M0FGQywgMHg4N0FELCAweDNBRkQsCisgICAgMHg4N0FFLCAweDREMzgsIDB4ODdBRiwgMHgxOThELCAweDg3QjMsIDB4MTk5NSwgMHg4N0I1LCAweDNBRkUsCisgICAgMHg4N0JBLCAweDBGNTAsIDB4ODdCQiwgMHgxOTk4LCAweDg3QkQsIDB4MTk4RiwgMHg4N0JFLCAweDQ4QkIsCisgICAgMHg4N0JGLCAweDREMzksIDB4ODdDMCwgMHgxOTkwLCAweDg3QzEsIDB4NDhCRCwgMHg4N0M0LCAweDE5OTQsCisgICAgMHg4N0M2LCAweDE5OTcsIDB4ODdDNywgMHgxOTk2LCAweDg3QzksIDB4NEQzQSwgMHg4N0NCLCAweDE5OEUsCisgICAgMHg4N0NFLCAweDQ4QkUsIDB4ODdEMCwgMHgxOTkxLCAweDg3RDIsIDB4MTlBMiwgMHg4N0Q2LCAweDNBRkYsCisgICAgMHg4N0RBLCAweDREM0IsIDB4ODdERiwgMHg0OEJGLCAweDg3RTAsIDB4MTk5QiwgMHg4N0UzLCAweDQ4QzEsCisgICAgMHg4N0U1LCAweDQ4QzIsIDB4ODdFNiwgMHg0OEMzLCAweDg3RUEsIDB4NDhDNCwgMHg4N0VCLCAweDNCMDAsCisgICAgMHg4N0VDLCAweDFFMjMsIDB4ODdFRCwgMHgzQjAxLCAweDg3RUYsIDB4MTk5OSwgMHg4N0YyLCAweDE5OUEsCisgICAgMHg4N0Y1LCAweDNDM0QsIDB4ODdGNiwgMHgxOTlGLCAweDg3RjcsIDB4MTlBMCwgMHg4N0Y5LCAweDA1ODgsCisgICAgMHg4N0ZCLCAweDA2NUMsIDB4ODdGRSwgMHgxOTlFLCAweDg4MDEsIDB4M0IwMiwgMHg4ODAzLCAweDRGNTgsCisgICAgMHg4ODA1LCAweDE5ODksIDB4ODgwNiwgMHgzQjA0LCAweDg4MDcsIDB4MjFBNiwgMHg4ODBBLCAweDQyREEsCisgICAgMHg4ODBCLCAweDNCMDUsIDB4ODgwRCwgMHgxOTlELCAweDg4MEUsIDB4MTlBMSwgMHg4ODBGLCAweDE5OUMsCisgICAgMHg4ODEwLCAweDQyREIsIDB4ODgxMSwgMHgxOUEzLCAweDg4MTMsIDB4NDhDNSwgMHg4ODE0LCAweDNCMDYsCisgICAgMHg4ODE1LCAweDE5QTUsIDB4ODgxNiwgMHgxOUE0LCAweDg4MTgsIDB4NEQzQywgMHg4ODFCLCAweDREM0QsCisgICAgMHg4ODFDLCAweDNCMDcsIDB4ODgxRiwgMHgxRTg1LCAweDg4MjEsIDB4MTlBNywgMHg4ODIyLCAweDE5QTYsCisgICAgMHg4ODIzLCAweDE5NjEsIDB4ODgyNywgMHgxOUFCLCAweDg4MjgsIDB4NDhDNiwgMHg4ODJELCAweDREM0UsCisgICAgMHg4ODJFLCAweDQ4QzcsIDB4ODgzMSwgMHgxOUE4LCAweDg4MzIsIDB4NDhDOCwgMHg4ODM2LCAweDE5QTksCisgICAgMHg4ODM5LCAweDE5QUEsIDB4ODgzQSwgMHg0RDNGLCAweDg4M0IsIDB4MTlBQywgMHg4ODNDLCAweDQ4QzksCisgICAgMHg4ODQwLCAweDA3NDIsIDB4ODg0MiwgMHgxOUFFLCAweDg4NDQsIDB4MTlBRCwgMHg4ODQ1LCAweDRENDAsCisgICAgMHg4ODQ2LCAweDA5M0EsIDB4ODg0QSwgMHg0OENCLCAweDg4NEIsIDB4NEQ0MSwgMHg4ODRDLCAweDA3RTYsCisgICAgMHg4ODRELCAweDE1MjQsIDB4ODg0RSwgMHg0RDQyLCAweDg4NTIsIDB4MTlBRiwgMHg4ODUzLCAweDA5NUIsCisgICAgMHg4ODU1LCAweDRENDMsIDB4ODg1NiwgMHgzQjA4LCAweDg4NTcsIDB4MDU5NywgMHg4ODU4LCAweDQ4Q0MsCisgICAgMHg4ODU5LCAweDE5QjAsIDB4ODg1QSwgMHg0RDQ0LCAweDg4NUIsIDB4MDRGNCwgMHg4ODVELCAweDA5QkYsCisgICAgMHg4ODVFLCAweDE5QjEsIDB4ODg1RiwgMHgzQjA5LCAweDg4NjEsIDB4MDdFNywgMHg4ODYyLCAweDE5QjIsCisgICAgMHg4ODYzLCAweDA0QTUsIDB4ODg2NCwgMHgzQjBBLCAweDg4NjgsIDB4MERBRiwgMHg4ODY5LCAweDQ4Q0YsCisgICAgMHg4ODZCLCAweDE5QjMsIDB4ODg2RSwgMHg0RDQ1LCAweDg4NkYsIDB4NDhEMSwgMHg4ODcwLCAweDBBMzAsCisgICAgMHg4ODcyLCAweDE5QkEsIDB4ODg3NSwgMHgxOUI3LCAweDg4NzcsIDB4MEJBRCwgMHg4ODdELCAweDE5QjgsCisgICAgMHg4ODdFLCAweDE5QjUsIDB4ODg3RiwgMHgwNkQ2LCAweDg4ODEsIDB4MTlCNCwgMHg4ODgyLCAweDE5QkIsCisgICAgMHg4ODg4LCAweDA3MEMsIDB4ODg4QiwgMHgwQjNFLCAweDg4OEQsIDB4MTlDMSwgMHg4ODkyLCAweDE5QkQsCisgICAgMHg4ODk2LCAweDBCMTUsIDB4ODg5NywgMHgxOUJDLCAweDg4OTgsIDB4M0IwQiwgMHg4ODk5LCAweDE5QkYsCisgICAgMHg4ODlBLCAweDRENDYsIDB4ODg5QiwgMHg0RDQ3LCAweDg4OUMsIDB4NEQ0OCwgMHg4ODlFLCAweDE5QjYsCisgICAgMHg4OEEwLCAweDQ4RDIsIDB4ODhBMiwgMHgxOUMwLCAweDg4QTQsIDB4MTlDMiwgMHg4OEFBLCAweDNCMEMsCisgICAgMHg4OEFCLCAweDBEODMsIDB4ODhBRSwgMHgxOUJFLCAweDg4QjAsIDB4MTlDMywgMHg4OEIxLCAweDE5QzUsCisgICAgMHg4OEI0LCAweDA3ODcsIDB4ODhCNSwgMHgxOUI5LCAweDg4QjcsIDB4MDQ4NSwgMHg4OEJDLCAweDQ4RDMsCisgICAgMHg4OEJELCAweDNCMEQsIDB4ODhCRSwgMHgzQjBFLCAweDg4QkYsIDB4MTlDNCwgMHg4OEMwLCAweDQ4RDQsCisgICAgMHg4OEMxLCAweDA4NEIsIDB4ODhDMiwgMHgwRkJFLCAweDg4QzMsIDB4MTlDNiwgMHg4OEM0LCAweDE5QzcsCisgICAgMHg4OEM1LCAweDBBRjcsIDB4ODhDNiwgMHgzNzg5LCAweDg4Q0EsIDB4M0IwRiwgMHg4OENELCAweDRENDksCisgICAgMHg4OENFLCAweDQyREMsIDB4ODhDRiwgMHgwRjZBLCAweDg4RDEsIDB4NDhENiwgMHg4OEQyLCAweDNCMTAsCisgICAgMHg4OEQzLCAweDQ4RDcsIDB4ODhENCwgMHgxOUM4LCAweDg4RDUsIDB4MEYxRiwgMHg4OEQ4LCAweDE5QzksCisgICAgMHg4OEQ5LCAweDE5Q0EsIDB4ODhEQiwgMHgzQjExLCAweDg4REMsIDB4MEUzNCwgMHg4OERELCAweDE5Q0IsCisgICAgMHg4OERGLCAweDA4MzAsIDB4ODhFMCwgMHg0RDRBLCAweDg4RTEsIDB4MEY2QiwgMHg4OEU4LCAweDE5RDAsCisgICAgMHg4OEVGLCAweDRENEIsIDB4ODhGMCwgMHgzQjEyLCAweDg4RjEsIDB4M0IxMywgMHg4OEYyLCAweDE5RDEsCisgICAgMHg4OEYzLCAweDA5QzAsIDB4ODhGNCwgMHgxOUNGLCAweDg4RjUsIDB4MjFBNywgMHg4OEY4LCAweDBGNTEsCisgICAgMHg4OEY5LCAweDE5Q0MsIDB4ODhGQywgMHgxOUNFLCAweDg4RkQsIDB4MEE2MSwgMHg4OEZFLCAweDBBNDQsCisgICAgMHg4OTAxLCAweDQ4RDksIDB4ODkwMiwgMHgxOUNELCAweDg5MDQsIDB4MTlEMiwgMHg4OTA2LCAweDNCMTQsCisgICAgMHg4OTA3LCAweDBERjMsIDB4ODkwQSwgMHgxOUQ0LCAweDg5MEMsIDB4MTlEMywgMHg4OTBFLCAweDRENEMsCisgICAgMHg4OTBGLCAweDRENEQsIDB4ODkxMCwgMHgwNUNBLCAweDg5MTIsIDB4MEU1OSwgMHg4OTEzLCAweDE5RDUsCisgICAgMHg4OTE4LCAweDNCMTUsIDB4ODkxOSwgMHgzQjE2LCAweDg5MUEsIDB4M0IxNywgMHg4OTFDLCAweDIwQTgsCisgICAgMHg4OTFELCAweDE5RTEsIDB4ODkxRSwgMHgxOUQ3LCAweDg5MjUsIDB4MTlEOCwgMHg4OTI2LCAweDRENEUsCisgICAgMHg4OTI3LCAweDNCMTgsIDB4ODkyQSwgMHgxOUQ5LCAweDg5MkIsIDB4MTlEQSwgMHg4OTMwLCAweDNCMTksCisgICAgMHg4OTMyLCAweDQyREUsIDB4ODkzNSwgMHg0RDRGLCAweDg5MzYsIDB4MTlERSwgMHg4OTM3LCAweDQ4REIsCisgICAgMHg4OTM4LCAweDE5REYsIDB4ODkzOSwgMHg0MkRGLCAweDg5M0IsIDB4MTlERCwgMHg4OTNFLCAweDNCMUEsCisgICAgMHg4OTQwLCAweDQyRTAsIDB4ODk0MSwgMHgxOURCLCAweDg5NDIsIDB4NDhERCwgMHg4OTQzLCAweDE5RDYsCisgICAgMHg4OTQ0LCAweDE5REMsIDB4ODk0NSwgMHg0OERFLCAweDg5NDksIDB4NDhERiwgMHg4OTRDLCAweDE5RTAsCisgICAgMHg4OTRELCAweDFCRDAsIDB4ODk1NiwgMHgwNTI4LCAweDg5NUEsIDB4NEQ1MCwgMHg4OTVDLCAweDRENTEsCisgICAgMHg4OTVFLCAweDE5RTMsIDB4ODk1RiwgMHgwNkQ3LCAweDg5NjAsIDB4MTlFMiwgMHg4OTYyLCAweDQ4RTEsCisgICAgMHg4OTY0LCAweDE5RTUsIDB4ODk2NiwgMHgxOUU0LCAweDg5NkEsIDB4MTlFNywgMHg4OTZCLCAweDRENTIsCisgICAgMHg4OTZELCAweDE5RTYsIDB4ODk2RiwgMHgxOUU4LCAweDg5NzAsIDB4NEQ1MywgMHg4OTcyLCAweDA5M0IsCisgICAgMHg4OTc0LCAweDE5RTksIDB4ODk3NywgMHgxOUVBLCAweDg5N0IsIDB4M0IxQiwgMHg4OTdDLCAweDRENTQsCisgICAgMHg4OTdFLCAweDE5RUIsIDB4ODk3RiwgMHgwQTYyLCAweDg5ODAsIDB4MzYyRSwgMHg4OTgxLCAweDBGNDEsCisgICAgMHg4OTgzLCAweDE5RUMsIDB4ODk4NiwgMHgwREY0LCAweDg5ODcsIDB4MENGQywgMHg4OTg4LCAweDE5RUQsCisgICAgMHg4OTg5LCAweDQ4RTIsIDB4ODk4QSwgMHgxOUVFLCAweDg5OEIsIDB4MDc1RiwgMHg4OThGLCAweDA2NDYsCisgICAgMHg4OTkwLCAweDQ4RTMsIDB4ODk5MywgMHgxOUVGLCAweDg5OTQsIDB4NDJFMSwgMHg4OTk2LCAweDA4QjksCisgICAgMHg4OTk3LCAweDBDRjcsIDB4ODk5OCwgMHgxOUYwLCAweDg5OUEsIDB4MDVBRSwgMHg4OTlGLCAweDQ4RTQsCisgICAgMHg4OUExLCAweDE5RjEsIDB4ODlBNSwgMHg0RDU1LCAweDg5QTYsIDB4MTlGMywgMHg4OUE3LCAweDBGNjEsCisgICAgMHg4OUE5LCAweDE5RjIsIDB4ODlBQSwgMHgwQTBDLCAweDg5QUMsIDB4MTlGNCwgMHg4OUFGLCAweDE5RjUsCisgICAgMHg4OUIwLCAweDQ4RTUsIDB4ODlCMiwgMHgxOUY2LCAweDg5QjMsIDB4MDYwRCwgMHg4OUI1LCAweDRENTYsCisgICAgMHg4OUI3LCAweDQ4RTYsIDB4ODlCQSwgMHgxOUY3LCAweDg5QkMsIDB4NEQ1NywgMHg4OUJELCAweDE5RjgsCisgICAgMHg4OUJGLCAweDE5RjksIDB4ODlDMCwgMHgxOUZBLCAweDg5RDIsIDB4MDVBRiwgMHg4OUQ0LCAweDNCMUMsCisgICAgMHg4OUQ1LCAweDRENTgsIDB4ODlENiwgMHgzQjFELCAweDg5RDgsIDB4NDhFNywgMHg4OURBLCAweDE5RkIsCisgICAgMHg4OURDLCAweDE5RkMsIDB4ODlERCwgMHgxOUZELCAweDg5RTMsIDB4MDU3MiwgMHg4OUU1LCAweDNCMUUsCisgICAgMHg4OUU2LCAweDA5RUUsIDB4ODlFNywgMHgxOUZFLCAweDg5RUIsIDB4NDhFOCwgMHg4OUYxLCAweDNCMUYsCisgICAgMHg4OUYzLCAweDQ4RUEsIDB4ODlGNCwgMHgxOUZGLCAweDg5RjYsIDB4NDJFMiwgMHg4OUY4LCAweDFBMDAsCisgICAgMHg4OUZELCAweDQ4RUIsIDB4ODlGRiwgMHg0OEVDLCAweDhBMDAsIDB4MDc3NCwgMHg4QTAxLCAweDM1QkMsCisgICAgMHg4QTAyLCAweDBDMTcsIDB4OEEwMywgMHgxQTAxLCAweDhBMDcsIDB4M0IyMCwgMHg4QTA4LCAweDA3MkQsCisgICAgMHg4QTBBLCAweDBBMUMsIDB4OEEwQywgMHgxQTA0LCAweDhBMEUsIDB4MEM3QywgMHg4QTBGLCAweDNCMjEsCisgICAgMHg4QTEwLCAweDFBMDMsIDB4OEExMSwgMHg0OEVFLCAweDhBMTIsIDB4MjFBOCwgMHg4QTEzLCAweDA3MDcsCisgICAgMHg4QTE0LCAweDQ4RUYsIDB4OEExNSwgMHgzQjIyLCAweDhBMTYsIDB4MUEwMiwgMHg4QTE3LCAweDBCNTcsCisgICAgMHg4QTE4LCAweDA2NDcsIDB4OEExQiwgMHgxQTA1LCAweDhBMUQsIDB4MUEwNiwgMHg4QTFGLCAweDA5QzEsCisgICAgMHg4QTIxLCAweDQ4RjEsIDB4OEEyMiwgMHgzQjIzLCAweDhBMjMsIDB4MDc0MywgMHg4QTI1LCAweDFBMDcsCisgICAgMHg4QTJBLCAweDBFNUEsIDB4OEEyRCwgMHgwQTgzLCAweDhBMzEsIDB4MDY5MCwgMHg4QTMzLCAweDBGMDEsCisgICAgMHg4QTM0LCAweDBBQ0MsIDB4OEEzNSwgMHg0OEYyLCAweDhBMzYsIDB4MUEwOCwgMHg4QTM3LCAweDIxQTksCisgICAgMHg4QTNBLCAweDBBMEQsIDB4OEEzQiwgMHgwQkFFLCAweDhBM0MsIDB4MDlDMiwgMHg4QTNFLCAweDQ4RjMsCisgICAgMHg4QTQxLCAweDFBMDksIDB4OEE0NSwgMHg0OEY0LCAweDhBNDYsIDB4MUEwQywgMHg4QTQ3LCAweDQyRTMsCisgICAgMHg4QTQ4LCAweDFBMEQsIDB4OEE0OSwgMHg0RDU5LCAweDhBNEQsIDB4NDhGNSwgMHg4QTRFLCAweDNCMjQsCisgICAgMHg4QTUwLCAweDA4MkUsIDB4OEE1MSwgMHgwQjIyLCAweDhBNTIsIDB4MUEwQiwgMHg4QTU0LCAweDA5QzMsCisgICAgMHg4QTU1LCAweDBEQjAsIDB4OEE1NywgMHg0RDVBLCAweDhBNTgsIDB4NDhGNiwgMHg4QTVCLCAweDFBMEEsCisgICAgMHg4QTVELCAweDQyRTQsIDB4OEE1RSwgMHgwOEJBLCAweDhBNjAsIDB4MDRGNSwgMHg4QTYxLCAweDQyRTUsCisgICAgMHg4QTYyLCAweDFBMTEsIDB4OEE2MywgMHgwNzJFLCAweDhBNjYsIDB4MDhCQywgMHg4QTY3LCAweDRENUIsCisgICAgMHg4QTY5LCAweDA4QkIsIDB4OEE2QiwgMHgwRkYzLCAweDhBNkMsIDB4MUExMCwgMHg4QTZELCAweDFBMEYsCisgICAgMHg4QTZFLCAweDBBQTksIDB4OEE3MCwgMHgwNjY3LCAweDhBNzEsIDB4MEZFOSwgMHg4QTcyLCAweDA1OTgsCisgICAgMHg4QTczLCAweDA5QzQsIDB4OEE3NSwgMHg0MkU2LCAweDhBNzksIDB4MjFBQSwgMHg4QTdDLCAweDFBMEUsCisgICAgMHg4QTdFLCAweDRENUMsIDB4OEE3RiwgMHgzQjI1LCAweDhBODIsIDB4MUExMywgMHg4QTg0LCAweDFBMTQsCisgICAgMHg4QTg1LCAweDFBMTIsIDB4OEE4NiwgMHg0RDVELCAweDhBODcsIDB4MDc4QywgMHg4QTg5LCAweDBGMkEsCisgICAgMHg4QThDLCAweDA4QkQsIDB4OEE4RCwgMHgwQ0RELCAweDhBOTAsIDB4NDhGOCwgMHg4QTkxLCAweDFBMTcsCisgICAgMHg4QTkzLCAweDBBNjQsIDB4OEE5NSwgMHgwQjgwLCAweDhBOTYsIDB4NEQ1RSwgMHg4QTk4LCAweDBGMjAsCisgICAgMHg4QTlBLCAweDFBMUEsIDB4OEE5RSwgMHgwN0EwLCAweDhBQTAsIDB4MEE2MywgMHg4QUExLCAweDFBMTYsCisgICAgMHg4QUEzLCAweDFBMUIsIDB4OEFBNCwgMHgwN0ExLCAweDhBQTUsIDB4MUExOCwgMHg4QUE2LCAweDFBMTksCisgICAgMHg4QUE3LCAweDIxQUIsIDB4OEFBOCwgMHgxQTE1LCAweDhBQUEsIDB4MzYzOCwgMHg4QUFDLCAweDBBODYsCisgICAgMHg4QUFELCAweDBDQTEsIDB4OEFBRSwgMHg0OEY3LCAweDhBQjAsIDB4MEI2RCwgMHg4QUIyLCAweDA1NUQsCisgICAgMHg4QUI2LCAweDRENUYsIDB4OEFCNywgMHg0OEY5LCAweDhBQjksIDB4MEQ4NCwgMHg4QUJDLCAweDA2NUQsCisgICAgMHg4QUJFLCAweDIxQUMsIDB4OEFCRiwgMHgwQkQwLCAweDhBQzIsIDB4MUExRSwgMHg4QUM0LCAweDFBMUMsCisgICAgMHg4QUM3LCAweDBCOEEsIDB4OEFDOSwgMHg0RDYwLCAweDhBQ0IsIDB4MEE2NSwgMHg4QUNDLCAweDA2MEUsCisgICAgMHg4QUNELCAweDFBMUQsIDB4OEFDRiwgMHgwQTIxLCAweDhBRDAsIDB4NDJFNywgMHg4QUQxLCAweDRENjEsCisgICAgMHg4QUQyLCAweDBGOTIsIDB4OEFENiwgMHgwRkU2LCAweDhBRDcsIDB4NDhGQSwgMHg4QURBLCAweDFBMUYsCisgICAgMHg4QURCLCAweDFBMkEsIDB4OEFEQywgMHgwQkQxLCAweDhBREQsIDB4NEQ2MiwgMHg4QURFLCAweDFBMjksCisgICAgMHg4QURGLCAweDIxQUQsIDB4OEFFMCwgMHgxQTI2LCAweDhBRTEsIDB4MUEyRSwgMHg4QUUyLCAweDFBMjcsCisgICAgMHg4QUU0LCAweDFBMjMsIDB4OEFFNiwgMHgwQzE4LCAweDhBRTcsIDB4MUEyMiwgMHg4QUVCLCAweDFBMjAsCisgICAgMHg4QUVDLCAweDRENjMsIDB4OEFFRCwgMHgwRjBCLCAweDhBRUUsIDB4MDhCRSwgMHg4QUYxLCAweDFBMjQsCisgICAgMHg4QUYzLCAweDFBMjEsIDB4OEFGNCwgMHgzQjI2LCAweDhBRjUsIDB4NEQ2NCwgMHg4QUY2LCAweDIxQUYsCisgICAgMHg4QUY3LCAweDFBMjgsIDB4OEFGOCwgMHgwOTdFLCAweDhBRkEsIDB4MDc3NSwgMHg4QUZDLCAweDQ4RkIsCisgICAgMHg4QUZFLCAweDBCNUEsIDB4OEIwMCwgMHgwRTczLCAweDhCMDEsIDB4MDRGQywgMHg4QjAyLCAweDA0QTYsCisgICAgMHg4QjA0LCAweDBDN0QsIDB4OEIwNSwgMHg0OEZFLCAweDhCMDYsIDB4NEQ2NSwgMHg4QjA3LCAweDFBMkMsCisgICAgMHg4QjBBLCAweDQ4RkQsIDB4OEIwQywgMHgxQTJCLCAweDhCMEQsIDB4NDhGRiwgMHg4QjBFLCAweDBDQkUsCisgICAgMHg4QjBGLCAweDRENjYsIDB4OEIxMCwgMHgxQTMwLCAweDhCMTEsIDB4NEQ2NywgMHg4QjE0LCAweDFBMjUsCisgICAgMHg4QjE2LCAweDFBMkYsIDB4OEIxNywgMHgxQTMxLCAweDhCMTksIDB4MDc2MCwgMHg4QjFBLCAweDFBMkQsCisgICAgMHg4QjFCLCAweDA3RTgsIDB4OEIxQywgMHg0OTAwLCAweDhCMUQsIDB4MDkwMSwgMHg4QjFGLCAweDNCMjcsCisgICAgMHg4QjIwLCAweDFBMzIsIDB4OEIyMSwgMHgwRjQyLCAweDhCMjYsIDB4MUEzNSwgMHg4QjI4LCAweDFBMzgsCisgICAgMHg4QjJCLCAweDFBMzYsIDB4OEIyQywgMHgwREE3LCAweDhCMkQsIDB4NDkwMSwgMHg4QjMzLCAweDFBMzMsCisgICAgMHg4QjM3LCAweDNCMjgsIDB4OEIzOSwgMHgwNkQ4LCAweDhCM0UsIDB4MUEzNywgMHg4QjQxLCAweDFBMzksCisgICAgMHg4QjQzLCAweDNCMjksIDB4OEI0NCwgMHgzQjJBLCAweDhCNDUsIDB4NEQ2OCwgMHg4QjQ2LCAweDQyRTgsCisgICAgMHg4QjQ5LCAweDFBM0QsIDB4OEI0QywgMHgxQTNBLCAweDhCNEUsIDB4MUEzQywgMHg4QjRGLCAweDFBM0IsCisgICAgMHg4QjUxLCAweDQ5MDMsIDB4OEI1MiwgMHg0RDY5LCAweDhCNTMsIDB4MjFCMCwgMHg4QjU0LCAweDNCMkIsCisgICAgMHg4QjU2LCAweDFBM0UsIDB4OEI1OCwgMHgwOERELCAweDhCNTksIDB4NDJFOSwgMHg4QjVBLCAweDFBNDAsCisgICAgMHg4QjVCLCAweDFBM0YsIDB4OEI1QywgMHgwRERBLCAweDhCNUUsIDB4NDkwNCwgMHg4QjVGLCAweDFBNDIsCisgICAgMHg4QjY2LCAweDA3MkYsIDB4OEI2OSwgMHg0MkVBLCAweDhCNkIsIDB4MUE0MSwgMHg4QjZDLCAweDFBNDMsCisgICAgMHg4QjZELCAweDRENkEsIDB4OEI2RiwgMHgxQTQ0LCAweDhCNzAsIDB4MDY1RSwgMHg4QjcxLCAweDE4MkUsCisgICAgMHg4QjcyLCAweDA5RTEsIDB4OEI3NCwgMHgxQTQ1LCAweDhCNzYsIDB4NDkwNSwgMHg4Qjc3LCAweDA3QTIsCisgICAgMHg4Qjc4LCAweDRENkIsIDB4OEI3QywgMHg0RDZDLCAweDhCN0QsIDB4MUE0NiwgMHg4QjdFLCAweDRENkQsCisgICAgMHg4QjdGLCAweDIxQjEsIDB4OEI4MCwgMHgxQTQ3LCAweDhCODEsIDB4NDkwNiwgMHg4QjgzLCAweDA4OEMsCisgICAgMHg4Qjg1LCAweDRENkUsIDB4OEI4QSwgMHgxM0QzLCAweDhCOEIsIDB4NDkwNywgMHg4QjhDLCAweDFBNDgsCisgICAgMHg4QjhFLCAweDFBNDksIDB4OEI5MCwgMHgwOTNDLCAweDhCOTIsIDB4MUE0QSwgMHg4QjkzLCAweDFBNEIsCisgICAgMHg4Qjk0LCAweDQ5MDgsIDB4OEI5NSwgMHg0OTA5LCAweDhCOTYsIDB4MUE0QywgMHg4Qjk5LCAweDFBNEQsCisgICAgMHg4QjlBLCAweDFBNEUsIDB4OEI5QywgMHgzQjJDLCAweDhCOUQsIDB4NDJFQiwgMHg4QjlFLCAweDNCMkQsCisgICAgMHg4QjlGLCAweDRENkYsIDB4OEMzNywgMHgwQjY5LCAweDhDMzksIDB4NDkwQSwgMHg4QzNBLCAweDFBNEYsCisgICAgMHg4QzNELCAweDQ5MEMsIDB4OEMzRiwgMHgxQTUxLCAweDhDNDEsIDB4MUE1MCwgMHg4QzQ1LCAweDQ5MEYsCisgICAgMHg4QzQ2LCAweDBDN0UsIDB4OEM0NywgMHgzQjJFLCAweDhDNDgsIDB4MUE1MiwgMHg4QzQ5LCAweDQyRUMsCisgICAgMHg4QzRBLCAweDBFNUIsIDB4OEM0QiwgMHg0RDcwLCAweDhDNEMsIDB4MUE1MywgMHg4QzRFLCAweDFBNTQsCisgICAgMHg4QzRGLCAweDQ5MTAsIDB4OEM1MCwgMHgxQTU1LCAweDhDNTMsIDB4NEQ3MSwgMHg4QzU0LCAweDNCMkYsCisgICAgMHg4QzU1LCAweDFBNTYsIDB4OEM1NywgMHg0OTExLCAweDhDNUEsIDB4MENCMiwgMHg4QzYxLCAweDA5QzUsCisgICAgMHg4QzYyLCAweDFBNTcsIDB4OEM2OCwgMHg0MkVELCAweDhDNjksIDB4NDkxMiwgMHg4QzZBLCAweDA3RkQsCisgICAgMHg4QzZCLCAweDEwMDcsIDB4OEM2QywgMHgxQTU4LCAweDhDNkQsIDB4NDkxMywgMHg4QzczLCAweDNCMzAsCisgICAgMHg4Qzc4LCAweDFBNTksIDB4OEM3OSwgMHgwREIxLCAweDhDN0EsIDB4MUE1QSwgMHg4QzdCLCAweDRENzIsCisgICAgMHg4QzdDLCAweDFBNjIsIDB4OEM4MiwgMHgxQTVCLCAweDhDODUsIDB4MUE1RCwgMHg4Qzg5LCAweDFBNUMsCisgICAgMHg4QzhBLCAweDFBNUUsIDB4OEM4QywgMHgwRTc0LCAweDhDOEQsIDB4MUE1RiwgMHg4QzhFLCAweDFBNjAsCisgICAgMHg4QzkyLCAweDQ5MTYsIDB4OEM5MywgMHg0OTE1LCAweDhDOTQsIDB4MUE2MSwgMHg4Qzk4LCAweDFBNjMsCisgICAgMHg4Qzk5LCAweDQ5MTcsIDB4OEM5QiwgMHg0OTE5LCAweDhDOUQsIDB4MDU4QiwgMHg4QzlFLCAweDBDMDMsCisgICAgMHg4QzlGLCAweDM1NEMsIDB4OENBMCwgMHgwRERCLCAweDhDQTEsIDB4MDg1MiwgMHg4Q0EyLCAweDA3RTksCisgICAgMHg4Q0E0LCAweDNCMzEsIDB4OENBNywgMHgwREMxLCAweDhDQTgsIDB4MDU1RiwgMHg4Q0E5LCAweDBENjIsCisgICAgMHg4Q0FBLCAweDFBNjYsIDB4OENBQiwgMHgwNjBGLCAweDhDQUMsIDB4MEE3OSwgMHg4Q0FELCAweDFBNjUsCisgICAgMHg4Q0FFLCAweDFBNkEsIDB4OENBRiwgMHgwQkI3LCAweDhDQjAsIDB4MEVFRiwgMHg4Q0IyLCAweDFBNjgsCisgICAgMHg4Q0IzLCAweDFBNjksIDB4OENCNCwgMHgwNjQ4LCAweDhDQjYsIDB4MUE2QiwgMHg4Q0I3LCAweDBEMTksCisgICAgMHg4Q0I4LCAweDBCM0YsIDB4OENCQSwgMHg0RDczLCAweDhDQkIsIDB4MEQ4NSwgMHg4Q0JDLCAweDBDMzcsCisgICAgMHg4Q0JELCAweDFBNjcsIDB4OENCRiwgMHgwRTc1LCAweDhDQzAsIDB4MDU2QywgMHg4Q0MxLCAweDFBNkQsCisgICAgMHg4Q0MyLCAweDBGQ0UsIDB4OENDMywgMHgwQkRFLCAweDhDQzQsIDB4MEZFQiwgMHg4Q0M1LCAweDRENzQsCisgICAgMHg4Q0M3LCAweDA4QkYsIDB4OENDOCwgMHgxQTZDLCAweDhDQzksIDB4NEQ3NSwgMHg4Q0NBLCAweDBCMTEsCisgICAgMHg4Q0NELCAweDFBN0QsIDB4OENDRSwgMHgwQUFBLCAweDhDRDEsIDB4MENEMCwgMHg4Q0QyLCAweDRENzYsCisgICAgMHg4Q0QzLCAweDBEQzIsIDB4OENENSwgMHg0OTFCLCAweDhDRDYsIDB4NDkxQSwgMHg4Q0Q5LCAweDNCMzIsCisgICAgMHg4Q0RBLCAweDFBNzAsIDB4OENEQiwgMHgwODhELCAweDhDREMsIDB4MDhDMCwgMHg4Q0RFLCAweDA5QzYsCisgICAgMHg4Q0UwLCAweDBEMUIsIDB4OENFMSwgMHgzQjMzLCAweDhDRTIsIDB4MDc2MSwgMHg4Q0UzLCAweDFBNkYsCisgICAgMHg4Q0U0LCAweDFBNkUsIDB4OENFNiwgMHgwRERDLCAweDhDRUEsIDB4MDhFRCwgMHg4Q0VDLCAweDRENzcsCisgICAgMHg4Q0VELCAweDBDNEMsIDB4OENGMCwgMHgyMUIyLCAweDhDRjEsIDB4NDkxRCwgMHg4Q0Y0LCAweDIxQjMsCisgICAgMHg4Q0Y1LCAweDRENzgsIDB4OENGNywgMHg0RDc5LCAweDhDRjgsIDB4M0IzNCwgMHg4Q0ZBLCAweDFBNzIsCisgICAgMHg4Q0ZCLCAweDFBNzMsIDB4OENGQywgMHgwN0VBLCAweDhDRkQsIDB4MUE3MSwgMHg4Q0ZFLCAweDNCMzUsCisgICAgMHg4RDAxLCAweDREN0EsIDB4OEQwMywgMHg0RDdCLCAweDhEMDQsIDB4MUE3NCwgMHg4RDA1LCAweDFBNzUsCisgICAgMHg4RDA3LCAweDFBNzcsIDB4OEQwOCwgMHgwQjAzLCAweDhEMDksIDB4NDkxRiwgMHg4RDBBLCAweDFBNzYsCisgICAgMHg4RDBCLCAweDA2MjIsIDB4OEQwRCwgMHgxQTc5LCAweDhEMEUsIDB4NDkyMCwgMHg4RDBGLCAweDFBNzgsCisgICAgMHg4RDEwLCAweDFBN0EsIDB4OEQxMiwgMHgyMUI0LCAweDhEMTMsIDB4MUE3QywgMHg4RDE0LCAweDFBN0UsCisgICAgMHg4RDE2LCAweDFBN0YsIDB4OEQxNywgMHg0RDdDLCAweDhEMUIsIDB4M0IzNiwgMHg4RDFDLCAweDREN0QsCisgICAgMHg4RDY0LCAweDBBN0EsIDB4OEQ2NiwgMHgwOEZCLCAweDhENjcsIDB4MUE4MCwgMHg4RDY5LCAweDNCMzcsCisgICAgMHg4RDZCLCAweDA1QjAsIDB4OEQ2QywgMHgzQjM4LCAweDhENkQsIDB4MUE4MSwgMHg4RDZFLCAweDREN0UsCisgICAgMHg4RDcwLCAweDBBRjgsIDB4OEQ3MSwgMHgxQTgyLCAweDhENzMsIDB4MUE4MywgMHg4RDc0LCAweDBEREQsCisgICAgMHg4RDc2LCAweDIxQjUsIDB4OEQ3NywgMHgwNjQ5LCAweDhEODEsIDB4MUE4NCwgMHg4RDg0LCAweDNCMzksCisgICAgMHg4RDg1LCAweDBCRDIsIDB4OEQ4QSwgMHgwNEZELCAweDhEOEQsIDB4M0IzQSwgMHg4RDkxLCAweDREN0YsCisgICAgMHg4RDk1LCAweDNCM0IsIDB4OEQ5OSwgMHgxQTg1LCAweDhEOUYsIDB4NEQ4MCwgMHg4REEzLCAweDA5MUQsCisgICAgMHg4REE2LCAweDNCM0MsIDB4OERBOCwgMHgwQTNDLCAweDhEQUIsIDB4NEQ4MSwgMHg4REFGLCAweDQyRUUsCisgICAgMHg4REIyLCAweDREODIsIDB4OERCMywgMHgwQjBELCAweDhEQkEsIDB4MUE4OCwgMHg4REJFLCAweDFBODcsCisgICAgMHg4REMyLCAweDFBODYsIDB4OERDNiwgMHgzQjNELCAweDhEQzgsIDB4NDkyMSwgMHg4RENCLCAweDFBOEUsCisgICAgMHg4RENDLCAweDFBOEMsIDB4OERDRSwgMHgzQjNFLCAweDhEQ0YsIDB4MUE4OSwgMHg4REQxLCAweDQyRUYsCisgICAgMHg4REQ1LCAweDREODMsIDB4OERENiwgMHgxQThCLCAweDhERDcsIDB4NDJGMCwgMHg4REQ5LCAweDQ5MjIsCisgICAgMHg4RERBLCAweDFBOEEsIDB4OEREQiwgMHgxQThELCAweDhEREQsIDB4MDY5MSwgMHg4RERGLCAweDFBOTEsCisgICAgMHg4REUxLCAweDBBN0IsIDB4OERFMywgMHgxQTkyLCAweDhERTQsIDB4M0IzRiwgMHg4REU3LCAweDREODQsCisgICAgMHg4REU4LCAweDA3OEQsIDB4OERFQSwgMHgxQThGLCAweDhERUIsIDB4MUE5MCwgMHg4REVDLCAweDNCNDAsCisgICAgMHg4REVGLCAweDBGQ0YsIDB4OERGMSwgMHg0RDg1LCAweDhERjIsIDB4NEQ4NiwgMHg4REYzLCAweDBCRDMsCisgICAgMHg4REY0LCAweDREODcsIDB4OERGNSwgMHgwQUFCLCAweDhERkMsIDB4MUE5MywgMHg4REZELCAweDQ5MjUsCisgICAgMHg4REZGLCAweDFBOTYsIDB4OEUwMSwgMHg0RDg4LCAweDhFMDYsIDB4NDkyNiwgMHg4RTA4LCAweDFBOTQsCisgICAgMHg4RTA5LCAweDFBOTUsIDB4OEUwQSwgMHgwRjQzLCAweDhFMEIsIDB4NEQ4OSwgMHg4RTBDLCAweDQ5MjMsCisgICAgMHg4RTBGLCAweDBDN0YsIDB4OEUxMCwgMHgxQTk5LCAweDhFMTQsIDB4NDkyOCwgMHg4RTE2LCAweDQ5MjksCisgICAgMHg4RTFELCAweDFBOTcsIDB4OEUxRSwgMHgxQTk4LCAweDhFMUYsIDB4MUE5QSwgMHg4RTIwLCAweDNCNDEsCisgICAgMHg4RTIxLCAweDQ5MkEsIDB4OEUyMiwgMHg0OTJCLCAweDhFMjMsIDB4NDJGMSwgMHg4RTI2LCAweDREOEEsCisgICAgMHg4RTI3LCAweDQ5MkMsIDB4OEUyQSwgMHgxQUE4LCAweDhFMzAsIDB4MUE5RCwgMHg4RTMxLCAweDREOEIsCisgICAgMHg4RTM0LCAweDFBOUUsIDB4OEUzNSwgMHgxQTlDLCAweDhFMzYsIDB4NDkyRiwgMHg4RTM5LCAweDQ5MzAsCisgICAgMHg4RTNELCAweDQyRjIsIDB4OEU0MCwgMHg0RDhDLCAweDhFNDEsIDB4NEQ4RCwgMHg4RTQyLCAweDFBOUIsCisgICAgMHg4RTQ0LCAweDBDMTksIDB4OEU0NywgMHgxQUEwLCAweDhFNDgsIDB4MUFBNCwgMHg4RTQ5LCAweDFBQTEsCisgICAgMHg4RTRBLCAweDFBOUYsIDB4OEU0QiwgMHgzQjQyLCAweDhFNEMsIDB4MUFBMiwgMHg4RTRELCAweDREOEUsCisgICAgMHg4RTRGLCAweDREOEYsIDB4OEU1MCwgMHgxQUEzLCAweDhFNTQsIDB4NDkzMSwgMHg4RTU1LCAweDFBQUEsCisgICAgMHg4RTU5LCAweDFBQTUsIDB4OEU1QywgMHg0RDkwLCAweDhFNUYsIDB4MEE3QywgMHg4RTYwLCAweDFBQTcsCisgICAgMHg4RTYxLCAweDREOTEsIDB4OEU2MiwgMHg0OTMyLCAweDhFNjMsIDB4MUFBOSwgMHg4RTY0LCAweDFBQTYsCisgICAgMHg4RTY5LCAweDREOTIsIDB4OEU2QywgMHgzQjQzLCAweDhFNkQsIDB4NDkzMywgMHg4RTZGLCAweDQ5MzQsCisgICAgMHg4RTcwLCAweDNCNDQsIDB4OEU3MSwgMHg0RDkzLCAweDhFNzIsIDB4MUFBQywgMHg4RTc0LCAweDA5M0QsCisgICAgMHg4RTc1LCAweDREOTQsIDB4OEU3NiwgMHgxQUFCLCAweDhFNzcsIDB4NEQ5NSwgMHg4RTdBLCAweDNCNDUsCisgICAgMHg4RTdCLCAweDQyRjMsIDB4OEU3QywgMHgxQUFELCAweDhFODEsIDB4MUFBRSwgMHg4RTg0LCAweDFBQjEsCisgICAgMHg4RTg1LCAweDFBQjAsIDB4OEU4NywgMHgxQUFGLCAweDhFODksIDB4NEQ5NiwgMHg4RThBLCAweDFBQjMsCisgICAgMHg4RThCLCAweDFBQjIsIDB4OEU4RCwgMHgwRjAyLCAweDhFOTAsIDB4NEQ5NywgMHg4RTkxLCAweDFBQjUsCisgICAgMHg4RTkyLCAweDNCNDYsIDB4OEU5MywgMHgxQUI0LCAweDhFOTQsIDB4MUFCNiwgMHg4RTk1LCAweDREOTgsCisgICAgMHg4RTk4LCAweDQ5MzUsIDB4OEU5OSwgMHgxQUI3LCAweDhFOUEsIDB4NEQ5OSwgMHg4RTlFLCAweDQ5MzYsCisgICAgMHg4RUExLCAweDFBQjksIDB4OEVBNywgMHg0RDlBLCAweDhFQTksIDB4NEQ5QiwgMHg4RUFBLCAweDFBQjgsCisgICAgMHg4RUFCLCAweDBBMEUsIDB4OEVBQywgMHgxQUJBLCAweDhFQUQsIDB4NEQ5QywgMHg4RUFFLCAweDNCNDcsCisgICAgMHg4RUFGLCAweDA2RTUsIDB4OEVCMCwgMHgxQUJCLCAweDhFQjEsIDB4MUFCRCwgMHg4RUIzLCAweDNCNDgsCisgICAgMHg4RUI1LCAweDQ5MzcsIDB4OEVCNiwgMHgzNzAzLCAweDhFQkIsIDB4NDkzOCwgMHg4RUJFLCAweDFBQkUsCisgICAgMHg4RUMwLCAweDFERUYsIDB4OEVDNSwgMHgxQUJGLCAweDhFQzYsIDB4MUFCQywgMHg4RUM4LCAweDFBQzAsCisgICAgMHg4RUNBLCAweDA5MDIsIDB4OEVDQiwgMHgxQUMxLCAweDhFQ0MsIDB4MDY0QSwgMHg4RUNELCAweDA3MDksCisgICAgMHg4RUNGLCAweDIxQjcsIDB4OEVEMSwgMHgzQjQ5LCAweDhFRDIsIDB4MDc2MiwgMHg4RUQ0LCAweDNCNEEsCisgICAgMHg4RURCLCAweDFBQzIsIDB4OEVERiwgMHgwQ0M4LCAweDhFRTIsIDB4MEMzOCwgMHg4RUUzLCAweDFBQzMsCisgICAgMHg4RUU4LCAweDREOUQsIDB4OEVFQiwgMHgxQUM2LCAweDhFRjAsIDB4NEQ5RSwgMHg4RUY4LCAweDA4RTAsCisgICAgMHg4RUY5LCAweDNCNEIsIDB4OEVGQSwgMHg0MkY2LCAweDhFRkIsIDB4MUFDNSwgMHg4RUZDLCAweDFBQzQsCisgICAgMHg4RUZELCAweDA3MzAsIDB4OEVGRSwgMHgxQUM3LCAweDhGMDAsIDB4NDkzQywgMHg4RjAzLCAweDA1QjEsCisgICAgMHg4RjA1LCAweDFBQzksIDB4OEYwNywgMHg0RDlGLCAweDhGMDgsIDB4NDkzRCwgMHg4RjA5LCAweDA4NEMsCisgICAgMHg4RjBBLCAweDFBQzgsIDB4OEYwQywgMHgxQUQxLCAweDhGMTIsIDB4MUFDQiwgMHg4RjEzLCAweDFBQ0QsCisgICAgMHg4RjE0LCAweDBFMzUsIDB4OEYxNSwgMHgxQUNBLCAweDhGMTcsIDB4M0I0QywgMHg4RjE4LCAweDREQTAsCisgICAgMHg4RjE5LCAweDFBQ0MsIDB4OEYxQiwgMHgxQUQwLCAweDhGMUMsIDB4MUFDRSwgMHg4RjFELCAweDA2NEIsCisgICAgMHg4RjFFLCAweDQyRjcsIDB4OEYxRiwgMHgxQUNGLCAweDhGMjUsIDB4NERBMSwgMHg4RjI2LCAweDFBRDIsCisgICAgMHg4RjI3LCAweDREQTIsIDB4OEYyOSwgMHgwRDEwLCAweDhGMkEsIDB4MEZBMCwgMHg4RjJCLCAweDQ5M0UsCisgICAgMHg4RjJDLCAweDREQTMsIDB4OEYyRCwgMHg0MkY4LCAweDhGMkYsIDB4MDkzRSwgMHg4RjMzLCAweDFBRDMsCisgICAgMHg4RjM1LCAweDREQTQsIDB4OEYzNiwgMHgzQjRELCAweDhGMzgsIDB4MEYwQywgMHg4RjM5LCAweDFBRDUsCisgICAgMHg4RjNBLCAweDREQTUsIDB4OEYzQiwgMHgxQUQ0LCAweDhGM0UsIDB4MUFEOCwgMHg4RjNGLCAweDBGMkIsCisgICAgMHg4RjQwLCAweDQ5M0YsIDB4OEY0MiwgMHgxQUQ3LCAweDhGNDMsIDB4NERBNiwgMHg4RjQ0LCAweDA1Q0IsCisgICAgMHg4RjQ1LCAweDFBRDYsIDB4OEY0NiwgMHgxQURCLCAweDhGNDcsIDB4NERBNywgMHg4RjQ5LCAweDFBREEsCisgICAgMHg4RjRBLCAweDQ5NDAsIDB4OEY0QywgMHgxQUQ5LCAweDhGNEQsIDB4MEMyQywgMHg4RjRFLCAweDFBREMsCisgICAgMHg4RjUxLCAweDREQTgsIDB4OEY1NCwgMHg0MkY5LCAweDhGNTUsIDB4NERBOSwgMHg4RjU3LCAweDFBREQsCisgICAgMHg4RjU4LCAweDQ5NDEsIDB4OEY1QywgMHgxQURFLCAweDhGNUYsIDB4MDdGRSwgMHg4RjYxLCAweDA2RkIsCisgICAgMHg4RjYyLCAweDFBREYsIDB4OEY2MywgMHgxQUUwLCAweDhGNjQsIDB4MUFFMSwgMHg4RjlCLCAweDBBMEYsCisgICAgMHg4RjlDLCAweDFBRTIsIDB4OEY5RSwgMHgwOEQ5LCAweDhGOUYsIDB4MUFFMywgMHg4RkEwLCAweDREQUEsCisgICAgMHg4RkExLCAweDREQUIsIDB4OEZBMiwgMHg0REFDLCAweDhGQTMsIDB4MUFFNCwgMHg4RkE0LCAweDQ5NDMsCisgICAgMHg4RkE1LCAweDREQUQsIDB4OEZBNiwgMHgzQjRFLCAweDhGQTcsIDB4MTBCNiwgMHg4RkE4LCAweDEwQjUsCisgICAgMHg4RkFELCAweDFBRTUsIDB4OEZBRSwgMHgxN0ZGLCAweDhGQUYsIDB4MUFFNiwgMHg4RkIwLCAweDBCNjIsCisgICAgMHg4RkIxLCAweDA5RjEsIDB4OEZCMiwgMHgwQ0Y2LCAweDhGQjQsIDB4NDk0NCwgMHg4RkI1LCAweDNCNEYsCisgICAgMHg4RkI2LCAweDNCNTAsIDB4OEZCNywgMHgxQUU3LCAweDhGQkEsIDB4MEUyNSwgMHg4RkJCLCAweDBCRjAsCisgICAgMHg4RkJDLCAweDA4MTAsIDB4OEZCRiwgMHgwQjY3LCAweDhGQzEsIDB4NDk0NiwgMHg4RkMyLCAweDA0Q0MsCisgICAgMHg4RkM0LCAweDBFQTYsIDB4OEZDNSwgMHgwQTFELCAweDhGQzYsIDB4NDk0NywgMHg4RkM4LCAweDM3OTksCisgICAgMHg4RkNBLCAweDQ5NDksIDB4OEZDRCwgMHg0OTRBLCAweDhGQ0UsIDB4MDczNCwgMHg4RkQxLCAweDA2RDksCisgICAgMHg4RkQzLCAweDQ5NEIsIDB4OEZENCwgMHgwRTI2LCAweDhGRDUsIDB4NDk0QywgMHg4RkRBLCAweDFBRTgsCisgICAgMHg4RkUwLCAweDNCNTIsIDB4OEZFMiwgMHgxQUVBLCAweDhGRTQsIDB4M0I1MywgMHg4RkU1LCAweDFBRTksCisgICAgMHg4RkU2LCAweDA1NjAsIDB4OEZFOCwgMHg0MkZCLCAweDhGRTksIDB4MENDRSwgMHg4RkVBLCAweDFBRUIsCisgICAgMHg4RkVCLCAweDBEMkQsIDB4OEZFRCwgMHgwQzJELCAweDhGRUUsIDB4NDJGQywgMHg4RkVGLCAweDFBRUMsCisgICAgMHg4RkYwLCAweDA5NUMsIDB4OEZGMSwgMHg0OTRELCAweDhGRjQsIDB4MUFFRSwgMHg4RkY1LCAweDQ5NEUsCisgICAgMHg4RkY2LCAweDNCNTQsIDB4OEZGNywgMHgwRUNFLCAweDhGRjgsIDB4MUFGRCwgMHg4RkY5LCAweDFBRjAsCisgICAgMHg4RkZBLCAweDFBRjEsIDB4OEZGQiwgMHg0OTRGLCAweDhGRkQsIDB4MEJFNSwgMHg5MDAwLCAweDBCNDAsCisgICAgMHg5MDAxLCAweDBBRjksIDB4OTAwMiwgMHgzQjU1LCAweDkwMDMsIDB4MEM4MCwgMHg5MDA0LCAweDREQUUsCisgICAgMHg5MDA1LCAweDFBRUYsIDB4OTAwNiwgMHgwNjZGLCAweDkwMDgsIDB4NDJGRCwgMHg5MDBCLCAweDFBRjgsCisgICAgMHg5MDBDLCAweDQ5NTAsIDB4OTAwRCwgMHgxQUY1LCAweDkwMEUsIDB4MUIwMiwgMHg5MDBGLCAweDBDODEsCisgICAgMHg5MDEwLCAweDBCOUUsIDB4OTAxMSwgMHgxQUYyLCAweDkwMTMsIDB4MEMxQSwgMHg5MDE0LCAweDBDNEQsCisgICAgMHg5MDE1LCAweDFBRjMsIDB4OTAxNiwgMHgxQUY3LCAweDkwMTcsIDB4MEEyNiwgMHg5MDE5LCAweDBEMUQsCisgICAgMHg5MDFBLCAweDBCRTgsIDB4OTAxQiwgMHg0REFGLCAweDkwMUQsIDB4MEE2NiwgMHg5MDFFLCAweDFBRjYsCisgICAgMHg5MDFGLCAweDBCMEUsIDB4OTAyMCwgMHgwQjA0LCAweDkwMjEsIDB4MUFGNCwgMHg5MDIyLCAweDA0NkQsCisgICAgMHg5MDIzLCAweDBGQzgsIDB4OTAyNywgMHgxQUY5LCAweDkwMkMsIDB4M0I1NiwgMHg5MDJELCAweDQyRkUsCisgICAgMHg5MDJFLCAweDBCNDEsIDB4OTAyRiwgMHg0REIwLCAweDkwMzEsIDB4MDkzRiwgMHg5MDMyLCAweDBBMTAsCisgICAgMHg5MDM1LCAweDFBRkIsIDB4OTAzNiwgMHgxQUZBLCAweDkwMzcsIDB4NDk1MSwgMHg5MDM4LCAweDA0QjMsCisgICAgMHg5MDM5LCAweDFBRkMsIDB4OTAzQywgMHgwREExLCAweDkwM0UsIDB4MUIwNCwgMHg5MDQxLCAweDBDQjMsCisgICAgMHg5MDQyLCAweDBBMzEsIDB4OTA0MywgMHg0OTUzLCAweDkwNDQsIDB4M0I1NywgMHg5MDQ1LCAweDBCOTcsCisgICAgMHg5MDQ3LCAweDA2RjAsIDB4OTA0OSwgMHgxQjAzLCAweDkwNEEsIDB4MEYyMSwgMHg5MDRCLCAweDA0RTEsCisgICAgMHg5MDRDLCAweDREQjEsIDB4OTA0RCwgMHgwRTI3LCAweDkwNEUsIDB4MDU2MSwgMHg5MDRGLCAweDFBRkUsCisgICAgMHg5MDUwLCAweDFBRkYsIDB4OTA1MSwgMHgxQjAwLCAweDkwNTIsIDB4MUIwMSwgMHg5MDUzLCAweDBDOTMsCisgICAgMHg5MDU0LCAweDBCNjEsIDB4OTA1NSwgMHgwNEE3LCAweDkwNTYsIDB4MUIwNSwgMHg5MDU4LCAweDFCMDYsCisgICAgMHg5MDU5LCAweDFEMzQsIDB4OTA1QiwgMHg0REIyLCAweDkwNUMsIDB4MEIxRCwgMHg5MDVELCAweDQ5NTQsCisgICAgMHg5MDVFLCAweDFCMDcsIDB4OTA2MCwgMHgwNTE1LCAweDkwNjEsIDB4MEFDRSwgMHg5MDYzLCAweDA3NjMsCisgICAgMHg5MDY1LCAweDBGNDQsIDB4OTA2NywgMHgyMUJBLCAweDkwNjgsIDB4MUIwOCwgMHg5MDY5LCAweDBDMjYsCisgICAgMHg5MDZELCAweDBBRkEsIDB4OTA2RSwgMHgwOTAzLCAweDkwNkYsIDB4MUIwOSwgMHg5MDcwLCAweDREQjMsCisgICAgMHg5MDcyLCAweDFCMEMsIDB4OTA3NCwgMHg0REI0LCAweDkwNzUsIDB4MDk2RiwgMHg5MDc2LCAweDFCMEEsCisgICAgMHg5MDc3LCAweDBBQUQsIDB4OTA3OCwgMHgwQUFDLCAweDkwNzksIDB4NERCNSwgMHg5MDdBLCAweDA0QTgsCisgICAgMHg5MDdDLCAweDBGOTMsIDB4OTA3RCwgMHgxQjBFLCAweDkwN0YsIDB4MEQ4NiwgMHg5MDgwLCAweDFCMTAsCisgICAgMHg5MDgxLCAweDFCMEYsIDB4OTA4MiwgMHgxQjBELCAweDkwODMsIDB4MTczNywgMHg5MDg0LCAweDA2MTAsCisgICAgMHg5MDg1LCAweDQ5NTcsIDB4OTA4NywgMHgxQUVELCAweDkwODgsIDB4M0I1OCwgMHg5MDg5LCAweDFCMTIsCisgICAgMHg5MDhBLCAweDFCMTEsIDB4OTA4QiwgMHg0REI2LCAweDkwOEMsIDB4NDk1OCwgMHg5MDhGLCAweDFCMTMsCisgICAgMHg5MDkwLCAweDQ5NTksIDB4OTA5MSwgMHgwRjIyLCAweDkwOTUsIDB4M0I1OSwgMHg5MDk3LCAweDQyRkYsCisgICAgMHg5MDk4LCAweDREQjcsIDB4OTA5OSwgMHgzQjVBLCAweDkwOUIsIDB4M0I1QiwgMHg5MEEwLCAweDREQjgsCisgICAgMHg5MEExLCAweDQ5NUEsIDB4OTBBMiwgMHgzQjVDLCAweDkwQTMsIDB4MENCOSwgMHg5MEE2LCAweDBFNUMsCisgICAgMHg5MEE4LCAweDFCMTQsIDB4OTBBQSwgMHgwOTA1LCAweDkwQUYsIDB4MUIxNSwgMHg5MEIwLCAweDQ5NUMsCisgICAgMHg5MEIxLCAweDFCMTYsIDB4OTBCMiwgMHg0REI5LCAweDkwQjMsIDB4NDMwMCwgMHg5MEI0LCAweDNCNUQsCisgICAgMHg5MEI1LCAweDFCMTcsIDB4OTBCNiwgMHg0OTVELCAweDkwQjgsIDB4MEMxQiwgMHg5MEJELCAweDREQkEsCisgICAgMHg5MEJFLCAweDQzMDEsIDB4OTBDMSwgMHgwNEFFLCAweDkwQzMsIDB4NDk1RSwgMHg5MEM0LCAweDQzMDIsCisgICAgMHg5MEM1LCAweDQzMDMsIDB4OTBDNywgMHg0MzA0LCAweDkwQzgsIDB4NDk1RiwgMHg5MEM5LCAweDREQkIsCisgICAgMHg5MENBLCAweDA3RUIsIDB4OTBDRSwgMHgwRkUwLCAweDkwRDcsIDB4M0I1RSwgMHg5MERCLCAweDFCMUIsCisgICAgMHg5MERDLCAweDQ5NjEsIDB4OTBERCwgMHgzQjVGLCAweDkwREUsIDB4MjFCQiwgMHg5MERGLCAweDQ5NjIsCisgICAgMHg5MEUxLCAweDA3MEEsIDB4OTBFMiwgMHgxQjE4LCAweDkwRTQsIDB4MUIxOSwgMHg5MEU4LCAweDBERTYsCisgICAgMHg5MEVCLCAweDQ5NjcsIDB4OTBFRCwgMHgwNUIyLCAweDkwRUYsIDB4NDMwNSwgMHg5MEYwLCAweDREQkMsCisgICAgMHg5MEYyLCAweDQ5NjUsIDB4OTBGNCwgMHgzQjYwLCAweDkwRjUsIDB4MEYyMywgMHg5MEY2LCAweDQ5NjQsCisgICAgMHg5MEY3LCAweDA2QjcsIDB4OTBGRCwgMHgwQzRFLCAweDkwRkUsIDB4NDk2OCwgMHg5MEZGLCAweDQ5NjksCisgICAgMHg5MTAwLCAweDQ5NjYsIDB4OTEwMiwgMHgxQjFDLCAweDkxMDQsIDB4NDk2QSwgMHg5MTA1LCAweDREQkQsCisgICAgMHg5MTA2LCAweDQ5NkIsIDB4OTExMiwgMHgxQjFELCAweDkxMTQsIDB4NDMwNiwgMHg5MTE1LCAweDIxQkQsCisgICAgMHg5MTE2LCAweDQzMDcsIDB4OTExNywgMHgzQjYxLCAweDkxMTgsIDB4NDk2QywgMHg5MTE5LCAweDFCMUUsCisgICAgMHg5MTFDLCAweDNCNjIsIDB4OTExRSwgMHg0OTZELCAweDkxMjIsIDB4NDMwOCwgMHg5MTIzLCAweDQzMDksCisgICAgMHg5MTI1LCAweDREQkUsIDB4OTEyNywgMHgyMUJFLCAweDkxMkQsIDB4MEMxQywgMHg5MTJGLCAweDQzMEEsCisgICAgMHg5MTMwLCAweDFCMjAsIDB4OTEzMSwgMHgzQjYzLCAweDkxMzIsIDB4MUIxRiwgMHg5MTM0LCAweDQzMEIsCisgICAgMHg5MTM3LCAweDQ5NkUsIDB4OTEzOSwgMHg0OTZGLCAweDkxM0EsIDB4M0I2NCwgMHg5MTNELCAweDNCNjUsCisgICAgMHg5MTQ2LCAweDQ5NzAsIDB4OTE0NywgMHg0OTcxLCAweDkxNDgsIDB4M0I2NiwgMHg5MTQ5LCAweDBDQUIsCisgICAgMHg5MTRBLCAweDFCMjEsIDB4OTE0QiwgMHgwOTQwLCAweDkxNEMsIDB4MDkwQywgMHg5MTRELCAweDBEMTEsCisgICAgMHg5MTRFLCAweDBCQUYsIDB4OTE1MiwgMHgwOTFFLCAweDkxNTQsIDB4MEEzMiwgMHg5MTU2LCAweDFCMjIsCisgICAgMHg5MTU3LCAweDQ5NzIsIDB4OTE1OCwgMHgxQjIzLCAweDkxNTksIDB4NDk3MywgMHg5MTVBLCAweDREQkYsCisgICAgMHg5MTVCLCAweDNCNjcsIDB4OTE2MSwgMHgzQjY4LCAweDkxNjIsIDB4MEEyMywgMHg5MTYzLCAweDFCMjQsCisgICAgMHg5MTY0LCAweDNCNjksIDB4OTE2NSwgMHgxQjI1LCAweDkxNjcsIDB4NERDMCwgMHg5MTY5LCAweDFCMjYsCisgICAgMHg5MTZBLCAweDBGNTksIDB4OTE2QywgMHgwOTQxLCAweDkxNzIsIDB4MUIyOCwgMHg5MTczLCAweDFCMjcsCisgICAgMHg5MTc0LCAweDQ5NzQsIDB4OTE3NSwgMHgwN0VDLCAweDkxNzcsIDB4MDgwNSwgMHg5MTc4LCAweDA4OEUsCisgICAgMHg5MTc5LCAweDQ5NzUsIDB4OTE3QSwgMHg0REMxLCAweDkxODIsIDB4MUIyQiwgMHg5MTgzLCAweDQzMEMsCisgICAgMHg5MTg1LCAweDQ5NzYsIDB4OTE4NywgMHgwOTcwLCAweDkxODksIDB4MUIyQSwgMHg5MThBLCAweDREQzIsCisgICAgMHg5MThCLCAweDFCMjksIDB4OTE4RCwgMHgwQjQ5LCAweDkxOEUsIDB4M0I2QSwgMHg5MTkwLCAweDA3QTMsCisgICAgMHg5MTkxLCAweDREQzMsIDB4OTE5MiwgMHgwQTY3LCAweDkxOTUsIDB4NERDNCwgMHg5MTk3LCAweDBENDQsCisgICAgMHg5MTlDLCAweDA5NDMsIDB4OTE5RSwgMHgzQjZCLCAweDkxQTIsIDB4MUIyQywgMHg5MUE0LCAweDA5QzcsCisgICAgMHg5MUE4LCAweDNCNkMsIDB4OTFBQSwgMHgxQjJGLCAweDkxQUIsIDB4MUIyRCwgMHg5MUFDLCAweDFFMUIsCisgICAgMHg5MUFELCAweDNCNkQsIDB4OTFBRSwgMHgzQjZFLCAweDkxQUYsIDB4MUIyRSwgMHg5MUIwLCAweDREQzUsCisgICAgMHg5MUIxLCAweDFFNjEsIDB4OTFCMiwgMHgzQjZGLCAweDkxQjMsIDB4NDk3NywgMHg5MUI0LCAweDFCMzEsCisgICAgMHg5MUI1LCAweDFCMzAsIDB4OTFCNiwgMHg0OTc4LCAweDkxQjgsIDB4MDlFMiwgMHg5MUJBLCAweDFCMzIsCisgICAgMHg5MUJCLCAweDREQzYsIDB4OTFCQywgMHgzQjcwLCAweDkxQkQsIDB4NERDNywgMHg5MUMwLCAweDFCMzMsCisgICAgMHg5MUMxLCAweDFCMzQsIDB4OTFDMiwgMHg0REM4LCAweDkxQzMsIDB4NDk3OSwgMHg5MUM0LCAweDQ5N0EsCisgICAgMHg5MUM1LCAweDREQzksIDB4OTFDNiwgMHgwRDY0LCAweDkxQzcsIDB4MDg0MywgMHg5MUM4LCAweDA5MEQsCisgICAgMHg5MUM5LCAweDFCMzUsIDB4OTFDQiwgMHgxQjM2LCAweDkxQ0MsIDB4MEY2QywgMHg5MUNELCAweDA5NEYsCisgICAgMHg5MUNFLCAweDBFRkEsIDB4OTFDRiwgMHgwRjk0LCAweDkxRDAsIDB4MUIzNywgMHg5MUQxLCAweDA2REEsCisgICAgMHg5MUQ2LCAweDFCMzgsIDB4OTFENywgMHgyMUMwLCAweDkxRDgsIDB4MEMxRCwgMHg5MURBLCAweDIxQkYsCisgICAgMHg5MURCLCAweDFCM0IsIDB4OTFEQywgMHgwNUQ2LCAweDkxREQsIDB4MEExMSwgMHg5MURFLCAweDIxQzEsCisgICAgMHg5MURGLCAweDFCMzksIDB4OTFFMSwgMHgxQjNBLCAweDkxRTMsIDB4MEJGQywgMHg5MUU0LCAweDIxQzQsCisgICAgMHg5MUU1LCAweDIxQzUsIDB4OTFFNiwgMHgwRTgzLCAweDkxRTcsIDB4MDZGNCwgMHg5MUVDLCAweDQ5N0QsCisgICAgMHg5MUVELCAweDIxQzIsIDB4OTFFRSwgMHgyMUMzLCAweDkxRjAsIDB4M0I3MSwgMHg5MUYxLCAweDQzMEQsCisgICAgMHg5MUY1LCAweDFCM0QsIDB4OTFGNiwgMHgxQjNFLCAweDkxRjcsIDB4M0I3MiwgMHg5MUZCLCAweDNCNzMsCisgICAgMHg5MUZDLCAweDFCM0MsIDB4OTFGRiwgMHgxQjQwLCAweDkyMDAsIDB4NERDQSwgMHg5MjAxLCAweDQ5N0UsCisgICAgMHg5MjA2LCAweDIxQzYsIDB4OTIwNywgMHgzQjc0LCAweDkyMDksIDB4NERDQiwgMHg5MjBBLCAweDIxQzgsCisgICAgMHg5MjBELCAweDBDQjcsIDB4OTIwRSwgMHgwNUExLCAweDkyMTAsIDB4MjFDNywgMHg5MjExLCAweDFCNDQsCisgICAgMHg5MjE0LCAweDFCNDEsIDB4OTIxNSwgMHgxQjQzLCAweDkyMTYsIDB4NDk3RiwgMHg5MjE3LCAweDQ5ODAsCisgICAgMHg5MjFFLCAweDFCM0YsIDB4OTIyMywgMHg0RENDLCAweDkyMjgsIDB4M0I3NSwgMHg5MjI5LCAweDFCOEEsCisgICAgMHg5MjJDLCAweDFCNDIsIDB4OTIzMywgMHgzQjc2LCAweDkyMzQsIDB4MEZCMywgMHg5MjM3LCAweDA3OEUsCisgICAgMHg5MjM4LCAweDNCNzcsIDB4OTIzOSwgMHgyMUNGLCAweDkyM0EsIDB4MjFDOSwgMHg5MjNDLCAweDIxQ0IsCisgICAgMHg5MjNGLCAweDFCNEMsIDB4OTI0MCwgMHgyMUNBLCAweDkyNDIsIDB4NDk4MiwgMHg5MjQzLCAweDNCNzgsCisgICAgMHg5MjQ0LCAweDBDMkUsIDB4OTI0NSwgMHgxQjQ3LCAweDkyNDcsIDB4M0I3OSwgMHg5MjQ4LCAweDFCNEEsCisgICAgMHg5MjQ5LCAweDFCNDgsIDB4OTI0QSwgMHg0OTgzLCAweDkyNEIsIDB4MUI0RCwgMHg5MjRFLCAweDIxQ0MsCisgICAgMHg5MjRGLCAweDNCN0EsIDB4OTI1MCwgMHgxQjRFLCAweDkyNTEsIDB4MjFDRSwgMHg5MjU2LCAweDQ5ODQsCisgICAgMHg5MjU3LCAweDFCNDYsIDB4OTI1OSwgMHgyMUNELCAweDkyNUEsIDB4MUI1MywgMHg5MjVCLCAweDA1MTYsCisgICAgMHg5MjVFLCAweDFCNDUsIDB4OTI2MCwgMHgzQjdCLCAweDkyNjEsIDB4NDk4NSwgMHg5MjYyLCAweDBENDEsCisgICAgMHg5MjY0LCAweDFCNDksIDB4OTI2NSwgMHg0OTg2LCAweDkyNjYsIDB4MDlDOCwgMHg5MjY3LCAweDIxRDAsCisgICAgMHg5MjY4LCAweDQ5ODcsIDB4OTI3MSwgMHgwN0VELCAweDkyNzYsIDB4NERDRCwgMHg5Mjc3LCAweDIxRDIsCisgICAgMHg5Mjc4LCAweDIxRDMsIDB4OTI3QywgMHg0OTg5LCAweDkyN0QsIDB4NDk4QSwgMHg5MjdFLCAweDBFNzYsCisgICAgMHg5MjdGLCAweDQ5OEIsIDB4OTI4MCwgMHgwNkRDLCAweDkyODMsIDB4MDk1MCwgMHg5Mjg1LCAweDBDOTQsCisgICAgMHg5Mjg4LCAweDIwQUEsIDB4OTI4OSwgMHg0OThDLCAweDkyOEQsIDB4NDk4RCwgMHg5MjhFLCAweDREQ0UsCisgICAgMHg5MjkxLCAweDBBQUYsIDB4OTI5MywgMHgxQjUxLCAweDkyOTUsIDB4MUI0QiwgMHg5Mjk2LCAweDFCNTAsCisgICAgMHg5Mjk3LCAweDQ5OEUsIDB4OTI5OCwgMHgwRUNGLCAweDkyOTksIDB4NDk4RiwgMHg5MjlBLCAweDBCRDQsCisgICAgMHg5MjlCLCAweDFCNTIsIDB4OTI5QywgMHgxQjRGLCAweDkyOUYsIDB4NDk5MCwgMHg5MkE3LCAweDIxRDEsCisgICAgMHg5MkFCLCAweDQ5OTEsIDB4OTJBRCwgMHgwQUFFLCAweDkyQUYsIDB4NERDRiwgMHg5MkIyLCAweDQ5OTQsCisgICAgMHg5MkIzLCAweDM1NTQsIDB4OTJCNywgMHgxQjU2LCAweDkyQjksIDB4MUI1NSwgMHg5MkJCLCAweDRERDAsCisgICAgMHg5MkJDLCAweDRERDEsIDB4OTJCRiwgMHg0OTk1LCAweDkyQzAsIDB4NDk5NiwgMHg5MkMxLCAweDRERDIsCisgICAgMHg5MkMyLCAweDNCN0MsIDB4OTJDMywgMHg0REQzLCAweDkyQzUsIDB4NERENCwgMHg5MkM2LCAweDQ5OTcsCisgICAgMHg5MkM4LCAweDRERDUsIDB4OTJDQiwgMHgzQjdELCAweDkyQ0MsIDB4M0I3RSwgMHg5MkNFLCAweDQ5OTgsCisgICAgMHg5MkNGLCAweDFCNTQsIDB4OTJEMCwgMHgyMUQ3LCAweDkyRDIsIDB4MEU1RCwgMHg5MkQzLCAweDIxREIsCisgICAgMHg5MkQ1LCAweDIxRDksIDB4OTJENywgMHgyMUQ1LCAweDkyRDksIDB4MjFENiwgMHg5MkRGLCAweDNCN0YsCisgICAgMHg5MkUwLCAweDIxREEsIDB4OTJFNCwgMHgwOTg1LCAweDkyRTUsIDB4NDk5OSwgMHg5MkU3LCAweDIxRDQsCisgICAgMHg5MkU5LCAweDFCNTcsIDB4OTJFQSwgMHgwRTJGLCAweDkyRUQsIDB4MDRGNiwgMHg5MkYyLCAweDBEQjgsCisgICAgMHg5MkYzLCAweDBCQjAsIDB4OTJGNywgMHg0OTlELCAweDkyRjgsIDB4MDY5MiwgMHg5MkY5LCAweDIwQjAsCisgICAgMHg5MkZBLCAweDFCNTksIDB4OTJGQiwgMHgyMURFLCAweDkyRkMsIDB4MDdFRiwgMHg5MkZGLCAweDIxRTEsCisgICAgMHg5MzAyLCAweDIxRTMsIDB4OTMwNCwgMHgzNDVBLCAweDkzMDYsIDB4MDg3QSwgMHg5MzBELCAweDNCODAsCisgICAgMHg5MzBGLCAweDFCNTgsIDB4OTMxMCwgMHgwQTMzLCAweDkzMTEsIDB4NDk5QSwgMHg5MzE0LCAweDRERDYsCisgICAgMHg5MzE1LCAweDNCODEsIDB4OTMxOCwgMHgwQTM0LCAweDkzMTksIDB4MUI1QywgMHg5MzFBLCAweDFCNUUsCisgICAgMHg5MzFELCAweDIxRTIsIDB4OTMxRSwgMHgyMUUwLCAweDkzMUYsIDB4M0I4MiwgMHg5MzIwLCAweDA5RTMsCisgICAgMHg5MzIxLCAweDIxREQsIDB4OTMyMiwgMHgxQjVELCAweDkzMjMsIDB4MUI1RiwgMHg5MzI1LCAweDIxREMsCisgICAgMHg5MzI2LCAweDA2Q0IsIDB4OTMyNywgMHgzQjgzLCAweDkzMjgsIDB4MERCNywgMHg5MzI5LCAweDQ5OUUsCisgICAgMHg5MzJCLCAweDA5MEUsIDB4OTMyQywgMHgwRkM5LCAweDkzMkUsIDB4MUI1QiwgMHg5MzJGLCAweDA4NjgsCisgICAgMHg5MzMyLCAweDBGRTUsIDB4OTMzMywgMHg0REQ3LCAweDkzMzUsIDB4MUI2MSwgMHg5MzM2LCAweDRERDgsCisgICAgMHg5MzNBLCAweDFCNjAsIDB4OTMzQiwgMHgxQjYyLCAweDkzNDQsIDB4MUI1QSwgMHg5MzQ3LCAweDNCODQsCisgICAgMHg5MzQ4LCAweDIwQTksIDB4OTM0OSwgMHg0MzBFLCAweDkzNEEsIDB4MzQ1OCwgMHg5MzRCLCAweDBDQzEsCisgICAgMHg5MzRELCAweDBDNEYsIDB4OTM1MSwgMHg0OUExLCAweDkzNTIsIDB4M0I4NSwgMHg5MzU0LCAweDBCRjMsCisgICAgMHg5MzU2LCAweDFCNjcsIDB4OTM1NywgMHgyMUU1LCAweDkzNTgsIDB4NEREOSwgMHg5MzVBLCAweDQ5QTIsCisgICAgMHg5MzVCLCAweDBCODEsIDB4OTM1QywgMHgxQjYzLCAweDkzNjAsIDB4MUI2NCwgMHg5MzY0LCAweDQzMEYsCisgICAgMHg5MzY1LCAweDQzMTAsIDB4OTM2QSwgMHgzQjg3LCAweDkzNkIsIDB4NDlBMywgMHg5MzZDLCAweDA3MDMsCisgICAgMHg5MzZELCAweDNCODgsIDB4OTM2RSwgMHgxQjY2LCAweDkzNzAsIDB4MjFFNCwgMHg5MzcxLCAweDQ5QTQsCisgICAgMHg5MzczLCAweDQ5QTUsIDB4OTM3NSwgMHgwNzY0LCAweDkzN0MsIDB4MUI2NSwgMHg5MzdFLCAweDA5QzksCisgICAgMHg5MzdGLCAweDREREEsIDB4OTM4MiwgMHg0RERCLCAweDkzODgsIDB4NDlBOSwgMHg5MzhBLCAweDREREMsCisgICAgMHg5MzhCLCAweDQ5QUEsIDB4OTM4QywgMHgwNUQ3LCAweDkzOEYsIDB4NDlBQiwgMHg5Mzk0LCAweDFCNkIsCisgICAgMHg5Mzk2LCAweDA4MkYsIDB4OTM5NywgMHgwQUZCLCAweDkzOUEsIDB4MEJFNiwgMHg5MzlCLCAweDNCODksCisgICAgMHg5MzlFLCAweDQ5QUMsIDB4OTNBMSwgMHg0OUE2LCAweDkzQTMsIDB4NDMxMSwgMHg5M0E0LCAweDIxRTYsCisgICAgMHg5M0E3LCAweDA1OTksIDB4OTNBOSwgMHgzQjhCLCAweDkzQUMsIDB4MUI2OSwgMHg5M0FELCAweDFCNkEsCisgICAgMHg5M0FFLCAweDBCREYsIDB4OTNCMCwgMHgxQjY4LCAweDkzQjksIDB4MUI2QywgMHg5M0JBLCAweDNCOEEsCisgICAgMHg5M0JCLCAweDREREQsIDB4OTNDMSwgMHgzQjhDLCAweDkzQzMsIDB4MUI3MiwgMHg5M0M2LCAweDIxRTcsCisgICAgMHg5M0M3LCAweDQ5QjEsIDB4OTNDOCwgMHgxQjc1LCAweDkzQ0EsIDB4M0I4RCwgMHg5M0NDLCAweDREREUsCisgICAgMHg5M0QwLCAweDFCNzQsIDB4OTNEMSwgMHgwQzI3LCAweDkzRDYsIDB4MUI2RCwgMHg5M0Q3LCAweDFCNkUsCisgICAgMHg5M0Q4LCAweDFCNzEsIDB4OTNEQywgMHg0OUIyLCAweDkzREQsIDB4MUI3MywgMHg5M0RFLCAweDIxRTgsCisgICAgMHg5M0RGLCAweDQzMTIsIDB4OTNFMSwgMHgwNkI4LCAweDkzRTIsIDB4M0I4RSwgMHg5M0U0LCAweDFCNzYsCisgICAgMHg5M0U1LCAweDFCNzAsIDB4OTNFNiwgMHg0RERGLCAweDkzRTcsIDB4NDlCMywgMHg5M0U4LCAweDFCNkYsCisgICAgMHg5M0YxLCAweDQ5QjAsIDB4OTNGNSwgMHg0OUFELCAweDkzRjgsIDB4MjFFOSwgMHg5M0Y5LCAweDRERTAsCisgICAgMHg5M0ZBLCAweDNCOEYsIDB4OTNGQiwgMHg0OUI3LCAweDkzRkQsIDB4M0I5MCwgMHg5NDAyLCAweDRERTEsCisgICAgMHg5NDAzLCAweDFCN0EsIDB4OTQwNCwgMHg0MzEzLCAweDk0MDcsIDB4MUI3QiwgMHg5NDA5LCAweDQ5QjQsCisgICAgMHg5NDBELCAweDRERTIsIDB4OTQwRSwgMHg0REUzLCAweDk0MEYsIDB4M0I5MSwgMHg5NDEwLCAweDFCN0MsCisgICAgMHg5NDEzLCAweDFCNzksIDB4OTQxNCwgMHgxQjc4LCAweDk0MTYsIDB4NDlCNSwgMHg5NDE3LCAweDQ5QjYsCisgICAgMHg5NDE4LCAweDA5Q0EsIDB4OTQxOSwgMHgwQzgyLCAweDk0MUEsIDB4MUI3NywgMHg5NDIxLCAweDFCODAsCisgICAgMHg5NDJCLCAweDFCN0UsIDB4OTQyRSwgMHg0REU0LCAweDk0MzEsIDB4MjFFQSwgMHg5NDMyLCAweDQ5QjgsCisgICAgMHg5NDMzLCAweDQzMTQsIDB4OTQzNCwgMHgzQjkyLCAweDk0MzUsIDB4MUI3RiwgMHg5NDM2LCAweDFCN0QsCisgICAgMHg5NDM4LCAweDBCNTgsIDB4OTQzQSwgMHgxQjgxLCAweDk0M0IsIDB4NDlCOSwgMHg5NDNGLCAweDNCOTMsCisgICAgMHg5NDQxLCAweDFCODIsIDB4OTQ0NCwgMHgxQjg0LCAweDk0NDUsIDB4MjFFQiwgMHg5NDQ4LCAweDIxRUMsCisgICAgMHg5NDRBLCAweDQzMTUsIDB4OTQ0QywgMHg0REU1LCAweDk0NTEsIDB4MDYxMSwgMHg5NDUyLCAweDFCODMsCisgICAgMHg5NDUzLCAweDBGMDYsIDB4OTQ1NSwgMHgzQjk0LCAweDk0NUEsIDB4MUI4RiwgMHg5NDVCLCAweDFCODUsCisgICAgMHg5NDVFLCAweDFCODgsIDB4OTQ2MCwgMHgxQjg2LCAweDk0NjIsIDB4MUI4NywgMHg5NDYzLCAweDQzMTYsCisgICAgMHg5NDZBLCAweDFCODksIDB4OTQ2QiwgMHgzQjk1LCAweDk0NkQsIDB4NDlCQywgMHg5NDZGLCAweDQ5QkQsCisgICAgMHg5NDcwLCAweDFCOEIsIDB4OTQ3MSwgMHg0MzE3LCAweDk0NzIsIDB4M0I5NiwgMHg5NDc1LCAweDFCOEMsCisgICAgMHg5NDc3LCAweDFCOEQsIDB4OTQ3QywgMHgxQjkwLCAweDk0N0QsIDB4MUI4RSwgMHg5NDdFLCAweDFCOTEsCisgICAgMHg5NDdGLCAweDFCOTMsIDB4OTQ4MSwgMHgxQjkyLCAweDk1NzcsIDB4MEJENSwgMHg5NTc4LCAweDNCOTcsCisgICAgMHg5NTc5LCAweDQ5QkUsIDB4OTU4MCwgMHgwRUYzLCAweDk1ODIsIDB4MUI5NCwgMHg5NTgzLCAweDBBQjAsCisgICAgMHg5NTg2LCAweDQ5QkYsIDB4OTU4NywgMHgxQjk1LCAweDk1ODgsIDB4NERFNiwgMHg5NTg5LCAweDBFMTQsCisgICAgMHg5NThBLCAweDFCOTYsIDB4OTU4QiwgMHgwNTg5LCAweDk1OEMsIDB4NDlDMCwgMHg5NThELCAweDQ5QzEsCisgICAgMHg5NThFLCAweDQzMTgsIDB4OTU4RiwgMHgwNERFLCAweDk1OTEsIDB4MDYxMywgMHg5NTkyLCAweDIxRUQsCisgICAgMHg5NTkzLCAweDA2MTIsIDB4OTU5NCwgMHgxQjk3LCAweDk1OTYsIDB4MUI5OCwgMHg5NTk4LCAweDFCOTksCisgICAgMHg5NTk5LCAweDFCOUEsIDB4OTU5RiwgMHg0MzE5LCAweDk1QTAsIDB4MUI5QiwgMHg5NUExLCAweDRERTcsCisgICAgMHg5NUEyLCAweDA2MTQsIDB4OTVBMywgMHgwNUIzLCAweDk1QTQsIDB4MDdGMCwgMHg5NUE1LCAweDBENEEsCisgICAgMHg5NUE2LCAweDNCOTgsIDB4OTVBNywgMHgxQjlELCAweDk1QTgsIDB4MUI5QywgMHg5NUE5LCAweDNCOTksCisgICAgMHg5NUFCLCAweDRGNTksIDB4OTVBQywgMHg0MzFBLCAweDk1QUQsIDB4MUI5RSwgMHg5NUIxLCAweDM1NTUsCisgICAgMHg5NUIyLCAweDA0RkUsIDB4OTVCNCwgMHgzQjlCLCAweDk1QjYsIDB4NDMxQiwgMHg5NUI5LCAweDFCQTEsCisgICAgMHg5NUJCLCAweDFCQTAsIDB4OTVCQywgMHgxQjlGLCAweDk1QkQsIDB4M0I5QywgMHg5NUJFLCAweDFCQTIsCisgICAgMHg5NUJGLCAweDRERTgsIDB4OTVDMywgMHgxQkE1LCAweDk1QzYsIDB4NERFOSwgMHg5NUM3LCAweDA0OEIsCisgICAgMHg5NUM4LCAweDQ5QzQsIDB4OTVDOSwgMHg0REVBLCAweDk1Q0EsIDB4MUJBMywgMHg5NUNCLCAweDQzMUMsCisgICAgMHg5NUNDLCAweDFCQTcsIDB4OTVDRCwgMHgxQkE2LCAweDk1RDAsIDB4NDMxRCwgMHg5NUQxLCAweDRERUIsCisgICAgMHg5NUQyLCAweDRERUMsIDB4OTVEMywgMHg0MzFFLCAweDk1RDQsIDB4MUJBOSwgMHg5NUQ1LCAweDFCQTgsCisgICAgMHg5NUQ2LCAweDFCQUEsIDB4OTVEOCwgMHgwQzg2LCAweDk1REEsIDB4M0I5RCwgMHg5NURDLCAweDFCQUIsCisgICAgMHg5NURFLCAweDQzMjAsIDB4OTVFMCwgMHg0REVELCAweDk1RTEsIDB4MUJBQywgMHg5NUUyLCAweDFCQUUsCisgICAgMHg5NUU0LCAweDRERUUsIDB4OTVFNSwgMHgxQkFELCAweDk1RTYsIDB4NERFRiwgMHg5NjFDLCAweDBEREUsCisgICAgMHg5NjFELCAweDNCOUUsIDB4OTYyMSwgMHgxQkFGLCAweDk2MjQsIDB4NERGMCwgMHg5NjI4LCAweDFCQjAsCisgICAgMHg5NjJBLCAweDA4NTUsIDB4OTYyQywgMHg0OUM3LCAweDk2MkUsIDB4MUJCMSwgMHg5NjJGLCAweDFCQjIsCisgICAgMHg5NjMxLCAweDRERjEsIDB4OTYzMiwgMHgwRTc3LCAweDk2MzMsIDB4NDlDOCwgMHg5NjM0LCAweDQ5QzksCisgICAgMHg5NjM4LCAweDRERjIsIDB4OTYzQiwgMHgwQUNELCAweDk2M0MsIDB4NDlDQiwgMHg5NjNELCAweDRERjMsCisgICAgMHg5NjNGLCAweDA0NjgsIDB4OTY0MCwgMHgwQjJCLCAweDk2NDEsIDB4M0I5RiwgMHg5NjQyLCAweDFCQjMsCisgICAgMHg5NjQ0LCAweDBEREYsIDB4OTY0QiwgMHgxQkI2LCAweDk2NEMsIDB4MUJCNCwgMHg5NjRELCAweDA3RjEsCisgICAgMHg5NjRGLCAweDFCQjUsIDB4OTY1MCwgMHgwNzc2LCAweDk2NTQsIDB4NERGNCwgMHg5NjU4LCAweDNCQTAsCisgICAgMHg5NjVCLCAweDBFMTUsIDB4OTY1QywgMHgxQkI4LCAweDk2NUQsIDB4MUJCQSwgMHg5NjVFLCAweDFCQjksCisgICAgMHg5NjVGLCAweDFCQkIsIDB4OTY2MSwgMHg0OUNDLCAweDk2NjIsIDB4MDRDMywgMHg5NjYzLCAweDBBMUUsCisgICAgMHg5NjY0LCAweDA5ODYsIDB4OTY2NSwgMHgwNjE1LCAweDk2NjYsIDB4MUJCQywgMHg5NjZBLCAweDBEMUMsCisgICAgMHg5NjZDLCAweDFCQkUsIDB4OTY3MCwgMHgwNEM0LCAweDk2NzIsIDB4MUJCRCwgMHg5NjczLCAweDBCRTAsCisgICAgMHg5Njc0LCAweDRERjUsIDB4OTY3NSwgMHgwRjk1LCAweDk2NzYsIDB4MEM4MywgMHg5Njc3LCAweDFCQjcsCisgICAgMHg5Njc4LCAweDBGNkUsIDB4OTY3QSwgMHgwNzY1LCAweDk2N0IsIDB4NERGNiwgMHg5NjdELCAweDBGNDUsCisgICAgMHg5NjdGLCAweDRERjcsIDB4OTY4MSwgMHg0REY4LCAweDk2ODIsIDB4NDlDRSwgMHg5NjgzLCAweDRERjksCisgICAgMHg5Njg0LCAweDNCQTEsIDB4OTY4NSwgMHgwNkYxLCAweDk2ODYsIDB4MEY3QywgMHg5Njg4LCAweDA2RkUsCisgICAgMHg5Njg5LCAweDRERkEsIDB4OTY4QSwgMHgwQjQyLCAweDk2OEIsIDB4MTg2QywgMHg5NjhELCAweDFCQkYsCisgICAgMHg5NjhFLCAweDA1OEEsIDB4OTY4RiwgMHgwQTM1LCAweDk2OTQsIDB4MDVCNCwgMHg5Njk1LCAweDFCQzEsCisgICAgMHg5Njk2LCAweDRERkIsIDB4OTY5NywgMHgxQkMyLCAweDk2OTgsIDB4MUJDMCwgMHg5Njk5LCAweDA3M0EsCisgICAgMHg5NjlBLCAweDQ5RDAsIDB4OTY5QiwgMHgwODRELCAweDk2OUMsIDB4MDlDQiwgMHg5NjlELCAweDIxRjAsCisgICAgMHg5NkEwLCAweDA0QzUsIDB4OTZBMywgMHgwRkExLCAweDk2QTQsIDB4M0JBMiwgMHg5NkE1LCAweDQzMjEsCisgICAgMHg5NkE3LCAweDFCQzQsIDB4OTZBOCwgMHgxQjBCLCAweDk2QTksIDB4M0JBMywgMHg5NkFBLCAweDFCQzMsCisgICAgMHg5NkFFLCAweDRERkMsIDB4OTZBRiwgMHgyMUYxLCAweDk2QjAsIDB4MUJDNywgMHg5NkIxLCAweDFCQzUsCisgICAgMHg5NkIyLCAweDFCQzYsIDB4OTZCMywgMHg0OUQzLCAweDk2QjQsIDB4MUJDOCwgMHg5NkI2LCAweDFCQzksCisgICAgMHg5NkI3LCAweDBGQjQsIDB4OTZCOCwgMHgxQkNBLCAweDk2QjksIDB4MUJDQiwgMHg5NkJBLCAweDQ5RDQsCisgICAgMHg5NkJCLCAweDBBNkQsIDB4OTZCQywgMHgwRDRGLCAweDk2QkQsIDB4NDlENSwgMHg5NkMwLCAweDBBNDMsCisgICAgMHg5NkMxLCAweDA2MjMsIDB4OTZDNCwgMHgwRjI0LCAweDk2QzUsIDB4MDU2RCwgMHg5NkM2LCAweDA5NDIsCisgICAgMHg5NkM3LCAweDA3OEYsIDB4OTZDOSwgMHgxQkNFLCAweDk2Q0IsIDB4MUJDRCwgMHg5NkNDLCAweDA4QzEsCisgICAgMHg5NkNELCAweDFCQ0YsIDB4OTZDRSwgMHgxQkNDLCAweDk2RDEsIDB4MDg3NiwgMHg5NkQyLCAweDNCQTQsCisgICAgMHg5NkQ1LCAweDFCRDMsIDB4OTZENiwgMHgxOTkyLCAweDk2RDgsIDB4NDlEOCwgMHg5NkQ5LCAweDEwRUIsCisgICAgMHg5NkRBLCAweDQ5RDksIDB4OTZEQiwgMHgwQTNELCAweDk2REMsIDB4MUJEMSwgMHg5NkRELCAweDQ5REEsCisgICAgMHg5NkRFLCAweDNCQTYsIDB4OTZFMiwgMHgwRjZELCAweDk2RTMsIDB4MENDOSwgMHg5NkU4LCAweDA0Q0QsCisgICAgMHg5NkU5LCAweDNCQTcsIDB4OTZFQSwgMHgwQTg3LCAweDk2RUIsIDB4MDhFMiwgMHg5NkVGLCAweDQzMjIsCisgICAgMHg5NkYwLCAweDBFMDcsIDB4OTZGMSwgMHgzQkE4LCAweDk2RjIsIDB4MDRFMiwgMHg5NkY2LCAweDBGQjUsCisgICAgMHg5NkY3LCAweDBGNTUsIDB4OTZGOSwgMHgxQkQ0LCAweDk2RkIsIDB4MEMzRiwgMHg5NzAwLCAweDA5MjcsCisgICAgMHg5NzAyLCAweDNCQTksIDB4OTcwMywgMHg0REZELCAweDk3MDQsIDB4MUJENSwgMHg5NzA2LCAweDFCRDYsCisgICAgMHg5NzA3LCAweDBBMTIsIDB4OTcwOCwgMHgxQkQ3LCAweDk3MDksIDB4M0JBQSwgMHg5NzBBLCAweDBGQjYsCisgICAgMHg5NzBELCAweDFCRDIsIDB4OTcwRSwgMHgxQkQ5LCAweDk3MEYsIDB4MUJEQiwgMHg5NzExLCAweDFCREEsCisgICAgMHg5NzEzLCAweDFCRDgsIDB4OTcxNCwgMHg0OURDLCAweDk3MTYsIDB4MUJEQywgMHg5NzE5LCAweDFCREQsCisgICAgMHg5NzFCLCAweDRERkUsIDB4OTcxQywgMHgwQUZDLCAweDk3MUUsIDB4MDU2MiwgMHg5NzIxLCAweDRERkYsCisgICAgMHg5NzIyLCAweDRFMDAsIDB4OTcyMywgMHg0OURELCAweDk3MjQsIDB4MUJERSwgMHg5NzI3LCAweDBFQzQsCisgICAgMHg5NzI4LCAweDRFMDEsIDB4OTcyQSwgMHgxQkRGLCAweDk3MzAsIDB4MUJFMCwgMHg5NzMxLCAweDRFMDIsCisgICAgMHg5NzMyLCAweDBGRDAsIDB4OTczMywgMHgyMUYyLCAweDk3MzYsIDB4NDlERiwgMHg5NzM4LCAweDE0MTQsCisgICAgMHg5NzM5LCAweDFCRTEsIDB4OTczQiwgMHgyMUYzLCAweDk3M0QsIDB4MUJFMiwgMHg5NzNFLCAweDFCRTMsCisgICAgMHg5NzQxLCAweDQ5RTAsIDB4OTc0MiwgMHgxQkU3LCAweDk3NDMsIDB4MjFGNCwgMHg5NzQ0LCAweDFCRTQsCisgICAgMHg5NzQ2LCAweDFCRTUsIDB4OTc0NywgMHg0OUUxLCAweDk3NDgsIDB4MUJFNiwgMHg5NzQ5LCAweDFCRTgsCisgICAgMHg5NzRELCAweDIxRjUsIDB4OTc0RSwgMHg0MzIzLCAweDk3NEYsIDB4MjFGNiwgMHg5NzUxLCAweDIxRjcsCisgICAgMHg5NzUyLCAweDBBNjgsIDB4OTc1NSwgMHg0RjVBLCAweDk3NTYsIDB4MEYwMywgMHg5NzU3LCAweDQ5RTIsCisgICAgMHg5NzU5LCAweDBBNjksIDB4OTc1QSwgMHgzQkFCLCAweDk3NUIsIDB4NDlFMywgMHg5NzVDLCAweDFCRTksCisgICAgMHg5NzVFLCAweDBEODcsIDB4OTc2MCwgMHgxQkVBLCAweDk3NjEsIDB4MUQwNiwgMHg5NzYyLCAweDBFRDgsCisgICAgMHg5NzYzLCAweDNCQUMsIDB4OTc2NCwgMHgxQkVCLCAweDk3NjYsIDB4MUJFQywgMHg5NzY3LCAweDRFMDMsCisgICAgMHg5NzY4LCAweDFCRUQsIDB4OTc2OSwgMHgwNUI1LCAweDk3NkEsIDB4NDlFNCwgMHg5NzZCLCAweDFCRUYsCisgICAgMHg5NzZELCAweDBBMUYsIDB4OTc2RSwgMHgzQkFELCAweDk3NzEsIDB4MUJGMCwgMHg5NzczLCAweDNCQUUsCisgICAgMHg5Nzc0LCAweDA2RkEsIDB4OTc3NiwgMHg0RTA0LCAweDk3NzksIDB4MUJGMSwgMHg5NzdBLCAweDFCRjUsCisgICAgMHg5NzdDLCAweDFCRjMsIDB4OTc3RCwgMHg0RTA1LCAweDk3N0YsIDB4NEUwNiwgMHg5NzgxLCAweDFCRjQsCisgICAgMHg5Nzg0LCAweDA1RDEsIDB4OTc4NSwgMHgxQkYyLCAweDk3ODYsIDB4MUJGNiwgMHg5NzhCLCAweDFCRjcsCisgICAgMHg5NzhELCAweDA0OEMsIDB4OTc4RiwgMHgxQkY4LCAweDk3OTAsIDB4MUJGOSwgMHg5Nzk1LCAweDQzMjQsCisgICAgMHg5Nzk2LCAweDQ5RTcsIDB4OTc5OCwgMHgwOUNDLCAweDk3OTksIDB4NEUwNywgMHg5NzlBLCAweDNCQUYsCisgICAgMHg5NzlDLCAweDFCRkEsIDB4OTc5RSwgMHg0OUU4LCAweDk3OUYsIDB4NEUwOCwgMHg5N0EwLCAweDA2NjEsCisgICAgMHg5N0EyLCAweDNCQjAsIDB4OTdBMywgMHgxQkZELCAweDk3QTYsIDB4MUJGQywgMHg5N0E4LCAweDFCRkIsCisgICAgMHg5N0FCLCAweDFBMzQsIDB4OTdBQywgMHg0RTA5LCAweDk3QUQsIDB4MEUyQywgMHg5N0FFLCAweDQzMjUsCisgICAgMHg5N0IxLCAweDQ5RTksIDB4OTdCMiwgMHg0OUVBLCAweDk3QjMsIDB4MUJGRSwgMHg5N0I0LCAweDFCRkYsCisgICAgMHg5N0I1LCAweDNCQjEsIDB4OTdCNiwgMHgzQkIyLCAweDk3QjksIDB4NEUwQSwgMHg5N0JBLCAweDQzMjYsCisgICAgMHg5N0JFLCAweDQ5RUIsIDB4OTdDMSwgMHg0MzI3LCAweDk3QzMsIDB4MUMwMCwgMHg5N0M2LCAweDFDMDEsCisgICAgMHg5N0M4LCAweDFDMDIsIDB4OTdDOSwgMHg0MzI4LCAweDk3Q0IsIDB4MUMwMywgMHg5N0NDLCAweDQ5RUMsCisgICAgMHg5N0NELCAweDRFMEIsIDB4OTdEMSwgMHg0OUVELCAweDk3RDMsIDB4MDYxNiwgMHg5N0Q0LCAweDQ5RUUsCisgICAgMHg5N0Q4LCAweDQ5RUYsIDB4OTdEOSwgMHgzQkIzLCAweDk3REIsIDB4NDMyOSwgMHg5N0RDLCAweDFDMDQsCisgICAgMHg5N0RFLCAweDNCQjQsIDB4OTdFMCwgMHg0RTBDLCAweDk3RTEsIDB4NDlGMCwgMHg5N0VELCAweDFDMDUsCisgICAgMHg5N0VFLCAweDBDRDksIDB4OTdFRiwgMHg0RTBELCAweDk3RjEsIDB4NDlGMSwgMHg5N0YyLCAweDFDMDcsCisgICAgMHg5N0YzLCAweDA1M0IsIDB4OTdGNCwgMHgzQkI1LCAweDk3RjUsIDB4MUMwQSwgMHg5N0Y2LCAweDFDMDksCisgICAgMHg5N0ZCLCAweDA0QzYsIDB4OTdGRiwgMHgwNkI5LCAweDk4MDEsIDB4MEUxNywgMHg5ODAyLCAweDBCRDYsCisgICAgMHg5ODAzLCAweDA4MTIsIDB4OTgwNCwgMHg0OUYyLCAweDk4MDUsIDB4MDdGMiwgMHg5ODA2LCAweDA5NzEsCisgICAgMHg5ODA3LCAweDRFMEUsIDB4OTgwOCwgMHgwQTIyLCAweDk4MEEsIDB4M0JCNiwgMHg5ODBDLCAweDFDMEMsCisgICAgMHg5ODBELCAweDQ5RjMsIDB4OTgwRSwgMHgzQkI3LCAweDk4MEYsIDB4MUMwQiwgMHg5ODEwLCAweDBGMkMsCisgICAgMHg5ODExLCAweDA2MjQsIDB4OTgxMiwgMHgwRDY2LCAweDk4MTMsIDB4MENCNCwgMHg5ODE0LCAweDQ5RjQsCisgICAgMHg5ODE2LCAweDQ5RjUsIDB4OTgxNywgMHgwQTQyLCAweDk4MTgsIDB4MEY5NiwgMHg5ODFBLCAweDA3MzEsCisgICAgMHg5ODFFLCAweDNCQjgsIDB4OTgyMSwgMHgxQzBGLCAweDk4MjMsIDB4M0JCOSwgMHg5ODI0LCAweDFDMEUsCisgICAgMHg5ODI1LCAweDQ5RkEsIDB4OTgyNiwgMHg0RTBGLCAweDk4MkIsIDB4M0JCQSwgMHg5ODJDLCAweDBFNzksCisgICAgMHg5ODJELCAweDBDODQsIDB4OTgyRSwgMHg0RTEwLCAweDk4MzAsIDB4MUU3MywgMHg5ODMyLCAweDQ5RjgsCisgICAgMHg5ODMzLCAweDQ5RjksIDB4OTgzNCwgMHgwNEYyLCAweDk4MzcsIDB4MUMxMCwgMHg5ODM4LCAweDFDMEQsCisgICAgMHg5ODM5LCAweDM3QjMsIDB4OTgzQiwgMHgwREMzLCAweDk4M0MsIDB4MEY1NCwgMHg5ODNELCAweDFDMTEsCisgICAgMHg5ODNFLCAweDNCQkIsIDB4OTg0NiwgMHgxQzEyLCAweDk4NDcsIDB4NDlGQiwgMHg5ODRCLCAweDFDMTQsCisgICAgMHg5ODRDLCAweDBCNEEsIDB4OTg0RCwgMHgwNUI5LCAweDk4NEUsIDB4MDVCQSwgMHg5ODRGLCAweDFDMTMsCisgICAgMHg5ODUyLCAweDNCQkMsIDB4OTg1MywgMHgzQkJELCAweDk4NTQsIDB4MDYyNSwgMHg5ODU1LCAweDA3NjYsCisgICAgMHg5ODU2LCAweDQzMkEsIDB4OTg1NywgMHgyMUY5LCAweDk4NTgsIDB4MDYyNiwgMHg5ODU5LCAweDNCQkUsCisgICAgMHg5ODVBLCAweDFFNDgsIDB4OTg1QiwgMHgwQzM5LCAweDk4NUUsIDB4MEZBOCwgMHg5ODYyLCAweDRFMTEsCisgICAgMHg5ODYzLCAweDRFMTIsIDB4OTg2NSwgMHgyMUZBLCAweDk4NjYsIDB4NDlGQywgMHg5ODY3LCAweDA3OTAsCisgICAgMHg5ODZCLCAweDFDMTUsIDB4OTg2QywgMHgzQkJGLCAweDk4NkYsIDB4MUMxNiwgMHg5ODcwLCAweDFDMTcsCisgICAgMHg5ODcxLCAweDFDMTgsIDB4OTg3MywgMHgxQzFBLCAweDk4NzQsIDB4MUMxOSwgMHg5OEE4LCAweDBERTksCisgICAgMHg5OEFBLCAweDFDMUIsIDB4OThBQiwgMHg0OUZELCAweDk4QUQsIDB4NDlGRSwgMHg5OEFGLCAweDFDMUMsCisgICAgMHg5OEIwLCAweDQ5RkYsIDB4OThCMSwgMHgxQzFELCAweDk4QjQsIDB4NEUxMywgMHg5OEI2LCAweDFDMUUsCisgICAgMHg5OEI3LCAweDRBMDEsIDB4OThCOCwgMHgzQkMwLCAweDk4QkEsIDB4M0JDMSwgMHg5OEJCLCAweDRBMDIsCisgICAgMHg5OEJDLCAweDRBMDMsIDB4OThCRiwgMHgzQkMyLCAweDk4QzIsIDB4NEEwNCwgMHg5OEMzLCAweDFDMjAsCisgICAgMHg5OEM0LCAweDFDMUYsIDB4OThDNSwgMHg0RTE0LCAweDk4QzYsIDB4MUMyMSwgMHg5OEM3LCAweDRBMDUsCisgICAgMHg5OEM4LCAweDNCQzMsIDB4OThDQiwgMHg0QTA2LCAweDk4REIsIDB4MEQ4OCwgMHg5OERDLCAweDE4MzksCisgICAgMHg5OERGLCAweDA5RUYsIDB4OThFMCwgMHgzNjE4LCAweDk4RTEsIDB4NEEwNywgMHg5OEUyLCAweDA2NEMsCisgICAgMHg5OEUzLCAweDRBMDgsIDB4OThFNSwgMHgzQkM0LCAweDk4RTcsIDB4NDMyQiwgMHg5OEU5LCAweDFDMjIsCisgICAgMHg5OEVBLCAweDRBMDksIDB4OThFQiwgMHgxQzIzLCAweDk4RUQsIDB4MTBDMSwgMHg5OEVFLCAweDE0REEsCisgICAgMHg5OEVGLCAweDBENjcsIDB4OThGMCwgMHg0QTBBLCAweDk4RjEsIDB4NEEwQiwgMHg5OEYyLCAweDA0QkYsCisgICAgMHg5OEYzLCAweDRBMEMsIDB4OThGNCwgMHgwNDdGLCAweDk4RkMsIDB4MDhDMiwgMHg5OEZELCAweDBFNUUsCisgICAgMHg5OEZFLCAweDA5RTYsIDB4OTkwMiwgMHg0RTE1LCAweDk5MDMsIDB4MUMyNCwgMHg5OTA1LCAweDBFRUIsCisgICAgMHg5OTA4LCAweDRBMEQsIDB4OTkwOSwgMHgxQzI1LCAweDk5MEEsIDB4MEY0NiwgMHg5OTBDLCAweDA0RTQsCisgICAgMHg5OTEwLCAweDA4OEYsIDB4OTkxMSwgMHg0RTE2LCAweDk5MTIsIDB4MUMyNiwgMHg5OTEzLCAweDA1NkUsCisgICAgMHg5OTE0LCAweDFDMjcsIDB4OTkxNSwgMHg0RTE3LCAweDk5MTYsIDB4NEExMCwgMHg5OTE3LCAweDRBMTEsCisgICAgMHg5OTE4LCAweDFDMjgsIDB4OTkxQSwgMHg0QTEzLCAweDk5MUIsIDB4NEExNCwgMHg5OTFDLCAweDRBMTUsCisgICAgMHg5OTFELCAweDFDMkEsIDB4OTkxRSwgMHgxQzJCLCAweDk5MjAsIDB4MUMyRCwgMHg5OTIxLCAweDFDMjksCisgICAgMHg5OTI0LCAweDFDMkMsIDB4OTkyNywgMHgyMUZELCAweDk5MjgsIDB4MDYxNywgMHg5OTJDLCAweDFDMkUsCisgICAgMHg5OTJFLCAweDFDMkYsIDB4OTkzMSwgMHg0QTE3LCAweDk5MzIsIDB4M0JDNSwgMHg5OTMzLCAweDNCQzYsCisgICAgMHg5OTM1LCAweDRFMTgsIDB4OTkzQSwgMHg0QTE4LCAweDk5M0IsIDB4NEExOSwgMHg5OTNDLCAweDRBMUEsCisgICAgMHg5OTNELCAweDFDMzAsIDB4OTkzRSwgMHgxQzMxLCAweDk5NDAsIDB4M0JDNywgMHg5OTQxLCAweDRBMUIsCisgICAgMHg5OTQyLCAweDFDMzIsIDB4OTk0NSwgMHgxQzM0LCAweDk5NDYsIDB4NEExQywgMHg5OTQ4LCAweDRFMTksCisgICAgMHg5OTQ5LCAweDFDMzMsIDB4OTk0QiwgMHgxQzM2LCAweDk5NEMsIDB4MUMzOSwgMHg5OTRELCAweDNCQzgsCisgICAgMHg5OTRFLCAweDRBMUQsIDB4OTk1MCwgMHgxQzM1LCAweDk5NTEsIDB4MUMzNywgMHg5OTUyLCAweDFDMzgsCisgICAgMHg5OTU0LCAweDRFMUEsIDB4OTk1NSwgMHgxQzNBLCAweDk5NTcsIDB4MDZCQSwgMHg5OTU4LCAweDQzMkMsCisgICAgMHg5OTVDLCAweDNCQzksIDB4OTk1RSwgMHg0RTFCLCAweDk5NUYsIDB4M0JDQSwgMHg5OTYwLCAweDRBMUUsCisgICAgMHg5OTk2LCAweDA5MUYsIDB4OTk5NywgMHgxQzNCLCAweDk5OTgsIDB4MUMzQywgMHg5OTk5LCAweDA3RjMsCisgICAgMHg5OTlFLCAweDIxRkYsIDB4OTlBMywgMHg0QTFGLCAweDk5QTUsIDB4MUMzRCwgMHg5OUE2LCAweDRBMjAsCisgICAgMHg5OUE4LCAweDA1OUMsIDB4OTlBQywgMHgwRDA1LCAweDk5QUQsIDB4MUMzRSwgMHg5OUFFLCAweDFDM0YsCisgICAgMHg5OUIxLCAweDNCQ0IsIDB4OTlCMywgMHgwQjk4LCAweDk5QjQsIDB4MENDMywgMHg5OUI5LCAweDNCQ0MsCisgICAgMHg5OUJBLCAweDNCQ0QsIDB4OTlCQywgMHgxQzQwLCAweDk5QkQsIDB4NEEyMSwgMHg5OUJGLCAweDRBMjIsCisgICAgMHg5OUMxLCAweDBEMzMsIDB4OTlDMywgMHg0QTIzLCAweDk5QzQsIDB4MEIyQywgMHg5OUM1LCAweDA0RkEsCisgICAgMHg5OUM2LCAweDA2RTYsIDB4OTlDOCwgMHgwNkU3LCAweDk5QzksIDB4M0JDRSwgMHg5OUQwLCAweDBCQjEsCisgICAgMHg5OUQxLCAweDFDNDUsIDB4OTlEMiwgMHgwNkU4LCAweDk5RDQsIDB4NEEyNCwgMHg5OUQ1LCAweDA1NkYsCisgICAgMHg5OUQ4LCAweDFDNDQsIDB4OTlEOSwgMHg0QTI1LCAweDk5REIsIDB4MUM0MiwgMHg5OURELCAweDFDNDMsCisgICAgMHg5OURFLCAweDRBMjYsIDB4OTlERiwgMHgxQzQxLCAweDk5RTEsIDB4NEUxQywgMHg5OUUyLCAweDFDNEYsCisgICAgMHg5OUVELCAweDFDNDYsIDB4OTlFRSwgMHgxQzQ3LCAweDk5RjAsIDB4NEEyOCwgMHg5OUYxLCAweDFDNDgsCisgICAgMHg5OUYyLCAweDFDNDksIDB4OTlGOCwgMHgxQzRCLCAweDk5RjksIDB4NEEyOSwgMHg5OUZCLCAweDFDNEEsCisgICAgMHg5OUZDLCAweDRBMkEsIDB4OTlGRiwgMHgwOTYzLCAweDlBMDEsIDB4MUM0QywgMHg5QTAyLCAweDNCQ0YsCisgICAgMHg5QTAzLCAweDQzMkQsIDB4OUEwNSwgMHgxQzRFLCAweDlBMDgsIDB4MzdCQSwgMHg5QTBBLCAweDRBMkIsCisgICAgMHg5QTBDLCAweDRFMUQsIDB4OUEwRSwgMHgwNjRELCAweDlBMEYsIDB4MUM0RCwgMHg5QTEwLCAweDRFMUUsCisgICAgMHg5QTExLCAweDRBMkMsIDB4OUExMiwgMHgwQUZELCAweDlBMTMsIDB4MDc2NywgMHg5QTE2LCAweDNCRDAsCisgICAgMHg5QTE5LCAweDFDNTAsIDB4OUExQSwgMHg0QTJELCAweDlBMjAsIDB4NEEyRSwgMHg5QTIzLCAweDRFMUYsCisgICAgMHg5QTI0LCAweDNCRDEsIDB4OUEyNywgMHgzQkQyLCAweDlBMjgsIDB4MEIyRCwgMHg5QTJCLCAweDFDNTEsCisgICAgMHg5QTJELCAweDNCRDMsIDB4OUEyRSwgMHgzQkQ0LCAweDlBMzAsIDB4MEM4NSwgMHg5QTMxLCAweDRBMkYsCisgICAgMHg5QTM2LCAweDNCRDUsIDB4OUEzNywgMHgxQzUyLCAweDlBMzgsIDB4M0JENiwgMHg5QTNFLCAweDFDNTcsCisgICAgMHg5QTQwLCAweDFDNTUsIDB4OUE0MSwgMHg0RTIwLCAweDlBNDIsIDB4MUM1NCwgMHg5QTQzLCAweDFDNTYsCisgICAgMHg5QTQ0LCAweDRBMzAsIDB4OUE0NSwgMHgxQzUzLCAweDlBNEEsIDB4M0JENywgMHg5QTRDLCAweDRBMzEsCisgICAgMHg5QTRELCAweDFDNTksIDB4OUE0RSwgMHgyMjAwLCAweDlBNTEsIDB4NEUyMSwgMHg5QTUyLCAweDFFMkYsCisgICAgMHg5QTU1LCAweDFDNTgsIDB4OUE1NiwgMHgzQkQ4LCAweDlBNTcsIDB4MUM1QiwgMHg5QTU4LCAweDRBMzIsCisgICAgMHg5QTVBLCAweDA2QkIsIDB4OUE1QiwgMHgxQzVBLCAweDlBNUYsIDB4MUM1QywgMHg5QTYyLCAweDFDNUQsCisgICAgMHg5QTY0LCAweDFDNUYsIDB4OUE2NSwgMHgxQzVFLCAweDlBNjksIDB4MUM2MCwgMHg5QTZBLCAweDFDNjIsCisgICAgMHg5QTZCLCAweDFDNjEsIDB4OUFBOCwgMHgwODBFLCAweDlBQUQsIDB4MUM2MywgMHg5QUFGLCAweDRBMzQsCisgICAgMHg5QUIwLCAweDFDNjQsIDB4OUFCNSwgMHgzQkQ5LCAweDlBQjYsIDB4M0JEQSwgMHg5QUI3LCAweDRBMzYsCisgICAgMHg5QUI4LCAweDA1OUEsIDB4OUFCOSwgMHg0QTM4LCAweDlBQkMsIDB4MUM2NSwgMHg5QUJELCAweDRFMjIsCisgICAgMHg5QUJFLCAweDRFMjMsIDB4OUFDMCwgMHgxQzY2LCAweDlBQzEsIDB4NDMyRSwgMHg5QUMzLCAweDQzMkYsCisgICAgMHg5QUM0LCAweDBBMzcsIDB4OUFDNiwgMHg0QTNBLCAweDlBQ0UsIDB4NDMzMCwgMHg5QUNGLCAweDFDNjcsCisgICAgMHg5QUQwLCAweDRBM0IsIDB4OUFEMSwgMHgxQzY4LCAweDlBRDIsIDB4NEEzQywgMHg5QUQzLCAweDFDNjksCisgICAgMHg5QUQ0LCAweDFDNkEsIDB4OUFENSwgMHg0QTNELCAweDlBRDYsIDB4NDMzMSwgMHg5QUQ4LCAweDA3RjQsCisgICAgMHg5QUQ5LCAweDIyMDEsIDB4OUFEQywgMHgyMjAyLCAweDlBREUsIDB4MUM2QiwgMHg5QURGLCAweDFDNkMsCisgICAgMHg5QUUwLCAweDRBM0UsIDB4OUFFMiwgMHgxQzZELCAweDlBRTMsIDB4MUM2RSwgMHg5QUU1LCAweDRBM0YsCisgICAgMHg5QUU2LCAweDFDNkYsIDB4OUFFOSwgMHg0QTQwLCAweDlBRUEsIDB4MEQ0NSwgMHg5QUVCLCAweDFDNzEsCisgICAgMHg5QUVELCAweDBEOTgsIDB4OUFFRSwgMHgxQzcyLCAweDlBRUYsIDB4MUM3MCwgMHg5QUYxLCAweDFDNzQsCisgICAgMHg5QUY0LCAweDFDNzMsIDB4OUFGNywgMHgxQzc1LCAweDlBRjksIDB4M0JEQiwgMHg5QUZCLCAweDFDNzYsCisgICAgMHg5QjAxLCAweDRFMjQsIDB4OUIwMiwgMHg0MzMyLCAweDlCMDMsIDB4M0JEQywgMHg5QjA2LCAweDFDNzcsCisgICAgMHg5QjA4LCAweDQzMzMsIDB4OUIwOSwgMHg0RTI1LCAweDlCMEIsIDB4NEUyNiwgMHg5QjBDLCAweDRBNDEsCisgICAgMHg5QjBELCAweDRFMjcsIDB4OUIwRSwgMHg0RTI4LCAweDlCMTAsIDB4NEE0MiwgMHg5QjEyLCAweDRBNDMsCisgICAgMHg5QjE2LCAweDRBNDQsIDB4OUIxOCwgMHgxQzc4LCAweDlCMTksIDB4NEUyOSwgMHg5QjFBLCAweDFDNzksCisgICAgMHg5QjFDLCAweDRBNDUsIDB4OUIxRCwgMHg0RjQ5LCAweDlCMUYsIDB4MUM3QSwgMHg5QjIwLCAweDNCREQsCisgICAgMHg5QjIyLCAweDFDN0IsIDB4OUIyMywgMHgxQzdDLCAweDlCMjUsIDB4MUM3RCwgMHg5QjI3LCAweDFDN0UsCisgICAgMHg5QjI4LCAweDFDN0YsIDB4OUIyOSwgMHgxQzgwLCAweDlCMkEsIDB4MUM4MSwgMHg5QjJCLCAweDRBNDYsCisgICAgMHg5QjJDLCAweDRGNEEsIDB4OUIyRCwgMHg0MzM1LCAweDlCMkUsIDB4MUM4MiwgMHg5QjJGLCAweDFDODMsCisgICAgMHg5QjMxLCAweDE0RDQsIDB4OUIzMiwgMHgxQzg0LCAweDlCMzMsIDB4M0JERSwgMHg5QjM0LCAweDNCREYsCisgICAgMHg5QjM1LCAweDRFMkEsIDB4OUIzQiwgMHgxN0E5LCAweDlCM0MsIDB4MDY0RSwgMHg5QjNELCAweDRBNDcsCisgICAgMHg5QjQxLCAweDA1N0YsIDB4OUI0MiwgMHgwODIyLCAweDlCNDMsIDB4MUM4NiwgMHg5QjQ0LCAweDFDODUsCisgICAgMHg5QjQ1LCAweDBFQjEsIDB4OUI0OCwgMHg0RTJCLCAweDlCNEIsIDB4NEE0OSwgMHg5QjRELCAweDFDODgsCisgICAgMHg5QjRFLCAweDFDODksIDB4OUI0RiwgMHgxQzg3LCAweDlCNTEsIDB4MUM4QSwgMHg5QjU0LCAweDBFOTAsCisgICAgMHg5QjU1LCAweDRFMkMsIDB4OUI1OCwgMHgxQzhCLCAweDlCNUEsIDB4MDY5NSwgMHg5QjVFLCAweDQzMzYsCisgICAgMHg5QjYzLCAweDRBNEEsIDB4OUI2NSwgMHg0QTRCLCAweDlCNjYsIDB4NDMzNywgMHg5QjY4LCAweDRFMkQsCisgICAgMHg5QjZCLCAweDRBNEMsIDB4OUI2QywgMHg0QTRELCAweDlCNkYsIDB4MEZDQiwgMHg5QjcyLCAweDIyMDQsCisgICAgMHg5QjczLCAweDNCRTAsIDB4OUI3NCwgMHgxQzhDLCAweDlCNzUsIDB4MjIwMywgMHg5Qjc2LCAweDRBNEUsCisgICAgMHg5Qjc3LCAweDRBNEYsIDB4OUI3OSwgMHgzQkUxLCAweDlCODAsIDB4NEUyRSwgMHg5QjgzLCAweDFDOEUsCisgICAgMHg5Qjg0LCAweDQzMzgsIDB4OUI4NiwgMHg0RTJGLCAweDlCOEEsIDB4NDMzOSwgMHg5QjhFLCAweDA0ODIsCisgICAgMHg5QjhGLCAweDIyMDUsIDB4OUI5MCwgMHg0RTMwLCAweDlCOTEsIDB4MUM4RiwgMHg5QjkyLCAweDBERkIsCisgICAgMHg5QjkzLCAweDFDOEQsIDB4OUI5NiwgMHgxQzkwLCAweDlCOTcsIDB4MUM5MSwgMHg5QjlELCAweDRFMzEsCisgICAgMHg5QjlFLCAweDQzM0EsIDB4OUI5RiwgMHgxQzkyLCAweDlCQTAsIDB4MUM5MywgMHg5QkE2LCAweDRBNTAsCisgICAgMHg5QkE3LCAweDNCRTIsIDB4OUJBOCwgMHgxQzk0LCAweDlCQUEsIDB4MEU5QywgMHg5QkFCLCAweDA4N0IsCisgICAgMHg5QkFDLCAweDRBNTEsIDB4OUJBRCwgMHgwODZBLCAweDlCQUUsIDB4MEFCMSwgMHg5QkIwLCAweDRFMzIsCisgICAgMHg5QkIxLCAweDIyMDYsIDB4OUJCMiwgMHg0QTUzLCAweDlCQjQsIDB4MUM5NSwgMHg5QkI4LCAweDRBNTQsCisgICAgMHg5QkI5LCAweDFDOTgsIDB4OUJCQiwgMHgyMjA3LCAweDlCQkUsIDB4NEE1NSwgMHg5QkJGLCAweDRFMzMsCisgICAgMHg5QkMwLCAweDFDOTYsIDB4OUJDMSwgMHgzQkUzLCAweDlCQzYsIDB4MUM5OSwgMHg5QkM3LCAweDNCRTQsCisgICAgMHg5QkM4LCAweDRFMzQsIDB4OUJDOSwgMHgwN0E1LCAweDlCQ0EsIDB4MUM5NywgMHg5QkNFLCAweDQzM0IsCisgICAgMHg5QkNGLCAweDFDOUEsIDB4OUJEMSwgMHgxQzlCLCAweDlCRDIsIDB4MUM5QywgMHg5QkQ0LCAweDFDQTAsCisgICAgMHg5QkQ2LCAweDA4NzgsIDB4OUJENywgMHgzQkU1LCAweDlCRDgsIDB4NEE1NywgMHg5QkRCLCAweDBCNDQsCisgICAgMHg5QkRELCAweDRBNTgsIDB4OUJERiwgMHgzN0JGLCAweDlCRTEsIDB4MUNBMSwgMHg5QkUyLCAweDFDOUUsCisgICAgMHg5QkUzLCAweDFDOUQsIDB4OUJFNCwgMHgxQzlGLCAweDlCRTUsIDB4NDMzQywgMHg5QkU3LCAweDNCRTYsCisgICAgMHg5QkU4LCAweDA3MzUsIDB4OUJFQSwgMHg0QTU5LCAweDlCRUIsIDB4M0JFNywgMHg5QkVFLCAweDRBNUIsCisgICAgMHg5QkVGLCAweDRBNUEsIDB4OUJGMCwgMHgxQ0E1LCAweDlCRjEsIDB4MUNBNCwgMHg5QkYyLCAweDFDQTMsCisgICAgMHg5QkYzLCAweDRBNTYsIDB4OUJGNSwgMHgwNDc3LCAweDlCRjcsIDB4M0JFOCwgMHg5QkY4LCAweDQzM0QsCisgICAgMHg5QkZBLCAweDNCRTksIDB4OUJGRCwgMHgzQkVBLCAweDlCRkYsIDB4NEUzNSwgMHg5QzAwLCAweDIyMDgsCisgICAgMHg5QzAyLCAweDRFMzYsIDB4OUMwNCwgMHgxQ0FGLCAweDlDMDYsIDB4MUNBQiwgMHg5QzA4LCAweDFDQUMsCisgICAgMHg5QzA5LCAweDFDQTgsIDB4OUMwQSwgMHgxQ0FFLCAweDlDMEIsIDB4M0JFQiwgMHg5QzBDLCAweDFDQUEsCisgICAgMHg5QzBELCAweDA1QzAsIDB4OUMxMCwgMHgwRkYyLCAweDlDMTIsIDB4MUNBRCwgMHg5QzEzLCAweDFDQTksCisgICAgMHg5QzE0LCAweDFDQTcsIDB4OUMxNSwgMHgxQ0E2LCAweDlDMTYsIDB4NEE1RiwgMHg5QzE4LCAweDRBNjAsCisgICAgMHg5QzE5LCAweDRBNjEsIDB4OUMxQSwgMHg0QTYyLCAweDlDMUIsIDB4MUNCMSwgMHg5QzFDLCAweDRFMzcsCisgICAgMHg5QzFELCAweDRBNjMsIDB4OUMyMSwgMHgxQ0I0LCAweDlDMjIsIDB4NEE2NCwgMHg5QzIzLCAweDQzM0UsCisgICAgMHg5QzI0LCAweDFDQjMsIDB4OUMyNSwgMHgxQ0IyLCAweDlDMjcsIDB4M0JFQywgMHg5QzI5LCAweDRBNjUsCisgICAgMHg5QzJBLCAweDNCRUQsIDB4OUMyRCwgMHgwREJCLCAweDlDMkUsIDB4MUNCMCwgMHg5QzJGLCAweDA0QjcsCisgICAgMHg5QzMwLCAweDFDQjUsIDB4OUMzMSwgMHg0QTY3LCAweDlDMzIsIDB4MUNCNywgMHg5QzM1LCAweDRFMzgsCisgICAgMHg5QzM2LCAweDNCRUUsIDB4OUMzNywgMHg0QTY4LCAweDlDMzksIDB4MDVDRCwgMHg5QzNBLCAweDFDQTIsCisgICAgMHg5QzNCLCAweDA0RDksIDB4OUMzRSwgMHgxQ0I5LCAweDlDNDEsIDB4M0JFRiwgMHg5QzQ0LCAweDRFMzksCisgICAgMHg5QzQ1LCAweDRBNjksIDB4OUM0NiwgMHgxQ0I4LCAweDlDNDcsIDB4MUNCNiwgMHg5QzQ4LCAweDBCNkIsCisgICAgMHg5QzQ5LCAweDRBNkMsIDB4OUM0QSwgMHg0QTZELCAweDlDNEYsIDB4NDMzRiwgMHg5QzUwLCAweDQzNDAsCisgICAgMHg5QzUyLCAweDBFOUUsIDB4OUM1MywgMHgzQkYwLCAweDlDNTQsIDB4NEE2RiwgMHg5QzU2LCAweDRFM0EsCisgICAgMHg5QzU3LCAweDBGQTIsIDB4OUM1OCwgMHg0QTcwLCAweDlDNUEsIDB4MUNCQSwgMHg5QzVCLCAweDRBNzEsCisgICAgMHg5QzVDLCAweDRBNkEsIDB4OUM1RCwgMHg0QTcyLCAweDlDNUYsIDB4NEE3MywgMHg5QzYwLCAweDFDQkIsCisgICAgMHg5QzYxLCAweDRFM0IsIDB4OUM2MywgMHgzQkYxLCAweDlDNjUsIDB4NDM0MSwgMHg5QzY3LCAweDFDQkMsCisgICAgMHg5QzY4LCAweDRFM0MsIDB4OUM2OSwgMHg0QTc0LCAweDlDNkEsIDB4NEE3NSwgMHg5QzZCLCAweDRBNzYsCisgICAgMHg5QzZELCAweDRBNzcsIDB4OUM2RSwgMHg0QTc4LCAweDlDNzAsIDB4M0JGMiwgMHg5QzcyLCAweDRBNzksCisgICAgMHg5Qzc1LCAweDRBN0EsIDB4OUM3NiwgMHgxQ0JELCAweDlDNzcsIDB4M0JGMywgMHg5Qzc4LCAweDFDQkUsCisgICAgMHg5QzdBLCAweDRBN0IsIDB4OUNFNSwgMHgwQkQ3LCAweDlDRTYsIDB4NEE3QywgMHg5Q0U3LCAweDFDQkYsCisgICAgMHg5Q0U5LCAweDBENEIsIDB4OUNFQiwgMHgxQ0M0LCAweDlDRUMsIDB4MUNDMCwgMHg5Q0YwLCAweDFDQzEsCisgICAgMHg5Q0YyLCAweDRBN0QsIDB4OUNGMywgMHgwRTVGLCAweDlDRjQsIDB4MEVEMCwgMHg5Q0Y2LCAweDBDQTgsCisgICAgMHg5RDAyLCAweDNCRjQsIDB4OUQwMywgMHgxQ0M1LCAweDlEMDYsIDB4MUNDNiwgMHg5RDA3LCAweDBDOTYsCisgICAgMHg5RDA4LCAweDFDQzMsIDB4OUQwOSwgMHgxQ0MyLCAweDlEMEIsIDB4NEE3RSwgMHg5RDBFLCAweDA1MkEsCisgICAgMHg5RDExLCAweDRBODAsIDB4OUQxMiwgMHgxQ0NFLCAweDlEMTUsIDB4MUNDRCwgMHg5RDE3LCAweDRBODEsCisgICAgMHg5RDE4LCAweDRBODIsIDB4OUQxQiwgMHgwNTE3LCAweDlEMUQsIDB4NDM0MiwgMHg5RDFFLCAweDQzNDMsCisgICAgMHg5RDFGLCAweDFDQ0IsIDB4OUQyMywgMHgxQ0NBLCAweDlEMjYsIDB4MUNDOCwgMHg5RDI4LCAweDA1RDksCisgICAgMHg5RDJBLCAweDFDQzcsIDB4OUQyQiwgMHgwOERFLCAweDlEMkMsIDB4MDUyOSwgMHg5RDMwLCAweDRFM0QsCisgICAgMHg5RDMyLCAweDRBODYsIDB4OUQzQiwgMHgwN0Y1LCAweDlEM0QsIDB4NEUzRSwgMHg5RDNFLCAweDFDRDEsCisgICAgMHg5RDNGLCAweDFDRDAsIDB4OUQ0MSwgMHgxQ0NGLCAweDlENDIsIDB4M0JGNSwgMHg5RDQzLCAweDQzNDQsCisgICAgMHg5RDQ0LCAweDFDQ0MsIDB4OUQ0NiwgMHgxQ0QyLCAweDlENDcsIDB4M0JGNiwgMHg5RDQ4LCAweDFDRDMsCisgICAgMHg5RDRBLCAweDRBODgsIDB4OUQ1MCwgMHgxQ0Q4LCAweDlENTEsIDB4MUNENywgMHg5RDUyLCAweDQzNDUsCisgICAgMHg5RDU5LCAweDFDRDksIDB4OUQ1QywgMHgwNENGLCAweDlENUQsIDB4MUNENCwgMHg5RDVFLCAweDFDRDUsCisgICAgMHg5RDVGLCAweDRBODksIDB4OUQ2MCwgMHgwODA2LCAweDlENjEsIDB4MEVDNSwgMHg5RDYyLCAweDRBOEEsCisgICAgMHg5RDYzLCAweDNCRjcsIDB4OUQ2NCwgMHgxQ0Q2LCAweDlENjksIDB4M0JGOCwgMHg5RDZBLCAweDRFM0YsCisgICAgMHg5RDZCLCAweDIyMEEsIDB4OUQ2QywgMHgwRTYwLCAweDlENkYsIDB4MUNERSwgMHg5RDcwLCAweDIyMDksCisgICAgMHg5RDcyLCAweDFDREEsIDB4OUQ3MywgMHg0QThELCAweDlENzYsIDB4NEE4RSwgMHg5RDc3LCAweDRBOEYsCisgICAgMHg5RDdBLCAweDFDREYsIDB4OUQ3QiwgMHg0RTQwLCAweDlEN0MsIDB4M0JGOSwgMHg5RDdFLCAweDNCRkEsCisgICAgMHg5RDg0LCAweDRBOTAsIDB4OUQ4NywgMHgxQ0RDLCAweDlEODksIDB4MUNEQiwgMHg5RDhBLCAweDQzNDYsCisgICAgMHg5RDhELCAweDNCRkIsIDB4OUQ4RiwgMHgwNzMyLCAweDlEOTYsIDB4NDM0NywgMHg5RDk5LCAweDRBOTEsCisgICAgMHg5RDlBLCAweDFDRTAsIDB4OURBMSwgMHg0QTkyLCAweDlEQTQsIDB4MUNFMSwgMHg5REE5LCAweDFDRTIsCisgICAgMHg5REFCLCAweDFDREQsIDB4OURBQywgMHg0MzQ5LCAweDlEQUYsIDB4MUNDOSwgMHg5REIxLCAweDNCRkMsCisgICAgMHg5REIyLCAweDFDRTMsIDB4OURCNCwgMHgwQkZELCAweDlEQjUsIDB4NEE5NCwgMHg5REI4LCAweDFDRTcsCisgICAgMHg5REI5LCAweDRBOTUsIDB4OURCQSwgMHgxQ0U4LCAweDlEQkIsIDB4MUNFNiwgMHg5REJDLCAweDQzNEEsCisgICAgMHg5REJELCAweDRBOTYsIDB4OURCRiwgMHg0QTkzLCAweDlEQzAsIDB4NDM0OCwgMHg5REMxLCAweDFDRTUsCisgICAgMHg5REMyLCAweDFDRUIsIDB4OURDMywgMHgzQkZELCAweDlEQzQsIDB4MUNFNCwgMHg5REM2LCAweDFDRTksCisgICAgMHg5REM3LCAweDNCRkUsIDB4OURDOSwgMHg0QTk3LCAweDlEQ0YsIDB4MUNFQSwgMHg5REQzLCAweDFDRUQsCisgICAgMHg5REQ2LCAweDNCRkYsIDB4OURENywgMHgxRERFLCAweDlERDksIDB4MUNFQywgMHg5RERBLCAweDRBOTgsCisgICAgMHg5RERGLCAweDNDMDAsIDB4OURFMCwgMHg0QTk5LCAweDlERTMsIDB4NEE5QSwgMHg5REU1LCAweDRFNDEsCisgICAgMHg5REU2LCAweDFDRUYsIDB4OURFNywgMHg0MzRDLCAweDlERTksIDB4NEU0MiwgMHg5REVCLCAweDNDMDEsCisgICAgMHg5REVELCAweDFDRjAsIDB4OURFRiwgMHgxQ0YxLCAweDlERjIsIDB4MEZFRiwgMHg5REYzLCAweDRFNDMsCisgICAgMHg5REY0LCAweDNDMDIsIDB4OURGOCwgMHgxQ0VFLCAweDlERjksIDB4MEI0QiwgMHg5REZBLCAweDA4NUQsCisgICAgMHg5REZELCAweDFDRjIsIDB4OUUwMiwgMHg0QTlELCAweDlFMDcsIDB4NDM0RCwgMHg5RTBBLCAweDRBOUMsCisgICAgMHg5RTBELCAweDRBOUUsIDB4OUUxNSwgMHgzQzAzLCAweDlFMTksIDB4MjIwQywgMHg5RTFBLCAweDFDRjMsCisgICAgMHg5RTFCLCAweDFDRjQsIDB4OUUxQywgMHg0QTlGLCAweDlFMUQsIDB4M0MwNCwgMHg5RTFFLCAweDFDRjUsCisgICAgMHg5RTc1LCAweDFDRjYsIDB4OUU3OCwgMHgwNzY4LCAweDlFNzksIDB4MUNGNywgMHg5RTdBLCAweDRFNDQsCisgICAgMHg5RTdCLCAweDRBQTAsIDB4OUU3QywgMHgxREZELCAweDlFN0QsIDB4MUNGOCwgMHg5RTdGLCAweDA4REIsCisgICAgMHg5RTgwLCAweDRBQTIsIDB4OUU4MSwgMHgxQ0Y5LCAweDlFODIsIDB4NEU0NSwgMHg5RTgzLCAweDRFNDYsCisgICAgMHg5RTg0LCAweDRFNDcsIDB4OUU4NSwgMHg0QUEzLCAweDlFODgsIDB4MUNGQSwgMHg5RThCLCAweDFDRkIsCisgICAgMHg5RThDLCAweDFDRkMsIDB4OUU5MSwgMHgxQ0ZGLCAweDlFOTIsIDB4MUNGRCwgMHg5RTkzLCAweDBGRTIsCisgICAgMHg5RTk1LCAweDFDRkUsIDB4OUU5NywgMHgwRkI3LCAweDlFOUIsIDB4NEFBNCwgMHg5RTlELCAweDFEMDAsCisgICAgMHg5RTlFLCAweDQzNEUsIDB4OUU5RiwgMHgwRkEzLCAweDlFQTQsIDB4M0MwNSwgMHg5RUE1LCAweDFEMDEsCisgICAgMHg5RUE2LCAweDBEMzQsIDB4OUVBOCwgMHgzQzA2LCAweDlFQTksIDB4MUQwMiwgMHg5RUFBLCAweDFEMDQsCisgICAgMHg5RUFDLCAweDNDMDcsIDB4OUVBRCwgMHgxRDA1LCAweDlFQUYsIDB4NDM0RiwgMHg5RUIwLCAweDRFNDgsCisgICAgMHg5RUI0LCAweDFFMDIsIDB4OUVCNSwgMHgxRTc1LCAweDlFQjgsIDB4MUQwMywgMHg5RUI5LCAweDA3RkYsCisgICAgMHg5RUJBLCAweDBFRDksIDB4OUVCQiwgMHgwRTkxLCAweDlFQkMsIDB4MTI4NCwgMHg5RUJELCAweDRBQTYsCisgICAgMHg5RUJFLCAweDE0RkYsIDB4OUVCRiwgMHgwRUE5LCAweDlFQzMsIDB4MzQwQiwgMHg5RUM0LCAweDA1MkIsCisgICAgMHg5RUNDLCAweDFEMDcsIDB4OUVDRCwgMHgwNjZBLCAweDlFQ0UsIDB4MUQwOCwgMHg5RUNGLCAweDFEMDksCisgICAgMHg5RUQwLCAweDFEMEEsIDB4OUVEMSwgMHgyMjBELCAweDlFRDIsIDB4MDgwNywgMHg5RUQ0LCAweDFEMEIsCisgICAgMHg5RUQ4LCAweDE2MEQsIDB4OUVEOSwgMHgwRUU3LCAweDlFREIsIDB4MEI0MywgMHg5RURDLCAweDFEMEMsCisgICAgMHg5RURELCAweDFEMEUsIDB4OUVERSwgMHgxRDBELCAweDlFREYsIDB4NEFBOCwgMHg5RUUwLCAweDFEMEYsCisgICAgMHg5RUU0LCAweDRFNDksIDB4OUVFNSwgMHgxRDEwLCAweDlFRTcsIDB4M0MwOCwgMHg5RUU4LCAweDFEMTEsCisgICAgMHg5RUVFLCAweDNDMDksIDB4OUVFRiwgMHgxRDEyLCAweDlFRjAsIDB4NEU0QSwgMHg5RUYyLCAweDRFNEIsCisgICAgMHg5RUY0LCAweDFEMTMsIDB4OUVGNiwgMHgxRDE0LCAweDlFRjcsIDB4MUQxNSwgMHg5RUY5LCAweDFEMTYsCisgICAgMHg5RUZCLCAweDFEMTcsIDB4OUVGQywgMHgxRDE4LCAweDlFRkQsIDB4MUQxOSwgMHg5RUZGLCAweDRBQTksCisgICAgMHg5RjAyLCAweDRBQUEsIDB4OUYwMywgMHg0QUFDLCAweDlGMDcsIDB4MUQxQSwgMHg5RjA4LCAweDFEMUIsCisgICAgMHg5RjA5LCAweDRFNEMsIDB4OUYwRSwgMHgwQzFFLCAweDlGMEYsIDB4NEU0RCwgMHg5RjEwLCAweDNDMEEsCisgICAgMHg5RjEyLCAweDNDMEIsIDB4OUYxMywgMHgwNzkxLCAweDlGMTQsIDB4NEU0RSwgMHg5RjE1LCAweDFEMUQsCisgICAgMHg5RjE3LCAweDNDMEMsIDB4OUYxOSwgMHgzQzBELCAweDlGMUIsIDB4NEU0RiwgMHg5RjIwLCAweDBBQ0YsCisgICAgMHg5RjIxLCAweDFEMUUsIDB4OUYyMiwgMHg0RTUwLCAweDlGMjYsIDB4NEU1MSwgMHg5RjJBLCAweDRFNTIsCisgICAgMHg5RjJCLCAweDRFNTMsIDB4OUYyQywgMHgxRDFGLCAweDlGMkYsIDB4M0MwRSwgMHg5RjM0LCAweDRFNTQsCisgICAgMHg5RjM3LCAweDNDMEYsIDB4OUYzOSwgMHgzQzEwLCAweDlGM0EsIDB4NEFBRCwgMHg5RjNCLCAweDBEOTMsCisgICAgMHg5RjNELCAweDRBQUUsIDB4OUYzRSwgMHgxRDIwLCAweDlGNDEsIDB4M0MxMSwgMHg5RjQ1LCAweDNDMTIsCisgICAgMHg5RjQ2LCAweDRBQUYsIDB4OUY0QSwgMHgxRDIxLCAweDlGNEIsIDB4MTcwQSwgMHg5RjRFLCAweDFBN0IsCisgICAgMHg5RjRGLCAweDFDMDYsIDB4OUY1MiwgMHgxRDIyLCAweDlGNTMsIDB4NEFCMCwgMHg5RjU0LCAweDFEMjMsCisgICAgMHg5RjU1LCAweDRBQjEsIDB4OUY1NywgMHgzQzEzLCAweDlGNTgsIDB4NEFCMiwgMHg5RjVBLCAweDRFNTUsCisgICAgMHg5RjVELCAweDRBQjQsIDB4OUY1RiwgMHgxRDI1LCAweDlGNjAsIDB4MUQyNiwgMHg5RjYxLCAweDFEMjcsCisgICAgMHg5RjYyLCAweDBGQjgsIDB4OUY2MywgMHgxRDI0LCAweDlGNjYsIDB4MUQyOCwgMHg5RjY3LCAweDFEMjksCisgICAgMHg5RjY4LCAweDNDMTQsIDB4OUY2OSwgMHg0QUI2LCAweDlGNkEsIDB4MUQyQiwgMHg5RjZDLCAweDFEMkEsCisgICAgMHg5RjZELCAweDRBQjcsIDB4OUY2RiwgMHg0RTU2LCAweDlGNzAsIDB4NEFCOCwgMHg5RjcxLCAweDNDMTUsCisgICAgMHg5RjcyLCAweDFEMkQsIDB4OUY3NSwgMHgzQzE2LCAweDlGNzYsIDB4MUQyRSwgMHg5Rjc3LCAweDFEMkMsCisgICAgMHg5RjhELCAweDBGN0UsIDB4OUY5MCwgMHgzQzE3LCAweDlGOTQsIDB4M0MxOCwgMHg5Rjk1LCAweDFEMkYsCisgICAgMHg5Rjk3LCAweDQzNTAsIDB4OUY5QywgMHgxRDMwLCAweDlGOUQsIDB4MTcyNywgMHg5RjlFLCAweDRFNTcsCisgICAgMHg5RkEwLCAweDFEMzEsIDB4OUZBMiwgMHgzQzE5LCAweDlGQTUsIDB4NEU1OCwgMHhGODYwLCAweDNDNTQsCisgICAgMHhGODYxLCAweDNDNTUsIDB4Rjg2MiwgMHgzQzU2LCAweEY4N0EsIDB4M0M1NywgMHhGODdGLCAweDNDNTgsCisgICAgMHhGOTA5LCAweDM1QUIsIDB4RjkxRCwgMHgzNDUwLCAweEY5MUYsIDB4MzcwNCwgMHhGOTI4LCAweDRGNEYsCisgICAgMHhGOTI5LCAweDRGNTEsIDB4RjkzNiwgMHgzNDUyLCAweEY5NUYsIDB4MzY5MywgMHhGOTcwLCAweDM0MjAsCisgICAgMHhGOTgzLCAweDM3MDgsIDB4Rjk5MiwgMHgxRTgxLCAweEY5OTMsIDB4MUU4MiwgMHhGOTk5LCAweDFFODMsCisgICAgMHhGOTlBLCAweDM3MTEsIDB4RjlBMiwgMHgzNzBGLCAweEY5QzMsIDB4MUU4MCwgMHhGOUQwLCAweDM0NTQsCisgICAgMHhGOURDLCAweDM0NTEsIDB4RjlFQywgMHgxRTQ2LCAweEZBMDMsIDB4MzY4NCwgMHhGQTBFLCAweDIwREEsCisgICAgMHhGQTBGLCAweDIwRTUsIDB4RkExMCwgMHgxRTQyLCAweEZBMTEsIDB4MzdEMiwgMHhGQTEyLCAweDIxMjEsCisgICAgMHhGQTEzLCAweDIxMzEsIDB4RkExNCwgMHgyMTMzLCAweEZBMTUsIDB4NEY1MywgMHhGQTE2LCAweDIxNjQsCisgICAgMHhGQTE3LCAweDIxN0IsIDB4RkExOCwgMHgyMTgzLCAweEZBMTksIDB4MjE4NCwgMHhGQTFBLCAweDIxODUsCisgICAgMHhGQTFCLCAweDIxODcsIDB4RkExQywgMHgyMThCLCAweEZBMUQsIDB4MjE4RSwgMHhGQTFFLCAweDIxOTcsCisgICAgMHhGQTFGLCAweDIxQTIsIDB4RkEyMCwgMHgyMUE0LCAweEZBMjEsIDB4MjFBNSwgMHhGQTIyLCAweDIxQUUsCisgICAgMHhGQTIzLCAweDIxQjYsIDB4RkEyNCwgMHg0OTQ4LCAweEZBMjUsIDB4MjFCOSwgMHhGQTI2LCAweDIxQkMsCisgICAgMHhGQTI3LCAweDIxRDgsIDB4RkEyOCwgMHgyMURGLCAweEZBMjksIDB4MjFFRiwgMHhGQTJBLCAweDIxRkIsCisgICAgMHhGQTJCLCAweDIxRkMsIDB4RkEyQywgMHgyMUZFLCAweEZBMkQsIDB4MjIwQiwgMHhGQTMwLCAweDM0NDYsCisgICAgMHhGQTMxLCAweDM0MzAsIDB4RkEzMiwgMHgzNDRELCAweEZBMzMsIDB4MzQ0OSwgMHhGQTM0LCAweDM0MUEsCisgICAgMHhGQTM1LCAweDM0NDIsIDB4RkEzNiwgMHgxREUzLCAweEZBMzcsIDB4MzQzNiwgMHhGQTM4LCAweDM0MTUsCisgICAgMHhGQTM5LCAweDM0NDgsIDB4RkEzQSwgMHgzNDRCLCAweEZBM0IsIDB4MzQzMSwgMHhGQTNDLCAweDQxQzUsCisgICAgMHhGQTNELCAweDM0MEUsIDB4RkEzRSwgMHgzNDEwLCAweEZBM0YsIDB4MzQzMywgMHhGQTQwLCAweDM0MzksCisgICAgMHhGQTQxLCAweDM0NDUsIDB4RkE0MiwgMHgzNDE2LCAweEZBNDMsIDB4MzQyOCwgMHhGQTQ0LCAweDM0M0YsCisgICAgMHhGQTQ1LCAweDM0MEYsIDB4RkE0NiwgMHgxRTE0LCAweEZBNDcsIDB4MzQxNCwgMHhGQTQ4LCAweDM0MjMsCisgICAgMHhGQTQ5LCAweDNDMjYsIDB4RkE0QSwgMHgxRTM0LCAweEZBNEIsIDB4MzQ0MywgMHhGQTRDLCAweDM0MjQsCisgICAgMHhGQTRELCAweDM0MjEsIDB4RkE0RSwgMHgzNDE3LCAweEZBNEYsIDB4MzQ0RiwgMHhGQTUwLCAweDM0MkYsCisgICAgMHhGQTUxLCAweDM0MjcsIDB4RkE1MiwgMHgzNDBELCAweEZBNTMsIDB4MzQzQiwgMHhGQTU0LCAweDM0MUYsCisgICAgMHhGQTU1LCAweDM0M0QsIDB4RkE1NiwgMHgzNDJFLCAweEZBNTcsIDB4MzQ1NywgMHhGQTU4LCAweDQ3QkUsCisgICAgMHhGQTU5LCAweDM0NDAsIDB4RkE1QSwgMHgzNDI5LCAweEZBNUIsIDB4MzQyNSwgMHhGQTVDLCAweDM0MjYsCisgICAgMHhGQTVELCAweDM3NzcsIDB4RkE1RSwgMHgzNzc2LCAweEZBNUYsIDB4MzQzNywgMHhGQTYwLCAweDM0MTMsCisgICAgMHhGQTYxLCAweDM0MjIsIDB4RkE2MiwgMHgzNDA5LCAweEZBNjMsIDB4MzQxQiwgMHhGQTY0LCAweDM0NDQsCisgICAgMHhGQTY1LCAweDM0MzQsIDB4RkE2NiwgMHgzQzJCLCAweEZBNjcsIDB4MzQwOCwgMHhGQTY4LCAweDM0M0UsCisgICAgMHhGQTY5LCAweDM0MTksIDB4RkE2QSwgMHgxRTZDLCAweEZCMDAsIDB4MjQ4RSwgMHhGQjAxLCAweDAwNzAsCisgICAgMHhGQjAyLCAweDAwNzEsIDB4RkIwMywgMHgyNDhGLCAweEZCMDQsIDB4MjQ5MCwgMHhGRTMwLCAweDFFREEsCisgICAgMHhGRTMxLCAweDFFRDQsIDB4RkUzMiwgMHgxRUQ1LCAweEZFMzMsIDB4MUVEMiwgMHhGRTM1LCAweDFFREIsCisgICAgMHhGRTM2LCAweDFFREMsIDB4RkUzNywgMHgxRUUxLCAweEZFMzgsIDB4MUVFMiwgMHhGRTM5LCAweDFFREQsCisgICAgMHhGRTNBLCAweDFFREUsIDB4RkUzQiwgMHgxRUVCLCAweEZFM0MsIDB4MUVFQywgMHhGRTNELCAweDFFRTUsCisgICAgMHhGRTNFLCAweDFFRTYsIDB4RkUzRiwgMHgxRUUzLCAweEZFNDAsIDB4MUVFNCwgMHhGRTQxLCAweDFFRTcsCisgICAgMHhGRTQyLCAweDFFRTgsIDB4RkU0MywgMHgxRUU5LCAweEZFNDQsIDB4MUVFQSwgMHhGRTQ1LCAweDMxNUYsCisgICAgMHhGRTQ2LCAweDMxNjAsIDB4RkU0NywgMHgxRURGLCAweEZFNDgsIDB4MUVFMCwgMHhGRjAxLCAweDAyODIsCisgICAgMHhGRjAyLCAweDFGNDcsIDB4RkYwMywgMHgwMkNDLCAweEZGMDQsIDB4MDJDOCwgMHhGRjA1LCAweDAyQ0IsCisgICAgMHhGRjA2LCAweDAyQ0QsIDB4RkYwNywgMHgxRjQ2LCAweEZGMDgsIDB4MDJBMiwgMHhGRjA5LCAweDAyQTMsCisgICAgMHhGRjBBLCAweDAyQ0UsIDB4RkYwQiwgMHgwMkI0LCAweEZGMEMsIDB4MDI3QywgMHhGRjBELCAweDAyQjUsCisgICAgMHhGRjBFLCAweDAyN0QsIDB4RkYwRiwgMHgwMjk3LCAweEZGMTAsIDB4MDMwQywgMHhGRjExLCAweDAzMEQsCisgICAgMHhGRjEyLCAweDAzMEUsIDB4RkYxMywgMHgwMzBGLCAweEZGMTQsIDB4MDMxMCwgMHhGRjE1LCAweDAzMTEsCisgICAgMHhGRjE2LCAweDAzMTIsIDB4RkYxNywgMHgwMzEzLCAweEZGMTgsIDB4MDMxNCwgMHhGRjE5LCAweDAzMTUsCisgICAgMHhGRjFBLCAweDAyN0YsIDB4RkYxQiwgMHgwMjgwLCAweEZGMUMsIDB4MDJCQiwgMHhGRjFELCAweDAyQjksCisgICAgMHhGRjFFLCAweDAyQkMsIDB4RkYxRiwgMHgwMjgxLCAweEZGMjAsIDB4MDJDRiwgMHhGRjIxLCAweDAzMTYsCisgICAgMHhGRjIyLCAweDAzMTcsIDB4RkYyMywgMHgwMzE4LCAweEZGMjQsIDB4MDMxOSwgMHhGRjI1LCAweDAzMUEsCisgICAgMHhGRjI2LCAweDAzMUIsIDB4RkYyNywgMHgwMzFDLCAweEZGMjgsIDB4MDMxRCwgMHhGRjI5LCAweDAzMUUsCisgICAgMHhGRjJBLCAweDAzMUYsIDB4RkYyQiwgMHgwMzIwLCAweEZGMkMsIDB4MDMyMSwgMHhGRjJELCAweDAzMjIsCisgICAgMHhGRjJFLCAweDAzMjMsIDB4RkYyRiwgMHgwMzI0LCAweEZGMzAsIDB4MDMyNSwgMHhGRjMxLCAweDAzMjYsCisgICAgMHhGRjMyLCAweDAzMjcsIDB4RkYzMywgMHgwMzI4LCAweEZGMzQsIDB4MDMyOSwgMHhGRjM1LCAweDAzMkEsCisgICAgMHhGRjM2LCAweDAzMkIsIDB4RkYzNywgMHgwMzJDLCAweEZGMzgsIDB4MDMyRCwgMHhGRjM5LCAweDAzMkUsCisgICAgMHhGRjNBLCAweDAzMkYsIDB4RkYzQiwgMHgwMkE2LCAweEZGM0MsIDB4MDI5OCwgMHhGRjNELCAweDAyQTcsCisgICAgMHhGRjNFLCAweDAyODgsIDB4RkYzRiwgMHgwMjhBLCAweEZGNDAsIDB4MDI4NiwgMHhGRjQxLCAweDAzMzAsCisgICAgMHhGRjQyLCAweDAzMzEsIDB4RkY0MywgMHgwMzMyLCAweEZGNDQsIDB4MDMzMywgMHhGRjQ1LCAweDAzMzQsCisgICAgMHhGRjQ2LCAweDAzMzUsIDB4RkY0NywgMHgwMzM2LCAweEZGNDgsIDB4MDMzNywgMHhGRjQ5LCAweDAzMzgsCisgICAgMHhGRjRBLCAweDAzMzksIDB4RkY0QiwgMHgwMzNBLCAweEZGNEMsIDB4MDMzQiwgMHhGRjRELCAweDAzM0MsCisgICAgMHhGRjRFLCAweDAzM0QsIDB4RkY0RiwgMHgwMzNFLCAweEZGNTAsIDB4MDMzRiwgMHhGRjUxLCAweDAzNDAsCisgICAgMHhGRjUyLCAweDAzNDEsIDB4RkY1MywgMHgwMzQyLCAweEZGNTQsIDB4MDM0MywgMHhGRjU1LCAweDAzNDQsCisgICAgMHhGRjU2LCAweDAzNDUsIDB4RkY1NywgMHgwMzQ2LCAweEZGNTgsIDB4MDM0NywgMHhGRjU5LCAweDAzNDgsCisgICAgMHhGRjVBLCAweDAzNDksIDB4RkY1QiwgMHgwMkE4LCAweEZGNUMsIDB4MDI5QiwgMHhGRjVELCAweDAyQTksCisgICAgMHhGRjVFLCAweDAyOTksIDB4RkY1RiwgMHgyRjYzLCAweEZGNjAsIDB4MkY2NCwgMHhGRjYxLCAweDAxNDcsCisgICAgMHhGRjYyLCAweDAxNDgsIDB4RkY2MywgMHgwMTQ5LCAweEZGNjQsIDB4MDE0QSwgMHhGRjY1LCAweDAxNEIsCisgICAgMHhGRjY2LCAweDAxNEMsIDB4RkY2NywgMHgwMTRELCAweEZGNjgsIDB4MDE0RSwgMHhGRjY5LCAweDAxNEYsCisgICAgMHhGRjZBLCAweDAxNTAsIDB4RkY2QiwgMHgwMTUxLCAweEZGNkMsIDB4MDE1MiwgMHhGRjZELCAweDAxNTMsCisgICAgMHhGRjZFLCAweDAxNTQsIDB4RkY2RiwgMHgwMTU1LCAweEZGNzAsIDB4MDE1NiwgMHhGRjcxLCAweDAxNTcsCisgICAgMHhGRjcyLCAweDAxNTgsIDB4RkY3MywgMHgwMTU5LCAweEZGNzQsIDB4MDE1QSwgMHhGRjc1LCAweDAxNUIsCisgICAgMHhGRjc2LCAweDAxNUMsIDB4RkY3NywgMHgwMTVELCAweEZGNzgsIDB4MDE1RSwgMHhGRjc5LCAweDAxNUYsCisgICAgMHhGRjdBLCAweDAxNjAsIDB4RkY3QiwgMHgwMTYxLCAweEZGN0MsIDB4MDE2MiwgMHhGRjdELCAweDAxNjMsCisgICAgMHhGRjdFLCAweDAxNjQsIDB4RkY3RiwgMHgwMTY1LCAweEZGODAsIDB4MDE2NiwgMHhGRjgxLCAweDAxNjcsCisgICAgMHhGRjgyLCAweDAxNjgsIDB4RkY4MywgMHgwMTY5LCAweEZGODQsIDB4MDE2QSwgMHhGRjg1LCAweDAxNkIsCisgICAgMHhGRjg2LCAweDAxNkMsIDB4RkY4NywgMHgwMTZELCAweEZGODgsIDB4MDE2RSwgMHhGRjg5LCAweDAxNkYsCisgICAgMHhGRjhBLCAweDAxNzAsIDB4RkY4QiwgMHgwMTcxLCAweEZGOEMsIDB4MDE3MiwgMHhGRjhELCAweDAxNzMsCisgICAgMHhGRjhFLCAweDAxNzQsIDB4RkY4RiwgMHgwMTc1LCAweEZGOTAsIDB4MDE3NiwgMHhGRjkxLCAweDAxNzcsCisgICAgMHhGRjkyLCAweDAxNzgsIDB4RkY5MywgMHgwMTc5LCAweEZGOTQsIDB4MDE3QSwgMHhGRjk1LCAweDAxN0IsCisgICAgMHhGRjk2LCAweDAxN0MsIDB4RkY5NywgMHgwMTdELCAweEZGOTgsIDB4MDE3RSwgMHhGRjk5LCAweDAxN0YsCisgICAgMHhGRjlBLCAweDAxODAsIDB4RkY5QiwgMHgwMTgxLCAweEZGOUMsIDB4MDE4MiwgMHhGRjlELCAweDAxODMsCisgICAgMHhGRjlFLCAweDAxODQsIDB4RkY5RiwgMHgwMTg1LCAweEZGRTAsIDB4MDJDOSwgMHhGRkUxLCAweDAyQ0EsCisgICAgMHhGRkUyLCAweDAyRUYsIDB4RkZFMywgMHgwMjg5LCAweEZGRTQsIDB4MUY0NSwgMHhGRkU1LCAweDAyQzcsCisgICAgMHhGRkU4LCAweDAxNDMsCit9OworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX1VuaUpJU19VVEYxNl9IXzVfRFdvcmRbMzg0ICogM10gPSB7CisgICAgMHhEODQwLCAweERDMEIsIDB4MzYwRiwgMHhEODQwLCAweERDODksIDB4NDM1MSwgMHhEODQwLCAweERDOEEsIDB4MzcxQywKKyAgICAweEQ4NDAsIDB4RENBMiwgMHg0MzU4LCAweEQ4NDAsIDB4RENBNCwgMHg0MzVCLCAweEQ4NDAsIDB4RENCMCwgMHgzNzgxLAorICAgIDB4RDg0MCwgMHhEQ0Y1LCAweDRFNTksIDB4RDg0MCwgMHhERDU4LCAweDRFNkIsIDB4RDg0MCwgMHhEREEyLCAweDM2MjEsCisgICAgMHhEODQwLCAweERFMTMsIDB4NDM2QiwgMHhEODQwLCAweERGMkIsIDB4NDM4MiwgMHhEODQwLCAweERGNzEsIDB4NDM4QiwKKyAgICAweEQ4NDAsIDB4REY4MSwgMHg0Mzg5LCAweEQ4NDAsIDB4REZGOSwgMHg0MzhGLCAweEQ4NDEsIDB4REM0QSwgMHg0MzkxLAorICAgIDB4RDg0MSwgMHhERDA5LCAweDQzOTMsIDB4RDg0MSwgMHhEREIxLCAweDRFNzAsIDB4RDg0MSwgMHhEREQ2LCAweDQzOUMsCisgICAgMHhEODQxLCAweERFMTEsIDB4MzdENiwgMHhEODQxLCAweERFMjgsIDB4MzcxOSwgMHhEODQxLCAweERFRUMsIDB4NEU3MywKKyAgICAweEQ4NDEsIDB4REY0RiwgMHg0M0EwLCAweEQ4NDIsIDB4REMwNywgMHg0M0E3LCAweEQ4NDIsIDB4REMzQSwgMHg0M0E5LAorICAgIDB4RDg0MiwgMHhEQ0I5LCAweDQzQUYsIDB4RDg0MiwgMHhERDBFLCAweDM0RDMsIDB4RDg0MiwgMHhERDdDLCAweDQzQjMsCisgICAgMHhEODQyLCAweEREOUQsIDB4NDNCNCwgMHhEODQyLCAweERFNjQsIDB4MzVCQiwgMHhEODQyLCAweERFRDMsIDB4NDNCOSwKKyAgICAweEQ4NDIsIDB4REYxRCwgMHg0M0JDLCAweEQ4NDIsIDB4REY5RiwgMHgzNUVCLCAweEQ4NDIsIDB4REZCNywgMHgzNThBLAorICAgIDB4RDg0MywgMHhERDQ1LCAweDQzQ0YsIDB4RDg0MywgMHhERDU4LCAweDRFN0EsIDB4RDg0MywgMHhEREUxLCAweDQzREQsCisgICAgMHhEODQzLCAweERFNjQsIDB4NDNFQywgMHhEODQzLCAweERFNkQsIDB4NDNFNCwgMHhEODQzLCAweERFOTUsIDB4NDNFMywKKyAgICAweEQ4NDMsIDB4REY1RiwgMHg0M0VGLCAweEQ4NDQsIDB4REUwMSwgMHg0NDA2LCAweEQ4NDQsIDB4REUzRCwgMHgzNjgxLAorICAgIDB4RDg0NCwgMHhERTU1LCAweDQ0MDcsIDB4RDg0NCwgMHhERTc0LCAweDQ0MEQsIDB4RDg0NCwgMHhERTdCLCAweDQ0MDksCisgICAgMHhEODQ0LCAweERFRDcsIDB4NDQxNSwgMHhEODQ0LCAweERFRTQsIDB4NDQxNCwgMHhEODQ0LCAweERFRkQsIDB4NDQxQiwKKyAgICAweEQ4NDQsIDB4REYxQiwgMHg0MUIwLCAweEQ4NDQsIDB4REYzNiwgMHg0NDFELCAweEQ4NDQsIDB4REY0NCwgMHg0NDFFLAorICAgIDB4RDg0NCwgMHhERkM0LCAweDQ0MjksIDB4RDg0NSwgMHhEQzZELCAweDQ0MzYsIDB4RDg0NSwgMHhEQzZFLCAweDQxQjUsCisgICAgMHhEODQ1LCAweERERDcsIDB4NDQ0MCwgMHhEODQ1LCAweERFNDcsIDB4NDQ0OCwgMHhEODQ1LCAweERFQjQsIDB4NDFDNiwKKyAgICAweEQ4NDUsIDB4REYwNiwgMHg0NDU0LCAweEQ4NDUsIDB4REY0MiwgMHg0NDU1LCAweEQ4NDYsIDB4RENCRCwgMHg0MUMxLAorICAgIDB4RDg0NiwgMHhEREMzLCAweDQ0NzUsIDB4RDg0NiwgMHhERTFBLCAweDFFOTEsIDB4RDg0NywgMHhEQzU2LCAweDQ0ODMsCisgICAgMHhEODQ3LCAweEREMkQsIDB4NDQ4OCwgMHhEODQ3LCAweERENDUsIDB4NDQ4OSwgMHhEODQ3LCAweERENjIsIDB4NDQ4QiwKKyAgICAweEQ4NDcsIDB4REQ3OCwgMHg0NDhBLCAweEQ4NDcsIDB4REQ5MiwgMHg0NDk0LCAweEQ4NDcsIDB4REQ5QywgMHg0NDkwLAorICAgIDB4RDg0NywgMHhEREExLCAweDQ0OEYsIDB4RDg0NywgMHhEREI3LCAweDQ0OTcsIDB4RDg0NywgMHhEREUwLCAweDQ0OTksCisgICAgMHhEODQ3LCAweERFMzMsIDB4NDQ5QSwgMHhEODQ3LCAweERFMzQsIDB4NDFDRCwgMHhEODQ3LCAweERGMUUsIDB4NDRBNywKKyAgICAweEQ4NDcsIDB4REY3NiwgMHg0NEFFLCAweEQ4NDcsIDB4REZGQSwgMHg0NEIxLCAweEQ4NDgsIDB4REQ3QiwgMHg0NEJGLAorICAgIDB4RDg0OCwgMHhERTE4LCAweDRBQTEsIDB4RDg0OCwgMHhERjFFLCAweDQ0QzUsIDB4RDg0OCwgMHhERkFELCAweDQ0QzgsCisgICAgMHhEODQ5LCAweERFMDksIDB4M0M1MywgMHhEODQ5LCAweERFRjMsIDB4NDRFMCwgMHhEODRBLCAweERDNUIsIDB4NDRFRiwKKyAgICAweEQ4NEEsIDB4RENBQiwgMHg0NEY1LCAweEQ4NEEsIDB4REQ4RiwgMHg0NEY5LCAweEQ4NEEsIDB4REVCOCwgMHg0NTAzLAorICAgIDB4RDg0QSwgMHhERjQ2LCAweDQ1MTAsIDB4RDg0QSwgMHhERjRGLCAweDQ1MDcsIDB4RDg0QSwgMHhERjUwLCAweDQ1MDgsCisgICAgMHhEODRBLCAweERGQTYsIDB4NDUxMywgMHhEODRCLCAweERDMUQsIDB4NDUxMiwgMHhEODRCLCAweERDMjQsIDB4NDUxNiwKKyAgICAweEQ4NEIsIDB4RERFMSwgMHg0NTJFLCAweEQ4NEIsIDB4REU0MiwgMHg0RTlDLCAweEQ4NEIsIDB4REZFQiwgMHg0RUEyLAorICAgIDB4RDg0QywgMHhEREI2LCAweDQ1NTAsIDB4RDg0QywgMHhEREMzLCAweDQ1NEUsIDB4RDg0QywgMHhEREM0LCAweDQxRjgsCisgICAgMHhEODRDLCAweERERjUsIDB4NDU0RiwgMHhEODRDLCAweERGNzIsIDB4NDU2MSwgMHhEODRDLCAweERGRDAsIDB4NDU2OCwKKyAgICAweEQ4NEMsIDB4REZEMiwgMHg0NTY0LCAweEQ4NEMsIDB4REZEMywgMHg0NTYzLCAweEQ4NEMsIDB4REZENSwgMHg0NTZBLAorICAgIDB4RDg0QywgMHhERkRBLCAweDQ1NkMsIDB4RDg0QywgMHhERkRGLCAweDQ1NkUsIDB4RDg0QywgMHhERkU0LCAweDQ1NjksCisgICAgMHhEODRDLCAweERGRkUsIDB4M0MzRSwgMHhEODRELCAweERDNEEsIDB4NDU3NiwgMHhEODRELCAweERDNEIsIDB4NDU3OCwKKyAgICAweEQ4NEQsIDB4REM1MSwgMHg0NTc3LCAweEQ4NEQsIDB4REM2NSwgMHg0NTdDLCAweEQ4NEQsIDB4RENFNCwgMHg0NTk2LAorICAgIDB4RDg0RCwgMHhERDVBLCAweDQ1OTcsIDB4RDg0RCwgMHhERDk0LCAweDQ1QTMsIDB4RDg0RCwgMHhEREM0LCAweDQyMDksCisgICAgMHhEODRELCAweERFMzgsIDB4NDVCMywgMHhEODRELCAweERFMzksIDB4NDVCMSwgMHhEODRELCAweERFM0EsIDB4M0MyMSwKKyAgICAweEQ4NEQsIDB4REU0NywgMHg0NUIyLCAweEQ4NEQsIDB4REYwQywgMHg0NUM3LCAweEQ4NEQsIDB4REYxQywgMHg0NUJFLAorICAgIDB4RDg0RCwgMHhERjNGLCAweDQyMTIsIDB4RDg0RCwgMHhERjYzLCAweDQyMTQsIDB4RDg0RCwgMHhERjY0LCAweDQ1Q0IsCisgICAgMHhEODRELCAweERGRTcsIDB4NDVEMywgMHhEODRELCAweERGRkYsIDB4NDVEMiwgMHhEODRFLCAweERDMjQsIDB4NDVEOCwKKyAgICAweEQ4NEUsIDB4REMzRCwgMHg0NURELCAweEQ4NEUsIDB4REU5OCwgMHg0NUU5LCAweEQ4NEYsIDB4REM3RiwgMHg0NUY2LAorICAgIDB4RDg0RiwgMHhEQ0JFLCAweDM3RDUsIDB4RDg0RiwgMHhEQ0ZFLCAweDM2NTAsIDB4RDg0RiwgMHhERDAwLCAweDQ2MDUsCisgICAgMHhEODRGLCAweEREMEUsIDB4NDdEQSwgMHhEODRGLCAweERENDAsIDB4NDYxNiwgMHhEODRGLCAweERERDMsIDB4NDYxOSwKKyAgICAweEQ4NEYsIDB4RERGOSwgMHg0NjE4LCAweEQ4NEYsIDB4RERGQSwgMHg0NjE3LCAweEQ4NEYsIDB4REY3RSwgMHg0NjNGLAorICAgIDB4RDg1MCwgMHhEQzRCLCAweDRFQzgsIDB4RDg1MCwgMHhEQzk2LCAweDQ2NEUsIDB4RDg1MCwgMHhERDAzLCAweDQ2NTMsCisgICAgMHhEODUwLCAweEREQzYsIDB4NDY1RiwgMHhEODUwLCAweERERkUsIDB4NDY2MiwgMHhEODUwLCAweERFRUUsIDB4MzdDQSwKKyAgICAweEQ4NTAsIDB4REZCQywgMHg0Njc3LCAweEQ4NTAsIDB4REZEMCwgMHgxRTlFLCAweEQ4NTEsIDB4REUyOSwgMHg0NjgxLAorICAgIDB4RDg1MSwgMHhERUE1LCAweDQ2ODcsIDB4RDg1MSwgMHhERkYxLCAweDQyNEEsIDB4RDg1MiwgMHhEQzk2LCAweDQ2OUQsCisgICAgMHhEODUyLCAweERFNEQsIDB4NDZCOCwgMHhEODUyLCAweERGNTYsIDB4NDZDNSwgMHhEODUyLCAweERGNkYsIDB4NDZDNywKKyAgICAweEQ4NTMsIDB4REMxNiwgMHg0NkNDLCAweEQ4NTMsIDB4REQxNCwgMHgzNkFCLCAweEQ4NTMsIDB4REUwNCwgMHg0RTVBLAorICAgIDB4RDg1MywgMHhERTBFLCAweDQ2RUUsIDB4RDg1MywgMHhERTM3LCAweDQ2RjIsIDB4RDg1MywgMHhERTZBLCAweDQ2RjcsCisgICAgMHhEODUzLCAweERFOEIsIDB4NDZGQSwgMHhEODUzLCAweERGRjIsIDB4NEU1QiwgMHhEODU0LCAweERDNEEsIDB4NDcwNSwKKyAgICAweEQ4NTQsIDB4REM1NSwgMHg0NzA3LCAweEQ4NTQsIDB4REQyMiwgMHg0NzA5LCAweEQ4NTQsIDB4RERBOSwgMHg0NzBFLAorICAgIDB4RDg1NCwgMHhERENELCAweDQ3MTEsIDB4RDg1NCwgMHhEREU1LCAweDQ3MTAsIDB4RDg1NCwgMHhERTFFLCAweDQ3MTMsCisgICAgMHhEODU0LCAweERFNEMsIDB4NDcxNSwgMHhEODU1LCAweERDMkUsIDB4NDcyMSwgMHhEODU1LCAweERDOEUsIDB4NDI2RCwKKyAgICAweEQ4NTUsIDB4RENEOSwgMHg0NzI5LCAweEQ4NTUsIDB4REQwRSwgMHg0MjcxLCAweEQ4NTUsIDB4RERBNywgMHg0NzM1LAorICAgIDB4RDg1NSwgMHhERTdGLCAweDM2RkIsIDB4RDg1NSwgMHhERjcxLCAweDQyN0EsIDB4RDg1NSwgMHhERkE5LCAweDQ3NDgsCisgICAgMHhEODU1LCAweERGQjQsIDB4NDc0OSwgMHhEODU2LCAweERDNzQsIDB4MURGNiwgMHhEODU2LCAweEREQzQsIDB4NDI4MCwKKyAgICAweEQ4NTYsIDB4RERDQywgMHg0RTkwLCAweEQ4NTYsIDB4RERENCwgMHg0NzVDLCAweEQ4NTYsIDB4REVFMywgMHg0NzY1LAorICAgIDB4RDg1NiwgMHhERUU0LCAweDQ3NjQsIDB4RDg1NiwgMHhERUYxLCAweDQ3NjYsIDB4RDg1NiwgMHhERkIyLCAweDQ3NzUsCisgICAgMHhEODU3LCAweERDNEIsIDB4NDc3RSwgMHhEODU3LCAweERDNjQsIDB4NDc3RiwgMHhEODU3LCAweEREQTEsIDB4NDI4OSwKKyAgICAweEQ4NTcsIDB4REUyRSwgMHg0NzhFLCAweEQ4NTcsIDB4REU1NiwgMHg0NzhGLCAweEQ4NTcsIDB4REU2MiwgMHg0NzkyLAorICAgIDB4RDg1NywgMHhERTY1LCAweDQ3OTAsIDB4RDg1NywgMHhERUMyLCAweDQ3OTcsIDB4RDg1NywgMHhERUQ4LCAweDQ3OTUsCisgICAgMHhEODU3LCAweERFRTgsIDB4NDc5OSwgMHhEODU3LCAweERGMjMsIDB4NDc5QSwgMHhEODU3LCAweERGNUMsIDB4NDc5QywKKyAgICAweEQ4NTcsIDB4REZENCwgMHg0N0EzLCAweEQ4NTcsIDB4REZFMCwgMHg0N0EyLCAweEQ4NTcsIDB4REZGQiwgMHg0N0E5LAorICAgIDB4RDg1OCwgMHhEQzBDLCAweDQ3QTgsIDB4RDg1OCwgMHhEQzE3LCAweDQ3QjAsIDB4RDg1OCwgMHhEQzYwLCAweDQ3QjMsCisgICAgMHhEODU4LCAweERDRUQsIDB4NDdCRCwgMHhEODU4LCAweERFNzAsIDB4NDdEMSwgMHhEODU4LCAweERFODYsIDB4NDdEMiwKKyAgICAweEQ4NTgsIDB4REY0QywgMHg0RjU3LCAweEQ4NTksIDB4REMwMiwgMHg0N0RFLCAweEQ4NTksIDB4REU3RSwgMHg0N0YwLAorICAgIDB4RDg1OSwgMHhERUIwLCAweDM3MTQsIDB4RDg1OSwgMHhERjFELCAweDQ3RkUsIDB4RDg1QSwgMHhEQ0RELCAweDQ4MEMsCisgICAgMHhEODVBLCAweERDRUEsIDB4NDgwRSwgMHhEODVBLCAweERENTEsIDB4MzU0RSwgMHhEODVBLCAweERENkYsIDB4NDgxMiwKKyAgICAweEQ4NUEsIDB4REQ5OSwgMHgzNzM2LCAweEQ4NUEsIDB4RERERCwgMHg0ODE0LCAweEQ4NUEsIDB4REUxRSwgMHg0ODE3LAorICAgIDB4RDg1QSwgMHhERTU4LCAweDQ4MUIsIDB4RDg1QSwgMHhERThDLCAweDQ4MUYsIDB4RDg1QSwgMHhERUI3LCAweDQ4MjIsCisgICAgMHhEODVBLCAweERFRkYsIDB4NDJBNywgMHhEODVCLCAweERDMjksIDB4NDQ0NiwgMHhEODVCLCAweERDNzMsIDB4NDg0QSwKKyAgICAweEQ4NUIsIDB4REM5RSwgMHg0RUVFLCAweEQ4NUIsIDB4RENERCwgMHg0ODUzLCAweEQ4NUIsIDB4REU0MCwgMHg0MkMxLAorICAgIDB4RDg1QiwgMHhERTY1LCAweDQ4NjAsIDB4RDg1QiwgMHhERjk0LCAweDQ4NzAsIDB4RDg1QiwgMHhERkY2LCAweDQ4N0EsCisgICAgMHhEODVCLCAweERGRjcsIDB4NDg3QiwgMHhEODVCLCAweERGRjgsIDB4NDg3OSwgMHhEODVDLCAweERDRjQsIDB4NDJDRiwKKyAgICAweEQ4NUMsIDB4REQwRCwgMHg0ODhCLCAweEQ4NUMsIDB4REQzOSwgMHg0ODhFLCAweEQ4NUMsIDB4REZEQSwgMHg0OEIzLAorICAgIDB4RDg1QywgMHhERkRCLCAweDQ4QjIsIDB4RDg1QywgMHhERkZFLCAweDQ4QjksIDB4RDg1RCwgMHhEQzEwLCAweDQ4QkMsCisgICAgMHhEODVELCAweERDNDksIDB4NDhDMCwgMHhEODVELCAweERFMTQsIDB4NDhDRSwgMHhEODVELCAweERFMTUsIDB4NDhDRCwKKyAgICAweEQ4NUQsIDB4REUzMSwgMHg0OEQwLCAweEQ4NUQsIDB4REU4NCwgMHg0MkRELCAweEQ4NUQsIDB4REU5MywgMHg0OEQ1LAorICAgIDB4RDg1RCwgMHhERjBFLCAweDQ4REEsIDB4RDg1RCwgMHhERjIzLCAweDQ4REMsIDB4RDg1RCwgMHhERjUyLCAweDQ4RTAsCisgICAgMHhEODVFLCAweEREODUsIDB4NDhGMCwgMHhEODVFLCAweEREQjQsIDB4NEVBNSwgMHhEODVFLCAweERFODQsIDB4NDhGQywKKyAgICAweEQ4NUUsIDB4REZCMywgMHg0OTBCLCAweEQ4NUUsIDB4REZCRSwgMHg0OTBELCAweEQ4NUUsIDB4REZDNywgMHg0OTBFLAorICAgIDB4RDg1RiwgMHhEQzNDLCAweDRFRkMsIDB4RDg1RiwgMHhEQ0I4LCAweDQ5MTQsIDB4RDg1RiwgMHhERDczLCAweDRFNUMsCisgICAgMHhEODVGLCAweEREQTAsIDB4NDkxQywgMHhEODVGLCAweERFMTAsIDB4NDkxRSwgMHhEODVGLCAweERGQjcsIDB4MzY0QSwKKyAgICAweEQ4NjAsIDB4REM4QSwgMHg0OTI3LCAweEQ4NjAsIDB4RENCQiwgMHg0OTJELCAweEQ4NjAsIDB4REU3NywgMHg0MkY0LAorICAgIDB4RDg2MCwgMHhERTgyLCAweDQ5MzksIDB4RDg2MCwgMHhERUYzLCAweDQ5M0IsIDB4RDg2MCwgMHhERkNELCAweDQyRkEsCisgICAgMHhEODYxLCAweERDMEMsIDB4NDk0MiwgMHhEODYxLCAweERDNTUsIDB4NDk0NSwgMHhEODYxLCAweERENkIsIDB4NDk1MiwKKyAgICAweEQ4NjEsIDB4RERDOCwgMHg0OTU1LCAweEQ4NjEsIDB4RERDOSwgMHg0OTU2LCAweEQ4NjEsIDB4REVENywgMHg0OTYwLAorICAgIDB4RDg2MSwgMHhERUZBLCAweDQ5NjMsIDB4RDg2MiwgMHhERDQ2LCAweDQ5N0MsIDB4RDg2MiwgMHhERDQ5LCAweDQ5N0IsCisgICAgMHhEODYyLCAweERENkIsIDB4NDk4MSwgMHhEODYyLCAweEREODcsIDB4MzdBRCwgMHhEODYyLCAweEREODgsIDB4NDk4OCwKKyAgICAweEQ4NjIsIDB4RERCQSwgMHg0OTkyLCAweEQ4NjIsIDB4RERCQiwgMHg0OTkzLCAweEQ4NjIsIDB4REUxRSwgMHg0OTlCLAorICAgIDB4RDg2MiwgMHhERTI5LCAweDQ5OUMsIDB4RDg2MiwgMHhERTQzLCAweDQ5QTAsIDB4RDg2MiwgMHhERTcxLCAweDQ5OUYsCisgICAgMHhEODYyLCAweERFOTksIDB4NDlBNywgMHhEODYyLCAweERFQ0QsIDB4NDlBOCwgMHhEODYyLCAweERFREQsIDB4NDlBRiwKKyAgICAweEQ4NjIsIDB4REVFNCwgMHg0OUFFLCAweEQ4NjIsIDB4REZDMSwgMHg0OUJBLCAweEQ4NjIsIDB4REZFRiwgMHg0OUJCLAorICAgIDB4RDg2MywgMHhEQ0RELCAweDFERDksIDB4RDg2MywgMHhERDEwLCAweDQ5QzIsIDB4RDg2MywgMHhERDcxLCAweDQ5QzMsCisgICAgMHhEODYzLCAweERERkIsIDB4NDlDNSwgMHhEODYzLCAweERFMTcsIDB4MzdCMCwgMHhEODYzLCAweERFMUYsIDB4NDlDNiwKKyAgICAweEQ4NjMsIDB4REUzNiwgMHg0OUNBLCAweEQ4NjMsIDB4REU4OSwgMHg0OUNELCAweEQ4NjMsIDB4REVFQiwgMHg0OUNGLAorICAgIDB4RDg2MywgMHhERUY2LCAweDFERjksIDB4RDg2MywgMHhERjMyLCAweDQ5RDEsIDB4RDg2MywgMHhERkY4LCAweDQ5RDcsCisgICAgMHhEODY0LCAweERFQTAsIDB4NDlFNSwgMHhEODY0LCAweERFQjEsIDB4NDlFNiwgMHhEODY1LCAweERDOTAsIDB4NDlGNywKKyAgICAweEQ4NjUsIDB4RERDRiwgMHg0QTAwLCAweEQ4NjUsIDB4REU3RiwgMHgzNjE5LCAweEQ4NjUsIDB4REVGMCwgMHg0QTBGLAorICAgIDB4RDg2NSwgMHhERjE5LCAweDRBMTIsIDB4RDg2NSwgMHhERjUwLCAweDRBMTYsIDB4RDg2NiwgMHhEQ0M2LCAweDRBMjcsCisgICAgMHhEODY2LCAweERFNzIsIDB4NEEzOSwgMHhEODY3LCAweERENEIsIDB4MzU5NSwgMHhEODY3LCAweEREREIsIDB4NEE1MiwKKyAgICAweEQ4NjcsIDB4REUxNSwgMHg0QTVDLCAweEQ4NjcsIDB4REUzRCwgMHg0RjVCLCAweEQ4NjcsIDB4REU0OSwgMHg0QTVFLAorICAgIDB4RDg2NywgMHhERThBLCAweDRBNUQsIDB4RDg2NywgMHhERUM0LCAweDRBNjYsIDB4RDg2NywgMHhERURCLCAweDRBNkUsCisgICAgMHhEODY3LCAweERFRTksIDB4NEE2QiwgMHhEODY3LCAweERGQ0UsIDB4NEE3RiwgMHhEODY3LCAweERGRDcsIDB4NEE3RiwKKyAgICAweEQ4NjgsIDB4REMxQSwgMHg0QTg1LCAweEQ4NjgsIDB4REMyRiwgMHg0QTgzLCAweEQ4NjgsIDB4REM4MiwgMHg0QThDLAorICAgIDB4RDg2OCwgMHhEQ0Y5LCAweDRBOEIsIDB4RDg2OCwgMHhERDkwLCAweDQzNEIsIDB4RDg2OCwgMHhERUIyLCAweDRFNjgsCisgICAgMHhEODY4LCAweERGOEMsIDB4NEFBNSwgMHhEODY5LCAweERDMzcsIDB4NEFBNywgMHhEODY5LCAweERERjEsIDB4NEFCMywKKyAgICAweEQ4NjksIDB4REUwMiwgMHg0QUI1LCAweEQ4NjksIDB4REUxQSwgMHg0RjVDLCAweEQ4NjksIDB4REVCMiwgMHg0QUI5LAorICAgIDB4RDg3RSwgMHhEQzA0LCAweDNDMUMsIDB4RDg3RSwgMHhEQzBGLCAweDFFODYsIDB4RDg3RSwgMHhEQzE1LCAweDRFNUQsCisgICAgMHhEODdFLCAweERDMTgsIDB4MUU4OSwgMHhEODdFLCAweERDMUEsIDB4MzY4MiwgMHhEODdFLCAweERDMjIsIDB4MzU3NCwKKyAgICAweEQ4N0UsIDB4REMyOCwgMHgzNUVGLCAweEQ4N0UsIDB4REMyQywgMHgzNzFELCAweEQ4N0UsIDB4REMzMywgMHgzNTk3LAorICAgIDB4RDg3RSwgMHhEQzNGLCAweDM1RjcsIDB4RDg3RSwgMHhEQzQ2LCAweDRFNUUsIDB4RDg3RSwgMHhEQzUyLCAweDM2MTEsCisgICAgMHhEODdFLCAweERDNjIsIDB4MzZBRSwgMHhEODdFLCAweERDNkQsIDB4MzcyOSwgMHhEODdFLCAweERDNzMsIDB4MzYwOCwKKyAgICAweEQ4N0UsIDB4REM3NywgMHgxRTRBLCAweEQ4N0UsIDB4REM4NCwgMHgxRTM2LCAweEQ4N0UsIDB4REM5OSwgMHg0RTVGLAorICAgIDB4RDg3RSwgMHhEQzlBLCAweDM2NjgsIDB4RDg3RSwgMHhEQ0E2LCAweDRFNjAsIDB4RDg3RSwgMHhEQ0FDLCAweDM1QjYsCisgICAgMHhEODdFLCAweERDQjIsIDB4MzYyQiwgMHhEODdFLCAweERDQjYsIDB4MzczMSwgMHhEODdFLCAweERDRDMsIDB4MUU4OCwKKyAgICAweEQ4N0UsIDB4RENEQiwgMHgzNzNDLCAweEQ4N0UsIDB4RENEQywgMHgxRTBGLCAweEQ4N0UsIDB4RENFMSwgMHgzN0QzLAorICAgIDB4RDg3RSwgMHhEQ0U1LCAweDRFNjEsIDB4RDg3RSwgMHhEQ0VBLCAweDM1NkYsIDB4RDg3RSwgMHhEQ0VELCAweDFERjEsCisgICAgMHhEODdFLCAweERDRkMsIDB4MzU1OCwgMHhEODdFLCAweEREMDMsIDB4MzVDOCwgMHhEODdFLCAweEREMEIsIDB4MzVFOSwKKyAgICAweEQ4N0UsIDB4REQwRiwgMHgzNjZDLCAweEQ4N0UsIDB4REQxQSwgMHgzNjVDLCAweEQ4N0UsIDB4REQyMCwgMHgxRTlGLAorICAgIDB4RDg3RSwgMHhERDIxLCAweDM1RjEsIDB4RDg3RSwgMHhERDQ1LCAweDM0MkQsIDB4RDg3RSwgMHhERDQ3LCAweDM2MUUsCisgICAgMHhEODdFLCAweERENkMsIDB4Mzc2NCwgMHhEODdFLCAweEREOTUsIDB4MzU2NiwgMHhEODdFLCAweERERDAsIDB4MzZGNCwKKyAgICAweEQ4N0UsIDB4RERERSwgMHg0RTYyLCAweEQ4N0UsIDB4RERERiwgMHgzNkY1LCAweEQ4N0UsIDB4RERGNCwgMHgzQkE1LAorfTsKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvVW5pSklTLVVURjE2LVZfNS5jcHAgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvSmFwYW4xL1VuaUpJUy1VVEYxNi1WXzUuY3BwCmluZGV4IGFjODNjNzUuLmMwMDczZDcgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9KYXBhbjEvVW5pSklTLVVURjE2LVZfNS5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0phcGFuMS9VbmlKSVMtVVRGMTYtVl81LmNwcApAQCAtMSw4MSArMSw4MSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX1VuaUpJU19VVEYxNl9WXzVbMjg5ICogMl0gPSB7DQotICAgIDB4MDBCMCwgMHgyMDRELCAweDIwMTAsIDB4MUVENSwgMHgyMDE1LCAweDFFRDQsIDB4MjAxNiwgMHgxRUQ3LA0KLSAgICAweDIwMjUsIDB4MUVEQSwgMHgyMDI2LCAweDFFRDksIDB4MjAzMiwgMHgyMDUxLCAweDIwMzMsIDB4MjA1QiwNCi0gICAgMHgyMTkwLCAweDAyRTIsIDB4MjE5MSwgMHgwMkUwLCAweDIxOTIsIDB4MDJFMywgMHgyMTkzLCAweDAyRTEsDQotICAgIDB4MjFDNCwgMHgyMDc3LCAweDIxQzUsIDB4MjA3NiwgMHgyMUM2LCAweDIwNzgsIDB4MjFFNiwgMHgxRjRDLA0KLSAgICAweDIxRTcsIDB4MUY0RSwgMHgyMUU4LCAweDFGNEIsIDB4MjFFOSwgMHgxRjRELCAweDIzOUIsIDB4MkY3NCwNCi0gICAgMHgyMzlDLCAweDJGODgsIDB4MjM5RCwgMHgyRjczLCAweDIzOUUsIDB4MkY3NiwgMHgyMzlGLCAweDJGODgsDQotICAgIDB4MjNBMCwgMHgyRjc1LCAweDIzQTEsIDB4MkY3QywgMHgyM0EyLCAweDJGODgsIDB4MjNBMywgMHgyRjdCLA0KLSAgICAweDIzQTQsIDB4MkY3RSwgMHgyM0E1LCAweDJGODgsIDB4MjNBNiwgMHgyRjdELCAweDIzQTcsIDB4MUZFOCwNCi0gICAgMHgyM0E4LCAweDFGRTcsIDB4MjNBOSwgMHgxRkU2LCAweDIzQUEsIDB4MkY4OCwgMHgyM0FCLCAweDFGRUMsDQotICAgIDB4MjNBQywgMHgxRkVCLCAweDIzQUQsIDB4MUZFQSwgMHgyM0IwLCAweDNGREUsIDB4MjNCMSwgMHgzRkRGLA0KLSAgICAweDI1MDAsIDB4MUQzOSwgMHgyNTAxLCAweDFEM0EsIDB4MjUwMiwgMHgxRDM3LCAweDI1MDMsIDB4MUQzOCwNCi0gICAgMHgyNTA0LCAweDFEM0QsIDB4MjUwNSwgMHgxRDNFLCAweDI1MDYsIDB4MUQzQiwgMHgyNTA3LCAweDFEM0MsDQotICAgIDB4MjUwOCwgMHgxRDQxLCAweDI1MDksIDB4MUQ0MiwgMHgyNTBBLCAweDFEM0YsIDB4MjUwQiwgMHgxRDQwLA0KLSAgICAweDI1MEMsIDB4MUQ0NywgMHgyNTBELCAweDFENDksIDB4MjUwRSwgMHgxRDQ4LCAweDI1MEYsIDB4MUQ0QSwNCi0gICAgMHgyNTEwLCAweDFENEYsIDB4MjUxMSwgMHgxRDUxLCAweDI1MTIsIDB4MUQ1MCwgMHgyNTEzLCAweDFENTIsDQotICAgIDB4MjUxNCwgMHgxRDQzLCAweDI1MTUsIDB4MUQ0NSwgMHgyNTE2LCAweDFENDQsIDB4MjUxNywgMHgxRDQ2LA0KLSAgICAweDI1MTgsIDB4MUQ0QiwgMHgyNTE5LCAweDFENEQsIDB4MjUxQSwgMHgxRDRDLCAweDI1MUIsIDB4MUQ0RSwNCi0gICAgMHgyNTFDLCAweDFENjMsIDB4MjUxRCwgMHgxRDY3LCAweDI1MUUsIDB4MUQ2NSwgMHgyNTFGLCAweDFENjQsDQotICAgIDB4MjUyMCwgMHgxRDY2LCAweDI1MjEsIDB4MUQ2OSwgMHgyNTIyLCAweDFENjgsIDB4MjUyMywgMHgxRDZBLA0KLSAgICAweDI1MjQsIDB4MUQ2QiwgMHgyNTI1LCAweDFENkYsIDB4MjUyNiwgMHgxRDZELCAweDI1MjcsIDB4MUQ2QywNCi0gICAgMHgyNTI4LCAweDFENkUsIDB4MjUyOSwgMHgxRDcxLCAweDI1MkEsIDB4MUQ3MCwgMHgyNTJCLCAweDFENzIsDQotICAgIDB4MjUyQywgMHgxRDVCLCAweDI1MkQsIDB4MUQ1RCwgMHgyNTJFLCAweDFENUUsIDB4MjUyRiwgMHgxRDVGLA0KLSAgICAweDI1MzAsIDB4MUQ1QywgMHgyNTMxLCAweDFENjAsIDB4MjUzMiwgMHgxRDYxLCAweDI1MzMsIDB4MUQ2MiwNCi0gICAgMHgyNTM0LCAweDFENTMsIDB4MjUzNSwgMHgxRDU1LCAweDI1MzYsIDB4MUQ1NiwgMHgyNTM3LCAweDFENTcsDQotICAgIDB4MjUzOCwgMHgxRDU0LCAweDI1MzksIDB4MUQ1OCwgMHgyNTNBLCAweDFENTksIDB4MjUzQiwgMHgxRDVBLA0KLSAgICAweDI1M0QsIDB4MUQ3NywgMHgyNTNFLCAweDFENzgsIDB4MjUzRiwgMHgxRDc5LCAweDI1NDAsIDB4MUQ3NSwNCi0gICAgMHgyNTQxLCAweDFENzQsIDB4MjU0MiwgMHgxRDc2LCAweDI1NDMsIDB4MUQ3QiwgMHgyNTQ0LCAweDFEN0QsDQotICAgIDB4MjU0NSwgMHgxRDdBLCAweDI1NDYsIDB4MUQ3QywgMHgyNTQ3LCAweDFEODEsIDB4MjU0OCwgMHgxRDgwLA0KLSAgICAweDI1NDksIDB4MUQ3RSwgMHgyNTRBLCAweDFEN0YsIDB4MjYxQywgMHgyMDFELCAweDI2MUQsIDB4MjAxQiwNCi0gICAgMHgyNjFFLCAweDIwMUUsIDB4MjYxRiwgMHgyMDFDLCAweDI3MDIsIDB4MkY5MiwgMHgyN0ExLCAweDIwMTEsDQotICAgIDB4MzAwMSwgMHgxRUNGLCAweDMwMDIsIDB4MUVEMCwgMHgzMDA4LCAweDFFRTMsIDB4MzAwOSwgMHgxRUU0LA0KLSAgICAweDMwMEEsIDB4MUVFNSwgMHgzMDBCLCAweDFFRTYsIDB4MzAwQywgMHgxRUU3LCAweDMwMEQsIDB4MUVFOCwNCi0gICAgMHgzMDBFLCAweDFFRTksIDB4MzAwRiwgMHgxRUVBLCAweDMwMTAsIDB4MUVFQiwgMHgzMDExLCAweDFFRUMsDQotICAgIDB4MzAxNCwgMHgxRURELCAweDMwMTUsIDB4MUVERSwgMHgzMDE2LCAweDNGQzksIDB4MzAxNywgMHgzRkNBLA0KLSAgICAweDMwMTgsIDB4MkY2QiwgMHgzMDE5LCAweDJGNkMsIDB4MzAxQywgMHgxRUQ2LCAweDMwMUQsIDB4MUYxNCwNCi0gICAgMHgzMDFGLCAweDFGMTUsIDB4MzAzQiwgMHgyRjRCLCAweDMwNDEsIDB4MUVFRSwgMHgzMDQzLCAweDFFRUYsDQotICAgIDB4MzA0NSwgMHgxRUYwLCAweDMwNDcsIDB4MUVGMSwgMHgzMDQ5LCAweDFFRjIsIDB4MzA2MywgMHgxRUYzLA0KLSAgICAweDMwODMsIDB4MUVGNCwgMHgzMDg1LCAweDFFRjUsIDB4MzA4NywgMHgxRUY2LCAweDMwOEUsIDB4MUVGNywNCi0gICAgMHgzMDk1LCAweDIwNDgsIDB4MzA5NiwgMHgyMDQ5LCAweDMwOUIsIDB4MjA1MCwgMHgzMDlDLCAweDIwNEYsDQotICAgIDB4MzBBMCwgMHgzRkNCLCAweDMwQTEsIDB4MUVGOCwgMHgzMEEzLCAweDFFRjksIDB4MzBBNSwgMHgxRUZBLA0KLSAgICAweDMwQTcsIDB4MUVGQiwgMHgzMEE5LCAweDFFRkMsIDB4MzBDMywgMHgxRUZELCAweDMwRTMsIDB4MUVGRSwNCi0gICAgMHgzMEU1LCAweDFFRkYsIDB4MzBFNywgMHgxRjAwLCAweDMwRUUsIDB4MUYwMSwgMHgzMEY1LCAweDFGMDIsDQotICAgIDB4MzBGNiwgMHgxRjAzLCAweDMwRkMsIDB4MUVEMywgMHgzMUYwLCAweDNGQ0QsIDB4MzFGMSwgMHgzRkNFLA0KLSAgICAweDMxRjIsIDB4M0ZDRiwgMHgzMUYzLCAweDNGRDAsIDB4MzFGNCwgMHgzRkQxLCAweDMxRjUsIDB4M0ZEMiwNCi0gICAgMHgzMUY2LCAweDNGRDMsIDB4MzFGNywgMHgzRkQ0LCAweDMxRjgsIDB4M0ZENSwgMHgzMUY5LCAweDNGRDYsDQotICAgIDB4MzFGQSwgMHgzRkQ4LCAweDMxRkIsIDB4M0ZEOSwgMHgzMUZDLCAweDNGREEsIDB4MzFGRCwgMHgzRkRCLA0KLSAgICAweDMxRkUsIDB4M0ZEQywgMHgzMUZGLCAweDNGREQsIDB4MzMwMCwgMHgyMDlFLCAweDMzMDEsIDB4MkVCNiwNCi0gICAgMHgzMzAyLCAweDJFQjcsIDB4MzMwMywgMHgyMDkyLCAweDMzMDQsIDB4MkVCOCwgMHgzMzA1LCAweDIwOEQsDQotICAgIDB4MzMwNiwgMHgyRUI5LCAweDMzMDcsIDB4MkVCRCwgMHgzMzA4LCAweDJFQkIsIDB4MzMwOSwgMHgyRUMwLA0KLSAgICAweDMzMEEsIDB4MkVCRSwgMHgzMzBCLCAweDJFQzIsIDB4MzMwQywgMHgyRUM0LCAweDMzMEQsIDB4MUYwRSwNCi0gICAgMHgzMzBFLCAweDJFQzUsIDB4MzMwRiwgMHgyRUM2LCAweDMzMTAsIDB4MkVDNywgMHgzMzExLCAweDJFQzgsDQotICAgIDB4MzMxMiwgMHgyRUM5LCAweDMzMTMsIDB4MkVDQSwgMHgzMzE0LCAweDFGMDUsIDB4MzMxNSwgMHgyMDk0LA0KLSAgICAweDMzMTYsIDB4MjA4QSwgMHgzMzE3LCAweDJFQ0MsIDB4MzMxOCwgMHgyMDkzLCAweDMzMTksIDB4MkVDRSwNCi0gICAgMHgzMzFBLCAweDJFRDAsIDB4MzMxQiwgMHgyRUQxLCAweDMzMUMsIDB4MkVEMiwgMHgzMzFELCAweDJFRDMsDQotICAgIDB4MzMxRSwgMHgyMEExLCAweDMzMUYsIDB4MkVENCwgMHgzMzIwLCAweDJFRDUsIDB4MzMyMSwgMHgyRUQ2LA0KLSAgICAweDMzMjIsIDB4MjA4OSwgMHgzMzIzLCAweDIwOUMsIDB4MzMyNCwgMHgyRUQ3LCAweDMzMjUsIDB4MkVEOSwNCi0gICAgMHgzMzI2LCAweDFGMEYsIDB4MzMyNywgMHgxRjA5LCAweDMzMjgsIDB4MkVEQywgMHgzMzI5LCAweDJFREQsDQotICAgIDB4MzMyQSwgMHgyMEE0LCAweDMzMkIsIDB4MUYxMSwgMHgzMzJELCAweDJFREYsIDB4MzMyRSwgMHgyRUUyLA0KLSAgICAweDMzMkYsIDB4MkVFMywgMHgzMzMwLCAweDJFRTQsIDB4MzMzMSwgMHgyMEE2LCAweDMzMzIsIDB4MkVFNSwNCi0gICAgMHgzMzMzLCAweDIwOEUsIDB4MzMzNCwgMHgyRUU4LCAweDMzMzUsIDB4MkVFOSwgMHgzMzM2LCAweDFGMEIsDQotICAgIDB4MzMzNywgMHgyRUVFLCAweDMzMzgsIDB4MkVGMCwgMHgzMzM5LCAweDIwOTcsIDB4MzMzQSwgMHgyRUYxLA0KLSAgICAweDMzM0IsIDB4MjA5RCwgMHgzMzNDLCAweDJFRUEsIDB4MzMzRCwgMHgyRUYyLCAweDMzM0UsIDB4MkVGNCwNCi0gICAgMHgzMzNGLCAweDJFRjUsIDB4MzM0MCwgMHgyRUY2LCAweDMzNDEsIDB4MkVGMywgMHgzMzQyLCAweDIwOUIsDQotICAgIDB4MzM0MywgMHgyRUY3LCAweDMzNDQsIDB4MkVGOCwgMHgzMzQ1LCAweDJFRjksIDB4MzM0NiwgMHgyRUZBLA0KLSAgICAweDMzNDcsIDB4MjBBNSwgMHgzMzQ4LCAweDJFRkIsIDB4MzM0OSwgMHgxRjA0LCAweDMzNEEsIDB4MUYxMiwNCi0gICAgMHgzMzRCLCAweDJFRkMsIDB4MzM0QywgMHgyRUZELCAweDMzNEQsIDB4MUYwNywgMHgzMzRFLCAweDIwOTEsDQotICAgIDB4MzM0RiwgMHgyRUZFLCAweDMzNTAsIDB4MkVGRiwgMHgzMzUxLCAweDFGMEMsIDB4MzM1MiwgMHgyRjAyLA0KLSAgICAweDMzNTMsIDB4MkYwNiwgMHgzMzU0LCAweDJGMDMsIDB4MzM1NSwgMHgyRjA3LCAweDMzNTYsIDB4MkYwOCwNCi0gICAgMHgzMzU3LCAweDIwOTgsIDB4MzM3RiwgMHgyMDg0LCAweEZGMDgsIDB4MUVEQiwgMHhGRjA5LCAweDFFREMsDQotICAgIDB4RkYwQywgMHgyMDRDLCAweEZGMEUsIDB4MjA1MiwgMHhGRjFELCAweDFFRUQsIDB4RkYzQiwgMHgxRURGLA0KLSAgICAweEZGM0QsIDB4MUVFMCwgMHhGRjNGLCAweDFFRDIsIDB4RkY1QiwgMHgxRUUxLCAweEZGNUMsIDB4MUVEOCwNCi0gICAgMHhGRjVELCAweDFFRTIsIDB4RkY1RSwgMHgxRUQ2LCAweEZGNUYsIDB4MkY2RCwgMHhGRjYwLCAweDJGNkUsDQotICAgIDB4RkZFMywgMHgxRUQxLA0KLX07DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX1VuaUpJU19VVEYxNl9WXzVbMjg5ICogMl0gPSB7CisgICAgMHgwMEIwLCAweDIwNEQsIDB4MjAxMCwgMHgxRUQ1LCAweDIwMTUsIDB4MUVENCwgMHgyMDE2LCAweDFFRDcsCisgICAgMHgyMDI1LCAweDFFREEsIDB4MjAyNiwgMHgxRUQ5LCAweDIwMzIsIDB4MjA1MSwgMHgyMDMzLCAweDIwNUIsCisgICAgMHgyMTkwLCAweDAyRTIsIDB4MjE5MSwgMHgwMkUwLCAweDIxOTIsIDB4MDJFMywgMHgyMTkzLCAweDAyRTEsCisgICAgMHgyMUM0LCAweDIwNzcsIDB4MjFDNSwgMHgyMDc2LCAweDIxQzYsIDB4MjA3OCwgMHgyMUU2LCAweDFGNEMsCisgICAgMHgyMUU3LCAweDFGNEUsIDB4MjFFOCwgMHgxRjRCLCAweDIxRTksIDB4MUY0RCwgMHgyMzlCLCAweDJGNzQsCisgICAgMHgyMzlDLCAweDJGODgsIDB4MjM5RCwgMHgyRjczLCAweDIzOUUsIDB4MkY3NiwgMHgyMzlGLCAweDJGODgsCisgICAgMHgyM0EwLCAweDJGNzUsIDB4MjNBMSwgMHgyRjdDLCAweDIzQTIsIDB4MkY4OCwgMHgyM0EzLCAweDJGN0IsCisgICAgMHgyM0E0LCAweDJGN0UsIDB4MjNBNSwgMHgyRjg4LCAweDIzQTYsIDB4MkY3RCwgMHgyM0E3LCAweDFGRTgsCisgICAgMHgyM0E4LCAweDFGRTcsIDB4MjNBOSwgMHgxRkU2LCAweDIzQUEsIDB4MkY4OCwgMHgyM0FCLCAweDFGRUMsCisgICAgMHgyM0FDLCAweDFGRUIsIDB4MjNBRCwgMHgxRkVBLCAweDIzQjAsIDB4M0ZERSwgMHgyM0IxLCAweDNGREYsCisgICAgMHgyNTAwLCAweDFEMzksIDB4MjUwMSwgMHgxRDNBLCAweDI1MDIsIDB4MUQzNywgMHgyNTAzLCAweDFEMzgsCisgICAgMHgyNTA0LCAweDFEM0QsIDB4MjUwNSwgMHgxRDNFLCAweDI1MDYsIDB4MUQzQiwgMHgyNTA3LCAweDFEM0MsCisgICAgMHgyNTA4LCAweDFENDEsIDB4MjUwOSwgMHgxRDQyLCAweDI1MEEsIDB4MUQzRiwgMHgyNTBCLCAweDFENDAsCisgICAgMHgyNTBDLCAweDFENDcsIDB4MjUwRCwgMHgxRDQ5LCAweDI1MEUsIDB4MUQ0OCwgMHgyNTBGLCAweDFENEEsCisgICAgMHgyNTEwLCAweDFENEYsIDB4MjUxMSwgMHgxRDUxLCAweDI1MTIsIDB4MUQ1MCwgMHgyNTEzLCAweDFENTIsCisgICAgMHgyNTE0LCAweDFENDMsIDB4MjUxNSwgMHgxRDQ1LCAweDI1MTYsIDB4MUQ0NCwgMHgyNTE3LCAweDFENDYsCisgICAgMHgyNTE4LCAweDFENEIsIDB4MjUxOSwgMHgxRDRELCAweDI1MUEsIDB4MUQ0QywgMHgyNTFCLCAweDFENEUsCisgICAgMHgyNTFDLCAweDFENjMsIDB4MjUxRCwgMHgxRDY3LCAweDI1MUUsIDB4MUQ2NSwgMHgyNTFGLCAweDFENjQsCisgICAgMHgyNTIwLCAweDFENjYsIDB4MjUyMSwgMHgxRDY5LCAweDI1MjIsIDB4MUQ2OCwgMHgyNTIzLCAweDFENkEsCisgICAgMHgyNTI0LCAweDFENkIsIDB4MjUyNSwgMHgxRDZGLCAweDI1MjYsIDB4MUQ2RCwgMHgyNTI3LCAweDFENkMsCisgICAgMHgyNTI4LCAweDFENkUsIDB4MjUyOSwgMHgxRDcxLCAweDI1MkEsIDB4MUQ3MCwgMHgyNTJCLCAweDFENzIsCisgICAgMHgyNTJDLCAweDFENUIsIDB4MjUyRCwgMHgxRDVELCAweDI1MkUsIDB4MUQ1RSwgMHgyNTJGLCAweDFENUYsCisgICAgMHgyNTMwLCAweDFENUMsIDB4MjUzMSwgMHgxRDYwLCAweDI1MzIsIDB4MUQ2MSwgMHgyNTMzLCAweDFENjIsCisgICAgMHgyNTM0LCAweDFENTMsIDB4MjUzNSwgMHgxRDU1LCAweDI1MzYsIDB4MUQ1NiwgMHgyNTM3LCAweDFENTcsCisgICAgMHgyNTM4LCAweDFENTQsIDB4MjUzOSwgMHgxRDU4LCAweDI1M0EsIDB4MUQ1OSwgMHgyNTNCLCAweDFENUEsCisgICAgMHgyNTNELCAweDFENzcsIDB4MjUzRSwgMHgxRDc4LCAweDI1M0YsIDB4MUQ3OSwgMHgyNTQwLCAweDFENzUsCisgICAgMHgyNTQxLCAweDFENzQsIDB4MjU0MiwgMHgxRDc2LCAweDI1NDMsIDB4MUQ3QiwgMHgyNTQ0LCAweDFEN0QsCisgICAgMHgyNTQ1LCAweDFEN0EsIDB4MjU0NiwgMHgxRDdDLCAweDI1NDcsIDB4MUQ4MSwgMHgyNTQ4LCAweDFEODAsCisgICAgMHgyNTQ5LCAweDFEN0UsIDB4MjU0QSwgMHgxRDdGLCAweDI2MUMsIDB4MjAxRCwgMHgyNjFELCAweDIwMUIsCisgICAgMHgyNjFFLCAweDIwMUUsIDB4MjYxRiwgMHgyMDFDLCAweDI3MDIsIDB4MkY5MiwgMHgyN0ExLCAweDIwMTEsCisgICAgMHgzMDAxLCAweDFFQ0YsIDB4MzAwMiwgMHgxRUQwLCAweDMwMDgsIDB4MUVFMywgMHgzMDA5LCAweDFFRTQsCisgICAgMHgzMDBBLCAweDFFRTUsIDB4MzAwQiwgMHgxRUU2LCAweDMwMEMsIDB4MUVFNywgMHgzMDBELCAweDFFRTgsCisgICAgMHgzMDBFLCAweDFFRTksIDB4MzAwRiwgMHgxRUVBLCAweDMwMTAsIDB4MUVFQiwgMHgzMDExLCAweDFFRUMsCisgICAgMHgzMDE0LCAweDFFREQsIDB4MzAxNSwgMHgxRURFLCAweDMwMTYsIDB4M0ZDOSwgMHgzMDE3LCAweDNGQ0EsCisgICAgMHgzMDE4LCAweDJGNkIsIDB4MzAxOSwgMHgyRjZDLCAweDMwMUMsIDB4MUVENiwgMHgzMDFELCAweDFGMTQsCisgICAgMHgzMDFGLCAweDFGMTUsIDB4MzAzQiwgMHgyRjRCLCAweDMwNDEsIDB4MUVFRSwgMHgzMDQzLCAweDFFRUYsCisgICAgMHgzMDQ1LCAweDFFRjAsIDB4MzA0NywgMHgxRUYxLCAweDMwNDksIDB4MUVGMiwgMHgzMDYzLCAweDFFRjMsCisgICAgMHgzMDgzLCAweDFFRjQsIDB4MzA4NSwgMHgxRUY1LCAweDMwODcsIDB4MUVGNiwgMHgzMDhFLCAweDFFRjcsCisgICAgMHgzMDk1LCAweDIwNDgsIDB4MzA5NiwgMHgyMDQ5LCAweDMwOUIsIDB4MjA1MCwgMHgzMDlDLCAweDIwNEYsCisgICAgMHgzMEEwLCAweDNGQ0IsIDB4MzBBMSwgMHgxRUY4LCAweDMwQTMsIDB4MUVGOSwgMHgzMEE1LCAweDFFRkEsCisgICAgMHgzMEE3LCAweDFFRkIsIDB4MzBBOSwgMHgxRUZDLCAweDMwQzMsIDB4MUVGRCwgMHgzMEUzLCAweDFFRkUsCisgICAgMHgzMEU1LCAweDFFRkYsIDB4MzBFNywgMHgxRjAwLCAweDMwRUUsIDB4MUYwMSwgMHgzMEY1LCAweDFGMDIsCisgICAgMHgzMEY2LCAweDFGMDMsIDB4MzBGQywgMHgxRUQzLCAweDMxRjAsIDB4M0ZDRCwgMHgzMUYxLCAweDNGQ0UsCisgICAgMHgzMUYyLCAweDNGQ0YsIDB4MzFGMywgMHgzRkQwLCAweDMxRjQsIDB4M0ZEMSwgMHgzMUY1LCAweDNGRDIsCisgICAgMHgzMUY2LCAweDNGRDMsIDB4MzFGNywgMHgzRkQ0LCAweDMxRjgsIDB4M0ZENSwgMHgzMUY5LCAweDNGRDYsCisgICAgMHgzMUZBLCAweDNGRDgsIDB4MzFGQiwgMHgzRkQ5LCAweDMxRkMsIDB4M0ZEQSwgMHgzMUZELCAweDNGREIsCisgICAgMHgzMUZFLCAweDNGREMsIDB4MzFGRiwgMHgzRkRELCAweDMzMDAsIDB4MjA5RSwgMHgzMzAxLCAweDJFQjYsCisgICAgMHgzMzAyLCAweDJFQjcsIDB4MzMwMywgMHgyMDkyLCAweDMzMDQsIDB4MkVCOCwgMHgzMzA1LCAweDIwOEQsCisgICAgMHgzMzA2LCAweDJFQjksIDB4MzMwNywgMHgyRUJELCAweDMzMDgsIDB4MkVCQiwgMHgzMzA5LCAweDJFQzAsCisgICAgMHgzMzBBLCAweDJFQkUsIDB4MzMwQiwgMHgyRUMyLCAweDMzMEMsIDB4MkVDNCwgMHgzMzBELCAweDFGMEUsCisgICAgMHgzMzBFLCAweDJFQzUsIDB4MzMwRiwgMHgyRUM2LCAweDMzMTAsIDB4MkVDNywgMHgzMzExLCAweDJFQzgsCisgICAgMHgzMzEyLCAweDJFQzksIDB4MzMxMywgMHgyRUNBLCAweDMzMTQsIDB4MUYwNSwgMHgzMzE1LCAweDIwOTQsCisgICAgMHgzMzE2LCAweDIwOEEsIDB4MzMxNywgMHgyRUNDLCAweDMzMTgsIDB4MjA5MywgMHgzMzE5LCAweDJFQ0UsCisgICAgMHgzMzFBLCAweDJFRDAsIDB4MzMxQiwgMHgyRUQxLCAweDMzMUMsIDB4MkVEMiwgMHgzMzFELCAweDJFRDMsCisgICAgMHgzMzFFLCAweDIwQTEsIDB4MzMxRiwgMHgyRUQ0LCAweDMzMjAsIDB4MkVENSwgMHgzMzIxLCAweDJFRDYsCisgICAgMHgzMzIyLCAweDIwODksIDB4MzMyMywgMHgyMDlDLCAweDMzMjQsIDB4MkVENywgMHgzMzI1LCAweDJFRDksCisgICAgMHgzMzI2LCAweDFGMEYsIDB4MzMyNywgMHgxRjA5LCAweDMzMjgsIDB4MkVEQywgMHgzMzI5LCAweDJFREQsCisgICAgMHgzMzJBLCAweDIwQTQsIDB4MzMyQiwgMHgxRjExLCAweDMzMkQsIDB4MkVERiwgMHgzMzJFLCAweDJFRTIsCisgICAgMHgzMzJGLCAweDJFRTMsIDB4MzMzMCwgMHgyRUU0LCAweDMzMzEsIDB4MjBBNiwgMHgzMzMyLCAweDJFRTUsCisgICAgMHgzMzMzLCAweDIwOEUsIDB4MzMzNCwgMHgyRUU4LCAweDMzMzUsIDB4MkVFOSwgMHgzMzM2LCAweDFGMEIsCisgICAgMHgzMzM3LCAweDJFRUUsIDB4MzMzOCwgMHgyRUYwLCAweDMzMzksIDB4MjA5NywgMHgzMzNBLCAweDJFRjEsCisgICAgMHgzMzNCLCAweDIwOUQsIDB4MzMzQywgMHgyRUVBLCAweDMzM0QsIDB4MkVGMiwgMHgzMzNFLCAweDJFRjQsCisgICAgMHgzMzNGLCAweDJFRjUsIDB4MzM0MCwgMHgyRUY2LCAweDMzNDEsIDB4MkVGMywgMHgzMzQyLCAweDIwOUIsCisgICAgMHgzMzQzLCAweDJFRjcsIDB4MzM0NCwgMHgyRUY4LCAweDMzNDUsIDB4MkVGOSwgMHgzMzQ2LCAweDJFRkEsCisgICAgMHgzMzQ3LCAweDIwQTUsIDB4MzM0OCwgMHgyRUZCLCAweDMzNDksIDB4MUYwNCwgMHgzMzRBLCAweDFGMTIsCisgICAgMHgzMzRCLCAweDJFRkMsIDB4MzM0QywgMHgyRUZELCAweDMzNEQsIDB4MUYwNywgMHgzMzRFLCAweDIwOTEsCisgICAgMHgzMzRGLCAweDJFRkUsIDB4MzM1MCwgMHgyRUZGLCAweDMzNTEsIDB4MUYwQywgMHgzMzUyLCAweDJGMDIsCisgICAgMHgzMzUzLCAweDJGMDYsIDB4MzM1NCwgMHgyRjAzLCAweDMzNTUsIDB4MkYwNywgMHgzMzU2LCAweDJGMDgsCisgICAgMHgzMzU3LCAweDIwOTgsIDB4MzM3RiwgMHgyMDg0LCAweEZGMDgsIDB4MUVEQiwgMHhGRjA5LCAweDFFREMsCisgICAgMHhGRjBDLCAweDIwNEMsIDB4RkYwRSwgMHgyMDUyLCAweEZGMUQsIDB4MUVFRCwgMHhGRjNCLCAweDFFREYsCisgICAgMHhGRjNELCAweDFFRTAsIDB4RkYzRiwgMHgxRUQyLCAweEZGNUIsIDB4MUVFMSwgMHhGRjVDLCAweDFFRDgsCisgICAgMHhGRjVELCAweDFFRTIsIDB4RkY1RSwgMHgxRUQ2LCAweEZGNUYsIDB4MkY2RCwgMHhGRjYwLCAweDJGNkUsCisgICAgMHhGRkUzLCAweDFFRDEsCit9OwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0tvcmVhMS9BZG9iZS1Lb3JlYTEtVUNTMl8yLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9Lb3JlYTEvQWRvYmUtS29yZWExLVVDUzJfMi5jcHAKaW5kZXggZjVmN2E5OS4uODM3YjNlYSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0tvcmVhMS9BZG9iZS1Lb3JlYTEtVUNTMl8yLmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvS29yZWExL0Fkb2JlLUtvcmVhMS1VQ1MyXzIuY3BwCkBAIC0xLDIzMDIgKzEsMjMwMiBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0tvcmVhMUNJRDJVbmljb2RlXzJbMTgzNTJdID0gew0KLSAgICAweEZGRkQsIDB4MDAyMCwgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwNCi0gICAgMHgwMDI3LCAweDAwMjgsIDB4MDAyOSwgMHgwMDJBLCAweDAwMkIsIDB4MDAyQywgMHgwMDJELCAweDAwMkUsDQotICAgIDB4MDAyRiwgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LA0KLSAgICAweDAwMzcsIDB4MDAzOCwgMHgwMDM5LCAweDAwM0EsIDB4MDAzQiwgMHgwMDNDLCAweDAwM0QsIDB4MDAzRSwNCi0gICAgMHgwMDNGLCAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsDQotICAgIDB4MDA0NywgMHgwMDQ4LCAweDAwNDksIDB4MDA0QSwgMHgwMDRCLCAweDAwNEMsIDB4MDA0RCwgMHgwMDRFLA0KLSAgICAweDAwNEYsIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwNCi0gICAgMHgwMDU3LCAweDAwNTgsIDB4MDA1OSwgMHgwMDVBLCAweDAwNUIsIDB4MDA1QywgMHgwMDVELCAweDAwNUUsDQotICAgIDB4MDA1RiwgMHgwMDYwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LA0KLSAgICAweDAwNjcsIDB4MDA2OCwgMHgwMDY5LCAweDAwNkEsIDB4MDA2QiwgMHgwMDZDLCAweDAwNkQsIDB4MDA2RSwNCi0gICAgMHgwMDZGLCAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsDQotICAgIDB4MDA3NywgMHgwMDc4LCAweDAwNzksIDB4MDA3QSwgMHgwMDdCLCAweDAwN0MsIDB4MDA3RCwgMHgwMDdFLA0KLSAgICAweDIwQTksIDB4MjAxMCwgMHgwMEE5LCAweDIxMjIsIDB4MjJFRiwgMHgzMDAwLCAweDMwMDEsIDB4MzAwMiwNCi0gICAgMHgwMEI3LCAweDIwMjUsIDB4MjAyNiwgMHgwMEE4LCAweDMwMDMsIDB4MjAxMywgMHgyMDE0LCAweDIwMTYsDQotICAgIDB4RkYzQywgMHgyMjNDLCAweDIwMTgsIDB4MjAxOSwgMHgyMDFDLCAweDIwMUQsIDB4MzAxNCwgMHgzMDE1LA0KLSAgICAweDMwMDgsIDB4MzAwOSwgMHgzMDBBLCAweDMwMEIsIDB4MzAwQywgMHgzMDBELCAweDMwMEUsIDB4MzAwRiwNCi0gICAgMHgzMDEwLCAweDMwMTEsIDB4MDBCMSwgMHgwMEQ3LCAweDAwRjcsIDB4MjI2MCwgMHgyMjY0LCAweDIyNjUsDQotICAgIDB4MjIxRSwgMHgyMjM0LCAweDAwQjAsIDB4MjAzMiwgMHgyMDMzLCAweDIxMDMsIDB4MjEyQiwgMHhGRkUwLA0KLSAgICAweEZGRTEsIDB4RkZFNSwgMHgyNjQyLCAweDI2NDAsIDB4MjIyMCwgMHgyMkE1LCAweDIzMTIsIDB4MjIwMiwNCi0gICAgMHgyMjA3LCAweDIyNjEsIDB4MjI1MiwgMHgwMEE3LCAweDIwM0IsIDB4MjYwNiwgMHgyNjA1LCAweDI1Q0IsDQotICAgIDB4MjVDRiwgMHgyNUNFLCAweDI1QzcsIDB4MjVDNiwgMHgyNUExLCAweDI1QTAsIDB4MjVCMywgMHgyNUIyLA0KLSAgICAweDI1QkQsIDB4MjVCQywgMHgyMTkyLCAweDIxOTAsIDB4MjE5MSwgMHgyMTkzLCAweDIxOTQsIDB4MzAxMywNCi0gICAgMHgyMjZBLCAweDIyNkIsIDB4MjIxQSwgMHgyMjNELCAweDIyMUQsIDB4MjIzNSwgMHgyMjJCLCAweDIyMkMsDQotICAgIDB4MjIwOCwgMHgyMjBCLCAweDIyODYsIDB4MjI4NywgMHgyMjgyLCAweDIyODMsIDB4MjIyQSwgMHgyMjI5LA0KLSAgICAweDIyMjcsIDB4MjIyOCwgMHhGRkUyLCAweDIxRDIsIDB4MjFENCwgMHgyMjAwLCAweDIyMDMsIDB4MDBCNCwNCi0gICAgMHgwMkRDLCAweDAyQzcsIDB4MDJEOCwgMHgwMkRELCAweDAyREEsIDB4MDJEOSwgMHgwMEI4LCAweDAyREIsDQotICAgIDB4MDBBMSwgMHgwMEJGLCAweDIyMzYsIDB4MjIyRSwgMHgyMjExLCAweDIyMEYsIDB4MDBBNCwgMHgyMTA5LA0KLSAgICAweDIwMzAsIDB4MjVDMSwgMHgyNUMwLCAweDI1QjcsIDB4MjVCNiwgMHgyNjY0LCAweDI2NjAsIDB4MjY2MSwNCi0gICAgMHgyNjY1LCAweDI2NjcsIDB4MjY2MywgMHgyMjk5LCAweDI1QzgsIDB4MjVBMywgMHgyNUQwLCAweDI1RDEsDQotICAgIDB4MjU5MiwgMHgyNUE0LCAweDI1QTUsIDB4MjVBOCwgMHgyNUE3LCAweDI1QTYsIDB4MjVBOSwgMHgyNjY4LA0KLSAgICAweDI2MEYsIDB4MjYwRSwgMHgyNjFDLCAweDI2MUUsIDB4MDBCNiwgMHgyMDIwLCAweDIwMjEsIDB4MjE5NSwNCi0gICAgMHgyMTk3LCAweDIxOTksIDB4MjE5NiwgMHgyMTk4LCAweDI2NkQsIDB4MjY2OSwgMHgyNjZBLCAweDI2NkMsDQotICAgIDB4MzI3RiwgMHgzMjFDLCAweDIxMTYsIDB4MzNDNywgMHgyMTIyLCAweDMzQzIsIDB4MzNEOCwgMHgyMTIxLA0KLSAgICAweEZGMDEsIDB4RkYwMiwgMHhGRjAzLCAweEZGMDQsIDB4RkYwNSwgMHhGRjA2LCAweEZGMDcsIDB4RkYwOCwNCi0gICAgMHhGRjA5LCAweEZGMEEsIDB4RkYwQiwgMHhGRjBDLCAweEZGMEQsIDB4RkYwRSwgMHhGRjBGLCAweEZGMTAsDQotICAgIDB4RkYxMSwgMHhGRjEyLCAweEZGMTMsIDB4RkYxNCwgMHhGRjE1LCAweEZGMTYsIDB4RkYxNywgMHhGRjE4LA0KLSAgICAweEZGMTksIDB4RkYxQSwgMHhGRjFCLCAweEZGMUMsIDB4RkYxRCwgMHhGRjFFLCAweEZGMUYsIDB4RkYyMCwNCi0gICAgMHhGRjIxLCAweEZGMjIsIDB4RkYyMywgMHhGRjI0LCAweEZGMjUsIDB4RkYyNiwgMHhGRjI3LCAweEZGMjgsDQotICAgIDB4RkYyOSwgMHhGRjJBLCAweEZGMkIsIDB4RkYyQywgMHhGRjJELCAweEZGMkUsIDB4RkYyRiwgMHhGRjMwLA0KLSAgICAweEZGMzEsIDB4RkYzMiwgMHhGRjMzLCAweEZGMzQsIDB4RkYzNSwgMHhGRjM2LCAweEZGMzcsIDB4RkYzOCwNCi0gICAgMHhGRjM5LCAweEZGM0EsIDB4RkYzQiwgMHhGRkU2LCAweEZGM0QsIDB4RkYzRSwgMHhGRjNGLCAweEZGNDAsDQotICAgIDB4RkY0MSwgMHhGRjQyLCAweEZGNDMsIDB4RkY0NCwgMHhGRjQ1LCAweEZGNDYsIDB4RkY0NywgMHhGRjQ4LA0KLSAgICAweEZGNDksIDB4RkY0QSwgMHhGRjRCLCAweEZGNEMsIDB4RkY0RCwgMHhGRjRFLCAweEZGNEYsIDB4RkY1MCwNCi0gICAgMHhGRjUxLCAweEZGNTIsIDB4RkY1MywgMHhGRjU0LCAweEZGNTUsIDB4RkY1NiwgMHhGRjU3LCAweEZGNTgsDQotICAgIDB4RkY1OSwgMHhGRjVBLCAweEZGNUIsIDB4RkY1QywgMHhGRjVELCAweEZGRTMsIDB4MzEzMSwgMHgzMTMyLA0KLSAgICAweDMxMzMsIDB4MzEzNCwgMHgzMTM1LCAweDMxMzYsIDB4MzEzNywgMHgzMTM4LCAweDMxMzksIDB4MzEzQSwNCi0gICAgMHgzMTNCLCAweDMxM0MsIDB4MzEzRCwgMHgzMTNFLCAweDMxM0YsIDB4MzE0MCwgMHgzMTQxLCAweDMxNDIsDQotICAgIDB4MzE0MywgMHgzMTQ0LCAweDMxNDUsIDB4MzE0NiwgMHgzMTQ3LCAweDMxNDgsIDB4MzE0OSwgMHgzMTRBLA0KLSAgICAweDMxNEIsIDB4MzE0QywgMHgzMTRELCAweDMxNEUsIDB4MzE0RiwgMHgzMTUwLCAweDMxNTEsIDB4MzE1MiwNCi0gICAgMHgzMTUzLCAweDMxNTQsIDB4MzE1NSwgMHgzMTU2LCAweDMxNTcsIDB4MzE1OCwgMHgzMTU5LCAweDMxNUEsDQotICAgIDB4MzE1QiwgMHgzMTVDLCAweDMxNUQsIDB4MzE1RSwgMHgzMTVGLCAweDMxNjAsIDB4MzE2MSwgMHgzMTYyLA0KLSAgICAweDMxNjMsIDB4MzE2NSwgMHgzMTY2LCAweDMxNjcsIDB4MzE2OCwgMHgzMTY5LCAweDMxNkEsIDB4MzE2QiwNCi0gICAgMHgzMTZDLCAweDMxNkQsIDB4MzE2RSwgMHgzMTZGLCAweDMxNzAsIDB4MzE3MSwgMHgzMTcyLCAweDMxNzMsDQotICAgIDB4MzE3NCwgMHgzMTc1LCAweDMxNzYsIDB4MzE3NywgMHgzMTc4LCAweDMxNzksIDB4MzE3QSwgMHgzMTdCLA0KLSAgICAweDMxN0MsIDB4MzE3RCwgMHgzMTdFLCAweDMxN0YsIDB4MzE4MCwgMHgzMTgxLCAweDMxODIsIDB4MzE4MywNCi0gICAgMHgzMTg0LCAweDMxODUsIDB4MzE4NiwgMHgzMTg3LCAweDMxODgsIDB4MzE4OSwgMHgzMThBLCAweDMxOEIsDQotICAgIDB4MzE4QywgMHgzMThELCAweDMxOEUsIDB4MjE3MCwgMHgyMTcxLCAweDIxNzIsIDB4MjE3MywgMHgyMTc0LA0KLSAgICAweDIxNzUsIDB4MjE3NiwgMHgyMTc3LCAweDIxNzgsIDB4MjE3OSwgMHgyMTYwLCAweDIxNjEsIDB4MjE2MiwNCi0gICAgMHgyMTYzLCAweDIxNjQsIDB4MjE2NSwgMHgyMTY2LCAweDIxNjcsIDB4MjE2OCwgMHgyMTY5LCAweDAzOTEsDQotICAgIDB4MDM5MiwgMHgwMzkzLCAweDAzOTQsIDB4MDM5NSwgMHgwMzk2LCAweDAzOTcsIDB4MDM5OCwgMHgwMzk5LA0KLSAgICAweDAzOUEsIDB4MDM5QiwgMHgwMzlDLCAweDAzOUQsIDB4MDM5RSwgMHgwMzlGLCAweDAzQTAsIDB4MDNBMSwNCi0gICAgMHgwM0EzLCAweDAzQTQsIDB4MDNBNSwgMHgwM0E2LCAweDAzQTcsIDB4MDNBOCwgMHgwM0E5LCAweDAzQjEsDQotICAgIDB4MDNCMiwgMHgwM0IzLCAweDAzQjQsIDB4MDNCNSwgMHgwM0I2LCAweDAzQjcsIDB4MDNCOCwgMHgwM0I5LA0KLSAgICAweDAzQkEsIDB4MDNCQiwgMHgwM0JDLCAweDAzQkQsIDB4MDNCRSwgMHgwM0JGLCAweDAzQzAsIDB4MDNDMSwNCi0gICAgMHgwM0MzLCAweDAzQzQsIDB4MDNDNSwgMHgwM0M2LCAweDAzQzcsIDB4MDNDOCwgMHgwM0M5LCAweDI1MDAsDQotICAgIDB4MjUwMiwgMHgyNTBDLCAweDI1MTAsIDB4MjUxOCwgMHgyNTE0LCAweDI1MUMsIDB4MjUyQywgMHgyNTI0LA0KLSAgICAweDI1MzQsIDB4MjUzQywgMHgyNTAxLCAweDI1MDMsIDB4MjUwRiwgMHgyNTEzLCAweDI1MUIsIDB4MjUxNywNCi0gICAgMHgyNTIzLCAweDI1MzMsIDB4MjUyQiwgMHgyNTNCLCAweDI1NEIsIDB4MjUyMCwgMHgyNTJGLCAweDI1MjgsDQotICAgIDB4MjUzNywgMHgyNTNGLCAweDI1MUQsIDB4MjUzMCwgMHgyNTI1LCAweDI1MzgsIDB4MjU0MiwgMHgyNTEyLA0KLSAgICAweDI1MTEsIDB4MjUxQSwgMHgyNTE5LCAweDI1MTYsIDB4MjUxNSwgMHgyNTBFLCAweDI1MEQsIDB4MjUxRSwNCi0gICAgMHgyNTFGLCAweDI1MjEsIDB4MjUyMiwgMHgyNTI2LCAweDI1MjcsIDB4MjUyOSwgMHgyNTJBLCAweDI1MkQsDQotICAgIDB4MjUyRSwgMHgyNTMxLCAweDI1MzIsIDB4MjUzNSwgMHgyNTM2LCAweDI1MzksIDB4MjUzQSwgMHgyNTNELA0KLSAgICAweDI1M0UsIDB4MjU0MCwgMHgyNTQxLCAweDI1NDMsIDB4MjU0NCwgMHgyNTQ1LCAweDI1NDYsIDB4MjU0NywNCi0gICAgMHgyNTQ4LCAweDI1NDksIDB4MjU0QSwgMHgzMzk1LCAweDMzOTYsIDB4MzM5NywgMHgyMTEzLCAweDMzOTgsDQotICAgIDB4MzNDNCwgMHgzM0EzLCAweDMzQTQsIDB4MzNBNSwgMHgzM0E2LCAweDMzOTksIDB4MzM5QSwgMHgzMzlCLA0KLSAgICAweDMzOUMsIDB4MzM5RCwgMHgzMzlFLCAweDMzOUYsIDB4MzNBMCwgMHgzM0ExLCAweDMzQTIsIDB4MzNDQSwNCi0gICAgMHgzMzhELCAweDMzOEUsIDB4MzM4RiwgMHgzM0NGLCAweDMzODgsIDB4MzM4OSwgMHgzM0M4LCAweDMzQTcsDQotICAgIDB4MzNBOCwgMHgzM0IwLCAweDMzQjEsIDB4MzNCMiwgMHgzM0IzLCAweDMzQjQsIDB4MzNCNSwgMHgzM0I2LA0KLSAgICAweDMzQjcsIDB4MzNCOCwgMHgzM0I5LCAweDMzODAsIDB4MzM4MSwgMHgzMzgyLCAweDMzODMsIDB4MzM4NCwNCi0gICAgMHgzM0JBLCAweDMzQkIsIDB4MzNCQywgMHgzM0JELCAweDMzQkUsIDB4MzNCRiwgMHgzMzkwLCAweDMzOTEsDQotICAgIDB4MzM5MiwgMHgzMzkzLCAweDMzOTQsIDB4MjEyNiwgMHgzM0MwLCAweDMzQzEsIDB4MzM4QSwgMHgzMzhCLA0KLSAgICAweDMzOEMsIDB4MzNENiwgMHgzM0M1LCAweDMzQUQsIDB4MzNBRSwgMHgzM0FGLCAweDMzREIsIDB4MzNBOSwNCi0gICAgMHgzM0FBLCAweDMzQUIsIDB4MzNBQywgMHgzM0RELCAweDMzRDAsIDB4MzNEMywgMHgzM0MzLCAweDMzQzksDQotICAgIDB4MzNEQywgMHgzM0M2LCAweDAwQzYsIDB4MDBEMCwgMHgwMEFBLCAweDAxMjYsIDB4MDEzMiwgMHgwMTNGLA0KLSAgICAweDAxNDEsIDB4MDBEOCwgMHgwMTUyLCAweDAwQkEsIDB4MDBERSwgMHgwMTY2LCAweDAxNEEsIDB4MzI2MCwNCi0gICAgMHgzMjYxLCAweDMyNjIsIDB4MzI2MywgMHgzMjY0LCAweDMyNjUsIDB4MzI2NiwgMHgzMjY3LCAweDMyNjgsDQotICAgIDB4MzI2OSwgMHgzMjZBLCAweDMyNkIsIDB4MzI2QywgMHgzMjZELCAweDMyNkUsIDB4MzI2RiwgMHgzMjcwLA0KLSAgICAweDMyNzEsIDB4MzI3MiwgMHgzMjczLCAweDMyNzQsIDB4MzI3NSwgMHgzMjc2LCAweDMyNzcsIDB4MzI3OCwNCi0gICAgMHgzMjc5LCAweDMyN0EsIDB4MzI3QiwgMHgyNEQwLCAweDI0RDEsIDB4MjREMiwgMHgyNEQzLCAweDI0RDQsDQotICAgIDB4MjRENSwgMHgyNEQ2LCAweDI0RDcsIDB4MjREOCwgMHgyNEQ5LCAweDI0REEsIDB4MjREQiwgMHgyNERDLA0KLSAgICAweDI0REQsIDB4MjRERSwgMHgyNERGLCAweDI0RTAsIDB4MjRFMSwgMHgyNEUyLCAweDI0RTMsIDB4MjRFNCwNCi0gICAgMHgyNEU1LCAweDI0RTYsIDB4MjRFNywgMHgyNEU4LCAweDI0RTksIDB4MjQ2MCwgMHgyNDYxLCAweDI0NjIsDQotICAgIDB4MjQ2MywgMHgyNDY0LCAweDI0NjUsIDB4MjQ2NiwgMHgyNDY3LCAweDI0NjgsIDB4MjQ2OSwgMHgyNDZBLA0KLSAgICAweDI0NkIsIDB4MjQ2QywgMHgyNDZELCAweDI0NkUsIDB4MDBCRCwgMHgyMTUzLCAweDIxNTQsIDB4MDBCQywNCi0gICAgMHgwMEJFLCAweDIxNUIsIDB4MjE1QywgMHgyMTVELCAweDIxNUUsIDB4MDBFNiwgMHgwMTExLCAweDAwRjAsDQotICAgIDB4MDEyNywgMHgwMTMxLCAweDAxMzMsIDB4MDEzOCwgMHgwMTQwLCAweDAxNDIsIDB4MDBGOCwgMHgwMTUzLA0KLSAgICAweDAwREYsIDB4MDBGRSwgMHgwMTY3LCAweDAxNEIsIDB4MDE0OSwgMHgzMjAwLCAweDMyMDEsIDB4MzIwMiwNCi0gICAgMHgzMjAzLCAweDMyMDQsIDB4MzIwNSwgMHgzMjA2LCAweDMyMDcsIDB4MzIwOCwgMHgzMjA5LCAweDMyMEEsDQotICAgIDB4MzIwQiwgMHgzMjBDLCAweDMyMEQsIDB4MzIwRSwgMHgzMjBGLCAweDMyMTAsIDB4MzIxMSwgMHgzMjEyLA0KLSAgICAweDMyMTMsIDB4MzIxNCwgMHgzMjE1LCAweDMyMTYsIDB4MzIxNywgMHgzMjE4LCAweDMyMTksIDB4MzIxQSwNCi0gICAgMHgzMjFCLCAweDI0OUMsIDB4MjQ5RCwgMHgyNDlFLCAweDI0OUYsIDB4MjRBMCwgMHgyNEExLCAweDI0QTIsDQotICAgIDB4MjRBMywgMHgyNEE0LCAweDI0QTUsIDB4MjRBNiwgMHgyNEE3LCAweDI0QTgsIDB4MjRBOSwgMHgyNEFBLA0KLSAgICAweDI0QUIsIDB4MjRBQywgMHgyNEFELCAweDI0QUUsIDB4MjRBRiwgMHgyNEIwLCAweDI0QjEsIDB4MjRCMiwNCi0gICAgMHgyNEIzLCAweDI0QjQsIDB4MjRCNSwgMHgyNDc0LCAweDI0NzUsIDB4MjQ3NiwgMHgyNDc3LCAweDI0NzgsDQotICAgIDB4MjQ3OSwgMHgyNDdBLCAweDI0N0IsIDB4MjQ3QywgMHgyNDdELCAweDI0N0UsIDB4MjQ3RiwgMHgyNDgwLA0KLSAgICAweDI0ODEsIDB4MjQ4MiwgMHgwMEI5LCAweDAwQjIsIDB4MDBCMywgMHgyMDc0LCAweDIwN0YsIDB4MjA4MSwNCi0gICAgMHgyMDgyLCAweDIwODMsIDB4MjA4NCwgMHgzMDQxLCAweDMwNDIsIDB4MzA0MywgMHgzMDQ0LCAweDMwNDUsDQotICAgIDB4MzA0NiwgMHgzMDQ3LCAweDMwNDgsIDB4MzA0OSwgMHgzMDRBLCAweDMwNEIsIDB4MzA0QywgMHgzMDRELA0KLSAgICAweDMwNEUsIDB4MzA0RiwgMHgzMDUwLCAweDMwNTEsIDB4MzA1MiwgMHgzMDUzLCAweDMwNTQsIDB4MzA1NSwNCi0gICAgMHgzMDU2LCAweDMwNTcsIDB4MzA1OCwgMHgzMDU5LCAweDMwNUEsIDB4MzA1QiwgMHgzMDVDLCAweDMwNUQsDQotICAgIDB4MzA1RSwgMHgzMDVGLCAweDMwNjAsIDB4MzA2MSwgMHgzMDYyLCAweDMwNjMsIDB4MzA2NCwgMHgzMDY1LA0KLSAgICAweDMwNjYsIDB4MzA2NywgMHgzMDY4LCAweDMwNjksIDB4MzA2QSwgMHgzMDZCLCAweDMwNkMsIDB4MzA2RCwNCi0gICAgMHgzMDZFLCAweDMwNkYsIDB4MzA3MCwgMHgzMDcxLCAweDMwNzIsIDB4MzA3MywgMHgzMDc0LCAweDMwNzUsDQotICAgIDB4MzA3NiwgMHgzMDc3LCAweDMwNzgsIDB4MzA3OSwgMHgzMDdBLCAweDMwN0IsIDB4MzA3QywgMHgzMDdELA0KLSAgICAweDMwN0UsIDB4MzA3RiwgMHgzMDgwLCAweDMwODEsIDB4MzA4MiwgMHgzMDgzLCAweDMwODQsIDB4MzA4NSwNCi0gICAgMHgzMDg2LCAweDMwODcsIDB4MzA4OCwgMHgzMDg5LCAweDMwOEEsIDB4MzA4QiwgMHgzMDhDLCAweDMwOEQsDQotICAgIDB4MzA4RSwgMHgzMDhGLCAweDMwOTAsIDB4MzA5MSwgMHgzMDkyLCAweDMwOTMsIDB4MzBBMSwgMHgzMEEyLA0KLSAgICAweDMwQTMsIDB4MzBBNCwgMHgzMEE1LCAweDMwQTYsIDB4MzBBNywgMHgzMEE4LCAweDMwQTksIDB4MzBBQSwNCi0gICAgMHgzMEFCLCAweDMwQUMsIDB4MzBBRCwgMHgzMEFFLCAweDMwQUYsIDB4MzBCMCwgMHgzMEIxLCAweDMwQjIsDQotICAgIDB4MzBCMywgMHgzMEI0LCAweDMwQjUsIDB4MzBCNiwgMHgzMEI3LCAweDMwQjgsIDB4MzBCOSwgMHgzMEJBLA0KLSAgICAweDMwQkIsIDB4MzBCQywgMHgzMEJELCAweDMwQkUsIDB4MzBCRiwgMHgzMEMwLCAweDMwQzEsIDB4MzBDMiwNCi0gICAgMHgzMEMzLCAweDMwQzQsIDB4MzBDNSwgMHgzMEM2LCAweDMwQzcsIDB4MzBDOCwgMHgzMEM5LCAweDMwQ0EsDQotICAgIDB4MzBDQiwgMHgzMENDLCAweDMwQ0QsIDB4MzBDRSwgMHgzMENGLCAweDMwRDAsIDB4MzBEMSwgMHgzMEQyLA0KLSAgICAweDMwRDMsIDB4MzBENCwgMHgzMEQ1LCAweDMwRDYsIDB4MzBENywgMHgzMEQ4LCAweDMwRDksIDB4MzBEQSwNCi0gICAgMHgzMERCLCAweDMwREMsIDB4MzBERCwgMHgzMERFLCAweDMwREYsIDB4MzBFMCwgMHgzMEUxLCAweDMwRTIsDQotICAgIDB4MzBFMywgMHgzMEU0LCAweDMwRTUsIDB4MzBFNiwgMHgzMEU3LCAweDMwRTgsIDB4MzBFOSwgMHgzMEVBLA0KLSAgICAweDMwRUIsIDB4MzBFQywgMHgzMEVELCAweDMwRUUsIDB4MzBFRiwgMHgzMEYwLCAweDMwRjEsIDB4MzBGMiwNCi0gICAgMHgzMEYzLCAweDMwRjQsIDB4MzBGNSwgMHgzMEY2LCAweDA0MTAsIDB4MDQxMSwgMHgwNDEyLCAweDA0MTMsDQotICAgIDB4MDQxNCwgMHgwNDE1LCAweDA0MDEsIDB4MDQxNiwgMHgwNDE3LCAweDA0MTgsIDB4MDQxOSwgMHgwNDFBLA0KLSAgICAweDA0MUIsIDB4MDQxQywgMHgwNDFELCAweDA0MUUsIDB4MDQxRiwgMHgwNDIwLCAweDA0MjEsIDB4MDQyMiwNCi0gICAgMHgwNDIzLCAweDA0MjQsIDB4MDQyNSwgMHgwNDI2LCAweDA0MjcsIDB4MDQyOCwgMHgwNDI5LCAweDA0MkEsDQotICAgIDB4MDQyQiwgMHgwNDJDLCAweDA0MkQsIDB4MDQyRSwgMHgwNDJGLCAweDA0MzAsIDB4MDQzMSwgMHgwNDMyLA0KLSAgICAweDA0MzMsIDB4MDQzNCwgMHgwNDM1LCAweDA0NTEsIDB4MDQzNiwgMHgwNDM3LCAweDA0MzgsIDB4MDQzOSwNCi0gICAgMHgwNDNBLCAweDA0M0IsIDB4MDQzQywgMHgwNDNELCAweDA0M0UsIDB4MDQzRiwgMHgwNDQwLCAweDA0NDEsDQotICAgIDB4MDQ0MiwgMHgwNDQzLCAweDA0NDQsIDB4MDQ0NSwgMHgwNDQ2LCAweDA0NDcsIDB4MDQ0OCwgMHgwNDQ5LA0KLSAgICAweDA0NEEsIDB4MDQ0QiwgMHgwNDRDLCAweDA0NEQsIDB4MDQ0RSwgMHgwNDRGLCAweEFDMDAsIDB4QUMwMSwNCi0gICAgMHhBQzA0LCAweEFDMDcsIDB4QUMwOCwgMHhBQzA5LCAweEFDMEEsIDB4QUMxMCwgMHhBQzExLCAweEFDMTIsDQotICAgIDB4QUMxMywgMHhBQzE0LCAweEFDMTUsIDB4QUMxNiwgMHhBQzE3LCAweEFDMTksIDB4QUMxQSwgMHhBQzFCLA0KLSAgICAweEFDMUMsIDB4QUMxRCwgMHhBQzIwLCAweEFDMjQsIDB4QUMyQywgMHhBQzJELCAweEFDMkYsIDB4QUMzMCwNCi0gICAgMHhBQzMxLCAweEFDMzgsIDB4QUMzOSwgMHhBQzNDLCAweEFDNDAsIDB4QUM0QiwgMHhBQzRELCAweEFDNTQsDQotICAgIDB4QUM1OCwgMHhBQzVDLCAweEFDNzAsIDB4QUM3MSwgMHhBQzc0LCAweEFDNzcsIDB4QUM3OCwgMHhBQzdBLA0KLSAgICAweEFDODAsIDB4QUM4MSwgMHhBQzgzLCAweEFDODQsIDB4QUM4NSwgMHhBQzg2LCAweEFDODksIDB4QUM4QSwNCi0gICAgMHhBQzhCLCAweEFDOEMsIDB4QUM5MCwgMHhBQzk0LCAweEFDOUMsIDB4QUM5RCwgMHhBQzlGLCAweEFDQTAsDQotICAgIDB4QUNBMSwgMHhBQ0E4LCAweEFDQTksIDB4QUNBQSwgMHhBQ0FDLCAweEFDQUYsIDB4QUNCMCwgMHhBQ0I4LA0KLSAgICAweEFDQjksIDB4QUNCQiwgMHhBQ0JDLCAweEFDQkQsIDB4QUNDMSwgMHhBQ0M0LCAweEFDQzgsIDB4QUNDQywNCi0gICAgMHhBQ0Q1LCAweEFDRDcsIDB4QUNFMCwgMHhBQ0UxLCAweEFDRTQsIDB4QUNFNywgMHhBQ0U4LCAweEFDRUEsDQotICAgIDB4QUNFQywgMHhBQ0VGLCAweEFDRjAsIDB4QUNGMSwgMHhBQ0YzLCAweEFDRjUsIDB4QUNGNiwgMHhBQ0ZDLA0KLSAgICAweEFDRkQsIDB4QUQwMCwgMHhBRDA0LCAweEFEMDYsIDB4QUQwQywgMHhBRDBELCAweEFEMEYsIDB4QUQxMSwNCi0gICAgMHhBRDE4LCAweEFEMUMsIDB4QUQyMCwgMHhBRDI5LCAweEFEMkMsIDB4QUQyRCwgMHhBRDM0LCAweEFEMzUsDQotICAgIDB4QUQzOCwgMHhBRDNDLCAweEFENDQsIDB4QUQ0NSwgMHhBRDQ3LCAweEFENDksIDB4QUQ1MCwgMHhBRDU0LA0KLSAgICAweEFENTgsIDB4QUQ2MSwgMHhBRDYzLCAweEFENkMsIDB4QUQ2RCwgMHhBRDcwLCAweEFENzMsIDB4QUQ3NCwNCi0gICAgMHhBRDc1LCAweEFENzYsIDB4QUQ3QiwgMHhBRDdDLCAweEFEN0QsIDB4QUQ3RiwgMHhBRDgxLCAweEFEODIsDQotICAgIDB4QUQ4OCwgMHhBRDg5LCAweEFEOEMsIDB4QUQ5MCwgMHhBRDlDLCAweEFEOUQsIDB4QURBNCwgMHhBREI3LA0KLSAgICAweEFEQzAsIDB4QURDMSwgMHhBREM0LCAweEFEQzgsIDB4QUREMCwgMHhBREQxLCAweEFERDMsIDB4QUREQywNCi0gICAgMHhBREUwLCAweEFERTQsIDB4QURGOCwgMHhBREY5LCAweEFERkMsIDB4QURGRiwgMHhBRTAwLCAweEFFMDEsDQotICAgIDB4QUUwOCwgMHhBRTA5LCAweEFFMEIsIDB4QUUwRCwgMHhBRTE0LCAweEFFMzAsIDB4QUUzMSwgMHhBRTM0LA0KLSAgICAweEFFMzcsIDB4QUUzOCwgMHhBRTNBLCAweEFFNDAsIDB4QUU0MSwgMHhBRTQzLCAweEFFNDUsIDB4QUU0NiwNCi0gICAgMHhBRTRBLCAweEFFNEMsIDB4QUU0RCwgMHhBRTRFLCAweEFFNTAsIDB4QUU1NCwgMHhBRTU2LCAweEFFNUMsDQotICAgIDB4QUU1RCwgMHhBRTVGLCAweEFFNjAsIDB4QUU2MSwgMHhBRTY1LCAweEFFNjgsIDB4QUU2OSwgMHhBRTZDLA0KLSAgICAweEFFNzAsIDB4QUU3OCwgMHhBRTc5LCAweEFFN0IsIDB4QUU3QywgMHhBRTdELCAweEFFODQsIDB4QUU4NSwNCi0gICAgMHhBRThDLCAweEFFQkMsIDB4QUVCRCwgMHhBRUJFLCAweEFFQzAsIDB4QUVDNCwgMHhBRUNDLCAweEFFQ0QsDQotICAgIDB4QUVDRiwgMHhBRUQwLCAweEFFRDEsIDB4QUVEOCwgMHhBRUQ5LCAweEFFREMsIDB4QUVFOCwgMHhBRUVCLA0KLSAgICAweEFFRUQsIDB4QUVGNCwgMHhBRUY4LCAweEFFRkMsIDB4QUYwNywgMHhBRjA4LCAweEFGMEQsIDB4QUYxMCwNCi0gICAgMHhBRjJDLCAweEFGMkQsIDB4QUYzMCwgMHhBRjMyLCAweEFGMzQsIDB4QUYzQywgMHhBRjNELCAweEFGM0YsDQotICAgIDB4QUY0MSwgMHhBRjQyLCAweEFGNDMsIDB4QUY0OCwgMHhBRjQ5LCAweEFGNTAsIDB4QUY1QywgMHhBRjVELA0KLSAgICAweEFGNjQsIDB4QUY2NSwgMHhBRjc5LCAweEFGODAsIDB4QUY4NCwgMHhBRjg4LCAweEFGOTAsIDB4QUY5MSwNCi0gICAgMHhBRjk1LCAweEFGOUMsIDB4QUZCOCwgMHhBRkI5LCAweEFGQkMsIDB4QUZDMCwgMHhBRkM3LCAweEFGQzgsDQotICAgIDB4QUZDOSwgMHhBRkNCLCAweEFGQ0QsIDB4QUZDRSwgMHhBRkQ0LCAweEFGREMsIDB4QUZFOCwgMHhBRkU5LA0KLSAgICAweEFGRjAsIDB4QUZGMSwgMHhBRkY0LCAweEFGRjgsIDB4QjAwMCwgMHhCMDAxLCAweEIwMDQsIDB4QjAwQywNCi0gICAgMHhCMDEwLCAweEIwMTQsIDB4QjAxQywgMHhCMDFELCAweEIwMjgsIDB4QjA0NCwgMHhCMDQ1LCAweEIwNDgsDQotICAgIDB4QjA0QSwgMHhCMDRDLCAweEIwNEUsIDB4QjA1MywgMHhCMDU0LCAweEIwNTUsIDB4QjA1NywgMHhCMDU5LA0KLSAgICAweEIwNUQsIDB4QjA3QywgMHhCMDdELCAweEIwODAsIDB4QjA4NCwgMHhCMDhDLCAweEIwOEQsIDB4QjA4RiwNCi0gICAgMHhCMDkxLCAweEIwOTgsIDB4QjA5OSwgMHhCMDlBLCAweEIwOUMsIDB4QjA5RiwgMHhCMEEwLCAweEIwQTEsDQotICAgIDB4QjBBMiwgMHhCMEE4LCAweEIwQTksIDB4QjBBQiwgMHhCMEFDLCAweEIwQUQsIDB4QjBBRSwgMHhCMEFGLA0KLSAgICAweEIwQjEsIDB4QjBCMywgMHhCMEI0LCAweEIwQjUsIDB4QjBCOCwgMHhCMEJDLCAweEIwQzQsIDB4QjBDNSwNCi0gICAgMHhCMEM3LCAweEIwQzgsIDB4QjBDOSwgMHhCMEQwLCAweEIwRDEsIDB4QjBENCwgMHhCMEQ4LCAweEIwRTAsDQotICAgIDB4QjBFNSwgMHhCMTA4LCAweEIxMDksIDB4QjEwQiwgMHhCMTBDLCAweEIxMTAsIDB4QjExMiwgMHhCMTEzLA0KLSAgICAweEIxMTgsIDB4QjExOSwgMHhCMTFCLCAweEIxMUMsIDB4QjExRCwgMHhCMTIzLCAweEIxMjQsIDB4QjEyNSwNCi0gICAgMHhCMTI4LCAweEIxMkMsIDB4QjEzNCwgMHhCMTM1LCAweEIxMzcsIDB4QjEzOCwgMHhCMTM5LCAweEIxNDAsDQotICAgIDB4QjE0MSwgMHhCMTQ0LCAweEIxNDgsIDB4QjE1MCwgMHhCMTUxLCAweEIxNTQsIDB4QjE1NSwgMHhCMTU4LA0KLSAgICAweEIxNUMsIDB4QjE2MCwgMHhCMTc4LCAweEIxNzksIDB4QjE3QywgMHhCMTgwLCAweEIxODIsIDB4QjE4OCwNCi0gICAgMHhCMTg5LCAweEIxOEIsIDB4QjE4RCwgMHhCMTkyLCAweEIxOTMsIDB4QjE5NCwgMHhCMTk4LCAweEIxOUMsDQotICAgIDB4QjFBOCwgMHhCMUNDLCAweEIxRDAsIDB4QjFENCwgMHhCMURDLCAweEIxREQsIDB4QjFERiwgMHhCMUU4LA0KLSAgICAweEIxRTksIDB4QjFFQywgMHhCMUYwLCAweEIxRjksIDB4QjFGQiwgMHhCMUZELCAweEIyMDQsIDB4QjIwNSwNCi0gICAgMHhCMjA4LCAweEIyMEIsIDB4QjIwQywgMHhCMjE0LCAweEIyMTUsIDB4QjIxNywgMHhCMjE5LCAweEIyMjAsDQotICAgIDB4QjIzNCwgMHhCMjNDLCAweEIyNTgsIDB4QjI1QywgMHhCMjYwLCAweEIyNjgsIDB4QjI2OSwgMHhCMjc0LA0KLSAgICAweEIyNzUsIDB4QjI3QywgMHhCMjg0LCAweEIyODUsIDB4QjI4OSwgMHhCMjkwLCAweEIyOTEsIDB4QjI5NCwNCi0gICAgMHhCMjk4LCAweEIyOTksIDB4QjI5QSwgMHhCMkEwLCAweEIyQTEsIDB4QjJBMywgMHhCMkE1LCAweEIyQTYsDQotICAgIDB4QjJBQSwgMHhCMkFDLCAweEIyQjAsIDB4QjJCNCwgMHhCMkM4LCAweEIyQzksIDB4QjJDQywgMHhCMkQwLA0KLSAgICAweEIyRDIsIDB4QjJEOCwgMHhCMkQ5LCAweEIyREIsIDB4QjJERCwgMHhCMkUyLCAweEIyRTQsIDB4QjJFNSwNCi0gICAgMHhCMkU2LCAweEIyRTgsIDB4QjJFQiwgMHhCMkVDLCAweEIyRUQsIDB4QjJFRSwgMHhCMkVGLCAweEIyRjMsDQotICAgIDB4QjJGNCwgMHhCMkY1LCAweEIyRjcsIDB4QjJGOCwgMHhCMkY5LCAweEIyRkEsIDB4QjJGQiwgMHhCMkZGLA0KLSAgICAweEIzMDAsIDB4QjMwMSwgMHhCMzA0LCAweEIzMDgsIDB4QjMxMCwgMHhCMzExLCAweEIzMTMsIDB4QjMxNCwNCi0gICAgMHhCMzE1LCAweEIzMUMsIDB4QjM1NCwgMHhCMzU1LCAweEIzNTYsIDB4QjM1OCwgMHhCMzVCLCAweEIzNUMsDQotICAgIDB4QjM1RSwgMHhCMzVGLCAweEIzNjQsIDB4QjM2NSwgMHhCMzY3LCAweEIzNjksIDB4QjM2QiwgMHhCMzZFLA0KLSAgICAweEIzNzAsIDB4QjM3MSwgMHhCMzc0LCAweEIzNzgsIDB4QjM4MCwgMHhCMzgxLCAweEIzODMsIDB4QjM4NCwNCi0gICAgMHhCMzg1LCAweEIzOEMsIDB4QjM5MCwgMHhCMzk0LCAweEIzQTAsIDB4QjNBMSwgMHhCM0E4LCAweEIzQUMsDQotICAgIDB4QjNDNCwgMHhCM0M1LCAweEIzQzgsIDB4QjNDQiwgMHhCM0NDLCAweEIzQ0UsIDB4QjNEMCwgMHhCM0Q0LA0KLSAgICAweEIzRDUsIDB4QjNENywgMHhCM0Q5LCAweEIzREIsIDB4QjNERCwgMHhCM0UwLCAweEIzRTQsIDB4QjNFOCwNCi0gICAgMHhCM0ZDLCAweEI0MTAsIDB4QjQxOCwgMHhCNDFDLCAweEI0MjAsIDB4QjQyOCwgMHhCNDI5LCAweEI0MkIsDQotICAgIDB4QjQzNCwgMHhCNDUwLCAweEI0NTEsIDB4QjQ1NCwgMHhCNDU4LCAweEI0NjAsIDB4QjQ2MSwgMHhCNDYzLA0KLSAgICAweEI0NjUsIDB4QjQ2QywgMHhCNDgwLCAweEI0ODgsIDB4QjQ5RCwgMHhCNEE0LCAweEI0QTgsIDB4QjRBQywNCi0gICAgMHhCNEI1LCAweEI0QjcsIDB4QjRCOSwgMHhCNEMwLCAweEI0QzQsIDB4QjRDOCwgMHhCNEQwLCAweEI0RDUsDQotICAgIDB4QjREQywgMHhCNERELCAweEI0RTAsIDB4QjRFMywgMHhCNEU0LCAweEI0RTYsIDB4QjRFQywgMHhCNEVELA0KLSAgICAweEI0RUYsIDB4QjRGMSwgMHhCNEY4LCAweEI1MTQsIDB4QjUxNSwgMHhCNTE4LCAweEI1MUIsIDB4QjUxQywNCi0gICAgMHhCNTI0LCAweEI1MjUsIDB4QjUyNywgMHhCNTI4LCAweEI1MjksIDB4QjUyQSwgMHhCNTMwLCAweEI1MzEsDQotICAgIDB4QjUzNCwgMHhCNTM4LCAweEI1NDAsIDB4QjU0MSwgMHhCNTQzLCAweEI1NDQsIDB4QjU0NSwgMHhCNTRCLA0KLSAgICAweEI1NEMsIDB4QjU0RCwgMHhCNTUwLCAweEI1NTQsIDB4QjU1QywgMHhCNTVELCAweEI1NUYsIDB4QjU2MCwNCi0gICAgMHhCNTYxLCAweEI1QTAsIDB4QjVBMSwgMHhCNUE0LCAweEI1QTgsIDB4QjVBQSwgMHhCNUFCLCAweEI1QjAsDQotICAgIDB4QjVCMSwgMHhCNUIzLCAweEI1QjQsIDB4QjVCNSwgMHhCNUJCLCAweEI1QkMsIDB4QjVCRCwgMHhCNUMwLA0KLSAgICAweEI1QzQsIDB4QjVDQywgMHhCNUNELCAweEI1Q0YsIDB4QjVEMCwgMHhCNUQxLCAweEI1RDgsIDB4QjVFQywNCi0gICAgMHhCNjEwLCAweEI2MTEsIDB4QjYxNCwgMHhCNjE4LCAweEI2MjUsIDB4QjYyQywgMHhCNjM0LCAweEI2NDgsDQotICAgIDB4QjY2NCwgMHhCNjY4LCAweEI2OUMsIDB4QjY5RCwgMHhCNkEwLCAweEI2QTQsIDB4QjZBQiwgMHhCNkFDLA0KLSAgICAweEI2QjEsIDB4QjZENCwgMHhCNkYwLCAweEI2RjQsIDB4QjZGOCwgMHhCNzAwLCAweEI3MDEsIDB4QjcwNSwNCi0gICAgMHhCNzI4LCAweEI3MjksIDB4QjcyQywgMHhCNzJGLCAweEI3MzAsIDB4QjczOCwgMHhCNzM5LCAweEI3M0IsDQotICAgIDB4Qjc0NCwgMHhCNzQ4LCAweEI3NEMsIDB4Qjc1NCwgMHhCNzU1LCAweEI3NjAsIDB4Qjc2NCwgMHhCNzY4LA0KLSAgICAweEI3NzAsIDB4Qjc3MSwgMHhCNzczLCAweEI3NzUsIDB4Qjc3QywgMHhCNzdELCAweEI3ODAsIDB4Qjc4NCwNCi0gICAgMHhCNzhDLCAweEI3OEQsIDB4Qjc4RiwgMHhCNzkwLCAweEI3OTEsIDB4Qjc5MiwgMHhCNzk2LCAweEI3OTcsDQotICAgIDB4Qjc5OCwgMHhCNzk5LCAweEI3OUMsIDB4QjdBMCwgMHhCN0E4LCAweEI3QTksIDB4QjdBQiwgMHhCN0FDLA0KLSAgICAweEI3QUQsIDB4QjdCNCwgMHhCN0I1LCAweEI3QjgsIDB4QjdDNywgMHhCN0M5LCAweEI3RUMsIDB4QjdFRCwNCi0gICAgMHhCN0YwLCAweEI3RjQsIDB4QjdGQywgMHhCN0ZELCAweEI3RkYsIDB4QjgwMCwgMHhCODAxLCAweEI4MDcsDQotICAgIDB4QjgwOCwgMHhCODA5LCAweEI4MEMsIDB4QjgxMCwgMHhCODE4LCAweEI4MTksIDB4QjgxQiwgMHhCODFELA0KLSAgICAweEI4MjQsIDB4QjgyNSwgMHhCODI4LCAweEI4MkMsIDB4QjgzNCwgMHhCODM1LCAweEI4MzcsIDB4QjgzOCwNCi0gICAgMHhCODM5LCAweEI4NDAsIDB4Qjg0NCwgMHhCODUxLCAweEI4NTMsIDB4Qjg1QywgMHhCODVELCAweEI4NjAsDQotICAgIDB4Qjg2NCwgMHhCODZDLCAweEI4NkQsIDB4Qjg2RiwgMHhCODcxLCAweEI4NzgsIDB4Qjg3QywgMHhCODhELA0KLSAgICAweEI4QTgsIDB4QjhCMCwgMHhCOEI0LCAweEI4QjgsIDB4QjhDMCwgMHhCOEMxLCAweEI4QzMsIDB4QjhDNSwNCi0gICAgMHhCOENDLCAweEI4RDAsIDB4QjhENCwgMHhCOERELCAweEI4REYsIDB4QjhFMSwgMHhCOEU4LCAweEI4RTksDQotICAgIDB4QjhFQywgMHhCOEYwLCAweEI4RjgsIDB4QjhGOSwgMHhCOEZCLCAweEI4RkQsIDB4QjkwNCwgMHhCOTE4LA0KLSAgICAweEI5MjAsIDB4QjkzQywgMHhCOTNELCAweEI5NDAsIDB4Qjk0NCwgMHhCOTRDLCAweEI5NEYsIDB4Qjk1MSwNCi0gICAgMHhCOTU4LCAweEI5NTksIDB4Qjk1QywgMHhCOTYwLCAweEI5NjgsIDB4Qjk2OSwgMHhCOTZCLCAweEI5NkQsDQotICAgIDB4Qjk3NCwgMHhCOTc1LCAweEI5NzgsIDB4Qjk3QywgMHhCOTg0LCAweEI5ODUsIDB4Qjk4NywgMHhCOTg5LA0KLSAgICAweEI5OEEsIDB4Qjk4RCwgMHhCOThFLCAweEI5QUMsIDB4QjlBRCwgMHhCOUIwLCAweEI5QjQsIDB4QjlCQywNCi0gICAgMHhCOUJELCAweEI5QkYsIDB4QjlDMSwgMHhCOUM4LCAweEI5QzksIDB4QjlDQywgMHhCOUNFLCAweEI5Q0YsDQotICAgIDB4QjlEMCwgMHhCOUQxLCAweEI5RDIsIDB4QjlEOCwgMHhCOUQ5LCAweEI5REIsIDB4QjlERCwgMHhCOURFLA0KLSAgICAweEI5RTEsIDB4QjlFMywgMHhCOUU0LCAweEI5RTUsIDB4QjlFOCwgMHhCOUVDLCAweEI5RjQsIDB4QjlGNSwNCi0gICAgMHhCOUY3LCAweEI5RjgsIDB4QjlGOSwgMHhCOUZBLCAweEJBMDAsIDB4QkEwMSwgMHhCQTA4LCAweEJBMTUsDQotICAgIDB4QkEzOCwgMHhCQTM5LCAweEJBM0MsIDB4QkE0MCwgMHhCQTQyLCAweEJBNDgsIDB4QkE0OSwgMHhCQTRCLA0KLSAgICAweEJBNEQsIDB4QkE0RSwgMHhCQTUzLCAweEJBNTQsIDB4QkE1NSwgMHhCQTU4LCAweEJBNUMsIDB4QkE2NCwNCi0gICAgMHhCQTY1LCAweEJBNjcsIDB4QkE2OCwgMHhCQTY5LCAweEJBNzAsIDB4QkE3MSwgMHhCQTc0LCAweEJBNzgsDQotICAgIDB4QkE4MywgMHhCQTg0LCAweEJBODUsIDB4QkE4NywgMHhCQThDLCAweEJBQTgsIDB4QkFBOSwgMHhCQUFCLA0KLSAgICAweEJBQUMsIDB4QkFCMCwgMHhCQUIyLCAweEJBQjgsIDB4QkFCOSwgMHhCQUJCLCAweEJBQkQsIDB4QkFDNCwNCi0gICAgMHhCQUM4LCAweEJBRDgsIDB4QkFEOSwgMHhCQUZDLCAweEJCMDAsIDB4QkIwNCwgMHhCQjBELCAweEJCMEYsDQotICAgIDB4QkIxMSwgMHhCQjE4LCAweEJCMUMsIDB4QkIyMCwgMHhCQjI5LCAweEJCMkIsIDB4QkIzNCwgMHhCQjM1LA0KLSAgICAweEJCMzYsIDB4QkIzOCwgMHhCQjNCLCAweEJCM0MsIDB4QkIzRCwgMHhCQjNFLCAweEJCNDQsIDB4QkI0NSwNCi0gICAgMHhCQjQ3LCAweEJCNDksIDB4QkI0RCwgMHhCQjRGLCAweEJCNTAsIDB4QkI1NCwgMHhCQjU4LCAweEJCNjEsDQotICAgIDB4QkI2MywgMHhCQjZDLCAweEJCODgsIDB4QkI4QywgMHhCQjkwLCAweEJCQTQsIDB4QkJBOCwgMHhCQkFDLA0KLSAgICAweEJCQjQsIDB4QkJCNywgMHhCQkMwLCAweEJCQzQsIDB4QkJDOCwgMHhCQkQwLCAweEJCRDMsIDB4QkJGOCwNCi0gICAgMHhCQkY5LCAweEJCRkMsIDB4QkJGRiwgMHhCQzAwLCAweEJDMDIsIDB4QkMwOCwgMHhCQzA5LCAweEJDMEIsDQotICAgIDB4QkMwQywgMHhCQzBELCAweEJDMEYsIDB4QkMxMSwgMHhCQzE0LCAweEJDMTUsIDB4QkMxNiwgMHhCQzE3LA0KLSAgICAweEJDMTgsIDB4QkMxQiwgMHhCQzFDLCAweEJDMUQsIDB4QkMxRSwgMHhCQzFGLCAweEJDMjQsIDB4QkMyNSwNCi0gICAgMHhCQzI3LCAweEJDMjksIDB4QkMyRCwgMHhCQzMwLCAweEJDMzEsIDB4QkMzNCwgMHhCQzM4LCAweEJDNDAsDQotICAgIDB4QkM0MSwgMHhCQzQzLCAweEJDNDQsIDB4QkM0NSwgMHhCQzQ5LCAweEJDNEMsIDB4QkM0RCwgMHhCQzUwLA0KLSAgICAweEJDNUQsIDB4QkM4NCwgMHhCQzg1LCAweEJDODgsIDB4QkM4QiwgMHhCQzhDLCAweEJDOEUsIDB4QkM5NCwNCi0gICAgMHhCQzk1LCAweEJDOTcsIDB4QkM5OSwgMHhCQzlBLCAweEJDQTAsIDB4QkNBMSwgMHhCQ0E0LCAweEJDQTcsDQotICAgIDB4QkNBOCwgMHhCQ0IwLCAweEJDQjEsIDB4QkNCMywgMHhCQ0I0LCAweEJDQjUsIDB4QkNCQywgMHhCQ0JELA0KLSAgICAweEJDQzAsIDB4QkNDNCwgMHhCQ0NELCAweEJDQ0YsIDB4QkNEMCwgMHhCQ0QxLCAweEJDRDUsIDB4QkNEOCwNCi0gICAgMHhCQ0RDLCAweEJDRjQsIDB4QkNGNSwgMHhCQ0Y2LCAweEJDRjgsIDB4QkNGQywgMHhCRDA0LCAweEJEMDUsDQotICAgIDB4QkQwNywgMHhCRDA5LCAweEJEMTAsIDB4QkQxNCwgMHhCRDI0LCAweEJEMkMsIDB4QkQ0MCwgMHhCRDQ4LA0KLSAgICAweEJENDksIDB4QkQ0QywgMHhCRDUwLCAweEJENTgsIDB4QkQ1OSwgMHhCRDY0LCAweEJENjgsIDB4QkQ4MCwNCi0gICAgMHhCRDgxLCAweEJEODQsIDB4QkQ4NywgMHhCRDg4LCAweEJEODksIDB4QkQ4QSwgMHhCRDkwLCAweEJEOTEsDQotICAgIDB4QkQ5MywgMHhCRDk1LCAweEJEOTksIDB4QkQ5QSwgMHhCRDlDLCAweEJEQTQsIDB4QkRCMCwgMHhCREI4LA0KLSAgICAweEJERDQsIDB4QkRENSwgMHhCREQ4LCAweEJEREMsIDB4QkRFOSwgMHhCREYwLCAweEJERjQsIDB4QkRGOCwNCi0gICAgMHhCRTAwLCAweEJFMDMsIDB4QkUwNSwgMHhCRTBDLCAweEJFMEQsIDB4QkUxMCwgMHhCRTE0LCAweEJFMUMsDQotICAgIDB4QkUxRCwgMHhCRTFGLCAweEJFNDQsIDB4QkU0NSwgMHhCRTQ4LCAweEJFNEMsIDB4QkU0RSwgMHhCRTU0LA0KLSAgICAweEJFNTUsIDB4QkU1NywgMHhCRTU5LCAweEJFNUEsIDB4QkU1QiwgMHhCRTYwLCAweEJFNjEsIDB4QkU2NCwNCi0gICAgMHhCRTY4LCAweEJFNkEsIDB4QkU3MCwgMHhCRTcxLCAweEJFNzMsIDB4QkU3NCwgMHhCRTc1LCAweEJFN0IsDQotICAgIDB4QkU3QywgMHhCRTdELCAweEJFODAsIDB4QkU4NCwgMHhCRThDLCAweEJFOEQsIDB4QkU4RiwgMHhCRTkwLA0KLSAgICAweEJFOTEsIDB4QkU5OCwgMHhCRTk5LCAweEJFQTgsIDB4QkVEMCwgMHhCRUQxLCAweEJFRDQsIDB4QkVENywNCi0gICAgMHhCRUQ4LCAweEJFRTAsIDB4QkVFMywgMHhCRUU0LCAweEJFRTUsIDB4QkVFQywgMHhCRjAxLCAweEJGMDgsDQotICAgIDB4QkYwOSwgMHhCRjE4LCAweEJGMTksIDB4QkYxQiwgMHhCRjFDLCAweEJGMUQsIDB4QkY0MCwgMHhCRjQxLA0KLSAgICAweEJGNDQsIDB4QkY0OCwgMHhCRjUwLCAweEJGNTEsIDB4QkY1NSwgMHhCRjk0LCAweEJGQjAsIDB4QkZDNSwNCi0gICAgMHhCRkNDLCAweEJGQ0QsIDB4QkZEMCwgMHhCRkQ0LCAweEJGREMsIDB4QkZERiwgMHhCRkUxLCAweEMwM0MsDQotICAgIDB4QzA1MSwgMHhDMDU4LCAweEMwNUMsIDB4QzA2MCwgMHhDMDY4LCAweEMwNjksIDB4QzA5MCwgMHhDMDkxLA0KLSAgICAweEMwOTQsIDB4QzA5OCwgMHhDMEEwLCAweEMwQTEsIDB4QzBBMywgMHhDMEE1LCAweEMwQUMsIDB4QzBBRCwNCi0gICAgMHhDMEFGLCAweEMwQjAsIDB4QzBCMywgMHhDMEI0LCAweEMwQjUsIDB4QzBCNiwgMHhDMEJDLCAweEMwQkQsDQotICAgIDB4QzBCRiwgMHhDMEMwLCAweEMwQzEsIDB4QzBDNSwgMHhDMEM4LCAweEMwQzksIDB4QzBDQywgMHhDMEQwLA0KLSAgICAweEMwRDgsIDB4QzBEOSwgMHhDMERCLCAweEMwREMsIDB4QzBERCwgMHhDMEU0LCAweEMwRTUsIDB4QzBFOCwNCi0gICAgMHhDMEVDLCAweEMwRjQsIDB4QzBGNSwgMHhDMEY3LCAweEMwRjksIDB4QzEwMCwgMHhDMTA0LCAweEMxMDgsDQotICAgIDB4QzExMCwgMHhDMTE1LCAweEMxMUMsIDB4QzExRCwgMHhDMTFFLCAweEMxMUYsIDB4QzEyMCwgMHhDMTIzLA0KLSAgICAweEMxMjQsIDB4QzEyNiwgMHhDMTI3LCAweEMxMkMsIDB4QzEyRCwgMHhDMTJGLCAweEMxMzAsIDB4QzEzMSwNCi0gICAgMHhDMTM2LCAweEMxMzgsIDB4QzEzOSwgMHhDMTNDLCAweEMxNDAsIDB4QzE0OCwgMHhDMTQ5LCAweEMxNEIsDQotICAgIDB4QzE0QywgMHhDMTRELCAweEMxNTQsIDB4QzE1NSwgMHhDMTU4LCAweEMxNUMsIDB4QzE2NCwgMHhDMTY1LA0KLSAgICAweEMxNjcsIDB4QzE2OCwgMHhDMTY5LCAweEMxNzAsIDB4QzE3NCwgMHhDMTc4LCAweEMxODUsIDB4QzE4QywNCi0gICAgMHhDMThELCAweEMxOEUsIDB4QzE5MCwgMHhDMTk0LCAweEMxOTYsIDB4QzE5QywgMHhDMTlELCAweEMxOUYsDQotICAgIDB4QzFBMSwgMHhDMUE1LCAweEMxQTgsIDB4QzFBOSwgMHhDMUFDLCAweEMxQjAsIDB4QzFCRCwgMHhDMUM0LA0KLSAgICAweEMxQzgsIDB4QzFDQywgMHhDMUQ0LCAweEMxRDcsIDB4QzFEOCwgMHhDMUUwLCAweEMxRTQsIDB4QzFFOCwNCi0gICAgMHhDMUYwLCAweEMxRjEsIDB4QzFGMywgMHhDMUZDLCAweEMxRkQsIDB4QzIwMCwgMHhDMjA0LCAweEMyMEMsDQotICAgIDB4QzIwRCwgMHhDMjBGLCAweEMyMTEsIDB4QzIxOCwgMHhDMjE5LCAweEMyMUMsIDB4QzIxRiwgMHhDMjIwLA0KLSAgICAweEMyMjgsIDB4QzIyOSwgMHhDMjJCLCAweEMyMkQsIDB4QzIyRiwgMHhDMjMxLCAweEMyMzIsIDB4QzIzNCwNCi0gICAgMHhDMjQ4LCAweEMyNTAsIDB4QzI1MSwgMHhDMjU0LCAweEMyNTgsIDB4QzI2MCwgMHhDMjY1LCAweEMyNkMsDQotICAgIDB4QzI2RCwgMHhDMjcwLCAweEMyNzQsIDB4QzI3QywgMHhDMjdELCAweEMyN0YsIDB4QzI4MSwgMHhDMjg4LA0KLSAgICAweEMyODksIDB4QzI5MCwgMHhDMjk4LCAweEMyOUIsIDB4QzI5RCwgMHhDMkE0LCAweEMyQTUsIDB4QzJBOCwNCi0gICAgMHhDMkFDLCAweEMyQUQsIDB4QzJCNCwgMHhDMkI1LCAweEMyQjcsIDB4QzJCOSwgMHhDMkRDLCAweEMyREQsDQotICAgIDB4QzJFMCwgMHhDMkUzLCAweEMyRTQsIDB4QzJFQiwgMHhDMkVDLCAweEMyRUQsIDB4QzJFRiwgMHhDMkYxLA0KLSAgICAweEMyRjYsIDB4QzJGOCwgMHhDMkY5LCAweEMyRkIsIDB4QzJGQywgMHhDMzAwLCAweEMzMDgsIDB4QzMwOSwNCi0gICAgMHhDMzBDLCAweEMzMEQsIDB4QzMxMywgMHhDMzE0LCAweEMzMTUsIDB4QzMxOCwgMHhDMzFDLCAweEMzMjQsDQotICAgIDB4QzMyNSwgMHhDMzI4LCAweEMzMjksIDB4QzM0NSwgMHhDMzY4LCAweEMzNjksIDB4QzM2QywgMHhDMzcwLA0KLSAgICAweEMzNzIsIDB4QzM3OCwgMHhDMzc5LCAweEMzN0MsIDB4QzM3RCwgMHhDMzg0LCAweEMzODgsIDB4QzM4QywNCi0gICAgMHhDM0MwLCAweEMzRDgsIDB4QzNEOSwgMHhDM0RDLCAweEMzREYsIDB4QzNFMCwgMHhDM0UyLCAweEMzRTgsDQotICAgIDB4QzNFOSwgMHhDM0VELCAweEMzRjQsIDB4QzNGNSwgMHhDM0Y4LCAweEM0MDgsIDB4QzQxMCwgMHhDNDI0LA0KLSAgICAweEM0MkMsIDB4QzQzMCwgMHhDNDM0LCAweEM0M0MsIDB4QzQzRCwgMHhDNDQ4LCAweEM0NjQsIDB4QzQ2NSwNCi0gICAgMHhDNDY4LCAweEM0NkMsIDB4QzQ3NCwgMHhDNDc1LCAweEM0NzksIDB4QzQ4MCwgMHhDNDk0LCAweEM0OUMsDQotICAgIDB4QzRCOCwgMHhDNEJDLCAweEM0RTksIDB4QzRGMCwgMHhDNEYxLCAweEM0RjQsIDB4QzRGOCwgMHhDNEZBLA0KLSAgICAweEM0RkYsIDB4QzUwMCwgMHhDNTAxLCAweEM1MEMsIDB4QzUxMCwgMHhDNTE0LCAweEM1MUMsIDB4QzUyOCwNCi0gICAgMHhDNTI5LCAweEM1MkMsIDB4QzUzMCwgMHhDNTM4LCAweEM1MzksIDB4QzUzQiwgMHhDNTNELCAweEM1NDQsDQotICAgIDB4QzU0NSwgMHhDNTQ4LCAweEM1NDksIDB4QzU0QSwgMHhDNTRDLCAweEM1NEQsIDB4QzU0RSwgMHhDNTUzLA0KLSAgICAweEM1NTQsIDB4QzU1NSwgMHhDNTU3LCAweEM1NTgsIDB4QzU1OSwgMHhDNTVELCAweEM1NUUsIDB4QzU2MCwNCi0gICAgMHhDNTYxLCAweEM1NjQsIDB4QzU2OCwgMHhDNTcwLCAweEM1NzEsIDB4QzU3MywgMHhDNTc0LCAweEM1NzUsDQotICAgIDB4QzU3QywgMHhDNTdELCAweEM1ODAsIDB4QzU4NCwgMHhDNTg3LCAweEM1OEMsIDB4QzU4RCwgMHhDNThGLA0KLSAgICAweEM1OTEsIDB4QzU5NSwgMHhDNTk3LCAweEM1OTgsIDB4QzU5QywgMHhDNUEwLCAweEM1QTksIDB4QzVCNCwNCi0gICAgMHhDNUI1LCAweEM1QjgsIDB4QzVCOSwgMHhDNUJCLCAweEM1QkMsIDB4QzVCRCwgMHhDNUJFLCAweEM1QzQsDQotICAgIDB4QzVDNSwgMHhDNUM2LCAweEM1QzcsIDB4QzVDOCwgMHhDNUM5LCAweEM1Q0EsIDB4QzVDQywgMHhDNUNFLA0KLSAgICAweEM1RDAsIDB4QzVEMSwgMHhDNUQ0LCAweEM1RDgsIDB4QzVFMCwgMHhDNUUxLCAweEM1RTMsIDB4QzVFNSwNCi0gICAgMHhDNUVDLCAweEM1RUQsIDB4QzVFRSwgMHhDNUYwLCAweEM1RjQsIDB4QzVGNiwgMHhDNUY3LCAweEM1RkMsDQotICAgIDB4QzVGRCwgMHhDNUZFLCAweEM1RkYsIDB4QzYwMCwgMHhDNjAxLCAweEM2MDUsIDB4QzYwNiwgMHhDNjA3LA0KLSAgICAweEM2MDgsIDB4QzYwQywgMHhDNjEwLCAweEM2MTgsIDB4QzYxOSwgMHhDNjFCLCAweEM2MUMsIDB4QzYyNCwNCi0gICAgMHhDNjI1LCAweEM2MjgsIDB4QzYyQywgMHhDNjJELCAweEM2MkUsIDB4QzYzMCwgMHhDNjMzLCAweEM2MzQsDQotICAgIDB4QzYzNSwgMHhDNjM3LCAweEM2MzksIDB4QzYzQiwgMHhDNjQwLCAweEM2NDEsIDB4QzY0NCwgMHhDNjQ4LA0KLSAgICAweEM2NTAsIDB4QzY1MSwgMHhDNjUzLCAweEM2NTQsIDB4QzY1NSwgMHhDNjVDLCAweEM2NUQsIDB4QzY2MCwNCi0gICAgMHhDNjZDLCAweEM2NkYsIDB4QzY3MSwgMHhDNjc4LCAweEM2NzksIDB4QzY3QywgMHhDNjgwLCAweEM2ODgsDQotICAgIDB4QzY4OSwgMHhDNjhCLCAweEM2OEQsIDB4QzY5NCwgMHhDNjk1LCAweEM2OTgsIDB4QzY5QywgMHhDNkE0LA0KLSAgICAweEM2QTUsIDB4QzZBNywgMHhDNkE5LCAweEM2QjAsIDB4QzZCMSwgMHhDNkI0LCAweEM2QjgsIDB4QzZCOSwNCi0gICAgMHhDNkJBLCAweEM2QzAsIDB4QzZDMSwgMHhDNkMzLCAweEM2QzUsIDB4QzZDQywgMHhDNkNELCAweEM2RDAsDQotICAgIDB4QzZENCwgMHhDNkRDLCAweEM2REQsIDB4QzZFMCwgMHhDNkUxLCAweEM2RTgsIDB4QzZFOSwgMHhDNkVDLA0KLSAgICAweEM2RjAsIDB4QzZGOCwgMHhDNkY5LCAweEM2RkQsIDB4QzcwNCwgMHhDNzA1LCAweEM3MDgsIDB4QzcwQywNCi0gICAgMHhDNzE0LCAweEM3MTUsIDB4QzcxNywgMHhDNzE5LCAweEM3MjAsIDB4QzcyMSwgMHhDNzI0LCAweEM3MjgsDQotICAgIDB4QzczMCwgMHhDNzMxLCAweEM3MzMsIDB4QzczNSwgMHhDNzM3LCAweEM3M0MsIDB4QzczRCwgMHhDNzQwLA0KLSAgICAweEM3NDQsIDB4Qzc0QSwgMHhDNzRDLCAweEM3NEQsIDB4Qzc0RiwgMHhDNzUxLCAweEM3NTIsIDB4Qzc1MywNCi0gICAgMHhDNzU0LCAweEM3NTUsIDB4Qzc1NiwgMHhDNzU3LCAweEM3NTgsIDB4Qzc1QywgMHhDNzYwLCAweEM3NjgsDQotICAgIDB4Qzc2QiwgMHhDNzc0LCAweEM3NzUsIDB4Qzc3OCwgMHhDNzdDLCAweEM3N0QsIDB4Qzc3RSwgMHhDNzgzLA0KLSAgICAweEM3ODQsIDB4Qzc4NSwgMHhDNzg3LCAweEM3ODgsIDB4Qzc4OSwgMHhDNzhBLCAweEM3OEUsIDB4Qzc5MCwNCi0gICAgMHhDNzkxLCAweEM3OTQsIDB4Qzc5NiwgMHhDNzk3LCAweEM3OTgsIDB4Qzc5QSwgMHhDN0EwLCAweEM3QTEsDQotICAgIDB4QzdBMywgMHhDN0E0LCAweEM3QTUsIDB4QzdBNiwgMHhDN0FDLCAweEM3QUQsIDB4QzdCMCwgMHhDN0I0LA0KLSAgICAweEM3QkMsIDB4QzdCRCwgMHhDN0JGLCAweEM3QzAsIDB4QzdDMSwgMHhDN0M4LCAweEM3QzksIDB4QzdDQywNCi0gICAgMHhDN0NFLCAweEM3RDAsIDB4QzdEOCwgMHhDN0RELCAweEM3RTQsIDB4QzdFOCwgMHhDN0VDLCAweEM4MDAsDQotICAgIDB4QzgwMSwgMHhDODA0LCAweEM4MDgsIDB4QzgwQSwgMHhDODEwLCAweEM4MTEsIDB4QzgxMywgMHhDODE1LA0KLSAgICAweEM4MTYsIDB4QzgxQywgMHhDODFELCAweEM4MjAsIDB4QzgyNCwgMHhDODJDLCAweEM4MkQsIDB4QzgyRiwNCi0gICAgMHhDODMxLCAweEM4MzgsIDB4QzgzQywgMHhDODQwLCAweEM4NDgsIDB4Qzg0OSwgMHhDODRDLCAweEM4NEQsDQotICAgIDB4Qzg1NCwgMHhDODcwLCAweEM4NzEsIDB4Qzg3NCwgMHhDODc4LCAweEM4N0EsIDB4Qzg4MCwgMHhDODgxLA0KLSAgICAweEM4ODMsIDB4Qzg4NSwgMHhDODg2LCAweEM4ODcsIDB4Qzg4QiwgMHhDODhDLCAweEM4OEQsIDB4Qzg5NCwNCi0gICAgMHhDODlELCAweEM4OUYsIDB4QzhBMSwgMHhDOEE4LCAweEM4QkMsIDB4QzhCRCwgMHhDOEM0LCAweEM4QzgsDQotICAgIDB4QzhDQywgMHhDOEQ0LCAweEM4RDUsIDB4QzhENywgMHhDOEQ5LCAweEM4RTAsIDB4QzhFMSwgMHhDOEU0LA0KLSAgICAweEM4RjUsIDB4QzhGQywgMHhDOEZELCAweEM5MDAsIDB4QzkwNCwgMHhDOTA1LCAweEM5MDYsIDB4QzkwQywNCi0gICAgMHhDOTBELCAweEM5MEYsIDB4QzkxMSwgMHhDOTE4LCAweEM5MkMsIDB4QzkzNCwgMHhDOTUwLCAweEM5NTEsDQotICAgIDB4Qzk1NCwgMHhDOTU4LCAweEM5NjAsIDB4Qzk2MSwgMHhDOTYzLCAweEM5NkMsIDB4Qzk3MCwgMHhDOTc0LA0KLSAgICAweEM5N0MsIDB4Qzk4OCwgMHhDOTg5LCAweEM5OEMsIDB4Qzk5MCwgMHhDOTk4LCAweEM5OTksIDB4Qzk5QiwNCi0gICAgMHhDOTlELCAweEM5QzAsIDB4QzlDMSwgMHhDOUM0LCAweEM5QzcsIDB4QzlDOCwgMHhDOUNBLCAweEM5RDAsDQotICAgIDB4QzlEMSwgMHhDOUQzLCAweEM5RDUsIDB4QzlENiwgMHhDOUQ5LCAweEM5REEsIDB4QzlEQywgMHhDOURELA0KLSAgICAweEM5RTAsIDB4QzlFMiwgMHhDOUU0LCAweEM5RTcsIDB4QzlFQywgMHhDOUVELCAweEM5RUYsIDB4QzlGMCwNCi0gICAgMHhDOUYxLCAweEM5RjgsIDB4QzlGOSwgMHhDOUZDLCAweENBMDAsIDB4Q0EwOCwgMHhDQTA5LCAweENBMEIsDQotICAgIDB4Q0EwQywgMHhDQTBELCAweENBMTQsIDB4Q0ExOCwgMHhDQTI5LCAweENBNEMsIDB4Q0E0RCwgMHhDQTUwLA0KLSAgICAweENBNTQsIDB4Q0E1QywgMHhDQTVELCAweENBNUYsIDB4Q0E2MCwgMHhDQTYxLCAweENBNjgsIDB4Q0E3RCwNCi0gICAgMHhDQTg0LCAweENBOTgsIDB4Q0FCQywgMHhDQUJELCAweENBQzAsIDB4Q0FDNCwgMHhDQUNDLCAweENBQ0QsDQotICAgIDB4Q0FDRiwgMHhDQUQxLCAweENBRDMsIDB4Q0FEOCwgMHhDQUQ5LCAweENBRTAsIDB4Q0FFQywgMHhDQUY0LA0KLSAgICAweENCMDgsIDB4Q0IxMCwgMHhDQjE0LCAweENCMTgsIDB4Q0IyMCwgMHhDQjIxLCAweENCNDEsIDB4Q0I0OCwNCi0gICAgMHhDQjQ5LCAweENCNEMsIDB4Q0I1MCwgMHhDQjU4LCAweENCNTksIDB4Q0I1RCwgMHhDQjY0LCAweENCNzgsDQotICAgIDB4Q0I3OSwgMHhDQjlDLCAweENCQjgsIDB4Q0JENCwgMHhDQkU0LCAweENCRTcsIDB4Q0JFOSwgMHhDQzBDLA0KLSAgICAweENDMEQsIDB4Q0MxMCwgMHhDQzE0LCAweENDMUMsIDB4Q0MxRCwgMHhDQzIxLCAweENDMjIsIDB4Q0MyNywNCi0gICAgMHhDQzI4LCAweENDMjksIDB4Q0MyQywgMHhDQzJFLCAweENDMzAsIDB4Q0MzOCwgMHhDQzM5LCAweENDM0IsDQotICAgIDB4Q0MzQywgMHhDQzNELCAweENDM0UsIDB4Q0M0NCwgMHhDQzQ1LCAweENDNDgsIDB4Q0M0QywgMHhDQzU0LA0KLSAgICAweENDNTUsIDB4Q0M1NywgMHhDQzU4LCAweENDNTksIDB4Q0M2MCwgMHhDQzY0LCAweENDNjYsIDB4Q0M2OCwNCi0gICAgMHhDQzcwLCAweENDNzUsIDB4Q0M5OCwgMHhDQzk5LCAweENDOUMsIDB4Q0NBMCwgMHhDQ0E4LCAweENDQTksDQotICAgIDB4Q0NBQiwgMHhDQ0FDLCAweENDQUQsIDB4Q0NCNCwgMHhDQ0I1LCAweENDQjgsIDB4Q0NCQywgMHhDQ0M0LA0KLSAgICAweENDQzUsIDB4Q0NDNywgMHhDQ0M5LCAweENDRDAsIDB4Q0NENCwgMHhDQ0U0LCAweENDRUMsIDB4Q0NGMCwNCi0gICAgMHhDRDAxLCAweENEMDgsIDB4Q0QwOSwgMHhDRDBDLCAweENEMTAsIDB4Q0QxOCwgMHhDRDE5LCAweENEMUIsDQotICAgIDB4Q0QxRCwgMHhDRDI0LCAweENEMjgsIDB4Q0QyQywgMHhDRDM5LCAweENENUMsIDB4Q0Q2MCwgMHhDRDY0LA0KLSAgICAweENENkMsIDB4Q0Q2RCwgMHhDRDZGLCAweENENzEsIDB4Q0Q3OCwgMHhDRDg4LCAweENEOTQsIDB4Q0Q5NSwNCi0gICAgMHhDRDk4LCAweENEOUMsIDB4Q0RBNCwgMHhDREE1LCAweENEQTcsIDB4Q0RBOSwgMHhDREIwLCAweENEQzQsDQotICAgIDB4Q0RDQywgMHhDREQwLCAweENERTgsIDB4Q0RFQywgMHhDREYwLCAweENERjgsIDB4Q0RGOSwgMHhDREZCLA0KLSAgICAweENERkQsIDB4Q0UwNCwgMHhDRTA4LCAweENFMEMsIDB4Q0UxNCwgMHhDRTE5LCAweENFMjAsIDB4Q0UyMSwNCi0gICAgMHhDRTI0LCAweENFMjgsIDB4Q0UzMCwgMHhDRTMxLCAweENFMzMsIDB4Q0UzNSwgMHhDRTU4LCAweENFNTksDQotICAgIDB4Q0U1QywgMHhDRTVGLCAweENFNjAsIDB4Q0U2MSwgMHhDRTY4LCAweENFNjksIDB4Q0U2QiwgMHhDRTZELA0KLSAgICAweENFNzQsIDB4Q0U3NSwgMHhDRTc4LCAweENFN0MsIDB4Q0U4NCwgMHhDRTg1LCAweENFODcsIDB4Q0U4OSwNCi0gICAgMHhDRTkwLCAweENFOTEsIDB4Q0U5NCwgMHhDRTk4LCAweENFQTAsIDB4Q0VBMSwgMHhDRUEzLCAweENFQTQsDQotICAgIDB4Q0VBNSwgMHhDRUFDLCAweENFQUQsIDB4Q0VDMSwgMHhDRUU0LCAweENFRTUsIDB4Q0VFOCwgMHhDRUVCLA0KLSAgICAweENFRUMsIDB4Q0VGNCwgMHhDRUY1LCAweENFRjcsIDB4Q0VGOCwgMHhDRUY5LCAweENGMDAsIDB4Q0YwMSwNCi0gICAgMHhDRjA0LCAweENGMDgsIDB4Q0YxMCwgMHhDRjExLCAweENGMTMsIDB4Q0YxNSwgMHhDRjFDLCAweENGMjAsDQotICAgIDB4Q0YyNCwgMHhDRjJDLCAweENGMkQsIDB4Q0YyRiwgMHhDRjMwLCAweENGMzEsIDB4Q0YzOCwgMHhDRjU0LA0KLSAgICAweENGNTUsIDB4Q0Y1OCwgMHhDRjVDLCAweENGNjQsIDB4Q0Y2NSwgMHhDRjY3LCAweENGNjksIDB4Q0Y3MCwNCi0gICAgMHhDRjcxLCAweENGNzQsIDB4Q0Y3OCwgMHhDRjgwLCAweENGODUsIDB4Q0Y4QywgMHhDRkExLCAweENGQTgsDQotICAgIDB4Q0ZCMCwgMHhDRkM0LCAweENGRTAsIDB4Q0ZFMSwgMHhDRkU0LCAweENGRTgsIDB4Q0ZGMCwgMHhDRkYxLA0KLSAgICAweENGRjMsIDB4Q0ZGNSwgMHhDRkZDLCAweEQwMDAsIDB4RDAwNCwgMHhEMDExLCAweEQwMTgsIDB4RDAyRCwNCi0gICAgMHhEMDM0LCAweEQwMzUsIDB4RDAzOCwgMHhEMDNDLCAweEQwNDQsIDB4RDA0NSwgMHhEMDQ3LCAweEQwNDksDQotICAgIDB4RDA1MCwgMHhEMDU0LCAweEQwNTgsIDB4RDA2MCwgMHhEMDZDLCAweEQwNkQsIDB4RDA3MCwgMHhEMDc0LA0KLSAgICAweEQwN0MsIDB4RDA3RCwgMHhEMDgxLCAweEQwQTQsIDB4RDBBNSwgMHhEMEE4LCAweEQwQUMsIDB4RDBCNCwNCi0gICAgMHhEMEI1LCAweEQwQjcsIDB4RDBCOSwgMHhEMEMwLCAweEQwQzEsIDB4RDBDNCwgMHhEMEM4LCAweEQwQzksDQotICAgIDB4RDBEMCwgMHhEMEQxLCAweEQwRDMsIDB4RDBENCwgMHhEMEQ1LCAweEQwREMsIDB4RDBERCwgMHhEMEUwLA0KLSAgICAweEQwRTQsIDB4RDBFQywgMHhEMEVELCAweEQwRUYsIDB4RDBGMCwgMHhEMEYxLCAweEQwRjgsIDB4RDEwRCwNCi0gICAgMHhEMTMwLCAweEQxMzEsIDB4RDEzNCwgMHhEMTM4LCAweEQxM0EsIDB4RDE0MCwgMHhEMTQxLCAweEQxNDMsDQotICAgIDB4RDE0NCwgMHhEMTQ1LCAweEQxNEMsIDB4RDE0RCwgMHhEMTUwLCAweEQxNTQsIDB4RDE1QywgMHhEMTVELA0KLSAgICAweEQxNUYsIDB4RDE2MSwgMHhEMTY4LCAweEQxNkMsIDB4RDE3QywgMHhEMTg0LCAweEQxODgsIDB4RDFBMCwNCi0gICAgMHhEMUExLCAweEQxQTQsIDB4RDFBOCwgMHhEMUIwLCAweEQxQjEsIDB4RDFCMywgMHhEMUI1LCAweEQxQkEsDQotICAgIDB4RDFCQywgMHhEMUMwLCAweEQxRDgsIDB4RDFGNCwgMHhEMUY4LCAweEQyMDcsIDB4RDIwOSwgMHhEMjEwLA0KLSAgICAweEQyMkMsIDB4RDIyRCwgMHhEMjMwLCAweEQyMzQsIDB4RDIzQywgMHhEMjNELCAweEQyM0YsIDB4RDI0MSwNCi0gICAgMHhEMjQ4LCAweEQyNUMsIDB4RDI2NCwgMHhEMjgwLCAweEQyODEsIDB4RDI4NCwgMHhEMjg4LCAweEQyOTAsDQotICAgIDB4RDI5MSwgMHhEMjk1LCAweEQyOUMsIDB4RDJBMCwgMHhEMkE0LCAweEQyQUMsIDB4RDJCMSwgMHhEMkI4LA0KLSAgICAweEQyQjksIDB4RDJCQywgMHhEMkJGLCAweEQyQzAsIDB4RDJDMiwgMHhEMkM4LCAweEQyQzksIDB4RDJDQiwNCi0gICAgMHhEMkQ0LCAweEQyRDgsIDB4RDJEQywgMHhEMkU0LCAweEQyRTUsIDB4RDJGMCwgMHhEMkYxLCAweEQyRjQsDQotICAgIDB4RDJGOCwgMHhEMzAwLCAweEQzMDEsIDB4RDMwMywgMHhEMzA1LCAweEQzMEMsIDB4RDMwRCwgMHhEMzBFLA0KLSAgICAweEQzMTAsIDB4RDMxNCwgMHhEMzE2LCAweEQzMUMsIDB4RDMxRCwgMHhEMzFGLCAweEQzMjAsIDB4RDMyMSwNCi0gICAgMHhEMzI1LCAweEQzMjgsIDB4RDMyOSwgMHhEMzJDLCAweEQzMzAsIDB4RDMzOCwgMHhEMzM5LCAweEQzM0IsDQotICAgIDB4RDMzQywgMHhEMzNELCAweEQzNDQsIDB4RDM0NSwgMHhEMzdDLCAweEQzN0QsIDB4RDM4MCwgMHhEMzg0LA0KLSAgICAweEQzOEMsIDB4RDM4RCwgMHhEMzhGLCAweEQzOTAsIDB4RDM5MSwgMHhEMzk4LCAweEQzOTksIDB4RDM5QywNCi0gICAgMHhEM0EwLCAweEQzQTgsIDB4RDNBOSwgMHhEM0FCLCAweEQzQUQsIDB4RDNCNCwgMHhEM0I4LCAweEQzQkMsDQotICAgIDB4RDNDNCwgMHhEM0M1LCAweEQzQzgsIDB4RDNDOSwgMHhEM0QwLCAweEQzRDgsIDB4RDNFMSwgMHhEM0UzLA0KLSAgICAweEQzRUMsIDB4RDNFRCwgMHhEM0YwLCAweEQzRjQsIDB4RDNGQywgMHhEM0ZELCAweEQzRkYsIDB4RDQwMSwNCi0gICAgMHhENDA4LCAweEQ0MUQsIDB4RDQ0MCwgMHhENDQ0LCAweEQ0NUMsIDB4RDQ2MCwgMHhENDY0LCAweEQ0NkQsDQotICAgIDB4RDQ2RiwgMHhENDc4LCAweEQ0NzksIDB4RDQ3QywgMHhENDdGLCAweEQ0ODAsIDB4RDQ4MiwgMHhENDg4LA0KLSAgICAweEQ0ODksIDB4RDQ4QiwgMHhENDhELCAweEQ0OTQsIDB4RDRBOSwgMHhENENDLCAweEQ0RDAsIDB4RDRENCwNCi0gICAgMHhENERDLCAweEQ0REYsIDB4RDRFOCwgMHhENEVDLCAweEQ0RjAsIDB4RDRGOCwgMHhENEZCLCAweEQ0RkQsDQotICAgIDB4RDUwNCwgMHhENTA4LCAweEQ1MEMsIDB4RDUxNCwgMHhENTE1LCAweEQ1MTcsIDB4RDUzQywgMHhENTNELA0KLSAgICAweEQ1NDAsIDB4RDU0NCwgMHhENTRDLCAweEQ1NEQsIDB4RDU0RiwgMHhENTUxLCAweEQ1NTgsIDB4RDU1OSwNCi0gICAgMHhENTVDLCAweEQ1NjAsIDB4RDU2NSwgMHhENTY4LCAweEQ1NjksIDB4RDU2QiwgMHhENTZELCAweEQ1NzQsDQotICAgIDB4RDU3NSwgMHhENTc4LCAweEQ1N0MsIDB4RDU4NCwgMHhENTg1LCAweEQ1ODcsIDB4RDU4OCwgMHhENTg5LA0KLSAgICAweEQ1OTAsIDB4RDVBNSwgMHhENUM4LCAweEQ1QzksIDB4RDVDQywgMHhENUQwLCAweEQ1RDIsIDB4RDVEOCwNCi0gICAgMHhENUQ5LCAweEQ1REIsIDB4RDVERCwgMHhENUU0LCAweEQ1RTUsIDB4RDVFOCwgMHhENUVDLCAweEQ1RjQsDQotICAgIDB4RDVGNSwgMHhENUY3LCAweEQ1RjksIDB4RDYwMCwgMHhENjAxLCAweEQ2MDQsIDB4RDYwOCwgMHhENjEwLA0KLSAgICAweEQ2MTEsIDB4RDYxMywgMHhENjE0LCAweEQ2MTUsIDB4RDYxQywgMHhENjIwLCAweEQ2MjQsIDB4RDYyRCwNCi0gICAgMHhENjM4LCAweEQ2MzksIDB4RDYzQywgMHhENjQwLCAweEQ2NDUsIDB4RDY0OCwgMHhENjQ5LCAweEQ2NEIsDQotICAgIDB4RDY0RCwgMHhENjUxLCAweEQ2NTQsIDB4RDY1NSwgMHhENjU4LCAweEQ2NUMsIDB4RDY2NywgMHhENjY5LA0KLSAgICAweEQ2NzAsIDB4RDY3MSwgMHhENjc0LCAweEQ2ODMsIDB4RDY4NSwgMHhENjhDLCAweEQ2OEQsIDB4RDY5MCwNCi0gICAgMHhENjk0LCAweEQ2OUQsIDB4RDY5RiwgMHhENkExLCAweEQ2QTgsIDB4RDZBQywgMHhENkIwLCAweEQ2QjksDQotICAgIDB4RDZCQiwgMHhENkM0LCAweEQ2QzUsIDB4RDZDOCwgMHhENkNDLCAweEQ2RDEsIDB4RDZENCwgMHhENkQ3LA0KLSAgICAweEQ2RDksIDB4RDZFMCwgMHhENkU0LCAweEQ2RTgsIDB4RDZGMCwgMHhENkY1LCAweEQ2RkMsIDB4RDZGRCwNCi0gICAgMHhENzAwLCAweEQ3MDQsIDB4RDcxMSwgMHhENzE4LCAweEQ3MTksIDB4RDcxQywgMHhENzIwLCAweEQ3MjgsDQotICAgIDB4RDcyOSwgMHhENzJCLCAweEQ3MkQsIDB4RDczNCwgMHhENzM1LCAweEQ3MzgsIDB4RDczQywgMHhENzQ0LA0KLSAgICAweEQ3NDcsIDB4RDc0OSwgMHhENzUwLCAweEQ3NTEsIDB4RDc1NCwgMHhENzU2LCAweEQ3NTcsIDB4RDc1OCwNCi0gICAgMHhENzU5LCAweEQ3NjAsIDB4RDc2MSwgMHhENzYzLCAweEQ3NjUsIDB4RDc2OSwgMHhENzZDLCAweEQ3NzAsDQotICAgIDB4RDc3NCwgMHhENzdDLCAweEQ3N0QsIDB4RDc4MSwgMHhENzg4LCAweEQ3ODksIDB4RDc4QywgMHhENzkwLA0KLSAgICAweEQ3OTgsIDB4RDc5OSwgMHhENzlCLCAweEQ3OUQsIDB4NEYzRCwgMHg0RjczLCAweDUwNDcsIDB4NTBGOSwNCi0gICAgMHg1MkEwLCAweDUzRUYsIDB4NTQ3NSwgMHg1NEU1LCAweDU2MDksIDB4NUFDMSwgMHg1QkI2LCAweDY2ODcsDQotICAgIDB4NjdCNiwgMHg2N0I3LCAweDY3RUYsIDB4NkI0QywgMHg3M0MyLCAweDc1QzIsIDB4N0EzQywgMHg4MkRCLA0KLSAgICAweDgzMDQsIDB4ODg1NywgMHg4ODg4LCAweDhBMzYsIDB4OENDOCwgMHg4RENGLCAweDhFRkIsIDB4OEZFNiwNCi0gICAgMHg5OUQ1LCAweDUyM0IsIDB4NTM3NCwgMHg1NDA0LCAweDYwNkEsIDB4NjE2NCwgMHg2QkJDLCAweDczQ0YsDQotICAgIDB4ODExQSwgMHg4OUJBLCAweDg5RDIsIDB4OTVBMywgMHg0RjgzLCAweDUyMEEsIDB4NThCRSwgMHg1OTc4LA0KLSAgICAweDU5RTYsIDB4NUU3MiwgMHg1RTc5LCAweDYxQzcsIDB4NjNDMCwgMHg2NzQ2LCAweDY3RUMsIDB4Njg3RiwNCi0gICAgMHg2Rjk3LCAweDc2NEUsIDB4NzcwQiwgMHg3OEY1LCAweDdBMDgsIDB4N0FGRiwgMHg3QzIxLCAweDgwOUQsDQotICAgIDB4ODI2RSwgMHg4MjcxLCAweDhBRUIsIDB4OTU5MywgMHg0RTZCLCAweDU1OUQsIDB4NjZGNywgMHg2RTM0LA0KLSAgICAweDc4QTMsIDB4N0FFRCwgMHg4NDVCLCAweDg5MTAsIDB4ODc0RSwgMHg5N0E4LCAweDUyRDgsIDB4NTc0RSwNCi0gICAgMHg1ODJBLCAweDVENEMsIDB4NjExRiwgMHg2MUJFLCAweDYyMjEsIDB4NjU2MiwgMHg2N0QxLCAweDZBNDQsDQotICAgIDB4NkUxQiwgMHg3NTE4LCAweDc1QjMsIDB4NzZFMywgMHg3N0IwLCAweDdEM0EsIDB4OTBBRiwgMHg5NDUxLA0KLSAgICAweDk0NTIsIDB4OUY5NSwgMHg1MzIzLCAweDVDQUMsIDB4NzUzMiwgMHg4MERCLCAweDkyNDAsIDB4OTU5OCwNCi0gICAgMHg1MjVCLCAweDU4MDgsIDB4NTlEQywgMHg1Q0ExLCAweDVEMTcsIDB4NUVCNywgMHg1RjNBLCAweDVGNEEsDQotICAgIDB4NjE3NywgMHg2QzVGLCAweDc1N0EsIDB4NzU4NiwgMHg3Q0UwLCAweDdENzMsIDB4N0RCMSwgMHg3RjhDLA0KLSAgICAweDgxNTQsIDB4ODIyMSwgMHg4NTkxLCAweDg5NDEsIDB4OEIxQiwgMHg5MkZDLCAweDk2NEQsIDB4OUM0NywNCi0gICAgMHg0RUNCLCAweDRFRjcsIDB4NTAwQiwgMHg1MUYxLCAweDU4NEYsIDB4NjEzNywgMHg2MTNFLCAweDYxNjgsDQotICAgIDB4NjUzOSwgMHg2OUVBLCAweDZGMTEsIDB4NzVBNSwgMHg3Njg2LCAweDc2RDYsIDB4N0I4NywgMHg4MkE1LA0KLSAgICAweDg0Q0IsIDB4OTNBNywgMHg5NThCLCAweDU1ODAsIDB4NUJBMiwgMHg1NzUxLCAweDdDQjMsIDB4N0ZCOSwNCi0gICAgMHg5MUI1LCAweDUwMjgsIDB4NTNCQiwgMHg1QzQ1LCAweDVERTgsIDB4NjJEMiwgMHg2MzZFLCAweDY0REEsDQotICAgIDB4NjRFNywgMHg2RTIwLCAweDcwQUMsIDB4Nzk1QiwgMHg4RERELCAweDhFMUUsIDB4OTA3RCwgMHg5MjQ1LA0KLSAgICAweDkyRjgsIDB4NEU3RSwgMHg0RUY2LCAweDUwNjUsIDB4NURGRSwgMHg1RUZBLCAweDYxMDYsIDB4Njk1NywNCi0gICAgMHg4MTcxLCAweDg2NTQsIDB4OEU0NywgMHg5Mzc1LCAweDlBMkIsIDB4NEU1RSwgMHg1MDkxLCAweDY3NzAsDQotICAgIDB4Njg0MCwgMHg1MTA5LCAweDUyOEQsIDB4NTI5MiwgMHg2QUEyLCAweDc3QkMsIDB4OTIxMCwgMHg5RUQ0LA0KLSAgICAweDUyQUIsIDB4NjAyRiwgMHg4RkYyLCAweDUwNDgsIDB4NjFBOSwgMHg2M0VELCAweDY0Q0EsIDB4NjgzQywNCi0gICAgMHg2QTg0LCAweDZGQzAsIDB4ODE4OCwgMHg4OUExLCAweDk2OTQsIDB4NTgwNSwgMHg3MjdELCAweDcyQUMsDQotICAgIDB4NzUwNCwgMHg3RDc5LCAweDdFNkQsIDB4ODBBOSwgMHg4OThCLCAweDhCNzQsIDB4OTA2MywgMHg5RDUxLA0KLSAgICAweDYyODksIDB4NkM3QSwgMHg2RjU0LCAweDdENTAsIDB4N0YzQSwgMHg4QTIzLCAweDUxN0MsIDB4NjE0QSwNCi0gICAgMHg3QjlELCAweDhCMTksIDB4OTI1NywgMHg5MzhDLCAweDRFQUMsIDB4NEZEMywgMHg1MDFFLCAweDUwQkUsDQotICAgIDB4NTEwNiwgMHg1MkMxLCAweDUyQ0QsIDB4NTM3RiwgMHg1NzcwLCAweDU4ODMsIDB4NUU5QSwgMHg1RjkxLA0KLSAgICAweDYxNzYsIDB4NjFBQywgMHg2NENFLCAweDY1NkMsIDB4NjY2RiwgMHg2NkJCLCAweDY2RjQsIDB4Njg5NywNCi0gICAgMHg2RDg3LCAweDcwODUsIDB4NzBGMSwgMHg3NDlGLCAweDc0QTUsIDB4NzRDQSwgMHg3NUQ5LCAweDc4NkMsDQotICAgIDB4NzhFQywgMHg3QURGLCAweDdBRjYsIDB4N0Q0NSwgMHg3RDkzLCAweDgwMTUsIDB4ODAzRiwgMHg4MTFCLA0KLSAgICAweDgzOTYsIDB4OEI2NiwgMHg4RjE1LCAweDkwMTUsIDB4OTNFMSwgMHg5ODAzLCAweDk4MzgsIDB4OUE1QSwNCi0gICAgMHg5QkU4LCAweDRGQzIsIDB4NTU1MywgMHg1ODNBLCAweDU5NTEsIDB4NUI2MywgMHg1QzQ2LCAweDYwQjgsDQotICAgIDB4NjIxMiwgMHg2ODQyLCAweDY4QjAsIDB4NjhFOCwgMHg2RUFBLCAweDc1NEMsIDB4NzY3OCwgMHg3OENFLA0KLSAgICAweDdBM0QsIDB4N0NGQiwgMHg3RTZCLCAweDdFN0MsIDB4OEEwOCwgMHg4QUExLCAweDhDM0YsIDB4OTY4RSwNCi0gICAgMHg5REM0LCAweDUzRTQsIDB4NTNFOSwgMHg1NDRBLCAweDU0NzEsIDB4NTZGQSwgMHg1OUQxLCAweDVCNjQsDQotICAgIDB4NUMzQiwgMHg1RUFCLCAweDYyRjcsIDB4NjUzNywgMHg2NTQ1LCAweDY1NzIsIDB4NjZBMCwgMHg2N0FGLA0KLSAgICAweDY5QzEsIDB4NkNCRCwgMHg3NUZDLCAweDc2OTAsIDB4Nzc3RSwgMHg3QTNGLCAweDdGOTQsIDB4ODAwMywNCi0gICAgMHg4MEExLCAweDgxOEYsIDB4ODJFNiwgMHg4MkZELCAweDgzRjAsIDB4ODVDMSwgMHg4ODMxLCAweDg4QjQsDQotICAgIDB4OEFBNSwgMHg4RjlDLCAweDkzMkUsIDB4OTZDNywgMHg5ODY3LCAweDlBRDgsIDB4OUYxMywgMHg1NEVELA0KLSAgICAweDY1OUIsIDB4NjZGMiwgMHg2ODhGLCAweDdBNDAsIDB4OEMzNywgMHg5RDYwLCAweDU2RjAsIDB4NTc2NCwNCi0gICAgMHg1RDExLCAweDY2MDYsIDB4NjhCMSwgMHg2OENELCAweDZFRkUsIDB4NzQyOCwgMHg4ODlFLCAweDlCRTQsDQotICAgIDB4NkM2OCwgMHg5QUE4LCAweDRGOUIsIDB4NTE2QywgMHg1MTcxLCAweDUyOUYsIDB4NUI1NCwgMHg1REU1LA0KLSAgICAweDYwNTAsIDB4NjA2RCwgMHg2MkYxLCAweDYzQTcsIDB4NjUzQiwgMHg3M0Q5LCAweDdBN0EsIDB4ODZBMywNCi0gICAgMHg4Q0EyLCAweDk3OEYsIDB4NEUzMiwgMHg1QkUxLCAweDYyMDgsIDB4Njc5QywgMHg3NERDLCAweDc5RDEsDQotICAgIDB4ODNEMywgMHg4QTg3LCAweDhBQjIsIDB4OERFOCwgMHg5MDRFLCAweDkzNEIsIDB4OTg0NiwgMHg1RUQzLA0KLSAgICAweDY5RTgsIDB4ODVGRiwgMHg5MEVELCAweDUxQTAsIDB4NUI5OCwgMHg1QkVDLCAweDYxNjMsIDB4NjhGQSwNCi0gICAgMHg2QjNFLCAweDcwNEMsIDB4NzQyRiwgMHg3NEQ4LCAweDdCQTEsIDB4N0Y1MCwgMHg4M0M1LCAweDg5QzAsDQotICAgIDB4OENBQiwgMHg5NURDLCAweDk5MjgsIDB4NTIyRSwgMHg2MDVELCAweDYyRUMsIDB4OTAwMiwgMHg0RjhBLA0KLSAgICAweDUxNDksIDB4NTMyMSwgMHg1OEQ5LCAweDVFRTMsIDB4NjZFMCwgMHg2RDM4LCAweDcwOUEsIDB4NzJDMiwNCi0gICAgMHg3M0Q2LCAweDdCNTAsIDB4ODBGMSwgMHg5NDVCLCAweDUzNjYsIDB4NjM5QiwgMHg3RjZCLCAweDRFNTYsDQotICAgIDB4NTA4MCwgMHg1ODRBLCAweDU4REUsIDB4NjAyQSwgMHg2MTI3LCAweDYyRDAsIDB4NjlEMCwgMHg5QjQxLA0KLSAgICAweDVCOEYsIDB4N0QxOCwgMHg4MEIxLCAweDhGNUYsIDB4NEVBNCwgMHg1MEQxLCAweDU0QUMsIDB4NTVBQywNCi0gICAgMHg1QjBDLCAweDVEQTAsIDB4NURFNywgMHg2NTJBLCAweDY1NEUsIDB4NjgyMSwgMHg2QTRCLCAweDcyRTEsDQotICAgIDB4NzY4RSwgMHg3N0VGLCAweDdENUUsIDB4N0ZGOSwgMHg4MUEwLCAweDg1NEUsIDB4ODZERiwgMHg4RjAzLA0KLSAgICAweDhGNEUsIDB4OTBDQSwgMHg5OTAzLCAweDlBNTUsIDB4OUJBQiwgMHg0RTE4LCAweDRFNDUsIDB4NEU1RCwNCi0gICAgMHg0RUM3LCAweDRGRjEsIDB4NTE3NywgMHg1MkZFLCAweDUzNDAsIDB4NTNFMywgMHg1M0U1LCAweDU0OEUsDQotICAgIDB4NTYxNCwgMHg1Nzc1LCAweDU3QTIsIDB4NUJDNywgMHg1RDg3LCAweDVFRDAsIDB4NjFGQywgMHg2MkQ4LA0KLSAgICAweDY1NTEsIDB4NjdCOCwgMHg2N0U5LCAweDY5Q0IsIDB4NkI1MCwgMHg2QkM2LCAweDZCRUMsIDB4NkM0MiwNCi0gICAgMHg2RTlELCAweDcwNzgsIDB4NzJENywgMHg3Mzk2LCAweDc0MDMsIDB4NzdCRiwgMHg3N0U5LCAweDdBNzYsDQotICAgIDB4N0Q3RiwgMHg4MDA5LCAweDgxRkMsIDB4ODIwNSwgMHg4MjBBLCAweDgyREYsIDB4ODg2MiwgMHg4QjMzLA0KLSAgICAweDhDRkMsIDB4OEVDMCwgMHg5MDExLCAweDkwQjEsIDB4OTI2NCwgMHg5MkI2LCAweDk5RDIsIDB4OUE0NSwNCi0gICAgMHg5Q0U5LCAweDlERDcsIDB4OUY5QywgMHg1NzBCLCAweDVDNDAsIDB4ODNDQSwgMHg5N0EwLCAweDk3QUIsDQotICAgIDB4OUVCNCwgMHg1NDFCLCAweDdBOTgsIDB4N0ZBNCwgMHg4OEQ5LCAweDhFQ0QsIDB4OTBFMSwgMHg1ODAwLA0KLSAgICAweDVDNDgsIDB4NjM5OCwgMHg3QTlGLCAweDVCQUUsIDB4NUYxMywgMHg3QTc5LCAweDdBQUUsIDB4ODI4RSwNCi0gICAgMHg4RUFDLCAweDUwMjYsIDB4NTIzOCwgMHg1MkY4LCAweDUzNzcsIDB4NTcwOCwgMHg2MkYzLCAweDYzNzIsDQotICAgIDB4NkIwQSwgMHg2REMzLCAweDc3MzcsIDB4NTNBNSwgMHg3MzU3LCAweDg1NjgsIDB4OEU3NiwgMHg5NUQ1LA0KLSAgICAweDY3M0EsIDB4NkFDMywgMHg2RjcwLCAweDhBNkQsIDB4OEVDQywgMHg5OTRCLCAweDY2NzcsIDB4NkI3OCwNCi0gICAgMHg4Q0I0LCAweDlCM0MsIDB4NTNFQiwgMHg1NzJELCAweDU5NEUsIDB4NjNDNiwgMHg2OUZCLCAweDczRUEsDQotICAgIDB4Nzg0NSwgMHg3QUJBLCAweDdBQzUsIDB4N0NGRSwgMHg4NDc1LCAweDg5OEYsIDB4OEQ3MywgMHg5MDM1LA0KLSAgICAweDk1QTgsIDB4NTJGQiwgMHg1NzQ3LCAweDc1NDcsIDB4N0I2MCwgMHg4M0NDLCAweDkyMUUsIDB4NkE1OCwNCi0gICAgMHg1MTRCLCAweDUyNEIsIDB4NTI4NywgMHg2MjFGLCAweDY4RDgsIDB4Njk3NSwgMHg5Njk5LCAweDUwQzUsDQotICAgIDB4NTJBNCwgMHg1MkU0LCAweDYxQzMsIDB4NjVBNCwgMHg2ODM5LCAweDY5RkYsIDB4NzQ3RSwgMHg3QjRCLA0KLSAgICAweDgyQjksIDB4ODNFQiwgMHg4OUIyLCAweDhCMzksIDB4OEZEMSwgMHg5OTQ5LCAweDRFQ0EsIDB4NTk5NywNCi0gICAgMHg2NEQyLCAweDY2MTEsIDB4NkE4RSwgMHg3NDM0LCAweDc5ODEsIDB4NzlCRCwgMHg4MkE5LCAweDg4N0UsDQotICAgIDB4ODg3RiwgMHg4OTVGLCAweDkzMjYsIDB4NEYwQiwgMHg1M0NBLCAweDYwMjUsIDB4NjI3MSwgMHg2QzcyLA0KLSAgICAweDdEMUEsIDB4N0Q2NiwgMHg0RTk4LCAweDUxNjIsIDB4NzdEQywgMHg4MEFGLCAweDRGMDEsIDB4NEYwRSwNCi0gICAgMHg1MTc2LCAweDUxODAsIDB4NTVEQywgMHg1NjY4LCAweDU3M0IsIDB4NTdGQSwgMHg1N0ZDLCAweDU5MTQsDQotICAgIDB4NTk0NywgMHg1OTkzLCAweDVCQzQsIDB4NUM5MCwgMHg1RDBFLCAweDVERjEsIDB4NUU3RSwgMHg1RkNDLA0KLSAgICAweDYyODAsIDB4NjVENywgMHg2NUUzLCAweDY3MUUsIDB4NjcxRiwgMHg2NzVFLCAweDY4Q0IsIDB4NjhDNCwNCi0gICAgMHg2QTVGLCAweDZCM0EsIDB4NkMyMywgMHg2QzdELCAweDZDODIsIDB4NkRDNywgMHg3Mzk4LCAweDc0MjYsDQotICAgIDB4NzQyQSwgMHg3NDgyLCAweDc0QTMsIDB4NzU3OCwgMHg3NTdGLCAweDc4ODEsIDB4NzhFRiwgMHg3OTQxLA0KLSAgICAweDc5NDcsIDB4Nzk0OCwgMHg3OTdBLCAweDdCOTUsIDB4N0QwMCwgMHg3REJBLCAweDdGODgsIDB4ODAwNiwNCi0gICAgMHg4MDJELCAweDgwOEMsIDB4OEExOCwgMHg4QjRGLCAweDhDNDgsIDB4OEQ3NywgMHg5MzIxLCAweDkzMjQsDQotICAgIDB4OThFMiwgMHg5OTUxLCAweDlBMEUsIDB4OUEwRiwgMHg5QTY1LCAweDlFOTIsIDB4N0RDQSwgMHg0Rjc2LA0KLSAgICAweDU0MDksIDB4NjJFRSwgMHg2ODU0LCAweDkxRDEsIDB4NTVBQiwgMHg1MTNBLCAweDVBMUMsIDB4NjFFNiwNCi0gICAgMHg2MkNGLCAweDYyRkYsIDB4OTBBMywgMHg4QUZFLCAweDY2OTYsIDB4NzE1NiwgMHg5NkUzLCAweDYzNEYsDQotICAgIDB4NjM3QSwgMHg1MzU3LCAweDY3OEYsIDB4Njk2MCwgMHg2RTczLCAweDc1MzcsIDB4N0QwRCwgMHg4ODcyLA0KLSAgICAweDU2Q0EsIDB4NUExOCwgMHg0RTQzLCAweDUxNjcsIDB4NTk0OCwgMHg2N0YwLCAweDgwMTAsIDB4NTk3MywNCi0gICAgMHg1RTc0LCAweDY0OUEsIDB4NzlDQSwgMHg1RkY1LCAweDYwNkMsIDB4NjJDOCwgMHg2MzdCLCAweDVCRTcsDQotICAgIDB4NUJENywgMHg1MkFBLCAweDU5NzQsIDB4NUYyOSwgMHg2MDEyLCAweDc0NTksIDB4OTlEMSwgMHg2RkMzLA0KLSAgICAweDgxQkYsIDB4OEZCMiwgMHg2MEYxLCAweDgxNjYsIDB4NUMzRiwgMHg1QUU5LCAweDhBMjUsIDB4Njc3QiwNCi0gICAgMHg3RDEwLCAweDgwRkQsIDB4NUMzQywgMHg2Q0U1LCAweDUzM0YsIDB4NkVCQSwgMHg1OTFBLCAweDgzMzYsDQotICAgIDB4NEUzOSwgMHg0RUI2LCAweDRGNDYsIDB4NTVBRSwgMHg1NzE4LCAweDU4QzcsIDB4NUY1NiwgMHg2NUI3LA0KLSAgICAweDY1RTYsIDB4NkE4MCwgMHg2QkI1LCAweDZFNEQsIDB4NzdFRCwgMHg3QUVGLCAweDdDMUUsIDB4N0RERSwNCi0gICAgMHg4NkNCLCAweDg4OTIsIDB4OTEzMiwgMHg5MzVCLCAweDY0QkIsIDB4NkZCRSwgMHg3MzdBLCAweDc1QjgsDQotICAgIDB4OTA1NCwgMHg1NTU2LCAweDU3NEQsIDB4NjFCQSwgMHg2NEQ0LCAweDY2QzcsIDB4NkRFMSwgMHg2RTVCLA0KLSAgICAweDZGNkQsIDB4NkZCOSwgMHg3NUYwLCAweDgwNDMsIDB4ODFCRCwgMHg4NTQxLCAweDg5ODMsIDB4OEFDNywNCi0gICAgMHg4QjVBLCAweDkzMUYsIDB4NkM5MywgMHg3NTUzLCAweDdCNTQsIDB4OEUwRiwgMHg5MDVELCAweDU1MTAsDQotICAgIDB4NTgwMiwgMHg1ODU4LCAweDVFNjIsIDB4NjIwNywgMHg2NDlFLCAweDY4RTAsIDB4NzU3NiwgMHg3Q0Q2LA0KLSAgICAweDg3QjMsIDB4OUVFOCwgMHg0RUUzLCAweDU3ODgsIDB4NTc2RSwgMHg1OTI3LCAweDVDMEQsIDB4NUNCMSwNCi0gICAgMHg1RTM2LCAweDVGODUsIDB4NjIzNCwgMHg2NEUxLCAweDczQjMsIDB4ODFGQSwgMHg4ODhCLCAweDhDQjgsDQotICAgIDB4OTY4QSwgMHg5RURCLCAweDVCODUsIDB4NUZCNywgMHg2MEIzLCAweDUwMTIsIDB4NTIwMCwgMHg1MjMwLA0KLSAgICAweDU3MTYsIDB4NTgzNSwgMHg1ODU3LCAweDVDMEUsIDB4NUM2MCwgMHg1Q0Y2LCAweDVEOEIsIDB4NUVBNiwNCi0gICAgMHg1RjkyLCAweDYwQkMsIDB4NjMxMSwgMHg2Mzg5LCAweDY0MTcsIDB4Njg0MywgMHg2OEY5LCAweDZBQzIsDQotICAgIDB4NkREOCwgMHg2RTIxLCAweDZFRDQsIDB4NkZFNCwgMHg3MUZFLCAweDc2REMsIDB4Nzc3OSwgMHg3OUIxLA0KLSAgICAweDdBM0IsIDB4ODQwNCwgMHg4OUE5LCAweDhDRUQsIDB4OERGMywgMHg4RTQ4LCAweDkwMDMsIDB4OTAxNCwNCi0gICAgMHg5MDUzLCAweDkwRkQsIDB4OTM0RCwgMHg5Njc2LCAweDk3REMsIDB4NkJEMiwgMHg3MDA2LCAweDcyNTgsDQotICAgIDB4NzJBMiwgMHg3MzY4LCAweDc3NjMsIDB4NzlCRiwgMHg3QkU0LCAweDdFOUIsIDB4OEI4MCwgMHg1OEE5LA0KLSAgICAweDYwQzcsIDB4NjU2NiwgMHg2NUZELCAweDY2QkUsIDB4NkM4QywgMHg3MTFFLCAweDcxQzksIDB4OEM1QSwNCi0gICAgMHg5ODEzLCAweDRFNkQsIDB4N0E4MSwgMHg0RURELCAweDUxQUMsIDB4NTFDRCwgMHg1MkQ1LCAweDU0MEMsDQotICAgIDB4NjFBNywgMHg2NzcxLCAweDY4NTAsIDB4NjhERiwgMHg2RDFFLCAweDZGN0MsIDB4NzVCQywgMHg3N0IzLA0KLSAgICAweDdBRTUsIDB4ODBGNCwgMHg4NDYzLCAweDkyODUsIDB4NTE1QywgMHg2NTk3LCAweDY3NUMsIDB4Njc5MywNCi0gICAgMHg3NUQ4LCAweDdBQzcsIDB4ODM3MywgMHg4QzQ2LCAweDkwMTcsIDB4OTgyRCwgMHg1QzZGLCAweDgxQzAsDQotICAgIDB4ODI5QSwgMHg5MDQxLCAweDkwNkYsIDB4OTIwRCwgMHg1Rjk3LCAweDVEOUQsIDB4NkE1OSwgMHg3MUM4LA0KLSAgICAweDc2N0IsIDB4N0I0OSwgMHg4NUU0LCAweDhCMDQsIDB4OTEyNywgMHg5QTMwLCAweDU1ODcsIDB4NjFGNiwNCi0gICAgMHg3NjY5LCAweDdGODUsIDB4ODYzRiwgMHg4N0JBLCAweDg4RjgsIDB4OTA4RiwgMHg2RDFCLCAweDcwRDksDQotICAgIDB4NzNERSwgMHg3RDYxLCAweDg0M0QsIDB4OTE2QSwgMHg5OUYxLCAweDRFODIsIDB4NTM3NSwgMHg2QjA0LA0KLSAgICAweDZCMTIsIDB4NzAzRSwgMHg3MjFCLCAweDg2MkQsIDB4OUUxRSwgMHg1MjRDLCAweDhGQTMsIDB4NUQ1MCwNCi0gICAgMHg2NEU1LCAweDY1MkMsIDB4NkIxNiwgMHg2RkVCLCAweDdDNDMsIDB4N0U5QywgMHg4NUNELCAweDg5NjQsDQotICAgIDB4ODlCRCwgMHg2MkM5LCAweDgxRDgsIDB4ODgxRiwgMHg1RUNBLCAweDY3MTcsIDB4NkQ2QSwgMHg3MkZDLA0KLSAgICAweDc0MDUsIDB4NzQ2RiwgMHg4NzgyLCAweDkwREUsIDB4NEY4NiwgMHg1RDBELCAweDVGQTAsIDB4ODQwQSwNCi0gICAgMHg1MUI3LCAweDYzQTAsIDB4NzU2NSwgMHg0RUFFLCAweDUwMDYsIDB4NTE2OSwgMHg1MUM5LCAweDY4ODEsDQotICAgIDB4NkExMSwgMHg3Q0FFLCAweDdDQjEsIDB4N0NFNywgMHg4MjZGLCAweDhBRDIsIDB4OEYxQiwgMHg5MUNGLA0KLSAgICAweDRGQjYsIDB4NTEzNywgMHg1MkY1LCAweDU0NDIsIDB4NUVFQywgMHg2MTZFLCAweDYyM0UsIDB4NjVDNSwNCi0gICAgMHg2QURBLCAweDZGRkUsIDB4NzkyQSwgMHg4NURDLCAweDg4MjMsIDB4OTVBRCwgMHg5QTYyLCAweDlBNkEsDQotICAgIDB4OUU5NywgMHg5RUNFLCAweDUyOUIsIDB4NjZDNiwgMHg2Qjc3LCAweDcwMUQsIDB4NzkyQiwgMHg4RjYyLA0KLSAgICAweDk3NDIsIDB4NjE5MCwgMHg2MjAwLCAweDY1MjMsIDB4NkYyMywgMHg3MTQ5LCAweDc0ODksIDB4N0RGNCwNCi0gICAgMHg4MDZGLCAweDg0RUUsIDB4OEYyNiwgMHg5MDIzLCAweDkzNEEsIDB4NTFCRCwgMHg1MjE3LCAweDUyQTMsDQotICAgIDB4NkQwQywgMHg3MEM4LCAweDg4QzIsIDB4NUVDOSwgMHg2NTgyLCAweDZCQUUsIDB4NkZDMiwgMHg3QzNFLA0KLSAgICAweDczNzUsIDB4NEVFNCwgMHg0RjM2LCAweDU2RjksIDB4NUNCQSwgMHg1REJBLCAweDYwMUMsIDB4NzNCMiwNCi0gICAgMHg3QjJELCAweDdGOUEsIDB4N0ZDRSwgMHg4MDQ2LCAweDkwMUUsIDB4OTIzNCwgMHg5NkY2LCAweDk3NDgsDQotICAgIDB4OTgxOCwgMHg5RjYxLCAweDRGOEIsIDB4NkZBNywgMHg3OUFFLCAweDkxQjQsIDB4OTZCNywgMHg1MkRFLA0KLSAgICAweDY0ODgsIDB4NjRDNCwgMHg2QUQzLCAweDZGNUUsIDB4NzAxOCwgMHg3MjEwLCAweDc2RTcsIDB4ODAwMSwNCi0gICAgMHg4NjA2LCAweDg2NUMsIDB4OERFRiwgMHg4RjA1LCAweDk3MzIsIDB4OUI2RiwgMHg5REZBLCAweDlFNzUsDQotICAgIDB4Nzg4QywgMHg3OTdGLCAweDdEQTAsIDB4ODNDOSwgMHg5MzA0LCAweDlFN0YsIDB4OUU5MywgMHg4QUQ2LA0KLSAgICAweDU4REYsIDB4NUYwNCwgMHg2NzI3LCAweDcwMjcsIDB4NzRDRiwgMHg3QzYwLCAweDgwN0UsIDB4NTEyMSwNCi0gICAgMHg3MDI4LCAweDcyNjIsIDB4NzhDQSwgMHg4Q0MyLCAweDhDREEsIDB4OENGNCwgMHg5NkY3LCAweDRFODYsDQotICAgIDB4NTBEQSwgMHg1QkVFLCAweDVFRDYsIDB4NjU5OSwgMHg3MUNFLCAweDc2NDIsIDB4NzdBRCwgMHg4MDRBLA0KLSAgICAweDg0RkMsIDB4OTA3QywgMHg5QjI3LCAweDlGOEQsIDB4NThEOCwgMHg1QTQxLCAweDVDNjIsIDB4NkExMywNCi0gICAgMHg2RERBLCAweDZGMEYsIDB4NzYzQiwgMHg3RDJGLCAweDdFMzcsIDB4ODUxRSwgMHg4OTM4LCAweDkzRTQsDQotICAgIDB4OTY0QiwgMHg1Mjg5LCAweDY1RDIsIDB4NjdGMywgMHg2OUI0LCAweDZENDEsIDB4NkU5QywgMHg3MDBGLA0KLSAgICAweDc0MDksIDB4NzQ2MCwgMHg3NTU5LCAweDc2MjQsIDB4Nzg2QiwgMHg4QjJDLCAweDk4NUUsIDB4NTE2RCwNCi0gICAgMHg2MjJFLCAweDk2NzgsIDB4NEY5NiwgMHg1MDJCLCAweDVEMTksIDB4NkRFQSwgMHg3REI4LCAweDhGMkEsDQotICAgIDB4NUY4QiwgMHg2MTQ0LCAweDY4MTcsIDB4OTY4NiwgMHg1MkQyLCAweDgwOEIsIDB4NTFEQywgMHg1MUNDLA0KLSAgICAweDY5NUUsIDB4N0ExQywgMHg3REJFLCAweDgzRjEsIDB4OTY3NSwgMHg0RkRBLCAweDUyMjksIDB4NTM5OCwNCi0gICAgMHg1NDBGLCAweDU1MEUsIDB4NUM2NSwgMHg2MEE3LCAweDY3NEUsIDB4NjhBOCwgMHg2RDZDLCAweDcyODEsDQotICAgIDB4NzJGOCwgMHg3NDA2LCAweDc0ODMsIDB4NzVFMiwgMHg3QzZDLCAweDdGNzksIDB4N0ZCOCwgMHg4Mzg5LA0KLSAgICAweDg4Q0YsIDB4ODhFMSwgMHg5MUNDLCAweDkxRDAsIDB4OTZFMiwgMHg5QkM5LCAweDU0MUQsIDB4NkY3RSwNCi0gICAgMHg3MUQwLCAweDc0OTgsIDB4ODVGQSwgMHg4RUFBLCAweDk2QTMsIDB4OUM1NywgMHg5RTlGLCAweDY3OTcsDQotICAgIDB4NkRDQiwgMHg3NDMzLCAweDgxRTgsIDB4OTcxNiwgMHg3ODJDLCAweDdBQ0IsIDB4N0IyMCwgMHg3QzkyLA0KLSAgICAweDY0NjksIDB4NzQ2QSwgMHg3NUYyLCAweDc4QkMsIDB4NzhFOCwgMHg5OUFDLCAweDlCNTQsIDB4OUVCQiwNCi0gICAgMHg1QkRFLCAweDVFNTUsIDB4NkYyMCwgMHg4MTlDLCAweDgzQUIsIDB4OTA4OCwgMHg0RTA3LCAweDUzNEQsDQotICAgIDB4NUEyOSwgMHg1REQyLCAweDVGNEUsIDB4NjE2MiwgMHg2MzNELCAweDY2NjksIDB4NjZGQywgMHg2RUZGLA0KLSAgICAweDZGMkIsIDB4NzA2MywgMHg3NzlFLCAweDg0MkMsIDB4ODUxMywgMHg4ODNCLCAweDhGMTMsIDB4OTk0NSwNCi0gICAgMHg5QzNCLCAweDU1MUMsIDB4NjJCOSwgMHg2NzJCLCAweDZDQUIsIDB4ODMwOSwgMHg4OTZBLCAweDk3N0EsDQotICAgIDB4NEVBMSwgMHg1OTg0LCAweDVGRDgsIDB4NUZEOSwgMHg2NzFCLCAweDdEQjIsIDB4N0Y1NCwgMHg4MjkyLA0KLSAgICAweDgzMkIsIDB4ODNCRCwgMHg4RjFFLCAweDkwOTksIDB4NTdDQiwgMHg1OUI5LCAweDVBOTIsIDB4NUJEMCwNCi0gICAgMHg2NjI3LCAweDY3OUEsIDB4Njg4NSwgMHg2QkNGLCAweDcxNjQsIDB4N0Y3NSwgMHg4Q0I3LCAweDhDRTMsDQotICAgIDB4OTA4MSwgMHg5QjQ1LCAweDgxMDgsIDB4OEM4QSwgMHg5NjRDLCAweDlBNDAsIDB4OUVBNSwgMHg1QjVGLA0KLSAgICAweDZDMTMsIDB4NzMxQiwgMHg3NkYyLCAweDc2REYsIDB4ODQwQywgMHg1MUFBLCAweDg5OTMsIDB4NTE0RCwNCi0gICAgMHg1MTk1LCAweDUyQzksIDB4NjhDOSwgMHg2Qzk0LCAweDc3MDQsIDB4NzcyMCwgMHg3REJGLCAweDdERUMsDQotICAgIDB4OTc2MiwgMHg5RUI1LCAweDZFQzUsIDB4ODUxMSwgMHg1MUE1LCAweDU0MEQsIDB4NTQ3RCwgMHg2NjBFLA0KLSAgICAweDY2OUQsIDB4NjkyNywgMHg2RTlGLCAweDc2QkYsIDB4Nzc5MSwgMHg4MzE3LCAweDg0QzIsIDB4ODc5RiwNCi0gICAgMHg5MTY5LCAweDkyOTgsIDB4OUNGNCwgMHg4ODgyLCAweDRGQUUsIDB4NTE5MiwgMHg1MkRGLCAweDU5QzYsDQotICAgIDB4NUUzRCwgMHg2MTU1LCAweDY0NzgsIDB4NjQ3OSwgMHg2NkFFLCAweDY3RDAsIDB4NkEyMSwgMHg2QkNELA0KLSAgICAweDZCREIsIDB4NzI1RiwgMHg3MjYxLCAweDc0NDEsIDB4NzczOCwgMHg3N0RCLCAweDgwMTcsIDB4ODJCQywNCi0gICAgMHg4MzA1LCAweDhCMDAsIDB4OEIyOCwgMHg4QzhDLCAweDY3MjgsIDB4NkM5MCwgMHg3MjY3LCAweDc2RUUsDQotICAgIDB4Nzc2NiwgMHg3QTQ2LCAweDlEQTksIDB4NkI3RiwgMHg2QzkyLCAweDU5MjIsIDB4NjcyNiwgMHg4NDk5LA0KLSAgICAweDUzNkYsIDB4NTg5MywgMHg1OTk5LCAweDVFREYsIDB4NjNDRiwgMHg2NjM0LCAweDY3NzMsIDB4NkUzQSwNCi0gICAgMHg3MzJCLCAweDdBRDcsIDB4ODJENywgMHg5MzI4LCAweDUyRDksIDB4NURFQiwgMHg2MUFFLCAweDYxQ0IsDQotICAgIDB4NjIwQSwgMHg2MkM3LCAweDY0QUIsIDB4NjVFMCwgMHg2OTU5LCAweDZCNjYsIDB4NkJDQiwgMHg3MTIxLA0KLSAgICAweDczRjcsIDB4NzU1RCwgMHg3RTQ2LCAweDgyMUUsIDB4ODMwMiwgMHg4NTZBLCAweDhBQTMsIDB4OENCRiwNCi0gICAgMHg5NzI3LCAweDlENjEsIDB4NThBOCwgMHg5RUQ4LCAweDUwMTEsIDB4NTIwRSwgMHg1NDNCLCAweDU1NEYsDQotICAgIDB4NjU4NywgMHg2Qzc2LCAweDdEMEEsIDB4N0QwQiwgMHg4MDVFLCAweDg2OEEsIDB4OTU4MCwgMHg5NkVGLA0KLSAgICAweDUyRkYsIDB4NkM5NSwgMHg3MjY5LCAweDU0NzMsIDB4NUE5QSwgMHg1QzNFLCAweDVENEIsIDB4NUY0QywNCi0gICAgMHg1RkFFLCAweDY3MkEsIDB4NjhCNiwgMHg2OTYzLCAweDZFM0MsIDB4NkU0NCwgMHg3NzA5LCAweDdDNzMsDQotICAgIDB4N0Y4RSwgMHg4NTg3LCAweDhCMEUsIDB4OEZGNywgMHg5NzYxLCAweDlFRjQsIDB4NUNCNywgMHg2MEI2LA0KLSAgICAweDYxMEQsIDB4NjFBQiwgMHg2NTRGLCAweDY1RkIsIDB4NjVGQywgMHg2QzExLCAweDZDRUYsIDB4NzM5RiwNCi0gICAgMHg3M0M5LCAweDdERTEsIDB4OTU5NCwgMHg1QkM2LCAweDg3MUMsIDB4OEIxMCwgMHg1MjVELCAweDUzNUEsDQotICAgIDB4NjJDRCwgMHg2NDBGLCAweDY0QjIsIDB4NjczNCwgMHg2QTM4LCAweDZDQ0EsIDB4NzNDMCwgMHg3NDlFLA0KLSAgICAweDdCOTQsIDB4N0M5NSwgMHg3RTFCLCAweDgxOEEsIDB4ODIzNiwgMHg4NTg0LCAweDhGRUIsIDB4OTZGOSwNCi0gICAgMHg5OUMxLCAweDRGMzQsIDB4NTM0QSwgMHg1M0NELCAweDUzREIsIDB4NjJDQywgMHg2NDJDLCAweDY1MDAsDQotICAgIDB4NjU5MSwgMHg2OUMzLCAweDZDRUUsIDB4NkY1OCwgMHg3M0VELCAweDc1NTQsIDB4NzYyMiwgMHg3NkU0LA0KLSAgICAweDc2RkMsIDB4NzhEMCwgMHg3OEZCLCAweDc5MkMsIDB4N0Q0NiwgMHg4MjJDLCAweDg3RTAsIDB4OEZENCwNCi0gICAgMHg5ODEyLCAweDk4RUYsIDB4NTJDMywgMHg2MkQ0LCAweDY0QTUsIDB4NkUyNCwgMHg2RjUxLCAweDc2N0MsDQotICAgIDB4OERDQiwgMHg5MUIxLCAweDkyNjIsIDB4OUFFRSwgMHg5QjQzLCAweDUwMjMsIDB4NTA4RCwgMHg1NzRBLA0KLSAgICAweDU5QTgsIDB4NUMyOCwgMHg1RTQ3LCAweDVGNzcsIDB4NjIzRiwgMHg2NTNFLCAweDY1QjksIDB4NjVDMSwNCi0gICAgMHg2NjA5LCAweDY3OEIsIDB4Njk5QywgMHg2RUMyLCAweDc4QzUsIDB4N0QyMSwgMHg4MEFBLCAweDgxODAsDQotICAgIDB4ODIyQiwgMHg4MkIzLCAweDg0QTEsIDB4ODY4QywgMHg4QTJBLCAweDhCMTcsIDB4OTBBNiwgMHg5NjMyLA0KLSAgICAweDlGOTAsIDB4NTAwRCwgMHg0RkYzLCAweDU3RjksIDB4NUY5OCwgMHg2MkRDLCAweDYzOTIsIDB4Njc2RiwNCi0gICAgMHg2RTQzLCAweDcxMTksIDB4NzZDMywgMHg4MENDLCAweDgwREEsIDB4ODhGNCwgMHg4OEY1LCAweDg5MTksDQotICAgIDB4OENFMCwgMHg4RjI5LCAweDkxNEQsIDB4OTY2QSwgMHg0RjJGLCAweDRGNzAsIDB4NUUxQiwgMHg2N0NGLA0KLSAgICAweDY4MjIsIDB4NzY3RCwgMHg3NjdFLCAweDlCNDQsIDB4NUU2MSwgMHg2QTBBLCAweDcxNjksIDB4NzFENCwNCi0gICAgMHg3NTZBLCAweDdFNDEsIDB4ODU0MywgMHg4NUU5LCAweDk4REMsIDB4NEYxMCwgMHg3QjRGLCAweDdGNzAsDQotICAgIDB4OTVBNSwgMHg1MUUxLCAweDVFMDYsIDB4NjhCNSwgMHg2QzNFLCAweDZDNEUsIDB4NkNEQiwgMHg3MkFGLA0KLSAgICAweDdCQzQsIDB4ODMwMywgMHg2Q0Q1LCAweDc0M0EsIDB4NTBGQiwgMHg1Mjg4LCAweDU4QzEsIDB4NjREOCwNCi0gICAgMHg2QTk3LCAweDc0QTcsIDB4NzY1NiwgMHg3OEE3LCAweDg2MTcsIDB4OTVFMiwgMHg5NzM5LCAweDUzNUUsDQotICAgIDB4NUYwMSwgMHg4QjhBLCAweDhGQTgsIDB4OEZBRiwgMHg5MDhBLCAweDUyMjUsIDB4NzdBNSwgMHg5QzQ5LA0KLSAgICAweDlGMDgsIDB4NEUxOSwgMHg1MDAyLCAweDUxNzUsIDB4NUM1QiwgMHg1RTc3LCAweDY2MUUsIDB4NjYzQSwNCi0gICAgMHg2N0M0LCAweDY4QzUsIDB4NzBCMywgMHg3NTAxLCAweDc1QzUsIDB4NzlDOSwgMHg3QURELCAweDhGMjcsDQotICAgIDB4OTkyMCwgMHg5QTA4LCAweDRGREQsIDB4NTgyMSwgMHg1ODMxLCAweDVCRjYsIDB4NjY2RSwgMHg2QjY1LA0KLSAgICAweDZEMTEsIDB4NkU3QSwgMHg2RjdELCAweDczRTQsIDB4NzUyQiwgMHg4M0U5LCAweDg4REMsIDB4ODkxMywNCi0gICAgMHg4QjVDLCAweDhGMTQsIDB4NEYwRiwgMHg1MEQ1LCAweDUzMTAsIDB4NTM1QywgMHg1QjkzLCAweDVGQTksDQotICAgIDB4NjcwRCwgMHg3OThGLCAweDgxNzksIDB4ODMyRiwgMHg4NTE0LCAweDg5MDcsIDB4ODk4NiwgMHg4RjM5LA0KLSAgICAweDhGM0IsIDB4OTlBNSwgMHg5QzEyLCAweDY3MkMsIDB4NEU3NiwgMHg0RkY4LCAweDU5NDksIDB4NUMwMSwNCi0gICAgMHg1Q0VGLCAweDVDRjAsIDB4NjM2NywgMHg2OEQyLCAweDcwRkQsIDB4NzFBMiwgMHg3NDJCLCAweDdFMkIsDQotICAgIDB4ODRFQywgMHg4NzAyLCAweDkwMjIsIDB4OTJEMiwgMHg5Q0YzLCAweDRFMEQsIDB4NEVEOCwgMHg0RkVGLA0KLSAgICAweDUwODUsIDB4NTI1NiwgMHg1MjZGLCAweDU0MjYsIDB4NTQ5MCwgMHg1N0UwLCAweDU5MkIsIDB4NUE2NiwNCi0gICAgMHg1QjVBLCAweDVCNzUsIDB4NUJDQywgMHg1RTlDLCAweDYyNzYsIDB4NjU3NywgMHg2NUE3LCAweDZENkUsDQotICAgIDB4NkVBNSwgMHg3MjM2LCAweDdCMjYsIDB4N0MzRiwgMHg3RjM2LCAweDgxNTAsIDB4ODE1MSwgMHg4MTlBLA0KLSAgICAweDgyNDAsIDB4ODI5OSwgMHg4M0E5LCAweDhBMDMsIDB4OENBMCwgMHg4Q0U2LCAweDhDRkIsIDB4OEQ3NCwNCi0gICAgMHg4REJBLCAweDkwRTgsIDB4OTFEQywgMHg5NjFDLCAweDk2NDQsIDB4OTlEOSwgMHg5Q0U3LCAweDUzMTcsDQotICAgIDB4NTIwNiwgMHg1NDI5LCAweDU2NzQsIDB4NThCMywgMHg1OTU0LCAweDU5NkUsIDB4NUZGRiwgMHg2MUE0LA0KLSAgICAweDYyNkUsIDB4NjYxMCwgMHg2QzdFLCAweDcxMUEsIDB4NzZDNiwgMHg3Qzg5LCAweDdDREUsIDB4N0QxQiwNCi0gICAgMHg4MkFDLCAweDhDQzEsIDB4OTZGMCwgMHg0RjVCLCAweDVGMTcsIDB4NUY3RiwgMHg2MkMyLCAweDVEMjksDQotICAgIDB4NjcwQiwgMHg2OERBLCAweDc4N0MsIDB4N0U0MywgMHg5RDZDLCAweDRFMTUsIDB4NTA5OSwgMHg1MzE1LA0KLSAgICAweDUzMkEsIDB4NTM1MSwgMHg1OTgzLCAweDVBNjIsIDB4NUU4NywgMHg2MEIyLCAweDYxOEEsIDB4NjI0OSwNCi0gICAgMHg2Mjc5LCAweDY1OTAsIDB4Njc4NywgMHg2OUE3LCAweDZCRDQsIDB4NkJENiwgMHg2QkQ3LCAweDZCRDgsDQotICAgIDB4NkNCOCwgMHg3NDM1LCAweDc1RkEsIDB4NzgxMiwgMHg3ODkxLCAweDc5RDUsIDB4NzlEOCwgMHg3QzgzLA0KLSAgICAweDdEQ0IsIDB4N0ZFMSwgMHg4MEE1LCAweDgxM0UsIDB4ODFDMiwgMHg4M0YyLCAweDg3MUEsIDB4ODhFOCwNCi0gICAgMHg4QUI5LCAweDhCNkMsIDB4OENCQiwgMHg5MTE5LCAweDk3NUUsIDB4OThEQiwgMHg5RjNCLCAweDU2QUMsDQotICAgIDB4NUIyQSwgMHg1RjZDLCAweDY1OEMsIDB4NkFCMywgMHg2QkFGLCAweDZENUMsIDB4NkZGMSwgMHg3MDE1LA0KLSAgICAweDcyNUQsIDB4NzNBRCwgMHg4Q0E3LCAweDhDRDMsIDB4OTgzQiwgMHg2MTkxLCAweDZDMzcsIDB4ODA1OCwNCi0gICAgMHg5QTAxLCAweDRFNEQsIDB4NEU4QiwgMHg0RTlCLCAweDRFRDUsIDB4NEYzQSwgMHg0RjNDLCAweDRGN0YsDQotICAgIDB4NEZERiwgMHg1MEZGLCAweDUzRjIsIDB4NTNGOCwgMHg1NTA2LCAweDU1RTMsIDB4NTZEQiwgMHg1OEVCLA0KLSAgICAweDU5NjIsIDB4NUExMSwgMHg1QkVCLCAweDVCRkEsIDB4NUMwNCwgMHg1REYzLCAweDVFMkIsIDB4NUY5OSwNCi0gICAgMHg2MDFELCAweDYzNjgsIDB4NjU5QywgMHg2NUFGLCAweDY3RjYsIDB4NjdGQiwgMHg2OEFELCAweDZCN0IsDQotICAgIDB4NkM5OSwgMHg2Q0Q3LCAweDZFMjMsIDB4NzAwOSwgMHg3MzQ1LCAweDc4MDIsIDB4NzkzRSwgMHg3OTQwLA0KLSAgICAweDc5NjAsIDB4NzlDMSwgMHg3QkU5LCAweDdEMTcsIDB4N0Q3MiwgMHg4MDg2LCAweDgyMEQsIDB4ODM4RSwNCi0gICAgMHg4NEQxLCAweDg2QzcsIDB4ODhERiwgMHg4QTUwLCAweDhBNUUsIDB4OEIxRCwgMHg4Q0RDLCAweDhENjYsDQotICAgIDB4OEZBRCwgMHg5MEFBLCAweDk4RkMsIDB4OTlERiwgMHg5RTlELCAweDUyNEEsIDB4NjcxNCwgMHg1MDk4LA0KLSAgICAweDUyMkEsIDB4NUM3MSwgMHg2NTYzLCAweDZDNTUsIDB4NzNDQSwgMHg3NTIzLCAweDc1OUQsIDB4N0I5NywNCi0gICAgMHg4NDlDLCAweDkxNzgsIDB4OTczMCwgMHg0RTc3LCAweDY0OTIsIDB4NkJCQSwgMHg3MTVFLCAweDg1QTksDQotICAgIDB4NEUwOSwgMHg2NzQ5LCAweDY4RUUsIDB4NkUxNywgMHg4MjlGLCAweDg1MTgsIDB4ODg2QiwgMHg2M0Y3LA0KLSAgICAweDZGODEsIDB4OTIxMiwgMHg5OEFGLCAweDRFMEEsIDB4NTBCNywgMHg1MENGLCAweDUxMUYsIDB4NTU0NiwNCi0gICAgMHg1NUFBLCAweDU2MTcsIDB4NUI0MCwgMHg1QzE5LCAweDVDRTAsIDB4NUUzOCwgMHg1RThBLCAweDVFQTAsDQotICAgIDB4NUVDMiwgMHg2MEYzLCAweDY4NTEsIDB4NkE2MSwgMHg2RTU4LCAweDcyM0QsIDB4NzI0MCwgMHg3MkMwLA0KLSAgICAweDc2RjgsIDB4Nzk2NSwgMHg3QkIxLCAweDdGRDQsIDB4ODhGMywgMHg4OUY0LCAweDhBNzMsIDB4OEM2MSwNCi0gICAgMHg4Q0RFLCAweDk3MUMsIDB4NTg1RSwgMHg3NEJELCAweDhDRkQsIDB4NTVDNywgMHg3QTYxLCAweDdEMjIsDQotICAgIDB4ODI3MiwgMHg3MjcyLCAweDc1MUYsIDB4NzUyNSwgMHg3QjE5LCAweDU4ODUsIDB4NThGQiwgMHg1REJDLA0KLSAgICAweDVFOEYsIDB4NUVCNiwgMHg1RjkwLCAweDYwNTUsIDB4NjI5MiwgMHg2MzdGLCAweDY1NEQsIDB4NjY5MSwNCi0gICAgMHg2NkQ5LCAweDY2RjgsIDB4NjgxNiwgMHg2OEYyLCAweDcyODAsIDB4NzQ1RSwgMHg3QjZFLCAweDdENkUsDQotICAgIDB4N0RENiwgMHg3RjcyLCAweDgwRTUsIDB4ODIxMiwgMHg4NUFGLCAweDg5N0YsIDB4OEE5MywgMHg5MDFELA0KLSAgICAweDkyRTQsIDB4OUVDRCwgMHg5RjIwLCAweDU5MTUsIDB4NTk2RCwgMHg1RTJELCAweDYwREMsIDB4NjYxNCwNCi0gICAgMHg2NjczLCAweDY3OTAsIDB4NkM1MCwgMHg2REM1LCAweDZGNUYsIDB4NzdGMywgMHg3OEE5LCAweDg0QzYsDQotICAgIDB4OTFDQiwgMHg5MzJCLCAweDRFRDksIDB4NTBDQSwgMHg1MTQ4LCAweDU1ODQsIDB4NUIwQiwgMHg1QkEzLA0KLSAgICAweDYyNDcsIDB4NjU3RSwgMHg2NUNCLCAweDZFMzIsIDB4NzE3RCwgMHg3NDAxLCAweDc0NDQsIDB4NzQ4NywNCi0gICAgMHg3NEJGLCAweDc2NkMsIDB4NzlBQSwgMHg3RERBLCAweDdFNTUsIDB4N0ZBOCwgMHg4MTdBLCAweDgxQjMsDQotICAgIDB4ODIzOSwgMHg4NjFBLCAweDg3RUMsIDB4OEE3NSwgMHg4REUzLCAweDkwNzgsIDB4OTI5MSwgMHg5NDI1LA0KLSAgICAweDk5NEQsIDB4OUJBRSwgMHg1MzY4LCAweDVDNTEsIDB4Njk1NCwgMHg2Q0M0LCAweDZEMjksIDB4NkUyQiwNCi0gICAgMHg4MjBDLCAweDg1OUIsIDB4ODkzQiwgMHg4QTJELCAweDhBQUEsIDB4OTZFQSwgMHg5RjY3LCAweDUyNjEsDQotICAgIDB4NjZCOSwgMHg2QkIyLCAweDdFOTYsIDB4ODdGRSwgMHg4RDBELCAweDk1ODMsIDB4OTY1RCwgMHg2NTFELA0KLSAgICAweDZEODksIDB4NzFFRSwgMHg1N0NFLCAweDU5RDMsIDB4NUJBQywgMHg2MDI3LCAweDYwRkEsIDB4NjIxMCwNCi0gICAgMHg2NjFGLCAweDY2NUYsIDB4NzMyOSwgMHg3M0Y5LCAweDc2REIsIDB4NzcwMSwgMHg3QjZDLCAweDgwNTYsDQotICAgIDB4ODA3MiwgMHg4MTY1LCAweDhBQTAsIDB4OTE5MiwgMHg0RTE2LCAweDUyRTIsIDB4NkI3MiwgMHg2RDE3LA0KLSAgICAweDdBMDUsIDB4N0IzOSwgMHg3RDMwLCAweDhDQjAsIDB4NTNFQywgMHg1NjJGLCAweDU4NTEsIDB4NUJCNSwNCi0gICAgMHg1QzBGLCAweDVDMTEsIDB4NURFMiwgMHg2MjQwLCAweDYzODMsIDB4NjQxNCwgMHg2NjJELCAweDY4QjMsDQotICAgIDB4NkNCQywgMHg2RDg4LCAweDZFQUYsIDB4NzAxRiwgMHg3MEE0LCAweDcxRDIsIDB4NzUyNiwgMHg3NThGLA0KLSAgICAweDc1OEUsIDB4NzYxOSwgMHg3QjExLCAweDdCRTAsIDB4N0MyQiwgMHg3RDIwLCAweDdEMzksIDB4ODUyQywNCi0gICAgMHg4NTZELCAweDg2MDcsIDB4OEEzNCwgMHg5MDBELCAweDkwNjEsIDB4OTBCNSwgMHg5MkI3LCAweDk3RjYsDQotICAgIDB4OUEzNywgMHg0RkQ3LCAweDVDNkMsIDB4Njc1RiwgMHg2RDkxLCAweDdDOUYsIDB4N0U4QywgMHg4QjE2LA0KLSAgICAweDhEMTYsIDB4OTAxRiwgMHg1QjZCLCAweDVERkQsIDB4NjQwRCwgMHg4NEMwLCAweDkwNUMsIDB4OThFMSwNCi0gICAgMHg3Mzg3LCAweDVCOEIsIDB4NjA5QSwgMHg2NzdFLCAweDZEREUsIDB4OEExRiwgMHg4QUE2LCAweDkwMDEsDQotICAgIDB4OTgwQywgMHg1MjM3LCAweDcwNTEsIDB4Nzg4RSwgMHg5Mzk2LCAweDg4NzAsIDB4OTFENywgMHg0RkVFLA0KLSAgICAweDUzRDcsIDB4NTVGRCwgMHg1NkRBLCAweDU3ODIsIDB4NThGRCwgMHg1QUMyLCAweDVCODgsIDB4NUNBQiwNCi0gICAgMHg1Q0MwLCAweDVFMjUsIDB4NjEwMSwgMHg2MjBELCAweDYyNEIsIDB4NjM4OCwgMHg2NDFDLCAweDY1MzYsDQotICAgIDB4NjU3OCwgMHg2QTM5LCAweDZCOEEsIDB4NkMzNCwgMHg2RDE5LCAweDZGMzEsIDB4NzFFNywgMHg3MkU5LA0KLSAgICAweDczNzgsIDB4NzQwNywgMHg3NEIyLCAweDc2MjYsIDB4Nzc2MSwgMHg3OUMwLCAweDdBNTcsIDB4N0FFQSwNCi0gICAgMHg3Q0I5LCAweDdEOEYsIDB4N0RBQywgMHg3RTYxLCAweDdGOUUsIDB4ODEyOSwgMHg4MzMxLCAweDg0OTAsDQotICAgIDB4ODREQSwgMHg4NUVBLCAweDg4OTYsIDB4OEFCMCwgMHg4QjkwLCAweDhGMzgsIDB4OTA0MiwgMHg5MDgzLA0KLSAgICAweDkxNkMsIDB4OTI5NiwgMHg5MkI5LCAweDk2OEIsIDB4OTZBNywgMHg5NkE4LCAweDk2RDYsIDB4OTcwMCwNCi0gICAgMHg5ODA4LCAweDk5OTYsIDB4OUFEMywgMHg5QjFBLCAweDUzRDQsIDB4NTg3RSwgMHg1OTE5LCAweDVCNzAsDQotICAgIDB4NUJCRiwgMHg2REQxLCAweDZGNUEsIDB4NzE5RiwgMHg3NDIxLCAweDc0QjksIDB4ODA4NSwgMHg4M0ZELA0KLSAgICAweDVERTEsIDB4NUY4NywgMHg1RkFBLCAweDYwNDIsIDB4NjVFQywgMHg2ODEyLCAweDY5NkYsIDB4NkE1MywNCi0gICAgMHg2Qjg5LCAweDZEMzUsIDB4NkRGMywgMHg3M0UzLCAweDc2RkUsIDB4NzdBQywgMHg3QjRELCAweDdEMTQsDQotICAgIDB4ODEyMywgMHg4MjFDLCAweDgzNDAsIDB4ODRGNCwgMHg4NTYzLCAweDhBNjIsIDB4OEFDNCwgMHg5MTg3LA0KLSAgICAweDkzMUUsIDB4OTgwNiwgMHg5OUI0LCAweDYyMEMsIDB4ODg1MywgMHg4RkYwLCAweDkyNjUsIDB4NUQwNywNCi0gICAgMHg1RDI3LCAweDVENjksIDB4NzQ1RiwgMHg4MTlELCAweDg3NjgsIDB4NkZENSwgMHg2MkZFLCAweDdGRDIsDQotICAgIDB4ODkzNiwgMHg4OTcyLCAweDRFMUUsIDB4NEU1OCwgMHg1MEU3LCAweDUyREQsIDB4NTM0NywgMHg2MjdGLA0KLSAgICAweDY2MDcsIDB4N0U2OSwgMHg4ODA1LCAweDk2NUUsIDB4NEY4RCwgMHg1MzE5LCAweDU2MzYsIDB4NTlDQiwNCi0gICAgMHg1QUE0LCAweDVDMzgsIDB4NUM0RSwgMHg1QzRELCAweDVFMDIsIDB4NUYxMSwgMHg2MDQzLCAweDY1QkQsDQotICAgIDB4NjYyRiwgMHg2NjQyLCAweDY3QkUsIDB4NjdGNCwgMHg3MzFDLCAweDc3RTIsIDB4NzkzQSwgMHg3RkM1LA0KLSAgICAweDg0OTQsIDB4ODRDRCwgMHg4OTk2LCAweDhBNjYsIDB4OEE2OSwgMHg4QUUxLCAweDhDNTUsIDB4OEM3QSwNCi0gICAgMHg1N0Y0LCAweDVCRDQsIDB4NUYwRiwgMHg2MDZGLCAweDYyRUQsIDB4NjkwRCwgMHg2Qjk2LCAweDZFNUMsDQotICAgIDB4NzE4NCwgMHg3QkQyLCAweDg3NTUsIDB4OEI1OCwgMHg4RUZFLCAweDk4REYsIDB4OThGRSwgMHg0RjM4LA0KLSAgICAweDRGODEsIDB4NEZFMSwgMHg1NDdCLCAweDVBMjAsIDB4NUJCOCwgMHg2MTNDLCAweDY1QjAsIDB4NjY2OCwNCi0gICAgMHg3MUZDLCAweDc1MzMsIDB4Nzk1RSwgMHg3RDMzLCAweDgxNEUsIDB4ODFFMywgMHg4Mzk4LCAweDg1QUEsDQotICAgIDB4ODVDRSwgMHg4NzAzLCAweDhBMEEsIDB4OEVBQiwgMHg4RjlCLCAweDhGQzUsIDB4NTkzMSwgMHg1QkE0LA0KLSAgICAweDVCRTYsIDB4NjA4OSwgMHg1QkU5LCAweDVDMEIsIDB4NUZDMywgMHg2QzgxLCAweDZERjEsIDB4NzAwQiwNCi0gICAgMHg3NTFBLCAweDgyQUYsIDB4OEFGNiwgMHg0RUMwLCAweDUzNDEsIDB4OTZEOSwgMHg2QzBGLCAweDRFOUUsDQotICAgIDB4NEZDNCwgMHg1MTUyLCAweDU1NUUsIDB4NUEyNSwgMHg1Q0U4LCAweDYyMTEsIDB4NzI1OSwgMHg4MkJELA0KLSAgICAweDgzQUEsIDB4ODZGRSwgMHg4ODU5LCAweDhBMUQsIDB4OTYzRiwgMHg5NkM1LCAweDk5MTMsIDB4OUQwOSwNCi0gICAgMHg5RDVELCAweDU4MEEsIDB4NUNCMywgMHg1REJELCAweDVFNDQsIDB4NjBFMSwgMHg2MTE1LCAweDYzRTEsDQotICAgIDB4NkEwMiwgMHg2RTI1LCAweDkxMDIsIDB4OTM1NCwgMHg5ODRFLCAweDlDMTAsIDB4OUY3NywgMHg1Qjg5LA0KLSAgICAweDVDQjgsIDB4NjMwOSwgMHg2NjRGLCAweDY4NDgsIDB4NzczQywgMHg5NkMxLCAweDk3OEQsIDB4OTg1NCwNCi0gICAgMHg5QjlGLCAweDY1QTEsIDB4OEIwMSwgMHg4RUNCLCAweDk1QkMsIDB4NTUzNSwgMHg1Q0E5LCAweDVERDYsDQotICAgIDB4NUVCNSwgMHg2Njk3LCAweDc2NEMsIDB4ODNGNCwgMHg5NUM3LCAweDU4RDMsIDB4NjJCQywgMHg3MkNFLA0KLSAgICAweDlEMjgsIDB4NEVGMCwgMHg1OTJFLCAweDYwMEYsIDB4NjYzQiwgMHg2QjgzLCAweDc5RTcsIDB4OUQyNiwNCi0gICAgMHg1MzkzLCAweDU0QzAsIDB4NTdDMywgMHg1RDE2LCAweDYxMUIsIDB4NjZENiwgMHg2REFGLCAweDc4OEQsDQotICAgIDB4ODI3RSwgMHg5Njk4LCAweDk3NDQsIDB4NTM4NCwgMHg2MjdDLCAweDYzOTYsIDB4NkRCMiwgMHg3RTBBLA0KLSAgICAweDgxNEIsIDB4OTg0RCwgMHg2QUZCLCAweDdGNEMsIDB4OURBRiwgMHg5RTFBLCAweDRFNUYsIDB4NTAzQiwNCi0gICAgMHg1MUI2LCAweDU5MUMsIDB4NjBGOSwgMHg2M0Y2LCAweDY5MzAsIDB4NzIzQSwgMHg4MDM2LCAweDkxQ0UsDQotICAgIDB4NUYzMSwgMHg3RDA0LCAweDgyRTUsIDB4ODQ2RiwgMHg4NEJCLCAweDg1RTUsIDB4OEU4RCwgMHg0RjZGLA0KLSAgICAweDU4RTQsIDB4NUI0MywgMHg2MDU5LCAweDYzREEsIDB4NjUxOCwgMHg2NTZELCAweDY2OTgsIDB4Njk0QSwNCi0gICAgMHg2QTIzLCAweDZEMEIsIDB4NzAwMSwgMHg3MTZDLCAweDc1RDIsIDB4NzYwRCwgMHg3OUIzLCAweDdBNzAsDQotICAgIDB4N0Y4QSwgMHg4OTQ0LCAweDhCOTMsIDB4OTFDMCwgMHg5NjdELCAweDk5MEEsIDB4NTcwNCwgMHg1RkExLA0KLSAgICAweDY1QkMsIDB4NkYwMSwgMHg3NjAwLCAweDc5QTYsIDB4OEE5RSwgMHg5OUFELCAweDlCNUEsIDB4OUY2QywNCi0gICAgMHg1MTA0LCAweDYxQjYsIDB4NjI5MSwgMHg2QThELCAweDgxQzYsIDB4NTA0MywgMHg1ODMwLCAweDVGNjYsDQotICAgIDB4NzEwOSwgMHg4QTAwLCAweDhBRkEsIDB4NUI3QywgMHg4NjE2LCAweDRGRkEsIDB4NTEzQywgMHg1NkI0LA0KLSAgICAweDU5NDQsIDB4NjNBOSwgMHg2REY5LCAweDVEQUEsIDB4Njk2RCwgMHg1MTg2LCAweDRFODgsIDB4NEY1OSwNCi0gICAgMHg1OTgyLCAweDZCNUYsIDB4NkM1RCwgMHg3NEI1LCAweDc5MTYsIDB4ODIwNywgMHg4MjQ1LCAweDgzMzksDQotICAgIDB4OEYzRiwgMHg4RjVELCAweDk5MTgsIDB4NEVBNiwgMHg1N0RGLCAweDVGNzksIDB4NjYxMywgMHg3NUFCLA0KLSAgICAweDdFNzksIDB4OEI2RiwgMHg5MDA2LCAweDlBNUIsIDB4NTZBNSwgMHg1ODI3LCAweDU5RjgsIDB4NUExRiwNCi0gICAgMHg1QkI0LCAweDVFRjYsIDB4NjM1MCwgMHg2MzNCLCAweDY5M0QsIDB4NkM4NywgMHg2Q0JGLCAweDZEOEUsDQotICAgIDB4NkQ5MywgMHg2REY1LCAweDZGMTQsIDB4NzBERiwgMHg3MTM2LCAweDcxNTksIDB4NzFDMywgMHg3MUQ1LA0KLSAgICAweDc4NEYsIDB4Nzg2RiwgMHg3Qjc1LCAweDdERTMsIDB4N0UyRiwgMHg4ODRELCAweDhFREYsIDB4OTI1QiwNCi0gICAgMHg5Q0Y2LCAweDYwODUsIDB4NkQ4NSwgMHg3MUIxLCAweDk1QjEsIDB4NTNBRCwgMHg2N0QzLCAweDcwOEUsDQotICAgIDB4NzEzMCwgMHg3NDMwLCAweDgyNzYsIDB4ODJEMiwgMHg5NUJCLCAweDlBRTUsIDB4OUU3RCwgMHg2NkM0LA0KLSAgICAweDcxQzEsIDB4ODQ0OSwgMHg1ODRCLCAweDVEQjgsIDB4NUY3MSwgMHg2NjIwLCAweDY2OEUsIDB4Njk3OSwNCi0gICAgMHg2OUFFLCAweDZDMzgsIDB4NkNGMywgMHg2RTM2LCAweDZGNDEsIDB4NkZEQSwgMHg3MDFCLCAweDcwMkYsDQotICAgIDB4NzE1MCwgMHg3MURGLCAweDczNzAsIDB4NzQ1QiwgMHg3NEQ0LCAweDc2QzgsIDB4N0E0RSwgMHg3RTkzLA0KLSAgICAweDgyRjEsIDB4OEE2MCwgMHg4RkNFLCAweDkzNDgsIDB4OTcxOSwgMHg0RTQyLCAweDUwMkEsIDB4NTIwOCwNCi0gICAgMHg1M0UxLCAweDY2RjMsIDB4NkM2RCwgMHg2RkNBLCAweDczMEEsIDB4Nzc3RiwgMHg3QTYyLCAweDgyQUUsDQotICAgIDB4ODVERCwgMHg4NjAyLCAweDg4RDQsIDB4OEE2MywgMHg4QjdELCAweDhDNkIsIDB4OTJCMywgMHg5NzEzLA0KLSAgICAweDk4MTAsIDB4NEU5NCwgMHg0RjBELCAweDRGQzksIDB4NTBCMiwgMHg1MzQ4LCAweDU0M0UsIDB4NTQzMywNCi0gICAgMHg1NURBLCAweDU4NjIsIDB4NThCQSwgMHg1OTY3LCAweDVBMUIsIDB4NUJFNCwgMHg2MDlGLCAweDYxQ0EsDQotICAgIDB4NjU1NiwgMHg2NUZGLCAweDY2NjQsIDB4NjhBNywgMHg2QzVBLCAweDZGQjMsIDB4NzBDRiwgMHg3MUFDLA0KLSAgICAweDczNTIsIDB4N0I3RCwgMHg4NzA4LCAweDhBQTQsIDB4OUMzMiwgMHg5RjA3LCAweDVDNEIsIDB4NkM4MywNCi0gICAgMHg3MzQ0LCAweDczODksIDB4OTIzQSwgMHg2RUFCLCAweDc0NjUsIDB4NzYxRiwgMHg3QTY5LCAweDdFMTUsDQotICAgIDB4ODYwQSwgMHg1MTQwLCAweDU4QzUsIDB4NjRDMSwgMHg3NEVFLCAweDc1MTUsIDB4NzY3MCwgMHg3RkMxLA0KLSAgICAweDkwOTUsIDB4OTZDRCwgMHg5OTU0LCAweDZFMjYsIDB4NzRFNiwgMHg3QUE5LCAweDdBQUEsIDB4ODFFNSwNCi0gICAgMHg4NkQ5LCAweDg3NzgsIDB4OEExQiwgMHg1QTQ5LCAweDVCOEMsIDB4NUI5QiwgMHg2OEExLCAweDY5MDAsDQotICAgIDB4NkQ2MywgMHg3M0E5LCAweDc0MTMsIDB4NzQyQywgMHg3ODk3LCAweDdERTksIDB4N0ZFQiwgMHg4MTE4LA0KLSAgICAweDgxNTUsIDB4ODM5RSwgMHg4QzRDLCAweDk2MkUsIDB4OTgxMSwgMHg2NkYwLCAweDVGODAsIDB4NjVGQSwNCi0gICAgMHg2Nzg5LCAweDZDNkEsIDB4NzM4QiwgMHg1MDJELCAweDVBMDMsIDB4NkI2QSwgMHg3N0VFLCAweDU5MTYsDQotICAgIDB4NUQ2QywgMHg1RENELCAweDczMjUsIDB4NzU0RiwgMHg1MEU1LCAweDUxRjksIDB4NTgyRiwgMHg1OTJELA0KLSAgICAweDU5OTYsIDB4NTlEQSwgMHg1QkU1LCAweDVEQTIsIDB4NjJENywgMHg2NDE2LCAweDY0OTMsIDB4NjRGRSwNCi0gICAgMHg2NkRDLCAweDZBNDgsIDB4NzFGRiwgMHg3NDY0LCAweDdBODgsIDB4N0FBRiwgMHg3RTQ3LCAweDdFNUUsDQotICAgIDB4ODAwMCwgMHg4MTcwLCAweDg3RUYsIDB4ODk4MSwgMHg4QjIwLCAweDkwNTksIDB4OTA4MCwgMHg5OTUyLA0KLSAgICAweDYxN0UsIDB4NkIzMiwgMHg2RDc0LCAweDdFMUYsIDB4ODkyNSwgMHg4RkIxLCAweDRGRDEsIDB4NTBBRCwNCi0gICAgMHg1MTk3LCAweDUyQzcsIDB4NTdDNywgMHg1ODg5LCAweDVCQjksIDB4NUVCOCwgMHg2MTQyLCAweDY5OTUsDQotICAgIDB4NkQ4QywgMHg2RTY3LCAweDZFQjYsIDB4NzE5NCwgMHg3NDYyLCAweDc1MjgsIDB4NzUyQywgMHg4MDczLA0KLSAgICAweDgzMzgsIDB4ODRDOSwgMHg4RTBBLCAweDkzOTQsIDB4OTNERSwgMHg0RThFLCAweDRGNTEsIDB4NTA3NiwNCi0gICAgMHg1MTJBLCAweDUzQzgsIDB4NTNDQiwgMHg1M0YzLCAweDVCODcsIDB4NUJEMywgMHg1QzI0LCAweDYxMUEsDQotICAgIDB4NjE4MiwgMHg2NUY0LCAweDcyNUIsIDB4NzM5NywgMHg3NDQwLCAweDc2QzIsIDB4Nzk1MCwgMHg3OTkxLA0KLSAgICAweDc5QjksIDB4N0QwNiwgMHg3RkJELCAweDgyOEIsIDB4ODVENSwgMHg4NjVFLCAweDhGQzIsIDB4OTA0NywNCi0gICAgMHg5MEY1LCAweDkxRUEsIDB4OTY4NSwgMHg5NkU4LCAweDk2RTksIDB4NTJENiwgMHg1RjY3LCAweDY1RUQsDQotICAgIDB4NjYzMSwgMHg2ODJGLCAweDcxNUMsIDB4N0EzNiwgMHg5MEMxLCAweDk4MEEsIDB4NEU5MSwgMHg2QTUyLA0KLSAgICAweDZCOUUsIDB4NkY5MCwgMHg3MTg5LCAweDgwMTgsIDB4ODJCOCwgMHg4NTUzLCAweDkwNEIsIDB4OTY5NSwNCi0gICAgMHg5NkYyLCAweDk3RkIsIDB4ODUxQSwgMHg5QjMxLCAweDRFOTAsIDB4NzE4QSwgMHg5NkM0LCAweDUxNDMsDQotICAgIDB4NTM5RiwgMHg1NEUxLCAweDU3MTMsIDB4NTcxMiwgMHg1N0EzLCAweDVBOUIsIDB4NUFDNCwgMHg1QkMzLA0KLSAgICAweDYwMjgsIDB4NjEzRiwgMHg2M0Y0LCAweDZDODUsIDB4NkQzOSwgMHg2RTcyLCAweDZFOTAsIDB4NzIzMCwNCi0gICAgMHg3MzNGLCAweDc0NTcsIDB4ODJEMSwgMHg4ODgxLCAweDhGNDUsIDB4OTA2MCwgMHg5NjYyLCAweDk4NTgsDQotICAgIDB4OUQxQiwgMHg2NzA4LCAweDhEOEEsIDB4OTI1RSwgMHg0RjRELCAweDUwNDksIDB4NTBERSwgMHg1MzcxLA0KLSAgICAweDU3MEQsIDB4NTlENCwgMHg1QTAxLCAweDVDMDksIDB4NjE3MCwgMHg2NjkwLCAweDZFMkQsIDB4NzIzMiwNCi0gICAgMHg3NDRCLCAweDdERUYsIDB4ODBDMywgMHg4NDBFLCAweDg0NjYsIDB4ODUzRiwgMHg4NzVGLCAweDg4NUIsDQotICAgIDB4ODkxOCwgMHg4QjAyLCAweDkwNTUsIDB4OTdDQiwgMHg5QjRGLCAweDRFNzMsIDB4NEY5MSwgMHg1MTEyLA0KLSAgICAweDUxNkEsIDB4NTUyRiwgMHg1NUE5LCAweDVCN0EsIDB4NUJBNSwgMHg1RTdDLCAweDVFN0QsIDB4NUVCRSwNCi0gICAgMHg2MEEwLCAweDYwREYsIDB4NjEwOCwgMHg2MTA5LCAweDYzQzQsIDB4NjUzOCwgMHg2NzA5LCAweDY3RDQsDQotICAgIDB4NjdEQSwgMHg2OTYxLCAweDY5NjIsIDB4NkNCOSwgMHg2RDI3LCAweDZFMzgsIDB4NkZFMSwgMHg3MzM2LA0KLSAgICAweDczMzcsIDB4NzQ1QywgMHg3NTMxLCAweDc2NTIsIDB4N0RBRCwgMHg4MUZFLCAweDg0MzgsIDB4ODhENSwNCi0gICAgMHg4QTk4LCAweDhBREIsIDB4OEFFRCwgMHg4RTMwLCAweDhFNDIsIDB4OTA0QSwgMHg5MDNFLCAweDkwN0EsDQotICAgIDB4OTE0OSwgMHg5MUM5LCAweDkzNkUsIDB4NTgwOSwgMHg2QkQzLCAweDgwODksIDB4ODBCMiwgMHg1MTQxLA0KLSAgICAweDU5NkIsIDB4NUMzOSwgMHg2RjY0LCAweDczQTcsIDB4ODBFNCwgMHg4RDA3LCAweDkyMTcsIDB4OTU4RiwNCi0gICAgMHg4MDdGLCAweDYyMEUsIDB4NzAxQywgMHg3RDY4LCAweDg3OEQsIDB4NTdBMCwgMHg2MDY5LCAweDYxNDcsDQotICAgIDB4NkJCNywgMHg4QUJFLCAweDkyODAsIDB4OTZCMSwgMHg0RTU5LCAweDU0MUYsIDB4NkRFQiwgMHg4NTJELA0KLSAgICAweDk2NzAsIDB4OTdGMywgMHg5OEVFLCAweDYzRDYsIDB4NkNFMywgMHg5MDkxLCAweDUxREQsIDB4NjFDOSwNCi0gICAgMHg4MUJBLCAweDlERjksIDB4NEY5RCwgMHg1MDFBLCAweDUxMDAsIDB4NUI5QywgMHg2MTBGLCAweDYxRkYsDQotICAgIDB4NjRFQywgMHg2OTA1LCAweDZCQzUsIDB4NzU5MSwgMHg3N0UzLCAweDdGQTksIDB4ODI2NCwgMHg4NThGLA0KLSAgICAweDg3RkIsIDB4ODg2MywgMHg4QUJDLCAweDhCNzAsIDB4OTFBQiwgMHg0RThDLCAweDRFRTUsIDB4NEYwQSwNCi0gICAgMHg1OTM3LCAweDU5RTgsIDB4NURGMiwgMHg1RjFCLCAweDVGNUIsIDB4NjAyMSwgMHg3MjNFLCAweDczRTUsDQotICAgIDB4NzU3MCwgMHg3NUNELCAweDc5RkIsIDB4ODAwQywgMHg4MDMzLCAweDgwODQsIDB4ODJFMSwgMHg4MzUxLA0KLSAgICAweDhDQkQsIDB4OENCMywgMHg5MDg3LCAweDk4RjQsIDB4OTkwQywgMHg3MDM3LCAweDc2Q0EsIDB4N0ZDQSwNCi0gICAgMHg3RkNDLCAweDdGRkMsIDB4OEIxQSwgMHg0RUJBLCAweDRFQzEsIDB4NTIwMywgMHg1MzcwLCAweDU0QkQsDQotICAgIDB4NTZFMCwgMHg1OUZCLCAweDVCQzUsIDB4NUYxNSwgMHg1RkNELCAweDZFNkUsIDB4N0Q2QSwgMHg4MzM1LA0KLSAgICAweDg2OTMsIDB4OEE4RCwgMHg5NzZELCAweDk3NzcsIDB4NEUwMCwgMHg0RjVBLCAweDRGN0UsIDB4NThGOSwNCi0gICAgMHg2NUU1LCAweDZFQTIsIDB4OTAzOCwgMHg5M0IwLCAweDk5QjksIDB4NEVGQiwgMHg1OEVDLCAweDU5OEEsDQotICAgIDB4NTlEOSwgMHg2MDQxLCAweDdBMTQsIDB4ODM0RiwgMHg4Q0MzLCAweDUxNjUsIDB4NTM0NCwgMHg0RUNELA0KLSAgICAweDUyNjksIDB4NUI1NSwgMHg4MkJGLCAweDRFRDQsIDB4NTIzQSwgMHg1NEE4LCAweDU5QzksIDB4NTlGRiwNCi0gICAgMHg1QjUwLCAweDVCNTcsIDB4NUI1QywgMHg2MDYzLCAweDYxNDgsIDB4NkVDQiwgMHg3MDk5LCAweDcxNkUsDQotICAgIDB4NzM4NiwgMHg3NEY3LCAweDc1QjUsIDB4NzhDMSwgMHg3RDJCLCAweDgwMDUsIDB4ODFFQSwgMHg4MzI4LA0KLSAgICAweDg1MTcsIDB4ODVDOSwgMHg4QUVFLCAweDhDQzcsIDB4OTZDQywgMHg0RjVDLCAweDUyRkEsIDB4NTZCQywNCi0gICAgMHg2NUFCLCAweDY2MjgsIDB4NzA3QywgMHg3MEI4LCAweDcyMzUsIDB4N0RCRCwgMHg4MjhELCAweDkxNEMsDQotICAgIDB4OTZDMCwgMHg5RDcyLCAweDVCNzEsIDB4NjhFNywgMHg2Qjk4LCAweDZGN0EsIDB4NzZERSwgMHg1QzkxLA0KLSAgICAweDY2QUIsIDB4NkY1QiwgMHg3QkI0LCAweDdDMkEsIDB4ODgzNiwgMHg5NkRDLCAweDRFMDgsIDB4NEVENywNCi0gICAgMHg1MzIwLCAweDU4MzQsIDB4NThCQiwgMHg1OEVGLCAweDU5NkMsIDB4NUMwNywgMHg1RTMzLCAweDVFODQsDQotICAgIDB4NUYzNSwgMHg2MzhDLCAweDY2QjIsIDB4Njc1NiwgMHg2QTFGLCAweDZBQTMsIDB4NkIwQywgMHg2RjNGLA0KLSAgICAweDcyNDYsIDB4NzM1MCwgMHg3NDhCLCAweDdBRTAsIDB4N0NBNywgMHg4MTc4LCAweDgxREYsIDB4ODFFNywNCi0gICAgMHg4MzhBLCAweDg0NkMsIDB4ODUyMywgMHg4NTk0LCAweDg1Q0YsIDB4ODhERCwgMHg4RDEzLCAweDkxQUMsDQotICAgIDB4OTU3NywgMHg5NjlDLCAweDUxOEQsIDB4NTRDOSwgMHg1NzI4LCAweDVCQjAsIDB4NjI0RCwgMHg2NzUwLA0KLSAgICAweDY4M0QsIDB4Njg5MywgMHg2RTNELCAweDZFRDMsIDB4NzA3RCwgMHg3RTIxLCAweDg4QzEsIDB4OENBMSwNCi0gICAgMHg4RjA5LCAweDlGNEIsIDB4OUY0RSwgMHg3MjJELCAweDdCOEYsIDB4OEFDRCwgMHg5MzFBLCAweDRGNDcsDQotICAgIDB4NEY0RSwgMHg1MTMyLCAweDU0ODAsIDB4NTlEMCwgMHg1RTk1LCAweDYyQjUsIDB4Njc3NSwgMHg2OTZFLA0KLSAgICAweDZBMTcsIDB4NkNBRSwgMHg2RTFBLCAweDcyRDksIDB4NzMyQSwgMHg3NUJELCAweDdCQjgsIDB4N0QzNSwNCi0gICAgMHg4MkU3LCAweDgzRjksIDB4ODQ1NywgMHg4NUY3LCAweDhBNUIsIDB4OENBRiwgMHg4RTg3LCAweDkwMTksDQotICAgIDB4OTBCOCwgMHg5NkNFLCAweDlGNUYsIDB4NTJFMywgMHg1NDBBLCAweDVBRTEsIDB4NUJDMiwgMHg2NDU4LA0KLSAgICAweDY1NzUsIDB4NkVGNCwgMHg3MkM0LCAweDc2ODQsIDB4N0E0RCwgMHg3QjFCLCAweDdDNEQsIDB4N0UzRSwNCi0gICAgMHg3RkRGLCAweDgzN0IsIDB4OEIyQiwgMHg4Q0NBLCAweDhENjQsIDB4OERFMSwgMHg4RTVGLCAweDhGRUEsDQotICAgIDB4OEZGOSwgMHg5MDY5LCAweDkzRDEsIDB4NEY0MywgMHg0RjdBLCAweDUwQjMsIDB4NTE2OCwgMHg1MTc4LA0KLSAgICAweDUyNEQsIDB4NTI2QSwgMHg1ODYxLCAweDU4N0MsIDB4NTk2MCwgMHg1QzA4LCAweDVDNTUsIDB4NUVEQiwNCi0gICAgMHg2MDlCLCAweDYyMzAsIDB4NjgxMywgMHg2QkJGLCAweDZDMDgsIDB4NkZCMSwgMHg3MTRFLCAweDc0MjAsDQotICAgIDB4NzUzMCwgMHg3NTM4LCAweDc1NTEsIDB4NzY3MiwgMHg3QjRDLCAweDdCOEIsIDB4N0JBRCwgMHg3QkM2LA0KLSAgICAweDdFOEYsIDB4OEE2RSwgMHg4RjNFLCAweDhGNDksIDB4OTIzRiwgMHg5MjkzLCAweDkzMjIsIDB4OTQyQiwNCi0gICAgMHg5NkZCLCAweDk4NUEsIDB4OTg2QiwgMHg5OTFFLCAweDUyMDcsIDB4NjIyQSwgMHg2Mjk4LCAweDZENTksDQotICAgIDB4NzY2NCwgMHg3QUNBLCAweDdCQzAsIDB4N0Q3NiwgMHg1MzYwLCAweDVDQkUsIDB4NUU5NywgMHg2RjM4LA0KLSAgICAweDcwQjksIDB4N0M5OCwgMHg5NzExLCAweDlCOEUsIDB4OUVERSwgMHg2M0E1LCAweDY0N0EsIDB4ODc3NiwNCi0gICAgMHg0RTAxLCAweDRFOTUsIDB4NEVBRCwgMHg1MDVDLCAweDUwNzUsIDB4NTQ0OCwgMHg1OUMzLCAweDVCOUEsDQotICAgIDB4NUU0MCwgMHg1RUFELCAweDVFRjcsIDB4NUY4MSwgMHg2MEM1LCAweDYzM0EsIDB4NjUzRiwgMHg2NTc0LA0KLSAgICAweDY1Q0MsIDB4NjY3NiwgMHg2Njc4LCAweDY3RkUsIDB4Njk2OCwgMHg2QTg5LCAweDZCNjMsIDB4NkM0MCwNCi0gICAgMHg2REMwLCAweDZERTgsIDB4NkUxRiwgMHg2RTVFLCAweDcwMUUsIDB4NzBBMSwgMHg3MzhFLCAweDczRkQsDQotICAgIDB4NzUzQSwgMHg3NzVCLCAweDc4ODcsIDB4Nzk4RSwgMHg3QTBCLCAweDdBN0QsIDB4N0NCRSwgMHg3RDhFLA0KLSAgICAweDgyNDcsIDB4OEEwMiwgMHg4QUVBLCAweDhDOUUsIDB4OTEyRCwgMHg5MTRBLCAweDkxRDgsIDB4OTI2NiwNCi0gICAgMHg5MkNDLCAweDkzMjAsIDB4OTcwNiwgMHg5NzU2LCAweDk3NUMsIDB4OTgwMiwgMHg5RjBFLCAweDUyMzYsDQotICAgIDB4NTI5MSwgMHg1NTdDLCAweDU4MjQsIDB4NUUxRCwgMHg1RjFGLCAweDYwOEMsIDB4NjNEMCwgMHg2OEFGLA0KLSAgICAweDZGREYsIDB4Nzk2RCwgMHg3QjJDLCAweDgxQ0QsIDB4ODVCQSwgMHg4OEZELCAweDhBRjgsIDB4OEU0NCwNCi0gICAgMHg5MThELCAweDk2NjQsIDB4OTY5QiwgMHg5NzNELCAweDk4NEMsIDB4OUY0QSwgMHg0RkNFLCAweDUxNDYsDQotICAgIDB4NTFDQiwgMHg1MkE5LCAweDU2MzIsIDB4NUYxNCwgMHg1RjZCLCAweDYzQUEsIDB4NjRDRCwgMHg2NUU5LA0KLSAgICAweDY2NDEsIDB4NjZGQSwgMHg2NkY5LCAweDY3MUQsIDB4Njg5RCwgMHg2OEQ3LCAweDY5RkQsIDB4NkYxNSwNCi0gICAgMHg2RjZFLCAweDcxNjcsIDB4NzFFNSwgMHg3MjJBLCAweDc0QUEsIDB4NzczQSwgMHg3OTU2LCAweDc5NUEsDQotICAgIDB4NzlERiwgMHg3QTIwLCAweDdBOTUsIDB4N0M5NywgMHg3Q0RGLCAweDdENDQsIDB4N0U3MCwgMHg4MDg3LA0KLSAgICAweDg1RkIsIDB4ODZBNCwgMHg4QTU0LCAweDhBQkYsIDB4OEQ5OSwgMHg4RTgxLCAweDkwMjAsIDB4OTA2RCwNCi0gICAgMHg5MUUzLCAweDk2M0IsIDB4OTZENSwgMHg5Q0U1LCAweDY1Q0YsIDB4N0MwNywgMHg4REIzLCAweDkzQzMsDQotICAgIDB4NUI1OCwgMHg1QzBBLCAweDUzNTIsIDB4NjJEOSwgMHg3MzFELCAweDUwMjcsIDB4NUI5NywgMHg1RjlFLA0KLSAgICAweDYwQjAsIDB4NjE2QiwgMHg2OEQ1LCAweDZERDksIDB4NzQyRSwgMHg3QTJFLCAweDdENDIsIDB4N0Q5QywNCi0gICAgMHg3RTMxLCAweDgxNkIsIDB4OEUyQSwgMHg4RTM1LCAweDkzN0UsIDB4OTQxOCwgMHg0RjUwLCAweDU3NTAsDQotICAgIDB4NURFNiwgMHg1RUE3LCAweDYzMkIsIDB4N0Y2QSwgMHg0RTNCLCAweDRGNEYsIDB4NEY4RiwgMHg1MDVBLA0KLSAgICAweDU5REQsIDB4ODBDNCwgMHg1NDZBLCAweDU0NjgsIDB4NTVGRSwgMHg1OTRGLCAweDVCOTksIDB4NURERSwNCi0gICAgMHg1RURBLCAweDY2NUQsIDB4NjczMSwgMHg2N0YxLCAweDY4MkEsIDB4NkNFOCwgMHg2RDMyLCAweDZFNEEsDQotICAgIDB4NkY4RCwgMHg3MEI3LCAweDczRTAsIDB4NzU4NywgMHg3QzRDLCAweDdEMDIsIDB4N0QyQywgMHg3REEyLA0KLSAgICAweDgyMUYsIDB4ODZEQiwgMHg4QTNCLCAweDhBODUsIDB4OEQ3MCwgMHg4RThBLCAweDhGMzMsIDB4OTAzMSwNCi0gICAgMHg5MTRFLCAweDkxNTIsIDB4OTQ0NCwgMHg5OUQwLCAweDdBRjksIDB4N0NBNSwgMHg0RkNBLCAweDUxMDEsDQotICAgIDB4NTFDNiwgMHg1N0M4LCAweDVCRUYsIDB4NUNGQiwgMHg2NjU5LCAweDZBM0QsIDB4NkQ1QSwgMHg2RTk2LA0KLSAgICAweDZGRUMsIDB4NzEwQywgMHg3NTZGLCAweDdBRTMsIDB4ODgyMiwgMHg5MDIxLCAweDkwNzUsIDB4OTZDQiwNCi0gICAgMHg5OUZGLCAweDgzMDEsIDB4NEUyRCwgMHg0RUYyLCAweDg4NDYsIDB4OTFDRCwgMHg1MzdELCAweDZBREIsDQotICAgIDB4Njk2QiwgMHg2QzQxLCAweDg0N0EsIDB4NTg5RSwgMHg2MThFLCAweDY2RkUsIDB4NjJFRiwgMHg3MERELA0KLSAgICAweDc1MTEsIDB4NzVDNywgMHg3RTUyLCAweDg0QjgsIDB4OEI0OSwgMHg4RDA4LCAweDRFNEIsIDB4NTNFQSwNCi0gICAgMHg1NEFCLCAweDU3MzAsIDB4NTc0MCwgMHg1RkQ3LCAweDYzMDEsIDB4NjMwNywgMHg2NDZGLCAweDY1MkYsDQotICAgIDB4NjVFOCwgMHg2NjdBLCAweDY3OUQsIDB4NjdCMywgMHg2QjYyLCAweDZDNjAsIDB4NkM5QSwgMHg2RjJDLA0KLSAgICAweDc3RTUsIDB4NzgyNSwgMHg3OTQ5LCAweDc5NTcsIDB4N0QxOSwgMHg4MEEyLCAweDgxMDIsIDB4ODFGMywNCi0gICAgMHg4MjlELCAweDgyQjcsIDB4ODcxOCwgMHg4QThDLCAweDhEMDQsIDB4OERCRSwgMHg5MDcyLCAweDc2RjQsDQotICAgIDB4N0ExOSwgMHg3QTM3LCAweDdFNTQsIDB4ODA3NywgMHg1NTA3LCAweDU1RDQsIDB4NTg3NSwgMHg2MzJGLA0KLSAgICAweDY0MjIsIDB4NjY0OSwgMHg2NjRCLCAweDY4NkQsIDB4Njk5QiwgMHg2Qjg0LCAweDZEMjUsIDB4NkVCMSwNCi0gICAgMHg3M0NELCAweDc0NjgsIDB4NzRBMSwgMHg3NTVCLCAweDc1QjksIDB4NzZFMSwgMHg3NzFFLCAweDc3OEIsDQotICAgIDB4NzlFNiwgMHg3RTA5LCAweDdFMUQsIDB4ODFGQiwgMHg4NTJGLCAweDg4OTcsIDB4OEEzQSwgMHg4Q0QxLA0KLSAgICAweDhFRUIsIDB4OEZCMCwgMHg5MDMyLCAweDkzQUQsIDB4OTY2MywgMHg5NjczLCAweDk3MDcsIDB4NEY4NCwNCi0gICAgMHg1M0YxLCAweDU5RUEsIDB4NUFDOSwgMHg1RTE5LCAweDY4NEUsIDB4NzRDNiwgMHg3NUJFLCAweDc5RTksDQotICAgIDB4N0E5MiwgMHg4MUEzLCAweDg2RUQsIDB4OENFQSwgMHg4RENDLCAweDhGRUQsIDB4NjU5RiwgMHg2NzE1LA0KLSAgICAweDU3RjcsIDB4NkY1NywgMHg3RERELCAweDhGMkYsIDB4OTNGNiwgMHg5NkM2LCAweDVGQjUsIDB4NjFGMiwNCi0gICAgMHg2Rjg0LCAweDRFMTQsIDB4NEY5OCwgMHg1MDFGLCAweDUzQzksIDB4NTVERiwgMHg1RDZGLCAweDVERUUsDQotICAgIDB4NkIyMSwgMHg2QjY0LCAweDc4Q0IsIDB4N0I5QSwgMHg4RTQ5LCAweDhFQ0EsIDB4OTA2RSwgMHg2MzQ5LA0KLSAgICAweDY0M0UsIDB4Nzc0MCwgMHg3QTg0LCAweDkzMkYsIDB4OTQ3RiwgMHg5RjZBLCAweDY0QjAsIDB4NkZBRiwNCi0gICAgMHg3MUU2LCAweDc0QTgsIDB4NzREQSwgMHg3QUM0LCAweDdDMTIsIDB4N0U4MiwgMHg3Q0IyLCAweDdFOTgsDQotICAgIDB4OEI5QSwgMHg4RDBBLCAweDk0N0QsIDB4OTkxMCwgMHg5OTRDLCAweDUyMzksIDB4NUJERiwgMHg2NEU2LA0KLSAgICAweDY3MkQsIDB4N0QyRSwgMHg1MEVELCAweDUzQzMsIDB4NTg3OSwgMHg2MTU4LCAweDYxNTksIDB4NjFGQSwNCi0gICAgMHg2NUFDLCAweDdBRDksIDB4OEI5MiwgMHg4Qjk2LCAweDUwMDksIDB4NTAyMSwgMHg1Mjc1LCAweDU1MzEsDQotICAgIDB4NUEzQywgMHg1RUUwLCAweDVGNzAsIDB4NjEzNCwgMHg2NTVFLCAweDY2MEMsIDB4NjYzNiwgMHg2NkEyLA0KLSAgICAweDY5Q0QsIDB4NkVDNCwgMHg2RjMyLCAweDczMTYsIDB4NzYyMSwgMHg3QTkzLCAweDgxMzksIDB4ODI1OSwNCi0gICAgMHg4M0Q2LCAweDg0QkMsIDB4NTBCNSwgMHg1N0YwLCAweDVCQzAsIDB4NUJFOCwgMHg1RjY5LCAweDYzQTEsDQotICAgIDB4NzgyNiwgMHg3REI1LCAweDgzREMsIDB4ODUyMSwgMHg5MUM3LCAweDkxRjUsIDB4NTE4QSwgMHg2N0Y1LA0KLSAgICAweDdCNTYsIDB4OENBQywgMHg1MUM0LCAweDU5QkIsIDB4NjBCRCwgMHg4NjU1LCAweDUwMUMsIDB4NTI1NCwNCi0gICAgMHg1QzNBLCAweDYxN0QsIDB4NjIxQSwgMHg2MkQzLCAweDY0RjIsIDB4NjVBNSwgMHg2RUNDLCAweDc2MjAsDQotICAgIDB4ODEwQSwgMHg4RTYwLCAweDk2NUYsIDB4OTZCQiwgMHg0RURGLCAweDUzNDMsIDB4NTU5OCwgMHg1OTI5LA0KLSAgICAweDVEREQsIDB4NjRDNSwgMHg2Q0M5LCAweDZERkEsIDB4NzM5NCwgMHg3QTdGLCAweDgyMUIsIDB4ODVBNiwNCi0gICAgMHg4Q0U0LCAweDhFMTAsIDB4OTA3NywgMHg5MUU3LCAweDk1RTEsIDB4OTYyMSwgMHg5N0M2LCAweDUxRjgsDQotICAgIDB4NTRGMiwgMHg1NTg2LCAweDVGQjksIDB4NjRBNCwgMHg2Rjg4LCAweDdEQjQsIDB4OEYxRiwgMHg4RjRELA0KLSAgICAweDk0MzUsIDB4NTBDOSwgMHg1QzE2LCAweDZDQkUsIDB4NkRGQiwgMHg3NTFCLCAweDc3QkIsIDB4N0MzRCwNCi0gICAgMHg3QzY0LCAweDhBNzksIDB4OEFDMiwgMHg1ODFFLCAweDU5QkUsIDB4NUUxNiwgMHg2Mzc3LCAweDcyNTIsDQotICAgIDB4NzU4QSwgMHg3NzZCLCAweDhBREMsIDB4OENCQywgMHg4RjEyLCAweDVFRjMsIDB4NjY3NCwgMHg2REY4LA0KLSAgICAweDgwN0QsIDB4ODNDMSwgMHg4QUNCLCAweDk3NTEsIDB4OUJENiwgMHg1MjQzLCAweDY2RkYsIDB4NkQ5NSwNCi0gICAgMHg2RUVGLCAweDdERTAsIDB4OEFFNiwgMHg5MDJFLCAweDkwNUUsIDB4OUFENCwgMHg1MjFELCAweDUyN0YsDQotICAgIDB4NTRFOCwgMHg2MTk0LCAweDYyODQsIDB4NjJEQiwgMHg2OEEyLCAweDY5MTIsIDB4Njk1QSwgMHg2QTM1LA0KLSAgICAweDcwOTIsIDB4NzEyNiwgMHg3ODVELCAweDc5MDEsIDB4NzkwRSwgMHg3OUQyLCAweDdBMEQsIDB4ODA5NiwNCi0gICAgMHg4Mjc4LCAweDgyRDUsIDB4ODM0OSwgMHg4NTQ5LCAweDhDODIsIDB4OEQ4NSwgMHg5MTYyLCAweDkxOEIsDQotICAgIDB4OTFBRSwgMHg0RkMzLCAweDU2RDEsIDB4NzFFRCwgMHg3N0Q3LCAweDg3MDAsIDB4ODlGOCwgMHg1QkY4LA0KLSAgICAweDVGRDYsIDB4Njc1MSwgMHg5MEE4LCAweDUzRTIsIDB4NTg1QSwgMHg1QkY1LCAweDYwQTQsIDB4NjE4MSwNCi0gICAgMHg2NDYwLCAweDdFM0QsIDB4ODA3MCwgMHg4NTI1LCAweDkyODMsIDB4NjRBRSwgMHg1MEFDLCAweDVEMTQsDQotICAgIDB4NjcwMCwgMHg1ODlDLCAweDYyQkQsIDB4NjNBOCwgMHg2OTBFLCAweDY5NzgsIDB4NkExRSwgMHg2RTZCLA0KLSAgICAweDc2QkEsIDB4NzlDQiwgMHg4MkJCLCAweDg0MjksIDB4OEFDRiwgMHg4REE4LCAweDhGRkQsIDB4OTExMiwNCi0gICAgMHg5MTRCLCAweDkxOUMsIDB4OTMxMCwgMHg5MzE4LCAweDkzOUEsIDB4OTZEQiwgMHg5QTM2LCAweDlDMEQsDQotICAgIDB4NEUxMSwgMHg3NTVDLCAweDc5NUQsIDB4N0FGQSwgMHg3QjUxLCAweDdCQzksIDB4N0UyRSwgMHg4NEM0LA0KLSAgICAweDhFNTksIDB4OEU3NCwgMHg4RUY4LCAweDkwMTAsIDB4NjYyNSwgMHg2OTNGLCAweDc0NDMsIDB4NTFGQSwNCi0gICAgMHg2NzJFLCAweDlFREMsIDB4NTE0NSwgMHg1RkUwLCAweDZDOTYsIDB4ODdGMiwgMHg4ODVELCAweDg4NzcsDQotICAgIDB4NjBCNCwgMHg4MUI1LCAweDg0MDMsIDB4OEQwNSwgMHg1M0Q2LCAweDU0MzksIDB4NTYzNCwgMHg1QTM2LA0KLSAgICAweDVDMzEsIDB4NzA4QSwgMHg3RkUwLCAweDgwNUEsIDB4ODEwNiwgMHg4MUVELCAweDhEQTMsIDB4OTE4OSwNCi0gICAgMHg5QTVGLCAweDlERjIsIDB4NTA3NCwgMHg0RUM0LCAweDUzQTAsIDB4NjBGQiwgMHg2RTJDLCAweDVDNjQsDQotICAgIDB4NEY4OCwgMHg1MDI0LCAweDU1RTQsIDB4NUNEOSwgMHg1RTVGLCAweDYwNjUsIDB4Njg5NCwgMHg2Q0JCLA0KLSAgICAweDZEQzQsIDB4NzFCRSwgMHg3NUQ0LCAweDc1RjQsIDB4NzY2MSwgMHg3QTFBLCAweDdBNDksIDB4N0RDNywNCi0gICAgMHg3REZCLCAweDdGNkUsIDB4ODFGNCwgMHg4NkE5LCAweDhGMUMsIDB4OTZDOSwgMHg5OUIzLCAweDlGNTIsDQotICAgIDB4NTI0NywgMHg1MkM1LCAweDk4RUQsIDB4ODlBQSwgMHg0RTAzLCAweDY3RDIsIDB4NkYwNiwgMHg0RkI1LA0KLSAgICAweDVCRTIsIDB4Njc5NSwgMHg2Qzg4LCAweDZENzgsIDB4NzQxQiwgMHg3ODI3LCAweDkxREQsIDB4OTM3QywNCi0gICAgMHg4N0M0LCAweDc5RTQsIDB4N0EzMSwgMHg1RkVCLCAweDRFRDYsIDB4NTRBNCwgMHg1NTNFLCAweDU4QUUsDQotICAgIDB4NTlBNSwgMHg2MEYwLCAweDYyNTMsIDB4NjJENiwgMHg2NzM2LCAweDY5NTUsIDB4ODIzNSwgMHg5NjQwLA0KLSAgICAweDk5QjEsIDB4OTlERCwgMHg1MDJDLCAweDUzNTMsIDB4NTU0NCwgMHg1NzdDLCAweDYyNTgsIDB4NjRFMiwNCi0gICAgMHg2NjZCLCAweDY3REQsIDB4NkZDMSwgMHg2RkVGLCAweDc0MjIsIDB4NzQzOCwgMHg4QTE3LCAweDk0MzgsDQotICAgIDB4NTQ1MSwgMHg1NjA2LCAweDU3NjYsIDB4NUY0OCwgMHg2MTlBLCAweDZCNEUsIDB4NzA1OCwgMHg3MEFELA0KLSAgICAweDdEQkIsIDB4OEE5NSwgMHg1OTZBLCAweDgxMkIsIDB4NjNBMiwgMHg3NzA4LCAweDgwM0QsIDB4OENBQSwNCi0gICAgMHg1ODU0LCAweDY0MkQsIDB4NjlCQiwgMHg1Qjk1LCAweDVFMTEsIDB4NkU2RiwgMHg4NTY5LCAweDUxNEMsDQotICAgIDB4NTNGMCwgMHg1OTJBLCAweDYwMjAsIDB4NjE0QiwgMHg2Qjg2LCAweDZDNzAsIDB4NkNGMCwgMHg3QjFFLA0KLSAgICAweDgwQ0UsIDB4ODJENCwgMHg4REM2LCAweDkwQjAsIDB4OThCMSwgMHg2NEM3LCAweDZGQTQsIDB4NjQ5MSwNCi0gICAgMHg2NTA0LCAweDUxNEUsIDB4NTQxMCwgMHg1NzFGLCAweDhBMEUsIDB4NjE1RiwgMHg2ODc2LCAweDc1REIsDQotICAgIDB4N0I1MiwgMHg3RDcxLCAweDkwMUEsIDB4NTgwNiwgMHg2OUNDLCAweDgxN0YsIDB4ODkyQSwgMHg5MDAwLA0KLSAgICAweDk4MzksIDB4NTA3OCwgMHg1OTU3LCAweDU5QUMsIDB4NjI5NSwgMHg5MDBGLCAweDlCMkEsIDB4NjE1RCwNCi0gICAgMHg3Mjc5LCAweDk1RDYsIDB4NTc2MSwgMHg1QTQ2LCAweDVERjQsIDB4NjI4QSwgMHg2NEFELCAweDY0RkEsDQotICAgIDB4Njc3NywgMHg2Q0UyLCAweDZEM0UsIDB4NzIyQywgMHg3NDM2LCAweDc4MzQsIDB4N0Y3NywgMHg4MkFELA0KLSAgICAweDhEREIsIDB4OTgxNywgMHg1MjI0LCAweDU3NDIsIDB4Njc3RiwgMHg3MjQ4LCAweDc0RTMsIDB4OENBOSwNCi0gICAgMHg4RkE2LCAweDkyMTEsIDB4OTYyQSwgMHg1MTZCLCAweDUzRUQsIDB4NjM0QywgMHg0RjY5LCAweDU1MDQsDQotICAgIDB4NjA5NiwgMHg2NTU3LCAweDZDOUIsIDB4NkQ3RiwgMHg3MjRDLCAweDcyRkQsIDB4N0ExNywgMHg4OTg3LA0KLSAgICAweDhDOUQsIDB4NUY2RCwgMHg2RjhFLCAweDcwRjksIDB4ODFBOCwgMHg2MTBFLCAweDRGQkYsIDB4NTA0RiwNCi0gICAgMHg2MjQxLCAweDcyNDcsIDB4N0JDNywgMHg3REU4LCAweDdGRTksIDB4OTA0RCwgMHg5N0FELCAweDlBMTksDQotICAgIDB4OENCNiwgMHg1NzZBLCAweDVFNzMsIDB4NjdCMCwgMHg4NDBELCAweDhBNTUsIDB4NTQyMCwgMHg1QjE2LA0KLSAgICAweDVFNjMsIDB4NUVFMiwgMHg1RjBBLCAweDY1ODMsIDB4ODBCQSwgMHg4NTNELCAweDk1ODksIDB4OTY1QiwNCi0gICAgMHg0RjQ4LCAweDUzMDUsIDB4NTMwRCwgMHg1MzBGLCAweDU0ODYsIDB4NTRGQSwgMHg1NzAzLCAweDVFMDMsDQotICAgIDB4NjAxNiwgMHg2MjlCLCAweDYyQjEsIDB4NjM1NSwgMHg2Q0UxLCAweDZENjYsIDB4NzVCMSwgMHg3ODMyLA0KLSAgICAweDgwREUsIDB4ODEyRiwgMHg4MkRFLCAweDg0NjEsIDB4ODRCMiwgMHg4ODhELCAweDg5MTIsIDB4OTAwQiwNCi0gICAgMHg5MkVBLCAweDk4RkQsIDB4OUI5MSwgMHg1RTQ1LCAweDY2QjQsIDB4NjZERCwgMHg3MDExLCAweDcyMDYsDQotICAgIDB4NEZGNSwgMHg1MjdELCAweDVGNkEsIDB4NjE1MywgMHg2NzUzLCAweDZBMTksIDB4NkYwMiwgMHg3NEUyLA0KLSAgICAweDc5NjgsIDB4ODg2OCwgMHg4Qzc5LCAweDk4QzcsIDB4OThDNCwgMHg5QTQzLCAweDU0QzEsIDB4N0ExRiwNCi0gICAgMHg2OTUzLCAweDhBRjcsIDB4OEM0QSwgMHg5OEE4LCAweDk5QUUsIDB4NUY3QywgMHg2MkFCLCAweDc1QjIsDQotICAgIDB4NzZBRSwgMHg4OEFCLCAweDkwN0YsIDB4OTY0MiwgMHg1MzM5LCAweDVGM0MsIDB4NUZDNSwgMHg2Q0NDLA0KLSAgICAweDczQ0MsIDB4NzU2MiwgMHg3NThCLCAweDdCNDYsIDB4ODJGRSwgMHg5OTlELCAweDRFNEYsIDB4OTAzQywNCi0gICAgMHg0RTBCLCAweDRGNTUsIDB4NTNBNiwgMHg1OTBGLCAweDVFQzgsIDB4NjYzMCwgMHg2Q0IzLCAweDc0NTUsDQotICAgIDB4ODM3NywgMHg4NzY2LCAweDhDQzAsIDB4OTA1MCwgMHg5NzFFLCAweDlDMTUsIDB4NThEMSwgMHg1Qjc4LA0KLSAgICAweDg2NTAsIDB4OEIxNCwgMHg5REI0LCAweDVCRDIsIDB4NjA2OCwgMHg2MDhELCAweDY1RjEsIDB4NkM1NywNCi0gICAgMHg2RjIyLCAweDZGQTMsIDB4NzAxQSwgMHg3RjU1LCAweDdGRjAsIDB4OTU5MSwgMHg5NTkyLCAweDk2NTAsDQotICAgIDB4OTdEMywgMHg1MjcyLCAweDhGNDQsIDB4NTFGRCwgMHg1NDJCLCAweDU0QjgsIDB4NTU2MywgMHg1NThBLA0KLSAgICAweDZBQkIsIDB4NkRCNSwgMHg3REQ4LCAweDgyNjYsIDB4OTI5QywgMHg5Njc3LCAweDlFNzksIDB4NTQwOCwNCi0gICAgMHg1NEM4LCAweDc2RDIsIDB4ODZFNCwgMHg5NUE0LCAweDk1RDQsIDB4OTY1QywgMHg0RUEyLCAweDRGMDksDQotICAgIDB4NTlFRSwgMHg1QUU2LCAweDVERjcsIDB4NjA1MiwgMHg2Mjk3LCAweDY3NkQsIDB4Njg0MSwgMHg2Qzg2LA0KLSAgICAweDZFMkYsIDB4N0YzOCwgMHg4MDlCLCAweDgyMkEsIDB4OTgwNSwgMHg0RUE1LCAweDUwNTUsIDB4NTRCMywNCi0gICAgMHg1NzkzLCAweDU5NUEsIDB4NUI2OSwgMHg1QkIzLCAweDYxQzgsIDB4Njk3NywgMHg2RDc3LCAweDcwMjMsDQotICAgIDB4ODdGOSwgMHg4OUUzLCAweDhBNzIsIDB4OEFFNywgMHg5MDgyLCAweDk5RUQsIDB4OUFCOCwgMHg1MkJFLA0KLSAgICAweDY4MzgsIDB4NTAxNiwgMHg1RTc4LCAweDY3NEYsIDB4ODM0NywgMHg4ODRDLCAweDRFQUIsIDB4NTQxMSwNCi0gICAgMHg1NkFFLCAweDczRTYsIDB4OTExNSwgMHg5N0ZGLCAweDk5MDksIDB4OTk1NywgMHg5OTk5LCAweDU2NTMsDQotICAgIDB4NTg5RiwgMHg4NjVCLCAweDhBMzEsIDB4NjFCMiwgMHg2QUY2LCAweDczN0IsIDB4OEVEMiwgMHg2QjQ3LA0KLSAgICAweDk2QUEsIDB4OUE1NywgMHg1OTU1LCAweDcyMDAsIDB4OEQ2QiwgMHg5NzY5LCAweDRGRDQsIDB4NUNGNCwNCi0gICAgMHg1RjI2LCAweDYxRjgsIDB4NjY1QiwgMHg2Q0VCLCAweDcwQUIsIDB4NzM4NCwgMHg3M0I5LCAweDczRkUsDQotICAgIDB4NzcyOSwgMHg3NzRELCAweDdENDMsIDB4N0Q2MiwgMHg3RTIzLCAweDgyMzcsIDB4ODg1MiwgMHg4Q0UyLA0KLSAgICAweDkyNDksIDB4OTg2RiwgMHg1QjUxLCAweDdBNzQsIDB4ODg0MCwgMHg5ODAxLCAweDVBQ0MsIDB4NEZFMCwNCi0gICAgMHg1MzU0LCAweDU5M0UsIDB4NUNGRCwgMHg2MzNFLCAweDZENzksIDB4NzJGOSwgMHg4MTA1LCAweDgxMDcsDQotICAgIDB4ODNBMiwgMHg5MkNGLCAweDk4MzAsIDB4NEVBOCwgMHg1MTQ0LCAweDUyMTEsIDB4NTc4QiwgMHg1RjYyLA0KLSAgICAweDZDQzIsIDB4NkVDRSwgMHg3MDA1LCAweDcwNTAsIDB4NzBBRiwgMHg3MTkyLCAweDczRTksIDB4NzQ2OSwNCi0gICAgMHg4MzRBLCAweDg3QTIsIDB4ODg2MSwgMHg5MDA4LCAweDkwQTIsIDB4OTNBMywgMHg5OUE4LCAweDUxNkUsDQotICAgIDB4NUY1NywgMHg2MEUwLCAweDYxNjcsIDB4NjZCMywgMHg4NTU5LCAweDhFNEEsIDB4OTFBRiwgMHg5NzhCLA0KLSAgICAweDRFNEUsIDB4NEU5MiwgMHg1NDdDLCAweDU4RDUsIDB4NThGQSwgMHg1OTdELCAweDVDQjUsIDB4NUYyNywNCi0gICAgMHg2MjM2LCAweDYyNDgsIDB4NjYwQSwgMHg2NjY3LCAweDZCRUIsIDB4NkQ2OSwgMHg2RENGLCAweDZFNTYsDQotICAgIDB4NkVGOCwgMHg2Rjk0LCAweDZGRTAsIDB4NkZFOSwgMHg3MDVELCAweDcyRDAsIDB4NzQyNSwgMHg3NDVBLA0KLSAgICAweDc0RTAsIDB4NzY5MywgMHg3OTVDLCAweDdDQ0EsIDB4N0UxRSwgMHg4MEUxLCAweDgyQTYsIDB4ODQ2QiwNCi0gICAgMHg4NEJGLCAweDg2NEUsIDB4ODY1RiwgMHg4Nzc0LCAweDhCNzcsIDB4OEM2QSwgMHg5M0FDLCAweDk4MDAsDQotICAgIDB4OTg2NSwgMHg2MEQxLCAweDYyMTYsIDB4OTE3NywgMHg1QTVBLCAweDY2MEYsIDB4NkRGNywgMHg2RTNFLA0KLSAgICAweDc0M0YsIDB4OUI0MiwgMHg1RkZELCAweDYwREEsIDB4N0IwRiwgMHg1NEM0LCAweDVGMTgsIDB4NkM1RSwNCi0gICAgMHg2Q0QzLCAweDZEMkEsIDB4NzBEOCwgMHg3RDA1LCAweDg2NzksIDB4OEEwQywgMHg5RDNCLCAweDUzMTYsDQotICAgIDB4NTQ4QywgMHg1QjA1LCAweDZBM0EsIDB4NzA2QiwgMHg3NTc1LCAweDc5OEQsIDB4NzlCRSwgMHg4MkIxLA0KLSAgICAweDgzRUYsIDB4OEE3MSwgMHg4QjQxLCAweDhDQTgsIDB4OTc3NCwgMHg2NEY0LCAweDY1MkIsIDB4NzhCQSwNCi0gICAgMHg3OEJCLCAweDdBNkIsIDB4NEUzOCwgMHg1NTlBLCAweDU5NTAsIDB4NUJBNiwgMHg1RTdCLCAweDYwQTMsDQotICAgIDB4NjNEQiwgMHg2QjYxLCAweDY2NjUsIDB4Njg1MywgMHg2RTE5LCAweDcxNjUsIDB4NzRCMCwgMHg3RDA4LA0KLSAgICAweDkwODQsIDB4OUE2OSwgMHg5QzI1LCAweDZEM0IsIDB4NkVEMSwgMHg3MzNFLCAweDhDNDEsIDB4OTVDQSwNCi0gICAgMHg1MUYwLCAweDVFNEMsIDB4NUZBOCwgMHg2MDRELCAweDYwRjYsIDB4NjEzMCwgMHg2MTRDLCAweDY2NDMsDQotICAgIDB4NjY0NCwgMHg2OUE1LCAweDZDQzEsIDB4NkU1RiwgMHg2RUM5LCAweDZGNjIsIDB4NzE0QywgMHg3NDlDLA0KLSAgICAweDc2ODcsIDB4N0JDMSwgMHg3QzI3LCAweDgzNTIsIDB4ODc1NywgMHg5MDUxLCAweDk2OEQsIDB4OUVDMywNCi0gICAgMHg1MzJGLCAweDU2REUsIDB4NUVGQiwgMHg1RjhBLCAweDYwNjIsIDB4NjA5NCwgMHg2MUY3LCAweDY2NjYsDQotICAgIDB4NjcwMywgMHg2QTlDLCAweDZERUUsIDB4NkZBRSwgMHg3MDcwLCAweDczNkEsIDB4N0U2QSwgMHg4MUJFLA0KLSAgICAweDgzMzQsIDB4ODZENCwgMHg4QUE4LCAweDhDQzQsIDB4NTI4MywgMHg3MzcyLCAweDVCOTYsIDB4NkE2QiwNCi0gICAgMHg5NDA0LCAweDU0RUUsIDB4NTY4NiwgMHg1QjVELCAweDY1NDgsIDB4NjU4NSwgMHg2NkM5LCAweDY4OUYsDQotICAgIDB4NkQ4RCwgMHg2REM2LCAweDcyM0IsIDB4ODBCNCwgMHg5MTc1LCAweDlBNEQsIDB4NEZBRiwgMHg1MDE5LA0KLSAgICAweDUzOUEsIDB4NTQwRSwgMHg1NDNDLCAweDU1ODksIDB4NTVDNSwgMHg1RTNGLCAweDVGOEMsIDB4NjczRCwNCi0gICAgMHg3MTY2LCAweDczREQsIDB4OTAwNSwgMHg1MkRCLCAweDUyRjMsIDB4NTg2NCwgMHg1OENFLCAweDcxMDQsDQotICAgIDB4NzE4RiwgMHg3MUZCLCAweDg1QjAsIDB4OEExMywgMHg2Njg4LCAweDg1QTgsIDB4NTVBNywgMHg2Njg0LA0KLSAgICAweDcxNEEsIDB4ODQzMSwgMHg1MzQ5LCAweDU1OTksIDB4NkJDMSwgMHg1RjU5LCAweDVGQkQsIDB4NjNFRSwNCi0gICAgMHg2Njg5LCAweDcxNDcsIDB4OEFGMSwgMHg4RjFELCAweDlFQkUsIDB4NEYxMSwgMHg2NDNBLCAweDcwQ0IsDQotICAgIDB4NzU2NiwgMHg4NjY3LCAweDYwNjQsIDB4OEI0RSwgMHg5REY4LCAweDUxNDcsIDB4NTFGNiwgMHg1MzA4LA0KLSAgICAweDZEMzYsIDB4ODBGOCwgMHg5RUQxLCAweDY2MTUsIDB4NkIyMywgMHg3MDk4LCAweDc1RDUsIDB4NTQwMywNCi0gICAgMHg1Qzc5LCAweDdEMDcsIDB4OEExNiwgMHg2QjIwLCAweDZCM0QsIDB4NkI0NiwgMHg1NDM4LCAweDYwNzAsDQotICAgIDB4NkQzRCwgMHg3RkQ1LCAweDgyMDgsIDB4NTBENiwgMHg1MURFLCAweDU1OUMsIDB4NTY2QiwgMHg1NkNELA0KLSAgICAweDU5RUMsIDB4NUIwOSwgMHg1RTBDLCAweDYxOTksIDB4NjE5OCwgMHg2MjMxLCAweDY2NUUsIDB4NjZFNiwNCi0gICAgMHg3MTk5LCAweDcxQjksIDB4NzFCQSwgMHg3MkE3LCAweDc5QTcsIDB4N0EwMCwgMHg3RkIyLCAweDhBNzAsDQotICAgIDB4MzAwMSwgMHgzMDAyLCAweDIwMjUsIDB4MDBBRCwgMHgyMDE1LCAweDIyMjUsIDB4RkY1RSwgMHgzMDE0LA0KLSAgICAweDMwMTUsIDB4MzAwOCwgMHgzMDA5LCAweDMwMEEsIDB4MzAwQiwgMHgzMDBDLCAweDMwMEQsIDB4MzAwRSwNCi0gICAgMHgzMDBGLCAweDMwMTAsIDB4MzAxMSwgMHgzMDEzLCAweEZGMDEsIDB4RkYwOCwgMHhGRjA5LCAweEZGMEMsDQotICAgIDB4RkYwRSwgMHhGRjFBLCAweEZGMUIsIDB4RkYxQywgMHhGRjFELCAweEZGMUUsIDB4RkYxRiwgMHhGRjNCLA0KLSAgICAweEZGM0QsIDB4RkYzRiwgMHhGRjVCLCAweEZGNUMsIDB4RkY1RCwgMHhGRjVFLCAweDAwMjAsIDB4MDAyMSwNCi0gICAgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywgMHgwMDI4LCAweDAwMjksDQotICAgIDB4MDAyQSwgMHgwMDJCLCAweDAwMkMsIDB4MDAyRCwgMHgwMDJFLCAweDAwMkYsIDB4MDAzMCwgMHgwMDMxLA0KLSAgICAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LCAweDAwMzgsIDB4MDAzOSwNCi0gICAgMHgwMDNBLCAweDAwM0IsIDB4MDAzQywgMHgwMDNELCAweDAwM0UsIDB4MDAzRiwgMHgwMDQwLCAweDAwNDEsDQotICAgIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsIDB4MDA0OCwgMHgwMDQ5LA0KLSAgICAweDAwNEEsIDB4MDA0QiwgMHgwMDRDLCAweDAwNEQsIDB4MDA0RSwgMHgwMDRGLCAweDAwNTAsIDB4MDA1MSwNCi0gICAgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywgMHgwMDU4LCAweDAwNTksDQotICAgIDB4MDA1QSwgMHgwMDVCLCAweDAwNUMsIDB4MDA1RCwgMHgwMDVFLCAweDAwNUYsIDB4MDA2MCwgMHgwMDYxLA0KLSAgICAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LCAweDAwNjgsIDB4MDA2OSwNCi0gICAgMHgwMDZBLCAweDAwNkIsIDB4MDA2QywgMHgwMDZELCAweDAwNkUsIDB4MDA2RiwgMHgwMDcwLCAweDAwNzEsDQotICAgIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsIDB4MDA3OCwgMHgwMDc5LA0KLSAgICAweDAwN0EsIDB4MDA3QiwgMHgwMDdDLCAweDAwN0QsIDB4MjAzRSwgMHgwMDdFLCAweDAwNUMsIDB4MjMxQywNCi0gICAgMHgyMzFGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MzAwRSwgMHgzMDBGLCAweDMwMEEsDQotICAgIDB4MzAwQiwgMHgzMDA4LCAweDMwMDksIDB4MDAyOCwgMHgwMDI5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDI4LA0KLSAgICAweDAwMjksIDB4MDAyOCwgMHgwMDI5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDI4LCAweDAwMjksIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDMwMTYsIDB4MzAxNywgMHgzMDE2LCAweDMwMTcsIDB4MzAxOCwgMHgzMDE5LCAweDAwNUIsDQotICAgIDB4MDA1RCwgMHgwMDAwLCAweDAwMDAsIDB4MjYzRSwgMHgyNjNELCAweDIwMjEsIDB4MjAyMSwgMHgyMDIwLA0KLSAgICAweDIwMjEsIDB4MDAwMCwgMHgyMjE3LCAweDAwMDAsIDB4MDAwMCwgMHgyMDFGLCAweDIwMUIsIDB4MDJENiwNCi0gICAgMHgwMkQ3LCAweDAwRDcsIDB4MjIxRSwgMHgwMDAwLCAweDAwQjEsIDB4MjIxMywgMHgwMDNFLCAweDAwM0MsDQotICAgIDB4MDAzRCwgMHgyMjYwLCAweDIwN0QsIDB4MjA3RSwgMHgwMDdCLCAweDAwN0QsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDIyMjksIDB4MjIyQSwgMHgyMjgyLCAweDIyMDgsIDB4MDNBMywgMHgwMDIxLCAweDAwMDAsIDB4MzAyMSwNCi0gICAgMHgzMDIyLCAweDMwMjMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4NEUwMywgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4NTM0MSwgMHgwMDAwLCAweDAwMDAsIDB4MDAyNywgMHgzMDE0LCAweDMwMTUsIDB4MDAyQSwgMHgwMDAwLA0KLSAgICAweDIyMTcsIDB4MDAyQSwgMHhDRENELCAweDMwMDEsIDB4MzAwMiwgMHgwMDI4LCAweDAwMjksIDB4MDAyOCwNCi0gICAgMHgwMDI5LCAweDAwMjgsIDB4MDAyOSwgMHgzMDE2LCAweDMwMTcsIDB4MzAxMCwgMHgzMDExLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLA0KLSAgICAweDIwREUsIDB4MjBERSwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwNCi0gICAgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MDBCNiwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MjJFRiwgMHgyMjM3LCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLA0KLSAgICAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwNCi0gICAgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgyNzhBLCAweDI3OEIsDQotICAgIDB4Mjc4QywgMHgyNzhELCAweDI3OEUsIDB4Mjc4RiwgMHgyNzkwLCAweDI3OTEsIDB4Mjc5MiwgMHgyNzkzLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksDQotICAgIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LA0KLSAgICAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwNCi0gICAgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDI0QjYsIDB4MjRCNywgMHgyNEI4LCAweDI0QjksDQotICAgIDB4MjRCQSwgMHgyNEJCLCAweDI0QkMsIDB4MjRCRCwgMHgyNEJFLCAweDI0QkYsIDB4MjRDMCwgMHgyNEMxLA0KLSAgICAweDI0QzIsIDB4MjRDMywgMHgyNEM0LCAweDI0QzUsIDB4MjRDNiwgMHgyNEM3LCAweDI0QzgsIDB4MjRDOSwNCi0gICAgMHgyNENBLCAweDI0Q0IsIDB4MjRDQywgMHgyNENELCAweDI0Q0UsIDB4MjRDRiwgMHgyMERFLCAweDIwREUsDQotICAgIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgwMDVELA0KLSAgICAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwNCi0gICAgMHgwMDVELCAweDAwNUQsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsDQotICAgIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELA0KLSAgICAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIyQ0YsIDB4MjJDRSwgMHgyMkNGLCAweDIyQ0UsIDB4MjI4MCwNCi0gICAgMHgyMjgxLCAweDIyNzAsIDB4MjI3MSwgMHgyMjcyLCAweDIyNzMsIDB4MDAwMCwgMHgyMjhBLCAweDAwMDAsDQotICAgIDB4MjI4QiwgMHgyMjc2LCAweDIyNzcsIDB4MjI3OSwgMHgyMkRBLCAweDIyREIsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgyMjIxLCAweDIyNDUsIDB4MjI0MywgMHgyMjQ4LCAweDAwMDAsIDB4MjJBNCwNCi0gICAgMHgyMkFCLCAweDAwMDAsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsDQotICAgIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgwMDAwLCAweDI0NjAsIDB4MjQ2MSwgMHgyNDYyLA0KLSAgICAweDI0NjMsIDB4MjQ2NCwgMHgyNDY1LCAweDI0NjYsIDB4MjQ2NywgMHgyNDY4LCAweDAwMjksIDB4MDAyOSwNCi0gICAgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksDQotICAgIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LA0KLSAgICAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwNCi0gICAgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksDQotICAgIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LA0KLSAgICAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwNCi0gICAgMHgwMDI5LCAweDAwMjksIDB4MDAyMSwgMHgwMEIwLCAweDAwMjcsIDB4MDAyMiwgMHgyMDM0LCAweDAwMjksDQotICAgIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAwMCwgMHgwMDAwLCAweDIwMjAsIDB4MjAyMCwgMHgyMDIxLA0KLSAgICAweDIwMjAsIDB4MDBBNywgMHgwMDIzLCAweDAwMkEsIDB4MDAyQSwgMHgwMDAwLCAweDAwMDAsIDB4MjA0MiwNCi0gICAgMHgwMDJBLCAweDAwMDAsIDB4MDAwMCwgMHgyMDQyLCAweDAwMkEsIDB4MDAwMCwgMHgwMDAwLCAweDIwMjIsDQotICAgIDB4MjBERiwgMHgyMERGLCAweDAwMDAsIDB4MjBERiwgMHgzMDA4LCAweDMwMDksIDB4MzAwQSwgMHgzMDBCLA0KLSAgICAweDI2MUMsIDB4MjYxRSwgMHgwMDAwLCAweDAwMDAsIDB4MjBERSwgMHgwMDAwLCAweDIwREUsIDB4MjBERSwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwREQsIDB4MjBERCwgMHgyNzFBLCAweDI3MTYsDQotICAgIDB4MDAwMCwgMHgyNUVGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyNUNDLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwQTksIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDI2MkYsIDB4MDAwMCwgMHgyNjJGLCAweDI2MkYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MzAyMCwNCi0gICAgMHgwMDAwLCAweDI3NzYsIDB4Mjc3NywgMHgyNzc4LCAweDI3NzksIDB4Mjc3QSwgMHgyNzdCLCAweDI3N0MsDQotICAgIDB4Mjc3RCwgMHgyNzdFLCAweDI3N0YsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwNCi0gICAgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgyNjQyLCAweDIyQTksIDB4MzAzNiwgMHgyNUNCLCAweDI1RDMsDQotICAgIDB4MjVBMSwgMHgyMzAyLCAweDAwMDAsIDB4MjVBRCwgMHgyNUFELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDI1QzcsIDB4MDAwMCwgMHgwMDAwLCAweDIyMDYsIDB4MjJCRiwgMHgyMzFFLCAweDAwMDAsIDB4MjIyNSwNCi0gICAgMHgyMjI2LCAweDAwMDAsIDB4MjI1MywgMHgyMjUxLCAweDIyNjYsIDB4MjI2NywgMHgyMjEzLCAweDIyOTUsDQotICAgIDB4MjI5NiwgMHgyMjk3LCAweDIwREQsIDB4MjMxNCwgMHgwMDAwLCAweDAwMDAsIDB4MjI2MiwgMHgwMDAwLA0KLSAgICAweDI1QjEsIDB4MDAwMCwgMHgyMjIyLCAweDIyNTAsIDB4MDBEOCwgMHgyMzRBLCAweDIyQTMsIDB4MDMzOCwNCi0gICAgMHgwMDAwLCAweDIyNkUsIDB4MjI2RiwgMHgyMjg1LCAweDIyODQsIDB4MjIwOSwgMHgyMjBDLCAweDIyQkIsDQotICAgIDB4MDAxNiwgMHgyMjVBLCAweDIzMDYsIDB4MDAyNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MzI5RSwgMHgwMDAwLCAweDIwM0MsIDB4MDAzRiwgMHgwMDAwLCAweDAwM0YsIDB4MjJDNCwNCi0gICAgMHgyNUM3LCAweDIyQzQsIDB4MjVDNiwgMHgyNUFCLCAweDI1QTEsIDB4MjVBQiwgMHgyNUEwLCAweDI1RTYsDQotICAgIDB4MjVDQiwgMHgyNUU2LCAweDI1Q0YsIDB4MjVCRCwgMHgyNUIzLCAweDI1QjcsIDB4MjVDMSwgMHgyNzI2LA0KLSAgICAweDI1Q0YsIDB4MjVBMCwgMHgwMDAwLCAweDI1Q0EsIDB4MzIzMSwgMHgzMjM5LCAweDMzQ0IsIDB4MjQ4MywNCi0gICAgMHgyNDk0LCAweDI0OTUsIDB4MjQ5NiwgMHgyNDk3LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksDQotICAgIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MjE5MiwgMHgyMTkwLA0KLSAgICAweDIxOTEsIDB4MjE5MywgMHgyMTk2LCAweDIxOTcsIDB4MjE5OCwgMHgyMTk5LCAweDIxRDAsIDB4MjFDRiwNCi0gICAgMHgyMUNELCAweDIxRDQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgyNzk0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyNzlDLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgyN0JBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjFEMSwgMHgyMUQzLA0KLSAgICAweDAwMDAsIDB4Mjc5RSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyNzlFLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgyMUI1LCAweDIxQjEsIDB4MDAwMCwgMHgyMUI0LCAweDIxQjAsIDB4MjFCMywgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDIxRTYsIDB4MjFFOCwgMHgyMUU3LCAweDIxRTksIDB4MjFCQywgMHgyMUMwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MjFDMCwgMHgyMUJDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MjFDNCwgMHgyMUM1LCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLA0KLSAgICAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwNCi0gICAgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsDQotICAgIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLA0KLSAgICAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwNCi0gICAgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsDQotICAgIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsIDB4MjBERSwgMHgyMERFLA0KLSAgICAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwNCi0gICAgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsDQotICAgIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLA0KLSAgICAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwNCi0gICAgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsDQotICAgIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLA0KLSAgICAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwNCi0gICAgMHgyMERFLCAweDIwREUsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsDQotICAgIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELA0KLSAgICAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwNCi0gICAgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsDQotICAgIDB4MjBERCwgMHgyMERELCAweDI0ODMsIDB4MjQ4NCwgMHgyNDg1LCAweDI0ODYsIDB4MjQ4NywgMHgwMDI5LA0KLSAgICAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgyMERELCAweDIwREQsIDB4MjBERCwNCi0gICAgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsDQotICAgIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELA0KLSAgICAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwNCi0gICAgMHgzMjk0LCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsDQotICAgIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELA0KLSAgICAweDMyQTUsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwNCi0gICAgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsDQotICAgIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELA0KLSAgICAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwNCi0gICAgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsDQotICAgIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELA0KLSAgICAweDIwREQsIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4Mjc5NCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjFFMCwgMHgyMUUxLA0KLSAgICAweDIxRTIsIDB4MjFFMywgMHgwMDAwLCAweDI3QTEsIDB4MDAwMCwgMHgwMDAwLCAweDIxRTYsIDB4MjFFOCwNCi0gICAgMHgyMUU3LCAweDIxRTksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDI2MUQsIDB4MjYxRiwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsDQotICAgIDB4MjBERCwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLA0KLSAgICAweDIwREUsIDB4MjBERSwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwNCi0gICAgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MjBERSwgMHgyMERFLCAweDIwREUsDQotICAgIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgwMDVELA0KLSAgICAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwNCi0gICAgMHgwMDVELCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsDQotICAgIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELA0KLSAgICAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgyMERFLCAweDIwREUsIDB4MjBERSwNCi0gICAgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDMyOTAsIDB4MzI4QSwgMHgzMjhCLCAweDMyOEMsDQotICAgIDB4MzI4RCwgMHgzMjhFLCAweDMyOEYsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLA0KLSAgICAweDIwREUsIDB4MjBERSwgMHgzMDBDLCAweDMwMEQsIDB4MzAwRSwgMHgzMDBGLCAweDIxRTgsIDB4MjFFNiwNCi0gICAgMHgyMUU3LCAweDIxRTksIDB4MDAyMiwgMHgzMDFGLCAweDMwMUQsIDB4MjAzNiwgMHgwMDYwLCAweDMwMDEsDQotICAgIDB4MDAwMCwgMHgwMDIxLCAweDMwMjEsIDB4MDAyQywgMHgzMDAyLCAweEFDMDIsIDB4QUMwMywgMHhBQzA1LA0KLSAgICAweEFDMDYsIDB4QUMwQiwgMHhBQzBDLCAweEFDMEQsIDB4QUMwRSwgMHhBQzBGLCAweEFDMTgsIDB4QUMxRSwNCi0gICAgMHhBQzFGLCAweEFDMjEsIDB4QUMyMiwgMHhBQzIzLCAweEFDMjUsIDB4QUMyNiwgMHhBQzI3LCAweEFDMjgsDQotICAgIDB4QUMyOSwgMHhBQzJBLCAweEFDMkIsIDB4QUMyRSwgMHhBQzMyLCAweEFDMzMsIDB4QUMzNCwgMHhBQzM1LA0KLSAgICAweEFDMzYsIDB4QUMzNywgMHhBQzNBLCAweEFDM0IsIDB4QUMzRCwgMHhBQzNFLCAweEFDM0YsIDB4QUM0MSwNCi0gICAgMHhBQzQyLCAweEFDNDMsIDB4QUM0NCwgMHhBQzQ1LCAweEFDNDYsIDB4QUM0NywgMHhBQzQ4LCAweEFDNDksDQotICAgIDB4QUM0QSwgMHhBQzRDLCAweEFDNEUsIDB4QUM0RiwgMHhBQzUwLCAweEFDNTEsIDB4QUM1MiwgMHhBQzUzLA0KLSAgICAweEFDNTUsIDB4QUM1NiwgMHhBQzU3LCAweEFDNTksIDB4QUM1QSwgMHhBQzVCLCAweEFDNUQsIDB4QUM1RSwNCi0gICAgMHhBQzVGLCAweEFDNjAsIDB4QUM2MSwgMHhBQzYyLCAweEFDNjMsIDB4QUM2NCwgMHhBQzY1LCAweEFDNjYsDQotICAgIDB4QUM2NywgMHhBQzY4LCAweEFDNjksIDB4QUM2QSwgMHhBQzZCLCAweEFDNkMsIDB4QUM2RCwgMHhBQzZFLA0KLSAgICAweEFDNkYsIDB4QUM3MiwgMHhBQzczLCAweEFDNzUsIDB4QUM3NiwgMHhBQzc5LCAweEFDN0IsIDB4QUM3QywNCi0gICAgMHhBQzdELCAweEFDN0UsIDB4QUM3RiwgMHhBQzgyLCAweEFDODcsIDB4QUM4OCwgMHhBQzhELCAweEFDOEUsDQotICAgIDB4QUM4RiwgMHhBQzkxLCAweEFDOTIsIDB4QUM5MywgMHhBQzk1LCAweEFDOTYsIDB4QUM5NywgMHhBQzk4LA0KLSAgICAweEFDOTksIDB4QUM5QSwgMHhBQzlCLCAweEFDOUUsIDB4QUNBMiwgMHhBQ0EzLCAweEFDQTQsIDB4QUNBNSwNCi0gICAgMHhBQ0E2LCAweEFDQTcsIDB4QUNBQiwgMHhBQ0FELCAweEFDQUUsIDB4QUNCMSwgMHhBQ0IyLCAweEFDQjMsDQotICAgIDB4QUNCNCwgMHhBQ0I1LCAweEFDQjYsIDB4QUNCNywgMHhBQ0JBLCAweEFDQkUsIDB4QUNCRiwgMHhBQ0MwLA0KLSAgICAweEFDQzIsIDB4QUNDMywgMHhBQ0M1LCAweEFDQzYsIDB4QUNDNywgMHhBQ0M5LCAweEFDQ0EsIDB4QUNDQiwNCi0gICAgMHhBQ0NELCAweEFDQ0UsIDB4QUNDRiwgMHhBQ0QwLCAweEFDRDEsIDB4QUNEMiwgMHhBQ0QzLCAweEFDRDQsDQotICAgIDB4QUNENiwgMHhBQ0Q4LCAweEFDRDksIDB4QUNEQSwgMHhBQ0RCLCAweEFDREMsIDB4QUNERCwgMHhBQ0RFLA0KLSAgICAweEFDREYsIDB4QUNFMiwgMHhBQ0UzLCAweEFDRTUsIDB4QUNFNiwgMHhBQ0U5LCAweEFDRUIsIDB4QUNFRCwNCi0gICAgMHhBQ0VFLCAweEFDRjIsIDB4QUNGNCwgMHhBQ0Y3LCAweEFDRjgsIDB4QUNGOSwgMHhBQ0ZBLCAweEFDRkIsDQotICAgIDB4QUNGRSwgMHhBQ0ZGLCAweEFEMDEsIDB4QUQwMiwgMHhBRDAzLCAweEFEMDUsIDB4QUQwNywgMHhBRDA4LA0KLSAgICAweEFEMDksIDB4QUQwQSwgMHhBRDBCLCAweEFEMEUsIDB4QUQxMCwgMHhBRDEyLCAweEFEMTMsIDB4QUQxNCwNCi0gICAgMHhBRDE1LCAweEFEMTYsIDB4QUQxNywgMHhBRDE5LCAweEFEMUEsIDB4QUQxQiwgMHhBRDFELCAweEFEMUUsDQotICAgIDB4QUQxRiwgMHhBRDIxLCAweEFEMjIsIDB4QUQyMywgMHhBRDI0LCAweEFEMjUsIDB4QUQyNiwgMHhBRDI3LA0KLSAgICAweEFEMjgsIDB4QUQyQSwgMHhBRDJCLCAweEFEMkUsIDB4QUQyRiwgMHhBRDMwLCAweEFEMzEsIDB4QUQzMiwNCi0gICAgMHhBRDMzLCAweEFEMzYsIDB4QUQzNywgMHhBRDM5LCAweEFEM0EsIDB4QUQzQiwgMHhBRDNELCAweEFEM0UsDQotICAgIDB4QUQzRiwgMHhBRDQwLCAweEFENDEsIDB4QUQ0MiwgMHhBRDQzLCAweEFENDYsIDB4QUQ0OCwgMHhBRDRBLA0KLSAgICAweEFENEIsIDB4QUQ0QywgMHhBRDRELCAweEFENEUsIDB4QUQ0RiwgMHhBRDUxLCAweEFENTIsIDB4QUQ1MywNCi0gICAgMHhBRDU1LCAweEFENTYsIDB4QUQ1NywgMHhBRDU5LCAweEFENUEsIDB4QUQ1QiwgMHhBRDVDLCAweEFENUQsDQotICAgIDB4QUQ1RSwgMHhBRDVGLCAweEFENjAsIDB4QUQ2MiwgMHhBRDY0LCAweEFENjUsIDB4QUQ2NiwgMHhBRDY3LA0KLSAgICAweEFENjgsIDB4QUQ2OSwgMHhBRDZBLCAweEFENkIsIDB4QUQ2RSwgMHhBRDZGLCAweEFENzEsIDB4QUQ3MiwNCi0gICAgMHhBRDc3LCAweEFENzgsIDB4QUQ3OSwgMHhBRDdBLCAweEFEN0UsIDB4QUQ4MCwgMHhBRDgzLCAweEFEODQsDQotICAgIDB4QUQ4NSwgMHhBRDg2LCAweEFEODcsIDB4QUQ4QSwgMHhBRDhCLCAweEFEOEQsIDB4QUQ4RSwgMHhBRDhGLA0KLSAgICAweEFEOTEsIDB4QUQ5MiwgMHhBRDkzLCAweEFEOTQsIDB4QUQ5NSwgMHhBRDk2LCAweEFEOTcsIDB4QUQ5OCwNCi0gICAgMHhBRDk5LCAweEFEOUEsIDB4QUQ5QiwgMHhBRDlFLCAweEFEOUYsIDB4QURBMCwgMHhBREExLCAweEFEQTIsDQotICAgIDB4QURBMywgMHhBREE1LCAweEFEQTYsIDB4QURBNywgMHhBREE4LCAweEFEQTksIDB4QURBQSwgMHhBREFCLA0KLSAgICAweEFEQUMsIDB4QURBRCwgMHhBREFFLCAweEFEQUYsIDB4QURCMCwgMHhBREIxLCAweEFEQjIsIDB4QURCMywNCi0gICAgMHhBREI0LCAweEFEQjUsIDB4QURCNiwgMHhBREI4LCAweEFEQjksIDB4QURCQSwgMHhBREJCLCAweEFEQkMsDQotICAgIDB4QURCRCwgMHhBREJFLCAweEFEQkYsIDB4QURDMiwgMHhBREMzLCAweEFEQzUsIDB4QURDNiwgMHhBREM3LA0KLSAgICAweEFEQzksIDB4QURDQSwgMHhBRENCLCAweEFEQ0MsIDB4QURDRCwgMHhBRENFLCAweEFEQ0YsIDB4QUREMiwNCi0gICAgMHhBREQ0LCAweEFERDUsIDB4QURENiwgMHhBREQ3LCAweEFERDgsIDB4QUREOSwgMHhBRERBLCAweEFEREIsDQotICAgIDB4QURERCwgMHhBRERFLCAweEFEREYsIDB4QURFMSwgMHhBREUyLCAweEFERTMsIDB4QURFNSwgMHhBREU2LA0KLSAgICAweEFERTcsIDB4QURFOCwgMHhBREU5LCAweEFERUEsIDB4QURFQiwgMHhBREVDLCAweEFERUQsIDB4QURFRSwNCi0gICAgMHhBREVGLCAweEFERjAsIDB4QURGMSwgMHhBREYyLCAweEFERjMsIDB4QURGNCwgMHhBREY1LCAweEFERjYsDQotICAgIDB4QURGNywgMHhBREZBLCAweEFERkIsIDB4QURGRCwgMHhBREZFLCAweEFFMDIsIDB4QUUwMywgMHhBRTA0LA0KLSAgICAweEFFMDUsIDB4QUUwNiwgMHhBRTA3LCAweEFFMEEsIDB4QUUwQywgMHhBRTBFLCAweEFFMEYsIDB4QUUxMCwNCi0gICAgMHhBRTExLCAweEFFMTIsIDB4QUUxMywgMHhBRTE1LCAweEFFMTYsIDB4QUUxNywgMHhBRTE4LCAweEFFMTksDQotICAgIDB4QUUxQSwgMHhBRTFCLCAweEFFMUMsIDB4QUUxRCwgMHhBRTFFLCAweEFFMUYsIDB4QUUyMCwgMHhBRTIxLA0KLSAgICAweEFFMjIsIDB4QUUyMywgMHhBRTI0LCAweEFFMjUsIDB4QUUyNiwgMHhBRTI3LCAweEFFMjgsIDB4QUUyOSwNCi0gICAgMHhBRTJBLCAweEFFMkIsIDB4QUUyQywgMHhBRTJELCAweEFFMkUsIDB4QUUyRiwgMHhBRTMyLCAweEFFMzMsDQotICAgIDB4QUUzNSwgMHhBRTM2LCAweEFFMzksIDB4QUUzQiwgMHhBRTNDLCAweEFFM0QsIDB4QUUzRSwgMHhBRTNGLA0KLSAgICAweEFFNDIsIDB4QUU0NCwgMHhBRTQ3LCAweEFFNDgsIDB4QUU0OSwgMHhBRTRCLCAweEFFNEYsIDB4QUU1MSwNCi0gICAgMHhBRTUyLCAweEFFNTMsIDB4QUU1NSwgMHhBRTU3LCAweEFFNTgsIDB4QUU1OSwgMHhBRTVBLCAweEFFNUIsDQotICAgIDB4QUU1RSwgMHhBRTYyLCAweEFFNjMsIDB4QUU2NCwgMHhBRTY2LCAweEFFNjcsIDB4QUU2QSwgMHhBRTZCLA0KLSAgICAweEFFNkQsIDB4QUU2RSwgMHhBRTZGLCAweEFFNzEsIDB4QUU3MiwgMHhBRTczLCAweEFFNzQsIDB4QUU3NSwNCi0gICAgMHhBRTc2LCAweEFFNzcsIDB4QUU3QSwgMHhBRTdFLCAweEFFN0YsIDB4QUU4MCwgMHhBRTgxLCAweEFFODIsDQotICAgIDB4QUU4MywgMHhBRTg2LCAweEFFODcsIDB4QUU4OCwgMHhBRTg5LCAweEFFOEEsIDB4QUU4QiwgMHhBRThELA0KLSAgICAweEFFOEUsIDB4QUU4RiwgMHhBRTkwLCAweEFFOTEsIDB4QUU5MiwgMHhBRTkzLCAweEFFOTQsIDB4QUU5NSwNCi0gICAgMHhBRTk2LCAweEFFOTcsIDB4QUU5OCwgMHhBRTk5LCAweEFFOUEsIDB4QUU5QiwgMHhBRTlDLCAweEFFOUQsDQotICAgIDB4QUU5RSwgMHhBRTlGLCAweEFFQTAsIDB4QUVBMSwgMHhBRUEyLCAweEFFQTMsIDB4QUVBNCwgMHhBRUE1LA0KLSAgICAweEFFQTYsIDB4QUVBNywgMHhBRUE4LCAweEFFQTksIDB4QUVBQSwgMHhBRUFCLCAweEFFQUMsIDB4QUVBRCwNCi0gICAgMHhBRUFFLCAweEFFQUYsIDB4QUVCMCwgMHhBRUIxLCAweEFFQjIsIDB4QUVCMywgMHhBRUI0LCAweEFFQjUsDQotICAgIDB4QUVCNiwgMHhBRUI3LCAweEFFQjgsIDB4QUVCOSwgMHhBRUJBLCAweEFFQkIsIDB4QUVCRiwgMHhBRUMxLA0KLSAgICAweEFFQzIsIDB4QUVDMywgMHhBRUM1LCAweEFFQzYsIDB4QUVDNywgMHhBRUM4LCAweEFFQzksIDB4QUVDQSwNCi0gICAgMHhBRUNCLCAweEFFQ0UsIDB4QUVEMiwgMHhBRUQzLCAweEFFRDQsIDB4QUVENSwgMHhBRUQ2LCAweEFFRDcsDQotICAgIDB4QUVEQSwgMHhBRURCLCAweEFFREQsIDB4QUVERSwgMHhBRURGLCAweEFFRTAsIDB4QUVFMSwgMHhBRUUyLA0KLSAgICAweEFFRTMsIDB4QUVFNCwgMHhBRUU1LCAweEFFRTYsIDB4QUVFNywgMHhBRUU5LCAweEFFRUEsIDB4QUVFQywNCi0gICAgMHhBRUVFLCAweEFFRUYsIDB4QUVGMCwgMHhBRUYxLCAweEFFRjIsIDB4QUVGMywgMHhBRUY1LCAweEFFRjYsDQotICAgIDB4QUVGNywgMHhBRUY5LCAweEFFRkEsIDB4QUVGQiwgMHhBRUZELCAweEFFRkUsIDB4QUVGRiwgMHhBRjAwLA0KLSAgICAweEFGMDEsIDB4QUYwMiwgMHhBRjAzLCAweEFGMDQsIDB4QUYwNSwgMHhBRjA2LCAweEFGMDksIDB4QUYwQSwNCi0gICAgMHhBRjBCLCAweEFGMEMsIDB4QUYwRSwgMHhBRjBGLCAweEFGMTEsIDB4QUYxMiwgMHhBRjEzLCAweEFGMTQsDQotICAgIDB4QUYxNSwgMHhBRjE2LCAweEFGMTcsIDB4QUYxOCwgMHhBRjE5LCAweEFGMUEsIDB4QUYxQiwgMHhBRjFDLA0KLSAgICAweEFGMUQsIDB4QUYxRSwgMHhBRjFGLCAweEFGMjAsIDB4QUYyMSwgMHhBRjIyLCAweEFGMjMsIDB4QUYyNCwNCi0gICAgMHhBRjI1LCAweEFGMjYsIDB4QUYyNywgMHhBRjI4LCAweEFGMjksIDB4QUYyQSwgMHhBRjJCLCAweEFGMkUsDQotICAgIDB4QUYyRiwgMHhBRjMxLCAweEFGMzMsIDB4QUYzNSwgMHhBRjM2LCAweEFGMzcsIDB4QUYzOCwgMHhBRjM5LA0KLSAgICAweEFGM0EsIDB4QUYzQiwgMHhBRjNFLCAweEFGNDAsIDB4QUY0NCwgMHhBRjQ1LCAweEFGNDYsIDB4QUY0NywNCi0gICAgMHhBRjRBLCAweEFGNEIsIDB4QUY0QywgMHhBRjRELCAweEFGNEUsIDB4QUY0RiwgMHhBRjUxLCAweEFGNTIsDQotICAgIDB4QUY1MywgMHhBRjU0LCAweEFGNTUsIDB4QUY1NiwgMHhBRjU3LCAweEFGNTgsIDB4QUY1OSwgMHhBRjVBLA0KLSAgICAweEFGNUIsIDB4QUY1RSwgMHhBRjVGLCAweEFGNjAsIDB4QUY2MSwgMHhBRjYyLCAweEFGNjMsIDB4QUY2NiwNCi0gICAgMHhBRjY3LCAweEFGNjgsIDB4QUY2OSwgMHhBRjZBLCAweEFGNkIsIDB4QUY2QywgMHhBRjZELCAweEFGNkUsDQotICAgIDB4QUY2RiwgMHhBRjcwLCAweEFGNzEsIDB4QUY3MiwgMHhBRjczLCAweEFGNzQsIDB4QUY3NSwgMHhBRjc2LA0KLSAgICAweEFGNzcsIDB4QUY3OCwgMHhBRjdBLCAweEFGN0IsIDB4QUY3QywgMHhBRjdELCAweEFGN0UsIDB4QUY3RiwNCi0gICAgMHhBRjgxLCAweEFGODIsIDB4QUY4MywgMHhBRjg1LCAweEFGODYsIDB4QUY4NywgMHhBRjg5LCAweEFGOEEsDQotICAgIDB4QUY4QiwgMHhBRjhDLCAweEFGOEQsIDB4QUY4RSwgMHhBRjhGLCAweEFGOTIsIDB4QUY5MywgMHhBRjk0LA0KLSAgICAweEFGOTYsIDB4QUY5NywgMHhBRjk4LCAweEFGOTksIDB4QUY5QSwgMHhBRjlCLCAweEFGOUQsIDB4QUY5RSwNCi0gICAgMHhBRjlGLCAweEFGQTAsIDB4QUZBMSwgMHhBRkEyLCAweEFGQTMsIDB4QUZBNCwgMHhBRkE1LCAweEFGQTYsDQotICAgIDB4QUZBNywgMHhBRkE4LCAweEFGQTksIDB4QUZBQSwgMHhBRkFCLCAweEFGQUMsIDB4QUZBRCwgMHhBRkFFLA0KLSAgICAweEFGQUYsIDB4QUZCMCwgMHhBRkIxLCAweEFGQjIsIDB4QUZCMywgMHhBRkI0LCAweEFGQjUsIDB4QUZCNiwNCi0gICAgMHhBRkI3LCAweEFGQkEsIDB4QUZCQiwgMHhBRkJELCAweEFGQkUsIDB4QUZCRiwgMHhBRkMxLCAweEFGQzIsDQotICAgIDB4QUZDMywgMHhBRkM0LCAweEFGQzUsIDB4QUZDNiwgMHhBRkNBLCAweEFGQ0MsIDB4QUZDRiwgMHhBRkQwLA0KLSAgICAweEFGRDEsIDB4QUZEMiwgMHhBRkQzLCAweEFGRDUsIDB4QUZENiwgMHhBRkQ3LCAweEFGRDgsIDB4QUZEOSwNCi0gICAgMHhBRkRBLCAweEFGREIsIDB4QUZERCwgMHhBRkRFLCAweEFGREYsIDB4QUZFMCwgMHhBRkUxLCAweEFGRTIsDQotICAgIDB4QUZFMywgMHhBRkU0LCAweEFGRTUsIDB4QUZFNiwgMHhBRkU3LCAweEFGRUEsIDB4QUZFQiwgMHhBRkVDLA0KLSAgICAweEFGRUQsIDB4QUZFRSwgMHhBRkVGLCAweEFGRjIsIDB4QUZGMywgMHhBRkY1LCAweEFGRjYsIDB4QUZGNywNCi0gICAgMHhBRkY5LCAweEFGRkEsIDB4QUZGQiwgMHhBRkZDLCAweEFGRkQsIDB4QUZGRSwgMHhBRkZGLCAweEIwMDIsDQotICAgIDB4QjAwMywgMHhCMDA1LCAweEIwMDYsIDB4QjAwNywgMHhCMDA4LCAweEIwMDksIDB4QjAwQSwgMHhCMDBCLA0KLSAgICAweEIwMEQsIDB4QjAwRSwgMHhCMDBGLCAweEIwMTEsIDB4QjAxMiwgMHhCMDEzLCAweEIwMTUsIDB4QjAxNiwNCi0gICAgMHhCMDE3LCAweEIwMTgsIDB4QjAxOSwgMHhCMDFBLCAweEIwMUIsIDB4QjAxRSwgMHhCMDFGLCAweEIwMjAsDQotICAgIDB4QjAyMSwgMHhCMDIyLCAweEIwMjMsIDB4QjAyNCwgMHhCMDI1LCAweEIwMjYsIDB4QjAyNywgMHhCMDI5LA0KLSAgICAweEIwMkEsIDB4QjAyQiwgMHhCMDJDLCAweEIwMkQsIDB4QjAyRSwgMHhCMDJGLCAweEIwMzAsIDB4QjAzMSwNCi0gICAgMHhCMDMyLCAweEIwMzMsIDB4QjAzNCwgMHhCMDM1LCAweEIwMzYsIDB4QjAzNywgMHhCMDM4LCAweEIwMzksDQotICAgIDB4QjAzQSwgMHhCMDNCLCAweEIwM0MsIDB4QjAzRCwgMHhCMDNFLCAweEIwM0YsIDB4QjA0MCwgMHhCMDQxLA0KLSAgICAweEIwNDIsIDB4QjA0MywgMHhCMDQ2LCAweEIwNDcsIDB4QjA0OSwgMHhCMDRCLCAweEIwNEQsIDB4QjA0RiwNCi0gICAgMHhCMDUwLCAweEIwNTEsIDB4QjA1MiwgMHhCMDU2LCAweEIwNTgsIDB4QjA1QSwgMHhCMDVCLCAweEIwNUMsDQotICAgIDB4QjA1RSwgMHhCMDVGLCAweEIwNjAsIDB4QjA2MSwgMHhCMDYyLCAweEIwNjMsIDB4QjA2NCwgMHhCMDY1LA0KLSAgICAweEIwNjYsIDB4QjA2NywgMHhCMDY4LCAweEIwNjksIDB4QjA2QSwgMHhCMDZCLCAweEIwNkMsIDB4QjA2RCwNCi0gICAgMHhCMDZFLCAweEIwNkYsIDB4QjA3MCwgMHhCMDcxLCAweEIwNzIsIDB4QjA3MywgMHhCMDc0LCAweEIwNzUsDQotICAgIDB4QjA3NiwgMHhCMDc3LCAweEIwNzgsIDB4QjA3OSwgMHhCMDdBLCAweEIwN0IsIDB4QjA3RSwgMHhCMDdGLA0KLSAgICAweEIwODEsIDB4QjA4MiwgMHhCMDgzLCAweEIwODUsIDB4QjA4NiwgMHhCMDg3LCAweEIwODgsIDB4QjA4OSwNCi0gICAgMHhCMDhBLCAweEIwOEIsIDB4QjA4RSwgMHhCMDkwLCAweEIwOTIsIDB4QjA5MywgMHhCMDk0LCAweEIwOTUsDQotICAgIDB4QjA5NiwgMHhCMDk3LCAweEIwOUIsIDB4QjA5RCwgMHhCMDlFLCAweEIwQTMsIDB4QjBBNCwgMHhCMEE1LA0KLSAgICAweEIwQTYsIDB4QjBBNywgMHhCMEFBLCAweEIwQjAsIDB4QjBCMiwgMHhCMEI2LCAweEIwQjcsIDB4QjBCOSwNCi0gICAgMHhCMEJBLCAweEIwQkIsIDB4QjBCRCwgMHhCMEJFLCAweEIwQkYsIDB4QjBDMCwgMHhCMEMxLCAweEIwQzIsDQotICAgIDB4QjBDMywgMHhCMEM2LCAweEIwQ0EsIDB4QjBDQiwgMHhCMENDLCAweEIwQ0QsIDB4QjBDRSwgMHhCMENGLA0KLSAgICAweEIwRDIsIDB4QjBEMywgMHhCMEQ1LCAweEIwRDYsIDB4QjBENywgMHhCMEQ5LCAweEIwREEsIDB4QjBEQiwNCi0gICAgMHhCMERDLCAweEIwREQsIDB4QjBERSwgMHhCMERGLCAweEIwRTEsIDB4QjBFMiwgMHhCMEUzLCAweEIwRTQsDQotICAgIDB4QjBFNiwgMHhCMEU3LCAweEIwRTgsIDB4QjBFOSwgMHhCMEVBLCAweEIwRUIsIDB4QjBFQywgMHhCMEVELA0KLSAgICAweEIwRUUsIDB4QjBFRiwgMHhCMEYwLCAweEIwRjEsIDB4QjBGMiwgMHhCMEYzLCAweEIwRjQsIDB4QjBGNSwNCi0gICAgMHhCMEY2LCAweEIwRjcsIDB4QjBGOCwgMHhCMEY5LCAweEIwRkEsIDB4QjBGQiwgMHhCMEZDLCAweEIwRkQsDQotICAgIDB4QjBGRSwgMHhCMEZGLCAweEIxMDAsIDB4QjEwMSwgMHhCMTAyLCAweEIxMDMsIDB4QjEwNCwgMHhCMTA1LA0KLSAgICAweEIxMDYsIDB4QjEwNywgMHhCMTBBLCAweEIxMEQsIDB4QjEwRSwgMHhCMTBGLCAweEIxMTEsIDB4QjExNCwNCi0gICAgMHhCMTE1LCAweEIxMTYsIDB4QjExNywgMHhCMTFBLCAweEIxMUUsIDB4QjExRiwgMHhCMTIwLCAweEIxMjEsDQotICAgIDB4QjEyMiwgMHhCMTI2LCAweEIxMjcsIDB4QjEyOSwgMHhCMTJBLCAweEIxMkIsIDB4QjEyRCwgMHhCMTJFLA0KLSAgICAweEIxMkYsIDB4QjEzMCwgMHhCMTMxLCAweEIxMzIsIDB4QjEzMywgMHhCMTM2LCAweEIxM0EsIDB4QjEzQiwNCi0gICAgMHhCMTNDLCAweEIxM0QsIDB4QjEzRSwgMHhCMTNGLCAweEIxNDIsIDB4QjE0MywgMHhCMTQ1LCAweEIxNDYsDQotICAgIDB4QjE0NywgMHhCMTQ5LCAweEIxNEEsIDB4QjE0QiwgMHhCMTRDLCAweEIxNEQsIDB4QjE0RSwgMHhCMTRGLA0KLSAgICAweEIxNTIsIDB4QjE1MywgMHhCMTU2LCAweEIxNTcsIDB4QjE1OSwgMHhCMTVBLCAweEIxNUIsIDB4QjE1RCwNCi0gICAgMHhCMTVFLCAweEIxNUYsIDB4QjE2MSwgMHhCMTYyLCAweEIxNjMsIDB4QjE2NCwgMHhCMTY1LCAweEIxNjYsDQotICAgIDB4QjE2NywgMHhCMTY4LCAweEIxNjksIDB4QjE2QSwgMHhCMTZCLCAweEIxNkMsIDB4QjE2RCwgMHhCMTZFLA0KLSAgICAweEIxNkYsIDB4QjE3MCwgMHhCMTcxLCAweEIxNzIsIDB4QjE3MywgMHhCMTc0LCAweEIxNzUsIDB4QjE3NiwNCi0gICAgMHhCMTc3LCAweEIxN0EsIDB4QjE3QiwgMHhCMTdELCAweEIxN0UsIDB4QjE3RiwgMHhCMTgxLCAweEIxODMsDQotICAgIDB4QjE4NCwgMHhCMTg1LCAweEIxODYsIDB4QjE4NywgMHhCMThBLCAweEIxOEMsIDB4QjE4RSwgMHhCMThGLA0KLSAgICAweEIxOTAsIDB4QjE5MSwgMHhCMTk1LCAweEIxOTYsIDB4QjE5NywgMHhCMTk5LCAweEIxOUEsIDB4QjE5QiwNCi0gICAgMHhCMTlELCAweEIxOUUsIDB4QjE5RiwgMHhCMUEwLCAweEIxQTEsIDB4QjFBMiwgMHhCMUEzLCAweEIxQTQsDQotICAgIDB4QjFBNSwgMHhCMUE2LCAweEIxQTcsIDB4QjFBOSwgMHhCMUFBLCAweEIxQUIsIDB4QjFBQywgMHhCMUFELA0KLSAgICAweEIxQUUsIDB4QjFBRiwgMHhCMUIwLCAweEIxQjEsIDB4QjFCMiwgMHhCMUIzLCAweEIxQjQsIDB4QjFCNSwNCi0gICAgMHhCMUI2LCAweEIxQjcsIDB4QjFCOCwgMHhCMUI5LCAweEIxQkEsIDB4QjFCQiwgMHhCMUJDLCAweEIxQkQsDQotICAgIDB4QjFCRSwgMHhCMUJGLCAweEIxQzAsIDB4QjFDMSwgMHhCMUMyLCAweEIxQzMsIDB4QjFDNCwgMHhCMUM1LA0KLSAgICAweEIxQzYsIDB4QjFDNywgMHhCMUM4LCAweEIxQzksIDB4QjFDQSwgMHhCMUNCLCAweEIxQ0QsIDB4QjFDRSwNCi0gICAgMHhCMUNGLCAweEIxRDEsIDB4QjFEMiwgMHhCMUQzLCAweEIxRDUsIDB4QjFENiwgMHhCMUQ3LCAweEIxRDgsDQotICAgIDB4QjFEOSwgMHhCMURBLCAweEIxREIsIDB4QjFERSwgMHhCMUUwLCAweEIxRTEsIDB4QjFFMiwgMHhCMUUzLA0KLSAgICAweEIxRTQsIDB4QjFFNSwgMHhCMUU2LCAweEIxRTcsIDB4QjFFQSwgMHhCMUVCLCAweEIxRUQsIDB4QjFFRSwNCi0gICAgMHhCMUVGLCAweEIxRjEsIDB4QjFGMiwgMHhCMUYzLCAweEIxRjQsIDB4QjFGNSwgMHhCMUY2LCAweEIxRjcsDQotICAgIDB4QjFGOCwgMHhCMUZBLCAweEIxRkMsIDB4QjFGRSwgMHhCMUZGLCAweEIyMDAsIDB4QjIwMSwgMHhCMjAyLA0KLSAgICAweEIyMDMsIDB4QjIwNiwgMHhCMjA3LCAweEIyMDksIDB4QjIwQSwgMHhCMjBELCAweEIyMEUsIDB4QjIwRiwNCi0gICAgMHhCMjEwLCAweEIyMTEsIDB4QjIxMiwgMHhCMjEzLCAweEIyMTYsIDB4QjIxOCwgMHhCMjFBLCAweEIyMUIsDQotICAgIDB4QjIxQywgMHhCMjFELCAweEIyMUUsIDB4QjIxRiwgMHhCMjIxLCAweEIyMjIsIDB4QjIyMywgMHhCMjI0LA0KLSAgICAweEIyMjUsIDB4QjIyNiwgMHhCMjI3LCAweEIyMjgsIDB4QjIyOSwgMHhCMjJBLCAweEIyMkIsIDB4QjIyQywNCi0gICAgMHhCMjJELCAweEIyMkUsIDB4QjIyRiwgMHhCMjMwLCAweEIyMzEsIDB4QjIzMiwgMHhCMjMzLCAweEIyMzUsDQotICAgIDB4QjIzNiwgMHhCMjM3LCAweEIyMzgsIDB4QjIzOSwgMHhCMjNBLCAweEIyM0IsIDB4QjIzRCwgMHhCMjNFLA0KLSAgICAweEIyM0YsIDB4QjI0MCwgMHhCMjQxLCAweEIyNDIsIDB4QjI0MywgMHhCMjQ0LCAweEIyNDUsIDB4QjI0NiwNCi0gICAgMHhCMjQ3LCAweEIyNDgsIDB4QjI0OSwgMHhCMjRBLCAweEIyNEIsIDB4QjI0QywgMHhCMjRELCAweEIyNEUsDQotICAgIDB4QjI0RiwgMHhCMjUwLCAweEIyNTEsIDB4QjI1MiwgMHhCMjUzLCAweEIyNTQsIDB4QjI1NSwgMHhCMjU2LA0KLSAgICAweEIyNTcsIDB4QjI1OSwgMHhCMjVBLCAweEIyNUIsIDB4QjI1RCwgMHhCMjVFLCAweEIyNUYsIDB4QjI2MSwNCi0gICAgMHhCMjYyLCAweEIyNjMsIDB4QjI2NCwgMHhCMjY1LCAweEIyNjYsIDB4QjI2NywgMHhCMjZBLCAweEIyNkIsDQotICAgIDB4QjI2QywgMHhCMjZELCAweEIyNkUsIDB4QjI2RiwgMHhCMjcwLCAweEIyNzEsIDB4QjI3MiwgMHhCMjczLA0KLSAgICAweEIyNzYsIDB4QjI3NywgMHhCMjc4LCAweEIyNzksIDB4QjI3QSwgMHhCMjdCLCAweEIyN0QsIDB4QjI3RSwNCi0gICAgMHhCMjdGLCAweEIyODAsIDB4QjI4MSwgMHhCMjgyLCAweEIyODMsIDB4QjI4NiwgMHhCMjg3LCAweEIyODgsDQotICAgIDB4QjI4QSwgMHhCMjhCLCAweEIyOEMsIDB4QjI4RCwgMHhCMjhFLCAweEIyOEYsIDB4QjI5MiwgMHhCMjkzLA0KLSAgICAweEIyOTUsIDB4QjI5NiwgMHhCMjk3LCAweEIyOUIsIDB4QjI5QywgMHhCMjlELCAweEIyOUUsIDB4QjI5RiwNCi0gICAgMHhCMkEyLCAweEIyQTQsIDB4QjJBNywgMHhCMkE4LCAweEIyQTksIDB4QjJBQiwgMHhCMkFELCAweEIyQUUsDQotICAgIDB4QjJBRiwgMHhCMkIxLCAweEIyQjIsIDB4QjJCMywgMHhCMkI1LCAweEIyQjYsIDB4QjJCNywgMHhCMkI4LA0KLSAgICAweEIyQjksIDB4QjJCQSwgMHhCMkJCLCAweEIyQkMsIDB4QjJCRCwgMHhCMkJFLCAweEIyQkYsIDB4QjJDMCwNCi0gICAgMHhCMkMxLCAweEIyQzIsIDB4QjJDMywgMHhCMkM0LCAweEIyQzUsIDB4QjJDNiwgMHhCMkM3LCAweEIyQ0EsDQotICAgIDB4QjJDQiwgMHhCMkNELCAweEIyQ0UsIDB4QjJDRiwgMHhCMkQxLCAweEIyRDMsIDB4QjJENCwgMHhCMkQ1LA0KLSAgICAweEIyRDYsIDB4QjJENywgMHhCMkRBLCAweEIyREMsIDB4QjJERSwgMHhCMkRGLCAweEIyRTAsIDB4QjJFMSwNCi0gICAgMHhCMkUzLCAweEIyRTcsIDB4QjJFOSwgMHhCMkVBLCAweEIyRjAsIDB4QjJGMSwgMHhCMkYyLCAweEIyRjYsDQotICAgIDB4QjJGQywgMHhCMkZELCAweEIyRkUsIDB4QjMwMiwgMHhCMzAzLCAweEIzMDUsIDB4QjMwNiwgMHhCMzA3LA0KLSAgICAweEIzMDksIDB4QjMwQSwgMHhCMzBCLCAweEIzMEMsIDB4QjMwRCwgMHhCMzBFLCAweEIzMEYsIDB4QjMxMiwNCi0gICAgMHhCMzE2LCAweEIzMTcsIDB4QjMxOCwgMHhCMzE5LCAweEIzMUEsIDB4QjMxQiwgMHhCMzFELCAweEIzMUUsDQotICAgIDB4QjMxRiwgMHhCMzIwLCAweEIzMjEsIDB4QjMyMiwgMHhCMzIzLCAweEIzMjQsIDB4QjMyNSwgMHhCMzI2LA0KLSAgICAweEIzMjcsIDB4QjMyOCwgMHhCMzI5LCAweEIzMkEsIDB4QjMyQiwgMHhCMzJDLCAweEIzMkQsIDB4QjMyRSwNCi0gICAgMHhCMzJGLCAweEIzMzAsIDB4QjMzMSwgMHhCMzMyLCAweEIzMzMsIDB4QjMzNCwgMHhCMzM1LCAweEIzMzYsDQotICAgIDB4QjMzNywgMHhCMzM4LCAweEIzMzksIDB4QjMzQSwgMHhCMzNCLCAweEIzM0MsIDB4QjMzRCwgMHhCMzNFLA0KLSAgICAweEIzM0YsIDB4QjM0MCwgMHhCMzQxLCAweEIzNDIsIDB4QjM0MywgMHhCMzQ0LCAweEIzNDUsIDB4QjM0NiwNCi0gICAgMHhCMzQ3LCAweEIzNDgsIDB4QjM0OSwgMHhCMzRBLCAweEIzNEIsIDB4QjM0QywgMHhCMzRELCAweEIzNEUsDQotICAgIDB4QjM0RiwgMHhCMzUwLCAweEIzNTEsIDB4QjM1MiwgMHhCMzUzLCAweEIzNTcsIDB4QjM1OSwgMHhCMzVBLA0KLSAgICAweEIzNUQsIDB4QjM2MCwgMHhCMzYxLCAweEIzNjIsIDB4QjM2MywgMHhCMzY2LCAweEIzNjgsIDB4QjM2QSwNCi0gICAgMHhCMzZDLCAweEIzNkQsIDB4QjM2RiwgMHhCMzcyLCAweEIzNzMsIDB4QjM3NSwgMHhCMzc2LCAweEIzNzcsDQotICAgIDB4QjM3OSwgMHhCMzdBLCAweEIzN0IsIDB4QjM3QywgMHhCMzdELCAweEIzN0UsIDB4QjM3RiwgMHhCMzgyLA0KLSAgICAweEIzODYsIDB4QjM4NywgMHhCMzg4LCAweEIzODksIDB4QjM4QSwgMHhCMzhCLCAweEIzOEQsIDB4QjM4RSwNCi0gICAgMHhCMzhGLCAweEIzOTEsIDB4QjM5MiwgMHhCMzkzLCAweEIzOTUsIDB4QjM5NiwgMHhCMzk3LCAweEIzOTgsDQotICAgIDB4QjM5OSwgMHhCMzlBLCAweEIzOUIsIDB4QjM5QywgMHhCMzlELCAweEIzOUUsIDB4QjM5RiwgMHhCM0EyLA0KLSAgICAweEIzQTMsIDB4QjNBNCwgMHhCM0E1LCAweEIzQTYsIDB4QjNBNywgMHhCM0E5LCAweEIzQUEsIDB4QjNBQiwNCi0gICAgMHhCM0FELCAweEIzQUUsIDB4QjNBRiwgMHhCM0IwLCAweEIzQjEsIDB4QjNCMiwgMHhCM0IzLCAweEIzQjQsDQotICAgIDB4QjNCNSwgMHhCM0I2LCAweEIzQjcsIDB4QjNCOCwgMHhCM0I5LCAweEIzQkEsIDB4QjNCQiwgMHhCM0JDLA0KLSAgICAweEIzQkQsIDB4QjNCRSwgMHhCM0JGLCAweEIzQzAsIDB4QjNDMSwgMHhCM0MyLCAweEIzQzMsIDB4QjNDNiwNCi0gICAgMHhCM0M3LCAweEIzQzksIDB4QjNDQSwgMHhCM0NELCAweEIzQ0YsIDB4QjNEMSwgMHhCM0QyLCAweEIzRDMsDQotICAgIDB4QjNENiwgMHhCM0Q4LCAweEIzREEsIDB4QjNEQywgMHhCM0RFLCAweEIzREYsIDB4QjNFMSwgMHhCM0UyLA0KLSAgICAweEIzRTMsIDB4QjNFNSwgMHhCM0U2LCAweEIzRTcsIDB4QjNFOSwgMHhCM0VBLCAweEIzRUIsIDB4QjNFQywNCi0gICAgMHhCM0VELCAweEIzRUUsIDB4QjNFRiwgMHhCM0YwLCAweEIzRjEsIDB4QjNGMiwgMHhCM0YzLCAweEIzRjQsDQotICAgIDB4QjNGNSwgMHhCM0Y2LCAweEIzRjcsIDB4QjNGOCwgMHhCM0Y5LCAweEIzRkEsIDB4QjNGQiwgMHhCM0ZELA0KLSAgICAweEIzRkUsIDB4QjNGRiwgMHhCNDAwLCAweEI0MDEsIDB4QjQwMiwgMHhCNDAzLCAweEI0MDQsIDB4QjQwNSwNCi0gICAgMHhCNDA2LCAweEI0MDcsIDB4QjQwOCwgMHhCNDA5LCAweEI0MEEsIDB4QjQwQiwgMHhCNDBDLCAweEI0MEQsDQotICAgIDB4QjQwRSwgMHhCNDBGLCAweEI0MTEsIDB4QjQxMiwgMHhCNDEzLCAweEI0MTQsIDB4QjQxNSwgMHhCNDE2LA0KLSAgICAweEI0MTcsIDB4QjQxOSwgMHhCNDFBLCAweEI0MUIsIDB4QjQxRCwgMHhCNDFFLCAweEI0MUYsIDB4QjQyMSwNCi0gICAgMHhCNDIyLCAweEI0MjMsIDB4QjQyNCwgMHhCNDI1LCAweEI0MjYsIDB4QjQyNywgMHhCNDJBLCAweEI0MkMsDQotICAgIDB4QjQyRCwgMHhCNDJFLCAweEI0MkYsIDB4QjQzMCwgMHhCNDMxLCAweEI0MzIsIDB4QjQzMywgMHhCNDM1LA0KLSAgICAweEI0MzYsIDB4QjQzNywgMHhCNDM4LCAweEI0MzksIDB4QjQzQSwgMHhCNDNCLCAweEI0M0MsIDB4QjQzRCwNCi0gICAgMHhCNDNFLCAweEI0M0YsIDB4QjQ0MCwgMHhCNDQxLCAweEI0NDIsIDB4QjQ0MywgMHhCNDQ0LCAweEI0NDUsDQotICAgIDB4QjQ0NiwgMHhCNDQ3LCAweEI0NDgsIDB4QjQ0OSwgMHhCNDRBLCAweEI0NEIsIDB4QjQ0QywgMHhCNDRELA0KLSAgICAweEI0NEUsIDB4QjQ0RiwgMHhCNDUyLCAweEI0NTMsIDB4QjQ1NSwgMHhCNDU2LCAweEI0NTcsIDB4QjQ1OSwNCi0gICAgMHhCNDVBLCAweEI0NUIsIDB4QjQ1QywgMHhCNDVELCAweEI0NUUsIDB4QjQ1RiwgMHhCNDYyLCAweEI0NjQsDQotICAgIDB4QjQ2NiwgMHhCNDY3LCAweEI0NjgsIDB4QjQ2OSwgMHhCNDZBLCAweEI0NkIsIDB4QjQ2RCwgMHhCNDZFLA0KLSAgICAweEI0NkYsIDB4QjQ3MCwgMHhCNDcxLCAweEI0NzIsIDB4QjQ3MywgMHhCNDc0LCAweEI0NzUsIDB4QjQ3NiwNCi0gICAgMHhCNDc3LCAweEI0NzgsIDB4QjQ3OSwgMHhCNDdBLCAweEI0N0IsIDB4QjQ3QywgMHhCNDdELCAweEI0N0UsDQotICAgIDB4QjQ3RiwgMHhCNDgxLCAweEI0ODIsIDB4QjQ4MywgMHhCNDg0LCAweEI0ODUsIDB4QjQ4NiwgMHhCNDg3LA0KLSAgICAweEI0ODksIDB4QjQ4QSwgMHhCNDhCLCAweEI0OEMsIDB4QjQ4RCwgMHhCNDhFLCAweEI0OEYsIDB4QjQ5MCwNCi0gICAgMHhCNDkxLCAweEI0OTIsIDB4QjQ5MywgMHhCNDk0LCAweEI0OTUsIDB4QjQ5NiwgMHhCNDk3LCAweEI0OTgsDQotICAgIDB4QjQ5OSwgMHhCNDlBLCAweEI0OUIsIDB4QjQ5QywgMHhCNDlFLCAweEI0OUYsIDB4QjRBMCwgMHhCNEExLA0KLSAgICAweEI0QTIsIDB4QjRBMywgMHhCNEE1LCAweEI0QTYsIDB4QjRBNywgMHhCNEE5LCAweEI0QUEsIDB4QjRBQiwNCi0gICAgMHhCNEFELCAweEI0QUUsIDB4QjRBRiwgMHhCNEIwLCAweEI0QjEsIDB4QjRCMiwgMHhCNEIzLCAweEI0QjQsDQotICAgIDB4QjRCNiwgMHhCNEI4LCAweEI0QkEsIDB4QjRCQiwgMHhCNEJDLCAweEI0QkQsIDB4QjRCRSwgMHhCNEJGLA0KLSAgICAweEI0QzEsIDB4QjRDMiwgMHhCNEMzLCAweEI0QzUsIDB4QjRDNiwgMHhCNEM3LCAweEI0QzksIDB4QjRDQSwNCi0gICAgMHhCNENCLCAweEI0Q0MsIDB4QjRDRCwgMHhCNENFLCAweEI0Q0YsIDB4QjREMSwgMHhCNEQyLCAweEI0RDMsDQotICAgIDB4QjRENCwgMHhCNEQ2LCAweEI0RDcsIDB4QjREOCwgMHhCNEQ5LCAweEI0REEsIDB4QjREQiwgMHhCNERFLA0KLSAgICAweEI0REYsIDB4QjRFMSwgMHhCNEUyLCAweEI0RTUsIDB4QjRFNywgMHhCNEU4LCAweEI0RTksIDB4QjRFQSwNCi0gICAgMHhCNEVCLCAweEI0RUUsIDB4QjRGMCwgMHhCNEYyLCAweEI0RjMsIDB4QjRGNCwgMHhCNEY1LCAweEI0RjYsDQotICAgIDB4QjRGNywgMHhCNEY5LCAweEI0RkEsIDB4QjRGQiwgMHhCNEZDLCAweEI0RkQsIDB4QjRGRSwgMHhCNEZGLA0KLSAgICAweEI1MDAsIDB4QjUwMSwgMHhCNTAyLCAweEI1MDMsIDB4QjUwNCwgMHhCNTA1LCAweEI1MDYsIDB4QjUwNywNCi0gICAgMHhCNTA4LCAweEI1MDksIDB4QjUwQSwgMHhCNTBCLCAweEI1MEMsIDB4QjUwRCwgMHhCNTBFLCAweEI1MEYsDQotICAgIDB4QjUxMCwgMHhCNTExLCAweEI1MTIsIDB4QjUxMywgMHhCNTE2LCAweEI1MTcsIDB4QjUxOSwgMHhCNTFBLA0KLSAgICAweEI1MUQsIDB4QjUxRSwgMHhCNTFGLCAweEI1MjAsIDB4QjUyMSwgMHhCNTIyLCAweEI1MjMsIDB4QjUyNiwNCi0gICAgMHhCNTJCLCAweEI1MkMsIDB4QjUyRCwgMHhCNTJFLCAweEI1MkYsIDB4QjUzMiwgMHhCNTMzLCAweEI1MzUsDQotICAgIDB4QjUzNiwgMHhCNTM3LCAweEI1MzksIDB4QjUzQSwgMHhCNTNCLCAweEI1M0MsIDB4QjUzRCwgMHhCNTNFLA0KLSAgICAweEI1M0YsIDB4QjU0MiwgMHhCNTQ2LCAweEI1NDcsIDB4QjU0OCwgMHhCNTQ5LCAweEI1NEEsIDB4QjU0RSwNCi0gICAgMHhCNTRGLCAweEI1NTEsIDB4QjU1MiwgMHhCNTUzLCAweEI1NTUsIDB4QjU1NiwgMHhCNTU3LCAweEI1NTgsDQotICAgIDB4QjU1OSwgMHhCNTVBLCAweEI1NUIsIDB4QjU1RSwgMHhCNTYyLCAweEI1NjMsIDB4QjU2NCwgMHhCNTY1LA0KLSAgICAweEI1NjYsIDB4QjU2NywgMHhCNTY4LCAweEI1NjksIDB4QjU2QSwgMHhCNTZCLCAweEI1NkMsIDB4QjU2RCwNCi0gICAgMHhCNTZFLCAweEI1NkYsIDB4QjU3MCwgMHhCNTcxLCAweEI1NzIsIDB4QjU3MywgMHhCNTc0LCAweEI1NzUsDQotICAgIDB4QjU3NiwgMHhCNTc3LCAweEI1NzgsIDB4QjU3OSwgMHhCNTdBLCAweEI1N0IsIDB4QjU3QywgMHhCNTdELA0KLSAgICAweEI1N0UsIDB4QjU3RiwgMHhCNTgwLCAweEI1ODEsIDB4QjU4MiwgMHhCNTgzLCAweEI1ODQsIDB4QjU4NSwNCi0gICAgMHhCNTg2LCAweEI1ODcsIDB4QjU4OCwgMHhCNTg5LCAweEI1OEEsIDB4QjU4QiwgMHhCNThDLCAweEI1OEQsDQotICAgIDB4QjU4RSwgMHhCNThGLCAweEI1OTAsIDB4QjU5MSwgMHhCNTkyLCAweEI1OTMsIDB4QjU5NCwgMHhCNTk1LA0KLSAgICAweEI1OTYsIDB4QjU5NywgMHhCNTk4LCAweEI1OTksIDB4QjU5QSwgMHhCNTlCLCAweEI1OUMsIDB4QjU5RCwNCi0gICAgMHhCNTlFLCAweEI1OUYsIDB4QjVBMiwgMHhCNUEzLCAweEI1QTUsIDB4QjVBNiwgMHhCNUE3LCAweEI1QTksDQotICAgIDB4QjVBQywgMHhCNUFELCAweEI1QUUsIDB4QjVBRiwgMHhCNUIyLCAweEI1QjYsIDB4QjVCNywgMHhCNUI4LA0KLSAgICAweEI1QjksIDB4QjVCQSwgMHhCNUJFLCAweEI1QkYsIDB4QjVDMSwgMHhCNUMyLCAweEI1QzMsIDB4QjVDNSwNCi0gICAgMHhCNUM2LCAweEI1QzcsIDB4QjVDOCwgMHhCNUM5LCAweEI1Q0EsIDB4QjVDQiwgMHhCNUNFLCAweEI1RDIsDQotICAgIDB4QjVEMywgMHhCNUQ0LCAweEI1RDUsIDB4QjVENiwgMHhCNUQ3LCAweEI1RDksIDB4QjVEQSwgMHhCNURCLA0KLSAgICAweEI1REMsIDB4QjVERCwgMHhCNURFLCAweEI1REYsIDB4QjVFMCwgMHhCNUUxLCAweEI1RTIsIDB4QjVFMywNCi0gICAgMHhCNUU0LCAweEI1RTUsIDB4QjVFNiwgMHhCNUU3LCAweEI1RTgsIDB4QjVFOSwgMHhCNUVBLCAweEI1RUIsDQotICAgIDB4QjVFRCwgMHhCNUVFLCAweEI1RUYsIDB4QjVGMCwgMHhCNUYxLCAweEI1RjIsIDB4QjVGMywgMHhCNUY0LA0KLSAgICAweEI1RjUsIDB4QjVGNiwgMHhCNUY3LCAweEI1RjgsIDB4QjVGOSwgMHhCNUZBLCAweEI1RkIsIDB4QjVGQywNCi0gICAgMHhCNUZELCAweEI1RkUsIDB4QjVGRiwgMHhCNjAwLCAweEI2MDEsIDB4QjYwMiwgMHhCNjAzLCAweEI2MDQsDQotICAgIDB4QjYwNSwgMHhCNjA2LCAweEI2MDcsIDB4QjYwOCwgMHhCNjA5LCAweEI2MEEsIDB4QjYwQiwgMHhCNjBDLA0KLSAgICAweEI2MEQsIDB4QjYwRSwgMHhCNjBGLCAweEI2MTIsIDB4QjYxMywgMHhCNjE1LCAweEI2MTYsIDB4QjYxNywNCi0gICAgMHhCNjE5LCAweEI2MUEsIDB4QjYxQiwgMHhCNjFDLCAweEI2MUQsIDB4QjYxRSwgMHhCNjFGLCAweEI2MjAsDQotICAgIDB4QjYyMSwgMHhCNjIyLCAweEI2MjMsIDB4QjYyNCwgMHhCNjI2LCAweEI2MjcsIDB4QjYyOCwgMHhCNjI5LA0KLSAgICAweEI2MkEsIDB4QjYyQiwgMHhCNjJELCAweEI2MkUsIDB4QjYyRiwgMHhCNjMwLCAweEI2MzEsIDB4QjYzMiwNCi0gICAgMHhCNjMzLCAweEI2MzUsIDB4QjYzNiwgMHhCNjM3LCAweEI2MzgsIDB4QjYzOSwgMHhCNjNBLCAweEI2M0IsDQotICAgIDB4QjYzQywgMHhCNjNELCAweEI2M0UsIDB4QjYzRiwgMHhCNjQwLCAweEI2NDEsIDB4QjY0MiwgMHhCNjQzLA0KLSAgICAweEI2NDQsIDB4QjY0NSwgMHhCNjQ2LCAweEI2NDcsIDB4QjY0OSwgMHhCNjRBLCAweEI2NEIsIDB4QjY0QywNCi0gICAgMHhCNjRELCAweEI2NEUsIDB4QjY0RiwgMHhCNjUwLCAweEI2NTEsIDB4QjY1MiwgMHhCNjUzLCAweEI2NTQsDQotICAgIDB4QjY1NSwgMHhCNjU2LCAweEI2NTcsIDB4QjY1OCwgMHhCNjU5LCAweEI2NUEsIDB4QjY1QiwgMHhCNjVDLA0KLSAgICAweEI2NUQsIDB4QjY1RSwgMHhCNjVGLCAweEI2NjAsIDB4QjY2MSwgMHhCNjYyLCAweEI2NjMsIDB4QjY2NSwNCi0gICAgMHhCNjY2LCAweEI2NjcsIDB4QjY2OSwgMHhCNjZBLCAweEI2NkIsIDB4QjY2QywgMHhCNjZELCAweEI2NkUsDQotICAgIDB4QjY2RiwgMHhCNjcwLCAweEI2NzEsIDB4QjY3MiwgMHhCNjczLCAweEI2NzQsIDB4QjY3NSwgMHhCNjc2LA0KLSAgICAweEI2NzcsIDB4QjY3OCwgMHhCNjc5LCAweEI2N0EsIDB4QjY3QiwgMHhCNjdDLCAweEI2N0QsIDB4QjY3RSwNCi0gICAgMHhCNjdGLCAweEI2ODAsIDB4QjY4MSwgMHhCNjgyLCAweEI2ODMsIDB4QjY4NCwgMHhCNjg1LCAweEI2ODYsDQotICAgIDB4QjY4NywgMHhCNjg4LCAweEI2ODksIDB4QjY4QSwgMHhCNjhCLCAweEI2OEMsIDB4QjY4RCwgMHhCNjhFLA0KLSAgICAweEI2OEYsIDB4QjY5MCwgMHhCNjkxLCAweEI2OTIsIDB4QjY5MywgMHhCNjk0LCAweEI2OTUsIDB4QjY5NiwNCi0gICAgMHhCNjk3LCAweEI2OTgsIDB4QjY5OSwgMHhCNjlBLCAweEI2OUIsIDB4QjY5RSwgMHhCNjlGLCAweEI2QTEsDQotICAgIDB4QjZBMiwgMHhCNkEzLCAweEI2QTUsIDB4QjZBNiwgMHhCNkE3LCAweEI2QTgsIDB4QjZBOSwgMHhCNkFBLA0KLSAgICAweEI2QUQsIDB4QjZBRSwgMHhCNkFGLCAweEI2QjAsIDB4QjZCMiwgMHhCNkIzLCAweEI2QjQsIDB4QjZCNSwNCi0gICAgMHhCNkI2LCAweEI2QjcsIDB4QjZCOCwgMHhCNkI5LCAweEI2QkEsIDB4QjZCQiwgMHhCNkJDLCAweEI2QkQsDQotICAgIDB4QjZCRSwgMHhCNkJGLCAweEI2QzAsIDB4QjZDMSwgMHhCNkMyLCAweEI2QzMsIDB4QjZDNCwgMHhCNkM1LA0KLSAgICAweEI2QzYsIDB4QjZDNywgMHhCNkM4LCAweEI2QzksIDB4QjZDQSwgMHhCNkNCLCAweEI2Q0MsIDB4QjZDRCwNCi0gICAgMHhCNkNFLCAweEI2Q0YsIDB4QjZEMCwgMHhCNkQxLCAweEI2RDIsIDB4QjZEMywgMHhCNkQ1LCAweEI2RDYsDQotICAgIDB4QjZENywgMHhCNkQ4LCAweEI2RDksIDB4QjZEQSwgMHhCNkRCLCAweEI2REMsIDB4QjZERCwgMHhCNkRFLA0KLSAgICAweEI2REYsIDB4QjZFMCwgMHhCNkUxLCAweEI2RTIsIDB4QjZFMywgMHhCNkU0LCAweEI2RTUsIDB4QjZFNiwNCi0gICAgMHhCNkU3LCAweEI2RTgsIDB4QjZFOSwgMHhCNkVBLCAweEI2RUIsIDB4QjZFQywgMHhCNkVELCAweEI2RUUsDQotICAgIDB4QjZFRiwgMHhCNkYxLCAweEI2RjIsIDB4QjZGMywgMHhCNkY1LCAweEI2RjYsIDB4QjZGNywgMHhCNkY5LA0KLSAgICAweEI2RkEsIDB4QjZGQiwgMHhCNkZDLCAweEI2RkQsIDB4QjZGRSwgMHhCNkZGLCAweEI3MDIsIDB4QjcwMywNCi0gICAgMHhCNzA0LCAweEI3MDYsIDB4QjcwNywgMHhCNzA4LCAweEI3MDksIDB4QjcwQSwgMHhCNzBCLCAweEI3MEMsDQotICAgIDB4QjcwRCwgMHhCNzBFLCAweEI3MEYsIDB4QjcxMCwgMHhCNzExLCAweEI3MTIsIDB4QjcxMywgMHhCNzE0LA0KLSAgICAweEI3MTUsIDB4QjcxNiwgMHhCNzE3LCAweEI3MTgsIDB4QjcxOSwgMHhCNzFBLCAweEI3MUIsIDB4QjcxQywNCi0gICAgMHhCNzFELCAweEI3MUUsIDB4QjcxRiwgMHhCNzIwLCAweEI3MjEsIDB4QjcyMiwgMHhCNzIzLCAweEI3MjQsDQotICAgIDB4QjcyNSwgMHhCNzI2LCAweEI3MjcsIDB4QjcyQSwgMHhCNzJCLCAweEI3MkQsIDB4QjcyRSwgMHhCNzMxLA0KLSAgICAweEI3MzIsIDB4QjczMywgMHhCNzM0LCAweEI3MzUsIDB4QjczNiwgMHhCNzM3LCAweEI3M0EsIDB4QjczQywNCi0gICAgMHhCNzNELCAweEI3M0UsIDB4QjczRiwgMHhCNzQwLCAweEI3NDEsIDB4Qjc0MiwgMHhCNzQzLCAweEI3NDUsDQotICAgIDB4Qjc0NiwgMHhCNzQ3LCAweEI3NDksIDB4Qjc0QSwgMHhCNzRCLCAweEI3NEQsIDB4Qjc0RSwgMHhCNzRGLA0KLSAgICAweEI3NTAsIDB4Qjc1MSwgMHhCNzUyLCAweEI3NTMsIDB4Qjc1NiwgMHhCNzU3LCAweEI3NTgsIDB4Qjc1OSwNCi0gICAgMHhCNzVBLCAweEI3NUIsIDB4Qjc1QywgMHhCNzVELCAweEI3NUUsIDB4Qjc1RiwgMHhCNzYxLCAweEI3NjIsDQotICAgIDB4Qjc2MywgMHhCNzY1LCAweEI3NjYsIDB4Qjc2NywgMHhCNzY5LCAweEI3NkEsIDB4Qjc2QiwgMHhCNzZDLA0KLSAgICAweEI3NkQsIDB4Qjc2RSwgMHhCNzZGLCAweEI3NzIsIDB4Qjc3NCwgMHhCNzc2LCAweEI3NzcsIDB4Qjc3OCwNCi0gICAgMHhCNzc5LCAweEI3N0EsIDB4Qjc3QiwgMHhCNzdFLCAweEI3N0YsIDB4Qjc4MSwgMHhCNzgyLCAweEI3ODMsDQotICAgIDB4Qjc4NSwgMHhCNzg2LCAweEI3ODcsIDB4Qjc4OCwgMHhCNzg5LCAweEI3OEEsIDB4Qjc4QiwgMHhCNzhFLA0KLSAgICAweEI3OTMsIDB4Qjc5NCwgMHhCNzk1LCAweEI3OUEsIDB4Qjc5QiwgMHhCNzlELCAweEI3OUUsIDB4Qjc5RiwNCi0gICAgMHhCN0ExLCAweEI3QTIsIDB4QjdBMywgMHhCN0E0LCAweEI3QTUsIDB4QjdBNiwgMHhCN0E3LCAweEI3QUEsDQotICAgIDB4QjdBRSwgMHhCN0FGLCAweEI3QjAsIDB4QjdCMSwgMHhCN0IyLCAweEI3QjMsIDB4QjdCNiwgMHhCN0I3LA0KLSAgICAweEI3QjksIDB4QjdCQSwgMHhCN0JCLCAweEI3QkMsIDB4QjdCRCwgMHhCN0JFLCAweEI3QkYsIDB4QjdDMCwNCi0gICAgMHhCN0MxLCAweEI3QzIsIDB4QjdDMywgMHhCN0M0LCAweEI3QzUsIDB4QjdDNiwgMHhCN0M4LCAweEI3Q0EsDQotICAgIDB4QjdDQiwgMHhCN0NDLCAweEI3Q0QsIDB4QjdDRSwgMHhCN0NGLCAweEI3RDAsIDB4QjdEMSwgMHhCN0QyLA0KLSAgICAweEI3RDMsIDB4QjdENCwgMHhCN0Q1LCAweEI3RDYsIDB4QjdENywgMHhCN0Q4LCAweEI3RDksIDB4QjdEQSwNCi0gICAgMHhCN0RCLCAweEI3REMsIDB4QjdERCwgMHhCN0RFLCAweEI3REYsIDB4QjdFMCwgMHhCN0UxLCAweEI3RTIsDQotICAgIDB4QjdFMywgMHhCN0U0LCAweEI3RTUsIDB4QjdFNiwgMHhCN0U3LCAweEI3RTgsIDB4QjdFOSwgMHhCN0VBLA0KLSAgICAweEI3RUIsIDB4QjdFRSwgMHhCN0VGLCAweEI3RjEsIDB4QjdGMiwgMHhCN0YzLCAweEI3RjUsIDB4QjdGNiwNCi0gICAgMHhCN0Y3LCAweEI3RjgsIDB4QjdGOSwgMHhCN0ZBLCAweEI3RkIsIDB4QjdGRSwgMHhCODAyLCAweEI4MDMsDQotICAgIDB4QjgwNCwgMHhCODA1LCAweEI4MDYsIDB4QjgwQSwgMHhCODBCLCAweEI4MEQsIDB4QjgwRSwgMHhCODBGLA0KLSAgICAweEI4MTEsIDB4QjgxMiwgMHhCODEzLCAweEI4MTQsIDB4QjgxNSwgMHhCODE2LCAweEI4MTcsIDB4QjgxQSwNCi0gICAgMHhCODFDLCAweEI4MUUsIDB4QjgxRiwgMHhCODIwLCAweEI4MjEsIDB4QjgyMiwgMHhCODIzLCAweEI4MjYsDQotICAgIDB4QjgyNywgMHhCODI5LCAweEI4MkEsIDB4QjgyQiwgMHhCODJELCAweEI4MkUsIDB4QjgyRiwgMHhCODMwLA0KLSAgICAweEI4MzEsIDB4QjgzMiwgMHhCODMzLCAweEI4MzYsIDB4QjgzQSwgMHhCODNCLCAweEI4M0MsIDB4QjgzRCwNCi0gICAgMHhCODNFLCAweEI4M0YsIDB4Qjg0MSwgMHhCODQyLCAweEI4NDMsIDB4Qjg0NSwgMHhCODQ2LCAweEI4NDcsDQotICAgIDB4Qjg0OCwgMHhCODQ5LCAweEI4NEEsIDB4Qjg0QiwgMHhCODRDLCAweEI4NEQsIDB4Qjg0RSwgMHhCODRGLA0KLSAgICAweEI4NTAsIDB4Qjg1MiwgMHhCODU0LCAweEI4NTUsIDB4Qjg1NiwgMHhCODU3LCAweEI4NTgsIDB4Qjg1OSwNCi0gICAgMHhCODVBLCAweEI4NUIsIDB4Qjg1RSwgMHhCODVGLCAweEI4NjEsIDB4Qjg2MiwgMHhCODYzLCAweEI4NjUsDQotICAgIDB4Qjg2NiwgMHhCODY3LCAweEI4NjgsIDB4Qjg2OSwgMHhCODZBLCAweEI4NkIsIDB4Qjg2RSwgMHhCODcwLA0KLSAgICAweEI4NzIsIDB4Qjg3MywgMHhCODc0LCAweEI4NzUsIDB4Qjg3NiwgMHhCODc3LCAweEI4NzksIDB4Qjg3QSwNCi0gICAgMHhCODdCLCAweEI4N0QsIDB4Qjg3RSwgMHhCODdGLCAweEI4ODAsIDB4Qjg4MSwgMHhCODgyLCAweEI4ODMsDQotICAgIDB4Qjg4NCwgMHhCODg1LCAweEI4ODYsIDB4Qjg4NywgMHhCODg4LCAweEI4ODksIDB4Qjg4QSwgMHhCODhCLA0KLSAgICAweEI4OEMsIDB4Qjg4RSwgMHhCODhGLCAweEI4OTAsIDB4Qjg5MSwgMHhCODkyLCAweEI4OTMsIDB4Qjg5NCwNCi0gICAgMHhCODk1LCAweEI4OTYsIDB4Qjg5NywgMHhCODk4LCAweEI4OTksIDB4Qjg5QSwgMHhCODlCLCAweEI4OUMsDQotICAgIDB4Qjg5RCwgMHhCODlFLCAweEI4OUYsIDB4QjhBMCwgMHhCOEExLCAweEI4QTIsIDB4QjhBMywgMHhCOEE0LA0KLSAgICAweEI4QTUsIDB4QjhBNiwgMHhCOEE3LCAweEI4QTksIDB4QjhBQSwgMHhCOEFCLCAweEI4QUMsIDB4QjhBRCwNCi0gICAgMHhCOEFFLCAweEI4QUYsIDB4QjhCMSwgMHhCOEIyLCAweEI4QjMsIDB4QjhCNSwgMHhCOEI2LCAweEI4QjcsDQotICAgIDB4QjhCOSwgMHhCOEJBLCAweEI4QkIsIDB4QjhCQywgMHhCOEJELCAweEI4QkUsIDB4QjhCRiwgMHhCOEMyLA0KLSAgICAweEI4QzQsIDB4QjhDNiwgMHhCOEM3LCAweEI4QzgsIDB4QjhDOSwgMHhCOENBLCAweEI4Q0IsIDB4QjhDRCwNCi0gICAgMHhCOENFLCAweEI4Q0YsIDB4QjhEMSwgMHhCOEQyLCAweEI4RDMsIDB4QjhENSwgMHhCOEQ2LCAweEI4RDcsDQotICAgIDB4QjhEOCwgMHhCOEQ5LCAweEI4REEsIDB4QjhEQiwgMHhCOERDLCAweEI4REUsIDB4QjhFMCwgMHhCOEUyLA0KLSAgICAweEI4RTMsIDB4QjhFNCwgMHhCOEU1LCAweEI4RTYsIDB4QjhFNywgMHhCOEVBLCAweEI4RUIsIDB4QjhFRCwNCi0gICAgMHhCOEVFLCAweEI4RUYsIDB4QjhGMSwgMHhCOEYyLCAweEI4RjMsIDB4QjhGNCwgMHhCOEY1LCAweEI4RjYsDQotICAgIDB4QjhGNywgMHhCOEZBLCAweEI4RkMsIDB4QjhGRSwgMHhCOEZGLCAweEI5MDAsIDB4QjkwMSwgMHhCOTAyLA0KLSAgICAweEI5MDMsIDB4QjkwNSwgMHhCOTA2LCAweEI5MDcsIDB4QjkwOCwgMHhCOTA5LCAweEI5MEEsIDB4QjkwQiwNCi0gICAgMHhCOTBDLCAweEI5MEQsIDB4QjkwRSwgMHhCOTBGLCAweEI5MTAsIDB4QjkxMSwgMHhCOTEyLCAweEI5MTMsDQotICAgIDB4QjkxNCwgMHhCOTE1LCAweEI5MTYsIDB4QjkxNywgMHhCOTE5LCAweEI5MUEsIDB4QjkxQiwgMHhCOTFDLA0KLSAgICAweEI5MUQsIDB4QjkxRSwgMHhCOTFGLCAweEI5MjEsIDB4QjkyMiwgMHhCOTIzLCAweEI5MjQsIDB4QjkyNSwNCi0gICAgMHhCOTI2LCAweEI5MjcsIDB4QjkyOCwgMHhCOTI5LCAweEI5MkEsIDB4QjkyQiwgMHhCOTJDLCAweEI5MkQsDQotICAgIDB4QjkyRSwgMHhCOTJGLCAweEI5MzAsIDB4QjkzMSwgMHhCOTMyLCAweEI5MzMsIDB4QjkzNCwgMHhCOTM1LA0KLSAgICAweEI5MzYsIDB4QjkzNywgMHhCOTM4LCAweEI5MzksIDB4QjkzQSwgMHhCOTNCLCAweEI5M0UsIDB4QjkzRiwNCi0gICAgMHhCOTQxLCAweEI5NDIsIDB4Qjk0MywgMHhCOTQ1LCAweEI5NDYsIDB4Qjk0NywgMHhCOTQ4LCAweEI5NDksDQotICAgIDB4Qjk0QSwgMHhCOTRCLCAweEI5NEQsIDB4Qjk0RSwgMHhCOTUwLCAweEI5NTIsIDB4Qjk1MywgMHhCOTU0LA0KLSAgICAweEI5NTUsIDB4Qjk1NiwgMHhCOTU3LCAweEI5NUEsIDB4Qjk1QiwgMHhCOTVELCAweEI5NUUsIDB4Qjk1RiwNCi0gICAgMHhCOTYxLCAweEI5NjIsIDB4Qjk2MywgMHhCOTY0LCAweEI5NjUsIDB4Qjk2NiwgMHhCOTY3LCAweEI5NkEsDQotICAgIDB4Qjk2QywgMHhCOTZFLCAweEI5NkYsIDB4Qjk3MCwgMHhCOTcxLCAweEI5NzIsIDB4Qjk3MywgMHhCOTc2LA0KLSAgICAweEI5NzcsIDB4Qjk3OSwgMHhCOTdBLCAweEI5N0IsIDB4Qjk3RCwgMHhCOTdFLCAweEI5N0YsIDB4Qjk4MCwNCi0gICAgMHhCOTgxLCAweEI5ODIsIDB4Qjk4MywgMHhCOTg2LCAweEI5ODgsIDB4Qjk4QiwgMHhCOThDLCAweEI5OEYsDQotICAgIDB4Qjk5MCwgMHhCOTkxLCAweEI5OTIsIDB4Qjk5MywgMHhCOTk0LCAweEI5OTUsIDB4Qjk5NiwgMHhCOTk3LA0KLSAgICAweEI5OTgsIDB4Qjk5OSwgMHhCOTlBLCAweEI5OUIsIDB4Qjk5QywgMHhCOTlELCAweEI5OUUsIDB4Qjk5RiwNCi0gICAgMHhCOUEwLCAweEI5QTEsIDB4QjlBMiwgMHhCOUEzLCAweEI5QTQsIDB4QjlBNSwgMHhCOUE2LCAweEI5QTcsDQotICAgIDB4QjlBOCwgMHhCOUE5LCAweEI5QUEsIDB4QjlBQiwgMHhCOUFFLCAweEI5QUYsIDB4QjlCMSwgMHhCOUIyLA0KLSAgICAweEI5QjMsIDB4QjlCNSwgMHhCOUI2LCAweEI5QjcsIDB4QjlCOCwgMHhCOUI5LCAweEI5QkEsIDB4QjlCQiwNCi0gICAgMHhCOUJFLCAweEI5QzAsIDB4QjlDMiwgMHhCOUMzLCAweEI5QzQsIDB4QjlDNSwgMHhCOUM2LCAweEI5QzcsDQotICAgIDB4QjlDQSwgMHhCOUNCLCAweEI5Q0QsIDB4QjlEMywgMHhCOUQ0LCAweEI5RDUsIDB4QjlENiwgMHhCOUQ3LA0KLSAgICAweEI5REEsIDB4QjlEQywgMHhCOURGLCAweEI5RTAsIDB4QjlFMiwgMHhCOUU2LCAweEI5RTcsIDB4QjlFOSwNCi0gICAgMHhCOUVBLCAweEI5RUIsIDB4QjlFRCwgMHhCOUVFLCAweEI5RUYsIDB4QjlGMCwgMHhCOUYxLCAweEI5RjIsDQotICAgIDB4QjlGMywgMHhCOUY2LCAweEI5RkIsIDB4QjlGQywgMHhCOUZELCAweEI5RkUsIDB4QjlGRiwgMHhCQTAyLA0KLSAgICAweEJBMDMsIDB4QkEwNCwgMHhCQTA1LCAweEJBMDYsIDB4QkEwNywgMHhCQTA5LCAweEJBMEEsIDB4QkEwQiwNCi0gICAgMHhCQTBDLCAweEJBMEQsIDB4QkEwRSwgMHhCQTBGLCAweEJBMTAsIDB4QkExMSwgMHhCQTEyLCAweEJBMTMsDQotICAgIDB4QkExNCwgMHhCQTE2LCAweEJBMTcsIDB4QkExOCwgMHhCQTE5LCAweEJBMUEsIDB4QkExQiwgMHhCQTFDLA0KLSAgICAweEJBMUQsIDB4QkExRSwgMHhCQTFGLCAweEJBMjAsIDB4QkEyMSwgMHhCQTIyLCAweEJBMjMsIDB4QkEyNCwNCi0gICAgMHhCQTI1LCAweEJBMjYsIDB4QkEyNywgMHhCQTI4LCAweEJBMjksIDB4QkEyQSwgMHhCQTJCLCAweEJBMkMsDQotICAgIDB4QkEyRCwgMHhCQTJFLCAweEJBMkYsIDB4QkEzMCwgMHhCQTMxLCAweEJBMzIsIDB4QkEzMywgMHhCQTM0LA0KLSAgICAweEJBMzUsIDB4QkEzNiwgMHhCQTM3LCAweEJBM0EsIDB4QkEzQiwgMHhCQTNELCAweEJBM0UsIDB4QkEzRiwNCi0gICAgMHhCQTQxLCAweEJBNDMsIDB4QkE0NCwgMHhCQTQ1LCAweEJBNDYsIDB4QkE0NywgMHhCQTRBLCAweEJBNEMsDQotICAgIDB4QkE0RiwgMHhCQTUwLCAweEJBNTEsIDB4QkE1MiwgMHhCQTU2LCAweEJBNTcsIDB4QkE1OSwgMHhCQTVBLA0KLSAgICAweEJBNUIsIDB4QkE1RCwgMHhCQTVFLCAweEJBNUYsIDB4QkE2MCwgMHhCQTYxLCAweEJBNjIsIDB4QkE2MywNCi0gICAgMHhCQTY2LCAweEJBNkEsIDB4QkE2QiwgMHhCQTZDLCAweEJBNkQsIDB4QkE2RSwgMHhCQTZGLCAweEJBNzIsDQotICAgIDB4QkE3MywgMHhCQTc1LCAweEJBNzYsIDB4QkE3NywgMHhCQTc5LCAweEJBN0EsIDB4QkE3QiwgMHhCQTdDLA0KLSAgICAweEJBN0QsIDB4QkE3RSwgMHhCQTdGLCAweEJBODAsIDB4QkE4MSwgMHhCQTgyLCAweEJBODYsIDB4QkE4OCwNCi0gICAgMHhCQTg5LCAweEJBOEEsIDB4QkE4QiwgMHhCQThELCAweEJBOEUsIDB4QkE4RiwgMHhCQTkwLCAweEJBOTEsDQotICAgIDB4QkE5MiwgMHhCQTkzLCAweEJBOTQsIDB4QkE5NSwgMHhCQTk2LCAweEJBOTcsIDB4QkE5OCwgMHhCQTk5LA0KLSAgICAweEJBOUEsIDB4QkE5QiwgMHhCQTlDLCAweEJBOUQsIDB4QkE5RSwgMHhCQTlGLCAweEJBQTAsIDB4QkFBMSwNCi0gICAgMHhCQUEyLCAweEJBQTMsIDB4QkFBNCwgMHhCQUE1LCAweEJBQTYsIDB4QkFBNywgMHhCQUFBLCAweEJBQUQsDQotICAgIDB4QkFBRSwgMHhCQUFGLCAweEJBQjEsIDB4QkFCMywgMHhCQUI0LCAweEJBQjUsIDB4QkFCNiwgMHhCQUI3LA0KLSAgICAweEJBQkEsIDB4QkFCQywgMHhCQUJFLCAweEJBQkYsIDB4QkFDMCwgMHhCQUMxLCAweEJBQzIsIDB4QkFDMywNCi0gICAgMHhCQUM1LCAweEJBQzYsIDB4QkFDNywgMHhCQUM5LCAweEJBQ0EsIDB4QkFDQiwgMHhCQUNDLCAweEJBQ0QsDQotICAgIDB4QkFDRSwgMHhCQUNGLCAweEJBRDAsIDB4QkFEMSwgMHhCQUQyLCAweEJBRDMsIDB4QkFENCwgMHhCQUQ1LA0KLSAgICAweEJBRDYsIDB4QkFENywgMHhCQURBLCAweEJBREIsIDB4QkFEQywgMHhCQURELCAweEJBREUsIDB4QkFERiwNCi0gICAgMHhCQUUwLCAweEJBRTEsIDB4QkFFMiwgMHhCQUUzLCAweEJBRTQsIDB4QkFFNSwgMHhCQUU2LCAweEJBRTcsDQotICAgIDB4QkFFOCwgMHhCQUU5LCAweEJBRUEsIDB4QkFFQiwgMHhCQUVDLCAweEJBRUQsIDB4QkFFRSwgMHhCQUVGLA0KLSAgICAweEJBRjAsIDB4QkFGMSwgMHhCQUYyLCAweEJBRjMsIDB4QkFGNCwgMHhCQUY1LCAweEJBRjYsIDB4QkFGNywNCi0gICAgMHhCQUY4LCAweEJBRjksIDB4QkFGQSwgMHhCQUZCLCAweEJBRkQsIDB4QkFGRSwgMHhCQUZGLCAweEJCMDEsDQotICAgIDB4QkIwMiwgMHhCQjAzLCAweEJCMDUsIDB4QkIwNiwgMHhCQjA3LCAweEJCMDgsIDB4QkIwOSwgMHhCQjBBLA0KLSAgICAweEJCMEIsIDB4QkIwQywgMHhCQjBFLCAweEJCMTAsIDB4QkIxMiwgMHhCQjEzLCAweEJCMTQsIDB4QkIxNSwNCi0gICAgMHhCQjE2LCAweEJCMTcsIDB4QkIxOSwgMHhCQjFBLCAweEJCMUIsIDB4QkIxRCwgMHhCQjFFLCAweEJCMUYsDQotICAgIDB4QkIyMSwgMHhCQjIyLCAweEJCMjMsIDB4QkIyNCwgMHhCQjI1LCAweEJCMjYsIDB4QkIyNywgMHhCQjI4LA0KLSAgICAweEJCMkEsIDB4QkIyQywgMHhCQjJELCAweEJCMkUsIDB4QkIyRiwgMHhCQjMwLCAweEJCMzEsIDB4QkIzMiwNCi0gICAgMHhCQjMzLCAweEJCMzcsIDB4QkIzOSwgMHhCQjNBLCAweEJCM0YsIDB4QkI0MCwgMHhCQjQxLCAweEJCNDIsDQotICAgIDB4QkI0MywgMHhCQjQ2LCAweEJCNDgsIDB4QkI0QSwgMHhCQjRCLCAweEJCNEMsIDB4QkI0RSwgMHhCQjUxLA0KLSAgICAweEJCNTIsIDB4QkI1MywgMHhCQjU1LCAweEJCNTYsIDB4QkI1NywgMHhCQjU5LCAweEJCNUEsIDB4QkI1QiwNCi0gICAgMHhCQjVDLCAweEJCNUQsIDB4QkI1RSwgMHhCQjVGLCAweEJCNjAsIDB4QkI2MiwgMHhCQjY0LCAweEJCNjUsDQotICAgIDB4QkI2NiwgMHhCQjY3LCAweEJCNjgsIDB4QkI2OSwgMHhCQjZBLCAweEJCNkIsIDB4QkI2RCwgMHhCQjZFLA0KLSAgICAweEJCNkYsIDB4QkI3MCwgMHhCQjcxLCAweEJCNzIsIDB4QkI3MywgMHhCQjc0LCAweEJCNzUsIDB4QkI3NiwNCi0gICAgMHhCQjc3LCAweEJCNzgsIDB4QkI3OSwgMHhCQjdBLCAweEJCN0IsIDB4QkI3QywgMHhCQjdELCAweEJCN0UsDQotICAgIDB4QkI3RiwgMHhCQjgwLCAweEJCODEsIDB4QkI4MiwgMHhCQjgzLCAweEJCODQsIDB4QkI4NSwgMHhCQjg2LA0KLSAgICAweEJCODcsIDB4QkI4OSwgMHhCQjhBLCAweEJCOEIsIDB4QkI4RCwgMHhCQjhFLCAweEJCOEYsIDB4QkI5MSwNCi0gICAgMHhCQjkyLCAweEJCOTMsIDB4QkI5NCwgMHhCQjk1LCAweEJCOTYsIDB4QkI5NywgMHhCQjk4LCAweEJCOTksDQotICAgIDB4QkI5QSwgMHhCQjlCLCAweEJCOUMsIDB4QkI5RCwgMHhCQjlFLCAweEJCOUYsIDB4QkJBMCwgMHhCQkExLA0KLSAgICAweEJCQTIsIDB4QkJBMywgMHhCQkE1LCAweEJCQTYsIDB4QkJBNywgMHhCQkE5LCAweEJCQUEsIDB4QkJBQiwNCi0gICAgMHhCQkFELCAweEJCQUUsIDB4QkJBRiwgMHhCQkIwLCAweEJCQjEsIDB4QkJCMiwgMHhCQkIzLCAweEJCQjUsDQotICAgIDB4QkJCNiwgMHhCQkI4LCAweEJCQjksIDB4QkJCQSwgMHhCQkJCLCAweEJCQkMsIDB4QkJCRCwgMHhCQkJFLA0KLSAgICAweEJCQkYsIDB4QkJDMSwgMHhCQkMyLCAweEJCQzMsIDB4QkJDNSwgMHhCQkM2LCAweEJCQzcsIDB4QkJDOSwNCi0gICAgMHhCQkNBLCAweEJCQ0IsIDB4QkJDQywgMHhCQkNELCAweEJCQ0UsIDB4QkJDRiwgMHhCQkQxLCAweEJCRDIsDQotICAgIDB4QkJENCwgMHhCQkQ1LCAweEJCRDYsIDB4QkJENywgMHhCQkQ4LCAweEJCRDksIDB4QkJEQSwgMHhCQkRCLA0KLSAgICAweEJCREMsIDB4QkJERCwgMHhCQkRFLCAweEJCREYsIDB4QkJFMCwgMHhCQkUxLCAweEJCRTIsIDB4QkJFMywNCi0gICAgMHhCQkU0LCAweEJCRTUsIDB4QkJFNiwgMHhCQkU3LCAweEJCRTgsIDB4QkJFOSwgMHhCQkVBLCAweEJCRUIsDQotICAgIDB4QkJFQywgMHhCQkVELCAweEJCRUUsIDB4QkJFRiwgMHhCQkYwLCAweEJCRjEsIDB4QkJGMiwgMHhCQkYzLA0KLSAgICAweEJCRjQsIDB4QkJGNSwgMHhCQkY2LCAweEJCRjcsIDB4QkJGQSwgMHhCQkZCLCAweEJCRkQsIDB4QkJGRSwNCi0gICAgMHhCQzAxLCAweEJDMDMsIDB4QkMwNCwgMHhCQzA1LCAweEJDMDYsIDB4QkMwNywgMHhCQzBBLCAweEJDMEUsDQotICAgIDB4QkMxMCwgMHhCQzEyLCAweEJDMTMsIDB4QkMxOSwgMHhCQzFBLCAweEJDMjAsIDB4QkMyMSwgMHhCQzIyLA0KLSAgICAweEJDMjMsIDB4QkMyNiwgMHhCQzI4LCAweEJDMkEsIDB4QkMyQiwgMHhCQzJDLCAweEJDMkUsIDB4QkMyRiwNCi0gICAgMHhCQzMyLCAweEJDMzMsIDB4QkMzNSwgMHhCQzM2LCAweEJDMzcsIDB4QkMzOSwgMHhCQzNBLCAweEJDM0IsDQotICAgIDB4QkMzQywgMHhCQzNELCAweEJDM0UsIDB4QkMzRiwgMHhCQzQyLCAweEJDNDYsIDB4QkM0NywgMHhCQzQ4LA0KLSAgICAweEJDNEEsIDB4QkM0QiwgMHhCQzRFLCAweEJDNEYsIDB4QkM1MSwgMHhCQzUyLCAweEJDNTMsIDB4QkM1NCwNCi0gICAgMHhCQzU1LCAweEJDNTYsIDB4QkM1NywgMHhCQzU4LCAweEJDNTksIDB4QkM1QSwgMHhCQzVCLCAweEJDNUMsDQotICAgIDB4QkM1RSwgMHhCQzVGLCAweEJDNjAsIDB4QkM2MSwgMHhCQzYyLCAweEJDNjMsIDB4QkM2NCwgMHhCQzY1LA0KLSAgICAweEJDNjYsIDB4QkM2NywgMHhCQzY4LCAweEJDNjksIDB4QkM2QSwgMHhCQzZCLCAweEJDNkMsIDB4QkM2RCwNCi0gICAgMHhCQzZFLCAweEJDNkYsIDB4QkM3MCwgMHhCQzcxLCAweEJDNzIsIDB4QkM3MywgMHhCQzc0LCAweEJDNzUsDQotICAgIDB4QkM3NiwgMHhCQzc3LCAweEJDNzgsIDB4QkM3OSwgMHhCQzdBLCAweEJDN0IsIDB4QkM3QywgMHhCQzdELA0KLSAgICAweEJDN0UsIDB4QkM3RiwgMHhCQzgwLCAweEJDODEsIDB4QkM4MiwgMHhCQzgzLCAweEJDODYsIDB4QkM4NywNCi0gICAgMHhCQzg5LCAweEJDOEEsIDB4QkM4RCwgMHhCQzhGLCAweEJDOTAsIDB4QkM5MSwgMHhCQzkyLCAweEJDOTMsDQotICAgIDB4QkM5NiwgMHhCQzk4LCAweEJDOUIsIDB4QkM5QywgMHhCQzlELCAweEJDOUUsIDB4QkM5RiwgMHhCQ0EyLA0KLSAgICAweEJDQTMsIDB4QkNBNSwgMHhCQ0E2LCAweEJDQTksIDB4QkNBQSwgMHhCQ0FCLCAweEJDQUMsIDB4QkNBRCwNCi0gICAgMHhCQ0FFLCAweEJDQUYsIDB4QkNCMiwgMHhCQ0I2LCAweEJDQjcsIDB4QkNCOCwgMHhCQ0I5LCAweEJDQkEsDQotICAgIDB4QkNCQiwgMHhCQ0JFLCAweEJDQkYsIDB4QkNDMSwgMHhCQ0MyLCAweEJDQzMsIDB4QkNDNSwgMHhCQ0M2LA0KLSAgICAweEJDQzcsIDB4QkNDOCwgMHhCQ0M5LCAweEJDQ0EsIDB4QkNDQiwgMHhCQ0NDLCAweEJDQ0UsIDB4QkNEMiwNCi0gICAgMHhCQ0QzLCAweEJDRDQsIDB4QkNENiwgMHhCQ0Q3LCAweEJDRDksIDB4QkNEQSwgMHhCQ0RCLCAweEJDREQsDQotICAgIDB4QkNERSwgMHhCQ0RGLCAweEJDRTAsIDB4QkNFMSwgMHhCQ0UyLCAweEJDRTMsIDB4QkNFNCwgMHhCQ0U1LA0KLSAgICAweEJDRTYsIDB4QkNFNywgMHhCQ0U4LCAweEJDRTksIDB4QkNFQSwgMHhCQ0VCLCAweEJDRUMsIDB4QkNFRCwNCi0gICAgMHhCQ0VFLCAweEJDRUYsIDB4QkNGMCwgMHhCQ0YxLCAweEJDRjIsIDB4QkNGMywgMHhCQ0Y3LCAweEJDRjksDQotICAgIDB4QkNGQSwgMHhCQ0ZCLCAweEJDRkQsIDB4QkNGRSwgMHhCQ0ZGLCAweEJEMDAsIDB4QkQwMSwgMHhCRDAyLA0KLSAgICAweEJEMDMsIDB4QkQwNiwgMHhCRDA4LCAweEJEMEEsIDB4QkQwQiwgMHhCRDBDLCAweEJEMEQsIDB4QkQwRSwNCi0gICAgMHhCRDBGLCAweEJEMTEsIDB4QkQxMiwgMHhCRDEzLCAweEJEMTUsIDB4QkQxNiwgMHhCRDE3LCAweEJEMTgsDQotICAgIDB4QkQxOSwgMHhCRDFBLCAweEJEMUIsIDB4QkQxQywgMHhCRDFELCAweEJEMUUsIDB4QkQxRiwgMHhCRDIwLA0KLSAgICAweEJEMjEsIDB4QkQyMiwgMHhCRDIzLCAweEJEMjUsIDB4QkQyNiwgMHhCRDI3LCAweEJEMjgsIDB4QkQyOSwNCi0gICAgMHhCRDJBLCAweEJEMkIsIDB4QkQyRCwgMHhCRDJFLCAweEJEMkYsIDB4QkQzMCwgMHhCRDMxLCAweEJEMzIsDQotICAgIDB4QkQzMywgMHhCRDM0LCAweEJEMzUsIDB4QkQzNiwgMHhCRDM3LCAweEJEMzgsIDB4QkQzOSwgMHhCRDNBLA0KLSAgICAweEJEM0IsIDB4QkQzQywgMHhCRDNELCAweEJEM0UsIDB4QkQzRiwgMHhCRDQxLCAweEJENDIsIDB4QkQ0MywNCi0gICAgMHhCRDQ0LCAweEJENDUsIDB4QkQ0NiwgMHhCRDQ3LCAweEJENEEsIDB4QkQ0QiwgMHhCRDRELCAweEJENEUsDQotICAgIDB4QkQ0RiwgMHhCRDUxLCAweEJENTIsIDB4QkQ1MywgMHhCRDU0LCAweEJENTUsIDB4QkQ1NiwgMHhCRDU3LA0KLSAgICAweEJENUEsIDB4QkQ1QiwgMHhCRDVDLCAweEJENUQsIDB4QkQ1RSwgMHhCRDVGLCAweEJENjAsIDB4QkQ2MSwNCi0gICAgMHhCRDYyLCAweEJENjMsIDB4QkQ2NSwgMHhCRDY2LCAweEJENjcsIDB4QkQ2OSwgMHhCRDZBLCAweEJENkIsDQotICAgIDB4QkQ2QywgMHhCRDZELCAweEJENkUsIDB4QkQ2RiwgMHhCRDcwLCAweEJENzEsIDB4QkQ3MiwgMHhCRDczLA0KLSAgICAweEJENzQsIDB4QkQ3NSwgMHhCRDc2LCAweEJENzcsIDB4QkQ3OCwgMHhCRDc5LCAweEJEN0EsIDB4QkQ3QiwNCi0gICAgMHhCRDdDLCAweEJEN0QsIDB4QkQ3RSwgMHhCRDdGLCAweEJEODIsIDB4QkQ4MywgMHhCRDg1LCAweEJEODYsDQotICAgIDB4QkQ4QiwgMHhCRDhDLCAweEJEOEQsIDB4QkQ4RSwgMHhCRDhGLCAweEJEOTIsIDB4QkQ5NCwgMHhCRDk2LA0KLSAgICAweEJEOTcsIDB4QkQ5OCwgMHhCRDlCLCAweEJEOUQsIDB4QkQ5RSwgMHhCRDlGLCAweEJEQTAsIDB4QkRBMSwNCi0gICAgMHhCREEyLCAweEJEQTMsIDB4QkRBNSwgMHhCREE2LCAweEJEQTcsIDB4QkRBOCwgMHhCREE5LCAweEJEQUEsDQotICAgIDB4QkRBQiwgMHhCREFDLCAweEJEQUQsIDB4QkRBRSwgMHhCREFGLCAweEJEQjEsIDB4QkRCMiwgMHhCREIzLA0KLSAgICAweEJEQjQsIDB4QkRCNSwgMHhCREI2LCAweEJEQjcsIDB4QkRCOSwgMHhCREJBLCAweEJEQkIsIDB4QkRCQywNCi0gICAgMHhCREJELCAweEJEQkUsIDB4QkRCRiwgMHhCREMwLCAweEJEQzEsIDB4QkRDMiwgMHhCREMzLCAweEJEQzQsDQotICAgIDB4QkRDNSwgMHhCREM2LCAweEJEQzcsIDB4QkRDOCwgMHhCREM5LCAweEJEQ0EsIDB4QkRDQiwgMHhCRENDLA0KLSAgICAweEJEQ0QsIDB4QkRDRSwgMHhCRENGLCAweEJERDAsIDB4QkREMSwgMHhCREQyLCAweEJERDMsIDB4QkRENiwNCi0gICAgMHhCREQ3LCAweEJERDksIDB4QkREQSwgMHhCRERCLCAweEJEREQsIDB4QkRERSwgMHhCRERGLCAweEJERTAsDQotICAgIDB4QkRFMSwgMHhCREUyLCAweEJERTMsIDB4QkRFNCwgMHhCREU1LCAweEJERTYsIDB4QkRFNywgMHhCREU4LA0KLSAgICAweEJERUEsIDB4QkRFQiwgMHhCREVDLCAweEJERUQsIDB4QkRFRSwgMHhCREVGLCAweEJERjEsIDB4QkRGMiwNCi0gICAgMHhCREYzLCAweEJERjUsIDB4QkRGNiwgMHhCREY3LCAweEJERjksIDB4QkRGQSwgMHhCREZCLCAweEJERkMsDQotICAgIDB4QkRGRCwgMHhCREZFLCAweEJERkYsIDB4QkUwMSwgMHhCRTAyLCAweEJFMDQsIDB4QkUwNiwgMHhCRTA3LA0KLSAgICAweEJFMDgsIDB4QkUwOSwgMHhCRTBBLCAweEJFMEIsIDB4QkUwRSwgMHhCRTBGLCAweEJFMTEsIDB4QkUxMiwNCi0gICAgMHhCRTEzLCAweEJFMTUsIDB4QkUxNiwgMHhCRTE3LCAweEJFMTgsIDB4QkUxOSwgMHhCRTFBLCAweEJFMUIsDQotICAgIDB4QkUxRSwgMHhCRTIwLCAweEJFMjEsIDB4QkUyMiwgMHhCRTIzLCAweEJFMjQsIDB4QkUyNSwgMHhCRTI2LA0KLSAgICAweEJFMjcsIDB4QkUyOCwgMHhCRTI5LCAweEJFMkEsIDB4QkUyQiwgMHhCRTJDLCAweEJFMkQsIDB4QkUyRSwNCi0gICAgMHhCRTJGLCAweEJFMzAsIDB4QkUzMSwgMHhCRTMyLCAweEJFMzMsIDB4QkUzNCwgMHhCRTM1LCAweEJFMzYsDQotICAgIDB4QkUzNywgMHhCRTM4LCAweEJFMzksIDB4QkUzQSwgMHhCRTNCLCAweEJFM0MsIDB4QkUzRCwgMHhCRTNFLA0KLSAgICAweEJFM0YsIDB4QkU0MCwgMHhCRTQxLCAweEJFNDIsIDB4QkU0MywgMHhCRTQ2LCAweEJFNDcsIDB4QkU0OSwNCi0gICAgMHhCRTRBLCAweEJFNEIsIDB4QkU0RCwgMHhCRTRGLCAweEJFNTAsIDB4QkU1MSwgMHhCRTUyLCAweEJFNTMsDQotICAgIDB4QkU1NiwgMHhCRTU4LCAweEJFNUMsIDB4QkU1RCwgMHhCRTVFLCAweEJFNUYsIDB4QkU2MiwgMHhCRTYzLA0KLSAgICAweEJFNjUsIDB4QkU2NiwgMHhCRTY3LCAweEJFNjksIDB4QkU2QiwgMHhCRTZDLCAweEJFNkQsIDB4QkU2RSwNCi0gICAgMHhCRTZGLCAweEJFNzIsIDB4QkU3NiwgMHhCRTc3LCAweEJFNzgsIDB4QkU3OSwgMHhCRTdBLCAweEJFN0UsDQotICAgIDB4QkU3RiwgMHhCRTgxLCAweEJFODIsIDB4QkU4MywgMHhCRTg1LCAweEJFODYsIDB4QkU4NywgMHhCRTg4LA0KLSAgICAweEJFODksIDB4QkU4QSwgMHhCRThCLCAweEJFOEUsIDB4QkU5MiwgMHhCRTkzLCAweEJFOTQsIDB4QkU5NSwNCi0gICAgMHhCRTk2LCAweEJFOTcsIDB4QkU5QSwgMHhCRTlCLCAweEJFOUMsIDB4QkU5RCwgMHhCRTlFLCAweEJFOUYsDQotICAgIDB4QkVBMCwgMHhCRUExLCAweEJFQTIsIDB4QkVBMywgMHhCRUE0LCAweEJFQTUsIDB4QkVBNiwgMHhCRUE3LA0KLSAgICAweEJFQTksIDB4QkVBQSwgMHhCRUFCLCAweEJFQUMsIDB4QkVBRCwgMHhCRUFFLCAweEJFQUYsIDB4QkVCMCwNCi0gICAgMHhCRUIxLCAweEJFQjIsIDB4QkVCMywgMHhCRUI0LCAweEJFQjUsIDB4QkVCNiwgMHhCRUI3LCAweEJFQjgsDQotICAgIDB4QkVCOSwgMHhCRUJBLCAweEJFQkIsIDB4QkVCQywgMHhCRUJELCAweEJFQkUsIDB4QkVCRiwgMHhCRUMwLA0KLSAgICAweEJFQzEsIDB4QkVDMiwgMHhCRUMzLCAweEJFQzQsIDB4QkVDNSwgMHhCRUM2LCAweEJFQzcsIDB4QkVDOCwNCi0gICAgMHhCRUM5LCAweEJFQ0EsIDB4QkVDQiwgMHhCRUNDLCAweEJFQ0QsIDB4QkVDRSwgMHhCRUNGLCAweEJFRDIsDQotICAgIDB4QkVEMywgMHhCRUQ1LCAweEJFRDYsIDB4QkVEOSwgMHhCRURBLCAweEJFREIsIDB4QkVEQywgMHhCRURELA0KLSAgICAweEJFREUsIDB4QkVERiwgMHhCRUUxLCAweEJFRTIsIDB4QkVFNiwgMHhCRUU3LCAweEJFRTgsIDB4QkVFOSwNCi0gICAgMHhCRUVBLCAweEJFRUIsIDB4QkVFRCwgMHhCRUVFLCAweEJFRUYsIDB4QkVGMCwgMHhCRUYxLCAweEJFRjIsDQotICAgIDB4QkVGMywgMHhCRUY0LCAweEJFRjUsIDB4QkVGNiwgMHhCRUY3LCAweEJFRjgsIDB4QkVGOSwgMHhCRUZBLA0KLSAgICAweEJFRkIsIDB4QkVGQywgMHhCRUZELCAweEJFRkUsIDB4QkVGRiwgMHhCRjAwLCAweEJGMDIsIDB4QkYwMywNCi0gICAgMHhCRjA0LCAweEJGMDUsIDB4QkYwNiwgMHhCRjA3LCAweEJGMEEsIDB4QkYwQiwgMHhCRjBDLCAweEJGMEQsDQotICAgIDB4QkYwRSwgMHhCRjBGLCAweEJGMTAsIDB4QkYxMSwgMHhCRjEyLCAweEJGMTMsIDB4QkYxNCwgMHhCRjE1LA0KLSAgICAweEJGMTYsIDB4QkYxNywgMHhCRjFBLCAweEJGMUUsIDB4QkYxRiwgMHhCRjIwLCAweEJGMjEsIDB4QkYyMiwNCi0gICAgMHhCRjIzLCAweEJGMjQsIDB4QkYyNSwgMHhCRjI2LCAweEJGMjcsIDB4QkYyOCwgMHhCRjI5LCAweEJGMkEsDQotICAgIDB4QkYyQiwgMHhCRjJDLCAweEJGMkQsIDB4QkYyRSwgMHhCRjJGLCAweEJGMzAsIDB4QkYzMSwgMHhCRjMyLA0KLSAgICAweEJGMzMsIDB4QkYzNCwgMHhCRjM1LCAweEJGMzYsIDB4QkYzNywgMHhCRjM4LCAweEJGMzksIDB4QkYzQSwNCi0gICAgMHhCRjNCLCAweEJGM0MsIDB4QkYzRCwgMHhCRjNFLCAweEJGM0YsIDB4QkY0MiwgMHhCRjQzLCAweEJGNDUsDQotICAgIDB4QkY0NiwgMHhCRjQ3LCAweEJGNDksIDB4QkY0QSwgMHhCRjRCLCAweEJGNEMsIDB4QkY0RCwgMHhCRjRFLA0KLSAgICAweEJGNEYsIDB4QkY1MiwgMHhCRjUzLCAweEJGNTQsIDB4QkY1NiwgMHhCRjU3LCAweEJGNTgsIDB4QkY1OSwNCi0gICAgMHhCRjVBLCAweEJGNUIsIDB4QkY1QywgMHhCRjVELCAweEJGNUUsIDB4QkY1RiwgMHhCRjYwLCAweEJGNjEsDQotICAgIDB4QkY2MiwgMHhCRjYzLCAweEJGNjQsIDB4QkY2NSwgMHhCRjY2LCAweEJGNjcsIDB4QkY2OCwgMHhCRjY5LA0KLSAgICAweEJGNkEsIDB4QkY2QiwgMHhCRjZDLCAweEJGNkQsIDB4QkY2RSwgMHhCRjZGLCAweEJGNzAsIDB4QkY3MSwNCi0gICAgMHhCRjcyLCAweEJGNzMsIDB4QkY3NCwgMHhCRjc1LCAweEJGNzYsIDB4QkY3NywgMHhCRjc4LCAweEJGNzksDQotICAgIDB4QkY3QSwgMHhCRjdCLCAweEJGN0MsIDB4QkY3RCwgMHhCRjdFLCAweEJGN0YsIDB4QkY4MCwgMHhCRjgxLA0KLSAgICAweEJGODIsIDB4QkY4MywgMHhCRjg0LCAweEJGODUsIDB4QkY4NiwgMHhCRjg3LCAweEJGODgsIDB4QkY4OSwNCi0gICAgMHhCRjhBLCAweEJGOEIsIDB4QkY4QywgMHhCRjhELCAweEJGOEUsIDB4QkY4RiwgMHhCRjkwLCAweEJGOTEsDQotICAgIDB4QkY5MiwgMHhCRjkzLCAweEJGOTUsIDB4QkY5NiwgMHhCRjk3LCAweEJGOTgsIDB4QkY5OSwgMHhCRjlBLA0KLSAgICAweEJGOUIsIDB4QkY5QywgMHhCRjlELCAweEJGOUUsIDB4QkY5RiwgMHhCRkEwLCAweEJGQTEsIDB4QkZBMiwNCi0gICAgMHhCRkEzLCAweEJGQTQsIDB4QkZBNSwgMHhCRkE2LCAweEJGQTcsIDB4QkZBOCwgMHhCRkE5LCAweEJGQUEsDQotICAgIDB4QkZBQiwgMHhCRkFDLCAweEJGQUQsIDB4QkZBRSwgMHhCRkFGLCAweEJGQjEsIDB4QkZCMiwgMHhCRkIzLA0KLSAgICAweEJGQjQsIDB4QkZCNSwgMHhCRkI2LCAweEJGQjcsIDB4QkZCOCwgMHhCRkI5LCAweEJGQkEsIDB4QkZCQiwNCi0gICAgMHhCRkJDLCAweEJGQkQsIDB4QkZCRSwgMHhCRkJGLCAweEJGQzAsIDB4QkZDMSwgMHhCRkMyLCAweEJGQzMsDQotICAgIDB4QkZDNCwgMHhCRkM2LCAweEJGQzcsIDB4QkZDOCwgMHhCRkM5LCAweEJGQ0EsIDB4QkZDQiwgMHhCRkNFLA0KLSAgICAweEJGQ0YsIDB4QkZEMSwgMHhCRkQyLCAweEJGRDMsIDB4QkZENSwgMHhCRkQ2LCAweEJGRDcsIDB4QkZEOCwNCi0gICAgMHhCRkQ5LCAweEJGREEsIDB4QkZEQiwgMHhCRkRELCAweEJGREUsIDB4QkZFMCwgMHhCRkUyLCAweEJGRTMsDQotICAgIDB4QkZFNCwgMHhCRkU1LCAweEJGRTYsIDB4QkZFNywgMHhCRkU4LCAweEJGRTksIDB4QkZFQSwgMHhCRkVCLA0KLSAgICAweEJGRUMsIDB4QkZFRCwgMHhCRkVFLCAweEJGRUYsIDB4QkZGMCwgMHhCRkYxLCAweEJGRjIsIDB4QkZGMywNCi0gICAgMHhCRkY0LCAweEJGRjUsIDB4QkZGNiwgMHhCRkY3LCAweEJGRjgsIDB4QkZGOSwgMHhCRkZBLCAweEJGRkIsDQotICAgIDB4QkZGQywgMHhCRkZELCAweEJGRkUsIDB4QkZGRiwgMHhDMDAwLCAweEMwMDEsIDB4QzAwMiwgMHhDMDAzLA0KLSAgICAweEMwMDQsIDB4QzAwNSwgMHhDMDA2LCAweEMwMDcsIDB4QzAwOCwgMHhDMDA5LCAweEMwMEEsIDB4QzAwQiwNCi0gICAgMHhDMDBDLCAweEMwMEQsIDB4QzAwRSwgMHhDMDBGLCAweEMwMTAsIDB4QzAxMSwgMHhDMDEyLCAweEMwMTMsDQotICAgIDB4QzAxNCwgMHhDMDE1LCAweEMwMTYsIDB4QzAxNywgMHhDMDE4LCAweEMwMTksIDB4QzAxQSwgMHhDMDFCLA0KLSAgICAweEMwMUMsIDB4QzAxRCwgMHhDMDFFLCAweEMwMUYsIDB4QzAyMCwgMHhDMDIxLCAweEMwMjIsIDB4QzAyMywNCi0gICAgMHhDMDI0LCAweEMwMjUsIDB4QzAyNiwgMHhDMDI3LCAweEMwMjgsIDB4QzAyOSwgMHhDMDJBLCAweEMwMkIsDQotICAgIDB4QzAyQywgMHhDMDJELCAweEMwMkUsIDB4QzAyRiwgMHhDMDMwLCAweEMwMzEsIDB4QzAzMiwgMHhDMDMzLA0KLSAgICAweEMwMzQsIDB4QzAzNSwgMHhDMDM2LCAweEMwMzcsIDB4QzAzOCwgMHhDMDM5LCAweEMwM0EsIDB4QzAzQiwNCi0gICAgMHhDMDNELCAweEMwM0UsIDB4QzAzRiwgMHhDMDQwLCAweEMwNDEsIDB4QzA0MiwgMHhDMDQzLCAweEMwNDQsDQotICAgIDB4QzA0NSwgMHhDMDQ2LCAweEMwNDcsIDB4QzA0OCwgMHhDMDQ5LCAweEMwNEEsIDB4QzA0QiwgMHhDMDRDLA0KLSAgICAweEMwNEQsIDB4QzA0RSwgMHhDMDRGLCAweEMwNTAsIDB4QzA1MiwgMHhDMDUzLCAweEMwNTQsIDB4QzA1NSwNCi0gICAgMHhDMDU2LCAweEMwNTcsIDB4QzA1OSwgMHhDMDVBLCAweEMwNUIsIDB4QzA1RCwgMHhDMDVFLCAweEMwNUYsDQotICAgIDB4QzA2MSwgMHhDMDYyLCAweEMwNjMsIDB4QzA2NCwgMHhDMDY1LCAweEMwNjYsIDB4QzA2NywgMHhDMDZBLA0KLSAgICAweEMwNkIsIDB4QzA2QywgMHhDMDZELCAweEMwNkUsIDB4QzA2RiwgMHhDMDcwLCAweEMwNzEsIDB4QzA3MiwNCi0gICAgMHhDMDczLCAweEMwNzQsIDB4QzA3NSwgMHhDMDc2LCAweEMwNzcsIDB4QzA3OCwgMHhDMDc5LCAweEMwN0EsDQotICAgIDB4QzA3QiwgMHhDMDdDLCAweEMwN0QsIDB4QzA3RSwgMHhDMDdGLCAweEMwODAsIDB4QzA4MSwgMHhDMDgyLA0KLSAgICAweEMwODMsIDB4QzA4NCwgMHhDMDg1LCAweEMwODYsIDB4QzA4NywgMHhDMDg4LCAweEMwODksIDB4QzA4QSwNCi0gICAgMHhDMDhCLCAweEMwOEMsIDB4QzA4RCwgMHhDMDhFLCAweEMwOEYsIDB4QzA5MiwgMHhDMDkzLCAweEMwOTUsDQotICAgIDB4QzA5NiwgMHhDMDk3LCAweEMwOTksIDB4QzA5QSwgMHhDMDlCLCAweEMwOUMsIDB4QzA5RCwgMHhDMDlFLA0KLSAgICAweEMwOUYsIDB4QzBBMiwgMHhDMEE0LCAweEMwQTYsIDB4QzBBNywgMHhDMEE4LCAweEMwQTksIDB4QzBBQSwNCi0gICAgMHhDMEFCLCAweEMwQUUsIDB4QzBCMSwgMHhDMEIyLCAweEMwQjcsIDB4QzBCOCwgMHhDMEI5LCAweEMwQkEsDQotICAgIDB4QzBCQiwgMHhDMEJFLCAweEMwQzIsIDB4QzBDMywgMHhDMEM0LCAweEMwQzYsIDB4QzBDNywgMHhDMENBLA0KLSAgICAweEMwQ0IsIDB4QzBDRCwgMHhDMENFLCAweEMwQ0YsIDB4QzBEMSwgMHhDMEQyLCAweEMwRDMsIDB4QzBENCwNCi0gICAgMHhDMEQ1LCAweEMwRDYsIDB4QzBENywgMHhDMERBLCAweEMwREUsIDB4QzBERiwgMHhDMEUwLCAweEMwRTEsDQotICAgIDB4QzBFMiwgMHhDMEUzLCAweEMwRTYsIDB4QzBFNywgMHhDMEU5LCAweEMwRUEsIDB4QzBFQiwgMHhDMEVELA0KLSAgICAweEMwRUUsIDB4QzBFRiwgMHhDMEYwLCAweEMwRjEsIDB4QzBGMiwgMHhDMEYzLCAweEMwRjYsIDB4QzBGOCwNCi0gICAgMHhDMEZBLCAweEMwRkIsIDB4QzBGQywgMHhDMEZELCAweEMwRkUsIDB4QzBGRiwgMHhDMTAxLCAweEMxMDIsDQotICAgIDB4QzEwMywgMHhDMTA1LCAweEMxMDYsIDB4QzEwNywgMHhDMTA5LCAweEMxMEEsIDB4QzEwQiwgMHhDMTBDLA0KLSAgICAweEMxMEQsIDB4QzEwRSwgMHhDMTBGLCAweEMxMTEsIDB4QzExMiwgMHhDMTEzLCAweEMxMTQsIDB4QzExNiwNCi0gICAgMHhDMTE3LCAweEMxMTgsIDB4QzExOSwgMHhDMTFBLCAweEMxMUIsIDB4QzEyMSwgMHhDMTIyLCAweEMxMjUsDQotICAgIDB4QzEyOCwgMHhDMTI5LCAweEMxMkEsIDB4QzEyQiwgMHhDMTJFLCAweEMxMzIsIDB4QzEzMywgMHhDMTM0LA0KLSAgICAweEMxMzUsIDB4QzEzNywgMHhDMTNBLCAweEMxM0IsIDB4QzEzRCwgMHhDMTNFLCAweEMxM0YsIDB4QzE0MSwNCi0gICAgMHhDMTQyLCAweEMxNDMsIDB4QzE0NCwgMHhDMTQ1LCAweEMxNDYsIDB4QzE0NywgMHhDMTRBLCAweEMxNEUsDQotICAgIDB4QzE0RiwgMHhDMTUwLCAweEMxNTEsIDB4QzE1MiwgMHhDMTUzLCAweEMxNTYsIDB4QzE1NywgMHhDMTU5LA0KLSAgICAweEMxNUEsIDB4QzE1QiwgMHhDMTVELCAweEMxNUUsIDB4QzE1RiwgMHhDMTYwLCAweEMxNjEsIDB4QzE2MiwNCi0gICAgMHhDMTYzLCAweEMxNjYsIDB4QzE2QSwgMHhDMTZCLCAweEMxNkMsIDB4QzE2RCwgMHhDMTZFLCAweEMxNkYsDQotICAgIDB4QzE3MSwgMHhDMTcyLCAweEMxNzMsIDB4QzE3NSwgMHhDMTc2LCAweEMxNzcsIDB4QzE3OSwgMHhDMTdBLA0KLSAgICAweEMxN0IsIDB4QzE3QywgMHhDMTdELCAweEMxN0UsIDB4QzE3RiwgMHhDMTgwLCAweEMxODEsIDB4QzE4MiwNCi0gICAgMHhDMTgzLCAweEMxODQsIDB4QzE4NiwgMHhDMTg3LCAweEMxODgsIDB4QzE4OSwgMHhDMThBLCAweEMxOEIsDQotICAgIDB4QzE4RiwgMHhDMTkxLCAweEMxOTIsIDB4QzE5MywgMHhDMTk1LCAweEMxOTcsIDB4QzE5OCwgMHhDMTk5LA0KLSAgICAweEMxOUEsIDB4QzE5QiwgMHhDMTlFLCAweEMxQTAsIDB4QzFBMiwgMHhDMUEzLCAweEMxQTQsIDB4QzFBNiwNCi0gICAgMHhDMUE3LCAweEMxQUEsIDB4QzFBQiwgMHhDMUFELCAweEMxQUUsIDB4QzFBRiwgMHhDMUIxLCAweEMxQjIsDQotICAgIDB4QzFCMywgMHhDMUI0LCAweEMxQjUsIDB4QzFCNiwgMHhDMUI3LCAweEMxQjgsIDB4QzFCOSwgMHhDMUJBLA0KLSAgICAweEMxQkIsIDB4QzFCQywgMHhDMUJFLCAweEMxQkYsIDB4QzFDMCwgMHhDMUMxLCAweEMxQzIsIDB4QzFDMywNCi0gICAgMHhDMUM1LCAweEMxQzYsIDB4QzFDNywgMHhDMUM5LCAweEMxQ0EsIDB4QzFDQiwgMHhDMUNELCAweEMxQ0UsDQotICAgIDB4QzFDRiwgMHhDMUQwLCAweEMxRDEsIDB4QzFEMiwgMHhDMUQzLCAweEMxRDUsIDB4QzFENiwgMHhDMUQ5LA0KLSAgICAweEMxREEsIDB4QzFEQiwgMHhDMURDLCAweEMxREQsIDB4QzFERSwgMHhDMURGLCAweEMxRTEsIDB4QzFFMiwNCi0gICAgMHhDMUUzLCAweEMxRTUsIDB4QzFFNiwgMHhDMUU3LCAweEMxRTksIDB4QzFFQSwgMHhDMUVCLCAweEMxRUMsDQotICAgIDB4QzFFRCwgMHhDMUVFLCAweEMxRUYsIDB4QzFGMiwgMHhDMUY0LCAweEMxRjUsIDB4QzFGNiwgMHhDMUY3LA0KLSAgICAweEMxRjgsIDB4QzFGOSwgMHhDMUZBLCAweEMxRkIsIDB4QzFGRSwgMHhDMUZGLCAweEMyMDEsIDB4QzIwMiwNCi0gICAgMHhDMjAzLCAweEMyMDUsIDB4QzIwNiwgMHhDMjA3LCAweEMyMDgsIDB4QzIwOSwgMHhDMjBBLCAweEMyMEIsDQotICAgIDB4QzIwRSwgMHhDMjEwLCAweEMyMTIsIDB4QzIxMywgMHhDMjE0LCAweEMyMTUsIDB4QzIxNiwgMHhDMjE3LA0KLSAgICAweEMyMUEsIDB4QzIxQiwgMHhDMjFELCAweEMyMUUsIDB4QzIyMSwgMHhDMjIyLCAweEMyMjMsIDB4QzIyNCwNCi0gICAgMHhDMjI1LCAweEMyMjYsIDB4QzIyNywgMHhDMjJBLCAweEMyMkMsIDB4QzIyRSwgMHhDMjMwLCAweEMyMzMsDQotICAgIDB4QzIzNSwgMHhDMjM2LCAweEMyMzcsIDB4QzIzOCwgMHhDMjM5LCAweEMyM0EsIDB4QzIzQiwgMHhDMjNDLA0KLSAgICAweEMyM0QsIDB4QzIzRSwgMHhDMjNGLCAweEMyNDAsIDB4QzI0MSwgMHhDMjQyLCAweEMyNDMsIDB4QzI0NCwNCi0gICAgMHhDMjQ1LCAweEMyNDYsIDB4QzI0NywgMHhDMjQ5LCAweEMyNEEsIDB4QzI0QiwgMHhDMjRDLCAweEMyNEQsDQotICAgIDB4QzI0RSwgMHhDMjRGLCAweEMyNTIsIDB4QzI1MywgMHhDMjU1LCAweEMyNTYsIDB4QzI1NywgMHhDMjU5LA0KLSAgICAweEMyNUEsIDB4QzI1QiwgMHhDMjVDLCAweEMyNUQsIDB4QzI1RSwgMHhDMjVGLCAweEMyNjEsIDB4QzI2MiwNCi0gICAgMHhDMjYzLCAweEMyNjQsIDB4QzI2NiwgMHhDMjY3LCAweEMyNjgsIDB4QzI2OSwgMHhDMjZBLCAweEMyNkIsDQotICAgIDB4QzI2RSwgMHhDMjZGLCAweEMyNzEsIDB4QzI3MiwgMHhDMjczLCAweEMyNzUsIDB4QzI3NiwgMHhDMjc3LA0KLSAgICAweEMyNzgsIDB4QzI3OSwgMHhDMjdBLCAweEMyN0IsIDB4QzI3RSwgMHhDMjgwLCAweEMyODIsIDB4QzI4MywNCi0gICAgMHhDMjg0LCAweEMyODUsIDB4QzI4NiwgMHhDMjg3LCAweEMyOEEsIDB4QzI4QiwgMHhDMjhDLCAweEMyOEQsDQotICAgIDB4QzI4RSwgMHhDMjhGLCAweEMyOTEsIDB4QzI5MiwgMHhDMjkzLCAweEMyOTQsIDB4QzI5NSwgMHhDMjk2LA0KLSAgICAweEMyOTcsIDB4QzI5OSwgMHhDMjlBLCAweEMyOUMsIDB4QzI5RSwgMHhDMjlGLCAweEMyQTAsIDB4QzJBMSwNCi0gICAgMHhDMkEyLCAweEMyQTMsIDB4QzJBNiwgMHhDMkE3LCAweEMyQTksIDB4QzJBQSwgMHhDMkFCLCAweEMyQUUsDQotICAgIDB4QzJBRiwgMHhDMkIwLCAweEMyQjEsIDB4QzJCMiwgMHhDMkIzLCAweEMyQjYsIDB4QzJCOCwgMHhDMkJBLA0KLSAgICAweEMyQkIsIDB4QzJCQywgMHhDMkJELCAweEMyQkUsIDB4QzJCRiwgMHhDMkMwLCAweEMyQzEsIDB4QzJDMiwNCi0gICAgMHhDMkMzLCAweEMyQzQsIDB4QzJDNSwgMHhDMkM2LCAweEMyQzcsIDB4QzJDOCwgMHhDMkM5LCAweEMyQ0EsDQotICAgIDB4QzJDQiwgMHhDMkNDLCAweEMyQ0QsIDB4QzJDRSwgMHhDMkNGLCAweEMyRDAsIDB4QzJEMSwgMHhDMkQyLA0KLSAgICAweEMyRDMsIDB4QzJENCwgMHhDMkQ1LCAweEMyRDYsIDB4QzJENywgMHhDMkQ4LCAweEMyRDksIDB4QzJEQSwNCi0gICAgMHhDMkRCLCAweEMyREUsIDB4QzJERiwgMHhDMkUxLCAweEMyRTIsIDB4QzJFNSwgMHhDMkU2LCAweEMyRTcsDQotICAgIDB4QzJFOCwgMHhDMkU5LCAweEMyRUEsIDB4QzJFRSwgMHhDMkYwLCAweEMyRjIsIDB4QzJGMywgMHhDMkY0LA0KLSAgICAweEMyRjUsIDB4QzJGNywgMHhDMkZBLCAweEMyRkQsIDB4QzJGRSwgMHhDMkZGLCAweEMzMDEsIDB4QzMwMiwNCi0gICAgMHhDMzAzLCAweEMzMDQsIDB4QzMwNSwgMHhDMzA2LCAweEMzMDcsIDB4QzMwQSwgMHhDMzBCLCAweEMzMEUsDQotICAgIDB4QzMwRiwgMHhDMzEwLCAweEMzMTEsIDB4QzMxMiwgMHhDMzE2LCAweEMzMTcsIDB4QzMxOSwgMHhDMzFBLA0KLSAgICAweEMzMUIsIDB4QzMxRCwgMHhDMzFFLCAweEMzMUYsIDB4QzMyMCwgMHhDMzIxLCAweEMzMjIsIDB4QzMyMywNCi0gICAgMHhDMzI2LCAweEMzMjcsIDB4QzMyQSwgMHhDMzJCLCAweEMzMkMsIDB4QzMyRCwgMHhDMzJFLCAweEMzMkYsDQotICAgIDB4QzMzMCwgMHhDMzMxLCAweEMzMzIsIDB4QzMzMywgMHhDMzM0LCAweEMzMzUsIDB4QzMzNiwgMHhDMzM3LA0KLSAgICAweEMzMzgsIDB4QzMzOSwgMHhDMzNBLCAweEMzM0IsIDB4QzMzQywgMHhDMzNELCAweEMzM0UsIDB4QzMzRiwNCi0gICAgMHhDMzQwLCAweEMzNDEsIDB4QzM0MiwgMHhDMzQzLCAweEMzNDQsIDB4QzM0NiwgMHhDMzQ3LCAweEMzNDgsDQotICAgIDB4QzM0OSwgMHhDMzRBLCAweEMzNEIsIDB4QzM0QywgMHhDMzRELCAweEMzNEUsIDB4QzM0RiwgMHhDMzUwLA0KLSAgICAweEMzNTEsIDB4QzM1MiwgMHhDMzUzLCAweEMzNTQsIDB4QzM1NSwgMHhDMzU2LCAweEMzNTcsIDB4QzM1OCwNCi0gICAgMHhDMzU5LCAweEMzNUEsIDB4QzM1QiwgMHhDMzVDLCAweEMzNUQsIDB4QzM1RSwgMHhDMzVGLCAweEMzNjAsDQotICAgIDB4QzM2MSwgMHhDMzYyLCAweEMzNjMsIDB4QzM2NCwgMHhDMzY1LCAweEMzNjYsIDB4QzM2NywgMHhDMzZBLA0KLSAgICAweEMzNkIsIDB4QzM2RCwgMHhDMzZFLCAweEMzNkYsIDB4QzM3MSwgMHhDMzczLCAweEMzNzQsIDB4QzM3NSwNCi0gICAgMHhDMzc2LCAweEMzNzcsIDB4QzM3QSwgMHhDMzdCLCAweEMzN0UsIDB4QzM3RiwgMHhDMzgwLCAweEMzODEsDQotICAgIDB4QzM4MiwgMHhDMzgzLCAweEMzODUsIDB4QzM4NiwgMHhDMzg3LCAweEMzODksIDB4QzM4QSwgMHhDMzhCLA0KLSAgICAweEMzOEQsIDB4QzM4RSwgMHhDMzhGLCAweEMzOTAsIDB4QzM5MSwgMHhDMzkyLCAweEMzOTMsIDB4QzM5NCwNCi0gICAgMHhDMzk1LCAweEMzOTYsIDB4QzM5NywgMHhDMzk4LCAweEMzOTksIDB4QzM5QSwgMHhDMzlCLCAweEMzOUMsDQotICAgIDB4QzM5RCwgMHhDMzlFLCAweEMzOUYsIDB4QzNBMCwgMHhDM0ExLCAweEMzQTIsIDB4QzNBMywgMHhDM0E0LA0KLSAgICAweEMzQTUsIDB4QzNBNiwgMHhDM0E3LCAweEMzQTgsIDB4QzNBOSwgMHhDM0FBLCAweEMzQUIsIDB4QzNBQywNCi0gICAgMHhDM0FELCAweEMzQUUsIDB4QzNBRiwgMHhDM0IwLCAweEMzQjEsIDB4QzNCMiwgMHhDM0IzLCAweEMzQjQsDQotICAgIDB4QzNCNSwgMHhDM0I2LCAweEMzQjcsIDB4QzNCOCwgMHhDM0I5LCAweEMzQkEsIDB4QzNCQiwgMHhDM0JDLA0KLSAgICAweEMzQkQsIDB4QzNCRSwgMHhDM0JGLCAweEMzQzEsIDB4QzNDMiwgMHhDM0MzLCAweEMzQzQsIDB4QzNDNSwNCi0gICAgMHhDM0M2LCAweEMzQzcsIDB4QzNDOCwgMHhDM0M5LCAweEMzQ0EsIDB4QzNDQiwgMHhDM0NDLCAweEMzQ0QsDQotICAgIDB4QzNDRSwgMHhDM0NGLCAweEMzRDAsIDB4QzNEMSwgMHhDM0QyLCAweEMzRDMsIDB4QzNENCwgMHhDM0Q1LA0KLSAgICAweEMzRDYsIDB4QzNENywgMHhDM0RBLCAweEMzREIsIDB4QzNERCwgMHhDM0RFLCAweEMzRTEsIDB4QzNFMywNCi0gICAgMHhDM0U0LCAweEMzRTUsIDB4QzNFNiwgMHhDM0U3LCAweEMzRUEsIDB4QzNFQiwgMHhDM0VDLCAweEMzRUUsDQotICAgIDB4QzNFRiwgMHhDM0YwLCAweEMzRjEsIDB4QzNGMiwgMHhDM0YzLCAweEMzRjYsIDB4QzNGNywgMHhDM0Y5LA0KLSAgICAweEMzRkEsIDB4QzNGQiwgMHhDM0ZDLCAweEMzRkQsIDB4QzNGRSwgMHhDM0ZGLCAweEM0MDAsIDB4QzQwMSwNCi0gICAgMHhDNDAyLCAweEM0MDMsIDB4QzQwNCwgMHhDNDA1LCAweEM0MDYsIDB4QzQwNywgMHhDNDA5LCAweEM0MEEsDQotICAgIDB4QzQwQiwgMHhDNDBDLCAweEM0MEQsIDB4QzQwRSwgMHhDNDBGLCAweEM0MTEsIDB4QzQxMiwgMHhDNDEzLA0KLSAgICAweEM0MTQsIDB4QzQxNSwgMHhDNDE2LCAweEM0MTcsIDB4QzQxOCwgMHhDNDE5LCAweEM0MUEsIDB4QzQxQiwNCi0gICAgMHhDNDFDLCAweEM0MUQsIDB4QzQxRSwgMHhDNDFGLCAweEM0MjAsIDB4QzQyMSwgMHhDNDIyLCAweEM0MjMsDQotICAgIDB4QzQyNSwgMHhDNDI2LCAweEM0MjcsIDB4QzQyOCwgMHhDNDI5LCAweEM0MkEsIDB4QzQyQiwgMHhDNDJELA0KLSAgICAweEM0MkUsIDB4QzQyRiwgMHhDNDMxLCAweEM0MzIsIDB4QzQzMywgMHhDNDM1LCAweEM0MzYsIDB4QzQzNywNCi0gICAgMHhDNDM4LCAweEM0MzksIDB4QzQzQSwgMHhDNDNCLCAweEM0M0UsIDB4QzQzRiwgMHhDNDQwLCAweEM0NDEsDQotICAgIDB4QzQ0MiwgMHhDNDQzLCAweEM0NDQsIDB4QzQ0NSwgMHhDNDQ2LCAweEM0NDcsIDB4QzQ0OSwgMHhDNDRBLA0KLSAgICAweEM0NEIsIDB4QzQ0QywgMHhDNDRELCAweEM0NEUsIDB4QzQ0RiwgMHhDNDUwLCAweEM0NTEsIDB4QzQ1MiwNCi0gICAgMHhDNDUzLCAweEM0NTQsIDB4QzQ1NSwgMHhDNDU2LCAweEM0NTcsIDB4QzQ1OCwgMHhDNDU5LCAweEM0NUEsDQotICAgIDB4QzQ1QiwgMHhDNDVDLCAweEM0NUQsIDB4QzQ1RSwgMHhDNDVGLCAweEM0NjAsIDB4QzQ2MSwgMHhDNDYyLA0KLSAgICAweEM0NjMsIDB4QzQ2NiwgMHhDNDY3LCAweEM0NjksIDB4QzQ2QSwgMHhDNDZCLCAweEM0NkQsIDB4QzQ2RSwNCi0gICAgMHhDNDZGLCAweEM0NzAsIDB4QzQ3MSwgMHhDNDcyLCAweEM0NzMsIDB4QzQ3NiwgMHhDNDc3LCAweEM0NzgsDQotICAgIDB4QzQ3QSwgMHhDNDdCLCAweEM0N0MsIDB4QzQ3RCwgMHhDNDdFLCAweEM0N0YsIDB4QzQ4MSwgMHhDNDgyLA0KLSAgICAweEM0ODMsIDB4QzQ4NCwgMHhDNDg1LCAweEM0ODYsIDB4QzQ4NywgMHhDNDg4LCAweEM0ODksIDB4QzQ4QSwNCi0gICAgMHhDNDhCLCAweEM0OEMsIDB4QzQ4RCwgMHhDNDhFLCAweEM0OEYsIDB4QzQ5MCwgMHhDNDkxLCAweEM0OTIsDQotICAgIDB4QzQ5MywgMHhDNDk1LCAweEM0OTYsIDB4QzQ5NywgMHhDNDk4LCAweEM0OTksIDB4QzQ5QSwgMHhDNDlCLA0KLSAgICAweEM0OUQsIDB4QzQ5RSwgMHhDNDlGLCAweEM0QTAsIDB4QzRBMSwgMHhDNEEyLCAweEM0QTMsIDB4QzRBNCwNCi0gICAgMHhDNEE1LCAweEM0QTYsIDB4QzRBNywgMHhDNEE4LCAweEM0QTksIDB4QzRBQSwgMHhDNEFCLCAweEM0QUMsDQotICAgIDB4QzRBRCwgMHhDNEFFLCAweEM0QUYsIDB4QzRCMCwgMHhDNEIxLCAweEM0QjIsIDB4QzRCMywgMHhDNEI0LA0KLSAgICAweEM0QjUsIDB4QzRCNiwgMHhDNEI3LCAweEM0QjksIDB4QzRCQSwgMHhDNEJCLCAweEM0QkQsIDB4QzRCRSwNCi0gICAgMHhDNEJGLCAweEM0QzAsIDB4QzRDMSwgMHhDNEMyLCAweEM0QzMsIDB4QzRDNCwgMHhDNEM1LCAweEM0QzYsDQotICAgIDB4QzRDNywgMHhDNEM4LCAweEM0QzksIDB4QzRDQSwgMHhDNENCLCAweEM0Q0MsIDB4QzRDRCwgMHhDNENFLA0KLSAgICAweEM0Q0YsIDB4QzREMCwgMHhDNEQxLCAweEM0RDIsIDB4QzREMywgMHhDNEQ0LCAweEM0RDUsIDB4QzRENiwNCi0gICAgMHhDNEQ3LCAweEM0RDgsIDB4QzREOSwgMHhDNERBLCAweEM0REIsIDB4QzREQywgMHhDNERELCAweEM0REUsDQotICAgIDB4QzRERiwgMHhDNEUwLCAweEM0RTEsIDB4QzRFMiwgMHhDNEUzLCAweEM0RTQsIDB4QzRFNSwgMHhDNEU2LA0KLSAgICAweEM0RTcsIDB4QzRFOCwgMHhDNEVBLCAweEM0RUIsIDB4QzRFQywgMHhDNEVELCAweEM0RUUsIDB4QzRFRiwNCi0gICAgMHhDNEYyLCAweEM0RjMsIDB4QzRGNSwgMHhDNEY2LCAweEM0RjcsIDB4QzRGOSwgMHhDNEZCLCAweEM0RkMsDQotICAgIDB4QzRGRCwgMHhDNEZFLCAweEM1MDIsIDB4QzUwMywgMHhDNTA0LCAweEM1MDUsIDB4QzUwNiwgMHhDNTA3LA0KLSAgICAweEM1MDgsIDB4QzUwOSwgMHhDNTBBLCAweEM1MEIsIDB4QzUwRCwgMHhDNTBFLCAweEM1MEYsIDB4QzUxMSwNCi0gICAgMHhDNTEyLCAweEM1MTMsIDB4QzUxNSwgMHhDNTE2LCAweEM1MTcsIDB4QzUxOCwgMHhDNTE5LCAweEM1MUEsDQotICAgIDB4QzUxQiwgMHhDNTFELCAweEM1MUUsIDB4QzUxRiwgMHhDNTIwLCAweEM1MjEsIDB4QzUyMiwgMHhDNTIzLA0KLSAgICAweEM1MjQsIDB4QzUyNSwgMHhDNTI2LCAweEM1MjcsIDB4QzUyQSwgMHhDNTJCLCAweEM1MkQsIDB4QzUyRSwNCi0gICAgMHhDNTJGLCAweEM1MzEsIDB4QzUzMiwgMHhDNTMzLCAweEM1MzQsIDB4QzUzNSwgMHhDNTM2LCAweEM1MzcsDQotICAgIDB4QzUzQSwgMHhDNTNDLCAweEM1M0UsIDB4QzUzRiwgMHhDNTQwLCAweEM1NDEsIDB4QzU0MiwgMHhDNTQzLA0KLSAgICAweEM1NDYsIDB4QzU0NywgMHhDNTRCLCAweEM1NEYsIDB4QzU1MCwgMHhDNTUxLCAweEM1NTIsIDB4QzU1NiwNCi0gICAgMHhDNTVBLCAweEM1NUIsIDB4QzU1QywgMHhDNTVGLCAweEM1NjIsIDB4QzU2MywgMHhDNTY1LCAweEM1NjYsDQotICAgIDB4QzU2NywgMHhDNTY5LCAweEM1NkEsIDB4QzU2QiwgMHhDNTZDLCAweEM1NkQsIDB4QzU2RSwgMHhDNTZGLA0KLSAgICAweEM1NzIsIDB4QzU3NiwgMHhDNTc3LCAweEM1NzgsIDB4QzU3OSwgMHhDNTdBLCAweEM1N0IsIDB4QzU3RSwNCi0gICAgMHhDNTdGLCAweEM1ODEsIDB4QzU4MiwgMHhDNTgzLCAweEM1ODUsIDB4QzU4NiwgMHhDNTg4LCAweEM1ODksDQotICAgIDB4QzU4QSwgMHhDNThCLCAweEM1OEUsIDB4QzU5MCwgMHhDNTkyLCAweEM1OTMsIDB4QzU5NCwgMHhDNTk2LA0KLSAgICAweEM1OTksIDB4QzU5QSwgMHhDNTlCLCAweEM1OUQsIDB4QzU5RSwgMHhDNTlGLCAweEM1QTEsIDB4QzVBMiwNCi0gICAgMHhDNUEzLCAweEM1QTQsIDB4QzVBNSwgMHhDNUE2LCAweEM1QTcsIDB4QzVBOCwgMHhDNUFBLCAweEM1QUIsDQotICAgIDB4QzVBQywgMHhDNUFELCAweEM1QUUsIDB4QzVBRiwgMHhDNUIwLCAweEM1QjEsIDB4QzVCMiwgMHhDNUIzLA0KLSAgICAweEM1QjYsIDB4QzVCNywgMHhDNUJBLCAweEM1QkYsIDB4QzVDMCwgMHhDNUMxLCAweEM1QzIsIDB4QzVDMywNCi0gICAgMHhDNUNCLCAweEM1Q0QsIDB4QzVDRiwgMHhDNUQyLCAweEM1RDMsIDB4QzVENSwgMHhDNUQ2LCAweEM1RDcsDQotICAgIDB4QzVEOSwgMHhDNURBLCAweEM1REIsIDB4QzVEQywgMHhDNURELCAweEM1REUsIDB4QzVERiwgMHhDNUUyLA0KLSAgICAweEM1RTQsIDB4QzVFNiwgMHhDNUU3LCAweEM1RTgsIDB4QzVFOSwgMHhDNUVBLCAweEM1RUIsIDB4QzVFRiwNCi0gICAgMHhDNUYxLCAweEM1RjIsIDB4QzVGMywgMHhDNUY1LCAweEM1RjgsIDB4QzVGOSwgMHhDNUZBLCAweEM1RkIsDQotICAgIDB4QzYwMiwgMHhDNjAzLCAweEM2MDQsIDB4QzYwOSwgMHhDNjBBLCAweEM2MEIsIDB4QzYwRCwgMHhDNjBFLA0KLSAgICAweEM2MEYsIDB4QzYxMSwgMHhDNjEyLCAweEM2MTMsIDB4QzYxNCwgMHhDNjE1LCAweEM2MTYsIDB4QzYxNywNCi0gICAgMHhDNjFBLCAweEM2MUQsIDB4QzYxRSwgMHhDNjFGLCAweEM2MjAsIDB4QzYyMSwgMHhDNjIyLCAweEM2MjMsDQotICAgIDB4QzYyNiwgMHhDNjI3LCAweEM2MjksIDB4QzYyQSwgMHhDNjJCLCAweEM2MkYsIDB4QzYzMSwgMHhDNjMyLA0KLSAgICAweEM2MzYsIDB4QzYzOCwgMHhDNjNBLCAweEM2M0MsIDB4QzYzRCwgMHhDNjNFLCAweEM2M0YsIDB4QzY0MiwNCi0gICAgMHhDNjQzLCAweEM2NDUsIDB4QzY0NiwgMHhDNjQ3LCAweEM2NDksIDB4QzY0QSwgMHhDNjRCLCAweEM2NEMsDQotICAgIDB4QzY0RCwgMHhDNjRFLCAweEM2NEYsIDB4QzY1MiwgMHhDNjU2LCAweEM2NTcsIDB4QzY1OCwgMHhDNjU5LA0KLSAgICAweEM2NUEsIDB4QzY1QiwgMHhDNjVFLCAweEM2NUYsIDB4QzY2MSwgMHhDNjYyLCAweEM2NjMsIDB4QzY2NCwNCi0gICAgMHhDNjY1LCAweEM2NjYsIDB4QzY2NywgMHhDNjY4LCAweEM2NjksIDB4QzY2QSwgMHhDNjZCLCAweEM2NkQsDQotICAgIDB4QzY2RSwgMHhDNjcwLCAweEM2NzIsIDB4QzY3MywgMHhDNjc0LCAweEM2NzUsIDB4QzY3NiwgMHhDNjc3LA0KLSAgICAweEM2N0EsIDB4QzY3QiwgMHhDNjdELCAweEM2N0UsIDB4QzY3RiwgMHhDNjgxLCAweEM2ODIsIDB4QzY4MywNCi0gICAgMHhDNjg0LCAweEM2ODUsIDB4QzY4NiwgMHhDNjg3LCAweEM2OEEsIDB4QzY4QywgMHhDNjhFLCAweEM2OEYsDQotICAgIDB4QzY5MCwgMHhDNjkxLCAweEM2OTIsIDB4QzY5MywgMHhDNjk2LCAweEM2OTcsIDB4QzY5OSwgMHhDNjlBLA0KLSAgICAweEM2OUIsIDB4QzY5RCwgMHhDNjlFLCAweEM2OUYsIDB4QzZBMCwgMHhDNkExLCAweEM2QTIsIDB4QzZBMywNCi0gICAgMHhDNkE2LCAweEM2QTgsIDB4QzZBQSwgMHhDNkFCLCAweEM2QUMsIDB4QzZBRCwgMHhDNkFFLCAweEM2QUYsDQotICAgIDB4QzZCMiwgMHhDNkIzLCAweEM2QjUsIDB4QzZCNiwgMHhDNkI3LCAweEM2QkIsIDB4QzZCQywgMHhDNkJELA0KLSAgICAweEM2QkUsIDB4QzZCRiwgMHhDNkMyLCAweEM2QzQsIDB4QzZDNiwgMHhDNkM3LCAweEM2QzgsIDB4QzZDOSwNCi0gICAgMHhDNkNBLCAweEM2Q0IsIDB4QzZDRSwgMHhDNkNGLCAweEM2RDEsIDB4QzZEMiwgMHhDNkQzLCAweEM2RDUsDQotICAgIDB4QzZENiwgMHhDNkQ3LCAweEM2RDgsIDB4QzZEOSwgMHhDNkRBLCAweEM2REIsIDB4QzZERSwgMHhDNkRGLA0KLSAgICAweEM2RTIsIDB4QzZFMywgMHhDNkU0LCAweEM2RTUsIDB4QzZFNiwgMHhDNkU3LCAweEM2RUEsIDB4QzZFQiwNCi0gICAgMHhDNkVELCAweEM2RUUsIDB4QzZFRiwgMHhDNkYxLCAweEM2RjIsIDB4QzZGMywgMHhDNkY0LCAweEM2RjUsDQotICAgIDB4QzZGNiwgMHhDNkY3LCAweEM2RkEsIDB4QzZGQiwgMHhDNkZDLCAweEM2RkUsIDB4QzZGRiwgMHhDNzAwLA0KLSAgICAweEM3MDEsIDB4QzcwMiwgMHhDNzAzLCAweEM3MDYsIDB4QzcwNywgMHhDNzA5LCAweEM3MEEsIDB4QzcwQiwNCi0gICAgMHhDNzBELCAweEM3MEUsIDB4QzcwRiwgMHhDNzEwLCAweEM3MTEsIDB4QzcxMiwgMHhDNzEzLCAweEM3MTYsDQotICAgIDB4QzcxOCwgMHhDNzFBLCAweEM3MUIsIDB4QzcxQywgMHhDNzFELCAweEM3MUUsIDB4QzcxRiwgMHhDNzIyLA0KLSAgICAweEM3MjMsIDB4QzcyNSwgMHhDNzI2LCAweEM3MjcsIDB4QzcyOSwgMHhDNzJBLCAweEM3MkIsIDB4QzcyQywNCi0gICAgMHhDNzJELCAweEM3MkUsIDB4QzcyRiwgMHhDNzMyLCAweEM3MzQsIDB4QzczNiwgMHhDNzM4LCAweEM3MzksDQotICAgIDB4QzczQSwgMHhDNzNCLCAweEM3M0UsIDB4QzczRiwgMHhDNzQxLCAweEM3NDIsIDB4Qzc0MywgMHhDNzQ1LA0KLSAgICAweEM3NDYsIDB4Qzc0NywgMHhDNzQ4LCAweEM3NDksIDB4Qzc0QiwgMHhDNzRFLCAweEM3NTAsIDB4Qzc1OSwNCi0gICAgMHhDNzVBLCAweEM3NUIsIDB4Qzc1RCwgMHhDNzVFLCAweEM3NUYsIDB4Qzc2MSwgMHhDNzYyLCAweEM3NjMsDQotICAgIDB4Qzc2NCwgMHhDNzY1LCAweEM3NjYsIDB4Qzc2NywgMHhDNzY5LCAweEM3NkEsIDB4Qzc2QywgMHhDNzZELA0KLSAgICAweEM3NkUsIDB4Qzc2RiwgMHhDNzcwLCAweEM3NzEsIDB4Qzc3MiwgMHhDNzczLCAweEM3NzYsIDB4Qzc3NywNCi0gICAgMHhDNzc5LCAweEM3N0EsIDB4Qzc3QiwgMHhDNzdGLCAweEM3ODAsIDB4Qzc4MSwgMHhDNzgyLCAweEM3ODYsDQotICAgIDB4Qzc4QiwgMHhDNzhDLCAweEM3OEQsIDB4Qzc4RiwgMHhDNzkyLCAweEM3OTMsIDB4Qzc5NSwgMHhDNzk5LA0KLSAgICAweEM3OUIsIDB4Qzc5QywgMHhDNzlELCAweEM3OUUsIDB4Qzc5RiwgMHhDN0EyLCAweEM3QTcsIDB4QzdBOCwNCi0gICAgMHhDN0E5LCAweEM3QUEsIDB4QzdBQiwgMHhDN0FFLCAweEM3QUYsIDB4QzdCMSwgMHhDN0IyLCAweEM3QjMsDQotICAgIDB4QzdCNSwgMHhDN0I2LCAweEM3QjcsIDB4QzdCOCwgMHhDN0I5LCAweEM3QkEsIDB4QzdCQiwgMHhDN0JFLA0KLSAgICAweEM3QzIsIDB4QzdDMywgMHhDN0M0LCAweEM3QzUsIDB4QzdDNiwgMHhDN0M3LCAweEM3Q0EsIDB4QzdDQiwNCi0gICAgMHhDN0NELCAweEM3Q0YsIDB4QzdEMSwgMHhDN0QyLCAweEM3RDMsIDB4QzdENCwgMHhDN0Q1LCAweEM3RDYsDQotICAgIDB4QzdENywgMHhDN0Q5LCAweEM3REEsIDB4QzdEQiwgMHhDN0RDLCAweEM3REUsIDB4QzdERiwgMHhDN0UwLA0KLSAgICAweEM3RTEsIDB4QzdFMiwgMHhDN0UzLCAweEM3RTUsIDB4QzdFNiwgMHhDN0U3LCAweEM3RTksIDB4QzdFQSwNCi0gICAgMHhDN0VCLCAweEM3RUQsIDB4QzdFRSwgMHhDN0VGLCAweEM3RjAsIDB4QzdGMSwgMHhDN0YyLCAweEM3RjMsDQotICAgIDB4QzdGNCwgMHhDN0Y1LCAweEM3RjYsIDB4QzdGNywgMHhDN0Y4LCAweEM3RjksIDB4QzdGQSwgMHhDN0ZCLA0KLSAgICAweEM3RkMsIDB4QzdGRCwgMHhDN0ZFLCAweEM3RkYsIDB4QzgwMiwgMHhDODAzLCAweEM4MDUsIDB4QzgwNiwNCi0gICAgMHhDODA3LCAweEM4MDksIDB4QzgwQiwgMHhDODBDLCAweEM4MEQsIDB4QzgwRSwgMHhDODBGLCAweEM4MTIsDQotICAgIDB4QzgxNCwgMHhDODE3LCAweEM4MTgsIDB4QzgxOSwgMHhDODFBLCAweEM4MUIsIDB4QzgxRSwgMHhDODFGLA0KLSAgICAweEM4MjEsIDB4QzgyMiwgMHhDODIzLCAweEM4MjUsIDB4QzgyNiwgMHhDODI3LCAweEM4MjgsIDB4QzgyOSwNCi0gICAgMHhDODJBLCAweEM4MkIsIDB4QzgyRSwgMHhDODMwLCAweEM4MzIsIDB4QzgzMywgMHhDODM0LCAweEM4MzUsDQotICAgIDB4QzgzNiwgMHhDODM3LCAweEM4MzksIDB4QzgzQSwgMHhDODNCLCAweEM4M0QsIDB4QzgzRSwgMHhDODNGLA0KLSAgICAweEM4NDEsIDB4Qzg0MiwgMHhDODQzLCAweEM4NDQsIDB4Qzg0NSwgMHhDODQ2LCAweEM4NDcsIDB4Qzg0QSwNCi0gICAgMHhDODRCLCAweEM4NEUsIDB4Qzg0RiwgMHhDODUwLCAweEM4NTEsIDB4Qzg1MiwgMHhDODUzLCAweEM4NTUsDQotICAgIDB4Qzg1NiwgMHhDODU3LCAweEM4NTgsIDB4Qzg1OSwgMHhDODVBLCAweEM4NUIsIDB4Qzg1QywgMHhDODVELA0KLSAgICAweEM4NUUsIDB4Qzg1RiwgMHhDODYwLCAweEM4NjEsIDB4Qzg2MiwgMHhDODYzLCAweEM4NjQsIDB4Qzg2NSwNCi0gICAgMHhDODY2LCAweEM4NjcsIDB4Qzg2OCwgMHhDODY5LCAweEM4NkEsIDB4Qzg2QiwgMHhDODZDLCAweEM4NkQsDQotICAgIDB4Qzg2RSwgMHhDODZGLCAweEM4NzIsIDB4Qzg3MywgMHhDODc1LCAweEM4NzYsIDB4Qzg3NywgMHhDODc5LA0KLSAgICAweEM4N0IsIDB4Qzg3QywgMHhDODdELCAweEM4N0UsIDB4Qzg3RiwgMHhDODgyLCAweEM4ODQsIDB4Qzg4OCwNCi0gICAgMHhDODg5LCAweEM4OEEsIDB4Qzg4RSwgMHhDODhGLCAweEM4OTAsIDB4Qzg5MSwgMHhDODkyLCAweEM4OTMsDQotICAgIDB4Qzg5NSwgMHhDODk2LCAweEM4OTcsIDB4Qzg5OCwgMHhDODk5LCAweEM4OUEsIDB4Qzg5QiwgMHhDODlDLA0KLSAgICAweEM4OUUsIDB4QzhBMCwgMHhDOEEyLCAweEM4QTMsIDB4QzhBNCwgMHhDOEE1LCAweEM4QTYsIDB4QzhBNywNCi0gICAgMHhDOEE5LCAweEM4QUEsIDB4QzhBQiwgMHhDOEFDLCAweEM4QUQsIDB4QzhBRSwgMHhDOEFGLCAweEM4QjAsDQotICAgIDB4QzhCMSwgMHhDOEIyLCAweEM4QjMsIDB4QzhCNCwgMHhDOEI1LCAweEM4QjYsIDB4QzhCNywgMHhDOEI4LA0KLSAgICAweEM4QjksIDB4QzhCQSwgMHhDOEJCLCAweEM4QkUsIDB4QzhCRiwgMHhDOEMwLCAweEM4QzEsIDB4QzhDMiwNCi0gICAgMHhDOEMzLCAweEM4QzUsIDB4QzhDNiwgMHhDOEM3LCAweEM4QzksIDB4QzhDQSwgMHhDOENCLCAweEM4Q0QsDQotICAgIDB4QzhDRSwgMHhDOENGLCAweEM4RDAsIDB4QzhEMSwgMHhDOEQyLCAweEM4RDMsIDB4QzhENiwgMHhDOEQ4LA0KLSAgICAweEM4REEsIDB4QzhEQiwgMHhDOERDLCAweEM4REQsIDB4QzhERSwgMHhDOERGLCAweEM4RTIsIDB4QzhFMywNCi0gICAgMHhDOEU1LCAweEM4RTYsIDB4QzhFNywgMHhDOEU4LCAweEM4RTksIDB4QzhFQSwgMHhDOEVCLCAweEM4RUMsDQotICAgIDB4QzhFRCwgMHhDOEVFLCAweEM4RUYsIDB4QzhGMCwgMHhDOEYxLCAweEM4RjIsIDB4QzhGMywgMHhDOEY0LA0KLSAgICAweEM4RjYsIDB4QzhGNywgMHhDOEY4LCAweEM4RjksIDB4QzhGQSwgMHhDOEZCLCAweEM4RkUsIDB4QzhGRiwNCi0gICAgMHhDOTAxLCAweEM5MDIsIDB4QzkwMywgMHhDOTA3LCAweEM5MDgsIDB4QzkwOSwgMHhDOTBBLCAweEM5MEIsDQotICAgIDB4QzkwRSwgMHhDOTEwLCAweEM5MTIsIDB4QzkxMywgMHhDOTE0LCAweEM5MTUsIDB4QzkxNiwgMHhDOTE3LA0KLSAgICAweEM5MTksIDB4QzkxQSwgMHhDOTFCLCAweEM5MUMsIDB4QzkxRCwgMHhDOTFFLCAweEM5MUYsIDB4QzkyMCwNCi0gICAgMHhDOTIxLCAweEM5MjIsIDB4QzkyMywgMHhDOTI0LCAweEM5MjUsIDB4QzkyNiwgMHhDOTI3LCAweEM5MjgsDQotICAgIDB4QzkyOSwgMHhDOTJBLCAweEM5MkIsIDB4QzkyRCwgMHhDOTJFLCAweEM5MkYsIDB4QzkzMCwgMHhDOTMxLA0KLSAgICAweEM5MzIsIDB4QzkzMywgMHhDOTM1LCAweEM5MzYsIDB4QzkzNywgMHhDOTM4LCAweEM5MzksIDB4QzkzQSwNCi0gICAgMHhDOTNCLCAweEM5M0MsIDB4QzkzRCwgMHhDOTNFLCAweEM5M0YsIDB4Qzk0MCwgMHhDOTQxLCAweEM5NDIsDQotICAgIDB4Qzk0MywgMHhDOTQ0LCAweEM5NDUsIDB4Qzk0NiwgMHhDOTQ3LCAweEM5NDgsIDB4Qzk0OSwgMHhDOTRBLA0KLSAgICAweEM5NEIsIDB4Qzk0QywgMHhDOTRELCAweEM5NEUsIDB4Qzk0RiwgMHhDOTUyLCAweEM5NTMsIDB4Qzk1NSwNCi0gICAgMHhDOTU2LCAweEM5NTcsIDB4Qzk1OSwgMHhDOTVBLCAweEM5NUIsIDB4Qzk1QywgMHhDOTVELCAweEM5NUUsDQotICAgIDB4Qzk1RiwgMHhDOTYyLCAweEM5NjQsIDB4Qzk2NSwgMHhDOTY2LCAweEM5NjcsIDB4Qzk2OCwgMHhDOTY5LA0KLSAgICAweEM5NkEsIDB4Qzk2QiwgMHhDOTZELCAweEM5NkUsIDB4Qzk2RiwgMHhDOTcxLCAweEM5NzIsIDB4Qzk3MywNCi0gICAgMHhDOTc1LCAweEM5NzYsIDB4Qzk3NywgMHhDOTc4LCAweEM5NzksIDB4Qzk3QSwgMHhDOTdCLCAweEM5N0QsDQotICAgIDB4Qzk3RSwgMHhDOTdGLCAweEM5ODAsIDB4Qzk4MSwgMHhDOTgyLCAweEM5ODMsIDB4Qzk4NCwgMHhDOTg1LA0KLSAgICAweEM5ODYsIDB4Qzk4NywgMHhDOThBLCAweEM5OEIsIDB4Qzk4RCwgMHhDOThFLCAweEM5OEYsIDB4Qzk5MSwNCi0gICAgMHhDOTkyLCAweEM5OTMsIDB4Qzk5NCwgMHhDOTk1LCAweEM5OTYsIDB4Qzk5NywgMHhDOTlBLCAweEM5OUMsDQotICAgIDB4Qzk5RSwgMHhDOTlGLCAweEM5QTAsIDB4QzlBMSwgMHhDOUEyLCAweEM5QTMsIDB4QzlBNCwgMHhDOUE1LA0KLSAgICAweEM5QTYsIDB4QzlBNywgMHhDOUE4LCAweEM5QTksIDB4QzlBQSwgMHhDOUFCLCAweEM5QUMsIDB4QzlBRCwNCi0gICAgMHhDOUFFLCAweEM5QUYsIDB4QzlCMCwgMHhDOUIxLCAweEM5QjIsIDB4QzlCMywgMHhDOUI0LCAweEM5QjUsDQotICAgIDB4QzlCNiwgMHhDOUI3LCAweEM5QjgsIDB4QzlCOSwgMHhDOUJBLCAweEM5QkIsIDB4QzlCQywgMHhDOUJELA0KLSAgICAweEM5QkUsIDB4QzlCRiwgMHhDOUMyLCAweEM5QzMsIDB4QzlDNSwgMHhDOUM2LCAweEM5QzksIDB4QzlDQiwNCi0gICAgMHhDOUNDLCAweEM5Q0QsIDB4QzlDRSwgMHhDOUNGLCAweEM5RDIsIDB4QzlENCwgMHhDOUQ3LCAweEM5RDgsDQotICAgIDB4QzlEQiwgMHhDOURFLCAweEM5REYsIDB4QzlFMSwgMHhDOUUzLCAweEM5RTUsIDB4QzlFNiwgMHhDOUU4LA0KLSAgICAweEM5RTksIDB4QzlFQSwgMHhDOUVCLCAweEM5RUUsIDB4QzlGMiwgMHhDOUYzLCAweEM5RjQsIDB4QzlGNSwNCi0gICAgMHhDOUY2LCAweEM5RjcsIDB4QzlGQSwgMHhDOUZCLCAweEM5RkQsIDB4QzlGRSwgMHhDOUZGLCAweENBMDEsDQotICAgIDB4Q0EwMiwgMHhDQTAzLCAweENBMDQsIDB4Q0EwNSwgMHhDQTA2LCAweENBMDcsIDB4Q0EwQSwgMHhDQTBFLA0KLSAgICAweENBMEYsIDB4Q0ExMCwgMHhDQTExLCAweENBMTIsIDB4Q0ExMywgMHhDQTE1LCAweENBMTYsIDB4Q0ExNywNCi0gICAgMHhDQTE5LCAweENBMUEsIDB4Q0ExQiwgMHhDQTFDLCAweENBMUQsIDB4Q0ExRSwgMHhDQTFGLCAweENBMjAsDQotICAgIDB4Q0EyMSwgMHhDQTIyLCAweENBMjMsIDB4Q0EyNCwgMHhDQTI1LCAweENBMjYsIDB4Q0EyNywgMHhDQTI4LA0KLSAgICAweENBMkEsIDB4Q0EyQiwgMHhDQTJDLCAweENBMkQsIDB4Q0EyRSwgMHhDQTJGLCAweENBMzAsIDB4Q0EzMSwNCi0gICAgMHhDQTMyLCAweENBMzMsIDB4Q0EzNCwgMHhDQTM1LCAweENBMzYsIDB4Q0EzNywgMHhDQTM4LCAweENBMzksDQotICAgIDB4Q0EzQSwgMHhDQTNCLCAweENBM0MsIDB4Q0EzRCwgMHhDQTNFLCAweENBM0YsIDB4Q0E0MCwgMHhDQTQxLA0KLSAgICAweENBNDIsIDB4Q0E0MywgMHhDQTQ0LCAweENBNDUsIDB4Q0E0NiwgMHhDQTQ3LCAweENBNDgsIDB4Q0E0OSwNCi0gICAgMHhDQTRBLCAweENBNEIsIDB4Q0E0RSwgMHhDQTRGLCAweENBNTEsIDB4Q0E1MiwgMHhDQTUzLCAweENBNTUsDQotICAgIDB4Q0E1NiwgMHhDQTU3LCAweENBNTgsIDB4Q0E1OSwgMHhDQTVBLCAweENBNUIsIDB4Q0E1RSwgMHhDQTYyLA0KLSAgICAweENBNjMsIDB4Q0E2NCwgMHhDQTY1LCAweENBNjYsIDB4Q0E2NywgMHhDQTY5LCAweENBNkEsIDB4Q0E2QiwNCi0gICAgMHhDQTZDLCAweENBNkQsIDB4Q0E2RSwgMHhDQTZGLCAweENBNzAsIDB4Q0E3MSwgMHhDQTcyLCAweENBNzMsDQotICAgIDB4Q0E3NCwgMHhDQTc1LCAweENBNzYsIDB4Q0E3NywgMHhDQTc4LCAweENBNzksIDB4Q0E3QSwgMHhDQTdCLA0KLSAgICAweENBN0MsIDB4Q0E3RSwgMHhDQTdGLCAweENBODAsIDB4Q0E4MSwgMHhDQTgyLCAweENBODMsIDB4Q0E4NSwNCi0gICAgMHhDQTg2LCAweENBODcsIDB4Q0E4OCwgMHhDQTg5LCAweENBOEEsIDB4Q0E4QiwgMHhDQThDLCAweENBOEQsDQotICAgIDB4Q0E4RSwgMHhDQThGLCAweENBOTAsIDB4Q0E5MSwgMHhDQTkyLCAweENBOTMsIDB4Q0E5NCwgMHhDQTk1LA0KLSAgICAweENBOTYsIDB4Q0E5NywgMHhDQTk5LCAweENBOUEsIDB4Q0E5QiwgMHhDQTlDLCAweENBOUQsIDB4Q0E5RSwNCi0gICAgMHhDQTlGLCAweENBQTAsIDB4Q0FBMSwgMHhDQUEyLCAweENBQTMsIDB4Q0FBNCwgMHhDQUE1LCAweENBQTYsDQotICAgIDB4Q0FBNywgMHhDQUE4LCAweENBQTksIDB4Q0FBQSwgMHhDQUFCLCAweENBQUMsIDB4Q0FBRCwgMHhDQUFFLA0KLSAgICAweENBQUYsIDB4Q0FCMCwgMHhDQUIxLCAweENBQjIsIDB4Q0FCMywgMHhDQUI0LCAweENBQjUsIDB4Q0FCNiwNCi0gICAgMHhDQUI3LCAweENBQjgsIDB4Q0FCOSwgMHhDQUJBLCAweENBQkIsIDB4Q0FCRSwgMHhDQUJGLCAweENBQzEsDQotICAgIDB4Q0FDMiwgMHhDQUMzLCAweENBQzUsIDB4Q0FDNiwgMHhDQUM3LCAweENBQzgsIDB4Q0FDOSwgMHhDQUNBLA0KLSAgICAweENBQ0IsIDB4Q0FDRSwgMHhDQUQwLCAweENBRDIsIDB4Q0FENCwgMHhDQUQ1LCAweENBRDYsIDB4Q0FENywNCi0gICAgMHhDQURBLCAweENBREIsIDB4Q0FEQywgMHhDQURELCAweENBREUsIDB4Q0FERiwgMHhDQUUxLCAweENBRTIsDQotICAgIDB4Q0FFMywgMHhDQUU0LCAweENBRTUsIDB4Q0FFNiwgMHhDQUU3LCAweENBRTgsIDB4Q0FFOSwgMHhDQUVBLA0KLSAgICAweENBRUIsIDB4Q0FFRCwgMHhDQUVFLCAweENBRUYsIDB4Q0FGMCwgMHhDQUYxLCAweENBRjIsIDB4Q0FGMywNCi0gICAgMHhDQUY1LCAweENBRjYsIDB4Q0FGNywgMHhDQUY4LCAweENBRjksIDB4Q0FGQSwgMHhDQUZCLCAweENBRkMsDQotICAgIDB4Q0FGRCwgMHhDQUZFLCAweENBRkYsIDB4Q0IwMCwgMHhDQjAxLCAweENCMDIsIDB4Q0IwMywgMHhDQjA0LA0KLSAgICAweENCMDUsIDB4Q0IwNiwgMHhDQjA3LCAweENCMDksIDB4Q0IwQSwgMHhDQjBCLCAweENCMEMsIDB4Q0IwRCwNCi0gICAgMHhDQjBFLCAweENCMEYsIDB4Q0IxMSwgMHhDQjEyLCAweENCMTMsIDB4Q0IxNSwgMHhDQjE2LCAweENCMTcsDQotICAgIDB4Q0IxOSwgMHhDQjFBLCAweENCMUIsIDB4Q0IxQywgMHhDQjFELCAweENCMUUsIDB4Q0IxRiwgMHhDQjIyLA0KLSAgICAweENCMjMsIDB4Q0IyNCwgMHhDQjI1LCAweENCMjYsIDB4Q0IyNywgMHhDQjI4LCAweENCMjksIDB4Q0IyQSwNCi0gICAgMHhDQjJCLCAweENCMkMsIDB4Q0IyRCwgMHhDQjJFLCAweENCMkYsIDB4Q0IzMCwgMHhDQjMxLCAweENCMzIsDQotICAgIDB4Q0IzMywgMHhDQjM0LCAweENCMzUsIDB4Q0IzNiwgMHhDQjM3LCAweENCMzgsIDB4Q0IzOSwgMHhDQjNBLA0KLSAgICAweENCM0IsIDB4Q0IzQywgMHhDQjNELCAweENCM0UsIDB4Q0IzRiwgMHhDQjQwLCAweENCNDIsIDB4Q0I0MywNCi0gICAgMHhDQjQ0LCAweENCNDUsIDB4Q0I0NiwgMHhDQjQ3LCAweENCNEEsIDB4Q0I0QiwgMHhDQjRELCAweENCNEUsDQotICAgIDB4Q0I0RiwgMHhDQjUxLCAweENCNTIsIDB4Q0I1MywgMHhDQjU0LCAweENCNTUsIDB4Q0I1NiwgMHhDQjU3LA0KLSAgICAweENCNUEsIDB4Q0I1QiwgMHhDQjVDLCAweENCNUUsIDB4Q0I1RiwgMHhDQjYwLCAweENCNjEsIDB4Q0I2MiwNCi0gICAgMHhDQjYzLCAweENCNjUsIDB4Q0I2NiwgMHhDQjY3LCAweENCNjgsIDB4Q0I2OSwgMHhDQjZBLCAweENCNkIsDQotICAgIDB4Q0I2QywgMHhDQjZELCAweENCNkUsIDB4Q0I2RiwgMHhDQjcwLCAweENCNzEsIDB4Q0I3MiwgMHhDQjczLA0KLSAgICAweENCNzQsIDB4Q0I3NSwgMHhDQjc2LCAweENCNzcsIDB4Q0I3QSwgMHhDQjdCLCAweENCN0MsIDB4Q0I3RCwNCi0gICAgMHhDQjdFLCAweENCN0YsIDB4Q0I4MCwgMHhDQjgxLCAweENCODIsIDB4Q0I4MywgMHhDQjg0LCAweENCODUsDQotICAgIDB4Q0I4NiwgMHhDQjg3LCAweENCODgsIDB4Q0I4OSwgMHhDQjhBLCAweENCOEIsIDB4Q0I4QywgMHhDQjhELA0KLSAgICAweENCOEUsIDB4Q0I4RiwgMHhDQjkwLCAweENCOTEsIDB4Q0I5MiwgMHhDQjkzLCAweENCOTQsIDB4Q0I5NSwNCi0gICAgMHhDQjk2LCAweENCOTcsIDB4Q0I5OCwgMHhDQjk5LCAweENCOUEsIDB4Q0I5QiwgMHhDQjlELCAweENCOUUsDQotICAgIDB4Q0I5RiwgMHhDQkEwLCAweENCQTEsIDB4Q0JBMiwgMHhDQkEzLCAweENCQTQsIDB4Q0JBNSwgMHhDQkE2LA0KLSAgICAweENCQTcsIDB4Q0JBOCwgMHhDQkE5LCAweENCQUEsIDB4Q0JBQiwgMHhDQkFDLCAweENCQUQsIDB4Q0JBRSwNCi0gICAgMHhDQkFGLCAweENCQjAsIDB4Q0JCMSwgMHhDQkIyLCAweENCQjMsIDB4Q0JCNCwgMHhDQkI1LCAweENCQjYsDQotICAgIDB4Q0JCNywgMHhDQkI5LCAweENCQkEsIDB4Q0JCQiwgMHhDQkJDLCAweENCQkQsIDB4Q0JCRSwgMHhDQkJGLA0KLSAgICAweENCQzAsIDB4Q0JDMSwgMHhDQkMyLCAweENCQzMsIDB4Q0JDNCwgMHhDQkM1LCAweENCQzYsIDB4Q0JDNywNCi0gICAgMHhDQkM4LCAweENCQzksIDB4Q0JDQSwgMHhDQkNCLCAweENCQ0MsIDB4Q0JDRCwgMHhDQkNFLCAweENCQ0YsDQotICAgIDB4Q0JEMCwgMHhDQkQxLCAweENCRDIsIDB4Q0JEMywgMHhDQkQ1LCAweENCRDYsIDB4Q0JENywgMHhDQkQ4LA0KLSAgICAweENCRDksIDB4Q0JEQSwgMHhDQkRCLCAweENCREMsIDB4Q0JERCwgMHhDQkRFLCAweENCREYsIDB4Q0JFMCwNCi0gICAgMHhDQkUxLCAweENCRTIsIDB4Q0JFMywgMHhDQkU1LCAweENCRTYsIDB4Q0JFOCwgMHhDQkVBLCAweENCRUIsDQotICAgIDB4Q0JFQywgMHhDQkVELCAweENCRUUsIDB4Q0JFRiwgMHhDQkYwLCAweENCRjEsIDB4Q0JGMiwgMHhDQkYzLA0KLSAgICAweENCRjQsIDB4Q0JGNSwgMHhDQkY2LCAweENCRjcsIDB4Q0JGOCwgMHhDQkY5LCAweENCRkEsIDB4Q0JGQiwNCi0gICAgMHhDQkZDLCAweENCRkQsIDB4Q0JGRSwgMHhDQkZGLCAweENDMDAsIDB4Q0MwMSwgMHhDQzAyLCAweENDMDMsDQotICAgIDB4Q0MwNCwgMHhDQzA1LCAweENDMDYsIDB4Q0MwNywgMHhDQzA4LCAweENDMDksIDB4Q0MwQSwgMHhDQzBCLA0KLSAgICAweENDMEUsIDB4Q0MwRiwgMHhDQzExLCAweENDMTIsIDB4Q0MxMywgMHhDQzE1LCAweENDMTYsIDB4Q0MxNywNCi0gICAgMHhDQzE4LCAweENDMTksIDB4Q0MxQSwgMHhDQzFCLCAweENDMUUsIDB4Q0MxRiwgMHhDQzIwLCAweENDMjMsDQotICAgIDB4Q0MyNCwgMHhDQzI1LCAweENDMjYsIDB4Q0MyQSwgMHhDQzJCLCAweENDMkQsIDB4Q0MyRiwgMHhDQzMxLA0KLSAgICAweENDMzIsIDB4Q0MzMywgMHhDQzM0LCAweENDMzUsIDB4Q0MzNiwgMHhDQzM3LCAweENDM0EsIDB4Q0MzRiwNCi0gICAgMHhDQzQwLCAweENDNDEsIDB4Q0M0MiwgMHhDQzQzLCAweENDNDYsIDB4Q0M0NywgMHhDQzQ5LCAweENDNEEsDQotICAgIDB4Q0M0QiwgMHhDQzRELCAweENDNEUsIDB4Q0M0RiwgMHhDQzUwLCAweENDNTEsIDB4Q0M1MiwgMHhDQzUzLA0KLSAgICAweENDNTYsIDB4Q0M1QSwgMHhDQzVCLCAweENDNUMsIDB4Q0M1RCwgMHhDQzVFLCAweENDNUYsIDB4Q0M2MSwNCi0gICAgMHhDQzYyLCAweENDNjMsIDB4Q0M2NSwgMHhDQzY3LCAweENDNjksIDB4Q0M2QSwgMHhDQzZCLCAweENDNkMsDQotICAgIDB4Q0M2RCwgMHhDQzZFLCAweENDNkYsIDB4Q0M3MSwgMHhDQzcyLCAweENDNzMsIDB4Q0M3NCwgMHhDQzc2LA0KLSAgICAweENDNzcsIDB4Q0M3OCwgMHhDQzc5LCAweENDN0EsIDB4Q0M3QiwgMHhDQzdDLCAweENDN0QsIDB4Q0M3RSwNCi0gICAgMHhDQzdGLCAweENDODAsIDB4Q0M4MSwgMHhDQzgyLCAweENDODMsIDB4Q0M4NCwgMHhDQzg1LCAweENDODYsDQotICAgIDB4Q0M4NywgMHhDQzg4LCAweENDODksIDB4Q0M4QSwgMHhDQzhCLCAweENDOEMsIDB4Q0M4RCwgMHhDQzhFLA0KLSAgICAweENDOEYsIDB4Q0M5MCwgMHhDQzkxLCAweENDOTIsIDB4Q0M5MywgMHhDQzk0LCAweENDOTUsIDB4Q0M5NiwNCi0gICAgMHhDQzk3LCAweENDOUEsIDB4Q0M5QiwgMHhDQzlELCAweENDOUUsIDB4Q0M5RiwgMHhDQ0ExLCAweENDQTIsDQotICAgIDB4Q0NBMywgMHhDQ0E0LCAweENDQTUsIDB4Q0NBNiwgMHhDQ0E3LCAweENDQUEsIDB4Q0NBRSwgMHhDQ0FGLA0KLSAgICAweENDQjAsIDB4Q0NCMSwgMHhDQ0IyLCAweENDQjMsIDB4Q0NCNiwgMHhDQ0I3LCAweENDQjksIDB4Q0NCQSwNCi0gICAgMHhDQ0JCLCAweENDQkQsIDB4Q0NCRSwgMHhDQ0JGLCAweENDQzAsIDB4Q0NDMSwgMHhDQ0MyLCAweENDQzMsDQotICAgIDB4Q0NDNiwgMHhDQ0M4LCAweENDQ0EsIDB4Q0NDQiwgMHhDQ0NDLCAweENDQ0QsIDB4Q0NDRSwgMHhDQ0NGLA0KLSAgICAweENDRDEsIDB4Q0NEMiwgMHhDQ0QzLCAweENDRDUsIDB4Q0NENiwgMHhDQ0Q3LCAweENDRDgsIDB4Q0NEOSwNCi0gICAgMHhDQ0RBLCAweENDREIsIDB4Q0NEQywgMHhDQ0RELCAweENDREUsIDB4Q0NERiwgMHhDQ0UwLCAweENDRTEsDQotICAgIDB4Q0NFMiwgMHhDQ0UzLCAweENDRTUsIDB4Q0NFNiwgMHhDQ0U3LCAweENDRTgsIDB4Q0NFOSwgMHhDQ0VBLA0KLSAgICAweENDRUIsIDB4Q0NFRCwgMHhDQ0VFLCAweENDRUYsIDB4Q0NGMSwgMHhDQ0YyLCAweENDRjMsIDB4Q0NGNCwNCi0gICAgMHhDQ0Y1LCAweENDRjYsIDB4Q0NGNywgMHhDQ0Y4LCAweENDRjksIDB4Q0NGQSwgMHhDQ0ZCLCAweENDRkMsDQotICAgIDB4Q0NGRCwgMHhDQ0ZFLCAweENDRkYsIDB4Q0QwMCwgMHhDRDAyLCAweENEMDMsIDB4Q0QwNCwgMHhDRDA1LA0KLSAgICAweENEMDYsIDB4Q0QwNywgMHhDRDBBLCAweENEMEIsIDB4Q0QwRCwgMHhDRDBFLCAweENEMEYsIDB4Q0QxMSwNCi0gICAgMHhDRDEyLCAweENEMTMsIDB4Q0QxNCwgMHhDRDE1LCAweENEMTYsIDB4Q0QxNywgMHhDRDFBLCAweENEMUMsDQotICAgIDB4Q0QxRSwgMHhDRDFGLCAweENEMjAsIDB4Q0QyMSwgMHhDRDIyLCAweENEMjMsIDB4Q0QyNSwgMHhDRDI2LA0KLSAgICAweENEMjcsIDB4Q0QyOSwgMHhDRDJBLCAweENEMkIsIDB4Q0QyRCwgMHhDRDJFLCAweENEMkYsIDB4Q0QzMCwNCi0gICAgMHhDRDMxLCAweENEMzIsIDB4Q0QzMywgMHhDRDM0LCAweENEMzUsIDB4Q0QzNiwgMHhDRDM3LCAweENEMzgsDQotICAgIDB4Q0QzQSwgMHhDRDNCLCAweENEM0MsIDB4Q0QzRCwgMHhDRDNFLCAweENEM0YsIDB4Q0Q0MCwgMHhDRDQxLA0KLSAgICAweENENDIsIDB4Q0Q0MywgMHhDRDQ0LCAweENENDUsIDB4Q0Q0NiwgMHhDRDQ3LCAweENENDgsIDB4Q0Q0OSwNCi0gICAgMHhDRDRBLCAweENENEIsIDB4Q0Q0QywgMHhDRDRELCAweENENEUsIDB4Q0Q0RiwgMHhDRDUwLCAweENENTEsDQotICAgIDB4Q0Q1MiwgMHhDRDUzLCAweENENTQsIDB4Q0Q1NSwgMHhDRDU2LCAweENENTcsIDB4Q0Q1OCwgMHhDRDU5LA0KLSAgICAweENENUEsIDB4Q0Q1QiwgMHhDRDVELCAweENENUUsIDB4Q0Q1RiwgMHhDRDYxLCAweENENjIsIDB4Q0Q2MywNCi0gICAgMHhDRDY1LCAweENENjYsIDB4Q0Q2NywgMHhDRDY4LCAweENENjksIDB4Q0Q2QSwgMHhDRDZCLCAweENENkUsDQotICAgIDB4Q0Q3MCwgMHhDRDcyLCAweENENzMsIDB4Q0Q3NCwgMHhDRDc1LCAweENENzYsIDB4Q0Q3NywgMHhDRDc5LA0KLSAgICAweENEN0EsIDB4Q0Q3QiwgMHhDRDdDLCAweENEN0QsIDB4Q0Q3RSwgMHhDRDdGLCAweENEODAsIDB4Q0Q4MSwNCi0gICAgMHhDRDgyLCAweENEODMsIDB4Q0Q4NCwgMHhDRDg1LCAweENEODYsIDB4Q0Q4NywgMHhDRDg5LCAweENEOEEsDQotICAgIDB4Q0Q4QiwgMHhDRDhDLCAweENEOEQsIDB4Q0Q4RSwgMHhDRDhGLCAweENEOTAsIDB4Q0Q5MSwgMHhDRDkyLA0KLSAgICAweENEOTMsIDB4Q0Q5NiwgMHhDRDk3LCAweENEOTksIDB4Q0Q5QSwgMHhDRDlCLCAweENEOUQsIDB4Q0Q5RSwNCi0gICAgMHhDRDlGLCAweENEQTAsIDB4Q0RBMSwgMHhDREEyLCAweENEQTMsIDB4Q0RBNiwgMHhDREE4LCAweENEQUEsDQotICAgIDB4Q0RBQiwgMHhDREFDLCAweENEQUQsIDB4Q0RBRSwgMHhDREFGLCAweENEQjEsIDB4Q0RCMiwgMHhDREIzLA0KLSAgICAweENEQjQsIDB4Q0RCNSwgMHhDREI2LCAweENEQjcsIDB4Q0RCOCwgMHhDREI5LCAweENEQkEsIDB4Q0RCQiwNCi0gICAgMHhDREJDLCAweENEQkQsIDB4Q0RCRSwgMHhDREJGLCAweENEQzAsIDB4Q0RDMSwgMHhDREMyLCAweENEQzMsDQotICAgIDB4Q0RDNSwgMHhDREM2LCAweENEQzcsIDB4Q0RDOCwgMHhDREM5LCAweENEQ0EsIDB4Q0RDQiwgMHhDRENELA0KLSAgICAweENEQ0UsIDB4Q0RDRiwgMHhDREQxLCAweENERDIsIDB4Q0REMywgMHhDREQ0LCAweENERDUsIDB4Q0RENiwNCi0gICAgMHhDREQ3LCAweENERDgsIDB4Q0REOSwgMHhDRERBLCAweENEREIsIDB4Q0REQywgMHhDRERELCAweENEREUsDQotICAgIDB4Q0RERiwgMHhDREUwLCAweENERTEsIDB4Q0RFMiwgMHhDREUzLCAweENERTQsIDB4Q0RFNSwgMHhDREU2LA0KLSAgICAweENERTcsIDB4Q0RFOSwgMHhDREVBLCAweENERUIsIDB4Q0RFRCwgMHhDREVFLCAweENERUYsIDB4Q0RGMSwNCi0gICAgMHhDREYyLCAweENERjMsIDB4Q0RGNCwgMHhDREY1LCAweENERjYsIDB4Q0RGNywgMHhDREZBLCAweENERkMsDQotICAgIDB4Q0RGRSwgMHhDREZGLCAweENFMDAsIDB4Q0UwMSwgMHhDRTAyLCAweENFMDMsIDB4Q0UwNSwgMHhDRTA2LA0KLSAgICAweENFMDcsIDB4Q0UwOSwgMHhDRTBBLCAweENFMEIsIDB4Q0UwRCwgMHhDRTBFLCAweENFMEYsIDB4Q0UxMCwNCi0gICAgMHhDRTExLCAweENFMTIsIDB4Q0UxMywgMHhDRTE1LCAweENFMTYsIDB4Q0UxNywgMHhDRTE4LCAweENFMUEsDQotICAgIDB4Q0UxQiwgMHhDRTFDLCAweENFMUQsIDB4Q0UxRSwgMHhDRTFGLCAweENFMjIsIDB4Q0UyMywgMHhDRTI1LA0KLSAgICAweENFMjYsIDB4Q0UyNywgMHhDRTI5LCAweENFMkEsIDB4Q0UyQiwgMHhDRTJDLCAweENFMkQsIDB4Q0UyRSwNCi0gICAgMHhDRTJGLCAweENFMzIsIDB4Q0UzNCwgMHhDRTM2LCAweENFMzcsIDB4Q0UzOCwgMHhDRTM5LCAweENFM0EsDQotICAgIDB4Q0UzQiwgMHhDRTNDLCAweENFM0QsIDB4Q0UzRSwgMHhDRTNGLCAweENFNDAsIDB4Q0U0MSwgMHhDRTQyLA0KLSAgICAweENFNDMsIDB4Q0U0NCwgMHhDRTQ1LCAweENFNDYsIDB4Q0U0NywgMHhDRTQ4LCAweENFNDksIDB4Q0U0QSwNCi0gICAgMHhDRTRCLCAweENFNEMsIDB4Q0U0RCwgMHhDRTRFLCAweENFNEYsIDB4Q0U1MCwgMHhDRTUxLCAweENFNTIsDQotICAgIDB4Q0U1MywgMHhDRTU0LCAweENFNTUsIDB4Q0U1NiwgMHhDRTU3LCAweENFNUEsIDB4Q0U1QiwgMHhDRTVELA0KLSAgICAweENFNUUsIDB4Q0U2MiwgMHhDRTYzLCAweENFNjQsIDB4Q0U2NSwgMHhDRTY2LCAweENFNjcsIDB4Q0U2QSwNCi0gICAgMHhDRTZDLCAweENFNkUsIDB4Q0U2RiwgMHhDRTcwLCAweENFNzEsIDB4Q0U3MiwgMHhDRTczLCAweENFNzYsDQotICAgIDB4Q0U3NywgMHhDRTc5LCAweENFN0EsIDB4Q0U3QiwgMHhDRTdELCAweENFN0UsIDB4Q0U3RiwgMHhDRTgwLA0KLSAgICAweENFODEsIDB4Q0U4MiwgMHhDRTgzLCAweENFODYsIDB4Q0U4OCwgMHhDRThBLCAweENFOEIsIDB4Q0U4QywNCi0gICAgMHhDRThELCAweENFOEUsIDB4Q0U4RiwgMHhDRTkyLCAweENFOTMsIDB4Q0U5NSwgMHhDRTk2LCAweENFOTcsDQotICAgIDB4Q0U5OSwgMHhDRTlBLCAweENFOUIsIDB4Q0U5QywgMHhDRTlELCAweENFOUUsIDB4Q0U5RiwgMHhDRUEyLA0KLSAgICAweENFQTYsIDB4Q0VBNywgMHhDRUE4LCAweENFQTksIDB4Q0VBQSwgMHhDRUFCLCAweENFQUUsIDB4Q0VBRiwNCi0gICAgMHhDRUIwLCAweENFQjEsIDB4Q0VCMiwgMHhDRUIzLCAweENFQjQsIDB4Q0VCNSwgMHhDRUI2LCAweENFQjcsDQotICAgIDB4Q0VCOCwgMHhDRUI5LCAweENFQkEsIDB4Q0VCQiwgMHhDRUJDLCAweENFQkQsIDB4Q0VCRSwgMHhDRUJGLA0KLSAgICAweENFQzAsIDB4Q0VDMiwgMHhDRUMzLCAweENFQzQsIDB4Q0VDNSwgMHhDRUM2LCAweENFQzcsIDB4Q0VDOCwNCi0gICAgMHhDRUM5LCAweENFQ0EsIDB4Q0VDQiwgMHhDRUNDLCAweENFQ0QsIDB4Q0VDRSwgMHhDRUNGLCAweENFRDAsDQotICAgIDB4Q0VEMSwgMHhDRUQyLCAweENFRDMsIDB4Q0VENCwgMHhDRUQ1LCAweENFRDYsIDB4Q0VENywgMHhDRUQ4LA0KLSAgICAweENFRDksIDB4Q0VEQSwgMHhDRURCLCAweENFREMsIDB4Q0VERCwgMHhDRURFLCAweENFREYsIDB4Q0VFMCwNCi0gICAgMHhDRUUxLCAweENFRTIsIDB4Q0VFMywgMHhDRUU2LCAweENFRTcsIDB4Q0VFOSwgMHhDRUVBLCAweENFRUQsDQotICAgIDB4Q0VFRSwgMHhDRUVGLCAweENFRjAsIDB4Q0VGMSwgMHhDRUYyLCAweENFRjMsIDB4Q0VGNiwgMHhDRUZBLA0KLSAgICAweENFRkIsIDB4Q0VGQywgMHhDRUZELCAweENFRkUsIDB4Q0VGRiwgMHhDRjAyLCAweENGMDMsIDB4Q0YwNSwNCi0gICAgMHhDRjA2LCAweENGMDcsIDB4Q0YwOSwgMHhDRjBBLCAweENGMEIsIDB4Q0YwQywgMHhDRjBELCAweENGMEUsDQotICAgIDB4Q0YwRiwgMHhDRjEyLCAweENGMTQsIDB4Q0YxNiwgMHhDRjE3LCAweENGMTgsIDB4Q0YxOSwgMHhDRjFBLA0KLSAgICAweENGMUIsIDB4Q0YxRCwgMHhDRjFFLCAweENGMUYsIDB4Q0YyMSwgMHhDRjIyLCAweENGMjMsIDB4Q0YyNSwNCi0gICAgMHhDRjI2LCAweENGMjcsIDB4Q0YyOCwgMHhDRjI5LCAweENGMkEsIDB4Q0YyQiwgMHhDRjJFLCAweENGMzIsDQotICAgIDB4Q0YzMywgMHhDRjM0LCAweENGMzUsIDB4Q0YzNiwgMHhDRjM3LCAweENGMzksIDB4Q0YzQSwgMHhDRjNCLA0KLSAgICAweENGM0MsIDB4Q0YzRCwgMHhDRjNFLCAweENGM0YsIDB4Q0Y0MCwgMHhDRjQxLCAweENGNDIsIDB4Q0Y0MywNCi0gICAgMHhDRjQ0LCAweENGNDUsIDB4Q0Y0NiwgMHhDRjQ3LCAweENGNDgsIDB4Q0Y0OSwgMHhDRjRBLCAweENGNEIsDQotICAgIDB4Q0Y0QywgMHhDRjRELCAweENGNEUsIDB4Q0Y0RiwgMHhDRjUwLCAweENGNTEsIDB4Q0Y1MiwgMHhDRjUzLA0KLSAgICAweENGNTYsIDB4Q0Y1NywgMHhDRjU5LCAweENGNUEsIDB4Q0Y1QiwgMHhDRjVELCAweENGNUUsIDB4Q0Y1RiwNCi0gICAgMHhDRjYwLCAweENGNjEsIDB4Q0Y2MiwgMHhDRjYzLCAweENGNjYsIDB4Q0Y2OCwgMHhDRjZBLCAweENGNkIsDQotICAgIDB4Q0Y2QywgMHhDRjZELCAweENGNkUsIDB4Q0Y2RiwgMHhDRjcyLCAweENGNzMsIDB4Q0Y3NSwgMHhDRjc2LA0KLSAgICAweENGNzcsIDB4Q0Y3OSwgMHhDRjdBLCAweENGN0IsIDB4Q0Y3QywgMHhDRjdELCAweENGN0UsIDB4Q0Y3RiwNCi0gICAgMHhDRjgxLCAweENGODIsIDB4Q0Y4MywgMHhDRjg0LCAweENGODYsIDB4Q0Y4NywgMHhDRjg4LCAweENGODksDQotICAgIDB4Q0Y4QSwgMHhDRjhCLCAweENGOEQsIDB4Q0Y4RSwgMHhDRjhGLCAweENGOTAsIDB4Q0Y5MSwgMHhDRjkyLA0KLSAgICAweENGOTMsIDB4Q0Y5NCwgMHhDRjk1LCAweENGOTYsIDB4Q0Y5NywgMHhDRjk4LCAweENGOTksIDB4Q0Y5QSwNCi0gICAgMHhDRjlCLCAweENGOUMsIDB4Q0Y5RCwgMHhDRjlFLCAweENGOUYsIDB4Q0ZBMCwgMHhDRkEyLCAweENGQTMsDQotICAgIDB4Q0ZBNCwgMHhDRkE1LCAweENGQTYsIDB4Q0ZBNywgMHhDRkE5LCAweENGQUEsIDB4Q0ZBQiwgMHhDRkFDLA0KLSAgICAweENGQUQsIDB4Q0ZBRSwgMHhDRkFGLCAweENGQjEsIDB4Q0ZCMiwgMHhDRkIzLCAweENGQjQsIDB4Q0ZCNSwNCi0gICAgMHhDRkI2LCAweENGQjcsIDB4Q0ZCOCwgMHhDRkI5LCAweENGQkEsIDB4Q0ZCQiwgMHhDRkJDLCAweENGQkQsDQotICAgIDB4Q0ZCRSwgMHhDRkJGLCAweENGQzAsIDB4Q0ZDMSwgMHhDRkMyLCAweENGQzMsIDB4Q0ZDNSwgMHhDRkM2LA0KLSAgICAweENGQzcsIDB4Q0ZDOCwgMHhDRkM5LCAweENGQ0EsIDB4Q0ZDQiwgMHhDRkNDLCAweENGQ0QsIDB4Q0ZDRSwNCi0gICAgMHhDRkNGLCAweENGRDAsIDB4Q0ZEMSwgMHhDRkQyLCAweENGRDMsIDB4Q0ZENCwgMHhDRkQ1LCAweENGRDYsDQotICAgIDB4Q0ZENywgMHhDRkQ4LCAweENGRDksIDB4Q0ZEQSwgMHhDRkRCLCAweENGREMsIDB4Q0ZERCwgMHhDRkRFLA0KLSAgICAweENGREYsIDB4Q0ZFMiwgMHhDRkUzLCAweENGRTUsIDB4Q0ZFNiwgMHhDRkU3LCAweENGRTksIDB4Q0ZFQSwNCi0gICAgMHhDRkVCLCAweENGRUMsIDB4Q0ZFRCwgMHhDRkVFLCAweENGRUYsIDB4Q0ZGMiwgMHhDRkY0LCAweENGRjYsDQotICAgIDB4Q0ZGNywgMHhDRkY4LCAweENGRjksIDB4Q0ZGQSwgMHhDRkZCLCAweENGRkQsIDB4Q0ZGRSwgMHhDRkZGLA0KLSAgICAweEQwMDEsIDB4RDAwMiwgMHhEMDAzLCAweEQwMDUsIDB4RDAwNiwgMHhEMDA3LCAweEQwMDgsIDB4RDAwOSwNCi0gICAgMHhEMDBBLCAweEQwMEIsIDB4RDAwQywgMHhEMDBELCAweEQwMEUsIDB4RDAwRiwgMHhEMDEwLCAweEQwMTIsDQotICAgIDB4RDAxMywgMHhEMDE0LCAweEQwMTUsIDB4RDAxNiwgMHhEMDE3LCAweEQwMTksIDB4RDAxQSwgMHhEMDFCLA0KLSAgICAweEQwMUMsIDB4RDAxRCwgMHhEMDFFLCAweEQwMUYsIDB4RDAyMCwgMHhEMDIxLCAweEQwMjIsIDB4RDAyMywNCi0gICAgMHhEMDI0LCAweEQwMjUsIDB4RDAyNiwgMHhEMDI3LCAweEQwMjgsIDB4RDAyOSwgMHhEMDJBLCAweEQwMkIsDQotICAgIDB4RDAyQywgMHhEMDJFLCAweEQwMkYsIDB4RDAzMCwgMHhEMDMxLCAweEQwMzIsIDB4RDAzMywgMHhEMDM2LA0KLSAgICAweEQwMzcsIDB4RDAzOSwgMHhEMDNBLCAweEQwM0IsIDB4RDAzRCwgMHhEMDNFLCAweEQwM0YsIDB4RDA0MCwNCi0gICAgMHhEMDQxLCAweEQwNDIsIDB4RDA0MywgMHhEMDQ2LCAweEQwNDgsIDB4RDA0QSwgMHhEMDRCLCAweEQwNEMsDQotICAgIDB4RDA0RCwgMHhEMDRFLCAweEQwNEYsIDB4RDA1MSwgMHhEMDUyLCAweEQwNTMsIDB4RDA1NSwgMHhEMDU2LA0KLSAgICAweEQwNTcsIDB4RDA1OSwgMHhEMDVBLCAweEQwNUIsIDB4RDA1QywgMHhEMDVELCAweEQwNUUsIDB4RDA1RiwNCi0gICAgMHhEMDYxLCAweEQwNjIsIDB4RDA2MywgMHhEMDY0LCAweEQwNjUsIDB4RDA2NiwgMHhEMDY3LCAweEQwNjgsDQotICAgIDB4RDA2OSwgMHhEMDZBLCAweEQwNkIsIDB4RDA2RSwgMHhEMDZGLCAweEQwNzEsIDB4RDA3MiwgMHhEMDczLA0KLSAgICAweEQwNzUsIDB4RDA3NiwgMHhEMDc3LCAweEQwNzgsIDB4RDA3OSwgMHhEMDdBLCAweEQwN0IsIDB4RDA3RSwNCi0gICAgMHhEMDdGLCAweEQwODAsIDB4RDA4MiwgMHhEMDgzLCAweEQwODQsIDB4RDA4NSwgMHhEMDg2LCAweEQwODcsDQotICAgIDB4RDA4OCwgMHhEMDg5LCAweEQwOEEsIDB4RDA4QiwgMHhEMDhDLCAweEQwOEQsIDB4RDA4RSwgMHhEMDhGLA0KLSAgICAweEQwOTAsIDB4RDA5MSwgMHhEMDkyLCAweEQwOTMsIDB4RDA5NCwgMHhEMDk1LCAweEQwOTYsIDB4RDA5NywNCi0gICAgMHhEMDk4LCAweEQwOTksIDB4RDA5QSwgMHhEMDlCLCAweEQwOUMsIDB4RDA5RCwgMHhEMDlFLCAweEQwOUYsDQotICAgIDB4RDBBMCwgMHhEMEExLCAweEQwQTIsIDB4RDBBMywgMHhEMEE2LCAweEQwQTcsIDB4RDBBOSwgMHhEMEFBLA0KLSAgICAweEQwQUIsIDB4RDBBRCwgMHhEMEFFLCAweEQwQUYsIDB4RDBCMCwgMHhEMEIxLCAweEQwQjIsIDB4RDBCMywNCi0gICAgMHhEMEI2LCAweEQwQjgsIDB4RDBCQSwgMHhEMEJCLCAweEQwQkMsIDB4RDBCRCwgMHhEMEJFLCAweEQwQkYsDQotICAgIDB4RDBDMiwgMHhEMEMzLCAweEQwQzUsIDB4RDBDNiwgMHhEMEM3LCAweEQwQ0EsIDB4RDBDQiwgMHhEMENDLA0KLSAgICAweEQwQ0QsIDB4RDBDRSwgMHhEMENGLCAweEQwRDIsIDB4RDBENiwgMHhEMEQ3LCAweEQwRDgsIDB4RDBEOSwNCi0gICAgMHhEMERBLCAweEQwREIsIDB4RDBERSwgMHhEMERGLCAweEQwRTEsIDB4RDBFMiwgMHhEMEUzLCAweEQwRTUsDQotICAgIDB4RDBFNiwgMHhEMEU3LCAweEQwRTgsIDB4RDBFOSwgMHhEMEVBLCAweEQwRUIsIDB4RDBFRSwgMHhEMEYyLA0KLSAgICAweEQwRjMsIDB4RDBGNCwgMHhEMEY1LCAweEQwRjYsIDB4RDBGNywgMHhEMEY5LCAweEQwRkEsIDB4RDBGQiwNCi0gICAgMHhEMEZDLCAweEQwRkQsIDB4RDBGRSwgMHhEMEZGLCAweEQxMDAsIDB4RDEwMSwgMHhEMTAyLCAweEQxMDMsDQotICAgIDB4RDEwNCwgMHhEMTA1LCAweEQxMDYsIDB4RDEwNywgMHhEMTA4LCAweEQxMDksIDB4RDEwQSwgMHhEMTBCLA0KLSAgICAweEQxMEMsIDB4RDEwRSwgMHhEMTBGLCAweEQxMTAsIDB4RDExMSwgMHhEMTEyLCAweEQxMTMsIDB4RDExNCwNCi0gICAgMHhEMTE1LCAweEQxMTYsIDB4RDExNywgMHhEMTE4LCAweEQxMTksIDB4RDExQSwgMHhEMTFCLCAweEQxMUMsDQotICAgIDB4RDExRCwgMHhEMTFFLCAweEQxMUYsIDB4RDEyMCwgMHhEMTIxLCAweEQxMjIsIDB4RDEyMywgMHhEMTI0LA0KLSAgICAweEQxMjUsIDB4RDEyNiwgMHhEMTI3LCAweEQxMjgsIDB4RDEyOSwgMHhEMTJBLCAweEQxMkIsIDB4RDEyQywNCi0gICAgMHhEMTJELCAweEQxMkUsIDB4RDEyRiwgMHhEMTMyLCAweEQxMzMsIDB4RDEzNSwgMHhEMTM2LCAweEQxMzcsDQotICAgIDB4RDEzOSwgMHhEMTNCLCAweEQxM0MsIDB4RDEzRCwgMHhEMTNFLCAweEQxM0YsIDB4RDE0MiwgMHhEMTQ2LA0KLSAgICAweEQxNDcsIDB4RDE0OCwgMHhEMTQ5LCAweEQxNEEsIDB4RDE0QiwgMHhEMTRFLCAweEQxNEYsIDB4RDE1MSwNCi0gICAgMHhEMTUyLCAweEQxNTMsIDB4RDE1NSwgMHhEMTU2LCAweEQxNTcsIDB4RDE1OCwgMHhEMTU5LCAweEQxNUEsDQotICAgIDB4RDE1QiwgMHhEMTVFLCAweEQxNjAsIDB4RDE2MiwgMHhEMTYzLCAweEQxNjQsIDB4RDE2NSwgMHhEMTY2LA0KLSAgICAweEQxNjcsIDB4RDE2OSwgMHhEMTZBLCAweEQxNkIsIDB4RDE2RCwgMHhEMTZFLCAweEQxNkYsIDB4RDE3MCwNCi0gICAgMHhEMTcxLCAweEQxNzIsIDB4RDE3MywgMHhEMTc0LCAweEQxNzUsIDB4RDE3NiwgMHhEMTc3LCAweEQxNzgsDQotICAgIDB4RDE3OSwgMHhEMTdBLCAweEQxN0IsIDB4RDE3RCwgMHhEMTdFLCAweEQxN0YsIDB4RDE4MCwgMHhEMTgxLA0KLSAgICAweEQxODIsIDB4RDE4MywgMHhEMTg1LCAweEQxODYsIDB4RDE4NywgMHhEMTg5LCAweEQxOEEsIDB4RDE4QiwNCi0gICAgMHhEMThDLCAweEQxOEQsIDB4RDE4RSwgMHhEMThGLCAweEQxOTAsIDB4RDE5MSwgMHhEMTkyLCAweEQxOTMsDQotICAgIDB4RDE5NCwgMHhEMTk1LCAweEQxOTYsIDB4RDE5NywgMHhEMTk4LCAweEQxOTksIDB4RDE5QSwgMHhEMTlCLA0KLSAgICAweEQxOUMsIDB4RDE5RCwgMHhEMTlFLCAweEQxOUYsIDB4RDFBMiwgMHhEMUEzLCAweEQxQTUsIDB4RDFBNiwNCi0gICAgMHhEMUE3LCAweEQxQTksIDB4RDFBQSwgMHhEMUFCLCAweEQxQUMsIDB4RDFBRCwgMHhEMUFFLCAweEQxQUYsDQotICAgIDB4RDFCMiwgMHhEMUI0LCAweEQxQjYsIDB4RDFCNywgMHhEMUI4LCAweEQxQjksIDB4RDFCQiwgMHhEMUJELA0KLSAgICAweEQxQkUsIDB4RDFCRiwgMHhEMUMxLCAweEQxQzIsIDB4RDFDMywgMHhEMUM0LCAweEQxQzUsIDB4RDFDNiwNCi0gICAgMHhEMUM3LCAweEQxQzgsIDB4RDFDOSwgMHhEMUNBLCAweEQxQ0IsIDB4RDFDQywgMHhEMUNELCAweEQxQ0UsDQotICAgIDB4RDFDRiwgMHhEMUQwLCAweEQxRDEsIDB4RDFEMiwgMHhEMUQzLCAweEQxRDQsIDB4RDFENSwgMHhEMUQ2LA0KLSAgICAweEQxRDcsIDB4RDFEOSwgMHhEMURBLCAweEQxREIsIDB4RDFEQywgMHhEMURELCAweEQxREUsIDB4RDFERiwNCi0gICAgMHhEMUUwLCAweEQxRTEsIDB4RDFFMiwgMHhEMUUzLCAweEQxRTQsIDB4RDFFNSwgMHhEMUU2LCAweEQxRTcsDQotICAgIDB4RDFFOCwgMHhEMUU5LCAweEQxRUEsIDB4RDFFQiwgMHhEMUVDLCAweEQxRUQsIDB4RDFFRSwgMHhEMUVGLA0KLSAgICAweEQxRjAsIDB4RDFGMSwgMHhEMUYyLCAweEQxRjMsIDB4RDFGNSwgMHhEMUY2LCAweEQxRjcsIDB4RDFGOSwNCi0gICAgMHhEMUZBLCAweEQxRkIsIDB4RDFGQywgMHhEMUZELCAweEQxRkUsIDB4RDFGRiwgMHhEMjAwLCAweEQyMDEsDQotICAgIDB4RDIwMiwgMHhEMjAzLCAweEQyMDQsIDB4RDIwNSwgMHhEMjA2LCAweEQyMDgsIDB4RDIwQSwgMHhEMjBCLA0KLSAgICAweEQyMEMsIDB4RDIwRCwgMHhEMjBFLCAweEQyMEYsIDB4RDIxMSwgMHhEMjEyLCAweEQyMTMsIDB4RDIxNCwNCi0gICAgMHhEMjE1LCAweEQyMTYsIDB4RDIxNywgMHhEMjE4LCAweEQyMTksIDB4RDIxQSwgMHhEMjFCLCAweEQyMUMsDQotICAgIDB4RDIxRCwgMHhEMjFFLCAweEQyMUYsIDB4RDIyMCwgMHhEMjIxLCAweEQyMjIsIDB4RDIyMywgMHhEMjI0LA0KLSAgICAweEQyMjUsIDB4RDIyNiwgMHhEMjI3LCAweEQyMjgsIDB4RDIyOSwgMHhEMjJBLCAweEQyMkIsIDB4RDIyRSwNCi0gICAgMHhEMjJGLCAweEQyMzEsIDB4RDIzMiwgMHhEMjMzLCAweEQyMzUsIDB4RDIzNiwgMHhEMjM3LCAweEQyMzgsDQotICAgIDB4RDIzOSwgMHhEMjNBLCAweEQyM0IsIDB4RDIzRSwgMHhEMjQwLCAweEQyNDIsIDB4RDI0MywgMHhEMjQ0LA0KLSAgICAweEQyNDUsIDB4RDI0NiwgMHhEMjQ3LCAweEQyNDksIDB4RDI0QSwgMHhEMjRCLCAweEQyNEMsIDB4RDI0RCwNCi0gICAgMHhEMjRFLCAweEQyNEYsIDB4RDI1MCwgMHhEMjUxLCAweEQyNTIsIDB4RDI1MywgMHhEMjU0LCAweEQyNTUsDQotICAgIDB4RDI1NiwgMHhEMjU3LCAweEQyNTgsIDB4RDI1OSwgMHhEMjVBLCAweEQyNUIsIDB4RDI1RCwgMHhEMjVFLA0KLSAgICAweEQyNUYsIDB4RDI2MCwgMHhEMjYxLCAweEQyNjIsIDB4RDI2MywgMHhEMjY1LCAweEQyNjYsIDB4RDI2NywNCi0gICAgMHhEMjY4LCAweEQyNjksIDB4RDI2QSwgMHhEMjZCLCAweEQyNkMsIDB4RDI2RCwgMHhEMjZFLCAweEQyNkYsDQotICAgIDB4RDI3MCwgMHhEMjcxLCAweEQyNzIsIDB4RDI3MywgMHhEMjc0LCAweEQyNzUsIDB4RDI3NiwgMHhEMjc3LA0KLSAgICAweEQyNzgsIDB4RDI3OSwgMHhEMjdBLCAweEQyN0IsIDB4RDI3QywgMHhEMjdELCAweEQyN0UsIDB4RDI3RiwNCi0gICAgMHhEMjgyLCAweEQyODMsIDB4RDI4NSwgMHhEMjg2LCAweEQyODcsIDB4RDI4OSwgMHhEMjhBLCAweEQyOEIsDQotICAgIDB4RDI4QywgMHhEMjhELCAweEQyOEUsIDB4RDI4RiwgMHhEMjkyLCAweEQyOTMsIDB4RDI5NCwgMHhEMjk2LA0KLSAgICAweEQyOTcsIDB4RDI5OCwgMHhEMjk5LCAweEQyOUEsIDB4RDI5QiwgMHhEMjlELCAweEQyOUUsIDB4RDI5RiwNCi0gICAgMHhEMkExLCAweEQyQTIsIDB4RDJBMywgMHhEMkE1LCAweEQyQTYsIDB4RDJBNywgMHhEMkE4LCAweEQyQTksDQotICAgIDB4RDJBQSwgMHhEMkFCLCAweEQyQUQsIDB4RDJBRSwgMHhEMkFGLCAweEQyQjAsIDB4RDJCMiwgMHhEMkIzLA0KLSAgICAweEQyQjQsIDB4RDJCNSwgMHhEMkI2LCAweEQyQjcsIDB4RDJCQSwgMHhEMkJCLCAweEQyQkQsIDB4RDJCRSwNCi0gICAgMHhEMkMxLCAweEQyQzMsIDB4RDJDNCwgMHhEMkM1LCAweEQyQzYsIDB4RDJDNywgMHhEMkNBLCAweEQyQ0MsDQotICAgIDB4RDJDRCwgMHhEMkNFLCAweEQyQ0YsIDB4RDJEMCwgMHhEMkQxLCAweEQyRDIsIDB4RDJEMywgMHhEMkQ1LA0KLSAgICAweEQyRDYsIDB4RDJENywgMHhEMkQ5LCAweEQyREEsIDB4RDJEQiwgMHhEMkRELCAweEQyREUsIDB4RDJERiwNCi0gICAgMHhEMkUwLCAweEQyRTEsIDB4RDJFMiwgMHhEMkUzLCAweEQyRTYsIDB4RDJFNywgMHhEMkU4LCAweEQyRTksDQotICAgIDB4RDJFQSwgMHhEMkVCLCAweEQyRUMsIDB4RDJFRCwgMHhEMkVFLCAweEQyRUYsIDB4RDJGMiwgMHhEMkYzLA0KLSAgICAweEQyRjUsIDB4RDJGNiwgMHhEMkY3LCAweEQyRjksIDB4RDJGQSwgMHhEMkZCLCAweEQyRkMsIDB4RDJGRCwNCi0gICAgMHhEMkZFLCAweEQyRkYsIDB4RDMwMiwgMHhEMzA0LCAweEQzMDYsIDB4RDMwNywgMHhEMzA4LCAweEQzMDksDQotICAgIDB4RDMwQSwgMHhEMzBCLCAweEQzMEYsIDB4RDMxMSwgMHhEMzEyLCAweEQzMTMsIDB4RDMxNSwgMHhEMzE3LA0KLSAgICAweEQzMTgsIDB4RDMxOSwgMHhEMzFBLCAweEQzMUIsIDB4RDMxRSwgMHhEMzIyLCAweEQzMjMsIDB4RDMyNCwNCi0gICAgMHhEMzI2LCAweEQzMjcsIDB4RDMyQSwgMHhEMzJCLCAweEQzMkQsIDB4RDMyRSwgMHhEMzJGLCAweEQzMzEsDQotICAgIDB4RDMzMiwgMHhEMzMzLCAweEQzMzQsIDB4RDMzNSwgMHhEMzM2LCAweEQzMzcsIDB4RDMzQSwgMHhEMzNFLA0KLSAgICAweEQzM0YsIDB4RDM0MCwgMHhEMzQxLCAweEQzNDIsIDB4RDM0MywgMHhEMzQ2LCAweEQzNDcsIDB4RDM0OCwNCi0gICAgMHhEMzQ5LCAweEQzNEEsIDB4RDM0QiwgMHhEMzRDLCAweEQzNEQsIDB4RDM0RSwgMHhEMzRGLCAweEQzNTAsDQotICAgIDB4RDM1MSwgMHhEMzUyLCAweEQzNTMsIDB4RDM1NCwgMHhEMzU1LCAweEQzNTYsIDB4RDM1NywgMHhEMzU4LA0KLSAgICAweEQzNTksIDB4RDM1QSwgMHhEMzVCLCAweEQzNUMsIDB4RDM1RCwgMHhEMzVFLCAweEQzNUYsIDB4RDM2MCwNCi0gICAgMHhEMzYxLCAweEQzNjIsIDB4RDM2MywgMHhEMzY0LCAweEQzNjUsIDB4RDM2NiwgMHhEMzY3LCAweEQzNjgsDQotICAgIDB4RDM2OSwgMHhEMzZBLCAweEQzNkIsIDB4RDM2QywgMHhEMzZELCAweEQzNkUsIDB4RDM2RiwgMHhEMzcwLA0KLSAgICAweEQzNzEsIDB4RDM3MiwgMHhEMzczLCAweEQzNzQsIDB4RDM3NSwgMHhEMzc2LCAweEQzNzcsIDB4RDM3OCwNCi0gICAgMHhEMzc5LCAweEQzN0EsIDB4RDM3QiwgMHhEMzdFLCAweEQzN0YsIDB4RDM4MSwgMHhEMzgyLCAweEQzODMsDQotICAgIDB4RDM4NSwgMHhEMzg2LCAweEQzODcsIDB4RDM4OCwgMHhEMzg5LCAweEQzOEEsIDB4RDM4QiwgMHhEMzhFLA0KLSAgICAweEQzOTIsIDB4RDM5MywgMHhEMzk0LCAweEQzOTUsIDB4RDM5NiwgMHhEMzk3LCAweEQzOUEsIDB4RDM5QiwNCi0gICAgMHhEMzlELCAweEQzOUUsIDB4RDM5RiwgMHhEM0ExLCAweEQzQTIsIDB4RDNBMywgMHhEM0E0LCAweEQzQTUsDQotICAgIDB4RDNBNiwgMHhEM0E3LCAweEQzQUEsIDB4RDNBQywgMHhEM0FFLCAweEQzQUYsIDB4RDNCMCwgMHhEM0IxLA0KLSAgICAweEQzQjIsIDB4RDNCMywgMHhEM0I1LCAweEQzQjYsIDB4RDNCNywgMHhEM0I5LCAweEQzQkEsIDB4RDNCQiwNCi0gICAgMHhEM0JELCAweEQzQkUsIDB4RDNCRiwgMHhEM0MwLCAweEQzQzEsIDB4RDNDMiwgMHhEM0MzLCAweEQzQzYsDQotICAgIDB4RDNDNywgMHhEM0NBLCAweEQzQ0IsIDB4RDNDQywgMHhEM0NELCAweEQzQ0UsIDB4RDNDRiwgMHhEM0QxLA0KLSAgICAweEQzRDIsIDB4RDNEMywgMHhEM0Q0LCAweEQzRDUsIDB4RDNENiwgMHhEM0Q3LCAweEQzRDksIDB4RDNEQSwNCi0gICAgMHhEM0RCLCAweEQzREMsIDB4RDNERCwgMHhEM0RFLCAweEQzREYsIDB4RDNFMCwgMHhEM0UyLCAweEQzRTQsDQotICAgIDB4RDNFNSwgMHhEM0U2LCAweEQzRTcsIDB4RDNFOCwgMHhEM0U5LCAweEQzRUEsIDB4RDNFQiwgMHhEM0VFLA0KLSAgICAweEQzRUYsIDB4RDNGMSwgMHhEM0YyLCAweEQzRjMsIDB4RDNGNSwgMHhEM0Y2LCAweEQzRjcsIDB4RDNGOCwNCi0gICAgMHhEM0Y5LCAweEQzRkEsIDB4RDNGQiwgMHhEM0ZFLCAweEQ0MDAsIDB4RDQwMiwgMHhENDAzLCAweEQ0MDQsDQotICAgIDB4RDQwNSwgMHhENDA2LCAweEQ0MDcsIDB4RDQwOSwgMHhENDBBLCAweEQ0MEIsIDB4RDQwQywgMHhENDBELA0KLSAgICAweEQ0MEUsIDB4RDQwRiwgMHhENDEwLCAweEQ0MTEsIDB4RDQxMiwgMHhENDEzLCAweEQ0MTQsIDB4RDQxNSwNCi0gICAgMHhENDE2LCAweEQ0MTcsIDB4RDQxOCwgMHhENDE5LCAweEQ0MUEsIDB4RDQxQiwgMHhENDFDLCAweEQ0MUUsDQotICAgIDB4RDQxRiwgMHhENDIwLCAweEQ0MjEsIDB4RDQyMiwgMHhENDIzLCAweEQ0MjQsIDB4RDQyNSwgMHhENDI2LA0KLSAgICAweEQ0MjcsIDB4RDQyOCwgMHhENDI5LCAweEQ0MkEsIDB4RDQyQiwgMHhENDJDLCAweEQ0MkQsIDB4RDQyRSwNCi0gICAgMHhENDJGLCAweEQ0MzAsIDB4RDQzMSwgMHhENDMyLCAweEQ0MzMsIDB4RDQzNCwgMHhENDM1LCAweEQ0MzYsDQotICAgIDB4RDQzNywgMHhENDM4LCAweEQ0MzksIDB4RDQzQSwgMHhENDNCLCAweEQ0M0MsIDB4RDQzRCwgMHhENDNFLA0KLSAgICAweEQ0M0YsIDB4RDQ0MSwgMHhENDQyLCAweEQ0NDMsIDB4RDQ0NSwgMHhENDQ2LCAweEQ0NDcsIDB4RDQ0OCwNCi0gICAgMHhENDQ5LCAweEQ0NEEsIDB4RDQ0QiwgMHhENDRDLCAweEQ0NEQsIDB4RDQ0RSwgMHhENDRGLCAweEQ0NTAsDQotICAgIDB4RDQ1MSwgMHhENDUyLCAweEQ0NTMsIDB4RDQ1NCwgMHhENDU1LCAweEQ0NTYsIDB4RDQ1NywgMHhENDU4LA0KLSAgICAweEQ0NTksIDB4RDQ1QSwgMHhENDVCLCAweEQ0NUQsIDB4RDQ1RSwgMHhENDVGLCAweEQ0NjEsIDB4RDQ2MiwNCi0gICAgMHhENDYzLCAweEQ0NjUsIDB4RDQ2NiwgMHhENDY3LCAweEQ0NjgsIDB4RDQ2OSwgMHhENDZBLCAweEQ0NkIsDQotICAgIDB4RDQ2QywgMHhENDZFLCAweEQ0NzAsIDB4RDQ3MSwgMHhENDcyLCAweEQ0NzMsIDB4RDQ3NCwgMHhENDc1LA0KLSAgICAweEQ0NzYsIDB4RDQ3NywgMHhENDdBLCAweEQ0N0IsIDB4RDQ3RCwgMHhENDdFLCAweEQ0ODEsIDB4RDQ4MywNCi0gICAgMHhENDg0LCAweEQ0ODUsIDB4RDQ4NiwgMHhENDg3LCAweEQ0OEEsIDB4RDQ4QywgMHhENDhFLCAweEQ0OEYsDQotICAgIDB4RDQ5MCwgMHhENDkxLCAweEQ0OTIsIDB4RDQ5MywgMHhENDk1LCAweEQ0OTYsIDB4RDQ5NywgMHhENDk4LA0KLSAgICAweEQ0OTksIDB4RDQ5QSwgMHhENDlCLCAweEQ0OUMsIDB4RDQ5RCwgMHhENDlFLCAweEQ0OUYsIDB4RDRBMCwNCi0gICAgMHhENEExLCAweEQ0QTIsIDB4RDRBMywgMHhENEE0LCAweEQ0QTUsIDB4RDRBNiwgMHhENEE3LCAweEQ0QTgsDQotICAgIDB4RDRBQSwgMHhENEFCLCAweEQ0QUMsIDB4RDRBRCwgMHhENEFFLCAweEQ0QUYsIDB4RDRCMCwgMHhENEIxLA0KLSAgICAweEQ0QjIsIDB4RDRCMywgMHhENEI0LCAweEQ0QjUsIDB4RDRCNiwgMHhENEI3LCAweEQ0QjgsIDB4RDRCOSwNCi0gICAgMHhENEJBLCAweEQ0QkIsIDB4RDRCQywgMHhENEJELCAweEQ0QkUsIDB4RDRCRiwgMHhENEMwLCAweEQ0QzEsDQotICAgIDB4RDRDMiwgMHhENEMzLCAweEQ0QzQsIDB4RDRDNSwgMHhENEM2LCAweEQ0QzcsIDB4RDRDOCwgMHhENEM5LA0KLSAgICAweEQ0Q0EsIDB4RDRDQiwgMHhENENELCAweEQ0Q0UsIDB4RDRDRiwgMHhENEQxLCAweEQ0RDIsIDB4RDREMywNCi0gICAgMHhENEQ1LCAweEQ0RDYsIDB4RDRENywgMHhENEQ4LCAweEQ0RDksIDB4RDREQSwgMHhENERCLCAweEQ0REQsDQotICAgIDB4RDRERSwgMHhENEUwLCAweEQ0RTEsIDB4RDRFMiwgMHhENEUzLCAweEQ0RTQsIDB4RDRFNSwgMHhENEU2LA0KLSAgICAweEQ0RTcsIDB4RDRFOSwgMHhENEVBLCAweEQ0RUIsIDB4RDRFRCwgMHhENEVFLCAweEQ0RUYsIDB4RDRGMSwNCi0gICAgMHhENEYyLCAweEQ0RjMsIDB4RDRGNCwgMHhENEY1LCAweEQ0RjYsIDB4RDRGNywgMHhENEY5LCAweEQ0RkEsDQotICAgIDB4RDRGQywgMHhENEZFLCAweEQ0RkYsIDB4RDUwMCwgMHhENTAxLCAweEQ1MDIsIDB4RDUwMywgMHhENTA1LA0KLSAgICAweEQ1MDYsIDB4RDUwNywgMHhENTA5LCAweEQ1MEEsIDB4RDUwQiwgMHhENTBELCAweEQ1MEUsIDB4RDUwRiwNCi0gICAgMHhENTEwLCAweEQ1MTEsIDB4RDUxMiwgMHhENTEzLCAweEQ1MTYsIDB4RDUxOCwgMHhENTE5LCAweEQ1MUEsDQotICAgIDB4RDUxQiwgMHhENTFDLCAweEQ1MUQsIDB4RDUxRSwgMHhENTFGLCAweEQ1MjAsIDB4RDUyMSwgMHhENTIyLA0KLSAgICAweEQ1MjMsIDB4RDUyNCwgMHhENTI1LCAweEQ1MjYsIDB4RDUyNywgMHhENTI4LCAweEQ1MjksIDB4RDUyQSwNCi0gICAgMHhENTJCLCAweEQ1MkMsIDB4RDUyRCwgMHhENTJFLCAweEQ1MkYsIDB4RDUzMCwgMHhENTMxLCAweEQ1MzIsDQotICAgIDB4RDUzMywgMHhENTM0LCAweEQ1MzUsIDB4RDUzNiwgMHhENTM3LCAweEQ1MzgsIDB4RDUzOSwgMHhENTNBLA0KLSAgICAweEQ1M0IsIDB4RDUzRSwgMHhENTNGLCAweEQ1NDEsIDB4RDU0MiwgMHhENTQzLCAweEQ1NDUsIDB4RDU0NiwNCi0gICAgMHhENTQ3LCAweEQ1NDgsIDB4RDU0OSwgMHhENTRBLCAweEQ1NEIsIDB4RDU0RSwgMHhENTUwLCAweEQ1NTIsDQotICAgIDB4RDU1MywgMHhENTU0LCAweEQ1NTUsIDB4RDU1NiwgMHhENTU3LCAweEQ1NUEsIDB4RDU1QiwgMHhENTVELA0KLSAgICAweEQ1NUUsIDB4RDU1RiwgMHhENTYxLCAweEQ1NjIsIDB4RDU2MywgMHhENTY0LCAweEQ1NjYsIDB4RDU2NywNCi0gICAgMHhENTZBLCAweEQ1NkMsIDB4RDU2RSwgMHhENTZGLCAweEQ1NzAsIDB4RDU3MSwgMHhENTcyLCAweEQ1NzMsDQotICAgIDB4RDU3NiwgMHhENTc3LCAweEQ1NzksIDB4RDU3QSwgMHhENTdCLCAweEQ1N0QsIDB4RDU3RSwgMHhENTdGLA0KLSAgICAweEQ1ODAsIDB4RDU4MSwgMHhENTgyLCAweEQ1ODMsIDB4RDU4NiwgMHhENThBLCAweEQ1OEIsIDB4RDU4QywNCi0gICAgMHhENThELCAweEQ1OEUsIDB4RDU4RiwgMHhENTkxLCAweEQ1OTIsIDB4RDU5MywgMHhENTk0LCAweEQ1OTUsDQotICAgIDB4RDU5NiwgMHhENTk3LCAweEQ1OTgsIDB4RDU5OSwgMHhENTlBLCAweEQ1OUIsIDB4RDU5QywgMHhENTlELA0KLSAgICAweEQ1OUUsIDB4RDU5RiwgMHhENUEwLCAweEQ1QTEsIDB4RDVBMiwgMHhENUEzLCAweEQ1QTQsIDB4RDVBNiwNCi0gICAgMHhENUE3LCAweEQ1QTgsIDB4RDVBOSwgMHhENUFBLCAweEQ1QUIsIDB4RDVBQywgMHhENUFELCAweEQ1QUUsDQotICAgIDB4RDVBRiwgMHhENUIwLCAweEQ1QjEsIDB4RDVCMiwgMHhENUIzLCAweEQ1QjQsIDB4RDVCNSwgMHhENUI2LA0KLSAgICAweEQ1QjcsIDB4RDVCOCwgMHhENUI5LCAweEQ1QkEsIDB4RDVCQiwgMHhENUJDLCAweEQ1QkQsIDB4RDVCRSwNCi0gICAgMHhENUJGLCAweEQ1QzAsIDB4RDVDMSwgMHhENUMyLCAweEQ1QzMsIDB4RDVDNCwgMHhENUM1LCAweEQ1QzYsDQotICAgIDB4RDVDNywgMHhENUNBLCAweEQ1Q0IsIDB4RDVDRCwgMHhENUNFLCAweEQ1Q0YsIDB4RDVEMSwgMHhENUQzLA0KLSAgICAweEQ1RDQsIDB4RDVENSwgMHhENUQ2LCAweEQ1RDcsIDB4RDVEQSwgMHhENURDLCAweEQ1REUsIDB4RDVERiwNCi0gICAgMHhENUUwLCAweEQ1RTEsIDB4RDVFMiwgMHhENUUzLCAweEQ1RTYsIDB4RDVFNywgMHhENUU5LCAweEQ1RUEsDQotICAgIDB4RDVFQiwgMHhENUVELCAweEQ1RUUsIDB4RDVFRiwgMHhENUYwLCAweEQ1RjEsIDB4RDVGMiwgMHhENUYzLA0KLSAgICAweEQ1RjYsIDB4RDVGOCwgMHhENUZBLCAweEQ1RkIsIDB4RDVGQywgMHhENUZELCAweEQ1RkUsIDB4RDVGRiwNCi0gICAgMHhENjAyLCAweEQ2MDMsIDB4RDYwNSwgMHhENjA2LCAweEQ2MDcsIDB4RDYwOSwgMHhENjBBLCAweEQ2MEIsDQotICAgIDB4RDYwQywgMHhENjBELCAweEQ2MEUsIDB4RDYwRiwgMHhENjEyLCAweEQ2MTYsIDB4RDYxNywgMHhENjE4LA0KLSAgICAweEQ2MTksIDB4RDYxQSwgMHhENjFCLCAweEQ2MUQsIDB4RDYxRSwgMHhENjFGLCAweEQ2MjEsIDB4RDYyMiwNCi0gICAgMHhENjIzLCAweEQ2MjUsIDB4RDYyNiwgMHhENjI3LCAweEQ2MjgsIDB4RDYyOSwgMHhENjJBLCAweEQ2MkIsDQotICAgIDB4RDYyQywgMHhENjJFLCAweEQ2MkYsIDB4RDYzMCwgMHhENjMxLCAweEQ2MzIsIDB4RDYzMywgMHhENjM0LA0KLSAgICAweEQ2MzUsIDB4RDYzNiwgMHhENjM3LCAweEQ2M0EsIDB4RDYzQiwgMHhENjNELCAweEQ2M0UsIDB4RDYzRiwNCi0gICAgMHhENjQxLCAweEQ2NDIsIDB4RDY0MywgMHhENjQ0LCAweEQ2NDYsIDB4RDY0NywgMHhENjRBLCAweEQ2NEMsDQotICAgIDB4RDY0RSwgMHhENjRGLCAweEQ2NTAsIDB4RDY1MiwgMHhENjUzLCAweEQ2NTYsIDB4RDY1NywgMHhENjU5LA0KLSAgICAweEQ2NUEsIDB4RDY1QiwgMHhENjVELCAweEQ2NUUsIDB4RDY1RiwgMHhENjYwLCAweEQ2NjEsIDB4RDY2MiwNCi0gICAgMHhENjYzLCAweEQ2NjQsIDB4RDY2NSwgMHhENjY2LCAweEQ2NjgsIDB4RDY2QSwgMHhENjZCLCAweEQ2NkMsDQotICAgIDB4RDY2RCwgMHhENjZFLCAweEQ2NkYsIDB4RDY3MiwgMHhENjczLCAweEQ2NzUsIDB4RDY3NiwgMHhENjc3LA0KLSAgICAweEQ2NzgsIDB4RDY3OSwgMHhENjdBLCAweEQ2N0IsIDB4RDY3QywgMHhENjdELCAweEQ2N0UsIDB4RDY3RiwNCi0gICAgMHhENjgwLCAweEQ2ODEsIDB4RDY4MiwgMHhENjg0LCAweEQ2ODYsIDB4RDY4NywgMHhENjg4LCAweEQ2ODksDQotICAgIDB4RDY4QSwgMHhENjhCLCAweEQ2OEUsIDB4RDY4RiwgMHhENjkxLCAweEQ2OTIsIDB4RDY5MywgMHhENjk1LA0KLSAgICAweEQ2OTYsIDB4RDY5NywgMHhENjk4LCAweEQ2OTksIDB4RDY5QSwgMHhENjlCLCAweEQ2OUMsIDB4RDY5RSwNCi0gICAgMHhENkEwLCAweEQ2QTIsIDB4RDZBMywgMHhENkE0LCAweEQ2QTUsIDB4RDZBNiwgMHhENkE3LCAweEQ2QTksDQotICAgIDB4RDZBQSwgMHhENkFCLCAweEQ2QUQsIDB4RDZBRSwgMHhENkFGLCAweEQ2QjEsIDB4RDZCMiwgMHhENkIzLA0KLSAgICAweEQ2QjQsIDB4RDZCNSwgMHhENkI2LCAweEQ2QjcsIDB4RDZCOCwgMHhENkJBLCAweEQ2QkMsIDB4RDZCRCwNCi0gICAgMHhENkJFLCAweEQ2QkYsIDB4RDZDMCwgMHhENkMxLCAweEQ2QzIsIDB4RDZDMywgMHhENkM2LCAweEQ2QzcsDQotICAgIDB4RDZDOSwgMHhENkNBLCAweEQ2Q0IsIDB4RDZDRCwgMHhENkNFLCAweEQ2Q0YsIDB4RDZEMCwgMHhENkQyLA0KLSAgICAweEQ2RDMsIDB4RDZENSwgMHhENkQ2LCAweEQ2RDgsIDB4RDZEQSwgMHhENkRCLCAweEQ2REMsIDB4RDZERCwNCi0gICAgMHhENkRFLCAweEQ2REYsIDB4RDZFMSwgMHhENkUyLCAweEQ2RTMsIDB4RDZFNSwgMHhENkU2LCAweEQ2RTcsDQotICAgIDB4RDZFOSwgMHhENkVBLCAweEQ2RUIsIDB4RDZFQywgMHhENkVELCAweEQ2RUUsIDB4RDZFRiwgMHhENkYxLA0KLSAgICAweEQ2RjIsIDB4RDZGMywgMHhENkY0LCAweEQ2RjYsIDB4RDZGNywgMHhENkY4LCAweEQ2RjksIDB4RDZGQSwNCi0gICAgMHhENkZCLCAweEQ2RkUsIDB4RDZGRiwgMHhENzAxLCAweEQ3MDIsIDB4RDcwMywgMHhENzA1LCAweEQ3MDYsDQotICAgIDB4RDcwNywgMHhENzA4LCAweEQ3MDksIDB4RDcwQSwgMHhENzBCLCAweEQ3MEMsIDB4RDcwRCwgMHhENzBFLA0KLSAgICAweEQ3MEYsIDB4RDcxMCwgMHhENzEyLCAweEQ3MTMsIDB4RDcxNCwgMHhENzE1LCAweEQ3MTYsIDB4RDcxNywNCi0gICAgMHhENzFBLCAweEQ3MUIsIDB4RDcxRCwgMHhENzFFLCAweEQ3MUYsIDB4RDcyMSwgMHhENzIyLCAweEQ3MjMsDQotICAgIDB4RDcyNCwgMHhENzI1LCAweEQ3MjYsIDB4RDcyNywgMHhENzJBLCAweEQ3MkMsIDB4RDcyRSwgMHhENzJGLA0KLSAgICAweEQ3MzAsIDB4RDczMSwgMHhENzMyLCAweEQ3MzMsIDB4RDczNiwgMHhENzM3LCAweEQ3MzksIDB4RDczQSwNCi0gICAgMHhENzNCLCAweEQ3M0QsIDB4RDczRSwgMHhENzNGLCAweEQ3NDAsIDB4RDc0MSwgMHhENzQyLCAweEQ3NDMsDQotICAgIDB4RDc0NSwgMHhENzQ2LCAweEQ3NDgsIDB4RDc0QSwgMHhENzRCLCAweEQ3NEMsIDB4RDc0RCwgMHhENzRFLA0KLSAgICAweEQ3NEYsIDB4RDc1MiwgMHhENzUzLCAweEQ3NTUsIDB4RDc1QSwgMHhENzVCLCAweEQ3NUMsIDB4RDc1RCwNCi0gICAgMHhENzVFLCAweEQ3NUYsIDB4RDc2MiwgMHhENzY0LCAweEQ3NjYsIDB4RDc2NywgMHhENzY4LCAweEQ3NkEsDQotICAgIDB4RDc2QiwgMHhENzZELCAweEQ3NkUsIDB4RDc2RiwgMHhENzcxLCAweEQ3NzIsIDB4RDc3MywgMHhENzc1LA0KLSAgICAweEQ3NzYsIDB4RDc3NywgMHhENzc4LCAweEQ3NzksIDB4RDc3QSwgMHhENzdCLCAweEQ3N0UsIDB4RDc3RiwNCi0gICAgMHhENzgwLCAweEQ3ODIsIDB4RDc4MywgMHhENzg0LCAweEQ3ODUsIDB4RDc4NiwgMHhENzg3LCAweEQ3OEEsDQotICAgIDB4RDc4QiwgMHhENzhELCAweEQ3OEUsIDB4RDc4RiwgMHhENzkxLCAweEQ3OTIsIDB4RDc5MywgMHhENzk0LA0KLSAgICAweEQ3OTUsIDB4RDc5NiwgMHhENzk3LCAweEQ3OUEsIDB4RDc5QywgMHhENzlFLCAweEQ3OUYsIDB4RDdBMCwNCi0gICAgMHhEN0ExLCAweEQ3QTIsIDB4RDdBMywgMHgwMDIwLCAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsDQotICAgIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsIDB4MDAyOCwgMHgwMDI5LCAweDAwMkEsIDB4MDAyQiwgMHgwMDJDLA0KLSAgICAweDAwMkQsIDB4MDAyRSwgMHgwMDJGLCAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwNCi0gICAgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgMHgwMDM4LCAweDAwMzksIDB4MDAzQSwgMHgwMDNCLCAweDAwM0MsDQotICAgIDB4MDAzRCwgMHgwMDNFLCAweDAwM0YsIDB4MDA0MCwgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LA0KLSAgICAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LCAweDAwNDgsIDB4MDA0OSwgMHgwMDRBLCAweDAwNEIsIDB4MDA0QywNCi0gICAgMHgwMDRELCAweDAwNEUsIDB4MDA0RiwgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsDQotICAgIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsIDB4MDA1OCwgMHgwMDU5LCAweDAwNUEsIDB4MDA1QiwgMHgwMDVDLA0KLSAgICAweDAwNUQsIDB4MDA1RSwgMHgwMDVGLCAweDAwNjAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwNCi0gICAgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywgMHgwMDY4LCAweDAwNjksIDB4MDA2QSwgMHgwMDZCLCAweDAwNkMsDQotICAgIDB4MDA2RCwgMHgwMDZFLCAweDAwNkYsIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LA0KLSAgICAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LCAweDAwNzgsIDB4MDA3OSwgMHgwMDdBLCAweDAwN0IsIDB4MDA3QywNCi0gICAgMHgwMDdELCAweDAwN0UsIDB4MjBBOSwgMHgyMDEwLCAweDAwQTksIDB4MjEyMiwgMHgyMkVGLCAweDAwMjAsDQotICAgIDB4MDAyMSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywgMHgwMDI4LA0KLSAgICAweDAwMjksIDB4MDAyQSwgMHgwMDJCLCAweDAwMkMsIDB4MDAyRCwgMHgwMDJFLCAweDAwMkYsIDB4MDAzMCwNCi0gICAgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LCAweDAwMzgsDQotICAgIDB4MDAzOSwgMHgwMDNBLCAweDAwM0IsIDB4MDAzQywgMHgwMDNELCAweDAwM0UsIDB4MDAzRiwgMHgwMDQwLA0KLSAgICAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsIDB4MDA0OCwNCi0gICAgMHgwMDQ5LCAweDAwNEEsIDB4MDA0QiwgMHgwMDRDLCAweDAwNEQsIDB4MDA0RSwgMHgwMDRGLCAweDAwNTAsDQotICAgIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywgMHgwMDU4LA0KLSAgICAweDAwNTksIDB4MDA1QSwgMHgwMDVCLCAweDAwNUMsIDB4MDA1RCwgMHgwMDVFLCAweDAwNUYsIDB4MDA2MCwNCi0gICAgMHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LCAweDAwNjgsDQotICAgIDB4MDA2OSwgMHgwMDZBLCAweDAwNkIsIDB4MDA2QywgMHgwMDZELCAweDAwNkUsIDB4MDA2RiwgMHgwMDcwLA0KLSAgICAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsIDB4MDA3OCwNCi0gICAgMHgwMDc5LCAweDAwN0EsIDB4MDA3QiwgMHgwMDdDLCAweDAwN0QsIDB4MjAzRSwgMHgwMDdFLCAweDAwNUMsDQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfS29yZWExQ0lEMlVuaWNvZGVfMlsxODM1Ml0gPSB7CisgICAgMHhGRkZELCAweDAwMjAsIDB4MDAyMSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsCisgICAgMHgwMDI3LCAweDAwMjgsIDB4MDAyOSwgMHgwMDJBLCAweDAwMkIsIDB4MDAyQywgMHgwMDJELCAweDAwMkUsCisgICAgMHgwMDJGLCAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsCisgICAgMHgwMDM3LCAweDAwMzgsIDB4MDAzOSwgMHgwMDNBLCAweDAwM0IsIDB4MDAzQywgMHgwMDNELCAweDAwM0UsCisgICAgMHgwMDNGLCAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsCisgICAgMHgwMDQ3LCAweDAwNDgsIDB4MDA0OSwgMHgwMDRBLCAweDAwNEIsIDB4MDA0QywgMHgwMDRELCAweDAwNEUsCisgICAgMHgwMDRGLCAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsCisgICAgMHgwMDU3LCAweDAwNTgsIDB4MDA1OSwgMHgwMDVBLCAweDAwNUIsIDB4MDA1QywgMHgwMDVELCAweDAwNUUsCisgICAgMHgwMDVGLCAweDAwNjAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsCisgICAgMHgwMDY3LCAweDAwNjgsIDB4MDA2OSwgMHgwMDZBLCAweDAwNkIsIDB4MDA2QywgMHgwMDZELCAweDAwNkUsCisgICAgMHgwMDZGLCAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsCisgICAgMHgwMDc3LCAweDAwNzgsIDB4MDA3OSwgMHgwMDdBLCAweDAwN0IsIDB4MDA3QywgMHgwMDdELCAweDAwN0UsCisgICAgMHgyMEE5LCAweDIwMTAsIDB4MDBBOSwgMHgyMTIyLCAweDIyRUYsIDB4MzAwMCwgMHgzMDAxLCAweDMwMDIsCisgICAgMHgwMEI3LCAweDIwMjUsIDB4MjAyNiwgMHgwMEE4LCAweDMwMDMsIDB4MjAxMywgMHgyMDE0LCAweDIwMTYsCisgICAgMHhGRjNDLCAweDIyM0MsIDB4MjAxOCwgMHgyMDE5LCAweDIwMUMsIDB4MjAxRCwgMHgzMDE0LCAweDMwMTUsCisgICAgMHgzMDA4LCAweDMwMDksIDB4MzAwQSwgMHgzMDBCLCAweDMwMEMsIDB4MzAwRCwgMHgzMDBFLCAweDMwMEYsCisgICAgMHgzMDEwLCAweDMwMTEsIDB4MDBCMSwgMHgwMEQ3LCAweDAwRjcsIDB4MjI2MCwgMHgyMjY0LCAweDIyNjUsCisgICAgMHgyMjFFLCAweDIyMzQsIDB4MDBCMCwgMHgyMDMyLCAweDIwMzMsIDB4MjEwMywgMHgyMTJCLCAweEZGRTAsCisgICAgMHhGRkUxLCAweEZGRTUsIDB4MjY0MiwgMHgyNjQwLCAweDIyMjAsIDB4MjJBNSwgMHgyMzEyLCAweDIyMDIsCisgICAgMHgyMjA3LCAweDIyNjEsIDB4MjI1MiwgMHgwMEE3LCAweDIwM0IsIDB4MjYwNiwgMHgyNjA1LCAweDI1Q0IsCisgICAgMHgyNUNGLCAweDI1Q0UsIDB4MjVDNywgMHgyNUM2LCAweDI1QTEsIDB4MjVBMCwgMHgyNUIzLCAweDI1QjIsCisgICAgMHgyNUJELCAweDI1QkMsIDB4MjE5MiwgMHgyMTkwLCAweDIxOTEsIDB4MjE5MywgMHgyMTk0LCAweDMwMTMsCisgICAgMHgyMjZBLCAweDIyNkIsIDB4MjIxQSwgMHgyMjNELCAweDIyMUQsIDB4MjIzNSwgMHgyMjJCLCAweDIyMkMsCisgICAgMHgyMjA4LCAweDIyMEIsIDB4MjI4NiwgMHgyMjg3LCAweDIyODIsIDB4MjI4MywgMHgyMjJBLCAweDIyMjksCisgICAgMHgyMjI3LCAweDIyMjgsIDB4RkZFMiwgMHgyMUQyLCAweDIxRDQsIDB4MjIwMCwgMHgyMjAzLCAweDAwQjQsCisgICAgMHgwMkRDLCAweDAyQzcsIDB4MDJEOCwgMHgwMkRELCAweDAyREEsIDB4MDJEOSwgMHgwMEI4LCAweDAyREIsCisgICAgMHgwMEExLCAweDAwQkYsIDB4MjIzNiwgMHgyMjJFLCAweDIyMTEsIDB4MjIwRiwgMHgwMEE0LCAweDIxMDksCisgICAgMHgyMDMwLCAweDI1QzEsIDB4MjVDMCwgMHgyNUI3LCAweDI1QjYsIDB4MjY2NCwgMHgyNjYwLCAweDI2NjEsCisgICAgMHgyNjY1LCAweDI2NjcsIDB4MjY2MywgMHgyMjk5LCAweDI1QzgsIDB4MjVBMywgMHgyNUQwLCAweDI1RDEsCisgICAgMHgyNTkyLCAweDI1QTQsIDB4MjVBNSwgMHgyNUE4LCAweDI1QTcsIDB4MjVBNiwgMHgyNUE5LCAweDI2NjgsCisgICAgMHgyNjBGLCAweDI2MEUsIDB4MjYxQywgMHgyNjFFLCAweDAwQjYsIDB4MjAyMCwgMHgyMDIxLCAweDIxOTUsCisgICAgMHgyMTk3LCAweDIxOTksIDB4MjE5NiwgMHgyMTk4LCAweDI2NkQsIDB4MjY2OSwgMHgyNjZBLCAweDI2NkMsCisgICAgMHgzMjdGLCAweDMyMUMsIDB4MjExNiwgMHgzM0M3LCAweDIxMjIsIDB4MzNDMiwgMHgzM0Q4LCAweDIxMjEsCisgICAgMHhGRjAxLCAweEZGMDIsIDB4RkYwMywgMHhGRjA0LCAweEZGMDUsIDB4RkYwNiwgMHhGRjA3LCAweEZGMDgsCisgICAgMHhGRjA5LCAweEZGMEEsIDB4RkYwQiwgMHhGRjBDLCAweEZGMEQsIDB4RkYwRSwgMHhGRjBGLCAweEZGMTAsCisgICAgMHhGRjExLCAweEZGMTIsIDB4RkYxMywgMHhGRjE0LCAweEZGMTUsIDB4RkYxNiwgMHhGRjE3LCAweEZGMTgsCisgICAgMHhGRjE5LCAweEZGMUEsIDB4RkYxQiwgMHhGRjFDLCAweEZGMUQsIDB4RkYxRSwgMHhGRjFGLCAweEZGMjAsCisgICAgMHhGRjIxLCAweEZGMjIsIDB4RkYyMywgMHhGRjI0LCAweEZGMjUsIDB4RkYyNiwgMHhGRjI3LCAweEZGMjgsCisgICAgMHhGRjI5LCAweEZGMkEsIDB4RkYyQiwgMHhGRjJDLCAweEZGMkQsIDB4RkYyRSwgMHhGRjJGLCAweEZGMzAsCisgICAgMHhGRjMxLCAweEZGMzIsIDB4RkYzMywgMHhGRjM0LCAweEZGMzUsIDB4RkYzNiwgMHhGRjM3LCAweEZGMzgsCisgICAgMHhGRjM5LCAweEZGM0EsIDB4RkYzQiwgMHhGRkU2LCAweEZGM0QsIDB4RkYzRSwgMHhGRjNGLCAweEZGNDAsCisgICAgMHhGRjQxLCAweEZGNDIsIDB4RkY0MywgMHhGRjQ0LCAweEZGNDUsIDB4RkY0NiwgMHhGRjQ3LCAweEZGNDgsCisgICAgMHhGRjQ5LCAweEZGNEEsIDB4RkY0QiwgMHhGRjRDLCAweEZGNEQsIDB4RkY0RSwgMHhGRjRGLCAweEZGNTAsCisgICAgMHhGRjUxLCAweEZGNTIsIDB4RkY1MywgMHhGRjU0LCAweEZGNTUsIDB4RkY1NiwgMHhGRjU3LCAweEZGNTgsCisgICAgMHhGRjU5LCAweEZGNUEsIDB4RkY1QiwgMHhGRjVDLCAweEZGNUQsIDB4RkZFMywgMHgzMTMxLCAweDMxMzIsCisgICAgMHgzMTMzLCAweDMxMzQsIDB4MzEzNSwgMHgzMTM2LCAweDMxMzcsIDB4MzEzOCwgMHgzMTM5LCAweDMxM0EsCisgICAgMHgzMTNCLCAweDMxM0MsIDB4MzEzRCwgMHgzMTNFLCAweDMxM0YsIDB4MzE0MCwgMHgzMTQxLCAweDMxNDIsCisgICAgMHgzMTQzLCAweDMxNDQsIDB4MzE0NSwgMHgzMTQ2LCAweDMxNDcsIDB4MzE0OCwgMHgzMTQ5LCAweDMxNEEsCisgICAgMHgzMTRCLCAweDMxNEMsIDB4MzE0RCwgMHgzMTRFLCAweDMxNEYsIDB4MzE1MCwgMHgzMTUxLCAweDMxNTIsCisgICAgMHgzMTUzLCAweDMxNTQsIDB4MzE1NSwgMHgzMTU2LCAweDMxNTcsIDB4MzE1OCwgMHgzMTU5LCAweDMxNUEsCisgICAgMHgzMTVCLCAweDMxNUMsIDB4MzE1RCwgMHgzMTVFLCAweDMxNUYsIDB4MzE2MCwgMHgzMTYxLCAweDMxNjIsCisgICAgMHgzMTYzLCAweDMxNjUsIDB4MzE2NiwgMHgzMTY3LCAweDMxNjgsIDB4MzE2OSwgMHgzMTZBLCAweDMxNkIsCisgICAgMHgzMTZDLCAweDMxNkQsIDB4MzE2RSwgMHgzMTZGLCAweDMxNzAsIDB4MzE3MSwgMHgzMTcyLCAweDMxNzMsCisgICAgMHgzMTc0LCAweDMxNzUsIDB4MzE3NiwgMHgzMTc3LCAweDMxNzgsIDB4MzE3OSwgMHgzMTdBLCAweDMxN0IsCisgICAgMHgzMTdDLCAweDMxN0QsIDB4MzE3RSwgMHgzMTdGLCAweDMxODAsIDB4MzE4MSwgMHgzMTgyLCAweDMxODMsCisgICAgMHgzMTg0LCAweDMxODUsIDB4MzE4NiwgMHgzMTg3LCAweDMxODgsIDB4MzE4OSwgMHgzMThBLCAweDMxOEIsCisgICAgMHgzMThDLCAweDMxOEQsIDB4MzE4RSwgMHgyMTcwLCAweDIxNzEsIDB4MjE3MiwgMHgyMTczLCAweDIxNzQsCisgICAgMHgyMTc1LCAweDIxNzYsIDB4MjE3NywgMHgyMTc4LCAweDIxNzksIDB4MjE2MCwgMHgyMTYxLCAweDIxNjIsCisgICAgMHgyMTYzLCAweDIxNjQsIDB4MjE2NSwgMHgyMTY2LCAweDIxNjcsIDB4MjE2OCwgMHgyMTY5LCAweDAzOTEsCisgICAgMHgwMzkyLCAweDAzOTMsIDB4MDM5NCwgMHgwMzk1LCAweDAzOTYsIDB4MDM5NywgMHgwMzk4LCAweDAzOTksCisgICAgMHgwMzlBLCAweDAzOUIsIDB4MDM5QywgMHgwMzlELCAweDAzOUUsIDB4MDM5RiwgMHgwM0EwLCAweDAzQTEsCisgICAgMHgwM0EzLCAweDAzQTQsIDB4MDNBNSwgMHgwM0E2LCAweDAzQTcsIDB4MDNBOCwgMHgwM0E5LCAweDAzQjEsCisgICAgMHgwM0IyLCAweDAzQjMsIDB4MDNCNCwgMHgwM0I1LCAweDAzQjYsIDB4MDNCNywgMHgwM0I4LCAweDAzQjksCisgICAgMHgwM0JBLCAweDAzQkIsIDB4MDNCQywgMHgwM0JELCAweDAzQkUsIDB4MDNCRiwgMHgwM0MwLCAweDAzQzEsCisgICAgMHgwM0MzLCAweDAzQzQsIDB4MDNDNSwgMHgwM0M2LCAweDAzQzcsIDB4MDNDOCwgMHgwM0M5LCAweDI1MDAsCisgICAgMHgyNTAyLCAweDI1MEMsIDB4MjUxMCwgMHgyNTE4LCAweDI1MTQsIDB4MjUxQywgMHgyNTJDLCAweDI1MjQsCisgICAgMHgyNTM0LCAweDI1M0MsIDB4MjUwMSwgMHgyNTAzLCAweDI1MEYsIDB4MjUxMywgMHgyNTFCLCAweDI1MTcsCisgICAgMHgyNTIzLCAweDI1MzMsIDB4MjUyQiwgMHgyNTNCLCAweDI1NEIsIDB4MjUyMCwgMHgyNTJGLCAweDI1MjgsCisgICAgMHgyNTM3LCAweDI1M0YsIDB4MjUxRCwgMHgyNTMwLCAweDI1MjUsIDB4MjUzOCwgMHgyNTQyLCAweDI1MTIsCisgICAgMHgyNTExLCAweDI1MUEsIDB4MjUxOSwgMHgyNTE2LCAweDI1MTUsIDB4MjUwRSwgMHgyNTBELCAweDI1MUUsCisgICAgMHgyNTFGLCAweDI1MjEsIDB4MjUyMiwgMHgyNTI2LCAweDI1MjcsIDB4MjUyOSwgMHgyNTJBLCAweDI1MkQsCisgICAgMHgyNTJFLCAweDI1MzEsIDB4MjUzMiwgMHgyNTM1LCAweDI1MzYsIDB4MjUzOSwgMHgyNTNBLCAweDI1M0QsCisgICAgMHgyNTNFLCAweDI1NDAsIDB4MjU0MSwgMHgyNTQzLCAweDI1NDQsIDB4MjU0NSwgMHgyNTQ2LCAweDI1NDcsCisgICAgMHgyNTQ4LCAweDI1NDksIDB4MjU0QSwgMHgzMzk1LCAweDMzOTYsIDB4MzM5NywgMHgyMTEzLCAweDMzOTgsCisgICAgMHgzM0M0LCAweDMzQTMsIDB4MzNBNCwgMHgzM0E1LCAweDMzQTYsIDB4MzM5OSwgMHgzMzlBLCAweDMzOUIsCisgICAgMHgzMzlDLCAweDMzOUQsIDB4MzM5RSwgMHgzMzlGLCAweDMzQTAsIDB4MzNBMSwgMHgzM0EyLCAweDMzQ0EsCisgICAgMHgzMzhELCAweDMzOEUsIDB4MzM4RiwgMHgzM0NGLCAweDMzODgsIDB4MzM4OSwgMHgzM0M4LCAweDMzQTcsCisgICAgMHgzM0E4LCAweDMzQjAsIDB4MzNCMSwgMHgzM0IyLCAweDMzQjMsIDB4MzNCNCwgMHgzM0I1LCAweDMzQjYsCisgICAgMHgzM0I3LCAweDMzQjgsIDB4MzNCOSwgMHgzMzgwLCAweDMzODEsIDB4MzM4MiwgMHgzMzgzLCAweDMzODQsCisgICAgMHgzM0JBLCAweDMzQkIsIDB4MzNCQywgMHgzM0JELCAweDMzQkUsIDB4MzNCRiwgMHgzMzkwLCAweDMzOTEsCisgICAgMHgzMzkyLCAweDMzOTMsIDB4MzM5NCwgMHgyMTI2LCAweDMzQzAsIDB4MzNDMSwgMHgzMzhBLCAweDMzOEIsCisgICAgMHgzMzhDLCAweDMzRDYsIDB4MzNDNSwgMHgzM0FELCAweDMzQUUsIDB4MzNBRiwgMHgzM0RCLCAweDMzQTksCisgICAgMHgzM0FBLCAweDMzQUIsIDB4MzNBQywgMHgzM0RELCAweDMzRDAsIDB4MzNEMywgMHgzM0MzLCAweDMzQzksCisgICAgMHgzM0RDLCAweDMzQzYsIDB4MDBDNiwgMHgwMEQwLCAweDAwQUEsIDB4MDEyNiwgMHgwMTMyLCAweDAxM0YsCisgICAgMHgwMTQxLCAweDAwRDgsIDB4MDE1MiwgMHgwMEJBLCAweDAwREUsIDB4MDE2NiwgMHgwMTRBLCAweDMyNjAsCisgICAgMHgzMjYxLCAweDMyNjIsIDB4MzI2MywgMHgzMjY0LCAweDMyNjUsIDB4MzI2NiwgMHgzMjY3LCAweDMyNjgsCisgICAgMHgzMjY5LCAweDMyNkEsIDB4MzI2QiwgMHgzMjZDLCAweDMyNkQsIDB4MzI2RSwgMHgzMjZGLCAweDMyNzAsCisgICAgMHgzMjcxLCAweDMyNzIsIDB4MzI3MywgMHgzMjc0LCAweDMyNzUsIDB4MzI3NiwgMHgzMjc3LCAweDMyNzgsCisgICAgMHgzMjc5LCAweDMyN0EsIDB4MzI3QiwgMHgyNEQwLCAweDI0RDEsIDB4MjREMiwgMHgyNEQzLCAweDI0RDQsCisgICAgMHgyNEQ1LCAweDI0RDYsIDB4MjRENywgMHgyNEQ4LCAweDI0RDksIDB4MjREQSwgMHgyNERCLCAweDI0REMsCisgICAgMHgyNERELCAweDI0REUsIDB4MjRERiwgMHgyNEUwLCAweDI0RTEsIDB4MjRFMiwgMHgyNEUzLCAweDI0RTQsCisgICAgMHgyNEU1LCAweDI0RTYsIDB4MjRFNywgMHgyNEU4LCAweDI0RTksIDB4MjQ2MCwgMHgyNDYxLCAweDI0NjIsCisgICAgMHgyNDYzLCAweDI0NjQsIDB4MjQ2NSwgMHgyNDY2LCAweDI0NjcsIDB4MjQ2OCwgMHgyNDY5LCAweDI0NkEsCisgICAgMHgyNDZCLCAweDI0NkMsIDB4MjQ2RCwgMHgyNDZFLCAweDAwQkQsIDB4MjE1MywgMHgyMTU0LCAweDAwQkMsCisgICAgMHgwMEJFLCAweDIxNUIsIDB4MjE1QywgMHgyMTVELCAweDIxNUUsIDB4MDBFNiwgMHgwMTExLCAweDAwRjAsCisgICAgMHgwMTI3LCAweDAxMzEsIDB4MDEzMywgMHgwMTM4LCAweDAxNDAsIDB4MDE0MiwgMHgwMEY4LCAweDAxNTMsCisgICAgMHgwMERGLCAweDAwRkUsIDB4MDE2NywgMHgwMTRCLCAweDAxNDksIDB4MzIwMCwgMHgzMjAxLCAweDMyMDIsCisgICAgMHgzMjAzLCAweDMyMDQsIDB4MzIwNSwgMHgzMjA2LCAweDMyMDcsIDB4MzIwOCwgMHgzMjA5LCAweDMyMEEsCisgICAgMHgzMjBCLCAweDMyMEMsIDB4MzIwRCwgMHgzMjBFLCAweDMyMEYsIDB4MzIxMCwgMHgzMjExLCAweDMyMTIsCisgICAgMHgzMjEzLCAweDMyMTQsIDB4MzIxNSwgMHgzMjE2LCAweDMyMTcsIDB4MzIxOCwgMHgzMjE5LCAweDMyMUEsCisgICAgMHgzMjFCLCAweDI0OUMsIDB4MjQ5RCwgMHgyNDlFLCAweDI0OUYsIDB4MjRBMCwgMHgyNEExLCAweDI0QTIsCisgICAgMHgyNEEzLCAweDI0QTQsIDB4MjRBNSwgMHgyNEE2LCAweDI0QTcsIDB4MjRBOCwgMHgyNEE5LCAweDI0QUEsCisgICAgMHgyNEFCLCAweDI0QUMsIDB4MjRBRCwgMHgyNEFFLCAweDI0QUYsIDB4MjRCMCwgMHgyNEIxLCAweDI0QjIsCisgICAgMHgyNEIzLCAweDI0QjQsIDB4MjRCNSwgMHgyNDc0LCAweDI0NzUsIDB4MjQ3NiwgMHgyNDc3LCAweDI0NzgsCisgICAgMHgyNDc5LCAweDI0N0EsIDB4MjQ3QiwgMHgyNDdDLCAweDI0N0QsIDB4MjQ3RSwgMHgyNDdGLCAweDI0ODAsCisgICAgMHgyNDgxLCAweDI0ODIsIDB4MDBCOSwgMHgwMEIyLCAweDAwQjMsIDB4MjA3NCwgMHgyMDdGLCAweDIwODEsCisgICAgMHgyMDgyLCAweDIwODMsIDB4MjA4NCwgMHgzMDQxLCAweDMwNDIsIDB4MzA0MywgMHgzMDQ0LCAweDMwNDUsCisgICAgMHgzMDQ2LCAweDMwNDcsIDB4MzA0OCwgMHgzMDQ5LCAweDMwNEEsIDB4MzA0QiwgMHgzMDRDLCAweDMwNEQsCisgICAgMHgzMDRFLCAweDMwNEYsIDB4MzA1MCwgMHgzMDUxLCAweDMwNTIsIDB4MzA1MywgMHgzMDU0LCAweDMwNTUsCisgICAgMHgzMDU2LCAweDMwNTcsIDB4MzA1OCwgMHgzMDU5LCAweDMwNUEsIDB4MzA1QiwgMHgzMDVDLCAweDMwNUQsCisgICAgMHgzMDVFLCAweDMwNUYsIDB4MzA2MCwgMHgzMDYxLCAweDMwNjIsIDB4MzA2MywgMHgzMDY0LCAweDMwNjUsCisgICAgMHgzMDY2LCAweDMwNjcsIDB4MzA2OCwgMHgzMDY5LCAweDMwNkEsIDB4MzA2QiwgMHgzMDZDLCAweDMwNkQsCisgICAgMHgzMDZFLCAweDMwNkYsIDB4MzA3MCwgMHgzMDcxLCAweDMwNzIsIDB4MzA3MywgMHgzMDc0LCAweDMwNzUsCisgICAgMHgzMDc2LCAweDMwNzcsIDB4MzA3OCwgMHgzMDc5LCAweDMwN0EsIDB4MzA3QiwgMHgzMDdDLCAweDMwN0QsCisgICAgMHgzMDdFLCAweDMwN0YsIDB4MzA4MCwgMHgzMDgxLCAweDMwODIsIDB4MzA4MywgMHgzMDg0LCAweDMwODUsCisgICAgMHgzMDg2LCAweDMwODcsIDB4MzA4OCwgMHgzMDg5LCAweDMwOEEsIDB4MzA4QiwgMHgzMDhDLCAweDMwOEQsCisgICAgMHgzMDhFLCAweDMwOEYsIDB4MzA5MCwgMHgzMDkxLCAweDMwOTIsIDB4MzA5MywgMHgzMEExLCAweDMwQTIsCisgICAgMHgzMEEzLCAweDMwQTQsIDB4MzBBNSwgMHgzMEE2LCAweDMwQTcsIDB4MzBBOCwgMHgzMEE5LCAweDMwQUEsCisgICAgMHgzMEFCLCAweDMwQUMsIDB4MzBBRCwgMHgzMEFFLCAweDMwQUYsIDB4MzBCMCwgMHgzMEIxLCAweDMwQjIsCisgICAgMHgzMEIzLCAweDMwQjQsIDB4MzBCNSwgMHgzMEI2LCAweDMwQjcsIDB4MzBCOCwgMHgzMEI5LCAweDMwQkEsCisgICAgMHgzMEJCLCAweDMwQkMsIDB4MzBCRCwgMHgzMEJFLCAweDMwQkYsIDB4MzBDMCwgMHgzMEMxLCAweDMwQzIsCisgICAgMHgzMEMzLCAweDMwQzQsIDB4MzBDNSwgMHgzMEM2LCAweDMwQzcsIDB4MzBDOCwgMHgzMEM5LCAweDMwQ0EsCisgICAgMHgzMENCLCAweDMwQ0MsIDB4MzBDRCwgMHgzMENFLCAweDMwQ0YsIDB4MzBEMCwgMHgzMEQxLCAweDMwRDIsCisgICAgMHgzMEQzLCAweDMwRDQsIDB4MzBENSwgMHgzMEQ2LCAweDMwRDcsIDB4MzBEOCwgMHgzMEQ5LCAweDMwREEsCisgICAgMHgzMERCLCAweDMwREMsIDB4MzBERCwgMHgzMERFLCAweDMwREYsIDB4MzBFMCwgMHgzMEUxLCAweDMwRTIsCisgICAgMHgzMEUzLCAweDMwRTQsIDB4MzBFNSwgMHgzMEU2LCAweDMwRTcsIDB4MzBFOCwgMHgzMEU5LCAweDMwRUEsCisgICAgMHgzMEVCLCAweDMwRUMsIDB4MzBFRCwgMHgzMEVFLCAweDMwRUYsIDB4MzBGMCwgMHgzMEYxLCAweDMwRjIsCisgICAgMHgzMEYzLCAweDMwRjQsIDB4MzBGNSwgMHgzMEY2LCAweDA0MTAsIDB4MDQxMSwgMHgwNDEyLCAweDA0MTMsCisgICAgMHgwNDE0LCAweDA0MTUsIDB4MDQwMSwgMHgwNDE2LCAweDA0MTcsIDB4MDQxOCwgMHgwNDE5LCAweDA0MUEsCisgICAgMHgwNDFCLCAweDA0MUMsIDB4MDQxRCwgMHgwNDFFLCAweDA0MUYsIDB4MDQyMCwgMHgwNDIxLCAweDA0MjIsCisgICAgMHgwNDIzLCAweDA0MjQsIDB4MDQyNSwgMHgwNDI2LCAweDA0MjcsIDB4MDQyOCwgMHgwNDI5LCAweDA0MkEsCisgICAgMHgwNDJCLCAweDA0MkMsIDB4MDQyRCwgMHgwNDJFLCAweDA0MkYsIDB4MDQzMCwgMHgwNDMxLCAweDA0MzIsCisgICAgMHgwNDMzLCAweDA0MzQsIDB4MDQzNSwgMHgwNDUxLCAweDA0MzYsIDB4MDQzNywgMHgwNDM4LCAweDA0MzksCisgICAgMHgwNDNBLCAweDA0M0IsIDB4MDQzQywgMHgwNDNELCAweDA0M0UsIDB4MDQzRiwgMHgwNDQwLCAweDA0NDEsCisgICAgMHgwNDQyLCAweDA0NDMsIDB4MDQ0NCwgMHgwNDQ1LCAweDA0NDYsIDB4MDQ0NywgMHgwNDQ4LCAweDA0NDksCisgICAgMHgwNDRBLCAweDA0NEIsIDB4MDQ0QywgMHgwNDRELCAweDA0NEUsIDB4MDQ0RiwgMHhBQzAwLCAweEFDMDEsCisgICAgMHhBQzA0LCAweEFDMDcsIDB4QUMwOCwgMHhBQzA5LCAweEFDMEEsIDB4QUMxMCwgMHhBQzExLCAweEFDMTIsCisgICAgMHhBQzEzLCAweEFDMTQsIDB4QUMxNSwgMHhBQzE2LCAweEFDMTcsIDB4QUMxOSwgMHhBQzFBLCAweEFDMUIsCisgICAgMHhBQzFDLCAweEFDMUQsIDB4QUMyMCwgMHhBQzI0LCAweEFDMkMsIDB4QUMyRCwgMHhBQzJGLCAweEFDMzAsCisgICAgMHhBQzMxLCAweEFDMzgsIDB4QUMzOSwgMHhBQzNDLCAweEFDNDAsIDB4QUM0QiwgMHhBQzRELCAweEFDNTQsCisgICAgMHhBQzU4LCAweEFDNUMsIDB4QUM3MCwgMHhBQzcxLCAweEFDNzQsIDB4QUM3NywgMHhBQzc4LCAweEFDN0EsCisgICAgMHhBQzgwLCAweEFDODEsIDB4QUM4MywgMHhBQzg0LCAweEFDODUsIDB4QUM4NiwgMHhBQzg5LCAweEFDOEEsCisgICAgMHhBQzhCLCAweEFDOEMsIDB4QUM5MCwgMHhBQzk0LCAweEFDOUMsIDB4QUM5RCwgMHhBQzlGLCAweEFDQTAsCisgICAgMHhBQ0ExLCAweEFDQTgsIDB4QUNBOSwgMHhBQ0FBLCAweEFDQUMsIDB4QUNBRiwgMHhBQ0IwLCAweEFDQjgsCisgICAgMHhBQ0I5LCAweEFDQkIsIDB4QUNCQywgMHhBQ0JELCAweEFDQzEsIDB4QUNDNCwgMHhBQ0M4LCAweEFDQ0MsCisgICAgMHhBQ0Q1LCAweEFDRDcsIDB4QUNFMCwgMHhBQ0UxLCAweEFDRTQsIDB4QUNFNywgMHhBQ0U4LCAweEFDRUEsCisgICAgMHhBQ0VDLCAweEFDRUYsIDB4QUNGMCwgMHhBQ0YxLCAweEFDRjMsIDB4QUNGNSwgMHhBQ0Y2LCAweEFDRkMsCisgICAgMHhBQ0ZELCAweEFEMDAsIDB4QUQwNCwgMHhBRDA2LCAweEFEMEMsIDB4QUQwRCwgMHhBRDBGLCAweEFEMTEsCisgICAgMHhBRDE4LCAweEFEMUMsIDB4QUQyMCwgMHhBRDI5LCAweEFEMkMsIDB4QUQyRCwgMHhBRDM0LCAweEFEMzUsCisgICAgMHhBRDM4LCAweEFEM0MsIDB4QUQ0NCwgMHhBRDQ1LCAweEFENDcsIDB4QUQ0OSwgMHhBRDUwLCAweEFENTQsCisgICAgMHhBRDU4LCAweEFENjEsIDB4QUQ2MywgMHhBRDZDLCAweEFENkQsIDB4QUQ3MCwgMHhBRDczLCAweEFENzQsCisgICAgMHhBRDc1LCAweEFENzYsIDB4QUQ3QiwgMHhBRDdDLCAweEFEN0QsIDB4QUQ3RiwgMHhBRDgxLCAweEFEODIsCisgICAgMHhBRDg4LCAweEFEODksIDB4QUQ4QywgMHhBRDkwLCAweEFEOUMsIDB4QUQ5RCwgMHhBREE0LCAweEFEQjcsCisgICAgMHhBREMwLCAweEFEQzEsIDB4QURDNCwgMHhBREM4LCAweEFERDAsIDB4QUREMSwgMHhBREQzLCAweEFEREMsCisgICAgMHhBREUwLCAweEFERTQsIDB4QURGOCwgMHhBREY5LCAweEFERkMsIDB4QURGRiwgMHhBRTAwLCAweEFFMDEsCisgICAgMHhBRTA4LCAweEFFMDksIDB4QUUwQiwgMHhBRTBELCAweEFFMTQsIDB4QUUzMCwgMHhBRTMxLCAweEFFMzQsCisgICAgMHhBRTM3LCAweEFFMzgsIDB4QUUzQSwgMHhBRTQwLCAweEFFNDEsIDB4QUU0MywgMHhBRTQ1LCAweEFFNDYsCisgICAgMHhBRTRBLCAweEFFNEMsIDB4QUU0RCwgMHhBRTRFLCAweEFFNTAsIDB4QUU1NCwgMHhBRTU2LCAweEFFNUMsCisgICAgMHhBRTVELCAweEFFNUYsIDB4QUU2MCwgMHhBRTYxLCAweEFFNjUsIDB4QUU2OCwgMHhBRTY5LCAweEFFNkMsCisgICAgMHhBRTcwLCAweEFFNzgsIDB4QUU3OSwgMHhBRTdCLCAweEFFN0MsIDB4QUU3RCwgMHhBRTg0LCAweEFFODUsCisgICAgMHhBRThDLCAweEFFQkMsIDB4QUVCRCwgMHhBRUJFLCAweEFFQzAsIDB4QUVDNCwgMHhBRUNDLCAweEFFQ0QsCisgICAgMHhBRUNGLCAweEFFRDAsIDB4QUVEMSwgMHhBRUQ4LCAweEFFRDksIDB4QUVEQywgMHhBRUU4LCAweEFFRUIsCisgICAgMHhBRUVELCAweEFFRjQsIDB4QUVGOCwgMHhBRUZDLCAweEFGMDcsIDB4QUYwOCwgMHhBRjBELCAweEFGMTAsCisgICAgMHhBRjJDLCAweEFGMkQsIDB4QUYzMCwgMHhBRjMyLCAweEFGMzQsIDB4QUYzQywgMHhBRjNELCAweEFGM0YsCisgICAgMHhBRjQxLCAweEFGNDIsIDB4QUY0MywgMHhBRjQ4LCAweEFGNDksIDB4QUY1MCwgMHhBRjVDLCAweEFGNUQsCisgICAgMHhBRjY0LCAweEFGNjUsIDB4QUY3OSwgMHhBRjgwLCAweEFGODQsIDB4QUY4OCwgMHhBRjkwLCAweEFGOTEsCisgICAgMHhBRjk1LCAweEFGOUMsIDB4QUZCOCwgMHhBRkI5LCAweEFGQkMsIDB4QUZDMCwgMHhBRkM3LCAweEFGQzgsCisgICAgMHhBRkM5LCAweEFGQ0IsIDB4QUZDRCwgMHhBRkNFLCAweEFGRDQsIDB4QUZEQywgMHhBRkU4LCAweEFGRTksCisgICAgMHhBRkYwLCAweEFGRjEsIDB4QUZGNCwgMHhBRkY4LCAweEIwMDAsIDB4QjAwMSwgMHhCMDA0LCAweEIwMEMsCisgICAgMHhCMDEwLCAweEIwMTQsIDB4QjAxQywgMHhCMDFELCAweEIwMjgsIDB4QjA0NCwgMHhCMDQ1LCAweEIwNDgsCisgICAgMHhCMDRBLCAweEIwNEMsIDB4QjA0RSwgMHhCMDUzLCAweEIwNTQsIDB4QjA1NSwgMHhCMDU3LCAweEIwNTksCisgICAgMHhCMDVELCAweEIwN0MsIDB4QjA3RCwgMHhCMDgwLCAweEIwODQsIDB4QjA4QywgMHhCMDhELCAweEIwOEYsCisgICAgMHhCMDkxLCAweEIwOTgsIDB4QjA5OSwgMHhCMDlBLCAweEIwOUMsIDB4QjA5RiwgMHhCMEEwLCAweEIwQTEsCisgICAgMHhCMEEyLCAweEIwQTgsIDB4QjBBOSwgMHhCMEFCLCAweEIwQUMsIDB4QjBBRCwgMHhCMEFFLCAweEIwQUYsCisgICAgMHhCMEIxLCAweEIwQjMsIDB4QjBCNCwgMHhCMEI1LCAweEIwQjgsIDB4QjBCQywgMHhCMEM0LCAweEIwQzUsCisgICAgMHhCMEM3LCAweEIwQzgsIDB4QjBDOSwgMHhCMEQwLCAweEIwRDEsIDB4QjBENCwgMHhCMEQ4LCAweEIwRTAsCisgICAgMHhCMEU1LCAweEIxMDgsIDB4QjEwOSwgMHhCMTBCLCAweEIxMEMsIDB4QjExMCwgMHhCMTEyLCAweEIxMTMsCisgICAgMHhCMTE4LCAweEIxMTksIDB4QjExQiwgMHhCMTFDLCAweEIxMUQsIDB4QjEyMywgMHhCMTI0LCAweEIxMjUsCisgICAgMHhCMTI4LCAweEIxMkMsIDB4QjEzNCwgMHhCMTM1LCAweEIxMzcsIDB4QjEzOCwgMHhCMTM5LCAweEIxNDAsCisgICAgMHhCMTQxLCAweEIxNDQsIDB4QjE0OCwgMHhCMTUwLCAweEIxNTEsIDB4QjE1NCwgMHhCMTU1LCAweEIxNTgsCisgICAgMHhCMTVDLCAweEIxNjAsIDB4QjE3OCwgMHhCMTc5LCAweEIxN0MsIDB4QjE4MCwgMHhCMTgyLCAweEIxODgsCisgICAgMHhCMTg5LCAweEIxOEIsIDB4QjE4RCwgMHhCMTkyLCAweEIxOTMsIDB4QjE5NCwgMHhCMTk4LCAweEIxOUMsCisgICAgMHhCMUE4LCAweEIxQ0MsIDB4QjFEMCwgMHhCMUQ0LCAweEIxREMsIDB4QjFERCwgMHhCMURGLCAweEIxRTgsCisgICAgMHhCMUU5LCAweEIxRUMsIDB4QjFGMCwgMHhCMUY5LCAweEIxRkIsIDB4QjFGRCwgMHhCMjA0LCAweEIyMDUsCisgICAgMHhCMjA4LCAweEIyMEIsIDB4QjIwQywgMHhCMjE0LCAweEIyMTUsIDB4QjIxNywgMHhCMjE5LCAweEIyMjAsCisgICAgMHhCMjM0LCAweEIyM0MsIDB4QjI1OCwgMHhCMjVDLCAweEIyNjAsIDB4QjI2OCwgMHhCMjY5LCAweEIyNzQsCisgICAgMHhCMjc1LCAweEIyN0MsIDB4QjI4NCwgMHhCMjg1LCAweEIyODksIDB4QjI5MCwgMHhCMjkxLCAweEIyOTQsCisgICAgMHhCMjk4LCAweEIyOTksIDB4QjI5QSwgMHhCMkEwLCAweEIyQTEsIDB4QjJBMywgMHhCMkE1LCAweEIyQTYsCisgICAgMHhCMkFBLCAweEIyQUMsIDB4QjJCMCwgMHhCMkI0LCAweEIyQzgsIDB4QjJDOSwgMHhCMkNDLCAweEIyRDAsCisgICAgMHhCMkQyLCAweEIyRDgsIDB4QjJEOSwgMHhCMkRCLCAweEIyREQsIDB4QjJFMiwgMHhCMkU0LCAweEIyRTUsCisgICAgMHhCMkU2LCAweEIyRTgsIDB4QjJFQiwgMHhCMkVDLCAweEIyRUQsIDB4QjJFRSwgMHhCMkVGLCAweEIyRjMsCisgICAgMHhCMkY0LCAweEIyRjUsIDB4QjJGNywgMHhCMkY4LCAweEIyRjksIDB4QjJGQSwgMHhCMkZCLCAweEIyRkYsCisgICAgMHhCMzAwLCAweEIzMDEsIDB4QjMwNCwgMHhCMzA4LCAweEIzMTAsIDB4QjMxMSwgMHhCMzEzLCAweEIzMTQsCisgICAgMHhCMzE1LCAweEIzMUMsIDB4QjM1NCwgMHhCMzU1LCAweEIzNTYsIDB4QjM1OCwgMHhCMzVCLCAweEIzNUMsCisgICAgMHhCMzVFLCAweEIzNUYsIDB4QjM2NCwgMHhCMzY1LCAweEIzNjcsIDB4QjM2OSwgMHhCMzZCLCAweEIzNkUsCisgICAgMHhCMzcwLCAweEIzNzEsIDB4QjM3NCwgMHhCMzc4LCAweEIzODAsIDB4QjM4MSwgMHhCMzgzLCAweEIzODQsCisgICAgMHhCMzg1LCAweEIzOEMsIDB4QjM5MCwgMHhCMzk0LCAweEIzQTAsIDB4QjNBMSwgMHhCM0E4LCAweEIzQUMsCisgICAgMHhCM0M0LCAweEIzQzUsIDB4QjNDOCwgMHhCM0NCLCAweEIzQ0MsIDB4QjNDRSwgMHhCM0QwLCAweEIzRDQsCisgICAgMHhCM0Q1LCAweEIzRDcsIDB4QjNEOSwgMHhCM0RCLCAweEIzREQsIDB4QjNFMCwgMHhCM0U0LCAweEIzRTgsCisgICAgMHhCM0ZDLCAweEI0MTAsIDB4QjQxOCwgMHhCNDFDLCAweEI0MjAsIDB4QjQyOCwgMHhCNDI5LCAweEI0MkIsCisgICAgMHhCNDM0LCAweEI0NTAsIDB4QjQ1MSwgMHhCNDU0LCAweEI0NTgsIDB4QjQ2MCwgMHhCNDYxLCAweEI0NjMsCisgICAgMHhCNDY1LCAweEI0NkMsIDB4QjQ4MCwgMHhCNDg4LCAweEI0OUQsIDB4QjRBNCwgMHhCNEE4LCAweEI0QUMsCisgICAgMHhCNEI1LCAweEI0QjcsIDB4QjRCOSwgMHhCNEMwLCAweEI0QzQsIDB4QjRDOCwgMHhCNEQwLCAweEI0RDUsCisgICAgMHhCNERDLCAweEI0REQsIDB4QjRFMCwgMHhCNEUzLCAweEI0RTQsIDB4QjRFNiwgMHhCNEVDLCAweEI0RUQsCisgICAgMHhCNEVGLCAweEI0RjEsIDB4QjRGOCwgMHhCNTE0LCAweEI1MTUsIDB4QjUxOCwgMHhCNTFCLCAweEI1MUMsCisgICAgMHhCNTI0LCAweEI1MjUsIDB4QjUyNywgMHhCNTI4LCAweEI1MjksIDB4QjUyQSwgMHhCNTMwLCAweEI1MzEsCisgICAgMHhCNTM0LCAweEI1MzgsIDB4QjU0MCwgMHhCNTQxLCAweEI1NDMsIDB4QjU0NCwgMHhCNTQ1LCAweEI1NEIsCisgICAgMHhCNTRDLCAweEI1NEQsIDB4QjU1MCwgMHhCNTU0LCAweEI1NUMsIDB4QjU1RCwgMHhCNTVGLCAweEI1NjAsCisgICAgMHhCNTYxLCAweEI1QTAsIDB4QjVBMSwgMHhCNUE0LCAweEI1QTgsIDB4QjVBQSwgMHhCNUFCLCAweEI1QjAsCisgICAgMHhCNUIxLCAweEI1QjMsIDB4QjVCNCwgMHhCNUI1LCAweEI1QkIsIDB4QjVCQywgMHhCNUJELCAweEI1QzAsCisgICAgMHhCNUM0LCAweEI1Q0MsIDB4QjVDRCwgMHhCNUNGLCAweEI1RDAsIDB4QjVEMSwgMHhCNUQ4LCAweEI1RUMsCisgICAgMHhCNjEwLCAweEI2MTEsIDB4QjYxNCwgMHhCNjE4LCAweEI2MjUsIDB4QjYyQywgMHhCNjM0LCAweEI2NDgsCisgICAgMHhCNjY0LCAweEI2NjgsIDB4QjY5QywgMHhCNjlELCAweEI2QTAsIDB4QjZBNCwgMHhCNkFCLCAweEI2QUMsCisgICAgMHhCNkIxLCAweEI2RDQsIDB4QjZGMCwgMHhCNkY0LCAweEI2RjgsIDB4QjcwMCwgMHhCNzAxLCAweEI3MDUsCisgICAgMHhCNzI4LCAweEI3MjksIDB4QjcyQywgMHhCNzJGLCAweEI3MzAsIDB4QjczOCwgMHhCNzM5LCAweEI3M0IsCisgICAgMHhCNzQ0LCAweEI3NDgsIDB4Qjc0QywgMHhCNzU0LCAweEI3NTUsIDB4Qjc2MCwgMHhCNzY0LCAweEI3NjgsCisgICAgMHhCNzcwLCAweEI3NzEsIDB4Qjc3MywgMHhCNzc1LCAweEI3N0MsIDB4Qjc3RCwgMHhCNzgwLCAweEI3ODQsCisgICAgMHhCNzhDLCAweEI3OEQsIDB4Qjc4RiwgMHhCNzkwLCAweEI3OTEsIDB4Qjc5MiwgMHhCNzk2LCAweEI3OTcsCisgICAgMHhCNzk4LCAweEI3OTksIDB4Qjc5QywgMHhCN0EwLCAweEI3QTgsIDB4QjdBOSwgMHhCN0FCLCAweEI3QUMsCisgICAgMHhCN0FELCAweEI3QjQsIDB4QjdCNSwgMHhCN0I4LCAweEI3QzcsIDB4QjdDOSwgMHhCN0VDLCAweEI3RUQsCisgICAgMHhCN0YwLCAweEI3RjQsIDB4QjdGQywgMHhCN0ZELCAweEI3RkYsIDB4QjgwMCwgMHhCODAxLCAweEI4MDcsCisgICAgMHhCODA4LCAweEI4MDksIDB4QjgwQywgMHhCODEwLCAweEI4MTgsIDB4QjgxOSwgMHhCODFCLCAweEI4MUQsCisgICAgMHhCODI0LCAweEI4MjUsIDB4QjgyOCwgMHhCODJDLCAweEI4MzQsIDB4QjgzNSwgMHhCODM3LCAweEI4MzgsCisgICAgMHhCODM5LCAweEI4NDAsIDB4Qjg0NCwgMHhCODUxLCAweEI4NTMsIDB4Qjg1QywgMHhCODVELCAweEI4NjAsCisgICAgMHhCODY0LCAweEI4NkMsIDB4Qjg2RCwgMHhCODZGLCAweEI4NzEsIDB4Qjg3OCwgMHhCODdDLCAweEI4OEQsCisgICAgMHhCOEE4LCAweEI4QjAsIDB4QjhCNCwgMHhCOEI4LCAweEI4QzAsIDB4QjhDMSwgMHhCOEMzLCAweEI4QzUsCisgICAgMHhCOENDLCAweEI4RDAsIDB4QjhENCwgMHhCOERELCAweEI4REYsIDB4QjhFMSwgMHhCOEU4LCAweEI4RTksCisgICAgMHhCOEVDLCAweEI4RjAsIDB4QjhGOCwgMHhCOEY5LCAweEI4RkIsIDB4QjhGRCwgMHhCOTA0LCAweEI5MTgsCisgICAgMHhCOTIwLCAweEI5M0MsIDB4QjkzRCwgMHhCOTQwLCAweEI5NDQsIDB4Qjk0QywgMHhCOTRGLCAweEI5NTEsCisgICAgMHhCOTU4LCAweEI5NTksIDB4Qjk1QywgMHhCOTYwLCAweEI5NjgsIDB4Qjk2OSwgMHhCOTZCLCAweEI5NkQsCisgICAgMHhCOTc0LCAweEI5NzUsIDB4Qjk3OCwgMHhCOTdDLCAweEI5ODQsIDB4Qjk4NSwgMHhCOTg3LCAweEI5ODksCisgICAgMHhCOThBLCAweEI5OEQsIDB4Qjk4RSwgMHhCOUFDLCAweEI5QUQsIDB4QjlCMCwgMHhCOUI0LCAweEI5QkMsCisgICAgMHhCOUJELCAweEI5QkYsIDB4QjlDMSwgMHhCOUM4LCAweEI5QzksIDB4QjlDQywgMHhCOUNFLCAweEI5Q0YsCisgICAgMHhCOUQwLCAweEI5RDEsIDB4QjlEMiwgMHhCOUQ4LCAweEI5RDksIDB4QjlEQiwgMHhCOURELCAweEI5REUsCisgICAgMHhCOUUxLCAweEI5RTMsIDB4QjlFNCwgMHhCOUU1LCAweEI5RTgsIDB4QjlFQywgMHhCOUY0LCAweEI5RjUsCisgICAgMHhCOUY3LCAweEI5RjgsIDB4QjlGOSwgMHhCOUZBLCAweEJBMDAsIDB4QkEwMSwgMHhCQTA4LCAweEJBMTUsCisgICAgMHhCQTM4LCAweEJBMzksIDB4QkEzQywgMHhCQTQwLCAweEJBNDIsIDB4QkE0OCwgMHhCQTQ5LCAweEJBNEIsCisgICAgMHhCQTRELCAweEJBNEUsIDB4QkE1MywgMHhCQTU0LCAweEJBNTUsIDB4QkE1OCwgMHhCQTVDLCAweEJBNjQsCisgICAgMHhCQTY1LCAweEJBNjcsIDB4QkE2OCwgMHhCQTY5LCAweEJBNzAsIDB4QkE3MSwgMHhCQTc0LCAweEJBNzgsCisgICAgMHhCQTgzLCAweEJBODQsIDB4QkE4NSwgMHhCQTg3LCAweEJBOEMsIDB4QkFBOCwgMHhCQUE5LCAweEJBQUIsCisgICAgMHhCQUFDLCAweEJBQjAsIDB4QkFCMiwgMHhCQUI4LCAweEJBQjksIDB4QkFCQiwgMHhCQUJELCAweEJBQzQsCisgICAgMHhCQUM4LCAweEJBRDgsIDB4QkFEOSwgMHhCQUZDLCAweEJCMDAsIDB4QkIwNCwgMHhCQjBELCAweEJCMEYsCisgICAgMHhCQjExLCAweEJCMTgsIDB4QkIxQywgMHhCQjIwLCAweEJCMjksIDB4QkIyQiwgMHhCQjM0LCAweEJCMzUsCisgICAgMHhCQjM2LCAweEJCMzgsIDB4QkIzQiwgMHhCQjNDLCAweEJCM0QsIDB4QkIzRSwgMHhCQjQ0LCAweEJCNDUsCisgICAgMHhCQjQ3LCAweEJCNDksIDB4QkI0RCwgMHhCQjRGLCAweEJCNTAsIDB4QkI1NCwgMHhCQjU4LCAweEJCNjEsCisgICAgMHhCQjYzLCAweEJCNkMsIDB4QkI4OCwgMHhCQjhDLCAweEJCOTAsIDB4QkJBNCwgMHhCQkE4LCAweEJCQUMsCisgICAgMHhCQkI0LCAweEJCQjcsIDB4QkJDMCwgMHhCQkM0LCAweEJCQzgsIDB4QkJEMCwgMHhCQkQzLCAweEJCRjgsCisgICAgMHhCQkY5LCAweEJCRkMsIDB4QkJGRiwgMHhCQzAwLCAweEJDMDIsIDB4QkMwOCwgMHhCQzA5LCAweEJDMEIsCisgICAgMHhCQzBDLCAweEJDMEQsIDB4QkMwRiwgMHhCQzExLCAweEJDMTQsIDB4QkMxNSwgMHhCQzE2LCAweEJDMTcsCisgICAgMHhCQzE4LCAweEJDMUIsIDB4QkMxQywgMHhCQzFELCAweEJDMUUsIDB4QkMxRiwgMHhCQzI0LCAweEJDMjUsCisgICAgMHhCQzI3LCAweEJDMjksIDB4QkMyRCwgMHhCQzMwLCAweEJDMzEsIDB4QkMzNCwgMHhCQzM4LCAweEJDNDAsCisgICAgMHhCQzQxLCAweEJDNDMsIDB4QkM0NCwgMHhCQzQ1LCAweEJDNDksIDB4QkM0QywgMHhCQzRELCAweEJDNTAsCisgICAgMHhCQzVELCAweEJDODQsIDB4QkM4NSwgMHhCQzg4LCAweEJDOEIsIDB4QkM4QywgMHhCQzhFLCAweEJDOTQsCisgICAgMHhCQzk1LCAweEJDOTcsIDB4QkM5OSwgMHhCQzlBLCAweEJDQTAsIDB4QkNBMSwgMHhCQ0E0LCAweEJDQTcsCisgICAgMHhCQ0E4LCAweEJDQjAsIDB4QkNCMSwgMHhCQ0IzLCAweEJDQjQsIDB4QkNCNSwgMHhCQ0JDLCAweEJDQkQsCisgICAgMHhCQ0MwLCAweEJDQzQsIDB4QkNDRCwgMHhCQ0NGLCAweEJDRDAsIDB4QkNEMSwgMHhCQ0Q1LCAweEJDRDgsCisgICAgMHhCQ0RDLCAweEJDRjQsIDB4QkNGNSwgMHhCQ0Y2LCAweEJDRjgsIDB4QkNGQywgMHhCRDA0LCAweEJEMDUsCisgICAgMHhCRDA3LCAweEJEMDksIDB4QkQxMCwgMHhCRDE0LCAweEJEMjQsIDB4QkQyQywgMHhCRDQwLCAweEJENDgsCisgICAgMHhCRDQ5LCAweEJENEMsIDB4QkQ1MCwgMHhCRDU4LCAweEJENTksIDB4QkQ2NCwgMHhCRDY4LCAweEJEODAsCisgICAgMHhCRDgxLCAweEJEODQsIDB4QkQ4NywgMHhCRDg4LCAweEJEODksIDB4QkQ4QSwgMHhCRDkwLCAweEJEOTEsCisgICAgMHhCRDkzLCAweEJEOTUsIDB4QkQ5OSwgMHhCRDlBLCAweEJEOUMsIDB4QkRBNCwgMHhCREIwLCAweEJEQjgsCisgICAgMHhCREQ0LCAweEJERDUsIDB4QkREOCwgMHhCRERDLCAweEJERTksIDB4QkRGMCwgMHhCREY0LCAweEJERjgsCisgICAgMHhCRTAwLCAweEJFMDMsIDB4QkUwNSwgMHhCRTBDLCAweEJFMEQsIDB4QkUxMCwgMHhCRTE0LCAweEJFMUMsCisgICAgMHhCRTFELCAweEJFMUYsIDB4QkU0NCwgMHhCRTQ1LCAweEJFNDgsIDB4QkU0QywgMHhCRTRFLCAweEJFNTQsCisgICAgMHhCRTU1LCAweEJFNTcsIDB4QkU1OSwgMHhCRTVBLCAweEJFNUIsIDB4QkU2MCwgMHhCRTYxLCAweEJFNjQsCisgICAgMHhCRTY4LCAweEJFNkEsIDB4QkU3MCwgMHhCRTcxLCAweEJFNzMsIDB4QkU3NCwgMHhCRTc1LCAweEJFN0IsCisgICAgMHhCRTdDLCAweEJFN0QsIDB4QkU4MCwgMHhCRTg0LCAweEJFOEMsIDB4QkU4RCwgMHhCRThGLCAweEJFOTAsCisgICAgMHhCRTkxLCAweEJFOTgsIDB4QkU5OSwgMHhCRUE4LCAweEJFRDAsIDB4QkVEMSwgMHhCRUQ0LCAweEJFRDcsCisgICAgMHhCRUQ4LCAweEJFRTAsIDB4QkVFMywgMHhCRUU0LCAweEJFRTUsIDB4QkVFQywgMHhCRjAxLCAweEJGMDgsCisgICAgMHhCRjA5LCAweEJGMTgsIDB4QkYxOSwgMHhCRjFCLCAweEJGMUMsIDB4QkYxRCwgMHhCRjQwLCAweEJGNDEsCisgICAgMHhCRjQ0LCAweEJGNDgsIDB4QkY1MCwgMHhCRjUxLCAweEJGNTUsIDB4QkY5NCwgMHhCRkIwLCAweEJGQzUsCisgICAgMHhCRkNDLCAweEJGQ0QsIDB4QkZEMCwgMHhCRkQ0LCAweEJGREMsIDB4QkZERiwgMHhCRkUxLCAweEMwM0MsCisgICAgMHhDMDUxLCAweEMwNTgsIDB4QzA1QywgMHhDMDYwLCAweEMwNjgsIDB4QzA2OSwgMHhDMDkwLCAweEMwOTEsCisgICAgMHhDMDk0LCAweEMwOTgsIDB4QzBBMCwgMHhDMEExLCAweEMwQTMsIDB4QzBBNSwgMHhDMEFDLCAweEMwQUQsCisgICAgMHhDMEFGLCAweEMwQjAsIDB4QzBCMywgMHhDMEI0LCAweEMwQjUsIDB4QzBCNiwgMHhDMEJDLCAweEMwQkQsCisgICAgMHhDMEJGLCAweEMwQzAsIDB4QzBDMSwgMHhDMEM1LCAweEMwQzgsIDB4QzBDOSwgMHhDMENDLCAweEMwRDAsCisgICAgMHhDMEQ4LCAweEMwRDksIDB4QzBEQiwgMHhDMERDLCAweEMwREQsIDB4QzBFNCwgMHhDMEU1LCAweEMwRTgsCisgICAgMHhDMEVDLCAweEMwRjQsIDB4QzBGNSwgMHhDMEY3LCAweEMwRjksIDB4QzEwMCwgMHhDMTA0LCAweEMxMDgsCisgICAgMHhDMTEwLCAweEMxMTUsIDB4QzExQywgMHhDMTFELCAweEMxMUUsIDB4QzExRiwgMHhDMTIwLCAweEMxMjMsCisgICAgMHhDMTI0LCAweEMxMjYsIDB4QzEyNywgMHhDMTJDLCAweEMxMkQsIDB4QzEyRiwgMHhDMTMwLCAweEMxMzEsCisgICAgMHhDMTM2LCAweEMxMzgsIDB4QzEzOSwgMHhDMTNDLCAweEMxNDAsIDB4QzE0OCwgMHhDMTQ5LCAweEMxNEIsCisgICAgMHhDMTRDLCAweEMxNEQsIDB4QzE1NCwgMHhDMTU1LCAweEMxNTgsIDB4QzE1QywgMHhDMTY0LCAweEMxNjUsCisgICAgMHhDMTY3LCAweEMxNjgsIDB4QzE2OSwgMHhDMTcwLCAweEMxNzQsIDB4QzE3OCwgMHhDMTg1LCAweEMxOEMsCisgICAgMHhDMThELCAweEMxOEUsIDB4QzE5MCwgMHhDMTk0LCAweEMxOTYsIDB4QzE5QywgMHhDMTlELCAweEMxOUYsCisgICAgMHhDMUExLCAweEMxQTUsIDB4QzFBOCwgMHhDMUE5LCAweEMxQUMsIDB4QzFCMCwgMHhDMUJELCAweEMxQzQsCisgICAgMHhDMUM4LCAweEMxQ0MsIDB4QzFENCwgMHhDMUQ3LCAweEMxRDgsIDB4QzFFMCwgMHhDMUU0LCAweEMxRTgsCisgICAgMHhDMUYwLCAweEMxRjEsIDB4QzFGMywgMHhDMUZDLCAweEMxRkQsIDB4QzIwMCwgMHhDMjA0LCAweEMyMEMsCisgICAgMHhDMjBELCAweEMyMEYsIDB4QzIxMSwgMHhDMjE4LCAweEMyMTksIDB4QzIxQywgMHhDMjFGLCAweEMyMjAsCisgICAgMHhDMjI4LCAweEMyMjksIDB4QzIyQiwgMHhDMjJELCAweEMyMkYsIDB4QzIzMSwgMHhDMjMyLCAweEMyMzQsCisgICAgMHhDMjQ4LCAweEMyNTAsIDB4QzI1MSwgMHhDMjU0LCAweEMyNTgsIDB4QzI2MCwgMHhDMjY1LCAweEMyNkMsCisgICAgMHhDMjZELCAweEMyNzAsIDB4QzI3NCwgMHhDMjdDLCAweEMyN0QsIDB4QzI3RiwgMHhDMjgxLCAweEMyODgsCisgICAgMHhDMjg5LCAweEMyOTAsIDB4QzI5OCwgMHhDMjlCLCAweEMyOUQsIDB4QzJBNCwgMHhDMkE1LCAweEMyQTgsCisgICAgMHhDMkFDLCAweEMyQUQsIDB4QzJCNCwgMHhDMkI1LCAweEMyQjcsIDB4QzJCOSwgMHhDMkRDLCAweEMyREQsCisgICAgMHhDMkUwLCAweEMyRTMsIDB4QzJFNCwgMHhDMkVCLCAweEMyRUMsIDB4QzJFRCwgMHhDMkVGLCAweEMyRjEsCisgICAgMHhDMkY2LCAweEMyRjgsIDB4QzJGOSwgMHhDMkZCLCAweEMyRkMsIDB4QzMwMCwgMHhDMzA4LCAweEMzMDksCisgICAgMHhDMzBDLCAweEMzMEQsIDB4QzMxMywgMHhDMzE0LCAweEMzMTUsIDB4QzMxOCwgMHhDMzFDLCAweEMzMjQsCisgICAgMHhDMzI1LCAweEMzMjgsIDB4QzMyOSwgMHhDMzQ1LCAweEMzNjgsIDB4QzM2OSwgMHhDMzZDLCAweEMzNzAsCisgICAgMHhDMzcyLCAweEMzNzgsIDB4QzM3OSwgMHhDMzdDLCAweEMzN0QsIDB4QzM4NCwgMHhDMzg4LCAweEMzOEMsCisgICAgMHhDM0MwLCAweEMzRDgsIDB4QzNEOSwgMHhDM0RDLCAweEMzREYsIDB4QzNFMCwgMHhDM0UyLCAweEMzRTgsCisgICAgMHhDM0U5LCAweEMzRUQsIDB4QzNGNCwgMHhDM0Y1LCAweEMzRjgsIDB4QzQwOCwgMHhDNDEwLCAweEM0MjQsCisgICAgMHhDNDJDLCAweEM0MzAsIDB4QzQzNCwgMHhDNDNDLCAweEM0M0QsIDB4QzQ0OCwgMHhDNDY0LCAweEM0NjUsCisgICAgMHhDNDY4LCAweEM0NkMsIDB4QzQ3NCwgMHhDNDc1LCAweEM0NzksIDB4QzQ4MCwgMHhDNDk0LCAweEM0OUMsCisgICAgMHhDNEI4LCAweEM0QkMsIDB4QzRFOSwgMHhDNEYwLCAweEM0RjEsIDB4QzRGNCwgMHhDNEY4LCAweEM0RkEsCisgICAgMHhDNEZGLCAweEM1MDAsIDB4QzUwMSwgMHhDNTBDLCAweEM1MTAsIDB4QzUxNCwgMHhDNTFDLCAweEM1MjgsCisgICAgMHhDNTI5LCAweEM1MkMsIDB4QzUzMCwgMHhDNTM4LCAweEM1MzksIDB4QzUzQiwgMHhDNTNELCAweEM1NDQsCisgICAgMHhDNTQ1LCAweEM1NDgsIDB4QzU0OSwgMHhDNTRBLCAweEM1NEMsIDB4QzU0RCwgMHhDNTRFLCAweEM1NTMsCisgICAgMHhDNTU0LCAweEM1NTUsIDB4QzU1NywgMHhDNTU4LCAweEM1NTksIDB4QzU1RCwgMHhDNTVFLCAweEM1NjAsCisgICAgMHhDNTYxLCAweEM1NjQsIDB4QzU2OCwgMHhDNTcwLCAweEM1NzEsIDB4QzU3MywgMHhDNTc0LCAweEM1NzUsCisgICAgMHhDNTdDLCAweEM1N0QsIDB4QzU4MCwgMHhDNTg0LCAweEM1ODcsIDB4QzU4QywgMHhDNThELCAweEM1OEYsCisgICAgMHhDNTkxLCAweEM1OTUsIDB4QzU5NywgMHhDNTk4LCAweEM1OUMsIDB4QzVBMCwgMHhDNUE5LCAweEM1QjQsCisgICAgMHhDNUI1LCAweEM1QjgsIDB4QzVCOSwgMHhDNUJCLCAweEM1QkMsIDB4QzVCRCwgMHhDNUJFLCAweEM1QzQsCisgICAgMHhDNUM1LCAweEM1QzYsIDB4QzVDNywgMHhDNUM4LCAweEM1QzksIDB4QzVDQSwgMHhDNUNDLCAweEM1Q0UsCisgICAgMHhDNUQwLCAweEM1RDEsIDB4QzVENCwgMHhDNUQ4LCAweEM1RTAsIDB4QzVFMSwgMHhDNUUzLCAweEM1RTUsCisgICAgMHhDNUVDLCAweEM1RUQsIDB4QzVFRSwgMHhDNUYwLCAweEM1RjQsIDB4QzVGNiwgMHhDNUY3LCAweEM1RkMsCisgICAgMHhDNUZELCAweEM1RkUsIDB4QzVGRiwgMHhDNjAwLCAweEM2MDEsIDB4QzYwNSwgMHhDNjA2LCAweEM2MDcsCisgICAgMHhDNjA4LCAweEM2MEMsIDB4QzYxMCwgMHhDNjE4LCAweEM2MTksIDB4QzYxQiwgMHhDNjFDLCAweEM2MjQsCisgICAgMHhDNjI1LCAweEM2MjgsIDB4QzYyQywgMHhDNjJELCAweEM2MkUsIDB4QzYzMCwgMHhDNjMzLCAweEM2MzQsCisgICAgMHhDNjM1LCAweEM2MzcsIDB4QzYzOSwgMHhDNjNCLCAweEM2NDAsIDB4QzY0MSwgMHhDNjQ0LCAweEM2NDgsCisgICAgMHhDNjUwLCAweEM2NTEsIDB4QzY1MywgMHhDNjU0LCAweEM2NTUsIDB4QzY1QywgMHhDNjVELCAweEM2NjAsCisgICAgMHhDNjZDLCAweEM2NkYsIDB4QzY3MSwgMHhDNjc4LCAweEM2NzksIDB4QzY3QywgMHhDNjgwLCAweEM2ODgsCisgICAgMHhDNjg5LCAweEM2OEIsIDB4QzY4RCwgMHhDNjk0LCAweEM2OTUsIDB4QzY5OCwgMHhDNjlDLCAweEM2QTQsCisgICAgMHhDNkE1LCAweEM2QTcsIDB4QzZBOSwgMHhDNkIwLCAweEM2QjEsIDB4QzZCNCwgMHhDNkI4LCAweEM2QjksCisgICAgMHhDNkJBLCAweEM2QzAsIDB4QzZDMSwgMHhDNkMzLCAweEM2QzUsIDB4QzZDQywgMHhDNkNELCAweEM2RDAsCisgICAgMHhDNkQ0LCAweEM2REMsIDB4QzZERCwgMHhDNkUwLCAweEM2RTEsIDB4QzZFOCwgMHhDNkU5LCAweEM2RUMsCisgICAgMHhDNkYwLCAweEM2RjgsIDB4QzZGOSwgMHhDNkZELCAweEM3MDQsIDB4QzcwNSwgMHhDNzA4LCAweEM3MEMsCisgICAgMHhDNzE0LCAweEM3MTUsIDB4QzcxNywgMHhDNzE5LCAweEM3MjAsIDB4QzcyMSwgMHhDNzI0LCAweEM3MjgsCisgICAgMHhDNzMwLCAweEM3MzEsIDB4QzczMywgMHhDNzM1LCAweEM3MzcsIDB4QzczQywgMHhDNzNELCAweEM3NDAsCisgICAgMHhDNzQ0LCAweEM3NEEsIDB4Qzc0QywgMHhDNzRELCAweEM3NEYsIDB4Qzc1MSwgMHhDNzUyLCAweEM3NTMsCisgICAgMHhDNzU0LCAweEM3NTUsIDB4Qzc1NiwgMHhDNzU3LCAweEM3NTgsIDB4Qzc1QywgMHhDNzYwLCAweEM3NjgsCisgICAgMHhDNzZCLCAweEM3NzQsIDB4Qzc3NSwgMHhDNzc4LCAweEM3N0MsIDB4Qzc3RCwgMHhDNzdFLCAweEM3ODMsCisgICAgMHhDNzg0LCAweEM3ODUsIDB4Qzc4NywgMHhDNzg4LCAweEM3ODksIDB4Qzc4QSwgMHhDNzhFLCAweEM3OTAsCisgICAgMHhDNzkxLCAweEM3OTQsIDB4Qzc5NiwgMHhDNzk3LCAweEM3OTgsIDB4Qzc5QSwgMHhDN0EwLCAweEM3QTEsCisgICAgMHhDN0EzLCAweEM3QTQsIDB4QzdBNSwgMHhDN0E2LCAweEM3QUMsIDB4QzdBRCwgMHhDN0IwLCAweEM3QjQsCisgICAgMHhDN0JDLCAweEM3QkQsIDB4QzdCRiwgMHhDN0MwLCAweEM3QzEsIDB4QzdDOCwgMHhDN0M5LCAweEM3Q0MsCisgICAgMHhDN0NFLCAweEM3RDAsIDB4QzdEOCwgMHhDN0RELCAweEM3RTQsIDB4QzdFOCwgMHhDN0VDLCAweEM4MDAsCisgICAgMHhDODAxLCAweEM4MDQsIDB4QzgwOCwgMHhDODBBLCAweEM4MTAsIDB4QzgxMSwgMHhDODEzLCAweEM4MTUsCisgICAgMHhDODE2LCAweEM4MUMsIDB4QzgxRCwgMHhDODIwLCAweEM4MjQsIDB4QzgyQywgMHhDODJELCAweEM4MkYsCisgICAgMHhDODMxLCAweEM4MzgsIDB4QzgzQywgMHhDODQwLCAweEM4NDgsIDB4Qzg0OSwgMHhDODRDLCAweEM4NEQsCisgICAgMHhDODU0LCAweEM4NzAsIDB4Qzg3MSwgMHhDODc0LCAweEM4NzgsIDB4Qzg3QSwgMHhDODgwLCAweEM4ODEsCisgICAgMHhDODgzLCAweEM4ODUsIDB4Qzg4NiwgMHhDODg3LCAweEM4OEIsIDB4Qzg4QywgMHhDODhELCAweEM4OTQsCisgICAgMHhDODlELCAweEM4OUYsIDB4QzhBMSwgMHhDOEE4LCAweEM4QkMsIDB4QzhCRCwgMHhDOEM0LCAweEM4QzgsCisgICAgMHhDOENDLCAweEM4RDQsIDB4QzhENSwgMHhDOEQ3LCAweEM4RDksIDB4QzhFMCwgMHhDOEUxLCAweEM4RTQsCisgICAgMHhDOEY1LCAweEM4RkMsIDB4QzhGRCwgMHhDOTAwLCAweEM5MDQsIDB4QzkwNSwgMHhDOTA2LCAweEM5MEMsCisgICAgMHhDOTBELCAweEM5MEYsIDB4QzkxMSwgMHhDOTE4LCAweEM5MkMsIDB4QzkzNCwgMHhDOTUwLCAweEM5NTEsCisgICAgMHhDOTU0LCAweEM5NTgsIDB4Qzk2MCwgMHhDOTYxLCAweEM5NjMsIDB4Qzk2QywgMHhDOTcwLCAweEM5NzQsCisgICAgMHhDOTdDLCAweEM5ODgsIDB4Qzk4OSwgMHhDOThDLCAweEM5OTAsIDB4Qzk5OCwgMHhDOTk5LCAweEM5OUIsCisgICAgMHhDOTlELCAweEM5QzAsIDB4QzlDMSwgMHhDOUM0LCAweEM5QzcsIDB4QzlDOCwgMHhDOUNBLCAweEM5RDAsCisgICAgMHhDOUQxLCAweEM5RDMsIDB4QzlENSwgMHhDOUQ2LCAweEM5RDksIDB4QzlEQSwgMHhDOURDLCAweEM5REQsCisgICAgMHhDOUUwLCAweEM5RTIsIDB4QzlFNCwgMHhDOUU3LCAweEM5RUMsIDB4QzlFRCwgMHhDOUVGLCAweEM5RjAsCisgICAgMHhDOUYxLCAweEM5RjgsIDB4QzlGOSwgMHhDOUZDLCAweENBMDAsIDB4Q0EwOCwgMHhDQTA5LCAweENBMEIsCisgICAgMHhDQTBDLCAweENBMEQsIDB4Q0ExNCwgMHhDQTE4LCAweENBMjksIDB4Q0E0QywgMHhDQTRELCAweENBNTAsCisgICAgMHhDQTU0LCAweENBNUMsIDB4Q0E1RCwgMHhDQTVGLCAweENBNjAsIDB4Q0E2MSwgMHhDQTY4LCAweENBN0QsCisgICAgMHhDQTg0LCAweENBOTgsIDB4Q0FCQywgMHhDQUJELCAweENBQzAsIDB4Q0FDNCwgMHhDQUNDLCAweENBQ0QsCisgICAgMHhDQUNGLCAweENBRDEsIDB4Q0FEMywgMHhDQUQ4LCAweENBRDksIDB4Q0FFMCwgMHhDQUVDLCAweENBRjQsCisgICAgMHhDQjA4LCAweENCMTAsIDB4Q0IxNCwgMHhDQjE4LCAweENCMjAsIDB4Q0IyMSwgMHhDQjQxLCAweENCNDgsCisgICAgMHhDQjQ5LCAweENCNEMsIDB4Q0I1MCwgMHhDQjU4LCAweENCNTksIDB4Q0I1RCwgMHhDQjY0LCAweENCNzgsCisgICAgMHhDQjc5LCAweENCOUMsIDB4Q0JCOCwgMHhDQkQ0LCAweENCRTQsIDB4Q0JFNywgMHhDQkU5LCAweENDMEMsCisgICAgMHhDQzBELCAweENDMTAsIDB4Q0MxNCwgMHhDQzFDLCAweENDMUQsIDB4Q0MyMSwgMHhDQzIyLCAweENDMjcsCisgICAgMHhDQzI4LCAweENDMjksIDB4Q0MyQywgMHhDQzJFLCAweENDMzAsIDB4Q0MzOCwgMHhDQzM5LCAweENDM0IsCisgICAgMHhDQzNDLCAweENDM0QsIDB4Q0MzRSwgMHhDQzQ0LCAweENDNDUsIDB4Q0M0OCwgMHhDQzRDLCAweENDNTQsCisgICAgMHhDQzU1LCAweENDNTcsIDB4Q0M1OCwgMHhDQzU5LCAweENDNjAsIDB4Q0M2NCwgMHhDQzY2LCAweENDNjgsCisgICAgMHhDQzcwLCAweENDNzUsIDB4Q0M5OCwgMHhDQzk5LCAweENDOUMsIDB4Q0NBMCwgMHhDQ0E4LCAweENDQTksCisgICAgMHhDQ0FCLCAweENDQUMsIDB4Q0NBRCwgMHhDQ0I0LCAweENDQjUsIDB4Q0NCOCwgMHhDQ0JDLCAweENDQzQsCisgICAgMHhDQ0M1LCAweENDQzcsIDB4Q0NDOSwgMHhDQ0QwLCAweENDRDQsIDB4Q0NFNCwgMHhDQ0VDLCAweENDRjAsCisgICAgMHhDRDAxLCAweENEMDgsIDB4Q0QwOSwgMHhDRDBDLCAweENEMTAsIDB4Q0QxOCwgMHhDRDE5LCAweENEMUIsCisgICAgMHhDRDFELCAweENEMjQsIDB4Q0QyOCwgMHhDRDJDLCAweENEMzksIDB4Q0Q1QywgMHhDRDYwLCAweENENjQsCisgICAgMHhDRDZDLCAweENENkQsIDB4Q0Q2RiwgMHhDRDcxLCAweENENzgsIDB4Q0Q4OCwgMHhDRDk0LCAweENEOTUsCisgICAgMHhDRDk4LCAweENEOUMsIDB4Q0RBNCwgMHhDREE1LCAweENEQTcsIDB4Q0RBOSwgMHhDREIwLCAweENEQzQsCisgICAgMHhDRENDLCAweENERDAsIDB4Q0RFOCwgMHhDREVDLCAweENERjAsIDB4Q0RGOCwgMHhDREY5LCAweENERkIsCisgICAgMHhDREZELCAweENFMDQsIDB4Q0UwOCwgMHhDRTBDLCAweENFMTQsIDB4Q0UxOSwgMHhDRTIwLCAweENFMjEsCisgICAgMHhDRTI0LCAweENFMjgsIDB4Q0UzMCwgMHhDRTMxLCAweENFMzMsIDB4Q0UzNSwgMHhDRTU4LCAweENFNTksCisgICAgMHhDRTVDLCAweENFNUYsIDB4Q0U2MCwgMHhDRTYxLCAweENFNjgsIDB4Q0U2OSwgMHhDRTZCLCAweENFNkQsCisgICAgMHhDRTc0LCAweENFNzUsIDB4Q0U3OCwgMHhDRTdDLCAweENFODQsIDB4Q0U4NSwgMHhDRTg3LCAweENFODksCisgICAgMHhDRTkwLCAweENFOTEsIDB4Q0U5NCwgMHhDRTk4LCAweENFQTAsIDB4Q0VBMSwgMHhDRUEzLCAweENFQTQsCisgICAgMHhDRUE1LCAweENFQUMsIDB4Q0VBRCwgMHhDRUMxLCAweENFRTQsIDB4Q0VFNSwgMHhDRUU4LCAweENFRUIsCisgICAgMHhDRUVDLCAweENFRjQsIDB4Q0VGNSwgMHhDRUY3LCAweENFRjgsIDB4Q0VGOSwgMHhDRjAwLCAweENGMDEsCisgICAgMHhDRjA0LCAweENGMDgsIDB4Q0YxMCwgMHhDRjExLCAweENGMTMsIDB4Q0YxNSwgMHhDRjFDLCAweENGMjAsCisgICAgMHhDRjI0LCAweENGMkMsIDB4Q0YyRCwgMHhDRjJGLCAweENGMzAsIDB4Q0YzMSwgMHhDRjM4LCAweENGNTQsCisgICAgMHhDRjU1LCAweENGNTgsIDB4Q0Y1QywgMHhDRjY0LCAweENGNjUsIDB4Q0Y2NywgMHhDRjY5LCAweENGNzAsCisgICAgMHhDRjcxLCAweENGNzQsIDB4Q0Y3OCwgMHhDRjgwLCAweENGODUsIDB4Q0Y4QywgMHhDRkExLCAweENGQTgsCisgICAgMHhDRkIwLCAweENGQzQsIDB4Q0ZFMCwgMHhDRkUxLCAweENGRTQsIDB4Q0ZFOCwgMHhDRkYwLCAweENGRjEsCisgICAgMHhDRkYzLCAweENGRjUsIDB4Q0ZGQywgMHhEMDAwLCAweEQwMDQsIDB4RDAxMSwgMHhEMDE4LCAweEQwMkQsCisgICAgMHhEMDM0LCAweEQwMzUsIDB4RDAzOCwgMHhEMDNDLCAweEQwNDQsIDB4RDA0NSwgMHhEMDQ3LCAweEQwNDksCisgICAgMHhEMDUwLCAweEQwNTQsIDB4RDA1OCwgMHhEMDYwLCAweEQwNkMsIDB4RDA2RCwgMHhEMDcwLCAweEQwNzQsCisgICAgMHhEMDdDLCAweEQwN0QsIDB4RDA4MSwgMHhEMEE0LCAweEQwQTUsIDB4RDBBOCwgMHhEMEFDLCAweEQwQjQsCisgICAgMHhEMEI1LCAweEQwQjcsIDB4RDBCOSwgMHhEMEMwLCAweEQwQzEsIDB4RDBDNCwgMHhEMEM4LCAweEQwQzksCisgICAgMHhEMEQwLCAweEQwRDEsIDB4RDBEMywgMHhEMEQ0LCAweEQwRDUsIDB4RDBEQywgMHhEMERELCAweEQwRTAsCisgICAgMHhEMEU0LCAweEQwRUMsIDB4RDBFRCwgMHhEMEVGLCAweEQwRjAsIDB4RDBGMSwgMHhEMEY4LCAweEQxMEQsCisgICAgMHhEMTMwLCAweEQxMzEsIDB4RDEzNCwgMHhEMTM4LCAweEQxM0EsIDB4RDE0MCwgMHhEMTQxLCAweEQxNDMsCisgICAgMHhEMTQ0LCAweEQxNDUsIDB4RDE0QywgMHhEMTRELCAweEQxNTAsIDB4RDE1NCwgMHhEMTVDLCAweEQxNUQsCisgICAgMHhEMTVGLCAweEQxNjEsIDB4RDE2OCwgMHhEMTZDLCAweEQxN0MsIDB4RDE4NCwgMHhEMTg4LCAweEQxQTAsCisgICAgMHhEMUExLCAweEQxQTQsIDB4RDFBOCwgMHhEMUIwLCAweEQxQjEsIDB4RDFCMywgMHhEMUI1LCAweEQxQkEsCisgICAgMHhEMUJDLCAweEQxQzAsIDB4RDFEOCwgMHhEMUY0LCAweEQxRjgsIDB4RDIwNywgMHhEMjA5LCAweEQyMTAsCisgICAgMHhEMjJDLCAweEQyMkQsIDB4RDIzMCwgMHhEMjM0LCAweEQyM0MsIDB4RDIzRCwgMHhEMjNGLCAweEQyNDEsCisgICAgMHhEMjQ4LCAweEQyNUMsIDB4RDI2NCwgMHhEMjgwLCAweEQyODEsIDB4RDI4NCwgMHhEMjg4LCAweEQyOTAsCisgICAgMHhEMjkxLCAweEQyOTUsIDB4RDI5QywgMHhEMkEwLCAweEQyQTQsIDB4RDJBQywgMHhEMkIxLCAweEQyQjgsCisgICAgMHhEMkI5LCAweEQyQkMsIDB4RDJCRiwgMHhEMkMwLCAweEQyQzIsIDB4RDJDOCwgMHhEMkM5LCAweEQyQ0IsCisgICAgMHhEMkQ0LCAweEQyRDgsIDB4RDJEQywgMHhEMkU0LCAweEQyRTUsIDB4RDJGMCwgMHhEMkYxLCAweEQyRjQsCisgICAgMHhEMkY4LCAweEQzMDAsIDB4RDMwMSwgMHhEMzAzLCAweEQzMDUsIDB4RDMwQywgMHhEMzBELCAweEQzMEUsCisgICAgMHhEMzEwLCAweEQzMTQsIDB4RDMxNiwgMHhEMzFDLCAweEQzMUQsIDB4RDMxRiwgMHhEMzIwLCAweEQzMjEsCisgICAgMHhEMzI1LCAweEQzMjgsIDB4RDMyOSwgMHhEMzJDLCAweEQzMzAsIDB4RDMzOCwgMHhEMzM5LCAweEQzM0IsCisgICAgMHhEMzNDLCAweEQzM0QsIDB4RDM0NCwgMHhEMzQ1LCAweEQzN0MsIDB4RDM3RCwgMHhEMzgwLCAweEQzODQsCisgICAgMHhEMzhDLCAweEQzOEQsIDB4RDM4RiwgMHhEMzkwLCAweEQzOTEsIDB4RDM5OCwgMHhEMzk5LCAweEQzOUMsCisgICAgMHhEM0EwLCAweEQzQTgsIDB4RDNBOSwgMHhEM0FCLCAweEQzQUQsIDB4RDNCNCwgMHhEM0I4LCAweEQzQkMsCisgICAgMHhEM0M0LCAweEQzQzUsIDB4RDNDOCwgMHhEM0M5LCAweEQzRDAsIDB4RDNEOCwgMHhEM0UxLCAweEQzRTMsCisgICAgMHhEM0VDLCAweEQzRUQsIDB4RDNGMCwgMHhEM0Y0LCAweEQzRkMsIDB4RDNGRCwgMHhEM0ZGLCAweEQ0MDEsCisgICAgMHhENDA4LCAweEQ0MUQsIDB4RDQ0MCwgMHhENDQ0LCAweEQ0NUMsIDB4RDQ2MCwgMHhENDY0LCAweEQ0NkQsCisgICAgMHhENDZGLCAweEQ0NzgsIDB4RDQ3OSwgMHhENDdDLCAweEQ0N0YsIDB4RDQ4MCwgMHhENDgyLCAweEQ0ODgsCisgICAgMHhENDg5LCAweEQ0OEIsIDB4RDQ4RCwgMHhENDk0LCAweEQ0QTksIDB4RDRDQywgMHhENEQwLCAweEQ0RDQsCisgICAgMHhENERDLCAweEQ0REYsIDB4RDRFOCwgMHhENEVDLCAweEQ0RjAsIDB4RDRGOCwgMHhENEZCLCAweEQ0RkQsCisgICAgMHhENTA0LCAweEQ1MDgsIDB4RDUwQywgMHhENTE0LCAweEQ1MTUsIDB4RDUxNywgMHhENTNDLCAweEQ1M0QsCisgICAgMHhENTQwLCAweEQ1NDQsIDB4RDU0QywgMHhENTRELCAweEQ1NEYsIDB4RDU1MSwgMHhENTU4LCAweEQ1NTksCisgICAgMHhENTVDLCAweEQ1NjAsIDB4RDU2NSwgMHhENTY4LCAweEQ1NjksIDB4RDU2QiwgMHhENTZELCAweEQ1NzQsCisgICAgMHhENTc1LCAweEQ1NzgsIDB4RDU3QywgMHhENTg0LCAweEQ1ODUsIDB4RDU4NywgMHhENTg4LCAweEQ1ODksCisgICAgMHhENTkwLCAweEQ1QTUsIDB4RDVDOCwgMHhENUM5LCAweEQ1Q0MsIDB4RDVEMCwgMHhENUQyLCAweEQ1RDgsCisgICAgMHhENUQ5LCAweEQ1REIsIDB4RDVERCwgMHhENUU0LCAweEQ1RTUsIDB4RDVFOCwgMHhENUVDLCAweEQ1RjQsCisgICAgMHhENUY1LCAweEQ1RjcsIDB4RDVGOSwgMHhENjAwLCAweEQ2MDEsIDB4RDYwNCwgMHhENjA4LCAweEQ2MTAsCisgICAgMHhENjExLCAweEQ2MTMsIDB4RDYxNCwgMHhENjE1LCAweEQ2MUMsIDB4RDYyMCwgMHhENjI0LCAweEQ2MkQsCisgICAgMHhENjM4LCAweEQ2MzksIDB4RDYzQywgMHhENjQwLCAweEQ2NDUsIDB4RDY0OCwgMHhENjQ5LCAweEQ2NEIsCisgICAgMHhENjRELCAweEQ2NTEsIDB4RDY1NCwgMHhENjU1LCAweEQ2NTgsIDB4RDY1QywgMHhENjY3LCAweEQ2NjksCisgICAgMHhENjcwLCAweEQ2NzEsIDB4RDY3NCwgMHhENjgzLCAweEQ2ODUsIDB4RDY4QywgMHhENjhELCAweEQ2OTAsCisgICAgMHhENjk0LCAweEQ2OUQsIDB4RDY5RiwgMHhENkExLCAweEQ2QTgsIDB4RDZBQywgMHhENkIwLCAweEQ2QjksCisgICAgMHhENkJCLCAweEQ2QzQsIDB4RDZDNSwgMHhENkM4LCAweEQ2Q0MsIDB4RDZEMSwgMHhENkQ0LCAweEQ2RDcsCisgICAgMHhENkQ5LCAweEQ2RTAsIDB4RDZFNCwgMHhENkU4LCAweEQ2RjAsIDB4RDZGNSwgMHhENkZDLCAweEQ2RkQsCisgICAgMHhENzAwLCAweEQ3MDQsIDB4RDcxMSwgMHhENzE4LCAweEQ3MTksIDB4RDcxQywgMHhENzIwLCAweEQ3MjgsCisgICAgMHhENzI5LCAweEQ3MkIsIDB4RDcyRCwgMHhENzM0LCAweEQ3MzUsIDB4RDczOCwgMHhENzNDLCAweEQ3NDQsCisgICAgMHhENzQ3LCAweEQ3NDksIDB4RDc1MCwgMHhENzUxLCAweEQ3NTQsIDB4RDc1NiwgMHhENzU3LCAweEQ3NTgsCisgICAgMHhENzU5LCAweEQ3NjAsIDB4RDc2MSwgMHhENzYzLCAweEQ3NjUsIDB4RDc2OSwgMHhENzZDLCAweEQ3NzAsCisgICAgMHhENzc0LCAweEQ3N0MsIDB4RDc3RCwgMHhENzgxLCAweEQ3ODgsIDB4RDc4OSwgMHhENzhDLCAweEQ3OTAsCisgICAgMHhENzk4LCAweEQ3OTksIDB4RDc5QiwgMHhENzlELCAweDRGM0QsIDB4NEY3MywgMHg1MDQ3LCAweDUwRjksCisgICAgMHg1MkEwLCAweDUzRUYsIDB4NTQ3NSwgMHg1NEU1LCAweDU2MDksIDB4NUFDMSwgMHg1QkI2LCAweDY2ODcsCisgICAgMHg2N0I2LCAweDY3QjcsIDB4NjdFRiwgMHg2QjRDLCAweDczQzIsIDB4NzVDMiwgMHg3QTNDLCAweDgyREIsCisgICAgMHg4MzA0LCAweDg4NTcsIDB4ODg4OCwgMHg4QTM2LCAweDhDQzgsIDB4OERDRiwgMHg4RUZCLCAweDhGRTYsCisgICAgMHg5OUQ1LCAweDUyM0IsIDB4NTM3NCwgMHg1NDA0LCAweDYwNkEsIDB4NjE2NCwgMHg2QkJDLCAweDczQ0YsCisgICAgMHg4MTFBLCAweDg5QkEsIDB4ODlEMiwgMHg5NUEzLCAweDRGODMsIDB4NTIwQSwgMHg1OEJFLCAweDU5NzgsCisgICAgMHg1OUU2LCAweDVFNzIsIDB4NUU3OSwgMHg2MUM3LCAweDYzQzAsIDB4Njc0NiwgMHg2N0VDLCAweDY4N0YsCisgICAgMHg2Rjk3LCAweDc2NEUsIDB4NzcwQiwgMHg3OEY1LCAweDdBMDgsIDB4N0FGRiwgMHg3QzIxLCAweDgwOUQsCisgICAgMHg4MjZFLCAweDgyNzEsIDB4OEFFQiwgMHg5NTkzLCAweDRFNkIsIDB4NTU5RCwgMHg2NkY3LCAweDZFMzQsCisgICAgMHg3OEEzLCAweDdBRUQsIDB4ODQ1QiwgMHg4OTEwLCAweDg3NEUsIDB4OTdBOCwgMHg1MkQ4LCAweDU3NEUsCisgICAgMHg1ODJBLCAweDVENEMsIDB4NjExRiwgMHg2MUJFLCAweDYyMjEsIDB4NjU2MiwgMHg2N0QxLCAweDZBNDQsCisgICAgMHg2RTFCLCAweDc1MTgsIDB4NzVCMywgMHg3NkUzLCAweDc3QjAsIDB4N0QzQSwgMHg5MEFGLCAweDk0NTEsCisgICAgMHg5NDUyLCAweDlGOTUsIDB4NTMyMywgMHg1Q0FDLCAweDc1MzIsIDB4ODBEQiwgMHg5MjQwLCAweDk1OTgsCisgICAgMHg1MjVCLCAweDU4MDgsIDB4NTlEQywgMHg1Q0ExLCAweDVEMTcsIDB4NUVCNywgMHg1RjNBLCAweDVGNEEsCisgICAgMHg2MTc3LCAweDZDNUYsIDB4NzU3QSwgMHg3NTg2LCAweDdDRTAsIDB4N0Q3MywgMHg3REIxLCAweDdGOEMsCisgICAgMHg4MTU0LCAweDgyMjEsIDB4ODU5MSwgMHg4OTQxLCAweDhCMUIsIDB4OTJGQywgMHg5NjRELCAweDlDNDcsCisgICAgMHg0RUNCLCAweDRFRjcsIDB4NTAwQiwgMHg1MUYxLCAweDU4NEYsIDB4NjEzNywgMHg2MTNFLCAweDYxNjgsCisgICAgMHg2NTM5LCAweDY5RUEsIDB4NkYxMSwgMHg3NUE1LCAweDc2ODYsIDB4NzZENiwgMHg3Qjg3LCAweDgyQTUsCisgICAgMHg4NENCLCAweDkzQTcsIDB4OTU4QiwgMHg1NTgwLCAweDVCQTIsIDB4NTc1MSwgMHg3Q0IzLCAweDdGQjksCisgICAgMHg5MUI1LCAweDUwMjgsIDB4NTNCQiwgMHg1QzQ1LCAweDVERTgsIDB4NjJEMiwgMHg2MzZFLCAweDY0REEsCisgICAgMHg2NEU3LCAweDZFMjAsIDB4NzBBQywgMHg3OTVCLCAweDhEREQsIDB4OEUxRSwgMHg5MDdELCAweDkyNDUsCisgICAgMHg5MkY4LCAweDRFN0UsIDB4NEVGNiwgMHg1MDY1LCAweDVERkUsIDB4NUVGQSwgMHg2MTA2LCAweDY5NTcsCisgICAgMHg4MTcxLCAweDg2NTQsIDB4OEU0NywgMHg5Mzc1LCAweDlBMkIsIDB4NEU1RSwgMHg1MDkxLCAweDY3NzAsCisgICAgMHg2ODQwLCAweDUxMDksIDB4NTI4RCwgMHg1MjkyLCAweDZBQTIsIDB4NzdCQywgMHg5MjEwLCAweDlFRDQsCisgICAgMHg1MkFCLCAweDYwMkYsIDB4OEZGMiwgMHg1MDQ4LCAweDYxQTksIDB4NjNFRCwgMHg2NENBLCAweDY4M0MsCisgICAgMHg2QTg0LCAweDZGQzAsIDB4ODE4OCwgMHg4OUExLCAweDk2OTQsIDB4NTgwNSwgMHg3MjdELCAweDcyQUMsCisgICAgMHg3NTA0LCAweDdENzksIDB4N0U2RCwgMHg4MEE5LCAweDg5OEIsIDB4OEI3NCwgMHg5MDYzLCAweDlENTEsCisgICAgMHg2Mjg5LCAweDZDN0EsIDB4NkY1NCwgMHg3RDUwLCAweDdGM0EsIDB4OEEyMywgMHg1MTdDLCAweDYxNEEsCisgICAgMHg3QjlELCAweDhCMTksIDB4OTI1NywgMHg5MzhDLCAweDRFQUMsIDB4NEZEMywgMHg1MDFFLCAweDUwQkUsCisgICAgMHg1MTA2LCAweDUyQzEsIDB4NTJDRCwgMHg1MzdGLCAweDU3NzAsIDB4NTg4MywgMHg1RTlBLCAweDVGOTEsCisgICAgMHg2MTc2LCAweDYxQUMsIDB4NjRDRSwgMHg2NTZDLCAweDY2NkYsIDB4NjZCQiwgMHg2NkY0LCAweDY4OTcsCisgICAgMHg2RDg3LCAweDcwODUsIDB4NzBGMSwgMHg3NDlGLCAweDc0QTUsIDB4NzRDQSwgMHg3NUQ5LCAweDc4NkMsCisgICAgMHg3OEVDLCAweDdBREYsIDB4N0FGNiwgMHg3RDQ1LCAweDdEOTMsIDB4ODAxNSwgMHg4MDNGLCAweDgxMUIsCisgICAgMHg4Mzk2LCAweDhCNjYsIDB4OEYxNSwgMHg5MDE1LCAweDkzRTEsIDB4OTgwMywgMHg5ODM4LCAweDlBNUEsCisgICAgMHg5QkU4LCAweDRGQzIsIDB4NTU1MywgMHg1ODNBLCAweDU5NTEsIDB4NUI2MywgMHg1QzQ2LCAweDYwQjgsCisgICAgMHg2MjEyLCAweDY4NDIsIDB4NjhCMCwgMHg2OEU4LCAweDZFQUEsIDB4NzU0QywgMHg3Njc4LCAweDc4Q0UsCisgICAgMHg3QTNELCAweDdDRkIsIDB4N0U2QiwgMHg3RTdDLCAweDhBMDgsIDB4OEFBMSwgMHg4QzNGLCAweDk2OEUsCisgICAgMHg5REM0LCAweDUzRTQsIDB4NTNFOSwgMHg1NDRBLCAweDU0NzEsIDB4NTZGQSwgMHg1OUQxLCAweDVCNjQsCisgICAgMHg1QzNCLCAweDVFQUIsIDB4NjJGNywgMHg2NTM3LCAweDY1NDUsIDB4NjU3MiwgMHg2NkEwLCAweDY3QUYsCisgICAgMHg2OUMxLCAweDZDQkQsIDB4NzVGQywgMHg3NjkwLCAweDc3N0UsIDB4N0EzRiwgMHg3Rjk0LCAweDgwMDMsCisgICAgMHg4MEExLCAweDgxOEYsIDB4ODJFNiwgMHg4MkZELCAweDgzRjAsIDB4ODVDMSwgMHg4ODMxLCAweDg4QjQsCisgICAgMHg4QUE1LCAweDhGOUMsIDB4OTMyRSwgMHg5NkM3LCAweDk4NjcsIDB4OUFEOCwgMHg5RjEzLCAweDU0RUQsCisgICAgMHg2NTlCLCAweDY2RjIsIDB4Njg4RiwgMHg3QTQwLCAweDhDMzcsIDB4OUQ2MCwgMHg1NkYwLCAweDU3NjQsCisgICAgMHg1RDExLCAweDY2MDYsIDB4NjhCMSwgMHg2OENELCAweDZFRkUsIDB4NzQyOCwgMHg4ODlFLCAweDlCRTQsCisgICAgMHg2QzY4LCAweDlBQTgsIDB4NEY5QiwgMHg1MTZDLCAweDUxNzEsIDB4NTI5RiwgMHg1QjU0LCAweDVERTUsCisgICAgMHg2MDUwLCAweDYwNkQsIDB4NjJGMSwgMHg2M0E3LCAweDY1M0IsIDB4NzNEOSwgMHg3QTdBLCAweDg2QTMsCisgICAgMHg4Q0EyLCAweDk3OEYsIDB4NEUzMiwgMHg1QkUxLCAweDYyMDgsIDB4Njc5QywgMHg3NERDLCAweDc5RDEsCisgICAgMHg4M0QzLCAweDhBODcsIDB4OEFCMiwgMHg4REU4LCAweDkwNEUsIDB4OTM0QiwgMHg5ODQ2LCAweDVFRDMsCisgICAgMHg2OUU4LCAweDg1RkYsIDB4OTBFRCwgMHg1MUEwLCAweDVCOTgsIDB4NUJFQywgMHg2MTYzLCAweDY4RkEsCisgICAgMHg2QjNFLCAweDcwNEMsIDB4NzQyRiwgMHg3NEQ4LCAweDdCQTEsIDB4N0Y1MCwgMHg4M0M1LCAweDg5QzAsCisgICAgMHg4Q0FCLCAweDk1REMsIDB4OTkyOCwgMHg1MjJFLCAweDYwNUQsIDB4NjJFQywgMHg5MDAyLCAweDRGOEEsCisgICAgMHg1MTQ5LCAweDUzMjEsIDB4NThEOSwgMHg1RUUzLCAweDY2RTAsIDB4NkQzOCwgMHg3MDlBLCAweDcyQzIsCisgICAgMHg3M0Q2LCAweDdCNTAsIDB4ODBGMSwgMHg5NDVCLCAweDUzNjYsIDB4NjM5QiwgMHg3RjZCLCAweDRFNTYsCisgICAgMHg1MDgwLCAweDU4NEEsIDB4NThERSwgMHg2MDJBLCAweDYxMjcsIDB4NjJEMCwgMHg2OUQwLCAweDlCNDEsCisgICAgMHg1QjhGLCAweDdEMTgsIDB4ODBCMSwgMHg4RjVGLCAweDRFQTQsIDB4NTBEMSwgMHg1NEFDLCAweDU1QUMsCisgICAgMHg1QjBDLCAweDVEQTAsIDB4NURFNywgMHg2NTJBLCAweDY1NEUsIDB4NjgyMSwgMHg2QTRCLCAweDcyRTEsCisgICAgMHg3NjhFLCAweDc3RUYsIDB4N0Q1RSwgMHg3RkY5LCAweDgxQTAsIDB4ODU0RSwgMHg4NkRGLCAweDhGMDMsCisgICAgMHg4RjRFLCAweDkwQ0EsIDB4OTkwMywgMHg5QTU1LCAweDlCQUIsIDB4NEUxOCwgMHg0RTQ1LCAweDRFNUQsCisgICAgMHg0RUM3LCAweDRGRjEsIDB4NTE3NywgMHg1MkZFLCAweDUzNDAsIDB4NTNFMywgMHg1M0U1LCAweDU0OEUsCisgICAgMHg1NjE0LCAweDU3NzUsIDB4NTdBMiwgMHg1QkM3LCAweDVEODcsIDB4NUVEMCwgMHg2MUZDLCAweDYyRDgsCisgICAgMHg2NTUxLCAweDY3QjgsIDB4NjdFOSwgMHg2OUNCLCAweDZCNTAsIDB4NkJDNiwgMHg2QkVDLCAweDZDNDIsCisgICAgMHg2RTlELCAweDcwNzgsIDB4NzJENywgMHg3Mzk2LCAweDc0MDMsIDB4NzdCRiwgMHg3N0U5LCAweDdBNzYsCisgICAgMHg3RDdGLCAweDgwMDksIDB4ODFGQywgMHg4MjA1LCAweDgyMEEsIDB4ODJERiwgMHg4ODYyLCAweDhCMzMsCisgICAgMHg4Q0ZDLCAweDhFQzAsIDB4OTAxMSwgMHg5MEIxLCAweDkyNjQsIDB4OTJCNiwgMHg5OUQyLCAweDlBNDUsCisgICAgMHg5Q0U5LCAweDlERDcsIDB4OUY5QywgMHg1NzBCLCAweDVDNDAsIDB4ODNDQSwgMHg5N0EwLCAweDk3QUIsCisgICAgMHg5RUI0LCAweDU0MUIsIDB4N0E5OCwgMHg3RkE0LCAweDg4RDksIDB4OEVDRCwgMHg5MEUxLCAweDU4MDAsCisgICAgMHg1QzQ4LCAweDYzOTgsIDB4N0E5RiwgMHg1QkFFLCAweDVGMTMsIDB4N0E3OSwgMHg3QUFFLCAweDgyOEUsCisgICAgMHg4RUFDLCAweDUwMjYsIDB4NTIzOCwgMHg1MkY4LCAweDUzNzcsIDB4NTcwOCwgMHg2MkYzLCAweDYzNzIsCisgICAgMHg2QjBBLCAweDZEQzMsIDB4NzczNywgMHg1M0E1LCAweDczNTcsIDB4ODU2OCwgMHg4RTc2LCAweDk1RDUsCisgICAgMHg2NzNBLCAweDZBQzMsIDB4NkY3MCwgMHg4QTZELCAweDhFQ0MsIDB4OTk0QiwgMHg2Njc3LCAweDZCNzgsCisgICAgMHg4Q0I0LCAweDlCM0MsIDB4NTNFQiwgMHg1NzJELCAweDU5NEUsIDB4NjNDNiwgMHg2OUZCLCAweDczRUEsCisgICAgMHg3ODQ1LCAweDdBQkEsIDB4N0FDNSwgMHg3Q0ZFLCAweDg0NzUsIDB4ODk4RiwgMHg4RDczLCAweDkwMzUsCisgICAgMHg5NUE4LCAweDUyRkIsIDB4NTc0NywgMHg3NTQ3LCAweDdCNjAsIDB4ODNDQywgMHg5MjFFLCAweDZBNTgsCisgICAgMHg1MTRCLCAweDUyNEIsIDB4NTI4NywgMHg2MjFGLCAweDY4RDgsIDB4Njk3NSwgMHg5Njk5LCAweDUwQzUsCisgICAgMHg1MkE0LCAweDUyRTQsIDB4NjFDMywgMHg2NUE0LCAweDY4MzksIDB4NjlGRiwgMHg3NDdFLCAweDdCNEIsCisgICAgMHg4MkI5LCAweDgzRUIsIDB4ODlCMiwgMHg4QjM5LCAweDhGRDEsIDB4OTk0OSwgMHg0RUNBLCAweDU5OTcsCisgICAgMHg2NEQyLCAweDY2MTEsIDB4NkE4RSwgMHg3NDM0LCAweDc5ODEsIDB4NzlCRCwgMHg4MkE5LCAweDg4N0UsCisgICAgMHg4ODdGLCAweDg5NUYsIDB4OTMyNiwgMHg0RjBCLCAweDUzQ0EsIDB4NjAyNSwgMHg2MjcxLCAweDZDNzIsCisgICAgMHg3RDFBLCAweDdENjYsIDB4NEU5OCwgMHg1MTYyLCAweDc3REMsIDB4ODBBRiwgMHg0RjAxLCAweDRGMEUsCisgICAgMHg1MTc2LCAweDUxODAsIDB4NTVEQywgMHg1NjY4LCAweDU3M0IsIDB4NTdGQSwgMHg1N0ZDLCAweDU5MTQsCisgICAgMHg1OTQ3LCAweDU5OTMsIDB4NUJDNCwgMHg1QzkwLCAweDVEMEUsIDB4NURGMSwgMHg1RTdFLCAweDVGQ0MsCisgICAgMHg2MjgwLCAweDY1RDcsIDB4NjVFMywgMHg2NzFFLCAweDY3MUYsIDB4Njc1RSwgMHg2OENCLCAweDY4QzQsCisgICAgMHg2QTVGLCAweDZCM0EsIDB4NkMyMywgMHg2QzdELCAweDZDODIsIDB4NkRDNywgMHg3Mzk4LCAweDc0MjYsCisgICAgMHg3NDJBLCAweDc0ODIsIDB4NzRBMywgMHg3NTc4LCAweDc1N0YsIDB4Nzg4MSwgMHg3OEVGLCAweDc5NDEsCisgICAgMHg3OTQ3LCAweDc5NDgsIDB4Nzk3QSwgMHg3Qjk1LCAweDdEMDAsIDB4N0RCQSwgMHg3Rjg4LCAweDgwMDYsCisgICAgMHg4MDJELCAweDgwOEMsIDB4OEExOCwgMHg4QjRGLCAweDhDNDgsIDB4OEQ3NywgMHg5MzIxLCAweDkzMjQsCisgICAgMHg5OEUyLCAweDk5NTEsIDB4OUEwRSwgMHg5QTBGLCAweDlBNjUsIDB4OUU5MiwgMHg3RENBLCAweDRGNzYsCisgICAgMHg1NDA5LCAweDYyRUUsIDB4Njg1NCwgMHg5MUQxLCAweDU1QUIsIDB4NTEzQSwgMHg1QTFDLCAweDYxRTYsCisgICAgMHg2MkNGLCAweDYyRkYsIDB4OTBBMywgMHg4QUZFLCAweDY2OTYsIDB4NzE1NiwgMHg5NkUzLCAweDYzNEYsCisgICAgMHg2MzdBLCAweDUzNTcsIDB4Njc4RiwgMHg2OTYwLCAweDZFNzMsIDB4NzUzNywgMHg3RDBELCAweDg4NzIsCisgICAgMHg1NkNBLCAweDVBMTgsIDB4NEU0MywgMHg1MTY3LCAweDU5NDgsIDB4NjdGMCwgMHg4MDEwLCAweDU5NzMsCisgICAgMHg1RTc0LCAweDY0OUEsIDB4NzlDQSwgMHg1RkY1LCAweDYwNkMsIDB4NjJDOCwgMHg2MzdCLCAweDVCRTcsCisgICAgMHg1QkQ3LCAweDUyQUEsIDB4NTk3NCwgMHg1RjI5LCAweDYwMTIsIDB4NzQ1OSwgMHg5OUQxLCAweDZGQzMsCisgICAgMHg4MUJGLCAweDhGQjIsIDB4NjBGMSwgMHg4MTY2LCAweDVDM0YsIDB4NUFFOSwgMHg4QTI1LCAweDY3N0IsCisgICAgMHg3RDEwLCAweDgwRkQsIDB4NUMzQywgMHg2Q0U1LCAweDUzM0YsIDB4NkVCQSwgMHg1OTFBLCAweDgzMzYsCisgICAgMHg0RTM5LCAweDRFQjYsIDB4NEY0NiwgMHg1NUFFLCAweDU3MTgsIDB4NThDNywgMHg1RjU2LCAweDY1QjcsCisgICAgMHg2NUU2LCAweDZBODAsIDB4NkJCNSwgMHg2RTRELCAweDc3RUQsIDB4N0FFRiwgMHg3QzFFLCAweDdEREUsCisgICAgMHg4NkNCLCAweDg4OTIsIDB4OTEzMiwgMHg5MzVCLCAweDY0QkIsIDB4NkZCRSwgMHg3MzdBLCAweDc1QjgsCisgICAgMHg5MDU0LCAweDU1NTYsIDB4NTc0RCwgMHg2MUJBLCAweDY0RDQsIDB4NjZDNywgMHg2REUxLCAweDZFNUIsCisgICAgMHg2RjZELCAweDZGQjksIDB4NzVGMCwgMHg4MDQzLCAweDgxQkQsIDB4ODU0MSwgMHg4OTgzLCAweDhBQzcsCisgICAgMHg4QjVBLCAweDkzMUYsIDB4NkM5MywgMHg3NTUzLCAweDdCNTQsIDB4OEUwRiwgMHg5MDVELCAweDU1MTAsCisgICAgMHg1ODAyLCAweDU4NTgsIDB4NUU2MiwgMHg2MjA3LCAweDY0OUUsIDB4NjhFMCwgMHg3NTc2LCAweDdDRDYsCisgICAgMHg4N0IzLCAweDlFRTgsIDB4NEVFMywgMHg1Nzg4LCAweDU3NkUsIDB4NTkyNywgMHg1QzBELCAweDVDQjEsCisgICAgMHg1RTM2LCAweDVGODUsIDB4NjIzNCwgMHg2NEUxLCAweDczQjMsIDB4ODFGQSwgMHg4ODhCLCAweDhDQjgsCisgICAgMHg5NjhBLCAweDlFREIsIDB4NUI4NSwgMHg1RkI3LCAweDYwQjMsIDB4NTAxMiwgMHg1MjAwLCAweDUyMzAsCisgICAgMHg1NzE2LCAweDU4MzUsIDB4NTg1NywgMHg1QzBFLCAweDVDNjAsIDB4NUNGNiwgMHg1RDhCLCAweDVFQTYsCisgICAgMHg1RjkyLCAweDYwQkMsIDB4NjMxMSwgMHg2Mzg5LCAweDY0MTcsIDB4Njg0MywgMHg2OEY5LCAweDZBQzIsCisgICAgMHg2REQ4LCAweDZFMjEsIDB4NkVENCwgMHg2RkU0LCAweDcxRkUsIDB4NzZEQywgMHg3Nzc5LCAweDc5QjEsCisgICAgMHg3QTNCLCAweDg0MDQsIDB4ODlBOSwgMHg4Q0VELCAweDhERjMsIDB4OEU0OCwgMHg5MDAzLCAweDkwMTQsCisgICAgMHg5MDUzLCAweDkwRkQsIDB4OTM0RCwgMHg5Njc2LCAweDk3REMsIDB4NkJEMiwgMHg3MDA2LCAweDcyNTgsCisgICAgMHg3MkEyLCAweDczNjgsIDB4Nzc2MywgMHg3OUJGLCAweDdCRTQsIDB4N0U5QiwgMHg4QjgwLCAweDU4QTksCisgICAgMHg2MEM3LCAweDY1NjYsIDB4NjVGRCwgMHg2NkJFLCAweDZDOEMsIDB4NzExRSwgMHg3MUM5LCAweDhDNUEsCisgICAgMHg5ODEzLCAweDRFNkQsIDB4N0E4MSwgMHg0RURELCAweDUxQUMsIDB4NTFDRCwgMHg1MkQ1LCAweDU0MEMsCisgICAgMHg2MUE3LCAweDY3NzEsIDB4Njg1MCwgMHg2OERGLCAweDZEMUUsIDB4NkY3QywgMHg3NUJDLCAweDc3QjMsCisgICAgMHg3QUU1LCAweDgwRjQsIDB4ODQ2MywgMHg5Mjg1LCAweDUxNUMsIDB4NjU5NywgMHg2NzVDLCAweDY3OTMsCisgICAgMHg3NUQ4LCAweDdBQzcsIDB4ODM3MywgMHg4QzQ2LCAweDkwMTcsIDB4OTgyRCwgMHg1QzZGLCAweDgxQzAsCisgICAgMHg4MjlBLCAweDkwNDEsIDB4OTA2RiwgMHg5MjBELCAweDVGOTcsIDB4NUQ5RCwgMHg2QTU5LCAweDcxQzgsCisgICAgMHg3NjdCLCAweDdCNDksIDB4ODVFNCwgMHg4QjA0LCAweDkxMjcsIDB4OUEzMCwgMHg1NTg3LCAweDYxRjYsCisgICAgMHg3NjY5LCAweDdGODUsIDB4ODYzRiwgMHg4N0JBLCAweDg4RjgsIDB4OTA4RiwgMHg2RDFCLCAweDcwRDksCisgICAgMHg3M0RFLCAweDdENjEsIDB4ODQzRCwgMHg5MTZBLCAweDk5RjEsIDB4NEU4MiwgMHg1Mzc1LCAweDZCMDQsCisgICAgMHg2QjEyLCAweDcwM0UsIDB4NzIxQiwgMHg4NjJELCAweDlFMUUsIDB4NTI0QywgMHg4RkEzLCAweDVENTAsCisgICAgMHg2NEU1LCAweDY1MkMsIDB4NkIxNiwgMHg2RkVCLCAweDdDNDMsIDB4N0U5QywgMHg4NUNELCAweDg5NjQsCisgICAgMHg4OUJELCAweDYyQzksIDB4ODFEOCwgMHg4ODFGLCAweDVFQ0EsIDB4NjcxNywgMHg2RDZBLCAweDcyRkMsCisgICAgMHg3NDA1LCAweDc0NkYsIDB4ODc4MiwgMHg5MERFLCAweDRGODYsIDB4NUQwRCwgMHg1RkEwLCAweDg0MEEsCisgICAgMHg1MUI3LCAweDYzQTAsIDB4NzU2NSwgMHg0RUFFLCAweDUwMDYsIDB4NTE2OSwgMHg1MUM5LCAweDY4ODEsCisgICAgMHg2QTExLCAweDdDQUUsIDB4N0NCMSwgMHg3Q0U3LCAweDgyNkYsIDB4OEFEMiwgMHg4RjFCLCAweDkxQ0YsCisgICAgMHg0RkI2LCAweDUxMzcsIDB4NTJGNSwgMHg1NDQyLCAweDVFRUMsIDB4NjE2RSwgMHg2MjNFLCAweDY1QzUsCisgICAgMHg2QURBLCAweDZGRkUsIDB4NzkyQSwgMHg4NURDLCAweDg4MjMsIDB4OTVBRCwgMHg5QTYyLCAweDlBNkEsCisgICAgMHg5RTk3LCAweDlFQ0UsIDB4NTI5QiwgMHg2NkM2LCAweDZCNzcsIDB4NzAxRCwgMHg3OTJCLCAweDhGNjIsCisgICAgMHg5NzQyLCAweDYxOTAsIDB4NjIwMCwgMHg2NTIzLCAweDZGMjMsIDB4NzE0OSwgMHg3NDg5LCAweDdERjQsCisgICAgMHg4MDZGLCAweDg0RUUsIDB4OEYyNiwgMHg5MDIzLCAweDkzNEEsIDB4NTFCRCwgMHg1MjE3LCAweDUyQTMsCisgICAgMHg2RDBDLCAweDcwQzgsIDB4ODhDMiwgMHg1RUM5LCAweDY1ODIsIDB4NkJBRSwgMHg2RkMyLCAweDdDM0UsCisgICAgMHg3Mzc1LCAweDRFRTQsIDB4NEYzNiwgMHg1NkY5LCAweDVDQkEsIDB4NURCQSwgMHg2MDFDLCAweDczQjIsCisgICAgMHg3QjJELCAweDdGOUEsIDB4N0ZDRSwgMHg4MDQ2LCAweDkwMUUsIDB4OTIzNCwgMHg5NkY2LCAweDk3NDgsCisgICAgMHg5ODE4LCAweDlGNjEsIDB4NEY4QiwgMHg2RkE3LCAweDc5QUUsIDB4OTFCNCwgMHg5NkI3LCAweDUyREUsCisgICAgMHg2NDg4LCAweDY0QzQsIDB4NkFEMywgMHg2RjVFLCAweDcwMTgsIDB4NzIxMCwgMHg3NkU3LCAweDgwMDEsCisgICAgMHg4NjA2LCAweDg2NUMsIDB4OERFRiwgMHg4RjA1LCAweDk3MzIsIDB4OUI2RiwgMHg5REZBLCAweDlFNzUsCisgICAgMHg3ODhDLCAweDc5N0YsIDB4N0RBMCwgMHg4M0M5LCAweDkzMDQsIDB4OUU3RiwgMHg5RTkzLCAweDhBRDYsCisgICAgMHg1OERGLCAweDVGMDQsIDB4NjcyNywgMHg3MDI3LCAweDc0Q0YsIDB4N0M2MCwgMHg4MDdFLCAweDUxMjEsCisgICAgMHg3MDI4LCAweDcyNjIsIDB4NzhDQSwgMHg4Q0MyLCAweDhDREEsIDB4OENGNCwgMHg5NkY3LCAweDRFODYsCisgICAgMHg1MERBLCAweDVCRUUsIDB4NUVENiwgMHg2NTk5LCAweDcxQ0UsIDB4NzY0MiwgMHg3N0FELCAweDgwNEEsCisgICAgMHg4NEZDLCAweDkwN0MsIDB4OUIyNywgMHg5RjhELCAweDU4RDgsIDB4NUE0MSwgMHg1QzYyLCAweDZBMTMsCisgICAgMHg2RERBLCAweDZGMEYsIDB4NzYzQiwgMHg3RDJGLCAweDdFMzcsIDB4ODUxRSwgMHg4OTM4LCAweDkzRTQsCisgICAgMHg5NjRCLCAweDUyODksIDB4NjVEMiwgMHg2N0YzLCAweDY5QjQsIDB4NkQ0MSwgMHg2RTlDLCAweDcwMEYsCisgICAgMHg3NDA5LCAweDc0NjAsIDB4NzU1OSwgMHg3NjI0LCAweDc4NkIsIDB4OEIyQywgMHg5ODVFLCAweDUxNkQsCisgICAgMHg2MjJFLCAweDk2NzgsIDB4NEY5NiwgMHg1MDJCLCAweDVEMTksIDB4NkRFQSwgMHg3REI4LCAweDhGMkEsCisgICAgMHg1RjhCLCAweDYxNDQsIDB4NjgxNywgMHg5Njg2LCAweDUyRDIsIDB4ODA4QiwgMHg1MURDLCAweDUxQ0MsCisgICAgMHg2OTVFLCAweDdBMUMsIDB4N0RCRSwgMHg4M0YxLCAweDk2NzUsIDB4NEZEQSwgMHg1MjI5LCAweDUzOTgsCisgICAgMHg1NDBGLCAweDU1MEUsIDB4NUM2NSwgMHg2MEE3LCAweDY3NEUsIDB4NjhBOCwgMHg2RDZDLCAweDcyODEsCisgICAgMHg3MkY4LCAweDc0MDYsIDB4NzQ4MywgMHg3NUUyLCAweDdDNkMsIDB4N0Y3OSwgMHg3RkI4LCAweDgzODksCisgICAgMHg4OENGLCAweDg4RTEsIDB4OTFDQywgMHg5MUQwLCAweDk2RTIsIDB4OUJDOSwgMHg1NDFELCAweDZGN0UsCisgICAgMHg3MUQwLCAweDc0OTgsIDB4ODVGQSwgMHg4RUFBLCAweDk2QTMsIDB4OUM1NywgMHg5RTlGLCAweDY3OTcsCisgICAgMHg2RENCLCAweDc0MzMsIDB4ODFFOCwgMHg5NzE2LCAweDc4MkMsIDB4N0FDQiwgMHg3QjIwLCAweDdDOTIsCisgICAgMHg2NDY5LCAweDc0NkEsIDB4NzVGMiwgMHg3OEJDLCAweDc4RTgsIDB4OTlBQywgMHg5QjU0LCAweDlFQkIsCisgICAgMHg1QkRFLCAweDVFNTUsIDB4NkYyMCwgMHg4MTlDLCAweDgzQUIsIDB4OTA4OCwgMHg0RTA3LCAweDUzNEQsCisgICAgMHg1QTI5LCAweDVERDIsIDB4NUY0RSwgMHg2MTYyLCAweDYzM0QsIDB4NjY2OSwgMHg2NkZDLCAweDZFRkYsCisgICAgMHg2RjJCLCAweDcwNjMsIDB4Nzc5RSwgMHg4NDJDLCAweDg1MTMsIDB4ODgzQiwgMHg4RjEzLCAweDk5NDUsCisgICAgMHg5QzNCLCAweDU1MUMsIDB4NjJCOSwgMHg2NzJCLCAweDZDQUIsIDB4ODMwOSwgMHg4OTZBLCAweDk3N0EsCisgICAgMHg0RUExLCAweDU5ODQsIDB4NUZEOCwgMHg1RkQ5LCAweDY3MUIsIDB4N0RCMiwgMHg3RjU0LCAweDgyOTIsCisgICAgMHg4MzJCLCAweDgzQkQsIDB4OEYxRSwgMHg5MDk5LCAweDU3Q0IsIDB4NTlCOSwgMHg1QTkyLCAweDVCRDAsCisgICAgMHg2NjI3LCAweDY3OUEsIDB4Njg4NSwgMHg2QkNGLCAweDcxNjQsIDB4N0Y3NSwgMHg4Q0I3LCAweDhDRTMsCisgICAgMHg5MDgxLCAweDlCNDUsIDB4ODEwOCwgMHg4QzhBLCAweDk2NEMsIDB4OUE0MCwgMHg5RUE1LCAweDVCNUYsCisgICAgMHg2QzEzLCAweDczMUIsIDB4NzZGMiwgMHg3NkRGLCAweDg0MEMsIDB4NTFBQSwgMHg4OTkzLCAweDUxNEQsCisgICAgMHg1MTk1LCAweDUyQzksIDB4NjhDOSwgMHg2Qzk0LCAweDc3MDQsIDB4NzcyMCwgMHg3REJGLCAweDdERUMsCisgICAgMHg5NzYyLCAweDlFQjUsIDB4NkVDNSwgMHg4NTExLCAweDUxQTUsIDB4NTQwRCwgMHg1NDdELCAweDY2MEUsCisgICAgMHg2NjlELCAweDY5MjcsIDB4NkU5RiwgMHg3NkJGLCAweDc3OTEsIDB4ODMxNywgMHg4NEMyLCAweDg3OUYsCisgICAgMHg5MTY5LCAweDkyOTgsIDB4OUNGNCwgMHg4ODgyLCAweDRGQUUsIDB4NTE5MiwgMHg1MkRGLCAweDU5QzYsCisgICAgMHg1RTNELCAweDYxNTUsIDB4NjQ3OCwgMHg2NDc5LCAweDY2QUUsIDB4NjdEMCwgMHg2QTIxLCAweDZCQ0QsCisgICAgMHg2QkRCLCAweDcyNUYsIDB4NzI2MSwgMHg3NDQxLCAweDc3MzgsIDB4NzdEQiwgMHg4MDE3LCAweDgyQkMsCisgICAgMHg4MzA1LCAweDhCMDAsIDB4OEIyOCwgMHg4QzhDLCAweDY3MjgsIDB4NkM5MCwgMHg3MjY3LCAweDc2RUUsCisgICAgMHg3NzY2LCAweDdBNDYsIDB4OURBOSwgMHg2QjdGLCAweDZDOTIsIDB4NTkyMiwgMHg2NzI2LCAweDg0OTksCisgICAgMHg1MzZGLCAweDU4OTMsIDB4NTk5OSwgMHg1RURGLCAweDYzQ0YsIDB4NjYzNCwgMHg2NzczLCAweDZFM0EsCisgICAgMHg3MzJCLCAweDdBRDcsIDB4ODJENywgMHg5MzI4LCAweDUyRDksIDB4NURFQiwgMHg2MUFFLCAweDYxQ0IsCisgICAgMHg2MjBBLCAweDYyQzcsIDB4NjRBQiwgMHg2NUUwLCAweDY5NTksIDB4NkI2NiwgMHg2QkNCLCAweDcxMjEsCisgICAgMHg3M0Y3LCAweDc1NUQsIDB4N0U0NiwgMHg4MjFFLCAweDgzMDIsIDB4ODU2QSwgMHg4QUEzLCAweDhDQkYsCisgICAgMHg5NzI3LCAweDlENjEsIDB4NThBOCwgMHg5RUQ4LCAweDUwMTEsIDB4NTIwRSwgMHg1NDNCLCAweDU1NEYsCisgICAgMHg2NTg3LCAweDZDNzYsIDB4N0QwQSwgMHg3RDBCLCAweDgwNUUsIDB4ODY4QSwgMHg5NTgwLCAweDk2RUYsCisgICAgMHg1MkZGLCAweDZDOTUsIDB4NzI2OSwgMHg1NDczLCAweDVBOUEsIDB4NUMzRSwgMHg1RDRCLCAweDVGNEMsCisgICAgMHg1RkFFLCAweDY3MkEsIDB4NjhCNiwgMHg2OTYzLCAweDZFM0MsIDB4NkU0NCwgMHg3NzA5LCAweDdDNzMsCisgICAgMHg3RjhFLCAweDg1ODcsIDB4OEIwRSwgMHg4RkY3LCAweDk3NjEsIDB4OUVGNCwgMHg1Q0I3LCAweDYwQjYsCisgICAgMHg2MTBELCAweDYxQUIsIDB4NjU0RiwgMHg2NUZCLCAweDY1RkMsIDB4NkMxMSwgMHg2Q0VGLCAweDczOUYsCisgICAgMHg3M0M5LCAweDdERTEsIDB4OTU5NCwgMHg1QkM2LCAweDg3MUMsIDB4OEIxMCwgMHg1MjVELCAweDUzNUEsCisgICAgMHg2MkNELCAweDY0MEYsIDB4NjRCMiwgMHg2NzM0LCAweDZBMzgsIDB4NkNDQSwgMHg3M0MwLCAweDc0OUUsCisgICAgMHg3Qjk0LCAweDdDOTUsIDB4N0UxQiwgMHg4MThBLCAweDgyMzYsIDB4ODU4NCwgMHg4RkVCLCAweDk2RjksCisgICAgMHg5OUMxLCAweDRGMzQsIDB4NTM0QSwgMHg1M0NELCAweDUzREIsIDB4NjJDQywgMHg2NDJDLCAweDY1MDAsCisgICAgMHg2NTkxLCAweDY5QzMsIDB4NkNFRSwgMHg2RjU4LCAweDczRUQsIDB4NzU1NCwgMHg3NjIyLCAweDc2RTQsCisgICAgMHg3NkZDLCAweDc4RDAsIDB4NzhGQiwgMHg3OTJDLCAweDdENDYsIDB4ODIyQywgMHg4N0UwLCAweDhGRDQsCisgICAgMHg5ODEyLCAweDk4RUYsIDB4NTJDMywgMHg2MkQ0LCAweDY0QTUsIDB4NkUyNCwgMHg2RjUxLCAweDc2N0MsCisgICAgMHg4RENCLCAweDkxQjEsIDB4OTI2MiwgMHg5QUVFLCAweDlCNDMsIDB4NTAyMywgMHg1MDhELCAweDU3NEEsCisgICAgMHg1OUE4LCAweDVDMjgsIDB4NUU0NywgMHg1Rjc3LCAweDYyM0YsIDB4NjUzRSwgMHg2NUI5LCAweDY1QzEsCisgICAgMHg2NjA5LCAweDY3OEIsIDB4Njk5QywgMHg2RUMyLCAweDc4QzUsIDB4N0QyMSwgMHg4MEFBLCAweDgxODAsCisgICAgMHg4MjJCLCAweDgyQjMsIDB4ODRBMSwgMHg4NjhDLCAweDhBMkEsIDB4OEIxNywgMHg5MEE2LCAweDk2MzIsCisgICAgMHg5RjkwLCAweDUwMEQsIDB4NEZGMywgMHg1N0Y5LCAweDVGOTgsIDB4NjJEQywgMHg2MzkyLCAweDY3NkYsCisgICAgMHg2RTQzLCAweDcxMTksIDB4NzZDMywgMHg4MENDLCAweDgwREEsIDB4ODhGNCwgMHg4OEY1LCAweDg5MTksCisgICAgMHg4Q0UwLCAweDhGMjksIDB4OTE0RCwgMHg5NjZBLCAweDRGMkYsIDB4NEY3MCwgMHg1RTFCLCAweDY3Q0YsCisgICAgMHg2ODIyLCAweDc2N0QsIDB4NzY3RSwgMHg5QjQ0LCAweDVFNjEsIDB4NkEwQSwgMHg3MTY5LCAweDcxRDQsCisgICAgMHg3NTZBLCAweDdFNDEsIDB4ODU0MywgMHg4NUU5LCAweDk4REMsIDB4NEYxMCwgMHg3QjRGLCAweDdGNzAsCisgICAgMHg5NUE1LCAweDUxRTEsIDB4NUUwNiwgMHg2OEI1LCAweDZDM0UsIDB4NkM0RSwgMHg2Q0RCLCAweDcyQUYsCisgICAgMHg3QkM0LCAweDgzMDMsIDB4NkNENSwgMHg3NDNBLCAweDUwRkIsIDB4NTI4OCwgMHg1OEMxLCAweDY0RDgsCisgICAgMHg2QTk3LCAweDc0QTcsIDB4NzY1NiwgMHg3OEE3LCAweDg2MTcsIDB4OTVFMiwgMHg5NzM5LCAweDUzNUUsCisgICAgMHg1RjAxLCAweDhCOEEsIDB4OEZBOCwgMHg4RkFGLCAweDkwOEEsIDB4NTIyNSwgMHg3N0E1LCAweDlDNDksCisgICAgMHg5RjA4LCAweDRFMTksIDB4NTAwMiwgMHg1MTc1LCAweDVDNUIsIDB4NUU3NywgMHg2NjFFLCAweDY2M0EsCisgICAgMHg2N0M0LCAweDY4QzUsIDB4NzBCMywgMHg3NTAxLCAweDc1QzUsIDB4NzlDOSwgMHg3QURELCAweDhGMjcsCisgICAgMHg5OTIwLCAweDlBMDgsIDB4NEZERCwgMHg1ODIxLCAweDU4MzEsIDB4NUJGNiwgMHg2NjZFLCAweDZCNjUsCisgICAgMHg2RDExLCAweDZFN0EsIDB4NkY3RCwgMHg3M0U0LCAweDc1MkIsIDB4ODNFOSwgMHg4OERDLCAweDg5MTMsCisgICAgMHg4QjVDLCAweDhGMTQsIDB4NEYwRiwgMHg1MEQ1LCAweDUzMTAsIDB4NTM1QywgMHg1QjkzLCAweDVGQTksCisgICAgMHg2NzBELCAweDc5OEYsIDB4ODE3OSwgMHg4MzJGLCAweDg1MTQsIDB4ODkwNywgMHg4OTg2LCAweDhGMzksCisgICAgMHg4RjNCLCAweDk5QTUsIDB4OUMxMiwgMHg2NzJDLCAweDRFNzYsIDB4NEZGOCwgMHg1OTQ5LCAweDVDMDEsCisgICAgMHg1Q0VGLCAweDVDRjAsIDB4NjM2NywgMHg2OEQyLCAweDcwRkQsIDB4NzFBMiwgMHg3NDJCLCAweDdFMkIsCisgICAgMHg4NEVDLCAweDg3MDIsIDB4OTAyMiwgMHg5MkQyLCAweDlDRjMsIDB4NEUwRCwgMHg0RUQ4LCAweDRGRUYsCisgICAgMHg1MDg1LCAweDUyNTYsIDB4NTI2RiwgMHg1NDI2LCAweDU0OTAsIDB4NTdFMCwgMHg1OTJCLCAweDVBNjYsCisgICAgMHg1QjVBLCAweDVCNzUsIDB4NUJDQywgMHg1RTlDLCAweDYyNzYsIDB4NjU3NywgMHg2NUE3LCAweDZENkUsCisgICAgMHg2RUE1LCAweDcyMzYsIDB4N0IyNiwgMHg3QzNGLCAweDdGMzYsIDB4ODE1MCwgMHg4MTUxLCAweDgxOUEsCisgICAgMHg4MjQwLCAweDgyOTksIDB4ODNBOSwgMHg4QTAzLCAweDhDQTAsIDB4OENFNiwgMHg4Q0ZCLCAweDhENzQsCisgICAgMHg4REJBLCAweDkwRTgsIDB4OTFEQywgMHg5NjFDLCAweDk2NDQsIDB4OTlEOSwgMHg5Q0U3LCAweDUzMTcsCisgICAgMHg1MjA2LCAweDU0MjksIDB4NTY3NCwgMHg1OEIzLCAweDU5NTQsIDB4NTk2RSwgMHg1RkZGLCAweDYxQTQsCisgICAgMHg2MjZFLCAweDY2MTAsIDB4NkM3RSwgMHg3MTFBLCAweDc2QzYsIDB4N0M4OSwgMHg3Q0RFLCAweDdEMUIsCisgICAgMHg4MkFDLCAweDhDQzEsIDB4OTZGMCwgMHg0RjVCLCAweDVGMTcsIDB4NUY3RiwgMHg2MkMyLCAweDVEMjksCisgICAgMHg2NzBCLCAweDY4REEsIDB4Nzg3QywgMHg3RTQzLCAweDlENkMsIDB4NEUxNSwgMHg1MDk5LCAweDUzMTUsCisgICAgMHg1MzJBLCAweDUzNTEsIDB4NTk4MywgMHg1QTYyLCAweDVFODcsIDB4NjBCMiwgMHg2MThBLCAweDYyNDksCisgICAgMHg2Mjc5LCAweDY1OTAsIDB4Njc4NywgMHg2OUE3LCAweDZCRDQsIDB4NkJENiwgMHg2QkQ3LCAweDZCRDgsCisgICAgMHg2Q0I4LCAweDc0MzUsIDB4NzVGQSwgMHg3ODEyLCAweDc4OTEsIDB4NzlENSwgMHg3OUQ4LCAweDdDODMsCisgICAgMHg3RENCLCAweDdGRTEsIDB4ODBBNSwgMHg4MTNFLCAweDgxQzIsIDB4ODNGMiwgMHg4NzFBLCAweDg4RTgsCisgICAgMHg4QUI5LCAweDhCNkMsIDB4OENCQiwgMHg5MTE5LCAweDk3NUUsIDB4OThEQiwgMHg5RjNCLCAweDU2QUMsCisgICAgMHg1QjJBLCAweDVGNkMsIDB4NjU4QywgMHg2QUIzLCAweDZCQUYsIDB4NkQ1QywgMHg2RkYxLCAweDcwMTUsCisgICAgMHg3MjVELCAweDczQUQsIDB4OENBNywgMHg4Q0QzLCAweDk4M0IsIDB4NjE5MSwgMHg2QzM3LCAweDgwNTgsCisgICAgMHg5QTAxLCAweDRFNEQsIDB4NEU4QiwgMHg0RTlCLCAweDRFRDUsIDB4NEYzQSwgMHg0RjNDLCAweDRGN0YsCisgICAgMHg0RkRGLCAweDUwRkYsIDB4NTNGMiwgMHg1M0Y4LCAweDU1MDYsIDB4NTVFMywgMHg1NkRCLCAweDU4RUIsCisgICAgMHg1OTYyLCAweDVBMTEsIDB4NUJFQiwgMHg1QkZBLCAweDVDMDQsIDB4NURGMywgMHg1RTJCLCAweDVGOTksCisgICAgMHg2MDFELCAweDYzNjgsIDB4NjU5QywgMHg2NUFGLCAweDY3RjYsIDB4NjdGQiwgMHg2OEFELCAweDZCN0IsCisgICAgMHg2Qzk5LCAweDZDRDcsIDB4NkUyMywgMHg3MDA5LCAweDczNDUsIDB4NzgwMiwgMHg3OTNFLCAweDc5NDAsCisgICAgMHg3OTYwLCAweDc5QzEsIDB4N0JFOSwgMHg3RDE3LCAweDdENzIsIDB4ODA4NiwgMHg4MjBELCAweDgzOEUsCisgICAgMHg4NEQxLCAweDg2QzcsIDB4ODhERiwgMHg4QTUwLCAweDhBNUUsIDB4OEIxRCwgMHg4Q0RDLCAweDhENjYsCisgICAgMHg4RkFELCAweDkwQUEsIDB4OThGQywgMHg5OURGLCAweDlFOUQsIDB4NTI0QSwgMHg2NzE0LCAweDUwOTgsCisgICAgMHg1MjJBLCAweDVDNzEsIDB4NjU2MywgMHg2QzU1LCAweDczQ0EsIDB4NzUyMywgMHg3NTlELCAweDdCOTcsCisgICAgMHg4NDlDLCAweDkxNzgsIDB4OTczMCwgMHg0RTc3LCAweDY0OTIsIDB4NkJCQSwgMHg3MTVFLCAweDg1QTksCisgICAgMHg0RTA5LCAweDY3NDksIDB4NjhFRSwgMHg2RTE3LCAweDgyOUYsIDB4ODUxOCwgMHg4ODZCLCAweDYzRjcsCisgICAgMHg2RjgxLCAweDkyMTIsIDB4OThBRiwgMHg0RTBBLCAweDUwQjcsIDB4NTBDRiwgMHg1MTFGLCAweDU1NDYsCisgICAgMHg1NUFBLCAweDU2MTcsIDB4NUI0MCwgMHg1QzE5LCAweDVDRTAsIDB4NUUzOCwgMHg1RThBLCAweDVFQTAsCisgICAgMHg1RUMyLCAweDYwRjMsIDB4Njg1MSwgMHg2QTYxLCAweDZFNTgsIDB4NzIzRCwgMHg3MjQwLCAweDcyQzAsCisgICAgMHg3NkY4LCAweDc5NjUsIDB4N0JCMSwgMHg3RkQ0LCAweDg4RjMsIDB4ODlGNCwgMHg4QTczLCAweDhDNjEsCisgICAgMHg4Q0RFLCAweDk3MUMsIDB4NTg1RSwgMHg3NEJELCAweDhDRkQsIDB4NTVDNywgMHg3QTYxLCAweDdEMjIsCisgICAgMHg4MjcyLCAweDcyNzIsIDB4NzUxRiwgMHg3NTI1LCAweDdCMTksIDB4NTg4NSwgMHg1OEZCLCAweDVEQkMsCisgICAgMHg1RThGLCAweDVFQjYsIDB4NUY5MCwgMHg2MDU1LCAweDYyOTIsIDB4NjM3RiwgMHg2NTRELCAweDY2OTEsCisgICAgMHg2NkQ5LCAweDY2RjgsIDB4NjgxNiwgMHg2OEYyLCAweDcyODAsIDB4NzQ1RSwgMHg3QjZFLCAweDdENkUsCisgICAgMHg3REQ2LCAweDdGNzIsIDB4ODBFNSwgMHg4MjEyLCAweDg1QUYsIDB4ODk3RiwgMHg4QTkzLCAweDkwMUQsCisgICAgMHg5MkU0LCAweDlFQ0QsIDB4OUYyMCwgMHg1OTE1LCAweDU5NkQsIDB4NUUyRCwgMHg2MERDLCAweDY2MTQsCisgICAgMHg2NjczLCAweDY3OTAsIDB4NkM1MCwgMHg2REM1LCAweDZGNUYsIDB4NzdGMywgMHg3OEE5LCAweDg0QzYsCisgICAgMHg5MUNCLCAweDkzMkIsIDB4NEVEOSwgMHg1MENBLCAweDUxNDgsIDB4NTU4NCwgMHg1QjBCLCAweDVCQTMsCisgICAgMHg2MjQ3LCAweDY1N0UsIDB4NjVDQiwgMHg2RTMyLCAweDcxN0QsIDB4NzQwMSwgMHg3NDQ0LCAweDc0ODcsCisgICAgMHg3NEJGLCAweDc2NkMsIDB4NzlBQSwgMHg3RERBLCAweDdFNTUsIDB4N0ZBOCwgMHg4MTdBLCAweDgxQjMsCisgICAgMHg4MjM5LCAweDg2MUEsIDB4ODdFQywgMHg4QTc1LCAweDhERTMsIDB4OTA3OCwgMHg5MjkxLCAweDk0MjUsCisgICAgMHg5OTRELCAweDlCQUUsIDB4NTM2OCwgMHg1QzUxLCAweDY5NTQsIDB4NkNDNCwgMHg2RDI5LCAweDZFMkIsCisgICAgMHg4MjBDLCAweDg1OUIsIDB4ODkzQiwgMHg4QTJELCAweDhBQUEsIDB4OTZFQSwgMHg5RjY3LCAweDUyNjEsCisgICAgMHg2NkI5LCAweDZCQjIsIDB4N0U5NiwgMHg4N0ZFLCAweDhEMEQsIDB4OTU4MywgMHg5NjVELCAweDY1MUQsCisgICAgMHg2RDg5LCAweDcxRUUsIDB4NTdDRSwgMHg1OUQzLCAweDVCQUMsIDB4NjAyNywgMHg2MEZBLCAweDYyMTAsCisgICAgMHg2NjFGLCAweDY2NUYsIDB4NzMyOSwgMHg3M0Y5LCAweDc2REIsIDB4NzcwMSwgMHg3QjZDLCAweDgwNTYsCisgICAgMHg4MDcyLCAweDgxNjUsIDB4OEFBMCwgMHg5MTkyLCAweDRFMTYsIDB4NTJFMiwgMHg2QjcyLCAweDZEMTcsCisgICAgMHg3QTA1LCAweDdCMzksIDB4N0QzMCwgMHg4Q0IwLCAweDUzRUMsIDB4NTYyRiwgMHg1ODUxLCAweDVCQjUsCisgICAgMHg1QzBGLCAweDVDMTEsIDB4NURFMiwgMHg2MjQwLCAweDYzODMsIDB4NjQxNCwgMHg2NjJELCAweDY4QjMsCisgICAgMHg2Q0JDLCAweDZEODgsIDB4NkVBRiwgMHg3MDFGLCAweDcwQTQsIDB4NzFEMiwgMHg3NTI2LCAweDc1OEYsCisgICAgMHg3NThFLCAweDc2MTksIDB4N0IxMSwgMHg3QkUwLCAweDdDMkIsIDB4N0QyMCwgMHg3RDM5LCAweDg1MkMsCisgICAgMHg4NTZELCAweDg2MDcsIDB4OEEzNCwgMHg5MDBELCAweDkwNjEsIDB4OTBCNSwgMHg5MkI3LCAweDk3RjYsCisgICAgMHg5QTM3LCAweDRGRDcsIDB4NUM2QywgMHg2NzVGLCAweDZEOTEsIDB4N0M5RiwgMHg3RThDLCAweDhCMTYsCisgICAgMHg4RDE2LCAweDkwMUYsIDB4NUI2QiwgMHg1REZELCAweDY0MEQsIDB4ODRDMCwgMHg5MDVDLCAweDk4RTEsCisgICAgMHg3Mzg3LCAweDVCOEIsIDB4NjA5QSwgMHg2NzdFLCAweDZEREUsIDB4OEExRiwgMHg4QUE2LCAweDkwMDEsCisgICAgMHg5ODBDLCAweDUyMzcsIDB4NzA1MSwgMHg3ODhFLCAweDkzOTYsIDB4ODg3MCwgMHg5MUQ3LCAweDRGRUUsCisgICAgMHg1M0Q3LCAweDU1RkQsIDB4NTZEQSwgMHg1NzgyLCAweDU4RkQsIDB4NUFDMiwgMHg1Qjg4LCAweDVDQUIsCisgICAgMHg1Q0MwLCAweDVFMjUsIDB4NjEwMSwgMHg2MjBELCAweDYyNEIsIDB4NjM4OCwgMHg2NDFDLCAweDY1MzYsCisgICAgMHg2NTc4LCAweDZBMzksIDB4NkI4QSwgMHg2QzM0LCAweDZEMTksIDB4NkYzMSwgMHg3MUU3LCAweDcyRTksCisgICAgMHg3Mzc4LCAweDc0MDcsIDB4NzRCMiwgMHg3NjI2LCAweDc3NjEsIDB4NzlDMCwgMHg3QTU3LCAweDdBRUEsCisgICAgMHg3Q0I5LCAweDdEOEYsIDB4N0RBQywgMHg3RTYxLCAweDdGOUUsIDB4ODEyOSwgMHg4MzMxLCAweDg0OTAsCisgICAgMHg4NERBLCAweDg1RUEsIDB4ODg5NiwgMHg4QUIwLCAweDhCOTAsIDB4OEYzOCwgMHg5MDQyLCAweDkwODMsCisgICAgMHg5MTZDLCAweDkyOTYsIDB4OTJCOSwgMHg5NjhCLCAweDk2QTcsIDB4OTZBOCwgMHg5NkQ2LCAweDk3MDAsCisgICAgMHg5ODA4LCAweDk5OTYsIDB4OUFEMywgMHg5QjFBLCAweDUzRDQsIDB4NTg3RSwgMHg1OTE5LCAweDVCNzAsCisgICAgMHg1QkJGLCAweDZERDEsIDB4NkY1QSwgMHg3MTlGLCAweDc0MjEsIDB4NzRCOSwgMHg4MDg1LCAweDgzRkQsCisgICAgMHg1REUxLCAweDVGODcsIDB4NUZBQSwgMHg2MDQyLCAweDY1RUMsIDB4NjgxMiwgMHg2OTZGLCAweDZBNTMsCisgICAgMHg2Qjg5LCAweDZEMzUsIDB4NkRGMywgMHg3M0UzLCAweDc2RkUsIDB4NzdBQywgMHg3QjRELCAweDdEMTQsCisgICAgMHg4MTIzLCAweDgyMUMsIDB4ODM0MCwgMHg4NEY0LCAweDg1NjMsIDB4OEE2MiwgMHg4QUM0LCAweDkxODcsCisgICAgMHg5MzFFLCAweDk4MDYsIDB4OTlCNCwgMHg2MjBDLCAweDg4NTMsIDB4OEZGMCwgMHg5MjY1LCAweDVEMDcsCisgICAgMHg1RDI3LCAweDVENjksIDB4NzQ1RiwgMHg4MTlELCAweDg3NjgsIDB4NkZENSwgMHg2MkZFLCAweDdGRDIsCisgICAgMHg4OTM2LCAweDg5NzIsIDB4NEUxRSwgMHg0RTU4LCAweDUwRTcsIDB4NTJERCwgMHg1MzQ3LCAweDYyN0YsCisgICAgMHg2NjA3LCAweDdFNjksIDB4ODgwNSwgMHg5NjVFLCAweDRGOEQsIDB4NTMxOSwgMHg1NjM2LCAweDU5Q0IsCisgICAgMHg1QUE0LCAweDVDMzgsIDB4NUM0RSwgMHg1QzRELCAweDVFMDIsIDB4NUYxMSwgMHg2MDQzLCAweDY1QkQsCisgICAgMHg2NjJGLCAweDY2NDIsIDB4NjdCRSwgMHg2N0Y0LCAweDczMUMsIDB4NzdFMiwgMHg3OTNBLCAweDdGQzUsCisgICAgMHg4NDk0LCAweDg0Q0QsIDB4ODk5NiwgMHg4QTY2LCAweDhBNjksIDB4OEFFMSwgMHg4QzU1LCAweDhDN0EsCisgICAgMHg1N0Y0LCAweDVCRDQsIDB4NUYwRiwgMHg2MDZGLCAweDYyRUQsIDB4NjkwRCwgMHg2Qjk2LCAweDZFNUMsCisgICAgMHg3MTg0LCAweDdCRDIsIDB4ODc1NSwgMHg4QjU4LCAweDhFRkUsIDB4OThERiwgMHg5OEZFLCAweDRGMzgsCisgICAgMHg0RjgxLCAweDRGRTEsIDB4NTQ3QiwgMHg1QTIwLCAweDVCQjgsIDB4NjEzQywgMHg2NUIwLCAweDY2NjgsCisgICAgMHg3MUZDLCAweDc1MzMsIDB4Nzk1RSwgMHg3RDMzLCAweDgxNEUsIDB4ODFFMywgMHg4Mzk4LCAweDg1QUEsCisgICAgMHg4NUNFLCAweDg3MDMsIDB4OEEwQSwgMHg4RUFCLCAweDhGOUIsIDB4OEZDNSwgMHg1OTMxLCAweDVCQTQsCisgICAgMHg1QkU2LCAweDYwODksIDB4NUJFOSwgMHg1QzBCLCAweDVGQzMsIDB4NkM4MSwgMHg2REYxLCAweDcwMEIsCisgICAgMHg3NTFBLCAweDgyQUYsIDB4OEFGNiwgMHg0RUMwLCAweDUzNDEsIDB4OTZEOSwgMHg2QzBGLCAweDRFOUUsCisgICAgMHg0RkM0LCAweDUxNTIsIDB4NTU1RSwgMHg1QTI1LCAweDVDRTgsIDB4NjIxMSwgMHg3MjU5LCAweDgyQkQsCisgICAgMHg4M0FBLCAweDg2RkUsIDB4ODg1OSwgMHg4QTFELCAweDk2M0YsIDB4OTZDNSwgMHg5OTEzLCAweDlEMDksCisgICAgMHg5RDVELCAweDU4MEEsIDB4NUNCMywgMHg1REJELCAweDVFNDQsIDB4NjBFMSwgMHg2MTE1LCAweDYzRTEsCisgICAgMHg2QTAyLCAweDZFMjUsIDB4OTEwMiwgMHg5MzU0LCAweDk4NEUsIDB4OUMxMCwgMHg5Rjc3LCAweDVCODksCisgICAgMHg1Q0I4LCAweDYzMDksIDB4NjY0RiwgMHg2ODQ4LCAweDc3M0MsIDB4OTZDMSwgMHg5NzhELCAweDk4NTQsCisgICAgMHg5QjlGLCAweDY1QTEsIDB4OEIwMSwgMHg4RUNCLCAweDk1QkMsIDB4NTUzNSwgMHg1Q0E5LCAweDVERDYsCisgICAgMHg1RUI1LCAweDY2OTcsIDB4NzY0QywgMHg4M0Y0LCAweDk1QzcsIDB4NThEMywgMHg2MkJDLCAweDcyQ0UsCisgICAgMHg5RDI4LCAweDRFRjAsIDB4NTkyRSwgMHg2MDBGLCAweDY2M0IsIDB4NkI4MywgMHg3OUU3LCAweDlEMjYsCisgICAgMHg1MzkzLCAweDU0QzAsIDB4NTdDMywgMHg1RDE2LCAweDYxMUIsIDB4NjZENiwgMHg2REFGLCAweDc4OEQsCisgICAgMHg4MjdFLCAweDk2OTgsIDB4OTc0NCwgMHg1Mzg0LCAweDYyN0MsIDB4NjM5NiwgMHg2REIyLCAweDdFMEEsCisgICAgMHg4MTRCLCAweDk4NEQsIDB4NkFGQiwgMHg3RjRDLCAweDlEQUYsIDB4OUUxQSwgMHg0RTVGLCAweDUwM0IsCisgICAgMHg1MUI2LCAweDU5MUMsIDB4NjBGOSwgMHg2M0Y2LCAweDY5MzAsIDB4NzIzQSwgMHg4MDM2LCAweDkxQ0UsCisgICAgMHg1RjMxLCAweDdEMDQsIDB4ODJFNSwgMHg4NDZGLCAweDg0QkIsIDB4ODVFNSwgMHg4RThELCAweDRGNkYsCisgICAgMHg1OEU0LCAweDVCNDMsIDB4NjA1OSwgMHg2M0RBLCAweDY1MTgsIDB4NjU2RCwgMHg2Njk4LCAweDY5NEEsCisgICAgMHg2QTIzLCAweDZEMEIsIDB4NzAwMSwgMHg3MTZDLCAweDc1RDIsIDB4NzYwRCwgMHg3OUIzLCAweDdBNzAsCisgICAgMHg3RjhBLCAweDg5NDQsIDB4OEI5MywgMHg5MUMwLCAweDk2N0QsIDB4OTkwQSwgMHg1NzA0LCAweDVGQTEsCisgICAgMHg2NUJDLCAweDZGMDEsIDB4NzYwMCwgMHg3OUE2LCAweDhBOUUsIDB4OTlBRCwgMHg5QjVBLCAweDlGNkMsCisgICAgMHg1MTA0LCAweDYxQjYsIDB4NjI5MSwgMHg2QThELCAweDgxQzYsIDB4NTA0MywgMHg1ODMwLCAweDVGNjYsCisgICAgMHg3MTA5LCAweDhBMDAsIDB4OEFGQSwgMHg1QjdDLCAweDg2MTYsIDB4NEZGQSwgMHg1MTNDLCAweDU2QjQsCisgICAgMHg1OTQ0LCAweDYzQTksIDB4NkRGOSwgMHg1REFBLCAweDY5NkQsIDB4NTE4NiwgMHg0RTg4LCAweDRGNTksCisgICAgMHg1OTgyLCAweDZCNUYsIDB4NkM1RCwgMHg3NEI1LCAweDc5MTYsIDB4ODIwNywgMHg4MjQ1LCAweDgzMzksCisgICAgMHg4RjNGLCAweDhGNUQsIDB4OTkxOCwgMHg0RUE2LCAweDU3REYsIDB4NUY3OSwgMHg2NjEzLCAweDc1QUIsCisgICAgMHg3RTc5LCAweDhCNkYsIDB4OTAwNiwgMHg5QTVCLCAweDU2QTUsIDB4NTgyNywgMHg1OUY4LCAweDVBMUYsCisgICAgMHg1QkI0LCAweDVFRjYsIDB4NjM1MCwgMHg2MzNCLCAweDY5M0QsIDB4NkM4NywgMHg2Q0JGLCAweDZEOEUsCisgICAgMHg2RDkzLCAweDZERjUsIDB4NkYxNCwgMHg3MERGLCAweDcxMzYsIDB4NzE1OSwgMHg3MUMzLCAweDcxRDUsCisgICAgMHg3ODRGLCAweDc4NkYsIDB4N0I3NSwgMHg3REUzLCAweDdFMkYsIDB4ODg0RCwgMHg4RURGLCAweDkyNUIsCisgICAgMHg5Q0Y2LCAweDYwODUsIDB4NkQ4NSwgMHg3MUIxLCAweDk1QjEsIDB4NTNBRCwgMHg2N0QzLCAweDcwOEUsCisgICAgMHg3MTMwLCAweDc0MzAsIDB4ODI3NiwgMHg4MkQyLCAweDk1QkIsIDB4OUFFNSwgMHg5RTdELCAweDY2QzQsCisgICAgMHg3MUMxLCAweDg0NDksIDB4NTg0QiwgMHg1REI4LCAweDVGNzEsIDB4NjYyMCwgMHg2NjhFLCAweDY5NzksCisgICAgMHg2OUFFLCAweDZDMzgsIDB4NkNGMywgMHg2RTM2LCAweDZGNDEsIDB4NkZEQSwgMHg3MDFCLCAweDcwMkYsCisgICAgMHg3MTUwLCAweDcxREYsIDB4NzM3MCwgMHg3NDVCLCAweDc0RDQsIDB4NzZDOCwgMHg3QTRFLCAweDdFOTMsCisgICAgMHg4MkYxLCAweDhBNjAsIDB4OEZDRSwgMHg5MzQ4LCAweDk3MTksIDB4NEU0MiwgMHg1MDJBLCAweDUyMDgsCisgICAgMHg1M0UxLCAweDY2RjMsIDB4NkM2RCwgMHg2RkNBLCAweDczMEEsIDB4Nzc3RiwgMHg3QTYyLCAweDgyQUUsCisgICAgMHg4NURELCAweDg2MDIsIDB4ODhENCwgMHg4QTYzLCAweDhCN0QsIDB4OEM2QiwgMHg5MkIzLCAweDk3MTMsCisgICAgMHg5ODEwLCAweDRFOTQsIDB4NEYwRCwgMHg0RkM5LCAweDUwQjIsIDB4NTM0OCwgMHg1NDNFLCAweDU0MzMsCisgICAgMHg1NURBLCAweDU4NjIsIDB4NThCQSwgMHg1OTY3LCAweDVBMUIsIDB4NUJFNCwgMHg2MDlGLCAweDYxQ0EsCisgICAgMHg2NTU2LCAweDY1RkYsIDB4NjY2NCwgMHg2OEE3LCAweDZDNUEsIDB4NkZCMywgMHg3MENGLCAweDcxQUMsCisgICAgMHg3MzUyLCAweDdCN0QsIDB4ODcwOCwgMHg4QUE0LCAweDlDMzIsIDB4OUYwNywgMHg1QzRCLCAweDZDODMsCisgICAgMHg3MzQ0LCAweDczODksIDB4OTIzQSwgMHg2RUFCLCAweDc0NjUsIDB4NzYxRiwgMHg3QTY5LCAweDdFMTUsCisgICAgMHg4NjBBLCAweDUxNDAsIDB4NThDNSwgMHg2NEMxLCAweDc0RUUsIDB4NzUxNSwgMHg3NjcwLCAweDdGQzEsCisgICAgMHg5MDk1LCAweDk2Q0QsIDB4OTk1NCwgMHg2RTI2LCAweDc0RTYsIDB4N0FBOSwgMHg3QUFBLCAweDgxRTUsCisgICAgMHg4NkQ5LCAweDg3NzgsIDB4OEExQiwgMHg1QTQ5LCAweDVCOEMsIDB4NUI5QiwgMHg2OEExLCAweDY5MDAsCisgICAgMHg2RDYzLCAweDczQTksIDB4NzQxMywgMHg3NDJDLCAweDc4OTcsIDB4N0RFOSwgMHg3RkVCLCAweDgxMTgsCisgICAgMHg4MTU1LCAweDgzOUUsIDB4OEM0QywgMHg5NjJFLCAweDk4MTEsIDB4NjZGMCwgMHg1RjgwLCAweDY1RkEsCisgICAgMHg2Nzg5LCAweDZDNkEsIDB4NzM4QiwgMHg1MDJELCAweDVBMDMsIDB4NkI2QSwgMHg3N0VFLCAweDU5MTYsCisgICAgMHg1RDZDLCAweDVEQ0QsIDB4NzMyNSwgMHg3NTRGLCAweDUwRTUsIDB4NTFGOSwgMHg1ODJGLCAweDU5MkQsCisgICAgMHg1OTk2LCAweDU5REEsIDB4NUJFNSwgMHg1REEyLCAweDYyRDcsIDB4NjQxNiwgMHg2NDkzLCAweDY0RkUsCisgICAgMHg2NkRDLCAweDZBNDgsIDB4NzFGRiwgMHg3NDY0LCAweDdBODgsIDB4N0FBRiwgMHg3RTQ3LCAweDdFNUUsCisgICAgMHg4MDAwLCAweDgxNzAsIDB4ODdFRiwgMHg4OTgxLCAweDhCMjAsIDB4OTA1OSwgMHg5MDgwLCAweDk5NTIsCisgICAgMHg2MTdFLCAweDZCMzIsIDB4NkQ3NCwgMHg3RTFGLCAweDg5MjUsIDB4OEZCMSwgMHg0RkQxLCAweDUwQUQsCisgICAgMHg1MTk3LCAweDUyQzcsIDB4NTdDNywgMHg1ODg5LCAweDVCQjksIDB4NUVCOCwgMHg2MTQyLCAweDY5OTUsCisgICAgMHg2RDhDLCAweDZFNjcsIDB4NkVCNiwgMHg3MTk0LCAweDc0NjIsIDB4NzUyOCwgMHg3NTJDLCAweDgwNzMsCisgICAgMHg4MzM4LCAweDg0QzksIDB4OEUwQSwgMHg5Mzk0LCAweDkzREUsIDB4NEU4RSwgMHg0RjUxLCAweDUwNzYsCisgICAgMHg1MTJBLCAweDUzQzgsIDB4NTNDQiwgMHg1M0YzLCAweDVCODcsIDB4NUJEMywgMHg1QzI0LCAweDYxMUEsCisgICAgMHg2MTgyLCAweDY1RjQsIDB4NzI1QiwgMHg3Mzk3LCAweDc0NDAsIDB4NzZDMiwgMHg3OTUwLCAweDc5OTEsCisgICAgMHg3OUI5LCAweDdEMDYsIDB4N0ZCRCwgMHg4MjhCLCAweDg1RDUsIDB4ODY1RSwgMHg4RkMyLCAweDkwNDcsCisgICAgMHg5MEY1LCAweDkxRUEsIDB4OTY4NSwgMHg5NkU4LCAweDk2RTksIDB4NTJENiwgMHg1RjY3LCAweDY1RUQsCisgICAgMHg2NjMxLCAweDY4MkYsIDB4NzE1QywgMHg3QTM2LCAweDkwQzEsIDB4OTgwQSwgMHg0RTkxLCAweDZBNTIsCisgICAgMHg2QjlFLCAweDZGOTAsIDB4NzE4OSwgMHg4MDE4LCAweDgyQjgsIDB4ODU1MywgMHg5MDRCLCAweDk2OTUsCisgICAgMHg5NkYyLCAweDk3RkIsIDB4ODUxQSwgMHg5QjMxLCAweDRFOTAsIDB4NzE4QSwgMHg5NkM0LCAweDUxNDMsCisgICAgMHg1MzlGLCAweDU0RTEsIDB4NTcxMywgMHg1NzEyLCAweDU3QTMsIDB4NUE5QiwgMHg1QUM0LCAweDVCQzMsCisgICAgMHg2MDI4LCAweDYxM0YsIDB4NjNGNCwgMHg2Qzg1LCAweDZEMzksIDB4NkU3MiwgMHg2RTkwLCAweDcyMzAsCisgICAgMHg3MzNGLCAweDc0NTcsIDB4ODJEMSwgMHg4ODgxLCAweDhGNDUsIDB4OTA2MCwgMHg5NjYyLCAweDk4NTgsCisgICAgMHg5RDFCLCAweDY3MDgsIDB4OEQ4QSwgMHg5MjVFLCAweDRGNEQsIDB4NTA0OSwgMHg1MERFLCAweDUzNzEsCisgICAgMHg1NzBELCAweDU5RDQsIDB4NUEwMSwgMHg1QzA5LCAweDYxNzAsIDB4NjY5MCwgMHg2RTJELCAweDcyMzIsCisgICAgMHg3NDRCLCAweDdERUYsIDB4ODBDMywgMHg4NDBFLCAweDg0NjYsIDB4ODUzRiwgMHg4NzVGLCAweDg4NUIsCisgICAgMHg4OTE4LCAweDhCMDIsIDB4OTA1NSwgMHg5N0NCLCAweDlCNEYsIDB4NEU3MywgMHg0RjkxLCAweDUxMTIsCisgICAgMHg1MTZBLCAweDU1MkYsIDB4NTVBOSwgMHg1QjdBLCAweDVCQTUsIDB4NUU3QywgMHg1RTdELCAweDVFQkUsCisgICAgMHg2MEEwLCAweDYwREYsIDB4NjEwOCwgMHg2MTA5LCAweDYzQzQsIDB4NjUzOCwgMHg2NzA5LCAweDY3RDQsCisgICAgMHg2N0RBLCAweDY5NjEsIDB4Njk2MiwgMHg2Q0I5LCAweDZEMjcsIDB4NkUzOCwgMHg2RkUxLCAweDczMzYsCisgICAgMHg3MzM3LCAweDc0NUMsIDB4NzUzMSwgMHg3NjUyLCAweDdEQUQsIDB4ODFGRSwgMHg4NDM4LCAweDg4RDUsCisgICAgMHg4QTk4LCAweDhBREIsIDB4OEFFRCwgMHg4RTMwLCAweDhFNDIsIDB4OTA0QSwgMHg5MDNFLCAweDkwN0EsCisgICAgMHg5MTQ5LCAweDkxQzksIDB4OTM2RSwgMHg1ODA5LCAweDZCRDMsIDB4ODA4OSwgMHg4MEIyLCAweDUxNDEsCisgICAgMHg1OTZCLCAweDVDMzksIDB4NkY2NCwgMHg3M0E3LCAweDgwRTQsIDB4OEQwNywgMHg5MjE3LCAweDk1OEYsCisgICAgMHg4MDdGLCAweDYyMEUsIDB4NzAxQywgMHg3RDY4LCAweDg3OEQsIDB4NTdBMCwgMHg2MDY5LCAweDYxNDcsCisgICAgMHg2QkI3LCAweDhBQkUsIDB4OTI4MCwgMHg5NkIxLCAweDRFNTksIDB4NTQxRiwgMHg2REVCLCAweDg1MkQsCisgICAgMHg5NjcwLCAweDk3RjMsIDB4OThFRSwgMHg2M0Q2LCAweDZDRTMsIDB4OTA5MSwgMHg1MURELCAweDYxQzksCisgICAgMHg4MUJBLCAweDlERjksIDB4NEY5RCwgMHg1MDFBLCAweDUxMDAsIDB4NUI5QywgMHg2MTBGLCAweDYxRkYsCisgICAgMHg2NEVDLCAweDY5MDUsIDB4NkJDNSwgMHg3NTkxLCAweDc3RTMsIDB4N0ZBOSwgMHg4MjY0LCAweDg1OEYsCisgICAgMHg4N0ZCLCAweDg4NjMsIDB4OEFCQywgMHg4QjcwLCAweDkxQUIsIDB4NEU4QywgMHg0RUU1LCAweDRGMEEsCisgICAgMHg1OTM3LCAweDU5RTgsIDB4NURGMiwgMHg1RjFCLCAweDVGNUIsIDB4NjAyMSwgMHg3MjNFLCAweDczRTUsCisgICAgMHg3NTcwLCAweDc1Q0QsIDB4NzlGQiwgMHg4MDBDLCAweDgwMzMsIDB4ODA4NCwgMHg4MkUxLCAweDgzNTEsCisgICAgMHg4Q0JELCAweDhDQjMsIDB4OTA4NywgMHg5OEY0LCAweDk5MEMsIDB4NzAzNywgMHg3NkNBLCAweDdGQ0EsCisgICAgMHg3RkNDLCAweDdGRkMsIDB4OEIxQSwgMHg0RUJBLCAweDRFQzEsIDB4NTIwMywgMHg1MzcwLCAweDU0QkQsCisgICAgMHg1NkUwLCAweDU5RkIsIDB4NUJDNSwgMHg1RjE1LCAweDVGQ0QsIDB4NkU2RSwgMHg3RDZBLCAweDgzMzUsCisgICAgMHg4NjkzLCAweDhBOEQsIDB4OTc2RCwgMHg5Nzc3LCAweDRFMDAsIDB4NEY1QSwgMHg0RjdFLCAweDU4RjksCisgICAgMHg2NUU1LCAweDZFQTIsIDB4OTAzOCwgMHg5M0IwLCAweDk5QjksIDB4NEVGQiwgMHg1OEVDLCAweDU5OEEsCisgICAgMHg1OUQ5LCAweDYwNDEsIDB4N0ExNCwgMHg4MzRGLCAweDhDQzMsIDB4NTE2NSwgMHg1MzQ0LCAweDRFQ0QsCisgICAgMHg1MjY5LCAweDVCNTUsIDB4ODJCRiwgMHg0RUQ0LCAweDUyM0EsIDB4NTRBOCwgMHg1OUM5LCAweDU5RkYsCisgICAgMHg1QjUwLCAweDVCNTcsIDB4NUI1QywgMHg2MDYzLCAweDYxNDgsIDB4NkVDQiwgMHg3MDk5LCAweDcxNkUsCisgICAgMHg3Mzg2LCAweDc0RjcsIDB4NzVCNSwgMHg3OEMxLCAweDdEMkIsIDB4ODAwNSwgMHg4MUVBLCAweDgzMjgsCisgICAgMHg4NTE3LCAweDg1QzksIDB4OEFFRSwgMHg4Q0M3LCAweDk2Q0MsIDB4NEY1QywgMHg1MkZBLCAweDU2QkMsCisgICAgMHg2NUFCLCAweDY2MjgsIDB4NzA3QywgMHg3MEI4LCAweDcyMzUsIDB4N0RCRCwgMHg4MjhELCAweDkxNEMsCisgICAgMHg5NkMwLCAweDlENzIsIDB4NUI3MSwgMHg2OEU3LCAweDZCOTgsIDB4NkY3QSwgMHg3NkRFLCAweDVDOTEsCisgICAgMHg2NkFCLCAweDZGNUIsIDB4N0JCNCwgMHg3QzJBLCAweDg4MzYsIDB4OTZEQywgMHg0RTA4LCAweDRFRDcsCisgICAgMHg1MzIwLCAweDU4MzQsIDB4NThCQiwgMHg1OEVGLCAweDU5NkMsIDB4NUMwNywgMHg1RTMzLCAweDVFODQsCisgICAgMHg1RjM1LCAweDYzOEMsIDB4NjZCMiwgMHg2NzU2LCAweDZBMUYsIDB4NkFBMywgMHg2QjBDLCAweDZGM0YsCisgICAgMHg3MjQ2LCAweDczNTAsIDB4NzQ4QiwgMHg3QUUwLCAweDdDQTcsIDB4ODE3OCwgMHg4MURGLCAweDgxRTcsCisgICAgMHg4MzhBLCAweDg0NkMsIDB4ODUyMywgMHg4NTk0LCAweDg1Q0YsIDB4ODhERCwgMHg4RDEzLCAweDkxQUMsCisgICAgMHg5NTc3LCAweDk2OUMsIDB4NTE4RCwgMHg1NEM5LCAweDU3MjgsIDB4NUJCMCwgMHg2MjRELCAweDY3NTAsCisgICAgMHg2ODNELCAweDY4OTMsIDB4NkUzRCwgMHg2RUQzLCAweDcwN0QsIDB4N0UyMSwgMHg4OEMxLCAweDhDQTEsCisgICAgMHg4RjA5LCAweDlGNEIsIDB4OUY0RSwgMHg3MjJELCAweDdCOEYsIDB4OEFDRCwgMHg5MzFBLCAweDRGNDcsCisgICAgMHg0RjRFLCAweDUxMzIsIDB4NTQ4MCwgMHg1OUQwLCAweDVFOTUsIDB4NjJCNSwgMHg2Nzc1LCAweDY5NkUsCisgICAgMHg2QTE3LCAweDZDQUUsIDB4NkUxQSwgMHg3MkQ5LCAweDczMkEsIDB4NzVCRCwgMHg3QkI4LCAweDdEMzUsCisgICAgMHg4MkU3LCAweDgzRjksIDB4ODQ1NywgMHg4NUY3LCAweDhBNUIsIDB4OENBRiwgMHg4RTg3LCAweDkwMTksCisgICAgMHg5MEI4LCAweDk2Q0UsIDB4OUY1RiwgMHg1MkUzLCAweDU0MEEsIDB4NUFFMSwgMHg1QkMyLCAweDY0NTgsCisgICAgMHg2NTc1LCAweDZFRjQsIDB4NzJDNCwgMHg3Njg0LCAweDdBNEQsIDB4N0IxQiwgMHg3QzRELCAweDdFM0UsCisgICAgMHg3RkRGLCAweDgzN0IsIDB4OEIyQiwgMHg4Q0NBLCAweDhENjQsIDB4OERFMSwgMHg4RTVGLCAweDhGRUEsCisgICAgMHg4RkY5LCAweDkwNjksIDB4OTNEMSwgMHg0RjQzLCAweDRGN0EsIDB4NTBCMywgMHg1MTY4LCAweDUxNzgsCisgICAgMHg1MjRELCAweDUyNkEsIDB4NTg2MSwgMHg1ODdDLCAweDU5NjAsIDB4NUMwOCwgMHg1QzU1LCAweDVFREIsCisgICAgMHg2MDlCLCAweDYyMzAsIDB4NjgxMywgMHg2QkJGLCAweDZDMDgsIDB4NkZCMSwgMHg3MTRFLCAweDc0MjAsCisgICAgMHg3NTMwLCAweDc1MzgsIDB4NzU1MSwgMHg3NjcyLCAweDdCNEMsIDB4N0I4QiwgMHg3QkFELCAweDdCQzYsCisgICAgMHg3RThGLCAweDhBNkUsIDB4OEYzRSwgMHg4RjQ5LCAweDkyM0YsIDB4OTI5MywgMHg5MzIyLCAweDk0MkIsCisgICAgMHg5NkZCLCAweDk4NUEsIDB4OTg2QiwgMHg5OTFFLCAweDUyMDcsIDB4NjIyQSwgMHg2Mjk4LCAweDZENTksCisgICAgMHg3NjY0LCAweDdBQ0EsIDB4N0JDMCwgMHg3RDc2LCAweDUzNjAsIDB4NUNCRSwgMHg1RTk3LCAweDZGMzgsCisgICAgMHg3MEI5LCAweDdDOTgsIDB4OTcxMSwgMHg5QjhFLCAweDlFREUsIDB4NjNBNSwgMHg2NDdBLCAweDg3NzYsCisgICAgMHg0RTAxLCAweDRFOTUsIDB4NEVBRCwgMHg1MDVDLCAweDUwNzUsIDB4NTQ0OCwgMHg1OUMzLCAweDVCOUEsCisgICAgMHg1RTQwLCAweDVFQUQsIDB4NUVGNywgMHg1RjgxLCAweDYwQzUsIDB4NjMzQSwgMHg2NTNGLCAweDY1NzQsCisgICAgMHg2NUNDLCAweDY2NzYsIDB4NjY3OCwgMHg2N0ZFLCAweDY5NjgsIDB4NkE4OSwgMHg2QjYzLCAweDZDNDAsCisgICAgMHg2REMwLCAweDZERTgsIDB4NkUxRiwgMHg2RTVFLCAweDcwMUUsIDB4NzBBMSwgMHg3MzhFLCAweDczRkQsCisgICAgMHg3NTNBLCAweDc3NUIsIDB4Nzg4NywgMHg3OThFLCAweDdBMEIsIDB4N0E3RCwgMHg3Q0JFLCAweDdEOEUsCisgICAgMHg4MjQ3LCAweDhBMDIsIDB4OEFFQSwgMHg4QzlFLCAweDkxMkQsIDB4OTE0QSwgMHg5MUQ4LCAweDkyNjYsCisgICAgMHg5MkNDLCAweDkzMjAsIDB4OTcwNiwgMHg5NzU2LCAweDk3NUMsIDB4OTgwMiwgMHg5RjBFLCAweDUyMzYsCisgICAgMHg1MjkxLCAweDU1N0MsIDB4NTgyNCwgMHg1RTFELCAweDVGMUYsIDB4NjA4QywgMHg2M0QwLCAweDY4QUYsCisgICAgMHg2RkRGLCAweDc5NkQsIDB4N0IyQywgMHg4MUNELCAweDg1QkEsIDB4ODhGRCwgMHg4QUY4LCAweDhFNDQsCisgICAgMHg5MThELCAweDk2NjQsIDB4OTY5QiwgMHg5NzNELCAweDk4NEMsIDB4OUY0QSwgMHg0RkNFLCAweDUxNDYsCisgICAgMHg1MUNCLCAweDUyQTksIDB4NTYzMiwgMHg1RjE0LCAweDVGNkIsIDB4NjNBQSwgMHg2NENELCAweDY1RTksCisgICAgMHg2NjQxLCAweDY2RkEsIDB4NjZGOSwgMHg2NzFELCAweDY4OUQsIDB4NjhENywgMHg2OUZELCAweDZGMTUsCisgICAgMHg2RjZFLCAweDcxNjcsIDB4NzFFNSwgMHg3MjJBLCAweDc0QUEsIDB4NzczQSwgMHg3OTU2LCAweDc5NUEsCisgICAgMHg3OURGLCAweDdBMjAsIDB4N0E5NSwgMHg3Qzk3LCAweDdDREYsIDB4N0Q0NCwgMHg3RTcwLCAweDgwODcsCisgICAgMHg4NUZCLCAweDg2QTQsIDB4OEE1NCwgMHg4QUJGLCAweDhEOTksIDB4OEU4MSwgMHg5MDIwLCAweDkwNkQsCisgICAgMHg5MUUzLCAweDk2M0IsIDB4OTZENSwgMHg5Q0U1LCAweDY1Q0YsIDB4N0MwNywgMHg4REIzLCAweDkzQzMsCisgICAgMHg1QjU4LCAweDVDMEEsIDB4NTM1MiwgMHg2MkQ5LCAweDczMUQsIDB4NTAyNywgMHg1Qjk3LCAweDVGOUUsCisgICAgMHg2MEIwLCAweDYxNkIsIDB4NjhENSwgMHg2REQ5LCAweDc0MkUsIDB4N0EyRSwgMHg3RDQyLCAweDdEOUMsCisgICAgMHg3RTMxLCAweDgxNkIsIDB4OEUyQSwgMHg4RTM1LCAweDkzN0UsIDB4OTQxOCwgMHg0RjUwLCAweDU3NTAsCisgICAgMHg1REU2LCAweDVFQTcsIDB4NjMyQiwgMHg3RjZBLCAweDRFM0IsIDB4NEY0RiwgMHg0RjhGLCAweDUwNUEsCisgICAgMHg1OURELCAweDgwQzQsIDB4NTQ2QSwgMHg1NDY4LCAweDU1RkUsIDB4NTk0RiwgMHg1Qjk5LCAweDVEREUsCisgICAgMHg1RURBLCAweDY2NUQsIDB4NjczMSwgMHg2N0YxLCAweDY4MkEsIDB4NkNFOCwgMHg2RDMyLCAweDZFNEEsCisgICAgMHg2RjhELCAweDcwQjcsIDB4NzNFMCwgMHg3NTg3LCAweDdDNEMsIDB4N0QwMiwgMHg3RDJDLCAweDdEQTIsCisgICAgMHg4MjFGLCAweDg2REIsIDB4OEEzQiwgMHg4QTg1LCAweDhENzAsIDB4OEU4QSwgMHg4RjMzLCAweDkwMzEsCisgICAgMHg5MTRFLCAweDkxNTIsIDB4OTQ0NCwgMHg5OUQwLCAweDdBRjksIDB4N0NBNSwgMHg0RkNBLCAweDUxMDEsCisgICAgMHg1MUM2LCAweDU3QzgsIDB4NUJFRiwgMHg1Q0ZCLCAweDY2NTksIDB4NkEzRCwgMHg2RDVBLCAweDZFOTYsCisgICAgMHg2RkVDLCAweDcxMEMsIDB4NzU2RiwgMHg3QUUzLCAweDg4MjIsIDB4OTAyMSwgMHg5MDc1LCAweDk2Q0IsCisgICAgMHg5OUZGLCAweDgzMDEsIDB4NEUyRCwgMHg0RUYyLCAweDg4NDYsIDB4OTFDRCwgMHg1MzdELCAweDZBREIsCisgICAgMHg2OTZCLCAweDZDNDEsIDB4ODQ3QSwgMHg1ODlFLCAweDYxOEUsIDB4NjZGRSwgMHg2MkVGLCAweDcwREQsCisgICAgMHg3NTExLCAweDc1QzcsIDB4N0U1MiwgMHg4NEI4LCAweDhCNDksIDB4OEQwOCwgMHg0RTRCLCAweDUzRUEsCisgICAgMHg1NEFCLCAweDU3MzAsIDB4NTc0MCwgMHg1RkQ3LCAweDYzMDEsIDB4NjMwNywgMHg2NDZGLCAweDY1MkYsCisgICAgMHg2NUU4LCAweDY2N0EsIDB4Njc5RCwgMHg2N0IzLCAweDZCNjIsIDB4NkM2MCwgMHg2QzlBLCAweDZGMkMsCisgICAgMHg3N0U1LCAweDc4MjUsIDB4Nzk0OSwgMHg3OTU3LCAweDdEMTksIDB4ODBBMiwgMHg4MTAyLCAweDgxRjMsCisgICAgMHg4MjlELCAweDgyQjcsIDB4ODcxOCwgMHg4QThDLCAweDhEMDQsIDB4OERCRSwgMHg5MDcyLCAweDc2RjQsCisgICAgMHg3QTE5LCAweDdBMzcsIDB4N0U1NCwgMHg4MDc3LCAweDU1MDcsIDB4NTVENCwgMHg1ODc1LCAweDYzMkYsCisgICAgMHg2NDIyLCAweDY2NDksIDB4NjY0QiwgMHg2ODZELCAweDY5OUIsIDB4NkI4NCwgMHg2RDI1LCAweDZFQjEsCisgICAgMHg3M0NELCAweDc0NjgsIDB4NzRBMSwgMHg3NTVCLCAweDc1QjksIDB4NzZFMSwgMHg3NzFFLCAweDc3OEIsCisgICAgMHg3OUU2LCAweDdFMDksIDB4N0UxRCwgMHg4MUZCLCAweDg1MkYsIDB4ODg5NywgMHg4QTNBLCAweDhDRDEsCisgICAgMHg4RUVCLCAweDhGQjAsIDB4OTAzMiwgMHg5M0FELCAweDk2NjMsIDB4OTY3MywgMHg5NzA3LCAweDRGODQsCisgICAgMHg1M0YxLCAweDU5RUEsIDB4NUFDOSwgMHg1RTE5LCAweDY4NEUsIDB4NzRDNiwgMHg3NUJFLCAweDc5RTksCisgICAgMHg3QTkyLCAweDgxQTMsIDB4ODZFRCwgMHg4Q0VBLCAweDhEQ0MsIDB4OEZFRCwgMHg2NTlGLCAweDY3MTUsCisgICAgMHg1N0Y3LCAweDZGNTcsIDB4N0RERCwgMHg4RjJGLCAweDkzRjYsIDB4OTZDNiwgMHg1RkI1LCAweDYxRjIsCisgICAgMHg2Rjg0LCAweDRFMTQsIDB4NEY5OCwgMHg1MDFGLCAweDUzQzksIDB4NTVERiwgMHg1RDZGLCAweDVERUUsCisgICAgMHg2QjIxLCAweDZCNjQsIDB4NzhDQiwgMHg3QjlBLCAweDhFNDksIDB4OEVDQSwgMHg5MDZFLCAweDYzNDksCisgICAgMHg2NDNFLCAweDc3NDAsIDB4N0E4NCwgMHg5MzJGLCAweDk0N0YsIDB4OUY2QSwgMHg2NEIwLCAweDZGQUYsCisgICAgMHg3MUU2LCAweDc0QTgsIDB4NzREQSwgMHg3QUM0LCAweDdDMTIsIDB4N0U4MiwgMHg3Q0IyLCAweDdFOTgsCisgICAgMHg4QjlBLCAweDhEMEEsIDB4OTQ3RCwgMHg5OTEwLCAweDk5NEMsIDB4NTIzOSwgMHg1QkRGLCAweDY0RTYsCisgICAgMHg2NzJELCAweDdEMkUsIDB4NTBFRCwgMHg1M0MzLCAweDU4NzksIDB4NjE1OCwgMHg2MTU5LCAweDYxRkEsCisgICAgMHg2NUFDLCAweDdBRDksIDB4OEI5MiwgMHg4Qjk2LCAweDUwMDksIDB4NTAyMSwgMHg1Mjc1LCAweDU1MzEsCisgICAgMHg1QTNDLCAweDVFRTAsIDB4NUY3MCwgMHg2MTM0LCAweDY1NUUsIDB4NjYwQywgMHg2NjM2LCAweDY2QTIsCisgICAgMHg2OUNELCAweDZFQzQsIDB4NkYzMiwgMHg3MzE2LCAweDc2MjEsIDB4N0E5MywgMHg4MTM5LCAweDgyNTksCisgICAgMHg4M0Q2LCAweDg0QkMsIDB4NTBCNSwgMHg1N0YwLCAweDVCQzAsIDB4NUJFOCwgMHg1RjY5LCAweDYzQTEsCisgICAgMHg3ODI2LCAweDdEQjUsIDB4ODNEQywgMHg4NTIxLCAweDkxQzcsIDB4OTFGNSwgMHg1MThBLCAweDY3RjUsCisgICAgMHg3QjU2LCAweDhDQUMsIDB4NTFDNCwgMHg1OUJCLCAweDYwQkQsIDB4ODY1NSwgMHg1MDFDLCAweDUyNTQsCisgICAgMHg1QzNBLCAweDYxN0QsIDB4NjIxQSwgMHg2MkQzLCAweDY0RjIsIDB4NjVBNSwgMHg2RUNDLCAweDc2MjAsCisgICAgMHg4MTBBLCAweDhFNjAsIDB4OTY1RiwgMHg5NkJCLCAweDRFREYsIDB4NTM0MywgMHg1NTk4LCAweDU5MjksCisgICAgMHg1RERELCAweDY0QzUsIDB4NkNDOSwgMHg2REZBLCAweDczOTQsIDB4N0E3RiwgMHg4MjFCLCAweDg1QTYsCisgICAgMHg4Q0U0LCAweDhFMTAsIDB4OTA3NywgMHg5MUU3LCAweDk1RTEsIDB4OTYyMSwgMHg5N0M2LCAweDUxRjgsCisgICAgMHg1NEYyLCAweDU1ODYsIDB4NUZCOSwgMHg2NEE0LCAweDZGODgsIDB4N0RCNCwgMHg4RjFGLCAweDhGNEQsCisgICAgMHg5NDM1LCAweDUwQzksIDB4NUMxNiwgMHg2Q0JFLCAweDZERkIsIDB4NzUxQiwgMHg3N0JCLCAweDdDM0QsCisgICAgMHg3QzY0LCAweDhBNzksIDB4OEFDMiwgMHg1ODFFLCAweDU5QkUsIDB4NUUxNiwgMHg2Mzc3LCAweDcyNTIsCisgICAgMHg3NThBLCAweDc3NkIsIDB4OEFEQywgMHg4Q0JDLCAweDhGMTIsIDB4NUVGMywgMHg2Njc0LCAweDZERjgsCisgICAgMHg4MDdELCAweDgzQzEsIDB4OEFDQiwgMHg5NzUxLCAweDlCRDYsIDB4NTI0MywgMHg2NkZGLCAweDZEOTUsCisgICAgMHg2RUVGLCAweDdERTAsIDB4OEFFNiwgMHg5MDJFLCAweDkwNUUsIDB4OUFENCwgMHg1MjFELCAweDUyN0YsCisgICAgMHg1NEU4LCAweDYxOTQsIDB4NjI4NCwgMHg2MkRCLCAweDY4QTIsIDB4NjkxMiwgMHg2OTVBLCAweDZBMzUsCisgICAgMHg3MDkyLCAweDcxMjYsIDB4Nzg1RCwgMHg3OTAxLCAweDc5MEUsIDB4NzlEMiwgMHg3QTBELCAweDgwOTYsCisgICAgMHg4Mjc4LCAweDgyRDUsIDB4ODM0OSwgMHg4NTQ5LCAweDhDODIsIDB4OEQ4NSwgMHg5MTYyLCAweDkxOEIsCisgICAgMHg5MUFFLCAweDRGQzMsIDB4NTZEMSwgMHg3MUVELCAweDc3RDcsIDB4ODcwMCwgMHg4OUY4LCAweDVCRjgsCisgICAgMHg1RkQ2LCAweDY3NTEsIDB4OTBBOCwgMHg1M0UyLCAweDU4NUEsIDB4NUJGNSwgMHg2MEE0LCAweDYxODEsCisgICAgMHg2NDYwLCAweDdFM0QsIDB4ODA3MCwgMHg4NTI1LCAweDkyODMsIDB4NjRBRSwgMHg1MEFDLCAweDVEMTQsCisgICAgMHg2NzAwLCAweDU4OUMsIDB4NjJCRCwgMHg2M0E4LCAweDY5MEUsIDB4Njk3OCwgMHg2QTFFLCAweDZFNkIsCisgICAgMHg3NkJBLCAweDc5Q0IsIDB4ODJCQiwgMHg4NDI5LCAweDhBQ0YsIDB4OERBOCwgMHg4RkZELCAweDkxMTIsCisgICAgMHg5MTRCLCAweDkxOUMsIDB4OTMxMCwgMHg5MzE4LCAweDkzOUEsIDB4OTZEQiwgMHg5QTM2LCAweDlDMEQsCisgICAgMHg0RTExLCAweDc1NUMsIDB4Nzk1RCwgMHg3QUZBLCAweDdCNTEsIDB4N0JDOSwgMHg3RTJFLCAweDg0QzQsCisgICAgMHg4RTU5LCAweDhFNzQsIDB4OEVGOCwgMHg5MDEwLCAweDY2MjUsIDB4NjkzRiwgMHg3NDQzLCAweDUxRkEsCisgICAgMHg2NzJFLCAweDlFREMsIDB4NTE0NSwgMHg1RkUwLCAweDZDOTYsIDB4ODdGMiwgMHg4ODVELCAweDg4NzcsCisgICAgMHg2MEI0LCAweDgxQjUsIDB4ODQwMywgMHg4RDA1LCAweDUzRDYsIDB4NTQzOSwgMHg1NjM0LCAweDVBMzYsCisgICAgMHg1QzMxLCAweDcwOEEsIDB4N0ZFMCwgMHg4MDVBLCAweDgxMDYsIDB4ODFFRCwgMHg4REEzLCAweDkxODksCisgICAgMHg5QTVGLCAweDlERjIsIDB4NTA3NCwgMHg0RUM0LCAweDUzQTAsIDB4NjBGQiwgMHg2RTJDLCAweDVDNjQsCisgICAgMHg0Rjg4LCAweDUwMjQsIDB4NTVFNCwgMHg1Q0Q5LCAweDVFNUYsIDB4NjA2NSwgMHg2ODk0LCAweDZDQkIsCisgICAgMHg2REM0LCAweDcxQkUsIDB4NzVENCwgMHg3NUY0LCAweDc2NjEsIDB4N0ExQSwgMHg3QTQ5LCAweDdEQzcsCisgICAgMHg3REZCLCAweDdGNkUsIDB4ODFGNCwgMHg4NkE5LCAweDhGMUMsIDB4OTZDOSwgMHg5OUIzLCAweDlGNTIsCisgICAgMHg1MjQ3LCAweDUyQzUsIDB4OThFRCwgMHg4OUFBLCAweDRFMDMsIDB4NjdEMiwgMHg2RjA2LCAweDRGQjUsCisgICAgMHg1QkUyLCAweDY3OTUsIDB4NkM4OCwgMHg2RDc4LCAweDc0MUIsIDB4NzgyNywgMHg5MURELCAweDkzN0MsCisgICAgMHg4N0M0LCAweDc5RTQsIDB4N0EzMSwgMHg1RkVCLCAweDRFRDYsIDB4NTRBNCwgMHg1NTNFLCAweDU4QUUsCisgICAgMHg1OUE1LCAweDYwRjAsIDB4NjI1MywgMHg2MkQ2LCAweDY3MzYsIDB4Njk1NSwgMHg4MjM1LCAweDk2NDAsCisgICAgMHg5OUIxLCAweDk5REQsIDB4NTAyQywgMHg1MzUzLCAweDU1NDQsIDB4NTc3QywgMHg2MjU4LCAweDY0RTIsCisgICAgMHg2NjZCLCAweDY3REQsIDB4NkZDMSwgMHg2RkVGLCAweDc0MjIsIDB4NzQzOCwgMHg4QTE3LCAweDk0MzgsCisgICAgMHg1NDUxLCAweDU2MDYsIDB4NTc2NiwgMHg1RjQ4LCAweDYxOUEsIDB4NkI0RSwgMHg3MDU4LCAweDcwQUQsCisgICAgMHg3REJCLCAweDhBOTUsIDB4NTk2QSwgMHg4MTJCLCAweDYzQTIsIDB4NzcwOCwgMHg4MDNELCAweDhDQUEsCisgICAgMHg1ODU0LCAweDY0MkQsIDB4NjlCQiwgMHg1Qjk1LCAweDVFMTEsIDB4NkU2RiwgMHg4NTY5LCAweDUxNEMsCisgICAgMHg1M0YwLCAweDU5MkEsIDB4NjAyMCwgMHg2MTRCLCAweDZCODYsIDB4NkM3MCwgMHg2Q0YwLCAweDdCMUUsCisgICAgMHg4MENFLCAweDgyRDQsIDB4OERDNiwgMHg5MEIwLCAweDk4QjEsIDB4NjRDNywgMHg2RkE0LCAweDY0OTEsCisgICAgMHg2NTA0LCAweDUxNEUsIDB4NTQxMCwgMHg1NzFGLCAweDhBMEUsIDB4NjE1RiwgMHg2ODc2LCAweDc1REIsCisgICAgMHg3QjUyLCAweDdENzEsIDB4OTAxQSwgMHg1ODA2LCAweDY5Q0MsIDB4ODE3RiwgMHg4OTJBLCAweDkwMDAsCisgICAgMHg5ODM5LCAweDUwNzgsIDB4NTk1NywgMHg1OUFDLCAweDYyOTUsIDB4OTAwRiwgMHg5QjJBLCAweDYxNUQsCisgICAgMHg3Mjc5LCAweDk1RDYsIDB4NTc2MSwgMHg1QTQ2LCAweDVERjQsIDB4NjI4QSwgMHg2NEFELCAweDY0RkEsCisgICAgMHg2Nzc3LCAweDZDRTIsIDB4NkQzRSwgMHg3MjJDLCAweDc0MzYsIDB4NzgzNCwgMHg3Rjc3LCAweDgyQUQsCisgICAgMHg4RERCLCAweDk4MTcsIDB4NTIyNCwgMHg1NzQyLCAweDY3N0YsIDB4NzI0OCwgMHg3NEUzLCAweDhDQTksCisgICAgMHg4RkE2LCAweDkyMTEsIDB4OTYyQSwgMHg1MTZCLCAweDUzRUQsIDB4NjM0QywgMHg0RjY5LCAweDU1MDQsCisgICAgMHg2MDk2LCAweDY1NTcsIDB4NkM5QiwgMHg2RDdGLCAweDcyNEMsIDB4NzJGRCwgMHg3QTE3LCAweDg5ODcsCisgICAgMHg4QzlELCAweDVGNkQsIDB4NkY4RSwgMHg3MEY5LCAweDgxQTgsIDB4NjEwRSwgMHg0RkJGLCAweDUwNEYsCisgICAgMHg2MjQxLCAweDcyNDcsIDB4N0JDNywgMHg3REU4LCAweDdGRTksIDB4OTA0RCwgMHg5N0FELCAweDlBMTksCisgICAgMHg4Q0I2LCAweDU3NkEsIDB4NUU3MywgMHg2N0IwLCAweDg0MEQsIDB4OEE1NSwgMHg1NDIwLCAweDVCMTYsCisgICAgMHg1RTYzLCAweDVFRTIsIDB4NUYwQSwgMHg2NTgzLCAweDgwQkEsIDB4ODUzRCwgMHg5NTg5LCAweDk2NUIsCisgICAgMHg0RjQ4LCAweDUzMDUsIDB4NTMwRCwgMHg1MzBGLCAweDU0ODYsIDB4NTRGQSwgMHg1NzAzLCAweDVFMDMsCisgICAgMHg2MDE2LCAweDYyOUIsIDB4NjJCMSwgMHg2MzU1LCAweDZDRTEsIDB4NkQ2NiwgMHg3NUIxLCAweDc4MzIsCisgICAgMHg4MERFLCAweDgxMkYsIDB4ODJERSwgMHg4NDYxLCAweDg0QjIsIDB4ODg4RCwgMHg4OTEyLCAweDkwMEIsCisgICAgMHg5MkVBLCAweDk4RkQsIDB4OUI5MSwgMHg1RTQ1LCAweDY2QjQsIDB4NjZERCwgMHg3MDExLCAweDcyMDYsCisgICAgMHg0RkY1LCAweDUyN0QsIDB4NUY2QSwgMHg2MTUzLCAweDY3NTMsIDB4NkExOSwgMHg2RjAyLCAweDc0RTIsCisgICAgMHg3OTY4LCAweDg4NjgsIDB4OEM3OSwgMHg5OEM3LCAweDk4QzQsIDB4OUE0MywgMHg1NEMxLCAweDdBMUYsCisgICAgMHg2OTUzLCAweDhBRjcsIDB4OEM0QSwgMHg5OEE4LCAweDk5QUUsIDB4NUY3QywgMHg2MkFCLCAweDc1QjIsCisgICAgMHg3NkFFLCAweDg4QUIsIDB4OTA3RiwgMHg5NjQyLCAweDUzMzksIDB4NUYzQywgMHg1RkM1LCAweDZDQ0MsCisgICAgMHg3M0NDLCAweDc1NjIsIDB4NzU4QiwgMHg3QjQ2LCAweDgyRkUsIDB4OTk5RCwgMHg0RTRGLCAweDkwM0MsCisgICAgMHg0RTBCLCAweDRGNTUsIDB4NTNBNiwgMHg1OTBGLCAweDVFQzgsIDB4NjYzMCwgMHg2Q0IzLCAweDc0NTUsCisgICAgMHg4Mzc3LCAweDg3NjYsIDB4OENDMCwgMHg5MDUwLCAweDk3MUUsIDB4OUMxNSwgMHg1OEQxLCAweDVCNzgsCisgICAgMHg4NjUwLCAweDhCMTQsIDB4OURCNCwgMHg1QkQyLCAweDYwNjgsIDB4NjA4RCwgMHg2NUYxLCAweDZDNTcsCisgICAgMHg2RjIyLCAweDZGQTMsIDB4NzAxQSwgMHg3RjU1LCAweDdGRjAsIDB4OTU5MSwgMHg5NTkyLCAweDk2NTAsCisgICAgMHg5N0QzLCAweDUyNzIsIDB4OEY0NCwgMHg1MUZELCAweDU0MkIsIDB4NTRCOCwgMHg1NTYzLCAweDU1OEEsCisgICAgMHg2QUJCLCAweDZEQjUsIDB4N0REOCwgMHg4MjY2LCAweDkyOUMsIDB4OTY3NywgMHg5RTc5LCAweDU0MDgsCisgICAgMHg1NEM4LCAweDc2RDIsIDB4ODZFNCwgMHg5NUE0LCAweDk1RDQsIDB4OTY1QywgMHg0RUEyLCAweDRGMDksCisgICAgMHg1OUVFLCAweDVBRTYsIDB4NURGNywgMHg2MDUyLCAweDYyOTcsIDB4Njc2RCwgMHg2ODQxLCAweDZDODYsCisgICAgMHg2RTJGLCAweDdGMzgsIDB4ODA5QiwgMHg4MjJBLCAweDk4MDUsIDB4NEVBNSwgMHg1MDU1LCAweDU0QjMsCisgICAgMHg1NzkzLCAweDU5NUEsIDB4NUI2OSwgMHg1QkIzLCAweDYxQzgsIDB4Njk3NywgMHg2RDc3LCAweDcwMjMsCisgICAgMHg4N0Y5LCAweDg5RTMsIDB4OEE3MiwgMHg4QUU3LCAweDkwODIsIDB4OTlFRCwgMHg5QUI4LCAweDUyQkUsCisgICAgMHg2ODM4LCAweDUwMTYsIDB4NUU3OCwgMHg2NzRGLCAweDgzNDcsIDB4ODg0QywgMHg0RUFCLCAweDU0MTEsCisgICAgMHg1NkFFLCAweDczRTYsIDB4OTExNSwgMHg5N0ZGLCAweDk5MDksIDB4OTk1NywgMHg5OTk5LCAweDU2NTMsCisgICAgMHg1ODlGLCAweDg2NUIsIDB4OEEzMSwgMHg2MUIyLCAweDZBRjYsIDB4NzM3QiwgMHg4RUQyLCAweDZCNDcsCisgICAgMHg5NkFBLCAweDlBNTcsIDB4NTk1NSwgMHg3MjAwLCAweDhENkIsIDB4OTc2OSwgMHg0RkQ0LCAweDVDRjQsCisgICAgMHg1RjI2LCAweDYxRjgsIDB4NjY1QiwgMHg2Q0VCLCAweDcwQUIsIDB4NzM4NCwgMHg3M0I5LCAweDczRkUsCisgICAgMHg3NzI5LCAweDc3NEQsIDB4N0Q0MywgMHg3RDYyLCAweDdFMjMsIDB4ODIzNywgMHg4ODUyLCAweDhDRTIsCisgICAgMHg5MjQ5LCAweDk4NkYsIDB4NUI1MSwgMHg3QTc0LCAweDg4NDAsIDB4OTgwMSwgMHg1QUNDLCAweDRGRTAsCisgICAgMHg1MzU0LCAweDU5M0UsIDB4NUNGRCwgMHg2MzNFLCAweDZENzksIDB4NzJGOSwgMHg4MTA1LCAweDgxMDcsCisgICAgMHg4M0EyLCAweDkyQ0YsIDB4OTgzMCwgMHg0RUE4LCAweDUxNDQsIDB4NTIxMSwgMHg1NzhCLCAweDVGNjIsCisgICAgMHg2Q0MyLCAweDZFQ0UsIDB4NzAwNSwgMHg3MDUwLCAweDcwQUYsIDB4NzE5MiwgMHg3M0U5LCAweDc0NjksCisgICAgMHg4MzRBLCAweDg3QTIsIDB4ODg2MSwgMHg5MDA4LCAweDkwQTIsIDB4OTNBMywgMHg5OUE4LCAweDUxNkUsCisgICAgMHg1RjU3LCAweDYwRTAsIDB4NjE2NywgMHg2NkIzLCAweDg1NTksIDB4OEU0QSwgMHg5MUFGLCAweDk3OEIsCisgICAgMHg0RTRFLCAweDRFOTIsIDB4NTQ3QywgMHg1OEQ1LCAweDU4RkEsIDB4NTk3RCwgMHg1Q0I1LCAweDVGMjcsCisgICAgMHg2MjM2LCAweDYyNDgsIDB4NjYwQSwgMHg2NjY3LCAweDZCRUIsIDB4NkQ2OSwgMHg2RENGLCAweDZFNTYsCisgICAgMHg2RUY4LCAweDZGOTQsIDB4NkZFMCwgMHg2RkU5LCAweDcwNUQsIDB4NzJEMCwgMHg3NDI1LCAweDc0NUEsCisgICAgMHg3NEUwLCAweDc2OTMsIDB4Nzk1QywgMHg3Q0NBLCAweDdFMUUsIDB4ODBFMSwgMHg4MkE2LCAweDg0NkIsCisgICAgMHg4NEJGLCAweDg2NEUsIDB4ODY1RiwgMHg4Nzc0LCAweDhCNzcsIDB4OEM2QSwgMHg5M0FDLCAweDk4MDAsCisgICAgMHg5ODY1LCAweDYwRDEsIDB4NjIxNiwgMHg5MTc3LCAweDVBNUEsIDB4NjYwRiwgMHg2REY3LCAweDZFM0UsCisgICAgMHg3NDNGLCAweDlCNDIsIDB4NUZGRCwgMHg2MERBLCAweDdCMEYsIDB4NTRDNCwgMHg1RjE4LCAweDZDNUUsCisgICAgMHg2Q0QzLCAweDZEMkEsIDB4NzBEOCwgMHg3RDA1LCAweDg2NzksIDB4OEEwQywgMHg5RDNCLCAweDUzMTYsCisgICAgMHg1NDhDLCAweDVCMDUsIDB4NkEzQSwgMHg3MDZCLCAweDc1NzUsIDB4Nzk4RCwgMHg3OUJFLCAweDgyQjEsCisgICAgMHg4M0VGLCAweDhBNzEsIDB4OEI0MSwgMHg4Q0E4LCAweDk3NzQsIDB4NjRGNCwgMHg2NTJCLCAweDc4QkEsCisgICAgMHg3OEJCLCAweDdBNkIsIDB4NEUzOCwgMHg1NTlBLCAweDU5NTAsIDB4NUJBNiwgMHg1RTdCLCAweDYwQTMsCisgICAgMHg2M0RCLCAweDZCNjEsIDB4NjY2NSwgMHg2ODUzLCAweDZFMTksIDB4NzE2NSwgMHg3NEIwLCAweDdEMDgsCisgICAgMHg5MDg0LCAweDlBNjksIDB4OUMyNSwgMHg2RDNCLCAweDZFRDEsIDB4NzMzRSwgMHg4QzQxLCAweDk1Q0EsCisgICAgMHg1MUYwLCAweDVFNEMsIDB4NUZBOCwgMHg2MDRELCAweDYwRjYsIDB4NjEzMCwgMHg2MTRDLCAweDY2NDMsCisgICAgMHg2NjQ0LCAweDY5QTUsIDB4NkNDMSwgMHg2RTVGLCAweDZFQzksIDB4NkY2MiwgMHg3MTRDLCAweDc0OUMsCisgICAgMHg3Njg3LCAweDdCQzEsIDB4N0MyNywgMHg4MzUyLCAweDg3NTcsIDB4OTA1MSwgMHg5NjhELCAweDlFQzMsCisgICAgMHg1MzJGLCAweDU2REUsIDB4NUVGQiwgMHg1RjhBLCAweDYwNjIsIDB4NjA5NCwgMHg2MUY3LCAweDY2NjYsCisgICAgMHg2NzAzLCAweDZBOUMsIDB4NkRFRSwgMHg2RkFFLCAweDcwNzAsIDB4NzM2QSwgMHg3RTZBLCAweDgxQkUsCisgICAgMHg4MzM0LCAweDg2RDQsIDB4OEFBOCwgMHg4Q0M0LCAweDUyODMsIDB4NzM3MiwgMHg1Qjk2LCAweDZBNkIsCisgICAgMHg5NDA0LCAweDU0RUUsIDB4NTY4NiwgMHg1QjVELCAweDY1NDgsIDB4NjU4NSwgMHg2NkM5LCAweDY4OUYsCisgICAgMHg2RDhELCAweDZEQzYsIDB4NzIzQiwgMHg4MEI0LCAweDkxNzUsIDB4OUE0RCwgMHg0RkFGLCAweDUwMTksCisgICAgMHg1MzlBLCAweDU0MEUsIDB4NTQzQywgMHg1NTg5LCAweDU1QzUsIDB4NUUzRiwgMHg1RjhDLCAweDY3M0QsCisgICAgMHg3MTY2LCAweDczREQsIDB4OTAwNSwgMHg1MkRCLCAweDUyRjMsIDB4NTg2NCwgMHg1OENFLCAweDcxMDQsCisgICAgMHg3MThGLCAweDcxRkIsIDB4ODVCMCwgMHg4QTEzLCAweDY2ODgsIDB4ODVBOCwgMHg1NUE3LCAweDY2ODQsCisgICAgMHg3MTRBLCAweDg0MzEsIDB4NTM0OSwgMHg1NTk5LCAweDZCQzEsIDB4NUY1OSwgMHg1RkJELCAweDYzRUUsCisgICAgMHg2Njg5LCAweDcxNDcsIDB4OEFGMSwgMHg4RjFELCAweDlFQkUsIDB4NEYxMSwgMHg2NDNBLCAweDcwQ0IsCisgICAgMHg3NTY2LCAweDg2NjcsIDB4NjA2NCwgMHg4QjRFLCAweDlERjgsIDB4NTE0NywgMHg1MUY2LCAweDUzMDgsCisgICAgMHg2RDM2LCAweDgwRjgsIDB4OUVEMSwgMHg2NjE1LCAweDZCMjMsIDB4NzA5OCwgMHg3NUQ1LCAweDU0MDMsCisgICAgMHg1Qzc5LCAweDdEMDcsIDB4OEExNiwgMHg2QjIwLCAweDZCM0QsIDB4NkI0NiwgMHg1NDM4LCAweDYwNzAsCisgICAgMHg2RDNELCAweDdGRDUsIDB4ODIwOCwgMHg1MEQ2LCAweDUxREUsIDB4NTU5QywgMHg1NjZCLCAweDU2Q0QsCisgICAgMHg1OUVDLCAweDVCMDksIDB4NUUwQywgMHg2MTk5LCAweDYxOTgsIDB4NjIzMSwgMHg2NjVFLCAweDY2RTYsCisgICAgMHg3MTk5LCAweDcxQjksIDB4NzFCQSwgMHg3MkE3LCAweDc5QTcsIDB4N0EwMCwgMHg3RkIyLCAweDhBNzAsCisgICAgMHgzMDAxLCAweDMwMDIsIDB4MjAyNSwgMHgwMEFELCAweDIwMTUsIDB4MjIyNSwgMHhGRjVFLCAweDMwMTQsCisgICAgMHgzMDE1LCAweDMwMDgsIDB4MzAwOSwgMHgzMDBBLCAweDMwMEIsIDB4MzAwQywgMHgzMDBELCAweDMwMEUsCisgICAgMHgzMDBGLCAweDMwMTAsIDB4MzAxMSwgMHgzMDEzLCAweEZGMDEsIDB4RkYwOCwgMHhGRjA5LCAweEZGMEMsCisgICAgMHhGRjBFLCAweEZGMUEsIDB4RkYxQiwgMHhGRjFDLCAweEZGMUQsIDB4RkYxRSwgMHhGRjFGLCAweEZGM0IsCisgICAgMHhGRjNELCAweEZGM0YsIDB4RkY1QiwgMHhGRjVDLCAweEZGNUQsIDB4RkY1RSwgMHgwMDIwLCAweDAwMjEsCisgICAgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywgMHgwMDI4LCAweDAwMjksCisgICAgMHgwMDJBLCAweDAwMkIsIDB4MDAyQywgMHgwMDJELCAweDAwMkUsIDB4MDAyRiwgMHgwMDMwLCAweDAwMzEsCisgICAgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgMHgwMDM4LCAweDAwMzksCisgICAgMHgwMDNBLCAweDAwM0IsIDB4MDAzQywgMHgwMDNELCAweDAwM0UsIDB4MDAzRiwgMHgwMDQwLCAweDAwNDEsCisgICAgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywgMHgwMDQ4LCAweDAwNDksCisgICAgMHgwMDRBLCAweDAwNEIsIDB4MDA0QywgMHgwMDRELCAweDAwNEUsIDB4MDA0RiwgMHgwMDUwLCAweDAwNTEsCisgICAgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywgMHgwMDU4LCAweDAwNTksCisgICAgMHgwMDVBLCAweDAwNUIsIDB4MDA1QywgMHgwMDVELCAweDAwNUUsIDB4MDA1RiwgMHgwMDYwLCAweDAwNjEsCisgICAgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywgMHgwMDY4LCAweDAwNjksCisgICAgMHgwMDZBLCAweDAwNkIsIDB4MDA2QywgMHgwMDZELCAweDAwNkUsIDB4MDA2RiwgMHgwMDcwLCAweDAwNzEsCisgICAgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywgMHgwMDc4LCAweDAwNzksCisgICAgMHgwMDdBLCAweDAwN0IsIDB4MDA3QywgMHgwMDdELCAweDIwM0UsIDB4MDA3RSwgMHgwMDVDLCAweDIzMUMsCisgICAgMHgyMzFGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MzAwRSwgMHgzMDBGLCAweDMwMEEsCisgICAgMHgzMDBCLCAweDMwMDgsIDB4MzAwOSwgMHgwMDI4LCAweDAwMjksIDB4MDAwMCwgMHgwMDAwLCAweDAwMjgsCisgICAgMHgwMDI5LCAweDAwMjgsIDB4MDAyOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAyOCwgMHgwMDI5LCAweDAwMDAsCisgICAgMHgwMDAwLCAweDMwMTYsIDB4MzAxNywgMHgzMDE2LCAweDMwMTcsIDB4MzAxOCwgMHgzMDE5LCAweDAwNUIsCisgICAgMHgwMDVELCAweDAwMDAsIDB4MDAwMCwgMHgyNjNFLCAweDI2M0QsIDB4MjAyMSwgMHgyMDIxLCAweDIwMjAsCisgICAgMHgyMDIxLCAweDAwMDAsIDB4MjIxNywgMHgwMDAwLCAweDAwMDAsIDB4MjAxRiwgMHgyMDFCLCAweDAyRDYsCisgICAgMHgwMkQ3LCAweDAwRDcsIDB4MjIxRSwgMHgwMDAwLCAweDAwQjEsIDB4MjIxMywgMHgwMDNFLCAweDAwM0MsCisgICAgMHgwMDNELCAweDIyNjAsIDB4MjA3RCwgMHgyMDdFLCAweDAwN0IsIDB4MDA3RCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgyMjI5LCAweDIyMkEsIDB4MjI4MiwgMHgyMjA4LCAweDAzQTMsIDB4MDAyMSwgMHgwMDAwLCAweDMwMjEsCisgICAgMHgzMDIyLCAweDMwMjMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4NEUwMywgMHgwMDAwLCAweDAwMDAsCisgICAgMHg1MzQxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDI3LCAweDMwMTQsIDB4MzAxNSwgMHgwMDJBLCAweDAwMDAsCisgICAgMHgyMjE3LCAweDAwMkEsIDB4Q0RDRCwgMHgzMDAxLCAweDMwMDIsIDB4MDAyOCwgMHgwMDI5LCAweDAwMjgsCisgICAgMHgwMDI5LCAweDAwMjgsIDB4MDAyOSwgMHgzMDE2LCAweDMwMTcsIDB4MzAxMCwgMHgzMDExLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsCisgICAgMHgyMERFLCAweDIwREUsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsCisgICAgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MDBCNiwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgyMkVGLCAweDIyMzcsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsCisgICAgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsCisgICAgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgyNzhBLCAweDI3OEIsCisgICAgMHgyNzhDLCAweDI3OEQsIDB4Mjc4RSwgMHgyNzhGLCAweDI3OTAsIDB4Mjc5MSwgMHgyNzkyLCAweDI3OTMsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksCisgICAgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksCisgICAgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksCisgICAgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDI0QjYsIDB4MjRCNywgMHgyNEI4LCAweDI0QjksCisgICAgMHgyNEJBLCAweDI0QkIsIDB4MjRCQywgMHgyNEJELCAweDI0QkUsIDB4MjRCRiwgMHgyNEMwLCAweDI0QzEsCisgICAgMHgyNEMyLCAweDI0QzMsIDB4MjRDNCwgMHgyNEM1LCAweDI0QzYsIDB4MjRDNywgMHgyNEM4LCAweDI0QzksCisgICAgMHgyNENBLCAweDI0Q0IsIDB4MjRDQywgMHgyNENELCAweDI0Q0UsIDB4MjRDRiwgMHgyMERFLCAweDIwREUsCisgICAgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDAwNUQsCisgICAgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsCisgICAgMHgwMDVELCAweDAwNUQsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsCisgICAgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsCisgICAgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMkNGLCAweDIyQ0UsIDB4MjJDRiwgMHgyMkNFLCAweDIyODAsCisgICAgMHgyMjgxLCAweDIyNzAsIDB4MjI3MSwgMHgyMjcyLCAweDIyNzMsIDB4MDAwMCwgMHgyMjhBLCAweDAwMDAsCisgICAgMHgyMjhCLCAweDIyNzYsIDB4MjI3NywgMHgyMjc5LCAweDIyREEsIDB4MjJEQiwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MjIyMSwgMHgyMjQ1LCAweDIyNDMsIDB4MjI0OCwgMHgwMDAwLCAweDIyQTQsCisgICAgMHgyMkFCLCAweDAwMDAsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsCisgICAgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDAwMDAsIDB4MjQ2MCwgMHgyNDYxLCAweDI0NjIsCisgICAgMHgyNDYzLCAweDI0NjQsIDB4MjQ2NSwgMHgyNDY2LCAweDI0NjcsIDB4MjQ2OCwgMHgwMDI5LCAweDAwMjksCisgICAgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksCisgICAgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksCisgICAgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksCisgICAgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksCisgICAgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksCisgICAgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksCisgICAgMHgwMDI5LCAweDAwMjksIDB4MDAyMSwgMHgwMEIwLCAweDAwMjcsIDB4MDAyMiwgMHgyMDM0LCAweDAwMjksCisgICAgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDAwLCAweDAwMDAsIDB4MjAyMCwgMHgyMDIwLCAweDIwMjEsCisgICAgMHgyMDIwLCAweDAwQTcsIDB4MDAyMywgMHgwMDJBLCAweDAwMkEsIDB4MDAwMCwgMHgwMDAwLCAweDIwNDIsCisgICAgMHgwMDJBLCAweDAwMDAsIDB4MDAwMCwgMHgyMDQyLCAweDAwMkEsIDB4MDAwMCwgMHgwMDAwLCAweDIwMjIsCisgICAgMHgyMERGLCAweDIwREYsIDB4MDAwMCwgMHgyMERGLCAweDMwMDgsIDB4MzAwOSwgMHgzMDBBLCAweDMwMEIsCisgICAgMHgyNjFDLCAweDI2MUUsIDB4MDAwMCwgMHgwMDAwLCAweDIwREUsIDB4MDAwMCwgMHgyMERFLCAweDIwREUsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwREQsIDB4MjBERCwgMHgyNzFBLCAweDI3MTYsCisgICAgMHgwMDAwLCAweDI1RUYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDI1Q0MsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjBBOSwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgyNjJGLCAweDAwMDAsIDB4MjYyRiwgMHgyNjJGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDMwMjAsCisgICAgMHgwMDAwLCAweDI3NzYsIDB4Mjc3NywgMHgyNzc4LCAweDI3NzksIDB4Mjc3QSwgMHgyNzdCLCAweDI3N0MsCisgICAgMHgyNzdELCAweDI3N0UsIDB4Mjc3RiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksCisgICAgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgyNjQyLCAweDIyQTksIDB4MzAzNiwgMHgyNUNCLCAweDI1RDMsCisgICAgMHgyNUExLCAweDIzMDIsIDB4MDAwMCwgMHgyNUFELCAweDI1QUQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgyNUM3LCAweDAwMDAsIDB4MDAwMCwgMHgyMjA2LCAweDIyQkYsIDB4MjMxRSwgMHgwMDAwLCAweDIyMjUsCisgICAgMHgyMjI2LCAweDAwMDAsIDB4MjI1MywgMHgyMjUxLCAweDIyNjYsIDB4MjI2NywgMHgyMjEzLCAweDIyOTUsCisgICAgMHgyMjk2LCAweDIyOTcsIDB4MjBERCwgMHgyMzE0LCAweDAwMDAsIDB4MDAwMCwgMHgyMjYyLCAweDAwMDAsCisgICAgMHgyNUIxLCAweDAwMDAsIDB4MjIyMiwgMHgyMjUwLCAweDAwRDgsIDB4MjM0QSwgMHgyMkEzLCAweDAzMzgsCisgICAgMHgwMDAwLCAweDIyNkUsIDB4MjI2RiwgMHgyMjg1LCAweDIyODQsIDB4MjIwOSwgMHgyMjBDLCAweDIyQkIsCisgICAgMHgwMDE2LCAweDIyNUEsIDB4MjMwNiwgMHgwMDI0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDMyOUUsIDB4MDAwMCwgMHgyMDNDLCAweDAwM0YsIDB4MDAwMCwgMHgwMDNGLCAweDIyQzQsCisgICAgMHgyNUM3LCAweDIyQzQsIDB4MjVDNiwgMHgyNUFCLCAweDI1QTEsIDB4MjVBQiwgMHgyNUEwLCAweDI1RTYsCisgICAgMHgyNUNCLCAweDI1RTYsIDB4MjVDRiwgMHgyNUJELCAweDI1QjMsIDB4MjVCNywgMHgyNUMxLCAweDI3MjYsCisgICAgMHgyNUNGLCAweDI1QTAsIDB4MDAwMCwgMHgyNUNBLCAweDMyMzEsIDB4MzIzOSwgMHgzM0NCLCAweDI0ODMsCisgICAgMHgyNDk0LCAweDI0OTUsIDB4MjQ5NiwgMHgyNDk3LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksCisgICAgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgyMTkyLCAweDIxOTAsCisgICAgMHgyMTkxLCAweDIxOTMsIDB4MjE5NiwgMHgyMTk3LCAweDIxOTgsIDB4MjE5OSwgMHgyMUQwLCAweDIxQ0YsCisgICAgMHgyMUNELCAweDIxRDQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDI3OTQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4Mjc5QywgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDI3QkEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMUQxLCAweDIxRDMsCisgICAgMHgwMDAwLCAweDI3OUUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4Mjc5RSwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgyMUI1LCAweDIxQjEsIDB4MDAwMCwgMHgyMUI0LCAweDIxQjAsIDB4MjFCMywgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgyMUU2LCAweDIxRTgsIDB4MjFFNywgMHgyMUU5LCAweDIxQkMsIDB4MjFDMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MjFDMCwgMHgyMUJDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgyMUM0LCAweDIxQzUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsCisgICAgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsCisgICAgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsCisgICAgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsCisgICAgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsCisgICAgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsCisgICAgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDAwMkUsIDB4MDAyRSwgMHgyMERFLCAweDIwREUsCisgICAgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsCisgICAgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsCisgICAgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsCisgICAgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsCisgICAgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsCisgICAgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsCisgICAgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsCisgICAgMHgyMERFLCAweDIwREUsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsCisgICAgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsCisgICAgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsCisgICAgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsCisgICAgMHgyMERELCAweDIwREQsIDB4MjQ4MywgMHgyNDg0LCAweDI0ODUsIDB4MjQ4NiwgMHgyNDg3LCAweDAwMjksCisgICAgMHgwMDI5LCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MjBERCwgMHgyMERELCAweDIwREQsCisgICAgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsCisgICAgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsCisgICAgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsCisgICAgMHgzMjk0LCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsCisgICAgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsCisgICAgMHgzMkE1LCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsCisgICAgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsCisgICAgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsCisgICAgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsCisgICAgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsCisgICAgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsCisgICAgMHgyMERELCAweDAwMjksIDB4MDAyOSwgMHgwMDI5LCAweDAwMjksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4Mjc5NCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMUUwLCAweDIxRTEsCisgICAgMHgyMUUyLCAweDIxRTMsIDB4MDAwMCwgMHgyN0ExLCAweDAwMDAsIDB4MDAwMCwgMHgyMUU2LCAweDIxRTgsCisgICAgMHgyMUU3LCAweDIxRTksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyNjFELCAweDI2MUYsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MjBERCwgMHgyMERELCAweDIwREQsIDB4MjBERCwgMHgyMERELCAweDIwREQsCisgICAgMHgyMERELCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsCisgICAgMHgyMERFLCAweDIwREUsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsCisgICAgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MjBERSwgMHgyMERFLCAweDIwREUsCisgICAgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDAwNUQsCisgICAgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsCisgICAgMHgwMDVELCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsCisgICAgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsCisgICAgMHgwMDVELCAweDAwNUQsIDB4MDA1RCwgMHgwMDVELCAweDAwNUQsIDB4MjBERSwgMHgyMERFLCAweDIwREUsCisgICAgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDMyOTAsIDB4MzI4QSwgMHgzMjhCLCAweDMyOEMsCisgICAgMHgzMjhELCAweDMyOEUsIDB4MzI4RiwgMHgyMERFLCAweDIwREUsIDB4MjBERSwgMHgyMERFLCAweDIwREUsCisgICAgMHgyMERFLCAweDIwREUsIDB4MzAwQywgMHgzMDBELCAweDMwMEUsIDB4MzAwRiwgMHgyMUU4LCAweDIxRTYsCisgICAgMHgyMUU3LCAweDIxRTksIDB4MDAyMiwgMHgzMDFGLCAweDMwMUQsIDB4MjAzNiwgMHgwMDYwLCAweDMwMDEsCisgICAgMHgwMDAwLCAweDAwMjEsIDB4MzAyMSwgMHgwMDJDLCAweDMwMDIsIDB4QUMwMiwgMHhBQzAzLCAweEFDMDUsCisgICAgMHhBQzA2LCAweEFDMEIsIDB4QUMwQywgMHhBQzBELCAweEFDMEUsIDB4QUMwRiwgMHhBQzE4LCAweEFDMUUsCisgICAgMHhBQzFGLCAweEFDMjEsIDB4QUMyMiwgMHhBQzIzLCAweEFDMjUsIDB4QUMyNiwgMHhBQzI3LCAweEFDMjgsCisgICAgMHhBQzI5LCAweEFDMkEsIDB4QUMyQiwgMHhBQzJFLCAweEFDMzIsIDB4QUMzMywgMHhBQzM0LCAweEFDMzUsCisgICAgMHhBQzM2LCAweEFDMzcsIDB4QUMzQSwgMHhBQzNCLCAweEFDM0QsIDB4QUMzRSwgMHhBQzNGLCAweEFDNDEsCisgICAgMHhBQzQyLCAweEFDNDMsIDB4QUM0NCwgMHhBQzQ1LCAweEFDNDYsIDB4QUM0NywgMHhBQzQ4LCAweEFDNDksCisgICAgMHhBQzRBLCAweEFDNEMsIDB4QUM0RSwgMHhBQzRGLCAweEFDNTAsIDB4QUM1MSwgMHhBQzUyLCAweEFDNTMsCisgICAgMHhBQzU1LCAweEFDNTYsIDB4QUM1NywgMHhBQzU5LCAweEFDNUEsIDB4QUM1QiwgMHhBQzVELCAweEFDNUUsCisgICAgMHhBQzVGLCAweEFDNjAsIDB4QUM2MSwgMHhBQzYyLCAweEFDNjMsIDB4QUM2NCwgMHhBQzY1LCAweEFDNjYsCisgICAgMHhBQzY3LCAweEFDNjgsIDB4QUM2OSwgMHhBQzZBLCAweEFDNkIsIDB4QUM2QywgMHhBQzZELCAweEFDNkUsCisgICAgMHhBQzZGLCAweEFDNzIsIDB4QUM3MywgMHhBQzc1LCAweEFDNzYsIDB4QUM3OSwgMHhBQzdCLCAweEFDN0MsCisgICAgMHhBQzdELCAweEFDN0UsIDB4QUM3RiwgMHhBQzgyLCAweEFDODcsIDB4QUM4OCwgMHhBQzhELCAweEFDOEUsCisgICAgMHhBQzhGLCAweEFDOTEsIDB4QUM5MiwgMHhBQzkzLCAweEFDOTUsIDB4QUM5NiwgMHhBQzk3LCAweEFDOTgsCisgICAgMHhBQzk5LCAweEFDOUEsIDB4QUM5QiwgMHhBQzlFLCAweEFDQTIsIDB4QUNBMywgMHhBQ0E0LCAweEFDQTUsCisgICAgMHhBQ0E2LCAweEFDQTcsIDB4QUNBQiwgMHhBQ0FELCAweEFDQUUsIDB4QUNCMSwgMHhBQ0IyLCAweEFDQjMsCisgICAgMHhBQ0I0LCAweEFDQjUsIDB4QUNCNiwgMHhBQ0I3LCAweEFDQkEsIDB4QUNCRSwgMHhBQ0JGLCAweEFDQzAsCisgICAgMHhBQ0MyLCAweEFDQzMsIDB4QUNDNSwgMHhBQ0M2LCAweEFDQzcsIDB4QUNDOSwgMHhBQ0NBLCAweEFDQ0IsCisgICAgMHhBQ0NELCAweEFDQ0UsIDB4QUNDRiwgMHhBQ0QwLCAweEFDRDEsIDB4QUNEMiwgMHhBQ0QzLCAweEFDRDQsCisgICAgMHhBQ0Q2LCAweEFDRDgsIDB4QUNEOSwgMHhBQ0RBLCAweEFDREIsIDB4QUNEQywgMHhBQ0RELCAweEFDREUsCisgICAgMHhBQ0RGLCAweEFDRTIsIDB4QUNFMywgMHhBQ0U1LCAweEFDRTYsIDB4QUNFOSwgMHhBQ0VCLCAweEFDRUQsCisgICAgMHhBQ0VFLCAweEFDRjIsIDB4QUNGNCwgMHhBQ0Y3LCAweEFDRjgsIDB4QUNGOSwgMHhBQ0ZBLCAweEFDRkIsCisgICAgMHhBQ0ZFLCAweEFDRkYsIDB4QUQwMSwgMHhBRDAyLCAweEFEMDMsIDB4QUQwNSwgMHhBRDA3LCAweEFEMDgsCisgICAgMHhBRDA5LCAweEFEMEEsIDB4QUQwQiwgMHhBRDBFLCAweEFEMTAsIDB4QUQxMiwgMHhBRDEzLCAweEFEMTQsCisgICAgMHhBRDE1LCAweEFEMTYsIDB4QUQxNywgMHhBRDE5LCAweEFEMUEsIDB4QUQxQiwgMHhBRDFELCAweEFEMUUsCisgICAgMHhBRDFGLCAweEFEMjEsIDB4QUQyMiwgMHhBRDIzLCAweEFEMjQsIDB4QUQyNSwgMHhBRDI2LCAweEFEMjcsCisgICAgMHhBRDI4LCAweEFEMkEsIDB4QUQyQiwgMHhBRDJFLCAweEFEMkYsIDB4QUQzMCwgMHhBRDMxLCAweEFEMzIsCisgICAgMHhBRDMzLCAweEFEMzYsIDB4QUQzNywgMHhBRDM5LCAweEFEM0EsIDB4QUQzQiwgMHhBRDNELCAweEFEM0UsCisgICAgMHhBRDNGLCAweEFENDAsIDB4QUQ0MSwgMHhBRDQyLCAweEFENDMsIDB4QUQ0NiwgMHhBRDQ4LCAweEFENEEsCisgICAgMHhBRDRCLCAweEFENEMsIDB4QUQ0RCwgMHhBRDRFLCAweEFENEYsIDB4QUQ1MSwgMHhBRDUyLCAweEFENTMsCisgICAgMHhBRDU1LCAweEFENTYsIDB4QUQ1NywgMHhBRDU5LCAweEFENUEsIDB4QUQ1QiwgMHhBRDVDLCAweEFENUQsCisgICAgMHhBRDVFLCAweEFENUYsIDB4QUQ2MCwgMHhBRDYyLCAweEFENjQsIDB4QUQ2NSwgMHhBRDY2LCAweEFENjcsCisgICAgMHhBRDY4LCAweEFENjksIDB4QUQ2QSwgMHhBRDZCLCAweEFENkUsIDB4QUQ2RiwgMHhBRDcxLCAweEFENzIsCisgICAgMHhBRDc3LCAweEFENzgsIDB4QUQ3OSwgMHhBRDdBLCAweEFEN0UsIDB4QUQ4MCwgMHhBRDgzLCAweEFEODQsCisgICAgMHhBRDg1LCAweEFEODYsIDB4QUQ4NywgMHhBRDhBLCAweEFEOEIsIDB4QUQ4RCwgMHhBRDhFLCAweEFEOEYsCisgICAgMHhBRDkxLCAweEFEOTIsIDB4QUQ5MywgMHhBRDk0LCAweEFEOTUsIDB4QUQ5NiwgMHhBRDk3LCAweEFEOTgsCisgICAgMHhBRDk5LCAweEFEOUEsIDB4QUQ5QiwgMHhBRDlFLCAweEFEOUYsIDB4QURBMCwgMHhBREExLCAweEFEQTIsCisgICAgMHhBREEzLCAweEFEQTUsIDB4QURBNiwgMHhBREE3LCAweEFEQTgsIDB4QURBOSwgMHhBREFBLCAweEFEQUIsCisgICAgMHhBREFDLCAweEFEQUQsIDB4QURBRSwgMHhBREFGLCAweEFEQjAsIDB4QURCMSwgMHhBREIyLCAweEFEQjMsCisgICAgMHhBREI0LCAweEFEQjUsIDB4QURCNiwgMHhBREI4LCAweEFEQjksIDB4QURCQSwgMHhBREJCLCAweEFEQkMsCisgICAgMHhBREJELCAweEFEQkUsIDB4QURCRiwgMHhBREMyLCAweEFEQzMsIDB4QURDNSwgMHhBREM2LCAweEFEQzcsCisgICAgMHhBREM5LCAweEFEQ0EsIDB4QURDQiwgMHhBRENDLCAweEFEQ0QsIDB4QURDRSwgMHhBRENGLCAweEFERDIsCisgICAgMHhBREQ0LCAweEFERDUsIDB4QURENiwgMHhBREQ3LCAweEFERDgsIDB4QUREOSwgMHhBRERBLCAweEFEREIsCisgICAgMHhBRERELCAweEFEREUsIDB4QURERiwgMHhBREUxLCAweEFERTIsIDB4QURFMywgMHhBREU1LCAweEFERTYsCisgICAgMHhBREU3LCAweEFERTgsIDB4QURFOSwgMHhBREVBLCAweEFERUIsIDB4QURFQywgMHhBREVELCAweEFERUUsCisgICAgMHhBREVGLCAweEFERjAsIDB4QURGMSwgMHhBREYyLCAweEFERjMsIDB4QURGNCwgMHhBREY1LCAweEFERjYsCisgICAgMHhBREY3LCAweEFERkEsIDB4QURGQiwgMHhBREZELCAweEFERkUsIDB4QUUwMiwgMHhBRTAzLCAweEFFMDQsCisgICAgMHhBRTA1LCAweEFFMDYsIDB4QUUwNywgMHhBRTBBLCAweEFFMEMsIDB4QUUwRSwgMHhBRTBGLCAweEFFMTAsCisgICAgMHhBRTExLCAweEFFMTIsIDB4QUUxMywgMHhBRTE1LCAweEFFMTYsIDB4QUUxNywgMHhBRTE4LCAweEFFMTksCisgICAgMHhBRTFBLCAweEFFMUIsIDB4QUUxQywgMHhBRTFELCAweEFFMUUsIDB4QUUxRiwgMHhBRTIwLCAweEFFMjEsCisgICAgMHhBRTIyLCAweEFFMjMsIDB4QUUyNCwgMHhBRTI1LCAweEFFMjYsIDB4QUUyNywgMHhBRTI4LCAweEFFMjksCisgICAgMHhBRTJBLCAweEFFMkIsIDB4QUUyQywgMHhBRTJELCAweEFFMkUsIDB4QUUyRiwgMHhBRTMyLCAweEFFMzMsCisgICAgMHhBRTM1LCAweEFFMzYsIDB4QUUzOSwgMHhBRTNCLCAweEFFM0MsIDB4QUUzRCwgMHhBRTNFLCAweEFFM0YsCisgICAgMHhBRTQyLCAweEFFNDQsIDB4QUU0NywgMHhBRTQ4LCAweEFFNDksIDB4QUU0QiwgMHhBRTRGLCAweEFFNTEsCisgICAgMHhBRTUyLCAweEFFNTMsIDB4QUU1NSwgMHhBRTU3LCAweEFFNTgsIDB4QUU1OSwgMHhBRTVBLCAweEFFNUIsCisgICAgMHhBRTVFLCAweEFFNjIsIDB4QUU2MywgMHhBRTY0LCAweEFFNjYsIDB4QUU2NywgMHhBRTZBLCAweEFFNkIsCisgICAgMHhBRTZELCAweEFFNkUsIDB4QUU2RiwgMHhBRTcxLCAweEFFNzIsIDB4QUU3MywgMHhBRTc0LCAweEFFNzUsCisgICAgMHhBRTc2LCAweEFFNzcsIDB4QUU3QSwgMHhBRTdFLCAweEFFN0YsIDB4QUU4MCwgMHhBRTgxLCAweEFFODIsCisgICAgMHhBRTgzLCAweEFFODYsIDB4QUU4NywgMHhBRTg4LCAweEFFODksIDB4QUU4QSwgMHhBRThCLCAweEFFOEQsCisgICAgMHhBRThFLCAweEFFOEYsIDB4QUU5MCwgMHhBRTkxLCAweEFFOTIsIDB4QUU5MywgMHhBRTk0LCAweEFFOTUsCisgICAgMHhBRTk2LCAweEFFOTcsIDB4QUU5OCwgMHhBRTk5LCAweEFFOUEsIDB4QUU5QiwgMHhBRTlDLCAweEFFOUQsCisgICAgMHhBRTlFLCAweEFFOUYsIDB4QUVBMCwgMHhBRUExLCAweEFFQTIsIDB4QUVBMywgMHhBRUE0LCAweEFFQTUsCisgICAgMHhBRUE2LCAweEFFQTcsIDB4QUVBOCwgMHhBRUE5LCAweEFFQUEsIDB4QUVBQiwgMHhBRUFDLCAweEFFQUQsCisgICAgMHhBRUFFLCAweEFFQUYsIDB4QUVCMCwgMHhBRUIxLCAweEFFQjIsIDB4QUVCMywgMHhBRUI0LCAweEFFQjUsCisgICAgMHhBRUI2LCAweEFFQjcsIDB4QUVCOCwgMHhBRUI5LCAweEFFQkEsIDB4QUVCQiwgMHhBRUJGLCAweEFFQzEsCisgICAgMHhBRUMyLCAweEFFQzMsIDB4QUVDNSwgMHhBRUM2LCAweEFFQzcsIDB4QUVDOCwgMHhBRUM5LCAweEFFQ0EsCisgICAgMHhBRUNCLCAweEFFQ0UsIDB4QUVEMiwgMHhBRUQzLCAweEFFRDQsIDB4QUVENSwgMHhBRUQ2LCAweEFFRDcsCisgICAgMHhBRURBLCAweEFFREIsIDB4QUVERCwgMHhBRURFLCAweEFFREYsIDB4QUVFMCwgMHhBRUUxLCAweEFFRTIsCisgICAgMHhBRUUzLCAweEFFRTQsIDB4QUVFNSwgMHhBRUU2LCAweEFFRTcsIDB4QUVFOSwgMHhBRUVBLCAweEFFRUMsCisgICAgMHhBRUVFLCAweEFFRUYsIDB4QUVGMCwgMHhBRUYxLCAweEFFRjIsIDB4QUVGMywgMHhBRUY1LCAweEFFRjYsCisgICAgMHhBRUY3LCAweEFFRjksIDB4QUVGQSwgMHhBRUZCLCAweEFFRkQsIDB4QUVGRSwgMHhBRUZGLCAweEFGMDAsCisgICAgMHhBRjAxLCAweEFGMDIsIDB4QUYwMywgMHhBRjA0LCAweEFGMDUsIDB4QUYwNiwgMHhBRjA5LCAweEFGMEEsCisgICAgMHhBRjBCLCAweEFGMEMsIDB4QUYwRSwgMHhBRjBGLCAweEFGMTEsIDB4QUYxMiwgMHhBRjEzLCAweEFGMTQsCisgICAgMHhBRjE1LCAweEFGMTYsIDB4QUYxNywgMHhBRjE4LCAweEFGMTksIDB4QUYxQSwgMHhBRjFCLCAweEFGMUMsCisgICAgMHhBRjFELCAweEFGMUUsIDB4QUYxRiwgMHhBRjIwLCAweEFGMjEsIDB4QUYyMiwgMHhBRjIzLCAweEFGMjQsCisgICAgMHhBRjI1LCAweEFGMjYsIDB4QUYyNywgMHhBRjI4LCAweEFGMjksIDB4QUYyQSwgMHhBRjJCLCAweEFGMkUsCisgICAgMHhBRjJGLCAweEFGMzEsIDB4QUYzMywgMHhBRjM1LCAweEFGMzYsIDB4QUYzNywgMHhBRjM4LCAweEFGMzksCisgICAgMHhBRjNBLCAweEFGM0IsIDB4QUYzRSwgMHhBRjQwLCAweEFGNDQsIDB4QUY0NSwgMHhBRjQ2LCAweEFGNDcsCisgICAgMHhBRjRBLCAweEFGNEIsIDB4QUY0QywgMHhBRjRELCAweEFGNEUsIDB4QUY0RiwgMHhBRjUxLCAweEFGNTIsCisgICAgMHhBRjUzLCAweEFGNTQsIDB4QUY1NSwgMHhBRjU2LCAweEFGNTcsIDB4QUY1OCwgMHhBRjU5LCAweEFGNUEsCisgICAgMHhBRjVCLCAweEFGNUUsIDB4QUY1RiwgMHhBRjYwLCAweEFGNjEsIDB4QUY2MiwgMHhBRjYzLCAweEFGNjYsCisgICAgMHhBRjY3LCAweEFGNjgsIDB4QUY2OSwgMHhBRjZBLCAweEFGNkIsIDB4QUY2QywgMHhBRjZELCAweEFGNkUsCisgICAgMHhBRjZGLCAweEFGNzAsIDB4QUY3MSwgMHhBRjcyLCAweEFGNzMsIDB4QUY3NCwgMHhBRjc1LCAweEFGNzYsCisgICAgMHhBRjc3LCAweEFGNzgsIDB4QUY3QSwgMHhBRjdCLCAweEFGN0MsIDB4QUY3RCwgMHhBRjdFLCAweEFGN0YsCisgICAgMHhBRjgxLCAweEFGODIsIDB4QUY4MywgMHhBRjg1LCAweEFGODYsIDB4QUY4NywgMHhBRjg5LCAweEFGOEEsCisgICAgMHhBRjhCLCAweEFGOEMsIDB4QUY4RCwgMHhBRjhFLCAweEFGOEYsIDB4QUY5MiwgMHhBRjkzLCAweEFGOTQsCisgICAgMHhBRjk2LCAweEFGOTcsIDB4QUY5OCwgMHhBRjk5LCAweEFGOUEsIDB4QUY5QiwgMHhBRjlELCAweEFGOUUsCisgICAgMHhBRjlGLCAweEFGQTAsIDB4QUZBMSwgMHhBRkEyLCAweEFGQTMsIDB4QUZBNCwgMHhBRkE1LCAweEFGQTYsCisgICAgMHhBRkE3LCAweEFGQTgsIDB4QUZBOSwgMHhBRkFBLCAweEFGQUIsIDB4QUZBQywgMHhBRkFELCAweEFGQUUsCisgICAgMHhBRkFGLCAweEFGQjAsIDB4QUZCMSwgMHhBRkIyLCAweEFGQjMsIDB4QUZCNCwgMHhBRkI1LCAweEFGQjYsCisgICAgMHhBRkI3LCAweEFGQkEsIDB4QUZCQiwgMHhBRkJELCAweEFGQkUsIDB4QUZCRiwgMHhBRkMxLCAweEFGQzIsCisgICAgMHhBRkMzLCAweEFGQzQsIDB4QUZDNSwgMHhBRkM2LCAweEFGQ0EsIDB4QUZDQywgMHhBRkNGLCAweEFGRDAsCisgICAgMHhBRkQxLCAweEFGRDIsIDB4QUZEMywgMHhBRkQ1LCAweEFGRDYsIDB4QUZENywgMHhBRkQ4LCAweEFGRDksCisgICAgMHhBRkRBLCAweEFGREIsIDB4QUZERCwgMHhBRkRFLCAweEFGREYsIDB4QUZFMCwgMHhBRkUxLCAweEFGRTIsCisgICAgMHhBRkUzLCAweEFGRTQsIDB4QUZFNSwgMHhBRkU2LCAweEFGRTcsIDB4QUZFQSwgMHhBRkVCLCAweEFGRUMsCisgICAgMHhBRkVELCAweEFGRUUsIDB4QUZFRiwgMHhBRkYyLCAweEFGRjMsIDB4QUZGNSwgMHhBRkY2LCAweEFGRjcsCisgICAgMHhBRkY5LCAweEFGRkEsIDB4QUZGQiwgMHhBRkZDLCAweEFGRkQsIDB4QUZGRSwgMHhBRkZGLCAweEIwMDIsCisgICAgMHhCMDAzLCAweEIwMDUsIDB4QjAwNiwgMHhCMDA3LCAweEIwMDgsIDB4QjAwOSwgMHhCMDBBLCAweEIwMEIsCisgICAgMHhCMDBELCAweEIwMEUsIDB4QjAwRiwgMHhCMDExLCAweEIwMTIsIDB4QjAxMywgMHhCMDE1LCAweEIwMTYsCisgICAgMHhCMDE3LCAweEIwMTgsIDB4QjAxOSwgMHhCMDFBLCAweEIwMUIsIDB4QjAxRSwgMHhCMDFGLCAweEIwMjAsCisgICAgMHhCMDIxLCAweEIwMjIsIDB4QjAyMywgMHhCMDI0LCAweEIwMjUsIDB4QjAyNiwgMHhCMDI3LCAweEIwMjksCisgICAgMHhCMDJBLCAweEIwMkIsIDB4QjAyQywgMHhCMDJELCAweEIwMkUsIDB4QjAyRiwgMHhCMDMwLCAweEIwMzEsCisgICAgMHhCMDMyLCAweEIwMzMsIDB4QjAzNCwgMHhCMDM1LCAweEIwMzYsIDB4QjAzNywgMHhCMDM4LCAweEIwMzksCisgICAgMHhCMDNBLCAweEIwM0IsIDB4QjAzQywgMHhCMDNELCAweEIwM0UsIDB4QjAzRiwgMHhCMDQwLCAweEIwNDEsCisgICAgMHhCMDQyLCAweEIwNDMsIDB4QjA0NiwgMHhCMDQ3LCAweEIwNDksIDB4QjA0QiwgMHhCMDRELCAweEIwNEYsCisgICAgMHhCMDUwLCAweEIwNTEsIDB4QjA1MiwgMHhCMDU2LCAweEIwNTgsIDB4QjA1QSwgMHhCMDVCLCAweEIwNUMsCisgICAgMHhCMDVFLCAweEIwNUYsIDB4QjA2MCwgMHhCMDYxLCAweEIwNjIsIDB4QjA2MywgMHhCMDY0LCAweEIwNjUsCisgICAgMHhCMDY2LCAweEIwNjcsIDB4QjA2OCwgMHhCMDY5LCAweEIwNkEsIDB4QjA2QiwgMHhCMDZDLCAweEIwNkQsCisgICAgMHhCMDZFLCAweEIwNkYsIDB4QjA3MCwgMHhCMDcxLCAweEIwNzIsIDB4QjA3MywgMHhCMDc0LCAweEIwNzUsCisgICAgMHhCMDc2LCAweEIwNzcsIDB4QjA3OCwgMHhCMDc5LCAweEIwN0EsIDB4QjA3QiwgMHhCMDdFLCAweEIwN0YsCisgICAgMHhCMDgxLCAweEIwODIsIDB4QjA4MywgMHhCMDg1LCAweEIwODYsIDB4QjA4NywgMHhCMDg4LCAweEIwODksCisgICAgMHhCMDhBLCAweEIwOEIsIDB4QjA4RSwgMHhCMDkwLCAweEIwOTIsIDB4QjA5MywgMHhCMDk0LCAweEIwOTUsCisgICAgMHhCMDk2LCAweEIwOTcsIDB4QjA5QiwgMHhCMDlELCAweEIwOUUsIDB4QjBBMywgMHhCMEE0LCAweEIwQTUsCisgICAgMHhCMEE2LCAweEIwQTcsIDB4QjBBQSwgMHhCMEIwLCAweEIwQjIsIDB4QjBCNiwgMHhCMEI3LCAweEIwQjksCisgICAgMHhCMEJBLCAweEIwQkIsIDB4QjBCRCwgMHhCMEJFLCAweEIwQkYsIDB4QjBDMCwgMHhCMEMxLCAweEIwQzIsCisgICAgMHhCMEMzLCAweEIwQzYsIDB4QjBDQSwgMHhCMENCLCAweEIwQ0MsIDB4QjBDRCwgMHhCMENFLCAweEIwQ0YsCisgICAgMHhCMEQyLCAweEIwRDMsIDB4QjBENSwgMHhCMEQ2LCAweEIwRDcsIDB4QjBEOSwgMHhCMERBLCAweEIwREIsCisgICAgMHhCMERDLCAweEIwREQsIDB4QjBERSwgMHhCMERGLCAweEIwRTEsIDB4QjBFMiwgMHhCMEUzLCAweEIwRTQsCisgICAgMHhCMEU2LCAweEIwRTcsIDB4QjBFOCwgMHhCMEU5LCAweEIwRUEsIDB4QjBFQiwgMHhCMEVDLCAweEIwRUQsCisgICAgMHhCMEVFLCAweEIwRUYsIDB4QjBGMCwgMHhCMEYxLCAweEIwRjIsIDB4QjBGMywgMHhCMEY0LCAweEIwRjUsCisgICAgMHhCMEY2LCAweEIwRjcsIDB4QjBGOCwgMHhCMEY5LCAweEIwRkEsIDB4QjBGQiwgMHhCMEZDLCAweEIwRkQsCisgICAgMHhCMEZFLCAweEIwRkYsIDB4QjEwMCwgMHhCMTAxLCAweEIxMDIsIDB4QjEwMywgMHhCMTA0LCAweEIxMDUsCisgICAgMHhCMTA2LCAweEIxMDcsIDB4QjEwQSwgMHhCMTBELCAweEIxMEUsIDB4QjEwRiwgMHhCMTExLCAweEIxMTQsCisgICAgMHhCMTE1LCAweEIxMTYsIDB4QjExNywgMHhCMTFBLCAweEIxMUUsIDB4QjExRiwgMHhCMTIwLCAweEIxMjEsCisgICAgMHhCMTIyLCAweEIxMjYsIDB4QjEyNywgMHhCMTI5LCAweEIxMkEsIDB4QjEyQiwgMHhCMTJELCAweEIxMkUsCisgICAgMHhCMTJGLCAweEIxMzAsIDB4QjEzMSwgMHhCMTMyLCAweEIxMzMsIDB4QjEzNiwgMHhCMTNBLCAweEIxM0IsCisgICAgMHhCMTNDLCAweEIxM0QsIDB4QjEzRSwgMHhCMTNGLCAweEIxNDIsIDB4QjE0MywgMHhCMTQ1LCAweEIxNDYsCisgICAgMHhCMTQ3LCAweEIxNDksIDB4QjE0QSwgMHhCMTRCLCAweEIxNEMsIDB4QjE0RCwgMHhCMTRFLCAweEIxNEYsCisgICAgMHhCMTUyLCAweEIxNTMsIDB4QjE1NiwgMHhCMTU3LCAweEIxNTksIDB4QjE1QSwgMHhCMTVCLCAweEIxNUQsCisgICAgMHhCMTVFLCAweEIxNUYsIDB4QjE2MSwgMHhCMTYyLCAweEIxNjMsIDB4QjE2NCwgMHhCMTY1LCAweEIxNjYsCisgICAgMHhCMTY3LCAweEIxNjgsIDB4QjE2OSwgMHhCMTZBLCAweEIxNkIsIDB4QjE2QywgMHhCMTZELCAweEIxNkUsCisgICAgMHhCMTZGLCAweEIxNzAsIDB4QjE3MSwgMHhCMTcyLCAweEIxNzMsIDB4QjE3NCwgMHhCMTc1LCAweEIxNzYsCisgICAgMHhCMTc3LCAweEIxN0EsIDB4QjE3QiwgMHhCMTdELCAweEIxN0UsIDB4QjE3RiwgMHhCMTgxLCAweEIxODMsCisgICAgMHhCMTg0LCAweEIxODUsIDB4QjE4NiwgMHhCMTg3LCAweEIxOEEsIDB4QjE4QywgMHhCMThFLCAweEIxOEYsCisgICAgMHhCMTkwLCAweEIxOTEsIDB4QjE5NSwgMHhCMTk2LCAweEIxOTcsIDB4QjE5OSwgMHhCMTlBLCAweEIxOUIsCisgICAgMHhCMTlELCAweEIxOUUsIDB4QjE5RiwgMHhCMUEwLCAweEIxQTEsIDB4QjFBMiwgMHhCMUEzLCAweEIxQTQsCisgICAgMHhCMUE1LCAweEIxQTYsIDB4QjFBNywgMHhCMUE5LCAweEIxQUEsIDB4QjFBQiwgMHhCMUFDLCAweEIxQUQsCisgICAgMHhCMUFFLCAweEIxQUYsIDB4QjFCMCwgMHhCMUIxLCAweEIxQjIsIDB4QjFCMywgMHhCMUI0LCAweEIxQjUsCisgICAgMHhCMUI2LCAweEIxQjcsIDB4QjFCOCwgMHhCMUI5LCAweEIxQkEsIDB4QjFCQiwgMHhCMUJDLCAweEIxQkQsCisgICAgMHhCMUJFLCAweEIxQkYsIDB4QjFDMCwgMHhCMUMxLCAweEIxQzIsIDB4QjFDMywgMHhCMUM0LCAweEIxQzUsCisgICAgMHhCMUM2LCAweEIxQzcsIDB4QjFDOCwgMHhCMUM5LCAweEIxQ0EsIDB4QjFDQiwgMHhCMUNELCAweEIxQ0UsCisgICAgMHhCMUNGLCAweEIxRDEsIDB4QjFEMiwgMHhCMUQzLCAweEIxRDUsIDB4QjFENiwgMHhCMUQ3LCAweEIxRDgsCisgICAgMHhCMUQ5LCAweEIxREEsIDB4QjFEQiwgMHhCMURFLCAweEIxRTAsIDB4QjFFMSwgMHhCMUUyLCAweEIxRTMsCisgICAgMHhCMUU0LCAweEIxRTUsIDB4QjFFNiwgMHhCMUU3LCAweEIxRUEsIDB4QjFFQiwgMHhCMUVELCAweEIxRUUsCisgICAgMHhCMUVGLCAweEIxRjEsIDB4QjFGMiwgMHhCMUYzLCAweEIxRjQsIDB4QjFGNSwgMHhCMUY2LCAweEIxRjcsCisgICAgMHhCMUY4LCAweEIxRkEsIDB4QjFGQywgMHhCMUZFLCAweEIxRkYsIDB4QjIwMCwgMHhCMjAxLCAweEIyMDIsCisgICAgMHhCMjAzLCAweEIyMDYsIDB4QjIwNywgMHhCMjA5LCAweEIyMEEsIDB4QjIwRCwgMHhCMjBFLCAweEIyMEYsCisgICAgMHhCMjEwLCAweEIyMTEsIDB4QjIxMiwgMHhCMjEzLCAweEIyMTYsIDB4QjIxOCwgMHhCMjFBLCAweEIyMUIsCisgICAgMHhCMjFDLCAweEIyMUQsIDB4QjIxRSwgMHhCMjFGLCAweEIyMjEsIDB4QjIyMiwgMHhCMjIzLCAweEIyMjQsCisgICAgMHhCMjI1LCAweEIyMjYsIDB4QjIyNywgMHhCMjI4LCAweEIyMjksIDB4QjIyQSwgMHhCMjJCLCAweEIyMkMsCisgICAgMHhCMjJELCAweEIyMkUsIDB4QjIyRiwgMHhCMjMwLCAweEIyMzEsIDB4QjIzMiwgMHhCMjMzLCAweEIyMzUsCisgICAgMHhCMjM2LCAweEIyMzcsIDB4QjIzOCwgMHhCMjM5LCAweEIyM0EsIDB4QjIzQiwgMHhCMjNELCAweEIyM0UsCisgICAgMHhCMjNGLCAweEIyNDAsIDB4QjI0MSwgMHhCMjQyLCAweEIyNDMsIDB4QjI0NCwgMHhCMjQ1LCAweEIyNDYsCisgICAgMHhCMjQ3LCAweEIyNDgsIDB4QjI0OSwgMHhCMjRBLCAweEIyNEIsIDB4QjI0QywgMHhCMjRELCAweEIyNEUsCisgICAgMHhCMjRGLCAweEIyNTAsIDB4QjI1MSwgMHhCMjUyLCAweEIyNTMsIDB4QjI1NCwgMHhCMjU1LCAweEIyNTYsCisgICAgMHhCMjU3LCAweEIyNTksIDB4QjI1QSwgMHhCMjVCLCAweEIyNUQsIDB4QjI1RSwgMHhCMjVGLCAweEIyNjEsCisgICAgMHhCMjYyLCAweEIyNjMsIDB4QjI2NCwgMHhCMjY1LCAweEIyNjYsIDB4QjI2NywgMHhCMjZBLCAweEIyNkIsCisgICAgMHhCMjZDLCAweEIyNkQsIDB4QjI2RSwgMHhCMjZGLCAweEIyNzAsIDB4QjI3MSwgMHhCMjcyLCAweEIyNzMsCisgICAgMHhCMjc2LCAweEIyNzcsIDB4QjI3OCwgMHhCMjc5LCAweEIyN0EsIDB4QjI3QiwgMHhCMjdELCAweEIyN0UsCisgICAgMHhCMjdGLCAweEIyODAsIDB4QjI4MSwgMHhCMjgyLCAweEIyODMsIDB4QjI4NiwgMHhCMjg3LCAweEIyODgsCisgICAgMHhCMjhBLCAweEIyOEIsIDB4QjI4QywgMHhCMjhELCAweEIyOEUsIDB4QjI4RiwgMHhCMjkyLCAweEIyOTMsCisgICAgMHhCMjk1LCAweEIyOTYsIDB4QjI5NywgMHhCMjlCLCAweEIyOUMsIDB4QjI5RCwgMHhCMjlFLCAweEIyOUYsCisgICAgMHhCMkEyLCAweEIyQTQsIDB4QjJBNywgMHhCMkE4LCAweEIyQTksIDB4QjJBQiwgMHhCMkFELCAweEIyQUUsCisgICAgMHhCMkFGLCAweEIyQjEsIDB4QjJCMiwgMHhCMkIzLCAweEIyQjUsIDB4QjJCNiwgMHhCMkI3LCAweEIyQjgsCisgICAgMHhCMkI5LCAweEIyQkEsIDB4QjJCQiwgMHhCMkJDLCAweEIyQkQsIDB4QjJCRSwgMHhCMkJGLCAweEIyQzAsCisgICAgMHhCMkMxLCAweEIyQzIsIDB4QjJDMywgMHhCMkM0LCAweEIyQzUsIDB4QjJDNiwgMHhCMkM3LCAweEIyQ0EsCisgICAgMHhCMkNCLCAweEIyQ0QsIDB4QjJDRSwgMHhCMkNGLCAweEIyRDEsIDB4QjJEMywgMHhCMkQ0LCAweEIyRDUsCisgICAgMHhCMkQ2LCAweEIyRDcsIDB4QjJEQSwgMHhCMkRDLCAweEIyREUsIDB4QjJERiwgMHhCMkUwLCAweEIyRTEsCisgICAgMHhCMkUzLCAweEIyRTcsIDB4QjJFOSwgMHhCMkVBLCAweEIyRjAsIDB4QjJGMSwgMHhCMkYyLCAweEIyRjYsCisgICAgMHhCMkZDLCAweEIyRkQsIDB4QjJGRSwgMHhCMzAyLCAweEIzMDMsIDB4QjMwNSwgMHhCMzA2LCAweEIzMDcsCisgICAgMHhCMzA5LCAweEIzMEEsIDB4QjMwQiwgMHhCMzBDLCAweEIzMEQsIDB4QjMwRSwgMHhCMzBGLCAweEIzMTIsCisgICAgMHhCMzE2LCAweEIzMTcsIDB4QjMxOCwgMHhCMzE5LCAweEIzMUEsIDB4QjMxQiwgMHhCMzFELCAweEIzMUUsCisgICAgMHhCMzFGLCAweEIzMjAsIDB4QjMyMSwgMHhCMzIyLCAweEIzMjMsIDB4QjMyNCwgMHhCMzI1LCAweEIzMjYsCisgICAgMHhCMzI3LCAweEIzMjgsIDB4QjMyOSwgMHhCMzJBLCAweEIzMkIsIDB4QjMyQywgMHhCMzJELCAweEIzMkUsCisgICAgMHhCMzJGLCAweEIzMzAsIDB4QjMzMSwgMHhCMzMyLCAweEIzMzMsIDB4QjMzNCwgMHhCMzM1LCAweEIzMzYsCisgICAgMHhCMzM3LCAweEIzMzgsIDB4QjMzOSwgMHhCMzNBLCAweEIzM0IsIDB4QjMzQywgMHhCMzNELCAweEIzM0UsCisgICAgMHhCMzNGLCAweEIzNDAsIDB4QjM0MSwgMHhCMzQyLCAweEIzNDMsIDB4QjM0NCwgMHhCMzQ1LCAweEIzNDYsCisgICAgMHhCMzQ3LCAweEIzNDgsIDB4QjM0OSwgMHhCMzRBLCAweEIzNEIsIDB4QjM0QywgMHhCMzRELCAweEIzNEUsCisgICAgMHhCMzRGLCAweEIzNTAsIDB4QjM1MSwgMHhCMzUyLCAweEIzNTMsIDB4QjM1NywgMHhCMzU5LCAweEIzNUEsCisgICAgMHhCMzVELCAweEIzNjAsIDB4QjM2MSwgMHhCMzYyLCAweEIzNjMsIDB4QjM2NiwgMHhCMzY4LCAweEIzNkEsCisgICAgMHhCMzZDLCAweEIzNkQsIDB4QjM2RiwgMHhCMzcyLCAweEIzNzMsIDB4QjM3NSwgMHhCMzc2LCAweEIzNzcsCisgICAgMHhCMzc5LCAweEIzN0EsIDB4QjM3QiwgMHhCMzdDLCAweEIzN0QsIDB4QjM3RSwgMHhCMzdGLCAweEIzODIsCisgICAgMHhCMzg2LCAweEIzODcsIDB4QjM4OCwgMHhCMzg5LCAweEIzOEEsIDB4QjM4QiwgMHhCMzhELCAweEIzOEUsCisgICAgMHhCMzhGLCAweEIzOTEsIDB4QjM5MiwgMHhCMzkzLCAweEIzOTUsIDB4QjM5NiwgMHhCMzk3LCAweEIzOTgsCisgICAgMHhCMzk5LCAweEIzOUEsIDB4QjM5QiwgMHhCMzlDLCAweEIzOUQsIDB4QjM5RSwgMHhCMzlGLCAweEIzQTIsCisgICAgMHhCM0EzLCAweEIzQTQsIDB4QjNBNSwgMHhCM0E2LCAweEIzQTcsIDB4QjNBOSwgMHhCM0FBLCAweEIzQUIsCisgICAgMHhCM0FELCAweEIzQUUsIDB4QjNBRiwgMHhCM0IwLCAweEIzQjEsIDB4QjNCMiwgMHhCM0IzLCAweEIzQjQsCisgICAgMHhCM0I1LCAweEIzQjYsIDB4QjNCNywgMHhCM0I4LCAweEIzQjksIDB4QjNCQSwgMHhCM0JCLCAweEIzQkMsCisgICAgMHhCM0JELCAweEIzQkUsIDB4QjNCRiwgMHhCM0MwLCAweEIzQzEsIDB4QjNDMiwgMHhCM0MzLCAweEIzQzYsCisgICAgMHhCM0M3LCAweEIzQzksIDB4QjNDQSwgMHhCM0NELCAweEIzQ0YsIDB4QjNEMSwgMHhCM0QyLCAweEIzRDMsCisgICAgMHhCM0Q2LCAweEIzRDgsIDB4QjNEQSwgMHhCM0RDLCAweEIzREUsIDB4QjNERiwgMHhCM0UxLCAweEIzRTIsCisgICAgMHhCM0UzLCAweEIzRTUsIDB4QjNFNiwgMHhCM0U3LCAweEIzRTksIDB4QjNFQSwgMHhCM0VCLCAweEIzRUMsCisgICAgMHhCM0VELCAweEIzRUUsIDB4QjNFRiwgMHhCM0YwLCAweEIzRjEsIDB4QjNGMiwgMHhCM0YzLCAweEIzRjQsCisgICAgMHhCM0Y1LCAweEIzRjYsIDB4QjNGNywgMHhCM0Y4LCAweEIzRjksIDB4QjNGQSwgMHhCM0ZCLCAweEIzRkQsCisgICAgMHhCM0ZFLCAweEIzRkYsIDB4QjQwMCwgMHhCNDAxLCAweEI0MDIsIDB4QjQwMywgMHhCNDA0LCAweEI0MDUsCisgICAgMHhCNDA2LCAweEI0MDcsIDB4QjQwOCwgMHhCNDA5LCAweEI0MEEsIDB4QjQwQiwgMHhCNDBDLCAweEI0MEQsCisgICAgMHhCNDBFLCAweEI0MEYsIDB4QjQxMSwgMHhCNDEyLCAweEI0MTMsIDB4QjQxNCwgMHhCNDE1LCAweEI0MTYsCisgICAgMHhCNDE3LCAweEI0MTksIDB4QjQxQSwgMHhCNDFCLCAweEI0MUQsIDB4QjQxRSwgMHhCNDFGLCAweEI0MjEsCisgICAgMHhCNDIyLCAweEI0MjMsIDB4QjQyNCwgMHhCNDI1LCAweEI0MjYsIDB4QjQyNywgMHhCNDJBLCAweEI0MkMsCisgICAgMHhCNDJELCAweEI0MkUsIDB4QjQyRiwgMHhCNDMwLCAweEI0MzEsIDB4QjQzMiwgMHhCNDMzLCAweEI0MzUsCisgICAgMHhCNDM2LCAweEI0MzcsIDB4QjQzOCwgMHhCNDM5LCAweEI0M0EsIDB4QjQzQiwgMHhCNDNDLCAweEI0M0QsCisgICAgMHhCNDNFLCAweEI0M0YsIDB4QjQ0MCwgMHhCNDQxLCAweEI0NDIsIDB4QjQ0MywgMHhCNDQ0LCAweEI0NDUsCisgICAgMHhCNDQ2LCAweEI0NDcsIDB4QjQ0OCwgMHhCNDQ5LCAweEI0NEEsIDB4QjQ0QiwgMHhCNDRDLCAweEI0NEQsCisgICAgMHhCNDRFLCAweEI0NEYsIDB4QjQ1MiwgMHhCNDUzLCAweEI0NTUsIDB4QjQ1NiwgMHhCNDU3LCAweEI0NTksCisgICAgMHhCNDVBLCAweEI0NUIsIDB4QjQ1QywgMHhCNDVELCAweEI0NUUsIDB4QjQ1RiwgMHhCNDYyLCAweEI0NjQsCisgICAgMHhCNDY2LCAweEI0NjcsIDB4QjQ2OCwgMHhCNDY5LCAweEI0NkEsIDB4QjQ2QiwgMHhCNDZELCAweEI0NkUsCisgICAgMHhCNDZGLCAweEI0NzAsIDB4QjQ3MSwgMHhCNDcyLCAweEI0NzMsIDB4QjQ3NCwgMHhCNDc1LCAweEI0NzYsCisgICAgMHhCNDc3LCAweEI0NzgsIDB4QjQ3OSwgMHhCNDdBLCAweEI0N0IsIDB4QjQ3QywgMHhCNDdELCAweEI0N0UsCisgICAgMHhCNDdGLCAweEI0ODEsIDB4QjQ4MiwgMHhCNDgzLCAweEI0ODQsIDB4QjQ4NSwgMHhCNDg2LCAweEI0ODcsCisgICAgMHhCNDg5LCAweEI0OEEsIDB4QjQ4QiwgMHhCNDhDLCAweEI0OEQsIDB4QjQ4RSwgMHhCNDhGLCAweEI0OTAsCisgICAgMHhCNDkxLCAweEI0OTIsIDB4QjQ5MywgMHhCNDk0LCAweEI0OTUsIDB4QjQ5NiwgMHhCNDk3LCAweEI0OTgsCisgICAgMHhCNDk5LCAweEI0OUEsIDB4QjQ5QiwgMHhCNDlDLCAweEI0OUUsIDB4QjQ5RiwgMHhCNEEwLCAweEI0QTEsCisgICAgMHhCNEEyLCAweEI0QTMsIDB4QjRBNSwgMHhCNEE2LCAweEI0QTcsIDB4QjRBOSwgMHhCNEFBLCAweEI0QUIsCisgICAgMHhCNEFELCAweEI0QUUsIDB4QjRBRiwgMHhCNEIwLCAweEI0QjEsIDB4QjRCMiwgMHhCNEIzLCAweEI0QjQsCisgICAgMHhCNEI2LCAweEI0QjgsIDB4QjRCQSwgMHhCNEJCLCAweEI0QkMsIDB4QjRCRCwgMHhCNEJFLCAweEI0QkYsCisgICAgMHhCNEMxLCAweEI0QzIsIDB4QjRDMywgMHhCNEM1LCAweEI0QzYsIDB4QjRDNywgMHhCNEM5LCAweEI0Q0EsCisgICAgMHhCNENCLCAweEI0Q0MsIDB4QjRDRCwgMHhCNENFLCAweEI0Q0YsIDB4QjREMSwgMHhCNEQyLCAweEI0RDMsCisgICAgMHhCNEQ0LCAweEI0RDYsIDB4QjRENywgMHhCNEQ4LCAweEI0RDksIDB4QjREQSwgMHhCNERCLCAweEI0REUsCisgICAgMHhCNERGLCAweEI0RTEsIDB4QjRFMiwgMHhCNEU1LCAweEI0RTcsIDB4QjRFOCwgMHhCNEU5LCAweEI0RUEsCisgICAgMHhCNEVCLCAweEI0RUUsIDB4QjRGMCwgMHhCNEYyLCAweEI0RjMsIDB4QjRGNCwgMHhCNEY1LCAweEI0RjYsCisgICAgMHhCNEY3LCAweEI0RjksIDB4QjRGQSwgMHhCNEZCLCAweEI0RkMsIDB4QjRGRCwgMHhCNEZFLCAweEI0RkYsCisgICAgMHhCNTAwLCAweEI1MDEsIDB4QjUwMiwgMHhCNTAzLCAweEI1MDQsIDB4QjUwNSwgMHhCNTA2LCAweEI1MDcsCisgICAgMHhCNTA4LCAweEI1MDksIDB4QjUwQSwgMHhCNTBCLCAweEI1MEMsIDB4QjUwRCwgMHhCNTBFLCAweEI1MEYsCisgICAgMHhCNTEwLCAweEI1MTEsIDB4QjUxMiwgMHhCNTEzLCAweEI1MTYsIDB4QjUxNywgMHhCNTE5LCAweEI1MUEsCisgICAgMHhCNTFELCAweEI1MUUsIDB4QjUxRiwgMHhCNTIwLCAweEI1MjEsIDB4QjUyMiwgMHhCNTIzLCAweEI1MjYsCisgICAgMHhCNTJCLCAweEI1MkMsIDB4QjUyRCwgMHhCNTJFLCAweEI1MkYsIDB4QjUzMiwgMHhCNTMzLCAweEI1MzUsCisgICAgMHhCNTM2LCAweEI1MzcsIDB4QjUzOSwgMHhCNTNBLCAweEI1M0IsIDB4QjUzQywgMHhCNTNELCAweEI1M0UsCisgICAgMHhCNTNGLCAweEI1NDIsIDB4QjU0NiwgMHhCNTQ3LCAweEI1NDgsIDB4QjU0OSwgMHhCNTRBLCAweEI1NEUsCisgICAgMHhCNTRGLCAweEI1NTEsIDB4QjU1MiwgMHhCNTUzLCAweEI1NTUsIDB4QjU1NiwgMHhCNTU3LCAweEI1NTgsCisgICAgMHhCNTU5LCAweEI1NUEsIDB4QjU1QiwgMHhCNTVFLCAweEI1NjIsIDB4QjU2MywgMHhCNTY0LCAweEI1NjUsCisgICAgMHhCNTY2LCAweEI1NjcsIDB4QjU2OCwgMHhCNTY5LCAweEI1NkEsIDB4QjU2QiwgMHhCNTZDLCAweEI1NkQsCisgICAgMHhCNTZFLCAweEI1NkYsIDB4QjU3MCwgMHhCNTcxLCAweEI1NzIsIDB4QjU3MywgMHhCNTc0LCAweEI1NzUsCisgICAgMHhCNTc2LCAweEI1NzcsIDB4QjU3OCwgMHhCNTc5LCAweEI1N0EsIDB4QjU3QiwgMHhCNTdDLCAweEI1N0QsCisgICAgMHhCNTdFLCAweEI1N0YsIDB4QjU4MCwgMHhCNTgxLCAweEI1ODIsIDB4QjU4MywgMHhCNTg0LCAweEI1ODUsCisgICAgMHhCNTg2LCAweEI1ODcsIDB4QjU4OCwgMHhCNTg5LCAweEI1OEEsIDB4QjU4QiwgMHhCNThDLCAweEI1OEQsCisgICAgMHhCNThFLCAweEI1OEYsIDB4QjU5MCwgMHhCNTkxLCAweEI1OTIsIDB4QjU5MywgMHhCNTk0LCAweEI1OTUsCisgICAgMHhCNTk2LCAweEI1OTcsIDB4QjU5OCwgMHhCNTk5LCAweEI1OUEsIDB4QjU5QiwgMHhCNTlDLCAweEI1OUQsCisgICAgMHhCNTlFLCAweEI1OUYsIDB4QjVBMiwgMHhCNUEzLCAweEI1QTUsIDB4QjVBNiwgMHhCNUE3LCAweEI1QTksCisgICAgMHhCNUFDLCAweEI1QUQsIDB4QjVBRSwgMHhCNUFGLCAweEI1QjIsIDB4QjVCNiwgMHhCNUI3LCAweEI1QjgsCisgICAgMHhCNUI5LCAweEI1QkEsIDB4QjVCRSwgMHhCNUJGLCAweEI1QzEsIDB4QjVDMiwgMHhCNUMzLCAweEI1QzUsCisgICAgMHhCNUM2LCAweEI1QzcsIDB4QjVDOCwgMHhCNUM5LCAweEI1Q0EsIDB4QjVDQiwgMHhCNUNFLCAweEI1RDIsCisgICAgMHhCNUQzLCAweEI1RDQsIDB4QjVENSwgMHhCNUQ2LCAweEI1RDcsIDB4QjVEOSwgMHhCNURBLCAweEI1REIsCisgICAgMHhCNURDLCAweEI1REQsIDB4QjVERSwgMHhCNURGLCAweEI1RTAsIDB4QjVFMSwgMHhCNUUyLCAweEI1RTMsCisgICAgMHhCNUU0LCAweEI1RTUsIDB4QjVFNiwgMHhCNUU3LCAweEI1RTgsIDB4QjVFOSwgMHhCNUVBLCAweEI1RUIsCisgICAgMHhCNUVELCAweEI1RUUsIDB4QjVFRiwgMHhCNUYwLCAweEI1RjEsIDB4QjVGMiwgMHhCNUYzLCAweEI1RjQsCisgICAgMHhCNUY1LCAweEI1RjYsIDB4QjVGNywgMHhCNUY4LCAweEI1RjksIDB4QjVGQSwgMHhCNUZCLCAweEI1RkMsCisgICAgMHhCNUZELCAweEI1RkUsIDB4QjVGRiwgMHhCNjAwLCAweEI2MDEsIDB4QjYwMiwgMHhCNjAzLCAweEI2MDQsCisgICAgMHhCNjA1LCAweEI2MDYsIDB4QjYwNywgMHhCNjA4LCAweEI2MDksIDB4QjYwQSwgMHhCNjBCLCAweEI2MEMsCisgICAgMHhCNjBELCAweEI2MEUsIDB4QjYwRiwgMHhCNjEyLCAweEI2MTMsIDB4QjYxNSwgMHhCNjE2LCAweEI2MTcsCisgICAgMHhCNjE5LCAweEI2MUEsIDB4QjYxQiwgMHhCNjFDLCAweEI2MUQsIDB4QjYxRSwgMHhCNjFGLCAweEI2MjAsCisgICAgMHhCNjIxLCAweEI2MjIsIDB4QjYyMywgMHhCNjI0LCAweEI2MjYsIDB4QjYyNywgMHhCNjI4LCAweEI2MjksCisgICAgMHhCNjJBLCAweEI2MkIsIDB4QjYyRCwgMHhCNjJFLCAweEI2MkYsIDB4QjYzMCwgMHhCNjMxLCAweEI2MzIsCisgICAgMHhCNjMzLCAweEI2MzUsIDB4QjYzNiwgMHhCNjM3LCAweEI2MzgsIDB4QjYzOSwgMHhCNjNBLCAweEI2M0IsCisgICAgMHhCNjNDLCAweEI2M0QsIDB4QjYzRSwgMHhCNjNGLCAweEI2NDAsIDB4QjY0MSwgMHhCNjQyLCAweEI2NDMsCisgICAgMHhCNjQ0LCAweEI2NDUsIDB4QjY0NiwgMHhCNjQ3LCAweEI2NDksIDB4QjY0QSwgMHhCNjRCLCAweEI2NEMsCisgICAgMHhCNjRELCAweEI2NEUsIDB4QjY0RiwgMHhCNjUwLCAweEI2NTEsIDB4QjY1MiwgMHhCNjUzLCAweEI2NTQsCisgICAgMHhCNjU1LCAweEI2NTYsIDB4QjY1NywgMHhCNjU4LCAweEI2NTksIDB4QjY1QSwgMHhCNjVCLCAweEI2NUMsCisgICAgMHhCNjVELCAweEI2NUUsIDB4QjY1RiwgMHhCNjYwLCAweEI2NjEsIDB4QjY2MiwgMHhCNjYzLCAweEI2NjUsCisgICAgMHhCNjY2LCAweEI2NjcsIDB4QjY2OSwgMHhCNjZBLCAweEI2NkIsIDB4QjY2QywgMHhCNjZELCAweEI2NkUsCisgICAgMHhCNjZGLCAweEI2NzAsIDB4QjY3MSwgMHhCNjcyLCAweEI2NzMsIDB4QjY3NCwgMHhCNjc1LCAweEI2NzYsCisgICAgMHhCNjc3LCAweEI2NzgsIDB4QjY3OSwgMHhCNjdBLCAweEI2N0IsIDB4QjY3QywgMHhCNjdELCAweEI2N0UsCisgICAgMHhCNjdGLCAweEI2ODAsIDB4QjY4MSwgMHhCNjgyLCAweEI2ODMsIDB4QjY4NCwgMHhCNjg1LCAweEI2ODYsCisgICAgMHhCNjg3LCAweEI2ODgsIDB4QjY4OSwgMHhCNjhBLCAweEI2OEIsIDB4QjY4QywgMHhCNjhELCAweEI2OEUsCisgICAgMHhCNjhGLCAweEI2OTAsIDB4QjY5MSwgMHhCNjkyLCAweEI2OTMsIDB4QjY5NCwgMHhCNjk1LCAweEI2OTYsCisgICAgMHhCNjk3LCAweEI2OTgsIDB4QjY5OSwgMHhCNjlBLCAweEI2OUIsIDB4QjY5RSwgMHhCNjlGLCAweEI2QTEsCisgICAgMHhCNkEyLCAweEI2QTMsIDB4QjZBNSwgMHhCNkE2LCAweEI2QTcsIDB4QjZBOCwgMHhCNkE5LCAweEI2QUEsCisgICAgMHhCNkFELCAweEI2QUUsIDB4QjZBRiwgMHhCNkIwLCAweEI2QjIsIDB4QjZCMywgMHhCNkI0LCAweEI2QjUsCisgICAgMHhCNkI2LCAweEI2QjcsIDB4QjZCOCwgMHhCNkI5LCAweEI2QkEsIDB4QjZCQiwgMHhCNkJDLCAweEI2QkQsCisgICAgMHhCNkJFLCAweEI2QkYsIDB4QjZDMCwgMHhCNkMxLCAweEI2QzIsIDB4QjZDMywgMHhCNkM0LCAweEI2QzUsCisgICAgMHhCNkM2LCAweEI2QzcsIDB4QjZDOCwgMHhCNkM5LCAweEI2Q0EsIDB4QjZDQiwgMHhCNkNDLCAweEI2Q0QsCisgICAgMHhCNkNFLCAweEI2Q0YsIDB4QjZEMCwgMHhCNkQxLCAweEI2RDIsIDB4QjZEMywgMHhCNkQ1LCAweEI2RDYsCisgICAgMHhCNkQ3LCAweEI2RDgsIDB4QjZEOSwgMHhCNkRBLCAweEI2REIsIDB4QjZEQywgMHhCNkRELCAweEI2REUsCisgICAgMHhCNkRGLCAweEI2RTAsIDB4QjZFMSwgMHhCNkUyLCAweEI2RTMsIDB4QjZFNCwgMHhCNkU1LCAweEI2RTYsCisgICAgMHhCNkU3LCAweEI2RTgsIDB4QjZFOSwgMHhCNkVBLCAweEI2RUIsIDB4QjZFQywgMHhCNkVELCAweEI2RUUsCisgICAgMHhCNkVGLCAweEI2RjEsIDB4QjZGMiwgMHhCNkYzLCAweEI2RjUsIDB4QjZGNiwgMHhCNkY3LCAweEI2RjksCisgICAgMHhCNkZBLCAweEI2RkIsIDB4QjZGQywgMHhCNkZELCAweEI2RkUsIDB4QjZGRiwgMHhCNzAyLCAweEI3MDMsCisgICAgMHhCNzA0LCAweEI3MDYsIDB4QjcwNywgMHhCNzA4LCAweEI3MDksIDB4QjcwQSwgMHhCNzBCLCAweEI3MEMsCisgICAgMHhCNzBELCAweEI3MEUsIDB4QjcwRiwgMHhCNzEwLCAweEI3MTEsIDB4QjcxMiwgMHhCNzEzLCAweEI3MTQsCisgICAgMHhCNzE1LCAweEI3MTYsIDB4QjcxNywgMHhCNzE4LCAweEI3MTksIDB4QjcxQSwgMHhCNzFCLCAweEI3MUMsCisgICAgMHhCNzFELCAweEI3MUUsIDB4QjcxRiwgMHhCNzIwLCAweEI3MjEsIDB4QjcyMiwgMHhCNzIzLCAweEI3MjQsCisgICAgMHhCNzI1LCAweEI3MjYsIDB4QjcyNywgMHhCNzJBLCAweEI3MkIsIDB4QjcyRCwgMHhCNzJFLCAweEI3MzEsCisgICAgMHhCNzMyLCAweEI3MzMsIDB4QjczNCwgMHhCNzM1LCAweEI3MzYsIDB4QjczNywgMHhCNzNBLCAweEI3M0MsCisgICAgMHhCNzNELCAweEI3M0UsIDB4QjczRiwgMHhCNzQwLCAweEI3NDEsIDB4Qjc0MiwgMHhCNzQzLCAweEI3NDUsCisgICAgMHhCNzQ2LCAweEI3NDcsIDB4Qjc0OSwgMHhCNzRBLCAweEI3NEIsIDB4Qjc0RCwgMHhCNzRFLCAweEI3NEYsCisgICAgMHhCNzUwLCAweEI3NTEsIDB4Qjc1MiwgMHhCNzUzLCAweEI3NTYsIDB4Qjc1NywgMHhCNzU4LCAweEI3NTksCisgICAgMHhCNzVBLCAweEI3NUIsIDB4Qjc1QywgMHhCNzVELCAweEI3NUUsIDB4Qjc1RiwgMHhCNzYxLCAweEI3NjIsCisgICAgMHhCNzYzLCAweEI3NjUsIDB4Qjc2NiwgMHhCNzY3LCAweEI3NjksIDB4Qjc2QSwgMHhCNzZCLCAweEI3NkMsCisgICAgMHhCNzZELCAweEI3NkUsIDB4Qjc2RiwgMHhCNzcyLCAweEI3NzQsIDB4Qjc3NiwgMHhCNzc3LCAweEI3NzgsCisgICAgMHhCNzc5LCAweEI3N0EsIDB4Qjc3QiwgMHhCNzdFLCAweEI3N0YsIDB4Qjc4MSwgMHhCNzgyLCAweEI3ODMsCisgICAgMHhCNzg1LCAweEI3ODYsIDB4Qjc4NywgMHhCNzg4LCAweEI3ODksIDB4Qjc4QSwgMHhCNzhCLCAweEI3OEUsCisgICAgMHhCNzkzLCAweEI3OTQsIDB4Qjc5NSwgMHhCNzlBLCAweEI3OUIsIDB4Qjc5RCwgMHhCNzlFLCAweEI3OUYsCisgICAgMHhCN0ExLCAweEI3QTIsIDB4QjdBMywgMHhCN0E0LCAweEI3QTUsIDB4QjdBNiwgMHhCN0E3LCAweEI3QUEsCisgICAgMHhCN0FFLCAweEI3QUYsIDB4QjdCMCwgMHhCN0IxLCAweEI3QjIsIDB4QjdCMywgMHhCN0I2LCAweEI3QjcsCisgICAgMHhCN0I5LCAweEI3QkEsIDB4QjdCQiwgMHhCN0JDLCAweEI3QkQsIDB4QjdCRSwgMHhCN0JGLCAweEI3QzAsCisgICAgMHhCN0MxLCAweEI3QzIsIDB4QjdDMywgMHhCN0M0LCAweEI3QzUsIDB4QjdDNiwgMHhCN0M4LCAweEI3Q0EsCisgICAgMHhCN0NCLCAweEI3Q0MsIDB4QjdDRCwgMHhCN0NFLCAweEI3Q0YsIDB4QjdEMCwgMHhCN0QxLCAweEI3RDIsCisgICAgMHhCN0QzLCAweEI3RDQsIDB4QjdENSwgMHhCN0Q2LCAweEI3RDcsIDB4QjdEOCwgMHhCN0Q5LCAweEI3REEsCisgICAgMHhCN0RCLCAweEI3REMsIDB4QjdERCwgMHhCN0RFLCAweEI3REYsIDB4QjdFMCwgMHhCN0UxLCAweEI3RTIsCisgICAgMHhCN0UzLCAweEI3RTQsIDB4QjdFNSwgMHhCN0U2LCAweEI3RTcsIDB4QjdFOCwgMHhCN0U5LCAweEI3RUEsCisgICAgMHhCN0VCLCAweEI3RUUsIDB4QjdFRiwgMHhCN0YxLCAweEI3RjIsIDB4QjdGMywgMHhCN0Y1LCAweEI3RjYsCisgICAgMHhCN0Y3LCAweEI3RjgsIDB4QjdGOSwgMHhCN0ZBLCAweEI3RkIsIDB4QjdGRSwgMHhCODAyLCAweEI4MDMsCisgICAgMHhCODA0LCAweEI4MDUsIDB4QjgwNiwgMHhCODBBLCAweEI4MEIsIDB4QjgwRCwgMHhCODBFLCAweEI4MEYsCisgICAgMHhCODExLCAweEI4MTIsIDB4QjgxMywgMHhCODE0LCAweEI4MTUsIDB4QjgxNiwgMHhCODE3LCAweEI4MUEsCisgICAgMHhCODFDLCAweEI4MUUsIDB4QjgxRiwgMHhCODIwLCAweEI4MjEsIDB4QjgyMiwgMHhCODIzLCAweEI4MjYsCisgICAgMHhCODI3LCAweEI4MjksIDB4QjgyQSwgMHhCODJCLCAweEI4MkQsIDB4QjgyRSwgMHhCODJGLCAweEI4MzAsCisgICAgMHhCODMxLCAweEI4MzIsIDB4QjgzMywgMHhCODM2LCAweEI4M0EsIDB4QjgzQiwgMHhCODNDLCAweEI4M0QsCisgICAgMHhCODNFLCAweEI4M0YsIDB4Qjg0MSwgMHhCODQyLCAweEI4NDMsIDB4Qjg0NSwgMHhCODQ2LCAweEI4NDcsCisgICAgMHhCODQ4LCAweEI4NDksIDB4Qjg0QSwgMHhCODRCLCAweEI4NEMsIDB4Qjg0RCwgMHhCODRFLCAweEI4NEYsCisgICAgMHhCODUwLCAweEI4NTIsIDB4Qjg1NCwgMHhCODU1LCAweEI4NTYsIDB4Qjg1NywgMHhCODU4LCAweEI4NTksCisgICAgMHhCODVBLCAweEI4NUIsIDB4Qjg1RSwgMHhCODVGLCAweEI4NjEsIDB4Qjg2MiwgMHhCODYzLCAweEI4NjUsCisgICAgMHhCODY2LCAweEI4NjcsIDB4Qjg2OCwgMHhCODY5LCAweEI4NkEsIDB4Qjg2QiwgMHhCODZFLCAweEI4NzAsCisgICAgMHhCODcyLCAweEI4NzMsIDB4Qjg3NCwgMHhCODc1LCAweEI4NzYsIDB4Qjg3NywgMHhCODc5LCAweEI4N0EsCisgICAgMHhCODdCLCAweEI4N0QsIDB4Qjg3RSwgMHhCODdGLCAweEI4ODAsIDB4Qjg4MSwgMHhCODgyLCAweEI4ODMsCisgICAgMHhCODg0LCAweEI4ODUsIDB4Qjg4NiwgMHhCODg3LCAweEI4ODgsIDB4Qjg4OSwgMHhCODhBLCAweEI4OEIsCisgICAgMHhCODhDLCAweEI4OEUsIDB4Qjg4RiwgMHhCODkwLCAweEI4OTEsIDB4Qjg5MiwgMHhCODkzLCAweEI4OTQsCisgICAgMHhCODk1LCAweEI4OTYsIDB4Qjg5NywgMHhCODk4LCAweEI4OTksIDB4Qjg5QSwgMHhCODlCLCAweEI4OUMsCisgICAgMHhCODlELCAweEI4OUUsIDB4Qjg5RiwgMHhCOEEwLCAweEI4QTEsIDB4QjhBMiwgMHhCOEEzLCAweEI4QTQsCisgICAgMHhCOEE1LCAweEI4QTYsIDB4QjhBNywgMHhCOEE5LCAweEI4QUEsIDB4QjhBQiwgMHhCOEFDLCAweEI4QUQsCisgICAgMHhCOEFFLCAweEI4QUYsIDB4QjhCMSwgMHhCOEIyLCAweEI4QjMsIDB4QjhCNSwgMHhCOEI2LCAweEI4QjcsCisgICAgMHhCOEI5LCAweEI4QkEsIDB4QjhCQiwgMHhCOEJDLCAweEI4QkQsIDB4QjhCRSwgMHhCOEJGLCAweEI4QzIsCisgICAgMHhCOEM0LCAweEI4QzYsIDB4QjhDNywgMHhCOEM4LCAweEI4QzksIDB4QjhDQSwgMHhCOENCLCAweEI4Q0QsCisgICAgMHhCOENFLCAweEI4Q0YsIDB4QjhEMSwgMHhCOEQyLCAweEI4RDMsIDB4QjhENSwgMHhCOEQ2LCAweEI4RDcsCisgICAgMHhCOEQ4LCAweEI4RDksIDB4QjhEQSwgMHhCOERCLCAweEI4REMsIDB4QjhERSwgMHhCOEUwLCAweEI4RTIsCisgICAgMHhCOEUzLCAweEI4RTQsIDB4QjhFNSwgMHhCOEU2LCAweEI4RTcsIDB4QjhFQSwgMHhCOEVCLCAweEI4RUQsCisgICAgMHhCOEVFLCAweEI4RUYsIDB4QjhGMSwgMHhCOEYyLCAweEI4RjMsIDB4QjhGNCwgMHhCOEY1LCAweEI4RjYsCisgICAgMHhCOEY3LCAweEI4RkEsIDB4QjhGQywgMHhCOEZFLCAweEI4RkYsIDB4QjkwMCwgMHhCOTAxLCAweEI5MDIsCisgICAgMHhCOTAzLCAweEI5MDUsIDB4QjkwNiwgMHhCOTA3LCAweEI5MDgsIDB4QjkwOSwgMHhCOTBBLCAweEI5MEIsCisgICAgMHhCOTBDLCAweEI5MEQsIDB4QjkwRSwgMHhCOTBGLCAweEI5MTAsIDB4QjkxMSwgMHhCOTEyLCAweEI5MTMsCisgICAgMHhCOTE0LCAweEI5MTUsIDB4QjkxNiwgMHhCOTE3LCAweEI5MTksIDB4QjkxQSwgMHhCOTFCLCAweEI5MUMsCisgICAgMHhCOTFELCAweEI5MUUsIDB4QjkxRiwgMHhCOTIxLCAweEI5MjIsIDB4QjkyMywgMHhCOTI0LCAweEI5MjUsCisgICAgMHhCOTI2LCAweEI5MjcsIDB4QjkyOCwgMHhCOTI5LCAweEI5MkEsIDB4QjkyQiwgMHhCOTJDLCAweEI5MkQsCisgICAgMHhCOTJFLCAweEI5MkYsIDB4QjkzMCwgMHhCOTMxLCAweEI5MzIsIDB4QjkzMywgMHhCOTM0LCAweEI5MzUsCisgICAgMHhCOTM2LCAweEI5MzcsIDB4QjkzOCwgMHhCOTM5LCAweEI5M0EsIDB4QjkzQiwgMHhCOTNFLCAweEI5M0YsCisgICAgMHhCOTQxLCAweEI5NDIsIDB4Qjk0MywgMHhCOTQ1LCAweEI5NDYsIDB4Qjk0NywgMHhCOTQ4LCAweEI5NDksCisgICAgMHhCOTRBLCAweEI5NEIsIDB4Qjk0RCwgMHhCOTRFLCAweEI5NTAsIDB4Qjk1MiwgMHhCOTUzLCAweEI5NTQsCisgICAgMHhCOTU1LCAweEI5NTYsIDB4Qjk1NywgMHhCOTVBLCAweEI5NUIsIDB4Qjk1RCwgMHhCOTVFLCAweEI5NUYsCisgICAgMHhCOTYxLCAweEI5NjIsIDB4Qjk2MywgMHhCOTY0LCAweEI5NjUsIDB4Qjk2NiwgMHhCOTY3LCAweEI5NkEsCisgICAgMHhCOTZDLCAweEI5NkUsIDB4Qjk2RiwgMHhCOTcwLCAweEI5NzEsIDB4Qjk3MiwgMHhCOTczLCAweEI5NzYsCisgICAgMHhCOTc3LCAweEI5NzksIDB4Qjk3QSwgMHhCOTdCLCAweEI5N0QsIDB4Qjk3RSwgMHhCOTdGLCAweEI5ODAsCisgICAgMHhCOTgxLCAweEI5ODIsIDB4Qjk4MywgMHhCOTg2LCAweEI5ODgsIDB4Qjk4QiwgMHhCOThDLCAweEI5OEYsCisgICAgMHhCOTkwLCAweEI5OTEsIDB4Qjk5MiwgMHhCOTkzLCAweEI5OTQsIDB4Qjk5NSwgMHhCOTk2LCAweEI5OTcsCisgICAgMHhCOTk4LCAweEI5OTksIDB4Qjk5QSwgMHhCOTlCLCAweEI5OUMsIDB4Qjk5RCwgMHhCOTlFLCAweEI5OUYsCisgICAgMHhCOUEwLCAweEI5QTEsIDB4QjlBMiwgMHhCOUEzLCAweEI5QTQsIDB4QjlBNSwgMHhCOUE2LCAweEI5QTcsCisgICAgMHhCOUE4LCAweEI5QTksIDB4QjlBQSwgMHhCOUFCLCAweEI5QUUsIDB4QjlBRiwgMHhCOUIxLCAweEI5QjIsCisgICAgMHhCOUIzLCAweEI5QjUsIDB4QjlCNiwgMHhCOUI3LCAweEI5QjgsIDB4QjlCOSwgMHhCOUJBLCAweEI5QkIsCisgICAgMHhCOUJFLCAweEI5QzAsIDB4QjlDMiwgMHhCOUMzLCAweEI5QzQsIDB4QjlDNSwgMHhCOUM2LCAweEI5QzcsCisgICAgMHhCOUNBLCAweEI5Q0IsIDB4QjlDRCwgMHhCOUQzLCAweEI5RDQsIDB4QjlENSwgMHhCOUQ2LCAweEI5RDcsCisgICAgMHhCOURBLCAweEI5REMsIDB4QjlERiwgMHhCOUUwLCAweEI5RTIsIDB4QjlFNiwgMHhCOUU3LCAweEI5RTksCisgICAgMHhCOUVBLCAweEI5RUIsIDB4QjlFRCwgMHhCOUVFLCAweEI5RUYsIDB4QjlGMCwgMHhCOUYxLCAweEI5RjIsCisgICAgMHhCOUYzLCAweEI5RjYsIDB4QjlGQiwgMHhCOUZDLCAweEI5RkQsIDB4QjlGRSwgMHhCOUZGLCAweEJBMDIsCisgICAgMHhCQTAzLCAweEJBMDQsIDB4QkEwNSwgMHhCQTA2LCAweEJBMDcsIDB4QkEwOSwgMHhCQTBBLCAweEJBMEIsCisgICAgMHhCQTBDLCAweEJBMEQsIDB4QkEwRSwgMHhCQTBGLCAweEJBMTAsIDB4QkExMSwgMHhCQTEyLCAweEJBMTMsCisgICAgMHhCQTE0LCAweEJBMTYsIDB4QkExNywgMHhCQTE4LCAweEJBMTksIDB4QkExQSwgMHhCQTFCLCAweEJBMUMsCisgICAgMHhCQTFELCAweEJBMUUsIDB4QkExRiwgMHhCQTIwLCAweEJBMjEsIDB4QkEyMiwgMHhCQTIzLCAweEJBMjQsCisgICAgMHhCQTI1LCAweEJBMjYsIDB4QkEyNywgMHhCQTI4LCAweEJBMjksIDB4QkEyQSwgMHhCQTJCLCAweEJBMkMsCisgICAgMHhCQTJELCAweEJBMkUsIDB4QkEyRiwgMHhCQTMwLCAweEJBMzEsIDB4QkEzMiwgMHhCQTMzLCAweEJBMzQsCisgICAgMHhCQTM1LCAweEJBMzYsIDB4QkEzNywgMHhCQTNBLCAweEJBM0IsIDB4QkEzRCwgMHhCQTNFLCAweEJBM0YsCisgICAgMHhCQTQxLCAweEJBNDMsIDB4QkE0NCwgMHhCQTQ1LCAweEJBNDYsIDB4QkE0NywgMHhCQTRBLCAweEJBNEMsCisgICAgMHhCQTRGLCAweEJBNTAsIDB4QkE1MSwgMHhCQTUyLCAweEJBNTYsIDB4QkE1NywgMHhCQTU5LCAweEJBNUEsCisgICAgMHhCQTVCLCAweEJBNUQsIDB4QkE1RSwgMHhCQTVGLCAweEJBNjAsIDB4QkE2MSwgMHhCQTYyLCAweEJBNjMsCisgICAgMHhCQTY2LCAweEJBNkEsIDB4QkE2QiwgMHhCQTZDLCAweEJBNkQsIDB4QkE2RSwgMHhCQTZGLCAweEJBNzIsCisgICAgMHhCQTczLCAweEJBNzUsIDB4QkE3NiwgMHhCQTc3LCAweEJBNzksIDB4QkE3QSwgMHhCQTdCLCAweEJBN0MsCisgICAgMHhCQTdELCAweEJBN0UsIDB4QkE3RiwgMHhCQTgwLCAweEJBODEsIDB4QkE4MiwgMHhCQTg2LCAweEJBODgsCisgICAgMHhCQTg5LCAweEJBOEEsIDB4QkE4QiwgMHhCQThELCAweEJBOEUsIDB4QkE4RiwgMHhCQTkwLCAweEJBOTEsCisgICAgMHhCQTkyLCAweEJBOTMsIDB4QkE5NCwgMHhCQTk1LCAweEJBOTYsIDB4QkE5NywgMHhCQTk4LCAweEJBOTksCisgICAgMHhCQTlBLCAweEJBOUIsIDB4QkE5QywgMHhCQTlELCAweEJBOUUsIDB4QkE5RiwgMHhCQUEwLCAweEJBQTEsCisgICAgMHhCQUEyLCAweEJBQTMsIDB4QkFBNCwgMHhCQUE1LCAweEJBQTYsIDB4QkFBNywgMHhCQUFBLCAweEJBQUQsCisgICAgMHhCQUFFLCAweEJBQUYsIDB4QkFCMSwgMHhCQUIzLCAweEJBQjQsIDB4QkFCNSwgMHhCQUI2LCAweEJBQjcsCisgICAgMHhCQUJBLCAweEJBQkMsIDB4QkFCRSwgMHhCQUJGLCAweEJBQzAsIDB4QkFDMSwgMHhCQUMyLCAweEJBQzMsCisgICAgMHhCQUM1LCAweEJBQzYsIDB4QkFDNywgMHhCQUM5LCAweEJBQ0EsIDB4QkFDQiwgMHhCQUNDLCAweEJBQ0QsCisgICAgMHhCQUNFLCAweEJBQ0YsIDB4QkFEMCwgMHhCQUQxLCAweEJBRDIsIDB4QkFEMywgMHhCQUQ0LCAweEJBRDUsCisgICAgMHhCQUQ2LCAweEJBRDcsIDB4QkFEQSwgMHhCQURCLCAweEJBREMsIDB4QkFERCwgMHhCQURFLCAweEJBREYsCisgICAgMHhCQUUwLCAweEJBRTEsIDB4QkFFMiwgMHhCQUUzLCAweEJBRTQsIDB4QkFFNSwgMHhCQUU2LCAweEJBRTcsCisgICAgMHhCQUU4LCAweEJBRTksIDB4QkFFQSwgMHhCQUVCLCAweEJBRUMsIDB4QkFFRCwgMHhCQUVFLCAweEJBRUYsCisgICAgMHhCQUYwLCAweEJBRjEsIDB4QkFGMiwgMHhCQUYzLCAweEJBRjQsIDB4QkFGNSwgMHhCQUY2LCAweEJBRjcsCisgICAgMHhCQUY4LCAweEJBRjksIDB4QkFGQSwgMHhCQUZCLCAweEJBRkQsIDB4QkFGRSwgMHhCQUZGLCAweEJCMDEsCisgICAgMHhCQjAyLCAweEJCMDMsIDB4QkIwNSwgMHhCQjA2LCAweEJCMDcsIDB4QkIwOCwgMHhCQjA5LCAweEJCMEEsCisgICAgMHhCQjBCLCAweEJCMEMsIDB4QkIwRSwgMHhCQjEwLCAweEJCMTIsIDB4QkIxMywgMHhCQjE0LCAweEJCMTUsCisgICAgMHhCQjE2LCAweEJCMTcsIDB4QkIxOSwgMHhCQjFBLCAweEJCMUIsIDB4QkIxRCwgMHhCQjFFLCAweEJCMUYsCisgICAgMHhCQjIxLCAweEJCMjIsIDB4QkIyMywgMHhCQjI0LCAweEJCMjUsIDB4QkIyNiwgMHhCQjI3LCAweEJCMjgsCisgICAgMHhCQjJBLCAweEJCMkMsIDB4QkIyRCwgMHhCQjJFLCAweEJCMkYsIDB4QkIzMCwgMHhCQjMxLCAweEJCMzIsCisgICAgMHhCQjMzLCAweEJCMzcsIDB4QkIzOSwgMHhCQjNBLCAweEJCM0YsIDB4QkI0MCwgMHhCQjQxLCAweEJCNDIsCisgICAgMHhCQjQzLCAweEJCNDYsIDB4QkI0OCwgMHhCQjRBLCAweEJCNEIsIDB4QkI0QywgMHhCQjRFLCAweEJCNTEsCisgICAgMHhCQjUyLCAweEJCNTMsIDB4QkI1NSwgMHhCQjU2LCAweEJCNTcsIDB4QkI1OSwgMHhCQjVBLCAweEJCNUIsCisgICAgMHhCQjVDLCAweEJCNUQsIDB4QkI1RSwgMHhCQjVGLCAweEJCNjAsIDB4QkI2MiwgMHhCQjY0LCAweEJCNjUsCisgICAgMHhCQjY2LCAweEJCNjcsIDB4QkI2OCwgMHhCQjY5LCAweEJCNkEsIDB4QkI2QiwgMHhCQjZELCAweEJCNkUsCisgICAgMHhCQjZGLCAweEJCNzAsIDB4QkI3MSwgMHhCQjcyLCAweEJCNzMsIDB4QkI3NCwgMHhCQjc1LCAweEJCNzYsCisgICAgMHhCQjc3LCAweEJCNzgsIDB4QkI3OSwgMHhCQjdBLCAweEJCN0IsIDB4QkI3QywgMHhCQjdELCAweEJCN0UsCisgICAgMHhCQjdGLCAweEJCODAsIDB4QkI4MSwgMHhCQjgyLCAweEJCODMsIDB4QkI4NCwgMHhCQjg1LCAweEJCODYsCisgICAgMHhCQjg3LCAweEJCODksIDB4QkI4QSwgMHhCQjhCLCAweEJCOEQsIDB4QkI4RSwgMHhCQjhGLCAweEJCOTEsCisgICAgMHhCQjkyLCAweEJCOTMsIDB4QkI5NCwgMHhCQjk1LCAweEJCOTYsIDB4QkI5NywgMHhCQjk4LCAweEJCOTksCisgICAgMHhCQjlBLCAweEJCOUIsIDB4QkI5QywgMHhCQjlELCAweEJCOUUsIDB4QkI5RiwgMHhCQkEwLCAweEJCQTEsCisgICAgMHhCQkEyLCAweEJCQTMsIDB4QkJBNSwgMHhCQkE2LCAweEJCQTcsIDB4QkJBOSwgMHhCQkFBLCAweEJCQUIsCisgICAgMHhCQkFELCAweEJCQUUsIDB4QkJBRiwgMHhCQkIwLCAweEJCQjEsIDB4QkJCMiwgMHhCQkIzLCAweEJCQjUsCisgICAgMHhCQkI2LCAweEJCQjgsIDB4QkJCOSwgMHhCQkJBLCAweEJCQkIsIDB4QkJCQywgMHhCQkJELCAweEJCQkUsCisgICAgMHhCQkJGLCAweEJCQzEsIDB4QkJDMiwgMHhCQkMzLCAweEJCQzUsIDB4QkJDNiwgMHhCQkM3LCAweEJCQzksCisgICAgMHhCQkNBLCAweEJCQ0IsIDB4QkJDQywgMHhCQkNELCAweEJCQ0UsIDB4QkJDRiwgMHhCQkQxLCAweEJCRDIsCisgICAgMHhCQkQ0LCAweEJCRDUsIDB4QkJENiwgMHhCQkQ3LCAweEJCRDgsIDB4QkJEOSwgMHhCQkRBLCAweEJCREIsCisgICAgMHhCQkRDLCAweEJCREQsIDB4QkJERSwgMHhCQkRGLCAweEJCRTAsIDB4QkJFMSwgMHhCQkUyLCAweEJCRTMsCisgICAgMHhCQkU0LCAweEJCRTUsIDB4QkJFNiwgMHhCQkU3LCAweEJCRTgsIDB4QkJFOSwgMHhCQkVBLCAweEJCRUIsCisgICAgMHhCQkVDLCAweEJCRUQsIDB4QkJFRSwgMHhCQkVGLCAweEJCRjAsIDB4QkJGMSwgMHhCQkYyLCAweEJCRjMsCisgICAgMHhCQkY0LCAweEJCRjUsIDB4QkJGNiwgMHhCQkY3LCAweEJCRkEsIDB4QkJGQiwgMHhCQkZELCAweEJCRkUsCisgICAgMHhCQzAxLCAweEJDMDMsIDB4QkMwNCwgMHhCQzA1LCAweEJDMDYsIDB4QkMwNywgMHhCQzBBLCAweEJDMEUsCisgICAgMHhCQzEwLCAweEJDMTIsIDB4QkMxMywgMHhCQzE5LCAweEJDMUEsIDB4QkMyMCwgMHhCQzIxLCAweEJDMjIsCisgICAgMHhCQzIzLCAweEJDMjYsIDB4QkMyOCwgMHhCQzJBLCAweEJDMkIsIDB4QkMyQywgMHhCQzJFLCAweEJDMkYsCisgICAgMHhCQzMyLCAweEJDMzMsIDB4QkMzNSwgMHhCQzM2LCAweEJDMzcsIDB4QkMzOSwgMHhCQzNBLCAweEJDM0IsCisgICAgMHhCQzNDLCAweEJDM0QsIDB4QkMzRSwgMHhCQzNGLCAweEJDNDIsIDB4QkM0NiwgMHhCQzQ3LCAweEJDNDgsCisgICAgMHhCQzRBLCAweEJDNEIsIDB4QkM0RSwgMHhCQzRGLCAweEJDNTEsIDB4QkM1MiwgMHhCQzUzLCAweEJDNTQsCisgICAgMHhCQzU1LCAweEJDNTYsIDB4QkM1NywgMHhCQzU4LCAweEJDNTksIDB4QkM1QSwgMHhCQzVCLCAweEJDNUMsCisgICAgMHhCQzVFLCAweEJDNUYsIDB4QkM2MCwgMHhCQzYxLCAweEJDNjIsIDB4QkM2MywgMHhCQzY0LCAweEJDNjUsCisgICAgMHhCQzY2LCAweEJDNjcsIDB4QkM2OCwgMHhCQzY5LCAweEJDNkEsIDB4QkM2QiwgMHhCQzZDLCAweEJDNkQsCisgICAgMHhCQzZFLCAweEJDNkYsIDB4QkM3MCwgMHhCQzcxLCAweEJDNzIsIDB4QkM3MywgMHhCQzc0LCAweEJDNzUsCisgICAgMHhCQzc2LCAweEJDNzcsIDB4QkM3OCwgMHhCQzc5LCAweEJDN0EsIDB4QkM3QiwgMHhCQzdDLCAweEJDN0QsCisgICAgMHhCQzdFLCAweEJDN0YsIDB4QkM4MCwgMHhCQzgxLCAweEJDODIsIDB4QkM4MywgMHhCQzg2LCAweEJDODcsCisgICAgMHhCQzg5LCAweEJDOEEsIDB4QkM4RCwgMHhCQzhGLCAweEJDOTAsIDB4QkM5MSwgMHhCQzkyLCAweEJDOTMsCisgICAgMHhCQzk2LCAweEJDOTgsIDB4QkM5QiwgMHhCQzlDLCAweEJDOUQsIDB4QkM5RSwgMHhCQzlGLCAweEJDQTIsCisgICAgMHhCQ0EzLCAweEJDQTUsIDB4QkNBNiwgMHhCQ0E5LCAweEJDQUEsIDB4QkNBQiwgMHhCQ0FDLCAweEJDQUQsCisgICAgMHhCQ0FFLCAweEJDQUYsIDB4QkNCMiwgMHhCQ0I2LCAweEJDQjcsIDB4QkNCOCwgMHhCQ0I5LCAweEJDQkEsCisgICAgMHhCQ0JCLCAweEJDQkUsIDB4QkNCRiwgMHhCQ0MxLCAweEJDQzIsIDB4QkNDMywgMHhCQ0M1LCAweEJDQzYsCisgICAgMHhCQ0M3LCAweEJDQzgsIDB4QkNDOSwgMHhCQ0NBLCAweEJDQ0IsIDB4QkNDQywgMHhCQ0NFLCAweEJDRDIsCisgICAgMHhCQ0QzLCAweEJDRDQsIDB4QkNENiwgMHhCQ0Q3LCAweEJDRDksIDB4QkNEQSwgMHhCQ0RCLCAweEJDREQsCisgICAgMHhCQ0RFLCAweEJDREYsIDB4QkNFMCwgMHhCQ0UxLCAweEJDRTIsIDB4QkNFMywgMHhCQ0U0LCAweEJDRTUsCisgICAgMHhCQ0U2LCAweEJDRTcsIDB4QkNFOCwgMHhCQ0U5LCAweEJDRUEsIDB4QkNFQiwgMHhCQ0VDLCAweEJDRUQsCisgICAgMHhCQ0VFLCAweEJDRUYsIDB4QkNGMCwgMHhCQ0YxLCAweEJDRjIsIDB4QkNGMywgMHhCQ0Y3LCAweEJDRjksCisgICAgMHhCQ0ZBLCAweEJDRkIsIDB4QkNGRCwgMHhCQ0ZFLCAweEJDRkYsIDB4QkQwMCwgMHhCRDAxLCAweEJEMDIsCisgICAgMHhCRDAzLCAweEJEMDYsIDB4QkQwOCwgMHhCRDBBLCAweEJEMEIsIDB4QkQwQywgMHhCRDBELCAweEJEMEUsCisgICAgMHhCRDBGLCAweEJEMTEsIDB4QkQxMiwgMHhCRDEzLCAweEJEMTUsIDB4QkQxNiwgMHhCRDE3LCAweEJEMTgsCisgICAgMHhCRDE5LCAweEJEMUEsIDB4QkQxQiwgMHhCRDFDLCAweEJEMUQsIDB4QkQxRSwgMHhCRDFGLCAweEJEMjAsCisgICAgMHhCRDIxLCAweEJEMjIsIDB4QkQyMywgMHhCRDI1LCAweEJEMjYsIDB4QkQyNywgMHhCRDI4LCAweEJEMjksCisgICAgMHhCRDJBLCAweEJEMkIsIDB4QkQyRCwgMHhCRDJFLCAweEJEMkYsIDB4QkQzMCwgMHhCRDMxLCAweEJEMzIsCisgICAgMHhCRDMzLCAweEJEMzQsIDB4QkQzNSwgMHhCRDM2LCAweEJEMzcsIDB4QkQzOCwgMHhCRDM5LCAweEJEM0EsCisgICAgMHhCRDNCLCAweEJEM0MsIDB4QkQzRCwgMHhCRDNFLCAweEJEM0YsIDB4QkQ0MSwgMHhCRDQyLCAweEJENDMsCisgICAgMHhCRDQ0LCAweEJENDUsIDB4QkQ0NiwgMHhCRDQ3LCAweEJENEEsIDB4QkQ0QiwgMHhCRDRELCAweEJENEUsCisgICAgMHhCRDRGLCAweEJENTEsIDB4QkQ1MiwgMHhCRDUzLCAweEJENTQsIDB4QkQ1NSwgMHhCRDU2LCAweEJENTcsCisgICAgMHhCRDVBLCAweEJENUIsIDB4QkQ1QywgMHhCRDVELCAweEJENUUsIDB4QkQ1RiwgMHhCRDYwLCAweEJENjEsCisgICAgMHhCRDYyLCAweEJENjMsIDB4QkQ2NSwgMHhCRDY2LCAweEJENjcsIDB4QkQ2OSwgMHhCRDZBLCAweEJENkIsCisgICAgMHhCRDZDLCAweEJENkQsIDB4QkQ2RSwgMHhCRDZGLCAweEJENzAsIDB4QkQ3MSwgMHhCRDcyLCAweEJENzMsCisgICAgMHhCRDc0LCAweEJENzUsIDB4QkQ3NiwgMHhCRDc3LCAweEJENzgsIDB4QkQ3OSwgMHhCRDdBLCAweEJEN0IsCisgICAgMHhCRDdDLCAweEJEN0QsIDB4QkQ3RSwgMHhCRDdGLCAweEJEODIsIDB4QkQ4MywgMHhCRDg1LCAweEJEODYsCisgICAgMHhCRDhCLCAweEJEOEMsIDB4QkQ4RCwgMHhCRDhFLCAweEJEOEYsIDB4QkQ5MiwgMHhCRDk0LCAweEJEOTYsCisgICAgMHhCRDk3LCAweEJEOTgsIDB4QkQ5QiwgMHhCRDlELCAweEJEOUUsIDB4QkQ5RiwgMHhCREEwLCAweEJEQTEsCisgICAgMHhCREEyLCAweEJEQTMsIDB4QkRBNSwgMHhCREE2LCAweEJEQTcsIDB4QkRBOCwgMHhCREE5LCAweEJEQUEsCisgICAgMHhCREFCLCAweEJEQUMsIDB4QkRBRCwgMHhCREFFLCAweEJEQUYsIDB4QkRCMSwgMHhCREIyLCAweEJEQjMsCisgICAgMHhCREI0LCAweEJEQjUsIDB4QkRCNiwgMHhCREI3LCAweEJEQjksIDB4QkRCQSwgMHhCREJCLCAweEJEQkMsCisgICAgMHhCREJELCAweEJEQkUsIDB4QkRCRiwgMHhCREMwLCAweEJEQzEsIDB4QkRDMiwgMHhCREMzLCAweEJEQzQsCisgICAgMHhCREM1LCAweEJEQzYsIDB4QkRDNywgMHhCREM4LCAweEJEQzksIDB4QkRDQSwgMHhCRENCLCAweEJEQ0MsCisgICAgMHhCRENELCAweEJEQ0UsIDB4QkRDRiwgMHhCREQwLCAweEJERDEsIDB4QkREMiwgMHhCREQzLCAweEJERDYsCisgICAgMHhCREQ3LCAweEJERDksIDB4QkREQSwgMHhCRERCLCAweEJEREQsIDB4QkRERSwgMHhCRERGLCAweEJERTAsCisgICAgMHhCREUxLCAweEJERTIsIDB4QkRFMywgMHhCREU0LCAweEJERTUsIDB4QkRFNiwgMHhCREU3LCAweEJERTgsCisgICAgMHhCREVBLCAweEJERUIsIDB4QkRFQywgMHhCREVELCAweEJERUUsIDB4QkRFRiwgMHhCREYxLCAweEJERjIsCisgICAgMHhCREYzLCAweEJERjUsIDB4QkRGNiwgMHhCREY3LCAweEJERjksIDB4QkRGQSwgMHhCREZCLCAweEJERkMsCisgICAgMHhCREZELCAweEJERkUsIDB4QkRGRiwgMHhCRTAxLCAweEJFMDIsIDB4QkUwNCwgMHhCRTA2LCAweEJFMDcsCisgICAgMHhCRTA4LCAweEJFMDksIDB4QkUwQSwgMHhCRTBCLCAweEJFMEUsIDB4QkUwRiwgMHhCRTExLCAweEJFMTIsCisgICAgMHhCRTEzLCAweEJFMTUsIDB4QkUxNiwgMHhCRTE3LCAweEJFMTgsIDB4QkUxOSwgMHhCRTFBLCAweEJFMUIsCisgICAgMHhCRTFFLCAweEJFMjAsIDB4QkUyMSwgMHhCRTIyLCAweEJFMjMsIDB4QkUyNCwgMHhCRTI1LCAweEJFMjYsCisgICAgMHhCRTI3LCAweEJFMjgsIDB4QkUyOSwgMHhCRTJBLCAweEJFMkIsIDB4QkUyQywgMHhCRTJELCAweEJFMkUsCisgICAgMHhCRTJGLCAweEJFMzAsIDB4QkUzMSwgMHhCRTMyLCAweEJFMzMsIDB4QkUzNCwgMHhCRTM1LCAweEJFMzYsCisgICAgMHhCRTM3LCAweEJFMzgsIDB4QkUzOSwgMHhCRTNBLCAweEJFM0IsIDB4QkUzQywgMHhCRTNELCAweEJFM0UsCisgICAgMHhCRTNGLCAweEJFNDAsIDB4QkU0MSwgMHhCRTQyLCAweEJFNDMsIDB4QkU0NiwgMHhCRTQ3LCAweEJFNDksCisgICAgMHhCRTRBLCAweEJFNEIsIDB4QkU0RCwgMHhCRTRGLCAweEJFNTAsIDB4QkU1MSwgMHhCRTUyLCAweEJFNTMsCisgICAgMHhCRTU2LCAweEJFNTgsIDB4QkU1QywgMHhCRTVELCAweEJFNUUsIDB4QkU1RiwgMHhCRTYyLCAweEJFNjMsCisgICAgMHhCRTY1LCAweEJFNjYsIDB4QkU2NywgMHhCRTY5LCAweEJFNkIsIDB4QkU2QywgMHhCRTZELCAweEJFNkUsCisgICAgMHhCRTZGLCAweEJFNzIsIDB4QkU3NiwgMHhCRTc3LCAweEJFNzgsIDB4QkU3OSwgMHhCRTdBLCAweEJFN0UsCisgICAgMHhCRTdGLCAweEJFODEsIDB4QkU4MiwgMHhCRTgzLCAweEJFODUsIDB4QkU4NiwgMHhCRTg3LCAweEJFODgsCisgICAgMHhCRTg5LCAweEJFOEEsIDB4QkU4QiwgMHhCRThFLCAweEJFOTIsIDB4QkU5MywgMHhCRTk0LCAweEJFOTUsCisgICAgMHhCRTk2LCAweEJFOTcsIDB4QkU5QSwgMHhCRTlCLCAweEJFOUMsIDB4QkU5RCwgMHhCRTlFLCAweEJFOUYsCisgICAgMHhCRUEwLCAweEJFQTEsIDB4QkVBMiwgMHhCRUEzLCAweEJFQTQsIDB4QkVBNSwgMHhCRUE2LCAweEJFQTcsCisgICAgMHhCRUE5LCAweEJFQUEsIDB4QkVBQiwgMHhCRUFDLCAweEJFQUQsIDB4QkVBRSwgMHhCRUFGLCAweEJFQjAsCisgICAgMHhCRUIxLCAweEJFQjIsIDB4QkVCMywgMHhCRUI0LCAweEJFQjUsIDB4QkVCNiwgMHhCRUI3LCAweEJFQjgsCisgICAgMHhCRUI5LCAweEJFQkEsIDB4QkVCQiwgMHhCRUJDLCAweEJFQkQsIDB4QkVCRSwgMHhCRUJGLCAweEJFQzAsCisgICAgMHhCRUMxLCAweEJFQzIsIDB4QkVDMywgMHhCRUM0LCAweEJFQzUsIDB4QkVDNiwgMHhCRUM3LCAweEJFQzgsCisgICAgMHhCRUM5LCAweEJFQ0EsIDB4QkVDQiwgMHhCRUNDLCAweEJFQ0QsIDB4QkVDRSwgMHhCRUNGLCAweEJFRDIsCisgICAgMHhCRUQzLCAweEJFRDUsIDB4QkVENiwgMHhCRUQ5LCAweEJFREEsIDB4QkVEQiwgMHhCRURDLCAweEJFREQsCisgICAgMHhCRURFLCAweEJFREYsIDB4QkVFMSwgMHhCRUUyLCAweEJFRTYsIDB4QkVFNywgMHhCRUU4LCAweEJFRTksCisgICAgMHhCRUVBLCAweEJFRUIsIDB4QkVFRCwgMHhCRUVFLCAweEJFRUYsIDB4QkVGMCwgMHhCRUYxLCAweEJFRjIsCisgICAgMHhCRUYzLCAweEJFRjQsIDB4QkVGNSwgMHhCRUY2LCAweEJFRjcsIDB4QkVGOCwgMHhCRUY5LCAweEJFRkEsCisgICAgMHhCRUZCLCAweEJFRkMsIDB4QkVGRCwgMHhCRUZFLCAweEJFRkYsIDB4QkYwMCwgMHhCRjAyLCAweEJGMDMsCisgICAgMHhCRjA0LCAweEJGMDUsIDB4QkYwNiwgMHhCRjA3LCAweEJGMEEsIDB4QkYwQiwgMHhCRjBDLCAweEJGMEQsCisgICAgMHhCRjBFLCAweEJGMEYsIDB4QkYxMCwgMHhCRjExLCAweEJGMTIsIDB4QkYxMywgMHhCRjE0LCAweEJGMTUsCisgICAgMHhCRjE2LCAweEJGMTcsIDB4QkYxQSwgMHhCRjFFLCAweEJGMUYsIDB4QkYyMCwgMHhCRjIxLCAweEJGMjIsCisgICAgMHhCRjIzLCAweEJGMjQsIDB4QkYyNSwgMHhCRjI2LCAweEJGMjcsIDB4QkYyOCwgMHhCRjI5LCAweEJGMkEsCisgICAgMHhCRjJCLCAweEJGMkMsIDB4QkYyRCwgMHhCRjJFLCAweEJGMkYsIDB4QkYzMCwgMHhCRjMxLCAweEJGMzIsCisgICAgMHhCRjMzLCAweEJGMzQsIDB4QkYzNSwgMHhCRjM2LCAweEJGMzcsIDB4QkYzOCwgMHhCRjM5LCAweEJGM0EsCisgICAgMHhCRjNCLCAweEJGM0MsIDB4QkYzRCwgMHhCRjNFLCAweEJGM0YsIDB4QkY0MiwgMHhCRjQzLCAweEJGNDUsCisgICAgMHhCRjQ2LCAweEJGNDcsIDB4QkY0OSwgMHhCRjRBLCAweEJGNEIsIDB4QkY0QywgMHhCRjRELCAweEJGNEUsCisgICAgMHhCRjRGLCAweEJGNTIsIDB4QkY1MywgMHhCRjU0LCAweEJGNTYsIDB4QkY1NywgMHhCRjU4LCAweEJGNTksCisgICAgMHhCRjVBLCAweEJGNUIsIDB4QkY1QywgMHhCRjVELCAweEJGNUUsIDB4QkY1RiwgMHhCRjYwLCAweEJGNjEsCisgICAgMHhCRjYyLCAweEJGNjMsIDB4QkY2NCwgMHhCRjY1LCAweEJGNjYsIDB4QkY2NywgMHhCRjY4LCAweEJGNjksCisgICAgMHhCRjZBLCAweEJGNkIsIDB4QkY2QywgMHhCRjZELCAweEJGNkUsIDB4QkY2RiwgMHhCRjcwLCAweEJGNzEsCisgICAgMHhCRjcyLCAweEJGNzMsIDB4QkY3NCwgMHhCRjc1LCAweEJGNzYsIDB4QkY3NywgMHhCRjc4LCAweEJGNzksCisgICAgMHhCRjdBLCAweEJGN0IsIDB4QkY3QywgMHhCRjdELCAweEJGN0UsIDB4QkY3RiwgMHhCRjgwLCAweEJGODEsCisgICAgMHhCRjgyLCAweEJGODMsIDB4QkY4NCwgMHhCRjg1LCAweEJGODYsIDB4QkY4NywgMHhCRjg4LCAweEJGODksCisgICAgMHhCRjhBLCAweEJGOEIsIDB4QkY4QywgMHhCRjhELCAweEJGOEUsIDB4QkY4RiwgMHhCRjkwLCAweEJGOTEsCisgICAgMHhCRjkyLCAweEJGOTMsIDB4QkY5NSwgMHhCRjk2LCAweEJGOTcsIDB4QkY5OCwgMHhCRjk5LCAweEJGOUEsCisgICAgMHhCRjlCLCAweEJGOUMsIDB4QkY5RCwgMHhCRjlFLCAweEJGOUYsIDB4QkZBMCwgMHhCRkExLCAweEJGQTIsCisgICAgMHhCRkEzLCAweEJGQTQsIDB4QkZBNSwgMHhCRkE2LCAweEJGQTcsIDB4QkZBOCwgMHhCRkE5LCAweEJGQUEsCisgICAgMHhCRkFCLCAweEJGQUMsIDB4QkZBRCwgMHhCRkFFLCAweEJGQUYsIDB4QkZCMSwgMHhCRkIyLCAweEJGQjMsCisgICAgMHhCRkI0LCAweEJGQjUsIDB4QkZCNiwgMHhCRkI3LCAweEJGQjgsIDB4QkZCOSwgMHhCRkJBLCAweEJGQkIsCisgICAgMHhCRkJDLCAweEJGQkQsIDB4QkZCRSwgMHhCRkJGLCAweEJGQzAsIDB4QkZDMSwgMHhCRkMyLCAweEJGQzMsCisgICAgMHhCRkM0LCAweEJGQzYsIDB4QkZDNywgMHhCRkM4LCAweEJGQzksIDB4QkZDQSwgMHhCRkNCLCAweEJGQ0UsCisgICAgMHhCRkNGLCAweEJGRDEsIDB4QkZEMiwgMHhCRkQzLCAweEJGRDUsIDB4QkZENiwgMHhCRkQ3LCAweEJGRDgsCisgICAgMHhCRkQ5LCAweEJGREEsIDB4QkZEQiwgMHhCRkRELCAweEJGREUsIDB4QkZFMCwgMHhCRkUyLCAweEJGRTMsCisgICAgMHhCRkU0LCAweEJGRTUsIDB4QkZFNiwgMHhCRkU3LCAweEJGRTgsIDB4QkZFOSwgMHhCRkVBLCAweEJGRUIsCisgICAgMHhCRkVDLCAweEJGRUQsIDB4QkZFRSwgMHhCRkVGLCAweEJGRjAsIDB4QkZGMSwgMHhCRkYyLCAweEJGRjMsCisgICAgMHhCRkY0LCAweEJGRjUsIDB4QkZGNiwgMHhCRkY3LCAweEJGRjgsIDB4QkZGOSwgMHhCRkZBLCAweEJGRkIsCisgICAgMHhCRkZDLCAweEJGRkQsIDB4QkZGRSwgMHhCRkZGLCAweEMwMDAsIDB4QzAwMSwgMHhDMDAyLCAweEMwMDMsCisgICAgMHhDMDA0LCAweEMwMDUsIDB4QzAwNiwgMHhDMDA3LCAweEMwMDgsIDB4QzAwOSwgMHhDMDBBLCAweEMwMEIsCisgICAgMHhDMDBDLCAweEMwMEQsIDB4QzAwRSwgMHhDMDBGLCAweEMwMTAsIDB4QzAxMSwgMHhDMDEyLCAweEMwMTMsCisgICAgMHhDMDE0LCAweEMwMTUsIDB4QzAxNiwgMHhDMDE3LCAweEMwMTgsIDB4QzAxOSwgMHhDMDFBLCAweEMwMUIsCisgICAgMHhDMDFDLCAweEMwMUQsIDB4QzAxRSwgMHhDMDFGLCAweEMwMjAsIDB4QzAyMSwgMHhDMDIyLCAweEMwMjMsCisgICAgMHhDMDI0LCAweEMwMjUsIDB4QzAyNiwgMHhDMDI3LCAweEMwMjgsIDB4QzAyOSwgMHhDMDJBLCAweEMwMkIsCisgICAgMHhDMDJDLCAweEMwMkQsIDB4QzAyRSwgMHhDMDJGLCAweEMwMzAsIDB4QzAzMSwgMHhDMDMyLCAweEMwMzMsCisgICAgMHhDMDM0LCAweEMwMzUsIDB4QzAzNiwgMHhDMDM3LCAweEMwMzgsIDB4QzAzOSwgMHhDMDNBLCAweEMwM0IsCisgICAgMHhDMDNELCAweEMwM0UsIDB4QzAzRiwgMHhDMDQwLCAweEMwNDEsIDB4QzA0MiwgMHhDMDQzLCAweEMwNDQsCisgICAgMHhDMDQ1LCAweEMwNDYsIDB4QzA0NywgMHhDMDQ4LCAweEMwNDksIDB4QzA0QSwgMHhDMDRCLCAweEMwNEMsCisgICAgMHhDMDRELCAweEMwNEUsIDB4QzA0RiwgMHhDMDUwLCAweEMwNTIsIDB4QzA1MywgMHhDMDU0LCAweEMwNTUsCisgICAgMHhDMDU2LCAweEMwNTcsIDB4QzA1OSwgMHhDMDVBLCAweEMwNUIsIDB4QzA1RCwgMHhDMDVFLCAweEMwNUYsCisgICAgMHhDMDYxLCAweEMwNjIsIDB4QzA2MywgMHhDMDY0LCAweEMwNjUsIDB4QzA2NiwgMHhDMDY3LCAweEMwNkEsCisgICAgMHhDMDZCLCAweEMwNkMsIDB4QzA2RCwgMHhDMDZFLCAweEMwNkYsIDB4QzA3MCwgMHhDMDcxLCAweEMwNzIsCisgICAgMHhDMDczLCAweEMwNzQsIDB4QzA3NSwgMHhDMDc2LCAweEMwNzcsIDB4QzA3OCwgMHhDMDc5LCAweEMwN0EsCisgICAgMHhDMDdCLCAweEMwN0MsIDB4QzA3RCwgMHhDMDdFLCAweEMwN0YsIDB4QzA4MCwgMHhDMDgxLCAweEMwODIsCisgICAgMHhDMDgzLCAweEMwODQsIDB4QzA4NSwgMHhDMDg2LCAweEMwODcsIDB4QzA4OCwgMHhDMDg5LCAweEMwOEEsCisgICAgMHhDMDhCLCAweEMwOEMsIDB4QzA4RCwgMHhDMDhFLCAweEMwOEYsIDB4QzA5MiwgMHhDMDkzLCAweEMwOTUsCisgICAgMHhDMDk2LCAweEMwOTcsIDB4QzA5OSwgMHhDMDlBLCAweEMwOUIsIDB4QzA5QywgMHhDMDlELCAweEMwOUUsCisgICAgMHhDMDlGLCAweEMwQTIsIDB4QzBBNCwgMHhDMEE2LCAweEMwQTcsIDB4QzBBOCwgMHhDMEE5LCAweEMwQUEsCisgICAgMHhDMEFCLCAweEMwQUUsIDB4QzBCMSwgMHhDMEIyLCAweEMwQjcsIDB4QzBCOCwgMHhDMEI5LCAweEMwQkEsCisgICAgMHhDMEJCLCAweEMwQkUsIDB4QzBDMiwgMHhDMEMzLCAweEMwQzQsIDB4QzBDNiwgMHhDMEM3LCAweEMwQ0EsCisgICAgMHhDMENCLCAweEMwQ0QsIDB4QzBDRSwgMHhDMENGLCAweEMwRDEsIDB4QzBEMiwgMHhDMEQzLCAweEMwRDQsCisgICAgMHhDMEQ1LCAweEMwRDYsIDB4QzBENywgMHhDMERBLCAweEMwREUsIDB4QzBERiwgMHhDMEUwLCAweEMwRTEsCisgICAgMHhDMEUyLCAweEMwRTMsIDB4QzBFNiwgMHhDMEU3LCAweEMwRTksIDB4QzBFQSwgMHhDMEVCLCAweEMwRUQsCisgICAgMHhDMEVFLCAweEMwRUYsIDB4QzBGMCwgMHhDMEYxLCAweEMwRjIsIDB4QzBGMywgMHhDMEY2LCAweEMwRjgsCisgICAgMHhDMEZBLCAweEMwRkIsIDB4QzBGQywgMHhDMEZELCAweEMwRkUsIDB4QzBGRiwgMHhDMTAxLCAweEMxMDIsCisgICAgMHhDMTAzLCAweEMxMDUsIDB4QzEwNiwgMHhDMTA3LCAweEMxMDksIDB4QzEwQSwgMHhDMTBCLCAweEMxMEMsCisgICAgMHhDMTBELCAweEMxMEUsIDB4QzEwRiwgMHhDMTExLCAweEMxMTIsIDB4QzExMywgMHhDMTE0LCAweEMxMTYsCisgICAgMHhDMTE3LCAweEMxMTgsIDB4QzExOSwgMHhDMTFBLCAweEMxMUIsIDB4QzEyMSwgMHhDMTIyLCAweEMxMjUsCisgICAgMHhDMTI4LCAweEMxMjksIDB4QzEyQSwgMHhDMTJCLCAweEMxMkUsIDB4QzEzMiwgMHhDMTMzLCAweEMxMzQsCisgICAgMHhDMTM1LCAweEMxMzcsIDB4QzEzQSwgMHhDMTNCLCAweEMxM0QsIDB4QzEzRSwgMHhDMTNGLCAweEMxNDEsCisgICAgMHhDMTQyLCAweEMxNDMsIDB4QzE0NCwgMHhDMTQ1LCAweEMxNDYsIDB4QzE0NywgMHhDMTRBLCAweEMxNEUsCisgICAgMHhDMTRGLCAweEMxNTAsIDB4QzE1MSwgMHhDMTUyLCAweEMxNTMsIDB4QzE1NiwgMHhDMTU3LCAweEMxNTksCisgICAgMHhDMTVBLCAweEMxNUIsIDB4QzE1RCwgMHhDMTVFLCAweEMxNUYsIDB4QzE2MCwgMHhDMTYxLCAweEMxNjIsCisgICAgMHhDMTYzLCAweEMxNjYsIDB4QzE2QSwgMHhDMTZCLCAweEMxNkMsIDB4QzE2RCwgMHhDMTZFLCAweEMxNkYsCisgICAgMHhDMTcxLCAweEMxNzIsIDB4QzE3MywgMHhDMTc1LCAweEMxNzYsIDB4QzE3NywgMHhDMTc5LCAweEMxN0EsCisgICAgMHhDMTdCLCAweEMxN0MsIDB4QzE3RCwgMHhDMTdFLCAweEMxN0YsIDB4QzE4MCwgMHhDMTgxLCAweEMxODIsCisgICAgMHhDMTgzLCAweEMxODQsIDB4QzE4NiwgMHhDMTg3LCAweEMxODgsIDB4QzE4OSwgMHhDMThBLCAweEMxOEIsCisgICAgMHhDMThGLCAweEMxOTEsIDB4QzE5MiwgMHhDMTkzLCAweEMxOTUsIDB4QzE5NywgMHhDMTk4LCAweEMxOTksCisgICAgMHhDMTlBLCAweEMxOUIsIDB4QzE5RSwgMHhDMUEwLCAweEMxQTIsIDB4QzFBMywgMHhDMUE0LCAweEMxQTYsCisgICAgMHhDMUE3LCAweEMxQUEsIDB4QzFBQiwgMHhDMUFELCAweEMxQUUsIDB4QzFBRiwgMHhDMUIxLCAweEMxQjIsCisgICAgMHhDMUIzLCAweEMxQjQsIDB4QzFCNSwgMHhDMUI2LCAweEMxQjcsIDB4QzFCOCwgMHhDMUI5LCAweEMxQkEsCisgICAgMHhDMUJCLCAweEMxQkMsIDB4QzFCRSwgMHhDMUJGLCAweEMxQzAsIDB4QzFDMSwgMHhDMUMyLCAweEMxQzMsCisgICAgMHhDMUM1LCAweEMxQzYsIDB4QzFDNywgMHhDMUM5LCAweEMxQ0EsIDB4QzFDQiwgMHhDMUNELCAweEMxQ0UsCisgICAgMHhDMUNGLCAweEMxRDAsIDB4QzFEMSwgMHhDMUQyLCAweEMxRDMsIDB4QzFENSwgMHhDMUQ2LCAweEMxRDksCisgICAgMHhDMURBLCAweEMxREIsIDB4QzFEQywgMHhDMURELCAweEMxREUsIDB4QzFERiwgMHhDMUUxLCAweEMxRTIsCisgICAgMHhDMUUzLCAweEMxRTUsIDB4QzFFNiwgMHhDMUU3LCAweEMxRTksIDB4QzFFQSwgMHhDMUVCLCAweEMxRUMsCisgICAgMHhDMUVELCAweEMxRUUsIDB4QzFFRiwgMHhDMUYyLCAweEMxRjQsIDB4QzFGNSwgMHhDMUY2LCAweEMxRjcsCisgICAgMHhDMUY4LCAweEMxRjksIDB4QzFGQSwgMHhDMUZCLCAweEMxRkUsIDB4QzFGRiwgMHhDMjAxLCAweEMyMDIsCisgICAgMHhDMjAzLCAweEMyMDUsIDB4QzIwNiwgMHhDMjA3LCAweEMyMDgsIDB4QzIwOSwgMHhDMjBBLCAweEMyMEIsCisgICAgMHhDMjBFLCAweEMyMTAsIDB4QzIxMiwgMHhDMjEzLCAweEMyMTQsIDB4QzIxNSwgMHhDMjE2LCAweEMyMTcsCisgICAgMHhDMjFBLCAweEMyMUIsIDB4QzIxRCwgMHhDMjFFLCAweEMyMjEsIDB4QzIyMiwgMHhDMjIzLCAweEMyMjQsCisgICAgMHhDMjI1LCAweEMyMjYsIDB4QzIyNywgMHhDMjJBLCAweEMyMkMsIDB4QzIyRSwgMHhDMjMwLCAweEMyMzMsCisgICAgMHhDMjM1LCAweEMyMzYsIDB4QzIzNywgMHhDMjM4LCAweEMyMzksIDB4QzIzQSwgMHhDMjNCLCAweEMyM0MsCisgICAgMHhDMjNELCAweEMyM0UsIDB4QzIzRiwgMHhDMjQwLCAweEMyNDEsIDB4QzI0MiwgMHhDMjQzLCAweEMyNDQsCisgICAgMHhDMjQ1LCAweEMyNDYsIDB4QzI0NywgMHhDMjQ5LCAweEMyNEEsIDB4QzI0QiwgMHhDMjRDLCAweEMyNEQsCisgICAgMHhDMjRFLCAweEMyNEYsIDB4QzI1MiwgMHhDMjUzLCAweEMyNTUsIDB4QzI1NiwgMHhDMjU3LCAweEMyNTksCisgICAgMHhDMjVBLCAweEMyNUIsIDB4QzI1QywgMHhDMjVELCAweEMyNUUsIDB4QzI1RiwgMHhDMjYxLCAweEMyNjIsCisgICAgMHhDMjYzLCAweEMyNjQsIDB4QzI2NiwgMHhDMjY3LCAweEMyNjgsIDB4QzI2OSwgMHhDMjZBLCAweEMyNkIsCisgICAgMHhDMjZFLCAweEMyNkYsIDB4QzI3MSwgMHhDMjcyLCAweEMyNzMsIDB4QzI3NSwgMHhDMjc2LCAweEMyNzcsCisgICAgMHhDMjc4LCAweEMyNzksIDB4QzI3QSwgMHhDMjdCLCAweEMyN0UsIDB4QzI4MCwgMHhDMjgyLCAweEMyODMsCisgICAgMHhDMjg0LCAweEMyODUsIDB4QzI4NiwgMHhDMjg3LCAweEMyOEEsIDB4QzI4QiwgMHhDMjhDLCAweEMyOEQsCisgICAgMHhDMjhFLCAweEMyOEYsIDB4QzI5MSwgMHhDMjkyLCAweEMyOTMsIDB4QzI5NCwgMHhDMjk1LCAweEMyOTYsCisgICAgMHhDMjk3LCAweEMyOTksIDB4QzI5QSwgMHhDMjlDLCAweEMyOUUsIDB4QzI5RiwgMHhDMkEwLCAweEMyQTEsCisgICAgMHhDMkEyLCAweEMyQTMsIDB4QzJBNiwgMHhDMkE3LCAweEMyQTksIDB4QzJBQSwgMHhDMkFCLCAweEMyQUUsCisgICAgMHhDMkFGLCAweEMyQjAsIDB4QzJCMSwgMHhDMkIyLCAweEMyQjMsIDB4QzJCNiwgMHhDMkI4LCAweEMyQkEsCisgICAgMHhDMkJCLCAweEMyQkMsIDB4QzJCRCwgMHhDMkJFLCAweEMyQkYsIDB4QzJDMCwgMHhDMkMxLCAweEMyQzIsCisgICAgMHhDMkMzLCAweEMyQzQsIDB4QzJDNSwgMHhDMkM2LCAweEMyQzcsIDB4QzJDOCwgMHhDMkM5LCAweEMyQ0EsCisgICAgMHhDMkNCLCAweEMyQ0MsIDB4QzJDRCwgMHhDMkNFLCAweEMyQ0YsIDB4QzJEMCwgMHhDMkQxLCAweEMyRDIsCisgICAgMHhDMkQzLCAweEMyRDQsIDB4QzJENSwgMHhDMkQ2LCAweEMyRDcsIDB4QzJEOCwgMHhDMkQ5LCAweEMyREEsCisgICAgMHhDMkRCLCAweEMyREUsIDB4QzJERiwgMHhDMkUxLCAweEMyRTIsIDB4QzJFNSwgMHhDMkU2LCAweEMyRTcsCisgICAgMHhDMkU4LCAweEMyRTksIDB4QzJFQSwgMHhDMkVFLCAweEMyRjAsIDB4QzJGMiwgMHhDMkYzLCAweEMyRjQsCisgICAgMHhDMkY1LCAweEMyRjcsIDB4QzJGQSwgMHhDMkZELCAweEMyRkUsIDB4QzJGRiwgMHhDMzAxLCAweEMzMDIsCisgICAgMHhDMzAzLCAweEMzMDQsIDB4QzMwNSwgMHhDMzA2LCAweEMzMDcsIDB4QzMwQSwgMHhDMzBCLCAweEMzMEUsCisgICAgMHhDMzBGLCAweEMzMTAsIDB4QzMxMSwgMHhDMzEyLCAweEMzMTYsIDB4QzMxNywgMHhDMzE5LCAweEMzMUEsCisgICAgMHhDMzFCLCAweEMzMUQsIDB4QzMxRSwgMHhDMzFGLCAweEMzMjAsIDB4QzMyMSwgMHhDMzIyLCAweEMzMjMsCisgICAgMHhDMzI2LCAweEMzMjcsIDB4QzMyQSwgMHhDMzJCLCAweEMzMkMsIDB4QzMyRCwgMHhDMzJFLCAweEMzMkYsCisgICAgMHhDMzMwLCAweEMzMzEsIDB4QzMzMiwgMHhDMzMzLCAweEMzMzQsIDB4QzMzNSwgMHhDMzM2LCAweEMzMzcsCisgICAgMHhDMzM4LCAweEMzMzksIDB4QzMzQSwgMHhDMzNCLCAweEMzM0MsIDB4QzMzRCwgMHhDMzNFLCAweEMzM0YsCisgICAgMHhDMzQwLCAweEMzNDEsIDB4QzM0MiwgMHhDMzQzLCAweEMzNDQsIDB4QzM0NiwgMHhDMzQ3LCAweEMzNDgsCisgICAgMHhDMzQ5LCAweEMzNEEsIDB4QzM0QiwgMHhDMzRDLCAweEMzNEQsIDB4QzM0RSwgMHhDMzRGLCAweEMzNTAsCisgICAgMHhDMzUxLCAweEMzNTIsIDB4QzM1MywgMHhDMzU0LCAweEMzNTUsIDB4QzM1NiwgMHhDMzU3LCAweEMzNTgsCisgICAgMHhDMzU5LCAweEMzNUEsIDB4QzM1QiwgMHhDMzVDLCAweEMzNUQsIDB4QzM1RSwgMHhDMzVGLCAweEMzNjAsCisgICAgMHhDMzYxLCAweEMzNjIsIDB4QzM2MywgMHhDMzY0LCAweEMzNjUsIDB4QzM2NiwgMHhDMzY3LCAweEMzNkEsCisgICAgMHhDMzZCLCAweEMzNkQsIDB4QzM2RSwgMHhDMzZGLCAweEMzNzEsIDB4QzM3MywgMHhDMzc0LCAweEMzNzUsCisgICAgMHhDMzc2LCAweEMzNzcsIDB4QzM3QSwgMHhDMzdCLCAweEMzN0UsIDB4QzM3RiwgMHhDMzgwLCAweEMzODEsCisgICAgMHhDMzgyLCAweEMzODMsIDB4QzM4NSwgMHhDMzg2LCAweEMzODcsIDB4QzM4OSwgMHhDMzhBLCAweEMzOEIsCisgICAgMHhDMzhELCAweEMzOEUsIDB4QzM4RiwgMHhDMzkwLCAweEMzOTEsIDB4QzM5MiwgMHhDMzkzLCAweEMzOTQsCisgICAgMHhDMzk1LCAweEMzOTYsIDB4QzM5NywgMHhDMzk4LCAweEMzOTksIDB4QzM5QSwgMHhDMzlCLCAweEMzOUMsCisgICAgMHhDMzlELCAweEMzOUUsIDB4QzM5RiwgMHhDM0EwLCAweEMzQTEsIDB4QzNBMiwgMHhDM0EzLCAweEMzQTQsCisgICAgMHhDM0E1LCAweEMzQTYsIDB4QzNBNywgMHhDM0E4LCAweEMzQTksIDB4QzNBQSwgMHhDM0FCLCAweEMzQUMsCisgICAgMHhDM0FELCAweEMzQUUsIDB4QzNBRiwgMHhDM0IwLCAweEMzQjEsIDB4QzNCMiwgMHhDM0IzLCAweEMzQjQsCisgICAgMHhDM0I1LCAweEMzQjYsIDB4QzNCNywgMHhDM0I4LCAweEMzQjksIDB4QzNCQSwgMHhDM0JCLCAweEMzQkMsCisgICAgMHhDM0JELCAweEMzQkUsIDB4QzNCRiwgMHhDM0MxLCAweEMzQzIsIDB4QzNDMywgMHhDM0M0LCAweEMzQzUsCisgICAgMHhDM0M2LCAweEMzQzcsIDB4QzNDOCwgMHhDM0M5LCAweEMzQ0EsIDB4QzNDQiwgMHhDM0NDLCAweEMzQ0QsCisgICAgMHhDM0NFLCAweEMzQ0YsIDB4QzNEMCwgMHhDM0QxLCAweEMzRDIsIDB4QzNEMywgMHhDM0Q0LCAweEMzRDUsCisgICAgMHhDM0Q2LCAweEMzRDcsIDB4QzNEQSwgMHhDM0RCLCAweEMzREQsIDB4QzNERSwgMHhDM0UxLCAweEMzRTMsCisgICAgMHhDM0U0LCAweEMzRTUsIDB4QzNFNiwgMHhDM0U3LCAweEMzRUEsIDB4QzNFQiwgMHhDM0VDLCAweEMzRUUsCisgICAgMHhDM0VGLCAweEMzRjAsIDB4QzNGMSwgMHhDM0YyLCAweEMzRjMsIDB4QzNGNiwgMHhDM0Y3LCAweEMzRjksCisgICAgMHhDM0ZBLCAweEMzRkIsIDB4QzNGQywgMHhDM0ZELCAweEMzRkUsIDB4QzNGRiwgMHhDNDAwLCAweEM0MDEsCisgICAgMHhDNDAyLCAweEM0MDMsIDB4QzQwNCwgMHhDNDA1LCAweEM0MDYsIDB4QzQwNywgMHhDNDA5LCAweEM0MEEsCisgICAgMHhDNDBCLCAweEM0MEMsIDB4QzQwRCwgMHhDNDBFLCAweEM0MEYsIDB4QzQxMSwgMHhDNDEyLCAweEM0MTMsCisgICAgMHhDNDE0LCAweEM0MTUsIDB4QzQxNiwgMHhDNDE3LCAweEM0MTgsIDB4QzQxOSwgMHhDNDFBLCAweEM0MUIsCisgICAgMHhDNDFDLCAweEM0MUQsIDB4QzQxRSwgMHhDNDFGLCAweEM0MjAsIDB4QzQyMSwgMHhDNDIyLCAweEM0MjMsCisgICAgMHhDNDI1LCAweEM0MjYsIDB4QzQyNywgMHhDNDI4LCAweEM0MjksIDB4QzQyQSwgMHhDNDJCLCAweEM0MkQsCisgICAgMHhDNDJFLCAweEM0MkYsIDB4QzQzMSwgMHhDNDMyLCAweEM0MzMsIDB4QzQzNSwgMHhDNDM2LCAweEM0MzcsCisgICAgMHhDNDM4LCAweEM0MzksIDB4QzQzQSwgMHhDNDNCLCAweEM0M0UsIDB4QzQzRiwgMHhDNDQwLCAweEM0NDEsCisgICAgMHhDNDQyLCAweEM0NDMsIDB4QzQ0NCwgMHhDNDQ1LCAweEM0NDYsIDB4QzQ0NywgMHhDNDQ5LCAweEM0NEEsCisgICAgMHhDNDRCLCAweEM0NEMsIDB4QzQ0RCwgMHhDNDRFLCAweEM0NEYsIDB4QzQ1MCwgMHhDNDUxLCAweEM0NTIsCisgICAgMHhDNDUzLCAweEM0NTQsIDB4QzQ1NSwgMHhDNDU2LCAweEM0NTcsIDB4QzQ1OCwgMHhDNDU5LCAweEM0NUEsCisgICAgMHhDNDVCLCAweEM0NUMsIDB4QzQ1RCwgMHhDNDVFLCAweEM0NUYsIDB4QzQ2MCwgMHhDNDYxLCAweEM0NjIsCisgICAgMHhDNDYzLCAweEM0NjYsIDB4QzQ2NywgMHhDNDY5LCAweEM0NkEsIDB4QzQ2QiwgMHhDNDZELCAweEM0NkUsCisgICAgMHhDNDZGLCAweEM0NzAsIDB4QzQ3MSwgMHhDNDcyLCAweEM0NzMsIDB4QzQ3NiwgMHhDNDc3LCAweEM0NzgsCisgICAgMHhDNDdBLCAweEM0N0IsIDB4QzQ3QywgMHhDNDdELCAweEM0N0UsIDB4QzQ3RiwgMHhDNDgxLCAweEM0ODIsCisgICAgMHhDNDgzLCAweEM0ODQsIDB4QzQ4NSwgMHhDNDg2LCAweEM0ODcsIDB4QzQ4OCwgMHhDNDg5LCAweEM0OEEsCisgICAgMHhDNDhCLCAweEM0OEMsIDB4QzQ4RCwgMHhDNDhFLCAweEM0OEYsIDB4QzQ5MCwgMHhDNDkxLCAweEM0OTIsCisgICAgMHhDNDkzLCAweEM0OTUsIDB4QzQ5NiwgMHhDNDk3LCAweEM0OTgsIDB4QzQ5OSwgMHhDNDlBLCAweEM0OUIsCisgICAgMHhDNDlELCAweEM0OUUsIDB4QzQ5RiwgMHhDNEEwLCAweEM0QTEsIDB4QzRBMiwgMHhDNEEzLCAweEM0QTQsCisgICAgMHhDNEE1LCAweEM0QTYsIDB4QzRBNywgMHhDNEE4LCAweEM0QTksIDB4QzRBQSwgMHhDNEFCLCAweEM0QUMsCisgICAgMHhDNEFELCAweEM0QUUsIDB4QzRBRiwgMHhDNEIwLCAweEM0QjEsIDB4QzRCMiwgMHhDNEIzLCAweEM0QjQsCisgICAgMHhDNEI1LCAweEM0QjYsIDB4QzRCNywgMHhDNEI5LCAweEM0QkEsIDB4QzRCQiwgMHhDNEJELCAweEM0QkUsCisgICAgMHhDNEJGLCAweEM0QzAsIDB4QzRDMSwgMHhDNEMyLCAweEM0QzMsIDB4QzRDNCwgMHhDNEM1LCAweEM0QzYsCisgICAgMHhDNEM3LCAweEM0QzgsIDB4QzRDOSwgMHhDNENBLCAweEM0Q0IsIDB4QzRDQywgMHhDNENELCAweEM0Q0UsCisgICAgMHhDNENGLCAweEM0RDAsIDB4QzREMSwgMHhDNEQyLCAweEM0RDMsIDB4QzRENCwgMHhDNEQ1LCAweEM0RDYsCisgICAgMHhDNEQ3LCAweEM0RDgsIDB4QzREOSwgMHhDNERBLCAweEM0REIsIDB4QzREQywgMHhDNERELCAweEM0REUsCisgICAgMHhDNERGLCAweEM0RTAsIDB4QzRFMSwgMHhDNEUyLCAweEM0RTMsIDB4QzRFNCwgMHhDNEU1LCAweEM0RTYsCisgICAgMHhDNEU3LCAweEM0RTgsIDB4QzRFQSwgMHhDNEVCLCAweEM0RUMsIDB4QzRFRCwgMHhDNEVFLCAweEM0RUYsCisgICAgMHhDNEYyLCAweEM0RjMsIDB4QzRGNSwgMHhDNEY2LCAweEM0RjcsIDB4QzRGOSwgMHhDNEZCLCAweEM0RkMsCisgICAgMHhDNEZELCAweEM0RkUsIDB4QzUwMiwgMHhDNTAzLCAweEM1MDQsIDB4QzUwNSwgMHhDNTA2LCAweEM1MDcsCisgICAgMHhDNTA4LCAweEM1MDksIDB4QzUwQSwgMHhDNTBCLCAweEM1MEQsIDB4QzUwRSwgMHhDNTBGLCAweEM1MTEsCisgICAgMHhDNTEyLCAweEM1MTMsIDB4QzUxNSwgMHhDNTE2LCAweEM1MTcsIDB4QzUxOCwgMHhDNTE5LCAweEM1MUEsCisgICAgMHhDNTFCLCAweEM1MUQsIDB4QzUxRSwgMHhDNTFGLCAweEM1MjAsIDB4QzUyMSwgMHhDNTIyLCAweEM1MjMsCisgICAgMHhDNTI0LCAweEM1MjUsIDB4QzUyNiwgMHhDNTI3LCAweEM1MkEsIDB4QzUyQiwgMHhDNTJELCAweEM1MkUsCisgICAgMHhDNTJGLCAweEM1MzEsIDB4QzUzMiwgMHhDNTMzLCAweEM1MzQsIDB4QzUzNSwgMHhDNTM2LCAweEM1MzcsCisgICAgMHhDNTNBLCAweEM1M0MsIDB4QzUzRSwgMHhDNTNGLCAweEM1NDAsIDB4QzU0MSwgMHhDNTQyLCAweEM1NDMsCisgICAgMHhDNTQ2LCAweEM1NDcsIDB4QzU0QiwgMHhDNTRGLCAweEM1NTAsIDB4QzU1MSwgMHhDNTUyLCAweEM1NTYsCisgICAgMHhDNTVBLCAweEM1NUIsIDB4QzU1QywgMHhDNTVGLCAweEM1NjIsIDB4QzU2MywgMHhDNTY1LCAweEM1NjYsCisgICAgMHhDNTY3LCAweEM1NjksIDB4QzU2QSwgMHhDNTZCLCAweEM1NkMsIDB4QzU2RCwgMHhDNTZFLCAweEM1NkYsCisgICAgMHhDNTcyLCAweEM1NzYsIDB4QzU3NywgMHhDNTc4LCAweEM1NzksIDB4QzU3QSwgMHhDNTdCLCAweEM1N0UsCisgICAgMHhDNTdGLCAweEM1ODEsIDB4QzU4MiwgMHhDNTgzLCAweEM1ODUsIDB4QzU4NiwgMHhDNTg4LCAweEM1ODksCisgICAgMHhDNThBLCAweEM1OEIsIDB4QzU4RSwgMHhDNTkwLCAweEM1OTIsIDB4QzU5MywgMHhDNTk0LCAweEM1OTYsCisgICAgMHhDNTk5LCAweEM1OUEsIDB4QzU5QiwgMHhDNTlELCAweEM1OUUsIDB4QzU5RiwgMHhDNUExLCAweEM1QTIsCisgICAgMHhDNUEzLCAweEM1QTQsIDB4QzVBNSwgMHhDNUE2LCAweEM1QTcsIDB4QzVBOCwgMHhDNUFBLCAweEM1QUIsCisgICAgMHhDNUFDLCAweEM1QUQsIDB4QzVBRSwgMHhDNUFGLCAweEM1QjAsIDB4QzVCMSwgMHhDNUIyLCAweEM1QjMsCisgICAgMHhDNUI2LCAweEM1QjcsIDB4QzVCQSwgMHhDNUJGLCAweEM1QzAsIDB4QzVDMSwgMHhDNUMyLCAweEM1QzMsCisgICAgMHhDNUNCLCAweEM1Q0QsIDB4QzVDRiwgMHhDNUQyLCAweEM1RDMsIDB4QzVENSwgMHhDNUQ2LCAweEM1RDcsCisgICAgMHhDNUQ5LCAweEM1REEsIDB4QzVEQiwgMHhDNURDLCAweEM1REQsIDB4QzVERSwgMHhDNURGLCAweEM1RTIsCisgICAgMHhDNUU0LCAweEM1RTYsIDB4QzVFNywgMHhDNUU4LCAweEM1RTksIDB4QzVFQSwgMHhDNUVCLCAweEM1RUYsCisgICAgMHhDNUYxLCAweEM1RjIsIDB4QzVGMywgMHhDNUY1LCAweEM1RjgsIDB4QzVGOSwgMHhDNUZBLCAweEM1RkIsCisgICAgMHhDNjAyLCAweEM2MDMsIDB4QzYwNCwgMHhDNjA5LCAweEM2MEEsIDB4QzYwQiwgMHhDNjBELCAweEM2MEUsCisgICAgMHhDNjBGLCAweEM2MTEsIDB4QzYxMiwgMHhDNjEzLCAweEM2MTQsIDB4QzYxNSwgMHhDNjE2LCAweEM2MTcsCisgICAgMHhDNjFBLCAweEM2MUQsIDB4QzYxRSwgMHhDNjFGLCAweEM2MjAsIDB4QzYyMSwgMHhDNjIyLCAweEM2MjMsCisgICAgMHhDNjI2LCAweEM2MjcsIDB4QzYyOSwgMHhDNjJBLCAweEM2MkIsIDB4QzYyRiwgMHhDNjMxLCAweEM2MzIsCisgICAgMHhDNjM2LCAweEM2MzgsIDB4QzYzQSwgMHhDNjNDLCAweEM2M0QsIDB4QzYzRSwgMHhDNjNGLCAweEM2NDIsCisgICAgMHhDNjQzLCAweEM2NDUsIDB4QzY0NiwgMHhDNjQ3LCAweEM2NDksIDB4QzY0QSwgMHhDNjRCLCAweEM2NEMsCisgICAgMHhDNjRELCAweEM2NEUsIDB4QzY0RiwgMHhDNjUyLCAweEM2NTYsIDB4QzY1NywgMHhDNjU4LCAweEM2NTksCisgICAgMHhDNjVBLCAweEM2NUIsIDB4QzY1RSwgMHhDNjVGLCAweEM2NjEsIDB4QzY2MiwgMHhDNjYzLCAweEM2NjQsCisgICAgMHhDNjY1LCAweEM2NjYsIDB4QzY2NywgMHhDNjY4LCAweEM2NjksIDB4QzY2QSwgMHhDNjZCLCAweEM2NkQsCisgICAgMHhDNjZFLCAweEM2NzAsIDB4QzY3MiwgMHhDNjczLCAweEM2NzQsIDB4QzY3NSwgMHhDNjc2LCAweEM2NzcsCisgICAgMHhDNjdBLCAweEM2N0IsIDB4QzY3RCwgMHhDNjdFLCAweEM2N0YsIDB4QzY4MSwgMHhDNjgyLCAweEM2ODMsCisgICAgMHhDNjg0LCAweEM2ODUsIDB4QzY4NiwgMHhDNjg3LCAweEM2OEEsIDB4QzY4QywgMHhDNjhFLCAweEM2OEYsCisgICAgMHhDNjkwLCAweEM2OTEsIDB4QzY5MiwgMHhDNjkzLCAweEM2OTYsIDB4QzY5NywgMHhDNjk5LCAweEM2OUEsCisgICAgMHhDNjlCLCAweEM2OUQsIDB4QzY5RSwgMHhDNjlGLCAweEM2QTAsIDB4QzZBMSwgMHhDNkEyLCAweEM2QTMsCisgICAgMHhDNkE2LCAweEM2QTgsIDB4QzZBQSwgMHhDNkFCLCAweEM2QUMsIDB4QzZBRCwgMHhDNkFFLCAweEM2QUYsCisgICAgMHhDNkIyLCAweEM2QjMsIDB4QzZCNSwgMHhDNkI2LCAweEM2QjcsIDB4QzZCQiwgMHhDNkJDLCAweEM2QkQsCisgICAgMHhDNkJFLCAweEM2QkYsIDB4QzZDMiwgMHhDNkM0LCAweEM2QzYsIDB4QzZDNywgMHhDNkM4LCAweEM2QzksCisgICAgMHhDNkNBLCAweEM2Q0IsIDB4QzZDRSwgMHhDNkNGLCAweEM2RDEsIDB4QzZEMiwgMHhDNkQzLCAweEM2RDUsCisgICAgMHhDNkQ2LCAweEM2RDcsIDB4QzZEOCwgMHhDNkQ5LCAweEM2REEsIDB4QzZEQiwgMHhDNkRFLCAweEM2REYsCisgICAgMHhDNkUyLCAweEM2RTMsIDB4QzZFNCwgMHhDNkU1LCAweEM2RTYsIDB4QzZFNywgMHhDNkVBLCAweEM2RUIsCisgICAgMHhDNkVELCAweEM2RUUsIDB4QzZFRiwgMHhDNkYxLCAweEM2RjIsIDB4QzZGMywgMHhDNkY0LCAweEM2RjUsCisgICAgMHhDNkY2LCAweEM2RjcsIDB4QzZGQSwgMHhDNkZCLCAweEM2RkMsIDB4QzZGRSwgMHhDNkZGLCAweEM3MDAsCisgICAgMHhDNzAxLCAweEM3MDIsIDB4QzcwMywgMHhDNzA2LCAweEM3MDcsIDB4QzcwOSwgMHhDNzBBLCAweEM3MEIsCisgICAgMHhDNzBELCAweEM3MEUsIDB4QzcwRiwgMHhDNzEwLCAweEM3MTEsIDB4QzcxMiwgMHhDNzEzLCAweEM3MTYsCisgICAgMHhDNzE4LCAweEM3MUEsIDB4QzcxQiwgMHhDNzFDLCAweEM3MUQsIDB4QzcxRSwgMHhDNzFGLCAweEM3MjIsCisgICAgMHhDNzIzLCAweEM3MjUsIDB4QzcyNiwgMHhDNzI3LCAweEM3MjksIDB4QzcyQSwgMHhDNzJCLCAweEM3MkMsCisgICAgMHhDNzJELCAweEM3MkUsIDB4QzcyRiwgMHhDNzMyLCAweEM3MzQsIDB4QzczNiwgMHhDNzM4LCAweEM3MzksCisgICAgMHhDNzNBLCAweEM3M0IsIDB4QzczRSwgMHhDNzNGLCAweEM3NDEsIDB4Qzc0MiwgMHhDNzQzLCAweEM3NDUsCisgICAgMHhDNzQ2LCAweEM3NDcsIDB4Qzc0OCwgMHhDNzQ5LCAweEM3NEIsIDB4Qzc0RSwgMHhDNzUwLCAweEM3NTksCisgICAgMHhDNzVBLCAweEM3NUIsIDB4Qzc1RCwgMHhDNzVFLCAweEM3NUYsIDB4Qzc2MSwgMHhDNzYyLCAweEM3NjMsCisgICAgMHhDNzY0LCAweEM3NjUsIDB4Qzc2NiwgMHhDNzY3LCAweEM3NjksIDB4Qzc2QSwgMHhDNzZDLCAweEM3NkQsCisgICAgMHhDNzZFLCAweEM3NkYsIDB4Qzc3MCwgMHhDNzcxLCAweEM3NzIsIDB4Qzc3MywgMHhDNzc2LCAweEM3NzcsCisgICAgMHhDNzc5LCAweEM3N0EsIDB4Qzc3QiwgMHhDNzdGLCAweEM3ODAsIDB4Qzc4MSwgMHhDNzgyLCAweEM3ODYsCisgICAgMHhDNzhCLCAweEM3OEMsIDB4Qzc4RCwgMHhDNzhGLCAweEM3OTIsIDB4Qzc5MywgMHhDNzk1LCAweEM3OTksCisgICAgMHhDNzlCLCAweEM3OUMsIDB4Qzc5RCwgMHhDNzlFLCAweEM3OUYsIDB4QzdBMiwgMHhDN0E3LCAweEM3QTgsCisgICAgMHhDN0E5LCAweEM3QUEsIDB4QzdBQiwgMHhDN0FFLCAweEM3QUYsIDB4QzdCMSwgMHhDN0IyLCAweEM3QjMsCisgICAgMHhDN0I1LCAweEM3QjYsIDB4QzdCNywgMHhDN0I4LCAweEM3QjksIDB4QzdCQSwgMHhDN0JCLCAweEM3QkUsCisgICAgMHhDN0MyLCAweEM3QzMsIDB4QzdDNCwgMHhDN0M1LCAweEM3QzYsIDB4QzdDNywgMHhDN0NBLCAweEM3Q0IsCisgICAgMHhDN0NELCAweEM3Q0YsIDB4QzdEMSwgMHhDN0QyLCAweEM3RDMsIDB4QzdENCwgMHhDN0Q1LCAweEM3RDYsCisgICAgMHhDN0Q3LCAweEM3RDksIDB4QzdEQSwgMHhDN0RCLCAweEM3REMsIDB4QzdERSwgMHhDN0RGLCAweEM3RTAsCisgICAgMHhDN0UxLCAweEM3RTIsIDB4QzdFMywgMHhDN0U1LCAweEM3RTYsIDB4QzdFNywgMHhDN0U5LCAweEM3RUEsCisgICAgMHhDN0VCLCAweEM3RUQsIDB4QzdFRSwgMHhDN0VGLCAweEM3RjAsIDB4QzdGMSwgMHhDN0YyLCAweEM3RjMsCisgICAgMHhDN0Y0LCAweEM3RjUsIDB4QzdGNiwgMHhDN0Y3LCAweEM3RjgsIDB4QzdGOSwgMHhDN0ZBLCAweEM3RkIsCisgICAgMHhDN0ZDLCAweEM3RkQsIDB4QzdGRSwgMHhDN0ZGLCAweEM4MDIsIDB4QzgwMywgMHhDODA1LCAweEM4MDYsCisgICAgMHhDODA3LCAweEM4MDksIDB4QzgwQiwgMHhDODBDLCAweEM4MEQsIDB4QzgwRSwgMHhDODBGLCAweEM4MTIsCisgICAgMHhDODE0LCAweEM4MTcsIDB4QzgxOCwgMHhDODE5LCAweEM4MUEsIDB4QzgxQiwgMHhDODFFLCAweEM4MUYsCisgICAgMHhDODIxLCAweEM4MjIsIDB4QzgyMywgMHhDODI1LCAweEM4MjYsIDB4QzgyNywgMHhDODI4LCAweEM4MjksCisgICAgMHhDODJBLCAweEM4MkIsIDB4QzgyRSwgMHhDODMwLCAweEM4MzIsIDB4QzgzMywgMHhDODM0LCAweEM4MzUsCisgICAgMHhDODM2LCAweEM4MzcsIDB4QzgzOSwgMHhDODNBLCAweEM4M0IsIDB4QzgzRCwgMHhDODNFLCAweEM4M0YsCisgICAgMHhDODQxLCAweEM4NDIsIDB4Qzg0MywgMHhDODQ0LCAweEM4NDUsIDB4Qzg0NiwgMHhDODQ3LCAweEM4NEEsCisgICAgMHhDODRCLCAweEM4NEUsIDB4Qzg0RiwgMHhDODUwLCAweEM4NTEsIDB4Qzg1MiwgMHhDODUzLCAweEM4NTUsCisgICAgMHhDODU2LCAweEM4NTcsIDB4Qzg1OCwgMHhDODU5LCAweEM4NUEsIDB4Qzg1QiwgMHhDODVDLCAweEM4NUQsCisgICAgMHhDODVFLCAweEM4NUYsIDB4Qzg2MCwgMHhDODYxLCAweEM4NjIsIDB4Qzg2MywgMHhDODY0LCAweEM4NjUsCisgICAgMHhDODY2LCAweEM4NjcsIDB4Qzg2OCwgMHhDODY5LCAweEM4NkEsIDB4Qzg2QiwgMHhDODZDLCAweEM4NkQsCisgICAgMHhDODZFLCAweEM4NkYsIDB4Qzg3MiwgMHhDODczLCAweEM4NzUsIDB4Qzg3NiwgMHhDODc3LCAweEM4NzksCisgICAgMHhDODdCLCAweEM4N0MsIDB4Qzg3RCwgMHhDODdFLCAweEM4N0YsIDB4Qzg4MiwgMHhDODg0LCAweEM4ODgsCisgICAgMHhDODg5LCAweEM4OEEsIDB4Qzg4RSwgMHhDODhGLCAweEM4OTAsIDB4Qzg5MSwgMHhDODkyLCAweEM4OTMsCisgICAgMHhDODk1LCAweEM4OTYsIDB4Qzg5NywgMHhDODk4LCAweEM4OTksIDB4Qzg5QSwgMHhDODlCLCAweEM4OUMsCisgICAgMHhDODlFLCAweEM4QTAsIDB4QzhBMiwgMHhDOEEzLCAweEM4QTQsIDB4QzhBNSwgMHhDOEE2LCAweEM4QTcsCisgICAgMHhDOEE5LCAweEM4QUEsIDB4QzhBQiwgMHhDOEFDLCAweEM4QUQsIDB4QzhBRSwgMHhDOEFGLCAweEM4QjAsCisgICAgMHhDOEIxLCAweEM4QjIsIDB4QzhCMywgMHhDOEI0LCAweEM4QjUsIDB4QzhCNiwgMHhDOEI3LCAweEM4QjgsCisgICAgMHhDOEI5LCAweEM4QkEsIDB4QzhCQiwgMHhDOEJFLCAweEM4QkYsIDB4QzhDMCwgMHhDOEMxLCAweEM4QzIsCisgICAgMHhDOEMzLCAweEM4QzUsIDB4QzhDNiwgMHhDOEM3LCAweEM4QzksIDB4QzhDQSwgMHhDOENCLCAweEM4Q0QsCisgICAgMHhDOENFLCAweEM4Q0YsIDB4QzhEMCwgMHhDOEQxLCAweEM4RDIsIDB4QzhEMywgMHhDOEQ2LCAweEM4RDgsCisgICAgMHhDOERBLCAweEM4REIsIDB4QzhEQywgMHhDOERELCAweEM4REUsIDB4QzhERiwgMHhDOEUyLCAweEM4RTMsCisgICAgMHhDOEU1LCAweEM4RTYsIDB4QzhFNywgMHhDOEU4LCAweEM4RTksIDB4QzhFQSwgMHhDOEVCLCAweEM4RUMsCisgICAgMHhDOEVELCAweEM4RUUsIDB4QzhFRiwgMHhDOEYwLCAweEM4RjEsIDB4QzhGMiwgMHhDOEYzLCAweEM4RjQsCisgICAgMHhDOEY2LCAweEM4RjcsIDB4QzhGOCwgMHhDOEY5LCAweEM4RkEsIDB4QzhGQiwgMHhDOEZFLCAweEM4RkYsCisgICAgMHhDOTAxLCAweEM5MDIsIDB4QzkwMywgMHhDOTA3LCAweEM5MDgsIDB4QzkwOSwgMHhDOTBBLCAweEM5MEIsCisgICAgMHhDOTBFLCAweEM5MTAsIDB4QzkxMiwgMHhDOTEzLCAweEM5MTQsIDB4QzkxNSwgMHhDOTE2LCAweEM5MTcsCisgICAgMHhDOTE5LCAweEM5MUEsIDB4QzkxQiwgMHhDOTFDLCAweEM5MUQsIDB4QzkxRSwgMHhDOTFGLCAweEM5MjAsCisgICAgMHhDOTIxLCAweEM5MjIsIDB4QzkyMywgMHhDOTI0LCAweEM5MjUsIDB4QzkyNiwgMHhDOTI3LCAweEM5MjgsCisgICAgMHhDOTI5LCAweEM5MkEsIDB4QzkyQiwgMHhDOTJELCAweEM5MkUsIDB4QzkyRiwgMHhDOTMwLCAweEM5MzEsCisgICAgMHhDOTMyLCAweEM5MzMsIDB4QzkzNSwgMHhDOTM2LCAweEM5MzcsIDB4QzkzOCwgMHhDOTM5LCAweEM5M0EsCisgICAgMHhDOTNCLCAweEM5M0MsIDB4QzkzRCwgMHhDOTNFLCAweEM5M0YsIDB4Qzk0MCwgMHhDOTQxLCAweEM5NDIsCisgICAgMHhDOTQzLCAweEM5NDQsIDB4Qzk0NSwgMHhDOTQ2LCAweEM5NDcsIDB4Qzk0OCwgMHhDOTQ5LCAweEM5NEEsCisgICAgMHhDOTRCLCAweEM5NEMsIDB4Qzk0RCwgMHhDOTRFLCAweEM5NEYsIDB4Qzk1MiwgMHhDOTUzLCAweEM5NTUsCisgICAgMHhDOTU2LCAweEM5NTcsIDB4Qzk1OSwgMHhDOTVBLCAweEM5NUIsIDB4Qzk1QywgMHhDOTVELCAweEM5NUUsCisgICAgMHhDOTVGLCAweEM5NjIsIDB4Qzk2NCwgMHhDOTY1LCAweEM5NjYsIDB4Qzk2NywgMHhDOTY4LCAweEM5NjksCisgICAgMHhDOTZBLCAweEM5NkIsIDB4Qzk2RCwgMHhDOTZFLCAweEM5NkYsIDB4Qzk3MSwgMHhDOTcyLCAweEM5NzMsCisgICAgMHhDOTc1LCAweEM5NzYsIDB4Qzk3NywgMHhDOTc4LCAweEM5NzksIDB4Qzk3QSwgMHhDOTdCLCAweEM5N0QsCisgICAgMHhDOTdFLCAweEM5N0YsIDB4Qzk4MCwgMHhDOTgxLCAweEM5ODIsIDB4Qzk4MywgMHhDOTg0LCAweEM5ODUsCisgICAgMHhDOTg2LCAweEM5ODcsIDB4Qzk4QSwgMHhDOThCLCAweEM5OEQsIDB4Qzk4RSwgMHhDOThGLCAweEM5OTEsCisgICAgMHhDOTkyLCAweEM5OTMsIDB4Qzk5NCwgMHhDOTk1LCAweEM5OTYsIDB4Qzk5NywgMHhDOTlBLCAweEM5OUMsCisgICAgMHhDOTlFLCAweEM5OUYsIDB4QzlBMCwgMHhDOUExLCAweEM5QTIsIDB4QzlBMywgMHhDOUE0LCAweEM5QTUsCisgICAgMHhDOUE2LCAweEM5QTcsIDB4QzlBOCwgMHhDOUE5LCAweEM5QUEsIDB4QzlBQiwgMHhDOUFDLCAweEM5QUQsCisgICAgMHhDOUFFLCAweEM5QUYsIDB4QzlCMCwgMHhDOUIxLCAweEM5QjIsIDB4QzlCMywgMHhDOUI0LCAweEM5QjUsCisgICAgMHhDOUI2LCAweEM5QjcsIDB4QzlCOCwgMHhDOUI5LCAweEM5QkEsIDB4QzlCQiwgMHhDOUJDLCAweEM5QkQsCisgICAgMHhDOUJFLCAweEM5QkYsIDB4QzlDMiwgMHhDOUMzLCAweEM5QzUsIDB4QzlDNiwgMHhDOUM5LCAweEM5Q0IsCisgICAgMHhDOUNDLCAweEM5Q0QsIDB4QzlDRSwgMHhDOUNGLCAweEM5RDIsIDB4QzlENCwgMHhDOUQ3LCAweEM5RDgsCisgICAgMHhDOURCLCAweEM5REUsIDB4QzlERiwgMHhDOUUxLCAweEM5RTMsIDB4QzlFNSwgMHhDOUU2LCAweEM5RTgsCisgICAgMHhDOUU5LCAweEM5RUEsIDB4QzlFQiwgMHhDOUVFLCAweEM5RjIsIDB4QzlGMywgMHhDOUY0LCAweEM5RjUsCisgICAgMHhDOUY2LCAweEM5RjcsIDB4QzlGQSwgMHhDOUZCLCAweEM5RkQsIDB4QzlGRSwgMHhDOUZGLCAweENBMDEsCisgICAgMHhDQTAyLCAweENBMDMsIDB4Q0EwNCwgMHhDQTA1LCAweENBMDYsIDB4Q0EwNywgMHhDQTBBLCAweENBMEUsCisgICAgMHhDQTBGLCAweENBMTAsIDB4Q0ExMSwgMHhDQTEyLCAweENBMTMsIDB4Q0ExNSwgMHhDQTE2LCAweENBMTcsCisgICAgMHhDQTE5LCAweENBMUEsIDB4Q0ExQiwgMHhDQTFDLCAweENBMUQsIDB4Q0ExRSwgMHhDQTFGLCAweENBMjAsCisgICAgMHhDQTIxLCAweENBMjIsIDB4Q0EyMywgMHhDQTI0LCAweENBMjUsIDB4Q0EyNiwgMHhDQTI3LCAweENBMjgsCisgICAgMHhDQTJBLCAweENBMkIsIDB4Q0EyQywgMHhDQTJELCAweENBMkUsIDB4Q0EyRiwgMHhDQTMwLCAweENBMzEsCisgICAgMHhDQTMyLCAweENBMzMsIDB4Q0EzNCwgMHhDQTM1LCAweENBMzYsIDB4Q0EzNywgMHhDQTM4LCAweENBMzksCisgICAgMHhDQTNBLCAweENBM0IsIDB4Q0EzQywgMHhDQTNELCAweENBM0UsIDB4Q0EzRiwgMHhDQTQwLCAweENBNDEsCisgICAgMHhDQTQyLCAweENBNDMsIDB4Q0E0NCwgMHhDQTQ1LCAweENBNDYsIDB4Q0E0NywgMHhDQTQ4LCAweENBNDksCisgICAgMHhDQTRBLCAweENBNEIsIDB4Q0E0RSwgMHhDQTRGLCAweENBNTEsIDB4Q0E1MiwgMHhDQTUzLCAweENBNTUsCisgICAgMHhDQTU2LCAweENBNTcsIDB4Q0E1OCwgMHhDQTU5LCAweENBNUEsIDB4Q0E1QiwgMHhDQTVFLCAweENBNjIsCisgICAgMHhDQTYzLCAweENBNjQsIDB4Q0E2NSwgMHhDQTY2LCAweENBNjcsIDB4Q0E2OSwgMHhDQTZBLCAweENBNkIsCisgICAgMHhDQTZDLCAweENBNkQsIDB4Q0E2RSwgMHhDQTZGLCAweENBNzAsIDB4Q0E3MSwgMHhDQTcyLCAweENBNzMsCisgICAgMHhDQTc0LCAweENBNzUsIDB4Q0E3NiwgMHhDQTc3LCAweENBNzgsIDB4Q0E3OSwgMHhDQTdBLCAweENBN0IsCisgICAgMHhDQTdDLCAweENBN0UsIDB4Q0E3RiwgMHhDQTgwLCAweENBODEsIDB4Q0E4MiwgMHhDQTgzLCAweENBODUsCisgICAgMHhDQTg2LCAweENBODcsIDB4Q0E4OCwgMHhDQTg5LCAweENBOEEsIDB4Q0E4QiwgMHhDQThDLCAweENBOEQsCisgICAgMHhDQThFLCAweENBOEYsIDB4Q0E5MCwgMHhDQTkxLCAweENBOTIsIDB4Q0E5MywgMHhDQTk0LCAweENBOTUsCisgICAgMHhDQTk2LCAweENBOTcsIDB4Q0E5OSwgMHhDQTlBLCAweENBOUIsIDB4Q0E5QywgMHhDQTlELCAweENBOUUsCisgICAgMHhDQTlGLCAweENBQTAsIDB4Q0FBMSwgMHhDQUEyLCAweENBQTMsIDB4Q0FBNCwgMHhDQUE1LCAweENBQTYsCisgICAgMHhDQUE3LCAweENBQTgsIDB4Q0FBOSwgMHhDQUFBLCAweENBQUIsIDB4Q0FBQywgMHhDQUFELCAweENBQUUsCisgICAgMHhDQUFGLCAweENBQjAsIDB4Q0FCMSwgMHhDQUIyLCAweENBQjMsIDB4Q0FCNCwgMHhDQUI1LCAweENBQjYsCisgICAgMHhDQUI3LCAweENBQjgsIDB4Q0FCOSwgMHhDQUJBLCAweENBQkIsIDB4Q0FCRSwgMHhDQUJGLCAweENBQzEsCisgICAgMHhDQUMyLCAweENBQzMsIDB4Q0FDNSwgMHhDQUM2LCAweENBQzcsIDB4Q0FDOCwgMHhDQUM5LCAweENBQ0EsCisgICAgMHhDQUNCLCAweENBQ0UsIDB4Q0FEMCwgMHhDQUQyLCAweENBRDQsIDB4Q0FENSwgMHhDQUQ2LCAweENBRDcsCisgICAgMHhDQURBLCAweENBREIsIDB4Q0FEQywgMHhDQURELCAweENBREUsIDB4Q0FERiwgMHhDQUUxLCAweENBRTIsCisgICAgMHhDQUUzLCAweENBRTQsIDB4Q0FFNSwgMHhDQUU2LCAweENBRTcsIDB4Q0FFOCwgMHhDQUU5LCAweENBRUEsCisgICAgMHhDQUVCLCAweENBRUQsIDB4Q0FFRSwgMHhDQUVGLCAweENBRjAsIDB4Q0FGMSwgMHhDQUYyLCAweENBRjMsCisgICAgMHhDQUY1LCAweENBRjYsIDB4Q0FGNywgMHhDQUY4LCAweENBRjksIDB4Q0FGQSwgMHhDQUZCLCAweENBRkMsCisgICAgMHhDQUZELCAweENBRkUsIDB4Q0FGRiwgMHhDQjAwLCAweENCMDEsIDB4Q0IwMiwgMHhDQjAzLCAweENCMDQsCisgICAgMHhDQjA1LCAweENCMDYsIDB4Q0IwNywgMHhDQjA5LCAweENCMEEsIDB4Q0IwQiwgMHhDQjBDLCAweENCMEQsCisgICAgMHhDQjBFLCAweENCMEYsIDB4Q0IxMSwgMHhDQjEyLCAweENCMTMsIDB4Q0IxNSwgMHhDQjE2LCAweENCMTcsCisgICAgMHhDQjE5LCAweENCMUEsIDB4Q0IxQiwgMHhDQjFDLCAweENCMUQsIDB4Q0IxRSwgMHhDQjFGLCAweENCMjIsCisgICAgMHhDQjIzLCAweENCMjQsIDB4Q0IyNSwgMHhDQjI2LCAweENCMjcsIDB4Q0IyOCwgMHhDQjI5LCAweENCMkEsCisgICAgMHhDQjJCLCAweENCMkMsIDB4Q0IyRCwgMHhDQjJFLCAweENCMkYsIDB4Q0IzMCwgMHhDQjMxLCAweENCMzIsCisgICAgMHhDQjMzLCAweENCMzQsIDB4Q0IzNSwgMHhDQjM2LCAweENCMzcsIDB4Q0IzOCwgMHhDQjM5LCAweENCM0EsCisgICAgMHhDQjNCLCAweENCM0MsIDB4Q0IzRCwgMHhDQjNFLCAweENCM0YsIDB4Q0I0MCwgMHhDQjQyLCAweENCNDMsCisgICAgMHhDQjQ0LCAweENCNDUsIDB4Q0I0NiwgMHhDQjQ3LCAweENCNEEsIDB4Q0I0QiwgMHhDQjRELCAweENCNEUsCisgICAgMHhDQjRGLCAweENCNTEsIDB4Q0I1MiwgMHhDQjUzLCAweENCNTQsIDB4Q0I1NSwgMHhDQjU2LCAweENCNTcsCisgICAgMHhDQjVBLCAweENCNUIsIDB4Q0I1QywgMHhDQjVFLCAweENCNUYsIDB4Q0I2MCwgMHhDQjYxLCAweENCNjIsCisgICAgMHhDQjYzLCAweENCNjUsIDB4Q0I2NiwgMHhDQjY3LCAweENCNjgsIDB4Q0I2OSwgMHhDQjZBLCAweENCNkIsCisgICAgMHhDQjZDLCAweENCNkQsIDB4Q0I2RSwgMHhDQjZGLCAweENCNzAsIDB4Q0I3MSwgMHhDQjcyLCAweENCNzMsCisgICAgMHhDQjc0LCAweENCNzUsIDB4Q0I3NiwgMHhDQjc3LCAweENCN0EsIDB4Q0I3QiwgMHhDQjdDLCAweENCN0QsCisgICAgMHhDQjdFLCAweENCN0YsIDB4Q0I4MCwgMHhDQjgxLCAweENCODIsIDB4Q0I4MywgMHhDQjg0LCAweENCODUsCisgICAgMHhDQjg2LCAweENCODcsIDB4Q0I4OCwgMHhDQjg5LCAweENCOEEsIDB4Q0I4QiwgMHhDQjhDLCAweENCOEQsCisgICAgMHhDQjhFLCAweENCOEYsIDB4Q0I5MCwgMHhDQjkxLCAweENCOTIsIDB4Q0I5MywgMHhDQjk0LCAweENCOTUsCisgICAgMHhDQjk2LCAweENCOTcsIDB4Q0I5OCwgMHhDQjk5LCAweENCOUEsIDB4Q0I5QiwgMHhDQjlELCAweENCOUUsCisgICAgMHhDQjlGLCAweENCQTAsIDB4Q0JBMSwgMHhDQkEyLCAweENCQTMsIDB4Q0JBNCwgMHhDQkE1LCAweENCQTYsCisgICAgMHhDQkE3LCAweENCQTgsIDB4Q0JBOSwgMHhDQkFBLCAweENCQUIsIDB4Q0JBQywgMHhDQkFELCAweENCQUUsCisgICAgMHhDQkFGLCAweENCQjAsIDB4Q0JCMSwgMHhDQkIyLCAweENCQjMsIDB4Q0JCNCwgMHhDQkI1LCAweENCQjYsCisgICAgMHhDQkI3LCAweENCQjksIDB4Q0JCQSwgMHhDQkJCLCAweENCQkMsIDB4Q0JCRCwgMHhDQkJFLCAweENCQkYsCisgICAgMHhDQkMwLCAweENCQzEsIDB4Q0JDMiwgMHhDQkMzLCAweENCQzQsIDB4Q0JDNSwgMHhDQkM2LCAweENCQzcsCisgICAgMHhDQkM4LCAweENCQzksIDB4Q0JDQSwgMHhDQkNCLCAweENCQ0MsIDB4Q0JDRCwgMHhDQkNFLCAweENCQ0YsCisgICAgMHhDQkQwLCAweENCRDEsIDB4Q0JEMiwgMHhDQkQzLCAweENCRDUsIDB4Q0JENiwgMHhDQkQ3LCAweENCRDgsCisgICAgMHhDQkQ5LCAweENCREEsIDB4Q0JEQiwgMHhDQkRDLCAweENCREQsIDB4Q0JERSwgMHhDQkRGLCAweENCRTAsCisgICAgMHhDQkUxLCAweENCRTIsIDB4Q0JFMywgMHhDQkU1LCAweENCRTYsIDB4Q0JFOCwgMHhDQkVBLCAweENCRUIsCisgICAgMHhDQkVDLCAweENCRUQsIDB4Q0JFRSwgMHhDQkVGLCAweENCRjAsIDB4Q0JGMSwgMHhDQkYyLCAweENCRjMsCisgICAgMHhDQkY0LCAweENCRjUsIDB4Q0JGNiwgMHhDQkY3LCAweENCRjgsIDB4Q0JGOSwgMHhDQkZBLCAweENCRkIsCisgICAgMHhDQkZDLCAweENCRkQsIDB4Q0JGRSwgMHhDQkZGLCAweENDMDAsIDB4Q0MwMSwgMHhDQzAyLCAweENDMDMsCisgICAgMHhDQzA0LCAweENDMDUsIDB4Q0MwNiwgMHhDQzA3LCAweENDMDgsIDB4Q0MwOSwgMHhDQzBBLCAweENDMEIsCisgICAgMHhDQzBFLCAweENDMEYsIDB4Q0MxMSwgMHhDQzEyLCAweENDMTMsIDB4Q0MxNSwgMHhDQzE2LCAweENDMTcsCisgICAgMHhDQzE4LCAweENDMTksIDB4Q0MxQSwgMHhDQzFCLCAweENDMUUsIDB4Q0MxRiwgMHhDQzIwLCAweENDMjMsCisgICAgMHhDQzI0LCAweENDMjUsIDB4Q0MyNiwgMHhDQzJBLCAweENDMkIsIDB4Q0MyRCwgMHhDQzJGLCAweENDMzEsCisgICAgMHhDQzMyLCAweENDMzMsIDB4Q0MzNCwgMHhDQzM1LCAweENDMzYsIDB4Q0MzNywgMHhDQzNBLCAweENDM0YsCisgICAgMHhDQzQwLCAweENDNDEsIDB4Q0M0MiwgMHhDQzQzLCAweENDNDYsIDB4Q0M0NywgMHhDQzQ5LCAweENDNEEsCisgICAgMHhDQzRCLCAweENDNEQsIDB4Q0M0RSwgMHhDQzRGLCAweENDNTAsIDB4Q0M1MSwgMHhDQzUyLCAweENDNTMsCisgICAgMHhDQzU2LCAweENDNUEsIDB4Q0M1QiwgMHhDQzVDLCAweENDNUQsIDB4Q0M1RSwgMHhDQzVGLCAweENDNjEsCisgICAgMHhDQzYyLCAweENDNjMsIDB4Q0M2NSwgMHhDQzY3LCAweENDNjksIDB4Q0M2QSwgMHhDQzZCLCAweENDNkMsCisgICAgMHhDQzZELCAweENDNkUsIDB4Q0M2RiwgMHhDQzcxLCAweENDNzIsIDB4Q0M3MywgMHhDQzc0LCAweENDNzYsCisgICAgMHhDQzc3LCAweENDNzgsIDB4Q0M3OSwgMHhDQzdBLCAweENDN0IsIDB4Q0M3QywgMHhDQzdELCAweENDN0UsCisgICAgMHhDQzdGLCAweENDODAsIDB4Q0M4MSwgMHhDQzgyLCAweENDODMsIDB4Q0M4NCwgMHhDQzg1LCAweENDODYsCisgICAgMHhDQzg3LCAweENDODgsIDB4Q0M4OSwgMHhDQzhBLCAweENDOEIsIDB4Q0M4QywgMHhDQzhELCAweENDOEUsCisgICAgMHhDQzhGLCAweENDOTAsIDB4Q0M5MSwgMHhDQzkyLCAweENDOTMsIDB4Q0M5NCwgMHhDQzk1LCAweENDOTYsCisgICAgMHhDQzk3LCAweENDOUEsIDB4Q0M5QiwgMHhDQzlELCAweENDOUUsIDB4Q0M5RiwgMHhDQ0ExLCAweENDQTIsCisgICAgMHhDQ0EzLCAweENDQTQsIDB4Q0NBNSwgMHhDQ0E2LCAweENDQTcsIDB4Q0NBQSwgMHhDQ0FFLCAweENDQUYsCisgICAgMHhDQ0IwLCAweENDQjEsIDB4Q0NCMiwgMHhDQ0IzLCAweENDQjYsIDB4Q0NCNywgMHhDQ0I5LCAweENDQkEsCisgICAgMHhDQ0JCLCAweENDQkQsIDB4Q0NCRSwgMHhDQ0JGLCAweENDQzAsIDB4Q0NDMSwgMHhDQ0MyLCAweENDQzMsCisgICAgMHhDQ0M2LCAweENDQzgsIDB4Q0NDQSwgMHhDQ0NCLCAweENDQ0MsIDB4Q0NDRCwgMHhDQ0NFLCAweENDQ0YsCisgICAgMHhDQ0QxLCAweENDRDIsIDB4Q0NEMywgMHhDQ0Q1LCAweENDRDYsIDB4Q0NENywgMHhDQ0Q4LCAweENDRDksCisgICAgMHhDQ0RBLCAweENDREIsIDB4Q0NEQywgMHhDQ0RELCAweENDREUsIDB4Q0NERiwgMHhDQ0UwLCAweENDRTEsCisgICAgMHhDQ0UyLCAweENDRTMsIDB4Q0NFNSwgMHhDQ0U2LCAweENDRTcsIDB4Q0NFOCwgMHhDQ0U5LCAweENDRUEsCisgICAgMHhDQ0VCLCAweENDRUQsIDB4Q0NFRSwgMHhDQ0VGLCAweENDRjEsIDB4Q0NGMiwgMHhDQ0YzLCAweENDRjQsCisgICAgMHhDQ0Y1LCAweENDRjYsIDB4Q0NGNywgMHhDQ0Y4LCAweENDRjksIDB4Q0NGQSwgMHhDQ0ZCLCAweENDRkMsCisgICAgMHhDQ0ZELCAweENDRkUsIDB4Q0NGRiwgMHhDRDAwLCAweENEMDIsIDB4Q0QwMywgMHhDRDA0LCAweENEMDUsCisgICAgMHhDRDA2LCAweENEMDcsIDB4Q0QwQSwgMHhDRDBCLCAweENEMEQsIDB4Q0QwRSwgMHhDRDBGLCAweENEMTEsCisgICAgMHhDRDEyLCAweENEMTMsIDB4Q0QxNCwgMHhDRDE1LCAweENEMTYsIDB4Q0QxNywgMHhDRDFBLCAweENEMUMsCisgICAgMHhDRDFFLCAweENEMUYsIDB4Q0QyMCwgMHhDRDIxLCAweENEMjIsIDB4Q0QyMywgMHhDRDI1LCAweENEMjYsCisgICAgMHhDRDI3LCAweENEMjksIDB4Q0QyQSwgMHhDRDJCLCAweENEMkQsIDB4Q0QyRSwgMHhDRDJGLCAweENEMzAsCisgICAgMHhDRDMxLCAweENEMzIsIDB4Q0QzMywgMHhDRDM0LCAweENEMzUsIDB4Q0QzNiwgMHhDRDM3LCAweENEMzgsCisgICAgMHhDRDNBLCAweENEM0IsIDB4Q0QzQywgMHhDRDNELCAweENEM0UsIDB4Q0QzRiwgMHhDRDQwLCAweENENDEsCisgICAgMHhDRDQyLCAweENENDMsIDB4Q0Q0NCwgMHhDRDQ1LCAweENENDYsIDB4Q0Q0NywgMHhDRDQ4LCAweENENDksCisgICAgMHhDRDRBLCAweENENEIsIDB4Q0Q0QywgMHhDRDRELCAweENENEUsIDB4Q0Q0RiwgMHhDRDUwLCAweENENTEsCisgICAgMHhDRDUyLCAweENENTMsIDB4Q0Q1NCwgMHhDRDU1LCAweENENTYsIDB4Q0Q1NywgMHhDRDU4LCAweENENTksCisgICAgMHhDRDVBLCAweENENUIsIDB4Q0Q1RCwgMHhDRDVFLCAweENENUYsIDB4Q0Q2MSwgMHhDRDYyLCAweENENjMsCisgICAgMHhDRDY1LCAweENENjYsIDB4Q0Q2NywgMHhDRDY4LCAweENENjksIDB4Q0Q2QSwgMHhDRDZCLCAweENENkUsCisgICAgMHhDRDcwLCAweENENzIsIDB4Q0Q3MywgMHhDRDc0LCAweENENzUsIDB4Q0Q3NiwgMHhDRDc3LCAweENENzksCisgICAgMHhDRDdBLCAweENEN0IsIDB4Q0Q3QywgMHhDRDdELCAweENEN0UsIDB4Q0Q3RiwgMHhDRDgwLCAweENEODEsCisgICAgMHhDRDgyLCAweENEODMsIDB4Q0Q4NCwgMHhDRDg1LCAweENEODYsIDB4Q0Q4NywgMHhDRDg5LCAweENEOEEsCisgICAgMHhDRDhCLCAweENEOEMsIDB4Q0Q4RCwgMHhDRDhFLCAweENEOEYsIDB4Q0Q5MCwgMHhDRDkxLCAweENEOTIsCisgICAgMHhDRDkzLCAweENEOTYsIDB4Q0Q5NywgMHhDRDk5LCAweENEOUEsIDB4Q0Q5QiwgMHhDRDlELCAweENEOUUsCisgICAgMHhDRDlGLCAweENEQTAsIDB4Q0RBMSwgMHhDREEyLCAweENEQTMsIDB4Q0RBNiwgMHhDREE4LCAweENEQUEsCisgICAgMHhDREFCLCAweENEQUMsIDB4Q0RBRCwgMHhDREFFLCAweENEQUYsIDB4Q0RCMSwgMHhDREIyLCAweENEQjMsCisgICAgMHhDREI0LCAweENEQjUsIDB4Q0RCNiwgMHhDREI3LCAweENEQjgsIDB4Q0RCOSwgMHhDREJBLCAweENEQkIsCisgICAgMHhDREJDLCAweENEQkQsIDB4Q0RCRSwgMHhDREJGLCAweENEQzAsIDB4Q0RDMSwgMHhDREMyLCAweENEQzMsCisgICAgMHhDREM1LCAweENEQzYsIDB4Q0RDNywgMHhDREM4LCAweENEQzksIDB4Q0RDQSwgMHhDRENCLCAweENEQ0QsCisgICAgMHhDRENFLCAweENEQ0YsIDB4Q0REMSwgMHhDREQyLCAweENERDMsIDB4Q0RENCwgMHhDREQ1LCAweENERDYsCisgICAgMHhDREQ3LCAweENERDgsIDB4Q0REOSwgMHhDRERBLCAweENEREIsIDB4Q0REQywgMHhDRERELCAweENEREUsCisgICAgMHhDRERGLCAweENERTAsIDB4Q0RFMSwgMHhDREUyLCAweENERTMsIDB4Q0RFNCwgMHhDREU1LCAweENERTYsCisgICAgMHhDREU3LCAweENERTksIDB4Q0RFQSwgMHhDREVCLCAweENERUQsIDB4Q0RFRSwgMHhDREVGLCAweENERjEsCisgICAgMHhDREYyLCAweENERjMsIDB4Q0RGNCwgMHhDREY1LCAweENERjYsIDB4Q0RGNywgMHhDREZBLCAweENERkMsCisgICAgMHhDREZFLCAweENERkYsIDB4Q0UwMCwgMHhDRTAxLCAweENFMDIsIDB4Q0UwMywgMHhDRTA1LCAweENFMDYsCisgICAgMHhDRTA3LCAweENFMDksIDB4Q0UwQSwgMHhDRTBCLCAweENFMEQsIDB4Q0UwRSwgMHhDRTBGLCAweENFMTAsCisgICAgMHhDRTExLCAweENFMTIsIDB4Q0UxMywgMHhDRTE1LCAweENFMTYsIDB4Q0UxNywgMHhDRTE4LCAweENFMUEsCisgICAgMHhDRTFCLCAweENFMUMsIDB4Q0UxRCwgMHhDRTFFLCAweENFMUYsIDB4Q0UyMiwgMHhDRTIzLCAweENFMjUsCisgICAgMHhDRTI2LCAweENFMjcsIDB4Q0UyOSwgMHhDRTJBLCAweENFMkIsIDB4Q0UyQywgMHhDRTJELCAweENFMkUsCisgICAgMHhDRTJGLCAweENFMzIsIDB4Q0UzNCwgMHhDRTM2LCAweENFMzcsIDB4Q0UzOCwgMHhDRTM5LCAweENFM0EsCisgICAgMHhDRTNCLCAweENFM0MsIDB4Q0UzRCwgMHhDRTNFLCAweENFM0YsIDB4Q0U0MCwgMHhDRTQxLCAweENFNDIsCisgICAgMHhDRTQzLCAweENFNDQsIDB4Q0U0NSwgMHhDRTQ2LCAweENFNDcsIDB4Q0U0OCwgMHhDRTQ5LCAweENFNEEsCisgICAgMHhDRTRCLCAweENFNEMsIDB4Q0U0RCwgMHhDRTRFLCAweENFNEYsIDB4Q0U1MCwgMHhDRTUxLCAweENFNTIsCisgICAgMHhDRTUzLCAweENFNTQsIDB4Q0U1NSwgMHhDRTU2LCAweENFNTcsIDB4Q0U1QSwgMHhDRTVCLCAweENFNUQsCisgICAgMHhDRTVFLCAweENFNjIsIDB4Q0U2MywgMHhDRTY0LCAweENFNjUsIDB4Q0U2NiwgMHhDRTY3LCAweENFNkEsCisgICAgMHhDRTZDLCAweENFNkUsIDB4Q0U2RiwgMHhDRTcwLCAweENFNzEsIDB4Q0U3MiwgMHhDRTczLCAweENFNzYsCisgICAgMHhDRTc3LCAweENFNzksIDB4Q0U3QSwgMHhDRTdCLCAweENFN0QsIDB4Q0U3RSwgMHhDRTdGLCAweENFODAsCisgICAgMHhDRTgxLCAweENFODIsIDB4Q0U4MywgMHhDRTg2LCAweENFODgsIDB4Q0U4QSwgMHhDRThCLCAweENFOEMsCisgICAgMHhDRThELCAweENFOEUsIDB4Q0U4RiwgMHhDRTkyLCAweENFOTMsIDB4Q0U5NSwgMHhDRTk2LCAweENFOTcsCisgICAgMHhDRTk5LCAweENFOUEsIDB4Q0U5QiwgMHhDRTlDLCAweENFOUQsIDB4Q0U5RSwgMHhDRTlGLCAweENFQTIsCisgICAgMHhDRUE2LCAweENFQTcsIDB4Q0VBOCwgMHhDRUE5LCAweENFQUEsIDB4Q0VBQiwgMHhDRUFFLCAweENFQUYsCisgICAgMHhDRUIwLCAweENFQjEsIDB4Q0VCMiwgMHhDRUIzLCAweENFQjQsIDB4Q0VCNSwgMHhDRUI2LCAweENFQjcsCisgICAgMHhDRUI4LCAweENFQjksIDB4Q0VCQSwgMHhDRUJCLCAweENFQkMsIDB4Q0VCRCwgMHhDRUJFLCAweENFQkYsCisgICAgMHhDRUMwLCAweENFQzIsIDB4Q0VDMywgMHhDRUM0LCAweENFQzUsIDB4Q0VDNiwgMHhDRUM3LCAweENFQzgsCisgICAgMHhDRUM5LCAweENFQ0EsIDB4Q0VDQiwgMHhDRUNDLCAweENFQ0QsIDB4Q0VDRSwgMHhDRUNGLCAweENFRDAsCisgICAgMHhDRUQxLCAweENFRDIsIDB4Q0VEMywgMHhDRUQ0LCAweENFRDUsIDB4Q0VENiwgMHhDRUQ3LCAweENFRDgsCisgICAgMHhDRUQ5LCAweENFREEsIDB4Q0VEQiwgMHhDRURDLCAweENFREQsIDB4Q0VERSwgMHhDRURGLCAweENFRTAsCisgICAgMHhDRUUxLCAweENFRTIsIDB4Q0VFMywgMHhDRUU2LCAweENFRTcsIDB4Q0VFOSwgMHhDRUVBLCAweENFRUQsCisgICAgMHhDRUVFLCAweENFRUYsIDB4Q0VGMCwgMHhDRUYxLCAweENFRjIsIDB4Q0VGMywgMHhDRUY2LCAweENFRkEsCisgICAgMHhDRUZCLCAweENFRkMsIDB4Q0VGRCwgMHhDRUZFLCAweENFRkYsIDB4Q0YwMiwgMHhDRjAzLCAweENGMDUsCisgICAgMHhDRjA2LCAweENGMDcsIDB4Q0YwOSwgMHhDRjBBLCAweENGMEIsIDB4Q0YwQywgMHhDRjBELCAweENGMEUsCisgICAgMHhDRjBGLCAweENGMTIsIDB4Q0YxNCwgMHhDRjE2LCAweENGMTcsIDB4Q0YxOCwgMHhDRjE5LCAweENGMUEsCisgICAgMHhDRjFCLCAweENGMUQsIDB4Q0YxRSwgMHhDRjFGLCAweENGMjEsIDB4Q0YyMiwgMHhDRjIzLCAweENGMjUsCisgICAgMHhDRjI2LCAweENGMjcsIDB4Q0YyOCwgMHhDRjI5LCAweENGMkEsIDB4Q0YyQiwgMHhDRjJFLCAweENGMzIsCisgICAgMHhDRjMzLCAweENGMzQsIDB4Q0YzNSwgMHhDRjM2LCAweENGMzcsIDB4Q0YzOSwgMHhDRjNBLCAweENGM0IsCisgICAgMHhDRjNDLCAweENGM0QsIDB4Q0YzRSwgMHhDRjNGLCAweENGNDAsIDB4Q0Y0MSwgMHhDRjQyLCAweENGNDMsCisgICAgMHhDRjQ0LCAweENGNDUsIDB4Q0Y0NiwgMHhDRjQ3LCAweENGNDgsIDB4Q0Y0OSwgMHhDRjRBLCAweENGNEIsCisgICAgMHhDRjRDLCAweENGNEQsIDB4Q0Y0RSwgMHhDRjRGLCAweENGNTAsIDB4Q0Y1MSwgMHhDRjUyLCAweENGNTMsCisgICAgMHhDRjU2LCAweENGNTcsIDB4Q0Y1OSwgMHhDRjVBLCAweENGNUIsIDB4Q0Y1RCwgMHhDRjVFLCAweENGNUYsCisgICAgMHhDRjYwLCAweENGNjEsIDB4Q0Y2MiwgMHhDRjYzLCAweENGNjYsIDB4Q0Y2OCwgMHhDRjZBLCAweENGNkIsCisgICAgMHhDRjZDLCAweENGNkQsIDB4Q0Y2RSwgMHhDRjZGLCAweENGNzIsIDB4Q0Y3MywgMHhDRjc1LCAweENGNzYsCisgICAgMHhDRjc3LCAweENGNzksIDB4Q0Y3QSwgMHhDRjdCLCAweENGN0MsIDB4Q0Y3RCwgMHhDRjdFLCAweENGN0YsCisgICAgMHhDRjgxLCAweENGODIsIDB4Q0Y4MywgMHhDRjg0LCAweENGODYsIDB4Q0Y4NywgMHhDRjg4LCAweENGODksCisgICAgMHhDRjhBLCAweENGOEIsIDB4Q0Y4RCwgMHhDRjhFLCAweENGOEYsIDB4Q0Y5MCwgMHhDRjkxLCAweENGOTIsCisgICAgMHhDRjkzLCAweENGOTQsIDB4Q0Y5NSwgMHhDRjk2LCAweENGOTcsIDB4Q0Y5OCwgMHhDRjk5LCAweENGOUEsCisgICAgMHhDRjlCLCAweENGOUMsIDB4Q0Y5RCwgMHhDRjlFLCAweENGOUYsIDB4Q0ZBMCwgMHhDRkEyLCAweENGQTMsCisgICAgMHhDRkE0LCAweENGQTUsIDB4Q0ZBNiwgMHhDRkE3LCAweENGQTksIDB4Q0ZBQSwgMHhDRkFCLCAweENGQUMsCisgICAgMHhDRkFELCAweENGQUUsIDB4Q0ZBRiwgMHhDRkIxLCAweENGQjIsIDB4Q0ZCMywgMHhDRkI0LCAweENGQjUsCisgICAgMHhDRkI2LCAweENGQjcsIDB4Q0ZCOCwgMHhDRkI5LCAweENGQkEsIDB4Q0ZCQiwgMHhDRkJDLCAweENGQkQsCisgICAgMHhDRkJFLCAweENGQkYsIDB4Q0ZDMCwgMHhDRkMxLCAweENGQzIsIDB4Q0ZDMywgMHhDRkM1LCAweENGQzYsCisgICAgMHhDRkM3LCAweENGQzgsIDB4Q0ZDOSwgMHhDRkNBLCAweENGQ0IsIDB4Q0ZDQywgMHhDRkNELCAweENGQ0UsCisgICAgMHhDRkNGLCAweENGRDAsIDB4Q0ZEMSwgMHhDRkQyLCAweENGRDMsIDB4Q0ZENCwgMHhDRkQ1LCAweENGRDYsCisgICAgMHhDRkQ3LCAweENGRDgsIDB4Q0ZEOSwgMHhDRkRBLCAweENGREIsIDB4Q0ZEQywgMHhDRkRELCAweENGREUsCisgICAgMHhDRkRGLCAweENGRTIsIDB4Q0ZFMywgMHhDRkU1LCAweENGRTYsIDB4Q0ZFNywgMHhDRkU5LCAweENGRUEsCisgICAgMHhDRkVCLCAweENGRUMsIDB4Q0ZFRCwgMHhDRkVFLCAweENGRUYsIDB4Q0ZGMiwgMHhDRkY0LCAweENGRjYsCisgICAgMHhDRkY3LCAweENGRjgsIDB4Q0ZGOSwgMHhDRkZBLCAweENGRkIsIDB4Q0ZGRCwgMHhDRkZFLCAweENGRkYsCisgICAgMHhEMDAxLCAweEQwMDIsIDB4RDAwMywgMHhEMDA1LCAweEQwMDYsIDB4RDAwNywgMHhEMDA4LCAweEQwMDksCisgICAgMHhEMDBBLCAweEQwMEIsIDB4RDAwQywgMHhEMDBELCAweEQwMEUsIDB4RDAwRiwgMHhEMDEwLCAweEQwMTIsCisgICAgMHhEMDEzLCAweEQwMTQsIDB4RDAxNSwgMHhEMDE2LCAweEQwMTcsIDB4RDAxOSwgMHhEMDFBLCAweEQwMUIsCisgICAgMHhEMDFDLCAweEQwMUQsIDB4RDAxRSwgMHhEMDFGLCAweEQwMjAsIDB4RDAyMSwgMHhEMDIyLCAweEQwMjMsCisgICAgMHhEMDI0LCAweEQwMjUsIDB4RDAyNiwgMHhEMDI3LCAweEQwMjgsIDB4RDAyOSwgMHhEMDJBLCAweEQwMkIsCisgICAgMHhEMDJDLCAweEQwMkUsIDB4RDAyRiwgMHhEMDMwLCAweEQwMzEsIDB4RDAzMiwgMHhEMDMzLCAweEQwMzYsCisgICAgMHhEMDM3LCAweEQwMzksIDB4RDAzQSwgMHhEMDNCLCAweEQwM0QsIDB4RDAzRSwgMHhEMDNGLCAweEQwNDAsCisgICAgMHhEMDQxLCAweEQwNDIsIDB4RDA0MywgMHhEMDQ2LCAweEQwNDgsIDB4RDA0QSwgMHhEMDRCLCAweEQwNEMsCisgICAgMHhEMDRELCAweEQwNEUsIDB4RDA0RiwgMHhEMDUxLCAweEQwNTIsIDB4RDA1MywgMHhEMDU1LCAweEQwNTYsCisgICAgMHhEMDU3LCAweEQwNTksIDB4RDA1QSwgMHhEMDVCLCAweEQwNUMsIDB4RDA1RCwgMHhEMDVFLCAweEQwNUYsCisgICAgMHhEMDYxLCAweEQwNjIsIDB4RDA2MywgMHhEMDY0LCAweEQwNjUsIDB4RDA2NiwgMHhEMDY3LCAweEQwNjgsCisgICAgMHhEMDY5LCAweEQwNkEsIDB4RDA2QiwgMHhEMDZFLCAweEQwNkYsIDB4RDA3MSwgMHhEMDcyLCAweEQwNzMsCisgICAgMHhEMDc1LCAweEQwNzYsIDB4RDA3NywgMHhEMDc4LCAweEQwNzksIDB4RDA3QSwgMHhEMDdCLCAweEQwN0UsCisgICAgMHhEMDdGLCAweEQwODAsIDB4RDA4MiwgMHhEMDgzLCAweEQwODQsIDB4RDA4NSwgMHhEMDg2LCAweEQwODcsCisgICAgMHhEMDg4LCAweEQwODksIDB4RDA4QSwgMHhEMDhCLCAweEQwOEMsIDB4RDA4RCwgMHhEMDhFLCAweEQwOEYsCisgICAgMHhEMDkwLCAweEQwOTEsIDB4RDA5MiwgMHhEMDkzLCAweEQwOTQsIDB4RDA5NSwgMHhEMDk2LCAweEQwOTcsCisgICAgMHhEMDk4LCAweEQwOTksIDB4RDA5QSwgMHhEMDlCLCAweEQwOUMsIDB4RDA5RCwgMHhEMDlFLCAweEQwOUYsCisgICAgMHhEMEEwLCAweEQwQTEsIDB4RDBBMiwgMHhEMEEzLCAweEQwQTYsIDB4RDBBNywgMHhEMEE5LCAweEQwQUEsCisgICAgMHhEMEFCLCAweEQwQUQsIDB4RDBBRSwgMHhEMEFGLCAweEQwQjAsIDB4RDBCMSwgMHhEMEIyLCAweEQwQjMsCisgICAgMHhEMEI2LCAweEQwQjgsIDB4RDBCQSwgMHhEMEJCLCAweEQwQkMsIDB4RDBCRCwgMHhEMEJFLCAweEQwQkYsCisgICAgMHhEMEMyLCAweEQwQzMsIDB4RDBDNSwgMHhEMEM2LCAweEQwQzcsIDB4RDBDQSwgMHhEMENCLCAweEQwQ0MsCisgICAgMHhEMENELCAweEQwQ0UsIDB4RDBDRiwgMHhEMEQyLCAweEQwRDYsIDB4RDBENywgMHhEMEQ4LCAweEQwRDksCisgICAgMHhEMERBLCAweEQwREIsIDB4RDBERSwgMHhEMERGLCAweEQwRTEsIDB4RDBFMiwgMHhEMEUzLCAweEQwRTUsCisgICAgMHhEMEU2LCAweEQwRTcsIDB4RDBFOCwgMHhEMEU5LCAweEQwRUEsIDB4RDBFQiwgMHhEMEVFLCAweEQwRjIsCisgICAgMHhEMEYzLCAweEQwRjQsIDB4RDBGNSwgMHhEMEY2LCAweEQwRjcsIDB4RDBGOSwgMHhEMEZBLCAweEQwRkIsCisgICAgMHhEMEZDLCAweEQwRkQsIDB4RDBGRSwgMHhEMEZGLCAweEQxMDAsIDB4RDEwMSwgMHhEMTAyLCAweEQxMDMsCisgICAgMHhEMTA0LCAweEQxMDUsIDB4RDEwNiwgMHhEMTA3LCAweEQxMDgsIDB4RDEwOSwgMHhEMTBBLCAweEQxMEIsCisgICAgMHhEMTBDLCAweEQxMEUsIDB4RDEwRiwgMHhEMTEwLCAweEQxMTEsIDB4RDExMiwgMHhEMTEzLCAweEQxMTQsCisgICAgMHhEMTE1LCAweEQxMTYsIDB4RDExNywgMHhEMTE4LCAweEQxMTksIDB4RDExQSwgMHhEMTFCLCAweEQxMUMsCisgICAgMHhEMTFELCAweEQxMUUsIDB4RDExRiwgMHhEMTIwLCAweEQxMjEsIDB4RDEyMiwgMHhEMTIzLCAweEQxMjQsCisgICAgMHhEMTI1LCAweEQxMjYsIDB4RDEyNywgMHhEMTI4LCAweEQxMjksIDB4RDEyQSwgMHhEMTJCLCAweEQxMkMsCisgICAgMHhEMTJELCAweEQxMkUsIDB4RDEyRiwgMHhEMTMyLCAweEQxMzMsIDB4RDEzNSwgMHhEMTM2LCAweEQxMzcsCisgICAgMHhEMTM5LCAweEQxM0IsIDB4RDEzQywgMHhEMTNELCAweEQxM0UsIDB4RDEzRiwgMHhEMTQyLCAweEQxNDYsCisgICAgMHhEMTQ3LCAweEQxNDgsIDB4RDE0OSwgMHhEMTRBLCAweEQxNEIsIDB4RDE0RSwgMHhEMTRGLCAweEQxNTEsCisgICAgMHhEMTUyLCAweEQxNTMsIDB4RDE1NSwgMHhEMTU2LCAweEQxNTcsIDB4RDE1OCwgMHhEMTU5LCAweEQxNUEsCisgICAgMHhEMTVCLCAweEQxNUUsIDB4RDE2MCwgMHhEMTYyLCAweEQxNjMsIDB4RDE2NCwgMHhEMTY1LCAweEQxNjYsCisgICAgMHhEMTY3LCAweEQxNjksIDB4RDE2QSwgMHhEMTZCLCAweEQxNkQsIDB4RDE2RSwgMHhEMTZGLCAweEQxNzAsCisgICAgMHhEMTcxLCAweEQxNzIsIDB4RDE3MywgMHhEMTc0LCAweEQxNzUsIDB4RDE3NiwgMHhEMTc3LCAweEQxNzgsCisgICAgMHhEMTc5LCAweEQxN0EsIDB4RDE3QiwgMHhEMTdELCAweEQxN0UsIDB4RDE3RiwgMHhEMTgwLCAweEQxODEsCisgICAgMHhEMTgyLCAweEQxODMsIDB4RDE4NSwgMHhEMTg2LCAweEQxODcsIDB4RDE4OSwgMHhEMThBLCAweEQxOEIsCisgICAgMHhEMThDLCAweEQxOEQsIDB4RDE4RSwgMHhEMThGLCAweEQxOTAsIDB4RDE5MSwgMHhEMTkyLCAweEQxOTMsCisgICAgMHhEMTk0LCAweEQxOTUsIDB4RDE5NiwgMHhEMTk3LCAweEQxOTgsIDB4RDE5OSwgMHhEMTlBLCAweEQxOUIsCisgICAgMHhEMTlDLCAweEQxOUQsIDB4RDE5RSwgMHhEMTlGLCAweEQxQTIsIDB4RDFBMywgMHhEMUE1LCAweEQxQTYsCisgICAgMHhEMUE3LCAweEQxQTksIDB4RDFBQSwgMHhEMUFCLCAweEQxQUMsIDB4RDFBRCwgMHhEMUFFLCAweEQxQUYsCisgICAgMHhEMUIyLCAweEQxQjQsIDB4RDFCNiwgMHhEMUI3LCAweEQxQjgsIDB4RDFCOSwgMHhEMUJCLCAweEQxQkQsCisgICAgMHhEMUJFLCAweEQxQkYsIDB4RDFDMSwgMHhEMUMyLCAweEQxQzMsIDB4RDFDNCwgMHhEMUM1LCAweEQxQzYsCisgICAgMHhEMUM3LCAweEQxQzgsIDB4RDFDOSwgMHhEMUNBLCAweEQxQ0IsIDB4RDFDQywgMHhEMUNELCAweEQxQ0UsCisgICAgMHhEMUNGLCAweEQxRDAsIDB4RDFEMSwgMHhEMUQyLCAweEQxRDMsIDB4RDFENCwgMHhEMUQ1LCAweEQxRDYsCisgICAgMHhEMUQ3LCAweEQxRDksIDB4RDFEQSwgMHhEMURCLCAweEQxREMsIDB4RDFERCwgMHhEMURFLCAweEQxREYsCisgICAgMHhEMUUwLCAweEQxRTEsIDB4RDFFMiwgMHhEMUUzLCAweEQxRTQsIDB4RDFFNSwgMHhEMUU2LCAweEQxRTcsCisgICAgMHhEMUU4LCAweEQxRTksIDB4RDFFQSwgMHhEMUVCLCAweEQxRUMsIDB4RDFFRCwgMHhEMUVFLCAweEQxRUYsCisgICAgMHhEMUYwLCAweEQxRjEsIDB4RDFGMiwgMHhEMUYzLCAweEQxRjUsIDB4RDFGNiwgMHhEMUY3LCAweEQxRjksCisgICAgMHhEMUZBLCAweEQxRkIsIDB4RDFGQywgMHhEMUZELCAweEQxRkUsIDB4RDFGRiwgMHhEMjAwLCAweEQyMDEsCisgICAgMHhEMjAyLCAweEQyMDMsIDB4RDIwNCwgMHhEMjA1LCAweEQyMDYsIDB4RDIwOCwgMHhEMjBBLCAweEQyMEIsCisgICAgMHhEMjBDLCAweEQyMEQsIDB4RDIwRSwgMHhEMjBGLCAweEQyMTEsIDB4RDIxMiwgMHhEMjEzLCAweEQyMTQsCisgICAgMHhEMjE1LCAweEQyMTYsIDB4RDIxNywgMHhEMjE4LCAweEQyMTksIDB4RDIxQSwgMHhEMjFCLCAweEQyMUMsCisgICAgMHhEMjFELCAweEQyMUUsIDB4RDIxRiwgMHhEMjIwLCAweEQyMjEsIDB4RDIyMiwgMHhEMjIzLCAweEQyMjQsCisgICAgMHhEMjI1LCAweEQyMjYsIDB4RDIyNywgMHhEMjI4LCAweEQyMjksIDB4RDIyQSwgMHhEMjJCLCAweEQyMkUsCisgICAgMHhEMjJGLCAweEQyMzEsIDB4RDIzMiwgMHhEMjMzLCAweEQyMzUsIDB4RDIzNiwgMHhEMjM3LCAweEQyMzgsCisgICAgMHhEMjM5LCAweEQyM0EsIDB4RDIzQiwgMHhEMjNFLCAweEQyNDAsIDB4RDI0MiwgMHhEMjQzLCAweEQyNDQsCisgICAgMHhEMjQ1LCAweEQyNDYsIDB4RDI0NywgMHhEMjQ5LCAweEQyNEEsIDB4RDI0QiwgMHhEMjRDLCAweEQyNEQsCisgICAgMHhEMjRFLCAweEQyNEYsIDB4RDI1MCwgMHhEMjUxLCAweEQyNTIsIDB4RDI1MywgMHhEMjU0LCAweEQyNTUsCisgICAgMHhEMjU2LCAweEQyNTcsIDB4RDI1OCwgMHhEMjU5LCAweEQyNUEsIDB4RDI1QiwgMHhEMjVELCAweEQyNUUsCisgICAgMHhEMjVGLCAweEQyNjAsIDB4RDI2MSwgMHhEMjYyLCAweEQyNjMsIDB4RDI2NSwgMHhEMjY2LCAweEQyNjcsCisgICAgMHhEMjY4LCAweEQyNjksIDB4RDI2QSwgMHhEMjZCLCAweEQyNkMsIDB4RDI2RCwgMHhEMjZFLCAweEQyNkYsCisgICAgMHhEMjcwLCAweEQyNzEsIDB4RDI3MiwgMHhEMjczLCAweEQyNzQsIDB4RDI3NSwgMHhEMjc2LCAweEQyNzcsCisgICAgMHhEMjc4LCAweEQyNzksIDB4RDI3QSwgMHhEMjdCLCAweEQyN0MsIDB4RDI3RCwgMHhEMjdFLCAweEQyN0YsCisgICAgMHhEMjgyLCAweEQyODMsIDB4RDI4NSwgMHhEMjg2LCAweEQyODcsIDB4RDI4OSwgMHhEMjhBLCAweEQyOEIsCisgICAgMHhEMjhDLCAweEQyOEQsIDB4RDI4RSwgMHhEMjhGLCAweEQyOTIsIDB4RDI5MywgMHhEMjk0LCAweEQyOTYsCisgICAgMHhEMjk3LCAweEQyOTgsIDB4RDI5OSwgMHhEMjlBLCAweEQyOUIsIDB4RDI5RCwgMHhEMjlFLCAweEQyOUYsCisgICAgMHhEMkExLCAweEQyQTIsIDB4RDJBMywgMHhEMkE1LCAweEQyQTYsIDB4RDJBNywgMHhEMkE4LCAweEQyQTksCisgICAgMHhEMkFBLCAweEQyQUIsIDB4RDJBRCwgMHhEMkFFLCAweEQyQUYsIDB4RDJCMCwgMHhEMkIyLCAweEQyQjMsCisgICAgMHhEMkI0LCAweEQyQjUsIDB4RDJCNiwgMHhEMkI3LCAweEQyQkEsIDB4RDJCQiwgMHhEMkJELCAweEQyQkUsCisgICAgMHhEMkMxLCAweEQyQzMsIDB4RDJDNCwgMHhEMkM1LCAweEQyQzYsIDB4RDJDNywgMHhEMkNBLCAweEQyQ0MsCisgICAgMHhEMkNELCAweEQyQ0UsIDB4RDJDRiwgMHhEMkQwLCAweEQyRDEsIDB4RDJEMiwgMHhEMkQzLCAweEQyRDUsCisgICAgMHhEMkQ2LCAweEQyRDcsIDB4RDJEOSwgMHhEMkRBLCAweEQyREIsIDB4RDJERCwgMHhEMkRFLCAweEQyREYsCisgICAgMHhEMkUwLCAweEQyRTEsIDB4RDJFMiwgMHhEMkUzLCAweEQyRTYsIDB4RDJFNywgMHhEMkU4LCAweEQyRTksCisgICAgMHhEMkVBLCAweEQyRUIsIDB4RDJFQywgMHhEMkVELCAweEQyRUUsIDB4RDJFRiwgMHhEMkYyLCAweEQyRjMsCisgICAgMHhEMkY1LCAweEQyRjYsIDB4RDJGNywgMHhEMkY5LCAweEQyRkEsIDB4RDJGQiwgMHhEMkZDLCAweEQyRkQsCisgICAgMHhEMkZFLCAweEQyRkYsIDB4RDMwMiwgMHhEMzA0LCAweEQzMDYsIDB4RDMwNywgMHhEMzA4LCAweEQzMDksCisgICAgMHhEMzBBLCAweEQzMEIsIDB4RDMwRiwgMHhEMzExLCAweEQzMTIsIDB4RDMxMywgMHhEMzE1LCAweEQzMTcsCisgICAgMHhEMzE4LCAweEQzMTksIDB4RDMxQSwgMHhEMzFCLCAweEQzMUUsIDB4RDMyMiwgMHhEMzIzLCAweEQzMjQsCisgICAgMHhEMzI2LCAweEQzMjcsIDB4RDMyQSwgMHhEMzJCLCAweEQzMkQsIDB4RDMyRSwgMHhEMzJGLCAweEQzMzEsCisgICAgMHhEMzMyLCAweEQzMzMsIDB4RDMzNCwgMHhEMzM1LCAweEQzMzYsIDB4RDMzNywgMHhEMzNBLCAweEQzM0UsCisgICAgMHhEMzNGLCAweEQzNDAsIDB4RDM0MSwgMHhEMzQyLCAweEQzNDMsIDB4RDM0NiwgMHhEMzQ3LCAweEQzNDgsCisgICAgMHhEMzQ5LCAweEQzNEEsIDB4RDM0QiwgMHhEMzRDLCAweEQzNEQsIDB4RDM0RSwgMHhEMzRGLCAweEQzNTAsCisgICAgMHhEMzUxLCAweEQzNTIsIDB4RDM1MywgMHhEMzU0LCAweEQzNTUsIDB4RDM1NiwgMHhEMzU3LCAweEQzNTgsCisgICAgMHhEMzU5LCAweEQzNUEsIDB4RDM1QiwgMHhEMzVDLCAweEQzNUQsIDB4RDM1RSwgMHhEMzVGLCAweEQzNjAsCisgICAgMHhEMzYxLCAweEQzNjIsIDB4RDM2MywgMHhEMzY0LCAweEQzNjUsIDB4RDM2NiwgMHhEMzY3LCAweEQzNjgsCisgICAgMHhEMzY5LCAweEQzNkEsIDB4RDM2QiwgMHhEMzZDLCAweEQzNkQsIDB4RDM2RSwgMHhEMzZGLCAweEQzNzAsCisgICAgMHhEMzcxLCAweEQzNzIsIDB4RDM3MywgMHhEMzc0LCAweEQzNzUsIDB4RDM3NiwgMHhEMzc3LCAweEQzNzgsCisgICAgMHhEMzc5LCAweEQzN0EsIDB4RDM3QiwgMHhEMzdFLCAweEQzN0YsIDB4RDM4MSwgMHhEMzgyLCAweEQzODMsCisgICAgMHhEMzg1LCAweEQzODYsIDB4RDM4NywgMHhEMzg4LCAweEQzODksIDB4RDM4QSwgMHhEMzhCLCAweEQzOEUsCisgICAgMHhEMzkyLCAweEQzOTMsIDB4RDM5NCwgMHhEMzk1LCAweEQzOTYsIDB4RDM5NywgMHhEMzlBLCAweEQzOUIsCisgICAgMHhEMzlELCAweEQzOUUsIDB4RDM5RiwgMHhEM0ExLCAweEQzQTIsIDB4RDNBMywgMHhEM0E0LCAweEQzQTUsCisgICAgMHhEM0E2LCAweEQzQTcsIDB4RDNBQSwgMHhEM0FDLCAweEQzQUUsIDB4RDNBRiwgMHhEM0IwLCAweEQzQjEsCisgICAgMHhEM0IyLCAweEQzQjMsIDB4RDNCNSwgMHhEM0I2LCAweEQzQjcsIDB4RDNCOSwgMHhEM0JBLCAweEQzQkIsCisgICAgMHhEM0JELCAweEQzQkUsIDB4RDNCRiwgMHhEM0MwLCAweEQzQzEsIDB4RDNDMiwgMHhEM0MzLCAweEQzQzYsCisgICAgMHhEM0M3LCAweEQzQ0EsIDB4RDNDQiwgMHhEM0NDLCAweEQzQ0QsIDB4RDNDRSwgMHhEM0NGLCAweEQzRDEsCisgICAgMHhEM0QyLCAweEQzRDMsIDB4RDNENCwgMHhEM0Q1LCAweEQzRDYsIDB4RDNENywgMHhEM0Q5LCAweEQzREEsCisgICAgMHhEM0RCLCAweEQzREMsIDB4RDNERCwgMHhEM0RFLCAweEQzREYsIDB4RDNFMCwgMHhEM0UyLCAweEQzRTQsCisgICAgMHhEM0U1LCAweEQzRTYsIDB4RDNFNywgMHhEM0U4LCAweEQzRTksIDB4RDNFQSwgMHhEM0VCLCAweEQzRUUsCisgICAgMHhEM0VGLCAweEQzRjEsIDB4RDNGMiwgMHhEM0YzLCAweEQzRjUsIDB4RDNGNiwgMHhEM0Y3LCAweEQzRjgsCisgICAgMHhEM0Y5LCAweEQzRkEsIDB4RDNGQiwgMHhEM0ZFLCAweEQ0MDAsIDB4RDQwMiwgMHhENDAzLCAweEQ0MDQsCisgICAgMHhENDA1LCAweEQ0MDYsIDB4RDQwNywgMHhENDA5LCAweEQ0MEEsIDB4RDQwQiwgMHhENDBDLCAweEQ0MEQsCisgICAgMHhENDBFLCAweEQ0MEYsIDB4RDQxMCwgMHhENDExLCAweEQ0MTIsIDB4RDQxMywgMHhENDE0LCAweEQ0MTUsCisgICAgMHhENDE2LCAweEQ0MTcsIDB4RDQxOCwgMHhENDE5LCAweEQ0MUEsIDB4RDQxQiwgMHhENDFDLCAweEQ0MUUsCisgICAgMHhENDFGLCAweEQ0MjAsIDB4RDQyMSwgMHhENDIyLCAweEQ0MjMsIDB4RDQyNCwgMHhENDI1LCAweEQ0MjYsCisgICAgMHhENDI3LCAweEQ0MjgsIDB4RDQyOSwgMHhENDJBLCAweEQ0MkIsIDB4RDQyQywgMHhENDJELCAweEQ0MkUsCisgICAgMHhENDJGLCAweEQ0MzAsIDB4RDQzMSwgMHhENDMyLCAweEQ0MzMsIDB4RDQzNCwgMHhENDM1LCAweEQ0MzYsCisgICAgMHhENDM3LCAweEQ0MzgsIDB4RDQzOSwgMHhENDNBLCAweEQ0M0IsIDB4RDQzQywgMHhENDNELCAweEQ0M0UsCisgICAgMHhENDNGLCAweEQ0NDEsIDB4RDQ0MiwgMHhENDQzLCAweEQ0NDUsIDB4RDQ0NiwgMHhENDQ3LCAweEQ0NDgsCisgICAgMHhENDQ5LCAweEQ0NEEsIDB4RDQ0QiwgMHhENDRDLCAweEQ0NEQsIDB4RDQ0RSwgMHhENDRGLCAweEQ0NTAsCisgICAgMHhENDUxLCAweEQ0NTIsIDB4RDQ1MywgMHhENDU0LCAweEQ0NTUsIDB4RDQ1NiwgMHhENDU3LCAweEQ0NTgsCisgICAgMHhENDU5LCAweEQ0NUEsIDB4RDQ1QiwgMHhENDVELCAweEQ0NUUsIDB4RDQ1RiwgMHhENDYxLCAweEQ0NjIsCisgICAgMHhENDYzLCAweEQ0NjUsIDB4RDQ2NiwgMHhENDY3LCAweEQ0NjgsIDB4RDQ2OSwgMHhENDZBLCAweEQ0NkIsCisgICAgMHhENDZDLCAweEQ0NkUsIDB4RDQ3MCwgMHhENDcxLCAweEQ0NzIsIDB4RDQ3MywgMHhENDc0LCAweEQ0NzUsCisgICAgMHhENDc2LCAweEQ0NzcsIDB4RDQ3QSwgMHhENDdCLCAweEQ0N0QsIDB4RDQ3RSwgMHhENDgxLCAweEQ0ODMsCisgICAgMHhENDg0LCAweEQ0ODUsIDB4RDQ4NiwgMHhENDg3LCAweEQ0OEEsIDB4RDQ4QywgMHhENDhFLCAweEQ0OEYsCisgICAgMHhENDkwLCAweEQ0OTEsIDB4RDQ5MiwgMHhENDkzLCAweEQ0OTUsIDB4RDQ5NiwgMHhENDk3LCAweEQ0OTgsCisgICAgMHhENDk5LCAweEQ0OUEsIDB4RDQ5QiwgMHhENDlDLCAweEQ0OUQsIDB4RDQ5RSwgMHhENDlGLCAweEQ0QTAsCisgICAgMHhENEExLCAweEQ0QTIsIDB4RDRBMywgMHhENEE0LCAweEQ0QTUsIDB4RDRBNiwgMHhENEE3LCAweEQ0QTgsCisgICAgMHhENEFBLCAweEQ0QUIsIDB4RDRBQywgMHhENEFELCAweEQ0QUUsIDB4RDRBRiwgMHhENEIwLCAweEQ0QjEsCisgICAgMHhENEIyLCAweEQ0QjMsIDB4RDRCNCwgMHhENEI1LCAweEQ0QjYsIDB4RDRCNywgMHhENEI4LCAweEQ0QjksCisgICAgMHhENEJBLCAweEQ0QkIsIDB4RDRCQywgMHhENEJELCAweEQ0QkUsIDB4RDRCRiwgMHhENEMwLCAweEQ0QzEsCisgICAgMHhENEMyLCAweEQ0QzMsIDB4RDRDNCwgMHhENEM1LCAweEQ0QzYsIDB4RDRDNywgMHhENEM4LCAweEQ0QzksCisgICAgMHhENENBLCAweEQ0Q0IsIDB4RDRDRCwgMHhENENFLCAweEQ0Q0YsIDB4RDREMSwgMHhENEQyLCAweEQ0RDMsCisgICAgMHhENEQ1LCAweEQ0RDYsIDB4RDRENywgMHhENEQ4LCAweEQ0RDksIDB4RDREQSwgMHhENERCLCAweEQ0REQsCisgICAgMHhENERFLCAweEQ0RTAsIDB4RDRFMSwgMHhENEUyLCAweEQ0RTMsIDB4RDRFNCwgMHhENEU1LCAweEQ0RTYsCisgICAgMHhENEU3LCAweEQ0RTksIDB4RDRFQSwgMHhENEVCLCAweEQ0RUQsIDB4RDRFRSwgMHhENEVGLCAweEQ0RjEsCisgICAgMHhENEYyLCAweEQ0RjMsIDB4RDRGNCwgMHhENEY1LCAweEQ0RjYsIDB4RDRGNywgMHhENEY5LCAweEQ0RkEsCisgICAgMHhENEZDLCAweEQ0RkUsIDB4RDRGRiwgMHhENTAwLCAweEQ1MDEsIDB4RDUwMiwgMHhENTAzLCAweEQ1MDUsCisgICAgMHhENTA2LCAweEQ1MDcsIDB4RDUwOSwgMHhENTBBLCAweEQ1MEIsIDB4RDUwRCwgMHhENTBFLCAweEQ1MEYsCisgICAgMHhENTEwLCAweEQ1MTEsIDB4RDUxMiwgMHhENTEzLCAweEQ1MTYsIDB4RDUxOCwgMHhENTE5LCAweEQ1MUEsCisgICAgMHhENTFCLCAweEQ1MUMsIDB4RDUxRCwgMHhENTFFLCAweEQ1MUYsIDB4RDUyMCwgMHhENTIxLCAweEQ1MjIsCisgICAgMHhENTIzLCAweEQ1MjQsIDB4RDUyNSwgMHhENTI2LCAweEQ1MjcsIDB4RDUyOCwgMHhENTI5LCAweEQ1MkEsCisgICAgMHhENTJCLCAweEQ1MkMsIDB4RDUyRCwgMHhENTJFLCAweEQ1MkYsIDB4RDUzMCwgMHhENTMxLCAweEQ1MzIsCisgICAgMHhENTMzLCAweEQ1MzQsIDB4RDUzNSwgMHhENTM2LCAweEQ1MzcsIDB4RDUzOCwgMHhENTM5LCAweEQ1M0EsCisgICAgMHhENTNCLCAweEQ1M0UsIDB4RDUzRiwgMHhENTQxLCAweEQ1NDIsIDB4RDU0MywgMHhENTQ1LCAweEQ1NDYsCisgICAgMHhENTQ3LCAweEQ1NDgsIDB4RDU0OSwgMHhENTRBLCAweEQ1NEIsIDB4RDU0RSwgMHhENTUwLCAweEQ1NTIsCisgICAgMHhENTUzLCAweEQ1NTQsIDB4RDU1NSwgMHhENTU2LCAweEQ1NTcsIDB4RDU1QSwgMHhENTVCLCAweEQ1NUQsCisgICAgMHhENTVFLCAweEQ1NUYsIDB4RDU2MSwgMHhENTYyLCAweEQ1NjMsIDB4RDU2NCwgMHhENTY2LCAweEQ1NjcsCisgICAgMHhENTZBLCAweEQ1NkMsIDB4RDU2RSwgMHhENTZGLCAweEQ1NzAsIDB4RDU3MSwgMHhENTcyLCAweEQ1NzMsCisgICAgMHhENTc2LCAweEQ1NzcsIDB4RDU3OSwgMHhENTdBLCAweEQ1N0IsIDB4RDU3RCwgMHhENTdFLCAweEQ1N0YsCisgICAgMHhENTgwLCAweEQ1ODEsIDB4RDU4MiwgMHhENTgzLCAweEQ1ODYsIDB4RDU4QSwgMHhENThCLCAweEQ1OEMsCisgICAgMHhENThELCAweEQ1OEUsIDB4RDU4RiwgMHhENTkxLCAweEQ1OTIsIDB4RDU5MywgMHhENTk0LCAweEQ1OTUsCisgICAgMHhENTk2LCAweEQ1OTcsIDB4RDU5OCwgMHhENTk5LCAweEQ1OUEsIDB4RDU5QiwgMHhENTlDLCAweEQ1OUQsCisgICAgMHhENTlFLCAweEQ1OUYsIDB4RDVBMCwgMHhENUExLCAweEQ1QTIsIDB4RDVBMywgMHhENUE0LCAweEQ1QTYsCisgICAgMHhENUE3LCAweEQ1QTgsIDB4RDVBOSwgMHhENUFBLCAweEQ1QUIsIDB4RDVBQywgMHhENUFELCAweEQ1QUUsCisgICAgMHhENUFGLCAweEQ1QjAsIDB4RDVCMSwgMHhENUIyLCAweEQ1QjMsIDB4RDVCNCwgMHhENUI1LCAweEQ1QjYsCisgICAgMHhENUI3LCAweEQ1QjgsIDB4RDVCOSwgMHhENUJBLCAweEQ1QkIsIDB4RDVCQywgMHhENUJELCAweEQ1QkUsCisgICAgMHhENUJGLCAweEQ1QzAsIDB4RDVDMSwgMHhENUMyLCAweEQ1QzMsIDB4RDVDNCwgMHhENUM1LCAweEQ1QzYsCisgICAgMHhENUM3LCAweEQ1Q0EsIDB4RDVDQiwgMHhENUNELCAweEQ1Q0UsIDB4RDVDRiwgMHhENUQxLCAweEQ1RDMsCisgICAgMHhENUQ0LCAweEQ1RDUsIDB4RDVENiwgMHhENUQ3LCAweEQ1REEsIDB4RDVEQywgMHhENURFLCAweEQ1REYsCisgICAgMHhENUUwLCAweEQ1RTEsIDB4RDVFMiwgMHhENUUzLCAweEQ1RTYsIDB4RDVFNywgMHhENUU5LCAweEQ1RUEsCisgICAgMHhENUVCLCAweEQ1RUQsIDB4RDVFRSwgMHhENUVGLCAweEQ1RjAsIDB4RDVGMSwgMHhENUYyLCAweEQ1RjMsCisgICAgMHhENUY2LCAweEQ1RjgsIDB4RDVGQSwgMHhENUZCLCAweEQ1RkMsIDB4RDVGRCwgMHhENUZFLCAweEQ1RkYsCisgICAgMHhENjAyLCAweEQ2MDMsIDB4RDYwNSwgMHhENjA2LCAweEQ2MDcsIDB4RDYwOSwgMHhENjBBLCAweEQ2MEIsCisgICAgMHhENjBDLCAweEQ2MEQsIDB4RDYwRSwgMHhENjBGLCAweEQ2MTIsIDB4RDYxNiwgMHhENjE3LCAweEQ2MTgsCisgICAgMHhENjE5LCAweEQ2MUEsIDB4RDYxQiwgMHhENjFELCAweEQ2MUUsIDB4RDYxRiwgMHhENjIxLCAweEQ2MjIsCisgICAgMHhENjIzLCAweEQ2MjUsIDB4RDYyNiwgMHhENjI3LCAweEQ2MjgsIDB4RDYyOSwgMHhENjJBLCAweEQ2MkIsCisgICAgMHhENjJDLCAweEQ2MkUsIDB4RDYyRiwgMHhENjMwLCAweEQ2MzEsIDB4RDYzMiwgMHhENjMzLCAweEQ2MzQsCisgICAgMHhENjM1LCAweEQ2MzYsIDB4RDYzNywgMHhENjNBLCAweEQ2M0IsIDB4RDYzRCwgMHhENjNFLCAweEQ2M0YsCisgICAgMHhENjQxLCAweEQ2NDIsIDB4RDY0MywgMHhENjQ0LCAweEQ2NDYsIDB4RDY0NywgMHhENjRBLCAweEQ2NEMsCisgICAgMHhENjRFLCAweEQ2NEYsIDB4RDY1MCwgMHhENjUyLCAweEQ2NTMsIDB4RDY1NiwgMHhENjU3LCAweEQ2NTksCisgICAgMHhENjVBLCAweEQ2NUIsIDB4RDY1RCwgMHhENjVFLCAweEQ2NUYsIDB4RDY2MCwgMHhENjYxLCAweEQ2NjIsCisgICAgMHhENjYzLCAweEQ2NjQsIDB4RDY2NSwgMHhENjY2LCAweEQ2NjgsIDB4RDY2QSwgMHhENjZCLCAweEQ2NkMsCisgICAgMHhENjZELCAweEQ2NkUsIDB4RDY2RiwgMHhENjcyLCAweEQ2NzMsIDB4RDY3NSwgMHhENjc2LCAweEQ2NzcsCisgICAgMHhENjc4LCAweEQ2NzksIDB4RDY3QSwgMHhENjdCLCAweEQ2N0MsIDB4RDY3RCwgMHhENjdFLCAweEQ2N0YsCisgICAgMHhENjgwLCAweEQ2ODEsIDB4RDY4MiwgMHhENjg0LCAweEQ2ODYsIDB4RDY4NywgMHhENjg4LCAweEQ2ODksCisgICAgMHhENjhBLCAweEQ2OEIsIDB4RDY4RSwgMHhENjhGLCAweEQ2OTEsIDB4RDY5MiwgMHhENjkzLCAweEQ2OTUsCisgICAgMHhENjk2LCAweEQ2OTcsIDB4RDY5OCwgMHhENjk5LCAweEQ2OUEsIDB4RDY5QiwgMHhENjlDLCAweEQ2OUUsCisgICAgMHhENkEwLCAweEQ2QTIsIDB4RDZBMywgMHhENkE0LCAweEQ2QTUsIDB4RDZBNiwgMHhENkE3LCAweEQ2QTksCisgICAgMHhENkFBLCAweEQ2QUIsIDB4RDZBRCwgMHhENkFFLCAweEQ2QUYsIDB4RDZCMSwgMHhENkIyLCAweEQ2QjMsCisgICAgMHhENkI0LCAweEQ2QjUsIDB4RDZCNiwgMHhENkI3LCAweEQ2QjgsIDB4RDZCQSwgMHhENkJDLCAweEQ2QkQsCisgICAgMHhENkJFLCAweEQ2QkYsIDB4RDZDMCwgMHhENkMxLCAweEQ2QzIsIDB4RDZDMywgMHhENkM2LCAweEQ2QzcsCisgICAgMHhENkM5LCAweEQ2Q0EsIDB4RDZDQiwgMHhENkNELCAweEQ2Q0UsIDB4RDZDRiwgMHhENkQwLCAweEQ2RDIsCisgICAgMHhENkQzLCAweEQ2RDUsIDB4RDZENiwgMHhENkQ4LCAweEQ2REEsIDB4RDZEQiwgMHhENkRDLCAweEQ2REQsCisgICAgMHhENkRFLCAweEQ2REYsIDB4RDZFMSwgMHhENkUyLCAweEQ2RTMsIDB4RDZFNSwgMHhENkU2LCAweEQ2RTcsCisgICAgMHhENkU5LCAweEQ2RUEsIDB4RDZFQiwgMHhENkVDLCAweEQ2RUQsIDB4RDZFRSwgMHhENkVGLCAweEQ2RjEsCisgICAgMHhENkYyLCAweEQ2RjMsIDB4RDZGNCwgMHhENkY2LCAweEQ2RjcsIDB4RDZGOCwgMHhENkY5LCAweEQ2RkEsCisgICAgMHhENkZCLCAweEQ2RkUsIDB4RDZGRiwgMHhENzAxLCAweEQ3MDIsIDB4RDcwMywgMHhENzA1LCAweEQ3MDYsCisgICAgMHhENzA3LCAweEQ3MDgsIDB4RDcwOSwgMHhENzBBLCAweEQ3MEIsIDB4RDcwQywgMHhENzBELCAweEQ3MEUsCisgICAgMHhENzBGLCAweEQ3MTAsIDB4RDcxMiwgMHhENzEzLCAweEQ3MTQsIDB4RDcxNSwgMHhENzE2LCAweEQ3MTcsCisgICAgMHhENzFBLCAweEQ3MUIsIDB4RDcxRCwgMHhENzFFLCAweEQ3MUYsIDB4RDcyMSwgMHhENzIyLCAweEQ3MjMsCisgICAgMHhENzI0LCAweEQ3MjUsIDB4RDcyNiwgMHhENzI3LCAweEQ3MkEsIDB4RDcyQywgMHhENzJFLCAweEQ3MkYsCisgICAgMHhENzMwLCAweEQ3MzEsIDB4RDczMiwgMHhENzMzLCAweEQ3MzYsIDB4RDczNywgMHhENzM5LCAweEQ3M0EsCisgICAgMHhENzNCLCAweEQ3M0QsIDB4RDczRSwgMHhENzNGLCAweEQ3NDAsIDB4RDc0MSwgMHhENzQyLCAweEQ3NDMsCisgICAgMHhENzQ1LCAweEQ3NDYsIDB4RDc0OCwgMHhENzRBLCAweEQ3NEIsIDB4RDc0QywgMHhENzRELCAweEQ3NEUsCisgICAgMHhENzRGLCAweEQ3NTIsIDB4RDc1MywgMHhENzU1LCAweEQ3NUEsIDB4RDc1QiwgMHhENzVDLCAweEQ3NUQsCisgICAgMHhENzVFLCAweEQ3NUYsIDB4RDc2MiwgMHhENzY0LCAweEQ3NjYsIDB4RDc2NywgMHhENzY4LCAweEQ3NkEsCisgICAgMHhENzZCLCAweEQ3NkQsIDB4RDc2RSwgMHhENzZGLCAweEQ3NzEsIDB4RDc3MiwgMHhENzczLCAweEQ3NzUsCisgICAgMHhENzc2LCAweEQ3NzcsIDB4RDc3OCwgMHhENzc5LCAweEQ3N0EsIDB4RDc3QiwgMHhENzdFLCAweEQ3N0YsCisgICAgMHhENzgwLCAweEQ3ODIsIDB4RDc4MywgMHhENzg0LCAweEQ3ODUsIDB4RDc4NiwgMHhENzg3LCAweEQ3OEEsCisgICAgMHhENzhCLCAweEQ3OEQsIDB4RDc4RSwgMHhENzhGLCAweEQ3OTEsIDB4RDc5MiwgMHhENzkzLCAweEQ3OTQsCisgICAgMHhENzk1LCAweEQ3OTYsIDB4RDc5NywgMHhENzlBLCAweEQ3OUMsIDB4RDc5RSwgMHhENzlGLCAweEQ3QTAsCisgICAgMHhEN0ExLCAweEQ3QTIsIDB4RDdBMywgMHgwMDIwLCAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsCisgICAgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywgMHgwMDI4LCAweDAwMjksIDB4MDAyQSwgMHgwMDJCLCAweDAwMkMsCisgICAgMHgwMDJELCAweDAwMkUsIDB4MDAyRiwgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsCisgICAgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgMHgwMDM4LCAweDAwMzksIDB4MDAzQSwgMHgwMDNCLCAweDAwM0MsCisgICAgMHgwMDNELCAweDAwM0UsIDB4MDAzRiwgMHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsCisgICAgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywgMHgwMDQ4LCAweDAwNDksIDB4MDA0QSwgMHgwMDRCLCAweDAwNEMsCisgICAgMHgwMDRELCAweDAwNEUsIDB4MDA0RiwgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsCisgICAgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywgMHgwMDU4LCAweDAwNTksIDB4MDA1QSwgMHgwMDVCLCAweDAwNUMsCisgICAgMHgwMDVELCAweDAwNUUsIDB4MDA1RiwgMHgwMDYwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsCisgICAgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywgMHgwMDY4LCAweDAwNjksIDB4MDA2QSwgMHgwMDZCLCAweDAwNkMsCisgICAgMHgwMDZELCAweDAwNkUsIDB4MDA2RiwgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsCisgICAgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywgMHgwMDc4LCAweDAwNzksIDB4MDA3QSwgMHgwMDdCLCAweDAwN0MsCisgICAgMHgwMDdELCAweDAwN0UsIDB4MjBBOSwgMHgyMDEwLCAweDAwQTksIDB4MjEyMiwgMHgyMkVGLCAweDAwMjAsCisgICAgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LCAweDAwMjgsCisgICAgMHgwMDI5LCAweDAwMkEsIDB4MDAyQiwgMHgwMDJDLCAweDAwMkQsIDB4MDAyRSwgMHgwMDJGLCAweDAwMzAsCisgICAgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LCAweDAwMzgsCisgICAgMHgwMDM5LCAweDAwM0EsIDB4MDAzQiwgMHgwMDNDLCAweDAwM0QsIDB4MDAzRSwgMHgwMDNGLCAweDAwNDAsCisgICAgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsIDB4MDA0NiwgMHgwMDQ3LCAweDAwNDgsCisgICAgMHgwMDQ5LCAweDAwNEEsIDB4MDA0QiwgMHgwMDRDLCAweDAwNEQsIDB4MDA0RSwgMHgwMDRGLCAweDAwNTAsCisgICAgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LCAweDAwNTgsCisgICAgMHgwMDU5LCAweDAwNUEsIDB4MDA1QiwgMHgwMDVDLCAweDAwNUQsIDB4MDA1RSwgMHgwMDVGLCAweDAwNjAsCisgICAgMHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LCAweDAwNjgsCisgICAgMHgwMDY5LCAweDAwNkEsIDB4MDA2QiwgMHgwMDZDLCAweDAwNkQsIDB4MDA2RSwgMHgwMDZGLCAweDAwNzAsCisgICAgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LCAweDAwNzgsCisgICAgMHgwMDc5LCAweDAwN0EsIDB4MDA3QiwgMHgwMDdDLCAweDAwN0QsIDB4MjAzRSwgMHgwMDdFLCAweDAwNUMsCit9OwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0tvcmVhMS9LU0MtRVVDLUhfMC5jcHAgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvS29yZWExL0tTQy1FVUMtSF8wLmNwcAppbmRleCBjZDI2MTIzLi44MGVjMzVmIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvS29yZWExL0tTQy1FVUMtSF8wLmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvS29yZWExL0tTQy1FVUMtSF8wLmNwcApAQCAtMSwxNjQgKzEsMTY0IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfS1NDX0VVQ19IXzBbNDY3ICogM10gPSB7DQotICAgIDB4MDAyMCwgMHgwMDdFLCAweDFGOUUsIDB4QTFBMSwgMHhBMUZFLCAweDAwNjUsIDB4QTJBMSwgMHhBMkU1LCAweDAwQzMsDQotICAgIDB4QTNBMSwgMHhBM0ZFLCAweDAxMDgsIDB4QTRBMSwgMHhBNEQzLCAweDAxNjYsIDB4QTRENSwgMHhBNEZFLCAweDAxOTksDQotICAgIDB4QTVBMSwgMHhBNUFBLCAweDAxQzMsIDB4QTVCMCwgMHhBNUI5LCAweDAxQ0QsIDB4QTVDMSwgMHhBNUQ4LCAweDAxRDcsDQotICAgIDB4QTVFMSwgMHhBNUY4LCAweDAxRUYsIDB4QTZBMSwgMHhBNkU0LCAweDAyMDcsIDB4QTdBMSwgMHhBN0VGLCAweDAyNEIsDQotICAgIDB4QThBMSwgMHhBOEE0LCAweDAyOUEsIDB4QThBNiwgMHhBOEE2LCAweDAyOUUsIDB4QThBOCwgMHhBOEFGLCAweDAyOUYsDQotICAgIDB4QThCMSwgMHhBOEZFLCAweDAyQTcsIDB4QTlBMSwgMHhBOUZFLCAweDAyRjUsIDB4QUFBMSwgMHhBQUYzLCAweDAzNTMsDQotICAgIDB4QUJBMSwgMHhBQkY2LCAweDAzQTYsIDB4QUNBMSwgMHhBQ0MxLCAweDAzRkMsIDB4QUNEMSwgMHhBQ0YxLCAweDA0MUQsDQotICAgIDB4QjBBMSwgMHhCMEZFLCAweDA0M0UsIDB4QjFBMSwgMHhCMUZFLCAweDA0OUMsIDB4QjJBMSwgMHhCMkZFLCAweDA0RkEsDQotICAgIDB4QjNBMSwgMHhCM0ZFLCAweDA1NTgsIDB4QjRBMSwgMHhCNEZFLCAweDA1QjYsIDB4QjVBMSwgMHhCNUZFLCAweDA2MTQsDQotICAgIDB4QjZBMSwgMHhCNkZFLCAweDA2NzIsIDB4QjdBMSwgMHhCN0ZFLCAweDA2RDAsIDB4QjhBMSwgMHhCOEZFLCAweDA3MkUsDQotICAgIDB4QjlBMSwgMHhCOUZFLCAweDA3OEMsIDB4QkFBMSwgMHhCQUZFLCAweDA3RUEsIDB4QkJBMSwgMHhCQkZFLCAweDA4NDgsDQotICAgIDB4QkNBMSwgMHhCQ0ZFLCAweDA4QTYsIDB4QkRBMSwgMHhCREZFLCAweDA5MDQsIDB4QkVBMSwgMHhCRUZFLCAweDA5NjIsDQotICAgIDB4QkZBMSwgMHhCRkZFLCAweDA5QzAsIDB4QzBBMSwgMHhDMEZFLCAweDBBMUUsIDB4QzFBMSwgMHhDMUZFLCAweDBBN0MsDQotICAgIDB4QzJBMSwgMHhDMkZFLCAweDBBREEsIDB4QzNBMSwgMHhDM0ZFLCAweDBCMzgsIDB4QzRBMSwgMHhDNEZFLCAweDBCOTYsDQotICAgIDB4QzVBMSwgMHhDNUZFLCAweDBCRjQsIDB4QzZBMSwgMHhDNkZFLCAweDBDNTIsIDB4QzdBMSwgMHhDN0ZFLCAweDBDQjAsDQotICAgIDB4QzhBMSwgMHhDOEZFLCAweDBEMEUsIDB4Q0FBMSwgMHhDQUZFLCAweDBENkMsIDB4Q0JBMSwgMHhDQkNGLCAweDBEQ0EsDQotICAgIDB4Q0JEMCwgMHhDQkQwLCAweDEwMTQsIDB4Q0JEMSwgMHhDQkQ1LCAweDBERjksIDB4Q0JENiwgMHhDQkQ2LCAweDBFNUUsDQotICAgIDB4Q0JENywgMHhDQkU2LCAweDBERkUsIDB4Q0JFNywgMHhDQkU3LCAweDFCOEQsIDB4Q0JFOCwgMHhDQkZFLCAweDBFMEUsDQotICAgIDB4Q0NBMSwgMHhDQ0ZFLCAweDBFMjUsIDB4Q0RBMSwgMHhDRENFLCAweDBFODMsIDB4Q0RDRiwgMHhDRENGLCAweDBEODQsDQotICAgIDB4Q0REMCwgMHhDREU3LCAweDBFQjEsIDB4Q0RFOCwgMHhDREU4LCAweDFFREMsIDB4Q0RFOSwgMHhDREZFLCAweDBFQzksDQotICAgIDB4Q0VBMSwgMHhDRUFDLCAweDBFREYsIDB4Q0VBRCwgMHhDRUFELCAweDBFREEsIDB4Q0VBRSwgMHhDRUZFLCAweDBFRUIsDQotICAgIDB4Q0ZBMSwgMHhDRkZBLCAweDBGM0MsIDB4Q0ZGQiwgMHhDRkZCLCAweDBGM0UsIDB4Q0ZGQywgMHhDRkZFLCAweDBGOTYsDQotICAgIDB4RDBBMSwgMHhEMEExLCAweDBGOTksIDB4RDBBMiwgMHhEMEEyLCAweDBGNkEsIDB4RDBBMywgMHhEMEI3LCAweDBGOUEsDQotICAgIDB4RDBCOCwgMHhEMEI4LCAweDBGNkEsIDB4RDBCOSwgMHhEMENGLCAweDBGQUYsIDB4RDBEMCwgMHhEMEQwLCAweDBFN0MsDQotICAgIDB4RDBEMSwgMHhEMERDLCAweDBGQzYsIDB4RDBERCwgMHhEMERELCAweDEwMjMsIDB4RDBERSwgMHhEMEZFLCAweDBGRDIsDQotICAgIDB4RDFBMSwgMHhEMUQzLCAweDBGRjMsIDB4RDFENCwgMHhEMUQ0LCAweDExMTYsIDB4RDFENSwgMHhEMUQ1LCAweDEwM0MsDQotICAgIDB4RDFENiwgMHhEMUQ3LCAweDEwMjYsIDB4RDFEOCwgMHhEMUQ4LCAweDExMTcsIDB4RDFEOSwgMHhEMURBLCAweDEwMjgsDQotICAgIDB4RDFEQiwgMHhEMUUwLCAweDExMTgsIDB4RDFFMSwgMHhEMUUxLCAweDEwMkEsIDB4RDFFMiwgMHhEMUUyLCAweDE2QTgsDQotICAgIDB4RDFFMywgMHhEMUU1LCAweDExMUUsIDB4RDFFNiwgMHhEMUU2LCAweDExMjIsIDB4RDFFNywgMHhEMUU3LCAweDEwMkIsDQotICAgIDB4RDFFOCwgMHhEMUVCLCAweDExMjMsIDB4RDFFQywgMHhEMUVDLCAweDEwMkMsIDB4RDFFRCwgMHhEMUVELCAweDExMjcsDQotICAgIDB4RDFFRSwgMHhEMUVFLCAweDEwMkQsIDB4RDFFRiwgMHhEMUYwLCAweDExMkEsIDB4RDFGMSwgMHhEMUYxLCAweDEwMkUsDQotICAgIDB4RDFGMiwgMHhEMUYyLCAweDExMkMsIDB4RDFGMywgMHhEMUY1LCAweDEwMkYsIDB4RDFGNiwgMHhEMUY2LCAweDExMkYsDQotICAgIDB4RDFGNywgMHhEMUY5LCAweDEwMzIsIDB4RDFGQSwgMHhEMUZBLCAweDExMzMsIDB4RDFGQiwgMHhEMUZCLCAweDEwMzUsDQotICAgIDB4RDFGQywgMHhEMUZELCAweDExMzYsIDB4RDFGRSwgMHhEMUZFLCAweDExMzksIDB4RDJBMSwgMHhEMkExLCAweDEwMzYsDQotICAgIDB4RDJBMiwgMHhEMkEzLCAweDExM0EsIDB4RDJBNCwgMHhEMkE2LCAweDEwMzcsIDB4RDJBNywgMHhEMkFBLCAweDExM0MsDQotICAgIDB4RDJBQiwgMHhEMkFCLCAweDExNDMsIDB4RDJBQywgMHhEMkFDLCAweDEwM0EsIDB4RDJBRCwgMHhEMkFELCAweDExNDQsDQotICAgIDB4RDJBRSwgMHhEMkIxLCAweDEwM0IsIDB4RDJCMiwgMHhEMkIyLCAweDExNDgsIDB4RDJCMywgMHhEMkJELCAweDEwM0YsDQotICAgIDB4RDJCRSwgMHhEMkJFLCAweDExOUYsIDB4RDJCRiwgMHhEMkMxLCAweDEwNEEsIDB4RDJDMiwgMHhEMkMzLCAweDExQTEsDQotICAgIDB4RDJDNCwgMHhEMkM0LCAweDExQTUsIDB4RDJDNSwgMHhEMkM1LCAweDEwNEQsIDB4RDJDNiwgMHhEMkNBLCAweDExQTYsDQotICAgIDB4RDJDQiwgMHhEMkNCLCAweDExQUMsIDB4RDJDQywgMHhEMkNDLCAweDEwNEUsIDB4RDJDRCwgMHhEMkNFLCAweDExQUQsDQotICAgIDB4RDJDRiwgMHhEMkQ0LCAweDExQjAsIDB4RDJENSwgMHhEMkQ3LCAweDExQjcsIDB4RDJEOCwgMHhEMkQ4LCAweDEwNEYsDQotICAgIDB4RDJEOSwgMHhEMkRBLCAweDExQkQsIDB4RDJEQiwgMHhEMkRELCAweDEwNTAsIDB4RDJERSwgMHhEMkRGLCAweDExQzEsDQotICAgIDB4RDJFMCwgMHhEMkUwLCAweDEwNTMsIDB4RDJFMSwgMHhEMkUxLCAweDExQzMsIDB4RDJFMiwgMHhEMkUyLCAweDExQzYsDQotICAgIDB4RDJFMywgMHhEMkUzLCAweDEwNTQsIDB4RDJFNCwgMHhEMkU0LCAweDExRDQsIDB4RDJFNSwgMHhEMkU4LCAweDExRDYsDQotICAgIDB4RDJFOSwgMHhEMkVBLCAweDExREIsIDB4RDJFQiwgMHhEMkVCLCAweDExRTAsIDB4RDJFQywgMHhEMkVGLCAweDEwNTUsDQotICAgIDB4RDJGMCwgMHhEMkYzLCAweDExRkMsIDB4RDJGNCwgMHhEMkY1LCAweDEyMDEsIDB4RDJGNiwgMHhEMkY2LCAweDEwNTksDQotICAgIDB4RDJGNywgMHhEMkY4LCAweDEyMDMsIDB4RDJGOSwgMHhEMkZFLCAweDEwNUEsIDB4RDNBMSwgMHhEM0ZFLCAweDEwNjAsDQotICAgIDB4RDRBMSwgMHhENEU1LCAweDEwQkUsIDB4RDRFNiwgMHhENEU2LCAweDEwREUsIDB4RDRFNywgMHhENEZCLCAweDExMDMsDQotICAgIDB4RDRGQywgMHhENEZDLCAweDEwMjgsIDB4RDRGRCwgMHhENEZFLCAweDExMTgsIDB4RDVBMSwgMHhENUE0LCAweDExMUEsDQotICAgIDB4RDVBNSwgMHhENUE1LCAweDE2QTgsIDB4RDVBNiwgMHhENUFBLCAweDExMUUsIDB4RDVBQiwgMHhENUFCLCAweDEwMkIsDQotICAgIDB4RDVBQywgMHhENUFELCAweDExMjMsIDB4RDVBRSwgMHhENUFFLCAweDEwNjAsIDB4RDVBRiwgMHhENUZFLCAweDExMjUsDQotICAgIDB4RDZBMSwgMHhENkI3LCAweDExNzUsIDB4RDZCOCwgMHhENkI4LCAweDEwNDcsIDB4RDZCOSwgMHhENkNDLCAweDExOEMsDQotICAgIDB4RDZDRCwgMHhENkNELCAweDEwNEMsIDB4RDZDRSwgMHhENkZFLCAweDExQTAsIDB4RDdBMSwgMHhEN0NBLCAweDExRDEsDQotICAgIDB4RDdDQiwgMHhEN0NCLCAweDE1QjAsIDB4RDdDQywgMHhEN0UzLCAweDExRkIsIDB4RDdFNCwgMHhEN0U0LCAweDE5MTgsDQotICAgIDB4RDdFNSwgMHhEN0ZFLCAweDEyMTMsIDB4RDhBMSwgMHhEOEZFLCAweDEyMkQsIDB4RDlBMSwgMHhEOUZFLCAweDEyOEIsDQotICAgIDB4REFBMSwgMHhEQUZFLCAweDEyRTksIDB4REJBMSwgMHhEQkM0LCAweDEzNDcsIDB4REJDNSwgMHhEQkM1LCAweDE0MUYsDQotICAgIDB4REJDNiwgMHhEQkUzLCAweDEzNkIsIDB4REJFNCwgMHhEQkU0LCAweDEzM0EsIDB4REJFNSwgMHhEQkZFLCAweDEzODksDQotICAgIDB4RENBMSwgMHhEQ0E0LCAweDEzQTMsIDB4RENBNSwgMHhEQ0E1LCAweDFENUUsIDB4RENBNiwgMHhEQ0ZFLCAweDEzQTcsDQotICAgIDB4RERBMSwgMHhEREE0LCAweDE0MDAsIDB4RERBNSwgMHhEREE1LCAweDEzRDcsIDB4RERBNiwgMHhEREQ0LCAweDE0MDQsDQotICAgIDB4RERENSwgMHhEREQ1LCAweDEzRjUsIDB4RERENiwgMHhEREYzLCAweDE0MzMsIDB4RERGNCwgMHhEREY0LCAweDFEQjcsDQotICAgIDB4RERGNSwgMHhEREZFLCAweDE0NTEsIDB4REVBMSwgMHhERUZCLCAweDE0NUIsIDB4REVGQywgMHhERUZDLCAweDE1RDAsDQotICAgIDB4REVGRCwgMHhERUZELCAweDE0QjYsIDB4REVGRSwgMHhERUZFLCAweDE0RjcsIDB4REZBMSwgMHhERkIyLCAweDE0QjcsDQotICAgIDB4REZCMywgMHhERkIzLCAweDFCQUIsIDB4REZCNCwgMHhERkUwLCAweDE0QzksIDB4REZFMSwgMHhERkUxLCAweDE0RjIsDQotICAgIDB4REZFMiwgMHhERkU3LCAweDE0RjYsIDB4REZFOCwgMHhERkU4LCAweDE1NkQsIDB4REZFOSwgMHhERkZFLCAweDE0RkMsDQotICAgIDB4RTBBMSwgMHhFMEYwLCAweDE1MTIsIDB4RTBGMSwgMHhFMEYxLCAweDE3NzEsIDB4RTBGMiwgMHhFMEZFLCAweDE1NjIsDQotICAgIDB4RTFBMSwgMHhFMUFDLCAweDE1NkYsIDB4RTFBRCwgMHhFMUFELCAweDE1NTQsIDB4RTFBRSwgMHhFMUVDLCAweDE1N0IsDQotICAgIDB4RTFFRCwgMHhFMUVELCAweDE0QzUsIDB4RTFFRSwgMHhFMUZFLCAweDE1QkEsIDB4RTJBMSwgMHhFMkZFLCAweDE1Q0IsDQotICAgIDB4RTNBMSwgMHhFM0Y0LCAweDE2MjksIDB4RTNGNSwgMHhFM0Y1LCAweDFCNjEsIDB4RTNGNiwgMHhFM0ZFLCAweDE2N0QsDQotICAgIDB4RTRBMSwgMHhFNEExLCAweDFDQ0EsIDB4RTRBMiwgMHhFNEE4LCAweDE2ODYsIDB4RTRBOSwgMHhFNEE5LCAweDE2MkUsDQotICAgIDB4RTRBQSwgMHhFNEZFLCAweDE2OEQsIDB4RTVBMSwgMHhFNUFELCAweDE2RTIsIDB4RTVBRSwgMHhFNUFFLCAweDE2RjIsDQotICAgIDB4RTVBRiwgMHhFNUIwLCAweDE2RUYsIDB4RTVCMSwgMHhFNUIyLCAweDExNDksIDB4RTVCMywgMHhFNUI4LCAweDE2RjEsDQotICAgIDB4RTVCOSwgMHhFNUI5LCAweDExNEIsIDB4RTVCQSwgMHhFNUJBLCAweDE2RjcsIDB4RTVCQiwgMHhFNUJDLCAweDExNEQsDQotICAgIDB4RTVCRCwgMHhFNUMzLCAweDE2RjgsIDB4RTVDNCwgMHhFNUM0LCAweDExNEYsIDB4RTVDNSwgMHhFNUNELCAweDE2RkYsDQotICAgIDB4RTVDRSwgMHhFNUNFLCAweDExNTMsIDB4RTVDRiwgMHhFNUNGLCAweDE3MDgsIDB4RTVEMCwgMHhFNUQwLCAweDExNTQsDQotICAgIDB4RTVEMSwgMHhFNUQxLCAweDE3MDksIDB4RTVEMiwgMHhFNUQyLCAweDExNTUsIDB4RTVEMywgMHhFNUQ1LCAweDE3MEEsDQotICAgIDB4RTVENiwgMHhFNUQ2LCAweDExNTcsIDB4RTVENywgMHhFNUY5LCAweDE3MEQsIDB4RTVGQSwgMHhFNUZCLCAweDExNUEsDQotICAgIDB4RTVGQywgMHhFNUZDLCAweDEwM0YsIDB4RTVGRCwgMHhFNUZELCAweDE3MzAsIDB4RTVGRSwgMHhFNUZFLCAweDExNUMsDQotICAgIDB4RTZBMSwgMHhFNkExLCAweDExNUYsIDB4RTZBMiwgMHhFNkEzLCAweDE3MzEsIDB4RTZBNCwgMHhFNkE0LCAweDExNjEsDQotICAgIDB4RTZBNSwgMHhFNkE2LCAweDE3MzMsIDB4RTZBNywgMHhFNkE3LCAweDExNjIsIDB4RTZBOCwgMHhFNkFDLCAweDE3MzUsDQotICAgIDB4RTZBRCwgMHhFNkFELCAweDExNjUsIDB4RTZBRSwgMHhFNkFFLCAweDE3M0EsIDB4RTZBRiwgMHhFNkIxLCAweDExNjcsDQotICAgIDB4RTZCMiwgMHhFNkIyLCAweDE3M0IsIDB4RTZCMywgMHhFNkIzLCAweDExNkEsIDB4RTZCNCwgMHhFNkI2LCAweDE3M0MsDQotICAgIDB4RTZCNywgMHhFNkI4LCAweDExNkIsIDB4RTZCOSwgMHhFNkJCLCAweDE3M0YsIDB4RTZCQywgMHhFNkJDLCAweDExNkYsDQotICAgIDB4RTZCRCwgMHhFNkMzLCAweDE3NDIsIDB4RTZDNCwgMHhFNkM0LCAweDEwNDAsIDB4RTZDNSwgMHhFNkM1LCAweDE3NDksDQotICAgIDB4RTZDNiwgMHhFNkM3LCAweDExNzEsIDB4RTZDOCwgMHhFNkM5LCAweDE3NEEsIDB4RTZDQSwgMHhFNkNBLCAweDEwNDEsDQotICAgIDB4RTZDQiwgMHhFNkQxLCAweDE3NEMsIDB4RTZEMiwgMHhFNkQyLCAweDExNzQsIDB4RTZEMywgMHhFNkQ1LCAweDE3NTMsDQotICAgIDB4RTZENiwgMHhFNkQ2LCAweDExNzUsIDB4RTZENywgMHhFNkQ4LCAweDE3NTYsIDB4RTZEOSwgMHhFNkQ5LCAweDExNzYsDQotICAgIDB4RTZEQSwgMHhFNkRCLCAweDE3NTgsIDB4RTZEQywgMHhFNkRDLCAweDEwNDIsIDB4RTZERCwgMHhFNkRFLCAweDE3NUEsDQotICAgIDB4RTZERiwgMHhFNkRGLCAweDExNzcsIDB4RTZFMCwgMHhFNkUwLCAweDE3NUMsIDB4RTZFMSwgMHhFNkUxLCAweDExNzgsDQotICAgIDB4RTZFMiwgMHhFNkUzLCAweDE3NUQsIDB4RTZFNCwgMHhFNkU0LCAweDExN0EsIDB4RTZFNSwgMHhFNkU1LCAweDExNzksDQotICAgIDB4RTZFNiwgMHhFNkU2LCAweDExN0IsIDB4RTZFNywgMHhFNkU3LCAweDE3NUYsIDB4RTZFOCwgMHhFNkU4LCAweDExN0MsDQotICAgIDB4RTZFOSwgMHhFNkU5LCAweDE3NjAsIDB4RTZFQSwgMHhFNkVCLCAweDExN0UsIDB4RTZFQywgMHhFNkVDLCAweDE5MkYsDQotICAgIDB4RTZFRCwgMHhFNkVFLCAweDE3NjEsIDB4RTZFRiwgMHhFNkVGLCAweDExODEsIDB4RTZGMCwgMHhFNkYwLCAweDE3NjMsDQotICAgIDB4RTZGMSwgMHhFNkYxLCAweDExODIsIDB4RTZGMiwgMHhFNkYyLCAweDE1NTQsIDB4RTZGMywgMHhFNkY0LCAweDE3NjQsDQotICAgIDB4RTZGNSwgMHhFNkY1LCAweDExODMsIDB4RTZGNiwgMHhFNkY2LCAweDEwNDMsIDB4RTZGNywgMHhFNkY3LCAweDEwNDYsDQotICAgIDB4RTZGOCwgMHhFNkY4LCAweDE3NjYsIDB4RTZGOSwgMHhFNkY5LCAweDExODUsIDB4RTZGQSwgMHhFNkZFLCAweDE3NjcsDQotICAgIDB4RTdBMSwgMHhFN0ExLCAweDExODcsIDB4RTdBMiwgMHhFN0E1LCAweDE3NkMsIDB4RTdBNiwgMHhFN0E2LCAweDExODgsDQotICAgIDB4RTdBNywgMHhFN0E4LCAweDE3NzAsIDB4RTdBOSwgMHhFN0E5LCAweDExODksIDB4RTdBQSwgMHhFN0FBLCAweDExOEIsDQotICAgIDB4RTdBQiwgMHhFN0FCLCAweDE3NzIsIDB4RTdBQywgMHhFN0FDLCAweDEwNDcsIDB4RTdBRCwgMHhFN0FELCAweDExOEQsDQotICAgIDB4RTdBRSwgMHhFN0FGLCAweDE3NzMsIDB4RTdCMCwgMHhFN0IwLCAweDExOEUsIDB4RTdCMSwgMHhFN0JFLCAweDE3NzUsDQotICAgIDB4RTdCRiwgMHhFN0JGLCAweDExOEYsIDB4RTdDMCwgMHhFN0MwLCAweDE3ODMsIDB4RTdDMSwgMHhFN0MxLCAweDFFNjcsDQotICAgIDB4RTdDMiwgMHhFN0M1LCAweDE3ODQsIDB4RTdDNiwgMHhFN0M2LCAweDExOTEsIDB4RTdDNywgMHhFN0M3LCAweDExOTMsDQotICAgIDB4RTdDOCwgMHhFN0NBLCAweDE3ODgsIDB4RTdDQiwgMHhFN0NCLCAweDExOTUsIDB4RTdDQywgMHhFN0NDLCAweDE3OEIsDQotICAgIDB4RTdDRCwgMHhFN0NELCAweDExOTYsIDB4RTdDRSwgMHhFN0NFLCAweDE3OEMsIDB4RTdDRiwgMHhFN0QwLCAweDExOTcsDQotICAgIDB4RTdEMSwgMHhFN0QyLCAweDE3OEQsIDB4RTdEMywgMHhFN0QzLCAweDExOUEsIDB4RTdENCwgMHhFN0RFLCAweDE3OEYsDQotICAgIDB4RTdERiwgMHhFN0RGLCAweDExOUMsIDB4RTdFMCwgMHhFN0UzLCAweDE3OUEsIDB4RTdFNCwgMHhFN0U0LCAweDExOUQsDQotICAgIDB4RTdFNSwgMHhFN0U1LCAweDE3OUUsIDB4RTdFNiwgMHhFN0U2LCAweDExOUUsIDB4RTdFNywgMHhFN0Y2LCAweDE3OUYsDQotICAgIDB4RTdGNywgMHhFN0Y3LCAweDE2QTUsIDB4RTdGOCwgMHhFN0ZFLCAweDE3QUYsIDB4RThBMSwgMHhFOEU2LCAweDE3QjYsDQotICAgIDB4RThFNywgMHhFOEU4LCAweDExQzcsIDB4RThFOSwgMHhFOEVGLCAweDE3RkMsIDB4RThGMCwgMHhFOEYwLCAweDExQzksDQotICAgIDB4RThGMSwgMHhFOEYxLCAweDEwNTQsIDB4RThGMiwgMHhFOEY2LCAweDE4MDMsIDB4RThGNywgMHhFOEY3LCAweDExQ0IsDQotICAgIDB4RThGOCwgMHhFOEY4LCAweDE4MDgsIDB4RThGOSwgMHhFOEY5LCAweDE2QTgsIDB4RThGQSwgMHhFOEZBLCAweDE4MDksDQotICAgIDB4RThGQiwgMHhFOEZCLCAweDExQ0MsIDB4RThGQywgMHhFOEZELCAweDE4MEEsIDB4RThGRSwgMHhFOEZFLCAweDExQ0QsDQotICAgIDB4RTlBMSwgMHhFOUE2LCAweDE4MEMsIDB4RTlBNywgMHhFOUE3LCAweDExRDAsIDB4RTlBOCwgMHhFOUFCLCAweDE4MTIsDQotICAgIDB4RTlBQywgMHhFOUFDLCAweDExRDEsIDB4RTlBRCwgMHhFOUNCLCAweDE4MTYsIDB4RTlDQywgMHhFOUNDLCAweDExRDMsDQotICAgIDB4RTlDRCwgMHhFOUY2LCAweDE4MzUsIDB4RTlGNywgMHhFOUY3LCAweDFGMzQsIDB4RTlGOCwgMHhFOUZFLCAweDE4NUYsDQotICAgIDB4RUFBMSwgMHhFQUMwLCAweDE4NjYsIDB4RUFDMSwgMHhFQUMxLCAweDE3RUIsIDB4RUFDMiwgMHhFQUU0LCAweDE4ODYsDQotICAgIDB4RUFFNSwgMHhFQUU1LCAweDExRTEsIDB4RUFFNiwgMHhFQUYzLCAweDE4QTksIDB4RUFGNCwgMHhFQUY0LCAweDEwNTcsDQotICAgIDB4RUFGNSwgMHhFQUY2LCAweDE4QjcsIDB4RUFGNywgMHhFQUY3LCAweDExRTMsIDB4RUFGOCwgMHhFQUZCLCAweDE4QjksDQotICAgIDB4RUFGQywgMHhFQUZDLCAweDExRTUsIDB4RUFGRCwgMHhFQUZELCAweDE4QkQsIDB4RUFGRSwgMHhFQUZFLCAweDExRTYsDQotICAgIDB4RUJBMSwgMHhFQkEzLCAweDE4QkUsIDB4RUJBNCwgMHhFQkE0LCAweDExRTgsIDB4RUJBNSwgMHhFQkE2LCAweDE4QzEsDQotICAgIDB4RUJBNywgMHhFQkE3LCAweDExRUEsIDB4RUJBOCwgMHhFQkE4LCAweDE4QzMsIDB4RUJBOSwgMHhFQkE5LCAweDExRUMsDQotICAgIDB4RUJBQSwgMHhFQkFBLCAweDEwNTgsIDB4RUJBQiwgMHhFQkI5LCAweDE4QzQsIDB4RUJCQSwgMHhFQkJCLCAweDExRUUsDQotICAgIDB4RUJCQywgMHhFQkJDLCAweDE4RDMsIDB4RUJCRCwgMHhFQkJELCAweDExRjAsIDB4RUJCRSwgMHhFQkMwLCAweDE4RDQsDQotICAgIDB4RUJDMSwgMHhFQkMxLCAweDExRjEsIDB4RUJDMiwgMHhFQkMyLCAweDExRjMsIDB4RUJDMywgMHhFQkM1LCAweDE4RDcsDQotICAgIDB4RUJDNiwgMHhFQkM3LCAweDExRjQsIDB4RUJDOCwgMHhFQkNCLCAweDE4REEsIDB4RUJDQywgMHhFQkNDLCAweDExRjcsDQotICAgIDB4RUJDRCwgMHhFQkNFLCAweDE4REUsIDB4RUJDRiwgMHhFQkQxLCAweDExRjgsIDB4RUJEMiwgMHhFQkQyLCAweDE1QjAsDQotICAgIDB4RUJEMywgMHhFQkQ3LCAweDE4RTAsIDB4RUJEOCwgMHhFQkQ4LCAweDExRkIsIDB4RUJEOSwgMHhFQkZFLCAweDE4RTUsDQotICAgIDB4RUNBMSwgMHhFQ0E1LCAweDE5MEIsIDB4RUNBNiwgMHhFQ0E2LCAweDEyMDYsIDB4RUNBNywgMHhFQ0E3LCAweDEyMDgsDQotICAgIDB4RUNBOCwgMHhFQ0E5LCAweDE5MTAsIDB4RUNBQSwgMHhFQ0FBLCAweDEyMEEsIDB4RUNBQiwgMHhFQ0FFLCAweDE5MTIsDQotICAgIDB4RUNBRiwgMHhFQ0FGLCAweDE3M0UsIDB4RUNCMCwgMHhFQ0IxLCAweDEyMEMsIDB4RUNCMiwgMHhFQ0IyLCAweDEwNUIsDQotICAgIDB4RUNCMywgMHhFQ0I0LCAweDE5MTYsIDB4RUNCNSwgMHhFQ0I1LCAweDEyMTEsIDB4RUNCNiwgMHhFQ0I3LCAweDE5MTgsDQotICAgIDB4RUNCOCwgMHhFQ0I4LCAweDEyMTMsIDB4RUNCOSwgMHhFQ0I5LCAweDE5MUEsIDB4RUNCQSwgMHhFQ0JBLCAweDEyMTUsDQotICAgIDB4RUNCQiwgMHhFQ0JGLCAweDE5MUIsIDB4RUNDMCwgMHhFQ0MxLCAweDEyMTgsIDB4RUNDMiwgMHhFQ0M0LCAweDE5MjAsDQotICAgIDB4RUNDNSwgMHhFQ0M1LCAweDEyMUEsIDB4RUNDNiwgMHhFQ0M2LCAweDEyMUMsIDB4RUNDNywgMHhFQ0M4LCAweDE5MjMsDQotICAgIDB4RUNDOSwgMHhFQ0NBLCAweDEwNUMsIDB4RUNDQiwgMHhFQ0Q0LCAweDE5MjUsIDB4RUNENSwgMHhFQ0Q1LCAweDEyMUUsDQotICAgIDB4RUNENiwgMHhFQ0RDLCAweDE5MkYsIDB4RUNERCwgMHhFQ0RFLCAweDEyMjAsIDB4RUNERiwgMHhFQ0UwLCAweDE5MzYsDQotICAgIDB4RUNFMSwgMHhFQ0UxLCAweDEyMjIsIDB4RUNFMiwgMHhFQ0UzLCAweDE5MzgsIDB4RUNFNCwgMHhFQ0U0LCAweDEyMjQsDQotICAgIDB4RUNFNSwgMHhFQ0U2LCAweDE5M0EsIDB4RUNFNywgMHhFQ0U4LCAweDEyMjUsIDB4RUNFOSwgMHhFQ0Y2LCAweDE5M0MsDQotICAgIDB4RUNGNywgMHhFQ0Y4LCAweDEyMjcsIDB4RUNGOSwgMHhFQ0Y5LCAweDE5NEEsIDB4RUNGQSwgMHhFQ0ZBLCAweDEyMkEsDQotICAgIDB4RUNGQiwgMHhFQ0ZFLCAweDE5NEIsIDB4RURBMSwgMHhFREEzLCAweDEyMkQsIDB4RURBNCwgMHhFREVELCAweDE5NEYsDQotICAgIDB4RURFRSwgMHhFREVFLCAweDE0RTcsIDB4RURFRiwgMHhFREZFLCAweDE5OTksIDB4RUVBMSwgMHhFRURBLCAweDE5QTksDQotICAgIDB4RUVEQiwgMHhFRURCLCAweDE5NUUsIDB4RUVEQywgMHhFRUZFLCAweDE5RTMsIDB4RUZBMSwgMHhFRkZFLCAweDFBMDYsDQotICAgIDB4RjBBMSwgMHhGMEZFLCAweDFBNjQsIDB4RjFBMSwgMHhGMUZFLCAweDFBQzIsIDB4RjJBMSwgMHhGMkJDLCAweDFCMjAsDQotICAgIDB4RjJCRCwgMHhGMkJELCAweDE2NjMsIDB4RjJCRSwgMHhGMkY5LCAweDFCM0MsIDB4RjJGQSwgMHhGMkZBLCAweDE2OEIsDQotICAgIDB4RjJGQiwgMHhGMkZFLCAweDFCNzgsIDB4RjNBMSwgMHhGM0IwLCAweDFCN0MsIDB4RjNCMSwgMHhGM0IxLCAweDEwNUYsDQotICAgIDB4RjNCMiwgMHhGM0ZFLCAweDFCOEMsIDB4RjRBMSwgMHhGNEE2LCAweDFCRDksIDB4RjRBNywgMHhGNEE3LCAweDE5NTQsDQotICAgIDB4RjRBOCwgMHhGNEVELCAweDFCREYsIDB4RjRFRSwgMHhGNEVFLCAweDFBMUMsIDB4RjRFRiwgMHhGNEZFLCAweDFDMjUsDQotICAgIDB4RjVBMSwgMHhGNUZFLCAweDFDMzUsIDB4RjZBMSwgMHhGNkYzLCAweDFDOTMsIDB4RjZGNCwgMHhGNkY0LCAweDEwQjcsDQotICAgIDB4RjZGNSwgMHhGNkY1LCAweDFDRTYsIDB4RjZGNiwgMHhGNkY2LCAweDFCRTMsIDB4RjZGNywgMHhGNkZFLCAweDFDRTcsDQotICAgIDB4RjdBMSwgMHhGN0I3LCAweDFDRUYsIDB4RjdCOCwgMHhGN0I4LCAweDEwOTcsIDB4RjdCOSwgMHhGN0M3LCAweDFEMDYsDQotICAgIDB4RjdDOCwgMHhGN0M4LCAweDEwQUEsIDB4RjdDOSwgMHhGN0QyLCAweDFEMTUsIDB4RjdEMywgMHhGN0QzLCAweDEwRjQsDQotICAgIDB4RjdENCwgMHhGN0ZFLCAweDFEMUYsIDB4RjhBMSwgMHhGOERBLCAweDFENEEsIDB4RjhEQiwgMHhGOERCLCAweDFEOTQsDQotICAgIDB4RjhEQywgMHhGOEVGLCAweDFEODQsIDB4RjhGMCwgMHhGOEYwLCAweDEzRTAsIDB4RjhGMSwgMHhGOEZFLCAweDFEOTgsDQotICAgIDB4RjlBMSwgMHhGOUZFLCAweDFEQTYsIDB4RkFBMSwgMHhGQUExLCAweDFFMUQsIDB4RkFBMiwgMHhGQUEyLCAweDBERTYsDQotICAgIDB4RkFBMywgMHhGQUU1LCAweDFFMDQsIDB4RkFFNiwgMHhGQUU2LCAweDBFM0MsIDB4RkFFNywgMHhGQUZFLCAweDFFNDcsDQotICAgIDB4RkJBMSwgMHhGQkZFLCAweDFFNUYsIDB4RkNBMSwgMHhGQ0E4LCAweDFFQkQsIDB4RkNBOSwgMHhGQ0E5LCAweDBFRTcsDQotICAgIDB4RkNBQSwgMHhGQ0ZFLCAweDFFQzUsIDB4RkRBMSwgMHhGREZFLCAweDFGMUEsDQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfS1NDX0VVQ19IXzBbNDY3ICogM10gPSB7CisgICAgMHgwMDIwLCAweDAwN0UsIDB4MUY5RSwgMHhBMUExLCAweEExRkUsIDB4MDA2NSwgMHhBMkExLCAweEEyRTUsIDB4MDBDMywKKyAgICAweEEzQTEsIDB4QTNGRSwgMHgwMTA4LCAweEE0QTEsIDB4QTREMywgMHgwMTY2LCAweEE0RDUsIDB4QTRGRSwgMHgwMTk5LAorICAgIDB4QTVBMSwgMHhBNUFBLCAweDAxQzMsIDB4QTVCMCwgMHhBNUI5LCAweDAxQ0QsIDB4QTVDMSwgMHhBNUQ4LCAweDAxRDcsCisgICAgMHhBNUUxLCAweEE1RjgsIDB4MDFFRiwgMHhBNkExLCAweEE2RTQsIDB4MDIwNywgMHhBN0ExLCAweEE3RUYsIDB4MDI0QiwKKyAgICAweEE4QTEsIDB4QThBNCwgMHgwMjlBLCAweEE4QTYsIDB4QThBNiwgMHgwMjlFLCAweEE4QTgsIDB4QThBRiwgMHgwMjlGLAorICAgIDB4QThCMSwgMHhBOEZFLCAweDAyQTcsIDB4QTlBMSwgMHhBOUZFLCAweDAyRjUsIDB4QUFBMSwgMHhBQUYzLCAweDAzNTMsCisgICAgMHhBQkExLCAweEFCRjYsIDB4MDNBNiwgMHhBQ0ExLCAweEFDQzEsIDB4MDNGQywgMHhBQ0QxLCAweEFDRjEsIDB4MDQxRCwKKyAgICAweEIwQTEsIDB4QjBGRSwgMHgwNDNFLCAweEIxQTEsIDB4QjFGRSwgMHgwNDlDLCAweEIyQTEsIDB4QjJGRSwgMHgwNEZBLAorICAgIDB4QjNBMSwgMHhCM0ZFLCAweDA1NTgsIDB4QjRBMSwgMHhCNEZFLCAweDA1QjYsIDB4QjVBMSwgMHhCNUZFLCAweDA2MTQsCisgICAgMHhCNkExLCAweEI2RkUsIDB4MDY3MiwgMHhCN0ExLCAweEI3RkUsIDB4MDZEMCwgMHhCOEExLCAweEI4RkUsIDB4MDcyRSwKKyAgICAweEI5QTEsIDB4QjlGRSwgMHgwNzhDLCAweEJBQTEsIDB4QkFGRSwgMHgwN0VBLCAweEJCQTEsIDB4QkJGRSwgMHgwODQ4LAorICAgIDB4QkNBMSwgMHhCQ0ZFLCAweDA4QTYsIDB4QkRBMSwgMHhCREZFLCAweDA5MDQsIDB4QkVBMSwgMHhCRUZFLCAweDA5NjIsCisgICAgMHhCRkExLCAweEJGRkUsIDB4MDlDMCwgMHhDMEExLCAweEMwRkUsIDB4MEExRSwgMHhDMUExLCAweEMxRkUsIDB4MEE3QywKKyAgICAweEMyQTEsIDB4QzJGRSwgMHgwQURBLCAweEMzQTEsIDB4QzNGRSwgMHgwQjM4LCAweEM0QTEsIDB4QzRGRSwgMHgwQjk2LAorICAgIDB4QzVBMSwgMHhDNUZFLCAweDBCRjQsIDB4QzZBMSwgMHhDNkZFLCAweDBDNTIsIDB4QzdBMSwgMHhDN0ZFLCAweDBDQjAsCisgICAgMHhDOEExLCAweEM4RkUsIDB4MEQwRSwgMHhDQUExLCAweENBRkUsIDB4MEQ2QywgMHhDQkExLCAweENCQ0YsIDB4MERDQSwKKyAgICAweENCRDAsIDB4Q0JEMCwgMHgxMDE0LCAweENCRDEsIDB4Q0JENSwgMHgwREY5LCAweENCRDYsIDB4Q0JENiwgMHgwRTVFLAorICAgIDB4Q0JENywgMHhDQkU2LCAweDBERkUsIDB4Q0JFNywgMHhDQkU3LCAweDFCOEQsIDB4Q0JFOCwgMHhDQkZFLCAweDBFMEUsCisgICAgMHhDQ0ExLCAweENDRkUsIDB4MEUyNSwgMHhDREExLCAweENEQ0UsIDB4MEU4MywgMHhDRENGLCAweENEQ0YsIDB4MEQ4NCwKKyAgICAweENERDAsIDB4Q0RFNywgMHgwRUIxLCAweENERTgsIDB4Q0RFOCwgMHgxRURDLCAweENERTksIDB4Q0RGRSwgMHgwRUM5LAorICAgIDB4Q0VBMSwgMHhDRUFDLCAweDBFREYsIDB4Q0VBRCwgMHhDRUFELCAweDBFREEsIDB4Q0VBRSwgMHhDRUZFLCAweDBFRUIsCisgICAgMHhDRkExLCAweENGRkEsIDB4MEYzQywgMHhDRkZCLCAweENGRkIsIDB4MEYzRSwgMHhDRkZDLCAweENGRkUsIDB4MEY5NiwKKyAgICAweEQwQTEsIDB4RDBBMSwgMHgwRjk5LCAweEQwQTIsIDB4RDBBMiwgMHgwRjZBLCAweEQwQTMsIDB4RDBCNywgMHgwRjlBLAorICAgIDB4RDBCOCwgMHhEMEI4LCAweDBGNkEsIDB4RDBCOSwgMHhEMENGLCAweDBGQUYsIDB4RDBEMCwgMHhEMEQwLCAweDBFN0MsCisgICAgMHhEMEQxLCAweEQwREMsIDB4MEZDNiwgMHhEMERELCAweEQwREQsIDB4MTAyMywgMHhEMERFLCAweEQwRkUsIDB4MEZEMiwKKyAgICAweEQxQTEsIDB4RDFEMywgMHgwRkYzLCAweEQxRDQsIDB4RDFENCwgMHgxMTE2LCAweEQxRDUsIDB4RDFENSwgMHgxMDNDLAorICAgIDB4RDFENiwgMHhEMUQ3LCAweDEwMjYsIDB4RDFEOCwgMHhEMUQ4LCAweDExMTcsIDB4RDFEOSwgMHhEMURBLCAweDEwMjgsCisgICAgMHhEMURCLCAweEQxRTAsIDB4MTExOCwgMHhEMUUxLCAweEQxRTEsIDB4MTAyQSwgMHhEMUUyLCAweEQxRTIsIDB4MTZBOCwKKyAgICAweEQxRTMsIDB4RDFFNSwgMHgxMTFFLCAweEQxRTYsIDB4RDFFNiwgMHgxMTIyLCAweEQxRTcsIDB4RDFFNywgMHgxMDJCLAorICAgIDB4RDFFOCwgMHhEMUVCLCAweDExMjMsIDB4RDFFQywgMHhEMUVDLCAweDEwMkMsIDB4RDFFRCwgMHhEMUVELCAweDExMjcsCisgICAgMHhEMUVFLCAweEQxRUUsIDB4MTAyRCwgMHhEMUVGLCAweEQxRjAsIDB4MTEyQSwgMHhEMUYxLCAweEQxRjEsIDB4MTAyRSwKKyAgICAweEQxRjIsIDB4RDFGMiwgMHgxMTJDLCAweEQxRjMsIDB4RDFGNSwgMHgxMDJGLCAweEQxRjYsIDB4RDFGNiwgMHgxMTJGLAorICAgIDB4RDFGNywgMHhEMUY5LCAweDEwMzIsIDB4RDFGQSwgMHhEMUZBLCAweDExMzMsIDB4RDFGQiwgMHhEMUZCLCAweDEwMzUsCisgICAgMHhEMUZDLCAweEQxRkQsIDB4MTEzNiwgMHhEMUZFLCAweEQxRkUsIDB4MTEzOSwgMHhEMkExLCAweEQyQTEsIDB4MTAzNiwKKyAgICAweEQyQTIsIDB4RDJBMywgMHgxMTNBLCAweEQyQTQsIDB4RDJBNiwgMHgxMDM3LCAweEQyQTcsIDB4RDJBQSwgMHgxMTNDLAorICAgIDB4RDJBQiwgMHhEMkFCLCAweDExNDMsIDB4RDJBQywgMHhEMkFDLCAweDEwM0EsIDB4RDJBRCwgMHhEMkFELCAweDExNDQsCisgICAgMHhEMkFFLCAweEQyQjEsIDB4MTAzQiwgMHhEMkIyLCAweEQyQjIsIDB4MTE0OCwgMHhEMkIzLCAweEQyQkQsIDB4MTAzRiwKKyAgICAweEQyQkUsIDB4RDJCRSwgMHgxMTlGLCAweEQyQkYsIDB4RDJDMSwgMHgxMDRBLCAweEQyQzIsIDB4RDJDMywgMHgxMUExLAorICAgIDB4RDJDNCwgMHhEMkM0LCAweDExQTUsIDB4RDJDNSwgMHhEMkM1LCAweDEwNEQsIDB4RDJDNiwgMHhEMkNBLCAweDExQTYsCisgICAgMHhEMkNCLCAweEQyQ0IsIDB4MTFBQywgMHhEMkNDLCAweEQyQ0MsIDB4MTA0RSwgMHhEMkNELCAweEQyQ0UsIDB4MTFBRCwKKyAgICAweEQyQ0YsIDB4RDJENCwgMHgxMUIwLCAweEQyRDUsIDB4RDJENywgMHgxMUI3LCAweEQyRDgsIDB4RDJEOCwgMHgxMDRGLAorICAgIDB4RDJEOSwgMHhEMkRBLCAweDExQkQsIDB4RDJEQiwgMHhEMkRELCAweDEwNTAsIDB4RDJERSwgMHhEMkRGLCAweDExQzEsCisgICAgMHhEMkUwLCAweEQyRTAsIDB4MTA1MywgMHhEMkUxLCAweEQyRTEsIDB4MTFDMywgMHhEMkUyLCAweEQyRTIsIDB4MTFDNiwKKyAgICAweEQyRTMsIDB4RDJFMywgMHgxMDU0LCAweEQyRTQsIDB4RDJFNCwgMHgxMUQ0LCAweEQyRTUsIDB4RDJFOCwgMHgxMUQ2LAorICAgIDB4RDJFOSwgMHhEMkVBLCAweDExREIsIDB4RDJFQiwgMHhEMkVCLCAweDExRTAsIDB4RDJFQywgMHhEMkVGLCAweDEwNTUsCisgICAgMHhEMkYwLCAweEQyRjMsIDB4MTFGQywgMHhEMkY0LCAweEQyRjUsIDB4MTIwMSwgMHhEMkY2LCAweEQyRjYsIDB4MTA1OSwKKyAgICAweEQyRjcsIDB4RDJGOCwgMHgxMjAzLCAweEQyRjksIDB4RDJGRSwgMHgxMDVBLCAweEQzQTEsIDB4RDNGRSwgMHgxMDYwLAorICAgIDB4RDRBMSwgMHhENEU1LCAweDEwQkUsIDB4RDRFNiwgMHhENEU2LCAweDEwREUsIDB4RDRFNywgMHhENEZCLCAweDExMDMsCisgICAgMHhENEZDLCAweEQ0RkMsIDB4MTAyOCwgMHhENEZELCAweEQ0RkUsIDB4MTExOCwgMHhENUExLCAweEQ1QTQsIDB4MTExQSwKKyAgICAweEQ1QTUsIDB4RDVBNSwgMHgxNkE4LCAweEQ1QTYsIDB4RDVBQSwgMHgxMTFFLCAweEQ1QUIsIDB4RDVBQiwgMHgxMDJCLAorICAgIDB4RDVBQywgMHhENUFELCAweDExMjMsIDB4RDVBRSwgMHhENUFFLCAweDEwNjAsIDB4RDVBRiwgMHhENUZFLCAweDExMjUsCisgICAgMHhENkExLCAweEQ2QjcsIDB4MTE3NSwgMHhENkI4LCAweEQ2QjgsIDB4MTA0NywgMHhENkI5LCAweEQ2Q0MsIDB4MTE4QywKKyAgICAweEQ2Q0QsIDB4RDZDRCwgMHgxMDRDLCAweEQ2Q0UsIDB4RDZGRSwgMHgxMUEwLCAweEQ3QTEsIDB4RDdDQSwgMHgxMUQxLAorICAgIDB4RDdDQiwgMHhEN0NCLCAweDE1QjAsIDB4RDdDQywgMHhEN0UzLCAweDExRkIsIDB4RDdFNCwgMHhEN0U0LCAweDE5MTgsCisgICAgMHhEN0U1LCAweEQ3RkUsIDB4MTIxMywgMHhEOEExLCAweEQ4RkUsIDB4MTIyRCwgMHhEOUExLCAweEQ5RkUsIDB4MTI4QiwKKyAgICAweERBQTEsIDB4REFGRSwgMHgxMkU5LCAweERCQTEsIDB4REJDNCwgMHgxMzQ3LCAweERCQzUsIDB4REJDNSwgMHgxNDFGLAorICAgIDB4REJDNiwgMHhEQkUzLCAweDEzNkIsIDB4REJFNCwgMHhEQkU0LCAweDEzM0EsIDB4REJFNSwgMHhEQkZFLCAweDEzODksCisgICAgMHhEQ0ExLCAweERDQTQsIDB4MTNBMywgMHhEQ0E1LCAweERDQTUsIDB4MUQ1RSwgMHhEQ0E2LCAweERDRkUsIDB4MTNBNywKKyAgICAweEREQTEsIDB4RERBNCwgMHgxNDAwLCAweEREQTUsIDB4RERBNSwgMHgxM0Q3LCAweEREQTYsIDB4RERENCwgMHgxNDA0LAorICAgIDB4RERENSwgMHhEREQ1LCAweDEzRjUsIDB4RERENiwgMHhEREYzLCAweDE0MzMsIDB4RERGNCwgMHhEREY0LCAweDFEQjcsCisgICAgMHhEREY1LCAweERERkUsIDB4MTQ1MSwgMHhERUExLCAweERFRkIsIDB4MTQ1QiwgMHhERUZDLCAweERFRkMsIDB4MTVEMCwKKyAgICAweERFRkQsIDB4REVGRCwgMHgxNEI2LCAweERFRkUsIDB4REVGRSwgMHgxNEY3LCAweERGQTEsIDB4REZCMiwgMHgxNEI3LAorICAgIDB4REZCMywgMHhERkIzLCAweDFCQUIsIDB4REZCNCwgMHhERkUwLCAweDE0QzksIDB4REZFMSwgMHhERkUxLCAweDE0RjIsCisgICAgMHhERkUyLCAweERGRTcsIDB4MTRGNiwgMHhERkU4LCAweERGRTgsIDB4MTU2RCwgMHhERkU5LCAweERGRkUsIDB4MTRGQywKKyAgICAweEUwQTEsIDB4RTBGMCwgMHgxNTEyLCAweEUwRjEsIDB4RTBGMSwgMHgxNzcxLCAweEUwRjIsIDB4RTBGRSwgMHgxNTYyLAorICAgIDB4RTFBMSwgMHhFMUFDLCAweDE1NkYsIDB4RTFBRCwgMHhFMUFELCAweDE1NTQsIDB4RTFBRSwgMHhFMUVDLCAweDE1N0IsCisgICAgMHhFMUVELCAweEUxRUQsIDB4MTRDNSwgMHhFMUVFLCAweEUxRkUsIDB4MTVCQSwgMHhFMkExLCAweEUyRkUsIDB4MTVDQiwKKyAgICAweEUzQTEsIDB4RTNGNCwgMHgxNjI5LCAweEUzRjUsIDB4RTNGNSwgMHgxQjYxLCAweEUzRjYsIDB4RTNGRSwgMHgxNjdELAorICAgIDB4RTRBMSwgMHhFNEExLCAweDFDQ0EsIDB4RTRBMiwgMHhFNEE4LCAweDE2ODYsIDB4RTRBOSwgMHhFNEE5LCAweDE2MkUsCisgICAgMHhFNEFBLCAweEU0RkUsIDB4MTY4RCwgMHhFNUExLCAweEU1QUQsIDB4MTZFMiwgMHhFNUFFLCAweEU1QUUsIDB4MTZGMiwKKyAgICAweEU1QUYsIDB4RTVCMCwgMHgxNkVGLCAweEU1QjEsIDB4RTVCMiwgMHgxMTQ5LCAweEU1QjMsIDB4RTVCOCwgMHgxNkYxLAorICAgIDB4RTVCOSwgMHhFNUI5LCAweDExNEIsIDB4RTVCQSwgMHhFNUJBLCAweDE2RjcsIDB4RTVCQiwgMHhFNUJDLCAweDExNEQsCisgICAgMHhFNUJELCAweEU1QzMsIDB4MTZGOCwgMHhFNUM0LCAweEU1QzQsIDB4MTE0RiwgMHhFNUM1LCAweEU1Q0QsIDB4MTZGRiwKKyAgICAweEU1Q0UsIDB4RTVDRSwgMHgxMTUzLCAweEU1Q0YsIDB4RTVDRiwgMHgxNzA4LCAweEU1RDAsIDB4RTVEMCwgMHgxMTU0LAorICAgIDB4RTVEMSwgMHhFNUQxLCAweDE3MDksIDB4RTVEMiwgMHhFNUQyLCAweDExNTUsIDB4RTVEMywgMHhFNUQ1LCAweDE3MEEsCisgICAgMHhFNUQ2LCAweEU1RDYsIDB4MTE1NywgMHhFNUQ3LCAweEU1RjksIDB4MTcwRCwgMHhFNUZBLCAweEU1RkIsIDB4MTE1QSwKKyAgICAweEU1RkMsIDB4RTVGQywgMHgxMDNGLCAweEU1RkQsIDB4RTVGRCwgMHgxNzMwLCAweEU1RkUsIDB4RTVGRSwgMHgxMTVDLAorICAgIDB4RTZBMSwgMHhFNkExLCAweDExNUYsIDB4RTZBMiwgMHhFNkEzLCAweDE3MzEsIDB4RTZBNCwgMHhFNkE0LCAweDExNjEsCisgICAgMHhFNkE1LCAweEU2QTYsIDB4MTczMywgMHhFNkE3LCAweEU2QTcsIDB4MTE2MiwgMHhFNkE4LCAweEU2QUMsIDB4MTczNSwKKyAgICAweEU2QUQsIDB4RTZBRCwgMHgxMTY1LCAweEU2QUUsIDB4RTZBRSwgMHgxNzNBLCAweEU2QUYsIDB4RTZCMSwgMHgxMTY3LAorICAgIDB4RTZCMiwgMHhFNkIyLCAweDE3M0IsIDB4RTZCMywgMHhFNkIzLCAweDExNkEsIDB4RTZCNCwgMHhFNkI2LCAweDE3M0MsCisgICAgMHhFNkI3LCAweEU2QjgsIDB4MTE2QiwgMHhFNkI5LCAweEU2QkIsIDB4MTczRiwgMHhFNkJDLCAweEU2QkMsIDB4MTE2RiwKKyAgICAweEU2QkQsIDB4RTZDMywgMHgxNzQyLCAweEU2QzQsIDB4RTZDNCwgMHgxMDQwLCAweEU2QzUsIDB4RTZDNSwgMHgxNzQ5LAorICAgIDB4RTZDNiwgMHhFNkM3LCAweDExNzEsIDB4RTZDOCwgMHhFNkM5LCAweDE3NEEsIDB4RTZDQSwgMHhFNkNBLCAweDEwNDEsCisgICAgMHhFNkNCLCAweEU2RDEsIDB4MTc0QywgMHhFNkQyLCAweEU2RDIsIDB4MTE3NCwgMHhFNkQzLCAweEU2RDUsIDB4MTc1MywKKyAgICAweEU2RDYsIDB4RTZENiwgMHgxMTc1LCAweEU2RDcsIDB4RTZEOCwgMHgxNzU2LCAweEU2RDksIDB4RTZEOSwgMHgxMTc2LAorICAgIDB4RTZEQSwgMHhFNkRCLCAweDE3NTgsIDB4RTZEQywgMHhFNkRDLCAweDEwNDIsIDB4RTZERCwgMHhFNkRFLCAweDE3NUEsCisgICAgMHhFNkRGLCAweEU2REYsIDB4MTE3NywgMHhFNkUwLCAweEU2RTAsIDB4MTc1QywgMHhFNkUxLCAweEU2RTEsIDB4MTE3OCwKKyAgICAweEU2RTIsIDB4RTZFMywgMHgxNzVELCAweEU2RTQsIDB4RTZFNCwgMHgxMTdBLCAweEU2RTUsIDB4RTZFNSwgMHgxMTc5LAorICAgIDB4RTZFNiwgMHhFNkU2LCAweDExN0IsIDB4RTZFNywgMHhFNkU3LCAweDE3NUYsIDB4RTZFOCwgMHhFNkU4LCAweDExN0MsCisgICAgMHhFNkU5LCAweEU2RTksIDB4MTc2MCwgMHhFNkVBLCAweEU2RUIsIDB4MTE3RSwgMHhFNkVDLCAweEU2RUMsIDB4MTkyRiwKKyAgICAweEU2RUQsIDB4RTZFRSwgMHgxNzYxLCAweEU2RUYsIDB4RTZFRiwgMHgxMTgxLCAweEU2RjAsIDB4RTZGMCwgMHgxNzYzLAorICAgIDB4RTZGMSwgMHhFNkYxLCAweDExODIsIDB4RTZGMiwgMHhFNkYyLCAweDE1NTQsIDB4RTZGMywgMHhFNkY0LCAweDE3NjQsCisgICAgMHhFNkY1LCAweEU2RjUsIDB4MTE4MywgMHhFNkY2LCAweEU2RjYsIDB4MTA0MywgMHhFNkY3LCAweEU2RjcsIDB4MTA0NiwKKyAgICAweEU2RjgsIDB4RTZGOCwgMHgxNzY2LCAweEU2RjksIDB4RTZGOSwgMHgxMTg1LCAweEU2RkEsIDB4RTZGRSwgMHgxNzY3LAorICAgIDB4RTdBMSwgMHhFN0ExLCAweDExODcsIDB4RTdBMiwgMHhFN0E1LCAweDE3NkMsIDB4RTdBNiwgMHhFN0E2LCAweDExODgsCisgICAgMHhFN0E3LCAweEU3QTgsIDB4MTc3MCwgMHhFN0E5LCAweEU3QTksIDB4MTE4OSwgMHhFN0FBLCAweEU3QUEsIDB4MTE4QiwKKyAgICAweEU3QUIsIDB4RTdBQiwgMHgxNzcyLCAweEU3QUMsIDB4RTdBQywgMHgxMDQ3LCAweEU3QUQsIDB4RTdBRCwgMHgxMThELAorICAgIDB4RTdBRSwgMHhFN0FGLCAweDE3NzMsIDB4RTdCMCwgMHhFN0IwLCAweDExOEUsIDB4RTdCMSwgMHhFN0JFLCAweDE3NzUsCisgICAgMHhFN0JGLCAweEU3QkYsIDB4MTE4RiwgMHhFN0MwLCAweEU3QzAsIDB4MTc4MywgMHhFN0MxLCAweEU3QzEsIDB4MUU2NywKKyAgICAweEU3QzIsIDB4RTdDNSwgMHgxNzg0LCAweEU3QzYsIDB4RTdDNiwgMHgxMTkxLCAweEU3QzcsIDB4RTdDNywgMHgxMTkzLAorICAgIDB4RTdDOCwgMHhFN0NBLCAweDE3ODgsIDB4RTdDQiwgMHhFN0NCLCAweDExOTUsIDB4RTdDQywgMHhFN0NDLCAweDE3OEIsCisgICAgMHhFN0NELCAweEU3Q0QsIDB4MTE5NiwgMHhFN0NFLCAweEU3Q0UsIDB4MTc4QywgMHhFN0NGLCAweEU3RDAsIDB4MTE5NywKKyAgICAweEU3RDEsIDB4RTdEMiwgMHgxNzhELCAweEU3RDMsIDB4RTdEMywgMHgxMTlBLCAweEU3RDQsIDB4RTdERSwgMHgxNzhGLAorICAgIDB4RTdERiwgMHhFN0RGLCAweDExOUMsIDB4RTdFMCwgMHhFN0UzLCAweDE3OUEsIDB4RTdFNCwgMHhFN0U0LCAweDExOUQsCisgICAgMHhFN0U1LCAweEU3RTUsIDB4MTc5RSwgMHhFN0U2LCAweEU3RTYsIDB4MTE5RSwgMHhFN0U3LCAweEU3RjYsIDB4MTc5RiwKKyAgICAweEU3RjcsIDB4RTdGNywgMHgxNkE1LCAweEU3RjgsIDB4RTdGRSwgMHgxN0FGLCAweEU4QTEsIDB4RThFNiwgMHgxN0I2LAorICAgIDB4RThFNywgMHhFOEU4LCAweDExQzcsIDB4RThFOSwgMHhFOEVGLCAweDE3RkMsIDB4RThGMCwgMHhFOEYwLCAweDExQzksCisgICAgMHhFOEYxLCAweEU4RjEsIDB4MTA1NCwgMHhFOEYyLCAweEU4RjYsIDB4MTgwMywgMHhFOEY3LCAweEU4RjcsIDB4MTFDQiwKKyAgICAweEU4RjgsIDB4RThGOCwgMHgxODA4LCAweEU4RjksIDB4RThGOSwgMHgxNkE4LCAweEU4RkEsIDB4RThGQSwgMHgxODA5LAorICAgIDB4RThGQiwgMHhFOEZCLCAweDExQ0MsIDB4RThGQywgMHhFOEZELCAweDE4MEEsIDB4RThGRSwgMHhFOEZFLCAweDExQ0QsCisgICAgMHhFOUExLCAweEU5QTYsIDB4MTgwQywgMHhFOUE3LCAweEU5QTcsIDB4MTFEMCwgMHhFOUE4LCAweEU5QUIsIDB4MTgxMiwKKyAgICAweEU5QUMsIDB4RTlBQywgMHgxMUQxLCAweEU5QUQsIDB4RTlDQiwgMHgxODE2LCAweEU5Q0MsIDB4RTlDQywgMHgxMUQzLAorICAgIDB4RTlDRCwgMHhFOUY2LCAweDE4MzUsIDB4RTlGNywgMHhFOUY3LCAweDFGMzQsIDB4RTlGOCwgMHhFOUZFLCAweDE4NUYsCisgICAgMHhFQUExLCAweEVBQzAsIDB4MTg2NiwgMHhFQUMxLCAweEVBQzEsIDB4MTdFQiwgMHhFQUMyLCAweEVBRTQsIDB4MTg4NiwKKyAgICAweEVBRTUsIDB4RUFFNSwgMHgxMUUxLCAweEVBRTYsIDB4RUFGMywgMHgxOEE5LCAweEVBRjQsIDB4RUFGNCwgMHgxMDU3LAorICAgIDB4RUFGNSwgMHhFQUY2LCAweDE4QjcsIDB4RUFGNywgMHhFQUY3LCAweDExRTMsIDB4RUFGOCwgMHhFQUZCLCAweDE4QjksCisgICAgMHhFQUZDLCAweEVBRkMsIDB4MTFFNSwgMHhFQUZELCAweEVBRkQsIDB4MThCRCwgMHhFQUZFLCAweEVBRkUsIDB4MTFFNiwKKyAgICAweEVCQTEsIDB4RUJBMywgMHgxOEJFLCAweEVCQTQsIDB4RUJBNCwgMHgxMUU4LCAweEVCQTUsIDB4RUJBNiwgMHgxOEMxLAorICAgIDB4RUJBNywgMHhFQkE3LCAweDExRUEsIDB4RUJBOCwgMHhFQkE4LCAweDE4QzMsIDB4RUJBOSwgMHhFQkE5LCAweDExRUMsCisgICAgMHhFQkFBLCAweEVCQUEsIDB4MTA1OCwgMHhFQkFCLCAweEVCQjksIDB4MThDNCwgMHhFQkJBLCAweEVCQkIsIDB4MTFFRSwKKyAgICAweEVCQkMsIDB4RUJCQywgMHgxOEQzLCAweEVCQkQsIDB4RUJCRCwgMHgxMUYwLCAweEVCQkUsIDB4RUJDMCwgMHgxOEQ0LAorICAgIDB4RUJDMSwgMHhFQkMxLCAweDExRjEsIDB4RUJDMiwgMHhFQkMyLCAweDExRjMsIDB4RUJDMywgMHhFQkM1LCAweDE4RDcsCisgICAgMHhFQkM2LCAweEVCQzcsIDB4MTFGNCwgMHhFQkM4LCAweEVCQ0IsIDB4MThEQSwgMHhFQkNDLCAweEVCQ0MsIDB4MTFGNywKKyAgICAweEVCQ0QsIDB4RUJDRSwgMHgxOERFLCAweEVCQ0YsIDB4RUJEMSwgMHgxMUY4LCAweEVCRDIsIDB4RUJEMiwgMHgxNUIwLAorICAgIDB4RUJEMywgMHhFQkQ3LCAweDE4RTAsIDB4RUJEOCwgMHhFQkQ4LCAweDExRkIsIDB4RUJEOSwgMHhFQkZFLCAweDE4RTUsCisgICAgMHhFQ0ExLCAweEVDQTUsIDB4MTkwQiwgMHhFQ0E2LCAweEVDQTYsIDB4MTIwNiwgMHhFQ0E3LCAweEVDQTcsIDB4MTIwOCwKKyAgICAweEVDQTgsIDB4RUNBOSwgMHgxOTEwLCAweEVDQUEsIDB4RUNBQSwgMHgxMjBBLCAweEVDQUIsIDB4RUNBRSwgMHgxOTEyLAorICAgIDB4RUNBRiwgMHhFQ0FGLCAweDE3M0UsIDB4RUNCMCwgMHhFQ0IxLCAweDEyMEMsIDB4RUNCMiwgMHhFQ0IyLCAweDEwNUIsCisgICAgMHhFQ0IzLCAweEVDQjQsIDB4MTkxNiwgMHhFQ0I1LCAweEVDQjUsIDB4MTIxMSwgMHhFQ0I2LCAweEVDQjcsIDB4MTkxOCwKKyAgICAweEVDQjgsIDB4RUNCOCwgMHgxMjEzLCAweEVDQjksIDB4RUNCOSwgMHgxOTFBLCAweEVDQkEsIDB4RUNCQSwgMHgxMjE1LAorICAgIDB4RUNCQiwgMHhFQ0JGLCAweDE5MUIsIDB4RUNDMCwgMHhFQ0MxLCAweDEyMTgsIDB4RUNDMiwgMHhFQ0M0LCAweDE5MjAsCisgICAgMHhFQ0M1LCAweEVDQzUsIDB4MTIxQSwgMHhFQ0M2LCAweEVDQzYsIDB4MTIxQywgMHhFQ0M3LCAweEVDQzgsIDB4MTkyMywKKyAgICAweEVDQzksIDB4RUNDQSwgMHgxMDVDLCAweEVDQ0IsIDB4RUNENCwgMHgxOTI1LCAweEVDRDUsIDB4RUNENSwgMHgxMjFFLAorICAgIDB4RUNENiwgMHhFQ0RDLCAweDE5MkYsIDB4RUNERCwgMHhFQ0RFLCAweDEyMjAsIDB4RUNERiwgMHhFQ0UwLCAweDE5MzYsCisgICAgMHhFQ0UxLCAweEVDRTEsIDB4MTIyMiwgMHhFQ0UyLCAweEVDRTMsIDB4MTkzOCwgMHhFQ0U0LCAweEVDRTQsIDB4MTIyNCwKKyAgICAweEVDRTUsIDB4RUNFNiwgMHgxOTNBLCAweEVDRTcsIDB4RUNFOCwgMHgxMjI1LCAweEVDRTksIDB4RUNGNiwgMHgxOTNDLAorICAgIDB4RUNGNywgMHhFQ0Y4LCAweDEyMjcsIDB4RUNGOSwgMHhFQ0Y5LCAweDE5NEEsIDB4RUNGQSwgMHhFQ0ZBLCAweDEyMkEsCisgICAgMHhFQ0ZCLCAweEVDRkUsIDB4MTk0QiwgMHhFREExLCAweEVEQTMsIDB4MTIyRCwgMHhFREE0LCAweEVERUQsIDB4MTk0RiwKKyAgICAweEVERUUsIDB4RURFRSwgMHgxNEU3LCAweEVERUYsIDB4RURGRSwgMHgxOTk5LCAweEVFQTEsIDB4RUVEQSwgMHgxOUE5LAorICAgIDB4RUVEQiwgMHhFRURCLCAweDE5NUUsIDB4RUVEQywgMHhFRUZFLCAweDE5RTMsIDB4RUZBMSwgMHhFRkZFLCAweDFBMDYsCisgICAgMHhGMEExLCAweEYwRkUsIDB4MUE2NCwgMHhGMUExLCAweEYxRkUsIDB4MUFDMiwgMHhGMkExLCAweEYyQkMsIDB4MUIyMCwKKyAgICAweEYyQkQsIDB4RjJCRCwgMHgxNjYzLCAweEYyQkUsIDB4RjJGOSwgMHgxQjNDLCAweEYyRkEsIDB4RjJGQSwgMHgxNjhCLAorICAgIDB4RjJGQiwgMHhGMkZFLCAweDFCNzgsIDB4RjNBMSwgMHhGM0IwLCAweDFCN0MsIDB4RjNCMSwgMHhGM0IxLCAweDEwNUYsCisgICAgMHhGM0IyLCAweEYzRkUsIDB4MUI4QywgMHhGNEExLCAweEY0QTYsIDB4MUJEOSwgMHhGNEE3LCAweEY0QTcsIDB4MTk1NCwKKyAgICAweEY0QTgsIDB4RjRFRCwgMHgxQkRGLCAweEY0RUUsIDB4RjRFRSwgMHgxQTFDLCAweEY0RUYsIDB4RjRGRSwgMHgxQzI1LAorICAgIDB4RjVBMSwgMHhGNUZFLCAweDFDMzUsIDB4RjZBMSwgMHhGNkYzLCAweDFDOTMsIDB4RjZGNCwgMHhGNkY0LCAweDEwQjcsCisgICAgMHhGNkY1LCAweEY2RjUsIDB4MUNFNiwgMHhGNkY2LCAweEY2RjYsIDB4MUJFMywgMHhGNkY3LCAweEY2RkUsIDB4MUNFNywKKyAgICAweEY3QTEsIDB4RjdCNywgMHgxQ0VGLCAweEY3QjgsIDB4RjdCOCwgMHgxMDk3LCAweEY3QjksIDB4RjdDNywgMHgxRDA2LAorICAgIDB4RjdDOCwgMHhGN0M4LCAweDEwQUEsIDB4RjdDOSwgMHhGN0QyLCAweDFEMTUsIDB4RjdEMywgMHhGN0QzLCAweDEwRjQsCisgICAgMHhGN0Q0LCAweEY3RkUsIDB4MUQxRiwgMHhGOEExLCAweEY4REEsIDB4MUQ0QSwgMHhGOERCLCAweEY4REIsIDB4MUQ5NCwKKyAgICAweEY4REMsIDB4RjhFRiwgMHgxRDg0LCAweEY4RjAsIDB4RjhGMCwgMHgxM0UwLCAweEY4RjEsIDB4RjhGRSwgMHgxRDk4LAorICAgIDB4RjlBMSwgMHhGOUZFLCAweDFEQTYsIDB4RkFBMSwgMHhGQUExLCAweDFFMUQsIDB4RkFBMiwgMHhGQUEyLCAweDBERTYsCisgICAgMHhGQUEzLCAweEZBRTUsIDB4MUUwNCwgMHhGQUU2LCAweEZBRTYsIDB4MEUzQywgMHhGQUU3LCAweEZBRkUsIDB4MUU0NywKKyAgICAweEZCQTEsIDB4RkJGRSwgMHgxRTVGLCAweEZDQTEsIDB4RkNBOCwgMHgxRUJELCAweEZDQTksIDB4RkNBOSwgMHgwRUU3LAorICAgIDB4RkNBQSwgMHhGQ0ZFLCAweDFFQzUsIDB4RkRBMSwgMHhGREZFLCAweDFGMUEsCit9OwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0tvcmVhMS9LU0MtRVVDLVZfMC5jcHAgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvS29yZWExL0tTQy1FVUMtVl8wLmNwcAppbmRleCBlNzVhNmEzLi41ZmY0NDE1IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvS29yZWExL0tTQy1FVUMtVl8wLmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvS29yZWExL0tTQy1FVUMtVl8wLmNwcApAQCAtMSwxNCArMSwxNCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0tTQ19FVUNfVl8wWzE2ICogM10gPSB7DQotICAgIDB4QTFBMiwgMHhBMUEzLCAweDFGNzgsIDB4QTFBNSwgMHhBMUE1LCAweDFGN0EsIDB4QTFBNiwgMHhBMUE2LCAweDIwODAsDQotICAgIDB4QTFBOSwgMHhBMUFCLCAweDFGN0IsIDB4QTFBRCwgMHhBMUFELCAweDFGN0UsIDB4QTFCMiwgMHhBMUJELCAweDFGN0YsDQotICAgIDB4QTFFQiwgMHhBMUVCLCAweDFGOEIsIDB4QTNBMSwgMHhBM0ExLCAweDFGOEMsIDB4QTNBOCwgMHhBM0E5LCAweDFGOEQsDQotICAgIDB4QTNBQywgMHhBM0FDLCAweDFGOEYsIDB4QTNBRSwgMHhBM0FFLCAweDFGOTAsIDB4QTNCQSwgMHhBM0JGLCAweDFGOTEsDQotICAgIDB4QTNEQiwgMHhBM0RCLCAweDFGOTcsIDB4QTNERCwgMHhBM0RELCAweDFGOTgsIDB4QTNERiwgMHhBM0RGLCAweDFGOTksDQotICAgIDB4QTNGQiwgMHhBM0ZFLCAweDFGOUEsDQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfS1NDX0VVQ19WXzBbMTYgKiAzXSA9IHsKKyAgICAweEExQTIsIDB4QTFBMywgMHgxRjc4LCAweEExQTUsIDB4QTFBNSwgMHgxRjdBLCAweEExQTYsIDB4QTFBNiwgMHgyMDgwLAorICAgIDB4QTFBOSwgMHhBMUFCLCAweDFGN0IsIDB4QTFBRCwgMHhBMUFELCAweDFGN0UsIDB4QTFCMiwgMHhBMUJELCAweDFGN0YsCisgICAgMHhBMUVCLCAweEExRUIsIDB4MUY4QiwgMHhBM0ExLCAweEEzQTEsIDB4MUY4QywgMHhBM0E4LCAweEEzQTksIDB4MUY4RCwKKyAgICAweEEzQUMsIDB4QTNBQywgMHgxRjhGLCAweEEzQUUsIDB4QTNBRSwgMHgxRjkwLCAweEEzQkEsIDB4QTNCRiwgMHgxRjkxLAorICAgIDB4QTNEQiwgMHhBM0RCLCAweDFGOTcsIDB4QTNERCwgMHhBM0RELCAweDFGOTgsIDB4QTNERiwgMHhBM0RGLCAweDFGOTksCisgICAgMHhBM0ZCLCAweEEzRkUsIDB4MUY5QSwKK307CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvS29yZWExL0tTQ21zLVVIQy1IVy1IXzEuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0tvcmVhMS9LU0Ntcy1VSEMtSFctSF8xLmNwcAppbmRleCBkOTViYWI4Li5kNDllOWY0IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvS29yZWExL0tTQ21zLVVIQy1IVy1IXzEuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9Lb3JlYTEvS1NDbXMtVUhDLUhXLUhfMS5jcHAKQEAgLTEsMjMzICsxLDIzMyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0tTQ21zX1VIQ19IV19IXzFbNjc1ICogM10gPSB7DQotICAgIDB4MDAyMCwgMHgwMDdFLCAweDFGOUUsIDB4ODE0MSwgMHg4MTVBLCAweDI0NzUsIDB4ODE2MSwgMHg4MTdBLCAweDI0OEYsDQotICAgIDB4ODE4MSwgMHg4MUZFLCAweDI0QTksIDB4ODI0MSwgMHg4MjVBLCAweDI1MjcsIDB4ODI2MSwgMHg4MjdBLCAweDI1NDEsDQotICAgIDB4ODI4MSwgMHg4MkZFLCAweDI1NUIsIDB4ODM0MSwgMHg4MzVBLCAweDI1RDksIDB4ODM2MSwgMHg4MzdBLCAweDI1RjMsDQotICAgIDB4ODM4MSwgMHg4M0ZFLCAweDI2MEQsIDB4ODQ0MSwgMHg4NDVBLCAweDI2OEIsIDB4ODQ2MSwgMHg4NDdBLCAweDI2QTUsDQotICAgIDB4ODQ4MSwgMHg4NEZFLCAweDI2QkYsIDB4ODU0MSwgMHg4NTVBLCAweDI3M0QsIDB4ODU2MSwgMHg4NTdBLCAweDI3NTcsDQotICAgIDB4ODU4MSwgMHg4NUZFLCAweDI3NzEsIDB4ODY0MSwgMHg4NjVBLCAweDI3RUYsIDB4ODY2MSwgMHg4NjdBLCAweDI4MDksDQotICAgIDB4ODY4MSwgMHg4NkZFLCAweDI4MjMsIDB4ODc0MSwgMHg4NzVBLCAweDI4QTEsIDB4ODc2MSwgMHg4NzdBLCAweDI4QkIsDQotICAgIDB4ODc4MSwgMHg4N0ZFLCAweDI4RDUsIDB4ODg0MSwgMHg4ODVBLCAweDI5NTMsIDB4ODg2MSwgMHg4ODdBLCAweDI5NkQsDQotICAgIDB4ODg4MSwgMHg4OEZFLCAweDI5ODcsIDB4ODk0MSwgMHg4OTVBLCAweDJBMDUsIDB4ODk2MSwgMHg4OTdBLCAweDJBMUYsDQotICAgIDB4ODk4MSwgMHg4OUZFLCAweDJBMzksIDB4OEE0MSwgMHg4QTVBLCAweDJBQjcsIDB4OEE2MSwgMHg4QTdBLCAweDJBRDEsDQotICAgIDB4OEE4MSwgMHg4QUZFLCAweDJBRUIsIDB4OEI0MSwgMHg4QjVBLCAweDJCNjksIDB4OEI2MSwgMHg4QjdBLCAweDJCODMsDQotICAgIDB4OEI4MSwgMHg4QkZFLCAweDJCOUQsIDB4OEM0MSwgMHg4QzVBLCAweDJDMUIsIDB4OEM2MSwgMHg4QzdBLCAweDJDMzUsDQotICAgIDB4OEM4MSwgMHg4Q0ZFLCAweDJDNEYsIDB4OEQ0MSwgMHg4RDVBLCAweDJDQ0QsIDB4OEQ2MSwgMHg4RDdBLCAweDJDRTcsDQotICAgIDB4OEQ4MSwgMHg4REZFLCAweDJEMDEsIDB4OEU0MSwgMHg4RTVBLCAweDJEN0YsIDB4OEU2MSwgMHg4RTdBLCAweDJEOTksDQotICAgIDB4OEU4MSwgMHg4RUZFLCAweDJEQjMsIDB4OEY0MSwgMHg4RjVBLCAweDJFMzEsIDB4OEY2MSwgMHg4RjdBLCAweDJFNEIsDQotICAgIDB4OEY4MSwgMHg4RkZFLCAweDJFNjUsIDB4OTA0MSwgMHg5MDVBLCAweDJFRTMsIDB4OTA2MSwgMHg5MDdBLCAweDJFRkQsDQotICAgIDB4OTA4MSwgMHg5MEZFLCAweDJGMTcsIDB4OTE0MSwgMHg5MTVBLCAweDJGOTUsIDB4OTE2MSwgMHg5MTdBLCAweDJGQUYsDQotICAgIDB4OTE4MSwgMHg5MUZFLCAweDJGQzksIDB4OTI0MSwgMHg5MjVBLCAweDMwNDcsIDB4OTI2MSwgMHg5MjdBLCAweDMwNjEsDQotICAgIDB4OTI4MSwgMHg5MkZFLCAweDMwN0IsIDB4OTM0MSwgMHg5MzVBLCAweDMwRjksIDB4OTM2MSwgMHg5MzdBLCAweDMxMTMsDQotICAgIDB4OTM4MSwgMHg5M0ZFLCAweDMxMkQsIDB4OTQ0MSwgMHg5NDVBLCAweDMxQUIsIDB4OTQ2MSwgMHg5NDdBLCAweDMxQzUsDQotICAgIDB4OTQ4MSwgMHg5NEZFLCAweDMxREYsIDB4OTU0MSwgMHg5NTVBLCAweDMyNUQsIDB4OTU2MSwgMHg5NTdBLCAweDMyNzcsDQotICAgIDB4OTU4MSwgMHg5NUZFLCAweDMyOTEsIDB4OTY0MSwgMHg5NjVBLCAweDMzMEYsIDB4OTY2MSwgMHg5NjdBLCAweDMzMjksDQotICAgIDB4OTY4MSwgMHg5NkZFLCAweDMzNDMsIDB4OTc0MSwgMHg5NzVBLCAweDMzQzEsIDB4OTc2MSwgMHg5NzdBLCAweDMzREIsDQotICAgIDB4OTc4MSwgMHg5N0ZFLCAweDMzRjUsIDB4OTg0MSwgMHg5ODVBLCAweDM0NzMsIDB4OTg2MSwgMHg5ODdBLCAweDM0OEQsDQotICAgIDB4OTg4MSwgMHg5OEZFLCAweDM0QTcsIDB4OTk0MSwgMHg5OTVBLCAweDM1MjUsIDB4OTk2MSwgMHg5OTdBLCAweDM1M0YsDQotICAgIDB4OTk4MSwgMHg5OUZFLCAweDM1NTksIDB4OUE0MSwgMHg5QTVBLCAweDM1RDcsIDB4OUE2MSwgMHg5QTdBLCAweDM1RjEsDQotICAgIDB4OUE4MSwgMHg5QUZFLCAweDM2MEIsIDB4OUI0MSwgMHg5QjVBLCAweDM2ODksIDB4OUI2MSwgMHg5QjdBLCAweDM2QTMsDQotICAgIDB4OUI4MSwgMHg5QkZFLCAweDM2QkQsIDB4OUM0MSwgMHg5QzVBLCAweDM3M0IsIDB4OUM2MSwgMHg5QzdBLCAweDM3NTUsDQotICAgIDB4OUM4MSwgMHg5Q0ZFLCAweDM3NkYsIDB4OUQ0MSwgMHg5RDVBLCAweDM3RUQsIDB4OUQ2MSwgMHg5RDdBLCAweDM4MDcsDQotICAgIDB4OUQ4MSwgMHg5REZFLCAweDM4MjEsIDB4OUU0MSwgMHg5RTVBLCAweDM4OUYsIDB4OUU2MSwgMHg5RTdBLCAweDM4QjksDQotICAgIDB4OUU4MSwgMHg5RUZFLCAweDM4RDMsIDB4OUY0MSwgMHg5RjVBLCAweDM5NTEsIDB4OUY2MSwgMHg5RjdBLCAweDM5NkIsDQotICAgIDB4OUY4MSwgMHg5RkZFLCAweDM5ODUsIDB4QTA0MSwgMHhBMDVBLCAweDNBMDMsIDB4QTA2MSwgMHhBMDdBLCAweDNBMUQsDQotICAgIDB4QTA4MSwgMHhBMEZFLCAweDNBMzcsIDB4QTE0MSwgMHhBMTVBLCAweDNBQjUsIDB4QTE2MSwgMHhBMTdBLCAweDNBQ0YsDQotICAgIDB4QTE4MSwgMHhBMUEwLCAweDNBRTksIDB4QTFBMSwgMHhBMUZFLCAweDAwNjUsIDB4QTI0MSwgMHhBMjVBLCAweDNCMDksDQotICAgIDB4QTI2MSwgMHhBMjdBLCAweDNCMjMsIDB4QTI4MSwgMHhBMkEwLCAweDNCM0QsIDB4QTJBMSwgMHhBMkU1LCAweDAwQzMsDQotICAgIDB4QTM0MSwgMHhBMzVBLCAweDNCNUQsIDB4QTM2MSwgMHhBMzdBLCAweDNCNzcsIDB4QTM4MSwgMHhBM0EwLCAweDNCOTEsDQotICAgIDB4QTNBMSwgMHhBM0ZFLCAweDAxMDgsIDB4QTQ0MSwgMHhBNDVBLCAweDNCQjEsIDB4QTQ2MSwgMHhBNDdBLCAweDNCQ0IsDQotICAgIDB4QTQ4MSwgMHhBNEEwLCAweDNCRTUsIDB4QTRBMSwgMHhBNEQzLCAweDAxNjYsIDB4QTRENSwgMHhBNEZFLCAweDAxOTksDQotICAgIDB4QTU0MSwgMHhBNTVBLCAweDNDMDUsIDB4QTU2MSwgMHhBNTdBLCAweDNDMUYsIDB4QTU4MSwgMHhBNUEwLCAweDNDMzksDQotICAgIDB4QTVBMSwgMHhBNUFBLCAweDAxQzMsIDB4QTVCMCwgMHhBNUI5LCAweDAxQ0QsIDB4QTVDMSwgMHhBNUQ4LCAweDAxRDcsDQotICAgIDB4QTVFMSwgMHhBNUY4LCAweDAxRUYsIDB4QTY0MSwgMHhBNjVBLCAweDNDNTksIDB4QTY2MSwgMHhBNjdBLCAweDNDNzMsDQotICAgIDB4QTY4MSwgMHhBNkEwLCAweDNDOEQsIDB4QTZBMSwgMHhBNkU0LCAweDAyMDcsIDB4QTc0MSwgMHhBNzVBLCAweDNDQUQsDQotICAgIDB4QTc2MSwgMHhBNzdBLCAweDNDQzcsIDB4QTc4MSwgMHhBN0EwLCAweDNDRTEsIDB4QTdBMSwgMHhBN0VGLCAweDAyNEIsDQotICAgIDB4QTg0MSwgMHhBODVBLCAweDNEMDEsIDB4QTg2MSwgMHhBODdBLCAweDNEMUIsIDB4QTg4MSwgMHhBOEEwLCAweDNEMzUsDQotICAgIDB4QThBMSwgMHhBOEE0LCAweDAyOUEsIDB4QThBNiwgMHhBOEE2LCAweDAyOUUsIDB4QThBOCwgMHhBOEFGLCAweDAyOUYsDQotICAgIDB4QThCMSwgMHhBOEZFLCAweDAyQTcsIDB4QTk0MSwgMHhBOTVBLCAweDNENTUsIDB4QTk2MSwgMHhBOTdBLCAweDNENkYsDQotICAgIDB4QTk4MSwgMHhBOUEwLCAweDNEODksIDB4QTlBMSwgMHhBOUZFLCAweDAyRjUsIDB4QUE0MSwgMHhBQTVBLCAweDNEQTksDQotICAgIDB4QUE2MSwgMHhBQTdBLCAweDNEQzMsIDB4QUE4MSwgMHhBQUEwLCAweDNEREQsIDB4QUFBMSwgMHhBQUYzLCAweDAzNTMsDQotICAgIDB4QUI0MSwgMHhBQjVBLCAweDNERkQsIDB4QUI2MSwgMHhBQjdBLCAweDNFMTcsIDB4QUI4MSwgMHhBQkEwLCAweDNFMzEsDQotICAgIDB4QUJBMSwgMHhBQkY2LCAweDAzQTYsIDB4QUM0MSwgMHhBQzVBLCAweDNFNTEsIDB4QUM2MSwgMHhBQzdBLCAweDNFNkIsDQotICAgIDB4QUM4MSwgMHhBQ0EwLCAweDNFODUsIDB4QUNBMSwgMHhBQ0MxLCAweDAzRkMsIDB4QUNEMSwgMHhBQ0YxLCAweDA0MUQsDQotICAgIDB4QUQ0MSwgMHhBRDVBLCAweDNFQTUsIDB4QUQ2MSwgMHhBRDdBLCAweDNFQkYsIDB4QUQ4MSwgMHhBREEwLCAweDNFRDksDQotICAgIDB4QUU0MSwgMHhBRTVBLCAweDNFRjksIDB4QUU2MSwgMHhBRTdBLCAweDNGMTMsIDB4QUU4MSwgMHhBRUEwLCAweDNGMkQsDQotICAgIDB4QUY0MSwgMHhBRjVBLCAweDNGNEQsIDB4QUY2MSwgMHhBRjdBLCAweDNGNjcsIDB4QUY4MSwgMHhBRkEwLCAweDNGODEsDQotICAgIDB4QjA0MSwgMHhCMDVBLCAweDNGQTEsIDB4QjA2MSwgMHhCMDdBLCAweDNGQkIsIDB4QjA4MSwgMHhCMEEwLCAweDNGRDUsDQotICAgIDB4QjBBMSwgMHhCMEZFLCAweDA0M0UsIDB4QjE0MSwgMHhCMTVBLCAweDNGRjUsIDB4QjE2MSwgMHhCMTdBLCAweDQwMEYsDQotICAgIDB4QjE4MSwgMHhCMUEwLCAweDQwMjksIDB4QjFBMSwgMHhCMUZFLCAweDA0OUMsIDB4QjI0MSwgMHhCMjVBLCAweDQwNDksDQotICAgIDB4QjI2MSwgMHhCMjdBLCAweDQwNjMsIDB4QjI4MSwgMHhCMkEwLCAweDQwN0QsIDB4QjJBMSwgMHhCMkZFLCAweDA0RkEsDQotICAgIDB4QjM0MSwgMHhCMzVBLCAweDQwOUQsIDB4QjM2MSwgMHhCMzdBLCAweDQwQjcsIDB4QjM4MSwgMHhCM0EwLCAweDQwRDEsDQotICAgIDB4QjNBMSwgMHhCM0ZFLCAweDA1NTgsIDB4QjQ0MSwgMHhCNDVBLCAweDQwRjEsIDB4QjQ2MSwgMHhCNDdBLCAweDQxMEIsDQotICAgIDB4QjQ4MSwgMHhCNEEwLCAweDQxMjUsIDB4QjRBMSwgMHhCNEZFLCAweDA1QjYsIDB4QjU0MSwgMHhCNTVBLCAweDQxNDUsDQotICAgIDB4QjU2MSwgMHhCNTdBLCAweDQxNUYsIDB4QjU4MSwgMHhCNUEwLCAweDQxNzksIDB4QjVBMSwgMHhCNUZFLCAweDA2MTQsDQotICAgIDB4QjY0MSwgMHhCNjVBLCAweDQxOTksIDB4QjY2MSwgMHhCNjdBLCAweDQxQjMsIDB4QjY4MSwgMHhCNkEwLCAweDQxQ0QsDQotICAgIDB4QjZBMSwgMHhCNkZFLCAweDA2NzIsIDB4Qjc0MSwgMHhCNzVBLCAweDQxRUQsIDB4Qjc2MSwgMHhCNzdBLCAweDQyMDcsDQotICAgIDB4Qjc4MSwgMHhCN0EwLCAweDQyMjEsIDB4QjdBMSwgMHhCN0ZFLCAweDA2RDAsIDB4Qjg0MSwgMHhCODVBLCAweDQyNDEsDQotICAgIDB4Qjg2MSwgMHhCODdBLCAweDQyNUIsIDB4Qjg4MSwgMHhCOEEwLCAweDQyNzUsIDB4QjhBMSwgMHhCOEZFLCAweDA3MkUsDQotICAgIDB4Qjk0MSwgMHhCOTVBLCAweDQyOTUsIDB4Qjk2MSwgMHhCOTdBLCAweDQyQUYsIDB4Qjk4MSwgMHhCOUEwLCAweDQyQzksDQotICAgIDB4QjlBMSwgMHhCOUZFLCAweDA3OEMsIDB4QkE0MSwgMHhCQTVBLCAweDQyRTksIDB4QkE2MSwgMHhCQTdBLCAweDQzMDMsDQotICAgIDB4QkE4MSwgMHhCQUEwLCAweDQzMUQsIDB4QkFBMSwgMHhCQUZFLCAweDA3RUEsIDB4QkI0MSwgMHhCQjVBLCAweDQzM0QsDQotICAgIDB4QkI2MSwgMHhCQjdBLCAweDQzNTcsIDB4QkI4MSwgMHhCQkEwLCAweDQzNzEsIDB4QkJBMSwgMHhCQkZFLCAweDA4NDgsDQotICAgIDB4QkM0MSwgMHhCQzVBLCAweDQzOTEsIDB4QkM2MSwgMHhCQzdBLCAweDQzQUIsIDB4QkM4MSwgMHhCQ0EwLCAweDQzQzUsDQotICAgIDB4QkNBMSwgMHhCQ0ZFLCAweDA4QTYsIDB4QkQ0MSwgMHhCRDVBLCAweDQzRTUsIDB4QkQ2MSwgMHhCRDdBLCAweDQzRkYsDQotICAgIDB4QkQ4MSwgMHhCREEwLCAweDQ0MTksIDB4QkRBMSwgMHhCREZFLCAweDA5MDQsIDB4QkU0MSwgMHhCRTVBLCAweDQ0MzksDQotICAgIDB4QkU2MSwgMHhCRTdBLCAweDQ0NTMsIDB4QkU4MSwgMHhCRUEwLCAweDQ0NkQsIDB4QkVBMSwgMHhCRUZFLCAweDA5NjIsDQotICAgIDB4QkY0MSwgMHhCRjVBLCAweDQ0OEQsIDB4QkY2MSwgMHhCRjdBLCAweDQ0QTcsIDB4QkY4MSwgMHhCRkEwLCAweDQ0QzEsDQotICAgIDB4QkZBMSwgMHhCRkZFLCAweDA5QzAsIDB4QzA0MSwgMHhDMDVBLCAweDQ0RTEsIDB4QzA2MSwgMHhDMDdBLCAweDQ0RkIsDQotICAgIDB4QzA4MSwgMHhDMEEwLCAweDQ1MTUsIDB4QzBBMSwgMHhDMEZFLCAweDBBMUUsIDB4QzE0MSwgMHhDMTVBLCAweDQ1MzUsDQotICAgIDB4QzE2MSwgMHhDMTdBLCAweDQ1NEYsIDB4QzE4MSwgMHhDMUEwLCAweDQ1NjksIDB4QzFBMSwgMHhDMUZFLCAweDBBN0MsDQotICAgIDB4QzI0MSwgMHhDMjVBLCAweDQ1ODksIDB4QzI2MSwgMHhDMjdBLCAweDQ1QTMsIDB4QzI4MSwgMHhDMkEwLCAweDQ1QkQsDQotICAgIDB4QzJBMSwgMHhDMkZFLCAweDBBREEsIDB4QzM0MSwgMHhDMzVBLCAweDQ1REQsIDB4QzM2MSwgMHhDMzdBLCAweDQ1RjcsDQotICAgIDB4QzM4MSwgMHhDM0EwLCAweDQ2MTEsIDB4QzNBMSwgMHhDM0ZFLCAweDBCMzgsIDB4QzQ0MSwgMHhDNDVBLCAweDQ2MzEsDQotICAgIDB4QzQ2MSwgMHhDNDdBLCAweDQ2NEIsIDB4QzQ4MSwgMHhDNEEwLCAweDQ2NjUsIDB4QzRBMSwgMHhDNEZFLCAweDBCOTYsDQotICAgIDB4QzU0MSwgMHhDNTVBLCAweDQ2ODUsIDB4QzU2MSwgMHhDNTdBLCAweDQ2OUYsIDB4QzU4MSwgMHhDNUEwLCAweDQ2QjksDQotICAgIDB4QzVBMSwgMHhDNUZFLCAweDBCRjQsIDB4QzY0MSwgMHhDNjUyLCAweDQ2RDksIDB4QzZBMSwgMHhDNkZFLCAweDBDNTIsDQotICAgIDB4QzdBMSwgMHhDN0ZFLCAweDBDQjAsIDB4QzhBMSwgMHhDOEZFLCAweDBEMEUsIDB4Q0FBMSwgMHhDQUZFLCAweDBENkMsDQotICAgIDB4Q0JBMSwgMHhDQkNGLCAweDBEQ0EsIDB4Q0JEMCwgMHhDQkQwLCAweDEwMTQsIDB4Q0JEMSwgMHhDQkQ1LCAweDBERjksDQotICAgIDB4Q0JENiwgMHhDQkQ2LCAweDBFNUUsIDB4Q0JENywgMHhDQkU2LCAweDBERkUsIDB4Q0JFNywgMHhDQkU3LCAweDFCOEQsDQotICAgIDB4Q0JFOCwgMHhDQkZFLCAweDBFMEUsIDB4Q0NBMSwgMHhDQ0ZFLCAweDBFMjUsIDB4Q0RBMSwgMHhDRENFLCAweDBFODMsDQotICAgIDB4Q0RDRiwgMHhDRENGLCAweDBEODQsIDB4Q0REMCwgMHhDREU3LCAweDBFQjEsIDB4Q0RFOCwgMHhDREU4LCAweDFFREMsDQotICAgIDB4Q0RFOSwgMHhDREZFLCAweDBFQzksIDB4Q0VBMSwgMHhDRUFDLCAweDBFREYsIDB4Q0VBRCwgMHhDRUFELCAweDBFREEsDQotICAgIDB4Q0VBRSwgMHhDRUZFLCAweDBFRUIsIDB4Q0ZBMSwgMHhDRkZBLCAweDBGM0MsIDB4Q0ZGQiwgMHhDRkZCLCAweDBGM0UsDQotICAgIDB4Q0ZGQywgMHhDRkZFLCAweDBGOTYsIDB4RDBBMSwgMHhEMEExLCAweDBGOTksIDB4RDBBMiwgMHhEMEEyLCAweDBGNkEsDQotICAgIDB4RDBBMywgMHhEMEI3LCAweDBGOUEsIDB4RDBCOCwgMHhEMEI4LCAweDBGNkEsIDB4RDBCOSwgMHhEMENGLCAweDBGQUYsDQotICAgIDB4RDBEMCwgMHhEMEQwLCAweDBFN0MsIDB4RDBEMSwgMHhEMERDLCAweDBGQzYsIDB4RDBERCwgMHhEMERELCAweDEwMjMsDQotICAgIDB4RDBERSwgMHhEMEZFLCAweDBGRDIsIDB4RDFBMSwgMHhEMUQzLCAweDBGRjMsIDB4RDFENCwgMHhEMUQ0LCAweDExMTYsDQotICAgIDB4RDFENSwgMHhEMUQ1LCAweDEwM0MsIDB4RDFENiwgMHhEMUQ3LCAweDEwMjYsIDB4RDFEOCwgMHhEMUQ4LCAweDExMTcsDQotICAgIDB4RDFEOSwgMHhEMURBLCAweDEwMjgsIDB4RDFEQiwgMHhEMUUwLCAweDExMTgsIDB4RDFFMSwgMHhEMUUxLCAweDEwMkEsDQotICAgIDB4RDFFMiwgMHhEMUUyLCAweDE2QTgsIDB4RDFFMywgMHhEMUU1LCAweDExMUUsIDB4RDFFNiwgMHhEMUU2LCAweDExMjIsDQotICAgIDB4RDFFNywgMHhEMUU3LCAweDEwMkIsIDB4RDFFOCwgMHhEMUVCLCAweDExMjMsIDB4RDFFQywgMHhEMUVDLCAweDEwMkMsDQotICAgIDB4RDFFRCwgMHhEMUVELCAweDExMjcsIDB4RDFFRSwgMHhEMUVFLCAweDEwMkQsIDB4RDFFRiwgMHhEMUYwLCAweDExMkEsDQotICAgIDB4RDFGMSwgMHhEMUYxLCAweDEwMkUsIDB4RDFGMiwgMHhEMUYyLCAweDExMkMsIDB4RDFGMywgMHhEMUY1LCAweDEwMkYsDQotICAgIDB4RDFGNiwgMHhEMUY2LCAweDExMkYsIDB4RDFGNywgMHhEMUY5LCAweDEwMzIsIDB4RDFGQSwgMHhEMUZBLCAweDExMzMsDQotICAgIDB4RDFGQiwgMHhEMUZCLCAweDEwMzUsIDB4RDFGQywgMHhEMUZELCAweDExMzYsIDB4RDFGRSwgMHhEMUZFLCAweDExMzksDQotICAgIDB4RDJBMSwgMHhEMkExLCAweDEwMzYsIDB4RDJBMiwgMHhEMkEzLCAweDExM0EsIDB4RDJBNCwgMHhEMkE2LCAweDEwMzcsDQotICAgIDB4RDJBNywgMHhEMkFBLCAweDExM0MsIDB4RDJBQiwgMHhEMkFCLCAweDExNDMsIDB4RDJBQywgMHhEMkFDLCAweDEwM0EsDQotICAgIDB4RDJBRCwgMHhEMkFELCAweDExNDQsIDB4RDJBRSwgMHhEMkIxLCAweDEwM0IsIDB4RDJCMiwgMHhEMkIyLCAweDExNDgsDQotICAgIDB4RDJCMywgMHhEMkJELCAweDEwM0YsIDB4RDJCRSwgMHhEMkJFLCAweDExOUYsIDB4RDJCRiwgMHhEMkMxLCAweDEwNEEsDQotICAgIDB4RDJDMiwgMHhEMkMzLCAweDExQTEsIDB4RDJDNCwgMHhEMkM0LCAweDExQTUsIDB4RDJDNSwgMHhEMkM1LCAweDEwNEQsDQotICAgIDB4RDJDNiwgMHhEMkNBLCAweDExQTYsIDB4RDJDQiwgMHhEMkNCLCAweDExQUMsIDB4RDJDQywgMHhEMkNDLCAweDEwNEUsDQotICAgIDB4RDJDRCwgMHhEMkNFLCAweDExQUQsIDB4RDJDRiwgMHhEMkQ0LCAweDExQjAsIDB4RDJENSwgMHhEMkQ3LCAweDExQjcsDQotICAgIDB4RDJEOCwgMHhEMkQ4LCAweDEwNEYsIDB4RDJEOSwgMHhEMkRBLCAweDExQkQsIDB4RDJEQiwgMHhEMkRELCAweDEwNTAsDQotICAgIDB4RDJERSwgMHhEMkRGLCAweDExQzEsIDB4RDJFMCwgMHhEMkUwLCAweDEwNTMsIDB4RDJFMSwgMHhEMkUxLCAweDExQzMsDQotICAgIDB4RDJFMiwgMHhEMkUyLCAweDExQzYsIDB4RDJFMywgMHhEMkUzLCAweDEwNTQsIDB4RDJFNCwgMHhEMkU0LCAweDExRDQsDQotICAgIDB4RDJFNSwgMHhEMkU4LCAweDExRDYsIDB4RDJFOSwgMHhEMkVBLCAweDExREIsIDB4RDJFQiwgMHhEMkVCLCAweDExRTAsDQotICAgIDB4RDJFQywgMHhEMkVGLCAweDEwNTUsIDB4RDJGMCwgMHhEMkYzLCAweDExRkMsIDB4RDJGNCwgMHhEMkY1LCAweDEyMDEsDQotICAgIDB4RDJGNiwgMHhEMkY2LCAweDEwNTksIDB4RDJGNywgMHhEMkY4LCAweDEyMDMsIDB4RDJGOSwgMHhEMkZFLCAweDEwNUEsDQotICAgIDB4RDNBMSwgMHhEM0ZFLCAweDEwNjAsIDB4RDRBMSwgMHhENEU1LCAweDEwQkUsIDB4RDRFNiwgMHhENEU2LCAweDEwREUsDQotICAgIDB4RDRFNywgMHhENEZCLCAweDExMDMsIDB4RDRGQywgMHhENEZDLCAweDEwMjgsIDB4RDRGRCwgMHhENEZFLCAweDExMTgsDQotICAgIDB4RDVBMSwgMHhENUE0LCAweDExMUEsIDB4RDVBNSwgMHhENUE1LCAweDE2QTgsIDB4RDVBNiwgMHhENUFBLCAweDExMUUsDQotICAgIDB4RDVBQiwgMHhENUFCLCAweDEwMkIsIDB4RDVBQywgMHhENUFELCAweDExMjMsIDB4RDVBRSwgMHhENUFFLCAweDEwNjAsDQotICAgIDB4RDVBRiwgMHhENUZFLCAweDExMjUsIDB4RDZBMSwgMHhENkI3LCAweDExNzUsIDB4RDZCOCwgMHhENkI4LCAweDEwNDcsDQotICAgIDB4RDZCOSwgMHhENkNDLCAweDExOEMsIDB4RDZDRCwgMHhENkNELCAweDEwNEMsIDB4RDZDRSwgMHhENkZFLCAweDExQTAsDQotICAgIDB4RDdBMSwgMHhEN0NBLCAweDExRDEsIDB4RDdDQiwgMHhEN0NCLCAweDE1QjAsIDB4RDdDQywgMHhEN0UzLCAweDExRkIsDQotICAgIDB4RDdFNCwgMHhEN0U0LCAweDE5MTgsIDB4RDdFNSwgMHhEN0ZFLCAweDEyMTMsIDB4RDhBMSwgMHhEOEZFLCAweDEyMkQsDQotICAgIDB4RDlBMSwgMHhEOUZFLCAweDEyOEIsIDB4REFBMSwgMHhEQUZFLCAweDEyRTksIDB4REJBMSwgMHhEQkM0LCAweDEzNDcsDQotICAgIDB4REJDNSwgMHhEQkM1LCAweDE0MUYsIDB4REJDNiwgMHhEQkUzLCAweDEzNkIsIDB4REJFNCwgMHhEQkU0LCAweDEzM0EsDQotICAgIDB4REJFNSwgMHhEQkZFLCAweDEzODksIDB4RENBMSwgMHhEQ0E0LCAweDEzQTMsIDB4RENBNSwgMHhEQ0E1LCAweDFENUUsDQotICAgIDB4RENBNiwgMHhEQ0ZFLCAweDEzQTcsIDB4RERBMSwgMHhEREE0LCAweDE0MDAsIDB4RERBNSwgMHhEREE1LCAweDEzRDcsDQotICAgIDB4RERBNiwgMHhEREQ0LCAweDE0MDQsIDB4RERENSwgMHhEREQ1LCAweDEzRjUsIDB4RERENiwgMHhEREYzLCAweDE0MzMsDQotICAgIDB4RERGNCwgMHhEREY0LCAweDFEQjcsIDB4RERGNSwgMHhEREZFLCAweDE0NTEsIDB4REVBMSwgMHhERUZCLCAweDE0NUIsDQotICAgIDB4REVGQywgMHhERUZDLCAweDE1RDAsIDB4REVGRCwgMHhERUZELCAweDE0QjYsIDB4REVGRSwgMHhERUZFLCAweDE0RjcsDQotICAgIDB4REZBMSwgMHhERkIyLCAweDE0QjcsIDB4REZCMywgMHhERkIzLCAweDFCQUIsIDB4REZCNCwgMHhERkUwLCAweDE0QzksDQotICAgIDB4REZFMSwgMHhERkUxLCAweDE0RjIsIDB4REZFMiwgMHhERkU3LCAweDE0RjYsIDB4REZFOCwgMHhERkU4LCAweDE1NkQsDQotICAgIDB4REZFOSwgMHhERkZFLCAweDE0RkMsIDB4RTBBMSwgMHhFMEYwLCAweDE1MTIsIDB4RTBGMSwgMHhFMEYxLCAweDE3NzEsDQotICAgIDB4RTBGMiwgMHhFMEZFLCAweDE1NjIsIDB4RTFBMSwgMHhFMUFDLCAweDE1NkYsIDB4RTFBRCwgMHhFMUFELCAweDE1NTQsDQotICAgIDB4RTFBRSwgMHhFMUVDLCAweDE1N0IsIDB4RTFFRCwgMHhFMUVELCAweDE0QzUsIDB4RTFFRSwgMHhFMUZFLCAweDE1QkEsDQotICAgIDB4RTJBMSwgMHhFMkZFLCAweDE1Q0IsIDB4RTNBMSwgMHhFM0Y0LCAweDE2MjksIDB4RTNGNSwgMHhFM0Y1LCAweDFCNjEsDQotICAgIDB4RTNGNiwgMHhFM0ZFLCAweDE2N0QsIDB4RTRBMSwgMHhFNEExLCAweDFDQ0EsIDB4RTRBMiwgMHhFNEE4LCAweDE2ODYsDQotICAgIDB4RTRBOSwgMHhFNEE5LCAweDE2MkUsIDB4RTRBQSwgMHhFNEZFLCAweDE2OEQsIDB4RTVBMSwgMHhFNUFELCAweDE2RTIsDQotICAgIDB4RTVBRSwgMHhFNUFFLCAweDE2RjIsIDB4RTVBRiwgMHhFNUIwLCAweDE2RUYsIDB4RTVCMSwgMHhFNUIyLCAweDExNDksDQotICAgIDB4RTVCMywgMHhFNUI4LCAweDE2RjEsIDB4RTVCOSwgMHhFNUI5LCAweDExNEIsIDB4RTVCQSwgMHhFNUJBLCAweDE2RjcsDQotICAgIDB4RTVCQiwgMHhFNUJDLCAweDExNEQsIDB4RTVCRCwgMHhFNUMzLCAweDE2RjgsIDB4RTVDNCwgMHhFNUM0LCAweDExNEYsDQotICAgIDB4RTVDNSwgMHhFNUNELCAweDE2RkYsIDB4RTVDRSwgMHhFNUNFLCAweDExNTMsIDB4RTVDRiwgMHhFNUNGLCAweDE3MDgsDQotICAgIDB4RTVEMCwgMHhFNUQwLCAweDExNTQsIDB4RTVEMSwgMHhFNUQxLCAweDE3MDksIDB4RTVEMiwgMHhFNUQyLCAweDExNTUsDQotICAgIDB4RTVEMywgMHhFNUQ1LCAweDE3MEEsIDB4RTVENiwgMHhFNUQ2LCAweDExNTcsIDB4RTVENywgMHhFNUY5LCAweDE3MEQsDQotICAgIDB4RTVGQSwgMHhFNUZCLCAweDExNUEsIDB4RTVGQywgMHhFNUZDLCAweDEwM0YsIDB4RTVGRCwgMHhFNUZELCAweDE3MzAsDQotICAgIDB4RTVGRSwgMHhFNUZFLCAweDExNUMsIDB4RTZBMSwgMHhFNkExLCAweDExNUYsIDB4RTZBMiwgMHhFNkEzLCAweDE3MzEsDQotICAgIDB4RTZBNCwgMHhFNkE0LCAweDExNjEsIDB4RTZBNSwgMHhFNkE2LCAweDE3MzMsIDB4RTZBNywgMHhFNkE3LCAweDExNjIsDQotICAgIDB4RTZBOCwgMHhFNkFDLCAweDE3MzUsIDB4RTZBRCwgMHhFNkFELCAweDExNjUsIDB4RTZBRSwgMHhFNkFFLCAweDE3M0EsDQotICAgIDB4RTZBRiwgMHhFNkIxLCAweDExNjcsIDB4RTZCMiwgMHhFNkIyLCAweDE3M0IsIDB4RTZCMywgMHhFNkIzLCAweDExNkEsDQotICAgIDB4RTZCNCwgMHhFNkI2LCAweDE3M0MsIDB4RTZCNywgMHhFNkI4LCAweDExNkIsIDB4RTZCOSwgMHhFNkJCLCAweDE3M0YsDQotICAgIDB4RTZCQywgMHhFNkJDLCAweDExNkYsIDB4RTZCRCwgMHhFNkMzLCAweDE3NDIsIDB4RTZDNCwgMHhFNkM0LCAweDEwNDAsDQotICAgIDB4RTZDNSwgMHhFNkM1LCAweDE3NDksIDB4RTZDNiwgMHhFNkM3LCAweDExNzEsIDB4RTZDOCwgMHhFNkM5LCAweDE3NEEsDQotICAgIDB4RTZDQSwgMHhFNkNBLCAweDEwNDEsIDB4RTZDQiwgMHhFNkQxLCAweDE3NEMsIDB4RTZEMiwgMHhFNkQyLCAweDExNzQsDQotICAgIDB4RTZEMywgMHhFNkQ1LCAweDE3NTMsIDB4RTZENiwgMHhFNkQ2LCAweDExNzUsIDB4RTZENywgMHhFNkQ4LCAweDE3NTYsDQotICAgIDB4RTZEOSwgMHhFNkQ5LCAweDExNzYsIDB4RTZEQSwgMHhFNkRCLCAweDE3NTgsIDB4RTZEQywgMHhFNkRDLCAweDEwNDIsDQotICAgIDB4RTZERCwgMHhFNkRFLCAweDE3NUEsIDB4RTZERiwgMHhFNkRGLCAweDExNzcsIDB4RTZFMCwgMHhFNkUwLCAweDE3NUMsDQotICAgIDB4RTZFMSwgMHhFNkUxLCAweDExNzgsIDB4RTZFMiwgMHhFNkUzLCAweDE3NUQsIDB4RTZFNCwgMHhFNkU0LCAweDExN0EsDQotICAgIDB4RTZFNSwgMHhFNkU1LCAweDExNzksIDB4RTZFNiwgMHhFNkU2LCAweDExN0IsIDB4RTZFNywgMHhFNkU3LCAweDE3NUYsDQotICAgIDB4RTZFOCwgMHhFNkU4LCAweDExN0MsIDB4RTZFOSwgMHhFNkU5LCAweDE3NjAsIDB4RTZFQSwgMHhFNkVCLCAweDExN0UsDQotICAgIDB4RTZFQywgMHhFNkVDLCAweDE5MkYsIDB4RTZFRCwgMHhFNkVFLCAweDE3NjEsIDB4RTZFRiwgMHhFNkVGLCAweDExODEsDQotICAgIDB4RTZGMCwgMHhFNkYwLCAweDE3NjMsIDB4RTZGMSwgMHhFNkYxLCAweDExODIsIDB4RTZGMiwgMHhFNkYyLCAweDE1NTQsDQotICAgIDB4RTZGMywgMHhFNkY0LCAweDE3NjQsIDB4RTZGNSwgMHhFNkY1LCAweDExODMsIDB4RTZGNiwgMHhFNkY2LCAweDEwNDMsDQotICAgIDB4RTZGNywgMHhFNkY3LCAweDEwNDYsIDB4RTZGOCwgMHhFNkY4LCAweDE3NjYsIDB4RTZGOSwgMHhFNkY5LCAweDExODUsDQotICAgIDB4RTZGQSwgMHhFNkZFLCAweDE3NjcsIDB4RTdBMSwgMHhFN0ExLCAweDExODcsIDB4RTdBMiwgMHhFN0E1LCAweDE3NkMsDQotICAgIDB4RTdBNiwgMHhFN0E2LCAweDExODgsIDB4RTdBNywgMHhFN0E4LCAweDE3NzAsIDB4RTdBOSwgMHhFN0E5LCAweDExODksDQotICAgIDB4RTdBQSwgMHhFN0FBLCAweDExOEIsIDB4RTdBQiwgMHhFN0FCLCAweDE3NzIsIDB4RTdBQywgMHhFN0FDLCAweDEwNDcsDQotICAgIDB4RTdBRCwgMHhFN0FELCAweDExOEQsIDB4RTdBRSwgMHhFN0FGLCAweDE3NzMsIDB4RTdCMCwgMHhFN0IwLCAweDExOEUsDQotICAgIDB4RTdCMSwgMHhFN0JFLCAweDE3NzUsIDB4RTdCRiwgMHhFN0JGLCAweDExOEYsIDB4RTdDMCwgMHhFN0MwLCAweDE3ODMsDQotICAgIDB4RTdDMSwgMHhFN0MxLCAweDFFNjcsIDB4RTdDMiwgMHhFN0M1LCAweDE3ODQsIDB4RTdDNiwgMHhFN0M2LCAweDExOTEsDQotICAgIDB4RTdDNywgMHhFN0M3LCAweDExOTMsIDB4RTdDOCwgMHhFN0NBLCAweDE3ODgsIDB4RTdDQiwgMHhFN0NCLCAweDExOTUsDQotICAgIDB4RTdDQywgMHhFN0NDLCAweDE3OEIsIDB4RTdDRCwgMHhFN0NELCAweDExOTYsIDB4RTdDRSwgMHhFN0NFLCAweDE3OEMsDQotICAgIDB4RTdDRiwgMHhFN0QwLCAweDExOTcsIDB4RTdEMSwgMHhFN0QyLCAweDE3OEQsIDB4RTdEMywgMHhFN0QzLCAweDExOUEsDQotICAgIDB4RTdENCwgMHhFN0RFLCAweDE3OEYsIDB4RTdERiwgMHhFN0RGLCAweDExOUMsIDB4RTdFMCwgMHhFN0UzLCAweDE3OUEsDQotICAgIDB4RTdFNCwgMHhFN0U0LCAweDExOUQsIDB4RTdFNSwgMHhFN0U1LCAweDE3OUUsIDB4RTdFNiwgMHhFN0U2LCAweDExOUUsDQotICAgIDB4RTdFNywgMHhFN0Y2LCAweDE3OUYsIDB4RTdGNywgMHhFN0Y3LCAweDE2QTUsIDB4RTdGOCwgMHhFN0ZFLCAweDE3QUYsDQotICAgIDB4RThBMSwgMHhFOEU2LCAweDE3QjYsIDB4RThFNywgMHhFOEU4LCAweDExQzcsIDB4RThFOSwgMHhFOEVGLCAweDE3RkMsDQotICAgIDB4RThGMCwgMHhFOEYwLCAweDExQzksIDB4RThGMSwgMHhFOEYxLCAweDEwNTQsIDB4RThGMiwgMHhFOEY2LCAweDE4MDMsDQotICAgIDB4RThGNywgMHhFOEY3LCAweDExQ0IsIDB4RThGOCwgMHhFOEY4LCAweDE4MDgsIDB4RThGOSwgMHhFOEY5LCAweDE2QTgsDQotICAgIDB4RThGQSwgMHhFOEZBLCAweDE4MDksIDB4RThGQiwgMHhFOEZCLCAweDExQ0MsIDB4RThGQywgMHhFOEZELCAweDE4MEEsDQotICAgIDB4RThGRSwgMHhFOEZFLCAweDExQ0QsIDB4RTlBMSwgMHhFOUE2LCAweDE4MEMsIDB4RTlBNywgMHhFOUE3LCAweDExRDAsDQotICAgIDB4RTlBOCwgMHhFOUFCLCAweDE4MTIsIDB4RTlBQywgMHhFOUFDLCAweDExRDEsIDB4RTlBRCwgMHhFOUNCLCAweDE4MTYsDQotICAgIDB4RTlDQywgMHhFOUNDLCAweDExRDMsIDB4RTlDRCwgMHhFOUY2LCAweDE4MzUsIDB4RTlGNywgMHhFOUY3LCAweDFGMzQsDQotICAgIDB4RTlGOCwgMHhFOUZFLCAweDE4NUYsIDB4RUFBMSwgMHhFQUMwLCAweDE4NjYsIDB4RUFDMSwgMHhFQUMxLCAweDE3RUIsDQotICAgIDB4RUFDMiwgMHhFQUU0LCAweDE4ODYsIDB4RUFFNSwgMHhFQUU1LCAweDExRTEsIDB4RUFFNiwgMHhFQUYzLCAweDE4QTksDQotICAgIDB4RUFGNCwgMHhFQUY0LCAweDEwNTcsIDB4RUFGNSwgMHhFQUY2LCAweDE4QjcsIDB4RUFGNywgMHhFQUY3LCAweDExRTMsDQotICAgIDB4RUFGOCwgMHhFQUZCLCAweDE4QjksIDB4RUFGQywgMHhFQUZDLCAweDExRTUsIDB4RUFGRCwgMHhFQUZELCAweDE4QkQsDQotICAgIDB4RUFGRSwgMHhFQUZFLCAweDExRTYsIDB4RUJBMSwgMHhFQkEzLCAweDE4QkUsIDB4RUJBNCwgMHhFQkE0LCAweDExRTgsDQotICAgIDB4RUJBNSwgMHhFQkE2LCAweDE4QzEsIDB4RUJBNywgMHhFQkE3LCAweDExRUEsIDB4RUJBOCwgMHhFQkE4LCAweDE4QzMsDQotICAgIDB4RUJBOSwgMHhFQkE5LCAweDExRUMsIDB4RUJBQSwgMHhFQkFBLCAweDEwNTgsIDB4RUJBQiwgMHhFQkI5LCAweDE4QzQsDQotICAgIDB4RUJCQSwgMHhFQkJCLCAweDExRUUsIDB4RUJCQywgMHhFQkJDLCAweDE4RDMsIDB4RUJCRCwgMHhFQkJELCAweDExRjAsDQotICAgIDB4RUJCRSwgMHhFQkMwLCAweDE4RDQsIDB4RUJDMSwgMHhFQkMxLCAweDExRjEsIDB4RUJDMiwgMHhFQkMyLCAweDExRjMsDQotICAgIDB4RUJDMywgMHhFQkM1LCAweDE4RDcsIDB4RUJDNiwgMHhFQkM3LCAweDExRjQsIDB4RUJDOCwgMHhFQkNCLCAweDE4REEsDQotICAgIDB4RUJDQywgMHhFQkNDLCAweDExRjcsIDB4RUJDRCwgMHhFQkNFLCAweDE4REUsIDB4RUJDRiwgMHhFQkQxLCAweDExRjgsDQotICAgIDB4RUJEMiwgMHhFQkQyLCAweDE1QjAsIDB4RUJEMywgMHhFQkQ3LCAweDE4RTAsIDB4RUJEOCwgMHhFQkQ4LCAweDExRkIsDQotICAgIDB4RUJEOSwgMHhFQkZFLCAweDE4RTUsIDB4RUNBMSwgMHhFQ0E1LCAweDE5MEIsIDB4RUNBNiwgMHhFQ0E2LCAweDEyMDYsDQotICAgIDB4RUNBNywgMHhFQ0E3LCAweDEyMDgsIDB4RUNBOCwgMHhFQ0E5LCAweDE5MTAsIDB4RUNBQSwgMHhFQ0FBLCAweDEyMEEsDQotICAgIDB4RUNBQiwgMHhFQ0FFLCAweDE5MTIsIDB4RUNBRiwgMHhFQ0FGLCAweDE3M0UsIDB4RUNCMCwgMHhFQ0IxLCAweDEyMEMsDQotICAgIDB4RUNCMiwgMHhFQ0IyLCAweDEwNUIsIDB4RUNCMywgMHhFQ0I0LCAweDE5MTYsIDB4RUNCNSwgMHhFQ0I1LCAweDEyMTEsDQotICAgIDB4RUNCNiwgMHhFQ0I3LCAweDE5MTgsIDB4RUNCOCwgMHhFQ0I4LCAweDEyMTMsIDB4RUNCOSwgMHhFQ0I5LCAweDE5MUEsDQotICAgIDB4RUNCQSwgMHhFQ0JBLCAweDEyMTUsIDB4RUNCQiwgMHhFQ0JGLCAweDE5MUIsIDB4RUNDMCwgMHhFQ0MxLCAweDEyMTgsDQotICAgIDB4RUNDMiwgMHhFQ0M0LCAweDE5MjAsIDB4RUNDNSwgMHhFQ0M1LCAweDEyMUEsIDB4RUNDNiwgMHhFQ0M2LCAweDEyMUMsDQotICAgIDB4RUNDNywgMHhFQ0M4LCAweDE5MjMsIDB4RUNDOSwgMHhFQ0NBLCAweDEwNUMsIDB4RUNDQiwgMHhFQ0Q0LCAweDE5MjUsDQotICAgIDB4RUNENSwgMHhFQ0Q1LCAweDEyMUUsIDB4RUNENiwgMHhFQ0RDLCAweDE5MkYsIDB4RUNERCwgMHhFQ0RFLCAweDEyMjAsDQotICAgIDB4RUNERiwgMHhFQ0UwLCAweDE5MzYsIDB4RUNFMSwgMHhFQ0UxLCAweDEyMjIsIDB4RUNFMiwgMHhFQ0UzLCAweDE5MzgsDQotICAgIDB4RUNFNCwgMHhFQ0U0LCAweDEyMjQsIDB4RUNFNSwgMHhFQ0U2LCAweDE5M0EsIDB4RUNFNywgMHhFQ0U4LCAweDEyMjUsDQotICAgIDB4RUNFOSwgMHhFQ0Y2LCAweDE5M0MsIDB4RUNGNywgMHhFQ0Y4LCAweDEyMjcsIDB4RUNGOSwgMHhFQ0Y5LCAweDE5NEEsDQotICAgIDB4RUNGQSwgMHhFQ0ZBLCAweDEyMkEsIDB4RUNGQiwgMHhFQ0ZFLCAweDE5NEIsIDB4RURBMSwgMHhFREEzLCAweDEyMkQsDQotICAgIDB4RURBNCwgMHhFREVELCAweDE5NEYsIDB4RURFRSwgMHhFREVFLCAweDE0RTcsIDB4RURFRiwgMHhFREZFLCAweDE5OTksDQotICAgIDB4RUVBMSwgMHhFRURBLCAweDE5QTksIDB4RUVEQiwgMHhFRURCLCAweDE5NUUsIDB4RUVEQywgMHhFRUZFLCAweDE5RTMsDQotICAgIDB4RUZBMSwgMHhFRkZFLCAweDFBMDYsIDB4RjBBMSwgMHhGMEZFLCAweDFBNjQsIDB4RjFBMSwgMHhGMUZFLCAweDFBQzIsDQotICAgIDB4RjJBMSwgMHhGMkJDLCAweDFCMjAsIDB4RjJCRCwgMHhGMkJELCAweDE2NjMsIDB4RjJCRSwgMHhGMkY5LCAweDFCM0MsDQotICAgIDB4RjJGQSwgMHhGMkZBLCAweDE2OEIsIDB4RjJGQiwgMHhGMkZFLCAweDFCNzgsIDB4RjNBMSwgMHhGM0IwLCAweDFCN0MsDQotICAgIDB4RjNCMSwgMHhGM0IxLCAweDEwNUYsIDB4RjNCMiwgMHhGM0ZFLCAweDFCOEMsIDB4RjRBMSwgMHhGNEE2LCAweDFCRDksDQotICAgIDB4RjRBNywgMHhGNEE3LCAweDE5NTQsIDB4RjRBOCwgMHhGNEVELCAweDFCREYsIDB4RjRFRSwgMHhGNEVFLCAweDFBMUMsDQotICAgIDB4RjRFRiwgMHhGNEZFLCAweDFDMjUsIDB4RjVBMSwgMHhGNUZFLCAweDFDMzUsIDB4RjZBMSwgMHhGNkYzLCAweDFDOTMsDQotICAgIDB4RjZGNCwgMHhGNkY0LCAweDEwQjcsIDB4RjZGNSwgMHhGNkY1LCAweDFDRTYsIDB4RjZGNiwgMHhGNkY2LCAweDFCRTMsDQotICAgIDB4RjZGNywgMHhGNkZFLCAweDFDRTcsIDB4RjdBMSwgMHhGN0I3LCAweDFDRUYsIDB4RjdCOCwgMHhGN0I4LCAweDEwOTcsDQotICAgIDB4RjdCOSwgMHhGN0M3LCAweDFEMDYsIDB4RjdDOCwgMHhGN0M4LCAweDEwQUEsIDB4RjdDOSwgMHhGN0QyLCAweDFEMTUsDQotICAgIDB4RjdEMywgMHhGN0QzLCAweDEwRjQsIDB4RjdENCwgMHhGN0ZFLCAweDFEMUYsIDB4RjhBMSwgMHhGOERBLCAweDFENEEsDQotICAgIDB4RjhEQiwgMHhGOERCLCAweDFEOTQsIDB4RjhEQywgMHhGOEVGLCAweDFEODQsIDB4RjhGMCwgMHhGOEYwLCAweDEzRTAsDQotICAgIDB4RjhGMSwgMHhGOEZFLCAweDFEOTgsIDB4RjlBMSwgMHhGOUZFLCAweDFEQTYsIDB4RkFBMSwgMHhGQUExLCAweDFFMUQsDQotICAgIDB4RkFBMiwgMHhGQUEyLCAweDBERTYsIDB4RkFBMywgMHhGQUU1LCAweDFFMDQsIDB4RkFFNiwgMHhGQUU2LCAweDBFM0MsDQotICAgIDB4RkFFNywgMHhGQUZFLCAweDFFNDcsIDB4RkJBMSwgMHhGQkZFLCAweDFFNUYsIDB4RkNBMSwgMHhGQ0E4LCAweDFFQkQsDQotICAgIDB4RkNBOSwgMHhGQ0E5LCAweDBFRTcsIDB4RkNBQSwgMHhGQ0ZFLCAweDFFQzUsIDB4RkRBMSwgMHhGREZFLCAweDFGMUEsDQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfS1NDbXNfVUhDX0hXX0hfMVs2NzUgKiAzXSA9IHsKKyAgICAweDAwMjAsIDB4MDA3RSwgMHgxRjlFLCAweDgxNDEsIDB4ODE1QSwgMHgyNDc1LCAweDgxNjEsIDB4ODE3QSwgMHgyNDhGLAorICAgIDB4ODE4MSwgMHg4MUZFLCAweDI0QTksIDB4ODI0MSwgMHg4MjVBLCAweDI1MjcsIDB4ODI2MSwgMHg4MjdBLCAweDI1NDEsCisgICAgMHg4MjgxLCAweDgyRkUsIDB4MjU1QiwgMHg4MzQxLCAweDgzNUEsIDB4MjVEOSwgMHg4MzYxLCAweDgzN0EsIDB4MjVGMywKKyAgICAweDgzODEsIDB4ODNGRSwgMHgyNjBELCAweDg0NDEsIDB4ODQ1QSwgMHgyNjhCLCAweDg0NjEsIDB4ODQ3QSwgMHgyNkE1LAorICAgIDB4ODQ4MSwgMHg4NEZFLCAweDI2QkYsIDB4ODU0MSwgMHg4NTVBLCAweDI3M0QsIDB4ODU2MSwgMHg4NTdBLCAweDI3NTcsCisgICAgMHg4NTgxLCAweDg1RkUsIDB4Mjc3MSwgMHg4NjQxLCAweDg2NUEsIDB4MjdFRiwgMHg4NjYxLCAweDg2N0EsIDB4MjgwOSwKKyAgICAweDg2ODEsIDB4ODZGRSwgMHgyODIzLCAweDg3NDEsIDB4ODc1QSwgMHgyOEExLCAweDg3NjEsIDB4ODc3QSwgMHgyOEJCLAorICAgIDB4ODc4MSwgMHg4N0ZFLCAweDI4RDUsIDB4ODg0MSwgMHg4ODVBLCAweDI5NTMsIDB4ODg2MSwgMHg4ODdBLCAweDI5NkQsCisgICAgMHg4ODgxLCAweDg4RkUsIDB4Mjk4NywgMHg4OTQxLCAweDg5NUEsIDB4MkEwNSwgMHg4OTYxLCAweDg5N0EsIDB4MkExRiwKKyAgICAweDg5ODEsIDB4ODlGRSwgMHgyQTM5LCAweDhBNDEsIDB4OEE1QSwgMHgyQUI3LCAweDhBNjEsIDB4OEE3QSwgMHgyQUQxLAorICAgIDB4OEE4MSwgMHg4QUZFLCAweDJBRUIsIDB4OEI0MSwgMHg4QjVBLCAweDJCNjksIDB4OEI2MSwgMHg4QjdBLCAweDJCODMsCisgICAgMHg4QjgxLCAweDhCRkUsIDB4MkI5RCwgMHg4QzQxLCAweDhDNUEsIDB4MkMxQiwgMHg4QzYxLCAweDhDN0EsIDB4MkMzNSwKKyAgICAweDhDODEsIDB4OENGRSwgMHgyQzRGLCAweDhENDEsIDB4OEQ1QSwgMHgyQ0NELCAweDhENjEsIDB4OEQ3QSwgMHgyQ0U3LAorICAgIDB4OEQ4MSwgMHg4REZFLCAweDJEMDEsIDB4OEU0MSwgMHg4RTVBLCAweDJEN0YsIDB4OEU2MSwgMHg4RTdBLCAweDJEOTksCisgICAgMHg4RTgxLCAweDhFRkUsIDB4MkRCMywgMHg4RjQxLCAweDhGNUEsIDB4MkUzMSwgMHg4RjYxLCAweDhGN0EsIDB4MkU0QiwKKyAgICAweDhGODEsIDB4OEZGRSwgMHgyRTY1LCAweDkwNDEsIDB4OTA1QSwgMHgyRUUzLCAweDkwNjEsIDB4OTA3QSwgMHgyRUZELAorICAgIDB4OTA4MSwgMHg5MEZFLCAweDJGMTcsIDB4OTE0MSwgMHg5MTVBLCAweDJGOTUsIDB4OTE2MSwgMHg5MTdBLCAweDJGQUYsCisgICAgMHg5MTgxLCAweDkxRkUsIDB4MkZDOSwgMHg5MjQxLCAweDkyNUEsIDB4MzA0NywgMHg5MjYxLCAweDkyN0EsIDB4MzA2MSwKKyAgICAweDkyODEsIDB4OTJGRSwgMHgzMDdCLCAweDkzNDEsIDB4OTM1QSwgMHgzMEY5LCAweDkzNjEsIDB4OTM3QSwgMHgzMTEzLAorICAgIDB4OTM4MSwgMHg5M0ZFLCAweDMxMkQsIDB4OTQ0MSwgMHg5NDVBLCAweDMxQUIsIDB4OTQ2MSwgMHg5NDdBLCAweDMxQzUsCisgICAgMHg5NDgxLCAweDk0RkUsIDB4MzFERiwgMHg5NTQxLCAweDk1NUEsIDB4MzI1RCwgMHg5NTYxLCAweDk1N0EsIDB4MzI3NywKKyAgICAweDk1ODEsIDB4OTVGRSwgMHgzMjkxLCAweDk2NDEsIDB4OTY1QSwgMHgzMzBGLCAweDk2NjEsIDB4OTY3QSwgMHgzMzI5LAorICAgIDB4OTY4MSwgMHg5NkZFLCAweDMzNDMsIDB4OTc0MSwgMHg5NzVBLCAweDMzQzEsIDB4OTc2MSwgMHg5NzdBLCAweDMzREIsCisgICAgMHg5NzgxLCAweDk3RkUsIDB4MzNGNSwgMHg5ODQxLCAweDk4NUEsIDB4MzQ3MywgMHg5ODYxLCAweDk4N0EsIDB4MzQ4RCwKKyAgICAweDk4ODEsIDB4OThGRSwgMHgzNEE3LCAweDk5NDEsIDB4OTk1QSwgMHgzNTI1LCAweDk5NjEsIDB4OTk3QSwgMHgzNTNGLAorICAgIDB4OTk4MSwgMHg5OUZFLCAweDM1NTksIDB4OUE0MSwgMHg5QTVBLCAweDM1RDcsIDB4OUE2MSwgMHg5QTdBLCAweDM1RjEsCisgICAgMHg5QTgxLCAweDlBRkUsIDB4MzYwQiwgMHg5QjQxLCAweDlCNUEsIDB4MzY4OSwgMHg5QjYxLCAweDlCN0EsIDB4MzZBMywKKyAgICAweDlCODEsIDB4OUJGRSwgMHgzNkJELCAweDlDNDEsIDB4OUM1QSwgMHgzNzNCLCAweDlDNjEsIDB4OUM3QSwgMHgzNzU1LAorICAgIDB4OUM4MSwgMHg5Q0ZFLCAweDM3NkYsIDB4OUQ0MSwgMHg5RDVBLCAweDM3RUQsIDB4OUQ2MSwgMHg5RDdBLCAweDM4MDcsCisgICAgMHg5RDgxLCAweDlERkUsIDB4MzgyMSwgMHg5RTQxLCAweDlFNUEsIDB4Mzg5RiwgMHg5RTYxLCAweDlFN0EsIDB4MzhCOSwKKyAgICAweDlFODEsIDB4OUVGRSwgMHgzOEQzLCAweDlGNDEsIDB4OUY1QSwgMHgzOTUxLCAweDlGNjEsIDB4OUY3QSwgMHgzOTZCLAorICAgIDB4OUY4MSwgMHg5RkZFLCAweDM5ODUsIDB4QTA0MSwgMHhBMDVBLCAweDNBMDMsIDB4QTA2MSwgMHhBMDdBLCAweDNBMUQsCisgICAgMHhBMDgxLCAweEEwRkUsIDB4M0EzNywgMHhBMTQxLCAweEExNUEsIDB4M0FCNSwgMHhBMTYxLCAweEExN0EsIDB4M0FDRiwKKyAgICAweEExODEsIDB4QTFBMCwgMHgzQUU5LCAweEExQTEsIDB4QTFGRSwgMHgwMDY1LCAweEEyNDEsIDB4QTI1QSwgMHgzQjA5LAorICAgIDB4QTI2MSwgMHhBMjdBLCAweDNCMjMsIDB4QTI4MSwgMHhBMkEwLCAweDNCM0QsIDB4QTJBMSwgMHhBMkU1LCAweDAwQzMsCisgICAgMHhBMzQxLCAweEEzNUEsIDB4M0I1RCwgMHhBMzYxLCAweEEzN0EsIDB4M0I3NywgMHhBMzgxLCAweEEzQTAsIDB4M0I5MSwKKyAgICAweEEzQTEsIDB4QTNGRSwgMHgwMTA4LCAweEE0NDEsIDB4QTQ1QSwgMHgzQkIxLCAweEE0NjEsIDB4QTQ3QSwgMHgzQkNCLAorICAgIDB4QTQ4MSwgMHhBNEEwLCAweDNCRTUsIDB4QTRBMSwgMHhBNEQzLCAweDAxNjYsIDB4QTRENSwgMHhBNEZFLCAweDAxOTksCisgICAgMHhBNTQxLCAweEE1NUEsIDB4M0MwNSwgMHhBNTYxLCAweEE1N0EsIDB4M0MxRiwgMHhBNTgxLCAweEE1QTAsIDB4M0MzOSwKKyAgICAweEE1QTEsIDB4QTVBQSwgMHgwMUMzLCAweEE1QjAsIDB4QTVCOSwgMHgwMUNELCAweEE1QzEsIDB4QTVEOCwgMHgwMUQ3LAorICAgIDB4QTVFMSwgMHhBNUY4LCAweDAxRUYsIDB4QTY0MSwgMHhBNjVBLCAweDNDNTksIDB4QTY2MSwgMHhBNjdBLCAweDNDNzMsCisgICAgMHhBNjgxLCAweEE2QTAsIDB4M0M4RCwgMHhBNkExLCAweEE2RTQsIDB4MDIwNywgMHhBNzQxLCAweEE3NUEsIDB4M0NBRCwKKyAgICAweEE3NjEsIDB4QTc3QSwgMHgzQ0M3LCAweEE3ODEsIDB4QTdBMCwgMHgzQ0UxLCAweEE3QTEsIDB4QTdFRiwgMHgwMjRCLAorICAgIDB4QTg0MSwgMHhBODVBLCAweDNEMDEsIDB4QTg2MSwgMHhBODdBLCAweDNEMUIsIDB4QTg4MSwgMHhBOEEwLCAweDNEMzUsCisgICAgMHhBOEExLCAweEE4QTQsIDB4MDI5QSwgMHhBOEE2LCAweEE4QTYsIDB4MDI5RSwgMHhBOEE4LCAweEE4QUYsIDB4MDI5RiwKKyAgICAweEE4QjEsIDB4QThGRSwgMHgwMkE3LCAweEE5NDEsIDB4QTk1QSwgMHgzRDU1LCAweEE5NjEsIDB4QTk3QSwgMHgzRDZGLAorICAgIDB4QTk4MSwgMHhBOUEwLCAweDNEODksIDB4QTlBMSwgMHhBOUZFLCAweDAyRjUsIDB4QUE0MSwgMHhBQTVBLCAweDNEQTksCisgICAgMHhBQTYxLCAweEFBN0EsIDB4M0RDMywgMHhBQTgxLCAweEFBQTAsIDB4M0RERCwgMHhBQUExLCAweEFBRjMsIDB4MDM1MywKKyAgICAweEFCNDEsIDB4QUI1QSwgMHgzREZELCAweEFCNjEsIDB4QUI3QSwgMHgzRTE3LCAweEFCODEsIDB4QUJBMCwgMHgzRTMxLAorICAgIDB4QUJBMSwgMHhBQkY2LCAweDAzQTYsIDB4QUM0MSwgMHhBQzVBLCAweDNFNTEsIDB4QUM2MSwgMHhBQzdBLCAweDNFNkIsCisgICAgMHhBQzgxLCAweEFDQTAsIDB4M0U4NSwgMHhBQ0ExLCAweEFDQzEsIDB4MDNGQywgMHhBQ0QxLCAweEFDRjEsIDB4MDQxRCwKKyAgICAweEFENDEsIDB4QUQ1QSwgMHgzRUE1LCAweEFENjEsIDB4QUQ3QSwgMHgzRUJGLCAweEFEODEsIDB4QURBMCwgMHgzRUQ5LAorICAgIDB4QUU0MSwgMHhBRTVBLCAweDNFRjksIDB4QUU2MSwgMHhBRTdBLCAweDNGMTMsIDB4QUU4MSwgMHhBRUEwLCAweDNGMkQsCisgICAgMHhBRjQxLCAweEFGNUEsIDB4M0Y0RCwgMHhBRjYxLCAweEFGN0EsIDB4M0Y2NywgMHhBRjgxLCAweEFGQTAsIDB4M0Y4MSwKKyAgICAweEIwNDEsIDB4QjA1QSwgMHgzRkExLCAweEIwNjEsIDB4QjA3QSwgMHgzRkJCLCAweEIwODEsIDB4QjBBMCwgMHgzRkQ1LAorICAgIDB4QjBBMSwgMHhCMEZFLCAweDA0M0UsIDB4QjE0MSwgMHhCMTVBLCAweDNGRjUsIDB4QjE2MSwgMHhCMTdBLCAweDQwMEYsCisgICAgMHhCMTgxLCAweEIxQTAsIDB4NDAyOSwgMHhCMUExLCAweEIxRkUsIDB4MDQ5QywgMHhCMjQxLCAweEIyNUEsIDB4NDA0OSwKKyAgICAweEIyNjEsIDB4QjI3QSwgMHg0MDYzLCAweEIyODEsIDB4QjJBMCwgMHg0MDdELCAweEIyQTEsIDB4QjJGRSwgMHgwNEZBLAorICAgIDB4QjM0MSwgMHhCMzVBLCAweDQwOUQsIDB4QjM2MSwgMHhCMzdBLCAweDQwQjcsIDB4QjM4MSwgMHhCM0EwLCAweDQwRDEsCisgICAgMHhCM0ExLCAweEIzRkUsIDB4MDU1OCwgMHhCNDQxLCAweEI0NUEsIDB4NDBGMSwgMHhCNDYxLCAweEI0N0EsIDB4NDEwQiwKKyAgICAweEI0ODEsIDB4QjRBMCwgMHg0MTI1LCAweEI0QTEsIDB4QjRGRSwgMHgwNUI2LCAweEI1NDEsIDB4QjU1QSwgMHg0MTQ1LAorICAgIDB4QjU2MSwgMHhCNTdBLCAweDQxNUYsIDB4QjU4MSwgMHhCNUEwLCAweDQxNzksIDB4QjVBMSwgMHhCNUZFLCAweDA2MTQsCisgICAgMHhCNjQxLCAweEI2NUEsIDB4NDE5OSwgMHhCNjYxLCAweEI2N0EsIDB4NDFCMywgMHhCNjgxLCAweEI2QTAsIDB4NDFDRCwKKyAgICAweEI2QTEsIDB4QjZGRSwgMHgwNjcyLCAweEI3NDEsIDB4Qjc1QSwgMHg0MUVELCAweEI3NjEsIDB4Qjc3QSwgMHg0MjA3LAorICAgIDB4Qjc4MSwgMHhCN0EwLCAweDQyMjEsIDB4QjdBMSwgMHhCN0ZFLCAweDA2RDAsIDB4Qjg0MSwgMHhCODVBLCAweDQyNDEsCisgICAgMHhCODYxLCAweEI4N0EsIDB4NDI1QiwgMHhCODgxLCAweEI4QTAsIDB4NDI3NSwgMHhCOEExLCAweEI4RkUsIDB4MDcyRSwKKyAgICAweEI5NDEsIDB4Qjk1QSwgMHg0Mjk1LCAweEI5NjEsIDB4Qjk3QSwgMHg0MkFGLCAweEI5ODEsIDB4QjlBMCwgMHg0MkM5LAorICAgIDB4QjlBMSwgMHhCOUZFLCAweDA3OEMsIDB4QkE0MSwgMHhCQTVBLCAweDQyRTksIDB4QkE2MSwgMHhCQTdBLCAweDQzMDMsCisgICAgMHhCQTgxLCAweEJBQTAsIDB4NDMxRCwgMHhCQUExLCAweEJBRkUsIDB4MDdFQSwgMHhCQjQxLCAweEJCNUEsIDB4NDMzRCwKKyAgICAweEJCNjEsIDB4QkI3QSwgMHg0MzU3LCAweEJCODEsIDB4QkJBMCwgMHg0MzcxLCAweEJCQTEsIDB4QkJGRSwgMHgwODQ4LAorICAgIDB4QkM0MSwgMHhCQzVBLCAweDQzOTEsIDB4QkM2MSwgMHhCQzdBLCAweDQzQUIsIDB4QkM4MSwgMHhCQ0EwLCAweDQzQzUsCisgICAgMHhCQ0ExLCAweEJDRkUsIDB4MDhBNiwgMHhCRDQxLCAweEJENUEsIDB4NDNFNSwgMHhCRDYxLCAweEJEN0EsIDB4NDNGRiwKKyAgICAweEJEODEsIDB4QkRBMCwgMHg0NDE5LCAweEJEQTEsIDB4QkRGRSwgMHgwOTA0LCAweEJFNDEsIDB4QkU1QSwgMHg0NDM5LAorICAgIDB4QkU2MSwgMHhCRTdBLCAweDQ0NTMsIDB4QkU4MSwgMHhCRUEwLCAweDQ0NkQsIDB4QkVBMSwgMHhCRUZFLCAweDA5NjIsCisgICAgMHhCRjQxLCAweEJGNUEsIDB4NDQ4RCwgMHhCRjYxLCAweEJGN0EsIDB4NDRBNywgMHhCRjgxLCAweEJGQTAsIDB4NDRDMSwKKyAgICAweEJGQTEsIDB4QkZGRSwgMHgwOUMwLCAweEMwNDEsIDB4QzA1QSwgMHg0NEUxLCAweEMwNjEsIDB4QzA3QSwgMHg0NEZCLAorICAgIDB4QzA4MSwgMHhDMEEwLCAweDQ1MTUsIDB4QzBBMSwgMHhDMEZFLCAweDBBMUUsIDB4QzE0MSwgMHhDMTVBLCAweDQ1MzUsCisgICAgMHhDMTYxLCAweEMxN0EsIDB4NDU0RiwgMHhDMTgxLCAweEMxQTAsIDB4NDU2OSwgMHhDMUExLCAweEMxRkUsIDB4MEE3QywKKyAgICAweEMyNDEsIDB4QzI1QSwgMHg0NTg5LCAweEMyNjEsIDB4QzI3QSwgMHg0NUEzLCAweEMyODEsIDB4QzJBMCwgMHg0NUJELAorICAgIDB4QzJBMSwgMHhDMkZFLCAweDBBREEsIDB4QzM0MSwgMHhDMzVBLCAweDQ1REQsIDB4QzM2MSwgMHhDMzdBLCAweDQ1RjcsCisgICAgMHhDMzgxLCAweEMzQTAsIDB4NDYxMSwgMHhDM0ExLCAweEMzRkUsIDB4MEIzOCwgMHhDNDQxLCAweEM0NUEsIDB4NDYzMSwKKyAgICAweEM0NjEsIDB4QzQ3QSwgMHg0NjRCLCAweEM0ODEsIDB4QzRBMCwgMHg0NjY1LCAweEM0QTEsIDB4QzRGRSwgMHgwQjk2LAorICAgIDB4QzU0MSwgMHhDNTVBLCAweDQ2ODUsIDB4QzU2MSwgMHhDNTdBLCAweDQ2OUYsIDB4QzU4MSwgMHhDNUEwLCAweDQ2QjksCisgICAgMHhDNUExLCAweEM1RkUsIDB4MEJGNCwgMHhDNjQxLCAweEM2NTIsIDB4NDZEOSwgMHhDNkExLCAweEM2RkUsIDB4MEM1MiwKKyAgICAweEM3QTEsIDB4QzdGRSwgMHgwQ0IwLCAweEM4QTEsIDB4QzhGRSwgMHgwRDBFLCAweENBQTEsIDB4Q0FGRSwgMHgwRDZDLAorICAgIDB4Q0JBMSwgMHhDQkNGLCAweDBEQ0EsIDB4Q0JEMCwgMHhDQkQwLCAweDEwMTQsIDB4Q0JEMSwgMHhDQkQ1LCAweDBERjksCisgICAgMHhDQkQ2LCAweENCRDYsIDB4MEU1RSwgMHhDQkQ3LCAweENCRTYsIDB4MERGRSwgMHhDQkU3LCAweENCRTcsIDB4MUI4RCwKKyAgICAweENCRTgsIDB4Q0JGRSwgMHgwRTBFLCAweENDQTEsIDB4Q0NGRSwgMHgwRTI1LCAweENEQTEsIDB4Q0RDRSwgMHgwRTgzLAorICAgIDB4Q0RDRiwgMHhDRENGLCAweDBEODQsIDB4Q0REMCwgMHhDREU3LCAweDBFQjEsIDB4Q0RFOCwgMHhDREU4LCAweDFFREMsCisgICAgMHhDREU5LCAweENERkUsIDB4MEVDOSwgMHhDRUExLCAweENFQUMsIDB4MEVERiwgMHhDRUFELCAweENFQUQsIDB4MEVEQSwKKyAgICAweENFQUUsIDB4Q0VGRSwgMHgwRUVCLCAweENGQTEsIDB4Q0ZGQSwgMHgwRjNDLCAweENGRkIsIDB4Q0ZGQiwgMHgwRjNFLAorICAgIDB4Q0ZGQywgMHhDRkZFLCAweDBGOTYsIDB4RDBBMSwgMHhEMEExLCAweDBGOTksIDB4RDBBMiwgMHhEMEEyLCAweDBGNkEsCisgICAgMHhEMEEzLCAweEQwQjcsIDB4MEY5QSwgMHhEMEI4LCAweEQwQjgsIDB4MEY2QSwgMHhEMEI5LCAweEQwQ0YsIDB4MEZBRiwKKyAgICAweEQwRDAsIDB4RDBEMCwgMHgwRTdDLCAweEQwRDEsIDB4RDBEQywgMHgwRkM2LCAweEQwREQsIDB4RDBERCwgMHgxMDIzLAorICAgIDB4RDBERSwgMHhEMEZFLCAweDBGRDIsIDB4RDFBMSwgMHhEMUQzLCAweDBGRjMsIDB4RDFENCwgMHhEMUQ0LCAweDExMTYsCisgICAgMHhEMUQ1LCAweEQxRDUsIDB4MTAzQywgMHhEMUQ2LCAweEQxRDcsIDB4MTAyNiwgMHhEMUQ4LCAweEQxRDgsIDB4MTExNywKKyAgICAweEQxRDksIDB4RDFEQSwgMHgxMDI4LCAweEQxREIsIDB4RDFFMCwgMHgxMTE4LCAweEQxRTEsIDB4RDFFMSwgMHgxMDJBLAorICAgIDB4RDFFMiwgMHhEMUUyLCAweDE2QTgsIDB4RDFFMywgMHhEMUU1LCAweDExMUUsIDB4RDFFNiwgMHhEMUU2LCAweDExMjIsCisgICAgMHhEMUU3LCAweEQxRTcsIDB4MTAyQiwgMHhEMUU4LCAweEQxRUIsIDB4MTEyMywgMHhEMUVDLCAweEQxRUMsIDB4MTAyQywKKyAgICAweEQxRUQsIDB4RDFFRCwgMHgxMTI3LCAweEQxRUUsIDB4RDFFRSwgMHgxMDJELCAweEQxRUYsIDB4RDFGMCwgMHgxMTJBLAorICAgIDB4RDFGMSwgMHhEMUYxLCAweDEwMkUsIDB4RDFGMiwgMHhEMUYyLCAweDExMkMsIDB4RDFGMywgMHhEMUY1LCAweDEwMkYsCisgICAgMHhEMUY2LCAweEQxRjYsIDB4MTEyRiwgMHhEMUY3LCAweEQxRjksIDB4MTAzMiwgMHhEMUZBLCAweEQxRkEsIDB4MTEzMywKKyAgICAweEQxRkIsIDB4RDFGQiwgMHgxMDM1LCAweEQxRkMsIDB4RDFGRCwgMHgxMTM2LCAweEQxRkUsIDB4RDFGRSwgMHgxMTM5LAorICAgIDB4RDJBMSwgMHhEMkExLCAweDEwMzYsIDB4RDJBMiwgMHhEMkEzLCAweDExM0EsIDB4RDJBNCwgMHhEMkE2LCAweDEwMzcsCisgICAgMHhEMkE3LCAweEQyQUEsIDB4MTEzQywgMHhEMkFCLCAweEQyQUIsIDB4MTE0MywgMHhEMkFDLCAweEQyQUMsIDB4MTAzQSwKKyAgICAweEQyQUQsIDB4RDJBRCwgMHgxMTQ0LCAweEQyQUUsIDB4RDJCMSwgMHgxMDNCLCAweEQyQjIsIDB4RDJCMiwgMHgxMTQ4LAorICAgIDB4RDJCMywgMHhEMkJELCAweDEwM0YsIDB4RDJCRSwgMHhEMkJFLCAweDExOUYsIDB4RDJCRiwgMHhEMkMxLCAweDEwNEEsCisgICAgMHhEMkMyLCAweEQyQzMsIDB4MTFBMSwgMHhEMkM0LCAweEQyQzQsIDB4MTFBNSwgMHhEMkM1LCAweEQyQzUsIDB4MTA0RCwKKyAgICAweEQyQzYsIDB4RDJDQSwgMHgxMUE2LCAweEQyQ0IsIDB4RDJDQiwgMHgxMUFDLCAweEQyQ0MsIDB4RDJDQywgMHgxMDRFLAorICAgIDB4RDJDRCwgMHhEMkNFLCAweDExQUQsIDB4RDJDRiwgMHhEMkQ0LCAweDExQjAsIDB4RDJENSwgMHhEMkQ3LCAweDExQjcsCisgICAgMHhEMkQ4LCAweEQyRDgsIDB4MTA0RiwgMHhEMkQ5LCAweEQyREEsIDB4MTFCRCwgMHhEMkRCLCAweEQyREQsIDB4MTA1MCwKKyAgICAweEQyREUsIDB4RDJERiwgMHgxMUMxLCAweEQyRTAsIDB4RDJFMCwgMHgxMDUzLCAweEQyRTEsIDB4RDJFMSwgMHgxMUMzLAorICAgIDB4RDJFMiwgMHhEMkUyLCAweDExQzYsIDB4RDJFMywgMHhEMkUzLCAweDEwNTQsIDB4RDJFNCwgMHhEMkU0LCAweDExRDQsCisgICAgMHhEMkU1LCAweEQyRTgsIDB4MTFENiwgMHhEMkU5LCAweEQyRUEsIDB4MTFEQiwgMHhEMkVCLCAweEQyRUIsIDB4MTFFMCwKKyAgICAweEQyRUMsIDB4RDJFRiwgMHgxMDU1LCAweEQyRjAsIDB4RDJGMywgMHgxMUZDLCAweEQyRjQsIDB4RDJGNSwgMHgxMjAxLAorICAgIDB4RDJGNiwgMHhEMkY2LCAweDEwNTksIDB4RDJGNywgMHhEMkY4LCAweDEyMDMsIDB4RDJGOSwgMHhEMkZFLCAweDEwNUEsCisgICAgMHhEM0ExLCAweEQzRkUsIDB4MTA2MCwgMHhENEExLCAweEQ0RTUsIDB4MTBCRSwgMHhENEU2LCAweEQ0RTYsIDB4MTBERSwKKyAgICAweEQ0RTcsIDB4RDRGQiwgMHgxMTAzLCAweEQ0RkMsIDB4RDRGQywgMHgxMDI4LCAweEQ0RkQsIDB4RDRGRSwgMHgxMTE4LAorICAgIDB4RDVBMSwgMHhENUE0LCAweDExMUEsIDB4RDVBNSwgMHhENUE1LCAweDE2QTgsIDB4RDVBNiwgMHhENUFBLCAweDExMUUsCisgICAgMHhENUFCLCAweEQ1QUIsIDB4MTAyQiwgMHhENUFDLCAweEQ1QUQsIDB4MTEyMywgMHhENUFFLCAweEQ1QUUsIDB4MTA2MCwKKyAgICAweEQ1QUYsIDB4RDVGRSwgMHgxMTI1LCAweEQ2QTEsIDB4RDZCNywgMHgxMTc1LCAweEQ2QjgsIDB4RDZCOCwgMHgxMDQ3LAorICAgIDB4RDZCOSwgMHhENkNDLCAweDExOEMsIDB4RDZDRCwgMHhENkNELCAweDEwNEMsIDB4RDZDRSwgMHhENkZFLCAweDExQTAsCisgICAgMHhEN0ExLCAweEQ3Q0EsIDB4MTFEMSwgMHhEN0NCLCAweEQ3Q0IsIDB4MTVCMCwgMHhEN0NDLCAweEQ3RTMsIDB4MTFGQiwKKyAgICAweEQ3RTQsIDB4RDdFNCwgMHgxOTE4LCAweEQ3RTUsIDB4RDdGRSwgMHgxMjEzLCAweEQ4QTEsIDB4RDhGRSwgMHgxMjJELAorICAgIDB4RDlBMSwgMHhEOUZFLCAweDEyOEIsIDB4REFBMSwgMHhEQUZFLCAweDEyRTksIDB4REJBMSwgMHhEQkM0LCAweDEzNDcsCisgICAgMHhEQkM1LCAweERCQzUsIDB4MTQxRiwgMHhEQkM2LCAweERCRTMsIDB4MTM2QiwgMHhEQkU0LCAweERCRTQsIDB4MTMzQSwKKyAgICAweERCRTUsIDB4REJGRSwgMHgxMzg5LCAweERDQTEsIDB4RENBNCwgMHgxM0EzLCAweERDQTUsIDB4RENBNSwgMHgxRDVFLAorICAgIDB4RENBNiwgMHhEQ0ZFLCAweDEzQTcsIDB4RERBMSwgMHhEREE0LCAweDE0MDAsIDB4RERBNSwgMHhEREE1LCAweDEzRDcsCisgICAgMHhEREE2LCAweERERDQsIDB4MTQwNCwgMHhEREQ1LCAweERERDUsIDB4MTNGNSwgMHhEREQ2LCAweERERjMsIDB4MTQzMywKKyAgICAweERERjQsIDB4RERGNCwgMHgxREI3LCAweERERjUsIDB4RERGRSwgMHgxNDUxLCAweERFQTEsIDB4REVGQiwgMHgxNDVCLAorICAgIDB4REVGQywgMHhERUZDLCAweDE1RDAsIDB4REVGRCwgMHhERUZELCAweDE0QjYsIDB4REVGRSwgMHhERUZFLCAweDE0RjcsCisgICAgMHhERkExLCAweERGQjIsIDB4MTRCNywgMHhERkIzLCAweERGQjMsIDB4MUJBQiwgMHhERkI0LCAweERGRTAsIDB4MTRDOSwKKyAgICAweERGRTEsIDB4REZFMSwgMHgxNEYyLCAweERGRTIsIDB4REZFNywgMHgxNEY2LCAweERGRTgsIDB4REZFOCwgMHgxNTZELAorICAgIDB4REZFOSwgMHhERkZFLCAweDE0RkMsIDB4RTBBMSwgMHhFMEYwLCAweDE1MTIsIDB4RTBGMSwgMHhFMEYxLCAweDE3NzEsCisgICAgMHhFMEYyLCAweEUwRkUsIDB4MTU2MiwgMHhFMUExLCAweEUxQUMsIDB4MTU2RiwgMHhFMUFELCAweEUxQUQsIDB4MTU1NCwKKyAgICAweEUxQUUsIDB4RTFFQywgMHgxNTdCLCAweEUxRUQsIDB4RTFFRCwgMHgxNEM1LCAweEUxRUUsIDB4RTFGRSwgMHgxNUJBLAorICAgIDB4RTJBMSwgMHhFMkZFLCAweDE1Q0IsIDB4RTNBMSwgMHhFM0Y0LCAweDE2MjksIDB4RTNGNSwgMHhFM0Y1LCAweDFCNjEsCisgICAgMHhFM0Y2LCAweEUzRkUsIDB4MTY3RCwgMHhFNEExLCAweEU0QTEsIDB4MUNDQSwgMHhFNEEyLCAweEU0QTgsIDB4MTY4NiwKKyAgICAweEU0QTksIDB4RTRBOSwgMHgxNjJFLCAweEU0QUEsIDB4RTRGRSwgMHgxNjhELCAweEU1QTEsIDB4RTVBRCwgMHgxNkUyLAorICAgIDB4RTVBRSwgMHhFNUFFLCAweDE2RjIsIDB4RTVBRiwgMHhFNUIwLCAweDE2RUYsIDB4RTVCMSwgMHhFNUIyLCAweDExNDksCisgICAgMHhFNUIzLCAweEU1QjgsIDB4MTZGMSwgMHhFNUI5LCAweEU1QjksIDB4MTE0QiwgMHhFNUJBLCAweEU1QkEsIDB4MTZGNywKKyAgICAweEU1QkIsIDB4RTVCQywgMHgxMTRELCAweEU1QkQsIDB4RTVDMywgMHgxNkY4LCAweEU1QzQsIDB4RTVDNCwgMHgxMTRGLAorICAgIDB4RTVDNSwgMHhFNUNELCAweDE2RkYsIDB4RTVDRSwgMHhFNUNFLCAweDExNTMsIDB4RTVDRiwgMHhFNUNGLCAweDE3MDgsCisgICAgMHhFNUQwLCAweEU1RDAsIDB4MTE1NCwgMHhFNUQxLCAweEU1RDEsIDB4MTcwOSwgMHhFNUQyLCAweEU1RDIsIDB4MTE1NSwKKyAgICAweEU1RDMsIDB4RTVENSwgMHgxNzBBLCAweEU1RDYsIDB4RTVENiwgMHgxMTU3LCAweEU1RDcsIDB4RTVGOSwgMHgxNzBELAorICAgIDB4RTVGQSwgMHhFNUZCLCAweDExNUEsIDB4RTVGQywgMHhFNUZDLCAweDEwM0YsIDB4RTVGRCwgMHhFNUZELCAweDE3MzAsCisgICAgMHhFNUZFLCAweEU1RkUsIDB4MTE1QywgMHhFNkExLCAweEU2QTEsIDB4MTE1RiwgMHhFNkEyLCAweEU2QTMsIDB4MTczMSwKKyAgICAweEU2QTQsIDB4RTZBNCwgMHgxMTYxLCAweEU2QTUsIDB4RTZBNiwgMHgxNzMzLCAweEU2QTcsIDB4RTZBNywgMHgxMTYyLAorICAgIDB4RTZBOCwgMHhFNkFDLCAweDE3MzUsIDB4RTZBRCwgMHhFNkFELCAweDExNjUsIDB4RTZBRSwgMHhFNkFFLCAweDE3M0EsCisgICAgMHhFNkFGLCAweEU2QjEsIDB4MTE2NywgMHhFNkIyLCAweEU2QjIsIDB4MTczQiwgMHhFNkIzLCAweEU2QjMsIDB4MTE2QSwKKyAgICAweEU2QjQsIDB4RTZCNiwgMHgxNzNDLCAweEU2QjcsIDB4RTZCOCwgMHgxMTZCLCAweEU2QjksIDB4RTZCQiwgMHgxNzNGLAorICAgIDB4RTZCQywgMHhFNkJDLCAweDExNkYsIDB4RTZCRCwgMHhFNkMzLCAweDE3NDIsIDB4RTZDNCwgMHhFNkM0LCAweDEwNDAsCisgICAgMHhFNkM1LCAweEU2QzUsIDB4MTc0OSwgMHhFNkM2LCAweEU2QzcsIDB4MTE3MSwgMHhFNkM4LCAweEU2QzksIDB4MTc0QSwKKyAgICAweEU2Q0EsIDB4RTZDQSwgMHgxMDQxLCAweEU2Q0IsIDB4RTZEMSwgMHgxNzRDLCAweEU2RDIsIDB4RTZEMiwgMHgxMTc0LAorICAgIDB4RTZEMywgMHhFNkQ1LCAweDE3NTMsIDB4RTZENiwgMHhFNkQ2LCAweDExNzUsIDB4RTZENywgMHhFNkQ4LCAweDE3NTYsCisgICAgMHhFNkQ5LCAweEU2RDksIDB4MTE3NiwgMHhFNkRBLCAweEU2REIsIDB4MTc1OCwgMHhFNkRDLCAweEU2REMsIDB4MTA0MiwKKyAgICAweEU2REQsIDB4RTZERSwgMHgxNzVBLCAweEU2REYsIDB4RTZERiwgMHgxMTc3LCAweEU2RTAsIDB4RTZFMCwgMHgxNzVDLAorICAgIDB4RTZFMSwgMHhFNkUxLCAweDExNzgsIDB4RTZFMiwgMHhFNkUzLCAweDE3NUQsIDB4RTZFNCwgMHhFNkU0LCAweDExN0EsCisgICAgMHhFNkU1LCAweEU2RTUsIDB4MTE3OSwgMHhFNkU2LCAweEU2RTYsIDB4MTE3QiwgMHhFNkU3LCAweEU2RTcsIDB4MTc1RiwKKyAgICAweEU2RTgsIDB4RTZFOCwgMHgxMTdDLCAweEU2RTksIDB4RTZFOSwgMHgxNzYwLCAweEU2RUEsIDB4RTZFQiwgMHgxMTdFLAorICAgIDB4RTZFQywgMHhFNkVDLCAweDE5MkYsIDB4RTZFRCwgMHhFNkVFLCAweDE3NjEsIDB4RTZFRiwgMHhFNkVGLCAweDExODEsCisgICAgMHhFNkYwLCAweEU2RjAsIDB4MTc2MywgMHhFNkYxLCAweEU2RjEsIDB4MTE4MiwgMHhFNkYyLCAweEU2RjIsIDB4MTU1NCwKKyAgICAweEU2RjMsIDB4RTZGNCwgMHgxNzY0LCAweEU2RjUsIDB4RTZGNSwgMHgxMTgzLCAweEU2RjYsIDB4RTZGNiwgMHgxMDQzLAorICAgIDB4RTZGNywgMHhFNkY3LCAweDEwNDYsIDB4RTZGOCwgMHhFNkY4LCAweDE3NjYsIDB4RTZGOSwgMHhFNkY5LCAweDExODUsCisgICAgMHhFNkZBLCAweEU2RkUsIDB4MTc2NywgMHhFN0ExLCAweEU3QTEsIDB4MTE4NywgMHhFN0EyLCAweEU3QTUsIDB4MTc2QywKKyAgICAweEU3QTYsIDB4RTdBNiwgMHgxMTg4LCAweEU3QTcsIDB4RTdBOCwgMHgxNzcwLCAweEU3QTksIDB4RTdBOSwgMHgxMTg5LAorICAgIDB4RTdBQSwgMHhFN0FBLCAweDExOEIsIDB4RTdBQiwgMHhFN0FCLCAweDE3NzIsIDB4RTdBQywgMHhFN0FDLCAweDEwNDcsCisgICAgMHhFN0FELCAweEU3QUQsIDB4MTE4RCwgMHhFN0FFLCAweEU3QUYsIDB4MTc3MywgMHhFN0IwLCAweEU3QjAsIDB4MTE4RSwKKyAgICAweEU3QjEsIDB4RTdCRSwgMHgxNzc1LCAweEU3QkYsIDB4RTdCRiwgMHgxMThGLCAweEU3QzAsIDB4RTdDMCwgMHgxNzgzLAorICAgIDB4RTdDMSwgMHhFN0MxLCAweDFFNjcsIDB4RTdDMiwgMHhFN0M1LCAweDE3ODQsIDB4RTdDNiwgMHhFN0M2LCAweDExOTEsCisgICAgMHhFN0M3LCAweEU3QzcsIDB4MTE5MywgMHhFN0M4LCAweEU3Q0EsIDB4MTc4OCwgMHhFN0NCLCAweEU3Q0IsIDB4MTE5NSwKKyAgICAweEU3Q0MsIDB4RTdDQywgMHgxNzhCLCAweEU3Q0QsIDB4RTdDRCwgMHgxMTk2LCAweEU3Q0UsIDB4RTdDRSwgMHgxNzhDLAorICAgIDB4RTdDRiwgMHhFN0QwLCAweDExOTcsIDB4RTdEMSwgMHhFN0QyLCAweDE3OEQsIDB4RTdEMywgMHhFN0QzLCAweDExOUEsCisgICAgMHhFN0Q0LCAweEU3REUsIDB4MTc4RiwgMHhFN0RGLCAweEU3REYsIDB4MTE5QywgMHhFN0UwLCAweEU3RTMsIDB4MTc5QSwKKyAgICAweEU3RTQsIDB4RTdFNCwgMHgxMTlELCAweEU3RTUsIDB4RTdFNSwgMHgxNzlFLCAweEU3RTYsIDB4RTdFNiwgMHgxMTlFLAorICAgIDB4RTdFNywgMHhFN0Y2LCAweDE3OUYsIDB4RTdGNywgMHhFN0Y3LCAweDE2QTUsIDB4RTdGOCwgMHhFN0ZFLCAweDE3QUYsCisgICAgMHhFOEExLCAweEU4RTYsIDB4MTdCNiwgMHhFOEU3LCAweEU4RTgsIDB4MTFDNywgMHhFOEU5LCAweEU4RUYsIDB4MTdGQywKKyAgICAweEU4RjAsIDB4RThGMCwgMHgxMUM5LCAweEU4RjEsIDB4RThGMSwgMHgxMDU0LCAweEU4RjIsIDB4RThGNiwgMHgxODAzLAorICAgIDB4RThGNywgMHhFOEY3LCAweDExQ0IsIDB4RThGOCwgMHhFOEY4LCAweDE4MDgsIDB4RThGOSwgMHhFOEY5LCAweDE2QTgsCisgICAgMHhFOEZBLCAweEU4RkEsIDB4MTgwOSwgMHhFOEZCLCAweEU4RkIsIDB4MTFDQywgMHhFOEZDLCAweEU4RkQsIDB4MTgwQSwKKyAgICAweEU4RkUsIDB4RThGRSwgMHgxMUNELCAweEU5QTEsIDB4RTlBNiwgMHgxODBDLCAweEU5QTcsIDB4RTlBNywgMHgxMUQwLAorICAgIDB4RTlBOCwgMHhFOUFCLCAweDE4MTIsIDB4RTlBQywgMHhFOUFDLCAweDExRDEsIDB4RTlBRCwgMHhFOUNCLCAweDE4MTYsCisgICAgMHhFOUNDLCAweEU5Q0MsIDB4MTFEMywgMHhFOUNELCAweEU5RjYsIDB4MTgzNSwgMHhFOUY3LCAweEU5RjcsIDB4MUYzNCwKKyAgICAweEU5RjgsIDB4RTlGRSwgMHgxODVGLCAweEVBQTEsIDB4RUFDMCwgMHgxODY2LCAweEVBQzEsIDB4RUFDMSwgMHgxN0VCLAorICAgIDB4RUFDMiwgMHhFQUU0LCAweDE4ODYsIDB4RUFFNSwgMHhFQUU1LCAweDExRTEsIDB4RUFFNiwgMHhFQUYzLCAweDE4QTksCisgICAgMHhFQUY0LCAweEVBRjQsIDB4MTA1NywgMHhFQUY1LCAweEVBRjYsIDB4MThCNywgMHhFQUY3LCAweEVBRjcsIDB4MTFFMywKKyAgICAweEVBRjgsIDB4RUFGQiwgMHgxOEI5LCAweEVBRkMsIDB4RUFGQywgMHgxMUU1LCAweEVBRkQsIDB4RUFGRCwgMHgxOEJELAorICAgIDB4RUFGRSwgMHhFQUZFLCAweDExRTYsIDB4RUJBMSwgMHhFQkEzLCAweDE4QkUsIDB4RUJBNCwgMHhFQkE0LCAweDExRTgsCisgICAgMHhFQkE1LCAweEVCQTYsIDB4MThDMSwgMHhFQkE3LCAweEVCQTcsIDB4MTFFQSwgMHhFQkE4LCAweEVCQTgsIDB4MThDMywKKyAgICAweEVCQTksIDB4RUJBOSwgMHgxMUVDLCAweEVCQUEsIDB4RUJBQSwgMHgxMDU4LCAweEVCQUIsIDB4RUJCOSwgMHgxOEM0LAorICAgIDB4RUJCQSwgMHhFQkJCLCAweDExRUUsIDB4RUJCQywgMHhFQkJDLCAweDE4RDMsIDB4RUJCRCwgMHhFQkJELCAweDExRjAsCisgICAgMHhFQkJFLCAweEVCQzAsIDB4MThENCwgMHhFQkMxLCAweEVCQzEsIDB4MTFGMSwgMHhFQkMyLCAweEVCQzIsIDB4MTFGMywKKyAgICAweEVCQzMsIDB4RUJDNSwgMHgxOEQ3LCAweEVCQzYsIDB4RUJDNywgMHgxMUY0LCAweEVCQzgsIDB4RUJDQiwgMHgxOERBLAorICAgIDB4RUJDQywgMHhFQkNDLCAweDExRjcsIDB4RUJDRCwgMHhFQkNFLCAweDE4REUsIDB4RUJDRiwgMHhFQkQxLCAweDExRjgsCisgICAgMHhFQkQyLCAweEVCRDIsIDB4MTVCMCwgMHhFQkQzLCAweEVCRDcsIDB4MThFMCwgMHhFQkQ4LCAweEVCRDgsIDB4MTFGQiwKKyAgICAweEVCRDksIDB4RUJGRSwgMHgxOEU1LCAweEVDQTEsIDB4RUNBNSwgMHgxOTBCLCAweEVDQTYsIDB4RUNBNiwgMHgxMjA2LAorICAgIDB4RUNBNywgMHhFQ0E3LCAweDEyMDgsIDB4RUNBOCwgMHhFQ0E5LCAweDE5MTAsIDB4RUNBQSwgMHhFQ0FBLCAweDEyMEEsCisgICAgMHhFQ0FCLCAweEVDQUUsIDB4MTkxMiwgMHhFQ0FGLCAweEVDQUYsIDB4MTczRSwgMHhFQ0IwLCAweEVDQjEsIDB4MTIwQywKKyAgICAweEVDQjIsIDB4RUNCMiwgMHgxMDVCLCAweEVDQjMsIDB4RUNCNCwgMHgxOTE2LCAweEVDQjUsIDB4RUNCNSwgMHgxMjExLAorICAgIDB4RUNCNiwgMHhFQ0I3LCAweDE5MTgsIDB4RUNCOCwgMHhFQ0I4LCAweDEyMTMsIDB4RUNCOSwgMHhFQ0I5LCAweDE5MUEsCisgICAgMHhFQ0JBLCAweEVDQkEsIDB4MTIxNSwgMHhFQ0JCLCAweEVDQkYsIDB4MTkxQiwgMHhFQ0MwLCAweEVDQzEsIDB4MTIxOCwKKyAgICAweEVDQzIsIDB4RUNDNCwgMHgxOTIwLCAweEVDQzUsIDB4RUNDNSwgMHgxMjFBLCAweEVDQzYsIDB4RUNDNiwgMHgxMjFDLAorICAgIDB4RUNDNywgMHhFQ0M4LCAweDE5MjMsIDB4RUNDOSwgMHhFQ0NBLCAweDEwNUMsIDB4RUNDQiwgMHhFQ0Q0LCAweDE5MjUsCisgICAgMHhFQ0Q1LCAweEVDRDUsIDB4MTIxRSwgMHhFQ0Q2LCAweEVDREMsIDB4MTkyRiwgMHhFQ0RELCAweEVDREUsIDB4MTIyMCwKKyAgICAweEVDREYsIDB4RUNFMCwgMHgxOTM2LCAweEVDRTEsIDB4RUNFMSwgMHgxMjIyLCAweEVDRTIsIDB4RUNFMywgMHgxOTM4LAorICAgIDB4RUNFNCwgMHhFQ0U0LCAweDEyMjQsIDB4RUNFNSwgMHhFQ0U2LCAweDE5M0EsIDB4RUNFNywgMHhFQ0U4LCAweDEyMjUsCisgICAgMHhFQ0U5LCAweEVDRjYsIDB4MTkzQywgMHhFQ0Y3LCAweEVDRjgsIDB4MTIyNywgMHhFQ0Y5LCAweEVDRjksIDB4MTk0QSwKKyAgICAweEVDRkEsIDB4RUNGQSwgMHgxMjJBLCAweEVDRkIsIDB4RUNGRSwgMHgxOTRCLCAweEVEQTEsIDB4RURBMywgMHgxMjJELAorICAgIDB4RURBNCwgMHhFREVELCAweDE5NEYsIDB4RURFRSwgMHhFREVFLCAweDE0RTcsIDB4RURFRiwgMHhFREZFLCAweDE5OTksCisgICAgMHhFRUExLCAweEVFREEsIDB4MTlBOSwgMHhFRURCLCAweEVFREIsIDB4MTk1RSwgMHhFRURDLCAweEVFRkUsIDB4MTlFMywKKyAgICAweEVGQTEsIDB4RUZGRSwgMHgxQTA2LCAweEYwQTEsIDB4RjBGRSwgMHgxQTY0LCAweEYxQTEsIDB4RjFGRSwgMHgxQUMyLAorICAgIDB4RjJBMSwgMHhGMkJDLCAweDFCMjAsIDB4RjJCRCwgMHhGMkJELCAweDE2NjMsIDB4RjJCRSwgMHhGMkY5LCAweDFCM0MsCisgICAgMHhGMkZBLCAweEYyRkEsIDB4MTY4QiwgMHhGMkZCLCAweEYyRkUsIDB4MUI3OCwgMHhGM0ExLCAweEYzQjAsIDB4MUI3QywKKyAgICAweEYzQjEsIDB4RjNCMSwgMHgxMDVGLCAweEYzQjIsIDB4RjNGRSwgMHgxQjhDLCAweEY0QTEsIDB4RjRBNiwgMHgxQkQ5LAorICAgIDB4RjRBNywgMHhGNEE3LCAweDE5NTQsIDB4RjRBOCwgMHhGNEVELCAweDFCREYsIDB4RjRFRSwgMHhGNEVFLCAweDFBMUMsCisgICAgMHhGNEVGLCAweEY0RkUsIDB4MUMyNSwgMHhGNUExLCAweEY1RkUsIDB4MUMzNSwgMHhGNkExLCAweEY2RjMsIDB4MUM5MywKKyAgICAweEY2RjQsIDB4RjZGNCwgMHgxMEI3LCAweEY2RjUsIDB4RjZGNSwgMHgxQ0U2LCAweEY2RjYsIDB4RjZGNiwgMHgxQkUzLAorICAgIDB4RjZGNywgMHhGNkZFLCAweDFDRTcsIDB4RjdBMSwgMHhGN0I3LCAweDFDRUYsIDB4RjdCOCwgMHhGN0I4LCAweDEwOTcsCisgICAgMHhGN0I5LCAweEY3QzcsIDB4MUQwNiwgMHhGN0M4LCAweEY3QzgsIDB4MTBBQSwgMHhGN0M5LCAweEY3RDIsIDB4MUQxNSwKKyAgICAweEY3RDMsIDB4RjdEMywgMHgxMEY0LCAweEY3RDQsIDB4RjdGRSwgMHgxRDFGLCAweEY4QTEsIDB4RjhEQSwgMHgxRDRBLAorICAgIDB4RjhEQiwgMHhGOERCLCAweDFEOTQsIDB4RjhEQywgMHhGOEVGLCAweDFEODQsIDB4RjhGMCwgMHhGOEYwLCAweDEzRTAsCisgICAgMHhGOEYxLCAweEY4RkUsIDB4MUQ5OCwgMHhGOUExLCAweEY5RkUsIDB4MURBNiwgMHhGQUExLCAweEZBQTEsIDB4MUUxRCwKKyAgICAweEZBQTIsIDB4RkFBMiwgMHgwREU2LCAweEZBQTMsIDB4RkFFNSwgMHgxRTA0LCAweEZBRTYsIDB4RkFFNiwgMHgwRTNDLAorICAgIDB4RkFFNywgMHhGQUZFLCAweDFFNDcsIDB4RkJBMSwgMHhGQkZFLCAweDFFNUYsIDB4RkNBMSwgMHhGQ0E4LCAweDFFQkQsCisgICAgMHhGQ0E5LCAweEZDQTksIDB4MEVFNywgMHhGQ0FBLCAweEZDRkUsIDB4MUVDNSwgMHhGREExLCAweEZERkUsIDB4MUYxQSwKK307CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvS29yZWExL0tTQ21zLVVIQy1IXzEuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0tvcmVhMS9LU0Ntcy1VSEMtSF8xLmNwcAppbmRleCA2NDY0ZjJmLi5hZjI4YTRkIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvS29yZWExL0tTQ21zLVVIQy1IXzEuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9Lb3JlYTEvS1NDbXMtVUhDLUhfMS5jcHAKQEAgLTEsMjMzICsxLDIzMyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0tTQ21zX1VIQ19IXzFbNjc1ICogM10gPSB7DQotICAgIDB4MDAyMCwgMHgwMDdFLCAweDAwMDEsIDB4ODE0MSwgMHg4MTVBLCAweDI0NzUsIDB4ODE2MSwgMHg4MTdBLCAweDI0OEYsDQotICAgIDB4ODE4MSwgMHg4MUZFLCAweDI0QTksIDB4ODI0MSwgMHg4MjVBLCAweDI1MjcsIDB4ODI2MSwgMHg4MjdBLCAweDI1NDEsDQotICAgIDB4ODI4MSwgMHg4MkZFLCAweDI1NUIsIDB4ODM0MSwgMHg4MzVBLCAweDI1RDksIDB4ODM2MSwgMHg4MzdBLCAweDI1RjMsDQotICAgIDB4ODM4MSwgMHg4M0ZFLCAweDI2MEQsIDB4ODQ0MSwgMHg4NDVBLCAweDI2OEIsIDB4ODQ2MSwgMHg4NDdBLCAweDI2QTUsDQotICAgIDB4ODQ4MSwgMHg4NEZFLCAweDI2QkYsIDB4ODU0MSwgMHg4NTVBLCAweDI3M0QsIDB4ODU2MSwgMHg4NTdBLCAweDI3NTcsDQotICAgIDB4ODU4MSwgMHg4NUZFLCAweDI3NzEsIDB4ODY0MSwgMHg4NjVBLCAweDI3RUYsIDB4ODY2MSwgMHg4NjdBLCAweDI4MDksDQotICAgIDB4ODY4MSwgMHg4NkZFLCAweDI4MjMsIDB4ODc0MSwgMHg4NzVBLCAweDI4QTEsIDB4ODc2MSwgMHg4NzdBLCAweDI4QkIsDQotICAgIDB4ODc4MSwgMHg4N0ZFLCAweDI4RDUsIDB4ODg0MSwgMHg4ODVBLCAweDI5NTMsIDB4ODg2MSwgMHg4ODdBLCAweDI5NkQsDQotICAgIDB4ODg4MSwgMHg4OEZFLCAweDI5ODcsIDB4ODk0MSwgMHg4OTVBLCAweDJBMDUsIDB4ODk2MSwgMHg4OTdBLCAweDJBMUYsDQotICAgIDB4ODk4MSwgMHg4OUZFLCAweDJBMzksIDB4OEE0MSwgMHg4QTVBLCAweDJBQjcsIDB4OEE2MSwgMHg4QTdBLCAweDJBRDEsDQotICAgIDB4OEE4MSwgMHg4QUZFLCAweDJBRUIsIDB4OEI0MSwgMHg4QjVBLCAweDJCNjksIDB4OEI2MSwgMHg4QjdBLCAweDJCODMsDQotICAgIDB4OEI4MSwgMHg4QkZFLCAweDJCOUQsIDB4OEM0MSwgMHg4QzVBLCAweDJDMUIsIDB4OEM2MSwgMHg4QzdBLCAweDJDMzUsDQotICAgIDB4OEM4MSwgMHg4Q0ZFLCAweDJDNEYsIDB4OEQ0MSwgMHg4RDVBLCAweDJDQ0QsIDB4OEQ2MSwgMHg4RDdBLCAweDJDRTcsDQotICAgIDB4OEQ4MSwgMHg4REZFLCAweDJEMDEsIDB4OEU0MSwgMHg4RTVBLCAweDJEN0YsIDB4OEU2MSwgMHg4RTdBLCAweDJEOTksDQotICAgIDB4OEU4MSwgMHg4RUZFLCAweDJEQjMsIDB4OEY0MSwgMHg4RjVBLCAweDJFMzEsIDB4OEY2MSwgMHg4RjdBLCAweDJFNEIsDQotICAgIDB4OEY4MSwgMHg4RkZFLCAweDJFNjUsIDB4OTA0MSwgMHg5MDVBLCAweDJFRTMsIDB4OTA2MSwgMHg5MDdBLCAweDJFRkQsDQotICAgIDB4OTA4MSwgMHg5MEZFLCAweDJGMTcsIDB4OTE0MSwgMHg5MTVBLCAweDJGOTUsIDB4OTE2MSwgMHg5MTdBLCAweDJGQUYsDQotICAgIDB4OTE4MSwgMHg5MUZFLCAweDJGQzksIDB4OTI0MSwgMHg5MjVBLCAweDMwNDcsIDB4OTI2MSwgMHg5MjdBLCAweDMwNjEsDQotICAgIDB4OTI4MSwgMHg5MkZFLCAweDMwN0IsIDB4OTM0MSwgMHg5MzVBLCAweDMwRjksIDB4OTM2MSwgMHg5MzdBLCAweDMxMTMsDQotICAgIDB4OTM4MSwgMHg5M0ZFLCAweDMxMkQsIDB4OTQ0MSwgMHg5NDVBLCAweDMxQUIsIDB4OTQ2MSwgMHg5NDdBLCAweDMxQzUsDQotICAgIDB4OTQ4MSwgMHg5NEZFLCAweDMxREYsIDB4OTU0MSwgMHg5NTVBLCAweDMyNUQsIDB4OTU2MSwgMHg5NTdBLCAweDMyNzcsDQotICAgIDB4OTU4MSwgMHg5NUZFLCAweDMyOTEsIDB4OTY0MSwgMHg5NjVBLCAweDMzMEYsIDB4OTY2MSwgMHg5NjdBLCAweDMzMjksDQotICAgIDB4OTY4MSwgMHg5NkZFLCAweDMzNDMsIDB4OTc0MSwgMHg5NzVBLCAweDMzQzEsIDB4OTc2MSwgMHg5NzdBLCAweDMzREIsDQotICAgIDB4OTc4MSwgMHg5N0ZFLCAweDMzRjUsIDB4OTg0MSwgMHg5ODVBLCAweDM0NzMsIDB4OTg2MSwgMHg5ODdBLCAweDM0OEQsDQotICAgIDB4OTg4MSwgMHg5OEZFLCAweDM0QTcsIDB4OTk0MSwgMHg5OTVBLCAweDM1MjUsIDB4OTk2MSwgMHg5OTdBLCAweDM1M0YsDQotICAgIDB4OTk4MSwgMHg5OUZFLCAweDM1NTksIDB4OUE0MSwgMHg5QTVBLCAweDM1RDcsIDB4OUE2MSwgMHg5QTdBLCAweDM1RjEsDQotICAgIDB4OUE4MSwgMHg5QUZFLCAweDM2MEIsIDB4OUI0MSwgMHg5QjVBLCAweDM2ODksIDB4OUI2MSwgMHg5QjdBLCAweDM2QTMsDQotICAgIDB4OUI4MSwgMHg5QkZFLCAweDM2QkQsIDB4OUM0MSwgMHg5QzVBLCAweDM3M0IsIDB4OUM2MSwgMHg5QzdBLCAweDM3NTUsDQotICAgIDB4OUM4MSwgMHg5Q0ZFLCAweDM3NkYsIDB4OUQ0MSwgMHg5RDVBLCAweDM3RUQsIDB4OUQ2MSwgMHg5RDdBLCAweDM4MDcsDQotICAgIDB4OUQ4MSwgMHg5REZFLCAweDM4MjEsIDB4OUU0MSwgMHg5RTVBLCAweDM4OUYsIDB4OUU2MSwgMHg5RTdBLCAweDM4QjksDQotICAgIDB4OUU4MSwgMHg5RUZFLCAweDM4RDMsIDB4OUY0MSwgMHg5RjVBLCAweDM5NTEsIDB4OUY2MSwgMHg5RjdBLCAweDM5NkIsDQotICAgIDB4OUY4MSwgMHg5RkZFLCAweDM5ODUsIDB4QTA0MSwgMHhBMDVBLCAweDNBMDMsIDB4QTA2MSwgMHhBMDdBLCAweDNBMUQsDQotICAgIDB4QTA4MSwgMHhBMEZFLCAweDNBMzcsIDB4QTE0MSwgMHhBMTVBLCAweDNBQjUsIDB4QTE2MSwgMHhBMTdBLCAweDNBQ0YsDQotICAgIDB4QTE4MSwgMHhBMUEwLCAweDNBRTksIDB4QTFBMSwgMHhBMUZFLCAweDAwNjUsIDB4QTI0MSwgMHhBMjVBLCAweDNCMDksDQotICAgIDB4QTI2MSwgMHhBMjdBLCAweDNCMjMsIDB4QTI4MSwgMHhBMkEwLCAweDNCM0QsIDB4QTJBMSwgMHhBMkU1LCAweDAwQzMsDQotICAgIDB4QTM0MSwgMHhBMzVBLCAweDNCNUQsIDB4QTM2MSwgMHhBMzdBLCAweDNCNzcsIDB4QTM4MSwgMHhBM0EwLCAweDNCOTEsDQotICAgIDB4QTNBMSwgMHhBM0ZFLCAweDAxMDgsIDB4QTQ0MSwgMHhBNDVBLCAweDNCQjEsIDB4QTQ2MSwgMHhBNDdBLCAweDNCQ0IsDQotICAgIDB4QTQ4MSwgMHhBNEEwLCAweDNCRTUsIDB4QTRBMSwgMHhBNEQzLCAweDAxNjYsIDB4QTRENSwgMHhBNEZFLCAweDAxOTksDQotICAgIDB4QTU0MSwgMHhBNTVBLCAweDNDMDUsIDB4QTU2MSwgMHhBNTdBLCAweDNDMUYsIDB4QTU4MSwgMHhBNUEwLCAweDNDMzksDQotICAgIDB4QTVBMSwgMHhBNUFBLCAweDAxQzMsIDB4QTVCMCwgMHhBNUI5LCAweDAxQ0QsIDB4QTVDMSwgMHhBNUQ4LCAweDAxRDcsDQotICAgIDB4QTVFMSwgMHhBNUY4LCAweDAxRUYsIDB4QTY0MSwgMHhBNjVBLCAweDNDNTksIDB4QTY2MSwgMHhBNjdBLCAweDNDNzMsDQotICAgIDB4QTY4MSwgMHhBNkEwLCAweDNDOEQsIDB4QTZBMSwgMHhBNkU0LCAweDAyMDcsIDB4QTc0MSwgMHhBNzVBLCAweDNDQUQsDQotICAgIDB4QTc2MSwgMHhBNzdBLCAweDNDQzcsIDB4QTc4MSwgMHhBN0EwLCAweDNDRTEsIDB4QTdBMSwgMHhBN0VGLCAweDAyNEIsDQotICAgIDB4QTg0MSwgMHhBODVBLCAweDNEMDEsIDB4QTg2MSwgMHhBODdBLCAweDNEMUIsIDB4QTg4MSwgMHhBOEEwLCAweDNEMzUsDQotICAgIDB4QThBMSwgMHhBOEE0LCAweDAyOUEsIDB4QThBNiwgMHhBOEE2LCAweDAyOUUsIDB4QThBOCwgMHhBOEFGLCAweDAyOUYsDQotICAgIDB4QThCMSwgMHhBOEZFLCAweDAyQTcsIDB4QTk0MSwgMHhBOTVBLCAweDNENTUsIDB4QTk2MSwgMHhBOTdBLCAweDNENkYsDQotICAgIDB4QTk4MSwgMHhBOUEwLCAweDNEODksIDB4QTlBMSwgMHhBOUZFLCAweDAyRjUsIDB4QUE0MSwgMHhBQTVBLCAweDNEQTksDQotICAgIDB4QUE2MSwgMHhBQTdBLCAweDNEQzMsIDB4QUE4MSwgMHhBQUEwLCAweDNEREQsIDB4QUFBMSwgMHhBQUYzLCAweDAzNTMsDQotICAgIDB4QUI0MSwgMHhBQjVBLCAweDNERkQsIDB4QUI2MSwgMHhBQjdBLCAweDNFMTcsIDB4QUI4MSwgMHhBQkEwLCAweDNFMzEsDQotICAgIDB4QUJBMSwgMHhBQkY2LCAweDAzQTYsIDB4QUM0MSwgMHhBQzVBLCAweDNFNTEsIDB4QUM2MSwgMHhBQzdBLCAweDNFNkIsDQotICAgIDB4QUM4MSwgMHhBQ0EwLCAweDNFODUsIDB4QUNBMSwgMHhBQ0MxLCAweDAzRkMsIDB4QUNEMSwgMHhBQ0YxLCAweDA0MUQsDQotICAgIDB4QUQ0MSwgMHhBRDVBLCAweDNFQTUsIDB4QUQ2MSwgMHhBRDdBLCAweDNFQkYsIDB4QUQ4MSwgMHhBREEwLCAweDNFRDksDQotICAgIDB4QUU0MSwgMHhBRTVBLCAweDNFRjksIDB4QUU2MSwgMHhBRTdBLCAweDNGMTMsIDB4QUU4MSwgMHhBRUEwLCAweDNGMkQsDQotICAgIDB4QUY0MSwgMHhBRjVBLCAweDNGNEQsIDB4QUY2MSwgMHhBRjdBLCAweDNGNjcsIDB4QUY4MSwgMHhBRkEwLCAweDNGODEsDQotICAgIDB4QjA0MSwgMHhCMDVBLCAweDNGQTEsIDB4QjA2MSwgMHhCMDdBLCAweDNGQkIsIDB4QjA4MSwgMHhCMEEwLCAweDNGRDUsDQotICAgIDB4QjBBMSwgMHhCMEZFLCAweDA0M0UsIDB4QjE0MSwgMHhCMTVBLCAweDNGRjUsIDB4QjE2MSwgMHhCMTdBLCAweDQwMEYsDQotICAgIDB4QjE4MSwgMHhCMUEwLCAweDQwMjksIDB4QjFBMSwgMHhCMUZFLCAweDA0OUMsIDB4QjI0MSwgMHhCMjVBLCAweDQwNDksDQotICAgIDB4QjI2MSwgMHhCMjdBLCAweDQwNjMsIDB4QjI4MSwgMHhCMkEwLCAweDQwN0QsIDB4QjJBMSwgMHhCMkZFLCAweDA0RkEsDQotICAgIDB4QjM0MSwgMHhCMzVBLCAweDQwOUQsIDB4QjM2MSwgMHhCMzdBLCAweDQwQjcsIDB4QjM4MSwgMHhCM0EwLCAweDQwRDEsDQotICAgIDB4QjNBMSwgMHhCM0ZFLCAweDA1NTgsIDB4QjQ0MSwgMHhCNDVBLCAweDQwRjEsIDB4QjQ2MSwgMHhCNDdBLCAweDQxMEIsDQotICAgIDB4QjQ4MSwgMHhCNEEwLCAweDQxMjUsIDB4QjRBMSwgMHhCNEZFLCAweDA1QjYsIDB4QjU0MSwgMHhCNTVBLCAweDQxNDUsDQotICAgIDB4QjU2MSwgMHhCNTdBLCAweDQxNUYsIDB4QjU4MSwgMHhCNUEwLCAweDQxNzksIDB4QjVBMSwgMHhCNUZFLCAweDA2MTQsDQotICAgIDB4QjY0MSwgMHhCNjVBLCAweDQxOTksIDB4QjY2MSwgMHhCNjdBLCAweDQxQjMsIDB4QjY4MSwgMHhCNkEwLCAweDQxQ0QsDQotICAgIDB4QjZBMSwgMHhCNkZFLCAweDA2NzIsIDB4Qjc0MSwgMHhCNzVBLCAweDQxRUQsIDB4Qjc2MSwgMHhCNzdBLCAweDQyMDcsDQotICAgIDB4Qjc4MSwgMHhCN0EwLCAweDQyMjEsIDB4QjdBMSwgMHhCN0ZFLCAweDA2RDAsIDB4Qjg0MSwgMHhCODVBLCAweDQyNDEsDQotICAgIDB4Qjg2MSwgMHhCODdBLCAweDQyNUIsIDB4Qjg4MSwgMHhCOEEwLCAweDQyNzUsIDB4QjhBMSwgMHhCOEZFLCAweDA3MkUsDQotICAgIDB4Qjk0MSwgMHhCOTVBLCAweDQyOTUsIDB4Qjk2MSwgMHhCOTdBLCAweDQyQUYsIDB4Qjk4MSwgMHhCOUEwLCAweDQyQzksDQotICAgIDB4QjlBMSwgMHhCOUZFLCAweDA3OEMsIDB4QkE0MSwgMHhCQTVBLCAweDQyRTksIDB4QkE2MSwgMHhCQTdBLCAweDQzMDMsDQotICAgIDB4QkE4MSwgMHhCQUEwLCAweDQzMUQsIDB4QkFBMSwgMHhCQUZFLCAweDA3RUEsIDB4QkI0MSwgMHhCQjVBLCAweDQzM0QsDQotICAgIDB4QkI2MSwgMHhCQjdBLCAweDQzNTcsIDB4QkI4MSwgMHhCQkEwLCAweDQzNzEsIDB4QkJBMSwgMHhCQkZFLCAweDA4NDgsDQotICAgIDB4QkM0MSwgMHhCQzVBLCAweDQzOTEsIDB4QkM2MSwgMHhCQzdBLCAweDQzQUIsIDB4QkM4MSwgMHhCQ0EwLCAweDQzQzUsDQotICAgIDB4QkNBMSwgMHhCQ0ZFLCAweDA4QTYsIDB4QkQ0MSwgMHhCRDVBLCAweDQzRTUsIDB4QkQ2MSwgMHhCRDdBLCAweDQzRkYsDQotICAgIDB4QkQ4MSwgMHhCREEwLCAweDQ0MTksIDB4QkRBMSwgMHhCREZFLCAweDA5MDQsIDB4QkU0MSwgMHhCRTVBLCAweDQ0MzksDQotICAgIDB4QkU2MSwgMHhCRTdBLCAweDQ0NTMsIDB4QkU4MSwgMHhCRUEwLCAweDQ0NkQsIDB4QkVBMSwgMHhCRUZFLCAweDA5NjIsDQotICAgIDB4QkY0MSwgMHhCRjVBLCAweDQ0OEQsIDB4QkY2MSwgMHhCRjdBLCAweDQ0QTcsIDB4QkY4MSwgMHhCRkEwLCAweDQ0QzEsDQotICAgIDB4QkZBMSwgMHhCRkZFLCAweDA5QzAsIDB4QzA0MSwgMHhDMDVBLCAweDQ0RTEsIDB4QzA2MSwgMHhDMDdBLCAweDQ0RkIsDQotICAgIDB4QzA4MSwgMHhDMEEwLCAweDQ1MTUsIDB4QzBBMSwgMHhDMEZFLCAweDBBMUUsIDB4QzE0MSwgMHhDMTVBLCAweDQ1MzUsDQotICAgIDB4QzE2MSwgMHhDMTdBLCAweDQ1NEYsIDB4QzE4MSwgMHhDMUEwLCAweDQ1NjksIDB4QzFBMSwgMHhDMUZFLCAweDBBN0MsDQotICAgIDB4QzI0MSwgMHhDMjVBLCAweDQ1ODksIDB4QzI2MSwgMHhDMjdBLCAweDQ1QTMsIDB4QzI4MSwgMHhDMkEwLCAweDQ1QkQsDQotICAgIDB4QzJBMSwgMHhDMkZFLCAweDBBREEsIDB4QzM0MSwgMHhDMzVBLCAweDQ1REQsIDB4QzM2MSwgMHhDMzdBLCAweDQ1RjcsDQotICAgIDB4QzM4MSwgMHhDM0EwLCAweDQ2MTEsIDB4QzNBMSwgMHhDM0ZFLCAweDBCMzgsIDB4QzQ0MSwgMHhDNDVBLCAweDQ2MzEsDQotICAgIDB4QzQ2MSwgMHhDNDdBLCAweDQ2NEIsIDB4QzQ4MSwgMHhDNEEwLCAweDQ2NjUsIDB4QzRBMSwgMHhDNEZFLCAweDBCOTYsDQotICAgIDB4QzU0MSwgMHhDNTVBLCAweDQ2ODUsIDB4QzU2MSwgMHhDNTdBLCAweDQ2OUYsIDB4QzU4MSwgMHhDNUEwLCAweDQ2QjksDQotICAgIDB4QzVBMSwgMHhDNUZFLCAweDBCRjQsIDB4QzY0MSwgMHhDNjUyLCAweDQ2RDksIDB4QzZBMSwgMHhDNkZFLCAweDBDNTIsDQotICAgIDB4QzdBMSwgMHhDN0ZFLCAweDBDQjAsIDB4QzhBMSwgMHhDOEZFLCAweDBEMEUsIDB4Q0FBMSwgMHhDQUZFLCAweDBENkMsDQotICAgIDB4Q0JBMSwgMHhDQkNGLCAweDBEQ0EsIDB4Q0JEMCwgMHhDQkQwLCAweDEwMTQsIDB4Q0JEMSwgMHhDQkQ1LCAweDBERjksDQotICAgIDB4Q0JENiwgMHhDQkQ2LCAweDBFNUUsIDB4Q0JENywgMHhDQkU2LCAweDBERkUsIDB4Q0JFNywgMHhDQkU3LCAweDFCOEQsDQotICAgIDB4Q0JFOCwgMHhDQkZFLCAweDBFMEUsIDB4Q0NBMSwgMHhDQ0ZFLCAweDBFMjUsIDB4Q0RBMSwgMHhDRENFLCAweDBFODMsDQotICAgIDB4Q0RDRiwgMHhDRENGLCAweDBEODQsIDB4Q0REMCwgMHhDREU3LCAweDBFQjEsIDB4Q0RFOCwgMHhDREU4LCAweDFFREMsDQotICAgIDB4Q0RFOSwgMHhDREZFLCAweDBFQzksIDB4Q0VBMSwgMHhDRUFDLCAweDBFREYsIDB4Q0VBRCwgMHhDRUFELCAweDBFREEsDQotICAgIDB4Q0VBRSwgMHhDRUZFLCAweDBFRUIsIDB4Q0ZBMSwgMHhDRkZBLCAweDBGM0MsIDB4Q0ZGQiwgMHhDRkZCLCAweDBGM0UsDQotICAgIDB4Q0ZGQywgMHhDRkZFLCAweDBGOTYsIDB4RDBBMSwgMHhEMEExLCAweDBGOTksIDB4RDBBMiwgMHhEMEEyLCAweDBGNkEsDQotICAgIDB4RDBBMywgMHhEMEI3LCAweDBGOUEsIDB4RDBCOCwgMHhEMEI4LCAweDBGNkEsIDB4RDBCOSwgMHhEMENGLCAweDBGQUYsDQotICAgIDB4RDBEMCwgMHhEMEQwLCAweDBFN0MsIDB4RDBEMSwgMHhEMERDLCAweDBGQzYsIDB4RDBERCwgMHhEMERELCAweDEwMjMsDQotICAgIDB4RDBERSwgMHhEMEZFLCAweDBGRDIsIDB4RDFBMSwgMHhEMUQzLCAweDBGRjMsIDB4RDFENCwgMHhEMUQ0LCAweDExMTYsDQotICAgIDB4RDFENSwgMHhEMUQ1LCAweDEwM0MsIDB4RDFENiwgMHhEMUQ3LCAweDEwMjYsIDB4RDFEOCwgMHhEMUQ4LCAweDExMTcsDQotICAgIDB4RDFEOSwgMHhEMURBLCAweDEwMjgsIDB4RDFEQiwgMHhEMUUwLCAweDExMTgsIDB4RDFFMSwgMHhEMUUxLCAweDEwMkEsDQotICAgIDB4RDFFMiwgMHhEMUUyLCAweDE2QTgsIDB4RDFFMywgMHhEMUU1LCAweDExMUUsIDB4RDFFNiwgMHhEMUU2LCAweDExMjIsDQotICAgIDB4RDFFNywgMHhEMUU3LCAweDEwMkIsIDB4RDFFOCwgMHhEMUVCLCAweDExMjMsIDB4RDFFQywgMHhEMUVDLCAweDEwMkMsDQotICAgIDB4RDFFRCwgMHhEMUVELCAweDExMjcsIDB4RDFFRSwgMHhEMUVFLCAweDEwMkQsIDB4RDFFRiwgMHhEMUYwLCAweDExMkEsDQotICAgIDB4RDFGMSwgMHhEMUYxLCAweDEwMkUsIDB4RDFGMiwgMHhEMUYyLCAweDExMkMsIDB4RDFGMywgMHhEMUY1LCAweDEwMkYsDQotICAgIDB4RDFGNiwgMHhEMUY2LCAweDExMkYsIDB4RDFGNywgMHhEMUY5LCAweDEwMzIsIDB4RDFGQSwgMHhEMUZBLCAweDExMzMsDQotICAgIDB4RDFGQiwgMHhEMUZCLCAweDEwMzUsIDB4RDFGQywgMHhEMUZELCAweDExMzYsIDB4RDFGRSwgMHhEMUZFLCAweDExMzksDQotICAgIDB4RDJBMSwgMHhEMkExLCAweDEwMzYsIDB4RDJBMiwgMHhEMkEzLCAweDExM0EsIDB4RDJBNCwgMHhEMkE2LCAweDEwMzcsDQotICAgIDB4RDJBNywgMHhEMkFBLCAweDExM0MsIDB4RDJBQiwgMHhEMkFCLCAweDExNDMsIDB4RDJBQywgMHhEMkFDLCAweDEwM0EsDQotICAgIDB4RDJBRCwgMHhEMkFELCAweDExNDQsIDB4RDJBRSwgMHhEMkIxLCAweDEwM0IsIDB4RDJCMiwgMHhEMkIyLCAweDExNDgsDQotICAgIDB4RDJCMywgMHhEMkJELCAweDEwM0YsIDB4RDJCRSwgMHhEMkJFLCAweDExOUYsIDB4RDJCRiwgMHhEMkMxLCAweDEwNEEsDQotICAgIDB4RDJDMiwgMHhEMkMzLCAweDExQTEsIDB4RDJDNCwgMHhEMkM0LCAweDExQTUsIDB4RDJDNSwgMHhEMkM1LCAweDEwNEQsDQotICAgIDB4RDJDNiwgMHhEMkNBLCAweDExQTYsIDB4RDJDQiwgMHhEMkNCLCAweDExQUMsIDB4RDJDQywgMHhEMkNDLCAweDEwNEUsDQotICAgIDB4RDJDRCwgMHhEMkNFLCAweDExQUQsIDB4RDJDRiwgMHhEMkQ0LCAweDExQjAsIDB4RDJENSwgMHhEMkQ3LCAweDExQjcsDQotICAgIDB4RDJEOCwgMHhEMkQ4LCAweDEwNEYsIDB4RDJEOSwgMHhEMkRBLCAweDExQkQsIDB4RDJEQiwgMHhEMkRELCAweDEwNTAsDQotICAgIDB4RDJERSwgMHhEMkRGLCAweDExQzEsIDB4RDJFMCwgMHhEMkUwLCAweDEwNTMsIDB4RDJFMSwgMHhEMkUxLCAweDExQzMsDQotICAgIDB4RDJFMiwgMHhEMkUyLCAweDExQzYsIDB4RDJFMywgMHhEMkUzLCAweDEwNTQsIDB4RDJFNCwgMHhEMkU0LCAweDExRDQsDQotICAgIDB4RDJFNSwgMHhEMkU4LCAweDExRDYsIDB4RDJFOSwgMHhEMkVBLCAweDExREIsIDB4RDJFQiwgMHhEMkVCLCAweDExRTAsDQotICAgIDB4RDJFQywgMHhEMkVGLCAweDEwNTUsIDB4RDJGMCwgMHhEMkYzLCAweDExRkMsIDB4RDJGNCwgMHhEMkY1LCAweDEyMDEsDQotICAgIDB4RDJGNiwgMHhEMkY2LCAweDEwNTksIDB4RDJGNywgMHhEMkY4LCAweDEyMDMsIDB4RDJGOSwgMHhEMkZFLCAweDEwNUEsDQotICAgIDB4RDNBMSwgMHhEM0ZFLCAweDEwNjAsIDB4RDRBMSwgMHhENEU1LCAweDEwQkUsIDB4RDRFNiwgMHhENEU2LCAweDEwREUsDQotICAgIDB4RDRFNywgMHhENEZCLCAweDExMDMsIDB4RDRGQywgMHhENEZDLCAweDEwMjgsIDB4RDRGRCwgMHhENEZFLCAweDExMTgsDQotICAgIDB4RDVBMSwgMHhENUE0LCAweDExMUEsIDB4RDVBNSwgMHhENUE1LCAweDE2QTgsIDB4RDVBNiwgMHhENUFBLCAweDExMUUsDQotICAgIDB4RDVBQiwgMHhENUFCLCAweDEwMkIsIDB4RDVBQywgMHhENUFELCAweDExMjMsIDB4RDVBRSwgMHhENUFFLCAweDEwNjAsDQotICAgIDB4RDVBRiwgMHhENUZFLCAweDExMjUsIDB4RDZBMSwgMHhENkI3LCAweDExNzUsIDB4RDZCOCwgMHhENkI4LCAweDEwNDcsDQotICAgIDB4RDZCOSwgMHhENkNDLCAweDExOEMsIDB4RDZDRCwgMHhENkNELCAweDEwNEMsIDB4RDZDRSwgMHhENkZFLCAweDExQTAsDQotICAgIDB4RDdBMSwgMHhEN0NBLCAweDExRDEsIDB4RDdDQiwgMHhEN0NCLCAweDE1QjAsIDB4RDdDQywgMHhEN0UzLCAweDExRkIsDQotICAgIDB4RDdFNCwgMHhEN0U0LCAweDE5MTgsIDB4RDdFNSwgMHhEN0ZFLCAweDEyMTMsIDB4RDhBMSwgMHhEOEZFLCAweDEyMkQsDQotICAgIDB4RDlBMSwgMHhEOUZFLCAweDEyOEIsIDB4REFBMSwgMHhEQUZFLCAweDEyRTksIDB4REJBMSwgMHhEQkM0LCAweDEzNDcsDQotICAgIDB4REJDNSwgMHhEQkM1LCAweDE0MUYsIDB4REJDNiwgMHhEQkUzLCAweDEzNkIsIDB4REJFNCwgMHhEQkU0LCAweDEzM0EsDQotICAgIDB4REJFNSwgMHhEQkZFLCAweDEzODksIDB4RENBMSwgMHhEQ0E0LCAweDEzQTMsIDB4RENBNSwgMHhEQ0E1LCAweDFENUUsDQotICAgIDB4RENBNiwgMHhEQ0ZFLCAweDEzQTcsIDB4RERBMSwgMHhEREE0LCAweDE0MDAsIDB4RERBNSwgMHhEREE1LCAweDEzRDcsDQotICAgIDB4RERBNiwgMHhEREQ0LCAweDE0MDQsIDB4RERENSwgMHhEREQ1LCAweDEzRjUsIDB4RERENiwgMHhEREYzLCAweDE0MzMsDQotICAgIDB4RERGNCwgMHhEREY0LCAweDFEQjcsIDB4RERGNSwgMHhEREZFLCAweDE0NTEsIDB4REVBMSwgMHhERUZCLCAweDE0NUIsDQotICAgIDB4REVGQywgMHhERUZDLCAweDE1RDAsIDB4REVGRCwgMHhERUZELCAweDE0QjYsIDB4REVGRSwgMHhERUZFLCAweDE0RjcsDQotICAgIDB4REZBMSwgMHhERkIyLCAweDE0QjcsIDB4REZCMywgMHhERkIzLCAweDFCQUIsIDB4REZCNCwgMHhERkUwLCAweDE0QzksDQotICAgIDB4REZFMSwgMHhERkUxLCAweDE0RjIsIDB4REZFMiwgMHhERkU3LCAweDE0RjYsIDB4REZFOCwgMHhERkU4LCAweDE1NkQsDQotICAgIDB4REZFOSwgMHhERkZFLCAweDE0RkMsIDB4RTBBMSwgMHhFMEYwLCAweDE1MTIsIDB4RTBGMSwgMHhFMEYxLCAweDE3NzEsDQotICAgIDB4RTBGMiwgMHhFMEZFLCAweDE1NjIsIDB4RTFBMSwgMHhFMUFDLCAweDE1NkYsIDB4RTFBRCwgMHhFMUFELCAweDE1NTQsDQotICAgIDB4RTFBRSwgMHhFMUVDLCAweDE1N0IsIDB4RTFFRCwgMHhFMUVELCAweDE0QzUsIDB4RTFFRSwgMHhFMUZFLCAweDE1QkEsDQotICAgIDB4RTJBMSwgMHhFMkZFLCAweDE1Q0IsIDB4RTNBMSwgMHhFM0Y0LCAweDE2MjksIDB4RTNGNSwgMHhFM0Y1LCAweDFCNjEsDQotICAgIDB4RTNGNiwgMHhFM0ZFLCAweDE2N0QsIDB4RTRBMSwgMHhFNEExLCAweDFDQ0EsIDB4RTRBMiwgMHhFNEE4LCAweDE2ODYsDQotICAgIDB4RTRBOSwgMHhFNEE5LCAweDE2MkUsIDB4RTRBQSwgMHhFNEZFLCAweDE2OEQsIDB4RTVBMSwgMHhFNUFELCAweDE2RTIsDQotICAgIDB4RTVBRSwgMHhFNUFFLCAweDE2RjIsIDB4RTVBRiwgMHhFNUIwLCAweDE2RUYsIDB4RTVCMSwgMHhFNUIyLCAweDExNDksDQotICAgIDB4RTVCMywgMHhFNUI4LCAweDE2RjEsIDB4RTVCOSwgMHhFNUI5LCAweDExNEIsIDB4RTVCQSwgMHhFNUJBLCAweDE2RjcsDQotICAgIDB4RTVCQiwgMHhFNUJDLCAweDExNEQsIDB4RTVCRCwgMHhFNUMzLCAweDE2RjgsIDB4RTVDNCwgMHhFNUM0LCAweDExNEYsDQotICAgIDB4RTVDNSwgMHhFNUNELCAweDE2RkYsIDB4RTVDRSwgMHhFNUNFLCAweDExNTMsIDB4RTVDRiwgMHhFNUNGLCAweDE3MDgsDQotICAgIDB4RTVEMCwgMHhFNUQwLCAweDExNTQsIDB4RTVEMSwgMHhFNUQxLCAweDE3MDksIDB4RTVEMiwgMHhFNUQyLCAweDExNTUsDQotICAgIDB4RTVEMywgMHhFNUQ1LCAweDE3MEEsIDB4RTVENiwgMHhFNUQ2LCAweDExNTcsIDB4RTVENywgMHhFNUY5LCAweDE3MEQsDQotICAgIDB4RTVGQSwgMHhFNUZCLCAweDExNUEsIDB4RTVGQywgMHhFNUZDLCAweDEwM0YsIDB4RTVGRCwgMHhFNUZELCAweDE3MzAsDQotICAgIDB4RTVGRSwgMHhFNUZFLCAweDExNUMsIDB4RTZBMSwgMHhFNkExLCAweDExNUYsIDB4RTZBMiwgMHhFNkEzLCAweDE3MzEsDQotICAgIDB4RTZBNCwgMHhFNkE0LCAweDExNjEsIDB4RTZBNSwgMHhFNkE2LCAweDE3MzMsIDB4RTZBNywgMHhFNkE3LCAweDExNjIsDQotICAgIDB4RTZBOCwgMHhFNkFDLCAweDE3MzUsIDB4RTZBRCwgMHhFNkFELCAweDExNjUsIDB4RTZBRSwgMHhFNkFFLCAweDE3M0EsDQotICAgIDB4RTZBRiwgMHhFNkIxLCAweDExNjcsIDB4RTZCMiwgMHhFNkIyLCAweDE3M0IsIDB4RTZCMywgMHhFNkIzLCAweDExNkEsDQotICAgIDB4RTZCNCwgMHhFNkI2LCAweDE3M0MsIDB4RTZCNywgMHhFNkI4LCAweDExNkIsIDB4RTZCOSwgMHhFNkJCLCAweDE3M0YsDQotICAgIDB4RTZCQywgMHhFNkJDLCAweDExNkYsIDB4RTZCRCwgMHhFNkMzLCAweDE3NDIsIDB4RTZDNCwgMHhFNkM0LCAweDEwNDAsDQotICAgIDB4RTZDNSwgMHhFNkM1LCAweDE3NDksIDB4RTZDNiwgMHhFNkM3LCAweDExNzEsIDB4RTZDOCwgMHhFNkM5LCAweDE3NEEsDQotICAgIDB4RTZDQSwgMHhFNkNBLCAweDEwNDEsIDB4RTZDQiwgMHhFNkQxLCAweDE3NEMsIDB4RTZEMiwgMHhFNkQyLCAweDExNzQsDQotICAgIDB4RTZEMywgMHhFNkQ1LCAweDE3NTMsIDB4RTZENiwgMHhFNkQ2LCAweDExNzUsIDB4RTZENywgMHhFNkQ4LCAweDE3NTYsDQotICAgIDB4RTZEOSwgMHhFNkQ5LCAweDExNzYsIDB4RTZEQSwgMHhFNkRCLCAweDE3NTgsIDB4RTZEQywgMHhFNkRDLCAweDEwNDIsDQotICAgIDB4RTZERCwgMHhFNkRFLCAweDE3NUEsIDB4RTZERiwgMHhFNkRGLCAweDExNzcsIDB4RTZFMCwgMHhFNkUwLCAweDE3NUMsDQotICAgIDB4RTZFMSwgMHhFNkUxLCAweDExNzgsIDB4RTZFMiwgMHhFNkUzLCAweDE3NUQsIDB4RTZFNCwgMHhFNkU0LCAweDExN0EsDQotICAgIDB4RTZFNSwgMHhFNkU1LCAweDExNzksIDB4RTZFNiwgMHhFNkU2LCAweDExN0IsIDB4RTZFNywgMHhFNkU3LCAweDE3NUYsDQotICAgIDB4RTZFOCwgMHhFNkU4LCAweDExN0MsIDB4RTZFOSwgMHhFNkU5LCAweDE3NjAsIDB4RTZFQSwgMHhFNkVCLCAweDExN0UsDQotICAgIDB4RTZFQywgMHhFNkVDLCAweDE5MkYsIDB4RTZFRCwgMHhFNkVFLCAweDE3NjEsIDB4RTZFRiwgMHhFNkVGLCAweDExODEsDQotICAgIDB4RTZGMCwgMHhFNkYwLCAweDE3NjMsIDB4RTZGMSwgMHhFNkYxLCAweDExODIsIDB4RTZGMiwgMHhFNkYyLCAweDE1NTQsDQotICAgIDB4RTZGMywgMHhFNkY0LCAweDE3NjQsIDB4RTZGNSwgMHhFNkY1LCAweDExODMsIDB4RTZGNiwgMHhFNkY2LCAweDEwNDMsDQotICAgIDB4RTZGNywgMHhFNkY3LCAweDEwNDYsIDB4RTZGOCwgMHhFNkY4LCAweDE3NjYsIDB4RTZGOSwgMHhFNkY5LCAweDExODUsDQotICAgIDB4RTZGQSwgMHhFNkZFLCAweDE3NjcsIDB4RTdBMSwgMHhFN0ExLCAweDExODcsIDB4RTdBMiwgMHhFN0E1LCAweDE3NkMsDQotICAgIDB4RTdBNiwgMHhFN0E2LCAweDExODgsIDB4RTdBNywgMHhFN0E4LCAweDE3NzAsIDB4RTdBOSwgMHhFN0E5LCAweDExODksDQotICAgIDB4RTdBQSwgMHhFN0FBLCAweDExOEIsIDB4RTdBQiwgMHhFN0FCLCAweDE3NzIsIDB4RTdBQywgMHhFN0FDLCAweDEwNDcsDQotICAgIDB4RTdBRCwgMHhFN0FELCAweDExOEQsIDB4RTdBRSwgMHhFN0FGLCAweDE3NzMsIDB4RTdCMCwgMHhFN0IwLCAweDExOEUsDQotICAgIDB4RTdCMSwgMHhFN0JFLCAweDE3NzUsIDB4RTdCRiwgMHhFN0JGLCAweDExOEYsIDB4RTdDMCwgMHhFN0MwLCAweDE3ODMsDQotICAgIDB4RTdDMSwgMHhFN0MxLCAweDFFNjcsIDB4RTdDMiwgMHhFN0M1LCAweDE3ODQsIDB4RTdDNiwgMHhFN0M2LCAweDExOTEsDQotICAgIDB4RTdDNywgMHhFN0M3LCAweDExOTMsIDB4RTdDOCwgMHhFN0NBLCAweDE3ODgsIDB4RTdDQiwgMHhFN0NCLCAweDExOTUsDQotICAgIDB4RTdDQywgMHhFN0NDLCAweDE3OEIsIDB4RTdDRCwgMHhFN0NELCAweDExOTYsIDB4RTdDRSwgMHhFN0NFLCAweDE3OEMsDQotICAgIDB4RTdDRiwgMHhFN0QwLCAweDExOTcsIDB4RTdEMSwgMHhFN0QyLCAweDE3OEQsIDB4RTdEMywgMHhFN0QzLCAweDExOUEsDQotICAgIDB4RTdENCwgMHhFN0RFLCAweDE3OEYsIDB4RTdERiwgMHhFN0RGLCAweDExOUMsIDB4RTdFMCwgMHhFN0UzLCAweDE3OUEsDQotICAgIDB4RTdFNCwgMHhFN0U0LCAweDExOUQsIDB4RTdFNSwgMHhFN0U1LCAweDE3OUUsIDB4RTdFNiwgMHhFN0U2LCAweDExOUUsDQotICAgIDB4RTdFNywgMHhFN0Y2LCAweDE3OUYsIDB4RTdGNywgMHhFN0Y3LCAweDE2QTUsIDB4RTdGOCwgMHhFN0ZFLCAweDE3QUYsDQotICAgIDB4RThBMSwgMHhFOEU2LCAweDE3QjYsIDB4RThFNywgMHhFOEU4LCAweDExQzcsIDB4RThFOSwgMHhFOEVGLCAweDE3RkMsDQotICAgIDB4RThGMCwgMHhFOEYwLCAweDExQzksIDB4RThGMSwgMHhFOEYxLCAweDEwNTQsIDB4RThGMiwgMHhFOEY2LCAweDE4MDMsDQotICAgIDB4RThGNywgMHhFOEY3LCAweDExQ0IsIDB4RThGOCwgMHhFOEY4LCAweDE4MDgsIDB4RThGOSwgMHhFOEY5LCAweDE2QTgsDQotICAgIDB4RThGQSwgMHhFOEZBLCAweDE4MDksIDB4RThGQiwgMHhFOEZCLCAweDExQ0MsIDB4RThGQywgMHhFOEZELCAweDE4MEEsDQotICAgIDB4RThGRSwgMHhFOEZFLCAweDExQ0QsIDB4RTlBMSwgMHhFOUE2LCAweDE4MEMsIDB4RTlBNywgMHhFOUE3LCAweDExRDAsDQotICAgIDB4RTlBOCwgMHhFOUFCLCAweDE4MTIsIDB4RTlBQywgMHhFOUFDLCAweDExRDEsIDB4RTlBRCwgMHhFOUNCLCAweDE4MTYsDQotICAgIDB4RTlDQywgMHhFOUNDLCAweDExRDMsIDB4RTlDRCwgMHhFOUY2LCAweDE4MzUsIDB4RTlGNywgMHhFOUY3LCAweDFGMzQsDQotICAgIDB4RTlGOCwgMHhFOUZFLCAweDE4NUYsIDB4RUFBMSwgMHhFQUMwLCAweDE4NjYsIDB4RUFDMSwgMHhFQUMxLCAweDE3RUIsDQotICAgIDB4RUFDMiwgMHhFQUU0LCAweDE4ODYsIDB4RUFFNSwgMHhFQUU1LCAweDExRTEsIDB4RUFFNiwgMHhFQUYzLCAweDE4QTksDQotICAgIDB4RUFGNCwgMHhFQUY0LCAweDEwNTcsIDB4RUFGNSwgMHhFQUY2LCAweDE4QjcsIDB4RUFGNywgMHhFQUY3LCAweDExRTMsDQotICAgIDB4RUFGOCwgMHhFQUZCLCAweDE4QjksIDB4RUFGQywgMHhFQUZDLCAweDExRTUsIDB4RUFGRCwgMHhFQUZELCAweDE4QkQsDQotICAgIDB4RUFGRSwgMHhFQUZFLCAweDExRTYsIDB4RUJBMSwgMHhFQkEzLCAweDE4QkUsIDB4RUJBNCwgMHhFQkE0LCAweDExRTgsDQotICAgIDB4RUJBNSwgMHhFQkE2LCAweDE4QzEsIDB4RUJBNywgMHhFQkE3LCAweDExRUEsIDB4RUJBOCwgMHhFQkE4LCAweDE4QzMsDQotICAgIDB4RUJBOSwgMHhFQkE5LCAweDExRUMsIDB4RUJBQSwgMHhFQkFBLCAweDEwNTgsIDB4RUJBQiwgMHhFQkI5LCAweDE4QzQsDQotICAgIDB4RUJCQSwgMHhFQkJCLCAweDExRUUsIDB4RUJCQywgMHhFQkJDLCAweDE4RDMsIDB4RUJCRCwgMHhFQkJELCAweDExRjAsDQotICAgIDB4RUJCRSwgMHhFQkMwLCAweDE4RDQsIDB4RUJDMSwgMHhFQkMxLCAweDExRjEsIDB4RUJDMiwgMHhFQkMyLCAweDExRjMsDQotICAgIDB4RUJDMywgMHhFQkM1LCAweDE4RDcsIDB4RUJDNiwgMHhFQkM3LCAweDExRjQsIDB4RUJDOCwgMHhFQkNCLCAweDE4REEsDQotICAgIDB4RUJDQywgMHhFQkNDLCAweDExRjcsIDB4RUJDRCwgMHhFQkNFLCAweDE4REUsIDB4RUJDRiwgMHhFQkQxLCAweDExRjgsDQotICAgIDB4RUJEMiwgMHhFQkQyLCAweDE1QjAsIDB4RUJEMywgMHhFQkQ3LCAweDE4RTAsIDB4RUJEOCwgMHhFQkQ4LCAweDExRkIsDQotICAgIDB4RUJEOSwgMHhFQkZFLCAweDE4RTUsIDB4RUNBMSwgMHhFQ0E1LCAweDE5MEIsIDB4RUNBNiwgMHhFQ0E2LCAweDEyMDYsDQotICAgIDB4RUNBNywgMHhFQ0E3LCAweDEyMDgsIDB4RUNBOCwgMHhFQ0E5LCAweDE5MTAsIDB4RUNBQSwgMHhFQ0FBLCAweDEyMEEsDQotICAgIDB4RUNBQiwgMHhFQ0FFLCAweDE5MTIsIDB4RUNBRiwgMHhFQ0FGLCAweDE3M0UsIDB4RUNCMCwgMHhFQ0IxLCAweDEyMEMsDQotICAgIDB4RUNCMiwgMHhFQ0IyLCAweDEwNUIsIDB4RUNCMywgMHhFQ0I0LCAweDE5MTYsIDB4RUNCNSwgMHhFQ0I1LCAweDEyMTEsDQotICAgIDB4RUNCNiwgMHhFQ0I3LCAweDE5MTgsIDB4RUNCOCwgMHhFQ0I4LCAweDEyMTMsIDB4RUNCOSwgMHhFQ0I5LCAweDE5MUEsDQotICAgIDB4RUNCQSwgMHhFQ0JBLCAweDEyMTUsIDB4RUNCQiwgMHhFQ0JGLCAweDE5MUIsIDB4RUNDMCwgMHhFQ0MxLCAweDEyMTgsDQotICAgIDB4RUNDMiwgMHhFQ0M0LCAweDE5MjAsIDB4RUNDNSwgMHhFQ0M1LCAweDEyMUEsIDB4RUNDNiwgMHhFQ0M2LCAweDEyMUMsDQotICAgIDB4RUNDNywgMHhFQ0M4LCAweDE5MjMsIDB4RUNDOSwgMHhFQ0NBLCAweDEwNUMsIDB4RUNDQiwgMHhFQ0Q0LCAweDE5MjUsDQotICAgIDB4RUNENSwgMHhFQ0Q1LCAweDEyMUUsIDB4RUNENiwgMHhFQ0RDLCAweDE5MkYsIDB4RUNERCwgMHhFQ0RFLCAweDEyMjAsDQotICAgIDB4RUNERiwgMHhFQ0UwLCAweDE5MzYsIDB4RUNFMSwgMHhFQ0UxLCAweDEyMjIsIDB4RUNFMiwgMHhFQ0UzLCAweDE5MzgsDQotICAgIDB4RUNFNCwgMHhFQ0U0LCAweDEyMjQsIDB4RUNFNSwgMHhFQ0U2LCAweDE5M0EsIDB4RUNFNywgMHhFQ0U4LCAweDEyMjUsDQotICAgIDB4RUNFOSwgMHhFQ0Y2LCAweDE5M0MsIDB4RUNGNywgMHhFQ0Y4LCAweDEyMjcsIDB4RUNGOSwgMHhFQ0Y5LCAweDE5NEEsDQotICAgIDB4RUNGQSwgMHhFQ0ZBLCAweDEyMkEsIDB4RUNGQiwgMHhFQ0ZFLCAweDE5NEIsIDB4RURBMSwgMHhFREEzLCAweDEyMkQsDQotICAgIDB4RURBNCwgMHhFREVELCAweDE5NEYsIDB4RURFRSwgMHhFREVFLCAweDE0RTcsIDB4RURFRiwgMHhFREZFLCAweDE5OTksDQotICAgIDB4RUVBMSwgMHhFRURBLCAweDE5QTksIDB4RUVEQiwgMHhFRURCLCAweDE5NUUsIDB4RUVEQywgMHhFRUZFLCAweDE5RTMsDQotICAgIDB4RUZBMSwgMHhFRkZFLCAweDFBMDYsIDB4RjBBMSwgMHhGMEZFLCAweDFBNjQsIDB4RjFBMSwgMHhGMUZFLCAweDFBQzIsDQotICAgIDB4RjJBMSwgMHhGMkJDLCAweDFCMjAsIDB4RjJCRCwgMHhGMkJELCAweDE2NjMsIDB4RjJCRSwgMHhGMkY5LCAweDFCM0MsDQotICAgIDB4RjJGQSwgMHhGMkZBLCAweDE2OEIsIDB4RjJGQiwgMHhGMkZFLCAweDFCNzgsIDB4RjNBMSwgMHhGM0IwLCAweDFCN0MsDQotICAgIDB4RjNCMSwgMHhGM0IxLCAweDEwNUYsIDB4RjNCMiwgMHhGM0ZFLCAweDFCOEMsIDB4RjRBMSwgMHhGNEE2LCAweDFCRDksDQotICAgIDB4RjRBNywgMHhGNEE3LCAweDE5NTQsIDB4RjRBOCwgMHhGNEVELCAweDFCREYsIDB4RjRFRSwgMHhGNEVFLCAweDFBMUMsDQotICAgIDB4RjRFRiwgMHhGNEZFLCAweDFDMjUsIDB4RjVBMSwgMHhGNUZFLCAweDFDMzUsIDB4RjZBMSwgMHhGNkYzLCAweDFDOTMsDQotICAgIDB4RjZGNCwgMHhGNkY0LCAweDEwQjcsIDB4RjZGNSwgMHhGNkY1LCAweDFDRTYsIDB4RjZGNiwgMHhGNkY2LCAweDFCRTMsDQotICAgIDB4RjZGNywgMHhGNkZFLCAweDFDRTcsIDB4RjdBMSwgMHhGN0I3LCAweDFDRUYsIDB4RjdCOCwgMHhGN0I4LCAweDEwOTcsDQotICAgIDB4RjdCOSwgMHhGN0M3LCAweDFEMDYsIDB4RjdDOCwgMHhGN0M4LCAweDEwQUEsIDB4RjdDOSwgMHhGN0QyLCAweDFEMTUsDQotICAgIDB4RjdEMywgMHhGN0QzLCAweDEwRjQsIDB4RjdENCwgMHhGN0ZFLCAweDFEMUYsIDB4RjhBMSwgMHhGOERBLCAweDFENEEsDQotICAgIDB4RjhEQiwgMHhGOERCLCAweDFEOTQsIDB4RjhEQywgMHhGOEVGLCAweDFEODQsIDB4RjhGMCwgMHhGOEYwLCAweDEzRTAsDQotICAgIDB4RjhGMSwgMHhGOEZFLCAweDFEOTgsIDB4RjlBMSwgMHhGOUZFLCAweDFEQTYsIDB4RkFBMSwgMHhGQUExLCAweDFFMUQsDQotICAgIDB4RkFBMiwgMHhGQUEyLCAweDBERTYsIDB4RkFBMywgMHhGQUU1LCAweDFFMDQsIDB4RkFFNiwgMHhGQUU2LCAweDBFM0MsDQotICAgIDB4RkFFNywgMHhGQUZFLCAweDFFNDcsIDB4RkJBMSwgMHhGQkZFLCAweDFFNUYsIDB4RkNBMSwgMHhGQ0E4LCAweDFFQkQsDQotICAgIDB4RkNBOSwgMHhGQ0E5LCAweDBFRTcsIDB4RkNBQSwgMHhGQ0ZFLCAweDFFQzUsIDB4RkRBMSwgMHhGREZFLCAweDFGMUEsDQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfS1NDbXNfVUhDX0hfMVs2NzUgKiAzXSA9IHsKKyAgICAweDAwMjAsIDB4MDA3RSwgMHgwMDAxLCAweDgxNDEsIDB4ODE1QSwgMHgyNDc1LCAweDgxNjEsIDB4ODE3QSwgMHgyNDhGLAorICAgIDB4ODE4MSwgMHg4MUZFLCAweDI0QTksIDB4ODI0MSwgMHg4MjVBLCAweDI1MjcsIDB4ODI2MSwgMHg4MjdBLCAweDI1NDEsCisgICAgMHg4MjgxLCAweDgyRkUsIDB4MjU1QiwgMHg4MzQxLCAweDgzNUEsIDB4MjVEOSwgMHg4MzYxLCAweDgzN0EsIDB4MjVGMywKKyAgICAweDgzODEsIDB4ODNGRSwgMHgyNjBELCAweDg0NDEsIDB4ODQ1QSwgMHgyNjhCLCAweDg0NjEsIDB4ODQ3QSwgMHgyNkE1LAorICAgIDB4ODQ4MSwgMHg4NEZFLCAweDI2QkYsIDB4ODU0MSwgMHg4NTVBLCAweDI3M0QsIDB4ODU2MSwgMHg4NTdBLCAweDI3NTcsCisgICAgMHg4NTgxLCAweDg1RkUsIDB4Mjc3MSwgMHg4NjQxLCAweDg2NUEsIDB4MjdFRiwgMHg4NjYxLCAweDg2N0EsIDB4MjgwOSwKKyAgICAweDg2ODEsIDB4ODZGRSwgMHgyODIzLCAweDg3NDEsIDB4ODc1QSwgMHgyOEExLCAweDg3NjEsIDB4ODc3QSwgMHgyOEJCLAorICAgIDB4ODc4MSwgMHg4N0ZFLCAweDI4RDUsIDB4ODg0MSwgMHg4ODVBLCAweDI5NTMsIDB4ODg2MSwgMHg4ODdBLCAweDI5NkQsCisgICAgMHg4ODgxLCAweDg4RkUsIDB4Mjk4NywgMHg4OTQxLCAweDg5NUEsIDB4MkEwNSwgMHg4OTYxLCAweDg5N0EsIDB4MkExRiwKKyAgICAweDg5ODEsIDB4ODlGRSwgMHgyQTM5LCAweDhBNDEsIDB4OEE1QSwgMHgyQUI3LCAweDhBNjEsIDB4OEE3QSwgMHgyQUQxLAorICAgIDB4OEE4MSwgMHg4QUZFLCAweDJBRUIsIDB4OEI0MSwgMHg4QjVBLCAweDJCNjksIDB4OEI2MSwgMHg4QjdBLCAweDJCODMsCisgICAgMHg4QjgxLCAweDhCRkUsIDB4MkI5RCwgMHg4QzQxLCAweDhDNUEsIDB4MkMxQiwgMHg4QzYxLCAweDhDN0EsIDB4MkMzNSwKKyAgICAweDhDODEsIDB4OENGRSwgMHgyQzRGLCAweDhENDEsIDB4OEQ1QSwgMHgyQ0NELCAweDhENjEsIDB4OEQ3QSwgMHgyQ0U3LAorICAgIDB4OEQ4MSwgMHg4REZFLCAweDJEMDEsIDB4OEU0MSwgMHg4RTVBLCAweDJEN0YsIDB4OEU2MSwgMHg4RTdBLCAweDJEOTksCisgICAgMHg4RTgxLCAweDhFRkUsIDB4MkRCMywgMHg4RjQxLCAweDhGNUEsIDB4MkUzMSwgMHg4RjYxLCAweDhGN0EsIDB4MkU0QiwKKyAgICAweDhGODEsIDB4OEZGRSwgMHgyRTY1LCAweDkwNDEsIDB4OTA1QSwgMHgyRUUzLCAweDkwNjEsIDB4OTA3QSwgMHgyRUZELAorICAgIDB4OTA4MSwgMHg5MEZFLCAweDJGMTcsIDB4OTE0MSwgMHg5MTVBLCAweDJGOTUsIDB4OTE2MSwgMHg5MTdBLCAweDJGQUYsCisgICAgMHg5MTgxLCAweDkxRkUsIDB4MkZDOSwgMHg5MjQxLCAweDkyNUEsIDB4MzA0NywgMHg5MjYxLCAweDkyN0EsIDB4MzA2MSwKKyAgICAweDkyODEsIDB4OTJGRSwgMHgzMDdCLCAweDkzNDEsIDB4OTM1QSwgMHgzMEY5LCAweDkzNjEsIDB4OTM3QSwgMHgzMTEzLAorICAgIDB4OTM4MSwgMHg5M0ZFLCAweDMxMkQsIDB4OTQ0MSwgMHg5NDVBLCAweDMxQUIsIDB4OTQ2MSwgMHg5NDdBLCAweDMxQzUsCisgICAgMHg5NDgxLCAweDk0RkUsIDB4MzFERiwgMHg5NTQxLCAweDk1NUEsIDB4MzI1RCwgMHg5NTYxLCAweDk1N0EsIDB4MzI3NywKKyAgICAweDk1ODEsIDB4OTVGRSwgMHgzMjkxLCAweDk2NDEsIDB4OTY1QSwgMHgzMzBGLCAweDk2NjEsIDB4OTY3QSwgMHgzMzI5LAorICAgIDB4OTY4MSwgMHg5NkZFLCAweDMzNDMsIDB4OTc0MSwgMHg5NzVBLCAweDMzQzEsIDB4OTc2MSwgMHg5NzdBLCAweDMzREIsCisgICAgMHg5NzgxLCAweDk3RkUsIDB4MzNGNSwgMHg5ODQxLCAweDk4NUEsIDB4MzQ3MywgMHg5ODYxLCAweDk4N0EsIDB4MzQ4RCwKKyAgICAweDk4ODEsIDB4OThGRSwgMHgzNEE3LCAweDk5NDEsIDB4OTk1QSwgMHgzNTI1LCAweDk5NjEsIDB4OTk3QSwgMHgzNTNGLAorICAgIDB4OTk4MSwgMHg5OUZFLCAweDM1NTksIDB4OUE0MSwgMHg5QTVBLCAweDM1RDcsIDB4OUE2MSwgMHg5QTdBLCAweDM1RjEsCisgICAgMHg5QTgxLCAweDlBRkUsIDB4MzYwQiwgMHg5QjQxLCAweDlCNUEsIDB4MzY4OSwgMHg5QjYxLCAweDlCN0EsIDB4MzZBMywKKyAgICAweDlCODEsIDB4OUJGRSwgMHgzNkJELCAweDlDNDEsIDB4OUM1QSwgMHgzNzNCLCAweDlDNjEsIDB4OUM3QSwgMHgzNzU1LAorICAgIDB4OUM4MSwgMHg5Q0ZFLCAweDM3NkYsIDB4OUQ0MSwgMHg5RDVBLCAweDM3RUQsIDB4OUQ2MSwgMHg5RDdBLCAweDM4MDcsCisgICAgMHg5RDgxLCAweDlERkUsIDB4MzgyMSwgMHg5RTQxLCAweDlFNUEsIDB4Mzg5RiwgMHg5RTYxLCAweDlFN0EsIDB4MzhCOSwKKyAgICAweDlFODEsIDB4OUVGRSwgMHgzOEQzLCAweDlGNDEsIDB4OUY1QSwgMHgzOTUxLCAweDlGNjEsIDB4OUY3QSwgMHgzOTZCLAorICAgIDB4OUY4MSwgMHg5RkZFLCAweDM5ODUsIDB4QTA0MSwgMHhBMDVBLCAweDNBMDMsIDB4QTA2MSwgMHhBMDdBLCAweDNBMUQsCisgICAgMHhBMDgxLCAweEEwRkUsIDB4M0EzNywgMHhBMTQxLCAweEExNUEsIDB4M0FCNSwgMHhBMTYxLCAweEExN0EsIDB4M0FDRiwKKyAgICAweEExODEsIDB4QTFBMCwgMHgzQUU5LCAweEExQTEsIDB4QTFGRSwgMHgwMDY1LCAweEEyNDEsIDB4QTI1QSwgMHgzQjA5LAorICAgIDB4QTI2MSwgMHhBMjdBLCAweDNCMjMsIDB4QTI4MSwgMHhBMkEwLCAweDNCM0QsIDB4QTJBMSwgMHhBMkU1LCAweDAwQzMsCisgICAgMHhBMzQxLCAweEEzNUEsIDB4M0I1RCwgMHhBMzYxLCAweEEzN0EsIDB4M0I3NywgMHhBMzgxLCAweEEzQTAsIDB4M0I5MSwKKyAgICAweEEzQTEsIDB4QTNGRSwgMHgwMTA4LCAweEE0NDEsIDB4QTQ1QSwgMHgzQkIxLCAweEE0NjEsIDB4QTQ3QSwgMHgzQkNCLAorICAgIDB4QTQ4MSwgMHhBNEEwLCAweDNCRTUsIDB4QTRBMSwgMHhBNEQzLCAweDAxNjYsIDB4QTRENSwgMHhBNEZFLCAweDAxOTksCisgICAgMHhBNTQxLCAweEE1NUEsIDB4M0MwNSwgMHhBNTYxLCAweEE1N0EsIDB4M0MxRiwgMHhBNTgxLCAweEE1QTAsIDB4M0MzOSwKKyAgICAweEE1QTEsIDB4QTVBQSwgMHgwMUMzLCAweEE1QjAsIDB4QTVCOSwgMHgwMUNELCAweEE1QzEsIDB4QTVEOCwgMHgwMUQ3LAorICAgIDB4QTVFMSwgMHhBNUY4LCAweDAxRUYsIDB4QTY0MSwgMHhBNjVBLCAweDNDNTksIDB4QTY2MSwgMHhBNjdBLCAweDNDNzMsCisgICAgMHhBNjgxLCAweEE2QTAsIDB4M0M4RCwgMHhBNkExLCAweEE2RTQsIDB4MDIwNywgMHhBNzQxLCAweEE3NUEsIDB4M0NBRCwKKyAgICAweEE3NjEsIDB4QTc3QSwgMHgzQ0M3LCAweEE3ODEsIDB4QTdBMCwgMHgzQ0UxLCAweEE3QTEsIDB4QTdFRiwgMHgwMjRCLAorICAgIDB4QTg0MSwgMHhBODVBLCAweDNEMDEsIDB4QTg2MSwgMHhBODdBLCAweDNEMUIsIDB4QTg4MSwgMHhBOEEwLCAweDNEMzUsCisgICAgMHhBOEExLCAweEE4QTQsIDB4MDI5QSwgMHhBOEE2LCAweEE4QTYsIDB4MDI5RSwgMHhBOEE4LCAweEE4QUYsIDB4MDI5RiwKKyAgICAweEE4QjEsIDB4QThGRSwgMHgwMkE3LCAweEE5NDEsIDB4QTk1QSwgMHgzRDU1LCAweEE5NjEsIDB4QTk3QSwgMHgzRDZGLAorICAgIDB4QTk4MSwgMHhBOUEwLCAweDNEODksIDB4QTlBMSwgMHhBOUZFLCAweDAyRjUsIDB4QUE0MSwgMHhBQTVBLCAweDNEQTksCisgICAgMHhBQTYxLCAweEFBN0EsIDB4M0RDMywgMHhBQTgxLCAweEFBQTAsIDB4M0RERCwgMHhBQUExLCAweEFBRjMsIDB4MDM1MywKKyAgICAweEFCNDEsIDB4QUI1QSwgMHgzREZELCAweEFCNjEsIDB4QUI3QSwgMHgzRTE3LCAweEFCODEsIDB4QUJBMCwgMHgzRTMxLAorICAgIDB4QUJBMSwgMHhBQkY2LCAweDAzQTYsIDB4QUM0MSwgMHhBQzVBLCAweDNFNTEsIDB4QUM2MSwgMHhBQzdBLCAweDNFNkIsCisgICAgMHhBQzgxLCAweEFDQTAsIDB4M0U4NSwgMHhBQ0ExLCAweEFDQzEsIDB4MDNGQywgMHhBQ0QxLCAweEFDRjEsIDB4MDQxRCwKKyAgICAweEFENDEsIDB4QUQ1QSwgMHgzRUE1LCAweEFENjEsIDB4QUQ3QSwgMHgzRUJGLCAweEFEODEsIDB4QURBMCwgMHgzRUQ5LAorICAgIDB4QUU0MSwgMHhBRTVBLCAweDNFRjksIDB4QUU2MSwgMHhBRTdBLCAweDNGMTMsIDB4QUU4MSwgMHhBRUEwLCAweDNGMkQsCisgICAgMHhBRjQxLCAweEFGNUEsIDB4M0Y0RCwgMHhBRjYxLCAweEFGN0EsIDB4M0Y2NywgMHhBRjgxLCAweEFGQTAsIDB4M0Y4MSwKKyAgICAweEIwNDEsIDB4QjA1QSwgMHgzRkExLCAweEIwNjEsIDB4QjA3QSwgMHgzRkJCLCAweEIwODEsIDB4QjBBMCwgMHgzRkQ1LAorICAgIDB4QjBBMSwgMHhCMEZFLCAweDA0M0UsIDB4QjE0MSwgMHhCMTVBLCAweDNGRjUsIDB4QjE2MSwgMHhCMTdBLCAweDQwMEYsCisgICAgMHhCMTgxLCAweEIxQTAsIDB4NDAyOSwgMHhCMUExLCAweEIxRkUsIDB4MDQ5QywgMHhCMjQxLCAweEIyNUEsIDB4NDA0OSwKKyAgICAweEIyNjEsIDB4QjI3QSwgMHg0MDYzLCAweEIyODEsIDB4QjJBMCwgMHg0MDdELCAweEIyQTEsIDB4QjJGRSwgMHgwNEZBLAorICAgIDB4QjM0MSwgMHhCMzVBLCAweDQwOUQsIDB4QjM2MSwgMHhCMzdBLCAweDQwQjcsIDB4QjM4MSwgMHhCM0EwLCAweDQwRDEsCisgICAgMHhCM0ExLCAweEIzRkUsIDB4MDU1OCwgMHhCNDQxLCAweEI0NUEsIDB4NDBGMSwgMHhCNDYxLCAweEI0N0EsIDB4NDEwQiwKKyAgICAweEI0ODEsIDB4QjRBMCwgMHg0MTI1LCAweEI0QTEsIDB4QjRGRSwgMHgwNUI2LCAweEI1NDEsIDB4QjU1QSwgMHg0MTQ1LAorICAgIDB4QjU2MSwgMHhCNTdBLCAweDQxNUYsIDB4QjU4MSwgMHhCNUEwLCAweDQxNzksIDB4QjVBMSwgMHhCNUZFLCAweDA2MTQsCisgICAgMHhCNjQxLCAweEI2NUEsIDB4NDE5OSwgMHhCNjYxLCAweEI2N0EsIDB4NDFCMywgMHhCNjgxLCAweEI2QTAsIDB4NDFDRCwKKyAgICAweEI2QTEsIDB4QjZGRSwgMHgwNjcyLCAweEI3NDEsIDB4Qjc1QSwgMHg0MUVELCAweEI3NjEsIDB4Qjc3QSwgMHg0MjA3LAorICAgIDB4Qjc4MSwgMHhCN0EwLCAweDQyMjEsIDB4QjdBMSwgMHhCN0ZFLCAweDA2RDAsIDB4Qjg0MSwgMHhCODVBLCAweDQyNDEsCisgICAgMHhCODYxLCAweEI4N0EsIDB4NDI1QiwgMHhCODgxLCAweEI4QTAsIDB4NDI3NSwgMHhCOEExLCAweEI4RkUsIDB4MDcyRSwKKyAgICAweEI5NDEsIDB4Qjk1QSwgMHg0Mjk1LCAweEI5NjEsIDB4Qjk3QSwgMHg0MkFGLCAweEI5ODEsIDB4QjlBMCwgMHg0MkM5LAorICAgIDB4QjlBMSwgMHhCOUZFLCAweDA3OEMsIDB4QkE0MSwgMHhCQTVBLCAweDQyRTksIDB4QkE2MSwgMHhCQTdBLCAweDQzMDMsCisgICAgMHhCQTgxLCAweEJBQTAsIDB4NDMxRCwgMHhCQUExLCAweEJBRkUsIDB4MDdFQSwgMHhCQjQxLCAweEJCNUEsIDB4NDMzRCwKKyAgICAweEJCNjEsIDB4QkI3QSwgMHg0MzU3LCAweEJCODEsIDB4QkJBMCwgMHg0MzcxLCAweEJCQTEsIDB4QkJGRSwgMHgwODQ4LAorICAgIDB4QkM0MSwgMHhCQzVBLCAweDQzOTEsIDB4QkM2MSwgMHhCQzdBLCAweDQzQUIsIDB4QkM4MSwgMHhCQ0EwLCAweDQzQzUsCisgICAgMHhCQ0ExLCAweEJDRkUsIDB4MDhBNiwgMHhCRDQxLCAweEJENUEsIDB4NDNFNSwgMHhCRDYxLCAweEJEN0EsIDB4NDNGRiwKKyAgICAweEJEODEsIDB4QkRBMCwgMHg0NDE5LCAweEJEQTEsIDB4QkRGRSwgMHgwOTA0LCAweEJFNDEsIDB4QkU1QSwgMHg0NDM5LAorICAgIDB4QkU2MSwgMHhCRTdBLCAweDQ0NTMsIDB4QkU4MSwgMHhCRUEwLCAweDQ0NkQsIDB4QkVBMSwgMHhCRUZFLCAweDA5NjIsCisgICAgMHhCRjQxLCAweEJGNUEsIDB4NDQ4RCwgMHhCRjYxLCAweEJGN0EsIDB4NDRBNywgMHhCRjgxLCAweEJGQTAsIDB4NDRDMSwKKyAgICAweEJGQTEsIDB4QkZGRSwgMHgwOUMwLCAweEMwNDEsIDB4QzA1QSwgMHg0NEUxLCAweEMwNjEsIDB4QzA3QSwgMHg0NEZCLAorICAgIDB4QzA4MSwgMHhDMEEwLCAweDQ1MTUsIDB4QzBBMSwgMHhDMEZFLCAweDBBMUUsIDB4QzE0MSwgMHhDMTVBLCAweDQ1MzUsCisgICAgMHhDMTYxLCAweEMxN0EsIDB4NDU0RiwgMHhDMTgxLCAweEMxQTAsIDB4NDU2OSwgMHhDMUExLCAweEMxRkUsIDB4MEE3QywKKyAgICAweEMyNDEsIDB4QzI1QSwgMHg0NTg5LCAweEMyNjEsIDB4QzI3QSwgMHg0NUEzLCAweEMyODEsIDB4QzJBMCwgMHg0NUJELAorICAgIDB4QzJBMSwgMHhDMkZFLCAweDBBREEsIDB4QzM0MSwgMHhDMzVBLCAweDQ1REQsIDB4QzM2MSwgMHhDMzdBLCAweDQ1RjcsCisgICAgMHhDMzgxLCAweEMzQTAsIDB4NDYxMSwgMHhDM0ExLCAweEMzRkUsIDB4MEIzOCwgMHhDNDQxLCAweEM0NUEsIDB4NDYzMSwKKyAgICAweEM0NjEsIDB4QzQ3QSwgMHg0NjRCLCAweEM0ODEsIDB4QzRBMCwgMHg0NjY1LCAweEM0QTEsIDB4QzRGRSwgMHgwQjk2LAorICAgIDB4QzU0MSwgMHhDNTVBLCAweDQ2ODUsIDB4QzU2MSwgMHhDNTdBLCAweDQ2OUYsIDB4QzU4MSwgMHhDNUEwLCAweDQ2QjksCisgICAgMHhDNUExLCAweEM1RkUsIDB4MEJGNCwgMHhDNjQxLCAweEM2NTIsIDB4NDZEOSwgMHhDNkExLCAweEM2RkUsIDB4MEM1MiwKKyAgICAweEM3QTEsIDB4QzdGRSwgMHgwQ0IwLCAweEM4QTEsIDB4QzhGRSwgMHgwRDBFLCAweENBQTEsIDB4Q0FGRSwgMHgwRDZDLAorICAgIDB4Q0JBMSwgMHhDQkNGLCAweDBEQ0EsIDB4Q0JEMCwgMHhDQkQwLCAweDEwMTQsIDB4Q0JEMSwgMHhDQkQ1LCAweDBERjksCisgICAgMHhDQkQ2LCAweENCRDYsIDB4MEU1RSwgMHhDQkQ3LCAweENCRTYsIDB4MERGRSwgMHhDQkU3LCAweENCRTcsIDB4MUI4RCwKKyAgICAweENCRTgsIDB4Q0JGRSwgMHgwRTBFLCAweENDQTEsIDB4Q0NGRSwgMHgwRTI1LCAweENEQTEsIDB4Q0RDRSwgMHgwRTgzLAorICAgIDB4Q0RDRiwgMHhDRENGLCAweDBEODQsIDB4Q0REMCwgMHhDREU3LCAweDBFQjEsIDB4Q0RFOCwgMHhDREU4LCAweDFFREMsCisgICAgMHhDREU5LCAweENERkUsIDB4MEVDOSwgMHhDRUExLCAweENFQUMsIDB4MEVERiwgMHhDRUFELCAweENFQUQsIDB4MEVEQSwKKyAgICAweENFQUUsIDB4Q0VGRSwgMHgwRUVCLCAweENGQTEsIDB4Q0ZGQSwgMHgwRjNDLCAweENGRkIsIDB4Q0ZGQiwgMHgwRjNFLAorICAgIDB4Q0ZGQywgMHhDRkZFLCAweDBGOTYsIDB4RDBBMSwgMHhEMEExLCAweDBGOTksIDB4RDBBMiwgMHhEMEEyLCAweDBGNkEsCisgICAgMHhEMEEzLCAweEQwQjcsIDB4MEY5QSwgMHhEMEI4LCAweEQwQjgsIDB4MEY2QSwgMHhEMEI5LCAweEQwQ0YsIDB4MEZBRiwKKyAgICAweEQwRDAsIDB4RDBEMCwgMHgwRTdDLCAweEQwRDEsIDB4RDBEQywgMHgwRkM2LCAweEQwREQsIDB4RDBERCwgMHgxMDIzLAorICAgIDB4RDBERSwgMHhEMEZFLCAweDBGRDIsIDB4RDFBMSwgMHhEMUQzLCAweDBGRjMsIDB4RDFENCwgMHhEMUQ0LCAweDExMTYsCisgICAgMHhEMUQ1LCAweEQxRDUsIDB4MTAzQywgMHhEMUQ2LCAweEQxRDcsIDB4MTAyNiwgMHhEMUQ4LCAweEQxRDgsIDB4MTExNywKKyAgICAweEQxRDksIDB4RDFEQSwgMHgxMDI4LCAweEQxREIsIDB4RDFFMCwgMHgxMTE4LCAweEQxRTEsIDB4RDFFMSwgMHgxMDJBLAorICAgIDB4RDFFMiwgMHhEMUUyLCAweDE2QTgsIDB4RDFFMywgMHhEMUU1LCAweDExMUUsIDB4RDFFNiwgMHhEMUU2LCAweDExMjIsCisgICAgMHhEMUU3LCAweEQxRTcsIDB4MTAyQiwgMHhEMUU4LCAweEQxRUIsIDB4MTEyMywgMHhEMUVDLCAweEQxRUMsIDB4MTAyQywKKyAgICAweEQxRUQsIDB4RDFFRCwgMHgxMTI3LCAweEQxRUUsIDB4RDFFRSwgMHgxMDJELCAweEQxRUYsIDB4RDFGMCwgMHgxMTJBLAorICAgIDB4RDFGMSwgMHhEMUYxLCAweDEwMkUsIDB4RDFGMiwgMHhEMUYyLCAweDExMkMsIDB4RDFGMywgMHhEMUY1LCAweDEwMkYsCisgICAgMHhEMUY2LCAweEQxRjYsIDB4MTEyRiwgMHhEMUY3LCAweEQxRjksIDB4MTAzMiwgMHhEMUZBLCAweEQxRkEsIDB4MTEzMywKKyAgICAweEQxRkIsIDB4RDFGQiwgMHgxMDM1LCAweEQxRkMsIDB4RDFGRCwgMHgxMTM2LCAweEQxRkUsIDB4RDFGRSwgMHgxMTM5LAorICAgIDB4RDJBMSwgMHhEMkExLCAweDEwMzYsIDB4RDJBMiwgMHhEMkEzLCAweDExM0EsIDB4RDJBNCwgMHhEMkE2LCAweDEwMzcsCisgICAgMHhEMkE3LCAweEQyQUEsIDB4MTEzQywgMHhEMkFCLCAweEQyQUIsIDB4MTE0MywgMHhEMkFDLCAweEQyQUMsIDB4MTAzQSwKKyAgICAweEQyQUQsIDB4RDJBRCwgMHgxMTQ0LCAweEQyQUUsIDB4RDJCMSwgMHgxMDNCLCAweEQyQjIsIDB4RDJCMiwgMHgxMTQ4LAorICAgIDB4RDJCMywgMHhEMkJELCAweDEwM0YsIDB4RDJCRSwgMHhEMkJFLCAweDExOUYsIDB4RDJCRiwgMHhEMkMxLCAweDEwNEEsCisgICAgMHhEMkMyLCAweEQyQzMsIDB4MTFBMSwgMHhEMkM0LCAweEQyQzQsIDB4MTFBNSwgMHhEMkM1LCAweEQyQzUsIDB4MTA0RCwKKyAgICAweEQyQzYsIDB4RDJDQSwgMHgxMUE2LCAweEQyQ0IsIDB4RDJDQiwgMHgxMUFDLCAweEQyQ0MsIDB4RDJDQywgMHgxMDRFLAorICAgIDB4RDJDRCwgMHhEMkNFLCAweDExQUQsIDB4RDJDRiwgMHhEMkQ0LCAweDExQjAsIDB4RDJENSwgMHhEMkQ3LCAweDExQjcsCisgICAgMHhEMkQ4LCAweEQyRDgsIDB4MTA0RiwgMHhEMkQ5LCAweEQyREEsIDB4MTFCRCwgMHhEMkRCLCAweEQyREQsIDB4MTA1MCwKKyAgICAweEQyREUsIDB4RDJERiwgMHgxMUMxLCAweEQyRTAsIDB4RDJFMCwgMHgxMDUzLCAweEQyRTEsIDB4RDJFMSwgMHgxMUMzLAorICAgIDB4RDJFMiwgMHhEMkUyLCAweDExQzYsIDB4RDJFMywgMHhEMkUzLCAweDEwNTQsIDB4RDJFNCwgMHhEMkU0LCAweDExRDQsCisgICAgMHhEMkU1LCAweEQyRTgsIDB4MTFENiwgMHhEMkU5LCAweEQyRUEsIDB4MTFEQiwgMHhEMkVCLCAweEQyRUIsIDB4MTFFMCwKKyAgICAweEQyRUMsIDB4RDJFRiwgMHgxMDU1LCAweEQyRjAsIDB4RDJGMywgMHgxMUZDLCAweEQyRjQsIDB4RDJGNSwgMHgxMjAxLAorICAgIDB4RDJGNiwgMHhEMkY2LCAweDEwNTksIDB4RDJGNywgMHhEMkY4LCAweDEyMDMsIDB4RDJGOSwgMHhEMkZFLCAweDEwNUEsCisgICAgMHhEM0ExLCAweEQzRkUsIDB4MTA2MCwgMHhENEExLCAweEQ0RTUsIDB4MTBCRSwgMHhENEU2LCAweEQ0RTYsIDB4MTBERSwKKyAgICAweEQ0RTcsIDB4RDRGQiwgMHgxMTAzLCAweEQ0RkMsIDB4RDRGQywgMHgxMDI4LCAweEQ0RkQsIDB4RDRGRSwgMHgxMTE4LAorICAgIDB4RDVBMSwgMHhENUE0LCAweDExMUEsIDB4RDVBNSwgMHhENUE1LCAweDE2QTgsIDB4RDVBNiwgMHhENUFBLCAweDExMUUsCisgICAgMHhENUFCLCAweEQ1QUIsIDB4MTAyQiwgMHhENUFDLCAweEQ1QUQsIDB4MTEyMywgMHhENUFFLCAweEQ1QUUsIDB4MTA2MCwKKyAgICAweEQ1QUYsIDB4RDVGRSwgMHgxMTI1LCAweEQ2QTEsIDB4RDZCNywgMHgxMTc1LCAweEQ2QjgsIDB4RDZCOCwgMHgxMDQ3LAorICAgIDB4RDZCOSwgMHhENkNDLCAweDExOEMsIDB4RDZDRCwgMHhENkNELCAweDEwNEMsIDB4RDZDRSwgMHhENkZFLCAweDExQTAsCisgICAgMHhEN0ExLCAweEQ3Q0EsIDB4MTFEMSwgMHhEN0NCLCAweEQ3Q0IsIDB4MTVCMCwgMHhEN0NDLCAweEQ3RTMsIDB4MTFGQiwKKyAgICAweEQ3RTQsIDB4RDdFNCwgMHgxOTE4LCAweEQ3RTUsIDB4RDdGRSwgMHgxMjEzLCAweEQ4QTEsIDB4RDhGRSwgMHgxMjJELAorICAgIDB4RDlBMSwgMHhEOUZFLCAweDEyOEIsIDB4REFBMSwgMHhEQUZFLCAweDEyRTksIDB4REJBMSwgMHhEQkM0LCAweDEzNDcsCisgICAgMHhEQkM1LCAweERCQzUsIDB4MTQxRiwgMHhEQkM2LCAweERCRTMsIDB4MTM2QiwgMHhEQkU0LCAweERCRTQsIDB4MTMzQSwKKyAgICAweERCRTUsIDB4REJGRSwgMHgxMzg5LCAweERDQTEsIDB4RENBNCwgMHgxM0EzLCAweERDQTUsIDB4RENBNSwgMHgxRDVFLAorICAgIDB4RENBNiwgMHhEQ0ZFLCAweDEzQTcsIDB4RERBMSwgMHhEREE0LCAweDE0MDAsIDB4RERBNSwgMHhEREE1LCAweDEzRDcsCisgICAgMHhEREE2LCAweERERDQsIDB4MTQwNCwgMHhEREQ1LCAweERERDUsIDB4MTNGNSwgMHhEREQ2LCAweERERjMsIDB4MTQzMywKKyAgICAweERERjQsIDB4RERGNCwgMHgxREI3LCAweERERjUsIDB4RERGRSwgMHgxNDUxLCAweERFQTEsIDB4REVGQiwgMHgxNDVCLAorICAgIDB4REVGQywgMHhERUZDLCAweDE1RDAsIDB4REVGRCwgMHhERUZELCAweDE0QjYsIDB4REVGRSwgMHhERUZFLCAweDE0RjcsCisgICAgMHhERkExLCAweERGQjIsIDB4MTRCNywgMHhERkIzLCAweERGQjMsIDB4MUJBQiwgMHhERkI0LCAweERGRTAsIDB4MTRDOSwKKyAgICAweERGRTEsIDB4REZFMSwgMHgxNEYyLCAweERGRTIsIDB4REZFNywgMHgxNEY2LCAweERGRTgsIDB4REZFOCwgMHgxNTZELAorICAgIDB4REZFOSwgMHhERkZFLCAweDE0RkMsIDB4RTBBMSwgMHhFMEYwLCAweDE1MTIsIDB4RTBGMSwgMHhFMEYxLCAweDE3NzEsCisgICAgMHhFMEYyLCAweEUwRkUsIDB4MTU2MiwgMHhFMUExLCAweEUxQUMsIDB4MTU2RiwgMHhFMUFELCAweEUxQUQsIDB4MTU1NCwKKyAgICAweEUxQUUsIDB4RTFFQywgMHgxNTdCLCAweEUxRUQsIDB4RTFFRCwgMHgxNEM1LCAweEUxRUUsIDB4RTFGRSwgMHgxNUJBLAorICAgIDB4RTJBMSwgMHhFMkZFLCAweDE1Q0IsIDB4RTNBMSwgMHhFM0Y0LCAweDE2MjksIDB4RTNGNSwgMHhFM0Y1LCAweDFCNjEsCisgICAgMHhFM0Y2LCAweEUzRkUsIDB4MTY3RCwgMHhFNEExLCAweEU0QTEsIDB4MUNDQSwgMHhFNEEyLCAweEU0QTgsIDB4MTY4NiwKKyAgICAweEU0QTksIDB4RTRBOSwgMHgxNjJFLCAweEU0QUEsIDB4RTRGRSwgMHgxNjhELCAweEU1QTEsIDB4RTVBRCwgMHgxNkUyLAorICAgIDB4RTVBRSwgMHhFNUFFLCAweDE2RjIsIDB4RTVBRiwgMHhFNUIwLCAweDE2RUYsIDB4RTVCMSwgMHhFNUIyLCAweDExNDksCisgICAgMHhFNUIzLCAweEU1QjgsIDB4MTZGMSwgMHhFNUI5LCAweEU1QjksIDB4MTE0QiwgMHhFNUJBLCAweEU1QkEsIDB4MTZGNywKKyAgICAweEU1QkIsIDB4RTVCQywgMHgxMTRELCAweEU1QkQsIDB4RTVDMywgMHgxNkY4LCAweEU1QzQsIDB4RTVDNCwgMHgxMTRGLAorICAgIDB4RTVDNSwgMHhFNUNELCAweDE2RkYsIDB4RTVDRSwgMHhFNUNFLCAweDExNTMsIDB4RTVDRiwgMHhFNUNGLCAweDE3MDgsCisgICAgMHhFNUQwLCAweEU1RDAsIDB4MTE1NCwgMHhFNUQxLCAweEU1RDEsIDB4MTcwOSwgMHhFNUQyLCAweEU1RDIsIDB4MTE1NSwKKyAgICAweEU1RDMsIDB4RTVENSwgMHgxNzBBLCAweEU1RDYsIDB4RTVENiwgMHgxMTU3LCAweEU1RDcsIDB4RTVGOSwgMHgxNzBELAorICAgIDB4RTVGQSwgMHhFNUZCLCAweDExNUEsIDB4RTVGQywgMHhFNUZDLCAweDEwM0YsIDB4RTVGRCwgMHhFNUZELCAweDE3MzAsCisgICAgMHhFNUZFLCAweEU1RkUsIDB4MTE1QywgMHhFNkExLCAweEU2QTEsIDB4MTE1RiwgMHhFNkEyLCAweEU2QTMsIDB4MTczMSwKKyAgICAweEU2QTQsIDB4RTZBNCwgMHgxMTYxLCAweEU2QTUsIDB4RTZBNiwgMHgxNzMzLCAweEU2QTcsIDB4RTZBNywgMHgxMTYyLAorICAgIDB4RTZBOCwgMHhFNkFDLCAweDE3MzUsIDB4RTZBRCwgMHhFNkFELCAweDExNjUsIDB4RTZBRSwgMHhFNkFFLCAweDE3M0EsCisgICAgMHhFNkFGLCAweEU2QjEsIDB4MTE2NywgMHhFNkIyLCAweEU2QjIsIDB4MTczQiwgMHhFNkIzLCAweEU2QjMsIDB4MTE2QSwKKyAgICAweEU2QjQsIDB4RTZCNiwgMHgxNzNDLCAweEU2QjcsIDB4RTZCOCwgMHgxMTZCLCAweEU2QjksIDB4RTZCQiwgMHgxNzNGLAorICAgIDB4RTZCQywgMHhFNkJDLCAweDExNkYsIDB4RTZCRCwgMHhFNkMzLCAweDE3NDIsIDB4RTZDNCwgMHhFNkM0LCAweDEwNDAsCisgICAgMHhFNkM1LCAweEU2QzUsIDB4MTc0OSwgMHhFNkM2LCAweEU2QzcsIDB4MTE3MSwgMHhFNkM4LCAweEU2QzksIDB4MTc0QSwKKyAgICAweEU2Q0EsIDB4RTZDQSwgMHgxMDQxLCAweEU2Q0IsIDB4RTZEMSwgMHgxNzRDLCAweEU2RDIsIDB4RTZEMiwgMHgxMTc0LAorICAgIDB4RTZEMywgMHhFNkQ1LCAweDE3NTMsIDB4RTZENiwgMHhFNkQ2LCAweDExNzUsIDB4RTZENywgMHhFNkQ4LCAweDE3NTYsCisgICAgMHhFNkQ5LCAweEU2RDksIDB4MTE3NiwgMHhFNkRBLCAweEU2REIsIDB4MTc1OCwgMHhFNkRDLCAweEU2REMsIDB4MTA0MiwKKyAgICAweEU2REQsIDB4RTZERSwgMHgxNzVBLCAweEU2REYsIDB4RTZERiwgMHgxMTc3LCAweEU2RTAsIDB4RTZFMCwgMHgxNzVDLAorICAgIDB4RTZFMSwgMHhFNkUxLCAweDExNzgsIDB4RTZFMiwgMHhFNkUzLCAweDE3NUQsIDB4RTZFNCwgMHhFNkU0LCAweDExN0EsCisgICAgMHhFNkU1LCAweEU2RTUsIDB4MTE3OSwgMHhFNkU2LCAweEU2RTYsIDB4MTE3QiwgMHhFNkU3LCAweEU2RTcsIDB4MTc1RiwKKyAgICAweEU2RTgsIDB4RTZFOCwgMHgxMTdDLCAweEU2RTksIDB4RTZFOSwgMHgxNzYwLCAweEU2RUEsIDB4RTZFQiwgMHgxMTdFLAorICAgIDB4RTZFQywgMHhFNkVDLCAweDE5MkYsIDB4RTZFRCwgMHhFNkVFLCAweDE3NjEsIDB4RTZFRiwgMHhFNkVGLCAweDExODEsCisgICAgMHhFNkYwLCAweEU2RjAsIDB4MTc2MywgMHhFNkYxLCAweEU2RjEsIDB4MTE4MiwgMHhFNkYyLCAweEU2RjIsIDB4MTU1NCwKKyAgICAweEU2RjMsIDB4RTZGNCwgMHgxNzY0LCAweEU2RjUsIDB4RTZGNSwgMHgxMTgzLCAweEU2RjYsIDB4RTZGNiwgMHgxMDQzLAorICAgIDB4RTZGNywgMHhFNkY3LCAweDEwNDYsIDB4RTZGOCwgMHhFNkY4LCAweDE3NjYsIDB4RTZGOSwgMHhFNkY5LCAweDExODUsCisgICAgMHhFNkZBLCAweEU2RkUsIDB4MTc2NywgMHhFN0ExLCAweEU3QTEsIDB4MTE4NywgMHhFN0EyLCAweEU3QTUsIDB4MTc2QywKKyAgICAweEU3QTYsIDB4RTdBNiwgMHgxMTg4LCAweEU3QTcsIDB4RTdBOCwgMHgxNzcwLCAweEU3QTksIDB4RTdBOSwgMHgxMTg5LAorICAgIDB4RTdBQSwgMHhFN0FBLCAweDExOEIsIDB4RTdBQiwgMHhFN0FCLCAweDE3NzIsIDB4RTdBQywgMHhFN0FDLCAweDEwNDcsCisgICAgMHhFN0FELCAweEU3QUQsIDB4MTE4RCwgMHhFN0FFLCAweEU3QUYsIDB4MTc3MywgMHhFN0IwLCAweEU3QjAsIDB4MTE4RSwKKyAgICAweEU3QjEsIDB4RTdCRSwgMHgxNzc1LCAweEU3QkYsIDB4RTdCRiwgMHgxMThGLCAweEU3QzAsIDB4RTdDMCwgMHgxNzgzLAorICAgIDB4RTdDMSwgMHhFN0MxLCAweDFFNjcsIDB4RTdDMiwgMHhFN0M1LCAweDE3ODQsIDB4RTdDNiwgMHhFN0M2LCAweDExOTEsCisgICAgMHhFN0M3LCAweEU3QzcsIDB4MTE5MywgMHhFN0M4LCAweEU3Q0EsIDB4MTc4OCwgMHhFN0NCLCAweEU3Q0IsIDB4MTE5NSwKKyAgICAweEU3Q0MsIDB4RTdDQywgMHgxNzhCLCAweEU3Q0QsIDB4RTdDRCwgMHgxMTk2LCAweEU3Q0UsIDB4RTdDRSwgMHgxNzhDLAorICAgIDB4RTdDRiwgMHhFN0QwLCAweDExOTcsIDB4RTdEMSwgMHhFN0QyLCAweDE3OEQsIDB4RTdEMywgMHhFN0QzLCAweDExOUEsCisgICAgMHhFN0Q0LCAweEU3REUsIDB4MTc4RiwgMHhFN0RGLCAweEU3REYsIDB4MTE5QywgMHhFN0UwLCAweEU3RTMsIDB4MTc5QSwKKyAgICAweEU3RTQsIDB4RTdFNCwgMHgxMTlELCAweEU3RTUsIDB4RTdFNSwgMHgxNzlFLCAweEU3RTYsIDB4RTdFNiwgMHgxMTlFLAorICAgIDB4RTdFNywgMHhFN0Y2LCAweDE3OUYsIDB4RTdGNywgMHhFN0Y3LCAweDE2QTUsIDB4RTdGOCwgMHhFN0ZFLCAweDE3QUYsCisgICAgMHhFOEExLCAweEU4RTYsIDB4MTdCNiwgMHhFOEU3LCAweEU4RTgsIDB4MTFDNywgMHhFOEU5LCAweEU4RUYsIDB4MTdGQywKKyAgICAweEU4RjAsIDB4RThGMCwgMHgxMUM5LCAweEU4RjEsIDB4RThGMSwgMHgxMDU0LCAweEU4RjIsIDB4RThGNiwgMHgxODAzLAorICAgIDB4RThGNywgMHhFOEY3LCAweDExQ0IsIDB4RThGOCwgMHhFOEY4LCAweDE4MDgsIDB4RThGOSwgMHhFOEY5LCAweDE2QTgsCisgICAgMHhFOEZBLCAweEU4RkEsIDB4MTgwOSwgMHhFOEZCLCAweEU4RkIsIDB4MTFDQywgMHhFOEZDLCAweEU4RkQsIDB4MTgwQSwKKyAgICAweEU4RkUsIDB4RThGRSwgMHgxMUNELCAweEU5QTEsIDB4RTlBNiwgMHgxODBDLCAweEU5QTcsIDB4RTlBNywgMHgxMUQwLAorICAgIDB4RTlBOCwgMHhFOUFCLCAweDE4MTIsIDB4RTlBQywgMHhFOUFDLCAweDExRDEsIDB4RTlBRCwgMHhFOUNCLCAweDE4MTYsCisgICAgMHhFOUNDLCAweEU5Q0MsIDB4MTFEMywgMHhFOUNELCAweEU5RjYsIDB4MTgzNSwgMHhFOUY3LCAweEU5RjcsIDB4MUYzNCwKKyAgICAweEU5RjgsIDB4RTlGRSwgMHgxODVGLCAweEVBQTEsIDB4RUFDMCwgMHgxODY2LCAweEVBQzEsIDB4RUFDMSwgMHgxN0VCLAorICAgIDB4RUFDMiwgMHhFQUU0LCAweDE4ODYsIDB4RUFFNSwgMHhFQUU1LCAweDExRTEsIDB4RUFFNiwgMHhFQUYzLCAweDE4QTksCisgICAgMHhFQUY0LCAweEVBRjQsIDB4MTA1NywgMHhFQUY1LCAweEVBRjYsIDB4MThCNywgMHhFQUY3LCAweEVBRjcsIDB4MTFFMywKKyAgICAweEVBRjgsIDB4RUFGQiwgMHgxOEI5LCAweEVBRkMsIDB4RUFGQywgMHgxMUU1LCAweEVBRkQsIDB4RUFGRCwgMHgxOEJELAorICAgIDB4RUFGRSwgMHhFQUZFLCAweDExRTYsIDB4RUJBMSwgMHhFQkEzLCAweDE4QkUsIDB4RUJBNCwgMHhFQkE0LCAweDExRTgsCisgICAgMHhFQkE1LCAweEVCQTYsIDB4MThDMSwgMHhFQkE3LCAweEVCQTcsIDB4MTFFQSwgMHhFQkE4LCAweEVCQTgsIDB4MThDMywKKyAgICAweEVCQTksIDB4RUJBOSwgMHgxMUVDLCAweEVCQUEsIDB4RUJBQSwgMHgxMDU4LCAweEVCQUIsIDB4RUJCOSwgMHgxOEM0LAorICAgIDB4RUJCQSwgMHhFQkJCLCAweDExRUUsIDB4RUJCQywgMHhFQkJDLCAweDE4RDMsIDB4RUJCRCwgMHhFQkJELCAweDExRjAsCisgICAgMHhFQkJFLCAweEVCQzAsIDB4MThENCwgMHhFQkMxLCAweEVCQzEsIDB4MTFGMSwgMHhFQkMyLCAweEVCQzIsIDB4MTFGMywKKyAgICAweEVCQzMsIDB4RUJDNSwgMHgxOEQ3LCAweEVCQzYsIDB4RUJDNywgMHgxMUY0LCAweEVCQzgsIDB4RUJDQiwgMHgxOERBLAorICAgIDB4RUJDQywgMHhFQkNDLCAweDExRjcsIDB4RUJDRCwgMHhFQkNFLCAweDE4REUsIDB4RUJDRiwgMHhFQkQxLCAweDExRjgsCisgICAgMHhFQkQyLCAweEVCRDIsIDB4MTVCMCwgMHhFQkQzLCAweEVCRDcsIDB4MThFMCwgMHhFQkQ4LCAweEVCRDgsIDB4MTFGQiwKKyAgICAweEVCRDksIDB4RUJGRSwgMHgxOEU1LCAweEVDQTEsIDB4RUNBNSwgMHgxOTBCLCAweEVDQTYsIDB4RUNBNiwgMHgxMjA2LAorICAgIDB4RUNBNywgMHhFQ0E3LCAweDEyMDgsIDB4RUNBOCwgMHhFQ0E5LCAweDE5MTAsIDB4RUNBQSwgMHhFQ0FBLCAweDEyMEEsCisgICAgMHhFQ0FCLCAweEVDQUUsIDB4MTkxMiwgMHhFQ0FGLCAweEVDQUYsIDB4MTczRSwgMHhFQ0IwLCAweEVDQjEsIDB4MTIwQywKKyAgICAweEVDQjIsIDB4RUNCMiwgMHgxMDVCLCAweEVDQjMsIDB4RUNCNCwgMHgxOTE2LCAweEVDQjUsIDB4RUNCNSwgMHgxMjExLAorICAgIDB4RUNCNiwgMHhFQ0I3LCAweDE5MTgsIDB4RUNCOCwgMHhFQ0I4LCAweDEyMTMsIDB4RUNCOSwgMHhFQ0I5LCAweDE5MUEsCisgICAgMHhFQ0JBLCAweEVDQkEsIDB4MTIxNSwgMHhFQ0JCLCAweEVDQkYsIDB4MTkxQiwgMHhFQ0MwLCAweEVDQzEsIDB4MTIxOCwKKyAgICAweEVDQzIsIDB4RUNDNCwgMHgxOTIwLCAweEVDQzUsIDB4RUNDNSwgMHgxMjFBLCAweEVDQzYsIDB4RUNDNiwgMHgxMjFDLAorICAgIDB4RUNDNywgMHhFQ0M4LCAweDE5MjMsIDB4RUNDOSwgMHhFQ0NBLCAweDEwNUMsIDB4RUNDQiwgMHhFQ0Q0LCAweDE5MjUsCisgICAgMHhFQ0Q1LCAweEVDRDUsIDB4MTIxRSwgMHhFQ0Q2LCAweEVDREMsIDB4MTkyRiwgMHhFQ0RELCAweEVDREUsIDB4MTIyMCwKKyAgICAweEVDREYsIDB4RUNFMCwgMHgxOTM2LCAweEVDRTEsIDB4RUNFMSwgMHgxMjIyLCAweEVDRTIsIDB4RUNFMywgMHgxOTM4LAorICAgIDB4RUNFNCwgMHhFQ0U0LCAweDEyMjQsIDB4RUNFNSwgMHhFQ0U2LCAweDE5M0EsIDB4RUNFNywgMHhFQ0U4LCAweDEyMjUsCisgICAgMHhFQ0U5LCAweEVDRjYsIDB4MTkzQywgMHhFQ0Y3LCAweEVDRjgsIDB4MTIyNywgMHhFQ0Y5LCAweEVDRjksIDB4MTk0QSwKKyAgICAweEVDRkEsIDB4RUNGQSwgMHgxMjJBLCAweEVDRkIsIDB4RUNGRSwgMHgxOTRCLCAweEVEQTEsIDB4RURBMywgMHgxMjJELAorICAgIDB4RURBNCwgMHhFREVELCAweDE5NEYsIDB4RURFRSwgMHhFREVFLCAweDE0RTcsIDB4RURFRiwgMHhFREZFLCAweDE5OTksCisgICAgMHhFRUExLCAweEVFREEsIDB4MTlBOSwgMHhFRURCLCAweEVFREIsIDB4MTk1RSwgMHhFRURDLCAweEVFRkUsIDB4MTlFMywKKyAgICAweEVGQTEsIDB4RUZGRSwgMHgxQTA2LCAweEYwQTEsIDB4RjBGRSwgMHgxQTY0LCAweEYxQTEsIDB4RjFGRSwgMHgxQUMyLAorICAgIDB4RjJBMSwgMHhGMkJDLCAweDFCMjAsIDB4RjJCRCwgMHhGMkJELCAweDE2NjMsIDB4RjJCRSwgMHhGMkY5LCAweDFCM0MsCisgICAgMHhGMkZBLCAweEYyRkEsIDB4MTY4QiwgMHhGMkZCLCAweEYyRkUsIDB4MUI3OCwgMHhGM0ExLCAweEYzQjAsIDB4MUI3QywKKyAgICAweEYzQjEsIDB4RjNCMSwgMHgxMDVGLCAweEYzQjIsIDB4RjNGRSwgMHgxQjhDLCAweEY0QTEsIDB4RjRBNiwgMHgxQkQ5LAorICAgIDB4RjRBNywgMHhGNEE3LCAweDE5NTQsIDB4RjRBOCwgMHhGNEVELCAweDFCREYsIDB4RjRFRSwgMHhGNEVFLCAweDFBMUMsCisgICAgMHhGNEVGLCAweEY0RkUsIDB4MUMyNSwgMHhGNUExLCAweEY1RkUsIDB4MUMzNSwgMHhGNkExLCAweEY2RjMsIDB4MUM5MywKKyAgICAweEY2RjQsIDB4RjZGNCwgMHgxMEI3LCAweEY2RjUsIDB4RjZGNSwgMHgxQ0U2LCAweEY2RjYsIDB4RjZGNiwgMHgxQkUzLAorICAgIDB4RjZGNywgMHhGNkZFLCAweDFDRTcsIDB4RjdBMSwgMHhGN0I3LCAweDFDRUYsIDB4RjdCOCwgMHhGN0I4LCAweDEwOTcsCisgICAgMHhGN0I5LCAweEY3QzcsIDB4MUQwNiwgMHhGN0M4LCAweEY3QzgsIDB4MTBBQSwgMHhGN0M5LCAweEY3RDIsIDB4MUQxNSwKKyAgICAweEY3RDMsIDB4RjdEMywgMHgxMEY0LCAweEY3RDQsIDB4RjdGRSwgMHgxRDFGLCAweEY4QTEsIDB4RjhEQSwgMHgxRDRBLAorICAgIDB4RjhEQiwgMHhGOERCLCAweDFEOTQsIDB4RjhEQywgMHhGOEVGLCAweDFEODQsIDB4RjhGMCwgMHhGOEYwLCAweDEzRTAsCisgICAgMHhGOEYxLCAweEY4RkUsIDB4MUQ5OCwgMHhGOUExLCAweEY5RkUsIDB4MURBNiwgMHhGQUExLCAweEZBQTEsIDB4MUUxRCwKKyAgICAweEZBQTIsIDB4RkFBMiwgMHgwREU2LCAweEZBQTMsIDB4RkFFNSwgMHgxRTA0LCAweEZBRTYsIDB4RkFFNiwgMHgwRTNDLAorICAgIDB4RkFFNywgMHhGQUZFLCAweDFFNDcsIDB4RkJBMSwgMHhGQkZFLCAweDFFNUYsIDB4RkNBMSwgMHhGQ0E4LCAweDFFQkQsCisgICAgMHhGQ0E5LCAweEZDQTksIDB4MEVFNywgMHhGQ0FBLCAweEZDRkUsIDB4MUVDNSwgMHhGREExLCAweEZERkUsIDB4MUYxQSwKK307CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvS29yZWExL0tTQ3BjLUVVQy1IXzAuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0tvcmVhMS9LU0NwYy1FVUMtSF8wLmNwcAppbmRleCBiMDYyZmM2Li45Y2I0MjBkIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvS29yZWExL0tTQ3BjLUVVQy1IXzAuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9Lb3JlYTEvS1NDcGMtRVVDLUhfMC5jcHAKQEAgLTEsMTc4ICsxLDE3OCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX0tTQ3BjX0VVQ19IXzBbNTA5ICogM10gPSB7DQotICAgIDB4MDAyMCwgMHgwMDdFLCAweDAwMDEsIDB4MDA4MSwgMHgwMDgzLCAweDAwNjAsIDB4MDBGRSwgMHgwMEZGLCAweDAwNjMsDQotICAgIDB4QTE0MSwgMHhBMTdELCAweDFGRkYsIDB4QTE4MSwgMHhBMTlBLCAweDIwM0MsIDB4QTE5QywgMHhBMUEwLCAweDIwNTYsDQotICAgIDB4QTFBMSwgMHhBMUExLCAweDAwNjUsIDB4QTFBMiwgMHhBMUEzLCAweDIwNUIsIDB4QTFBNCwgMHhBMUZFLCAweDAwNjgsDQotICAgIDB4QTI0MSwgMHhBMjRDLCAweDIwNUQsIDB4QTJBMSwgMHhBMkU1LCAweDAwQzMsIDB4QTJFNiwgMHhBMkZFLCAweDIwNjksDQotICAgIDB4QTM0MSwgMHhBMzdELCAweDIwODIsIDB4QTM4MSwgMHhBMzlGLCAweDIwQkYsIDB4QTNBMSwgMHhBM0ZFLCAweDAxMDgsDQotICAgIDB4QTQ0MSwgMHhBNDdELCAweDIwREUsIDB4QTQ4MSwgMHhBNDlGLCAweDIxMUIsIDB4QTRBMSwgMHhBNEQzLCAweDAxNjYsDQotICAgIDB4QTRENSwgMHhBNEZFLCAweDAxOTksIDB4QTU0MSwgMHhBNTdELCAweDIxM0EsIDB4QTU4MSwgMHhBNThCLCAweDIxNzcsDQotICAgIDB4QTVBMSwgMHhBNUFBLCAweDAxQzMsIDB4QTVCMCwgMHhBNUI5LCAweDAxQ0QsIDB4QTVDMSwgMHhBNUQ4LCAweDAxRDcsDQotICAgIDB4QTVEQSwgMHhBNURFLCAweDIxODIsIDB4QTVFMSwgMHhBNUY4LCAweDAxRUYsIDB4QTVGOSwgMHhBNUZDLCAweDIxODcsDQotICAgIDB4QTY0MSwgMHhBNjdELCAweDIxOEIsIDB4QTY4MSwgMHhBNjhBLCAweDIxQzgsIDB4QTY4RCwgMHhBNjkzLCAweDIxRDIsDQotICAgIDB4QTY5NiwgMHhBNjlCLCAweDIxRDksIDB4QTY5RSwgMHhBNjlGLCAweDIxREYsIDB4QTZBMSwgMHhBNkU0LCAweDAyMDcsDQotICAgIDB4QTZFNSwgMHhBNkZFLCAweDIxRTEsIDB4QTc0MSwgMHhBNzdELCAweDIxRkIsIDB4QTc4MSwgMHhBNzlGLCAweDIyMzgsDQotICAgIDB4QTdBMSwgMHhBN0VGLCAweDAyNEIsIDB4QTdGMCwgMHhBN0ZFLCAweDIyNTcsIDB4QTg0MSwgMHhBODdELCAweDIyNjYsDQotICAgIDB4QTg4MSwgMHhBODlGLCAweDIyQTMsIDB4QThBMSwgMHhBOEE0LCAweDAyOUEsIDB4QThBNiwgMHhBOEE2LCAweDAyOUUsDQotICAgIDB4QThBOCwgMHhBOEFGLCAweDAyOUYsIDB4QThCMSwgMHhBOEZFLCAweDAyQTcsIDB4QTk0MSwgMHhBOTc0LCAweDIyQzIsDQotICAgIDB4QTlBMSwgMHhBOUZFLCAweDAyRjUsIDB4QUE0MSwgMHhBQTdELCAweDIyRjYsIDB4QUE4MSwgMHhBQTlGLCAweDIzMzMsDQotICAgIDB4QUFBMSwgMHhBQUYzLCAweDAzNTMsIDB4QUFGNCwgMHhBQUZFLCAweDIzNTIsIDB4QUI0MSwgMHhBQjdELCAweDIzNUQsDQotICAgIDB4QUI4MSwgMHhBQjlGLCAweDIzOUEsIDB4QUJBMSwgMHhBQkY2LCAweDAzQTYsIDB4QUJGNywgMHhBQkZBLCAweDIzQjksDQotICAgIDB4QUJGQiwgMHhBQkZELCAweDI0NzIsIDB4QUM0MSwgMHhBQzdELCAweDIzQkQsIDB4QUM4MSwgMHhBQzk3LCAweDIzRkEsDQotICAgIDB4QUNBMSwgMHhBQ0MxLCAweDAzRkMsIDB4QUNDMiwgMHhBQ0QwLCAweDI0MTEsIDB4QUNEMSwgMHhBQ0YxLCAweDA0MUQsDQotICAgIDB4QUNGMiwgMHhBQ0Y2LCAweDI0MjAsIDB4QUQ0MSwgMHhBRDdELCAweDI0MjUsIDB4QURBMSwgMHhBREIwLCAweDI0NjIsDQotICAgIDB4QjBBMSwgMHhCMEZFLCAweDA0M0UsIDB4QjFBMSwgMHhCMUZFLCAweDA0OUMsIDB4QjJBMSwgMHhCMkZFLCAweDA0RkEsDQotICAgIDB4QjNBMSwgMHhCM0ZFLCAweDA1NTgsIDB4QjRBMSwgMHhCNEZFLCAweDA1QjYsIDB4QjVBMSwgMHhCNUZFLCAweDA2MTQsDQotICAgIDB4QjZBMSwgMHhCNkZFLCAweDA2NzIsIDB4QjdBMSwgMHhCN0ZFLCAweDA2RDAsIDB4QjhBMSwgMHhCOEZFLCAweDA3MkUsDQotICAgIDB4QjlBMSwgMHhCOUZFLCAweDA3OEMsIDB4QkFBMSwgMHhCQUZFLCAweDA3RUEsIDB4QkJBMSwgMHhCQkZFLCAweDA4NDgsDQotICAgIDB4QkNBMSwgMHhCQ0ZFLCAweDA4QTYsIDB4QkRBMSwgMHhCREZFLCAweDA5MDQsIDB4QkVBMSwgMHhCRUZFLCAweDA5NjIsDQotICAgIDB4QkZBMSwgMHhCRkZFLCAweDA5QzAsIDB4QzBBMSwgMHhDMEZFLCAweDBBMUUsIDB4QzFBMSwgMHhDMUZFLCAweDBBN0MsDQotICAgIDB4QzJBMSwgMHhDMkZFLCAweDBBREEsIDB4QzNBMSwgMHhDM0ZFLCAweDBCMzgsIDB4QzRBMSwgMHhDNEZFLCAweDBCOTYsDQotICAgIDB4QzVBMSwgMHhDNUZFLCAweDBCRjQsIDB4QzZBMSwgMHhDNkZFLCAweDBDNTIsIDB4QzdBMSwgMHhDN0ZFLCAweDBDQjAsDQotICAgIDB4QzhBMSwgMHhDOEZFLCAweDBEMEUsIDB4Q0FBMSwgMHhDQUZFLCAweDBENkMsIDB4Q0JBMSwgMHhDQkNGLCAweDBEQ0EsDQotICAgIDB4Q0JEMCwgMHhDQkQwLCAweDEwMTQsIDB4Q0JEMSwgMHhDQkQ1LCAweDBERjksIDB4Q0JENiwgMHhDQkQ2LCAweDBFNUUsDQotICAgIDB4Q0JENywgMHhDQkU2LCAweDBERkUsIDB4Q0JFNywgMHhDQkU3LCAweDFCOEQsIDB4Q0JFOCwgMHhDQkZFLCAweDBFMEUsDQotICAgIDB4Q0NBMSwgMHhDQ0ZFLCAweDBFMjUsIDB4Q0RBMSwgMHhDRENFLCAweDBFODMsIDB4Q0RDRiwgMHhDRENGLCAweDBEODQsDQotICAgIDB4Q0REMCwgMHhDREU3LCAweDBFQjEsIDB4Q0RFOCwgMHhDREU4LCAweDFFREMsIDB4Q0RFOSwgMHhDREZFLCAweDBFQzksDQotICAgIDB4Q0VBMSwgMHhDRUFDLCAweDBFREYsIDB4Q0VBRCwgMHhDRUFELCAweDBFREEsIDB4Q0VBRSwgMHhDRUZFLCAweDBFRUIsDQotICAgIDB4Q0ZBMSwgMHhDRkZBLCAweDBGM0MsIDB4Q0ZGQiwgMHhDRkZCLCAweDBGM0UsIDB4Q0ZGQywgMHhDRkZFLCAweDBGOTYsDQotICAgIDB4RDBBMSwgMHhEMEExLCAweDBGOTksIDB4RDBBMiwgMHhEMEEyLCAweDBGNkEsIDB4RDBBMywgMHhEMEI3LCAweDBGOUEsDQotICAgIDB4RDBCOCwgMHhEMEI4LCAweDBGNkEsIDB4RDBCOSwgMHhEMENGLCAweDBGQUYsIDB4RDBEMCwgMHhEMEQwLCAweDBFN0MsDQotICAgIDB4RDBEMSwgMHhEMERDLCAweDBGQzYsIDB4RDBERCwgMHhEMERELCAweDEwMjMsIDB4RDBERSwgMHhEMEZFLCAweDBGRDIsDQotICAgIDB4RDFBMSwgMHhEMUQzLCAweDBGRjMsIDB4RDFENCwgMHhEMUQ0LCAweDExMTYsIDB4RDFENSwgMHhEMUQ1LCAweDEwM0MsDQotICAgIDB4RDFENiwgMHhEMUQ3LCAweDEwMjYsIDB4RDFEOCwgMHhEMUQ4LCAweDExMTcsIDB4RDFEOSwgMHhEMURBLCAweDEwMjgsDQotICAgIDB4RDFEQiwgMHhEMUUwLCAweDExMTgsIDB4RDFFMSwgMHhEMUUxLCAweDEwMkEsIDB4RDFFMiwgMHhEMUUyLCAweDE2QTgsDQotICAgIDB4RDFFMywgMHhEMUU1LCAweDExMUUsIDB4RDFFNiwgMHhEMUU2LCAweDExMjIsIDB4RDFFNywgMHhEMUU3LCAweDEwMkIsDQotICAgIDB4RDFFOCwgMHhEMUVCLCAweDExMjMsIDB4RDFFQywgMHhEMUVDLCAweDEwMkMsIDB4RDFFRCwgMHhEMUVELCAweDExMjcsDQotICAgIDB4RDFFRSwgMHhEMUVFLCAweDEwMkQsIDB4RDFFRiwgMHhEMUYwLCAweDExMkEsIDB4RDFGMSwgMHhEMUYxLCAweDEwMkUsDQotICAgIDB4RDFGMiwgMHhEMUYyLCAweDExMkMsIDB4RDFGMywgMHhEMUY1LCAweDEwMkYsIDB4RDFGNiwgMHhEMUY2LCAweDExMkYsDQotICAgIDB4RDFGNywgMHhEMUY5LCAweDEwMzIsIDB4RDFGQSwgMHhEMUZBLCAweDExMzMsIDB4RDFGQiwgMHhEMUZCLCAweDEwMzUsDQotICAgIDB4RDFGQywgMHhEMUZELCAweDExMzYsIDB4RDFGRSwgMHhEMUZFLCAweDExMzksIDB4RDJBMSwgMHhEMkExLCAweDEwMzYsDQotICAgIDB4RDJBMiwgMHhEMkEzLCAweDExM0EsIDB4RDJBNCwgMHhEMkE2LCAweDEwMzcsIDB4RDJBNywgMHhEMkFBLCAweDExM0MsDQotICAgIDB4RDJBQiwgMHhEMkFCLCAweDExNDMsIDB4RDJBQywgMHhEMkFDLCAweDEwM0EsIDB4RDJBRCwgMHhEMkFELCAweDExNDQsDQotICAgIDB4RDJBRSwgMHhEMkIxLCAweDEwM0IsIDB4RDJCMiwgMHhEMkIyLCAweDExNDgsIDB4RDJCMywgMHhEMkJELCAweDEwM0YsDQotICAgIDB4RDJCRSwgMHhEMkJFLCAweDExOUYsIDB4RDJCRiwgMHhEMkMxLCAweDEwNEEsIDB4RDJDMiwgMHhEMkMzLCAweDExQTEsDQotICAgIDB4RDJDNCwgMHhEMkM0LCAweDExQTUsIDB4RDJDNSwgMHhEMkM1LCAweDEwNEQsIDB4RDJDNiwgMHhEMkNBLCAweDExQTYsDQotICAgIDB4RDJDQiwgMHhEMkNCLCAweDExQUMsIDB4RDJDQywgMHhEMkNDLCAweDEwNEUsIDB4RDJDRCwgMHhEMkNFLCAweDExQUQsDQotICAgIDB4RDJDRiwgMHhEMkQ0LCAweDExQjAsIDB4RDJENSwgMHhEMkQ3LCAweDExQjcsIDB4RDJEOCwgMHhEMkQ4LCAweDEwNEYsDQotICAgIDB4RDJEOSwgMHhEMkRBLCAweDExQkQsIDB4RDJEQiwgMHhEMkRELCAweDEwNTAsIDB4RDJERSwgMHhEMkRGLCAweDExQzEsDQotICAgIDB4RDJFMCwgMHhEMkUwLCAweDEwNTMsIDB4RDJFMSwgMHhEMkUxLCAweDExQzMsIDB4RDJFMiwgMHhEMkUyLCAweDExQzYsDQotICAgIDB4RDJFMywgMHhEMkUzLCAweDEwNTQsIDB4RDJFNCwgMHhEMkU0LCAweDExRDQsIDB4RDJFNSwgMHhEMkU4LCAweDExRDYsDQotICAgIDB4RDJFOSwgMHhEMkVBLCAweDExREIsIDB4RDJFQiwgMHhEMkVCLCAweDExRTAsIDB4RDJFQywgMHhEMkVGLCAweDEwNTUsDQotICAgIDB4RDJGMCwgMHhEMkYzLCAweDExRkMsIDB4RDJGNCwgMHhEMkY1LCAweDEyMDEsIDB4RDJGNiwgMHhEMkY2LCAweDEwNTksDQotICAgIDB4RDJGNywgMHhEMkY4LCAweDEyMDMsIDB4RDJGOSwgMHhEMkZFLCAweDEwNUEsIDB4RDNBMSwgMHhEM0ZFLCAweDEwNjAsDQotICAgIDB4RDRBMSwgMHhENEU1LCAweDEwQkUsIDB4RDRFNiwgMHhENEU2LCAweDEwREUsIDB4RDRFNywgMHhENEZCLCAweDExMDMsDQotICAgIDB4RDRGQywgMHhENEZDLCAweDEwMjgsIDB4RDRGRCwgMHhENEZFLCAweDExMTgsIDB4RDVBMSwgMHhENUE0LCAweDExMUEsDQotICAgIDB4RDVBNSwgMHhENUE1LCAweDE2QTgsIDB4RDVBNiwgMHhENUFBLCAweDExMUUsIDB4RDVBQiwgMHhENUFCLCAweDEwMkIsDQotICAgIDB4RDVBQywgMHhENUFELCAweDExMjMsIDB4RDVBRSwgMHhENUFFLCAweDEwNjAsIDB4RDVBRiwgMHhENUZFLCAweDExMjUsDQotICAgIDB4RDZBMSwgMHhENkI3LCAweDExNzUsIDB4RDZCOCwgMHhENkI4LCAweDEwNDcsIDB4RDZCOSwgMHhENkNDLCAweDExOEMsDQotICAgIDB4RDZDRCwgMHhENkNELCAweDEwNEMsIDB4RDZDRSwgMHhENkZFLCAweDExQTAsIDB4RDdBMSwgMHhEN0NBLCAweDExRDEsDQotICAgIDB4RDdDQiwgMHhEN0NCLCAweDE1QjAsIDB4RDdDQywgMHhEN0UzLCAweDExRkIsIDB4RDdFNCwgMHhEN0U0LCAweDE5MTgsDQotICAgIDB4RDdFNSwgMHhEN0ZFLCAweDEyMTMsIDB4RDhBMSwgMHhEOEZFLCAweDEyMkQsIDB4RDlBMSwgMHhEOUZFLCAweDEyOEIsDQotICAgIDB4REFBMSwgMHhEQUZFLCAweDEyRTksIDB4REJBMSwgMHhEQkM0LCAweDEzNDcsIDB4REJDNSwgMHhEQkM1LCAweDE0MUYsDQotICAgIDB4REJDNiwgMHhEQkUzLCAweDEzNkIsIDB4REJFNCwgMHhEQkU0LCAweDEzM0EsIDB4REJFNSwgMHhEQkZFLCAweDEzODksDQotICAgIDB4RENBMSwgMHhEQ0E0LCAweDEzQTMsIDB4RENBNSwgMHhEQ0E1LCAweDFENUUsIDB4RENBNiwgMHhEQ0ZFLCAweDEzQTcsDQotICAgIDB4RERBMSwgMHhEREE0LCAweDE0MDAsIDB4RERBNSwgMHhEREE1LCAweDEzRDcsIDB4RERBNiwgMHhEREQ0LCAweDE0MDQsDQotICAgIDB4RERENSwgMHhEREQ1LCAweDEzRjUsIDB4RERENiwgMHhEREYzLCAweDE0MzMsIDB4RERGNCwgMHhEREY0LCAweDFEQjcsDQotICAgIDB4RERGNSwgMHhEREZFLCAweDE0NTEsIDB4REVBMSwgMHhERUZCLCAweDE0NUIsIDB4REVGQywgMHhERUZDLCAweDE1RDAsDQotICAgIDB4REVGRCwgMHhERUZELCAweDE0QjYsIDB4REVGRSwgMHhERUZFLCAweDE0RjcsIDB4REZBMSwgMHhERkIyLCAweDE0QjcsDQotICAgIDB4REZCMywgMHhERkIzLCAweDFCQUIsIDB4REZCNCwgMHhERkUwLCAweDE0QzksIDB4REZFMSwgMHhERkUxLCAweDE0RjIsDQotICAgIDB4REZFMiwgMHhERkU3LCAweDE0RjYsIDB4REZFOCwgMHhERkU4LCAweDE1NkQsIDB4REZFOSwgMHhERkZFLCAweDE0RkMsDQotICAgIDB4RTBBMSwgMHhFMEYwLCAweDE1MTIsIDB4RTBGMSwgMHhFMEYxLCAweDE3NzEsIDB4RTBGMiwgMHhFMEZFLCAweDE1NjIsDQotICAgIDB4RTFBMSwgMHhFMUFDLCAweDE1NkYsIDB4RTFBRCwgMHhFMUFELCAweDE1NTQsIDB4RTFBRSwgMHhFMUVDLCAweDE1N0IsDQotICAgIDB4RTFFRCwgMHhFMUVELCAweDE0QzUsIDB4RTFFRSwgMHhFMUZFLCAweDE1QkEsIDB4RTJBMSwgMHhFMkZFLCAweDE1Q0IsDQotICAgIDB4RTNBMSwgMHhFM0Y0LCAweDE2MjksIDB4RTNGNSwgMHhFM0Y1LCAweDFCNjEsIDB4RTNGNiwgMHhFM0ZFLCAweDE2N0QsDQotICAgIDB4RTRBMSwgMHhFNEExLCAweDFDQ0EsIDB4RTRBMiwgMHhFNEE4LCAweDE2ODYsIDB4RTRBOSwgMHhFNEE5LCAweDE2MkUsDQotICAgIDB4RTRBQSwgMHhFNEZFLCAweDE2OEQsIDB4RTVBMSwgMHhFNUFELCAweDE2RTIsIDB4RTVBRSwgMHhFNUFFLCAweDE2RjIsDQotICAgIDB4RTVBRiwgMHhFNUIwLCAweDE2RUYsIDB4RTVCMSwgMHhFNUIyLCAweDExNDksIDB4RTVCMywgMHhFNUI4LCAweDE2RjEsDQotICAgIDB4RTVCOSwgMHhFNUI5LCAweDExNEIsIDB4RTVCQSwgMHhFNUJBLCAweDE2RjcsIDB4RTVCQiwgMHhFNUJDLCAweDExNEQsDQotICAgIDB4RTVCRCwgMHhFNUMzLCAweDE2RjgsIDB4RTVDNCwgMHhFNUM0LCAweDExNEYsIDB4RTVDNSwgMHhFNUNELCAweDE2RkYsDQotICAgIDB4RTVDRSwgMHhFNUNFLCAweDExNTMsIDB4RTVDRiwgMHhFNUNGLCAweDE3MDgsIDB4RTVEMCwgMHhFNUQwLCAweDExNTQsDQotICAgIDB4RTVEMSwgMHhFNUQxLCAweDE3MDksIDB4RTVEMiwgMHhFNUQyLCAweDExNTUsIDB4RTVEMywgMHhFNUQ1LCAweDE3MEEsDQotICAgIDB4RTVENiwgMHhFNUQ2LCAweDExNTcsIDB4RTVENywgMHhFNUY5LCAweDE3MEQsIDB4RTVGQSwgMHhFNUZCLCAweDExNUEsDQotICAgIDB4RTVGQywgMHhFNUZDLCAweDEwM0YsIDB4RTVGRCwgMHhFNUZELCAweDE3MzAsIDB4RTVGRSwgMHhFNUZFLCAweDExNUMsDQotICAgIDB4RTZBMSwgMHhFNkExLCAweDExNUYsIDB4RTZBMiwgMHhFNkEzLCAweDE3MzEsIDB4RTZBNCwgMHhFNkE0LCAweDExNjEsDQotICAgIDB4RTZBNSwgMHhFNkE2LCAweDE3MzMsIDB4RTZBNywgMHhFNkE3LCAweDExNjIsIDB4RTZBOCwgMHhFNkFDLCAweDE3MzUsDQotICAgIDB4RTZBRCwgMHhFNkFELCAweDExNjUsIDB4RTZBRSwgMHhFNkFFLCAweDE3M0EsIDB4RTZBRiwgMHhFNkIxLCAweDExNjcsDQotICAgIDB4RTZCMiwgMHhFNkIyLCAweDE3M0IsIDB4RTZCMywgMHhFNkIzLCAweDExNkEsIDB4RTZCNCwgMHhFNkI2LCAweDE3M0MsDQotICAgIDB4RTZCNywgMHhFNkI4LCAweDExNkIsIDB4RTZCOSwgMHhFNkJCLCAweDE3M0YsIDB4RTZCQywgMHhFNkJDLCAweDExNkYsDQotICAgIDB4RTZCRCwgMHhFNkMzLCAweDE3NDIsIDB4RTZDNCwgMHhFNkM0LCAweDEwNDAsIDB4RTZDNSwgMHhFNkM1LCAweDE3NDksDQotICAgIDB4RTZDNiwgMHhFNkM3LCAweDExNzEsIDB4RTZDOCwgMHhFNkM5LCAweDE3NEEsIDB4RTZDQSwgMHhFNkNBLCAweDEwNDEsDQotICAgIDB4RTZDQiwgMHhFNkQxLCAweDE3NEMsIDB4RTZEMiwgMHhFNkQyLCAweDExNzQsIDB4RTZEMywgMHhFNkQ1LCAweDE3NTMsDQotICAgIDB4RTZENiwgMHhFNkQ2LCAweDExNzUsIDB4RTZENywgMHhFNkQ4LCAweDE3NTYsIDB4RTZEOSwgMHhFNkQ5LCAweDExNzYsDQotICAgIDB4RTZEQSwgMHhFNkRCLCAweDE3NTgsIDB4RTZEQywgMHhFNkRDLCAweDEwNDIsIDB4RTZERCwgMHhFNkRFLCAweDE3NUEsDQotICAgIDB4RTZERiwgMHhFNkRGLCAweDExNzcsIDB4RTZFMCwgMHhFNkUwLCAweDE3NUMsIDB4RTZFMSwgMHhFNkUxLCAweDExNzgsDQotICAgIDB4RTZFMiwgMHhFNkUzLCAweDE3NUQsIDB4RTZFNCwgMHhFNkU0LCAweDExN0EsIDB4RTZFNSwgMHhFNkU1LCAweDExNzksDQotICAgIDB4RTZFNiwgMHhFNkU2LCAweDExN0IsIDB4RTZFNywgMHhFNkU3LCAweDE3NUYsIDB4RTZFOCwgMHhFNkU4LCAweDExN0MsDQotICAgIDB4RTZFOSwgMHhFNkU5LCAweDE3NjAsIDB4RTZFQSwgMHhFNkVCLCAweDExN0UsIDB4RTZFQywgMHhFNkVDLCAweDE5MkYsDQotICAgIDB4RTZFRCwgMHhFNkVFLCAweDE3NjEsIDB4RTZFRiwgMHhFNkVGLCAweDExODEsIDB4RTZGMCwgMHhFNkYwLCAweDE3NjMsDQotICAgIDB4RTZGMSwgMHhFNkYxLCAweDExODIsIDB4RTZGMiwgMHhFNkYyLCAweDE1NTQsIDB4RTZGMywgMHhFNkY0LCAweDE3NjQsDQotICAgIDB4RTZGNSwgMHhFNkY1LCAweDExODMsIDB4RTZGNiwgMHhFNkY2LCAweDEwNDMsIDB4RTZGNywgMHhFNkY3LCAweDEwNDYsDQotICAgIDB4RTZGOCwgMHhFNkY4LCAweDE3NjYsIDB4RTZGOSwgMHhFNkY5LCAweDExODUsIDB4RTZGQSwgMHhFNkZFLCAweDE3NjcsDQotICAgIDB4RTdBMSwgMHhFN0ExLCAweDExODcsIDB4RTdBMiwgMHhFN0E1LCAweDE3NkMsIDB4RTdBNiwgMHhFN0E2LCAweDExODgsDQotICAgIDB4RTdBNywgMHhFN0E4LCAweDE3NzAsIDB4RTdBOSwgMHhFN0E5LCAweDExODksIDB4RTdBQSwgMHhFN0FBLCAweDExOEIsDQotICAgIDB4RTdBQiwgMHhFN0FCLCAweDE3NzIsIDB4RTdBQywgMHhFN0FDLCAweDEwNDcsIDB4RTdBRCwgMHhFN0FELCAweDExOEQsDQotICAgIDB4RTdBRSwgMHhFN0FGLCAweDE3NzMsIDB4RTdCMCwgMHhFN0IwLCAweDExOEUsIDB4RTdCMSwgMHhFN0JFLCAweDE3NzUsDQotICAgIDB4RTdCRiwgMHhFN0JGLCAweDExOEYsIDB4RTdDMCwgMHhFN0MwLCAweDE3ODMsIDB4RTdDMSwgMHhFN0MxLCAweDFFNjcsDQotICAgIDB4RTdDMiwgMHhFN0M1LCAweDE3ODQsIDB4RTdDNiwgMHhFN0M2LCAweDExOTEsIDB4RTdDNywgMHhFN0M3LCAweDExOTMsDQotICAgIDB4RTdDOCwgMHhFN0NBLCAweDE3ODgsIDB4RTdDQiwgMHhFN0NCLCAweDExOTUsIDB4RTdDQywgMHhFN0NDLCAweDE3OEIsDQotICAgIDB4RTdDRCwgMHhFN0NELCAweDExOTYsIDB4RTdDRSwgMHhFN0NFLCAweDE3OEMsIDB4RTdDRiwgMHhFN0QwLCAweDExOTcsDQotICAgIDB4RTdEMSwgMHhFN0QyLCAweDE3OEQsIDB4RTdEMywgMHhFN0QzLCAweDExOUEsIDB4RTdENCwgMHhFN0RFLCAweDE3OEYsDQotICAgIDB4RTdERiwgMHhFN0RGLCAweDExOUMsIDB4RTdFMCwgMHhFN0UzLCAweDE3OUEsIDB4RTdFNCwgMHhFN0U0LCAweDExOUQsDQotICAgIDB4RTdFNSwgMHhFN0U1LCAweDE3OUUsIDB4RTdFNiwgMHhFN0U2LCAweDExOUUsIDB4RTdFNywgMHhFN0Y2LCAweDE3OUYsDQotICAgIDB4RTdGNywgMHhFN0Y3LCAweDE2QTUsIDB4RTdGOCwgMHhFN0ZFLCAweDE3QUYsIDB4RThBMSwgMHhFOEU2LCAweDE3QjYsDQotICAgIDB4RThFNywgMHhFOEU4LCAweDExQzcsIDB4RThFOSwgMHhFOEVGLCAweDE3RkMsIDB4RThGMCwgMHhFOEYwLCAweDExQzksDQotICAgIDB4RThGMSwgMHhFOEYxLCAweDEwNTQsIDB4RThGMiwgMHhFOEY2LCAweDE4MDMsIDB4RThGNywgMHhFOEY3LCAweDExQ0IsDQotICAgIDB4RThGOCwgMHhFOEY4LCAweDE4MDgsIDB4RThGOSwgMHhFOEY5LCAweDE2QTgsIDB4RThGQSwgMHhFOEZBLCAweDE4MDksDQotICAgIDB4RThGQiwgMHhFOEZCLCAweDExQ0MsIDB4RThGQywgMHhFOEZELCAweDE4MEEsIDB4RThGRSwgMHhFOEZFLCAweDExQ0QsDQotICAgIDB4RTlBMSwgMHhFOUE2LCAweDE4MEMsIDB4RTlBNywgMHhFOUE3LCAweDExRDAsIDB4RTlBOCwgMHhFOUFCLCAweDE4MTIsDQotICAgIDB4RTlBQywgMHhFOUFDLCAweDExRDEsIDB4RTlBRCwgMHhFOUNCLCAweDE4MTYsIDB4RTlDQywgMHhFOUNDLCAweDExRDMsDQotICAgIDB4RTlDRCwgMHhFOUY2LCAweDE4MzUsIDB4RTlGNywgMHhFOUY3LCAweDFGMzQsIDB4RTlGOCwgMHhFOUZFLCAweDE4NUYsDQotICAgIDB4RUFBMSwgMHhFQUMwLCAweDE4NjYsIDB4RUFDMSwgMHhFQUMxLCAweDE3RUIsIDB4RUFDMiwgMHhFQUU0LCAweDE4ODYsDQotICAgIDB4RUFFNSwgMHhFQUU1LCAweDExRTEsIDB4RUFFNiwgMHhFQUYzLCAweDE4QTksIDB4RUFGNCwgMHhFQUY0LCAweDEwNTcsDQotICAgIDB4RUFGNSwgMHhFQUY2LCAweDE4QjcsIDB4RUFGNywgMHhFQUY3LCAweDExRTMsIDB4RUFGOCwgMHhFQUZCLCAweDE4QjksDQotICAgIDB4RUFGQywgMHhFQUZDLCAweDExRTUsIDB4RUFGRCwgMHhFQUZELCAweDE4QkQsIDB4RUFGRSwgMHhFQUZFLCAweDExRTYsDQotICAgIDB4RUJBMSwgMHhFQkEzLCAweDE4QkUsIDB4RUJBNCwgMHhFQkE0LCAweDExRTgsIDB4RUJBNSwgMHhFQkE2LCAweDE4QzEsDQotICAgIDB4RUJBNywgMHhFQkE3LCAweDExRUEsIDB4RUJBOCwgMHhFQkE4LCAweDE4QzMsIDB4RUJBOSwgMHhFQkE5LCAweDExRUMsDQotICAgIDB4RUJBQSwgMHhFQkFBLCAweDEwNTgsIDB4RUJBQiwgMHhFQkI5LCAweDE4QzQsIDB4RUJCQSwgMHhFQkJCLCAweDExRUUsDQotICAgIDB4RUJCQywgMHhFQkJDLCAweDE4RDMsIDB4RUJCRCwgMHhFQkJELCAweDExRjAsIDB4RUJCRSwgMHhFQkMwLCAweDE4RDQsDQotICAgIDB4RUJDMSwgMHhFQkMxLCAweDExRjEsIDB4RUJDMiwgMHhFQkMyLCAweDExRjMsIDB4RUJDMywgMHhFQkM1LCAweDE4RDcsDQotICAgIDB4RUJDNiwgMHhFQkM3LCAweDExRjQsIDB4RUJDOCwgMHhFQkNCLCAweDE4REEsIDB4RUJDQywgMHhFQkNDLCAweDExRjcsDQotICAgIDB4RUJDRCwgMHhFQkNFLCAweDE4REUsIDB4RUJDRiwgMHhFQkQxLCAweDExRjgsIDB4RUJEMiwgMHhFQkQyLCAweDE1QjAsDQotICAgIDB4RUJEMywgMHhFQkQ3LCAweDE4RTAsIDB4RUJEOCwgMHhFQkQ4LCAweDExRkIsIDB4RUJEOSwgMHhFQkZFLCAweDE4RTUsDQotICAgIDB4RUNBMSwgMHhFQ0E1LCAweDE5MEIsIDB4RUNBNiwgMHhFQ0E2LCAweDEyMDYsIDB4RUNBNywgMHhFQ0E3LCAweDEyMDgsDQotICAgIDB4RUNBOCwgMHhFQ0E5LCAweDE5MTAsIDB4RUNBQSwgMHhFQ0FBLCAweDEyMEEsIDB4RUNBQiwgMHhFQ0FFLCAweDE5MTIsDQotICAgIDB4RUNBRiwgMHhFQ0FGLCAweDE3M0UsIDB4RUNCMCwgMHhFQ0IxLCAweDEyMEMsIDB4RUNCMiwgMHhFQ0IyLCAweDEwNUIsDQotICAgIDB4RUNCMywgMHhFQ0I0LCAweDE5MTYsIDB4RUNCNSwgMHhFQ0I1LCAweDEyMTEsIDB4RUNCNiwgMHhFQ0I3LCAweDE5MTgsDQotICAgIDB4RUNCOCwgMHhFQ0I4LCAweDEyMTMsIDB4RUNCOSwgMHhFQ0I5LCAweDE5MUEsIDB4RUNCQSwgMHhFQ0JBLCAweDEyMTUsDQotICAgIDB4RUNCQiwgMHhFQ0JGLCAweDE5MUIsIDB4RUNDMCwgMHhFQ0MxLCAweDEyMTgsIDB4RUNDMiwgMHhFQ0M0LCAweDE5MjAsDQotICAgIDB4RUNDNSwgMHhFQ0M1LCAweDEyMUEsIDB4RUNDNiwgMHhFQ0M2LCAweDEyMUMsIDB4RUNDNywgMHhFQ0M4LCAweDE5MjMsDQotICAgIDB4RUNDOSwgMHhFQ0NBLCAweDEwNUMsIDB4RUNDQiwgMHhFQ0Q0LCAweDE5MjUsIDB4RUNENSwgMHhFQ0Q1LCAweDEyMUUsDQotICAgIDB4RUNENiwgMHhFQ0RDLCAweDE5MkYsIDB4RUNERCwgMHhFQ0RFLCAweDEyMjAsIDB4RUNERiwgMHhFQ0UwLCAweDE5MzYsDQotICAgIDB4RUNFMSwgMHhFQ0UxLCAweDEyMjIsIDB4RUNFMiwgMHhFQ0UzLCAweDE5MzgsIDB4RUNFNCwgMHhFQ0U0LCAweDEyMjQsDQotICAgIDB4RUNFNSwgMHhFQ0U2LCAweDE5M0EsIDB4RUNFNywgMHhFQ0U4LCAweDEyMjUsIDB4RUNFOSwgMHhFQ0Y2LCAweDE5M0MsDQotICAgIDB4RUNGNywgMHhFQ0Y4LCAweDEyMjcsIDB4RUNGOSwgMHhFQ0Y5LCAweDE5NEEsIDB4RUNGQSwgMHhFQ0ZBLCAweDEyMkEsDQotICAgIDB4RUNGQiwgMHhFQ0ZFLCAweDE5NEIsIDB4RURBMSwgMHhFREEzLCAweDEyMkQsIDB4RURBNCwgMHhFREVELCAweDE5NEYsDQotICAgIDB4RURFRSwgMHhFREVFLCAweDE0RTcsIDB4RURFRiwgMHhFREZFLCAweDE5OTksIDB4RUVBMSwgMHhFRURBLCAweDE5QTksDQotICAgIDB4RUVEQiwgMHhFRURCLCAweDE5NUUsIDB4RUVEQywgMHhFRUZFLCAweDE5RTMsIDB4RUZBMSwgMHhFRkZFLCAweDFBMDYsDQotICAgIDB4RjBBMSwgMHhGMEZFLCAweDFBNjQsIDB4RjFBMSwgMHhGMUZFLCAweDFBQzIsIDB4RjJBMSwgMHhGMkJDLCAweDFCMjAsDQotICAgIDB4RjJCRCwgMHhGMkJELCAweDE2NjMsIDB4RjJCRSwgMHhGMkY5LCAweDFCM0MsIDB4RjJGQSwgMHhGMkZBLCAweDE2OEIsDQotICAgIDB4RjJGQiwgMHhGMkZFLCAweDFCNzgsIDB4RjNBMSwgMHhGM0IwLCAweDFCN0MsIDB4RjNCMSwgMHhGM0IxLCAweDEwNUYsDQotICAgIDB4RjNCMiwgMHhGM0ZFLCAweDFCOEMsIDB4RjRBMSwgMHhGNEE2LCAweDFCRDksIDB4RjRBNywgMHhGNEE3LCAweDE5NTQsDQotICAgIDB4RjRBOCwgMHhGNEVELCAweDFCREYsIDB4RjRFRSwgMHhGNEVFLCAweDFBMUMsIDB4RjRFRiwgMHhGNEZFLCAweDFDMjUsDQotICAgIDB4RjVBMSwgMHhGNUZFLCAweDFDMzUsIDB4RjZBMSwgMHhGNkYzLCAweDFDOTMsIDB4RjZGNCwgMHhGNkY0LCAweDEwQjcsDQotICAgIDB4RjZGNSwgMHhGNkY1LCAweDFDRTYsIDB4RjZGNiwgMHhGNkY2LCAweDFCRTMsIDB4RjZGNywgMHhGNkZFLCAweDFDRTcsDQotICAgIDB4RjdBMSwgMHhGN0I3LCAweDFDRUYsIDB4RjdCOCwgMHhGN0I4LCAweDEwOTcsIDB4RjdCOSwgMHhGN0M3LCAweDFEMDYsDQotICAgIDB4RjdDOCwgMHhGN0M4LCAweDEwQUEsIDB4RjdDOSwgMHhGN0QyLCAweDFEMTUsIDB4RjdEMywgMHhGN0QzLCAweDEwRjQsDQotICAgIDB4RjdENCwgMHhGN0ZFLCAweDFEMUYsIDB4RjhBMSwgMHhGOERBLCAweDFENEEsIDB4RjhEQiwgMHhGOERCLCAweDFEOTQsDQotICAgIDB4RjhEQywgMHhGOEVGLCAweDFEODQsIDB4RjhGMCwgMHhGOEYwLCAweDEzRTAsIDB4RjhGMSwgMHhGOEZFLCAweDFEOTgsDQotICAgIDB4RjlBMSwgMHhGOUZFLCAweDFEQTYsIDB4RkFBMSwgMHhGQUExLCAweDFFMUQsIDB4RkFBMiwgMHhGQUEyLCAweDBERTYsDQotICAgIDB4RkFBMywgMHhGQUU1LCAweDFFMDQsIDB4RkFFNiwgMHhGQUU2LCAweDBFM0MsIDB4RkFFNywgMHhGQUZFLCAweDFFNDcsDQotICAgIDB4RkJBMSwgMHhGQkZFLCAweDFFNUYsIDB4RkNBMSwgMHhGQ0E4LCAweDFFQkQsIDB4RkNBOSwgMHhGQ0E5LCAweDBFRTcsDQotICAgIDB4RkNBQSwgMHhGQ0ZFLCAweDFFQzUsIDB4RkRBMSwgMHhGREZFLCAweDFGMUEsDQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfS1NDcGNfRVVDX0hfMFs1MDkgKiAzXSA9IHsKKyAgICAweDAwMjAsIDB4MDA3RSwgMHgwMDAxLCAweDAwODEsIDB4MDA4MywgMHgwMDYwLCAweDAwRkUsIDB4MDBGRiwgMHgwMDYzLAorICAgIDB4QTE0MSwgMHhBMTdELCAweDFGRkYsIDB4QTE4MSwgMHhBMTlBLCAweDIwM0MsIDB4QTE5QywgMHhBMUEwLCAweDIwNTYsCisgICAgMHhBMUExLCAweEExQTEsIDB4MDA2NSwgMHhBMUEyLCAweEExQTMsIDB4MjA1QiwgMHhBMUE0LCAweEExRkUsIDB4MDA2OCwKKyAgICAweEEyNDEsIDB4QTI0QywgMHgyMDVELCAweEEyQTEsIDB4QTJFNSwgMHgwMEMzLCAweEEyRTYsIDB4QTJGRSwgMHgyMDY5LAorICAgIDB4QTM0MSwgMHhBMzdELCAweDIwODIsIDB4QTM4MSwgMHhBMzlGLCAweDIwQkYsIDB4QTNBMSwgMHhBM0ZFLCAweDAxMDgsCisgICAgMHhBNDQxLCAweEE0N0QsIDB4MjBERSwgMHhBNDgxLCAweEE0OUYsIDB4MjExQiwgMHhBNEExLCAweEE0RDMsIDB4MDE2NiwKKyAgICAweEE0RDUsIDB4QTRGRSwgMHgwMTk5LCAweEE1NDEsIDB4QTU3RCwgMHgyMTNBLCAweEE1ODEsIDB4QTU4QiwgMHgyMTc3LAorICAgIDB4QTVBMSwgMHhBNUFBLCAweDAxQzMsIDB4QTVCMCwgMHhBNUI5LCAweDAxQ0QsIDB4QTVDMSwgMHhBNUQ4LCAweDAxRDcsCisgICAgMHhBNURBLCAweEE1REUsIDB4MjE4MiwgMHhBNUUxLCAweEE1RjgsIDB4MDFFRiwgMHhBNUY5LCAweEE1RkMsIDB4MjE4NywKKyAgICAweEE2NDEsIDB4QTY3RCwgMHgyMThCLCAweEE2ODEsIDB4QTY4QSwgMHgyMUM4LCAweEE2OEQsIDB4QTY5MywgMHgyMUQyLAorICAgIDB4QTY5NiwgMHhBNjlCLCAweDIxRDksIDB4QTY5RSwgMHhBNjlGLCAweDIxREYsIDB4QTZBMSwgMHhBNkU0LCAweDAyMDcsCisgICAgMHhBNkU1LCAweEE2RkUsIDB4MjFFMSwgMHhBNzQxLCAweEE3N0QsIDB4MjFGQiwgMHhBNzgxLCAweEE3OUYsIDB4MjIzOCwKKyAgICAweEE3QTEsIDB4QTdFRiwgMHgwMjRCLCAweEE3RjAsIDB4QTdGRSwgMHgyMjU3LCAweEE4NDEsIDB4QTg3RCwgMHgyMjY2LAorICAgIDB4QTg4MSwgMHhBODlGLCAweDIyQTMsIDB4QThBMSwgMHhBOEE0LCAweDAyOUEsIDB4QThBNiwgMHhBOEE2LCAweDAyOUUsCisgICAgMHhBOEE4LCAweEE4QUYsIDB4MDI5RiwgMHhBOEIxLCAweEE4RkUsIDB4MDJBNywgMHhBOTQxLCAweEE5NzQsIDB4MjJDMiwKKyAgICAweEE5QTEsIDB4QTlGRSwgMHgwMkY1LCAweEFBNDEsIDB4QUE3RCwgMHgyMkY2LCAweEFBODEsIDB4QUE5RiwgMHgyMzMzLAorICAgIDB4QUFBMSwgMHhBQUYzLCAweDAzNTMsIDB4QUFGNCwgMHhBQUZFLCAweDIzNTIsIDB4QUI0MSwgMHhBQjdELCAweDIzNUQsCisgICAgMHhBQjgxLCAweEFCOUYsIDB4MjM5QSwgMHhBQkExLCAweEFCRjYsIDB4MDNBNiwgMHhBQkY3LCAweEFCRkEsIDB4MjNCOSwKKyAgICAweEFCRkIsIDB4QUJGRCwgMHgyNDcyLCAweEFDNDEsIDB4QUM3RCwgMHgyM0JELCAweEFDODEsIDB4QUM5NywgMHgyM0ZBLAorICAgIDB4QUNBMSwgMHhBQ0MxLCAweDAzRkMsIDB4QUNDMiwgMHhBQ0QwLCAweDI0MTEsIDB4QUNEMSwgMHhBQ0YxLCAweDA0MUQsCisgICAgMHhBQ0YyLCAweEFDRjYsIDB4MjQyMCwgMHhBRDQxLCAweEFEN0QsIDB4MjQyNSwgMHhBREExLCAweEFEQjAsIDB4MjQ2MiwKKyAgICAweEIwQTEsIDB4QjBGRSwgMHgwNDNFLCAweEIxQTEsIDB4QjFGRSwgMHgwNDlDLCAweEIyQTEsIDB4QjJGRSwgMHgwNEZBLAorICAgIDB4QjNBMSwgMHhCM0ZFLCAweDA1NTgsIDB4QjRBMSwgMHhCNEZFLCAweDA1QjYsIDB4QjVBMSwgMHhCNUZFLCAweDA2MTQsCisgICAgMHhCNkExLCAweEI2RkUsIDB4MDY3MiwgMHhCN0ExLCAweEI3RkUsIDB4MDZEMCwgMHhCOEExLCAweEI4RkUsIDB4MDcyRSwKKyAgICAweEI5QTEsIDB4QjlGRSwgMHgwNzhDLCAweEJBQTEsIDB4QkFGRSwgMHgwN0VBLCAweEJCQTEsIDB4QkJGRSwgMHgwODQ4LAorICAgIDB4QkNBMSwgMHhCQ0ZFLCAweDA4QTYsIDB4QkRBMSwgMHhCREZFLCAweDA5MDQsIDB4QkVBMSwgMHhCRUZFLCAweDA5NjIsCisgICAgMHhCRkExLCAweEJGRkUsIDB4MDlDMCwgMHhDMEExLCAweEMwRkUsIDB4MEExRSwgMHhDMUExLCAweEMxRkUsIDB4MEE3QywKKyAgICAweEMyQTEsIDB4QzJGRSwgMHgwQURBLCAweEMzQTEsIDB4QzNGRSwgMHgwQjM4LCAweEM0QTEsIDB4QzRGRSwgMHgwQjk2LAorICAgIDB4QzVBMSwgMHhDNUZFLCAweDBCRjQsIDB4QzZBMSwgMHhDNkZFLCAweDBDNTIsIDB4QzdBMSwgMHhDN0ZFLCAweDBDQjAsCisgICAgMHhDOEExLCAweEM4RkUsIDB4MEQwRSwgMHhDQUExLCAweENBRkUsIDB4MEQ2QywgMHhDQkExLCAweENCQ0YsIDB4MERDQSwKKyAgICAweENCRDAsIDB4Q0JEMCwgMHgxMDE0LCAweENCRDEsIDB4Q0JENSwgMHgwREY5LCAweENCRDYsIDB4Q0JENiwgMHgwRTVFLAorICAgIDB4Q0JENywgMHhDQkU2LCAweDBERkUsIDB4Q0JFNywgMHhDQkU3LCAweDFCOEQsIDB4Q0JFOCwgMHhDQkZFLCAweDBFMEUsCisgICAgMHhDQ0ExLCAweENDRkUsIDB4MEUyNSwgMHhDREExLCAweENEQ0UsIDB4MEU4MywgMHhDRENGLCAweENEQ0YsIDB4MEQ4NCwKKyAgICAweENERDAsIDB4Q0RFNywgMHgwRUIxLCAweENERTgsIDB4Q0RFOCwgMHgxRURDLCAweENERTksIDB4Q0RGRSwgMHgwRUM5LAorICAgIDB4Q0VBMSwgMHhDRUFDLCAweDBFREYsIDB4Q0VBRCwgMHhDRUFELCAweDBFREEsIDB4Q0VBRSwgMHhDRUZFLCAweDBFRUIsCisgICAgMHhDRkExLCAweENGRkEsIDB4MEYzQywgMHhDRkZCLCAweENGRkIsIDB4MEYzRSwgMHhDRkZDLCAweENGRkUsIDB4MEY5NiwKKyAgICAweEQwQTEsIDB4RDBBMSwgMHgwRjk5LCAweEQwQTIsIDB4RDBBMiwgMHgwRjZBLCAweEQwQTMsIDB4RDBCNywgMHgwRjlBLAorICAgIDB4RDBCOCwgMHhEMEI4LCAweDBGNkEsIDB4RDBCOSwgMHhEMENGLCAweDBGQUYsIDB4RDBEMCwgMHhEMEQwLCAweDBFN0MsCisgICAgMHhEMEQxLCAweEQwREMsIDB4MEZDNiwgMHhEMERELCAweEQwREQsIDB4MTAyMywgMHhEMERFLCAweEQwRkUsIDB4MEZEMiwKKyAgICAweEQxQTEsIDB4RDFEMywgMHgwRkYzLCAweEQxRDQsIDB4RDFENCwgMHgxMTE2LCAweEQxRDUsIDB4RDFENSwgMHgxMDNDLAorICAgIDB4RDFENiwgMHhEMUQ3LCAweDEwMjYsIDB4RDFEOCwgMHhEMUQ4LCAweDExMTcsIDB4RDFEOSwgMHhEMURBLCAweDEwMjgsCisgICAgMHhEMURCLCAweEQxRTAsIDB4MTExOCwgMHhEMUUxLCAweEQxRTEsIDB4MTAyQSwgMHhEMUUyLCAweEQxRTIsIDB4MTZBOCwKKyAgICAweEQxRTMsIDB4RDFFNSwgMHgxMTFFLCAweEQxRTYsIDB4RDFFNiwgMHgxMTIyLCAweEQxRTcsIDB4RDFFNywgMHgxMDJCLAorICAgIDB4RDFFOCwgMHhEMUVCLCAweDExMjMsIDB4RDFFQywgMHhEMUVDLCAweDEwMkMsIDB4RDFFRCwgMHhEMUVELCAweDExMjcsCisgICAgMHhEMUVFLCAweEQxRUUsIDB4MTAyRCwgMHhEMUVGLCAweEQxRjAsIDB4MTEyQSwgMHhEMUYxLCAweEQxRjEsIDB4MTAyRSwKKyAgICAweEQxRjIsIDB4RDFGMiwgMHgxMTJDLCAweEQxRjMsIDB4RDFGNSwgMHgxMDJGLCAweEQxRjYsIDB4RDFGNiwgMHgxMTJGLAorICAgIDB4RDFGNywgMHhEMUY5LCAweDEwMzIsIDB4RDFGQSwgMHhEMUZBLCAweDExMzMsIDB4RDFGQiwgMHhEMUZCLCAweDEwMzUsCisgICAgMHhEMUZDLCAweEQxRkQsIDB4MTEzNiwgMHhEMUZFLCAweEQxRkUsIDB4MTEzOSwgMHhEMkExLCAweEQyQTEsIDB4MTAzNiwKKyAgICAweEQyQTIsIDB4RDJBMywgMHgxMTNBLCAweEQyQTQsIDB4RDJBNiwgMHgxMDM3LCAweEQyQTcsIDB4RDJBQSwgMHgxMTNDLAorICAgIDB4RDJBQiwgMHhEMkFCLCAweDExNDMsIDB4RDJBQywgMHhEMkFDLCAweDEwM0EsIDB4RDJBRCwgMHhEMkFELCAweDExNDQsCisgICAgMHhEMkFFLCAweEQyQjEsIDB4MTAzQiwgMHhEMkIyLCAweEQyQjIsIDB4MTE0OCwgMHhEMkIzLCAweEQyQkQsIDB4MTAzRiwKKyAgICAweEQyQkUsIDB4RDJCRSwgMHgxMTlGLCAweEQyQkYsIDB4RDJDMSwgMHgxMDRBLCAweEQyQzIsIDB4RDJDMywgMHgxMUExLAorICAgIDB4RDJDNCwgMHhEMkM0LCAweDExQTUsIDB4RDJDNSwgMHhEMkM1LCAweDEwNEQsIDB4RDJDNiwgMHhEMkNBLCAweDExQTYsCisgICAgMHhEMkNCLCAweEQyQ0IsIDB4MTFBQywgMHhEMkNDLCAweEQyQ0MsIDB4MTA0RSwgMHhEMkNELCAweEQyQ0UsIDB4MTFBRCwKKyAgICAweEQyQ0YsIDB4RDJENCwgMHgxMUIwLCAweEQyRDUsIDB4RDJENywgMHgxMUI3LCAweEQyRDgsIDB4RDJEOCwgMHgxMDRGLAorICAgIDB4RDJEOSwgMHhEMkRBLCAweDExQkQsIDB4RDJEQiwgMHhEMkRELCAweDEwNTAsIDB4RDJERSwgMHhEMkRGLCAweDExQzEsCisgICAgMHhEMkUwLCAweEQyRTAsIDB4MTA1MywgMHhEMkUxLCAweEQyRTEsIDB4MTFDMywgMHhEMkUyLCAweEQyRTIsIDB4MTFDNiwKKyAgICAweEQyRTMsIDB4RDJFMywgMHgxMDU0LCAweEQyRTQsIDB4RDJFNCwgMHgxMUQ0LCAweEQyRTUsIDB4RDJFOCwgMHgxMUQ2LAorICAgIDB4RDJFOSwgMHhEMkVBLCAweDExREIsIDB4RDJFQiwgMHhEMkVCLCAweDExRTAsIDB4RDJFQywgMHhEMkVGLCAweDEwNTUsCisgICAgMHhEMkYwLCAweEQyRjMsIDB4MTFGQywgMHhEMkY0LCAweEQyRjUsIDB4MTIwMSwgMHhEMkY2LCAweEQyRjYsIDB4MTA1OSwKKyAgICAweEQyRjcsIDB4RDJGOCwgMHgxMjAzLCAweEQyRjksIDB4RDJGRSwgMHgxMDVBLCAweEQzQTEsIDB4RDNGRSwgMHgxMDYwLAorICAgIDB4RDRBMSwgMHhENEU1LCAweDEwQkUsIDB4RDRFNiwgMHhENEU2LCAweDEwREUsIDB4RDRFNywgMHhENEZCLCAweDExMDMsCisgICAgMHhENEZDLCAweEQ0RkMsIDB4MTAyOCwgMHhENEZELCAweEQ0RkUsIDB4MTExOCwgMHhENUExLCAweEQ1QTQsIDB4MTExQSwKKyAgICAweEQ1QTUsIDB4RDVBNSwgMHgxNkE4LCAweEQ1QTYsIDB4RDVBQSwgMHgxMTFFLCAweEQ1QUIsIDB4RDVBQiwgMHgxMDJCLAorICAgIDB4RDVBQywgMHhENUFELCAweDExMjMsIDB4RDVBRSwgMHhENUFFLCAweDEwNjAsIDB4RDVBRiwgMHhENUZFLCAweDExMjUsCisgICAgMHhENkExLCAweEQ2QjcsIDB4MTE3NSwgMHhENkI4LCAweEQ2QjgsIDB4MTA0NywgMHhENkI5LCAweEQ2Q0MsIDB4MTE4QywKKyAgICAweEQ2Q0QsIDB4RDZDRCwgMHgxMDRDLCAweEQ2Q0UsIDB4RDZGRSwgMHgxMUEwLCAweEQ3QTEsIDB4RDdDQSwgMHgxMUQxLAorICAgIDB4RDdDQiwgMHhEN0NCLCAweDE1QjAsIDB4RDdDQywgMHhEN0UzLCAweDExRkIsIDB4RDdFNCwgMHhEN0U0LCAweDE5MTgsCisgICAgMHhEN0U1LCAweEQ3RkUsIDB4MTIxMywgMHhEOEExLCAweEQ4RkUsIDB4MTIyRCwgMHhEOUExLCAweEQ5RkUsIDB4MTI4QiwKKyAgICAweERBQTEsIDB4REFGRSwgMHgxMkU5LCAweERCQTEsIDB4REJDNCwgMHgxMzQ3LCAweERCQzUsIDB4REJDNSwgMHgxNDFGLAorICAgIDB4REJDNiwgMHhEQkUzLCAweDEzNkIsIDB4REJFNCwgMHhEQkU0LCAweDEzM0EsIDB4REJFNSwgMHhEQkZFLCAweDEzODksCisgICAgMHhEQ0ExLCAweERDQTQsIDB4MTNBMywgMHhEQ0E1LCAweERDQTUsIDB4MUQ1RSwgMHhEQ0E2LCAweERDRkUsIDB4MTNBNywKKyAgICAweEREQTEsIDB4RERBNCwgMHgxNDAwLCAweEREQTUsIDB4RERBNSwgMHgxM0Q3LCAweEREQTYsIDB4RERENCwgMHgxNDA0LAorICAgIDB4RERENSwgMHhEREQ1LCAweDEzRjUsIDB4RERENiwgMHhEREYzLCAweDE0MzMsIDB4RERGNCwgMHhEREY0LCAweDFEQjcsCisgICAgMHhEREY1LCAweERERkUsIDB4MTQ1MSwgMHhERUExLCAweERFRkIsIDB4MTQ1QiwgMHhERUZDLCAweERFRkMsIDB4MTVEMCwKKyAgICAweERFRkQsIDB4REVGRCwgMHgxNEI2LCAweERFRkUsIDB4REVGRSwgMHgxNEY3LCAweERGQTEsIDB4REZCMiwgMHgxNEI3LAorICAgIDB4REZCMywgMHhERkIzLCAweDFCQUIsIDB4REZCNCwgMHhERkUwLCAweDE0QzksIDB4REZFMSwgMHhERkUxLCAweDE0RjIsCisgICAgMHhERkUyLCAweERGRTcsIDB4MTRGNiwgMHhERkU4LCAweERGRTgsIDB4MTU2RCwgMHhERkU5LCAweERGRkUsIDB4MTRGQywKKyAgICAweEUwQTEsIDB4RTBGMCwgMHgxNTEyLCAweEUwRjEsIDB4RTBGMSwgMHgxNzcxLCAweEUwRjIsIDB4RTBGRSwgMHgxNTYyLAorICAgIDB4RTFBMSwgMHhFMUFDLCAweDE1NkYsIDB4RTFBRCwgMHhFMUFELCAweDE1NTQsIDB4RTFBRSwgMHhFMUVDLCAweDE1N0IsCisgICAgMHhFMUVELCAweEUxRUQsIDB4MTRDNSwgMHhFMUVFLCAweEUxRkUsIDB4MTVCQSwgMHhFMkExLCAweEUyRkUsIDB4MTVDQiwKKyAgICAweEUzQTEsIDB4RTNGNCwgMHgxNjI5LCAweEUzRjUsIDB4RTNGNSwgMHgxQjYxLCAweEUzRjYsIDB4RTNGRSwgMHgxNjdELAorICAgIDB4RTRBMSwgMHhFNEExLCAweDFDQ0EsIDB4RTRBMiwgMHhFNEE4LCAweDE2ODYsIDB4RTRBOSwgMHhFNEE5LCAweDE2MkUsCisgICAgMHhFNEFBLCAweEU0RkUsIDB4MTY4RCwgMHhFNUExLCAweEU1QUQsIDB4MTZFMiwgMHhFNUFFLCAweEU1QUUsIDB4MTZGMiwKKyAgICAweEU1QUYsIDB4RTVCMCwgMHgxNkVGLCAweEU1QjEsIDB4RTVCMiwgMHgxMTQ5LCAweEU1QjMsIDB4RTVCOCwgMHgxNkYxLAorICAgIDB4RTVCOSwgMHhFNUI5LCAweDExNEIsIDB4RTVCQSwgMHhFNUJBLCAweDE2RjcsIDB4RTVCQiwgMHhFNUJDLCAweDExNEQsCisgICAgMHhFNUJELCAweEU1QzMsIDB4MTZGOCwgMHhFNUM0LCAweEU1QzQsIDB4MTE0RiwgMHhFNUM1LCAweEU1Q0QsIDB4MTZGRiwKKyAgICAweEU1Q0UsIDB4RTVDRSwgMHgxMTUzLCAweEU1Q0YsIDB4RTVDRiwgMHgxNzA4LCAweEU1RDAsIDB4RTVEMCwgMHgxMTU0LAorICAgIDB4RTVEMSwgMHhFNUQxLCAweDE3MDksIDB4RTVEMiwgMHhFNUQyLCAweDExNTUsIDB4RTVEMywgMHhFNUQ1LCAweDE3MEEsCisgICAgMHhFNUQ2LCAweEU1RDYsIDB4MTE1NywgMHhFNUQ3LCAweEU1RjksIDB4MTcwRCwgMHhFNUZBLCAweEU1RkIsIDB4MTE1QSwKKyAgICAweEU1RkMsIDB4RTVGQywgMHgxMDNGLCAweEU1RkQsIDB4RTVGRCwgMHgxNzMwLCAweEU1RkUsIDB4RTVGRSwgMHgxMTVDLAorICAgIDB4RTZBMSwgMHhFNkExLCAweDExNUYsIDB4RTZBMiwgMHhFNkEzLCAweDE3MzEsIDB4RTZBNCwgMHhFNkE0LCAweDExNjEsCisgICAgMHhFNkE1LCAweEU2QTYsIDB4MTczMywgMHhFNkE3LCAweEU2QTcsIDB4MTE2MiwgMHhFNkE4LCAweEU2QUMsIDB4MTczNSwKKyAgICAweEU2QUQsIDB4RTZBRCwgMHgxMTY1LCAweEU2QUUsIDB4RTZBRSwgMHgxNzNBLCAweEU2QUYsIDB4RTZCMSwgMHgxMTY3LAorICAgIDB4RTZCMiwgMHhFNkIyLCAweDE3M0IsIDB4RTZCMywgMHhFNkIzLCAweDExNkEsIDB4RTZCNCwgMHhFNkI2LCAweDE3M0MsCisgICAgMHhFNkI3LCAweEU2QjgsIDB4MTE2QiwgMHhFNkI5LCAweEU2QkIsIDB4MTczRiwgMHhFNkJDLCAweEU2QkMsIDB4MTE2RiwKKyAgICAweEU2QkQsIDB4RTZDMywgMHgxNzQyLCAweEU2QzQsIDB4RTZDNCwgMHgxMDQwLCAweEU2QzUsIDB4RTZDNSwgMHgxNzQ5LAorICAgIDB4RTZDNiwgMHhFNkM3LCAweDExNzEsIDB4RTZDOCwgMHhFNkM5LCAweDE3NEEsIDB4RTZDQSwgMHhFNkNBLCAweDEwNDEsCisgICAgMHhFNkNCLCAweEU2RDEsIDB4MTc0QywgMHhFNkQyLCAweEU2RDIsIDB4MTE3NCwgMHhFNkQzLCAweEU2RDUsIDB4MTc1MywKKyAgICAweEU2RDYsIDB4RTZENiwgMHgxMTc1LCAweEU2RDcsIDB4RTZEOCwgMHgxNzU2LCAweEU2RDksIDB4RTZEOSwgMHgxMTc2LAorICAgIDB4RTZEQSwgMHhFNkRCLCAweDE3NTgsIDB4RTZEQywgMHhFNkRDLCAweDEwNDIsIDB4RTZERCwgMHhFNkRFLCAweDE3NUEsCisgICAgMHhFNkRGLCAweEU2REYsIDB4MTE3NywgMHhFNkUwLCAweEU2RTAsIDB4MTc1QywgMHhFNkUxLCAweEU2RTEsIDB4MTE3OCwKKyAgICAweEU2RTIsIDB4RTZFMywgMHgxNzVELCAweEU2RTQsIDB4RTZFNCwgMHgxMTdBLCAweEU2RTUsIDB4RTZFNSwgMHgxMTc5LAorICAgIDB4RTZFNiwgMHhFNkU2LCAweDExN0IsIDB4RTZFNywgMHhFNkU3LCAweDE3NUYsIDB4RTZFOCwgMHhFNkU4LCAweDExN0MsCisgICAgMHhFNkU5LCAweEU2RTksIDB4MTc2MCwgMHhFNkVBLCAweEU2RUIsIDB4MTE3RSwgMHhFNkVDLCAweEU2RUMsIDB4MTkyRiwKKyAgICAweEU2RUQsIDB4RTZFRSwgMHgxNzYxLCAweEU2RUYsIDB4RTZFRiwgMHgxMTgxLCAweEU2RjAsIDB4RTZGMCwgMHgxNzYzLAorICAgIDB4RTZGMSwgMHhFNkYxLCAweDExODIsIDB4RTZGMiwgMHhFNkYyLCAweDE1NTQsIDB4RTZGMywgMHhFNkY0LCAweDE3NjQsCisgICAgMHhFNkY1LCAweEU2RjUsIDB4MTE4MywgMHhFNkY2LCAweEU2RjYsIDB4MTA0MywgMHhFNkY3LCAweEU2RjcsIDB4MTA0NiwKKyAgICAweEU2RjgsIDB4RTZGOCwgMHgxNzY2LCAweEU2RjksIDB4RTZGOSwgMHgxMTg1LCAweEU2RkEsIDB4RTZGRSwgMHgxNzY3LAorICAgIDB4RTdBMSwgMHhFN0ExLCAweDExODcsIDB4RTdBMiwgMHhFN0E1LCAweDE3NkMsIDB4RTdBNiwgMHhFN0E2LCAweDExODgsCisgICAgMHhFN0E3LCAweEU3QTgsIDB4MTc3MCwgMHhFN0E5LCAweEU3QTksIDB4MTE4OSwgMHhFN0FBLCAweEU3QUEsIDB4MTE4QiwKKyAgICAweEU3QUIsIDB4RTdBQiwgMHgxNzcyLCAweEU3QUMsIDB4RTdBQywgMHgxMDQ3LCAweEU3QUQsIDB4RTdBRCwgMHgxMThELAorICAgIDB4RTdBRSwgMHhFN0FGLCAweDE3NzMsIDB4RTdCMCwgMHhFN0IwLCAweDExOEUsIDB4RTdCMSwgMHhFN0JFLCAweDE3NzUsCisgICAgMHhFN0JGLCAweEU3QkYsIDB4MTE4RiwgMHhFN0MwLCAweEU3QzAsIDB4MTc4MywgMHhFN0MxLCAweEU3QzEsIDB4MUU2NywKKyAgICAweEU3QzIsIDB4RTdDNSwgMHgxNzg0LCAweEU3QzYsIDB4RTdDNiwgMHgxMTkxLCAweEU3QzcsIDB4RTdDNywgMHgxMTkzLAorICAgIDB4RTdDOCwgMHhFN0NBLCAweDE3ODgsIDB4RTdDQiwgMHhFN0NCLCAweDExOTUsIDB4RTdDQywgMHhFN0NDLCAweDE3OEIsCisgICAgMHhFN0NELCAweEU3Q0QsIDB4MTE5NiwgMHhFN0NFLCAweEU3Q0UsIDB4MTc4QywgMHhFN0NGLCAweEU3RDAsIDB4MTE5NywKKyAgICAweEU3RDEsIDB4RTdEMiwgMHgxNzhELCAweEU3RDMsIDB4RTdEMywgMHgxMTlBLCAweEU3RDQsIDB4RTdERSwgMHgxNzhGLAorICAgIDB4RTdERiwgMHhFN0RGLCAweDExOUMsIDB4RTdFMCwgMHhFN0UzLCAweDE3OUEsIDB4RTdFNCwgMHhFN0U0LCAweDExOUQsCisgICAgMHhFN0U1LCAweEU3RTUsIDB4MTc5RSwgMHhFN0U2LCAweEU3RTYsIDB4MTE5RSwgMHhFN0U3LCAweEU3RjYsIDB4MTc5RiwKKyAgICAweEU3RjcsIDB4RTdGNywgMHgxNkE1LCAweEU3RjgsIDB4RTdGRSwgMHgxN0FGLCAweEU4QTEsIDB4RThFNiwgMHgxN0I2LAorICAgIDB4RThFNywgMHhFOEU4LCAweDExQzcsIDB4RThFOSwgMHhFOEVGLCAweDE3RkMsIDB4RThGMCwgMHhFOEYwLCAweDExQzksCisgICAgMHhFOEYxLCAweEU4RjEsIDB4MTA1NCwgMHhFOEYyLCAweEU4RjYsIDB4MTgwMywgMHhFOEY3LCAweEU4RjcsIDB4MTFDQiwKKyAgICAweEU4RjgsIDB4RThGOCwgMHgxODA4LCAweEU4RjksIDB4RThGOSwgMHgxNkE4LCAweEU4RkEsIDB4RThGQSwgMHgxODA5LAorICAgIDB4RThGQiwgMHhFOEZCLCAweDExQ0MsIDB4RThGQywgMHhFOEZELCAweDE4MEEsIDB4RThGRSwgMHhFOEZFLCAweDExQ0QsCisgICAgMHhFOUExLCAweEU5QTYsIDB4MTgwQywgMHhFOUE3LCAweEU5QTcsIDB4MTFEMCwgMHhFOUE4LCAweEU5QUIsIDB4MTgxMiwKKyAgICAweEU5QUMsIDB4RTlBQywgMHgxMUQxLCAweEU5QUQsIDB4RTlDQiwgMHgxODE2LCAweEU5Q0MsIDB4RTlDQywgMHgxMUQzLAorICAgIDB4RTlDRCwgMHhFOUY2LCAweDE4MzUsIDB4RTlGNywgMHhFOUY3LCAweDFGMzQsIDB4RTlGOCwgMHhFOUZFLCAweDE4NUYsCisgICAgMHhFQUExLCAweEVBQzAsIDB4MTg2NiwgMHhFQUMxLCAweEVBQzEsIDB4MTdFQiwgMHhFQUMyLCAweEVBRTQsIDB4MTg4NiwKKyAgICAweEVBRTUsIDB4RUFFNSwgMHgxMUUxLCAweEVBRTYsIDB4RUFGMywgMHgxOEE5LCAweEVBRjQsIDB4RUFGNCwgMHgxMDU3LAorICAgIDB4RUFGNSwgMHhFQUY2LCAweDE4QjcsIDB4RUFGNywgMHhFQUY3LCAweDExRTMsIDB4RUFGOCwgMHhFQUZCLCAweDE4QjksCisgICAgMHhFQUZDLCAweEVBRkMsIDB4MTFFNSwgMHhFQUZELCAweEVBRkQsIDB4MThCRCwgMHhFQUZFLCAweEVBRkUsIDB4MTFFNiwKKyAgICAweEVCQTEsIDB4RUJBMywgMHgxOEJFLCAweEVCQTQsIDB4RUJBNCwgMHgxMUU4LCAweEVCQTUsIDB4RUJBNiwgMHgxOEMxLAorICAgIDB4RUJBNywgMHhFQkE3LCAweDExRUEsIDB4RUJBOCwgMHhFQkE4LCAweDE4QzMsIDB4RUJBOSwgMHhFQkE5LCAweDExRUMsCisgICAgMHhFQkFBLCAweEVCQUEsIDB4MTA1OCwgMHhFQkFCLCAweEVCQjksIDB4MThDNCwgMHhFQkJBLCAweEVCQkIsIDB4MTFFRSwKKyAgICAweEVCQkMsIDB4RUJCQywgMHgxOEQzLCAweEVCQkQsIDB4RUJCRCwgMHgxMUYwLCAweEVCQkUsIDB4RUJDMCwgMHgxOEQ0LAorICAgIDB4RUJDMSwgMHhFQkMxLCAweDExRjEsIDB4RUJDMiwgMHhFQkMyLCAweDExRjMsIDB4RUJDMywgMHhFQkM1LCAweDE4RDcsCisgICAgMHhFQkM2LCAweEVCQzcsIDB4MTFGNCwgMHhFQkM4LCAweEVCQ0IsIDB4MThEQSwgMHhFQkNDLCAweEVCQ0MsIDB4MTFGNywKKyAgICAweEVCQ0QsIDB4RUJDRSwgMHgxOERFLCAweEVCQ0YsIDB4RUJEMSwgMHgxMUY4LCAweEVCRDIsIDB4RUJEMiwgMHgxNUIwLAorICAgIDB4RUJEMywgMHhFQkQ3LCAweDE4RTAsIDB4RUJEOCwgMHhFQkQ4LCAweDExRkIsIDB4RUJEOSwgMHhFQkZFLCAweDE4RTUsCisgICAgMHhFQ0ExLCAweEVDQTUsIDB4MTkwQiwgMHhFQ0E2LCAweEVDQTYsIDB4MTIwNiwgMHhFQ0E3LCAweEVDQTcsIDB4MTIwOCwKKyAgICAweEVDQTgsIDB4RUNBOSwgMHgxOTEwLCAweEVDQUEsIDB4RUNBQSwgMHgxMjBBLCAweEVDQUIsIDB4RUNBRSwgMHgxOTEyLAorICAgIDB4RUNBRiwgMHhFQ0FGLCAweDE3M0UsIDB4RUNCMCwgMHhFQ0IxLCAweDEyMEMsIDB4RUNCMiwgMHhFQ0IyLCAweDEwNUIsCisgICAgMHhFQ0IzLCAweEVDQjQsIDB4MTkxNiwgMHhFQ0I1LCAweEVDQjUsIDB4MTIxMSwgMHhFQ0I2LCAweEVDQjcsIDB4MTkxOCwKKyAgICAweEVDQjgsIDB4RUNCOCwgMHgxMjEzLCAweEVDQjksIDB4RUNCOSwgMHgxOTFBLCAweEVDQkEsIDB4RUNCQSwgMHgxMjE1LAorICAgIDB4RUNCQiwgMHhFQ0JGLCAweDE5MUIsIDB4RUNDMCwgMHhFQ0MxLCAweDEyMTgsIDB4RUNDMiwgMHhFQ0M0LCAweDE5MjAsCisgICAgMHhFQ0M1LCAweEVDQzUsIDB4MTIxQSwgMHhFQ0M2LCAweEVDQzYsIDB4MTIxQywgMHhFQ0M3LCAweEVDQzgsIDB4MTkyMywKKyAgICAweEVDQzksIDB4RUNDQSwgMHgxMDVDLCAweEVDQ0IsIDB4RUNENCwgMHgxOTI1LCAweEVDRDUsIDB4RUNENSwgMHgxMjFFLAorICAgIDB4RUNENiwgMHhFQ0RDLCAweDE5MkYsIDB4RUNERCwgMHhFQ0RFLCAweDEyMjAsIDB4RUNERiwgMHhFQ0UwLCAweDE5MzYsCisgICAgMHhFQ0UxLCAweEVDRTEsIDB4MTIyMiwgMHhFQ0UyLCAweEVDRTMsIDB4MTkzOCwgMHhFQ0U0LCAweEVDRTQsIDB4MTIyNCwKKyAgICAweEVDRTUsIDB4RUNFNiwgMHgxOTNBLCAweEVDRTcsIDB4RUNFOCwgMHgxMjI1LCAweEVDRTksIDB4RUNGNiwgMHgxOTNDLAorICAgIDB4RUNGNywgMHhFQ0Y4LCAweDEyMjcsIDB4RUNGOSwgMHhFQ0Y5LCAweDE5NEEsIDB4RUNGQSwgMHhFQ0ZBLCAweDEyMkEsCisgICAgMHhFQ0ZCLCAweEVDRkUsIDB4MTk0QiwgMHhFREExLCAweEVEQTMsIDB4MTIyRCwgMHhFREE0LCAweEVERUQsIDB4MTk0RiwKKyAgICAweEVERUUsIDB4RURFRSwgMHgxNEU3LCAweEVERUYsIDB4RURGRSwgMHgxOTk5LCAweEVFQTEsIDB4RUVEQSwgMHgxOUE5LAorICAgIDB4RUVEQiwgMHhFRURCLCAweDE5NUUsIDB4RUVEQywgMHhFRUZFLCAweDE5RTMsIDB4RUZBMSwgMHhFRkZFLCAweDFBMDYsCisgICAgMHhGMEExLCAweEYwRkUsIDB4MUE2NCwgMHhGMUExLCAweEYxRkUsIDB4MUFDMiwgMHhGMkExLCAweEYyQkMsIDB4MUIyMCwKKyAgICAweEYyQkQsIDB4RjJCRCwgMHgxNjYzLCAweEYyQkUsIDB4RjJGOSwgMHgxQjNDLCAweEYyRkEsIDB4RjJGQSwgMHgxNjhCLAorICAgIDB4RjJGQiwgMHhGMkZFLCAweDFCNzgsIDB4RjNBMSwgMHhGM0IwLCAweDFCN0MsIDB4RjNCMSwgMHhGM0IxLCAweDEwNUYsCisgICAgMHhGM0IyLCAweEYzRkUsIDB4MUI4QywgMHhGNEExLCAweEY0QTYsIDB4MUJEOSwgMHhGNEE3LCAweEY0QTcsIDB4MTk1NCwKKyAgICAweEY0QTgsIDB4RjRFRCwgMHgxQkRGLCAweEY0RUUsIDB4RjRFRSwgMHgxQTFDLCAweEY0RUYsIDB4RjRGRSwgMHgxQzI1LAorICAgIDB4RjVBMSwgMHhGNUZFLCAweDFDMzUsIDB4RjZBMSwgMHhGNkYzLCAweDFDOTMsIDB4RjZGNCwgMHhGNkY0LCAweDEwQjcsCisgICAgMHhGNkY1LCAweEY2RjUsIDB4MUNFNiwgMHhGNkY2LCAweEY2RjYsIDB4MUJFMywgMHhGNkY3LCAweEY2RkUsIDB4MUNFNywKKyAgICAweEY3QTEsIDB4RjdCNywgMHgxQ0VGLCAweEY3QjgsIDB4RjdCOCwgMHgxMDk3LCAweEY3QjksIDB4RjdDNywgMHgxRDA2LAorICAgIDB4RjdDOCwgMHhGN0M4LCAweDEwQUEsIDB4RjdDOSwgMHhGN0QyLCAweDFEMTUsIDB4RjdEMywgMHhGN0QzLCAweDEwRjQsCisgICAgMHhGN0Q0LCAweEY3RkUsIDB4MUQxRiwgMHhGOEExLCAweEY4REEsIDB4MUQ0QSwgMHhGOERCLCAweEY4REIsIDB4MUQ5NCwKKyAgICAweEY4REMsIDB4RjhFRiwgMHgxRDg0LCAweEY4RjAsIDB4RjhGMCwgMHgxM0UwLCAweEY4RjEsIDB4RjhGRSwgMHgxRDk4LAorICAgIDB4RjlBMSwgMHhGOUZFLCAweDFEQTYsIDB4RkFBMSwgMHhGQUExLCAweDFFMUQsIDB4RkFBMiwgMHhGQUEyLCAweDBERTYsCisgICAgMHhGQUEzLCAweEZBRTUsIDB4MUUwNCwgMHhGQUU2LCAweEZBRTYsIDB4MEUzQywgMHhGQUU3LCAweEZBRkUsIDB4MUU0NywKKyAgICAweEZCQTEsIDB4RkJGRSwgMHgxRTVGLCAweEZDQTEsIDB4RkNBOCwgMHgxRUJELCAweEZDQTksIDB4RkNBOSwgMHgwRUU3LAorICAgIDB4RkNBQSwgMHhGQ0ZFLCAweDFFQzUsIDB4RkRBMSwgMHhGREZFLCAweDFGMUEsCit9OwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0tvcmVhMS9VbmlLUy1VQ1MyLUhfMS5jcHAgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvS29yZWExL1VuaUtTLVVDUzItSF8xLmNwcAppbmRleCA2MmI2ZWE1Li5kYWY5ODI3IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvS29yZWExL1VuaUtTLVVDUzItSF8xLmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvS29yZWExL1VuaUtTLVVDUzItSF8xLmNwcApAQCAtMSwyODA2ICsxLDI4MDYgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLWV4dGVybiBjb25zdCB1bnNpZ25lZCBzaG9ydCBnX0ZYQ01BUF9VbmlLU19VQ1MyX0hfMVs4Mzk0ICogM10gPSB7DQotICAgIDB4MDAyMCwgMHgwMDdFLCAweDAwMDEsIDB4MDBBMSwgMHgwMEExLCAweDAwRDAsIDB4MDBBNCwgMHgwMEE0LCAweDAwRDYsDQotICAgIDB4MDBBNywgMHgwMEE3LCAweDAwOUIsIDB4MDBBOCwgMHgwMEE4LCAweDAwNkIsIDB4MDBBQSwgMHgwMEFBLCAweDAyOUMsDQotICAgIDB4MDBBQiwgMHgwMEFCLCAweDAwQjAsIDB4MDBCMCwgMHgwMEIwLCAweDAwOEEsIDB4MDBCMSwgMHgwMEIxLCAweDAwODIsDQotICAgIDB4MDBCMiwgMHgwMEIzLCAweDAzNEIsIDB4MDBCNCwgMHgwMEI0LCAweDAwQzcsIDB4MDBCNiwgMHgwMEI2LCAweDAwRjQsDQotICAgIDB4MDBCOCwgMHgwMEI4LCAweDAwQ0UsIDB4MDBCOSwgMHgwMEI5LCAweDAzNEEsIDB4MDBCQSwgMHgwMEJBLCAweDAyQTMsDQotICAgIDB4MDBCQiwgMHgwMEJCLCAweDAwQjEsIDB4MDBCQywgMHgwMEJDLCAweDAyRUYsIDB4MDBCRCwgMHgwMEJELCAweDAyRUMsDQotICAgIDB4MDBCRSwgMHgwMEJFLCAweDAyRjAsIDB4MDBCRiwgMHgwMEJGLCAweDAwRDEsIDB4MDBDNiwgMHgwMEM2LCAweDAyOUEsDQotICAgIDB4MDBEMCwgMHgwMEQwLCAweDAyOUIsIDB4MDBENywgMHgwMEQ3LCAweDAwODMsIDB4MDBEOCwgMHgwMEQ4LCAweDAyQTEsDQotICAgIDB4MDBERSwgMHgwMERFLCAweDAyQTQsIDB4MDBERiwgMHgwMERGLCAweDAzMDAsIDB4MDBFNiwgMHgwMEU2LCAweDAyRjUsDQotICAgIDB4MDBGMCwgMHgwMEYwLCAweDAyRjcsIDB4MDBGNywgMHgwMEY3LCAweDAwODQsIDB4MDBGOCwgMHgwMEY4LCAweDAyRkUsDQotICAgIDB4MDBGRSwgMHgwMEZFLCAweDAzMDEsIDB4MDExMSwgMHgwMTExLCAweDAyRjYsIDB4MDEyNiwgMHgwMTI2LCAweDAyOUQsDQotICAgIDB4MDEyNywgMHgwMTI3LCAweDAyRjgsIDB4MDEzMSwgMHgwMTMxLCAweDAyRjksIDB4MDEzMiwgMHgwMTMyLCAweDAyOUUsDQotICAgIDB4MDEzMywgMHgwMTMzLCAweDAyRkEsIDB4MDEzOCwgMHgwMTM4LCAweDAyRkIsIDB4MDEzRiwgMHgwMTNGLCAweDAyOUYsDQotICAgIDB4MDE0MCwgMHgwMTQwLCAweDAyRkMsIDB4MDE0MSwgMHgwMTQxLCAweDAyQTAsIDB4MDE0MiwgMHgwMTQyLCAweDAyRkQsDQotICAgIDB4MDE0OSwgMHgwMTQ5LCAweDAzMDQsIDB4MDE0QSwgMHgwMTRBLCAweDAyQTYsIDB4MDE0QiwgMHgwMTRCLCAweDAzMDMsDQotICAgIDB4MDE1MiwgMHgwMTUyLCAweDAyQTIsIDB4MDE1MywgMHgwMTUzLCAweDAyRkYsIDB4MDE2NiwgMHgwMTY2LCAweDAyQTUsDQotICAgIDB4MDE2NywgMHgwMTY3LCAweDAzMDIsIDB4MDJCQywgMHgwMkJDLCAweDIwNTMsIDB4MDJDNywgMHgwMkM3LCAweDAwQzksDQotICAgIDB4MDJEOCwgMHgwMkQ4LCAweDAwQ0EsIDB4MDJEOSwgMHgwMkQ5LCAweDAwQ0QsIDB4MDJEQSwgMHgwMkRBLCAweDAwQ0MsDQotICAgIDB4MDJEQiwgMHgwMkRCLCAweDAwQ0YsIDB4MDJEQywgMHgwMkRDLCAweDAwQzgsIDB4MDJERCwgMHgwMkRELCAweDAwQ0IsDQotICAgIDB4MDM5MSwgMHgwM0ExLCAweDAxRDcsIDB4MDNBMywgMHgwM0E5LCAweDAxRTgsIDB4MDNCMSwgMHgwM0MxLCAweDAxRUYsDQotICAgIDB4MDNDMywgMHgwM0M5LCAweDAyMDAsIDB4MDQwMSwgMHgwNDAxLCAweDA0MDIsIDB4MDQxMCwgMHgwNDE1LCAweDAzRkMsDQotICAgIDB4MDQxNiwgMHgwNDM1LCAweDA0MDMsIDB4MDQzNiwgMHgwNDRGLCAweDA0MjQsIDB4MDQ1MSwgMHgwNDUxLCAweDA0MjMsDQotICAgIDB4MjAxMywgMHgyMDE0LCAweDAwNkQsIDB4MjAxNiwgMHgyMDE2LCAweDAwNkYsIDB4MjAxOCwgMHgyMDE5LCAweDAwNzIsDQotICAgIDB4MjAxQiwgMHgyMDFCLCAweDIwMkUsIDB4MjAxQywgMHgyMDFELCAweDAwNzQsIDB4MjAxRiwgMHgyMDFGLCAweDIwMkQsDQotICAgIDB4MjAyMCwgMHgyMDIxLCAweDAwRjUsIDB4MjAyMiwgMHgyMDIyLCAweDIxOUYsIDB4MjAyNSwgMHgyMDI2LCAweDAwNjksDQotICAgIDB4MjAzMCwgMHgyMDMwLCAweDAwRDgsIDB4MjAzMiwgMHgyMDMzLCAweDAwOEIsIDB4MjAzNCwgMHgyMDM0LCAweDIxODYsDQotICAgIDB4MjAzNSwgMHgyMDM1LCAweDI0NkUsIDB4MjAzNiwgMHgyMDM2LCAweDI0NkMsIDB4MjAzOSwgMHgyMDNBLCAweDIxQTQsDQotICAgIDB4MjAzQiwgMHgyMDNCLCAweDAwOUMsIDB4MjAzQywgMHgyMDNDLCAweDIyM0IsIDB4MjA0MiwgMHgyMDQyLCAweDIxOTcsDQotICAgIDB4MjA3NCwgMHgyMDc0LCAweDAzNEQsIDB4MjA3QSwgMHgyMDdCLCAweDIwMkYsIDB4MjA3QywgMHgyMDdDLCAweDIwMzgsDQotICAgIDB4MjA3RCwgMHgyMDdFLCAweDIwM0EsIDB4MjA3RiwgMHgyMDdGLCAweDAzNEUsIDB4MjA4MSwgMHgyMDg0LCAweDAzNEYsDQotICAgIDB4MjEwMywgMHgyMTAzLCAweDAwOEQsIDB4MjEwOSwgMHgyMTA5LCAweDAwRDcsIDB4MjExMywgMHgyMTEzLCAweDAyNEUsDQotICAgIDB4MjExNiwgMHgyMTE2LCAweDAxMDIsIDB4MjEyMSwgMHgyMTIxLCAweDAxMDcsIDB4MjEyMiwgMHgyMTIyLCAweDAxMDQsDQotICAgIDB4MjEyNiwgMHgyMTI2LCAweDAyODMsIDB4MjEyQiwgMHgyMTJCLCAweDAwOEUsIDB4MjE1MywgMHgyMTU0LCAweDAyRUQsDQotICAgIDB4MjE1QiwgMHgyMTVFLCAweDAyRjEsIDB4MjE2MCwgMHgyMTY5LCAweDAxQ0QsIDB4MjE3MCwgMHgyMTc5LCAweDAxQzMsDQotICAgIDB4MjE5MCwgMHgyMTkxLCAweDAwQUIsIDB4MjE5MiwgMHgyMTkyLCAweDAwQUEsIDB4MjE5MywgMHgyMTk0LCAweDAwQUQsDQotICAgIDB4MjE5NSwgMHgyMTk1LCAweDAwRjcsIDB4MjE5NiwgMHgyMTk2LCAweDAwRkEsIDB4MjE5NywgMHgyMTk3LCAweDAwRjgsDQotICAgIDB4MjE5OCwgMHgyMTk4LCAweDAwRkIsIDB4MjE5OSwgMHgyMTk5LCAweDAwRjksIDB4MjFCMCwgMHgyMUIwLCAweDIyQTQsDQotICAgIDB4MjFCMSwgMHgyMUIxLCAweDIyQTEsIDB4MjFCMiwgMHgyMUIyLCAweDIyQTAsIDB4MjFCMywgMHgyMUIzLCAweDIyQTUsDQotICAgIDB4MjFCNCwgMHgyMUI0LCAweDIyQTMsIDB4MjFCQywgMHgyMUJDLCAweDIyQjQsIDB4MjFDMCwgMHgyMUMwLCAweDIyQjUsDQotICAgIDB4MjFDNCwgMHgyMUM1LCAweDIyQzAsIDB4MjFDRCwgMHgyMUNELCAweDIyNzAsIDB4MjFDRiwgMHgyMUNGLCAweDIyNkYsDQotICAgIDB4MjFEMCwgMHgyMUQwLCAweDIyNkUsIDB4MjFEMSwgMHgyMUQxLCAweDIyOTYsIDB4MjFEMiwgMHgyMUQyLCAweDAwQzMsDQotICAgIDB4MjFEMywgMHgyMUQzLCAweDIyOTcsIDB4MjFENCwgMHgyMUQ0LCAweDAwQzQsIDB4MjFFMCwgMHgyMUUwLCAweDIzRTYsDQotICAgIDB4MjFFMSwgMHgyMUUxLCAweDIzRTgsIDB4MjFFMiwgMHgyMUUyLCAweDIzRTcsIDB4MjFFMywgMHgyMUUzLCAweDIzRTksDQotICAgIDB4MjFFNiwgMHgyMUU2LCAweDIzRUUsIDB4MjFFNywgMHgyMUU3LCAweDIzRjAsIDB4MjFFOCwgMHgyMUU4LCAweDIzRUYsDQotICAgIDB4MjFFOSwgMHgyMUU5LCAweDIzRjEsIDB4MjIwMCwgMHgyMjAwLCAweDAwQzUsIDB4MjIwMiwgMHgyMjAyLCAweDAwOTcsDQotICAgIDB4MjIwMywgMHgyMjAzLCAweDAwQzYsIDB4MjIwNiwgMHgyMjA2LCAweDIyMEIsIDB4MjIwNywgMHgyMjA3LCAweDAwOTgsDQotICAgIDB4MjIwOCwgMHgyMjA4LCAweDAwQjgsIDB4MjIwOSwgMHgyMjA5LCAweDIyMkQsIDB4MjIwQiwgMHgyMjBCLCAweDAwQjksDQotICAgIDB4MjIwQywgMHgyMjBDLCAweDIyMkUsIDB4MjIwRiwgMHgyMjBGLCAweDAwRDUsIDB4MjIxMSwgMHgyMjExLCAweDAwRDQsDQotICAgIDB4MjIxMywgMHgyMjEzLCAweDIyMTYsIDB4MjIxQSwgMHgyMjFBLCAweDAwQjIsIDB4MjIxRCwgMHgyMjFELCAweDAwQjQsDQotICAgIDB4MjIxRSwgMHgyMjFFLCAweDAwODgsIDB4MjIxRiwgMHgyMjFGLCAweDIyMEQsIDB4MjIyMCwgMHgyMjIwLCAweDAwOTQsDQotICAgIDB4MjIyMiwgMHgyMjIyLCAweDIyMjIsIDB4MjIyNSwgMHgyMjI2LCAweDIyMEYsIDB4MjIyNywgMHgyMjI4LCAweDAwQzAsDQotICAgIDB4MjIyOSwgMHgyMjI5LCAweDAwQkYsIDB4MjIyQSwgMHgyMjJBLCAweDAwQkUsIDB4MjIyQiwgMHgyMjJDLCAweDAwQjYsDQotICAgIDB4MjIyRSwgMHgyMjJFLCAweDAwRDMsIDB4MjIzNCwgMHgyMjM0LCAweDAwODksIDB4MjIzNSwgMHgyMjM1LCAweDAwQjUsDQotICAgIDB4MjIzNiwgMHgyMjM2LCAweDAwRDIsIDB4MjIzNywgMHgyMjM3LCAweDIwODEsIDB4MjIzRCwgMHgyMjNELCAweDAwQjMsDQotICAgIDB4MjI0MywgMHgyMjQzLCAweDIxMzQsIDB4MjI0NSwgMHgyMjQ1LCAweDIxMzMsIDB4MjI0OCwgMHgyMjQ4LCAweDIxMzUsDQotICAgIDB4MjI1MCwgMHgyMjUwLCAweDIyMjMsIDB4MjI1MSwgMHgyMjUxLCAweDIyMTMsIDB4MjI1MiwgMHgyMjUyLCAweDAwOUEsDQotICAgIDB4MjI1MywgMHgyMjUzLCAweDIyMTIsIDB4MjI1QSwgMHgyMjVBLCAweDIyMzEsIDB4MjI2MCwgMHgyMjYwLCAweDAwODUsDQotICAgIDB4MjI2MSwgMHgyMjYxLCAweDAwOTksIDB4MjI2MiwgMHgyMjYyLCAweDIyMUUsIDB4MjI2NCwgMHgyMjY1LCAweDAwODYsDQotICAgIDB4MjI2NiwgMHgyMjY3LCAweDIyMTQsIDB4MjI2RSwgMHgyMjZGLCAweDIyMjksIDB4MjI3MCwgMHgyMjczLCAweDIxMjEsDQotICAgIDB4MjI3NiwgMHgyMjc3LCAweDIxMjksIDB4MjI3OSwgMHgyMjc5LCAweDIxMkIsIDB4MjI3QSwgMHgyMjdCLCAweDIxMUIsDQotICAgIDB4MjI4MCwgMHgyMjgxLCAweDIxMUYsIDB4MjI4MiwgMHgyMjgzLCAweDAwQkMsIDB4MjI4NCwgMHgyMjg0LCAweDIyMkMsDQotICAgIDB4MjI4NSwgMHgyMjg1LCAweDIyMkIsIDB4MjI4NiwgMHgyMjg3LCAweDAwQkEsIDB4MjI4QSwgMHgyMjhBLCAweDIxMjYsDQotICAgIDB4MjI4QiwgMHgyMjhCLCAweDIxMjgsIDB4MjI5NSwgMHgyMjk3LCAweDIyMTcsIDB4MjJBMywgMHgyMkEzLCAweDIyMjYsDQotICAgIDB4MjJBNCwgMHgyMkE0LCAweDIxMzcsIDB4MjJBNSwgMHgyMkE1LCAweDAwOTUsIDB4MjJCQiwgMHgyMkJDLCAweDIyMkYsDQotICAgIDB4MjJDRSwgMHgyMkNGLCAweDIxMUQsIDB4MjJEQSwgMHgyMkRCLCAweDIxMkMsIDB4MjJFRSwgMHgyMkVFLCAweDIwODAsDQotICAgIDB4MjJFRiwgMHgyMkVGLCAweDAwNkEsIDB4MjMwNiwgMHgyMzA2LCAweDIyMzIsIDB4MjMxMiwgMHgyMzEyLCAweDAwOTYsDQotICAgIDB4MjMxNCwgMHgyMzE0LCAweDIyMUIsIDB4MjQ2MCwgMHgyNDZFLCAweDAyREQsIDB4MjQ2RiwgMHgyNDczLCAweDIyNTcsDQotICAgIDB4MjQ3NCwgMHgyNDgyLCAweDAzM0IsIDB4MjQ4MywgMHgyNDg3LCAweDIzNTIsIDB4MjQ5QywgMHgyNEI1LCAweDAzMjEsDQotICAgIDB4MjRCNiwgMHgyNENGLCAweDIwQzQsIDB4MjREMCwgMHgyNEU5LCAweDAyQzMsIDB4MjUwMCwgMHgyNTAwLCAweDAyMDcsDQotICAgIDB4MjUwMSwgMHgyNTAxLCAweDAyMTIsIDB4MjUwMiwgMHgyNTAyLCAweDAyMDgsIDB4MjUwMywgMHgyNTAzLCAweDAyMTMsDQotICAgIDB4MjUwQywgMHgyNTBDLCAweDAyMDksIDB4MjUwRCwgMHgyNTBELCAweDAyMkUsIDB4MjUwRSwgMHgyNTBFLCAweDAyMkQsDQotICAgIDB4MjUwRiwgMHgyNTBGLCAweDAyMTQsIDB4MjUxMCwgMHgyNTEwLCAweDAyMEEsIDB4MjUxMSwgMHgyNTExLCAweDAyMjgsDQotICAgIDB4MjUxMiwgMHgyNTEyLCAweDAyMjcsIDB4MjUxMywgMHgyNTEzLCAweDAyMTUsIDB4MjUxNCwgMHgyNTE0LCAweDAyMEMsDQotICAgIDB4MjUxNSwgMHgyNTE1LCAweDAyMkMsIDB4MjUxNiwgMHgyNTE2LCAweDAyMkIsIDB4MjUxNywgMHgyNTE3LCAweDAyMTcsDQotICAgIDB4MjUxOCwgMHgyNTE4LCAweDAyMEIsIDB4MjUxOSwgMHgyNTE5LCAweDAyMkEsIDB4MjUxQSwgMHgyNTFBLCAweDAyMjksDQotICAgIDB4MjUxQiwgMHgyNTFCLCAweDAyMTYsIDB4MjUxQywgMHgyNTFDLCAweDAyMEQsIDB4MjUxRCwgMHgyNTFELCAweDAyMjIsDQotICAgIDB4MjUxRSwgMHgyNTFGLCAweDAyMkYsIDB4MjUyMCwgMHgyNTIwLCAweDAyMUQsIDB4MjUyMSwgMHgyNTIyLCAweDAyMzEsDQotICAgIDB4MjUyMywgMHgyNTIzLCAweDAyMTgsIDB4MjUyNCwgMHgyNTI0LCAweDAyMEYsIDB4MjUyNSwgMHgyNTI1LCAweDAyMjQsDQotICAgIDB4MjUyNiwgMHgyNTI3LCAweDAyMzMsIDB4MjUyOCwgMHgyNTI4LCAweDAyMUYsIDB4MjUyOSwgMHgyNTJBLCAweDAyMzUsDQotICAgIDB4MjUyQiwgMHgyNTJCLCAweDAyMUEsIDB4MjUyQywgMHgyNTJDLCAweDAyMEUsIDB4MjUyRCwgMHgyNTJFLCAweDAyMzcsDQotICAgIDB4MjUyRiwgMHgyNTJGLCAweDAyMUUsIDB4MjUzMCwgMHgyNTMwLCAweDAyMjMsIDB4MjUzMSwgMHgyNTMyLCAweDAyMzksDQotICAgIDB4MjUzMywgMHgyNTMzLCAweDAyMTksIDB4MjUzNCwgMHgyNTM0LCAweDAyMTAsIDB4MjUzNSwgMHgyNTM2LCAweDAyM0IsDQotICAgIDB4MjUzNywgMHgyNTM3LCAweDAyMjAsIDB4MjUzOCwgMHgyNTM4LCAweDAyMjUsIDB4MjUzOSwgMHgyNTNBLCAweDAyM0QsDQotICAgIDB4MjUzQiwgMHgyNTNCLCAweDAyMUIsIDB4MjUzQywgMHgyNTNDLCAweDAyMTEsIDB4MjUzRCwgMHgyNTNFLCAweDAyM0YsDQotICAgIDB4MjUzRiwgMHgyNTNGLCAweDAyMjEsIDB4MjU0MCwgMHgyNTQxLCAweDAyNDEsIDB4MjU0MiwgMHgyNTQyLCAweDAyMjYsDQotICAgIDB4MjU0MywgMHgyNTRBLCAweDAyNDMsIDB4MjU0QiwgMHgyNTRCLCAweDAyMUMsIDB4MjU5MiwgMHgyNTkyLCAweDAwRTgsDQotICAgIDB4MjVBMCwgMHgyNUEwLCAweDAwQTUsIDB4MjVBMSwgMHgyNUExLCAweDAwQTQsIDB4MjVBMywgMHgyNUEzLCAweDAwRTUsDQotICAgIDB4MjVBNCwgMHgyNUE1LCAweDAwRTksIDB4MjVBNiwgMHgyNUE2LCAweDAwRUQsIDB4MjVBNywgMHgyNUE3LCAweDAwRUMsDQotICAgIDB4MjVBOCwgMHgyNUE4LCAweDAwRUIsIDB4MjVBOSwgMHgyNUE5LCAweDAwRUUsIDB4MjVCMSwgMHgyNUIxLCAweDIyMjAsDQotICAgIDB4MjVCMiwgMHgyNUIyLCAweDAwQTcsIDB4MjVCMywgMHgyNUIzLCAweDAwQTYsIDB4MjVCNSwgMHgyNUI1LCAweDIyNEMsDQotICAgIDB4MjVCNiwgMHgyNUI2LCAweDAwREMsIDB4MjVCNywgMHgyNUI3LCAweDAwREIsIDB4MjVCOSwgMHgyNUI5LCAweDIyNEQsDQotICAgIDB4MjVCQywgMHgyNUJDLCAweDAwQTksIDB4MjVCRCwgMHgyNUJELCAweDAwQTgsIDB4MjVCRiwgMHgyNUJGLCAweDIyNEIsDQotICAgIDB4MjVDMCwgMHgyNUMwLCAweDAwREEsIDB4MjVDMSwgMHgyNUMxLCAweDAwRDksIDB4MjVDMywgMHgyNUMzLCAweDIyNEUsDQotICAgIDB4MjVDNiwgMHgyNUM2LCAweDAwQTMsIDB4MjVDNywgMHgyNUM3LCAweDAwQTIsIDB4MjVDOCwgMHgyNUM4LCAweDAwRTQsDQotICAgIDB4MjVDOSwgMHgyNUM5LCAweDAwRTMsIDB4MjVDQSwgMHgyNUNBLCAweDIyNTMsIDB4MjVDQiwgMHgyNUNCLCAweDAwOUYsDQotICAgIDB4MjVDQywgMHgyNUNDLCAweDIxQkYsIDB4MjVDRSwgMHgyNUNFLCAweDAwQTEsIDB4MjVDRiwgMHgyNUNGLCAweDAwQTAsDQotICAgIDB4MjVEMCwgMHgyNUQxLCAweDAwRTYsIDB4MjVFNiwgMHgyNUU2LCAweDIyNDcsIDB4MjVFRiwgMHgyNUVGLCAweDIxQjksDQotICAgIDB4MjYwNSwgMHgyNjA1LCAweDAwOUUsIDB4MjYwNiwgMHgyNjA2LCAweDAwOUQsIDB4MjYwRSwgMHgyNjBFLCAweDAwRjEsDQotICAgIDB4MjYwRiwgMHgyNjBGLCAweDAwRjAsIDB4MjYxQywgMHgyNjFDLCAweDAwRjIsIDB4MjYxRCwgMHgyNjFELCAweDI0MDYsDQotICAgIDB4MjYxRSwgMHgyNjFFLCAweDAwRjMsIDB4MjYxRiwgMHgyNjFGLCAweDI0MDcsIDB4MjYyRiwgMHgyNjJGLCAweDIxRDgsDQotICAgIDB4MjY0MCwgMHgyNjQwLCAweDAwOTMsIDB4MjY0MiwgMHgyNjQyLCAweDAwOTIsIDB4MjY2MCwgMHgyNjYxLCAweDAwREUsDQotICAgIDB4MjY2MywgMHgyNjYzLCAweDAwRTIsIDB4MjY2NCwgMHgyNjY0LCAweDAwREQsIDB4MjY2NSwgMHgyNjY1LCAweDAwRTAsDQotICAgIDB4MjY2NywgMHgyNjY3LCAweDAwRTEsIDB4MjY2OCwgMHgyNjY4LCAweDAwRUYsIDB4MjY2OSwgMHgyNjZBLCAweDAwRkQsDQotICAgIDB4MjY2QywgMHgyNjZDLCAweDAwRkYsIDB4MjY2RCwgMHgyNjZELCAweDAwRkMsIDB4MjY2RiwgMHgyNjZGLCAweDIxOTIsDQotICAgIDB4MjcxNiwgMHgyNzE2LCAweDIxQjcsIDB4MjcxQSwgMHgyNzFBLCAweDIxQjYsIDB4MjczRCwgMHgyNzNELCAweDIxOUMsDQotICAgIDB4Mjc1NiwgMHgyNzU2LCAweDIxQkQsIDB4Mjc3NiwgMHgyNzdGLCAweDIxRTEsIDB4Mjc4QSwgMHgyNzkzLCAweDIwOTYsDQotICAgIDB4MzAwMCwgMHgzMDAyLCAweDAwNjUsIDB4MzAwMywgMHgzMDAzLCAweDAwNkMsIDB4MzAwOCwgMHgzMDExLCAweDAwNzgsDQotICAgIDB4MzAxMiwgMHgzMDEyLCAweDIxRkMsIDB4MzAxMywgMHgzMDEzLCAweDAwQUYsIDB4MzAxNCwgMHgzMDE1LCAweDAwNzYsDQotICAgIDB4MzAxNiwgMHgzMDE5LCAweDIwMUIsIDB4MzAxRSwgMHgzMDFGLCAweDI0NkEsIDB4MzAyMCwgMHgzMDIwLCAweDIxREYsDQotICAgIDB4MzAzNiwgMHgzMDM2LCAweDIxRkQsIDB4MzA0MSwgMHgzMDkzLCAweDAzNTMsIDB4MzBBMSwgMHgzMEY2LCAweDAzQTYsDQotICAgIDB4MzBGQiwgMHgzMEZCLCAweDAwNjgsIDB4MzBGQywgMHgzMEZDLCAweDI0NzIsIDB4MzEzMSwgMHgzMTYzLCAweDAxNjYsDQotICAgIDB4MzE2NCwgMHgzMTY0LCAweDAwNjUsIDB4MzE2NSwgMHgzMThFLCAweDAxOTksIDB4MzIwMCwgMHgzMjFCLCAweDAzMDUsDQotICAgIDB4MzIxQywgMHgzMjFDLCAweDAxMDEsIDB4MzIzMSwgMHgzMjMxLCAweDIyNTQsIDB4MzIzOSwgMHgzMjM5LCAweDIyNTUsDQotICAgIDB4MzI2MCwgMHgzMjdCLCAweDAyQTcsIDB4MzI3RiwgMHgzMjdGLCAweDAxMDAsIDB4MzI4QSwgMHgzMjhGLCAweDI0NTUsDQotICAgIDB4MzI5MCwgMHgzMjkwLCAweDI0NTQsIDB4MzI5NCwgMHgzMjk0LCAweDIzNzgsIDB4MzI5RSwgMHgzMjlFLCAweDIyMzksDQotICAgIDB4MzJBNSwgMHgzMkE1LCAweDIzODgsIDB4MzM4MCwgMHgzMzg0LCAweDAyNzMsIDB4MzM4OCwgMHgzMzg5LCAweDAyNjQsDQotICAgIDB4MzM4QSwgMHgzMzhDLCAweDAyODYsIDB4MzM4RCwgMHgzMzhGLCAweDAyNjAsIDB4MzM5MCwgMHgzMzk0LCAweDAyN0UsDQotICAgIDB4MzM5NSwgMHgzMzk3LCAweDAyNEIsIDB4MzM5OCwgMHgzMzk4LCAweDAyNEYsIDB4MzM5OSwgMHgzM0EyLCAweDAyNTUsDQotICAgIDB4MzNBMywgMHgzM0E2LCAweDAyNTEsIDB4MzNBNywgMHgzM0E4LCAweDAyNjcsIDB4MzNBOSwgMHgzM0FDLCAweDAyOEYsDQotICAgIDB4MzNBRCwgMHgzM0FGLCAweDAyOEIsIDB4MzNCMCwgMHgzM0I5LCAweDAyNjksIDB4MzNCQSwgMHgzM0JGLCAweDAyNzgsDQotICAgIDB4MzNDMCwgMHgzM0MxLCAweDAyODQsIDB4MzNDMiwgMHgzM0MyLCAweDAxMDUsIDB4MzNDMywgMHgzM0MzLCAweDAyOTYsDQotICAgIDB4MzNDNCwgMHgzM0M0LCAweDAyNTAsIDB4MzNDNSwgMHgzM0M1LCAweDAyOEEsIDB4MzNDNiwgMHgzM0M2LCAweDAyOTksDQotICAgIDB4MzNDNywgMHgzM0M3LCAweDAxMDMsIDB4MzNDOCwgMHgzM0M4LCAweDAyNjYsIDB4MzNDOSwgMHgzM0M5LCAweDAyOTcsDQotICAgIDB4MzNDQSwgMHgzM0NBLCAweDAyNUYsIDB4MzNDQiwgMHgzM0NCLCAweDIyNTYsIDB4MzNDRiwgMHgzM0NGLCAweDAyNjMsDQotICAgIDB4MzNEMCwgMHgzM0QwLCAweDAyOTQsIDB4MzNEMywgMHgzM0QzLCAweDAyOTUsIDB4MzNENiwgMHgzM0Q2LCAweDAyODksDQotICAgIDB4MzNEOCwgMHgzM0Q4LCAweDAxMDYsIDB4MzNEQiwgMHgzM0RCLCAweDAyOEUsIDB4MzNEQywgMHgzM0RDLCAweDAyOTgsDQotICAgIDB4MzNERCwgMHgzM0RELCAweDAyOTMsIDB4NEUwMCwgMHg0RTAwLCAweDE5M0MsIDB4NEUwMSwgMHg0RTAxLCAweDFBMzAsDQotICAgIDB4NEUwMywgMHg0RTAzLCAweDFDQzQsIDB4NEUwNywgMHg0RTA3LCAweDEyM0UsIDB4NEUwOCwgMHg0RTA4LCAweDE5ODYsDQotICAgIDB4NEUwOSwgMHg0RTA5LCAweDE0QzgsIDB4NEUwQSwgMHg0RTBBLCAweDE0RDMsIDB4NEUwQiwgMHg0RTBCLCAweDFEQzAsDQotICAgIDB4NEUwRCwgMHg0RTBELCAweDEzRjUsIDB4NEUxMSwgMHg0RTExLCAweDFDNzgsIDB4NEUxNCwgMHg0RTE0LCAweDFCODEsDQotICAgIDB4NEUxNSwgMHg0RTE1LCAweDE0M0QsIDB4NEUxNiwgMHg0RTE2LCAweDE1NzQsIDB4NEUxOCwgMHg0RTE4LCAweDBGMzUsDQotICAgIDB4NEUxOSwgMHg0RTE5LCAweDEzQjEsIDB4NEUxRSwgMHg0RTFFLCAweDE2MzIsIDB4NEUyRCwgMHg0RTJELCAweDFCMEEsDQotICAgIDB4NEUzMiwgMHg0RTMyLCAweDBFREEsIDB4NEUzOCwgMHg0RTM4LCAweDFFQ0EsIDB4NEUzOSwgMHg0RTM5LCAweDEwNjAsDQotICAgIDB4NEUzQiwgMHg0RTNCLCAweDFBQ0MsIDB4NEU0MiwgMHg0RTQyLCAweDE3OEQsIDB4NEU0MywgMHg0RTQzLCAweDEwM0EsDQotICAgIDB4NEU0NSwgMHg0RTQ1LCAweDBGMzYsIDB4NEU0QiwgMHg0RTRCLCAweDFCMUUsIDB4NEU0RCwgMHg0RTRELCAweDE0NzksDQotICAgIDB4NEU0RSwgMHg0RTRFLCAweDFFNzgsIDB4NEU0RiwgMHg0RTRGLCAweDFEQkUsIDB4NEU1NiwgMHg0RTU2LCAweDBGMEYsDQotICAgIDB4NEU1OCwgMHg0RTU4LCAweDE2MzMsIDB4NEU1OSwgMHg0RTU5LCAweDE4RUMsIDB4NEU1RCwgMHg0RTVELCAweDBGMzcsDQotICAgIDB4NEU1RSwgMHg0RTVFLCAweDBFMUQsIDB4NEU1RiwgMHg0RTVGLCAweDE2RTYsIDB4NEU2QiwgMHg0RTZCLCAweDBEQUMsDQotICAgIDB4NEU2RCwgMHg0RTZELCAweDEwRTksIDB4NEU3MywgMHg0RTczLCAweDE4QTUsIDB4NEU3NiwgMHg0RTc2LCAweDEzRTQsDQotICAgIDB4NEU3NywgMHg0RTc3LCAweDE0QzMsIDB4NEU3RSwgMHg0RTdFLCAweDBFMTEsIDB4NEU4MiwgMHg0RTgyLCAweDExMjUsDQotICAgIDB4NEU4NiwgMHg0RTg2LCAweDExQzcsIDB4NEU4OCwgMHg0RTg4LCAweDE3MkUsIDB4NEU4QiwgMHg0RThCLCAweDE0N0EsDQotICAgIDB4NEU4QywgMHg0RThDLCAweDE5MEQsIDB4NEU4RSwgMHg0RThFLCAweDE4MzUsIDB4NEU5MCwgMHg0RTkwLCAweDE4NkMsDQotICAgIDB4NEU5MSwgMHg0RTkxLCAweDE4NUUsIDB4NEU5MiwgMHg0RTkyLCAweDFFNzksIDB4NEU5NCwgMHg0RTk0LCAweDE3QTEsDQotICAgIDB4NEU5NSwgMHg0RTk1LCAweDFBMzEsIDB4NEU5OCwgMHg0RTk4LCAweDBGREEsIDB4NEU5QiwgMHg0RTlCLCAweDE0N0IsDQotICAgIDB4NEU5RSwgMHg0RTlFLCAweDE2OEYsIDB4NEVBMSwgMHg0RUExLCAweDEyNTgsIDB4NEVBMiwgMHg0RUEyLCAweDFERjYsDQotICAgIDB4NEVBNCwgMHg0RUE0LCAweDBGMUMsIDB4NEVBNSwgMHg0RUE1LCAweDFFMDUsIDB4NEVBNiwgMHg0RUE2LCAweDE3M0IsDQotICAgIDB4NEVBOCwgMHg0RUE4LCAweDFFNUIsIDB4NEVBQiwgMHg0RUFCLCAweDFFMUUsIDB4NEVBQywgMHg0RUFDLCAweDBFNEMsDQotICAgIDB4NEVBRCwgMHg0RUFELCAweDFBMzIsIDB4NEVBRSwgMHg0RUFFLCAweDExNEIsIDB4NEVCNiwgMHg0RUI2LCAweDEwNjEsDQotICAgIDB4NEVCQSwgMHg0RUJBLCAweDE5MkIsIDB4NEVDMCwgMHg0RUMwLCAweDE2OEIsIDB4NEVDMSwgMHg0RUMxLCAweDE5MkMsDQotICAgIDB4NEVDNCwgMHg0RUM0LCAweDFDQTMsIDB4NEVDNywgMHg0RUM3LCAweDBGMzgsIDB4NEVDQSwgMHg0RUNBLCAweDBGQzYsDQotICAgIDB4NEVDQiwgMHg0RUNCLCAweDBERTgsIDB4NEVDRCwgMHg0RUNELCAweDE5NEYsIDB4NEVENCwgMHg0RUQ0LCAweDE5NTMsDQotICAgIDB4NEVENSwgMHg0RUQ1LCAweDE0N0MsIDB4NEVENiwgMHg0RUQ2LCAweDFDRDQsIDB4NEVENywgMHg0RUQ3LCAweDE5ODcsDQotICAgIDB4NEVEOCwgMHg0RUQ4LCAweDEzRjYsIDB4NEVEOSwgMHg0RUQ5LCAweDE1MkEsIDB4NEVERCwgMHg0RURELCAweDEwRUIsDQotICAgIDB4NEVERiwgMHg0RURGLCAweDFCRUMsIDB4NEVFMywgMHg0RUUzLCAweDEwOUEsIDB4NEVFNCwgMHg0RUU0LCAweDExODksDQotICAgIDB4NEVFNSwgMHg0RUU1LCAweDE5MEUsIDB4NEVGMCwgMHg0RUYwLCAweDE2QzksIDB4NEVGMiwgMHg0RUYyLCAweDFCMEIsDQotICAgIDB4NEVGNiwgMHg0RUY2LCAweDBFMTIsIDB4NEVGNywgMHg0RUY3LCAweDBERTksIDB4NEVGQiwgMHg0RUZCLCAweDE5NDUsDQotICAgIDB4NEYwMSwgMHg0RjAxLCAweDBGREUsIDB4NEYwOSwgMHg0RjA5LCAweDFERjcsIDB4NEYwQSwgMHg0RjBBLCAweDE5MEYsDQotICAgIDB4NEYwQiwgMHg0RjBCLCAweDBGRDMsIDB4NEYwRCwgMHg0RjBELCAweDE3QTIsIDB4NEYwRSwgMHg0RjBFLCAweDBGREYsDQotICAgIDB4NEYwRiwgMHg0RjBGLCAweDEzRDIsIDB4NEYxMCwgMHg0RjEwLCAweDEzOEQsIDB4NEYxMSwgMHg0RjExLCAweDFGNDUsDQotICAgIDB4NEYyRiwgMHg0RjJGLCAweDEzN0MsIDB4NEYzNCwgMHg0RjM0LCAweDEzMjksIDB4NEYzNiwgMHg0RjM2LCAweDExOEEsDQotICAgIDB4NEYzOCwgMHg0RjM4LCAweDE2NjcsIDB4NEYzQSwgMHg0RjNBLCAweDE0N0QsIDB4NEYzQywgMHg0RjNDLCAweDE0N0UsDQotICAgIDB4NEYzRCwgMHg0RjNELCAweDBENkMsIDB4NEY0MywgMHg0RjQzLCAweDE5RjMsIDB4NEY0NiwgMHg0RjQ2LCAweDEwNjIsDQotICAgIDB4NEY0NywgMHg0RjQ3LCAweDE5QkYsIDB4NEY0OCwgMHg0RjQ4LCAweDFENzgsIDB4NEY0RCwgMHg0RjRELCAweDE4OEMsDQotICAgIDB4NEY0RSwgMHg0RjRFLCAweDE5QzAsIDB4NEY0RiwgMHg0RjRGLCAweDFBQ0QsIDB4NEY1MCwgMHg0RjUwLCAweDFBQzYsDQotICAgIDB4NEY1MSwgMHg0RjUxLCAweDE4MzYsIDB4NEY1NSwgMHg0RjU1LCAweDFEQzEsIDB4NEY1OSwgMHg0RjU5LCAweDE3MkYsDQotICAgIDB4NEY1QSwgMHg0RjVBLCAweDE5M0QsIDB4NEY1QiwgMHg0RjVCLCAweDE0MzMsIDB4NEY1QywgMHg0RjVDLCAweDE5NkQsDQotICAgIDB4NEY2OSwgMHg0RjY5LCAweDFENEUsIDB4NEY2RiwgMHg0RjZGLCAweDE2RjcsIDB4NEY3MCwgMHg0RjcwLCAweDEzN0QsDQotICAgIDB4NEY3MywgMHg0RjczLCAweDBENkQsIDB4NEY3NiwgMHg0Rjc2LCAweDEwMUYsIDB4NEY3QSwgMHg0RjdBLCAweDE5RjQsDQotICAgIDB4NEY3RSwgMHg0RjdFLCAweDE5M0UsIDB4NEY3RiwgMHg0RjdGLCAweDE0N0YsIDB4NEY4MSwgMHg0RjgxLCAweDE2NjgsDQotICAgIDB4NEY4MywgMHg0RjgzLCAweDBEOTQsIDB4NEY4NCwgMHg0Rjg0LCAweDFCNjcsIDB4NEY4NiwgMHg0Rjg2LCAweDExNDQsDQotICAgIDB4NEY4OCwgMHg0Rjg4LCAweDFDQTgsIDB4NEY4QSwgMHg0RjhBLCAweDBFRkYsIDB4NEY4QiwgMHg0RjhCLCAweDExOUEsDQotICAgIDB4NEY4RCwgMHg0RjhELCAweDE2M0MsIDB4NEY4RiwgMHg0RjhGLCAweDFBQ0UsIDB4NEY5MSwgMHg0RjkxLCAweDE4QTYsDQotICAgIDB4NEY5NiwgMHg0Rjk2LCAweDExRjIsIDB4NEY5OCwgMHg0Rjk4LCAweDFCODIsIDB4NEY5QiwgMHg0RjlCLCAweDBFQ0EsDQotICAgIDB4NEY5RCwgMHg0RjlELCAweDE4RkEsIDB4NEZBRSwgMHg0RkFFLCAweDEyOUMsIDB4NEZBRiwgMHg0RkFGLCAweDFGMUUsDQotICAgIDB4NEZCNSwgMHg0RkI1LCAweDFDQzcsIDB4NEZCNiwgMHg0RkI2LCAweDExNTgsIDB4NEZCRiwgMHg0RkJGLCAweDFENUUsDQotICAgIDB4NEZDMiwgMHg0RkMyLCAweDBFNzksIDB4NEZDMywgMHg0RkMzLCAweDFDNDksIDB4NEZDNCwgMHg0RkM0LCAweDE2OTAsDQotICAgIDB4NEZDOSwgMHg0RkM5LCAweDE3QTMsIDB4NEZDQSwgMHg0RkNBLCAweDFBRjYsIDB4NEZDRSwgMHg0RkNFLCAweDFBN0UsDQotICAgIDB4NEZEMSwgMHg0RkQxLCAweDE4MUUsIDB4NEZEMywgMHg0RkQzLCAweDBFNEQsIDB4NEZENCwgMHg0RkQ0LCAweDFFMzYsDQotICAgIDB4NEZENywgMHg0RkQ3LCAweDE1QTEsIDB4NEZEQSwgMHg0RkRBLCAweDEyMDUsIDB4NEZERCwgMHg0RkRELCAweDEzQzIsDQotICAgIDB4NEZERiwgMHg0RkRGLCAweDE0ODAsIDB4NEZFMCwgMHg0RkUwLCAweDFFNEYsIDB4NEZFMSwgMHg0RkUxLCAweDE2NjksDQotICAgIDB4NEZFRSwgMHg0RkVFLCAweDE1QkYsIDB4NEZFRiwgMHg0RkVGLCAweDEzRjcsIDB4NEZGMSwgMHg0RkYxLCAweDBGMzksDQotICAgIDB4NEZGMywgMHg0RkYzLCAweDEzNkEsIDB4NEZGNSwgMHg0RkY1LCAweDFEOTgsIDB4NEZGOCwgMHg0RkY4LCAweDEzRTUsDQotICAgIDB4NEZGQSwgMHg0RkZBLCAweDE3MjUsIDB4NTAwMiwgMHg1MDAyLCAweDEzQjIsIDB4NTAwNiwgMHg1MDA2LCAweDExNEMsDQotICAgIDB4NTAwOSwgMHg1MDA5LCAweDFCQjQsIDB4NTAwQiwgMHg1MDBCLCAweDBERUEsIDB4NTAwRCwgMHg1MDBELCAweDEzNjksDQotICAgIDB4NTAxMSwgMHg1MDExLCAweDEyRTQsIDB4NTAxMiwgMHg1MDEyLCAweDEwQUQsIDB4NTAxNiwgMHg1MDE2LCAweDFFMTksDQotICAgIDB4NTAxOSwgMHg1MDE5LCAweDFGMUYsIDB4NTAxQSwgMHg1MDFBLCAweDE4RkIsIDB4NTAxQywgMHg1MDFDLCAweDFCREUsDQotICAgIDB4NTAxRSwgMHg1MDFFLCAweDBFNEUsIDB4NTAxRiwgMHg1MDFGLCAweDFCODMsIDB4NTAyMSwgMHg1MDIxLCAweDFCQjUsDQotICAgIDB4NTAyMywgMHg1MDIzLCAweDEzNEQsIDB4NTAyNCwgMHg1MDI0LCAweDFDQTksIDB4NTAyNiwgMHg1MDI2LCAweDBGODEsDQotICAgIDB4NTAyNywgMHg1MDI3LCAweDFBQjUsIDB4NTAyOCwgMHg1MDI4LCAweDBFMDEsIDB4NTAyQSwgMHg1MDJBLCAweDE3OEUsDQotICAgIDB4NTAyQiwgMHg1MDJCLCAweDExRjMsIDB4NTAyQywgMHg1MDJDLCAweDFDRTIsIDB4NTAyRCwgMHg1MDJELCAweDE3RjMsDQotICAgIDB4NTAzQiwgMHg1MDNCLCAweDE2RTcsIDB4NTA0MywgMHg1MDQzLCAweDE3MUQsIDB4NTA0NywgMHg1MDQ3LCAweDBENkUsDQotICAgIDB4NTA0OCwgMHg1MDQ4LCAweDBFMkIsIDB4NTA0OSwgMHg1MDQ5LCAweDE4OEQsIDB4NTA0RiwgMHg1MDRGLCAweDFENUYsDQotICAgIDB4NTA1NSwgMHg1MDU1LCAweDFFMDYsIDB4NTA1QSwgMHg1MDVBLCAweDFBQ0YsIDB4NTA1QywgMHg1MDVDLCAweDFBMzMsDQotICAgIDB4NTA2NSwgMHg1MDY1LCAweDBFMTMsIDB4NTA3NCwgMHg1MDc0LCAweDFDQTIsIDB4NTA3NSwgMHg1MDc1LCAweDFBMzQsDQotICAgIDB4NTA3NiwgMHg1MDc2LCAweDE4MzcsIDB4NTA3OCwgMHg1MDc4LCAweDFEMjksIDB4NTA4MCwgMHg1MDgwLCAweDBGMTAsDQotICAgIDB4NTA4NSwgMHg1MDg1LCAweDEzRjgsIDB4NTA4RCwgMHg1MDhELCAweDEzNEUsIDB4NTA5MSwgMHg1MDkxLCAweDBFMUUsDQotICAgIDB4NTA5OCwgMHg1MDk4LCAweDE0QjcsIDB4NTA5OSwgMHg1MDk5LCAweDE0M0UsIDB4NTBBQywgMHg1MEFDLCAweDFDNUUsDQotICAgIDB4NTBBRCwgMHg1MEFELCAweDE4MUYsIDB4NTBCMiwgMHg1MEIyLCAweDE3QTQsIDB4NTBCMywgMHg1MEIzLCAweDE5RjUsDQotICAgIDB4NTBCNSwgMHg1MEI1LCAweDFCQ0EsIDB4NTBCNywgMHg1MEI3LCAweDE0RDQsIDB4NTBCRSwgMHg1MEJFLCAweDBFNEYsDQotICAgIDB4NTBDNSwgMHg1MEM1LCAweDBGQjcsIDB4NTBDOSwgMHg1MEM5LCAweDFDMDksIDB4NTBDQSwgMHg1MENBLCAweDE1MkIsDQotICAgIDB4NTBDRiwgMHg1MENGLCAweDE0RDUsIDB4NTBEMSwgMHg1MEQxLCAweDBGMUQsIDB4NTBENSwgMHg1MEQ1LCAweDEzRDMsDQotICAgIDB4NTBENiwgMHg1MEQ2LCAweDFGNjMsIDB4NTBEQSwgMHg1MERBLCAweDExQzgsIDB4NTBERSwgMHg1MERFLCAweDE4OEUsDQotICAgIDB4NTBFNSwgMHg1MEU1LCAweDE3RkMsIDB4NTBFNywgMHg1MEU3LCAweDE2MzQsIDB4NTBFRCwgMHg1MEVELCAweDFCQUEsDQotICAgIDB4NTBGOSwgMHg1MEY5LCAweDBENkYsIDB4NTBGQiwgMHg1MEZCLCAweDEzOUMsIDB4NTBGRiwgMHg1MEZGLCAweDE0ODEsDQotICAgIDB4NTEwMCwgMHg1MTAwLCAweDE4RkMsIDB4NTEwMSwgMHg1MTAxLCAweDFBRjcsIDB4NTEwNCwgMHg1MTA0LCAweDE3MTgsDQotICAgIDB4NTEwNiwgMHg1MTA2LCAweDBFNTAsIDB4NTEwOSwgMHg1MTA5LCAweDBFMjEsIDB4NTExMiwgMHg1MTEyLCAweDE4QTcsDQotICAgIDB4NTExRiwgMHg1MTFGLCAweDE0RDYsIDB4NTEyMSwgMHg1MTIxLCAweDExQkYsIDB4NTEyQSwgMHg1MTJBLCAweDE4MzgsDQotICAgIDB4NTEzMiwgMHg1MTMyLCAweDE5QzEsIDB4NTEzNywgMHg1MTM3LCAweDExNTksIDB4NTEzQSwgMHg1MTNBLCAweDEwMjUsDQotICAgIDB4NTEzQywgMHg1MTNDLCAweDE3MjYsIDB4NTE0MCwgMHg1MTQwLCAweDE3QzksIDB4NTE0MSwgMHg1MTQxLCAweDE4RDcsDQotICAgIDB4NTE0MywgMHg1MTQzLCAweDE4NkYsIDB4NTE0NCwgMHg1MTQ0LCAweDFFNUMsIDB4NTE0NSwgMHg1MTQ1LCAweDFDOEEsDQotICAgIDB4NTE0NiwgMHg1MTQ2LCAweDFBN0YsIDB4NTE0NywgMHg1MTQ3LCAweDFGNEQsIDB4NTE0OCwgMHg1MTQ4LCAweDE1MkMsDQotICAgIDB4NTE0OSwgMHg1MTQ5LCAweDBGMDAsIDB4NTE0QiwgMHg1MTRCLCAweDBGQjAsIDB4NTE0QywgMHg1MTRDLCAweDFEMDcsDQotICAgIDB4NTE0RCwgMHg1MTRELCAweDEyN0YsIDB4NTE0RSwgMHg1MTRFLCAweDFEMTksIDB4NTE1MiwgMHg1MTUyLCAweDE2OTEsDQotICAgIDB4NTE1QywgMHg1MTVDLCAweDEwRkMsIDB4NTE2MiwgMHg1MTYyLCAweDBGREIsIDB4NTE2NSwgMHg1MTY1LCAweDE5NEQsDQotICAgIDB4NTE2NywgMHg1MTY3LCAweDEwM0IsIDB4NTE2OCwgMHg1MTY4LCAweDE5RjYsIDB4NTE2OSwgMHg1MTY5LCAweDExNEQsDQotICAgIDB4NTE2QSwgMHg1MTZBLCAweDE4QTgsIDB4NTE2QiwgMHg1MTZCLCAweDFENEIsIDB4NTE2QywgMHg1MTZDLCAweDBFQ0IsDQotICAgIDB4NTE2RCwgMHg1MTZELCAweDExRUYsIDB4NTE2RSwgMHg1MTZFLCAweDFFNkYsIDB4NTE3MSwgMHg1MTcxLCAweDBFQ0MsDQotICAgIDB4NTE3NSwgMHg1MTc1LCAweDEzQjMsIDB4NTE3NiwgMHg1MTc2LCAweDBGRTAsIDB4NTE3NywgMHg1MTc3LCAweDBGM0EsDQotICAgIDB4NTE3OCwgMHg1MTc4LCAweDE5RjcsIDB4NTE3QywgMHg1MTdDLCAweDBFNDYsIDB4NTE4MCwgMHg1MTgwLCAweDBGRTEsDQotICAgIDB4NTE4NiwgMHg1MTg2LCAweDE3MkQsIDB4NTE4QSwgMHg1MThBLCAweDFCRDYsIDB4NTE4RCwgMHg1MThELCAweDE5QUEsDQotICAgIDB4NTE5MiwgMHg1MTkyLCAweDEyOUQsIDB4NTE5NSwgMHg1MTk1LCAweDEyODAsIDB4NTE5NywgMHg1MTk3LCAweDE4MjAsDQotICAgIDB4NTFBMCwgMHg1MUEwLCAweDBFRUIsIDB4NTFBNSwgMHg1MUE1LCAweDEyOEMsIDB4NTFBQSwgMHg1MUFBLCAweDEyN0QsDQotICAgIDB4NTFBQywgMHg1MUFDLCAweDEwRUMsIDB4NTFCNiwgMHg1MUI2LCAweDE2RTgsIDB4NTFCNywgMHg1MUI3LCAweDExNDgsDQotICAgIDB4NTFCRCwgMHg1MUJELCAweDExN0QsIDB4NTFDNCwgMHg1MUM0LCAweDFCREEsIDB4NTFDNiwgMHg1MUM2LCAweDFBRjgsDQotICAgIDB4NTFDOSwgMHg1MUM5LCAweDExNEUsIDB4NTFDQiwgMHg1MUNCLCAweDFBODAsIDB4NTFDQywgMHg1MUNDLCAweDExRkYsDQotICAgIDB4NTFDRCwgMHg1MUNELCAweDEwRUQsIDB4NTFEQywgMHg1MURDLCAweDExRkUsIDB4NTFERCwgMHg1MURELCAweDE4RjYsDQotICAgIDB4NTFERSwgMHg1MURFLCAweDFGNjQsIDB4NTFFMSwgMHg1MUUxLCAweDEzOTEsIDB4NTFGMCwgMHg1MUYwLCAweDFFRTAsDQotICAgIDB4NTFGMSwgMHg1MUYxLCAweDBERUIsIDB4NTFGNiwgMHg1MUY2LCAweDFGNEUsIDB4NTFGOCwgMHg1MUY4LCAweDFCRkYsDQotICAgIDB4NTFGOSwgMHg1MUY5LCAweDE3RkQsIDB4NTFGQSwgMHg1MUZBLCAweDFDODcsIDB4NTFGRCwgMHg1MUZELCAweDFERTMsDQotICAgIDB4NTIwMCwgMHg1MjAwLCAweDEwQUUsIDB4NTIwMywgMHg1MjAzLCAweDE5MkQsIDB4NTIwNiwgMHg1MjA2LCAweDE0MjAsDQotICAgIDB4NTIwNywgMHg1MjA3LCAweDFBMUMsIDB4NTIwOCwgMHg1MjA4LCAweDE3OEYsIDB4NTIwQSwgMHg1MjBBLCAweDBEOTUsDQotICAgIDB4NTIwRSwgMHg1MjBFLCAweDEyRTUsIDB4NTIxMSwgMHg1MjExLCAweDFFNUQsIDB4NTIxNywgMHg1MjE3LCAweDExN0UsDQotICAgIDB4NTIxRCwgMHg1MjFELCAweDFDMkUsIDB4NTIyNCwgMHg1MjI0LCAweDFENDIsIDB4NTIyNSwgMHg1MjI1LCAweDEzQUQsDQotICAgIDB4NTIyOSwgMHg1MjI5LCAweDEyMDYsIDB4NTIyQSwgMHg1MjJBLCAweDE0QjgsIDB4NTIyRSwgMHg1MjJFLCAweDBFRkIsDQotICAgIDB4NTIzMCwgMHg1MjMwLCAweDEwQUYsIDB4NTIzNiwgMHg1MjM2LCAweDFBNjcsIDB4NTIzNywgMHg1MjM3LCAweDE1QjksDQotICAgIDB4NTIzOCwgMHg1MjM4LCAweDBGODIsIDB4NTIzOSwgMHg1MjM5LCAweDFCQTUsIDB4NTIzQSwgMHg1MjNBLCAweDE5NTQsDQotICAgIDB4NTIzQiwgMHg1MjNCLCAweDBEODksIDB4NTI0MywgMHg1MjQzLCAweDFDMjUsIDB4NTI0NywgMHg1MjQ3LCAweDFDQzAsDQotICAgIDB4NTI0QSwgMHg1MjRBLCAweDE0QjUsIDB4NTI0QiwgMHg1MjRCLCAweDBGQjEsIDB4NTI0QywgMHg1MjRDLCAweDExMkQsDQotICAgIDB4NTI0RCwgMHg1MjRELCAweDE5RjgsIDB4NTI1NCwgMHg1MjU0LCAweDFCREYsIDB4NTI1NiwgMHg1MjU2LCAweDEzRjksDQotICAgIDB4NTI1QiwgMHg1MjVCLCAweDBERDAsIDB4NTI1RCwgMHg1MjVELCAweDEzMTYsIDB4NTI2MSwgMHg1MjYxLCAweDE1NTcsDQotICAgIDB4NTI2OSwgMHg1MjY5LCAweDE5NTAsIDB4NTI2QSwgMHg1MjZBLCAweDE5RjksIDB4NTI2RiwgMHg1MjZGLCAweDEzRkEsDQotICAgIDB4NTI3MiwgMHg1MjcyLCAweDFERTEsIDB4NTI3NSwgMHg1Mjc1LCAweDFCQjYsIDB4NTI3RCwgMHg1MjdELCAweDFEOTksDQotICAgIDB4NTI3RiwgMHg1MjdGLCAweDFDMkYsIDB4NTI4MywgMHg1MjgzLCAweDFGMEMsIDB4NTI4NywgMHg1Mjg3LCAweDBGQjIsDQotICAgIDB4NTI4OCwgMHg1Mjg4LCAweDEzOUQsIDB4NTI4OSwgMHg1Mjg5LCAweDExRTEsIDB4NTI4RCwgMHg1MjhELCAweDBFMjIsDQotICAgIDB4NTI5MSwgMHg1MjkxLCAweDFBNjgsIDB4NTI5MiwgMHg1MjkyLCAweDBFMjMsIDB4NTI5QiwgMHg1MjlCLCAweDExNkEsDQotICAgIDB4NTI5RiwgMHg1MjlGLCAweDBFQ0QsIDB4NTJBMCwgMHg1MkEwLCAweDBENzAsIDB4NTJBMywgMHg1MkEzLCAweDExN0YsDQotICAgIDB4NTJBNCwgMHg1MkE0LCAweDBGQjgsIDB4NTJBOSwgMHg1MkE5LCAweDFBODEsIDB4NTJBQSwgMHg1MkFBLCAweDEwNDksDQotICAgIDB4NTJBQiwgMHg1MkFCLCAweDBFMjgsIDB4NTJCRSwgMHg1MkJFLCAweDFFMTcsIDB4NTJDMSwgMHg1MkMxLCAweDBFNTEsDQotICAgIDB4NTJDMywgMHg1MkMzLCAweDEzNDIsIDB4NTJDNSwgMHg1MkM1LCAweDFDQzEsIDB4NTJDNywgMHg1MkM3LCAweDE4MjEsDQotICAgIDB4NTJDOSwgMHg1MkM5LCAweDEyODEsIDB4NTJDRCwgMHg1MkNELCAweDBFNTIsIDB4NTJEMiwgMHg1MkQyLCAweDExRkMsDQotICAgIDB4NTJENSwgMHg1MkQ1LCAweDEwRUUsIDB4NTJENiwgMHg1MkQ2LCAweDE4NTUsIDB4NTJEOCwgMHg1MkQ4LCAweDBEQjYsDQotICAgIDB4NTJEOSwgMHg1MkQ5LCAweDEyQ0MsIDB4NTJEQiwgMHg1MkRCLCAweDFGMkIsIDB4NTJERCwgMHg1MkRELCAweDE2MzUsDQotICAgIDB4NTJERSwgMHg1MkRFLCAweDExOUYsIDB4NTJERiwgMHg1MkRGLCAweDEyOUUsIDB4NTJFMiwgMHg1MkUyLCAweDE1NzUsDQotICAgIDB4NTJFMywgMHg1MkUzLCAweDE5REIsIDB4NTJFNCwgMHg1MkU0LCAweDBGQjksIDB4NTJGMywgMHg1MkYzLCAweDFGMkMsDQotICAgIDB4NTJGNSwgMHg1MkY1LCAweDExNUEsIDB4NTJGOCwgMHg1MkY4LCAweDBGODMsIDB4NTJGQSwgMHg1MkZBLCAweDE5NkUsDQotICAgIDB4NTJGQiwgMHg1MkZCLCAweDBGQTksIDB4NTJGRSwgMHg1MkZFLCAweDBGM0IsIDB4NTJGRiwgMHg1MkZGLCAweDEyRjAsDQotICAgIDB4NTMwNSwgMHg1MzA1LCAweDFENzksIDB4NTMwOCwgMHg1MzA4LCAweDFGNEYsIDB4NTMwRCwgMHg1MzBELCAweDFEN0EsDQotICAgIDB4NTMwRiwgMHg1MzBGLCAweDFEN0IsIDB4NTMxMCwgMHg1MzEwLCAweDEzRDQsIDB4NTMxNSwgMHg1MzE1LCAweDE0M0YsDQotICAgIDB4NTMxNiwgMHg1MzE2LCAweDFFQjcsIDB4NTMxNywgMHg1MzE3LCAweDE0MUYsIDB4NTMxOSwgMHg1MzE5LCAweDE2M0QsDQotICAgIDB4NTMyMCwgMHg1MzIwLCAweDE5ODgsIDB4NTMyMSwgMHg1MzIxLCAweDBGMDEsIDB4NTMyMywgMHg1MzIzLCAweDBEQ0EsDQotICAgIDB4NTMyQSwgMHg1MzJBLCAweDE0NDAsIDB4NTMyRiwgMHg1MzJGLCAweDFFRjgsIDB4NTMzOSwgMHg1MzM5LCAweDFEQjQsDQotICAgIDB4NTMzRiwgMHg1MzNGLCAweDEwNUMsIDB4NTM0MCwgMHg1MzQwLCAweDBGM0MsIDB4NTM0MSwgMHg1MzQxLCAweDE2OEMsDQotICAgIDB4NTM0MywgMHg1MzQzLCAweDFCRUQsIDB4NTM0NCwgMHg1MzQ0LCAweDE5NEUsIDB4NTM0NywgMHg1MzQ3LCAweDE2MzYsDQotICAgIDB4NTM0OCwgMHg1MzQ4LCAweDE3QTUsIDB4NTM0OSwgMHg1MzQ5LCAweDFGM0EsIDB4NTM0QSwgMHg1MzRBLCAweDEzMkEsDQotICAgIDB4NTM0RCwgMHg1MzRELCAweDEyM0YsIDB4NTM1MSwgMHg1MzUxLCAweDE0NDEsIDB4NTM1MiwgMHg1MzUyLCAweDFBQjIsDQotICAgIDB4NTM1MywgMHg1MzUzLCAweDFDRTMsIDB4NTM1NCwgMHg1MzU0LCAweDFFNTAsIDB4NTM1NywgMHg1MzU3LCAweDEwMzEsDQotICAgIDB4NTM1QSwgMHg1MzVBLCAweDEzMTcsIDB4NTM1QywgMHg1MzVDLCAweDEzRDUsIDB4NTM1RSwgMHg1MzVFLCAweDEzQTcsDQotICAgIDB4NTM2MCwgMHg1MzYwLCAweDFBMjQsIDB4NTM2NiwgMHg1MzY2LCAweDBGMEMsIDB4NTM2OCwgMHg1MzY4LCAweDE1NEEsDQotICAgIDB4NTM2RiwgMHg1MzZGLCAweDEyQzAsIDB4NTM3MCwgMHg1MzcwLCAweDE5MkUsIDB4NTM3MSwgMHg1MzcxLCAweDE4OEYsDQotICAgIDB4NTM3NCwgMHg1Mzc0LCAweDBEOEEsIDB4NTM3NSwgMHg1Mzc1LCAweDExMjYsIDB4NTM3NywgMHg1Mzc3LCAweDBGODQsDQotICAgIDB4NTM3RCwgMHg1MzdELCAweDFCMEUsIDB4NTM3RiwgMHg1MzdGLCAweDBFNTMsIDB4NTM4NCwgMHg1Mzg0LCAweDE2REIsDQotICAgIDB4NTM5MywgMHg1MzkzLCAweDE2RDAsIDB4NTM5OCwgMHg1Mzk4LCAweDEyMDcsIDB4NTM5QSwgMHg1MzlBLCAweDFGMjAsDQotICAgIDB4NTM5RiwgMHg1MzlGLCAweDE4NzAsIDB4NTNBMCwgMHg1M0EwLCAweDFDQTQsIDB4NTNBNSwgMHg1M0E1LCAweDBGOEIsDQotICAgIDB4NTNBNiwgMHg1M0E2LCAweDFEQzIsIDB4NTNBRCwgMHg1M0FELCAweDE3NjUsIDB4NTNCQiwgMHg1M0JCLCAweDBFMDIsDQotICAgIDB4NTNDMywgMHg1M0MzLCAweDFCQUIsIDB4NTNDOCwgMHg1M0M4LCAweDE4MzksIDB4NTNDOSwgMHg1M0M5LCAweDFCODQsDQotICAgIDB4NTNDQSwgMHg1M0NBLCAweDBGRDQsIDB4NTNDQiwgMHg1M0NCLCAweDE4M0EsIDB4NTNDRCwgMHg1M0NELCAweDEzMkIsDQotICAgIDB4NTNENCwgMHg1M0Q0LCAweDE1RkMsIDB4NTNENiwgMHg1M0Q2LCAweDFDOTQsIDB4NTNENywgMHg1M0Q3LCAweDE1QzAsDQotICAgIDB4NTNEQiwgMHg1M0RCLCAweDEzMkMsIDB4NTNFMSwgMHg1M0UxLCAweDE3OTAsIDB4NTNFMiwgMHg1M0UyLCAweDFDNTMsDQotICAgIDB4NTNFMywgMHg1M0UzLCAweDBGM0QsIDB4NTNFNCwgMHg1M0U0LCAweDBFOTEsIDB4NTNFNSwgMHg1M0U1LCAweDBGM0UsDQotICAgIDB4NTNFOSwgMHg1M0U5LCAweDBFOTIsIDB4NTNFQSwgMHg1M0VBLCAweDFCMUYsIDB4NTNFQiwgMHg1M0VCLCAweDBGOUEsDQotICAgIDB4NTNFQywgMHg1M0VDLCAweDE1N0MsIDB4NTNFRCwgMHg1M0VELCAweDFENEMsIDB4NTNFRiwgMHg1M0VGLCAweDBENzEsDQotICAgIDB4NTNGMCwgMHg1M0YwLCAweDFEMDgsIDB4NTNGMSwgMHg1M0YxLCAweDFCNjgsIDB4NTNGMiwgMHg1M0YyLCAweDE0ODIsDQotICAgIDB4NTNGMywgMHg1M0YzLCAweDE4M0IsIDB4NTNGOCwgMHg1M0Y4LCAweDE0ODMsIDB4NTQwMywgMHg1NDAzLCAweDFGNTcsDQotICAgIDB4NTQwNCwgMHg1NDA0LCAweDBEOEIsIDB4NTQwOCwgMHg1NDA4LCAweDFERUYsIDB4NTQwOSwgMHg1NDA5LCAweDEwMjAsDQotICAgIDB4NTQwQSwgMHg1NDBBLCAweDE5REMsIDB4NTQwQywgMHg1NDBDLCAweDEwRUYsIDB4NTQwRCwgMHg1NDBELCAweDEyOEQsDQotICAgIDB4NTQwRSwgMHg1NDBFLCAweDFGMjEsIDB4NTQwRiwgMHg1NDBGLCAweDEyMDgsIDB4NTQxMCwgMHg1NDEwLCAweDFEMUEsDQotICAgIDB4NTQxMSwgMHg1NDExLCAweDFFMUYsIDB4NTQxQiwgMHg1NDFCLCAweDBGNzEsIDB4NTQxRCwgMHg1NDFELCAweDEyMUUsDQotICAgIDB4NTQxRiwgMHg1NDFGLCAweDE4RUQsIDB4NTQyMCwgMHg1NDIwLCAweDFENkUsIDB4NTQyNiwgMHg1NDI2LCAweDEzRkIsDQotICAgIDB4NTQyOSwgMHg1NDI5LCAweDE0MjEsIDB4NTQyQiwgMHg1NDJCLCAweDFERTQsIDB4NTQzMywgMHg1NDMzLCAweDE3QTcsDQotICAgIDB4NTQzOCwgMHg1NDM4LCAweDFGNUUsIDB4NTQzOSwgMHg1NDM5LCAweDFDOTUsIDB4NTQzQiwgMHg1NDNCLCAweDEyRTYsDQotICAgIDB4NTQzQywgMHg1NDNDLCAweDFGMjIsIDB4NTQzRSwgMHg1NDNFLCAweDE3QTYsIDB4NTQ0MiwgMHg1NDQyLCAweDExNUIsDQotICAgIDB4NTQ0OCwgMHg1NDQ4LCAweDFBMzUsIDB4NTQ0QSwgMHg1NDRBLCAweDBFOTMsIDB4NTQ1MSwgMHg1NDUxLCAweDFDRjAsDQotICAgIDB4NTQ2OCwgMHg1NDY4LCAweDFBRDMsIDB4NTQ2QSwgMHg1NDZBLCAweDFBRDIsIDB4NTQ3MSwgMHg1NDcxLCAweDBFOTQsDQotICAgIDB4NTQ3MywgMHg1NDczLCAweDEyRjMsIDB4NTQ3NSwgMHg1NDc1LCAweDBENzIsIDB4NTQ3QiwgMHg1NDdCLCAweDE2NkEsDQotICAgIDB4NTQ3QywgMHg1NDdDLCAweDFFN0EsIDB4NTQ3RCwgMHg1NDdELCAweDEyOEUsIDB4NTQ4MCwgMHg1NDgwLCAweDE5QzIsDQotICAgIDB4NTQ4NiwgMHg1NDg2LCAweDFEN0MsIDB4NTQ4QywgMHg1NDhDLCAweDFFQjgsIDB4NTQ4RSwgMHg1NDhFLCAweDBGM0YsDQotICAgIDB4NTQ5MCwgMHg1NDkwLCAweDEzRkMsIDB4NTRBNCwgMHg1NEE0LCAweDFDRDUsIDB4NTRBOCwgMHg1NEE4LCAweDE5NTUsDQotICAgIDB4NTRBQiwgMHg1NEFCLCAweDFCMjAsIDB4NTRBQywgMHg1NEFDLCAweDBGMUUsIDB4NTRCMywgMHg1NEIzLCAweDFFMDcsDQotICAgIDB4NTRCOCwgMHg1NEI4LCAweDFERTUsIDB4NTRCRCwgMHg1NEJELCAweDE5MkYsIDB4NTRDMCwgMHg1NEMwLCAweDE2RDEsDQotICAgIDB4NTRDMSwgMHg1NEMxLCAweDFEQTYsIDB4NTRDNCwgMHg1NEM0LCAweDFFQUQsIDB4NTRDOCwgMHg1NEM4LCAweDFERjAsDQotICAgIDB4NTRDOSwgMHg1NEM5LCAweDE5QUIsIDB4NTRFMSwgMHg1NEUxLCAweDE4NzEsIDB4NTRFNSwgMHg1NEU1LCAweDBENzMsDQotICAgIDB4NTRFOCwgMHg1NEU4LCAweDFDMzAsIDB4NTRFRCwgMHg1NEVELCAweDBFQjcsIDB4NTRFRSwgMHg1NEVFLCAweDFGMTEsDQotICAgIDB4NTRGMiwgMHg1NEYyLCAweDFDMDAsIDB4NTRGQSwgMHg1NEZBLCAweDFEN0QsIDB4NTUwNCwgMHg1NTA0LCAweDFENEYsDQotICAgIDB4NTUwNiwgMHg1NTA2LCAweDE0ODQsIDB4NTUwNywgMHg1NTA3LCAweDFCNDQsIDB4NTUwRSwgMHg1NTBFLCAweDEyMDksDQotICAgIDB4NTUxMCwgMHg1NTEwLCAweDEwOEYsIDB4NTUxQywgMHg1NTFDLCAweDEyNTEsIDB4NTUyRiwgMHg1NTJGLCAweDE4QTksDQotICAgIDB4NTUzMSwgMHg1NTMxLCAweDFCQjcsIDB4NTUzNSwgMHg1NTM1LCAweDE2QkQsIDB4NTUzRSwgMHg1NTNFLCAweDFDRDYsDQotICAgIDB4NTU0NCwgMHg1NTQ0LCAweDFDRTQsIDB4NTU0NiwgMHg1NTQ2LCAweDE0RDcsIDB4NTU0RiwgMHg1NTRGLCAweDEyRTcsDQotICAgIDB4NTU1MywgMHg1NTUzLCAweDBFN0EsIDB4NTU1NiwgMHg1NTU2LCAweDEwNzksIDB4NTU1RSwgMHg1NTVFLCAweDE2OTIsDQotICAgIDB4NTU2MywgMHg1NTYzLCAweDFERTYsIDB4NTU3QywgMHg1NTdDLCAweDFBNjksIDB4NTU4MCwgMHg1NTgwLCAweDBERkIsDQotICAgIDB4NTU4NCwgMHg1NTg0LCAweDE1MkQsIDB4NTU4NiwgMHg1NTg2LCAweDFDMDEsIDB4NTU4NywgMHg1NTg3LCAweDExMTYsDQotICAgIDB4NTU4OSwgMHg1NTg5LCAweDFGMjMsIDB4NTU4QSwgMHg1NThBLCAweDFERTcsIDB4NTU5OCwgMHg1NTk4LCAweDFCRUUsDQotICAgIDB4NTU5OSwgMHg1NTk5LCAweDFGM0IsIDB4NTU5QSwgMHg1NTlBLCAweDFFQ0IsIDB4NTU5QywgMHg1NTlDLCAweDFGNjUsDQotICAgIDB4NTU5RCwgMHg1NTlELCAweDBEQUQsIDB4NTVBNywgMHg1NUE3LCAweDFGMzYsIDB4NTVBOSwgMHg1NUE5LCAweDE4QUEsDQotICAgIDB4NTVBQSwgMHg1NUFBLCAweDE0RDgsIDB4NTVBQiwgMHg1NUFCLCAweDEwMjQsIDB4NTVBQywgMHg1NUFDLCAweDBGMUYsDQotICAgIDB4NTVBRSwgMHg1NUFFLCAweDEwNjMsIDB4NTVDNSwgMHg1NUM1LCAweDFGMjQsIDB4NTVDNywgMHg1NUM3LCAweDE0RjUsDQotICAgIDB4NTVENCwgMHg1NUQ0LCAweDFCNDUsIDB4NTVEQSwgMHg1NURBLCAweDE3QTgsIDB4NTVEQywgMHg1NURDLCAweDBGRTIsDQotICAgIDB4NTVERiwgMHg1NURGLCAweDFCODUsIDB4NTVFMywgMHg1NUUzLCAweDE0ODUsIDB4NTVFNCwgMHg1NUU0LCAweDFDQUEsDQotICAgIDB4NTVGRCwgMHg1NUZELCAweDE1QzEsIDB4NTVGRSwgMHg1NUZFLCAweDFBRDQsIDB4NTYwNiwgMHg1NjA2LCAweDFDRjEsDQotICAgIDB4NTYwOSwgMHg1NjA5LCAweDBENzQsIDB4NTYxNCwgMHg1NjE0LCAweDBGNDAsIDB4NTYxNywgMHg1NjE3LCAweDE0RDksDQotICAgIDB4NTYyRiwgMHg1NjJGLCAweDE1N0QsIDB4NTYzMiwgMHg1NjMyLCAweDFBODIsIDB4NTYzNCwgMHg1NjM0LCAweDFDOTYsDQotICAgIDB4NTYzNiwgMHg1NjM2LCAweDE2M0UsIDB4NTY1MywgMHg1NjUzLCAweDFFMjcsIDB4NTY2OCwgMHg1NjY4LCAweDBGRTMsDQotICAgIDB4NTY2QiwgMHg1NjZCLCAweDFGNjYsIDB4NTY3NCwgMHg1Njc0LCAweDE0MjIsIDB4NTY4NiwgMHg1Njg2LCAweDFGMTIsDQotICAgIDB4NTZBNSwgMHg1NkE1LCAweDE3NDQsIDB4NTZBQywgMHg1NkFDLCAweDE0NjcsIDB4NTZBRSwgMHg1NkFFLCAweDFFMjAsDQotICAgIDB4NTZCNCwgMHg1NkI0LCAweDE3MjcsIDB4NTZCQywgMHg1NkJDLCAweDE5NkYsIDB4NTZDQSwgMHg1NkNBLCAweDEwMzgsDQotICAgIDB4NTZDRCwgMHg1NkNELCAweDFGNjcsIDB4NTZEMSwgMHg1NkQxLCAweDFDNEEsIDB4NTZEQSwgMHg1NkRBLCAweDE1QzIsDQotICAgIDB4NTZEQiwgMHg1NkRCLCAweDE0ODYsIDB4NTZERSwgMHg1NkRFLCAweDFFRjksIDB4NTZFMCwgMHg1NkUwLCAweDE5MzAsDQotICAgIDB4NTZGMCwgMHg1NkYwLCAweDBFQkUsIDB4NTZGOSwgMHg1NkY5LCAweDExOEIsIDB4NTZGQSwgMHg1NkZBLCAweDBFOTUsDQotICAgIDB4NTcwMywgMHg1NzAzLCAweDFEN0UsIDB4NTcwNCwgMHg1NzA0LCAweDE3MEUsIDB4NTcwOCwgMHg1NzA4LCAweDBGODUsDQotICAgIDB4NTcwQiwgMHg1NzBCLCAweDBGNkIsIDB4NTcwRCwgMHg1NzBELCAweDE4OTAsIDB4NTcxMiwgMHg1NzEyLCAweDE4NzMsDQotICAgIDB4NTcxMywgMHg1NzEzLCAweDE4NzIsIDB4NTcxNiwgMHg1NzE2LCAweDEwQjAsIDB4NTcxOCwgMHg1NzE4LCAweDEwNjQsDQotICAgIDB4NTcxRiwgMHg1NzFGLCAweDFEMUIsIDB4NTcyOCwgMHg1NzI4LCAweDE5QUMsIDB4NTcyRCwgMHg1NzJELCAweDBGOUIsDQotICAgIDB4NTczMCwgMHg1NzMwLCAweDFCMjEsIDB4NTczQiwgMHg1NzNCLCAweDBGRTQsIDB4NTc0MCwgMHg1NzQwLCAweDFCMjIsDQotICAgIDB4NTc0MiwgMHg1NzQyLCAweDFENDMsIDB4NTc0NywgMHg1NzQ3LCAweDBGQUEsIDB4NTc0QSwgMHg1NzRBLCAweDEzNEYsDQotICAgIDB4NTc0RCwgMHg1NzRELCAweDEwN0EsIDB4NTc0RSwgMHg1NzRFLCAweDBEQjcsIDB4NTc1MCwgMHg1NzUwLCAweDFBQzcsDQotICAgIDB4NTc1MSwgMHg1NzUxLCAweDBERkQsIDB4NTc2MSwgMHg1NzYxLCAweDFEMzIsIDB4NTc2NCwgMHg1NzY0LCAweDBFQkYsDQotICAgIDB4NTc2NiwgMHg1NzY2LCAweDFDRjIsIDB4NTc2QSwgMHg1NzZBLCAweDFENjksIDB4NTc2RSwgMHg1NzZFLCAweDEwOUMsDQotICAgIDB4NTc3MCwgMHg1NzcwLCAweDBFNTQsIDB4NTc3NSwgMHg1Nzc1LCAweDBGNDEsIDB4NTc3QywgMHg1NzdDLCAweDFDRTUsDQotICAgIDB4NTc4MiwgMHg1NzgyLCAweDE1QzMsIDB4NTc4OCwgMHg1Nzg4LCAweDEwOUIsIDB4NTc4QiwgMHg1NzhCLCAweDFFNUUsDQotICAgIDB4NTc5MywgMHg1NzkzLCAweDFFMDgsIDB4NTdBMCwgMHg1N0EwLCAweDE4RTUsIDB4NTdBMiwgMHg1N0EyLCAweDBGNDIsDQotICAgIDB4NTdBMywgMHg1N0EzLCAweDE4NzQsIDB4NTdDMywgMHg1N0MzLCAweDE2RDIsIDB4NTdDNywgMHg1N0M3LCAweDE4MjIsDQotICAgIDB4NTdDOCwgMHg1N0M4LCAweDFBRjksIDB4NTdDQiwgMHg1N0NCLCAweDEyNjQsIDB4NTdDRSwgMHg1N0NFLCAweDE1NjIsDQotICAgIDB4NTdERiwgMHg1N0RGLCAweDE3M0MsIDB4NTdFMCwgMHg1N0UwLCAweDEzRkQsIDB4NTdGMCwgMHg1N0YwLCAweDFCQ0IsDQotICAgIDB4NTdGNCwgMHg1N0Y0LCAweDE2NTgsIDB4NTdGNywgMHg1N0Y3LCAweDFCNzgsIDB4NTdGOSwgMHg1N0Y5LCAweDEzNkIsDQotICAgIDB4NTdGQSwgMHg1N0ZBLCAweDBGRTUsIDB4NTdGQywgMHg1N0ZDLCAweDBGRTYsIDB4NTgwMCwgMHg1ODAwLCAweDBGNzcsDQotICAgIDB4NTgwMiwgMHg1ODAyLCAweDEwOTAsIDB4NTgwNSwgMHg1ODA1LCAweDBFMzUsIDB4NTgwNiwgMHg1ODA2LCAweDFEMjMsDQotICAgIDB4NTgwOCwgMHg1ODA4LCAweDBERDEsIDB4NTgwOSwgMHg1ODA5LCAweDE4RDMsIDB4NTgwQSwgMHg1ODBBLCAweDE2QTEsDQotICAgIDB4NTgxRSwgMHg1ODFFLCAweDFDMTMsIDB4NTgyMSwgMHg1ODIxLCAweDEzQzMsIDB4NTgyNCwgMHg1ODI0LCAweDFBNkEsDQotICAgIDB4NTgyNywgMHg1ODI3LCAweDE3NDUsIDB4NTgyQSwgMHg1ODJBLCAweDBEQjgsIDB4NTgyRiwgMHg1ODJGLCAweDE3RkUsDQotICAgIDB4NTgzMCwgMHg1ODMwLCAweDE3MUUsIDB4NTgzMSwgMHg1ODMxLCAweDEzQzQsIDB4NTgzNCwgMHg1ODM0LCAweDE5ODksDQotICAgIDB4NTgzNSwgMHg1ODM1LCAweDEwQjEsIDB4NTgzQSwgMHg1ODNBLCAweDBFN0IsIDB4NTg0QSwgMHg1ODRBLCAweDBGMTEsDQotICAgIDB4NTg0QiwgMHg1ODRCLCAweDE3NzIsIDB4NTg0RiwgMHg1ODRGLCAweDBERUMsIDB4NTg1MSwgMHg1ODUxLCAweDE1N0UsDQotICAgIDB4NTg1NCwgMHg1ODU0LCAweDFEMDAsIDB4NTg1NywgMHg1ODU3LCAweDEwQjIsIDB4NTg1OCwgMHg1ODU4LCAweDEwOTEsDQotICAgIDB4NTg1QSwgMHg1ODVBLCAweDFDNTQsIDB4NTg1RSwgMHg1ODVFLCAweDE0RjIsIDB4NTg2MSwgMHg1ODYxLCAweDE5RkEsDQotICAgIDB4NTg2MiwgMHg1ODYyLCAweDE3QTksIDB4NTg2NCwgMHg1ODY0LCAweDFGMkQsIDB4NTg3NSwgMHg1ODc1LCAweDFCNDYsDQotICAgIDB4NTg3OSwgMHg1ODc5LCAweDFCQUMsIDB4NTg3QywgMHg1ODdDLCAweDE5RkIsIDB4NTg3RSwgMHg1ODdFLCAweDE1RkQsDQotICAgIDB4NTg4MywgMHg1ODgzLCAweDBFNTUsIDB4NTg4NSwgMHg1ODg1LCAweDE0RkQsIDB4NTg4OSwgMHg1ODg5LCAweDE4MjMsDQotICAgIDB4NTg5MywgMHg1ODkzLCAweDEyQzEsIDB4NTg5QywgMHg1ODlDLCAweDFDNjEsIDB4NTg5RSwgMHg1ODlFLCAweDFCMTMsDQotICAgIDB4NTg5RiwgMHg1ODlGLCAweDFFMjgsIDB4NThBOCwgMHg1OEE4LCAweDEyRTIsIDB4NThBOSwgMHg1OEE5LCAweDEwREYsDQotICAgIDB4NThBRSwgMHg1OEFFLCAweDFDRDcsIDB4NThCMywgMHg1OEIzLCAweDE0MjMsIDB4NThCQSwgMHg1OEJBLCAweDE3QUEsDQotICAgIDB4NThCQiwgMHg1OEJCLCAweDE5OEEsIDB4NThCRSwgMHg1OEJFLCAweDBEOTYsIDB4NThDMSwgMHg1OEMxLCAweDEzOUUsDQotICAgIDB4NThDNSwgMHg1OEM1LCAweDE3Q0EsIDB4NThDNywgMHg1OEM3LCAweDEwNjUsIDB4NThDRSwgMHg1OENFLCAweDFGMkUsDQotICAgIDB4NThEMSwgMHg1OEQxLCAweDFEQ0UsIDB4NThEMywgMHg1OEQzLCAweDE2QzUsIDB4NThENSwgMHg1OEQ1LCAweDFFN0IsDQotICAgIDB4NThEOCwgMHg1OEQ4LCAweDExRDQsIDB4NThEOSwgMHg1OEQ5LCAweDBGMDIsIDB4NThERSwgMHg1OERFLCAweDBGMTIsDQotICAgIDB4NThERiwgMHg1OERGLCAweDExQjgsIDB4NThFNCwgMHg1OEU0LCAweDE2RjgsIDB4NThFQiwgMHg1OEVCLCAweDE0ODcsDQotICAgIDB4NThFQywgMHg1OEVDLCAweDE5NDYsIDB4NThFRiwgMHg1OEVGLCAweDE5OEIsIDB4NThGOSwgMHg1OEY5LCAweDE5M0YsDQotICAgIDB4NThGQSwgMHg1OEZBLCAweDFFN0MsIDB4NThGQiwgMHg1OEZCLCAweDE0RkUsIDB4NThGRCwgMHg1OEZELCAweDE1QzQsDQotICAgIDB4NTkwRiwgMHg1OTBGLCAweDFEQzMsIDB4NTkxNCwgMHg1OTE0LCAweDBGRTcsIDB4NTkxNSwgMHg1OTE1LCAweDE1MUIsDQotICAgIDB4NTkxNiwgMHg1OTE2LCAweDE3RjcsIDB4NTkxOSwgMHg1OTE5LCAweDE1RkUsIDB4NTkxQSwgMHg1OTFBLCAweDEwNUUsDQotICAgIDB4NTkxQywgMHg1OTFDLCAweDE2RTksIDB4NTkyMiwgMHg1OTIyLCAweDEyQkQsIDB4NTkyNywgMHg1OTI3LCAweDEwOUQsDQotICAgIDB4NTkyOSwgMHg1OTI5LCAweDFCRUYsIDB4NTkyQSwgMHg1OTJBLCAweDFEMDksIDB4NTkyQiwgMHg1OTJCLCAweDEzRkUsDQotICAgIDB4NTkyRCwgMHg1OTJELCAweDE3RkYsIDB4NTkyRSwgMHg1OTJFLCAweDE2Q0EsIDB4NTkzMSwgMHg1OTMxLCAweDE2N0UsDQotICAgIDB4NTkzNywgMHg1OTM3LCAweDE5MTAsIDB4NTkzRSwgMHg1OTNFLCAweDFFNTEsIDB4NTk0NCwgMHg1OTQ0LCAweDE3MjgsDQotICAgIDB4NTk0NywgMHg1OTQ3LCAweDBGRTgsIDB4NTk0OCwgMHg1OTQ4LCAweDEwM0MsIDB4NTk0OSwgMHg1OTQ5LCAweDEzRTYsDQotICAgIDB4NTk0RSwgMHg1OTRFLCAweDBGOUMsIDB4NTk0RiwgMHg1OTRGLCAweDFBRDUsIDB4NTk1MCwgMHg1OTUwLCAweDFFQ0MsDQotICAgIDB4NTk1MSwgMHg1OTUxLCAweDBFN0MsIDB4NTk1NCwgMHg1OTU0LCAweDE0MjQsIDB4NTk1NSwgMHg1OTU1LCAweDFFMzIsDQotICAgIDB4NTk1NywgMHg1OTU3LCAweDFEMkEsIDB4NTk1QSwgMHg1OTVBLCAweDFFMDksIDB4NTk2MCwgMHg1OTYwLCAweDE5RkMsDQotICAgIDB4NTk2MiwgMHg1OTYyLCAweDE0ODgsIDB4NTk2NywgMHg1OTY3LCAweDE3QUIsIDB4NTk2QSwgMHg1OTZBLCAweDFDRkEsDQotICAgIDB4NTk2QiwgMHg1OTZCLCAweDE4RDgsIDB4NTk2QywgMHg1OTZDLCAweDE5OEMsIDB4NTk2RCwgMHg1OTZELCAweDE1MUMsDQotICAgIDB4NTk2RSwgMHg1OTZFLCAweDE0MjUsIDB4NTk3MywgMHg1OTczLCAweDEwM0YsIDB4NTk3NCwgMHg1OTc0LCAweDEwNEEsDQotICAgIDB4NTk3OCwgMHg1OTc4LCAweDBEOTcsIDB4NTk3RCwgMHg1OTdELCAweDFFN0QsIDB4NTk4MiwgMHg1OTgyLCAweDE3MzAsDQotICAgIDB4NTk4MywgMHg1OTgzLCAweDE0NDIsIDB4NTk4NCwgMHg1OTg0LCAweDEyNTksIDB4NTk4QSwgMHg1OThBLCAweDE5NDcsDQotICAgIDB4NTk5MywgMHg1OTkzLCAweDBGRTksIDB4NTk5NiwgMHg1OTk2LCAweDE4MDAsIDB4NTk5NywgMHg1OTk3LCAweDBGQzcsDQotICAgIDB4NTk5OSwgMHg1OTk5LCAweDEyQzIsIDB4NTlBNSwgMHg1OUE1LCAweDFDRDgsIDB4NTlBOCwgMHg1OUE4LCAweDEzNTAsDQotICAgIDB4NTlBQywgMHg1OUFDLCAweDFEMkIsIDB4NTlCOSwgMHg1OUI5LCAweDEyNjUsIDB4NTlCQiwgMHg1OUJCLCAweDFCREIsDQotICAgIDB4NTlCRSwgMHg1OUJFLCAweDFDMTQsIDB4NTlDMywgMHg1OUMzLCAweDFBMzYsIDB4NTlDNiwgMHg1OUM2LCAweDEyOUYsDQotICAgIDB4NTlDOSwgMHg1OUM5LCAweDE5NTYsIDB4NTlDQiwgMHg1OUNCLCAweDE2M0YsIDB4NTlEMCwgMHg1OUQwLCAweDE5QzMsDQotICAgIDB4NTlEMSwgMHg1OUQxLCAweDBFOTYsIDB4NTlEMywgMHg1OUQzLCAweDE1NjMsIDB4NTlENCwgMHg1OUQ0LCAweDE4OTEsDQotICAgIDB4NTlEOSwgMHg1OUQ5LCAweDE5NDgsIDB4NTlEQSwgMHg1OURBLCAweDE4MDEsIDB4NTlEQywgMHg1OURDLCAweDBERDIsDQotICAgIDB4NTlERCwgMHg1OURELCAweDFBRDAsIDB4NTlFNiwgMHg1OUU2LCAweDBEOTgsIDB4NTlFOCwgMHg1OUU4LCAweDE5MTEsDQotICAgIDB4NTlFQSwgMHg1OUVBLCAweDFCNjksIDB4NTlFQywgMHg1OUVDLCAweDFGNjgsIDB4NTlFRSwgMHg1OUVFLCAweDFERjgsDQotICAgIDB4NTlGOCwgMHg1OUY4LCAweDE3NDYsIDB4NTlGQiwgMHg1OUZCLCAweDE5MzEsIDB4NTlGRiwgMHg1OUZGLCAweDE5NTcsDQotICAgIDB4NUEwMSwgMHg1QTAxLCAweDE4OTIsIDB4NUEwMywgMHg1QTAzLCAweDE3RjQsIDB4NUExMSwgMHg1QTExLCAweDE0ODksDQotICAgIDB4NUExOCwgMHg1QTE4LCAweDEwMzksIDB4NUExQiwgMHg1QTFCLCAweDE3QUMsIDB4NUExQywgMHg1QTFDLCAweDEwMjYsDQotICAgIDB4NUExRiwgMHg1QTFGLCAweDE3NDcsIDB4NUEyMCwgMHg1QTIwLCAweDE2NkIsIDB4NUEyNSwgMHg1QTI1LCAweDE2OTMsDQotICAgIDB4NUEyOSwgMHg1QTI5LCAweDEyNDAsIDB4NUEzNiwgMHg1QTM2LCAweDFDOTcsIDB4NUEzQywgMHg1QTNDLCAweDFCQjgsDQotICAgIDB4NUE0MSwgMHg1QTQxLCAweDExRDUsIDB4NUE0NiwgMHg1QTQ2LCAweDFEMzMsIDB4NUE0OSwgMHg1QTQ5LCAweDE3REIsDQotICAgIDB4NUE1QSwgMHg1QTVBLCAweDFFQTQsIDB4NUE2MiwgMHg1QTYyLCAweDE0NDMsIDB4NUE2NiwgMHg1QTY2LCAweDEzRkYsDQotICAgIDB4NUE5MiwgMHg1QTkyLCAweDEyNjYsIDB4NUE5QSwgMHg1QTlBLCAweDEyRjQsIDB4NUE5QiwgMHg1QTlCLCAweDE4NzUsDQotICAgIDB4NUFBNCwgMHg1QUE0LCAweDE2NDAsIDB4NUFDMSwgMHg1QUMxLCAweDBENzUsIDB4NUFDMiwgMHg1QUMyLCAweDE1QzUsDQotICAgIDB4NUFDNCwgMHg1QUM0LCAweDE4NzYsIDB4NUFDOSwgMHg1QUM5LCAweDFCNkEsIDB4NUFDQywgMHg1QUNDLCAweDFFNEUsDQotICAgIDB4NUFFMSwgMHg1QUUxLCAweDE5REQsIDB4NUFFNiwgMHg1QUU2LCAweDFERjksIDB4NUFFOSwgMHg1QUU5LCAweDEwNTUsDQotICAgIDB4NUIwNSwgMHg1QjA1LCAweDFFQjksIDB4NUIwOSwgMHg1QjA5LCAweDFGNjksIDB4NUIwQiwgMHg1QjBCLCAweDE1MkUsDQotICAgIDB4NUIwQywgMHg1QjBDLCAweDBGMjAsIDB4NUIxNiwgMHg1QjE2LCAweDFENkYsIDB4NUIyQSwgMHg1QjJBLCAweDE0NjgsDQotICAgIDB4NUI0MCwgMHg1QjQwLCAweDE0REEsIDB4NUI0MywgMHg1QjQzLCAweDE2RjksIDB4NUI1MCwgMHg1QjUwLCAweDE5NTgsDQotICAgIDB4NUI1MSwgMHg1QjUxLCAweDFFNEEsIDB4NUI1NCwgMHg1QjU0LCAweDBFQ0UsIDB4NUI1NSwgMHg1QjU1LCAweDE5NTEsDQotICAgIDB4NUI1NywgMHg1QjU3LCAweDE5NTksIDB4NUI1OCwgMHg1QjU4LCAweDFBQjAsIDB4NUI1QSwgMHg1QjVBLCAweDE0MDAsDQotICAgIDB4NUI1QywgMHg1QjVDLCAweDE5NUEsIDB4NUI1RCwgMHg1QjVELCAweDFGMTMsIDB4NUI1RiwgMHg1QjVGLCAweDEyNzcsDQotICAgIDB4NUI2MywgMHg1QjYzLCAweDBFN0QsIDB4NUI2NCwgMHg1QjY0LCAweDBFOTcsIDB4NUI2OSwgMHg1QjY5LCAweDFFMEEsDQotICAgIDB4NUI2QiwgMHg1QjZCLCAweDE1QUEsIDB4NUI3MCwgMHg1QjcwLCAweDE1RkYsIDB4NUI3MSwgMHg1QjcxLCAweDE5N0EsDQotICAgIDB4NUI3NSwgMHg1Qjc1LCAweDE0MDEsIDB4NUI3OCwgMHg1Qjc4LCAweDFEQ0YsIDB4NUI3QSwgMHg1QjdBLCAweDE4QUIsDQotICAgIDB4NUI3QywgMHg1QjdDLCAweDE3MjMsIDB4NUI4NSwgMHg1Qjg1LCAweDEwQUEsIDB4NUI4NywgMHg1Qjg3LCAweDE4M0MsDQotICAgIDB4NUI4OCwgMHg1Qjg4LCAweDE1QzYsIDB4NUI4OSwgMHg1Qjg5LCAweDE2QUYsIDB4NUI4QiwgMHg1QjhCLCAweDE1QjEsDQotICAgIDB4NUI4QywgMHg1QjhDLCAweDE3REMsIDB4NUI4RiwgMHg1QjhGLCAweDBGMTgsIDB4NUI5MywgMHg1QjkzLCAweDEzRDYsDQotICAgIDB4NUI5NSwgMHg1Qjk1LCAweDFEMDMsIDB4NUI5NiwgMHg1Qjk2LCAweDFGMEUsIDB4NUI5NywgMHg1Qjk3LCAweDFBQjYsDQotICAgIDB4NUI5OCwgMHg1Qjk4LCAweDBFRUMsIDB4NUI5OSwgMHg1Qjk5LCAweDFBRDYsIDB4NUI5QSwgMHg1QjlBLCAweDFBMzcsDQotICAgIDB4NUI5QiwgMHg1QjlCLCAweDE3REQsIDB4NUI5QywgMHg1QjlDLCAweDE4RkQsIDB4NUJBMiwgMHg1QkEyLCAweDBERkMsDQotICAgIDB4NUJBMywgMHg1QkEzLCAweDE1MkYsIDB4NUJBNCwgMHg1QkE0LCAweDE2N0YsIDB4NUJBNSwgMHg1QkE1LCAweDE4QUMsDQotICAgIDB4NUJBNiwgMHg1QkE2LCAweDFFQ0QsIDB4NUJBQywgMHg1QkFDLCAweDE1NjQsIDB4NUJBRSwgMHg1QkFFLCAweDBGN0IsDQotICAgIDB4NUJCMCwgMHg1QkIwLCAweDE5QUQsIDB4NUJCMywgMHg1QkIzLCAweDFFMEIsIDB4NUJCNCwgMHg1QkI0LCAweDE3NDgsDQotICAgIDB4NUJCNSwgMHg1QkI1LCAweDE1N0YsIDB4NUJCNiwgMHg1QkI2LCAweDBENzYsIDB4NUJCOCwgMHg1QkI4LCAweDE2NkMsDQotICAgIDB4NUJCOSwgMHg1QkI5LCAweDE4MjQsIDB4NUJCRiwgMHg1QkJGLCAweDE2MDAsIDB4NUJDMCwgMHg1QkMwLCAweDFCQ0MsDQotICAgIDB4NUJDMiwgMHg1QkMyLCAweDE5REUsIDB4NUJDMywgMHg1QkMzLCAweDE4NzcsIDB4NUJDNCwgMHg1QkM0LCAweDBGRUEsDQotICAgIDB4NUJDNSwgMHg1QkM1LCAweDE5MzIsIDB4NUJDNiwgMHg1QkM2LCAweDEzMTMsIDB4NUJDNywgMHg1QkM3LCAweDBGNDMsDQotICAgIDB4NUJDQywgMHg1QkNDLCAweDE0MDIsIDB4NUJEMCwgMHg1QkQwLCAweDEyNjcsIDB4NUJEMiwgMHg1QkQyLCAweDFERDMsDQotICAgIDB4NUJEMywgMHg1QkQzLCAweDE4M0QsIDB4NUJENCwgMHg1QkQ0LCAweDE2NTksIDB4NUJENywgMHg1QkQ3LCAweDEwNDgsDQotICAgIDB4NUJERSwgMHg1QkRFLCAweDEyMzgsIDB4NUJERiwgMHg1QkRGLCAweDFCQTYsIDB4NUJFMSwgMHg1QkUxLCAweDBFREIsDQotICAgIDB4NUJFMiwgMHg1QkUyLCAweDFDQzgsIDB4NUJFNCwgMHg1QkU0LCAweDE3QUQsIDB4NUJFNSwgMHg1QkU1LCAweDE4MDIsDQotICAgIDB4NUJFNiwgMHg1QkU2LCAweDE2ODAsIDB4NUJFNywgMHg1QkU3LCAweDEwNDcsIDB4NUJFOCwgMHg1QkU4LCAweDFCQ0QsDQotICAgIDB4NUJFOSwgMHg1QkU5LCAweDE2ODIsIDB4NUJFQiwgMHg1QkVCLCAweDE0OEEsIDB4NUJFQywgMHg1QkVDLCAweDBFRUQsDQotICAgIDB4NUJFRSwgMHg1QkVFLCAweDExQzksIDB4NUJFRiwgMHg1QkVGLCAweDFBRkEsIDB4NUJGNSwgMHg1QkY1LCAweDFDNTUsDQotICAgIDB4NUJGNiwgMHg1QkY2LCAweDEzQzUsIDB4NUJGOCwgMHg1QkY4LCAweDFDNEYsIDB4NUJGQSwgMHg1QkZBLCAweDE0OEIsDQotICAgIDB4NUMwMSwgMHg1QzAxLCAweDEzRTcsIDB4NUMwNCwgMHg1QzA0LCAweDE0OEMsIDB4NUMwNywgMHg1QzA3LCAweDE5OEQsDQotICAgIDB4NUMwOCwgMHg1QzA4LCAweDE5RkQsIDB4NUMwOSwgMHg1QzA5LCAweDE4OTMsIDB4NUMwQSwgMHg1QzBBLCAweDFBQjEsDQotICAgIDB4NUMwQiwgMHg1QzBCLCAweDE2ODMsIDB4NUMwRCwgMHg1QzBELCAweDEwOUUsIDB4NUMwRSwgMHg1QzBFLCAweDEwQjMsDQotICAgIDB4NUMwRiwgMHg1QzBGLCAweDE1ODAsIDB4NUMxMSwgMHg1QzExLCAweDE1ODEsIDB4NUMxNiwgMHg1QzE2LCAweDFDMEEsDQotICAgIDB4NUMxOSwgMHg1QzE5LCAweDE0REIsIDB4NUMyNCwgMHg1QzI0LCAweDE4M0UsIDB4NUMyOCwgMHg1QzI4LCAweDEzNTEsDQotICAgIDB4NUMzMSwgMHg1QzMxLCAweDFDOTgsIDB4NUMzOCwgMHg1QzM4LCAweDE2NDEsIDB4NUMzOSwgMHg1QzM5LCAweDE4RDksDQotICAgIDB4NUMzQSwgMHg1QzNBLCAweDFCRTAsIDB4NUMzQiwgMHg1QzNCLCAweDBFOTgsIDB4NUMzQywgMHg1QzNDLCAweDEwNUEsDQotICAgIDB4NUMzRSwgMHg1QzNFLCAweDEyRjUsIDB4NUMzRiwgMHg1QzNGLCAweDEwNTQsIDB4NUM0MCwgMHg1QzQwLCAweDBGNkMsDQotICAgIDB4NUM0NSwgMHg1QzQ1LCAweDBFMDMsIDB4NUM0NiwgMHg1QzQ2LCAweDBFN0UsIDB4NUM0OCwgMHg1QzQ4LCAweDBGNzgsDQotICAgIDB4NUM0QiwgMHg1QzRCLCAweDE3QkUsIDB4NUM0RCwgMHg1QzRELCAweDE2NDMsIDB4NUM0RSwgMHg1QzRFLCAweDE2NDIsDQotICAgIDB4NUM1MSwgMHg1QzUxLCAweDE1NEIsIDB4NUM1NSwgMHg1QzU1LCAweDE5RkUsIDB4NUM1QiwgMHg1QzVCLCAweDEzQjQsDQotICAgIDB4NUM2MCwgMHg1QzYwLCAweDEwQjQsIDB4NUM2MiwgMHg1QzYyLCAweDExRDYsIDB4NUM2NCwgMHg1QzY0LCAweDFDQTcsDQotICAgIDB4NUM2NSwgMHg1QzY1LCAweDEyMEEsIDB4NUM2QywgMHg1QzZDLCAweDE1QTIsIDB4NUM2RiwgMHg1QzZGLCAweDExMDYsDQotICAgIDB4NUM3MSwgMHg1QzcxLCAweDE0QjksIDB4NUM3OSwgMHg1Qzc5LCAweDFGNTgsIDB4NUM5MCwgMHg1QzkwLCAweDBGRUIsDQotICAgIDB4NUM5MSwgMHg1QzkxLCAweDE5N0YsIDB4NUNBMSwgMHg1Q0ExLCAweDBERDMsIDB4NUNBOSwgMHg1Q0E5LCAweDE2QkUsDQotICAgIDB4NUNBQiwgMHg1Q0FCLCAweDE1QzcsIDB4NUNBQywgMHg1Q0FDLCAweDBEQ0IsIDB4NUNCMSwgMHg1Q0IxLCAweDEwOUYsDQotICAgIDB4NUNCMywgMHg1Q0IzLCAweDE2QTIsIDB4NUNCNSwgMHg1Q0I1LCAweDFFN0UsIDB4NUNCNywgMHg1Q0I3LCAweDEzMDYsDQotICAgIDB4NUNCOCwgMHg1Q0I4LCAweDE2QjAsIDB4NUNCQSwgMHg1Q0JBLCAweDExOEMsIDB4NUNCRSwgMHg1Q0JFLCAweDFBMjUsDQotICAgIDB4NUNDMCwgMHg1Q0MwLCAweDE1QzgsIDB4NUNEOSwgMHg1Q0Q5LCAweDFDQUIsIDB4NUNFMCwgMHg1Q0UwLCAweDE0REMsDQotICAgIDB4NUNFOCwgMHg1Q0U4LCAweDE2OTQsIDB4NUNFRiwgMHg1Q0YwLCAweDEzRTgsIDB4NUNGNCwgMHg1Q0Y0LCAweDFFMzcsDQotICAgIDB4NUNGNiwgMHg1Q0Y2LCAweDEwQjUsIDB4NUNGQiwgMHg1Q0ZCLCAweDFBRkIsIDB4NUNGRCwgMHg1Q0ZELCAweDFFNTIsDQotICAgIDB4NUQwNywgMHg1RDA3LCAweDE2MjcsIDB4NUQwRCwgMHg1RDBELCAweDExNDUsIDB4NUQwRSwgMHg1RDBFLCAweDBGRUMsDQotICAgIDB4NUQxMSwgMHg1RDExLCAweDBFQzAsIDB4NUQxNCwgMHg1RDE0LCAweDFDNUYsIDB4NUQxNiwgMHg1RDE2LCAweDE2RDMsDQotICAgIDB4NUQxNywgMHg1RDE3LCAweDBERDQsIDB4NUQxOSwgMHg1RDE5LCAweDExRjQsIDB4NUQyNywgMHg1RDI3LCAweDE2MjgsDQotICAgIDB4NUQyOSwgMHg1RDI5LCAweDE0MzcsIDB4NUQ0QiwgMHg1RDRCLCAweDEyRjYsIDB4NUQ0QywgMHg1RDRDLCAweDBEQjksDQotICAgIDB4NUQ1MCwgMHg1RDUwLCAweDExMkYsIDB4NUQ2OSwgMHg1RDY5LCAweDE2MjksIDB4NUQ2QywgMHg1RDZDLCAweDE3RjgsDQotICAgIDB4NUQ2RiwgMHg1RDZGLCAweDFCODYsIDB4NUQ4NywgMHg1RDg3LCAweDBGNDQsIDB4NUQ4QiwgMHg1RDhCLCAweDEwQjYsDQotICAgIDB4NUQ5RCwgMHg1RDlELCAweDExMEQsIDB4NURBMCwgMHg1REEwLCAweDBGMjEsIDB4NURBMiwgMHg1REEyLCAweDE4MDMsDQotICAgIDB4NURBQSwgMHg1REFBLCAweDE3MkIsIDB4NURCOCwgMHg1REI4LCAweDE3NzMsIDB4NURCQSwgMHg1REJBLCAweDExOEQsDQotICAgIDB4NURCQywgMHg1REJDLCAweDE0RkYsIDB4NURCRCwgMHg1REJELCAweDE2QTMsIDB4NURDRCwgMHg1RENELCAweDE3RjksDQotICAgIDB4NUREMiwgMHg1REQyLCAweDEyNDEsIDB4NURENiwgMHg1REQ2LCAweDE2QkYsIDB4NURERCwgMHg1RERELCAweDFCRjAsDQotICAgIDB4NURERSwgMHg1RERFLCAweDFBRDcsIDB4NURFMSwgMHg1REUxLCAweDE2MDgsIDB4NURFMiwgMHg1REUyLCAweDE1ODIsDQotICAgIDB4NURFNSwgMHg1REU1LCAweDBFQ0YsIDB4NURFNiwgMHg1REU2LCAweDFBQzgsIDB4NURFNywgMHg1REU3LCAweDBGMjIsDQotICAgIDB4NURFOCwgMHg1REU4LCAweDBFMDQsIDB4NURFQiwgMHg1REVCLCAweDEyQ0QsIDB4NURFRSwgMHg1REVFLCAweDFCODcsDQotICAgIDB4NURGMSwgMHg1REYxLCAweDBGRUQsIDB4NURGMiwgMHg1REYyLCAweDE5MTIsIDB4NURGMywgMHg1REYzLCAweDE0OEQsDQotICAgIDB4NURGNCwgMHg1REY0LCAweDFEMzQsIDB4NURGNywgMHg1REY3LCAweDFERkEsIDB4NURGRCwgMHg1REZELCAweDE1QUIsDQotICAgIDB4NURGRSwgMHg1REZFLCAweDBFMTQsIDB4NUUwMiwgMHg1RTAyLCAweDE2NDQsIDB4NUUwMywgMHg1RTAzLCAweDFEN0YsDQotICAgIDB4NUUwNiwgMHg1RTA2LCAweDEzOTIsIDB4NUUwQywgMHg1RTBDLCAweDFGNkEsIDB4NUUxMSwgMHg1RTExLCAweDFEMDQsDQotICAgIDB4NUUxNiwgMHg1RTE2LCAweDFDMTUsIDB4NUUxOSwgMHg1RTE5LCAweDFCNkIsIDB4NUUxQiwgMHg1RTFCLCAweDEzN0UsDQotICAgIDB4NUUxRCwgMHg1RTFELCAweDFBNkIsIDB4NUUyNSwgMHg1RTI1LCAweDE1QzksIDB4NUUyQiwgMHg1RTJCLCAweDE0OEUsDQotICAgIDB4NUUyRCwgMHg1RTJELCAweDE1MUQsIDB4NUUzMywgMHg1RTMzLCAweDE5OEUsIDB4NUUzNiwgMHg1RTM2LCAweDEwQTAsDQotICAgIDB4NUUzOCwgMHg1RTM4LCAweDE0REQsIDB4NUUzRCwgMHg1RTNELCAweDEyQTAsIDB4NUUzRiwgMHg1RTNGLCAweDFGMjUsDQotICAgIDB4NUU0MCwgMHg1RTQwLCAweDFBMzgsIDB4NUU0NCwgMHg1RTQ0LCAweDE2QTQsIDB4NUU0NSwgMHg1RTQ1LCAweDFEOTMsDQotICAgIDB4NUU0NywgMHg1RTQ3LCAweDEzNTIsIDB4NUU0QywgMHg1RTRDLCAweDFFRTEsIDB4NUU1NSwgMHg1RTU1LCAweDEyMzksDQotICAgIDB4NUU1RiwgMHg1RTVGLCAweDFDQUMsIDB4NUU2MSwgMHg1RTYxLCAweDEzODQsIDB4NUU2MiwgMHg1RTYyLCAweDEwOTIsDQotICAgIDB4NUU2MywgMHg1RTYzLCAweDFENzAsIDB4NUU3MiwgMHg1RTcyLCAweDBEOTksIDB4NUU3MywgMHg1RTczLCAweDFENkEsDQotICAgIDB4NUU3NCwgMHg1RTc0LCAweDEwNDAsIDB4NUU3NywgMHg1RTc3LCAweDEzQjUsIDB4NUU3OCwgMHg1RTc4LCAweDFFMUEsDQotICAgIDB4NUU3OSwgMHg1RTc5LCAweDBEOUEsIDB4NUU3QiwgMHg1RTdCLCAweDFFQ0UsIDB4NUU3QywgMHg1RTdELCAweDE4QUQsDQotICAgIDB4NUU3RSwgMHg1RTdFLCAweDBGRUUsIDB4NUU4NCwgMHg1RTg0LCAweDE5OEYsIDB4NUU4NywgMHg1RTg3LCAweDE0NDQsDQotICAgIDB4NUU4QSwgMHg1RThBLCAweDE0REUsIDB4NUU4RiwgMHg1RThGLCAweDE1MDAsIDB4NUU5NSwgMHg1RTk1LCAweDE5QzQsDQotICAgIDB4NUU5NywgMHg1RTk3LCAweDFBMjYsIDB4NUU5QSwgMHg1RTlBLCAweDBFNTYsIDB4NUU5QywgMHg1RTlDLCAweDE0MDMsDQotICAgIDB4NUVBMCwgMHg1RUEwLCAweDE0REYsIDB4NUVBNiwgMHg1RUE2LCAweDEwQjcsIDB4NUVBNywgMHg1RUE3LCAweDFBQzksDQotICAgIDB4NUVBQiwgMHg1RUFCLCAweDBFOTksIDB4NUVBRCwgMHg1RUFELCAweDFBMzksIDB4NUVCNSwgMHg1RUI1LCAweDE2QzAsDQotICAgIDB4NUVCNiwgMHg1RUI2LCAweDE1MDEsIDB4NUVCNywgMHg1RUI3LCAweDBERDUsIDB4NUVCOCwgMHg1RUI4LCAweDE4MjUsDQotICAgIDB4NUVCRSwgMHg1RUJFLCAweDE4QUYsIDB4NUVDMiwgMHg1RUMyLCAweDE0RTAsIDB4NUVDOCwgMHg1RUM4LCAweDFEQzQsDQotICAgIDB4NUVDOSwgMHg1RUM5LCAweDExODMsIDB4NUVDQSwgMHg1RUNBLCAweDExM0MsIDB4NUVEMCwgMHg1RUQwLCAweDBGNDUsDQotICAgIDB4NUVEMywgMHg1RUQzLCAweDBFRTcsIDB4NUVENiwgMHg1RUQ2LCAweDExQ0EsIDB4NUVEQSwgMHg1RURBLCAweDFBRDgsDQotICAgIDB4NUVEQiwgMHg1RURCLCAweDE5RkYsIDB4NUVERiwgMHg1RURGLCAweDEyQzMsIDB4NUVFMCwgMHg1RUUwLCAweDFCQjksDQotICAgIDB4NUVFMiwgMHg1RUUyLCAweDFENzEsIDB4NUVFMywgMHg1RUUzLCAweDBGMDMsIDB4NUVFQywgMHg1RUVDLCAweDExNUMsDQotICAgIDB4NUVGMywgMHg1RUYzLCAweDFDMUQsIDB4NUVGNiwgMHg1RUY2LCAweDE3NDksIDB4NUVGNywgMHg1RUY3LCAweDFBM0EsDQotICAgIDB4NUVGQSwgMHg1RUZBLCAweDBFMTUsIDB4NUVGQiwgMHg1RUZCLCAweDFFRkEsIDB4NUYwMSwgMHg1RjAxLCAweDEzQTgsDQotICAgIDB4NUYwNCwgMHg1RjA0LCAweDExQjksIDB4NUYwQSwgMHg1RjBBLCAweDFENzIsIDB4NUYwRiwgMHg1RjBGLCAweDE2NUEsDQotICAgIDB4NUYxMSwgMHg1RjExLCAweDE2NDUsIDB4NUYxMywgMHg1RjEzLCAweDBGN0MsIDB4NUYxNCwgMHg1RjE0LCAweDFBODMsDQotICAgIDB4NUYxNSwgMHg1RjE1LCAweDE5MzMsIDB4NUYxNywgMHg1RjE3LCAweDE0MzQsIDB4NUYxOCwgMHg1RjE4LCAweDFFQUUsDQotICAgIDB4NUYxQiwgMHg1RjFCLCAweDE5MTMsIDB4NUYxRiwgMHg1RjFGLCAweDFBNkMsIDB4NUYyNiwgMHg1RjI2LCAweDFFMzgsDQotICAgIDB4NUYyNywgMHg1RjI3LCAweDFFN0YsIDB4NUYyOSwgMHg1RjI5LCAweDEwNEIsIDB4NUYzMSwgMHg1RjMxLCAweDE2RjAsDQotICAgIDB4NUYzNSwgMHg1RjM1LCAweDE5OTAsIDB4NUYzQSwgMHg1RjNBLCAweDBERDYsIDB4NUYzQywgMHg1RjNDLCAweDFEQjUsDQotICAgIDB4NUY0OCwgMHg1RjQ4LCAweDFDRjMsIDB4NUY0QSwgMHg1RjRBLCAweDBERDcsIDB4NUY0QywgMHg1RjRDLCAweDEyRjcsDQotICAgIDB4NUY0RSwgMHg1RjRFLCAweDEyNDIsIDB4NUY1NiwgMHg1RjU2LCAweDEwNjYsIDB4NUY1NywgMHg1RjU3LCAweDFFNzAsDQotICAgIDB4NUY1OSwgMHg1RjU5LCAweDFGM0QsIDB4NUY1QiwgMHg1RjVCLCAweDE5MTQsIDB4NUY2MiwgMHg1RjYyLCAweDFFNUYsDQotICAgIDB4NUY2NiwgMHg1RjY2LCAweDE3MUYsIDB4NUY2NywgMHg1RjY3LCAweDE4NTYsIDB4NUY2OSwgMHg1RjY5LCAweDFCQ0UsDQotICAgIDB4NUY2QSwgMHg1RjZBLCAweDFEOUEsIDB4NUY2QiwgMHg1RjZCLCAweDFBODQsIDB4NUY2QywgMHg1RjZDLCAweDE0NjksDQotICAgIDB4NUY2RCwgMHg1RjZELCAweDFENTksIDB4NUY3MCwgMHg1RjcwLCAweDFCQkEsIDB4NUY3MSwgMHg1RjcxLCAweDE3NzQsDQotICAgIDB4NUY3NywgMHg1Rjc3LCAweDEzNTMsIDB4NUY3OSwgMHg1Rjc5LCAweDE3M0QsIDB4NUY3QywgMHg1RjdDLCAweDFEQUQsDQotICAgIDB4NUY3RiwgMHg1RjdGLCAweDE0MzUsIDB4NUY4MCwgMHg1RjgwLCAweDE3RUUsIDB4NUY4MSwgMHg1RjgxLCAweDFBM0IsDQotICAgIDB4NUY4NSwgMHg1Rjg1LCAweDEwQTEsIDB4NUY4NywgMHg1Rjg3LCAweDE2MDksIDB4NUY4QSwgMHg1RjhBLCAweDFFRkIsDQotICAgIDB4NUY4QiwgMHg1RjhCLCAweDExRjgsIDB4NUY4QywgMHg1RjhDLCAweDFGMjYsIDB4NUY5MCwgMHg1RjkwLCAweDE1MDIsDQotICAgIDB4NUY5MSwgMHg1RjkxLCAweDBFNTcsIDB4NUY5MiwgMHg1RjkyLCAweDEwQjgsIDB4NUY5NywgMHg1Rjk3LCAweDExMEMsDQotICAgIDB4NUY5OCwgMHg1Rjk4LCAweDEzNkMsIDB4NUY5OSwgMHg1Rjk5LCAweDE0OEYsIDB4NUY5RSwgMHg1RjlFLCAweDFBQjcsDQotICAgIDB4NUZBMCwgMHg1RkEwLCAweDExNDYsIDB4NUZBMSwgMHg1RkExLCAweDE3MEYsIDB4NUZBOCwgMHg1RkE4LCAweDFFRTIsDQotICAgIDB4NUZBOSwgMHg1RkE5LCAweDEzRDcsIDB4NUZBQSwgMHg1RkFBLCAweDE2MEEsIDB4NUZBRSwgMHg1RkFFLCAweDEyRjgsDQotICAgIDB4NUZCNSwgMHg1RkI1LCAweDFCN0UsIDB4NUZCNywgMHg1RkI3LCAweDEwQUIsIDB4NUZCOSwgMHg1RkI5LCAweDFDMDIsDQotICAgIDB4NUZCRCwgMHg1RkJELCAweDFGM0UsIDB4NUZDMywgMHg1RkMzLCAweDE2ODQsIDB4NUZDNSwgMHg1RkM1LCAweDFEQjYsDQotICAgIDB4NUZDQywgMHg1RkNDLCAweDBGRUYsIDB4NUZDRCwgMHg1RkNELCAweDE5MzQsIDB4NUZENiwgMHg1RkQ2LCAweDFDNTAsDQotICAgIDB4NUZENywgMHg1RkQ3LCAweDFCMjMsIDB4NUZEOCwgMHg1RkQ5LCAweDEyNUEsIDB4NUZFMCwgMHg1RkUwLCAweDFDOEIsDQotICAgIDB4NUZFQiwgMHg1RkVCLCAweDFDRDMsIDB4NUZGNSwgMHg1RkY1LCAweDEwNDMsIDB4NUZGRCwgMHg1RkZELCAweDFFQUEsDQotICAgIDB4NUZGRiwgMHg1RkZGLCAweDE0MjYsIDB4NjAwRiwgMHg2MDBGLCAweDE2Q0IsIDB4NjAxMiwgMHg2MDEyLCAweDEwNEMsDQotICAgIDB4NjAxNiwgMHg2MDE2LCAweDFEODAsIDB4NjAxQywgMHg2MDFDLCAweDExOEUsIDB4NjAxRCwgMHg2MDFELCAweDE0OTAsDQotICAgIDB4NjAyMCwgMHg2MDIwLCAweDFEMEEsIDB4NjAyMSwgMHg2MDIxLCAweDE5MTUsIDB4NjAyNSwgMHg2MDI1LCAweDBGRDUsDQotICAgIDB4NjAyNywgMHg2MDI3LCAweDE1NjUsIDB4NjAyOCwgMHg2MDI4LCAweDE4NzgsIDB4NjAyQSwgMHg2MDJBLCAweDBGMTMsDQotICAgIDB4NjAyRiwgMHg2MDJGLCAweDBFMjksIDB4NjA0MSwgMHg2MDQxLCAweDE5NDksIDB4NjA0MiwgMHg2MDQyLCAweDE2MEIsDQotICAgIDB4NjA0MywgMHg2MDQzLCAweDE2NDYsIDB4NjA0RCwgMHg2MDRELCAweDFFRTMsIDB4NjA1MCwgMHg2MDUwLCAweDBFRDAsDQotICAgIDB4NjA1MiwgMHg2MDUyLCAweDFERkIsIDB4NjA1NSwgMHg2MDU1LCAweDE1MDMsIDB4NjA1OSwgMHg2MDU5LCAweDE2RkEsDQotICAgIDB4NjA1RCwgMHg2MDVELCAweDBFRkMsIDB4NjA2MiwgMHg2MDYyLCAweDFFRkMsIDB4NjA2MywgMHg2MDYzLCAweDE5NUIsDQotICAgIDB4NjA2NCwgMHg2MDY0LCAweDFGNEEsIDB4NjA2NSwgMHg2MDY1LCAweDFDQUQsIDB4NjA2OCwgMHg2MDY4LCAweDFERDQsDQotICAgIDB4NjA2OSwgMHg2MDY5LCAweDE4RTYsIDB4NjA2QSwgMHg2MDZBLCAweDBEOEMsIDB4NjA2QywgMHg2MDZDLCAweDEwNDQsDQotICAgIDB4NjA2RCwgMHg2MDZELCAweDBFRDEsIDB4NjA2RiwgMHg2MDZGLCAweDE2NUIsIDB4NjA3MCwgMHg2MDcwLCAweDFGNUYsDQotICAgIDB4NjA4NSwgMHg2MDg1LCAweDE3NjEsIDB4NjA4OSwgMHg2MDg5LCAweDE2ODEsIDB4NjA4QywgMHg2MDhDLCAweDFBNkQsDQotICAgIDB4NjA4RCwgMHg2MDhELCAweDFERDUsIDB4NjA5NCwgMHg2MDk0LCAweDFFRkQsIDB4NjA5NiwgMHg2MDk2LCAweDFENTAsDQotICAgIDB4NjA5QSwgMHg2MDlBLCAweDE1QjIsIDB4NjA5QiwgMHg2MDlCLCAweDFBMDAsIDB4NjA5RiwgMHg2MDlGLCAweDE3QUUsDQotICAgIDB4NjBBMCwgMHg2MEEwLCAweDE4QjAsIDB4NjBBMywgMHg2MEEzLCAweDFFQ0YsIDB4NjBBNCwgMHg2MEE0LCAweDFDNTYsDQotICAgIDB4NjBBNywgMHg2MEE3LCAweDEyMEIsIDB4NjBCMCwgMHg2MEIwLCAweDFBQjgsIDB4NjBCMiwgMHg2MEIyLCAweDE0NDUsDQotICAgIDB4NjBCMywgMHg2MEIzLCAweDEwQUMsIDB4NjBCNCwgMHg2MEI0LCAweDFDOTAsIDB4NjBCNiwgMHg2MEI2LCAweDEzMDcsDQotICAgIDB4NjBCOCwgMHg2MEI4LCAweDBFN0YsIDB4NjBCQywgMHg2MEJDLCAweDEwQjksIDB4NjBCRCwgMHg2MEJELCAweDFCREMsDQotICAgIDB4NjBDNSwgMHg2MEM1LCAweDFBM0MsIDB4NjBDNywgMHg2MEM3LCAweDEwRTAsIDB4NjBEMSwgMHg2MEQxLCAweDFFQTEsDQotICAgIDB4NjBEQSwgMHg2MERBLCAweDFFQUIsIDB4NjBEQywgMHg2MERDLCAweDE1MUUsIDB4NjBERiwgMHg2MERGLCAweDE4QjEsDQotICAgIDB4NjBFMCwgMHg2MEUwLCAweDFFNzEsIDB4NjBFMSwgMHg2MEUxLCAweDE2QTUsIDB4NjBGMCwgMHg2MEYwLCAweDFDRDksDQotICAgIDB4NjBGMSwgMHg2MEYxLCAweDEwNTIsIDB4NjBGMywgMHg2MEYzLCAweDE0RTEsIDB4NjBGNiwgMHg2MEY2LCAweDFFRTQsDQotICAgIDB4NjBGOSwgMHg2MEY5LCAweDE2RUEsIDB4NjBGQSwgMHg2MEZBLCAweDE1NjYsIDB4NjBGQiwgMHg2MEZCLCAweDFDQTUsDQotICAgIDB4NjEwMSwgMHg2MTAxLCAweDE1Q0EsIDB4NjEwNiwgMHg2MTA2LCAweDBFMTYsIDB4NjEwOCwgMHg2MTA5LCAweDE4QjIsDQotICAgIDB4NjEwRCwgMHg2MTBELCAweDEzMDgsIDB4NjEwRSwgMHg2MTBFLCAweDFENUQsIDB4NjEwRiwgMHg2MTBGLCAweDE4RkUsDQotICAgIDB4NjExNSwgMHg2MTE1LCAweDE2QTYsIDB4NjExQSwgMHg2MTFBLCAweDE4M0YsIDB4NjExQiwgMHg2MTFCLCAweDE2RDQsDQotICAgIDB4NjExRiwgMHg2MTFGLCAweDBEQkEsIDB4NjEyNywgMHg2MTI3LCAweDBGMTQsIDB4NjEzMCwgMHg2MTMwLCAweDFFRTUsDQotICAgIDB4NjEzNCwgMHg2MTM0LCAweDFCQkIsIDB4NjEzNywgMHg2MTM3LCAweDBERUQsIDB4NjEzQywgMHg2MTNDLCAweDE2NkQsDQotICAgIDB4NjEzRSwgMHg2MTNFLCAweDBERUUsIDB4NjEzRiwgMHg2MTNGLCAweDE4NzksIDB4NjE0MiwgMHg2MTQyLCAweDE4MjYsDQotICAgIDB4NjE0NCwgMHg2MTQ0LCAweDExRjksIDB4NjE0NywgMHg2MTQ3LCAweDE4RTcsIDB4NjE0OCwgMHg2MTQ4LCAweDE5NUMsDQotICAgIDB4NjE0QSwgMHg2MTRBLCAweDBFNDcsIDB4NjE0QiwgMHg2MTRCLCAweDFEMEIsIDB4NjE0QywgMHg2MTRDLCAweDFFRTYsDQotICAgIDB4NjE1MywgMHg2MTUzLCAweDFEOUIsIDB4NjE1NSwgMHg2MTU1LCAweDEyQTEsIDB4NjE1OCwgMHg2MTU5LCAweDFCQUQsDQotICAgIDB4NjE1RCwgMHg2MTVELCAweDFEMkYsIDB4NjE1RiwgMHg2MTVGLCAweDFEMUQsIDB4NjE2MiwgMHg2MTYyLCAweDEyNDMsDQotICAgIDB4NjE2MywgMHg2MTYzLCAweDBFRUUsIDB4NjE2NCwgMHg2MTY0LCAweDBEOEQsIDB4NjE2NywgMHg2MTY3LCAweDFFNzIsDQotICAgIDB4NjE2OCwgMHg2MTY4LCAweDBERUYsIDB4NjE2QiwgMHg2MTZCLCAweDFBQjksIDB4NjE2RSwgMHg2MTZFLCAweDExNUQsDQotICAgIDB4NjE3MCwgMHg2MTcwLCAweDE4OTQsIDB4NjE3NiwgMHg2MTc2LCAweDBFNTgsIDB4NjE3NywgMHg2MTc3LCAweDBERDgsDQotICAgIDB4NjE3RCwgMHg2MTdELCAweDFCRTEsIDB4NjE3RSwgMHg2MTdFLCAweDE4MTgsIDB4NjE4MSwgMHg2MTgxLCAweDFDNTcsDQotICAgIDB4NjE4MiwgMHg2MTgyLCAweDE4NDAsIDB4NjE4QSwgMHg2MThBLCAweDE0NDYsIDB4NjE4RSwgMHg2MThFLCAweDFCMTQsDQotICAgIDB4NjE5MCwgMHg2MTkwLCAweDExNzEsIDB4NjE5MSwgMHg2MTkxLCAweDE0NzUsIDB4NjE5NCwgMHg2MTk0LCAweDFDMzEsDQotICAgIDB4NjE5OCwgMHg2MTk4LCAweDFGNkMsIDB4NjE5OSwgMHg2MTk5LCAweDFGNkIsIDB4NjE5QSwgMHg2MTlBLCAweDFDRjQsDQotICAgIDB4NjFBNCwgMHg2MUE0LCAweDE0MjcsIDB4NjFBNywgMHg2MUE3LCAweDEwRjAsIDB4NjFBOSwgMHg2MUE5LCAweDBFMkMsDQotICAgIDB4NjFBQiwgMHg2MUFCLCAweDEzMDksIDB4NjFBQywgMHg2MUFDLCAweDBFNTksIDB4NjFBRSwgMHg2MUFFLCAweDEyQ0UsDQotICAgIDB4NjFCMiwgMHg2MUIyLCAweDFFMkIsIDB4NjFCNiwgMHg2MUI2LCAweDE3MTksIDB4NjFCQSwgMHg2MUJBLCAweDEwN0IsDQotICAgIDB4NjFCRSwgMHg2MUJFLCAweDBEQkIsIDB4NjFDMywgMHg2MUMzLCAweDBGQkEsIDB4NjFDNywgMHg2MUM3LCAweDBEOUIsDQotICAgIDB4NjFDOCwgMHg2MUM4LCAweDFFMEMsIDB4NjFDOSwgMHg2MUM5LCAweDE4RjcsIDB4NjFDQSwgMHg2MUNBLCAweDE3QUYsDQotICAgIDB4NjFDQiwgMHg2MUNCLCAweDEyQ0YsIDB4NjFFNiwgMHg2MUU2LCAweDEwMjcsIDB4NjFGMiwgMHg2MUYyLCAweDFCN0YsDQotICAgIDB4NjFGNiwgMHg2MUY2LCAweDExMTcsIDB4NjFGNywgMHg2MUY3LCAweDFFRkUsIDB4NjFGOCwgMHg2MUY4LCAweDFFMzksDQotICAgIDB4NjFGQSwgMHg2MUZBLCAweDFCQUYsIDB4NjFGQywgMHg2MUZDLCAweDBGNDYsIDB4NjFGRiwgMHg2MUZGLCAweDE4RkYsDQotICAgIDB4NjIwMCwgMHg2MjAwLCAweDExNzIsIDB4NjIwNywgMHg2MjA3LCAweDEwOTMsIDB4NjIwOCwgMHg2MjA4LCAweDBFREMsDQotICAgIDB4NjIwQSwgMHg2MjBBLCAweDEyRDAsIDB4NjIwQywgMHg2MjBDLCAweDE2MjMsIDB4NjIwRCwgMHg2MjBELCAweDE1Q0IsDQotICAgIDB4NjIwRSwgMHg2MjBFLCAweDE4RTEsIDB4NjIxMCwgMHg2MjEwLCAweDE1NjcsIDB4NjIxMSwgMHg2MjExLCAweDE2OTUsDQotICAgIDB4NjIxMiwgMHg2MjEyLCAweDBFODAsIDB4NjIxNiwgMHg2MjE2LCAweDFFQTIsIDB4NjIxQSwgMHg2MjFBLCAweDFCRTIsDQotICAgIDB4NjIxRiwgMHg2MjFGLCAweDBGQjMsIDB4NjIyMSwgMHg2MjIxLCAweDBEQkMsIDB4NjIyQSwgMHg2MjJBLCAweDFBMUQsDQotICAgIDB4NjIyRSwgMHg2MjJFLCAweDExRjAsIDB4NjIzMCwgMHg2MjMwLCAweDFBMDEsIDB4NjIzMSwgMHg2MjMxLCAweDFGNkQsDQotICAgIDB4NjIzNCwgMHg2MjM0LCAweDEwQTIsIDB4NjIzNiwgMHg2MjM2LCAweDFFODAsIDB4NjIzRSwgMHg2MjNFLCAweDExNUUsDQotICAgIDB4NjIzRiwgMHg2MjNGLCAweDEzNTQsIDB4NjI0MCwgMHg2MjQwLCAweDE1ODMsIDB4NjI0MSwgMHg2MjQxLCAweDFENjAsDQotICAgIDB4NjI0NywgMHg2MjQ3LCAweDE1MzAsIDB4NjI0OCwgMHg2MjQ4LCAweDFFODEsIDB4NjI0OSwgMHg2MjQ5LCAweDE0NDcsDQotICAgIDB4NjI0QiwgMHg2MjRCLCAweDE1Q0MsIDB4NjI0RCwgMHg2MjRELCAweDE5QUUsIDB4NjI1MywgMHg2MjUzLCAweDFDREEsDQotICAgIDB4NjI1OCwgMHg2MjU4LCAweDFDRTYsIDB4NjI2RSwgMHg2MjZFLCAweDE0MjgsIDB4NjI3MSwgMHg2MjcxLCAweDBGRDYsDQotICAgIDB4NjI3NiwgMHg2Mjc2LCAweDE0MDQsIDB4NjI3OSwgMHg2Mjc5LCAweDE0NDgsIDB4NjI3QywgMHg2MjdDLCAweDE2REMsDQotICAgIDB4NjI3RiwgMHg2MjdGLCAweDE2MzcsIDB4NjI4MCwgMHg2MjgwLCAweDBGRjAsIDB4NjI4NCwgMHg2Mjg0LCAweDFDMzIsDQotICAgIDB4NjI4OSwgMHg2Mjg5LCAweDBFNDAsIDB4NjI4QSwgMHg2MjhBLCAweDFEMzUsIDB4NjI5MSwgMHg2MjkxLCAweDE3MUEsDQotICAgIDB4NjI5MiwgMHg2MjkyLCAweDE1MDQsIDB4NjI5NSwgMHg2Mjk1LCAweDFEMkMsIDB4NjI5NywgMHg2Mjk3LCAweDFERkMsDQotICAgIDB4NjI5OCwgMHg2Mjk4LCAweDFBMUUsIDB4NjI5QiwgMHg2MjlCLCAweDFEODEsIDB4NjJBQiwgMHg2MkFCLCAweDFEQUUsDQotICAgIDB4NjJCMSwgMHg2MkIxLCAweDFEODIsIDB4NjJCNSwgMHg2MkI1LCAweDE5QzUsIDB4NjJCOSwgMHg2MkI5LCAweDEyNTIsDQotICAgIDB4NjJCQywgMHg2MkJDLCAweDE2QzYsIDB4NjJCRCwgMHg2MkJELCAweDFDNjIsIDB4NjJDMiwgMHg2MkMyLCAweDE0MzYsDQotICAgIDB4NjJDNywgMHg2MkM3LCAweDEyRDEsIDB4NjJDOCwgMHg2MkM4LCAweDEwNDUsIDB4NjJDOSwgMHg2MkM5LCAweDExMzksDQotICAgIDB4NjJDQywgMHg2MkNDLCAweDEzMkQsIDB4NjJDRCwgMHg2MkNELCAweDEzMTgsIDB4NjJDRiwgMHg2MkNGLCAweDEwMjgsDQotICAgIDB4NjJEMCwgMHg2MkQwLCAweDBGMTUsIDB4NjJEMiwgMHg2MkQyLCAweDBFMDUsIDB4NjJEMywgMHg2MkQzLCAweDFCRTMsDQotICAgIDB4NjJENCwgMHg2MkQ0LCAweDEzNDMsIDB4NjJENiwgMHg2MkQ2LCAweDFDREIsIDB4NjJENywgMHg2MkQ3LCAweDE4MDQsDQotICAgIDB4NjJEOCwgMHg2MkQ4LCAweDBGNDcsIDB4NjJEOSwgMHg2MkQ5LCAweDFBQjMsIDB4NjJEQiwgMHg2MkRCLCAweDFDMzMsDQotICAgIDB4NjJEQywgMHg2MkRDLCAweDEzNkQsIDB4NjJFQywgMHg2MkVDLCAweDBFRkQsIDB4NjJFRCwgMHg2MkVELCAweDE2NUMsDQotICAgIDB4NjJFRSwgMHg2MkVFLCAweDEwMjEsIDB4NjJFRiwgMHg2MkVGLCAweDFCMTYsIDB4NjJGMSwgMHg2MkYxLCAweDBFRDIsDQotICAgIDB4NjJGMywgMHg2MkYzLCAweDBGODYsIDB4NjJGNywgMHg2MkY3LCAweDBFOUEsIDB4NjJGRSwgMHg2MkZFLCAweDE2MkUsDQotICAgIDB4NjJGRiwgMHg2MkZGLCAweDEwMjksIDB4NjMwMSwgMHg2MzAxLCAweDFCMjQsIDB4NjMwNywgMHg2MzA3LCAweDFCMjUsDQotICAgIDB4NjMwOSwgMHg2MzA5LCAweDE2QjEsIDB4NjMxMSwgMHg2MzExLCAweDEwQkEsIDB4NjMyQiwgMHg2MzJCLCAweDFBQ0EsDQotICAgIDB4NjMyRiwgMHg2MzJGLCAweDFCNDcsIDB4NjMzQSwgMHg2MzNBLCAweDFBM0QsIDB4NjMzQiwgMHg2MzNCLCAweDE3NEIsDQotICAgIDB4NjMzRCwgMHg2MzNELCAweDEyNDQsIDB4NjMzRSwgMHg2MzNFLCAweDFFNTMsIDB4NjM0OSwgMHg2MzQ5LCAweDFCOEYsDQotICAgIDB4NjM0QywgMHg2MzRDLCAweDFENEQsIDB4NjM0RiwgMHg2MzRGLCAweDEwMkYsIDB4NjM1MCwgMHg2MzUwLCAweDE3NEEsDQotICAgIDB4NjM1NSwgMHg2MzU1LCAweDFEODMsIDB4NjM2NywgMHg2MzY3LCAweDEzRUEsIDB4NjM2OCwgMHg2MzY4LCAweDE0OTEsDQotICAgIDB4NjM2RSwgMHg2MzZFLCAweDBFMDYsIDB4NjM3MiwgMHg2MzcyLCAweDBGODcsIDB4NjM3NywgMHg2Mzc3LCAweDFDMTYsDQotICAgIDB4NjM3QSwgMHg2MzdBLCAweDEwMzAsIDB4NjM3QiwgMHg2MzdCLCAweDEwNDYsIDB4NjM3RiwgMHg2MzdGLCAweDE1MDUsDQotICAgIDB4NjM4MywgMHg2MzgzLCAweDE1ODQsIDB4NjM4OCwgMHg2Mzg4LCAweDE1Q0QsIDB4NjM4OSwgMHg2Mzg5LCAweDEwQkIsDQotICAgIDB4NjM4QywgMHg2MzhDLCAweDE5OTEsIDB4NjM5MiwgMHg2MzkyLCAweDEzNkUsIDB4NjM5NiwgMHg2Mzk2LCAweDE2REQsDQotICAgIDB4NjM5OCwgMHg2Mzk4LCAweDBGNzksIDB4NjM5QiwgMHg2MzlCLCAweDBGMEQsIDB4NjNBMCwgMHg2M0EwLCAweDExNDksDQotICAgIDB4NjNBMSwgMHg2M0ExLCAweDFCQ0YsIDB4NjNBMiwgMHg2M0EyLCAweDFDRkMsIDB4NjNBNSwgMHg2M0E1LCAweDFBMkQsDQotICAgIDB4NjNBNywgMHg2M0E3LCAweDBFRDMsIDB4NjNBOCwgMHg2M0E4LCAweDFDNjMsIDB4NjNBOSwgMHg2M0E5LCAweDE3MjksDQotICAgIDB4NjNBQSwgMHg2M0FBLCAweDFBODUsIDB4NjNDMCwgMHg2M0MwLCAweDBEOUMsIDB4NjNDNCwgMHg2M0M0LCAweDE4QjQsDQotICAgIDB4NjNDNiwgMHg2M0M2LCAweDBGOUQsIDB4NjNDRiwgMHg2M0NGLCAweDEyQzQsIDB4NjNEMCwgMHg2M0QwLCAweDFBNkUsDQotICAgIDB4NjNENiwgMHg2M0Q2LCAweDE4RjMsIDB4NjNEQSwgMHg2M0RBLCAweDE2RkIsIDB4NjNEQiwgMHg2M0RCLCAweDFFRDAsDQotICAgIDB4NjNFMSwgMHg2M0UxLCAweDE2QTcsIDB4NjNFRCwgMHg2M0VELCAweDBFMkQsIDB4NjNFRSwgMHg2M0VFLCAweDFGM0YsDQotICAgIDB4NjNGNCwgMHg2M0Y0LCAweDE4N0EsIDB4NjNGNiwgMHg2M0Y2LCAweDE2RUIsIDB4NjNGNywgMHg2M0Y3LCAweDE0Q0YsDQotICAgIDB4NjQwRCwgMHg2NDBELCAweDE1QUMsIDB4NjQwRiwgMHg2NDBGLCAweDEzMTksIDB4NjQxNCwgMHg2NDE0LCAweDE1ODUsDQotICAgIDB4NjQxNiwgMHg2NDE2LCAweDE4MDUsIDB4NjQxNywgMHg2NDE3LCAweDEwQkMsIDB4NjQxQywgMHg2NDFDLCAweDE1Q0UsDQotICAgIDB4NjQyMiwgMHg2NDIyLCAweDFCNDgsIDB4NjQyQywgMHg2NDJDLCAweDEzMkUsIDB4NjQyRCwgMHg2NDJELCAweDFEMDEsDQotICAgIDB4NjQzQSwgMHg2NDNBLCAweDFGNDYsIDB4NjQzRSwgMHg2NDNFLCAweDFCOTAsIDB4NjQ1OCwgMHg2NDU4LCAweDE5REYsDQotICAgIDB4NjQ2MCwgMHg2NDYwLCAweDFDNTgsIDB4NjQ2OSwgMHg2NDY5LCAweDEyMzAsIDB4NjQ2RiwgMHg2NDZGLCAweDFCMjYsDQotICAgIDB4NjQ3OCwgMHg2NDc5LCAweDEyQTIsIDB4NjQ3QSwgMHg2NDdBLCAweDFBMkUsIDB4NjQ4OCwgMHg2NDg4LCAweDExQTAsDQotICAgIDB4NjQ5MSwgMHg2NDkxLCAweDFEMTcsIDB4NjQ5MiwgMHg2NDkyLCAweDE0QzQsIDB4NjQ5MywgMHg2NDkzLCAweDE4MDYsDQotICAgIDB4NjQ5QSwgMHg2NDlBLCAweDEwNDEsIDB4NjQ5RSwgMHg2NDlFLCAweDEwOTQsIDB4NjRBNCwgMHg2NEE0LCAweDFDMDMsDQotICAgIDB4NjRBNSwgMHg2NEE1LCAweDEzNDQsIDB4NjRBQiwgMHg2NEFCLCAweDEyRDIsIDB4NjRBRCwgMHg2NEFELCAweDFEMzYsDQotICAgIDB4NjRBRSwgMHg2NEFFLCAweDFDNUQsIDB4NjRCMCwgMHg2NEIwLCAweDFCOTYsIDB4NjRCMiwgMHg2NEIyLCAweDEzMUEsDQotICAgIDB4NjRCQiwgMHg2NEJCLCAweDEwNzQsIDB4NjRDMSwgMHg2NEMxLCAweDE3Q0IsIDB4NjRDNCwgMHg2NEM0LCAweDExQTEsDQotICAgIDB4NjRDNSwgMHg2NEM1LCAweDFCRjEsIDB4NjRDNywgMHg2NEM3LCAweDFEMTUsIDB4NjRDQSwgMHg2NENBLCAweDBFMkUsDQotICAgIDB4NjRDRCwgMHg2NENELCAweDFBODYsIDB4NjRDRSwgMHg2NENFLCAweDBFNUEsIDB4NjREMiwgMHg2NEQyLCAweDBGQzgsDQotICAgIDB4NjRENCwgMHg2NEQ0LCAweDEwN0MsIDB4NjREOCwgMHg2NEQ4LCAweDEzOUYsIDB4NjREQSwgMHg2NERBLCAweDBFMDcsDQotICAgIDB4NjRFMSwgMHg2NEUxLCAweDEwQTMsIDB4NjRFMiwgMHg2NEUyLCAweDFDRTcsIDB4NjRFNSwgMHg2NEU1LCAweDExMzAsDQotICAgIDB4NjRFNiwgMHg2NEU2LCAweDFCQTcsIDB4NjRFNywgMHg2NEU3LCAweDBFMDgsIDB4NjRFQywgMHg2NEVDLCAweDE5MDAsDQotICAgIDB4NjRGMiwgMHg2NEYyLCAweDFCRTQsIDB4NjRGNCwgMHg2NEY0LCAweDFFQzUsIDB4NjRGQSwgMHg2NEZBLCAweDFEMzcsDQotICAgIDB4NjRGRSwgMHg2NEZFLCAweDE4MDcsIDB4NjUwMCwgMHg2NTAwLCAweDEzMkYsIDB4NjUwNCwgMHg2NTA0LCAweDFEMTgsDQotICAgIDB4NjUxOCwgMHg2NTE4LCAweDE2RkMsIDB4NjUxRCwgMHg2NTFELCAweDE1NUYsIDB4NjUyMywgMHg2NTIzLCAweDExNzMsDQotICAgIDB4NjUyQSwgMHg2NTJBLCAweDBGMjMsIDB4NjUyQiwgMHg2NTJCLCAweDFFQzYsIDB4NjUyQywgMHg2NTJDLCAweDExMzEsDQotICAgIDB4NjUyRiwgMHg2NTJGLCAweDFCMjcsIDB4NjUzNiwgMHg2NTM2LCAweDE1Q0YsIDB4NjUzNywgMHg2NTM3LCAweDBFOUIsDQotICAgIDB4NjUzOCwgMHg2NTM4LCAweDE4QjUsIDB4NjUzOSwgMHg2NTM5LCAweDBERjAsIDB4NjUzQiwgMHg2NTNCLCAweDBFRDQsDQotICAgIDB4NjUzRSwgMHg2NTNFLCAweDEzNTUsIDB4NjUzRiwgMHg2NTNGLCAweDFBM0UsIDB4NjU0NSwgMHg2NTQ1LCAweDBFOUMsDQotICAgIDB4NjU0OCwgMHg2NTQ4LCAweDFGMTQsIDB4NjU0RCwgMHg2NTRELCAweDE1MDYsIDB4NjU0RSwgMHg2NTRFLCAweDBGMjQsDQotICAgIDB4NjU0RiwgMHg2NTRGLCAweDEzMEEsIDB4NjU1MSwgMHg2NTUxLCAweDBGNDgsIDB4NjU1NiwgMHg2NTU2LCAweDE3QjAsDQotICAgIDB4NjU1NywgMHg2NTU3LCAweDFENTEsIDB4NjU1RSwgMHg2NTVFLCAweDFCQkMsIDB4NjU2MiwgMHg2NTYyLCAweDBEQkQsDQotICAgIDB4NjU2MywgMHg2NTYzLCAweDE0QkEsIDB4NjU2NiwgMHg2NTY2LCAweDEwRTEsIDB4NjU2QywgMHg2NTZDLCAweDBFNUIsDQotICAgIDB4NjU2RCwgMHg2NTZELCAweDE2RkQsIDB4NjU3MiwgMHg2NTcyLCAweDBFOUQsIDB4NjU3NCwgMHg2NTc0LCAweDFBM0YsDQotICAgIDB4NjU3NSwgMHg2NTc1LCAweDE5RTAsIDB4NjU3NywgMHg2NTc3LCAweDE0MDUsIDB4NjU3OCwgMHg2NTc4LCAweDE1RDAsDQotICAgIDB4NjU3RSwgMHg2NTdFLCAweDE1MzEsIDB4NjU4MiwgMHg2NTgyLCAweDExODQsIDB4NjU4MywgMHg2NTgzLCAweDFENzMsDQotICAgIDB4NjU4NSwgMHg2NTg1LCAweDFGMTUsIDB4NjU4NywgMHg2NTg3LCAweDEyRTgsIDB4NjU4QywgMHg2NThDLCAweDE0NkEsDQotICAgIDB4NjU5MCwgMHg2NTkwLCAweDE0NDksIDB4NjU5MSwgMHg2NTkxLCAweDEzMzAsIDB4NjU5NywgMHg2NTk3LCAweDEwRkQsDQotICAgIDB4NjU5OSwgMHg2NTk5LCAweDExQ0IsIDB4NjU5QiwgMHg2NTlCLCAweDBFQjgsIDB4NjU5QywgMHg2NTlDLCAweDE0OTIsDQotICAgIDB4NjU5RiwgMHg2NTlGLCAweDFCNzYsIDB4NjVBMSwgMHg2NUExLCAweDE2QjksIDB4NjVBNCwgMHg2NUE0LCAweDBGQkIsDQotICAgIDB4NjVBNSwgMHg2NUE1LCAweDFCRTUsIDB4NjVBNywgMHg2NUE3LCAweDE0MDYsIDB4NjVBQiwgMHg2NUFCLCAweDE5NzAsDQotICAgIDB4NjVBQywgMHg2NUFDLCAweDFCQjAsIDB4NjVBRiwgMHg2NUFGLCAweDE0OTMsIDB4NjVCMCwgMHg2NUIwLCAweDE2NkUsDQotICAgIDB4NjVCNywgMHg2NUI3LCAweDEwNjcsIDB4NjVCOSwgMHg2NUI5LCAweDEzNTYsIDB4NjVCQywgMHg2NUJDLCAweDE3MTAsDQotICAgIDB4NjVCRCwgMHg2NUJELCAweDE2NDcsIDB4NjVDMSwgMHg2NUMxLCAweDEzNTcsIDB4NjVDNSwgMHg2NUM1LCAweDExNUYsDQotICAgIDB4NjVDQiwgMHg2NUNCLCAweDE1MzIsIDB4NjVDQywgMHg2NUNDLCAweDFBNDAsIDB4NjVDRiwgMHg2NUNGLCAweDFBQUMsDQotICAgIDB4NjVEMiwgMHg2NUQyLCAweDExRTIsIDB4NjVENywgMHg2NUQ3LCAweDBGRjEsIDB4NjVFMCwgMHg2NUUwLCAweDEyRDMsDQotICAgIDB4NjVFMywgMHg2NUUzLCAweDBGRjIsIDB4NjVFNSwgMHg2NUU1LCAweDE5NDAsIDB4NjVFNiwgMHg2NUU2LCAweDEwNjgsDQotICAgIDB4NjVFOCwgMHg2NUU4LCAweDFCMjgsIDB4NjVFOSwgMHg2NUU5LCAweDFBODcsIDB4NjVFQywgMHg2NUVDLCAweDE2MEMsDQotICAgIDB4NjVFRCwgMHg2NUVELCAweDE4NTcsIDB4NjVGMSwgMHg2NUYxLCAweDFERDYsIDB4NjVGNCwgMHg2NUY0LCAweDE4NDEsDQotICAgIDB4NjVGQSwgMHg2NUZBLCAweDE3RUYsIDB4NjVGQiwgMHg2NUZDLCAweDEzMEIsIDB4NjVGRCwgMHg2NUZELCAweDEwRTIsDQotICAgIDB4NjVGRiwgMHg2NUZGLCAweDE3QjEsIDB4NjYwNiwgMHg2NjA2LCAweDBFQzEsIDB4NjYwNywgMHg2NjA3LCAweDE2MzgsDQotICAgIDB4NjYwOSwgMHg2NjA5LCAweDEzNTgsIDB4NjYwQSwgMHg2NjBBLCAweDFFODIsIDB4NjYwQywgMHg2NjBDLCAweDFCQkQsDQotICAgIDB4NjYwRSwgMHg2NjBFLCAweDEyOEYsIDB4NjYwRiwgMHg2NjBGLCAweDFFQTUsIDB4NjYxMCwgMHg2NjEwLCAweDE0MjksDQotICAgIDB4NjYxMSwgMHg2NjExLCAweDBGQzksIDB4NjYxMywgMHg2NjEzLCAweDE3M0UsIDB4NjYxNCwgMHg2NjE0LCAweDE1MUYsDQotICAgIDB4NjYxNSwgMHg2NjE1LCAweDFGNTMsIDB4NjYxRSwgMHg2NjFFLCAweDEzQjYsIDB4NjYxRiwgMHg2NjFGLCAweDE1NjgsDQotICAgIDB4NjYyMCwgMHg2NjIwLCAweDE3NzUsIDB4NjYyNSwgMHg2NjI1LCAweDFDODQsIDB4NjYyNywgMHg2NjI3LCAweDEyNjgsDQotICAgIDB4NjYyOCwgMHg2NjI4LCAweDE5NzEsIDB4NjYyRCwgMHg2NjJELCAweDE1ODYsIDB4NjYyRiwgMHg2NjJGLCAweDE2NDgsDQotICAgIDB4NjYzMCwgMHg2NjMwLCAweDFEQzUsIDB4NjYzMSwgMHg2NjMxLCAweDE4NTgsIDB4NjYzNCwgMHg2NjM0LCAweDEyQzUsDQotICAgIDB4NjYzNiwgMHg2NjM2LCAweDFCQkUsIDB4NjYzQSwgMHg2NjNBLCAweDEzQjcsIDB4NjYzQiwgMHg2NjNCLCAweDE2Q0MsDQotICAgIDB4NjY0MSwgMHg2NjQxLCAweDFBODgsIDB4NjY0MiwgMHg2NjQyLCAweDE2NDksIDB4NjY0MywgMHg2NjQ0LCAweDFFRTcsDQotICAgIDB4NjY0OSwgMHg2NjQ5LCAweDFCNDksIDB4NjY0QiwgMHg2NjRCLCAweDFCNEEsIDB4NjY0RiwgMHg2NjRGLCAweDE2QjIsDQotICAgIDB4NjY1OSwgMHg2NjU5LCAweDFBRkMsIDB4NjY1QiwgMHg2NjVCLCAweDFFM0EsIDB4NjY1RCwgMHg2NjVELCAweDFBRDksDQotICAgIDB4NjY1RSwgMHg2NjVFLCAweDFGNkUsIDB4NjY1RiwgMHg2NjVGLCAweDE1NjksIDB4NjY2NCwgMHg2NjY0LCAweDE3QjIsDQotICAgIDB4NjY2NSwgMHg2NjY1LCAweDFFRDIsIDB4NjY2NiwgMHg2NjY2LCAweDFFRkYsIDB4NjY2NywgMHg2NjY3LCAweDFFODMsDQotICAgIDB4NjY2OCwgMHg2NjY4LCAweDE2NkYsIDB4NjY2OSwgMHg2NjY5LCAweDEyNDUsIDB4NjY2QiwgMHg2NjZCLCAweDFDRTgsDQotICAgIDB4NjY2RSwgMHg2NjZFLCAweDEzQzYsIDB4NjY2RiwgMHg2NjZGLCAweDBFNUMsIDB4NjY3MywgMHg2NjczLCAweDE1MjAsDQotICAgIDB4NjY3NCwgMHg2Njc0LCAweDFDMUUsIDB4NjY3NiwgMHg2Njc2LCAweDFBNDEsIDB4NjY3NywgMHg2Njc3LCAweDBGOTYsDQotICAgIDB4NjY3OCwgMHg2Njc4LCAweDFBNDIsIDB4NjY3QSwgMHg2NjdBLCAweDFCMjksIDB4NjY4NCwgMHg2Njg0LCAweDFGMzcsDQotICAgIDB4NjY4NywgMHg2Njg3LCAweDBENzcsIDB4NjY4OCwgMHg2Njg4LCAweDFGMzQsIDB4NjY4OSwgMHg2Njg5LCAweDFGNDAsDQotICAgIDB4NjY4RSwgMHg2NjhFLCAweDE3NzYsIDB4NjY5MCwgMHg2NjkwLCAweDE4OTUsIDB4NjY5MSwgMHg2NjkxLCAweDE1MDcsDQotICAgIDB4NjY5NiwgMHg2Njk2LCAweDEwMkMsIDB4NjY5NywgMHg2Njk3LCAweDE2QzEsIDB4NjY5OCwgMHg2Njk4LCAweDE2RkUsDQotICAgIDB4NjY5RCwgMHg2NjlELCAweDEyOTAsIDB4NjZBMCwgMHg2NkEwLCAweDBFOUUsIDB4NjZBMiwgMHg2NkEyLCAweDFCQkYsDQotICAgIDB4NjZBQiwgMHg2NkFCLCAweDE5ODAsIDB4NjZBRSwgMHg2NkFFLCAweDEyQTQsIDB4NjZCMiwgMHg2NkIyLCAweDE5OTIsDQotICAgIDB4NjZCMywgMHg2NkIzLCAweDFFNzMsIDB4NjZCNCwgMHg2NkI0LCAweDFEOTQsIDB4NjZCOSwgMHg2NkI5LCAweDE1NTgsDQotICAgIDB4NjZCQiwgMHg2NkJCLCAweDBFNUQsIDB4NjZCRSwgMHg2NkJFLCAweDEwRTMsIDB4NjZDNCwgMHg2NkM0LCAweDE3NkYsDQotICAgIDB4NjZDNiwgMHg2NkM2LCAweDExNkIsIDB4NjZDNywgMHg2NkM3LCAweDEwN0QsIDB4NjZDOSwgMHg2NkM5LCAweDFGMTYsDQotICAgIDB4NjZENiwgMHg2NkQ2LCAweDE2RDUsIDB4NjZEOSwgMHg2NkQ5LCAweDE1MDgsIDB4NjZEQywgMHg2NkRDLCAweDE4MDgsDQotICAgIDB4NjZERCwgMHg2NkRELCAweDFEOTUsIDB4NjZFMCwgMHg2NkUwLCAweDBGMDQsIDB4NjZFNiwgMHg2NkU2LCAweDFGNkYsDQotICAgIDB4NjZGMCwgMHg2NkYwLCAweDE3RUQsIDB4NjZGMiwgMHg2NkYyLCAweDBFQjksIDB4NjZGMywgMHg2NkYzLCAweDE3OTEsDQotICAgIDB4NjZGNCwgMHg2NkY0LCAweDBFNUUsIDB4NjZGNywgMHg2NkY3LCAweDBEQUUsIDB4NjZGOCwgMHg2NkY4LCAweDE1MDksDQotICAgIDB4NjZGOSwgMHg2NkY5LCAweDFBOEEsIDB4NjZGQSwgMHg2NkZBLCAweDFBODksIDB4NjZGQywgMHg2NkZDLCAweDEyNDYsDQotICAgIDB4NjZGRSwgMHg2NkZFLCAweDFCMTUsIDB4NjZGRiwgMHg2NkZGLCAweDFDMjYsIDB4NjcwMCwgMHg2NzAwLCAweDFDNjAsDQotICAgIDB4NjcwMywgMHg2NzAzLCAweDFGMDAsIDB4NjcwOCwgMHg2NzA4LCAweDE4ODksIDB4NjcwOSwgMHg2NzA5LCAweDE4QjYsDQotICAgIDB4NjcwQiwgMHg2NzBCLCAweDE0MzgsIDB4NjcwRCwgMHg2NzBELCAweDEzRDgsIDB4NjcxNCwgMHg2NzE0LCAweDE0QjYsDQotICAgIDB4NjcxNSwgMHg2NzE1LCAweDFCNzcsIDB4NjcxNywgMHg2NzE3LCAweDExM0QsIDB4NjcxQiwgMHg2NzFCLCAweDEyNUMsDQotICAgIDB4NjcxRCwgMHg2NzFELCAweDFBOEIsIDB4NjcxRSwgMHg2NzFGLCAweDBGRjMsIDB4NjcyNiwgMHg2NzI2LCAweDEyQkUsDQotICAgIDB4NjcyNywgMHg2NzI3LCAweDExQkEsIDB4NjcyOCwgMHg2NzI4LCAweDEyQjQsIDB4NjcyQSwgMHg2NzJBLCAweDEyRjksDQotICAgIDB4NjcyQiwgMHg2NzJCLCAweDEyNTMsIDB4NjcyQywgMHg2NzJDLCAweDEzRTMsIDB4NjcyRCwgMHg2NzJELCAweDFCQTgsDQotICAgIDB4NjcyRSwgMHg2NzJFLCAweDFDODgsIDB4NjczMSwgMHg2NzMxLCAweDFBREEsIDB4NjczNCwgMHg2NzM0LCAweDEzMUIsDQotICAgIDB4NjczNiwgMHg2NzM2LCAweDFDREMsIDB4NjczQSwgMHg2NzNBLCAweDBGOTAsIDB4NjczRCwgMHg2NzNELCAweDFGMjcsDQotICAgIDB4Njc0NiwgMHg2NzQ2LCAweDBEOUQsIDB4Njc0OSwgMHg2NzQ5LCAweDE0QzksIDB4Njc0RSwgMHg2NzRFLCAweDEyMEMsDQotICAgIDB4Njc0RiwgMHg2NzRGLCAweDFFMUIsIDB4Njc1MCwgMHg2NzUwLCAweDE5QUYsIDB4Njc1MSwgMHg2NzUxLCAweDFDNTEsDQotICAgIDB4Njc1MywgMHg2NzUzLCAweDFEOUMsIDB4Njc1NiwgMHg2NzU2LCAweDE5OTMsIDB4Njc1QywgMHg2NzVDLCAweDEwRkUsDQotICAgIDB4Njc1RSwgMHg2NzVFLCAweDBGRjUsIDB4Njc1RiwgMHg2NzVGLCAweDE1QTMsIDB4Njc2RCwgMHg2NzZELCAweDFERkQsDQotICAgIDB4Njc2RiwgMHg2NzZGLCAweDEzNkYsIDB4Njc3MCwgMHg2NzcwLCAweDBFMUYsIDB4Njc3MSwgMHg2NzcxLCAweDEwRjEsDQotICAgIDB4Njc3MywgMHg2NzczLCAweDEyQzYsIDB4Njc3NSwgMHg2Nzc1LCAweDE5QzYsIDB4Njc3NywgMHg2Nzc3LCAweDFEMzgsDQotICAgIDB4Njc3QiwgMHg2NzdCLCAweDEwNTcsIDB4Njc3RSwgMHg2NzdFLCAweDE1QjMsIDB4Njc3RiwgMHg2NzdGLCAweDFENDQsDQotICAgIDB4Njc4NywgMHg2Nzg3LCAweDE0NEEsIDB4Njc4OSwgMHg2Nzg5LCAweDE3RjAsIDB4Njc4QiwgMHg2NzhCLCAweDEzNTksDQotICAgIDB4Njc4RiwgMHg2NzhGLCAweDEwMzIsIDB4Njc5MCwgMHg2NzkwLCAweDE1MjEsIDB4Njc5MywgMHg2NzkzLCAweDEwRkYsDQotICAgIDB4Njc5NSwgMHg2Nzk1LCAweDFDQzksIDB4Njc5NywgMHg2Nzk3LCAweDEyMjcsIDB4Njc5QSwgMHg2NzlBLCAweDEyNjksDQotICAgIDB4Njc5QywgMHg2NzlDLCAweDBFREQsIDB4Njc5RCwgMHg2NzlELCAweDFCMkEsIDB4NjdBRiwgMHg2N0FGLCAweDBFOUYsDQotICAgIDB4NjdCMCwgMHg2N0IwLCAweDFENkIsIDB4NjdCMywgMHg2N0IzLCAweDFCMkIsIDB4NjdCNiwgMHg2N0I3LCAweDBENzgsDQotICAgIDB4NjdCOCwgMHg2N0I4LCAweDBGNDksIDB4NjdCRSwgMHg2N0JFLCAweDE2NEEsIDB4NjdDNCwgMHg2N0M0LCAweDEzQjgsDQotICAgIDB4NjdDRiwgMHg2N0NGLCAweDEzN0YsIDB4NjdEMCwgMHg2N0QwLCAweDEyQTUsIDB4NjdEMSwgMHg2N0QxLCAweDBEQkUsDQotICAgIDB4NjdEMiwgMHg2N0QyLCAweDFDQzUsIDB4NjdEMywgMHg2N0QzLCAweDE3NjYsIDB4NjdENCwgMHg2N0Q0LCAweDE4QjcsDQotICAgIDB4NjdEQSwgMHg2N0RBLCAweDE4QjgsIDB4NjdERCwgMHg2N0RELCAweDFDRTksIDB4NjdFOSwgMHg2N0U5LCAweDBGNEEsDQotICAgIDB4NjdFQywgMHg2N0VDLCAweDBEOUUsIDB4NjdFRiwgMHg2N0VGLCAweDBEN0EsIDB4NjdGMCwgMHg2N0YwLCAweDEwM0QsDQotICAgIDB4NjdGMSwgMHg2N0YxLCAweDFBREIsIDB4NjdGMywgMHg2N0YzLCAweDExRTMsIDB4NjdGNCwgMHg2N0Y0LCAweDE2NEIsDQotICAgIDB4NjdGNSwgMHg2N0Y1LCAweDFCRDcsIDB4NjdGNiwgMHg2N0Y2LCAweDE0OTQsIDB4NjdGQiwgMHg2N0ZCLCAweDE0OTUsDQotICAgIDB4NjdGRSwgMHg2N0ZFLCAweDFBNDMsIDB4NjgxMiwgMHg2ODEyLCAweDE2MEQsIDB4NjgxMywgMHg2ODEzLCAweDFBMDIsDQotICAgIDB4NjgxNiwgMHg2ODE2LCAweDE1MEEsIDB4NjgxNywgMHg2ODE3LCAweDExRkEsIDB4NjgyMSwgMHg2ODIxLCAweDBGMjUsDQotICAgIDB4NjgyMiwgMHg2ODIyLCAweDEzODAsIDB4NjgyQSwgMHg2ODJBLCAweDFBREMsIDB4NjgyRiwgMHg2ODJGLCAweDE4NTksDQotICAgIDB4NjgzOCwgMHg2ODM4LCAweDFFMTgsIDB4NjgzOSwgMHg2ODM5LCAweDBGQkMsIDB4NjgzQywgMHg2ODNDLCAweDBFMkYsDQotICAgIDB4NjgzRCwgMHg2ODNELCAweDE5QjAsIDB4Njg0MCwgMHg2ODQwLCAweDBFMjAsIDB4Njg0MSwgMHg2ODQxLCAweDFERkUsDQotICAgIDB4Njg0MiwgMHg2ODQyLCAweDBFODEsIDB4Njg0MywgMHg2ODQzLCAweDEwQkQsIDB4Njg0OCwgMHg2ODQ4LCAweDE2QjMsDQotICAgIDB4Njg0RSwgMHg2ODRFLCAweDFCNkMsIDB4Njg1MCwgMHg2ODUwLCAweDEwRjIsIDB4Njg1MSwgMHg2ODUxLCAweDE0RTIsDQotICAgIDB4Njg1MywgMHg2ODUzLCAweDFFRDMsIDB4Njg1NCwgMHg2ODU0LCAweDEwMjIsIDB4Njg2RCwgMHg2ODZELCAweDFCNEIsDQotICAgIDB4Njg3NiwgMHg2ODc2LCAweDFEMUUsIDB4Njg3RiwgMHg2ODdGLCAweDBEOUYsIDB4Njg4MSwgMHg2ODgxLCAweDExNEYsDQotICAgIDB4Njg4NSwgMHg2ODg1LCAweDEyNkEsIDB4Njg4RiwgMHg2ODhGLCAweDBFQkEsIDB4Njg5MywgMHg2ODkzLCAweDE5QjEsDQotICAgIDB4Njg5NCwgMHg2ODk0LCAweDFDQUUsIDB4Njg5NywgMHg2ODk3LCAweDBFNUYsIDB4Njg5RCwgMHg2ODlELCAweDFBOEMsDQotICAgIDB4Njg5RiwgMHg2ODlGLCAweDFGMTcsIDB4NjhBMSwgMHg2OEExLCAweDE3REUsIDB4NjhBMiwgMHg2OEEyLCAweDFDMzQsDQotICAgIDB4NjhBNywgMHg2OEE3LCAweDE3QjMsIDB4NjhBOCwgMHg2OEE4LCAweDEyMEQsIDB4NjhBRCwgMHg2OEFELCAweDE0OTYsDQotICAgIDB4NjhBRiwgMHg2OEFGLCAweDFBNkYsIDB4NjhCMCwgMHg2OEIwLCAweDBFODIsIDB4NjhCMSwgMHg2OEIxLCAweDBFQzIsDQotICAgIDB4NjhCMywgMHg2OEIzLCAweDE1ODcsIDB4NjhCNSwgMHg2OEI1LCAweDEzOTMsIDB4NjhCNiwgMHg2OEI2LCAweDEyRkEsDQotICAgIDB4NjhDNCwgMHg2OEM0LCAweDBGRjcsIDB4NjhDNSwgMHg2OEM1LCAweDEzQjksIDB4NjhDOSwgMHg2OEM5LCAweDEyODIsDQotICAgIDB4NjhDQiwgMHg2OENCLCAweDBGRjYsIDB4NjhDRCwgMHg2OENELCAweDBFQzMsIDB4NjhEMiwgMHg2OEQyLCAweDEzRUIsDQotICAgIDB4NjhENSwgMHg2OEQ1LCAweDFBQkEsIDB4NjhENywgMHg2OEQ3LCAweDFBOEQsIDB4NjhEOCwgMHg2OEQ4LCAweDBGQjQsDQotICAgIDB4NjhEQSwgMHg2OERBLCAweDE0MzksIDB4NjhERiwgMHg2OERGLCAweDEwRjMsIDB4NjhFMCwgMHg2OEUwLCAweDEwOTUsDQotICAgIDB4NjhFNywgMHg2OEU3LCAweDE5N0IsIDB4NjhFOCwgMHg2OEU4LCAweDBFODMsIDB4NjhFRSwgMHg2OEVFLCAweDE0Q0EsDQotICAgIDB4NjhGMiwgMHg2OEYyLCAweDE1MEIsIDB4NjhGOSwgMHg2OEY5LCAweDEwQkUsIDB4NjhGQSwgMHg2OEZBLCAweDBFRUYsDQotICAgIDB4NjkwMCwgMHg2OTAwLCAweDE3REYsIDB4NjkwNSwgMHg2OTA1LCAweDE5MDEsIDB4NjkwRCwgMHg2OTBELCAweDE2NUQsDQotICAgIDB4NjkwRSwgMHg2OTBFLCAweDFDNjQsIDB4NjkxMiwgMHg2OTEyLCAweDFDMzUsIDB4NjkyNywgMHg2OTI3LCAweDEyOTEsDQotICAgIDB4NjkzMCwgMHg2OTMwLCAweDE2RUMsIDB4NjkzRCwgMHg2OTNELCAweDE3NEMsIDB4NjkzRiwgMHg2OTNGLCAweDFDODUsDQotICAgIDB4Njk0QSwgMHg2OTRBLCAweDE2RkYsIDB4Njk1MywgMHg2OTUzLCAweDFEQTgsIDB4Njk1NCwgMHg2OTU0LCAweDE1NEMsDQotICAgIDB4Njk1NSwgMHg2OTU1LCAweDFDREQsIDB4Njk1NywgMHg2OTU3LCAweDBFMTcsIDB4Njk1OSwgMHg2OTU5LCAweDEyRDQsDQotICAgIDB4Njk1QSwgMHg2OTVBLCAweDFDMzYsIDB4Njk1RSwgMHg2OTVFLCAweDEyMDAsIDB4Njk2MCwgMHg2OTYwLCAweDEwMzMsDQotICAgIDB4Njk2MSwgMHg2OTYyLCAweDE4QjksIDB4Njk2MywgMHg2OTYzLCAweDEyRkIsIDB4Njk2OCwgMHg2OTY4LCAweDFBNDQsDQotICAgIDB4Njk2QiwgMHg2OTZCLCAweDFCMTAsIDB4Njk2RCwgMHg2OTZELCAweDE3MkMsIDB4Njk2RSwgMHg2OTZFLCAweDE5QzcsDQotICAgIDB4Njk2RiwgMHg2OTZGLCAweDE2MEUsIDB4Njk3NSwgMHg2OTc1LCAweDBGQjUsIDB4Njk3NywgMHg2OTc3LCAweDFFMEQsDQotICAgIDB4Njk3OCwgMHg2OTc4LCAweDFDNjUsIDB4Njk3OSwgMHg2OTc5LCAweDE3NzcsIDB4Njk5NSwgMHg2OTk1LCAweDE4MjcsDQotICAgIDB4Njk5QiwgMHg2OTlCLCAweDFCNEMsIDB4Njk5QywgMHg2OTlDLCAweDEzNUEsIDB4NjlBNSwgMHg2OUE1LCAweDFFRTksDQotICAgIDB4NjlBNywgMHg2OUE3LCAweDE0NEIsIDB4NjlBRSwgMHg2OUFFLCAweDE3NzgsIDB4NjlCNCwgMHg2OUI0LCAweDExRTQsDQotICAgIDB4NjlCQiwgMHg2OUJCLCAweDFEMDIsIDB4NjlDMSwgMHg2OUMxLCAweDBFQTAsIDB4NjlDMywgMHg2OUMzLCAweDEzMzEsDQotICAgIDB4NjlDQiwgMHg2OUNCLCAweDBGNEIsIDB4NjlDQywgMHg2OUNDLCAweDFEMjQsIDB4NjlDRCwgMHg2OUNELCAweDFCQzAsDQotICAgIDB4NjlEMCwgMHg2OUQwLCAweDBGMTYsIDB4NjlFOCwgMHg2OUU4LCAweDBFRTgsIDB4NjlFQSwgMHg2OUVBLCAweDBERjEsDQotICAgIDB4NjlGQiwgMHg2OUZCLCAweDBGOUUsIDB4NjlGRCwgMHg2OUZELCAweDFBOEUsIDB4NjlGRiwgMHg2OUZGLCAweDBGQkQsDQotICAgIDB4NkEwMiwgMHg2QTAyLCAweDE2QTgsIDB4NkEwQSwgMHg2QTBBLCAweDEzODUsIDB4NkExMSwgMHg2QTExLCAweDExNTAsDQotICAgIDB4NkExMywgMHg2QTEzLCAweDExRDcsIDB4NkExNywgMHg2QTE3LCAweDE5QzgsIDB4NkExOSwgMHg2QTE5LCAweDFEOUQsDQotICAgIDB4NkExRSwgMHg2QTFFLCAweDFDNjYsIDB4NkExRiwgMHg2QTFGLCAweDE5OTQsIDB4NkEyMSwgMHg2QTIxLCAweDEyQTYsDQotICAgIDB4NkEyMywgMHg2QTIzLCAweDE3MDAsIDB4NkEzNSwgMHg2QTM1LCAweDFDMzcsIDB4NkEzOCwgMHg2QTM4LCAweDEzMUMsDQotICAgIDB4NkEzOSwgMHg2QTM5LCAweDE1RDEsIDB4NkEzQSwgMHg2QTNBLCAweDFFQkEsIDB4NkEzRCwgMHg2QTNELCAweDFBRkQsDQotICAgIDB4NkE0NCwgMHg2QTQ0LCAweDBEQkYsIDB4NkE0OCwgMHg2QTQ4LCAweDE4MDksIDB4NkE0QiwgMHg2QTRCLCAweDBGMjYsDQotICAgIDB4NkE1MiwgMHg2QTUyLCAweDE4NUYsIDB4NkE1MywgMHg2QTUzLCAweDE2MEYsIDB4NkE1OCwgMHg2QTU4LCAweDBGQUYsDQotICAgIDB4NkE1OSwgMHg2QTU5LCAweDExMEUsIDB4NkE1RiwgMHg2QTVGLCAweDBGRjgsIDB4NkE2MSwgMHg2QTYxLCAweDE0RTMsDQotICAgIDB4NkE2QiwgMHg2QTZCLCAweDFGMEYsIDB4NkE4MCwgMHg2QTgwLCAweDEwNjksIDB4NkE4NCwgMHg2QTg0LCAweDBFMzAsDQotICAgIDB4NkE4OSwgMHg2QTg5LCAweDFBNDUsIDB4NkE4RCwgMHg2QThELCAweDE3MUIsIDB4NkE4RSwgMHg2QThFLCAweDBGQ0EsDQotICAgIDB4NkE5NywgMHg2QTk3LCAweDEzQTAsIDB4NkE5QywgMHg2QTlDLCAweDFGMDEsIDB4NkFBMiwgMHg2QUEyLCAweDBFMjQsDQotICAgIDB4NkFBMywgMHg2QUEzLCAweDE5OTUsIDB4NkFCMywgMHg2QUIzLCAweDE0NkIsIDB4NkFCQiwgMHg2QUJCLCAweDFERTgsDQotICAgIDB4NkFDMiwgMHg2QUMyLCAweDEwQkYsIDB4NkFDMywgMHg2QUMzLCAweDBGOTEsIDB4NkFEMywgMHg2QUQzLCAweDExQTIsDQotICAgIDB4NkFEQSwgMHg2QURBLCAweDExNjAsIDB4NkFEQiwgMHg2QURCLCAweDFCMEYsIDB4NkFGNiwgMHg2QUY2LCAweDFFMkMsDQotICAgIDB4NkFGQiwgMHg2QUZCLCAweDE2RTIsIDB4NkIwNCwgMHg2QjA0LCAweDExMjcsIDB4NkIwQSwgMHg2QjBBLCAweDBGODgsDQotICAgIDB4NkIwQywgMHg2QjBDLCAweDE5OTYsIDB4NkIxMiwgMHg2QjEyLCAweDExMjgsIDB4NkIxNiwgMHg2QjE2LCAweDExMzIsDQotICAgIDB4NkIyMCwgMHg2QjIwLCAweDFGNUIsIDB4NkIyMSwgMHg2QjIxLCAweDFCODgsIDB4NkIyMywgMHg2QjIzLCAweDFGNTQsDQotICAgIDB4NkIzMiwgMHg2QjMyLCAweDE4MTksIDB4NkIzQSwgMHg2QjNBLCAweDBGRjksIDB4NkIzRCwgMHg2QjNELCAweDFGNUMsDQotICAgIDB4NkIzRSwgMHg2QjNFLCAweDBFRjAsIDB4NkI0NiwgMHg2QjQ2LCAweDFGNUQsIDB4NkI0NywgMHg2QjQ3LCAweDFFMkYsDQotICAgIDB4NkI0QywgMHg2QjRDLCAweDBEN0IsIDB4NkI0RSwgMHg2QjRFLCAweDFDRjUsIDB4NkI1MCwgMHg2QjUwLCAweDBGNEMsDQotICAgIDB4NkI1RiwgMHg2QjVGLCAweDE3MzEsIDB4NkI2MSwgMHg2QjYxLCAweDFFRDEsIDB4NkI2MiwgMHg2QjYyLCAweDFCMkMsDQotICAgIDB4NkI2MywgMHg2QjYzLCAweDFBNDYsIDB4NkI2NCwgMHg2QjY0LCAweDFCODksIDB4NkI2NSwgMHg2QjY1LCAweDEzQzcsDQotICAgIDB4NkI2NiwgMHg2QjY2LCAweDEyRDUsIDB4NkI2QSwgMHg2QjZBLCAweDE3RjUsIDB4NkI3MiwgMHg2QjcyLCAweDE1NzYsDQotICAgIDB4NkI3NywgMHg2Qjc3LCAweDExNkMsIDB4NkI3OCwgMHg2Qjc4LCAweDBGOTcsIDB4NkI3QiwgMHg2QjdCLCAweDE0OTcsDQotICAgIDB4NkI3RiwgMHg2QjdGLCAweDEyQkIsIDB4NkI4MywgMHg2QjgzLCAweDE2Q0QsIDB4NkI4NCwgMHg2Qjg0LCAweDFCNEQsDQotICAgIDB4NkI4NiwgMHg2Qjg2LCAweDFEMEMsIDB4NkI4OSwgMHg2Qjg5LCAweDE2MTAsIDB4NkI4QSwgMHg2QjhBLCAweDE1RDIsDQotICAgIDB4NkI5NiwgMHg2Qjk2LCAweDE2NUUsIDB4NkI5OCwgMHg2Qjk4LCAweDE5N0MsIDB4NkI5RSwgMHg2QjlFLCAweDE4NjAsDQotICAgIDB4NkJBRSwgMHg2QkFFLCAweDExODUsIDB4NkJBRiwgMHg2QkFGLCAweDE0NkMsIDB4NkJCMiwgMHg2QkIyLCAweDE1NTksDQotICAgIDB4NkJCNSwgMHg2QkI1LCAweDEwNkEsIDB4NkJCNywgMHg2QkI3LCAweDE4RTgsIDB4NkJCQSwgMHg2QkJBLCAweDE0QzUsDQotICAgIDB4NkJCQywgMHg2QkJDLCAweDBEOEUsIDB4NkJCRiwgMHg2QkJGLCAweDFBMDMsIDB4NkJDMSwgMHg2QkMxLCAweDFGM0MsDQotICAgIDB4NkJDNSwgMHg2QkM1LCAweDE5MDIsIDB4NkJDNiwgMHg2QkM2LCAweDBGNEQsIDB4NkJDQiwgMHg2QkNCLCAweDEyRDYsDQotICAgIDB4NkJDRCwgMHg2QkNELCAweDEyQTcsIDB4NkJDRiwgMHg2QkNGLCAweDEyNkIsIDB4NkJEMiwgMHg2QkQyLCAweDEwRDUsDQotICAgIDB4NkJEMywgMHg2QkQzLCAweDE4RDQsIDB4NkJENCwgMHg2QkQ0LCAweDE0NEMsIDB4NkJENiwgMHg2QkQ4LCAweDE0NEQsDQotICAgIDB4NkJEQiwgMHg2QkRCLCAweDEyQTgsIDB4NkJFQiwgMHg2QkVCLCAweDFFODQsIDB4NkJFQywgMHg2QkVDLCAweDBGNEUsDQotICAgIDB4NkMwOCwgMHg2QzA4LCAweDFBMDQsIDB4NkMwRiwgMHg2QzBGLCAweDE2OEUsIDB4NkMxMSwgMHg2QzExLCAweDEzMEQsDQotICAgIDB4NkMxMywgMHg2QzEzLCAweDEyNzgsIDB4NkMyMywgMHg2QzIzLCAweDBGRkEsIDB4NkMzNCwgMHg2QzM0LCAweDE1RDMsDQotICAgIDB4NkMzNywgMHg2QzM3LCAweDE0NzYsIDB4NkMzOCwgMHg2QzM4LCAweDE3NzksIDB4NkMzRSwgMHg2QzNFLCAweDEzOTQsDQotICAgIDB4NkM0MCwgMHg2QzQwLCAweDFBNDcsIDB4NkM0MSwgMHg2QzQxLCAweDFCMTEsIDB4NkM0MiwgMHg2QzQyLCAweDBGNEYsDQotICAgIDB4NkM0RSwgMHg2QzRFLCAweDEzOTUsIDB4NkM1MCwgMHg2QzUwLCAweDE1MjIsIDB4NkM1NSwgMHg2QzU1LCAweDE0QkIsDQotICAgIDB4NkM1NywgMHg2QzU3LCAweDFERDcsIDB4NkM1QSwgMHg2QzVBLCAweDE3QjQsIDB4NkM1RCwgMHg2QzVELCAweDE3MzIsDQotICAgIDB4NkM1RSwgMHg2QzVFLCAweDFFQUYsIDB4NkM1RiwgMHg2QzVGLCAweDBERDksIDB4NkM2MCwgMHg2QzYwLCAweDFCMkQsDQotICAgIDB4NkM2OCwgMHg2QzY4LCAweDBFQzgsIDB4NkM2QSwgMHg2QzZBLCAweDE3RjEsIDB4NkM2RCwgMHg2QzZELCAweDE3OTIsDQotICAgIDB4NkM3MCwgMHg2QzcwLCAweDFEMEQsIDB4NkM3MiwgMHg2QzcyLCAweDBGRDcsIDB4NkM3NiwgMHg2Qzc2LCAweDEyRTksDQotICAgIDB4NkM3QSwgMHg2QzdBLCAweDBFNDEsIDB4NkM3RCwgMHg2QzdELCAweDBGRkIsIDB4NkM3RSwgMHg2QzdFLCAweDE0MkEsDQotICAgIDB4NkM4MSwgMHg2QzgxLCAweDE2ODUsIDB4NkM4MiwgMHg2QzgyLCAweDBGRkMsIDB4NkM4MywgMHg2QzgzLCAweDE3QkYsDQotICAgIDB4NkM4NSwgMHg2Qzg1LCAweDE4N0IsIDB4NkM4NiwgMHg2Qzg2LCAweDFERkYsIDB4NkM4NywgMHg2Qzg3LCAweDE3NEQsDQotICAgIDB4NkM4OCwgMHg2Qzg4LCAweDFDQ0EsIDB4NkM4QywgMHg2QzhDLCAweDEwRTQsIDB4NkM5MCwgMHg2QzkwLCAweDEyQjUsDQotICAgIDB4NkM5MiwgMHg2QzkyLCAweDEyQkMsIDB4NkM5MywgMHg2QzkzLCAweDEwOEEsIDB4NkM5NCwgMHg2Qzk0LCAweDEyODMsDQotICAgIDB4NkM5NSwgMHg2Qzk1LCAweDEyRjEsIDB4NkM5NiwgMHg2Qzk2LCAweDFDOEMsIDB4NkM5OSwgMHg2Qzk5LCAweDE0OTgsDQotICAgIDB4NkM5QSwgMHg2QzlBLCAweDFCMkUsIDB4NkM5QiwgMHg2QzlCLCAweDFENTIsIDB4NkNBQiwgMHg2Q0FCLCAweDEyNTQsDQotICAgIDB4NkNBRSwgMHg2Q0FFLCAweDE5QzksIDB4NkNCMywgMHg2Q0IzLCAweDFEQzYsIDB4NkNCOCwgMHg2Q0I4LCAweDE0NTAsDQotICAgIDB4NkNCOSwgMHg2Q0I5LCAweDE4QkIsIDB4NkNCQiwgMHg2Q0JCLCAweDFDQUYsIDB4NkNCQywgMHg2Q0JDLCAweDE1ODgsDQotICAgIDB4NkNCRCwgMHg2Q0JELCAweDBFQTEsIDB4NkNCRSwgMHg2Q0JFLCAweDFDMEIsIDB4NkNCRiwgMHg2Q0JGLCAweDE3NEUsDQotICAgIDB4NkNDMSwgMHg2Q0MxLCAweDFFRUEsIDB4NkNDMiwgMHg2Q0MyLCAweDFFNjAsIDB4NkNDNCwgMHg2Q0M0LCAweDE1NEQsDQotICAgIDB4NkNDOSwgMHg2Q0M5LCAweDFCRjIsIDB4NkNDQSwgMHg2Q0NBLCAweDEzMUQsIDB4NkNDQywgMHg2Q0NDLCAweDFEQjcsDQotICAgIDB4NkNEMywgMHg2Q0QzLCAweDFFQjAsIDB4NkNENSwgMHg2Q0Q1LCAweDEzOUEsIDB4NkNENywgMHg2Q0Q3LCAweDE0OTksDQotICAgIDB4NkNEQiwgMHg2Q0RCLCAweDEzOTYsIDB4NkNFMSwgMHg2Q0UxLCAweDFEODQsIDB4NkNFMiwgMHg2Q0UyLCAweDFEMzksDQotICAgIDB4NkNFMywgMHg2Q0UzLCAweDE4RjQsIDB4NkNFNSwgMHg2Q0U1LCAweDEwNUIsIDB4NkNFOCwgMHg2Q0U4LCAweDFBREQsDQotICAgIDB4NkNFQiwgMHg2Q0VCLCAweDFFM0IsIDB4NkNFRSwgMHg2Q0VFLCAweDEzMzIsIDB4NkNFRiwgMHg2Q0VGLCAweDEzMEUsDQotICAgIDB4NkNGMCwgMHg2Q0YwLCAweDFEMEUsIDB4NkNGMywgMHg2Q0YzLCAweDE3N0EsIDB4NkQwQiwgMHg2RDBCLCAweDE3MDEsDQotICAgIDB4NkQwQywgMHg2RDBDLCAweDExODAsIDB4NkQxMSwgMHg2RDExLCAweDEzQzgsIDB4NkQxNywgMHg2RDE3LCAweDE1NzcsDQotICAgIDB4NkQxOSwgMHg2RDE5LCAweDE1RDQsIDB4NkQxQiwgMHg2RDFCLCAweDExMUUsIDB4NkQxRSwgMHg2RDFFLCAweDEwRjQsDQotICAgIDB4NkQyNSwgMHg2RDI1LCAweDFCNEUsIDB4NkQyNywgMHg2RDI3LCAweDE4QkMsIDB4NkQyOSwgMHg2RDI5LCAweDE1NEUsDQotICAgIDB4NkQyQSwgMHg2RDJBLCAweDFFQjEsIDB4NkQzMiwgMHg2RDMyLCAweDFBREUsIDB4NkQzNSwgMHg2RDM1LCAweDE2MTEsDQotICAgIDB4NkQzNiwgMHg2RDM2LCAweDFGNTAsIDB4NkQzOCwgMHg2RDM4LCAweDBGMDUsIDB4NkQzOSwgMHg2RDM5LCAweDE4N0MsDQotICAgIDB4NkQzQiwgMHg2RDNCLCAweDFFREIsIDB4NkQzRCwgMHg2RDNELCAweDFGNjAsIDB4NkQzRSwgMHg2RDNFLCAweDFEM0EsDQotICAgIDB4NkQ0MSwgMHg2RDQxLCAweDExRTUsIDB4NkQ1OSwgMHg2RDU5LCAweDFBMUYsIDB4NkQ1QSwgMHg2RDVBLCAweDFBRkUsDQotICAgIDB4NkQ1QywgMHg2RDVDLCAweDE0NkQsIDB4NkQ2MywgMHg2RDYzLCAweDE3RTAsIDB4NkQ2NiwgMHg2RDY2LCAweDFEODUsDQotICAgIDB4NkQ2OSwgMHg2RDY5LCAweDFFODUsIDB4NkQ2QSwgMHg2RDZBLCAweDExM0UsIDB4NkQ2QywgMHg2RDZDLCAweDEyMEUsDQotICAgIDB4NkQ2RSwgMHg2RDZFLCAweDE0MDcsIDB4NkQ3NCwgMHg2RDc0LCAweDE4MUEsIDB4NkQ3NywgMHg2RDc3LCAweDFFMEUsDQotICAgIDB4NkQ3OCwgMHg2RDc4LCAweDFDQ0IsIDB4NkQ3OSwgMHg2RDc5LCAweDFFNTQsIDB4NkQ3RiwgMHg2RDdGLCAweDFENTMsDQotICAgIDB4NkQ4NSwgMHg2RDg1LCAweDE3NjIsIDB4NkQ4NywgMHg2RDg3LCAweDBFNjAsIDB4NkQ4OCwgMHg2RDg4LCAweDE1ODksDQotICAgIDB4NkQ4OSwgMHg2RDg5LCAweDE1NjAsIDB4NkQ4QywgMHg2RDhDLCAweDE4MjgsIDB4NkQ4RCwgMHg2RDhELCAweDFGMTgsDQotICAgIDB4NkQ4RSwgMHg2RDhFLCAweDE3NEYsIDB4NkQ5MSwgMHg2RDkxLCAweDE1QTQsIDB4NkQ5MywgMHg2RDkzLCAweDE3NTAsDQotICAgIDB4NkQ5NSwgMHg2RDk1LCAweDFDMjcsIDB4NkRBRiwgMHg2REFGLCAweDE2RDYsIDB4NkRCMiwgMHg2REIyLCAweDE2REUsDQotICAgIDB4NkRCNSwgMHg2REI1LCAweDFERTksIDB4NkRDMCwgMHg2REMwLCAweDFBNDgsIDB4NkRDMywgMHg2REMzLCAweDBGODksDQotICAgIDB4NkRDNCwgMHg2REM0LCAweDFDQjAsIDB4NkRDNSwgMHg2REM1LCAweDE1MjMsIDB4NkRDNiwgMHg2REM2LCAweDFGMTksDQotICAgIDB4NkRDNywgMHg2REM3LCAweDBGRkQsIDB4NkRDQiwgMHg2RENCLCAweDEyMjgsIDB4NkRDRiwgMHg2RENGLCAweDFFODYsDQotICAgIDB4NkREMSwgMHg2REQxLCAweDE2MDEsIDB4NkREOCwgMHg2REQ4LCAweDEwQzAsIDB4NkREOSwgMHg2REQ5LCAweDFBQkIsDQotICAgIDB4NkREQSwgMHg2RERBLCAweDExRDgsIDB4NkRERSwgMHg2RERFLCAweDE1QjQsIDB4NkRFMSwgMHg2REUxLCAweDEwN0UsDQotICAgIDB4NkRFOCwgMHg2REU4LCAweDFBNDksIDB4NkRFQSwgMHg2REVBLCAweDExRjUsIDB4NkRFQiwgMHg2REVCLCAweDE4RUUsDQotICAgIDB4NkRFRSwgMHg2REVFLCAweDFGMDIsIDB4NkRGMSwgMHg2REYxLCAweDE2ODYsIDB4NkRGMywgMHg2REYzLCAweDE2MTIsDQotICAgIDB4NkRGNSwgMHg2REY1LCAweDE3NTEsIDB4NkRGNywgMHg2REY3LCAweDFFQTYsIDB4NkRGOCwgMHg2REY4LCAweDFDMUYsDQotICAgIDB4NkRGOSwgMHg2REY5LCAweDE3MkEsIDB4NkRGQSwgMHg2REZBLCAweDFCRjMsIDB4NkRGQiwgMHg2REZCLCAweDFDMEMsDQotICAgIDB4NkUxNywgMHg2RTE3LCAweDE0Q0IsIDB4NkUxOSwgMHg2RTE5LCAweDFFRDQsIDB4NkUxQSwgMHg2RTFBLCAweDE5Q0EsDQotICAgIDB4NkUxQiwgMHg2RTFCLCAweDBEQzAsIDB4NkUxRiwgMHg2RTFGLCAweDFBNEEsIDB4NkUyMCwgMHg2RTIwLCAweDBFMDksDQotICAgIDB4NkUyMSwgMHg2RTIxLCAweDEwQzEsIDB4NkUyMywgMHg2RTIzLCAweDE0OUEsIDB4NkUyNCwgMHg2RTI0LCAweDEzNDUsDQotICAgIDB4NkUyNSwgMHg2RTI1LCAweDE2QTksIDB4NkUyNiwgMHg2RTI2LCAweDE3RDMsIDB4NkUyQiwgMHg2RTJCLCAweDE1NEYsDQotICAgIDB4NkUyQywgMHg2RTJDLCAweDFDQTYsIDB4NkUyRCwgMHg2RTJELCAweDE4OTYsIDB4NkUyRiwgMHg2RTJGLCAweDFFMDAsDQotICAgIDB4NkUzMiwgMHg2RTMyLCAweDE1MzMsIDB4NkUzNCwgMHg2RTM0LCAweDBEQUYsIDB4NkUzNiwgMHg2RTM2LCAweDE3N0IsDQotICAgIDB4NkUzOCwgMHg2RTM4LCAweDE4QkQsIDB4NkUzQSwgMHg2RTNBLCAweDEyQzcsIDB4NkUzQywgMHg2RTNDLCAweDEyRkMsDQotICAgIDB4NkUzRCwgMHg2RTNELCAweDE5QjIsIDB4NkUzRSwgMHg2RTNFLCAweDFFQTcsIDB4NkU0MywgMHg2RTQzLCAweDEzNzAsDQotICAgIDB4NkU0NCwgMHg2RTQ0LCAweDEyRkQsIDB4NkU0QSwgMHg2RTRBLCAweDFBREYsIDB4NkU0RCwgMHg2RTRELCAweDEwNkIsDQotICAgIDB4NkU1NiwgMHg2RTU2LCAweDFFODcsIDB4NkU1OCwgMHg2RTU4LCAweDE0RTQsIDB4NkU1QiwgMHg2RTVCLCAweDEwN0YsDQotICAgIDB4NkU1QywgMHg2RTVDLCAweDE2NUYsIDB4NkU1RSwgMHg2RTVFLCAweDFBNEIsIDB4NkU1RiwgMHg2RTVGLCAweDFFRUIsDQotICAgIDB4NkU2NywgMHg2RTY3LCAweDE4MjksIDB4NkU2QiwgMHg2RTZCLCAweDFDNjcsIDB4NkU2RSwgMHg2RTZFLCAweDE5MzUsDQotICAgIDB4NkU2RiwgMHg2RTZGLCAweDFEMDUsIDB4NkU3MiwgMHg2RTcyLCAweDE4N0QsIDB4NkU3MywgMHg2RTczLCAweDEwMzQsDQotICAgIDB4NkU3QSwgMHg2RTdBLCAweDEzQzksIDB4NkU5MCwgMHg2RTkwLCAweDE4N0UsIDB4NkU5NiwgMHg2RTk2LCAweDFBRkYsDQotICAgIDB4NkU5QywgMHg2RTlDLCAweDExRTYsIDB4NkU5RCwgMHg2RTlELCAweDBGNTAsIDB4NkU5RiwgMHg2RTlGLCAweDEyOTIsDQotICAgIDB4NkVBMiwgMHg2RUEyLCAweDE5NDEsIDB4NkVBNSwgMHg2RUE1LCAweDE0MDgsIDB4NkVBQSwgMHg2RUFBLCAweDBFODQsDQotICAgIDB4NkVBQiwgMHg2RUFCLCAweDE3QzMsIDB4NkVBRiwgMHg2RUFGLCAweDE1OEEsIDB4NkVCMSwgMHg2RUIxLCAweDFCNEYsDQotICAgIDB4NkVCNiwgMHg2RUI2LCAweDE4MkEsIDB4NkVCQSwgMHg2RUJBLCAweDEwNUQsIDB4NkVDMiwgMHg2RUMyLCAweDEzNUIsDQotICAgIDB4NkVDNCwgMHg2RUM0LCAweDFCQzEsIDB4NkVDNSwgMHg2RUM1LCAweDEyOEEsIDB4NkVDOSwgMHg2RUM5LCAweDFFRUMsDQotICAgIDB4NkVDQiwgMHg2RUNCLCAweDE5NUQsIDB4NkVDQywgMHg2RUNDLCAweDFCRTYsIDB4NkVDRSwgMHg2RUNFLCAweDFFNjEsDQotICAgIDB4NkVEMSwgMHg2RUQxLCAweDFFREMsIDB4NkVEMywgMHg2RUQzLCAweDE5QjMsIDB4NkVENCwgMHg2RUQ0LCAweDEwQzIsDQotICAgIDB4NkVFRiwgMHg2RUVGLCAweDFDMjgsIDB4NkVGNCwgMHg2RUY0LCAweDE5RTEsIDB4NkVGOCwgMHg2RUY4LCAweDFFODgsDQotICAgIDB4NkVGRSwgMHg2RUZFLCAweDBFQzQsIDB4NkVGRiwgMHg2RUZGLCAweDEyNDcsIDB4NkYwMSwgMHg2RjAxLCAweDE3MTEsDQotICAgIDB4NkYwMiwgMHg2RjAyLCAweDFEOUUsIDB4NkYwNiwgMHg2RjA2LCAweDFDQzYsIDB4NkYwRiwgMHg2RjBGLCAweDExRDksDQotICAgIDB4NkYxMSwgMHg2RjExLCAweDBERjIsIDB4NkYxNCwgMHg2RjE0LCAweDE3NTIsIDB4NkYxNSwgMHg2RjE1LCAweDFBOEYsDQotICAgIDB4NkYyMCwgMHg2RjIwLCAweDEyM0EsIDB4NkYyMiwgMHg2RjIyLCAweDFERDgsIDB4NkYyMywgMHg2RjIzLCAweDExNzQsDQotICAgIDB4NkYyQiwgMHg2RjJCLCAweDEyNDgsIDB4NkYyQywgMHg2RjJDLCAweDFCMkYsIDB4NkYzMSwgMHg2RjMxLCAweDE1RDUsDQotICAgIDB4NkYzMiwgMHg2RjMyLCAweDFCQzIsIDB4NkYzOCwgMHg2RjM4LCAweDFBMjcsIDB4NkYzRiwgMHg2RjNGLCAweDE5OTcsDQotICAgIDB4NkY0MSwgMHg2RjQxLCAweDE3N0MsIDB4NkY1MSwgMHg2RjUxLCAweDEzNDYsIDB4NkY1NCwgMHg2RjU0LCAweDBFNDIsDQotICAgIDB4NkY1NywgMHg2RjU3LCAweDFCNzksIDB4NkY1OCwgMHg2RjU4LCAweDEzMzMsIDB4NkY1QSwgMHg2RjVBLCAweDE2MDIsDQotICAgIDB4NkY1QiwgMHg2RjVCLCAweDE5ODEsIDB4NkY1RSwgMHg2RjVFLCAweDExQTMsIDB4NkY1RiwgMHg2RjVGLCAweDE1MjQsDQotICAgIDB4NkY2MiwgMHg2RjYyLCAweDFFRUQsIDB4NkY2NCwgMHg2RjY0LCAweDE4REEsIDB4NkY2RCwgMHg2RjZELCAweDEwODAsDQotICAgIDB4NkY2RSwgMHg2RjZFLCAweDFBOTAsIDB4NkY3MCwgMHg2RjcwLCAweDBGOTIsIDB4NkY3QSwgMHg2RjdBLCAweDE5N0QsDQotICAgIDB4NkY3QywgMHg2RjdDLCAweDEwRjUsIDB4NkY3RCwgMHg2RjdELCAweDEzQ0EsIDB4NkY3RSwgMHg2RjdFLCAweDEyMUYsDQotICAgIDB4NkY4MSwgMHg2RjgxLCAweDE0RDAsIDB4NkY4NCwgMHg2Rjg0LCAweDFCODAsIDB4NkY4OCwgMHg2Rjg4LCAweDFDMDQsDQotICAgIDB4NkY4RCwgMHg2RjhELCAweDFBRTAsIDB4NkY4RSwgMHg2RjhFLCAweDFENUEsIDB4NkY5MCwgMHg2RjkwLCAweDE4NjEsDQotICAgIDB4NkY5NCwgMHg2Rjk0LCAweDFFODksIDB4NkY5NywgMHg2Rjk3LCAweDBEQTAsIDB4NkZBMywgMHg2RkEzLCAweDFERDksDQotICAgIDB4NkZBNCwgMHg2RkE0LCAweDFEMTYsIDB4NkZBNywgMHg2RkE3LCAweDExOUIsIDB4NkZBRSwgMHg2RkFFLCAweDFGMDMsDQotICAgIDB4NkZBRiwgMHg2RkFGLCAweDFCOTcsIDB4NkZCMSwgMHg2RkIxLCAweDFBMDUsIDB4NkZCMywgMHg2RkIzLCAweDE3QjUsDQotICAgIDB4NkZCOSwgMHg2RkI5LCAweDEwODEsIDB4NkZCRSwgMHg2RkJFLCAweDEwNzUsIDB4NkZDMCwgMHg2RkMwLCAweDBFMzEsDQotICAgIDB4NkZDMSwgMHg2RkMxLCAweDFDRUEsIDB4NkZDMiwgMHg2RkMyLCAweDExODYsIDB4NkZDMywgMHg2RkMzLCAweDEwNEYsDQotICAgIDB4NkZDQSwgMHg2RkNBLCAweDE3OTMsIDB4NkZENSwgMHg2RkQ1LCAweDE2MkQsIDB4NkZEQSwgMHg2RkRBLCAweDE3N0QsDQotICAgIDB4NkZERiwgMHg2RkRGLCAweDFBNzAsIDB4NkZFMCwgMHg2RkUwLCAweDFFOEEsIDB4NkZFMSwgMHg2RkUxLCAweDE4QkUsDQotICAgIDB4NkZFNCwgMHg2RkU0LCAweDEwQzMsIDB4NkZFOSwgMHg2RkU5LCAweDFFOEIsIDB4NkZFQiwgMHg2RkVCLCAweDExMzMsDQotICAgIDB4NkZFQywgMHg2RkVDLCAweDFCMDAsIDB4NkZFRiwgMHg2RkVGLCAweDFDRUIsIDB4NkZGMSwgMHg2RkYxLCAweDE0NkUsDQotICAgIDB4NkZGRSwgMHg2RkZFLCAweDExNjEsIDB4NzAwMSwgMHg3MDAxLCAweDE3MDIsIDB4NzAwNSwgMHg3MDA1LCAweDFFNjIsDQotICAgIDB4NzAwNiwgMHg3MDA2LCAweDEwRDYsIDB4NzAwOSwgMHg3MDA5LCAweDE0OUIsIDB4NzAwQiwgMHg3MDBCLCAweDE2ODcsDQotICAgIDB4NzAwRiwgMHg3MDBGLCAweDExRTcsIDB4NzAxMSwgMHg3MDExLCAweDFEOTYsIDB4NzAxNSwgMHg3MDE1LCAweDE0NkYsDQotICAgIDB4NzAxOCwgMHg3MDE4LCAweDExQTQsIDB4NzAxQSwgMHg3MDFBLCAweDFEREEsIDB4NzAxQiwgMHg3MDFCLCAweDE3N0UsDQotICAgIDB4NzAxQywgMHg3MDFDLCAweDE4RTIsIDB4NzAxRCwgMHg3MDFELCAweDExNkQsIDB4NzAxRSwgMHg3MDFFLCAweDFBNEMsDQotICAgIDB4NzAxRiwgMHg3MDFGLCAweDE1OEIsIDB4NzAyMywgMHg3MDIzLCAweDFFMEYsIDB4NzAyNywgMHg3MDI3LCAweDExQkIsDQotICAgIDB4NzAyOCwgMHg3MDI4LCAweDExQzAsIDB4NzAyRiwgMHg3MDJGLCAweDE3N0YsIDB4NzAzNywgMHg3MDM3LCAweDE5MjUsDQotICAgIDB4NzAzRSwgMHg3MDNFLCAweDExMjksIDB4NzA0QywgMHg3MDRDLCAweDBFRjEsIDB4NzA1MCwgMHg3MDUwLCAweDFFNjMsDQotICAgIDB4NzA1MSwgMHg3MDUxLCAweDE1QkEsIDB4NzA1OCwgMHg3MDU4LCAweDFDRjYsIDB4NzA1RCwgMHg3MDVELCAweDFFOEMsDQotICAgIDB4NzA2MywgMHg3MDYzLCAweDEyNDksIDB4NzA2QiwgMHg3MDZCLCAweDFFQkIsIDB4NzA3MCwgMHg3MDcwLCAweDFGMDQsDQotICAgIDB4NzA3OCwgMHg3MDc4LCAweDBGNTEsIDB4NzA3QywgMHg3MDdDLCAweDE5NzIsIDB4NzA3RCwgMHg3MDdELCAweDE5QjQsDQotICAgIDB4NzA4NSwgMHg3MDg1LCAweDBFNjEsIDB4NzA4QSwgMHg3MDhBLCAweDFDOTksIDB4NzA4RSwgMHg3MDhFLCAweDE3NjcsDQotICAgIDB4NzA5MiwgMHg3MDkyLCAweDFDMzgsIDB4NzA5OCwgMHg3MDk4LCAweDFGNTUsIDB4NzA5OSwgMHg3MDk5LCAweDE5NUUsDQotICAgIDB4NzA5QSwgMHg3MDlBLCAweDBGMDYsIDB4NzBBMSwgMHg3MEExLCAweDFBNEQsIDB4NzBBNCwgMHg3MEE0LCAweDE1OEMsDQotICAgIDB4NzBBQiwgMHg3MEFCLCAweDFFM0MsIDB4NzBBQywgMHg3MEFDLCAweDBFMEEsIDB4NzBBRCwgMHg3MEFELCAweDFDRjcsDQotICAgIDB4NzBBRiwgMHg3MEFGLCAweDFFNjQsIDB4NzBCMywgMHg3MEIzLCAweDEzQkEsIDB4NzBCNywgMHg3MEI3LCAweDFBRTEsDQotICAgIDB4NzBCOCwgMHg3MEI4LCAweDE5NzMsIDB4NzBCOSwgMHg3MEI5LCAweDFBMjgsIDB4NzBDOCwgMHg3MEM4LCAweDExODEsDQotICAgIDB4NzBDQiwgMHg3MENCLCAweDFGNDcsIDB4NzBDRiwgMHg3MENGLCAweDE3QjYsIDB4NzBEOCwgMHg3MEQ4LCAweDFFQjIsDQotICAgIDB4NzBEOSwgMHg3MEQ5LCAweDExMUYsIDB4NzBERCwgMHg3MERELCAweDFCMTcsIDB4NzBERiwgMHg3MERGLCAweDE3NTMsDQotICAgIDB4NzBGMSwgMHg3MEYxLCAweDBFNjIsIDB4NzBGOSwgMHg3MEY5LCAweDFENUIsIDB4NzBGRCwgMHg3MEZELCAweDEzRUMsDQotICAgIDB4NzEwNCwgMHg3MTA0LCAweDFGMkYsIDB4NzEwOSwgMHg3MTA5LCAweDE3MjAsIDB4NzEwQywgMHg3MTBDLCAweDFCMDEsDQotICAgIDB4NzExOSwgMHg3MTE5LCAweDEzNzEsIDB4NzExQSwgMHg3MTFBLCAweDE0MkIsIDB4NzExRSwgMHg3MTFFLCAweDEwRTUsDQotICAgIDB4NzEyMSwgMHg3MTIxLCAweDEyRDcsIDB4NzEyNiwgMHg3MTI2LCAweDFDMzksIDB4NzEzMCwgMHg3MTMwLCAweDE3NjgsDQotICAgIDB4NzEzNiwgMHg3MTM2LCAweDE3NTQsIDB4NzE0NywgMHg3MTQ3LCAweDFGNDEsIDB4NzE0OSwgMHg3MTQ5LCAweDExNzUsDQotICAgIDB4NzE0QSwgMHg3MTRBLCAweDFGMzgsIDB4NzE0QywgMHg3MTRDLCAweDFFRUUsIDB4NzE0RSwgMHg3MTRFLCAweDFBMDYsDQotICAgIDB4NzE1MCwgMHg3MTUwLCAweDE3ODAsIDB4NzE1NiwgMHg3MTU2LCAweDEwMkQsIDB4NzE1OSwgMHg3MTU5LCAweDE3NTUsDQotICAgIDB4NzE1QywgMHg3MTVDLCAweDE4NUEsIDB4NzE1RSwgMHg3MTVFLCAweDE0QzYsIDB4NzE2NCwgMHg3MTY0LCAweDEyNkMsDQotICAgIDB4NzE2NSwgMHg3MTY1LCAweDFFRDUsIDB4NzE2NiwgMHg3MTY2LCAweDFGMjgsIDB4NzE2NywgMHg3MTY3LCAweDFBOTEsDQotICAgIDB4NzE2OSwgMHg3MTY5LCAweDEzODYsIDB4NzE2QywgMHg3MTZDLCAweDE3MDMsIDB4NzE2RSwgMHg3MTZFLCAweDE5NUYsDQotICAgIDB4NzE3RCwgMHg3MTdELCAweDE1MzQsIDB4NzE4NCwgMHg3MTg0LCAweDE2NjAsIDB4NzE4OSwgMHg3MTg5LCAweDE4NjIsDQotICAgIDB4NzE4QSwgMHg3MThBLCAweDE4NkQsIDB4NzE4RiwgMHg3MThGLCAweDFGMzAsIDB4NzE5MiwgMHg3MTkyLCAweDFFNjUsDQotICAgIDB4NzE5NCwgMHg3MTk0LCAweDE4MkIsIDB4NzE5OSwgMHg3MTk5LCAweDFGNzAsIDB4NzE5RiwgMHg3MTlGLCAweDE2MDMsDQotICAgIDB4NzFBMiwgMHg3MUEyLCAweDEzRUQsIDB4NzFBQywgMHg3MUFDLCAweDE3QjcsIDB4NzFCMSwgMHg3MUIxLCAweDE3NjMsDQotICAgIDB4NzFCOSwgMHg3MUJBLCAweDFGNzEsIDB4NzFCRSwgMHg3MUJFLCAweDFDQjEsIDB4NzFDMSwgMHg3MUMxLCAweDE3NzAsDQotICAgIDB4NzFDMywgMHg3MUMzLCAweDE3NTYsIDB4NzFDOCwgMHg3MUM4LCAweDExMEYsIDB4NzFDOSwgMHg3MUM5LCAweDEwRTYsDQotICAgIDB4NzFDRSwgMHg3MUNFLCAweDExQ0MsIDB4NzFEMCwgMHg3MUQwLCAweDEyMjAsIDB4NzFEMiwgMHg3MUQyLCAweDE1OEQsDQotICAgIDB4NzFENCwgMHg3MUQ0LCAweDEzODcsIDB4NzFENSwgMHg3MUQ1LCAweDE3NTcsIDB4NzFERiwgMHg3MURGLCAweDE3ODEsDQotICAgIDB4NzFFNSwgMHg3MUU1LCAweDFBOTIsIDB4NzFFNiwgMHg3MUU2LCAweDFCOTgsIDB4NzFFNywgMHg3MUU3LCAweDE1RDYsDQotICAgIDB4NzFFRCwgMHg3MUVELCAweDFDNEIsIDB4NzFFRSwgMHg3MUVFLCAweDE1NjEsIDB4NzFGQiwgMHg3MUZCLCAweDFGMzEsDQotICAgIDB4NzFGQywgMHg3MUZDLCAweDE2NzAsIDB4NzFGRSwgMHg3MUZFLCAweDEwQzQsIDB4NzFGRiwgMHg3MUZGLCAweDE4MEEsDQotICAgIDB4NzIwMCwgMHg3MjAwLCAweDFFMzMsIDB4NzIwNiwgMHg3MjA2LCAweDFEOTcsIDB4NzIxMCwgMHg3MjEwLCAweDExQTUsDQotICAgIDB4NzIxQiwgMHg3MjFCLCAweDExMkEsIDB4NzIyQSwgMHg3MjJBLCAweDFBOTMsIDB4NzIyQywgMHg3MjJDLCAweDFEM0IsDQotICAgIDB4NzIyRCwgMHg3MjJELCAweDE5QkIsIDB4NzIzMCwgMHg3MjMwLCAweDE4N0YsIDB4NzIzMiwgMHg3MjMyLCAweDE4OTcsDQotICAgIDB4NzIzNSwgMHg3MjM1LCAweDE5NzQsIDB4NzIzNiwgMHg3MjM2LCAweDE0MDksIDB4NzIzQSwgMHg3MjNBLCAweDE2RUQsDQotICAgIDB4NzIzQiwgMHg3MjNCLCAweDFGMUEsIDB4NzIzRCwgMHg3MjNELCAweDE0RTUsIDB4NzIzRSwgMHg3MjNFLCAweDE5MTYsDQotICAgIDB4NzI0MCwgMHg3MjQwLCAweDE0RTYsIDB4NzI0NiwgMHg3MjQ2LCAweDE5OTgsIDB4NzI0NywgMHg3MjQ3LCAweDFENjEsDQotICAgIDB4NzI0OCwgMHg3MjQ4LCAweDFENDUsIDB4NzI0QywgMHg3MjRDLCAweDFENTQsIDB4NzI1MiwgMHg3MjUyLCAweDFDMTcsDQotICAgIDB4NzI1OCwgMHg3MjU4LCAweDEwRDcsIDB4NzI1OSwgMHg3MjU5LCAweDE2OTYsIDB4NzI1QiwgMHg3MjVCLCAweDE4NDIsDQotICAgIDB4NzI1RCwgMHg3MjVELCAweDE0NzAsIDB4NzI1RiwgMHg3MjVGLCAweDEyQTksIDB4NzI2MSwgMHg3MjYxLCAweDEyQUEsDQotICAgIDB4NzI2MiwgMHg3MjYyLCAweDExQzEsIDB4NzI2NywgMHg3MjY3LCAweDEyQjYsIDB4NzI2OSwgMHg3MjY5LCAweDEyRjIsDQotICAgIDB4NzI3MiwgMHg3MjcyLCAweDE0RjksIDB4NzI3OSwgMHg3Mjc5LCAweDFEMzAsIDB4NzI3RCwgMHg3MjdELCAweDBFMzYsDQotICAgIDB4NzI4MCwgMHg3MjgwLCAweDE1MEMsIDB4NzI4MSwgMHg3MjgxLCAweDEyMEYsIDB4NzJBMiwgMHg3MkEyLCAweDEwRDgsDQotICAgIDB4NzJBNywgMHg3MkE3LCAweDFGNzMsIDB4NzJBQywgMHg3MkFDLCAweDBFMzcsIDB4NzJBRiwgMHg3MkFGLCAweDEzOTcsDQotICAgIDB4NzJDMCwgMHg3MkMwLCAweDE0RTcsIDB4NzJDMiwgMHg3MkMyLCAweDBGMDcsIDB4NzJDNCwgMHg3MkM0LCAweDE5RTIsDQotICAgIDB4NzJDRSwgMHg3MkNFLCAweDE2QzcsIDB4NzJEMCwgMHg3MkQwLCAweDFFOEQsIDB4NzJENywgMHg3MkQ3LCAweDBGNTIsDQotICAgIDB4NzJEOSwgMHg3MkQ5LCAweDE5Q0IsIDB4NzJFMSwgMHg3MkUxLCAweDBGMjcsIDB4NzJFOSwgMHg3MkU5LCAweDE1RDcsDQotICAgIDB4NzJGOCwgMHg3MkY4LCAweDEyMTAsIDB4NzJGOSwgMHg3MkY5LCAweDFFNTUsIDB4NzJGQywgMHg3MkZDLCAweDExM0YsDQotICAgIDB4NzJGRCwgMHg3MkZELCAweDFENTUsIDB4NzMwQSwgMHg3MzBBLCAweDE3OTQsIDB4NzMxNiwgMHg3MzE2LCAweDFCQzMsDQotICAgIDB4NzMxQiwgMHg3MzFCLCAweDEyNzksIDB4NzMxQywgMHg3MzFDLCAweDE2NEMsIDB4NzMxRCwgMHg3MzFELCAweDFBQjQsDQotICAgIDB4NzMyNSwgMHg3MzI1LCAweDE3RkEsIDB4NzMyOSwgMHg3MzI5LCAweDE1NkEsIDB4NzMyQSwgMHg3MzJBLCAweDE5Q0MsDQotICAgIDB4NzMyQiwgMHg3MzJCLCAweDEyQzgsIDB4NzMzNiwgMHg3MzM3LCAweDE4QkYsIDB4NzMzRSwgMHg3MzNFLCAweDFFREQsDQotICAgIDB4NzMzRiwgMHg3MzNGLCAweDE4ODAsIDB4NzM0NCwgMHg3MzQ0LCAweDE3QzAsIDB4NzM0NSwgMHg3MzQ1LCAweDE0OUMsDQotICAgIDB4NzM1MCwgMHg3MzUwLCAweDE5OTksIDB4NzM1MiwgMHg3MzUyLCAweDE3QjgsIDB4NzM1NywgMHg3MzU3LCAweDBGOEMsDQotICAgIDB4NzM2OCwgMHg3MzY4LCAweDEwRDksIDB4NzM2QSwgMHg3MzZBLCAweDFGMDUsIDB4NzM3MCwgMHg3MzcwLCAweDE3ODIsDQotICAgIDB4NzM3MiwgMHg3MzcyLCAweDFGMEQsIDB4NzM3NSwgMHg3Mzc1LCAweDExODgsIDB4NzM3OCwgMHg3Mzc4LCAweDE1RDgsDQotICAgIDB4NzM3QSwgMHg3MzdBLCAweDEwNzYsIDB4NzM3QiwgMHg3MzdCLCAweDFFMkQsIDB4NzM4NCwgMHg3Mzg0LCAweDFFM0QsDQotICAgIDB4NzM4NiwgMHg3Mzg2LCAweDE5NjAsIDB4NzM4NywgMHg3Mzg3LCAweDE1QjAsIDB4NzM4OSwgMHg3Mzg5LCAweDE3QzEsDQotICAgIDB4NzM4QiwgMHg3MzhCLCAweDE3RjIsIDB4NzM4RSwgMHg3MzhFLCAweDFBNEUsIDB4NzM5NCwgMHg3Mzk0LCAweDFCRjQsDQotICAgIDB4NzM5NiwgMHg3Mzk2LCAweDBGNTMsIDB4NzM5NywgMHg3Mzk3LCAweDE4NDMsIDB4NzM5OCwgMHg3Mzk4LCAweDBGRkUsDQotICAgIDB4NzM5RiwgMHg3MzlGLCAweDEzMEYsIDB4NzNBNywgMHg3M0E3LCAweDE4REIsIDB4NzNBOSwgMHg3M0E5LCAweDE3RTEsDQotICAgIDB4NzNBRCwgMHg3M0FELCAweDE0NzEsIDB4NzNCMiwgMHg3M0IyLCAweDExOEYsIDB4NzNCMywgMHg3M0IzLCAweDEwQTQsDQotICAgIDB4NzNCOSwgMHg3M0I5LCAweDFFM0UsIDB4NzNDMCwgMHg3M0MwLCAweDEzMUUsIDB4NzNDMiwgMHg3M0MyLCAweDBEN0MsDQotICAgIDB4NzNDOSwgMHg3M0M5LCAweDEzMTAsIDB4NzNDQSwgMHg3M0NBLCAweDE0QkMsIDB4NzNDQywgMHg3M0NDLCAweDFEQjgsDQotICAgIDB4NzNDRCwgMHg3M0NELCAweDFCNTAsIDB4NzNDRiwgMHg3M0NGLCAweDBEOEYsIDB4NzNENiwgMHg3M0Q2LCAweDBGMDgsDQotICAgIDB4NzNEOSwgMHg3M0Q5LCAweDBFRDUsIDB4NzNERCwgMHg3M0RELCAweDFGMjksIDB4NzNERSwgMHg3M0RFLCAweDExMjAsDQotICAgIDB4NzNFMCwgMHg3M0UwLCAweDFBRTIsIDB4NzNFMywgMHg3M0UzLCAweDE2MTMsIDB4NzNFNCwgMHg3M0U0LCAweDEzQ0IsDQotICAgIDB4NzNFNSwgMHg3M0U1LCAweDE5MTcsIDB4NzNFNiwgMHg3M0U2LCAweDFFMjEsIDB4NzNFOSwgMHg3M0U5LCAweDFFNjYsDQotICAgIDB4NzNFQSwgMHg3M0VBLCAweDBGOUYsIDB4NzNFRCwgMHg3M0VELCAweDEzMzQsIDB4NzNGNywgMHg3M0Y3LCAweDEyRDgsDQotICAgIDB4NzNGOSwgMHg3M0Y5LCAweDE1NkIsIDB4NzNGRCwgMHg3M0ZELCAweDFBNEYsIDB4NzNGRSwgMHg3M0ZFLCAweDFFM0YsDQotICAgIDB4NzQwMSwgMHg3NDAxLCAweDE1MzUsIDB4NzQwMywgMHg3NDAzLCAweDBGNTQsIDB4NzQwNSwgMHg3NDA1LCAweDExNDAsDQotICAgIDB4NzQwNiwgMHg3NDA2LCAweDEyMTEsIDB4NzQwNywgMHg3NDA3LCAweDE1RDksIDB4NzQwOSwgMHg3NDA5LCAweDExRTgsDQotICAgIDB4NzQxMywgMHg3NDEzLCAweDE3RTIsIDB4NzQxQiwgMHg3NDFCLCAweDFDQ0MsIDB4NzQyMCwgMHg3NDIwLCAweDFBMDcsDQotICAgIDB4NzQyMSwgMHg3NDIxLCAweDE2MDQsIDB4NzQyMiwgMHg3NDIyLCAweDFDRUMsIDB4NzQyNSwgMHg3NDI1LCAweDFFOEUsDQotICAgIDB4NzQyNiwgMHg3NDI2LCAweDBGRkYsIDB4NzQyOCwgMHg3NDI4LCAweDBFQzUsIDB4NzQyQSwgMHg3NDJBLCAweDEwMDAsDQotICAgIDB4NzQyQiwgMHg3NDJCLCAweDEzRUUsIDB4NzQyQywgMHg3NDJDLCAweDE3RTMsIDB4NzQyRSwgMHg3NDJFLCAweDFBQkMsDQotICAgIDB4NzQyRiwgMHg3NDJGLCAweDBFRjIsIDB4NzQzMCwgMHg3NDMwLCAweDE3NjksIDB4NzQzMywgMHg3NDMzLCAweDEyMjksDQotICAgIDB4NzQzNCwgMHg3NDM0LCAweDBGQ0IsIDB4NzQzNSwgMHg3NDM1LCAweDE0NTEsIDB4NzQzNiwgMHg3NDM2LCAweDFEM0MsDQotICAgIDB4NzQzOCwgMHg3NDM4LCAweDFDRUQsIDB4NzQzQSwgMHg3NDNBLCAweDEzOUIsIDB4NzQzRiwgMHg3NDNGLCAweDFFQTgsDQotICAgIDB4NzQ0MCwgMHg3NDQwLCAweDE4NDQsIDB4NzQ0MSwgMHg3NDQxLCAweDEyQUIsIDB4NzQ0MywgMHg3NDQzLCAweDFDODYsDQotICAgIDB4NzQ0NCwgMHg3NDQ0LCAweDE1MzYsIDB4NzQ0QiwgMHg3NDRCLCAweDE4OTgsIDB4NzQ1NSwgMHg3NDU1LCAweDFEQzcsDQotICAgIDB4NzQ1NywgMHg3NDU3LCAweDE4ODEsIDB4NzQ1OSwgMHg3NDU5LCAweDEwNEQsIDB4NzQ1QSwgMHg3NDVBLCAweDFFOEYsDQotICAgIDB4NzQ1QiwgMHg3NDVCLCAweDE3ODMsIDB4NzQ1QywgMHg3NDVDLCAweDE4QzEsIDB4NzQ1RSwgMHg3NDVFLCAweDE1MEQsDQotICAgIDB4NzQ1RiwgMHg3NDVGLCAweDE2MkEsIDB4NzQ2MCwgMHg3NDYwLCAweDExRTksIDB4NzQ2MiwgMHg3NDYyLCAweDE4MkMsDQotICAgIDB4NzQ2NCwgMHg3NDY0LCAweDE4MEIsIDB4NzQ2NSwgMHg3NDY1LCAweDE3QzQsIDB4NzQ2OCwgMHg3NDY4LCAweDFCNTEsDQotICAgIDB4NzQ2OSwgMHg3NDY5LCAweDFFNjcsIDB4NzQ2QSwgMHg3NDZBLCAweDEyMzEsIDB4NzQ2RiwgMHg3NDZGLCAweDExNDEsDQotICAgIDB4NzQ3RSwgMHg3NDdFLCAweDBGQkUsIDB4NzQ4MiwgMHg3NDgyLCAweDEwMDEsIDB4NzQ4MywgMHg3NDgzLCAweDEyMTIsDQotICAgIDB4NzQ4NywgMHg3NDg3LCAweDE1MzcsIDB4NzQ4OSwgMHg3NDg5LCAweDExNzYsIDB4NzQ4QiwgMHg3NDhCLCAweDE5OUEsDQotICAgIDB4NzQ5OCwgMHg3NDk4LCAweDEyMjEsIDB4NzQ5QywgMHg3NDlDLCAweDFFRUYsIDB4NzQ5RSwgMHg3NDlFLCAweDEzMUYsDQotICAgIDB4NzQ5RiwgMHg3NDlGLCAweDBFNjMsIDB4NzRBMSwgMHg3NEExLCAweDFCNTIsIDB4NzRBMywgMHg3NEEzLCAweDEwMDIsDQotICAgIDB4NzRBNSwgMHg3NEE1LCAweDBFNjQsIDB4NzRBNywgMHg3NEE3LCAweDEzQTEsIDB4NzRBOCwgMHg3NEE4LCAweDFCOTksDQotICAgIDB4NzRBQSwgMHg3NEFBLCAweDFBOTQsIDB4NzRCMCwgMHg3NEIwLCAweDFFRDYsIDB4NzRCMiwgMHg3NEIyLCAweDE1REEsDQotICAgIDB4NzRCNSwgMHg3NEI1LCAweDE3MzMsIDB4NzRCOSwgMHg3NEI5LCAweDE2MDUsIDB4NzRCRCwgMHg3NEJELCAweDE0RjMsDQotICAgIDB4NzRCRiwgMHg3NEJGLCAweDE1MzgsIDB4NzRDNiwgMHg3NEM2LCAweDFCNkQsIDB4NzRDQSwgMHg3NENBLCAweDBFNjUsDQotICAgIDB4NzRDRiwgMHg3NENGLCAweDExQkMsIDB4NzRENCwgMHg3NEQ0LCAweDE3ODQsIDB4NzREOCwgMHg3NEQ4LCAweDBFRjMsDQotICAgIDB4NzREQSwgMHg3NERBLCAweDFCOUEsIDB4NzREQywgMHg3NERDLCAweDBFREUsIDB4NzRFMCwgMHg3NEUwLCAweDFFOTAsDQotICAgIDB4NzRFMiwgMHg3NEUyLCAweDFEOUYsIDB4NzRFMywgMHg3NEUzLCAweDFENDYsIDB4NzRFNiwgMHg3NEU2LCAweDE3RDQsDQotICAgIDB4NzRFRSwgMHg3NEVFLCAweDE3Q0MsIDB4NzRGNywgMHg3NEY3LCAweDE5NjEsIDB4NzUwMSwgMHg3NTAxLCAweDEzQkIsDQotICAgIDB4NzUwNCwgMHg3NTA0LCAweDBFMzgsIDB4NzUxMSwgMHg3NTExLCAweDFCMTgsIDB4NzUxNSwgMHg3NTE1LCAweDE3Q0QsDQotICAgIDB4NzUxOCwgMHg3NTE4LCAweDBEQzEsIDB4NzUxQSwgMHg3NTFBLCAweDE2ODgsIDB4NzUxQiwgMHg3NTFCLCAweDFDMEQsDQotICAgIDB4NzUxRiwgMHg3NTFGLCAweDE0RkEsIDB4NzUyMywgMHg3NTIzLCAweDE0QkQsIDB4NzUyNSwgMHg3NTI1LCAweDE0RkIsDQotICAgIDB4NzUyNiwgMHg3NTI2LCAweDE1OEUsIDB4NzUyOCwgMHg3NTI4LCAweDE4MkQsIDB4NzUyQiwgMHg3NTJCLCAweDEzQ0MsDQotICAgIDB4NzUyQywgMHg3NTJDLCAweDE4MkUsIDB4NzUzMCwgMHg3NTMwLCAweDFBMDgsIDB4NzUzMSwgMHg3NTMxLCAweDE4QzIsDQotICAgIDB4NzUzMiwgMHg3NTMyLCAweDBEQ0MsIDB4NzUzMywgMHg3NTMzLCAweDE2NzEsIDB4NzUzNywgMHg3NTM3LCAweDEwMzUsDQotICAgIDB4NzUzOCwgMHg3NTM4LCAweDFBMDksIDB4NzUzQSwgMHg3NTNBLCAweDFBNTAsIDB4NzU0NywgMHg3NTQ3LCAweDBGQUIsDQotICAgIDB4NzU0QywgMHg3NTRDLCAweDBFODUsIDB4NzU0RiwgMHg3NTRGLCAweDE3RkIsIDB4NzU1MSwgMHg3NTUxLCAweDFBMEEsDQotICAgIDB4NzU1MywgMHg3NTUzLCAweDEwOEIsIDB4NzU1NCwgMHg3NTU0LCAweDEzMzUsIDB4NzU1OSwgMHg3NTU5LCAweDExRUEsDQotICAgIDB4NzU1QiwgMHg3NTVCLCAweDFCNTMsIDB4NzU1QywgMHg3NTVDLCAweDFDNzksIDB4NzU1RCwgMHg3NTVELCAweDEyRDksDQotICAgIDB4NzU2MiwgMHg3NTYyLCAweDFEQjksIDB4NzU2NSwgMHg3NTY1LCAweDExNEEsIDB4NzU2NiwgMHg3NTY2LCAweDFGNDgsDQotICAgIDB4NzU2QSwgMHg3NTZBLCAweDEzODgsIDB4NzU2RiwgMHg3NTZGLCAweDFCMDIsIDB4NzU3MCwgMHg3NTcwLCAweDE5MTgsDQotICAgIDB4NzU3NSwgMHg3NTc1LCAweDFFQkMsIDB4NzU3NiwgMHg3NTc2LCAweDEwOTYsIDB4NzU3OCwgMHg3NTc4LCAweDEwMDMsDQotICAgIDB4NzU3QSwgMHg3NTdBLCAweDBEREEsIDB4NzU3RiwgMHg3NTdGLCAweDEwMDQsIDB4NzU4NiwgMHg3NTg2LCAweDBEREIsDQotICAgIDB4NzU4NywgMHg3NTg3LCAweDFBRTMsIDB4NzU4QSwgMHg3NThBLCAweDFDMTgsIDB4NzU4QiwgMHg3NThCLCAweDFEQkEsDQotICAgIDB4NzU4RSwgMHg3NThFLCAweDE1OTAsIDB4NzU4RiwgMHg3NThGLCAweDE1OEYsIDB4NzU5MSwgMHg3NTkxLCAweDE5MDMsDQotICAgIDB4NzU5RCwgMHg3NTlELCAweDE0QkUsIDB4NzVBNSwgMHg3NUE1LCAweDBERjMsIDB4NzVBQiwgMHg3NUFCLCAweDE3M0YsDQotICAgIDB4NzVCMSwgMHg3NUIxLCAweDFEODYsIDB4NzVCMiwgMHg3NUIyLCAweDFEQUYsIDB4NzVCMywgMHg3NUIzLCAweDBEQzIsDQotICAgIDB4NzVCNSwgMHg3NUI1LCAweDE5NjIsIDB4NzVCOCwgMHg3NUI4LCAweDEwNzcsIDB4NzVCOSwgMHg3NUI5LCAweDFCNTQsDQotICAgIDB4NzVCQywgMHg3NUJDLCAweDEwRjYsIDB4NzVCRCwgMHg3NUJELCAweDE5Q0QsIDB4NzVCRSwgMHg3NUJFLCAweDFCNkUsDQotICAgIDB4NzVDMiwgMHg3NUMyLCAweDBEN0QsIDB4NzVDNSwgMHg3NUM1LCAweDEzQkMsIDB4NzVDNywgMHg3NUM3LCAweDFCMTksDQotICAgIDB4NzVDRCwgMHg3NUNELCAweDE5MTksIDB4NzVEMiwgMHg3NUQyLCAweDE3MDQsIDB4NzVENCwgMHg3NUQ0LCAweDFDQjIsDQotICAgIDB4NzVENSwgMHg3NUQ1LCAweDFGNTYsIDB4NzVEOCwgMHg3NUQ4LCAweDExMDAsIDB4NzVEOSwgMHg3NUQ5LCAweDBFNjYsDQotICAgIDB4NzVEQiwgMHg3NURCLCAweDFEMUYsIDB4NzVFMiwgMHg3NUUyLCAweDEyMTMsIDB4NzVGMCwgMHg3NUYwLCAweDEwODIsDQotICAgIDB4NzVGMiwgMHg3NUYyLCAweDEyMzIsIDB4NzVGNCwgMHg3NUY0LCAweDFDQjMsIDB4NzVGQSwgMHg3NUZBLCAweDE0NTIsDQotICAgIDB4NzVGQywgMHg3NUZDLCAweDBFQTIsIDB4NzYwMCwgMHg3NjAwLCAweDE3MTIsIDB4NzYwRCwgMHg3NjBELCAweDE3MDUsDQotICAgIDB4NzYxOSwgMHg3NjE5LCAweDE1OTEsIDB4NzYxRiwgMHg3NjFGLCAweDE3QzUsIDB4NzYyMCwgMHg3NjIwLCAweDFCRTcsDQotICAgIDB4NzYyMSwgMHg3NjIxLCAweDFCQzQsIDB4NzYyMiwgMHg3NjIyLCAweDEzMzYsIDB4NzYyNCwgMHg3NjI0LCAweDExRUIsDQotICAgIDB4NzYyNiwgMHg3NjI2LCAweDE1REIsIDB4NzYzQiwgMHg3NjNCLCAweDExREEsIDB4NzY0MiwgMHg3NjQyLCAweDExQ0QsDQotICAgIDB4NzY0QywgMHg3NjRDLCAweDE2QzIsIDB4NzY0RSwgMHg3NjRFLCAweDBEQTEsIDB4NzY1MiwgMHg3NjUyLCAweDE4QzMsDQotICAgIDB4NzY1NiwgMHg3NjU2LCAweDEzQTIsIDB4NzY2MSwgMHg3NjYxLCAweDFDQjQsIDB4NzY2NCwgMHg3NjY0LCAweDFBMjAsDQotICAgIDB4NzY2OSwgMHg3NjY5LCAweDExMTgsIDB4NzY2QywgMHg3NjZDLCAweDE1MzksIDB4NzY3MCwgMHg3NjcwLCAweDE3Q0UsDQotICAgIDB4NzY3MiwgMHg3NjcyLCAweDFBMEIsIDB4NzY3OCwgMHg3Njc4LCAweDBFODYsIDB4NzY3QiwgMHg3NjdCLCAweDExMTAsDQotICAgIDB4NzY3QywgMHg3NjdDLCAweDEzNDcsIDB4NzY3RCwgMHg3NjdFLCAweDEzODEsIDB4NzY4NCwgMHg3Njg0LCAweDE5RTMsDQotICAgIDB4NzY4NiwgMHg3Njg2LCAweDBERjQsIDB4NzY4NywgMHg3Njg3LCAweDFFRjAsIDB4NzY4RSwgMHg3NjhFLCAweDBGMjgsDQotICAgIDB4NzY5MCwgMHg3NjkwLCAweDBFQTMsIDB4NzY5MywgMHg3NjkzLCAweDFFOTEsIDB4NzZBRSwgMHg3NkFFLCAweDFEQjAsDQotICAgIDB4NzZCQSwgMHg3NkJBLCAweDFDNjgsIDB4NzZCRiwgMHg3NkJGLCAweDEyOTMsIDB4NzZDMiwgMHg3NkMyLCAweDE4NDUsDQotICAgIDB4NzZDMywgMHg3NkMzLCAweDEzNzIsIDB4NzZDNiwgMHg3NkM2LCAweDE0MkMsIDB4NzZDOCwgMHg3NkM4LCAweDE3ODUsDQotICAgIDB4NzZDQSwgMHg3NkNBLCAweDE5MjYsIDB4NzZEMiwgMHg3NkQyLCAweDFERjEsIDB4NzZENiwgMHg3NkQ2LCAweDBERjUsDQotICAgIDB4NzZEQiwgMHg3NkRCLCAweDE1NkMsIDB4NzZEQywgMHg3NkRDLCAweDEwQzUsIDB4NzZERSwgMHg3NkRFLCAweDE5N0UsDQotICAgIDB4NzZERiwgMHg3NkRGLCAweDEyN0IsIDB4NzZFMSwgMHg3NkUxLCAweDFCNTUsIDB4NzZFMywgMHg3NkUzLCAweDBEQzMsDQotICAgIDB4NzZFNCwgMHg3NkU0LCAweDEzMzcsIDB4NzZFNywgMHg3NkU3LCAweDExQTYsIDB4NzZFRSwgMHg3NkVFLCAweDEyQjcsDQotICAgIDB4NzZGMiwgMHg3NkYyLCAweDEyN0EsIDB4NzZGNCwgMHg3NkY0LCAweDFCM0YsIDB4NzZGOCwgMHg3NkY4LCAweDE0RTgsDQotICAgIDB4NzZGQywgMHg3NkZDLCAweDEzMzgsIDB4NzZGRSwgMHg3NkZFLCAweDE2MTQsIDB4NzcwMSwgMHg3NzAxLCAweDE1NkQsDQotICAgIDB4NzcwNCwgMHg3NzA0LCAweDEyODQsIDB4NzcwOCwgMHg3NzA4LCAweDFDRkQsIDB4NzcwOSwgMHg3NzA5LCAweDEyRkUsDQotICAgIDB4NzcwQiwgMHg3NzBCLCAweDBEQTIsIDB4NzcxRSwgMHg3NzFFLCAweDFCNTYsIDB4NzcyMCwgMHg3NzIwLCAweDEyODUsDQotICAgIDB4NzcyOSwgMHg3NzI5LCAweDFFNDAsIDB4NzczNywgMHg3NzM3LCAweDBGOEEsIDB4NzczOCwgMHg3NzM4LCAweDEyQUMsDQotICAgIDB4NzczQSwgMHg3NzNBLCAweDFBOTUsIDB4NzczQywgMHg3NzNDLCAweDE2QjQsIDB4Nzc0MCwgMHg3NzQwLCAweDFCOTEsDQotICAgIDB4Nzc0RCwgMHg3NzRELCAweDFFNDEsIDB4Nzc1QiwgMHg3NzVCLCAweDFBNTEsIDB4Nzc2MSwgMHg3NzYxLCAweDE1REMsDQotICAgIDB4Nzc2MywgMHg3NzYzLCAweDEwREEsIDB4Nzc2NiwgMHg3NzY2LCAweDEyQjgsIDB4Nzc2QiwgMHg3NzZCLCAweDFDMTksDQotICAgIDB4Nzc3OSwgMHg3Nzc5LCAweDEwQzYsIDB4Nzc3RSwgMHg3NzdFLCAweDBFQTQsIDB4Nzc3RiwgMHg3NzdGLCAweDE3OTUsDQotICAgIDB4Nzc4QiwgMHg3NzhCLCAweDFCNTcsIDB4Nzc5MSwgMHg3NzkxLCAweDEyOTQsIDB4Nzc5RSwgMHg3NzlFLCAweDEyNEEsDQotICAgIDB4NzdBNSwgMHg3N0E1LCAweDEzQUUsIDB4NzdBQywgMHg3N0FDLCAweDE2MTUsIDB4NzdBRCwgMHg3N0FELCAweDExQ0UsDQotICAgIDB4NzdCMCwgMHg3N0IwLCAweDBEQzQsIDB4NzdCMywgMHg3N0IzLCAweDEwRjcsIDB4NzdCQiwgMHg3N0JCLCAweDFDMEUsDQotICAgIDB4NzdCQywgMHg3N0JDLCAweDBFMjUsIDB4NzdCRiwgMHg3N0JGLCAweDBGNTUsIDB4NzdENywgMHg3N0Q3LCAweDFDNEMsDQotICAgIDB4NzdEQiwgMHg3N0RCLCAweDEyQUQsIDB4NzdEQywgMHg3N0RDLCAweDBGREMsIDB4NzdFMiwgMHg3N0UyLCAweDE2NEQsDQotICAgIDB4NzdFMywgMHg3N0UzLCAweDE5MDQsIDB4NzdFNSwgMHg3N0U1LCAweDFCMzAsIDB4NzdFOSwgMHg3N0U5LCAweDBGNTYsDQotICAgIDB4NzdFRCwgMHg3N0VELCAweDEwNkMsIDB4NzdFRSwgMHg3N0VFLCAweDE3RjYsIDB4NzdFRiwgMHg3N0VGLCAweDBGMjksDQotICAgIDB4NzdGMywgMHg3N0YzLCAweDE1MjUsIDB4NzgwMiwgMHg3ODAyLCAweDE0OUQsIDB4NzgxMiwgMHg3ODEyLCAweDE0NTMsDQotICAgIDB4NzgyNSwgMHg3ODI1LCAweDFCMzEsIDB4NzgyNiwgMHg3ODI2LCAweDFCRDAsIDB4NzgyNywgMHg3ODI3LCAweDFDQ0QsDQotICAgIDB4NzgyQywgMHg3ODJDLCAweDEyMkMsIDB4NzgzMiwgMHg3ODMyLCAweDFEODcsIDB4NzgzNCwgMHg3ODM0LCAweDFEM0QsDQotICAgIDB4Nzg0NSwgMHg3ODQ1LCAweDBGQTAsIDB4Nzg0RiwgMHg3ODRGLCAweDE3NTgsIDB4Nzg1RCwgMHg3ODVELCAweDFDM0EsDQotICAgIDB4Nzg2QiwgMHg3ODZCLCAweDExRUMsIDB4Nzg2QywgMHg3ODZDLCAweDBFNjcsIDB4Nzg2RiwgMHg3ODZGLCAweDE3NTksDQotICAgIDB4Nzg3QywgMHg3ODdDLCAweDE0M0EsIDB4Nzg4MSwgMHg3ODgxLCAweDEwMDUsIDB4Nzg4NywgMHg3ODg3LCAweDFBNTIsDQotICAgIDB4Nzg4QywgMHg3ODhDLCAweDExQjAsIDB4Nzg4RCwgMHg3ODhELCAweDE2RDcsIDB4Nzg4RSwgMHg3ODhFLCAweDE1QkIsDQotICAgIDB4Nzg5MSwgMHg3ODkxLCAweDE0NTQsIDB4Nzg5NywgMHg3ODk3LCAweDE3RTQsIDB4NzhBMywgMHg3OEEzLCAweDBEQjAsDQotICAgIDB4NzhBNywgMHg3OEE3LCAweDEzQTMsIDB4NzhBOSwgMHg3OEE5LCAweDE1MjYsIDB4NzhCQSwgMHg3OEJCLCAweDFFQzcsDQotICAgIDB4NzhCQywgMHg3OEJDLCAweDEyMzMsIDB4NzhDMSwgMHg3OEMxLCAweDE5NjMsIDB4NzhDNSwgMHg3OEM1LCAweDEzNUMsDQotICAgIDB4NzhDQSwgMHg3OENBLCAweDExQzIsIDB4NzhDQiwgMHg3OENCLCAweDFCOEEsIDB4NzhDRSwgMHg3OENFLCAweDBFODcsDQotICAgIDB4NzhEMCwgMHg3OEQwLCAweDEzMzksIDB4NzhFOCwgMHg3OEU4LCAweDEyMzQsIDB4NzhFQywgMHg3OEVDLCAweDBFNjgsDQotICAgIDB4NzhFRiwgMHg3OEVGLCAweDEwMDYsIDB4NzhGNSwgMHg3OEY1LCAweDBEQTMsIDB4NzhGQiwgMHg3OEZCLCAweDEzM0EsDQotICAgIDB4NzkwMSwgMHg3OTAxLCAweDFDM0IsIDB4NzkwRSwgMHg3OTBFLCAweDFDM0MsIDB4NzkxNiwgMHg3OTE2LCAweDE3MzQsDQotICAgIDB4NzkyQSwgMHg3OTJBLCAweDExNjIsIDB4NzkyQiwgMHg3OTJCLCAweDExNkUsIDB4NzkyQywgMHg3OTJDLCAweDEzM0IsDQotICAgIDB4NzkzQSwgMHg3OTNBLCAweDE2NEUsIDB4NzkzRSwgMHg3OTNFLCAweDE0OUUsIDB4Nzk0MCwgMHg3OTQwLCAweDE0OUYsDQotICAgIDB4Nzk0MSwgMHg3OTQxLCAweDEwMDcsIDB4Nzk0NywgMHg3OTQ4LCAweDEwMDgsIDB4Nzk0OSwgMHg3OTQ5LCAweDFCMzIsDQotICAgIDB4Nzk1MCwgMHg3OTUwLCAweDE4NDYsIDB4Nzk1NiwgMHg3OTU2LCAweDFBOTYsIDB4Nzk1NywgMHg3OTU3LCAweDFCMzMsDQotICAgIDB4Nzk1QSwgMHg3OTVBLCAweDFBOTcsIDB4Nzk1QiwgMHg3OTVCLCAweDBFMEIsIDB4Nzk1QywgMHg3OTVDLCAweDFFOTIsDQotICAgIDB4Nzk1RCwgMHg3OTVELCAweDFDN0EsIDB4Nzk1RSwgMHg3OTVFLCAweDE2NzIsIDB4Nzk2MCwgMHg3OTYwLCAweDE0QTAsDQotICAgIDB4Nzk2NSwgMHg3OTY1LCAweDE0RTksIDB4Nzk2OCwgMHg3OTY4LCAweDFEQTAsIDB4Nzk2RCwgMHg3OTZELCAweDFBNzEsDQotICAgIDB4Nzk3QSwgMHg3OTdBLCAweDEwMEEsIDB4Nzk3RiwgMHg3OTdGLCAweDExQjEsIDB4Nzk4MSwgMHg3OTgxLCAweDBGQ0MsDQotICAgIDB4Nzk4RCwgMHg3OThELCAweDFFQkQsIDB4Nzk4RSwgMHg3OThFLCAweDFBNTMsIDB4Nzk4RiwgMHg3OThGLCAweDEzRDksDQotICAgIDB4Nzk5MSwgMHg3OTkxLCAweDE4NDcsIDB4NzlBNiwgMHg3OUE2LCAweDE3MTMsIDB4NzlBNywgMHg3OUE3LCAweDFGNzQsDQotICAgIDB4NzlBQSwgMHg3OUFBLCAweDE1M0EsIDB4NzlBRSwgMHg3OUFFLCAweDExOUMsIDB4NzlCMSwgMHg3OUIxLCAweDEwQzcsDQotICAgIDB4NzlCMywgMHg3OUIzLCAweDE3MDYsIDB4NzlCOSwgMHg3OUI5LCAweDE4NDgsIDB4NzlCRCwgMHg3OUJELCAweDBGQ0QsDQotICAgIDB4NzlCRSwgMHg3OUJFLCAweDFFQkUsIDB4NzlCRiwgMHg3OUJGLCAweDEwREIsIDB4NzlDMCwgMHg3OUMwLCAweDE1REQsDQotICAgIDB4NzlDMSwgMHg3OUMxLCAweDE0QTEsIDB4NzlDOSwgMHg3OUM5LCAweDEzQkQsIDB4NzlDQSwgMHg3OUNBLCAweDEwNDIsDQotICAgIDB4NzlDQiwgMHg3OUNCLCAweDFDNjksIDB4NzlEMSwgMHg3OUQxLCAweDBFREYsIDB4NzlEMiwgMHg3OUQyLCAweDFDM0QsDQotICAgIDB4NzlENSwgMHg3OUQ1LCAweDE0NTUsIDB4NzlEOCwgMHg3OUQ4LCAweDE0NTYsIDB4NzlERiwgMHg3OURGLCAweDFBOTgsDQotICAgIDB4NzlFNCwgMHg3OUU0LCAweDFDRDEsIDB4NzlFNiwgMHg3OUU2LCAweDFCNTgsIDB4NzlFNywgMHg3OUU3LCAweDE2Q0UsDQotICAgIDB4NzlFOSwgMHg3OUU5LCAweDFCNkYsIDB4NzlGQiwgMHg3OUZCLCAweDE5MUEsIDB4N0EwMCwgMHg3QTAwLCAweDFGNzUsDQotICAgIDB4N0EwNSwgMHg3QTA1LCAweDE1NzgsIDB4N0EwOCwgMHg3QTA4LCAweDBEQTQsIDB4N0EwQiwgMHg3QTBCLCAweDFBNTQsDQotICAgIDB4N0EwRCwgMHg3QTBELCAweDFDM0UsIDB4N0ExNCwgMHg3QTE0LCAweDE5NEEsIDB4N0ExNywgMHg3QTE3LCAweDFENTYsDQotICAgIDB4N0ExOSwgMHg3QTE5LCAweDFCNDAsIDB4N0ExQSwgMHg3QTFBLCAweDFDQjUsIDB4N0ExQywgMHg3QTFDLCAweDEyMDEsDQotICAgIDB4N0ExRiwgMHg3QTFGLCAweDFEQTcsIDB4N0EyMCwgMHg3QTIwLCAweDFBOTksIDB4N0EyRSwgMHg3QTJFLCAweDFBQkQsDQotICAgIDB4N0EzMSwgMHg3QTMxLCAweDFDRDIsIDB4N0EzNiwgMHg3QTM2LCAweDE4NUIsIDB4N0EzNywgMHg3QTM3LCAweDFCNDEsDQotICAgIDB4N0EzQiwgMHg3QTNCLCAweDEwQzgsIDB4N0EzQywgMHg3QTNDLCAweDBEN0UsIDB4N0EzRCwgMHg3QTNELCAweDBFODgsDQotICAgIDB4N0EzRiwgMHg3QTNGLCAweDBFQTUsIDB4N0E0MCwgMHg3QTQwLCAweDBFQkIsIDB4N0E0NiwgMHg3QTQ2LCAweDEyQjksDQotICAgIDB4N0E0OSwgMHg3QTQ5LCAweDFDQjYsIDB4N0E0RCwgMHg3QTRELCAweDE5RTQsIDB4N0E0RSwgMHg3QTRFLCAweDE3ODYsDQotICAgIDB4N0E1NywgMHg3QTU3LCAweDE1REUsIDB4N0E2MSwgMHg3QTYxLCAweDE0RjYsIDB4N0E2MiwgMHg3QTYyLCAweDE3OTYsDQotICAgIDB4N0E2OSwgMHg3QTY5LCAweDE3QzYsIDB4N0E2QiwgMHg3QTZCLCAweDFFQzksIDB4N0E3MCwgMHg3QTcwLCAweDE3MDcsDQotICAgIDB4N0E3NCwgMHg3QTc0LCAweDFFNEIsIDB4N0E3NiwgMHg3QTc2LCAweDBGNTcsIDB4N0E3OSwgMHg3QTc5LCAweDBGN0QsDQotICAgIDB4N0E3QSwgMHg3QTdBLCAweDBFRDYsIDB4N0E3RCwgMHg3QTdELCAweDFBNTUsIDB4N0E3RiwgMHg3QTdGLCAweDFCRjUsDQotICAgIDB4N0E4MSwgMHg3QTgxLCAweDEwRUEsIDB4N0E4NCwgMHg3QTg0LCAweDFCOTIsIDB4N0E4OCwgMHg3QTg4LCAweDE4MEMsDQotICAgIDB4N0E5MiwgMHg3QTkyLCAweDFCNzAsIDB4N0E5MywgMHg3QTkzLCAweDFCQzUsIDB4N0E5NSwgMHg3QTk1LCAweDFBOUEsDQotICAgIDB4N0E5OCwgMHg3QTk4LCAweDBGNzIsIDB4N0E5RiwgMHg3QTlGLCAweDBGN0EsIDB4N0FBOSwgMHg3QUFBLCAweDE3RDUsDQotICAgIDB4N0FBRSwgMHg3QUFFLCAweDBGN0UsIDB4N0FBRiwgMHg3QUFGLCAweDE4MEQsIDB4N0FCQSwgMHg3QUJBLCAweDBGQTEsDQotICAgIDB4N0FDNCwgMHg3QUM0LCAweDFCOUIsIDB4N0FDNSwgMHg3QUM1LCAweDBGQTIsIDB4N0FDNywgMHg3QUM3LCAweDExMDEsDQotICAgIDB4N0FDQSwgMHg3QUNBLCAweDFBMjEsIDB4N0FDQiwgMHg3QUNCLCAweDEyMkQsIDB4N0FENywgMHg3QUQ3LCAweDEyQzksDQotICAgIDB4N0FEOSwgMHg3QUQ5LCAweDFCQjEsIDB4N0FERCwgMHg3QURELCAweDEzQkUsIDB4N0FERiwgMHg3QURGLCAweDBFNjksDQotICAgIDB4N0FFMCwgMHg3QUUwLCAweDE5OUIsIDB4N0FFMywgMHg3QUUzLCAweDFCMDMsIDB4N0FFNSwgMHg3QUU1LCAweDEwRjgsDQotICAgIDB4N0FFQSwgMHg3QUVBLCAweDE1REYsIDB4N0FFRCwgMHg3QUVELCAweDBEQjEsIDB4N0FFRiwgMHg3QUVGLCAweDEwNkQsDQotICAgIDB4N0FGNiwgMHg3QUY2LCAweDBFNkEsIDB4N0FGOSwgMHg3QUY5LCAweDFBRjQsIDB4N0FGQSwgMHg3QUZBLCAweDFDN0IsDQotICAgIDB4N0FGRiwgMHg3QUZGLCAweDBEQTUsIDB4N0IwRiwgMHg3QjBGLCAweDFFQUMsIDB4N0IxMSwgMHg3QjExLCAweDE1OTIsDQotICAgIDB4N0IxOSwgMHg3QjE5LCAweDE0RkMsIDB4N0IxQiwgMHg3QjFCLCAweDE5RTUsIDB4N0IxRSwgMHg3QjFFLCAweDFEMEYsDQotICAgIDB4N0IyMCwgMHg3QjIwLCAweDEyMkUsIDB4N0IyNiwgMHg3QjI2LCAweDE0MEEsIDB4N0IyQywgMHg3QjJDLCAweDFBNzIsDQotICAgIDB4N0IyRCwgMHg3QjJELCAweDExOTAsIDB4N0IzOSwgMHg3QjM5LCAweDE1NzksIDB4N0I0NiwgMHg3QjQ2LCAweDFEQkIsDQotICAgIDB4N0I0OSwgMHg3QjQ5LCAweDExMTEsIDB4N0I0QiwgMHg3QjRCLCAweDBGQkYsIDB4N0I0QywgMHg3QjRDLCAweDFBMEMsDQotICAgIDB4N0I0RCwgMHg3QjRELCAweDE2MTYsIDB4N0I0RiwgMHg3QjRGLCAweDEzOEUsIDB4N0I1MCwgMHg3QjUwLCAweDBGMDksDQotICAgIDB4N0I1MSwgMHg3QjUxLCAweDFDN0MsIDB4N0I1MiwgMHg3QjUyLCAweDFEMjAsIDB4N0I1NCwgMHg3QjU0LCAweDEwOEMsDQotICAgIDB4N0I1NiwgMHg3QjU2LCAweDFCRDgsIDB4N0I2MCwgMHg3QjYwLCAweDBGQUMsIDB4N0I2QywgMHg3QjZDLCAweDE1NkUsDQotICAgIDB4N0I2RSwgMHg3QjZFLCAweDE1MEUsIDB4N0I3NSwgMHg3Qjc1LCAweDE3NUEsIDB4N0I3RCwgMHg3QjdELCAweDE3QjksDQotICAgIDB4N0I4NywgMHg3Qjg3LCAweDBERjYsIDB4N0I4QiwgMHg3QjhCLCAweDFBMEQsIDB4N0I4RiwgMHg3QjhGLCAweDE5QkMsDQotICAgIDB4N0I5NCwgMHg3Qjk0LCAweDEzMjAsIDB4N0I5NSwgMHg3Qjk1LCAweDEwMEIsIDB4N0I5NywgMHg3Qjk3LCAweDE0QkYsDQotICAgIDB4N0I5QSwgMHg3QjlBLCAweDFCOEIsIDB4N0I5RCwgMHg3QjlELCAweDBFNDgsIDB4N0JBMSwgMHg3QkExLCAweDBFRjQsDQotICAgIDB4N0JBRCwgMHg3QkFELCAweDFBMEUsIDB4N0JCMSwgMHg3QkIxLCAweDE0RUEsIDB4N0JCNCwgMHg3QkI0LCAweDE5ODIsDQotICAgIDB4N0JCOCwgMHg3QkI4LCAweDE5Q0UsIDB4N0JDMCwgMHg3QkMwLCAweDFBMjIsIDB4N0JDMSwgMHg3QkMxLCAweDFFRjEsDQotICAgIDB4N0JDNCwgMHg3QkM0LCAweDEzOTgsIDB4N0JDNiwgMHg3QkM2LCAweDFBMEYsIDB4N0JDNywgMHg3QkM3LCAweDFENjIsDQotICAgIDB4N0JDOSwgMHg3QkM5LCAweDFDN0QsIDB4N0JEMiwgMHg3QkQyLCAweDE2NjEsIDB4N0JFMCwgMHg3QkUwLCAweDE1OTMsDQotICAgIDB4N0JFNCwgMHg3QkU0LCAweDEwREMsIDB4N0JFOSwgMHg3QkU5LCAweDE0QTIsIDB4N0MwNywgMHg3QzA3LCAweDFBQUQsDQotICAgIDB4N0MxMiwgMHg3QzEyLCAweDFCOUMsIDB4N0MxRSwgMHg3QzFFLCAweDEwNkUsIDB4N0MyMSwgMHg3QzIxLCAweDBEQTYsDQotICAgIDB4N0MyNywgMHg3QzI3LCAweDFFRjIsIDB4N0MyQSwgMHg3QzJBLCAweDE5ODMsIDB4N0MyQiwgMHg3QzJCLCAweDE1OTQsDQotICAgIDB4N0MzRCwgMHg3QzNELCAweDFDMEYsIDB4N0MzRSwgMHg3QzNFLCAweDExODcsIDB4N0MzRiwgMHg3QzNGLCAweDE0MEIsDQotICAgIDB4N0M0MywgMHg3QzQzLCAweDExMzQsIDB4N0M0QywgMHg3QzRDLCAweDFBRTQsIDB4N0M0RCwgMHg3QzRELCAweDE5RTYsDQotICAgIDB4N0M2MCwgMHg3QzYwLCAweDExQkQsIDB4N0M2NCwgMHg3QzY0LCAweDFDMTAsIDB4N0M2QywgMHg3QzZDLCAweDEyMTQsDQotICAgIDB4N0M3MywgMHg3QzczLCAweDEyRkYsIDB4N0M4MywgMHg3QzgzLCAweDE0NTcsIDB4N0M4OSwgMHg3Qzg5LCAweDE0MkQsDQotICAgIDB4N0M5MiwgMHg3QzkyLCAweDEyMkYsIDB4N0M5NSwgMHg3Qzk1LCAweDEzMjEsIDB4N0M5NywgMHg3Qzk3LCAweDFBOUIsDQotICAgIDB4N0M5OCwgMHg3Qzk4LCAweDFBMjksIDB4N0M5RiwgMHg3QzlGLCAweDE1QTUsIDB4N0NBNSwgMHg3Q0E1LCAweDFBRjUsDQotICAgIDB4N0NBNywgMHg3Q0E3LCAweDE5OUMsIDB4N0NBRSwgMHg3Q0FFLCAweDExNTEsIDB4N0NCMSwgMHg3Q0IxLCAweDExNTIsDQotICAgIDB4N0NCMiwgMHg3Q0IyLCAweDFCOUUsIDB4N0NCMywgMHg3Q0IzLCAweDBERkUsIDB4N0NCOSwgMHg3Q0I5LCAweDE1RTAsDQotICAgIDB4N0NCRSwgMHg3Q0JFLCAweDFBNTYsIDB4N0NDQSwgMHg3Q0NBLCAweDFFOTMsIDB4N0NENiwgMHg3Q0Q2LCAweDEwOTcsDQotICAgIDB4N0NERSwgMHg3Q0RFLCAweDE0MkUsIDB4N0NERiwgMHg3Q0RGLCAweDFBOUMsIDB4N0NFMCwgMHg3Q0UwLCAweDBEREMsDQotICAgIDB4N0NFNywgMHg3Q0U3LCAweDExNTMsIDB4N0NGQiwgMHg3Q0ZCLCAweDBFODksIDB4N0NGRSwgMHg3Q0ZFLCAweDBGQTMsDQotICAgIDB4N0QwMCwgMHg3RDAwLCAweDEwMEMsIDB4N0QwMiwgMHg3RDAyLCAweDFBRTUsIDB4N0QwNCwgMHg3RDA0LCAweDE2RjEsDQotICAgIDB4N0QwNSwgMHg3RDA1LCAweDFFQjMsIDB4N0QwNiwgMHg3RDA2LCAweDE4NDksIDB4N0QwNywgMHg3RDA3LCAweDFGNTksDQotICAgIDB4N0QwOCwgMHg3RDA4LCAweDFFRDcsIDB4N0QwQSwgMHg3RDBCLCAweDEyRUEsIDB4N0QwRCwgMHg3RDBELCAweDEwMzYsDQotICAgIDB4N0QxMCwgMHg3RDEwLCAweDEwNTgsIDB4N0QxNCwgMHg3RDE0LCAweDE2MTcsIDB4N0QxNywgMHg3RDE3LCAweDE0QTMsDQotICAgIDB4N0QxOCwgMHg3RDE4LCAweDBGMTksIDB4N0QxOSwgMHg3RDE5LCAweDFCMzQsIDB4N0QxQSwgMHg3RDFBLCAweDBGRDgsDQotICAgIDB4N0QxQiwgMHg3RDFCLCAweDE0MkYsIDB4N0QyMCwgMHg3RDIwLCAweDE1OTUsIDB4N0QyMSwgMHg3RDIxLCAweDEzNUQsDQotICAgIDB4N0QyMiwgMHg3RDIyLCAweDE0RjcsIDB4N0QyQiwgMHg3RDJCLCAweDE5NjQsIDB4N0QyQywgMHg3RDJDLCAweDFBRTYsDQotICAgIDB4N0QyRSwgMHg3RDJFLCAweDFCQTksIDB4N0QyRiwgMHg3RDJGLCAweDExREIsIDB4N0QzMCwgMHg3RDMwLCAweDE1N0EsDQotICAgIDB4N0QzMywgMHg3RDMzLCAweDE2NzMsIDB4N0QzNSwgMHg3RDM1LCAweDE5Q0YsIDB4N0QzOSwgMHg3RDM5LCAweDE1OTYsDQotICAgIDB4N0QzQSwgMHg3RDNBLCAweDBEQzUsIDB4N0Q0MiwgMHg3RDQyLCAweDFBQkUsIDB4N0Q0MywgMHg3RDQzLCAweDFFNDIsDQotICAgIDB4N0Q0NCwgMHg3RDQ0LCAweDFBOUQsIDB4N0Q0NSwgMHg3RDQ1LCAweDBFNkIsIDB4N0Q0NiwgMHg3RDQ2LCAweDEzM0MsDQotICAgIDB4N0Q1MCwgMHg3RDUwLCAweDBFNDMsIDB4N0Q1RSwgMHg3RDVFLCAweDBGMkEsIDB4N0Q2MSwgMHg3RDYxLCAweDExMjEsDQotICAgIDB4N0Q2MiwgMHg3RDYyLCAweDFFNDMsIDB4N0Q2NiwgMHg3RDY2LCAweDBGRDksIDB4N0Q2OCwgMHg3RDY4LCAweDE4RTMsDQotICAgIDB4N0Q2QSwgMHg3RDZBLCAweDE5MzYsIDB4N0Q2RSwgMHg3RDZFLCAweDE1MEYsIDB4N0Q3MSwgMHg3RDcxLCAweDFEMjEsDQotICAgIDB4N0Q3MiwgMHg3RDcyLCAweDE0QTQsIDB4N0Q3MywgMHg3RDczLCAweDBEREQsIDB4N0Q3NiwgMHg3RDc2LCAweDFBMjMsDQotICAgIDB4N0Q3OSwgMHg3RDc5LCAweDBFMzksIDB4N0Q3RiwgMHg3RDdGLCAweDBGNTgsIDB4N0Q4RSwgMHg3RDhFLCAweDFBNTcsDQotICAgIDB4N0Q4RiwgMHg3RDhGLCAweDE1RTEsIDB4N0Q5MywgMHg3RDkzLCAweDBFNkMsIDB4N0Q5QywgMHg3RDlDLCAweDFBQkYsDQotICAgIDB4N0RBMCwgMHg3REEwLCAweDExQjIsIDB4N0RBMiwgMHg3REEyLCAweDFBRTcsIDB4N0RBQywgMHg3REFDLCAweDE1RTIsDQotICAgIDB4N0RBRCwgMHg3REFELCAweDE4QzQsIDB4N0RCMSwgMHg3REIxLCAweDBEREUsIDB4N0RCMiwgMHg3REIyLCAweDEyNUQsDQotICAgIDB4N0RCNCwgMHg3REI0LCAweDFDMDUsIDB4N0RCNSwgMHg3REI1LCAweDFCRDEsIDB4N0RCOCwgMHg3REI4LCAweDExRjYsDQotICAgIDB4N0RCQSwgMHg3REJBLCAweDEwMEQsIDB4N0RCQiwgMHg3REJCLCAweDFDRjgsIDB4N0RCRCwgMHg3REJELCAweDE5NzUsDQotICAgIDB4N0RCRSwgMHg3REJFLCAweDEyMDIsIDB4N0RCRiwgMHg3REJGLCAweDEyODYsIDB4N0RDNywgMHg3REM3LCAweDFDQjcsDQotICAgIDB4N0RDQSwgMHg3RENBLCAweDEwMUUsIDB4N0RDQiwgMHg3RENCLCAweDE0NTgsIDB4N0RENiwgMHg3REQ2LCAweDE1MTAsDQotICAgIDB4N0REOCwgMHg3REQ4LCAweDFERUEsIDB4N0REQSwgMHg3RERBLCAweDE1M0IsIDB4N0RERCwgMHg3RERELCAweDFCN0EsDQotICAgIDB4N0RERSwgMHg3RERFLCAweDEwNkYsIDB4N0RFMCwgMHg3REUwLCAweDFDMjksIDB4N0RFMSwgMHg3REUxLCAweDEzMTEsDQotICAgIDB4N0RFMywgMHg3REUzLCAweDE3NUIsIDB4N0RFOCwgMHg3REU4LCAweDFENjMsIDB4N0RFOSwgMHg3REU5LCAweDE3RTUsDQotICAgIDB4N0RFQywgMHg3REVDLCAweDEyODcsIDB4N0RFRiwgMHg3REVGLCAweDE4OTksIDB4N0RGNCwgMHg3REY0LCAweDExNzcsDQotICAgIDB4N0RGQiwgMHg3REZCLCAweDFDQjgsIDB4N0UwOSwgMHg3RTA5LCAweDFCNTksIDB4N0UwQSwgMHg3RTBBLCAweDE2REYsDQotICAgIDB4N0UxNSwgMHg3RTE1LCAweDE3QzcsIDB4N0UxQiwgMHg3RTFCLCAweDEzMjIsIDB4N0UxRCwgMHg3RTFELCAweDFCNUEsDQotICAgIDB4N0UxRSwgMHg3RTFFLCAweDFFOTQsIDB4N0UxRiwgMHg3RTFGLCAweDE4MUIsIDB4N0UyMSwgMHg3RTIxLCAweDE5QjUsDQotICAgIDB4N0UyMywgMHg3RTIzLCAweDFFNDQsIDB4N0UyQiwgMHg3RTJCLCAweDEzRUYsIDB4N0UyRSwgMHg3RTJFLCAweDFDN0UsDQotICAgIDB4N0UyRiwgMHg3RTJGLCAweDE3NUMsIDB4N0UzMSwgMHg3RTMxLCAweDFBQzAsIDB4N0UzNywgMHg3RTM3LCAweDExREMsDQotICAgIDB4N0UzRCwgMHg3RTNELCAweDFDNTksIDB4N0UzRSwgMHg3RTNFLCAweDE5RTcsIDB4N0U0MSwgMHg3RTQxLCAweDEzODksDQotICAgIDB4N0U0MywgMHg3RTQzLCAweDE0M0IsIDB4N0U0NiwgMHg3RTQ2LCAweDEyREEsIDB4N0U0NywgMHg3RTQ3LCAweDE4MEUsDQotICAgIDB4N0U1MiwgMHg3RTUyLCAweDFCMUEsIDB4N0U1NCwgMHg3RTU0LCAweDFCNDIsIDB4N0U1NSwgMHg3RTU1LCAweDE1M0MsDQotICAgIDB4N0U1RSwgMHg3RTVFLCAweDE4MEYsIDB4N0U2MSwgMHg3RTYxLCAweDE1RTMsIDB4N0U2OSwgMHg3RTY5LCAweDE2MzksDQotICAgIDB4N0U2QSwgMHg3RTZBLCAweDFGMDYsIDB4N0U2QiwgMHg3RTZCLCAweDBFOEEsIDB4N0U2RCwgMHg3RTZELCAweDBFM0EsDQotICAgIDB4N0U3MCwgMHg3RTcwLCAweDFBOUUsIDB4N0U3OSwgMHg3RTc5LCAweDE3NDAsIDB4N0U3QywgMHg3RTdDLCAweDBFOEIsDQotICAgIDB4N0U4MiwgMHg3RTgyLCAweDFCOUQsIDB4N0U4QywgMHg3RThDLCAweDE1QTYsIDB4N0U4RiwgMHg3RThGLCAweDFBMTAsDQotICAgIDB4N0U5MywgMHg3RTkzLCAweDE3ODcsIDB4N0U5NiwgMHg3RTk2LCAweDE1NUEsIDB4N0U5OCwgMHg3RTk4LCAweDFCOUYsDQotICAgIDB4N0U5QiwgMHg3RTlCLCAweDEwREQsIDB4N0U5QywgMHg3RTlDLCAweDExMzUsIDB4N0YzNiwgMHg3RjM2LCAweDE0MEMsDQotICAgIDB4N0YzOCwgMHg3RjM4LCAweDFFMDEsIDB4N0YzQSwgMHg3RjNBLCAweDBFNDQsIDB4N0Y0QywgMHg3RjRDLCAweDE2RTMsDQotICAgIDB4N0Y1MCwgMHg3RjUwLCAweDBFRjUsIDB4N0Y1NCwgMHg3RjU0LCAweDEyNUUsIDB4N0Y1NSwgMHg3RjU1LCAweDFEREIsDQotICAgIDB4N0Y2QSwgMHg3RjZBLCAweDFBQ0IsIDB4N0Y2QiwgMHg3RjZCLCAweDBGMEUsIDB4N0Y2RSwgMHg3RjZFLCAweDFDQjksDQotICAgIDB4N0Y3MCwgMHg3RjcwLCAweDEzOEYsIDB4N0Y3MiwgMHg3RjcyLCAweDE1MTEsIDB4N0Y3NSwgMHg3Rjc1LCAweDEyNkQsDQotICAgIDB4N0Y3NywgMHg3Rjc3LCAweDFEM0UsIDB4N0Y3OSwgMHg3Rjc5LCAweDEyMTUsIDB4N0Y4NSwgMHg3Rjg1LCAweDExMTksDQotICAgIDB4N0Y4OCwgMHg3Rjg4LCAweDEwMEUsIDB4N0Y4QSwgMHg3RjhBLCAweDE3MDgsIDB4N0Y4QywgMHg3RjhDLCAweDBEREYsDQotICAgIDB4N0Y4RSwgMHg3RjhFLCAweDEzMDAsIDB4N0Y5NCwgMHg3Rjk0LCAweDBFQTYsIDB4N0Y5QSwgMHg3RjlBLCAweDExOTEsDQotICAgIDB4N0Y5RSwgMHg3RjlFLCAweDE1RTQsIDB4N0ZBNCwgMHg3RkE0LCAweDBGNzMsIDB4N0ZBOCwgMHg3RkE4LCAweDE1M0QsDQotICAgIDB4N0ZBOSwgMHg3RkE5LCAweDE5MDUsIDB4N0ZCMiwgMHg3RkIyLCAweDFGNzYsIDB4N0ZCOCwgMHg3RkI4LCAweDEyMTYsDQotICAgIDB4N0ZCOSwgMHg3RkI5LCAweDBERkYsIDB4N0ZCRCwgMHg3RkJELCAweDE4NEEsIDB4N0ZDMSwgMHg3RkMxLCAweDE3Q0YsDQotICAgIDB4N0ZDNSwgMHg3RkM1LCAweDE2NEYsIDB4N0ZDQSwgMHg3RkNBLCAweDE5MjcsIDB4N0ZDQywgMHg3RkNDLCAweDE5MjgsDQotICAgIDB4N0ZDRSwgMHg3RkNFLCAweDExOTIsIDB4N0ZEMiwgMHg3RkQyLCAweDE2MkYsIDB4N0ZENCwgMHg3RkQ0LCAweDE0RUIsDQotICAgIDB4N0ZENSwgMHg3RkQ1LCAweDFGNjEsIDB4N0ZERiwgMHg3RkRGLCAweDE5RTgsIDB4N0ZFMCwgMHg3RkUwLCAweDFDOUEsDQotICAgIDB4N0ZFMSwgMHg3RkUxLCAweDE0NTksIDB4N0ZFOSwgMHg3RkU5LCAweDFENjQsIDB4N0ZFQiwgMHg3RkVCLCAweDE3RTYsDQotICAgIDB4N0ZGMCwgMHg3RkYwLCAweDFEREMsIDB4N0ZGOSwgMHg3RkY5LCAweDBGMkIsIDB4N0ZGQywgMHg3RkZDLCAweDE5MjksDQotICAgIDB4ODAwMCwgMHg4MDAwLCAweDE4MTAsIDB4ODAwMSwgMHg4MDAxLCAweDExQTcsIDB4ODAwMywgMHg4MDAzLCAweDBFQTcsDQotICAgIDB4ODAwNSwgMHg4MDA1LCAweDE5NjUsIDB4ODAwNiwgMHg4MDA2LCAweDEwMEYsIDB4ODAwOSwgMHg4MDA5LCAweDBGNTksDQotICAgIDB4ODAwQywgMHg4MDBDLCAweDE5MUIsIDB4ODAxMCwgMHg4MDEwLCAweDEwM0UsIDB4ODAxNSwgMHg4MDE1LCAweDBFNkQsDQotICAgIDB4ODAxNywgMHg4MDE3LCAweDEyQUUsIDB4ODAxOCwgMHg4MDE4LCAweDE4NjMsIDB4ODAyRCwgMHg4MDJELCAweDEwMTAsDQotICAgIDB4ODAzMywgMHg4MDMzLCAweDE5MUMsIDB4ODAzNiwgMHg4MDM2LCAweDE2RUUsIDB4ODAzRCwgMHg4MDNELCAweDFDRkUsDQotICAgIDB4ODAzRiwgMHg4MDNGLCAweDBFNkUsIDB4ODA0MywgMHg4MDQzLCAweDEwODMsIDB4ODA0NiwgMHg4MDQ2LCAweDExOTMsDQotICAgIDB4ODA0QSwgMHg4MDRBLCAweDExQ0YsIDB4ODA1NiwgMHg4MDU2LCAweDE1NkYsIDB4ODA1OCwgMHg4MDU4LCAweDE0NzcsDQotICAgIDB4ODA1QSwgMHg4MDVBLCAweDFDOUIsIDB4ODA1RSwgMHg4MDVFLCAweDEyRUMsIDB4ODA2RiwgMHg4MDZGLCAweDExNzgsDQotICAgIDB4ODA3MCwgMHg4MDcwLCAweDFDNUEsIDB4ODA3MiwgMHg4MDcyLCAweDE1NzAsIDB4ODA3MywgMHg4MDczLCAweDE4MkYsDQotICAgIDB4ODA3NywgMHg4MDc3LCAweDFCNDMsIDB4ODA3RCwgMHg4MDdELCAweDFDMjAsIDB4ODA3RSwgMHg4MDdFLCAweDExQkUsDQotICAgIDB4ODA3RiwgMHg4MDdGLCAweDE4RTAsIDB4ODA4NCwgMHg4MDg0LCAweDE5MUQsIDB4ODA4NSwgMHg4MDg1LCAweDE2MDYsDQotICAgIDB4ODA4NiwgMHg4MDg2LCAweDE0QTUsIDB4ODA4NywgMHg4MDg3LCAweDFBOUYsIDB4ODA4OSwgMHg4MDg5LCAweDE4RDUsDQotICAgIDB4ODA4QiwgMHg4MDhCLCAweDExRkQsIDB4ODA4QywgMHg4MDhDLCAweDEwMTEsIDB4ODA5NiwgMHg4MDk2LCAweDFDM0YsDQotICAgIDB4ODA5QiwgMHg4MDlCLCAweDFFMDIsIDB4ODA5RCwgMHg4MDlELCAweDBEQTcsIDB4ODBBMSwgMHg4MEExLCAweDBFQTgsDQotICAgIDB4ODBBMiwgMHg4MEEyLCAweDFCMzUsIDB4ODBBNSwgMHg4MEE1LCAweDE0NUEsIDB4ODBBOSwgMHg4MEE5LCAweDBFM0IsDQotICAgIDB4ODBBQSwgMHg4MEFBLCAweDEzNUUsIDB4ODBBRiwgMHg4MEFGLCAweDBGREQsIDB4ODBCMSwgMHg4MEIxLCAweDBGMUEsDQotICAgIDB4ODBCMiwgMHg4MEIyLCAweDE4RDYsIDB4ODBCNCwgMHg4MEI0LCAweDFGMUIsIDB4ODBCQSwgMHg4MEJBLCAweDFENzQsDQotICAgIDB4ODBDMywgMHg4MEMzLCAweDE4OUEsIDB4ODBDNCwgMHg4MEM0LCAweDFBRDEsIDB4ODBDQywgMHg4MENDLCAweDEzNzMsDQotICAgIDB4ODBDRSwgMHg4MENFLCAweDFEMTAsIDB4ODBEQSwgMHg4MERBLCAweDEzNzQsIDB4ODBEQiwgMHg4MERCLCAweDBEQ0QsDQotICAgIDB4ODBERSwgMHg4MERFLCAweDFEODgsIDB4ODBFMSwgMHg4MEUxLCAweDFFOTUsIDB4ODBFNCwgMHg4MEU0LCAweDE4REMsDQotICAgIDB4ODBFNSwgMHg4MEU1LCAweDE1MTIsIDB4ODBGMSwgMHg4MEYxLCAweDBGMEEsIDB4ODBGNCwgMHg4MEY0LCAweDEwRjksDQotICAgIDB4ODBGOCwgMHg4MEY4LCAweDFGNTEsIDB4ODBGRCwgMHg4MEZELCAweDEwNTksIDB4ODEwMiwgMHg4MTAyLCAweDFCMzYsDQotICAgIDB4ODEwNSwgMHg4MTA1LCAweDFFNTYsIDB4ODEwNiwgMHg4MTA2LCAweDFDOUMsIDB4ODEwNywgMHg4MTA3LCAweDFFNTcsDQotICAgIDB4ODEwOCwgMHg4MTA4LCAweDEyNzIsIDB4ODEwQSwgMHg4MTBBLCAweDFCRTgsIDB4ODExOCwgMHg4MTE4LCAweDE3RTcsDQotICAgIDB4ODExQSwgMHg4MTFBLCAweDBEOTAsIDB4ODExQiwgMHg4MTFCLCAweDBFNkYsIDB4ODEyMywgMHg4MTIzLCAweDE2MTgsDQotICAgIDB4ODEyOSwgMHg4MTI5LCAweDE1RTUsIDB4ODEyQiwgMHg4MTJCLCAweDFDRkIsIDB4ODEyRiwgMHg4MTJGLCAweDFEODksDQotICAgIDB4ODEzOSwgMHg4MTM5LCAweDFCQzYsIDB4ODEzRSwgMHg4MTNFLCAweDE0NUIsIDB4ODE0QiwgMHg4MTRCLCAweDE2RTAsDQotICAgIDB4ODE0RSwgMHg4MTRFLCAweDE2NzQsIDB4ODE1MCwgMHg4MTUxLCAweDE0MEQsIDB4ODE1NCwgMHg4MTU0LCAweDBERTAsDQotICAgIDB4ODE1NSwgMHg4MTU1LCAweDE3RTgsIDB4ODE2NSwgMHg4MTY1LCAweDE1NzEsIDB4ODE2NiwgMHg4MTY2LCAweDEwNTMsDQotICAgIDB4ODE2QiwgMHg4MTZCLCAweDFBQzEsIDB4ODE3MCwgMHg4MTcwLCAweDE4MTEsIDB4ODE3MSwgMHg4MTcxLCAweDBFMTgsDQotICAgIDB4ODE3OCwgMHg4MTc4LCAweDE5OUQsIDB4ODE3OSwgMHg4MTc5LCAweDEzREEsIDB4ODE3QSwgMHg4MTdBLCAweDE1M0UsDQotICAgIDB4ODE3RiwgMHg4MTdGLCAweDFEMjUsIDB4ODE4MCwgMHg4MTgwLCAweDEzNUYsIDB4ODE4OCwgMHg4MTg4LCAweDBFMzIsDQotICAgIDB4ODE4QSwgMHg4MThBLCAweDEzMjMsIDB4ODE4RiwgMHg4MThGLCAweDBFQTksIDB4ODE5QSwgMHg4MTlBLCAweDE0MEYsDQotICAgIDB4ODE5QywgMHg4MTlDLCAweDEyM0IsIDB4ODE5RCwgMHg4MTlELCAweDE2MkIsIDB4ODFBMCwgMHg4MUEwLCAweDBGMkMsDQotICAgIDB4ODFBMywgMHg4MUEzLCAweDFCNzEsIDB4ODFBOCwgMHg4MUE4LCAweDFENUMsIDB4ODFCMywgMHg4MUIzLCAweDE1M0YsDQotICAgIDB4ODFCNSwgMHg4MUI1LCAweDFDOTEsIDB4ODFCQSwgMHg4MUJBLCAweDE4RjgsIDB4ODFCRCwgMHg4MUJELCAweDEwODQsDQotICAgIDB4ODFCRSwgMHg4MUJFLCAweDFGMDcsIDB4ODFCRiwgMHg4MUJGLCAweDEwNTAsIDB4ODFDMCwgMHg4MUMwLCAweDExMDcsDQotICAgIDB4ODFDMiwgMHg4MUMyLCAweDE0NUMsIDB4ODFDNiwgMHg4MUM2LCAweDE3MUMsIDB4ODFDRCwgMHg4MUNELCAweDFBNzMsDQotICAgIDB4ODFEOCwgMHg4MUQ4LCAweDExM0EsIDB4ODFERiwgMHg4MURGLCAweDE5OUUsIDB4ODFFMywgMHg4MUUzLCAweDE2NzUsDQotICAgIDB4ODFFNSwgMHg4MUU1LCAweDE3RDcsIDB4ODFFNywgMHg4MUU3LCAweDE5OUYsIDB4ODFFOCwgMHg4MUU4LCAweDEyMkEsDQotICAgIDB4ODFFQSwgMHg4MUVBLCAweDE5NjYsIDB4ODFFRCwgMHg4MUVELCAweDFDOUQsIDB4ODFGMywgMHg4MUYzLCAweDFCMzcsDQotICAgIDB4ODFGNCwgMHg4MUY0LCAweDFDQkEsIDB4ODFGQSwgMHg4MUZBLCAweDEwQTUsIDB4ODFGQiwgMHg4MUZCLCAweDFCNUIsDQotICAgIDB4ODFGQywgMHg4MUZDLCAweDBGNUEsIDB4ODFGRSwgMHg4MUZFLCAweDE4QzUsIDB4ODIwNSwgMHg4MjA1LCAweDBGNUIsDQotICAgIDB4ODIwNywgMHg4MjA3LCAweDE3MzUsIDB4ODIwOCwgMHg4MjA4LCAweDFGNjIsIDB4ODIwQSwgMHg4MjBBLCAweDBGNUMsDQotICAgIDB4ODIwQywgMHg4MjBDLCAweDE1NTAsIDB4ODIwRCwgMHg4MjBELCAweDE0QTYsIDB4ODIxMiwgMHg4MjEyLCAweDE1MTMsDQotICAgIDB4ODIxQiwgMHg4MjFCLCAweDFCRjYsIDB4ODIxQywgMHg4MjFDLCAweDE2MTksIDB4ODIxRSwgMHg4MjFFLCAweDEyREIsDQotICAgIDB4ODIxRiwgMHg4MjFGLCAweDFBRTgsIDB4ODIyMSwgMHg4MjIxLCAweDBERTEsIDB4ODIyQSwgMHg4MjJBLCAweDFFMDMsDQotICAgIDB4ODIyQiwgMHg4MjJCLCAweDEzNjAsIDB4ODIyQywgMHg4MjJDLCAweDEzM0QsIDB4ODIzNSwgMHg4MjM1LCAweDFDREUsDQotICAgIDB4ODIzNiwgMHg4MjM2LCAweDEzMjQsIDB4ODIzNywgMHg4MjM3LCAweDFFNDUsIDB4ODIzOSwgMHg4MjM5LCAweDE1NDAsDQotICAgIDB4ODI0MCwgMHg4MjQwLCAweDE0MTAsIDB4ODI0NSwgMHg4MjQ1LCAweDE3MzYsIDB4ODI0NywgMHg4MjQ3LCAweDFBNTgsDQotICAgIDB4ODI1OSwgMHg4MjU5LCAweDFCQzcsIDB4ODI2NCwgMHg4MjY0LCAweDE5MDYsIDB4ODI2NiwgMHg4MjY2LCAweDFERUIsDQotICAgIDB4ODI2RSwgMHg4MjZFLCAweDBEQTgsIDB4ODI2RiwgMHg4MjZGLCAweDExNTQsIDB4ODI3MSwgMHg4MjcxLCAweDBEQTksDQotICAgIDB4ODI3MiwgMHg4MjcyLCAweDE0RjgsIDB4ODI3NiwgMHg4Mjc2LCAweDE3NkEsIDB4ODI3OCwgMHg4Mjc4LCAweDFDNDAsDQotICAgIDB4ODI3RSwgMHg4MjdFLCAweDE2RDgsIDB4ODI4QiwgMHg4MjhCLCAweDE4NEIsIDB4ODI4RCwgMHg4MjhELCAweDE5NzYsDQotICAgIDB4ODI4RSwgMHg4MjhFLCAweDBGN0YsIDB4ODI5MiwgMHg4MjkyLCAweDEyNUYsIDB4ODI5OSwgMHg4Mjk5LCAweDE0MTEsDQotICAgIDB4ODI5QSwgMHg4MjlBLCAweDExMDgsIDB4ODI5RCwgMHg4MjlELCAweDFCMzgsIDB4ODI5RiwgMHg4MjlGLCAweDE0Q0MsDQotICAgIDB4ODJBNSwgMHg4MkE1LCAweDBERjcsIDB4ODJBNiwgMHg4MkE2LCAweDFFOTYsIDB4ODJBOSwgMHg4MkE5LCAweDBGQ0UsDQotICAgIDB4ODJBQywgMHg4MkFDLCAweDE0MzAsIDB4ODJBRCwgMHg4MkFELCAweDFEM0YsIDB4ODJBRSwgMHg4MkFFLCAweDE3OTcsDQotICAgIDB4ODJBRiwgMHg4MkFGLCAweDE2ODksIDB4ODJCMSwgMHg4MkIxLCAweDFFQkYsIDB4ODJCMywgMHg4MkIzLCAweDEzNjEsDQotICAgIDB4ODJCNywgMHg4MkI3LCAweDFCMzksIDB4ODJCOCwgMHg4MkI4LCAweDE4NjQsIDB4ODJCOSwgMHg4MkI5LCAweDBGQzAsDQotICAgIDB4ODJCQiwgMHg4MkJCLCAweDFDNkEsIDB4ODJCQywgMHg4MkJDLCAweDEyQUYsIDB4ODJCRCwgMHg4MkJELCAweDE2OTcsDQotICAgIDB4ODJCRiwgMHg4MkJGLCAweDE5NTIsIDB4ODJEMSwgMHg4MkQxLCAweDE4ODIsIDB4ODJEMiwgMHg4MkQyLCAweDE3NkIsDQotICAgIDB4ODJENCwgMHg4MkQ0LCAweDFEMTEsIDB4ODJENSwgMHg4MkQ1LCAweDFDNDEsIDB4ODJENywgMHg4MkQ3LCAweDEyQ0EsDQotICAgIDB4ODJEQiwgMHg4MkRCLCAweDBEN0YsIDB4ODJERSwgMHg4MkRFLCAweDFEOEEsIDB4ODJERiwgMHg4MkRGLCAweDBGNUQsDQotICAgIDB4ODJFMSwgMHg4MkUxLCAweDE5MUUsIDB4ODJFNSwgMHg4MkU1LCAweDE2RjIsIDB4ODJFNiwgMHg4MkU2LCAweDBFQUEsDQotICAgIDB4ODJFNywgMHg4MkU3LCAweDE5RDAsIDB4ODJGMSwgMHg4MkYxLCAweDE3ODgsIDB4ODJGRCwgMHg4MkZELCAweDBFQUIsDQotICAgIDB4ODJGRSwgMHg4MkZFLCAweDFEQkMsIDB4ODMwMSwgMHg4MzAxLCAweDFCMDksIDB4ODMwMiwgMHg4MzAyLCAweDEyREMsDQotICAgIDB4ODMwMywgMHg4MzAzLCAweDEzOTksIDB4ODMwNCwgMHg4MzA0LCAweDBEODAsIDB4ODMwNSwgMHg4MzA1LCAweDEyQjAsDQotICAgIDB4ODMwOSwgMHg4MzA5LCAweDEyNTUsIDB4ODMxNywgMHg4MzE3LCAweDEyOTUsIDB4ODMyOCwgMHg4MzI4LCAweDE5NjcsDQotICAgIDB4ODMyQiwgMHg4MzJCLCAweDEyNjAsIDB4ODMyRiwgMHg4MzJGLCAweDEzREIsIDB4ODMzMSwgMHg4MzMxLCAweDE1RTYsDQotICAgIDB4ODMzNCwgMHg4MzM0LCAweDFGMDgsIDB4ODMzNSwgMHg4MzM1LCAweDE5MzcsIDB4ODMzNiwgMHg4MzM2LCAweDEwNUYsDQotICAgIDB4ODMzOCwgMHg4MzM4LCAweDE4MzAsIDB4ODMzOSwgMHg4MzM5LCAweDE3MzcsIDB4ODM0MCwgMHg4MzQwLCAweDE2MUEsDQotICAgIDB4ODM0NywgMHg4MzQ3LCAweDFFMUMsIDB4ODM0OSwgMHg4MzQ5LCAweDFDNDIsIDB4ODM0QSwgMHg4MzRBLCAweDFFNjgsDQotICAgIDB4ODM0RiwgMHg4MzRGLCAweDE5NEIsIDB4ODM1MSwgMHg4MzUxLCAweDE5MUYsIDB4ODM1MiwgMHg4MzUyLCAweDFFRjMsDQotICAgIDB4ODM3MywgMHg4MzczLCAweDExMDIsIDB4ODM3NywgMHg4Mzc3LCAweDFEQzgsIDB4ODM3QiwgMHg4MzdCLCAweDE5RTksDQotICAgIDB4ODM4OSwgMHg4Mzg5LCAweDEyMTcsIDB4ODM4QSwgMHg4MzhBLCAweDE5QTAsIDB4ODM4RSwgMHg4MzhFLCAweDE0QTcsDQotICAgIDB4ODM5NiwgMHg4Mzk2LCAweDBFNzAsIDB4ODM5OCwgMHg4Mzk4LCAweDE2NzYsIDB4ODM5RSwgMHg4MzlFLCAweDE3RTksDQotICAgIDB4ODNBMiwgMHg4M0EyLCAweDFFNTgsIDB4ODNBOSwgMHg4M0E5LCAweDE0MTIsIDB4ODNBQSwgMHg4M0FBLCAweDE2OTgsDQotICAgIDB4ODNBQiwgMHg4M0FCLCAweDEyM0MsIDB4ODNCRCwgMHg4M0JELCAweDEyNjEsIDB4ODNDMSwgMHg4M0MxLCAweDFDMjEsDQotICAgIDB4ODNDNSwgMHg4M0M1LCAweDBFRjYsIDB4ODNDOSwgMHg4M0M5LCAweDExQjMsIDB4ODNDQSwgMHg4M0NBLCAweDBGNkQsDQotICAgIDB4ODNDQywgMHg4M0NDLCAweDBGQUQsIDB4ODNEMywgMHg4M0QzLCAweDBFRTAsIDB4ODNENiwgMHg4M0Q2LCAweDFCQzgsDQotICAgIDB4ODNEQywgMHg4M0RDLCAweDFCRDIsIDB4ODNFOSwgMHg4M0U5LCAweDEzQ0QsIDB4ODNFQiwgMHg4M0VCLCAweDBGQzEsDQotICAgIDB4ODNFRiwgMHg4M0VGLCAweDFFQzAsIDB4ODNGMCwgMHg4M0YwLCAweDBFQUMsIDB4ODNGMSwgMHg4M0YxLCAweDEyMDMsDQotICAgIDB4ODNGMiwgMHg4M0YyLCAweDE0NUQsIDB4ODNGNCwgMHg4M0Y0LCAweDE2QzMsIDB4ODNGOSwgMHg4M0Y5LCAweDE5RDEsDQotICAgIDB4ODNGRCwgMHg4M0ZELCAweDE2MDcsIDB4ODQwMywgMHg4NDAzLCAweDFDOTIsIDB4ODQwNCwgMHg4NDA0LCAweDEwQzksDQotICAgIDB4ODQwQSwgMHg4NDBBLCAweDExNDcsIDB4ODQwQywgMHg4NDBDLCAweDEyN0MsIDB4ODQwRCwgMHg4NDBELCAweDFENkMsDQotICAgIDB4ODQwRSwgMHg4NDBFLCAweDE4OUIsIDB4ODQyOSwgMHg4NDI5LCAweDFDNkIsIDB4ODQyQywgMHg4NDJDLCAweDEyNEIsDQotICAgIDB4ODQzMSwgMHg4NDMxLCAweDFGMzksIDB4ODQzOCwgMHg4NDM4LCAweDE4QzYsIDB4ODQzRCwgMHg4NDNELCAweDExMjIsDQotICAgIDB4ODQ0OSwgMHg4NDQ5LCAweDE3NzEsIDB4ODQ1NywgMHg4NDU3LCAweDE5RDIsIDB4ODQ1QiwgMHg4NDVCLCAweDBEQjIsDQotICAgIDB4ODQ2MSwgMHg4NDYxLCAweDFEOEIsIDB4ODQ2MywgMHg4NDYzLCAweDEwRkEsIDB4ODQ2NiwgMHg4NDY2LCAweDE4OUMsDQotICAgIDB4ODQ2QiwgMHg4NDZCLCAweDFFOTcsIDB4ODQ2QywgMHg4NDZDLCAweDE5QTEsIDB4ODQ2RiwgMHg4NDZGLCAweDE2RjMsDQotICAgIDB4ODQ3NSwgMHg4NDc1LCAweDBGQTQsIDB4ODQ3QSwgMHg4NDdBLCAweDFCMTIsIDB4ODQ5MCwgMHg4NDkwLCAweDE1RTcsDQotICAgIDB4ODQ5NCwgMHg4NDk0LCAweDE2NTAsIDB4ODQ5OSwgMHg4NDk5LCAweDEyQkYsIDB4ODQ5QywgMHg4NDlDLCAweDE0QzAsDQotICAgIDB4ODRBMSwgMHg4NEExLCAweDEzNjIsIDB4ODRCMiwgMHg4NEIyLCAweDFEOEMsIDB4ODRCOCwgMHg4NEI4LCAweDFCMUIsDQotICAgIDB4ODRCQiwgMHg4NEJCLCAweDE2RjQsIDB4ODRCQywgMHg4NEJDLCAweDFCQzksIDB4ODRCRiwgMHg4NEJGLCAweDFFOTgsDQotICAgIDB4ODRDMCwgMHg4NEMwLCAweDE1QUQsIDB4ODRDMiwgMHg4NEMyLCAweDEyOTYsIDB4ODRDNCwgMHg4NEM0LCAweDFDN0YsDQotICAgIDB4ODRDNiwgMHg4NEM2LCAweDE1MjcsIDB4ODRDOSwgMHg4NEM5LCAweDE4MzEsIDB4ODRDQiwgMHg4NENCLCAweDBERjgsDQotICAgIDB4ODRDRCwgMHg4NENELCAweDE2NTEsIDB4ODREMSwgMHg4NEQxLCAweDE0QTgsIDB4ODREQSwgMHg4NERBLCAweDE1RTgsDQotICAgIDB4ODRFQywgMHg4NEVDLCAweDEzRjAsIDB4ODRFRSwgMHg4NEVFLCAweDExNzksIDB4ODRGNCwgMHg4NEY0LCAweDE2MUIsDQotICAgIDB4ODRGQywgMHg4NEZDLCAweDExRDAsIDB4ODUxMSwgMHg4NTExLCAweDEyOEIsIDB4ODUxMywgMHg4NTEzLCAweDEyNEMsDQotICAgIDB4ODUxNCwgMHg4NTE0LCAweDEzREMsIDB4ODUxNywgMHg4NTE3LCAweDE5NjgsIDB4ODUxOCwgMHg4NTE4LCAweDE0Q0QsDQotICAgIDB4ODUxQSwgMHg4NTFBLCAweDE4NkEsIDB4ODUxRSwgMHg4NTFFLCAweDExREQsIDB4ODUyMSwgMHg4NTIxLCAweDFCRDMsDQotICAgIDB4ODUyMywgMHg4NTIzLCAweDE5QTIsIDB4ODUyNSwgMHg4NTI1LCAweDFDNUIsIDB4ODUyQywgMHg4NTJDLCAweDE1OTcsDQotICAgIDB4ODUyRCwgMHg4NTJELCAweDE4RUYsIDB4ODUyRiwgMHg4NTJGLCAweDFCNUMsIDB4ODUzRCwgMHg4NTNELCAweDFENzUsDQotICAgIDB4ODUzRiwgMHg4NTNGLCAweDE4OUQsIDB4ODU0MSwgMHg4NTQxLCAweDEwODUsIDB4ODU0MywgMHg4NTQzLCAweDEzOEEsDQotICAgIDB4ODU0OSwgMHg4NTQ5LCAweDFDNDMsIDB4ODU0RSwgMHg4NTRFLCAweDBGMkQsIDB4ODU1MywgMHg4NTUzLCAweDE4NjUsDQotICAgIDB4ODU1OSwgMHg4NTU5LCAweDFFNzQsIDB4ODU2MywgMHg4NTYzLCAweDE2MUMsIDB4ODU2OCwgMHg4NTY4LCAweDBGOEQsDQotICAgIDB4ODU2OSwgMHg4NTY5LCAweDFEMDYsIDB4ODU2QSwgMHg4NTZBLCAweDEyREQsIDB4ODU2RCwgMHg4NTZELCAweDE1OTgsDQotICAgIDB4ODU4NCwgMHg4NTg0LCAweDEzMjUsIDB4ODU4NywgMHg4NTg3LCAweDEzMDEsIDB4ODU4RiwgMHg4NThGLCAweDE5MDcsDQotICAgIDB4ODU5MSwgMHg4NTkxLCAweDBERTIsIDB4ODU5NCwgMHg4NTk0LCAweDE5QTMsIDB4ODU5QiwgMHg4NTlCLCAweDE1NTEsDQotICAgIDB4ODVBNiwgMHg4NUE2LCAweDFCRjcsIDB4ODVBOCwgMHg4NUE4LCAweDFGMzUsIDB4ODVBOSwgMHg4NUE5LCAweDE0QzcsDQotICAgIDB4ODVBQSwgMHg4NUFBLCAweDE2NzcsIDB4ODVBRiwgMHg4NUFGLCAweDE1MTQsIDB4ODVCMCwgMHg4NUIwLCAweDFGMzIsDQotICAgIDB4ODVCQSwgMHg4NUJBLCAweDFBNzQsIDB4ODVDMSwgMHg4NUMxLCAweDBFQUQsIDB4ODVDOSwgMHg4NUM5LCAweDE5NjksDQotICAgIDB4ODVDRCwgMHg4NUNELCAweDExMzYsIDB4ODVDRSwgMHg4NUNFLCAweDE2NzgsIDB4ODVDRiwgMHg4NUNGLCAweDE5QTQsDQotICAgIDB4ODVENSwgMHg4NUQ1LCAweDE4NEMsIDB4ODVEQywgMHg4NURDLCAweDExNjMsIDB4ODVERCwgMHg4NURELCAweDE3OTgsDQotICAgIDB4ODVFNCwgMHg4NUU0LCAweDExMTIsIDB4ODVFNSwgMHg4NUU1LCAweDE2RjUsIDB4ODVFOSwgMHg4NUU5LCAweDEzOEIsDQotICAgIDB4ODVFQSwgMHg4NUVBLCAweDE1RTksIDB4ODVGNywgMHg4NUY3LCAweDE5RDMsIDB4ODVGQSwgMHg4NUZBLCAweDEyMjIsDQotICAgIDB4ODVGQiwgMHg4NUZCLCAweDFBQTAsIDB4ODVGRiwgMHg4NUZGLCAweDBFRTksIDB4ODYwMiwgMHg4NjAyLCAweDE3OTksDQotICAgIDB4ODYwNiwgMHg4NjA2LCAweDExQTgsIDB4ODYwNywgMHg4NjA3LCAweDE1OTksIDB4ODYwQSwgMHg4NjBBLCAweDE3QzgsDQotICAgIDB4ODYxNiwgMHg4NjE2LCAweDE3MjQsIDB4ODYxNywgMHg4NjE3LCAweDEzQTQsIDB4ODYxQSwgMHg4NjFBLCAweDE1NDEsDQotICAgIDB4ODYyRCwgMHg4NjJELCAweDExMkIsIDB4ODYzRiwgMHg4NjNGLCAweDExMUEsIDB4ODY0RSwgMHg4NjRFLCAweDFFOTksDQotICAgIDB4ODY1MCwgMHg4NjUwLCAweDFERDAsIDB4ODY1NCwgMHg4NjU0LCAweDBFMTksIDB4ODY1NSwgMHg4NjU1LCAweDFCREQsDQotICAgIDB4ODY1QiwgMHg4NjVCLCAweDFFMjksIDB4ODY1QywgMHg4NjVDLCAweDExQTksIDB4ODY1RSwgMHg4NjVFLCAweDE4NEQsDQotICAgIDB4ODY1RiwgMHg4NjVGLCAweDFFOUEsIDB4ODY2NywgMHg4NjY3LCAweDFGNDksIDB4ODY3OSwgMHg4Njc5LCAweDFFQjQsDQotICAgIDB4ODY4QSwgMHg4NjhBLCAweDEyRUQsIDB4ODY4QywgMHg4NjhDLCAweDEzNjMsIDB4ODY5MywgMHg4NjkzLCAweDE5MzgsDQotICAgIDB4ODZBMywgMHg4NkEzLCAweDBFRDcsIDB4ODZBNCwgMHg4NkE0LCAweDFBQTEsIDB4ODZBOSwgMHg4NkE5LCAweDFDQkIsDQotICAgIDB4ODZDNywgMHg4NkM3LCAweDE0QTksIDB4ODZDQiwgMHg4NkNCLCAweDEwNzAsIDB4ODZENCwgMHg4NkQ0LCAweDFGMDksDQotICAgIDB4ODZEOSwgMHg4NkQ5LCAweDE3RDgsIDB4ODZEQiwgMHg4NkRCLCAweDFBRTksIDB4ODZERiwgMHg4NkRGLCAweDBGMkUsDQotICAgIDB4ODZFNCwgMHg4NkU0LCAweDFERjIsIDB4ODZFRCwgMHg4NkVELCAweDFCNzIsIDB4ODZGRSwgMHg4NkZFLCAweDE2OTksDQotICAgIDB4ODcwMCwgMHg4NzAwLCAweDFDNEQsIDB4ODcwMiwgMHg4NzAyLCAweDEzRjEsIDB4ODcwMywgMHg4NzAzLCAweDE2NzksDQotICAgIDB4ODcwOCwgMHg4NzA4LCAweDE3QkEsIDB4ODcxOCwgMHg4NzE4LCAweDFCM0EsIDB4ODcxQSwgMHg4NzFBLCAweDE0NUUsDQotICAgIDB4ODcxQywgMHg4NzFDLCAweDEzMTQsIDB4ODc0RSwgMHg4NzRFLCAweDBEQjQsIDB4ODc1NSwgMHg4NzU1LCAweDE2NjIsDQotICAgIDB4ODc1NywgMHg4NzU3LCAweDFFRjQsIDB4ODc1RiwgMHg4NzVGLCAweDE4OUUsIDB4ODc2NiwgMHg4NzY2LCAweDFEQzksDQotICAgIDB4ODc2OCwgMHg4NzY4LCAweDE2MkMsIDB4ODc3NCwgMHg4Nzc0LCAweDFFOUIsIDB4ODc3NiwgMHg4Nzc2LCAweDFBMkYsDQotICAgIDB4ODc3OCwgMHg4Nzc4LCAweDE3RDksIDB4ODc4MiwgMHg4NzgyLCAweDExNDIsIDB4ODc4RCwgMHg4NzhELCAweDE4RTQsDQotICAgIDB4ODc5RiwgMHg4NzlGLCAweDEyOTcsIDB4ODdBMiwgMHg4N0EyLCAweDFFNjksIDB4ODdCMywgMHg4N0IzLCAweDEwOTgsDQotICAgIDB4ODdCQSwgMHg4N0JBLCAweDExMUIsIDB4ODdDNCwgMHg4N0M0LCAweDFDRDAsIDB4ODdFMCwgMHg4N0UwLCAweDEzM0UsDQotICAgIDB4ODdFQywgMHg4N0VDLCAweDE1NDIsIDB4ODdFRiwgMHg4N0VGLCAweDE4MTIsIDB4ODdGMiwgMHg4N0YyLCAweDFDOEQsDQotICAgIDB4ODdGOSwgMHg4N0Y5LCAweDFFMTAsIDB4ODdGQiwgMHg4N0ZCLCAweDE5MDgsIDB4ODdGRSwgMHg4N0ZFLCAweDE1NUIsDQotICAgIDB4ODgwNSwgMHg4ODA1LCAweDE2M0EsIDB4ODgxRiwgMHg4ODFGLCAweDExM0IsIDB4ODgyMiwgMHg4ODIyLCAweDFCMDQsDQotICAgIDB4ODgyMywgMHg4ODIzLCAweDExNjQsIDB4ODgzMSwgMHg4ODMxLCAweDBFQUUsIDB4ODgzNiwgMHg4ODM2LCAweDE5ODQsDQotICAgIDB4ODgzQiwgMHg4ODNCLCAweDEyNEQsIDB4ODg0MCwgMHg4ODQwLCAweDFFNEMsIDB4ODg0NiwgMHg4ODQ2LCAweDFCMEMsDQotICAgIDB4ODg0QywgMHg4ODRDLCAweDFFMUQsIDB4ODg0RCwgMHg4ODRELCAweDE3NUQsIDB4ODg1MiwgMHg4ODUyLCAweDFFNDYsDQotICAgIDB4ODg1MywgMHg4ODUzLCAweDE2MjQsIDB4ODg1NywgMHg4ODU3LCAweDBEODEsIDB4ODg1OSwgMHg4ODU5LCAweDE2OUEsDQotICAgIDB4ODg1QiwgMHg4ODVCLCAweDE4OUYsIDB4ODg1RCwgMHg4ODVELCAweDFDOEUsIDB4ODg2MSwgMHg4ODYxLCAweDFFNkEsDQotICAgIDB4ODg2MiwgMHg4ODYyLCAweDBGNUUsIDB4ODg2MywgMHg4ODYzLCAweDE5MDksIDB4ODg2OCwgMHg4ODY4LCAweDFEQTEsDQotICAgIDB4ODg2QiwgMHg4ODZCLCAweDE0Q0UsIDB4ODg3MCwgMHg4ODcwLCAweDE1QkQsIDB4ODg3MiwgMHg4ODcyLCAweDEwMzcsDQotICAgIDB4ODg3NywgMHg4ODc3LCAweDFDOEYsIDB4ODg3RSwgMHg4ODdGLCAweDBGQ0YsIDB4ODg4MSwgMHg4ODgxLCAweDE4ODMsDQotICAgIDB4ODg4MiwgMHg4ODgyLCAweDEyOUIsIDB4ODg4OCwgMHg4ODg4LCAweDBEODIsIDB4ODg4QiwgMHg4ODhCLCAweDEwQTYsDQotICAgIDB4ODg4RCwgMHg4ODhELCAweDFEOEQsIDB4ODg5MiwgMHg4ODkyLCAweDEwNzEsIDB4ODg5NiwgMHg4ODk2LCAweDE1RUEsDQotICAgIDB4ODg5NywgMHg4ODk3LCAweDFCNUQsIDB4ODg5RSwgMHg4ODlFLCAweDBFQzYsIDB4ODhBQiwgMHg4OEFCLCAweDFEQjEsDQotICAgIDB4ODhCNCwgMHg4OEI0LCAweDBFQUYsIDB4ODhDMSwgMHg4OEMxLCAweDE5QjYsIDB4ODhDMiwgMHg4OEMyLCAweDExODIsDQotICAgIDB4ODhDRiwgMHg4OENGLCAweDEyMTgsIDB4ODhENCwgMHg4OEQ0LCAweDE3OUEsIDB4ODhENSwgMHg4OEQ1LCAweDE4QzcsDQotICAgIDB4ODhEOSwgMHg4OEQ5LCAweDBGNzQsIDB4ODhEQywgMHg4OERDLCAweDEzQ0UsIDB4ODhERCwgMHg4OERELCAweDE5QTUsDQotICAgIDB4ODhERiwgMHg4OERGLCAweDE0QUEsIDB4ODhFMSwgMHg4OEUxLCAweDEyMTksIDB4ODhFOCwgMHg4OEU4LCAweDE0NUYsDQotICAgIDB4ODhGMywgMHg4OEYzLCAweDE0RUMsIDB4ODhGNCwgMHg4OEY1LCAweDEzNzUsIDB4ODhGOCwgMHg4OEY4LCAweDExMUMsDQotICAgIDB4ODhGRCwgMHg4OEZELCAweDFBNzUsIDB4ODkwNywgMHg4OTA3LCAweDEzREQsIDB4ODkxMCwgMHg4OTEwLCAweDBEQjMsDQotICAgIDB4ODkxMiwgMHg4OTEyLCAweDFEOEUsIDB4ODkxMywgMHg4OTEzLCAweDEzQ0YsIDB4ODkxOCwgMHg4OTE4LCAweDE4QTAsDQotICAgIDB4ODkxOSwgMHg4OTE5LCAweDEzNzcsIDB4ODkyNSwgMHg4OTI1LCAweDE4MUMsIDB4ODkyQSwgMHg4OTJBLCAweDFEMjYsDQotICAgIDB4ODkzNiwgMHg4OTM2LCAweDE2MzAsIDB4ODkzOCwgMHg4OTM4LCAweDExREUsIDB4ODkzQiwgMHg4OTNCLCAweDE1NTIsDQotICAgIDB4ODk0MSwgMHg4OTQxLCAweDBERTMsIDB4ODk0NCwgMHg4OTQ0LCAweDE3MDksIDB4ODk1RiwgMHg4OTVGLCAweDBGRDEsDQotICAgIDB4ODk2NCwgMHg4OTY0LCAweDExMzcsIDB4ODk2QSwgMHg4OTZBLCAweDEyNTYsIDB4ODk3MiwgMHg4OTcyLCAweDE2MzEsDQotICAgIDB4ODk3RiwgMHg4OTdGLCAweDE1MTUsIDB4ODk4MSwgMHg4OTgxLCAweDE4MTMsIDB4ODk4MywgMHg4OTgzLCAweDEwODYsDQotICAgIDB4ODk4NiwgMHg4OTg2LCAweDEzREUsIDB4ODk4NywgMHg4OTg3LCAweDFENTcsIDB4ODk4QiwgMHg4OThCLCAweDBFM0MsDQotICAgIDB4ODk4RiwgMHg4OThGLCAweDBGQTUsIDB4ODk5MywgMHg4OTkzLCAweDEyN0UsIDB4ODk5NiwgMHg4OTk2LCAweDE2NTIsDQotICAgIDB4ODlBMSwgMHg4OUExLCAweDBFMzMsIDB4ODlBOSwgMHg4OUE5LCAweDEwQ0EsIDB4ODlBQSwgMHg4OUFBLCAweDFDQzMsDQotICAgIDB4ODlCMiwgMHg4OUIyLCAweDBGQzIsIDB4ODlCQSwgMHg4OUJBLCAweDBEOTEsIDB4ODlCRCwgMHg4OUJELCAweDExMzgsDQotICAgIDB4ODlDMCwgMHg4OUMwLCAweDBFRjcsIDB4ODlEMiwgMHg4OUQyLCAweDBEOTIsIDB4ODlFMywgMHg4OUUzLCAweDFFMTEsDQotICAgIDB4ODlGNCwgMHg4OUY0LCAweDE0RUQsIDB4ODlGOCwgMHg4OUY4LCAweDFDNEUsIDB4OEEwMCwgMHg4QTAwLCAweDE3MjEsDQotICAgIDB4OEEwMiwgMHg4QTAyLCAweDFBNTksIDB4OEEwMywgMHg4QTAzLCAweDE0MTMsIDB4OEEwOCwgMHg4QTA4LCAweDBFOEMsDQotICAgIDB4OEEwQSwgMHg4QTBBLCAweDE2N0EsIDB4OEEwQywgMHg4QTBDLCAweDFFQjUsIDB4OEEwRSwgMHg4QTBFLCAweDFEMUMsDQotICAgIDB4OEExMywgMHg4QTEzLCAweDFGMzMsIDB4OEExNiwgMHg4QTE2LCAweDFGNUEsIDB4OEExNywgMHg4QTE3LCAweDFDRUUsDQotICAgIDB4OEExOCwgMHg4QTE4LCAweDEwMTIsIDB4OEExQiwgMHg4QTFCLCAweDE3REEsIDB4OEExRCwgMHg4QTFELCAweDE2OUIsDQotICAgIDB4OEExRiwgMHg4QTFGLCAweDE1QjUsIDB4OEEyMywgMHg4QTIzLCAweDBFNDUsIDB4OEEyNSwgMHg4QTI1LCAweDEwNTYsDQotICAgIDB4OEEyQSwgMHg4QTJBLCAweDEzNjQsIDB4OEEyRCwgMHg4QTJELCAweDE1NTMsIDB4OEEzMSwgMHg4QTMxLCAweDFFMkEsDQotICAgIDB4OEEzNCwgMHg4QTM0LCAweDE1OUEsIDB4OEEzNiwgMHg4QTM2LCAweDBEODMsIDB4OEEzQSwgMHg4QTNBLCAweDFCNUUsDQotICAgIDB4OEEzQiwgMHg4QTNCLCAweDFBRUEsIDB4OEE1MCwgMHg4QTUwLCAweDE0QUIsIDB4OEE1NCwgMHg4QTU0LCAweDFBQTIsDQotICAgIDB4OEE1NSwgMHg4QTU1LCAweDFENkQsIDB4OEE1QiwgMHg4QTVCLCAweDE5RDQsIDB4OEE1RSwgMHg4QTVFLCAweDE0QUMsDQotICAgIDB4OEE2MCwgMHg4QTYwLCAweDE3ODksIDB4OEE2MiwgMHg4QTYyLCAweDE2MUQsIDB4OEE2MywgMHg4QTYzLCAweDE3OUIsDQotICAgIDB4OEE2NiwgMHg4QTY2LCAweDE2NTMsIDB4OEE2OSwgMHg4QTY5LCAweDE2NTQsIDB4OEE2RCwgMHg4QTZELCAweDBGOTMsDQotICAgIDB4OEE2RSwgMHg4QTZFLCAweDFBMTEsIDB4OEE3MCwgMHg4QTcwLCAweDFGNzcsIDB4OEE3MSwgMHg4QTcxLCAweDFFQzEsDQotICAgIDB4OEE3MiwgMHg4QTcyLCAweDFFMTIsIDB4OEE3MywgMHg4QTczLCAweDE0RUUsIDB4OEE3NSwgMHg4QTc1LCAweDE1NDMsDQotICAgIDB4OEE3OSwgMHg4QTc5LCAweDFDMTEsIDB4OEE4NSwgMHg4QTg1LCAweDFBRUIsIDB4OEE4NywgMHg4QTg3LCAweDBFRTEsDQotICAgIDB4OEE4QywgMHg4QThDLCAweDFCM0IsIDB4OEE4RCwgMHg4QThELCAweDE5MzksIDB4OEE5MywgMHg4QTkzLCAweDE1MTYsDQotICAgIDB4OEE5NSwgMHg4QTk1LCAweDFDRjksIDB4OEE5OCwgMHg4QTk4LCAweDE4QzgsIDB4OEE5RSwgMHg4QTlFLCAweDE3MTQsDQotICAgIDB4OEFBMCwgMHg4QUEwLCAweDE1NzIsIDB4OEFBMSwgMHg4QUExLCAweDBFOEQsIDB4OEFBMywgMHg4QUEzLCAweDEyREUsDQotICAgIDB4OEFBNCwgMHg4QUE0LCAweDE3QkIsIDB4OEFBNSwgMHg4QUE1LCAweDBFQjAsIDB4OEFBNiwgMHg4QUE2LCAweDE1QjYsDQotICAgIDB4OEFBOCwgMHg4QUE4LCAweDFGMEEsIDB4OEFBQSwgMHg4QUFBLCAweDE1NTQsIDB4OEFCMCwgMHg4QUIwLCAweDE1RUIsDQotICAgIDB4OEFCMiwgMHg4QUIyLCAweDBFRTIsIDB4OEFCOSwgMHg4QUI5LCAweDE0NjAsIDB4OEFCQywgMHg4QUJDLCAweDE5MEEsDQotICAgIDB4OEFCRSwgMHg4QUJFLCAweDE4RTksIDB4OEFCRiwgMHg4QUJGLCAweDFBQTMsIDB4OEFDMiwgMHg4QUMyLCAweDFDMTIsDQotICAgIDB4OEFDNCwgMHg4QUM0LCAweDE2MUUsIDB4OEFDNywgMHg4QUM3LCAweDEwODcsIDB4OEFDQiwgMHg4QUNCLCAweDFDMjIsDQotICAgIDB4OEFDRCwgMHg4QUNELCAweDE5QkQsIDB4OEFDRiwgMHg4QUNGLCAweDFDNkMsIDB4OEFEMiwgMHg4QUQyLCAweDExNTUsDQotICAgIDB4OEFENiwgMHg4QUQ2LCAweDExQjcsIDB4OEFEQiwgMHg4QURCLCAweDE4QzksIDB4OEFEQywgMHg4QURDLCAweDFDMUEsDQotICAgIDB4OEFFMSwgMHg4QUUxLCAweDE2NTUsIDB4OEFFNiwgMHg4QUU2LCAweDFDMkEsIDB4OEFFNywgMHg4QUU3LCAweDFFMTMsDQotICAgIDB4OEFFQSwgMHg4QUVBLCAweDFBNUEsIDB4OEFFQiwgMHg4QUVCLCAweDBEQUEsIDB4OEFFRCwgMHg4QUVELCAweDE4Q0EsDQotICAgIDB4OEFFRSwgMHg4QUVFLCAweDE5NkEsIDB4OEFGMSwgMHg4QUYxLCAweDFGNDIsIDB4OEFGNiwgMHg4QUY2LCAweDE2OEEsDQotICAgIDB4OEFGNywgMHg4QUY3LCAweDFEQTksIDB4OEFGOCwgMHg4QUY4LCAweDFBNzYsIDB4OEFGQSwgMHg4QUZBLCAweDE3MjIsDQotICAgIDB4OEFGRSwgMHg4QUZFLCAweDEwMkIsIDB4OEIwMCwgMHg4QjAwLCAweDEyQjEsIDB4OEIwMSwgMHg4QjAxLCAweDE2QkEsDQotICAgIDB4OEIwMiwgMHg4QjAyLCAweDE4QTEsIDB4OEIwNCwgMHg4QjA0LCAweDExMTMsIDB4OEIwRSwgMHg4QjBFLCAweDEzMDIsDQotICAgIDB4OEIxMCwgMHg4QjEwLCAweDEzMTUsIDB4OEIxNCwgMHg4QjE0LCAweDFERDEsIDB4OEIxNiwgMHg4QjE2LCAweDE1QTcsDQotICAgIDB4OEIxNywgMHg4QjE3LCAweDEzNjUsIDB4OEIxOSwgMHg4QjE5LCAweDBFNDksIDB4OEIxQSwgMHg4QjFBLCAweDE5MkEsDQotICAgIDB4OEIxQiwgMHg4QjFCLCAweDBERTQsIDB4OEIxRCwgMHg4QjFELCAweDE0QUQsIDB4OEIyMCwgMHg4QjIwLCAweDE4MTQsDQotICAgIDB4OEIyOCwgMHg4QjI4LCAweDEyQjIsIDB4OEIyQiwgMHg4QjJCLCAweDE5RUEsIDB4OEIyQywgMHg4QjJDLCAweDExRUQsDQotICAgIDB4OEIzMywgMHg4QjMzLCAweDBGNUYsIDB4OEIzOSwgMHg4QjM5LCAweDBGQzMsIDB4OEI0MSwgMHg4QjQxLCAweDFFQzIsDQotICAgIDB4OEI0OSwgMHg4QjQ5LCAweDFCMUMsIDB4OEI0RSwgMHg4QjRFLCAweDFGNEIsIDB4OEI0RiwgMHg4QjRGLCAweDEwMTMsDQotICAgIDB4OEI1OCwgMHg4QjU4LCAweDE2NjMsIDB4OEI1QSwgMHg4QjVBLCAweDEwODgsIDB4OEI1QywgMHg4QjVDLCAweDEzRDAsDQotICAgIDB4OEI2NiwgMHg4QjY2LCAweDBFNzEsIDB4OEI2QywgMHg4QjZDLCAweDE0NjEsIDB4OEI2RiwgMHg4QjZGLCAweDE3NDEsDQotICAgIDB4OEI3MCwgMHg4QjcwLCAweDE5MEIsIDB4OEI3NCwgMHg4Qjc0LCAweDBFM0QsIDB4OEI3NywgMHg4Qjc3LCAweDFFOUMsDQotICAgIDB4OEI3RCwgMHg4QjdELCAweDE3OUMsIDB4OEI4MCwgMHg4QjgwLCAweDEwREUsIDB4OEI4QSwgMHg4QjhBLCAweDEzQTksDQotICAgIDB4OEI5MCwgMHg4QjkwLCAweDE1RUMsIDB4OEI5MiwgMHg4QjkyLCAweDFCQjIsIDB4OEI5MywgMHg4QjkzLCAweDE3MEEsDQotICAgIDB4OEI5NiwgMHg4Qjk2LCAweDFCQjMsIDB4OEI5QSwgMHg4QjlBLCAweDFCQTAsIDB4OEMzNywgMHg4QzM3LCAweDBFQkMsDQotICAgIDB4OEMzRiwgMHg4QzNGLCAweDBFOEUsIDB4OEM0MSwgMHg4QzQxLCAweDFFREUsIDB4OEM0NiwgMHg4QzQ2LCAweDExMDMsDQotICAgIDB4OEM0OCwgMHg4QzQ4LCAweDEwMTQsIDB4OEM0QSwgMHg4QzRBLCAweDFEQUEsIDB4OEM0QywgMHg4QzRDLCAweDE3RUEsDQotICAgIDB4OEM1NSwgMHg4QzU1LCAweDE2NTYsIDB4OEM1QSwgMHg4QzVBLCAweDEwRTcsIDB4OEM2MSwgMHg4QzYxLCAweDE0RUYsDQotICAgIDB4OEM2QSwgMHg4QzZBLCAweDFFOUQsIDB4OEM2QiwgMHg4QzZCLCAweDE3OUQsIDB4OEM3OSwgMHg4Qzc5LCAweDFEQTIsDQotICAgIDB4OEM3QSwgMHg4QzdBLCAweDE2NTcsIDB4OEM4MiwgMHg4QzgyLCAweDFDNDQsIDB4OEM4QSwgMHg4QzhBLCAweDEyNzMsDQotICAgIDB4OEM4QywgMHg4QzhDLCAweDEyQjMsIDB4OEM5RCwgMHg4QzlELCAweDFENTgsIDB4OEM5RSwgMHg4QzlFLCAweDFBNUIsDQotICAgIDB4OENBMCwgMHg4Q0EwLCAweDE0MTQsIDB4OENBMSwgMHg4Q0ExLCAweDE5QjcsIDB4OENBMiwgMHg4Q0EyLCAweDBFRDgsDQotICAgIDB4OENBNywgMHg4Q0E3LCAweDE0NzIsIDB4OENBOCwgMHg4Q0E4LCAweDFFQzMsIDB4OENBOSwgMHg4Q0E5LCAweDFENDcsDQotICAgIDB4OENBQSwgMHg4Q0FBLCAweDFDRkYsIDB4OENBQiwgMHg4Q0FCLCAweDBFRjgsIDB4OENBQywgMHg4Q0FDLCAweDFCRDksDQotICAgIDB4OENBRiwgMHg4Q0FGLCAweDE5RDUsIDB4OENCMCwgMHg4Q0IwLCAweDE1N0IsIDB4OENCMywgMHg4Q0IzLCAweDE5MjEsDQotICAgIDB4OENCNCwgMHg4Q0I0LCAweDBGOTgsIDB4OENCNiwgMHg4Q0I2LCAweDFENjgsIDB4OENCNywgMHg4Q0I3LCAweDEyNkUsDQotICAgIDB4OENCOCwgMHg4Q0I4LCAweDEwQTcsIDB4OENCQiwgMHg4Q0JCLCAweDE0NjIsIDB4OENCQywgMHg4Q0JDLCAweDFDMUIsDQotICAgIDB4OENCRCwgMHg4Q0JELCAweDE5MjAsIDB4OENCRiwgMHg4Q0JGLCAweDEyREYsIDB4OENDMCwgMHg4Q0MwLCAweDFEQ0EsDQotICAgIDB4OENDMSwgMHg4Q0MxLCAweDE0MzEsIDB4OENDMiwgMHg4Q0MyLCAweDExQzMsIDB4OENDMywgMHg4Q0MzLCAweDE5NEMsDQotICAgIDB4OENDNCwgMHg4Q0M0LCAweDFGMEIsIDB4OENDNywgMHg4Q0M3LCAweDE5NkIsIDB4OENDOCwgMHg4Q0M4LCAweDBEODQsDQotICAgIDB4OENDQSwgMHg4Q0NBLCAweDE5RUIsIDB4OENEMSwgMHg4Q0QxLCAweDFCNUYsIDB4OENEMywgMHg4Q0QzLCAweDE0NzMsDQotICAgIDB4OENEQSwgMHg4Q0RBLCAweDExQzQsIDB4OENEQywgMHg4Q0RDLCAweDE0QUUsIDB4OENERSwgMHg4Q0RFLCAweDE0RjAsDQotICAgIDB4OENFMCwgMHg4Q0UwLCAweDEzNzgsIDB4OENFMiwgMHg4Q0UyLCAweDFFNDcsIDB4OENFMywgMHg4Q0UzLCAweDEyNkYsDQotICAgIDB4OENFNCwgMHg4Q0U0LCAweDFCRjgsIDB4OENFNiwgMHg4Q0U2LCAweDE0MTUsIDB4OENFQSwgMHg4Q0VBLCAweDFCNzMsDQotICAgIDB4OENFRCwgMHg4Q0VELCAweDEwQ0IsIDB4OENGNCwgMHg4Q0Y0LCAweDExQzUsIDB4OENGQiwgMHg4Q0ZCLCAweDE0MTYsDQotICAgIDB4OENGQywgMHg4Q0ZDLCAweDBGNjAsIDB4OENGRCwgMHg4Q0ZELCAweDE0RjQsIDB4OEQwNCwgMHg4RDA0LCAweDFCM0MsDQotICAgIDB4OEQwNSwgMHg4RDA1LCAweDFDOTMsIDB4OEQwNywgMHg4RDA3LCAweDE4REQsIDB4OEQwOCwgMHg4RDA4LCAweDFCMUQsDQotICAgIDB4OEQwQSwgMHg4RDBBLCAweDFCQTEsIDB4OEQwRCwgMHg4RDBELCAweDE1NUMsIDB4OEQxMywgMHg4RDEzLCAweDE5QTYsDQotICAgIDB4OEQxNiwgMHg4RDE2LCAweDE1QTgsIDB4OEQ2NCwgMHg4RDY0LCAweDE5RUMsIDB4OEQ2NiwgMHg4RDY2LCAweDE0QUYsDQotICAgIDB4OEQ2QiwgMHg4RDZCLCAweDFFMzQsIDB4OEQ3MCwgMHg4RDcwLCAweDFBRUMsIDB4OEQ3MywgMHg4RDczLCAweDBGQTYsDQotICAgIDB4OEQ3NCwgMHg4RDc0LCAweDE0MTcsIDB4OEQ3NywgMHg4RDc3LCAweDEwMTUsIDB4OEQ4NSwgMHg4RDg1LCAweDFDNDUsDQotICAgIDB4OEQ4QSwgMHg4RDhBLCAweDE4OEEsIDB4OEQ5OSwgMHg4RDk5LCAweDFBQTQsIDB4OERBMywgMHg4REEzLCAweDFDOUUsDQotICAgIDB4OERBOCwgMHg4REE4LCAweDFDNkQsIDB4OERCMywgMHg4REIzLCAweDFBQUUsIDB4OERCQSwgMHg4REJBLCAweDE0MTgsDQotICAgIDB4OERCRSwgMHg4REJFLCAweDFCM0QsIDB4OERDNiwgMHg4REM2LCAweDFEMTIsIDB4OERDQiwgMHg4RENCLCAweDEzNDgsDQotICAgIDB4OERDQywgMHg4RENDLCAweDFCNzQsIDB4OERDRiwgMHg4RENGLCAweDBEODUsIDB4OEREQiwgMHg4RERCLCAweDFENDAsDQotICAgIDB4OERERCwgMHg4RERELCAweDBFMEMsIDB4OERFMSwgMHg4REUxLCAweDE5RUQsIDB4OERFMywgMHg4REUzLCAweDE1NDQsDQotICAgIDB4OERFOCwgMHg4REU4LCAweDBFRTMsIDB4OERFRiwgMHg4REVGLCAweDExQUEsIDB4OERGMywgMHg4REYzLCAweDEwQ0MsDQotICAgIDB4OEUwQSwgMHg4RTBBLCAweDE4MzIsIDB4OEUwRiwgMHg4RTBGLCAweDEwOEQsIDB4OEUxMCwgMHg4RTEwLCAweDFCRjksDQotICAgIDB4OEUxRSwgMHg4RTFFLCAweDBFMEQsIDB4OEUyQSwgMHg4RTJBLCAweDFBQzIsIDB4OEUzMCwgMHg4RTMwLCAweDE4Q0IsDQotICAgIDB4OEUzNSwgMHg4RTM1LCAweDFBQzMsIDB4OEU0MiwgMHg4RTQyLCAweDE4Q0MsIDB4OEU0NCwgMHg4RTQ0LCAweDFBNzcsDQotICAgIDB4OEU0NywgMHg4RTQ3LCAweDBFMUEsIDB4OEU0OCwgMHg4RTQ4LCAweDEwQ0QsIDB4OEU0OSwgMHg4RTQ5LCAweDFCOEMsDQotICAgIDB4OEU0QSwgMHg4RTRBLCAweDFFNzUsIDB4OEU1OSwgMHg4RTU5LCAweDFDODAsIDB4OEU1RiwgMHg4RTVGLCAweDE5RUUsDQotICAgIDB4OEU2MCwgMHg4RTYwLCAweDFCRTksIDB4OEU3NCwgMHg4RTc0LCAweDFDODEsIDB4OEU3NiwgMHg4RTc2LCAweDBGOEUsDQotICAgIDB4OEU4MSwgMHg4RTgxLCAweDFBQTUsIDB4OEU4NywgMHg4RTg3LCAweDE5RDYsIDB4OEU4QSwgMHg4RThBLCAweDFBRUQsDQotICAgIDB4OEU4RCwgMHg4RThELCAweDE2RjYsIDB4OEVBQSwgMHg4RUFBLCAweDEyMjMsIDB4OEVBQiwgMHg4RUFCLCAweDE2N0IsDQotICAgIDB4OEVBQywgMHg4RUFDLCAweDBGODAsIDB4OEVDMCwgMHg4RUMwLCAweDBGNjEsIDB4OEVDQSwgMHg4RUNBLCAweDFCOEQsDQotICAgIDB4OEVDQiwgMHg4RUNCLCAweDE2QkIsIDB4OEVDQywgMHg4RUNDLCAweDBGOTQsIDB4OEVDRCwgMHg4RUNELCAweDBGNzUsDQotICAgIDB4OEVEMiwgMHg4RUQyLCAweDFFMkUsIDB4OEVERiwgMHg4RURGLCAweDE3NUUsIDB4OEVFQiwgMHg4RUVCLCAweDFCNjAsDQotICAgIDB4OEVGOCwgMHg4RUY4LCAweDFDODIsIDB4OEVGQiwgMHg4RUZCLCAweDBEODYsIDB4OEVGRSwgMHg4RUZFLCAweDE2NjQsDQotICAgIDB4OEYwMywgMHg4RjAzLCAweDBGMkYsIDB4OEYwNSwgMHg4RjA1LCAweDExQUIsIDB4OEYwOSwgMHg4RjA5LCAweDE5QjgsDQotICAgIDB4OEYxMiwgMHg4RjEyLCAweDFDMUMsIDB4OEYxMywgMHg4RjEzLCAweDEyNEUsIDB4OEYxNCwgMHg4RjE0LCAweDEzRDEsDQotICAgIDB4OEYxNSwgMHg4RjE1LCAweDBFNzIsIDB4OEYxQiwgMHg4RjFCLCAweDExNTYsIDB4OEYxQywgMHg4RjFDLCAweDFDQkMsDQotICAgIDB4OEYxRCwgMHg4RjFELCAweDFGNDMsIDB4OEYxRSwgMHg4RjFFLCAweDEyNjIsIDB4OEYxRiwgMHg4RjFGLCAweDFDMDYsDQotICAgIDB4OEYyNiwgMHg4RjI2LCAweDExN0EsIDB4OEYyNywgMHg4RjI3LCAweDEzQkYsIDB4OEYyOSwgMHg4RjI5LCAweDEzNzksDQotICAgIDB4OEYyQSwgMHg4RjJBLCAweDExRjcsIDB4OEYyRiwgMHg4RjJGLCAweDFCN0IsIDB4OEYzMywgMHg4RjMzLCAweDFBRUUsDQotICAgIDB4OEYzOCwgMHg4RjM4LCAweDE1RUQsIDB4OEYzOSwgMHg4RjM5LCAweDEzREYsIDB4OEYzQiwgMHg4RjNCLCAweDEzRTAsDQotICAgIDB4OEYzRSwgMHg4RjNFLCAweDFBMTIsIDB4OEYzRiwgMHg4RjNGLCAweDE3MzgsIDB4OEY0NCwgMHg4RjQ0LCAweDFERTIsDQotICAgIDB4OEY0NSwgMHg4RjQ1LCAweDE4ODQsIDB4OEY0OSwgMHg4RjQ5LCAweDFBMTMsIDB4OEY0RCwgMHg4RjRELCAweDFDMDcsDQotICAgIDB4OEY0RSwgMHg4RjRFLCAweDBGMzAsIDB4OEY1RCwgMHg4RjVELCAweDE3MzksIDB4OEY1RiwgMHg4RjVGLCAweDBGMUIsDQotICAgIDB4OEY2MiwgMHg4RjYyLCAweDExNkYsIDB4OEY5QiwgMHg4RjlCLCAweDE2N0MsIDB4OEY5QywgMHg4RjlDLCAweDBFQjEsDQotICAgIDB4OEZBMywgMHg4RkEzLCAweDExMkUsIDB4OEZBNiwgMHg4RkE2LCAweDFENDgsIDB4OEZBOCwgMHg4RkE4LCAweDEzQUEsDQotICAgIDB4OEZBRCwgMHg4RkFELCAweDE0QjAsIDB4OEZBRiwgMHg4RkFGLCAweDEzQUIsIDB4OEZCMCwgMHg4RkIwLCAweDFCNjEsDQotICAgIDB4OEZCMSwgMHg4RkIxLCAweDE4MUQsIDB4OEZCMiwgMHg4RkIyLCAweDEwNTEsIDB4OEZDMiwgMHg4RkMyLCAweDE4NEUsDQotICAgIDB4OEZDNSwgMHg4RkM1LCAweDE2N0QsIDB4OEZDRSwgMHg4RkNFLCAweDE3OEEsIDB4OEZEMSwgMHg4RkQxLCAweDBGQzQsDQotICAgIDB4OEZENCwgMHg4RkQ0LCAweDEzM0YsIDB4OEZFNiwgMHg4RkU2LCAweDBEODcsIDB4OEZFQSwgMHg4RkVBLCAweDE5RUYsDQotICAgIDB4OEZFQiwgMHg4RkVCLCAweDEzMjYsIDB4OEZFRCwgMHg4RkVELCAweDFCNzUsIDB4OEZGMCwgMHg4RkYwLCAweDE2MjUsDQotICAgIDB4OEZGMiwgMHg4RkYyLCAweDBFMkEsIDB4OEZGNywgMHg4RkY3LCAweDEzMDMsIDB4OEZGOSwgMHg4RkY5LCAweDE5RjAsDQotICAgIDB4OEZGRCwgMHg4RkZELCAweDFDNkUsIDB4OTAwMCwgMHg5MDAwLCAweDFEMjcsIDB4OTAwMSwgMHg5MDAxLCAweDE1QjcsDQotICAgIDB4OTAwMiwgMHg5MDAyLCAweDBFRkUsIDB4OTAwMywgMHg5MDAzLCAweDEwQ0UsIDB4OTAwNSwgMHg5MDA1LCAweDFGMkEsDQotICAgIDB4OTAwNiwgMHg5MDA2LCAweDE3NDIsIDB4OTAwOCwgMHg5MDA4LCAweDFFNkIsIDB4OTAwQiwgMHg5MDBCLCAweDFEOEYsDQotICAgIDB4OTAwRCwgMHg5MDBELCAweDE1OUIsIDB4OTAwRiwgMHg5MDBGLCAweDFEMkQsIDB4OTAxMCwgMHg5MDEwLCAweDFDODMsDQotICAgIDB4OTAxMSwgMHg5MDExLCAweDBGNjIsIDB4OTAxNCwgMHg5MDE0LCAweDEwQ0YsIDB4OTAxNSwgMHg5MDE1LCAweDBFNzMsDQotICAgIDB4OTAxNywgMHg5MDE3LCAweDExMDQsIDB4OTAxOSwgMHg5MDE5LCAweDE5RDcsIDB4OTAxQSwgMHg5MDFBLCAweDFEMjIsDQotICAgIDB4OTAxRCwgMHg5MDFELCAweDE1MTcsIDB4OTAxRSwgMHg5MDFFLCAweDExOTQsIDB4OTAxRiwgMHg5MDFGLCAweDE1QTksDQotICAgIDB4OTAyMCwgMHg5MDIwLCAweDFBQTYsIDB4OTAyMSwgMHg5MDIxLCAweDFCMDUsIDB4OTAyMiwgMHg5MDIyLCAweDEzRjIsDQotICAgIDB4OTAyMywgMHg5MDIzLCAweDExN0IsIDB4OTAyRSwgMHg5MDJFLCAweDFDMkIsIDB4OTAzMSwgMHg5MDMxLCAweDFBRUYsDQotICAgIDB4OTAzMiwgMHg5MDMyLCAweDFCNjIsIDB4OTAzNSwgMHg5MDM1LCAweDBGQTcsIDB4OTAzOCwgMHg5MDM4LCAweDE5NDIsDQotICAgIDB4OTAzQywgMHg5MDNDLCAweDFEQkYsIDB4OTAzRSwgMHg5MDNFLCAweDE4Q0UsIDB4OTA0MSwgMHg5MDQxLCAweDExMDksDQotICAgIDB4OTA0MiwgMHg5MDQyLCAweDE1RUUsIDB4OTA0NywgMHg5MDQ3LCAweDE4NEYsIDB4OTA0QSwgMHg5MDRBLCAweDE4Q0QsDQotICAgIDB4OTA0QiwgMHg5MDRCLCAweDE4NjYsIDB4OTA0RCwgMHg5MDRELCAweDFENjUsIDB4OTA0RSwgMHg5MDRFLCAweDBFRTQsDQotICAgIDB4OTA1MCwgMHg5MDUwLCAweDFEQ0IsIDB4OTA1MSwgMHg5MDUxLCAweDFFRjUsIDB4OTA1MywgMHg5MDUzLCAweDEwRDAsDQotICAgIDB4OTA1NCwgMHg5MDU0LCAweDEwNzgsIDB4OTA1NSwgMHg5MDU1LCAweDE4QTIsIDB4OTA1OSwgMHg5MDU5LCAweDE4MTUsDQotICAgIDB4OTA1QywgMHg5MDVDLCAweDE1QUUsIDB4OTA1RCwgMHg5MDVELCAweDEwOEUsIDB4OTA1RSwgMHg5MDVFLCAweDFDMkMsDQotICAgIDB4OTA2MCwgMHg5MDYwLCAweDE4ODUsIDB4OTA2MSwgMHg5MDYxLCAweDE1OUMsIDB4OTA2MywgMHg5MDYzLCAweDBFM0UsDQotICAgIDB4OTA2OSwgMHg5MDY5LCAweDE5RjEsIDB4OTA2RCwgMHg5MDZELCAweDFBQTcsIDB4OTA2RSwgMHg5MDZFLCAweDFCOEUsDQotICAgIDB4OTA2RiwgMHg5MDZGLCAweDExMEEsIDB4OTA3MiwgMHg5MDcyLCAweDFCM0UsIDB4OTA3NSwgMHg5MDc1LCAweDFCMDYsDQotICAgIDB4OTA3NywgMHg5MDc3LCAweDFCRkEsIDB4OTA3OCwgMHg5MDc4LCAweDE1NDUsIDB4OTA3QSwgMHg5MDdBLCAweDE4Q0YsDQotICAgIDB4OTA3QywgMHg5MDdDLCAweDExRDEsIDB4OTA3RCwgMHg5MDdELCAweDBFMEUsIDB4OTA3RiwgMHg5MDdGLCAweDFEQjIsDQotICAgIDB4OTA4MCwgMHg5MDgwLCAweDE4MTYsIDB4OTA4MSwgMHg5MDgxLCAweDEyNzAsIDB4OTA4MiwgMHg5MDgyLCAweDFFMTQsDQotICAgIDB4OTA4MywgMHg5MDgzLCAweDE1RUYsIDB4OTA4NCwgMHg5MDg0LCAweDFFRDgsIDB4OTA4NywgMHg5MDg3LCAweDE5MjIsDQotICAgIDB4OTA4OCwgMHg5MDg4LCAweDEyM0QsIDB4OTA4QSwgMHg5MDhBLCAweDEzQUMsIDB4OTA4RiwgMHg5MDhGLCAweDExMUQsDQotICAgIDB4OTA5MSwgMHg5MDkxLCAweDE4RjUsIDB4OTA5NSwgMHg5MDk1LCAweDE3RDAsIDB4OTA5OSwgMHg5MDk5LCAweDEyNjMsDQotICAgIDB4OTBBMiwgMHg5MEEyLCAweDFFNkMsIDB4OTBBMywgMHg5MEEzLCAweDEwMkEsIDB4OTBBNiwgMHg5MEE2LCAweDEzNjYsDQotICAgIDB4OTBBOCwgMHg5MEE4LCAweDFDNTIsIDB4OTBBQSwgMHg5MEFBLCAweDE0QjEsIDB4OTBBRiwgMHg5MEFGLCAweDBEQzYsDQotICAgIDB4OTBCMCwgMHg5MEIwLCAweDFEMTMsIDB4OTBCMSwgMHg5MEIxLCAweDBGNjMsIDB4OTBCNSwgMHg5MEI1LCAweDE1OUQsDQotICAgIDB4OTBCOCwgMHg5MEI4LCAweDE5RDgsIDB4OTBDMSwgMHg5MEMxLCAweDE4NUMsIDB4OTBDQSwgMHg5MENBLCAweDBGMzEsDQotICAgIDB4OTBERSwgMHg5MERFLCAweDExNDMsIDB4OTBFMSwgMHg5MEUxLCAweDBGNzYsIDB4OTBFOCwgMHg5MEU4LCAweDE0MTksDQotICAgIDB4OTBFRCwgMHg5MEVELCAweDBFRUEsIDB4OTBGNSwgMHg5MEY1LCAweDE4NTAsIDB4OTBGRCwgMHg5MEZELCAweDEwRDEsDQotICAgIDB4OTEwMiwgMHg5MTAyLCAweDE2QUEsIDB4OTExMiwgMHg5MTEyLCAweDFDNkYsIDB4OTExNSwgMHg5MTE1LCAweDFFMjIsDQotICAgIDB4OTExOSwgMHg5MTE5LCAweDE0NjMsIDB4OTEyNywgMHg5MTI3LCAweDExMTQsIDB4OTEyRCwgMHg5MTJELCAweDFBNUMsDQotICAgIDB4OTEzMiwgMHg5MTMyLCAweDEwNzIsIDB4OTE0OSwgMHg5MTQ5LCAweDE4RDAsIDB4OTE0QSwgMHg5MTRBLCAweDFBNUQsDQotICAgIDB4OTE0QiwgMHg5MTRCLCAweDFDNzAsIDB4OTE0QywgMHg5MTRDLCAweDE5NzcsIDB4OTE0RCwgMHg5MTRELCAweDEzN0EsDQotICAgIDB4OTE0RSwgMHg5MTRFLCAweDFBRjAsIDB4OTE1MiwgMHg5MTUyLCAweDFBRjEsIDB4OTE2MiwgMHg5MTYyLCAweDFDNDYsDQotICAgIDB4OTE2OSwgMHg5MTY5LCAweDEyOTgsIDB4OTE2QSwgMHg5MTZBLCAweDExMjMsIDB4OTE2QywgMHg5MTZDLCAweDE1RjAsDQotICAgIDB4OTE3NSwgMHg5MTc1LCAweDFGMUMsIDB4OTE3NywgMHg5MTc3LCAweDFFQTMsIDB4OTE3OCwgMHg5MTc4LCAweDE0QzEsDQotICAgIDB4OTE4NywgMHg5MTg3LCAweDE2MUYsIDB4OTE4OSwgMHg5MTg5LCAweDFDOUYsIDB4OTE4QiwgMHg5MThCLCAweDFDNDcsDQotICAgIDB4OTE4RCwgMHg5MThELCAweDFBNzgsIDB4OTE5MiwgMHg5MTkyLCAweDE1NzMsIDB4OTE5QywgMHg5MTlDLCAweDFDNzEsDQotICAgIDB4OTFBQiwgMHg5MUFCLCAweDE5MEMsIDB4OTFBQywgMHg5MUFDLCAweDE5QTcsIDB4OTFBRSwgMHg5MUFFLCAweDFDNDgsDQotICAgIDB4OTFBRiwgMHg5MUFGLCAweDFFNzYsIDB4OTFCMSwgMHg5MUIxLCAweDEzNDksIDB4OTFCNCwgMHg5MUI0LCAweDExOUQsDQotICAgIDB4OTFCNSwgMHg5MUI1LCAweDBFMDAsIDB4OTFDMCwgMHg5MUMwLCAweDE3MEIsIDB4OTFDNywgMHg5MUM3LCAweDFCRDQsDQotICAgIDB4OTFDOSwgMHg5MUM5LCAweDE4RDEsIDB4OTFDQiwgMHg5MUNCLCAweDE1MjgsIDB4OTFDQywgMHg5MUNDLCAweDEyMUEsDQotICAgIDB4OTFDRCwgMHg5MUNELCAweDFCMEQsIDB4OTFDRSwgMHg5MUNFLCAweDE2RUYsIDB4OTFDRiwgMHg5MUNGLCAweDExNTcsDQotICAgIDB4OTFEMCwgMHg5MUQwLCAweDEyMUIsIDB4OTFEMSwgMHg5MUQxLCAweDEwMjMsIDB4OTFENywgMHg5MUQ3LCAweDE1QkUsDQotICAgIDB4OTFEOCwgMHg5MUQ4LCAweDFBNUUsIDB4OTFEQywgMHg5MURDLCAweDE0MUEsIDB4OTFERCwgMHg5MURELCAweDFDQ0UsDQotICAgIDB4OTFFMywgMHg5MUUzLCAweDFBQTgsIDB4OTFFNywgMHg5MUU3LCAweDFCRkIsIDB4OTFFQSwgMHg5MUVBLCAweDE4NTEsDQotICAgIDB4OTFGNSwgMHg5MUY1LCAweDFCRDUsIDB4OTIwRCwgMHg5MjBELCAweDExMEIsIDB4OTIxMCwgMHg5MjEwLCAweDBFMjYsDQotICAgIDB4OTIxMSwgMHg5MjExLCAweDFENDksIDB4OTIxMiwgMHg5MjEyLCAweDE0RDEsIDB4OTIxNywgMHg5MjE3LCAweDE4REUsDQotICAgIDB4OTIxRSwgMHg5MjFFLCAweDBGQUUsIDB4OTIzNCwgMHg5MjM0LCAweDExOTUsIDB4OTIzQSwgMHg5MjNBLCAweDE3QzIsDQotICAgIDB4OTIzRiwgMHg5MjNGLCAweDFBMTQsIDB4OTI0MCwgMHg5MjQwLCAweDBEQ0UsIDB4OTI0NSwgMHg5MjQ1LCAweDBFMEYsDQotICAgIDB4OTI0OSwgMHg5MjQ5LCAweDFFNDgsIDB4OTI1NywgMHg5MjU3LCAweDBFNEEsIDB4OTI1QiwgMHg5MjVCLCAweDE3NUYsDQotICAgIDB4OTI1RSwgMHg5MjVFLCAweDE4OEIsIDB4OTI2MiwgMHg5MjYyLCAweDEzNEEsIDB4OTI2NCwgMHg5MjY0LCAweDBGNjQsDQotICAgIDB4OTI2NSwgMHg5MjY1LCAweDE2MjYsIDB4OTI2NiwgMHg5MjY2LCAweDFBNUYsIDB4OTI4MCwgMHg5MjgwLCAweDE4RUEsDQotICAgIDB4OTI4MywgMHg5MjgzLCAweDFDNUMsIDB4OTI4NSwgMHg5Mjg1LCAweDEwRkIsIDB4OTI5MSwgMHg5MjkxLCAweDE1NDYsDQotICAgIDB4OTI5MywgMHg5MjkzLCAweDFBMTUsIDB4OTI5NiwgMHg5Mjk2LCAweDE1RjEsIDB4OTI5OCwgMHg5Mjk4LCAweDEyOTksDQotICAgIDB4OTI5QywgMHg5MjlDLCAweDFERUMsIDB4OTJCMywgMHg5MkIzLCAweDE3OUUsIDB4OTJCNiwgMHg5MkI2LCAweDBGNjUsDQotICAgIDB4OTJCNywgMHg5MkI3LCAweDE1OUUsIDB4OTJCOSwgMHg5MkI5LCAweDE1RjIsIDB4OTJDQywgMHg5MkNDLCAweDFBNjAsDQotICAgIDB4OTJDRiwgMHg5MkNGLCAweDFFNTksIDB4OTJEMiwgMHg5MkQyLCAweDEzRjMsIDB4OTJFNCwgMHg5MkU0LCAweDE1MTgsDQotICAgIDB4OTJFQSwgMHg5MkVBLCAweDFEOTAsIDB4OTJGOCwgMHg5MkY4LCAweDBFMTAsIDB4OTJGQywgMHg5MkZDLCAweDBERTUsDQotICAgIDB4OTMwNCwgMHg5MzA0LCAweDExQjQsIDB4OTMxMCwgMHg5MzEwLCAweDFDNzIsIDB4OTMxOCwgMHg5MzE4LCAweDFDNzMsDQotICAgIDB4OTMxQSwgMHg5MzFBLCAweDE5QkUsIDB4OTMxRSwgMHg5MzFFLCAweDE2MjAsIDB4OTMxRiwgMHg5MzFGLCAweDEwODksDQotICAgIDB4OTMyMCwgMHg5MzIwLCAweDFBNjEsIDB4OTMyMSwgMHg5MzIxLCAweDEwMTYsIDB4OTMyMiwgMHg5MzIyLCAweDFBMTYsDQotICAgIDB4OTMyNCwgMHg5MzI0LCAweDEwMTcsIDB4OTMyNiwgMHg5MzI2LCAweDBGRDIsIDB4OTMyOCwgMHg5MzI4LCAweDEyQ0IsDQotICAgIDB4OTMyQiwgMHg5MzJCLCAweDE1MjksIDB4OTMyRSwgMHg5MzJFLCAweDBFQjIsIDB4OTMyRiwgMHg5MzJGLCAweDFCOTMsDQotICAgIDB4OTM0OCwgMHg5MzQ4LCAweDE3OEIsIDB4OTM0QSwgMHg5MzRBLCAweDExN0MsIDB4OTM0QiwgMHg5MzRCLCAweDBFRTUsDQotICAgIDB4OTM0RCwgMHg5MzRELCAweDEwRDIsIDB4OTM1NCwgMHg5MzU0LCAweDE2QUIsIDB4OTM1QiwgMHg5MzVCLCAweDEwNzMsDQotICAgIDB4OTM2RSwgMHg5MzZFLCAweDE4RDIsIDB4OTM3NSwgMHg5Mzc1LCAweDBFMUIsIDB4OTM3QywgMHg5MzdDLCAweDFDQ0YsDQotICAgIDB4OTM3RSwgMHg5MzdFLCAweDFBQzQsIDB4OTM4QywgMHg5MzhDLCAweDBFNEIsIDB4OTM5NCwgMHg5Mzk0LCAweDE4MzMsDQotICAgIDB4OTM5NiwgMHg5Mzk2LCAweDE1QkMsIDB4OTM5QSwgMHg5MzlBLCAweDFDNzQsIDB4OTNBMywgMHg5M0EzLCAweDFFNkQsDQotICAgIDB4OTNBNywgMHg5M0E3LCAweDBERjksIDB4OTNBQywgMHg5M0FDLCAweDFFOUUsIDB4OTNBRCwgMHg5M0FELCAweDFCNjMsDQotICAgIDB4OTNCMCwgMHg5M0IwLCAweDE5NDMsIDB4OTNDMywgMHg5M0MzLCAweDFBQUYsIDB4OTNEMSwgMHg5M0QxLCAweDE5RjIsDQotICAgIDB4OTNERSwgMHg5M0RFLCAweDE4MzQsIDB4OTNFMSwgMHg5M0UxLCAweDBFNzQsIDB4OTNFNCwgMHg5M0U0LCAweDExREYsDQotICAgIDB4OTNGNiwgMHg5M0Y2LCAweDFCN0MsIDB4OTQwNCwgMHg5NDA0LCAweDFGMTAsIDB4OTQxOCwgMHg5NDE4LCAweDFBQzUsDQotICAgIDB4OTQyNSwgMHg5NDI1LCAweDE1NDcsIDB4OTQyQiwgMHg5NDJCLCAweDFBMTcsIDB4OTQzNSwgMHg5NDM1LCAweDFDMDgsDQotICAgIDB4OTQzOCwgMHg5NDM4LCAweDFDRUYsIDB4OTQ0NCwgMHg5NDQ0LCAweDFBRjIsIDB4OTQ1MSwgMHg5NDUyLCAweDBEQzcsDQotICAgIDB4OTQ1QiwgMHg5NDVCLCAweDBGMEIsIDB4OTQ3RCwgMHg5NDdELCAweDFCQTIsIDB4OTQ3RiwgMHg5NDdGLCAweDFCOTQsDQotICAgIDB4OTU3NywgMHg5NTc3LCAweDE5QTgsIDB4OTU4MCwgMHg5NTgwLCAweDEyRUUsIDB4OTU4MywgMHg5NTgzLCAweDE1NUQsDQotICAgIDB4OTU4OSwgMHg5NTg5LCAweDFENzYsIDB4OTU4QiwgMHg5NThCLCAweDBERkEsIDB4OTU4RiwgMHg5NThGLCAweDE4REYsDQotICAgIDB4OTU5MSwgMHg5NTkyLCAweDFEREQsIDB4OTU5MywgMHg5NTkzLCAweDBEQUIsIDB4OTU5NCwgMHg5NTk0LCAweDEzMTIsDQotICAgIDB4OTU5OCwgMHg5NTk4LCAweDBEQ0YsIDB4OTVBMywgMHg5NUEzLCAweDBEOTMsIDB4OTVBNCwgMHg5NUE0LCAweDFERjMsDQotICAgIDB4OTVBNSwgMHg5NUE1LCAweDEzOTAsIDB4OTVBOCwgMHg5NUE4LCAweDBGQTgsIDB4OTVBRCwgMHg5NUFELCAweDExNjUsDQotICAgIDB4OTVCMSwgMHg5NUIxLCAweDE3NjQsIDB4OTVCQiwgMHg5NUJCLCAweDE3NkMsIDB4OTVCQywgMHg5NUJDLCAweDE2QkMsDQotICAgIDB4OTVDNywgMHg5NUM3LCAweDE2QzQsIDB4OTVDQSwgMHg5NUNBLCAweDFFREYsIDB4OTVENCwgMHg5NUQ0LCAweDFERjQsDQotICAgIDB4OTVENSwgMHg5NUQ1LCAweDBGOEYsIDB4OTVENiwgMHg5NUQ2LCAweDFEMzEsIDB4OTVEQywgMHg5NURDLCAweDBFRjksDQotICAgIDB4OTVFMSwgMHg5NUUxLCAweDFCRkMsIDB4OTVFMiwgMHg5NUUyLCAweDEzQTUsIDB4OTYxQywgMHg5NjFDLCAweDE0MUIsDQotICAgIDB4OTYyMSwgMHg5NjIxLCAweDFCRkQsIDB4OTYyQSwgMHg5NjJBLCAweDFENEEsIDB4OTYyRSwgMHg5NjJFLCAweDE3RUIsDQotICAgIDB4OTYzMiwgMHg5NjMyLCAweDEzNjcsIDB4OTYzQiwgMHg5NjNCLCAweDFBQTksIDB4OTYzRiwgMHg5NjNGLCAweDE2OUMsDQotICAgIDB4OTY0MCwgMHg5NjQwLCAweDFDREYsIDB4OTY0MiwgMHg5NjQyLCAweDFEQjMsIDB4OTY0NCwgMHg5NjQ0LCAweDE0MUMsDQotICAgIDB4OTY0QiwgMHg5NjRCLCAweDExRTAsIDB4OTY0QywgMHg5NjRDLCAweDEyNzQsIDB4OTY0RCwgMHg5NjRELCAweDBERTYsDQotICAgIDB4OTY1MCwgMHg5NjUwLCAweDFEREYsIDB4OTY1QiwgMHg5NjVCLCAweDFENzcsIDB4OTY1QywgMHg5NjVDLCAweDFERjUsDQotICAgIDB4OTY1RCwgMHg5NjVELCAweDE1NUUsIDB4OTY1RSwgMHg5NjVFLCAweDE2M0IsIDB4OTY1RiwgMHg5NjVGLCAweDFCRUEsDQotICAgIDB4OTY2MiwgMHg5NjYyLCAweDE4ODYsIDB4OTY2MywgMHg5NjYzLCAweDFCNjQsIDB4OTY2NCwgMHg5NjY0LCAweDFBNzksDQotICAgIDB4OTY2QSwgMHg5NjZBLCAweDEzN0IsIDB4OTY3MCwgMHg5NjcwLCAweDE4RjAsIDB4OTY3MywgMHg5NjczLCAweDFCNjUsDQotICAgIDB4OTY3NSwgMHg5Njc1LCAweDEyMDQsIDB4OTY3NiwgMHg5Njc2LCAweDEwRDMsIDB4OTY3NywgMHg5Njc3LCAweDFERUQsDQotICAgIDB4OTY3OCwgMHg5Njc4LCAweDExRjEsIDB4OTY3RCwgMHg5NjdELCAweDE3MEMsIDB4OTY4NSwgMHg5Njg1LCAweDE4NTIsDQotICAgIDB4OTY4NiwgMHg5Njg2LCAweDExRkIsIDB4OTY4QSwgMHg5NjhBLCAweDEwQTgsIDB4OTY4QiwgMHg5NjhCLCAweDE1RjMsDQotICAgIDB4OTY4RCwgMHg5NjhELCAweDFFRjYsIDB4OTY4RSwgMHg5NjhFLCAweDBFOEYsIDB4OTY5NCwgMHg5Njk0LCAweDBFMzQsDQotICAgIDB4OTY5NSwgMHg5Njk1LCAweDE4NjcsIDB4OTY5OCwgMHg5Njk4LCAweDE2RDksIDB4OTY5OSwgMHg5Njk5LCAweDBGQjYsDQotICAgIDB4OTY5QiwgMHg5NjlCLCAweDFBN0EsIDB4OTY5QywgMHg5NjlDLCAweDE5QTksIDB4OTZBMywgMHg5NkEzLCAweDEyMjQsDQotICAgIDB4OTZBNywgMHg5NkE4LCAweDE1RjQsIDB4OTZBQSwgMHg5NkFBLCAweDFFMzAsIDB4OTZCMSwgMHg5NkIxLCAweDE4RUIsDQotICAgIDB4OTZCNywgMHg5NkI3LCAweDExOUUsIDB4OTZCQiwgMHg5NkJCLCAweDFCRUIsIDB4OTZDMCwgMHg5NkMwLCAweDE5NzgsDQotICAgIDB4OTZDMSwgMHg5NkMxLCAweDE2QjUsIDB4OTZDNCwgMHg5NkM0LCAweDE4NkUsIDB4OTZDNSwgMHg5NkM1LCAweDE2OUQsDQotICAgIDB4OTZDNiwgMHg5NkM2LCAweDFCN0QsIDB4OTZDNywgMHg5NkM3LCAweDBFQjMsIDB4OTZDOSwgMHg5NkM5LCAweDFDQkQsDQotICAgIDB4OTZDQiwgMHg5NkNCLCAweDFCMDcsIDB4OTZDQywgMHg5NkNDLCAweDE5NkMsIDB4OTZDRCwgMHg5NkNELCAweDE3RDEsDQotICAgIDB4OTZDRSwgMHg5NkNFLCAweDE5RDksIDB4OTZENSwgMHg5NkQ1LCAweDFBQUEsIDB4OTZENiwgMHg5NkQ2LCAweDE1RjYsDQotICAgIDB4OTZEOSwgMHg5NkQ5LCAweDE2OEQsIDB4OTZEQiwgMHg5NkRCLCAweDFDNzUsIDB4OTZEQywgMHg5NkRDLCAweDE5ODUsDQotICAgIDB4OTZFMiwgMHg5NkUyLCAweDEyMUMsIDB4OTZFMywgMHg5NkUzLCAweDEwMkUsIDB4OTZFOCwgMHg5NkU5LCAweDE4NTMsDQotICAgIDB4OTZFQSwgMHg5NkVBLCAweDE1NTUsIDB4OTZFRiwgMHg5NkVGLCAweDEyRUYsIDB4OTZGMCwgMHg5NkYwLCAweDE0MzIsDQotICAgIDB4OTZGMiwgMHg5NkYyLCAweDE4NjgsIDB4OTZGNiwgMHg5NkY2LCAweDExOTYsIDB4OTZGNywgMHg5NkY3LCAweDExQzYsDQotICAgIDB4OTZGOSwgMHg5NkY5LCAweDEzMjcsIDB4OTZGQiwgMHg5NkZCLCAweDFBMTgsIDB4OTcwMCwgMHg5NzAwLCAweDE1RjcsDQotICAgIDB4OTcwNiwgMHg5NzA2LCAweDFBNjIsIDB4OTcwNywgMHg5NzA3LCAweDFCNjYsIDB4OTcxMSwgMHg5NzExLCAweDFBMkEsDQotICAgIDB4OTcxMywgMHg5NzEzLCAweDE3OUYsIDB4OTcxNiwgMHg5NzE2LCAweDEyMkIsIDB4OTcxOSwgMHg5NzE5LCAweDE3OEMsDQotICAgIDB4OTcxQywgMHg5NzFDLCAweDE0RjEsIDB4OTcxRSwgMHg5NzFFLCAweDFEQ0MsIDB4OTcyNywgMHg5NzI3LCAweDEyRTAsDQotICAgIDB4OTczMCwgMHg5NzMwLCAweDE0QzIsIDB4OTczMiwgMHg5NzMyLCAweDExQUMsIDB4OTczOSwgMHg5NzM5LCAweDEzQTYsDQotICAgIDB4OTczRCwgMHg5NzNELCAweDFBN0IsIDB4OTc0MiwgMHg5NzQyLCAweDExNzAsIDB4OTc0NCwgMHg5NzQ0LCAweDE2REEsDQotICAgIDB4OTc0OCwgMHg5NzQ4LCAweDExOTcsIDB4OTc1MSwgMHg5NzUxLCAweDFDMjMsIDB4OTc1NiwgMHg5NzU2LCAweDFBNjMsDQotICAgIDB4OTc1QywgMHg5NzVDLCAweDFBNjQsIDB4OTc1RSwgMHg5NzVFLCAweDE0NjQsIDB4OTc2MSwgMHg5NzYxLCAweDEzMDQsDQotICAgIDB4OTc2MiwgMHg5NzYyLCAweDEyODgsIDB4OTc2OSwgMHg5NzY5LCAweDFFMzUsIDB4OTc2RCwgMHg5NzZELCAweDE5M0EsDQotICAgIDB4OTc3NCwgMHg5Nzc0LCAweDFFQzQsIDB4OTc3NywgMHg5Nzc3LCAweDE5M0IsIDB4OTc3QSwgMHg5NzdBLCAweDEyNTcsDQotICAgIDB4OTc4QiwgMHg5NzhCLCAweDFFNzcsIDB4OTc4RCwgMHg5NzhELCAweDE2QjYsIDB4OTc4RiwgMHg5NzhGLCAweDBFRDksDQotICAgIDB4OTdBMCwgMHg5N0EwLCAweDBGNkUsIDB4OTdBOCwgMHg5N0E4LCAweDBEQjUsIDB4OTdBQiwgMHg5N0FCLCAweDBGNkYsDQotICAgIDB4OTdBRCwgMHg5N0FELCAweDFENjYsIDB4OTdDNiwgMHg5N0M2LCAweDFCRkUsIDB4OTdDQiwgMHg5N0NCLCAweDE4QTMsDQotICAgIDB4OTdEMywgMHg5N0QzLCAweDFERTAsIDB4OTdEQywgMHg5N0RDLCAweDEwRDQsIDB4OTdGMywgMHg5N0YzLCAweDE4RjEsDQotICAgIDB4OTdGNiwgMHg5N0Y2LCAweDE1OUYsIDB4OTdGQiwgMHg5N0ZCLCAweDE4NjksIDB4OTdGRiwgMHg5N0ZGLCAweDFFMjMsDQotICAgIDB4OTgwMCwgMHg5ODAwLCAweDFFOUYsIDB4OTgwMSwgMHg5ODAxLCAweDFFNEQsIDB4OTgwMiwgMHg5ODAyLCAweDFBNjUsDQotICAgIDB4OTgwMywgMHg5ODAzLCAweDBFNzUsIDB4OTgwNSwgMHg5ODA1LCAweDFFMDQsIDB4OTgwNiwgMHg5ODA2LCAweDE2MjEsDQotICAgIDB4OTgwOCwgMHg5ODA4LCAweDE1RjgsIDB4OTgwQSwgMHg5ODBBLCAweDE4NUQsIDB4OTgwQywgMHg5ODBDLCAweDE1QjgsDQotICAgIDB4OTgxMCwgMHg5ODEwLCAweDE3QTAsIDB4OTgxMSwgMHg5ODExLCAweDE3RUMsIDB4OTgxMiwgMHg5ODEyLCAweDEzNDAsDQotICAgIDB4OTgxMywgMHg5ODEzLCAweDEwRTgsIDB4OTgxNywgMHg5ODE3LCAweDFENDEsIDB4OTgxOCwgMHg5ODE4LCAweDExOTgsDQotICAgIDB4OTgyRCwgMHg5ODJELCAweDExMDUsIDB4OTgzMCwgMHg5ODMwLCAweDFFNUEsIDB4OTgzOCwgMHg5ODM4LCAweDBFNzYsDQotICAgIDB4OTgzOSwgMHg5ODM5LCAweDFEMjgsIDB4OTgzQiwgMHg5ODNCLCAweDE0NzQsIDB4OTg0NiwgMHg5ODQ2LCAweDBFRTYsDQotICAgIDB4OTg0QywgMHg5ODRDLCAweDFBN0MsIDB4OTg0RCwgMHg5ODRELCAweDE2RTEsIDB4OTg0RSwgMHg5ODRFLCAweDE2QUMsDQotICAgIDB4OTg1NCwgMHg5ODU0LCAweDE2QjcsIDB4OTg1OCwgMHg5ODU4LCAweDE4ODcsIDB4OTg1QSwgMHg5ODVBLCAweDFBMTksDQotICAgIDB4OTg1RSwgMHg5ODVFLCAweDExRUUsIDB4OTg2NSwgMHg5ODY1LCAweDFFQTAsIDB4OTg2NywgMHg5ODY3LCAweDBFQjQsDQotICAgIDB4OTg2QiwgMHg5ODZCLCAweDFBMUEsIDB4OTg2RiwgMHg5ODZGLCAweDFFNDksIDB4OThBOCwgMHg5OEE4LCAweDFEQUIsDQotICAgIDB4OThBRiwgMHg5OEFGLCAweDE0RDIsIDB4OThCMSwgMHg5OEIxLCAweDFEMTQsIDB4OThDNCwgMHg5OEM0LCAweDFEQTQsDQotICAgIDB4OThDNywgMHg5OEM3LCAweDFEQTMsIDB4OThEQiwgMHg5OERCLCAweDE0NjUsIDB4OThEQywgMHg5OERDLCAweDEzOEMsDQotICAgIDB4OThERiwgMHg5OERGLCAweDE2NjUsIDB4OThFMSwgMHg5OEUxLCAweDE1QUYsIDB4OThFMiwgMHg5OEUyLCAweDEwMTgsDQotICAgIDB4OThFRCwgMHg5OEVELCAweDFDQzIsIDB4OThFRSwgMHg5OEVFLCAweDE4RjIsIDB4OThFRiwgMHg5OEVGLCAweDEzNDEsDQotICAgIDB4OThGNCwgMHg5OEY0LCAweDE5MjMsIDB4OThGQywgMHg5OEZDLCAweDE0QjIsIDB4OThGRCwgMHg5OEZELCAweDFEOTEsDQotICAgIDB4OThGRSwgMHg5OEZFLCAweDE2NjYsIDB4OTkwMywgMHg5OTAzLCAweDBGMzIsIDB4OTkwOSwgMHg5OTA5LCAweDFFMjQsDQotICAgIDB4OTkwQSwgMHg5OTBBLCAweDE3MEQsIDB4OTkwQywgMHg5OTBDLCAweDE5MjQsIDB4OTkxMCwgMHg5OTEwLCAweDFCQTMsDQotICAgIDB4OTkxMywgMHg5OTEzLCAweDE2OUUsIDB4OTkxOCwgMHg5OTE4LCAweDE3M0EsIDB4OTkxRSwgMHg5OTFFLCAweDFBMUIsDQotICAgIDB4OTkyMCwgMHg5OTIwLCAweDEzQzAsIDB4OTkyOCwgMHg5OTI4LCAweDBFRkEsIDB4OTk0NSwgMHg5OTQ1LCAweDEyNEYsDQotICAgIDB4OTk0OSwgMHg5OTQ5LCAweDBGQzUsIDB4OTk0QiwgMHg5OTRCLCAweDBGOTUsIDB4OTk0QywgMHg5OTRDLCAweDFCQTQsDQotICAgIDB4OTk0RCwgMHg5OTRELCAweDE1NDgsIDB4OTk1MSwgMHg5OTUxLCAweDEwMTksIDB4OTk1MiwgMHg5OTUyLCAweDE4MTcsDQotICAgIDB4OTk1NCwgMHg5OTU0LCAweDE3RDIsIDB4OTk1NywgMHg5OTU3LCAweDFFMjUsIDB4OTk5NiwgMHg5OTk2LCAweDE1RjksDQotICAgIDB4OTk5OSwgMHg5OTk5LCAweDFFMjYsIDB4OTk5RCwgMHg5OTlELCAweDFEQkQsIDB4OTlBNSwgMHg5OUE1LCAweDEzRTEsDQotICAgIDB4OTlBOCwgMHg5OUE4LCAweDFFNkUsIDB4OTlBQywgMHg5OUFDLCAweDEyMzUsIDB4OTlBRCwgMHg5OUFELCAweDE3MTUsDQotICAgIDB4OTlBRSwgMHg5OUFFLCAweDFEQUMsIDB4OTlCMSwgMHg5OUIxLCAweDFDRTAsIDB4OTlCMywgMHg5OUIzLCAweDFDQkUsDQotICAgIDB4OTlCNCwgMHg5OUI0LCAweDE2MjIsIDB4OTlCOSwgMHg5OUI5LCAweDE5NDQsIDB4OTlDMSwgMHg5OUMxLCAweDEzMjgsDQotICAgIDB4OTlEMCwgMHg5OUQwLCAweDFBRjMsIDB4OTlEMSwgMHg5OUQxLCAweDEwNEUsIDB4OTlEMiwgMHg5OUQyLCAweDBGNjYsDQotICAgIDB4OTlENSwgMHg5OUQ1LCAweDBEODgsIDB4OTlEOSwgMHg5OUQ5LCAweDE0MUQsIDB4OTlERCwgMHg5OURELCAweDFDRTEsDQotICAgIDB4OTlERiwgMHg5OURGLCAweDE0QjMsIDB4OTlFRCwgMHg5OUVELCAweDFFMTUsIDB4OTlGMSwgMHg5OUYxLCAweDExMjQsDQotICAgIDB4OTlGRiwgMHg5OUZGLCAweDFCMDgsIDB4OUEwMSwgMHg5QTAxLCAweDE0NzgsIDB4OUEwOCwgMHg5QTA4LCAweDEzQzEsDQotICAgIDB4OUEwRSwgMHg5QTBGLCAweDEwMUEsIDB4OUExOSwgMHg5QTE5LCAweDFENjcsIDB4OUEyQiwgMHg5QTJCLCAweDBFMUMsDQotICAgIDB4OUEzMCwgMHg5QTMwLCAweDExMTUsIDB4OUEzNiwgMHg5QTM2LCAweDFDNzYsIDB4OUEzNywgMHg5QTM3LCAweDE1QTAsDQotICAgIDB4OUE0MCwgMHg5QTQwLCAweDEyNzUsIDB4OUE0MywgMHg5QTQzLCAweDFEQTUsIDB4OUE0NSwgMHg5QTQ1LCAweDBGNjcsDQotICAgIDB4OUE0RCwgMHg5QTRELCAweDFGMUQsIDB4OUE1NSwgMHg5QTU1LCAweDBGMzMsIDB4OUE1NywgMHg5QTU3LCAweDFFMzEsDQotICAgIDB4OUE1QSwgMHg5QTVBLCAweDBFNzcsIDB4OUE1QiwgMHg5QTVCLCAweDE3NDMsIDB4OUE1RiwgMHg5QTVGLCAweDFDQTAsDQotICAgIDB4OUE2MiwgMHg5QTYyLCAweDExNjYsIDB4OUE2NSwgMHg5QTY1LCAweDEwMUMsIDB4OUE2OSwgMHg5QTY5LCAweDFFRDksDQotICAgIDB4OUE2QSwgMHg5QTZBLCAweDExNjcsIDB4OUFBOCwgMHg5QUE4LCAweDBFQzksIDB4OUFCOCwgMHg5QUI4LCAweDFFMTYsDQotICAgIDB4OUFEMywgMHg5QUQzLCAweDE1RkEsIDB4OUFENCwgMHg5QUQ0LCAweDFDMkQsIDB4OUFEOCwgMHg5QUQ4LCAweDBFQjUsDQotICAgIDB4OUFFNSwgMHg5QUU1LCAweDE3NkQsIDB4OUFFRSwgMHg5QUVFLCAweDEzNEIsIDB4OUIxQSwgMHg5QjFBLCAweDE1RkIsDQotICAgIDB4OUIyNywgMHg5QjI3LCAweDExRDIsIDB4OUIyQSwgMHg5QjJBLCAweDFEMkUsIDB4OUIzMSwgMHg5QjMxLCAweDE4NkIsDQotICAgIDB4OUIzQywgMHg5QjNDLCAweDBGOTksIDB4OUI0MSwgMHg5QjQxLCAweDBGMTcsIDB4OUI0MiwgMHg5QjQyLCAweDFFQTksDQotICAgIDB4OUI0MywgMHg5QjQzLCAweDEzNEMsIDB4OUI0NCwgMHg5QjQ0LCAweDEzODMsIDB4OUI0NSwgMHg5QjQ1LCAweDEyNzEsDQotICAgIDB4OUI0RiwgMHg5QjRGLCAweDE4QTQsIDB4OUI1NCwgMHg5QjU0LCAweDEyMzYsIDB4OUI1QSwgMHg5QjVBLCAweDE3MTYsDQotICAgIDB4OUI2RiwgMHg5QjZGLCAweDExQUQsIDB4OUI4RSwgMHg5QjhFLCAweDFBMkIsIDB4OUI5MSwgMHg5QjkxLCAweDFEOTIsDQotICAgIDB4OUI5RiwgMHg5QjlGLCAweDE2QjgsIDB4OUJBQiwgMHg5QkFCLCAweDBGMzQsIDB4OUJBRSwgMHg5QkFFLCAweDE1NDksDQotICAgIDB4OUJDOSwgMHg5QkM5LCAweDEyMUQsIDB4OUJENiwgMHg5QkQ2LCAweDFDMjQsIDB4OUJFNCwgMHg5QkU0LCAweDBFQzcsDQotICAgIDB4OUJFOCwgMHg5QkU4LCAweDBFNzgsIDB4OUMwRCwgMHg5QzBELCAweDFDNzcsIDB4OUMxMCwgMHg5QzEwLCAweDE2QUQsDQotICAgIDB4OUMxMiwgMHg5QzEyLCAweDEzRTIsIDB4OUMxNSwgMHg5QzE1LCAweDFEQ0QsIDB4OUMyNSwgMHg5QzI1LCAweDFFREEsDQotICAgIDB4OUMzMiwgMHg5QzMyLCAweDE3QkMsIDB4OUMzQiwgMHg5QzNCLCAweDEyNTAsIDB4OUM0NywgMHg5QzQ3LCAweDBERTcsDQotICAgIDB4OUM0OSwgMHg5QzQ5LCAweDEzQUYsIDB4OUM1NywgMHg5QzU3LCAweDEyMjUsIDB4OUNFNSwgMHg5Q0U1LCAweDFBQUIsDQotICAgIDB4OUNFNywgMHg5Q0U3LCAweDE0MUUsIDB4OUNFOSwgMHg5Q0U5LCAweDBGNjgsIDB4OUNGMywgMHg5Q0YzLCAweDEzRjQsDQotICAgIDB4OUNGNCwgMHg5Q0Y0LCAweDEyOUEsIDB4OUNGNiwgMHg5Q0Y2LCAweDE3NjAsIDB4OUQwOSwgMHg5RDA5LCAweDE2OUYsDQotICAgIDB4OUQxQiwgMHg5RDFCLCAweDE4ODgsIDB4OUQyNiwgMHg5RDI2LCAweDE2Q0YsIDB4OUQyOCwgMHg5RDI4LCAweDE2QzgsDQotICAgIDB4OUQzQiwgMHg5RDNCLCAweDFFQjYsIDB4OUQ1MSwgMHg5RDUxLCAweDBFM0YsIDB4OUQ1RCwgMHg5RDVELCAweDE2QTAsDQotICAgIDB4OUQ2MCwgMHg5RDYwLCAweDBFQkQsIDB4OUQ2MSwgMHg5RDYxLCAweDEyRTEsIDB4OUQ2QywgMHg5RDZDLCAweDE0M0MsDQotICAgIDB4OUQ3MiwgMHg5RDcyLCAweDE5NzksIDB4OURBOSwgMHg5REE5LCAweDEyQkEsIDB4OURBRiwgMHg5REFGLCAweDE2RTQsDQotICAgIDB4OURCNCwgMHg5REI0LCAweDFERDIsIDB4OURDNCwgMHg5REM0LCAweDBFOTAsIDB4OURENywgMHg5REQ3LCAweDBGNjksDQotICAgIDB4OURGMiwgMHg5REYyLCAweDFDQTEsIDB4OURGOCwgMHg5REY4LCAweDFGNEMsIDB4OURGOSwgMHg5REY5LCAweDE4RjksDQotICAgIDB4OURGQSwgMHg5REZBLCAweDExQUUsIDB4OUUxQSwgMHg5RTFBLCAweDE2RTUsIDB4OUUxRSwgMHg5RTFFLCAweDExMkMsDQotICAgIDB4OUU3NSwgMHg5RTc1LCAweDExQUYsIDB4OUU3OSwgMHg5RTc5LCAweDFERUUsIDB4OUU3RCwgMHg5RTdELCAweDE3NkUsDQotICAgIDB4OUU3RiwgMHg5RTdGLCAweDExQjUsIDB4OUU5MiwgMHg5RTkyLCAweDEwMUQsIDB4OUU5MywgMHg5RTkzLCAweDExQjYsDQotICAgIDB4OUU5NywgMHg5RTk3LCAweDExNjgsIDB4OUU5RCwgMHg5RTlELCAweDE0QjQsIDB4OUU5RiwgMHg5RTlGLCAweDEyMjYsDQotICAgIDB4OUVBNSwgMHg5RUE1LCAweDEyNzYsIDB4OUVCNCwgMHg5RUI0LCAweDBGNzAsIDB4OUVCNSwgMHg5RUI1LCAweDEyODksDQotICAgIDB4OUVCQiwgMHg5RUJCLCAweDEyMzcsIDB4OUVCRSwgMHg5RUJFLCAweDFGNDQsIDB4OUVDMywgMHg5RUMzLCAweDFFRjcsDQotICAgIDB4OUVDRCwgMHg5RUNELCAweDE1MTksIDB4OUVDRSwgMHg5RUNFLCAweDExNjksIDB4OUVEMSwgMHg5RUQxLCAweDFGNTIsDQotICAgIDB4OUVENCwgMHg5RUQ0LCAweDBFMjcsIDB4OUVEOCwgMHg5RUQ4LCAweDEyRTMsIDB4OUVEQiwgMHg5RURCLCAweDEwQTksDQotICAgIDB4OUVEQywgMHg5RURDLCAweDFDODksIDB4OUVERSwgMHg5RURFLCAweDFBMkMsIDB4OUVFOCwgMHg5RUU4LCAweDEwOTksDQotICAgIDB4OUVGNCwgMHg5RUY0LCAweDEzMDUsIDB4OUYwNywgMHg5RjA3LCAweDE3QkQsIDB4OUYwOCwgMHg5RjA4LCAweDEzQjAsDQotICAgIDB4OUYwRSwgMHg5RjBFLCAweDFBNjYsIDB4OUYxMywgMHg5RjEzLCAweDBFQjYsIDB4OUYyMCwgMHg5RjIwLCAweDE1MUEsDQotICAgIDB4OUYzQiwgMHg5RjNCLCAweDE0NjYsIDB4OUY0QSwgMHg5RjRBLCAweDFBN0QsIDB4OUY0QiwgMHg5RjRCLCAweDE5QjksDQotICAgIDB4OUY0RSwgMHg5RjRFLCAweDE5QkEsIDB4OUY1MiwgMHg5RjUyLCAweDFDQkYsIDB4OUY1RiwgMHg5RjVGLCAweDE5REEsDQotICAgIDB4OUY2MSwgMHg5RjYxLCAweDExOTksIDB4OUY2NywgMHg5RjY3LCAweDE1NTYsIDB4OUY2QSwgMHg5RjZBLCAweDFCOTUsDQotICAgIDB4OUY2QywgMHg5RjZDLCAweDE3MTcsIDB4OUY3NywgMHg5Rjc3LCAweDE2QUUsIDB4OUY4RCwgMHg5RjhELCAweDExRDMsDQotICAgIDB4OUY5MCwgMHg5RjkwLCAweDEzNjgsIDB4OUY5NSwgMHg5Rjk1LCAweDBEQzksIDB4OUY5QywgMHg5RjlDLCAweDBGNkEsDQotICAgIDB4QUMwMCwgMHhBQzAxLCAweDA0M0UsIDB4QUMwMiwgMHhBQzAzLCAweDI0NzUsIDB4QUMwNCwgMHhBQzA0LCAweDA0NDAsDQotICAgIDB4QUMwNSwgMHhBQzA2LCAweDI0NzcsIDB4QUMwNywgMHhBQzBBLCAweDA0NDEsIDB4QUMwQiwgMHhBQzBGLCAweDI0NzksDQotICAgIDB4QUMxMCwgMHhBQzE3LCAweDA0NDUsIDB4QUMxOCwgMHhBQzE4LCAweDI0N0UsIDB4QUMxOSwgMHhBQzFELCAweDA0NEQsDQotICAgIDB4QUMxRSwgMHhBQzFGLCAweDI0N0YsIDB4QUMyMCwgMHhBQzIwLCAweDA0NTIsIDB4QUMyMSwgMHhBQzIzLCAweDI0ODEsDQotICAgIDB4QUMyNCwgMHhBQzI0LCAweDA0NTMsIDB4QUMyNSwgMHhBQzJCLCAweDI0ODQsIDB4QUMyQywgMHhBQzJELCAweDA0NTQsDQotICAgIDB4QUMyRSwgMHhBQzJFLCAweDI0OEIsIDB4QUMyRiwgMHhBQzMxLCAweDA0NTYsIDB4QUMzMiwgMHhBQzM3LCAweDI0OEMsDQotICAgIDB4QUMzOCwgMHhBQzM5LCAweDA0NTksIDB4QUMzQSwgMHhBQzNCLCAweDI0OTIsIDB4QUMzQywgMHhBQzNDLCAweDA0NUIsDQotICAgIDB4QUMzRCwgMHhBQzNGLCAweDI0OTQsIDB4QUM0MCwgMHhBQzQwLCAweDA0NUMsIDB4QUM0MSwgMHhBQzRBLCAweDI0OTcsDQotICAgIDB4QUM0QiwgMHhBQzRCLCAweDA0NUQsIDB4QUM0QywgMHhBQzRDLCAweDI0QTEsIDB4QUM0RCwgMHhBQzRELCAweDA0NUUsDQotICAgIDB4QUM0RSwgMHhBQzUzLCAweDI0QTIsIDB4QUM1NCwgMHhBQzU0LCAweDA0NUYsIDB4QUM1NSwgMHhBQzU3LCAweDI0QTgsDQotICAgIDB4QUM1OCwgMHhBQzU4LCAweDA0NjAsIDB4QUM1OSwgMHhBQzVCLCAweDI0QUIsIDB4QUM1QywgMHhBQzVDLCAweDA0NjEsDQotICAgIDB4QUM1RCwgMHhBQzZGLCAweDI0QUUsIDB4QUM3MCwgMHhBQzcxLCAweDA0NjIsIDB4QUM3MiwgMHhBQzczLCAweDI0QzEsDQotICAgIDB4QUM3NCwgMHhBQzc0LCAweDA0NjQsIDB4QUM3NSwgMHhBQzc2LCAweDI0QzMsIDB4QUM3NywgMHhBQzc4LCAweDA0NjUsDQotICAgIDB4QUM3OSwgMHhBQzc5LCAweDI0QzUsIDB4QUM3QSwgMHhBQzdBLCAweDA0NjcsIDB4QUM3QiwgMHhBQzdGLCAweDI0QzYsDQotICAgIDB4QUM4MCwgMHhBQzgxLCAweDA0NjgsIDB4QUM4MiwgMHhBQzgyLCAweDI0Q0IsIDB4QUM4MywgMHhBQzg2LCAweDA0NkEsDQotICAgIDB4QUM4NywgMHhBQzg4LCAweDI0Q0MsIDB4QUM4OSwgMHhBQzhDLCAweDA0NkUsIDB4QUM4RCwgMHhBQzhGLCAweDI0Q0UsDQotICAgIDB4QUM5MCwgMHhBQzkwLCAweDA0NzIsIDB4QUM5MSwgMHhBQzkzLCAweDI0RDEsIDB4QUM5NCwgMHhBQzk0LCAweDA0NzMsDQotICAgIDB4QUM5NSwgMHhBQzlCLCAweDI0RDQsIDB4QUM5QywgMHhBQzlELCAweDA0NzQsIDB4QUM5RSwgMHhBQzlFLCAweDI0REIsDQotICAgIDB4QUM5RiwgMHhBQ0ExLCAweDA0NzYsIDB4QUNBMiwgMHhBQ0E3LCAweDI0REMsIDB4QUNBOCwgMHhBQ0FBLCAweDA0NzksDQotICAgIDB4QUNBQiwgMHhBQ0FCLCAweDI0RTIsIDB4QUNBQywgMHhBQ0FDLCAweDA0N0MsIDB4QUNBRCwgMHhBQ0FFLCAweDI0RTMsDQotICAgIDB4QUNBRiwgMHhBQ0IwLCAweDA0N0QsIDB4QUNCMSwgMHhBQ0I3LCAweDI0RTUsIDB4QUNCOCwgMHhBQ0I5LCAweDA0N0YsDQotICAgIDB4QUNCQSwgMHhBQ0JBLCAweDI0RUMsIDB4QUNCQiwgMHhBQ0JELCAweDA0ODEsIDB4QUNCRSwgMHhBQ0MwLCAweDI0RUQsDQotICAgIDB4QUNDMSwgMHhBQ0MxLCAweDA0ODQsIDB4QUNDMiwgMHhBQ0MzLCAweDI0RjAsIDB4QUNDNCwgMHhBQ0M0LCAweDA0ODUsDQotICAgIDB4QUNDNSwgMHhBQ0M3LCAweDI0RjIsIDB4QUNDOCwgMHhBQ0M4LCAweDA0ODYsIDB4QUNDOSwgMHhBQ0NCLCAweDI0RjUsDQotICAgIDB4QUNDQywgMHhBQ0NDLCAweDA0ODcsIDB4QUNDRCwgMHhBQ0Q0LCAweDI0RjgsIDB4QUNENSwgMHhBQ0Q1LCAweDA0ODgsDQotICAgIDB4QUNENiwgMHhBQ0Q2LCAweDI1MDAsIDB4QUNENywgMHhBQ0Q3LCAweDA0ODksIDB4QUNEOCwgMHhBQ0RGLCAweDI1MDEsDQotICAgIDB4QUNFMCwgMHhBQ0UxLCAweDA0OEEsIDB4QUNFMiwgMHhBQ0UzLCAweDI1MDksIDB4QUNFNCwgMHhBQ0U0LCAweDA0OEMsDQotICAgIDB4QUNFNSwgMHhBQ0U2LCAweDI1MEIsIDB4QUNFNywgMHhBQ0U4LCAweDA0OEQsIDB4QUNFOSwgMHhBQ0U5LCAweDI1MEQsDQotICAgIDB4QUNFQSwgMHhBQ0VBLCAweDA0OEYsIDB4QUNFQiwgMHhBQ0VCLCAweDI1MEUsIDB4QUNFQywgMHhBQ0VDLCAweDA0OTAsDQotICAgIDB4QUNFRCwgMHhBQ0VFLCAweDI1MEYsIDB4QUNFRiwgMHhBQ0YxLCAweDA0OTEsIDB4QUNGMiwgMHhBQ0YyLCAweDI1MTEsDQotICAgIDB4QUNGMywgMHhBQ0YzLCAweDA0OTQsIDB4QUNGNCwgMHhBQ0Y0LCAweDI1MTIsIDB4QUNGNSwgMHhBQ0Y2LCAweDA0OTUsDQotICAgIDB4QUNGNywgMHhBQ0ZCLCAweDI1MTMsIDB4QUNGQywgMHhBQ0ZELCAweDA0OTcsIDB4QUNGRSwgMHhBQ0ZGLCAweDI1MTgsDQotICAgIDB4QUQwMCwgMHhBRDAwLCAweDA0OTksIDB4QUQwMSwgMHhBRDAzLCAweDI1MUEsIDB4QUQwNCwgMHhBRDA0LCAweDA0OUEsDQotICAgIDB4QUQwNSwgMHhBRDA1LCAweDI1MUQsIDB4QUQwNiwgMHhBRDA2LCAweDA0OUIsIDB4QUQwNywgMHhBRDBCLCAweDI1MUUsDQotICAgIDB4QUQwQywgMHhBRDBELCAweDA0OUMsIDB4QUQwRSwgMHhBRDBFLCAweDI1MjMsIDB4QUQwRiwgMHhBRDBGLCAweDA0OUUsDQotICAgIDB4QUQxMCwgMHhBRDEwLCAweDI1MjQsIDB4QUQxMSwgMHhBRDExLCAweDA0OUYsIDB4QUQxMiwgMHhBRDE3LCAweDI1MjUsDQotICAgIDB4QUQxOCwgMHhBRDE4LCAweDA0QTAsIDB4QUQxOSwgMHhBRDFCLCAweDI1MkIsIDB4QUQxQywgMHhBRDFDLCAweDA0QTEsDQotICAgIDB4QUQxRCwgMHhBRDFGLCAweDI1MkUsIDB4QUQyMCwgMHhBRDIwLCAweDA0QTIsIDB4QUQyMSwgMHhBRDI4LCAweDI1MzEsDQotICAgIDB4QUQyOSwgMHhBRDI5LCAweDA0QTMsIDB4QUQyQSwgMHhBRDJCLCAweDI1MzksIDB4QUQyQywgMHhBRDJELCAweDA0QTQsDQotICAgIDB4QUQyRSwgMHhBRDMzLCAweDI1M0IsIDB4QUQzNCwgMHhBRDM1LCAweDA0QTYsIDB4QUQzNiwgMHhBRDM3LCAweDI1NDEsDQotICAgIDB4QUQzOCwgMHhBRDM4LCAweDA0QTgsIDB4QUQzOSwgMHhBRDNCLCAweDI1NDMsIDB4QUQzQywgMHhBRDNDLCAweDA0QTksDQotICAgIDB4QUQzRCwgMHhBRDQzLCAweDI1NDYsIDB4QUQ0NCwgMHhBRDQ1LCAweDA0QUEsIDB4QUQ0NiwgMHhBRDQ2LCAweDI1NEQsDQotICAgIDB4QUQ0NywgMHhBRDQ3LCAweDA0QUMsIDB4QUQ0OCwgMHhBRDQ4LCAweDI1NEUsIDB4QUQ0OSwgMHhBRDQ5LCAweDA0QUQsDQotICAgIDB4QUQ0QSwgMHhBRDRGLCAweDI1NEYsIDB4QUQ1MCwgMHhBRDUwLCAweDA0QUUsIDB4QUQ1MSwgMHhBRDUzLCAweDI1NTUsDQotICAgIDB4QUQ1NCwgMHhBRDU0LCAweDA0QUYsIDB4QUQ1NSwgMHhBRDU3LCAweDI1NTgsIDB4QUQ1OCwgMHhBRDU4LCAweDA0QjAsDQotICAgIDB4QUQ1OSwgMHhBRDYwLCAweDI1NUIsIDB4QUQ2MSwgMHhBRDYxLCAweDA0QjEsIDB4QUQ2MiwgMHhBRDYyLCAweDI1NjMsDQotICAgIDB4QUQ2MywgMHhBRDYzLCAweDA0QjIsIDB4QUQ2NCwgMHhBRDZCLCAweDI1NjQsIDB4QUQ2QywgMHhBRDZELCAweDA0QjMsDQotICAgIDB4QUQ2RSwgMHhBRDZGLCAweDI1NkMsIDB4QUQ3MCwgMHhBRDcwLCAweDA0QjUsIDB4QUQ3MSwgMHhBRDcyLCAweDI1NkUsDQotICAgIDB4QUQ3MywgMHhBRDc2LCAweDA0QjYsIDB4QUQ3NywgMHhBRDdBLCAweDI1NzAsIDB4QUQ3QiwgMHhBRDdELCAweDA0QkEsDQotICAgIDB4QUQ3RSwgMHhBRDdFLCAweDI1NzQsIDB4QUQ3RiwgMHhBRDdGLCAweDA0QkQsIDB4QUQ4MCwgMHhBRDgwLCAweDI1NzUsDQotICAgIDB4QUQ4MSwgMHhBRDgyLCAweDA0QkUsIDB4QUQ4MywgMHhBRDg3LCAweDI1NzYsIDB4QUQ4OCwgMHhBRDg5LCAweDA0QzAsDQotICAgIDB4QUQ4QSwgMHhBRDhCLCAweDI1N0IsIDB4QUQ4QywgMHhBRDhDLCAweDA0QzIsIDB4QUQ4RCwgMHhBRDhGLCAweDI1N0QsDQotICAgIDB4QUQ5MCwgMHhBRDkwLCAweDA0QzMsIDB4QUQ5MSwgMHhBRDlCLCAweDI1ODAsIDB4QUQ5QywgMHhBRDlELCAweDA0QzQsDQotICAgIDB4QUQ5RSwgMHhBREEzLCAweDI1OEIsIDB4QURBNCwgMHhBREE0LCAweDA0QzYsIDB4QURBNSwgMHhBREI2LCAweDI1OTEsDQotICAgIDB4QURCNywgMHhBREI3LCAweDA0QzcsIDB4QURCOCwgMHhBREJGLCAweDI1QTMsIDB4QURDMCwgMHhBREMxLCAweDA0QzgsDQotICAgIDB4QURDMiwgMHhBREMzLCAweDI1QUIsIDB4QURDNCwgMHhBREM0LCAweDA0Q0EsIDB4QURDNSwgMHhBREM3LCAweDI1QUQsDQotICAgIDB4QURDOCwgMHhBREM4LCAweDA0Q0IsIDB4QURDOSwgMHhBRENGLCAweDI1QjAsIDB4QUREMCwgMHhBREQxLCAweDA0Q0MsDQotICAgIDB4QUREMiwgMHhBREQyLCAweDI1QjcsIDB4QUREMywgMHhBREQzLCAweDA0Q0UsIDB4QURENCwgMHhBRERCLCAweDI1QjgsDQotICAgIDB4QUREQywgMHhBRERDLCAweDA0Q0YsIDB4QURERCwgMHhBRERGLCAweDI1QzAsIDB4QURFMCwgMHhBREUwLCAweDA0RDAsDQotICAgIDB4QURFMSwgMHhBREUzLCAweDI1QzMsIDB4QURFNCwgMHhBREU0LCAweDA0RDEsIDB4QURFNSwgMHhBREY3LCAweDI1QzYsDQotICAgIDB4QURGOCwgMHhBREY5LCAweDA0RDIsIDB4QURGQSwgMHhBREZCLCAweDI1RDksIDB4QURGQywgMHhBREZDLCAweDA0RDQsDQotICAgIDB4QURGRCwgMHhBREZFLCAweDI1REIsIDB4QURGRiwgMHhBREZGLCAweDA0RDUsIDB4QUUwMCwgMHhBRTAxLCAweDA0RDYsDQotICAgIDB4QUUwMiwgMHhBRTA3LCAweDI1REQsIDB4QUUwOCwgMHhBRTA5LCAweDA0RDgsIDB4QUUwQSwgMHhBRTBBLCAweDI1RTMsDQotICAgIDB4QUUwQiwgMHhBRTBCLCAweDA0REEsIDB4QUUwQywgMHhBRTBDLCAweDI1RTQsIDB4QUUwRCwgMHhBRTBELCAweDA0REIsDQotICAgIDB4QUUwRSwgMHhBRTEzLCAweDI1RTUsIDB4QUUxNCwgMHhBRTE0LCAweDA0REMsIDB4QUUxNSwgMHhBRTJGLCAweDI1RUIsDQotICAgIDB4QUUzMCwgMHhBRTMxLCAweDA0REQsIDB4QUUzMiwgMHhBRTMzLCAweDI2MDYsIDB4QUUzNCwgMHhBRTM0LCAweDA0REYsDQotICAgIDB4QUUzNSwgMHhBRTM2LCAweDI2MDgsIDB4QUUzNywgMHhBRTM4LCAweDA0RTAsIDB4QUUzOSwgMHhBRTM5LCAweDI2MEEsDQotICAgIDB4QUUzQSwgMHhBRTNBLCAweDA0RTIsIDB4QUUzQiwgMHhBRTNGLCAweDI2MEIsIDB4QUU0MCwgMHhBRTQxLCAweDA0RTMsDQotICAgIDB4QUU0MiwgMHhBRTQyLCAweDI2MTAsIDB4QUU0MywgMHhBRTQzLCAweDA0RTUsIDB4QUU0NCwgMHhBRTQ0LCAweDI2MTEsDQotICAgIDB4QUU0NSwgMHhBRTQ2LCAweDA0RTYsIDB4QUU0NywgMHhBRTQ5LCAweDI2MTIsIDB4QUU0QSwgMHhBRTRBLCAweDA0RTgsDQotICAgIDB4QUU0QiwgMHhBRTRCLCAweDI2MTUsIDB4QUU0QywgMHhBRTRFLCAweDA0RTksIDB4QUU0RiwgMHhBRTRGLCAweDI2MTYsDQotICAgIDB4QUU1MCwgMHhBRTUwLCAweDA0RUMsIDB4QUU1MSwgMHhBRTUzLCAweDI2MTcsIDB4QUU1NCwgMHhBRTU0LCAweDA0RUQsDQotICAgIDB4QUU1NSwgMHhBRTU1LCAweDI2MUEsIDB4QUU1NiwgMHhBRTU2LCAweDA0RUUsIDB4QUU1NywgMHhBRTVCLCAweDI2MUIsDQotICAgIDB4QUU1QywgMHhBRTVELCAweDA0RUYsIDB4QUU1RSwgMHhBRTVFLCAweDI2MjAsIDB4QUU1RiwgMHhBRTYxLCAweDA0RjEsDQotICAgIDB4QUU2MiwgMHhBRTY0LCAweDI2MjEsIDB4QUU2NSwgMHhBRTY1LCAweDA0RjQsIDB4QUU2NiwgMHhBRTY3LCAweDI2MjQsDQotICAgIDB4QUU2OCwgMHhBRTY5LCAweDA0RjUsIDB4QUU2QSwgMHhBRTZCLCAweDI2MjYsIDB4QUU2QywgMHhBRTZDLCAweDA0RjcsDQotICAgIDB4QUU2RCwgMHhBRTZGLCAweDI2MjgsIDB4QUU3MCwgMHhBRTcwLCAweDA0RjgsIDB4QUU3MSwgMHhBRTc3LCAweDI2MkIsDQotICAgIDB4QUU3OCwgMHhBRTc5LCAweDA0RjksIDB4QUU3QSwgMHhBRTdBLCAweDI2MzIsIDB4QUU3QiwgMHhBRTdELCAweDA0RkIsDQotICAgIDB4QUU3RSwgMHhBRTgzLCAweDI2MzMsIDB4QUU4NCwgMHhBRTg1LCAweDA0RkUsIDB4QUU4NiwgMHhBRThCLCAweDI2MzksDQotICAgIDB4QUU4QywgMHhBRThDLCAweDA1MDAsIDB4QUU4RCwgMHhBRUJCLCAweDI2M0YsIDB4QUVCQywgMHhBRUJFLCAweDA1MDEsDQotICAgIDB4QUVCRiwgMHhBRUJGLCAweDI2NkUsIDB4QUVDMCwgMHhBRUMwLCAweDA1MDQsIDB4QUVDMSwgMHhBRUMzLCAweDI2NkYsDQotICAgIDB4QUVDNCwgMHhBRUM0LCAweDA1MDUsIDB4QUVDNSwgMHhBRUNCLCAweDI2NzIsIDB4QUVDQywgMHhBRUNELCAweDA1MDYsDQotICAgIDB4QUVDRSwgMHhBRUNFLCAweDI2NzksIDB4QUVDRiwgMHhBRUQxLCAweDA1MDgsIDB4QUVEMiwgMHhBRUQ3LCAweDI2N0EsDQotICAgIDB4QUVEOCwgMHhBRUQ5LCAweDA1MEIsIDB4QUVEQSwgMHhBRURCLCAweDI2ODAsIDB4QUVEQywgMHhBRURDLCAweDA1MEQsDQotICAgIDB4QUVERCwgMHhBRUU3LCAweDI2ODIsIDB4QUVFOCwgMHhBRUU4LCAweDA1MEUsIDB4QUVFOSwgMHhBRUVBLCAweDI2OEQsDQotICAgIDB4QUVFQiwgMHhBRUVCLCAweDA1MEYsIDB4QUVFQywgMHhBRUVDLCAweDI2OEYsIDB4QUVFRCwgMHhBRUVELCAweDA1MTAsDQotICAgIDB4QUVFRSwgMHhBRUYzLCAweDI2OTAsIDB4QUVGNCwgMHhBRUY0LCAweDA1MTEsIDB4QUVGNSwgMHhBRUY3LCAweDI2OTYsDQotICAgIDB4QUVGOCwgMHhBRUY4LCAweDA1MTIsIDB4QUVGOSwgMHhBRUZCLCAweDI2OTksIDB4QUVGQywgMHhBRUZDLCAweDA1MTMsDQotICAgIDB4QUVGRCwgMHhBRUZGLCAweDI2OUMsIDB4QUYwMCwgMHhBRjA2LCAweDI2OUYsIDB4QUYwNywgMHhBRjA4LCAweDA1MTQsDQotICAgIDB4QUYwOSwgMHhBRjBDLCAweDI2QTYsIDB4QUYwRCwgMHhBRjBELCAweDA1MTYsIDB4QUYwRSwgMHhBRjBGLCAweDI2QUEsDQotICAgIDB4QUYxMCwgMHhBRjEwLCAweDA1MTcsIDB4QUYxMSwgMHhBRjJCLCAweDI2QUMsIDB4QUYyQywgMHhBRjJELCAweDA1MTgsDQotICAgIDB4QUYyRSwgMHhBRjJGLCAweDI2QzcsIDB4QUYzMCwgMHhBRjMwLCAweDA1MUEsIDB4QUYzMSwgMHhBRjMxLCAweDI2QzksDQotICAgIDB4QUYzMiwgMHhBRjMyLCAweDA1MUIsIDB4QUYzMywgMHhBRjMzLCAweDI2Q0EsIDB4QUYzNCwgMHhBRjM0LCAweDA1MUMsDQotICAgIDB4QUYzNSwgMHhBRjNCLCAweDI2Q0IsIDB4QUYzQywgMHhBRjNELCAweDA1MUQsIDB4QUYzRSwgMHhBRjNFLCAweDI2RDIsDQotICAgIDB4QUYzRiwgMHhBRjNGLCAweDA1MUYsIDB4QUY0MCwgMHhBRjQwLCAweDI2RDMsIDB4QUY0MSwgMHhBRjQzLCAweDA1MjAsDQotICAgIDB4QUY0NCwgMHhBRjQ3LCAweDI2RDQsIDB4QUY0OCwgMHhBRjQ5LCAweDA1MjMsIDB4QUY0QSwgMHhBRjRGLCAweDI2RDgsDQotICAgIDB4QUY1MCwgMHhBRjUwLCAweDA1MjUsIDB4QUY1MSwgMHhBRjVCLCAweDI2REUsIDB4QUY1QywgMHhBRjVELCAweDA1MjYsDQotICAgIDB4QUY1RSwgMHhBRjYzLCAweDI2RTksIDB4QUY2NCwgMHhBRjY1LCAweDA1MjgsIDB4QUY2NiwgMHhBRjc4LCAweDI2RUYsDQotICAgIDB4QUY3OSwgMHhBRjc5LCAweDA1MkEsIDB4QUY3QSwgMHhBRjdGLCAweDI3MDIsIDB4QUY4MCwgMHhBRjgwLCAweDA1MkIsDQotICAgIDB4QUY4MSwgMHhBRjgzLCAweDI3MDgsIDB4QUY4NCwgMHhBRjg0LCAweDA1MkMsIDB4QUY4NSwgMHhBRjg3LCAweDI3MEIsDQotICAgIDB4QUY4OCwgMHhBRjg4LCAweDA1MkQsIDB4QUY4OSwgMHhBRjhGLCAweDI3MEUsIDB4QUY5MCwgMHhBRjkxLCAweDA1MkUsDQotICAgIDB4QUY5MiwgMHhBRjk0LCAweDI3MTUsIDB4QUY5NSwgMHhBRjk1LCAweDA1MzAsIDB4QUY5NiwgMHhBRjlCLCAweDI3MTgsDQotICAgIDB4QUY5QywgMHhBRjlDLCAweDA1MzEsIDB4QUY5RCwgMHhBRkI3LCAweDI3MUUsIDB4QUZCOCwgMHhBRkI5LCAweDA1MzIsDQotICAgIDB4QUZCQSwgMHhBRkJCLCAweDI3MzksIDB4QUZCQywgMHhBRkJDLCAweDA1MzQsIDB4QUZCRCwgMHhBRkJGLCAweDI3M0IsDQotICAgIDB4QUZDMCwgMHhBRkMwLCAweDA1MzUsIDB4QUZDMSwgMHhBRkM2LCAweDI3M0UsIDB4QUZDNywgMHhBRkM5LCAweDA1MzYsDQotICAgIDB4QUZDQSwgMHhBRkNBLCAweDI3NDQsIDB4QUZDQiwgMHhBRkNCLCAweDA1MzksIDB4QUZDQywgMHhBRkNDLCAweDI3NDUsDQotICAgIDB4QUZDRCwgMHhBRkNFLCAweDA1M0EsIDB4QUZDRiwgMHhBRkQzLCAweDI3NDYsIDB4QUZENCwgMHhBRkQ0LCAweDA1M0MsDQotICAgIDB4QUZENSwgMHhBRkRCLCAweDI3NEIsIDB4QUZEQywgMHhBRkRDLCAweDA1M0QsIDB4QUZERCwgMHhBRkU3LCAweDI3NTIsDQotICAgIDB4QUZFOCwgMHhBRkU5LCAweDA1M0UsIDB4QUZFQSwgMHhBRkVGLCAweDI3NUQsIDB4QUZGMCwgMHhBRkYxLCAweDA1NDAsDQotICAgIDB4QUZGMiwgMHhBRkYzLCAweDI3NjMsIDB4QUZGNCwgMHhBRkY0LCAweDA1NDIsIDB4QUZGNSwgMHhBRkY3LCAweDI3NjUsDQotICAgIDB4QUZGOCwgMHhBRkY4LCAweDA1NDMsIDB4QUZGOSwgMHhBRkZGLCAweDI3NjgsIDB4QjAwMCwgMHhCMDAxLCAweDA1NDQsDQotICAgIDB4QjAwMiwgMHhCMDAzLCAweDI3NkYsIDB4QjAwNCwgMHhCMDA0LCAweDA1NDYsIDB4QjAwNSwgMHhCMDBCLCAweDI3NzEsDQotICAgIDB4QjAwQywgMHhCMDBDLCAweDA1NDcsIDB4QjAwRCwgMHhCMDBGLCAweDI3NzgsIDB4QjAxMCwgMHhCMDEwLCAweDA1NDgsDQotICAgIDB4QjAxMSwgMHhCMDEzLCAweDI3N0IsIDB4QjAxNCwgMHhCMDE0LCAweDA1NDksIDB4QjAxNSwgMHhCMDFCLCAweDI3N0UsDQotICAgIDB4QjAxQywgMHhCMDFELCAweDA1NEEsIDB4QjAxRSwgMHhCMDI3LCAweDI3ODUsIDB4QjAyOCwgMHhCMDI4LCAweDA1NEMsDQotICAgIDB4QjAyOSwgMHhCMDQzLCAweDI3OEYsIDB4QjA0NCwgMHhCMDQ1LCAweDA1NEQsIDB4QjA0NiwgMHhCMDQ3LCAweDI3QUEsDQotICAgIDB4QjA0OCwgMHhCMDQ4LCAweDA1NEYsIDB4QjA0OSwgMHhCMDQ5LCAweDI3QUMsIDB4QjA0QSwgMHhCMDRBLCAweDA1NTAsDQotICAgIDB4QjA0QiwgMHhCMDRCLCAweDI3QUQsIDB4QjA0QywgMHhCMDRDLCAweDA1NTEsIDB4QjA0RCwgMHhCMDRELCAweDI3QUUsDQotICAgIDB4QjA0RSwgMHhCMDRFLCAweDA1NTIsIDB4QjA0RiwgMHhCMDUyLCAweDI3QUYsIDB4QjA1MywgMHhCMDU1LCAweDA1NTMsDQotICAgIDB4QjA1NiwgMHhCMDU2LCAweDI3QjMsIDB4QjA1NywgMHhCMDU3LCAweDA1NTYsIDB4QjA1OCwgMHhCMDU4LCAweDI3QjQsDQotICAgIDB4QjA1OSwgMHhCMDU5LCAweDA1NTcsIDB4QjA1QSwgMHhCMDVDLCAweDI3QjUsIDB4QjA1RCwgMHhCMDVELCAweDA1NTgsDQotICAgIDB4QjA1RSwgMHhCMDdCLCAweDI3QjgsIDB4QjA3QywgMHhCMDdELCAweDA1NTksIDB4QjA3RSwgMHhCMDdGLCAweDI3RDYsDQotICAgIDB4QjA4MCwgMHhCMDgwLCAweDA1NUIsIDB4QjA4MSwgMHhCMDgzLCAweDI3RDgsIDB4QjA4NCwgMHhCMDg0LCAweDA1NUMsDQotICAgIDB4QjA4NSwgMHhCMDhCLCAweDI3REIsIDB4QjA4QywgMHhCMDhELCAweDA1NUQsIDB4QjA4RSwgMHhCMDhFLCAweDI3RTIsDQotICAgIDB4QjA4RiwgMHhCMDhGLCAweDA1NUYsIDB4QjA5MCwgMHhCMDkwLCAweDI3RTMsIDB4QjA5MSwgMHhCMDkxLCAweDA1NjAsDQotICAgIDB4QjA5MiwgMHhCMDk3LCAweDI3RTQsIDB4QjA5OCwgMHhCMDlBLCAweDA1NjEsIDB4QjA5QiwgMHhCMDlCLCAweDI3RUEsDQotICAgIDB4QjA5QywgMHhCMDlDLCAweDA1NjQsIDB4QjA5RCwgMHhCMDlFLCAweDI3RUIsIDB4QjA5RiwgMHhCMEEyLCAweDA1NjUsDQotICAgIDB4QjBBMywgMHhCMEE3LCAweDI3RUQsIDB4QjBBOCwgMHhCMEE5LCAweDA1NjksIDB4QjBBQSwgMHhCMEFBLCAweDI3RjIsDQotICAgIDB4QjBBQiwgMHhCMEFGLCAweDA1NkIsIDB4QjBCMCwgMHhCMEIwLCAweDI3RjMsIDB4QjBCMSwgMHhCMEIxLCAweDA1NzAsDQotICAgIDB4QjBCMiwgMHhCMEIyLCAweDI3RjQsIDB4QjBCMywgMHhCMEI1LCAweDA1NzEsIDB4QjBCNiwgMHhCMEI3LCAweDI3RjUsDQotICAgIDB4QjBCOCwgMHhCMEI4LCAweDA1NzQsIDB4QjBCOSwgMHhCMEJCLCAweDI3RjcsIDB4QjBCQywgMHhCMEJDLCAweDA1NzUsDQotICAgIDB4QjBCRCwgMHhCMEMzLCAweDI3RkEsIDB4QjBDNCwgMHhCMEM1LCAweDA1NzYsIDB4QjBDNiwgMHhCMEM2LCAweDI4MDEsDQotICAgIDB4QjBDNywgMHhCMEM5LCAweDA1NzgsIDB4QjBDQSwgMHhCMENGLCAweDI4MDIsIDB4QjBEMCwgMHhCMEQxLCAweDA1N0IsDQotICAgIDB4QjBEMiwgMHhCMEQzLCAweDI4MDgsIDB4QjBENCwgMHhCMEQ0LCAweDA1N0QsIDB4QjBENSwgMHhCMEQ3LCAweDI4MEEsDQotICAgIDB4QjBEOCwgMHhCMEQ4LCAweDA1N0UsIDB4QjBEOSwgMHhCMERGLCAweDI4MEQsIDB4QjBFMCwgMHhCMEUwLCAweDA1N0YsDQotICAgIDB4QjBFMSwgMHhCMEU0LCAweDI4MTQsIDB4QjBFNSwgMHhCMEU1LCAweDA1ODAsIDB4QjBFNiwgMHhCMEZGLCAweDI4MTgsDQotICAgIDB4QjEwMCwgMHhCMTA3LCAweDI4MzIsIDB4QjEwOCwgMHhCMTA5LCAweDA1ODEsIDB4QjEwQSwgMHhCMTBBLCAweDI4M0EsDQotICAgIDB4QjEwQiwgMHhCMTBDLCAweDA1ODMsIDB4QjEwRCwgMHhCMTBGLCAweDI4M0IsIDB4QjExMCwgMHhCMTEwLCAweDA1ODUsDQotICAgIDB4QjExMSwgMHhCMTExLCAweDI4M0UsIDB4QjExMiwgMHhCMTEzLCAweDA1ODYsIDB4QjExNCwgMHhCMTE3LCAweDI4M0YsDQotICAgIDB4QjExOCwgMHhCMTE5LCAweDA1ODgsIDB4QjExQSwgMHhCMTFBLCAweDI4NDMsIDB4QjExQiwgMHhCMTFELCAweDA1OEEsDQotICAgIDB4QjExRSwgMHhCMTIyLCAweDI4NDQsIDB4QjEyMywgMHhCMTI1LCAweDA1OEQsIDB4QjEyNiwgMHhCMTI3LCAweDI4NDksDQotICAgIDB4QjEyOCwgMHhCMTI4LCAweDA1OTAsIDB4QjEyOSwgMHhCMTJCLCAweDI4NEIsIDB4QjEyQywgMHhCMTJDLCAweDA1OTEsDQotICAgIDB4QjEyRCwgMHhCMTMzLCAweDI4NEUsIDB4QjEzNCwgMHhCMTM1LCAweDA1OTIsIDB4QjEzNiwgMHhCMTM2LCAweDI4NTUsDQotICAgIDB4QjEzNywgMHhCMTM5LCAweDA1OTQsIDB4QjEzQSwgMHhCMTNGLCAweDI4NTYsIDB4QjE0MCwgMHhCMTQxLCAweDA1OTcsDQotICAgIDB4QjE0MiwgMHhCMTQzLCAweDI4NUMsIDB4QjE0NCwgMHhCMTQ0LCAweDA1OTksIDB4QjE0NSwgMHhCMTQ3LCAweDI4NUUsDQotICAgIDB4QjE0OCwgMHhCMTQ4LCAweDA1OUEsIDB4QjE0OSwgMHhCMTRGLCAweDI4NjEsIDB4QjE1MCwgMHhCMTUxLCAweDA1OUIsDQotICAgIDB4QjE1MiwgMHhCMTUzLCAweDI4NjgsIDB4QjE1NCwgMHhCMTU1LCAweDA1OUQsIDB4QjE1NiwgMHhCMTU3LCAweDI4NkEsDQotICAgIDB4QjE1OCwgMHhCMTU4LCAweDA1OUYsIDB4QjE1OSwgMHhCMTVCLCAweDI4NkMsIDB4QjE1QywgMHhCMTVDLCAweDA1QTAsDQotICAgIDB4QjE1RCwgMHhCMTVGLCAweDI4NkYsIDB4QjE2MCwgMHhCMTYwLCAweDA1QTEsIDB4QjE2MSwgMHhCMTc3LCAweDI4NzIsDQotICAgIDB4QjE3OCwgMHhCMTc5LCAweDA1QTIsIDB4QjE3QSwgMHhCMTdCLCAweDI4ODksIDB4QjE3QywgMHhCMTdDLCAweDA1QTQsDQotICAgIDB4QjE3RCwgMHhCMTdGLCAweDI4OEIsIDB4QjE4MCwgMHhCMTgwLCAweDA1QTUsIDB4QjE4MSwgMHhCMTgxLCAweDI4OEUsDQotICAgIDB4QjE4MiwgMHhCMTgyLCAweDA1QTYsIDB4QjE4MywgMHhCMTg3LCAweDI4OEYsIDB4QjE4OCwgMHhCMTg5LCAweDA1QTcsDQotICAgIDB4QjE4QSwgMHhCMThBLCAweDI4OTQsIDB4QjE4QiwgMHhCMThCLCAweDA1QTksIDB4QjE4QywgMHhCMThDLCAweDI4OTUsDQotICAgIDB4QjE4RCwgMHhCMThELCAweDA1QUEsIDB4QjE4RSwgMHhCMTkxLCAweDI4OTYsIDB4QjE5MiwgMHhCMTk0LCAweDA1QUIsDQotICAgIDB4QjE5NSwgMHhCMTk3LCAweDI4OUEsIDB4QjE5OCwgMHhCMTk4LCAweDA1QUUsIDB4QjE5OSwgMHhCMTlCLCAweDI4OUQsDQotICAgIDB4QjE5QywgMHhCMTlDLCAweDA1QUYsIDB4QjE5RCwgMHhCMUE3LCAweDI4QTAsIDB4QjFBOCwgMHhCMUE4LCAweDA1QjAsDQotICAgIDB4QjFBOSwgMHhCMUNCLCAweDI4QUIsIDB4QjFDQywgMHhCMUNDLCAweDA1QjEsIDB4QjFDRCwgMHhCMUNGLCAweDI4Q0UsDQotICAgIDB4QjFEMCwgMHhCMUQwLCAweDA1QjIsIDB4QjFEMSwgMHhCMUQzLCAweDI4RDEsIDB4QjFENCwgMHhCMUQ0LCAweDA1QjMsDQotICAgIDB4QjFENSwgMHhCMURCLCAweDI4RDQsIDB4QjFEQywgMHhCMURELCAweDA1QjQsIDB4QjFERSwgMHhCMURFLCAweDI4REIsDQotICAgIDB4QjFERiwgMHhCMURGLCAweDA1QjYsIDB4QjFFMCwgMHhCMUU3LCAweDI4REMsIDB4QjFFOCwgMHhCMUU5LCAweDA1QjcsDQotICAgIDB4QjFFQSwgMHhCMUVCLCAweDI4RTQsIDB4QjFFQywgMHhCMUVDLCAweDA1QjksIDB4QjFFRCwgMHhCMUVGLCAweDI4RTYsDQotICAgIDB4QjFGMCwgMHhCMUYwLCAweDA1QkEsIDB4QjFGMSwgMHhCMUY4LCAweDI4RTksIDB4QjFGOSwgMHhCMUY5LCAweDA1QkIsDQotICAgIDB4QjFGQSwgMHhCMUZBLCAweDI4RjEsIDB4QjFGQiwgMHhCMUZCLCAweDA1QkMsIDB4QjFGQywgMHhCMUZDLCAweDI4RjIsDQotICAgIDB4QjFGRCwgMHhCMUZELCAweDA1QkQsIDB4QjFGRSwgMHhCMUZGLCAweDI4RjMsIDB4QjIwMCwgMHhCMjAzLCAweDI4RjUsDQotICAgIDB4QjIwNCwgMHhCMjA1LCAweDA1QkUsIDB4QjIwNiwgMHhCMjA3LCAweDI4RjksIDB4QjIwOCwgMHhCMjA4LCAweDA1QzAsDQotICAgIDB4QjIwOSwgMHhCMjBBLCAweDI4RkIsIDB4QjIwQiwgMHhCMjBDLCAweDA1QzEsIDB4QjIwRCwgMHhCMjEzLCAweDI4RkQsDQotICAgIDB4QjIxNCwgMHhCMjE1LCAweDA1QzMsIDB4QjIxNiwgMHhCMjE2LCAweDI5MDQsIDB4QjIxNywgMHhCMjE3LCAweDA1QzUsDQotICAgIDB4QjIxOCwgMHhCMjE4LCAweDI5MDUsIDB4QjIxOSwgMHhCMjE5LCAweDA1QzYsIDB4QjIxQSwgMHhCMjFGLCAweDI5MDYsDQotICAgIDB4QjIyMCwgMHhCMjIwLCAweDA1QzcsIDB4QjIyMSwgMHhCMjMzLCAweDI5MEMsIDB4QjIzNCwgMHhCMjM0LCAweDA1QzgsDQotICAgIDB4QjIzNSwgMHhCMjNCLCAweDI5MUYsIDB4QjIzQywgMHhCMjNDLCAweDA1QzksIDB4QjIzRCwgMHhCMjU3LCAweDI5MjYsDQotICAgIDB4QjI1OCwgMHhCMjU4LCAweDA1Q0EsIDB4QjI1OSwgMHhCMjVCLCAweDI5NDEsIDB4QjI1QywgMHhCMjVDLCAweDA1Q0IsDQotICAgIDB4QjI1RCwgMHhCMjVGLCAweDI5NDQsIDB4QjI2MCwgMHhCMjYwLCAweDA1Q0MsIDB4QjI2MSwgMHhCMjY3LCAweDI5NDcsDQotICAgIDB4QjI2OCwgMHhCMjY5LCAweDA1Q0QsIDB4QjI2QSwgMHhCMjczLCAweDI5NEUsIDB4QjI3NCwgMHhCMjc1LCAweDA1Q0YsDQotICAgIDB4QjI3NiwgMHhCMjdCLCAweDI5NTgsIDB4QjI3QywgMHhCMjdDLCAweDA1RDEsIDB4QjI3RCwgMHhCMjgzLCAweDI5NUUsDQotICAgIDB4QjI4NCwgMHhCMjg1LCAweDA1RDIsIDB4QjI4NiwgMHhCMjg4LCAweDI5NjUsIDB4QjI4OSwgMHhCMjg5LCAweDA1RDQsDQotICAgIDB4QjI4QSwgMHhCMjhGLCAweDI5NjgsIDB4QjI5MCwgMHhCMjkxLCAweDA1RDUsIDB4QjI5MiwgMHhCMjkzLCAweDI5NkUsDQotICAgIDB4QjI5NCwgMHhCMjk0LCAweDA1RDcsIDB4QjI5NSwgMHhCMjk3LCAweDI5NzAsIDB4QjI5OCwgMHhCMjlBLCAweDA1RDgsDQotICAgIDB4QjI5QiwgMHhCMjlGLCAweDI5NzMsIDB4QjJBMCwgMHhCMkExLCAweDA1REIsIDB4QjJBMiwgMHhCMkEyLCAweDI5NzgsDQotICAgIDB4QjJBMywgMHhCMkEzLCAweDA1REQsIDB4QjJBNCwgMHhCMkE0LCAweDI5NzksIDB4QjJBNSwgMHhCMkE2LCAweDA1REUsDQotICAgIDB4QjJBNywgMHhCMkE5LCAweDI5N0EsIDB4QjJBQSwgMHhCMkFBLCAweDA1RTAsIDB4QjJBQiwgMHhCMkFCLCAweDI5N0QsDQotICAgIDB4QjJBQywgMHhCMkFDLCAweDA1RTEsIDB4QjJBRCwgMHhCMkFGLCAweDI5N0UsIDB4QjJCMCwgMHhCMkIwLCAweDA1RTIsDQotICAgIDB4QjJCMSwgMHhCMkIzLCAweDI5ODEsIDB4QjJCNCwgMHhCMkI0LCAweDA1RTMsIDB4QjJCNSwgMHhCMkM3LCAweDI5ODQsDQotICAgIDB4QjJDOCwgMHhCMkM5LCAweDA1RTQsIDB4QjJDQSwgMHhCMkNCLCAweDI5OTcsIDB4QjJDQywgMHhCMkNDLCAweDA1RTYsDQotICAgIDB4QjJDRCwgMHhCMkNGLCAweDI5OTksIDB4QjJEMCwgMHhCMkQwLCAweDA1RTcsIDB4QjJEMSwgMHhCMkQxLCAweDI5OUMsDQotICAgIDB4QjJEMiwgMHhCMkQyLCAweDA1RTgsIDB4QjJEMywgMHhCMkQ3LCAweDI5OUQsIDB4QjJEOCwgMHhCMkQ5LCAweDA1RTksDQotICAgIDB4QjJEQSwgMHhCMkRBLCAweDI5QTIsIDB4QjJEQiwgMHhCMkRCLCAweDA1RUIsIDB4QjJEQywgMHhCMkRDLCAweDI5QTMsDQotICAgIDB4QjJERCwgMHhCMkRELCAweDA1RUMsIDB4QjJERSwgMHhCMkUxLCAweDI5QTQsIDB4QjJFMiwgMHhCMkUyLCAweDA1RUQsDQotICAgIDB4QjJFMywgMHhCMkUzLCAweDI5QTgsIDB4QjJFNCwgMHhCMkU2LCAweDA1RUUsIDB4QjJFNywgMHhCMkU3LCAweDI5QTksDQotICAgIDB4QjJFOCwgMHhCMkU4LCAweDA1RjEsIDB4QjJFOSwgMHhCMkVBLCAweDI5QUEsIDB4QjJFQiwgMHhCMkVGLCAweDA1RjIsDQotICAgIDB4QjJGMCwgMHhCMkYyLCAweDI5QUMsIDB4QjJGMywgMHhCMkY1LCAweDA1RjcsIDB4QjJGNiwgMHhCMkY2LCAweDI5QUYsDQotICAgIDB4QjJGNywgMHhCMkZCLCAweDA1RkEsIDB4QjJGQywgMHhCMkZFLCAweDI5QjAsIDB4QjJGRiwgMHhCMkZGLCAweDA1RkYsDQotICAgIDB4QjMwMCwgMHhCMzAxLCAweDA2MDAsIDB4QjMwMiwgMHhCMzAzLCAweDI5QjMsIDB4QjMwNCwgMHhCMzA0LCAweDA2MDIsDQotICAgIDB4QjMwNSwgMHhCMzA3LCAweDI5QjUsIDB4QjMwOCwgMHhCMzA4LCAweDA2MDMsIDB4QjMwOSwgMHhCMzBGLCAweDI5QjgsDQotICAgIDB4QjMxMCwgMHhCMzExLCAweDA2MDQsIDB4QjMxMiwgMHhCMzEyLCAweDI5QkYsIDB4QjMxMywgMHhCMzE1LCAweDA2MDYsDQotICAgIDB4QjMxNiwgMHhCMzFCLCAweDI5QzAsIDB4QjMxQywgMHhCMzFDLCAweDA2MDksIDB4QjMxRCwgMHhCMzUzLCAweDI5QzYsDQotICAgIDB4QjM1NCwgMHhCMzU2LCAweDA2MEEsIDB4QjM1NywgMHhCMzU3LCAweDI5RkQsIDB4QjM1OCwgMHhCMzU4LCAweDA2MEQsDQotICAgIDB4QjM1OSwgMHhCMzVBLCAweDI5RkUsIDB4QjM1QiwgMHhCMzVDLCAweDA2MEUsIDB4QjM1RCwgMHhCMzVELCAweDJBMDAsDQotICAgIDB4QjM1RSwgMHhCMzVGLCAweDA2MTAsIDB4QjM2MCwgMHhCMzYzLCAweDJBMDEsIDB4QjM2NCwgMHhCMzY1LCAweDA2MTIsDQotICAgIDB4QjM2NiwgMHhCMzY2LCAweDJBMDUsIDB4QjM2NywgMHhCMzY3LCAweDA2MTQsIDB4QjM2OCwgMHhCMzY4LCAweDJBMDYsDQotICAgIDB4QjM2OSwgMHhCMzY5LCAweDA2MTUsIDB4QjM2QSwgMHhCMzZBLCAweDJBMDcsIDB4QjM2QiwgMHhCMzZCLCAweDA2MTYsDQotICAgIDB4QjM2QywgMHhCMzZELCAweDJBMDgsIDB4QjM2RSwgMHhCMzZFLCAweDA2MTcsIDB4QjM2RiwgMHhCMzZGLCAweDJBMEEsDQotICAgIDB4QjM3MCwgMHhCMzcxLCAweDA2MTgsIDB4QjM3MiwgMHhCMzczLCAweDJBMEIsIDB4QjM3NCwgMHhCMzc0LCAweDA2MUEsDQotICAgIDB4QjM3NSwgMHhCMzc3LCAweDJBMEQsIDB4QjM3OCwgMHhCMzc4LCAweDA2MUIsIDB4QjM3OSwgMHhCMzdGLCAweDJBMTAsDQotICAgIDB4QjM4MCwgMHhCMzgxLCAweDA2MUMsIDB4QjM4MiwgMHhCMzgyLCAweDJBMTcsIDB4QjM4MywgMHhCMzg1LCAweDA2MUUsDQotICAgIDB4QjM4NiwgMHhCMzhCLCAweDJBMTgsIDB4QjM4QywgMHhCMzhDLCAweDA2MjEsIDB4QjM4RCwgMHhCMzhGLCAweDJBMUUsDQotICAgIDB4QjM5MCwgMHhCMzkwLCAweDA2MjIsIDB4QjM5MSwgMHhCMzkzLCAweDJBMjEsIDB4QjM5NCwgMHhCMzk0LCAweDA2MjMsDQotICAgIDB4QjM5NSwgMHhCMzlGLCAweDJBMjQsIDB4QjNBMCwgMHhCM0ExLCAweDA2MjQsIDB4QjNBMiwgMHhCM0E3LCAweDJBMkYsDQotICAgIDB4QjNBOCwgMHhCM0E4LCAweDA2MjYsIDB4QjNBOSwgMHhCM0FCLCAweDJBMzUsIDB4QjNBQywgMHhCM0FDLCAweDA2MjcsDQotICAgIDB4QjNBRCwgMHhCM0MzLCAweDJBMzgsIDB4QjNDNCwgMHhCM0M1LCAweDA2MjgsIDB4QjNDNiwgMHhCM0M3LCAweDJBNEYsDQotICAgIDB4QjNDOCwgMHhCM0M4LCAweDA2MkEsIDB4QjNDOSwgMHhCM0NBLCAweDJBNTEsIDB4QjNDQiwgMHhCM0NDLCAweDA2MkIsDQotICAgIDB4QjNDRCwgMHhCM0NELCAweDJBNTMsIDB4QjNDRSwgMHhCM0NFLCAweDA2MkQsIDB4QjNDRiwgMHhCM0NGLCAweDJBNTQsDQotICAgIDB4QjNEMCwgMHhCM0QwLCAweDA2MkUsIDB4QjNEMSwgMHhCM0QzLCAweDJBNTUsIDB4QjNENCwgMHhCM0Q1LCAweDA2MkYsDQotICAgIDB4QjNENiwgMHhCM0Q2LCAweDJBNTgsIDB4QjNENywgMHhCM0Q3LCAweDA2MzEsIDB4QjNEOCwgMHhCM0Q4LCAweDJBNTksDQotICAgIDB4QjNEOSwgMHhCM0Q5LCAweDA2MzIsIDB4QjNEQSwgMHhCM0RBLCAweDJBNUEsIDB4QjNEQiwgMHhCM0RCLCAweDA2MzMsDQotICAgIDB4QjNEQywgMHhCM0RDLCAweDJBNUIsIDB4QjNERCwgMHhCM0RELCAweDA2MzQsIDB4QjNERSwgMHhCM0RGLCAweDJBNUMsDQotICAgIDB4QjNFMCwgMHhCM0UwLCAweDA2MzUsIDB4QjNFMSwgMHhCM0UzLCAweDJBNUUsIDB4QjNFNCwgMHhCM0U0LCAweDA2MzYsDQotICAgIDB4QjNFNSwgMHhCM0U3LCAweDJBNjEsIDB4QjNFOCwgMHhCM0U4LCAweDA2MzcsIDB4QjNFOSwgMHhCM0ZCLCAweDJBNjQsDQotICAgIDB4QjNGQywgMHhCM0ZDLCAweDA2MzgsIDB4QjNGRCwgMHhCM0ZGLCAweDJBNzcsIDB4QjQwMCwgMHhCNDBGLCAweDJBN0EsDQotICAgIDB4QjQxMCwgMHhCNDEwLCAweDA2MzksIDB4QjQxMSwgMHhCNDE3LCAweDJBOEEsIDB4QjQxOCwgMHhCNDE4LCAweDA2M0EsDQotICAgIDB4QjQxOSwgMHhCNDFCLCAweDJBOTEsIDB4QjQxQywgMHhCNDFDLCAweDA2M0IsIDB4QjQxRCwgMHhCNDFGLCAweDJBOTQsDQotICAgIDB4QjQyMCwgMHhCNDIwLCAweDA2M0MsIDB4QjQyMSwgMHhCNDI3LCAweDJBOTcsIDB4QjQyOCwgMHhCNDI5LCAweDA2M0QsDQotICAgIDB4QjQyQSwgMHhCNDJBLCAweDJBOUUsIDB4QjQyQiwgMHhCNDJCLCAweDA2M0YsIDB4QjQyQywgMHhCNDMzLCAweDJBOUYsDQotICAgIDB4QjQzNCwgMHhCNDM0LCAweDA2NDAsIDB4QjQzNSwgMHhCNDRGLCAweDJBQTcsIDB4QjQ1MCwgMHhCNDUxLCAweDA2NDEsDQotICAgIDB4QjQ1MiwgMHhCNDUzLCAweDJBQzIsIDB4QjQ1NCwgMHhCNDU0LCAweDA2NDMsIDB4QjQ1NSwgMHhCNDU3LCAweDJBQzQsDQotICAgIDB4QjQ1OCwgMHhCNDU4LCAweDA2NDQsIDB4QjQ1OSwgMHhCNDVGLCAweDJBQzcsIDB4QjQ2MCwgMHhCNDYxLCAweDA2NDUsDQotICAgIDB4QjQ2MiwgMHhCNDYyLCAweDJBQ0UsIDB4QjQ2MywgMHhCNDYzLCAweDA2NDcsIDB4QjQ2NCwgMHhCNDY0LCAweDJBQ0YsDQotICAgIDB4QjQ2NSwgMHhCNDY1LCAweDA2NDgsIDB4QjQ2NiwgMHhCNDZCLCAweDJBRDAsIDB4QjQ2QywgMHhCNDZDLCAweDA2NDksDQotICAgIDB4QjQ2RCwgMHhCNDdGLCAweDJBRDYsIDB4QjQ4MCwgMHhCNDgwLCAweDA2NEEsIDB4QjQ4MSwgMHhCNDg3LCAweDJBRTksDQotICAgIDB4QjQ4OCwgMHhCNDg4LCAweDA2NEIsIDB4QjQ4OSwgMHhCNDlDLCAweDJBRjAsIDB4QjQ5RCwgMHhCNDlELCAweDA2NEMsDQotICAgIDB4QjQ5RSwgMHhCNEEzLCAweDJCMDQsIDB4QjRBNCwgMHhCNEE0LCAweDA2NEQsIDB4QjRBNSwgMHhCNEE3LCAweDJCMEEsDQotICAgIDB4QjRBOCwgMHhCNEE4LCAweDA2NEUsIDB4QjRBOSwgMHhCNEFCLCAweDJCMEQsIDB4QjRBQywgMHhCNEFDLCAweDA2NEYsDQotICAgIDB4QjRBRCwgMHhCNEI0LCAweDJCMTAsIDB4QjRCNSwgMHhCNEI1LCAweDA2NTAsIDB4QjRCNiwgMHhCNEI2LCAweDJCMTgsDQotICAgIDB4QjRCNywgMHhCNEI3LCAweDA2NTEsIDB4QjRCOCwgMHhCNEI4LCAweDJCMTksIDB4QjRCOSwgMHhCNEI5LCAweDA2NTIsDQotICAgIDB4QjRCQSwgMHhCNEJGLCAweDJCMUEsIDB4QjRDMCwgMHhCNEMwLCAweDA2NTMsIDB4QjRDMSwgMHhCNEMzLCAweDJCMjAsDQotICAgIDB4QjRDNCwgMHhCNEM0LCAweDA2NTQsIDB4QjRDNSwgMHhCNEM3LCAweDJCMjMsIDB4QjRDOCwgMHhCNEM4LCAweDA2NTUsDQotICAgIDB4QjRDOSwgMHhCNENGLCAweDJCMjYsIDB4QjREMCwgMHhCNEQwLCAweDA2NTYsIDB4QjREMSwgMHhCNEQ0LCAweDJCMkQsDQotICAgIDB4QjRENSwgMHhCNEQ1LCAweDA2NTcsIDB4QjRENiwgMHhCNERCLCAweDJCMzEsIDB4QjREQywgMHhCNERELCAweDA2NTgsDQotICAgIDB4QjRERSwgMHhCNERGLCAweDJCMzcsIDB4QjRFMCwgMHhCNEUwLCAweDA2NUEsIDB4QjRFMSwgMHhCNEUyLCAweDJCMzksDQotICAgIDB4QjRFMywgMHhCNEU0LCAweDA2NUIsIDB4QjRFNSwgMHhCNEU1LCAweDJCM0IsIDB4QjRFNiwgMHhCNEU2LCAweDA2NUQsDQotICAgIDB4QjRFNywgMHhCNEVCLCAweDJCM0MsIDB4QjRFQywgMHhCNEVELCAweDA2NUUsIDB4QjRFRSwgMHhCNEVFLCAweDJCNDEsDQotICAgIDB4QjRFRiwgMHhCNEVGLCAweDA2NjAsIDB4QjRGMCwgMHhCNEYwLCAweDJCNDIsIDB4QjRGMSwgMHhCNEYxLCAweDA2NjEsDQotICAgIDB4QjRGMiwgMHhCNEY3LCAweDJCNDMsIDB4QjRGOCwgMHhCNEY4LCAweDA2NjIsIDB4QjRGOSwgMHhCNEZGLCAweDJCNDksDQotICAgIDB4QjUwMCwgMHhCNTEzLCAweDJCNTAsIDB4QjUxNCwgMHhCNTE1LCAweDA2NjMsIDB4QjUxNiwgMHhCNTE3LCAweDJCNjQsDQotICAgIDB4QjUxOCwgMHhCNTE4LCAweDA2NjUsIDB4QjUxOSwgMHhCNTFBLCAweDJCNjYsIDB4QjUxQiwgMHhCNTFDLCAweDA2NjYsDQotICAgIDB4QjUxRCwgMHhCNTIzLCAweDJCNjgsIDB4QjUyNCwgMHhCNTI1LCAweDA2NjgsIDB4QjUyNiwgMHhCNTI2LCAweDJCNkYsDQotICAgIDB4QjUyNywgMHhCNTJBLCAweDA2NkEsIDB4QjUyQiwgMHhCNTJGLCAweDJCNzAsIDB4QjUzMCwgMHhCNTMxLCAweDA2NkUsDQotICAgIDB4QjUzMiwgMHhCNTMzLCAweDJCNzUsIDB4QjUzNCwgMHhCNTM0LCAweDA2NzAsIDB4QjUzNSwgMHhCNTM3LCAweDJCNzcsDQotICAgIDB4QjUzOCwgMHhCNTM4LCAweDA2NzEsIDB4QjUzOSwgMHhCNTNGLCAweDJCN0EsIDB4QjU0MCwgMHhCNTQxLCAweDA2NzIsDQotICAgIDB4QjU0MiwgMHhCNTQyLCAweDJCODEsIDB4QjU0MywgMHhCNTQ1LCAweDA2NzQsIDB4QjU0NiwgMHhCNTRBLCAweDJCODIsDQotICAgIDB4QjU0QiwgMHhCNTRELCAweDA2NzcsIDB4QjU0RSwgMHhCNTRGLCAweDJCODcsIDB4QjU1MCwgMHhCNTUwLCAweDA2N0EsDQotICAgIDB4QjU1MSwgMHhCNTUzLCAweDJCODksIDB4QjU1NCwgMHhCNTU0LCAweDA2N0IsIDB4QjU1NSwgMHhCNTVCLCAweDJCOEMsDQotICAgIDB4QjU1QywgMHhCNTVELCAweDA2N0MsIDB4QjU1RSwgMHhCNTVFLCAweDJCOTMsIDB4QjU1RiwgMHhCNTYxLCAweDA2N0UsDQotICAgIDB4QjU2MiwgMHhCNTlGLCAweDJCOTQsIDB4QjVBMCwgMHhCNUExLCAweDA2ODEsIDB4QjVBMiwgMHhCNUEzLCAweDJCRDIsDQotICAgIDB4QjVBNCwgMHhCNUE0LCAweDA2ODMsIDB4QjVBNSwgMHhCNUE3LCAweDJCRDQsIDB4QjVBOCwgMHhCNUE4LCAweDA2ODQsDQotICAgIDB4QjVBOSwgMHhCNUE5LCAweDJCRDcsIDB4QjVBQSwgMHhCNUFCLCAweDA2ODUsIDB4QjVBQywgMHhCNUFGLCAweDJCRDgsDQotICAgIDB4QjVCMCwgMHhCNUIxLCAweDA2ODcsIDB4QjVCMiwgMHhCNUIyLCAweDJCREMsIDB4QjVCMywgMHhCNUI1LCAweDA2ODksDQotICAgIDB4QjVCNiwgMHhCNUJBLCAweDJCREQsIDB4QjVCQiwgMHhCNUJELCAweDA2OEMsIDB4QjVCRSwgMHhCNUJGLCAweDJCRTIsDQotICAgIDB4QjVDMCwgMHhCNUMwLCAweDA2OEYsIDB4QjVDMSwgMHhCNUMzLCAweDJCRTQsIDB4QjVDNCwgMHhCNUM0LCAweDA2OTAsDQotICAgIDB4QjVDNSwgMHhCNUNCLCAweDJCRTcsIDB4QjVDQywgMHhCNUNELCAweDA2OTEsIDB4QjVDRSwgMHhCNUNFLCAweDJCRUUsDQotICAgIDB4QjVDRiwgMHhCNUQxLCAweDA2OTMsIDB4QjVEMiwgMHhCNUQ3LCAweDJCRUYsIDB4QjVEOCwgMHhCNUQ4LCAweDA2OTYsDQotICAgIDB4QjVEOSwgMHhCNUVCLCAweDJCRjUsIDB4QjVFQywgMHhCNUVDLCAweDA2OTcsIDB4QjVFRCwgMHhCNUZGLCAweDJDMDgsDQotICAgIDB4QjYwMCwgMHhCNjBGLCAweDJDMUIsIDB4QjYxMCwgMHhCNjExLCAweDA2OTgsIDB4QjYxMiwgMHhCNjEzLCAweDJDMkIsDQotICAgIDB4QjYxNCwgMHhCNjE0LCAweDA2OUEsIDB4QjYxNSwgMHhCNjE3LCAweDJDMkQsIDB4QjYxOCwgMHhCNjE4LCAweDA2OUIsDQotICAgIDB4QjYxOSwgMHhCNjI0LCAweDJDMzAsIDB4QjYyNSwgMHhCNjI1LCAweDA2OUMsIDB4QjYyNiwgMHhCNjJCLCAweDJDM0MsDQotICAgIDB4QjYyQywgMHhCNjJDLCAweDA2OUQsIDB4QjYyRCwgMHhCNjMzLCAweDJDNDIsIDB4QjYzNCwgMHhCNjM0LCAweDA2OUUsDQotICAgIDB4QjYzNSwgMHhCNjQ3LCAweDJDNDksIDB4QjY0OCwgMHhCNjQ4LCAweDA2OUYsIDB4QjY0OSwgMHhCNjYzLCAweDJDNUMsDQotICAgIDB4QjY2NCwgMHhCNjY0LCAweDA2QTAsIDB4QjY2NSwgMHhCNjY3LCAweDJDNzcsIDB4QjY2OCwgMHhCNjY4LCAweDA2QTEsDQotICAgIDB4QjY2OSwgMHhCNjlCLCAweDJDN0EsIDB4QjY5QywgMHhCNjlELCAweDA2QTIsIDB4QjY5RSwgMHhCNjlGLCAweDJDQUQsDQotICAgIDB4QjZBMCwgMHhCNkEwLCAweDA2QTQsIDB4QjZBMSwgMHhCNkEzLCAweDJDQUYsIDB4QjZBNCwgMHhCNkE0LCAweDA2QTUsDQotICAgIDB4QjZBNSwgMHhCNkFBLCAweDJDQjIsIDB4QjZBQiwgMHhCNkFDLCAweDA2QTYsIDB4QjZBRCwgMHhCNkIwLCAweDJDQjgsDQotICAgIDB4QjZCMSwgMHhCNkIxLCAweDA2QTgsIDB4QjZCMiwgMHhCNkQzLCAweDJDQkMsIDB4QjZENCwgMHhCNkQ0LCAweDA2QTksDQotICAgIDB4QjZENSwgMHhCNkVGLCAweDJDREUsIDB4QjZGMCwgMHhCNkYwLCAweDA2QUEsIDB4QjZGMSwgMHhCNkYzLCAweDJDRjksDQotICAgIDB4QjZGNCwgMHhCNkY0LCAweDA2QUIsIDB4QjZGNSwgMHhCNkY3LCAweDJDRkMsIDB4QjZGOCwgMHhCNkY4LCAweDA2QUMsDQotICAgIDB4QjZGOSwgMHhCNkZGLCAweDJDRkYsIDB4QjcwMCwgMHhCNzAxLCAweDA2QUQsIDB4QjcwMiwgMHhCNzA0LCAweDJEMDYsDQotICAgIDB4QjcwNSwgMHhCNzA1LCAweDA2QUYsIDB4QjcwNiwgMHhCNzI3LCAweDJEMDksIDB4QjcyOCwgMHhCNzI5LCAweDA2QjAsDQotICAgIDB4QjcyQSwgMHhCNzJCLCAweDJEMkIsIDB4QjcyQywgMHhCNzJDLCAweDA2QjIsIDB4QjcyRCwgMHhCNzJFLCAweDJEMkQsDQotICAgIDB4QjcyRiwgMHhCNzMwLCAweDA2QjMsIDB4QjczMSwgMHhCNzM3LCAweDJEMkYsIDB4QjczOCwgMHhCNzM5LCAweDA2QjUsDQotICAgIDB4QjczQSwgMHhCNzNBLCAweDJEMzYsIDB4QjczQiwgMHhCNzNCLCAweDA2QjcsIDB4QjczQywgMHhCNzQzLCAweDJEMzcsDQotICAgIDB4Qjc0NCwgMHhCNzQ0LCAweDA2QjgsIDB4Qjc0NSwgMHhCNzQ3LCAweDJEM0YsIDB4Qjc0OCwgMHhCNzQ4LCAweDA2QjksDQotICAgIDB4Qjc0OSwgMHhCNzRCLCAweDJENDIsIDB4Qjc0QywgMHhCNzRDLCAweDA2QkEsIDB4Qjc0RCwgMHhCNzUzLCAweDJENDUsDQotICAgIDB4Qjc1NCwgMHhCNzU1LCAweDA2QkIsIDB4Qjc1NiwgMHhCNzVGLCAweDJENEMsIDB4Qjc2MCwgMHhCNzYwLCAweDA2QkQsDQotICAgIDB4Qjc2MSwgMHhCNzYzLCAweDJENTYsIDB4Qjc2NCwgMHhCNzY0LCAweDA2QkUsIDB4Qjc2NSwgMHhCNzY3LCAweDJENTksDQotICAgIDB4Qjc2OCwgMHhCNzY4LCAweDA2QkYsIDB4Qjc2OSwgMHhCNzZGLCAweDJENUMsIDB4Qjc3MCwgMHhCNzcxLCAweDA2QzAsDQotICAgIDB4Qjc3MiwgMHhCNzcyLCAweDJENjMsIDB4Qjc3MywgMHhCNzczLCAweDA2QzIsIDB4Qjc3NCwgMHhCNzc0LCAweDJENjQsDQotICAgIDB4Qjc3NSwgMHhCNzc1LCAweDA2QzMsIDB4Qjc3NiwgMHhCNzdCLCAweDJENjUsIDB4Qjc3QywgMHhCNzdELCAweDA2QzQsDQotICAgIDB4Qjc3RSwgMHhCNzdGLCAweDJENkIsIDB4Qjc4MCwgMHhCNzgwLCAweDA2QzYsIDB4Qjc4MSwgMHhCNzgzLCAweDJENkQsDQotICAgIDB4Qjc4NCwgMHhCNzg0LCAweDA2QzcsIDB4Qjc4NSwgMHhCNzhCLCAweDJENzAsIDB4Qjc4QywgMHhCNzhELCAweDA2QzgsDQotICAgIDB4Qjc4RSwgMHhCNzhFLCAweDJENzcsIDB4Qjc4RiwgMHhCNzkyLCAweDA2Q0EsIDB4Qjc5MywgMHhCNzk1LCAweDJENzgsDQotICAgIDB4Qjc5NiwgMHhCNzk5LCAweDA2Q0UsIDB4Qjc5QSwgMHhCNzlCLCAweDJEN0IsIDB4Qjc5QywgMHhCNzlDLCAweDA2RDIsDQotICAgIDB4Qjc5RCwgMHhCNzlGLCAweDJEN0QsIDB4QjdBMCwgMHhCN0EwLCAweDA2RDMsIDB4QjdBMSwgMHhCN0E3LCAweDJEODAsDQotICAgIDB4QjdBOCwgMHhCN0E5LCAweDA2RDQsIDB4QjdBQSwgMHhCN0FBLCAweDJEODcsIDB4QjdBQiwgMHhCN0FELCAweDA2RDYsDQotICAgIDB4QjdBRSwgMHhCN0IzLCAweDJEODgsIDB4QjdCNCwgMHhCN0I1LCAweDA2RDksIDB4QjdCNiwgMHhCN0I3LCAweDJEOEUsDQotICAgIDB4QjdCOCwgMHhCN0I4LCAweDA2REIsIDB4QjdCOSwgMHhCN0M2LCAweDJEOTAsIDB4QjdDNywgMHhCN0M3LCAweDA2REMsDQotICAgIDB4QjdDOCwgMHhCN0M4LCAweDJEOUUsIDB4QjdDOSwgMHhCN0M5LCAweDA2REQsIDB4QjdDQSwgMHhCN0VCLCAweDJEOUYsDQotICAgIDB4QjdFQywgMHhCN0VELCAweDA2REUsIDB4QjdFRSwgMHhCN0VGLCAweDJEQzEsIDB4QjdGMCwgMHhCN0YwLCAweDA2RTAsDQotICAgIDB4QjdGMSwgMHhCN0YzLCAweDJEQzMsIDB4QjdGNCwgMHhCN0Y0LCAweDA2RTEsIDB4QjdGNSwgMHhCN0ZCLCAweDJEQzYsDQotICAgIDB4QjdGQywgMHhCN0ZELCAweDA2RTIsIDB4QjdGRSwgMHhCN0ZFLCAweDJEQ0QsIDB4QjdGRiwgMHhCN0ZGLCAweDA2RTQsDQotICAgIDB4QjgwMCwgMHhCODAxLCAweDA2RTUsIDB4QjgwMiwgMHhCODA2LCAweDJEQ0UsIDB4QjgwNywgMHhCODA5LCAweDA2RTcsDQotICAgIDB4QjgwQSwgMHhCODBCLCAweDJERDMsIDB4QjgwQywgMHhCODBDLCAweDA2RUEsIDB4QjgwRCwgMHhCODBGLCAweDJERDUsDQotICAgIDB4QjgxMCwgMHhCODEwLCAweDA2RUIsIDB4QjgxMSwgMHhCODE3LCAweDJERDgsIDB4QjgxOCwgMHhCODE5LCAweDA2RUMsDQotICAgIDB4QjgxQSwgMHhCODFBLCAweDJEREYsIDB4QjgxQiwgMHhCODFCLCAweDA2RUUsIDB4QjgxQywgMHhCODFDLCAweDJERTAsDQotICAgIDB4QjgxRCwgMHhCODFELCAweDA2RUYsIDB4QjgxRSwgMHhCODIzLCAweDJERTEsIDB4QjgyNCwgMHhCODI1LCAweDA2RjAsDQotICAgIDB4QjgyNiwgMHhCODI3LCAweDJERTcsIDB4QjgyOCwgMHhCODI4LCAweDA2RjIsIDB4QjgyOSwgMHhCODJCLCAweDJERTksDQotICAgIDB4QjgyQywgMHhCODJDLCAweDA2RjMsIDB4QjgyRCwgMHhCODMzLCAweDJERUMsIDB4QjgzNCwgMHhCODM1LCAweDA2RjQsDQotICAgIDB4QjgzNiwgMHhCODM2LCAweDJERjMsIDB4QjgzNywgMHhCODM5LCAweDA2RjYsIDB4QjgzQSwgMHhCODNGLCAweDJERjQsDQotICAgIDB4Qjg0MCwgMHhCODQwLCAweDA2RjksIDB4Qjg0MSwgMHhCODQzLCAweDJERkEsIDB4Qjg0NCwgMHhCODQ0LCAweDA2RkEsDQotICAgIDB4Qjg0NSwgMHhCODUwLCAweDJERkQsIDB4Qjg1MSwgMHhCODUxLCAweDA2RkIsIDB4Qjg1MiwgMHhCODUyLCAweDJFMDksDQotICAgIDB4Qjg1MywgMHhCODUzLCAweDA2RkMsIDB4Qjg1NCwgMHhCODVCLCAweDJFMEEsIDB4Qjg1QywgMHhCODVELCAweDA2RkQsDQotICAgIDB4Qjg1RSwgMHhCODVGLCAweDJFMTIsIDB4Qjg2MCwgMHhCODYwLCAweDA2RkYsIDB4Qjg2MSwgMHhCODYzLCAweDJFMTQsDQotICAgIDB4Qjg2NCwgMHhCODY0LCAweDA3MDAsIDB4Qjg2NSwgMHhCODZCLCAweDJFMTcsIDB4Qjg2QywgMHhCODZELCAweDA3MDEsDQotICAgIDB4Qjg2RSwgMHhCODZFLCAweDJFMUUsIDB4Qjg2RiwgMHhCODZGLCAweDA3MDMsIDB4Qjg3MCwgMHhCODcwLCAweDJFMUYsDQotICAgIDB4Qjg3MSwgMHhCODcxLCAweDA3MDQsIDB4Qjg3MiwgMHhCODc3LCAweDJFMjAsIDB4Qjg3OCwgMHhCODc4LCAweDA3MDUsDQotICAgIDB4Qjg3OSwgMHhCODdCLCAweDJFMjYsIDB4Qjg3QywgMHhCODdDLCAweDA3MDYsIDB4Qjg3RCwgMHhCODhDLCAweDJFMjksDQotICAgIDB4Qjg4RCwgMHhCODhELCAweDA3MDcsIDB4Qjg4RSwgMHhCOEE3LCAweDJFMzksIDB4QjhBOCwgMHhCOEE4LCAweDA3MDgsDQotICAgIDB4QjhBOSwgMHhCOEFGLCAweDJFNTMsIDB4QjhCMCwgMHhCOEIwLCAweDA3MDksIDB4QjhCMSwgMHhCOEIzLCAweDJFNUEsDQotICAgIDB4QjhCNCwgMHhCOEI0LCAweDA3MEEsIDB4QjhCNSwgMHhCOEI3LCAweDJFNUQsIDB4QjhCOCwgMHhCOEI4LCAweDA3MEIsDQotICAgIDB4QjhCOSwgMHhCOEJGLCAweDJFNjAsIDB4QjhDMCwgMHhCOEMxLCAweDA3MEMsIDB4QjhDMiwgMHhCOEMyLCAweDJFNjcsDQotICAgIDB4QjhDMywgMHhCOEMzLCAweDA3MEUsIDB4QjhDNCwgMHhCOEM0LCAweDJFNjgsIDB4QjhDNSwgMHhCOEM1LCAweDA3MEYsDQotICAgIDB4QjhDNiwgMHhCOENCLCAweDJFNjksIDB4QjhDQywgMHhCOENDLCAweDA3MTAsIDB4QjhDRCwgMHhCOENGLCAweDJFNkYsDQotICAgIDB4QjhEMCwgMHhCOEQwLCAweDA3MTEsIDB4QjhEMSwgMHhCOEQzLCAweDJFNzIsIDB4QjhENCwgMHhCOEQ0LCAweDA3MTIsDQotICAgIDB4QjhENSwgMHhCOERDLCAweDJFNzUsIDB4QjhERCwgMHhCOERELCAweDA3MTMsIDB4QjhERSwgMHhCOERFLCAweDJFN0QsDQotICAgIDB4QjhERiwgMHhCOERGLCAweDA3MTQsIDB4QjhFMCwgMHhCOEUwLCAweDJFN0UsIDB4QjhFMSwgMHhCOEUxLCAweDA3MTUsDQotICAgIDB4QjhFMiwgMHhCOEU3LCAweDJFN0YsIDB4QjhFOCwgMHhCOEU5LCAweDA3MTYsIDB4QjhFQSwgMHhCOEVCLCAweDJFODUsDQotICAgIDB4QjhFQywgMHhCOEVDLCAweDA3MTgsIDB4QjhFRCwgMHhCOEVGLCAweDJFODcsIDB4QjhGMCwgMHhCOEYwLCAweDA3MTksDQotICAgIDB4QjhGMSwgMHhCOEY3LCAweDJFOEEsIDB4QjhGOCwgMHhCOEY5LCAweDA3MUEsIDB4QjhGQSwgMHhCOEZBLCAweDJFOTEsDQotICAgIDB4QjhGQiwgMHhCOEZCLCAweDA3MUMsIDB4QjhGQywgMHhCOEZDLCAweDJFOTIsIDB4QjhGRCwgMHhCOEZELCAweDA3MUQsDQotICAgIDB4QjhGRSwgMHhCOEZGLCAweDJFOTMsIDB4QjkwMCwgMHhCOTAzLCAweDJFOTUsIDB4QjkwNCwgMHhCOTA0LCAweDA3MUUsDQotICAgIDB4QjkwNSwgMHhCOTE3LCAweDJFOTksIDB4QjkxOCwgMHhCOTE4LCAweDA3MUYsIDB4QjkxOSwgMHhCOTFGLCAweDJFQUMsDQotICAgIDB4QjkyMCwgMHhCOTIwLCAweDA3MjAsIDB4QjkyMSwgMHhCOTNCLCAweDJFQjMsIDB4QjkzQywgMHhCOTNELCAweDA3MjEsDQotICAgIDB4QjkzRSwgMHhCOTNGLCAweDJFQ0UsIDB4Qjk0MCwgMHhCOTQwLCAweDA3MjMsIDB4Qjk0MSwgMHhCOTQzLCAweDJFRDAsDQotICAgIDB4Qjk0NCwgMHhCOTQ0LCAweDA3MjQsIDB4Qjk0NSwgMHhCOTRCLCAweDJFRDMsIDB4Qjk0QywgMHhCOTRDLCAweDA3MjUsDQotICAgIDB4Qjk0RCwgMHhCOTRFLCAweDJFREEsIDB4Qjk0RiwgMHhCOTRGLCAweDA3MjYsIDB4Qjk1MCwgMHhCOTUwLCAweDJFREMsDQotICAgIDB4Qjk1MSwgMHhCOTUxLCAweDA3MjcsIDB4Qjk1MiwgMHhCOTU3LCAweDJFREQsIDB4Qjk1OCwgMHhCOTU5LCAweDA3MjgsDQotICAgIDB4Qjk1QSwgMHhCOTVCLCAweDJFRTMsIDB4Qjk1QywgMHhCOTVDLCAweDA3MkEsIDB4Qjk1RCwgMHhCOTVGLCAweDJFRTUsDQotICAgIDB4Qjk2MCwgMHhCOTYwLCAweDA3MkIsIDB4Qjk2MSwgMHhCOTY3LCAweDJFRTgsIDB4Qjk2OCwgMHhCOTY5LCAweDA3MkMsDQotICAgIDB4Qjk2QSwgMHhCOTZBLCAweDJFRUYsIDB4Qjk2QiwgMHhCOTZCLCAweDA3MkUsIDB4Qjk2QywgMHhCOTZDLCAweDJFRjAsDQotICAgIDB4Qjk2RCwgMHhCOTZELCAweDA3MkYsIDB4Qjk2RSwgMHhCOTczLCAweDJFRjEsIDB4Qjk3NCwgMHhCOTc1LCAweDA3MzAsDQotICAgIDB4Qjk3NiwgMHhCOTc3LCAweDJFRjcsIDB4Qjk3OCwgMHhCOTc4LCAweDA3MzIsIDB4Qjk3OSwgMHhCOTdCLCAweDJFRjksDQotICAgIDB4Qjk3QywgMHhCOTdDLCAweDA3MzMsIDB4Qjk3RCwgMHhCOTgzLCAweDJFRkMsIDB4Qjk4NCwgMHhCOTg1LCAweDA3MzQsDQotICAgIDB4Qjk4NiwgMHhCOTg2LCAweDJGMDMsIDB4Qjk4NywgMHhCOTg3LCAweDA3MzYsIDB4Qjk4OCwgMHhCOTg4LCAweDJGMDQsDQotICAgIDB4Qjk4OSwgMHhCOThBLCAweDA3MzcsIDB4Qjk4QiwgMHhCOThDLCAweDJGMDUsIDB4Qjk4RCwgMHhCOThFLCAweDA3MzksDQotICAgIDB4Qjk4RiwgMHhCOUFCLCAweDJGMDcsIDB4QjlBQywgMHhCOUFELCAweDA3M0IsIDB4QjlBRSwgMHhCOUFGLCAweDJGMjQsDQotICAgIDB4QjlCMCwgMHhCOUIwLCAweDA3M0QsIDB4QjlCMSwgMHhCOUIzLCAweDJGMjYsIDB4QjlCNCwgMHhCOUI0LCAweDA3M0UsDQotICAgIDB4QjlCNSwgMHhCOUJCLCAweDJGMjksIDB4QjlCQywgMHhCOUJELCAweDA3M0YsIDB4QjlCRSwgMHhCOUJFLCAweDJGMzAsDQotICAgIDB4QjlCRiwgMHhCOUJGLCAweDA3NDEsIDB4QjlDMCwgMHhCOUMwLCAweDJGMzEsIDB4QjlDMSwgMHhCOUMxLCAweDA3NDIsDQotICAgIDB4QjlDMiwgMHhCOUM3LCAweDJGMzIsIDB4QjlDOCwgMHhCOUM5LCAweDA3NDMsIDB4QjlDQSwgMHhCOUNCLCAweDJGMzgsDQotICAgIDB4QjlDQywgMHhCOUNDLCAweDA3NDUsIDB4QjlDRCwgMHhCOUNELCAweDJGM0EsIDB4QjlDRSwgMHhCOUQyLCAweDA3NDYsDQotICAgIDB4QjlEMywgMHhCOUQ3LCAweDJGM0IsIDB4QjlEOCwgMHhCOUQ5LCAweDA3NEIsIDB4QjlEQSwgMHhCOURBLCAweDJGNDAsDQotICAgIDB4QjlEQiwgMHhCOURCLCAweDA3NEQsIDB4QjlEQywgMHhCOURDLCAweDJGNDEsIDB4QjlERCwgMHhCOURFLCAweDA3NEUsDQotICAgIDB4QjlERiwgMHhCOUUwLCAweDJGNDIsIDB4QjlFMSwgMHhCOUUxLCAweDA3NTAsIDB4QjlFMiwgMHhCOUUyLCAweDJGNDQsDQotICAgIDB4QjlFMywgMHhCOUU1LCAweDA3NTEsIDB4QjlFNiwgMHhCOUU3LCAweDJGNDUsIDB4QjlFOCwgMHhCOUU4LCAweDA3NTQsDQotICAgIDB4QjlFOSwgMHhCOUVCLCAweDJGNDcsIDB4QjlFQywgMHhCOUVDLCAweDA3NTUsIDB4QjlFRCwgMHhCOUYzLCAweDJGNEEsDQotICAgIDB4QjlGNCwgMHhCOUY1LCAweDA3NTYsIDB4QjlGNiwgMHhCOUY2LCAweDJGNTEsIDB4QjlGNywgMHhCOUZBLCAweDA3NTgsDQotICAgIDB4QjlGQiwgMHhCOUZGLCAweDJGNTIsIDB4QkEwMCwgMHhCQTAxLCAweDA3NUMsIDB4QkEwMiwgMHhCQTA3LCAweDJGNTcsDQotICAgIDB4QkEwOCwgMHhCQTA4LCAweDA3NUUsIDB4QkEwOSwgMHhCQTE0LCAweDJGNUQsIDB4QkExNSwgMHhCQTE1LCAweDA3NUYsDQotICAgIDB4QkExNiwgMHhCQTM3LCAweDJGNjksIDB4QkEzOCwgMHhCQTM5LCAweDA3NjAsIDB4QkEzQSwgMHhCQTNCLCAweDJGOEIsDQotICAgIDB4QkEzQywgMHhCQTNDLCAweDA3NjIsIDB4QkEzRCwgMHhCQTNGLCAweDJGOEQsIDB4QkE0MCwgMHhCQTQwLCAweDA3NjMsDQotICAgIDB4QkE0MSwgMHhCQTQxLCAweDJGOTAsIDB4QkE0MiwgMHhCQTQyLCAweDA3NjQsIDB4QkE0MywgMHhCQTQ3LCAweDJGOTEsDQotICAgIDB4QkE0OCwgMHhCQTQ5LCAweDA3NjUsIDB4QkE0QSwgMHhCQTRBLCAweDJGOTYsIDB4QkE0QiwgMHhCQTRCLCAweDA3NjcsDQotICAgIDB4QkE0QywgMHhCQTRDLCAweDJGOTcsIDB4QkE0RCwgMHhCQTRFLCAweDA3NjgsIDB4QkE0RiwgMHhCQTUyLCAweDJGOTgsDQotICAgIDB4QkE1MywgMHhCQTU1LCAweDA3NkEsIDB4QkE1NiwgMHhCQTU3LCAweDJGOUMsIDB4QkE1OCwgMHhCQTU4LCAweDA3NkQsDQotICAgIDB4QkE1OSwgMHhCQTVCLCAweDJGOUUsIDB4QkE1QywgMHhCQTVDLCAweDA3NkUsIDB4QkE1RCwgMHhCQTYzLCAweDJGQTEsDQotICAgIDB4QkE2NCwgMHhCQTY1LCAweDA3NkYsIDB4QkE2NiwgMHhCQTY2LCAweDJGQTgsIDB4QkE2NywgMHhCQTY5LCAweDA3NzEsDQotICAgIDB4QkE2QSwgMHhCQTZGLCAweDJGQTksIDB4QkE3MCwgMHhCQTcxLCAweDA3NzQsIDB4QkE3MiwgMHhCQTczLCAweDJGQUYsDQotICAgIDB4QkE3NCwgMHhCQTc0LCAweDA3NzYsIDB4QkE3NSwgMHhCQTc3LCAweDJGQjEsIDB4QkE3OCwgMHhCQTc4LCAweDA3NzcsDQotICAgIDB4QkE3OSwgMHhCQTgyLCAweDJGQjQsIDB4QkE4MywgMHhCQTg1LCAweDA3NzgsIDB4QkE4NiwgMHhCQTg2LCAweDJGQkUsDQotICAgIDB4QkE4NywgMHhCQTg3LCAweDA3N0IsIDB4QkE4OCwgMHhCQThCLCAweDJGQkYsIDB4QkE4QywgMHhCQThDLCAweDA3N0MsDQotICAgIDB4QkE4RCwgMHhCQUE3LCAweDJGQzMsIDB4QkFBOCwgMHhCQUE5LCAweDA3N0QsIDB4QkFBQSwgMHhCQUFBLCAweDJGREUsDQotICAgIDB4QkFBQiwgMHhCQUFDLCAweDA3N0YsIDB4QkFBRCwgMHhCQUFGLCAweDJGREYsIDB4QkFCMCwgMHhCQUIwLCAweDA3ODEsDQotICAgIDB4QkFCMSwgMHhCQUIxLCAweDJGRTIsIDB4QkFCMiwgMHhCQUIyLCAweDA3ODIsIDB4QkFCMywgMHhCQUI3LCAweDJGRTMsDQotICAgIDB4QkFCOCwgMHhCQUI5LCAweDA3ODMsIDB4QkFCQSwgMHhCQUJBLCAweDJGRTgsIDB4QkFCQiwgMHhCQUJCLCAweDA3ODUsDQotICAgIDB4QkFCQywgMHhCQUJDLCAweDJGRTksIDB4QkFCRCwgMHhCQUJELCAweDA3ODYsIDB4QkFCRSwgMHhCQUMzLCAweDJGRUEsDQotICAgIDB4QkFDNCwgMHhCQUM0LCAweDA3ODcsIDB4QkFDNSwgMHhCQUM3LCAweDJGRjAsIDB4QkFDOCwgMHhCQUM4LCAweDA3ODgsDQotICAgIDB4QkFDOSwgMHhCQUQ3LCAweDJGRjMsIDB4QkFEOCwgMHhCQUQ5LCAweDA3ODksIDB4QkFEQSwgMHhCQUZCLCAweDMwMDIsDQotICAgIDB4QkFGQywgMHhCQUZDLCAweDA3OEIsIDB4QkFGRCwgMHhCQUZGLCAweDMwMjQsIDB4QkIwMCwgMHhCQjAwLCAweDA3OEMsDQotICAgIDB4QkIwMSwgMHhCQjAzLCAweDMwMjcsIDB4QkIwNCwgMHhCQjA0LCAweDA3OEQsIDB4QkIwNSwgMHhCQjBDLCAweDMwMkEsDQotICAgIDB4QkIwRCwgMHhCQjBELCAweDA3OEUsIDB4QkIwRSwgMHhCQjBFLCAweDMwMzIsIDB4QkIwRiwgMHhCQjBGLCAweDA3OEYsDQotICAgIDB4QkIxMCwgMHhCQjEwLCAweDMwMzMsIDB4QkIxMSwgMHhCQjExLCAweDA3OTAsIDB4QkIxMiwgMHhCQjE3LCAweDMwMzQsDQotICAgIDB4QkIxOCwgMHhCQjE4LCAweDA3OTEsIDB4QkIxOSwgMHhCQjFCLCAweDMwM0EsIDB4QkIxQywgMHhCQjFDLCAweDA3OTIsDQotICAgIDB4QkIxRCwgMHhCQjFGLCAweDMwM0QsIDB4QkIyMCwgMHhCQjIwLCAweDA3OTMsIDB4QkIyMSwgMHhCQjI4LCAweDMwNDAsDQotICAgIDB4QkIyOSwgMHhCQjI5LCAweDA3OTQsIDB4QkIyQSwgMHhCQjJBLCAweDMwNDgsIDB4QkIyQiwgMHhCQjJCLCAweDA3OTUsDQotICAgIDB4QkIyQywgMHhCQjMzLCAweDMwNDksIDB4QkIzNCwgMHhCQjM2LCAweDA3OTYsIDB4QkIzNywgMHhCQjM3LCAweDMwNTEsDQotICAgIDB4QkIzOCwgMHhCQjM4LCAweDA3OTksIDB4QkIzOSwgMHhCQjNBLCAweDMwNTIsIDB4QkIzQiwgMHhCQjNFLCAweDA3OUEsDQotICAgIDB4QkIzRiwgMHhCQjQzLCAweDMwNTQsIDB4QkI0NCwgMHhCQjQ1LCAweDA3OUUsIDB4QkI0NiwgMHhCQjQ2LCAweDMwNTksDQotICAgIDB4QkI0NywgMHhCQjQ3LCAweDA3QTAsIDB4QkI0OCwgMHhCQjQ4LCAweDMwNUEsIDB4QkI0OSwgMHhCQjQ5LCAweDA3QTEsDQotICAgIDB4QkI0QSwgMHhCQjRDLCAweDMwNUIsIDB4QkI0RCwgMHhCQjRELCAweDA3QTIsIDB4QkI0RSwgMHhCQjRFLCAweDMwNUUsDQotICAgIDB4QkI0RiwgMHhCQjUwLCAweDA3QTMsIDB4QkI1MSwgMHhCQjUzLCAweDMwNUYsIDB4QkI1NCwgMHhCQjU0LCAweDA3QTUsDQotICAgIDB4QkI1NSwgMHhCQjU3LCAweDMwNjIsIDB4QkI1OCwgMHhCQjU4LCAweDA3QTYsIDB4QkI1OSwgMHhCQjYwLCAweDMwNjUsDQotICAgIDB4QkI2MSwgMHhCQjYxLCAweDA3QTcsIDB4QkI2MiwgMHhCQjYyLCAweDMwNkQsIDB4QkI2MywgMHhCQjYzLCAweDA3QTgsDQotICAgIDB4QkI2NCwgMHhCQjZCLCAweDMwNkUsIDB4QkI2QywgMHhCQjZDLCAweDA3QTksIDB4QkI2RCwgMHhCQjg3LCAweDMwNzYsDQotICAgIDB4QkI4OCwgMHhCQjg4LCAweDA3QUEsIDB4QkI4OSwgMHhCQjhCLCAweDMwOTEsIDB4QkI4QywgMHhCQjhDLCAweDA3QUIsDQotICAgIDB4QkI4RCwgMHhCQjhGLCAweDMwOTQsIDB4QkI5MCwgMHhCQjkwLCAweDA3QUMsIDB4QkI5MSwgMHhCQkEzLCAweDMwOTcsDQotICAgIDB4QkJBNCwgMHhCQkE0LCAweDA3QUQsIDB4QkJBNSwgMHhCQkE3LCAweDMwQUEsIDB4QkJBOCwgMHhCQkE4LCAweDA3QUUsDQotICAgIDB4QkJBOSwgMHhCQkFCLCAweDMwQUQsIDB4QkJBQywgMHhCQkFDLCAweDA3QUYsIDB4QkJBRCwgMHhCQkIzLCAweDMwQjAsDQotICAgIDB4QkJCNCwgMHhCQkI0LCAweDA3QjAsIDB4QkJCNSwgMHhCQkI2LCAweDMwQjcsIDB4QkJCNywgMHhCQkI3LCAweDA3QjEsDQotICAgIDB4QkJCOCwgMHhCQkJGLCAweDMwQjksIDB4QkJDMCwgMHhCQkMwLCAweDA3QjIsIDB4QkJDMSwgMHhCQkMzLCAweDMwQzEsDQotICAgIDB4QkJDNCwgMHhCQkM0LCAweDA3QjMsIDB4QkJDNSwgMHhCQkM3LCAweDMwQzQsIDB4QkJDOCwgMHhCQkM4LCAweDA3QjQsDQotICAgIDB4QkJDOSwgMHhCQkNGLCAweDMwQzcsIDB4QkJEMCwgMHhCQkQwLCAweDA3QjUsIDB4QkJEMSwgMHhCQkQyLCAweDMwQ0UsDQotICAgIDB4QkJEMywgMHhCQkQzLCAweDA3QjYsIDB4QkJENCwgMHhCQkY3LCAweDMwRDAsIDB4QkJGOCwgMHhCQkY5LCAweDA3QjcsDQotICAgIDB4QkJGQSwgMHhCQkZCLCAweDMwRjQsIDB4QkJGQywgMHhCQkZDLCAweDA3QjksIDB4QkJGRCwgMHhCQkZFLCAweDMwRjYsDQotICAgIDB4QkJGRiwgMHhCQkZGLCAweDA3QkEsIDB4QkMwMCwgMHhCQzAwLCAweDA3QkIsIDB4QkMwMSwgMHhCQzAxLCAweDMwRjgsDQotICAgIDB4QkMwMiwgMHhCQzAyLCAweDA3QkMsIDB4QkMwMywgMHhCQzA3LCAweDMwRjksIDB4QkMwOCwgMHhCQzA5LCAweDA3QkQsDQotICAgIDB4QkMwQSwgMHhCQzBBLCAweDMwRkUsIDB4QkMwQiwgMHhCQzBELCAweDA3QkYsIDB4QkMwRSwgMHhCQzBFLCAweDMwRkYsDQotICAgIDB4QkMwRiwgMHhCQzBGLCAweDA3QzIsIDB4QkMxMCwgMHhCQzEwLCAweDMxMDAsIDB4QkMxMSwgMHhCQzExLCAweDA3QzMsDQotICAgIDB4QkMxMiwgMHhCQzEzLCAweDMxMDEsIDB4QkMxNCwgMHhCQzE4LCAweDA3QzQsIDB4QkMxOSwgMHhCQzFBLCAweDMxMDMsDQotICAgIDB4QkMxQiwgMHhCQzFGLCAweDA3QzksIDB4QkMyMCwgMHhCQzIzLCAweDMxMDUsIDB4QkMyNCwgMHhCQzI1LCAweDA3Q0UsDQotICAgIDB4QkMyNiwgMHhCQzI2LCAweDMxMDksIDB4QkMyNywgMHhCQzI3LCAweDA3RDAsIDB4QkMyOCwgMHhCQzI4LCAweDMxMEEsDQotICAgIDB4QkMyOSwgMHhCQzI5LCAweDA3RDEsIDB4QkMyQSwgMHhCQzJDLCAweDMxMEIsIDB4QkMyRCwgMHhCQzJELCAweDA3RDIsDQotICAgIDB4QkMyRSwgMHhCQzJGLCAweDMxMEUsIDB4QkMzMCwgMHhCQzMxLCAweDA3RDMsIDB4QkMzMiwgMHhCQzMzLCAweDMxMTAsDQotICAgIDB4QkMzNCwgMHhCQzM0LCAweDA3RDUsIDB4QkMzNSwgMHhCQzM3LCAweDMxMTIsIDB4QkMzOCwgMHhCQzM4LCAweDA3RDYsDQotICAgIDB4QkMzOSwgMHhCQzNGLCAweDMxMTUsIDB4QkM0MCwgMHhCQzQxLCAweDA3RDcsIDB4QkM0MiwgMHhCQzQyLCAweDMxMUMsDQotICAgIDB4QkM0MywgMHhCQzQ1LCAweDA3RDksIDB4QkM0NiwgMHhCQzQ4LCAweDMxMUQsIDB4QkM0OSwgMHhCQzQ5LCAweDA3REMsDQotICAgIDB4QkM0QSwgMHhCQzRCLCAweDMxMjAsIDB4QkM0QywgMHhCQzRELCAweDA3REQsIDB4QkM0RSwgMHhCQzRGLCAweDMxMjIsDQotICAgIDB4QkM1MCwgMHhCQzUwLCAweDA3REYsIDB4QkM1MSwgMHhCQzVDLCAweDMxMjQsIDB4QkM1RCwgMHhCQzVELCAweDA3RTAsDQotICAgIDB4QkM1RSwgMHhCQzgzLCAweDMxMzAsIDB4QkM4NCwgMHhCQzg1LCAweDA3RTEsIDB4QkM4NiwgMHhCQzg3LCAweDMxNTYsDQotICAgIDB4QkM4OCwgMHhCQzg4LCAweDA3RTMsIDB4QkM4OSwgMHhCQzhBLCAweDMxNTgsIDB4QkM4QiwgMHhCQzhDLCAweDA3RTQsDQotICAgIDB4QkM4RCwgMHhCQzhELCAweDMxNUEsIDB4QkM4RSwgMHhCQzhFLCAweDA3RTYsIDB4QkM4RiwgMHhCQzkzLCAweDMxNUIsDQotICAgIDB4QkM5NCwgMHhCQzk1LCAweDA3RTcsIDB4QkM5NiwgMHhCQzk2LCAweDMxNjAsIDB4QkM5NywgMHhCQzk3LCAweDA3RTksDQotICAgIDB4QkM5OCwgMHhCQzk4LCAweDMxNjEsIDB4QkM5OSwgMHhCQzlBLCAweDA3RUEsIDB4QkM5QiwgMHhCQzlGLCAweDMxNjIsDQotICAgIDB4QkNBMCwgMHhCQ0ExLCAweDA3RUMsIDB4QkNBMiwgMHhCQ0EzLCAweDMxNjcsIDB4QkNBNCwgMHhCQ0E0LCAweDA3RUUsDQotICAgIDB4QkNBNSwgMHhCQ0E2LCAweDMxNjksIDB4QkNBNywgMHhCQ0E4LCAweDA3RUYsIDB4QkNBOSwgMHhCQ0FGLCAweDMxNkIsDQotICAgIDB4QkNCMCwgMHhCQ0IxLCAweDA3RjEsIDB4QkNCMiwgMHhCQ0IyLCAweDMxNzIsIDB4QkNCMywgMHhCQ0I1LCAweDA3RjMsDQotICAgIDB4QkNCNiwgMHhCQ0JCLCAweDMxNzMsIDB4QkNCQywgMHhCQ0JELCAweDA3RjYsIDB4QkNCRSwgMHhCQ0JGLCAweDMxNzksDQotICAgIDB4QkNDMCwgMHhCQ0MwLCAweDA3RjgsIDB4QkNDMSwgMHhCQ0MzLCAweDMxN0IsIDB4QkNDNCwgMHhCQ0M0LCAweDA3RjksDQotICAgIDB4QkNDNSwgMHhCQ0NDLCAweDMxN0UsIDB4QkNDRCwgMHhCQ0NELCAweDA3RkEsIDB4QkNDRSwgMHhCQ0NFLCAweDMxODYsDQotICAgIDB4QkNDRiwgMHhCQ0QxLCAweDA3RkIsIDB4QkNEMiwgMHhCQ0Q0LCAweDMxODcsIDB4QkNENSwgMHhCQ0Q1LCAweDA3RkUsDQotICAgIDB4QkNENiwgMHhCQ0Q3LCAweDMxOEEsIDB4QkNEOCwgMHhCQ0Q4LCAweDA3RkYsIDB4QkNEOSwgMHhCQ0RCLCAweDMxOEMsDQotICAgIDB4QkNEQywgMHhCQ0RDLCAweDA4MDAsIDB4QkNERCwgMHhCQ0YzLCAweDMxOEYsIDB4QkNGNCwgMHhCQ0Y2LCAweDA4MDEsDQotICAgIDB4QkNGNywgMHhCQ0Y3LCAweDMxQTYsIDB4QkNGOCwgMHhCQ0Y4LCAweDA4MDQsIDB4QkNGOSwgMHhCQ0ZCLCAweDMxQTcsDQotICAgIDB4QkNGQywgMHhCQ0ZDLCAweDA4MDUsIDB4QkNGRCwgMHhCQ0ZGLCAweDMxQUEsIDB4QkQwMCwgMHhCRDAzLCAweDMxQUQsDQotICAgIDB4QkQwNCwgMHhCRDA1LCAweDA4MDYsIDB4QkQwNiwgMHhCRDA2LCAweDMxQjEsIDB4QkQwNywgMHhCRDA3LCAweDA4MDgsDQotICAgIDB4QkQwOCwgMHhCRDA4LCAweDMxQjIsIDB4QkQwOSwgMHhCRDA5LCAweDA4MDksIDB4QkQwQSwgMHhCRDBGLCAweDMxQjMsDQotICAgIDB4QkQxMCwgMHhCRDEwLCAweDA4MEEsIDB4QkQxMSwgMHhCRDEzLCAweDMxQjksIDB4QkQxNCwgMHhCRDE0LCAweDA4MEIsDQotICAgIDB4QkQxNSwgMHhCRDIzLCAweDMxQkMsIDB4QkQyNCwgMHhCRDI0LCAweDA4MEMsIDB4QkQyNSwgMHhCRDJCLCAweDMxQ0IsDQotICAgIDB4QkQyQywgMHhCRDJDLCAweDA4MEQsIDB4QkQyRCwgMHhCRDNGLCAweDMxRDIsIDB4QkQ0MCwgMHhCRDQwLCAweDA4MEUsDQotICAgIDB4QkQ0MSwgMHhCRDQ3LCAweDMxRTUsIDB4QkQ0OCwgMHhCRDQ5LCAweDA4MEYsIDB4QkQ0QSwgMHhCRDRCLCAweDMxRUMsDQotICAgIDB4QkQ0QywgMHhCRDRDLCAweDA4MTEsIDB4QkQ0RCwgMHhCRDRGLCAweDMxRUUsIDB4QkQ1MCwgMHhCRDUwLCAweDA4MTIsDQotICAgIDB4QkQ1MSwgMHhCRDU3LCAweDMxRjEsIDB4QkQ1OCwgMHhCRDU5LCAweDA4MTMsIDB4QkQ1QSwgMHhCRDYzLCAweDMxRjgsDQotICAgIDB4QkQ2NCwgMHhCRDY0LCAweDA4MTUsIDB4QkQ2NSwgMHhCRDY3LCAweDMyMDIsIDB4QkQ2OCwgMHhCRDY4LCAweDA4MTYsDQotICAgIDB4QkQ2OSwgMHhCRDdGLCAweDMyMDUsIDB4QkQ4MCwgMHhCRDgxLCAweDA4MTcsIDB4QkQ4MiwgMHhCRDgzLCAweDMyMUMsDQotICAgIDB4QkQ4NCwgMHhCRDg0LCAweDA4MTksIDB4QkQ4NSwgMHhCRDg2LCAweDMyMUUsIDB4QkQ4NywgMHhCRDhBLCAweDA4MUEsDQotICAgIDB4QkQ4QiwgMHhCRDhGLCAweDMyMjAsIDB4QkQ5MCwgMHhCRDkxLCAweDA4MUUsIDB4QkQ5MiwgMHhCRDkyLCAweDMyMjUsDQotICAgIDB4QkQ5MywgMHhCRDkzLCAweDA4MjAsIDB4QkQ5NCwgMHhCRDk0LCAweDMyMjYsIDB4QkQ5NSwgMHhCRDk1LCAweDA4MjEsDQotICAgIDB4QkQ5NiwgMHhCRDk4LCAweDMyMjcsIDB4QkQ5OSwgMHhCRDlBLCAweDA4MjIsIDB4QkQ5QiwgMHhCRDlCLCAweDMyMkEsDQotICAgIDB4QkQ5QywgMHhCRDlDLCAweDA4MjQsIDB4QkQ5RCwgMHhCREEzLCAweDMyMkIsIDB4QkRBNCwgMHhCREE0LCAweDA4MjUsDQotICAgIDB4QkRBNSwgMHhCREFGLCAweDMyMzIsIDB4QkRCMCwgMHhCREIwLCAweDA4MjYsIDB4QkRCMSwgMHhCREI3LCAweDMyM0QsDQotICAgIDB4QkRCOCwgMHhCREI4LCAweDA4MjcsIDB4QkRCOSwgMHhCREQzLCAweDMyNDQsIDB4QkRENCwgMHhCREQ1LCAweDA4MjgsDQotICAgIDB4QkRENiwgMHhCREQ3LCAweDMyNUYsIDB4QkREOCwgMHhCREQ4LCAweDA4MkEsIDB4QkREOSwgMHhCRERCLCAweDMyNjEsDQotICAgIDB4QkREQywgMHhCRERDLCAweDA4MkIsIDB4QkRERCwgMHhCREU4LCAweDMyNjQsIDB4QkRFOSwgMHhCREU5LCAweDA4MkMsDQotICAgIDB4QkRFQSwgMHhCREVGLCAweDMyNzAsIDB4QkRGMCwgMHhCREYwLCAweDA4MkQsIDB4QkRGMSwgMHhCREYzLCAweDMyNzYsDQotICAgIDB4QkRGNCwgMHhCREY0LCAweDA4MkUsIDB4QkRGNSwgMHhCREY3LCAweDMyNzksIDB4QkRGOCwgMHhCREY4LCAweDA4MkYsDQotICAgIDB4QkRGOSwgMHhCREZGLCAweDMyN0MsIDB4QkUwMCwgMHhCRTAwLCAweDA4MzAsIDB4QkUwMSwgMHhCRTAyLCAweDMyODMsDQotICAgIDB4QkUwMywgMHhCRTAzLCAweDA4MzEsIDB4QkUwNCwgMHhCRTA0LCAweDMyODUsIDB4QkUwNSwgMHhCRTA1LCAweDA4MzIsDQotICAgIDB4QkUwNiwgMHhCRTBCLCAweDMyODYsIDB4QkUwQywgMHhCRTBELCAweDA4MzMsIDB4QkUwRSwgMHhCRTBGLCAweDMyOEMsDQotICAgIDB4QkUxMCwgMHhCRTEwLCAweDA4MzUsIDB4QkUxMSwgMHhCRTEzLCAweDMyOEUsIDB4QkUxNCwgMHhCRTE0LCAweDA4MzYsDQotICAgIDB4QkUxNSwgMHhCRTFCLCAweDMyOTEsIDB4QkUxQywgMHhCRTFELCAweDA4MzcsIDB4QkUxRSwgMHhCRTFFLCAweDMyOTgsDQotICAgIDB4QkUxRiwgMHhCRTFGLCAweDA4MzksIDB4QkUyMCwgMHhCRTQzLCAweDMyOTksIDB4QkU0NCwgMHhCRTQ1LCAweDA4M0EsDQotICAgIDB4QkU0NiwgMHhCRTQ3LCAweDMyQkQsIDB4QkU0OCwgMHhCRTQ4LCAweDA4M0MsIDB4QkU0OSwgMHhCRTRCLCAweDMyQkYsDQotICAgIDB4QkU0QywgMHhCRTRDLCAweDA4M0QsIDB4QkU0RCwgMHhCRTRELCAweDMyQzIsIDB4QkU0RSwgMHhCRTRFLCAweDA4M0UsDQotICAgIDB4QkU0RiwgMHhCRTUzLCAweDMyQzMsIDB4QkU1NCwgMHhCRTU1LCAweDA4M0YsIDB4QkU1NiwgMHhCRTU2LCAweDMyQzgsDQotICAgIDB4QkU1NywgMHhCRTU3LCAweDA4NDEsIDB4QkU1OCwgMHhCRTU4LCAweDMyQzksIDB4QkU1OSwgMHhCRTVCLCAweDA4NDIsDQotICAgIDB4QkU1QywgMHhCRTVGLCAweDMyQ0EsIDB4QkU2MCwgMHhCRTYxLCAweDA4NDUsIDB4QkU2MiwgMHhCRTYzLCAweDMyQ0UsDQotICAgIDB4QkU2NCwgMHhCRTY0LCAweDA4NDcsIDB4QkU2NSwgMHhCRTY3LCAweDMyRDAsIDB4QkU2OCwgMHhCRTY4LCAweDA4NDgsDQotICAgIDB4QkU2OSwgMHhCRTY5LCAweDMyRDMsIDB4QkU2QSwgMHhCRTZBLCAweDA4NDksIDB4QkU2QiwgMHhCRTZGLCAweDMyRDQsDQotICAgIDB4QkU3MCwgMHhCRTcxLCAweDA4NEEsIDB4QkU3MiwgMHhCRTcyLCAweDMyRDksIDB4QkU3MywgMHhCRTc1LCAweDA4NEMsDQotICAgIDB4QkU3NiwgMHhCRTdBLCAweDMyREEsIDB4QkU3QiwgMHhCRTdELCAweDA4NEYsIDB4QkU3RSwgMHhCRTdGLCAweDMyREYsDQotICAgIDB4QkU4MCwgMHhCRTgwLCAweDA4NTIsIDB4QkU4MSwgMHhCRTgzLCAweDMyRTEsIDB4QkU4NCwgMHhCRTg0LCAweDA4NTMsDQotICAgIDB4QkU4NSwgMHhCRThCLCAweDMyRTQsIDB4QkU4QywgMHhCRThELCAweDA4NTQsIDB4QkU4RSwgMHhCRThFLCAweDMyRUIsDQotICAgIDB4QkU4RiwgMHhCRTkxLCAweDA4NTYsIDB4QkU5MiwgMHhCRTk3LCAweDMyRUMsIDB4QkU5OCwgMHhCRTk5LCAweDA4NTksDQotICAgIDB4QkU5QSwgMHhCRUE3LCAweDMyRjIsIDB4QkVBOCwgMHhCRUE4LCAweDA4NUIsIDB4QkVBOSwgMHhCRUNGLCAweDMzMDAsDQotICAgIDB4QkVEMCwgMHhCRUQxLCAweDA4NUMsIDB4QkVEMiwgMHhCRUQzLCAweDMzMjcsIDB4QkVENCwgMHhCRUQ0LCAweDA4NUUsDQotICAgIDB4QkVENSwgMHhCRUQ2LCAweDMzMjksIDB4QkVENywgMHhCRUQ4LCAweDA4NUYsIDB4QkVEOSwgMHhCRURGLCAweDMzMkIsDQotICAgIDB4QkVFMCwgMHhCRUUwLCAweDA4NjEsIDB4QkVFMSwgMHhCRUUyLCAweDMzMzIsIDB4QkVFMywgMHhCRUU1LCAweDA4NjIsDQotICAgIDB4QkVFNiwgMHhCRUVCLCAweDMzMzQsIDB4QkVFQywgMHhCRUVDLCAweDA4NjUsIDB4QkVFRCwgMHhCRUZGLCAweDMzM0EsDQotICAgIDB4QkYwMCwgMHhCRjAwLCAweDMzNEQsIDB4QkYwMSwgMHhCRjAxLCAweDA4NjYsIDB4QkYwMiwgMHhCRjA3LCAweDMzNEUsDQotICAgIDB4QkYwOCwgMHhCRjA5LCAweDA4NjcsIDB4QkYwQSwgMHhCRjE3LCAweDMzNTQsIDB4QkYxOCwgMHhCRjE5LCAweDA4NjksDQotICAgIDB4QkYxQSwgMHhCRjFBLCAweDMzNjIsIDB4QkYxQiwgMHhCRjFELCAweDA4NkIsIDB4QkYxRSwgMHhCRjNGLCAweDMzNjMsDQotICAgIDB4QkY0MCwgMHhCRjQxLCAweDA4NkUsIDB4QkY0MiwgMHhCRjQzLCAweDMzODUsIDB4QkY0NCwgMHhCRjQ0LCAweDA4NzAsDQotICAgIDB4QkY0NSwgMHhCRjQ3LCAweDMzODcsIDB4QkY0OCwgMHhCRjQ4LCAweDA4NzEsIDB4QkY0OSwgMHhCRjRGLCAweDMzOEEsDQotICAgIDB4QkY1MCwgMHhCRjUxLCAweDA4NzIsIDB4QkY1MiwgMHhCRjU0LCAweDMzOTEsIDB4QkY1NSwgMHhCRjU1LCAweDA4NzQsDQotICAgIDB4QkY1NiwgMHhCRjkzLCAweDMzOTQsIDB4QkY5NCwgMHhCRjk0LCAweDA4NzUsIDB4QkY5NSwgMHhCRkFGLCAweDMzRDIsDQotICAgIDB4QkZCMCwgMHhCRkIwLCAweDA4NzYsIDB4QkZCMSwgMHhCRkM0LCAweDMzRUQsIDB4QkZDNSwgMHhCRkM1LCAweDA4NzcsDQotICAgIDB4QkZDNiwgMHhCRkNCLCAweDM0MDEsIDB4QkZDQywgMHhCRkNELCAweDA4NzgsIDB4QkZDRSwgMHhCRkNGLCAweDM0MDcsDQotICAgIDB4QkZEMCwgMHhCRkQwLCAweDA4N0EsIDB4QkZEMSwgMHhCRkQzLCAweDM0MDksIDB4QkZENCwgMHhCRkQ0LCAweDA4N0IsDQotICAgIDB4QkZENSwgMHhCRkRCLCAweDM0MEMsIDB4QkZEQywgMHhCRkRDLCAweDA4N0MsIDB4QkZERCwgMHhCRkRFLCAweDM0MTMsDQotICAgIDB4QkZERiwgMHhCRkRGLCAweDA4N0QsIDB4QkZFMCwgMHhCRkUwLCAweDM0MTUsIDB4QkZFMSwgMHhCRkUxLCAweDA4N0UsDQotICAgIDB4QkZFMiwgMHhCRkZGLCAweDM0MTYsIDB4QzAwMCwgMHhDMDNCLCAweDM0MzQsIDB4QzAzQywgMHhDMDNDLCAweDA4N0YsDQotICAgIDB4QzAzRCwgMHhDMDUwLCAweDM0NzAsIDB4QzA1MSwgMHhDMDUxLCAweDA4ODAsIDB4QzA1MiwgMHhDMDU3LCAweDM0ODQsDQotICAgIDB4QzA1OCwgMHhDMDU4LCAweDA4ODEsIDB4QzA1OSwgMHhDMDVCLCAweDM0OEEsIDB4QzA1QywgMHhDMDVDLCAweDA4ODIsDQotICAgIDB4QzA1RCwgMHhDMDVGLCAweDM0OEQsIDB4QzA2MCwgMHhDMDYwLCAweDA4ODMsIDB4QzA2MSwgMHhDMDY3LCAweDM0OTAsDQotICAgIDB4QzA2OCwgMHhDMDY5LCAweDA4ODQsIDB4QzA2QSwgMHhDMDhGLCAweDM0OTcsIDB4QzA5MCwgMHhDMDkxLCAweDA4ODYsDQotICAgIDB4QzA5MiwgMHhDMDkzLCAweDM0QkQsIDB4QzA5NCwgMHhDMDk0LCAweDA4ODgsIDB4QzA5NSwgMHhDMDk3LCAweDM0QkYsDQotICAgIDB4QzA5OCwgMHhDMDk4LCAweDA4ODksIDB4QzA5OSwgMHhDMDlGLCAweDM0QzIsIDB4QzBBMCwgMHhDMEExLCAweDA4OEEsDQotICAgIDB4QzBBMiwgMHhDMEEyLCAweDM0QzksIDB4QzBBMywgMHhDMEEzLCAweDA4OEMsIDB4QzBBNCwgMHhDMEE0LCAweDM0Q0EsDQotICAgIDB4QzBBNSwgMHhDMEE1LCAweDA4OEQsIDB4QzBBNiwgMHhDMEFCLCAweDM0Q0IsIDB4QzBBQywgMHhDMEFELCAweDA4OEUsDQotICAgIDB4QzBBRSwgMHhDMEFFLCAweDM0RDEsIDB4QzBBRiwgMHhDMEIwLCAweDA4OTAsIDB4QzBCMSwgMHhDMEIyLCAweDM0RDIsDQotICAgIDB4QzBCMywgMHhDMEI2LCAweDA4OTIsIDB4QzBCNywgMHhDMEJCLCAweDM0RDQsIDB4QzBCQywgMHhDMEJELCAweDA4OTYsDQotICAgIDB4QzBCRSwgMHhDMEJFLCAweDM0RDksIDB4QzBCRiwgMHhDMEMxLCAweDA4OTgsIDB4QzBDMiwgMHhDMEM0LCAweDM0REEsDQotICAgIDB4QzBDNSwgMHhDMEM1LCAweDA4OUIsIDB4QzBDNiwgMHhDMEM3LCAweDM0REQsIDB4QzBDOCwgMHhDMEM5LCAweDA4OUMsDQotICAgIDB4QzBDQSwgMHhDMENCLCAweDM0REYsIDB4QzBDQywgMHhDMENDLCAweDA4OUUsIDB4QzBDRCwgMHhDMENGLCAweDM0RTEsDQotICAgIDB4QzBEMCwgMHhDMEQwLCAweDA4OUYsIDB4QzBEMSwgMHhDMEQ3LCAweDM0RTQsIDB4QzBEOCwgMHhDMEQ5LCAweDA4QTAsDQotICAgIDB4QzBEQSwgMHhDMERBLCAweDM0RUIsIDB4QzBEQiwgMHhDMERELCAweDA4QTIsIDB4QzBERSwgMHhDMEUzLCAweDM0RUMsDQotICAgIDB4QzBFNCwgMHhDMEU1LCAweDA4QTUsIDB4QzBFNiwgMHhDMEU3LCAweDM0RjIsIDB4QzBFOCwgMHhDMEU4LCAweDA4QTcsDQotICAgIDB4QzBFOSwgMHhDMEVCLCAweDM0RjQsIDB4QzBFQywgMHhDMEVDLCAweDA4QTgsIDB4QzBFRCwgMHhDMEYzLCAweDM0RjcsDQotICAgIDB4QzBGNCwgMHhDMEY1LCAweDA4QTksIDB4QzBGNiwgMHhDMEY2LCAweDM0RkUsIDB4QzBGNywgMHhDMEY3LCAweDA4QUIsDQotICAgIDB4QzBGOCwgMHhDMEY4LCAweDM0RkYsIDB4QzBGOSwgMHhDMEY5LCAweDA4QUMsIDB4QzBGQSwgMHhDMEZGLCAweDM1MDAsDQotICAgIDB4QzEwMCwgMHhDMTAwLCAweDA4QUQsIDB4QzEwMSwgMHhDMTAzLCAweDM1MDYsIDB4QzEwNCwgMHhDMTA0LCAweDA4QUUsDQotICAgIDB4QzEwNSwgMHhDMTA3LCAweDM1MDksIDB4QzEwOCwgMHhDMTA4LCAweDA4QUYsIDB4QzEwOSwgMHhDMTBGLCAweDM1MEMsDQotICAgIDB4QzExMCwgMHhDMTEwLCAweDA4QjAsIDB4QzExMSwgMHhDMTE0LCAweDM1MTMsIDB4QzExNSwgMHhDMTE1LCAweDA4QjEsDQotICAgIDB4QzExNiwgMHhDMTFCLCAweDM1MTcsIDB4QzExQywgMHhDMTIwLCAweDA4QjIsIDB4QzEyMSwgMHhDMTIyLCAweDM1MUQsDQotICAgIDB4QzEyMywgMHhDMTI0LCAweDA4QjcsIDB4QzEyNSwgMHhDMTI1LCAweDM1MUYsIDB4QzEyNiwgMHhDMTI3LCAweDA4QjksDQotICAgIDB4QzEyOCwgMHhDMTJCLCAweDM1MjAsIDB4QzEyQywgMHhDMTJELCAweDA4QkIsIDB4QzEyRSwgMHhDMTJFLCAweDM1MjQsDQotICAgIDB4QzEyRiwgMHhDMTMxLCAweDA4QkQsIDB4QzEzMiwgMHhDMTM1LCAweDM1MjUsIDB4QzEzNiwgMHhDMTM2LCAweDA4QzAsDQotICAgIDB4QzEzNywgMHhDMTM3LCAweDM1MjksIDB4QzEzOCwgMHhDMTM5LCAweDA4QzEsIDB4QzEzQSwgMHhDMTNCLCAweDM1MkEsDQotICAgIDB4QzEzQywgMHhDMTNDLCAweDA4QzMsIDB4QzEzRCwgMHhDMTNGLCAweDM1MkMsIDB4QzE0MCwgMHhDMTQwLCAweDA4QzQsDQotICAgIDB4QzE0MSwgMHhDMTQ3LCAweDM1MkYsIDB4QzE0OCwgMHhDMTQ5LCAweDA4QzUsIDB4QzE0QSwgMHhDMTRBLCAweDM1MzYsDQotICAgIDB4QzE0QiwgMHhDMTRELCAweDA4QzcsIDB4QzE0RSwgMHhDMTUzLCAweDM1MzcsIDB4QzE1NCwgMHhDMTU1LCAweDA4Q0EsDQotICAgIDB4QzE1NiwgMHhDMTU3LCAweDM1M0QsIDB4QzE1OCwgMHhDMTU4LCAweDA4Q0MsIDB4QzE1OSwgMHhDMTVCLCAweDM1M0YsDQotICAgIDB4QzE1QywgMHhDMTVDLCAweDA4Q0QsIDB4QzE1RCwgMHhDMTYzLCAweDM1NDIsIDB4QzE2NCwgMHhDMTY1LCAweDA4Q0UsDQotICAgIDB4QzE2NiwgMHhDMTY2LCAweDM1NDksIDB4QzE2NywgMHhDMTY5LCAweDA4RDAsIDB4QzE2QSwgMHhDMTZGLCAweDM1NEEsDQotICAgIDB4QzE3MCwgMHhDMTcwLCAweDA4RDMsIDB4QzE3MSwgMHhDMTczLCAweDM1NTAsIDB4QzE3NCwgMHhDMTc0LCAweDA4RDQsDQotICAgIDB4QzE3NSwgMHhDMTc3LCAweDM1NTMsIDB4QzE3OCwgMHhDMTc4LCAweDA4RDUsIDB4QzE3OSwgMHhDMTg0LCAweDM1NTYsDQotICAgIDB4QzE4NSwgMHhDMTg1LCAweDA4RDYsIDB4QzE4NiwgMHhDMThCLCAweDM1NjIsIDB4QzE4QywgMHhDMThFLCAweDA4RDcsDQotICAgIDB4QzE4RiwgMHhDMThGLCAweDM1NjgsIDB4QzE5MCwgMHhDMTkwLCAweDA4REEsIDB4QzE5MSwgMHhDMTkzLCAweDM1NjksDQotICAgIDB4QzE5NCwgMHhDMTk0LCAweDA4REIsIDB4QzE5NSwgMHhDMTk1LCAweDM1NkMsIDB4QzE5NiwgMHhDMTk2LCAweDA4REMsDQotICAgIDB4QzE5NywgMHhDMTlCLCAweDM1NkQsIDB4QzE5QywgMHhDMTlELCAweDA4REQsIDB4QzE5RSwgMHhDMTlFLCAweDM1NzIsDQotICAgIDB4QzE5RiwgMHhDMTlGLCAweDA4REYsIDB4QzFBMCwgMHhDMUEwLCAweDM1NzMsIDB4QzFBMSwgMHhDMUExLCAweDA4RTAsDQotICAgIDB4QzFBMiwgMHhDMUE0LCAweDM1NzQsIDB4QzFBNSwgMHhDMUE1LCAweDA4RTEsIDB4QzFBNiwgMHhDMUE3LCAweDM1NzcsDQotICAgIDB4QzFBOCwgMHhDMUE5LCAweDA4RTIsIDB4QzFBQSwgMHhDMUFCLCAweDM1NzksIDB4QzFBQywgMHhDMUFDLCAweDA4RTQsDQotICAgIDB4QzFBRCwgMHhDMUFGLCAweDM1N0IsIDB4QzFCMCwgMHhDMUIwLCAweDA4RTUsIDB4QzFCMSwgMHhDMUJDLCAweDM1N0UsDQotICAgIDB4QzFCRCwgMHhDMUJELCAweDA4RTYsIDB4QzFCRSwgMHhDMUMzLCAweDM1OEEsIDB4QzFDNCwgMHhDMUM0LCAweDA4RTcsDQotICAgIDB4QzFDNSwgMHhDMUM3LCAweDM1OTAsIDB4QzFDOCwgMHhDMUM4LCAweDA4RTgsIDB4QzFDOSwgMHhDMUNCLCAweDM1OTMsDQotICAgIDB4QzFDQywgMHhDMUNDLCAweDA4RTksIDB4QzFDRCwgMHhDMUQzLCAweDM1OTYsIDB4QzFENCwgMHhDMUQ0LCAweDA4RUEsDQotICAgIDB4QzFENSwgMHhDMUQ2LCAweDM1OUQsIDB4QzFENywgMHhDMUQ4LCAweDA4RUIsIDB4QzFEOSwgMHhDMURGLCAweDM1OUYsDQotICAgIDB4QzFFMCwgMHhDMUUwLCAweDA4RUQsIDB4QzFFMSwgMHhDMUUzLCAweDM1QTYsIDB4QzFFNCwgMHhDMUU0LCAweDA4RUUsDQotICAgIDB4QzFFNSwgMHhDMUU3LCAweDM1QTksIDB4QzFFOCwgMHhDMUU4LCAweDA4RUYsIDB4QzFFOSwgMHhDMUVGLCAweDM1QUMsDQotICAgIDB4QzFGMCwgMHhDMUYxLCAweDA4RjAsIDB4QzFGMiwgMHhDMUYyLCAweDM1QjMsIDB4QzFGMywgMHhDMUYzLCAweDA4RjIsDQotICAgIDB4QzFGNCwgMHhDMUZCLCAweDM1QjQsIDB4QzFGQywgMHhDMUZELCAweDA4RjMsIDB4QzFGRSwgMHhDMUZGLCAweDM1QkMsDQotICAgIDB4QzIwMCwgMHhDMjAwLCAweDA4RjUsIDB4QzIwMSwgMHhDMjAzLCAweDM1QkUsIDB4QzIwNCwgMHhDMjA0LCAweDA4RjYsDQotICAgIDB4QzIwNSwgMHhDMjBCLCAweDM1QzEsIDB4QzIwQywgMHhDMjBELCAweDA4RjcsIDB4QzIwRSwgMHhDMjBFLCAweDM1QzgsDQotICAgIDB4QzIwRiwgMHhDMjBGLCAweDA4RjksIDB4QzIxMCwgMHhDMjEwLCAweDM1QzksIDB4QzIxMSwgMHhDMjExLCAweDA4RkEsDQotICAgIDB4QzIxMiwgMHhDMjE3LCAweDM1Q0EsIDB4QzIxOCwgMHhDMjE5LCAweDA4RkIsIDB4QzIxQSwgMHhDMjFCLCAweDM1RDAsDQotICAgIDB4QzIxQywgMHhDMjFDLCAweDA4RkQsIDB4QzIxRCwgMHhDMjFFLCAweDM1RDIsIDB4QzIxRiwgMHhDMjIwLCAweDA4RkUsDQotICAgIDB4QzIyMSwgMHhDMjI3LCAweDM1RDQsIDB4QzIyOCwgMHhDMjI5LCAweDA5MDAsIDB4QzIyQSwgMHhDMjJBLCAweDM1REIsDQotICAgIDB4QzIyQiwgMHhDMjJCLCAweDA5MDIsIDB4QzIyQywgMHhDMjJDLCAweDM1REMsIDB4QzIyRCwgMHhDMjJELCAweDA5MDMsDQotICAgIDB4QzIyRSwgMHhDMjJFLCAweDM1REQsIDB4QzIyRiwgMHhDMjJGLCAweDA5MDQsIDB4QzIzMCwgMHhDMjMwLCAweDM1REUsDQotICAgIDB4QzIzMSwgMHhDMjMyLCAweDA5MDUsIDB4QzIzMywgMHhDMjMzLCAweDM1REYsIDB4QzIzNCwgMHhDMjM0LCAweDA5MDcsDQotICAgIDB4QzIzNSwgMHhDMjQ3LCAweDM1RTAsIDB4QzI0OCwgMHhDMjQ4LCAweDA5MDgsIDB4QzI0OSwgMHhDMjRGLCAweDM1RjMsDQotICAgIDB4QzI1MCwgMHhDMjUxLCAweDA5MDksIDB4QzI1MiwgMHhDMjUzLCAweDM1RkEsIDB4QzI1NCwgMHhDMjU0LCAweDA5MEIsDQotICAgIDB4QzI1NSwgMHhDMjU3LCAweDM1RkMsIDB4QzI1OCwgMHhDMjU4LCAweDA5MEMsIDB4QzI1OSwgMHhDMjVGLCAweDM1RkYsDQotICAgIDB4QzI2MCwgMHhDMjYwLCAweDA5MEQsIDB4QzI2MSwgMHhDMjY0LCAweDM2MDYsIDB4QzI2NSwgMHhDMjY1LCAweDA5MEUsDQotICAgIDB4QzI2NiwgMHhDMjZCLCAweDM2MEEsIDB4QzI2QywgMHhDMjZELCAweDA5MEYsIDB4QzI2RSwgMHhDMjZGLCAweDM2MTAsDQotICAgIDB4QzI3MCwgMHhDMjcwLCAweDA5MTEsIDB4QzI3MSwgMHhDMjczLCAweDM2MTIsIDB4QzI3NCwgMHhDMjc0LCAweDA5MTIsDQotICAgIDB4QzI3NSwgMHhDMjdCLCAweDM2MTUsIDB4QzI3QywgMHhDMjdELCAweDA5MTMsIDB4QzI3RSwgMHhDMjdFLCAweDM2MUMsDQotICAgIDB4QzI3RiwgMHhDMjdGLCAweDA5MTUsIDB4QzI4MCwgMHhDMjgwLCAweDM2MUQsIDB4QzI4MSwgMHhDMjgxLCAweDA5MTYsDQotICAgIDB4QzI4MiwgMHhDMjg3LCAweDM2MUUsIDB4QzI4OCwgMHhDMjg5LCAweDA5MTcsIDB4QzI4QSwgMHhDMjhGLCAweDM2MjQsDQotICAgIDB4QzI5MCwgMHhDMjkwLCAweDA5MTksIDB4QzI5MSwgMHhDMjk3LCAweDM2MkEsIDB4QzI5OCwgMHhDMjk4LCAweDA5MUEsDQotICAgIDB4QzI5OSwgMHhDMjlBLCAweDM2MzEsIDB4QzI5QiwgMHhDMjlCLCAweDA5MUIsIDB4QzI5QywgMHhDMjlDLCAweDM2MzMsDQotICAgIDB4QzI5RCwgMHhDMjlELCAweDA5MUMsIDB4QzI5RSwgMHhDMkEzLCAweDM2MzQsIDB4QzJBNCwgMHhDMkE1LCAweDA5MUQsDQotICAgIDB4QzJBNiwgMHhDMkE3LCAweDM2M0EsIDB4QzJBOCwgMHhDMkE4LCAweDA5MUYsIDB4QzJBOSwgMHhDMkFCLCAweDM2M0MsDQotICAgIDB4QzJBQywgMHhDMkFELCAweDA5MjAsIDB4QzJBRSwgMHhDMkIzLCAweDM2M0YsIDB4QzJCNCwgMHhDMkI1LCAweDA5MjIsDQotICAgIDB4QzJCNiwgMHhDMkI2LCAweDM2NDUsIDB4QzJCNywgMHhDMkI3LCAweDA5MjQsIDB4QzJCOCwgMHhDMkI4LCAweDM2NDYsDQotICAgIDB4QzJCOSwgMHhDMkI5LCAweDA5MjUsIDB4QzJCQSwgMHhDMkRCLCAweDM2NDcsIDB4QzJEQywgMHhDMkRELCAweDA5MjYsDQotICAgIDB4QzJERSwgMHhDMkRGLCAweDM2NjksIDB4QzJFMCwgMHhDMkUwLCAweDA5MjgsIDB4QzJFMSwgMHhDMkUyLCAweDM2NkIsDQotICAgIDB4QzJFMywgMHhDMkU0LCAweDA5MjksIDB4QzJFNSwgMHhDMkVBLCAweDM2NkQsIDB4QzJFQiwgMHhDMkVELCAweDA5MkIsDQotICAgIDB4QzJFRSwgMHhDMkVFLCAweDM2NzMsIDB4QzJFRiwgMHhDMkVGLCAweDA5MkUsIDB4QzJGMCwgMHhDMkYwLCAweDM2NzQsDQotICAgIDB4QzJGMSwgMHhDMkYxLCAweDA5MkYsIDB4QzJGMiwgMHhDMkY1LCAweDM2NzUsIDB4QzJGNiwgMHhDMkY2LCAweDA5MzAsDQotICAgIDB4QzJGNywgMHhDMkY3LCAweDM2NzksIDB4QzJGOCwgMHhDMkY5LCAweDA5MzEsIDB4QzJGQSwgMHhDMkZBLCAweDM2N0EsDQotICAgIDB4QzJGQiwgMHhDMkZDLCAweDA5MzMsIDB4QzJGRCwgMHhDMkZGLCAweDM2N0IsIDB4QzMwMCwgMHhDMzAwLCAweDA5MzUsDQotICAgIDB4QzMwMSwgMHhDMzA3LCAweDM2N0UsIDB4QzMwOCwgMHhDMzA5LCAweDA5MzYsIDB4QzMwQSwgMHhDMzBCLCAweDM2ODUsDQotICAgIDB4QzMwQywgMHhDMzBELCAweDA5MzgsIDB4QzMwRSwgMHhDMzEyLCAweDM2ODcsIDB4QzMxMywgMHhDMzE1LCAweDA5M0EsDQotICAgIDB4QzMxNiwgMHhDMzE3LCAweDM2OEMsIDB4QzMxOCwgMHhDMzE4LCAweDA5M0QsIDB4QzMxOSwgMHhDMzFCLCAweDM2OEUsDQotICAgIDB4QzMxQywgMHhDMzFDLCAweDA5M0UsIDB4QzMxRCwgMHhDMzIzLCAweDM2OTEsIDB4QzMyNCwgMHhDMzI1LCAweDA5M0YsDQotICAgIDB4QzMyNiwgMHhDMzI3LCAweDM2OTgsIDB4QzMyOCwgMHhDMzI5LCAweDA5NDEsIDB4QzMyQSwgMHhDMzQ0LCAweDM2OUEsDQotICAgIDB4QzM0NSwgMHhDMzQ1LCAweDA5NDMsIDB4QzM0NiwgMHhDMzY3LCAweDM2QjUsIDB4QzM2OCwgMHhDMzY5LCAweDA5NDQsDQotICAgIDB4QzM2QSwgMHhDMzZCLCAweDM2RDcsIDB4QzM2QywgMHhDMzZDLCAweDA5NDYsIDB4QzM2RCwgMHhDMzZGLCAweDM2RDksDQotICAgIDB4QzM3MCwgMHhDMzcwLCAweDA5NDcsIDB4QzM3MSwgMHhDMzcxLCAweDM2REMsIDB4QzM3MiwgMHhDMzcyLCAweDA5NDgsDQotICAgIDB4QzM3MywgMHhDMzc3LCAweDM2REQsIDB4QzM3OCwgMHhDMzc5LCAweDA5NDksIDB4QzM3QSwgMHhDMzdCLCAweDM2RTIsDQotICAgIDB4QzM3QywgMHhDMzdELCAweDA5NEIsIDB4QzM3RSwgMHhDMzgzLCAweDM2RTQsIDB4QzM4NCwgMHhDMzg0LCAweDA5NEQsDQotICAgIDB4QzM4NSwgMHhDMzg3LCAweDM2RUEsIDB4QzM4OCwgMHhDMzg4LCAweDA5NEUsIDB4QzM4OSwgMHhDMzhCLCAweDM2RUQsDQotICAgIDB4QzM4QywgMHhDMzhDLCAweDA5NEYsIDB4QzM4RCwgMHhDM0JGLCAweDM2RjAsIDB4QzNDMCwgMHhDM0MwLCAweDA5NTAsDQotICAgIDB4QzNDMSwgMHhDM0Q3LCAweDM3MjMsIDB4QzNEOCwgMHhDM0Q5LCAweDA5NTEsIDB4QzNEQSwgMHhDM0RCLCAweDM3M0EsDQotICAgIDB4QzNEQywgMHhDM0RDLCAweDA5NTMsIDB4QzNERCwgMHhDM0RFLCAweDM3M0MsIDB4QzNERiwgMHhDM0UwLCAweDA5NTQsDQotICAgIDB4QzNFMSwgMHhDM0UxLCAweDM3M0UsIDB4QzNFMiwgMHhDM0UyLCAweDA5NTYsIDB4QzNFMywgMHhDM0U3LCAweDM3M0YsDQotICAgIDB4QzNFOCwgMHhDM0U5LCAweDA5NTcsIDB4QzNFQSwgMHhDM0VDLCAweDM3NDQsIDB4QzNFRCwgMHhDM0VELCAweDA5NTksDQotICAgIDB4QzNFRSwgMHhDM0YzLCAweDM3NDcsIDB4QzNGNCwgMHhDM0Y1LCAweDA5NUEsIDB4QzNGNiwgMHhDM0Y3LCAweDM3NEQsDQotICAgIDB4QzNGOCwgMHhDM0Y4LCAweDA5NUMsIDB4QzNGOSwgMHhDM0ZGLCAweDM3NEYsIDB4QzQwMCwgMHhDNDA3LCAweDM3NTYsDQotICAgIDB4QzQwOCwgMHhDNDA4LCAweDA5NUQsIDB4QzQwOSwgMHhDNDBGLCAweDM3NUUsIDB4QzQxMCwgMHhDNDEwLCAweDA5NUUsDQotICAgIDB4QzQxMSwgMHhDNDIzLCAweDM3NjUsIDB4QzQyNCwgMHhDNDI0LCAweDA5NUYsIDB4QzQyNSwgMHhDNDJCLCAweDM3NzgsDQotICAgIDB4QzQyQywgMHhDNDJDLCAweDA5NjAsIDB4QzQyRCwgMHhDNDJGLCAweDM3N0YsIDB4QzQzMCwgMHhDNDMwLCAweDA5NjEsDQotICAgIDB4QzQzMSwgMHhDNDMzLCAweDM3ODIsIDB4QzQzNCwgMHhDNDM0LCAweDA5NjIsIDB4QzQzNSwgMHhDNDNCLCAweDM3ODUsDQotICAgIDB4QzQzQywgMHhDNDNELCAweDA5NjMsIDB4QzQzRSwgMHhDNDQ3LCAweDM3OEMsIDB4QzQ0OCwgMHhDNDQ4LCAweDA5NjUsDQotICAgIDB4QzQ0OSwgMHhDNDYzLCAweDM3OTYsIDB4QzQ2NCwgMHhDNDY1LCAweDA5NjYsIDB4QzQ2NiwgMHhDNDY3LCAweDM3QjEsDQotICAgIDB4QzQ2OCwgMHhDNDY4LCAweDA5NjgsIDB4QzQ2OSwgMHhDNDZCLCAweDM3QjMsIDB4QzQ2QywgMHhDNDZDLCAweDA5NjksDQotICAgIDB4QzQ2RCwgMHhDNDczLCAweDM3QjYsIDB4QzQ3NCwgMHhDNDc1LCAweDA5NkEsIDB4QzQ3NiwgMHhDNDc4LCAweDM3QkQsDQotICAgIDB4QzQ3OSwgMHhDNDc5LCAweDA5NkMsIDB4QzQ3QSwgMHhDNDdGLCAweDM3QzAsIDB4QzQ4MCwgMHhDNDgwLCAweDA5NkQsDQotICAgIDB4QzQ4MSwgMHhDNDkzLCAweDM3QzYsIDB4QzQ5NCwgMHhDNDk0LCAweDA5NkUsIDB4QzQ5NSwgMHhDNDlCLCAweDM3RDksDQotICAgIDB4QzQ5QywgMHhDNDlDLCAweDA5NkYsIDB4QzQ5RCwgMHhDNEI3LCAweDM3RTAsIDB4QzRCOCwgMHhDNEI4LCAweDA5NzAsDQotICAgIDB4QzRCOSwgMHhDNEJCLCAweDM3RkIsIDB4QzRCQywgMHhDNEJDLCAweDA5NzEsIDB4QzRCRCwgMHhDNEU4LCAweDM3RkUsDQotICAgIDB4QzRFOSwgMHhDNEU5LCAweDA5NzIsIDB4QzRFQSwgMHhDNEVGLCAweDM4MkEsIDB4QzRGMCwgMHhDNEYxLCAweDA5NzMsDQotICAgIDB4QzRGMiwgMHhDNEYzLCAweDM4MzAsIDB4QzRGNCwgMHhDNEY0LCAweDA5NzUsIDB4QzRGNSwgMHhDNEY3LCAweDM4MzIsDQotICAgIDB4QzRGOCwgMHhDNEY4LCAweDA5NzYsIDB4QzRGOSwgMHhDNEY5LCAweDM4MzUsIDB4QzRGQSwgMHhDNEZBLCAweDA5NzcsDQotICAgIDB4QzRGQiwgMHhDNEZFLCAweDM4MzYsIDB4QzRGRiwgMHhDNEZGLCAweDA5NzgsIDB4QzUwMCwgMHhDNTAxLCAweDA5NzksDQotICAgIDB4QzUwMiwgMHhDNTBCLCAweDM4M0EsIDB4QzUwQywgMHhDNTBDLCAweDA5N0IsIDB4QzUwRCwgMHhDNTBGLCAweDM4NDQsDQotICAgIDB4QzUxMCwgMHhDNTEwLCAweDA5N0MsIDB4QzUxMSwgMHhDNTEzLCAweDM4NDcsIDB4QzUxNCwgMHhDNTE0LCAweDA5N0QsDQotICAgIDB4QzUxNSwgMHhDNTFCLCAweDM4NEEsIDB4QzUxQywgMHhDNTFDLCAweDA5N0UsIDB4QzUxRCwgMHhDNTI3LCAweDM4NTEsDQotICAgIDB4QzUyOCwgMHhDNTI5LCAweDA5N0YsIDB4QzUyQSwgMHhDNTJCLCAweDM4NUMsIDB4QzUyQywgMHhDNTJDLCAweDA5ODEsDQotICAgIDB4QzUyRCwgMHhDNTJGLCAweDM4NUUsIDB4QzUzMCwgMHhDNTMwLCAweDA5ODIsIDB4QzUzMSwgMHhDNTM3LCAweDM4NjEsDQotICAgIDB4QzUzOCwgMHhDNTM5LCAweDA5ODMsIDB4QzUzQSwgMHhDNTNBLCAweDM4NjgsIDB4QzUzQiwgMHhDNTNCLCAweDA5ODUsDQotICAgIDB4QzUzQywgMHhDNTNDLCAweDM4NjksIDB4QzUzRCwgMHhDNTNELCAweDA5ODYsIDB4QzUzRSwgMHhDNTQzLCAweDM4NkEsDQotICAgIDB4QzU0NCwgMHhDNTQ1LCAweDA5ODcsIDB4QzU0NiwgMHhDNTQ3LCAweDM4NzAsIDB4QzU0OCwgMHhDNTRBLCAweDA5ODksDQotICAgIDB4QzU0QiwgMHhDNTRCLCAweDM4NzIsIDB4QzU0QywgMHhDNTRFLCAweDA5OEMsIDB4QzU0RiwgMHhDNTUyLCAweDM4NzMsDQotICAgIDB4QzU1MywgMHhDNTU1LCAweDA5OEYsIDB4QzU1NiwgMHhDNTU2LCAweDM4NzcsIDB4QzU1NywgMHhDNTU5LCAweDA5OTIsDQotICAgIDB4QzU1QSwgMHhDNTVDLCAweDM4NzgsIDB4QzU1RCwgMHhDNTVFLCAweDA5OTUsIDB4QzU1RiwgMHhDNTVGLCAweDM4N0IsDQotICAgIDB4QzU2MCwgMHhDNTYxLCAweDA5OTcsIDB4QzU2MiwgMHhDNTYzLCAweDM4N0MsIDB4QzU2NCwgMHhDNTY0LCAweDA5OTksDQotICAgIDB4QzU2NSwgMHhDNTY3LCAweDM4N0UsIDB4QzU2OCwgMHhDNTY4LCAweDA5OUEsIDB4QzU2OSwgMHhDNTZGLCAweDM4ODEsDQotICAgIDB4QzU3MCwgMHhDNTcxLCAweDA5OUIsIDB4QzU3MiwgMHhDNTcyLCAweDM4ODgsIDB4QzU3MywgMHhDNTc1LCAweDA5OUQsDQotICAgIDB4QzU3NiwgMHhDNTdCLCAweDM4ODksIDB4QzU3QywgMHhDNTdELCAweDA5QTAsIDB4QzU3RSwgMHhDNTdGLCAweDM4OEYsDQotICAgIDB4QzU4MCwgMHhDNTgwLCAweDA5QTIsIDB4QzU4MSwgMHhDNTgzLCAweDM4OTEsIDB4QzU4NCwgMHhDNTg0LCAweDA5QTMsDQotICAgIDB4QzU4NSwgMHhDNTg2LCAweDM4OTQsIDB4QzU4NywgMHhDNTg3LCAweDA5QTQsIDB4QzU4OCwgMHhDNThCLCAweDM4OTYsDQotICAgIDB4QzU4QywgMHhDNThELCAweDA5QTUsIDB4QzU4RSwgMHhDNThFLCAweDM4OUEsIDB4QzU4RiwgMHhDNThGLCAweDA5QTcsDQotICAgIDB4QzU5MCwgMHhDNTkwLCAweDM4OUIsIDB4QzU5MSwgMHhDNTkxLCAweDA5QTgsIDB4QzU5MiwgMHhDNTk0LCAweDM4OUMsDQotICAgIDB4QzU5NSwgMHhDNTk1LCAweDA5QTksIDB4QzU5NiwgMHhDNTk2LCAweDM4OUYsIDB4QzU5NywgMHhDNTk4LCAweDA5QUEsDQotICAgIDB4QzU5OSwgMHhDNTlCLCAweDM4QTAsIDB4QzU5QywgMHhDNTlDLCAweDA5QUMsIDB4QzU5RCwgMHhDNTlGLCAweDM4QTMsDQotICAgIDB4QzVBMCwgMHhDNUEwLCAweDA5QUQsIDB4QzVBMSwgMHhDNUE4LCAweDM4QTYsIDB4QzVBOSwgMHhDNUE5LCAweDA5QUUsDQotICAgIDB4QzVBQSwgMHhDNUIzLCAweDM4QUUsIDB4QzVCNCwgMHhDNUI1LCAweDA5QUYsIDB4QzVCNiwgMHhDNUI3LCAweDM4QjgsDQotICAgIDB4QzVCOCwgMHhDNUI5LCAweDA5QjEsIDB4QzVCQSwgMHhDNUJBLCAweDM4QkEsIDB4QzVCQiwgMHhDNUJFLCAweDA5QjMsDQotICAgIDB4QzVCRiwgMHhDNUMzLCAweDM4QkIsIDB4QzVDNCwgMHhDNUNBLCAweDA5QjcsIDB4QzVDQiwgMHhDNUNCLCAweDM4QzAsDQotICAgIDB4QzVDQywgMHhDNUNDLCAweDA5QkUsIDB4QzVDRCwgMHhDNUNELCAweDM4QzEsIDB4QzVDRSwgMHhDNUNFLCAweDA5QkYsDQotICAgIDB4QzVDRiwgMHhDNUNGLCAweDM4QzIsIDB4QzVEMCwgMHhDNUQxLCAweDA5QzAsIDB4QzVEMiwgMHhDNUQzLCAweDM4QzMsDQotICAgIDB4QzVENCwgMHhDNUQ0LCAweDA5QzIsIDB4QzVENSwgMHhDNUQ3LCAweDM4QzUsIDB4QzVEOCwgMHhDNUQ4LCAweDA5QzMsDQotICAgIDB4QzVEOSwgMHhDNURGLCAweDM4QzgsIDB4QzVFMCwgMHhDNUUxLCAweDA5QzQsIDB4QzVFMiwgMHhDNUUyLCAweDM4Q0YsDQotICAgIDB4QzVFMywgMHhDNUUzLCAweDA5QzYsIDB4QzVFNCwgMHhDNUU0LCAweDM4RDAsIDB4QzVFNSwgMHhDNUU1LCAweDA5QzcsDQotICAgIDB4QzVFNiwgMHhDNUVCLCAweDM4RDEsIDB4QzVFQywgMHhDNUVFLCAweDA5QzgsIDB4QzVFRiwgMHhDNUVGLCAweDM4RDcsDQotICAgIDB4QzVGMCwgMHhDNUYwLCAweDA5Q0IsIDB4QzVGMSwgMHhDNUYzLCAweDM4RDgsIDB4QzVGNCwgMHhDNUY0LCAweDA5Q0MsDQotICAgIDB4QzVGNSwgMHhDNUY1LCAweDM4REIsIDB4QzVGNiwgMHhDNUY3LCAweDA5Q0QsIDB4QzVGOCwgMHhDNUZCLCAweDM4REMsDQotICAgIDB4QzVGQywgMHhDNUZGLCAweDA5Q0YsIDB4QzYwMCwgMHhDNjAxLCAweDA5RDMsIDB4QzYwMiwgMHhDNjA0LCAweDM4RTAsDQotICAgIDB4QzYwNSwgMHhDNjA4LCAweDA5RDUsIDB4QzYwOSwgMHhDNjBCLCAweDM4RTMsIDB4QzYwQywgMHhDNjBDLCAweDA5RDksDQotICAgIDB4QzYwRCwgMHhDNjBGLCAweDM4RTYsIDB4QzYxMCwgMHhDNjEwLCAweDA5REEsIDB4QzYxMSwgMHhDNjE3LCAweDM4RTksDQotICAgIDB4QzYxOCwgMHhDNjE5LCAweDA5REIsIDB4QzYxQSwgMHhDNjFBLCAweDM4RjAsIDB4QzYxQiwgMHhDNjFDLCAweDA5REQsDQotICAgIDB4QzYxRCwgMHhDNjIzLCAweDM4RjEsIDB4QzYyNCwgMHhDNjI1LCAweDA5REYsIDB4QzYyNiwgMHhDNjI3LCAweDM4RjgsDQotICAgIDB4QzYyOCwgMHhDNjI4LCAweDA5RTEsIDB4QzYyOSwgMHhDNjJCLCAweDM4RkEsIDB4QzYyQywgMHhDNjJFLCAweDA5RTIsDQotICAgIDB4QzYyRiwgMHhDNjJGLCAweDM4RkQsIDB4QzYzMCwgMHhDNjMwLCAweDA5RTUsIDB4QzYzMSwgMHhDNjMyLCAweDM4RkUsDQotICAgIDB4QzYzMywgMHhDNjM1LCAweDA5RTYsIDB4QzYzNiwgMHhDNjM2LCAweDM5MDAsIDB4QzYzNywgMHhDNjM3LCAweDA5RTksDQotICAgIDB4QzYzOCwgMHhDNjM4LCAweDM5MDEsIDB4QzYzOSwgMHhDNjM5LCAweDA5RUEsIDB4QzYzQSwgMHhDNjNBLCAweDM5MDIsDQotICAgIDB4QzYzQiwgMHhDNjNCLCAweDA5RUIsIDB4QzYzQywgMHhDNjNGLCAweDM5MDMsIDB4QzY0MCwgMHhDNjQxLCAweDA5RUMsDQotICAgIDB4QzY0MiwgMHhDNjQzLCAweDM5MDcsIDB4QzY0NCwgMHhDNjQ0LCAweDA5RUUsIDB4QzY0NSwgMHhDNjQ3LCAweDM5MDksDQotICAgIDB4QzY0OCwgMHhDNjQ4LCAweDA5RUYsIDB4QzY0OSwgMHhDNjRGLCAweDM5MEMsIDB4QzY1MCwgMHhDNjUxLCAweDA5RjAsDQotICAgIDB4QzY1MiwgMHhDNjUyLCAweDM5MTMsIDB4QzY1MywgMHhDNjU1LCAweDA5RjIsIDB4QzY1NiwgMHhDNjVCLCAweDM5MTQsDQotICAgIDB4QzY1QywgMHhDNjVELCAweDA5RjUsIDB4QzY1RSwgMHhDNjVGLCAweDM5MUEsIDB4QzY2MCwgMHhDNjYwLCAweDA5RjcsDQotICAgIDB4QzY2MSwgMHhDNjZCLCAweDM5MUMsIDB4QzY2QywgMHhDNjZDLCAweDA5RjgsIDB4QzY2RCwgMHhDNjZFLCAweDM5MjcsDQotICAgIDB4QzY2RiwgMHhDNjZGLCAweDA5RjksIDB4QzY3MCwgMHhDNjcwLCAweDM5MjksIDB4QzY3MSwgMHhDNjcxLCAweDA5RkEsDQotICAgIDB4QzY3MiwgMHhDNjc3LCAweDM5MkEsIDB4QzY3OCwgMHhDNjc5LCAweDA5RkIsIDB4QzY3QSwgMHhDNjdCLCAweDM5MzAsDQotICAgIDB4QzY3QywgMHhDNjdDLCAweDA5RkQsIDB4QzY3RCwgMHhDNjdGLCAweDM5MzIsIDB4QzY4MCwgMHhDNjgwLCAweDA5RkUsDQotICAgIDB4QzY4MSwgMHhDNjg3LCAweDM5MzUsIDB4QzY4OCwgMHhDNjg5LCAweDA5RkYsIDB4QzY4QSwgMHhDNjhBLCAweDM5M0MsDQotICAgIDB4QzY4QiwgMHhDNjhCLCAweDBBMDEsIDB4QzY4QywgMHhDNjhDLCAweDM5M0QsIDB4QzY4RCwgMHhDNjhELCAweDBBMDIsDQotICAgIDB4QzY4RSwgMHhDNjkzLCAweDM5M0UsIDB4QzY5NCwgMHhDNjk1LCAweDBBMDMsIDB4QzY5NiwgMHhDNjk3LCAweDM5NDQsDQotICAgIDB4QzY5OCwgMHhDNjk4LCAweDBBMDUsIDB4QzY5OSwgMHhDNjlCLCAweDM5NDYsIDB4QzY5QywgMHhDNjlDLCAweDBBMDYsDQotICAgIDB4QzY5RCwgMHhDNkEzLCAweDM5NDksIDB4QzZBNCwgMHhDNkE1LCAweDBBMDcsIDB4QzZBNiwgMHhDNkE2LCAweDM5NTAsDQotICAgIDB4QzZBNywgMHhDNkE3LCAweDBBMDksIDB4QzZBOCwgMHhDNkE4LCAweDM5NTEsIDB4QzZBOSwgMHhDNkE5LCAweDBBMEEsDQotICAgIDB4QzZBQSwgMHhDNkFGLCAweDM5NTIsIDB4QzZCMCwgMHhDNkIxLCAweDBBMEIsIDB4QzZCMiwgMHhDNkIzLCAweDM5NTgsDQotICAgIDB4QzZCNCwgMHhDNkI0LCAweDBBMEQsIDB4QzZCNSwgMHhDNkI3LCAweDM5NUEsIDB4QzZCOCwgMHhDNkJBLCAweDBBMEUsDQotICAgIDB4QzZCQiwgMHhDNkJGLCAweDM5NUQsIDB4QzZDMCwgMHhDNkMxLCAweDBBMTEsIDB4QzZDMiwgMHhDNkMyLCAweDM5NjIsDQotICAgIDB4QzZDMywgMHhDNkMzLCAweDBBMTMsIDB4QzZDNCwgMHhDNkM0LCAweDM5NjMsIDB4QzZDNSwgMHhDNkM1LCAweDBBMTQsDQotICAgIDB4QzZDNiwgMHhDNkNCLCAweDM5NjQsIDB4QzZDQywgMHhDNkNELCAweDBBMTUsIDB4QzZDRSwgMHhDNkNGLCAweDM5NkEsDQotICAgIDB4QzZEMCwgMHhDNkQwLCAweDBBMTcsIDB4QzZEMSwgMHhDNkQzLCAweDM5NkMsIDB4QzZENCwgMHhDNkQ0LCAweDBBMTgsDQotICAgIDB4QzZENSwgMHhDNkRCLCAweDM5NkYsIDB4QzZEQywgMHhDNkRELCAweDBBMTksIDB4QzZERSwgMHhDNkRGLCAweDM5NzYsDQotICAgIDB4QzZFMCwgMHhDNkUxLCAweDBBMUIsIDB4QzZFMiwgMHhDNkU3LCAweDM5NzgsIDB4QzZFOCwgMHhDNkU5LCAweDBBMUQsDQotICAgIDB4QzZFQSwgMHhDNkVCLCAweDM5N0UsIDB4QzZFQywgMHhDNkVDLCAweDBBMUYsIDB4QzZFRCwgMHhDNkVGLCAweDM5ODAsDQotICAgIDB4QzZGMCwgMHhDNkYwLCAweDBBMjAsIDB4QzZGMSwgMHhDNkY3LCAweDM5ODMsIDB4QzZGOCwgMHhDNkY5LCAweDBBMjEsDQotICAgIDB4QzZGQSwgMHhDNkZDLCAweDM5OEEsIDB4QzZGRCwgMHhDNkZELCAweDBBMjMsIDB4QzZGRSwgMHhDNkZGLCAweDM5OEQsDQotICAgIDB4QzcwMCwgMHhDNzAzLCAweDM5OEYsIDB4QzcwNCwgMHhDNzA1LCAweDBBMjQsIDB4QzcwNiwgMHhDNzA3LCAweDM5OTMsDQotICAgIDB4QzcwOCwgMHhDNzA4LCAweDBBMjYsIDB4QzcwOSwgMHhDNzBCLCAweDM5OTUsIDB4QzcwQywgMHhDNzBDLCAweDBBMjcsDQotICAgIDB4QzcwRCwgMHhDNzEzLCAweDM5OTgsIDB4QzcxNCwgMHhDNzE1LCAweDBBMjgsIDB4QzcxNiwgMHhDNzE2LCAweDM5OUYsDQotICAgIDB4QzcxNywgMHhDNzE3LCAweDBBMkEsIDB4QzcxOCwgMHhDNzE4LCAweDM5QTAsIDB4QzcxOSwgMHhDNzE5LCAweDBBMkIsDQotICAgIDB4QzcxQSwgMHhDNzFGLCAweDM5QTEsIDB4QzcyMCwgMHhDNzIxLCAweDBBMkMsIDB4QzcyMiwgMHhDNzIzLCAweDM5QTcsDQotICAgIDB4QzcyNCwgMHhDNzI0LCAweDBBMkUsIDB4QzcyNSwgMHhDNzI3LCAweDM5QTksIDB4QzcyOCwgMHhDNzI4LCAweDBBMkYsDQotICAgIDB4QzcyOSwgMHhDNzJGLCAweDM5QUMsIDB4QzczMCwgMHhDNzMxLCAweDBBMzAsIDB4QzczMiwgMHhDNzMyLCAweDM5QjMsDQotICAgIDB4QzczMywgMHhDNzMzLCAweDBBMzIsIDB4QzczNCwgMHhDNzM0LCAweDM5QjQsIDB4QzczNSwgMHhDNzM1LCAweDBBMzMsDQotICAgIDB4QzczNiwgMHhDNzM2LCAweDM5QjUsIDB4QzczNywgMHhDNzM3LCAweDBBMzQsIDB4QzczOCwgMHhDNzNCLCAweDM5QjYsDQotICAgIDB4QzczQywgMHhDNzNELCAweDBBMzUsIDB4QzczRSwgMHhDNzNGLCAweDM5QkEsIDB4Qzc0MCwgMHhDNzQwLCAweDBBMzcsDQotICAgIDB4Qzc0MSwgMHhDNzQzLCAweDM5QkMsIDB4Qzc0NCwgMHhDNzQ0LCAweDBBMzgsIDB4Qzc0NSwgMHhDNzQ5LCAweDM5QkYsDQotICAgIDB4Qzc0QSwgMHhDNzRBLCAweDBBMzksIDB4Qzc0QiwgMHhDNzRCLCAweDM5QzQsIDB4Qzc0QywgMHhDNzRELCAweDBBM0EsDQotICAgIDB4Qzc0RSwgMHhDNzRFLCAweDM5QzUsIDB4Qzc0RiwgMHhDNzRGLCAweDBBM0MsIDB4Qzc1MCwgMHhDNzUwLCAweDM5QzYsDQotICAgIDB4Qzc1MSwgMHhDNzU4LCAweDBBM0QsIDB4Qzc1OSwgMHhDNzVCLCAweDM5QzcsIDB4Qzc1QywgMHhDNzVDLCAweDBBNDUsDQotICAgIDB4Qzc1RCwgMHhDNzVGLCAweDM5Q0EsIDB4Qzc2MCwgMHhDNzYwLCAweDBBNDYsIDB4Qzc2MSwgMHhDNzY3LCAweDM5Q0QsDQotICAgIDB4Qzc2OCwgMHhDNzY4LCAweDBBNDcsIDB4Qzc2OSwgMHhDNzZBLCAweDM5RDQsIDB4Qzc2QiwgMHhDNzZCLCAweDBBNDgsDQotICAgIDB4Qzc2QywgMHhDNzczLCAweDM5RDYsIDB4Qzc3NCwgMHhDNzc1LCAweDBBNDksIDB4Qzc3NiwgMHhDNzc3LCAweDM5REUsDQotICAgIDB4Qzc3OCwgMHhDNzc4LCAweDBBNEIsIDB4Qzc3OSwgMHhDNzdCLCAweDM5RTAsIDB4Qzc3QywgMHhDNzdFLCAweDBBNEMsDQotICAgIDB4Qzc3RiwgMHhDNzgyLCAweDM5RTMsIDB4Qzc4MywgMHhDNzg1LCAweDBBNEYsIDB4Qzc4NiwgMHhDNzg2LCAweDM5RTcsDQotICAgIDB4Qzc4NywgMHhDNzhBLCAweDBBNTIsIDB4Qzc4QiwgMHhDNzhELCAweDM5RTgsIDB4Qzc4RSwgMHhDNzhFLCAweDBBNTYsDQotICAgIDB4Qzc4RiwgMHhDNzhGLCAweDM5RUIsIDB4Qzc5MCwgMHhDNzkxLCAweDBBNTcsIDB4Qzc5MiwgMHhDNzkzLCAweDM5RUMsDQotICAgIDB4Qzc5NCwgMHhDNzk0LCAweDBBNTksIDB4Qzc5NSwgMHhDNzk1LCAweDM5RUUsIDB4Qzc5NiwgMHhDNzk4LCAweDBBNUEsDQotICAgIDB4Qzc5OSwgMHhDNzk5LCAweDM5RUYsIDB4Qzc5QSwgMHhDNzlBLCAweDBBNUQsIDB4Qzc5QiwgMHhDNzlGLCAweDM5RjAsDQotICAgIDB4QzdBMCwgMHhDN0ExLCAweDBBNUUsIDB4QzdBMiwgMHhDN0EyLCAweDM5RjUsIDB4QzdBMywgMHhDN0E2LCAweDBBNjAsDQotICAgIDB4QzdBNywgMHhDN0FCLCAweDM5RjYsIDB4QzdBQywgMHhDN0FELCAweDBBNjQsIDB4QzdBRSwgMHhDN0FGLCAweDM5RkIsDQotICAgIDB4QzdCMCwgMHhDN0IwLCAweDBBNjYsIDB4QzdCMSwgMHhDN0IzLCAweDM5RkQsIDB4QzdCNCwgMHhDN0I0LCAweDBBNjcsDQotICAgIDB4QzdCNSwgMHhDN0JCLCAweDNBMDAsIDB4QzdCQywgMHhDN0JELCAweDBBNjgsIDB4QzdCRSwgMHhDN0JFLCAweDNBMDcsDQotICAgIDB4QzdCRiwgMHhDN0MxLCAweDBBNkEsIDB4QzdDMiwgMHhDN0M3LCAweDNBMDgsIDB4QzdDOCwgMHhDN0M5LCAweDBBNkQsDQotICAgIDB4QzdDQSwgMHhDN0NCLCAweDNBMEUsIDB4QzdDQywgMHhDN0NDLCAweDBBNkYsIDB4QzdDRCwgMHhDN0NELCAweDNBMTAsDQotICAgIDB4QzdDRSwgMHhDN0NFLCAweDBBNzAsIDB4QzdDRiwgMHhDN0NGLCAweDNBMTEsIDB4QzdEMCwgMHhDN0QwLCAweDBBNzEsDQotICAgIDB4QzdEMSwgMHhDN0Q3LCAweDNBMTIsIDB4QzdEOCwgMHhDN0Q4LCAweDBBNzIsIDB4QzdEOSwgMHhDN0RDLCAweDNBMTksDQotICAgIDB4QzdERCwgMHhDN0RELCAweDBBNzMsIDB4QzdERSwgMHhDN0UzLCAweDNBMUQsIDB4QzdFNCwgMHhDN0U0LCAweDBBNzQsDQotICAgIDB4QzdFNSwgMHhDN0U3LCAweDNBMjMsIDB4QzdFOCwgMHhDN0U4LCAweDBBNzUsIDB4QzdFOSwgMHhDN0VCLCAweDNBMjYsDQotICAgIDB4QzdFQywgMHhDN0VDLCAweDBBNzYsIDB4QzdFRCwgMHhDN0ZGLCAweDNBMjksIDB4QzgwMCwgMHhDODAxLCAweDBBNzcsDQotICAgIDB4QzgwMiwgMHhDODAzLCAweDNBM0MsIDB4QzgwNCwgMHhDODA0LCAweDBBNzksIDB4QzgwNSwgMHhDODA3LCAweDNBM0UsDQotICAgIDB4QzgwOCwgMHhDODA4LCAweDBBN0EsIDB4QzgwOSwgMHhDODA5LCAweDNBNDEsIDB4QzgwQSwgMHhDODBBLCAweDBBN0IsDQotICAgIDB4QzgwQiwgMHhDODBGLCAweDNBNDIsIDB4QzgxMCwgMHhDODExLCAweDBBN0MsIDB4QzgxMiwgMHhDODEyLCAweDNBNDcsDQotICAgIDB4QzgxMywgMHhDODEzLCAweDBBN0UsIDB4QzgxNCwgMHhDODE0LCAweDNBNDgsIDB4QzgxNSwgMHhDODE2LCAweDBBN0YsDQotICAgIDB4QzgxNywgMHhDODFCLCAweDNBNDksIDB4QzgxQywgMHhDODFELCAweDBBODEsIDB4QzgxRSwgMHhDODFGLCAweDNBNEUsDQotICAgIDB4QzgyMCwgMHhDODIwLCAweDBBODMsIDB4QzgyMSwgMHhDODIzLCAweDNBNTAsIDB4QzgyNCwgMHhDODI0LCAweDBBODQsDQotICAgIDB4QzgyNSwgMHhDODJCLCAweDNBNTMsIDB4QzgyQywgMHhDODJELCAweDBBODUsIDB4QzgyRSwgMHhDODJFLCAweDNBNUEsDQotICAgIDB4QzgyRiwgMHhDODJGLCAweDBBODcsIDB4QzgzMCwgMHhDODMwLCAweDNBNUIsIDB4QzgzMSwgMHhDODMxLCAweDBBODgsDQotICAgIDB4QzgzMiwgMHhDODM3LCAweDNBNUMsIDB4QzgzOCwgMHhDODM4LCAweDBBODksIDB4QzgzOSwgMHhDODNCLCAweDNBNjIsDQotICAgIDB4QzgzQywgMHhDODNDLCAweDBBOEEsIDB4QzgzRCwgMHhDODNGLCAweDNBNjUsIDB4Qzg0MCwgMHhDODQwLCAweDBBOEIsDQotICAgIDB4Qzg0MSwgMHhDODQ3LCAweDNBNjgsIDB4Qzg0OCwgMHhDODQ5LCAweDBBOEMsIDB4Qzg0QSwgMHhDODRCLCAweDNBNkYsDQotICAgIDB4Qzg0QywgMHhDODRELCAweDBBOEUsIDB4Qzg0RSwgMHhDODUzLCAweDNBNzEsIDB4Qzg1NCwgMHhDODU0LCAweDBBOTAsDQotICAgIDB4Qzg1NSwgMHhDODZGLCAweDNBNzcsIDB4Qzg3MCwgMHhDODcxLCAweDBBOTEsIDB4Qzg3MiwgMHhDODczLCAweDNBOTIsDQotICAgIDB4Qzg3NCwgMHhDODc0LCAweDBBOTMsIDB4Qzg3NSwgMHhDODc3LCAweDNBOTQsIDB4Qzg3OCwgMHhDODc4LCAweDBBOTQsDQotICAgIDB4Qzg3OSwgMHhDODc5LCAweDNBOTcsIDB4Qzg3QSwgMHhDODdBLCAweDBBOTUsIDB4Qzg3QiwgMHhDODdGLCAweDNBOTgsDQotICAgIDB4Qzg4MCwgMHhDODgxLCAweDBBOTYsIDB4Qzg4MiwgMHhDODgyLCAweDNBOUQsIDB4Qzg4MywgMHhDODgzLCAweDBBOTgsDQotICAgIDB4Qzg4NCwgMHhDODg0LCAweDNBOUUsIDB4Qzg4NSwgMHhDODg3LCAweDBBOTksIDB4Qzg4OCwgMHhDODhBLCAweDNBOUYsDQotICAgIDB4Qzg4QiwgMHhDODhELCAweDBBOUMsIDB4Qzg4RSwgMHhDODkzLCAweDNBQTIsIDB4Qzg5NCwgMHhDODk0LCAweDBBOUYsDQotICAgIDB4Qzg5NSwgMHhDODlDLCAweDNBQTgsIDB4Qzg5RCwgMHhDODlELCAweDBBQTAsIDB4Qzg5RSwgMHhDODlFLCAweDNBQjAsDQotICAgIDB4Qzg5RiwgMHhDODlGLCAweDBBQTEsIDB4QzhBMCwgMHhDOEEwLCAweDNBQjEsIDB4QzhBMSwgMHhDOEExLCAweDBBQTIsDQotICAgIDB4QzhBMiwgMHhDOEE3LCAweDNBQjIsIDB4QzhBOCwgMHhDOEE4LCAweDBBQTMsIDB4QzhBOSwgMHhDOEJCLCAweDNBQjgsDQotICAgIDB4QzhCQywgMHhDOEJELCAweDBBQTQsIDB4QzhCRSwgMHhDOEMzLCAweDNBQ0IsIDB4QzhDNCwgMHhDOEM0LCAweDBBQTYsDQotICAgIDB4QzhDNSwgMHhDOEM3LCAweDNBRDEsIDB4QzhDOCwgMHhDOEM4LCAweDBBQTcsIDB4QzhDOSwgMHhDOENCLCAweDNBRDQsDQotICAgIDB4QzhDQywgMHhDOENDLCAweDBBQTgsIDB4QzhDRCwgMHhDOEQzLCAweDNBRDcsIDB4QzhENCwgMHhDOEQ1LCAweDBBQTksDQotICAgIDB4QzhENiwgMHhDOEQ2LCAweDNBREUsIDB4QzhENywgMHhDOEQ3LCAweDBBQUIsIDB4QzhEOCwgMHhDOEQ4LCAweDNBREYsDQotICAgIDB4QzhEOSwgMHhDOEQ5LCAweDBBQUMsIDB4QzhEQSwgMHhDOERGLCAweDNBRTAsIDB4QzhFMCwgMHhDOEUxLCAweDBBQUQsDQotICAgIDB4QzhFMiwgMHhDOEUzLCAweDNBRTYsIDB4QzhFNCwgMHhDOEU0LCAweDBBQUYsIDB4QzhFNSwgMHhDOEY0LCAweDNBRTgsDQotICAgIDB4QzhGNSwgMHhDOEY1LCAweDBBQjAsIDB4QzhGNiwgMHhDOEZCLCAweDNBRjgsIDB4QzhGQywgMHhDOEZELCAweDBBQjEsDQotICAgIDB4QzhGRSwgMHhDOEZGLCAweDNBRkUsIDB4QzkwMCwgMHhDOTAwLCAweDBBQjMsIDB4QzkwMSwgMHhDOTAzLCAweDNCMDAsDQotICAgIDB4QzkwNCwgMHhDOTA2LCAweDBBQjQsIDB4QzkwNywgMHhDOTBCLCAweDNCMDMsIDB4QzkwQywgMHhDOTBELCAweDBBQjcsDQotICAgIDB4QzkwRSwgMHhDOTBFLCAweDNCMDgsIDB4QzkwRiwgMHhDOTBGLCAweDBBQjksIDB4QzkxMCwgMHhDOTEwLCAweDNCMDksDQotICAgIDB4QzkxMSwgMHhDOTExLCAweDBBQkEsIDB4QzkxMiwgMHhDOTE3LCAweDNCMEEsIDB4QzkxOCwgMHhDOTE4LCAweDBBQkIsDQotICAgIDB4QzkxOSwgMHhDOTJCLCAweDNCMTAsIDB4QzkyQywgMHhDOTJDLCAweDBBQkMsIDB4QzkyRCwgMHhDOTMzLCAweDNCMjMsDQotICAgIDB4QzkzNCwgMHhDOTM0LCAweDBBQkQsIDB4QzkzNSwgMHhDOTRGLCAweDNCMkEsIDB4Qzk1MCwgMHhDOTUxLCAweDBBQkUsDQotICAgIDB4Qzk1MiwgMHhDOTUzLCAweDNCNDUsIDB4Qzk1NCwgMHhDOTU0LCAweDBBQzAsIDB4Qzk1NSwgMHhDOTU3LCAweDNCNDcsDQotICAgIDB4Qzk1OCwgMHhDOTU4LCAweDBBQzEsIDB4Qzk1OSwgMHhDOTVGLCAweDNCNEEsIDB4Qzk2MCwgMHhDOTYxLCAweDBBQzIsDQotICAgIDB4Qzk2MiwgMHhDOTYyLCAweDNCNTEsIDB4Qzk2MywgMHhDOTYzLCAweDBBQzQsIDB4Qzk2NCwgMHhDOTZCLCAweDNCNTIsDQotICAgIDB4Qzk2QywgMHhDOTZDLCAweDBBQzUsIDB4Qzk2RCwgMHhDOTZGLCAweDNCNUEsIDB4Qzk3MCwgMHhDOTcwLCAweDBBQzYsDQotICAgIDB4Qzk3MSwgMHhDOTczLCAweDNCNUQsIDB4Qzk3NCwgMHhDOTc0LCAweDBBQzcsIDB4Qzk3NSwgMHhDOTdCLCAweDNCNjAsDQotICAgIDB4Qzk3QywgMHhDOTdDLCAweDBBQzgsIDB4Qzk3RCwgMHhDOTg3LCAweDNCNjcsIDB4Qzk4OCwgMHhDOTg5LCAweDBBQzksDQotICAgIDB4Qzk4QSwgMHhDOThCLCAweDNCNzIsIDB4Qzk4QywgMHhDOThDLCAweDBBQ0IsIDB4Qzk4RCwgMHhDOThGLCAweDNCNzQsDQotICAgIDB4Qzk5MCwgMHhDOTkwLCAweDBBQ0MsIDB4Qzk5MSwgMHhDOTk3LCAweDNCNzcsIDB4Qzk5OCwgMHhDOTk5LCAweDBBQ0QsDQotICAgIDB4Qzk5QSwgMHhDOTlBLCAweDNCN0UsIDB4Qzk5QiwgMHhDOTlCLCAweDBBQ0YsIDB4Qzk5QywgMHhDOTlDLCAweDNCN0YsDQotICAgIDB4Qzk5RCwgMHhDOTlELCAweDBBRDAsIDB4Qzk5RSwgMHhDOUJGLCAweDNCODAsIDB4QzlDMCwgMHhDOUMxLCAweDBBRDEsDQotICAgIDB4QzlDMiwgMHhDOUMzLCAweDNCQTIsIDB4QzlDNCwgMHhDOUM0LCAweDBBRDMsIDB4QzlDNSwgMHhDOUM2LCAweDNCQTQsDQotICAgIDB4QzlDNywgMHhDOUM4LCAweDBBRDQsIDB4QzlDOSwgMHhDOUM5LCAweDNCQTYsIDB4QzlDQSwgMHhDOUNBLCAweDBBRDYsDQotICAgIDB4QzlDQiwgMHhDOUNGLCAweDNCQTcsIDB4QzlEMCwgMHhDOUQxLCAweDBBRDcsIDB4QzlEMiwgMHhDOUQyLCAweDNCQUMsDQotICAgIDB4QzlEMywgMHhDOUQzLCAweDBBRDksIDB4QzlENCwgMHhDOUQ0LCAweDNCQUQsIDB4QzlENSwgMHhDOUQ2LCAweDBBREEsDQotICAgIDB4QzlENywgMHhDOUQ4LCAweDNCQUUsIDB4QzlEOSwgMHhDOURBLCAweDBBREMsIDB4QzlEQiwgMHhDOURCLCAweDNCQjAsDQotICAgIDB4QzlEQywgMHhDOURELCAweDBBREUsIDB4QzlERSwgMHhDOURGLCAweDNCQjEsIDB4QzlFMCwgMHhDOUUwLCAweDBBRTAsDQotICAgIDB4QzlFMSwgMHhDOUUxLCAweDNCQjMsIDB4QzlFMiwgMHhDOUUyLCAweDBBRTEsIDB4QzlFMywgMHhDOUUzLCAweDNCQjQsDQotICAgIDB4QzlFNCwgMHhDOUU0LCAweDBBRTIsIDB4QzlFNSwgMHhDOUU2LCAweDNCQjUsIDB4QzlFNywgMHhDOUU3LCAweDBBRTMsDQotICAgIDB4QzlFOCwgMHhDOUVCLCAweDNCQjcsIDB4QzlFQywgMHhDOUVELCAweDBBRTQsIDB4QzlFRSwgMHhDOUVFLCAweDNCQkIsDQotICAgIDB4QzlFRiwgMHhDOUYxLCAweDBBRTYsIDB4QzlGMiwgMHhDOUY3LCAweDNCQkMsIDB4QzlGOCwgMHhDOUY5LCAweDBBRTksDQotICAgIDB4QzlGQSwgMHhDOUZCLCAweDNCQzIsIDB4QzlGQywgMHhDOUZDLCAweDBBRUIsIDB4QzlGRCwgMHhDOUZGLCAweDNCQzQsDQotICAgIDB4Q0EwMCwgMHhDQTAwLCAweDBBRUMsIDB4Q0EwMSwgMHhDQTA3LCAweDNCQzcsIDB4Q0EwOCwgMHhDQTA5LCAweDBBRUQsDQotICAgIDB4Q0EwQSwgMHhDQTBBLCAweDNCQ0UsIDB4Q0EwQiwgMHhDQTBELCAweDBBRUYsIDB4Q0EwRSwgMHhDQTEzLCAweDNCQ0YsDQotICAgIDB4Q0ExNCwgMHhDQTE0LCAweDBBRjIsIDB4Q0ExNSwgMHhDQTE3LCAweDNCRDUsIDB4Q0ExOCwgMHhDQTE4LCAweDBBRjMsDQotICAgIDB4Q0ExOSwgMHhDQTI4LCAweDNCRDgsIDB4Q0EyOSwgMHhDQTI5LCAweDBBRjQsIDB4Q0EyQSwgMHhDQTRCLCAweDNCRTgsDQotICAgIDB4Q0E0QywgMHhDQTRELCAweDBBRjUsIDB4Q0E0RSwgMHhDQTRGLCAweDNDMEEsIDB4Q0E1MCwgMHhDQTUwLCAweDBBRjcsDQotICAgIDB4Q0E1MSwgMHhDQTUzLCAweDNDMEMsIDB4Q0E1NCwgMHhDQTU0LCAweDBBRjgsIDB4Q0E1NSwgMHhDQTVCLCAweDNDMEYsDQotICAgIDB4Q0E1QywgMHhDQTVELCAweDBBRjksIDB4Q0E1RSwgMHhDQTVFLCAweDNDMTYsIDB4Q0E1RiwgMHhDQTYxLCAweDBBRkIsDQotICAgIDB4Q0E2MiwgMHhDQTY3LCAweDNDMTcsIDB4Q0E2OCwgMHhDQTY4LCAweDBBRkUsIDB4Q0E2OSwgMHhDQTdDLCAweDNDMUQsDQotICAgIDB4Q0E3RCwgMHhDQTdELCAweDBBRkYsIDB4Q0E3RSwgMHhDQTgzLCAweDNDMzEsIDB4Q0E4NCwgMHhDQTg0LCAweDBCMDAsDQotICAgIDB4Q0E4NSwgMHhDQTk3LCAweDNDMzcsIDB4Q0E5OCwgMHhDQTk4LCAweDBCMDEsIDB4Q0E5OSwgMHhDQUJCLCAweDNDNEEsDQotICAgIDB4Q0FCQywgMHhDQUJELCAweDBCMDIsIDB4Q0FCRSwgMHhDQUJGLCAweDNDNkQsIDB4Q0FDMCwgMHhDQUMwLCAweDBCMDQsDQotICAgIDB4Q0FDMSwgMHhDQUMzLCAweDNDNkYsIDB4Q0FDNCwgMHhDQUM0LCAweDBCMDUsIDB4Q0FDNSwgMHhDQUNCLCAweDNDNzIsDQotICAgIDB4Q0FDQywgMHhDQUNELCAweDBCMDYsIDB4Q0FDRSwgMHhDQUNFLCAweDNDNzksIDB4Q0FDRiwgMHhDQUNGLCAweDBCMDgsDQotICAgIDB4Q0FEMCwgMHhDQUQwLCAweDNDN0EsIDB4Q0FEMSwgMHhDQUQxLCAweDBCMDksIDB4Q0FEMiwgMHhDQUQyLCAweDNDN0IsDQotICAgIDB4Q0FEMywgMHhDQUQzLCAweDBCMEEsIDB4Q0FENCwgMHhDQUQ3LCAweDNDN0MsIDB4Q0FEOCwgMHhDQUQ5LCAweDBCMEIsDQotICAgIDB4Q0FEQSwgMHhDQURGLCAweDNDODAsIDB4Q0FFMCwgMHhDQUUwLCAweDBCMEQsIDB4Q0FFMSwgMHhDQUVCLCAweDNDODYsDQotICAgIDB4Q0FFQywgMHhDQUVDLCAweDBCMEUsIDB4Q0FFRCwgMHhDQUYzLCAweDNDOTEsIDB4Q0FGNCwgMHhDQUY0LCAweDBCMEYsDQotICAgIDB4Q0FGNSwgMHhDQUZGLCAweDNDOTgsIDB4Q0IwMCwgMHhDQjA3LCAweDNDQTMsIDB4Q0IwOCwgMHhDQjA4LCAweDBCMTAsDQotICAgIDB4Q0IwOSwgMHhDQjBGLCAweDNDQUIsIDB4Q0IxMCwgMHhDQjEwLCAweDBCMTEsIDB4Q0IxMSwgMHhDQjEzLCAweDNDQjIsDQotICAgIDB4Q0IxNCwgMHhDQjE0LCAweDBCMTIsIDB4Q0IxNSwgMHhDQjE3LCAweDNDQjUsIDB4Q0IxOCwgMHhDQjE4LCAweDBCMTMsDQotICAgIDB4Q0IxOSwgMHhDQjFGLCAweDNDQjgsIDB4Q0IyMCwgMHhDQjIxLCAweDBCMTQsIDB4Q0IyMiwgMHhDQjQwLCAweDNDQkYsDQotICAgIDB4Q0I0MSwgMHhDQjQxLCAweDBCMTYsIDB4Q0I0MiwgMHhDQjQ3LCAweDNDREUsIDB4Q0I0OCwgMHhDQjQ5LCAweDBCMTcsDQotICAgIDB4Q0I0QSwgMHhDQjRCLCAweDNDRTQsIDB4Q0I0QywgMHhDQjRDLCAweDBCMTksIDB4Q0I0RCwgMHhDQjRGLCAweDNDRTYsDQotICAgIDB4Q0I1MCwgMHhDQjUwLCAweDBCMUEsIDB4Q0I1MSwgMHhDQjU3LCAweDNDRTksIDB4Q0I1OCwgMHhDQjU5LCAweDBCMUIsDQotICAgIDB4Q0I1QSwgMHhDQjVDLCAweDNDRjAsIDB4Q0I1RCwgMHhDQjVELCAweDBCMUQsIDB4Q0I1RSwgMHhDQjYzLCAweDNDRjMsDQotICAgIDB4Q0I2NCwgMHhDQjY0LCAweDBCMUUsIDB4Q0I2NSwgMHhDQjc3LCAweDNDRjksIDB4Q0I3OCwgMHhDQjc5LCAweDBCMUYsDQotICAgIDB4Q0I3QSwgMHhDQjlCLCAweDNEMEMsIDB4Q0I5QywgMHhDQjlDLCAweDBCMjEsIDB4Q0I5RCwgMHhDQkI3LCAweDNEMkUsDQotICAgIDB4Q0JCOCwgMHhDQkI4LCAweDBCMjIsIDB4Q0JCOSwgMHhDQkQzLCAweDNENDksIDB4Q0JENCwgMHhDQkQ0LCAweDBCMjMsDQotICAgIDB4Q0JENSwgMHhDQkUzLCAweDNENjQsIDB4Q0JFNCwgMHhDQkU0LCAweDBCMjQsIDB4Q0JFNSwgMHhDQkU2LCAweDNENzMsDQotICAgIDB4Q0JFNywgMHhDQkU3LCAweDBCMjUsIDB4Q0JFOCwgMHhDQkU4LCAweDNENzUsIDB4Q0JFOSwgMHhDQkU5LCAweDBCMjYsDQotICAgIDB4Q0JFQSwgMHhDQkZGLCAweDNENzYsIDB4Q0MwMCwgMHhDQzBCLCAweDNEOEMsIDB4Q0MwQywgMHhDQzBELCAweDBCMjcsDQotICAgIDB4Q0MwRSwgMHhDQzBGLCAweDNEOTgsIDB4Q0MxMCwgMHhDQzEwLCAweDBCMjksIDB4Q0MxMSwgMHhDQzEzLCAweDNEOUEsDQotICAgIDB4Q0MxNCwgMHhDQzE0LCAweDBCMkEsIDB4Q0MxNSwgMHhDQzFCLCAweDNEOUQsIDB4Q0MxQywgMHhDQzFELCAweDBCMkIsDQotICAgIDB4Q0MxRSwgMHhDQzIwLCAweDNEQTQsIDB4Q0MyMSwgMHhDQzIyLCAweDBCMkQsIDB4Q0MyMywgMHhDQzI2LCAweDNEQTcsDQotICAgIDB4Q0MyNywgMHhDQzI5LCAweDBCMkYsIDB4Q0MyQSwgMHhDQzJCLCAweDNEQUIsIDB4Q0MyQywgMHhDQzJDLCAweDBCMzIsDQotICAgIDB4Q0MyRCwgMHhDQzJELCAweDNEQUQsIDB4Q0MyRSwgMHhDQzJFLCAweDBCMzMsIDB4Q0MyRiwgMHhDQzJGLCAweDNEQUUsDQotICAgIDB4Q0MzMCwgMHhDQzMwLCAweDBCMzQsIDB4Q0MzMSwgMHhDQzM3LCAweDNEQUYsIDB4Q0MzOCwgMHhDQzM5LCAweDBCMzUsDQotICAgIDB4Q0MzQSwgMHhDQzNBLCAweDNEQjYsIDB4Q0MzQiwgMHhDQzNFLCAweDBCMzcsIDB4Q0MzRiwgMHhDQzQzLCAweDNEQjcsDQotICAgIDB4Q0M0NCwgMHhDQzQ1LCAweDBCM0IsIDB4Q0M0NiwgMHhDQzQ3LCAweDNEQkMsIDB4Q0M0OCwgMHhDQzQ4LCAweDBCM0QsDQotICAgIDB4Q0M0OSwgMHhDQzRCLCAweDNEQkUsIDB4Q0M0QywgMHhDQzRDLCAweDBCM0UsIDB4Q0M0RCwgMHhDQzUzLCAweDNEQzEsDQotICAgIDB4Q0M1NCwgMHhDQzU1LCAweDBCM0YsIDB4Q0M1NiwgMHhDQzU2LCAweDNEQzgsIDB4Q0M1NywgMHhDQzU5LCAweDBCNDEsDQotICAgIDB4Q0M1QSwgMHhDQzVGLCAweDNEQzksIDB4Q0M2MCwgMHhDQzYwLCAweDBCNDQsIDB4Q0M2MSwgMHhDQzYzLCAweDNEQ0YsDQotICAgIDB4Q0M2NCwgMHhDQzY0LCAweDBCNDUsIDB4Q0M2NSwgMHhDQzY1LCAweDNERDIsIDB4Q0M2NiwgMHhDQzY2LCAweDBCNDYsDQotICAgIDB4Q0M2NywgMHhDQzY3LCAweDNERDMsIDB4Q0M2OCwgMHhDQzY4LCAweDBCNDcsIDB4Q0M2OSwgMHhDQzZGLCAweDNERDQsDQotICAgIDB4Q0M3MCwgMHhDQzcwLCAweDBCNDgsIDB4Q0M3MSwgMHhDQzc0LCAweDNEREIsIDB4Q0M3NSwgMHhDQzc1LCAweDBCNDksDQotICAgIDB4Q0M3NiwgMHhDQzk3LCAweDNEREYsIDB4Q0M5OCwgMHhDQzk5LCAweDBCNEEsIDB4Q0M5QSwgMHhDQzlCLCAweDNFMDEsDQotICAgIDB4Q0M5QywgMHhDQzlDLCAweDBCNEMsIDB4Q0M5RCwgMHhDQzlGLCAweDNFMDMsIDB4Q0NBMCwgMHhDQ0EwLCAweDBCNEQsDQotICAgIDB4Q0NBMSwgMHhDQ0E3LCAweDNFMDYsIDB4Q0NBOCwgMHhDQ0E5LCAweDBCNEUsIDB4Q0NBQSwgMHhDQ0FBLCAweDNFMEQsDQotICAgIDB4Q0NBQiwgMHhDQ0FELCAweDBCNTAsIDB4Q0NBRSwgMHhDQ0IzLCAweDNFMEUsIDB4Q0NCNCwgMHhDQ0I1LCAweDBCNTMsDQotICAgIDB4Q0NCNiwgMHhDQ0I3LCAweDNFMTQsIDB4Q0NCOCwgMHhDQ0I4LCAweDBCNTUsIDB4Q0NCOSwgMHhDQ0JCLCAweDNFMTYsDQotICAgIDB4Q0NCQywgMHhDQ0JDLCAweDBCNTYsIDB4Q0NCRCwgMHhDQ0MzLCAweDNFMTksIDB4Q0NDNCwgMHhDQ0M1LCAweDBCNTcsDQotICAgIDB4Q0NDNiwgMHhDQ0M2LCAweDNFMjAsIDB4Q0NDNywgMHhDQ0M3LCAweDBCNTksIDB4Q0NDOCwgMHhDQ0M4LCAweDNFMjEsDQotICAgIDB4Q0NDOSwgMHhDQ0M5LCAweDBCNUEsIDB4Q0NDQSwgMHhDQ0NGLCAweDNFMjIsIDB4Q0NEMCwgMHhDQ0QwLCAweDBCNUIsDQotICAgIDB4Q0NEMSwgMHhDQ0QzLCAweDNFMjgsIDB4Q0NENCwgMHhDQ0Q0LCAweDBCNUMsIDB4Q0NENSwgMHhDQ0UzLCAweDNFMkIsDQotICAgIDB4Q0NFNCwgMHhDQ0U0LCAweDBCNUQsIDB4Q0NFNSwgMHhDQ0VCLCAweDNFM0EsIDB4Q0NFQywgMHhDQ0VDLCAweDBCNUUsDQotICAgIDB4Q0NFRCwgMHhDQ0VGLCAweDNFNDEsIDB4Q0NGMCwgMHhDQ0YwLCAweDBCNUYsIDB4Q0NGMSwgMHhDQ0ZGLCAweDNFNDQsDQotICAgIDB4Q0QwMCwgMHhDRDAwLCAweDNFNTMsIDB4Q0QwMSwgMHhDRDAxLCAweDBCNjAsIDB4Q0QwMiwgMHhDRDA3LCAweDNFNTQsDQotICAgIDB4Q0QwOCwgMHhDRDA5LCAweDBCNjEsIDB4Q0QwQSwgMHhDRDBCLCAweDNFNUEsIDB4Q0QwQywgMHhDRDBDLCAweDBCNjMsDQotICAgIDB4Q0QwRCwgMHhDRDBGLCAweDNFNUMsIDB4Q0QxMCwgMHhDRDEwLCAweDBCNjQsIDB4Q0QxMSwgMHhDRDE3LCAweDNFNUYsDQotICAgIDB4Q0QxOCwgMHhDRDE5LCAweDBCNjUsIDB4Q0QxQSwgMHhDRDFBLCAweDNFNjYsIDB4Q0QxQiwgMHhDRDFCLCAweDBCNjcsDQotICAgIDB4Q0QxQywgMHhDRDFDLCAweDNFNjcsIDB4Q0QxRCwgMHhDRDFELCAweDBCNjgsIDB4Q0QxRSwgMHhDRDIzLCAweDNFNjgsDQotICAgIDB4Q0QyNCwgMHhDRDI0LCAweDBCNjksIDB4Q0QyNSwgMHhDRDI3LCAweDNFNkUsIDB4Q0QyOCwgMHhDRDI4LCAweDBCNkEsDQotICAgIDB4Q0QyOSwgMHhDRDJCLCAweDNFNzEsIDB4Q0QyQywgMHhDRDJDLCAweDBCNkIsIDB4Q0QyRCwgMHhDRDM4LCAweDNFNzQsDQotICAgIDB4Q0QzOSwgMHhDRDM5LCAweDBCNkMsIDB4Q0QzQSwgMHhDRDVCLCAweDNFODAsIDB4Q0Q1QywgMHhDRDVDLCAweDBCNkQsDQotICAgIDB4Q0Q1RCwgMHhDRDVGLCAweDNFQTIsIDB4Q0Q2MCwgMHhDRDYwLCAweDBCNkUsIDB4Q0Q2MSwgMHhDRDYzLCAweDNFQTUsDQotICAgIDB4Q0Q2NCwgMHhDRDY0LCAweDBCNkYsIDB4Q0Q2NSwgMHhDRDZCLCAweDNFQTgsIDB4Q0Q2QywgMHhDRDZELCAweDBCNzAsDQotICAgIDB4Q0Q2RSwgMHhDRDZFLCAweDNFQUYsIDB4Q0Q2RiwgMHhDRDZGLCAweDBCNzIsIDB4Q0Q3MCwgMHhDRDcwLCAweDNFQjAsDQotICAgIDB4Q0Q3MSwgMHhDRDcxLCAweDBCNzMsIDB4Q0Q3MiwgMHhDRDc3LCAweDNFQjEsIDB4Q0Q3OCwgMHhDRDc4LCAweDBCNzQsDQotICAgIDB4Q0Q3OSwgMHhDRDg3LCAweDNFQjcsIDB4Q0Q4OCwgMHhDRDg4LCAweDBCNzUsIDB4Q0Q4OSwgMHhDRDkzLCAweDNFQzYsDQotICAgIDB4Q0Q5NCwgMHhDRDk1LCAweDBCNzYsIDB4Q0Q5NiwgMHhDRDk3LCAweDNFRDEsIDB4Q0Q5OCwgMHhDRDk4LCAweDBCNzgsDQotICAgIDB4Q0Q5OSwgMHhDRDlCLCAweDNFRDMsIDB4Q0Q5QywgMHhDRDlDLCAweDBCNzksIDB4Q0Q5RCwgMHhDREEzLCAweDNFRDYsDQotICAgIDB4Q0RBNCwgMHhDREE1LCAweDBCN0EsIDB4Q0RBNiwgMHhDREE2LCAweDNFREQsIDB4Q0RBNywgMHhDREE3LCAweDBCN0MsDQotICAgIDB4Q0RBOCwgMHhDREE4LCAweDNFREUsIDB4Q0RBOSwgMHhDREE5LCAweDBCN0QsIDB4Q0RBQSwgMHhDREFGLCAweDNFREYsDQotICAgIDB4Q0RCMCwgMHhDREIwLCAweDBCN0UsIDB4Q0RCMSwgMHhDREMzLCAweDNFRTUsIDB4Q0RDNCwgMHhDREM0LCAweDBCN0YsDQotICAgIDB4Q0RDNSwgMHhDRENCLCAweDNFRjgsIDB4Q0RDQywgMHhDRENDLCAweDBCODAsIDB4Q0RDRCwgMHhDRENGLCAweDNFRkYsDQotICAgIDB4Q0REMCwgMHhDREQwLCAweDBCODEsIDB4Q0REMSwgMHhDREU3LCAweDNGMDIsIDB4Q0RFOCwgMHhDREU4LCAweDBCODIsDQotICAgIDB4Q0RFOSwgMHhDREVCLCAweDNGMTksIDB4Q0RFQywgMHhDREVDLCAweDBCODMsIDB4Q0RFRCwgMHhDREVGLCAweDNGMUMsDQotICAgIDB4Q0RGMCwgMHhDREYwLCAweDBCODQsIDB4Q0RGMSwgMHhDREY3LCAweDNGMUYsIDB4Q0RGOCwgMHhDREY5LCAweDBCODUsDQotICAgIDB4Q0RGQSwgMHhDREZBLCAweDNGMjYsIDB4Q0RGQiwgMHhDREZCLCAweDBCODcsIDB4Q0RGQywgMHhDREZDLCAweDNGMjcsDQotICAgIDB4Q0RGRCwgMHhDREZELCAweDBCODgsIDB4Q0RGRSwgMHhDREZGLCAweDNGMjgsIDB4Q0UwMCwgMHhDRTAzLCAweDNGMkEsDQotICAgIDB4Q0UwNCwgMHhDRTA0LCAweDBCODksIDB4Q0UwNSwgMHhDRTA3LCAweDNGMkUsIDB4Q0UwOCwgMHhDRTA4LCAweDBCOEEsDQotICAgIDB4Q0UwOSwgMHhDRTBCLCAweDNGMzEsIDB4Q0UwQywgMHhDRTBDLCAweDBCOEIsIDB4Q0UwRCwgMHhDRTEzLCAweDNGMzQsDQotICAgIDB4Q0UxNCwgMHhDRTE0LCAweDBCOEMsIDB4Q0UxNSwgMHhDRTE4LCAweDNGM0IsIDB4Q0UxOSwgMHhDRTE5LCAweDBCOEQsDQotICAgIDB4Q0UxQSwgMHhDRTFGLCAweDNGM0YsIDB4Q0UyMCwgMHhDRTIxLCAweDBCOEUsIDB4Q0UyMiwgMHhDRTIzLCAweDNGNDUsDQotICAgIDB4Q0UyNCwgMHhDRTI0LCAweDBCOTAsIDB4Q0UyNSwgMHhDRTI3LCAweDNGNDcsIDB4Q0UyOCwgMHhDRTI4LCAweDBCOTEsDQotICAgIDB4Q0UyOSwgMHhDRTJGLCAweDNGNEEsIDB4Q0UzMCwgMHhDRTMxLCAweDBCOTIsIDB4Q0UzMiwgMHhDRTMyLCAweDNGNTEsDQotICAgIDB4Q0UzMywgMHhDRTMzLCAweDBCOTQsIDB4Q0UzNCwgMHhDRTM0LCAweDNGNTIsIDB4Q0UzNSwgMHhDRTM1LCAweDBCOTUsDQotICAgIDB4Q0UzNiwgMHhDRTU3LCAweDNGNTMsIDB4Q0U1OCwgMHhDRTU5LCAweDBCOTYsIDB4Q0U1QSwgMHhDRTVCLCAweDNGNzUsDQotICAgIDB4Q0U1QywgMHhDRTVDLCAweDBCOTgsIDB4Q0U1RCwgMHhDRTVFLCAweDNGNzcsIDB4Q0U1RiwgMHhDRTYxLCAweDBCOTksDQotICAgIDB4Q0U2MiwgMHhDRTY3LCAweDNGNzksIDB4Q0U2OCwgMHhDRTY5LCAweDBCOUMsIDB4Q0U2QSwgMHhDRTZBLCAweDNGN0YsDQotICAgIDB4Q0U2QiwgMHhDRTZCLCAweDBCOUUsIDB4Q0U2QywgMHhDRTZDLCAweDNGODAsIDB4Q0U2RCwgMHhDRTZELCAweDBCOUYsDQotICAgIDB4Q0U2RSwgMHhDRTczLCAweDNGODEsIDB4Q0U3NCwgMHhDRTc1LCAweDBCQTAsIDB4Q0U3NiwgMHhDRTc3LCAweDNGODcsDQotICAgIDB4Q0U3OCwgMHhDRTc4LCAweDBCQTIsIDB4Q0U3OSwgMHhDRTdCLCAweDNGODksIDB4Q0U3QywgMHhDRTdDLCAweDBCQTMsDQotICAgIDB4Q0U3RCwgMHhDRTgzLCAweDNGOEMsIDB4Q0U4NCwgMHhDRTg1LCAweDBCQTQsIDB4Q0U4NiwgMHhDRTg2LCAweDNGOTMsDQotICAgIDB4Q0U4NywgMHhDRTg3LCAweDBCQTYsIDB4Q0U4OCwgMHhDRTg4LCAweDNGOTQsIDB4Q0U4OSwgMHhDRTg5LCAweDBCQTcsDQotICAgIDB4Q0U4QSwgMHhDRThGLCAweDNGOTUsIDB4Q0U5MCwgMHhDRTkxLCAweDBCQTgsIDB4Q0U5MiwgMHhDRTkzLCAweDNGOUIsDQotICAgIDB4Q0U5NCwgMHhDRTk0LCAweDBCQUEsIDB4Q0U5NSwgMHhDRTk3LCAweDNGOUQsIDB4Q0U5OCwgMHhDRTk4LCAweDBCQUIsDQotICAgIDB4Q0U5OSwgMHhDRTlGLCAweDNGQTAsIDB4Q0VBMCwgMHhDRUExLCAweDBCQUMsIDB4Q0VBMiwgMHhDRUEyLCAweDNGQTcsDQotICAgIDB4Q0VBMywgMHhDRUE1LCAweDBCQUUsIDB4Q0VBNiwgMHhDRUFCLCAweDNGQTgsIDB4Q0VBQywgMHhDRUFELCAweDBCQjEsDQotICAgIDB4Q0VBRSwgMHhDRUMwLCAweDNGQUUsIDB4Q0VDMSwgMHhDRUMxLCAweDBCQjMsIDB4Q0VDMiwgMHhDRUUzLCAweDNGQzEsDQotICAgIDB4Q0VFNCwgMHhDRUU1LCAweDBCQjQsIDB4Q0VFNiwgMHhDRUU3LCAweDNGRTMsIDB4Q0VFOCwgMHhDRUU4LCAweDBCQjYsDQotICAgIDB4Q0VFOSwgMHhDRUVBLCAweDNGRTUsIDB4Q0VFQiwgMHhDRUVDLCAweDBCQjcsIDB4Q0VFRCwgMHhDRUYzLCAweDNGRTcsDQotICAgIDB4Q0VGNCwgMHhDRUY1LCAweDBCQjksIDB4Q0VGNiwgMHhDRUY2LCAweDNGRUUsIDB4Q0VGNywgMHhDRUY5LCAweDBCQkIsDQotICAgIDB4Q0VGQSwgMHhDRUZGLCAweDNGRUYsIDB4Q0YwMCwgMHhDRjAxLCAweDBCQkUsIDB4Q0YwMiwgMHhDRjAzLCAweDNGRjUsDQotICAgIDB4Q0YwNCwgMHhDRjA0LCAweDBCQzAsIDB4Q0YwNSwgMHhDRjA3LCAweDNGRjcsIDB4Q0YwOCwgMHhDRjA4LCAweDBCQzEsDQotICAgIDB4Q0YwOSwgMHhDRjBGLCAweDNGRkEsIDB4Q0YxMCwgMHhDRjExLCAweDBCQzIsIDB4Q0YxMiwgMHhDRjEyLCAweDQwMDEsDQotICAgIDB4Q0YxMywgMHhDRjEzLCAweDBCQzQsIDB4Q0YxNCwgMHhDRjE0LCAweDQwMDIsIDB4Q0YxNSwgMHhDRjE1LCAweDBCQzUsDQotICAgIDB4Q0YxNiwgMHhDRjFCLCAweDQwMDMsIDB4Q0YxQywgMHhDRjFDLCAweDBCQzYsIDB4Q0YxRCwgMHhDRjFGLCAweDQwMDksDQotICAgIDB4Q0YyMCwgMHhDRjIwLCAweDBCQzcsIDB4Q0YyMSwgMHhDRjIzLCAweDQwMEMsIDB4Q0YyNCwgMHhDRjI0LCAweDBCQzgsDQotICAgIDB4Q0YyNSwgMHhDRjJCLCAweDQwMEYsIDB4Q0YyQywgMHhDRjJELCAweDBCQzksIDB4Q0YyRSwgMHhDRjJFLCAweDQwMTYsDQotICAgIDB4Q0YyRiwgMHhDRjMxLCAweDBCQ0IsIDB4Q0YzMiwgMHhDRjM3LCAweDQwMTcsIDB4Q0YzOCwgMHhDRjM4LCAweDBCQ0UsDQotICAgIDB4Q0YzOSwgMHhDRjUzLCAweDQwMUQsIDB4Q0Y1NCwgMHhDRjU1LCAweDBCQ0YsIDB4Q0Y1NiwgMHhDRjU3LCAweDQwMzgsDQotICAgIDB4Q0Y1OCwgMHhDRjU4LCAweDBCRDEsIDB4Q0Y1OSwgMHhDRjVCLCAweDQwM0EsIDB4Q0Y1QywgMHhDRjVDLCAweDBCRDIsDQotICAgIDB4Q0Y1RCwgMHhDRjYzLCAweDQwM0QsIDB4Q0Y2NCwgMHhDRjY1LCAweDBCRDMsIDB4Q0Y2NiwgMHhDRjY2LCAweDQwNDQsDQotICAgIDB4Q0Y2NywgMHhDRjY3LCAweDBCRDUsIDB4Q0Y2OCwgMHhDRjY4LCAweDQwNDUsIDB4Q0Y2OSwgMHhDRjY5LCAweDBCRDYsDQotICAgIDB4Q0Y2QSwgMHhDRjZGLCAweDQwNDYsIDB4Q0Y3MCwgMHhDRjcxLCAweDBCRDcsIDB4Q0Y3MiwgMHhDRjczLCAweDQwNEMsDQotICAgIDB4Q0Y3NCwgMHhDRjc0LCAweDBCRDksIDB4Q0Y3NSwgMHhDRjc3LCAweDQwNEUsIDB4Q0Y3OCwgMHhDRjc4LCAweDBCREEsDQotICAgIDB4Q0Y3OSwgMHhDRjdGLCAweDQwNTEsIDB4Q0Y4MCwgMHhDRjgwLCAweDBCREIsIDB4Q0Y4MSwgMHhDRjg0LCAweDQwNTgsDQotICAgIDB4Q0Y4NSwgMHhDRjg1LCAweDBCREMsIDB4Q0Y4NiwgMHhDRjhCLCAweDQwNUMsIDB4Q0Y4QywgMHhDRjhDLCAweDBCREQsDQotICAgIDB4Q0Y4RCwgMHhDRkEwLCAweDQwNjIsIDB4Q0ZBMSwgMHhDRkExLCAweDBCREUsIDB4Q0ZBMiwgMHhDRkE3LCAweDQwNzYsDQotICAgIDB4Q0ZBOCwgMHhDRkE4LCAweDBCREYsIDB4Q0ZBOSwgMHhDRkFGLCAweDQwN0MsIDB4Q0ZCMCwgMHhDRkIwLCAweDBCRTAsDQotICAgIDB4Q0ZCMSwgMHhDRkMzLCAweDQwODMsIDB4Q0ZDNCwgMHhDRkM0LCAweDBCRTEsIDB4Q0ZDNSwgMHhDRkRGLCAweDQwOTYsDQotICAgIDB4Q0ZFMCwgMHhDRkUxLCAweDBCRTIsIDB4Q0ZFMiwgMHhDRkUzLCAweDQwQjEsIDB4Q0ZFNCwgMHhDRkU0LCAweDBCRTQsDQotICAgIDB4Q0ZFNSwgMHhDRkU3LCAweDQwQjMsIDB4Q0ZFOCwgMHhDRkU4LCAweDBCRTUsIDB4Q0ZFOSwgMHhDRkVGLCAweDQwQjYsDQotICAgIDB4Q0ZGMCwgMHhDRkYxLCAweDBCRTYsIDB4Q0ZGMiwgMHhDRkYyLCAweDQwQkQsIDB4Q0ZGMywgMHhDRkYzLCAweDBCRTgsDQotICAgIDB4Q0ZGNCwgMHhDRkY0LCAweDQwQkUsIDB4Q0ZGNSwgMHhDRkY1LCAweDBCRTksIDB4Q0ZGNiwgMHhDRkZCLCAweDQwQkYsDQotICAgIDB4Q0ZGQywgMHhDRkZDLCAweDBCRUEsIDB4Q0ZGRCwgMHhDRkZGLCAweDQwQzUsIDB4RDAwMCwgMHhEMDAwLCAweDBCRUIsDQotICAgIDB4RDAwMSwgMHhEMDAzLCAweDQwQzgsIDB4RDAwNCwgMHhEMDA0LCAweDBCRUMsIDB4RDAwNSwgMHhEMDEwLCAweDQwQ0IsDQotICAgIDB4RDAxMSwgMHhEMDExLCAweDBCRUQsIDB4RDAxMiwgMHhEMDE3LCAweDQwRDcsIDB4RDAxOCwgMHhEMDE4LCAweDBCRUUsDQotICAgIDB4RDAxOSwgMHhEMDJDLCAweDQwREQsIDB4RDAyRCwgMHhEMDJELCAweDBCRUYsIDB4RDAyRSwgMHhEMDMzLCAweDQwRjEsDQotICAgIDB4RDAzNCwgMHhEMDM1LCAweDBCRjAsIDB4RDAzNiwgMHhEMDM3LCAweDQwRjcsIDB4RDAzOCwgMHhEMDM4LCAweDBCRjIsDQotICAgIDB4RDAzOSwgMHhEMDNCLCAweDQwRjksIDB4RDAzQywgMHhEMDNDLCAweDBCRjMsIDB4RDAzRCwgMHhEMDQzLCAweDQwRkMsDQotICAgIDB4RDA0NCwgMHhEMDQ1LCAweDBCRjQsIDB4RDA0NiwgMHhEMDQ2LCAweDQxMDMsIDB4RDA0NywgMHhEMDQ3LCAweDBCRjYsDQotICAgIDB4RDA0OCwgMHhEMDQ4LCAweDQxMDQsIDB4RDA0OSwgMHhEMDQ5LCAweDBCRjcsIDB4RDA0QSwgMHhEMDRGLCAweDQxMDUsDQotICAgIDB4RDA1MCwgMHhEMDUwLCAweDBCRjgsIDB4RDA1MSwgMHhEMDUzLCAweDQxMEIsIDB4RDA1NCwgMHhEMDU0LCAweDBCRjksDQotICAgIDB4RDA1NSwgMHhEMDU3LCAweDQxMEUsIDB4RDA1OCwgMHhEMDU4LCAweDBCRkEsIDB4RDA1OSwgMHhEMDVGLCAweDQxMTEsDQotICAgIDB4RDA2MCwgMHhEMDYwLCAweDBCRkIsIDB4RDA2MSwgMHhEMDZCLCAweDQxMTgsIDB4RDA2QywgMHhEMDZELCAweDBCRkMsDQotICAgIDB4RDA2RSwgMHhEMDZGLCAweDQxMjMsIDB4RDA3MCwgMHhEMDcwLCAweDBCRkUsIDB4RDA3MSwgMHhEMDczLCAweDQxMjUsDQotICAgIDB4RDA3NCwgMHhEMDc0LCAweDBCRkYsIDB4RDA3NSwgMHhEMDdCLCAweDQxMjgsIDB4RDA3QywgMHhEMDdELCAweDBDMDAsDQotICAgIDB4RDA3RSwgMHhEMDgwLCAweDQxMkYsIDB4RDA4MSwgMHhEMDgxLCAweDBDMDIsIDB4RDA4MiwgMHhEMEEzLCAweDQxMzIsDQotICAgIDB4RDBBNCwgMHhEMEE1LCAweDBDMDMsIDB4RDBBNiwgMHhEMEE3LCAweDQxNTQsIDB4RDBBOCwgMHhEMEE4LCAweDBDMDUsDQotICAgIDB4RDBBOSwgMHhEMEFCLCAweDQxNTYsIDB4RDBBQywgMHhEMEFDLCAweDBDMDYsIDB4RDBBRCwgMHhEMEIzLCAweDQxNTksDQotICAgIDB4RDBCNCwgMHhEMEI1LCAweDBDMDcsIDB4RDBCNiwgMHhEMEI2LCAweDQxNjAsIDB4RDBCNywgMHhEMEI3LCAweDBDMDksDQotICAgIDB4RDBCOCwgMHhEMEI4LCAweDQxNjEsIDB4RDBCOSwgMHhEMEI5LCAweDBDMEEsIDB4RDBCQSwgMHhEMEJGLCAweDQxNjIsDQotICAgIDB4RDBDMCwgMHhEMEMxLCAweDBDMEIsIDB4RDBDMiwgMHhEMEMzLCAweDQxNjgsIDB4RDBDNCwgMHhEMEM0LCAweDBDMEQsDQotICAgIDB4RDBDNSwgMHhEMEM3LCAweDQxNkEsIDB4RDBDOCwgMHhEMEM5LCAweDBDMEUsIDB4RDBDQSwgMHhEMENGLCAweDQxNkQsDQotICAgIDB4RDBEMCwgMHhEMEQxLCAweDBDMTAsIDB4RDBEMiwgMHhEMEQyLCAweDQxNzMsIDB4RDBEMywgMHhEMEQ1LCAweDBDMTIsDQotICAgIDB4RDBENiwgMHhEMERCLCAweDQxNzQsIDB4RDBEQywgMHhEMERELCAweDBDMTUsIDB4RDBERSwgMHhEMERGLCAweDQxN0EsDQotICAgIDB4RDBFMCwgMHhEMEUwLCAweDBDMTcsIDB4RDBFMSwgMHhEMEUzLCAweDQxN0MsIDB4RDBFNCwgMHhEMEU0LCAweDBDMTgsDQotICAgIDB4RDBFNSwgMHhEMEVCLCAweDQxN0YsIDB4RDBFQywgMHhEMEVELCAweDBDMTksIDB4RDBFRSwgMHhEMEVFLCAweDQxODYsDQotICAgIDB4RDBFRiwgMHhEMEYxLCAweDBDMUIsIDB4RDBGMiwgMHhEMEY3LCAweDQxODcsIDB4RDBGOCwgMHhEMEY4LCAweDBDMUUsDQotICAgIDB4RDBGOSwgMHhEMEZGLCAweDQxOEQsIDB4RDEwMCwgMHhEMTBDLCAweDQxOTQsIDB4RDEwRCwgMHhEMTBELCAweDBDMUYsDQotICAgIDB4RDEwRSwgMHhEMTJGLCAweDQxQTEsIDB4RDEzMCwgMHhEMTMxLCAweDBDMjAsIDB4RDEzMiwgMHhEMTMzLCAweDQxQzMsDQotICAgIDB4RDEzNCwgMHhEMTM0LCAweDBDMjIsIDB4RDEzNSwgMHhEMTM3LCAweDQxQzUsIDB4RDEzOCwgMHhEMTM4LCAweDBDMjMsDQotICAgIDB4RDEzOSwgMHhEMTM5LCAweDQxQzgsIDB4RDEzQSwgMHhEMTNBLCAweDBDMjQsIDB4RDEzQiwgMHhEMTNGLCAweDQxQzksDQotICAgIDB4RDE0MCwgMHhEMTQxLCAweDBDMjUsIDB4RDE0MiwgMHhEMTQyLCAweDQxQ0UsIDB4RDE0MywgMHhEMTQ1LCAweDBDMjcsDQotICAgIDB4RDE0NiwgMHhEMTRCLCAweDQxQ0YsIDB4RDE0QywgMHhEMTRELCAweDBDMkEsIDB4RDE0RSwgMHhEMTRGLCAweDQxRDUsDQotICAgIDB4RDE1MCwgMHhEMTUwLCAweDBDMkMsIDB4RDE1MSwgMHhEMTUzLCAweDQxRDcsIDB4RDE1NCwgMHhEMTU0LCAweDBDMkQsDQotICAgIDB4RDE1NSwgMHhEMTVCLCAweDQxREEsIDB4RDE1QywgMHhEMTVELCAweDBDMkUsIDB4RDE1RSwgMHhEMTVFLCAweDQxRTEsDQotICAgIDB4RDE1RiwgMHhEMTVGLCAweDBDMzAsIDB4RDE2MCwgMHhEMTYwLCAweDQxRTIsIDB4RDE2MSwgMHhEMTYxLCAweDBDMzEsDQotICAgIDB4RDE2MiwgMHhEMTY3LCAweDQxRTMsIDB4RDE2OCwgMHhEMTY4LCAweDBDMzIsIDB4RDE2OSwgMHhEMTZCLCAweDQxRTksDQotICAgIDB4RDE2QywgMHhEMTZDLCAweDBDMzMsIDB4RDE2RCwgMHhEMTdCLCAweDQxRUMsIDB4RDE3QywgMHhEMTdDLCAweDBDMzQsDQotICAgIDB4RDE3RCwgMHhEMTgzLCAweDQxRkIsIDB4RDE4NCwgMHhEMTg0LCAweDBDMzUsIDB4RDE4NSwgMHhEMTg3LCAweDQyMDIsDQotICAgIDB4RDE4OCwgMHhEMTg4LCAweDBDMzYsIDB4RDE4OSwgMHhEMTlGLCAweDQyMDUsIDB4RDFBMCwgMHhEMUExLCAweDBDMzcsDQotICAgIDB4RDFBMiwgMHhEMUEzLCAweDQyMUMsIDB4RDFBNCwgMHhEMUE0LCAweDBDMzksIDB4RDFBNSwgMHhEMUE3LCAweDQyMUUsDQotICAgIDB4RDFBOCwgMHhEMUE4LCAweDBDM0EsIDB4RDFBOSwgMHhEMUFGLCAweDQyMjEsIDB4RDFCMCwgMHhEMUIxLCAweDBDM0IsDQotICAgIDB4RDFCMiwgMHhEMUIyLCAweDQyMjgsIDB4RDFCMywgMHhEMUIzLCAweDBDM0QsIDB4RDFCNCwgMHhEMUI0LCAweDQyMjksDQotICAgIDB4RDFCNSwgMHhEMUI1LCAweDBDM0UsIDB4RDFCNiwgMHhEMUI5LCAweDQyMkEsIDB4RDFCQSwgMHhEMUJBLCAweDBDM0YsDQotICAgIDB4RDFCQiwgMHhEMUJCLCAweDQyMkUsIDB4RDFCQywgMHhEMUJDLCAweDBDNDAsIDB4RDFCRCwgMHhEMUJGLCAweDQyMkYsDQotICAgIDB4RDFDMCwgMHhEMUMwLCAweDBDNDEsIDB4RDFDMSwgMHhEMUQ3LCAweDQyMzIsIDB4RDFEOCwgMHhEMUQ4LCAweDBDNDIsDQotICAgIDB4RDFEOSwgMHhEMUYzLCAweDQyNDksIDB4RDFGNCwgMHhEMUY0LCAweDBDNDMsIDB4RDFGNSwgMHhEMUY3LCAweDQyNjQsDQotICAgIDB4RDFGOCwgMHhEMUY4LCAweDBDNDQsIDB4RDFGOSwgMHhEMUZGLCAweDQyNjcsIDB4RDIwMCwgMHhEMjA2LCAweDQyNkUsDQotICAgIDB4RDIwNywgMHhEMjA3LCAweDBDNDUsIDB4RDIwOCwgMHhEMjA4LCAweDQyNzUsIDB4RDIwOSwgMHhEMjA5LCAweDBDNDYsDQotICAgIDB4RDIwQSwgMHhEMjBGLCAweDQyNzYsIDB4RDIxMCwgMHhEMjEwLCAweDBDNDcsIDB4RDIxMSwgMHhEMjJCLCAweDQyN0MsDQotICAgIDB4RDIyQywgMHhEMjJELCAweDBDNDgsIDB4RDIyRSwgMHhEMjJGLCAweDQyOTcsIDB4RDIzMCwgMHhEMjMwLCAweDBDNEEsDQotICAgIDB4RDIzMSwgMHhEMjMzLCAweDQyOTksIDB4RDIzNCwgMHhEMjM0LCAweDBDNEIsIDB4RDIzNSwgMHhEMjNCLCAweDQyOUMsDQotICAgIDB4RDIzQywgMHhEMjNELCAweDBDNEMsIDB4RDIzRSwgMHhEMjNFLCAweDQyQTMsIDB4RDIzRiwgMHhEMjNGLCAweDBDNEUsDQotICAgIDB4RDI0MCwgMHhEMjQwLCAweDQyQTQsIDB4RDI0MSwgMHhEMjQxLCAweDBDNEYsIDB4RDI0MiwgMHhEMjQ3LCAweDQyQTUsDQotICAgIDB4RDI0OCwgMHhEMjQ4LCAweDBDNTAsIDB4RDI0OSwgMHhEMjVCLCAweDQyQUIsIDB4RDI1QywgMHhEMjVDLCAweDBDNTEsDQotICAgIDB4RDI1RCwgMHhEMjYzLCAweDQyQkUsIDB4RDI2NCwgMHhEMjY0LCAweDBDNTIsIDB4RDI2NSwgMHhEMjdGLCAweDQyQzUsDQotICAgIDB4RDI4MCwgMHhEMjgxLCAweDBDNTMsIDB4RDI4MiwgMHhEMjgzLCAweDQyRTAsIDB4RDI4NCwgMHhEMjg0LCAweDBDNTUsDQotICAgIDB4RDI4NSwgMHhEMjg3LCAweDQyRTIsIDB4RDI4OCwgMHhEMjg4LCAweDBDNTYsIDB4RDI4OSwgMHhEMjhGLCAweDQyRTUsDQotICAgIDB4RDI5MCwgMHhEMjkxLCAweDBDNTcsIDB4RDI5MiwgMHhEMjk0LCAweDQyRUMsIDB4RDI5NSwgMHhEMjk1LCAweDBDNTksDQotICAgIDB4RDI5NiwgMHhEMjlCLCAweDQyRUYsIDB4RDI5QywgMHhEMjlDLCAweDBDNUEsIDB4RDI5RCwgMHhEMjlGLCAweDQyRjUsDQotICAgIDB4RDJBMCwgMHhEMkEwLCAweDBDNUIsIDB4RDJBMSwgMHhEMkEzLCAweDQyRjgsIDB4RDJBNCwgMHhEMkE0LCAweDBDNUMsDQotICAgIDB4RDJBNSwgMHhEMkFCLCAweDQyRkIsIDB4RDJBQywgMHhEMkFDLCAweDBDNUQsIDB4RDJBRCwgMHhEMkIwLCAweDQzMDIsDQotICAgIDB4RDJCMSwgMHhEMkIxLCAweDBDNUUsIDB4RDJCMiwgMHhEMkI3LCAweDQzMDYsIDB4RDJCOCwgMHhEMkI5LCAweDBDNUYsDQotICAgIDB4RDJCQSwgMHhEMkJCLCAweDQzMEMsIDB4RDJCQywgMHhEMkJDLCAweDBDNjEsIDB4RDJCRCwgMHhEMkJFLCAweDQzMEUsDQotICAgIDB4RDJCRiwgMHhEMkMwLCAweDBDNjIsIDB4RDJDMSwgMHhEMkMxLCAweDQzMTAsIDB4RDJDMiwgMHhEMkMyLCAweDBDNjQsDQotICAgIDB4RDJDMywgMHhEMkM3LCAweDQzMTEsIDB4RDJDOCwgMHhEMkM5LCAweDBDNjUsIDB4RDJDQSwgMHhEMkNBLCAweDQzMTYsDQotICAgIDB4RDJDQiwgMHhEMkNCLCAweDBDNjcsIDB4RDJDQywgMHhEMkQzLCAweDQzMTcsIDB4RDJENCwgMHhEMkQ0LCAweDBDNjgsDQotICAgIDB4RDJENSwgMHhEMkQ3LCAweDQzMUYsIDB4RDJEOCwgMHhEMkQ4LCAweDBDNjksIDB4RDJEOSwgMHhEMkRCLCAweDQzMjIsDQotICAgIDB4RDJEQywgMHhEMkRDLCAweDBDNkEsIDB4RDJERCwgMHhEMkUzLCAweDQzMjUsIDB4RDJFNCwgMHhEMkU1LCAweDBDNkIsDQotICAgIDB4RDJFNiwgMHhEMkVGLCAweDQzMkMsIDB4RDJGMCwgMHhEMkYxLCAweDBDNkQsIDB4RDJGMiwgMHhEMkYzLCAweDQzMzYsDQotICAgIDB4RDJGNCwgMHhEMkY0LCAweDBDNkYsIDB4RDJGNSwgMHhEMkY3LCAweDQzMzgsIDB4RDJGOCwgMHhEMkY4LCAweDBDNzAsDQotICAgIDB4RDJGOSwgMHhEMkZGLCAweDQzM0IsIDB4RDMwMCwgMHhEMzAxLCAweDBDNzEsIDB4RDMwMiwgMHhEMzAyLCAweDQzNDIsDQotICAgIDB4RDMwMywgMHhEMzAzLCAweDBDNzMsIDB4RDMwNCwgMHhEMzA0LCAweDQzNDMsIDB4RDMwNSwgMHhEMzA1LCAweDBDNzQsDQotICAgIDB4RDMwNiwgMHhEMzBCLCAweDQzNDQsIDB4RDMwQywgMHhEMzBFLCAweDBDNzUsIDB4RDMwRiwgMHhEMzBGLCAweDQzNEEsDQotICAgIDB4RDMxMCwgMHhEMzEwLCAweDBDNzgsIDB4RDMxMSwgMHhEMzEzLCAweDQzNEIsIDB4RDMxNCwgMHhEMzE0LCAweDBDNzksDQotICAgIDB4RDMxNSwgMHhEMzE1LCAweDQzNEUsIDB4RDMxNiwgMHhEMzE2LCAweDBDN0EsIDB4RDMxNywgMHhEMzFCLCAweDQzNEYsDQotICAgIDB4RDMxQywgMHhEMzFELCAweDBDN0IsIDB4RDMxRSwgMHhEMzFFLCAweDQzNTQsIDB4RDMxRiwgMHhEMzIxLCAweDBDN0QsDQotICAgIDB4RDMyMiwgMHhEMzI0LCAweDQzNTUsIDB4RDMyNSwgMHhEMzI1LCAweDBDODAsIDB4RDMyNiwgMHhEMzI3LCAweDQzNTgsDQotICAgIDB4RDMyOCwgMHhEMzI5LCAweDBDODEsIDB4RDMyQSwgMHhEMzJCLCAweDQzNUEsIDB4RDMyQywgMHhEMzJDLCAweDBDODMsDQotICAgIDB4RDMyRCwgMHhEMzJGLCAweDQzNUMsIDB4RDMzMCwgMHhEMzMwLCAweDBDODQsIDB4RDMzMSwgMHhEMzM3LCAweDQzNUYsDQotICAgIDB4RDMzOCwgMHhEMzM5LCAweDBDODUsIDB4RDMzQSwgMHhEMzNBLCAweDQzNjYsIDB4RDMzQiwgMHhEMzNELCAweDBDODcsDQotICAgIDB4RDMzRSwgMHhEMzQzLCAweDQzNjcsIDB4RDM0NCwgMHhEMzQ1LCAweDBDOEEsIDB4RDM0NiwgMHhEMzdCLCAweDQzNkQsDQotICAgIDB4RDM3QywgMHhEMzdELCAweDBDOEMsIDB4RDM3RSwgMHhEMzdGLCAweDQzQTMsIDB4RDM4MCwgMHhEMzgwLCAweDBDOEUsDQotICAgIDB4RDM4MSwgMHhEMzgzLCAweDQzQTUsIDB4RDM4NCwgMHhEMzg0LCAweDBDOEYsIDB4RDM4NSwgMHhEMzhCLCAweDQzQTgsDQotICAgIDB4RDM4QywgMHhEMzhELCAweDBDOTAsIDB4RDM4RSwgMHhEMzhFLCAweDQzQUYsIDB4RDM4RiwgMHhEMzkxLCAweDBDOTIsDQotICAgIDB4RDM5MiwgMHhEMzk3LCAweDQzQjAsIDB4RDM5OCwgMHhEMzk5LCAweDBDOTUsIDB4RDM5QSwgMHhEMzlCLCAweDQzQjYsDQotICAgIDB4RDM5QywgMHhEMzlDLCAweDBDOTcsIDB4RDM5RCwgMHhEMzlGLCAweDQzQjgsIDB4RDNBMCwgMHhEM0EwLCAweDBDOTgsDQotICAgIDB4RDNBMSwgMHhEM0E3LCAweDQzQkIsIDB4RDNBOCwgMHhEM0E5LCAweDBDOTksIDB4RDNBQSwgMHhEM0FBLCAweDQzQzIsDQotICAgIDB4RDNBQiwgMHhEM0FCLCAweDBDOUIsIDB4RDNBQywgMHhEM0FDLCAweDQzQzMsIDB4RDNBRCwgMHhEM0FELCAweDBDOUMsDQotICAgIDB4RDNBRSwgMHhEM0IzLCAweDQzQzQsIDB4RDNCNCwgMHhEM0I0LCAweDBDOUQsIDB4RDNCNSwgMHhEM0I3LCAweDQzQ0EsDQotICAgIDB4RDNCOCwgMHhEM0I4LCAweDBDOUUsIDB4RDNCOSwgMHhEM0JCLCAweDQzQ0QsIDB4RDNCQywgMHhEM0JDLCAweDBDOUYsDQotICAgIDB4RDNCRCwgMHhEM0MzLCAweDQzRDAsIDB4RDNDNCwgMHhEM0M1LCAweDBDQTAsIDB4RDNDNiwgMHhEM0M3LCAweDQzRDcsDQotICAgIDB4RDNDOCwgMHhEM0M5LCAweDBDQTIsIDB4RDNDQSwgMHhEM0NGLCAweDQzRDksIDB4RDNEMCwgMHhEM0QwLCAweDBDQTQsDQotICAgIDB4RDNEMSwgMHhEM0Q3LCAweDQzREYsIDB4RDNEOCwgMHhEM0Q4LCAweDBDQTUsIDB4RDNEOSwgMHhEM0UwLCAweDQzRTYsDQotICAgIDB4RDNFMSwgMHhEM0UxLCAweDBDQTYsIDB4RDNFMiwgMHhEM0UyLCAweDQzRUUsIDB4RDNFMywgMHhEM0UzLCAweDBDQTcsDQotICAgIDB4RDNFNCwgMHhEM0VCLCAweDQzRUYsIDB4RDNFQywgMHhEM0VELCAweDBDQTgsIDB4RDNFRSwgMHhEM0VGLCAweDQzRjcsDQotICAgIDB4RDNGMCwgMHhEM0YwLCAweDBDQUEsIDB4RDNGMSwgMHhEM0YzLCAweDQzRjksIDB4RDNGNCwgMHhEM0Y0LCAweDBDQUIsDQotICAgIDB4RDNGNSwgMHhEM0ZCLCAweDQzRkMsIDB4RDNGQywgMHhEM0ZELCAweDBDQUMsIDB4RDNGRSwgMHhEM0ZFLCAweDQ0MDMsDQotICAgIDB4RDNGRiwgMHhEM0ZGLCAweDBDQUUsIDB4RDQwMCwgMHhENDAwLCAweDQ0MDQsIDB4RDQwMSwgMHhENDAxLCAweDBDQUYsDQotICAgIDB4RDQwMiwgMHhENDA3LCAweDQ0MDUsIDB4RDQwOCwgMHhENDA4LCAweDBDQjAsIDB4RDQwOSwgMHhENDFDLCAweDQ0MEIsDQotICAgIDB4RDQxRCwgMHhENDFELCAweDBDQjEsIDB4RDQxRSwgMHhENDNGLCAweDQ0MUYsIDB4RDQ0MCwgMHhENDQwLCAweDBDQjIsDQotICAgIDB4RDQ0MSwgMHhENDQzLCAweDQ0NDEsIDB4RDQ0NCwgMHhENDQ0LCAweDBDQjMsIDB4RDQ0NSwgMHhENDVCLCAweDQ0NDQsDQotICAgIDB4RDQ1QywgMHhENDVDLCAweDBDQjQsIDB4RDQ1RCwgMHhENDVGLCAweDQ0NUIsIDB4RDQ2MCwgMHhENDYwLCAweDBDQjUsDQotICAgIDB4RDQ2MSwgMHhENDYzLCAweDQ0NUUsIDB4RDQ2NCwgMHhENDY0LCAweDBDQjYsIDB4RDQ2NSwgMHhENDZDLCAweDQ0NjEsDQotICAgIDB4RDQ2RCwgMHhENDZELCAweDBDQjcsIDB4RDQ2RSwgMHhENDZFLCAweDQ0NjksIDB4RDQ2RiwgMHhENDZGLCAweDBDQjgsDQotICAgIDB4RDQ3MCwgMHhENDc3LCAweDQ0NkEsIDB4RDQ3OCwgMHhENDc5LCAweDBDQjksIDB4RDQ3QSwgMHhENDdCLCAweDQ0NzIsDQotICAgIDB4RDQ3QywgMHhENDdDLCAweDBDQkIsIDB4RDQ3RCwgMHhENDdFLCAweDQ0NzQsIDB4RDQ3RiwgMHhENDgwLCAweDBDQkMsDQotICAgIDB4RDQ4MSwgMHhENDgxLCAweDQ0NzYsIDB4RDQ4MiwgMHhENDgyLCAweDBDQkUsIDB4RDQ4MywgMHhENDg3LCAweDQ0NzcsDQotICAgIDB4RDQ4OCwgMHhENDg5LCAweDBDQkYsIDB4RDQ4QSwgMHhENDhBLCAweDQ0N0MsIDB4RDQ4QiwgMHhENDhCLCAweDBDQzEsDQotICAgIDB4RDQ4QywgMHhENDhDLCAweDQ0N0QsIDB4RDQ4RCwgMHhENDhELCAweDBDQzIsIDB4RDQ4RSwgMHhENDkzLCAweDQ0N0UsDQotICAgIDB4RDQ5NCwgMHhENDk0LCAweDBDQzMsIDB4RDQ5NSwgMHhENEE4LCAweDQ0ODQsIDB4RDRBOSwgMHhENEE5LCAweDBDQzQsDQotICAgIDB4RDRBQSwgMHhENENCLCAweDQ0OTgsIDB4RDRDQywgMHhENENDLCAweDBDQzUsIDB4RDRDRCwgMHhENENGLCAweDQ0QkEsDQotICAgIDB4RDREMCwgMHhENEQwLCAweDBDQzYsIDB4RDREMSwgMHhENEQzLCAweDQ0QkQsIDB4RDRENCwgMHhENEQ0LCAweDBDQzcsDQotICAgIDB4RDRENSwgMHhENERCLCAweDQ0QzAsIDB4RDREQywgMHhENERDLCAweDBDQzgsIDB4RDRERCwgMHhENERFLCAweDQ0QzcsDQotICAgIDB4RDRERiwgMHhENERGLCAweDBDQzksIDB4RDRFMCwgMHhENEU3LCAweDQ0QzksIDB4RDRFOCwgMHhENEU4LCAweDBDQ0EsDQotICAgIDB4RDRFOSwgMHhENEVCLCAweDQ0RDEsIDB4RDRFQywgMHhENEVDLCAweDBDQ0IsIDB4RDRFRCwgMHhENEVGLCAweDQ0RDQsDQotICAgIDB4RDRGMCwgMHhENEYwLCAweDBDQ0MsIDB4RDRGMSwgMHhENEY3LCAweDQ0RDcsIDB4RDRGOCwgMHhENEY4LCAweDBDQ0QsDQotICAgIDB4RDRGOSwgMHhENEZBLCAweDQ0REUsIDB4RDRGQiwgMHhENEZCLCAweDBDQ0UsIDB4RDRGQywgMHhENEZDLCAweDQ0RTAsDQotICAgIDB4RDRGRCwgMHhENEZELCAweDBDQ0YsIDB4RDRGRSwgMHhENEZGLCAweDQ0RTEsIDB4RDUwMCwgMHhENTAzLCAweDQ0RTMsDQotICAgIDB4RDUwNCwgMHhENTA0LCAweDBDRDAsIDB4RDUwNSwgMHhENTA3LCAweDQ0RTcsIDB4RDUwOCwgMHhENTA4LCAweDBDRDEsDQotICAgIDB4RDUwOSwgMHhENTBCLCAweDQ0RUEsIDB4RDUwQywgMHhENTBDLCAweDBDRDIsIDB4RDUwRCwgMHhENTEzLCAweDQ0RUQsDQotICAgIDB4RDUxNCwgMHhENTE1LCAweDBDRDMsIDB4RDUxNiwgMHhENTE2LCAweDQ0RjQsIDB4RDUxNywgMHhENTE3LCAweDBDRDUsDQotICAgIDB4RDUxOCwgMHhENTNCLCAweDQ0RjUsIDB4RDUzQywgMHhENTNELCAweDBDRDYsIDB4RDUzRSwgMHhENTNGLCAweDQ1MTksDQotICAgIDB4RDU0MCwgMHhENTQwLCAweDBDRDgsIDB4RDU0MSwgMHhENTQzLCAweDQ1MUIsIDB4RDU0NCwgMHhENTQ0LCAweDBDRDksDQotICAgIDB4RDU0NSwgMHhENTRCLCAweDQ1MUUsIDB4RDU0QywgMHhENTRELCAweDBDREEsIDB4RDU0RSwgMHhENTRFLCAweDQ1MjUsDQotICAgIDB4RDU0RiwgMHhENTRGLCAweDBDREMsIDB4RDU1MCwgMHhENTUwLCAweDQ1MjYsIDB4RDU1MSwgMHhENTUxLCAweDBDREQsDQotICAgIDB4RDU1MiwgMHhENTU3LCAweDQ1MjcsIDB4RDU1OCwgMHhENTU5LCAweDBDREUsIDB4RDU1QSwgMHhENTVCLCAweDQ1MkQsDQotICAgIDB4RDU1QywgMHhENTVDLCAweDBDRTAsIDB4RDU1RCwgMHhENTVGLCAweDQ1MkYsIDB4RDU2MCwgMHhENTYwLCAweDBDRTEsDQotICAgIDB4RDU2MSwgMHhENTY0LCAweDQ1MzIsIDB4RDU2NSwgMHhENTY1LCAweDBDRTIsIDB4RDU2NiwgMHhENTY3LCAweDQ1MzYsDQotICAgIDB4RDU2OCwgMHhENTY5LCAweDBDRTMsIDB4RDU2QSwgMHhENTZBLCAweDQ1MzgsIDB4RDU2QiwgMHhENTZCLCAweDBDRTUsDQotICAgIDB4RDU2QywgMHhENTZDLCAweDQ1MzksIDB4RDU2RCwgMHhENTZELCAweDBDRTYsIDB4RDU2RSwgMHhENTczLCAweDQ1M0EsDQotICAgIDB4RDU3NCwgMHhENTc1LCAweDBDRTcsIDB4RDU3NiwgMHhENTc3LCAweDQ1NDAsIDB4RDU3OCwgMHhENTc4LCAweDBDRTksDQotICAgIDB4RDU3OSwgMHhENTdCLCAweDQ1NDIsIDB4RDU3QywgMHhENTdDLCAweDBDRUEsIDB4RDU3RCwgMHhENTgzLCAweDQ1NDUsDQotICAgIDB4RDU4NCwgMHhENTg1LCAweDBDRUIsIDB4RDU4NiwgMHhENTg2LCAweDQ1NEMsIDB4RDU4NywgMHhENTg5LCAweDBDRUQsDQotICAgIDB4RDU4QSwgMHhENThGLCAweDQ1NEQsIDB4RDU5MCwgMHhENTkwLCAweDBDRjAsIDB4RDU5MSwgMHhENUE0LCAweDQ1NTMsDQotICAgIDB4RDVBNSwgMHhENUE1LCAweDBDRjEsIDB4RDVBNiwgMHhENUM3LCAweDQ1NjcsIDB4RDVDOCwgMHhENUM5LCAweDBDRjIsDQotICAgIDB4RDVDQSwgMHhENUNCLCAweDQ1ODksIDB4RDVDQywgMHhENUNDLCAweDBDRjQsIDB4RDVDRCwgMHhENUNGLCAweDQ1OEIsDQotICAgIDB4RDVEMCwgMHhENUQwLCAweDBDRjUsIDB4RDVEMSwgMHhENUQxLCAweDQ1OEUsIDB4RDVEMiwgMHhENUQyLCAweDBDRjYsDQotICAgIDB4RDVEMywgMHhENUQ3LCAweDQ1OEYsIDB4RDVEOCwgMHhENUQ5LCAweDBDRjcsIDB4RDVEQSwgMHhENURBLCAweDQ1OTQsDQotICAgIDB4RDVEQiwgMHhENURCLCAweDBDRjksIDB4RDVEQywgMHhENURDLCAweDQ1OTUsIDB4RDVERCwgMHhENURELCAweDBDRkEsDQotICAgIDB4RDVERSwgMHhENUUzLCAweDQ1OTYsIDB4RDVFNCwgMHhENUU1LCAweDBDRkIsIDB4RDVFNiwgMHhENUU3LCAweDQ1OUMsDQotICAgIDB4RDVFOCwgMHhENUU4LCAweDBDRkQsIDB4RDVFOSwgMHhENUVCLCAweDQ1OUUsIDB4RDVFQywgMHhENUVDLCAweDBDRkUsDQotICAgIDB4RDVFRCwgMHhENUYzLCAweDQ1QTEsIDB4RDVGNCwgMHhENUY1LCAweDBDRkYsIDB4RDVGNiwgMHhENUY2LCAweDQ1QTgsDQotICAgIDB4RDVGNywgMHhENUY3LCAweDBEMDEsIDB4RDVGOCwgMHhENUY4LCAweDQ1QTksIDB4RDVGOSwgMHhENUY5LCAweDBEMDIsDQotICAgIDB4RDVGQSwgMHhENUZGLCAweDQ1QUEsIDB4RDYwMCwgMHhENjAxLCAweDBEMDMsIDB4RDYwMiwgMHhENjAzLCAweDQ1QjAsDQotICAgIDB4RDYwNCwgMHhENjA0LCAweDBEMDUsIDB4RDYwNSwgMHhENjA3LCAweDQ1QjIsIDB4RDYwOCwgMHhENjA4LCAweDBEMDYsDQotICAgIDB4RDYwOSwgMHhENjBGLCAweDQ1QjUsIDB4RDYxMCwgMHhENjExLCAweDBEMDcsIDB4RDYxMiwgMHhENjEyLCAweDQ1QkMsDQotICAgIDB4RDYxMywgMHhENjE1LCAweDBEMDksIDB4RDYxNiwgMHhENjFCLCAweDQ1QkQsIDB4RDYxQywgMHhENjFDLCAweDBEMEMsDQotICAgIDB4RDYxRCwgMHhENjFGLCAweDQ1QzMsIDB4RDYyMCwgMHhENjIwLCAweDBEMEQsIDB4RDYyMSwgMHhENjIzLCAweDQ1QzYsDQotICAgIDB4RDYyNCwgMHhENjI0LCAweDBEMEUsIDB4RDYyNSwgMHhENjJDLCAweDQ1QzksIDB4RDYyRCwgMHhENjJELCAweDBEMEYsDQotICAgIDB4RDYyRSwgMHhENjM3LCAweDQ1RDEsIDB4RDYzOCwgMHhENjM5LCAweDBEMTAsIDB4RDYzQSwgMHhENjNCLCAweDQ1REIsDQotICAgIDB4RDYzQywgMHhENjNDLCAweDBEMTIsIDB4RDYzRCwgMHhENjNGLCAweDQ1REQsIDB4RDY0MCwgMHhENjQwLCAweDBEMTMsDQotICAgIDB4RDY0MSwgMHhENjQ0LCAweDQ1RTAsIDB4RDY0NSwgMHhENjQ1LCAweDBEMTQsIDB4RDY0NiwgMHhENjQ3LCAweDQ1RTQsDQotICAgIDB4RDY0OCwgMHhENjQ5LCAweDBEMTUsIDB4RDY0QSwgMHhENjRBLCAweDQ1RTYsIDB4RDY0QiwgMHhENjRCLCAweDBEMTcsDQotICAgIDB4RDY0QywgMHhENjRDLCAweDQ1RTcsIDB4RDY0RCwgMHhENjRELCAweDBEMTgsIDB4RDY0RSwgMHhENjUwLCAweDQ1RTgsDQotICAgIDB4RDY1MSwgMHhENjUxLCAweDBEMTksIDB4RDY1MiwgMHhENjUzLCAweDQ1RUIsIDB4RDY1NCwgMHhENjU1LCAweDBEMUEsDQotICAgIDB4RDY1NiwgMHhENjU3LCAweDQ1RUQsIDB4RDY1OCwgMHhENjU4LCAweDBEMUMsIDB4RDY1OSwgMHhENjVCLCAweDQ1RUYsDQotICAgIDB4RDY1QywgMHhENjVDLCAweDBEMUQsIDB4RDY1RCwgMHhENjY2LCAweDQ1RjIsIDB4RDY2NywgMHhENjY3LCAweDBEMUUsDQotICAgIDB4RDY2OCwgMHhENjY4LCAweDQ1RkMsIDB4RDY2OSwgMHhENjY5LCAweDBEMUYsIDB4RDY2QSwgMHhENjZGLCAweDQ1RkQsDQotICAgIDB4RDY3MCwgMHhENjcxLCAweDBEMjAsIDB4RDY3MiwgMHhENjczLCAweDQ2MDMsIDB4RDY3NCwgMHhENjc0LCAweDBEMjIsDQotICAgIDB4RDY3NSwgMHhENjgyLCAweDQ2MDUsIDB4RDY4MywgMHhENjgzLCAweDBEMjMsIDB4RDY4NCwgMHhENjg0LCAweDQ2MTMsDQotICAgIDB4RDY4NSwgMHhENjg1LCAweDBEMjQsIDB4RDY4NiwgMHhENjhCLCAweDQ2MTQsIDB4RDY4QywgMHhENjhELCAweDBEMjUsDQotICAgIDB4RDY4RSwgMHhENjhGLCAweDQ2MUEsIDB4RDY5MCwgMHhENjkwLCAweDBEMjcsIDB4RDY5MSwgMHhENjkzLCAweDQ2MUMsDQotICAgIDB4RDY5NCwgMHhENjk0LCAweDBEMjgsIDB4RDY5NSwgMHhENjlDLCAweDQ2MUYsIDB4RDY5RCwgMHhENjlELCAweDBEMjksDQotICAgIDB4RDY5RSwgMHhENjlFLCAweDQ2MjcsIDB4RDY5RiwgMHhENjlGLCAweDBEMkEsIDB4RDZBMCwgMHhENkEwLCAweDQ2MjgsDQotICAgIDB4RDZBMSwgMHhENkExLCAweDBEMkIsIDB4RDZBMiwgMHhENkE3LCAweDQ2MjksIDB4RDZBOCwgMHhENkE4LCAweDBEMkMsDQotICAgIDB4RDZBOSwgMHhENkFCLCAweDQ2MkYsIDB4RDZBQywgMHhENkFDLCAweDBEMkQsIDB4RDZBRCwgMHhENkFGLCAweDQ2MzIsDQotICAgIDB4RDZCMCwgMHhENkIwLCAweDBEMkUsIDB4RDZCMSwgMHhENkI4LCAweDQ2MzUsIDB4RDZCOSwgMHhENkI5LCAweDBEMkYsDQotICAgIDB4RDZCQSwgMHhENkJBLCAweDQ2M0QsIDB4RDZCQiwgMHhENkJCLCAweDBEMzAsIDB4RDZCQywgMHhENkMzLCAweDQ2M0UsDQotICAgIDB4RDZDNCwgMHhENkM1LCAweDBEMzEsIDB4RDZDNiwgMHhENkM3LCAweDQ2NDYsIDB4RDZDOCwgMHhENkM4LCAweDBEMzMsDQotICAgIDB4RDZDOSwgMHhENkNCLCAweDQ2NDgsIDB4RDZDQywgMHhENkNDLCAweDBEMzQsIDB4RDZDRCwgMHhENkQwLCAweDQ2NEIsDQotICAgIDB4RDZEMSwgMHhENkQxLCAweDBEMzUsIDB4RDZEMiwgMHhENkQzLCAweDQ2NEYsIDB4RDZENCwgMHhENkQ0LCAweDBEMzYsDQotICAgIDB4RDZENSwgMHhENkQ2LCAweDQ2NTEsIDB4RDZENywgMHhENkQ3LCAweDBEMzcsIDB4RDZEOCwgMHhENkQ4LCAweDQ2NTMsDQotICAgIDB4RDZEOSwgMHhENkQ5LCAweDBEMzgsIDB4RDZEQSwgMHhENkRGLCAweDQ2NTQsIDB4RDZFMCwgMHhENkUwLCAweDBEMzksDQotICAgIDB4RDZFMSwgMHhENkUzLCAweDQ2NUEsIDB4RDZFNCwgMHhENkU0LCAweDBEM0EsIDB4RDZFNSwgMHhENkU3LCAweDQ2NUQsDQotICAgIDB4RDZFOCwgMHhENkU4LCAweDBEM0IsIDB4RDZFOSwgMHhENkVGLCAweDQ2NjAsIDB4RDZGMCwgMHhENkYwLCAweDBEM0MsDQotICAgIDB4RDZGMSwgMHhENkY0LCAweDQ2NjcsIDB4RDZGNSwgMHhENkY1LCAweDBEM0QsIDB4RDZGNiwgMHhENkZCLCAweDQ2NkIsDQotICAgIDB4RDZGQywgMHhENkZELCAweDBEM0UsIDB4RDZGRSwgMHhENkZGLCAweDQ2NzEsIDB4RDcwMCwgMHhENzAwLCAweDBENDAsDQotICAgIDB4RDcwMSwgMHhENzAzLCAweDQ2NzMsIDB4RDcwNCwgMHhENzA0LCAweDBENDEsIDB4RDcwNSwgMHhENzEwLCAweDQ2NzYsDQotICAgIDB4RDcxMSwgMHhENzExLCAweDBENDIsIDB4RDcxMiwgMHhENzE3LCAweDQ2ODIsIDB4RDcxOCwgMHhENzE5LCAweDBENDMsDQotICAgIDB4RDcxQSwgMHhENzFCLCAweDQ2ODgsIDB4RDcxQywgMHhENzFDLCAweDBENDUsIDB4RDcxRCwgMHhENzFGLCAweDQ2OEEsDQotICAgIDB4RDcyMCwgMHhENzIwLCAweDBENDYsIDB4RDcyMSwgMHhENzI3LCAweDQ2OEQsIDB4RDcyOCwgMHhENzI5LCAweDBENDcsDQotICAgIDB4RDcyQSwgMHhENzJBLCAweDQ2OTQsIDB4RDcyQiwgMHhENzJCLCAweDBENDksIDB4RDcyQywgMHhENzJDLCAweDQ2OTUsDQotICAgIDB4RDcyRCwgMHhENzJELCAweDBENEEsIDB4RDcyRSwgMHhENzMzLCAweDQ2OTYsIDB4RDczNCwgMHhENzM1LCAweDBENEIsDQotICAgIDB4RDczNiwgMHhENzM3LCAweDQ2OUMsIDB4RDczOCwgMHhENzM4LCAweDBENEQsIDB4RDczOSwgMHhENzNCLCAweDQ2OUUsDQotICAgIDB4RDczQywgMHhENzNDLCAweDBENEUsIDB4RDczRCwgMHhENzQzLCAweDQ2QTEsIDB4RDc0NCwgMHhENzQ0LCAweDBENEYsDQotICAgIDB4RDc0NSwgMHhENzQ2LCAweDQ2QTgsIDB4RDc0NywgMHhENzQ3LCAweDBENTAsIDB4RDc0OCwgMHhENzQ4LCAweDQ2QUEsDQotICAgIDB4RDc0OSwgMHhENzQ5LCAweDBENTEsIDB4RDc0QSwgMHhENzRGLCAweDQ2QUIsIDB4RDc1MCwgMHhENzUxLCAweDBENTIsDQotICAgIDB4RDc1MiwgMHhENzUzLCAweDQ2QjEsIDB4RDc1NCwgMHhENzU0LCAweDBENTQsIDB4RDc1NSwgMHhENzU1LCAweDQ2QjMsDQotICAgIDB4RDc1NiwgMHhENzU5LCAweDBENTUsIDB4RDc1QSwgMHhENzVGLCAweDQ2QjQsIDB4RDc2MCwgMHhENzYxLCAweDBENTksDQotICAgIDB4RDc2MiwgMHhENzYyLCAweDQ2QkEsIDB4RDc2MywgMHhENzYzLCAweDBENUIsIDB4RDc2NCwgMHhENzY0LCAweDQ2QkIsDQotICAgIDB4RDc2NSwgMHhENzY1LCAweDBENUMsIDB4RDc2NiwgMHhENzY4LCAweDQ2QkMsIDB4RDc2OSwgMHhENzY5LCAweDBENUQsDQotICAgIDB4RDc2QSwgMHhENzZCLCAweDQ2QkYsIDB4RDc2QywgMHhENzZDLCAweDBENUUsIDB4RDc2RCwgMHhENzZGLCAweDQ2QzEsDQotICAgIDB4RDc3MCwgMHhENzcwLCAweDBENUYsIDB4RDc3MSwgMHhENzczLCAweDQ2QzQsIDB4RDc3NCwgMHhENzc0LCAweDBENjAsDQotICAgIDB4RDc3NSwgMHhENzdCLCAweDQ2QzcsIDB4RDc3QywgMHhENzdELCAweDBENjEsIDB4RDc3RSwgMHhENzgwLCAweDQ2Q0UsDQotICAgIDB4RDc4MSwgMHhENzgxLCAweDBENjMsIDB4RDc4MiwgMHhENzg3LCAweDQ2RDEsIDB4RDc4OCwgMHhENzg5LCAweDBENjQsDQotICAgIDB4RDc4QSwgMHhENzhCLCAweDQ2RDcsIDB4RDc4QywgMHhENzhDLCAweDBENjYsIDB4RDc4RCwgMHhENzhGLCAweDQ2RDksDQotICAgIDB4RDc5MCwgMHhENzkwLCAweDBENjcsIDB4RDc5MSwgMHhENzk3LCAweDQ2REMsIDB4RDc5OCwgMHhENzk5LCAweDBENjgsDQotICAgIDB4RDc5QSwgMHhENzlBLCAweDQ2RTMsIDB4RDc5QiwgMHhENzlCLCAweDBENkEsIDB4RDc5QywgMHhENzlDLCAweDQ2RTQsDQotICAgIDB4RDc5RCwgMHhENzlELCAweDBENkIsIDB4RDc5RSwgMHhEN0EzLCAweDQ2RTUsIDB4RjkwMCwgMHhGOTAwLCAweDEwMTQsDQotICAgIDB4RjkwMSwgMHhGOTAxLCAweDBFNUUsIDB4RjkwMiwgMHhGOTAyLCAweDFCOEQsIDB4RjkwMywgMHhGOTAzLCAweDBEODQsDQotICAgIDB4RjkwNCwgMHhGOTA0LCAweDFFREMsIDB4RjkwNSwgMHhGOTA1LCAweDBFREEsIDB4RjkwNiwgMHhGOTA2LCAweDBGM0UsDQotICAgIDB4RjkwNywgMHhGOTA3LCAweDBGNkEsIDB4RjkwOCwgMHhGOTA4LCAweDBGNkEsIDB4RjkwOSwgMHhGOTA5LCAweDBFN0MsDQotICAgIDB4RjkwQSwgMHhGOTBBLCAweDEwMjMsIDB4RjkwQiwgMHhGOTBCLCAweDExMTYsIDB4RjkwQywgMHhGOTBDLCAweDEwM0MsDQotICAgIDB4RjkwRCwgMHhGOTEzLCAweDExMTcsIDB4RjkxNCwgMHhGOTE0LCAweDE2QTgsIDB4RjkxNSwgMHhGOTE3LCAweDExMUUsDQotICAgIDB4RjkxOCwgMHhGOTFELCAweDExMjIsIDB4RjkxRSwgMHhGOTIwLCAweDExMkEsIDB4RjkyMSwgMHhGOTIxLCAweDExMkYsDQotICAgIDB4RjkyMiwgMHhGOTIyLCAweDExMzMsIDB4RjkyMywgMHhGOTI0LCAweDExMzYsIDB4RjkyNSwgMHhGOTJCLCAweDExMzksDQotICAgIDB4RjkyQywgMHhGOTJELCAweDExNDMsIDB4RjkyRSwgMHhGOTJFLCAweDExNDgsIDB4RjkyRiwgMHhGOTJGLCAweDExOUYsDQotICAgIDB4RjkzMCwgMHhGOTMxLCAweDExQTEsIDB4RjkzMiwgMHhGOTM3LCAweDExQTUsIDB4RjkzOCwgMHhGOTNBLCAweDExQUMsDQotICAgIDB4RjkzQiwgMHhGOTQwLCAweDExQjAsIDB4Rjk0MSwgMHhGOTQzLCAweDExQjcsIDB4Rjk0NCwgMHhGOTQ1LCAweDExQkQsDQotICAgIDB4Rjk0NiwgMHhGOTQ4LCAweDExQzEsIDB4Rjk0OSwgMHhGOTQ5LCAweDExQzYsIDB4Rjk0QSwgMHhGOTRBLCAweDExRDQsDQotICAgIDB4Rjk0QiwgMHhGOTRFLCAweDExRDYsIDB4Rjk0RiwgMHhGOTUwLCAweDExREIsIDB4Rjk1MSwgMHhGOTUxLCAweDExRTAsDQotICAgIDB4Rjk1MiwgMHhGOTU1LCAweDExRkMsIDB4Rjk1NiwgMHhGOTU5LCAweDEyMDEsIDB4Rjk1QSwgMHhGOTVBLCAweDEwREUsDQotICAgIDB4Rjk1QiwgMHhGOTVCLCAweDEwMjgsIDB4Rjk1QywgMHhGOTVDLCAweDE2QTgsIDB4Rjk1RCwgMHhGOTVELCAweDEwMkIsDQotICAgIDB4Rjk1RSwgMHhGOTVFLCAweDEwNjAsIDB4Rjk1RiwgMHhGOTVGLCAweDEwNDcsIDB4Rjk2MCwgMHhGOTYwLCAweDEwNEMsDQotICAgIDB4Rjk2MSwgMHhGOTYxLCAweDE1QjAsIDB4Rjk2MiwgMHhGOTYyLCAweDE5MTgsIDB4Rjk2MywgMHhGOTYzLCAweDE0MUYsDQotICAgIDB4Rjk2NCwgMHhGOTY0LCAweDEzM0EsIDB4Rjk2NSwgMHhGOTY1LCAweDFENUUsIDB4Rjk2NiwgMHhGOTY2LCAweDEzRDcsDQotICAgIDB4Rjk2NywgMHhGOTY3LCAweDEzRjUsIDB4Rjk2OCwgMHhGOTY4LCAweDFEQjcsIDB4Rjk2OSwgMHhGOTY5LCAweDE1RDAsDQotICAgIDB4Rjk2QSwgMHhGOTZBLCAweDE0RjcsIDB4Rjk2QiwgMHhGOTZCLCAweDFCQUIsIDB4Rjk2QywgMHhGOTZDLCAweDE0RjIsDQotICAgIDB4Rjk2RCwgMHhGOTZELCAweDE1NkQsIDB4Rjk2RSwgMHhGOTZFLCAweDE3NzEsIDB4Rjk2RiwgMHhGOTZGLCAweDE1NTQsDQotICAgIDB4Rjk3MCwgMHhGOTcwLCAweDE0QzUsIDB4Rjk3MSwgMHhGOTcxLCAweDFCNjEsIDB4Rjk3MiwgMHhGOTcyLCAweDFDQ0EsDQotICAgIDB4Rjk3MywgMHhGOTczLCAweDE2MkUsIDB4Rjk3NCwgMHhGOTc0LCAweDE2RjIsIDB4Rjk3NSwgMHhGOTc3LCAweDExNDksDQotICAgIDB4Rjk3OCwgMHhGOTdBLCAweDExNEQsIDB4Rjk3QiwgMHhGOTdELCAweDExNTMsIDB4Rjk3RSwgMHhGOTdFLCAweDExNTcsDQotICAgIDB4Rjk3RiwgMHhGOTgwLCAweDExNUEsIDB4Rjk4MSwgMHhGOTgxLCAweDEwM0YsIDB4Rjk4MiwgMHhGOTgyLCAweDExNUMsDQotICAgIDB4Rjk4MywgMHhGOTgzLCAweDExNUYsIDB4Rjk4NCwgMHhGOTg1LCAweDExNjEsIDB4Rjk4NiwgMHhGOTg2LCAweDExNjUsDQotICAgIDB4Rjk4NywgMHhGOThDLCAweDExNjcsIDB4Rjk4RCwgMHhGOThELCAweDExNkYsIDB4Rjk4RSwgMHhGOThFLCAweDEwNDAsDQotICAgIDB4Rjk4RiwgMHhGOTkwLCAweDExNzEsIDB4Rjk5MSwgMHhGOTkxLCAweDEwNDEsIDB4Rjk5MiwgMHhGOTk0LCAweDExNzQsDQotICAgIDB4Rjk5NSwgMHhGOTk1LCAweDEwNDIsIDB4Rjk5NiwgMHhGOTk3LCAweDExNzcsIDB4Rjk5OCwgMHhGOTk4LCAweDExN0EsDQotICAgIDB4Rjk5OSwgMHhGOTk5LCAweDExNzksIDB4Rjk5QSwgMHhGOTlCLCAweDExN0IsIDB4Rjk5QywgMHhGOTlELCAweDExN0UsDQotICAgIDB4Rjk5RSwgMHhGOTlFLCAweDE5MkYsIDB4Rjk5RiwgMHhGOUEwLCAweDExODEsIDB4RjlBMSwgMHhGOUExLCAweDE1NTQsDQotICAgIDB4RjlBMiwgMHhGOUEyLCAweDExODMsIDB4RjlBMywgMHhGOUEzLCAweDEwNDMsIDB4RjlBNCwgMHhGOUE0LCAweDEwNDYsDQotICAgIDB4RjlBNSwgMHhGOUE1LCAweDExODUsIDB4RjlBNiwgMHhGOUE4LCAweDExODcsIDB4RjlBOSwgMHhGOUE5LCAweDExOEIsDQotICAgIDB4RjlBQSwgMHhGOUFBLCAweDEwNDcsIDB4RjlBQiwgMHhGOUFELCAweDExOEQsIDB4RjlBRSwgMHhGOUFFLCAweDFFNjcsDQotICAgIDB4RjlBRiwgMHhGOUFGLCAweDExOTEsIDB4RjlCMCwgMHhGOUIwLCAweDExOTMsIDB4RjlCMSwgMHhGOUI0LCAweDExOTUsDQotICAgIDB4RjlCNSwgMHhGOUI1LCAweDExOUEsIDB4RjlCNiwgMHhGOUI4LCAweDExOUMsIDB4RjlCOSwgMHhGOUI5LCAweDE2QTUsDQotICAgIDB4RjlCQSwgMHhGOUJDLCAweDExQzcsIDB4RjlCRCwgMHhGOUJELCAweDEwNTQsIDB4RjlCRSwgMHhGOUJFLCAweDExQ0IsDQotICAgIDB4RjlCRiwgMHhGOUJGLCAweDE2QTgsIDB4RjlDMCwgMHhGOUMxLCAweDExQ0MsIDB4RjlDMiwgMHhGOUMzLCAweDExRDAsDQotICAgIDB4RjlDNCwgMHhGOUM0LCAweDExRDMsIDB4RjlDNSwgMHhGOUM1LCAweDFGMzQsIDB4RjlDNiwgMHhGOUM2LCAweDE3RUIsDQotICAgIDB4RjlDNywgMHhGOUM3LCAweDExRTEsIDB4RjlDOCwgMHhGOUM4LCAweDEwNTcsIDB4RjlDOSwgMHhGOUM5LCAweDExRTMsDQotICAgIDB4RjlDQSwgMHhGOUNCLCAweDExRTUsIDB4RjlDQywgMHhGOUNDLCAweDExRTgsIDB4RjlDRCwgMHhGOUNELCAweDExRUEsDQotICAgIDB4RjlDRSwgMHhGOUNFLCAweDExRUMsIDB4RjlDRiwgMHhGOUNGLCAweDEwNTgsIDB4RjlEMCwgMHhGOUQzLCAweDExRUUsDQotICAgIDB4RjlENCwgMHhGOUQ2LCAweDExRjMsIDB4RjlENywgMHhGOURBLCAweDExRjcsIDB4RjlEQiwgMHhGOURCLCAweDE1QjAsDQotICAgIDB4RjlEQywgMHhGOURDLCAweDExRkIsIDB4RjlERCwgMHhGOURELCAweDEyMDYsIDB4RjlERSwgMHhGOURFLCAweDEyMDgsDQotICAgIDB4RjlERiwgMHhGOURGLCAweDEyMEEsIDB4RjlFMCwgMHhGOUUwLCAweDE3M0UsIDB4RjlFMSwgMHhGOUUyLCAweDEyMEMsDQotICAgIDB4RjlFMywgMHhGOUUzLCAweDEwNUIsIDB4RjlFNCwgMHhGOUU0LCAweDEyMTEsIDB4RjlFNSwgMHhGOUU1LCAweDEyMTMsDQotICAgIDB4RjlFNiwgMHhGOUU2LCAweDEyMTUsIDB4RjlFNywgMHhGOUU5LCAweDEyMTgsIDB4RjlFQSwgMHhGOUVBLCAweDEyMUMsDQotICAgIDB4RjlFQiwgMHhGOUVDLCAweDEwNUMsIDB4RjlFRCwgMHhGOUVELCAweDEyMUUsIDB4RjlFRSwgMHhGOUYwLCAweDEyMjAsDQotICAgIDB4RjlGMSwgMHhGOUY1LCAweDEyMjQsIDB4RjlGNiwgMHhGOUY2LCAweDEyMkEsIDB4RjlGNywgMHhGOUY5LCAweDEyMkQsDQotICAgIDB4RjlGQSwgMHhGOUZBLCAweDE0RTcsIDB4RjlGQiwgMHhGOUZCLCAweDE5NUUsIDB4RjlGQywgMHhGOUZDLCAweDE2NjMsDQotICAgIDB4RjlGRCwgMHhGOUZELCAweDE2OEIsIDB4RjlGRSwgMHhGOUZFLCAweDEwNUYsIDB4RjlGRiwgMHhGOUZGLCAweDE5NTQsDQotICAgIDB4RkEwMCwgMHhGQTAwLCAweDFBMUMsIDB4RkEwMSwgMHhGQTAxLCAweDEwQjcsIDB4RkEwMiwgMHhGQTAyLCAweDFCRTMsDQotICAgIDB4RkEwMywgMHhGQTAzLCAweDEwOTcsIDB4RkEwNCwgMHhGQTA0LCAweDEwQUEsIDB4RkEwNSwgMHhGQTA1LCAweDEwRjQsDQotICAgIDB4RkEwNiwgMHhGQTA2LCAweDFEOTQsIDB4RkEwNywgMHhGQTA3LCAweDEzRTAsIDB4RkEwOCwgMHhGQTA4LCAweDFFMUQsDQotICAgIDB4RkEwOSwgMHhGQTA5LCAweDBERTYsIDB4RkEwQSwgMHhGQTBBLCAweDBFM0MsIDB4RkEwQiwgMHhGQTBCLCAweDBFRTcsDQotICAgIDB4RkYwMSwgMHhGRjNCLCAweDAxMDgsIDB4RkYzQywgMHhGRjNDLCAweDAwNzAsIDB4RkYzRCwgMHhGRjVELCAweDAxNDQsDQotICAgIDB4RkY1RSwgMHhGRjVFLCAweDAwNzEsIDB4RkZFMCwgMHhGRkUxLCAweDAwOEYsIDB4RkZFMiwgMHhGRkUyLCAweDAwQzIsDQotICAgIDB4RkZFMywgMHhGRkUzLCAweDAxNjUsIDB4RkZFNSwgMHhGRkU1LCAweDAwOTEsIDB4RkZFNiwgMHhGRkU2LCAweDAxNDMsDQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgZ19GWENNQVBfVW5pS1NfVUNTMl9IXzFbODM5NCAqIDNdID0geworICAgIDB4MDAyMCwgMHgwMDdFLCAweDAwMDEsIDB4MDBBMSwgMHgwMEExLCAweDAwRDAsIDB4MDBBNCwgMHgwMEE0LCAweDAwRDYsCisgICAgMHgwMEE3LCAweDAwQTcsIDB4MDA5QiwgMHgwMEE4LCAweDAwQTgsIDB4MDA2QiwgMHgwMEFBLCAweDAwQUEsIDB4MDI5QywKKyAgICAweDAwQUIsIDB4MDBBQiwgMHgwMEIwLCAweDAwQjAsIDB4MDBCMCwgMHgwMDhBLCAweDAwQjEsIDB4MDBCMSwgMHgwMDgyLAorICAgIDB4MDBCMiwgMHgwMEIzLCAweDAzNEIsIDB4MDBCNCwgMHgwMEI0LCAweDAwQzcsIDB4MDBCNiwgMHgwMEI2LCAweDAwRjQsCisgICAgMHgwMEI4LCAweDAwQjgsIDB4MDBDRSwgMHgwMEI5LCAweDAwQjksIDB4MDM0QSwgMHgwMEJBLCAweDAwQkEsIDB4MDJBMywKKyAgICAweDAwQkIsIDB4MDBCQiwgMHgwMEIxLCAweDAwQkMsIDB4MDBCQywgMHgwMkVGLCAweDAwQkQsIDB4MDBCRCwgMHgwMkVDLAorICAgIDB4MDBCRSwgMHgwMEJFLCAweDAyRjAsIDB4MDBCRiwgMHgwMEJGLCAweDAwRDEsIDB4MDBDNiwgMHgwMEM2LCAweDAyOUEsCisgICAgMHgwMEQwLCAweDAwRDAsIDB4MDI5QiwgMHgwMEQ3LCAweDAwRDcsIDB4MDA4MywgMHgwMEQ4LCAweDAwRDgsIDB4MDJBMSwKKyAgICAweDAwREUsIDB4MDBERSwgMHgwMkE0LCAweDAwREYsIDB4MDBERiwgMHgwMzAwLCAweDAwRTYsIDB4MDBFNiwgMHgwMkY1LAorICAgIDB4MDBGMCwgMHgwMEYwLCAweDAyRjcsIDB4MDBGNywgMHgwMEY3LCAweDAwODQsIDB4MDBGOCwgMHgwMEY4LCAweDAyRkUsCisgICAgMHgwMEZFLCAweDAwRkUsIDB4MDMwMSwgMHgwMTExLCAweDAxMTEsIDB4MDJGNiwgMHgwMTI2LCAweDAxMjYsIDB4MDI5RCwKKyAgICAweDAxMjcsIDB4MDEyNywgMHgwMkY4LCAweDAxMzEsIDB4MDEzMSwgMHgwMkY5LCAweDAxMzIsIDB4MDEzMiwgMHgwMjlFLAorICAgIDB4MDEzMywgMHgwMTMzLCAweDAyRkEsIDB4MDEzOCwgMHgwMTM4LCAweDAyRkIsIDB4MDEzRiwgMHgwMTNGLCAweDAyOUYsCisgICAgMHgwMTQwLCAweDAxNDAsIDB4MDJGQywgMHgwMTQxLCAweDAxNDEsIDB4MDJBMCwgMHgwMTQyLCAweDAxNDIsIDB4MDJGRCwKKyAgICAweDAxNDksIDB4MDE0OSwgMHgwMzA0LCAweDAxNEEsIDB4MDE0QSwgMHgwMkE2LCAweDAxNEIsIDB4MDE0QiwgMHgwMzAzLAorICAgIDB4MDE1MiwgMHgwMTUyLCAweDAyQTIsIDB4MDE1MywgMHgwMTUzLCAweDAyRkYsIDB4MDE2NiwgMHgwMTY2LCAweDAyQTUsCisgICAgMHgwMTY3LCAweDAxNjcsIDB4MDMwMiwgMHgwMkJDLCAweDAyQkMsIDB4MjA1MywgMHgwMkM3LCAweDAyQzcsIDB4MDBDOSwKKyAgICAweDAyRDgsIDB4MDJEOCwgMHgwMENBLCAweDAyRDksIDB4MDJEOSwgMHgwMENELCAweDAyREEsIDB4MDJEQSwgMHgwMENDLAorICAgIDB4MDJEQiwgMHgwMkRCLCAweDAwQ0YsIDB4MDJEQywgMHgwMkRDLCAweDAwQzgsIDB4MDJERCwgMHgwMkRELCAweDAwQ0IsCisgICAgMHgwMzkxLCAweDAzQTEsIDB4MDFENywgMHgwM0EzLCAweDAzQTksIDB4MDFFOCwgMHgwM0IxLCAweDAzQzEsIDB4MDFFRiwKKyAgICAweDAzQzMsIDB4MDNDOSwgMHgwMjAwLCAweDA0MDEsIDB4MDQwMSwgMHgwNDAyLCAweDA0MTAsIDB4MDQxNSwgMHgwM0ZDLAorICAgIDB4MDQxNiwgMHgwNDM1LCAweDA0MDMsIDB4MDQzNiwgMHgwNDRGLCAweDA0MjQsIDB4MDQ1MSwgMHgwNDUxLCAweDA0MjMsCisgICAgMHgyMDEzLCAweDIwMTQsIDB4MDA2RCwgMHgyMDE2LCAweDIwMTYsIDB4MDA2RiwgMHgyMDE4LCAweDIwMTksIDB4MDA3MiwKKyAgICAweDIwMUIsIDB4MjAxQiwgMHgyMDJFLCAweDIwMUMsIDB4MjAxRCwgMHgwMDc0LCAweDIwMUYsIDB4MjAxRiwgMHgyMDJELAorICAgIDB4MjAyMCwgMHgyMDIxLCAweDAwRjUsIDB4MjAyMiwgMHgyMDIyLCAweDIxOUYsIDB4MjAyNSwgMHgyMDI2LCAweDAwNjksCisgICAgMHgyMDMwLCAweDIwMzAsIDB4MDBEOCwgMHgyMDMyLCAweDIwMzMsIDB4MDA4QiwgMHgyMDM0LCAweDIwMzQsIDB4MjE4NiwKKyAgICAweDIwMzUsIDB4MjAzNSwgMHgyNDZFLCAweDIwMzYsIDB4MjAzNiwgMHgyNDZDLCAweDIwMzksIDB4MjAzQSwgMHgyMUE0LAorICAgIDB4MjAzQiwgMHgyMDNCLCAweDAwOUMsIDB4MjAzQywgMHgyMDNDLCAweDIyM0IsIDB4MjA0MiwgMHgyMDQyLCAweDIxOTcsCisgICAgMHgyMDc0LCAweDIwNzQsIDB4MDM0RCwgMHgyMDdBLCAweDIwN0IsIDB4MjAyRiwgMHgyMDdDLCAweDIwN0MsIDB4MjAzOCwKKyAgICAweDIwN0QsIDB4MjA3RSwgMHgyMDNBLCAweDIwN0YsIDB4MjA3RiwgMHgwMzRFLCAweDIwODEsIDB4MjA4NCwgMHgwMzRGLAorICAgIDB4MjEwMywgMHgyMTAzLCAweDAwOEQsIDB4MjEwOSwgMHgyMTA5LCAweDAwRDcsIDB4MjExMywgMHgyMTEzLCAweDAyNEUsCisgICAgMHgyMTE2LCAweDIxMTYsIDB4MDEwMiwgMHgyMTIxLCAweDIxMjEsIDB4MDEwNywgMHgyMTIyLCAweDIxMjIsIDB4MDEwNCwKKyAgICAweDIxMjYsIDB4MjEyNiwgMHgwMjgzLCAweDIxMkIsIDB4MjEyQiwgMHgwMDhFLCAweDIxNTMsIDB4MjE1NCwgMHgwMkVELAorICAgIDB4MjE1QiwgMHgyMTVFLCAweDAyRjEsIDB4MjE2MCwgMHgyMTY5LCAweDAxQ0QsIDB4MjE3MCwgMHgyMTc5LCAweDAxQzMsCisgICAgMHgyMTkwLCAweDIxOTEsIDB4MDBBQiwgMHgyMTkyLCAweDIxOTIsIDB4MDBBQSwgMHgyMTkzLCAweDIxOTQsIDB4MDBBRCwKKyAgICAweDIxOTUsIDB4MjE5NSwgMHgwMEY3LCAweDIxOTYsIDB4MjE5NiwgMHgwMEZBLCAweDIxOTcsIDB4MjE5NywgMHgwMEY4LAorICAgIDB4MjE5OCwgMHgyMTk4LCAweDAwRkIsIDB4MjE5OSwgMHgyMTk5LCAweDAwRjksIDB4MjFCMCwgMHgyMUIwLCAweDIyQTQsCisgICAgMHgyMUIxLCAweDIxQjEsIDB4MjJBMSwgMHgyMUIyLCAweDIxQjIsIDB4MjJBMCwgMHgyMUIzLCAweDIxQjMsIDB4MjJBNSwKKyAgICAweDIxQjQsIDB4MjFCNCwgMHgyMkEzLCAweDIxQkMsIDB4MjFCQywgMHgyMkI0LCAweDIxQzAsIDB4MjFDMCwgMHgyMkI1LAorICAgIDB4MjFDNCwgMHgyMUM1LCAweDIyQzAsIDB4MjFDRCwgMHgyMUNELCAweDIyNzAsIDB4MjFDRiwgMHgyMUNGLCAweDIyNkYsCisgICAgMHgyMUQwLCAweDIxRDAsIDB4MjI2RSwgMHgyMUQxLCAweDIxRDEsIDB4MjI5NiwgMHgyMUQyLCAweDIxRDIsIDB4MDBDMywKKyAgICAweDIxRDMsIDB4MjFEMywgMHgyMjk3LCAweDIxRDQsIDB4MjFENCwgMHgwMEM0LCAweDIxRTAsIDB4MjFFMCwgMHgyM0U2LAorICAgIDB4MjFFMSwgMHgyMUUxLCAweDIzRTgsIDB4MjFFMiwgMHgyMUUyLCAweDIzRTcsIDB4MjFFMywgMHgyMUUzLCAweDIzRTksCisgICAgMHgyMUU2LCAweDIxRTYsIDB4MjNFRSwgMHgyMUU3LCAweDIxRTcsIDB4MjNGMCwgMHgyMUU4LCAweDIxRTgsIDB4MjNFRiwKKyAgICAweDIxRTksIDB4MjFFOSwgMHgyM0YxLCAweDIyMDAsIDB4MjIwMCwgMHgwMEM1LCAweDIyMDIsIDB4MjIwMiwgMHgwMDk3LAorICAgIDB4MjIwMywgMHgyMjAzLCAweDAwQzYsIDB4MjIwNiwgMHgyMjA2LCAweDIyMEIsIDB4MjIwNywgMHgyMjA3LCAweDAwOTgsCisgICAgMHgyMjA4LCAweDIyMDgsIDB4MDBCOCwgMHgyMjA5LCAweDIyMDksIDB4MjIyRCwgMHgyMjBCLCAweDIyMEIsIDB4MDBCOSwKKyAgICAweDIyMEMsIDB4MjIwQywgMHgyMjJFLCAweDIyMEYsIDB4MjIwRiwgMHgwMEQ1LCAweDIyMTEsIDB4MjIxMSwgMHgwMEQ0LAorICAgIDB4MjIxMywgMHgyMjEzLCAweDIyMTYsIDB4MjIxQSwgMHgyMjFBLCAweDAwQjIsIDB4MjIxRCwgMHgyMjFELCAweDAwQjQsCisgICAgMHgyMjFFLCAweDIyMUUsIDB4MDA4OCwgMHgyMjFGLCAweDIyMUYsIDB4MjIwRCwgMHgyMjIwLCAweDIyMjAsIDB4MDA5NCwKKyAgICAweDIyMjIsIDB4MjIyMiwgMHgyMjIyLCAweDIyMjUsIDB4MjIyNiwgMHgyMjBGLCAweDIyMjcsIDB4MjIyOCwgMHgwMEMwLAorICAgIDB4MjIyOSwgMHgyMjI5LCAweDAwQkYsIDB4MjIyQSwgMHgyMjJBLCAweDAwQkUsIDB4MjIyQiwgMHgyMjJDLCAweDAwQjYsCisgICAgMHgyMjJFLCAweDIyMkUsIDB4MDBEMywgMHgyMjM0LCAweDIyMzQsIDB4MDA4OSwgMHgyMjM1LCAweDIyMzUsIDB4MDBCNSwKKyAgICAweDIyMzYsIDB4MjIzNiwgMHgwMEQyLCAweDIyMzcsIDB4MjIzNywgMHgyMDgxLCAweDIyM0QsIDB4MjIzRCwgMHgwMEIzLAorICAgIDB4MjI0MywgMHgyMjQzLCAweDIxMzQsIDB4MjI0NSwgMHgyMjQ1LCAweDIxMzMsIDB4MjI0OCwgMHgyMjQ4LCAweDIxMzUsCisgICAgMHgyMjUwLCAweDIyNTAsIDB4MjIyMywgMHgyMjUxLCAweDIyNTEsIDB4MjIxMywgMHgyMjUyLCAweDIyNTIsIDB4MDA5QSwKKyAgICAweDIyNTMsIDB4MjI1MywgMHgyMjEyLCAweDIyNUEsIDB4MjI1QSwgMHgyMjMxLCAweDIyNjAsIDB4MjI2MCwgMHgwMDg1LAorICAgIDB4MjI2MSwgMHgyMjYxLCAweDAwOTksIDB4MjI2MiwgMHgyMjYyLCAweDIyMUUsIDB4MjI2NCwgMHgyMjY1LCAweDAwODYsCisgICAgMHgyMjY2LCAweDIyNjcsIDB4MjIxNCwgMHgyMjZFLCAweDIyNkYsIDB4MjIyOSwgMHgyMjcwLCAweDIyNzMsIDB4MjEyMSwKKyAgICAweDIyNzYsIDB4MjI3NywgMHgyMTI5LCAweDIyNzksIDB4MjI3OSwgMHgyMTJCLCAweDIyN0EsIDB4MjI3QiwgMHgyMTFCLAorICAgIDB4MjI4MCwgMHgyMjgxLCAweDIxMUYsIDB4MjI4MiwgMHgyMjgzLCAweDAwQkMsIDB4MjI4NCwgMHgyMjg0LCAweDIyMkMsCisgICAgMHgyMjg1LCAweDIyODUsIDB4MjIyQiwgMHgyMjg2LCAweDIyODcsIDB4MDBCQSwgMHgyMjhBLCAweDIyOEEsIDB4MjEyNiwKKyAgICAweDIyOEIsIDB4MjI4QiwgMHgyMTI4LCAweDIyOTUsIDB4MjI5NywgMHgyMjE3LCAweDIyQTMsIDB4MjJBMywgMHgyMjI2LAorICAgIDB4MjJBNCwgMHgyMkE0LCAweDIxMzcsIDB4MjJBNSwgMHgyMkE1LCAweDAwOTUsIDB4MjJCQiwgMHgyMkJDLCAweDIyMkYsCisgICAgMHgyMkNFLCAweDIyQ0YsIDB4MjExRCwgMHgyMkRBLCAweDIyREIsIDB4MjEyQywgMHgyMkVFLCAweDIyRUUsIDB4MjA4MCwKKyAgICAweDIyRUYsIDB4MjJFRiwgMHgwMDZBLCAweDIzMDYsIDB4MjMwNiwgMHgyMjMyLCAweDIzMTIsIDB4MjMxMiwgMHgwMDk2LAorICAgIDB4MjMxNCwgMHgyMzE0LCAweDIyMUIsIDB4MjQ2MCwgMHgyNDZFLCAweDAyREQsIDB4MjQ2RiwgMHgyNDczLCAweDIyNTcsCisgICAgMHgyNDc0LCAweDI0ODIsIDB4MDMzQiwgMHgyNDgzLCAweDI0ODcsIDB4MjM1MiwgMHgyNDlDLCAweDI0QjUsIDB4MDMyMSwKKyAgICAweDI0QjYsIDB4MjRDRiwgMHgyMEM0LCAweDI0RDAsIDB4MjRFOSwgMHgwMkMzLCAweDI1MDAsIDB4MjUwMCwgMHgwMjA3LAorICAgIDB4MjUwMSwgMHgyNTAxLCAweDAyMTIsIDB4MjUwMiwgMHgyNTAyLCAweDAyMDgsIDB4MjUwMywgMHgyNTAzLCAweDAyMTMsCisgICAgMHgyNTBDLCAweDI1MEMsIDB4MDIwOSwgMHgyNTBELCAweDI1MEQsIDB4MDIyRSwgMHgyNTBFLCAweDI1MEUsIDB4MDIyRCwKKyAgICAweDI1MEYsIDB4MjUwRiwgMHgwMjE0LCAweDI1MTAsIDB4MjUxMCwgMHgwMjBBLCAweDI1MTEsIDB4MjUxMSwgMHgwMjI4LAorICAgIDB4MjUxMiwgMHgyNTEyLCAweDAyMjcsIDB4MjUxMywgMHgyNTEzLCAweDAyMTUsIDB4MjUxNCwgMHgyNTE0LCAweDAyMEMsCisgICAgMHgyNTE1LCAweDI1MTUsIDB4MDIyQywgMHgyNTE2LCAweDI1MTYsIDB4MDIyQiwgMHgyNTE3LCAweDI1MTcsIDB4MDIxNywKKyAgICAweDI1MTgsIDB4MjUxOCwgMHgwMjBCLCAweDI1MTksIDB4MjUxOSwgMHgwMjJBLCAweDI1MUEsIDB4MjUxQSwgMHgwMjI5LAorICAgIDB4MjUxQiwgMHgyNTFCLCAweDAyMTYsIDB4MjUxQywgMHgyNTFDLCAweDAyMEQsIDB4MjUxRCwgMHgyNTFELCAweDAyMjIsCisgICAgMHgyNTFFLCAweDI1MUYsIDB4MDIyRiwgMHgyNTIwLCAweDI1MjAsIDB4MDIxRCwgMHgyNTIxLCAweDI1MjIsIDB4MDIzMSwKKyAgICAweDI1MjMsIDB4MjUyMywgMHgwMjE4LCAweDI1MjQsIDB4MjUyNCwgMHgwMjBGLCAweDI1MjUsIDB4MjUyNSwgMHgwMjI0LAorICAgIDB4MjUyNiwgMHgyNTI3LCAweDAyMzMsIDB4MjUyOCwgMHgyNTI4LCAweDAyMUYsIDB4MjUyOSwgMHgyNTJBLCAweDAyMzUsCisgICAgMHgyNTJCLCAweDI1MkIsIDB4MDIxQSwgMHgyNTJDLCAweDI1MkMsIDB4MDIwRSwgMHgyNTJELCAweDI1MkUsIDB4MDIzNywKKyAgICAweDI1MkYsIDB4MjUyRiwgMHgwMjFFLCAweDI1MzAsIDB4MjUzMCwgMHgwMjIzLCAweDI1MzEsIDB4MjUzMiwgMHgwMjM5LAorICAgIDB4MjUzMywgMHgyNTMzLCAweDAyMTksIDB4MjUzNCwgMHgyNTM0LCAweDAyMTAsIDB4MjUzNSwgMHgyNTM2LCAweDAyM0IsCisgICAgMHgyNTM3LCAweDI1MzcsIDB4MDIyMCwgMHgyNTM4LCAweDI1MzgsIDB4MDIyNSwgMHgyNTM5LCAweDI1M0EsIDB4MDIzRCwKKyAgICAweDI1M0IsIDB4MjUzQiwgMHgwMjFCLCAweDI1M0MsIDB4MjUzQywgMHgwMjExLCAweDI1M0QsIDB4MjUzRSwgMHgwMjNGLAorICAgIDB4MjUzRiwgMHgyNTNGLCAweDAyMjEsIDB4MjU0MCwgMHgyNTQxLCAweDAyNDEsIDB4MjU0MiwgMHgyNTQyLCAweDAyMjYsCisgICAgMHgyNTQzLCAweDI1NEEsIDB4MDI0MywgMHgyNTRCLCAweDI1NEIsIDB4MDIxQywgMHgyNTkyLCAweDI1OTIsIDB4MDBFOCwKKyAgICAweDI1QTAsIDB4MjVBMCwgMHgwMEE1LCAweDI1QTEsIDB4MjVBMSwgMHgwMEE0LCAweDI1QTMsIDB4MjVBMywgMHgwMEU1LAorICAgIDB4MjVBNCwgMHgyNUE1LCAweDAwRTksIDB4MjVBNiwgMHgyNUE2LCAweDAwRUQsIDB4MjVBNywgMHgyNUE3LCAweDAwRUMsCisgICAgMHgyNUE4LCAweDI1QTgsIDB4MDBFQiwgMHgyNUE5LCAweDI1QTksIDB4MDBFRSwgMHgyNUIxLCAweDI1QjEsIDB4MjIyMCwKKyAgICAweDI1QjIsIDB4MjVCMiwgMHgwMEE3LCAweDI1QjMsIDB4MjVCMywgMHgwMEE2LCAweDI1QjUsIDB4MjVCNSwgMHgyMjRDLAorICAgIDB4MjVCNiwgMHgyNUI2LCAweDAwREMsIDB4MjVCNywgMHgyNUI3LCAweDAwREIsIDB4MjVCOSwgMHgyNUI5LCAweDIyNEQsCisgICAgMHgyNUJDLCAweDI1QkMsIDB4MDBBOSwgMHgyNUJELCAweDI1QkQsIDB4MDBBOCwgMHgyNUJGLCAweDI1QkYsIDB4MjI0QiwKKyAgICAweDI1QzAsIDB4MjVDMCwgMHgwMERBLCAweDI1QzEsIDB4MjVDMSwgMHgwMEQ5LCAweDI1QzMsIDB4MjVDMywgMHgyMjRFLAorICAgIDB4MjVDNiwgMHgyNUM2LCAweDAwQTMsIDB4MjVDNywgMHgyNUM3LCAweDAwQTIsIDB4MjVDOCwgMHgyNUM4LCAweDAwRTQsCisgICAgMHgyNUM5LCAweDI1QzksIDB4MDBFMywgMHgyNUNBLCAweDI1Q0EsIDB4MjI1MywgMHgyNUNCLCAweDI1Q0IsIDB4MDA5RiwKKyAgICAweDI1Q0MsIDB4MjVDQywgMHgyMUJGLCAweDI1Q0UsIDB4MjVDRSwgMHgwMEExLCAweDI1Q0YsIDB4MjVDRiwgMHgwMEEwLAorICAgIDB4MjVEMCwgMHgyNUQxLCAweDAwRTYsIDB4MjVFNiwgMHgyNUU2LCAweDIyNDcsIDB4MjVFRiwgMHgyNUVGLCAweDIxQjksCisgICAgMHgyNjA1LCAweDI2MDUsIDB4MDA5RSwgMHgyNjA2LCAweDI2MDYsIDB4MDA5RCwgMHgyNjBFLCAweDI2MEUsIDB4MDBGMSwKKyAgICAweDI2MEYsIDB4MjYwRiwgMHgwMEYwLCAweDI2MUMsIDB4MjYxQywgMHgwMEYyLCAweDI2MUQsIDB4MjYxRCwgMHgyNDA2LAorICAgIDB4MjYxRSwgMHgyNjFFLCAweDAwRjMsIDB4MjYxRiwgMHgyNjFGLCAweDI0MDcsIDB4MjYyRiwgMHgyNjJGLCAweDIxRDgsCisgICAgMHgyNjQwLCAweDI2NDAsIDB4MDA5MywgMHgyNjQyLCAweDI2NDIsIDB4MDA5MiwgMHgyNjYwLCAweDI2NjEsIDB4MDBERSwKKyAgICAweDI2NjMsIDB4MjY2MywgMHgwMEUyLCAweDI2NjQsIDB4MjY2NCwgMHgwMERELCAweDI2NjUsIDB4MjY2NSwgMHgwMEUwLAorICAgIDB4MjY2NywgMHgyNjY3LCAweDAwRTEsIDB4MjY2OCwgMHgyNjY4LCAweDAwRUYsIDB4MjY2OSwgMHgyNjZBLCAweDAwRkQsCisgICAgMHgyNjZDLCAweDI2NkMsIDB4MDBGRiwgMHgyNjZELCAweDI2NkQsIDB4MDBGQywgMHgyNjZGLCAweDI2NkYsIDB4MjE5MiwKKyAgICAweDI3MTYsIDB4MjcxNiwgMHgyMUI3LCAweDI3MUEsIDB4MjcxQSwgMHgyMUI2LCAweDI3M0QsIDB4MjczRCwgMHgyMTlDLAorICAgIDB4Mjc1NiwgMHgyNzU2LCAweDIxQkQsIDB4Mjc3NiwgMHgyNzdGLCAweDIxRTEsIDB4Mjc4QSwgMHgyNzkzLCAweDIwOTYsCisgICAgMHgzMDAwLCAweDMwMDIsIDB4MDA2NSwgMHgzMDAzLCAweDMwMDMsIDB4MDA2QywgMHgzMDA4LCAweDMwMTEsIDB4MDA3OCwKKyAgICAweDMwMTIsIDB4MzAxMiwgMHgyMUZDLCAweDMwMTMsIDB4MzAxMywgMHgwMEFGLCAweDMwMTQsIDB4MzAxNSwgMHgwMDc2LAorICAgIDB4MzAxNiwgMHgzMDE5LCAweDIwMUIsIDB4MzAxRSwgMHgzMDFGLCAweDI0NkEsIDB4MzAyMCwgMHgzMDIwLCAweDIxREYsCisgICAgMHgzMDM2LCAweDMwMzYsIDB4MjFGRCwgMHgzMDQxLCAweDMwOTMsIDB4MDM1MywgMHgzMEExLCAweDMwRjYsIDB4MDNBNiwKKyAgICAweDMwRkIsIDB4MzBGQiwgMHgwMDY4LCAweDMwRkMsIDB4MzBGQywgMHgyNDcyLCAweDMxMzEsIDB4MzE2MywgMHgwMTY2LAorICAgIDB4MzE2NCwgMHgzMTY0LCAweDAwNjUsIDB4MzE2NSwgMHgzMThFLCAweDAxOTksIDB4MzIwMCwgMHgzMjFCLCAweDAzMDUsCisgICAgMHgzMjFDLCAweDMyMUMsIDB4MDEwMSwgMHgzMjMxLCAweDMyMzEsIDB4MjI1NCwgMHgzMjM5LCAweDMyMzksIDB4MjI1NSwKKyAgICAweDMyNjAsIDB4MzI3QiwgMHgwMkE3LCAweDMyN0YsIDB4MzI3RiwgMHgwMTAwLCAweDMyOEEsIDB4MzI4RiwgMHgyNDU1LAorICAgIDB4MzI5MCwgMHgzMjkwLCAweDI0NTQsIDB4MzI5NCwgMHgzMjk0LCAweDIzNzgsIDB4MzI5RSwgMHgzMjlFLCAweDIyMzksCisgICAgMHgzMkE1LCAweDMyQTUsIDB4MjM4OCwgMHgzMzgwLCAweDMzODQsIDB4MDI3MywgMHgzMzg4LCAweDMzODksIDB4MDI2NCwKKyAgICAweDMzOEEsIDB4MzM4QywgMHgwMjg2LCAweDMzOEQsIDB4MzM4RiwgMHgwMjYwLCAweDMzOTAsIDB4MzM5NCwgMHgwMjdFLAorICAgIDB4MzM5NSwgMHgzMzk3LCAweDAyNEIsIDB4MzM5OCwgMHgzMzk4LCAweDAyNEYsIDB4MzM5OSwgMHgzM0EyLCAweDAyNTUsCisgICAgMHgzM0EzLCAweDMzQTYsIDB4MDI1MSwgMHgzM0E3LCAweDMzQTgsIDB4MDI2NywgMHgzM0E5LCAweDMzQUMsIDB4MDI4RiwKKyAgICAweDMzQUQsIDB4MzNBRiwgMHgwMjhCLCAweDMzQjAsIDB4MzNCOSwgMHgwMjY5LCAweDMzQkEsIDB4MzNCRiwgMHgwMjc4LAorICAgIDB4MzNDMCwgMHgzM0MxLCAweDAyODQsIDB4MzNDMiwgMHgzM0MyLCAweDAxMDUsIDB4MzNDMywgMHgzM0MzLCAweDAyOTYsCisgICAgMHgzM0M0LCAweDMzQzQsIDB4MDI1MCwgMHgzM0M1LCAweDMzQzUsIDB4MDI4QSwgMHgzM0M2LCAweDMzQzYsIDB4MDI5OSwKKyAgICAweDMzQzcsIDB4MzNDNywgMHgwMTAzLCAweDMzQzgsIDB4MzNDOCwgMHgwMjY2LCAweDMzQzksIDB4MzNDOSwgMHgwMjk3LAorICAgIDB4MzNDQSwgMHgzM0NBLCAweDAyNUYsIDB4MzNDQiwgMHgzM0NCLCAweDIyNTYsIDB4MzNDRiwgMHgzM0NGLCAweDAyNjMsCisgICAgMHgzM0QwLCAweDMzRDAsIDB4MDI5NCwgMHgzM0QzLCAweDMzRDMsIDB4MDI5NSwgMHgzM0Q2LCAweDMzRDYsIDB4MDI4OSwKKyAgICAweDMzRDgsIDB4MzNEOCwgMHgwMTA2LCAweDMzREIsIDB4MzNEQiwgMHgwMjhFLCAweDMzREMsIDB4MzNEQywgMHgwMjk4LAorICAgIDB4MzNERCwgMHgzM0RELCAweDAyOTMsIDB4NEUwMCwgMHg0RTAwLCAweDE5M0MsIDB4NEUwMSwgMHg0RTAxLCAweDFBMzAsCisgICAgMHg0RTAzLCAweDRFMDMsIDB4MUNDNCwgMHg0RTA3LCAweDRFMDcsIDB4MTIzRSwgMHg0RTA4LCAweDRFMDgsIDB4MTk4NiwKKyAgICAweDRFMDksIDB4NEUwOSwgMHgxNEM4LCAweDRFMEEsIDB4NEUwQSwgMHgxNEQzLCAweDRFMEIsIDB4NEUwQiwgMHgxREMwLAorICAgIDB4NEUwRCwgMHg0RTBELCAweDEzRjUsIDB4NEUxMSwgMHg0RTExLCAweDFDNzgsIDB4NEUxNCwgMHg0RTE0LCAweDFCODEsCisgICAgMHg0RTE1LCAweDRFMTUsIDB4MTQzRCwgMHg0RTE2LCAweDRFMTYsIDB4MTU3NCwgMHg0RTE4LCAweDRFMTgsIDB4MEYzNSwKKyAgICAweDRFMTksIDB4NEUxOSwgMHgxM0IxLCAweDRFMUUsIDB4NEUxRSwgMHgxNjMyLCAweDRFMkQsIDB4NEUyRCwgMHgxQjBBLAorICAgIDB4NEUzMiwgMHg0RTMyLCAweDBFREEsIDB4NEUzOCwgMHg0RTM4LCAweDFFQ0EsIDB4NEUzOSwgMHg0RTM5LCAweDEwNjAsCisgICAgMHg0RTNCLCAweDRFM0IsIDB4MUFDQywgMHg0RTQyLCAweDRFNDIsIDB4MTc4RCwgMHg0RTQzLCAweDRFNDMsIDB4MTAzQSwKKyAgICAweDRFNDUsIDB4NEU0NSwgMHgwRjM2LCAweDRFNEIsIDB4NEU0QiwgMHgxQjFFLCAweDRFNEQsIDB4NEU0RCwgMHgxNDc5LAorICAgIDB4NEU0RSwgMHg0RTRFLCAweDFFNzgsIDB4NEU0RiwgMHg0RTRGLCAweDFEQkUsIDB4NEU1NiwgMHg0RTU2LCAweDBGMEYsCisgICAgMHg0RTU4LCAweDRFNTgsIDB4MTYzMywgMHg0RTU5LCAweDRFNTksIDB4MThFQywgMHg0RTVELCAweDRFNUQsIDB4MEYzNywKKyAgICAweDRFNUUsIDB4NEU1RSwgMHgwRTFELCAweDRFNUYsIDB4NEU1RiwgMHgxNkU2LCAweDRFNkIsIDB4NEU2QiwgMHgwREFDLAorICAgIDB4NEU2RCwgMHg0RTZELCAweDEwRTksIDB4NEU3MywgMHg0RTczLCAweDE4QTUsIDB4NEU3NiwgMHg0RTc2LCAweDEzRTQsCisgICAgMHg0RTc3LCAweDRFNzcsIDB4MTRDMywgMHg0RTdFLCAweDRFN0UsIDB4MEUxMSwgMHg0RTgyLCAweDRFODIsIDB4MTEyNSwKKyAgICAweDRFODYsIDB4NEU4NiwgMHgxMUM3LCAweDRFODgsIDB4NEU4OCwgMHgxNzJFLCAweDRFOEIsIDB4NEU4QiwgMHgxNDdBLAorICAgIDB4NEU4QywgMHg0RThDLCAweDE5MEQsIDB4NEU4RSwgMHg0RThFLCAweDE4MzUsIDB4NEU5MCwgMHg0RTkwLCAweDE4NkMsCisgICAgMHg0RTkxLCAweDRFOTEsIDB4MTg1RSwgMHg0RTkyLCAweDRFOTIsIDB4MUU3OSwgMHg0RTk0LCAweDRFOTQsIDB4MTdBMSwKKyAgICAweDRFOTUsIDB4NEU5NSwgMHgxQTMxLCAweDRFOTgsIDB4NEU5OCwgMHgwRkRBLCAweDRFOUIsIDB4NEU5QiwgMHgxNDdCLAorICAgIDB4NEU5RSwgMHg0RTlFLCAweDE2OEYsIDB4NEVBMSwgMHg0RUExLCAweDEyNTgsIDB4NEVBMiwgMHg0RUEyLCAweDFERjYsCisgICAgMHg0RUE0LCAweDRFQTQsIDB4MEYxQywgMHg0RUE1LCAweDRFQTUsIDB4MUUwNSwgMHg0RUE2LCAweDRFQTYsIDB4MTczQiwKKyAgICAweDRFQTgsIDB4NEVBOCwgMHgxRTVCLCAweDRFQUIsIDB4NEVBQiwgMHgxRTFFLCAweDRFQUMsIDB4NEVBQywgMHgwRTRDLAorICAgIDB4NEVBRCwgMHg0RUFELCAweDFBMzIsIDB4NEVBRSwgMHg0RUFFLCAweDExNEIsIDB4NEVCNiwgMHg0RUI2LCAweDEwNjEsCisgICAgMHg0RUJBLCAweDRFQkEsIDB4MTkyQiwgMHg0RUMwLCAweDRFQzAsIDB4MTY4QiwgMHg0RUMxLCAweDRFQzEsIDB4MTkyQywKKyAgICAweDRFQzQsIDB4NEVDNCwgMHgxQ0EzLCAweDRFQzcsIDB4NEVDNywgMHgwRjM4LCAweDRFQ0EsIDB4NEVDQSwgMHgwRkM2LAorICAgIDB4NEVDQiwgMHg0RUNCLCAweDBERTgsIDB4NEVDRCwgMHg0RUNELCAweDE5NEYsIDB4NEVENCwgMHg0RUQ0LCAweDE5NTMsCisgICAgMHg0RUQ1LCAweDRFRDUsIDB4MTQ3QywgMHg0RUQ2LCAweDRFRDYsIDB4MUNENCwgMHg0RUQ3LCAweDRFRDcsIDB4MTk4NywKKyAgICAweDRFRDgsIDB4NEVEOCwgMHgxM0Y2LCAweDRFRDksIDB4NEVEOSwgMHgxNTJBLCAweDRFREQsIDB4NEVERCwgMHgxMEVCLAorICAgIDB4NEVERiwgMHg0RURGLCAweDFCRUMsIDB4NEVFMywgMHg0RUUzLCAweDEwOUEsIDB4NEVFNCwgMHg0RUU0LCAweDExODksCisgICAgMHg0RUU1LCAweDRFRTUsIDB4MTkwRSwgMHg0RUYwLCAweDRFRjAsIDB4MTZDOSwgMHg0RUYyLCAweDRFRjIsIDB4MUIwQiwKKyAgICAweDRFRjYsIDB4NEVGNiwgMHgwRTEyLCAweDRFRjcsIDB4NEVGNywgMHgwREU5LCAweDRFRkIsIDB4NEVGQiwgMHgxOTQ1LAorICAgIDB4NEYwMSwgMHg0RjAxLCAweDBGREUsIDB4NEYwOSwgMHg0RjA5LCAweDFERjcsIDB4NEYwQSwgMHg0RjBBLCAweDE5MEYsCisgICAgMHg0RjBCLCAweDRGMEIsIDB4MEZEMywgMHg0RjBELCAweDRGMEQsIDB4MTdBMiwgMHg0RjBFLCAweDRGMEUsIDB4MEZERiwKKyAgICAweDRGMEYsIDB4NEYwRiwgMHgxM0QyLCAweDRGMTAsIDB4NEYxMCwgMHgxMzhELCAweDRGMTEsIDB4NEYxMSwgMHgxRjQ1LAorICAgIDB4NEYyRiwgMHg0RjJGLCAweDEzN0MsIDB4NEYzNCwgMHg0RjM0LCAweDEzMjksIDB4NEYzNiwgMHg0RjM2LCAweDExOEEsCisgICAgMHg0RjM4LCAweDRGMzgsIDB4MTY2NywgMHg0RjNBLCAweDRGM0EsIDB4MTQ3RCwgMHg0RjNDLCAweDRGM0MsIDB4MTQ3RSwKKyAgICAweDRGM0QsIDB4NEYzRCwgMHgwRDZDLCAweDRGNDMsIDB4NEY0MywgMHgxOUYzLCAweDRGNDYsIDB4NEY0NiwgMHgxMDYyLAorICAgIDB4NEY0NywgMHg0RjQ3LCAweDE5QkYsIDB4NEY0OCwgMHg0RjQ4LCAweDFENzgsIDB4NEY0RCwgMHg0RjRELCAweDE4OEMsCisgICAgMHg0RjRFLCAweDRGNEUsIDB4MTlDMCwgMHg0RjRGLCAweDRGNEYsIDB4MUFDRCwgMHg0RjUwLCAweDRGNTAsIDB4MUFDNiwKKyAgICAweDRGNTEsIDB4NEY1MSwgMHgxODM2LCAweDRGNTUsIDB4NEY1NSwgMHgxREMxLCAweDRGNTksIDB4NEY1OSwgMHgxNzJGLAorICAgIDB4NEY1QSwgMHg0RjVBLCAweDE5M0QsIDB4NEY1QiwgMHg0RjVCLCAweDE0MzMsIDB4NEY1QywgMHg0RjVDLCAweDE5NkQsCisgICAgMHg0RjY5LCAweDRGNjksIDB4MUQ0RSwgMHg0RjZGLCAweDRGNkYsIDB4MTZGNywgMHg0RjcwLCAweDRGNzAsIDB4MTM3RCwKKyAgICAweDRGNzMsIDB4NEY3MywgMHgwRDZELCAweDRGNzYsIDB4NEY3NiwgMHgxMDFGLCAweDRGN0EsIDB4NEY3QSwgMHgxOUY0LAorICAgIDB4NEY3RSwgMHg0RjdFLCAweDE5M0UsIDB4NEY3RiwgMHg0RjdGLCAweDE0N0YsIDB4NEY4MSwgMHg0RjgxLCAweDE2NjgsCisgICAgMHg0RjgzLCAweDRGODMsIDB4MEQ5NCwgMHg0Rjg0LCAweDRGODQsIDB4MUI2NywgMHg0Rjg2LCAweDRGODYsIDB4MTE0NCwKKyAgICAweDRGODgsIDB4NEY4OCwgMHgxQ0E4LCAweDRGOEEsIDB4NEY4QSwgMHgwRUZGLCAweDRGOEIsIDB4NEY4QiwgMHgxMTlBLAorICAgIDB4NEY4RCwgMHg0RjhELCAweDE2M0MsIDB4NEY4RiwgMHg0RjhGLCAweDFBQ0UsIDB4NEY5MSwgMHg0RjkxLCAweDE4QTYsCisgICAgMHg0Rjk2LCAweDRGOTYsIDB4MTFGMiwgMHg0Rjk4LCAweDRGOTgsIDB4MUI4MiwgMHg0RjlCLCAweDRGOUIsIDB4MEVDQSwKKyAgICAweDRGOUQsIDB4NEY5RCwgMHgxOEZBLCAweDRGQUUsIDB4NEZBRSwgMHgxMjlDLCAweDRGQUYsIDB4NEZBRiwgMHgxRjFFLAorICAgIDB4NEZCNSwgMHg0RkI1LCAweDFDQzcsIDB4NEZCNiwgMHg0RkI2LCAweDExNTgsIDB4NEZCRiwgMHg0RkJGLCAweDFENUUsCisgICAgMHg0RkMyLCAweDRGQzIsIDB4MEU3OSwgMHg0RkMzLCAweDRGQzMsIDB4MUM0OSwgMHg0RkM0LCAweDRGQzQsIDB4MTY5MCwKKyAgICAweDRGQzksIDB4NEZDOSwgMHgxN0EzLCAweDRGQ0EsIDB4NEZDQSwgMHgxQUY2LCAweDRGQ0UsIDB4NEZDRSwgMHgxQTdFLAorICAgIDB4NEZEMSwgMHg0RkQxLCAweDE4MUUsIDB4NEZEMywgMHg0RkQzLCAweDBFNEQsIDB4NEZENCwgMHg0RkQ0LCAweDFFMzYsCisgICAgMHg0RkQ3LCAweDRGRDcsIDB4MTVBMSwgMHg0RkRBLCAweDRGREEsIDB4MTIwNSwgMHg0RkRELCAweDRGREQsIDB4MTNDMiwKKyAgICAweDRGREYsIDB4NEZERiwgMHgxNDgwLCAweDRGRTAsIDB4NEZFMCwgMHgxRTRGLCAweDRGRTEsIDB4NEZFMSwgMHgxNjY5LAorICAgIDB4NEZFRSwgMHg0RkVFLCAweDE1QkYsIDB4NEZFRiwgMHg0RkVGLCAweDEzRjcsIDB4NEZGMSwgMHg0RkYxLCAweDBGMzksCisgICAgMHg0RkYzLCAweDRGRjMsIDB4MTM2QSwgMHg0RkY1LCAweDRGRjUsIDB4MUQ5OCwgMHg0RkY4LCAweDRGRjgsIDB4MTNFNSwKKyAgICAweDRGRkEsIDB4NEZGQSwgMHgxNzI1LCAweDUwMDIsIDB4NTAwMiwgMHgxM0IyLCAweDUwMDYsIDB4NTAwNiwgMHgxMTRDLAorICAgIDB4NTAwOSwgMHg1MDA5LCAweDFCQjQsIDB4NTAwQiwgMHg1MDBCLCAweDBERUEsIDB4NTAwRCwgMHg1MDBELCAweDEzNjksCisgICAgMHg1MDExLCAweDUwMTEsIDB4MTJFNCwgMHg1MDEyLCAweDUwMTIsIDB4MTBBRCwgMHg1MDE2LCAweDUwMTYsIDB4MUUxOSwKKyAgICAweDUwMTksIDB4NTAxOSwgMHgxRjFGLCAweDUwMUEsIDB4NTAxQSwgMHgxOEZCLCAweDUwMUMsIDB4NTAxQywgMHgxQkRFLAorICAgIDB4NTAxRSwgMHg1MDFFLCAweDBFNEUsIDB4NTAxRiwgMHg1MDFGLCAweDFCODMsIDB4NTAyMSwgMHg1MDIxLCAweDFCQjUsCisgICAgMHg1MDIzLCAweDUwMjMsIDB4MTM0RCwgMHg1MDI0LCAweDUwMjQsIDB4MUNBOSwgMHg1MDI2LCAweDUwMjYsIDB4MEY4MSwKKyAgICAweDUwMjcsIDB4NTAyNywgMHgxQUI1LCAweDUwMjgsIDB4NTAyOCwgMHgwRTAxLCAweDUwMkEsIDB4NTAyQSwgMHgxNzhFLAorICAgIDB4NTAyQiwgMHg1MDJCLCAweDExRjMsIDB4NTAyQywgMHg1MDJDLCAweDFDRTIsIDB4NTAyRCwgMHg1MDJELCAweDE3RjMsCisgICAgMHg1MDNCLCAweDUwM0IsIDB4MTZFNywgMHg1MDQzLCAweDUwNDMsIDB4MTcxRCwgMHg1MDQ3LCAweDUwNDcsIDB4MEQ2RSwKKyAgICAweDUwNDgsIDB4NTA0OCwgMHgwRTJCLCAweDUwNDksIDB4NTA0OSwgMHgxODhELCAweDUwNEYsIDB4NTA0RiwgMHgxRDVGLAorICAgIDB4NTA1NSwgMHg1MDU1LCAweDFFMDYsIDB4NTA1QSwgMHg1MDVBLCAweDFBQ0YsIDB4NTA1QywgMHg1MDVDLCAweDFBMzMsCisgICAgMHg1MDY1LCAweDUwNjUsIDB4MEUxMywgMHg1MDc0LCAweDUwNzQsIDB4MUNBMiwgMHg1MDc1LCAweDUwNzUsIDB4MUEzNCwKKyAgICAweDUwNzYsIDB4NTA3NiwgMHgxODM3LCAweDUwNzgsIDB4NTA3OCwgMHgxRDI5LCAweDUwODAsIDB4NTA4MCwgMHgwRjEwLAorICAgIDB4NTA4NSwgMHg1MDg1LCAweDEzRjgsIDB4NTA4RCwgMHg1MDhELCAweDEzNEUsIDB4NTA5MSwgMHg1MDkxLCAweDBFMUUsCisgICAgMHg1MDk4LCAweDUwOTgsIDB4MTRCNywgMHg1MDk5LCAweDUwOTksIDB4MTQzRSwgMHg1MEFDLCAweDUwQUMsIDB4MUM1RSwKKyAgICAweDUwQUQsIDB4NTBBRCwgMHgxODFGLCAweDUwQjIsIDB4NTBCMiwgMHgxN0E0LCAweDUwQjMsIDB4NTBCMywgMHgxOUY1LAorICAgIDB4NTBCNSwgMHg1MEI1LCAweDFCQ0EsIDB4NTBCNywgMHg1MEI3LCAweDE0RDQsIDB4NTBCRSwgMHg1MEJFLCAweDBFNEYsCisgICAgMHg1MEM1LCAweDUwQzUsIDB4MEZCNywgMHg1MEM5LCAweDUwQzksIDB4MUMwOSwgMHg1MENBLCAweDUwQ0EsIDB4MTUyQiwKKyAgICAweDUwQ0YsIDB4NTBDRiwgMHgxNEQ1LCAweDUwRDEsIDB4NTBEMSwgMHgwRjFELCAweDUwRDUsIDB4NTBENSwgMHgxM0QzLAorICAgIDB4NTBENiwgMHg1MEQ2LCAweDFGNjMsIDB4NTBEQSwgMHg1MERBLCAweDExQzgsIDB4NTBERSwgMHg1MERFLCAweDE4OEUsCisgICAgMHg1MEU1LCAweDUwRTUsIDB4MTdGQywgMHg1MEU3LCAweDUwRTcsIDB4MTYzNCwgMHg1MEVELCAweDUwRUQsIDB4MUJBQSwKKyAgICAweDUwRjksIDB4NTBGOSwgMHgwRDZGLCAweDUwRkIsIDB4NTBGQiwgMHgxMzlDLCAweDUwRkYsIDB4NTBGRiwgMHgxNDgxLAorICAgIDB4NTEwMCwgMHg1MTAwLCAweDE4RkMsIDB4NTEwMSwgMHg1MTAxLCAweDFBRjcsIDB4NTEwNCwgMHg1MTA0LCAweDE3MTgsCisgICAgMHg1MTA2LCAweDUxMDYsIDB4MEU1MCwgMHg1MTA5LCAweDUxMDksIDB4MEUyMSwgMHg1MTEyLCAweDUxMTIsIDB4MThBNywKKyAgICAweDUxMUYsIDB4NTExRiwgMHgxNEQ2LCAweDUxMjEsIDB4NTEyMSwgMHgxMUJGLCAweDUxMkEsIDB4NTEyQSwgMHgxODM4LAorICAgIDB4NTEzMiwgMHg1MTMyLCAweDE5QzEsIDB4NTEzNywgMHg1MTM3LCAweDExNTksIDB4NTEzQSwgMHg1MTNBLCAweDEwMjUsCisgICAgMHg1MTNDLCAweDUxM0MsIDB4MTcyNiwgMHg1MTQwLCAweDUxNDAsIDB4MTdDOSwgMHg1MTQxLCAweDUxNDEsIDB4MThENywKKyAgICAweDUxNDMsIDB4NTE0MywgMHgxODZGLCAweDUxNDQsIDB4NTE0NCwgMHgxRTVDLCAweDUxNDUsIDB4NTE0NSwgMHgxQzhBLAorICAgIDB4NTE0NiwgMHg1MTQ2LCAweDFBN0YsIDB4NTE0NywgMHg1MTQ3LCAweDFGNEQsIDB4NTE0OCwgMHg1MTQ4LCAweDE1MkMsCisgICAgMHg1MTQ5LCAweDUxNDksIDB4MEYwMCwgMHg1MTRCLCAweDUxNEIsIDB4MEZCMCwgMHg1MTRDLCAweDUxNEMsIDB4MUQwNywKKyAgICAweDUxNEQsIDB4NTE0RCwgMHgxMjdGLCAweDUxNEUsIDB4NTE0RSwgMHgxRDE5LCAweDUxNTIsIDB4NTE1MiwgMHgxNjkxLAorICAgIDB4NTE1QywgMHg1MTVDLCAweDEwRkMsIDB4NTE2MiwgMHg1MTYyLCAweDBGREIsIDB4NTE2NSwgMHg1MTY1LCAweDE5NEQsCisgICAgMHg1MTY3LCAweDUxNjcsIDB4MTAzQiwgMHg1MTY4LCAweDUxNjgsIDB4MTlGNiwgMHg1MTY5LCAweDUxNjksIDB4MTE0RCwKKyAgICAweDUxNkEsIDB4NTE2QSwgMHgxOEE4LCAweDUxNkIsIDB4NTE2QiwgMHgxRDRCLCAweDUxNkMsIDB4NTE2QywgMHgwRUNCLAorICAgIDB4NTE2RCwgMHg1MTZELCAweDExRUYsIDB4NTE2RSwgMHg1MTZFLCAweDFFNkYsIDB4NTE3MSwgMHg1MTcxLCAweDBFQ0MsCisgICAgMHg1MTc1LCAweDUxNzUsIDB4MTNCMywgMHg1MTc2LCAweDUxNzYsIDB4MEZFMCwgMHg1MTc3LCAweDUxNzcsIDB4MEYzQSwKKyAgICAweDUxNzgsIDB4NTE3OCwgMHgxOUY3LCAweDUxN0MsIDB4NTE3QywgMHgwRTQ2LCAweDUxODAsIDB4NTE4MCwgMHgwRkUxLAorICAgIDB4NTE4NiwgMHg1MTg2LCAweDE3MkQsIDB4NTE4QSwgMHg1MThBLCAweDFCRDYsIDB4NTE4RCwgMHg1MThELCAweDE5QUEsCisgICAgMHg1MTkyLCAweDUxOTIsIDB4MTI5RCwgMHg1MTk1LCAweDUxOTUsIDB4MTI4MCwgMHg1MTk3LCAweDUxOTcsIDB4MTgyMCwKKyAgICAweDUxQTAsIDB4NTFBMCwgMHgwRUVCLCAweDUxQTUsIDB4NTFBNSwgMHgxMjhDLCAweDUxQUEsIDB4NTFBQSwgMHgxMjdELAorICAgIDB4NTFBQywgMHg1MUFDLCAweDEwRUMsIDB4NTFCNiwgMHg1MUI2LCAweDE2RTgsIDB4NTFCNywgMHg1MUI3LCAweDExNDgsCisgICAgMHg1MUJELCAweDUxQkQsIDB4MTE3RCwgMHg1MUM0LCAweDUxQzQsIDB4MUJEQSwgMHg1MUM2LCAweDUxQzYsIDB4MUFGOCwKKyAgICAweDUxQzksIDB4NTFDOSwgMHgxMTRFLCAweDUxQ0IsIDB4NTFDQiwgMHgxQTgwLCAweDUxQ0MsIDB4NTFDQywgMHgxMUZGLAorICAgIDB4NTFDRCwgMHg1MUNELCAweDEwRUQsIDB4NTFEQywgMHg1MURDLCAweDExRkUsIDB4NTFERCwgMHg1MURELCAweDE4RjYsCisgICAgMHg1MURFLCAweDUxREUsIDB4MUY2NCwgMHg1MUUxLCAweDUxRTEsIDB4MTM5MSwgMHg1MUYwLCAweDUxRjAsIDB4MUVFMCwKKyAgICAweDUxRjEsIDB4NTFGMSwgMHgwREVCLCAweDUxRjYsIDB4NTFGNiwgMHgxRjRFLCAweDUxRjgsIDB4NTFGOCwgMHgxQkZGLAorICAgIDB4NTFGOSwgMHg1MUY5LCAweDE3RkQsIDB4NTFGQSwgMHg1MUZBLCAweDFDODcsIDB4NTFGRCwgMHg1MUZELCAweDFERTMsCisgICAgMHg1MjAwLCAweDUyMDAsIDB4MTBBRSwgMHg1MjAzLCAweDUyMDMsIDB4MTkyRCwgMHg1MjA2LCAweDUyMDYsIDB4MTQyMCwKKyAgICAweDUyMDcsIDB4NTIwNywgMHgxQTFDLCAweDUyMDgsIDB4NTIwOCwgMHgxNzhGLCAweDUyMEEsIDB4NTIwQSwgMHgwRDk1LAorICAgIDB4NTIwRSwgMHg1MjBFLCAweDEyRTUsIDB4NTIxMSwgMHg1MjExLCAweDFFNUQsIDB4NTIxNywgMHg1MjE3LCAweDExN0UsCisgICAgMHg1MjFELCAweDUyMUQsIDB4MUMyRSwgMHg1MjI0LCAweDUyMjQsIDB4MUQ0MiwgMHg1MjI1LCAweDUyMjUsIDB4MTNBRCwKKyAgICAweDUyMjksIDB4NTIyOSwgMHgxMjA2LCAweDUyMkEsIDB4NTIyQSwgMHgxNEI4LCAweDUyMkUsIDB4NTIyRSwgMHgwRUZCLAorICAgIDB4NTIzMCwgMHg1MjMwLCAweDEwQUYsIDB4NTIzNiwgMHg1MjM2LCAweDFBNjcsIDB4NTIzNywgMHg1MjM3LCAweDE1QjksCisgICAgMHg1MjM4LCAweDUyMzgsIDB4MEY4MiwgMHg1MjM5LCAweDUyMzksIDB4MUJBNSwgMHg1MjNBLCAweDUyM0EsIDB4MTk1NCwKKyAgICAweDUyM0IsIDB4NTIzQiwgMHgwRDg5LCAweDUyNDMsIDB4NTI0MywgMHgxQzI1LCAweDUyNDcsIDB4NTI0NywgMHgxQ0MwLAorICAgIDB4NTI0QSwgMHg1MjRBLCAweDE0QjUsIDB4NTI0QiwgMHg1MjRCLCAweDBGQjEsIDB4NTI0QywgMHg1MjRDLCAweDExMkQsCisgICAgMHg1MjRELCAweDUyNEQsIDB4MTlGOCwgMHg1MjU0LCAweDUyNTQsIDB4MUJERiwgMHg1MjU2LCAweDUyNTYsIDB4MTNGOSwKKyAgICAweDUyNUIsIDB4NTI1QiwgMHgwREQwLCAweDUyNUQsIDB4NTI1RCwgMHgxMzE2LCAweDUyNjEsIDB4NTI2MSwgMHgxNTU3LAorICAgIDB4NTI2OSwgMHg1MjY5LCAweDE5NTAsIDB4NTI2QSwgMHg1MjZBLCAweDE5RjksIDB4NTI2RiwgMHg1MjZGLCAweDEzRkEsCisgICAgMHg1MjcyLCAweDUyNzIsIDB4MURFMSwgMHg1Mjc1LCAweDUyNzUsIDB4MUJCNiwgMHg1MjdELCAweDUyN0QsIDB4MUQ5OSwKKyAgICAweDUyN0YsIDB4NTI3RiwgMHgxQzJGLCAweDUyODMsIDB4NTI4MywgMHgxRjBDLCAweDUyODcsIDB4NTI4NywgMHgwRkIyLAorICAgIDB4NTI4OCwgMHg1Mjg4LCAweDEzOUQsIDB4NTI4OSwgMHg1Mjg5LCAweDExRTEsIDB4NTI4RCwgMHg1MjhELCAweDBFMjIsCisgICAgMHg1MjkxLCAweDUyOTEsIDB4MUE2OCwgMHg1MjkyLCAweDUyOTIsIDB4MEUyMywgMHg1MjlCLCAweDUyOUIsIDB4MTE2QSwKKyAgICAweDUyOUYsIDB4NTI5RiwgMHgwRUNELCAweDUyQTAsIDB4NTJBMCwgMHgwRDcwLCAweDUyQTMsIDB4NTJBMywgMHgxMTdGLAorICAgIDB4NTJBNCwgMHg1MkE0LCAweDBGQjgsIDB4NTJBOSwgMHg1MkE5LCAweDFBODEsIDB4NTJBQSwgMHg1MkFBLCAweDEwNDksCisgICAgMHg1MkFCLCAweDUyQUIsIDB4MEUyOCwgMHg1MkJFLCAweDUyQkUsIDB4MUUxNywgMHg1MkMxLCAweDUyQzEsIDB4MEU1MSwKKyAgICAweDUyQzMsIDB4NTJDMywgMHgxMzQyLCAweDUyQzUsIDB4NTJDNSwgMHgxQ0MxLCAweDUyQzcsIDB4NTJDNywgMHgxODIxLAorICAgIDB4NTJDOSwgMHg1MkM5LCAweDEyODEsIDB4NTJDRCwgMHg1MkNELCAweDBFNTIsIDB4NTJEMiwgMHg1MkQyLCAweDExRkMsCisgICAgMHg1MkQ1LCAweDUyRDUsIDB4MTBFRSwgMHg1MkQ2LCAweDUyRDYsIDB4MTg1NSwgMHg1MkQ4LCAweDUyRDgsIDB4MERCNiwKKyAgICAweDUyRDksIDB4NTJEOSwgMHgxMkNDLCAweDUyREIsIDB4NTJEQiwgMHgxRjJCLCAweDUyREQsIDB4NTJERCwgMHgxNjM1LAorICAgIDB4NTJERSwgMHg1MkRFLCAweDExOUYsIDB4NTJERiwgMHg1MkRGLCAweDEyOUUsIDB4NTJFMiwgMHg1MkUyLCAweDE1NzUsCisgICAgMHg1MkUzLCAweDUyRTMsIDB4MTlEQiwgMHg1MkU0LCAweDUyRTQsIDB4MEZCOSwgMHg1MkYzLCAweDUyRjMsIDB4MUYyQywKKyAgICAweDUyRjUsIDB4NTJGNSwgMHgxMTVBLCAweDUyRjgsIDB4NTJGOCwgMHgwRjgzLCAweDUyRkEsIDB4NTJGQSwgMHgxOTZFLAorICAgIDB4NTJGQiwgMHg1MkZCLCAweDBGQTksIDB4NTJGRSwgMHg1MkZFLCAweDBGM0IsIDB4NTJGRiwgMHg1MkZGLCAweDEyRjAsCisgICAgMHg1MzA1LCAweDUzMDUsIDB4MUQ3OSwgMHg1MzA4LCAweDUzMDgsIDB4MUY0RiwgMHg1MzBELCAweDUzMEQsIDB4MUQ3QSwKKyAgICAweDUzMEYsIDB4NTMwRiwgMHgxRDdCLCAweDUzMTAsIDB4NTMxMCwgMHgxM0Q0LCAweDUzMTUsIDB4NTMxNSwgMHgxNDNGLAorICAgIDB4NTMxNiwgMHg1MzE2LCAweDFFQjcsIDB4NTMxNywgMHg1MzE3LCAweDE0MUYsIDB4NTMxOSwgMHg1MzE5LCAweDE2M0QsCisgICAgMHg1MzIwLCAweDUzMjAsIDB4MTk4OCwgMHg1MzIxLCAweDUzMjEsIDB4MEYwMSwgMHg1MzIzLCAweDUzMjMsIDB4MERDQSwKKyAgICAweDUzMkEsIDB4NTMyQSwgMHgxNDQwLCAweDUzMkYsIDB4NTMyRiwgMHgxRUY4LCAweDUzMzksIDB4NTMzOSwgMHgxREI0LAorICAgIDB4NTMzRiwgMHg1MzNGLCAweDEwNUMsIDB4NTM0MCwgMHg1MzQwLCAweDBGM0MsIDB4NTM0MSwgMHg1MzQxLCAweDE2OEMsCisgICAgMHg1MzQzLCAweDUzNDMsIDB4MUJFRCwgMHg1MzQ0LCAweDUzNDQsIDB4MTk0RSwgMHg1MzQ3LCAweDUzNDcsIDB4MTYzNiwKKyAgICAweDUzNDgsIDB4NTM0OCwgMHgxN0E1LCAweDUzNDksIDB4NTM0OSwgMHgxRjNBLCAweDUzNEEsIDB4NTM0QSwgMHgxMzJBLAorICAgIDB4NTM0RCwgMHg1MzRELCAweDEyM0YsIDB4NTM1MSwgMHg1MzUxLCAweDE0NDEsIDB4NTM1MiwgMHg1MzUyLCAweDFBQjIsCisgICAgMHg1MzUzLCAweDUzNTMsIDB4MUNFMywgMHg1MzU0LCAweDUzNTQsIDB4MUU1MCwgMHg1MzU3LCAweDUzNTcsIDB4MTAzMSwKKyAgICAweDUzNUEsIDB4NTM1QSwgMHgxMzE3LCAweDUzNUMsIDB4NTM1QywgMHgxM0Q1LCAweDUzNUUsIDB4NTM1RSwgMHgxM0E3LAorICAgIDB4NTM2MCwgMHg1MzYwLCAweDFBMjQsIDB4NTM2NiwgMHg1MzY2LCAweDBGMEMsIDB4NTM2OCwgMHg1MzY4LCAweDE1NEEsCisgICAgMHg1MzZGLCAweDUzNkYsIDB4MTJDMCwgMHg1MzcwLCAweDUzNzAsIDB4MTkyRSwgMHg1MzcxLCAweDUzNzEsIDB4MTg4RiwKKyAgICAweDUzNzQsIDB4NTM3NCwgMHgwRDhBLCAweDUzNzUsIDB4NTM3NSwgMHgxMTI2LCAweDUzNzcsIDB4NTM3NywgMHgwRjg0LAorICAgIDB4NTM3RCwgMHg1MzdELCAweDFCMEUsIDB4NTM3RiwgMHg1MzdGLCAweDBFNTMsIDB4NTM4NCwgMHg1Mzg0LCAweDE2REIsCisgICAgMHg1MzkzLCAweDUzOTMsIDB4MTZEMCwgMHg1Mzk4LCAweDUzOTgsIDB4MTIwNywgMHg1MzlBLCAweDUzOUEsIDB4MUYyMCwKKyAgICAweDUzOUYsIDB4NTM5RiwgMHgxODcwLCAweDUzQTAsIDB4NTNBMCwgMHgxQ0E0LCAweDUzQTUsIDB4NTNBNSwgMHgwRjhCLAorICAgIDB4NTNBNiwgMHg1M0E2LCAweDFEQzIsIDB4NTNBRCwgMHg1M0FELCAweDE3NjUsIDB4NTNCQiwgMHg1M0JCLCAweDBFMDIsCisgICAgMHg1M0MzLCAweDUzQzMsIDB4MUJBQiwgMHg1M0M4LCAweDUzQzgsIDB4MTgzOSwgMHg1M0M5LCAweDUzQzksIDB4MUI4NCwKKyAgICAweDUzQ0EsIDB4NTNDQSwgMHgwRkQ0LCAweDUzQ0IsIDB4NTNDQiwgMHgxODNBLCAweDUzQ0QsIDB4NTNDRCwgMHgxMzJCLAorICAgIDB4NTNENCwgMHg1M0Q0LCAweDE1RkMsIDB4NTNENiwgMHg1M0Q2LCAweDFDOTQsIDB4NTNENywgMHg1M0Q3LCAweDE1QzAsCisgICAgMHg1M0RCLCAweDUzREIsIDB4MTMyQywgMHg1M0UxLCAweDUzRTEsIDB4MTc5MCwgMHg1M0UyLCAweDUzRTIsIDB4MUM1MywKKyAgICAweDUzRTMsIDB4NTNFMywgMHgwRjNELCAweDUzRTQsIDB4NTNFNCwgMHgwRTkxLCAweDUzRTUsIDB4NTNFNSwgMHgwRjNFLAorICAgIDB4NTNFOSwgMHg1M0U5LCAweDBFOTIsIDB4NTNFQSwgMHg1M0VBLCAweDFCMUYsIDB4NTNFQiwgMHg1M0VCLCAweDBGOUEsCisgICAgMHg1M0VDLCAweDUzRUMsIDB4MTU3QywgMHg1M0VELCAweDUzRUQsIDB4MUQ0QywgMHg1M0VGLCAweDUzRUYsIDB4MEQ3MSwKKyAgICAweDUzRjAsIDB4NTNGMCwgMHgxRDA4LCAweDUzRjEsIDB4NTNGMSwgMHgxQjY4LCAweDUzRjIsIDB4NTNGMiwgMHgxNDgyLAorICAgIDB4NTNGMywgMHg1M0YzLCAweDE4M0IsIDB4NTNGOCwgMHg1M0Y4LCAweDE0ODMsIDB4NTQwMywgMHg1NDAzLCAweDFGNTcsCisgICAgMHg1NDA0LCAweDU0MDQsIDB4MEQ4QiwgMHg1NDA4LCAweDU0MDgsIDB4MURFRiwgMHg1NDA5LCAweDU0MDksIDB4MTAyMCwKKyAgICAweDU0MEEsIDB4NTQwQSwgMHgxOURDLCAweDU0MEMsIDB4NTQwQywgMHgxMEVGLCAweDU0MEQsIDB4NTQwRCwgMHgxMjhELAorICAgIDB4NTQwRSwgMHg1NDBFLCAweDFGMjEsIDB4NTQwRiwgMHg1NDBGLCAweDEyMDgsIDB4NTQxMCwgMHg1NDEwLCAweDFEMUEsCisgICAgMHg1NDExLCAweDU0MTEsIDB4MUUxRiwgMHg1NDFCLCAweDU0MUIsIDB4MEY3MSwgMHg1NDFELCAweDU0MUQsIDB4MTIxRSwKKyAgICAweDU0MUYsIDB4NTQxRiwgMHgxOEVELCAweDU0MjAsIDB4NTQyMCwgMHgxRDZFLCAweDU0MjYsIDB4NTQyNiwgMHgxM0ZCLAorICAgIDB4NTQyOSwgMHg1NDI5LCAweDE0MjEsIDB4NTQyQiwgMHg1NDJCLCAweDFERTQsIDB4NTQzMywgMHg1NDMzLCAweDE3QTcsCisgICAgMHg1NDM4LCAweDU0MzgsIDB4MUY1RSwgMHg1NDM5LCAweDU0MzksIDB4MUM5NSwgMHg1NDNCLCAweDU0M0IsIDB4MTJFNiwKKyAgICAweDU0M0MsIDB4NTQzQywgMHgxRjIyLCAweDU0M0UsIDB4NTQzRSwgMHgxN0E2LCAweDU0NDIsIDB4NTQ0MiwgMHgxMTVCLAorICAgIDB4NTQ0OCwgMHg1NDQ4LCAweDFBMzUsIDB4NTQ0QSwgMHg1NDRBLCAweDBFOTMsIDB4NTQ1MSwgMHg1NDUxLCAweDFDRjAsCisgICAgMHg1NDY4LCAweDU0NjgsIDB4MUFEMywgMHg1NDZBLCAweDU0NkEsIDB4MUFEMiwgMHg1NDcxLCAweDU0NzEsIDB4MEU5NCwKKyAgICAweDU0NzMsIDB4NTQ3MywgMHgxMkYzLCAweDU0NzUsIDB4NTQ3NSwgMHgwRDcyLCAweDU0N0IsIDB4NTQ3QiwgMHgxNjZBLAorICAgIDB4NTQ3QywgMHg1NDdDLCAweDFFN0EsIDB4NTQ3RCwgMHg1NDdELCAweDEyOEUsIDB4NTQ4MCwgMHg1NDgwLCAweDE5QzIsCisgICAgMHg1NDg2LCAweDU0ODYsIDB4MUQ3QywgMHg1NDhDLCAweDU0OEMsIDB4MUVCOCwgMHg1NDhFLCAweDU0OEUsIDB4MEYzRiwKKyAgICAweDU0OTAsIDB4NTQ5MCwgMHgxM0ZDLCAweDU0QTQsIDB4NTRBNCwgMHgxQ0Q1LCAweDU0QTgsIDB4NTRBOCwgMHgxOTU1LAorICAgIDB4NTRBQiwgMHg1NEFCLCAweDFCMjAsIDB4NTRBQywgMHg1NEFDLCAweDBGMUUsIDB4NTRCMywgMHg1NEIzLCAweDFFMDcsCisgICAgMHg1NEI4LCAweDU0QjgsIDB4MURFNSwgMHg1NEJELCAweDU0QkQsIDB4MTkyRiwgMHg1NEMwLCAweDU0QzAsIDB4MTZEMSwKKyAgICAweDU0QzEsIDB4NTRDMSwgMHgxREE2LCAweDU0QzQsIDB4NTRDNCwgMHgxRUFELCAweDU0QzgsIDB4NTRDOCwgMHgxREYwLAorICAgIDB4NTRDOSwgMHg1NEM5LCAweDE5QUIsIDB4NTRFMSwgMHg1NEUxLCAweDE4NzEsIDB4NTRFNSwgMHg1NEU1LCAweDBENzMsCisgICAgMHg1NEU4LCAweDU0RTgsIDB4MUMzMCwgMHg1NEVELCAweDU0RUQsIDB4MEVCNywgMHg1NEVFLCAweDU0RUUsIDB4MUYxMSwKKyAgICAweDU0RjIsIDB4NTRGMiwgMHgxQzAwLCAweDU0RkEsIDB4NTRGQSwgMHgxRDdELCAweDU1MDQsIDB4NTUwNCwgMHgxRDRGLAorICAgIDB4NTUwNiwgMHg1NTA2LCAweDE0ODQsIDB4NTUwNywgMHg1NTA3LCAweDFCNDQsIDB4NTUwRSwgMHg1NTBFLCAweDEyMDksCisgICAgMHg1NTEwLCAweDU1MTAsIDB4MTA4RiwgMHg1NTFDLCAweDU1MUMsIDB4MTI1MSwgMHg1NTJGLCAweDU1MkYsIDB4MThBOSwKKyAgICAweDU1MzEsIDB4NTUzMSwgMHgxQkI3LCAweDU1MzUsIDB4NTUzNSwgMHgxNkJELCAweDU1M0UsIDB4NTUzRSwgMHgxQ0Q2LAorICAgIDB4NTU0NCwgMHg1NTQ0LCAweDFDRTQsIDB4NTU0NiwgMHg1NTQ2LCAweDE0RDcsIDB4NTU0RiwgMHg1NTRGLCAweDEyRTcsCisgICAgMHg1NTUzLCAweDU1NTMsIDB4MEU3QSwgMHg1NTU2LCAweDU1NTYsIDB4MTA3OSwgMHg1NTVFLCAweDU1NUUsIDB4MTY5MiwKKyAgICAweDU1NjMsIDB4NTU2MywgMHgxREU2LCAweDU1N0MsIDB4NTU3QywgMHgxQTY5LCAweDU1ODAsIDB4NTU4MCwgMHgwREZCLAorICAgIDB4NTU4NCwgMHg1NTg0LCAweDE1MkQsIDB4NTU4NiwgMHg1NTg2LCAweDFDMDEsIDB4NTU4NywgMHg1NTg3LCAweDExMTYsCisgICAgMHg1NTg5LCAweDU1ODksIDB4MUYyMywgMHg1NThBLCAweDU1OEEsIDB4MURFNywgMHg1NTk4LCAweDU1OTgsIDB4MUJFRSwKKyAgICAweDU1OTksIDB4NTU5OSwgMHgxRjNCLCAweDU1OUEsIDB4NTU5QSwgMHgxRUNCLCAweDU1OUMsIDB4NTU5QywgMHgxRjY1LAorICAgIDB4NTU5RCwgMHg1NTlELCAweDBEQUQsIDB4NTVBNywgMHg1NUE3LCAweDFGMzYsIDB4NTVBOSwgMHg1NUE5LCAweDE4QUEsCisgICAgMHg1NUFBLCAweDU1QUEsIDB4MTREOCwgMHg1NUFCLCAweDU1QUIsIDB4MTAyNCwgMHg1NUFDLCAweDU1QUMsIDB4MEYxRiwKKyAgICAweDU1QUUsIDB4NTVBRSwgMHgxMDYzLCAweDU1QzUsIDB4NTVDNSwgMHgxRjI0LCAweDU1QzcsIDB4NTVDNywgMHgxNEY1LAorICAgIDB4NTVENCwgMHg1NUQ0LCAweDFCNDUsIDB4NTVEQSwgMHg1NURBLCAweDE3QTgsIDB4NTVEQywgMHg1NURDLCAweDBGRTIsCisgICAgMHg1NURGLCAweDU1REYsIDB4MUI4NSwgMHg1NUUzLCAweDU1RTMsIDB4MTQ4NSwgMHg1NUU0LCAweDU1RTQsIDB4MUNBQSwKKyAgICAweDU1RkQsIDB4NTVGRCwgMHgxNUMxLCAweDU1RkUsIDB4NTVGRSwgMHgxQUQ0LCAweDU2MDYsIDB4NTYwNiwgMHgxQ0YxLAorICAgIDB4NTYwOSwgMHg1NjA5LCAweDBENzQsIDB4NTYxNCwgMHg1NjE0LCAweDBGNDAsIDB4NTYxNywgMHg1NjE3LCAweDE0RDksCisgICAgMHg1NjJGLCAweDU2MkYsIDB4MTU3RCwgMHg1NjMyLCAweDU2MzIsIDB4MUE4MiwgMHg1NjM0LCAweDU2MzQsIDB4MUM5NiwKKyAgICAweDU2MzYsIDB4NTYzNiwgMHgxNjNFLCAweDU2NTMsIDB4NTY1MywgMHgxRTI3LCAweDU2NjgsIDB4NTY2OCwgMHgwRkUzLAorICAgIDB4NTY2QiwgMHg1NjZCLCAweDFGNjYsIDB4NTY3NCwgMHg1Njc0LCAweDE0MjIsIDB4NTY4NiwgMHg1Njg2LCAweDFGMTIsCisgICAgMHg1NkE1LCAweDU2QTUsIDB4MTc0NCwgMHg1NkFDLCAweDU2QUMsIDB4MTQ2NywgMHg1NkFFLCAweDU2QUUsIDB4MUUyMCwKKyAgICAweDU2QjQsIDB4NTZCNCwgMHgxNzI3LCAweDU2QkMsIDB4NTZCQywgMHgxOTZGLCAweDU2Q0EsIDB4NTZDQSwgMHgxMDM4LAorICAgIDB4NTZDRCwgMHg1NkNELCAweDFGNjcsIDB4NTZEMSwgMHg1NkQxLCAweDFDNEEsIDB4NTZEQSwgMHg1NkRBLCAweDE1QzIsCisgICAgMHg1NkRCLCAweDU2REIsIDB4MTQ4NiwgMHg1NkRFLCAweDU2REUsIDB4MUVGOSwgMHg1NkUwLCAweDU2RTAsIDB4MTkzMCwKKyAgICAweDU2RjAsIDB4NTZGMCwgMHgwRUJFLCAweDU2RjksIDB4NTZGOSwgMHgxMThCLCAweDU2RkEsIDB4NTZGQSwgMHgwRTk1LAorICAgIDB4NTcwMywgMHg1NzAzLCAweDFEN0UsIDB4NTcwNCwgMHg1NzA0LCAweDE3MEUsIDB4NTcwOCwgMHg1NzA4LCAweDBGODUsCisgICAgMHg1NzBCLCAweDU3MEIsIDB4MEY2QiwgMHg1NzBELCAweDU3MEQsIDB4MTg5MCwgMHg1NzEyLCAweDU3MTIsIDB4MTg3MywKKyAgICAweDU3MTMsIDB4NTcxMywgMHgxODcyLCAweDU3MTYsIDB4NTcxNiwgMHgxMEIwLCAweDU3MTgsIDB4NTcxOCwgMHgxMDY0LAorICAgIDB4NTcxRiwgMHg1NzFGLCAweDFEMUIsIDB4NTcyOCwgMHg1NzI4LCAweDE5QUMsIDB4NTcyRCwgMHg1NzJELCAweDBGOUIsCisgICAgMHg1NzMwLCAweDU3MzAsIDB4MUIyMSwgMHg1NzNCLCAweDU3M0IsIDB4MEZFNCwgMHg1NzQwLCAweDU3NDAsIDB4MUIyMiwKKyAgICAweDU3NDIsIDB4NTc0MiwgMHgxRDQzLCAweDU3NDcsIDB4NTc0NywgMHgwRkFBLCAweDU3NEEsIDB4NTc0QSwgMHgxMzRGLAorICAgIDB4NTc0RCwgMHg1NzRELCAweDEwN0EsIDB4NTc0RSwgMHg1NzRFLCAweDBEQjcsIDB4NTc1MCwgMHg1NzUwLCAweDFBQzcsCisgICAgMHg1NzUxLCAweDU3NTEsIDB4MERGRCwgMHg1NzYxLCAweDU3NjEsIDB4MUQzMiwgMHg1NzY0LCAweDU3NjQsIDB4MEVCRiwKKyAgICAweDU3NjYsIDB4NTc2NiwgMHgxQ0YyLCAweDU3NkEsIDB4NTc2QSwgMHgxRDY5LCAweDU3NkUsIDB4NTc2RSwgMHgxMDlDLAorICAgIDB4NTc3MCwgMHg1NzcwLCAweDBFNTQsIDB4NTc3NSwgMHg1Nzc1LCAweDBGNDEsIDB4NTc3QywgMHg1NzdDLCAweDFDRTUsCisgICAgMHg1NzgyLCAweDU3ODIsIDB4MTVDMywgMHg1Nzg4LCAweDU3ODgsIDB4MTA5QiwgMHg1NzhCLCAweDU3OEIsIDB4MUU1RSwKKyAgICAweDU3OTMsIDB4NTc5MywgMHgxRTA4LCAweDU3QTAsIDB4NTdBMCwgMHgxOEU1LCAweDU3QTIsIDB4NTdBMiwgMHgwRjQyLAorICAgIDB4NTdBMywgMHg1N0EzLCAweDE4NzQsIDB4NTdDMywgMHg1N0MzLCAweDE2RDIsIDB4NTdDNywgMHg1N0M3LCAweDE4MjIsCisgICAgMHg1N0M4LCAweDU3QzgsIDB4MUFGOSwgMHg1N0NCLCAweDU3Q0IsIDB4MTI2NCwgMHg1N0NFLCAweDU3Q0UsIDB4MTU2MiwKKyAgICAweDU3REYsIDB4NTdERiwgMHgxNzNDLCAweDU3RTAsIDB4NTdFMCwgMHgxM0ZELCAweDU3RjAsIDB4NTdGMCwgMHgxQkNCLAorICAgIDB4NTdGNCwgMHg1N0Y0LCAweDE2NTgsIDB4NTdGNywgMHg1N0Y3LCAweDFCNzgsIDB4NTdGOSwgMHg1N0Y5LCAweDEzNkIsCisgICAgMHg1N0ZBLCAweDU3RkEsIDB4MEZFNSwgMHg1N0ZDLCAweDU3RkMsIDB4MEZFNiwgMHg1ODAwLCAweDU4MDAsIDB4MEY3NywKKyAgICAweDU4MDIsIDB4NTgwMiwgMHgxMDkwLCAweDU4MDUsIDB4NTgwNSwgMHgwRTM1LCAweDU4MDYsIDB4NTgwNiwgMHgxRDIzLAorICAgIDB4NTgwOCwgMHg1ODA4LCAweDBERDEsIDB4NTgwOSwgMHg1ODA5LCAweDE4RDMsIDB4NTgwQSwgMHg1ODBBLCAweDE2QTEsCisgICAgMHg1ODFFLCAweDU4MUUsIDB4MUMxMywgMHg1ODIxLCAweDU4MjEsIDB4MTNDMywgMHg1ODI0LCAweDU4MjQsIDB4MUE2QSwKKyAgICAweDU4MjcsIDB4NTgyNywgMHgxNzQ1LCAweDU4MkEsIDB4NTgyQSwgMHgwREI4LCAweDU4MkYsIDB4NTgyRiwgMHgxN0ZFLAorICAgIDB4NTgzMCwgMHg1ODMwLCAweDE3MUUsIDB4NTgzMSwgMHg1ODMxLCAweDEzQzQsIDB4NTgzNCwgMHg1ODM0LCAweDE5ODksCisgICAgMHg1ODM1LCAweDU4MzUsIDB4MTBCMSwgMHg1ODNBLCAweDU4M0EsIDB4MEU3QiwgMHg1ODRBLCAweDU4NEEsIDB4MEYxMSwKKyAgICAweDU4NEIsIDB4NTg0QiwgMHgxNzcyLCAweDU4NEYsIDB4NTg0RiwgMHgwREVDLCAweDU4NTEsIDB4NTg1MSwgMHgxNTdFLAorICAgIDB4NTg1NCwgMHg1ODU0LCAweDFEMDAsIDB4NTg1NywgMHg1ODU3LCAweDEwQjIsIDB4NTg1OCwgMHg1ODU4LCAweDEwOTEsCisgICAgMHg1ODVBLCAweDU4NUEsIDB4MUM1NCwgMHg1ODVFLCAweDU4NUUsIDB4MTRGMiwgMHg1ODYxLCAweDU4NjEsIDB4MTlGQSwKKyAgICAweDU4NjIsIDB4NTg2MiwgMHgxN0E5LCAweDU4NjQsIDB4NTg2NCwgMHgxRjJELCAweDU4NzUsIDB4NTg3NSwgMHgxQjQ2LAorICAgIDB4NTg3OSwgMHg1ODc5LCAweDFCQUMsIDB4NTg3QywgMHg1ODdDLCAweDE5RkIsIDB4NTg3RSwgMHg1ODdFLCAweDE1RkQsCisgICAgMHg1ODgzLCAweDU4ODMsIDB4MEU1NSwgMHg1ODg1LCAweDU4ODUsIDB4MTRGRCwgMHg1ODg5LCAweDU4ODksIDB4MTgyMywKKyAgICAweDU4OTMsIDB4NTg5MywgMHgxMkMxLCAweDU4OUMsIDB4NTg5QywgMHgxQzYxLCAweDU4OUUsIDB4NTg5RSwgMHgxQjEzLAorICAgIDB4NTg5RiwgMHg1ODlGLCAweDFFMjgsIDB4NThBOCwgMHg1OEE4LCAweDEyRTIsIDB4NThBOSwgMHg1OEE5LCAweDEwREYsCisgICAgMHg1OEFFLCAweDU4QUUsIDB4MUNENywgMHg1OEIzLCAweDU4QjMsIDB4MTQyMywgMHg1OEJBLCAweDU4QkEsIDB4MTdBQSwKKyAgICAweDU4QkIsIDB4NThCQiwgMHgxOThBLCAweDU4QkUsIDB4NThCRSwgMHgwRDk2LCAweDU4QzEsIDB4NThDMSwgMHgxMzlFLAorICAgIDB4NThDNSwgMHg1OEM1LCAweDE3Q0EsIDB4NThDNywgMHg1OEM3LCAweDEwNjUsIDB4NThDRSwgMHg1OENFLCAweDFGMkUsCisgICAgMHg1OEQxLCAweDU4RDEsIDB4MURDRSwgMHg1OEQzLCAweDU4RDMsIDB4MTZDNSwgMHg1OEQ1LCAweDU4RDUsIDB4MUU3QiwKKyAgICAweDU4RDgsIDB4NThEOCwgMHgxMUQ0LCAweDU4RDksIDB4NThEOSwgMHgwRjAyLCAweDU4REUsIDB4NThERSwgMHgwRjEyLAorICAgIDB4NThERiwgMHg1OERGLCAweDExQjgsIDB4NThFNCwgMHg1OEU0LCAweDE2RjgsIDB4NThFQiwgMHg1OEVCLCAweDE0ODcsCisgICAgMHg1OEVDLCAweDU4RUMsIDB4MTk0NiwgMHg1OEVGLCAweDU4RUYsIDB4MTk4QiwgMHg1OEY5LCAweDU4RjksIDB4MTkzRiwKKyAgICAweDU4RkEsIDB4NThGQSwgMHgxRTdDLCAweDU4RkIsIDB4NThGQiwgMHgxNEZFLCAweDU4RkQsIDB4NThGRCwgMHgxNUM0LAorICAgIDB4NTkwRiwgMHg1OTBGLCAweDFEQzMsIDB4NTkxNCwgMHg1OTE0LCAweDBGRTcsIDB4NTkxNSwgMHg1OTE1LCAweDE1MUIsCisgICAgMHg1OTE2LCAweDU5MTYsIDB4MTdGNywgMHg1OTE5LCAweDU5MTksIDB4MTVGRSwgMHg1OTFBLCAweDU5MUEsIDB4MTA1RSwKKyAgICAweDU5MUMsIDB4NTkxQywgMHgxNkU5LCAweDU5MjIsIDB4NTkyMiwgMHgxMkJELCAweDU5MjcsIDB4NTkyNywgMHgxMDlELAorICAgIDB4NTkyOSwgMHg1OTI5LCAweDFCRUYsIDB4NTkyQSwgMHg1OTJBLCAweDFEMDksIDB4NTkyQiwgMHg1OTJCLCAweDEzRkUsCisgICAgMHg1OTJELCAweDU5MkQsIDB4MTdGRiwgMHg1OTJFLCAweDU5MkUsIDB4MTZDQSwgMHg1OTMxLCAweDU5MzEsIDB4MTY3RSwKKyAgICAweDU5MzcsIDB4NTkzNywgMHgxOTEwLCAweDU5M0UsIDB4NTkzRSwgMHgxRTUxLCAweDU5NDQsIDB4NTk0NCwgMHgxNzI4LAorICAgIDB4NTk0NywgMHg1OTQ3LCAweDBGRTgsIDB4NTk0OCwgMHg1OTQ4LCAweDEwM0MsIDB4NTk0OSwgMHg1OTQ5LCAweDEzRTYsCisgICAgMHg1OTRFLCAweDU5NEUsIDB4MEY5QywgMHg1OTRGLCAweDU5NEYsIDB4MUFENSwgMHg1OTUwLCAweDU5NTAsIDB4MUVDQywKKyAgICAweDU5NTEsIDB4NTk1MSwgMHgwRTdDLCAweDU5NTQsIDB4NTk1NCwgMHgxNDI0LCAweDU5NTUsIDB4NTk1NSwgMHgxRTMyLAorICAgIDB4NTk1NywgMHg1OTU3LCAweDFEMkEsIDB4NTk1QSwgMHg1OTVBLCAweDFFMDksIDB4NTk2MCwgMHg1OTYwLCAweDE5RkMsCisgICAgMHg1OTYyLCAweDU5NjIsIDB4MTQ4OCwgMHg1OTY3LCAweDU5NjcsIDB4MTdBQiwgMHg1OTZBLCAweDU5NkEsIDB4MUNGQSwKKyAgICAweDU5NkIsIDB4NTk2QiwgMHgxOEQ4LCAweDU5NkMsIDB4NTk2QywgMHgxOThDLCAweDU5NkQsIDB4NTk2RCwgMHgxNTFDLAorICAgIDB4NTk2RSwgMHg1OTZFLCAweDE0MjUsIDB4NTk3MywgMHg1OTczLCAweDEwM0YsIDB4NTk3NCwgMHg1OTc0LCAweDEwNEEsCisgICAgMHg1OTc4LCAweDU5NzgsIDB4MEQ5NywgMHg1OTdELCAweDU5N0QsIDB4MUU3RCwgMHg1OTgyLCAweDU5ODIsIDB4MTczMCwKKyAgICAweDU5ODMsIDB4NTk4MywgMHgxNDQyLCAweDU5ODQsIDB4NTk4NCwgMHgxMjU5LCAweDU5OEEsIDB4NTk4QSwgMHgxOTQ3LAorICAgIDB4NTk5MywgMHg1OTkzLCAweDBGRTksIDB4NTk5NiwgMHg1OTk2LCAweDE4MDAsIDB4NTk5NywgMHg1OTk3LCAweDBGQzcsCisgICAgMHg1OTk5LCAweDU5OTksIDB4MTJDMiwgMHg1OUE1LCAweDU5QTUsIDB4MUNEOCwgMHg1OUE4LCAweDU5QTgsIDB4MTM1MCwKKyAgICAweDU5QUMsIDB4NTlBQywgMHgxRDJCLCAweDU5QjksIDB4NTlCOSwgMHgxMjY1LCAweDU5QkIsIDB4NTlCQiwgMHgxQkRCLAorICAgIDB4NTlCRSwgMHg1OUJFLCAweDFDMTQsIDB4NTlDMywgMHg1OUMzLCAweDFBMzYsIDB4NTlDNiwgMHg1OUM2LCAweDEyOUYsCisgICAgMHg1OUM5LCAweDU5QzksIDB4MTk1NiwgMHg1OUNCLCAweDU5Q0IsIDB4MTYzRiwgMHg1OUQwLCAweDU5RDAsIDB4MTlDMywKKyAgICAweDU5RDEsIDB4NTlEMSwgMHgwRTk2LCAweDU5RDMsIDB4NTlEMywgMHgxNTYzLCAweDU5RDQsIDB4NTlENCwgMHgxODkxLAorICAgIDB4NTlEOSwgMHg1OUQ5LCAweDE5NDgsIDB4NTlEQSwgMHg1OURBLCAweDE4MDEsIDB4NTlEQywgMHg1OURDLCAweDBERDIsCisgICAgMHg1OURELCAweDU5REQsIDB4MUFEMCwgMHg1OUU2LCAweDU5RTYsIDB4MEQ5OCwgMHg1OUU4LCAweDU5RTgsIDB4MTkxMSwKKyAgICAweDU5RUEsIDB4NTlFQSwgMHgxQjY5LCAweDU5RUMsIDB4NTlFQywgMHgxRjY4LCAweDU5RUUsIDB4NTlFRSwgMHgxREY4LAorICAgIDB4NTlGOCwgMHg1OUY4LCAweDE3NDYsIDB4NTlGQiwgMHg1OUZCLCAweDE5MzEsIDB4NTlGRiwgMHg1OUZGLCAweDE5NTcsCisgICAgMHg1QTAxLCAweDVBMDEsIDB4MTg5MiwgMHg1QTAzLCAweDVBMDMsIDB4MTdGNCwgMHg1QTExLCAweDVBMTEsIDB4MTQ4OSwKKyAgICAweDVBMTgsIDB4NUExOCwgMHgxMDM5LCAweDVBMUIsIDB4NUExQiwgMHgxN0FDLCAweDVBMUMsIDB4NUExQywgMHgxMDI2LAorICAgIDB4NUExRiwgMHg1QTFGLCAweDE3NDcsIDB4NUEyMCwgMHg1QTIwLCAweDE2NkIsIDB4NUEyNSwgMHg1QTI1LCAweDE2OTMsCisgICAgMHg1QTI5LCAweDVBMjksIDB4MTI0MCwgMHg1QTM2LCAweDVBMzYsIDB4MUM5NywgMHg1QTNDLCAweDVBM0MsIDB4MUJCOCwKKyAgICAweDVBNDEsIDB4NUE0MSwgMHgxMUQ1LCAweDVBNDYsIDB4NUE0NiwgMHgxRDMzLCAweDVBNDksIDB4NUE0OSwgMHgxN0RCLAorICAgIDB4NUE1QSwgMHg1QTVBLCAweDFFQTQsIDB4NUE2MiwgMHg1QTYyLCAweDE0NDMsIDB4NUE2NiwgMHg1QTY2LCAweDEzRkYsCisgICAgMHg1QTkyLCAweDVBOTIsIDB4MTI2NiwgMHg1QTlBLCAweDVBOUEsIDB4MTJGNCwgMHg1QTlCLCAweDVBOUIsIDB4MTg3NSwKKyAgICAweDVBQTQsIDB4NUFBNCwgMHgxNjQwLCAweDVBQzEsIDB4NUFDMSwgMHgwRDc1LCAweDVBQzIsIDB4NUFDMiwgMHgxNUM1LAorICAgIDB4NUFDNCwgMHg1QUM0LCAweDE4NzYsIDB4NUFDOSwgMHg1QUM5LCAweDFCNkEsIDB4NUFDQywgMHg1QUNDLCAweDFFNEUsCisgICAgMHg1QUUxLCAweDVBRTEsIDB4MTlERCwgMHg1QUU2LCAweDVBRTYsIDB4MURGOSwgMHg1QUU5LCAweDVBRTksIDB4MTA1NSwKKyAgICAweDVCMDUsIDB4NUIwNSwgMHgxRUI5LCAweDVCMDksIDB4NUIwOSwgMHgxRjY5LCAweDVCMEIsIDB4NUIwQiwgMHgxNTJFLAorICAgIDB4NUIwQywgMHg1QjBDLCAweDBGMjAsIDB4NUIxNiwgMHg1QjE2LCAweDFENkYsIDB4NUIyQSwgMHg1QjJBLCAweDE0NjgsCisgICAgMHg1QjQwLCAweDVCNDAsIDB4MTREQSwgMHg1QjQzLCAweDVCNDMsIDB4MTZGOSwgMHg1QjUwLCAweDVCNTAsIDB4MTk1OCwKKyAgICAweDVCNTEsIDB4NUI1MSwgMHgxRTRBLCAweDVCNTQsIDB4NUI1NCwgMHgwRUNFLCAweDVCNTUsIDB4NUI1NSwgMHgxOTUxLAorICAgIDB4NUI1NywgMHg1QjU3LCAweDE5NTksIDB4NUI1OCwgMHg1QjU4LCAweDFBQjAsIDB4NUI1QSwgMHg1QjVBLCAweDE0MDAsCisgICAgMHg1QjVDLCAweDVCNUMsIDB4MTk1QSwgMHg1QjVELCAweDVCNUQsIDB4MUYxMywgMHg1QjVGLCAweDVCNUYsIDB4MTI3NywKKyAgICAweDVCNjMsIDB4NUI2MywgMHgwRTdELCAweDVCNjQsIDB4NUI2NCwgMHgwRTk3LCAweDVCNjksIDB4NUI2OSwgMHgxRTBBLAorICAgIDB4NUI2QiwgMHg1QjZCLCAweDE1QUEsIDB4NUI3MCwgMHg1QjcwLCAweDE1RkYsIDB4NUI3MSwgMHg1QjcxLCAweDE5N0EsCisgICAgMHg1Qjc1LCAweDVCNzUsIDB4MTQwMSwgMHg1Qjc4LCAweDVCNzgsIDB4MURDRiwgMHg1QjdBLCAweDVCN0EsIDB4MThBQiwKKyAgICAweDVCN0MsIDB4NUI3QywgMHgxNzIzLCAweDVCODUsIDB4NUI4NSwgMHgxMEFBLCAweDVCODcsIDB4NUI4NywgMHgxODNDLAorICAgIDB4NUI4OCwgMHg1Qjg4LCAweDE1QzYsIDB4NUI4OSwgMHg1Qjg5LCAweDE2QUYsIDB4NUI4QiwgMHg1QjhCLCAweDE1QjEsCisgICAgMHg1QjhDLCAweDVCOEMsIDB4MTdEQywgMHg1QjhGLCAweDVCOEYsIDB4MEYxOCwgMHg1QjkzLCAweDVCOTMsIDB4MTNENiwKKyAgICAweDVCOTUsIDB4NUI5NSwgMHgxRDAzLCAweDVCOTYsIDB4NUI5NiwgMHgxRjBFLCAweDVCOTcsIDB4NUI5NywgMHgxQUI2LAorICAgIDB4NUI5OCwgMHg1Qjk4LCAweDBFRUMsIDB4NUI5OSwgMHg1Qjk5LCAweDFBRDYsIDB4NUI5QSwgMHg1QjlBLCAweDFBMzcsCisgICAgMHg1QjlCLCAweDVCOUIsIDB4MTdERCwgMHg1QjlDLCAweDVCOUMsIDB4MThGRCwgMHg1QkEyLCAweDVCQTIsIDB4MERGQywKKyAgICAweDVCQTMsIDB4NUJBMywgMHgxNTJGLCAweDVCQTQsIDB4NUJBNCwgMHgxNjdGLCAweDVCQTUsIDB4NUJBNSwgMHgxOEFDLAorICAgIDB4NUJBNiwgMHg1QkE2LCAweDFFQ0QsIDB4NUJBQywgMHg1QkFDLCAweDE1NjQsIDB4NUJBRSwgMHg1QkFFLCAweDBGN0IsCisgICAgMHg1QkIwLCAweDVCQjAsIDB4MTlBRCwgMHg1QkIzLCAweDVCQjMsIDB4MUUwQiwgMHg1QkI0LCAweDVCQjQsIDB4MTc0OCwKKyAgICAweDVCQjUsIDB4NUJCNSwgMHgxNTdGLCAweDVCQjYsIDB4NUJCNiwgMHgwRDc2LCAweDVCQjgsIDB4NUJCOCwgMHgxNjZDLAorICAgIDB4NUJCOSwgMHg1QkI5LCAweDE4MjQsIDB4NUJCRiwgMHg1QkJGLCAweDE2MDAsIDB4NUJDMCwgMHg1QkMwLCAweDFCQ0MsCisgICAgMHg1QkMyLCAweDVCQzIsIDB4MTlERSwgMHg1QkMzLCAweDVCQzMsIDB4MTg3NywgMHg1QkM0LCAweDVCQzQsIDB4MEZFQSwKKyAgICAweDVCQzUsIDB4NUJDNSwgMHgxOTMyLCAweDVCQzYsIDB4NUJDNiwgMHgxMzEzLCAweDVCQzcsIDB4NUJDNywgMHgwRjQzLAorICAgIDB4NUJDQywgMHg1QkNDLCAweDE0MDIsIDB4NUJEMCwgMHg1QkQwLCAweDEyNjcsIDB4NUJEMiwgMHg1QkQyLCAweDFERDMsCisgICAgMHg1QkQzLCAweDVCRDMsIDB4MTgzRCwgMHg1QkQ0LCAweDVCRDQsIDB4MTY1OSwgMHg1QkQ3LCAweDVCRDcsIDB4MTA0OCwKKyAgICAweDVCREUsIDB4NUJERSwgMHgxMjM4LCAweDVCREYsIDB4NUJERiwgMHgxQkE2LCAweDVCRTEsIDB4NUJFMSwgMHgwRURCLAorICAgIDB4NUJFMiwgMHg1QkUyLCAweDFDQzgsIDB4NUJFNCwgMHg1QkU0LCAweDE3QUQsIDB4NUJFNSwgMHg1QkU1LCAweDE4MDIsCisgICAgMHg1QkU2LCAweDVCRTYsIDB4MTY4MCwgMHg1QkU3LCAweDVCRTcsIDB4MTA0NywgMHg1QkU4LCAweDVCRTgsIDB4MUJDRCwKKyAgICAweDVCRTksIDB4NUJFOSwgMHgxNjgyLCAweDVCRUIsIDB4NUJFQiwgMHgxNDhBLCAweDVCRUMsIDB4NUJFQywgMHgwRUVELAorICAgIDB4NUJFRSwgMHg1QkVFLCAweDExQzksIDB4NUJFRiwgMHg1QkVGLCAweDFBRkEsIDB4NUJGNSwgMHg1QkY1LCAweDFDNTUsCisgICAgMHg1QkY2LCAweDVCRjYsIDB4MTNDNSwgMHg1QkY4LCAweDVCRjgsIDB4MUM0RiwgMHg1QkZBLCAweDVCRkEsIDB4MTQ4QiwKKyAgICAweDVDMDEsIDB4NUMwMSwgMHgxM0U3LCAweDVDMDQsIDB4NUMwNCwgMHgxNDhDLCAweDVDMDcsIDB4NUMwNywgMHgxOThELAorICAgIDB4NUMwOCwgMHg1QzA4LCAweDE5RkQsIDB4NUMwOSwgMHg1QzA5LCAweDE4OTMsIDB4NUMwQSwgMHg1QzBBLCAweDFBQjEsCisgICAgMHg1QzBCLCAweDVDMEIsIDB4MTY4MywgMHg1QzBELCAweDVDMEQsIDB4MTA5RSwgMHg1QzBFLCAweDVDMEUsIDB4MTBCMywKKyAgICAweDVDMEYsIDB4NUMwRiwgMHgxNTgwLCAweDVDMTEsIDB4NUMxMSwgMHgxNTgxLCAweDVDMTYsIDB4NUMxNiwgMHgxQzBBLAorICAgIDB4NUMxOSwgMHg1QzE5LCAweDE0REIsIDB4NUMyNCwgMHg1QzI0LCAweDE4M0UsIDB4NUMyOCwgMHg1QzI4LCAweDEzNTEsCisgICAgMHg1QzMxLCAweDVDMzEsIDB4MUM5OCwgMHg1QzM4LCAweDVDMzgsIDB4MTY0MSwgMHg1QzM5LCAweDVDMzksIDB4MThEOSwKKyAgICAweDVDM0EsIDB4NUMzQSwgMHgxQkUwLCAweDVDM0IsIDB4NUMzQiwgMHgwRTk4LCAweDVDM0MsIDB4NUMzQywgMHgxMDVBLAorICAgIDB4NUMzRSwgMHg1QzNFLCAweDEyRjUsIDB4NUMzRiwgMHg1QzNGLCAweDEwNTQsIDB4NUM0MCwgMHg1QzQwLCAweDBGNkMsCisgICAgMHg1QzQ1LCAweDVDNDUsIDB4MEUwMywgMHg1QzQ2LCAweDVDNDYsIDB4MEU3RSwgMHg1QzQ4LCAweDVDNDgsIDB4MEY3OCwKKyAgICAweDVDNEIsIDB4NUM0QiwgMHgxN0JFLCAweDVDNEQsIDB4NUM0RCwgMHgxNjQzLCAweDVDNEUsIDB4NUM0RSwgMHgxNjQyLAorICAgIDB4NUM1MSwgMHg1QzUxLCAweDE1NEIsIDB4NUM1NSwgMHg1QzU1LCAweDE5RkUsIDB4NUM1QiwgMHg1QzVCLCAweDEzQjQsCisgICAgMHg1QzYwLCAweDVDNjAsIDB4MTBCNCwgMHg1QzYyLCAweDVDNjIsIDB4MTFENiwgMHg1QzY0LCAweDVDNjQsIDB4MUNBNywKKyAgICAweDVDNjUsIDB4NUM2NSwgMHgxMjBBLCAweDVDNkMsIDB4NUM2QywgMHgxNUEyLCAweDVDNkYsIDB4NUM2RiwgMHgxMTA2LAorICAgIDB4NUM3MSwgMHg1QzcxLCAweDE0QjksIDB4NUM3OSwgMHg1Qzc5LCAweDFGNTgsIDB4NUM5MCwgMHg1QzkwLCAweDBGRUIsCisgICAgMHg1QzkxLCAweDVDOTEsIDB4MTk3RiwgMHg1Q0ExLCAweDVDQTEsIDB4MEREMywgMHg1Q0E5LCAweDVDQTksIDB4MTZCRSwKKyAgICAweDVDQUIsIDB4NUNBQiwgMHgxNUM3LCAweDVDQUMsIDB4NUNBQywgMHgwRENCLCAweDVDQjEsIDB4NUNCMSwgMHgxMDlGLAorICAgIDB4NUNCMywgMHg1Q0IzLCAweDE2QTIsIDB4NUNCNSwgMHg1Q0I1LCAweDFFN0UsIDB4NUNCNywgMHg1Q0I3LCAweDEzMDYsCisgICAgMHg1Q0I4LCAweDVDQjgsIDB4MTZCMCwgMHg1Q0JBLCAweDVDQkEsIDB4MTE4QywgMHg1Q0JFLCAweDVDQkUsIDB4MUEyNSwKKyAgICAweDVDQzAsIDB4NUNDMCwgMHgxNUM4LCAweDVDRDksIDB4NUNEOSwgMHgxQ0FCLCAweDVDRTAsIDB4NUNFMCwgMHgxNERDLAorICAgIDB4NUNFOCwgMHg1Q0U4LCAweDE2OTQsIDB4NUNFRiwgMHg1Q0YwLCAweDEzRTgsIDB4NUNGNCwgMHg1Q0Y0LCAweDFFMzcsCisgICAgMHg1Q0Y2LCAweDVDRjYsIDB4MTBCNSwgMHg1Q0ZCLCAweDVDRkIsIDB4MUFGQiwgMHg1Q0ZELCAweDVDRkQsIDB4MUU1MiwKKyAgICAweDVEMDcsIDB4NUQwNywgMHgxNjI3LCAweDVEMEQsIDB4NUQwRCwgMHgxMTQ1LCAweDVEMEUsIDB4NUQwRSwgMHgwRkVDLAorICAgIDB4NUQxMSwgMHg1RDExLCAweDBFQzAsIDB4NUQxNCwgMHg1RDE0LCAweDFDNUYsIDB4NUQxNiwgMHg1RDE2LCAweDE2RDMsCisgICAgMHg1RDE3LCAweDVEMTcsIDB4MERENCwgMHg1RDE5LCAweDVEMTksIDB4MTFGNCwgMHg1RDI3LCAweDVEMjcsIDB4MTYyOCwKKyAgICAweDVEMjksIDB4NUQyOSwgMHgxNDM3LCAweDVENEIsIDB4NUQ0QiwgMHgxMkY2LCAweDVENEMsIDB4NUQ0QywgMHgwREI5LAorICAgIDB4NUQ1MCwgMHg1RDUwLCAweDExMkYsIDB4NUQ2OSwgMHg1RDY5LCAweDE2MjksIDB4NUQ2QywgMHg1RDZDLCAweDE3RjgsCisgICAgMHg1RDZGLCAweDVENkYsIDB4MUI4NiwgMHg1RDg3LCAweDVEODcsIDB4MEY0NCwgMHg1RDhCLCAweDVEOEIsIDB4MTBCNiwKKyAgICAweDVEOUQsIDB4NUQ5RCwgMHgxMTBELCAweDVEQTAsIDB4NURBMCwgMHgwRjIxLCAweDVEQTIsIDB4NURBMiwgMHgxODAzLAorICAgIDB4NURBQSwgMHg1REFBLCAweDE3MkIsIDB4NURCOCwgMHg1REI4LCAweDE3NzMsIDB4NURCQSwgMHg1REJBLCAweDExOEQsCisgICAgMHg1REJDLCAweDVEQkMsIDB4MTRGRiwgMHg1REJELCAweDVEQkQsIDB4MTZBMywgMHg1RENELCAweDVEQ0QsIDB4MTdGOSwKKyAgICAweDVERDIsIDB4NUREMiwgMHgxMjQxLCAweDVERDYsIDB4NURENiwgMHgxNkJGLCAweDVEREQsIDB4NURERCwgMHgxQkYwLAorICAgIDB4NURERSwgMHg1RERFLCAweDFBRDcsIDB4NURFMSwgMHg1REUxLCAweDE2MDgsIDB4NURFMiwgMHg1REUyLCAweDE1ODIsCisgICAgMHg1REU1LCAweDVERTUsIDB4MEVDRiwgMHg1REU2LCAweDVERTYsIDB4MUFDOCwgMHg1REU3LCAweDVERTcsIDB4MEYyMiwKKyAgICAweDVERTgsIDB4NURFOCwgMHgwRTA0LCAweDVERUIsIDB4NURFQiwgMHgxMkNELCAweDVERUUsIDB4NURFRSwgMHgxQjg3LAorICAgIDB4NURGMSwgMHg1REYxLCAweDBGRUQsIDB4NURGMiwgMHg1REYyLCAweDE5MTIsIDB4NURGMywgMHg1REYzLCAweDE0OEQsCisgICAgMHg1REY0LCAweDVERjQsIDB4MUQzNCwgMHg1REY3LCAweDVERjcsIDB4MURGQSwgMHg1REZELCAweDVERkQsIDB4MTVBQiwKKyAgICAweDVERkUsIDB4NURGRSwgMHgwRTE0LCAweDVFMDIsIDB4NUUwMiwgMHgxNjQ0LCAweDVFMDMsIDB4NUUwMywgMHgxRDdGLAorICAgIDB4NUUwNiwgMHg1RTA2LCAweDEzOTIsIDB4NUUwQywgMHg1RTBDLCAweDFGNkEsIDB4NUUxMSwgMHg1RTExLCAweDFEMDQsCisgICAgMHg1RTE2LCAweDVFMTYsIDB4MUMxNSwgMHg1RTE5LCAweDVFMTksIDB4MUI2QiwgMHg1RTFCLCAweDVFMUIsIDB4MTM3RSwKKyAgICAweDVFMUQsIDB4NUUxRCwgMHgxQTZCLCAweDVFMjUsIDB4NUUyNSwgMHgxNUM5LCAweDVFMkIsIDB4NUUyQiwgMHgxNDhFLAorICAgIDB4NUUyRCwgMHg1RTJELCAweDE1MUQsIDB4NUUzMywgMHg1RTMzLCAweDE5OEUsIDB4NUUzNiwgMHg1RTM2LCAweDEwQTAsCisgICAgMHg1RTM4LCAweDVFMzgsIDB4MTRERCwgMHg1RTNELCAweDVFM0QsIDB4MTJBMCwgMHg1RTNGLCAweDVFM0YsIDB4MUYyNSwKKyAgICAweDVFNDAsIDB4NUU0MCwgMHgxQTM4LCAweDVFNDQsIDB4NUU0NCwgMHgxNkE0LCAweDVFNDUsIDB4NUU0NSwgMHgxRDkzLAorICAgIDB4NUU0NywgMHg1RTQ3LCAweDEzNTIsIDB4NUU0QywgMHg1RTRDLCAweDFFRTEsIDB4NUU1NSwgMHg1RTU1LCAweDEyMzksCisgICAgMHg1RTVGLCAweDVFNUYsIDB4MUNBQywgMHg1RTYxLCAweDVFNjEsIDB4MTM4NCwgMHg1RTYyLCAweDVFNjIsIDB4MTA5MiwKKyAgICAweDVFNjMsIDB4NUU2MywgMHgxRDcwLCAweDVFNzIsIDB4NUU3MiwgMHgwRDk5LCAweDVFNzMsIDB4NUU3MywgMHgxRDZBLAorICAgIDB4NUU3NCwgMHg1RTc0LCAweDEwNDAsIDB4NUU3NywgMHg1RTc3LCAweDEzQjUsIDB4NUU3OCwgMHg1RTc4LCAweDFFMUEsCisgICAgMHg1RTc5LCAweDVFNzksIDB4MEQ5QSwgMHg1RTdCLCAweDVFN0IsIDB4MUVDRSwgMHg1RTdDLCAweDVFN0QsIDB4MThBRCwKKyAgICAweDVFN0UsIDB4NUU3RSwgMHgwRkVFLCAweDVFODQsIDB4NUU4NCwgMHgxOThGLCAweDVFODcsIDB4NUU4NywgMHgxNDQ0LAorICAgIDB4NUU4QSwgMHg1RThBLCAweDE0REUsIDB4NUU4RiwgMHg1RThGLCAweDE1MDAsIDB4NUU5NSwgMHg1RTk1LCAweDE5QzQsCisgICAgMHg1RTk3LCAweDVFOTcsIDB4MUEyNiwgMHg1RTlBLCAweDVFOUEsIDB4MEU1NiwgMHg1RTlDLCAweDVFOUMsIDB4MTQwMywKKyAgICAweDVFQTAsIDB4NUVBMCwgMHgxNERGLCAweDVFQTYsIDB4NUVBNiwgMHgxMEI3LCAweDVFQTcsIDB4NUVBNywgMHgxQUM5LAorICAgIDB4NUVBQiwgMHg1RUFCLCAweDBFOTksIDB4NUVBRCwgMHg1RUFELCAweDFBMzksIDB4NUVCNSwgMHg1RUI1LCAweDE2QzAsCisgICAgMHg1RUI2LCAweDVFQjYsIDB4MTUwMSwgMHg1RUI3LCAweDVFQjcsIDB4MERENSwgMHg1RUI4LCAweDVFQjgsIDB4MTgyNSwKKyAgICAweDVFQkUsIDB4NUVCRSwgMHgxOEFGLCAweDVFQzIsIDB4NUVDMiwgMHgxNEUwLCAweDVFQzgsIDB4NUVDOCwgMHgxREM0LAorICAgIDB4NUVDOSwgMHg1RUM5LCAweDExODMsIDB4NUVDQSwgMHg1RUNBLCAweDExM0MsIDB4NUVEMCwgMHg1RUQwLCAweDBGNDUsCisgICAgMHg1RUQzLCAweDVFRDMsIDB4MEVFNywgMHg1RUQ2LCAweDVFRDYsIDB4MTFDQSwgMHg1RURBLCAweDVFREEsIDB4MUFEOCwKKyAgICAweDVFREIsIDB4NUVEQiwgMHgxOUZGLCAweDVFREYsIDB4NUVERiwgMHgxMkMzLCAweDVFRTAsIDB4NUVFMCwgMHgxQkI5LAorICAgIDB4NUVFMiwgMHg1RUUyLCAweDFENzEsIDB4NUVFMywgMHg1RUUzLCAweDBGMDMsIDB4NUVFQywgMHg1RUVDLCAweDExNUMsCisgICAgMHg1RUYzLCAweDVFRjMsIDB4MUMxRCwgMHg1RUY2LCAweDVFRjYsIDB4MTc0OSwgMHg1RUY3LCAweDVFRjcsIDB4MUEzQSwKKyAgICAweDVFRkEsIDB4NUVGQSwgMHgwRTE1LCAweDVFRkIsIDB4NUVGQiwgMHgxRUZBLCAweDVGMDEsIDB4NUYwMSwgMHgxM0E4LAorICAgIDB4NUYwNCwgMHg1RjA0LCAweDExQjksIDB4NUYwQSwgMHg1RjBBLCAweDFENzIsIDB4NUYwRiwgMHg1RjBGLCAweDE2NUEsCisgICAgMHg1RjExLCAweDVGMTEsIDB4MTY0NSwgMHg1RjEzLCAweDVGMTMsIDB4MEY3QywgMHg1RjE0LCAweDVGMTQsIDB4MUE4MywKKyAgICAweDVGMTUsIDB4NUYxNSwgMHgxOTMzLCAweDVGMTcsIDB4NUYxNywgMHgxNDM0LCAweDVGMTgsIDB4NUYxOCwgMHgxRUFFLAorICAgIDB4NUYxQiwgMHg1RjFCLCAweDE5MTMsIDB4NUYxRiwgMHg1RjFGLCAweDFBNkMsIDB4NUYyNiwgMHg1RjI2LCAweDFFMzgsCisgICAgMHg1RjI3LCAweDVGMjcsIDB4MUU3RiwgMHg1RjI5LCAweDVGMjksIDB4MTA0QiwgMHg1RjMxLCAweDVGMzEsIDB4MTZGMCwKKyAgICAweDVGMzUsIDB4NUYzNSwgMHgxOTkwLCAweDVGM0EsIDB4NUYzQSwgMHgwREQ2LCAweDVGM0MsIDB4NUYzQywgMHgxREI1LAorICAgIDB4NUY0OCwgMHg1RjQ4LCAweDFDRjMsIDB4NUY0QSwgMHg1RjRBLCAweDBERDcsIDB4NUY0QywgMHg1RjRDLCAweDEyRjcsCisgICAgMHg1RjRFLCAweDVGNEUsIDB4MTI0MiwgMHg1RjU2LCAweDVGNTYsIDB4MTA2NiwgMHg1RjU3LCAweDVGNTcsIDB4MUU3MCwKKyAgICAweDVGNTksIDB4NUY1OSwgMHgxRjNELCAweDVGNUIsIDB4NUY1QiwgMHgxOTE0LCAweDVGNjIsIDB4NUY2MiwgMHgxRTVGLAorICAgIDB4NUY2NiwgMHg1RjY2LCAweDE3MUYsIDB4NUY2NywgMHg1RjY3LCAweDE4NTYsIDB4NUY2OSwgMHg1RjY5LCAweDFCQ0UsCisgICAgMHg1RjZBLCAweDVGNkEsIDB4MUQ5QSwgMHg1RjZCLCAweDVGNkIsIDB4MUE4NCwgMHg1RjZDLCAweDVGNkMsIDB4MTQ2OSwKKyAgICAweDVGNkQsIDB4NUY2RCwgMHgxRDU5LCAweDVGNzAsIDB4NUY3MCwgMHgxQkJBLCAweDVGNzEsIDB4NUY3MSwgMHgxNzc0LAorICAgIDB4NUY3NywgMHg1Rjc3LCAweDEzNTMsIDB4NUY3OSwgMHg1Rjc5LCAweDE3M0QsIDB4NUY3QywgMHg1RjdDLCAweDFEQUQsCisgICAgMHg1RjdGLCAweDVGN0YsIDB4MTQzNSwgMHg1RjgwLCAweDVGODAsIDB4MTdFRSwgMHg1RjgxLCAweDVGODEsIDB4MUEzQiwKKyAgICAweDVGODUsIDB4NUY4NSwgMHgxMEExLCAweDVGODcsIDB4NUY4NywgMHgxNjA5LCAweDVGOEEsIDB4NUY4QSwgMHgxRUZCLAorICAgIDB4NUY4QiwgMHg1RjhCLCAweDExRjgsIDB4NUY4QywgMHg1RjhDLCAweDFGMjYsIDB4NUY5MCwgMHg1RjkwLCAweDE1MDIsCisgICAgMHg1RjkxLCAweDVGOTEsIDB4MEU1NywgMHg1RjkyLCAweDVGOTIsIDB4MTBCOCwgMHg1Rjk3LCAweDVGOTcsIDB4MTEwQywKKyAgICAweDVGOTgsIDB4NUY5OCwgMHgxMzZDLCAweDVGOTksIDB4NUY5OSwgMHgxNDhGLCAweDVGOUUsIDB4NUY5RSwgMHgxQUI3LAorICAgIDB4NUZBMCwgMHg1RkEwLCAweDExNDYsIDB4NUZBMSwgMHg1RkExLCAweDE3MEYsIDB4NUZBOCwgMHg1RkE4LCAweDFFRTIsCisgICAgMHg1RkE5LCAweDVGQTksIDB4MTNENywgMHg1RkFBLCAweDVGQUEsIDB4MTYwQSwgMHg1RkFFLCAweDVGQUUsIDB4MTJGOCwKKyAgICAweDVGQjUsIDB4NUZCNSwgMHgxQjdFLCAweDVGQjcsIDB4NUZCNywgMHgxMEFCLCAweDVGQjksIDB4NUZCOSwgMHgxQzAyLAorICAgIDB4NUZCRCwgMHg1RkJELCAweDFGM0UsIDB4NUZDMywgMHg1RkMzLCAweDE2ODQsIDB4NUZDNSwgMHg1RkM1LCAweDFEQjYsCisgICAgMHg1RkNDLCAweDVGQ0MsIDB4MEZFRiwgMHg1RkNELCAweDVGQ0QsIDB4MTkzNCwgMHg1RkQ2LCAweDVGRDYsIDB4MUM1MCwKKyAgICAweDVGRDcsIDB4NUZENywgMHgxQjIzLCAweDVGRDgsIDB4NUZEOSwgMHgxMjVBLCAweDVGRTAsIDB4NUZFMCwgMHgxQzhCLAorICAgIDB4NUZFQiwgMHg1RkVCLCAweDFDRDMsIDB4NUZGNSwgMHg1RkY1LCAweDEwNDMsIDB4NUZGRCwgMHg1RkZELCAweDFFQUEsCisgICAgMHg1RkZGLCAweDVGRkYsIDB4MTQyNiwgMHg2MDBGLCAweDYwMEYsIDB4MTZDQiwgMHg2MDEyLCAweDYwMTIsIDB4MTA0QywKKyAgICAweDYwMTYsIDB4NjAxNiwgMHgxRDgwLCAweDYwMUMsIDB4NjAxQywgMHgxMThFLCAweDYwMUQsIDB4NjAxRCwgMHgxNDkwLAorICAgIDB4NjAyMCwgMHg2MDIwLCAweDFEMEEsIDB4NjAyMSwgMHg2MDIxLCAweDE5MTUsIDB4NjAyNSwgMHg2MDI1LCAweDBGRDUsCisgICAgMHg2MDI3LCAweDYwMjcsIDB4MTU2NSwgMHg2MDI4LCAweDYwMjgsIDB4MTg3OCwgMHg2MDJBLCAweDYwMkEsIDB4MEYxMywKKyAgICAweDYwMkYsIDB4NjAyRiwgMHgwRTI5LCAweDYwNDEsIDB4NjA0MSwgMHgxOTQ5LCAweDYwNDIsIDB4NjA0MiwgMHgxNjBCLAorICAgIDB4NjA0MywgMHg2MDQzLCAweDE2NDYsIDB4NjA0RCwgMHg2MDRELCAweDFFRTMsIDB4NjA1MCwgMHg2MDUwLCAweDBFRDAsCisgICAgMHg2MDUyLCAweDYwNTIsIDB4MURGQiwgMHg2MDU1LCAweDYwNTUsIDB4MTUwMywgMHg2MDU5LCAweDYwNTksIDB4MTZGQSwKKyAgICAweDYwNUQsIDB4NjA1RCwgMHgwRUZDLCAweDYwNjIsIDB4NjA2MiwgMHgxRUZDLCAweDYwNjMsIDB4NjA2MywgMHgxOTVCLAorICAgIDB4NjA2NCwgMHg2MDY0LCAweDFGNEEsIDB4NjA2NSwgMHg2MDY1LCAweDFDQUQsIDB4NjA2OCwgMHg2MDY4LCAweDFERDQsCisgICAgMHg2MDY5LCAweDYwNjksIDB4MThFNiwgMHg2MDZBLCAweDYwNkEsIDB4MEQ4QywgMHg2MDZDLCAweDYwNkMsIDB4MTA0NCwKKyAgICAweDYwNkQsIDB4NjA2RCwgMHgwRUQxLCAweDYwNkYsIDB4NjA2RiwgMHgxNjVCLCAweDYwNzAsIDB4NjA3MCwgMHgxRjVGLAorICAgIDB4NjA4NSwgMHg2MDg1LCAweDE3NjEsIDB4NjA4OSwgMHg2MDg5LCAweDE2ODEsIDB4NjA4QywgMHg2MDhDLCAweDFBNkQsCisgICAgMHg2MDhELCAweDYwOEQsIDB4MURENSwgMHg2MDk0LCAweDYwOTQsIDB4MUVGRCwgMHg2MDk2LCAweDYwOTYsIDB4MUQ1MCwKKyAgICAweDYwOUEsIDB4NjA5QSwgMHgxNUIyLCAweDYwOUIsIDB4NjA5QiwgMHgxQTAwLCAweDYwOUYsIDB4NjA5RiwgMHgxN0FFLAorICAgIDB4NjBBMCwgMHg2MEEwLCAweDE4QjAsIDB4NjBBMywgMHg2MEEzLCAweDFFQ0YsIDB4NjBBNCwgMHg2MEE0LCAweDFDNTYsCisgICAgMHg2MEE3LCAweDYwQTcsIDB4MTIwQiwgMHg2MEIwLCAweDYwQjAsIDB4MUFCOCwgMHg2MEIyLCAweDYwQjIsIDB4MTQ0NSwKKyAgICAweDYwQjMsIDB4NjBCMywgMHgxMEFDLCAweDYwQjQsIDB4NjBCNCwgMHgxQzkwLCAweDYwQjYsIDB4NjBCNiwgMHgxMzA3LAorICAgIDB4NjBCOCwgMHg2MEI4LCAweDBFN0YsIDB4NjBCQywgMHg2MEJDLCAweDEwQjksIDB4NjBCRCwgMHg2MEJELCAweDFCREMsCisgICAgMHg2MEM1LCAweDYwQzUsIDB4MUEzQywgMHg2MEM3LCAweDYwQzcsIDB4MTBFMCwgMHg2MEQxLCAweDYwRDEsIDB4MUVBMSwKKyAgICAweDYwREEsIDB4NjBEQSwgMHgxRUFCLCAweDYwREMsIDB4NjBEQywgMHgxNTFFLCAweDYwREYsIDB4NjBERiwgMHgxOEIxLAorICAgIDB4NjBFMCwgMHg2MEUwLCAweDFFNzEsIDB4NjBFMSwgMHg2MEUxLCAweDE2QTUsIDB4NjBGMCwgMHg2MEYwLCAweDFDRDksCisgICAgMHg2MEYxLCAweDYwRjEsIDB4MTA1MiwgMHg2MEYzLCAweDYwRjMsIDB4MTRFMSwgMHg2MEY2LCAweDYwRjYsIDB4MUVFNCwKKyAgICAweDYwRjksIDB4NjBGOSwgMHgxNkVBLCAweDYwRkEsIDB4NjBGQSwgMHgxNTY2LCAweDYwRkIsIDB4NjBGQiwgMHgxQ0E1LAorICAgIDB4NjEwMSwgMHg2MTAxLCAweDE1Q0EsIDB4NjEwNiwgMHg2MTA2LCAweDBFMTYsIDB4NjEwOCwgMHg2MTA5LCAweDE4QjIsCisgICAgMHg2MTBELCAweDYxMEQsIDB4MTMwOCwgMHg2MTBFLCAweDYxMEUsIDB4MUQ1RCwgMHg2MTBGLCAweDYxMEYsIDB4MThGRSwKKyAgICAweDYxMTUsIDB4NjExNSwgMHgxNkE2LCAweDYxMUEsIDB4NjExQSwgMHgxODNGLCAweDYxMUIsIDB4NjExQiwgMHgxNkQ0LAorICAgIDB4NjExRiwgMHg2MTFGLCAweDBEQkEsIDB4NjEyNywgMHg2MTI3LCAweDBGMTQsIDB4NjEzMCwgMHg2MTMwLCAweDFFRTUsCisgICAgMHg2MTM0LCAweDYxMzQsIDB4MUJCQiwgMHg2MTM3LCAweDYxMzcsIDB4MERFRCwgMHg2MTNDLCAweDYxM0MsIDB4MTY2RCwKKyAgICAweDYxM0UsIDB4NjEzRSwgMHgwREVFLCAweDYxM0YsIDB4NjEzRiwgMHgxODc5LCAweDYxNDIsIDB4NjE0MiwgMHgxODI2LAorICAgIDB4NjE0NCwgMHg2MTQ0LCAweDExRjksIDB4NjE0NywgMHg2MTQ3LCAweDE4RTcsIDB4NjE0OCwgMHg2MTQ4LCAweDE5NUMsCisgICAgMHg2MTRBLCAweDYxNEEsIDB4MEU0NywgMHg2MTRCLCAweDYxNEIsIDB4MUQwQiwgMHg2MTRDLCAweDYxNEMsIDB4MUVFNiwKKyAgICAweDYxNTMsIDB4NjE1MywgMHgxRDlCLCAweDYxNTUsIDB4NjE1NSwgMHgxMkExLCAweDYxNTgsIDB4NjE1OSwgMHgxQkFELAorICAgIDB4NjE1RCwgMHg2MTVELCAweDFEMkYsIDB4NjE1RiwgMHg2MTVGLCAweDFEMUQsIDB4NjE2MiwgMHg2MTYyLCAweDEyNDMsCisgICAgMHg2MTYzLCAweDYxNjMsIDB4MEVFRSwgMHg2MTY0LCAweDYxNjQsIDB4MEQ4RCwgMHg2MTY3LCAweDYxNjcsIDB4MUU3MiwKKyAgICAweDYxNjgsIDB4NjE2OCwgMHgwREVGLCAweDYxNkIsIDB4NjE2QiwgMHgxQUI5LCAweDYxNkUsIDB4NjE2RSwgMHgxMTVELAorICAgIDB4NjE3MCwgMHg2MTcwLCAweDE4OTQsIDB4NjE3NiwgMHg2MTc2LCAweDBFNTgsIDB4NjE3NywgMHg2MTc3LCAweDBERDgsCisgICAgMHg2MTdELCAweDYxN0QsIDB4MUJFMSwgMHg2MTdFLCAweDYxN0UsIDB4MTgxOCwgMHg2MTgxLCAweDYxODEsIDB4MUM1NywKKyAgICAweDYxODIsIDB4NjE4MiwgMHgxODQwLCAweDYxOEEsIDB4NjE4QSwgMHgxNDQ2LCAweDYxOEUsIDB4NjE4RSwgMHgxQjE0LAorICAgIDB4NjE5MCwgMHg2MTkwLCAweDExNzEsIDB4NjE5MSwgMHg2MTkxLCAweDE0NzUsIDB4NjE5NCwgMHg2MTk0LCAweDFDMzEsCisgICAgMHg2MTk4LCAweDYxOTgsIDB4MUY2QywgMHg2MTk5LCAweDYxOTksIDB4MUY2QiwgMHg2MTlBLCAweDYxOUEsIDB4MUNGNCwKKyAgICAweDYxQTQsIDB4NjFBNCwgMHgxNDI3LCAweDYxQTcsIDB4NjFBNywgMHgxMEYwLCAweDYxQTksIDB4NjFBOSwgMHgwRTJDLAorICAgIDB4NjFBQiwgMHg2MUFCLCAweDEzMDksIDB4NjFBQywgMHg2MUFDLCAweDBFNTksIDB4NjFBRSwgMHg2MUFFLCAweDEyQ0UsCisgICAgMHg2MUIyLCAweDYxQjIsIDB4MUUyQiwgMHg2MUI2LCAweDYxQjYsIDB4MTcxOSwgMHg2MUJBLCAweDYxQkEsIDB4MTA3QiwKKyAgICAweDYxQkUsIDB4NjFCRSwgMHgwREJCLCAweDYxQzMsIDB4NjFDMywgMHgwRkJBLCAweDYxQzcsIDB4NjFDNywgMHgwRDlCLAorICAgIDB4NjFDOCwgMHg2MUM4LCAweDFFMEMsIDB4NjFDOSwgMHg2MUM5LCAweDE4RjcsIDB4NjFDQSwgMHg2MUNBLCAweDE3QUYsCisgICAgMHg2MUNCLCAweDYxQ0IsIDB4MTJDRiwgMHg2MUU2LCAweDYxRTYsIDB4MTAyNywgMHg2MUYyLCAweDYxRjIsIDB4MUI3RiwKKyAgICAweDYxRjYsIDB4NjFGNiwgMHgxMTE3LCAweDYxRjcsIDB4NjFGNywgMHgxRUZFLCAweDYxRjgsIDB4NjFGOCwgMHgxRTM5LAorICAgIDB4NjFGQSwgMHg2MUZBLCAweDFCQUYsIDB4NjFGQywgMHg2MUZDLCAweDBGNDYsIDB4NjFGRiwgMHg2MUZGLCAweDE4RkYsCisgICAgMHg2MjAwLCAweDYyMDAsIDB4MTE3MiwgMHg2MjA3LCAweDYyMDcsIDB4MTA5MywgMHg2MjA4LCAweDYyMDgsIDB4MEVEQywKKyAgICAweDYyMEEsIDB4NjIwQSwgMHgxMkQwLCAweDYyMEMsIDB4NjIwQywgMHgxNjIzLCAweDYyMEQsIDB4NjIwRCwgMHgxNUNCLAorICAgIDB4NjIwRSwgMHg2MjBFLCAweDE4RTEsIDB4NjIxMCwgMHg2MjEwLCAweDE1NjcsIDB4NjIxMSwgMHg2MjExLCAweDE2OTUsCisgICAgMHg2MjEyLCAweDYyMTIsIDB4MEU4MCwgMHg2MjE2LCAweDYyMTYsIDB4MUVBMiwgMHg2MjFBLCAweDYyMUEsIDB4MUJFMiwKKyAgICAweDYyMUYsIDB4NjIxRiwgMHgwRkIzLCAweDYyMjEsIDB4NjIyMSwgMHgwREJDLCAweDYyMkEsIDB4NjIyQSwgMHgxQTFELAorICAgIDB4NjIyRSwgMHg2MjJFLCAweDExRjAsIDB4NjIzMCwgMHg2MjMwLCAweDFBMDEsIDB4NjIzMSwgMHg2MjMxLCAweDFGNkQsCisgICAgMHg2MjM0LCAweDYyMzQsIDB4MTBBMiwgMHg2MjM2LCAweDYyMzYsIDB4MUU4MCwgMHg2MjNFLCAweDYyM0UsIDB4MTE1RSwKKyAgICAweDYyM0YsIDB4NjIzRiwgMHgxMzU0LCAweDYyNDAsIDB4NjI0MCwgMHgxNTgzLCAweDYyNDEsIDB4NjI0MSwgMHgxRDYwLAorICAgIDB4NjI0NywgMHg2MjQ3LCAweDE1MzAsIDB4NjI0OCwgMHg2MjQ4LCAweDFFODEsIDB4NjI0OSwgMHg2MjQ5LCAweDE0NDcsCisgICAgMHg2MjRCLCAweDYyNEIsIDB4MTVDQywgMHg2MjRELCAweDYyNEQsIDB4MTlBRSwgMHg2MjUzLCAweDYyNTMsIDB4MUNEQSwKKyAgICAweDYyNTgsIDB4NjI1OCwgMHgxQ0U2LCAweDYyNkUsIDB4NjI2RSwgMHgxNDI4LCAweDYyNzEsIDB4NjI3MSwgMHgwRkQ2LAorICAgIDB4NjI3NiwgMHg2Mjc2LCAweDE0MDQsIDB4NjI3OSwgMHg2Mjc5LCAweDE0NDgsIDB4NjI3QywgMHg2MjdDLCAweDE2REMsCisgICAgMHg2MjdGLCAweDYyN0YsIDB4MTYzNywgMHg2MjgwLCAweDYyODAsIDB4MEZGMCwgMHg2Mjg0LCAweDYyODQsIDB4MUMzMiwKKyAgICAweDYyODksIDB4NjI4OSwgMHgwRTQwLCAweDYyOEEsIDB4NjI4QSwgMHgxRDM1LCAweDYyOTEsIDB4NjI5MSwgMHgxNzFBLAorICAgIDB4NjI5MiwgMHg2MjkyLCAweDE1MDQsIDB4NjI5NSwgMHg2Mjk1LCAweDFEMkMsIDB4NjI5NywgMHg2Mjk3LCAweDFERkMsCisgICAgMHg2Mjk4LCAweDYyOTgsIDB4MUExRSwgMHg2MjlCLCAweDYyOUIsIDB4MUQ4MSwgMHg2MkFCLCAweDYyQUIsIDB4MURBRSwKKyAgICAweDYyQjEsIDB4NjJCMSwgMHgxRDgyLCAweDYyQjUsIDB4NjJCNSwgMHgxOUM1LCAweDYyQjksIDB4NjJCOSwgMHgxMjUyLAorICAgIDB4NjJCQywgMHg2MkJDLCAweDE2QzYsIDB4NjJCRCwgMHg2MkJELCAweDFDNjIsIDB4NjJDMiwgMHg2MkMyLCAweDE0MzYsCisgICAgMHg2MkM3LCAweDYyQzcsIDB4MTJEMSwgMHg2MkM4LCAweDYyQzgsIDB4MTA0NSwgMHg2MkM5LCAweDYyQzksIDB4MTEzOSwKKyAgICAweDYyQ0MsIDB4NjJDQywgMHgxMzJELCAweDYyQ0QsIDB4NjJDRCwgMHgxMzE4LCAweDYyQ0YsIDB4NjJDRiwgMHgxMDI4LAorICAgIDB4NjJEMCwgMHg2MkQwLCAweDBGMTUsIDB4NjJEMiwgMHg2MkQyLCAweDBFMDUsIDB4NjJEMywgMHg2MkQzLCAweDFCRTMsCisgICAgMHg2MkQ0LCAweDYyRDQsIDB4MTM0MywgMHg2MkQ2LCAweDYyRDYsIDB4MUNEQiwgMHg2MkQ3LCAweDYyRDcsIDB4MTgwNCwKKyAgICAweDYyRDgsIDB4NjJEOCwgMHgwRjQ3LCAweDYyRDksIDB4NjJEOSwgMHgxQUIzLCAweDYyREIsIDB4NjJEQiwgMHgxQzMzLAorICAgIDB4NjJEQywgMHg2MkRDLCAweDEzNkQsIDB4NjJFQywgMHg2MkVDLCAweDBFRkQsIDB4NjJFRCwgMHg2MkVELCAweDE2NUMsCisgICAgMHg2MkVFLCAweDYyRUUsIDB4MTAyMSwgMHg2MkVGLCAweDYyRUYsIDB4MUIxNiwgMHg2MkYxLCAweDYyRjEsIDB4MEVEMiwKKyAgICAweDYyRjMsIDB4NjJGMywgMHgwRjg2LCAweDYyRjcsIDB4NjJGNywgMHgwRTlBLCAweDYyRkUsIDB4NjJGRSwgMHgxNjJFLAorICAgIDB4NjJGRiwgMHg2MkZGLCAweDEwMjksIDB4NjMwMSwgMHg2MzAxLCAweDFCMjQsIDB4NjMwNywgMHg2MzA3LCAweDFCMjUsCisgICAgMHg2MzA5LCAweDYzMDksIDB4MTZCMSwgMHg2MzExLCAweDYzMTEsIDB4MTBCQSwgMHg2MzJCLCAweDYzMkIsIDB4MUFDQSwKKyAgICAweDYzMkYsIDB4NjMyRiwgMHgxQjQ3LCAweDYzM0EsIDB4NjMzQSwgMHgxQTNELCAweDYzM0IsIDB4NjMzQiwgMHgxNzRCLAorICAgIDB4NjMzRCwgMHg2MzNELCAweDEyNDQsIDB4NjMzRSwgMHg2MzNFLCAweDFFNTMsIDB4NjM0OSwgMHg2MzQ5LCAweDFCOEYsCisgICAgMHg2MzRDLCAweDYzNEMsIDB4MUQ0RCwgMHg2MzRGLCAweDYzNEYsIDB4MTAyRiwgMHg2MzUwLCAweDYzNTAsIDB4MTc0QSwKKyAgICAweDYzNTUsIDB4NjM1NSwgMHgxRDgzLCAweDYzNjcsIDB4NjM2NywgMHgxM0VBLCAweDYzNjgsIDB4NjM2OCwgMHgxNDkxLAorICAgIDB4NjM2RSwgMHg2MzZFLCAweDBFMDYsIDB4NjM3MiwgMHg2MzcyLCAweDBGODcsIDB4NjM3NywgMHg2Mzc3LCAweDFDMTYsCisgICAgMHg2MzdBLCAweDYzN0EsIDB4MTAzMCwgMHg2MzdCLCAweDYzN0IsIDB4MTA0NiwgMHg2MzdGLCAweDYzN0YsIDB4MTUwNSwKKyAgICAweDYzODMsIDB4NjM4MywgMHgxNTg0LCAweDYzODgsIDB4NjM4OCwgMHgxNUNELCAweDYzODksIDB4NjM4OSwgMHgxMEJCLAorICAgIDB4NjM4QywgMHg2MzhDLCAweDE5OTEsIDB4NjM5MiwgMHg2MzkyLCAweDEzNkUsIDB4NjM5NiwgMHg2Mzk2LCAweDE2REQsCisgICAgMHg2Mzk4LCAweDYzOTgsIDB4MEY3OSwgMHg2MzlCLCAweDYzOUIsIDB4MEYwRCwgMHg2M0EwLCAweDYzQTAsIDB4MTE0OSwKKyAgICAweDYzQTEsIDB4NjNBMSwgMHgxQkNGLCAweDYzQTIsIDB4NjNBMiwgMHgxQ0ZDLCAweDYzQTUsIDB4NjNBNSwgMHgxQTJELAorICAgIDB4NjNBNywgMHg2M0E3LCAweDBFRDMsIDB4NjNBOCwgMHg2M0E4LCAweDFDNjMsIDB4NjNBOSwgMHg2M0E5LCAweDE3MjksCisgICAgMHg2M0FBLCAweDYzQUEsIDB4MUE4NSwgMHg2M0MwLCAweDYzQzAsIDB4MEQ5QywgMHg2M0M0LCAweDYzQzQsIDB4MThCNCwKKyAgICAweDYzQzYsIDB4NjNDNiwgMHgwRjlELCAweDYzQ0YsIDB4NjNDRiwgMHgxMkM0LCAweDYzRDAsIDB4NjNEMCwgMHgxQTZFLAorICAgIDB4NjNENiwgMHg2M0Q2LCAweDE4RjMsIDB4NjNEQSwgMHg2M0RBLCAweDE2RkIsIDB4NjNEQiwgMHg2M0RCLCAweDFFRDAsCisgICAgMHg2M0UxLCAweDYzRTEsIDB4MTZBNywgMHg2M0VELCAweDYzRUQsIDB4MEUyRCwgMHg2M0VFLCAweDYzRUUsIDB4MUYzRiwKKyAgICAweDYzRjQsIDB4NjNGNCwgMHgxODdBLCAweDYzRjYsIDB4NjNGNiwgMHgxNkVCLCAweDYzRjcsIDB4NjNGNywgMHgxNENGLAorICAgIDB4NjQwRCwgMHg2NDBELCAweDE1QUMsIDB4NjQwRiwgMHg2NDBGLCAweDEzMTksIDB4NjQxNCwgMHg2NDE0LCAweDE1ODUsCisgICAgMHg2NDE2LCAweDY0MTYsIDB4MTgwNSwgMHg2NDE3LCAweDY0MTcsIDB4MTBCQywgMHg2NDFDLCAweDY0MUMsIDB4MTVDRSwKKyAgICAweDY0MjIsIDB4NjQyMiwgMHgxQjQ4LCAweDY0MkMsIDB4NjQyQywgMHgxMzJFLCAweDY0MkQsIDB4NjQyRCwgMHgxRDAxLAorICAgIDB4NjQzQSwgMHg2NDNBLCAweDFGNDYsIDB4NjQzRSwgMHg2NDNFLCAweDFCOTAsIDB4NjQ1OCwgMHg2NDU4LCAweDE5REYsCisgICAgMHg2NDYwLCAweDY0NjAsIDB4MUM1OCwgMHg2NDY5LCAweDY0NjksIDB4MTIzMCwgMHg2NDZGLCAweDY0NkYsIDB4MUIyNiwKKyAgICAweDY0NzgsIDB4NjQ3OSwgMHgxMkEyLCAweDY0N0EsIDB4NjQ3QSwgMHgxQTJFLCAweDY0ODgsIDB4NjQ4OCwgMHgxMUEwLAorICAgIDB4NjQ5MSwgMHg2NDkxLCAweDFEMTcsIDB4NjQ5MiwgMHg2NDkyLCAweDE0QzQsIDB4NjQ5MywgMHg2NDkzLCAweDE4MDYsCisgICAgMHg2NDlBLCAweDY0OUEsIDB4MTA0MSwgMHg2NDlFLCAweDY0OUUsIDB4MTA5NCwgMHg2NEE0LCAweDY0QTQsIDB4MUMwMywKKyAgICAweDY0QTUsIDB4NjRBNSwgMHgxMzQ0LCAweDY0QUIsIDB4NjRBQiwgMHgxMkQyLCAweDY0QUQsIDB4NjRBRCwgMHgxRDM2LAorICAgIDB4NjRBRSwgMHg2NEFFLCAweDFDNUQsIDB4NjRCMCwgMHg2NEIwLCAweDFCOTYsIDB4NjRCMiwgMHg2NEIyLCAweDEzMUEsCisgICAgMHg2NEJCLCAweDY0QkIsIDB4MTA3NCwgMHg2NEMxLCAweDY0QzEsIDB4MTdDQiwgMHg2NEM0LCAweDY0QzQsIDB4MTFBMSwKKyAgICAweDY0QzUsIDB4NjRDNSwgMHgxQkYxLCAweDY0QzcsIDB4NjRDNywgMHgxRDE1LCAweDY0Q0EsIDB4NjRDQSwgMHgwRTJFLAorICAgIDB4NjRDRCwgMHg2NENELCAweDFBODYsIDB4NjRDRSwgMHg2NENFLCAweDBFNUEsIDB4NjREMiwgMHg2NEQyLCAweDBGQzgsCisgICAgMHg2NEQ0LCAweDY0RDQsIDB4MTA3QywgMHg2NEQ4LCAweDY0RDgsIDB4MTM5RiwgMHg2NERBLCAweDY0REEsIDB4MEUwNywKKyAgICAweDY0RTEsIDB4NjRFMSwgMHgxMEEzLCAweDY0RTIsIDB4NjRFMiwgMHgxQ0U3LCAweDY0RTUsIDB4NjRFNSwgMHgxMTMwLAorICAgIDB4NjRFNiwgMHg2NEU2LCAweDFCQTcsIDB4NjRFNywgMHg2NEU3LCAweDBFMDgsIDB4NjRFQywgMHg2NEVDLCAweDE5MDAsCisgICAgMHg2NEYyLCAweDY0RjIsIDB4MUJFNCwgMHg2NEY0LCAweDY0RjQsIDB4MUVDNSwgMHg2NEZBLCAweDY0RkEsIDB4MUQzNywKKyAgICAweDY0RkUsIDB4NjRGRSwgMHgxODA3LCAweDY1MDAsIDB4NjUwMCwgMHgxMzJGLCAweDY1MDQsIDB4NjUwNCwgMHgxRDE4LAorICAgIDB4NjUxOCwgMHg2NTE4LCAweDE2RkMsIDB4NjUxRCwgMHg2NTFELCAweDE1NUYsIDB4NjUyMywgMHg2NTIzLCAweDExNzMsCisgICAgMHg2NTJBLCAweDY1MkEsIDB4MEYyMywgMHg2NTJCLCAweDY1MkIsIDB4MUVDNiwgMHg2NTJDLCAweDY1MkMsIDB4MTEzMSwKKyAgICAweDY1MkYsIDB4NjUyRiwgMHgxQjI3LCAweDY1MzYsIDB4NjUzNiwgMHgxNUNGLCAweDY1MzcsIDB4NjUzNywgMHgwRTlCLAorICAgIDB4NjUzOCwgMHg2NTM4LCAweDE4QjUsIDB4NjUzOSwgMHg2NTM5LCAweDBERjAsIDB4NjUzQiwgMHg2NTNCLCAweDBFRDQsCisgICAgMHg2NTNFLCAweDY1M0UsIDB4MTM1NSwgMHg2NTNGLCAweDY1M0YsIDB4MUEzRSwgMHg2NTQ1LCAweDY1NDUsIDB4MEU5QywKKyAgICAweDY1NDgsIDB4NjU0OCwgMHgxRjE0LCAweDY1NEQsIDB4NjU0RCwgMHgxNTA2LCAweDY1NEUsIDB4NjU0RSwgMHgwRjI0LAorICAgIDB4NjU0RiwgMHg2NTRGLCAweDEzMEEsIDB4NjU1MSwgMHg2NTUxLCAweDBGNDgsIDB4NjU1NiwgMHg2NTU2LCAweDE3QjAsCisgICAgMHg2NTU3LCAweDY1NTcsIDB4MUQ1MSwgMHg2NTVFLCAweDY1NUUsIDB4MUJCQywgMHg2NTYyLCAweDY1NjIsIDB4MERCRCwKKyAgICAweDY1NjMsIDB4NjU2MywgMHgxNEJBLCAweDY1NjYsIDB4NjU2NiwgMHgxMEUxLCAweDY1NkMsIDB4NjU2QywgMHgwRTVCLAorICAgIDB4NjU2RCwgMHg2NTZELCAweDE2RkQsIDB4NjU3MiwgMHg2NTcyLCAweDBFOUQsIDB4NjU3NCwgMHg2NTc0LCAweDFBM0YsCisgICAgMHg2NTc1LCAweDY1NzUsIDB4MTlFMCwgMHg2NTc3LCAweDY1NzcsIDB4MTQwNSwgMHg2NTc4LCAweDY1NzgsIDB4MTVEMCwKKyAgICAweDY1N0UsIDB4NjU3RSwgMHgxNTMxLCAweDY1ODIsIDB4NjU4MiwgMHgxMTg0LCAweDY1ODMsIDB4NjU4MywgMHgxRDczLAorICAgIDB4NjU4NSwgMHg2NTg1LCAweDFGMTUsIDB4NjU4NywgMHg2NTg3LCAweDEyRTgsIDB4NjU4QywgMHg2NThDLCAweDE0NkEsCisgICAgMHg2NTkwLCAweDY1OTAsIDB4MTQ0OSwgMHg2NTkxLCAweDY1OTEsIDB4MTMzMCwgMHg2NTk3LCAweDY1OTcsIDB4MTBGRCwKKyAgICAweDY1OTksIDB4NjU5OSwgMHgxMUNCLCAweDY1OUIsIDB4NjU5QiwgMHgwRUI4LCAweDY1OUMsIDB4NjU5QywgMHgxNDkyLAorICAgIDB4NjU5RiwgMHg2NTlGLCAweDFCNzYsIDB4NjVBMSwgMHg2NUExLCAweDE2QjksIDB4NjVBNCwgMHg2NUE0LCAweDBGQkIsCisgICAgMHg2NUE1LCAweDY1QTUsIDB4MUJFNSwgMHg2NUE3LCAweDY1QTcsIDB4MTQwNiwgMHg2NUFCLCAweDY1QUIsIDB4MTk3MCwKKyAgICAweDY1QUMsIDB4NjVBQywgMHgxQkIwLCAweDY1QUYsIDB4NjVBRiwgMHgxNDkzLCAweDY1QjAsIDB4NjVCMCwgMHgxNjZFLAorICAgIDB4NjVCNywgMHg2NUI3LCAweDEwNjcsIDB4NjVCOSwgMHg2NUI5LCAweDEzNTYsIDB4NjVCQywgMHg2NUJDLCAweDE3MTAsCisgICAgMHg2NUJELCAweDY1QkQsIDB4MTY0NywgMHg2NUMxLCAweDY1QzEsIDB4MTM1NywgMHg2NUM1LCAweDY1QzUsIDB4MTE1RiwKKyAgICAweDY1Q0IsIDB4NjVDQiwgMHgxNTMyLCAweDY1Q0MsIDB4NjVDQywgMHgxQTQwLCAweDY1Q0YsIDB4NjVDRiwgMHgxQUFDLAorICAgIDB4NjVEMiwgMHg2NUQyLCAweDExRTIsIDB4NjVENywgMHg2NUQ3LCAweDBGRjEsIDB4NjVFMCwgMHg2NUUwLCAweDEyRDMsCisgICAgMHg2NUUzLCAweDY1RTMsIDB4MEZGMiwgMHg2NUU1LCAweDY1RTUsIDB4MTk0MCwgMHg2NUU2LCAweDY1RTYsIDB4MTA2OCwKKyAgICAweDY1RTgsIDB4NjVFOCwgMHgxQjI4LCAweDY1RTksIDB4NjVFOSwgMHgxQTg3LCAweDY1RUMsIDB4NjVFQywgMHgxNjBDLAorICAgIDB4NjVFRCwgMHg2NUVELCAweDE4NTcsIDB4NjVGMSwgMHg2NUYxLCAweDFERDYsIDB4NjVGNCwgMHg2NUY0LCAweDE4NDEsCisgICAgMHg2NUZBLCAweDY1RkEsIDB4MTdFRiwgMHg2NUZCLCAweDY1RkMsIDB4MTMwQiwgMHg2NUZELCAweDY1RkQsIDB4MTBFMiwKKyAgICAweDY1RkYsIDB4NjVGRiwgMHgxN0IxLCAweDY2MDYsIDB4NjYwNiwgMHgwRUMxLCAweDY2MDcsIDB4NjYwNywgMHgxNjM4LAorICAgIDB4NjYwOSwgMHg2NjA5LCAweDEzNTgsIDB4NjYwQSwgMHg2NjBBLCAweDFFODIsIDB4NjYwQywgMHg2NjBDLCAweDFCQkQsCisgICAgMHg2NjBFLCAweDY2MEUsIDB4MTI4RiwgMHg2NjBGLCAweDY2MEYsIDB4MUVBNSwgMHg2NjEwLCAweDY2MTAsIDB4MTQyOSwKKyAgICAweDY2MTEsIDB4NjYxMSwgMHgwRkM5LCAweDY2MTMsIDB4NjYxMywgMHgxNzNFLCAweDY2MTQsIDB4NjYxNCwgMHgxNTFGLAorICAgIDB4NjYxNSwgMHg2NjE1LCAweDFGNTMsIDB4NjYxRSwgMHg2NjFFLCAweDEzQjYsIDB4NjYxRiwgMHg2NjFGLCAweDE1NjgsCisgICAgMHg2NjIwLCAweDY2MjAsIDB4MTc3NSwgMHg2NjI1LCAweDY2MjUsIDB4MUM4NCwgMHg2NjI3LCAweDY2MjcsIDB4MTI2OCwKKyAgICAweDY2MjgsIDB4NjYyOCwgMHgxOTcxLCAweDY2MkQsIDB4NjYyRCwgMHgxNTg2LCAweDY2MkYsIDB4NjYyRiwgMHgxNjQ4LAorICAgIDB4NjYzMCwgMHg2NjMwLCAweDFEQzUsIDB4NjYzMSwgMHg2NjMxLCAweDE4NTgsIDB4NjYzNCwgMHg2NjM0LCAweDEyQzUsCisgICAgMHg2NjM2LCAweDY2MzYsIDB4MUJCRSwgMHg2NjNBLCAweDY2M0EsIDB4MTNCNywgMHg2NjNCLCAweDY2M0IsIDB4MTZDQywKKyAgICAweDY2NDEsIDB4NjY0MSwgMHgxQTg4LCAweDY2NDIsIDB4NjY0MiwgMHgxNjQ5LCAweDY2NDMsIDB4NjY0NCwgMHgxRUU3LAorICAgIDB4NjY0OSwgMHg2NjQ5LCAweDFCNDksIDB4NjY0QiwgMHg2NjRCLCAweDFCNEEsIDB4NjY0RiwgMHg2NjRGLCAweDE2QjIsCisgICAgMHg2NjU5LCAweDY2NTksIDB4MUFGQywgMHg2NjVCLCAweDY2NUIsIDB4MUUzQSwgMHg2NjVELCAweDY2NUQsIDB4MUFEOSwKKyAgICAweDY2NUUsIDB4NjY1RSwgMHgxRjZFLCAweDY2NUYsIDB4NjY1RiwgMHgxNTY5LCAweDY2NjQsIDB4NjY2NCwgMHgxN0IyLAorICAgIDB4NjY2NSwgMHg2NjY1LCAweDFFRDIsIDB4NjY2NiwgMHg2NjY2LCAweDFFRkYsIDB4NjY2NywgMHg2NjY3LCAweDFFODMsCisgICAgMHg2NjY4LCAweDY2NjgsIDB4MTY2RiwgMHg2NjY5LCAweDY2NjksIDB4MTI0NSwgMHg2NjZCLCAweDY2NkIsIDB4MUNFOCwKKyAgICAweDY2NkUsIDB4NjY2RSwgMHgxM0M2LCAweDY2NkYsIDB4NjY2RiwgMHgwRTVDLCAweDY2NzMsIDB4NjY3MywgMHgxNTIwLAorICAgIDB4NjY3NCwgMHg2Njc0LCAweDFDMUUsIDB4NjY3NiwgMHg2Njc2LCAweDFBNDEsIDB4NjY3NywgMHg2Njc3LCAweDBGOTYsCisgICAgMHg2Njc4LCAweDY2NzgsIDB4MUE0MiwgMHg2NjdBLCAweDY2N0EsIDB4MUIyOSwgMHg2Njg0LCAweDY2ODQsIDB4MUYzNywKKyAgICAweDY2ODcsIDB4NjY4NywgMHgwRDc3LCAweDY2ODgsIDB4NjY4OCwgMHgxRjM0LCAweDY2ODksIDB4NjY4OSwgMHgxRjQwLAorICAgIDB4NjY4RSwgMHg2NjhFLCAweDE3NzYsIDB4NjY5MCwgMHg2NjkwLCAweDE4OTUsIDB4NjY5MSwgMHg2NjkxLCAweDE1MDcsCisgICAgMHg2Njk2LCAweDY2OTYsIDB4MTAyQywgMHg2Njk3LCAweDY2OTcsIDB4MTZDMSwgMHg2Njk4LCAweDY2OTgsIDB4MTZGRSwKKyAgICAweDY2OUQsIDB4NjY5RCwgMHgxMjkwLCAweDY2QTAsIDB4NjZBMCwgMHgwRTlFLCAweDY2QTIsIDB4NjZBMiwgMHgxQkJGLAorICAgIDB4NjZBQiwgMHg2NkFCLCAweDE5ODAsIDB4NjZBRSwgMHg2NkFFLCAweDEyQTQsIDB4NjZCMiwgMHg2NkIyLCAweDE5OTIsCisgICAgMHg2NkIzLCAweDY2QjMsIDB4MUU3MywgMHg2NkI0LCAweDY2QjQsIDB4MUQ5NCwgMHg2NkI5LCAweDY2QjksIDB4MTU1OCwKKyAgICAweDY2QkIsIDB4NjZCQiwgMHgwRTVELCAweDY2QkUsIDB4NjZCRSwgMHgxMEUzLCAweDY2QzQsIDB4NjZDNCwgMHgxNzZGLAorICAgIDB4NjZDNiwgMHg2NkM2LCAweDExNkIsIDB4NjZDNywgMHg2NkM3LCAweDEwN0QsIDB4NjZDOSwgMHg2NkM5LCAweDFGMTYsCisgICAgMHg2NkQ2LCAweDY2RDYsIDB4MTZENSwgMHg2NkQ5LCAweDY2RDksIDB4MTUwOCwgMHg2NkRDLCAweDY2REMsIDB4MTgwOCwKKyAgICAweDY2REQsIDB4NjZERCwgMHgxRDk1LCAweDY2RTAsIDB4NjZFMCwgMHgwRjA0LCAweDY2RTYsIDB4NjZFNiwgMHgxRjZGLAorICAgIDB4NjZGMCwgMHg2NkYwLCAweDE3RUQsIDB4NjZGMiwgMHg2NkYyLCAweDBFQjksIDB4NjZGMywgMHg2NkYzLCAweDE3OTEsCisgICAgMHg2NkY0LCAweDY2RjQsIDB4MEU1RSwgMHg2NkY3LCAweDY2RjcsIDB4MERBRSwgMHg2NkY4LCAweDY2RjgsIDB4MTUwOSwKKyAgICAweDY2RjksIDB4NjZGOSwgMHgxQThBLCAweDY2RkEsIDB4NjZGQSwgMHgxQTg5LCAweDY2RkMsIDB4NjZGQywgMHgxMjQ2LAorICAgIDB4NjZGRSwgMHg2NkZFLCAweDFCMTUsIDB4NjZGRiwgMHg2NkZGLCAweDFDMjYsIDB4NjcwMCwgMHg2NzAwLCAweDFDNjAsCisgICAgMHg2NzAzLCAweDY3MDMsIDB4MUYwMCwgMHg2NzA4LCAweDY3MDgsIDB4MTg4OSwgMHg2NzA5LCAweDY3MDksIDB4MThCNiwKKyAgICAweDY3MEIsIDB4NjcwQiwgMHgxNDM4LCAweDY3MEQsIDB4NjcwRCwgMHgxM0Q4LCAweDY3MTQsIDB4NjcxNCwgMHgxNEI2LAorICAgIDB4NjcxNSwgMHg2NzE1LCAweDFCNzcsIDB4NjcxNywgMHg2NzE3LCAweDExM0QsIDB4NjcxQiwgMHg2NzFCLCAweDEyNUMsCisgICAgMHg2NzFELCAweDY3MUQsIDB4MUE4QiwgMHg2NzFFLCAweDY3MUYsIDB4MEZGMywgMHg2NzI2LCAweDY3MjYsIDB4MTJCRSwKKyAgICAweDY3MjcsIDB4NjcyNywgMHgxMUJBLCAweDY3MjgsIDB4NjcyOCwgMHgxMkI0LCAweDY3MkEsIDB4NjcyQSwgMHgxMkY5LAorICAgIDB4NjcyQiwgMHg2NzJCLCAweDEyNTMsIDB4NjcyQywgMHg2NzJDLCAweDEzRTMsIDB4NjcyRCwgMHg2NzJELCAweDFCQTgsCisgICAgMHg2NzJFLCAweDY3MkUsIDB4MUM4OCwgMHg2NzMxLCAweDY3MzEsIDB4MUFEQSwgMHg2NzM0LCAweDY3MzQsIDB4MTMxQiwKKyAgICAweDY3MzYsIDB4NjczNiwgMHgxQ0RDLCAweDY3M0EsIDB4NjczQSwgMHgwRjkwLCAweDY3M0QsIDB4NjczRCwgMHgxRjI3LAorICAgIDB4Njc0NiwgMHg2NzQ2LCAweDBEOUQsIDB4Njc0OSwgMHg2NzQ5LCAweDE0QzksIDB4Njc0RSwgMHg2NzRFLCAweDEyMEMsCisgICAgMHg2NzRGLCAweDY3NEYsIDB4MUUxQiwgMHg2NzUwLCAweDY3NTAsIDB4MTlBRiwgMHg2NzUxLCAweDY3NTEsIDB4MUM1MSwKKyAgICAweDY3NTMsIDB4Njc1MywgMHgxRDlDLCAweDY3NTYsIDB4Njc1NiwgMHgxOTkzLCAweDY3NUMsIDB4Njc1QywgMHgxMEZFLAorICAgIDB4Njc1RSwgMHg2NzVFLCAweDBGRjUsIDB4Njc1RiwgMHg2NzVGLCAweDE1QTMsIDB4Njc2RCwgMHg2NzZELCAweDFERkQsCisgICAgMHg2NzZGLCAweDY3NkYsIDB4MTM2RiwgMHg2NzcwLCAweDY3NzAsIDB4MEUxRiwgMHg2NzcxLCAweDY3NzEsIDB4MTBGMSwKKyAgICAweDY3NzMsIDB4Njc3MywgMHgxMkM2LCAweDY3NzUsIDB4Njc3NSwgMHgxOUM2LCAweDY3NzcsIDB4Njc3NywgMHgxRDM4LAorICAgIDB4Njc3QiwgMHg2NzdCLCAweDEwNTcsIDB4Njc3RSwgMHg2NzdFLCAweDE1QjMsIDB4Njc3RiwgMHg2NzdGLCAweDFENDQsCisgICAgMHg2Nzg3LCAweDY3ODcsIDB4MTQ0QSwgMHg2Nzg5LCAweDY3ODksIDB4MTdGMCwgMHg2NzhCLCAweDY3OEIsIDB4MTM1OSwKKyAgICAweDY3OEYsIDB4Njc4RiwgMHgxMDMyLCAweDY3OTAsIDB4Njc5MCwgMHgxNTIxLCAweDY3OTMsIDB4Njc5MywgMHgxMEZGLAorICAgIDB4Njc5NSwgMHg2Nzk1LCAweDFDQzksIDB4Njc5NywgMHg2Nzk3LCAweDEyMjcsIDB4Njc5QSwgMHg2NzlBLCAweDEyNjksCisgICAgMHg2NzlDLCAweDY3OUMsIDB4MEVERCwgMHg2NzlELCAweDY3OUQsIDB4MUIyQSwgMHg2N0FGLCAweDY3QUYsIDB4MEU5RiwKKyAgICAweDY3QjAsIDB4NjdCMCwgMHgxRDZCLCAweDY3QjMsIDB4NjdCMywgMHgxQjJCLCAweDY3QjYsIDB4NjdCNywgMHgwRDc4LAorICAgIDB4NjdCOCwgMHg2N0I4LCAweDBGNDksIDB4NjdCRSwgMHg2N0JFLCAweDE2NEEsIDB4NjdDNCwgMHg2N0M0LCAweDEzQjgsCisgICAgMHg2N0NGLCAweDY3Q0YsIDB4MTM3RiwgMHg2N0QwLCAweDY3RDAsIDB4MTJBNSwgMHg2N0QxLCAweDY3RDEsIDB4MERCRSwKKyAgICAweDY3RDIsIDB4NjdEMiwgMHgxQ0M1LCAweDY3RDMsIDB4NjdEMywgMHgxNzY2LCAweDY3RDQsIDB4NjdENCwgMHgxOEI3LAorICAgIDB4NjdEQSwgMHg2N0RBLCAweDE4QjgsIDB4NjdERCwgMHg2N0RELCAweDFDRTksIDB4NjdFOSwgMHg2N0U5LCAweDBGNEEsCisgICAgMHg2N0VDLCAweDY3RUMsIDB4MEQ5RSwgMHg2N0VGLCAweDY3RUYsIDB4MEQ3QSwgMHg2N0YwLCAweDY3RjAsIDB4MTAzRCwKKyAgICAweDY3RjEsIDB4NjdGMSwgMHgxQURCLCAweDY3RjMsIDB4NjdGMywgMHgxMUUzLCAweDY3RjQsIDB4NjdGNCwgMHgxNjRCLAorICAgIDB4NjdGNSwgMHg2N0Y1LCAweDFCRDcsIDB4NjdGNiwgMHg2N0Y2LCAweDE0OTQsIDB4NjdGQiwgMHg2N0ZCLCAweDE0OTUsCisgICAgMHg2N0ZFLCAweDY3RkUsIDB4MUE0MywgMHg2ODEyLCAweDY4MTIsIDB4MTYwRCwgMHg2ODEzLCAweDY4MTMsIDB4MUEwMiwKKyAgICAweDY4MTYsIDB4NjgxNiwgMHgxNTBBLCAweDY4MTcsIDB4NjgxNywgMHgxMUZBLCAweDY4MjEsIDB4NjgyMSwgMHgwRjI1LAorICAgIDB4NjgyMiwgMHg2ODIyLCAweDEzODAsIDB4NjgyQSwgMHg2ODJBLCAweDFBREMsIDB4NjgyRiwgMHg2ODJGLCAweDE4NTksCisgICAgMHg2ODM4LCAweDY4MzgsIDB4MUUxOCwgMHg2ODM5LCAweDY4MzksIDB4MEZCQywgMHg2ODNDLCAweDY4M0MsIDB4MEUyRiwKKyAgICAweDY4M0QsIDB4NjgzRCwgMHgxOUIwLCAweDY4NDAsIDB4Njg0MCwgMHgwRTIwLCAweDY4NDEsIDB4Njg0MSwgMHgxREZFLAorICAgIDB4Njg0MiwgMHg2ODQyLCAweDBFODEsIDB4Njg0MywgMHg2ODQzLCAweDEwQkQsIDB4Njg0OCwgMHg2ODQ4LCAweDE2QjMsCisgICAgMHg2ODRFLCAweDY4NEUsIDB4MUI2QywgMHg2ODUwLCAweDY4NTAsIDB4MTBGMiwgMHg2ODUxLCAweDY4NTEsIDB4MTRFMiwKKyAgICAweDY4NTMsIDB4Njg1MywgMHgxRUQzLCAweDY4NTQsIDB4Njg1NCwgMHgxMDIyLCAweDY4NkQsIDB4Njg2RCwgMHgxQjRCLAorICAgIDB4Njg3NiwgMHg2ODc2LCAweDFEMUUsIDB4Njg3RiwgMHg2ODdGLCAweDBEOUYsIDB4Njg4MSwgMHg2ODgxLCAweDExNEYsCisgICAgMHg2ODg1LCAweDY4ODUsIDB4MTI2QSwgMHg2ODhGLCAweDY4OEYsIDB4MEVCQSwgMHg2ODkzLCAweDY4OTMsIDB4MTlCMSwKKyAgICAweDY4OTQsIDB4Njg5NCwgMHgxQ0FFLCAweDY4OTcsIDB4Njg5NywgMHgwRTVGLCAweDY4OUQsIDB4Njg5RCwgMHgxQThDLAorICAgIDB4Njg5RiwgMHg2ODlGLCAweDFGMTcsIDB4NjhBMSwgMHg2OEExLCAweDE3REUsIDB4NjhBMiwgMHg2OEEyLCAweDFDMzQsCisgICAgMHg2OEE3LCAweDY4QTcsIDB4MTdCMywgMHg2OEE4LCAweDY4QTgsIDB4MTIwRCwgMHg2OEFELCAweDY4QUQsIDB4MTQ5NiwKKyAgICAweDY4QUYsIDB4NjhBRiwgMHgxQTZGLCAweDY4QjAsIDB4NjhCMCwgMHgwRTgyLCAweDY4QjEsIDB4NjhCMSwgMHgwRUMyLAorICAgIDB4NjhCMywgMHg2OEIzLCAweDE1ODcsIDB4NjhCNSwgMHg2OEI1LCAweDEzOTMsIDB4NjhCNiwgMHg2OEI2LCAweDEyRkEsCisgICAgMHg2OEM0LCAweDY4QzQsIDB4MEZGNywgMHg2OEM1LCAweDY4QzUsIDB4MTNCOSwgMHg2OEM5LCAweDY4QzksIDB4MTI4MiwKKyAgICAweDY4Q0IsIDB4NjhDQiwgMHgwRkY2LCAweDY4Q0QsIDB4NjhDRCwgMHgwRUMzLCAweDY4RDIsIDB4NjhEMiwgMHgxM0VCLAorICAgIDB4NjhENSwgMHg2OEQ1LCAweDFBQkEsIDB4NjhENywgMHg2OEQ3LCAweDFBOEQsIDB4NjhEOCwgMHg2OEQ4LCAweDBGQjQsCisgICAgMHg2OERBLCAweDY4REEsIDB4MTQzOSwgMHg2OERGLCAweDY4REYsIDB4MTBGMywgMHg2OEUwLCAweDY4RTAsIDB4MTA5NSwKKyAgICAweDY4RTcsIDB4NjhFNywgMHgxOTdCLCAweDY4RTgsIDB4NjhFOCwgMHgwRTgzLCAweDY4RUUsIDB4NjhFRSwgMHgxNENBLAorICAgIDB4NjhGMiwgMHg2OEYyLCAweDE1MEIsIDB4NjhGOSwgMHg2OEY5LCAweDEwQkUsIDB4NjhGQSwgMHg2OEZBLCAweDBFRUYsCisgICAgMHg2OTAwLCAweDY5MDAsIDB4MTdERiwgMHg2OTA1LCAweDY5MDUsIDB4MTkwMSwgMHg2OTBELCAweDY5MEQsIDB4MTY1RCwKKyAgICAweDY5MEUsIDB4NjkwRSwgMHgxQzY0LCAweDY5MTIsIDB4NjkxMiwgMHgxQzM1LCAweDY5MjcsIDB4NjkyNywgMHgxMjkxLAorICAgIDB4NjkzMCwgMHg2OTMwLCAweDE2RUMsIDB4NjkzRCwgMHg2OTNELCAweDE3NEMsIDB4NjkzRiwgMHg2OTNGLCAweDFDODUsCisgICAgMHg2OTRBLCAweDY5NEEsIDB4MTZGRiwgMHg2OTUzLCAweDY5NTMsIDB4MURBOCwgMHg2OTU0LCAweDY5NTQsIDB4MTU0QywKKyAgICAweDY5NTUsIDB4Njk1NSwgMHgxQ0RELCAweDY5NTcsIDB4Njk1NywgMHgwRTE3LCAweDY5NTksIDB4Njk1OSwgMHgxMkQ0LAorICAgIDB4Njk1QSwgMHg2OTVBLCAweDFDMzYsIDB4Njk1RSwgMHg2OTVFLCAweDEyMDAsIDB4Njk2MCwgMHg2OTYwLCAweDEwMzMsCisgICAgMHg2OTYxLCAweDY5NjIsIDB4MThCOSwgMHg2OTYzLCAweDY5NjMsIDB4MTJGQiwgMHg2OTY4LCAweDY5NjgsIDB4MUE0NCwKKyAgICAweDY5NkIsIDB4Njk2QiwgMHgxQjEwLCAweDY5NkQsIDB4Njk2RCwgMHgxNzJDLCAweDY5NkUsIDB4Njk2RSwgMHgxOUM3LAorICAgIDB4Njk2RiwgMHg2OTZGLCAweDE2MEUsIDB4Njk3NSwgMHg2OTc1LCAweDBGQjUsIDB4Njk3NywgMHg2OTc3LCAweDFFMEQsCisgICAgMHg2OTc4LCAweDY5NzgsIDB4MUM2NSwgMHg2OTc5LCAweDY5NzksIDB4MTc3NywgMHg2OTk1LCAweDY5OTUsIDB4MTgyNywKKyAgICAweDY5OUIsIDB4Njk5QiwgMHgxQjRDLCAweDY5OUMsIDB4Njk5QywgMHgxMzVBLCAweDY5QTUsIDB4NjlBNSwgMHgxRUU5LAorICAgIDB4NjlBNywgMHg2OUE3LCAweDE0NEIsIDB4NjlBRSwgMHg2OUFFLCAweDE3NzgsIDB4NjlCNCwgMHg2OUI0LCAweDExRTQsCisgICAgMHg2OUJCLCAweDY5QkIsIDB4MUQwMiwgMHg2OUMxLCAweDY5QzEsIDB4MEVBMCwgMHg2OUMzLCAweDY5QzMsIDB4MTMzMSwKKyAgICAweDY5Q0IsIDB4NjlDQiwgMHgwRjRCLCAweDY5Q0MsIDB4NjlDQywgMHgxRDI0LCAweDY5Q0QsIDB4NjlDRCwgMHgxQkMwLAorICAgIDB4NjlEMCwgMHg2OUQwLCAweDBGMTYsIDB4NjlFOCwgMHg2OUU4LCAweDBFRTgsIDB4NjlFQSwgMHg2OUVBLCAweDBERjEsCisgICAgMHg2OUZCLCAweDY5RkIsIDB4MEY5RSwgMHg2OUZELCAweDY5RkQsIDB4MUE4RSwgMHg2OUZGLCAweDY5RkYsIDB4MEZCRCwKKyAgICAweDZBMDIsIDB4NkEwMiwgMHgxNkE4LCAweDZBMEEsIDB4NkEwQSwgMHgxMzg1LCAweDZBMTEsIDB4NkExMSwgMHgxMTUwLAorICAgIDB4NkExMywgMHg2QTEzLCAweDExRDcsIDB4NkExNywgMHg2QTE3LCAweDE5QzgsIDB4NkExOSwgMHg2QTE5LCAweDFEOUQsCisgICAgMHg2QTFFLCAweDZBMUUsIDB4MUM2NiwgMHg2QTFGLCAweDZBMUYsIDB4MTk5NCwgMHg2QTIxLCAweDZBMjEsIDB4MTJBNiwKKyAgICAweDZBMjMsIDB4NkEyMywgMHgxNzAwLCAweDZBMzUsIDB4NkEzNSwgMHgxQzM3LCAweDZBMzgsIDB4NkEzOCwgMHgxMzFDLAorICAgIDB4NkEzOSwgMHg2QTM5LCAweDE1RDEsIDB4NkEzQSwgMHg2QTNBLCAweDFFQkEsIDB4NkEzRCwgMHg2QTNELCAweDFBRkQsCisgICAgMHg2QTQ0LCAweDZBNDQsIDB4MERCRiwgMHg2QTQ4LCAweDZBNDgsIDB4MTgwOSwgMHg2QTRCLCAweDZBNEIsIDB4MEYyNiwKKyAgICAweDZBNTIsIDB4NkE1MiwgMHgxODVGLCAweDZBNTMsIDB4NkE1MywgMHgxNjBGLCAweDZBNTgsIDB4NkE1OCwgMHgwRkFGLAorICAgIDB4NkE1OSwgMHg2QTU5LCAweDExMEUsIDB4NkE1RiwgMHg2QTVGLCAweDBGRjgsIDB4NkE2MSwgMHg2QTYxLCAweDE0RTMsCisgICAgMHg2QTZCLCAweDZBNkIsIDB4MUYwRiwgMHg2QTgwLCAweDZBODAsIDB4MTA2OSwgMHg2QTg0LCAweDZBODQsIDB4MEUzMCwKKyAgICAweDZBODksIDB4NkE4OSwgMHgxQTQ1LCAweDZBOEQsIDB4NkE4RCwgMHgxNzFCLCAweDZBOEUsIDB4NkE4RSwgMHgwRkNBLAorICAgIDB4NkE5NywgMHg2QTk3LCAweDEzQTAsIDB4NkE5QywgMHg2QTlDLCAweDFGMDEsIDB4NkFBMiwgMHg2QUEyLCAweDBFMjQsCisgICAgMHg2QUEzLCAweDZBQTMsIDB4MTk5NSwgMHg2QUIzLCAweDZBQjMsIDB4MTQ2QiwgMHg2QUJCLCAweDZBQkIsIDB4MURFOCwKKyAgICAweDZBQzIsIDB4NkFDMiwgMHgxMEJGLCAweDZBQzMsIDB4NkFDMywgMHgwRjkxLCAweDZBRDMsIDB4NkFEMywgMHgxMUEyLAorICAgIDB4NkFEQSwgMHg2QURBLCAweDExNjAsIDB4NkFEQiwgMHg2QURCLCAweDFCMEYsIDB4NkFGNiwgMHg2QUY2LCAweDFFMkMsCisgICAgMHg2QUZCLCAweDZBRkIsIDB4MTZFMiwgMHg2QjA0LCAweDZCMDQsIDB4MTEyNywgMHg2QjBBLCAweDZCMEEsIDB4MEY4OCwKKyAgICAweDZCMEMsIDB4NkIwQywgMHgxOTk2LCAweDZCMTIsIDB4NkIxMiwgMHgxMTI4LCAweDZCMTYsIDB4NkIxNiwgMHgxMTMyLAorICAgIDB4NkIyMCwgMHg2QjIwLCAweDFGNUIsIDB4NkIyMSwgMHg2QjIxLCAweDFCODgsIDB4NkIyMywgMHg2QjIzLCAweDFGNTQsCisgICAgMHg2QjMyLCAweDZCMzIsIDB4MTgxOSwgMHg2QjNBLCAweDZCM0EsIDB4MEZGOSwgMHg2QjNELCAweDZCM0QsIDB4MUY1QywKKyAgICAweDZCM0UsIDB4NkIzRSwgMHgwRUYwLCAweDZCNDYsIDB4NkI0NiwgMHgxRjVELCAweDZCNDcsIDB4NkI0NywgMHgxRTJGLAorICAgIDB4NkI0QywgMHg2QjRDLCAweDBEN0IsIDB4NkI0RSwgMHg2QjRFLCAweDFDRjUsIDB4NkI1MCwgMHg2QjUwLCAweDBGNEMsCisgICAgMHg2QjVGLCAweDZCNUYsIDB4MTczMSwgMHg2QjYxLCAweDZCNjEsIDB4MUVEMSwgMHg2QjYyLCAweDZCNjIsIDB4MUIyQywKKyAgICAweDZCNjMsIDB4NkI2MywgMHgxQTQ2LCAweDZCNjQsIDB4NkI2NCwgMHgxQjg5LCAweDZCNjUsIDB4NkI2NSwgMHgxM0M3LAorICAgIDB4NkI2NiwgMHg2QjY2LCAweDEyRDUsIDB4NkI2QSwgMHg2QjZBLCAweDE3RjUsIDB4NkI3MiwgMHg2QjcyLCAweDE1NzYsCisgICAgMHg2Qjc3LCAweDZCNzcsIDB4MTE2QywgMHg2Qjc4LCAweDZCNzgsIDB4MEY5NywgMHg2QjdCLCAweDZCN0IsIDB4MTQ5NywKKyAgICAweDZCN0YsIDB4NkI3RiwgMHgxMkJCLCAweDZCODMsIDB4NkI4MywgMHgxNkNELCAweDZCODQsIDB4NkI4NCwgMHgxQjRELAorICAgIDB4NkI4NiwgMHg2Qjg2LCAweDFEMEMsIDB4NkI4OSwgMHg2Qjg5LCAweDE2MTAsIDB4NkI4QSwgMHg2QjhBLCAweDE1RDIsCisgICAgMHg2Qjk2LCAweDZCOTYsIDB4MTY1RSwgMHg2Qjk4LCAweDZCOTgsIDB4MTk3QywgMHg2QjlFLCAweDZCOUUsIDB4MTg2MCwKKyAgICAweDZCQUUsIDB4NkJBRSwgMHgxMTg1LCAweDZCQUYsIDB4NkJBRiwgMHgxNDZDLCAweDZCQjIsIDB4NkJCMiwgMHgxNTU5LAorICAgIDB4NkJCNSwgMHg2QkI1LCAweDEwNkEsIDB4NkJCNywgMHg2QkI3LCAweDE4RTgsIDB4NkJCQSwgMHg2QkJBLCAweDE0QzUsCisgICAgMHg2QkJDLCAweDZCQkMsIDB4MEQ4RSwgMHg2QkJGLCAweDZCQkYsIDB4MUEwMywgMHg2QkMxLCAweDZCQzEsIDB4MUYzQywKKyAgICAweDZCQzUsIDB4NkJDNSwgMHgxOTAyLCAweDZCQzYsIDB4NkJDNiwgMHgwRjRELCAweDZCQ0IsIDB4NkJDQiwgMHgxMkQ2LAorICAgIDB4NkJDRCwgMHg2QkNELCAweDEyQTcsIDB4NkJDRiwgMHg2QkNGLCAweDEyNkIsIDB4NkJEMiwgMHg2QkQyLCAweDEwRDUsCisgICAgMHg2QkQzLCAweDZCRDMsIDB4MThENCwgMHg2QkQ0LCAweDZCRDQsIDB4MTQ0QywgMHg2QkQ2LCAweDZCRDgsIDB4MTQ0RCwKKyAgICAweDZCREIsIDB4NkJEQiwgMHgxMkE4LCAweDZCRUIsIDB4NkJFQiwgMHgxRTg0LCAweDZCRUMsIDB4NkJFQywgMHgwRjRFLAorICAgIDB4NkMwOCwgMHg2QzA4LCAweDFBMDQsIDB4NkMwRiwgMHg2QzBGLCAweDE2OEUsIDB4NkMxMSwgMHg2QzExLCAweDEzMEQsCisgICAgMHg2QzEzLCAweDZDMTMsIDB4MTI3OCwgMHg2QzIzLCAweDZDMjMsIDB4MEZGQSwgMHg2QzM0LCAweDZDMzQsIDB4MTVEMywKKyAgICAweDZDMzcsIDB4NkMzNywgMHgxNDc2LCAweDZDMzgsIDB4NkMzOCwgMHgxNzc5LCAweDZDM0UsIDB4NkMzRSwgMHgxMzk0LAorICAgIDB4NkM0MCwgMHg2QzQwLCAweDFBNDcsIDB4NkM0MSwgMHg2QzQxLCAweDFCMTEsIDB4NkM0MiwgMHg2QzQyLCAweDBGNEYsCisgICAgMHg2QzRFLCAweDZDNEUsIDB4MTM5NSwgMHg2QzUwLCAweDZDNTAsIDB4MTUyMiwgMHg2QzU1LCAweDZDNTUsIDB4MTRCQiwKKyAgICAweDZDNTcsIDB4NkM1NywgMHgxREQ3LCAweDZDNUEsIDB4NkM1QSwgMHgxN0I0LCAweDZDNUQsIDB4NkM1RCwgMHgxNzMyLAorICAgIDB4NkM1RSwgMHg2QzVFLCAweDFFQUYsIDB4NkM1RiwgMHg2QzVGLCAweDBERDksIDB4NkM2MCwgMHg2QzYwLCAweDFCMkQsCisgICAgMHg2QzY4LCAweDZDNjgsIDB4MEVDOCwgMHg2QzZBLCAweDZDNkEsIDB4MTdGMSwgMHg2QzZELCAweDZDNkQsIDB4MTc5MiwKKyAgICAweDZDNzAsIDB4NkM3MCwgMHgxRDBELCAweDZDNzIsIDB4NkM3MiwgMHgwRkQ3LCAweDZDNzYsIDB4NkM3NiwgMHgxMkU5LAorICAgIDB4NkM3QSwgMHg2QzdBLCAweDBFNDEsIDB4NkM3RCwgMHg2QzdELCAweDBGRkIsIDB4NkM3RSwgMHg2QzdFLCAweDE0MkEsCisgICAgMHg2QzgxLCAweDZDODEsIDB4MTY4NSwgMHg2QzgyLCAweDZDODIsIDB4MEZGQywgMHg2QzgzLCAweDZDODMsIDB4MTdCRiwKKyAgICAweDZDODUsIDB4NkM4NSwgMHgxODdCLCAweDZDODYsIDB4NkM4NiwgMHgxREZGLCAweDZDODcsIDB4NkM4NywgMHgxNzRELAorICAgIDB4NkM4OCwgMHg2Qzg4LCAweDFDQ0EsIDB4NkM4QywgMHg2QzhDLCAweDEwRTQsIDB4NkM5MCwgMHg2QzkwLCAweDEyQjUsCisgICAgMHg2QzkyLCAweDZDOTIsIDB4MTJCQywgMHg2QzkzLCAweDZDOTMsIDB4MTA4QSwgMHg2Qzk0LCAweDZDOTQsIDB4MTI4MywKKyAgICAweDZDOTUsIDB4NkM5NSwgMHgxMkYxLCAweDZDOTYsIDB4NkM5NiwgMHgxQzhDLCAweDZDOTksIDB4NkM5OSwgMHgxNDk4LAorICAgIDB4NkM5QSwgMHg2QzlBLCAweDFCMkUsIDB4NkM5QiwgMHg2QzlCLCAweDFENTIsIDB4NkNBQiwgMHg2Q0FCLCAweDEyNTQsCisgICAgMHg2Q0FFLCAweDZDQUUsIDB4MTlDOSwgMHg2Q0IzLCAweDZDQjMsIDB4MURDNiwgMHg2Q0I4LCAweDZDQjgsIDB4MTQ1MCwKKyAgICAweDZDQjksIDB4NkNCOSwgMHgxOEJCLCAweDZDQkIsIDB4NkNCQiwgMHgxQ0FGLCAweDZDQkMsIDB4NkNCQywgMHgxNTg4LAorICAgIDB4NkNCRCwgMHg2Q0JELCAweDBFQTEsIDB4NkNCRSwgMHg2Q0JFLCAweDFDMEIsIDB4NkNCRiwgMHg2Q0JGLCAweDE3NEUsCisgICAgMHg2Q0MxLCAweDZDQzEsIDB4MUVFQSwgMHg2Q0MyLCAweDZDQzIsIDB4MUU2MCwgMHg2Q0M0LCAweDZDQzQsIDB4MTU0RCwKKyAgICAweDZDQzksIDB4NkNDOSwgMHgxQkYyLCAweDZDQ0EsIDB4NkNDQSwgMHgxMzFELCAweDZDQ0MsIDB4NkNDQywgMHgxREI3LAorICAgIDB4NkNEMywgMHg2Q0QzLCAweDFFQjAsIDB4NkNENSwgMHg2Q0Q1LCAweDEzOUEsIDB4NkNENywgMHg2Q0Q3LCAweDE0OTksCisgICAgMHg2Q0RCLCAweDZDREIsIDB4MTM5NiwgMHg2Q0UxLCAweDZDRTEsIDB4MUQ4NCwgMHg2Q0UyLCAweDZDRTIsIDB4MUQzOSwKKyAgICAweDZDRTMsIDB4NkNFMywgMHgxOEY0LCAweDZDRTUsIDB4NkNFNSwgMHgxMDVCLCAweDZDRTgsIDB4NkNFOCwgMHgxQURELAorICAgIDB4NkNFQiwgMHg2Q0VCLCAweDFFM0IsIDB4NkNFRSwgMHg2Q0VFLCAweDEzMzIsIDB4NkNFRiwgMHg2Q0VGLCAweDEzMEUsCisgICAgMHg2Q0YwLCAweDZDRjAsIDB4MUQwRSwgMHg2Q0YzLCAweDZDRjMsIDB4MTc3QSwgMHg2RDBCLCAweDZEMEIsIDB4MTcwMSwKKyAgICAweDZEMEMsIDB4NkQwQywgMHgxMTgwLCAweDZEMTEsIDB4NkQxMSwgMHgxM0M4LCAweDZEMTcsIDB4NkQxNywgMHgxNTc3LAorICAgIDB4NkQxOSwgMHg2RDE5LCAweDE1RDQsIDB4NkQxQiwgMHg2RDFCLCAweDExMUUsIDB4NkQxRSwgMHg2RDFFLCAweDEwRjQsCisgICAgMHg2RDI1LCAweDZEMjUsIDB4MUI0RSwgMHg2RDI3LCAweDZEMjcsIDB4MThCQywgMHg2RDI5LCAweDZEMjksIDB4MTU0RSwKKyAgICAweDZEMkEsIDB4NkQyQSwgMHgxRUIxLCAweDZEMzIsIDB4NkQzMiwgMHgxQURFLCAweDZEMzUsIDB4NkQzNSwgMHgxNjExLAorICAgIDB4NkQzNiwgMHg2RDM2LCAweDFGNTAsIDB4NkQzOCwgMHg2RDM4LCAweDBGMDUsIDB4NkQzOSwgMHg2RDM5LCAweDE4N0MsCisgICAgMHg2RDNCLCAweDZEM0IsIDB4MUVEQiwgMHg2RDNELCAweDZEM0QsIDB4MUY2MCwgMHg2RDNFLCAweDZEM0UsIDB4MUQzQSwKKyAgICAweDZENDEsIDB4NkQ0MSwgMHgxMUU1LCAweDZENTksIDB4NkQ1OSwgMHgxQTFGLCAweDZENUEsIDB4NkQ1QSwgMHgxQUZFLAorICAgIDB4NkQ1QywgMHg2RDVDLCAweDE0NkQsIDB4NkQ2MywgMHg2RDYzLCAweDE3RTAsIDB4NkQ2NiwgMHg2RDY2LCAweDFEODUsCisgICAgMHg2RDY5LCAweDZENjksIDB4MUU4NSwgMHg2RDZBLCAweDZENkEsIDB4MTEzRSwgMHg2RDZDLCAweDZENkMsIDB4MTIwRSwKKyAgICAweDZENkUsIDB4NkQ2RSwgMHgxNDA3LCAweDZENzQsIDB4NkQ3NCwgMHgxODFBLCAweDZENzcsIDB4NkQ3NywgMHgxRTBFLAorICAgIDB4NkQ3OCwgMHg2RDc4LCAweDFDQ0IsIDB4NkQ3OSwgMHg2RDc5LCAweDFFNTQsIDB4NkQ3RiwgMHg2RDdGLCAweDFENTMsCisgICAgMHg2RDg1LCAweDZEODUsIDB4MTc2MiwgMHg2RDg3LCAweDZEODcsIDB4MEU2MCwgMHg2RDg4LCAweDZEODgsIDB4MTU4OSwKKyAgICAweDZEODksIDB4NkQ4OSwgMHgxNTYwLCAweDZEOEMsIDB4NkQ4QywgMHgxODI4LCAweDZEOEQsIDB4NkQ4RCwgMHgxRjE4LAorICAgIDB4NkQ4RSwgMHg2RDhFLCAweDE3NEYsIDB4NkQ5MSwgMHg2RDkxLCAweDE1QTQsIDB4NkQ5MywgMHg2RDkzLCAweDE3NTAsCisgICAgMHg2RDk1LCAweDZEOTUsIDB4MUMyNywgMHg2REFGLCAweDZEQUYsIDB4MTZENiwgMHg2REIyLCAweDZEQjIsIDB4MTZERSwKKyAgICAweDZEQjUsIDB4NkRCNSwgMHgxREU5LCAweDZEQzAsIDB4NkRDMCwgMHgxQTQ4LCAweDZEQzMsIDB4NkRDMywgMHgwRjg5LAorICAgIDB4NkRDNCwgMHg2REM0LCAweDFDQjAsIDB4NkRDNSwgMHg2REM1LCAweDE1MjMsIDB4NkRDNiwgMHg2REM2LCAweDFGMTksCisgICAgMHg2REM3LCAweDZEQzcsIDB4MEZGRCwgMHg2RENCLCAweDZEQ0IsIDB4MTIyOCwgMHg2RENGLCAweDZEQ0YsIDB4MUU4NiwKKyAgICAweDZERDEsIDB4NkREMSwgMHgxNjAxLCAweDZERDgsIDB4NkREOCwgMHgxMEMwLCAweDZERDksIDB4NkREOSwgMHgxQUJCLAorICAgIDB4NkREQSwgMHg2RERBLCAweDExRDgsIDB4NkRERSwgMHg2RERFLCAweDE1QjQsIDB4NkRFMSwgMHg2REUxLCAweDEwN0UsCisgICAgMHg2REU4LCAweDZERTgsIDB4MUE0OSwgMHg2REVBLCAweDZERUEsIDB4MTFGNSwgMHg2REVCLCAweDZERUIsIDB4MThFRSwKKyAgICAweDZERUUsIDB4NkRFRSwgMHgxRjAyLCAweDZERjEsIDB4NkRGMSwgMHgxNjg2LCAweDZERjMsIDB4NkRGMywgMHgxNjEyLAorICAgIDB4NkRGNSwgMHg2REY1LCAweDE3NTEsIDB4NkRGNywgMHg2REY3LCAweDFFQTYsIDB4NkRGOCwgMHg2REY4LCAweDFDMUYsCisgICAgMHg2REY5LCAweDZERjksIDB4MTcyQSwgMHg2REZBLCAweDZERkEsIDB4MUJGMywgMHg2REZCLCAweDZERkIsIDB4MUMwQywKKyAgICAweDZFMTcsIDB4NkUxNywgMHgxNENCLCAweDZFMTksIDB4NkUxOSwgMHgxRUQ0LCAweDZFMUEsIDB4NkUxQSwgMHgxOUNBLAorICAgIDB4NkUxQiwgMHg2RTFCLCAweDBEQzAsIDB4NkUxRiwgMHg2RTFGLCAweDFBNEEsIDB4NkUyMCwgMHg2RTIwLCAweDBFMDksCisgICAgMHg2RTIxLCAweDZFMjEsIDB4MTBDMSwgMHg2RTIzLCAweDZFMjMsIDB4MTQ5QSwgMHg2RTI0LCAweDZFMjQsIDB4MTM0NSwKKyAgICAweDZFMjUsIDB4NkUyNSwgMHgxNkE5LCAweDZFMjYsIDB4NkUyNiwgMHgxN0QzLCAweDZFMkIsIDB4NkUyQiwgMHgxNTRGLAorICAgIDB4NkUyQywgMHg2RTJDLCAweDFDQTYsIDB4NkUyRCwgMHg2RTJELCAweDE4OTYsIDB4NkUyRiwgMHg2RTJGLCAweDFFMDAsCisgICAgMHg2RTMyLCAweDZFMzIsIDB4MTUzMywgMHg2RTM0LCAweDZFMzQsIDB4MERBRiwgMHg2RTM2LCAweDZFMzYsIDB4MTc3QiwKKyAgICAweDZFMzgsIDB4NkUzOCwgMHgxOEJELCAweDZFM0EsIDB4NkUzQSwgMHgxMkM3LCAweDZFM0MsIDB4NkUzQywgMHgxMkZDLAorICAgIDB4NkUzRCwgMHg2RTNELCAweDE5QjIsIDB4NkUzRSwgMHg2RTNFLCAweDFFQTcsIDB4NkU0MywgMHg2RTQzLCAweDEzNzAsCisgICAgMHg2RTQ0LCAweDZFNDQsIDB4MTJGRCwgMHg2RTRBLCAweDZFNEEsIDB4MUFERiwgMHg2RTRELCAweDZFNEQsIDB4MTA2QiwKKyAgICAweDZFNTYsIDB4NkU1NiwgMHgxRTg3LCAweDZFNTgsIDB4NkU1OCwgMHgxNEU0LCAweDZFNUIsIDB4NkU1QiwgMHgxMDdGLAorICAgIDB4NkU1QywgMHg2RTVDLCAweDE2NUYsIDB4NkU1RSwgMHg2RTVFLCAweDFBNEIsIDB4NkU1RiwgMHg2RTVGLCAweDFFRUIsCisgICAgMHg2RTY3LCAweDZFNjcsIDB4MTgyOSwgMHg2RTZCLCAweDZFNkIsIDB4MUM2NywgMHg2RTZFLCAweDZFNkUsIDB4MTkzNSwKKyAgICAweDZFNkYsIDB4NkU2RiwgMHgxRDA1LCAweDZFNzIsIDB4NkU3MiwgMHgxODdELCAweDZFNzMsIDB4NkU3MywgMHgxMDM0LAorICAgIDB4NkU3QSwgMHg2RTdBLCAweDEzQzksIDB4NkU5MCwgMHg2RTkwLCAweDE4N0UsIDB4NkU5NiwgMHg2RTk2LCAweDFBRkYsCisgICAgMHg2RTlDLCAweDZFOUMsIDB4MTFFNiwgMHg2RTlELCAweDZFOUQsIDB4MEY1MCwgMHg2RTlGLCAweDZFOUYsIDB4MTI5MiwKKyAgICAweDZFQTIsIDB4NkVBMiwgMHgxOTQxLCAweDZFQTUsIDB4NkVBNSwgMHgxNDA4LCAweDZFQUEsIDB4NkVBQSwgMHgwRTg0LAorICAgIDB4NkVBQiwgMHg2RUFCLCAweDE3QzMsIDB4NkVBRiwgMHg2RUFGLCAweDE1OEEsIDB4NkVCMSwgMHg2RUIxLCAweDFCNEYsCisgICAgMHg2RUI2LCAweDZFQjYsIDB4MTgyQSwgMHg2RUJBLCAweDZFQkEsIDB4MTA1RCwgMHg2RUMyLCAweDZFQzIsIDB4MTM1QiwKKyAgICAweDZFQzQsIDB4NkVDNCwgMHgxQkMxLCAweDZFQzUsIDB4NkVDNSwgMHgxMjhBLCAweDZFQzksIDB4NkVDOSwgMHgxRUVDLAorICAgIDB4NkVDQiwgMHg2RUNCLCAweDE5NUQsIDB4NkVDQywgMHg2RUNDLCAweDFCRTYsIDB4NkVDRSwgMHg2RUNFLCAweDFFNjEsCisgICAgMHg2RUQxLCAweDZFRDEsIDB4MUVEQywgMHg2RUQzLCAweDZFRDMsIDB4MTlCMywgMHg2RUQ0LCAweDZFRDQsIDB4MTBDMiwKKyAgICAweDZFRUYsIDB4NkVFRiwgMHgxQzI4LCAweDZFRjQsIDB4NkVGNCwgMHgxOUUxLCAweDZFRjgsIDB4NkVGOCwgMHgxRTg4LAorICAgIDB4NkVGRSwgMHg2RUZFLCAweDBFQzQsIDB4NkVGRiwgMHg2RUZGLCAweDEyNDcsIDB4NkYwMSwgMHg2RjAxLCAweDE3MTEsCisgICAgMHg2RjAyLCAweDZGMDIsIDB4MUQ5RSwgMHg2RjA2LCAweDZGMDYsIDB4MUNDNiwgMHg2RjBGLCAweDZGMEYsIDB4MTFEOSwKKyAgICAweDZGMTEsIDB4NkYxMSwgMHgwREYyLCAweDZGMTQsIDB4NkYxNCwgMHgxNzUyLCAweDZGMTUsIDB4NkYxNSwgMHgxQThGLAorICAgIDB4NkYyMCwgMHg2RjIwLCAweDEyM0EsIDB4NkYyMiwgMHg2RjIyLCAweDFERDgsIDB4NkYyMywgMHg2RjIzLCAweDExNzQsCisgICAgMHg2RjJCLCAweDZGMkIsIDB4MTI0OCwgMHg2RjJDLCAweDZGMkMsIDB4MUIyRiwgMHg2RjMxLCAweDZGMzEsIDB4MTVENSwKKyAgICAweDZGMzIsIDB4NkYzMiwgMHgxQkMyLCAweDZGMzgsIDB4NkYzOCwgMHgxQTI3LCAweDZGM0YsIDB4NkYzRiwgMHgxOTk3LAorICAgIDB4NkY0MSwgMHg2RjQxLCAweDE3N0MsIDB4NkY1MSwgMHg2RjUxLCAweDEzNDYsIDB4NkY1NCwgMHg2RjU0LCAweDBFNDIsCisgICAgMHg2RjU3LCAweDZGNTcsIDB4MUI3OSwgMHg2RjU4LCAweDZGNTgsIDB4MTMzMywgMHg2RjVBLCAweDZGNUEsIDB4MTYwMiwKKyAgICAweDZGNUIsIDB4NkY1QiwgMHgxOTgxLCAweDZGNUUsIDB4NkY1RSwgMHgxMUEzLCAweDZGNUYsIDB4NkY1RiwgMHgxNTI0LAorICAgIDB4NkY2MiwgMHg2RjYyLCAweDFFRUQsIDB4NkY2NCwgMHg2RjY0LCAweDE4REEsIDB4NkY2RCwgMHg2RjZELCAweDEwODAsCisgICAgMHg2RjZFLCAweDZGNkUsIDB4MUE5MCwgMHg2RjcwLCAweDZGNzAsIDB4MEY5MiwgMHg2RjdBLCAweDZGN0EsIDB4MTk3RCwKKyAgICAweDZGN0MsIDB4NkY3QywgMHgxMEY1LCAweDZGN0QsIDB4NkY3RCwgMHgxM0NBLCAweDZGN0UsIDB4NkY3RSwgMHgxMjFGLAorICAgIDB4NkY4MSwgMHg2RjgxLCAweDE0RDAsIDB4NkY4NCwgMHg2Rjg0LCAweDFCODAsIDB4NkY4OCwgMHg2Rjg4LCAweDFDMDQsCisgICAgMHg2RjhELCAweDZGOEQsIDB4MUFFMCwgMHg2RjhFLCAweDZGOEUsIDB4MUQ1QSwgMHg2RjkwLCAweDZGOTAsIDB4MTg2MSwKKyAgICAweDZGOTQsIDB4NkY5NCwgMHgxRTg5LCAweDZGOTcsIDB4NkY5NywgMHgwREEwLCAweDZGQTMsIDB4NkZBMywgMHgxREQ5LAorICAgIDB4NkZBNCwgMHg2RkE0LCAweDFEMTYsIDB4NkZBNywgMHg2RkE3LCAweDExOUIsIDB4NkZBRSwgMHg2RkFFLCAweDFGMDMsCisgICAgMHg2RkFGLCAweDZGQUYsIDB4MUI5NywgMHg2RkIxLCAweDZGQjEsIDB4MUEwNSwgMHg2RkIzLCAweDZGQjMsIDB4MTdCNSwKKyAgICAweDZGQjksIDB4NkZCOSwgMHgxMDgxLCAweDZGQkUsIDB4NkZCRSwgMHgxMDc1LCAweDZGQzAsIDB4NkZDMCwgMHgwRTMxLAorICAgIDB4NkZDMSwgMHg2RkMxLCAweDFDRUEsIDB4NkZDMiwgMHg2RkMyLCAweDExODYsIDB4NkZDMywgMHg2RkMzLCAweDEwNEYsCisgICAgMHg2RkNBLCAweDZGQ0EsIDB4MTc5MywgMHg2RkQ1LCAweDZGRDUsIDB4MTYyRCwgMHg2RkRBLCAweDZGREEsIDB4MTc3RCwKKyAgICAweDZGREYsIDB4NkZERiwgMHgxQTcwLCAweDZGRTAsIDB4NkZFMCwgMHgxRThBLCAweDZGRTEsIDB4NkZFMSwgMHgxOEJFLAorICAgIDB4NkZFNCwgMHg2RkU0LCAweDEwQzMsIDB4NkZFOSwgMHg2RkU5LCAweDFFOEIsIDB4NkZFQiwgMHg2RkVCLCAweDExMzMsCisgICAgMHg2RkVDLCAweDZGRUMsIDB4MUIwMCwgMHg2RkVGLCAweDZGRUYsIDB4MUNFQiwgMHg2RkYxLCAweDZGRjEsIDB4MTQ2RSwKKyAgICAweDZGRkUsIDB4NkZGRSwgMHgxMTYxLCAweDcwMDEsIDB4NzAwMSwgMHgxNzAyLCAweDcwMDUsIDB4NzAwNSwgMHgxRTYyLAorICAgIDB4NzAwNiwgMHg3MDA2LCAweDEwRDYsIDB4NzAwOSwgMHg3MDA5LCAweDE0OUIsIDB4NzAwQiwgMHg3MDBCLCAweDE2ODcsCisgICAgMHg3MDBGLCAweDcwMEYsIDB4MTFFNywgMHg3MDExLCAweDcwMTEsIDB4MUQ5NiwgMHg3MDE1LCAweDcwMTUsIDB4MTQ2RiwKKyAgICAweDcwMTgsIDB4NzAxOCwgMHgxMUE0LCAweDcwMUEsIDB4NzAxQSwgMHgxRERBLCAweDcwMUIsIDB4NzAxQiwgMHgxNzdFLAorICAgIDB4NzAxQywgMHg3MDFDLCAweDE4RTIsIDB4NzAxRCwgMHg3MDFELCAweDExNkQsIDB4NzAxRSwgMHg3MDFFLCAweDFBNEMsCisgICAgMHg3MDFGLCAweDcwMUYsIDB4MTU4QiwgMHg3MDIzLCAweDcwMjMsIDB4MUUwRiwgMHg3MDI3LCAweDcwMjcsIDB4MTFCQiwKKyAgICAweDcwMjgsIDB4NzAyOCwgMHgxMUMwLCAweDcwMkYsIDB4NzAyRiwgMHgxNzdGLCAweDcwMzcsIDB4NzAzNywgMHgxOTI1LAorICAgIDB4NzAzRSwgMHg3MDNFLCAweDExMjksIDB4NzA0QywgMHg3MDRDLCAweDBFRjEsIDB4NzA1MCwgMHg3MDUwLCAweDFFNjMsCisgICAgMHg3MDUxLCAweDcwNTEsIDB4MTVCQSwgMHg3MDU4LCAweDcwNTgsIDB4MUNGNiwgMHg3MDVELCAweDcwNUQsIDB4MUU4QywKKyAgICAweDcwNjMsIDB4NzA2MywgMHgxMjQ5LCAweDcwNkIsIDB4NzA2QiwgMHgxRUJCLCAweDcwNzAsIDB4NzA3MCwgMHgxRjA0LAorICAgIDB4NzA3OCwgMHg3MDc4LCAweDBGNTEsIDB4NzA3QywgMHg3MDdDLCAweDE5NzIsIDB4NzA3RCwgMHg3MDdELCAweDE5QjQsCisgICAgMHg3MDg1LCAweDcwODUsIDB4MEU2MSwgMHg3MDhBLCAweDcwOEEsIDB4MUM5OSwgMHg3MDhFLCAweDcwOEUsIDB4MTc2NywKKyAgICAweDcwOTIsIDB4NzA5MiwgMHgxQzM4LCAweDcwOTgsIDB4NzA5OCwgMHgxRjU1LCAweDcwOTksIDB4NzA5OSwgMHgxOTVFLAorICAgIDB4NzA5QSwgMHg3MDlBLCAweDBGMDYsIDB4NzBBMSwgMHg3MEExLCAweDFBNEQsIDB4NzBBNCwgMHg3MEE0LCAweDE1OEMsCisgICAgMHg3MEFCLCAweDcwQUIsIDB4MUUzQywgMHg3MEFDLCAweDcwQUMsIDB4MEUwQSwgMHg3MEFELCAweDcwQUQsIDB4MUNGNywKKyAgICAweDcwQUYsIDB4NzBBRiwgMHgxRTY0LCAweDcwQjMsIDB4NzBCMywgMHgxM0JBLCAweDcwQjcsIDB4NzBCNywgMHgxQUUxLAorICAgIDB4NzBCOCwgMHg3MEI4LCAweDE5NzMsIDB4NzBCOSwgMHg3MEI5LCAweDFBMjgsIDB4NzBDOCwgMHg3MEM4LCAweDExODEsCisgICAgMHg3MENCLCAweDcwQ0IsIDB4MUY0NywgMHg3MENGLCAweDcwQ0YsIDB4MTdCNiwgMHg3MEQ4LCAweDcwRDgsIDB4MUVCMiwKKyAgICAweDcwRDksIDB4NzBEOSwgMHgxMTFGLCAweDcwREQsIDB4NzBERCwgMHgxQjE3LCAweDcwREYsIDB4NzBERiwgMHgxNzUzLAorICAgIDB4NzBGMSwgMHg3MEYxLCAweDBFNjIsIDB4NzBGOSwgMHg3MEY5LCAweDFENUIsIDB4NzBGRCwgMHg3MEZELCAweDEzRUMsCisgICAgMHg3MTA0LCAweDcxMDQsIDB4MUYyRiwgMHg3MTA5LCAweDcxMDksIDB4MTcyMCwgMHg3MTBDLCAweDcxMEMsIDB4MUIwMSwKKyAgICAweDcxMTksIDB4NzExOSwgMHgxMzcxLCAweDcxMUEsIDB4NzExQSwgMHgxNDJCLCAweDcxMUUsIDB4NzExRSwgMHgxMEU1LAorICAgIDB4NzEyMSwgMHg3MTIxLCAweDEyRDcsIDB4NzEyNiwgMHg3MTI2LCAweDFDMzksIDB4NzEzMCwgMHg3MTMwLCAweDE3NjgsCisgICAgMHg3MTM2LCAweDcxMzYsIDB4MTc1NCwgMHg3MTQ3LCAweDcxNDcsIDB4MUY0MSwgMHg3MTQ5LCAweDcxNDksIDB4MTE3NSwKKyAgICAweDcxNEEsIDB4NzE0QSwgMHgxRjM4LCAweDcxNEMsIDB4NzE0QywgMHgxRUVFLCAweDcxNEUsIDB4NzE0RSwgMHgxQTA2LAorICAgIDB4NzE1MCwgMHg3MTUwLCAweDE3ODAsIDB4NzE1NiwgMHg3MTU2LCAweDEwMkQsIDB4NzE1OSwgMHg3MTU5LCAweDE3NTUsCisgICAgMHg3MTVDLCAweDcxNUMsIDB4MTg1QSwgMHg3MTVFLCAweDcxNUUsIDB4MTRDNiwgMHg3MTY0LCAweDcxNjQsIDB4MTI2QywKKyAgICAweDcxNjUsIDB4NzE2NSwgMHgxRUQ1LCAweDcxNjYsIDB4NzE2NiwgMHgxRjI4LCAweDcxNjcsIDB4NzE2NywgMHgxQTkxLAorICAgIDB4NzE2OSwgMHg3MTY5LCAweDEzODYsIDB4NzE2QywgMHg3MTZDLCAweDE3MDMsIDB4NzE2RSwgMHg3MTZFLCAweDE5NUYsCisgICAgMHg3MTdELCAweDcxN0QsIDB4MTUzNCwgMHg3MTg0LCAweDcxODQsIDB4MTY2MCwgMHg3MTg5LCAweDcxODksIDB4MTg2MiwKKyAgICAweDcxOEEsIDB4NzE4QSwgMHgxODZELCAweDcxOEYsIDB4NzE4RiwgMHgxRjMwLCAweDcxOTIsIDB4NzE5MiwgMHgxRTY1LAorICAgIDB4NzE5NCwgMHg3MTk0LCAweDE4MkIsIDB4NzE5OSwgMHg3MTk5LCAweDFGNzAsIDB4NzE5RiwgMHg3MTlGLCAweDE2MDMsCisgICAgMHg3MUEyLCAweDcxQTIsIDB4MTNFRCwgMHg3MUFDLCAweDcxQUMsIDB4MTdCNywgMHg3MUIxLCAweDcxQjEsIDB4MTc2MywKKyAgICAweDcxQjksIDB4NzFCQSwgMHgxRjcxLCAweDcxQkUsIDB4NzFCRSwgMHgxQ0IxLCAweDcxQzEsIDB4NzFDMSwgMHgxNzcwLAorICAgIDB4NzFDMywgMHg3MUMzLCAweDE3NTYsIDB4NzFDOCwgMHg3MUM4LCAweDExMEYsIDB4NzFDOSwgMHg3MUM5LCAweDEwRTYsCisgICAgMHg3MUNFLCAweDcxQ0UsIDB4MTFDQywgMHg3MUQwLCAweDcxRDAsIDB4MTIyMCwgMHg3MUQyLCAweDcxRDIsIDB4MTU4RCwKKyAgICAweDcxRDQsIDB4NzFENCwgMHgxMzg3LCAweDcxRDUsIDB4NzFENSwgMHgxNzU3LCAweDcxREYsIDB4NzFERiwgMHgxNzgxLAorICAgIDB4NzFFNSwgMHg3MUU1LCAweDFBOTIsIDB4NzFFNiwgMHg3MUU2LCAweDFCOTgsIDB4NzFFNywgMHg3MUU3LCAweDE1RDYsCisgICAgMHg3MUVELCAweDcxRUQsIDB4MUM0QiwgMHg3MUVFLCAweDcxRUUsIDB4MTU2MSwgMHg3MUZCLCAweDcxRkIsIDB4MUYzMSwKKyAgICAweDcxRkMsIDB4NzFGQywgMHgxNjcwLCAweDcxRkUsIDB4NzFGRSwgMHgxMEM0LCAweDcxRkYsIDB4NzFGRiwgMHgxODBBLAorICAgIDB4NzIwMCwgMHg3MjAwLCAweDFFMzMsIDB4NzIwNiwgMHg3MjA2LCAweDFEOTcsIDB4NzIxMCwgMHg3MjEwLCAweDExQTUsCisgICAgMHg3MjFCLCAweDcyMUIsIDB4MTEyQSwgMHg3MjJBLCAweDcyMkEsIDB4MUE5MywgMHg3MjJDLCAweDcyMkMsIDB4MUQzQiwKKyAgICAweDcyMkQsIDB4NzIyRCwgMHgxOUJCLCAweDcyMzAsIDB4NzIzMCwgMHgxODdGLCAweDcyMzIsIDB4NzIzMiwgMHgxODk3LAorICAgIDB4NzIzNSwgMHg3MjM1LCAweDE5NzQsIDB4NzIzNiwgMHg3MjM2LCAweDE0MDksIDB4NzIzQSwgMHg3MjNBLCAweDE2RUQsCisgICAgMHg3MjNCLCAweDcyM0IsIDB4MUYxQSwgMHg3MjNELCAweDcyM0QsIDB4MTRFNSwgMHg3MjNFLCAweDcyM0UsIDB4MTkxNiwKKyAgICAweDcyNDAsIDB4NzI0MCwgMHgxNEU2LCAweDcyNDYsIDB4NzI0NiwgMHgxOTk4LCAweDcyNDcsIDB4NzI0NywgMHgxRDYxLAorICAgIDB4NzI0OCwgMHg3MjQ4LCAweDFENDUsIDB4NzI0QywgMHg3MjRDLCAweDFENTQsIDB4NzI1MiwgMHg3MjUyLCAweDFDMTcsCisgICAgMHg3MjU4LCAweDcyNTgsIDB4MTBENywgMHg3MjU5LCAweDcyNTksIDB4MTY5NiwgMHg3MjVCLCAweDcyNUIsIDB4MTg0MiwKKyAgICAweDcyNUQsIDB4NzI1RCwgMHgxNDcwLCAweDcyNUYsIDB4NzI1RiwgMHgxMkE5LCAweDcyNjEsIDB4NzI2MSwgMHgxMkFBLAorICAgIDB4NzI2MiwgMHg3MjYyLCAweDExQzEsIDB4NzI2NywgMHg3MjY3LCAweDEyQjYsIDB4NzI2OSwgMHg3MjY5LCAweDEyRjIsCisgICAgMHg3MjcyLCAweDcyNzIsIDB4MTRGOSwgMHg3Mjc5LCAweDcyNzksIDB4MUQzMCwgMHg3MjdELCAweDcyN0QsIDB4MEUzNiwKKyAgICAweDcyODAsIDB4NzI4MCwgMHgxNTBDLCAweDcyODEsIDB4NzI4MSwgMHgxMjBGLCAweDcyQTIsIDB4NzJBMiwgMHgxMEQ4LAorICAgIDB4NzJBNywgMHg3MkE3LCAweDFGNzMsIDB4NzJBQywgMHg3MkFDLCAweDBFMzcsIDB4NzJBRiwgMHg3MkFGLCAweDEzOTcsCisgICAgMHg3MkMwLCAweDcyQzAsIDB4MTRFNywgMHg3MkMyLCAweDcyQzIsIDB4MEYwNywgMHg3MkM0LCAweDcyQzQsIDB4MTlFMiwKKyAgICAweDcyQ0UsIDB4NzJDRSwgMHgxNkM3LCAweDcyRDAsIDB4NzJEMCwgMHgxRThELCAweDcyRDcsIDB4NzJENywgMHgwRjUyLAorICAgIDB4NzJEOSwgMHg3MkQ5LCAweDE5Q0IsIDB4NzJFMSwgMHg3MkUxLCAweDBGMjcsIDB4NzJFOSwgMHg3MkU5LCAweDE1RDcsCisgICAgMHg3MkY4LCAweDcyRjgsIDB4MTIxMCwgMHg3MkY5LCAweDcyRjksIDB4MUU1NSwgMHg3MkZDLCAweDcyRkMsIDB4MTEzRiwKKyAgICAweDcyRkQsIDB4NzJGRCwgMHgxRDU1LCAweDczMEEsIDB4NzMwQSwgMHgxNzk0LCAweDczMTYsIDB4NzMxNiwgMHgxQkMzLAorICAgIDB4NzMxQiwgMHg3MzFCLCAweDEyNzksIDB4NzMxQywgMHg3MzFDLCAweDE2NEMsIDB4NzMxRCwgMHg3MzFELCAweDFBQjQsCisgICAgMHg3MzI1LCAweDczMjUsIDB4MTdGQSwgMHg3MzI5LCAweDczMjksIDB4MTU2QSwgMHg3MzJBLCAweDczMkEsIDB4MTlDQywKKyAgICAweDczMkIsIDB4NzMyQiwgMHgxMkM4LCAweDczMzYsIDB4NzMzNywgMHgxOEJGLCAweDczM0UsIDB4NzMzRSwgMHgxRURELAorICAgIDB4NzMzRiwgMHg3MzNGLCAweDE4ODAsIDB4NzM0NCwgMHg3MzQ0LCAweDE3QzAsIDB4NzM0NSwgMHg3MzQ1LCAweDE0OUMsCisgICAgMHg3MzUwLCAweDczNTAsIDB4MTk5OSwgMHg3MzUyLCAweDczNTIsIDB4MTdCOCwgMHg3MzU3LCAweDczNTcsIDB4MEY4QywKKyAgICAweDczNjgsIDB4NzM2OCwgMHgxMEQ5LCAweDczNkEsIDB4NzM2QSwgMHgxRjA1LCAweDczNzAsIDB4NzM3MCwgMHgxNzgyLAorICAgIDB4NzM3MiwgMHg3MzcyLCAweDFGMEQsIDB4NzM3NSwgMHg3Mzc1LCAweDExODgsIDB4NzM3OCwgMHg3Mzc4LCAweDE1RDgsCisgICAgMHg3MzdBLCAweDczN0EsIDB4MTA3NiwgMHg3MzdCLCAweDczN0IsIDB4MUUyRCwgMHg3Mzg0LCAweDczODQsIDB4MUUzRCwKKyAgICAweDczODYsIDB4NzM4NiwgMHgxOTYwLCAweDczODcsIDB4NzM4NywgMHgxNUIwLCAweDczODksIDB4NzM4OSwgMHgxN0MxLAorICAgIDB4NzM4QiwgMHg3MzhCLCAweDE3RjIsIDB4NzM4RSwgMHg3MzhFLCAweDFBNEUsIDB4NzM5NCwgMHg3Mzk0LCAweDFCRjQsCisgICAgMHg3Mzk2LCAweDczOTYsIDB4MEY1MywgMHg3Mzk3LCAweDczOTcsIDB4MTg0MywgMHg3Mzk4LCAweDczOTgsIDB4MEZGRSwKKyAgICAweDczOUYsIDB4NzM5RiwgMHgxMzBGLCAweDczQTcsIDB4NzNBNywgMHgxOERCLCAweDczQTksIDB4NzNBOSwgMHgxN0UxLAorICAgIDB4NzNBRCwgMHg3M0FELCAweDE0NzEsIDB4NzNCMiwgMHg3M0IyLCAweDExOEYsIDB4NzNCMywgMHg3M0IzLCAweDEwQTQsCisgICAgMHg3M0I5LCAweDczQjksIDB4MUUzRSwgMHg3M0MwLCAweDczQzAsIDB4MTMxRSwgMHg3M0MyLCAweDczQzIsIDB4MEQ3QywKKyAgICAweDczQzksIDB4NzNDOSwgMHgxMzEwLCAweDczQ0EsIDB4NzNDQSwgMHgxNEJDLCAweDczQ0MsIDB4NzNDQywgMHgxREI4LAorICAgIDB4NzNDRCwgMHg3M0NELCAweDFCNTAsIDB4NzNDRiwgMHg3M0NGLCAweDBEOEYsIDB4NzNENiwgMHg3M0Q2LCAweDBGMDgsCisgICAgMHg3M0Q5LCAweDczRDksIDB4MEVENSwgMHg3M0RELCAweDczREQsIDB4MUYyOSwgMHg3M0RFLCAweDczREUsIDB4MTEyMCwKKyAgICAweDczRTAsIDB4NzNFMCwgMHgxQUUyLCAweDczRTMsIDB4NzNFMywgMHgxNjEzLCAweDczRTQsIDB4NzNFNCwgMHgxM0NCLAorICAgIDB4NzNFNSwgMHg3M0U1LCAweDE5MTcsIDB4NzNFNiwgMHg3M0U2LCAweDFFMjEsIDB4NzNFOSwgMHg3M0U5LCAweDFFNjYsCisgICAgMHg3M0VBLCAweDczRUEsIDB4MEY5RiwgMHg3M0VELCAweDczRUQsIDB4MTMzNCwgMHg3M0Y3LCAweDczRjcsIDB4MTJEOCwKKyAgICAweDczRjksIDB4NzNGOSwgMHgxNTZCLCAweDczRkQsIDB4NzNGRCwgMHgxQTRGLCAweDczRkUsIDB4NzNGRSwgMHgxRTNGLAorICAgIDB4NzQwMSwgMHg3NDAxLCAweDE1MzUsIDB4NzQwMywgMHg3NDAzLCAweDBGNTQsIDB4NzQwNSwgMHg3NDA1LCAweDExNDAsCisgICAgMHg3NDA2LCAweDc0MDYsIDB4MTIxMSwgMHg3NDA3LCAweDc0MDcsIDB4MTVEOSwgMHg3NDA5LCAweDc0MDksIDB4MTFFOCwKKyAgICAweDc0MTMsIDB4NzQxMywgMHgxN0UyLCAweDc0MUIsIDB4NzQxQiwgMHgxQ0NDLCAweDc0MjAsIDB4NzQyMCwgMHgxQTA3LAorICAgIDB4NzQyMSwgMHg3NDIxLCAweDE2MDQsIDB4NzQyMiwgMHg3NDIyLCAweDFDRUMsIDB4NzQyNSwgMHg3NDI1LCAweDFFOEUsCisgICAgMHg3NDI2LCAweDc0MjYsIDB4MEZGRiwgMHg3NDI4LCAweDc0MjgsIDB4MEVDNSwgMHg3NDJBLCAweDc0MkEsIDB4MTAwMCwKKyAgICAweDc0MkIsIDB4NzQyQiwgMHgxM0VFLCAweDc0MkMsIDB4NzQyQywgMHgxN0UzLCAweDc0MkUsIDB4NzQyRSwgMHgxQUJDLAorICAgIDB4NzQyRiwgMHg3NDJGLCAweDBFRjIsIDB4NzQzMCwgMHg3NDMwLCAweDE3NjksIDB4NzQzMywgMHg3NDMzLCAweDEyMjksCisgICAgMHg3NDM0LCAweDc0MzQsIDB4MEZDQiwgMHg3NDM1LCAweDc0MzUsIDB4MTQ1MSwgMHg3NDM2LCAweDc0MzYsIDB4MUQzQywKKyAgICAweDc0MzgsIDB4NzQzOCwgMHgxQ0VELCAweDc0M0EsIDB4NzQzQSwgMHgxMzlCLCAweDc0M0YsIDB4NzQzRiwgMHgxRUE4LAorICAgIDB4NzQ0MCwgMHg3NDQwLCAweDE4NDQsIDB4NzQ0MSwgMHg3NDQxLCAweDEyQUIsIDB4NzQ0MywgMHg3NDQzLCAweDFDODYsCisgICAgMHg3NDQ0LCAweDc0NDQsIDB4MTUzNiwgMHg3NDRCLCAweDc0NEIsIDB4MTg5OCwgMHg3NDU1LCAweDc0NTUsIDB4MURDNywKKyAgICAweDc0NTcsIDB4NzQ1NywgMHgxODgxLCAweDc0NTksIDB4NzQ1OSwgMHgxMDRELCAweDc0NUEsIDB4NzQ1QSwgMHgxRThGLAorICAgIDB4NzQ1QiwgMHg3NDVCLCAweDE3ODMsIDB4NzQ1QywgMHg3NDVDLCAweDE4QzEsIDB4NzQ1RSwgMHg3NDVFLCAweDE1MEQsCisgICAgMHg3NDVGLCAweDc0NUYsIDB4MTYyQSwgMHg3NDYwLCAweDc0NjAsIDB4MTFFOSwgMHg3NDYyLCAweDc0NjIsIDB4MTgyQywKKyAgICAweDc0NjQsIDB4NzQ2NCwgMHgxODBCLCAweDc0NjUsIDB4NzQ2NSwgMHgxN0M0LCAweDc0NjgsIDB4NzQ2OCwgMHgxQjUxLAorICAgIDB4NzQ2OSwgMHg3NDY5LCAweDFFNjcsIDB4NzQ2QSwgMHg3NDZBLCAweDEyMzEsIDB4NzQ2RiwgMHg3NDZGLCAweDExNDEsCisgICAgMHg3NDdFLCAweDc0N0UsIDB4MEZCRSwgMHg3NDgyLCAweDc0ODIsIDB4MTAwMSwgMHg3NDgzLCAweDc0ODMsIDB4MTIxMiwKKyAgICAweDc0ODcsIDB4NzQ4NywgMHgxNTM3LCAweDc0ODksIDB4NzQ4OSwgMHgxMTc2LCAweDc0OEIsIDB4NzQ4QiwgMHgxOTlBLAorICAgIDB4NzQ5OCwgMHg3NDk4LCAweDEyMjEsIDB4NzQ5QywgMHg3NDlDLCAweDFFRUYsIDB4NzQ5RSwgMHg3NDlFLCAweDEzMUYsCisgICAgMHg3NDlGLCAweDc0OUYsIDB4MEU2MywgMHg3NEExLCAweDc0QTEsIDB4MUI1MiwgMHg3NEEzLCAweDc0QTMsIDB4MTAwMiwKKyAgICAweDc0QTUsIDB4NzRBNSwgMHgwRTY0LCAweDc0QTcsIDB4NzRBNywgMHgxM0ExLCAweDc0QTgsIDB4NzRBOCwgMHgxQjk5LAorICAgIDB4NzRBQSwgMHg3NEFBLCAweDFBOTQsIDB4NzRCMCwgMHg3NEIwLCAweDFFRDYsIDB4NzRCMiwgMHg3NEIyLCAweDE1REEsCisgICAgMHg3NEI1LCAweDc0QjUsIDB4MTczMywgMHg3NEI5LCAweDc0QjksIDB4MTYwNSwgMHg3NEJELCAweDc0QkQsIDB4MTRGMywKKyAgICAweDc0QkYsIDB4NzRCRiwgMHgxNTM4LCAweDc0QzYsIDB4NzRDNiwgMHgxQjZELCAweDc0Q0EsIDB4NzRDQSwgMHgwRTY1LAorICAgIDB4NzRDRiwgMHg3NENGLCAweDExQkMsIDB4NzRENCwgMHg3NEQ0LCAweDE3ODQsIDB4NzREOCwgMHg3NEQ4LCAweDBFRjMsCisgICAgMHg3NERBLCAweDc0REEsIDB4MUI5QSwgMHg3NERDLCAweDc0REMsIDB4MEVERSwgMHg3NEUwLCAweDc0RTAsIDB4MUU5MCwKKyAgICAweDc0RTIsIDB4NzRFMiwgMHgxRDlGLCAweDc0RTMsIDB4NzRFMywgMHgxRDQ2LCAweDc0RTYsIDB4NzRFNiwgMHgxN0Q0LAorICAgIDB4NzRFRSwgMHg3NEVFLCAweDE3Q0MsIDB4NzRGNywgMHg3NEY3LCAweDE5NjEsIDB4NzUwMSwgMHg3NTAxLCAweDEzQkIsCisgICAgMHg3NTA0LCAweDc1MDQsIDB4MEUzOCwgMHg3NTExLCAweDc1MTEsIDB4MUIxOCwgMHg3NTE1LCAweDc1MTUsIDB4MTdDRCwKKyAgICAweDc1MTgsIDB4NzUxOCwgMHgwREMxLCAweDc1MUEsIDB4NzUxQSwgMHgxNjg4LCAweDc1MUIsIDB4NzUxQiwgMHgxQzBELAorICAgIDB4NzUxRiwgMHg3NTFGLCAweDE0RkEsIDB4NzUyMywgMHg3NTIzLCAweDE0QkQsIDB4NzUyNSwgMHg3NTI1LCAweDE0RkIsCisgICAgMHg3NTI2LCAweDc1MjYsIDB4MTU4RSwgMHg3NTI4LCAweDc1MjgsIDB4MTgyRCwgMHg3NTJCLCAweDc1MkIsIDB4MTNDQywKKyAgICAweDc1MkMsIDB4NzUyQywgMHgxODJFLCAweDc1MzAsIDB4NzUzMCwgMHgxQTA4LCAweDc1MzEsIDB4NzUzMSwgMHgxOEMyLAorICAgIDB4NzUzMiwgMHg3NTMyLCAweDBEQ0MsIDB4NzUzMywgMHg3NTMzLCAweDE2NzEsIDB4NzUzNywgMHg3NTM3LCAweDEwMzUsCisgICAgMHg3NTM4LCAweDc1MzgsIDB4MUEwOSwgMHg3NTNBLCAweDc1M0EsIDB4MUE1MCwgMHg3NTQ3LCAweDc1NDcsIDB4MEZBQiwKKyAgICAweDc1NEMsIDB4NzU0QywgMHgwRTg1LCAweDc1NEYsIDB4NzU0RiwgMHgxN0ZCLCAweDc1NTEsIDB4NzU1MSwgMHgxQTBBLAorICAgIDB4NzU1MywgMHg3NTUzLCAweDEwOEIsIDB4NzU1NCwgMHg3NTU0LCAweDEzMzUsIDB4NzU1OSwgMHg3NTU5LCAweDExRUEsCisgICAgMHg3NTVCLCAweDc1NUIsIDB4MUI1MywgMHg3NTVDLCAweDc1NUMsIDB4MUM3OSwgMHg3NTVELCAweDc1NUQsIDB4MTJEOSwKKyAgICAweDc1NjIsIDB4NzU2MiwgMHgxREI5LCAweDc1NjUsIDB4NzU2NSwgMHgxMTRBLCAweDc1NjYsIDB4NzU2NiwgMHgxRjQ4LAorICAgIDB4NzU2QSwgMHg3NTZBLCAweDEzODgsIDB4NzU2RiwgMHg3NTZGLCAweDFCMDIsIDB4NzU3MCwgMHg3NTcwLCAweDE5MTgsCisgICAgMHg3NTc1LCAweDc1NzUsIDB4MUVCQywgMHg3NTc2LCAweDc1NzYsIDB4MTA5NiwgMHg3NTc4LCAweDc1NzgsIDB4MTAwMywKKyAgICAweDc1N0EsIDB4NzU3QSwgMHgwRERBLCAweDc1N0YsIDB4NzU3RiwgMHgxMDA0LCAweDc1ODYsIDB4NzU4NiwgMHgwRERCLAorICAgIDB4NzU4NywgMHg3NTg3LCAweDFBRTMsIDB4NzU4QSwgMHg3NThBLCAweDFDMTgsIDB4NzU4QiwgMHg3NThCLCAweDFEQkEsCisgICAgMHg3NThFLCAweDc1OEUsIDB4MTU5MCwgMHg3NThGLCAweDc1OEYsIDB4MTU4RiwgMHg3NTkxLCAweDc1OTEsIDB4MTkwMywKKyAgICAweDc1OUQsIDB4NzU5RCwgMHgxNEJFLCAweDc1QTUsIDB4NzVBNSwgMHgwREYzLCAweDc1QUIsIDB4NzVBQiwgMHgxNzNGLAorICAgIDB4NzVCMSwgMHg3NUIxLCAweDFEODYsIDB4NzVCMiwgMHg3NUIyLCAweDFEQUYsIDB4NzVCMywgMHg3NUIzLCAweDBEQzIsCisgICAgMHg3NUI1LCAweDc1QjUsIDB4MTk2MiwgMHg3NUI4LCAweDc1QjgsIDB4MTA3NywgMHg3NUI5LCAweDc1QjksIDB4MUI1NCwKKyAgICAweDc1QkMsIDB4NzVCQywgMHgxMEY2LCAweDc1QkQsIDB4NzVCRCwgMHgxOUNELCAweDc1QkUsIDB4NzVCRSwgMHgxQjZFLAorICAgIDB4NzVDMiwgMHg3NUMyLCAweDBEN0QsIDB4NzVDNSwgMHg3NUM1LCAweDEzQkMsIDB4NzVDNywgMHg3NUM3LCAweDFCMTksCisgICAgMHg3NUNELCAweDc1Q0QsIDB4MTkxOSwgMHg3NUQyLCAweDc1RDIsIDB4MTcwNCwgMHg3NUQ0LCAweDc1RDQsIDB4MUNCMiwKKyAgICAweDc1RDUsIDB4NzVENSwgMHgxRjU2LCAweDc1RDgsIDB4NzVEOCwgMHgxMTAwLCAweDc1RDksIDB4NzVEOSwgMHgwRTY2LAorICAgIDB4NzVEQiwgMHg3NURCLCAweDFEMUYsIDB4NzVFMiwgMHg3NUUyLCAweDEyMTMsIDB4NzVGMCwgMHg3NUYwLCAweDEwODIsCisgICAgMHg3NUYyLCAweDc1RjIsIDB4MTIzMiwgMHg3NUY0LCAweDc1RjQsIDB4MUNCMywgMHg3NUZBLCAweDc1RkEsIDB4MTQ1MiwKKyAgICAweDc1RkMsIDB4NzVGQywgMHgwRUEyLCAweDc2MDAsIDB4NzYwMCwgMHgxNzEyLCAweDc2MEQsIDB4NzYwRCwgMHgxNzA1LAorICAgIDB4NzYxOSwgMHg3NjE5LCAweDE1OTEsIDB4NzYxRiwgMHg3NjFGLCAweDE3QzUsIDB4NzYyMCwgMHg3NjIwLCAweDFCRTcsCisgICAgMHg3NjIxLCAweDc2MjEsIDB4MUJDNCwgMHg3NjIyLCAweDc2MjIsIDB4MTMzNiwgMHg3NjI0LCAweDc2MjQsIDB4MTFFQiwKKyAgICAweDc2MjYsIDB4NzYyNiwgMHgxNURCLCAweDc2M0IsIDB4NzYzQiwgMHgxMURBLCAweDc2NDIsIDB4NzY0MiwgMHgxMUNELAorICAgIDB4NzY0QywgMHg3NjRDLCAweDE2QzIsIDB4NzY0RSwgMHg3NjRFLCAweDBEQTEsIDB4NzY1MiwgMHg3NjUyLCAweDE4QzMsCisgICAgMHg3NjU2LCAweDc2NTYsIDB4MTNBMiwgMHg3NjYxLCAweDc2NjEsIDB4MUNCNCwgMHg3NjY0LCAweDc2NjQsIDB4MUEyMCwKKyAgICAweDc2NjksIDB4NzY2OSwgMHgxMTE4LCAweDc2NkMsIDB4NzY2QywgMHgxNTM5LCAweDc2NzAsIDB4NzY3MCwgMHgxN0NFLAorICAgIDB4NzY3MiwgMHg3NjcyLCAweDFBMEIsIDB4NzY3OCwgMHg3Njc4LCAweDBFODYsIDB4NzY3QiwgMHg3NjdCLCAweDExMTAsCisgICAgMHg3NjdDLCAweDc2N0MsIDB4MTM0NywgMHg3NjdELCAweDc2N0UsIDB4MTM4MSwgMHg3Njg0LCAweDc2ODQsIDB4MTlFMywKKyAgICAweDc2ODYsIDB4NzY4NiwgMHgwREY0LCAweDc2ODcsIDB4NzY4NywgMHgxRUYwLCAweDc2OEUsIDB4NzY4RSwgMHgwRjI4LAorICAgIDB4NzY5MCwgMHg3NjkwLCAweDBFQTMsIDB4NzY5MywgMHg3NjkzLCAweDFFOTEsIDB4NzZBRSwgMHg3NkFFLCAweDFEQjAsCisgICAgMHg3NkJBLCAweDc2QkEsIDB4MUM2OCwgMHg3NkJGLCAweDc2QkYsIDB4MTI5MywgMHg3NkMyLCAweDc2QzIsIDB4MTg0NSwKKyAgICAweDc2QzMsIDB4NzZDMywgMHgxMzcyLCAweDc2QzYsIDB4NzZDNiwgMHgxNDJDLCAweDc2QzgsIDB4NzZDOCwgMHgxNzg1LAorICAgIDB4NzZDQSwgMHg3NkNBLCAweDE5MjYsIDB4NzZEMiwgMHg3NkQyLCAweDFERjEsIDB4NzZENiwgMHg3NkQ2LCAweDBERjUsCisgICAgMHg3NkRCLCAweDc2REIsIDB4MTU2QywgMHg3NkRDLCAweDc2REMsIDB4MTBDNSwgMHg3NkRFLCAweDc2REUsIDB4MTk3RSwKKyAgICAweDc2REYsIDB4NzZERiwgMHgxMjdCLCAweDc2RTEsIDB4NzZFMSwgMHgxQjU1LCAweDc2RTMsIDB4NzZFMywgMHgwREMzLAorICAgIDB4NzZFNCwgMHg3NkU0LCAweDEzMzcsIDB4NzZFNywgMHg3NkU3LCAweDExQTYsIDB4NzZFRSwgMHg3NkVFLCAweDEyQjcsCisgICAgMHg3NkYyLCAweDc2RjIsIDB4MTI3QSwgMHg3NkY0LCAweDc2RjQsIDB4MUIzRiwgMHg3NkY4LCAweDc2RjgsIDB4MTRFOCwKKyAgICAweDc2RkMsIDB4NzZGQywgMHgxMzM4LCAweDc2RkUsIDB4NzZGRSwgMHgxNjE0LCAweDc3MDEsIDB4NzcwMSwgMHgxNTZELAorICAgIDB4NzcwNCwgMHg3NzA0LCAweDEyODQsIDB4NzcwOCwgMHg3NzA4LCAweDFDRkQsIDB4NzcwOSwgMHg3NzA5LCAweDEyRkUsCisgICAgMHg3NzBCLCAweDc3MEIsIDB4MERBMiwgMHg3NzFFLCAweDc3MUUsIDB4MUI1NiwgMHg3NzIwLCAweDc3MjAsIDB4MTI4NSwKKyAgICAweDc3MjksIDB4NzcyOSwgMHgxRTQwLCAweDc3MzcsIDB4NzczNywgMHgwRjhBLCAweDc3MzgsIDB4NzczOCwgMHgxMkFDLAorICAgIDB4NzczQSwgMHg3NzNBLCAweDFBOTUsIDB4NzczQywgMHg3NzNDLCAweDE2QjQsIDB4Nzc0MCwgMHg3NzQwLCAweDFCOTEsCisgICAgMHg3NzRELCAweDc3NEQsIDB4MUU0MSwgMHg3NzVCLCAweDc3NUIsIDB4MUE1MSwgMHg3NzYxLCAweDc3NjEsIDB4MTVEQywKKyAgICAweDc3NjMsIDB4Nzc2MywgMHgxMERBLCAweDc3NjYsIDB4Nzc2NiwgMHgxMkI4LCAweDc3NkIsIDB4Nzc2QiwgMHgxQzE5LAorICAgIDB4Nzc3OSwgMHg3Nzc5LCAweDEwQzYsIDB4Nzc3RSwgMHg3NzdFLCAweDBFQTQsIDB4Nzc3RiwgMHg3NzdGLCAweDE3OTUsCisgICAgMHg3NzhCLCAweDc3OEIsIDB4MUI1NywgMHg3NzkxLCAweDc3OTEsIDB4MTI5NCwgMHg3NzlFLCAweDc3OUUsIDB4MTI0QSwKKyAgICAweDc3QTUsIDB4NzdBNSwgMHgxM0FFLCAweDc3QUMsIDB4NzdBQywgMHgxNjE1LCAweDc3QUQsIDB4NzdBRCwgMHgxMUNFLAorICAgIDB4NzdCMCwgMHg3N0IwLCAweDBEQzQsIDB4NzdCMywgMHg3N0IzLCAweDEwRjcsIDB4NzdCQiwgMHg3N0JCLCAweDFDMEUsCisgICAgMHg3N0JDLCAweDc3QkMsIDB4MEUyNSwgMHg3N0JGLCAweDc3QkYsIDB4MEY1NSwgMHg3N0Q3LCAweDc3RDcsIDB4MUM0QywKKyAgICAweDc3REIsIDB4NzdEQiwgMHgxMkFELCAweDc3REMsIDB4NzdEQywgMHgwRkRDLCAweDc3RTIsIDB4NzdFMiwgMHgxNjRELAorICAgIDB4NzdFMywgMHg3N0UzLCAweDE5MDQsIDB4NzdFNSwgMHg3N0U1LCAweDFCMzAsIDB4NzdFOSwgMHg3N0U5LCAweDBGNTYsCisgICAgMHg3N0VELCAweDc3RUQsIDB4MTA2QywgMHg3N0VFLCAweDc3RUUsIDB4MTdGNiwgMHg3N0VGLCAweDc3RUYsIDB4MEYyOSwKKyAgICAweDc3RjMsIDB4NzdGMywgMHgxNTI1LCAweDc4MDIsIDB4NzgwMiwgMHgxNDlELCAweDc4MTIsIDB4NzgxMiwgMHgxNDUzLAorICAgIDB4NzgyNSwgMHg3ODI1LCAweDFCMzEsIDB4NzgyNiwgMHg3ODI2LCAweDFCRDAsIDB4NzgyNywgMHg3ODI3LCAweDFDQ0QsCisgICAgMHg3ODJDLCAweDc4MkMsIDB4MTIyQywgMHg3ODMyLCAweDc4MzIsIDB4MUQ4NywgMHg3ODM0LCAweDc4MzQsIDB4MUQzRCwKKyAgICAweDc4NDUsIDB4Nzg0NSwgMHgwRkEwLCAweDc4NEYsIDB4Nzg0RiwgMHgxNzU4LCAweDc4NUQsIDB4Nzg1RCwgMHgxQzNBLAorICAgIDB4Nzg2QiwgMHg3ODZCLCAweDExRUMsIDB4Nzg2QywgMHg3ODZDLCAweDBFNjcsIDB4Nzg2RiwgMHg3ODZGLCAweDE3NTksCisgICAgMHg3ODdDLCAweDc4N0MsIDB4MTQzQSwgMHg3ODgxLCAweDc4ODEsIDB4MTAwNSwgMHg3ODg3LCAweDc4ODcsIDB4MUE1MiwKKyAgICAweDc4OEMsIDB4Nzg4QywgMHgxMUIwLCAweDc4OEQsIDB4Nzg4RCwgMHgxNkQ3LCAweDc4OEUsIDB4Nzg4RSwgMHgxNUJCLAorICAgIDB4Nzg5MSwgMHg3ODkxLCAweDE0NTQsIDB4Nzg5NywgMHg3ODk3LCAweDE3RTQsIDB4NzhBMywgMHg3OEEzLCAweDBEQjAsCisgICAgMHg3OEE3LCAweDc4QTcsIDB4MTNBMywgMHg3OEE5LCAweDc4QTksIDB4MTUyNiwgMHg3OEJBLCAweDc4QkIsIDB4MUVDNywKKyAgICAweDc4QkMsIDB4NzhCQywgMHgxMjMzLCAweDc4QzEsIDB4NzhDMSwgMHgxOTYzLCAweDc4QzUsIDB4NzhDNSwgMHgxMzVDLAorICAgIDB4NzhDQSwgMHg3OENBLCAweDExQzIsIDB4NzhDQiwgMHg3OENCLCAweDFCOEEsIDB4NzhDRSwgMHg3OENFLCAweDBFODcsCisgICAgMHg3OEQwLCAweDc4RDAsIDB4MTMzOSwgMHg3OEU4LCAweDc4RTgsIDB4MTIzNCwgMHg3OEVDLCAweDc4RUMsIDB4MEU2OCwKKyAgICAweDc4RUYsIDB4NzhFRiwgMHgxMDA2LCAweDc4RjUsIDB4NzhGNSwgMHgwREEzLCAweDc4RkIsIDB4NzhGQiwgMHgxMzNBLAorICAgIDB4NzkwMSwgMHg3OTAxLCAweDFDM0IsIDB4NzkwRSwgMHg3OTBFLCAweDFDM0MsIDB4NzkxNiwgMHg3OTE2LCAweDE3MzQsCisgICAgMHg3OTJBLCAweDc5MkEsIDB4MTE2MiwgMHg3OTJCLCAweDc5MkIsIDB4MTE2RSwgMHg3OTJDLCAweDc5MkMsIDB4MTMzQiwKKyAgICAweDc5M0EsIDB4NzkzQSwgMHgxNjRFLCAweDc5M0UsIDB4NzkzRSwgMHgxNDlFLCAweDc5NDAsIDB4Nzk0MCwgMHgxNDlGLAorICAgIDB4Nzk0MSwgMHg3OTQxLCAweDEwMDcsIDB4Nzk0NywgMHg3OTQ4LCAweDEwMDgsIDB4Nzk0OSwgMHg3OTQ5LCAweDFCMzIsCisgICAgMHg3OTUwLCAweDc5NTAsIDB4MTg0NiwgMHg3OTU2LCAweDc5NTYsIDB4MUE5NiwgMHg3OTU3LCAweDc5NTcsIDB4MUIzMywKKyAgICAweDc5NUEsIDB4Nzk1QSwgMHgxQTk3LCAweDc5NUIsIDB4Nzk1QiwgMHgwRTBCLCAweDc5NUMsIDB4Nzk1QywgMHgxRTkyLAorICAgIDB4Nzk1RCwgMHg3OTVELCAweDFDN0EsIDB4Nzk1RSwgMHg3OTVFLCAweDE2NzIsIDB4Nzk2MCwgMHg3OTYwLCAweDE0QTAsCisgICAgMHg3OTY1LCAweDc5NjUsIDB4MTRFOSwgMHg3OTY4LCAweDc5NjgsIDB4MURBMCwgMHg3OTZELCAweDc5NkQsIDB4MUE3MSwKKyAgICAweDc5N0EsIDB4Nzk3QSwgMHgxMDBBLCAweDc5N0YsIDB4Nzk3RiwgMHgxMUIxLCAweDc5ODEsIDB4Nzk4MSwgMHgwRkNDLAorICAgIDB4Nzk4RCwgMHg3OThELCAweDFFQkQsIDB4Nzk4RSwgMHg3OThFLCAweDFBNTMsIDB4Nzk4RiwgMHg3OThGLCAweDEzRDksCisgICAgMHg3OTkxLCAweDc5OTEsIDB4MTg0NywgMHg3OUE2LCAweDc5QTYsIDB4MTcxMywgMHg3OUE3LCAweDc5QTcsIDB4MUY3NCwKKyAgICAweDc5QUEsIDB4NzlBQSwgMHgxNTNBLCAweDc5QUUsIDB4NzlBRSwgMHgxMTlDLCAweDc5QjEsIDB4NzlCMSwgMHgxMEM3LAorICAgIDB4NzlCMywgMHg3OUIzLCAweDE3MDYsIDB4NzlCOSwgMHg3OUI5LCAweDE4NDgsIDB4NzlCRCwgMHg3OUJELCAweDBGQ0QsCisgICAgMHg3OUJFLCAweDc5QkUsIDB4MUVCRSwgMHg3OUJGLCAweDc5QkYsIDB4MTBEQiwgMHg3OUMwLCAweDc5QzAsIDB4MTVERCwKKyAgICAweDc5QzEsIDB4NzlDMSwgMHgxNEExLCAweDc5QzksIDB4NzlDOSwgMHgxM0JELCAweDc5Q0EsIDB4NzlDQSwgMHgxMDQyLAorICAgIDB4NzlDQiwgMHg3OUNCLCAweDFDNjksIDB4NzlEMSwgMHg3OUQxLCAweDBFREYsIDB4NzlEMiwgMHg3OUQyLCAweDFDM0QsCisgICAgMHg3OUQ1LCAweDc5RDUsIDB4MTQ1NSwgMHg3OUQ4LCAweDc5RDgsIDB4MTQ1NiwgMHg3OURGLCAweDc5REYsIDB4MUE5OCwKKyAgICAweDc5RTQsIDB4NzlFNCwgMHgxQ0QxLCAweDc5RTYsIDB4NzlFNiwgMHgxQjU4LCAweDc5RTcsIDB4NzlFNywgMHgxNkNFLAorICAgIDB4NzlFOSwgMHg3OUU5LCAweDFCNkYsIDB4NzlGQiwgMHg3OUZCLCAweDE5MUEsIDB4N0EwMCwgMHg3QTAwLCAweDFGNzUsCisgICAgMHg3QTA1LCAweDdBMDUsIDB4MTU3OCwgMHg3QTA4LCAweDdBMDgsIDB4MERBNCwgMHg3QTBCLCAweDdBMEIsIDB4MUE1NCwKKyAgICAweDdBMEQsIDB4N0EwRCwgMHgxQzNFLCAweDdBMTQsIDB4N0ExNCwgMHgxOTRBLCAweDdBMTcsIDB4N0ExNywgMHgxRDU2LAorICAgIDB4N0ExOSwgMHg3QTE5LCAweDFCNDAsIDB4N0ExQSwgMHg3QTFBLCAweDFDQjUsIDB4N0ExQywgMHg3QTFDLCAweDEyMDEsCisgICAgMHg3QTFGLCAweDdBMUYsIDB4MURBNywgMHg3QTIwLCAweDdBMjAsIDB4MUE5OSwgMHg3QTJFLCAweDdBMkUsIDB4MUFCRCwKKyAgICAweDdBMzEsIDB4N0EzMSwgMHgxQ0QyLCAweDdBMzYsIDB4N0EzNiwgMHgxODVCLCAweDdBMzcsIDB4N0EzNywgMHgxQjQxLAorICAgIDB4N0EzQiwgMHg3QTNCLCAweDEwQzgsIDB4N0EzQywgMHg3QTNDLCAweDBEN0UsIDB4N0EzRCwgMHg3QTNELCAweDBFODgsCisgICAgMHg3QTNGLCAweDdBM0YsIDB4MEVBNSwgMHg3QTQwLCAweDdBNDAsIDB4MEVCQiwgMHg3QTQ2LCAweDdBNDYsIDB4MTJCOSwKKyAgICAweDdBNDksIDB4N0E0OSwgMHgxQ0I2LCAweDdBNEQsIDB4N0E0RCwgMHgxOUU0LCAweDdBNEUsIDB4N0E0RSwgMHgxNzg2LAorICAgIDB4N0E1NywgMHg3QTU3LCAweDE1REUsIDB4N0E2MSwgMHg3QTYxLCAweDE0RjYsIDB4N0E2MiwgMHg3QTYyLCAweDE3OTYsCisgICAgMHg3QTY5LCAweDdBNjksIDB4MTdDNiwgMHg3QTZCLCAweDdBNkIsIDB4MUVDOSwgMHg3QTcwLCAweDdBNzAsIDB4MTcwNywKKyAgICAweDdBNzQsIDB4N0E3NCwgMHgxRTRCLCAweDdBNzYsIDB4N0E3NiwgMHgwRjU3LCAweDdBNzksIDB4N0E3OSwgMHgwRjdELAorICAgIDB4N0E3QSwgMHg3QTdBLCAweDBFRDYsIDB4N0E3RCwgMHg3QTdELCAweDFBNTUsIDB4N0E3RiwgMHg3QTdGLCAweDFCRjUsCisgICAgMHg3QTgxLCAweDdBODEsIDB4MTBFQSwgMHg3QTg0LCAweDdBODQsIDB4MUI5MiwgMHg3QTg4LCAweDdBODgsIDB4MTgwQywKKyAgICAweDdBOTIsIDB4N0E5MiwgMHgxQjcwLCAweDdBOTMsIDB4N0E5MywgMHgxQkM1LCAweDdBOTUsIDB4N0E5NSwgMHgxQTlBLAorICAgIDB4N0E5OCwgMHg3QTk4LCAweDBGNzIsIDB4N0E5RiwgMHg3QTlGLCAweDBGN0EsIDB4N0FBOSwgMHg3QUFBLCAweDE3RDUsCisgICAgMHg3QUFFLCAweDdBQUUsIDB4MEY3RSwgMHg3QUFGLCAweDdBQUYsIDB4MTgwRCwgMHg3QUJBLCAweDdBQkEsIDB4MEZBMSwKKyAgICAweDdBQzQsIDB4N0FDNCwgMHgxQjlCLCAweDdBQzUsIDB4N0FDNSwgMHgwRkEyLCAweDdBQzcsIDB4N0FDNywgMHgxMTAxLAorICAgIDB4N0FDQSwgMHg3QUNBLCAweDFBMjEsIDB4N0FDQiwgMHg3QUNCLCAweDEyMkQsIDB4N0FENywgMHg3QUQ3LCAweDEyQzksCisgICAgMHg3QUQ5LCAweDdBRDksIDB4MUJCMSwgMHg3QURELCAweDdBREQsIDB4MTNCRSwgMHg3QURGLCAweDdBREYsIDB4MEU2OSwKKyAgICAweDdBRTAsIDB4N0FFMCwgMHgxOTlCLCAweDdBRTMsIDB4N0FFMywgMHgxQjAzLCAweDdBRTUsIDB4N0FFNSwgMHgxMEY4LAorICAgIDB4N0FFQSwgMHg3QUVBLCAweDE1REYsIDB4N0FFRCwgMHg3QUVELCAweDBEQjEsIDB4N0FFRiwgMHg3QUVGLCAweDEwNkQsCisgICAgMHg3QUY2LCAweDdBRjYsIDB4MEU2QSwgMHg3QUY5LCAweDdBRjksIDB4MUFGNCwgMHg3QUZBLCAweDdBRkEsIDB4MUM3QiwKKyAgICAweDdBRkYsIDB4N0FGRiwgMHgwREE1LCAweDdCMEYsIDB4N0IwRiwgMHgxRUFDLCAweDdCMTEsIDB4N0IxMSwgMHgxNTkyLAorICAgIDB4N0IxOSwgMHg3QjE5LCAweDE0RkMsIDB4N0IxQiwgMHg3QjFCLCAweDE5RTUsIDB4N0IxRSwgMHg3QjFFLCAweDFEMEYsCisgICAgMHg3QjIwLCAweDdCMjAsIDB4MTIyRSwgMHg3QjI2LCAweDdCMjYsIDB4MTQwQSwgMHg3QjJDLCAweDdCMkMsIDB4MUE3MiwKKyAgICAweDdCMkQsIDB4N0IyRCwgMHgxMTkwLCAweDdCMzksIDB4N0IzOSwgMHgxNTc5LCAweDdCNDYsIDB4N0I0NiwgMHgxREJCLAorICAgIDB4N0I0OSwgMHg3QjQ5LCAweDExMTEsIDB4N0I0QiwgMHg3QjRCLCAweDBGQkYsIDB4N0I0QywgMHg3QjRDLCAweDFBMEMsCisgICAgMHg3QjRELCAweDdCNEQsIDB4MTYxNiwgMHg3QjRGLCAweDdCNEYsIDB4MTM4RSwgMHg3QjUwLCAweDdCNTAsIDB4MEYwOSwKKyAgICAweDdCNTEsIDB4N0I1MSwgMHgxQzdDLCAweDdCNTIsIDB4N0I1MiwgMHgxRDIwLCAweDdCNTQsIDB4N0I1NCwgMHgxMDhDLAorICAgIDB4N0I1NiwgMHg3QjU2LCAweDFCRDgsIDB4N0I2MCwgMHg3QjYwLCAweDBGQUMsIDB4N0I2QywgMHg3QjZDLCAweDE1NkUsCisgICAgMHg3QjZFLCAweDdCNkUsIDB4MTUwRSwgMHg3Qjc1LCAweDdCNzUsIDB4MTc1QSwgMHg3QjdELCAweDdCN0QsIDB4MTdCOSwKKyAgICAweDdCODcsIDB4N0I4NywgMHgwREY2LCAweDdCOEIsIDB4N0I4QiwgMHgxQTBELCAweDdCOEYsIDB4N0I4RiwgMHgxOUJDLAorICAgIDB4N0I5NCwgMHg3Qjk0LCAweDEzMjAsIDB4N0I5NSwgMHg3Qjk1LCAweDEwMEIsIDB4N0I5NywgMHg3Qjk3LCAweDE0QkYsCisgICAgMHg3QjlBLCAweDdCOUEsIDB4MUI4QiwgMHg3QjlELCAweDdCOUQsIDB4MEU0OCwgMHg3QkExLCAweDdCQTEsIDB4MEVGNCwKKyAgICAweDdCQUQsIDB4N0JBRCwgMHgxQTBFLCAweDdCQjEsIDB4N0JCMSwgMHgxNEVBLCAweDdCQjQsIDB4N0JCNCwgMHgxOTgyLAorICAgIDB4N0JCOCwgMHg3QkI4LCAweDE5Q0UsIDB4N0JDMCwgMHg3QkMwLCAweDFBMjIsIDB4N0JDMSwgMHg3QkMxLCAweDFFRjEsCisgICAgMHg3QkM0LCAweDdCQzQsIDB4MTM5OCwgMHg3QkM2LCAweDdCQzYsIDB4MUEwRiwgMHg3QkM3LCAweDdCQzcsIDB4MUQ2MiwKKyAgICAweDdCQzksIDB4N0JDOSwgMHgxQzdELCAweDdCRDIsIDB4N0JEMiwgMHgxNjYxLCAweDdCRTAsIDB4N0JFMCwgMHgxNTkzLAorICAgIDB4N0JFNCwgMHg3QkU0LCAweDEwREMsIDB4N0JFOSwgMHg3QkU5LCAweDE0QTIsIDB4N0MwNywgMHg3QzA3LCAweDFBQUQsCisgICAgMHg3QzEyLCAweDdDMTIsIDB4MUI5QywgMHg3QzFFLCAweDdDMUUsIDB4MTA2RSwgMHg3QzIxLCAweDdDMjEsIDB4MERBNiwKKyAgICAweDdDMjcsIDB4N0MyNywgMHgxRUYyLCAweDdDMkEsIDB4N0MyQSwgMHgxOTgzLCAweDdDMkIsIDB4N0MyQiwgMHgxNTk0LAorICAgIDB4N0MzRCwgMHg3QzNELCAweDFDMEYsIDB4N0MzRSwgMHg3QzNFLCAweDExODcsIDB4N0MzRiwgMHg3QzNGLCAweDE0MEIsCisgICAgMHg3QzQzLCAweDdDNDMsIDB4MTEzNCwgMHg3QzRDLCAweDdDNEMsIDB4MUFFNCwgMHg3QzRELCAweDdDNEQsIDB4MTlFNiwKKyAgICAweDdDNjAsIDB4N0M2MCwgMHgxMUJELCAweDdDNjQsIDB4N0M2NCwgMHgxQzEwLCAweDdDNkMsIDB4N0M2QywgMHgxMjE0LAorICAgIDB4N0M3MywgMHg3QzczLCAweDEyRkYsIDB4N0M4MywgMHg3QzgzLCAweDE0NTcsIDB4N0M4OSwgMHg3Qzg5LCAweDE0MkQsCisgICAgMHg3QzkyLCAweDdDOTIsIDB4MTIyRiwgMHg3Qzk1LCAweDdDOTUsIDB4MTMyMSwgMHg3Qzk3LCAweDdDOTcsIDB4MUE5QiwKKyAgICAweDdDOTgsIDB4N0M5OCwgMHgxQTI5LCAweDdDOUYsIDB4N0M5RiwgMHgxNUE1LCAweDdDQTUsIDB4N0NBNSwgMHgxQUY1LAorICAgIDB4N0NBNywgMHg3Q0E3LCAweDE5OUMsIDB4N0NBRSwgMHg3Q0FFLCAweDExNTEsIDB4N0NCMSwgMHg3Q0IxLCAweDExNTIsCisgICAgMHg3Q0IyLCAweDdDQjIsIDB4MUI5RSwgMHg3Q0IzLCAweDdDQjMsIDB4MERGRSwgMHg3Q0I5LCAweDdDQjksIDB4MTVFMCwKKyAgICAweDdDQkUsIDB4N0NCRSwgMHgxQTU2LCAweDdDQ0EsIDB4N0NDQSwgMHgxRTkzLCAweDdDRDYsIDB4N0NENiwgMHgxMDk3LAorICAgIDB4N0NERSwgMHg3Q0RFLCAweDE0MkUsIDB4N0NERiwgMHg3Q0RGLCAweDFBOUMsIDB4N0NFMCwgMHg3Q0UwLCAweDBEREMsCisgICAgMHg3Q0U3LCAweDdDRTcsIDB4MTE1MywgMHg3Q0ZCLCAweDdDRkIsIDB4MEU4OSwgMHg3Q0ZFLCAweDdDRkUsIDB4MEZBMywKKyAgICAweDdEMDAsIDB4N0QwMCwgMHgxMDBDLCAweDdEMDIsIDB4N0QwMiwgMHgxQUU1LCAweDdEMDQsIDB4N0QwNCwgMHgxNkYxLAorICAgIDB4N0QwNSwgMHg3RDA1LCAweDFFQjMsIDB4N0QwNiwgMHg3RDA2LCAweDE4NDksIDB4N0QwNywgMHg3RDA3LCAweDFGNTksCisgICAgMHg3RDA4LCAweDdEMDgsIDB4MUVENywgMHg3RDBBLCAweDdEMEIsIDB4MTJFQSwgMHg3RDBELCAweDdEMEQsIDB4MTAzNiwKKyAgICAweDdEMTAsIDB4N0QxMCwgMHgxMDU4LCAweDdEMTQsIDB4N0QxNCwgMHgxNjE3LCAweDdEMTcsIDB4N0QxNywgMHgxNEEzLAorICAgIDB4N0QxOCwgMHg3RDE4LCAweDBGMTksIDB4N0QxOSwgMHg3RDE5LCAweDFCMzQsIDB4N0QxQSwgMHg3RDFBLCAweDBGRDgsCisgICAgMHg3RDFCLCAweDdEMUIsIDB4MTQyRiwgMHg3RDIwLCAweDdEMjAsIDB4MTU5NSwgMHg3RDIxLCAweDdEMjEsIDB4MTM1RCwKKyAgICAweDdEMjIsIDB4N0QyMiwgMHgxNEY3LCAweDdEMkIsIDB4N0QyQiwgMHgxOTY0LCAweDdEMkMsIDB4N0QyQywgMHgxQUU2LAorICAgIDB4N0QyRSwgMHg3RDJFLCAweDFCQTksIDB4N0QyRiwgMHg3RDJGLCAweDExREIsIDB4N0QzMCwgMHg3RDMwLCAweDE1N0EsCisgICAgMHg3RDMzLCAweDdEMzMsIDB4MTY3MywgMHg3RDM1LCAweDdEMzUsIDB4MTlDRiwgMHg3RDM5LCAweDdEMzksIDB4MTU5NiwKKyAgICAweDdEM0EsIDB4N0QzQSwgMHgwREM1LCAweDdENDIsIDB4N0Q0MiwgMHgxQUJFLCAweDdENDMsIDB4N0Q0MywgMHgxRTQyLAorICAgIDB4N0Q0NCwgMHg3RDQ0LCAweDFBOUQsIDB4N0Q0NSwgMHg3RDQ1LCAweDBFNkIsIDB4N0Q0NiwgMHg3RDQ2LCAweDEzM0MsCisgICAgMHg3RDUwLCAweDdENTAsIDB4MEU0MywgMHg3RDVFLCAweDdENUUsIDB4MEYyQSwgMHg3RDYxLCAweDdENjEsIDB4MTEyMSwKKyAgICAweDdENjIsIDB4N0Q2MiwgMHgxRTQzLCAweDdENjYsIDB4N0Q2NiwgMHgwRkQ5LCAweDdENjgsIDB4N0Q2OCwgMHgxOEUzLAorICAgIDB4N0Q2QSwgMHg3RDZBLCAweDE5MzYsIDB4N0Q2RSwgMHg3RDZFLCAweDE1MEYsIDB4N0Q3MSwgMHg3RDcxLCAweDFEMjEsCisgICAgMHg3RDcyLCAweDdENzIsIDB4MTRBNCwgMHg3RDczLCAweDdENzMsIDB4MERERCwgMHg3RDc2LCAweDdENzYsIDB4MUEyMywKKyAgICAweDdENzksIDB4N0Q3OSwgMHgwRTM5LCAweDdEN0YsIDB4N0Q3RiwgMHgwRjU4LCAweDdEOEUsIDB4N0Q4RSwgMHgxQTU3LAorICAgIDB4N0Q4RiwgMHg3RDhGLCAweDE1RTEsIDB4N0Q5MywgMHg3RDkzLCAweDBFNkMsIDB4N0Q5QywgMHg3RDlDLCAweDFBQkYsCisgICAgMHg3REEwLCAweDdEQTAsIDB4MTFCMiwgMHg3REEyLCAweDdEQTIsIDB4MUFFNywgMHg3REFDLCAweDdEQUMsIDB4MTVFMiwKKyAgICAweDdEQUQsIDB4N0RBRCwgMHgxOEM0LCAweDdEQjEsIDB4N0RCMSwgMHgwRERFLCAweDdEQjIsIDB4N0RCMiwgMHgxMjVELAorICAgIDB4N0RCNCwgMHg3REI0LCAweDFDMDUsIDB4N0RCNSwgMHg3REI1LCAweDFCRDEsIDB4N0RCOCwgMHg3REI4LCAweDExRjYsCisgICAgMHg3REJBLCAweDdEQkEsIDB4MTAwRCwgMHg3REJCLCAweDdEQkIsIDB4MUNGOCwgMHg3REJELCAweDdEQkQsIDB4MTk3NSwKKyAgICAweDdEQkUsIDB4N0RCRSwgMHgxMjAyLCAweDdEQkYsIDB4N0RCRiwgMHgxMjg2LCAweDdEQzcsIDB4N0RDNywgMHgxQ0I3LAorICAgIDB4N0RDQSwgMHg3RENBLCAweDEwMUUsIDB4N0RDQiwgMHg3RENCLCAweDE0NTgsIDB4N0RENiwgMHg3REQ2LCAweDE1MTAsCisgICAgMHg3REQ4LCAweDdERDgsIDB4MURFQSwgMHg3RERBLCAweDdEREEsIDB4MTUzQiwgMHg3RERELCAweDdEREQsIDB4MUI3QSwKKyAgICAweDdEREUsIDB4N0RERSwgMHgxMDZGLCAweDdERTAsIDB4N0RFMCwgMHgxQzI5LCAweDdERTEsIDB4N0RFMSwgMHgxMzExLAorICAgIDB4N0RFMywgMHg3REUzLCAweDE3NUIsIDB4N0RFOCwgMHg3REU4LCAweDFENjMsIDB4N0RFOSwgMHg3REU5LCAweDE3RTUsCisgICAgMHg3REVDLCAweDdERUMsIDB4MTI4NywgMHg3REVGLCAweDdERUYsIDB4MTg5OSwgMHg3REY0LCAweDdERjQsIDB4MTE3NywKKyAgICAweDdERkIsIDB4N0RGQiwgMHgxQ0I4LCAweDdFMDksIDB4N0UwOSwgMHgxQjU5LCAweDdFMEEsIDB4N0UwQSwgMHgxNkRGLAorICAgIDB4N0UxNSwgMHg3RTE1LCAweDE3QzcsIDB4N0UxQiwgMHg3RTFCLCAweDEzMjIsIDB4N0UxRCwgMHg3RTFELCAweDFCNUEsCisgICAgMHg3RTFFLCAweDdFMUUsIDB4MUU5NCwgMHg3RTFGLCAweDdFMUYsIDB4MTgxQiwgMHg3RTIxLCAweDdFMjEsIDB4MTlCNSwKKyAgICAweDdFMjMsIDB4N0UyMywgMHgxRTQ0LCAweDdFMkIsIDB4N0UyQiwgMHgxM0VGLCAweDdFMkUsIDB4N0UyRSwgMHgxQzdFLAorICAgIDB4N0UyRiwgMHg3RTJGLCAweDE3NUMsIDB4N0UzMSwgMHg3RTMxLCAweDFBQzAsIDB4N0UzNywgMHg3RTM3LCAweDExREMsCisgICAgMHg3RTNELCAweDdFM0QsIDB4MUM1OSwgMHg3RTNFLCAweDdFM0UsIDB4MTlFNywgMHg3RTQxLCAweDdFNDEsIDB4MTM4OSwKKyAgICAweDdFNDMsIDB4N0U0MywgMHgxNDNCLCAweDdFNDYsIDB4N0U0NiwgMHgxMkRBLCAweDdFNDcsIDB4N0U0NywgMHgxODBFLAorICAgIDB4N0U1MiwgMHg3RTUyLCAweDFCMUEsIDB4N0U1NCwgMHg3RTU0LCAweDFCNDIsIDB4N0U1NSwgMHg3RTU1LCAweDE1M0MsCisgICAgMHg3RTVFLCAweDdFNUUsIDB4MTgwRiwgMHg3RTYxLCAweDdFNjEsIDB4MTVFMywgMHg3RTY5LCAweDdFNjksIDB4MTYzOSwKKyAgICAweDdFNkEsIDB4N0U2QSwgMHgxRjA2LCAweDdFNkIsIDB4N0U2QiwgMHgwRThBLCAweDdFNkQsIDB4N0U2RCwgMHgwRTNBLAorICAgIDB4N0U3MCwgMHg3RTcwLCAweDFBOUUsIDB4N0U3OSwgMHg3RTc5LCAweDE3NDAsIDB4N0U3QywgMHg3RTdDLCAweDBFOEIsCisgICAgMHg3RTgyLCAweDdFODIsIDB4MUI5RCwgMHg3RThDLCAweDdFOEMsIDB4MTVBNiwgMHg3RThGLCAweDdFOEYsIDB4MUExMCwKKyAgICAweDdFOTMsIDB4N0U5MywgMHgxNzg3LCAweDdFOTYsIDB4N0U5NiwgMHgxNTVBLCAweDdFOTgsIDB4N0U5OCwgMHgxQjlGLAorICAgIDB4N0U5QiwgMHg3RTlCLCAweDEwREQsIDB4N0U5QywgMHg3RTlDLCAweDExMzUsIDB4N0YzNiwgMHg3RjM2LCAweDE0MEMsCisgICAgMHg3RjM4LCAweDdGMzgsIDB4MUUwMSwgMHg3RjNBLCAweDdGM0EsIDB4MEU0NCwgMHg3RjRDLCAweDdGNEMsIDB4MTZFMywKKyAgICAweDdGNTAsIDB4N0Y1MCwgMHgwRUY1LCAweDdGNTQsIDB4N0Y1NCwgMHgxMjVFLCAweDdGNTUsIDB4N0Y1NSwgMHgxRERCLAorICAgIDB4N0Y2QSwgMHg3RjZBLCAweDFBQ0IsIDB4N0Y2QiwgMHg3RjZCLCAweDBGMEUsIDB4N0Y2RSwgMHg3RjZFLCAweDFDQjksCisgICAgMHg3RjcwLCAweDdGNzAsIDB4MTM4RiwgMHg3RjcyLCAweDdGNzIsIDB4MTUxMSwgMHg3Rjc1LCAweDdGNzUsIDB4MTI2RCwKKyAgICAweDdGNzcsIDB4N0Y3NywgMHgxRDNFLCAweDdGNzksIDB4N0Y3OSwgMHgxMjE1LCAweDdGODUsIDB4N0Y4NSwgMHgxMTE5LAorICAgIDB4N0Y4OCwgMHg3Rjg4LCAweDEwMEUsIDB4N0Y4QSwgMHg3RjhBLCAweDE3MDgsIDB4N0Y4QywgMHg3RjhDLCAweDBEREYsCisgICAgMHg3RjhFLCAweDdGOEUsIDB4MTMwMCwgMHg3Rjk0LCAweDdGOTQsIDB4MEVBNiwgMHg3RjlBLCAweDdGOUEsIDB4MTE5MSwKKyAgICAweDdGOUUsIDB4N0Y5RSwgMHgxNUU0LCAweDdGQTQsIDB4N0ZBNCwgMHgwRjczLCAweDdGQTgsIDB4N0ZBOCwgMHgxNTNELAorICAgIDB4N0ZBOSwgMHg3RkE5LCAweDE5MDUsIDB4N0ZCMiwgMHg3RkIyLCAweDFGNzYsIDB4N0ZCOCwgMHg3RkI4LCAweDEyMTYsCisgICAgMHg3RkI5LCAweDdGQjksIDB4MERGRiwgMHg3RkJELCAweDdGQkQsIDB4MTg0QSwgMHg3RkMxLCAweDdGQzEsIDB4MTdDRiwKKyAgICAweDdGQzUsIDB4N0ZDNSwgMHgxNjRGLCAweDdGQ0EsIDB4N0ZDQSwgMHgxOTI3LCAweDdGQ0MsIDB4N0ZDQywgMHgxOTI4LAorICAgIDB4N0ZDRSwgMHg3RkNFLCAweDExOTIsIDB4N0ZEMiwgMHg3RkQyLCAweDE2MkYsIDB4N0ZENCwgMHg3RkQ0LCAweDE0RUIsCisgICAgMHg3RkQ1LCAweDdGRDUsIDB4MUY2MSwgMHg3RkRGLCAweDdGREYsIDB4MTlFOCwgMHg3RkUwLCAweDdGRTAsIDB4MUM5QSwKKyAgICAweDdGRTEsIDB4N0ZFMSwgMHgxNDU5LCAweDdGRTksIDB4N0ZFOSwgMHgxRDY0LCAweDdGRUIsIDB4N0ZFQiwgMHgxN0U2LAorICAgIDB4N0ZGMCwgMHg3RkYwLCAweDFEREMsIDB4N0ZGOSwgMHg3RkY5LCAweDBGMkIsIDB4N0ZGQywgMHg3RkZDLCAweDE5MjksCisgICAgMHg4MDAwLCAweDgwMDAsIDB4MTgxMCwgMHg4MDAxLCAweDgwMDEsIDB4MTFBNywgMHg4MDAzLCAweDgwMDMsIDB4MEVBNywKKyAgICAweDgwMDUsIDB4ODAwNSwgMHgxOTY1LCAweDgwMDYsIDB4ODAwNiwgMHgxMDBGLCAweDgwMDksIDB4ODAwOSwgMHgwRjU5LAorICAgIDB4ODAwQywgMHg4MDBDLCAweDE5MUIsIDB4ODAxMCwgMHg4MDEwLCAweDEwM0UsIDB4ODAxNSwgMHg4MDE1LCAweDBFNkQsCisgICAgMHg4MDE3LCAweDgwMTcsIDB4MTJBRSwgMHg4MDE4LCAweDgwMTgsIDB4MTg2MywgMHg4MDJELCAweDgwMkQsIDB4MTAxMCwKKyAgICAweDgwMzMsIDB4ODAzMywgMHgxOTFDLCAweDgwMzYsIDB4ODAzNiwgMHgxNkVFLCAweDgwM0QsIDB4ODAzRCwgMHgxQ0ZFLAorICAgIDB4ODAzRiwgMHg4MDNGLCAweDBFNkUsIDB4ODA0MywgMHg4MDQzLCAweDEwODMsIDB4ODA0NiwgMHg4MDQ2LCAweDExOTMsCisgICAgMHg4MDRBLCAweDgwNEEsIDB4MTFDRiwgMHg4MDU2LCAweDgwNTYsIDB4MTU2RiwgMHg4MDU4LCAweDgwNTgsIDB4MTQ3NywKKyAgICAweDgwNUEsIDB4ODA1QSwgMHgxQzlCLCAweDgwNUUsIDB4ODA1RSwgMHgxMkVDLCAweDgwNkYsIDB4ODA2RiwgMHgxMTc4LAorICAgIDB4ODA3MCwgMHg4MDcwLCAweDFDNUEsIDB4ODA3MiwgMHg4MDcyLCAweDE1NzAsIDB4ODA3MywgMHg4MDczLCAweDE4MkYsCisgICAgMHg4MDc3LCAweDgwNzcsIDB4MUI0MywgMHg4MDdELCAweDgwN0QsIDB4MUMyMCwgMHg4MDdFLCAweDgwN0UsIDB4MTFCRSwKKyAgICAweDgwN0YsIDB4ODA3RiwgMHgxOEUwLCAweDgwODQsIDB4ODA4NCwgMHgxOTFELCAweDgwODUsIDB4ODA4NSwgMHgxNjA2LAorICAgIDB4ODA4NiwgMHg4MDg2LCAweDE0QTUsIDB4ODA4NywgMHg4MDg3LCAweDFBOUYsIDB4ODA4OSwgMHg4MDg5LCAweDE4RDUsCisgICAgMHg4MDhCLCAweDgwOEIsIDB4MTFGRCwgMHg4MDhDLCAweDgwOEMsIDB4MTAxMSwgMHg4MDk2LCAweDgwOTYsIDB4MUMzRiwKKyAgICAweDgwOUIsIDB4ODA5QiwgMHgxRTAyLCAweDgwOUQsIDB4ODA5RCwgMHgwREE3LCAweDgwQTEsIDB4ODBBMSwgMHgwRUE4LAorICAgIDB4ODBBMiwgMHg4MEEyLCAweDFCMzUsIDB4ODBBNSwgMHg4MEE1LCAweDE0NUEsIDB4ODBBOSwgMHg4MEE5LCAweDBFM0IsCisgICAgMHg4MEFBLCAweDgwQUEsIDB4MTM1RSwgMHg4MEFGLCAweDgwQUYsIDB4MEZERCwgMHg4MEIxLCAweDgwQjEsIDB4MEYxQSwKKyAgICAweDgwQjIsIDB4ODBCMiwgMHgxOEQ2LCAweDgwQjQsIDB4ODBCNCwgMHgxRjFCLCAweDgwQkEsIDB4ODBCQSwgMHgxRDc0LAorICAgIDB4ODBDMywgMHg4MEMzLCAweDE4OUEsIDB4ODBDNCwgMHg4MEM0LCAweDFBRDEsIDB4ODBDQywgMHg4MENDLCAweDEzNzMsCisgICAgMHg4MENFLCAweDgwQ0UsIDB4MUQxMCwgMHg4MERBLCAweDgwREEsIDB4MTM3NCwgMHg4MERCLCAweDgwREIsIDB4MERDRCwKKyAgICAweDgwREUsIDB4ODBERSwgMHgxRDg4LCAweDgwRTEsIDB4ODBFMSwgMHgxRTk1LCAweDgwRTQsIDB4ODBFNCwgMHgxOERDLAorICAgIDB4ODBFNSwgMHg4MEU1LCAweDE1MTIsIDB4ODBGMSwgMHg4MEYxLCAweDBGMEEsIDB4ODBGNCwgMHg4MEY0LCAweDEwRjksCisgICAgMHg4MEY4LCAweDgwRjgsIDB4MUY1MSwgMHg4MEZELCAweDgwRkQsIDB4MTA1OSwgMHg4MTAyLCAweDgxMDIsIDB4MUIzNiwKKyAgICAweDgxMDUsIDB4ODEwNSwgMHgxRTU2LCAweDgxMDYsIDB4ODEwNiwgMHgxQzlDLCAweDgxMDcsIDB4ODEwNywgMHgxRTU3LAorICAgIDB4ODEwOCwgMHg4MTA4LCAweDEyNzIsIDB4ODEwQSwgMHg4MTBBLCAweDFCRTgsIDB4ODExOCwgMHg4MTE4LCAweDE3RTcsCisgICAgMHg4MTFBLCAweDgxMUEsIDB4MEQ5MCwgMHg4MTFCLCAweDgxMUIsIDB4MEU2RiwgMHg4MTIzLCAweDgxMjMsIDB4MTYxOCwKKyAgICAweDgxMjksIDB4ODEyOSwgMHgxNUU1LCAweDgxMkIsIDB4ODEyQiwgMHgxQ0ZCLCAweDgxMkYsIDB4ODEyRiwgMHgxRDg5LAorICAgIDB4ODEzOSwgMHg4MTM5LCAweDFCQzYsIDB4ODEzRSwgMHg4MTNFLCAweDE0NUIsIDB4ODE0QiwgMHg4MTRCLCAweDE2RTAsCisgICAgMHg4MTRFLCAweDgxNEUsIDB4MTY3NCwgMHg4MTUwLCAweDgxNTEsIDB4MTQwRCwgMHg4MTU0LCAweDgxNTQsIDB4MERFMCwKKyAgICAweDgxNTUsIDB4ODE1NSwgMHgxN0U4LCAweDgxNjUsIDB4ODE2NSwgMHgxNTcxLCAweDgxNjYsIDB4ODE2NiwgMHgxMDUzLAorICAgIDB4ODE2QiwgMHg4MTZCLCAweDFBQzEsIDB4ODE3MCwgMHg4MTcwLCAweDE4MTEsIDB4ODE3MSwgMHg4MTcxLCAweDBFMTgsCisgICAgMHg4MTc4LCAweDgxNzgsIDB4MTk5RCwgMHg4MTc5LCAweDgxNzksIDB4MTNEQSwgMHg4MTdBLCAweDgxN0EsIDB4MTUzRSwKKyAgICAweDgxN0YsIDB4ODE3RiwgMHgxRDI1LCAweDgxODAsIDB4ODE4MCwgMHgxMzVGLCAweDgxODgsIDB4ODE4OCwgMHgwRTMyLAorICAgIDB4ODE4QSwgMHg4MThBLCAweDEzMjMsIDB4ODE4RiwgMHg4MThGLCAweDBFQTksIDB4ODE5QSwgMHg4MTlBLCAweDE0MEYsCisgICAgMHg4MTlDLCAweDgxOUMsIDB4MTIzQiwgMHg4MTlELCAweDgxOUQsIDB4MTYyQiwgMHg4MUEwLCAweDgxQTAsIDB4MEYyQywKKyAgICAweDgxQTMsIDB4ODFBMywgMHgxQjcxLCAweDgxQTgsIDB4ODFBOCwgMHgxRDVDLCAweDgxQjMsIDB4ODFCMywgMHgxNTNGLAorICAgIDB4ODFCNSwgMHg4MUI1LCAweDFDOTEsIDB4ODFCQSwgMHg4MUJBLCAweDE4RjgsIDB4ODFCRCwgMHg4MUJELCAweDEwODQsCisgICAgMHg4MUJFLCAweDgxQkUsIDB4MUYwNywgMHg4MUJGLCAweDgxQkYsIDB4MTA1MCwgMHg4MUMwLCAweDgxQzAsIDB4MTEwNywKKyAgICAweDgxQzIsIDB4ODFDMiwgMHgxNDVDLCAweDgxQzYsIDB4ODFDNiwgMHgxNzFDLCAweDgxQ0QsIDB4ODFDRCwgMHgxQTczLAorICAgIDB4ODFEOCwgMHg4MUQ4LCAweDExM0EsIDB4ODFERiwgMHg4MURGLCAweDE5OUUsIDB4ODFFMywgMHg4MUUzLCAweDE2NzUsCisgICAgMHg4MUU1LCAweDgxRTUsIDB4MTdENywgMHg4MUU3LCAweDgxRTcsIDB4MTk5RiwgMHg4MUU4LCAweDgxRTgsIDB4MTIyQSwKKyAgICAweDgxRUEsIDB4ODFFQSwgMHgxOTY2LCAweDgxRUQsIDB4ODFFRCwgMHgxQzlELCAweDgxRjMsIDB4ODFGMywgMHgxQjM3LAorICAgIDB4ODFGNCwgMHg4MUY0LCAweDFDQkEsIDB4ODFGQSwgMHg4MUZBLCAweDEwQTUsIDB4ODFGQiwgMHg4MUZCLCAweDFCNUIsCisgICAgMHg4MUZDLCAweDgxRkMsIDB4MEY1QSwgMHg4MUZFLCAweDgxRkUsIDB4MThDNSwgMHg4MjA1LCAweDgyMDUsIDB4MEY1QiwKKyAgICAweDgyMDcsIDB4ODIwNywgMHgxNzM1LCAweDgyMDgsIDB4ODIwOCwgMHgxRjYyLCAweDgyMEEsIDB4ODIwQSwgMHgwRjVDLAorICAgIDB4ODIwQywgMHg4MjBDLCAweDE1NTAsIDB4ODIwRCwgMHg4MjBELCAweDE0QTYsIDB4ODIxMiwgMHg4MjEyLCAweDE1MTMsCisgICAgMHg4MjFCLCAweDgyMUIsIDB4MUJGNiwgMHg4MjFDLCAweDgyMUMsIDB4MTYxOSwgMHg4MjFFLCAweDgyMUUsIDB4MTJEQiwKKyAgICAweDgyMUYsIDB4ODIxRiwgMHgxQUU4LCAweDgyMjEsIDB4ODIyMSwgMHgwREUxLCAweDgyMkEsIDB4ODIyQSwgMHgxRTAzLAorICAgIDB4ODIyQiwgMHg4MjJCLCAweDEzNjAsIDB4ODIyQywgMHg4MjJDLCAweDEzM0QsIDB4ODIzNSwgMHg4MjM1LCAweDFDREUsCisgICAgMHg4MjM2LCAweDgyMzYsIDB4MTMyNCwgMHg4MjM3LCAweDgyMzcsIDB4MUU0NSwgMHg4MjM5LCAweDgyMzksIDB4MTU0MCwKKyAgICAweDgyNDAsIDB4ODI0MCwgMHgxNDEwLCAweDgyNDUsIDB4ODI0NSwgMHgxNzM2LCAweDgyNDcsIDB4ODI0NywgMHgxQTU4LAorICAgIDB4ODI1OSwgMHg4MjU5LCAweDFCQzcsIDB4ODI2NCwgMHg4MjY0LCAweDE5MDYsIDB4ODI2NiwgMHg4MjY2LCAweDFERUIsCisgICAgMHg4MjZFLCAweDgyNkUsIDB4MERBOCwgMHg4MjZGLCAweDgyNkYsIDB4MTE1NCwgMHg4MjcxLCAweDgyNzEsIDB4MERBOSwKKyAgICAweDgyNzIsIDB4ODI3MiwgMHgxNEY4LCAweDgyNzYsIDB4ODI3NiwgMHgxNzZBLCAweDgyNzgsIDB4ODI3OCwgMHgxQzQwLAorICAgIDB4ODI3RSwgMHg4MjdFLCAweDE2RDgsIDB4ODI4QiwgMHg4MjhCLCAweDE4NEIsIDB4ODI4RCwgMHg4MjhELCAweDE5NzYsCisgICAgMHg4MjhFLCAweDgyOEUsIDB4MEY3RiwgMHg4MjkyLCAweDgyOTIsIDB4MTI1RiwgMHg4Mjk5LCAweDgyOTksIDB4MTQxMSwKKyAgICAweDgyOUEsIDB4ODI5QSwgMHgxMTA4LCAweDgyOUQsIDB4ODI5RCwgMHgxQjM4LCAweDgyOUYsIDB4ODI5RiwgMHgxNENDLAorICAgIDB4ODJBNSwgMHg4MkE1LCAweDBERjcsIDB4ODJBNiwgMHg4MkE2LCAweDFFOTYsIDB4ODJBOSwgMHg4MkE5LCAweDBGQ0UsCisgICAgMHg4MkFDLCAweDgyQUMsIDB4MTQzMCwgMHg4MkFELCAweDgyQUQsIDB4MUQzRiwgMHg4MkFFLCAweDgyQUUsIDB4MTc5NywKKyAgICAweDgyQUYsIDB4ODJBRiwgMHgxNjg5LCAweDgyQjEsIDB4ODJCMSwgMHgxRUJGLCAweDgyQjMsIDB4ODJCMywgMHgxMzYxLAorICAgIDB4ODJCNywgMHg4MkI3LCAweDFCMzksIDB4ODJCOCwgMHg4MkI4LCAweDE4NjQsIDB4ODJCOSwgMHg4MkI5LCAweDBGQzAsCisgICAgMHg4MkJCLCAweDgyQkIsIDB4MUM2QSwgMHg4MkJDLCAweDgyQkMsIDB4MTJBRiwgMHg4MkJELCAweDgyQkQsIDB4MTY5NywKKyAgICAweDgyQkYsIDB4ODJCRiwgMHgxOTUyLCAweDgyRDEsIDB4ODJEMSwgMHgxODgyLCAweDgyRDIsIDB4ODJEMiwgMHgxNzZCLAorICAgIDB4ODJENCwgMHg4MkQ0LCAweDFEMTEsIDB4ODJENSwgMHg4MkQ1LCAweDFDNDEsIDB4ODJENywgMHg4MkQ3LCAweDEyQ0EsCisgICAgMHg4MkRCLCAweDgyREIsIDB4MEQ3RiwgMHg4MkRFLCAweDgyREUsIDB4MUQ4QSwgMHg4MkRGLCAweDgyREYsIDB4MEY1RCwKKyAgICAweDgyRTEsIDB4ODJFMSwgMHgxOTFFLCAweDgyRTUsIDB4ODJFNSwgMHgxNkYyLCAweDgyRTYsIDB4ODJFNiwgMHgwRUFBLAorICAgIDB4ODJFNywgMHg4MkU3LCAweDE5RDAsIDB4ODJGMSwgMHg4MkYxLCAweDE3ODgsIDB4ODJGRCwgMHg4MkZELCAweDBFQUIsCisgICAgMHg4MkZFLCAweDgyRkUsIDB4MURCQywgMHg4MzAxLCAweDgzMDEsIDB4MUIwOSwgMHg4MzAyLCAweDgzMDIsIDB4MTJEQywKKyAgICAweDgzMDMsIDB4ODMwMywgMHgxMzk5LCAweDgzMDQsIDB4ODMwNCwgMHgwRDgwLCAweDgzMDUsIDB4ODMwNSwgMHgxMkIwLAorICAgIDB4ODMwOSwgMHg4MzA5LCAweDEyNTUsIDB4ODMxNywgMHg4MzE3LCAweDEyOTUsIDB4ODMyOCwgMHg4MzI4LCAweDE5NjcsCisgICAgMHg4MzJCLCAweDgzMkIsIDB4MTI2MCwgMHg4MzJGLCAweDgzMkYsIDB4MTNEQiwgMHg4MzMxLCAweDgzMzEsIDB4MTVFNiwKKyAgICAweDgzMzQsIDB4ODMzNCwgMHgxRjA4LCAweDgzMzUsIDB4ODMzNSwgMHgxOTM3LCAweDgzMzYsIDB4ODMzNiwgMHgxMDVGLAorICAgIDB4ODMzOCwgMHg4MzM4LCAweDE4MzAsIDB4ODMzOSwgMHg4MzM5LCAweDE3MzcsIDB4ODM0MCwgMHg4MzQwLCAweDE2MUEsCisgICAgMHg4MzQ3LCAweDgzNDcsIDB4MUUxQywgMHg4MzQ5LCAweDgzNDksIDB4MUM0MiwgMHg4MzRBLCAweDgzNEEsIDB4MUU2OCwKKyAgICAweDgzNEYsIDB4ODM0RiwgMHgxOTRCLCAweDgzNTEsIDB4ODM1MSwgMHgxOTFGLCAweDgzNTIsIDB4ODM1MiwgMHgxRUYzLAorICAgIDB4ODM3MywgMHg4MzczLCAweDExMDIsIDB4ODM3NywgMHg4Mzc3LCAweDFEQzgsIDB4ODM3QiwgMHg4MzdCLCAweDE5RTksCisgICAgMHg4Mzg5LCAweDgzODksIDB4MTIxNywgMHg4MzhBLCAweDgzOEEsIDB4MTlBMCwgMHg4MzhFLCAweDgzOEUsIDB4MTRBNywKKyAgICAweDgzOTYsIDB4ODM5NiwgMHgwRTcwLCAweDgzOTgsIDB4ODM5OCwgMHgxNjc2LCAweDgzOUUsIDB4ODM5RSwgMHgxN0U5LAorICAgIDB4ODNBMiwgMHg4M0EyLCAweDFFNTgsIDB4ODNBOSwgMHg4M0E5LCAweDE0MTIsIDB4ODNBQSwgMHg4M0FBLCAweDE2OTgsCisgICAgMHg4M0FCLCAweDgzQUIsIDB4MTIzQywgMHg4M0JELCAweDgzQkQsIDB4MTI2MSwgMHg4M0MxLCAweDgzQzEsIDB4MUMyMSwKKyAgICAweDgzQzUsIDB4ODNDNSwgMHgwRUY2LCAweDgzQzksIDB4ODNDOSwgMHgxMUIzLCAweDgzQ0EsIDB4ODNDQSwgMHgwRjZELAorICAgIDB4ODNDQywgMHg4M0NDLCAweDBGQUQsIDB4ODNEMywgMHg4M0QzLCAweDBFRTAsIDB4ODNENiwgMHg4M0Q2LCAweDFCQzgsCisgICAgMHg4M0RDLCAweDgzREMsIDB4MUJEMiwgMHg4M0U5LCAweDgzRTksIDB4MTNDRCwgMHg4M0VCLCAweDgzRUIsIDB4MEZDMSwKKyAgICAweDgzRUYsIDB4ODNFRiwgMHgxRUMwLCAweDgzRjAsIDB4ODNGMCwgMHgwRUFDLCAweDgzRjEsIDB4ODNGMSwgMHgxMjAzLAorICAgIDB4ODNGMiwgMHg4M0YyLCAweDE0NUQsIDB4ODNGNCwgMHg4M0Y0LCAweDE2QzMsIDB4ODNGOSwgMHg4M0Y5LCAweDE5RDEsCisgICAgMHg4M0ZELCAweDgzRkQsIDB4MTYwNywgMHg4NDAzLCAweDg0MDMsIDB4MUM5MiwgMHg4NDA0LCAweDg0MDQsIDB4MTBDOSwKKyAgICAweDg0MEEsIDB4ODQwQSwgMHgxMTQ3LCAweDg0MEMsIDB4ODQwQywgMHgxMjdDLCAweDg0MEQsIDB4ODQwRCwgMHgxRDZDLAorICAgIDB4ODQwRSwgMHg4NDBFLCAweDE4OUIsIDB4ODQyOSwgMHg4NDI5LCAweDFDNkIsIDB4ODQyQywgMHg4NDJDLCAweDEyNEIsCisgICAgMHg4NDMxLCAweDg0MzEsIDB4MUYzOSwgMHg4NDM4LCAweDg0MzgsIDB4MThDNiwgMHg4NDNELCAweDg0M0QsIDB4MTEyMiwKKyAgICAweDg0NDksIDB4ODQ0OSwgMHgxNzcxLCAweDg0NTcsIDB4ODQ1NywgMHgxOUQyLCAweDg0NUIsIDB4ODQ1QiwgMHgwREIyLAorICAgIDB4ODQ2MSwgMHg4NDYxLCAweDFEOEIsIDB4ODQ2MywgMHg4NDYzLCAweDEwRkEsIDB4ODQ2NiwgMHg4NDY2LCAweDE4OUMsCisgICAgMHg4NDZCLCAweDg0NkIsIDB4MUU5NywgMHg4NDZDLCAweDg0NkMsIDB4MTlBMSwgMHg4NDZGLCAweDg0NkYsIDB4MTZGMywKKyAgICAweDg0NzUsIDB4ODQ3NSwgMHgwRkE0LCAweDg0N0EsIDB4ODQ3QSwgMHgxQjEyLCAweDg0OTAsIDB4ODQ5MCwgMHgxNUU3LAorICAgIDB4ODQ5NCwgMHg4NDk0LCAweDE2NTAsIDB4ODQ5OSwgMHg4NDk5LCAweDEyQkYsIDB4ODQ5QywgMHg4NDlDLCAweDE0QzAsCisgICAgMHg4NEExLCAweDg0QTEsIDB4MTM2MiwgMHg4NEIyLCAweDg0QjIsIDB4MUQ4QywgMHg4NEI4LCAweDg0QjgsIDB4MUIxQiwKKyAgICAweDg0QkIsIDB4ODRCQiwgMHgxNkY0LCAweDg0QkMsIDB4ODRCQywgMHgxQkM5LCAweDg0QkYsIDB4ODRCRiwgMHgxRTk4LAorICAgIDB4ODRDMCwgMHg4NEMwLCAweDE1QUQsIDB4ODRDMiwgMHg4NEMyLCAweDEyOTYsIDB4ODRDNCwgMHg4NEM0LCAweDFDN0YsCisgICAgMHg4NEM2LCAweDg0QzYsIDB4MTUyNywgMHg4NEM5LCAweDg0QzksIDB4MTgzMSwgMHg4NENCLCAweDg0Q0IsIDB4MERGOCwKKyAgICAweDg0Q0QsIDB4ODRDRCwgMHgxNjUxLCAweDg0RDEsIDB4ODREMSwgMHgxNEE4LCAweDg0REEsIDB4ODREQSwgMHgxNUU4LAorICAgIDB4ODRFQywgMHg4NEVDLCAweDEzRjAsIDB4ODRFRSwgMHg4NEVFLCAweDExNzksIDB4ODRGNCwgMHg4NEY0LCAweDE2MUIsCisgICAgMHg4NEZDLCAweDg0RkMsIDB4MTFEMCwgMHg4NTExLCAweDg1MTEsIDB4MTI4QiwgMHg4NTEzLCAweDg1MTMsIDB4MTI0QywKKyAgICAweDg1MTQsIDB4ODUxNCwgMHgxM0RDLCAweDg1MTcsIDB4ODUxNywgMHgxOTY4LCAweDg1MTgsIDB4ODUxOCwgMHgxNENELAorICAgIDB4ODUxQSwgMHg4NTFBLCAweDE4NkEsIDB4ODUxRSwgMHg4NTFFLCAweDExREQsIDB4ODUyMSwgMHg4NTIxLCAweDFCRDMsCisgICAgMHg4NTIzLCAweDg1MjMsIDB4MTlBMiwgMHg4NTI1LCAweDg1MjUsIDB4MUM1QiwgMHg4NTJDLCAweDg1MkMsIDB4MTU5NywKKyAgICAweDg1MkQsIDB4ODUyRCwgMHgxOEVGLCAweDg1MkYsIDB4ODUyRiwgMHgxQjVDLCAweDg1M0QsIDB4ODUzRCwgMHgxRDc1LAorICAgIDB4ODUzRiwgMHg4NTNGLCAweDE4OUQsIDB4ODU0MSwgMHg4NTQxLCAweDEwODUsIDB4ODU0MywgMHg4NTQzLCAweDEzOEEsCisgICAgMHg4NTQ5LCAweDg1NDksIDB4MUM0MywgMHg4NTRFLCAweDg1NEUsIDB4MEYyRCwgMHg4NTUzLCAweDg1NTMsIDB4MTg2NSwKKyAgICAweDg1NTksIDB4ODU1OSwgMHgxRTc0LCAweDg1NjMsIDB4ODU2MywgMHgxNjFDLCAweDg1NjgsIDB4ODU2OCwgMHgwRjhELAorICAgIDB4ODU2OSwgMHg4NTY5LCAweDFEMDYsIDB4ODU2QSwgMHg4NTZBLCAweDEyREQsIDB4ODU2RCwgMHg4NTZELCAweDE1OTgsCisgICAgMHg4NTg0LCAweDg1ODQsIDB4MTMyNSwgMHg4NTg3LCAweDg1ODcsIDB4MTMwMSwgMHg4NThGLCAweDg1OEYsIDB4MTkwNywKKyAgICAweDg1OTEsIDB4ODU5MSwgMHgwREUyLCAweDg1OTQsIDB4ODU5NCwgMHgxOUEzLCAweDg1OUIsIDB4ODU5QiwgMHgxNTUxLAorICAgIDB4ODVBNiwgMHg4NUE2LCAweDFCRjcsIDB4ODVBOCwgMHg4NUE4LCAweDFGMzUsIDB4ODVBOSwgMHg4NUE5LCAweDE0QzcsCisgICAgMHg4NUFBLCAweDg1QUEsIDB4MTY3NywgMHg4NUFGLCAweDg1QUYsIDB4MTUxNCwgMHg4NUIwLCAweDg1QjAsIDB4MUYzMiwKKyAgICAweDg1QkEsIDB4ODVCQSwgMHgxQTc0LCAweDg1QzEsIDB4ODVDMSwgMHgwRUFELCAweDg1QzksIDB4ODVDOSwgMHgxOTY5LAorICAgIDB4ODVDRCwgMHg4NUNELCAweDExMzYsIDB4ODVDRSwgMHg4NUNFLCAweDE2NzgsIDB4ODVDRiwgMHg4NUNGLCAweDE5QTQsCisgICAgMHg4NUQ1LCAweDg1RDUsIDB4MTg0QywgMHg4NURDLCAweDg1REMsIDB4MTE2MywgMHg4NURELCAweDg1REQsIDB4MTc5OCwKKyAgICAweDg1RTQsIDB4ODVFNCwgMHgxMTEyLCAweDg1RTUsIDB4ODVFNSwgMHgxNkY1LCAweDg1RTksIDB4ODVFOSwgMHgxMzhCLAorICAgIDB4ODVFQSwgMHg4NUVBLCAweDE1RTksIDB4ODVGNywgMHg4NUY3LCAweDE5RDMsIDB4ODVGQSwgMHg4NUZBLCAweDEyMjIsCisgICAgMHg4NUZCLCAweDg1RkIsIDB4MUFBMCwgMHg4NUZGLCAweDg1RkYsIDB4MEVFOSwgMHg4NjAyLCAweDg2MDIsIDB4MTc5OSwKKyAgICAweDg2MDYsIDB4ODYwNiwgMHgxMUE4LCAweDg2MDcsIDB4ODYwNywgMHgxNTk5LCAweDg2MEEsIDB4ODYwQSwgMHgxN0M4LAorICAgIDB4ODYxNiwgMHg4NjE2LCAweDE3MjQsIDB4ODYxNywgMHg4NjE3LCAweDEzQTQsIDB4ODYxQSwgMHg4NjFBLCAweDE1NDEsCisgICAgMHg4NjJELCAweDg2MkQsIDB4MTEyQiwgMHg4NjNGLCAweDg2M0YsIDB4MTExQSwgMHg4NjRFLCAweDg2NEUsIDB4MUU5OSwKKyAgICAweDg2NTAsIDB4ODY1MCwgMHgxREQwLCAweDg2NTQsIDB4ODY1NCwgMHgwRTE5LCAweDg2NTUsIDB4ODY1NSwgMHgxQkRELAorICAgIDB4ODY1QiwgMHg4NjVCLCAweDFFMjksIDB4ODY1QywgMHg4NjVDLCAweDExQTksIDB4ODY1RSwgMHg4NjVFLCAweDE4NEQsCisgICAgMHg4NjVGLCAweDg2NUYsIDB4MUU5QSwgMHg4NjY3LCAweDg2NjcsIDB4MUY0OSwgMHg4Njc5LCAweDg2NzksIDB4MUVCNCwKKyAgICAweDg2OEEsIDB4ODY4QSwgMHgxMkVELCAweDg2OEMsIDB4ODY4QywgMHgxMzYzLCAweDg2OTMsIDB4ODY5MywgMHgxOTM4LAorICAgIDB4ODZBMywgMHg4NkEzLCAweDBFRDcsIDB4ODZBNCwgMHg4NkE0LCAweDFBQTEsIDB4ODZBOSwgMHg4NkE5LCAweDFDQkIsCisgICAgMHg4NkM3LCAweDg2QzcsIDB4MTRBOSwgMHg4NkNCLCAweDg2Q0IsIDB4MTA3MCwgMHg4NkQ0LCAweDg2RDQsIDB4MUYwOSwKKyAgICAweDg2RDksIDB4ODZEOSwgMHgxN0Q4LCAweDg2REIsIDB4ODZEQiwgMHgxQUU5LCAweDg2REYsIDB4ODZERiwgMHgwRjJFLAorICAgIDB4ODZFNCwgMHg4NkU0LCAweDFERjIsIDB4ODZFRCwgMHg4NkVELCAweDFCNzIsIDB4ODZGRSwgMHg4NkZFLCAweDE2OTksCisgICAgMHg4NzAwLCAweDg3MDAsIDB4MUM0RCwgMHg4NzAyLCAweDg3MDIsIDB4MTNGMSwgMHg4NzAzLCAweDg3MDMsIDB4MTY3OSwKKyAgICAweDg3MDgsIDB4ODcwOCwgMHgxN0JBLCAweDg3MTgsIDB4ODcxOCwgMHgxQjNBLCAweDg3MUEsIDB4ODcxQSwgMHgxNDVFLAorICAgIDB4ODcxQywgMHg4NzFDLCAweDEzMTQsIDB4ODc0RSwgMHg4NzRFLCAweDBEQjQsIDB4ODc1NSwgMHg4NzU1LCAweDE2NjIsCisgICAgMHg4NzU3LCAweDg3NTcsIDB4MUVGNCwgMHg4NzVGLCAweDg3NUYsIDB4MTg5RSwgMHg4NzY2LCAweDg3NjYsIDB4MURDOSwKKyAgICAweDg3NjgsIDB4ODc2OCwgMHgxNjJDLCAweDg3NzQsIDB4ODc3NCwgMHgxRTlCLCAweDg3NzYsIDB4ODc3NiwgMHgxQTJGLAorICAgIDB4ODc3OCwgMHg4Nzc4LCAweDE3RDksIDB4ODc4MiwgMHg4NzgyLCAweDExNDIsIDB4ODc4RCwgMHg4NzhELCAweDE4RTQsCisgICAgMHg4NzlGLCAweDg3OUYsIDB4MTI5NywgMHg4N0EyLCAweDg3QTIsIDB4MUU2OSwgMHg4N0IzLCAweDg3QjMsIDB4MTA5OCwKKyAgICAweDg3QkEsIDB4ODdCQSwgMHgxMTFCLCAweDg3QzQsIDB4ODdDNCwgMHgxQ0QwLCAweDg3RTAsIDB4ODdFMCwgMHgxMzNFLAorICAgIDB4ODdFQywgMHg4N0VDLCAweDE1NDIsIDB4ODdFRiwgMHg4N0VGLCAweDE4MTIsIDB4ODdGMiwgMHg4N0YyLCAweDFDOEQsCisgICAgMHg4N0Y5LCAweDg3RjksIDB4MUUxMCwgMHg4N0ZCLCAweDg3RkIsIDB4MTkwOCwgMHg4N0ZFLCAweDg3RkUsIDB4MTU1QiwKKyAgICAweDg4MDUsIDB4ODgwNSwgMHgxNjNBLCAweDg4MUYsIDB4ODgxRiwgMHgxMTNCLCAweDg4MjIsIDB4ODgyMiwgMHgxQjA0LAorICAgIDB4ODgyMywgMHg4ODIzLCAweDExNjQsIDB4ODgzMSwgMHg4ODMxLCAweDBFQUUsIDB4ODgzNiwgMHg4ODM2LCAweDE5ODQsCisgICAgMHg4ODNCLCAweDg4M0IsIDB4MTI0RCwgMHg4ODQwLCAweDg4NDAsIDB4MUU0QywgMHg4ODQ2LCAweDg4NDYsIDB4MUIwQywKKyAgICAweDg4NEMsIDB4ODg0QywgMHgxRTFELCAweDg4NEQsIDB4ODg0RCwgMHgxNzVELCAweDg4NTIsIDB4ODg1MiwgMHgxRTQ2LAorICAgIDB4ODg1MywgMHg4ODUzLCAweDE2MjQsIDB4ODg1NywgMHg4ODU3LCAweDBEODEsIDB4ODg1OSwgMHg4ODU5LCAweDE2OUEsCisgICAgMHg4ODVCLCAweDg4NUIsIDB4MTg5RiwgMHg4ODVELCAweDg4NUQsIDB4MUM4RSwgMHg4ODYxLCAweDg4NjEsIDB4MUU2QSwKKyAgICAweDg4NjIsIDB4ODg2MiwgMHgwRjVFLCAweDg4NjMsIDB4ODg2MywgMHgxOTA5LCAweDg4NjgsIDB4ODg2OCwgMHgxREExLAorICAgIDB4ODg2QiwgMHg4ODZCLCAweDE0Q0UsIDB4ODg3MCwgMHg4ODcwLCAweDE1QkQsIDB4ODg3MiwgMHg4ODcyLCAweDEwMzcsCisgICAgMHg4ODc3LCAweDg4NzcsIDB4MUM4RiwgMHg4ODdFLCAweDg4N0YsIDB4MEZDRiwgMHg4ODgxLCAweDg4ODEsIDB4MTg4MywKKyAgICAweDg4ODIsIDB4ODg4MiwgMHgxMjlCLCAweDg4ODgsIDB4ODg4OCwgMHgwRDgyLCAweDg4OEIsIDB4ODg4QiwgMHgxMEE2LAorICAgIDB4ODg4RCwgMHg4ODhELCAweDFEOEQsIDB4ODg5MiwgMHg4ODkyLCAweDEwNzEsIDB4ODg5NiwgMHg4ODk2LCAweDE1RUEsCisgICAgMHg4ODk3LCAweDg4OTcsIDB4MUI1RCwgMHg4ODlFLCAweDg4OUUsIDB4MEVDNiwgMHg4OEFCLCAweDg4QUIsIDB4MURCMSwKKyAgICAweDg4QjQsIDB4ODhCNCwgMHgwRUFGLCAweDg4QzEsIDB4ODhDMSwgMHgxOUI2LCAweDg4QzIsIDB4ODhDMiwgMHgxMTgyLAorICAgIDB4ODhDRiwgMHg4OENGLCAweDEyMTgsIDB4ODhENCwgMHg4OEQ0LCAweDE3OUEsIDB4ODhENSwgMHg4OEQ1LCAweDE4QzcsCisgICAgMHg4OEQ5LCAweDg4RDksIDB4MEY3NCwgMHg4OERDLCAweDg4REMsIDB4MTNDRSwgMHg4OERELCAweDg4REQsIDB4MTlBNSwKKyAgICAweDg4REYsIDB4ODhERiwgMHgxNEFBLCAweDg4RTEsIDB4ODhFMSwgMHgxMjE5LCAweDg4RTgsIDB4ODhFOCwgMHgxNDVGLAorICAgIDB4ODhGMywgMHg4OEYzLCAweDE0RUMsIDB4ODhGNCwgMHg4OEY1LCAweDEzNzUsIDB4ODhGOCwgMHg4OEY4LCAweDExMUMsCisgICAgMHg4OEZELCAweDg4RkQsIDB4MUE3NSwgMHg4OTA3LCAweDg5MDcsIDB4MTNERCwgMHg4OTEwLCAweDg5MTAsIDB4MERCMywKKyAgICAweDg5MTIsIDB4ODkxMiwgMHgxRDhFLCAweDg5MTMsIDB4ODkxMywgMHgxM0NGLCAweDg5MTgsIDB4ODkxOCwgMHgxOEEwLAorICAgIDB4ODkxOSwgMHg4OTE5LCAweDEzNzcsIDB4ODkyNSwgMHg4OTI1LCAweDE4MUMsIDB4ODkyQSwgMHg4OTJBLCAweDFEMjYsCisgICAgMHg4OTM2LCAweDg5MzYsIDB4MTYzMCwgMHg4OTM4LCAweDg5MzgsIDB4MTFERSwgMHg4OTNCLCAweDg5M0IsIDB4MTU1MiwKKyAgICAweDg5NDEsIDB4ODk0MSwgMHgwREUzLCAweDg5NDQsIDB4ODk0NCwgMHgxNzA5LCAweDg5NUYsIDB4ODk1RiwgMHgwRkQxLAorICAgIDB4ODk2NCwgMHg4OTY0LCAweDExMzcsIDB4ODk2QSwgMHg4OTZBLCAweDEyNTYsIDB4ODk3MiwgMHg4OTcyLCAweDE2MzEsCisgICAgMHg4OTdGLCAweDg5N0YsIDB4MTUxNSwgMHg4OTgxLCAweDg5ODEsIDB4MTgxMywgMHg4OTgzLCAweDg5ODMsIDB4MTA4NiwKKyAgICAweDg5ODYsIDB4ODk4NiwgMHgxM0RFLCAweDg5ODcsIDB4ODk4NywgMHgxRDU3LCAweDg5OEIsIDB4ODk4QiwgMHgwRTNDLAorICAgIDB4ODk4RiwgMHg4OThGLCAweDBGQTUsIDB4ODk5MywgMHg4OTkzLCAweDEyN0UsIDB4ODk5NiwgMHg4OTk2LCAweDE2NTIsCisgICAgMHg4OUExLCAweDg5QTEsIDB4MEUzMywgMHg4OUE5LCAweDg5QTksIDB4MTBDQSwgMHg4OUFBLCAweDg5QUEsIDB4MUNDMywKKyAgICAweDg5QjIsIDB4ODlCMiwgMHgwRkMyLCAweDg5QkEsIDB4ODlCQSwgMHgwRDkxLCAweDg5QkQsIDB4ODlCRCwgMHgxMTM4LAorICAgIDB4ODlDMCwgMHg4OUMwLCAweDBFRjcsIDB4ODlEMiwgMHg4OUQyLCAweDBEOTIsIDB4ODlFMywgMHg4OUUzLCAweDFFMTEsCisgICAgMHg4OUY0LCAweDg5RjQsIDB4MTRFRCwgMHg4OUY4LCAweDg5RjgsIDB4MUM0RSwgMHg4QTAwLCAweDhBMDAsIDB4MTcyMSwKKyAgICAweDhBMDIsIDB4OEEwMiwgMHgxQTU5LCAweDhBMDMsIDB4OEEwMywgMHgxNDEzLCAweDhBMDgsIDB4OEEwOCwgMHgwRThDLAorICAgIDB4OEEwQSwgMHg4QTBBLCAweDE2N0EsIDB4OEEwQywgMHg4QTBDLCAweDFFQjUsIDB4OEEwRSwgMHg4QTBFLCAweDFEMUMsCisgICAgMHg4QTEzLCAweDhBMTMsIDB4MUYzMywgMHg4QTE2LCAweDhBMTYsIDB4MUY1QSwgMHg4QTE3LCAweDhBMTcsIDB4MUNFRSwKKyAgICAweDhBMTgsIDB4OEExOCwgMHgxMDEyLCAweDhBMUIsIDB4OEExQiwgMHgxN0RBLCAweDhBMUQsIDB4OEExRCwgMHgxNjlCLAorICAgIDB4OEExRiwgMHg4QTFGLCAweDE1QjUsIDB4OEEyMywgMHg4QTIzLCAweDBFNDUsIDB4OEEyNSwgMHg4QTI1LCAweDEwNTYsCisgICAgMHg4QTJBLCAweDhBMkEsIDB4MTM2NCwgMHg4QTJELCAweDhBMkQsIDB4MTU1MywgMHg4QTMxLCAweDhBMzEsIDB4MUUyQSwKKyAgICAweDhBMzQsIDB4OEEzNCwgMHgxNTlBLCAweDhBMzYsIDB4OEEzNiwgMHgwRDgzLCAweDhBM0EsIDB4OEEzQSwgMHgxQjVFLAorICAgIDB4OEEzQiwgMHg4QTNCLCAweDFBRUEsIDB4OEE1MCwgMHg4QTUwLCAweDE0QUIsIDB4OEE1NCwgMHg4QTU0LCAweDFBQTIsCisgICAgMHg4QTU1LCAweDhBNTUsIDB4MUQ2RCwgMHg4QTVCLCAweDhBNUIsIDB4MTlENCwgMHg4QTVFLCAweDhBNUUsIDB4MTRBQywKKyAgICAweDhBNjAsIDB4OEE2MCwgMHgxNzg5LCAweDhBNjIsIDB4OEE2MiwgMHgxNjFELCAweDhBNjMsIDB4OEE2MywgMHgxNzlCLAorICAgIDB4OEE2NiwgMHg4QTY2LCAweDE2NTMsIDB4OEE2OSwgMHg4QTY5LCAweDE2NTQsIDB4OEE2RCwgMHg4QTZELCAweDBGOTMsCisgICAgMHg4QTZFLCAweDhBNkUsIDB4MUExMSwgMHg4QTcwLCAweDhBNzAsIDB4MUY3NywgMHg4QTcxLCAweDhBNzEsIDB4MUVDMSwKKyAgICAweDhBNzIsIDB4OEE3MiwgMHgxRTEyLCAweDhBNzMsIDB4OEE3MywgMHgxNEVFLCAweDhBNzUsIDB4OEE3NSwgMHgxNTQzLAorICAgIDB4OEE3OSwgMHg4QTc5LCAweDFDMTEsIDB4OEE4NSwgMHg4QTg1LCAweDFBRUIsIDB4OEE4NywgMHg4QTg3LCAweDBFRTEsCisgICAgMHg4QThDLCAweDhBOEMsIDB4MUIzQiwgMHg4QThELCAweDhBOEQsIDB4MTkzOSwgMHg4QTkzLCAweDhBOTMsIDB4MTUxNiwKKyAgICAweDhBOTUsIDB4OEE5NSwgMHgxQ0Y5LCAweDhBOTgsIDB4OEE5OCwgMHgxOEM4LCAweDhBOUUsIDB4OEE5RSwgMHgxNzE0LAorICAgIDB4OEFBMCwgMHg4QUEwLCAweDE1NzIsIDB4OEFBMSwgMHg4QUExLCAweDBFOEQsIDB4OEFBMywgMHg4QUEzLCAweDEyREUsCisgICAgMHg4QUE0LCAweDhBQTQsIDB4MTdCQiwgMHg4QUE1LCAweDhBQTUsIDB4MEVCMCwgMHg4QUE2LCAweDhBQTYsIDB4MTVCNiwKKyAgICAweDhBQTgsIDB4OEFBOCwgMHgxRjBBLCAweDhBQUEsIDB4OEFBQSwgMHgxNTU0LCAweDhBQjAsIDB4OEFCMCwgMHgxNUVCLAorICAgIDB4OEFCMiwgMHg4QUIyLCAweDBFRTIsIDB4OEFCOSwgMHg4QUI5LCAweDE0NjAsIDB4OEFCQywgMHg4QUJDLCAweDE5MEEsCisgICAgMHg4QUJFLCAweDhBQkUsIDB4MThFOSwgMHg4QUJGLCAweDhBQkYsIDB4MUFBMywgMHg4QUMyLCAweDhBQzIsIDB4MUMxMiwKKyAgICAweDhBQzQsIDB4OEFDNCwgMHgxNjFFLCAweDhBQzcsIDB4OEFDNywgMHgxMDg3LCAweDhBQ0IsIDB4OEFDQiwgMHgxQzIyLAorICAgIDB4OEFDRCwgMHg4QUNELCAweDE5QkQsIDB4OEFDRiwgMHg4QUNGLCAweDFDNkMsIDB4OEFEMiwgMHg4QUQyLCAweDExNTUsCisgICAgMHg4QUQ2LCAweDhBRDYsIDB4MTFCNywgMHg4QURCLCAweDhBREIsIDB4MThDOSwgMHg4QURDLCAweDhBREMsIDB4MUMxQSwKKyAgICAweDhBRTEsIDB4OEFFMSwgMHgxNjU1LCAweDhBRTYsIDB4OEFFNiwgMHgxQzJBLCAweDhBRTcsIDB4OEFFNywgMHgxRTEzLAorICAgIDB4OEFFQSwgMHg4QUVBLCAweDFBNUEsIDB4OEFFQiwgMHg4QUVCLCAweDBEQUEsIDB4OEFFRCwgMHg4QUVELCAweDE4Q0EsCisgICAgMHg4QUVFLCAweDhBRUUsIDB4MTk2QSwgMHg4QUYxLCAweDhBRjEsIDB4MUY0MiwgMHg4QUY2LCAweDhBRjYsIDB4MTY4QSwKKyAgICAweDhBRjcsIDB4OEFGNywgMHgxREE5LCAweDhBRjgsIDB4OEFGOCwgMHgxQTc2LCAweDhBRkEsIDB4OEFGQSwgMHgxNzIyLAorICAgIDB4OEFGRSwgMHg4QUZFLCAweDEwMkIsIDB4OEIwMCwgMHg4QjAwLCAweDEyQjEsIDB4OEIwMSwgMHg4QjAxLCAweDE2QkEsCisgICAgMHg4QjAyLCAweDhCMDIsIDB4MThBMSwgMHg4QjA0LCAweDhCMDQsIDB4MTExMywgMHg4QjBFLCAweDhCMEUsIDB4MTMwMiwKKyAgICAweDhCMTAsIDB4OEIxMCwgMHgxMzE1LCAweDhCMTQsIDB4OEIxNCwgMHgxREQxLCAweDhCMTYsIDB4OEIxNiwgMHgxNUE3LAorICAgIDB4OEIxNywgMHg4QjE3LCAweDEzNjUsIDB4OEIxOSwgMHg4QjE5LCAweDBFNDksIDB4OEIxQSwgMHg4QjFBLCAweDE5MkEsCisgICAgMHg4QjFCLCAweDhCMUIsIDB4MERFNCwgMHg4QjFELCAweDhCMUQsIDB4MTRBRCwgMHg4QjIwLCAweDhCMjAsIDB4MTgxNCwKKyAgICAweDhCMjgsIDB4OEIyOCwgMHgxMkIyLCAweDhCMkIsIDB4OEIyQiwgMHgxOUVBLCAweDhCMkMsIDB4OEIyQywgMHgxMUVELAorICAgIDB4OEIzMywgMHg4QjMzLCAweDBGNUYsIDB4OEIzOSwgMHg4QjM5LCAweDBGQzMsIDB4OEI0MSwgMHg4QjQxLCAweDFFQzIsCisgICAgMHg4QjQ5LCAweDhCNDksIDB4MUIxQywgMHg4QjRFLCAweDhCNEUsIDB4MUY0QiwgMHg4QjRGLCAweDhCNEYsIDB4MTAxMywKKyAgICAweDhCNTgsIDB4OEI1OCwgMHgxNjYzLCAweDhCNUEsIDB4OEI1QSwgMHgxMDg4LCAweDhCNUMsIDB4OEI1QywgMHgxM0QwLAorICAgIDB4OEI2NiwgMHg4QjY2LCAweDBFNzEsIDB4OEI2QywgMHg4QjZDLCAweDE0NjEsIDB4OEI2RiwgMHg4QjZGLCAweDE3NDEsCisgICAgMHg4QjcwLCAweDhCNzAsIDB4MTkwQiwgMHg4Qjc0LCAweDhCNzQsIDB4MEUzRCwgMHg4Qjc3LCAweDhCNzcsIDB4MUU5QywKKyAgICAweDhCN0QsIDB4OEI3RCwgMHgxNzlDLCAweDhCODAsIDB4OEI4MCwgMHgxMERFLCAweDhCOEEsIDB4OEI4QSwgMHgxM0E5LAorICAgIDB4OEI5MCwgMHg4QjkwLCAweDE1RUMsIDB4OEI5MiwgMHg4QjkyLCAweDFCQjIsIDB4OEI5MywgMHg4QjkzLCAweDE3MEEsCisgICAgMHg4Qjk2LCAweDhCOTYsIDB4MUJCMywgMHg4QjlBLCAweDhCOUEsIDB4MUJBMCwgMHg4QzM3LCAweDhDMzcsIDB4MEVCQywKKyAgICAweDhDM0YsIDB4OEMzRiwgMHgwRThFLCAweDhDNDEsIDB4OEM0MSwgMHgxRURFLCAweDhDNDYsIDB4OEM0NiwgMHgxMTAzLAorICAgIDB4OEM0OCwgMHg4QzQ4LCAweDEwMTQsIDB4OEM0QSwgMHg4QzRBLCAweDFEQUEsIDB4OEM0QywgMHg4QzRDLCAweDE3RUEsCisgICAgMHg4QzU1LCAweDhDNTUsIDB4MTY1NiwgMHg4QzVBLCAweDhDNUEsIDB4MTBFNywgMHg4QzYxLCAweDhDNjEsIDB4MTRFRiwKKyAgICAweDhDNkEsIDB4OEM2QSwgMHgxRTlELCAweDhDNkIsIDB4OEM2QiwgMHgxNzlELCAweDhDNzksIDB4OEM3OSwgMHgxREEyLAorICAgIDB4OEM3QSwgMHg4QzdBLCAweDE2NTcsIDB4OEM4MiwgMHg4QzgyLCAweDFDNDQsIDB4OEM4QSwgMHg4QzhBLCAweDEyNzMsCisgICAgMHg4QzhDLCAweDhDOEMsIDB4MTJCMywgMHg4QzlELCAweDhDOUQsIDB4MUQ1OCwgMHg4QzlFLCAweDhDOUUsIDB4MUE1QiwKKyAgICAweDhDQTAsIDB4OENBMCwgMHgxNDE0LCAweDhDQTEsIDB4OENBMSwgMHgxOUI3LCAweDhDQTIsIDB4OENBMiwgMHgwRUQ4LAorICAgIDB4OENBNywgMHg4Q0E3LCAweDE0NzIsIDB4OENBOCwgMHg4Q0E4LCAweDFFQzMsIDB4OENBOSwgMHg4Q0E5LCAweDFENDcsCisgICAgMHg4Q0FBLCAweDhDQUEsIDB4MUNGRiwgMHg4Q0FCLCAweDhDQUIsIDB4MEVGOCwgMHg4Q0FDLCAweDhDQUMsIDB4MUJEOSwKKyAgICAweDhDQUYsIDB4OENBRiwgMHgxOUQ1LCAweDhDQjAsIDB4OENCMCwgMHgxNTdCLCAweDhDQjMsIDB4OENCMywgMHgxOTIxLAorICAgIDB4OENCNCwgMHg4Q0I0LCAweDBGOTgsIDB4OENCNiwgMHg4Q0I2LCAweDFENjgsIDB4OENCNywgMHg4Q0I3LCAweDEyNkUsCisgICAgMHg4Q0I4LCAweDhDQjgsIDB4MTBBNywgMHg4Q0JCLCAweDhDQkIsIDB4MTQ2MiwgMHg4Q0JDLCAweDhDQkMsIDB4MUMxQiwKKyAgICAweDhDQkQsIDB4OENCRCwgMHgxOTIwLCAweDhDQkYsIDB4OENCRiwgMHgxMkRGLCAweDhDQzAsIDB4OENDMCwgMHgxRENBLAorICAgIDB4OENDMSwgMHg4Q0MxLCAweDE0MzEsIDB4OENDMiwgMHg4Q0MyLCAweDExQzMsIDB4OENDMywgMHg4Q0MzLCAweDE5NEMsCisgICAgMHg4Q0M0LCAweDhDQzQsIDB4MUYwQiwgMHg4Q0M3LCAweDhDQzcsIDB4MTk2QiwgMHg4Q0M4LCAweDhDQzgsIDB4MEQ4NCwKKyAgICAweDhDQ0EsIDB4OENDQSwgMHgxOUVCLCAweDhDRDEsIDB4OENEMSwgMHgxQjVGLCAweDhDRDMsIDB4OENEMywgMHgxNDczLAorICAgIDB4OENEQSwgMHg4Q0RBLCAweDExQzQsIDB4OENEQywgMHg4Q0RDLCAweDE0QUUsIDB4OENERSwgMHg4Q0RFLCAweDE0RjAsCisgICAgMHg4Q0UwLCAweDhDRTAsIDB4MTM3OCwgMHg4Q0UyLCAweDhDRTIsIDB4MUU0NywgMHg4Q0UzLCAweDhDRTMsIDB4MTI2RiwKKyAgICAweDhDRTQsIDB4OENFNCwgMHgxQkY4LCAweDhDRTYsIDB4OENFNiwgMHgxNDE1LCAweDhDRUEsIDB4OENFQSwgMHgxQjczLAorICAgIDB4OENFRCwgMHg4Q0VELCAweDEwQ0IsIDB4OENGNCwgMHg4Q0Y0LCAweDExQzUsIDB4OENGQiwgMHg4Q0ZCLCAweDE0MTYsCisgICAgMHg4Q0ZDLCAweDhDRkMsIDB4MEY2MCwgMHg4Q0ZELCAweDhDRkQsIDB4MTRGNCwgMHg4RDA0LCAweDhEMDQsIDB4MUIzQywKKyAgICAweDhEMDUsIDB4OEQwNSwgMHgxQzkzLCAweDhEMDcsIDB4OEQwNywgMHgxOERELCAweDhEMDgsIDB4OEQwOCwgMHgxQjFELAorICAgIDB4OEQwQSwgMHg4RDBBLCAweDFCQTEsIDB4OEQwRCwgMHg4RDBELCAweDE1NUMsIDB4OEQxMywgMHg4RDEzLCAweDE5QTYsCisgICAgMHg4RDE2LCAweDhEMTYsIDB4MTVBOCwgMHg4RDY0LCAweDhENjQsIDB4MTlFQywgMHg4RDY2LCAweDhENjYsIDB4MTRBRiwKKyAgICAweDhENkIsIDB4OEQ2QiwgMHgxRTM0LCAweDhENzAsIDB4OEQ3MCwgMHgxQUVDLCAweDhENzMsIDB4OEQ3MywgMHgwRkE2LAorICAgIDB4OEQ3NCwgMHg4RDc0LCAweDE0MTcsIDB4OEQ3NywgMHg4RDc3LCAweDEwMTUsIDB4OEQ4NSwgMHg4RDg1LCAweDFDNDUsCisgICAgMHg4RDhBLCAweDhEOEEsIDB4MTg4QSwgMHg4RDk5LCAweDhEOTksIDB4MUFBNCwgMHg4REEzLCAweDhEQTMsIDB4MUM5RSwKKyAgICAweDhEQTgsIDB4OERBOCwgMHgxQzZELCAweDhEQjMsIDB4OERCMywgMHgxQUFFLCAweDhEQkEsIDB4OERCQSwgMHgxNDE4LAorICAgIDB4OERCRSwgMHg4REJFLCAweDFCM0QsIDB4OERDNiwgMHg4REM2LCAweDFEMTIsIDB4OERDQiwgMHg4RENCLCAweDEzNDgsCisgICAgMHg4RENDLCAweDhEQ0MsIDB4MUI3NCwgMHg4RENGLCAweDhEQ0YsIDB4MEQ4NSwgMHg4RERCLCAweDhEREIsIDB4MUQ0MCwKKyAgICAweDhEREQsIDB4OERERCwgMHgwRTBDLCAweDhERTEsIDB4OERFMSwgMHgxOUVELCAweDhERTMsIDB4OERFMywgMHgxNTQ0LAorICAgIDB4OERFOCwgMHg4REU4LCAweDBFRTMsIDB4OERFRiwgMHg4REVGLCAweDExQUEsIDB4OERGMywgMHg4REYzLCAweDEwQ0MsCisgICAgMHg4RTBBLCAweDhFMEEsIDB4MTgzMiwgMHg4RTBGLCAweDhFMEYsIDB4MTA4RCwgMHg4RTEwLCAweDhFMTAsIDB4MUJGOSwKKyAgICAweDhFMUUsIDB4OEUxRSwgMHgwRTBELCAweDhFMkEsIDB4OEUyQSwgMHgxQUMyLCAweDhFMzAsIDB4OEUzMCwgMHgxOENCLAorICAgIDB4OEUzNSwgMHg4RTM1LCAweDFBQzMsIDB4OEU0MiwgMHg4RTQyLCAweDE4Q0MsIDB4OEU0NCwgMHg4RTQ0LCAweDFBNzcsCisgICAgMHg4RTQ3LCAweDhFNDcsIDB4MEUxQSwgMHg4RTQ4LCAweDhFNDgsIDB4MTBDRCwgMHg4RTQ5LCAweDhFNDksIDB4MUI4QywKKyAgICAweDhFNEEsIDB4OEU0QSwgMHgxRTc1LCAweDhFNTksIDB4OEU1OSwgMHgxQzgwLCAweDhFNUYsIDB4OEU1RiwgMHgxOUVFLAorICAgIDB4OEU2MCwgMHg4RTYwLCAweDFCRTksIDB4OEU3NCwgMHg4RTc0LCAweDFDODEsIDB4OEU3NiwgMHg4RTc2LCAweDBGOEUsCisgICAgMHg4RTgxLCAweDhFODEsIDB4MUFBNSwgMHg4RTg3LCAweDhFODcsIDB4MTlENiwgMHg4RThBLCAweDhFOEEsIDB4MUFFRCwKKyAgICAweDhFOEQsIDB4OEU4RCwgMHgxNkY2LCAweDhFQUEsIDB4OEVBQSwgMHgxMjIzLCAweDhFQUIsIDB4OEVBQiwgMHgxNjdCLAorICAgIDB4OEVBQywgMHg4RUFDLCAweDBGODAsIDB4OEVDMCwgMHg4RUMwLCAweDBGNjEsIDB4OEVDQSwgMHg4RUNBLCAweDFCOEQsCisgICAgMHg4RUNCLCAweDhFQ0IsIDB4MTZCQiwgMHg4RUNDLCAweDhFQ0MsIDB4MEY5NCwgMHg4RUNELCAweDhFQ0QsIDB4MEY3NSwKKyAgICAweDhFRDIsIDB4OEVEMiwgMHgxRTJFLCAweDhFREYsIDB4OEVERiwgMHgxNzVFLCAweDhFRUIsIDB4OEVFQiwgMHgxQjYwLAorICAgIDB4OEVGOCwgMHg4RUY4LCAweDFDODIsIDB4OEVGQiwgMHg4RUZCLCAweDBEODYsIDB4OEVGRSwgMHg4RUZFLCAweDE2NjQsCisgICAgMHg4RjAzLCAweDhGMDMsIDB4MEYyRiwgMHg4RjA1LCAweDhGMDUsIDB4MTFBQiwgMHg4RjA5LCAweDhGMDksIDB4MTlCOCwKKyAgICAweDhGMTIsIDB4OEYxMiwgMHgxQzFDLCAweDhGMTMsIDB4OEYxMywgMHgxMjRFLCAweDhGMTQsIDB4OEYxNCwgMHgxM0QxLAorICAgIDB4OEYxNSwgMHg4RjE1LCAweDBFNzIsIDB4OEYxQiwgMHg4RjFCLCAweDExNTYsIDB4OEYxQywgMHg4RjFDLCAweDFDQkMsCisgICAgMHg4RjFELCAweDhGMUQsIDB4MUY0MywgMHg4RjFFLCAweDhGMUUsIDB4MTI2MiwgMHg4RjFGLCAweDhGMUYsIDB4MUMwNiwKKyAgICAweDhGMjYsIDB4OEYyNiwgMHgxMTdBLCAweDhGMjcsIDB4OEYyNywgMHgxM0JGLCAweDhGMjksIDB4OEYyOSwgMHgxMzc5LAorICAgIDB4OEYyQSwgMHg4RjJBLCAweDExRjcsIDB4OEYyRiwgMHg4RjJGLCAweDFCN0IsIDB4OEYzMywgMHg4RjMzLCAweDFBRUUsCisgICAgMHg4RjM4LCAweDhGMzgsIDB4MTVFRCwgMHg4RjM5LCAweDhGMzksIDB4MTNERiwgMHg4RjNCLCAweDhGM0IsIDB4MTNFMCwKKyAgICAweDhGM0UsIDB4OEYzRSwgMHgxQTEyLCAweDhGM0YsIDB4OEYzRiwgMHgxNzM4LCAweDhGNDQsIDB4OEY0NCwgMHgxREUyLAorICAgIDB4OEY0NSwgMHg4RjQ1LCAweDE4ODQsIDB4OEY0OSwgMHg4RjQ5LCAweDFBMTMsIDB4OEY0RCwgMHg4RjRELCAweDFDMDcsCisgICAgMHg4RjRFLCAweDhGNEUsIDB4MEYzMCwgMHg4RjVELCAweDhGNUQsIDB4MTczOSwgMHg4RjVGLCAweDhGNUYsIDB4MEYxQiwKKyAgICAweDhGNjIsIDB4OEY2MiwgMHgxMTZGLCAweDhGOUIsIDB4OEY5QiwgMHgxNjdDLCAweDhGOUMsIDB4OEY5QywgMHgwRUIxLAorICAgIDB4OEZBMywgMHg4RkEzLCAweDExMkUsIDB4OEZBNiwgMHg4RkE2LCAweDFENDgsIDB4OEZBOCwgMHg4RkE4LCAweDEzQUEsCisgICAgMHg4RkFELCAweDhGQUQsIDB4MTRCMCwgMHg4RkFGLCAweDhGQUYsIDB4MTNBQiwgMHg4RkIwLCAweDhGQjAsIDB4MUI2MSwKKyAgICAweDhGQjEsIDB4OEZCMSwgMHgxODFELCAweDhGQjIsIDB4OEZCMiwgMHgxMDUxLCAweDhGQzIsIDB4OEZDMiwgMHgxODRFLAorICAgIDB4OEZDNSwgMHg4RkM1LCAweDE2N0QsIDB4OEZDRSwgMHg4RkNFLCAweDE3OEEsIDB4OEZEMSwgMHg4RkQxLCAweDBGQzQsCisgICAgMHg4RkQ0LCAweDhGRDQsIDB4MTMzRiwgMHg4RkU2LCAweDhGRTYsIDB4MEQ4NywgMHg4RkVBLCAweDhGRUEsIDB4MTlFRiwKKyAgICAweDhGRUIsIDB4OEZFQiwgMHgxMzI2LCAweDhGRUQsIDB4OEZFRCwgMHgxQjc1LCAweDhGRjAsIDB4OEZGMCwgMHgxNjI1LAorICAgIDB4OEZGMiwgMHg4RkYyLCAweDBFMkEsIDB4OEZGNywgMHg4RkY3LCAweDEzMDMsIDB4OEZGOSwgMHg4RkY5LCAweDE5RjAsCisgICAgMHg4RkZELCAweDhGRkQsIDB4MUM2RSwgMHg5MDAwLCAweDkwMDAsIDB4MUQyNywgMHg5MDAxLCAweDkwMDEsIDB4MTVCNywKKyAgICAweDkwMDIsIDB4OTAwMiwgMHgwRUZFLCAweDkwMDMsIDB4OTAwMywgMHgxMENFLCAweDkwMDUsIDB4OTAwNSwgMHgxRjJBLAorICAgIDB4OTAwNiwgMHg5MDA2LCAweDE3NDIsIDB4OTAwOCwgMHg5MDA4LCAweDFFNkIsIDB4OTAwQiwgMHg5MDBCLCAweDFEOEYsCisgICAgMHg5MDBELCAweDkwMEQsIDB4MTU5QiwgMHg5MDBGLCAweDkwMEYsIDB4MUQyRCwgMHg5MDEwLCAweDkwMTAsIDB4MUM4MywKKyAgICAweDkwMTEsIDB4OTAxMSwgMHgwRjYyLCAweDkwMTQsIDB4OTAxNCwgMHgxMENGLCAweDkwMTUsIDB4OTAxNSwgMHgwRTczLAorICAgIDB4OTAxNywgMHg5MDE3LCAweDExMDQsIDB4OTAxOSwgMHg5MDE5LCAweDE5RDcsIDB4OTAxQSwgMHg5MDFBLCAweDFEMjIsCisgICAgMHg5MDFELCAweDkwMUQsIDB4MTUxNywgMHg5MDFFLCAweDkwMUUsIDB4MTE5NCwgMHg5MDFGLCAweDkwMUYsIDB4MTVBOSwKKyAgICAweDkwMjAsIDB4OTAyMCwgMHgxQUE2LCAweDkwMjEsIDB4OTAyMSwgMHgxQjA1LCAweDkwMjIsIDB4OTAyMiwgMHgxM0YyLAorICAgIDB4OTAyMywgMHg5MDIzLCAweDExN0IsIDB4OTAyRSwgMHg5MDJFLCAweDFDMkIsIDB4OTAzMSwgMHg5MDMxLCAweDFBRUYsCisgICAgMHg5MDMyLCAweDkwMzIsIDB4MUI2MiwgMHg5MDM1LCAweDkwMzUsIDB4MEZBNywgMHg5MDM4LCAweDkwMzgsIDB4MTk0MiwKKyAgICAweDkwM0MsIDB4OTAzQywgMHgxREJGLCAweDkwM0UsIDB4OTAzRSwgMHgxOENFLCAweDkwNDEsIDB4OTA0MSwgMHgxMTA5LAorICAgIDB4OTA0MiwgMHg5MDQyLCAweDE1RUUsIDB4OTA0NywgMHg5MDQ3LCAweDE4NEYsIDB4OTA0QSwgMHg5MDRBLCAweDE4Q0QsCisgICAgMHg5MDRCLCAweDkwNEIsIDB4MTg2NiwgMHg5MDRELCAweDkwNEQsIDB4MUQ2NSwgMHg5MDRFLCAweDkwNEUsIDB4MEVFNCwKKyAgICAweDkwNTAsIDB4OTA1MCwgMHgxRENCLCAweDkwNTEsIDB4OTA1MSwgMHgxRUY1LCAweDkwNTMsIDB4OTA1MywgMHgxMEQwLAorICAgIDB4OTA1NCwgMHg5MDU0LCAweDEwNzgsIDB4OTA1NSwgMHg5MDU1LCAweDE4QTIsIDB4OTA1OSwgMHg5MDU5LCAweDE4MTUsCisgICAgMHg5MDVDLCAweDkwNUMsIDB4MTVBRSwgMHg5MDVELCAweDkwNUQsIDB4MTA4RSwgMHg5MDVFLCAweDkwNUUsIDB4MUMyQywKKyAgICAweDkwNjAsIDB4OTA2MCwgMHgxODg1LCAweDkwNjEsIDB4OTA2MSwgMHgxNTlDLCAweDkwNjMsIDB4OTA2MywgMHgwRTNFLAorICAgIDB4OTA2OSwgMHg5MDY5LCAweDE5RjEsIDB4OTA2RCwgMHg5MDZELCAweDFBQTcsIDB4OTA2RSwgMHg5MDZFLCAweDFCOEUsCisgICAgMHg5MDZGLCAweDkwNkYsIDB4MTEwQSwgMHg5MDcyLCAweDkwNzIsIDB4MUIzRSwgMHg5MDc1LCAweDkwNzUsIDB4MUIwNiwKKyAgICAweDkwNzcsIDB4OTA3NywgMHgxQkZBLCAweDkwNzgsIDB4OTA3OCwgMHgxNTQ1LCAweDkwN0EsIDB4OTA3QSwgMHgxOENGLAorICAgIDB4OTA3QywgMHg5MDdDLCAweDExRDEsIDB4OTA3RCwgMHg5MDdELCAweDBFMEUsIDB4OTA3RiwgMHg5MDdGLCAweDFEQjIsCisgICAgMHg5MDgwLCAweDkwODAsIDB4MTgxNiwgMHg5MDgxLCAweDkwODEsIDB4MTI3MCwgMHg5MDgyLCAweDkwODIsIDB4MUUxNCwKKyAgICAweDkwODMsIDB4OTA4MywgMHgxNUVGLCAweDkwODQsIDB4OTA4NCwgMHgxRUQ4LCAweDkwODcsIDB4OTA4NywgMHgxOTIyLAorICAgIDB4OTA4OCwgMHg5MDg4LCAweDEyM0QsIDB4OTA4QSwgMHg5MDhBLCAweDEzQUMsIDB4OTA4RiwgMHg5MDhGLCAweDExMUQsCisgICAgMHg5MDkxLCAweDkwOTEsIDB4MThGNSwgMHg5MDk1LCAweDkwOTUsIDB4MTdEMCwgMHg5MDk5LCAweDkwOTksIDB4MTI2MywKKyAgICAweDkwQTIsIDB4OTBBMiwgMHgxRTZDLCAweDkwQTMsIDB4OTBBMywgMHgxMDJBLCAweDkwQTYsIDB4OTBBNiwgMHgxMzY2LAorICAgIDB4OTBBOCwgMHg5MEE4LCAweDFDNTIsIDB4OTBBQSwgMHg5MEFBLCAweDE0QjEsIDB4OTBBRiwgMHg5MEFGLCAweDBEQzYsCisgICAgMHg5MEIwLCAweDkwQjAsIDB4MUQxMywgMHg5MEIxLCAweDkwQjEsIDB4MEY2MywgMHg5MEI1LCAweDkwQjUsIDB4MTU5RCwKKyAgICAweDkwQjgsIDB4OTBCOCwgMHgxOUQ4LCAweDkwQzEsIDB4OTBDMSwgMHgxODVDLCAweDkwQ0EsIDB4OTBDQSwgMHgwRjMxLAorICAgIDB4OTBERSwgMHg5MERFLCAweDExNDMsIDB4OTBFMSwgMHg5MEUxLCAweDBGNzYsIDB4OTBFOCwgMHg5MEU4LCAweDE0MTksCisgICAgMHg5MEVELCAweDkwRUQsIDB4MEVFQSwgMHg5MEY1LCAweDkwRjUsIDB4MTg1MCwgMHg5MEZELCAweDkwRkQsIDB4MTBEMSwKKyAgICAweDkxMDIsIDB4OTEwMiwgMHgxNkFBLCAweDkxMTIsIDB4OTExMiwgMHgxQzZGLCAweDkxMTUsIDB4OTExNSwgMHgxRTIyLAorICAgIDB4OTExOSwgMHg5MTE5LCAweDE0NjMsIDB4OTEyNywgMHg5MTI3LCAweDExMTQsIDB4OTEyRCwgMHg5MTJELCAweDFBNUMsCisgICAgMHg5MTMyLCAweDkxMzIsIDB4MTA3MiwgMHg5MTQ5LCAweDkxNDksIDB4MThEMCwgMHg5MTRBLCAweDkxNEEsIDB4MUE1RCwKKyAgICAweDkxNEIsIDB4OTE0QiwgMHgxQzcwLCAweDkxNEMsIDB4OTE0QywgMHgxOTc3LCAweDkxNEQsIDB4OTE0RCwgMHgxMzdBLAorICAgIDB4OTE0RSwgMHg5MTRFLCAweDFBRjAsIDB4OTE1MiwgMHg5MTUyLCAweDFBRjEsIDB4OTE2MiwgMHg5MTYyLCAweDFDNDYsCisgICAgMHg5MTY5LCAweDkxNjksIDB4MTI5OCwgMHg5MTZBLCAweDkxNkEsIDB4MTEyMywgMHg5MTZDLCAweDkxNkMsIDB4MTVGMCwKKyAgICAweDkxNzUsIDB4OTE3NSwgMHgxRjFDLCAweDkxNzcsIDB4OTE3NywgMHgxRUEzLCAweDkxNzgsIDB4OTE3OCwgMHgxNEMxLAorICAgIDB4OTE4NywgMHg5MTg3LCAweDE2MUYsIDB4OTE4OSwgMHg5MTg5LCAweDFDOUYsIDB4OTE4QiwgMHg5MThCLCAweDFDNDcsCisgICAgMHg5MThELCAweDkxOEQsIDB4MUE3OCwgMHg5MTkyLCAweDkxOTIsIDB4MTU3MywgMHg5MTlDLCAweDkxOUMsIDB4MUM3MSwKKyAgICAweDkxQUIsIDB4OTFBQiwgMHgxOTBDLCAweDkxQUMsIDB4OTFBQywgMHgxOUE3LCAweDkxQUUsIDB4OTFBRSwgMHgxQzQ4LAorICAgIDB4OTFBRiwgMHg5MUFGLCAweDFFNzYsIDB4OTFCMSwgMHg5MUIxLCAweDEzNDksIDB4OTFCNCwgMHg5MUI0LCAweDExOUQsCisgICAgMHg5MUI1LCAweDkxQjUsIDB4MEUwMCwgMHg5MUMwLCAweDkxQzAsIDB4MTcwQiwgMHg5MUM3LCAweDkxQzcsIDB4MUJENCwKKyAgICAweDkxQzksIDB4OTFDOSwgMHgxOEQxLCAweDkxQ0IsIDB4OTFDQiwgMHgxNTI4LCAweDkxQ0MsIDB4OTFDQywgMHgxMjFBLAorICAgIDB4OTFDRCwgMHg5MUNELCAweDFCMEQsIDB4OTFDRSwgMHg5MUNFLCAweDE2RUYsIDB4OTFDRiwgMHg5MUNGLCAweDExNTcsCisgICAgMHg5MUQwLCAweDkxRDAsIDB4MTIxQiwgMHg5MUQxLCAweDkxRDEsIDB4MTAyMywgMHg5MUQ3LCAweDkxRDcsIDB4MTVCRSwKKyAgICAweDkxRDgsIDB4OTFEOCwgMHgxQTVFLCAweDkxREMsIDB4OTFEQywgMHgxNDFBLCAweDkxREQsIDB4OTFERCwgMHgxQ0NFLAorICAgIDB4OTFFMywgMHg5MUUzLCAweDFBQTgsIDB4OTFFNywgMHg5MUU3LCAweDFCRkIsIDB4OTFFQSwgMHg5MUVBLCAweDE4NTEsCisgICAgMHg5MUY1LCAweDkxRjUsIDB4MUJENSwgMHg5MjBELCAweDkyMEQsIDB4MTEwQiwgMHg5MjEwLCAweDkyMTAsIDB4MEUyNiwKKyAgICAweDkyMTEsIDB4OTIxMSwgMHgxRDQ5LCAweDkyMTIsIDB4OTIxMiwgMHgxNEQxLCAweDkyMTcsIDB4OTIxNywgMHgxOERFLAorICAgIDB4OTIxRSwgMHg5MjFFLCAweDBGQUUsIDB4OTIzNCwgMHg5MjM0LCAweDExOTUsIDB4OTIzQSwgMHg5MjNBLCAweDE3QzIsCisgICAgMHg5MjNGLCAweDkyM0YsIDB4MUExNCwgMHg5MjQwLCAweDkyNDAsIDB4MERDRSwgMHg5MjQ1LCAweDkyNDUsIDB4MEUwRiwKKyAgICAweDkyNDksIDB4OTI0OSwgMHgxRTQ4LCAweDkyNTcsIDB4OTI1NywgMHgwRTRBLCAweDkyNUIsIDB4OTI1QiwgMHgxNzVGLAorICAgIDB4OTI1RSwgMHg5MjVFLCAweDE4OEIsIDB4OTI2MiwgMHg5MjYyLCAweDEzNEEsIDB4OTI2NCwgMHg5MjY0LCAweDBGNjQsCisgICAgMHg5MjY1LCAweDkyNjUsIDB4MTYyNiwgMHg5MjY2LCAweDkyNjYsIDB4MUE1RiwgMHg5MjgwLCAweDkyODAsIDB4MThFQSwKKyAgICAweDkyODMsIDB4OTI4MywgMHgxQzVDLCAweDkyODUsIDB4OTI4NSwgMHgxMEZCLCAweDkyOTEsIDB4OTI5MSwgMHgxNTQ2LAorICAgIDB4OTI5MywgMHg5MjkzLCAweDFBMTUsIDB4OTI5NiwgMHg5Mjk2LCAweDE1RjEsIDB4OTI5OCwgMHg5Mjk4LCAweDEyOTksCisgICAgMHg5MjlDLCAweDkyOUMsIDB4MURFQywgMHg5MkIzLCAweDkyQjMsIDB4MTc5RSwgMHg5MkI2LCAweDkyQjYsIDB4MEY2NSwKKyAgICAweDkyQjcsIDB4OTJCNywgMHgxNTlFLCAweDkyQjksIDB4OTJCOSwgMHgxNUYyLCAweDkyQ0MsIDB4OTJDQywgMHgxQTYwLAorICAgIDB4OTJDRiwgMHg5MkNGLCAweDFFNTksIDB4OTJEMiwgMHg5MkQyLCAweDEzRjMsIDB4OTJFNCwgMHg5MkU0LCAweDE1MTgsCisgICAgMHg5MkVBLCAweDkyRUEsIDB4MUQ5MCwgMHg5MkY4LCAweDkyRjgsIDB4MEUxMCwgMHg5MkZDLCAweDkyRkMsIDB4MERFNSwKKyAgICAweDkzMDQsIDB4OTMwNCwgMHgxMUI0LCAweDkzMTAsIDB4OTMxMCwgMHgxQzcyLCAweDkzMTgsIDB4OTMxOCwgMHgxQzczLAorICAgIDB4OTMxQSwgMHg5MzFBLCAweDE5QkUsIDB4OTMxRSwgMHg5MzFFLCAweDE2MjAsIDB4OTMxRiwgMHg5MzFGLCAweDEwODksCisgICAgMHg5MzIwLCAweDkzMjAsIDB4MUE2MSwgMHg5MzIxLCAweDkzMjEsIDB4MTAxNiwgMHg5MzIyLCAweDkzMjIsIDB4MUExNiwKKyAgICAweDkzMjQsIDB4OTMyNCwgMHgxMDE3LCAweDkzMjYsIDB4OTMyNiwgMHgwRkQyLCAweDkzMjgsIDB4OTMyOCwgMHgxMkNCLAorICAgIDB4OTMyQiwgMHg5MzJCLCAweDE1MjksIDB4OTMyRSwgMHg5MzJFLCAweDBFQjIsIDB4OTMyRiwgMHg5MzJGLCAweDFCOTMsCisgICAgMHg5MzQ4LCAweDkzNDgsIDB4MTc4QiwgMHg5MzRBLCAweDkzNEEsIDB4MTE3QywgMHg5MzRCLCAweDkzNEIsIDB4MEVFNSwKKyAgICAweDkzNEQsIDB4OTM0RCwgMHgxMEQyLCAweDkzNTQsIDB4OTM1NCwgMHgxNkFCLCAweDkzNUIsIDB4OTM1QiwgMHgxMDczLAorICAgIDB4OTM2RSwgMHg5MzZFLCAweDE4RDIsIDB4OTM3NSwgMHg5Mzc1LCAweDBFMUIsIDB4OTM3QywgMHg5MzdDLCAweDFDQ0YsCisgICAgMHg5MzdFLCAweDkzN0UsIDB4MUFDNCwgMHg5MzhDLCAweDkzOEMsIDB4MEU0QiwgMHg5Mzk0LCAweDkzOTQsIDB4MTgzMywKKyAgICAweDkzOTYsIDB4OTM5NiwgMHgxNUJDLCAweDkzOUEsIDB4OTM5QSwgMHgxQzc0LCAweDkzQTMsIDB4OTNBMywgMHgxRTZELAorICAgIDB4OTNBNywgMHg5M0E3LCAweDBERjksIDB4OTNBQywgMHg5M0FDLCAweDFFOUUsIDB4OTNBRCwgMHg5M0FELCAweDFCNjMsCisgICAgMHg5M0IwLCAweDkzQjAsIDB4MTk0MywgMHg5M0MzLCAweDkzQzMsIDB4MUFBRiwgMHg5M0QxLCAweDkzRDEsIDB4MTlGMiwKKyAgICAweDkzREUsIDB4OTNERSwgMHgxODM0LCAweDkzRTEsIDB4OTNFMSwgMHgwRTc0LCAweDkzRTQsIDB4OTNFNCwgMHgxMURGLAorICAgIDB4OTNGNiwgMHg5M0Y2LCAweDFCN0MsIDB4OTQwNCwgMHg5NDA0LCAweDFGMTAsIDB4OTQxOCwgMHg5NDE4LCAweDFBQzUsCisgICAgMHg5NDI1LCAweDk0MjUsIDB4MTU0NywgMHg5NDJCLCAweDk0MkIsIDB4MUExNywgMHg5NDM1LCAweDk0MzUsIDB4MUMwOCwKKyAgICAweDk0MzgsIDB4OTQzOCwgMHgxQ0VGLCAweDk0NDQsIDB4OTQ0NCwgMHgxQUYyLCAweDk0NTEsIDB4OTQ1MiwgMHgwREM3LAorICAgIDB4OTQ1QiwgMHg5NDVCLCAweDBGMEIsIDB4OTQ3RCwgMHg5NDdELCAweDFCQTIsIDB4OTQ3RiwgMHg5NDdGLCAweDFCOTQsCisgICAgMHg5NTc3LCAweDk1NzcsIDB4MTlBOCwgMHg5NTgwLCAweDk1ODAsIDB4MTJFRSwgMHg5NTgzLCAweDk1ODMsIDB4MTU1RCwKKyAgICAweDk1ODksIDB4OTU4OSwgMHgxRDc2LCAweDk1OEIsIDB4OTU4QiwgMHgwREZBLCAweDk1OEYsIDB4OTU4RiwgMHgxOERGLAorICAgIDB4OTU5MSwgMHg5NTkyLCAweDFEREQsIDB4OTU5MywgMHg5NTkzLCAweDBEQUIsIDB4OTU5NCwgMHg5NTk0LCAweDEzMTIsCisgICAgMHg5NTk4LCAweDk1OTgsIDB4MERDRiwgMHg5NUEzLCAweDk1QTMsIDB4MEQ5MywgMHg5NUE0LCAweDk1QTQsIDB4MURGMywKKyAgICAweDk1QTUsIDB4OTVBNSwgMHgxMzkwLCAweDk1QTgsIDB4OTVBOCwgMHgwRkE4LCAweDk1QUQsIDB4OTVBRCwgMHgxMTY1LAorICAgIDB4OTVCMSwgMHg5NUIxLCAweDE3NjQsIDB4OTVCQiwgMHg5NUJCLCAweDE3NkMsIDB4OTVCQywgMHg5NUJDLCAweDE2QkMsCisgICAgMHg5NUM3LCAweDk1QzcsIDB4MTZDNCwgMHg5NUNBLCAweDk1Q0EsIDB4MUVERiwgMHg5NUQ0LCAweDk1RDQsIDB4MURGNCwKKyAgICAweDk1RDUsIDB4OTVENSwgMHgwRjhGLCAweDk1RDYsIDB4OTVENiwgMHgxRDMxLCAweDk1REMsIDB4OTVEQywgMHgwRUY5LAorICAgIDB4OTVFMSwgMHg5NUUxLCAweDFCRkMsIDB4OTVFMiwgMHg5NUUyLCAweDEzQTUsIDB4OTYxQywgMHg5NjFDLCAweDE0MUIsCisgICAgMHg5NjIxLCAweDk2MjEsIDB4MUJGRCwgMHg5NjJBLCAweDk2MkEsIDB4MUQ0QSwgMHg5NjJFLCAweDk2MkUsIDB4MTdFQiwKKyAgICAweDk2MzIsIDB4OTYzMiwgMHgxMzY3LCAweDk2M0IsIDB4OTYzQiwgMHgxQUE5LCAweDk2M0YsIDB4OTYzRiwgMHgxNjlDLAorICAgIDB4OTY0MCwgMHg5NjQwLCAweDFDREYsIDB4OTY0MiwgMHg5NjQyLCAweDFEQjMsIDB4OTY0NCwgMHg5NjQ0LCAweDE0MUMsCisgICAgMHg5NjRCLCAweDk2NEIsIDB4MTFFMCwgMHg5NjRDLCAweDk2NEMsIDB4MTI3NCwgMHg5NjRELCAweDk2NEQsIDB4MERFNiwKKyAgICAweDk2NTAsIDB4OTY1MCwgMHgxRERGLCAweDk2NUIsIDB4OTY1QiwgMHgxRDc3LCAweDk2NUMsIDB4OTY1QywgMHgxREY1LAorICAgIDB4OTY1RCwgMHg5NjVELCAweDE1NUUsIDB4OTY1RSwgMHg5NjVFLCAweDE2M0IsIDB4OTY1RiwgMHg5NjVGLCAweDFCRUEsCisgICAgMHg5NjYyLCAweDk2NjIsIDB4MTg4NiwgMHg5NjYzLCAweDk2NjMsIDB4MUI2NCwgMHg5NjY0LCAweDk2NjQsIDB4MUE3OSwKKyAgICAweDk2NkEsIDB4OTY2QSwgMHgxMzdCLCAweDk2NzAsIDB4OTY3MCwgMHgxOEYwLCAweDk2NzMsIDB4OTY3MywgMHgxQjY1LAorICAgIDB4OTY3NSwgMHg5Njc1LCAweDEyMDQsIDB4OTY3NiwgMHg5Njc2LCAweDEwRDMsIDB4OTY3NywgMHg5Njc3LCAweDFERUQsCisgICAgMHg5Njc4LCAweDk2NzgsIDB4MTFGMSwgMHg5NjdELCAweDk2N0QsIDB4MTcwQywgMHg5Njg1LCAweDk2ODUsIDB4MTg1MiwKKyAgICAweDk2ODYsIDB4OTY4NiwgMHgxMUZCLCAweDk2OEEsIDB4OTY4QSwgMHgxMEE4LCAweDk2OEIsIDB4OTY4QiwgMHgxNUYzLAorICAgIDB4OTY4RCwgMHg5NjhELCAweDFFRjYsIDB4OTY4RSwgMHg5NjhFLCAweDBFOEYsIDB4OTY5NCwgMHg5Njk0LCAweDBFMzQsCisgICAgMHg5Njk1LCAweDk2OTUsIDB4MTg2NywgMHg5Njk4LCAweDk2OTgsIDB4MTZEOSwgMHg5Njk5LCAweDk2OTksIDB4MEZCNiwKKyAgICAweDk2OUIsIDB4OTY5QiwgMHgxQTdBLCAweDk2OUMsIDB4OTY5QywgMHgxOUE5LCAweDk2QTMsIDB4OTZBMywgMHgxMjI0LAorICAgIDB4OTZBNywgMHg5NkE4LCAweDE1RjQsIDB4OTZBQSwgMHg5NkFBLCAweDFFMzAsIDB4OTZCMSwgMHg5NkIxLCAweDE4RUIsCisgICAgMHg5NkI3LCAweDk2QjcsIDB4MTE5RSwgMHg5NkJCLCAweDk2QkIsIDB4MUJFQiwgMHg5NkMwLCAweDk2QzAsIDB4MTk3OCwKKyAgICAweDk2QzEsIDB4OTZDMSwgMHgxNkI1LCAweDk2QzQsIDB4OTZDNCwgMHgxODZFLCAweDk2QzUsIDB4OTZDNSwgMHgxNjlELAorICAgIDB4OTZDNiwgMHg5NkM2LCAweDFCN0QsIDB4OTZDNywgMHg5NkM3LCAweDBFQjMsIDB4OTZDOSwgMHg5NkM5LCAweDFDQkQsCisgICAgMHg5NkNCLCAweDk2Q0IsIDB4MUIwNywgMHg5NkNDLCAweDk2Q0MsIDB4MTk2QywgMHg5NkNELCAweDk2Q0QsIDB4MTdEMSwKKyAgICAweDk2Q0UsIDB4OTZDRSwgMHgxOUQ5LCAweDk2RDUsIDB4OTZENSwgMHgxQUFBLCAweDk2RDYsIDB4OTZENiwgMHgxNUY2LAorICAgIDB4OTZEOSwgMHg5NkQ5LCAweDE2OEQsIDB4OTZEQiwgMHg5NkRCLCAweDFDNzUsIDB4OTZEQywgMHg5NkRDLCAweDE5ODUsCisgICAgMHg5NkUyLCAweDk2RTIsIDB4MTIxQywgMHg5NkUzLCAweDk2RTMsIDB4MTAyRSwgMHg5NkU4LCAweDk2RTksIDB4MTg1MywKKyAgICAweDk2RUEsIDB4OTZFQSwgMHgxNTU1LCAweDk2RUYsIDB4OTZFRiwgMHgxMkVGLCAweDk2RjAsIDB4OTZGMCwgMHgxNDMyLAorICAgIDB4OTZGMiwgMHg5NkYyLCAweDE4NjgsIDB4OTZGNiwgMHg5NkY2LCAweDExOTYsIDB4OTZGNywgMHg5NkY3LCAweDExQzYsCisgICAgMHg5NkY5LCAweDk2RjksIDB4MTMyNywgMHg5NkZCLCAweDk2RkIsIDB4MUExOCwgMHg5NzAwLCAweDk3MDAsIDB4MTVGNywKKyAgICAweDk3MDYsIDB4OTcwNiwgMHgxQTYyLCAweDk3MDcsIDB4OTcwNywgMHgxQjY2LCAweDk3MTEsIDB4OTcxMSwgMHgxQTJBLAorICAgIDB4OTcxMywgMHg5NzEzLCAweDE3OUYsIDB4OTcxNiwgMHg5NzE2LCAweDEyMkIsIDB4OTcxOSwgMHg5NzE5LCAweDE3OEMsCisgICAgMHg5NzFDLCAweDk3MUMsIDB4MTRGMSwgMHg5NzFFLCAweDk3MUUsIDB4MURDQywgMHg5NzI3LCAweDk3MjcsIDB4MTJFMCwKKyAgICAweDk3MzAsIDB4OTczMCwgMHgxNEMyLCAweDk3MzIsIDB4OTczMiwgMHgxMUFDLCAweDk3MzksIDB4OTczOSwgMHgxM0E2LAorICAgIDB4OTczRCwgMHg5NzNELCAweDFBN0IsIDB4OTc0MiwgMHg5NzQyLCAweDExNzAsIDB4OTc0NCwgMHg5NzQ0LCAweDE2REEsCisgICAgMHg5NzQ4LCAweDk3NDgsIDB4MTE5NywgMHg5NzUxLCAweDk3NTEsIDB4MUMyMywgMHg5NzU2LCAweDk3NTYsIDB4MUE2MywKKyAgICAweDk3NUMsIDB4OTc1QywgMHgxQTY0LCAweDk3NUUsIDB4OTc1RSwgMHgxNDY0LCAweDk3NjEsIDB4OTc2MSwgMHgxMzA0LAorICAgIDB4OTc2MiwgMHg5NzYyLCAweDEyODgsIDB4OTc2OSwgMHg5NzY5LCAweDFFMzUsIDB4OTc2RCwgMHg5NzZELCAweDE5M0EsCisgICAgMHg5Nzc0LCAweDk3NzQsIDB4MUVDNCwgMHg5Nzc3LCAweDk3NzcsIDB4MTkzQiwgMHg5NzdBLCAweDk3N0EsIDB4MTI1NywKKyAgICAweDk3OEIsIDB4OTc4QiwgMHgxRTc3LCAweDk3OEQsIDB4OTc4RCwgMHgxNkI2LCAweDk3OEYsIDB4OTc4RiwgMHgwRUQ5LAorICAgIDB4OTdBMCwgMHg5N0EwLCAweDBGNkUsIDB4OTdBOCwgMHg5N0E4LCAweDBEQjUsIDB4OTdBQiwgMHg5N0FCLCAweDBGNkYsCisgICAgMHg5N0FELCAweDk3QUQsIDB4MUQ2NiwgMHg5N0M2LCAweDk3QzYsIDB4MUJGRSwgMHg5N0NCLCAweDk3Q0IsIDB4MThBMywKKyAgICAweDk3RDMsIDB4OTdEMywgMHgxREUwLCAweDk3REMsIDB4OTdEQywgMHgxMEQ0LCAweDk3RjMsIDB4OTdGMywgMHgxOEYxLAorICAgIDB4OTdGNiwgMHg5N0Y2LCAweDE1OUYsIDB4OTdGQiwgMHg5N0ZCLCAweDE4NjksIDB4OTdGRiwgMHg5N0ZGLCAweDFFMjMsCisgICAgMHg5ODAwLCAweDk4MDAsIDB4MUU5RiwgMHg5ODAxLCAweDk4MDEsIDB4MUU0RCwgMHg5ODAyLCAweDk4MDIsIDB4MUE2NSwKKyAgICAweDk4MDMsIDB4OTgwMywgMHgwRTc1LCAweDk4MDUsIDB4OTgwNSwgMHgxRTA0LCAweDk4MDYsIDB4OTgwNiwgMHgxNjIxLAorICAgIDB4OTgwOCwgMHg5ODA4LCAweDE1RjgsIDB4OTgwQSwgMHg5ODBBLCAweDE4NUQsIDB4OTgwQywgMHg5ODBDLCAweDE1QjgsCisgICAgMHg5ODEwLCAweDk4MTAsIDB4MTdBMCwgMHg5ODExLCAweDk4MTEsIDB4MTdFQywgMHg5ODEyLCAweDk4MTIsIDB4MTM0MCwKKyAgICAweDk4MTMsIDB4OTgxMywgMHgxMEU4LCAweDk4MTcsIDB4OTgxNywgMHgxRDQxLCAweDk4MTgsIDB4OTgxOCwgMHgxMTk4LAorICAgIDB4OTgyRCwgMHg5ODJELCAweDExMDUsIDB4OTgzMCwgMHg5ODMwLCAweDFFNUEsIDB4OTgzOCwgMHg5ODM4LCAweDBFNzYsCisgICAgMHg5ODM5LCAweDk4MzksIDB4MUQyOCwgMHg5ODNCLCAweDk4M0IsIDB4MTQ3NCwgMHg5ODQ2LCAweDk4NDYsIDB4MEVFNiwKKyAgICAweDk4NEMsIDB4OTg0QywgMHgxQTdDLCAweDk4NEQsIDB4OTg0RCwgMHgxNkUxLCAweDk4NEUsIDB4OTg0RSwgMHgxNkFDLAorICAgIDB4OTg1NCwgMHg5ODU0LCAweDE2QjcsIDB4OTg1OCwgMHg5ODU4LCAweDE4ODcsIDB4OTg1QSwgMHg5ODVBLCAweDFBMTksCisgICAgMHg5ODVFLCAweDk4NUUsIDB4MTFFRSwgMHg5ODY1LCAweDk4NjUsIDB4MUVBMCwgMHg5ODY3LCAweDk4NjcsIDB4MEVCNCwKKyAgICAweDk4NkIsIDB4OTg2QiwgMHgxQTFBLCAweDk4NkYsIDB4OTg2RiwgMHgxRTQ5LCAweDk4QTgsIDB4OThBOCwgMHgxREFCLAorICAgIDB4OThBRiwgMHg5OEFGLCAweDE0RDIsIDB4OThCMSwgMHg5OEIxLCAweDFEMTQsIDB4OThDNCwgMHg5OEM0LCAweDFEQTQsCisgICAgMHg5OEM3LCAweDk4QzcsIDB4MURBMywgMHg5OERCLCAweDk4REIsIDB4MTQ2NSwgMHg5OERDLCAweDk4REMsIDB4MTM4QywKKyAgICAweDk4REYsIDB4OThERiwgMHgxNjY1LCAweDk4RTEsIDB4OThFMSwgMHgxNUFGLCAweDk4RTIsIDB4OThFMiwgMHgxMDE4LAorICAgIDB4OThFRCwgMHg5OEVELCAweDFDQzIsIDB4OThFRSwgMHg5OEVFLCAweDE4RjIsIDB4OThFRiwgMHg5OEVGLCAweDEzNDEsCisgICAgMHg5OEY0LCAweDk4RjQsIDB4MTkyMywgMHg5OEZDLCAweDk4RkMsIDB4MTRCMiwgMHg5OEZELCAweDk4RkQsIDB4MUQ5MSwKKyAgICAweDk4RkUsIDB4OThGRSwgMHgxNjY2LCAweDk5MDMsIDB4OTkwMywgMHgwRjMyLCAweDk5MDksIDB4OTkwOSwgMHgxRTI0LAorICAgIDB4OTkwQSwgMHg5OTBBLCAweDE3MEQsIDB4OTkwQywgMHg5OTBDLCAweDE5MjQsIDB4OTkxMCwgMHg5OTEwLCAweDFCQTMsCisgICAgMHg5OTEzLCAweDk5MTMsIDB4MTY5RSwgMHg5OTE4LCAweDk5MTgsIDB4MTczQSwgMHg5OTFFLCAweDk5MUUsIDB4MUExQiwKKyAgICAweDk5MjAsIDB4OTkyMCwgMHgxM0MwLCAweDk5MjgsIDB4OTkyOCwgMHgwRUZBLCAweDk5NDUsIDB4OTk0NSwgMHgxMjRGLAorICAgIDB4OTk0OSwgMHg5OTQ5LCAweDBGQzUsIDB4OTk0QiwgMHg5OTRCLCAweDBGOTUsIDB4OTk0QywgMHg5OTRDLCAweDFCQTQsCisgICAgMHg5OTRELCAweDk5NEQsIDB4MTU0OCwgMHg5OTUxLCAweDk5NTEsIDB4MTAxOSwgMHg5OTUyLCAweDk5NTIsIDB4MTgxNywKKyAgICAweDk5NTQsIDB4OTk1NCwgMHgxN0QyLCAweDk5NTcsIDB4OTk1NywgMHgxRTI1LCAweDk5OTYsIDB4OTk5NiwgMHgxNUY5LAorICAgIDB4OTk5OSwgMHg5OTk5LCAweDFFMjYsIDB4OTk5RCwgMHg5OTlELCAweDFEQkQsIDB4OTlBNSwgMHg5OUE1LCAweDEzRTEsCisgICAgMHg5OUE4LCAweDk5QTgsIDB4MUU2RSwgMHg5OUFDLCAweDk5QUMsIDB4MTIzNSwgMHg5OUFELCAweDk5QUQsIDB4MTcxNSwKKyAgICAweDk5QUUsIDB4OTlBRSwgMHgxREFDLCAweDk5QjEsIDB4OTlCMSwgMHgxQ0UwLCAweDk5QjMsIDB4OTlCMywgMHgxQ0JFLAorICAgIDB4OTlCNCwgMHg5OUI0LCAweDE2MjIsIDB4OTlCOSwgMHg5OUI5LCAweDE5NDQsIDB4OTlDMSwgMHg5OUMxLCAweDEzMjgsCisgICAgMHg5OUQwLCAweDk5RDAsIDB4MUFGMywgMHg5OUQxLCAweDk5RDEsIDB4MTA0RSwgMHg5OUQyLCAweDk5RDIsIDB4MEY2NiwKKyAgICAweDk5RDUsIDB4OTlENSwgMHgwRDg4LCAweDk5RDksIDB4OTlEOSwgMHgxNDFELCAweDk5REQsIDB4OTlERCwgMHgxQ0UxLAorICAgIDB4OTlERiwgMHg5OURGLCAweDE0QjMsIDB4OTlFRCwgMHg5OUVELCAweDFFMTUsIDB4OTlGMSwgMHg5OUYxLCAweDExMjQsCisgICAgMHg5OUZGLCAweDk5RkYsIDB4MUIwOCwgMHg5QTAxLCAweDlBMDEsIDB4MTQ3OCwgMHg5QTA4LCAweDlBMDgsIDB4MTNDMSwKKyAgICAweDlBMEUsIDB4OUEwRiwgMHgxMDFBLCAweDlBMTksIDB4OUExOSwgMHgxRDY3LCAweDlBMkIsIDB4OUEyQiwgMHgwRTFDLAorICAgIDB4OUEzMCwgMHg5QTMwLCAweDExMTUsIDB4OUEzNiwgMHg5QTM2LCAweDFDNzYsIDB4OUEzNywgMHg5QTM3LCAweDE1QTAsCisgICAgMHg5QTQwLCAweDlBNDAsIDB4MTI3NSwgMHg5QTQzLCAweDlBNDMsIDB4MURBNSwgMHg5QTQ1LCAweDlBNDUsIDB4MEY2NywKKyAgICAweDlBNEQsIDB4OUE0RCwgMHgxRjFELCAweDlBNTUsIDB4OUE1NSwgMHgwRjMzLCAweDlBNTcsIDB4OUE1NywgMHgxRTMxLAorICAgIDB4OUE1QSwgMHg5QTVBLCAweDBFNzcsIDB4OUE1QiwgMHg5QTVCLCAweDE3NDMsIDB4OUE1RiwgMHg5QTVGLCAweDFDQTAsCisgICAgMHg5QTYyLCAweDlBNjIsIDB4MTE2NiwgMHg5QTY1LCAweDlBNjUsIDB4MTAxQywgMHg5QTY5LCAweDlBNjksIDB4MUVEOSwKKyAgICAweDlBNkEsIDB4OUE2QSwgMHgxMTY3LCAweDlBQTgsIDB4OUFBOCwgMHgwRUM5LCAweDlBQjgsIDB4OUFCOCwgMHgxRTE2LAorICAgIDB4OUFEMywgMHg5QUQzLCAweDE1RkEsIDB4OUFENCwgMHg5QUQ0LCAweDFDMkQsIDB4OUFEOCwgMHg5QUQ4LCAweDBFQjUsCisgICAgMHg5QUU1LCAweDlBRTUsIDB4MTc2RCwgMHg5QUVFLCAweDlBRUUsIDB4MTM0QiwgMHg5QjFBLCAweDlCMUEsIDB4MTVGQiwKKyAgICAweDlCMjcsIDB4OUIyNywgMHgxMUQyLCAweDlCMkEsIDB4OUIyQSwgMHgxRDJFLCAweDlCMzEsIDB4OUIzMSwgMHgxODZCLAorICAgIDB4OUIzQywgMHg5QjNDLCAweDBGOTksIDB4OUI0MSwgMHg5QjQxLCAweDBGMTcsIDB4OUI0MiwgMHg5QjQyLCAweDFFQTksCisgICAgMHg5QjQzLCAweDlCNDMsIDB4MTM0QywgMHg5QjQ0LCAweDlCNDQsIDB4MTM4MywgMHg5QjQ1LCAweDlCNDUsIDB4MTI3MSwKKyAgICAweDlCNEYsIDB4OUI0RiwgMHgxOEE0LCAweDlCNTQsIDB4OUI1NCwgMHgxMjM2LCAweDlCNUEsIDB4OUI1QSwgMHgxNzE2LAorICAgIDB4OUI2RiwgMHg5QjZGLCAweDExQUQsIDB4OUI4RSwgMHg5QjhFLCAweDFBMkIsIDB4OUI5MSwgMHg5QjkxLCAweDFEOTIsCisgICAgMHg5QjlGLCAweDlCOUYsIDB4MTZCOCwgMHg5QkFCLCAweDlCQUIsIDB4MEYzNCwgMHg5QkFFLCAweDlCQUUsIDB4MTU0OSwKKyAgICAweDlCQzksIDB4OUJDOSwgMHgxMjFELCAweDlCRDYsIDB4OUJENiwgMHgxQzI0LCAweDlCRTQsIDB4OUJFNCwgMHgwRUM3LAorICAgIDB4OUJFOCwgMHg5QkU4LCAweDBFNzgsIDB4OUMwRCwgMHg5QzBELCAweDFDNzcsIDB4OUMxMCwgMHg5QzEwLCAweDE2QUQsCisgICAgMHg5QzEyLCAweDlDMTIsIDB4MTNFMiwgMHg5QzE1LCAweDlDMTUsIDB4MURDRCwgMHg5QzI1LCAweDlDMjUsIDB4MUVEQSwKKyAgICAweDlDMzIsIDB4OUMzMiwgMHgxN0JDLCAweDlDM0IsIDB4OUMzQiwgMHgxMjUwLCAweDlDNDcsIDB4OUM0NywgMHgwREU3LAorICAgIDB4OUM0OSwgMHg5QzQ5LCAweDEzQUYsIDB4OUM1NywgMHg5QzU3LCAweDEyMjUsIDB4OUNFNSwgMHg5Q0U1LCAweDFBQUIsCisgICAgMHg5Q0U3LCAweDlDRTcsIDB4MTQxRSwgMHg5Q0U5LCAweDlDRTksIDB4MEY2OCwgMHg5Q0YzLCAweDlDRjMsIDB4MTNGNCwKKyAgICAweDlDRjQsIDB4OUNGNCwgMHgxMjlBLCAweDlDRjYsIDB4OUNGNiwgMHgxNzYwLCAweDlEMDksIDB4OUQwOSwgMHgxNjlGLAorICAgIDB4OUQxQiwgMHg5RDFCLCAweDE4ODgsIDB4OUQyNiwgMHg5RDI2LCAweDE2Q0YsIDB4OUQyOCwgMHg5RDI4LCAweDE2QzgsCisgICAgMHg5RDNCLCAweDlEM0IsIDB4MUVCNiwgMHg5RDUxLCAweDlENTEsIDB4MEUzRiwgMHg5RDVELCAweDlENUQsIDB4MTZBMCwKKyAgICAweDlENjAsIDB4OUQ2MCwgMHgwRUJELCAweDlENjEsIDB4OUQ2MSwgMHgxMkUxLCAweDlENkMsIDB4OUQ2QywgMHgxNDNDLAorICAgIDB4OUQ3MiwgMHg5RDcyLCAweDE5NzksIDB4OURBOSwgMHg5REE5LCAweDEyQkEsIDB4OURBRiwgMHg5REFGLCAweDE2RTQsCisgICAgMHg5REI0LCAweDlEQjQsIDB4MUREMiwgMHg5REM0LCAweDlEQzQsIDB4MEU5MCwgMHg5REQ3LCAweDlERDcsIDB4MEY2OSwKKyAgICAweDlERjIsIDB4OURGMiwgMHgxQ0ExLCAweDlERjgsIDB4OURGOCwgMHgxRjRDLCAweDlERjksIDB4OURGOSwgMHgxOEY5LAorICAgIDB4OURGQSwgMHg5REZBLCAweDExQUUsIDB4OUUxQSwgMHg5RTFBLCAweDE2RTUsIDB4OUUxRSwgMHg5RTFFLCAweDExMkMsCisgICAgMHg5RTc1LCAweDlFNzUsIDB4MTFBRiwgMHg5RTc5LCAweDlFNzksIDB4MURFRSwgMHg5RTdELCAweDlFN0QsIDB4MTc2RSwKKyAgICAweDlFN0YsIDB4OUU3RiwgMHgxMUI1LCAweDlFOTIsIDB4OUU5MiwgMHgxMDFELCAweDlFOTMsIDB4OUU5MywgMHgxMUI2LAorICAgIDB4OUU5NywgMHg5RTk3LCAweDExNjgsIDB4OUU5RCwgMHg5RTlELCAweDE0QjQsIDB4OUU5RiwgMHg5RTlGLCAweDEyMjYsCisgICAgMHg5RUE1LCAweDlFQTUsIDB4MTI3NiwgMHg5RUI0LCAweDlFQjQsIDB4MEY3MCwgMHg5RUI1LCAweDlFQjUsIDB4MTI4OSwKKyAgICAweDlFQkIsIDB4OUVCQiwgMHgxMjM3LCAweDlFQkUsIDB4OUVCRSwgMHgxRjQ0LCAweDlFQzMsIDB4OUVDMywgMHgxRUY3LAorICAgIDB4OUVDRCwgMHg5RUNELCAweDE1MTksIDB4OUVDRSwgMHg5RUNFLCAweDExNjksIDB4OUVEMSwgMHg5RUQxLCAweDFGNTIsCisgICAgMHg5RUQ0LCAweDlFRDQsIDB4MEUyNywgMHg5RUQ4LCAweDlFRDgsIDB4MTJFMywgMHg5RURCLCAweDlFREIsIDB4MTBBOSwKKyAgICAweDlFREMsIDB4OUVEQywgMHgxQzg5LCAweDlFREUsIDB4OUVERSwgMHgxQTJDLCAweDlFRTgsIDB4OUVFOCwgMHgxMDk5LAorICAgIDB4OUVGNCwgMHg5RUY0LCAweDEzMDUsIDB4OUYwNywgMHg5RjA3LCAweDE3QkQsIDB4OUYwOCwgMHg5RjA4LCAweDEzQjAsCisgICAgMHg5RjBFLCAweDlGMEUsIDB4MUE2NiwgMHg5RjEzLCAweDlGMTMsIDB4MEVCNiwgMHg5RjIwLCAweDlGMjAsIDB4MTUxQSwKKyAgICAweDlGM0IsIDB4OUYzQiwgMHgxNDY2LCAweDlGNEEsIDB4OUY0QSwgMHgxQTdELCAweDlGNEIsIDB4OUY0QiwgMHgxOUI5LAorICAgIDB4OUY0RSwgMHg5RjRFLCAweDE5QkEsIDB4OUY1MiwgMHg5RjUyLCAweDFDQkYsIDB4OUY1RiwgMHg5RjVGLCAweDE5REEsCisgICAgMHg5RjYxLCAweDlGNjEsIDB4MTE5OSwgMHg5RjY3LCAweDlGNjcsIDB4MTU1NiwgMHg5RjZBLCAweDlGNkEsIDB4MUI5NSwKKyAgICAweDlGNkMsIDB4OUY2QywgMHgxNzE3LCAweDlGNzcsIDB4OUY3NywgMHgxNkFFLCAweDlGOEQsIDB4OUY4RCwgMHgxMUQzLAorICAgIDB4OUY5MCwgMHg5RjkwLCAweDEzNjgsIDB4OUY5NSwgMHg5Rjk1LCAweDBEQzksIDB4OUY5QywgMHg5RjlDLCAweDBGNkEsCisgICAgMHhBQzAwLCAweEFDMDEsIDB4MDQzRSwgMHhBQzAyLCAweEFDMDMsIDB4MjQ3NSwgMHhBQzA0LCAweEFDMDQsIDB4MDQ0MCwKKyAgICAweEFDMDUsIDB4QUMwNiwgMHgyNDc3LCAweEFDMDcsIDB4QUMwQSwgMHgwNDQxLCAweEFDMEIsIDB4QUMwRiwgMHgyNDc5LAorICAgIDB4QUMxMCwgMHhBQzE3LCAweDA0NDUsIDB4QUMxOCwgMHhBQzE4LCAweDI0N0UsIDB4QUMxOSwgMHhBQzFELCAweDA0NEQsCisgICAgMHhBQzFFLCAweEFDMUYsIDB4MjQ3RiwgMHhBQzIwLCAweEFDMjAsIDB4MDQ1MiwgMHhBQzIxLCAweEFDMjMsIDB4MjQ4MSwKKyAgICAweEFDMjQsIDB4QUMyNCwgMHgwNDUzLCAweEFDMjUsIDB4QUMyQiwgMHgyNDg0LCAweEFDMkMsIDB4QUMyRCwgMHgwNDU0LAorICAgIDB4QUMyRSwgMHhBQzJFLCAweDI0OEIsIDB4QUMyRiwgMHhBQzMxLCAweDA0NTYsIDB4QUMzMiwgMHhBQzM3LCAweDI0OEMsCisgICAgMHhBQzM4LCAweEFDMzksIDB4MDQ1OSwgMHhBQzNBLCAweEFDM0IsIDB4MjQ5MiwgMHhBQzNDLCAweEFDM0MsIDB4MDQ1QiwKKyAgICAweEFDM0QsIDB4QUMzRiwgMHgyNDk0LCAweEFDNDAsIDB4QUM0MCwgMHgwNDVDLCAweEFDNDEsIDB4QUM0QSwgMHgyNDk3LAorICAgIDB4QUM0QiwgMHhBQzRCLCAweDA0NUQsIDB4QUM0QywgMHhBQzRDLCAweDI0QTEsIDB4QUM0RCwgMHhBQzRELCAweDA0NUUsCisgICAgMHhBQzRFLCAweEFDNTMsIDB4MjRBMiwgMHhBQzU0LCAweEFDNTQsIDB4MDQ1RiwgMHhBQzU1LCAweEFDNTcsIDB4MjRBOCwKKyAgICAweEFDNTgsIDB4QUM1OCwgMHgwNDYwLCAweEFDNTksIDB4QUM1QiwgMHgyNEFCLCAweEFDNUMsIDB4QUM1QywgMHgwNDYxLAorICAgIDB4QUM1RCwgMHhBQzZGLCAweDI0QUUsIDB4QUM3MCwgMHhBQzcxLCAweDA0NjIsIDB4QUM3MiwgMHhBQzczLCAweDI0QzEsCisgICAgMHhBQzc0LCAweEFDNzQsIDB4MDQ2NCwgMHhBQzc1LCAweEFDNzYsIDB4MjRDMywgMHhBQzc3LCAweEFDNzgsIDB4MDQ2NSwKKyAgICAweEFDNzksIDB4QUM3OSwgMHgyNEM1LCAweEFDN0EsIDB4QUM3QSwgMHgwNDY3LCAweEFDN0IsIDB4QUM3RiwgMHgyNEM2LAorICAgIDB4QUM4MCwgMHhBQzgxLCAweDA0NjgsIDB4QUM4MiwgMHhBQzgyLCAweDI0Q0IsIDB4QUM4MywgMHhBQzg2LCAweDA0NkEsCisgICAgMHhBQzg3LCAweEFDODgsIDB4MjRDQywgMHhBQzg5LCAweEFDOEMsIDB4MDQ2RSwgMHhBQzhELCAweEFDOEYsIDB4MjRDRSwKKyAgICAweEFDOTAsIDB4QUM5MCwgMHgwNDcyLCAweEFDOTEsIDB4QUM5MywgMHgyNEQxLCAweEFDOTQsIDB4QUM5NCwgMHgwNDczLAorICAgIDB4QUM5NSwgMHhBQzlCLCAweDI0RDQsIDB4QUM5QywgMHhBQzlELCAweDA0NzQsIDB4QUM5RSwgMHhBQzlFLCAweDI0REIsCisgICAgMHhBQzlGLCAweEFDQTEsIDB4MDQ3NiwgMHhBQ0EyLCAweEFDQTcsIDB4MjREQywgMHhBQ0E4LCAweEFDQUEsIDB4MDQ3OSwKKyAgICAweEFDQUIsIDB4QUNBQiwgMHgyNEUyLCAweEFDQUMsIDB4QUNBQywgMHgwNDdDLCAweEFDQUQsIDB4QUNBRSwgMHgyNEUzLAorICAgIDB4QUNBRiwgMHhBQ0IwLCAweDA0N0QsIDB4QUNCMSwgMHhBQ0I3LCAweDI0RTUsIDB4QUNCOCwgMHhBQ0I5LCAweDA0N0YsCisgICAgMHhBQ0JBLCAweEFDQkEsIDB4MjRFQywgMHhBQ0JCLCAweEFDQkQsIDB4MDQ4MSwgMHhBQ0JFLCAweEFDQzAsIDB4MjRFRCwKKyAgICAweEFDQzEsIDB4QUNDMSwgMHgwNDg0LCAweEFDQzIsIDB4QUNDMywgMHgyNEYwLCAweEFDQzQsIDB4QUNDNCwgMHgwNDg1LAorICAgIDB4QUNDNSwgMHhBQ0M3LCAweDI0RjIsIDB4QUNDOCwgMHhBQ0M4LCAweDA0ODYsIDB4QUNDOSwgMHhBQ0NCLCAweDI0RjUsCisgICAgMHhBQ0NDLCAweEFDQ0MsIDB4MDQ4NywgMHhBQ0NELCAweEFDRDQsIDB4MjRGOCwgMHhBQ0Q1LCAweEFDRDUsIDB4MDQ4OCwKKyAgICAweEFDRDYsIDB4QUNENiwgMHgyNTAwLCAweEFDRDcsIDB4QUNENywgMHgwNDg5LCAweEFDRDgsIDB4QUNERiwgMHgyNTAxLAorICAgIDB4QUNFMCwgMHhBQ0UxLCAweDA0OEEsIDB4QUNFMiwgMHhBQ0UzLCAweDI1MDksIDB4QUNFNCwgMHhBQ0U0LCAweDA0OEMsCisgICAgMHhBQ0U1LCAweEFDRTYsIDB4MjUwQiwgMHhBQ0U3LCAweEFDRTgsIDB4MDQ4RCwgMHhBQ0U5LCAweEFDRTksIDB4MjUwRCwKKyAgICAweEFDRUEsIDB4QUNFQSwgMHgwNDhGLCAweEFDRUIsIDB4QUNFQiwgMHgyNTBFLCAweEFDRUMsIDB4QUNFQywgMHgwNDkwLAorICAgIDB4QUNFRCwgMHhBQ0VFLCAweDI1MEYsIDB4QUNFRiwgMHhBQ0YxLCAweDA0OTEsIDB4QUNGMiwgMHhBQ0YyLCAweDI1MTEsCisgICAgMHhBQ0YzLCAweEFDRjMsIDB4MDQ5NCwgMHhBQ0Y0LCAweEFDRjQsIDB4MjUxMiwgMHhBQ0Y1LCAweEFDRjYsIDB4MDQ5NSwKKyAgICAweEFDRjcsIDB4QUNGQiwgMHgyNTEzLCAweEFDRkMsIDB4QUNGRCwgMHgwNDk3LCAweEFDRkUsIDB4QUNGRiwgMHgyNTE4LAorICAgIDB4QUQwMCwgMHhBRDAwLCAweDA0OTksIDB4QUQwMSwgMHhBRDAzLCAweDI1MUEsIDB4QUQwNCwgMHhBRDA0LCAweDA0OUEsCisgICAgMHhBRDA1LCAweEFEMDUsIDB4MjUxRCwgMHhBRDA2LCAweEFEMDYsIDB4MDQ5QiwgMHhBRDA3LCAweEFEMEIsIDB4MjUxRSwKKyAgICAweEFEMEMsIDB4QUQwRCwgMHgwNDlDLCAweEFEMEUsIDB4QUQwRSwgMHgyNTIzLCAweEFEMEYsIDB4QUQwRiwgMHgwNDlFLAorICAgIDB4QUQxMCwgMHhBRDEwLCAweDI1MjQsIDB4QUQxMSwgMHhBRDExLCAweDA0OUYsIDB4QUQxMiwgMHhBRDE3LCAweDI1MjUsCisgICAgMHhBRDE4LCAweEFEMTgsIDB4MDRBMCwgMHhBRDE5LCAweEFEMUIsIDB4MjUyQiwgMHhBRDFDLCAweEFEMUMsIDB4MDRBMSwKKyAgICAweEFEMUQsIDB4QUQxRiwgMHgyNTJFLCAweEFEMjAsIDB4QUQyMCwgMHgwNEEyLCAweEFEMjEsIDB4QUQyOCwgMHgyNTMxLAorICAgIDB4QUQyOSwgMHhBRDI5LCAweDA0QTMsIDB4QUQyQSwgMHhBRDJCLCAweDI1MzksIDB4QUQyQywgMHhBRDJELCAweDA0QTQsCisgICAgMHhBRDJFLCAweEFEMzMsIDB4MjUzQiwgMHhBRDM0LCAweEFEMzUsIDB4MDRBNiwgMHhBRDM2LCAweEFEMzcsIDB4MjU0MSwKKyAgICAweEFEMzgsIDB4QUQzOCwgMHgwNEE4LCAweEFEMzksIDB4QUQzQiwgMHgyNTQzLCAweEFEM0MsIDB4QUQzQywgMHgwNEE5LAorICAgIDB4QUQzRCwgMHhBRDQzLCAweDI1NDYsIDB4QUQ0NCwgMHhBRDQ1LCAweDA0QUEsIDB4QUQ0NiwgMHhBRDQ2LCAweDI1NEQsCisgICAgMHhBRDQ3LCAweEFENDcsIDB4MDRBQywgMHhBRDQ4LCAweEFENDgsIDB4MjU0RSwgMHhBRDQ5LCAweEFENDksIDB4MDRBRCwKKyAgICAweEFENEEsIDB4QUQ0RiwgMHgyNTRGLCAweEFENTAsIDB4QUQ1MCwgMHgwNEFFLCAweEFENTEsIDB4QUQ1MywgMHgyNTU1LAorICAgIDB4QUQ1NCwgMHhBRDU0LCAweDA0QUYsIDB4QUQ1NSwgMHhBRDU3LCAweDI1NTgsIDB4QUQ1OCwgMHhBRDU4LCAweDA0QjAsCisgICAgMHhBRDU5LCAweEFENjAsIDB4MjU1QiwgMHhBRDYxLCAweEFENjEsIDB4MDRCMSwgMHhBRDYyLCAweEFENjIsIDB4MjU2MywKKyAgICAweEFENjMsIDB4QUQ2MywgMHgwNEIyLCAweEFENjQsIDB4QUQ2QiwgMHgyNTY0LCAweEFENkMsIDB4QUQ2RCwgMHgwNEIzLAorICAgIDB4QUQ2RSwgMHhBRDZGLCAweDI1NkMsIDB4QUQ3MCwgMHhBRDcwLCAweDA0QjUsIDB4QUQ3MSwgMHhBRDcyLCAweDI1NkUsCisgICAgMHhBRDczLCAweEFENzYsIDB4MDRCNiwgMHhBRDc3LCAweEFEN0EsIDB4MjU3MCwgMHhBRDdCLCAweEFEN0QsIDB4MDRCQSwKKyAgICAweEFEN0UsIDB4QUQ3RSwgMHgyNTc0LCAweEFEN0YsIDB4QUQ3RiwgMHgwNEJELCAweEFEODAsIDB4QUQ4MCwgMHgyNTc1LAorICAgIDB4QUQ4MSwgMHhBRDgyLCAweDA0QkUsIDB4QUQ4MywgMHhBRDg3LCAweDI1NzYsIDB4QUQ4OCwgMHhBRDg5LCAweDA0QzAsCisgICAgMHhBRDhBLCAweEFEOEIsIDB4MjU3QiwgMHhBRDhDLCAweEFEOEMsIDB4MDRDMiwgMHhBRDhELCAweEFEOEYsIDB4MjU3RCwKKyAgICAweEFEOTAsIDB4QUQ5MCwgMHgwNEMzLCAweEFEOTEsIDB4QUQ5QiwgMHgyNTgwLCAweEFEOUMsIDB4QUQ5RCwgMHgwNEM0LAorICAgIDB4QUQ5RSwgMHhBREEzLCAweDI1OEIsIDB4QURBNCwgMHhBREE0LCAweDA0QzYsIDB4QURBNSwgMHhBREI2LCAweDI1OTEsCisgICAgMHhBREI3LCAweEFEQjcsIDB4MDRDNywgMHhBREI4LCAweEFEQkYsIDB4MjVBMywgMHhBREMwLCAweEFEQzEsIDB4MDRDOCwKKyAgICAweEFEQzIsIDB4QURDMywgMHgyNUFCLCAweEFEQzQsIDB4QURDNCwgMHgwNENBLCAweEFEQzUsIDB4QURDNywgMHgyNUFELAorICAgIDB4QURDOCwgMHhBREM4LCAweDA0Q0IsIDB4QURDOSwgMHhBRENGLCAweDI1QjAsIDB4QUREMCwgMHhBREQxLCAweDA0Q0MsCisgICAgMHhBREQyLCAweEFERDIsIDB4MjVCNywgMHhBREQzLCAweEFERDMsIDB4MDRDRSwgMHhBREQ0LCAweEFEREIsIDB4MjVCOCwKKyAgICAweEFEREMsIDB4QUREQywgMHgwNENGLCAweEFEREQsIDB4QURERiwgMHgyNUMwLCAweEFERTAsIDB4QURFMCwgMHgwNEQwLAorICAgIDB4QURFMSwgMHhBREUzLCAweDI1QzMsIDB4QURFNCwgMHhBREU0LCAweDA0RDEsIDB4QURFNSwgMHhBREY3LCAweDI1QzYsCisgICAgMHhBREY4LCAweEFERjksIDB4MDREMiwgMHhBREZBLCAweEFERkIsIDB4MjVEOSwgMHhBREZDLCAweEFERkMsIDB4MDRENCwKKyAgICAweEFERkQsIDB4QURGRSwgMHgyNURCLCAweEFERkYsIDB4QURGRiwgMHgwNEQ1LCAweEFFMDAsIDB4QUUwMSwgMHgwNEQ2LAorICAgIDB4QUUwMiwgMHhBRTA3LCAweDI1REQsIDB4QUUwOCwgMHhBRTA5LCAweDA0RDgsIDB4QUUwQSwgMHhBRTBBLCAweDI1RTMsCisgICAgMHhBRTBCLCAweEFFMEIsIDB4MDREQSwgMHhBRTBDLCAweEFFMEMsIDB4MjVFNCwgMHhBRTBELCAweEFFMEQsIDB4MDREQiwKKyAgICAweEFFMEUsIDB4QUUxMywgMHgyNUU1LCAweEFFMTQsIDB4QUUxNCwgMHgwNERDLCAweEFFMTUsIDB4QUUyRiwgMHgyNUVCLAorICAgIDB4QUUzMCwgMHhBRTMxLCAweDA0REQsIDB4QUUzMiwgMHhBRTMzLCAweDI2MDYsIDB4QUUzNCwgMHhBRTM0LCAweDA0REYsCisgICAgMHhBRTM1LCAweEFFMzYsIDB4MjYwOCwgMHhBRTM3LCAweEFFMzgsIDB4MDRFMCwgMHhBRTM5LCAweEFFMzksIDB4MjYwQSwKKyAgICAweEFFM0EsIDB4QUUzQSwgMHgwNEUyLCAweEFFM0IsIDB4QUUzRiwgMHgyNjBCLCAweEFFNDAsIDB4QUU0MSwgMHgwNEUzLAorICAgIDB4QUU0MiwgMHhBRTQyLCAweDI2MTAsIDB4QUU0MywgMHhBRTQzLCAweDA0RTUsIDB4QUU0NCwgMHhBRTQ0LCAweDI2MTEsCisgICAgMHhBRTQ1LCAweEFFNDYsIDB4MDRFNiwgMHhBRTQ3LCAweEFFNDksIDB4MjYxMiwgMHhBRTRBLCAweEFFNEEsIDB4MDRFOCwKKyAgICAweEFFNEIsIDB4QUU0QiwgMHgyNjE1LCAweEFFNEMsIDB4QUU0RSwgMHgwNEU5LCAweEFFNEYsIDB4QUU0RiwgMHgyNjE2LAorICAgIDB4QUU1MCwgMHhBRTUwLCAweDA0RUMsIDB4QUU1MSwgMHhBRTUzLCAweDI2MTcsIDB4QUU1NCwgMHhBRTU0LCAweDA0RUQsCisgICAgMHhBRTU1LCAweEFFNTUsIDB4MjYxQSwgMHhBRTU2LCAweEFFNTYsIDB4MDRFRSwgMHhBRTU3LCAweEFFNUIsIDB4MjYxQiwKKyAgICAweEFFNUMsIDB4QUU1RCwgMHgwNEVGLCAweEFFNUUsIDB4QUU1RSwgMHgyNjIwLCAweEFFNUYsIDB4QUU2MSwgMHgwNEYxLAorICAgIDB4QUU2MiwgMHhBRTY0LCAweDI2MjEsIDB4QUU2NSwgMHhBRTY1LCAweDA0RjQsIDB4QUU2NiwgMHhBRTY3LCAweDI2MjQsCisgICAgMHhBRTY4LCAweEFFNjksIDB4MDRGNSwgMHhBRTZBLCAweEFFNkIsIDB4MjYyNiwgMHhBRTZDLCAweEFFNkMsIDB4MDRGNywKKyAgICAweEFFNkQsIDB4QUU2RiwgMHgyNjI4LCAweEFFNzAsIDB4QUU3MCwgMHgwNEY4LCAweEFFNzEsIDB4QUU3NywgMHgyNjJCLAorICAgIDB4QUU3OCwgMHhBRTc5LCAweDA0RjksIDB4QUU3QSwgMHhBRTdBLCAweDI2MzIsIDB4QUU3QiwgMHhBRTdELCAweDA0RkIsCisgICAgMHhBRTdFLCAweEFFODMsIDB4MjYzMywgMHhBRTg0LCAweEFFODUsIDB4MDRGRSwgMHhBRTg2LCAweEFFOEIsIDB4MjYzOSwKKyAgICAweEFFOEMsIDB4QUU4QywgMHgwNTAwLCAweEFFOEQsIDB4QUVCQiwgMHgyNjNGLCAweEFFQkMsIDB4QUVCRSwgMHgwNTAxLAorICAgIDB4QUVCRiwgMHhBRUJGLCAweDI2NkUsIDB4QUVDMCwgMHhBRUMwLCAweDA1MDQsIDB4QUVDMSwgMHhBRUMzLCAweDI2NkYsCisgICAgMHhBRUM0LCAweEFFQzQsIDB4MDUwNSwgMHhBRUM1LCAweEFFQ0IsIDB4MjY3MiwgMHhBRUNDLCAweEFFQ0QsIDB4MDUwNiwKKyAgICAweEFFQ0UsIDB4QUVDRSwgMHgyNjc5LCAweEFFQ0YsIDB4QUVEMSwgMHgwNTA4LCAweEFFRDIsIDB4QUVENywgMHgyNjdBLAorICAgIDB4QUVEOCwgMHhBRUQ5LCAweDA1MEIsIDB4QUVEQSwgMHhBRURCLCAweDI2ODAsIDB4QUVEQywgMHhBRURDLCAweDA1MEQsCisgICAgMHhBRURELCAweEFFRTcsIDB4MjY4MiwgMHhBRUU4LCAweEFFRTgsIDB4MDUwRSwgMHhBRUU5LCAweEFFRUEsIDB4MjY4RCwKKyAgICAweEFFRUIsIDB4QUVFQiwgMHgwNTBGLCAweEFFRUMsIDB4QUVFQywgMHgyNjhGLCAweEFFRUQsIDB4QUVFRCwgMHgwNTEwLAorICAgIDB4QUVFRSwgMHhBRUYzLCAweDI2OTAsIDB4QUVGNCwgMHhBRUY0LCAweDA1MTEsIDB4QUVGNSwgMHhBRUY3LCAweDI2OTYsCisgICAgMHhBRUY4LCAweEFFRjgsIDB4MDUxMiwgMHhBRUY5LCAweEFFRkIsIDB4MjY5OSwgMHhBRUZDLCAweEFFRkMsIDB4MDUxMywKKyAgICAweEFFRkQsIDB4QUVGRiwgMHgyNjlDLCAweEFGMDAsIDB4QUYwNiwgMHgyNjlGLCAweEFGMDcsIDB4QUYwOCwgMHgwNTE0LAorICAgIDB4QUYwOSwgMHhBRjBDLCAweDI2QTYsIDB4QUYwRCwgMHhBRjBELCAweDA1MTYsIDB4QUYwRSwgMHhBRjBGLCAweDI2QUEsCisgICAgMHhBRjEwLCAweEFGMTAsIDB4MDUxNywgMHhBRjExLCAweEFGMkIsIDB4MjZBQywgMHhBRjJDLCAweEFGMkQsIDB4MDUxOCwKKyAgICAweEFGMkUsIDB4QUYyRiwgMHgyNkM3LCAweEFGMzAsIDB4QUYzMCwgMHgwNTFBLCAweEFGMzEsIDB4QUYzMSwgMHgyNkM5LAorICAgIDB4QUYzMiwgMHhBRjMyLCAweDA1MUIsIDB4QUYzMywgMHhBRjMzLCAweDI2Q0EsIDB4QUYzNCwgMHhBRjM0LCAweDA1MUMsCisgICAgMHhBRjM1LCAweEFGM0IsIDB4MjZDQiwgMHhBRjNDLCAweEFGM0QsIDB4MDUxRCwgMHhBRjNFLCAweEFGM0UsIDB4MjZEMiwKKyAgICAweEFGM0YsIDB4QUYzRiwgMHgwNTFGLCAweEFGNDAsIDB4QUY0MCwgMHgyNkQzLCAweEFGNDEsIDB4QUY0MywgMHgwNTIwLAorICAgIDB4QUY0NCwgMHhBRjQ3LCAweDI2RDQsIDB4QUY0OCwgMHhBRjQ5LCAweDA1MjMsIDB4QUY0QSwgMHhBRjRGLCAweDI2RDgsCisgICAgMHhBRjUwLCAweEFGNTAsIDB4MDUyNSwgMHhBRjUxLCAweEFGNUIsIDB4MjZERSwgMHhBRjVDLCAweEFGNUQsIDB4MDUyNiwKKyAgICAweEFGNUUsIDB4QUY2MywgMHgyNkU5LCAweEFGNjQsIDB4QUY2NSwgMHgwNTI4LCAweEFGNjYsIDB4QUY3OCwgMHgyNkVGLAorICAgIDB4QUY3OSwgMHhBRjc5LCAweDA1MkEsIDB4QUY3QSwgMHhBRjdGLCAweDI3MDIsIDB4QUY4MCwgMHhBRjgwLCAweDA1MkIsCisgICAgMHhBRjgxLCAweEFGODMsIDB4MjcwOCwgMHhBRjg0LCAweEFGODQsIDB4MDUyQywgMHhBRjg1LCAweEFGODcsIDB4MjcwQiwKKyAgICAweEFGODgsIDB4QUY4OCwgMHgwNTJELCAweEFGODksIDB4QUY4RiwgMHgyNzBFLCAweEFGOTAsIDB4QUY5MSwgMHgwNTJFLAorICAgIDB4QUY5MiwgMHhBRjk0LCAweDI3MTUsIDB4QUY5NSwgMHhBRjk1LCAweDA1MzAsIDB4QUY5NiwgMHhBRjlCLCAweDI3MTgsCisgICAgMHhBRjlDLCAweEFGOUMsIDB4MDUzMSwgMHhBRjlELCAweEFGQjcsIDB4MjcxRSwgMHhBRkI4LCAweEFGQjksIDB4MDUzMiwKKyAgICAweEFGQkEsIDB4QUZCQiwgMHgyNzM5LCAweEFGQkMsIDB4QUZCQywgMHgwNTM0LCAweEFGQkQsIDB4QUZCRiwgMHgyNzNCLAorICAgIDB4QUZDMCwgMHhBRkMwLCAweDA1MzUsIDB4QUZDMSwgMHhBRkM2LCAweDI3M0UsIDB4QUZDNywgMHhBRkM5LCAweDA1MzYsCisgICAgMHhBRkNBLCAweEFGQ0EsIDB4Mjc0NCwgMHhBRkNCLCAweEFGQ0IsIDB4MDUzOSwgMHhBRkNDLCAweEFGQ0MsIDB4Mjc0NSwKKyAgICAweEFGQ0QsIDB4QUZDRSwgMHgwNTNBLCAweEFGQ0YsIDB4QUZEMywgMHgyNzQ2LCAweEFGRDQsIDB4QUZENCwgMHgwNTNDLAorICAgIDB4QUZENSwgMHhBRkRCLCAweDI3NEIsIDB4QUZEQywgMHhBRkRDLCAweDA1M0QsIDB4QUZERCwgMHhBRkU3LCAweDI3NTIsCisgICAgMHhBRkU4LCAweEFGRTksIDB4MDUzRSwgMHhBRkVBLCAweEFGRUYsIDB4Mjc1RCwgMHhBRkYwLCAweEFGRjEsIDB4MDU0MCwKKyAgICAweEFGRjIsIDB4QUZGMywgMHgyNzYzLCAweEFGRjQsIDB4QUZGNCwgMHgwNTQyLCAweEFGRjUsIDB4QUZGNywgMHgyNzY1LAorICAgIDB4QUZGOCwgMHhBRkY4LCAweDA1NDMsIDB4QUZGOSwgMHhBRkZGLCAweDI3NjgsIDB4QjAwMCwgMHhCMDAxLCAweDA1NDQsCisgICAgMHhCMDAyLCAweEIwMDMsIDB4Mjc2RiwgMHhCMDA0LCAweEIwMDQsIDB4MDU0NiwgMHhCMDA1LCAweEIwMEIsIDB4Mjc3MSwKKyAgICAweEIwMEMsIDB4QjAwQywgMHgwNTQ3LCAweEIwMEQsIDB4QjAwRiwgMHgyNzc4LCAweEIwMTAsIDB4QjAxMCwgMHgwNTQ4LAorICAgIDB4QjAxMSwgMHhCMDEzLCAweDI3N0IsIDB4QjAxNCwgMHhCMDE0LCAweDA1NDksIDB4QjAxNSwgMHhCMDFCLCAweDI3N0UsCisgICAgMHhCMDFDLCAweEIwMUQsIDB4MDU0QSwgMHhCMDFFLCAweEIwMjcsIDB4Mjc4NSwgMHhCMDI4LCAweEIwMjgsIDB4MDU0QywKKyAgICAweEIwMjksIDB4QjA0MywgMHgyNzhGLCAweEIwNDQsIDB4QjA0NSwgMHgwNTRELCAweEIwNDYsIDB4QjA0NywgMHgyN0FBLAorICAgIDB4QjA0OCwgMHhCMDQ4LCAweDA1NEYsIDB4QjA0OSwgMHhCMDQ5LCAweDI3QUMsIDB4QjA0QSwgMHhCMDRBLCAweDA1NTAsCisgICAgMHhCMDRCLCAweEIwNEIsIDB4MjdBRCwgMHhCMDRDLCAweEIwNEMsIDB4MDU1MSwgMHhCMDRELCAweEIwNEQsIDB4MjdBRSwKKyAgICAweEIwNEUsIDB4QjA0RSwgMHgwNTUyLCAweEIwNEYsIDB4QjA1MiwgMHgyN0FGLCAweEIwNTMsIDB4QjA1NSwgMHgwNTUzLAorICAgIDB4QjA1NiwgMHhCMDU2LCAweDI3QjMsIDB4QjA1NywgMHhCMDU3LCAweDA1NTYsIDB4QjA1OCwgMHhCMDU4LCAweDI3QjQsCisgICAgMHhCMDU5LCAweEIwNTksIDB4MDU1NywgMHhCMDVBLCAweEIwNUMsIDB4MjdCNSwgMHhCMDVELCAweEIwNUQsIDB4MDU1OCwKKyAgICAweEIwNUUsIDB4QjA3QiwgMHgyN0I4LCAweEIwN0MsIDB4QjA3RCwgMHgwNTU5LCAweEIwN0UsIDB4QjA3RiwgMHgyN0Q2LAorICAgIDB4QjA4MCwgMHhCMDgwLCAweDA1NUIsIDB4QjA4MSwgMHhCMDgzLCAweDI3RDgsIDB4QjA4NCwgMHhCMDg0LCAweDA1NUMsCisgICAgMHhCMDg1LCAweEIwOEIsIDB4MjdEQiwgMHhCMDhDLCAweEIwOEQsIDB4MDU1RCwgMHhCMDhFLCAweEIwOEUsIDB4MjdFMiwKKyAgICAweEIwOEYsIDB4QjA4RiwgMHgwNTVGLCAweEIwOTAsIDB4QjA5MCwgMHgyN0UzLCAweEIwOTEsIDB4QjA5MSwgMHgwNTYwLAorICAgIDB4QjA5MiwgMHhCMDk3LCAweDI3RTQsIDB4QjA5OCwgMHhCMDlBLCAweDA1NjEsIDB4QjA5QiwgMHhCMDlCLCAweDI3RUEsCisgICAgMHhCMDlDLCAweEIwOUMsIDB4MDU2NCwgMHhCMDlELCAweEIwOUUsIDB4MjdFQiwgMHhCMDlGLCAweEIwQTIsIDB4MDU2NSwKKyAgICAweEIwQTMsIDB4QjBBNywgMHgyN0VELCAweEIwQTgsIDB4QjBBOSwgMHgwNTY5LCAweEIwQUEsIDB4QjBBQSwgMHgyN0YyLAorICAgIDB4QjBBQiwgMHhCMEFGLCAweDA1NkIsIDB4QjBCMCwgMHhCMEIwLCAweDI3RjMsIDB4QjBCMSwgMHhCMEIxLCAweDA1NzAsCisgICAgMHhCMEIyLCAweEIwQjIsIDB4MjdGNCwgMHhCMEIzLCAweEIwQjUsIDB4MDU3MSwgMHhCMEI2LCAweEIwQjcsIDB4MjdGNSwKKyAgICAweEIwQjgsIDB4QjBCOCwgMHgwNTc0LCAweEIwQjksIDB4QjBCQiwgMHgyN0Y3LCAweEIwQkMsIDB4QjBCQywgMHgwNTc1LAorICAgIDB4QjBCRCwgMHhCMEMzLCAweDI3RkEsIDB4QjBDNCwgMHhCMEM1LCAweDA1NzYsIDB4QjBDNiwgMHhCMEM2LCAweDI4MDEsCisgICAgMHhCMEM3LCAweEIwQzksIDB4MDU3OCwgMHhCMENBLCAweEIwQ0YsIDB4MjgwMiwgMHhCMEQwLCAweEIwRDEsIDB4MDU3QiwKKyAgICAweEIwRDIsIDB4QjBEMywgMHgyODA4LCAweEIwRDQsIDB4QjBENCwgMHgwNTdELCAweEIwRDUsIDB4QjBENywgMHgyODBBLAorICAgIDB4QjBEOCwgMHhCMEQ4LCAweDA1N0UsIDB4QjBEOSwgMHhCMERGLCAweDI4MEQsIDB4QjBFMCwgMHhCMEUwLCAweDA1N0YsCisgICAgMHhCMEUxLCAweEIwRTQsIDB4MjgxNCwgMHhCMEU1LCAweEIwRTUsIDB4MDU4MCwgMHhCMEU2LCAweEIwRkYsIDB4MjgxOCwKKyAgICAweEIxMDAsIDB4QjEwNywgMHgyODMyLCAweEIxMDgsIDB4QjEwOSwgMHgwNTgxLCAweEIxMEEsIDB4QjEwQSwgMHgyODNBLAorICAgIDB4QjEwQiwgMHhCMTBDLCAweDA1ODMsIDB4QjEwRCwgMHhCMTBGLCAweDI4M0IsIDB4QjExMCwgMHhCMTEwLCAweDA1ODUsCisgICAgMHhCMTExLCAweEIxMTEsIDB4MjgzRSwgMHhCMTEyLCAweEIxMTMsIDB4MDU4NiwgMHhCMTE0LCAweEIxMTcsIDB4MjgzRiwKKyAgICAweEIxMTgsIDB4QjExOSwgMHgwNTg4LCAweEIxMUEsIDB4QjExQSwgMHgyODQzLCAweEIxMUIsIDB4QjExRCwgMHgwNThBLAorICAgIDB4QjExRSwgMHhCMTIyLCAweDI4NDQsIDB4QjEyMywgMHhCMTI1LCAweDA1OEQsIDB4QjEyNiwgMHhCMTI3LCAweDI4NDksCisgICAgMHhCMTI4LCAweEIxMjgsIDB4MDU5MCwgMHhCMTI5LCAweEIxMkIsIDB4Mjg0QiwgMHhCMTJDLCAweEIxMkMsIDB4MDU5MSwKKyAgICAweEIxMkQsIDB4QjEzMywgMHgyODRFLCAweEIxMzQsIDB4QjEzNSwgMHgwNTkyLCAweEIxMzYsIDB4QjEzNiwgMHgyODU1LAorICAgIDB4QjEzNywgMHhCMTM5LCAweDA1OTQsIDB4QjEzQSwgMHhCMTNGLCAweDI4NTYsIDB4QjE0MCwgMHhCMTQxLCAweDA1OTcsCisgICAgMHhCMTQyLCAweEIxNDMsIDB4Mjg1QywgMHhCMTQ0LCAweEIxNDQsIDB4MDU5OSwgMHhCMTQ1LCAweEIxNDcsIDB4Mjg1RSwKKyAgICAweEIxNDgsIDB4QjE0OCwgMHgwNTlBLCAweEIxNDksIDB4QjE0RiwgMHgyODYxLCAweEIxNTAsIDB4QjE1MSwgMHgwNTlCLAorICAgIDB4QjE1MiwgMHhCMTUzLCAweDI4NjgsIDB4QjE1NCwgMHhCMTU1LCAweDA1OUQsIDB4QjE1NiwgMHhCMTU3LCAweDI4NkEsCisgICAgMHhCMTU4LCAweEIxNTgsIDB4MDU5RiwgMHhCMTU5LCAweEIxNUIsIDB4Mjg2QywgMHhCMTVDLCAweEIxNUMsIDB4MDVBMCwKKyAgICAweEIxNUQsIDB4QjE1RiwgMHgyODZGLCAweEIxNjAsIDB4QjE2MCwgMHgwNUExLCAweEIxNjEsIDB4QjE3NywgMHgyODcyLAorICAgIDB4QjE3OCwgMHhCMTc5LCAweDA1QTIsIDB4QjE3QSwgMHhCMTdCLCAweDI4ODksIDB4QjE3QywgMHhCMTdDLCAweDA1QTQsCisgICAgMHhCMTdELCAweEIxN0YsIDB4Mjg4QiwgMHhCMTgwLCAweEIxODAsIDB4MDVBNSwgMHhCMTgxLCAweEIxODEsIDB4Mjg4RSwKKyAgICAweEIxODIsIDB4QjE4MiwgMHgwNUE2LCAweEIxODMsIDB4QjE4NywgMHgyODhGLCAweEIxODgsIDB4QjE4OSwgMHgwNUE3LAorICAgIDB4QjE4QSwgMHhCMThBLCAweDI4OTQsIDB4QjE4QiwgMHhCMThCLCAweDA1QTksIDB4QjE4QywgMHhCMThDLCAweDI4OTUsCisgICAgMHhCMThELCAweEIxOEQsIDB4MDVBQSwgMHhCMThFLCAweEIxOTEsIDB4Mjg5NiwgMHhCMTkyLCAweEIxOTQsIDB4MDVBQiwKKyAgICAweEIxOTUsIDB4QjE5NywgMHgyODlBLCAweEIxOTgsIDB4QjE5OCwgMHgwNUFFLCAweEIxOTksIDB4QjE5QiwgMHgyODlELAorICAgIDB4QjE5QywgMHhCMTlDLCAweDA1QUYsIDB4QjE5RCwgMHhCMUE3LCAweDI4QTAsIDB4QjFBOCwgMHhCMUE4LCAweDA1QjAsCisgICAgMHhCMUE5LCAweEIxQ0IsIDB4MjhBQiwgMHhCMUNDLCAweEIxQ0MsIDB4MDVCMSwgMHhCMUNELCAweEIxQ0YsIDB4MjhDRSwKKyAgICAweEIxRDAsIDB4QjFEMCwgMHgwNUIyLCAweEIxRDEsIDB4QjFEMywgMHgyOEQxLCAweEIxRDQsIDB4QjFENCwgMHgwNUIzLAorICAgIDB4QjFENSwgMHhCMURCLCAweDI4RDQsIDB4QjFEQywgMHhCMURELCAweDA1QjQsIDB4QjFERSwgMHhCMURFLCAweDI4REIsCisgICAgMHhCMURGLCAweEIxREYsIDB4MDVCNiwgMHhCMUUwLCAweEIxRTcsIDB4MjhEQywgMHhCMUU4LCAweEIxRTksIDB4MDVCNywKKyAgICAweEIxRUEsIDB4QjFFQiwgMHgyOEU0LCAweEIxRUMsIDB4QjFFQywgMHgwNUI5LCAweEIxRUQsIDB4QjFFRiwgMHgyOEU2LAorICAgIDB4QjFGMCwgMHhCMUYwLCAweDA1QkEsIDB4QjFGMSwgMHhCMUY4LCAweDI4RTksIDB4QjFGOSwgMHhCMUY5LCAweDA1QkIsCisgICAgMHhCMUZBLCAweEIxRkEsIDB4MjhGMSwgMHhCMUZCLCAweEIxRkIsIDB4MDVCQywgMHhCMUZDLCAweEIxRkMsIDB4MjhGMiwKKyAgICAweEIxRkQsIDB4QjFGRCwgMHgwNUJELCAweEIxRkUsIDB4QjFGRiwgMHgyOEYzLCAweEIyMDAsIDB4QjIwMywgMHgyOEY1LAorICAgIDB4QjIwNCwgMHhCMjA1LCAweDA1QkUsIDB4QjIwNiwgMHhCMjA3LCAweDI4RjksIDB4QjIwOCwgMHhCMjA4LCAweDA1QzAsCisgICAgMHhCMjA5LCAweEIyMEEsIDB4MjhGQiwgMHhCMjBCLCAweEIyMEMsIDB4MDVDMSwgMHhCMjBELCAweEIyMTMsIDB4MjhGRCwKKyAgICAweEIyMTQsIDB4QjIxNSwgMHgwNUMzLCAweEIyMTYsIDB4QjIxNiwgMHgyOTA0LCAweEIyMTcsIDB4QjIxNywgMHgwNUM1LAorICAgIDB4QjIxOCwgMHhCMjE4LCAweDI5MDUsIDB4QjIxOSwgMHhCMjE5LCAweDA1QzYsIDB4QjIxQSwgMHhCMjFGLCAweDI5MDYsCisgICAgMHhCMjIwLCAweEIyMjAsIDB4MDVDNywgMHhCMjIxLCAweEIyMzMsIDB4MjkwQywgMHhCMjM0LCAweEIyMzQsIDB4MDVDOCwKKyAgICAweEIyMzUsIDB4QjIzQiwgMHgyOTFGLCAweEIyM0MsIDB4QjIzQywgMHgwNUM5LCAweEIyM0QsIDB4QjI1NywgMHgyOTI2LAorICAgIDB4QjI1OCwgMHhCMjU4LCAweDA1Q0EsIDB4QjI1OSwgMHhCMjVCLCAweDI5NDEsIDB4QjI1QywgMHhCMjVDLCAweDA1Q0IsCisgICAgMHhCMjVELCAweEIyNUYsIDB4Mjk0NCwgMHhCMjYwLCAweEIyNjAsIDB4MDVDQywgMHhCMjYxLCAweEIyNjcsIDB4Mjk0NywKKyAgICAweEIyNjgsIDB4QjI2OSwgMHgwNUNELCAweEIyNkEsIDB4QjI3MywgMHgyOTRFLCAweEIyNzQsIDB4QjI3NSwgMHgwNUNGLAorICAgIDB4QjI3NiwgMHhCMjdCLCAweDI5NTgsIDB4QjI3QywgMHhCMjdDLCAweDA1RDEsIDB4QjI3RCwgMHhCMjgzLCAweDI5NUUsCisgICAgMHhCMjg0LCAweEIyODUsIDB4MDVEMiwgMHhCMjg2LCAweEIyODgsIDB4Mjk2NSwgMHhCMjg5LCAweEIyODksIDB4MDVENCwKKyAgICAweEIyOEEsIDB4QjI4RiwgMHgyOTY4LCAweEIyOTAsIDB4QjI5MSwgMHgwNUQ1LCAweEIyOTIsIDB4QjI5MywgMHgyOTZFLAorICAgIDB4QjI5NCwgMHhCMjk0LCAweDA1RDcsIDB4QjI5NSwgMHhCMjk3LCAweDI5NzAsIDB4QjI5OCwgMHhCMjlBLCAweDA1RDgsCisgICAgMHhCMjlCLCAweEIyOUYsIDB4Mjk3MywgMHhCMkEwLCAweEIyQTEsIDB4MDVEQiwgMHhCMkEyLCAweEIyQTIsIDB4Mjk3OCwKKyAgICAweEIyQTMsIDB4QjJBMywgMHgwNURELCAweEIyQTQsIDB4QjJBNCwgMHgyOTc5LCAweEIyQTUsIDB4QjJBNiwgMHgwNURFLAorICAgIDB4QjJBNywgMHhCMkE5LCAweDI5N0EsIDB4QjJBQSwgMHhCMkFBLCAweDA1RTAsIDB4QjJBQiwgMHhCMkFCLCAweDI5N0QsCisgICAgMHhCMkFDLCAweEIyQUMsIDB4MDVFMSwgMHhCMkFELCAweEIyQUYsIDB4Mjk3RSwgMHhCMkIwLCAweEIyQjAsIDB4MDVFMiwKKyAgICAweEIyQjEsIDB4QjJCMywgMHgyOTgxLCAweEIyQjQsIDB4QjJCNCwgMHgwNUUzLCAweEIyQjUsIDB4QjJDNywgMHgyOTg0LAorICAgIDB4QjJDOCwgMHhCMkM5LCAweDA1RTQsIDB4QjJDQSwgMHhCMkNCLCAweDI5OTcsIDB4QjJDQywgMHhCMkNDLCAweDA1RTYsCisgICAgMHhCMkNELCAweEIyQ0YsIDB4Mjk5OSwgMHhCMkQwLCAweEIyRDAsIDB4MDVFNywgMHhCMkQxLCAweEIyRDEsIDB4Mjk5QywKKyAgICAweEIyRDIsIDB4QjJEMiwgMHgwNUU4LCAweEIyRDMsIDB4QjJENywgMHgyOTlELCAweEIyRDgsIDB4QjJEOSwgMHgwNUU5LAorICAgIDB4QjJEQSwgMHhCMkRBLCAweDI5QTIsIDB4QjJEQiwgMHhCMkRCLCAweDA1RUIsIDB4QjJEQywgMHhCMkRDLCAweDI5QTMsCisgICAgMHhCMkRELCAweEIyREQsIDB4MDVFQywgMHhCMkRFLCAweEIyRTEsIDB4MjlBNCwgMHhCMkUyLCAweEIyRTIsIDB4MDVFRCwKKyAgICAweEIyRTMsIDB4QjJFMywgMHgyOUE4LCAweEIyRTQsIDB4QjJFNiwgMHgwNUVFLCAweEIyRTcsIDB4QjJFNywgMHgyOUE5LAorICAgIDB4QjJFOCwgMHhCMkU4LCAweDA1RjEsIDB4QjJFOSwgMHhCMkVBLCAweDI5QUEsIDB4QjJFQiwgMHhCMkVGLCAweDA1RjIsCisgICAgMHhCMkYwLCAweEIyRjIsIDB4MjlBQywgMHhCMkYzLCAweEIyRjUsIDB4MDVGNywgMHhCMkY2LCAweEIyRjYsIDB4MjlBRiwKKyAgICAweEIyRjcsIDB4QjJGQiwgMHgwNUZBLCAweEIyRkMsIDB4QjJGRSwgMHgyOUIwLCAweEIyRkYsIDB4QjJGRiwgMHgwNUZGLAorICAgIDB4QjMwMCwgMHhCMzAxLCAweDA2MDAsIDB4QjMwMiwgMHhCMzAzLCAweDI5QjMsIDB4QjMwNCwgMHhCMzA0LCAweDA2MDIsCisgICAgMHhCMzA1LCAweEIzMDcsIDB4MjlCNSwgMHhCMzA4LCAweEIzMDgsIDB4MDYwMywgMHhCMzA5LCAweEIzMEYsIDB4MjlCOCwKKyAgICAweEIzMTAsIDB4QjMxMSwgMHgwNjA0LCAweEIzMTIsIDB4QjMxMiwgMHgyOUJGLCAweEIzMTMsIDB4QjMxNSwgMHgwNjA2LAorICAgIDB4QjMxNiwgMHhCMzFCLCAweDI5QzAsIDB4QjMxQywgMHhCMzFDLCAweDA2MDksIDB4QjMxRCwgMHhCMzUzLCAweDI5QzYsCisgICAgMHhCMzU0LCAweEIzNTYsIDB4MDYwQSwgMHhCMzU3LCAweEIzNTcsIDB4MjlGRCwgMHhCMzU4LCAweEIzNTgsIDB4MDYwRCwKKyAgICAweEIzNTksIDB4QjM1QSwgMHgyOUZFLCAweEIzNUIsIDB4QjM1QywgMHgwNjBFLCAweEIzNUQsIDB4QjM1RCwgMHgyQTAwLAorICAgIDB4QjM1RSwgMHhCMzVGLCAweDA2MTAsIDB4QjM2MCwgMHhCMzYzLCAweDJBMDEsIDB4QjM2NCwgMHhCMzY1LCAweDA2MTIsCisgICAgMHhCMzY2LCAweEIzNjYsIDB4MkEwNSwgMHhCMzY3LCAweEIzNjcsIDB4MDYxNCwgMHhCMzY4LCAweEIzNjgsIDB4MkEwNiwKKyAgICAweEIzNjksIDB4QjM2OSwgMHgwNjE1LCAweEIzNkEsIDB4QjM2QSwgMHgyQTA3LCAweEIzNkIsIDB4QjM2QiwgMHgwNjE2LAorICAgIDB4QjM2QywgMHhCMzZELCAweDJBMDgsIDB4QjM2RSwgMHhCMzZFLCAweDA2MTcsIDB4QjM2RiwgMHhCMzZGLCAweDJBMEEsCisgICAgMHhCMzcwLCAweEIzNzEsIDB4MDYxOCwgMHhCMzcyLCAweEIzNzMsIDB4MkEwQiwgMHhCMzc0LCAweEIzNzQsIDB4MDYxQSwKKyAgICAweEIzNzUsIDB4QjM3NywgMHgyQTBELCAweEIzNzgsIDB4QjM3OCwgMHgwNjFCLCAweEIzNzksIDB4QjM3RiwgMHgyQTEwLAorICAgIDB4QjM4MCwgMHhCMzgxLCAweDA2MUMsIDB4QjM4MiwgMHhCMzgyLCAweDJBMTcsIDB4QjM4MywgMHhCMzg1LCAweDA2MUUsCisgICAgMHhCMzg2LCAweEIzOEIsIDB4MkExOCwgMHhCMzhDLCAweEIzOEMsIDB4MDYyMSwgMHhCMzhELCAweEIzOEYsIDB4MkExRSwKKyAgICAweEIzOTAsIDB4QjM5MCwgMHgwNjIyLCAweEIzOTEsIDB4QjM5MywgMHgyQTIxLCAweEIzOTQsIDB4QjM5NCwgMHgwNjIzLAorICAgIDB4QjM5NSwgMHhCMzlGLCAweDJBMjQsIDB4QjNBMCwgMHhCM0ExLCAweDA2MjQsIDB4QjNBMiwgMHhCM0E3LCAweDJBMkYsCisgICAgMHhCM0E4LCAweEIzQTgsIDB4MDYyNiwgMHhCM0E5LCAweEIzQUIsIDB4MkEzNSwgMHhCM0FDLCAweEIzQUMsIDB4MDYyNywKKyAgICAweEIzQUQsIDB4QjNDMywgMHgyQTM4LCAweEIzQzQsIDB4QjNDNSwgMHgwNjI4LCAweEIzQzYsIDB4QjNDNywgMHgyQTRGLAorICAgIDB4QjNDOCwgMHhCM0M4LCAweDA2MkEsIDB4QjNDOSwgMHhCM0NBLCAweDJBNTEsIDB4QjNDQiwgMHhCM0NDLCAweDA2MkIsCisgICAgMHhCM0NELCAweEIzQ0QsIDB4MkE1MywgMHhCM0NFLCAweEIzQ0UsIDB4MDYyRCwgMHhCM0NGLCAweEIzQ0YsIDB4MkE1NCwKKyAgICAweEIzRDAsIDB4QjNEMCwgMHgwNjJFLCAweEIzRDEsIDB4QjNEMywgMHgyQTU1LCAweEIzRDQsIDB4QjNENSwgMHgwNjJGLAorICAgIDB4QjNENiwgMHhCM0Q2LCAweDJBNTgsIDB4QjNENywgMHhCM0Q3LCAweDA2MzEsIDB4QjNEOCwgMHhCM0Q4LCAweDJBNTksCisgICAgMHhCM0Q5LCAweEIzRDksIDB4MDYzMiwgMHhCM0RBLCAweEIzREEsIDB4MkE1QSwgMHhCM0RCLCAweEIzREIsIDB4MDYzMywKKyAgICAweEIzREMsIDB4QjNEQywgMHgyQTVCLCAweEIzREQsIDB4QjNERCwgMHgwNjM0LCAweEIzREUsIDB4QjNERiwgMHgyQTVDLAorICAgIDB4QjNFMCwgMHhCM0UwLCAweDA2MzUsIDB4QjNFMSwgMHhCM0UzLCAweDJBNUUsIDB4QjNFNCwgMHhCM0U0LCAweDA2MzYsCisgICAgMHhCM0U1LCAweEIzRTcsIDB4MkE2MSwgMHhCM0U4LCAweEIzRTgsIDB4MDYzNywgMHhCM0U5LCAweEIzRkIsIDB4MkE2NCwKKyAgICAweEIzRkMsIDB4QjNGQywgMHgwNjM4LCAweEIzRkQsIDB4QjNGRiwgMHgyQTc3LCAweEI0MDAsIDB4QjQwRiwgMHgyQTdBLAorICAgIDB4QjQxMCwgMHhCNDEwLCAweDA2MzksIDB4QjQxMSwgMHhCNDE3LCAweDJBOEEsIDB4QjQxOCwgMHhCNDE4LCAweDA2M0EsCisgICAgMHhCNDE5LCAweEI0MUIsIDB4MkE5MSwgMHhCNDFDLCAweEI0MUMsIDB4MDYzQiwgMHhCNDFELCAweEI0MUYsIDB4MkE5NCwKKyAgICAweEI0MjAsIDB4QjQyMCwgMHgwNjNDLCAweEI0MjEsIDB4QjQyNywgMHgyQTk3LCAweEI0MjgsIDB4QjQyOSwgMHgwNjNELAorICAgIDB4QjQyQSwgMHhCNDJBLCAweDJBOUUsIDB4QjQyQiwgMHhCNDJCLCAweDA2M0YsIDB4QjQyQywgMHhCNDMzLCAweDJBOUYsCisgICAgMHhCNDM0LCAweEI0MzQsIDB4MDY0MCwgMHhCNDM1LCAweEI0NEYsIDB4MkFBNywgMHhCNDUwLCAweEI0NTEsIDB4MDY0MSwKKyAgICAweEI0NTIsIDB4QjQ1MywgMHgyQUMyLCAweEI0NTQsIDB4QjQ1NCwgMHgwNjQzLCAweEI0NTUsIDB4QjQ1NywgMHgyQUM0LAorICAgIDB4QjQ1OCwgMHhCNDU4LCAweDA2NDQsIDB4QjQ1OSwgMHhCNDVGLCAweDJBQzcsIDB4QjQ2MCwgMHhCNDYxLCAweDA2NDUsCisgICAgMHhCNDYyLCAweEI0NjIsIDB4MkFDRSwgMHhCNDYzLCAweEI0NjMsIDB4MDY0NywgMHhCNDY0LCAweEI0NjQsIDB4MkFDRiwKKyAgICAweEI0NjUsIDB4QjQ2NSwgMHgwNjQ4LCAweEI0NjYsIDB4QjQ2QiwgMHgyQUQwLCAweEI0NkMsIDB4QjQ2QywgMHgwNjQ5LAorICAgIDB4QjQ2RCwgMHhCNDdGLCAweDJBRDYsIDB4QjQ4MCwgMHhCNDgwLCAweDA2NEEsIDB4QjQ4MSwgMHhCNDg3LCAweDJBRTksCisgICAgMHhCNDg4LCAweEI0ODgsIDB4MDY0QiwgMHhCNDg5LCAweEI0OUMsIDB4MkFGMCwgMHhCNDlELCAweEI0OUQsIDB4MDY0QywKKyAgICAweEI0OUUsIDB4QjRBMywgMHgyQjA0LCAweEI0QTQsIDB4QjRBNCwgMHgwNjRELCAweEI0QTUsIDB4QjRBNywgMHgyQjBBLAorICAgIDB4QjRBOCwgMHhCNEE4LCAweDA2NEUsIDB4QjRBOSwgMHhCNEFCLCAweDJCMEQsIDB4QjRBQywgMHhCNEFDLCAweDA2NEYsCisgICAgMHhCNEFELCAweEI0QjQsIDB4MkIxMCwgMHhCNEI1LCAweEI0QjUsIDB4MDY1MCwgMHhCNEI2LCAweEI0QjYsIDB4MkIxOCwKKyAgICAweEI0QjcsIDB4QjRCNywgMHgwNjUxLCAweEI0QjgsIDB4QjRCOCwgMHgyQjE5LCAweEI0QjksIDB4QjRCOSwgMHgwNjUyLAorICAgIDB4QjRCQSwgMHhCNEJGLCAweDJCMUEsIDB4QjRDMCwgMHhCNEMwLCAweDA2NTMsIDB4QjRDMSwgMHhCNEMzLCAweDJCMjAsCisgICAgMHhCNEM0LCAweEI0QzQsIDB4MDY1NCwgMHhCNEM1LCAweEI0QzcsIDB4MkIyMywgMHhCNEM4LCAweEI0QzgsIDB4MDY1NSwKKyAgICAweEI0QzksIDB4QjRDRiwgMHgyQjI2LCAweEI0RDAsIDB4QjREMCwgMHgwNjU2LCAweEI0RDEsIDB4QjRENCwgMHgyQjJELAorICAgIDB4QjRENSwgMHhCNEQ1LCAweDA2NTcsIDB4QjRENiwgMHhCNERCLCAweDJCMzEsIDB4QjREQywgMHhCNERELCAweDA2NTgsCisgICAgMHhCNERFLCAweEI0REYsIDB4MkIzNywgMHhCNEUwLCAweEI0RTAsIDB4MDY1QSwgMHhCNEUxLCAweEI0RTIsIDB4MkIzOSwKKyAgICAweEI0RTMsIDB4QjRFNCwgMHgwNjVCLCAweEI0RTUsIDB4QjRFNSwgMHgyQjNCLCAweEI0RTYsIDB4QjRFNiwgMHgwNjVELAorICAgIDB4QjRFNywgMHhCNEVCLCAweDJCM0MsIDB4QjRFQywgMHhCNEVELCAweDA2NUUsIDB4QjRFRSwgMHhCNEVFLCAweDJCNDEsCisgICAgMHhCNEVGLCAweEI0RUYsIDB4MDY2MCwgMHhCNEYwLCAweEI0RjAsIDB4MkI0MiwgMHhCNEYxLCAweEI0RjEsIDB4MDY2MSwKKyAgICAweEI0RjIsIDB4QjRGNywgMHgyQjQzLCAweEI0RjgsIDB4QjRGOCwgMHgwNjYyLCAweEI0RjksIDB4QjRGRiwgMHgyQjQ5LAorICAgIDB4QjUwMCwgMHhCNTEzLCAweDJCNTAsIDB4QjUxNCwgMHhCNTE1LCAweDA2NjMsIDB4QjUxNiwgMHhCNTE3LCAweDJCNjQsCisgICAgMHhCNTE4LCAweEI1MTgsIDB4MDY2NSwgMHhCNTE5LCAweEI1MUEsIDB4MkI2NiwgMHhCNTFCLCAweEI1MUMsIDB4MDY2NiwKKyAgICAweEI1MUQsIDB4QjUyMywgMHgyQjY4LCAweEI1MjQsIDB4QjUyNSwgMHgwNjY4LCAweEI1MjYsIDB4QjUyNiwgMHgyQjZGLAorICAgIDB4QjUyNywgMHhCNTJBLCAweDA2NkEsIDB4QjUyQiwgMHhCNTJGLCAweDJCNzAsIDB4QjUzMCwgMHhCNTMxLCAweDA2NkUsCisgICAgMHhCNTMyLCAweEI1MzMsIDB4MkI3NSwgMHhCNTM0LCAweEI1MzQsIDB4MDY3MCwgMHhCNTM1LCAweEI1MzcsIDB4MkI3NywKKyAgICAweEI1MzgsIDB4QjUzOCwgMHgwNjcxLCAweEI1MzksIDB4QjUzRiwgMHgyQjdBLCAweEI1NDAsIDB4QjU0MSwgMHgwNjcyLAorICAgIDB4QjU0MiwgMHhCNTQyLCAweDJCODEsIDB4QjU0MywgMHhCNTQ1LCAweDA2NzQsIDB4QjU0NiwgMHhCNTRBLCAweDJCODIsCisgICAgMHhCNTRCLCAweEI1NEQsIDB4MDY3NywgMHhCNTRFLCAweEI1NEYsIDB4MkI4NywgMHhCNTUwLCAweEI1NTAsIDB4MDY3QSwKKyAgICAweEI1NTEsIDB4QjU1MywgMHgyQjg5LCAweEI1NTQsIDB4QjU1NCwgMHgwNjdCLCAweEI1NTUsIDB4QjU1QiwgMHgyQjhDLAorICAgIDB4QjU1QywgMHhCNTVELCAweDA2N0MsIDB4QjU1RSwgMHhCNTVFLCAweDJCOTMsIDB4QjU1RiwgMHhCNTYxLCAweDA2N0UsCisgICAgMHhCNTYyLCAweEI1OUYsIDB4MkI5NCwgMHhCNUEwLCAweEI1QTEsIDB4MDY4MSwgMHhCNUEyLCAweEI1QTMsIDB4MkJEMiwKKyAgICAweEI1QTQsIDB4QjVBNCwgMHgwNjgzLCAweEI1QTUsIDB4QjVBNywgMHgyQkQ0LCAweEI1QTgsIDB4QjVBOCwgMHgwNjg0LAorICAgIDB4QjVBOSwgMHhCNUE5LCAweDJCRDcsIDB4QjVBQSwgMHhCNUFCLCAweDA2ODUsIDB4QjVBQywgMHhCNUFGLCAweDJCRDgsCisgICAgMHhCNUIwLCAweEI1QjEsIDB4MDY4NywgMHhCNUIyLCAweEI1QjIsIDB4MkJEQywgMHhCNUIzLCAweEI1QjUsIDB4MDY4OSwKKyAgICAweEI1QjYsIDB4QjVCQSwgMHgyQkRELCAweEI1QkIsIDB4QjVCRCwgMHgwNjhDLCAweEI1QkUsIDB4QjVCRiwgMHgyQkUyLAorICAgIDB4QjVDMCwgMHhCNUMwLCAweDA2OEYsIDB4QjVDMSwgMHhCNUMzLCAweDJCRTQsIDB4QjVDNCwgMHhCNUM0LCAweDA2OTAsCisgICAgMHhCNUM1LCAweEI1Q0IsIDB4MkJFNywgMHhCNUNDLCAweEI1Q0QsIDB4MDY5MSwgMHhCNUNFLCAweEI1Q0UsIDB4MkJFRSwKKyAgICAweEI1Q0YsIDB4QjVEMSwgMHgwNjkzLCAweEI1RDIsIDB4QjVENywgMHgyQkVGLCAweEI1RDgsIDB4QjVEOCwgMHgwNjk2LAorICAgIDB4QjVEOSwgMHhCNUVCLCAweDJCRjUsIDB4QjVFQywgMHhCNUVDLCAweDA2OTcsIDB4QjVFRCwgMHhCNUZGLCAweDJDMDgsCisgICAgMHhCNjAwLCAweEI2MEYsIDB4MkMxQiwgMHhCNjEwLCAweEI2MTEsIDB4MDY5OCwgMHhCNjEyLCAweEI2MTMsIDB4MkMyQiwKKyAgICAweEI2MTQsIDB4QjYxNCwgMHgwNjlBLCAweEI2MTUsIDB4QjYxNywgMHgyQzJELCAweEI2MTgsIDB4QjYxOCwgMHgwNjlCLAorICAgIDB4QjYxOSwgMHhCNjI0LCAweDJDMzAsIDB4QjYyNSwgMHhCNjI1LCAweDA2OUMsIDB4QjYyNiwgMHhCNjJCLCAweDJDM0MsCisgICAgMHhCNjJDLCAweEI2MkMsIDB4MDY5RCwgMHhCNjJELCAweEI2MzMsIDB4MkM0MiwgMHhCNjM0LCAweEI2MzQsIDB4MDY5RSwKKyAgICAweEI2MzUsIDB4QjY0NywgMHgyQzQ5LCAweEI2NDgsIDB4QjY0OCwgMHgwNjlGLCAweEI2NDksIDB4QjY2MywgMHgyQzVDLAorICAgIDB4QjY2NCwgMHhCNjY0LCAweDA2QTAsIDB4QjY2NSwgMHhCNjY3LCAweDJDNzcsIDB4QjY2OCwgMHhCNjY4LCAweDA2QTEsCisgICAgMHhCNjY5LCAweEI2OUIsIDB4MkM3QSwgMHhCNjlDLCAweEI2OUQsIDB4MDZBMiwgMHhCNjlFLCAweEI2OUYsIDB4MkNBRCwKKyAgICAweEI2QTAsIDB4QjZBMCwgMHgwNkE0LCAweEI2QTEsIDB4QjZBMywgMHgyQ0FGLCAweEI2QTQsIDB4QjZBNCwgMHgwNkE1LAorICAgIDB4QjZBNSwgMHhCNkFBLCAweDJDQjIsIDB4QjZBQiwgMHhCNkFDLCAweDA2QTYsIDB4QjZBRCwgMHhCNkIwLCAweDJDQjgsCisgICAgMHhCNkIxLCAweEI2QjEsIDB4MDZBOCwgMHhCNkIyLCAweEI2RDMsIDB4MkNCQywgMHhCNkQ0LCAweEI2RDQsIDB4MDZBOSwKKyAgICAweEI2RDUsIDB4QjZFRiwgMHgyQ0RFLCAweEI2RjAsIDB4QjZGMCwgMHgwNkFBLCAweEI2RjEsIDB4QjZGMywgMHgyQ0Y5LAorICAgIDB4QjZGNCwgMHhCNkY0LCAweDA2QUIsIDB4QjZGNSwgMHhCNkY3LCAweDJDRkMsIDB4QjZGOCwgMHhCNkY4LCAweDA2QUMsCisgICAgMHhCNkY5LCAweEI2RkYsIDB4MkNGRiwgMHhCNzAwLCAweEI3MDEsIDB4MDZBRCwgMHhCNzAyLCAweEI3MDQsIDB4MkQwNiwKKyAgICAweEI3MDUsIDB4QjcwNSwgMHgwNkFGLCAweEI3MDYsIDB4QjcyNywgMHgyRDA5LCAweEI3MjgsIDB4QjcyOSwgMHgwNkIwLAorICAgIDB4QjcyQSwgMHhCNzJCLCAweDJEMkIsIDB4QjcyQywgMHhCNzJDLCAweDA2QjIsIDB4QjcyRCwgMHhCNzJFLCAweDJEMkQsCisgICAgMHhCNzJGLCAweEI3MzAsIDB4MDZCMywgMHhCNzMxLCAweEI3MzcsIDB4MkQyRiwgMHhCNzM4LCAweEI3MzksIDB4MDZCNSwKKyAgICAweEI3M0EsIDB4QjczQSwgMHgyRDM2LCAweEI3M0IsIDB4QjczQiwgMHgwNkI3LCAweEI3M0MsIDB4Qjc0MywgMHgyRDM3LAorICAgIDB4Qjc0NCwgMHhCNzQ0LCAweDA2QjgsIDB4Qjc0NSwgMHhCNzQ3LCAweDJEM0YsIDB4Qjc0OCwgMHhCNzQ4LCAweDA2QjksCisgICAgMHhCNzQ5LCAweEI3NEIsIDB4MkQ0MiwgMHhCNzRDLCAweEI3NEMsIDB4MDZCQSwgMHhCNzRELCAweEI3NTMsIDB4MkQ0NSwKKyAgICAweEI3NTQsIDB4Qjc1NSwgMHgwNkJCLCAweEI3NTYsIDB4Qjc1RiwgMHgyRDRDLCAweEI3NjAsIDB4Qjc2MCwgMHgwNkJELAorICAgIDB4Qjc2MSwgMHhCNzYzLCAweDJENTYsIDB4Qjc2NCwgMHhCNzY0LCAweDA2QkUsIDB4Qjc2NSwgMHhCNzY3LCAweDJENTksCisgICAgMHhCNzY4LCAweEI3NjgsIDB4MDZCRiwgMHhCNzY5LCAweEI3NkYsIDB4MkQ1QywgMHhCNzcwLCAweEI3NzEsIDB4MDZDMCwKKyAgICAweEI3NzIsIDB4Qjc3MiwgMHgyRDYzLCAweEI3NzMsIDB4Qjc3MywgMHgwNkMyLCAweEI3NzQsIDB4Qjc3NCwgMHgyRDY0LAorICAgIDB4Qjc3NSwgMHhCNzc1LCAweDA2QzMsIDB4Qjc3NiwgMHhCNzdCLCAweDJENjUsIDB4Qjc3QywgMHhCNzdELCAweDA2QzQsCisgICAgMHhCNzdFLCAweEI3N0YsIDB4MkQ2QiwgMHhCNzgwLCAweEI3ODAsIDB4MDZDNiwgMHhCNzgxLCAweEI3ODMsIDB4MkQ2RCwKKyAgICAweEI3ODQsIDB4Qjc4NCwgMHgwNkM3LCAweEI3ODUsIDB4Qjc4QiwgMHgyRDcwLCAweEI3OEMsIDB4Qjc4RCwgMHgwNkM4LAorICAgIDB4Qjc4RSwgMHhCNzhFLCAweDJENzcsIDB4Qjc4RiwgMHhCNzkyLCAweDA2Q0EsIDB4Qjc5MywgMHhCNzk1LCAweDJENzgsCisgICAgMHhCNzk2LCAweEI3OTksIDB4MDZDRSwgMHhCNzlBLCAweEI3OUIsIDB4MkQ3QiwgMHhCNzlDLCAweEI3OUMsIDB4MDZEMiwKKyAgICAweEI3OUQsIDB4Qjc5RiwgMHgyRDdELCAweEI3QTAsIDB4QjdBMCwgMHgwNkQzLCAweEI3QTEsIDB4QjdBNywgMHgyRDgwLAorICAgIDB4QjdBOCwgMHhCN0E5LCAweDA2RDQsIDB4QjdBQSwgMHhCN0FBLCAweDJEODcsIDB4QjdBQiwgMHhCN0FELCAweDA2RDYsCisgICAgMHhCN0FFLCAweEI3QjMsIDB4MkQ4OCwgMHhCN0I0LCAweEI3QjUsIDB4MDZEOSwgMHhCN0I2LCAweEI3QjcsIDB4MkQ4RSwKKyAgICAweEI3QjgsIDB4QjdCOCwgMHgwNkRCLCAweEI3QjksIDB4QjdDNiwgMHgyRDkwLCAweEI3QzcsIDB4QjdDNywgMHgwNkRDLAorICAgIDB4QjdDOCwgMHhCN0M4LCAweDJEOUUsIDB4QjdDOSwgMHhCN0M5LCAweDA2REQsIDB4QjdDQSwgMHhCN0VCLCAweDJEOUYsCisgICAgMHhCN0VDLCAweEI3RUQsIDB4MDZERSwgMHhCN0VFLCAweEI3RUYsIDB4MkRDMSwgMHhCN0YwLCAweEI3RjAsIDB4MDZFMCwKKyAgICAweEI3RjEsIDB4QjdGMywgMHgyREMzLCAweEI3RjQsIDB4QjdGNCwgMHgwNkUxLCAweEI3RjUsIDB4QjdGQiwgMHgyREM2LAorICAgIDB4QjdGQywgMHhCN0ZELCAweDA2RTIsIDB4QjdGRSwgMHhCN0ZFLCAweDJEQ0QsIDB4QjdGRiwgMHhCN0ZGLCAweDA2RTQsCisgICAgMHhCODAwLCAweEI4MDEsIDB4MDZFNSwgMHhCODAyLCAweEI4MDYsIDB4MkRDRSwgMHhCODA3LCAweEI4MDksIDB4MDZFNywKKyAgICAweEI4MEEsIDB4QjgwQiwgMHgyREQzLCAweEI4MEMsIDB4QjgwQywgMHgwNkVBLCAweEI4MEQsIDB4QjgwRiwgMHgyREQ1LAorICAgIDB4QjgxMCwgMHhCODEwLCAweDA2RUIsIDB4QjgxMSwgMHhCODE3LCAweDJERDgsIDB4QjgxOCwgMHhCODE5LCAweDA2RUMsCisgICAgMHhCODFBLCAweEI4MUEsIDB4MkRERiwgMHhCODFCLCAweEI4MUIsIDB4MDZFRSwgMHhCODFDLCAweEI4MUMsIDB4MkRFMCwKKyAgICAweEI4MUQsIDB4QjgxRCwgMHgwNkVGLCAweEI4MUUsIDB4QjgyMywgMHgyREUxLCAweEI4MjQsIDB4QjgyNSwgMHgwNkYwLAorICAgIDB4QjgyNiwgMHhCODI3LCAweDJERTcsIDB4QjgyOCwgMHhCODI4LCAweDA2RjIsIDB4QjgyOSwgMHhCODJCLCAweDJERTksCisgICAgMHhCODJDLCAweEI4MkMsIDB4MDZGMywgMHhCODJELCAweEI4MzMsIDB4MkRFQywgMHhCODM0LCAweEI4MzUsIDB4MDZGNCwKKyAgICAweEI4MzYsIDB4QjgzNiwgMHgyREYzLCAweEI4MzcsIDB4QjgzOSwgMHgwNkY2LCAweEI4M0EsIDB4QjgzRiwgMHgyREY0LAorICAgIDB4Qjg0MCwgMHhCODQwLCAweDA2RjksIDB4Qjg0MSwgMHhCODQzLCAweDJERkEsIDB4Qjg0NCwgMHhCODQ0LCAweDA2RkEsCisgICAgMHhCODQ1LCAweEI4NTAsIDB4MkRGRCwgMHhCODUxLCAweEI4NTEsIDB4MDZGQiwgMHhCODUyLCAweEI4NTIsIDB4MkUwOSwKKyAgICAweEI4NTMsIDB4Qjg1MywgMHgwNkZDLCAweEI4NTQsIDB4Qjg1QiwgMHgyRTBBLCAweEI4NUMsIDB4Qjg1RCwgMHgwNkZELAorICAgIDB4Qjg1RSwgMHhCODVGLCAweDJFMTIsIDB4Qjg2MCwgMHhCODYwLCAweDA2RkYsIDB4Qjg2MSwgMHhCODYzLCAweDJFMTQsCisgICAgMHhCODY0LCAweEI4NjQsIDB4MDcwMCwgMHhCODY1LCAweEI4NkIsIDB4MkUxNywgMHhCODZDLCAweEI4NkQsIDB4MDcwMSwKKyAgICAweEI4NkUsIDB4Qjg2RSwgMHgyRTFFLCAweEI4NkYsIDB4Qjg2RiwgMHgwNzAzLCAweEI4NzAsIDB4Qjg3MCwgMHgyRTFGLAorICAgIDB4Qjg3MSwgMHhCODcxLCAweDA3MDQsIDB4Qjg3MiwgMHhCODc3LCAweDJFMjAsIDB4Qjg3OCwgMHhCODc4LCAweDA3MDUsCisgICAgMHhCODc5LCAweEI4N0IsIDB4MkUyNiwgMHhCODdDLCAweEI4N0MsIDB4MDcwNiwgMHhCODdELCAweEI4OEMsIDB4MkUyOSwKKyAgICAweEI4OEQsIDB4Qjg4RCwgMHgwNzA3LCAweEI4OEUsIDB4QjhBNywgMHgyRTM5LCAweEI4QTgsIDB4QjhBOCwgMHgwNzA4LAorICAgIDB4QjhBOSwgMHhCOEFGLCAweDJFNTMsIDB4QjhCMCwgMHhCOEIwLCAweDA3MDksIDB4QjhCMSwgMHhCOEIzLCAweDJFNUEsCisgICAgMHhCOEI0LCAweEI4QjQsIDB4MDcwQSwgMHhCOEI1LCAweEI4QjcsIDB4MkU1RCwgMHhCOEI4LCAweEI4QjgsIDB4MDcwQiwKKyAgICAweEI4QjksIDB4QjhCRiwgMHgyRTYwLCAweEI4QzAsIDB4QjhDMSwgMHgwNzBDLCAweEI4QzIsIDB4QjhDMiwgMHgyRTY3LAorICAgIDB4QjhDMywgMHhCOEMzLCAweDA3MEUsIDB4QjhDNCwgMHhCOEM0LCAweDJFNjgsIDB4QjhDNSwgMHhCOEM1LCAweDA3MEYsCisgICAgMHhCOEM2LCAweEI4Q0IsIDB4MkU2OSwgMHhCOENDLCAweEI4Q0MsIDB4MDcxMCwgMHhCOENELCAweEI4Q0YsIDB4MkU2RiwKKyAgICAweEI4RDAsIDB4QjhEMCwgMHgwNzExLCAweEI4RDEsIDB4QjhEMywgMHgyRTcyLCAweEI4RDQsIDB4QjhENCwgMHgwNzEyLAorICAgIDB4QjhENSwgMHhCOERDLCAweDJFNzUsIDB4QjhERCwgMHhCOERELCAweDA3MTMsIDB4QjhERSwgMHhCOERFLCAweDJFN0QsCisgICAgMHhCOERGLCAweEI4REYsIDB4MDcxNCwgMHhCOEUwLCAweEI4RTAsIDB4MkU3RSwgMHhCOEUxLCAweEI4RTEsIDB4MDcxNSwKKyAgICAweEI4RTIsIDB4QjhFNywgMHgyRTdGLCAweEI4RTgsIDB4QjhFOSwgMHgwNzE2LCAweEI4RUEsIDB4QjhFQiwgMHgyRTg1LAorICAgIDB4QjhFQywgMHhCOEVDLCAweDA3MTgsIDB4QjhFRCwgMHhCOEVGLCAweDJFODcsIDB4QjhGMCwgMHhCOEYwLCAweDA3MTksCisgICAgMHhCOEYxLCAweEI4RjcsIDB4MkU4QSwgMHhCOEY4LCAweEI4RjksIDB4MDcxQSwgMHhCOEZBLCAweEI4RkEsIDB4MkU5MSwKKyAgICAweEI4RkIsIDB4QjhGQiwgMHgwNzFDLCAweEI4RkMsIDB4QjhGQywgMHgyRTkyLCAweEI4RkQsIDB4QjhGRCwgMHgwNzFELAorICAgIDB4QjhGRSwgMHhCOEZGLCAweDJFOTMsIDB4QjkwMCwgMHhCOTAzLCAweDJFOTUsIDB4QjkwNCwgMHhCOTA0LCAweDA3MUUsCisgICAgMHhCOTA1LCAweEI5MTcsIDB4MkU5OSwgMHhCOTE4LCAweEI5MTgsIDB4MDcxRiwgMHhCOTE5LCAweEI5MUYsIDB4MkVBQywKKyAgICAweEI5MjAsIDB4QjkyMCwgMHgwNzIwLCAweEI5MjEsIDB4QjkzQiwgMHgyRUIzLCAweEI5M0MsIDB4QjkzRCwgMHgwNzIxLAorICAgIDB4QjkzRSwgMHhCOTNGLCAweDJFQ0UsIDB4Qjk0MCwgMHhCOTQwLCAweDA3MjMsIDB4Qjk0MSwgMHhCOTQzLCAweDJFRDAsCisgICAgMHhCOTQ0LCAweEI5NDQsIDB4MDcyNCwgMHhCOTQ1LCAweEI5NEIsIDB4MkVEMywgMHhCOTRDLCAweEI5NEMsIDB4MDcyNSwKKyAgICAweEI5NEQsIDB4Qjk0RSwgMHgyRURBLCAweEI5NEYsIDB4Qjk0RiwgMHgwNzI2LCAweEI5NTAsIDB4Qjk1MCwgMHgyRURDLAorICAgIDB4Qjk1MSwgMHhCOTUxLCAweDA3MjcsIDB4Qjk1MiwgMHhCOTU3LCAweDJFREQsIDB4Qjk1OCwgMHhCOTU5LCAweDA3MjgsCisgICAgMHhCOTVBLCAweEI5NUIsIDB4MkVFMywgMHhCOTVDLCAweEI5NUMsIDB4MDcyQSwgMHhCOTVELCAweEI5NUYsIDB4MkVFNSwKKyAgICAweEI5NjAsIDB4Qjk2MCwgMHgwNzJCLCAweEI5NjEsIDB4Qjk2NywgMHgyRUU4LCAweEI5NjgsIDB4Qjk2OSwgMHgwNzJDLAorICAgIDB4Qjk2QSwgMHhCOTZBLCAweDJFRUYsIDB4Qjk2QiwgMHhCOTZCLCAweDA3MkUsIDB4Qjk2QywgMHhCOTZDLCAweDJFRjAsCisgICAgMHhCOTZELCAweEI5NkQsIDB4MDcyRiwgMHhCOTZFLCAweEI5NzMsIDB4MkVGMSwgMHhCOTc0LCAweEI5NzUsIDB4MDczMCwKKyAgICAweEI5NzYsIDB4Qjk3NywgMHgyRUY3LCAweEI5NzgsIDB4Qjk3OCwgMHgwNzMyLCAweEI5NzksIDB4Qjk3QiwgMHgyRUY5LAorICAgIDB4Qjk3QywgMHhCOTdDLCAweDA3MzMsIDB4Qjk3RCwgMHhCOTgzLCAweDJFRkMsIDB4Qjk4NCwgMHhCOTg1LCAweDA3MzQsCisgICAgMHhCOTg2LCAweEI5ODYsIDB4MkYwMywgMHhCOTg3LCAweEI5ODcsIDB4MDczNiwgMHhCOTg4LCAweEI5ODgsIDB4MkYwNCwKKyAgICAweEI5ODksIDB4Qjk4QSwgMHgwNzM3LCAweEI5OEIsIDB4Qjk4QywgMHgyRjA1LCAweEI5OEQsIDB4Qjk4RSwgMHgwNzM5LAorICAgIDB4Qjk4RiwgMHhCOUFCLCAweDJGMDcsIDB4QjlBQywgMHhCOUFELCAweDA3M0IsIDB4QjlBRSwgMHhCOUFGLCAweDJGMjQsCisgICAgMHhCOUIwLCAweEI5QjAsIDB4MDczRCwgMHhCOUIxLCAweEI5QjMsIDB4MkYyNiwgMHhCOUI0LCAweEI5QjQsIDB4MDczRSwKKyAgICAweEI5QjUsIDB4QjlCQiwgMHgyRjI5LCAweEI5QkMsIDB4QjlCRCwgMHgwNzNGLCAweEI5QkUsIDB4QjlCRSwgMHgyRjMwLAorICAgIDB4QjlCRiwgMHhCOUJGLCAweDA3NDEsIDB4QjlDMCwgMHhCOUMwLCAweDJGMzEsIDB4QjlDMSwgMHhCOUMxLCAweDA3NDIsCisgICAgMHhCOUMyLCAweEI5QzcsIDB4MkYzMiwgMHhCOUM4LCAweEI5QzksIDB4MDc0MywgMHhCOUNBLCAweEI5Q0IsIDB4MkYzOCwKKyAgICAweEI5Q0MsIDB4QjlDQywgMHgwNzQ1LCAweEI5Q0QsIDB4QjlDRCwgMHgyRjNBLCAweEI5Q0UsIDB4QjlEMiwgMHgwNzQ2LAorICAgIDB4QjlEMywgMHhCOUQ3LCAweDJGM0IsIDB4QjlEOCwgMHhCOUQ5LCAweDA3NEIsIDB4QjlEQSwgMHhCOURBLCAweDJGNDAsCisgICAgMHhCOURCLCAweEI5REIsIDB4MDc0RCwgMHhCOURDLCAweEI5REMsIDB4MkY0MSwgMHhCOURELCAweEI5REUsIDB4MDc0RSwKKyAgICAweEI5REYsIDB4QjlFMCwgMHgyRjQyLCAweEI5RTEsIDB4QjlFMSwgMHgwNzUwLCAweEI5RTIsIDB4QjlFMiwgMHgyRjQ0LAorICAgIDB4QjlFMywgMHhCOUU1LCAweDA3NTEsIDB4QjlFNiwgMHhCOUU3LCAweDJGNDUsIDB4QjlFOCwgMHhCOUU4LCAweDA3NTQsCisgICAgMHhCOUU5LCAweEI5RUIsIDB4MkY0NywgMHhCOUVDLCAweEI5RUMsIDB4MDc1NSwgMHhCOUVELCAweEI5RjMsIDB4MkY0QSwKKyAgICAweEI5RjQsIDB4QjlGNSwgMHgwNzU2LCAweEI5RjYsIDB4QjlGNiwgMHgyRjUxLCAweEI5RjcsIDB4QjlGQSwgMHgwNzU4LAorICAgIDB4QjlGQiwgMHhCOUZGLCAweDJGNTIsIDB4QkEwMCwgMHhCQTAxLCAweDA3NUMsIDB4QkEwMiwgMHhCQTA3LCAweDJGNTcsCisgICAgMHhCQTA4LCAweEJBMDgsIDB4MDc1RSwgMHhCQTA5LCAweEJBMTQsIDB4MkY1RCwgMHhCQTE1LCAweEJBMTUsIDB4MDc1RiwKKyAgICAweEJBMTYsIDB4QkEzNywgMHgyRjY5LCAweEJBMzgsIDB4QkEzOSwgMHgwNzYwLCAweEJBM0EsIDB4QkEzQiwgMHgyRjhCLAorICAgIDB4QkEzQywgMHhCQTNDLCAweDA3NjIsIDB4QkEzRCwgMHhCQTNGLCAweDJGOEQsIDB4QkE0MCwgMHhCQTQwLCAweDA3NjMsCisgICAgMHhCQTQxLCAweEJBNDEsIDB4MkY5MCwgMHhCQTQyLCAweEJBNDIsIDB4MDc2NCwgMHhCQTQzLCAweEJBNDcsIDB4MkY5MSwKKyAgICAweEJBNDgsIDB4QkE0OSwgMHgwNzY1LCAweEJBNEEsIDB4QkE0QSwgMHgyRjk2LCAweEJBNEIsIDB4QkE0QiwgMHgwNzY3LAorICAgIDB4QkE0QywgMHhCQTRDLCAweDJGOTcsIDB4QkE0RCwgMHhCQTRFLCAweDA3NjgsIDB4QkE0RiwgMHhCQTUyLCAweDJGOTgsCisgICAgMHhCQTUzLCAweEJBNTUsIDB4MDc2QSwgMHhCQTU2LCAweEJBNTcsIDB4MkY5QywgMHhCQTU4LCAweEJBNTgsIDB4MDc2RCwKKyAgICAweEJBNTksIDB4QkE1QiwgMHgyRjlFLCAweEJBNUMsIDB4QkE1QywgMHgwNzZFLCAweEJBNUQsIDB4QkE2MywgMHgyRkExLAorICAgIDB4QkE2NCwgMHhCQTY1LCAweDA3NkYsIDB4QkE2NiwgMHhCQTY2LCAweDJGQTgsIDB4QkE2NywgMHhCQTY5LCAweDA3NzEsCisgICAgMHhCQTZBLCAweEJBNkYsIDB4MkZBOSwgMHhCQTcwLCAweEJBNzEsIDB4MDc3NCwgMHhCQTcyLCAweEJBNzMsIDB4MkZBRiwKKyAgICAweEJBNzQsIDB4QkE3NCwgMHgwNzc2LCAweEJBNzUsIDB4QkE3NywgMHgyRkIxLCAweEJBNzgsIDB4QkE3OCwgMHgwNzc3LAorICAgIDB4QkE3OSwgMHhCQTgyLCAweDJGQjQsIDB4QkE4MywgMHhCQTg1LCAweDA3NzgsIDB4QkE4NiwgMHhCQTg2LCAweDJGQkUsCisgICAgMHhCQTg3LCAweEJBODcsIDB4MDc3QiwgMHhCQTg4LCAweEJBOEIsIDB4MkZCRiwgMHhCQThDLCAweEJBOEMsIDB4MDc3QywKKyAgICAweEJBOEQsIDB4QkFBNywgMHgyRkMzLCAweEJBQTgsIDB4QkFBOSwgMHgwNzdELCAweEJBQUEsIDB4QkFBQSwgMHgyRkRFLAorICAgIDB4QkFBQiwgMHhCQUFDLCAweDA3N0YsIDB4QkFBRCwgMHhCQUFGLCAweDJGREYsIDB4QkFCMCwgMHhCQUIwLCAweDA3ODEsCisgICAgMHhCQUIxLCAweEJBQjEsIDB4MkZFMiwgMHhCQUIyLCAweEJBQjIsIDB4MDc4MiwgMHhCQUIzLCAweEJBQjcsIDB4MkZFMywKKyAgICAweEJBQjgsIDB4QkFCOSwgMHgwNzgzLCAweEJBQkEsIDB4QkFCQSwgMHgyRkU4LCAweEJBQkIsIDB4QkFCQiwgMHgwNzg1LAorICAgIDB4QkFCQywgMHhCQUJDLCAweDJGRTksIDB4QkFCRCwgMHhCQUJELCAweDA3ODYsIDB4QkFCRSwgMHhCQUMzLCAweDJGRUEsCisgICAgMHhCQUM0LCAweEJBQzQsIDB4MDc4NywgMHhCQUM1LCAweEJBQzcsIDB4MkZGMCwgMHhCQUM4LCAweEJBQzgsIDB4MDc4OCwKKyAgICAweEJBQzksIDB4QkFENywgMHgyRkYzLCAweEJBRDgsIDB4QkFEOSwgMHgwNzg5LCAweEJBREEsIDB4QkFGQiwgMHgzMDAyLAorICAgIDB4QkFGQywgMHhCQUZDLCAweDA3OEIsIDB4QkFGRCwgMHhCQUZGLCAweDMwMjQsIDB4QkIwMCwgMHhCQjAwLCAweDA3OEMsCisgICAgMHhCQjAxLCAweEJCMDMsIDB4MzAyNywgMHhCQjA0LCAweEJCMDQsIDB4MDc4RCwgMHhCQjA1LCAweEJCMEMsIDB4MzAyQSwKKyAgICAweEJCMEQsIDB4QkIwRCwgMHgwNzhFLCAweEJCMEUsIDB4QkIwRSwgMHgzMDMyLCAweEJCMEYsIDB4QkIwRiwgMHgwNzhGLAorICAgIDB4QkIxMCwgMHhCQjEwLCAweDMwMzMsIDB4QkIxMSwgMHhCQjExLCAweDA3OTAsIDB4QkIxMiwgMHhCQjE3LCAweDMwMzQsCisgICAgMHhCQjE4LCAweEJCMTgsIDB4MDc5MSwgMHhCQjE5LCAweEJCMUIsIDB4MzAzQSwgMHhCQjFDLCAweEJCMUMsIDB4MDc5MiwKKyAgICAweEJCMUQsIDB4QkIxRiwgMHgzMDNELCAweEJCMjAsIDB4QkIyMCwgMHgwNzkzLCAweEJCMjEsIDB4QkIyOCwgMHgzMDQwLAorICAgIDB4QkIyOSwgMHhCQjI5LCAweDA3OTQsIDB4QkIyQSwgMHhCQjJBLCAweDMwNDgsIDB4QkIyQiwgMHhCQjJCLCAweDA3OTUsCisgICAgMHhCQjJDLCAweEJCMzMsIDB4MzA0OSwgMHhCQjM0LCAweEJCMzYsIDB4MDc5NiwgMHhCQjM3LCAweEJCMzcsIDB4MzA1MSwKKyAgICAweEJCMzgsIDB4QkIzOCwgMHgwNzk5LCAweEJCMzksIDB4QkIzQSwgMHgzMDUyLCAweEJCM0IsIDB4QkIzRSwgMHgwNzlBLAorICAgIDB4QkIzRiwgMHhCQjQzLCAweDMwNTQsIDB4QkI0NCwgMHhCQjQ1LCAweDA3OUUsIDB4QkI0NiwgMHhCQjQ2LCAweDMwNTksCisgICAgMHhCQjQ3LCAweEJCNDcsIDB4MDdBMCwgMHhCQjQ4LCAweEJCNDgsIDB4MzA1QSwgMHhCQjQ5LCAweEJCNDksIDB4MDdBMSwKKyAgICAweEJCNEEsIDB4QkI0QywgMHgzMDVCLCAweEJCNEQsIDB4QkI0RCwgMHgwN0EyLCAweEJCNEUsIDB4QkI0RSwgMHgzMDVFLAorICAgIDB4QkI0RiwgMHhCQjUwLCAweDA3QTMsIDB4QkI1MSwgMHhCQjUzLCAweDMwNUYsIDB4QkI1NCwgMHhCQjU0LCAweDA3QTUsCisgICAgMHhCQjU1LCAweEJCNTcsIDB4MzA2MiwgMHhCQjU4LCAweEJCNTgsIDB4MDdBNiwgMHhCQjU5LCAweEJCNjAsIDB4MzA2NSwKKyAgICAweEJCNjEsIDB4QkI2MSwgMHgwN0E3LCAweEJCNjIsIDB4QkI2MiwgMHgzMDZELCAweEJCNjMsIDB4QkI2MywgMHgwN0E4LAorICAgIDB4QkI2NCwgMHhCQjZCLCAweDMwNkUsIDB4QkI2QywgMHhCQjZDLCAweDA3QTksIDB4QkI2RCwgMHhCQjg3LCAweDMwNzYsCisgICAgMHhCQjg4LCAweEJCODgsIDB4MDdBQSwgMHhCQjg5LCAweEJCOEIsIDB4MzA5MSwgMHhCQjhDLCAweEJCOEMsIDB4MDdBQiwKKyAgICAweEJCOEQsIDB4QkI4RiwgMHgzMDk0LCAweEJCOTAsIDB4QkI5MCwgMHgwN0FDLCAweEJCOTEsIDB4QkJBMywgMHgzMDk3LAorICAgIDB4QkJBNCwgMHhCQkE0LCAweDA3QUQsIDB4QkJBNSwgMHhCQkE3LCAweDMwQUEsIDB4QkJBOCwgMHhCQkE4LCAweDA3QUUsCisgICAgMHhCQkE5LCAweEJCQUIsIDB4MzBBRCwgMHhCQkFDLCAweEJCQUMsIDB4MDdBRiwgMHhCQkFELCAweEJCQjMsIDB4MzBCMCwKKyAgICAweEJCQjQsIDB4QkJCNCwgMHgwN0IwLCAweEJCQjUsIDB4QkJCNiwgMHgzMEI3LCAweEJCQjcsIDB4QkJCNywgMHgwN0IxLAorICAgIDB4QkJCOCwgMHhCQkJGLCAweDMwQjksIDB4QkJDMCwgMHhCQkMwLCAweDA3QjIsIDB4QkJDMSwgMHhCQkMzLCAweDMwQzEsCisgICAgMHhCQkM0LCAweEJCQzQsIDB4MDdCMywgMHhCQkM1LCAweEJCQzcsIDB4MzBDNCwgMHhCQkM4LCAweEJCQzgsIDB4MDdCNCwKKyAgICAweEJCQzksIDB4QkJDRiwgMHgzMEM3LCAweEJCRDAsIDB4QkJEMCwgMHgwN0I1LCAweEJCRDEsIDB4QkJEMiwgMHgzMENFLAorICAgIDB4QkJEMywgMHhCQkQzLCAweDA3QjYsIDB4QkJENCwgMHhCQkY3LCAweDMwRDAsIDB4QkJGOCwgMHhCQkY5LCAweDA3QjcsCisgICAgMHhCQkZBLCAweEJCRkIsIDB4MzBGNCwgMHhCQkZDLCAweEJCRkMsIDB4MDdCOSwgMHhCQkZELCAweEJCRkUsIDB4MzBGNiwKKyAgICAweEJCRkYsIDB4QkJGRiwgMHgwN0JBLCAweEJDMDAsIDB4QkMwMCwgMHgwN0JCLCAweEJDMDEsIDB4QkMwMSwgMHgzMEY4LAorICAgIDB4QkMwMiwgMHhCQzAyLCAweDA3QkMsIDB4QkMwMywgMHhCQzA3LCAweDMwRjksIDB4QkMwOCwgMHhCQzA5LCAweDA3QkQsCisgICAgMHhCQzBBLCAweEJDMEEsIDB4MzBGRSwgMHhCQzBCLCAweEJDMEQsIDB4MDdCRiwgMHhCQzBFLCAweEJDMEUsIDB4MzBGRiwKKyAgICAweEJDMEYsIDB4QkMwRiwgMHgwN0MyLCAweEJDMTAsIDB4QkMxMCwgMHgzMTAwLCAweEJDMTEsIDB4QkMxMSwgMHgwN0MzLAorICAgIDB4QkMxMiwgMHhCQzEzLCAweDMxMDEsIDB4QkMxNCwgMHhCQzE4LCAweDA3QzQsIDB4QkMxOSwgMHhCQzFBLCAweDMxMDMsCisgICAgMHhCQzFCLCAweEJDMUYsIDB4MDdDOSwgMHhCQzIwLCAweEJDMjMsIDB4MzEwNSwgMHhCQzI0LCAweEJDMjUsIDB4MDdDRSwKKyAgICAweEJDMjYsIDB4QkMyNiwgMHgzMTA5LCAweEJDMjcsIDB4QkMyNywgMHgwN0QwLCAweEJDMjgsIDB4QkMyOCwgMHgzMTBBLAorICAgIDB4QkMyOSwgMHhCQzI5LCAweDA3RDEsIDB4QkMyQSwgMHhCQzJDLCAweDMxMEIsIDB4QkMyRCwgMHhCQzJELCAweDA3RDIsCisgICAgMHhCQzJFLCAweEJDMkYsIDB4MzEwRSwgMHhCQzMwLCAweEJDMzEsIDB4MDdEMywgMHhCQzMyLCAweEJDMzMsIDB4MzExMCwKKyAgICAweEJDMzQsIDB4QkMzNCwgMHgwN0Q1LCAweEJDMzUsIDB4QkMzNywgMHgzMTEyLCAweEJDMzgsIDB4QkMzOCwgMHgwN0Q2LAorICAgIDB4QkMzOSwgMHhCQzNGLCAweDMxMTUsIDB4QkM0MCwgMHhCQzQxLCAweDA3RDcsIDB4QkM0MiwgMHhCQzQyLCAweDMxMUMsCisgICAgMHhCQzQzLCAweEJDNDUsIDB4MDdEOSwgMHhCQzQ2LCAweEJDNDgsIDB4MzExRCwgMHhCQzQ5LCAweEJDNDksIDB4MDdEQywKKyAgICAweEJDNEEsIDB4QkM0QiwgMHgzMTIwLCAweEJDNEMsIDB4QkM0RCwgMHgwN0RELCAweEJDNEUsIDB4QkM0RiwgMHgzMTIyLAorICAgIDB4QkM1MCwgMHhCQzUwLCAweDA3REYsIDB4QkM1MSwgMHhCQzVDLCAweDMxMjQsIDB4QkM1RCwgMHhCQzVELCAweDA3RTAsCisgICAgMHhCQzVFLCAweEJDODMsIDB4MzEzMCwgMHhCQzg0LCAweEJDODUsIDB4MDdFMSwgMHhCQzg2LCAweEJDODcsIDB4MzE1NiwKKyAgICAweEJDODgsIDB4QkM4OCwgMHgwN0UzLCAweEJDODksIDB4QkM4QSwgMHgzMTU4LCAweEJDOEIsIDB4QkM4QywgMHgwN0U0LAorICAgIDB4QkM4RCwgMHhCQzhELCAweDMxNUEsIDB4QkM4RSwgMHhCQzhFLCAweDA3RTYsIDB4QkM4RiwgMHhCQzkzLCAweDMxNUIsCisgICAgMHhCQzk0LCAweEJDOTUsIDB4MDdFNywgMHhCQzk2LCAweEJDOTYsIDB4MzE2MCwgMHhCQzk3LCAweEJDOTcsIDB4MDdFOSwKKyAgICAweEJDOTgsIDB4QkM5OCwgMHgzMTYxLCAweEJDOTksIDB4QkM5QSwgMHgwN0VBLCAweEJDOUIsIDB4QkM5RiwgMHgzMTYyLAorICAgIDB4QkNBMCwgMHhCQ0ExLCAweDA3RUMsIDB4QkNBMiwgMHhCQ0EzLCAweDMxNjcsIDB4QkNBNCwgMHhCQ0E0LCAweDA3RUUsCisgICAgMHhCQ0E1LCAweEJDQTYsIDB4MzE2OSwgMHhCQ0E3LCAweEJDQTgsIDB4MDdFRiwgMHhCQ0E5LCAweEJDQUYsIDB4MzE2QiwKKyAgICAweEJDQjAsIDB4QkNCMSwgMHgwN0YxLCAweEJDQjIsIDB4QkNCMiwgMHgzMTcyLCAweEJDQjMsIDB4QkNCNSwgMHgwN0YzLAorICAgIDB4QkNCNiwgMHhCQ0JCLCAweDMxNzMsIDB4QkNCQywgMHhCQ0JELCAweDA3RjYsIDB4QkNCRSwgMHhCQ0JGLCAweDMxNzksCisgICAgMHhCQ0MwLCAweEJDQzAsIDB4MDdGOCwgMHhCQ0MxLCAweEJDQzMsIDB4MzE3QiwgMHhCQ0M0LCAweEJDQzQsIDB4MDdGOSwKKyAgICAweEJDQzUsIDB4QkNDQywgMHgzMTdFLCAweEJDQ0QsIDB4QkNDRCwgMHgwN0ZBLCAweEJDQ0UsIDB4QkNDRSwgMHgzMTg2LAorICAgIDB4QkNDRiwgMHhCQ0QxLCAweDA3RkIsIDB4QkNEMiwgMHhCQ0Q0LCAweDMxODcsIDB4QkNENSwgMHhCQ0Q1LCAweDA3RkUsCisgICAgMHhCQ0Q2LCAweEJDRDcsIDB4MzE4QSwgMHhCQ0Q4LCAweEJDRDgsIDB4MDdGRiwgMHhCQ0Q5LCAweEJDREIsIDB4MzE4QywKKyAgICAweEJDREMsIDB4QkNEQywgMHgwODAwLCAweEJDREQsIDB4QkNGMywgMHgzMThGLCAweEJDRjQsIDB4QkNGNiwgMHgwODAxLAorICAgIDB4QkNGNywgMHhCQ0Y3LCAweDMxQTYsIDB4QkNGOCwgMHhCQ0Y4LCAweDA4MDQsIDB4QkNGOSwgMHhCQ0ZCLCAweDMxQTcsCisgICAgMHhCQ0ZDLCAweEJDRkMsIDB4MDgwNSwgMHhCQ0ZELCAweEJDRkYsIDB4MzFBQSwgMHhCRDAwLCAweEJEMDMsIDB4MzFBRCwKKyAgICAweEJEMDQsIDB4QkQwNSwgMHgwODA2LCAweEJEMDYsIDB4QkQwNiwgMHgzMUIxLCAweEJEMDcsIDB4QkQwNywgMHgwODA4LAorICAgIDB4QkQwOCwgMHhCRDA4LCAweDMxQjIsIDB4QkQwOSwgMHhCRDA5LCAweDA4MDksIDB4QkQwQSwgMHhCRDBGLCAweDMxQjMsCisgICAgMHhCRDEwLCAweEJEMTAsIDB4MDgwQSwgMHhCRDExLCAweEJEMTMsIDB4MzFCOSwgMHhCRDE0LCAweEJEMTQsIDB4MDgwQiwKKyAgICAweEJEMTUsIDB4QkQyMywgMHgzMUJDLCAweEJEMjQsIDB4QkQyNCwgMHgwODBDLCAweEJEMjUsIDB4QkQyQiwgMHgzMUNCLAorICAgIDB4QkQyQywgMHhCRDJDLCAweDA4MEQsIDB4QkQyRCwgMHhCRDNGLCAweDMxRDIsIDB4QkQ0MCwgMHhCRDQwLCAweDA4MEUsCisgICAgMHhCRDQxLCAweEJENDcsIDB4MzFFNSwgMHhCRDQ4LCAweEJENDksIDB4MDgwRiwgMHhCRDRBLCAweEJENEIsIDB4MzFFQywKKyAgICAweEJENEMsIDB4QkQ0QywgMHgwODExLCAweEJENEQsIDB4QkQ0RiwgMHgzMUVFLCAweEJENTAsIDB4QkQ1MCwgMHgwODEyLAorICAgIDB4QkQ1MSwgMHhCRDU3LCAweDMxRjEsIDB4QkQ1OCwgMHhCRDU5LCAweDA4MTMsIDB4QkQ1QSwgMHhCRDYzLCAweDMxRjgsCisgICAgMHhCRDY0LCAweEJENjQsIDB4MDgxNSwgMHhCRDY1LCAweEJENjcsIDB4MzIwMiwgMHhCRDY4LCAweEJENjgsIDB4MDgxNiwKKyAgICAweEJENjksIDB4QkQ3RiwgMHgzMjA1LCAweEJEODAsIDB4QkQ4MSwgMHgwODE3LCAweEJEODIsIDB4QkQ4MywgMHgzMjFDLAorICAgIDB4QkQ4NCwgMHhCRDg0LCAweDA4MTksIDB4QkQ4NSwgMHhCRDg2LCAweDMyMUUsIDB4QkQ4NywgMHhCRDhBLCAweDA4MUEsCisgICAgMHhCRDhCLCAweEJEOEYsIDB4MzIyMCwgMHhCRDkwLCAweEJEOTEsIDB4MDgxRSwgMHhCRDkyLCAweEJEOTIsIDB4MzIyNSwKKyAgICAweEJEOTMsIDB4QkQ5MywgMHgwODIwLCAweEJEOTQsIDB4QkQ5NCwgMHgzMjI2LCAweEJEOTUsIDB4QkQ5NSwgMHgwODIxLAorICAgIDB4QkQ5NiwgMHhCRDk4LCAweDMyMjcsIDB4QkQ5OSwgMHhCRDlBLCAweDA4MjIsIDB4QkQ5QiwgMHhCRDlCLCAweDMyMkEsCisgICAgMHhCRDlDLCAweEJEOUMsIDB4MDgyNCwgMHhCRDlELCAweEJEQTMsIDB4MzIyQiwgMHhCREE0LCAweEJEQTQsIDB4MDgyNSwKKyAgICAweEJEQTUsIDB4QkRBRiwgMHgzMjMyLCAweEJEQjAsIDB4QkRCMCwgMHgwODI2LCAweEJEQjEsIDB4QkRCNywgMHgzMjNELAorICAgIDB4QkRCOCwgMHhCREI4LCAweDA4MjcsIDB4QkRCOSwgMHhCREQzLCAweDMyNDQsIDB4QkRENCwgMHhCREQ1LCAweDA4MjgsCisgICAgMHhCREQ2LCAweEJERDcsIDB4MzI1RiwgMHhCREQ4LCAweEJERDgsIDB4MDgyQSwgMHhCREQ5LCAweEJEREIsIDB4MzI2MSwKKyAgICAweEJEREMsIDB4QkREQywgMHgwODJCLCAweEJEREQsIDB4QkRFOCwgMHgzMjY0LCAweEJERTksIDB4QkRFOSwgMHgwODJDLAorICAgIDB4QkRFQSwgMHhCREVGLCAweDMyNzAsIDB4QkRGMCwgMHhCREYwLCAweDA4MkQsIDB4QkRGMSwgMHhCREYzLCAweDMyNzYsCisgICAgMHhCREY0LCAweEJERjQsIDB4MDgyRSwgMHhCREY1LCAweEJERjcsIDB4MzI3OSwgMHhCREY4LCAweEJERjgsIDB4MDgyRiwKKyAgICAweEJERjksIDB4QkRGRiwgMHgzMjdDLCAweEJFMDAsIDB4QkUwMCwgMHgwODMwLCAweEJFMDEsIDB4QkUwMiwgMHgzMjgzLAorICAgIDB4QkUwMywgMHhCRTAzLCAweDA4MzEsIDB4QkUwNCwgMHhCRTA0LCAweDMyODUsIDB4QkUwNSwgMHhCRTA1LCAweDA4MzIsCisgICAgMHhCRTA2LCAweEJFMEIsIDB4MzI4NiwgMHhCRTBDLCAweEJFMEQsIDB4MDgzMywgMHhCRTBFLCAweEJFMEYsIDB4MzI4QywKKyAgICAweEJFMTAsIDB4QkUxMCwgMHgwODM1LCAweEJFMTEsIDB4QkUxMywgMHgzMjhFLCAweEJFMTQsIDB4QkUxNCwgMHgwODM2LAorICAgIDB4QkUxNSwgMHhCRTFCLCAweDMyOTEsIDB4QkUxQywgMHhCRTFELCAweDA4MzcsIDB4QkUxRSwgMHhCRTFFLCAweDMyOTgsCisgICAgMHhCRTFGLCAweEJFMUYsIDB4MDgzOSwgMHhCRTIwLCAweEJFNDMsIDB4MzI5OSwgMHhCRTQ0LCAweEJFNDUsIDB4MDgzQSwKKyAgICAweEJFNDYsIDB4QkU0NywgMHgzMkJELCAweEJFNDgsIDB4QkU0OCwgMHgwODNDLCAweEJFNDksIDB4QkU0QiwgMHgzMkJGLAorICAgIDB4QkU0QywgMHhCRTRDLCAweDA4M0QsIDB4QkU0RCwgMHhCRTRELCAweDMyQzIsIDB4QkU0RSwgMHhCRTRFLCAweDA4M0UsCisgICAgMHhCRTRGLCAweEJFNTMsIDB4MzJDMywgMHhCRTU0LCAweEJFNTUsIDB4MDgzRiwgMHhCRTU2LCAweEJFNTYsIDB4MzJDOCwKKyAgICAweEJFNTcsIDB4QkU1NywgMHgwODQxLCAweEJFNTgsIDB4QkU1OCwgMHgzMkM5LCAweEJFNTksIDB4QkU1QiwgMHgwODQyLAorICAgIDB4QkU1QywgMHhCRTVGLCAweDMyQ0EsIDB4QkU2MCwgMHhCRTYxLCAweDA4NDUsIDB4QkU2MiwgMHhCRTYzLCAweDMyQ0UsCisgICAgMHhCRTY0LCAweEJFNjQsIDB4MDg0NywgMHhCRTY1LCAweEJFNjcsIDB4MzJEMCwgMHhCRTY4LCAweEJFNjgsIDB4MDg0OCwKKyAgICAweEJFNjksIDB4QkU2OSwgMHgzMkQzLCAweEJFNkEsIDB4QkU2QSwgMHgwODQ5LCAweEJFNkIsIDB4QkU2RiwgMHgzMkQ0LAorICAgIDB4QkU3MCwgMHhCRTcxLCAweDA4NEEsIDB4QkU3MiwgMHhCRTcyLCAweDMyRDksIDB4QkU3MywgMHhCRTc1LCAweDA4NEMsCisgICAgMHhCRTc2LCAweEJFN0EsIDB4MzJEQSwgMHhCRTdCLCAweEJFN0QsIDB4MDg0RiwgMHhCRTdFLCAweEJFN0YsIDB4MzJERiwKKyAgICAweEJFODAsIDB4QkU4MCwgMHgwODUyLCAweEJFODEsIDB4QkU4MywgMHgzMkUxLCAweEJFODQsIDB4QkU4NCwgMHgwODUzLAorICAgIDB4QkU4NSwgMHhCRThCLCAweDMyRTQsIDB4QkU4QywgMHhCRThELCAweDA4NTQsIDB4QkU4RSwgMHhCRThFLCAweDMyRUIsCisgICAgMHhCRThGLCAweEJFOTEsIDB4MDg1NiwgMHhCRTkyLCAweEJFOTcsIDB4MzJFQywgMHhCRTk4LCAweEJFOTksIDB4MDg1OSwKKyAgICAweEJFOUEsIDB4QkVBNywgMHgzMkYyLCAweEJFQTgsIDB4QkVBOCwgMHgwODVCLCAweEJFQTksIDB4QkVDRiwgMHgzMzAwLAorICAgIDB4QkVEMCwgMHhCRUQxLCAweDA4NUMsIDB4QkVEMiwgMHhCRUQzLCAweDMzMjcsIDB4QkVENCwgMHhCRUQ0LCAweDA4NUUsCisgICAgMHhCRUQ1LCAweEJFRDYsIDB4MzMyOSwgMHhCRUQ3LCAweEJFRDgsIDB4MDg1RiwgMHhCRUQ5LCAweEJFREYsIDB4MzMyQiwKKyAgICAweEJFRTAsIDB4QkVFMCwgMHgwODYxLCAweEJFRTEsIDB4QkVFMiwgMHgzMzMyLCAweEJFRTMsIDB4QkVFNSwgMHgwODYyLAorICAgIDB4QkVFNiwgMHhCRUVCLCAweDMzMzQsIDB4QkVFQywgMHhCRUVDLCAweDA4NjUsIDB4QkVFRCwgMHhCRUZGLCAweDMzM0EsCisgICAgMHhCRjAwLCAweEJGMDAsIDB4MzM0RCwgMHhCRjAxLCAweEJGMDEsIDB4MDg2NiwgMHhCRjAyLCAweEJGMDcsIDB4MzM0RSwKKyAgICAweEJGMDgsIDB4QkYwOSwgMHgwODY3LCAweEJGMEEsIDB4QkYxNywgMHgzMzU0LCAweEJGMTgsIDB4QkYxOSwgMHgwODY5LAorICAgIDB4QkYxQSwgMHhCRjFBLCAweDMzNjIsIDB4QkYxQiwgMHhCRjFELCAweDA4NkIsIDB4QkYxRSwgMHhCRjNGLCAweDMzNjMsCisgICAgMHhCRjQwLCAweEJGNDEsIDB4MDg2RSwgMHhCRjQyLCAweEJGNDMsIDB4MzM4NSwgMHhCRjQ0LCAweEJGNDQsIDB4MDg3MCwKKyAgICAweEJGNDUsIDB4QkY0NywgMHgzMzg3LCAweEJGNDgsIDB4QkY0OCwgMHgwODcxLCAweEJGNDksIDB4QkY0RiwgMHgzMzhBLAorICAgIDB4QkY1MCwgMHhCRjUxLCAweDA4NzIsIDB4QkY1MiwgMHhCRjU0LCAweDMzOTEsIDB4QkY1NSwgMHhCRjU1LCAweDA4NzQsCisgICAgMHhCRjU2LCAweEJGOTMsIDB4MzM5NCwgMHhCRjk0LCAweEJGOTQsIDB4MDg3NSwgMHhCRjk1LCAweEJGQUYsIDB4MzNEMiwKKyAgICAweEJGQjAsIDB4QkZCMCwgMHgwODc2LCAweEJGQjEsIDB4QkZDNCwgMHgzM0VELCAweEJGQzUsIDB4QkZDNSwgMHgwODc3LAorICAgIDB4QkZDNiwgMHhCRkNCLCAweDM0MDEsIDB4QkZDQywgMHhCRkNELCAweDA4NzgsIDB4QkZDRSwgMHhCRkNGLCAweDM0MDcsCisgICAgMHhCRkQwLCAweEJGRDAsIDB4MDg3QSwgMHhCRkQxLCAweEJGRDMsIDB4MzQwOSwgMHhCRkQ0LCAweEJGRDQsIDB4MDg3QiwKKyAgICAweEJGRDUsIDB4QkZEQiwgMHgzNDBDLCAweEJGREMsIDB4QkZEQywgMHgwODdDLCAweEJGREQsIDB4QkZERSwgMHgzNDEzLAorICAgIDB4QkZERiwgMHhCRkRGLCAweDA4N0QsIDB4QkZFMCwgMHhCRkUwLCAweDM0MTUsIDB4QkZFMSwgMHhCRkUxLCAweDA4N0UsCisgICAgMHhCRkUyLCAweEJGRkYsIDB4MzQxNiwgMHhDMDAwLCAweEMwM0IsIDB4MzQzNCwgMHhDMDNDLCAweEMwM0MsIDB4MDg3RiwKKyAgICAweEMwM0QsIDB4QzA1MCwgMHgzNDcwLCAweEMwNTEsIDB4QzA1MSwgMHgwODgwLCAweEMwNTIsIDB4QzA1NywgMHgzNDg0LAorICAgIDB4QzA1OCwgMHhDMDU4LCAweDA4ODEsIDB4QzA1OSwgMHhDMDVCLCAweDM0OEEsIDB4QzA1QywgMHhDMDVDLCAweDA4ODIsCisgICAgMHhDMDVELCAweEMwNUYsIDB4MzQ4RCwgMHhDMDYwLCAweEMwNjAsIDB4MDg4MywgMHhDMDYxLCAweEMwNjcsIDB4MzQ5MCwKKyAgICAweEMwNjgsIDB4QzA2OSwgMHgwODg0LCAweEMwNkEsIDB4QzA4RiwgMHgzNDk3LCAweEMwOTAsIDB4QzA5MSwgMHgwODg2LAorICAgIDB4QzA5MiwgMHhDMDkzLCAweDM0QkQsIDB4QzA5NCwgMHhDMDk0LCAweDA4ODgsIDB4QzA5NSwgMHhDMDk3LCAweDM0QkYsCisgICAgMHhDMDk4LCAweEMwOTgsIDB4MDg4OSwgMHhDMDk5LCAweEMwOUYsIDB4MzRDMiwgMHhDMEEwLCAweEMwQTEsIDB4MDg4QSwKKyAgICAweEMwQTIsIDB4QzBBMiwgMHgzNEM5LCAweEMwQTMsIDB4QzBBMywgMHgwODhDLCAweEMwQTQsIDB4QzBBNCwgMHgzNENBLAorICAgIDB4QzBBNSwgMHhDMEE1LCAweDA4OEQsIDB4QzBBNiwgMHhDMEFCLCAweDM0Q0IsIDB4QzBBQywgMHhDMEFELCAweDA4OEUsCisgICAgMHhDMEFFLCAweEMwQUUsIDB4MzREMSwgMHhDMEFGLCAweEMwQjAsIDB4MDg5MCwgMHhDMEIxLCAweEMwQjIsIDB4MzREMiwKKyAgICAweEMwQjMsIDB4QzBCNiwgMHgwODkyLCAweEMwQjcsIDB4QzBCQiwgMHgzNEQ0LCAweEMwQkMsIDB4QzBCRCwgMHgwODk2LAorICAgIDB4QzBCRSwgMHhDMEJFLCAweDM0RDksIDB4QzBCRiwgMHhDMEMxLCAweDA4OTgsIDB4QzBDMiwgMHhDMEM0LCAweDM0REEsCisgICAgMHhDMEM1LCAweEMwQzUsIDB4MDg5QiwgMHhDMEM2LCAweEMwQzcsIDB4MzRERCwgMHhDMEM4LCAweEMwQzksIDB4MDg5QywKKyAgICAweEMwQ0EsIDB4QzBDQiwgMHgzNERGLCAweEMwQ0MsIDB4QzBDQywgMHgwODlFLCAweEMwQ0QsIDB4QzBDRiwgMHgzNEUxLAorICAgIDB4QzBEMCwgMHhDMEQwLCAweDA4OUYsIDB4QzBEMSwgMHhDMEQ3LCAweDM0RTQsIDB4QzBEOCwgMHhDMEQ5LCAweDA4QTAsCisgICAgMHhDMERBLCAweEMwREEsIDB4MzRFQiwgMHhDMERCLCAweEMwREQsIDB4MDhBMiwgMHhDMERFLCAweEMwRTMsIDB4MzRFQywKKyAgICAweEMwRTQsIDB4QzBFNSwgMHgwOEE1LCAweEMwRTYsIDB4QzBFNywgMHgzNEYyLCAweEMwRTgsIDB4QzBFOCwgMHgwOEE3LAorICAgIDB4QzBFOSwgMHhDMEVCLCAweDM0RjQsIDB4QzBFQywgMHhDMEVDLCAweDA4QTgsIDB4QzBFRCwgMHhDMEYzLCAweDM0RjcsCisgICAgMHhDMEY0LCAweEMwRjUsIDB4MDhBOSwgMHhDMEY2LCAweEMwRjYsIDB4MzRGRSwgMHhDMEY3LCAweEMwRjcsIDB4MDhBQiwKKyAgICAweEMwRjgsIDB4QzBGOCwgMHgzNEZGLCAweEMwRjksIDB4QzBGOSwgMHgwOEFDLCAweEMwRkEsIDB4QzBGRiwgMHgzNTAwLAorICAgIDB4QzEwMCwgMHhDMTAwLCAweDA4QUQsIDB4QzEwMSwgMHhDMTAzLCAweDM1MDYsIDB4QzEwNCwgMHhDMTA0LCAweDA4QUUsCisgICAgMHhDMTA1LCAweEMxMDcsIDB4MzUwOSwgMHhDMTA4LCAweEMxMDgsIDB4MDhBRiwgMHhDMTA5LCAweEMxMEYsIDB4MzUwQywKKyAgICAweEMxMTAsIDB4QzExMCwgMHgwOEIwLCAweEMxMTEsIDB4QzExNCwgMHgzNTEzLCAweEMxMTUsIDB4QzExNSwgMHgwOEIxLAorICAgIDB4QzExNiwgMHhDMTFCLCAweDM1MTcsIDB4QzExQywgMHhDMTIwLCAweDA4QjIsIDB4QzEyMSwgMHhDMTIyLCAweDM1MUQsCisgICAgMHhDMTIzLCAweEMxMjQsIDB4MDhCNywgMHhDMTI1LCAweEMxMjUsIDB4MzUxRiwgMHhDMTI2LCAweEMxMjcsIDB4MDhCOSwKKyAgICAweEMxMjgsIDB4QzEyQiwgMHgzNTIwLCAweEMxMkMsIDB4QzEyRCwgMHgwOEJCLCAweEMxMkUsIDB4QzEyRSwgMHgzNTI0LAorICAgIDB4QzEyRiwgMHhDMTMxLCAweDA4QkQsIDB4QzEzMiwgMHhDMTM1LCAweDM1MjUsIDB4QzEzNiwgMHhDMTM2LCAweDA4QzAsCisgICAgMHhDMTM3LCAweEMxMzcsIDB4MzUyOSwgMHhDMTM4LCAweEMxMzksIDB4MDhDMSwgMHhDMTNBLCAweEMxM0IsIDB4MzUyQSwKKyAgICAweEMxM0MsIDB4QzEzQywgMHgwOEMzLCAweEMxM0QsIDB4QzEzRiwgMHgzNTJDLCAweEMxNDAsIDB4QzE0MCwgMHgwOEM0LAorICAgIDB4QzE0MSwgMHhDMTQ3LCAweDM1MkYsIDB4QzE0OCwgMHhDMTQ5LCAweDA4QzUsIDB4QzE0QSwgMHhDMTRBLCAweDM1MzYsCisgICAgMHhDMTRCLCAweEMxNEQsIDB4MDhDNywgMHhDMTRFLCAweEMxNTMsIDB4MzUzNywgMHhDMTU0LCAweEMxNTUsIDB4MDhDQSwKKyAgICAweEMxNTYsIDB4QzE1NywgMHgzNTNELCAweEMxNTgsIDB4QzE1OCwgMHgwOENDLCAweEMxNTksIDB4QzE1QiwgMHgzNTNGLAorICAgIDB4QzE1QywgMHhDMTVDLCAweDA4Q0QsIDB4QzE1RCwgMHhDMTYzLCAweDM1NDIsIDB4QzE2NCwgMHhDMTY1LCAweDA4Q0UsCisgICAgMHhDMTY2LCAweEMxNjYsIDB4MzU0OSwgMHhDMTY3LCAweEMxNjksIDB4MDhEMCwgMHhDMTZBLCAweEMxNkYsIDB4MzU0QSwKKyAgICAweEMxNzAsIDB4QzE3MCwgMHgwOEQzLCAweEMxNzEsIDB4QzE3MywgMHgzNTUwLCAweEMxNzQsIDB4QzE3NCwgMHgwOEQ0LAorICAgIDB4QzE3NSwgMHhDMTc3LCAweDM1NTMsIDB4QzE3OCwgMHhDMTc4LCAweDA4RDUsIDB4QzE3OSwgMHhDMTg0LCAweDM1NTYsCisgICAgMHhDMTg1LCAweEMxODUsIDB4MDhENiwgMHhDMTg2LCAweEMxOEIsIDB4MzU2MiwgMHhDMThDLCAweEMxOEUsIDB4MDhENywKKyAgICAweEMxOEYsIDB4QzE4RiwgMHgzNTY4LCAweEMxOTAsIDB4QzE5MCwgMHgwOERBLCAweEMxOTEsIDB4QzE5MywgMHgzNTY5LAorICAgIDB4QzE5NCwgMHhDMTk0LCAweDA4REIsIDB4QzE5NSwgMHhDMTk1LCAweDM1NkMsIDB4QzE5NiwgMHhDMTk2LCAweDA4REMsCisgICAgMHhDMTk3LCAweEMxOUIsIDB4MzU2RCwgMHhDMTlDLCAweEMxOUQsIDB4MDhERCwgMHhDMTlFLCAweEMxOUUsIDB4MzU3MiwKKyAgICAweEMxOUYsIDB4QzE5RiwgMHgwOERGLCAweEMxQTAsIDB4QzFBMCwgMHgzNTczLCAweEMxQTEsIDB4QzFBMSwgMHgwOEUwLAorICAgIDB4QzFBMiwgMHhDMUE0LCAweDM1NzQsIDB4QzFBNSwgMHhDMUE1LCAweDA4RTEsIDB4QzFBNiwgMHhDMUE3LCAweDM1NzcsCisgICAgMHhDMUE4LCAweEMxQTksIDB4MDhFMiwgMHhDMUFBLCAweEMxQUIsIDB4MzU3OSwgMHhDMUFDLCAweEMxQUMsIDB4MDhFNCwKKyAgICAweEMxQUQsIDB4QzFBRiwgMHgzNTdCLCAweEMxQjAsIDB4QzFCMCwgMHgwOEU1LCAweEMxQjEsIDB4QzFCQywgMHgzNTdFLAorICAgIDB4QzFCRCwgMHhDMUJELCAweDA4RTYsIDB4QzFCRSwgMHhDMUMzLCAweDM1OEEsIDB4QzFDNCwgMHhDMUM0LCAweDA4RTcsCisgICAgMHhDMUM1LCAweEMxQzcsIDB4MzU5MCwgMHhDMUM4LCAweEMxQzgsIDB4MDhFOCwgMHhDMUM5LCAweEMxQ0IsIDB4MzU5MywKKyAgICAweEMxQ0MsIDB4QzFDQywgMHgwOEU5LCAweEMxQ0QsIDB4QzFEMywgMHgzNTk2LCAweEMxRDQsIDB4QzFENCwgMHgwOEVBLAorICAgIDB4QzFENSwgMHhDMUQ2LCAweDM1OUQsIDB4QzFENywgMHhDMUQ4LCAweDA4RUIsIDB4QzFEOSwgMHhDMURGLCAweDM1OUYsCisgICAgMHhDMUUwLCAweEMxRTAsIDB4MDhFRCwgMHhDMUUxLCAweEMxRTMsIDB4MzVBNiwgMHhDMUU0LCAweEMxRTQsIDB4MDhFRSwKKyAgICAweEMxRTUsIDB4QzFFNywgMHgzNUE5LCAweEMxRTgsIDB4QzFFOCwgMHgwOEVGLCAweEMxRTksIDB4QzFFRiwgMHgzNUFDLAorICAgIDB4QzFGMCwgMHhDMUYxLCAweDA4RjAsIDB4QzFGMiwgMHhDMUYyLCAweDM1QjMsIDB4QzFGMywgMHhDMUYzLCAweDA4RjIsCisgICAgMHhDMUY0LCAweEMxRkIsIDB4MzVCNCwgMHhDMUZDLCAweEMxRkQsIDB4MDhGMywgMHhDMUZFLCAweEMxRkYsIDB4MzVCQywKKyAgICAweEMyMDAsIDB4QzIwMCwgMHgwOEY1LCAweEMyMDEsIDB4QzIwMywgMHgzNUJFLCAweEMyMDQsIDB4QzIwNCwgMHgwOEY2LAorICAgIDB4QzIwNSwgMHhDMjBCLCAweDM1QzEsIDB4QzIwQywgMHhDMjBELCAweDA4RjcsIDB4QzIwRSwgMHhDMjBFLCAweDM1QzgsCisgICAgMHhDMjBGLCAweEMyMEYsIDB4MDhGOSwgMHhDMjEwLCAweEMyMTAsIDB4MzVDOSwgMHhDMjExLCAweEMyMTEsIDB4MDhGQSwKKyAgICAweEMyMTIsIDB4QzIxNywgMHgzNUNBLCAweEMyMTgsIDB4QzIxOSwgMHgwOEZCLCAweEMyMUEsIDB4QzIxQiwgMHgzNUQwLAorICAgIDB4QzIxQywgMHhDMjFDLCAweDA4RkQsIDB4QzIxRCwgMHhDMjFFLCAweDM1RDIsIDB4QzIxRiwgMHhDMjIwLCAweDA4RkUsCisgICAgMHhDMjIxLCAweEMyMjcsIDB4MzVENCwgMHhDMjI4LCAweEMyMjksIDB4MDkwMCwgMHhDMjJBLCAweEMyMkEsIDB4MzVEQiwKKyAgICAweEMyMkIsIDB4QzIyQiwgMHgwOTAyLCAweEMyMkMsIDB4QzIyQywgMHgzNURDLCAweEMyMkQsIDB4QzIyRCwgMHgwOTAzLAorICAgIDB4QzIyRSwgMHhDMjJFLCAweDM1REQsIDB4QzIyRiwgMHhDMjJGLCAweDA5MDQsIDB4QzIzMCwgMHhDMjMwLCAweDM1REUsCisgICAgMHhDMjMxLCAweEMyMzIsIDB4MDkwNSwgMHhDMjMzLCAweEMyMzMsIDB4MzVERiwgMHhDMjM0LCAweEMyMzQsIDB4MDkwNywKKyAgICAweEMyMzUsIDB4QzI0NywgMHgzNUUwLCAweEMyNDgsIDB4QzI0OCwgMHgwOTA4LCAweEMyNDksIDB4QzI0RiwgMHgzNUYzLAorICAgIDB4QzI1MCwgMHhDMjUxLCAweDA5MDksIDB4QzI1MiwgMHhDMjUzLCAweDM1RkEsIDB4QzI1NCwgMHhDMjU0LCAweDA5MEIsCisgICAgMHhDMjU1LCAweEMyNTcsIDB4MzVGQywgMHhDMjU4LCAweEMyNTgsIDB4MDkwQywgMHhDMjU5LCAweEMyNUYsIDB4MzVGRiwKKyAgICAweEMyNjAsIDB4QzI2MCwgMHgwOTBELCAweEMyNjEsIDB4QzI2NCwgMHgzNjA2LCAweEMyNjUsIDB4QzI2NSwgMHgwOTBFLAorICAgIDB4QzI2NiwgMHhDMjZCLCAweDM2MEEsIDB4QzI2QywgMHhDMjZELCAweDA5MEYsIDB4QzI2RSwgMHhDMjZGLCAweDM2MTAsCisgICAgMHhDMjcwLCAweEMyNzAsIDB4MDkxMSwgMHhDMjcxLCAweEMyNzMsIDB4MzYxMiwgMHhDMjc0LCAweEMyNzQsIDB4MDkxMiwKKyAgICAweEMyNzUsIDB4QzI3QiwgMHgzNjE1LCAweEMyN0MsIDB4QzI3RCwgMHgwOTEzLCAweEMyN0UsIDB4QzI3RSwgMHgzNjFDLAorICAgIDB4QzI3RiwgMHhDMjdGLCAweDA5MTUsIDB4QzI4MCwgMHhDMjgwLCAweDM2MUQsIDB4QzI4MSwgMHhDMjgxLCAweDA5MTYsCisgICAgMHhDMjgyLCAweEMyODcsIDB4MzYxRSwgMHhDMjg4LCAweEMyODksIDB4MDkxNywgMHhDMjhBLCAweEMyOEYsIDB4MzYyNCwKKyAgICAweEMyOTAsIDB4QzI5MCwgMHgwOTE5LCAweEMyOTEsIDB4QzI5NywgMHgzNjJBLCAweEMyOTgsIDB4QzI5OCwgMHgwOTFBLAorICAgIDB4QzI5OSwgMHhDMjlBLCAweDM2MzEsIDB4QzI5QiwgMHhDMjlCLCAweDA5MUIsIDB4QzI5QywgMHhDMjlDLCAweDM2MzMsCisgICAgMHhDMjlELCAweEMyOUQsIDB4MDkxQywgMHhDMjlFLCAweEMyQTMsIDB4MzYzNCwgMHhDMkE0LCAweEMyQTUsIDB4MDkxRCwKKyAgICAweEMyQTYsIDB4QzJBNywgMHgzNjNBLCAweEMyQTgsIDB4QzJBOCwgMHgwOTFGLCAweEMyQTksIDB4QzJBQiwgMHgzNjNDLAorICAgIDB4QzJBQywgMHhDMkFELCAweDA5MjAsIDB4QzJBRSwgMHhDMkIzLCAweDM2M0YsIDB4QzJCNCwgMHhDMkI1LCAweDA5MjIsCisgICAgMHhDMkI2LCAweEMyQjYsIDB4MzY0NSwgMHhDMkI3LCAweEMyQjcsIDB4MDkyNCwgMHhDMkI4LCAweEMyQjgsIDB4MzY0NiwKKyAgICAweEMyQjksIDB4QzJCOSwgMHgwOTI1LCAweEMyQkEsIDB4QzJEQiwgMHgzNjQ3LCAweEMyREMsIDB4QzJERCwgMHgwOTI2LAorICAgIDB4QzJERSwgMHhDMkRGLCAweDM2NjksIDB4QzJFMCwgMHhDMkUwLCAweDA5MjgsIDB4QzJFMSwgMHhDMkUyLCAweDM2NkIsCisgICAgMHhDMkUzLCAweEMyRTQsIDB4MDkyOSwgMHhDMkU1LCAweEMyRUEsIDB4MzY2RCwgMHhDMkVCLCAweEMyRUQsIDB4MDkyQiwKKyAgICAweEMyRUUsIDB4QzJFRSwgMHgzNjczLCAweEMyRUYsIDB4QzJFRiwgMHgwOTJFLCAweEMyRjAsIDB4QzJGMCwgMHgzNjc0LAorICAgIDB4QzJGMSwgMHhDMkYxLCAweDA5MkYsIDB4QzJGMiwgMHhDMkY1LCAweDM2NzUsIDB4QzJGNiwgMHhDMkY2LCAweDA5MzAsCisgICAgMHhDMkY3LCAweEMyRjcsIDB4MzY3OSwgMHhDMkY4LCAweEMyRjksIDB4MDkzMSwgMHhDMkZBLCAweEMyRkEsIDB4MzY3QSwKKyAgICAweEMyRkIsIDB4QzJGQywgMHgwOTMzLCAweEMyRkQsIDB4QzJGRiwgMHgzNjdCLCAweEMzMDAsIDB4QzMwMCwgMHgwOTM1LAorICAgIDB4QzMwMSwgMHhDMzA3LCAweDM2N0UsIDB4QzMwOCwgMHhDMzA5LCAweDA5MzYsIDB4QzMwQSwgMHhDMzBCLCAweDM2ODUsCisgICAgMHhDMzBDLCAweEMzMEQsIDB4MDkzOCwgMHhDMzBFLCAweEMzMTIsIDB4MzY4NywgMHhDMzEzLCAweEMzMTUsIDB4MDkzQSwKKyAgICAweEMzMTYsIDB4QzMxNywgMHgzNjhDLCAweEMzMTgsIDB4QzMxOCwgMHgwOTNELCAweEMzMTksIDB4QzMxQiwgMHgzNjhFLAorICAgIDB4QzMxQywgMHhDMzFDLCAweDA5M0UsIDB4QzMxRCwgMHhDMzIzLCAweDM2OTEsIDB4QzMyNCwgMHhDMzI1LCAweDA5M0YsCisgICAgMHhDMzI2LCAweEMzMjcsIDB4MzY5OCwgMHhDMzI4LCAweEMzMjksIDB4MDk0MSwgMHhDMzJBLCAweEMzNDQsIDB4MzY5QSwKKyAgICAweEMzNDUsIDB4QzM0NSwgMHgwOTQzLCAweEMzNDYsIDB4QzM2NywgMHgzNkI1LCAweEMzNjgsIDB4QzM2OSwgMHgwOTQ0LAorICAgIDB4QzM2QSwgMHhDMzZCLCAweDM2RDcsIDB4QzM2QywgMHhDMzZDLCAweDA5NDYsIDB4QzM2RCwgMHhDMzZGLCAweDM2RDksCisgICAgMHhDMzcwLCAweEMzNzAsIDB4MDk0NywgMHhDMzcxLCAweEMzNzEsIDB4MzZEQywgMHhDMzcyLCAweEMzNzIsIDB4MDk0OCwKKyAgICAweEMzNzMsIDB4QzM3NywgMHgzNkRELCAweEMzNzgsIDB4QzM3OSwgMHgwOTQ5LCAweEMzN0EsIDB4QzM3QiwgMHgzNkUyLAorICAgIDB4QzM3QywgMHhDMzdELCAweDA5NEIsIDB4QzM3RSwgMHhDMzgzLCAweDM2RTQsIDB4QzM4NCwgMHhDMzg0LCAweDA5NEQsCisgICAgMHhDMzg1LCAweEMzODcsIDB4MzZFQSwgMHhDMzg4LCAweEMzODgsIDB4MDk0RSwgMHhDMzg5LCAweEMzOEIsIDB4MzZFRCwKKyAgICAweEMzOEMsIDB4QzM4QywgMHgwOTRGLCAweEMzOEQsIDB4QzNCRiwgMHgzNkYwLCAweEMzQzAsIDB4QzNDMCwgMHgwOTUwLAorICAgIDB4QzNDMSwgMHhDM0Q3LCAweDM3MjMsIDB4QzNEOCwgMHhDM0Q5LCAweDA5NTEsIDB4QzNEQSwgMHhDM0RCLCAweDM3M0EsCisgICAgMHhDM0RDLCAweEMzREMsIDB4MDk1MywgMHhDM0RELCAweEMzREUsIDB4MzczQywgMHhDM0RGLCAweEMzRTAsIDB4MDk1NCwKKyAgICAweEMzRTEsIDB4QzNFMSwgMHgzNzNFLCAweEMzRTIsIDB4QzNFMiwgMHgwOTU2LCAweEMzRTMsIDB4QzNFNywgMHgzNzNGLAorICAgIDB4QzNFOCwgMHhDM0U5LCAweDA5NTcsIDB4QzNFQSwgMHhDM0VDLCAweDM3NDQsIDB4QzNFRCwgMHhDM0VELCAweDA5NTksCisgICAgMHhDM0VFLCAweEMzRjMsIDB4Mzc0NywgMHhDM0Y0LCAweEMzRjUsIDB4MDk1QSwgMHhDM0Y2LCAweEMzRjcsIDB4Mzc0RCwKKyAgICAweEMzRjgsIDB4QzNGOCwgMHgwOTVDLCAweEMzRjksIDB4QzNGRiwgMHgzNzRGLCAweEM0MDAsIDB4QzQwNywgMHgzNzU2LAorICAgIDB4QzQwOCwgMHhDNDA4LCAweDA5NUQsIDB4QzQwOSwgMHhDNDBGLCAweDM3NUUsIDB4QzQxMCwgMHhDNDEwLCAweDA5NUUsCisgICAgMHhDNDExLCAweEM0MjMsIDB4Mzc2NSwgMHhDNDI0LCAweEM0MjQsIDB4MDk1RiwgMHhDNDI1LCAweEM0MkIsIDB4Mzc3OCwKKyAgICAweEM0MkMsIDB4QzQyQywgMHgwOTYwLCAweEM0MkQsIDB4QzQyRiwgMHgzNzdGLCAweEM0MzAsIDB4QzQzMCwgMHgwOTYxLAorICAgIDB4QzQzMSwgMHhDNDMzLCAweDM3ODIsIDB4QzQzNCwgMHhDNDM0LCAweDA5NjIsIDB4QzQzNSwgMHhDNDNCLCAweDM3ODUsCisgICAgMHhDNDNDLCAweEM0M0QsIDB4MDk2MywgMHhDNDNFLCAweEM0NDcsIDB4Mzc4QywgMHhDNDQ4LCAweEM0NDgsIDB4MDk2NSwKKyAgICAweEM0NDksIDB4QzQ2MywgMHgzNzk2LCAweEM0NjQsIDB4QzQ2NSwgMHgwOTY2LCAweEM0NjYsIDB4QzQ2NywgMHgzN0IxLAorICAgIDB4QzQ2OCwgMHhDNDY4LCAweDA5NjgsIDB4QzQ2OSwgMHhDNDZCLCAweDM3QjMsIDB4QzQ2QywgMHhDNDZDLCAweDA5NjksCisgICAgMHhDNDZELCAweEM0NzMsIDB4MzdCNiwgMHhDNDc0LCAweEM0NzUsIDB4MDk2QSwgMHhDNDc2LCAweEM0NzgsIDB4MzdCRCwKKyAgICAweEM0NzksIDB4QzQ3OSwgMHgwOTZDLCAweEM0N0EsIDB4QzQ3RiwgMHgzN0MwLCAweEM0ODAsIDB4QzQ4MCwgMHgwOTZELAorICAgIDB4QzQ4MSwgMHhDNDkzLCAweDM3QzYsIDB4QzQ5NCwgMHhDNDk0LCAweDA5NkUsIDB4QzQ5NSwgMHhDNDlCLCAweDM3RDksCisgICAgMHhDNDlDLCAweEM0OUMsIDB4MDk2RiwgMHhDNDlELCAweEM0QjcsIDB4MzdFMCwgMHhDNEI4LCAweEM0QjgsIDB4MDk3MCwKKyAgICAweEM0QjksIDB4QzRCQiwgMHgzN0ZCLCAweEM0QkMsIDB4QzRCQywgMHgwOTcxLCAweEM0QkQsIDB4QzRFOCwgMHgzN0ZFLAorICAgIDB4QzRFOSwgMHhDNEU5LCAweDA5NzIsIDB4QzRFQSwgMHhDNEVGLCAweDM4MkEsIDB4QzRGMCwgMHhDNEYxLCAweDA5NzMsCisgICAgMHhDNEYyLCAweEM0RjMsIDB4MzgzMCwgMHhDNEY0LCAweEM0RjQsIDB4MDk3NSwgMHhDNEY1LCAweEM0RjcsIDB4MzgzMiwKKyAgICAweEM0RjgsIDB4QzRGOCwgMHgwOTc2LCAweEM0RjksIDB4QzRGOSwgMHgzODM1LCAweEM0RkEsIDB4QzRGQSwgMHgwOTc3LAorICAgIDB4QzRGQiwgMHhDNEZFLCAweDM4MzYsIDB4QzRGRiwgMHhDNEZGLCAweDA5NzgsIDB4QzUwMCwgMHhDNTAxLCAweDA5NzksCisgICAgMHhDNTAyLCAweEM1MEIsIDB4MzgzQSwgMHhDNTBDLCAweEM1MEMsIDB4MDk3QiwgMHhDNTBELCAweEM1MEYsIDB4Mzg0NCwKKyAgICAweEM1MTAsIDB4QzUxMCwgMHgwOTdDLCAweEM1MTEsIDB4QzUxMywgMHgzODQ3LCAweEM1MTQsIDB4QzUxNCwgMHgwOTdELAorICAgIDB4QzUxNSwgMHhDNTFCLCAweDM4NEEsIDB4QzUxQywgMHhDNTFDLCAweDA5N0UsIDB4QzUxRCwgMHhDNTI3LCAweDM4NTEsCisgICAgMHhDNTI4LCAweEM1MjksIDB4MDk3RiwgMHhDNTJBLCAweEM1MkIsIDB4Mzg1QywgMHhDNTJDLCAweEM1MkMsIDB4MDk4MSwKKyAgICAweEM1MkQsIDB4QzUyRiwgMHgzODVFLCAweEM1MzAsIDB4QzUzMCwgMHgwOTgyLCAweEM1MzEsIDB4QzUzNywgMHgzODYxLAorICAgIDB4QzUzOCwgMHhDNTM5LCAweDA5ODMsIDB4QzUzQSwgMHhDNTNBLCAweDM4NjgsIDB4QzUzQiwgMHhDNTNCLCAweDA5ODUsCisgICAgMHhDNTNDLCAweEM1M0MsIDB4Mzg2OSwgMHhDNTNELCAweEM1M0QsIDB4MDk4NiwgMHhDNTNFLCAweEM1NDMsIDB4Mzg2QSwKKyAgICAweEM1NDQsIDB4QzU0NSwgMHgwOTg3LCAweEM1NDYsIDB4QzU0NywgMHgzODcwLCAweEM1NDgsIDB4QzU0QSwgMHgwOTg5LAorICAgIDB4QzU0QiwgMHhDNTRCLCAweDM4NzIsIDB4QzU0QywgMHhDNTRFLCAweDA5OEMsIDB4QzU0RiwgMHhDNTUyLCAweDM4NzMsCisgICAgMHhDNTUzLCAweEM1NTUsIDB4MDk4RiwgMHhDNTU2LCAweEM1NTYsIDB4Mzg3NywgMHhDNTU3LCAweEM1NTksIDB4MDk5MiwKKyAgICAweEM1NUEsIDB4QzU1QywgMHgzODc4LCAweEM1NUQsIDB4QzU1RSwgMHgwOTk1LCAweEM1NUYsIDB4QzU1RiwgMHgzODdCLAorICAgIDB4QzU2MCwgMHhDNTYxLCAweDA5OTcsIDB4QzU2MiwgMHhDNTYzLCAweDM4N0MsIDB4QzU2NCwgMHhDNTY0LCAweDA5OTksCisgICAgMHhDNTY1LCAweEM1NjcsIDB4Mzg3RSwgMHhDNTY4LCAweEM1NjgsIDB4MDk5QSwgMHhDNTY5LCAweEM1NkYsIDB4Mzg4MSwKKyAgICAweEM1NzAsIDB4QzU3MSwgMHgwOTlCLCAweEM1NzIsIDB4QzU3MiwgMHgzODg4LCAweEM1NzMsIDB4QzU3NSwgMHgwOTlELAorICAgIDB4QzU3NiwgMHhDNTdCLCAweDM4ODksIDB4QzU3QywgMHhDNTdELCAweDA5QTAsIDB4QzU3RSwgMHhDNTdGLCAweDM4OEYsCisgICAgMHhDNTgwLCAweEM1ODAsIDB4MDlBMiwgMHhDNTgxLCAweEM1ODMsIDB4Mzg5MSwgMHhDNTg0LCAweEM1ODQsIDB4MDlBMywKKyAgICAweEM1ODUsIDB4QzU4NiwgMHgzODk0LCAweEM1ODcsIDB4QzU4NywgMHgwOUE0LCAweEM1ODgsIDB4QzU4QiwgMHgzODk2LAorICAgIDB4QzU4QywgMHhDNThELCAweDA5QTUsIDB4QzU4RSwgMHhDNThFLCAweDM4OUEsIDB4QzU4RiwgMHhDNThGLCAweDA5QTcsCisgICAgMHhDNTkwLCAweEM1OTAsIDB4Mzg5QiwgMHhDNTkxLCAweEM1OTEsIDB4MDlBOCwgMHhDNTkyLCAweEM1OTQsIDB4Mzg5QywKKyAgICAweEM1OTUsIDB4QzU5NSwgMHgwOUE5LCAweEM1OTYsIDB4QzU5NiwgMHgzODlGLCAweEM1OTcsIDB4QzU5OCwgMHgwOUFBLAorICAgIDB4QzU5OSwgMHhDNTlCLCAweDM4QTAsIDB4QzU5QywgMHhDNTlDLCAweDA5QUMsIDB4QzU5RCwgMHhDNTlGLCAweDM4QTMsCisgICAgMHhDNUEwLCAweEM1QTAsIDB4MDlBRCwgMHhDNUExLCAweEM1QTgsIDB4MzhBNiwgMHhDNUE5LCAweEM1QTksIDB4MDlBRSwKKyAgICAweEM1QUEsIDB4QzVCMywgMHgzOEFFLCAweEM1QjQsIDB4QzVCNSwgMHgwOUFGLCAweEM1QjYsIDB4QzVCNywgMHgzOEI4LAorICAgIDB4QzVCOCwgMHhDNUI5LCAweDA5QjEsIDB4QzVCQSwgMHhDNUJBLCAweDM4QkEsIDB4QzVCQiwgMHhDNUJFLCAweDA5QjMsCisgICAgMHhDNUJGLCAweEM1QzMsIDB4MzhCQiwgMHhDNUM0LCAweEM1Q0EsIDB4MDlCNywgMHhDNUNCLCAweEM1Q0IsIDB4MzhDMCwKKyAgICAweEM1Q0MsIDB4QzVDQywgMHgwOUJFLCAweEM1Q0QsIDB4QzVDRCwgMHgzOEMxLCAweEM1Q0UsIDB4QzVDRSwgMHgwOUJGLAorICAgIDB4QzVDRiwgMHhDNUNGLCAweDM4QzIsIDB4QzVEMCwgMHhDNUQxLCAweDA5QzAsIDB4QzVEMiwgMHhDNUQzLCAweDM4QzMsCisgICAgMHhDNUQ0LCAweEM1RDQsIDB4MDlDMiwgMHhDNUQ1LCAweEM1RDcsIDB4MzhDNSwgMHhDNUQ4LCAweEM1RDgsIDB4MDlDMywKKyAgICAweEM1RDksIDB4QzVERiwgMHgzOEM4LCAweEM1RTAsIDB4QzVFMSwgMHgwOUM0LCAweEM1RTIsIDB4QzVFMiwgMHgzOENGLAorICAgIDB4QzVFMywgMHhDNUUzLCAweDA5QzYsIDB4QzVFNCwgMHhDNUU0LCAweDM4RDAsIDB4QzVFNSwgMHhDNUU1LCAweDA5QzcsCisgICAgMHhDNUU2LCAweEM1RUIsIDB4MzhEMSwgMHhDNUVDLCAweEM1RUUsIDB4MDlDOCwgMHhDNUVGLCAweEM1RUYsIDB4MzhENywKKyAgICAweEM1RjAsIDB4QzVGMCwgMHgwOUNCLCAweEM1RjEsIDB4QzVGMywgMHgzOEQ4LCAweEM1RjQsIDB4QzVGNCwgMHgwOUNDLAorICAgIDB4QzVGNSwgMHhDNUY1LCAweDM4REIsIDB4QzVGNiwgMHhDNUY3LCAweDA5Q0QsIDB4QzVGOCwgMHhDNUZCLCAweDM4REMsCisgICAgMHhDNUZDLCAweEM1RkYsIDB4MDlDRiwgMHhDNjAwLCAweEM2MDEsIDB4MDlEMywgMHhDNjAyLCAweEM2MDQsIDB4MzhFMCwKKyAgICAweEM2MDUsIDB4QzYwOCwgMHgwOUQ1LCAweEM2MDksIDB4QzYwQiwgMHgzOEUzLCAweEM2MEMsIDB4QzYwQywgMHgwOUQ5LAorICAgIDB4QzYwRCwgMHhDNjBGLCAweDM4RTYsIDB4QzYxMCwgMHhDNjEwLCAweDA5REEsIDB4QzYxMSwgMHhDNjE3LCAweDM4RTksCisgICAgMHhDNjE4LCAweEM2MTksIDB4MDlEQiwgMHhDNjFBLCAweEM2MUEsIDB4MzhGMCwgMHhDNjFCLCAweEM2MUMsIDB4MDlERCwKKyAgICAweEM2MUQsIDB4QzYyMywgMHgzOEYxLCAweEM2MjQsIDB4QzYyNSwgMHgwOURGLCAweEM2MjYsIDB4QzYyNywgMHgzOEY4LAorICAgIDB4QzYyOCwgMHhDNjI4LCAweDA5RTEsIDB4QzYyOSwgMHhDNjJCLCAweDM4RkEsIDB4QzYyQywgMHhDNjJFLCAweDA5RTIsCisgICAgMHhDNjJGLCAweEM2MkYsIDB4MzhGRCwgMHhDNjMwLCAweEM2MzAsIDB4MDlFNSwgMHhDNjMxLCAweEM2MzIsIDB4MzhGRSwKKyAgICAweEM2MzMsIDB4QzYzNSwgMHgwOUU2LCAweEM2MzYsIDB4QzYzNiwgMHgzOTAwLCAweEM2MzcsIDB4QzYzNywgMHgwOUU5LAorICAgIDB4QzYzOCwgMHhDNjM4LCAweDM5MDEsIDB4QzYzOSwgMHhDNjM5LCAweDA5RUEsIDB4QzYzQSwgMHhDNjNBLCAweDM5MDIsCisgICAgMHhDNjNCLCAweEM2M0IsIDB4MDlFQiwgMHhDNjNDLCAweEM2M0YsIDB4MzkwMywgMHhDNjQwLCAweEM2NDEsIDB4MDlFQywKKyAgICAweEM2NDIsIDB4QzY0MywgMHgzOTA3LCAweEM2NDQsIDB4QzY0NCwgMHgwOUVFLCAweEM2NDUsIDB4QzY0NywgMHgzOTA5LAorICAgIDB4QzY0OCwgMHhDNjQ4LCAweDA5RUYsIDB4QzY0OSwgMHhDNjRGLCAweDM5MEMsIDB4QzY1MCwgMHhDNjUxLCAweDA5RjAsCisgICAgMHhDNjUyLCAweEM2NTIsIDB4MzkxMywgMHhDNjUzLCAweEM2NTUsIDB4MDlGMiwgMHhDNjU2LCAweEM2NUIsIDB4MzkxNCwKKyAgICAweEM2NUMsIDB4QzY1RCwgMHgwOUY1LCAweEM2NUUsIDB4QzY1RiwgMHgzOTFBLCAweEM2NjAsIDB4QzY2MCwgMHgwOUY3LAorICAgIDB4QzY2MSwgMHhDNjZCLCAweDM5MUMsIDB4QzY2QywgMHhDNjZDLCAweDA5RjgsIDB4QzY2RCwgMHhDNjZFLCAweDM5MjcsCisgICAgMHhDNjZGLCAweEM2NkYsIDB4MDlGOSwgMHhDNjcwLCAweEM2NzAsIDB4MzkyOSwgMHhDNjcxLCAweEM2NzEsIDB4MDlGQSwKKyAgICAweEM2NzIsIDB4QzY3NywgMHgzOTJBLCAweEM2NzgsIDB4QzY3OSwgMHgwOUZCLCAweEM2N0EsIDB4QzY3QiwgMHgzOTMwLAorICAgIDB4QzY3QywgMHhDNjdDLCAweDA5RkQsIDB4QzY3RCwgMHhDNjdGLCAweDM5MzIsIDB4QzY4MCwgMHhDNjgwLCAweDA5RkUsCisgICAgMHhDNjgxLCAweEM2ODcsIDB4MzkzNSwgMHhDNjg4LCAweEM2ODksIDB4MDlGRiwgMHhDNjhBLCAweEM2OEEsIDB4MzkzQywKKyAgICAweEM2OEIsIDB4QzY4QiwgMHgwQTAxLCAweEM2OEMsIDB4QzY4QywgMHgzOTNELCAweEM2OEQsIDB4QzY4RCwgMHgwQTAyLAorICAgIDB4QzY4RSwgMHhDNjkzLCAweDM5M0UsIDB4QzY5NCwgMHhDNjk1LCAweDBBMDMsIDB4QzY5NiwgMHhDNjk3LCAweDM5NDQsCisgICAgMHhDNjk4LCAweEM2OTgsIDB4MEEwNSwgMHhDNjk5LCAweEM2OUIsIDB4Mzk0NiwgMHhDNjlDLCAweEM2OUMsIDB4MEEwNiwKKyAgICAweEM2OUQsIDB4QzZBMywgMHgzOTQ5LCAweEM2QTQsIDB4QzZBNSwgMHgwQTA3LCAweEM2QTYsIDB4QzZBNiwgMHgzOTUwLAorICAgIDB4QzZBNywgMHhDNkE3LCAweDBBMDksIDB4QzZBOCwgMHhDNkE4LCAweDM5NTEsIDB4QzZBOSwgMHhDNkE5LCAweDBBMEEsCisgICAgMHhDNkFBLCAweEM2QUYsIDB4Mzk1MiwgMHhDNkIwLCAweEM2QjEsIDB4MEEwQiwgMHhDNkIyLCAweEM2QjMsIDB4Mzk1OCwKKyAgICAweEM2QjQsIDB4QzZCNCwgMHgwQTBELCAweEM2QjUsIDB4QzZCNywgMHgzOTVBLCAweEM2QjgsIDB4QzZCQSwgMHgwQTBFLAorICAgIDB4QzZCQiwgMHhDNkJGLCAweDM5NUQsIDB4QzZDMCwgMHhDNkMxLCAweDBBMTEsIDB4QzZDMiwgMHhDNkMyLCAweDM5NjIsCisgICAgMHhDNkMzLCAweEM2QzMsIDB4MEExMywgMHhDNkM0LCAweEM2QzQsIDB4Mzk2MywgMHhDNkM1LCAweEM2QzUsIDB4MEExNCwKKyAgICAweEM2QzYsIDB4QzZDQiwgMHgzOTY0LCAweEM2Q0MsIDB4QzZDRCwgMHgwQTE1LCAweEM2Q0UsIDB4QzZDRiwgMHgzOTZBLAorICAgIDB4QzZEMCwgMHhDNkQwLCAweDBBMTcsIDB4QzZEMSwgMHhDNkQzLCAweDM5NkMsIDB4QzZENCwgMHhDNkQ0LCAweDBBMTgsCisgICAgMHhDNkQ1LCAweEM2REIsIDB4Mzk2RiwgMHhDNkRDLCAweEM2REQsIDB4MEExOSwgMHhDNkRFLCAweEM2REYsIDB4Mzk3NiwKKyAgICAweEM2RTAsIDB4QzZFMSwgMHgwQTFCLCAweEM2RTIsIDB4QzZFNywgMHgzOTc4LCAweEM2RTgsIDB4QzZFOSwgMHgwQTFELAorICAgIDB4QzZFQSwgMHhDNkVCLCAweDM5N0UsIDB4QzZFQywgMHhDNkVDLCAweDBBMUYsIDB4QzZFRCwgMHhDNkVGLCAweDM5ODAsCisgICAgMHhDNkYwLCAweEM2RjAsIDB4MEEyMCwgMHhDNkYxLCAweEM2RjcsIDB4Mzk4MywgMHhDNkY4LCAweEM2RjksIDB4MEEyMSwKKyAgICAweEM2RkEsIDB4QzZGQywgMHgzOThBLCAweEM2RkQsIDB4QzZGRCwgMHgwQTIzLCAweEM2RkUsIDB4QzZGRiwgMHgzOThELAorICAgIDB4QzcwMCwgMHhDNzAzLCAweDM5OEYsIDB4QzcwNCwgMHhDNzA1LCAweDBBMjQsIDB4QzcwNiwgMHhDNzA3LCAweDM5OTMsCisgICAgMHhDNzA4LCAweEM3MDgsIDB4MEEyNiwgMHhDNzA5LCAweEM3MEIsIDB4Mzk5NSwgMHhDNzBDLCAweEM3MEMsIDB4MEEyNywKKyAgICAweEM3MEQsIDB4QzcxMywgMHgzOTk4LCAweEM3MTQsIDB4QzcxNSwgMHgwQTI4LCAweEM3MTYsIDB4QzcxNiwgMHgzOTlGLAorICAgIDB4QzcxNywgMHhDNzE3LCAweDBBMkEsIDB4QzcxOCwgMHhDNzE4LCAweDM5QTAsIDB4QzcxOSwgMHhDNzE5LCAweDBBMkIsCisgICAgMHhDNzFBLCAweEM3MUYsIDB4MzlBMSwgMHhDNzIwLCAweEM3MjEsIDB4MEEyQywgMHhDNzIyLCAweEM3MjMsIDB4MzlBNywKKyAgICAweEM3MjQsIDB4QzcyNCwgMHgwQTJFLCAweEM3MjUsIDB4QzcyNywgMHgzOUE5LCAweEM3MjgsIDB4QzcyOCwgMHgwQTJGLAorICAgIDB4QzcyOSwgMHhDNzJGLCAweDM5QUMsIDB4QzczMCwgMHhDNzMxLCAweDBBMzAsIDB4QzczMiwgMHhDNzMyLCAweDM5QjMsCisgICAgMHhDNzMzLCAweEM3MzMsIDB4MEEzMiwgMHhDNzM0LCAweEM3MzQsIDB4MzlCNCwgMHhDNzM1LCAweEM3MzUsIDB4MEEzMywKKyAgICAweEM3MzYsIDB4QzczNiwgMHgzOUI1LCAweEM3MzcsIDB4QzczNywgMHgwQTM0LCAweEM3MzgsIDB4QzczQiwgMHgzOUI2LAorICAgIDB4QzczQywgMHhDNzNELCAweDBBMzUsIDB4QzczRSwgMHhDNzNGLCAweDM5QkEsIDB4Qzc0MCwgMHhDNzQwLCAweDBBMzcsCisgICAgMHhDNzQxLCAweEM3NDMsIDB4MzlCQywgMHhDNzQ0LCAweEM3NDQsIDB4MEEzOCwgMHhDNzQ1LCAweEM3NDksIDB4MzlCRiwKKyAgICAweEM3NEEsIDB4Qzc0QSwgMHgwQTM5LCAweEM3NEIsIDB4Qzc0QiwgMHgzOUM0LCAweEM3NEMsIDB4Qzc0RCwgMHgwQTNBLAorICAgIDB4Qzc0RSwgMHhDNzRFLCAweDM5QzUsIDB4Qzc0RiwgMHhDNzRGLCAweDBBM0MsIDB4Qzc1MCwgMHhDNzUwLCAweDM5QzYsCisgICAgMHhDNzUxLCAweEM3NTgsIDB4MEEzRCwgMHhDNzU5LCAweEM3NUIsIDB4MzlDNywgMHhDNzVDLCAweEM3NUMsIDB4MEE0NSwKKyAgICAweEM3NUQsIDB4Qzc1RiwgMHgzOUNBLCAweEM3NjAsIDB4Qzc2MCwgMHgwQTQ2LCAweEM3NjEsIDB4Qzc2NywgMHgzOUNELAorICAgIDB4Qzc2OCwgMHhDNzY4LCAweDBBNDcsIDB4Qzc2OSwgMHhDNzZBLCAweDM5RDQsIDB4Qzc2QiwgMHhDNzZCLCAweDBBNDgsCisgICAgMHhDNzZDLCAweEM3NzMsIDB4MzlENiwgMHhDNzc0LCAweEM3NzUsIDB4MEE0OSwgMHhDNzc2LCAweEM3NzcsIDB4MzlERSwKKyAgICAweEM3NzgsIDB4Qzc3OCwgMHgwQTRCLCAweEM3NzksIDB4Qzc3QiwgMHgzOUUwLCAweEM3N0MsIDB4Qzc3RSwgMHgwQTRDLAorICAgIDB4Qzc3RiwgMHhDNzgyLCAweDM5RTMsIDB4Qzc4MywgMHhDNzg1LCAweDBBNEYsIDB4Qzc4NiwgMHhDNzg2LCAweDM5RTcsCisgICAgMHhDNzg3LCAweEM3OEEsIDB4MEE1MiwgMHhDNzhCLCAweEM3OEQsIDB4MzlFOCwgMHhDNzhFLCAweEM3OEUsIDB4MEE1NiwKKyAgICAweEM3OEYsIDB4Qzc4RiwgMHgzOUVCLCAweEM3OTAsIDB4Qzc5MSwgMHgwQTU3LCAweEM3OTIsIDB4Qzc5MywgMHgzOUVDLAorICAgIDB4Qzc5NCwgMHhDNzk0LCAweDBBNTksIDB4Qzc5NSwgMHhDNzk1LCAweDM5RUUsIDB4Qzc5NiwgMHhDNzk4LCAweDBBNUEsCisgICAgMHhDNzk5LCAweEM3OTksIDB4MzlFRiwgMHhDNzlBLCAweEM3OUEsIDB4MEE1RCwgMHhDNzlCLCAweEM3OUYsIDB4MzlGMCwKKyAgICAweEM3QTAsIDB4QzdBMSwgMHgwQTVFLCAweEM3QTIsIDB4QzdBMiwgMHgzOUY1LCAweEM3QTMsIDB4QzdBNiwgMHgwQTYwLAorICAgIDB4QzdBNywgMHhDN0FCLCAweDM5RjYsIDB4QzdBQywgMHhDN0FELCAweDBBNjQsIDB4QzdBRSwgMHhDN0FGLCAweDM5RkIsCisgICAgMHhDN0IwLCAweEM3QjAsIDB4MEE2NiwgMHhDN0IxLCAweEM3QjMsIDB4MzlGRCwgMHhDN0I0LCAweEM3QjQsIDB4MEE2NywKKyAgICAweEM3QjUsIDB4QzdCQiwgMHgzQTAwLCAweEM3QkMsIDB4QzdCRCwgMHgwQTY4LCAweEM3QkUsIDB4QzdCRSwgMHgzQTA3LAorICAgIDB4QzdCRiwgMHhDN0MxLCAweDBBNkEsIDB4QzdDMiwgMHhDN0M3LCAweDNBMDgsIDB4QzdDOCwgMHhDN0M5LCAweDBBNkQsCisgICAgMHhDN0NBLCAweEM3Q0IsIDB4M0EwRSwgMHhDN0NDLCAweEM3Q0MsIDB4MEE2RiwgMHhDN0NELCAweEM3Q0QsIDB4M0ExMCwKKyAgICAweEM3Q0UsIDB4QzdDRSwgMHgwQTcwLCAweEM3Q0YsIDB4QzdDRiwgMHgzQTExLCAweEM3RDAsIDB4QzdEMCwgMHgwQTcxLAorICAgIDB4QzdEMSwgMHhDN0Q3LCAweDNBMTIsIDB4QzdEOCwgMHhDN0Q4LCAweDBBNzIsIDB4QzdEOSwgMHhDN0RDLCAweDNBMTksCisgICAgMHhDN0RELCAweEM3REQsIDB4MEE3MywgMHhDN0RFLCAweEM3RTMsIDB4M0ExRCwgMHhDN0U0LCAweEM3RTQsIDB4MEE3NCwKKyAgICAweEM3RTUsIDB4QzdFNywgMHgzQTIzLCAweEM3RTgsIDB4QzdFOCwgMHgwQTc1LCAweEM3RTksIDB4QzdFQiwgMHgzQTI2LAorICAgIDB4QzdFQywgMHhDN0VDLCAweDBBNzYsIDB4QzdFRCwgMHhDN0ZGLCAweDNBMjksIDB4QzgwMCwgMHhDODAxLCAweDBBNzcsCisgICAgMHhDODAyLCAweEM4MDMsIDB4M0EzQywgMHhDODA0LCAweEM4MDQsIDB4MEE3OSwgMHhDODA1LCAweEM4MDcsIDB4M0EzRSwKKyAgICAweEM4MDgsIDB4QzgwOCwgMHgwQTdBLCAweEM4MDksIDB4QzgwOSwgMHgzQTQxLCAweEM4MEEsIDB4QzgwQSwgMHgwQTdCLAorICAgIDB4QzgwQiwgMHhDODBGLCAweDNBNDIsIDB4QzgxMCwgMHhDODExLCAweDBBN0MsIDB4QzgxMiwgMHhDODEyLCAweDNBNDcsCisgICAgMHhDODEzLCAweEM4MTMsIDB4MEE3RSwgMHhDODE0LCAweEM4MTQsIDB4M0E0OCwgMHhDODE1LCAweEM4MTYsIDB4MEE3RiwKKyAgICAweEM4MTcsIDB4QzgxQiwgMHgzQTQ5LCAweEM4MUMsIDB4QzgxRCwgMHgwQTgxLCAweEM4MUUsIDB4QzgxRiwgMHgzQTRFLAorICAgIDB4QzgyMCwgMHhDODIwLCAweDBBODMsIDB4QzgyMSwgMHhDODIzLCAweDNBNTAsIDB4QzgyNCwgMHhDODI0LCAweDBBODQsCisgICAgMHhDODI1LCAweEM4MkIsIDB4M0E1MywgMHhDODJDLCAweEM4MkQsIDB4MEE4NSwgMHhDODJFLCAweEM4MkUsIDB4M0E1QSwKKyAgICAweEM4MkYsIDB4QzgyRiwgMHgwQTg3LCAweEM4MzAsIDB4QzgzMCwgMHgzQTVCLCAweEM4MzEsIDB4QzgzMSwgMHgwQTg4LAorICAgIDB4QzgzMiwgMHhDODM3LCAweDNBNUMsIDB4QzgzOCwgMHhDODM4LCAweDBBODksIDB4QzgzOSwgMHhDODNCLCAweDNBNjIsCisgICAgMHhDODNDLCAweEM4M0MsIDB4MEE4QSwgMHhDODNELCAweEM4M0YsIDB4M0E2NSwgMHhDODQwLCAweEM4NDAsIDB4MEE4QiwKKyAgICAweEM4NDEsIDB4Qzg0NywgMHgzQTY4LCAweEM4NDgsIDB4Qzg0OSwgMHgwQThDLCAweEM4NEEsIDB4Qzg0QiwgMHgzQTZGLAorICAgIDB4Qzg0QywgMHhDODRELCAweDBBOEUsIDB4Qzg0RSwgMHhDODUzLCAweDNBNzEsIDB4Qzg1NCwgMHhDODU0LCAweDBBOTAsCisgICAgMHhDODU1LCAweEM4NkYsIDB4M0E3NywgMHhDODcwLCAweEM4NzEsIDB4MEE5MSwgMHhDODcyLCAweEM4NzMsIDB4M0E5MiwKKyAgICAweEM4NzQsIDB4Qzg3NCwgMHgwQTkzLCAweEM4NzUsIDB4Qzg3NywgMHgzQTk0LCAweEM4NzgsIDB4Qzg3OCwgMHgwQTk0LAorICAgIDB4Qzg3OSwgMHhDODc5LCAweDNBOTcsIDB4Qzg3QSwgMHhDODdBLCAweDBBOTUsIDB4Qzg3QiwgMHhDODdGLCAweDNBOTgsCisgICAgMHhDODgwLCAweEM4ODEsIDB4MEE5NiwgMHhDODgyLCAweEM4ODIsIDB4M0E5RCwgMHhDODgzLCAweEM4ODMsIDB4MEE5OCwKKyAgICAweEM4ODQsIDB4Qzg4NCwgMHgzQTlFLCAweEM4ODUsIDB4Qzg4NywgMHgwQTk5LCAweEM4ODgsIDB4Qzg4QSwgMHgzQTlGLAorICAgIDB4Qzg4QiwgMHhDODhELCAweDBBOUMsIDB4Qzg4RSwgMHhDODkzLCAweDNBQTIsIDB4Qzg5NCwgMHhDODk0LCAweDBBOUYsCisgICAgMHhDODk1LCAweEM4OUMsIDB4M0FBOCwgMHhDODlELCAweEM4OUQsIDB4MEFBMCwgMHhDODlFLCAweEM4OUUsIDB4M0FCMCwKKyAgICAweEM4OUYsIDB4Qzg5RiwgMHgwQUExLCAweEM4QTAsIDB4QzhBMCwgMHgzQUIxLCAweEM4QTEsIDB4QzhBMSwgMHgwQUEyLAorICAgIDB4QzhBMiwgMHhDOEE3LCAweDNBQjIsIDB4QzhBOCwgMHhDOEE4LCAweDBBQTMsIDB4QzhBOSwgMHhDOEJCLCAweDNBQjgsCisgICAgMHhDOEJDLCAweEM4QkQsIDB4MEFBNCwgMHhDOEJFLCAweEM4QzMsIDB4M0FDQiwgMHhDOEM0LCAweEM4QzQsIDB4MEFBNiwKKyAgICAweEM4QzUsIDB4QzhDNywgMHgzQUQxLCAweEM4QzgsIDB4QzhDOCwgMHgwQUE3LCAweEM4QzksIDB4QzhDQiwgMHgzQUQ0LAorICAgIDB4QzhDQywgMHhDOENDLCAweDBBQTgsIDB4QzhDRCwgMHhDOEQzLCAweDNBRDcsIDB4QzhENCwgMHhDOEQ1LCAweDBBQTksCisgICAgMHhDOEQ2LCAweEM4RDYsIDB4M0FERSwgMHhDOEQ3LCAweEM4RDcsIDB4MEFBQiwgMHhDOEQ4LCAweEM4RDgsIDB4M0FERiwKKyAgICAweEM4RDksIDB4QzhEOSwgMHgwQUFDLCAweEM4REEsIDB4QzhERiwgMHgzQUUwLCAweEM4RTAsIDB4QzhFMSwgMHgwQUFELAorICAgIDB4QzhFMiwgMHhDOEUzLCAweDNBRTYsIDB4QzhFNCwgMHhDOEU0LCAweDBBQUYsIDB4QzhFNSwgMHhDOEY0LCAweDNBRTgsCisgICAgMHhDOEY1LCAweEM4RjUsIDB4MEFCMCwgMHhDOEY2LCAweEM4RkIsIDB4M0FGOCwgMHhDOEZDLCAweEM4RkQsIDB4MEFCMSwKKyAgICAweEM4RkUsIDB4QzhGRiwgMHgzQUZFLCAweEM5MDAsIDB4QzkwMCwgMHgwQUIzLCAweEM5MDEsIDB4QzkwMywgMHgzQjAwLAorICAgIDB4QzkwNCwgMHhDOTA2LCAweDBBQjQsIDB4QzkwNywgMHhDOTBCLCAweDNCMDMsIDB4QzkwQywgMHhDOTBELCAweDBBQjcsCisgICAgMHhDOTBFLCAweEM5MEUsIDB4M0IwOCwgMHhDOTBGLCAweEM5MEYsIDB4MEFCOSwgMHhDOTEwLCAweEM5MTAsIDB4M0IwOSwKKyAgICAweEM5MTEsIDB4QzkxMSwgMHgwQUJBLCAweEM5MTIsIDB4QzkxNywgMHgzQjBBLCAweEM5MTgsIDB4QzkxOCwgMHgwQUJCLAorICAgIDB4QzkxOSwgMHhDOTJCLCAweDNCMTAsIDB4QzkyQywgMHhDOTJDLCAweDBBQkMsIDB4QzkyRCwgMHhDOTMzLCAweDNCMjMsCisgICAgMHhDOTM0LCAweEM5MzQsIDB4MEFCRCwgMHhDOTM1LCAweEM5NEYsIDB4M0IyQSwgMHhDOTUwLCAweEM5NTEsIDB4MEFCRSwKKyAgICAweEM5NTIsIDB4Qzk1MywgMHgzQjQ1LCAweEM5NTQsIDB4Qzk1NCwgMHgwQUMwLCAweEM5NTUsIDB4Qzk1NywgMHgzQjQ3LAorICAgIDB4Qzk1OCwgMHhDOTU4LCAweDBBQzEsIDB4Qzk1OSwgMHhDOTVGLCAweDNCNEEsIDB4Qzk2MCwgMHhDOTYxLCAweDBBQzIsCisgICAgMHhDOTYyLCAweEM5NjIsIDB4M0I1MSwgMHhDOTYzLCAweEM5NjMsIDB4MEFDNCwgMHhDOTY0LCAweEM5NkIsIDB4M0I1MiwKKyAgICAweEM5NkMsIDB4Qzk2QywgMHgwQUM1LCAweEM5NkQsIDB4Qzk2RiwgMHgzQjVBLCAweEM5NzAsIDB4Qzk3MCwgMHgwQUM2LAorICAgIDB4Qzk3MSwgMHhDOTczLCAweDNCNUQsIDB4Qzk3NCwgMHhDOTc0LCAweDBBQzcsIDB4Qzk3NSwgMHhDOTdCLCAweDNCNjAsCisgICAgMHhDOTdDLCAweEM5N0MsIDB4MEFDOCwgMHhDOTdELCAweEM5ODcsIDB4M0I2NywgMHhDOTg4LCAweEM5ODksIDB4MEFDOSwKKyAgICAweEM5OEEsIDB4Qzk4QiwgMHgzQjcyLCAweEM5OEMsIDB4Qzk4QywgMHgwQUNCLCAweEM5OEQsIDB4Qzk4RiwgMHgzQjc0LAorICAgIDB4Qzk5MCwgMHhDOTkwLCAweDBBQ0MsIDB4Qzk5MSwgMHhDOTk3LCAweDNCNzcsIDB4Qzk5OCwgMHhDOTk5LCAweDBBQ0QsCisgICAgMHhDOTlBLCAweEM5OUEsIDB4M0I3RSwgMHhDOTlCLCAweEM5OUIsIDB4MEFDRiwgMHhDOTlDLCAweEM5OUMsIDB4M0I3RiwKKyAgICAweEM5OUQsIDB4Qzk5RCwgMHgwQUQwLCAweEM5OUUsIDB4QzlCRiwgMHgzQjgwLCAweEM5QzAsIDB4QzlDMSwgMHgwQUQxLAorICAgIDB4QzlDMiwgMHhDOUMzLCAweDNCQTIsIDB4QzlDNCwgMHhDOUM0LCAweDBBRDMsIDB4QzlDNSwgMHhDOUM2LCAweDNCQTQsCisgICAgMHhDOUM3LCAweEM5QzgsIDB4MEFENCwgMHhDOUM5LCAweEM5QzksIDB4M0JBNiwgMHhDOUNBLCAweEM5Q0EsIDB4MEFENiwKKyAgICAweEM5Q0IsIDB4QzlDRiwgMHgzQkE3LCAweEM5RDAsIDB4QzlEMSwgMHgwQUQ3LCAweEM5RDIsIDB4QzlEMiwgMHgzQkFDLAorICAgIDB4QzlEMywgMHhDOUQzLCAweDBBRDksIDB4QzlENCwgMHhDOUQ0LCAweDNCQUQsIDB4QzlENSwgMHhDOUQ2LCAweDBBREEsCisgICAgMHhDOUQ3LCAweEM5RDgsIDB4M0JBRSwgMHhDOUQ5LCAweEM5REEsIDB4MEFEQywgMHhDOURCLCAweEM5REIsIDB4M0JCMCwKKyAgICAweEM5REMsIDB4QzlERCwgMHgwQURFLCAweEM5REUsIDB4QzlERiwgMHgzQkIxLCAweEM5RTAsIDB4QzlFMCwgMHgwQUUwLAorICAgIDB4QzlFMSwgMHhDOUUxLCAweDNCQjMsIDB4QzlFMiwgMHhDOUUyLCAweDBBRTEsIDB4QzlFMywgMHhDOUUzLCAweDNCQjQsCisgICAgMHhDOUU0LCAweEM5RTQsIDB4MEFFMiwgMHhDOUU1LCAweEM5RTYsIDB4M0JCNSwgMHhDOUU3LCAweEM5RTcsIDB4MEFFMywKKyAgICAweEM5RTgsIDB4QzlFQiwgMHgzQkI3LCAweEM5RUMsIDB4QzlFRCwgMHgwQUU0LCAweEM5RUUsIDB4QzlFRSwgMHgzQkJCLAorICAgIDB4QzlFRiwgMHhDOUYxLCAweDBBRTYsIDB4QzlGMiwgMHhDOUY3LCAweDNCQkMsIDB4QzlGOCwgMHhDOUY5LCAweDBBRTksCisgICAgMHhDOUZBLCAweEM5RkIsIDB4M0JDMiwgMHhDOUZDLCAweEM5RkMsIDB4MEFFQiwgMHhDOUZELCAweEM5RkYsIDB4M0JDNCwKKyAgICAweENBMDAsIDB4Q0EwMCwgMHgwQUVDLCAweENBMDEsIDB4Q0EwNywgMHgzQkM3LCAweENBMDgsIDB4Q0EwOSwgMHgwQUVELAorICAgIDB4Q0EwQSwgMHhDQTBBLCAweDNCQ0UsIDB4Q0EwQiwgMHhDQTBELCAweDBBRUYsIDB4Q0EwRSwgMHhDQTEzLCAweDNCQ0YsCisgICAgMHhDQTE0LCAweENBMTQsIDB4MEFGMiwgMHhDQTE1LCAweENBMTcsIDB4M0JENSwgMHhDQTE4LCAweENBMTgsIDB4MEFGMywKKyAgICAweENBMTksIDB4Q0EyOCwgMHgzQkQ4LCAweENBMjksIDB4Q0EyOSwgMHgwQUY0LCAweENBMkEsIDB4Q0E0QiwgMHgzQkU4LAorICAgIDB4Q0E0QywgMHhDQTRELCAweDBBRjUsIDB4Q0E0RSwgMHhDQTRGLCAweDNDMEEsIDB4Q0E1MCwgMHhDQTUwLCAweDBBRjcsCisgICAgMHhDQTUxLCAweENBNTMsIDB4M0MwQywgMHhDQTU0LCAweENBNTQsIDB4MEFGOCwgMHhDQTU1LCAweENBNUIsIDB4M0MwRiwKKyAgICAweENBNUMsIDB4Q0E1RCwgMHgwQUY5LCAweENBNUUsIDB4Q0E1RSwgMHgzQzE2LCAweENBNUYsIDB4Q0E2MSwgMHgwQUZCLAorICAgIDB4Q0E2MiwgMHhDQTY3LCAweDNDMTcsIDB4Q0E2OCwgMHhDQTY4LCAweDBBRkUsIDB4Q0E2OSwgMHhDQTdDLCAweDNDMUQsCisgICAgMHhDQTdELCAweENBN0QsIDB4MEFGRiwgMHhDQTdFLCAweENBODMsIDB4M0MzMSwgMHhDQTg0LCAweENBODQsIDB4MEIwMCwKKyAgICAweENBODUsIDB4Q0E5NywgMHgzQzM3LCAweENBOTgsIDB4Q0E5OCwgMHgwQjAxLCAweENBOTksIDB4Q0FCQiwgMHgzQzRBLAorICAgIDB4Q0FCQywgMHhDQUJELCAweDBCMDIsIDB4Q0FCRSwgMHhDQUJGLCAweDNDNkQsIDB4Q0FDMCwgMHhDQUMwLCAweDBCMDQsCisgICAgMHhDQUMxLCAweENBQzMsIDB4M0M2RiwgMHhDQUM0LCAweENBQzQsIDB4MEIwNSwgMHhDQUM1LCAweENBQ0IsIDB4M0M3MiwKKyAgICAweENBQ0MsIDB4Q0FDRCwgMHgwQjA2LCAweENBQ0UsIDB4Q0FDRSwgMHgzQzc5LCAweENBQ0YsIDB4Q0FDRiwgMHgwQjA4LAorICAgIDB4Q0FEMCwgMHhDQUQwLCAweDNDN0EsIDB4Q0FEMSwgMHhDQUQxLCAweDBCMDksIDB4Q0FEMiwgMHhDQUQyLCAweDNDN0IsCisgICAgMHhDQUQzLCAweENBRDMsIDB4MEIwQSwgMHhDQUQ0LCAweENBRDcsIDB4M0M3QywgMHhDQUQ4LCAweENBRDksIDB4MEIwQiwKKyAgICAweENBREEsIDB4Q0FERiwgMHgzQzgwLCAweENBRTAsIDB4Q0FFMCwgMHgwQjBELCAweENBRTEsIDB4Q0FFQiwgMHgzQzg2LAorICAgIDB4Q0FFQywgMHhDQUVDLCAweDBCMEUsIDB4Q0FFRCwgMHhDQUYzLCAweDNDOTEsIDB4Q0FGNCwgMHhDQUY0LCAweDBCMEYsCisgICAgMHhDQUY1LCAweENBRkYsIDB4M0M5OCwgMHhDQjAwLCAweENCMDcsIDB4M0NBMywgMHhDQjA4LCAweENCMDgsIDB4MEIxMCwKKyAgICAweENCMDksIDB4Q0IwRiwgMHgzQ0FCLCAweENCMTAsIDB4Q0IxMCwgMHgwQjExLCAweENCMTEsIDB4Q0IxMywgMHgzQ0IyLAorICAgIDB4Q0IxNCwgMHhDQjE0LCAweDBCMTIsIDB4Q0IxNSwgMHhDQjE3LCAweDNDQjUsIDB4Q0IxOCwgMHhDQjE4LCAweDBCMTMsCisgICAgMHhDQjE5LCAweENCMUYsIDB4M0NCOCwgMHhDQjIwLCAweENCMjEsIDB4MEIxNCwgMHhDQjIyLCAweENCNDAsIDB4M0NCRiwKKyAgICAweENCNDEsIDB4Q0I0MSwgMHgwQjE2LCAweENCNDIsIDB4Q0I0NywgMHgzQ0RFLCAweENCNDgsIDB4Q0I0OSwgMHgwQjE3LAorICAgIDB4Q0I0QSwgMHhDQjRCLCAweDNDRTQsIDB4Q0I0QywgMHhDQjRDLCAweDBCMTksIDB4Q0I0RCwgMHhDQjRGLCAweDNDRTYsCisgICAgMHhDQjUwLCAweENCNTAsIDB4MEIxQSwgMHhDQjUxLCAweENCNTcsIDB4M0NFOSwgMHhDQjU4LCAweENCNTksIDB4MEIxQiwKKyAgICAweENCNUEsIDB4Q0I1QywgMHgzQ0YwLCAweENCNUQsIDB4Q0I1RCwgMHgwQjFELCAweENCNUUsIDB4Q0I2MywgMHgzQ0YzLAorICAgIDB4Q0I2NCwgMHhDQjY0LCAweDBCMUUsIDB4Q0I2NSwgMHhDQjc3LCAweDNDRjksIDB4Q0I3OCwgMHhDQjc5LCAweDBCMUYsCisgICAgMHhDQjdBLCAweENCOUIsIDB4M0QwQywgMHhDQjlDLCAweENCOUMsIDB4MEIyMSwgMHhDQjlELCAweENCQjcsIDB4M0QyRSwKKyAgICAweENCQjgsIDB4Q0JCOCwgMHgwQjIyLCAweENCQjksIDB4Q0JEMywgMHgzRDQ5LCAweENCRDQsIDB4Q0JENCwgMHgwQjIzLAorICAgIDB4Q0JENSwgMHhDQkUzLCAweDNENjQsIDB4Q0JFNCwgMHhDQkU0LCAweDBCMjQsIDB4Q0JFNSwgMHhDQkU2LCAweDNENzMsCisgICAgMHhDQkU3LCAweENCRTcsIDB4MEIyNSwgMHhDQkU4LCAweENCRTgsIDB4M0Q3NSwgMHhDQkU5LCAweENCRTksIDB4MEIyNiwKKyAgICAweENCRUEsIDB4Q0JGRiwgMHgzRDc2LCAweENDMDAsIDB4Q0MwQiwgMHgzRDhDLCAweENDMEMsIDB4Q0MwRCwgMHgwQjI3LAorICAgIDB4Q0MwRSwgMHhDQzBGLCAweDNEOTgsIDB4Q0MxMCwgMHhDQzEwLCAweDBCMjksIDB4Q0MxMSwgMHhDQzEzLCAweDNEOUEsCisgICAgMHhDQzE0LCAweENDMTQsIDB4MEIyQSwgMHhDQzE1LCAweENDMUIsIDB4M0Q5RCwgMHhDQzFDLCAweENDMUQsIDB4MEIyQiwKKyAgICAweENDMUUsIDB4Q0MyMCwgMHgzREE0LCAweENDMjEsIDB4Q0MyMiwgMHgwQjJELCAweENDMjMsIDB4Q0MyNiwgMHgzREE3LAorICAgIDB4Q0MyNywgMHhDQzI5LCAweDBCMkYsIDB4Q0MyQSwgMHhDQzJCLCAweDNEQUIsIDB4Q0MyQywgMHhDQzJDLCAweDBCMzIsCisgICAgMHhDQzJELCAweENDMkQsIDB4M0RBRCwgMHhDQzJFLCAweENDMkUsIDB4MEIzMywgMHhDQzJGLCAweENDMkYsIDB4M0RBRSwKKyAgICAweENDMzAsIDB4Q0MzMCwgMHgwQjM0LCAweENDMzEsIDB4Q0MzNywgMHgzREFGLCAweENDMzgsIDB4Q0MzOSwgMHgwQjM1LAorICAgIDB4Q0MzQSwgMHhDQzNBLCAweDNEQjYsIDB4Q0MzQiwgMHhDQzNFLCAweDBCMzcsIDB4Q0MzRiwgMHhDQzQzLCAweDNEQjcsCisgICAgMHhDQzQ0LCAweENDNDUsIDB4MEIzQiwgMHhDQzQ2LCAweENDNDcsIDB4M0RCQywgMHhDQzQ4LCAweENDNDgsIDB4MEIzRCwKKyAgICAweENDNDksIDB4Q0M0QiwgMHgzREJFLCAweENDNEMsIDB4Q0M0QywgMHgwQjNFLCAweENDNEQsIDB4Q0M1MywgMHgzREMxLAorICAgIDB4Q0M1NCwgMHhDQzU1LCAweDBCM0YsIDB4Q0M1NiwgMHhDQzU2LCAweDNEQzgsIDB4Q0M1NywgMHhDQzU5LCAweDBCNDEsCisgICAgMHhDQzVBLCAweENDNUYsIDB4M0RDOSwgMHhDQzYwLCAweENDNjAsIDB4MEI0NCwgMHhDQzYxLCAweENDNjMsIDB4M0RDRiwKKyAgICAweENDNjQsIDB4Q0M2NCwgMHgwQjQ1LCAweENDNjUsIDB4Q0M2NSwgMHgzREQyLCAweENDNjYsIDB4Q0M2NiwgMHgwQjQ2LAorICAgIDB4Q0M2NywgMHhDQzY3LCAweDNERDMsIDB4Q0M2OCwgMHhDQzY4LCAweDBCNDcsIDB4Q0M2OSwgMHhDQzZGLCAweDNERDQsCisgICAgMHhDQzcwLCAweENDNzAsIDB4MEI0OCwgMHhDQzcxLCAweENDNzQsIDB4M0REQiwgMHhDQzc1LCAweENDNzUsIDB4MEI0OSwKKyAgICAweENDNzYsIDB4Q0M5NywgMHgzRERGLCAweENDOTgsIDB4Q0M5OSwgMHgwQjRBLCAweENDOUEsIDB4Q0M5QiwgMHgzRTAxLAorICAgIDB4Q0M5QywgMHhDQzlDLCAweDBCNEMsIDB4Q0M5RCwgMHhDQzlGLCAweDNFMDMsIDB4Q0NBMCwgMHhDQ0EwLCAweDBCNEQsCisgICAgMHhDQ0ExLCAweENDQTcsIDB4M0UwNiwgMHhDQ0E4LCAweENDQTksIDB4MEI0RSwgMHhDQ0FBLCAweENDQUEsIDB4M0UwRCwKKyAgICAweENDQUIsIDB4Q0NBRCwgMHgwQjUwLCAweENDQUUsIDB4Q0NCMywgMHgzRTBFLCAweENDQjQsIDB4Q0NCNSwgMHgwQjUzLAorICAgIDB4Q0NCNiwgMHhDQ0I3LCAweDNFMTQsIDB4Q0NCOCwgMHhDQ0I4LCAweDBCNTUsIDB4Q0NCOSwgMHhDQ0JCLCAweDNFMTYsCisgICAgMHhDQ0JDLCAweENDQkMsIDB4MEI1NiwgMHhDQ0JELCAweENDQzMsIDB4M0UxOSwgMHhDQ0M0LCAweENDQzUsIDB4MEI1NywKKyAgICAweENDQzYsIDB4Q0NDNiwgMHgzRTIwLCAweENDQzcsIDB4Q0NDNywgMHgwQjU5LCAweENDQzgsIDB4Q0NDOCwgMHgzRTIxLAorICAgIDB4Q0NDOSwgMHhDQ0M5LCAweDBCNUEsIDB4Q0NDQSwgMHhDQ0NGLCAweDNFMjIsIDB4Q0NEMCwgMHhDQ0QwLCAweDBCNUIsCisgICAgMHhDQ0QxLCAweENDRDMsIDB4M0UyOCwgMHhDQ0Q0LCAweENDRDQsIDB4MEI1QywgMHhDQ0Q1LCAweENDRTMsIDB4M0UyQiwKKyAgICAweENDRTQsIDB4Q0NFNCwgMHgwQjVELCAweENDRTUsIDB4Q0NFQiwgMHgzRTNBLCAweENDRUMsIDB4Q0NFQywgMHgwQjVFLAorICAgIDB4Q0NFRCwgMHhDQ0VGLCAweDNFNDEsIDB4Q0NGMCwgMHhDQ0YwLCAweDBCNUYsIDB4Q0NGMSwgMHhDQ0ZGLCAweDNFNDQsCisgICAgMHhDRDAwLCAweENEMDAsIDB4M0U1MywgMHhDRDAxLCAweENEMDEsIDB4MEI2MCwgMHhDRDAyLCAweENEMDcsIDB4M0U1NCwKKyAgICAweENEMDgsIDB4Q0QwOSwgMHgwQjYxLCAweENEMEEsIDB4Q0QwQiwgMHgzRTVBLCAweENEMEMsIDB4Q0QwQywgMHgwQjYzLAorICAgIDB4Q0QwRCwgMHhDRDBGLCAweDNFNUMsIDB4Q0QxMCwgMHhDRDEwLCAweDBCNjQsIDB4Q0QxMSwgMHhDRDE3LCAweDNFNUYsCisgICAgMHhDRDE4LCAweENEMTksIDB4MEI2NSwgMHhDRDFBLCAweENEMUEsIDB4M0U2NiwgMHhDRDFCLCAweENEMUIsIDB4MEI2NywKKyAgICAweENEMUMsIDB4Q0QxQywgMHgzRTY3LCAweENEMUQsIDB4Q0QxRCwgMHgwQjY4LCAweENEMUUsIDB4Q0QyMywgMHgzRTY4LAorICAgIDB4Q0QyNCwgMHhDRDI0LCAweDBCNjksIDB4Q0QyNSwgMHhDRDI3LCAweDNFNkUsIDB4Q0QyOCwgMHhDRDI4LCAweDBCNkEsCisgICAgMHhDRDI5LCAweENEMkIsIDB4M0U3MSwgMHhDRDJDLCAweENEMkMsIDB4MEI2QiwgMHhDRDJELCAweENEMzgsIDB4M0U3NCwKKyAgICAweENEMzksIDB4Q0QzOSwgMHgwQjZDLCAweENEM0EsIDB4Q0Q1QiwgMHgzRTgwLCAweENENUMsIDB4Q0Q1QywgMHgwQjZELAorICAgIDB4Q0Q1RCwgMHhDRDVGLCAweDNFQTIsIDB4Q0Q2MCwgMHhDRDYwLCAweDBCNkUsIDB4Q0Q2MSwgMHhDRDYzLCAweDNFQTUsCisgICAgMHhDRDY0LCAweENENjQsIDB4MEI2RiwgMHhDRDY1LCAweENENkIsIDB4M0VBOCwgMHhDRDZDLCAweENENkQsIDB4MEI3MCwKKyAgICAweENENkUsIDB4Q0Q2RSwgMHgzRUFGLCAweENENkYsIDB4Q0Q2RiwgMHgwQjcyLCAweENENzAsIDB4Q0Q3MCwgMHgzRUIwLAorICAgIDB4Q0Q3MSwgMHhDRDcxLCAweDBCNzMsIDB4Q0Q3MiwgMHhDRDc3LCAweDNFQjEsIDB4Q0Q3OCwgMHhDRDc4LCAweDBCNzQsCisgICAgMHhDRDc5LCAweENEODcsIDB4M0VCNywgMHhDRDg4LCAweENEODgsIDB4MEI3NSwgMHhDRDg5LCAweENEOTMsIDB4M0VDNiwKKyAgICAweENEOTQsIDB4Q0Q5NSwgMHgwQjc2LCAweENEOTYsIDB4Q0Q5NywgMHgzRUQxLCAweENEOTgsIDB4Q0Q5OCwgMHgwQjc4LAorICAgIDB4Q0Q5OSwgMHhDRDlCLCAweDNFRDMsIDB4Q0Q5QywgMHhDRDlDLCAweDBCNzksIDB4Q0Q5RCwgMHhDREEzLCAweDNFRDYsCisgICAgMHhDREE0LCAweENEQTUsIDB4MEI3QSwgMHhDREE2LCAweENEQTYsIDB4M0VERCwgMHhDREE3LCAweENEQTcsIDB4MEI3QywKKyAgICAweENEQTgsIDB4Q0RBOCwgMHgzRURFLCAweENEQTksIDB4Q0RBOSwgMHgwQjdELCAweENEQUEsIDB4Q0RBRiwgMHgzRURGLAorICAgIDB4Q0RCMCwgMHhDREIwLCAweDBCN0UsIDB4Q0RCMSwgMHhDREMzLCAweDNFRTUsIDB4Q0RDNCwgMHhDREM0LCAweDBCN0YsCisgICAgMHhDREM1LCAweENEQ0IsIDB4M0VGOCwgMHhDRENDLCAweENEQ0MsIDB4MEI4MCwgMHhDRENELCAweENEQ0YsIDB4M0VGRiwKKyAgICAweENERDAsIDB4Q0REMCwgMHgwQjgxLCAweENERDEsIDB4Q0RFNywgMHgzRjAyLCAweENERTgsIDB4Q0RFOCwgMHgwQjgyLAorICAgIDB4Q0RFOSwgMHhDREVCLCAweDNGMTksIDB4Q0RFQywgMHhDREVDLCAweDBCODMsIDB4Q0RFRCwgMHhDREVGLCAweDNGMUMsCisgICAgMHhDREYwLCAweENERjAsIDB4MEI4NCwgMHhDREYxLCAweENERjcsIDB4M0YxRiwgMHhDREY4LCAweENERjksIDB4MEI4NSwKKyAgICAweENERkEsIDB4Q0RGQSwgMHgzRjI2LCAweENERkIsIDB4Q0RGQiwgMHgwQjg3LCAweENERkMsIDB4Q0RGQywgMHgzRjI3LAorICAgIDB4Q0RGRCwgMHhDREZELCAweDBCODgsIDB4Q0RGRSwgMHhDREZGLCAweDNGMjgsIDB4Q0UwMCwgMHhDRTAzLCAweDNGMkEsCisgICAgMHhDRTA0LCAweENFMDQsIDB4MEI4OSwgMHhDRTA1LCAweENFMDcsIDB4M0YyRSwgMHhDRTA4LCAweENFMDgsIDB4MEI4QSwKKyAgICAweENFMDksIDB4Q0UwQiwgMHgzRjMxLCAweENFMEMsIDB4Q0UwQywgMHgwQjhCLCAweENFMEQsIDB4Q0UxMywgMHgzRjM0LAorICAgIDB4Q0UxNCwgMHhDRTE0LCAweDBCOEMsIDB4Q0UxNSwgMHhDRTE4LCAweDNGM0IsIDB4Q0UxOSwgMHhDRTE5LCAweDBCOEQsCisgICAgMHhDRTFBLCAweENFMUYsIDB4M0YzRiwgMHhDRTIwLCAweENFMjEsIDB4MEI4RSwgMHhDRTIyLCAweENFMjMsIDB4M0Y0NSwKKyAgICAweENFMjQsIDB4Q0UyNCwgMHgwQjkwLCAweENFMjUsIDB4Q0UyNywgMHgzRjQ3LCAweENFMjgsIDB4Q0UyOCwgMHgwQjkxLAorICAgIDB4Q0UyOSwgMHhDRTJGLCAweDNGNEEsIDB4Q0UzMCwgMHhDRTMxLCAweDBCOTIsIDB4Q0UzMiwgMHhDRTMyLCAweDNGNTEsCisgICAgMHhDRTMzLCAweENFMzMsIDB4MEI5NCwgMHhDRTM0LCAweENFMzQsIDB4M0Y1MiwgMHhDRTM1LCAweENFMzUsIDB4MEI5NSwKKyAgICAweENFMzYsIDB4Q0U1NywgMHgzRjUzLCAweENFNTgsIDB4Q0U1OSwgMHgwQjk2LCAweENFNUEsIDB4Q0U1QiwgMHgzRjc1LAorICAgIDB4Q0U1QywgMHhDRTVDLCAweDBCOTgsIDB4Q0U1RCwgMHhDRTVFLCAweDNGNzcsIDB4Q0U1RiwgMHhDRTYxLCAweDBCOTksCisgICAgMHhDRTYyLCAweENFNjcsIDB4M0Y3OSwgMHhDRTY4LCAweENFNjksIDB4MEI5QywgMHhDRTZBLCAweENFNkEsIDB4M0Y3RiwKKyAgICAweENFNkIsIDB4Q0U2QiwgMHgwQjlFLCAweENFNkMsIDB4Q0U2QywgMHgzRjgwLCAweENFNkQsIDB4Q0U2RCwgMHgwQjlGLAorICAgIDB4Q0U2RSwgMHhDRTczLCAweDNGODEsIDB4Q0U3NCwgMHhDRTc1LCAweDBCQTAsIDB4Q0U3NiwgMHhDRTc3LCAweDNGODcsCisgICAgMHhDRTc4LCAweENFNzgsIDB4MEJBMiwgMHhDRTc5LCAweENFN0IsIDB4M0Y4OSwgMHhDRTdDLCAweENFN0MsIDB4MEJBMywKKyAgICAweENFN0QsIDB4Q0U4MywgMHgzRjhDLCAweENFODQsIDB4Q0U4NSwgMHgwQkE0LCAweENFODYsIDB4Q0U4NiwgMHgzRjkzLAorICAgIDB4Q0U4NywgMHhDRTg3LCAweDBCQTYsIDB4Q0U4OCwgMHhDRTg4LCAweDNGOTQsIDB4Q0U4OSwgMHhDRTg5LCAweDBCQTcsCisgICAgMHhDRThBLCAweENFOEYsIDB4M0Y5NSwgMHhDRTkwLCAweENFOTEsIDB4MEJBOCwgMHhDRTkyLCAweENFOTMsIDB4M0Y5QiwKKyAgICAweENFOTQsIDB4Q0U5NCwgMHgwQkFBLCAweENFOTUsIDB4Q0U5NywgMHgzRjlELCAweENFOTgsIDB4Q0U5OCwgMHgwQkFCLAorICAgIDB4Q0U5OSwgMHhDRTlGLCAweDNGQTAsIDB4Q0VBMCwgMHhDRUExLCAweDBCQUMsIDB4Q0VBMiwgMHhDRUEyLCAweDNGQTcsCisgICAgMHhDRUEzLCAweENFQTUsIDB4MEJBRSwgMHhDRUE2LCAweENFQUIsIDB4M0ZBOCwgMHhDRUFDLCAweENFQUQsIDB4MEJCMSwKKyAgICAweENFQUUsIDB4Q0VDMCwgMHgzRkFFLCAweENFQzEsIDB4Q0VDMSwgMHgwQkIzLCAweENFQzIsIDB4Q0VFMywgMHgzRkMxLAorICAgIDB4Q0VFNCwgMHhDRUU1LCAweDBCQjQsIDB4Q0VFNiwgMHhDRUU3LCAweDNGRTMsIDB4Q0VFOCwgMHhDRUU4LCAweDBCQjYsCisgICAgMHhDRUU5LCAweENFRUEsIDB4M0ZFNSwgMHhDRUVCLCAweENFRUMsIDB4MEJCNywgMHhDRUVELCAweENFRjMsIDB4M0ZFNywKKyAgICAweENFRjQsIDB4Q0VGNSwgMHgwQkI5LCAweENFRjYsIDB4Q0VGNiwgMHgzRkVFLCAweENFRjcsIDB4Q0VGOSwgMHgwQkJCLAorICAgIDB4Q0VGQSwgMHhDRUZGLCAweDNGRUYsIDB4Q0YwMCwgMHhDRjAxLCAweDBCQkUsIDB4Q0YwMiwgMHhDRjAzLCAweDNGRjUsCisgICAgMHhDRjA0LCAweENGMDQsIDB4MEJDMCwgMHhDRjA1LCAweENGMDcsIDB4M0ZGNywgMHhDRjA4LCAweENGMDgsIDB4MEJDMSwKKyAgICAweENGMDksIDB4Q0YwRiwgMHgzRkZBLCAweENGMTAsIDB4Q0YxMSwgMHgwQkMyLCAweENGMTIsIDB4Q0YxMiwgMHg0MDAxLAorICAgIDB4Q0YxMywgMHhDRjEzLCAweDBCQzQsIDB4Q0YxNCwgMHhDRjE0LCAweDQwMDIsIDB4Q0YxNSwgMHhDRjE1LCAweDBCQzUsCisgICAgMHhDRjE2LCAweENGMUIsIDB4NDAwMywgMHhDRjFDLCAweENGMUMsIDB4MEJDNiwgMHhDRjFELCAweENGMUYsIDB4NDAwOSwKKyAgICAweENGMjAsIDB4Q0YyMCwgMHgwQkM3LCAweENGMjEsIDB4Q0YyMywgMHg0MDBDLCAweENGMjQsIDB4Q0YyNCwgMHgwQkM4LAorICAgIDB4Q0YyNSwgMHhDRjJCLCAweDQwMEYsIDB4Q0YyQywgMHhDRjJELCAweDBCQzksIDB4Q0YyRSwgMHhDRjJFLCAweDQwMTYsCisgICAgMHhDRjJGLCAweENGMzEsIDB4MEJDQiwgMHhDRjMyLCAweENGMzcsIDB4NDAxNywgMHhDRjM4LCAweENGMzgsIDB4MEJDRSwKKyAgICAweENGMzksIDB4Q0Y1MywgMHg0MDFELCAweENGNTQsIDB4Q0Y1NSwgMHgwQkNGLCAweENGNTYsIDB4Q0Y1NywgMHg0MDM4LAorICAgIDB4Q0Y1OCwgMHhDRjU4LCAweDBCRDEsIDB4Q0Y1OSwgMHhDRjVCLCAweDQwM0EsIDB4Q0Y1QywgMHhDRjVDLCAweDBCRDIsCisgICAgMHhDRjVELCAweENGNjMsIDB4NDAzRCwgMHhDRjY0LCAweENGNjUsIDB4MEJEMywgMHhDRjY2LCAweENGNjYsIDB4NDA0NCwKKyAgICAweENGNjcsIDB4Q0Y2NywgMHgwQkQ1LCAweENGNjgsIDB4Q0Y2OCwgMHg0MDQ1LCAweENGNjksIDB4Q0Y2OSwgMHgwQkQ2LAorICAgIDB4Q0Y2QSwgMHhDRjZGLCAweDQwNDYsIDB4Q0Y3MCwgMHhDRjcxLCAweDBCRDcsIDB4Q0Y3MiwgMHhDRjczLCAweDQwNEMsCisgICAgMHhDRjc0LCAweENGNzQsIDB4MEJEOSwgMHhDRjc1LCAweENGNzcsIDB4NDA0RSwgMHhDRjc4LCAweENGNzgsIDB4MEJEQSwKKyAgICAweENGNzksIDB4Q0Y3RiwgMHg0MDUxLCAweENGODAsIDB4Q0Y4MCwgMHgwQkRCLCAweENGODEsIDB4Q0Y4NCwgMHg0MDU4LAorICAgIDB4Q0Y4NSwgMHhDRjg1LCAweDBCREMsIDB4Q0Y4NiwgMHhDRjhCLCAweDQwNUMsIDB4Q0Y4QywgMHhDRjhDLCAweDBCREQsCisgICAgMHhDRjhELCAweENGQTAsIDB4NDA2MiwgMHhDRkExLCAweENGQTEsIDB4MEJERSwgMHhDRkEyLCAweENGQTcsIDB4NDA3NiwKKyAgICAweENGQTgsIDB4Q0ZBOCwgMHgwQkRGLCAweENGQTksIDB4Q0ZBRiwgMHg0MDdDLCAweENGQjAsIDB4Q0ZCMCwgMHgwQkUwLAorICAgIDB4Q0ZCMSwgMHhDRkMzLCAweDQwODMsIDB4Q0ZDNCwgMHhDRkM0LCAweDBCRTEsIDB4Q0ZDNSwgMHhDRkRGLCAweDQwOTYsCisgICAgMHhDRkUwLCAweENGRTEsIDB4MEJFMiwgMHhDRkUyLCAweENGRTMsIDB4NDBCMSwgMHhDRkU0LCAweENGRTQsIDB4MEJFNCwKKyAgICAweENGRTUsIDB4Q0ZFNywgMHg0MEIzLCAweENGRTgsIDB4Q0ZFOCwgMHgwQkU1LCAweENGRTksIDB4Q0ZFRiwgMHg0MEI2LAorICAgIDB4Q0ZGMCwgMHhDRkYxLCAweDBCRTYsIDB4Q0ZGMiwgMHhDRkYyLCAweDQwQkQsIDB4Q0ZGMywgMHhDRkYzLCAweDBCRTgsCisgICAgMHhDRkY0LCAweENGRjQsIDB4NDBCRSwgMHhDRkY1LCAweENGRjUsIDB4MEJFOSwgMHhDRkY2LCAweENGRkIsIDB4NDBCRiwKKyAgICAweENGRkMsIDB4Q0ZGQywgMHgwQkVBLCAweENGRkQsIDB4Q0ZGRiwgMHg0MEM1LCAweEQwMDAsIDB4RDAwMCwgMHgwQkVCLAorICAgIDB4RDAwMSwgMHhEMDAzLCAweDQwQzgsIDB4RDAwNCwgMHhEMDA0LCAweDBCRUMsIDB4RDAwNSwgMHhEMDEwLCAweDQwQ0IsCisgICAgMHhEMDExLCAweEQwMTEsIDB4MEJFRCwgMHhEMDEyLCAweEQwMTcsIDB4NDBENywgMHhEMDE4LCAweEQwMTgsIDB4MEJFRSwKKyAgICAweEQwMTksIDB4RDAyQywgMHg0MERELCAweEQwMkQsIDB4RDAyRCwgMHgwQkVGLCAweEQwMkUsIDB4RDAzMywgMHg0MEYxLAorICAgIDB4RDAzNCwgMHhEMDM1LCAweDBCRjAsIDB4RDAzNiwgMHhEMDM3LCAweDQwRjcsIDB4RDAzOCwgMHhEMDM4LCAweDBCRjIsCisgICAgMHhEMDM5LCAweEQwM0IsIDB4NDBGOSwgMHhEMDNDLCAweEQwM0MsIDB4MEJGMywgMHhEMDNELCAweEQwNDMsIDB4NDBGQywKKyAgICAweEQwNDQsIDB4RDA0NSwgMHgwQkY0LCAweEQwNDYsIDB4RDA0NiwgMHg0MTAzLCAweEQwNDcsIDB4RDA0NywgMHgwQkY2LAorICAgIDB4RDA0OCwgMHhEMDQ4LCAweDQxMDQsIDB4RDA0OSwgMHhEMDQ5LCAweDBCRjcsIDB4RDA0QSwgMHhEMDRGLCAweDQxMDUsCisgICAgMHhEMDUwLCAweEQwNTAsIDB4MEJGOCwgMHhEMDUxLCAweEQwNTMsIDB4NDEwQiwgMHhEMDU0LCAweEQwNTQsIDB4MEJGOSwKKyAgICAweEQwNTUsIDB4RDA1NywgMHg0MTBFLCAweEQwNTgsIDB4RDA1OCwgMHgwQkZBLCAweEQwNTksIDB4RDA1RiwgMHg0MTExLAorICAgIDB4RDA2MCwgMHhEMDYwLCAweDBCRkIsIDB4RDA2MSwgMHhEMDZCLCAweDQxMTgsIDB4RDA2QywgMHhEMDZELCAweDBCRkMsCisgICAgMHhEMDZFLCAweEQwNkYsIDB4NDEyMywgMHhEMDcwLCAweEQwNzAsIDB4MEJGRSwgMHhEMDcxLCAweEQwNzMsIDB4NDEyNSwKKyAgICAweEQwNzQsIDB4RDA3NCwgMHgwQkZGLCAweEQwNzUsIDB4RDA3QiwgMHg0MTI4LCAweEQwN0MsIDB4RDA3RCwgMHgwQzAwLAorICAgIDB4RDA3RSwgMHhEMDgwLCAweDQxMkYsIDB4RDA4MSwgMHhEMDgxLCAweDBDMDIsIDB4RDA4MiwgMHhEMEEzLCAweDQxMzIsCisgICAgMHhEMEE0LCAweEQwQTUsIDB4MEMwMywgMHhEMEE2LCAweEQwQTcsIDB4NDE1NCwgMHhEMEE4LCAweEQwQTgsIDB4MEMwNSwKKyAgICAweEQwQTksIDB4RDBBQiwgMHg0MTU2LCAweEQwQUMsIDB4RDBBQywgMHgwQzA2LCAweEQwQUQsIDB4RDBCMywgMHg0MTU5LAorICAgIDB4RDBCNCwgMHhEMEI1LCAweDBDMDcsIDB4RDBCNiwgMHhEMEI2LCAweDQxNjAsIDB4RDBCNywgMHhEMEI3LCAweDBDMDksCisgICAgMHhEMEI4LCAweEQwQjgsIDB4NDE2MSwgMHhEMEI5LCAweEQwQjksIDB4MEMwQSwgMHhEMEJBLCAweEQwQkYsIDB4NDE2MiwKKyAgICAweEQwQzAsIDB4RDBDMSwgMHgwQzBCLCAweEQwQzIsIDB4RDBDMywgMHg0MTY4LCAweEQwQzQsIDB4RDBDNCwgMHgwQzBELAorICAgIDB4RDBDNSwgMHhEMEM3LCAweDQxNkEsIDB4RDBDOCwgMHhEMEM5LCAweDBDMEUsIDB4RDBDQSwgMHhEMENGLCAweDQxNkQsCisgICAgMHhEMEQwLCAweEQwRDEsIDB4MEMxMCwgMHhEMEQyLCAweEQwRDIsIDB4NDE3MywgMHhEMEQzLCAweEQwRDUsIDB4MEMxMiwKKyAgICAweEQwRDYsIDB4RDBEQiwgMHg0MTc0LCAweEQwREMsIDB4RDBERCwgMHgwQzE1LCAweEQwREUsIDB4RDBERiwgMHg0MTdBLAorICAgIDB4RDBFMCwgMHhEMEUwLCAweDBDMTcsIDB4RDBFMSwgMHhEMEUzLCAweDQxN0MsIDB4RDBFNCwgMHhEMEU0LCAweDBDMTgsCisgICAgMHhEMEU1LCAweEQwRUIsIDB4NDE3RiwgMHhEMEVDLCAweEQwRUQsIDB4MEMxOSwgMHhEMEVFLCAweEQwRUUsIDB4NDE4NiwKKyAgICAweEQwRUYsIDB4RDBGMSwgMHgwQzFCLCAweEQwRjIsIDB4RDBGNywgMHg0MTg3LCAweEQwRjgsIDB4RDBGOCwgMHgwQzFFLAorICAgIDB4RDBGOSwgMHhEMEZGLCAweDQxOEQsIDB4RDEwMCwgMHhEMTBDLCAweDQxOTQsIDB4RDEwRCwgMHhEMTBELCAweDBDMUYsCisgICAgMHhEMTBFLCAweEQxMkYsIDB4NDFBMSwgMHhEMTMwLCAweEQxMzEsIDB4MEMyMCwgMHhEMTMyLCAweEQxMzMsIDB4NDFDMywKKyAgICAweEQxMzQsIDB4RDEzNCwgMHgwQzIyLCAweEQxMzUsIDB4RDEzNywgMHg0MUM1LCAweEQxMzgsIDB4RDEzOCwgMHgwQzIzLAorICAgIDB4RDEzOSwgMHhEMTM5LCAweDQxQzgsIDB4RDEzQSwgMHhEMTNBLCAweDBDMjQsIDB4RDEzQiwgMHhEMTNGLCAweDQxQzksCisgICAgMHhEMTQwLCAweEQxNDEsIDB4MEMyNSwgMHhEMTQyLCAweEQxNDIsIDB4NDFDRSwgMHhEMTQzLCAweEQxNDUsIDB4MEMyNywKKyAgICAweEQxNDYsIDB4RDE0QiwgMHg0MUNGLCAweEQxNEMsIDB4RDE0RCwgMHgwQzJBLCAweEQxNEUsIDB4RDE0RiwgMHg0MUQ1LAorICAgIDB4RDE1MCwgMHhEMTUwLCAweDBDMkMsIDB4RDE1MSwgMHhEMTUzLCAweDQxRDcsIDB4RDE1NCwgMHhEMTU0LCAweDBDMkQsCisgICAgMHhEMTU1LCAweEQxNUIsIDB4NDFEQSwgMHhEMTVDLCAweEQxNUQsIDB4MEMyRSwgMHhEMTVFLCAweEQxNUUsIDB4NDFFMSwKKyAgICAweEQxNUYsIDB4RDE1RiwgMHgwQzMwLCAweEQxNjAsIDB4RDE2MCwgMHg0MUUyLCAweEQxNjEsIDB4RDE2MSwgMHgwQzMxLAorICAgIDB4RDE2MiwgMHhEMTY3LCAweDQxRTMsIDB4RDE2OCwgMHhEMTY4LCAweDBDMzIsIDB4RDE2OSwgMHhEMTZCLCAweDQxRTksCisgICAgMHhEMTZDLCAweEQxNkMsIDB4MEMzMywgMHhEMTZELCAweEQxN0IsIDB4NDFFQywgMHhEMTdDLCAweEQxN0MsIDB4MEMzNCwKKyAgICAweEQxN0QsIDB4RDE4MywgMHg0MUZCLCAweEQxODQsIDB4RDE4NCwgMHgwQzM1LCAweEQxODUsIDB4RDE4NywgMHg0MjAyLAorICAgIDB4RDE4OCwgMHhEMTg4LCAweDBDMzYsIDB4RDE4OSwgMHhEMTlGLCAweDQyMDUsIDB4RDFBMCwgMHhEMUExLCAweDBDMzcsCisgICAgMHhEMUEyLCAweEQxQTMsIDB4NDIxQywgMHhEMUE0LCAweEQxQTQsIDB4MEMzOSwgMHhEMUE1LCAweEQxQTcsIDB4NDIxRSwKKyAgICAweEQxQTgsIDB4RDFBOCwgMHgwQzNBLCAweEQxQTksIDB4RDFBRiwgMHg0MjIxLCAweEQxQjAsIDB4RDFCMSwgMHgwQzNCLAorICAgIDB4RDFCMiwgMHhEMUIyLCAweDQyMjgsIDB4RDFCMywgMHhEMUIzLCAweDBDM0QsIDB4RDFCNCwgMHhEMUI0LCAweDQyMjksCisgICAgMHhEMUI1LCAweEQxQjUsIDB4MEMzRSwgMHhEMUI2LCAweEQxQjksIDB4NDIyQSwgMHhEMUJBLCAweEQxQkEsIDB4MEMzRiwKKyAgICAweEQxQkIsIDB4RDFCQiwgMHg0MjJFLCAweEQxQkMsIDB4RDFCQywgMHgwQzQwLCAweEQxQkQsIDB4RDFCRiwgMHg0MjJGLAorICAgIDB4RDFDMCwgMHhEMUMwLCAweDBDNDEsIDB4RDFDMSwgMHhEMUQ3LCAweDQyMzIsIDB4RDFEOCwgMHhEMUQ4LCAweDBDNDIsCisgICAgMHhEMUQ5LCAweEQxRjMsIDB4NDI0OSwgMHhEMUY0LCAweEQxRjQsIDB4MEM0MywgMHhEMUY1LCAweEQxRjcsIDB4NDI2NCwKKyAgICAweEQxRjgsIDB4RDFGOCwgMHgwQzQ0LCAweEQxRjksIDB4RDFGRiwgMHg0MjY3LCAweEQyMDAsIDB4RDIwNiwgMHg0MjZFLAorICAgIDB4RDIwNywgMHhEMjA3LCAweDBDNDUsIDB4RDIwOCwgMHhEMjA4LCAweDQyNzUsIDB4RDIwOSwgMHhEMjA5LCAweDBDNDYsCisgICAgMHhEMjBBLCAweEQyMEYsIDB4NDI3NiwgMHhEMjEwLCAweEQyMTAsIDB4MEM0NywgMHhEMjExLCAweEQyMkIsIDB4NDI3QywKKyAgICAweEQyMkMsIDB4RDIyRCwgMHgwQzQ4LCAweEQyMkUsIDB4RDIyRiwgMHg0Mjk3LCAweEQyMzAsIDB4RDIzMCwgMHgwQzRBLAorICAgIDB4RDIzMSwgMHhEMjMzLCAweDQyOTksIDB4RDIzNCwgMHhEMjM0LCAweDBDNEIsIDB4RDIzNSwgMHhEMjNCLCAweDQyOUMsCisgICAgMHhEMjNDLCAweEQyM0QsIDB4MEM0QywgMHhEMjNFLCAweEQyM0UsIDB4NDJBMywgMHhEMjNGLCAweEQyM0YsIDB4MEM0RSwKKyAgICAweEQyNDAsIDB4RDI0MCwgMHg0MkE0LCAweEQyNDEsIDB4RDI0MSwgMHgwQzRGLCAweEQyNDIsIDB4RDI0NywgMHg0MkE1LAorICAgIDB4RDI0OCwgMHhEMjQ4LCAweDBDNTAsIDB4RDI0OSwgMHhEMjVCLCAweDQyQUIsIDB4RDI1QywgMHhEMjVDLCAweDBDNTEsCisgICAgMHhEMjVELCAweEQyNjMsIDB4NDJCRSwgMHhEMjY0LCAweEQyNjQsIDB4MEM1MiwgMHhEMjY1LCAweEQyN0YsIDB4NDJDNSwKKyAgICAweEQyODAsIDB4RDI4MSwgMHgwQzUzLCAweEQyODIsIDB4RDI4MywgMHg0MkUwLCAweEQyODQsIDB4RDI4NCwgMHgwQzU1LAorICAgIDB4RDI4NSwgMHhEMjg3LCAweDQyRTIsIDB4RDI4OCwgMHhEMjg4LCAweDBDNTYsIDB4RDI4OSwgMHhEMjhGLCAweDQyRTUsCisgICAgMHhEMjkwLCAweEQyOTEsIDB4MEM1NywgMHhEMjkyLCAweEQyOTQsIDB4NDJFQywgMHhEMjk1LCAweEQyOTUsIDB4MEM1OSwKKyAgICAweEQyOTYsIDB4RDI5QiwgMHg0MkVGLCAweEQyOUMsIDB4RDI5QywgMHgwQzVBLCAweEQyOUQsIDB4RDI5RiwgMHg0MkY1LAorICAgIDB4RDJBMCwgMHhEMkEwLCAweDBDNUIsIDB4RDJBMSwgMHhEMkEzLCAweDQyRjgsIDB4RDJBNCwgMHhEMkE0LCAweDBDNUMsCisgICAgMHhEMkE1LCAweEQyQUIsIDB4NDJGQiwgMHhEMkFDLCAweEQyQUMsIDB4MEM1RCwgMHhEMkFELCAweEQyQjAsIDB4NDMwMiwKKyAgICAweEQyQjEsIDB4RDJCMSwgMHgwQzVFLCAweEQyQjIsIDB4RDJCNywgMHg0MzA2LCAweEQyQjgsIDB4RDJCOSwgMHgwQzVGLAorICAgIDB4RDJCQSwgMHhEMkJCLCAweDQzMEMsIDB4RDJCQywgMHhEMkJDLCAweDBDNjEsIDB4RDJCRCwgMHhEMkJFLCAweDQzMEUsCisgICAgMHhEMkJGLCAweEQyQzAsIDB4MEM2MiwgMHhEMkMxLCAweEQyQzEsIDB4NDMxMCwgMHhEMkMyLCAweEQyQzIsIDB4MEM2NCwKKyAgICAweEQyQzMsIDB4RDJDNywgMHg0MzExLCAweEQyQzgsIDB4RDJDOSwgMHgwQzY1LCAweEQyQ0EsIDB4RDJDQSwgMHg0MzE2LAorICAgIDB4RDJDQiwgMHhEMkNCLCAweDBDNjcsIDB4RDJDQywgMHhEMkQzLCAweDQzMTcsIDB4RDJENCwgMHhEMkQ0LCAweDBDNjgsCisgICAgMHhEMkQ1LCAweEQyRDcsIDB4NDMxRiwgMHhEMkQ4LCAweEQyRDgsIDB4MEM2OSwgMHhEMkQ5LCAweEQyREIsIDB4NDMyMiwKKyAgICAweEQyREMsIDB4RDJEQywgMHgwQzZBLCAweEQyREQsIDB4RDJFMywgMHg0MzI1LCAweEQyRTQsIDB4RDJFNSwgMHgwQzZCLAorICAgIDB4RDJFNiwgMHhEMkVGLCAweDQzMkMsIDB4RDJGMCwgMHhEMkYxLCAweDBDNkQsIDB4RDJGMiwgMHhEMkYzLCAweDQzMzYsCisgICAgMHhEMkY0LCAweEQyRjQsIDB4MEM2RiwgMHhEMkY1LCAweEQyRjcsIDB4NDMzOCwgMHhEMkY4LCAweEQyRjgsIDB4MEM3MCwKKyAgICAweEQyRjksIDB4RDJGRiwgMHg0MzNCLCAweEQzMDAsIDB4RDMwMSwgMHgwQzcxLCAweEQzMDIsIDB4RDMwMiwgMHg0MzQyLAorICAgIDB4RDMwMywgMHhEMzAzLCAweDBDNzMsIDB4RDMwNCwgMHhEMzA0LCAweDQzNDMsIDB4RDMwNSwgMHhEMzA1LCAweDBDNzQsCisgICAgMHhEMzA2LCAweEQzMEIsIDB4NDM0NCwgMHhEMzBDLCAweEQzMEUsIDB4MEM3NSwgMHhEMzBGLCAweEQzMEYsIDB4NDM0QSwKKyAgICAweEQzMTAsIDB4RDMxMCwgMHgwQzc4LCAweEQzMTEsIDB4RDMxMywgMHg0MzRCLCAweEQzMTQsIDB4RDMxNCwgMHgwQzc5LAorICAgIDB4RDMxNSwgMHhEMzE1LCAweDQzNEUsIDB4RDMxNiwgMHhEMzE2LCAweDBDN0EsIDB4RDMxNywgMHhEMzFCLCAweDQzNEYsCisgICAgMHhEMzFDLCAweEQzMUQsIDB4MEM3QiwgMHhEMzFFLCAweEQzMUUsIDB4NDM1NCwgMHhEMzFGLCAweEQzMjEsIDB4MEM3RCwKKyAgICAweEQzMjIsIDB4RDMyNCwgMHg0MzU1LCAweEQzMjUsIDB4RDMyNSwgMHgwQzgwLCAweEQzMjYsIDB4RDMyNywgMHg0MzU4LAorICAgIDB4RDMyOCwgMHhEMzI5LCAweDBDODEsIDB4RDMyQSwgMHhEMzJCLCAweDQzNUEsIDB4RDMyQywgMHhEMzJDLCAweDBDODMsCisgICAgMHhEMzJELCAweEQzMkYsIDB4NDM1QywgMHhEMzMwLCAweEQzMzAsIDB4MEM4NCwgMHhEMzMxLCAweEQzMzcsIDB4NDM1RiwKKyAgICAweEQzMzgsIDB4RDMzOSwgMHgwQzg1LCAweEQzM0EsIDB4RDMzQSwgMHg0MzY2LCAweEQzM0IsIDB4RDMzRCwgMHgwQzg3LAorICAgIDB4RDMzRSwgMHhEMzQzLCAweDQzNjcsIDB4RDM0NCwgMHhEMzQ1LCAweDBDOEEsIDB4RDM0NiwgMHhEMzdCLCAweDQzNkQsCisgICAgMHhEMzdDLCAweEQzN0QsIDB4MEM4QywgMHhEMzdFLCAweEQzN0YsIDB4NDNBMywgMHhEMzgwLCAweEQzODAsIDB4MEM4RSwKKyAgICAweEQzODEsIDB4RDM4MywgMHg0M0E1LCAweEQzODQsIDB4RDM4NCwgMHgwQzhGLCAweEQzODUsIDB4RDM4QiwgMHg0M0E4LAorICAgIDB4RDM4QywgMHhEMzhELCAweDBDOTAsIDB4RDM4RSwgMHhEMzhFLCAweDQzQUYsIDB4RDM4RiwgMHhEMzkxLCAweDBDOTIsCisgICAgMHhEMzkyLCAweEQzOTcsIDB4NDNCMCwgMHhEMzk4LCAweEQzOTksIDB4MEM5NSwgMHhEMzlBLCAweEQzOUIsIDB4NDNCNiwKKyAgICAweEQzOUMsIDB4RDM5QywgMHgwQzk3LCAweEQzOUQsIDB4RDM5RiwgMHg0M0I4LCAweEQzQTAsIDB4RDNBMCwgMHgwQzk4LAorICAgIDB4RDNBMSwgMHhEM0E3LCAweDQzQkIsIDB4RDNBOCwgMHhEM0E5LCAweDBDOTksIDB4RDNBQSwgMHhEM0FBLCAweDQzQzIsCisgICAgMHhEM0FCLCAweEQzQUIsIDB4MEM5QiwgMHhEM0FDLCAweEQzQUMsIDB4NDNDMywgMHhEM0FELCAweEQzQUQsIDB4MEM5QywKKyAgICAweEQzQUUsIDB4RDNCMywgMHg0M0M0LCAweEQzQjQsIDB4RDNCNCwgMHgwQzlELCAweEQzQjUsIDB4RDNCNywgMHg0M0NBLAorICAgIDB4RDNCOCwgMHhEM0I4LCAweDBDOUUsIDB4RDNCOSwgMHhEM0JCLCAweDQzQ0QsIDB4RDNCQywgMHhEM0JDLCAweDBDOUYsCisgICAgMHhEM0JELCAweEQzQzMsIDB4NDNEMCwgMHhEM0M0LCAweEQzQzUsIDB4MENBMCwgMHhEM0M2LCAweEQzQzcsIDB4NDNENywKKyAgICAweEQzQzgsIDB4RDNDOSwgMHgwQ0EyLCAweEQzQ0EsIDB4RDNDRiwgMHg0M0Q5LCAweEQzRDAsIDB4RDNEMCwgMHgwQ0E0LAorICAgIDB4RDNEMSwgMHhEM0Q3LCAweDQzREYsIDB4RDNEOCwgMHhEM0Q4LCAweDBDQTUsIDB4RDNEOSwgMHhEM0UwLCAweDQzRTYsCisgICAgMHhEM0UxLCAweEQzRTEsIDB4MENBNiwgMHhEM0UyLCAweEQzRTIsIDB4NDNFRSwgMHhEM0UzLCAweEQzRTMsIDB4MENBNywKKyAgICAweEQzRTQsIDB4RDNFQiwgMHg0M0VGLCAweEQzRUMsIDB4RDNFRCwgMHgwQ0E4LCAweEQzRUUsIDB4RDNFRiwgMHg0M0Y3LAorICAgIDB4RDNGMCwgMHhEM0YwLCAweDBDQUEsIDB4RDNGMSwgMHhEM0YzLCAweDQzRjksIDB4RDNGNCwgMHhEM0Y0LCAweDBDQUIsCisgICAgMHhEM0Y1LCAweEQzRkIsIDB4NDNGQywgMHhEM0ZDLCAweEQzRkQsIDB4MENBQywgMHhEM0ZFLCAweEQzRkUsIDB4NDQwMywKKyAgICAweEQzRkYsIDB4RDNGRiwgMHgwQ0FFLCAweEQ0MDAsIDB4RDQwMCwgMHg0NDA0LCAweEQ0MDEsIDB4RDQwMSwgMHgwQ0FGLAorICAgIDB4RDQwMiwgMHhENDA3LCAweDQ0MDUsIDB4RDQwOCwgMHhENDA4LCAweDBDQjAsIDB4RDQwOSwgMHhENDFDLCAweDQ0MEIsCisgICAgMHhENDFELCAweEQ0MUQsIDB4MENCMSwgMHhENDFFLCAweEQ0M0YsIDB4NDQxRiwgMHhENDQwLCAweEQ0NDAsIDB4MENCMiwKKyAgICAweEQ0NDEsIDB4RDQ0MywgMHg0NDQxLCAweEQ0NDQsIDB4RDQ0NCwgMHgwQ0IzLCAweEQ0NDUsIDB4RDQ1QiwgMHg0NDQ0LAorICAgIDB4RDQ1QywgMHhENDVDLCAweDBDQjQsIDB4RDQ1RCwgMHhENDVGLCAweDQ0NUIsIDB4RDQ2MCwgMHhENDYwLCAweDBDQjUsCisgICAgMHhENDYxLCAweEQ0NjMsIDB4NDQ1RSwgMHhENDY0LCAweEQ0NjQsIDB4MENCNiwgMHhENDY1LCAweEQ0NkMsIDB4NDQ2MSwKKyAgICAweEQ0NkQsIDB4RDQ2RCwgMHgwQ0I3LCAweEQ0NkUsIDB4RDQ2RSwgMHg0NDY5LCAweEQ0NkYsIDB4RDQ2RiwgMHgwQ0I4LAorICAgIDB4RDQ3MCwgMHhENDc3LCAweDQ0NkEsIDB4RDQ3OCwgMHhENDc5LCAweDBDQjksIDB4RDQ3QSwgMHhENDdCLCAweDQ0NzIsCisgICAgMHhENDdDLCAweEQ0N0MsIDB4MENCQiwgMHhENDdELCAweEQ0N0UsIDB4NDQ3NCwgMHhENDdGLCAweEQ0ODAsIDB4MENCQywKKyAgICAweEQ0ODEsIDB4RDQ4MSwgMHg0NDc2LCAweEQ0ODIsIDB4RDQ4MiwgMHgwQ0JFLCAweEQ0ODMsIDB4RDQ4NywgMHg0NDc3LAorICAgIDB4RDQ4OCwgMHhENDg5LCAweDBDQkYsIDB4RDQ4QSwgMHhENDhBLCAweDQ0N0MsIDB4RDQ4QiwgMHhENDhCLCAweDBDQzEsCisgICAgMHhENDhDLCAweEQ0OEMsIDB4NDQ3RCwgMHhENDhELCAweEQ0OEQsIDB4MENDMiwgMHhENDhFLCAweEQ0OTMsIDB4NDQ3RSwKKyAgICAweEQ0OTQsIDB4RDQ5NCwgMHgwQ0MzLCAweEQ0OTUsIDB4RDRBOCwgMHg0NDg0LCAweEQ0QTksIDB4RDRBOSwgMHgwQ0M0LAorICAgIDB4RDRBQSwgMHhENENCLCAweDQ0OTgsIDB4RDRDQywgMHhENENDLCAweDBDQzUsIDB4RDRDRCwgMHhENENGLCAweDQ0QkEsCisgICAgMHhENEQwLCAweEQ0RDAsIDB4MENDNiwgMHhENEQxLCAweEQ0RDMsIDB4NDRCRCwgMHhENEQ0LCAweEQ0RDQsIDB4MENDNywKKyAgICAweEQ0RDUsIDB4RDREQiwgMHg0NEMwLCAweEQ0REMsIDB4RDREQywgMHgwQ0M4LCAweEQ0REQsIDB4RDRERSwgMHg0NEM3LAorICAgIDB4RDRERiwgMHhENERGLCAweDBDQzksIDB4RDRFMCwgMHhENEU3LCAweDQ0QzksIDB4RDRFOCwgMHhENEU4LCAweDBDQ0EsCisgICAgMHhENEU5LCAweEQ0RUIsIDB4NDREMSwgMHhENEVDLCAweEQ0RUMsIDB4MENDQiwgMHhENEVELCAweEQ0RUYsIDB4NDRENCwKKyAgICAweEQ0RjAsIDB4RDRGMCwgMHgwQ0NDLCAweEQ0RjEsIDB4RDRGNywgMHg0NEQ3LCAweEQ0RjgsIDB4RDRGOCwgMHgwQ0NELAorICAgIDB4RDRGOSwgMHhENEZBLCAweDQ0REUsIDB4RDRGQiwgMHhENEZCLCAweDBDQ0UsIDB4RDRGQywgMHhENEZDLCAweDQ0RTAsCisgICAgMHhENEZELCAweEQ0RkQsIDB4MENDRiwgMHhENEZFLCAweEQ0RkYsIDB4NDRFMSwgMHhENTAwLCAweEQ1MDMsIDB4NDRFMywKKyAgICAweEQ1MDQsIDB4RDUwNCwgMHgwQ0QwLCAweEQ1MDUsIDB4RDUwNywgMHg0NEU3LCAweEQ1MDgsIDB4RDUwOCwgMHgwQ0QxLAorICAgIDB4RDUwOSwgMHhENTBCLCAweDQ0RUEsIDB4RDUwQywgMHhENTBDLCAweDBDRDIsIDB4RDUwRCwgMHhENTEzLCAweDQ0RUQsCisgICAgMHhENTE0LCAweEQ1MTUsIDB4MENEMywgMHhENTE2LCAweEQ1MTYsIDB4NDRGNCwgMHhENTE3LCAweEQ1MTcsIDB4MENENSwKKyAgICAweEQ1MTgsIDB4RDUzQiwgMHg0NEY1LCAweEQ1M0MsIDB4RDUzRCwgMHgwQ0Q2LCAweEQ1M0UsIDB4RDUzRiwgMHg0NTE5LAorICAgIDB4RDU0MCwgMHhENTQwLCAweDBDRDgsIDB4RDU0MSwgMHhENTQzLCAweDQ1MUIsIDB4RDU0NCwgMHhENTQ0LCAweDBDRDksCisgICAgMHhENTQ1LCAweEQ1NEIsIDB4NDUxRSwgMHhENTRDLCAweEQ1NEQsIDB4MENEQSwgMHhENTRFLCAweEQ1NEUsIDB4NDUyNSwKKyAgICAweEQ1NEYsIDB4RDU0RiwgMHgwQ0RDLCAweEQ1NTAsIDB4RDU1MCwgMHg0NTI2LCAweEQ1NTEsIDB4RDU1MSwgMHgwQ0RELAorICAgIDB4RDU1MiwgMHhENTU3LCAweDQ1MjcsIDB4RDU1OCwgMHhENTU5LCAweDBDREUsIDB4RDU1QSwgMHhENTVCLCAweDQ1MkQsCisgICAgMHhENTVDLCAweEQ1NUMsIDB4MENFMCwgMHhENTVELCAweEQ1NUYsIDB4NDUyRiwgMHhENTYwLCAweEQ1NjAsIDB4MENFMSwKKyAgICAweEQ1NjEsIDB4RDU2NCwgMHg0NTMyLCAweEQ1NjUsIDB4RDU2NSwgMHgwQ0UyLCAweEQ1NjYsIDB4RDU2NywgMHg0NTM2LAorICAgIDB4RDU2OCwgMHhENTY5LCAweDBDRTMsIDB4RDU2QSwgMHhENTZBLCAweDQ1MzgsIDB4RDU2QiwgMHhENTZCLCAweDBDRTUsCisgICAgMHhENTZDLCAweEQ1NkMsIDB4NDUzOSwgMHhENTZELCAweEQ1NkQsIDB4MENFNiwgMHhENTZFLCAweEQ1NzMsIDB4NDUzQSwKKyAgICAweEQ1NzQsIDB4RDU3NSwgMHgwQ0U3LCAweEQ1NzYsIDB4RDU3NywgMHg0NTQwLCAweEQ1NzgsIDB4RDU3OCwgMHgwQ0U5LAorICAgIDB4RDU3OSwgMHhENTdCLCAweDQ1NDIsIDB4RDU3QywgMHhENTdDLCAweDBDRUEsIDB4RDU3RCwgMHhENTgzLCAweDQ1NDUsCisgICAgMHhENTg0LCAweEQ1ODUsIDB4MENFQiwgMHhENTg2LCAweEQ1ODYsIDB4NDU0QywgMHhENTg3LCAweEQ1ODksIDB4MENFRCwKKyAgICAweEQ1OEEsIDB4RDU4RiwgMHg0NTRELCAweEQ1OTAsIDB4RDU5MCwgMHgwQ0YwLCAweEQ1OTEsIDB4RDVBNCwgMHg0NTUzLAorICAgIDB4RDVBNSwgMHhENUE1LCAweDBDRjEsIDB4RDVBNiwgMHhENUM3LCAweDQ1NjcsIDB4RDVDOCwgMHhENUM5LCAweDBDRjIsCisgICAgMHhENUNBLCAweEQ1Q0IsIDB4NDU4OSwgMHhENUNDLCAweEQ1Q0MsIDB4MENGNCwgMHhENUNELCAweEQ1Q0YsIDB4NDU4QiwKKyAgICAweEQ1RDAsIDB4RDVEMCwgMHgwQ0Y1LCAweEQ1RDEsIDB4RDVEMSwgMHg0NThFLCAweEQ1RDIsIDB4RDVEMiwgMHgwQ0Y2LAorICAgIDB4RDVEMywgMHhENUQ3LCAweDQ1OEYsIDB4RDVEOCwgMHhENUQ5LCAweDBDRjcsIDB4RDVEQSwgMHhENURBLCAweDQ1OTQsCisgICAgMHhENURCLCAweEQ1REIsIDB4MENGOSwgMHhENURDLCAweEQ1REMsIDB4NDU5NSwgMHhENURELCAweEQ1REQsIDB4MENGQSwKKyAgICAweEQ1REUsIDB4RDVFMywgMHg0NTk2LCAweEQ1RTQsIDB4RDVFNSwgMHgwQ0ZCLCAweEQ1RTYsIDB4RDVFNywgMHg0NTlDLAorICAgIDB4RDVFOCwgMHhENUU4LCAweDBDRkQsIDB4RDVFOSwgMHhENUVCLCAweDQ1OUUsIDB4RDVFQywgMHhENUVDLCAweDBDRkUsCisgICAgMHhENUVELCAweEQ1RjMsIDB4NDVBMSwgMHhENUY0LCAweEQ1RjUsIDB4MENGRiwgMHhENUY2LCAweEQ1RjYsIDB4NDVBOCwKKyAgICAweEQ1RjcsIDB4RDVGNywgMHgwRDAxLCAweEQ1RjgsIDB4RDVGOCwgMHg0NUE5LCAweEQ1RjksIDB4RDVGOSwgMHgwRDAyLAorICAgIDB4RDVGQSwgMHhENUZGLCAweDQ1QUEsIDB4RDYwMCwgMHhENjAxLCAweDBEMDMsIDB4RDYwMiwgMHhENjAzLCAweDQ1QjAsCisgICAgMHhENjA0LCAweEQ2MDQsIDB4MEQwNSwgMHhENjA1LCAweEQ2MDcsIDB4NDVCMiwgMHhENjA4LCAweEQ2MDgsIDB4MEQwNiwKKyAgICAweEQ2MDksIDB4RDYwRiwgMHg0NUI1LCAweEQ2MTAsIDB4RDYxMSwgMHgwRDA3LCAweEQ2MTIsIDB4RDYxMiwgMHg0NUJDLAorICAgIDB4RDYxMywgMHhENjE1LCAweDBEMDksIDB4RDYxNiwgMHhENjFCLCAweDQ1QkQsIDB4RDYxQywgMHhENjFDLCAweDBEMEMsCisgICAgMHhENjFELCAweEQ2MUYsIDB4NDVDMywgMHhENjIwLCAweEQ2MjAsIDB4MEQwRCwgMHhENjIxLCAweEQ2MjMsIDB4NDVDNiwKKyAgICAweEQ2MjQsIDB4RDYyNCwgMHgwRDBFLCAweEQ2MjUsIDB4RDYyQywgMHg0NUM5LCAweEQ2MkQsIDB4RDYyRCwgMHgwRDBGLAorICAgIDB4RDYyRSwgMHhENjM3LCAweDQ1RDEsIDB4RDYzOCwgMHhENjM5LCAweDBEMTAsIDB4RDYzQSwgMHhENjNCLCAweDQ1REIsCisgICAgMHhENjNDLCAweEQ2M0MsIDB4MEQxMiwgMHhENjNELCAweEQ2M0YsIDB4NDVERCwgMHhENjQwLCAweEQ2NDAsIDB4MEQxMywKKyAgICAweEQ2NDEsIDB4RDY0NCwgMHg0NUUwLCAweEQ2NDUsIDB4RDY0NSwgMHgwRDE0LCAweEQ2NDYsIDB4RDY0NywgMHg0NUU0LAorICAgIDB4RDY0OCwgMHhENjQ5LCAweDBEMTUsIDB4RDY0QSwgMHhENjRBLCAweDQ1RTYsIDB4RDY0QiwgMHhENjRCLCAweDBEMTcsCisgICAgMHhENjRDLCAweEQ2NEMsIDB4NDVFNywgMHhENjRELCAweEQ2NEQsIDB4MEQxOCwgMHhENjRFLCAweEQ2NTAsIDB4NDVFOCwKKyAgICAweEQ2NTEsIDB4RDY1MSwgMHgwRDE5LCAweEQ2NTIsIDB4RDY1MywgMHg0NUVCLCAweEQ2NTQsIDB4RDY1NSwgMHgwRDFBLAorICAgIDB4RDY1NiwgMHhENjU3LCAweDQ1RUQsIDB4RDY1OCwgMHhENjU4LCAweDBEMUMsIDB4RDY1OSwgMHhENjVCLCAweDQ1RUYsCisgICAgMHhENjVDLCAweEQ2NUMsIDB4MEQxRCwgMHhENjVELCAweEQ2NjYsIDB4NDVGMiwgMHhENjY3LCAweEQ2NjcsIDB4MEQxRSwKKyAgICAweEQ2NjgsIDB4RDY2OCwgMHg0NUZDLCAweEQ2NjksIDB4RDY2OSwgMHgwRDFGLCAweEQ2NkEsIDB4RDY2RiwgMHg0NUZELAorICAgIDB4RDY3MCwgMHhENjcxLCAweDBEMjAsIDB4RDY3MiwgMHhENjczLCAweDQ2MDMsIDB4RDY3NCwgMHhENjc0LCAweDBEMjIsCisgICAgMHhENjc1LCAweEQ2ODIsIDB4NDYwNSwgMHhENjgzLCAweEQ2ODMsIDB4MEQyMywgMHhENjg0LCAweEQ2ODQsIDB4NDYxMywKKyAgICAweEQ2ODUsIDB4RDY4NSwgMHgwRDI0LCAweEQ2ODYsIDB4RDY4QiwgMHg0NjE0LCAweEQ2OEMsIDB4RDY4RCwgMHgwRDI1LAorICAgIDB4RDY4RSwgMHhENjhGLCAweDQ2MUEsIDB4RDY5MCwgMHhENjkwLCAweDBEMjcsIDB4RDY5MSwgMHhENjkzLCAweDQ2MUMsCisgICAgMHhENjk0LCAweEQ2OTQsIDB4MEQyOCwgMHhENjk1LCAweEQ2OUMsIDB4NDYxRiwgMHhENjlELCAweEQ2OUQsIDB4MEQyOSwKKyAgICAweEQ2OUUsIDB4RDY5RSwgMHg0NjI3LCAweEQ2OUYsIDB4RDY5RiwgMHgwRDJBLCAweEQ2QTAsIDB4RDZBMCwgMHg0NjI4LAorICAgIDB4RDZBMSwgMHhENkExLCAweDBEMkIsIDB4RDZBMiwgMHhENkE3LCAweDQ2MjksIDB4RDZBOCwgMHhENkE4LCAweDBEMkMsCisgICAgMHhENkE5LCAweEQ2QUIsIDB4NDYyRiwgMHhENkFDLCAweEQ2QUMsIDB4MEQyRCwgMHhENkFELCAweEQ2QUYsIDB4NDYzMiwKKyAgICAweEQ2QjAsIDB4RDZCMCwgMHgwRDJFLCAweEQ2QjEsIDB4RDZCOCwgMHg0NjM1LCAweEQ2QjksIDB4RDZCOSwgMHgwRDJGLAorICAgIDB4RDZCQSwgMHhENkJBLCAweDQ2M0QsIDB4RDZCQiwgMHhENkJCLCAweDBEMzAsIDB4RDZCQywgMHhENkMzLCAweDQ2M0UsCisgICAgMHhENkM0LCAweEQ2QzUsIDB4MEQzMSwgMHhENkM2LCAweEQ2QzcsIDB4NDY0NiwgMHhENkM4LCAweEQ2QzgsIDB4MEQzMywKKyAgICAweEQ2QzksIDB4RDZDQiwgMHg0NjQ4LCAweEQ2Q0MsIDB4RDZDQywgMHgwRDM0LCAweEQ2Q0QsIDB4RDZEMCwgMHg0NjRCLAorICAgIDB4RDZEMSwgMHhENkQxLCAweDBEMzUsIDB4RDZEMiwgMHhENkQzLCAweDQ2NEYsIDB4RDZENCwgMHhENkQ0LCAweDBEMzYsCisgICAgMHhENkQ1LCAweEQ2RDYsIDB4NDY1MSwgMHhENkQ3LCAweEQ2RDcsIDB4MEQzNywgMHhENkQ4LCAweEQ2RDgsIDB4NDY1MywKKyAgICAweEQ2RDksIDB4RDZEOSwgMHgwRDM4LCAweEQ2REEsIDB4RDZERiwgMHg0NjU0LCAweEQ2RTAsIDB4RDZFMCwgMHgwRDM5LAorICAgIDB4RDZFMSwgMHhENkUzLCAweDQ2NUEsIDB4RDZFNCwgMHhENkU0LCAweDBEM0EsIDB4RDZFNSwgMHhENkU3LCAweDQ2NUQsCisgICAgMHhENkU4LCAweEQ2RTgsIDB4MEQzQiwgMHhENkU5LCAweEQ2RUYsIDB4NDY2MCwgMHhENkYwLCAweEQ2RjAsIDB4MEQzQywKKyAgICAweEQ2RjEsIDB4RDZGNCwgMHg0NjY3LCAweEQ2RjUsIDB4RDZGNSwgMHgwRDNELCAweEQ2RjYsIDB4RDZGQiwgMHg0NjZCLAorICAgIDB4RDZGQywgMHhENkZELCAweDBEM0UsIDB4RDZGRSwgMHhENkZGLCAweDQ2NzEsIDB4RDcwMCwgMHhENzAwLCAweDBENDAsCisgICAgMHhENzAxLCAweEQ3MDMsIDB4NDY3MywgMHhENzA0LCAweEQ3MDQsIDB4MEQ0MSwgMHhENzA1LCAweEQ3MTAsIDB4NDY3NiwKKyAgICAweEQ3MTEsIDB4RDcxMSwgMHgwRDQyLCAweEQ3MTIsIDB4RDcxNywgMHg0NjgyLCAweEQ3MTgsIDB4RDcxOSwgMHgwRDQzLAorICAgIDB4RDcxQSwgMHhENzFCLCAweDQ2ODgsIDB4RDcxQywgMHhENzFDLCAweDBENDUsIDB4RDcxRCwgMHhENzFGLCAweDQ2OEEsCisgICAgMHhENzIwLCAweEQ3MjAsIDB4MEQ0NiwgMHhENzIxLCAweEQ3MjcsIDB4NDY4RCwgMHhENzI4LCAweEQ3MjksIDB4MEQ0NywKKyAgICAweEQ3MkEsIDB4RDcyQSwgMHg0Njk0LCAweEQ3MkIsIDB4RDcyQiwgMHgwRDQ5LCAweEQ3MkMsIDB4RDcyQywgMHg0Njk1LAorICAgIDB4RDcyRCwgMHhENzJELCAweDBENEEsIDB4RDcyRSwgMHhENzMzLCAweDQ2OTYsIDB4RDczNCwgMHhENzM1LCAweDBENEIsCisgICAgMHhENzM2LCAweEQ3MzcsIDB4NDY5QywgMHhENzM4LCAweEQ3MzgsIDB4MEQ0RCwgMHhENzM5LCAweEQ3M0IsIDB4NDY5RSwKKyAgICAweEQ3M0MsIDB4RDczQywgMHgwRDRFLCAweEQ3M0QsIDB4RDc0MywgMHg0NkExLCAweEQ3NDQsIDB4RDc0NCwgMHgwRDRGLAorICAgIDB4RDc0NSwgMHhENzQ2LCAweDQ2QTgsIDB4RDc0NywgMHhENzQ3LCAweDBENTAsIDB4RDc0OCwgMHhENzQ4LCAweDQ2QUEsCisgICAgMHhENzQ5LCAweEQ3NDksIDB4MEQ1MSwgMHhENzRBLCAweEQ3NEYsIDB4NDZBQiwgMHhENzUwLCAweEQ3NTEsIDB4MEQ1MiwKKyAgICAweEQ3NTIsIDB4RDc1MywgMHg0NkIxLCAweEQ3NTQsIDB4RDc1NCwgMHgwRDU0LCAweEQ3NTUsIDB4RDc1NSwgMHg0NkIzLAorICAgIDB4RDc1NiwgMHhENzU5LCAweDBENTUsIDB4RDc1QSwgMHhENzVGLCAweDQ2QjQsIDB4RDc2MCwgMHhENzYxLCAweDBENTksCisgICAgMHhENzYyLCAweEQ3NjIsIDB4NDZCQSwgMHhENzYzLCAweEQ3NjMsIDB4MEQ1QiwgMHhENzY0LCAweEQ3NjQsIDB4NDZCQiwKKyAgICAweEQ3NjUsIDB4RDc2NSwgMHgwRDVDLCAweEQ3NjYsIDB4RDc2OCwgMHg0NkJDLCAweEQ3NjksIDB4RDc2OSwgMHgwRDVELAorICAgIDB4RDc2QSwgMHhENzZCLCAweDQ2QkYsIDB4RDc2QywgMHhENzZDLCAweDBENUUsIDB4RDc2RCwgMHhENzZGLCAweDQ2QzEsCisgICAgMHhENzcwLCAweEQ3NzAsIDB4MEQ1RiwgMHhENzcxLCAweEQ3NzMsIDB4NDZDNCwgMHhENzc0LCAweEQ3NzQsIDB4MEQ2MCwKKyAgICAweEQ3NzUsIDB4RDc3QiwgMHg0NkM3LCAweEQ3N0MsIDB4RDc3RCwgMHgwRDYxLCAweEQ3N0UsIDB4RDc4MCwgMHg0NkNFLAorICAgIDB4RDc4MSwgMHhENzgxLCAweDBENjMsIDB4RDc4MiwgMHhENzg3LCAweDQ2RDEsIDB4RDc4OCwgMHhENzg5LCAweDBENjQsCisgICAgMHhENzhBLCAweEQ3OEIsIDB4NDZENywgMHhENzhDLCAweEQ3OEMsIDB4MEQ2NiwgMHhENzhELCAweEQ3OEYsIDB4NDZEOSwKKyAgICAweEQ3OTAsIDB4RDc5MCwgMHgwRDY3LCAweEQ3OTEsIDB4RDc5NywgMHg0NkRDLCAweEQ3OTgsIDB4RDc5OSwgMHgwRDY4LAorICAgIDB4RDc5QSwgMHhENzlBLCAweDQ2RTMsIDB4RDc5QiwgMHhENzlCLCAweDBENkEsIDB4RDc5QywgMHhENzlDLCAweDQ2RTQsCisgICAgMHhENzlELCAweEQ3OUQsIDB4MEQ2QiwgMHhENzlFLCAweEQ3QTMsIDB4NDZFNSwgMHhGOTAwLCAweEY5MDAsIDB4MTAxNCwKKyAgICAweEY5MDEsIDB4RjkwMSwgMHgwRTVFLCAweEY5MDIsIDB4RjkwMiwgMHgxQjhELCAweEY5MDMsIDB4RjkwMywgMHgwRDg0LAorICAgIDB4RjkwNCwgMHhGOTA0LCAweDFFREMsIDB4RjkwNSwgMHhGOTA1LCAweDBFREEsIDB4RjkwNiwgMHhGOTA2LCAweDBGM0UsCisgICAgMHhGOTA3LCAweEY5MDcsIDB4MEY2QSwgMHhGOTA4LCAweEY5MDgsIDB4MEY2QSwgMHhGOTA5LCAweEY5MDksIDB4MEU3QywKKyAgICAweEY5MEEsIDB4RjkwQSwgMHgxMDIzLCAweEY5MEIsIDB4RjkwQiwgMHgxMTE2LCAweEY5MEMsIDB4RjkwQywgMHgxMDNDLAorICAgIDB4RjkwRCwgMHhGOTEzLCAweDExMTcsIDB4RjkxNCwgMHhGOTE0LCAweDE2QTgsIDB4RjkxNSwgMHhGOTE3LCAweDExMUUsCisgICAgMHhGOTE4LCAweEY5MUQsIDB4MTEyMiwgMHhGOTFFLCAweEY5MjAsIDB4MTEyQSwgMHhGOTIxLCAweEY5MjEsIDB4MTEyRiwKKyAgICAweEY5MjIsIDB4RjkyMiwgMHgxMTMzLCAweEY5MjMsIDB4RjkyNCwgMHgxMTM2LCAweEY5MjUsIDB4RjkyQiwgMHgxMTM5LAorICAgIDB4RjkyQywgMHhGOTJELCAweDExNDMsIDB4RjkyRSwgMHhGOTJFLCAweDExNDgsIDB4RjkyRiwgMHhGOTJGLCAweDExOUYsCisgICAgMHhGOTMwLCAweEY5MzEsIDB4MTFBMSwgMHhGOTMyLCAweEY5MzcsIDB4MTFBNSwgMHhGOTM4LCAweEY5M0EsIDB4MTFBQywKKyAgICAweEY5M0IsIDB4Rjk0MCwgMHgxMUIwLCAweEY5NDEsIDB4Rjk0MywgMHgxMUI3LCAweEY5NDQsIDB4Rjk0NSwgMHgxMUJELAorICAgIDB4Rjk0NiwgMHhGOTQ4LCAweDExQzEsIDB4Rjk0OSwgMHhGOTQ5LCAweDExQzYsIDB4Rjk0QSwgMHhGOTRBLCAweDExRDQsCisgICAgMHhGOTRCLCAweEY5NEUsIDB4MTFENiwgMHhGOTRGLCAweEY5NTAsIDB4MTFEQiwgMHhGOTUxLCAweEY5NTEsIDB4MTFFMCwKKyAgICAweEY5NTIsIDB4Rjk1NSwgMHgxMUZDLCAweEY5NTYsIDB4Rjk1OSwgMHgxMjAxLCAweEY5NUEsIDB4Rjk1QSwgMHgxMERFLAorICAgIDB4Rjk1QiwgMHhGOTVCLCAweDEwMjgsIDB4Rjk1QywgMHhGOTVDLCAweDE2QTgsIDB4Rjk1RCwgMHhGOTVELCAweDEwMkIsCisgICAgMHhGOTVFLCAweEY5NUUsIDB4MTA2MCwgMHhGOTVGLCAweEY5NUYsIDB4MTA0NywgMHhGOTYwLCAweEY5NjAsIDB4MTA0QywKKyAgICAweEY5NjEsIDB4Rjk2MSwgMHgxNUIwLCAweEY5NjIsIDB4Rjk2MiwgMHgxOTE4LCAweEY5NjMsIDB4Rjk2MywgMHgxNDFGLAorICAgIDB4Rjk2NCwgMHhGOTY0LCAweDEzM0EsIDB4Rjk2NSwgMHhGOTY1LCAweDFENUUsIDB4Rjk2NiwgMHhGOTY2LCAweDEzRDcsCisgICAgMHhGOTY3LCAweEY5NjcsIDB4MTNGNSwgMHhGOTY4LCAweEY5NjgsIDB4MURCNywgMHhGOTY5LCAweEY5NjksIDB4MTVEMCwKKyAgICAweEY5NkEsIDB4Rjk2QSwgMHgxNEY3LCAweEY5NkIsIDB4Rjk2QiwgMHgxQkFCLCAweEY5NkMsIDB4Rjk2QywgMHgxNEYyLAorICAgIDB4Rjk2RCwgMHhGOTZELCAweDE1NkQsIDB4Rjk2RSwgMHhGOTZFLCAweDE3NzEsIDB4Rjk2RiwgMHhGOTZGLCAweDE1NTQsCisgICAgMHhGOTcwLCAweEY5NzAsIDB4MTRDNSwgMHhGOTcxLCAweEY5NzEsIDB4MUI2MSwgMHhGOTcyLCAweEY5NzIsIDB4MUNDQSwKKyAgICAweEY5NzMsIDB4Rjk3MywgMHgxNjJFLCAweEY5NzQsIDB4Rjk3NCwgMHgxNkYyLCAweEY5NzUsIDB4Rjk3NywgMHgxMTQ5LAorICAgIDB4Rjk3OCwgMHhGOTdBLCAweDExNEQsIDB4Rjk3QiwgMHhGOTdELCAweDExNTMsIDB4Rjk3RSwgMHhGOTdFLCAweDExNTcsCisgICAgMHhGOTdGLCAweEY5ODAsIDB4MTE1QSwgMHhGOTgxLCAweEY5ODEsIDB4MTAzRiwgMHhGOTgyLCAweEY5ODIsIDB4MTE1QywKKyAgICAweEY5ODMsIDB4Rjk4MywgMHgxMTVGLCAweEY5ODQsIDB4Rjk4NSwgMHgxMTYxLCAweEY5ODYsIDB4Rjk4NiwgMHgxMTY1LAorICAgIDB4Rjk4NywgMHhGOThDLCAweDExNjcsIDB4Rjk4RCwgMHhGOThELCAweDExNkYsIDB4Rjk4RSwgMHhGOThFLCAweDEwNDAsCisgICAgMHhGOThGLCAweEY5OTAsIDB4MTE3MSwgMHhGOTkxLCAweEY5OTEsIDB4MTA0MSwgMHhGOTkyLCAweEY5OTQsIDB4MTE3NCwKKyAgICAweEY5OTUsIDB4Rjk5NSwgMHgxMDQyLCAweEY5OTYsIDB4Rjk5NywgMHgxMTc3LCAweEY5OTgsIDB4Rjk5OCwgMHgxMTdBLAorICAgIDB4Rjk5OSwgMHhGOTk5LCAweDExNzksIDB4Rjk5QSwgMHhGOTlCLCAweDExN0IsIDB4Rjk5QywgMHhGOTlELCAweDExN0UsCisgICAgMHhGOTlFLCAweEY5OUUsIDB4MTkyRiwgMHhGOTlGLCAweEY5QTAsIDB4MTE4MSwgMHhGOUExLCAweEY5QTEsIDB4MTU1NCwKKyAgICAweEY5QTIsIDB4RjlBMiwgMHgxMTgzLCAweEY5QTMsIDB4RjlBMywgMHgxMDQzLCAweEY5QTQsIDB4RjlBNCwgMHgxMDQ2LAorICAgIDB4RjlBNSwgMHhGOUE1LCAweDExODUsIDB4RjlBNiwgMHhGOUE4LCAweDExODcsIDB4RjlBOSwgMHhGOUE5LCAweDExOEIsCisgICAgMHhGOUFBLCAweEY5QUEsIDB4MTA0NywgMHhGOUFCLCAweEY5QUQsIDB4MTE4RCwgMHhGOUFFLCAweEY5QUUsIDB4MUU2NywKKyAgICAweEY5QUYsIDB4RjlBRiwgMHgxMTkxLCAweEY5QjAsIDB4RjlCMCwgMHgxMTkzLCAweEY5QjEsIDB4RjlCNCwgMHgxMTk1LAorICAgIDB4RjlCNSwgMHhGOUI1LCAweDExOUEsIDB4RjlCNiwgMHhGOUI4LCAweDExOUMsIDB4RjlCOSwgMHhGOUI5LCAweDE2QTUsCisgICAgMHhGOUJBLCAweEY5QkMsIDB4MTFDNywgMHhGOUJELCAweEY5QkQsIDB4MTA1NCwgMHhGOUJFLCAweEY5QkUsIDB4MTFDQiwKKyAgICAweEY5QkYsIDB4RjlCRiwgMHgxNkE4LCAweEY5QzAsIDB4RjlDMSwgMHgxMUNDLCAweEY5QzIsIDB4RjlDMywgMHgxMUQwLAorICAgIDB4RjlDNCwgMHhGOUM0LCAweDExRDMsIDB4RjlDNSwgMHhGOUM1LCAweDFGMzQsIDB4RjlDNiwgMHhGOUM2LCAweDE3RUIsCisgICAgMHhGOUM3LCAweEY5QzcsIDB4MTFFMSwgMHhGOUM4LCAweEY5QzgsIDB4MTA1NywgMHhGOUM5LCAweEY5QzksIDB4MTFFMywKKyAgICAweEY5Q0EsIDB4RjlDQiwgMHgxMUU1LCAweEY5Q0MsIDB4RjlDQywgMHgxMUU4LCAweEY5Q0QsIDB4RjlDRCwgMHgxMUVBLAorICAgIDB4RjlDRSwgMHhGOUNFLCAweDExRUMsIDB4RjlDRiwgMHhGOUNGLCAweDEwNTgsIDB4RjlEMCwgMHhGOUQzLCAweDExRUUsCisgICAgMHhGOUQ0LCAweEY5RDYsIDB4MTFGMywgMHhGOUQ3LCAweEY5REEsIDB4MTFGNywgMHhGOURCLCAweEY5REIsIDB4MTVCMCwKKyAgICAweEY5REMsIDB4RjlEQywgMHgxMUZCLCAweEY5REQsIDB4RjlERCwgMHgxMjA2LCAweEY5REUsIDB4RjlERSwgMHgxMjA4LAorICAgIDB4RjlERiwgMHhGOURGLCAweDEyMEEsIDB4RjlFMCwgMHhGOUUwLCAweDE3M0UsIDB4RjlFMSwgMHhGOUUyLCAweDEyMEMsCisgICAgMHhGOUUzLCAweEY5RTMsIDB4MTA1QiwgMHhGOUU0LCAweEY5RTQsIDB4MTIxMSwgMHhGOUU1LCAweEY5RTUsIDB4MTIxMywKKyAgICAweEY5RTYsIDB4RjlFNiwgMHgxMjE1LCAweEY5RTcsIDB4RjlFOSwgMHgxMjE4LCAweEY5RUEsIDB4RjlFQSwgMHgxMjFDLAorICAgIDB4RjlFQiwgMHhGOUVDLCAweDEwNUMsIDB4RjlFRCwgMHhGOUVELCAweDEyMUUsIDB4RjlFRSwgMHhGOUYwLCAweDEyMjAsCisgICAgMHhGOUYxLCAweEY5RjUsIDB4MTIyNCwgMHhGOUY2LCAweEY5RjYsIDB4MTIyQSwgMHhGOUY3LCAweEY5RjksIDB4MTIyRCwKKyAgICAweEY5RkEsIDB4RjlGQSwgMHgxNEU3LCAweEY5RkIsIDB4RjlGQiwgMHgxOTVFLCAweEY5RkMsIDB4RjlGQywgMHgxNjYzLAorICAgIDB4RjlGRCwgMHhGOUZELCAweDE2OEIsIDB4RjlGRSwgMHhGOUZFLCAweDEwNUYsIDB4RjlGRiwgMHhGOUZGLCAweDE5NTQsCisgICAgMHhGQTAwLCAweEZBMDAsIDB4MUExQywgMHhGQTAxLCAweEZBMDEsIDB4MTBCNywgMHhGQTAyLCAweEZBMDIsIDB4MUJFMywKKyAgICAweEZBMDMsIDB4RkEwMywgMHgxMDk3LCAweEZBMDQsIDB4RkEwNCwgMHgxMEFBLCAweEZBMDUsIDB4RkEwNSwgMHgxMEY0LAorICAgIDB4RkEwNiwgMHhGQTA2LCAweDFEOTQsIDB4RkEwNywgMHhGQTA3LCAweDEzRTAsIDB4RkEwOCwgMHhGQTA4LCAweDFFMUQsCisgICAgMHhGQTA5LCAweEZBMDksIDB4MERFNiwgMHhGQTBBLCAweEZBMEEsIDB4MEUzQywgMHhGQTBCLCAweEZBMEIsIDB4MEVFNywKKyAgICAweEZGMDEsIDB4RkYzQiwgMHgwMTA4LCAweEZGM0MsIDB4RkYzQywgMHgwMDcwLCAweEZGM0QsIDB4RkY1RCwgMHgwMTQ0LAorICAgIDB4RkY1RSwgMHhGRjVFLCAweDAwNzEsIDB4RkZFMCwgMHhGRkUxLCAweDAwOEYsIDB4RkZFMiwgMHhGRkUyLCAweDAwQzIsCisgICAgMHhGRkUzLCAweEZGRTMsIDB4MDE2NSwgMHhGRkU1LCAweEZGRTUsIDB4MDA5MSwgMHhGRkU2LCAweEZGRTYsIDB4MDE0MywKK307CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvS29yZWExL1VuaUtTLVVURjE2LUhfMC5jcHAgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvS29yZWExL1VuaUtTLVVURjE2LUhfMC5jcHAKaW5kZXggMTE1NGY1NS4uYzk3N2U4NiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL0tvcmVhMS9VbmlLUy1VVEYxNi1IXzAuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9Lb3JlYTEvVW5pS1MtVVRGMTYtSF8wLmNwcApAQCAtMSw0OCArMSw0OCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX1VuaUtTX1VURjE2X0hfMFsxNTggKiAyXSA9IHsNCi0gICAgMHgwMEE5LCAweDAwNjIsIDB4MjAxMCwgMHgwMDYxLCAweDIwQTksIDB4MDA2MCwgMHgyRjAwLCAweDE5M0MsDQotICAgIDB4MkYwNCwgMHgxOEVDLCAweDJGMDYsIDB4MTkwRCwgMHgyRjA4LCAweDE5MkIsIDB4MkYwQSwgMHgxOTRELA0KLSAgICAweDJGMEIsIDB4MUQ0QiwgMHgyRjExLCAweDEwQUUsIDB4MkYxMiwgMHgxMTZBLCAweDJGMTQsIDB4MTQzRiwNCi0gICAgMHgyRjE3LCAweDE2OEMsIDB4MkYxOCwgMHgxM0Q1LCAweDJGMUMsIDB4MTgzOSwgMHgyRjFELCAweDBGM0QsDQotICAgIDB4MkYxRiwgMHgxRDFCLCAweDJGMjAsIDB4MTQ4NywgMHgyRjIzLCAweDE1MUIsIDB4MkYyNCwgMHgxMDlELA0KLSAgICAweDJGMjUsIDB4MTAzRiwgMHgyRjI2LCAweDE5NTgsIDB4MkYyOCwgMHgxQzRGLCAweDJGMjksIDB4MTU4MCwNCi0gICAgMHgyRjJCLCAweDE2NDEsIDB4MkYyRCwgMHgxNEI5LCAweDJGMkYsIDB4MEVDRiwgMHgyRjMwLCAweDBGRUQsDQotICAgIDB4MkYzMSwgMHgwRTE0LCAweDJGMzIsIDB4MEQ5OSwgMHgyRjM4LCAweDBGN0MsIDB4MkYzQywgMHgxNjg0LA0KLSAgICAweDJGM0QsIDB4MEVEQywgMHgyRjNFLCAweDFFODAsIDB4MkYzRiwgMHgxNUNDLCAweDJGNDAsIDB4MUIyNywNCi0gICAgMHgyRjQyLCAweDEyRTgsIDB4MkY0MywgMHgxMEZELCAweDJGNDQsIDB4MEZCQiwgMHgyRjQ1LCAweDEzNTYsDQotICAgIDB4MkY0NiwgMHgxMkQzLCAweDJGNDcsIDB4MTk0MCwgMHgyRjQ4LCAweDE3RUQsIDB4MkY0OSwgMHgxODg5LA0KLSAgICAweDJGNEEsIDB4MTJCNCwgMHgyRjRCLCAweDFGNUIsIDB4MkY0QywgMHgxQjJDLCAweDJGNEYsIDB4MTJENiwNCi0gICAgMHgyRjUwLCAweDE0NEMsIDB4MkY1MSwgMHgxMkE4LCAweDJGNTIsIDB4MTY4RSwgMHgyRjU0LCAweDE1RDMsDQotICAgIDB4MkY1NSwgMHgxRUJCLCAweDJGNTYsIDB4MUE5MywgMHgyRjU3LCAweDE0MDksIDB4MkY1OCwgMHgxRjFBLA0KLSAgICAweDJGNUEsIDB4MUQ2MSwgMHgyRjVCLCAweDE2OTYsIDB4MkY1QywgMHgxODQyLCAweDJGNUQsIDB4MEUzNywNCi0gICAgMHgyRjVFLCAweDFFM0QsIDB4MkY1RiwgMHgxN0MxLCAweDJGNjAsIDB4MEVERSwgMHgyRjYxLCAweDE3RDQsDQotICAgIDB4MkY2MiwgMHgwREMxLCAweDJGNjMsIDB4MTRGQSwgMHgyRjY0LCAweDE4MkQsIDB4MkY2NSwgMHgxQTA4LA0KLSAgICAweDJGNjYsIDB4MURCQSwgMHgyRjY5LCAweDEzODEsIDB4MkY2QSwgMHgxREIwLCAweDJGNkIsIDB4MTI5MywNCi0gICAgMHgyRjZDLCAweDEyQjcsIDB4MkY2RCwgMHgxMkFELCAweDJGNkUsIDB4MTY0RCwgMHgyRjZGLCAweDE1MjUsDQotICAgIDB4MkY3MCwgMHgxNjRFLCAweDJGNzIsIDB4MUVCRSwgMHgyRjczLCAweDFFNEIsIDB4MkY3NCwgMHgxMjJELA0KLSAgICAweDJGNzUsIDB4MUFGNCwgMHgyRjc2LCAweDEyRkYsIDB4MkY3OCwgMHgxNDBDLCAweDJGN0EsIDB4MTcwOCwNCi0gICAgMHgyRjdCLCAweDE4NEEsIDB4MkY3QywgMHgxMUE3LCAweDJGN0QsIDB4MTkxQiwgMHgyRjdGLCAweDE5MUMsDQotICAgIDB4MkY4MCwgMHgxOEUwLCAweDJGODEsIDB4MThENSwgMHgyRjgyLCAweDE2NzUsIDB4MkY4MywgMHgxOTY2LA0KLSAgICAweDJGODQsIDB4MUIzNywgMHgyRjg1LCAweDBGNUEsIDB4MkY4NiwgMHgxNTUwLCAweDJGODcsIDB4MUJGNiwNCi0gICAgMHgyRjg4LCAweDFBRTgsIDB4MkY4OSwgMHgwREE4LCAweDJGOEEsIDB4MTRGOCwgMHgyRjhCLCAweDFDNDAsDQotICAgIDB4MkY4RSwgMHgxRTRDLCAweDJGOEYsIDB4MUUxRCwgMHgyRjkwLCAweDE5MDksIDB4MkY5MiwgMHgwRTNDLA0KLSAgICAweDJGOTMsIDB4MEQ5MiwgMHgyRjk0LCAweDE3MjEsIDB4MkY5NSwgMHgwRUJDLCAweDJGOTYsIDB4MTEwMywNCi0gICAgMHgyRjk3LCAweDE2NTYsIDB4MkY5OSwgMHgxRDU4LCAweDJGOUEsIDB4MTlFQywgMHgyRjlCLCAweDFBRUMsDQotICAgIDB4MkY5QywgMHgxQUFFLCAweDJGOUQsIDB4MTY3QiwgMHgyRjlFLCAweDFCOEQsIDB4MkY5RiwgMHgxNjdDLA0KLSAgICAweDJGQTAsIDB4MUI2MSwgMHgyRkEyLCAweDE4RjUsIDB4MkZBMywgMHgxOEQwLCAweDJGQTUsIDB4MTIxQSwNCi0gICAgMHgyRkE2LCAweDEwMjMsIDB4MkZBNywgMHgxOUE4LCAweDJGQTgsIDB4MTJFRSwgMHgyRkE5LCAweDE0MUIsDQotICAgIDB4MkZBQywgMHgxODUzLCAweDJGQUQsIDB4MUMyMywgMHgyRkFFLCAweDE0NjQsIDB4MkZBRiwgMHgxMjg4LA0KLSAgICAweDJGQjAsIDB4MUUzNSwgMHgyRkIxLCAweDE4QTMsIDB4MkZCMywgMHgxOEYxLCAweDJGQjQsIDB4MUU0RCwNCi0gICAgMHgyRkI1LCAweDFEQUIsIDB4MkZCNiwgMHgxNDY1LCAweDJGQjcsIDB4MTY2NSwgMHgyRkI4LCAweDE1RjksDQotICAgIDB4MkZCOSwgMHgxRTI2LCAweDJGQkEsIDB4MTIzNSwgMHgyRkJCLCAweDBFQzksIDB4MkZCQywgMHgwRUI1LA0KLSAgICAweDJGQzEsIDB4MEY5OSwgMHgyRkMyLCAweDE3MTYsIDB4MkZDMywgMHgxQUFCLCAweDJGQzQsIDB4MTFBRiwNCi0gICAgMHgyRkM1LCAweDExQjUsIDB4MkZDNiwgMHgxMjc2LCAweDJGQzcsIDB4MTIzNywgMHgyRkM4LCAweDFFRjcsDQotICAgIDB4MkZDOSwgMHgxNTE5LCAweDJGQ0EsIDB4MUY1MiwgMHgyRkNELCAweDFBNjYsIDB4MkZDRSwgMHgwRUI2LA0KLSAgICAweDJGQ0YsIDB4MTUxQSwgMHgyRkQwLCAweDE0NjYsIDB4MkZEMSwgMHgxQTdELCAweDJGRDIsIDB4MUNCRiwNCi0gICAgMHgyRkQzLCAweDExRDMsIDB4MkZENCwgMHgwRjZBLA0KLX07DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGdfRlhDTUFQX1VuaUtTX1VURjE2X0hfMFsxNTggKiAyXSA9IHsKKyAgICAweDAwQTksIDB4MDA2MiwgMHgyMDEwLCAweDAwNjEsIDB4MjBBOSwgMHgwMDYwLCAweDJGMDAsIDB4MTkzQywKKyAgICAweDJGMDQsIDB4MThFQywgMHgyRjA2LCAweDE5MEQsIDB4MkYwOCwgMHgxOTJCLCAweDJGMEEsIDB4MTk0RCwKKyAgICAweDJGMEIsIDB4MUQ0QiwgMHgyRjExLCAweDEwQUUsIDB4MkYxMiwgMHgxMTZBLCAweDJGMTQsIDB4MTQzRiwKKyAgICAweDJGMTcsIDB4MTY4QywgMHgyRjE4LCAweDEzRDUsIDB4MkYxQywgMHgxODM5LCAweDJGMUQsIDB4MEYzRCwKKyAgICAweDJGMUYsIDB4MUQxQiwgMHgyRjIwLCAweDE0ODcsIDB4MkYyMywgMHgxNTFCLCAweDJGMjQsIDB4MTA5RCwKKyAgICAweDJGMjUsIDB4MTAzRiwgMHgyRjI2LCAweDE5NTgsIDB4MkYyOCwgMHgxQzRGLCAweDJGMjksIDB4MTU4MCwKKyAgICAweDJGMkIsIDB4MTY0MSwgMHgyRjJELCAweDE0QjksIDB4MkYyRiwgMHgwRUNGLCAweDJGMzAsIDB4MEZFRCwKKyAgICAweDJGMzEsIDB4MEUxNCwgMHgyRjMyLCAweDBEOTksIDB4MkYzOCwgMHgwRjdDLCAweDJGM0MsIDB4MTY4NCwKKyAgICAweDJGM0QsIDB4MEVEQywgMHgyRjNFLCAweDFFODAsIDB4MkYzRiwgMHgxNUNDLCAweDJGNDAsIDB4MUIyNywKKyAgICAweDJGNDIsIDB4MTJFOCwgMHgyRjQzLCAweDEwRkQsIDB4MkY0NCwgMHgwRkJCLCAweDJGNDUsIDB4MTM1NiwKKyAgICAweDJGNDYsIDB4MTJEMywgMHgyRjQ3LCAweDE5NDAsIDB4MkY0OCwgMHgxN0VELCAweDJGNDksIDB4MTg4OSwKKyAgICAweDJGNEEsIDB4MTJCNCwgMHgyRjRCLCAweDFGNUIsIDB4MkY0QywgMHgxQjJDLCAweDJGNEYsIDB4MTJENiwKKyAgICAweDJGNTAsIDB4MTQ0QywgMHgyRjUxLCAweDEyQTgsIDB4MkY1MiwgMHgxNjhFLCAweDJGNTQsIDB4MTVEMywKKyAgICAweDJGNTUsIDB4MUVCQiwgMHgyRjU2LCAweDFBOTMsIDB4MkY1NywgMHgxNDA5LCAweDJGNTgsIDB4MUYxQSwKKyAgICAweDJGNUEsIDB4MUQ2MSwgMHgyRjVCLCAweDE2OTYsIDB4MkY1QywgMHgxODQyLCAweDJGNUQsIDB4MEUzNywKKyAgICAweDJGNUUsIDB4MUUzRCwgMHgyRjVGLCAweDE3QzEsIDB4MkY2MCwgMHgwRURFLCAweDJGNjEsIDB4MTdENCwKKyAgICAweDJGNjIsIDB4MERDMSwgMHgyRjYzLCAweDE0RkEsIDB4MkY2NCwgMHgxODJELCAweDJGNjUsIDB4MUEwOCwKKyAgICAweDJGNjYsIDB4MURCQSwgMHgyRjY5LCAweDEzODEsIDB4MkY2QSwgMHgxREIwLCAweDJGNkIsIDB4MTI5MywKKyAgICAweDJGNkMsIDB4MTJCNywgMHgyRjZELCAweDEyQUQsIDB4MkY2RSwgMHgxNjRELCAweDJGNkYsIDB4MTUyNSwKKyAgICAweDJGNzAsIDB4MTY0RSwgMHgyRjcyLCAweDFFQkUsIDB4MkY3MywgMHgxRTRCLCAweDJGNzQsIDB4MTIyRCwKKyAgICAweDJGNzUsIDB4MUFGNCwgMHgyRjc2LCAweDEyRkYsIDB4MkY3OCwgMHgxNDBDLCAweDJGN0EsIDB4MTcwOCwKKyAgICAweDJGN0IsIDB4MTg0QSwgMHgyRjdDLCAweDExQTcsIDB4MkY3RCwgMHgxOTFCLCAweDJGN0YsIDB4MTkxQywKKyAgICAweDJGODAsIDB4MThFMCwgMHgyRjgxLCAweDE4RDUsIDB4MkY4MiwgMHgxNjc1LCAweDJGODMsIDB4MTk2NiwKKyAgICAweDJGODQsIDB4MUIzNywgMHgyRjg1LCAweDBGNUEsIDB4MkY4NiwgMHgxNTUwLCAweDJGODcsIDB4MUJGNiwKKyAgICAweDJGODgsIDB4MUFFOCwgMHgyRjg5LCAweDBEQTgsIDB4MkY4QSwgMHgxNEY4LCAweDJGOEIsIDB4MUM0MCwKKyAgICAweDJGOEUsIDB4MUU0QywgMHgyRjhGLCAweDFFMUQsIDB4MkY5MCwgMHgxOTA5LCAweDJGOTIsIDB4MEUzQywKKyAgICAweDJGOTMsIDB4MEQ5MiwgMHgyRjk0LCAweDE3MjEsIDB4MkY5NSwgMHgwRUJDLCAweDJGOTYsIDB4MTEwMywKKyAgICAweDJGOTcsIDB4MTY1NiwgMHgyRjk5LCAweDFENTgsIDB4MkY5QSwgMHgxOUVDLCAweDJGOUIsIDB4MUFFQywKKyAgICAweDJGOUMsIDB4MUFBRSwgMHgyRjlELCAweDE2N0IsIDB4MkY5RSwgMHgxQjhELCAweDJGOUYsIDB4MTY3QywKKyAgICAweDJGQTAsIDB4MUI2MSwgMHgyRkEyLCAweDE4RjUsIDB4MkZBMywgMHgxOEQwLCAweDJGQTUsIDB4MTIxQSwKKyAgICAweDJGQTYsIDB4MTAyMywgMHgyRkE3LCAweDE5QTgsIDB4MkZBOCwgMHgxMkVFLCAweDJGQTksIDB4MTQxQiwKKyAgICAweDJGQUMsIDB4MTg1MywgMHgyRkFELCAweDFDMjMsIDB4MkZBRSwgMHgxNDY0LCAweDJGQUYsIDB4MTI4OCwKKyAgICAweDJGQjAsIDB4MUUzNSwgMHgyRkIxLCAweDE4QTMsIDB4MkZCMywgMHgxOEYxLCAweDJGQjQsIDB4MUU0RCwKKyAgICAweDJGQjUsIDB4MURBQiwgMHgyRkI2LCAweDE0NjUsIDB4MkZCNywgMHgxNjY1LCAweDJGQjgsIDB4MTVGOSwKKyAgICAweDJGQjksIDB4MUUyNiwgMHgyRkJBLCAweDEyMzUsIDB4MkZCQiwgMHgwRUM5LCAweDJGQkMsIDB4MEVCNSwKKyAgICAweDJGQzEsIDB4MEY5OSwgMHgyRkMyLCAweDE3MTYsIDB4MkZDMywgMHgxQUFCLCAweDJGQzQsIDB4MTFBRiwKKyAgICAweDJGQzUsIDB4MTFCNSwgMHgyRkM2LCAweDEyNzYsIDB4MkZDNywgMHgxMjM3LCAweDJGQzgsIDB4MUVGNywKKyAgICAweDJGQzksIDB4MTUxOSwgMHgyRkNBLCAweDFGNTIsIDB4MkZDRCwgMHgxQTY2LCAweDJGQ0UsIDB4MEVCNiwKKyAgICAweDJGQ0YsIDB4MTUxQSwgMHgyRkQwLCAweDE0NjYsIDB4MkZEMSwgMHgxQTdELCAweDJGRDIsIDB4MUNCRiwKKyAgICAweDJGRDMsIDB4MTFEMywgMHgyRkQ0LCAweDBGNkEsCit9OwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL2NtYXBfaW50LmggYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvY21hcF9pbnQuaAppbmRleCAyY2UxNTIyLi5jN2RjZmM5IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvY21hcF9pbnQuaAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvY21hcF9pbnQuaApAQCAtMSwyMCArMSwyMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlBERkFQSV9DTUFQX0lOVF9IXw0KLSNkZWZpbmUgX0ZQREZBUElfQ01BUF9JTlRfSF8NCi1zdHJ1Y3QgRlhDTUFQX0NNYXAgew0KLSAgICB0eXBlZGVmIGVudW0geyBOb25lLCBTaW5nbGUsIFJhbmdlLCBSZXZlcnNlIH0gTWFwVHlwZTsNCi0gICAgY29uc3QgY2hhcioJCW1fTmFtZTsNCi0gICAgTWFwVHlwZQkJCW1fV29yZE1hcFR5cGU7DQotICAgIGNvbnN0IEZYX1dPUkQqCW1fcFdvcmRNYXA7DQotICAgIGludAkJCQltX1dvcmRDb3VudDsNCi0gICAgTWFwVHlwZQkJCW1fRFdvcmRNYXBUeXBlOw0KLSAgICBjb25zdCBGWF9XT1JEKgltX3BEV29yZE1hcDsNCi0gICAgaW50CQkJCW1fRFdvcmRDb3VudDsNCi0gICAgaW50CQkJCW1fVXNlT2Zmc2V0Ow0KLX07DQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlBERkFQSV9DTUFQX0lOVF9IXworI2RlZmluZSBfRlBERkFQSV9DTUFQX0lOVF9IXworc3RydWN0IEZYQ01BUF9DTWFwIHsKKyAgICB0eXBlZGVmIGVudW0geyBOb25lLCBTaW5nbGUsIFJhbmdlLCBSZXZlcnNlIH0gTWFwVHlwZTsKKyAgICBjb25zdCBjaGFyKgkJbV9OYW1lOworICAgIE1hcFR5cGUJCQltX1dvcmRNYXBUeXBlOworICAgIGNvbnN0IEZYX1dPUkQqCW1fcFdvcmRNYXA7CisgICAgaW50CQkJCW1fV29yZENvdW50OworICAgIE1hcFR5cGUJCQltX0RXb3JkTWFwVHlwZTsKKyAgICBjb25zdCBGWF9XT1JEKgltX3BEV29yZE1hcDsKKyAgICBpbnQJCQkJbV9EV29yZENvdW50OworICAgIGludAkJCQltX1VzZU9mZnNldDsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9mcGRmX2NtYXBzLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9jbWFwcy9mcGRmX2NtYXBzLmNwcAppbmRleCA5YWIzMjRiLi5hZmE1MTMxIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfY21hcHMvZnBkZl9jbWFwcy5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2NtYXBzL2ZwZGZfY21hcHMuY3BwCkBAIC0xLDE4MyArMSwxODMgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9yZXNvdXJjZS5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCINCi0jaW5jbHVkZSAiLi4vZnBkZl9mb250L2ZvbnRfaW50LmgiDQotI2luY2x1ZGUgImNtYXBfaW50LmgiDQotdm9pZCBGUERGQVBJX0ZpbmRFbWJlZGRlZENNYXAoY29uc3QgY2hhciogbmFtZSwgaW50IGNoYXJzZXQsIGludCBjb2RpbmcsIGNvbnN0IEZYQ01BUF9DTWFwKiYgcE1hcCkNCi17DQotICAgIHBNYXAgPSBOVUxMOw0KLSAgICBDUERGX0ZvbnRHbG9iYWxzKiBwRm9udEdsb2JhbHMgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldFBhZ2VNb2R1bGUoKS0+R2V0Rm9udEdsb2JhbHMoKTsNCi0gICAgY29uc3QgRlhDTUFQX0NNYXAqIHBDTWFwcyA9IHBGb250R2xvYmFscy0+bV9FbWJlZGRlZENoYXJzZXRzW2NoYXJzZXRdLm1fcE1hcExpc3Q7DQotICAgIGludCBuQ01hcHMgPSBwRm9udEdsb2JhbHMtPm1fRW1iZWRkZWRDaGFyc2V0c1tjaGFyc2V0XS5tX0NvdW50Ow0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5DTWFwczsgaSArKykgew0KLSAgICAgICAgaWYgKEZYU1lTX3N0cmNtcChuYW1lLCBwQ01hcHNbaV0ubV9OYW1lKSkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcE1hcCA9ICZwQ01hcHNbaV07DQotICAgICAgICBicmVhazsNCi0gICAgfQ0KLX0NCi1leHRlcm4gIkMiIHsNCi0gICAgc3RhdGljIGludCBjb21wYXJlV29yZChjb25zdCB2b2lkKiBwMSwgY29uc3Qgdm9pZCogcDIpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAoKihGWF9XT1JEKilwMSkgLSAoKihGWF9XT1JEKilwMik7DQotICAgIH0NCi19Ow0KLWV4dGVybiAiQyIgew0KLSAgICBzdGF0aWMgaW50IGNvbXBhcmVXb3JkUmFuZ2UoY29uc3Qgdm9pZCoga2V5LCBjb25zdCB2b2lkKiBlbGVtZW50KQ0KLSAgICB7DQotICAgICAgICBpZiAoKihGWF9XT1JEKilrZXkgPCAqIChGWF9XT1JEKillbGVtZW50KSB7DQotICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCooRlhfV09SRCopa2V5ID4gKChGWF9XT1JEKillbGVtZW50KVsxXSkgew0KLSAgICAgICAgICAgIHJldHVybiAxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi19Ow0KLWV4dGVybiAiQyIgew0KLSAgICBzdGF0aWMgaW50IGNvbXBhcmVEV29yZFJhbmdlKGNvbnN0IHZvaWQqIHAxLCBjb25zdCB2b2lkKiBwMikNCi0gICAgew0KLSAgICAgICAgRlhfRFdPUkQga2V5ID0gKihGWF9EV09SRCopcDE7DQotICAgICAgICBGWF9XT1JEIGhpd29yZCA9IChGWF9XT1JEKShrZXkgPj4gMTYpOw0KLSAgICAgICAgRlhfV09SRCogZWxlbWVudCA9IChGWF9XT1JEKilwMjsNCi0gICAgICAgIGlmIChoaXdvcmQgPCBlbGVtZW50WzBdKSB7DQotICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGhpd29yZCA+IGVsZW1lbnRbMF0pIHsNCi0gICAgICAgICAgICByZXR1cm4gMTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX1dPUkQgbG93b3JkID0gKEZYX1dPUkQpa2V5Ow0KLSAgICAgICAgaWYgKGxvd29yZCA8IGVsZW1lbnRbMV0pIHsNCi0gICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICB9DQotICAgICAgICBpZiAobG93b3JkID4gZWxlbWVudFsyXSkgew0KLSAgICAgICAgICAgIHJldHVybiAxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi19Ow0KLWV4dGVybiAiQyIgew0KLSAgICBzdGF0aWMgaW50IGNvbXBhcmVEV29yZFNpbmdsZShjb25zdCB2b2lkKiBwMSwgY29uc3Qgdm9pZCogcDIpDQotICAgIHsNCi0gICAgICAgIEZYX0RXT1JEIGtleSA9ICooRlhfRFdPUkQqKXAxOw0KLSAgICAgICAgRlhfRFdPUkQgdmFsdWUgPSAoKCooRlhfV09SRCopcDIpIDw8IDE2KSB8ICgoRlhfV09SRCopcDIpWzFdOw0KLSAgICAgICAgaWYgKGtleSA8IHZhbHVlKSB7DQotICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGtleSA+IHZhbHVlKSB7DQotICAgICAgICAgICAgcmV0dXJuIDE7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLX07DQotRlhfV09SRCBGUERGQVBJX0NJREZyb21DaGFyQ29kZShjb25zdCBGWENNQVBfQ01hcCogcE1hcCwgRlhfRFdPUkQgY2hhcmNvZGUpDQotew0KLSAgICBpZiAoY2hhcmNvZGUgPj4gMTYpIHsNCi0gICAgICAgIHdoaWxlICgxKSB7DQotICAgICAgICAgICAgaWYgKHBNYXAtPm1fRFdvcmRNYXBUeXBlID09IEZYQ01BUF9DTWFwOjpSYW5nZSkgew0KLSAgICAgICAgICAgICAgICBGWF9XT1JEKiBmb3VuZCA9IChGWF9XT1JEKilGWFNZU19ic2VhcmNoKCZjaGFyY29kZSwgcE1hcC0+bV9wRFdvcmRNYXAsIHBNYXAtPm1fRFdvcmRDb3VudCwgOCwgY29tcGFyZURXb3JkUmFuZ2UpOw0KLSAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZFszXSArIChGWF9XT1JEKWNoYXJjb2RlIC0gZm91bmRbMV07DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2UgaWYgKHBNYXAtPm1fRFdvcmRNYXBUeXBlID09IEZYQ01BUF9DTWFwOjpTaW5nbGUpIHsNCi0gICAgICAgICAgICAgICAgRlhfV09SRCogZm91bmQgPSAoRlhfV09SRCopRlhTWVNfYnNlYXJjaCgmY2hhcmNvZGUsIHBNYXAtPm1fcERXb3JkTWFwLCBwTWFwLT5tX0RXb3JkQ291bnQsIDYsIGNvbXBhcmVEV29yZFNpbmdsZSk7DQotICAgICAgICAgICAgICAgIGlmIChmb3VuZCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kWzJdOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChwTWFwLT5tX1VzZU9mZnNldCA9PSAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwTWFwID0gcE1hcCArIHBNYXAtPm1fVXNlT2Zmc2V0Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgRlhfV09SRCBjb2RlID0gKEZYX1dPUkQpY2hhcmNvZGU7DQotICAgIHdoaWxlICgxKSB7DQotICAgICAgICBpZiAocE1hcC0+bV9wV29yZE1hcCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICB9DQotICAgICAgICBpZiAocE1hcC0+bV9Xb3JkTWFwVHlwZSA9PSBGWENNQVBfQ01hcDo6U2luZ2xlKSB7DQotICAgICAgICAgICAgRlhfV09SRCogZm91bmQgPSAoRlhfV09SRCopRlhTWVNfYnNlYXJjaCgmY29kZSwgcE1hcC0+bV9wV29yZE1hcCwgcE1hcC0+bV9Xb3JkQ291bnQsIDQsIGNvbXBhcmVXb3JkKTsNCi0gICAgICAgICAgICBpZiAoZm91bmQpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kWzFdOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSBpZiAocE1hcC0+bV9Xb3JkTWFwVHlwZSA9PSBGWENNQVBfQ01hcDo6UmFuZ2UpIHsNCi0gICAgICAgICAgICBGWF9XT1JEKiBmb3VuZCA9IChGWF9XT1JEKilGWFNZU19ic2VhcmNoKCZjb2RlLCBwTWFwLT5tX3BXb3JkTWFwLCBwTWFwLT5tX1dvcmRDb3VudCwgNiwgY29tcGFyZVdvcmRSYW5nZSk7DQotICAgICAgICAgICAgaWYgKGZvdW5kKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZFsyXSArIGNvZGUgLSBmb3VuZFswXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAocE1hcC0+bV9Vc2VPZmZzZXQgPT0gMCkgew0KLSAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcE1hcCA9IHBNYXAgKyBwTWFwLT5tX1VzZU9mZnNldDsNCi0gICAgfQ0KLSAgICByZXR1cm4gMDsNCi19DQotRlhfRFdPUkQgRlBERkFQSV9DaGFyQ29kZUZyb21DSUQoY29uc3QgRlhDTUFQX0NNYXAqIHBNYXAsIEZYX1dPUkQgY2lkKQ0KLXsNCi0gICAgd2hpbGUgKDEpIHsNCi0gICAgICAgIGlmIChwTWFwLT5tX1dvcmRNYXBUeXBlID09IEZYQ01BUF9DTWFwOjpTaW5nbGUpIHsNCi0gICAgICAgICAgICBjb25zdCBGWF9XT1JEICpwQ3VyID0gcE1hcC0+bV9wV29yZE1hcDsNCi0gICAgICAgICAgICBjb25zdCBGWF9XT1JEICpwRW5kID0gcE1hcC0+bV9wV29yZE1hcCArIHBNYXAtPm1fV29yZENvdW50ICogMjsNCi0gICAgICAgICAgICB3aGlsZSAocEN1ciA8IHBFbmQpIHsNCi0gICAgICAgICAgICAgICAgaWYgKHBDdXJbMV0gPT0gY2lkKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcEN1clswXTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBwQ3VyICs9IDI7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIGlmIChwTWFwLT5tX1dvcmRNYXBUeXBlID09IEZYQ01BUF9DTWFwOjpSYW5nZSkgew0KLSAgICAgICAgICAgIGNvbnN0IEZYX1dPUkQgKnBDdXIgPSBwTWFwLT5tX3BXb3JkTWFwOw0KLSAgICAgICAgICAgIGNvbnN0IEZYX1dPUkQgKnBFbmQgPSBwTWFwLT5tX3BXb3JkTWFwICsgcE1hcC0+bV9Xb3JkQ291bnQgKiAzOw0KLSAgICAgICAgICAgIHdoaWxlIChwQ3VyIDwgcEVuZCkgew0KLSAgICAgICAgICAgICAgICBpZiAoY2lkID49IHBDdXJbMl0gJiYgY2lkIDw9IHBDdXJbMl0gKyBwQ3VyWzFdIC0gcEN1clswXSkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBDdXJbMF0gKyBjaWQgLSBwQ3VyWzJdOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHBDdXIgKz0gMzsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAocE1hcC0+bV9Vc2VPZmZzZXQgPT0gMCkgew0KLSAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcE1hcCA9IHBNYXAgKyBwTWFwLT5tX1VzZU9mZnNldDsNCi0gICAgfQ0KLSAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgaWYgKHBNYXAtPm1fRFdvcmRNYXBUeXBlID09IEZYQ01BUF9DTWFwOjpSYW5nZSkgew0KLSAgICAgICAgICAgIGNvbnN0IEZYX1dPUkQgKnBDdXIgPSBwTWFwLT5tX3BEV29yZE1hcDsNCi0gICAgICAgICAgICBjb25zdCBGWF9XT1JEICpwRW5kID0gcE1hcC0+bV9wRFdvcmRNYXAgKyBwTWFwLT5tX0RXb3JkQ291bnQgKiA0Ow0KLSAgICAgICAgICAgIHdoaWxlIChwQ3VyIDwgcEVuZCkgew0KLSAgICAgICAgICAgICAgICBpZiAoY2lkID49IHBDdXJbM10gJiYgY2lkIDw9IHBDdXJbM10gKyBwQ3VyWzJdIC0gcEN1clsxXSkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoKEZYX0RXT1JEKXBDdXJbMF0gPDwgMTYpIHwgcEN1clsxXSkgKyBjaWQgLSBwQ3VyWzNdOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHBDdXIgKz0gNDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2UgaWYgKHBNYXAtPm1fRFdvcmRNYXBUeXBlID09IEZYQ01BUF9DTWFwOjpTaW5nbGUpIHsNCi0gICAgICAgICAgICBjb25zdCBGWF9XT1JEICpwQ3VyID0gcE1hcC0+bV9wRFdvcmRNYXA7DQotICAgICAgICAgICAgY29uc3QgRlhfV09SRCAqcEVuZCA9IHBNYXAtPm1fcERXb3JkTWFwICsgcE1hcC0+bV9EV29yZENvdW50ICogMzsNCi0gICAgICAgICAgICB3aGlsZSAocEN1ciA8IHBFbmQpIHsNCi0gICAgICAgICAgICAgICAgaWYgKHBDdXJbMl0gPT0gY2lkKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKChGWF9EV09SRClwQ3VyWzBdIDw8IDE2KSB8IHBDdXJbMV07DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcEN1ciArPSAzOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwTWFwLT5tX1VzZU9mZnNldCA9PSAwKSB7DQotICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICB9DQotICAgICAgICBwTWFwID0gcE1hcCArIHBNYXAtPm1fVXNlT2Zmc2V0Ow0KLSAgICB9DQotICAgIHJldHVybiAwOw0KLX0NCi12b2lkIEZQREZBUElfTG9hZENJRDJVbmljb2RlTWFwKGludCBjaGFyc2V0LCBjb25zdCBGWF9XT1JEKiYgcE1hcCwgRlhfRFdPUkQmIGNvdW50KQ0KLXsNCi0gICAgQ1BERl9Gb250R2xvYmFscyogcEZvbnRHbG9iYWxzID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRQYWdlTW9kdWxlKCktPkdldEZvbnRHbG9iYWxzKCk7DQotICAgIHBNYXAgPSBwRm9udEdsb2JhbHMtPm1fRW1iZWRkZWRUb1VuaWNvZGVzW2NoYXJzZXRdLm1fcE1hcDsNCi0gICAgY291bnQgPSBwRm9udEdsb2JhbHMtPm1fRW1iZWRkZWRUb1VuaWNvZGVzW2NoYXJzZXRdLm1fQ291bnQ7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9yZXNvdXJjZS5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX21vZHVsZS5oIgorI2luY2x1ZGUgIi4uL2ZwZGZfZm9udC9mb250X2ludC5oIgorI2luY2x1ZGUgImNtYXBfaW50LmgiCit2b2lkIEZQREZBUElfRmluZEVtYmVkZGVkQ01hcChjb25zdCBjaGFyKiBuYW1lLCBpbnQgY2hhcnNldCwgaW50IGNvZGluZywgY29uc3QgRlhDTUFQX0NNYXAqJiBwTWFwKQoreworICAgIHBNYXAgPSBOVUxMOworICAgIENQREZfRm9udEdsb2JhbHMqIHBGb250R2xvYmFscyA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UGFnZU1vZHVsZSgpLT5HZXRGb250R2xvYmFscygpOworICAgIGNvbnN0IEZYQ01BUF9DTWFwKiBwQ01hcHMgPSBwRm9udEdsb2JhbHMtPm1fRW1iZWRkZWRDaGFyc2V0c1tjaGFyc2V0XS5tX3BNYXBMaXN0OworICAgIGludCBuQ01hcHMgPSBwRm9udEdsb2JhbHMtPm1fRW1iZWRkZWRDaGFyc2V0c1tjaGFyc2V0XS5tX0NvdW50OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkNNYXBzOyBpICsrKSB7CisgICAgICAgIGlmIChGWFNZU19zdHJjbXAobmFtZSwgcENNYXBzW2ldLm1fTmFtZSkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHBNYXAgPSAmcENNYXBzW2ldOworICAgICAgICBicmVhazsKKyAgICB9Cit9CitleHRlcm4gIkMiIHsKKyAgICBzdGF0aWMgaW50IGNvbXBhcmVXb3JkKGNvbnN0IHZvaWQqIHAxLCBjb25zdCB2b2lkKiBwMikKKyAgICB7CisgICAgICAgIHJldHVybiAoKihGWF9XT1JEKilwMSkgLSAoKihGWF9XT1JEKilwMik7CisgICAgfQorfTsKK2V4dGVybiAiQyIgeworICAgIHN0YXRpYyBpbnQgY29tcGFyZVdvcmRSYW5nZShjb25zdCB2b2lkKiBrZXksIGNvbnN0IHZvaWQqIGVsZW1lbnQpCisgICAgeworICAgICAgICBpZiAoKihGWF9XT1JEKilrZXkgPCAqIChGWF9XT1JEKillbGVtZW50KSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCooRlhfV09SRCopa2V5ID4gKChGWF9XT1JEKillbGVtZW50KVsxXSkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfTsKK2V4dGVybiAiQyIgeworICAgIHN0YXRpYyBpbnQgY29tcGFyZURXb3JkUmFuZ2UoY29uc3Qgdm9pZCogcDEsIGNvbnN0IHZvaWQqIHAyKQorICAgIHsKKyAgICAgICAgRlhfRFdPUkQga2V5ID0gKihGWF9EV09SRCopcDE7CisgICAgICAgIEZYX1dPUkQgaGl3b3JkID0gKEZYX1dPUkQpKGtleSA+PiAxNik7CisgICAgICAgIEZYX1dPUkQqIGVsZW1lbnQgPSAoRlhfV09SRCopcDI7CisgICAgICAgIGlmIChoaXdvcmQgPCBlbGVtZW50WzBdKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGhpd29yZCA+IGVsZW1lbnRbMF0pIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgIEZYX1dPUkQgbG93b3JkID0gKEZYX1dPUkQpa2V5OworICAgICAgICBpZiAobG93b3JkIDwgZWxlbWVudFsxXSkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmIChsb3dvcmQgPiBlbGVtZW50WzJdKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9OworZXh0ZXJuICJDIiB7CisgICAgc3RhdGljIGludCBjb21wYXJlRFdvcmRTaW5nbGUoY29uc3Qgdm9pZCogcDEsIGNvbnN0IHZvaWQqIHAyKQorICAgIHsKKyAgICAgICAgRlhfRFdPUkQga2V5ID0gKihGWF9EV09SRCopcDE7CisgICAgICAgIEZYX0RXT1JEIHZhbHVlID0gKCgqKEZYX1dPUkQqKXAyKSA8PCAxNikgfCAoKEZYX1dPUkQqKXAyKVsxXTsKKyAgICAgICAgaWYgKGtleSA8IHZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGtleSA+IHZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9OworRlhfV09SRCBGUERGQVBJX0NJREZyb21DaGFyQ29kZShjb25zdCBGWENNQVBfQ01hcCogcE1hcCwgRlhfRFdPUkQgY2hhcmNvZGUpCit7CisgICAgaWYgKGNoYXJjb2RlID4+IDE2KSB7CisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBpZiAocE1hcC0+bV9EV29yZE1hcFR5cGUgPT0gRlhDTUFQX0NNYXA6OlJhbmdlKSB7CisgICAgICAgICAgICAgICAgRlhfV09SRCogZm91bmQgPSAoRlhfV09SRCopRlhTWVNfYnNlYXJjaCgmY2hhcmNvZGUsIHBNYXAtPm1fcERXb3JkTWFwLCBwTWFwLT5tX0RXb3JkQ291bnQsIDgsIGNvbXBhcmVEV29yZFJhbmdlKTsKKyAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kWzNdICsgKEZYX1dPUkQpY2hhcmNvZGUgLSBmb3VuZFsxXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHBNYXAtPm1fRFdvcmRNYXBUeXBlID09IEZYQ01BUF9DTWFwOjpTaW5nbGUpIHsKKyAgICAgICAgICAgICAgICBGWF9XT1JEKiBmb3VuZCA9IChGWF9XT1JEKilGWFNZU19ic2VhcmNoKCZjaGFyY29kZSwgcE1hcC0+bV9wRFdvcmRNYXAsIHBNYXAtPm1fRFdvcmRDb3VudCwgNiwgY29tcGFyZURXb3JkU2luZ2xlKTsKKyAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kWzJdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwTWFwLT5tX1VzZU9mZnNldCA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwTWFwID0gcE1hcCArIHBNYXAtPm1fVXNlT2Zmc2V0OworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBGWF9XT1JEIGNvZGUgPSAoRlhfV09SRCljaGFyY29kZTsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAocE1hcC0+bV9wV29yZE1hcCA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAocE1hcC0+bV9Xb3JkTWFwVHlwZSA9PSBGWENNQVBfQ01hcDo6U2luZ2xlKSB7CisgICAgICAgICAgICBGWF9XT1JEKiBmb3VuZCA9IChGWF9XT1JEKilGWFNZU19ic2VhcmNoKCZjb2RlLCBwTWFwLT5tX3BXb3JkTWFwLCBwTWFwLT5tX1dvcmRDb3VudCwgNCwgY29tcGFyZVdvcmQpOworICAgICAgICAgICAgaWYgKGZvdW5kKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kWzFdOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHBNYXAtPm1fV29yZE1hcFR5cGUgPT0gRlhDTUFQX0NNYXA6OlJhbmdlKSB7CisgICAgICAgICAgICBGWF9XT1JEKiBmb3VuZCA9IChGWF9XT1JEKilGWFNZU19ic2VhcmNoKCZjb2RlLCBwTWFwLT5tX3BXb3JkTWFwLCBwTWFwLT5tX1dvcmRDb3VudCwgNiwgY29tcGFyZVdvcmRSYW5nZSk7CisgICAgICAgICAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRbMl0gKyBjb2RlIC0gZm91bmRbMF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBNYXAtPm1fVXNlT2Zmc2V0ID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHBNYXAgPSBwTWFwICsgcE1hcC0+bV9Vc2VPZmZzZXQ7CisgICAgfQorICAgIHJldHVybiAwOworfQorRlhfRFdPUkQgRlBERkFQSV9DaGFyQ29kZUZyb21DSUQoY29uc3QgRlhDTUFQX0NNYXAqIHBNYXAsIEZYX1dPUkQgY2lkKQoreworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmIChwTWFwLT5tX1dvcmRNYXBUeXBlID09IEZYQ01BUF9DTWFwOjpTaW5nbGUpIHsKKyAgICAgICAgICAgIGNvbnN0IEZYX1dPUkQgKnBDdXIgPSBwTWFwLT5tX3BXb3JkTWFwOworICAgICAgICAgICAgY29uc3QgRlhfV09SRCAqcEVuZCA9IHBNYXAtPm1fcFdvcmRNYXAgKyBwTWFwLT5tX1dvcmRDb3VudCAqIDI7CisgICAgICAgICAgICB3aGlsZSAocEN1ciA8IHBFbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAocEN1clsxXSA9PSBjaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBDdXJbMF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBDdXIgKz0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChwTWFwLT5tX1dvcmRNYXBUeXBlID09IEZYQ01BUF9DTWFwOjpSYW5nZSkgeworICAgICAgICAgICAgY29uc3QgRlhfV09SRCAqcEN1ciA9IHBNYXAtPm1fcFdvcmRNYXA7CisgICAgICAgICAgICBjb25zdCBGWF9XT1JEICpwRW5kID0gcE1hcC0+bV9wV29yZE1hcCArIHBNYXAtPm1fV29yZENvdW50ICogMzsKKyAgICAgICAgICAgIHdoaWxlIChwQ3VyIDwgcEVuZCkgeworICAgICAgICAgICAgICAgIGlmIChjaWQgPj0gcEN1clsyXSAmJiBjaWQgPD0gcEN1clsyXSArIHBDdXJbMV0gLSBwQ3VyWzBdKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwQ3VyWzBdICsgY2lkIC0gcEN1clsyXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcEN1ciArPSAzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChwTWFwLT5tX1VzZU9mZnNldCA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBwTWFwID0gcE1hcCArIHBNYXAtPm1fVXNlT2Zmc2V0OworICAgIH0KKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAocE1hcC0+bV9EV29yZE1hcFR5cGUgPT0gRlhDTUFQX0NNYXA6OlJhbmdlKSB7CisgICAgICAgICAgICBjb25zdCBGWF9XT1JEICpwQ3VyID0gcE1hcC0+bV9wRFdvcmRNYXA7CisgICAgICAgICAgICBjb25zdCBGWF9XT1JEICpwRW5kID0gcE1hcC0+bV9wRFdvcmRNYXAgKyBwTWFwLT5tX0RXb3JkQ291bnQgKiA0OworICAgICAgICAgICAgd2hpbGUgKHBDdXIgPCBwRW5kKSB7CisgICAgICAgICAgICAgICAgaWYgKGNpZCA+PSBwQ3VyWzNdICYmIGNpZCA8PSBwQ3VyWzNdICsgcEN1clsyXSAtIHBDdXJbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoKEZYX0RXT1JEKXBDdXJbMF0gPDwgMTYpIHwgcEN1clsxXSkgKyBjaWQgLSBwQ3VyWzNdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwQ3VyICs9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAocE1hcC0+bV9EV29yZE1hcFR5cGUgPT0gRlhDTUFQX0NNYXA6OlNpbmdsZSkgeworICAgICAgICAgICAgY29uc3QgRlhfV09SRCAqcEN1ciA9IHBNYXAtPm1fcERXb3JkTWFwOworICAgICAgICAgICAgY29uc3QgRlhfV09SRCAqcEVuZCA9IHBNYXAtPm1fcERXb3JkTWFwICsgcE1hcC0+bV9EV29yZENvdW50ICogMzsKKyAgICAgICAgICAgIHdoaWxlIChwQ3VyIDwgcEVuZCkgeworICAgICAgICAgICAgICAgIGlmIChwQ3VyWzJdID09IGNpZCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKChGWF9EV09SRClwQ3VyWzBdIDw8IDE2KSB8IHBDdXJbMV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBDdXIgKz0gMzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocE1hcC0+bV9Vc2VPZmZzZXQgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcE1hcCA9IHBNYXAgKyBwTWFwLT5tX1VzZU9mZnNldDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9Cit2b2lkIEZQREZBUElfTG9hZENJRDJVbmljb2RlTWFwKGludCBjaGFyc2V0LCBjb25zdCBGWF9XT1JEKiYgcE1hcCwgRlhfRFdPUkQmIGNvdW50KQoreworICAgIENQREZfRm9udEdsb2JhbHMqIHBGb250R2xvYmFscyA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UGFnZU1vZHVsZSgpLT5HZXRGb250R2xvYmFscygpOworICAgIHBNYXAgPSBwRm9udEdsb2JhbHMtPm1fRW1iZWRkZWRUb1VuaWNvZGVzW2NoYXJzZXRdLm1fcE1hcDsKKyAgICBjb3VudCA9IHBGb250R2xvYmFscy0+bV9FbWJlZGRlZFRvVW5pY29kZXNbY2hhcnNldF0ubV9Db3VudDsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9lZGl0L2VkaXRpbnQuaCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9lZGl0L2VkaXRpbnQuaAppbmRleCBiY2ViYTFhLi42MzQ2ZjA2IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfZWRpdC9lZGl0aW50LmgKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2VkaXQvZWRpdGludC5oCkBAIC0xLDU5ICsxLDU5IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GUERGX0VESVRJTlRfDQotI2RlZmluZSBfRlBERl9FRElUSU5UXw0KLWNsYXNzIENQREZfT2JqZWN0U3RyZWFtIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDUERGX09iamVjdFN0cmVhbSgpOw0KLQ0KLSAgICBGWF9CT09MCQkJCVN0YXJ0KCk7DQotDQotICAgIEZYX0lOVDMyCQkJQ29tcHJlc3NJbmRpcmVjdE9iamVjdChGWF9EV09SRCBkd09iak51bSwgY29uc3QgQ1BERl9PYmplY3QgKnBPYmopOw0KLSAgICBGWF9JTlQzMgkJCUNvbXByZXNzSW5kaXJlY3RPYmplY3QoRlhfRFdPUkQgZHdPYmpOdW0sIEZYX0xQQ0JZVEUgcEJ1ZmZlciwgRlhfRFdPUkQgZHdTaXplKTsNCi0NCi0gICAgRlhfRklMRVNJWkUJCQlFbmQoQ1BERl9DcmVhdG9yKiBwQ3JlYXRvcik7DQotDQotICAgIENGWF9EV29yZEFycmF5CQltX09iak51bUFycmF5Ow0KLQ0KLSAgICBDRlhfQnl0ZVRleHRCdWYJCW1fQnVmZmVyOw0KLSAgICBGWF9EV09SRAkJCW1fZHdPYmpOdW07DQotICAgIEZYX0lOVDMyCQkJbV9pbmRleDsNCi1wcm90ZWN0ZWQ6DQotDQotICAgIENGWF9EV29yZEFycmF5CQltX09mZnNldEFycmF5Ow0KLX07DQotY2xhc3MgQ1BERl9YUmVmU3RyZWFtIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDUERGX1hSZWZTdHJlYW0oKTsNCi0NCi0gICAgRlhfQk9PTAkJCQlTdGFydCgpOw0KLQ0KLSAgICBGWF9JTlQzMgkJCUNvbXByZXNzSW5kaXJlY3RPYmplY3QoRlhfRFdPUkQgZHdPYmpOdW0sIGNvbnN0IENQREZfT2JqZWN0ICpwT2JqLCBDUERGX0NyZWF0b3IgKnBDcmVhdG9yKTsNCi0NCi0gICAgRlhfSU5UMzIJCQlDb21wcmVzc0luZGlyZWN0T2JqZWN0KEZYX0RXT1JEIGR3T2JqTnVtLCBGWF9MUENCWVRFIHBCdWZmZXIsIEZYX0RXT1JEIGR3U2l6ZSwgQ1BERl9DcmVhdG9yICpwQ3JlYXRvcik7DQotDQotICAgIEZYX0JPT0wJCQkJRW5kKENQREZfQ3JlYXRvciAqcENyZWF0b3IsIEZYX0JPT0wgYkVPRiA9IEZBTFNFKTsNCi0gICAgRlhfQk9PTAkJCQlBZGRPYmplY3ROdW1iZXJUb0luZGV4QXJyYXkoRlhfRFdPUkQgb2JqbnVtKTsNCi0gICAgRlhfQk9PTAkJCQlFbmRYUmVmU3RyZWFtKENQREZfQ3JlYXRvciogcENyZWF0b3IpOw0KLQ0KLQ0KLSAgICBDRlhfRFdvcmRBcnJheQkJbV9JbmRleEFycmF5Ow0KLQ0KLSAgICBGWF9GSUxFU0laRQkJCW1fUHJldk9mZnNldDsNCi0gICAgRlhfRFdPUkQJCQltX2R3VGVtcE9iak51bTsNCi0NCi1wcm90ZWN0ZWQ6DQotICAgIEZYX0lOVDMyCQkJRW5kT2JqZWN0U3RyZWFtKENQREZfQ3JlYXRvciAqcENyZWF0b3IsIEZYX0JPT0wgYkVPRiA9IFRSVUUpOw0KLSAgICBGWF9CT09MCQkJCUdlbmVyYXRlWFJlZlN0cmVhbShDUERGX0NyZWF0b3IqIHBDcmVhdG9yLCBGWF9CT09MIGJFT0YpOw0KLSAgICBGWF9JTlQzMgkJCW1faVNlZzsNCi0gICAgQ1BERl9PYmplY3RTdHJlYW0JbV9PYmpTdHJlYW07DQotICAgIENGWF9CeXRlVGV4dEJ1ZgkJbV9CdWZmZXI7DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9GUERGX0VESVRJTlRfCisjZGVmaW5lIF9GUERGX0VESVRJTlRfCitjbGFzcyBDUERGX09iamVjdFN0cmVhbSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ1BERl9PYmplY3RTdHJlYW0oKTsKKworICAgIEZYX0JPT0wJCQkJU3RhcnQoKTsKKworICAgIEZYX0lOVDMyCQkJQ29tcHJlc3NJbmRpcmVjdE9iamVjdChGWF9EV09SRCBkd09iak51bSwgY29uc3QgQ1BERl9PYmplY3QgKnBPYmopOworICAgIEZYX0lOVDMyCQkJQ29tcHJlc3NJbmRpcmVjdE9iamVjdChGWF9EV09SRCBkd09iak51bSwgRlhfTFBDQllURSBwQnVmZmVyLCBGWF9EV09SRCBkd1NpemUpOworCisgICAgRlhfRklMRVNJWkUJCQlFbmQoQ1BERl9DcmVhdG9yKiBwQ3JlYXRvcik7CisKKyAgICBDRlhfRFdvcmRBcnJheQkJbV9PYmpOdW1BcnJheTsKKworICAgIENGWF9CeXRlVGV4dEJ1ZgkJbV9CdWZmZXI7CisgICAgRlhfRFdPUkQJCQltX2R3T2JqTnVtOworICAgIEZYX0lOVDMyCQkJbV9pbmRleDsKK3Byb3RlY3RlZDoKKworICAgIENGWF9EV29yZEFycmF5CQltX09mZnNldEFycmF5OworfTsKK2NsYXNzIENQREZfWFJlZlN0cmVhbSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDUERGX1hSZWZTdHJlYW0oKTsKKworICAgIEZYX0JPT0wJCQkJU3RhcnQoKTsKKworICAgIEZYX0lOVDMyCQkJQ29tcHJlc3NJbmRpcmVjdE9iamVjdChGWF9EV09SRCBkd09iak51bSwgY29uc3QgQ1BERl9PYmplY3QgKnBPYmosIENQREZfQ3JlYXRvciAqcENyZWF0b3IpOworCisgICAgRlhfSU5UMzIJCQlDb21wcmVzc0luZGlyZWN0T2JqZWN0KEZYX0RXT1JEIGR3T2JqTnVtLCBGWF9MUENCWVRFIHBCdWZmZXIsIEZYX0RXT1JEIGR3U2l6ZSwgQ1BERl9DcmVhdG9yICpwQ3JlYXRvcik7CisKKyAgICBGWF9CT09MCQkJCUVuZChDUERGX0NyZWF0b3IgKnBDcmVhdG9yLCBGWF9CT09MIGJFT0YgPSBGQUxTRSk7CisgICAgRlhfQk9PTAkJCQlBZGRPYmplY3ROdW1iZXJUb0luZGV4QXJyYXkoRlhfRFdPUkQgb2JqbnVtKTsKKyAgICBGWF9CT09MCQkJCUVuZFhSZWZTdHJlYW0oQ1BERl9DcmVhdG9yKiBwQ3JlYXRvcik7CisKKworICAgIENGWF9EV29yZEFycmF5CQltX0luZGV4QXJyYXk7CisKKyAgICBGWF9GSUxFU0laRQkJCW1fUHJldk9mZnNldDsKKyAgICBGWF9EV09SRAkJCW1fZHdUZW1wT2JqTnVtOworCitwcm90ZWN0ZWQ6CisgICAgRlhfSU5UMzIJCQlFbmRPYmplY3RTdHJlYW0oQ1BERl9DcmVhdG9yICpwQ3JlYXRvciwgRlhfQk9PTCBiRU9GID0gVFJVRSk7CisgICAgRlhfQk9PTAkJCQlHZW5lcmF0ZVhSZWZTdHJlYW0oQ1BERl9DcmVhdG9yKiBwQ3JlYXRvciwgRlhfQk9PTCBiRU9GKTsKKyAgICBGWF9JTlQzMgkJCW1faVNlZzsKKyAgICBDUERGX09iamVjdFN0cmVhbQltX09ialN0cmVhbTsKKyAgICBDRlhfQnl0ZVRleHRCdWYJCW1fQnVmZmVyOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2VkaXQvZnBkZl9lZGl0X2NvbnRlbnQuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2VkaXQvZnBkZl9lZGl0X2NvbnRlbnQuY3BwCmluZGV4IDc5OGM3NzIuLjI0M2MyM2YgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9lZGl0L2ZwZGZfZWRpdF9jb250ZW50LmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfZWRpdC9mcGRmX2VkaXRfY29udGVudC5jcHAKQEAgLTEsMTY0ICsxLDE2NCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2UuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfc2VyaWFsLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX21vZHVsZS5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaCINCi0jaW5jbHVkZSAiLi4vZnBkZl9wYWdlL3BhZ2VpbnQuaCINCi1DRlhfQnl0ZVRleHRCdWYmIG9wZXJhdG9yIDw8IChDRlhfQnl0ZVRleHRCdWYmIGFyLCBDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpDQotew0KLSAgICBhciA8PCBtYXRyaXguYSA8PCAiICIgPDwgbWF0cml4LmIgPDwgIiAiIDw8IG1hdHJpeC5jIDw8ICIgIiA8PCBtYXRyaXguZCA8PCAiICIgPDwgbWF0cml4LmUgPDwgIiAiIDw8IG1hdHJpeC5mOw0KLSAgICByZXR1cm4gYXI7DQotfQ0KLUNQREZfUGFnZUNvbnRlbnRHZW5lcmF0ZTo6Q1BERl9QYWdlQ29udGVudEdlbmVyYXRlKENQREZfUGFnZSogcFBhZ2UpIDogbV9wUGFnZShwUGFnZSkNCi17DQotICAgIG1fcERvY3VtZW50ID0gTlVMTDsNCi0gICAgaWYgKG1fcFBhZ2UpIHsNCi0gICAgICAgIG1fcERvY3VtZW50ID0gbV9wUGFnZS0+bV9wRG9jdW1lbnQ7DQotICAgIH0NCi19DQotQ1BERl9QYWdlQ29udGVudEdlbmVyYXRlOjp+Q1BERl9QYWdlQ29udGVudEdlbmVyYXRlKCkNCi17DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9wYWdlT2JqZWN0cy5HZXRTaXplKCk7ICsraSkgew0KLSAgICAgICAgQ1BERl9QYWdlT2JqZWN0KiBwUGFnZU9iaiA9IChDUERGX1BhZ2VPYmplY3QqKW1fcGFnZU9iamVjdHNbaV07DQotICAgICAgICBpZiAocFBhZ2VPYmopIHsNCi0gICAgICAgICAgICBwUGFnZU9iai0+UmVsZWFzZSgpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BERl9QYWdlQ29udGVudEdlbmVyYXRlOjpJbnNlcnRQYWdlT2JqZWN0KENQREZfUGFnZU9iamVjdCogcFBhZ2VPYmplY3QpDQotew0KLSAgICBpZiAoIXBQYWdlT2JqZWN0KSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgcmV0dXJuIG1fcGFnZU9iamVjdHMuQWRkKHBQYWdlT2JqZWN0KTsNCi19DQotdm9pZCBDUERGX1BhZ2VDb250ZW50R2VuZXJhdGU6OkdlbmVyYXRlQ29udGVudCgpDQotew0KLSAgICBDRlhfQnl0ZVRleHRCdWYgYnVmOw0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBQYWdlRGljdCA9IG1fcFBhZ2UtPm1fcEZvcm1EaWN0Ow0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fcGFnZU9iamVjdHMuR2V0U2l6ZSgpOyArK2kpIHsNCi0gICAgICAgIENQREZfUGFnZU9iamVjdCogcFBhZ2VPYmogPSAoQ1BERl9QYWdlT2JqZWN0KiltX3BhZ2VPYmplY3RzW2ldOw0KLSAgICAgICAgaWYgKCFwUGFnZU9iaiB8fCBwUGFnZU9iai0+bV9UeXBlICE9IFBERlBBR0VfSU1BR0UpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIFByb2Nlc3NJbWFnZShidWYsIChDUERGX0ltYWdlT2JqZWN0KilwUGFnZU9iaik7DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QqIHBDb250ZW50ID0gcFBhZ2VEaWN0LT5HZXRFbGVtZW50VmFsdWUoIkNvbnRlbnRzIik7DQotICAgIGlmIChwQ29udGVudCAhPSBOVUxMKSB7DQotICAgICAgICBwUGFnZURpY3QtPlJlbW92ZUF0KCJDb250ZW50cyIpOw0KLSAgICB9DQotICAgIENQREZfU3RyZWFtKiBwU3RyZWFtID0gRlhfTkVXIENQREZfU3RyZWFtKE5VTEwsIDAsIE5VTEwpOw0KLSAgICBwU3RyZWFtLT5TZXREYXRhKGJ1Zi5HZXRCdWZmZXIoKSwgYnVmLkdldExlbmd0aCgpLCBGQUxTRSwgRkFMU0UpOw0KLSAgICBtX3BEb2N1bWVudC0+QWRkSW5kaXJlY3RPYmplY3QocFN0cmVhbSk7DQotICAgIHBQYWdlRGljdC0+U2V0QXRSZWZlcmVuY2UoIkNvbnRlbnRzIiwgbV9wRG9jdW1lbnQsIHBTdHJlYW0tPkdldE9iak51bSgpKTsNCi19DQotQ0ZYX0J5dGVTdHJpbmcgQ1BERl9QYWdlQ29udGVudEdlbmVyYXRlOjpSZWFsaXplUmVzb3VyY2UoQ1BERl9PYmplY3QqIHBSZXNvdXJjZU9iaiwgY29uc3QgRlhfQ0hBUiogc3pUeXBlKQ0KLXsNCi0gICAgaWYgKG1fcFBhZ2UtPm1fcFJlc291cmNlcyA9PSBOVUxMKSB7DQotICAgICAgICBtX3BQYWdlLT5tX3BSZXNvdXJjZXMgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5Ow0KLSAgICAgICAgaW50IG9iam51bSA9IG1fcERvY3VtZW50LT5BZGRJbmRpcmVjdE9iamVjdChtX3BQYWdlLT5tX3BSZXNvdXJjZXMpOw0KLSAgICAgICAgbV9wUGFnZS0+bV9wRm9ybURpY3QtPlNldEF0UmVmZXJlbmNlKCJSZXNvdXJjZXMiLCBtX3BEb2N1bWVudCwgb2JqbnVtKTsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBSZXNMaXN0ID0gbV9wUGFnZS0+bV9wUmVzb3VyY2VzLT5HZXREaWN0KHN6VHlwZSk7DQotICAgIGlmIChwUmVzTGlzdCA9PSBOVUxMKSB7DQotICAgICAgICBwUmVzTGlzdCA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7DQotICAgICAgICBtX3BQYWdlLT5tX3BSZXNvdXJjZXMtPlNldEF0KHN6VHlwZSwgcFJlc0xpc3QpOw0KLSAgICB9DQotICAgIG1fcERvY3VtZW50LT5BZGRJbmRpcmVjdE9iamVjdChwUmVzb3VyY2VPYmopOw0KLSAgICBDRlhfQnl0ZVN0cmluZyBuYW1lOw0KLSAgICBpbnQgaWRudW0gPSAxOw0KLSAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgbmFtZS5Gb3JtYXQoIkZYJWMlZCIsIHN6VHlwZVswXSwgaWRudW0pOw0KLSAgICAgICAgaWYgKCFwUmVzTGlzdC0+S2V5RXhpc3QobmFtZSkpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIGlkbnVtICsrOw0KLSAgICB9DQotICAgIHBSZXNMaXN0LT5BZGRSZWZlcmVuY2UobmFtZSwgbV9wRG9jdW1lbnQsIHBSZXNvdXJjZU9iai0+R2V0T2JqTnVtKCkpOw0KLSAgICByZXR1cm4gbmFtZTsNCi19DQotdm9pZCBDUERGX1BhZ2VDb250ZW50R2VuZXJhdGU6OlByb2Nlc3NJbWFnZShDRlhfQnl0ZVRleHRCdWYmIGJ1ZiwgQ1BERl9JbWFnZU9iamVjdCogcEltYWdlT2JqKQ0KLXsNCi0gICAgaWYgKChwSW1hZ2VPYmotPm1fTWF0cml4LmEgPT0gMCAmJiBwSW1hZ2VPYmotPm1fTWF0cml4LmIgPT0gMCkgfHwNCi0gICAgICAgICAgICAocEltYWdlT2JqLT5tX01hdHJpeC5jID09IDAgJiYgcEltYWdlT2JqLT5tX01hdHJpeC5kID09IDApKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgYnVmIDw8ICJxICIgPDwgcEltYWdlT2JqLT5tX01hdHJpeCA8PCAiIGNtICI7DQotICAgIGlmICghcEltYWdlT2JqLT5tX3BJbWFnZS0+SXNJbmxpbmUoKSkgew0KLSAgICAgICAgQ1BERl9TdHJlYW0qIHBTdHJlYW0gPSBwSW1hZ2VPYmotPm1fcEltYWdlLT5HZXRTdHJlYW0oKTsNCi0gICAgICAgIEZYX0RXT1JEIGR3U2F2ZWRPYmpOdW0gPSBwU3RyZWFtLT5HZXRPYmpOdW0oKTsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIG5hbWUgPSBSZWFsaXplUmVzb3VyY2UocFN0cmVhbSwgIlhPYmplY3QiKTsNCi0gICAgICAgIGlmIChkd1NhdmVkT2JqTnVtID09IDApIHsNCi0gICAgICAgICAgICBwSW1hZ2VPYmotPm1fcEltYWdlLT5SZWxlYXNlKCk7DQotICAgICAgICAgICAgcEltYWdlT2JqLT5tX3BJbWFnZSA9IG1fcERvY3VtZW50LT5HZXRQYWdlRGF0YSgpLT5HZXRJbWFnZShwU3RyZWFtKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGJ1ZiA8PCAiLyIgPDwgUERGX05hbWVFbmNvZGUobmFtZSkgPDwgIiBEbyBRXG4iOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9QYWdlQ29udGVudEdlbmVyYXRlOjpQcm9jZXNzRm9ybShDRlhfQnl0ZVRleHRCdWYmIGJ1ZiwgRlhfTFBDQllURSBkYXRhLCBGWF9EV09SRCBzaXplLCBDRlhfTWF0cml4JiBtYXRyaXgpDQotew0KLSAgICBpZiAoIWRhdGEgfHwgIXNpemUpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDUERGX1N0cmVhbSogcFN0cmVhbSA9IEZYX05FVyBDUERGX1N0cmVhbShOVUxMLCAwLCBOVUxMKTsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QgPSBDUERGX0RpY3Rpb25hcnk6OkNyZWF0ZSgpOw0KLSAgICBwRm9ybURpY3QtPlNldEF0TmFtZShGWF9CU1RSKCJUeXBlIiksIEZYX0JTVFIoIlhPYmplY3QiKSk7DQotICAgIHBGb3JtRGljdC0+U2V0QXROYW1lKEZYX0JTVFIoIlN1YnR5cGUiKSwgRlhfQlNUUigiRm9ybSIpKTsNCi0gICAgQ0ZYX0Zsb2F0UmVjdCBiYm94ID0gbV9wUGFnZS0+R2V0UGFnZUJCb3goKTsNCi0gICAgbWF0cml4LlRyYW5zZm9ybVJlY3QoYmJveCk7DQotICAgIHBGb3JtRGljdC0+U2V0QXRSZWN0KEZYX0JTVFIoIkJCb3giKSwgYmJveCk7DQotICAgIHBTdHJlYW0tPkluaXRTdHJlYW0oKEZYX0xQQllURSlkYXRhLCBzaXplLCBwRm9ybURpY3QpOw0KLSAgICBidWYgPDwgInEgIiA8PCBtYXRyaXggPDwgIiBjbSAiOw0KLSAgICBDRlhfQnl0ZVN0cmluZyBuYW1lID0gUmVhbGl6ZVJlc291cmNlKHBTdHJlYW0sICJYT2JqZWN0Iik7DQotICAgIGJ1ZiA8PCAiLyIgPDwgUERGX05hbWVFbmNvZGUobmFtZSkgPDwgIiBEbyBRXG4iOw0KLX0NCi12b2lkIENQREZfUGFnZUNvbnRlbnRHZW5lcmF0ZTo6VHJhbnNmb3JtQ29udGVudChDRlhfTWF0cml4JiBtYXRyaXgpDQotew0KLSAgICBDUERGX09iamVjdCogcENvbnRlbnQgPSBtX3BQYWdlLT5tX3BGb3JtRGljdC0+R2V0RWxlbWVudFZhbHVlKCJDb250ZW50cyIpOw0KLSAgICBpZiAoIXBDb250ZW50KSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVUZXh0QnVmIGJ1ZjsNCi0gICAgaW50IHR5cGUgPSBwQ29udGVudC0+R2V0VHlwZSgpOw0KLSAgICBpZiAodHlwZSA9PSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgIENQREZfQXJyYXkqIHBBcnJheSA9IChDUERGX0FycmF5KilwQ29udGVudDsNCi0gICAgICAgIGludCBpQ291bnQgPSBwQXJyYXktPkdldENvdW50KCk7DQotICAgICAgICBDUERGX1N0cmVhbUFjYyoqIHBDb250ZW50QXJyYXkgPSAoQ1BERl9TdHJlYW1BY2MqKilGWF9BbGxvYyhDUERGX1N0cmVhbUFjYyosIGlDb3VudCk7DQotICAgICAgICBpbnQgc2l6ZSA9IDA7DQotICAgICAgICBpbnQgaSA9IDA7DQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaUNvdW50OyArK2kpIHsNCi0gICAgICAgICAgICBwQ29udGVudCA9IHBBcnJheS0+R2V0RWxlbWVudChpKTsNCi0gICAgICAgICAgICBpZiAoIXBDb250ZW50IHx8IHBDb250ZW50LT5HZXRUeXBlKCkgIT0gUERGT0JKX1NUUkVBTSkgew0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgQ1BERl9TdHJlYW1BY2MqIHBTdHJlYW0gPSBGWF9ORVcgQ1BERl9TdHJlYW1BY2MoKTsNCi0gICAgICAgICAgICBwU3RyZWFtLT5Mb2FkQWxsRGF0YSgoQ1BERl9TdHJlYW0qKXBDb250ZW50KTsNCi0gICAgICAgICAgICBwQ29udGVudEFycmF5W2ldID0gcFN0cmVhbTsNCi0gICAgICAgICAgICBzaXplICs9IHBDb250ZW50QXJyYXlbaV0tPkdldFNpemUoKSArIDE7DQotICAgICAgICB9DQotICAgICAgICBpbnQgcG9zID0gMDsNCi0gICAgICAgIEZYX0xQQllURSBwQnVmID0gRlhfQWxsb2MoRlhfQllURSwgc2l6ZSk7DQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaUNvdW50OyArK2kpIHsNCi0gICAgICAgICAgICBGWFNZU19tZW1jcHkzMihwQnVmICsgcG9zLCBwQ29udGVudEFycmF5W2ldLT5HZXREYXRhKCksIHBDb250ZW50QXJyYXlbaV0tPkdldFNpemUoKSk7DQotICAgICAgICAgICAgcG9zICs9IHBDb250ZW50QXJyYXlbaV0tPkdldFNpemUoKSArIDE7DQotICAgICAgICAgICAgcEJ1Zltwb3MgLSAxXSA9ICcgJzsNCi0gICAgICAgICAgICBkZWxldGUgcENvbnRlbnRBcnJheVtpXTsNCi0gICAgICAgIH0NCi0gICAgICAgIFByb2Nlc3NGb3JtKGJ1ZiwgcEJ1Ziwgc2l6ZSwgbWF0cml4KTsNCi0gICAgICAgIEZYX0ZyZWUocEJ1Zik7DQotICAgICAgICBGWF9GcmVlKHBDb250ZW50QXJyYXkpOw0KLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gUERGT0JKX1NUUkVBTSkgew0KLSAgICAgICAgQ1BERl9TdHJlYW1BY2MgY29udGVudFN0cmVhbTsNCi0gICAgICAgIGNvbnRlbnRTdHJlYW0uTG9hZEFsbERhdGEoKENQREZfU3RyZWFtKilwQ29udGVudCk7DQotICAgICAgICBQcm9jZXNzRm9ybShidWYsIGNvbnRlbnRTdHJlYW0uR2V0RGF0YSgpLCBjb250ZW50U3RyZWFtLkdldFNpemUoKSwgbWF0cml4KTsNCi0gICAgfQ0KLSAgICBDUERGX1N0cmVhbSogcFN0cmVhbSA9IEZYX05FVyBDUERGX1N0cmVhbShOVUxMLCAwLCBOVUxMKTsNCi0gICAgcFN0cmVhbS0+U2V0RGF0YShidWYuR2V0QnVmZmVyKCksIGJ1Zi5HZXRMZW5ndGgoKSwgRkFMU0UsIEZBTFNFKTsNCi0gICAgbV9wRG9jdW1lbnQtPkFkZEluZGlyZWN0T2JqZWN0KHBTdHJlYW0pOw0KLSAgICBtX3BQYWdlLT5tX3BGb3JtRGljdC0+U2V0QXRSZWZlcmVuY2UoIkNvbnRlbnRzIiwgbV9wRG9jdW1lbnQsIHBTdHJlYW0tPkdldE9iak51bSgpKTsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2UuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9zZXJpYWwuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaCIKKyNpbmNsdWRlICIuLi9mcGRmX3BhZ2UvcGFnZWludC5oIgorQ0ZYX0J5dGVUZXh0QnVmJiBvcGVyYXRvciA8PCAoQ0ZYX0J5dGVUZXh0QnVmJiBhciwgQ0ZYX0FmZmluZU1hdHJpeCYgbWF0cml4KQoreworICAgIGFyIDw8IG1hdHJpeC5hIDw8ICIgIiA8PCBtYXRyaXguYiA8PCAiICIgPDwgbWF0cml4LmMgPDwgIiAiIDw8IG1hdHJpeC5kIDw8ICIgIiA8PCBtYXRyaXguZSA8PCAiICIgPDwgbWF0cml4LmY7CisgICAgcmV0dXJuIGFyOworfQorQ1BERl9QYWdlQ29udGVudEdlbmVyYXRlOjpDUERGX1BhZ2VDb250ZW50R2VuZXJhdGUoQ1BERl9QYWdlKiBwUGFnZSkgOiBtX3BQYWdlKHBQYWdlKQoreworICAgIG1fcERvY3VtZW50ID0gTlVMTDsKKyAgICBpZiAobV9wUGFnZSkgeworICAgICAgICBtX3BEb2N1bWVudCA9IG1fcFBhZ2UtPm1fcERvY3VtZW50OworICAgIH0KK30KK0NQREZfUGFnZUNvbnRlbnRHZW5lcmF0ZTo6fkNQREZfUGFnZUNvbnRlbnRHZW5lcmF0ZSgpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3BhZ2VPYmplY3RzLkdldFNpemUoKTsgKytpKSB7CisgICAgICAgIENQREZfUGFnZU9iamVjdCogcFBhZ2VPYmogPSAoQ1BERl9QYWdlT2JqZWN0KiltX3BhZ2VPYmplY3RzW2ldOworICAgICAgICBpZiAocFBhZ2VPYmopIHsKKyAgICAgICAgICAgIHBQYWdlT2JqLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9Cit9CitGWF9CT09MIENQREZfUGFnZUNvbnRlbnRHZW5lcmF0ZTo6SW5zZXJ0UGFnZU9iamVjdChDUERGX1BhZ2VPYmplY3QqIHBQYWdlT2JqZWN0KQoreworICAgIGlmICghcFBhZ2VPYmplY3QpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gbV9wYWdlT2JqZWN0cy5BZGQocFBhZ2VPYmplY3QpOworfQordm9pZCBDUERGX1BhZ2VDb250ZW50R2VuZXJhdGU6OkdlbmVyYXRlQ29udGVudCgpCit7CisgICAgQ0ZYX0J5dGVUZXh0QnVmIGJ1ZjsKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBQYWdlRGljdCA9IG1fcFBhZ2UtPm1fcEZvcm1EaWN0OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9wYWdlT2JqZWN0cy5HZXRTaXplKCk7ICsraSkgeworICAgICAgICBDUERGX1BhZ2VPYmplY3QqIHBQYWdlT2JqID0gKENQREZfUGFnZU9iamVjdCopbV9wYWdlT2JqZWN0c1tpXTsKKyAgICAgICAgaWYgKCFwUGFnZU9iaiB8fCBwUGFnZU9iai0+bV9UeXBlICE9IFBERlBBR0VfSU1BR0UpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIFByb2Nlc3NJbWFnZShidWYsIChDUERGX0ltYWdlT2JqZWN0KilwUGFnZU9iaik7CisgICAgfQorICAgIENQREZfT2JqZWN0KiBwQ29udGVudCA9IHBQYWdlRGljdC0+R2V0RWxlbWVudFZhbHVlKCJDb250ZW50cyIpOworICAgIGlmIChwQ29udGVudCAhPSBOVUxMKSB7CisgICAgICAgIHBQYWdlRGljdC0+UmVtb3ZlQXQoIkNvbnRlbnRzIik7CisgICAgfQorICAgIENQREZfU3RyZWFtKiBwU3RyZWFtID0gRlhfTkVXIENQREZfU3RyZWFtKE5VTEwsIDAsIE5VTEwpOworICAgIHBTdHJlYW0tPlNldERhdGEoYnVmLkdldEJ1ZmZlcigpLCBidWYuR2V0TGVuZ3RoKCksIEZBTFNFLCBGQUxTRSk7CisgICAgbV9wRG9jdW1lbnQtPkFkZEluZGlyZWN0T2JqZWN0KHBTdHJlYW0pOworICAgIHBQYWdlRGljdC0+U2V0QXRSZWZlcmVuY2UoIkNvbnRlbnRzIiwgbV9wRG9jdW1lbnQsIHBTdHJlYW0tPkdldE9iak51bSgpKTsKK30KK0NGWF9CeXRlU3RyaW5nIENQREZfUGFnZUNvbnRlbnRHZW5lcmF0ZTo6UmVhbGl6ZVJlc291cmNlKENQREZfT2JqZWN0KiBwUmVzb3VyY2VPYmosIGNvbnN0IEZYX0NIQVIqIHN6VHlwZSkKK3sKKyAgICBpZiAobV9wUGFnZS0+bV9wUmVzb3VyY2VzID09IE5VTEwpIHsKKyAgICAgICAgbV9wUGFnZS0+bV9wUmVzb3VyY2VzID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsKKyAgICAgICAgaW50IG9iam51bSA9IG1fcERvY3VtZW50LT5BZGRJbmRpcmVjdE9iamVjdChtX3BQYWdlLT5tX3BSZXNvdXJjZXMpOworICAgICAgICBtX3BQYWdlLT5tX3BGb3JtRGljdC0+U2V0QXRSZWZlcmVuY2UoIlJlc291cmNlcyIsIG1fcERvY3VtZW50LCBvYmpudW0pOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBSZXNMaXN0ID0gbV9wUGFnZS0+bV9wUmVzb3VyY2VzLT5HZXREaWN0KHN6VHlwZSk7CisgICAgaWYgKHBSZXNMaXN0ID09IE5VTEwpIHsKKyAgICAgICAgcFJlc0xpc3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5OworICAgICAgICBtX3BQYWdlLT5tX3BSZXNvdXJjZXMtPlNldEF0KHN6VHlwZSwgcFJlc0xpc3QpOworICAgIH0KKyAgICBtX3BEb2N1bWVudC0+QWRkSW5kaXJlY3RPYmplY3QocFJlc291cmNlT2JqKTsKKyAgICBDRlhfQnl0ZVN0cmluZyBuYW1lOworICAgIGludCBpZG51bSA9IDE7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgbmFtZS5Gb3JtYXQoIkZYJWMlZCIsIHN6VHlwZVswXSwgaWRudW0pOworICAgICAgICBpZiAoIXBSZXNMaXN0LT5LZXlFeGlzdChuYW1lKSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWRudW0gKys7CisgICAgfQorICAgIHBSZXNMaXN0LT5BZGRSZWZlcmVuY2UobmFtZSwgbV9wRG9jdW1lbnQsIHBSZXNvdXJjZU9iai0+R2V0T2JqTnVtKCkpOworICAgIHJldHVybiBuYW1lOworfQordm9pZCBDUERGX1BhZ2VDb250ZW50R2VuZXJhdGU6OlByb2Nlc3NJbWFnZShDRlhfQnl0ZVRleHRCdWYmIGJ1ZiwgQ1BERl9JbWFnZU9iamVjdCogcEltYWdlT2JqKQoreworICAgIGlmICgocEltYWdlT2JqLT5tX01hdHJpeC5hID09IDAgJiYgcEltYWdlT2JqLT5tX01hdHJpeC5iID09IDApIHx8CisgICAgICAgICAgICAocEltYWdlT2JqLT5tX01hdHJpeC5jID09IDAgJiYgcEltYWdlT2JqLT5tX01hdHJpeC5kID09IDApKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYnVmIDw8ICJxICIgPDwgcEltYWdlT2JqLT5tX01hdHJpeCA8PCAiIGNtICI7CisgICAgaWYgKCFwSW1hZ2VPYmotPm1fcEltYWdlLT5Jc0lubGluZSgpKSB7CisgICAgICAgIENQREZfU3RyZWFtKiBwU3RyZWFtID0gcEltYWdlT2JqLT5tX3BJbWFnZS0+R2V0U3RyZWFtKCk7CisgICAgICAgIEZYX0RXT1JEIGR3U2F2ZWRPYmpOdW0gPSBwU3RyZWFtLT5HZXRPYmpOdW0oKTsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgbmFtZSA9IFJlYWxpemVSZXNvdXJjZShwU3RyZWFtLCAiWE9iamVjdCIpOworICAgICAgICBpZiAoZHdTYXZlZE9iak51bSA9PSAwKSB7CisgICAgICAgICAgICBwSW1hZ2VPYmotPm1fcEltYWdlLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBwSW1hZ2VPYmotPm1fcEltYWdlID0gbV9wRG9jdW1lbnQtPkdldFBhZ2VEYXRhKCktPkdldEltYWdlKHBTdHJlYW0pOworICAgICAgICB9CisgICAgICAgIGJ1ZiA8PCAiLyIgPDwgUERGX05hbWVFbmNvZGUobmFtZSkgPDwgIiBEbyBRXG4iOworICAgIH0KK30KK3ZvaWQgQ1BERl9QYWdlQ29udGVudEdlbmVyYXRlOjpQcm9jZXNzRm9ybShDRlhfQnl0ZVRleHRCdWYmIGJ1ZiwgRlhfTFBDQllURSBkYXRhLCBGWF9EV09SRCBzaXplLCBDRlhfTWF0cml4JiBtYXRyaXgpCit7CisgICAgaWYgKCFkYXRhIHx8ICFzaXplKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1BERl9TdHJlYW0qIHBTdHJlYW0gPSBGWF9ORVcgQ1BERl9TdHJlYW0oTlVMTCwgMCwgTlVMTCk7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QgPSBDUERGX0RpY3Rpb25hcnk6OkNyZWF0ZSgpOworICAgIHBGb3JtRGljdC0+U2V0QXROYW1lKEZYX0JTVFIoIlR5cGUiKSwgRlhfQlNUUigiWE9iamVjdCIpKTsKKyAgICBwRm9ybURpY3QtPlNldEF0TmFtZShGWF9CU1RSKCJTdWJ0eXBlIiksIEZYX0JTVFIoIkZvcm0iKSk7CisgICAgQ0ZYX0Zsb2F0UmVjdCBiYm94ID0gbV9wUGFnZS0+R2V0UGFnZUJCb3goKTsKKyAgICBtYXRyaXguVHJhbnNmb3JtUmVjdChiYm94KTsKKyAgICBwRm9ybURpY3QtPlNldEF0UmVjdChGWF9CU1RSKCJCQm94IiksIGJib3gpOworICAgIHBTdHJlYW0tPkluaXRTdHJlYW0oKEZYX0xQQllURSlkYXRhLCBzaXplLCBwRm9ybURpY3QpOworICAgIGJ1ZiA8PCAicSAiIDw8IG1hdHJpeCA8PCAiIGNtICI7CisgICAgQ0ZYX0J5dGVTdHJpbmcgbmFtZSA9IFJlYWxpemVSZXNvdXJjZShwU3RyZWFtLCAiWE9iamVjdCIpOworICAgIGJ1ZiA8PCAiLyIgPDwgUERGX05hbWVFbmNvZGUobmFtZSkgPDwgIiBEbyBRXG4iOworfQordm9pZCBDUERGX1BhZ2VDb250ZW50R2VuZXJhdGU6OlRyYW5zZm9ybUNvbnRlbnQoQ0ZYX01hdHJpeCYgbWF0cml4KQoreworICAgIENQREZfT2JqZWN0KiBwQ29udGVudCA9IG1fcFBhZ2UtPm1fcEZvcm1EaWN0LT5HZXRFbGVtZW50VmFsdWUoIkNvbnRlbnRzIik7CisgICAgaWYgKCFwQ29udGVudCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENGWF9CeXRlVGV4dEJ1ZiBidWY7CisgICAgaW50IHR5cGUgPSBwQ29udGVudC0+R2V0VHlwZSgpOworICAgIGlmICh0eXBlID09IFBERk9CSl9BUlJBWSkgeworICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSAoQ1BERl9BcnJheSopcENvbnRlbnQ7CisgICAgICAgIGludCBpQ291bnQgPSBwQXJyYXktPkdldENvdW50KCk7CisgICAgICAgIENQREZfU3RyZWFtQWNjKiogcENvbnRlbnRBcnJheSA9IChDUERGX1N0cmVhbUFjYyoqKUZYX0FsbG9jKENQREZfU3RyZWFtQWNjKiwgaUNvdW50KTsKKyAgICAgICAgaW50IHNpemUgPSAwOworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpQ291bnQ7ICsraSkgeworICAgICAgICAgICAgcENvbnRlbnQgPSBwQXJyYXktPkdldEVsZW1lbnQoaSk7CisgICAgICAgICAgICBpZiAoIXBDb250ZW50IHx8IHBDb250ZW50LT5HZXRUeXBlKCkgIT0gUERGT0JKX1NUUkVBTSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQ1BERl9TdHJlYW1BY2MqIHBTdHJlYW0gPSBGWF9ORVcgQ1BERl9TdHJlYW1BY2MoKTsKKyAgICAgICAgICAgIHBTdHJlYW0tPkxvYWRBbGxEYXRhKChDUERGX1N0cmVhbSopcENvbnRlbnQpOworICAgICAgICAgICAgcENvbnRlbnRBcnJheVtpXSA9IHBTdHJlYW07CisgICAgICAgICAgICBzaXplICs9IHBDb250ZW50QXJyYXlbaV0tPkdldFNpemUoKSArIDE7CisgICAgICAgIH0KKyAgICAgICAgaW50IHBvcyA9IDA7CisgICAgICAgIEZYX0xQQllURSBwQnVmID0gRlhfQWxsb2MoRlhfQllURSwgc2l6ZSk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpQ291bnQ7ICsraSkgeworICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIocEJ1ZiArIHBvcywgcENvbnRlbnRBcnJheVtpXS0+R2V0RGF0YSgpLCBwQ29udGVudEFycmF5W2ldLT5HZXRTaXplKCkpOworICAgICAgICAgICAgcG9zICs9IHBDb250ZW50QXJyYXlbaV0tPkdldFNpemUoKSArIDE7CisgICAgICAgICAgICBwQnVmW3BvcyAtIDFdID0gJyAnOworICAgICAgICAgICAgZGVsZXRlIHBDb250ZW50QXJyYXlbaV07CisgICAgICAgIH0KKyAgICAgICAgUHJvY2Vzc0Zvcm0oYnVmLCBwQnVmLCBzaXplLCBtYXRyaXgpOworICAgICAgICBGWF9GcmVlKHBCdWYpOworICAgICAgICBGWF9GcmVlKHBDb250ZW50QXJyYXkpOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSBQREZPQkpfU1RSRUFNKSB7CisgICAgICAgIENQREZfU3RyZWFtQWNjIGNvbnRlbnRTdHJlYW07CisgICAgICAgIGNvbnRlbnRTdHJlYW0uTG9hZEFsbERhdGEoKENQREZfU3RyZWFtKilwQ29udGVudCk7CisgICAgICAgIFByb2Nlc3NGb3JtKGJ1ZiwgY29udGVudFN0cmVhbS5HZXREYXRhKCksIGNvbnRlbnRTdHJlYW0uR2V0U2l6ZSgpLCBtYXRyaXgpOworICAgIH0KKyAgICBDUERGX1N0cmVhbSogcFN0cmVhbSA9IEZYX05FVyBDUERGX1N0cmVhbShOVUxMLCAwLCBOVUxMKTsKKyAgICBwU3RyZWFtLT5TZXREYXRhKGJ1Zi5HZXRCdWZmZXIoKSwgYnVmLkdldExlbmd0aCgpLCBGQUxTRSwgRkFMU0UpOworICAgIG1fcERvY3VtZW50LT5BZGRJbmRpcmVjdE9iamVjdChwU3RyZWFtKTsKKyAgICBtX3BQYWdlLT5tX3BGb3JtRGljdC0+U2V0QXRSZWZlcmVuY2UoIkNvbnRlbnRzIiwgbV9wRG9jdW1lbnQsIHBTdHJlYW0tPkdldE9iak51bSgpKTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9lZGl0L2ZwZGZfZWRpdF9jcmVhdGUuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2VkaXQvZnBkZl9lZGl0X2NyZWF0ZS5jcHAKaW5kZXggNGVjM2FhNi4uZTViYjFjZiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2VkaXQvZnBkZl9lZGl0X2NyZWF0ZS5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2VkaXQvZnBkZl9lZGl0X2NyZWF0ZS5jcHAKQEAgLTEsMjEzMSArMSwyMTMxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfc2VyaWFsLmgiDQotI2luY2x1ZGUgImVkaXRpbnQuaCINCi0jZGVmaW5lIFBERl9PQkpFQ1RTVFJFQU1fTUFYTEVOR1RICSgyNTYgKiAxMDI0KQ0KLSNkZWZpbmUgUERGX1hSRUZTVFJFQU1fTUFYU0laRQkJMTAwMDANCi1leHRlcm4gdm9pZCBGbGF0ZUVuY29kZShjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfZGF0YSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSk7DQotZXh0ZXJuIHZvaWQgRmxhdGVFbmNvZGUoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50IHByZWRpY3RvciwgaW50IENvbG9ycywgaW50IEJpdHNQZXJDb21wb25lbnQsIGludCBDb2x1bW5zLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpOw0KLWV4dGVybiBGWF9CT09MIElzU2lnbmF0dXJlRGljdChjb25zdCBDUERGX0RpY3Rpb25hcnkqIHBEaWN0KTsNCi1GWF9JTlQzMiBQREZfQ3JlYXRvckFwcGVuZE9iamVjdChjb25zdCBDUERGX09iamVjdCogcE9iaiwgQ0ZYX0ZpbGVCdWZmZXJBcmNoaXZlICpwRmlsZSwgRlhfRklMRVNJWkUmIG9mZnNldCkNCi17DQotICAgIEZYX0lOVDMyIGxlbiA9IDA7DQotICAgIGlmIChwT2JqID09IE5VTEwpIHsNCi0gICAgICAgIGlmIChwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgbnVsbCIpKSA8IDApIHsNCi0gICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICB9DQotICAgICAgICBvZmZzZXQgKz0gNTsNCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotICAgIHN3aXRjaCAocE9iai0+R2V0VHlwZSgpKSB7DQotICAgICAgICBjYXNlIFBERk9CSl9OVUxMOg0KLSAgICAgICAgICAgIGlmIChwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgbnVsbCIpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBvZmZzZXQgKz0gNTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgUERGT0JKX0JPT0xFQU46DQotICAgICAgICBjYXNlIFBERk9CSl9OVU1CRVI6DQotICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAiKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kU3RyaW5nKHBPYmotPkdldFN0cmluZygpKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgb2Zmc2V0ICs9IGxlbiArIDE7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIFBERk9CSl9TVFJJTkc6IHsNCi0gICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc3RyID0gcE9iai0+R2V0U3RyaW5nKCk7DQotICAgICAgICAgICAgICAgIEZYX0JPT0wgYkhleCA9ICgoQ1BERl9TdHJpbmcqKXBPYmopLT5Jc0hleCgpOw0KLSAgICAgICAgICAgICAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmRTdHJpbmcoUERGX0VuY29kZVN0cmluZyhzdHIsIGJIZXgpKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGxlbjsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgY2FzZSBQREZPQkpfTkFNRTogew0KLSAgICAgICAgICAgICAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiLyIpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBzdHIgPSBwT2JqLT5HZXRTdHJpbmcoKTsNCi0gICAgICAgICAgICAgICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kU3RyaW5nKFBERl9OYW1lRW5jb2RlKHN0cikpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbGVuICsgMTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgY2FzZSBQREZPQkpfUkVGRVJFTkNFOiB7DQotICAgICAgICAgICAgICAgIGlmIChwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgIikpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIENQREZfUmVmZXJlbmNlKiBwID0gKENQREZfUmVmZXJlbmNlKilwT2JqOw0KLSAgICAgICAgICAgICAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmREV29yZChwLT5HZXRSZWZPYmpOdW0oKSkpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgMCBSICIpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbGVuICsgNjsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgY2FzZSBQREZPQkpfQVJSQVk6IHsNCi0gICAgICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIlsiKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE7DQotICAgICAgICAgICAgICAgIENQREZfQXJyYXkqIHAgPSAoQ1BERl9BcnJheSopcE9iajsNCi0gICAgICAgICAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHAtPkdldENvdW50KCk7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIENQREZfT2JqZWN0KiBwRWxlbWVudCA9IHAtPkdldEVsZW1lbnQoaSk7DQotICAgICAgICAgICAgICAgICAgICBpZiAocEVsZW1lbnQtPkdldE9iak51bSgpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAiKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kRFdvcmQocEVsZW1lbnQtPkdldE9iak51bSgpKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAwIFIiKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGxlbiArIDU7DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQREZfQ3JlYXRvckFwcGVuZE9iamVjdChwRWxlbWVudCwgcEZpbGUsIG9mZnNldCkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIl0iKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgUERGT0JKX0RJQ1RJT05BUlk6IHsNCi0gICAgICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIjw8IikpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG9mZnNldCArPSAyOw0KLSAgICAgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHAgPSAoQ1BERl9EaWN0aW9uYXJ5KilwT2JqOw0KLSAgICAgICAgICAgICAgICBGWF9QT1NJVElPTiBwb3MgPSBwLT5HZXRTdGFydFBvcygpOw0KLSAgICAgICAgICAgICAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBrZXk7DQotICAgICAgICAgICAgICAgICAgICBDUERGX09iamVjdCogcFZhbHVlID0gcC0+R2V0TmV4dEVsZW1lbnQocG9zLCBrZXkpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIi8iKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kU3RyaW5nKFBERl9OYW1lRW5jb2RlKGtleSkpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbGVuICsgMTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwVmFsdWUtPkdldE9iak51bSgpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAiKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kRFdvcmQocFZhbHVlLT5HZXRPYmpOdW0oKSkpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgMCBSIikpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBsZW4gKyA1Ow0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUERGX0NyZWF0b3JBcHBlbmRPYmplY3QocFZhbHVlLCBwRmlsZSwgb2Zmc2V0KSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiPj4iKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgUERGT0JKX1NUUkVBTTogew0KLSAgICAgICAgICAgICAgICBDUERGX1N0cmVhbSogcCA9IChDUERGX1N0cmVhbSopcE9iajsNCi0gICAgICAgICAgICAgICAgaWYgKFBERl9DcmVhdG9yQXBwZW5kT2JqZWN0KHAtPkdldERpY3QoKSwgcEZpbGUsIG9mZnNldCkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoInN0cmVhbVxyXG4iKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDg7DQotICAgICAgICAgICAgICAgIENQREZfU3RyZWFtQWNjIGFjYzsNCi0gICAgICAgICAgICAgICAgYWNjLkxvYWRBbGxEYXRhKHAsIFRSVUUpOw0KLSAgICAgICAgICAgICAgICBpZiAocEZpbGUtPkFwcGVuZEJsb2NrKGFjYy5HZXREYXRhKCksIGFjYy5HZXRTaXplKCkpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG9mZnNldCArPSBhY2MuR2V0U2l6ZSgpOw0KLSAgICAgICAgICAgICAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIlxyXG5lbmRzdHJlYW0iKSkpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG9mZnNldCArPSBsZW47DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgQVNTRVJUKEZBTFNFKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgfQ0KLSAgICByZXR1cm4gMTsNCi19DQotRlhfSU5UMzIgUERGX0NyZWF0b3JXcml0ZVRyYWlsZXIoQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDRlhfRmlsZUJ1ZmZlckFyY2hpdmUqIHBGaWxlLCBDUERGX0FycmF5KiBwSURBcnJheSwgRlhfQk9PTCBiQ29tcHJlc3MpDQotew0KLSAgICBGWF9GSUxFU0laRSBvZmZzZXQgPSAwOw0KLSAgICBGWF9JTlQzMiBsZW4gPSAwOw0KLSAgICBGWFNZU19hc3NlcnQocERvY3VtZW50ICYmIHBGaWxlKTsNCi0gICAgQ1BERl9QYXJzZXIgKnBQYXJzZXIgPSAoQ1BERl9QYXJzZXIqKXBEb2N1bWVudC0+R2V0UGFyc2VyKCk7DQotICAgIGlmIChwUGFyc2VyKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHAgPSBwUGFyc2VyLT5HZXRUcmFpbGVyKCk7DQotICAgICAgICBGWF9QT1NJVElPTiBwb3MgPSBwLT5HZXRTdGFydFBvcygpOw0KLSAgICAgICAgd2hpbGUgKHBvcykgew0KLSAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGtleTsNCi0gICAgICAgICAgICBDUERGX09iamVjdCogcFZhbHVlID0gcC0+R2V0TmV4dEVsZW1lbnQocG9zLCBrZXkpOw0KLSAgICAgICAgICAgIGlmIChrZXkgPT0gRlhfQlNUUkMoIkVuY3J5cHQiKSB8fCBrZXkgPT0gRlhfQlNUUkMoIlNpemUiKSB8fCBrZXkgPT0gRlhfQlNUUkMoIkZpbHRlciIpIHx8DQotICAgICAgICAgICAgICAgICAgICBrZXkgPT0gRlhfQlNUUkMoIkluZGV4IikgfHwga2V5ID09IEZYX0JTVFJDKCJMZW5ndGgiKSB8fCBrZXkgPT0gRlhfQlNUUkMoIlByZXYiKSB8fA0KLSAgICAgICAgICAgICAgICAgICAga2V5ID09IEZYX0JTVFJDKCJXIikgfHwga2V5ID09IEZYX0JTVFJDKCJYUmVmU3RtIikgfHwga2V5ID09IEZYX0JTVFJDKCJUeXBlIikgfHwga2V5ID09IEZYX0JTVFJDKCJJRCIpKSB7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoYkNvbXByZXNzICYmIGtleSA9PSBGWF9CU1RSQygiRGVjb2RlUGFybXMiKSkgew0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoKEZYX0JTVFJDKCIvIikpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmRTdHJpbmcoUERGX05hbWVFbmNvZGUoa2V5KSkpIDwgMCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG9mZnNldCArPSBsZW4gKyAxOw0KLSAgICAgICAgICAgIGlmIChwVmFsdWUtPkdldE9iak51bSgpKSB7DQotICAgICAgICAgICAgICAgIGlmIChwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgIikpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmICgobGVuID0gcEZpbGUtPkFwcGVuZERXb3JkKHBWYWx1ZS0+R2V0T2JqTnVtKCkpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiIDAgUiAiKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGxlbiArIDY7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgaWYgKFBERl9DcmVhdG9yQXBwZW5kT2JqZWN0KHBWYWx1ZSwgcEZpbGUsIG9mZnNldCkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAocElEQXJyYXkpIHsNCi0gICAgICAgICAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZygoRlhfQlNUUkMoIi9JRCIpKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgb2Zmc2V0ICs9IDM7DQotICAgICAgICAgICAgaWYgKFBERl9DcmVhdG9yQXBwZW5kT2JqZWN0KHBJREFycmF5LCBwRmlsZSwgb2Zmc2V0KSA8IDApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBvZmZzZXQ7DQotICAgIH0NCi0gICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIlxyXG4vUm9vdCAiKSkgPCAwKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kRFdvcmQocERvY3VtZW50LT5HZXRSb290KCktPkdldE9iak51bSgpKSkgPCAwKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAwIFJcclxuIikpIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIG9mZnNldCArPSBsZW4gKyAxNDsNCi0gICAgaWYgKHBEb2N1bWVudC0+R2V0SW5mbygpKSB7DQotICAgICAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiL0luZm8gIikpIDwgMCkgew0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICgobGVuID0gcEZpbGUtPkFwcGVuZERXb3JkKHBEb2N1bWVudC0+R2V0SW5mbygpLT5HZXRPYmpOdW0oKSkpIDwgMCkgew0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgMCBSXHJcbiIpKSA8IDApIHsNCi0gICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICB9DQotICAgICAgICBvZmZzZXQgKz0gbGVuICsgMTI7DQotICAgIH0NCi0gICAgaWYgKHBJREFycmF5KSB7DQotICAgICAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZygoRlhfQlNUUkMoIi9JRCIpKSkgPCAwKSB7DQotICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgfQ0KLSAgICAgICAgb2Zmc2V0ICs9IDM7DQotICAgICAgICBpZiAoUERGX0NyZWF0b3JBcHBlbmRPYmplY3QocElEQXJyYXksIHBGaWxlLCBvZmZzZXQpIDwgMCkgew0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gb2Zmc2V0Ow0KLX0NCi1GWF9JTlQzMiBQREZfQ3JlYXRvcldyaXRlRW5jcnlwdChjb25zdCBDUERGX0RpY3Rpb25hcnkqIHBFbmNyeXB0RGljdCwgRlhfRFdPUkQgZHdPYmpOdW0sIENGWF9GaWxlQnVmZmVyQXJjaGl2ZSAqcEZpbGUpDQotew0KLSAgICBpZiAoIXBFbmNyeXB0RGljdCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgRlhTWVNfYXNzZXJ0KHBGaWxlKTsNCi0gICAgRlhfRklMRVNJWkUgb2Zmc2V0ID0gMDsNCi0gICAgRlhfSU5UMzIgbGVuID0gMDsNCi0gICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIi9FbmNyeXB0IikpIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIG9mZnNldCArPSA4Ow0KLSAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiICIpKSA8IDApIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmREV29yZChkd09iak51bSkpIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIGlmIChwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgMCBSICIpKSA8IDApIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBvZmZzZXQgKz0gbGVuICsgNjsNCi0gICAgcmV0dXJuIG9mZnNldDsNCi19DQotRlhfQk9PTCBQREZfR2VuZXJhdGVGaWxlSUQoRlhfRFdPUkQgZHdTZWVkMSwgRlhfRFdPUkQgZHdTZWVkMiwgRlhfTFBEV09SRCBwQnVmZmVyKQ0KLXsNCi0gICAgaWYgKCFwQnVmZmVyKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgRlhfTFBWT0lEIHBDb250ZXh0ID0gRlhfUmFuZG9tX01UX1N0YXJ0KGR3U2VlZDEpOw0KLSAgICBGWF9JTlQzMiBpID0gMDsNCi0gICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykgew0KLSAgICAgICAgKnBCdWZmZXIrKyA9IEZYX1JhbmRvbV9NVF9HZW5lcmF0ZShwQ29udGV4dCk7DQotICAgIH0NCi0gICAgRlhfUmFuZG9tX01UX0Nsb3NlKHBDb250ZXh0KTsNCi0gICAgcENvbnRleHQgPSBGWF9SYW5kb21fTVRfU3RhcnQoZHdTZWVkMik7DQotICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsNCi0gICAgICAgICpwQnVmZmVyKysgPSBGWF9SYW5kb21fTVRfR2VuZXJhdGUocENvbnRleHQpOw0KLSAgICB9DQotICAgIEZYX1JhbmRvbV9NVF9DbG9zZShwQ29udGV4dCk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1jbGFzcyBDUERGX0ZsYXRlRW5jb2Rlcg0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfRmxhdGVFbmNvZGVyKCk7DQotICAgIH5DUERGX0ZsYXRlRW5jb2RlcigpOw0KLSAgICBGWF9CT09MCQlJbml0aWFsaXplKENQREZfU3RyZWFtKiBwU3RyZWFtLCBGWF9CT09MIGJGbGF0ZUVuY29kZSk7DQotICAgIEZYX0JPT0wJCUluaXRpYWxpemUoRlhfTFBDQllURSBwQnVmZmVyLCBGWF9EV09SRCBzaXplLCBGWF9CT09MIGJGbGF0ZUVuY29kZSwgRlhfQk9PTCBiWFJlZlN0cmVhbSA9IEZBTFNFKTsNCi0gICAgdm9pZAkJQ2xvbmVEaWN0KCk7DQotICAgIEZYX0xQQllURQkJCW1fcERhdGE7DQotICAgIEZYX0RXT1JECQkJbV9kd1NpemU7DQotICAgIENQREZfRGljdGlvbmFyeSoJbV9wRGljdDsNCi0gICAgRlhfQk9PTAkJCQltX2JDbG9uZWQ7DQotICAgIEZYX0JPT0wJCQkJbV9iTmV3RGF0YTsNCi0gICAgQ1BERl9TdHJlYW1BY2MJCW1fQWNjOw0KLX07DQotQ1BERl9GbGF0ZUVuY29kZXI6OkNQREZfRmxhdGVFbmNvZGVyKCkNCi17DQotICAgIG1fcERhdGEgPSBOVUxMOw0KLSAgICBtX2R3U2l6ZSA9IDA7DQotICAgIG1fcERpY3QgPSBOVUxMOw0KLSAgICBtX2JDbG9uZWQgPSBGQUxTRTsNCi0gICAgbV9iTmV3RGF0YSA9IEZBTFNFOw0KLX0NCi12b2lkIENQREZfRmxhdGVFbmNvZGVyOjpDbG9uZURpY3QoKQ0KLXsNCi0gICAgaWYgKCFtX2JDbG9uZWQpIHsNCi0gICAgICAgIG1fcERpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KiltX3BEaWN0LT5DbG9uZSgpOw0KLSAgICAgICAgbV9iQ2xvbmVkID0gVFJVRTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENQREZfRmxhdGVFbmNvZGVyOjpJbml0aWFsaXplKENQREZfU3RyZWFtKiBwU3RyZWFtLCBGWF9CT09MIGJGbGF0ZUVuY29kZSkNCi17DQotICAgIG1fQWNjLkxvYWRBbGxEYXRhKHBTdHJlYW0sIFRSVUUpOw0KLSAgICBpZiAocFN0cmVhbS0+R2V0RGljdCgpLT5LZXlFeGlzdCgiRmlsdGVyIikgfHwgIWJGbGF0ZUVuY29kZSkgew0KLSAgICAgICAgaWYgKHBTdHJlYW0tPkdldERpY3QoKS0+S2V5RXhpc3QoIkZpbHRlciIpICYmICFiRmxhdGVFbmNvZGUpIHsNCi0gICAgICAgICAgICBDUERGX1N0cmVhbUFjYyBkZXN0QWNjOw0KLSAgICAgICAgICAgIGRlc3RBY2MuTG9hZEFsbERhdGEocFN0cmVhbSk7DQotICAgICAgICAgICAgbV9kd1NpemUgPSBkZXN0QWNjLkdldFNpemUoKTsNCi0gICAgICAgICAgICBtX3BEYXRhID0gKEZYX0xQQllURSlkZXN0QWNjLkRldGFjaERhdGEoKTsNCi0gICAgICAgICAgICBtX3BEaWN0ID0gKENQREZfRGljdGlvbmFyeSopcFN0cmVhbS0+R2V0RGljdCgpLT5DbG9uZSgpOw0KLSAgICAgICAgICAgIG1fcERpY3QtPlJlbW92ZUF0KEZYX0JTVFJDKCJGaWx0ZXIiKSk7DQotICAgICAgICAgICAgbV9iTmV3RGF0YSA9IFRSVUU7DQotICAgICAgICAgICAgbV9iQ2xvbmVkID0gVFJVRTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbV9wRGF0YSA9IChGWF9MUEJZVEUpbV9BY2MuR2V0RGF0YSgpOw0KLSAgICAgICAgICAgIG1fZHdTaXplID0gbV9BY2MuR2V0U2l6ZSgpOw0KLSAgICAgICAgICAgIG1fcERpY3QgPSBwU3RyZWFtLT5HZXREaWN0KCk7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBtX3BEYXRhID0gTlVMTDsNCi0gICAgbV9kd1NpemUgPSAwOw0KLSAgICBtX2JOZXdEYXRhID0gVFJVRTsNCi0gICAgbV9iQ2xvbmVkID0gVFJVRTsNCi0gICAgOjpGbGF0ZUVuY29kZShtX0FjYy5HZXREYXRhKCksIG1fQWNjLkdldFNpemUoKSwgbV9wRGF0YSwgbV9kd1NpemUpOw0KLSAgICBtX3BEaWN0ID0gKENQREZfRGljdGlvbmFyeSopcFN0cmVhbS0+R2V0RGljdCgpLT5DbG9uZSgpOw0KLSAgICBtX3BEaWN0LT5TZXRBdEludGVnZXIoIkxlbmd0aCIsIG1fZHdTaXplKTsNCi0gICAgbV9wRGljdC0+U2V0QXROYW1lKCJGaWx0ZXIiLCAiRmxhdGVEZWNvZGUiKTsNCi0gICAgbV9wRGljdC0+UmVtb3ZlQXQoIkRlY29kZVBhcm1zIik7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENQREZfRmxhdGVFbmNvZGVyOjpJbml0aWFsaXplKEZYX0xQQ0JZVEUgcEJ1ZmZlciwgRlhfRFdPUkQgc2l6ZSwgRlhfQk9PTCBiRmxhdGVFbmNvZGUsIEZYX0JPT0wgYlhSZWZTdHJlYW0pDQotew0KLSAgICBpZiAoIWJGbGF0ZUVuY29kZSkgew0KLSAgICAgICAgbV9wRGF0YSA9IChGWF9MUEJZVEUpcEJ1ZmZlcjsNCi0gICAgICAgIG1fZHdTaXplID0gc2l6ZTsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIG1fYk5ld0RhdGEgPSBUUlVFOw0KLSAgICBpZiAoYlhSZWZTdHJlYW0pIHsNCi0gICAgICAgIDo6RmxhdGVFbmNvZGUocEJ1ZmZlciwgc2l6ZSwgMTIsIDEsIDgsIDcsIG1fcERhdGEsIG1fZHdTaXplKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIDo6RmxhdGVFbmNvZGUocEJ1ZmZlciwgc2l6ZSwgbV9wRGF0YSwgbV9kd1NpemUpOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1DUERGX0ZsYXRlRW5jb2Rlcjo6fkNQREZfRmxhdGVFbmNvZGVyKCkNCi17DQotICAgIGlmIChtX2JDbG9uZWQgJiYgbV9wRGljdCkgew0KLSAgICAgICAgbV9wRGljdC0+UmVsZWFzZSgpOw0KLSAgICB9DQotICAgIGlmIChtX2JOZXdEYXRhICYmIG1fcERhdGEpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wRGF0YSk7DQotICAgIH0NCi19DQotY2xhc3MgQ1BERl9FbmNyeXB0b3INCi17DQotcHVibGljOg0KLSAgICBDUERGX0VuY3J5cHRvcigpOw0KLSAgICB+Q1BERl9FbmNyeXB0b3IoKTsNCi0gICAgRlhfQk9PTAkJSW5pdGlhbGl6ZShDUERGX0NyeXB0b0hhbmRsZXIqIHBIYW5kbGVyLCBpbnQgb2JqbnVtLCBGWF9MUEJZVEUgc3JjX2RhdGEsIEZYX0RXT1JEIHNyY19zaXplKTsNCi0gICAgRlhfTFBCWVRFCQkJbV9wRGF0YTsNCi0gICAgRlhfRFdPUkQJCQltX2R3U2l6ZTsNCi0gICAgRlhfQk9PTAkJCQltX2JOZXdCdWY7DQotfTsNCi1DUERGX0VuY3J5cHRvcjo6Q1BERl9FbmNyeXB0b3IoKQ0KLXsNCi0gICAgbV9wRGF0YSA9IE5VTEw7DQotICAgIG1fZHdTaXplID0gMDsNCi0gICAgbV9iTmV3QnVmID0gRkFMU0U7DQotfQ0KLUZYX0JPT0wgQ1BERl9FbmNyeXB0b3I6OkluaXRpYWxpemUoQ1BERl9DcnlwdG9IYW5kbGVyKiBwSGFuZGxlciwgaW50IG9iam51bSwgRlhfTFBCWVRFIHNyY19kYXRhLCBGWF9EV09SRCBzcmNfc2l6ZSkNCi17DQotICAgIGlmIChzcmNfc2l6ZSA9PSAwKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBpZiAocEhhbmRsZXIgPT0gTlVMTCkgew0KLSAgICAgICAgbV9wRGF0YSA9IChGWF9MUEJZVEUpc3JjX2RhdGE7DQotICAgICAgICBtX2R3U2l6ZSA9IHNyY19zaXplOw0KLSAgICAgICAgbV9iTmV3QnVmID0gRkFMU0U7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBtX2R3U2l6ZSA9IHBIYW5kbGVyLT5FbmNyeXB0R2V0U2l6ZShvYmpudW0sIDAsIHNyY19kYXRhLCBzcmNfc2l6ZSk7DQotICAgIG1fcERhdGEgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX2R3U2l6ZSk7DQotICAgIGlmKCFtX3BEYXRhKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgcEhhbmRsZXItPkVuY3J5cHRDb250ZW50KG9iam51bSwgMCwgc3JjX2RhdGEsIHNyY19zaXplLCBtX3BEYXRhLCBtX2R3U2l6ZSk7DQotICAgIG1fYk5ld0J1ZiA9IFRSVUU7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1DUERGX0VuY3J5cHRvcjo6fkNQREZfRW5jcnlwdG9yKCkNCi17DQotICAgIGlmIChtX2JOZXdCdWYpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wRGF0YSk7DQotICAgIH0NCi19DQotQ1BERl9PYmplY3RTdHJlYW06OkNQREZfT2JqZWN0U3RyZWFtKCkNCi0gICAgOiBtX2R3T2JqTnVtKDApDQotICAgICwgbV9pbmRleCgwKQ0KLXsNCi19DQotRlhfQk9PTCBDUERGX09iamVjdFN0cmVhbTo6U3RhcnQoKQ0KLXsNCi0gICAgbV9PYmpOdW1BcnJheS5SZW1vdmVBbGwoKTsNCi0gICAgbV9PZmZzZXRBcnJheS5SZW1vdmVBbGwoKTsNCi0gICAgbV9CdWZmZXIuQ2xlYXIoKTsNCi0gICAgbV9kd09iak51bSA9IDA7DQotICAgIG1faW5kZXggPSAwOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfSU5UMzIgQ1BERl9PYmplY3RTdHJlYW06OkNvbXByZXNzSW5kaXJlY3RPYmplY3QoRlhfRFdPUkQgZHdPYmpOdW0sIGNvbnN0IENQREZfT2JqZWN0ICpwT2JqKQ0KLXsNCi0gICAgbV9PYmpOdW1BcnJheS5BZGQoZHdPYmpOdW0pOw0KLSAgICBtX09mZnNldEFycmF5LkFkZChtX0J1ZmZlci5HZXRMZW5ndGgoKSk7DQotICAgIG1fQnVmZmVyIDw8IHBPYmo7DQotICAgIHJldHVybiAxOw0KLX0NCi1GWF9JTlQzMiBDUERGX09iamVjdFN0cmVhbTo6Q29tcHJlc3NJbmRpcmVjdE9iamVjdChGWF9EV09SRCBkd09iak51bSwgRlhfTFBDQllURSBwQnVmZmVyLCBGWF9EV09SRCBkd1NpemUpDQotew0KLSAgICBtX09iak51bUFycmF5LkFkZChkd09iak51bSk7DQotICAgIG1fT2Zmc2V0QXJyYXkuQWRkKG1fQnVmZmVyLkdldExlbmd0aCgpKTsNCi0gICAgbV9CdWZmZXIuQXBwZW5kQmxvY2socEJ1ZmZlciwgZHdTaXplKTsNCi0gICAgcmV0dXJuIDE7DQotfQ0KLUZYX0ZJTEVTSVpFIENQREZfT2JqZWN0U3RyZWFtOjpFbmQoQ1BERl9DcmVhdG9yKiBwQ3JlYXRvcikNCi17DQotICAgIEZYU1lTX2Fzc2VydChwQ3JlYXRvcik7DQotICAgIGlmIChtX09iak51bUFycmF5LkdldFNpemUoKSA9PSAwKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBDRlhfRmlsZUJ1ZmZlckFyY2hpdmUgKnBGaWxlID0gJnBDcmVhdG9yLT5tX0ZpbGU7DQotICAgIENQREZfQ3J5cHRvSGFuZGxlciAqcEhhbmRsZXIgPSBwQ3JlYXRvci0+bV9wQ3J5cHRvSGFuZGxlcjsNCi0gICAgRlhfRklMRVNJWkUgT2JqT2Zmc2V0ID0gcENyZWF0b3ItPm1fT2Zmc2V0Ow0KLSAgICBpZiAoIW1fZHdPYmpOdW0pIHsNCi0gICAgICAgIG1fZHdPYmpOdW0gPSArK3BDcmVhdG9yLT5tX2R3TGFzdE9iak51bTsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVRleHRCdWYgdGVtcEJ1ZmZlcjsNCi0gICAgRlhfSU5UMzIgaUNvdW50ID0gbV9PYmpOdW1BcnJheS5HZXRTaXplKCk7DQotICAgIGZvciAoRlhfSU5UMzIgaSA9IDA7IGkgPCBpQ291bnQ7IGkrKykgew0KLSAgICAgICAgdGVtcEJ1ZmZlciA8PCBtX09iak51bUFycmF5LkVsZW1lbnRBdChpKSA8PCBGWF9CU1RSQygiICIpIDw8IG1fT2Zmc2V0QXJyYXkuRWxlbWVudEF0KGkpIDw8IEZYX0JTVFJDKCIgIik7DQotICAgIH0NCi0gICAgRlhfRklMRVNJWkUgJm9mZnNldCA9IHBDcmVhdG9yLT5tX09mZnNldDsNCi0gICAgRlhfSU5UMzIgbGVuID0gcEZpbGUtPkFwcGVuZERXb3JkKG1fZHdPYmpOdW0pOw0KLSAgICBpZiAobGVuIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIG9mZnNldCArPSBsZW47DQotICAgIGlmICgobGVuID0gcEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiIDAgb2JqXHJcbjw8L1R5cGUgL09ialN0bSAvTiAiKSkpIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIG9mZnNldCArPSBsZW47DQotICAgIGlmICgobGVuID0gcEZpbGUtPkFwcGVuZERXb3JkKChGWF9EV09SRClpQ291bnQpKSA8IDApIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBvZmZzZXQgKz0gbGVuOw0KLSAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiL0ZpcnN0ICIpKSA8IDApIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmREV29yZCgoRlhfRFdPUkQpdGVtcEJ1ZmZlci5HZXRMZW5ndGgoKSkpIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIGlmIChwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIvTGVuZ3RoICIpKSA8IDApIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBvZmZzZXQgKz0gbGVuICsgMTU7DQotICAgIGlmICghcENyZWF0b3ItPm1fYkNvbXByZXNzICYmICFwSGFuZGxlcikgew0KLSAgICAgICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kRFdvcmQoKEZYX0RXT1JEKSh0ZW1wQnVmZmVyLkdldExlbmd0aCgpICsgbV9CdWZmZXIuR2V0TGVuZ3RoKCkpKSkgPCAwKSB7DQotICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgfQ0KLSAgICAgICAgb2Zmc2V0ICs9IGxlbjsNCi0gICAgICAgIGlmICgobGVuID0gcEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiPj5zdHJlYW1cclxuIikpKSA8IDApIHsNCi0gICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICB9DQotICAgICAgICBpZiAocEZpbGUtPkFwcGVuZEJsb2NrKHRlbXBCdWZmZXIuR2V0QnVmZmVyKCksIHRlbXBCdWZmZXIuR2V0TGVuZ3RoKCkpIDwgMCkgew0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwRmlsZS0+QXBwZW5kQmxvY2sobV9CdWZmZXIuR2V0QnVmZmVyKCksIG1fQnVmZmVyLkdldExlbmd0aCgpKSA8IDApIHsNCi0gICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICB9DQotICAgICAgICBvZmZzZXQgKz0gbGVuICsgdGVtcEJ1ZmZlci5HZXRMZW5ndGgoKSArIG1fQnVmZmVyLkdldExlbmd0aCgpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgdGVtcEJ1ZmZlciA8PCBtX0J1ZmZlcjsNCi0gICAgICAgIENQREZfRmxhdGVFbmNvZGVyIGVuY29kZXI7DQotICAgICAgICBlbmNvZGVyLkluaXRpYWxpemUodGVtcEJ1ZmZlci5HZXRCdWZmZXIoKSwgdGVtcEJ1ZmZlci5HZXRMZW5ndGgoKSwgcENyZWF0b3ItPm1fYkNvbXByZXNzKTsNCi0gICAgICAgIENQREZfRW5jcnlwdG9yIGVuY3J5cHRvcjsNCi0gICAgICAgIGVuY3J5cHRvci5Jbml0aWFsaXplKHBIYW5kbGVyLCBtX2R3T2JqTnVtLCBlbmNvZGVyLm1fcERhdGEsIGVuY29kZXIubV9kd1NpemUpOw0KLSAgICAgICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kRFdvcmQoZW5jcnlwdG9yLm1fZHdTaXplKSkgPCAwKSB7DQotICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgfQ0KLSAgICAgICAgb2Zmc2V0ICs9IGxlbjsNCi0gICAgICAgIGlmIChwQ3JlYXRvci0+bV9iQ29tcHJlc3MpIHsNCi0gICAgICAgICAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiL0ZpbHRlciAvRmxhdGVEZWNvZGUiKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgb2Zmc2V0ICs9IDIwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCI+PnN0cmVhbVxyXG4iKSkpIDwgMCkgew0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwRmlsZS0+QXBwZW5kQmxvY2soZW5jcnlwdG9yLm1fcERhdGEsIGVuY3J5cHRvci5tX2R3U2l6ZSkgPCAwKSB7DQotICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgfQ0KLSAgICAgICAgb2Zmc2V0ICs9IGxlbiArIGVuY3J5cHRvci5tX2R3U2l6ZTsNCi0gICAgfQ0KLSAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIlxyXG5lbmRzdHJlYW1cclxuZW5kb2JqXHJcbiIpKSkgPCAwKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgb2Zmc2V0ICs9IGxlbjsNCi0gICAgcmV0dXJuIE9iak9mZnNldDsNCi19DQotQ1BERl9YUmVmU3RyZWFtOjpDUERGX1hSZWZTdHJlYW0oKQ0KLSAgICA6IG1fUHJldk9mZnNldCgwKQ0KLSAgICAsIG1faVNlZygwKQ0KLSAgICAsIG1fZHdUZW1wT2JqTnVtKDApDQotew0KLX0NCi1GWF9CT09MIENQREZfWFJlZlN0cmVhbTo6U3RhcnQoKQ0KLXsNCi0gICAgbV9JbmRleEFycmF5LlJlbW92ZUFsbCgpOw0KLSAgICBtX0J1ZmZlci5DbGVhcigpOw0KLSAgICBtX2lTZWcgPSAwOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfSU5UMzIgQ1BERl9YUmVmU3RyZWFtOjpDb21wcmVzc0luZGlyZWN0T2JqZWN0KEZYX0RXT1JEIGR3T2JqTnVtLCBjb25zdCBDUERGX09iamVjdCAqcE9iaiwgQ1BERl9DcmVhdG9yICpwQ3JlYXRvcikNCi17DQotICAgIGlmICghcENyZWF0b3IpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIG1fT2JqU3RyZWFtLkNvbXByZXNzSW5kaXJlY3RPYmplY3QoZHdPYmpOdW0sIHBPYmopOw0KLSAgICBpZiAobV9PYmpTdHJlYW0ubV9PYmpOdW1BcnJheS5HZXRTaXplKCkgPCBwQ3JlYXRvci0+bV9PYmplY3RTdHJlYW1TaXplICYmDQotICAgICAgICAgICAgbV9PYmpTdHJlYW0ubV9CdWZmZXIuR2V0TGVuZ3RoKCkgPCBQREZfT0JKRUNUU1RSRUFNX01BWExFTkdUSCkgew0KLSAgICAgICAgcmV0dXJuIDE7DQotICAgIH0NCi0gICAgcmV0dXJuIEVuZE9iamVjdFN0cmVhbShwQ3JlYXRvcik7DQotfQ0KLUZYX0lOVDMyIENQREZfWFJlZlN0cmVhbTo6Q29tcHJlc3NJbmRpcmVjdE9iamVjdChGWF9EV09SRCBkd09iak51bSwgRlhfTFBDQllURSBwQnVmZmVyLCBGWF9EV09SRCBkd1NpemUsIENQREZfQ3JlYXRvciAqcENyZWF0b3IpDQotew0KLSAgICBpZiAoIXBDcmVhdG9yKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBtX09ialN0cmVhbS5Db21wcmVzc0luZGlyZWN0T2JqZWN0KGR3T2JqTnVtLCBwQnVmZmVyLCBkd1NpemUpOw0KLSAgICBpZiAobV9PYmpTdHJlYW0ubV9PYmpOdW1BcnJheS5HZXRTaXplKCkgPCBwQ3JlYXRvci0+bV9PYmplY3RTdHJlYW1TaXplICYmDQotICAgICAgICAgICAgbV9PYmpTdHJlYW0ubV9CdWZmZXIuR2V0TGVuZ3RoKCkgPCBQREZfT0JKRUNUU1RSRUFNX01BWExFTkdUSCkgew0KLSAgICAgICAgcmV0dXJuIDE7DQotICAgIH0NCi0gICAgcmV0dXJuIEVuZE9iamVjdFN0cmVhbShwQ3JlYXRvcik7DQotfQ0KLXN0YXRpYyB2b2lkIF9BcHBlbmRJbmRleDAoQ0ZYX0J5dGVUZXh0QnVmJiBidWZmZXIsIEZYX0JPT0wgYkZpcnN0T2JqZWN0ID0gIFRSVUUpDQotew0KLSAgICBidWZmZXIuQXBwZW5kQnl0ZSgwKTsNCi0gICAgYnVmZmVyLkFwcGVuZEJ5dGUoMCk7DQotICAgIGJ1ZmZlci5BcHBlbmRCeXRlKDApOw0KLSAgICBidWZmZXIuQXBwZW5kQnl0ZSgwKTsNCi0gICAgYnVmZmVyLkFwcGVuZEJ5dGUoMCk7DQotICAgIGlmIChiRmlyc3RPYmplY3QpIHsNCi0gICAgICAgIGJ1ZmZlci5BcHBlbmRCeXRlKDB4RkYpOw0KLSAgICAgICAgYnVmZmVyLkFwcGVuZEJ5dGUoMHhGRik7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBidWZmZXIuQXBwZW5kQnl0ZSgwKTsNCi0gICAgICAgIGJ1ZmZlci5BcHBlbmRCeXRlKDApOw0KLSAgICB9DQotfQ0KLXN0YXRpYyB2b2lkIF9BcHBlbmRJbmRleDEoQ0ZYX0J5dGVUZXh0QnVmJiBidWZmZXIsIEZYX0ZJTEVTSVpFIG9mZnNldCkNCi17DQotICAgIGJ1ZmZlci5BcHBlbmRCeXRlKDEpOw0KLSAgICBidWZmZXIuQXBwZW5kQnl0ZShGWF9HRVRCWVRFT0ZGU0VUMjQob2Zmc2V0KSk7DQotICAgIGJ1ZmZlci5BcHBlbmRCeXRlKEZYX0dFVEJZVEVPRkZTRVQxNihvZmZzZXQpKTsNCi0gICAgYnVmZmVyLkFwcGVuZEJ5dGUoRlhfR0VUQllURU9GRlNFVDgob2Zmc2V0KSk7DQotICAgIGJ1ZmZlci5BcHBlbmRCeXRlKEZYX0dFVEJZVEVPRkZTRVQwKG9mZnNldCkpOw0KLSAgICBidWZmZXIuQXBwZW5kQnl0ZSgwKTsNCi0gICAgYnVmZmVyLkFwcGVuZEJ5dGUoMCk7DQotfQ0KLXN0YXRpYyB2b2lkIF9BcHBlbmRJbmRleDIoQ0ZYX0J5dGVUZXh0QnVmJiBidWZmZXIsIEZYX0RXT1JEIG9iam51bSwgRlhfSU5UMzIgaW5kZXgpDQotew0KLSAgICBidWZmZXIuQXBwZW5kQnl0ZSgyKTsNCi0gICAgYnVmZmVyLkFwcGVuZEJ5dGUoRlhfR0VUQllURU9GRlNFVDI0KG9iam51bSkpOw0KLSAgICBidWZmZXIuQXBwZW5kQnl0ZShGWF9HRVRCWVRFT0ZGU0VUMTYob2JqbnVtKSk7DQotICAgIGJ1ZmZlci5BcHBlbmRCeXRlKEZYX0dFVEJZVEVPRkZTRVQ4KG9iam51bSkpOw0KLSAgICBidWZmZXIuQXBwZW5kQnl0ZShGWF9HRVRCWVRFT0ZGU0VUMChvYmpudW0pKTsNCi0gICAgYnVmZmVyLkFwcGVuZEJ5dGUoRlhfR0VUQllURU9GRlNFVDgoaW5kZXgpKTsNCi0gICAgYnVmZmVyLkFwcGVuZEJ5dGUoRlhfR0VUQllURU9GRlNFVDAoaW5kZXgpKTsNCi19DQotRlhfSU5UMzIgQ1BERl9YUmVmU3RyZWFtOjpFbmRPYmplY3RTdHJlYW0oQ1BERl9DcmVhdG9yICpwQ3JlYXRvciwgRlhfQk9PTCBiRU9GKQ0KLXsNCi0gICAgRlhfRklMRVNJWkUgb2JqT2Zmc2V0ID0gMDsNCi0gICAgaWYgKGJFT0YpIHsNCi0gICAgICAgIG9iak9mZnNldCA9IG1fT2JqU3RyZWFtLkVuZChwQ3JlYXRvcik7DQotICAgICAgICBpZiAob2JqT2Zmc2V0IDwgMCkgew0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBGWF9EV09SRCAmZHdPYmpTdG1OdW0gPSBtX09ialN0cmVhbS5tX2R3T2JqTnVtOw0KLSAgICBpZiAoIWR3T2JqU3RtTnVtKSB7DQotICAgICAgICBkd09ialN0bU51bSA9ICsrcENyZWF0b3ItPm1fZHdMYXN0T2JqTnVtOw0KLSAgICB9DQotICAgIEZYX0lOVDMyIGlTaXplID0gbV9PYmpTdHJlYW0ubV9PYmpOdW1BcnJheS5HZXRTaXplKCk7DQotICAgIEZYX0lOVDMyIGlTZWcgPSBtX0luZGV4QXJyYXkuR2V0U2l6ZSgpIC8gMjsNCi0gICAgaWYgKCEocENyZWF0b3ItPm1fZHdGbGFncyAmIEZQREZDUkVBVEVfSU5DUkVNRU5UQUwpKSB7DQotICAgICAgICBpZiAobV9kd1RlbXBPYmpOdW0gPT0gMCkgew0KLSAgICAgICAgICAgIF9BcHBlbmRJbmRleDAobV9CdWZmZXIpOw0KLSAgICAgICAgICAgIG1fZHdUZW1wT2JqTnVtKys7DQotICAgICAgICB9DQotICAgICAgICBGWF9EV09SRCBlbmRfbnVtID0gbV9JbmRleEFycmF5LkdldEF0KChpU2VnIC0gMSkgKiAyKSArIG1fSW5kZXhBcnJheS5HZXRBdCgoaVNlZyAtIDEpICogMiArIDEpOw0KLSAgICAgICAgaW50IGluZGV4ID0gMDsNCi0gICAgICAgIGZvciAoOyBtX2R3VGVtcE9iak51bSA8IGVuZF9udW07IG1fZHdUZW1wT2JqTnVtKyspIHsNCi0gICAgICAgICAgICBGWF9GSUxFU0laRSogb2Zmc2V0ID0gcENyZWF0b3ItPm1fT2JqZWN0T2Zmc2V0LkdldFB0ckF0KG1fZHdUZW1wT2JqTnVtKTsNCi0gICAgICAgICAgICBpZiAob2Zmc2V0KSB7DQotICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBpU2l6ZSB8fCBtX2R3VGVtcE9iak51bSAhPSBtX09ialN0cmVhbS5tX09iak51bUFycmF5W2luZGV4XSkgew0KLSAgICAgICAgICAgICAgICAgICAgX0FwcGVuZEluZGV4MShtX0J1ZmZlciwgKm9mZnNldCk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBfQXBwZW5kSW5kZXgyKG1fQnVmZmVyLCBkd09ialN0bU51bSwgaW5kZXgrKyk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBfQXBwZW5kSW5kZXgwKG1fQnVmZmVyLCBGQUxTRSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGlTaXplID4gMCAmJiBiRU9GKSB7DQotICAgICAgICAgICAgcENyZWF0b3ItPm1fT2JqZWN0T2Zmc2V0LkFkZChkd09ialN0bU51bSwgMSk7DQotICAgICAgICAgICAgcENyZWF0b3ItPm1fT2JqZWN0U2l6ZS5BZGQoZHdPYmpTdG1OdW0sIDEpOw0KLSAgICAgICAgICAgIHBDcmVhdG9yLT5tX09iamVjdE9mZnNldFtkd09ialN0bU51bV0gPSBvYmpPZmZzZXQ7DQotICAgICAgICB9DQotICAgICAgICBtX2lTZWcgPSBpU2VnOw0KLSAgICAgICAgaWYgKGJFT0YpIHsNCi0gICAgICAgICAgICBtX09ialN0cmVhbS5TdGFydCgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIDE7DQotICAgIH0NCi0gICAgRlhfSU5UMzIgJmogPSBtX09ialN0cmVhbS5tX2luZGV4Ow0KLSAgICBmb3IgKGludCBpID0gbV9pU2VnOyBpIDwgaVNlZzsgaSsrKSB7DQotICAgICAgICBGWF9EV09SRCBzdGFydCA9IG1fSW5kZXhBcnJheS5FbGVtZW50QXQoaSAqIDIpOw0KLSAgICAgICAgRlhfRFdPUkQgZW5kID0gbV9JbmRleEFycmF5LkVsZW1lbnRBdChpICogMiArIDEpICsgc3RhcnQ7DQotICAgICAgICBmb3IgKEZYX0RXT1JEIG0gPSBzdGFydDsgbSA8IGVuZDsgbSsrKSB7DQotICAgICAgICAgICAgaWYgKGogPj0gaVNpemUgfHwgbSAhPSBtX09ialN0cmVhbS5tX09iak51bUFycmF5LkVsZW1lbnRBdChqKSkgew0KLSAgICAgICAgICAgICAgICBfQXBwZW5kSW5kZXgxKG1fQnVmZmVyLCBwQ3JlYXRvci0+bV9PYmplY3RPZmZzZXRbbV0pOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIF9BcHBlbmRJbmRleDIobV9CdWZmZXIsIGR3T2JqU3RtTnVtLCBqKyspOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoaVNpemUgPiAwICYmIGJFT0YpIHsNCi0gICAgICAgIF9BcHBlbmRJbmRleDEobV9CdWZmZXIsIG9iak9mZnNldCk7DQotICAgICAgICBtX0luZGV4QXJyYXkuQWRkKGR3T2JqU3RtTnVtKTsNCi0gICAgICAgIG1fSW5kZXhBcnJheS5BZGQoMSk7DQotICAgICAgICBpU2VnICs9IDE7DQotICAgIH0NCi0gICAgbV9pU2VnID0gaVNlZzsNCi0gICAgaWYgKGJFT0YpIHsNCi0gICAgICAgIG1fT2JqU3RyZWFtLlN0YXJ0KCk7DQotICAgIH0NCi0gICAgcmV0dXJuIDE7DQotfQ0KLUZYX0JPT0wgQ1BERl9YUmVmU3RyZWFtOjpHZW5lcmF0ZVhSZWZTdHJlYW0oQ1BERl9DcmVhdG9yKiBwQ3JlYXRvciwgRlhfQk9PTCBiRU9GKQ0KLXsNCi0gICAgRlhfRklMRVNJWkUgb2Zmc2V0X3RtcCA9IHBDcmVhdG9yLT5tX09mZnNldDsNCi0gICAgRlhfRFdPUkQgb2JqbnVtID0gKytwQ3JlYXRvci0+bV9kd0xhc3RPYmpOdW07DQotICAgIENGWF9GaWxlQnVmZmVyQXJjaGl2ZSAqcEZpbGUgPSAmcENyZWF0b3ItPm1fRmlsZTsNCi0gICAgRlhfQk9PTCBiSW5jcmVtZW50YWwgPSAocENyZWF0b3ItPm1fZHdGbGFncyAmIEZQREZDUkVBVEVfSU5DUkVNRU5UQUwpICE9IDA7DQotICAgIGlmIChiSW5jcmVtZW50YWwpIHsNCi0gICAgICAgIEFkZE9iamVjdE51bWJlclRvSW5kZXhBcnJheShvYmpudW0pOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZm9yICg7IG1fZHdUZW1wT2JqTnVtIDwgcENyZWF0b3ItPm1fZHdMYXN0T2JqTnVtOyBtX2R3VGVtcE9iak51bSsrKSB7DQotICAgICAgICAgICAgRlhfRklMRVNJWkUqIG9mZnNldCA9IHBDcmVhdG9yLT5tX09iamVjdE9mZnNldC5HZXRQdHJBdChtX2R3VGVtcE9iak51bSk7DQotICAgICAgICAgICAgaWYgKG9mZnNldCkgew0KLSAgICAgICAgICAgICAgICBfQXBwZW5kSW5kZXgxKG1fQnVmZmVyLCAqb2Zmc2V0KTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBfQXBwZW5kSW5kZXgwKG1fQnVmZmVyLCBGQUxTRSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIF9BcHBlbmRJbmRleDEobV9CdWZmZXIsIG9mZnNldF90bXApOw0KLSAgICBGWF9GSUxFU0laRSAmb2Zmc2V0ID0gcENyZWF0b3ItPm1fT2Zmc2V0Ow0KLSAgICBGWF9JTlQzMiBsZW4gPSBwRmlsZS0+QXBwZW5kRFdvcmQob2JqbnVtKTsNCi0gICAgaWYgKGxlbiA8IDApIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBvZmZzZXQgKz0gbGVuOw0KLSAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAwIG9ialxyXG48PC9UeXBlIC9YUmVmL1dbMSA0IDJdL0luZGV4WyIpKSkgPCAwKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgb2Zmc2V0ICs9IGxlbjsNCi0gICAgaWYgKCFiSW5jcmVtZW50YWwpIHsNCi0gICAgICAgIGlmICgobGVuID0gcEZpbGUtPkFwcGVuZERXb3JkKDApKSA8IDApIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAiKSkpIDwgMCkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIG9mZnNldCArPSBsZW4gKyAxOw0KLSAgICAgICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kRFdvcmQob2JqbnVtICsgMSkpIDwgMCkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIG9mZnNldCArPSBsZW47DQotICAgIH0gZWxzZSB7DQotICAgICAgICBGWF9JTlQzMiBpU2VnID0gbV9JbmRleEFycmF5LkdldFNpemUoKSAvIDI7DQotICAgICAgICBmb3IgKEZYX0lOVDMyIGkgPSAwOyBpIDwgaVNlZzsgaSsrKSB7DQotICAgICAgICAgICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kRFdvcmQobV9JbmRleEFycmF5LkVsZW1lbnRBdChpICogMikpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiICIpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBvZmZzZXQgKz0gbGVuICsgMTsNCi0gICAgICAgICAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmREV29yZChtX0luZGV4QXJyYXkuRWxlbWVudEF0KGkgKiAyICsgMSkpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiICIpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBvZmZzZXQgKz0gbGVuICsgMTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiXS9TaXplICIpKSA8IDApIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmREV29yZChvYmpudW0gKyAxKSkgPCAwKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgb2Zmc2V0ICs9IGxlbiArIDc7DQotICAgIGlmIChtX1ByZXZPZmZzZXQgPiAwKSB7DQotICAgICAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiL1ByZXYgIikpIDwgMCkgew0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0NIQVIgb2Zmc2V0X2J1ZlsyMF07DQotICAgICAgICBGWFNZU19tZW1zZXQzMihvZmZzZXRfYnVmLCAwLCBzaXplb2Yob2Zmc2V0X2J1ZikpOw0KLSAgICAgICAgRlhTWVNfaTY0dG9hKG1fUHJldk9mZnNldCwgb2Zmc2V0X2J1ZiwgMTApOw0KLSAgICAgICAgRlhfSU5UMzIgbGVuID0gKEZYX0lOVDMyKUZYU1lTX3N0cmxlbihvZmZzZXRfYnVmKTsNCi0gICAgICAgIGlmIChwRmlsZS0+QXBwZW5kQmxvY2sob2Zmc2V0X2J1ZiwgbGVuKSA8IDApIHsNCi0gICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICB9DQotICAgICAgICBvZmZzZXQgKz0gbGVuICsgNjsNCi0gICAgfQ0KLSAgICBGWF9CT09MIGJQcmVkaWN0b3IgPSBUUlVFOw0KLSAgICBDUERGX0ZsYXRlRW5jb2RlciBlbmNvZGVyOw0KLSAgICBlbmNvZGVyLkluaXRpYWxpemUobV9CdWZmZXIuR2V0QnVmZmVyKCksIG1fQnVmZmVyLkdldExlbmd0aCgpLCBwQ3JlYXRvci0+bV9iQ29tcHJlc3MsIGJQcmVkaWN0b3IpOw0KLSAgICBpZiAocENyZWF0b3ItPm1fYkNvbXByZXNzKSB7DQotICAgICAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiL0ZpbHRlciAvRmxhdGVEZWNvZGUiKSkgPCAwKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgb2Zmc2V0ICs9IDIwOw0KLSAgICAgICAgaWYgKGJQcmVkaWN0b3IpIHsNCi0gICAgICAgICAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIi9EZWNvZGVQYXJtczw8L0NvbHVtbnMgNy9QcmVkaWN0b3IgMTI+PiIpKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgb2Zmc2V0ICs9IGxlbjsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiL0xlbmd0aCAiKSkgPCAwKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kRFdvcmQoZW5jb2Rlci5tX2R3U2l6ZSkpIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG9mZnNldCArPSBsZW4gKyA4Ow0KLSAgICBpZiAoYkVPRikgew0KLSAgICAgICAgaWYgKChsZW4gPSBQREZfQ3JlYXRvcldyaXRlVHJhaWxlcihwQ3JlYXRvci0+bV9wRG9jdW1lbnQsIHBGaWxlLCBwQ3JlYXRvci0+bV9wSURBcnJheSwgcENyZWF0b3ItPm1fYkNvbXByZXNzKSkgPCAwKSB7DQotICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgfQ0KLSAgICAgICAgb2Zmc2V0ICs9IGxlbjsNCi0gICAgICAgIGlmIChwQ3JlYXRvci0+bV9wRW5jcnlwdERpY3QpIHsNCi0gICAgICAgICAgICBGWF9EV09SRCBkd0VuY3J5cHRPYmpOdW0gPSBwQ3JlYXRvci0+bV9wRW5jcnlwdERpY3QtPkdldE9iak51bSgpOw0KLSAgICAgICAgICAgIGlmIChkd0VuY3J5cHRPYmpOdW0gPT0gMCkgew0KLSAgICAgICAgICAgICAgICBkd0VuY3J5cHRPYmpOdW0gPSBwQ3JlYXRvci0+bV9kd0VucnlwdE9iak51bTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKChsZW4gPSBQREZfQ3JlYXRvcldyaXRlRW5jcnlwdChwQ3JlYXRvci0+bV9wRW5jcnlwdERpY3QsIGR3RW5jcnlwdE9iak51bSwgcEZpbGUpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBvZmZzZXQgKz0gbGVuOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmICgobGVuID0gcEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiPj5zdHJlYW1cclxuIikpKSA8IDApIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBvZmZzZXQgKz0gbGVuOw0KLSAgICBpZiAocEZpbGUtPkFwcGVuZEJsb2NrKGVuY29kZXIubV9wRGF0YSwgZW5jb2Rlci5tX2R3U2l6ZSkgPCAwKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCJcclxuZW5kc3RyZWFtXHJcbmVuZG9ialxyXG4iKSkpIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG9mZnNldCArPSBlbmNvZGVyLm1fZHdTaXplICsgbGVuOw0KLSAgICBtX1ByZXZPZmZzZXQgPSBvZmZzZXRfdG1wOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDUERGX1hSZWZTdHJlYW06OkVuZChDUERGX0NyZWF0b3IgKnBDcmVhdG9yLCBGWF9CT09MIGJFT0YgKQ0KLXsNCi0gICAgaWYgKEVuZE9iamVjdFN0cmVhbShwQ3JlYXRvciwgYkVPRikgPCAwKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgcmV0dXJuIEdlbmVyYXRlWFJlZlN0cmVhbShwQ3JlYXRvciwgYkVPRik7DQotfQ0KLUZYX0JPT0wgQ1BERl9YUmVmU3RyZWFtOjpFbmRYUmVmU3RyZWFtKENQREZfQ3JlYXRvciogcENyZWF0b3IpDQotew0KLSAgICBpZiAoIShwQ3JlYXRvci0+bV9kd0ZsYWdzICYgRlBERkNSRUFURV9JTkNSRU1FTlRBTCkpIHsNCi0gICAgICAgIF9BcHBlbmRJbmRleDAobV9CdWZmZXIpOw0KLSAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMTsgaSA8IHBDcmVhdG9yLT5tX2R3TGFzdE9iak51bSArIDE7IGkrKykgew0KLSAgICAgICAgICAgIEZYX0ZJTEVTSVpFKiBvZmZzZXQgPSBwQ3JlYXRvci0+bV9PYmplY3RPZmZzZXQuR2V0UHRyQXQoaSk7DQotICAgICAgICAgICAgaWYgKG9mZnNldCkgew0KLSAgICAgICAgICAgICAgICBfQXBwZW5kSW5kZXgxKG1fQnVmZmVyLCAqb2Zmc2V0KTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBfQXBwZW5kSW5kZXgwKG1fQnVmZmVyLCBGQUxTRSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgRlhfSU5UMzIgaVNlZyA9IG1fSW5kZXhBcnJheS5HZXRTaXplKCkgLyAyOw0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpU2VnOyBpKyspIHsNCi0gICAgICAgICAgICBGWF9EV09SRCBzdGFydCA9IG1fSW5kZXhBcnJheS5FbGVtZW50QXQoaSAqIDIpOw0KLSAgICAgICAgICAgIEZYX0RXT1JEIGVuZCA9IG1fSW5kZXhBcnJheS5FbGVtZW50QXQoaSAqIDIgKyAxKSArIHN0YXJ0Ow0KLSAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgaiA9IHN0YXJ0OyBqIDwgZW5kOyBqKyspIHsNCi0gICAgICAgICAgICAgICAgX0FwcGVuZEluZGV4MShtX0J1ZmZlciwgcENyZWF0b3ItPm1fT2JqZWN0T2Zmc2V0W2pdKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEdlbmVyYXRlWFJlZlN0cmVhbShwQ3JlYXRvciwgRkFMU0UpOw0KLX0NCi1GWF9CT09MIENQREZfWFJlZlN0cmVhbTo6QWRkT2JqZWN0TnVtYmVyVG9JbmRleEFycmF5KEZYX0RXT1JEIG9iam51bSkNCi17DQotICAgIEZYX0lOVDMyIGlTaXplID0gbV9JbmRleEFycmF5LkdldFNpemUoKTsNCi0gICAgaWYgKGlTaXplID09IDApIHsNCi0gICAgICAgIG1fSW5kZXhBcnJheS5BZGQob2JqbnVtKTsNCi0gICAgICAgIG1fSW5kZXhBcnJheS5BZGQoMSk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBGWFNZU19hc3NlcnQoaVNpemUgPiAxKTsNCi0gICAgICAgIEZYX0RXT1JEIHN0YXJ0b2JqbnVtID0gbV9JbmRleEFycmF5LkVsZW1lbnRBdChpU2l6ZSAtIDIpOw0KLSAgICAgICAgRlhfSU5UMzIgaUNvdW50ID0gbV9JbmRleEFycmF5LkVsZW1lbnRBdChpU2l6ZSAtIDEpOw0KLSAgICAgICAgaWYgKG9iam51bSA9PSBzdGFydG9iam51bSArIGlDb3VudCkgew0KLSAgICAgICAgICAgIG1fSW5kZXhBcnJheVtpU2l6ZSAtIDFdID0gaUNvdW50ICsgMTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbV9JbmRleEFycmF5LkFkZChvYmpudW0pOw0KLSAgICAgICAgICAgIG1fSW5kZXhBcnJheS5BZGQoMSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUNQREZfQ3JlYXRvcjo6Q1BERl9DcmVhdG9yKENQREZfRG9jdW1lbnQqIHBEb2MpDQotew0KLSAgICBtX3BEb2N1bWVudCA9IHBEb2M7DQotICAgIG1fcFBhcnNlciA9IChDUERGX1BhcnNlciopcERvYy0+bV9wUGFyc2VyOw0KLSAgICBtX2JDb21wcmVzcyA9IFRSVUU7DQotICAgIGlmIChtX3BQYXJzZXIpIHsNCi0gICAgICAgIG1fcEVuY3J5cHREaWN0ID0gbV9wUGFyc2VyLT5HZXRFbmNyeXB0RGljdCgpOw0KLSAgICAgICAgbV9wQ3J5cHRvSGFuZGxlciA9IG1fcFBhcnNlci0+R2V0Q3J5cHRvSGFuZGxlcigpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wRW5jcnlwdERpY3QgPSBOVUxMOw0KLSAgICAgICAgbV9wQ3J5cHRvSGFuZGxlciA9IE5VTEw7DQotICAgIH0NCi0gICAgbV9iU2VjdXJpdHlDaGFuZ2VkID0gRkFMU0U7DQotICAgIG1fYlN0YW5kYXJkU2VjdXJpdHkgPSBGQUxTRTsNCi0gICAgbV9wTWV0YWRhdGEgPSBOVUxMOw0KLSAgICBtX2JFbmNyeXB0Q2xvbmVkID0gRkFMU0U7DQotICAgIG1fYkVuY3J5cHRNZXRhZGF0YSA9IEZBTFNFOw0KLSAgICBtX09mZnNldCA9IDA7DQotICAgIG1faVN0YWdlID0gLTE7DQotICAgIG1fZHdGbGFncyA9IDA7DQotICAgIG1fUG9zID0gTlVMTDsNCi0gICAgbV9YcmVmU3RhcnQgPSAwOw0KLSAgICBtX3BYUmVmU3RyZWFtID0gTlVMTDsNCi0gICAgbV9PYmplY3RTdHJlYW1TaXplID0gMjAwOw0KLSAgICBtX2R3TGFzdE9iak51bSA9IG1fcERvY3VtZW50LT5HZXRMYXN0T2JqTnVtKCk7DQotICAgIG1fcElEQXJyYXkgPSBOVUxMOw0KLSAgICBtX0ZpbGVWZXJzaW9uID0gMDsNCi0gICAgbV9kd0VucnlwdE9iak51bSA9IDA7DQotICAgIG1fYk5ld0NyeXB0byA9IEZBTFNFOw0KLX0NCi1DUERGX0NyZWF0b3I6On5DUERGX0NyZWF0b3IoKQ0KLXsNCi0gICAgUmVzZXRTdGFuZGFyZFNlY3VyaXR5KCk7DQotICAgIGlmIChtX2JFbmNyeXB0Q2xvbmVkICYmIG1fcEVuY3J5cHREaWN0KSB7DQotICAgICAgICBtX3BFbmNyeXB0RGljdC0+UmVsZWFzZSgpOw0KLSAgICAgICAgbV9wRW5jcnlwdERpY3QgPSBOVUxMOw0KLSAgICB9DQotICAgIENsZWFyKCk7DQotfQ0KLXN0YXRpYyBGWF9CT09MIF9Jc1hSZWZOZWVkRW5kKENQREZfWFJlZlN0cmVhbSogcFhSZWYsIEZYX0RXT1JEIGZsYWcpDQotew0KLSAgICBpZiAoIShmbGFnICYgRlBERkNSRUFURV9JTkNSRU1FTlRBTCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWF9JTlQzMiBpU2l6ZSA9IHBYUmVmLT5tX0luZGV4QXJyYXkuR2V0U2l6ZSgpIC8gMjsNCi0gICAgRlhfSU5UMzIgaUNvdW50ID0gMDsNCi0gICAgZm9yIChGWF9JTlQzMiBpID0gMDsgaSA8IGlTaXplOyBpKyspIHsNCi0gICAgICAgIGlDb3VudCArPSBwWFJlZi0+bV9JbmRleEFycmF5LkVsZW1lbnRBdChpICogMiArIDEpOw0KLSAgICB9DQotICAgIHJldHVybiAoaUNvdW50ID49IFBERl9YUkVGU1RSRUFNX01BWFNJWkUpOw0KLX0NCi1GWF9JTlQzMiBDUERGX0NyZWF0b3I6OldyaXRlSW5kaXJlY3RPYmplY3RUb1N0cmVhbShjb25zdCBDUERGX09iamVjdCogcE9iaikNCi17DQotICAgIGlmICghbV9wWFJlZlN0cmVhbSkgew0KLSAgICAgICAgcmV0dXJuIDE7DQotICAgIH0NCi0gICAgRlhfRFdPUkQgb2JqbnVtID0gcE9iai0+R2V0T2JqTnVtKCk7DQotICAgIGlmIChtX3BQYXJzZXIgJiYgbV9wUGFyc2VyLT5tX09ialZlcnNpb24uR2V0U2l6ZSgpID4gKEZYX0lOVDMyKW9iam51bSAmJiBtX3BQYXJzZXItPm1fT2JqVmVyc2lvbltvYmpudW1dID4gMCkgew0KLSAgICAgICAgcmV0dXJuIDE7DQotICAgIH0NCi0gICAgaWYgKHBPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfTlVNQkVSKSB7DQotICAgICAgICByZXR1cm4gMTsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkgKnBEaWN0ID0gcE9iai0+R2V0RGljdCgpOw0KLSAgICBpZiAocE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJFQU0pIHsNCi0gICAgICAgIGlmIChwRGljdCAmJiBwRGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJUeXBlIikpID09IEZYX0JTVFJDKCJYUmVmIikpIHsNCi0gICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotICAgIGlmIChwRGljdCkgew0KLSAgICAgICAgaWYgKHBEaWN0ID09IG1fcERvY3VtZW50LT5tX3BSb290RGljdCB8fCBwRGljdCA9PSBtX3BFbmNyeXB0RGljdCkgew0KLSAgICAgICAgICAgIHJldHVybiAxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKElzU2lnbmF0dXJlRGljdChwRGljdCkpIHsNCi0gICAgICAgICAgICByZXR1cm4gMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwRGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJUeXBlIikpID09IEZYX0JTVFJDKCJQYWdlIikpIHsNCi0gICAgICAgICAgICByZXR1cm4gMTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX3BYUmVmU3RyZWFtLT5BZGRPYmplY3ROdW1iZXJUb0luZGV4QXJyYXkob2JqbnVtKTsNCi0gICAgaWYgKG1fcFhSZWZTdHJlYW0tPkNvbXByZXNzSW5kaXJlY3RPYmplY3Qob2JqbnVtLCBwT2JqLCB0aGlzKSA8IDApIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBpZiAoIV9Jc1hSZWZOZWVkRW5kKG1fcFhSZWZTdHJlYW0sIG1fZHdGbGFncykpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGlmICghbV9wWFJlZlN0cmVhbS0+RW5kKHRoaXMpKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgaWYgKCFtX3BYUmVmU3RyZWFtLT5TdGFydCgpKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgcmV0dXJuIDA7DQotfQ0KLUZYX0lOVDMyIENQREZfQ3JlYXRvcjo6V3JpdGVJbmRpcmVjdE9iamVjdFRvU3RyZWFtKEZYX0RXT1JEIG9iam51bSwgRlhfTFBDQllURSBwQnVmZmVyLCBGWF9EV09SRCBkd1NpemUpDQotew0KLSAgICBpZiAoIW1fcFhSZWZTdHJlYW0pIHsNCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotICAgIG1fcFhSZWZTdHJlYW0tPkFkZE9iamVjdE51bWJlclRvSW5kZXhBcnJheShvYmpudW0pOw0KLSAgICBGWF9JTlQzMiBpUmV0ID0gbV9wWFJlZlN0cmVhbS0+Q29tcHJlc3NJbmRpcmVjdE9iamVjdChvYmpudW0sIHBCdWZmZXIsIGR3U2l6ZSwgdGhpcyk7DQotICAgIGlmIChpUmV0IDwgMSkgew0KLSAgICAgICAgcmV0dXJuIGlSZXQ7DQotICAgIH0NCi0gICAgaWYgKCFfSXNYUmVmTmVlZEVuZChtX3BYUmVmU3RyZWFtLCBtX2R3RmxhZ3MpKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBpZiAoIW1fcFhSZWZTdHJlYW0tPkVuZCh0aGlzKSkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIGlmICghbV9wWFJlZlN0cmVhbS0+U3RhcnQoKSkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIHJldHVybiAwOw0KLX0NCi1GWF9JTlQzMiBDUERGX0NyZWF0b3I6OkFwcGVuZE9iamVjdE51bWJlclRvWFJlZihGWF9EV09SRCBvYmpudW0pDQotew0KLSAgICBpZiAoIW1fcFhSZWZTdHJlYW0pIHsNCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotICAgIG1fcFhSZWZTdHJlYW0tPkFkZE9iamVjdE51bWJlclRvSW5kZXhBcnJheShvYmpudW0pOw0KLSAgICBpZiAoIV9Jc1hSZWZOZWVkRW5kKG1fcFhSZWZTdHJlYW0sIG1fZHdGbGFncykpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGlmICghbV9wWFJlZlN0cmVhbS0+RW5kKHRoaXMpKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgaWYgKCFtX3BYUmVmU3RyZWFtLT5TdGFydCgpKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgcmV0dXJuIDA7DQotfQ0KLUZYX0lOVDMyIENQREZfQ3JlYXRvcjo6V3JpdGVTdHJlYW0oY29uc3QgQ1BERl9PYmplY3QqIHBTdHJlYW0sIEZYX0RXT1JEIG9iam51bSwgQ1BERl9DcnlwdG9IYW5kbGVyKiBwQ3J5cHRvKQ0KLXsNCi0gICAgQ1BERl9GbGF0ZUVuY29kZXIgZW5jb2RlcjsNCi0gICAgZW5jb2Rlci5Jbml0aWFsaXplKChDUERGX1N0cmVhbSopcFN0cmVhbSwgcFN0cmVhbSA9PSBtX3BNZXRhZGF0YSA/IEZBTFNFIDogbV9iQ29tcHJlc3MpOw0KLSAgICBDUERGX0VuY3J5cHRvciBlbmNyeXB0b3I7DQotICAgIGlmKCFlbmNyeXB0b3IuSW5pdGlhbGl6ZShwQ3J5cHRvLCBvYmpudW0sIGVuY29kZXIubV9wRGF0YSwgZW5jb2Rlci5tX2R3U2l6ZSkpIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBpZiAoKEZYX0RXT1JEKWVuY29kZXIubV9wRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiTGVuZ3RoIikpICE9IGVuY3J5cHRvci5tX2R3U2l6ZSkgew0KLSAgICAgICAgZW5jb2Rlci5DbG9uZURpY3QoKTsNCi0gICAgICAgIGVuY29kZXIubV9wRGljdC0+U2V0QXRJbnRlZ2VyKEZYX0JTVFJDKCJMZW5ndGgiKSwgZW5jcnlwdG9yLm1fZHdTaXplKTsNCi0gICAgfQ0KLSAgICBpZiAoV3JpdGVEaXJlY3RPYmoob2JqbnVtLCBlbmNvZGVyLm1fcERpY3QpIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIGludCBsZW4gPSBtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCJzdHJlYW1cclxuIikpOw0KLSAgICBpZiAobGVuIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIG1fT2Zmc2V0ICs9IGxlbjsNCi0gICAgaWYgKG1fRmlsZS5BcHBlbmRCbG9jayhlbmNyeXB0b3IubV9wRGF0YSwgZW5jcnlwdG9yLm1fZHdTaXplKSA8IDApIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBtX09mZnNldCArPSBlbmNyeXB0b3IubV9kd1NpemU7DQotICAgIGlmICgobGVuID0gbV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiXHJcbmVuZHN0cmVhbSIpKSkgPCAwKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgbV9PZmZzZXQgKz0gbGVuOw0KLSAgICByZXR1cm4gMTsNCi19DQotRlhfSU5UMzIgQ1BERl9DcmVhdG9yOjpXcml0ZUluZGlyZWN0T2JqKEZYX0RXT1JEIG9iam51bSwgY29uc3QgQ1BERl9PYmplY3QqIHBPYmopDQotew0KLSAgICBGWF9JTlQzMiBsZW4gPSBtX0ZpbGUuQXBwZW5kRFdvcmQob2JqbnVtKTsNCi0gICAgaWYgKGxlbiA8IDApIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBtX09mZnNldCArPSBsZW47DQotICAgIGlmICgobGVuID0gbV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiIDAgb2JqXHJcbiIpKSkgPCAwKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgbV9PZmZzZXQgKz0gbGVuOw0KLSAgICBpZiAocE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJFQU0pIHsNCi0gICAgICAgIENQREZfQ3J5cHRvSGFuZGxlciAqcEhhbmRsZXIgPSBOVUxMOw0KLSAgICAgICAgcEhhbmRsZXIgPSAocE9iaiA9PSBtX3BNZXRhZGF0YSAmJiAhbV9iRW5jcnlwdE1ldGFkYXRhKSA/IE5VTEwgOiBtX3BDcnlwdG9IYW5kbGVyOw0KLSAgICAgICAgaWYgKFdyaXRlU3RyZWFtKHBPYmosIG9iam51bSwgcEhhbmRsZXIpIDwgMCkgew0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGlmIChXcml0ZURpcmVjdE9iaihvYmpudW0sIHBPYmopIDwgMCkgew0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoKGxlbiA9IG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIlxyXG5lbmRvYmpcclxuIikpKSA8IDApIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBtX09mZnNldCArPSBsZW47DQotICAgIGlmIChBcHBlbmRPYmplY3ROdW1iZXJUb1hSZWYob2JqbnVtKSA8IDApIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICByZXR1cm4gMDsNCi19DQotRlhfSU5UMzIgQ1BERl9DcmVhdG9yOjpXcml0ZUluZGlyZWN0T2JqKGNvbnN0IENQREZfT2JqZWN0KiBwT2JqKQ0KLXsNCi0gICAgRlhfSU5UMzIgaVJldCA9IFdyaXRlSW5kaXJlY3RPYmplY3RUb1N0cmVhbShwT2JqKTsNCi0gICAgaWYgKGlSZXQgPCAxKSB7DQotICAgICAgICByZXR1cm4gaVJldDsNCi0gICAgfQ0KLSAgICByZXR1cm4gV3JpdGVJbmRpcmVjdE9iaihwT2JqLT5HZXRPYmpOdW0oKSwgcE9iaik7DQotfQ0KLUZYX0lOVDMyIENQREZfQ3JlYXRvcjo6V3JpdGVEaXJlY3RPYmooRlhfRFdPUkQgb2JqbnVtLCBjb25zdCBDUERGX09iamVjdCogcE9iaiwgRlhfQk9PTCBiRW5jcnlwdCkNCi17DQotICAgIEZYX0lOVDMyIGxlbiA9IDA7DQotICAgIGlmIChwT2JqID09IE5VTEwpIHsNCi0gICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgbnVsbCIpKSA8IDApIHsNCi0gICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICB9DQotICAgICAgICBtX09mZnNldCArPSA1Ow0KLSAgICAgICAgcmV0dXJuIDE7DQotICAgIH0NCi0gICAgc3dpdGNoIChwT2JqLT5HZXRUeXBlKCkpIHsNCi0gICAgICAgIGNhc2UgUERGT0JKX05VTEw6DQotICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiBudWxsIikpIDwgMCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fT2Zmc2V0ICs9IDU7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIFBERk9CSl9CT09MRUFOOg0KLSAgICAgICAgY2FzZSBQREZPQkpfTlVNQkVSOg0KLSAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgIikpIDwgMCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmICgobGVuID0gbV9GaWxlLkFwcGVuZFN0cmluZyhwT2JqLT5HZXRTdHJpbmcoKSkpIDwgMCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fT2Zmc2V0ICs9IGxlbiArIDE7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIFBERk9CSl9TVFJJTkc6IHsNCi0gICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc3RyID0gcE9iai0+R2V0U3RyaW5nKCk7DQotICAgICAgICAgICAgICAgIEZYX0JPT0wgYkhleCA9ICgoQ1BERl9TdHJpbmcqKXBPYmopLT5Jc0hleCgpOw0KLSAgICAgICAgICAgICAgICBpZiAobV9wQ3J5cHRvSGFuZGxlciA9PSBOVUxMIHx8ICFiRW5jcnlwdCkgew0KLSAgICAgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY29udGVudCA9IFBERl9FbmNvZGVTdHJpbmcoc3RyLCBiSGV4KTsNCi0gICAgICAgICAgICAgICAgICAgIGlmICgobGVuID0gbV9GaWxlLkFwcGVuZFN0cmluZyhjb250ZW50KSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgbV9PZmZzZXQgKz0gbGVuOw0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgQ1BERl9FbmNyeXB0b3IgZW5jcnlwdG9yOw0KLSAgICAgICAgICAgICAgICBlbmNyeXB0b3IuSW5pdGlhbGl6ZShtX3BDcnlwdG9IYW5kbGVyLCBvYmpudW0sIChGWF9MUEJZVEUpKEZYX0xQQ1NUUilzdHIsIHN0ci5HZXRMZW5ndGgoKSk7DQotICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGNvbnRlbnQgPSBQREZfRW5jb2RlU3RyaW5nKENGWF9CeXRlU3RyaW5nKChGWF9MUENTVFIpZW5jcnlwdG9yLm1fcERhdGEsIGVuY3J5cHRvci5tX2R3U2l6ZSksIGJIZXgpOw0KLSAgICAgICAgICAgICAgICBpZiAoKGxlbiA9IG1fRmlsZS5BcHBlbmRTdHJpbmcoY29udGVudCkpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG1fT2Zmc2V0ICs9IGxlbjsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgY2FzZSBQREZPQkpfU1RSRUFNOiB7DQotICAgICAgICAgICAgICAgIENQREZfRmxhdGVFbmNvZGVyIGVuY29kZXI7DQotICAgICAgICAgICAgICAgIGVuY29kZXIuSW5pdGlhbGl6ZSgoQ1BERl9TdHJlYW0qKXBPYmosIG1fYkNvbXByZXNzKTsNCi0gICAgICAgICAgICAgICAgQ1BERl9FbmNyeXB0b3IgZW5jcnlwdG9yOw0KLSAgICAgICAgICAgICAgICBDUERGX0NyeXB0b0hhbmRsZXIqIHBIYW5kbGVyID0gbV9wQ3J5cHRvSGFuZGxlcjsNCi0gICAgICAgICAgICAgICAgZW5jcnlwdG9yLkluaXRpYWxpemUocEhhbmRsZXIsIG9iam51bSwgZW5jb2Rlci5tX3BEYXRhLCBlbmNvZGVyLm1fZHdTaXplKTsNCi0gICAgICAgICAgICAgICAgaWYgKChGWF9EV09SRCllbmNvZGVyLm1fcERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIkxlbmd0aCIpKSAhPSBlbmNyeXB0b3IubV9kd1NpemUpIHsNCi0gICAgICAgICAgICAgICAgICAgIGVuY29kZXIuQ2xvbmVEaWN0KCk7DQotICAgICAgICAgICAgICAgICAgICBlbmNvZGVyLm1fcERpY3QtPlNldEF0SW50ZWdlcihGWF9CU1RSQygiTGVuZ3RoIiksIGVuY3J5cHRvci5tX2R3U2l6ZSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKFdyaXRlRGlyZWN0T2JqKG9iam51bSwgZW5jb2Rlci5tX3BEaWN0KSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoKGxlbiA9IG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoInN0cmVhbVxyXG4iKSkpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG1fT2Zmc2V0ICs9IGxlbjsNCi0gICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRCbG9jayhlbmNyeXB0b3IubV9wRGF0YSwgZW5jcnlwdG9yLm1fZHdTaXplKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBtX09mZnNldCArPSBlbmNyeXB0b3IubV9kd1NpemU7DQotICAgICAgICAgICAgICAgIGlmICgobGVuID0gbV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiXHJcbmVuZHN0cmVhbSIpKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbV9PZmZzZXQgKz0gbGVuOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIFBERk9CSl9OQU1FOiB7DQotICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIvIikpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIHN0ciA9IHBPYmotPkdldFN0cmluZygpOw0KLSAgICAgICAgICAgICAgICBpZiAoKGxlbiA9IG1fRmlsZS5BcHBlbmRTdHJpbmcoUERGX05hbWVFbmNvZGUoc3RyKSkpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG1fT2Zmc2V0ICs9IGxlbiArIDE7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgUERGT0JKX1JFRkVSRU5DRTogew0KLSAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiICIpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBDUERGX1JlZmVyZW5jZSogcCA9IChDUERGX1JlZmVyZW5jZSopcE9iajsNCi0gICAgICAgICAgICAgICAgaWYgKChsZW4gPSBtX0ZpbGUuQXBwZW5kRFdvcmQocC0+R2V0UmVmT2JqTnVtKCkpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiIDAgUiIpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBtX09mZnNldCArPSBsZW4gKyA1Ow0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIFBERk9CSl9BUlJBWTogew0KLSAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiWyIpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBtX09mZnNldCArPSAxOw0KLSAgICAgICAgICAgICAgICBDUERGX0FycmF5KiBwID0gKENQREZfQXJyYXkqKXBPYmo7DQotICAgICAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwLT5HZXRDb3VudCgpOyBpICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBDUERGX09iamVjdCogcEVsZW1lbnQgPSBwLT5HZXRFbGVtZW50KGkpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBFbGVtZW50LT5HZXRPYmpOdW0oKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgIikpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobGVuID0gbV9GaWxlLkFwcGVuZERXb3JkKHBFbGVtZW50LT5HZXRPYmpOdW0oKSkpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgMCBSIikpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fT2Zmc2V0ICs9IGxlbiArIDU7DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXcml0ZURpcmVjdE9iaihvYmpudW0sIHBFbGVtZW50KSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiXSIpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBtX09mZnNldCArPSAxOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIFBERk9CSl9ESUNUSU9OQVJZOiB7DQotICAgICAgICAgICAgICAgIGlmIChtX3BDcnlwdG9IYW5kbGVyID09IE5VTEwgfHwgcE9iaiA9PSBtX3BFbmNyeXB0RGljdCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBERl9DcmVhdG9yQXBwZW5kT2JqZWN0KHBPYmosICZtX0ZpbGUsIG1fT2Zmc2V0KTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiPDwiKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbV9PZmZzZXQgKz0gMjsNCi0gICAgICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwID0gKENQREZfRGljdGlvbmFyeSopcE9iajsNCi0gICAgICAgICAgICAgICAgRlhfQk9PTCBiU2lnbkRpY3QgPSBJc1NpZ25hdHVyZURpY3QocCk7DQotICAgICAgICAgICAgICAgIEZYX1BPU0lUSU9OIHBvcyA9IHAtPkdldFN0YXJ0UG9zKCk7DQotICAgICAgICAgICAgICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYlNpZ25WYWx1ZSA9IEZBTFNFOw0KLSAgICAgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcga2V5Ow0KLSAgICAgICAgICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBWYWx1ZSA9IHAtPkdldE5leHRFbGVtZW50KHBvcywga2V5KTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIvIikpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGlmICgobGVuID0gbV9GaWxlLkFwcGVuZFN0cmluZyhQREZfTmFtZUVuY29kZShrZXkpKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgbV9PZmZzZXQgKz0gbGVuICsgMTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChiU2lnbkRpY3QgJiYga2V5ID09IEZYX0JTVFJDKCJDb250ZW50cyIpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgYlNpZ25WYWx1ZSA9IFRSVUU7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBpZiAocFZhbHVlLT5HZXRPYmpOdW0oKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgIikpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobGVuID0gbV9GaWxlLkFwcGVuZERXb3JkKHBWYWx1ZS0+R2V0T2JqTnVtKCkpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiIDAgUiAiKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9PZmZzZXQgKz0gbGVuICsgNjsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdyaXRlRGlyZWN0T2JqKG9iam51bSwgcFZhbHVlLCAhYlNpZ25WYWx1ZSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIj4+IikpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG1fT2Zmc2V0ICs9IDI7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gMTsNCi19DQotRlhfSU5UMzIgQ1BERl9DcmVhdG9yOjpXcml0ZU9sZEluZGlyZWN0T2JqZWN0KEZYX0RXT1JEIG9iam51bSkNCi17DQotICAgIGlmKG1fcFBhcnNlci0+bV9WNVR5cGVbb2JqbnVtXSA9PSAwIHx8IG1fcFBhcnNlci0+bV9WNVR5cGVbb2JqbnVtXSA9PSAyNTUpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIG1fT2JqZWN0T2Zmc2V0W29iam51bV0gPSBtX09mZnNldDsNCi0gICAgRlhfTFBWT0lEIHZhbHVldGVtcCA9IE5VTEw7DQotICAgIEZYX0JPT0wgYkV4aXN0SW5NYXAgPSBtX3BEb2N1bWVudC0+bV9JbmRpcmVjdE9ianMuTG9va3VwKChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpb2JqbnVtLCB2YWx1ZXRlbXApOw0KLSAgICBGWF9CT09MIGJPYmpTdG0gPSAobV9wUGFyc2VyLT5tX1Y1VHlwZVtvYmpudW1dID09IDIpICYmIG1fcEVuY3J5cHREaWN0ICYmICFtX3BYUmVmU3RyZWFtOw0KLSAgICBpZihtX3BQYXJzZXItPm1fYlZlcnNpb25VcGRhdGVkIHx8IG1fYlNlY3VyaXR5Q2hhbmdlZCB8fCBiRXhpc3RJbk1hcCB8fCBiT2JqU3RtKSB7DQotICAgICAgICBDUERGX09iamVjdCogcE9iaiA9IG1fcERvY3VtZW50LT5HZXRJbmRpcmVjdE9iamVjdChvYmpudW0pOw0KLSAgICAgICAgaWYgKHBPYmogPT0gTlVMTCkgew0KLSAgICAgICAgICAgIG1fT2JqZWN0T2Zmc2V0W29iam51bV0gPSAwOw0KLSAgICAgICAgICAgIG1fT2JqZWN0U2l6ZVtvYmpudW1dID0gMDsNCi0gICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChXcml0ZUluZGlyZWN0T2JqKHBPYmopKSB7DQotICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCFiRXhpc3RJbk1hcCkgew0KLSAgICAgICAgICAgIG1fcERvY3VtZW50LT5SZWxlYXNlSW5kaXJlY3RPYmplY3Qob2JqbnVtKTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEZYX0JZVEUqIHBCdWZmZXI7DQotICAgICAgICBGWF9EV09SRCBzaXplOw0KLSAgICAgICAgbV9wUGFyc2VyLT5HZXRJbmRpcmVjdEJpbmFyeShvYmpudW0sIHBCdWZmZXIsIHNpemUpOw0KLSAgICAgICAgaWYgKHBCdWZmZXIgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fcFBhcnNlci0+bV9WNVR5cGVbb2JqbnVtXSA9PSAyKSB7DQotICAgICAgICAgICAgaWYgKG1fcFhSZWZTdHJlYW0pIHsNCi0gICAgICAgICAgICAgICAgaWYgKFdyaXRlSW5kaXJlY3RPYmplY3RUb1N0cmVhbShvYmpudW0sIHBCdWZmZXIsIHNpemUpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgRlhfRnJlZShwQnVmZmVyKTsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIEZYX0lOVDMyIGxlbiA9IG1fRmlsZS5BcHBlbmREV29yZChvYmpudW0pOw0KLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgMCBvYmogIikpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG1fT2Zmc2V0ICs9IGxlbiArIDc7DQotICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kQmxvY2socEJ1ZmZlciwgc2l6ZSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbV9PZmZzZXQgKz0gc2l6ZTsNCi0gICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIlxyXG5lbmRvYmpcclxuIikpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG1fT2Zmc2V0ICs9IDEwOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRCbG9jayhwQnVmZmVyLCBzaXplKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBtX09mZnNldCArPSBzaXplOw0KLSAgICAgICAgICAgIGlmKEFwcGVuZE9iamVjdE51bWJlclRvWFJlZihvYmpudW0pIDwgMCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfRnJlZShwQnVmZmVyKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gMTsNCi19DQotRlhfSU5UMzIgQ1BERl9DcmVhdG9yOjpXcml0ZU9sZE9ianMoSUZYX1BhdXNlICpwUGF1c2UpDQotew0KLSAgICBGWF9EV09SRCBuT2xkU2l6ZSA9IG1fcFBhcnNlci0+bV9Dcm9zc1JlZi5HZXRTaXplKCk7DQotICAgIEZYX0RXT1JEIG9iam51bSA9IChGWF9EV09SRCkoRlhfVUlOVFBUUiltX1BvczsNCi0gICAgZm9yKDsgb2JqbnVtIDwgbk9sZFNpemU7IG9iam51bSArKykgew0KLSAgICAgICAgRlhfSU5UMzIgaVJldCA9IFdyaXRlT2xkSW5kaXJlY3RPYmplY3Qob2JqbnVtKTsNCi0gICAgICAgIGlmICghaVJldCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGlSZXQgPCAwKSB7DQotICAgICAgICAgICAgcmV0dXJuIGlSZXQ7DQotICAgICAgICB9DQotICAgICAgICBtX09iamVjdFNpemVbb2JqbnVtXSA9IChGWF9EV09SRCkobV9PZmZzZXQgLSBtX09iamVjdE9mZnNldFtvYmpudW1dKTsNCi0gICAgICAgIGlmIChwUGF1c2UgJiYgcFBhdXNlLT5OZWVkVG9QYXVzZU5vdygpKSB7DQotICAgICAgICAgICAgbV9Qb3MgPSAoRlhfTFBWT0lEKShGWF9VSU5UUFRSKShvYmpudW0gKyAxKTsNCi0gICAgICAgICAgICByZXR1cm4gMTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gMDsNCi19DQotRlhfSU5UMzIgQ1BERl9DcmVhdG9yOjpXcml0ZU5ld09ianMoRlhfQk9PTCBiSW5jcmVtZW50YWwsIElGWF9QYXVzZSAqcFBhdXNlKQ0KLXsNCi0gICAgRlhfSU5UMzIgaUNvdW50ID0gbV9OZXdPYmpOdW1BcnJheS5HZXRTaXplKCk7DQotICAgIEZYX0lOVDMyIGluZGV4ID0gKEZYX0lOVDMyKShGWF9VSU5UUFRSKW1fUG9zOw0KLSAgICB3aGlsZSAoaW5kZXggPCBpQ291bnQpIHsNCi0gICAgICAgIEZYX0RXT1JEIG9iam51bSA9IG1fTmV3T2JqTnVtQXJyYXkuRWxlbWVudEF0KGluZGV4KTsNCi0gICAgICAgIENQREZfT2JqZWN0ICpwT2JqID0gTlVMTDsNCi0gICAgICAgIG1fcERvY3VtZW50LT5tX0luZGlyZWN0T2Jqcy5Mb29rdXAoKEZYX0xQVk9JRCkoRlhfVUlOVFBUUilvYmpudW0sIChGWF9MUFZPSUQmKXBPYmopOw0KLSAgICAgICAgaWYgKE5VTEwgPT0gcE9iaikgew0KLSAgICAgICAgICAgICsraW5kZXg7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBtX09iamVjdE9mZnNldFtvYmpudW1dID0gbV9PZmZzZXQ7DQotICAgICAgICBpZiAoV3JpdGVJbmRpcmVjdE9iaihwT2JqKSkgew0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fT2JqZWN0U2l6ZVtvYmpudW1dID0gKEZYX0RXT1JEKShtX09mZnNldCAtIG1fT2JqZWN0T2Zmc2V0W29iam51bV0pOw0KLSAgICAgICAgaW5kZXgrKzsNCi0gICAgICAgIGlmIChwUGF1c2UgJiYgcFBhdXNlLT5OZWVkVG9QYXVzZU5vdygpKSB7DQotICAgICAgICAgICAgbV9Qb3MgPSAoRlhfUE9TSVRJT04pKEZYX1VJTlRQVFIpaW5kZXg7DQotICAgICAgICAgICAgcmV0dXJuIDE7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIDA7DQotfQ0KLXZvaWQgQ1BERl9DcmVhdG9yOjpJbml0T2xkT2JqTnVtT2Zmc2V0cygpDQotew0KLSAgICBpZiAoIW1fcFBhcnNlcikgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX0RXT1JEIGogPSAwOw0KLSAgICBGWF9EV09SRCBkd1N0YXJ0ID0gMDsNCi0gICAgRlhfRFdPUkQgZHdFbmQgPSBtX3BQYXJzZXItPkdldExhc3RPYmpOdW0oKTsNCi0gICAgd2hpbGUgKGR3U3RhcnQgPD0gZHdFbmQpIHsNCi0gICAgICAgIHdoaWxlIChkd1N0YXJ0IDw9IGR3RW5kICYmIChtX3BQYXJzZXItPm1fVjVUeXBlW2R3U3RhcnRdID09IDAgfHwgbV9wUGFyc2VyLT5tX1Y1VHlwZVtkd1N0YXJ0XSA9PSAyNTUpKSB7DQotICAgICAgICAgICAgZHdTdGFydCsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGR3U3RhcnQgPiBkd0VuZCkgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaiA9IGR3U3RhcnQ7DQotICAgICAgICB3aGlsZSAoaiA8PSBkd0VuZCAmJiBtX3BQYXJzZXItPm1fVjVUeXBlW2pdICE9IDAgJiYgbV9wUGFyc2VyLT5tX1Y1VHlwZVtqXSAhPSAyNTUpIHsNCi0gICAgICAgICAgICBqKys7DQotICAgICAgICB9DQotICAgICAgICBtX09iamVjdE9mZnNldC5BZGQoZHdTdGFydCwgaiAtIGR3U3RhcnQpOw0KLSAgICAgICAgbV9PYmplY3RTaXplLkFkZChkd1N0YXJ0LCBqIC0gZHdTdGFydCk7DQotICAgICAgICBkd1N0YXJ0ID0gajsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfQ3JlYXRvcjo6SW5pdE5ld09iak51bU9mZnNldHMoKQ0KLXsNCi0gICAgRlhfQk9PTCBiSW5jcmVtZW50YWwgPSAobV9kd0ZsYWdzICYgRlBERkNSRUFURV9JTkNSRU1FTlRBTCkgIT0gMDsNCi0gICAgRlhfQk9PTCBiTm9PcmlnaW5hbCA9IChtX2R3RmxhZ3MgJiBGUERGQ1JFQVRFX05PX09SSUdJTkFMKSAhPSAwOw0KLSAgICBGWF9EV09SRCBuT2xkU2l6ZSA9IG1fcFBhcnNlciA/IG1fcFBhcnNlci0+bV9Dcm9zc1JlZi5HZXRTaXplKCkgOiAwOw0KLSAgICBGWF9QT1NJVElPTiBwb3MgPSBtX3BEb2N1bWVudC0+bV9JbmRpcmVjdE9ianMuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICBzaXplX3Qga2V5ID0gMDsNCi0gICAgICAgIENQREZfT2JqZWN0KiBwT2JqOw0KLSAgICAgICAgbV9wRG9jdW1lbnQtPm1fSW5kaXJlY3RPYmpzLkdldE5leHRBc3NvYyhwb3MsIChGWF9MUFZPSUQmKWtleSwgKEZYX0xQVk9JRCYpcE9iaik7DQotICAgICAgICBGWF9EV09SRCBvYmpudW0gPSAoRlhfRFdPUkQpa2V5Ow0KLSAgICAgICAgaWYgKHBPYmotPkdldE9iak51bSgpID09IC0xKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoYkluY3JlbWVudGFsKSB7DQotICAgICAgICAgICAgaWYgKCFwT2JqLT5Jc01vZGlmaWVkKCkpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAob2JqbnVtIDwgbk9sZFNpemUgJiYgbV9wUGFyc2VyLT5tX1Y1VHlwZVtvYmpudW1dICE9IDApIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgQXBwZW5kTmV3T2JqTnVtKG9iam51bSk7DQotICAgIH0NCi0gICAgRlhfSU5UMzIgaUNvdW50ID0gbV9OZXdPYmpOdW1BcnJheS5HZXRTaXplKCk7DQotICAgIGlmIChpQ291bnQgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX0lOVDMyIGkgPSAwOw0KLSAgICBGWF9EV09SRCBkd1N0YXJ0T2JqTnVtID0gMDsNCi0gICAgRlhfQk9PTCBiQ3Jvc3NSZWZWYWxpZCA9IG1fcFBhcnNlciAmJiBtX3BQYXJzZXItPkdldExhc3RYUmVmT2Zmc2V0KCkgPiAwOw0KLSAgICB3aGlsZSAoaSA8IGlDb3VudCkgew0KLSAgICAgICAgZHdTdGFydE9iak51bSA9IG1fTmV3T2JqTnVtQXJyYXkuRWxlbWVudEF0KGkpOw0KLSAgICAgICAgaWYgKChiSW5jcmVtZW50YWwgJiYgKGJOb09yaWdpbmFsIHx8IGJDcm9zc1JlZlZhbGlkKSkgfHwgIW1fT2JqZWN0T2Zmc2V0LkdldFB0ckF0KGR3U3RhcnRPYmpOdW0pKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBpKys7DQotICAgIH0NCi0gICAgaWYgKGkgPj0gaUNvdW50KSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhfRFdPUkQgZHdMYXN0T2JqTnVtID0gZHdTdGFydE9iak51bTsNCi0gICAgaSsrOw0KLSAgICBGWF9CT09MIGJOZXdTdGFydCA9IEZBTFNFOw0KLSAgICBmb3IgKDsgaSA8IGlDb3VudDsgaSsrKSB7DQotICAgICAgICBGWF9EV09SRCBkd0N1ck9iak51bSA9IG1fTmV3T2JqTnVtQXJyYXkuRWxlbWVudEF0KGkpOw0KLSAgICAgICAgRlhfQk9PTCBiRXhpc3QgPSAoZHdDdXJPYmpOdW0gPCBuT2xkU2l6ZSAmJiBtX09iamVjdE9mZnNldC5HZXRQdHJBdChkd0N1ck9iak51bSkgIT0gTlVMTCk7DQotICAgICAgICBpZiAoYkV4aXN0IHx8IGR3Q3VyT2JqTnVtIC0gZHdMYXN0T2JqTnVtID4gMSkgew0KLSAgICAgICAgICAgIGlmICghYk5ld1N0YXJ0KSB7DQotICAgICAgICAgICAgICAgIG1fT2JqZWN0T2Zmc2V0LkFkZChkd1N0YXJ0T2JqTnVtLCBkd0xhc3RPYmpOdW0gLSBkd1N0YXJ0T2JqTnVtICsgMSk7DQotICAgICAgICAgICAgICAgIG1fT2JqZWN0U2l6ZS5BZGQoZHdTdGFydE9iak51bSwgZHdMYXN0T2JqTnVtIC0gZHdTdGFydE9iak51bSArIDEpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBkd1N0YXJ0T2JqTnVtID0gZHdDdXJPYmpOdW07DQotICAgICAgICB9DQotICAgICAgICBpZiAoYk5ld1N0YXJ0KSB7DQotICAgICAgICAgICAgZHdTdGFydE9iak51bSA9IGR3Q3VyT2JqTnVtOw0KLSAgICAgICAgfQ0KLSAgICAgICAgYk5ld1N0YXJ0ID0gYkV4aXN0Ow0KLSAgICAgICAgZHdMYXN0T2JqTnVtID0gZHdDdXJPYmpOdW07DQotICAgIH0NCi0gICAgbV9PYmplY3RPZmZzZXQuQWRkKGR3U3RhcnRPYmpOdW0sIGR3TGFzdE9iak51bSAtIGR3U3RhcnRPYmpOdW0gKyAxKTsNCi0gICAgbV9PYmplY3RTaXplLkFkZChkd1N0YXJ0T2JqTnVtLCBkd0xhc3RPYmpOdW0gLSBkd1N0YXJ0T2JqTnVtICsgMSk7DQotfQ0KLXZvaWQgQ1BERl9DcmVhdG9yOjpBcHBlbmROZXdPYmpOdW0oRlhfRFdPUkQgb2JqYnVtKQ0KLXsNCi0gICAgRlhfSU5UMzIgaVN0YXJ0ID0gMCwgaUZpbmQgPSAwOw0KLSAgICBGWF9JTlQzMiBpRW5kID0gbV9OZXdPYmpOdW1BcnJheS5HZXRVcHBlckJvdW5kKCk7DQotICAgIHdoaWxlIChpU3RhcnQgPD0gaUVuZCkgew0KLSAgICAgICAgRlhfSU5UMzIgaU1pZCA9IChpU3RhcnQgKyBpRW5kKSAvIDI7DQotICAgICAgICBGWF9EV09SRCBkd01pZCA9IG1fTmV3T2JqTnVtQXJyYXkuRWxlbWVudEF0KGlNaWQpOw0KLSAgICAgICAgaWYgKG9iamJ1bSA8IGR3TWlkKSB7DQotICAgICAgICAgICAgaUVuZCA9IGlNaWQgLSAxOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAoaU1pZCA9PSBpRW5kKSB7DQotICAgICAgICAgICAgICAgIGlGaW5kID0gaU1pZCArIDE7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9EV09SRCBkd05leHQgPSBtX05ld09iak51bUFycmF5LkVsZW1lbnRBdChpTWlkICsgMSk7DQotICAgICAgICAgICAgaWYgKG9iamJ1bSA8IGR3TmV4dCkgew0KLSAgICAgICAgICAgICAgICBpRmluZCA9IGlNaWQgKyAxOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaVN0YXJ0ID0gaU1pZCArIDE7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9OZXdPYmpOdW1BcnJheS5JbnNlcnRBdChpRmluZCwgb2JqYnVtKTsNCi19DQotRlhfSU5UMzIgQ1BERl9DcmVhdG9yOjpXcml0ZURvY19TdGFnZTEoSUZYX1BhdXNlICpwUGF1c2UpDQotew0KLSAgICBGWFNZU19hc3NlcnQobV9pU3RhZ2UgPiAtMSB8fCBtX2lTdGFnZSA8IDIwKTsNCi0gICAgaWYgKG1faVN0YWdlID09IDApIHsNCi0gICAgICAgIGlmIChtX3BQYXJzZXIgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIG1fZHdGbGFncyAmPSB+RlBERkNSRUFURV9JTkNSRU1FTlRBTDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX2JTZWN1cml0eUNoYW5nZWQgJiYgKG1fZHdGbGFncyAmIEZQREZDUkVBVEVfTk9fT1JJR0lOQUwpID09IDApIHsNCi0gICAgICAgICAgICBtX2R3RmxhZ3MgJj0gfkZQREZDUkVBVEVfSU5DUkVNRU5UQUw7DQotICAgICAgICB9DQotICAgICAgICBtX3BNZXRhZGF0YSA9IG1fcERvY3VtZW50LT5HZXRSb290KCktPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiTWV0YWRhdGEiKSk7DQotICAgICAgICBpZiAobV9kd0ZsYWdzICYgRlBERkNSRUFURV9PQkpFQ1RTVFJFQU0pIHsNCi0gICAgICAgICAgICBtX3BYUmVmU3RyZWFtID0gRlhfTkVXIENQREZfWFJlZlN0cmVhbTsNCi0gICAgICAgICAgICBtX3BYUmVmU3RyZWFtLT5TdGFydCgpOw0KLSAgICAgICAgICAgIGlmICgobV9kd0ZsYWdzICYgRlBERkNSRUFURV9JTkNSRU1FTlRBTCkgIT0gMCAmJiBtX3BQYXJzZXIpIHsNCi0gICAgICAgICAgICAgICAgRlhfRklMRVNJWkUgcHJldiA9IG1fcFBhcnNlci0+R2V0TGFzdFhSZWZPZmZzZXQoKTsNCi0gICAgICAgICAgICAgICAgbV9wWFJlZlN0cmVhbS0+bV9QcmV2T2Zmc2V0ID0gcHJldjsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBtX2lTdGFnZSA9IDEwOw0KLSAgICB9DQotICAgIGlmIChtX2lTdGFnZSA9PSAxMCkgew0KLSAgICAgICAgaWYgKChtX2R3RmxhZ3MgJiBGUERGQ1JFQVRFX0lOQ1JFTUVOVEFMKSA9PSAwKSB7DQotICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiVQREYtMS4iKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9PZmZzZXQgKz0gNzsNCi0gICAgICAgICAgICBGWF9JTlQzMiB2ZXJzaW9uID0gNzsNCi0gICAgICAgICAgICBpZiAobV9GaWxlVmVyc2lvbikgew0KLSAgICAgICAgICAgICAgICB2ZXJzaW9uID0gbV9GaWxlVmVyc2lvbjsNCi0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fcFBhcnNlcikgew0KLSAgICAgICAgICAgICAgICB2ZXJzaW9uID0gbV9wUGFyc2VyLT5HZXRGaWxlVmVyc2lvbigpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9JTlQzMiBsZW4gPSBtX0ZpbGUuQXBwZW5kRFdvcmQodmVyc2lvbiAlIDEwKTsNCi0gICAgICAgICAgICBpZiAobGVuIDwgMCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fT2Zmc2V0ICs9IGxlbjsNCi0gICAgICAgICAgICBpZiAoKGxlbiA9IG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIlxyXG4lXHhBMVx4QjNceEM1XHhEN1xyXG4iKSkpIDwgMCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fT2Zmc2V0ICs9IGxlbjsNCi0gICAgICAgICAgICBJbml0T2xkT2JqTnVtT2Zmc2V0cygpOw0KLSAgICAgICAgICAgIG1faVN0YWdlID0gMjA7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIElGWF9GaWxlUmVhZCogcFNyY0ZpbGUgPSBtX3BQYXJzZXItPkdldEZpbGVBY2Nlc3MoKTsNCi0gICAgICAgICAgICBtX09mZnNldCA9IHBTcmNGaWxlLT5HZXRTaXplKCk7DQotICAgICAgICAgICAgbV9Qb3MgPSAoRlhfTFBWT0lEKShGWF9VSU5UUFRSKW1fT2Zmc2V0Ow0KLSAgICAgICAgICAgIG1faVN0YWdlID0gMTU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKG1faVN0YWdlID09IDE1KSB7DQotICAgICAgICBpZiAoKG1fZHdGbGFncyAmIEZQREZDUkVBVEVfTk9fT1JJR0lOQUwpID09IDAgJiYgbV9Qb3MpIHsNCi0gICAgICAgICAgICBJRlhfRmlsZVJlYWQqIHBTcmNGaWxlID0gbV9wUGFyc2VyLT5HZXRGaWxlQWNjZXNzKCk7DQotICAgICAgICAgICAgRlhfQllURSBidWZmZXJbNDA5Nl07DQotICAgICAgICAgICAgRlhfRFdPUkQgc3JjX3NpemUgPSAoRlhfRFdPUkQpKEZYX1VJTlRQVFIpbV9Qb3M7DQotICAgICAgICAgICAgd2hpbGUgKHNyY19zaXplKSB7DQotICAgICAgICAgICAgICAgIEZYX0RXT1JEIGJsb2NrX3NpemUgPSBzcmNfc2l6ZSA+IDQwOTYgPyA0MDk2IDogc3JjX3NpemU7DQotICAgICAgICAgICAgICAgIGlmICghcFNyY0ZpbGUtPlJlYWRCbG9jayhidWZmZXIsIG1fT2Zmc2V0IC0gc3JjX3NpemUsIGJsb2NrX3NpemUpKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRCbG9jayhidWZmZXIsIGJsb2NrX3NpemUpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHNyY19zaXplIC09IGJsb2NrX3NpemU7DQotICAgICAgICAgICAgICAgIGlmIChwUGF1c2UgJiYgcFBhdXNlLT5OZWVkVG9QYXVzZU5vdygpKSB7DQotICAgICAgICAgICAgICAgICAgICBtX1BvcyA9IChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpc3JjX3NpemU7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmICgobV9kd0ZsYWdzICYgRlBERkNSRUFURV9OT19PUklHSU5BTCkgPT0gMCAmJiBtX3BQYXJzZXItPkdldExhc3RYUmVmT2Zmc2V0KCkgPT0gMCkgew0KLSAgICAgICAgICAgIEluaXRPbGRPYmpOdW1PZmZzZXRzKCk7DQotICAgICAgICAgICAgRlhfRFdPUkQgZHdFbmQgPSBtX3BQYXJzZXItPkdldExhc3RPYmpOdW0oKTsNCi0gICAgICAgICAgICBGWF9CT09MIGJPYmpTdG0gPSAobV9kd0ZsYWdzICYgRlBERkNSRUFURV9PQkpFQ1RTVFJFQU0pICE9IDA7DQotICAgICAgICAgICAgZm9yIChGWF9EV09SRCBvYmpudW0gPSAwOyBvYmpudW0gPD0gZHdFbmQ7IG9iam51bSsrKSB7DQotICAgICAgICAgICAgICAgIGlmIChtX3BQYXJzZXItPm1fVjVUeXBlW29iam51bV0gPT0gMCB8fCBtX3BQYXJzZXItPm1fVjVUeXBlW29iam51bV0gPT0gMjU1KSB7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBtX09iamVjdE9mZnNldFtvYmpudW1dID0gbV9wUGFyc2VyLT5tX0Nyb3NzUmVmW29iam51bV07DQotICAgICAgICAgICAgICAgIGlmIChiT2JqU3RtKSB7DQotICAgICAgICAgICAgICAgICAgICBtX3BYUmVmU3RyZWFtLT5BZGRPYmplY3ROdW1iZXJUb0luZGV4QXJyYXkob2JqbnVtKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoYk9ialN0bSkgew0KLSAgICAgICAgICAgICAgICBtX3BYUmVmU3RyZWFtLT5FbmRYUmVmU3RyZWFtKHRoaXMpOw0KLSAgICAgICAgICAgICAgICBtX3BYUmVmU3RyZWFtLT5TdGFydCgpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIG1faVN0YWdlID0gMjA7DQotICAgIH0NCi0gICAgSW5pdE5ld09iak51bU9mZnNldHMoKTsNCi0gICAgcmV0dXJuIG1faVN0YWdlOw0KLX0NCi1GWF9JTlQzMiBDUERGX0NyZWF0b3I6OldyaXRlRG9jX1N0YWdlMihJRlhfUGF1c2UgKnBQYXVzZSkNCi17DQotICAgIEZYU1lTX2Fzc2VydChtX2lTdGFnZSA+PSAyMCB8fCBtX2lTdGFnZSA8IDMwKTsNCi0gICAgaWYgKG1faVN0YWdlID09IDIwKSB7DQotICAgICAgICBpZiAoKG1fZHdGbGFncyAmIEZQREZDUkVBVEVfSU5DUkVNRU5UQUwpID09IDAgJiYgbV9wUGFyc2VyKSB7DQotICAgICAgICAgICAgbV9Qb3MgPSAoRlhfTFBWT0lEKShGWF9VSU5UUFRSKTA7DQotICAgICAgICAgICAgbV9pU3RhZ2UgPSAyMTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbV9pU3RhZ2UgPSAyNTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAobV9pU3RhZ2UgPT0gMjEpIHsNCi0gICAgICAgIEZYX0lOVDMyIGlSZXQgPSBXcml0ZU9sZE9ianMocFBhdXNlKTsNCi0gICAgICAgIGlmIChpUmV0KSB7DQotICAgICAgICAgICAgcmV0dXJuIGlSZXQ7DQotICAgICAgICB9DQotICAgICAgICBtX2lTdGFnZSA9IDI1Ow0KLSAgICB9DQotICAgIGlmIChtX2lTdGFnZSA9PSAyNSkgew0KLSAgICAgICAgbV9Qb3MgPSAoRlhfTFBWT0lEKShGWF9VSU5UUFRSKTA7DQotICAgICAgICBtX2lTdGFnZSA9IDI2Ow0KLSAgICB9DQotICAgIGlmIChtX2lTdGFnZSA9PSAyNikgew0KLSAgICAgICAgRlhfSU5UMzIgaVJldCA9IFdyaXRlTmV3T2JqcygobV9kd0ZsYWdzICYgRlBERkNSRUFURV9JTkNSRU1FTlRBTCkgIT0gMCwgcFBhdXNlKTsNCi0gICAgICAgIGlmIChpUmV0KSB7DQotICAgICAgICAgICAgcmV0dXJuIGlSZXQ7DQotICAgICAgICB9DQotICAgICAgICBtX2lTdGFnZSA9IDI3Ow0KLSAgICB9DQotICAgIGlmIChtX2lTdGFnZSA9PSAyNykgew0KLSAgICAgICAgaWYgKE5VTEwgIT0gbV9wRW5jcnlwdERpY3QgJiYgMCA9PSBtX3BFbmNyeXB0RGljdC0+R2V0T2JqTnVtKCkpIHsNCi0gICAgICAgICAgICBtX2R3TGFzdE9iak51bSArPSAxOw0KLSAgICAgICAgICAgIEZYX0ZJTEVTSVpFIHNhdmVPZmZzZXQgPSBtX09mZnNldDsNCi0gICAgICAgICAgICBpZiAoV3JpdGVJbmRpcmVjdE9iaihtX2R3TGFzdE9iak51bSwgbV9wRW5jcnlwdERpY3QpIDwgMCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fT2JqZWN0T2Zmc2V0LkFkZChtX2R3TGFzdE9iak51bSwgMSk7DQotICAgICAgICAgICAgbV9PYmplY3RPZmZzZXRbbV9kd0xhc3RPYmpOdW1dID0gc2F2ZU9mZnNldDsNCi0gICAgICAgICAgICBtX09iamVjdFNpemUuQWRkKG1fZHdMYXN0T2JqTnVtLCAxKTsNCi0gICAgICAgICAgICBtX09iamVjdFNpemVbbV9kd0xhc3RPYmpOdW1dID0gbV9PZmZzZXQgLSBzYXZlT2Zmc2V0Ow0KLSAgICAgICAgICAgIG1fZHdFbnJ5cHRPYmpOdW0gPSBtX2R3TGFzdE9iak51bTsNCi0gICAgICAgICAgICBpZiAobV9kd0ZsYWdzICYgRlBERkNSRUFURV9JTkNSRU1FTlRBTCkgew0KLSAgICAgICAgICAgICAgICBtX05ld09iak51bUFycmF5LkFkZChtX2R3TGFzdE9iak51bSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9pU3RhZ2UgPSA4MDsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9pU3RhZ2U7DQotfQ0KLUZYX0lOVDMyIENQREZfQ3JlYXRvcjo6V3JpdGVEb2NfU3RhZ2UzKElGWF9QYXVzZSAqcFBhdXNlKQ0KLXsNCi0gICAgRlhTWVNfYXNzZXJ0KG1faVN0YWdlID49IDgwIHx8IG1faVN0YWdlIDwgOTApOw0KLSAgICBGWF9EV09SRCBkd0xhc3RPYmpOdW0gPSBtX2R3TGFzdE9iak51bTsNCi0gICAgaWYgKG1faVN0YWdlID09IDgwKSB7DQotICAgICAgICBtX1hyZWZTdGFydCA9IG1fT2Zmc2V0Ow0KLSAgICAgICAgaWYgKG1fZHdGbGFncyAmIEZQREZDUkVBVEVfT0JKRUNUU1RSRUFNKSB7DQotICAgICAgICAgICAgbV9wWFJlZlN0cmVhbS0+RW5kKHRoaXMsIFRSVUUpOw0KLSAgICAgICAgICAgIG1fWHJlZlN0YXJ0ID0gbV9wWFJlZlN0cmVhbS0+bV9QcmV2T2Zmc2V0Ow0KLSAgICAgICAgICAgIG1faVN0YWdlID0gOTA7DQotICAgICAgICB9IGVsc2UgaWYgKChtX2R3RmxhZ3MgJiBGUERGQ1JFQVRFX0lOQ1JFTUVOVEFMKSA9PSAwIHx8ICFtX3BQYXJzZXItPklzWFJlZlN0cmVhbSgpKSB7DQotICAgICAgICAgICAgaWYgKChtX2R3RmxhZ3MgJiBGUERGQ1JFQVRFX0lOQ1JFTUVOVEFMKSA9PSAwIHx8IG1fcFBhcnNlci0+R2V0TGFzdFhSZWZPZmZzZXQoKSA9PSAwKSB7DQotICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIHN0cjsNCi0gICAgICAgICAgICAgICAgc3RyID0gbV9PYmplY3RPZmZzZXQuR2V0UHRyQXQoMSkgPyBGWF9CU1RSQygieHJlZlxyXG4iKSA6IEZYX0JTVFJDKCJ4cmVmXHJcbjAgMVxyXG4wMDAwMDAwMDAwIDY1NTM2IGZcclxuIik7DQotICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKHN0cikgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbV9Qb3MgPSAoRlhfTFBWT0lEKShGWF9VSU5UUFRSKTE7DQotICAgICAgICAgICAgICAgIG1faVN0YWdlID0gODE7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoInhyZWZcclxuIikpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG1fUG9zID0gKEZYX0xQVk9JRCkoRlhfVUlOVFBUUikwOw0KLSAgICAgICAgICAgICAgICBtX2lTdGFnZSA9IDgyOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbV9pU3RhZ2UgPSA5MDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAobV9pU3RhZ2UgPT0gODEpIHsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIHN0cjsNCi0gICAgICAgIEZYX0RXT1JEIGkgPSAoRlhfRFdPUkQpKEZYX1VJTlRQVFIpbV9Qb3MsIGo7DQotICAgICAgICB3aGlsZSAoaSA8PSBkd0xhc3RPYmpOdW0pIHsNCi0gICAgICAgICAgICB3aGlsZSAoaSA8PSBkd0xhc3RPYmpOdW0gJiYgIW1fT2JqZWN0T2Zmc2V0LkdldFB0ckF0KGkpKSB7DQotICAgICAgICAgICAgICAgIGkrKzsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGkgPiBkd0xhc3RPYmpOdW0pIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGogPSBpOw0KLSAgICAgICAgICAgIHdoaWxlIChqIDw9IGR3TGFzdE9iak51bSAmJiBtX09iamVjdE9mZnNldC5HZXRQdHJBdChqKSkgew0KLSAgICAgICAgICAgICAgICBqKys7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChpID09IDEpIHsNCi0gICAgICAgICAgICAgICAgc3RyLkZvcm1hdCgiMCAlZFxyXG4wMDAwMDAwMDAwIDY1NTM2IGZcclxuIiwgaik7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgc3RyLkZvcm1hdCgiJWQgJWRcclxuIiwgaSwgaiAtIGkpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZEJsb2NrKChGWF9MUENTVFIpc3RyLCBzdHIuR2V0TGVuZ3RoKCkpIDwgMCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHdoaWxlIChpIDwgaikgew0KLSAgICAgICAgICAgICAgICBzdHIuRm9ybWF0KCIlMDEwZCAwMDAwMCBuXHJcbiIsIG1fT2JqZWN0T2Zmc2V0W2kgKytdKTsNCi0gICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRCbG9jaygoRlhfTFBDU1RSKXN0ciwgc3RyLkdldExlbmd0aCgpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoaSA+IGR3TGFzdE9iak51bSkgew0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKHBQYXVzZSAmJiBwUGF1c2UtPk5lZWRUb1BhdXNlTm93KCkpIHsNCi0gICAgICAgICAgICAgICAgbV9Qb3MgPSAoRlhfTFBWT0lEKShGWF9VSU5UUFRSKWk7DQotICAgICAgICAgICAgICAgIHJldHVybiAxOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIG1faVN0YWdlID0gOTA7DQotICAgIH0NCi0gICAgaWYgKG1faVN0YWdlID09IDgyKSB7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyBzdHI7DQotICAgICAgICBGWF9JTlQzMiBpQ291bnQgPSBtX05ld09iak51bUFycmF5LkdldFNpemUoKTsNCi0gICAgICAgIEZYX0lOVDMyIGkgPSAoRlhfSU5UMzIpKEZYX1VJTlRQVFIpbV9Qb3M7DQotICAgICAgICB3aGlsZSAoaSA8IGlDb3VudCkgew0KLSAgICAgICAgICAgIEZYX0lOVDMyIGogPSBpOw0KLSAgICAgICAgICAgIEZYX0RXT1JEIG9iam51bSA9IG1fTmV3T2JqTnVtQXJyYXkuRWxlbWVudEF0KGkpOw0KLSAgICAgICAgICAgIHdoaWxlIChqIDwgaUNvdW50KSB7DQotICAgICAgICAgICAgICAgIGlmICgrK2ogPT0gaUNvdW50KSB7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBGWF9EV09SRCBkd0N1cnJlbnQgPSBtX05ld09iak51bUFycmF5LkVsZW1lbnRBdChqKTsNCi0gICAgICAgICAgICAgICAgaWYgKGR3Q3VycmVudCAtIG9iam51bSA+IDEpIHsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG9iam51bSA9IGR3Q3VycmVudDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgb2JqbnVtID0gbV9OZXdPYmpOdW1BcnJheS5FbGVtZW50QXQoaSk7DQotICAgICAgICAgICAgaWYgKG9iam51bSA9PSAxKSB7DQotICAgICAgICAgICAgICAgIHN0ci5Gb3JtYXQoIjAgJWRcclxuMDAwMDAwMDAwMCA2NTUzNiBmXHJcbiIsIGogLSBpICsgMSk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgc3RyLkZvcm1hdCgiJWQgJWRcclxuIiwgb2JqbnVtLCBqIC0gaSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kQmxvY2soKEZYX0xQQ1NUUilzdHIsIHN0ci5HZXRMZW5ndGgoKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgd2hpbGUgKGkgPCBqKSB7DQotICAgICAgICAgICAgICAgIG9iam51bSA9IG1fTmV3T2JqTnVtQXJyYXkuRWxlbWVudEF0KGkrKyk7DQotICAgICAgICAgICAgICAgIHN0ci5Gb3JtYXQoIiUwMTBkIDAwMDAwIG5cclxuIiwgbV9PYmplY3RPZmZzZXRbb2JqbnVtXSk7DQotICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kQmxvY2soKEZYX0xQQ1NUUilzdHIsIHN0ci5HZXRMZW5ndGgoKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKHBQYXVzZSAmJiAoaSAlIDEwMCkgPT0gMCAmJiBwUGF1c2UtPk5lZWRUb1BhdXNlTm93KCkpIHsNCi0gICAgICAgICAgICAgICAgbV9Qb3MgPSAoRlhfTFBWT0lEKShGWF9VSU5UUFRSKWk7DQotICAgICAgICAgICAgICAgIHJldHVybiAxOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIG1faVN0YWdlID0gOTA7DQotICAgIH0NCi0gICAgcmV0dXJuIG1faVN0YWdlOw0KLX0NCi1zdGF0aWMgRlhfSU5UMzIgX091dFB1dEluZGV4KENGWF9GaWxlQnVmZmVyQXJjaGl2ZSogcEZpbGUsIEZYX0ZJTEVTSVpFIG9mZnNldCkNCi17DQotICAgIEZYU1lTX2Fzc2VydChwRmlsZSk7DQotICAgIGlmIChzaXplb2Yob2Zmc2V0KSA+IDQpIHsNCi0gICAgICAgIGlmIChGWF9HRVRCWVRFT0ZGU0VUMzIob2Zmc2V0KSkgew0KLSAgICAgICAgICAgIGlmIChwRmlsZS0+QXBwZW5kQnl0ZShGWF9HRVRCWVRFT0ZGU0VUNTYob2Zmc2V0KSkgPCAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRCeXRlKEZYX0dFVEJZVEVPRkZTRVQ0OChvZmZzZXQpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAocEZpbGUtPkFwcGVuZEJ5dGUoRlhfR0VUQllURU9GRlNFVDQwKG9mZnNldCkpIDwgMCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChwRmlsZS0+QXBwZW5kQnl0ZShGWF9HRVRCWVRFT0ZGU0VUMzIob2Zmc2V0KSkgPCAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKHBGaWxlLT5BcHBlbmRCeXRlKEZYX0dFVEJZVEVPRkZTRVQyNChvZmZzZXQpKSA8IDApIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBpZiAocEZpbGUtPkFwcGVuZEJ5dGUoRlhfR0VUQllURU9GRlNFVDE2KG9mZnNldCkpIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIGlmIChwRmlsZS0+QXBwZW5kQnl0ZShGWF9HRVRCWVRFT0ZGU0VUOChvZmZzZXQpKSA8IDApIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBpZiAocEZpbGUtPkFwcGVuZEJ5dGUoRlhfR0VUQllURU9GRlNFVDAob2Zmc2V0KSkgPCAwKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgaWYgKHBGaWxlLT5BcHBlbmRCeXRlKDApIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIHJldHVybiAwOw0KLX0NCi1GWF9JTlQzMiBDUERGX0NyZWF0b3I6OldyaXRlRG9jX1N0YWdlNChJRlhfUGF1c2UgKnBQYXVzZSkNCi17DQotICAgIEZYU1lTX2Fzc2VydChtX2lTdGFnZSA+PSA5MCk7DQotICAgIGlmICgobV9kd0ZsYWdzICYgRlBERkNSRUFURV9PQkpFQ1RTVFJFQU0pID09IDApIHsNCi0gICAgICAgIEZYX0JPT0wgYlhSZWZTdHJlYW0gPSAobV9kd0ZsYWdzICYgRlBERkNSRUFURV9JTkNSRU1FTlRBTCkgIT0gMCAmJiBtX3BQYXJzZXItPklzWFJlZlN0cmVhbSgpOw0KLSAgICAgICAgaWYgKCFiWFJlZlN0cmVhbSkgew0KLSAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCJ0cmFpbGVyXHJcbjw8IikpIDwgMCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZERXb3JkKG1fcERvY3VtZW50LT5tX0xhc3RPYmpOdW0gKyAxKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiIDAgb2JqIDw8IikpIDwgMCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fcFBhcnNlcikgew0KLSAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcCA9IG1fcFBhcnNlci0+bV9wVHJhaWxlcjsNCi0gICAgICAgICAgICBGWF9QT1NJVElPTiBwb3MgPSBwLT5HZXRTdGFydFBvcygpOw0KLSAgICAgICAgICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcga2V5Ow0KLSAgICAgICAgICAgICAgICBDUERGX09iamVjdCogcFZhbHVlID0gcC0+R2V0TmV4dEVsZW1lbnQocG9zLCBrZXkpOw0KLSAgICAgICAgICAgICAgICBpZiAoa2V5ID09IEZYX0JTVFJDKCJFbmNyeXB0IikgfHwga2V5ID09IEZYX0JTVFJDKCJTaXplIikgfHwga2V5ID09IEZYX0JTVFJDKCJGaWx0ZXIiKSB8fA0KLSAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9PSBGWF9CU1RSQygiSW5kZXgiKSB8fCBrZXkgPT0gRlhfQlNUUkMoIkxlbmd0aCIpIHx8IGtleSA9PSBGWF9CU1RSQygiUHJldiIpIHx8DQotICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09IEZYX0JTVFJDKCJXIikgfHwga2V5ID09IEZYX0JTVFJDKCJYUmVmU3RtIikgfHwga2V5ID09IEZYX0JTVFJDKCJJRCIpKSB7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZygoRlhfQlNUUkMoIi8iKSkpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKFBERl9OYW1lRW5jb2RlKGtleSkpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChwVmFsdWUtPkdldE9iak51bSgpKSB7DQotICAgICAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiICIpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZERXb3JkKHBWYWx1ZS0+R2V0T2JqTnVtKCkpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgMCBSICIpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBGWF9GSUxFU0laRSBvZmZzZXQgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKFBERl9DcmVhdG9yQXBwZW5kT2JqZWN0KHBWYWx1ZSwgJm1fRmlsZSwgb2Zmc2V0KSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCJcclxuL1Jvb3QgIikpIDwgMCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kRFdvcmQobV9wRG9jdW1lbnQtPm1fcFJvb3REaWN0LT5HZXRPYmpOdW0oKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAwIFJcclxuIikpIDwgMCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChtX3BEb2N1bWVudC0+bV9wSW5mb0RpY3QpIHsNCi0gICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIi9JbmZvICIpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZERXb3JkKG1fcERvY3VtZW50LT5tX3BJbmZvRGljdC0+R2V0T2JqTnVtKCkpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgMCBSXHJcbiIpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX3BFbmNyeXB0RGljdCkgew0KLSAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIvRW5jcnlwdCIpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9EV09SRCBkd09iak51bSA9IG1fcEVuY3J5cHREaWN0LT5HZXRPYmpOdW0oKTsNCi0gICAgICAgICAgICBpZiAoZHdPYmpOdW0gPT0gMCkgew0KLSAgICAgICAgICAgICAgICBkd09iak51bSA9IG1fcERvY3VtZW50LT5HZXRMYXN0T2JqTnVtKCkgKyAxOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiICIpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZERXb3JkKGR3T2JqTnVtKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiIDAgUiAiKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiL1NpemUgIikpIDwgMCkgew0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kRFdvcmQobV9kd0xhc3RPYmpOdW0gKyAoYlhSZWZTdHJlYW0gPyAyIDogMSkpIDwgMCkgew0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICgobV9kd0ZsYWdzICYgRlBERkNSRUFURV9JTkNSRU1FTlRBTCkgIT0gMCkgew0KLSAgICAgICAgICAgIEZYX0ZJTEVTSVpFIHByZXYgPSBtX3BQYXJzZXItPkdldExhc3RYUmVmT2Zmc2V0KCk7DQotICAgICAgICAgICAgaWYgKHByZXYpIHsNCi0gICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIi9QcmV2ICIpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBGWF9DSEFSIG9mZnNldF9idWZbMjBdOw0KLSAgICAgICAgICAgICAgICBGWFNZU19tZW1zZXQzMihvZmZzZXRfYnVmLCAwLCBzaXplb2Yob2Zmc2V0X2J1ZikpOw0KLSAgICAgICAgICAgICAgICBGWFNZU19pNjR0b2EocHJldiwgb2Zmc2V0X2J1ZiwgMTApOw0KLSAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZEJsb2NrKG9mZnNldF9idWYsIEZYU1lTX3N0cmxlbihvZmZzZXRfYnVmKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9wSURBcnJheSkgew0KLSAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKChGWF9CU1RSQygiL0lEIikpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9GSUxFU0laRSBvZmZzZXQgPSAwOw0KLSAgICAgICAgICAgIGlmIChQREZfQ3JlYXRvckFwcGVuZE9iamVjdChtX3BJREFycmF5LCAmbV9GaWxlLCBvZmZzZXQpIDwgMCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCFiWFJlZlN0cmVhbSkgew0KLSAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCI+PiIpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIi9XWzAgNCAxXS9JbmRleFsiKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKChtX2R3RmxhZ3MgJiBGUERGQ1JFQVRFX0lOQ1JFTUVOVEFMKSAhPSAwICYmIG1fcFBhcnNlciAmJiBtX3BQYXJzZXItPkdldExhc3RYUmVmT2Zmc2V0KCkgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBGWF9EV09SRCBpID0gMDsNCi0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1fZHdMYXN0T2JqTnVtOyBpKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmICghbV9PYmplY3RPZmZzZXQuR2V0UHRyQXQoaSkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kRFdvcmQoaSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAxICIpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIl0vTGVuZ3RoICIpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZERXb3JkKG1fZHdMYXN0T2JqTnVtICogNSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIj4+c3RyZWFtXHJcbiIpKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9kd0xhc3RPYmpOdW07IGkrKykgew0KLSAgICAgICAgICAgICAgICAgICAgRlhfRklMRVNJWkUqIG9mZnNldCA9IG1fT2JqZWN0T2Zmc2V0LkdldFB0ckF0KGkpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFvZmZzZXQpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIF9PdXRQdXRJbmRleCgmbV9GaWxlLCAqb2Zmc2V0KTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGludCBjb3VudCA9IG1fTmV3T2JqTnVtQXJyYXkuR2V0U2l6ZSgpOw0KLSAgICAgICAgICAgICAgICBGWF9JTlQzMiBpID0gMDsNCi0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIG9iam51bSA9IG1fTmV3T2JqTnVtQXJyYXkuRWxlbWVudEF0KGkpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmREV29yZChvYmpudW0pIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgMSAiKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCJdL0xlbmd0aCAiKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmREV29yZChjb3VudCAqIDUpIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCI+PnN0cmVhbVxyXG4iKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIG9iam51bSA9IG1fTmV3T2JqTnVtQXJyYXkuRWxlbWVudEF0KGkpOw0KLSAgICAgICAgICAgICAgICAgICAgRlhfRklMRVNJWkUgb2Zmc2V0ID0gbV9PYmplY3RPZmZzZXRbb2JqbnVtXTsNCi0gICAgICAgICAgICAgICAgICAgIF9PdXRQdXRJbmRleCgmbV9GaWxlLCBvZmZzZXQpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCJcclxuZW5kc3RyZWFtIikpIDwgMCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCJcclxuc3RhcnR4cmVmXHJcbiIpKSA8IDApIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBGWF9DSEFSIG9mZnNldF9idWZbMjBdOw0KLSAgICBGWFNZU19tZW1zZXQzMihvZmZzZXRfYnVmLCAwLCBzaXplb2Yob2Zmc2V0X2J1ZikpOw0KLSAgICBGWFNZU19pNjR0b2EobV9YcmVmU3RhcnQsIG9mZnNldF9idWYsIDEwKTsNCi0gICAgaWYgKG1fRmlsZS5BcHBlbmRCbG9jayhvZmZzZXRfYnVmLCBGWFNZU19zdHJsZW4ob2Zmc2V0X2J1ZikpIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCJcclxuJSVFT0ZcclxuIikpIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIG1fRmlsZS5GbHVzaCgpOw0KLSAgICByZXR1cm4gbV9pU3RhZ2UgPSAxMDA7DQotfQ0KLXZvaWQgQ1BERl9DcmVhdG9yOjpDbGVhcigpDQotew0KLSAgICBpZiAobV9wWFJlZlN0cmVhbSkgew0KLSAgICAgICAgZGVsZXRlIG1fcFhSZWZTdHJlYW07DQotICAgICAgICBtX3BYUmVmU3RyZWFtID0gTlVMTDsNCi0gICAgfQ0KLSAgICBtX0ZpbGUuQ2xlYXIoKTsNCi0gICAgbV9OZXdPYmpOdW1BcnJheS5SZW1vdmVBbGwoKTsNCi0gICAgaWYgKG1fcElEQXJyYXkpIHsNCi0gICAgICAgIG1fcElEQXJyYXktPlJlbGVhc2UoKTsNCi0gICAgICAgIG1fcElEQXJyYXkgPSBOVUxMOw0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BERl9DcmVhdG9yOjpDcmVhdGUoRlhfTFBDU1RSIGZpbGVuYW1lLCBGWF9EV09SRCBmbGFncykNCi17DQotICAgIGlmICghbV9GaWxlLkF0dGFjaEZpbGUoZmlsZW5hbWUpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgRlhfQk9PTCBiUmV0ID0gQ3JlYXRlKGZsYWdzKTsNCi0gICAgaWYgKCFiUmV0IHx8ICEoZmxhZ3MgJiBGUERGQ1JFQVRFX1BST0dSRVNTSVZFKSkgew0KLSAgICAgICAgQ2xlYXIoKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gYlJldDsNCi19DQotRlhfQk9PTCBDUERGX0NyZWF0b3I6OkNyZWF0ZShGWF9MUENXU1RSIGZpbGVuYW1lLCBGWF9EV09SRCBmbGFncykNCi17DQotICAgIGlmICghbV9GaWxlLkF0dGFjaEZpbGUoZmlsZW5hbWUpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgRlhfQk9PTCBiUmV0ID0gQ3JlYXRlKGZsYWdzKTsNCi0gICAgaWYgKCFiUmV0IHx8ICEoZmxhZ3MgJiBGUERGQ1JFQVRFX1BST0dSRVNTSVZFKSkgew0KLSAgICAgICAgQ2xlYXIoKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gYlJldDsNCi19DQotRlhfQk9PTCBDUERGX0NyZWF0b3I6OkNyZWF0ZShJRlhfU3RyZWFtV3JpdGUqIHBGaWxlLCBGWF9EV09SRCBmbGFncykNCi17DQotICAgIGlmICghcEZpbGUpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoIW1fRmlsZS5BdHRhY2hGaWxlKHBGaWxlLCBGQUxTRSkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gQ3JlYXRlKGZsYWdzKTsNCi19DQotRlhfQk9PTCBDUERGX0NyZWF0b3I6OkNyZWF0ZShGWF9EV09SRCBmbGFncykNCi17DQotICAgIG1fZHdGbGFncyA9IGZsYWdzOw0KLSAgICBtX2lTdGFnZSA9IDA7DQotICAgIG1fT2Zmc2V0ID0gMDsNCi0gICAgbV9kd0xhc3RPYmpOdW0gPSBtX3BEb2N1bWVudC0+R2V0TGFzdE9iak51bSgpOw0KLSAgICBtX09iamVjdE9mZnNldC5DbGVhcigpOw0KLSAgICBtX09iamVjdFNpemUuQ2xlYXIoKTsNCi0gICAgbV9OZXdPYmpOdW1BcnJheS5SZW1vdmVBbGwoKTsNCi0gICAgSW5pdElEKCk7DQotICAgIGlmIChmbGFncyAmIEZQREZDUkVBVEVfUFJPR1JFU1NJVkUpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIHJldHVybiBDb250aW51ZShOVUxMKSA+IC0xOw0KLX0NCi12b2lkIENQREZfQ3JlYXRvcjo6SW5pdElEKEZYX0JPT0wgYkRlZmF1bHQgKQ0KLXsNCi0gICAgQ1BERl9BcnJheSogcE9sZElEQXJyYXkgPSBtX3BQYXJzZXIgPyBtX3BQYXJzZXItPkdldElEQXJyYXkoKSA6IE5VTEw7DQotICAgIEZYX0JPT0wgYk5ld0lkID0gIW1fcElEQXJyYXk7DQotICAgIGlmICghbV9wSURBcnJheSkgew0KLSAgICAgICAgRlhfTFBEV09SRCBwQnVmZmVyID0gTlVMTDsNCi0gICAgICAgIG1fcElEQXJyYXkgPSBDUERGX0FycmF5OjpDcmVhdGUoKTsNCi0gICAgICAgIENQREZfT2JqZWN0KiBwSUQxID0gcE9sZElEQXJyYXktPkdldEVsZW1lbnQoMCk7DQotICAgICAgICBpZiAocElEMSkgew0KLSAgICAgICAgICAgIG1fcElEQXJyYXktPkFkZChwSUQxLT5DbG9uZSgpKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcEJ1ZmZlciA9IEZYX0FsbG9jKEZYX0RXT1JELCA0KTsNCi0gICAgICAgICAgICBQREZfR2VuZXJhdGVGaWxlSUQoKEZYX0RXT1JEKShGWF9VSU5UUFRSKXRoaXMsIG1fZHdMYXN0T2JqTnVtLCBwQnVmZmVyKTsNCi0gICAgICAgICAgICBDRlhfQnl0ZVN0cmluZ0MgYnNCdWZmZXIoKEZYX0xQQ0JZVEUpcEJ1ZmZlciwgNCAqIHNpemVvZihGWF9EV09SRCkpOw0KLSAgICAgICAgICAgIG1fcElEQXJyYXktPkFkZChDUERGX1N0cmluZzo6Q3JlYXRlKGJzQnVmZmVyLCBUUlVFKSwgbV9wRG9jdW1lbnQpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBCdWZmZXIpIHsNCi0gICAgICAgICAgICBGWF9GcmVlKHBCdWZmZXIpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmICghYkRlZmF1bHQpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAocE9sZElEQXJyYXkpIHsNCi0gICAgICAgIENQREZfT2JqZWN0KiBwSUQyID0gcE9sZElEQXJyYXktPkdldEVsZW1lbnQoMSk7DQotICAgICAgICBpZiAoKG1fZHdGbGFncyAmIEZQREZDUkVBVEVfSU5DUkVNRU5UQUwpICYmIG1fcEVuY3J5cHREaWN0ICYmIHBJRDIpIHsNCi0gICAgICAgICAgICBtX3BJREFycmF5LT5BZGQocElEMi0+Q2xvbmUoKSk7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfTFBEV09SRCBwQnVmZmVyID0gRlhfQWxsb2MoRlhfRFdPUkQsIDQpOw0KLSAgICAgICAgUERGX0dlbmVyYXRlRmlsZUlEKChGWF9EV09SRCkoRlhfVUlOVFBUUil0aGlzLCBtX2R3TGFzdE9iak51bSwgcEJ1ZmZlcik7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZ0MgYnNCdWZmZXIoKEZYX0xQQ0JZVEUpcEJ1ZmZlciwgNCAqIHNpemVvZihGWF9EV09SRCkpOw0KLSAgICAgICAgbV9wSURBcnJheS0+QWRkKENQREZfU3RyaW5nOjpDcmVhdGUoYnNCdWZmZXIsIFRSVUUpLCBtX3BEb2N1bWVudCk7DQotICAgICAgICBGWF9GcmVlKHBCdWZmZXIpOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fcElEQXJyYXktPkFkZChtX3BJREFycmF5LT5HZXRFbGVtZW50KDApLT5DbG9uZSgpKTsNCi0gICAgaWYgKG1fcEVuY3J5cHREaWN0ICYmICFwT2xkSURBcnJheSAmJiBtX3BQYXJzZXIgJiYgYk5ld0lkKSB7DQotICAgICAgICBpZiAobV9wRW5jcnlwdERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiRmlsdGVyIikpID09IEZYX0JTVFJDKCJTdGFuZGFyZCIpKSB7DQotICAgICAgICAgICAgQ1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlciBoYW5kbGVyOw0KLSAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIHVzZXJfcGFzcyA9IG1fcFBhcnNlci0+R2V0UGFzc3dvcmQoKTsNCi0gICAgICAgICAgICBGWF9EV09SRCBmbGFnID0gUERGX0VOQ1JZUFRfQ09OVEVOVDsNCi0gICAgICAgICAgICBoYW5kbGVyLk9uQ3JlYXRlKG1fcEVuY3J5cHREaWN0LCBtX3BJREFycmF5LCAoRlhfTFBDQllURSl1c2VyX3Bhc3MsIHVzZXJfcGFzcy5HZXRMZW5ndGgoKSwgZmxhZyk7DQotICAgICAgICAgICAgaWYgKG1fcENyeXB0b0hhbmRsZXIgJiYgbV9iTmV3Q3J5cHRvKSB7DQotICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3BDcnlwdG9IYW5kbGVyOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBtX3BDcnlwdG9IYW5kbGVyID0gRlhfTkVXIENQREZfU3RhbmRhcmRDcnlwdG9IYW5kbGVyOw0KLSAgICAgICAgICAgIG1fcENyeXB0b0hhbmRsZXItPkluaXQobV9wRW5jcnlwdERpY3QsICZoYW5kbGVyKTsNCi0gICAgICAgICAgICBtX2JOZXdDcnlwdG8gPSBUUlVFOw0KLSAgICAgICAgICAgIG1fYlNlY3VyaXR5Q2hhbmdlZCA9IFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi19DQotRlhfSU5UMzIgQ1BERl9DcmVhdG9yOjpDb250aW51ZShJRlhfUGF1c2UgKnBQYXVzZSkNCi17DQotICAgIGlmIChtX2lTdGFnZSA8IDApIHsNCi0gICAgICAgIHJldHVybiBtX2lTdGFnZTsNCi0gICAgfQ0KLSAgICBGWF9JTlQzMiBpUmV0Ow0KLSAgICB3aGlsZSAobV9pU3RhZ2UgPCAxMDApIHsNCi0gICAgICAgIGlmIChtX2lTdGFnZSA8IDIwKSB7DQotICAgICAgICAgICAgaVJldCA9IFdyaXRlRG9jX1N0YWdlMShwUGF1c2UpOw0KLSAgICAgICAgfSBlbHNlIGlmIChtX2lTdGFnZSA8IDMwKSB7DQotICAgICAgICAgICAgaVJldCA9IFdyaXRlRG9jX1N0YWdlMihwUGF1c2UpOw0KLSAgICAgICAgfSBlbHNlIGlmIChtX2lTdGFnZSA8IDkwKSB7DQotICAgICAgICAgICAgaVJldCA9IFdyaXRlRG9jX1N0YWdlMyhwUGF1c2UpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpUmV0ID0gV3JpdGVEb2NfU3RhZ2U0KHBQYXVzZSk7DQotICAgICAgICB9DQotICAgICAgICBpZiAoaVJldCA8IG1faVN0YWdlKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKGlSZXQgPCAxIHx8IG1faVN0YWdlID09IDEwMCkgew0KLSAgICAgICAgbV9pU3RhZ2UgPSAtMTsNCi0gICAgICAgIENsZWFyKCk7DQotICAgICAgICByZXR1cm4gaVJldCA+IDk5ID8gMCA6IChpUmV0IDwgMSA/IC0xIDogaVJldCk7DQotICAgIH0NCi0gICAgcmV0dXJuIG1faVN0YWdlOw0KLX0NCi1GWF9CT09MIENQREZfQ3JlYXRvcjo6U2V0RmlsZVZlcnNpb24oRlhfSU5UMzIgZmlsZVZlcnNpb24gKQ0KLXsNCi0gICAgaWYgKGZpbGVWZXJzaW9uIDwgMTAgfHwgZmlsZVZlcnNpb24gPiAxNykgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fRmlsZVZlcnNpb24gPSBmaWxlVmVyc2lvbjsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ1BERl9DcmVhdG9yOjpSZXNldFN0YW5kYXJkU2VjdXJpdHkoKQ0KLXsNCi0gICAgaWYgKChtX2JTdGFuZGFyZFNlY3VyaXR5IHx8IG1fYk5ld0NyeXB0bykgJiYgbV9wQ3J5cHRvSGFuZGxlcikgew0KLSAgICAgICAgZGVsZXRlIG1fcENyeXB0b0hhbmRsZXI7DQotICAgICAgICBtX3BDcnlwdG9IYW5kbGVyID0gTlVMTDsNCi0gICAgfQ0KLSAgICBtX2JOZXdDcnlwdG8gPSBGQUxTRTsNCi0gICAgaWYgKCFtX2JTdGFuZGFyZFNlY3VyaXR5KSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKG1fcEVuY3J5cHREaWN0KSB7DQotICAgICAgICBtX3BFbmNyeXB0RGljdC0+UmVsZWFzZSgpOw0KLSAgICAgICAgbV9wRW5jcnlwdERpY3QgPSBOVUxMOw0KLSAgICB9DQotICAgIG1fYlN0YW5kYXJkU2VjdXJpdHkgPSBGQUxTRTsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3NlcmlhbC5oIgorI2luY2x1ZGUgImVkaXRpbnQuaCIKKyNkZWZpbmUgUERGX09CSkVDVFNUUkVBTV9NQVhMRU5HVEgJKDI1NiAqIDEwMjQpCisjZGVmaW5lIFBERl9YUkVGU1RSRUFNX01BWFNJWkUJCTEwMDAwCitleHRlcm4gdm9pZCBGbGF0ZUVuY29kZShjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfZGF0YSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSk7CitleHRlcm4gdm9pZCBGbGF0ZUVuY29kZShGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBpbnQgcHJlZGljdG9yLCBpbnQgQ29sb3JzLCBpbnQgQml0c1BlckNvbXBvbmVudCwgaW50IENvbHVtbnMsCisgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUmIGRlc3RfYnVmLCBGWF9EV09SRCYgZGVzdF9zaXplKTsKK2V4dGVybiBGWF9CT09MIElzU2lnbmF0dXJlRGljdChjb25zdCBDUERGX0RpY3Rpb25hcnkqIHBEaWN0KTsKK0ZYX0lOVDMyIFBERl9DcmVhdG9yQXBwZW5kT2JqZWN0KGNvbnN0IENQREZfT2JqZWN0KiBwT2JqLCBDRlhfRmlsZUJ1ZmZlckFyY2hpdmUgKnBGaWxlLCBGWF9GSUxFU0laRSYgb2Zmc2V0KQoreworICAgIEZYX0lOVDMyIGxlbiA9IDA7CisgICAgaWYgKHBPYmogPT0gTlVMTCkgeworICAgICAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiIG51bGwiKSkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgb2Zmc2V0ICs9IDU7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBzd2l0Y2ggKHBPYmotPkdldFR5cGUoKSkgeworICAgICAgICBjYXNlIFBERk9CSl9OVUxMOgorICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiBudWxsIikpIDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldCArPSA1OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUERGT0JKX0JPT0xFQU46CisgICAgICAgIGNhc2UgUERGT0JKX05VTUJFUjoKKyAgICAgICAgICAgIGlmIChwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgIikpIDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgobGVuID0gcEZpbGUtPkFwcGVuZFN0cmluZyhwT2JqLT5HZXRTdHJpbmcoKSkpIDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldCArPSBsZW4gKyAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUERGT0JKX1NUUklORzogeworICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIHN0ciA9IHBPYmotPkdldFN0cmluZygpOworICAgICAgICAgICAgICAgIEZYX0JPT0wgYkhleCA9ICgoQ1BERl9TdHJpbmcqKXBPYmopLT5Jc0hleCgpOworICAgICAgICAgICAgICAgIGlmICgobGVuID0gcEZpbGUtPkFwcGVuZFN0cmluZyhQREZfRW5jb2RlU3RyaW5nKHN0ciwgYkhleCkpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbGVuOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFBERk9CSl9OQU1FOiB7CisgICAgICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIi8iKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc3RyID0gcE9iai0+R2V0U3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kU3RyaW5nKFBERl9OYW1lRW5jb2RlKHN0cikpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbGVuICsgMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBQREZPQkpfUkVGRVJFTkNFOiB7CisgICAgICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAiKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ1BERl9SZWZlcmVuY2UqIHAgPSAoQ1BERl9SZWZlcmVuY2UqKXBPYmo7CisgICAgICAgICAgICAgICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kRFdvcmQocC0+R2V0UmVmT2JqTnVtKCkpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiIDAgUiAiKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGxlbiArIDY7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgUERGT0JKX0FSUkFZOiB7CisgICAgICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIlsiKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE7CisgICAgICAgICAgICAgICAgQ1BERl9BcnJheSogcCA9IChDUERGX0FycmF5KilwT2JqOworICAgICAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwLT5HZXRDb3VudCgpOyBpICsrKSB7CisgICAgICAgICAgICAgICAgICAgIENQREZfT2JqZWN0KiBwRWxlbWVudCA9IHAtPkdldEVsZW1lbnQoaSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwRWxlbWVudC0+R2V0T2JqTnVtKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgIikpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobGVuID0gcEZpbGUtPkFwcGVuZERXb3JkKHBFbGVtZW50LT5HZXRPYmpOdW0oKSkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgMCBSIikpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBsZW4gKyA1OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBERl9DcmVhdG9yQXBwZW5kT2JqZWN0KHBFbGVtZW50LCBwRmlsZSwgb2Zmc2V0KSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIl0iKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgUERGT0JKX0RJQ1RJT05BUlk6IHsKKyAgICAgICAgICAgICAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiPDwiKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7CisgICAgICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwID0gKENQREZfRGljdGlvbmFyeSopcE9iajsKKyAgICAgICAgICAgICAgICBGWF9QT1NJVElPTiBwb3MgPSBwLT5HZXRTdGFydFBvcygpOworICAgICAgICAgICAgICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcga2V5OworICAgICAgICAgICAgICAgICAgICBDUERGX09iamVjdCogcFZhbHVlID0gcC0+R2V0TmV4dEVsZW1lbnQocG9zLCBrZXkpOworICAgICAgICAgICAgICAgICAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiLyIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmRTdHJpbmcoUERGX05hbWVFbmNvZGUoa2V5KSkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBsZW4gKyAxOworICAgICAgICAgICAgICAgICAgICBpZiAocFZhbHVlLT5HZXRPYmpOdW0oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAiKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kRFdvcmQocFZhbHVlLT5HZXRPYmpOdW0oKSkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgMCBSIikpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBsZW4gKyA1OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBERl9DcmVhdG9yQXBwZW5kT2JqZWN0KHBWYWx1ZSwgcEZpbGUsIG9mZnNldCkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCI+PiIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBQREZPQkpfU1RSRUFNOiB7CisgICAgICAgICAgICAgICAgQ1BERl9TdHJlYW0qIHAgPSAoQ1BERl9TdHJlYW0qKXBPYmo7CisgICAgICAgICAgICAgICAgaWYgKFBERl9DcmVhdG9yQXBwZW5kT2JqZWN0KHAtPkdldERpY3QoKSwgcEZpbGUsIG9mZnNldCkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoInN0cmVhbVxyXG4iKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDg7CisgICAgICAgICAgICAgICAgQ1BERl9TdHJlYW1BY2MgYWNjOworICAgICAgICAgICAgICAgIGFjYy5Mb2FkQWxsRGF0YShwLCBUUlVFKTsKKyAgICAgICAgICAgICAgICBpZiAocEZpbGUtPkFwcGVuZEJsb2NrKGFjYy5HZXREYXRhKCksIGFjYy5HZXRTaXplKCkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG9mZnNldCArPSBhY2MuR2V0U2l6ZSgpOworICAgICAgICAgICAgICAgIGlmICgobGVuID0gcEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiXHJcbmVuZHN0cmVhbSIpKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGxlbjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChGQUxTRSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CitGWF9JTlQzMiBQREZfQ3JlYXRvcldyaXRlVHJhaWxlcihDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIENGWF9GaWxlQnVmZmVyQXJjaGl2ZSogcEZpbGUsIENQREZfQXJyYXkqIHBJREFycmF5LCBGWF9CT09MIGJDb21wcmVzcykKK3sKKyAgICBGWF9GSUxFU0laRSBvZmZzZXQgPSAwOworICAgIEZYX0lOVDMyIGxlbiA9IDA7CisgICAgRlhTWVNfYXNzZXJ0KHBEb2N1bWVudCAmJiBwRmlsZSk7CisgICAgQ1BERl9QYXJzZXIgKnBQYXJzZXIgPSAoQ1BERl9QYXJzZXIqKXBEb2N1bWVudC0+R2V0UGFyc2VyKCk7CisgICAgaWYgKHBQYXJzZXIpIHsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwID0gcFBhcnNlci0+R2V0VHJhaWxlcigpOworICAgICAgICBGWF9QT1NJVElPTiBwb3MgPSBwLT5HZXRTdGFydFBvcygpOworICAgICAgICB3aGlsZSAocG9zKSB7CisgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBrZXk7CisgICAgICAgICAgICBDUERGX09iamVjdCogcFZhbHVlID0gcC0+R2V0TmV4dEVsZW1lbnQocG9zLCBrZXkpOworICAgICAgICAgICAgaWYgKGtleSA9PSBGWF9CU1RSQygiRW5jcnlwdCIpIHx8IGtleSA9PSBGWF9CU1RSQygiU2l6ZSIpIHx8IGtleSA9PSBGWF9CU1RSQygiRmlsdGVyIikgfHwKKyAgICAgICAgICAgICAgICAgICAga2V5ID09IEZYX0JTVFJDKCJJbmRleCIpIHx8IGtleSA9PSBGWF9CU1RSQygiTGVuZ3RoIikgfHwga2V5ID09IEZYX0JTVFJDKCJQcmV2IikgfHwKKyAgICAgICAgICAgICAgICAgICAga2V5ID09IEZYX0JTVFJDKCJXIikgfHwga2V5ID09IEZYX0JTVFJDKCJYUmVmU3RtIikgfHwga2V5ID09IEZYX0JTVFJDKCJUeXBlIikgfHwga2V5ID09IEZYX0JTVFJDKCJJRCIpKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYkNvbXByZXNzICYmIGtleSA9PSBGWF9CU1RSQygiRGVjb2RlUGFybXMiKSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoKEZYX0JTVFJDKCIvIikpKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmRTdHJpbmcoUERGX05hbWVFbmNvZGUoa2V5KSkpIDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldCArPSBsZW4gKyAxOworICAgICAgICAgICAgaWYgKHBWYWx1ZS0+R2V0T2JqTnVtKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiICIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmREV29yZChwVmFsdWUtPkdldE9iak51bSgpKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAwIFIgIikpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG9mZnNldCArPSBsZW4gKyA2OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoUERGX0NyZWF0b3JBcHBlbmRPYmplY3QocFZhbHVlLCBwRmlsZSwgb2Zmc2V0KSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocElEQXJyYXkpIHsKKyAgICAgICAgICAgIGlmIChwRmlsZS0+QXBwZW5kU3RyaW5nKChGWF9CU1RSQygiL0lEIikpKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvZmZzZXQgKz0gMzsKKyAgICAgICAgICAgIGlmIChQREZfQ3JlYXRvckFwcGVuZE9iamVjdChwSURBcnJheSwgcEZpbGUsIG9mZnNldCkgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAgfQorICAgIGlmIChwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCJcclxuL1Jvb3QgIikpIDwgMCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICgobGVuID0gcEZpbGUtPkFwcGVuZERXb3JkKHBEb2N1bWVudC0+R2V0Um9vdCgpLT5HZXRPYmpOdW0oKSkpIDwgMCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgMCBSXHJcbiIpKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBvZmZzZXQgKz0gbGVuICsgMTQ7CisgICAgaWYgKHBEb2N1bWVudC0+R2V0SW5mbygpKSB7CisgICAgICAgIGlmIChwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIvSW5mbyAiKSkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kRFdvcmQocERvY3VtZW50LT5HZXRJbmZvKCktPkdldE9iak51bSgpKSkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAwIFJcclxuIikpIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIG9mZnNldCArPSBsZW4gKyAxMjsKKyAgICB9CisgICAgaWYgKHBJREFycmF5KSB7CisgICAgICAgIGlmIChwRmlsZS0+QXBwZW5kU3RyaW5nKChGWF9CU1RSQygiL0lEIikpKSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQgKz0gMzsKKyAgICAgICAgaWYgKFBERl9DcmVhdG9yQXBwZW5kT2JqZWN0KHBJREFycmF5LCBwRmlsZSwgb2Zmc2V0KSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gb2Zmc2V0OworfQorRlhfSU5UMzIgUERGX0NyZWF0b3JXcml0ZUVuY3J5cHQoY29uc3QgQ1BERl9EaWN0aW9uYXJ5KiBwRW5jcnlwdERpY3QsIEZYX0RXT1JEIGR3T2JqTnVtLCBDRlhfRmlsZUJ1ZmZlckFyY2hpdmUgKnBGaWxlKQoreworICAgIGlmICghcEVuY3J5cHREaWN0KSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBGWFNZU19hc3NlcnQocEZpbGUpOworICAgIEZYX0ZJTEVTSVpFIG9mZnNldCA9IDA7CisgICAgRlhfSU5UMzIgbGVuID0gMDsKKyAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiL0VuY3J5cHQiKSkgPCAwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgb2Zmc2V0ICs9IDg7CisgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAiKSkgPCAwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kRFdvcmQoZHdPYmpOdW0pKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiIDAgUiAiKSkgPCAwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgb2Zmc2V0ICs9IGxlbiArIDY7CisgICAgcmV0dXJuIG9mZnNldDsKK30KK0ZYX0JPT0wgUERGX0dlbmVyYXRlRmlsZUlEKEZYX0RXT1JEIGR3U2VlZDEsIEZYX0RXT1JEIGR3U2VlZDIsIEZYX0xQRFdPUkQgcEJ1ZmZlcikKK3sKKyAgICBpZiAoIXBCdWZmZXIpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWF9MUFZPSUQgcENvbnRleHQgPSBGWF9SYW5kb21fTVRfU3RhcnQoZHdTZWVkMSk7CisgICAgRlhfSU5UMzIgaSA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgICAqcEJ1ZmZlcisrID0gRlhfUmFuZG9tX01UX0dlbmVyYXRlKHBDb250ZXh0KTsKKyAgICB9CisgICAgRlhfUmFuZG9tX01UX0Nsb3NlKHBDb250ZXh0KTsKKyAgICBwQ29udGV4dCA9IEZYX1JhbmRvbV9NVF9TdGFydChkd1NlZWQyKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgICpwQnVmZmVyKysgPSBGWF9SYW5kb21fTVRfR2VuZXJhdGUocENvbnRleHQpOworICAgIH0KKyAgICBGWF9SYW5kb21fTVRfQ2xvc2UocENvbnRleHQpOworICAgIHJldHVybiBUUlVFOworfQorY2xhc3MgQ1BERl9GbGF0ZUVuY29kZXIKK3sKK3B1YmxpYzoKKyAgICBDUERGX0ZsYXRlRW5jb2RlcigpOworICAgIH5DUERGX0ZsYXRlRW5jb2RlcigpOworICAgIEZYX0JPT0wJCUluaXRpYWxpemUoQ1BERl9TdHJlYW0qIHBTdHJlYW0sIEZYX0JPT0wgYkZsYXRlRW5jb2RlKTsKKyAgICBGWF9CT09MCQlJbml0aWFsaXplKEZYX0xQQ0JZVEUgcEJ1ZmZlciwgRlhfRFdPUkQgc2l6ZSwgRlhfQk9PTCBiRmxhdGVFbmNvZGUsIEZYX0JPT0wgYlhSZWZTdHJlYW0gPSBGQUxTRSk7CisgICAgdm9pZAkJQ2xvbmVEaWN0KCk7CisgICAgRlhfTFBCWVRFCQkJbV9wRGF0YTsKKyAgICBGWF9EV09SRAkJCW1fZHdTaXplOworICAgIENQREZfRGljdGlvbmFyeSoJbV9wRGljdDsKKyAgICBGWF9CT09MCQkJCW1fYkNsb25lZDsKKyAgICBGWF9CT09MCQkJCW1fYk5ld0RhdGE7CisgICAgQ1BERl9TdHJlYW1BY2MJCW1fQWNjOworfTsKK0NQREZfRmxhdGVFbmNvZGVyOjpDUERGX0ZsYXRlRW5jb2RlcigpCit7CisgICAgbV9wRGF0YSA9IE5VTEw7CisgICAgbV9kd1NpemUgPSAwOworICAgIG1fcERpY3QgPSBOVUxMOworICAgIG1fYkNsb25lZCA9IEZBTFNFOworICAgIG1fYk5ld0RhdGEgPSBGQUxTRTsKK30KK3ZvaWQgQ1BERl9GbGF0ZUVuY29kZXI6OkNsb25lRGljdCgpCit7CisgICAgaWYgKCFtX2JDbG9uZWQpIHsKKyAgICAgICAgbV9wRGljdCA9IChDUERGX0RpY3Rpb25hcnkqKW1fcERpY3QtPkNsb25lKCk7CisgICAgICAgIG1fYkNsb25lZCA9IFRSVUU7CisgICAgfQorfQorRlhfQk9PTCBDUERGX0ZsYXRlRW5jb2Rlcjo6SW5pdGlhbGl6ZShDUERGX1N0cmVhbSogcFN0cmVhbSwgRlhfQk9PTCBiRmxhdGVFbmNvZGUpCit7CisgICAgbV9BY2MuTG9hZEFsbERhdGEocFN0cmVhbSwgVFJVRSk7CisgICAgaWYgKHBTdHJlYW0tPkdldERpY3QoKS0+S2V5RXhpc3QoIkZpbHRlciIpIHx8ICFiRmxhdGVFbmNvZGUpIHsKKyAgICAgICAgaWYgKHBTdHJlYW0tPkdldERpY3QoKS0+S2V5RXhpc3QoIkZpbHRlciIpICYmICFiRmxhdGVFbmNvZGUpIHsKKyAgICAgICAgICAgIENQREZfU3RyZWFtQWNjIGRlc3RBY2M7CisgICAgICAgICAgICBkZXN0QWNjLkxvYWRBbGxEYXRhKHBTdHJlYW0pOworICAgICAgICAgICAgbV9kd1NpemUgPSBkZXN0QWNjLkdldFNpemUoKTsKKyAgICAgICAgICAgIG1fcERhdGEgPSAoRlhfTFBCWVRFKWRlc3RBY2MuRGV0YWNoRGF0YSgpOworICAgICAgICAgICAgbV9wRGljdCA9IChDUERGX0RpY3Rpb25hcnkqKXBTdHJlYW0tPkdldERpY3QoKS0+Q2xvbmUoKTsKKyAgICAgICAgICAgIG1fcERpY3QtPlJlbW92ZUF0KEZYX0JTVFJDKCJGaWx0ZXIiKSk7CisgICAgICAgICAgICBtX2JOZXdEYXRhID0gVFJVRTsKKyAgICAgICAgICAgIG1fYkNsb25lZCA9IFRSVUU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3BEYXRhID0gKEZYX0xQQllURSltX0FjYy5HZXREYXRhKCk7CisgICAgICAgICAgICBtX2R3U2l6ZSA9IG1fQWNjLkdldFNpemUoKTsKKyAgICAgICAgICAgIG1fcERpY3QgPSBwU3RyZWFtLT5HZXREaWN0KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIG1fcERhdGEgPSBOVUxMOworICAgIG1fZHdTaXplID0gMDsKKyAgICBtX2JOZXdEYXRhID0gVFJVRTsKKyAgICBtX2JDbG9uZWQgPSBUUlVFOworICAgIDo6RmxhdGVFbmNvZGUobV9BY2MuR2V0RGF0YSgpLCBtX0FjYy5HZXRTaXplKCksIG1fcERhdGEsIG1fZHdTaXplKTsKKyAgICBtX3BEaWN0ID0gKENQREZfRGljdGlvbmFyeSopcFN0cmVhbS0+R2V0RGljdCgpLT5DbG9uZSgpOworICAgIG1fcERpY3QtPlNldEF0SW50ZWdlcigiTGVuZ3RoIiwgbV9kd1NpemUpOworICAgIG1fcERpY3QtPlNldEF0TmFtZSgiRmlsdGVyIiwgIkZsYXRlRGVjb2RlIik7CisgICAgbV9wRGljdC0+UmVtb3ZlQXQoIkRlY29kZVBhcm1zIik7CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENQREZfRmxhdGVFbmNvZGVyOjpJbml0aWFsaXplKEZYX0xQQ0JZVEUgcEJ1ZmZlciwgRlhfRFdPUkQgc2l6ZSwgRlhfQk9PTCBiRmxhdGVFbmNvZGUsIEZYX0JPT0wgYlhSZWZTdHJlYW0pCit7CisgICAgaWYgKCFiRmxhdGVFbmNvZGUpIHsKKyAgICAgICAgbV9wRGF0YSA9IChGWF9MUEJZVEUpcEJ1ZmZlcjsKKyAgICAgICAgbV9kd1NpemUgPSBzaXplOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgbV9iTmV3RGF0YSA9IFRSVUU7CisgICAgaWYgKGJYUmVmU3RyZWFtKSB7CisgICAgICAgIDo6RmxhdGVFbmNvZGUocEJ1ZmZlciwgc2l6ZSwgMTIsIDEsIDgsIDcsIG1fcERhdGEsIG1fZHdTaXplKTsKKyAgICB9IGVsc2UgeworICAgICAgICA6OkZsYXRlRW5jb2RlKHBCdWZmZXIsIHNpemUsIG1fcERhdGEsIG1fZHdTaXplKTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitDUERGX0ZsYXRlRW5jb2Rlcjo6fkNQREZfRmxhdGVFbmNvZGVyKCkKK3sKKyAgICBpZiAobV9iQ2xvbmVkICYmIG1fcERpY3QpIHsKKyAgICAgICAgbV9wRGljdC0+UmVsZWFzZSgpOworICAgIH0KKyAgICBpZiAobV9iTmV3RGF0YSAmJiBtX3BEYXRhKSB7CisgICAgICAgIEZYX0ZyZWUobV9wRGF0YSk7CisgICAgfQorfQorY2xhc3MgQ1BERl9FbmNyeXB0b3IKK3sKK3B1YmxpYzoKKyAgICBDUERGX0VuY3J5cHRvcigpOworICAgIH5DUERGX0VuY3J5cHRvcigpOworICAgIEZYX0JPT0wJCUluaXRpYWxpemUoQ1BERl9DcnlwdG9IYW5kbGVyKiBwSGFuZGxlciwgaW50IG9iam51bSwgRlhfTFBCWVRFIHNyY19kYXRhLCBGWF9EV09SRCBzcmNfc2l6ZSk7CisgICAgRlhfTFBCWVRFCQkJbV9wRGF0YTsKKyAgICBGWF9EV09SRAkJCW1fZHdTaXplOworICAgIEZYX0JPT0wJCQkJbV9iTmV3QnVmOworfTsKK0NQREZfRW5jcnlwdG9yOjpDUERGX0VuY3J5cHRvcigpCit7CisgICAgbV9wRGF0YSA9IE5VTEw7CisgICAgbV9kd1NpemUgPSAwOworICAgIG1fYk5ld0J1ZiA9IEZBTFNFOworfQorRlhfQk9PTCBDUERGX0VuY3J5cHRvcjo6SW5pdGlhbGl6ZShDUERGX0NyeXB0b0hhbmRsZXIqIHBIYW5kbGVyLCBpbnQgb2JqbnVtLCBGWF9MUEJZVEUgc3JjX2RhdGEsIEZYX0RXT1JEIHNyY19zaXplKQoreworICAgIGlmIChzcmNfc2l6ZSA9PSAwKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBpZiAocEhhbmRsZXIgPT0gTlVMTCkgeworICAgICAgICBtX3BEYXRhID0gKEZYX0xQQllURSlzcmNfZGF0YTsKKyAgICAgICAgbV9kd1NpemUgPSBzcmNfc2l6ZTsKKyAgICAgICAgbV9iTmV3QnVmID0gRkFMU0U7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBtX2R3U2l6ZSA9IHBIYW5kbGVyLT5FbmNyeXB0R2V0U2l6ZShvYmpudW0sIDAsIHNyY19kYXRhLCBzcmNfc2l6ZSk7CisgICAgbV9wRGF0YSA9IEZYX0FsbG9jKEZYX0JZVEUsIG1fZHdTaXplKTsKKyAgICBpZighbV9wRGF0YSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHBIYW5kbGVyLT5FbmNyeXB0Q29udGVudChvYmpudW0sIDAsIHNyY19kYXRhLCBzcmNfc2l6ZSwgbV9wRGF0YSwgbV9kd1NpemUpOworICAgIG1fYk5ld0J1ZiA9IFRSVUU7CisgICAgcmV0dXJuIFRSVUU7Cit9CitDUERGX0VuY3J5cHRvcjo6fkNQREZfRW5jcnlwdG9yKCkKK3sKKyAgICBpZiAobV9iTmV3QnVmKSB7CisgICAgICAgIEZYX0ZyZWUobV9wRGF0YSk7CisgICAgfQorfQorQ1BERl9PYmplY3RTdHJlYW06OkNQREZfT2JqZWN0U3RyZWFtKCkKKyAgICA6IG1fZHdPYmpOdW0oMCkKKyAgICAsIG1faW5kZXgoMCkKK3sKK30KK0ZYX0JPT0wgQ1BERl9PYmplY3RTdHJlYW06OlN0YXJ0KCkKK3sKKyAgICBtX09iak51bUFycmF5LlJlbW92ZUFsbCgpOworICAgIG1fT2Zmc2V0QXJyYXkuUmVtb3ZlQWxsKCk7CisgICAgbV9CdWZmZXIuQ2xlYXIoKTsKKyAgICBtX2R3T2JqTnVtID0gMDsKKyAgICBtX2luZGV4ID0gMDsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0lOVDMyIENQREZfT2JqZWN0U3RyZWFtOjpDb21wcmVzc0luZGlyZWN0T2JqZWN0KEZYX0RXT1JEIGR3T2JqTnVtLCBjb25zdCBDUERGX09iamVjdCAqcE9iaikKK3sKKyAgICBtX09iak51bUFycmF5LkFkZChkd09iak51bSk7CisgICAgbV9PZmZzZXRBcnJheS5BZGQobV9CdWZmZXIuR2V0TGVuZ3RoKCkpOworICAgIG1fQnVmZmVyIDw8IHBPYmo7CisgICAgcmV0dXJuIDE7Cit9CitGWF9JTlQzMiBDUERGX09iamVjdFN0cmVhbTo6Q29tcHJlc3NJbmRpcmVjdE9iamVjdChGWF9EV09SRCBkd09iak51bSwgRlhfTFBDQllURSBwQnVmZmVyLCBGWF9EV09SRCBkd1NpemUpCit7CisgICAgbV9PYmpOdW1BcnJheS5BZGQoZHdPYmpOdW0pOworICAgIG1fT2Zmc2V0QXJyYXkuQWRkKG1fQnVmZmVyLkdldExlbmd0aCgpKTsKKyAgICBtX0J1ZmZlci5BcHBlbmRCbG9jayhwQnVmZmVyLCBkd1NpemUpOworICAgIHJldHVybiAxOworfQorRlhfRklMRVNJWkUgQ1BERl9PYmplY3RTdHJlYW06OkVuZChDUERGX0NyZWF0b3IqIHBDcmVhdG9yKQoreworICAgIEZYU1lTX2Fzc2VydChwQ3JlYXRvcik7CisgICAgaWYgKG1fT2JqTnVtQXJyYXkuR2V0U2l6ZSgpID09IDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIENGWF9GaWxlQnVmZmVyQXJjaGl2ZSAqcEZpbGUgPSAmcENyZWF0b3ItPm1fRmlsZTsKKyAgICBDUERGX0NyeXB0b0hhbmRsZXIgKnBIYW5kbGVyID0gcENyZWF0b3ItPm1fcENyeXB0b0hhbmRsZXI7CisgICAgRlhfRklMRVNJWkUgT2JqT2Zmc2V0ID0gcENyZWF0b3ItPm1fT2Zmc2V0OworICAgIGlmICghbV9kd09iak51bSkgeworICAgICAgICBtX2R3T2JqTnVtID0gKytwQ3JlYXRvci0+bV9kd0xhc3RPYmpOdW07CisgICAgfQorICAgIENGWF9CeXRlVGV4dEJ1ZiB0ZW1wQnVmZmVyOworICAgIEZYX0lOVDMyIGlDb3VudCA9IG1fT2JqTnVtQXJyYXkuR2V0U2l6ZSgpOworICAgIGZvciAoRlhfSU5UMzIgaSA9IDA7IGkgPCBpQ291bnQ7IGkrKykgeworICAgICAgICB0ZW1wQnVmZmVyIDw8IG1fT2JqTnVtQXJyYXkuRWxlbWVudEF0KGkpIDw8IEZYX0JTVFJDKCIgIikgPDwgbV9PZmZzZXRBcnJheS5FbGVtZW50QXQoaSkgPDwgRlhfQlNUUkMoIiAiKTsKKyAgICB9CisgICAgRlhfRklMRVNJWkUgJm9mZnNldCA9IHBDcmVhdG9yLT5tX09mZnNldDsKKyAgICBGWF9JTlQzMiBsZW4gPSBwRmlsZS0+QXBwZW5kRFdvcmQobV9kd09iak51bSk7CisgICAgaWYgKGxlbiA8IDApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBvZmZzZXQgKz0gbGVuOworICAgIGlmICgobGVuID0gcEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiIDAgb2JqXHJcbjw8L1R5cGUgL09ialN0bSAvTiAiKSkpIDwgMCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIG9mZnNldCArPSBsZW47CisgICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kRFdvcmQoKEZYX0RXT1JEKWlDb3VudCkpIDwgMCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIG9mZnNldCArPSBsZW47CisgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIi9GaXJzdCAiKSkgPCAwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kRFdvcmQoKEZYX0RXT1JEKXRlbXBCdWZmZXIuR2V0TGVuZ3RoKCkpKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiL0xlbmd0aCAiKSkgPCAwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgb2Zmc2V0ICs9IGxlbiArIDE1OworICAgIGlmICghcENyZWF0b3ItPm1fYkNvbXByZXNzICYmICFwSGFuZGxlcikgeworICAgICAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmREV29yZCgoRlhfRFdPUkQpKHRlbXBCdWZmZXIuR2V0TGVuZ3RoKCkgKyBtX0J1ZmZlci5HZXRMZW5ndGgoKSkpKSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQgKz0gbGVuOworICAgICAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIj4+c3RyZWFtXHJcbiIpKSkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRCbG9jayh0ZW1wQnVmZmVyLkdldEJ1ZmZlcigpLCB0ZW1wQnVmZmVyLkdldExlbmd0aCgpKSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAocEZpbGUtPkFwcGVuZEJsb2NrKG1fQnVmZmVyLkdldEJ1ZmZlcigpLCBtX0J1ZmZlci5HZXRMZW5ndGgoKSkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgb2Zmc2V0ICs9IGxlbiArIHRlbXBCdWZmZXIuR2V0TGVuZ3RoKCkgKyBtX0J1ZmZlci5HZXRMZW5ndGgoKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZW1wQnVmZmVyIDw8IG1fQnVmZmVyOworICAgICAgICBDUERGX0ZsYXRlRW5jb2RlciBlbmNvZGVyOworICAgICAgICBlbmNvZGVyLkluaXRpYWxpemUodGVtcEJ1ZmZlci5HZXRCdWZmZXIoKSwgdGVtcEJ1ZmZlci5HZXRMZW5ndGgoKSwgcENyZWF0b3ItPm1fYkNvbXByZXNzKTsKKyAgICAgICAgQ1BERl9FbmNyeXB0b3IgZW5jcnlwdG9yOworICAgICAgICBlbmNyeXB0b3IuSW5pdGlhbGl6ZShwSGFuZGxlciwgbV9kd09iak51bSwgZW5jb2Rlci5tX3BEYXRhLCBlbmNvZGVyLm1fZHdTaXplKTsKKyAgICAgICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kRFdvcmQoZW5jcnlwdG9yLm1fZHdTaXplKSkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgb2Zmc2V0ICs9IGxlbjsKKyAgICAgICAgaWYgKHBDcmVhdG9yLT5tX2JDb21wcmVzcykgeworICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIi9GaWx0ZXIgL0ZsYXRlRGVjb2RlIikpIDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldCArPSAyMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIj4+c3RyZWFtXHJcbiIpKSkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRCbG9jayhlbmNyeXB0b3IubV9wRGF0YSwgZW5jcnlwdG9yLm1fZHdTaXplKSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQgKz0gbGVuICsgZW5jcnlwdG9yLm1fZHdTaXplOworICAgIH0KKyAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIlxyXG5lbmRzdHJlYW1cclxuZW5kb2JqXHJcbiIpKSkgPCAwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgb2Zmc2V0ICs9IGxlbjsKKyAgICByZXR1cm4gT2JqT2Zmc2V0OworfQorQ1BERl9YUmVmU3RyZWFtOjpDUERGX1hSZWZTdHJlYW0oKQorICAgIDogbV9QcmV2T2Zmc2V0KDApCisgICAgLCBtX2lTZWcoMCkKKyAgICAsIG1fZHdUZW1wT2JqTnVtKDApCit7Cit9CitGWF9CT09MIENQREZfWFJlZlN0cmVhbTo6U3RhcnQoKQoreworICAgIG1fSW5kZXhBcnJheS5SZW1vdmVBbGwoKTsKKyAgICBtX0J1ZmZlci5DbGVhcigpOworICAgIG1faVNlZyA9IDA7CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9JTlQzMiBDUERGX1hSZWZTdHJlYW06OkNvbXByZXNzSW5kaXJlY3RPYmplY3QoRlhfRFdPUkQgZHdPYmpOdW0sIGNvbnN0IENQREZfT2JqZWN0ICpwT2JqLCBDUERGX0NyZWF0b3IgKnBDcmVhdG9yKQoreworICAgIGlmICghcENyZWF0b3IpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIG1fT2JqU3RyZWFtLkNvbXByZXNzSW5kaXJlY3RPYmplY3QoZHdPYmpOdW0sIHBPYmopOworICAgIGlmIChtX09ialN0cmVhbS5tX09iak51bUFycmF5LkdldFNpemUoKSA8IHBDcmVhdG9yLT5tX09iamVjdFN0cmVhbVNpemUgJiYKKyAgICAgICAgICAgIG1fT2JqU3RyZWFtLm1fQnVmZmVyLkdldExlbmd0aCgpIDwgUERGX09CSkVDVFNUUkVBTV9NQVhMRU5HVEgpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiBFbmRPYmplY3RTdHJlYW0ocENyZWF0b3IpOworfQorRlhfSU5UMzIgQ1BERl9YUmVmU3RyZWFtOjpDb21wcmVzc0luZGlyZWN0T2JqZWN0KEZYX0RXT1JEIGR3T2JqTnVtLCBGWF9MUENCWVRFIHBCdWZmZXIsIEZYX0RXT1JEIGR3U2l6ZSwgQ1BERl9DcmVhdG9yICpwQ3JlYXRvcikKK3sKKyAgICBpZiAoIXBDcmVhdG9yKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBtX09ialN0cmVhbS5Db21wcmVzc0luZGlyZWN0T2JqZWN0KGR3T2JqTnVtLCBwQnVmZmVyLCBkd1NpemUpOworICAgIGlmIChtX09ialN0cmVhbS5tX09iak51bUFycmF5LkdldFNpemUoKSA8IHBDcmVhdG9yLT5tX09iamVjdFN0cmVhbVNpemUgJiYKKyAgICAgICAgICAgIG1fT2JqU3RyZWFtLm1fQnVmZmVyLkdldExlbmd0aCgpIDwgUERGX09CSkVDVFNUUkVBTV9NQVhMRU5HVEgpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiBFbmRPYmplY3RTdHJlYW0ocENyZWF0b3IpOworfQorc3RhdGljIHZvaWQgX0FwcGVuZEluZGV4MChDRlhfQnl0ZVRleHRCdWYmIGJ1ZmZlciwgRlhfQk9PTCBiRmlyc3RPYmplY3QgPSAgVFJVRSkKK3sKKyAgICBidWZmZXIuQXBwZW5kQnl0ZSgwKTsKKyAgICBidWZmZXIuQXBwZW5kQnl0ZSgwKTsKKyAgICBidWZmZXIuQXBwZW5kQnl0ZSgwKTsKKyAgICBidWZmZXIuQXBwZW5kQnl0ZSgwKTsKKyAgICBidWZmZXIuQXBwZW5kQnl0ZSgwKTsKKyAgICBpZiAoYkZpcnN0T2JqZWN0KSB7CisgICAgICAgIGJ1ZmZlci5BcHBlbmRCeXRlKDB4RkYpOworICAgICAgICBidWZmZXIuQXBwZW5kQnl0ZSgweEZGKTsKKyAgICB9IGVsc2UgeworICAgICAgICBidWZmZXIuQXBwZW5kQnl0ZSgwKTsKKyAgICAgICAgYnVmZmVyLkFwcGVuZEJ5dGUoMCk7CisgICAgfQorfQorc3RhdGljIHZvaWQgX0FwcGVuZEluZGV4MShDRlhfQnl0ZVRleHRCdWYmIGJ1ZmZlciwgRlhfRklMRVNJWkUgb2Zmc2V0KQoreworICAgIGJ1ZmZlci5BcHBlbmRCeXRlKDEpOworICAgIGJ1ZmZlci5BcHBlbmRCeXRlKEZYX0dFVEJZVEVPRkZTRVQyNChvZmZzZXQpKTsKKyAgICBidWZmZXIuQXBwZW5kQnl0ZShGWF9HRVRCWVRFT0ZGU0VUMTYob2Zmc2V0KSk7CisgICAgYnVmZmVyLkFwcGVuZEJ5dGUoRlhfR0VUQllURU9GRlNFVDgob2Zmc2V0KSk7CisgICAgYnVmZmVyLkFwcGVuZEJ5dGUoRlhfR0VUQllURU9GRlNFVDAob2Zmc2V0KSk7CisgICAgYnVmZmVyLkFwcGVuZEJ5dGUoMCk7CisgICAgYnVmZmVyLkFwcGVuZEJ5dGUoMCk7Cit9CitzdGF0aWMgdm9pZCBfQXBwZW5kSW5kZXgyKENGWF9CeXRlVGV4dEJ1ZiYgYnVmZmVyLCBGWF9EV09SRCBvYmpudW0sIEZYX0lOVDMyIGluZGV4KQoreworICAgIGJ1ZmZlci5BcHBlbmRCeXRlKDIpOworICAgIGJ1ZmZlci5BcHBlbmRCeXRlKEZYX0dFVEJZVEVPRkZTRVQyNChvYmpudW0pKTsKKyAgICBidWZmZXIuQXBwZW5kQnl0ZShGWF9HRVRCWVRFT0ZGU0VUMTYob2JqbnVtKSk7CisgICAgYnVmZmVyLkFwcGVuZEJ5dGUoRlhfR0VUQllURU9GRlNFVDgob2JqbnVtKSk7CisgICAgYnVmZmVyLkFwcGVuZEJ5dGUoRlhfR0VUQllURU9GRlNFVDAob2JqbnVtKSk7CisgICAgYnVmZmVyLkFwcGVuZEJ5dGUoRlhfR0VUQllURU9GRlNFVDgoaW5kZXgpKTsKKyAgICBidWZmZXIuQXBwZW5kQnl0ZShGWF9HRVRCWVRFT0ZGU0VUMChpbmRleCkpOworfQorRlhfSU5UMzIgQ1BERl9YUmVmU3RyZWFtOjpFbmRPYmplY3RTdHJlYW0oQ1BERl9DcmVhdG9yICpwQ3JlYXRvciwgRlhfQk9PTCBiRU9GKQoreworICAgIEZYX0ZJTEVTSVpFIG9iak9mZnNldCA9IDA7CisgICAgaWYgKGJFT0YpIHsKKyAgICAgICAgb2JqT2Zmc2V0ID0gbV9PYmpTdHJlYW0uRW5kKHBDcmVhdG9yKTsKKyAgICAgICAgaWYgKG9iak9mZnNldCA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBGWF9EV09SRCAmZHdPYmpTdG1OdW0gPSBtX09ialN0cmVhbS5tX2R3T2JqTnVtOworICAgIGlmICghZHdPYmpTdG1OdW0pIHsKKyAgICAgICAgZHdPYmpTdG1OdW0gPSArK3BDcmVhdG9yLT5tX2R3TGFzdE9iak51bTsKKyAgICB9CisgICAgRlhfSU5UMzIgaVNpemUgPSBtX09ialN0cmVhbS5tX09iak51bUFycmF5LkdldFNpemUoKTsKKyAgICBGWF9JTlQzMiBpU2VnID0gbV9JbmRleEFycmF5LkdldFNpemUoKSAvIDI7CisgICAgaWYgKCEocENyZWF0b3ItPm1fZHdGbGFncyAmIEZQREZDUkVBVEVfSU5DUkVNRU5UQUwpKSB7CisgICAgICAgIGlmIChtX2R3VGVtcE9iak51bSA9PSAwKSB7CisgICAgICAgICAgICBfQXBwZW5kSW5kZXgwKG1fQnVmZmVyKTsKKyAgICAgICAgICAgIG1fZHdUZW1wT2JqTnVtKys7CisgICAgICAgIH0KKyAgICAgICAgRlhfRFdPUkQgZW5kX251bSA9IG1fSW5kZXhBcnJheS5HZXRBdCgoaVNlZyAtIDEpICogMikgKyBtX0luZGV4QXJyYXkuR2V0QXQoKGlTZWcgLSAxKSAqIDIgKyAxKTsKKyAgICAgICAgaW50IGluZGV4ID0gMDsKKyAgICAgICAgZm9yICg7IG1fZHdUZW1wT2JqTnVtIDwgZW5kX251bTsgbV9kd1RlbXBPYmpOdW0rKykgeworICAgICAgICAgICAgRlhfRklMRVNJWkUqIG9mZnNldCA9IHBDcmVhdG9yLT5tX09iamVjdE9mZnNldC5HZXRQdHJBdChtX2R3VGVtcE9iak51bSk7CisgICAgICAgICAgICBpZiAob2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGlTaXplIHx8IG1fZHdUZW1wT2JqTnVtICE9IG1fT2JqU3RyZWFtLm1fT2JqTnVtQXJyYXlbaW5kZXhdKSB7CisgICAgICAgICAgICAgICAgICAgIF9BcHBlbmRJbmRleDEobV9CdWZmZXIsICpvZmZzZXQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIF9BcHBlbmRJbmRleDIobV9CdWZmZXIsIGR3T2JqU3RtTnVtLCBpbmRleCsrKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIF9BcHBlbmRJbmRleDAobV9CdWZmZXIsIEZBTFNFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoaVNpemUgPiAwICYmIGJFT0YpIHsKKyAgICAgICAgICAgIHBDcmVhdG9yLT5tX09iamVjdE9mZnNldC5BZGQoZHdPYmpTdG1OdW0sIDEpOworICAgICAgICAgICAgcENyZWF0b3ItPm1fT2JqZWN0U2l6ZS5BZGQoZHdPYmpTdG1OdW0sIDEpOworICAgICAgICAgICAgcENyZWF0b3ItPm1fT2JqZWN0T2Zmc2V0W2R3T2JqU3RtTnVtXSA9IG9iak9mZnNldDsKKyAgICAgICAgfQorICAgICAgICBtX2lTZWcgPSBpU2VnOworICAgICAgICBpZiAoYkVPRikgeworICAgICAgICAgICAgbV9PYmpTdHJlYW0uU3RhcnQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgRlhfSU5UMzIgJmogPSBtX09ialN0cmVhbS5tX2luZGV4OworICAgIGZvciAoaW50IGkgPSBtX2lTZWc7IGkgPCBpU2VnOyBpKyspIHsKKyAgICAgICAgRlhfRFdPUkQgc3RhcnQgPSBtX0luZGV4QXJyYXkuRWxlbWVudEF0KGkgKiAyKTsKKyAgICAgICAgRlhfRFdPUkQgZW5kID0gbV9JbmRleEFycmF5LkVsZW1lbnRBdChpICogMiArIDEpICsgc3RhcnQ7CisgICAgICAgIGZvciAoRlhfRFdPUkQgbSA9IHN0YXJ0OyBtIDwgZW5kOyBtKyspIHsKKyAgICAgICAgICAgIGlmIChqID49IGlTaXplIHx8IG0gIT0gbV9PYmpTdHJlYW0ubV9PYmpOdW1BcnJheS5FbGVtZW50QXQoaikpIHsKKyAgICAgICAgICAgICAgICBfQXBwZW5kSW5kZXgxKG1fQnVmZmVyLCBwQ3JlYXRvci0+bV9PYmplY3RPZmZzZXRbbV0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBfQXBwZW5kSW5kZXgyKG1fQnVmZmVyLCBkd09ialN0bU51bSwgaisrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaVNpemUgPiAwICYmIGJFT0YpIHsKKyAgICAgICAgX0FwcGVuZEluZGV4MShtX0J1ZmZlciwgb2JqT2Zmc2V0KTsKKyAgICAgICAgbV9JbmRleEFycmF5LkFkZChkd09ialN0bU51bSk7CisgICAgICAgIG1fSW5kZXhBcnJheS5BZGQoMSk7CisgICAgICAgIGlTZWcgKz0gMTsKKyAgICB9CisgICAgbV9pU2VnID0gaVNlZzsKKyAgICBpZiAoYkVPRikgeworICAgICAgICBtX09ialN0cmVhbS5TdGFydCgpOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KK0ZYX0JPT0wgQ1BERl9YUmVmU3RyZWFtOjpHZW5lcmF0ZVhSZWZTdHJlYW0oQ1BERl9DcmVhdG9yKiBwQ3JlYXRvciwgRlhfQk9PTCBiRU9GKQoreworICAgIEZYX0ZJTEVTSVpFIG9mZnNldF90bXAgPSBwQ3JlYXRvci0+bV9PZmZzZXQ7CisgICAgRlhfRFdPUkQgb2JqbnVtID0gKytwQ3JlYXRvci0+bV9kd0xhc3RPYmpOdW07CisgICAgQ0ZYX0ZpbGVCdWZmZXJBcmNoaXZlICpwRmlsZSA9ICZwQ3JlYXRvci0+bV9GaWxlOworICAgIEZYX0JPT0wgYkluY3JlbWVudGFsID0gKHBDcmVhdG9yLT5tX2R3RmxhZ3MgJiBGUERGQ1JFQVRFX0lOQ1JFTUVOVEFMKSAhPSAwOworICAgIGlmIChiSW5jcmVtZW50YWwpIHsKKyAgICAgICAgQWRkT2JqZWN0TnVtYmVyVG9JbmRleEFycmF5KG9iam51bSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yICg7IG1fZHdUZW1wT2JqTnVtIDwgcENyZWF0b3ItPm1fZHdMYXN0T2JqTnVtOyBtX2R3VGVtcE9iak51bSsrKSB7CisgICAgICAgICAgICBGWF9GSUxFU0laRSogb2Zmc2V0ID0gcENyZWF0b3ItPm1fT2JqZWN0T2Zmc2V0LkdldFB0ckF0KG1fZHdUZW1wT2JqTnVtKTsKKyAgICAgICAgICAgIGlmIChvZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBfQXBwZW5kSW5kZXgxKG1fQnVmZmVyLCAqb2Zmc2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgX0FwcGVuZEluZGV4MChtX0J1ZmZlciwgRkFMU0UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIF9BcHBlbmRJbmRleDEobV9CdWZmZXIsIG9mZnNldF90bXApOworICAgIEZYX0ZJTEVTSVpFICZvZmZzZXQgPSBwQ3JlYXRvci0+bV9PZmZzZXQ7CisgICAgRlhfSU5UMzIgbGVuID0gcEZpbGUtPkFwcGVuZERXb3JkKG9iam51bSk7CisgICAgaWYgKGxlbiA8IDApIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBvZmZzZXQgKz0gbGVuOworICAgIGlmICgobGVuID0gcEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiIDAgb2JqXHJcbjw8L1R5cGUgL1hSZWYvV1sxIDQgMl0vSW5kZXhbIikpKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBvZmZzZXQgKz0gbGVuOworICAgIGlmICghYkluY3JlbWVudGFsKSB7CisgICAgICAgIGlmICgobGVuID0gcEZpbGUtPkFwcGVuZERXb3JkKDApKSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAiKSkpIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIG9mZnNldCArPSBsZW4gKyAxOworICAgICAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmREV29yZChvYmpudW0gKyAxKSkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgb2Zmc2V0ICs9IGxlbjsKKyAgICB9IGVsc2UgeworICAgICAgICBGWF9JTlQzMiBpU2VnID0gbV9JbmRleEFycmF5LkdldFNpemUoKSAvIDI7CisgICAgICAgIGZvciAoRlhfSU5UMzIgaSA9IDA7IGkgPCBpU2VnOyBpKyspIHsKKyAgICAgICAgICAgIGlmICgobGVuID0gcEZpbGUtPkFwcGVuZERXb3JkKG1fSW5kZXhBcnJheS5FbGVtZW50QXQoaSAqIDIpKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAiKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb2Zmc2V0ICs9IGxlbiArIDE7CisgICAgICAgICAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmREV29yZChtX0luZGV4QXJyYXkuRWxlbWVudEF0KGkgKiAyICsgMSkpKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiICIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvZmZzZXQgKz0gbGVuICsgMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiXS9TaXplICIpKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoKGxlbiA9IHBGaWxlLT5BcHBlbmREV29yZChvYmpudW0gKyAxKSkgPCAwKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgb2Zmc2V0ICs9IGxlbiArIDc7CisgICAgaWYgKG1fUHJldk9mZnNldCA+IDApIHsKKyAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIi9QcmV2ICIpKSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBGWF9DSEFSIG9mZnNldF9idWZbMjBdOworICAgICAgICBGWFNZU19tZW1zZXQzMihvZmZzZXRfYnVmLCAwLCBzaXplb2Yob2Zmc2V0X2J1ZikpOworICAgICAgICBGWFNZU19pNjR0b2EobV9QcmV2T2Zmc2V0LCBvZmZzZXRfYnVmLCAxMCk7CisgICAgICAgIEZYX0lOVDMyIGxlbiA9IChGWF9JTlQzMilGWFNZU19zdHJsZW4ob2Zmc2V0X2J1Zik7CisgICAgICAgIGlmIChwRmlsZS0+QXBwZW5kQmxvY2sob2Zmc2V0X2J1ZiwgbGVuKSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQgKz0gbGVuICsgNjsKKyAgICB9CisgICAgRlhfQk9PTCBiUHJlZGljdG9yID0gVFJVRTsKKyAgICBDUERGX0ZsYXRlRW5jb2RlciBlbmNvZGVyOworICAgIGVuY29kZXIuSW5pdGlhbGl6ZShtX0J1ZmZlci5HZXRCdWZmZXIoKSwgbV9CdWZmZXIuR2V0TGVuZ3RoKCksIHBDcmVhdG9yLT5tX2JDb21wcmVzcywgYlByZWRpY3Rvcik7CisgICAgaWYgKHBDcmVhdG9yLT5tX2JDb21wcmVzcykgeworICAgICAgICBpZiAocEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiL0ZpbHRlciAvRmxhdGVEZWNvZGUiKSkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgb2Zmc2V0ICs9IDIwOworICAgICAgICBpZiAoYlByZWRpY3RvcikgeworICAgICAgICAgICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIvRGVjb2RlUGFybXM8PC9Db2x1bW5zIDcvUHJlZGljdG9yIDEyPj4iKSkpIDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldCArPSBsZW47CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHBGaWxlLT5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIi9MZW5ndGggIikpIDwgMCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmICgobGVuID0gcEZpbGUtPkFwcGVuZERXb3JkKGVuY29kZXIubV9kd1NpemUpKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBvZmZzZXQgKz0gbGVuICsgODsKKyAgICBpZiAoYkVPRikgeworICAgICAgICBpZiAoKGxlbiA9IFBERl9DcmVhdG9yV3JpdGVUcmFpbGVyKHBDcmVhdG9yLT5tX3BEb2N1bWVudCwgcEZpbGUsIHBDcmVhdG9yLT5tX3BJREFycmF5LCBwQ3JlYXRvci0+bV9iQ29tcHJlc3MpKSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQgKz0gbGVuOworICAgICAgICBpZiAocENyZWF0b3ItPm1fcEVuY3J5cHREaWN0KSB7CisgICAgICAgICAgICBGWF9EV09SRCBkd0VuY3J5cHRPYmpOdW0gPSBwQ3JlYXRvci0+bV9wRW5jcnlwdERpY3QtPkdldE9iak51bSgpOworICAgICAgICAgICAgaWYgKGR3RW5jcnlwdE9iak51bSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZHdFbmNyeXB0T2JqTnVtID0gcENyZWF0b3ItPm1fZHdFbnJ5cHRPYmpOdW07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGxlbiA9IFBERl9DcmVhdG9yV3JpdGVFbmNyeXB0KHBDcmVhdG9yLT5tX3BFbmNyeXB0RGljdCwgZHdFbmNyeXB0T2JqTnVtLCBwRmlsZSkpIDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldCArPSBsZW47CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKChsZW4gPSBwRmlsZS0+QXBwZW5kU3RyaW5nKEZYX0JTVFJDKCI+PnN0cmVhbVxyXG4iKSkpIDwgMCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG9mZnNldCArPSBsZW47CisgICAgaWYgKHBGaWxlLT5BcHBlbmRCbG9jayhlbmNvZGVyLm1fcERhdGEsIGVuY29kZXIubV9kd1NpemUpIDwgMCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmICgobGVuID0gcEZpbGUtPkFwcGVuZFN0cmluZyhGWF9CU1RSQygiXHJcbmVuZHN0cmVhbVxyXG5lbmRvYmpcclxuIikpKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBvZmZzZXQgKz0gZW5jb2Rlci5tX2R3U2l6ZSArIGxlbjsKKyAgICBtX1ByZXZPZmZzZXQgPSBvZmZzZXRfdG1wOworICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDUERGX1hSZWZTdHJlYW06OkVuZChDUERGX0NyZWF0b3IgKnBDcmVhdG9yLCBGWF9CT09MIGJFT0YgKQoreworICAgIGlmIChFbmRPYmplY3RTdHJlYW0ocENyZWF0b3IsIGJFT0YpIDwgMCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBHZW5lcmF0ZVhSZWZTdHJlYW0ocENyZWF0b3IsIGJFT0YpOworfQorRlhfQk9PTCBDUERGX1hSZWZTdHJlYW06OkVuZFhSZWZTdHJlYW0oQ1BERl9DcmVhdG9yKiBwQ3JlYXRvcikKK3sKKyAgICBpZiAoIShwQ3JlYXRvci0+bV9kd0ZsYWdzICYgRlBERkNSRUFURV9JTkNSRU1FTlRBTCkpIHsKKyAgICAgICAgX0FwcGVuZEluZGV4MChtX0J1ZmZlcik7CisgICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDE7IGkgPCBwQ3JlYXRvci0+bV9kd0xhc3RPYmpOdW0gKyAxOyBpKyspIHsKKyAgICAgICAgICAgIEZYX0ZJTEVTSVpFKiBvZmZzZXQgPSBwQ3JlYXRvci0+bV9PYmplY3RPZmZzZXQuR2V0UHRyQXQoaSk7CisgICAgICAgICAgICBpZiAob2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgX0FwcGVuZEluZGV4MShtX0J1ZmZlciwgKm9mZnNldCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIF9BcHBlbmRJbmRleDAobV9CdWZmZXIsIEZBTFNFKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEZYX0lOVDMyIGlTZWcgPSBtX0luZGV4QXJyYXkuR2V0U2l6ZSgpIC8gMjsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpU2VnOyBpKyspIHsKKyAgICAgICAgICAgIEZYX0RXT1JEIHN0YXJ0ID0gbV9JbmRleEFycmF5LkVsZW1lbnRBdChpICogMik7CisgICAgICAgICAgICBGWF9EV09SRCBlbmQgPSBtX0luZGV4QXJyYXkuRWxlbWVudEF0KGkgKiAyICsgMSkgKyBzdGFydDsKKyAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgaiA9IHN0YXJ0OyBqIDwgZW5kOyBqKyspIHsKKyAgICAgICAgICAgICAgICBfQXBwZW5kSW5kZXgxKG1fQnVmZmVyLCBwQ3JlYXRvci0+bV9PYmplY3RPZmZzZXRbal0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBHZW5lcmF0ZVhSZWZTdHJlYW0ocENyZWF0b3IsIEZBTFNFKTsKK30KK0ZYX0JPT0wgQ1BERl9YUmVmU3RyZWFtOjpBZGRPYmplY3ROdW1iZXJUb0luZGV4QXJyYXkoRlhfRFdPUkQgb2JqbnVtKQoreworICAgIEZYX0lOVDMyIGlTaXplID0gbV9JbmRleEFycmF5LkdldFNpemUoKTsKKyAgICBpZiAoaVNpemUgPT0gMCkgeworICAgICAgICBtX0luZGV4QXJyYXkuQWRkKG9iam51bSk7CisgICAgICAgIG1fSW5kZXhBcnJheS5BZGQoMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgRlhTWVNfYXNzZXJ0KGlTaXplID4gMSk7CisgICAgICAgIEZYX0RXT1JEIHN0YXJ0b2JqbnVtID0gbV9JbmRleEFycmF5LkVsZW1lbnRBdChpU2l6ZSAtIDIpOworICAgICAgICBGWF9JTlQzMiBpQ291bnQgPSBtX0luZGV4QXJyYXkuRWxlbWVudEF0KGlTaXplIC0gMSk7CisgICAgICAgIGlmIChvYmpudW0gPT0gc3RhcnRvYmpudW0gKyBpQ291bnQpIHsKKyAgICAgICAgICAgIG1fSW5kZXhBcnJheVtpU2l6ZSAtIDFdID0gaUNvdW50ICsgMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fSW5kZXhBcnJheS5BZGQob2JqbnVtKTsKKyAgICAgICAgICAgIG1fSW5kZXhBcnJheS5BZGQoMSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitDUERGX0NyZWF0b3I6OkNQREZfQ3JlYXRvcihDUERGX0RvY3VtZW50KiBwRG9jKQoreworICAgIG1fcERvY3VtZW50ID0gcERvYzsKKyAgICBtX3BQYXJzZXIgPSAoQ1BERl9QYXJzZXIqKXBEb2MtPm1fcFBhcnNlcjsKKyAgICBtX2JDb21wcmVzcyA9IFRSVUU7CisgICAgaWYgKG1fcFBhcnNlcikgeworICAgICAgICBtX3BFbmNyeXB0RGljdCA9IG1fcFBhcnNlci0+R2V0RW5jcnlwdERpY3QoKTsKKyAgICAgICAgbV9wQ3J5cHRvSGFuZGxlciA9IG1fcFBhcnNlci0+R2V0Q3J5cHRvSGFuZGxlcigpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcEVuY3J5cHREaWN0ID0gTlVMTDsKKyAgICAgICAgbV9wQ3J5cHRvSGFuZGxlciA9IE5VTEw7CisgICAgfQorICAgIG1fYlNlY3VyaXR5Q2hhbmdlZCA9IEZBTFNFOworICAgIG1fYlN0YW5kYXJkU2VjdXJpdHkgPSBGQUxTRTsKKyAgICBtX3BNZXRhZGF0YSA9IE5VTEw7CisgICAgbV9iRW5jcnlwdENsb25lZCA9IEZBTFNFOworICAgIG1fYkVuY3J5cHRNZXRhZGF0YSA9IEZBTFNFOworICAgIG1fT2Zmc2V0ID0gMDsKKyAgICBtX2lTdGFnZSA9IC0xOworICAgIG1fZHdGbGFncyA9IDA7CisgICAgbV9Qb3MgPSBOVUxMOworICAgIG1fWHJlZlN0YXJ0ID0gMDsKKyAgICBtX3BYUmVmU3RyZWFtID0gTlVMTDsKKyAgICBtX09iamVjdFN0cmVhbVNpemUgPSAyMDA7CisgICAgbV9kd0xhc3RPYmpOdW0gPSBtX3BEb2N1bWVudC0+R2V0TGFzdE9iak51bSgpOworICAgIG1fcElEQXJyYXkgPSBOVUxMOworICAgIG1fRmlsZVZlcnNpb24gPSAwOworICAgIG1fZHdFbnJ5cHRPYmpOdW0gPSAwOworICAgIG1fYk5ld0NyeXB0byA9IEZBTFNFOworfQorQ1BERl9DcmVhdG9yOjp+Q1BERl9DcmVhdG9yKCkKK3sKKyAgICBSZXNldFN0YW5kYXJkU2VjdXJpdHkoKTsKKyAgICBpZiAobV9iRW5jcnlwdENsb25lZCAmJiBtX3BFbmNyeXB0RGljdCkgeworICAgICAgICBtX3BFbmNyeXB0RGljdC0+UmVsZWFzZSgpOworICAgICAgICBtX3BFbmNyeXB0RGljdCA9IE5VTEw7CisgICAgfQorICAgIENsZWFyKCk7Cit9CitzdGF0aWMgRlhfQk9PTCBfSXNYUmVmTmVlZEVuZChDUERGX1hSZWZTdHJlYW0qIHBYUmVmLCBGWF9EV09SRCBmbGFnKQoreworICAgIGlmICghKGZsYWcgJiBGUERGQ1JFQVRFX0lOQ1JFTUVOVEFMKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEZYX0lOVDMyIGlTaXplID0gcFhSZWYtPm1fSW5kZXhBcnJheS5HZXRTaXplKCkgLyAyOworICAgIEZYX0lOVDMyIGlDb3VudCA9IDA7CisgICAgZm9yIChGWF9JTlQzMiBpID0gMDsgaSA8IGlTaXplOyBpKyspIHsKKyAgICAgICAgaUNvdW50ICs9IHBYUmVmLT5tX0luZGV4QXJyYXkuRWxlbWVudEF0KGkgKiAyICsgMSk7CisgICAgfQorICAgIHJldHVybiAoaUNvdW50ID49IFBERl9YUkVGU1RSRUFNX01BWFNJWkUpOworfQorRlhfSU5UMzIgQ1BERl9DcmVhdG9yOjpXcml0ZUluZGlyZWN0T2JqZWN0VG9TdHJlYW0oY29uc3QgQ1BERl9PYmplY3QqIHBPYmopCit7CisgICAgaWYgKCFtX3BYUmVmU3RyZWFtKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBGWF9EV09SRCBvYmpudW0gPSBwT2JqLT5HZXRPYmpOdW0oKTsKKyAgICBpZiAobV9wUGFyc2VyICYmIG1fcFBhcnNlci0+bV9PYmpWZXJzaW9uLkdldFNpemUoKSA+IChGWF9JTlQzMilvYmpudW0gJiYgbV9wUGFyc2VyLT5tX09ialZlcnNpb25bb2JqbnVtXSA+IDApIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmIChwT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX05VTUJFUikgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5ICpwRGljdCA9IHBPYmotPkdldERpY3QoKTsKKyAgICBpZiAocE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJFQU0pIHsKKyAgICAgICAgaWYgKHBEaWN0ICYmIHBEaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIlR5cGUiKSkgPT0gRlhfQlNUUkMoIlhSZWYiKSkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmIChwRGljdCkgeworICAgICAgICBpZiAocERpY3QgPT0gbV9wRG9jdW1lbnQtPm1fcFJvb3REaWN0IHx8IHBEaWN0ID09IG1fcEVuY3J5cHREaWN0KSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoSXNTaWduYXR1cmVEaWN0KHBEaWN0KSkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBEaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIlR5cGUiKSkgPT0gRlhfQlNUUkMoIlBhZ2UiKSkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9wWFJlZlN0cmVhbS0+QWRkT2JqZWN0TnVtYmVyVG9JbmRleEFycmF5KG9iam51bSk7CisgICAgaWYgKG1fcFhSZWZTdHJlYW0tPkNvbXByZXNzSW5kaXJlY3RPYmplY3Qob2JqbnVtLCBwT2JqLCB0aGlzKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAoIV9Jc1hSZWZOZWVkRW5kKG1fcFhSZWZTdHJlYW0sIG1fZHdGbGFncykpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICghbV9wWFJlZlN0cmVhbS0+RW5kKHRoaXMpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKCFtX3BYUmVmU3RyZWFtLT5TdGFydCgpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CitGWF9JTlQzMiBDUERGX0NyZWF0b3I6OldyaXRlSW5kaXJlY3RPYmplY3RUb1N0cmVhbShGWF9EV09SRCBvYmpudW0sIEZYX0xQQ0JZVEUgcEJ1ZmZlciwgRlhfRFdPUkQgZHdTaXplKQoreworICAgIGlmICghbV9wWFJlZlN0cmVhbSkgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgbV9wWFJlZlN0cmVhbS0+QWRkT2JqZWN0TnVtYmVyVG9JbmRleEFycmF5KG9iam51bSk7CisgICAgRlhfSU5UMzIgaVJldCA9IG1fcFhSZWZTdHJlYW0tPkNvbXByZXNzSW5kaXJlY3RPYmplY3Qob2JqbnVtLCBwQnVmZmVyLCBkd1NpemUsIHRoaXMpOworICAgIGlmIChpUmV0IDwgMSkgeworICAgICAgICByZXR1cm4gaVJldDsKKyAgICB9CisgICAgaWYgKCFfSXNYUmVmTmVlZEVuZChtX3BYUmVmU3RyZWFtLCBtX2R3RmxhZ3MpKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoIW1fcFhSZWZTdHJlYW0tPkVuZCh0aGlzKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICghbV9wWFJlZlN0cmVhbS0+U3RhcnQoKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworfQorRlhfSU5UMzIgQ1BERl9DcmVhdG9yOjpBcHBlbmRPYmplY3ROdW1iZXJUb1hSZWYoRlhfRFdPUkQgb2JqbnVtKQoreworICAgIGlmICghbV9wWFJlZlN0cmVhbSkgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgbV9wWFJlZlN0cmVhbS0+QWRkT2JqZWN0TnVtYmVyVG9JbmRleEFycmF5KG9iam51bSk7CisgICAgaWYgKCFfSXNYUmVmTmVlZEVuZChtX3BYUmVmU3RyZWFtLCBtX2R3RmxhZ3MpKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoIW1fcFhSZWZTdHJlYW0tPkVuZCh0aGlzKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICghbV9wWFJlZlN0cmVhbS0+U3RhcnQoKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworfQorRlhfSU5UMzIgQ1BERl9DcmVhdG9yOjpXcml0ZVN0cmVhbShjb25zdCBDUERGX09iamVjdCogcFN0cmVhbSwgRlhfRFdPUkQgb2JqbnVtLCBDUERGX0NyeXB0b0hhbmRsZXIqIHBDcnlwdG8pCit7CisgICAgQ1BERl9GbGF0ZUVuY29kZXIgZW5jb2RlcjsKKyAgICBlbmNvZGVyLkluaXRpYWxpemUoKENQREZfU3RyZWFtKilwU3RyZWFtLCBwU3RyZWFtID09IG1fcE1ldGFkYXRhID8gRkFMU0UgOiBtX2JDb21wcmVzcyk7CisgICAgQ1BERl9FbmNyeXB0b3IgZW5jcnlwdG9yOworICAgIGlmKCFlbmNyeXB0b3IuSW5pdGlhbGl6ZShwQ3J5cHRvLCBvYmpudW0sIGVuY29kZXIubV9wRGF0YSwgZW5jb2Rlci5tX2R3U2l6ZSkpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAoKEZYX0RXT1JEKWVuY29kZXIubV9wRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiTGVuZ3RoIikpICE9IGVuY3J5cHRvci5tX2R3U2l6ZSkgeworICAgICAgICBlbmNvZGVyLkNsb25lRGljdCgpOworICAgICAgICBlbmNvZGVyLm1fcERpY3QtPlNldEF0SW50ZWdlcihGWF9CU1RSQygiTGVuZ3RoIiksIGVuY3J5cHRvci5tX2R3U2l6ZSk7CisgICAgfQorICAgIGlmIChXcml0ZURpcmVjdE9iaihvYmpudW0sIGVuY29kZXIubV9wRGljdCkgPCAwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaW50IGxlbiA9IG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoInN0cmVhbVxyXG4iKSk7CisgICAgaWYgKGxlbiA8IDApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBtX09mZnNldCArPSBsZW47CisgICAgaWYgKG1fRmlsZS5BcHBlbmRCbG9jayhlbmNyeXB0b3IubV9wRGF0YSwgZW5jcnlwdG9yLm1fZHdTaXplKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBtX09mZnNldCArPSBlbmNyeXB0b3IubV9kd1NpemU7CisgICAgaWYgKChsZW4gPSBtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCJcclxuZW5kc3RyZWFtIikpKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBtX09mZnNldCArPSBsZW47CisgICAgcmV0dXJuIDE7Cit9CitGWF9JTlQzMiBDUERGX0NyZWF0b3I6OldyaXRlSW5kaXJlY3RPYmooRlhfRFdPUkQgb2JqbnVtLCBjb25zdCBDUERGX09iamVjdCogcE9iaikKK3sKKyAgICBGWF9JTlQzMiBsZW4gPSBtX0ZpbGUuQXBwZW5kRFdvcmQob2JqbnVtKTsKKyAgICBpZiAobGVuIDwgMCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIG1fT2Zmc2V0ICs9IGxlbjsKKyAgICBpZiAoKGxlbiA9IG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAwIG9ialxyXG4iKSkpIDwgMCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIG1fT2Zmc2V0ICs9IGxlbjsKKyAgICBpZiAocE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJFQU0pIHsKKyAgICAgICAgQ1BERl9DcnlwdG9IYW5kbGVyICpwSGFuZGxlciA9IE5VTEw7CisgICAgICAgIHBIYW5kbGVyID0gKHBPYmogPT0gbV9wTWV0YWRhdGEgJiYgIW1fYkVuY3J5cHRNZXRhZGF0YSkgPyBOVUxMIDogbV9wQ3J5cHRvSGFuZGxlcjsKKyAgICAgICAgaWYgKFdyaXRlU3RyZWFtKHBPYmosIG9iam51bSwgcEhhbmRsZXIpIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKFdyaXRlRGlyZWN0T2JqKG9iam51bSwgcE9iaikgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKChsZW4gPSBtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCJcclxuZW5kb2JqXHJcbiIpKSkgPCAwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgbV9PZmZzZXQgKz0gbGVuOworICAgIGlmIChBcHBlbmRPYmplY3ROdW1iZXJUb1hSZWYob2JqbnVtKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KK0ZYX0lOVDMyIENQREZfQ3JlYXRvcjo6V3JpdGVJbmRpcmVjdE9iaihjb25zdCBDUERGX09iamVjdCogcE9iaikKK3sKKyAgICBGWF9JTlQzMiBpUmV0ID0gV3JpdGVJbmRpcmVjdE9iamVjdFRvU3RyZWFtKHBPYmopOworICAgIGlmIChpUmV0IDwgMSkgeworICAgICAgICByZXR1cm4gaVJldDsKKyAgICB9CisgICAgcmV0dXJuIFdyaXRlSW5kaXJlY3RPYmoocE9iai0+R2V0T2JqTnVtKCksIHBPYmopOworfQorRlhfSU5UMzIgQ1BERl9DcmVhdG9yOjpXcml0ZURpcmVjdE9iaihGWF9EV09SRCBvYmpudW0sIGNvbnN0IENQREZfT2JqZWN0KiBwT2JqLCBGWF9CT09MIGJFbmNyeXB0KQoreworICAgIEZYX0lOVDMyIGxlbiA9IDA7CisgICAgaWYgKHBPYmogPT0gTlVMTCkgeworICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiIG51bGwiKSkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgbV9PZmZzZXQgKz0gNTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHN3aXRjaCAocE9iai0+R2V0VHlwZSgpKSB7CisgICAgICAgIGNhc2UgUERGT0JKX05VTEw6CisgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiIG51bGwiKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9PZmZzZXQgKz0gNTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBERk9CSl9CT09MRUFOOgorICAgICAgICBjYXNlIFBERk9CSl9OVU1CRVI6CisgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiICIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKGxlbiA9IG1fRmlsZS5BcHBlbmRTdHJpbmcocE9iai0+R2V0U3RyaW5nKCkpKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX09mZnNldCArPSBsZW4gKyAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUERGT0JKX1NUUklORzogeworICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIHN0ciA9IHBPYmotPkdldFN0cmluZygpOworICAgICAgICAgICAgICAgIEZYX0JPT0wgYkhleCA9ICgoQ1BERl9TdHJpbmcqKXBPYmopLT5Jc0hleCgpOworICAgICAgICAgICAgICAgIGlmIChtX3BDcnlwdG9IYW5kbGVyID09IE5VTEwgfHwgIWJFbmNyeXB0KSB7CisgICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGNvbnRlbnQgPSBQREZfRW5jb2RlU3RyaW5nKHN0ciwgYkhleCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgobGVuID0gbV9GaWxlLkFwcGVuZFN0cmluZyhjb250ZW50KSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbV9PZmZzZXQgKz0gbGVuOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ1BERl9FbmNyeXB0b3IgZW5jcnlwdG9yOworICAgICAgICAgICAgICAgIGVuY3J5cHRvci5Jbml0aWFsaXplKG1fcENyeXB0b0hhbmRsZXIsIG9iam51bSwgKEZYX0xQQllURSkoRlhfTFBDU1RSKXN0ciwgc3RyLkdldExlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBjb250ZW50ID0gUERGX0VuY29kZVN0cmluZyhDRlhfQnl0ZVN0cmluZygoRlhfTFBDU1RSKWVuY3J5cHRvci5tX3BEYXRhLCBlbmNyeXB0b3IubV9kd1NpemUpLCBiSGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoKGxlbiA9IG1fRmlsZS5BcHBlbmRTdHJpbmcoY29udGVudCkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fT2Zmc2V0ICs9IGxlbjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBQREZPQkpfU1RSRUFNOiB7CisgICAgICAgICAgICAgICAgQ1BERl9GbGF0ZUVuY29kZXIgZW5jb2RlcjsKKyAgICAgICAgICAgICAgICBlbmNvZGVyLkluaXRpYWxpemUoKENQREZfU3RyZWFtKilwT2JqLCBtX2JDb21wcmVzcyk7CisgICAgICAgICAgICAgICAgQ1BERl9FbmNyeXB0b3IgZW5jcnlwdG9yOworICAgICAgICAgICAgICAgIENQREZfQ3J5cHRvSGFuZGxlciogcEhhbmRsZXIgPSBtX3BDcnlwdG9IYW5kbGVyOworICAgICAgICAgICAgICAgIGVuY3J5cHRvci5Jbml0aWFsaXplKHBIYW5kbGVyLCBvYmpudW0sIGVuY29kZXIubV9wRGF0YSwgZW5jb2Rlci5tX2R3U2l6ZSk7CisgICAgICAgICAgICAgICAgaWYgKChGWF9EV09SRCllbmNvZGVyLm1fcERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIkxlbmd0aCIpKSAhPSBlbmNyeXB0b3IubV9kd1NpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgZW5jb2Rlci5DbG9uZURpY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgZW5jb2Rlci5tX3BEaWN0LT5TZXRBdEludGVnZXIoRlhfQlNUUkMoIkxlbmd0aCIpLCBlbmNyeXB0b3IubV9kd1NpemUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoV3JpdGVEaXJlY3RPYmoob2JqbnVtLCBlbmNvZGVyLm1fcERpY3QpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgobGVuID0gbV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygic3RyZWFtXHJcbiIpKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9PZmZzZXQgKz0gbGVuOworICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kQmxvY2soZW5jcnlwdG9yLm1fcERhdGEsIGVuY3J5cHRvci5tX2R3U2l6ZSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9PZmZzZXQgKz0gZW5jcnlwdG9yLm1fZHdTaXplOworICAgICAgICAgICAgICAgIGlmICgobGVuID0gbV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiXHJcbmVuZHN0cmVhbSIpKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9PZmZzZXQgKz0gbGVuOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFBERk9CSl9OQU1FOiB7CisgICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIi8iKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc3RyID0gcE9iai0+R2V0U3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKChsZW4gPSBtX0ZpbGUuQXBwZW5kU3RyaW5nKFBERl9OYW1lRW5jb2RlKHN0cikpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX09mZnNldCArPSBsZW4gKyAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFBERk9CSl9SRUZFUkVOQ0U6IHsKKyAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiICIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBDUERGX1JlZmVyZW5jZSogcCA9IChDUERGX1JlZmVyZW5jZSopcE9iajsKKyAgICAgICAgICAgICAgICBpZiAoKGxlbiA9IG1fRmlsZS5BcHBlbmREV29yZChwLT5HZXRSZWZPYmpOdW0oKSkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgMCBSIikpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fT2Zmc2V0ICs9IGxlbiArIDU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgUERGT0JKX0FSUkFZOiB7CisgICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIlsiKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9PZmZzZXQgKz0gMTsKKyAgICAgICAgICAgICAgICBDUERGX0FycmF5KiBwID0gKENQREZfQXJyYXkqKXBPYmo7CisgICAgICAgICAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHAtPkdldENvdW50KCk7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBFbGVtZW50ID0gcC0+R2V0RWxlbWVudChpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBFbGVtZW50LT5HZXRPYmpOdW0oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAiKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsZW4gPSBtX0ZpbGUuQXBwZW5kRFdvcmQocEVsZW1lbnQtPkdldE9iak51bSgpKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAwIFIiKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbV9PZmZzZXQgKz0gbGVuICsgNTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXcml0ZURpcmVjdE9iaihvYmpudW0sIHBFbGVtZW50KSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIl0iKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9PZmZzZXQgKz0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBQREZPQkpfRElDVElPTkFSWTogeworICAgICAgICAgICAgICAgIGlmIChtX3BDcnlwdG9IYW5kbGVyID09IE5VTEwgfHwgcE9iaiA9PSBtX3BFbmNyeXB0RGljdCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gUERGX0NyZWF0b3JBcHBlbmRPYmplY3QocE9iaiwgJm1fRmlsZSwgbV9PZmZzZXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiPDwiKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9PZmZzZXQgKz0gMjsKKyAgICAgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHAgPSAoQ1BERl9EaWN0aW9uYXJ5KilwT2JqOworICAgICAgICAgICAgICAgIEZYX0JPT0wgYlNpZ25EaWN0ID0gSXNTaWduYXR1cmVEaWN0KHApOworICAgICAgICAgICAgICAgIEZYX1BPU0lUSU9OIHBvcyA9IHAtPkdldFN0YXJ0UG9zKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKHBvcykgeworICAgICAgICAgICAgICAgICAgICBGWF9CT09MIGJTaWduVmFsdWUgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcga2V5OworICAgICAgICAgICAgICAgICAgICBDUERGX09iamVjdCogcFZhbHVlID0gcC0+R2V0TmV4dEVsZW1lbnQocG9zLCBrZXkpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiLyIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoKGxlbiA9IG1fRmlsZS5BcHBlbmRTdHJpbmcoUERGX05hbWVFbmNvZGUoa2V5KSkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1fT2Zmc2V0ICs9IGxlbiArIDE7CisgICAgICAgICAgICAgICAgICAgIGlmIChiU2lnbkRpY3QgJiYga2V5ID09IEZYX0JTVFJDKCJDb250ZW50cyIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiU2lnblZhbHVlID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocFZhbHVlLT5HZXRPYmpOdW0oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAiKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsZW4gPSBtX0ZpbGUuQXBwZW5kRFdvcmQocFZhbHVlLT5HZXRPYmpOdW0oKSkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgMCBSICIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBtX09mZnNldCArPSBsZW4gKyA2OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdyaXRlRGlyZWN0T2JqKG9iam51bSwgcFZhbHVlLCAhYlNpZ25WYWx1ZSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCI+PiIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX09mZnNldCArPSAyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMTsKK30KK0ZYX0lOVDMyIENQREZfQ3JlYXRvcjo6V3JpdGVPbGRJbmRpcmVjdE9iamVjdChGWF9EV09SRCBvYmpudW0pCit7CisgICAgaWYobV9wUGFyc2VyLT5tX1Y1VHlwZVtvYmpudW1dID09IDAgfHwgbV9wUGFyc2VyLT5tX1Y1VHlwZVtvYmpudW1dID09IDI1NSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgbV9PYmplY3RPZmZzZXRbb2JqbnVtXSA9IG1fT2Zmc2V0OworICAgIEZYX0xQVk9JRCB2YWx1ZXRlbXAgPSBOVUxMOworICAgIEZYX0JPT0wgYkV4aXN0SW5NYXAgPSBtX3BEb2N1bWVudC0+bV9JbmRpcmVjdE9ianMuTG9va3VwKChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpb2JqbnVtLCB2YWx1ZXRlbXApOworICAgIEZYX0JPT0wgYk9ialN0bSA9IChtX3BQYXJzZXItPm1fVjVUeXBlW29iam51bV0gPT0gMikgJiYgbV9wRW5jcnlwdERpY3QgJiYgIW1fcFhSZWZTdHJlYW07CisgICAgaWYobV9wUGFyc2VyLT5tX2JWZXJzaW9uVXBkYXRlZCB8fCBtX2JTZWN1cml0eUNoYW5nZWQgfHwgYkV4aXN0SW5NYXAgfHwgYk9ialN0bSkgeworICAgICAgICBDUERGX09iamVjdCogcE9iaiA9IG1fcERvY3VtZW50LT5HZXRJbmRpcmVjdE9iamVjdChvYmpudW0pOworICAgICAgICBpZiAocE9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICBtX09iamVjdE9mZnNldFtvYmpudW1dID0gMDsKKyAgICAgICAgICAgIG1fT2JqZWN0U2l6ZVtvYmpudW1dID0gMDsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlmIChXcml0ZUluZGlyZWN0T2JqKHBPYmopKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFiRXhpc3RJbk1hcCkgeworICAgICAgICAgICAgbV9wRG9jdW1lbnQtPlJlbGVhc2VJbmRpcmVjdE9iamVjdChvYmpudW0pOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgRlhfQllURSogcEJ1ZmZlcjsKKyAgICAgICAgRlhfRFdPUkQgc2l6ZTsKKyAgICAgICAgbV9wUGFyc2VyLT5HZXRJbmRpcmVjdEJpbmFyeShvYmpudW0sIHBCdWZmZXIsIHNpemUpOworICAgICAgICBpZiAocEJ1ZmZlciA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9wUGFyc2VyLT5tX1Y1VHlwZVtvYmpudW1dID09IDIpIHsKKyAgICAgICAgICAgIGlmIChtX3BYUmVmU3RyZWFtKSB7CisgICAgICAgICAgICAgICAgaWYgKFdyaXRlSW5kaXJlY3RPYmplY3RUb1N0cmVhbShvYmpudW0sIHBCdWZmZXIsIHNpemUpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBGWF9GcmVlKHBCdWZmZXIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBGWF9JTlQzMiBsZW4gPSBtX0ZpbGUuQXBwZW5kRFdvcmQob2JqbnVtKTsKKyAgICAgICAgICAgICAgICBpZiAobGVuIDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgMCBvYmogIikpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fT2Zmc2V0ICs9IGxlbiArIDc7CisgICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRCbG9jayhwQnVmZmVyLCBzaXplKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX09mZnNldCArPSBzaXplOworICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCJcclxuZW5kb2JqXHJcbiIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX09mZnNldCArPSAxMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kQmxvY2socEJ1ZmZlciwgc2l6ZSkgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9PZmZzZXQgKz0gc2l6ZTsKKyAgICAgICAgICAgIGlmKEFwcGVuZE9iamVjdE51bWJlclRvWFJlZihvYmpudW0pIDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBGWF9GcmVlKHBCdWZmZXIpOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KK0ZYX0lOVDMyIENQREZfQ3JlYXRvcjo6V3JpdGVPbGRPYmpzKElGWF9QYXVzZSAqcFBhdXNlKQoreworICAgIEZYX0RXT1JEIG5PbGRTaXplID0gbV9wUGFyc2VyLT5tX0Nyb3NzUmVmLkdldFNpemUoKTsKKyAgICBGWF9EV09SRCBvYmpudW0gPSAoRlhfRFdPUkQpKEZYX1VJTlRQVFIpbV9Qb3M7CisgICAgZm9yKDsgb2JqbnVtIDwgbk9sZFNpemU7IG9iam51bSArKykgeworICAgICAgICBGWF9JTlQzMiBpUmV0ID0gV3JpdGVPbGRJbmRpcmVjdE9iamVjdChvYmpudW0pOworICAgICAgICBpZiAoIWlSZXQpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpUmV0IDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIGlSZXQ7CisgICAgICAgIH0KKyAgICAgICAgbV9PYmplY3RTaXplW29iam51bV0gPSAoRlhfRFdPUkQpKG1fT2Zmc2V0IC0gbV9PYmplY3RPZmZzZXRbb2JqbnVtXSk7CisgICAgICAgIGlmIChwUGF1c2UgJiYgcFBhdXNlLT5OZWVkVG9QYXVzZU5vdygpKSB7CisgICAgICAgICAgICBtX1BvcyA9IChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpKG9iam51bSArIDEpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CitGWF9JTlQzMiBDUERGX0NyZWF0b3I6OldyaXRlTmV3T2JqcyhGWF9CT09MIGJJbmNyZW1lbnRhbCwgSUZYX1BhdXNlICpwUGF1c2UpCit7CisgICAgRlhfSU5UMzIgaUNvdW50ID0gbV9OZXdPYmpOdW1BcnJheS5HZXRTaXplKCk7CisgICAgRlhfSU5UMzIgaW5kZXggPSAoRlhfSU5UMzIpKEZYX1VJTlRQVFIpbV9Qb3M7CisgICAgd2hpbGUgKGluZGV4IDwgaUNvdW50KSB7CisgICAgICAgIEZYX0RXT1JEIG9iam51bSA9IG1fTmV3T2JqTnVtQXJyYXkuRWxlbWVudEF0KGluZGV4KTsKKyAgICAgICAgQ1BERl9PYmplY3QgKnBPYmogPSBOVUxMOworICAgICAgICBtX3BEb2N1bWVudC0+bV9JbmRpcmVjdE9ianMuTG9va3VwKChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpb2JqbnVtLCAoRlhfTFBWT0lEJilwT2JqKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gcE9iaikgeworICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIG1fT2JqZWN0T2Zmc2V0W29iam51bV0gPSBtX09mZnNldDsKKyAgICAgICAgaWYgKFdyaXRlSW5kaXJlY3RPYmoocE9iaikpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBtX09iamVjdFNpemVbb2JqbnVtXSA9IChGWF9EV09SRCkobV9PZmZzZXQgLSBtX09iamVjdE9mZnNldFtvYmpudW1dKTsKKyAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgaWYgKHBQYXVzZSAmJiBwUGF1c2UtPk5lZWRUb1BhdXNlTm93KCkpIHsKKyAgICAgICAgICAgIG1fUG9zID0gKEZYX1BPU0lUSU9OKShGWF9VSU5UUFRSKWluZGV4OworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9Cit2b2lkIENQREZfQ3JlYXRvcjo6SW5pdE9sZE9iak51bU9mZnNldHMoKQoreworICAgIGlmICghbV9wUGFyc2VyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfRFdPUkQgaiA9IDA7CisgICAgRlhfRFdPUkQgZHdTdGFydCA9IDA7CisgICAgRlhfRFdPUkQgZHdFbmQgPSBtX3BQYXJzZXItPkdldExhc3RPYmpOdW0oKTsKKyAgICB3aGlsZSAoZHdTdGFydCA8PSBkd0VuZCkgeworICAgICAgICB3aGlsZSAoZHdTdGFydCA8PSBkd0VuZCAmJiAobV9wUGFyc2VyLT5tX1Y1VHlwZVtkd1N0YXJ0XSA9PSAwIHx8IG1fcFBhcnNlci0+bV9WNVR5cGVbZHdTdGFydF0gPT0gMjU1KSkgeworICAgICAgICAgICAgZHdTdGFydCsrOworICAgICAgICB9CisgICAgICAgIGlmIChkd1N0YXJ0ID4gZHdFbmQpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGogPSBkd1N0YXJ0OworICAgICAgICB3aGlsZSAoaiA8PSBkd0VuZCAmJiBtX3BQYXJzZXItPm1fVjVUeXBlW2pdICE9IDAgJiYgbV9wUGFyc2VyLT5tX1Y1VHlwZVtqXSAhPSAyNTUpIHsKKyAgICAgICAgICAgIGorKzsKKyAgICAgICAgfQorICAgICAgICBtX09iamVjdE9mZnNldC5BZGQoZHdTdGFydCwgaiAtIGR3U3RhcnQpOworICAgICAgICBtX09iamVjdFNpemUuQWRkKGR3U3RhcnQsIGogLSBkd1N0YXJ0KTsKKyAgICAgICAgZHdTdGFydCA9IGo7CisgICAgfQorfQordm9pZCBDUERGX0NyZWF0b3I6OkluaXROZXdPYmpOdW1PZmZzZXRzKCkKK3sKKyAgICBGWF9CT09MIGJJbmNyZW1lbnRhbCA9IChtX2R3RmxhZ3MgJiBGUERGQ1JFQVRFX0lOQ1JFTUVOVEFMKSAhPSAwOworICAgIEZYX0JPT0wgYk5vT3JpZ2luYWwgPSAobV9kd0ZsYWdzICYgRlBERkNSRUFURV9OT19PUklHSU5BTCkgIT0gMDsKKyAgICBGWF9EV09SRCBuT2xkU2l6ZSA9IG1fcFBhcnNlciA/IG1fcFBhcnNlci0+bV9Dcm9zc1JlZi5HZXRTaXplKCkgOiAwOworICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fcERvY3VtZW50LT5tX0luZGlyZWN0T2Jqcy5HZXRTdGFydFBvc2l0aW9uKCk7CisgICAgd2hpbGUgKHBvcykgeworICAgICAgICBzaXplX3Qga2V5ID0gMDsKKyAgICAgICAgQ1BERl9PYmplY3QqIHBPYmo7CisgICAgICAgIG1fcERvY3VtZW50LT5tX0luZGlyZWN0T2Jqcy5HZXROZXh0QXNzb2MocG9zLCAoRlhfTFBWT0lEJilrZXksIChGWF9MUFZPSUQmKXBPYmopOworICAgICAgICBGWF9EV09SRCBvYmpudW0gPSAoRlhfRFdPUkQpa2V5OworICAgICAgICBpZiAocE9iai0+R2V0T2JqTnVtKCkgPT0gLTEpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChiSW5jcmVtZW50YWwpIHsKKyAgICAgICAgICAgIGlmICghcE9iai0+SXNNb2RpZmllZCgpKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAob2JqbnVtIDwgbk9sZFNpemUgJiYgbV9wUGFyc2VyLT5tX1Y1VHlwZVtvYmpudW1dICE9IDApIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBcHBlbmROZXdPYmpOdW0ob2JqbnVtKTsKKyAgICB9CisgICAgRlhfSU5UMzIgaUNvdW50ID0gbV9OZXdPYmpOdW1BcnJheS5HZXRTaXplKCk7CisgICAgaWYgKGlDb3VudCA9PSAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfSU5UMzIgaSA9IDA7CisgICAgRlhfRFdPUkQgZHdTdGFydE9iak51bSA9IDA7CisgICAgRlhfQk9PTCBiQ3Jvc3NSZWZWYWxpZCA9IG1fcFBhcnNlciAmJiBtX3BQYXJzZXItPkdldExhc3RYUmVmT2Zmc2V0KCkgPiAwOworICAgIHdoaWxlIChpIDwgaUNvdW50KSB7CisgICAgICAgIGR3U3RhcnRPYmpOdW0gPSBtX05ld09iak51bUFycmF5LkVsZW1lbnRBdChpKTsKKyAgICAgICAgaWYgKChiSW5jcmVtZW50YWwgJiYgKGJOb09yaWdpbmFsIHx8IGJDcm9zc1JlZlZhbGlkKSkgfHwgIW1fT2JqZWN0T2Zmc2V0LkdldFB0ckF0KGR3U3RhcnRPYmpOdW0pKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpKys7CisgICAgfQorICAgIGlmIChpID49IGlDb3VudCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX0RXT1JEIGR3TGFzdE9iak51bSA9IGR3U3RhcnRPYmpOdW07CisgICAgaSsrOworICAgIEZYX0JPT0wgYk5ld1N0YXJ0ID0gRkFMU0U7CisgICAgZm9yICg7IGkgPCBpQ291bnQ7IGkrKykgeworICAgICAgICBGWF9EV09SRCBkd0N1ck9iak51bSA9IG1fTmV3T2JqTnVtQXJyYXkuRWxlbWVudEF0KGkpOworICAgICAgICBGWF9CT09MIGJFeGlzdCA9IChkd0N1ck9iak51bSA8IG5PbGRTaXplICYmIG1fT2JqZWN0T2Zmc2V0LkdldFB0ckF0KGR3Q3VyT2JqTnVtKSAhPSBOVUxMKTsKKyAgICAgICAgaWYgKGJFeGlzdCB8fCBkd0N1ck9iak51bSAtIGR3TGFzdE9iak51bSA+IDEpIHsKKyAgICAgICAgICAgIGlmICghYk5ld1N0YXJ0KSB7CisgICAgICAgICAgICAgICAgbV9PYmplY3RPZmZzZXQuQWRkKGR3U3RhcnRPYmpOdW0sIGR3TGFzdE9iak51bSAtIGR3U3RhcnRPYmpOdW0gKyAxKTsKKyAgICAgICAgICAgICAgICBtX09iamVjdFNpemUuQWRkKGR3U3RhcnRPYmpOdW0sIGR3TGFzdE9iak51bSAtIGR3U3RhcnRPYmpOdW0gKyAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGR3U3RhcnRPYmpOdW0gPSBkd0N1ck9iak51bTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYk5ld1N0YXJ0KSB7CisgICAgICAgICAgICBkd1N0YXJ0T2JqTnVtID0gZHdDdXJPYmpOdW07CisgICAgICAgIH0KKyAgICAgICAgYk5ld1N0YXJ0ID0gYkV4aXN0OworICAgICAgICBkd0xhc3RPYmpOdW0gPSBkd0N1ck9iak51bTsKKyAgICB9CisgICAgbV9PYmplY3RPZmZzZXQuQWRkKGR3U3RhcnRPYmpOdW0sIGR3TGFzdE9iak51bSAtIGR3U3RhcnRPYmpOdW0gKyAxKTsKKyAgICBtX09iamVjdFNpemUuQWRkKGR3U3RhcnRPYmpOdW0sIGR3TGFzdE9iak51bSAtIGR3U3RhcnRPYmpOdW0gKyAxKTsKK30KK3ZvaWQgQ1BERl9DcmVhdG9yOjpBcHBlbmROZXdPYmpOdW0oRlhfRFdPUkQgb2JqYnVtKQoreworICAgIEZYX0lOVDMyIGlTdGFydCA9IDAsIGlGaW5kID0gMDsKKyAgICBGWF9JTlQzMiBpRW5kID0gbV9OZXdPYmpOdW1BcnJheS5HZXRVcHBlckJvdW5kKCk7CisgICAgd2hpbGUgKGlTdGFydCA8PSBpRW5kKSB7CisgICAgICAgIEZYX0lOVDMyIGlNaWQgPSAoaVN0YXJ0ICsgaUVuZCkgLyAyOworICAgICAgICBGWF9EV09SRCBkd01pZCA9IG1fTmV3T2JqTnVtQXJyYXkuRWxlbWVudEF0KGlNaWQpOworICAgICAgICBpZiAob2JqYnVtIDwgZHdNaWQpIHsKKyAgICAgICAgICAgIGlFbmQgPSBpTWlkIC0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChpTWlkID09IGlFbmQpIHsKKyAgICAgICAgICAgICAgICBpRmluZCA9IGlNaWQgKyAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfRFdPUkQgZHdOZXh0ID0gbV9OZXdPYmpOdW1BcnJheS5FbGVtZW50QXQoaU1pZCArIDEpOworICAgICAgICAgICAgaWYgKG9iamJ1bSA8IGR3TmV4dCkgeworICAgICAgICAgICAgICAgIGlGaW5kID0gaU1pZCArIDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpU3RhcnQgPSBpTWlkICsgMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX05ld09iak51bUFycmF5Lkluc2VydEF0KGlGaW5kLCBvYmpidW0pOworfQorRlhfSU5UMzIgQ1BERl9DcmVhdG9yOjpXcml0ZURvY19TdGFnZTEoSUZYX1BhdXNlICpwUGF1c2UpCit7CisgICAgRlhTWVNfYXNzZXJ0KG1faVN0YWdlID4gLTEgfHwgbV9pU3RhZ2UgPCAyMCk7CisgICAgaWYgKG1faVN0YWdlID09IDApIHsKKyAgICAgICAgaWYgKG1fcFBhcnNlciA9PSBOVUxMKSB7CisgICAgICAgICAgICBtX2R3RmxhZ3MgJj0gfkZQREZDUkVBVEVfSU5DUkVNRU5UQUw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fYlNlY3VyaXR5Q2hhbmdlZCAmJiAobV9kd0ZsYWdzICYgRlBERkNSRUFURV9OT19PUklHSU5BTCkgPT0gMCkgeworICAgICAgICAgICAgbV9kd0ZsYWdzICY9IH5GUERGQ1JFQVRFX0lOQ1JFTUVOVEFMOworICAgICAgICB9CisgICAgICAgIG1fcE1ldGFkYXRhID0gbV9wRG9jdW1lbnQtPkdldFJvb3QoKS0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJNZXRhZGF0YSIpKTsKKyAgICAgICAgaWYgKG1fZHdGbGFncyAmIEZQREZDUkVBVEVfT0JKRUNUU1RSRUFNKSB7CisgICAgICAgICAgICBtX3BYUmVmU3RyZWFtID0gRlhfTkVXIENQREZfWFJlZlN0cmVhbTsKKyAgICAgICAgICAgIG1fcFhSZWZTdHJlYW0tPlN0YXJ0KCk7CisgICAgICAgICAgICBpZiAoKG1fZHdGbGFncyAmIEZQREZDUkVBVEVfSU5DUkVNRU5UQUwpICE9IDAgJiYgbV9wUGFyc2VyKSB7CisgICAgICAgICAgICAgICAgRlhfRklMRVNJWkUgcHJldiA9IG1fcFBhcnNlci0+R2V0TGFzdFhSZWZPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICBtX3BYUmVmU3RyZWFtLT5tX1ByZXZPZmZzZXQgPSBwcmV2OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1faVN0YWdlID0gMTA7CisgICAgfQorICAgIGlmIChtX2lTdGFnZSA9PSAxMCkgeworICAgICAgICBpZiAoKG1fZHdGbGFncyAmIEZQREZDUkVBVEVfSU5DUkVNRU5UQUwpID09IDApIHsKKyAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIlUERGLTEuIikpIDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fT2Zmc2V0ICs9IDc7CisgICAgICAgICAgICBGWF9JTlQzMiB2ZXJzaW9uID0gNzsKKyAgICAgICAgICAgIGlmIChtX0ZpbGVWZXJzaW9uKSB7CisgICAgICAgICAgICAgICAgdmVyc2lvbiA9IG1fRmlsZVZlcnNpb247CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fcFBhcnNlcikgeworICAgICAgICAgICAgICAgIHZlcnNpb24gPSBtX3BQYXJzZXItPkdldEZpbGVWZXJzaW9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9JTlQzMiBsZW4gPSBtX0ZpbGUuQXBwZW5kRFdvcmQodmVyc2lvbiAlIDEwKTsKKyAgICAgICAgICAgIGlmIChsZW4gPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9PZmZzZXQgKz0gbGVuOworICAgICAgICAgICAgaWYgKChsZW4gPSBtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCJcclxuJVx4QTFceEIzXHhDNVx4RDdcclxuIikpKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX09mZnNldCArPSBsZW47CisgICAgICAgICAgICBJbml0T2xkT2JqTnVtT2Zmc2V0cygpOworICAgICAgICAgICAgbV9pU3RhZ2UgPSAyMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIElGWF9GaWxlUmVhZCogcFNyY0ZpbGUgPSBtX3BQYXJzZXItPkdldEZpbGVBY2Nlc3MoKTsKKyAgICAgICAgICAgIG1fT2Zmc2V0ID0gcFNyY0ZpbGUtPkdldFNpemUoKTsKKyAgICAgICAgICAgIG1fUG9zID0gKEZYX0xQVk9JRCkoRlhfVUlOVFBUUiltX09mZnNldDsKKyAgICAgICAgICAgIG1faVN0YWdlID0gMTU7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1faVN0YWdlID09IDE1KSB7CisgICAgICAgIGlmICgobV9kd0ZsYWdzICYgRlBERkNSRUFURV9OT19PUklHSU5BTCkgPT0gMCAmJiBtX1BvcykgeworICAgICAgICAgICAgSUZYX0ZpbGVSZWFkKiBwU3JjRmlsZSA9IG1fcFBhcnNlci0+R2V0RmlsZUFjY2VzcygpOworICAgICAgICAgICAgRlhfQllURSBidWZmZXJbNDA5Nl07CisgICAgICAgICAgICBGWF9EV09SRCBzcmNfc2l6ZSA9IChGWF9EV09SRCkoRlhfVUlOVFBUUiltX1BvczsKKyAgICAgICAgICAgIHdoaWxlIChzcmNfc2l6ZSkgeworICAgICAgICAgICAgICAgIEZYX0RXT1JEIGJsb2NrX3NpemUgPSBzcmNfc2l6ZSA+IDQwOTYgPyA0MDk2IDogc3JjX3NpemU7CisgICAgICAgICAgICAgICAgaWYgKCFwU3JjRmlsZS0+UmVhZEJsb2NrKGJ1ZmZlciwgbV9PZmZzZXQgLSBzcmNfc2l6ZSwgYmxvY2tfc2l6ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZEJsb2NrKGJ1ZmZlciwgYmxvY2tfc2l6ZSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3JjX3NpemUgLT0gYmxvY2tfc2l6ZTsKKyAgICAgICAgICAgICAgICBpZiAocFBhdXNlICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgeworICAgICAgICAgICAgICAgICAgICBtX1BvcyA9IChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpc3JjX3NpemU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoKG1fZHdGbGFncyAmIEZQREZDUkVBVEVfTk9fT1JJR0lOQUwpID09IDAgJiYgbV9wUGFyc2VyLT5HZXRMYXN0WFJlZk9mZnNldCgpID09IDApIHsKKyAgICAgICAgICAgIEluaXRPbGRPYmpOdW1PZmZzZXRzKCk7CisgICAgICAgICAgICBGWF9EV09SRCBkd0VuZCA9IG1fcFBhcnNlci0+R2V0TGFzdE9iak51bSgpOworICAgICAgICAgICAgRlhfQk9PTCBiT2JqU3RtID0gKG1fZHdGbGFncyAmIEZQREZDUkVBVEVfT0JKRUNUU1RSRUFNKSAhPSAwOworICAgICAgICAgICAgZm9yIChGWF9EV09SRCBvYmpudW0gPSAwOyBvYmpudW0gPD0gZHdFbmQ7IG9iam51bSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fcFBhcnNlci0+bV9WNVR5cGVbb2JqbnVtXSA9PSAwIHx8IG1fcFBhcnNlci0+bV9WNVR5cGVbb2JqbnVtXSA9PSAyNTUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fT2JqZWN0T2Zmc2V0W29iam51bV0gPSBtX3BQYXJzZXItPm1fQ3Jvc3NSZWZbb2JqbnVtXTsKKyAgICAgICAgICAgICAgICBpZiAoYk9ialN0bSkgeworICAgICAgICAgICAgICAgICAgICBtX3BYUmVmU3RyZWFtLT5BZGRPYmplY3ROdW1iZXJUb0luZGV4QXJyYXkob2JqbnVtKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYk9ialN0bSkgeworICAgICAgICAgICAgICAgIG1fcFhSZWZTdHJlYW0tPkVuZFhSZWZTdHJlYW0odGhpcyk7CisgICAgICAgICAgICAgICAgbV9wWFJlZlN0cmVhbS0+U3RhcnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX2lTdGFnZSA9IDIwOworICAgIH0KKyAgICBJbml0TmV3T2JqTnVtT2Zmc2V0cygpOworICAgIHJldHVybiBtX2lTdGFnZTsKK30KK0ZYX0lOVDMyIENQREZfQ3JlYXRvcjo6V3JpdGVEb2NfU3RhZ2UyKElGWF9QYXVzZSAqcFBhdXNlKQoreworICAgIEZYU1lTX2Fzc2VydChtX2lTdGFnZSA+PSAyMCB8fCBtX2lTdGFnZSA8IDMwKTsKKyAgICBpZiAobV9pU3RhZ2UgPT0gMjApIHsKKyAgICAgICAgaWYgKChtX2R3RmxhZ3MgJiBGUERGQ1JFQVRFX0lOQ1JFTUVOVEFMKSA9PSAwICYmIG1fcFBhcnNlcikgeworICAgICAgICAgICAgbV9Qb3MgPSAoRlhfTFBWT0lEKShGWF9VSU5UUFRSKTA7CisgICAgICAgICAgICBtX2lTdGFnZSA9IDIxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9pU3RhZ2UgPSAyNTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9pU3RhZ2UgPT0gMjEpIHsKKyAgICAgICAgRlhfSU5UMzIgaVJldCA9IFdyaXRlT2xkT2JqcyhwUGF1c2UpOworICAgICAgICBpZiAoaVJldCkgeworICAgICAgICAgICAgcmV0dXJuIGlSZXQ7CisgICAgICAgIH0KKyAgICAgICAgbV9pU3RhZ2UgPSAyNTsKKyAgICB9CisgICAgaWYgKG1faVN0YWdlID09IDI1KSB7CisgICAgICAgIG1fUG9zID0gKEZYX0xQVk9JRCkoRlhfVUlOVFBUUikwOworICAgICAgICBtX2lTdGFnZSA9IDI2OworICAgIH0KKyAgICBpZiAobV9pU3RhZ2UgPT0gMjYpIHsKKyAgICAgICAgRlhfSU5UMzIgaVJldCA9IFdyaXRlTmV3T2JqcygobV9kd0ZsYWdzICYgRlBERkNSRUFURV9JTkNSRU1FTlRBTCkgIT0gMCwgcFBhdXNlKTsKKyAgICAgICAgaWYgKGlSZXQpIHsKKyAgICAgICAgICAgIHJldHVybiBpUmV0OworICAgICAgICB9CisgICAgICAgIG1faVN0YWdlID0gMjc7CisgICAgfQorICAgIGlmIChtX2lTdGFnZSA9PSAyNykgeworICAgICAgICBpZiAoTlVMTCAhPSBtX3BFbmNyeXB0RGljdCAmJiAwID09IG1fcEVuY3J5cHREaWN0LT5HZXRPYmpOdW0oKSkgeworICAgICAgICAgICAgbV9kd0xhc3RPYmpOdW0gKz0gMTsKKyAgICAgICAgICAgIEZYX0ZJTEVTSVpFIHNhdmVPZmZzZXQgPSBtX09mZnNldDsKKyAgICAgICAgICAgIGlmIChXcml0ZUluZGlyZWN0T2JqKG1fZHdMYXN0T2JqTnVtLCBtX3BFbmNyeXB0RGljdCkgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9PYmplY3RPZmZzZXQuQWRkKG1fZHdMYXN0T2JqTnVtLCAxKTsKKyAgICAgICAgICAgIG1fT2JqZWN0T2Zmc2V0W21fZHdMYXN0T2JqTnVtXSA9IHNhdmVPZmZzZXQ7CisgICAgICAgICAgICBtX09iamVjdFNpemUuQWRkKG1fZHdMYXN0T2JqTnVtLCAxKTsKKyAgICAgICAgICAgIG1fT2JqZWN0U2l6ZVttX2R3TGFzdE9iak51bV0gPSBtX09mZnNldCAtIHNhdmVPZmZzZXQ7CisgICAgICAgICAgICBtX2R3RW5yeXB0T2JqTnVtID0gbV9kd0xhc3RPYmpOdW07CisgICAgICAgICAgICBpZiAobV9kd0ZsYWdzICYgRlBERkNSRUFURV9JTkNSRU1FTlRBTCkgeworICAgICAgICAgICAgICAgIG1fTmV3T2JqTnVtQXJyYXkuQWRkKG1fZHdMYXN0T2JqTnVtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX2lTdGFnZSA9IDgwOworICAgIH0KKyAgICByZXR1cm4gbV9pU3RhZ2U7Cit9CitGWF9JTlQzMiBDUERGX0NyZWF0b3I6OldyaXRlRG9jX1N0YWdlMyhJRlhfUGF1c2UgKnBQYXVzZSkKK3sKKyAgICBGWFNZU19hc3NlcnQobV9pU3RhZ2UgPj0gODAgfHwgbV9pU3RhZ2UgPCA5MCk7CisgICAgRlhfRFdPUkQgZHdMYXN0T2JqTnVtID0gbV9kd0xhc3RPYmpOdW07CisgICAgaWYgKG1faVN0YWdlID09IDgwKSB7CisgICAgICAgIG1fWHJlZlN0YXJ0ID0gbV9PZmZzZXQ7CisgICAgICAgIGlmIChtX2R3RmxhZ3MgJiBGUERGQ1JFQVRFX09CSkVDVFNUUkVBTSkgeworICAgICAgICAgICAgbV9wWFJlZlN0cmVhbS0+RW5kKHRoaXMsIFRSVUUpOworICAgICAgICAgICAgbV9YcmVmU3RhcnQgPSBtX3BYUmVmU3RyZWFtLT5tX1ByZXZPZmZzZXQ7CisgICAgICAgICAgICBtX2lTdGFnZSA9IDkwOworICAgICAgICB9IGVsc2UgaWYgKChtX2R3RmxhZ3MgJiBGUERGQ1JFQVRFX0lOQ1JFTUVOVEFMKSA9PSAwIHx8ICFtX3BQYXJzZXItPklzWFJlZlN0cmVhbSgpKSB7CisgICAgICAgICAgICBpZiAoKG1fZHdGbGFncyAmIEZQREZDUkVBVEVfSU5DUkVNRU5UQUwpID09IDAgfHwgbV9wUGFyc2VyLT5HZXRMYXN0WFJlZk9mZnNldCgpID09IDApIHsKKyAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBzdHI7CisgICAgICAgICAgICAgICAgc3RyID0gbV9PYmplY3RPZmZzZXQuR2V0UHRyQXQoMSkgPyBGWF9CU1RSQygieHJlZlxyXG4iKSA6IEZYX0JTVFJDKCJ4cmVmXHJcbjAgMVxyXG4wMDAwMDAwMDAwIDY1NTM2IGZcclxuIik7CisgICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoc3RyKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX1BvcyA9IChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpMTsKKyAgICAgICAgICAgICAgICBtX2lTdGFnZSA9IDgxOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygieHJlZlxyXG4iKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9Qb3MgPSAoRlhfTFBWT0lEKShGWF9VSU5UUFRSKTA7CisgICAgICAgICAgICAgICAgbV9pU3RhZ2UgPSA4MjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1faVN0YWdlID0gOTA7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1faVN0YWdlID09IDgxKSB7CisgICAgICAgIENGWF9CeXRlU3RyaW5nIHN0cjsKKyAgICAgICAgRlhfRFdPUkQgaSA9IChGWF9EV09SRCkoRlhfVUlOVFBUUiltX1BvcywgajsKKyAgICAgICAgd2hpbGUgKGkgPD0gZHdMYXN0T2JqTnVtKSB7CisgICAgICAgICAgICB3aGlsZSAoaSA8PSBkd0xhc3RPYmpOdW0gJiYgIW1fT2JqZWN0T2Zmc2V0LkdldFB0ckF0KGkpKSB7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGkgPiBkd0xhc3RPYmpOdW0pIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGogPSBpOworICAgICAgICAgICAgd2hpbGUgKGogPD0gZHdMYXN0T2JqTnVtICYmIG1fT2JqZWN0T2Zmc2V0LkdldFB0ckF0KGopKSB7CisgICAgICAgICAgICAgICAgaisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGkgPT0gMSkgeworICAgICAgICAgICAgICAgIHN0ci5Gb3JtYXQoIjAgJWRcclxuMDAwMDAwMDAwMCA2NTUzNiBmXHJcbiIsIGopOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdHIuRm9ybWF0KCIlZCAlZFxyXG4iLCBpLCBqIC0gaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZEJsb2NrKChGWF9MUENTVFIpc3RyLCBzdHIuR2V0TGVuZ3RoKCkpIDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlIChpIDwgaikgeworICAgICAgICAgICAgICAgIHN0ci5Gb3JtYXQoIiUwMTBkIDAwMDAwIG5cclxuIiwgbV9PYmplY3RPZmZzZXRbaSArK10pOworICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kQmxvY2soKEZYX0xQQ1NUUilzdHIsIHN0ci5HZXRMZW5ndGgoKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaSA+IGR3TGFzdE9iak51bSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBQYXVzZSAmJiBwUGF1c2UtPk5lZWRUb1BhdXNlTm93KCkpIHsKKyAgICAgICAgICAgICAgICBtX1BvcyA9IChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpaTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX2lTdGFnZSA9IDkwOworICAgIH0KKyAgICBpZiAobV9pU3RhZ2UgPT0gODIpIHsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc3RyOworICAgICAgICBGWF9JTlQzMiBpQ291bnQgPSBtX05ld09iak51bUFycmF5LkdldFNpemUoKTsKKyAgICAgICAgRlhfSU5UMzIgaSA9IChGWF9JTlQzMikoRlhfVUlOVFBUUiltX1BvczsKKyAgICAgICAgd2hpbGUgKGkgPCBpQ291bnQpIHsKKyAgICAgICAgICAgIEZYX0lOVDMyIGogPSBpOworICAgICAgICAgICAgRlhfRFdPUkQgb2JqbnVtID0gbV9OZXdPYmpOdW1BcnJheS5FbGVtZW50QXQoaSk7CisgICAgICAgICAgICB3aGlsZSAoaiA8IGlDb3VudCkgeworICAgICAgICAgICAgICAgIGlmICgrK2ogPT0gaUNvdW50KSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBGWF9EV09SRCBkd0N1cnJlbnQgPSBtX05ld09iak51bUFycmF5LkVsZW1lbnRBdChqKTsKKyAgICAgICAgICAgICAgICBpZiAoZHdDdXJyZW50IC0gb2JqbnVtID4gMSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb2JqbnVtID0gZHdDdXJyZW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgb2JqbnVtID0gbV9OZXdPYmpOdW1BcnJheS5FbGVtZW50QXQoaSk7CisgICAgICAgICAgICBpZiAob2JqbnVtID09IDEpIHsKKyAgICAgICAgICAgICAgICBzdHIuRm9ybWF0KCIwICVkXHJcbjAwMDAwMDAwMDAgNjU1MzYgZlxyXG4iLCBqIC0gaSArIDEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdHIuRm9ybWF0KCIlZCAlZFxyXG4iLCBvYmpudW0sIGogLSBpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kQmxvY2soKEZYX0xQQ1NUUilzdHIsIHN0ci5HZXRMZW5ndGgoKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKGkgPCBqKSB7CisgICAgICAgICAgICAgICAgb2JqbnVtID0gbV9OZXdPYmpOdW1BcnJheS5FbGVtZW50QXQoaSsrKTsKKyAgICAgICAgICAgICAgICBzdHIuRm9ybWF0KCIlMDEwZCAwMDAwMCBuXHJcbiIsIG1fT2JqZWN0T2Zmc2V0W29iam51bV0pOworICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kQmxvY2soKEZYX0xQQ1NUUilzdHIsIHN0ci5HZXRMZW5ndGgoKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocFBhdXNlICYmIChpICUgMTAwKSA9PSAwICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgeworICAgICAgICAgICAgICAgIG1fUG9zID0gKEZYX0xQVk9JRCkoRlhfVUlOVFBUUilpOworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1faVN0YWdlID0gOTA7CisgICAgfQorICAgIHJldHVybiBtX2lTdGFnZTsKK30KK3N0YXRpYyBGWF9JTlQzMiBfT3V0UHV0SW5kZXgoQ0ZYX0ZpbGVCdWZmZXJBcmNoaXZlKiBwRmlsZSwgRlhfRklMRVNJWkUgb2Zmc2V0KQoreworICAgIEZYU1lTX2Fzc2VydChwRmlsZSk7CisgICAgaWYgKHNpemVvZihvZmZzZXQpID4gNCkgeworICAgICAgICBpZiAoRlhfR0VUQllURU9GRlNFVDMyKG9mZnNldCkpIHsKKyAgICAgICAgICAgIGlmIChwRmlsZS0+QXBwZW5kQnl0ZShGWF9HRVRCWVRFT0ZGU0VUNTYob2Zmc2V0KSkgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBGaWxlLT5BcHBlbmRCeXRlKEZYX0dFVEJZVEVPRkZTRVQ0OChvZmZzZXQpKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocEZpbGUtPkFwcGVuZEJ5dGUoRlhfR0VUQllURU9GRlNFVDQwKG9mZnNldCkpIDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwRmlsZS0+QXBwZW5kQnl0ZShGWF9HRVRCWVRFT0ZGU0VUMzIob2Zmc2V0KSkgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChwRmlsZS0+QXBwZW5kQnl0ZShGWF9HRVRCWVRFT0ZGU0VUMjQob2Zmc2V0KSkgPCAwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKHBGaWxlLT5BcHBlbmRCeXRlKEZYX0dFVEJZVEVPRkZTRVQxNihvZmZzZXQpKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAocEZpbGUtPkFwcGVuZEJ5dGUoRlhfR0VUQllURU9GRlNFVDgob2Zmc2V0KSkgPCAwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKHBGaWxlLT5BcHBlbmRCeXRlKEZYX0dFVEJZVEVPRkZTRVQwKG9mZnNldCkpIDwgMCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChwRmlsZS0+QXBwZW5kQnl0ZSgwKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KK0ZYX0lOVDMyIENQREZfQ3JlYXRvcjo6V3JpdGVEb2NfU3RhZ2U0KElGWF9QYXVzZSAqcFBhdXNlKQoreworICAgIEZYU1lTX2Fzc2VydChtX2lTdGFnZSA+PSA5MCk7CisgICAgaWYgKChtX2R3RmxhZ3MgJiBGUERGQ1JFQVRFX09CSkVDVFNUUkVBTSkgPT0gMCkgeworICAgICAgICBGWF9CT09MIGJYUmVmU3RyZWFtID0gKG1fZHdGbGFncyAmIEZQREZDUkVBVEVfSU5DUkVNRU5UQUwpICE9IDAgJiYgbV9wUGFyc2VyLT5Jc1hSZWZTdHJlYW0oKTsKKyAgICAgICAgaWYgKCFiWFJlZlN0cmVhbSkgeworICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoInRyYWlsZXJcclxuPDwiKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmREV29yZChtX3BEb2N1bWVudC0+bV9MYXN0T2JqTnVtICsgMSkgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAwIG9iaiA8PCIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fcFBhcnNlcikgeworICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwID0gbV9wUGFyc2VyLT5tX3BUcmFpbGVyOworICAgICAgICAgICAgRlhfUE9TSVRJT04gcG9zID0gcC0+R2V0U3RhcnRQb3MoKTsKKyAgICAgICAgICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBrZXk7CisgICAgICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBWYWx1ZSA9IHAtPkdldE5leHRFbGVtZW50KHBvcywga2V5KTsKKyAgICAgICAgICAgICAgICBpZiAoa2V5ID09IEZYX0JTVFJDKCJFbmNyeXB0IikgfHwga2V5ID09IEZYX0JTVFJDKCJTaXplIikgfHwga2V5ID09IEZYX0JTVFJDKCJGaWx0ZXIiKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09IEZYX0JTVFJDKCJJbmRleCIpIHx8IGtleSA9PSBGWF9CU1RSQygiTGVuZ3RoIikgfHwga2V5ID09IEZYX0JTVFJDKCJQcmV2IikgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9PSBGWF9CU1RSQygiVyIpIHx8IGtleSA9PSBGWF9CU1RSQygiWFJlZlN0bSIpIHx8IGtleSA9PSBGWF9CU1RSQygiSUQiKSkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoKEZYX0JTVFJDKCIvIikpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhQREZfTmFtZUVuY29kZShrZXkpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocFZhbHVlLT5HZXRPYmpOdW0oKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiICIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZERXb3JkKHBWYWx1ZS0+R2V0T2JqTnVtKCkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgMCBSICIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEZYX0ZJTEVTSVpFIG9mZnNldCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChQREZfQ3JlYXRvckFwcGVuZE9iamVjdChwVmFsdWUsICZtX0ZpbGUsIG9mZnNldCkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiXHJcbi9Sb290ICIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZERXb3JkKG1fcERvY3VtZW50LT5tX3BSb290RGljdC0+R2V0T2JqTnVtKCkpIDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgMCBSXHJcbiIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9wRG9jdW1lbnQtPm1fcEluZm9EaWN0KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIi9JbmZvICIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZERXb3JkKG1fcERvY3VtZW50LT5tX3BJbmZvRGljdC0+R2V0T2JqTnVtKCkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgMCBSXHJcbiIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobV9wRW5jcnlwdERpY3QpIHsKKyAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIvRW5jcnlwdCIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9EV09SRCBkd09iak51bSA9IG1fcEVuY3J5cHREaWN0LT5HZXRPYmpOdW0oKTsKKyAgICAgICAgICAgIGlmIChkd09iak51bSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZHdPYmpOdW0gPSBtX3BEb2N1bWVudC0+R2V0TGFzdE9iak51bSgpICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgIikpIDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kRFdvcmQoZHdPYmpOdW0pIDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIgMCBSICIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIi9TaXplICIpKSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9GaWxlLkFwcGVuZERXb3JkKG1fZHdMYXN0T2JqTnVtICsgKGJYUmVmU3RyZWFtID8gMiA6IDEpKSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKG1fZHdGbGFncyAmIEZQREZDUkVBVEVfSU5DUkVNRU5UQUwpICE9IDApIHsKKyAgICAgICAgICAgIEZYX0ZJTEVTSVpFIHByZXYgPSBtX3BQYXJzZXItPkdldExhc3RYUmVmT2Zmc2V0KCk7CisgICAgICAgICAgICBpZiAocHJldikgeworICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kU3RyaW5nKEZYX0JTVFJDKCIvUHJldiAiKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRlhfQ0hBUiBvZmZzZXRfYnVmWzIwXTsKKyAgICAgICAgICAgICAgICBGWFNZU19tZW1zZXQzMihvZmZzZXRfYnVmLCAwLCBzaXplb2Yob2Zmc2V0X2J1ZikpOworICAgICAgICAgICAgICAgIEZYU1lTX2k2NHRvYShwcmV2LCBvZmZzZXRfYnVmLCAxMCk7CisgICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRCbG9jayhvZmZzZXRfYnVmLCBGWFNZU19zdHJsZW4ob2Zmc2V0X2J1ZikpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChtX3BJREFycmF5KSB7CisgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZygoRlhfQlNUUkMoIi9JRCIpKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfRklMRVNJWkUgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIGlmIChQREZfQ3JlYXRvckFwcGVuZE9iamVjdChtX3BJREFycmF5LCAmbV9GaWxlLCBvZmZzZXQpIDwgMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWJYUmVmU3RyZWFtKSB7CisgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiPj4iKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIi9XWzAgNCAxXS9JbmRleFsiKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChtX2R3RmxhZ3MgJiBGUERGQ1JFQVRFX0lOQ1JFTUVOVEFMKSAhPSAwICYmIG1fcFBhcnNlciAmJiBtX3BQYXJzZXItPkdldExhc3RYUmVmT2Zmc2V0KCkgPT0gMCkgeworICAgICAgICAgICAgICAgIEZYX0RXT1JEIGkgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtX2R3TGFzdE9iak51bTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9PYmplY3RPZmZzZXQuR2V0UHRyQXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kRFdvcmQoaSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAxICIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiXS9MZW5ndGggIikpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kRFdvcmQobV9kd0xhc3RPYmpOdW0gKiA1KSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiPj5zdHJlYW1cclxuIikpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtX2R3TGFzdE9iak51bTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIEZYX0ZJTEVTSVpFKiBvZmZzZXQgPSBtX09iamVjdE9mZnNldC5HZXRQdHJBdChpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFvZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF9PdXRQdXRJbmRleCgmbV9GaWxlLCAqb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGludCBjb3VudCA9IG1fTmV3T2JqTnVtQXJyYXkuR2V0U2l6ZSgpOworICAgICAgICAgICAgICAgIEZYX0lOVDMyIGkgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIG9iam51bSA9IG1fTmV3T2JqTnVtQXJyYXkuRWxlbWVudEF0KGkpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZERXb3JkKG9iam51bSkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIiAxICIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiXS9MZW5ndGggIikpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtX0ZpbGUuQXBwZW5kRFdvcmQoY291bnQgKiA1KSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiPj5zdHJlYW1cclxuIikpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIG9iam51bSA9IG1fTmV3T2JqTnVtQXJyYXkuRWxlbWVudEF0KGkpOworICAgICAgICAgICAgICAgICAgICBGWF9GSUxFU0laRSBvZmZzZXQgPSBtX09iamVjdE9mZnNldFtvYmpudW1dOworICAgICAgICAgICAgICAgICAgICBfT3V0UHV0SW5kZXgoJm1fRmlsZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9GaWxlLkFwcGVuZFN0cmluZyhGWF9CU1RSQygiXHJcbmVuZHN0cmVhbSIpKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIlxyXG5zdGFydHhyZWZcclxuIikpIDwgMCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIEZYX0NIQVIgb2Zmc2V0X2J1ZlsyMF07CisgICAgRlhTWVNfbWVtc2V0MzIob2Zmc2V0X2J1ZiwgMCwgc2l6ZW9mKG9mZnNldF9idWYpKTsKKyAgICBGWFNZU19pNjR0b2EobV9YcmVmU3RhcnQsIG9mZnNldF9idWYsIDEwKTsKKyAgICBpZiAobV9GaWxlLkFwcGVuZEJsb2NrKG9mZnNldF9idWYsIEZYU1lTX3N0cmxlbihvZmZzZXRfYnVmKSkgPCAwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKG1fRmlsZS5BcHBlbmRTdHJpbmcoRlhfQlNUUkMoIlxyXG4lJUVPRlxyXG4iKSkgPCAwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgbV9GaWxlLkZsdXNoKCk7CisgICAgcmV0dXJuIG1faVN0YWdlID0gMTAwOworfQordm9pZCBDUERGX0NyZWF0b3I6OkNsZWFyKCkKK3sKKyAgICBpZiAobV9wWFJlZlN0cmVhbSkgeworICAgICAgICBkZWxldGUgbV9wWFJlZlN0cmVhbTsKKyAgICAgICAgbV9wWFJlZlN0cmVhbSA9IE5VTEw7CisgICAgfQorICAgIG1fRmlsZS5DbGVhcigpOworICAgIG1fTmV3T2JqTnVtQXJyYXkuUmVtb3ZlQWxsKCk7CisgICAgaWYgKG1fcElEQXJyYXkpIHsKKyAgICAgICAgbV9wSURBcnJheS0+UmVsZWFzZSgpOworICAgICAgICBtX3BJREFycmF5ID0gTlVMTDsKKyAgICB9Cit9CitGWF9CT09MIENQREZfQ3JlYXRvcjo6Q3JlYXRlKEZYX0xQQ1NUUiBmaWxlbmFtZSwgRlhfRFdPUkQgZmxhZ3MpCit7CisgICAgaWYgKCFtX0ZpbGUuQXR0YWNoRmlsZShmaWxlbmFtZSkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWF9CT09MIGJSZXQgPSBDcmVhdGUoZmxhZ3MpOworICAgIGlmICghYlJldCB8fCAhKGZsYWdzICYgRlBERkNSRUFURV9QUk9HUkVTU0lWRSkpIHsKKyAgICAgICAgQ2xlYXIoKTsKKyAgICB9CisgICAgcmV0dXJuIGJSZXQ7Cit9CitGWF9CT09MIENQREZfQ3JlYXRvcjo6Q3JlYXRlKEZYX0xQQ1dTVFIgZmlsZW5hbWUsIEZYX0RXT1JEIGZsYWdzKQoreworICAgIGlmICghbV9GaWxlLkF0dGFjaEZpbGUoZmlsZW5hbWUpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgRlhfQk9PTCBiUmV0ID0gQ3JlYXRlKGZsYWdzKTsKKyAgICBpZiAoIWJSZXQgfHwgIShmbGFncyAmIEZQREZDUkVBVEVfUFJPR1JFU1NJVkUpKSB7CisgICAgICAgIENsZWFyKCk7CisgICAgfQorICAgIHJldHVybiBiUmV0OworfQorRlhfQk9PTCBDUERGX0NyZWF0b3I6OkNyZWF0ZShJRlhfU3RyZWFtV3JpdGUqIHBGaWxlLCBGWF9EV09SRCBmbGFncykKK3sKKyAgICBpZiAoIXBGaWxlKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKCFtX0ZpbGUuQXR0YWNoRmlsZShwRmlsZSwgRkFMU0UpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIENyZWF0ZShmbGFncyk7Cit9CitGWF9CT09MIENQREZfQ3JlYXRvcjo6Q3JlYXRlKEZYX0RXT1JEIGZsYWdzKQoreworICAgIG1fZHdGbGFncyA9IGZsYWdzOworICAgIG1faVN0YWdlID0gMDsKKyAgICBtX09mZnNldCA9IDA7CisgICAgbV9kd0xhc3RPYmpOdW0gPSBtX3BEb2N1bWVudC0+R2V0TGFzdE9iak51bSgpOworICAgIG1fT2JqZWN0T2Zmc2V0LkNsZWFyKCk7CisgICAgbV9PYmplY3RTaXplLkNsZWFyKCk7CisgICAgbV9OZXdPYmpOdW1BcnJheS5SZW1vdmVBbGwoKTsKKyAgICBJbml0SUQoKTsKKyAgICBpZiAoZmxhZ3MgJiBGUERGQ1JFQVRFX1BST0dSRVNTSVZFKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gQ29udGludWUoTlVMTCkgPiAtMTsKK30KK3ZvaWQgQ1BERl9DcmVhdG9yOjpJbml0SUQoRlhfQk9PTCBiRGVmYXVsdCApCit7CisgICAgQ1BERl9BcnJheSogcE9sZElEQXJyYXkgPSBtX3BQYXJzZXIgPyBtX3BQYXJzZXItPkdldElEQXJyYXkoKSA6IE5VTEw7CisgICAgRlhfQk9PTCBiTmV3SWQgPSAhbV9wSURBcnJheTsKKyAgICBpZiAoIW1fcElEQXJyYXkpIHsKKyAgICAgICAgRlhfTFBEV09SRCBwQnVmZmVyID0gTlVMTDsKKyAgICAgICAgbV9wSURBcnJheSA9IENQREZfQXJyYXk6OkNyZWF0ZSgpOworICAgICAgICBDUERGX09iamVjdCogcElEMSA9IHBPbGRJREFycmF5LT5HZXRFbGVtZW50KDApOworICAgICAgICBpZiAocElEMSkgeworICAgICAgICAgICAgbV9wSURBcnJheS0+QWRkKHBJRDEtPkNsb25lKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcEJ1ZmZlciA9IEZYX0FsbG9jKEZYX0RXT1JELCA0KTsKKyAgICAgICAgICAgIFBERl9HZW5lcmF0ZUZpbGVJRCgoRlhfRFdPUkQpKEZYX1VJTlRQVFIpdGhpcywgbV9kd0xhc3RPYmpOdW0sIHBCdWZmZXIpOworICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmdDIGJzQnVmZmVyKChGWF9MUENCWVRFKXBCdWZmZXIsIDQgKiBzaXplb2YoRlhfRFdPUkQpKTsKKyAgICAgICAgICAgIG1fcElEQXJyYXktPkFkZChDUERGX1N0cmluZzo6Q3JlYXRlKGJzQnVmZmVyLCBUUlVFKSwgbV9wRG9jdW1lbnQpOworICAgICAgICB9CisgICAgICAgIGlmIChwQnVmZmVyKSB7CisgICAgICAgICAgICBGWF9GcmVlKHBCdWZmZXIpOworICAgICAgICB9CisgICAgfQorICAgIGlmICghYkRlZmF1bHQpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocE9sZElEQXJyYXkpIHsKKyAgICAgICAgQ1BERl9PYmplY3QqIHBJRDIgPSBwT2xkSURBcnJheS0+R2V0RWxlbWVudCgxKTsKKyAgICAgICAgaWYgKChtX2R3RmxhZ3MgJiBGUERGQ1JFQVRFX0lOQ1JFTUVOVEFMKSAmJiBtX3BFbmNyeXB0RGljdCAmJiBwSUQyKSB7CisgICAgICAgICAgICBtX3BJREFycmF5LT5BZGQocElEMi0+Q2xvbmUoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgRlhfTFBEV09SRCBwQnVmZmVyID0gRlhfQWxsb2MoRlhfRFdPUkQsIDQpOworICAgICAgICBQREZfR2VuZXJhdGVGaWxlSUQoKEZYX0RXT1JEKShGWF9VSU5UUFRSKXRoaXMsIG1fZHdMYXN0T2JqTnVtLCBwQnVmZmVyKTsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmdDIGJzQnVmZmVyKChGWF9MUENCWVRFKXBCdWZmZXIsIDQgKiBzaXplb2YoRlhfRFdPUkQpKTsKKyAgICAgICAgbV9wSURBcnJheS0+QWRkKENQREZfU3RyaW5nOjpDcmVhdGUoYnNCdWZmZXIsIFRSVUUpLCBtX3BEb2N1bWVudCk7CisgICAgICAgIEZYX0ZyZWUocEJ1ZmZlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wSURBcnJheS0+QWRkKG1fcElEQXJyYXktPkdldEVsZW1lbnQoMCktPkNsb25lKCkpOworICAgIGlmIChtX3BFbmNyeXB0RGljdCAmJiAhcE9sZElEQXJyYXkgJiYgbV9wUGFyc2VyICYmIGJOZXdJZCkgeworICAgICAgICBpZiAobV9wRW5jcnlwdERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiRmlsdGVyIikpID09IEZYX0JTVFJDKCJTdGFuZGFyZCIpKSB7CisgICAgICAgICAgICBDUERGX1N0YW5kYXJkU2VjdXJpdHlIYW5kbGVyIGhhbmRsZXI7CisgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyB1c2VyX3Bhc3MgPSBtX3BQYXJzZXItPkdldFBhc3N3b3JkKCk7CisgICAgICAgICAgICBGWF9EV09SRCBmbGFnID0gUERGX0VOQ1JZUFRfQ09OVEVOVDsKKyAgICAgICAgICAgIGhhbmRsZXIuT25DcmVhdGUobV9wRW5jcnlwdERpY3QsIG1fcElEQXJyYXksIChGWF9MUENCWVRFKXVzZXJfcGFzcywgdXNlcl9wYXNzLkdldExlbmd0aCgpLCBmbGFnKTsKKyAgICAgICAgICAgIGlmIChtX3BDcnlwdG9IYW5kbGVyICYmIG1fYk5ld0NyeXB0bykgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3BDcnlwdG9IYW5kbGVyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9wQ3J5cHRvSGFuZGxlciA9IEZYX05FVyBDUERGX1N0YW5kYXJkQ3J5cHRvSGFuZGxlcjsKKyAgICAgICAgICAgIG1fcENyeXB0b0hhbmRsZXItPkluaXQobV9wRW5jcnlwdERpY3QsICZoYW5kbGVyKTsKKyAgICAgICAgICAgIG1fYk5ld0NyeXB0byA9IFRSVUU7CisgICAgICAgICAgICBtX2JTZWN1cml0eUNoYW5nZWQgPSBUUlVFOworICAgICAgICB9CisgICAgfQorfQorRlhfSU5UMzIgQ1BERl9DcmVhdG9yOjpDb250aW51ZShJRlhfUGF1c2UgKnBQYXVzZSkKK3sKKyAgICBpZiAobV9pU3RhZ2UgPCAwKSB7CisgICAgICAgIHJldHVybiBtX2lTdGFnZTsKKyAgICB9CisgICAgRlhfSU5UMzIgaVJldDsKKyAgICB3aGlsZSAobV9pU3RhZ2UgPCAxMDApIHsKKyAgICAgICAgaWYgKG1faVN0YWdlIDwgMjApIHsKKyAgICAgICAgICAgIGlSZXQgPSBXcml0ZURvY19TdGFnZTEocFBhdXNlKTsKKyAgICAgICAgfSBlbHNlIGlmIChtX2lTdGFnZSA8IDMwKSB7CisgICAgICAgICAgICBpUmV0ID0gV3JpdGVEb2NfU3RhZ2UyKHBQYXVzZSk7CisgICAgICAgIH0gZWxzZSBpZiAobV9pU3RhZ2UgPCA5MCkgeworICAgICAgICAgICAgaVJldCA9IFdyaXRlRG9jX1N0YWdlMyhwUGF1c2UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaVJldCA9IFdyaXRlRG9jX1N0YWdlNChwUGF1c2UpOworICAgICAgICB9CisgICAgICAgIGlmIChpUmV0IDwgbV9pU3RhZ2UpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmIChpUmV0IDwgMSB8fCBtX2lTdGFnZSA9PSAxMDApIHsKKyAgICAgICAgbV9pU3RhZ2UgPSAtMTsKKyAgICAgICAgQ2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIGlSZXQgPiA5OSA/IDAgOiAoaVJldCA8IDEgPyAtMSA6IGlSZXQpOworICAgIH0KKyAgICByZXR1cm4gbV9pU3RhZ2U7Cit9CitGWF9CT09MIENQREZfQ3JlYXRvcjo6U2V0RmlsZVZlcnNpb24oRlhfSU5UMzIgZmlsZVZlcnNpb24gKQoreworICAgIGlmIChmaWxlVmVyc2lvbiA8IDEwIHx8IGZpbGVWZXJzaW9uID4gMTcpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBtX0ZpbGVWZXJzaW9uID0gZmlsZVZlcnNpb247CisgICAgcmV0dXJuIFRSVUU7Cit9Cit2b2lkIENQREZfQ3JlYXRvcjo6UmVzZXRTdGFuZGFyZFNlY3VyaXR5KCkKK3sKKyAgICBpZiAoKG1fYlN0YW5kYXJkU2VjdXJpdHkgfHwgbV9iTmV3Q3J5cHRvKSAmJiBtX3BDcnlwdG9IYW5kbGVyKSB7CisgICAgICAgIGRlbGV0ZSBtX3BDcnlwdG9IYW5kbGVyOworICAgICAgICBtX3BDcnlwdG9IYW5kbGVyID0gTlVMTDsKKyAgICB9CisgICAgbV9iTmV3Q3J5cHRvID0gRkFMU0U7CisgICAgaWYgKCFtX2JTdGFuZGFyZFNlY3VyaXR5KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fcEVuY3J5cHREaWN0KSB7CisgICAgICAgIG1fcEVuY3J5cHREaWN0LT5SZWxlYXNlKCk7CisgICAgICAgIG1fcEVuY3J5cHREaWN0ID0gTlVMTDsKKyAgICB9CisgICAgbV9iU3RhbmRhcmRTZWN1cml0eSA9IEZBTFNFOworfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2VkaXQvZnBkZl9lZGl0X2RvYy5jcHAgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfZWRpdC9mcGRmX2VkaXRfZG9jLmNwcAppbmRleCBlMTFkOTMzLi4yNjcyMTE2IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfZWRpdC9mcGRmX2VkaXRfZG9jLmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfZWRpdC9mcGRmX2VkaXRfZG9jLmNwcApAQCAtMSwxMjA1ICsxLDEyMDUgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX21vZHVsZS5oIg0KLSNpbmNsdWRlICIuLi9mcGRmX3BhZ2UvcGFnZWludC5oIg0KLSNpbmNsdWRlIDxsaW1pdHMuaD4NCi1DUERGX0RvY3VtZW50OjpDUERGX0RvY3VtZW50KCkgOiBDUERGX0luZGlyZWN0T2JqZWN0cyhOVUxMKQ0KLXsNCi0gICAgbV9wUm9vdERpY3QgPSBOVUxMOw0KLSAgICBtX3BJbmZvRGljdCA9IE5VTEw7DQotICAgIG1fYkxpbmVhcml6ZWQgPSBGQUxTRTsNCi0gICAgbV9kd0ZpcnN0UGFnZU5vID0gMDsNCi0gICAgbV9kd0ZpcnN0UGFnZU9iak51bSA9IDA7DQotICAgIG1fcERvY1BhZ2UgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldFBhZ2VNb2R1bGUoKS0+Q3JlYXRlRG9jRGF0YSh0aGlzKTsNCi0gICAgbV9wRG9jUmVuZGVyID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRSZW5kZXJNb2R1bGUoKS0+Q3JlYXRlRG9jRGF0YSh0aGlzKTsNCi19DQotdm9pZCBDUERGX0RvY3VtZW50OjpDcmVhdGVOZXdEb2MoKQ0KLXsNCi0gICAgQVNTRVJUKG1fcFJvb3REaWN0ID09IE5VTEwgJiYgbV9wSW5mb0RpY3QgPT0gTlVMTCk7DQotICAgIG1fcFJvb3REaWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsNCi0gICAgbV9wUm9vdERpY3QtPlNldEF0TmFtZSgiVHlwZSIsICJDYXRhbG9nIik7DQotICAgIGludCBvYmpudW0gPSBBZGRJbmRpcmVjdE9iamVjdChtX3BSb290RGljdCk7DQotICAgIENQREZfRGljdGlvbmFyeSogcFBhZ2VzID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsNCi0gICAgcFBhZ2VzLT5TZXRBdE5hbWUoIlR5cGUiLCAiUGFnZXMiKTsNCi0gICAgcFBhZ2VzLT5TZXRBdE51bWJlcigiQ291bnQiLCAwKTsNCi0gICAgcFBhZ2VzLT5TZXRBdCgiS2lkcyIsIEZYX05FVyBDUERGX0FycmF5KTsNCi0gICAgb2JqbnVtID0gQWRkSW5kaXJlY3RPYmplY3QocFBhZ2VzKTsNCi0gICAgbV9wUm9vdERpY3QtPlNldEF0UmVmZXJlbmNlKCJQYWdlcyIsIHRoaXMsIG9iam51bSk7DQotICAgIG1fcEluZm9EaWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsNCi0gICAgQWRkSW5kaXJlY3RPYmplY3QobV9wSW5mb0RpY3QpOw0KLX0NCi1zdGF0aWMgY29uc3QgRlhfV0NIQVIgZ19GWF9DUDg3NFVuaWNvZGVzWzEyOF0gPSB7DQotICAgIDB4MjBBQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwMjYsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDIwMTgsIDB4MjAxOSwgMHgyMDFDLCAweDIwMUQsIDB4MjAyMiwgMHgyMDEzLCAweDIwMTQsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwQTAsIDB4MEUwMSwgMHgwRTAyLCAweDBFMDMsIDB4MEUwNCwgMHgwRTA1LCAweDBFMDYsIDB4MEUwNywNCi0gICAgMHgwRTA4LCAweDBFMDksIDB4MEUwQSwgMHgwRTBCLCAweDBFMEMsIDB4MEUwRCwgMHgwRTBFLCAweDBFMEYsDQotICAgIDB4MEUxMCwgMHgwRTExLCAweDBFMTIsIDB4MEUxMywgMHgwRTE0LCAweDBFMTUsIDB4MEUxNiwgMHgwRTE3LA0KLSAgICAweDBFMTgsIDB4MEUxOSwgMHgwRTFBLCAweDBFMUIsIDB4MEUxQywgMHgwRTFELCAweDBFMUUsIDB4MEUxRiwNCi0gICAgMHgwRTIwLCAweDBFMjEsIDB4MEUyMiwgMHgwRTIzLCAweDBFMjQsIDB4MEUyNSwgMHgwRTI2LCAweDBFMjcsDQotICAgIDB4MEUyOCwgMHgwRTI5LCAweDBFMkEsIDB4MEUyQiwgMHgwRTJDLCAweDBFMkQsIDB4MEUyRSwgMHgwRTJGLA0KLSAgICAweDBFMzAsIDB4MEUzMSwgMHgwRTMyLCAweDBFMzMsIDB4MEUzNCwgMHgwRTM1LCAweDBFMzYsIDB4MEUzNywNCi0gICAgMHgwRTM4LCAweDBFMzksIDB4MEUzQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDBFM0YsDQotICAgIDB4MEU0MCwgMHgwRTQxLCAweDBFNDIsIDB4MEU0MywgMHgwRTQ0LCAweDBFNDUsIDB4MEU0NiwgMHgwRTQ3LA0KLSAgICAweDBFNDgsIDB4MEU0OSwgMHgwRTRBLCAweDBFNEIsIDB4MEU0QywgMHgwRTRELCAweDBFNEUsIDB4MEU0RiwNCi0gICAgMHgwRTUwLCAweDBFNTEsIDB4MEU1MiwgMHgwRTUzLCAweDBFNTQsIDB4MEU1NSwgMHgwRTU2LCAweDBFNTcsDQotICAgIDB4MEU1OCwgMHgwRTU5LCAweDBFNUEsIDB4MEU1QiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLX07DQotc3RhdGljIGNvbnN0IEZYX1dDSEFSIGdfRlhfQ1AxMjUwVW5pY29kZXNbMTI4XSA9IHsNCi0gICAgMHgyMEFDLCAweDAwMDAsIDB4MjAxQSwgMHgwMDAwLCAweDIwMUUsIDB4MjAyNiwgMHgyMDIwLCAweDIwMjEsDQotICAgIDB4MDAwMCwgMHgyMDMwLCAweDAxNjAsIDB4MjAzOSwgMHgwMTVBLCAweDAxNjQsIDB4MDE3RCwgMHgwMTc5LA0KLSAgICAweDAwMDAsIDB4MjAxOCwgMHgyMDE5LCAweDIwMUMsIDB4MjAxRCwgMHgyMDIyLCAweDIwMTMsIDB4MjAxNCwNCi0gICAgMHgwMDAwLCAweDIxMjIsIDB4MDE2MSwgMHgyMDNBLCAweDAxNUIsIDB4MDE2NSwgMHgwMTdFLCAweDAxN0EsDQotICAgIDB4MDBBMCwgMHgwMkM3LCAweDAyRDgsIDB4MDE0MSwgMHgwMEE0LCAweDAxMDQsIDB4MDBBNiwgMHgwMEE3LA0KLSAgICAweDAwQTgsIDB4MDBBOSwgMHgwMTVFLCAweDAwQUIsIDB4MDBBQywgMHgwMEFELCAweDAwQUUsIDB4MDE3QiwNCi0gICAgMHgwMEIwLCAweDAwQjEsIDB4MDJEQiwgMHgwMTQyLCAweDAwQjQsIDB4MDBCNSwgMHgwMEI2LCAweDAwQjcsDQotICAgIDB4MDBCOCwgMHgwMTA1LCAweDAxNUYsIDB4MDBCQiwgMHgwMTNELCAweDAyREQsIDB4MDEzRSwgMHgwMTdDLA0KLSAgICAweDAxNTQsIDB4MDBDMSwgMHgwMEMyLCAweDAxMDIsIDB4MDBDNCwgMHgwMTM5LCAweDAxMDYsIDB4MDBDNywNCi0gICAgMHgwMTBDLCAweDAwQzksIDB4MDExOCwgMHgwMENCLCAweDAxMUEsIDB4MDBDRCwgMHgwMENFLCAweDAxMEUsDQotICAgIDB4MDExMCwgMHgwMTQzLCAweDAxNDcsIDB4MDBEMywgMHgwMEQ0LCAweDAxNTAsIDB4MDBENiwgMHgwMEQ3LA0KLSAgICAweDAxNTgsIDB4MDE2RSwgMHgwMERBLCAweDAxNzAsIDB4MDBEQywgMHgwMERELCAweDAxNjIsIDB4MDBERiwNCi0gICAgMHgwMTU1LCAweDAwRTEsIDB4MDBFMiwgMHgwMTAzLCAweDAwRTQsIDB4MDEzQSwgMHgwMTA3LCAweDAwRTcsDQotICAgIDB4MDEwRCwgMHgwMEU5LCAweDAxMTksIDB4MDBFQiwgMHgwMTFCLCAweDAwRUQsIDB4MDBFRSwgMHgwMTBGLA0KLSAgICAweDAxMTEsIDB4MDE0NCwgMHgwMTQ4LCAweDAwRjMsIDB4MDBGNCwgMHgwMTUxLCAweDAwRjYsIDB4MDBGNywNCi0gICAgMHgwMTU5LCAweDAxNkYsIDB4MDBGQSwgMHgwMTcxLCAweDAwRkMsIDB4MDBGRCwgMHgwMTYzLCAweDAyRDksDQotfTsNCi1zdGF0aWMgY29uc3QgRlhfV0NIQVIgZ19GWF9DUDEyNTFVbmljb2Rlc1sxMjhdID0gew0KLSAgICAweDA0MDIsIDB4MDQwMywgMHgyMDFBLCAweDA0NTMsIDB4MjAxRSwgMHgyMDI2LCAweDIwMjAsIDB4MjAyMSwNCi0gICAgMHgyMEFDLCAweDIwMzAsIDB4MDQwOSwgMHgyMDM5LCAweDA0MEEsIDB4MDQwQywgMHgwNDBCLCAweDA0MEYsDQotICAgIDB4MDQ1MiwgMHgyMDE4LCAweDIwMTksIDB4MjAxQywgMHgyMDFELCAweDIwMjIsIDB4MjAxMywgMHgyMDE0LA0KLSAgICAweDAwMDAsIDB4MjEyMiwgMHgwNDU5LCAweDIwM0EsIDB4MDQ1QSwgMHgwNDVDLCAweDA0NUIsIDB4MDQ1RiwNCi0gICAgMHgwMEEwLCAweDA0MEUsIDB4MDQ1RSwgMHgwNDA4LCAweDAwQTQsIDB4MDQ5MCwgMHgwMEE2LCAweDAwQTcsDQotICAgIDB4MDQwMSwgMHgwMEE5LCAweDA0MDQsIDB4MDBBQiwgMHgwMEFDLCAweDAwQUQsIDB4MDBBRSwgMHgwNDA3LA0KLSAgICAweDAwQjAsIDB4MDBCMSwgMHgwNDA2LCAweDA0NTYsIDB4MDQ5MSwgMHgwMEI1LCAweDAwQjYsIDB4MDBCNywNCi0gICAgMHgwNDUxLCAweDIxMTYsIDB4MDQ1NCwgMHgwMEJCLCAweDA0NTgsIDB4MDQwNSwgMHgwNDU1LCAweDA0NTcsDQotICAgIDB4MDQxMCwgMHgwNDExLCAweDA0MTIsIDB4MDQxMywgMHgwNDE0LCAweDA0MTUsIDB4MDQxNiwgMHgwNDE3LA0KLSAgICAweDA0MTgsIDB4MDQxOSwgMHgwNDFBLCAweDA0MUIsIDB4MDQxQywgMHgwNDFELCAweDA0MUUsIDB4MDQxRiwNCi0gICAgMHgwNDIwLCAweDA0MjEsIDB4MDQyMiwgMHgwNDIzLCAweDA0MjQsIDB4MDQyNSwgMHgwNDI2LCAweDA0MjcsDQotICAgIDB4MDQyOCwgMHgwNDI5LCAweDA0MkEsIDB4MDQyQiwgMHgwNDJDLCAweDA0MkQsIDB4MDQyRSwgMHgwNDJGLA0KLSAgICAweDA0MzAsIDB4MDQzMSwgMHgwNDMyLCAweDA0MzMsIDB4MDQzNCwgMHgwNDM1LCAweDA0MzYsIDB4MDQzNywNCi0gICAgMHgwNDM4LCAweDA0MzksIDB4MDQzQSwgMHgwNDNCLCAweDA0M0MsIDB4MDQzRCwgMHgwNDNFLCAweDA0M0YsDQotICAgIDB4MDQ0MCwgMHgwNDQxLCAweDA0NDIsIDB4MDQ0MywgMHgwNDQ0LCAweDA0NDUsIDB4MDQ0NiwgMHgwNDQ3LA0KLSAgICAweDA0NDgsIDB4MDQ0OSwgMHgwNDRBLCAweDA0NEIsIDB4MDQ0QywgMHgwNDRELCAweDA0NEUsIDB4MDQ0RiwNCi19Ow0KLXN0YXRpYyBjb25zdCBGWF9XQ0hBUiBnX0ZYX0NQMTI1M1VuaWNvZGVzWzEyOF0gPSB7DQotICAgIDB4MjBBQywgMHgwMDAwLCAweDIwMUEsIDB4MDE5MiwgMHgyMDFFLCAweDIwMjYsIDB4MjAyMCwgMHgyMDIxLA0KLSAgICAweDAwMDAsIDB4MjAzMCwgMHgwMDAwLCAweDIwMzksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDIwMTgsIDB4MjAxOSwgMHgyMDFDLCAweDIwMUQsIDB4MjAyMiwgMHgyMDEzLCAweDIwMTQsDQotICAgIDB4MDAwMCwgMHgyMTIyLCAweDAwMDAsIDB4MjAzQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwQTAsIDB4MDM4NSwgMHgwMzg2LCAweDAwQTMsIDB4MDBBNCwgMHgwMEE1LCAweDAwQTYsIDB4MDBBNywNCi0gICAgMHgwMEE4LCAweDAwQTksIDB4MDAwMCwgMHgwMEFCLCAweDAwQUMsIDB4MDBBRCwgMHgwMEFFLCAweDIwMTUsDQotICAgIDB4MDBCMCwgMHgwMEIxLCAweDAwQjIsIDB4MDBCMywgMHgwMzg0LCAweDAwQjUsIDB4MDBCNiwgMHgwMEI3LA0KLSAgICAweDAzODgsIDB4MDM4OSwgMHgwMzhBLCAweDAwQkIsIDB4MDM4QywgMHgwMEJELCAweDAzOEUsIDB4MDM4RiwNCi0gICAgMHgwMzkwLCAweDAzOTEsIDB4MDM5MiwgMHgwMzkzLCAweDAzOTQsIDB4MDM5NSwgMHgwMzk2LCAweDAzOTcsDQotICAgIDB4MDM5OCwgMHgwMzk5LCAweDAzOUEsIDB4MDM5QiwgMHgwMzlDLCAweDAzOUQsIDB4MDM5RSwgMHgwMzlGLA0KLSAgICAweDAzQTAsIDB4MDNBMSwgMHgwMDAwLCAweDAzQTMsIDB4MDNBNCwgMHgwM0E1LCAweDAzQTYsIDB4MDNBNywNCi0gICAgMHgwM0E4LCAweDAzQTksIDB4MDNBQSwgMHgwM0FCLCAweDAzQUMsIDB4MDNBRCwgMHgwM0FFLCAweDAzQUYsDQotICAgIDB4MDNCMCwgMHgwM0IxLCAweDAzQjIsIDB4MDNCMywgMHgwM0I0LCAweDAzQjUsIDB4MDNCNiwgMHgwM0I3LA0KLSAgICAweDAzQjgsIDB4MDNCOSwgMHgwM0JBLCAweDAzQkIsIDB4MDNCQywgMHgwM0JELCAweDAzQkUsIDB4MDNCRiwNCi0gICAgMHgwM0MwLCAweDAzQzEsIDB4MDNDMiwgMHgwM0MzLCAweDAzQzQsIDB4MDNDNSwgMHgwM0M2LCAweDAzQzcsDQotICAgIDB4MDNDOCwgMHgwM0M5LCAweDAzQ0EsIDB4MDNDQiwgMHgwM0NDLCAweDAzQ0QsIDB4MDNDRSwgMHgwMDAwLA0KLX07DQotc3RhdGljIGNvbnN0IEZYX1dDSEFSIGdfRlhfQ1AxMjU0VW5pY29kZXNbMTI4XSA9IHsNCi0gICAgMHgyMEFDLCAweDAwMDAsIDB4MjAxQSwgMHgwMTkyLCAweDIwMUUsIDB4MjAyNiwgMHgyMDIwLCAweDIwMjEsDQotICAgIDB4MDJDNiwgMHgyMDMwLCAweDAxNjAsIDB4MjAzOSwgMHgwMTUyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MjAxOCwgMHgyMDE5LCAweDIwMUMsIDB4MjAxRCwgMHgyMDIyLCAweDIwMTMsIDB4MjAxNCwNCi0gICAgMHgwMkRDLCAweDIxMjIsIDB4MDE2MSwgMHgyMDNBLCAweDAxNTMsIDB4MDAwMCwgMHgwMDAwLCAweDAxNzgsDQotICAgIDB4MDBBMCwgMHgwMEExLCAweDAwQTIsIDB4MDBBMywgMHgwMEE0LCAweDAwQTUsIDB4MDBBNiwgMHgwMEE3LA0KLSAgICAweDAwQTgsIDB4MDBBOSwgMHgwMEFBLCAweDAwQUIsIDB4MDBBQywgMHgwMEFELCAweDAwQUUsIDB4MDBBRiwNCi0gICAgMHgwMEIwLCAweDAwQjEsIDB4MDBCMiwgMHgwMEIzLCAweDAwQjQsIDB4MDBCNSwgMHgwMEI2LCAweDAwQjcsDQotICAgIDB4MDBCOCwgMHgwMEI5LCAweDAwQkEsIDB4MDBCQiwgMHgwMEJDLCAweDAwQkQsIDB4MDBCRSwgMHgwMEJGLA0KLSAgICAweDAwQzAsIDB4MDBDMSwgMHgwMEMyLCAweDAwQzMsIDB4MDBDNCwgMHgwMEM1LCAweDAwQzYsIDB4MDBDNywNCi0gICAgMHgwMEM4LCAweDAwQzksIDB4MDBDQSwgMHgwMENCLCAweDAwQ0MsIDB4MDBDRCwgMHgwMENFLCAweDAwQ0YsDQotICAgIDB4MDExRSwgMHgwMEQxLCAweDAwRDIsIDB4MDBEMywgMHgwMEQ0LCAweDAwRDUsIDB4MDBENiwgMHgwMEQ3LA0KLSAgICAweDAwRDgsIDB4MDBEOSwgMHgwMERBLCAweDAwREIsIDB4MDBEQywgMHgwMTMwLCAweDAxNUUsIDB4MDBERiwNCi0gICAgMHgwMEUwLCAweDAwRTEsIDB4MDBFMiwgMHgwMEUzLCAweDAwRTQsIDB4MDBFNSwgMHgwMEU2LCAweDAwRTcsDQotICAgIDB4MDBFOCwgMHgwMEU5LCAweDAwRUEsIDB4MDBFQiwgMHgwMEVDLCAweDAwRUQsIDB4MDBFRSwgMHgwMEVGLA0KLSAgICAweDAxMUYsIDB4MDBGMSwgMHgwMEYyLCAweDAwRjMsIDB4MDBGNCwgMHgwMEY1LCAweDAwRjYsIDB4MDBGNywNCi0gICAgMHgwMEY4LCAweDAwRjksIDB4MDBGQSwgMHgwMEZCLCAweDAwRkMsIDB4MDEzMSwgMHgwMTVGLCAweDAwRkYsDQotfTsNCi1zdGF0aWMgY29uc3QgRlhfV0NIQVIgZ19GWF9DUDEyNTVVbmljb2Rlc1sxMjhdID0gew0KLSAgICAweDIwQUMsIDB4MDAwMCwgMHgyMDFBLCAweDAxOTIsIDB4MjAxRSwgMHgyMDI2LCAweDIwMjAsIDB4MjAyMSwNCi0gICAgMHgwMkM2LCAweDIwMzAsIDB4MDAwMCwgMHgyMDM5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgyMDE4LCAweDIwMTksIDB4MjAxQywgMHgyMDFELCAweDIwMjIsIDB4MjAxMywgMHgyMDE0LA0KLSAgICAweDAyREMsIDB4MjEyMiwgMHgwMDAwLCAweDIwM0EsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMEEwLCAweDAwQTEsIDB4MDBBMiwgMHgwMEEzLCAweDIwQUEsIDB4MDBBNSwgMHgwMEE2LCAweDAwQTcsDQotICAgIDB4MDBBOCwgMHgwMEE5LCAweDAwRDcsIDB4MDBBQiwgMHgwMEFDLCAweDAwQUQsIDB4MDBBRSwgMHgwMEFGLA0KLSAgICAweDAwQjAsIDB4MDBCMSwgMHgwMEIyLCAweDAwQjMsIDB4MDBCNCwgMHgwMEI1LCAweDAwQjYsIDB4MDBCNywNCi0gICAgMHgwMEI4LCAweDAwQjksIDB4MDBGNywgMHgwMEJCLCAweDAwQkMsIDB4MDBCRCwgMHgwMEJFLCAweDAwQkYsDQotICAgIDB4MDVCMCwgMHgwNUIxLCAweDA1QjIsIDB4MDVCMywgMHgwNUI0LCAweDA1QjUsIDB4MDVCNiwgMHgwNUI3LA0KLSAgICAweDA1QjgsIDB4MDVCOSwgMHgwMDAwLCAweDA1QkIsIDB4MDVCQywgMHgwNUJELCAweDA1QkUsIDB4MDVCRiwNCi0gICAgMHgwNUMwLCAweDA1QzEsIDB4MDVDMiwgMHgwNUMzLCAweDA1RjAsIDB4MDVGMSwgMHgwNUYyLCAweDA1RjMsDQotICAgIDB4MDVGNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDA1RDAsIDB4MDVEMSwgMHgwNUQyLCAweDA1RDMsIDB4MDVENCwgMHgwNUQ1LCAweDA1RDYsIDB4MDVENywNCi0gICAgMHgwNUQ4LCAweDA1RDksIDB4MDVEQSwgMHgwNURCLCAweDA1REMsIDB4MDVERCwgMHgwNURFLCAweDA1REYsDQotICAgIDB4MDVFMCwgMHgwNUUxLCAweDA1RTIsIDB4MDVFMywgMHgwNUU0LCAweDA1RTUsIDB4MDVFNiwgMHgwNUU3LA0KLSAgICAweDA1RTgsIDB4MDVFOSwgMHgwNUVBLCAweDAwMDAsIDB4MDAwMCwgMHgyMDBFLCAweDIwMEYsIDB4MDAwMCwNCi19Ow0KLXN0YXRpYyBjb25zdCBGWF9XQ0hBUiBnX0ZYX0NQMTI1NlVuaWNvZGVzWzEyOF0gPSB7DQotICAgIDB4MjBBQywgMHgwNjdFLCAweDIwMUEsIDB4MDE5MiwgMHgyMDFFLCAweDIwMjYsIDB4MjAyMCwgMHgyMDIxLA0KLSAgICAweDAyQzYsIDB4MjAzMCwgMHgwNjc5LCAweDIwMzksIDB4MDE1MiwgMHgwNjg2LCAweDA2OTgsIDB4MDY4OCwNCi0gICAgMHgwNkFGLCAweDIwMTgsIDB4MjAxOSwgMHgyMDFDLCAweDIwMUQsIDB4MjAyMiwgMHgyMDEzLCAweDIwMTQsDQotICAgIDB4MDZBOSwgMHgyMTIyLCAweDA2OTEsIDB4MjAzQSwgMHgwMTUzLCAweDIwMEMsIDB4MjAwRCwgMHgwNkJBLA0KLSAgICAweDAwQTAsIDB4MDYwQywgMHgwMEEyLCAweDAwQTMsIDB4MDBBNCwgMHgwMEE1LCAweDAwQTYsIDB4MDBBNywNCi0gICAgMHgwMEE4LCAweDAwQTksIDB4MDZCRSwgMHgwMEFCLCAweDAwQUMsIDB4MDBBRCwgMHgwMEFFLCAweDAwQUYsDQotICAgIDB4MDBCMCwgMHgwMEIxLCAweDAwQjIsIDB4MDBCMywgMHgwMEI0LCAweDAwQjUsIDB4MDBCNiwgMHgwMEI3LA0KLSAgICAweDAwQjgsIDB4MDBCOSwgMHgwNjFCLCAweDAwQkIsIDB4MDBCQywgMHgwMEJELCAweDAwQkUsIDB4MDYxRiwNCi0gICAgMHgwNkMxLCAweDA2MjEsIDB4MDYyMiwgMHgwNjIzLCAweDA2MjQsIDB4MDYyNSwgMHgwNjI2LCAweDA2MjcsDQotICAgIDB4MDYyOCwgMHgwNjI5LCAweDA2MkEsIDB4MDYyQiwgMHgwNjJDLCAweDA2MkQsIDB4MDYyRSwgMHgwNjJGLA0KLSAgICAweDA2MzAsIDB4MDYzMSwgMHgwNjMyLCAweDA2MzMsIDB4MDYzNCwgMHgwNjM1LCAweDA2MzYsIDB4MDBENywNCi0gICAgMHgwNjM3LCAweDA2MzgsIDB4MDYzOSwgMHgwNjNBLCAweDA2NDAsIDB4MDY0MSwgMHgwNjQyLCAweDA2NDMsDQotICAgIDB4MDBFMCwgMHgwNjQ0LCAweDAwRTIsIDB4MDY0NSwgMHgwNjQ2LCAweDA2NDcsIDB4MDY0OCwgMHgwMEU3LA0KLSAgICAweDAwRTgsIDB4MDBFOSwgMHgwMEVBLCAweDAwRUIsIDB4MDY0OSwgMHgwNjRBLCAweDAwRUUsIDB4MDBFRiwNCi0gICAgMHgwNjRCLCAweDA2NEMsIDB4MDY0RCwgMHgwNjRFLCAweDAwRjQsIDB4MDY0RiwgMHgwNjUwLCAweDAwRjcsDQotICAgIDB4MDY1MSwgMHgwMEY5LCAweDA2NTIsIDB4MDBGQiwgMHgwMEZDLCAweDIwMEUsIDB4MjAwRiwgMHgwNkQyLA0KLX07DQotc3RhdGljIGNvbnN0IEZYX1dDSEFSIGdfRlhfQ1AxMjU3VW5pY29kZXNbMTI4XSA9IHsNCi0gICAgMHgyMEFDLCAweDAwMDAsIDB4MjAxQSwgMHgwMDAwLCAweDIwMUUsIDB4MjAyNiwgMHgyMDIwLCAweDIwMjEsDQotICAgIDB4MDAwMCwgMHgyMDMwLCAweDAwMDAsIDB4MjAzOSwgMHgwMDAwLCAweDAwQTgsIDB4MDJDNywgMHgwMEI4LA0KLSAgICAweDAwMDAsIDB4MjAxOCwgMHgyMDE5LCAweDIwMUMsIDB4MjAxRCwgMHgyMDIyLCAweDIwMTMsIDB4MjAxNCwNCi0gICAgMHgwMDAwLCAweDIxMjIsIDB4MDAwMCwgMHgyMDNBLCAweDAwMDAsIDB4MDBBRiwgMHgwMkRCLCAweDAwMDAsDQotICAgIDB4MDBBMCwgMHgwMDAwLCAweDAwQTIsIDB4MDBBMywgMHgwMEE0LCAweDAwMDAsIDB4MDBBNiwgMHgwMEE3LA0KLSAgICAweDAwRDgsIDB4MDBBOSwgMHgwMTU2LCAweDAwQUIsIDB4MDBBQywgMHgwMEFELCAweDAwQUUsIDB4MDBDNiwNCi0gICAgMHgwMEIwLCAweDAwQjEsIDB4MDBCMiwgMHgwMEIzLCAweDAwQjQsIDB4MDBCNSwgMHgwMEI2LCAweDAwQjcsDQotICAgIDB4MDBGOCwgMHgwMEI5LCAweDAxNTcsIDB4MDBCQiwgMHgwMEJDLCAweDAwQkQsIDB4MDBCRSwgMHgwMEU2LA0KLSAgICAweDAxMDQsIDB4MDEyRSwgMHgwMTAwLCAweDAxMDYsIDB4MDBDNCwgMHgwMEM1LCAweDAxMTgsIDB4MDExMiwNCi0gICAgMHgwMTBDLCAweDAwQzksIDB4MDE3OSwgMHgwMTE2LCAweDAxMjIsIDB4MDEzNiwgMHgwMTJBLCAweDAxM0IsDQotICAgIDB4MDE2MCwgMHgwMTQzLCAweDAxNDUsIDB4MDBEMywgMHgwMTRDLCAweDAwRDUsIDB4MDBENiwgMHgwMEQ3LA0KLSAgICAweDAxNzIsIDB4MDE0MSwgMHgwMTVBLCAweDAxNkEsIDB4MDBEQywgMHgwMTdCLCAweDAxN0QsIDB4MDBERiwNCi0gICAgMHgwMTA1LCAweDAxMkYsIDB4MDEwMSwgMHgwMTA3LCAweDAwRTQsIDB4MDBFNSwgMHgwMTE5LCAweDAxMTMsDQotICAgIDB4MDEwRCwgMHgwMEU5LCAweDAxN0EsIDB4MDExNywgMHgwMTIzLCAweDAxMzcsIDB4MDEyQiwgMHgwMTNDLA0KLSAgICAweDAxNjEsIDB4MDE0NCwgMHgwMTQ2LCAweDAwRjMsIDB4MDE0RCwgMHgwMEY1LCAweDAwRjYsIDB4MDBGNywNCi0gICAgMHgwMTczLCAweDAxNDIsIDB4MDE1QiwgMHgwMTZCLCAweDAwRkMsIDB4MDE3QywgMHgwMTdFLCAweDAyRDksDQotfTsNCi10eXBlZGVmIHN0cnVjdCB7DQotICAgIEZYX0JZVEUJCW1fQ2hhcnNldDsNCi0gICAgY29uc3QgRlhfV0NIQVIqCW1fcFVuaWNvZGVzOw0KLX0gRlhfQ2hhcnNldFVuaWNvZGVzOw0KLWNvbnN0IEZYX0NoYXJzZXRVbmljb2RlcyBnX0ZYX0NoYXJzZXRVbmljb2Rlc1tdID0gew0KLSAgICB7IEZYRk9OVF9USEFJX0NIQVJTRVQsIGdfRlhfQ1A4NzRVbmljb2RlcyB9LA0KLSAgICB7IEZYRk9OVF9FQVNURVVST1BFX0NIQVJTRVQsIGdfRlhfQ1AxMjUwVW5pY29kZXMgfSwNCi0gICAgeyBGWEZPTlRfUlVTU0lBTl9DSEFSU0VULCBnX0ZYX0NQMTI1MVVuaWNvZGVzIH0sDQotICAgIHsgRlhGT05UX0dSRUVLX0NIQVJTRVQsIGdfRlhfQ1AxMjUzVW5pY29kZXMgfSwNCi0gICAgeyBGWEZPTlRfVFVSS0lTSF9DSEFSU0VULCBnX0ZYX0NQMTI1NFVuaWNvZGVzIH0sDQotICAgIHsgRlhGT05UX0hFQlJFV19DSEFSU0VULCBnX0ZYX0NQMTI1NVVuaWNvZGVzIH0sDQotICAgIHsgRlhGT05UX0FSQUJJQ19DSEFSU0VULCBnX0ZYX0NQMTI1NlVuaWNvZGVzIH0sDQotICAgIHsgRlhGT05UX0JBTFRJQ19DSEFSU0VULCBnX0ZYX0NQMTI1N1VuaWNvZGVzIH0sDQotfTsNCi0jaWYgKF9GWF9PU18gPT0gX0ZYX1dJTjMyX0RFU0tUT1BfIHx8IF9GWF9PU18gPT0gX0ZYX1dJTjMyX01PQklMRV8gfHwgX0ZYX09TXyA9PSBfRlhfV0lONjRfKQ0KLXN0YXRpYyB2b2lkIF9JbnNlcnRXaWR0aEFycmF5KEhEQyBoREMsIGludCBzdGFydCwgaW50IGVuZCwgQ1BERl9BcnJheSogcFdpZHRoQXJyYXkpDQotew0KLSAgICBpbnQgc2l6ZSA9IGVuZCAtIHN0YXJ0ICsgMTsNCi0gICAgaW50KiB3aWR0aHMgPSBGWF9BbGxvYyhpbnQsIHNpemUpOw0KLSAgICBHZXRDaGFyV2lkdGgoaERDLCBzdGFydCwgZW5kLCB3aWR0aHMpOw0KLSAgICBpbnQgaTsNCi0gICAgZm9yIChpID0gMTsgaSA8IHNpemU7IGkgKyspDQotICAgICAgICBpZiAod2lkdGhzW2ldICE9ICp3aWR0aHMpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgaWYgKGkgPT0gc2l6ZSkgew0KLSAgICAgICAgaW50IGZpcnN0ID0gcFdpZHRoQXJyYXktPkdldEludGVnZXIocFdpZHRoQXJyYXktPkdldENvdW50KCkgLSAxKTsNCi0gICAgICAgIHBXaWR0aEFycmF5LT5BZGRJbnRlZ2VyKGZpcnN0ICsgc2l6ZSAtIDEpOw0KLSAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoKndpZHRocyk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBDUERGX0FycmF5KiBwV2lkdGhBcnJheTEgPSBGWF9ORVcgQ1BERl9BcnJheTsNCi0gICAgICAgIHBXaWR0aEFycmF5LT5BZGQocFdpZHRoQXJyYXkxKTsNCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpICsrKSB7DQotICAgICAgICAgICAgcFdpZHRoQXJyYXkxLT5BZGRJbnRlZ2VyKHdpZHRoc1tpXSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhfRnJlZSh3aWR0aHMpOw0KLX0NCi1DUERGX0ZvbnQqIENQREZfRG9jdW1lbnQ6OkFkZFdpbmRvd3NGb250KExPR0ZPTlRXKiBwTG9nRm9udCwgRlhfQk9PTCBiVmVydCwgRlhfQk9PTCBiVHJhbnNsYXRlTmFtZSkNCi17DQotICAgIExPR0ZPTlRBIGxmYTsNCi0gICAgRlhTWVNfbWVtY3B5MzIoJmxmYSwgcExvZ0ZvbnQsIChjaGFyKilsZmEubGZGYWNlTmFtZSAtIChjaGFyKikmbGZhKTsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgZmFjZSA9IENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShwTG9nRm9udC0+bGZGYWNlTmFtZSk7DQotICAgIGlmIChmYWNlLkdldExlbmd0aCgpID49IExGX0ZBQ0VTSVpFKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBGWFNZU19zdHJjcHkobGZhLmxmRmFjZU5hbWUsIChGWF9MUENTVFIpZmFjZSk7DQotICAgIHJldHVybiBBZGRXaW5kb3dzRm9udCgmbGZhLCBiVmVydCwgYlRyYW5zbGF0ZU5hbWUpOw0KLX0NCi1leHRlcm4gQ0ZYX0J5dGVTdHJpbmcgX0ZQREZfR2V0TmFtZUZyb21UVChGWF9MUENCWVRFIG5hbWVfdGFibGUsIEZYX0RXT1JEIG5hbWUpOw0KLUNGWF9CeXRlU3RyaW5nIF9GUERGX0dldFBTTmFtZUZyb21UVChIREMgaERDKQ0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgcmVzdWx0Ow0KLSAgICBEV09SRCBzaXplID0gOjpHZXRGb250RGF0YShoREMsICdlbWFuJywgMCwgTlVMTCwgMCk7DQotICAgIGlmIChzaXplICE9IEdESV9FUlJPUikgew0KLSAgICAgICAgTFBCWVRFIGJ1ZmZlciA9IEZYX0FsbG9jKEJZVEUsIHNpemUpOw0KLSAgICAgICAgOjpHZXRGb250RGF0YShoREMsICdlbWFuJywgMCwgYnVmZmVyLCBzaXplKTsNCi0gICAgICAgIHJlc3VsdCA9IF9GUERGX0dldE5hbWVGcm9tVFQoYnVmZmVyLCA2KTsNCi0gICAgICAgIEZYX0ZyZWUoYnVmZmVyKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gcmVzdWx0Ow0KLX0NCi1DUERGX0ZvbnQqIENQREZfRG9jdW1lbnQ6OkFkZFdpbmRvd3NGb250KExPR0ZPTlRBKiBwTG9nRm9udCwgRlhfQk9PTCBiVmVydCwgRlhfQk9PTCBiVHJhbnNsYXRlTmFtZSkNCi17DQotICAgIHBMb2dGb250LT5sZkhlaWdodCA9IC0xMDAwOw0KLSAgICBwTG9nRm9udC0+bGZXaWR0aCA9IDA7DQotICAgIEhHRElPQkogaEZvbnQgPSBDcmVhdGVGb250SW5kaXJlY3RBKHBMb2dGb250KTsNCi0gICAgSERDIGhEQyA9IENyZWF0ZUNvbXBhdGlibGVEQyhOVUxMKTsNCi0gICAgaEZvbnQgPSBTZWxlY3RPYmplY3QoaERDLCBoRm9udCk7DQotICAgIGludCB0bV9zaXplID0gR2V0T3V0bGluZVRleHRNZXRyaWNzKGhEQywgMCwgTlVMTCk7DQotICAgIGlmICh0bV9zaXplID09IDApIHsNCi0gICAgICAgIGhGb250ID0gU2VsZWN0T2JqZWN0KGhEQywgaEZvbnQpOw0KLSAgICAgICAgRGVsZXRlT2JqZWN0KGhGb250KTsNCi0gICAgICAgIERlbGV0ZURDKGhEQyk7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBMUEJZVEUgdG1fYnVmID0gRlhfQWxsb2MoQllURSwgdG1fc2l6ZSk7DQotICAgIE9VVExJTkVURVhUTUVUUklDKiBwdG0gPSAoT1VUTElORVRFWFRNRVRSSUMqKXRtX2J1ZjsNCi0gICAgR2V0T3V0bGluZVRleHRNZXRyaWNzKGhEQywgdG1fc2l6ZSwgcHRtKTsNCi0gICAgaW50IGZsYWdzID0gMCwgaXRhbGljYW5nbGUsIGFzY2VuZCwgZGVzY2VuZCwgY2FwaGVpZ2h0LCBiYm94WzRdOw0KLSAgICBpZiAocExvZ0ZvbnQtPmxmSXRhbGljKSB7DQotICAgICAgICBmbGFncyB8PSBQREZGT05UX0lUQUxJQzsNCi0gICAgfQ0KLSAgICBpZiAoKHBMb2dGb250LT5sZlBpdGNoQW5kRmFtaWx5ICYgMykgPT0gRklYRURfUElUQ0gpIHsNCi0gICAgICAgIGZsYWdzIHw9IFBERkZPTlRfRklYRURQSVRDSDsNCi0gICAgfQ0KLSAgICBpZiAoKHBMb2dGb250LT5sZlBpdGNoQW5kRmFtaWx5ICYgMHhmOCkgPT0gRkZfUk9NQU4pIHsNCi0gICAgICAgIGZsYWdzIHw9IFBERkZPTlRfU0VSSUY7DQotICAgIH0NCi0gICAgaWYgKChwTG9nRm9udC0+bGZQaXRjaEFuZEZhbWlseSAmIDB4ZjgpID09IEZGX1NDUklQVCkgew0KLSAgICAgICAgZmxhZ3MgfD0gUERGRk9OVF9TQ1JJUFQ7DQotICAgIH0NCi0gICAgRlhfQk9PTCBiQ0pLID0gcExvZ0ZvbnQtPmxmQ2hhclNldCA9PSBDSElORVNFQklHNV9DSEFSU0VUIHx8IHBMb2dGb250LT5sZkNoYXJTZXQgPT0gR0IyMzEyX0NIQVJTRVQgfHwNCi0gICAgICAgICAgICAgICAgICAgcExvZ0ZvbnQtPmxmQ2hhclNldCA9PSBIQU5HRVVMX0NIQVJTRVQgfHwgcExvZ0ZvbnQtPmxmQ2hhclNldCA9PSBTSElGVEpJU19DSEFSU0VUOw0KLSAgICBDRlhfQnl0ZVN0cmluZyBiYXNlZm9udDsNCi0gICAgaWYgKGJUcmFuc2xhdGVOYW1lICYmIGJDSkspIHsNCi0gICAgICAgIGJhc2Vmb250ID0gX0ZQREZfR2V0UFNOYW1lRnJvbVRUKGhEQyk7DQotICAgIH0NCi0gICAgaWYgKGJhc2Vmb250LklzRW1wdHkoKSkgew0KLSAgICAgICAgYmFzZWZvbnQgPSBwTG9nRm9udC0+bGZGYWNlTmFtZTsNCi0gICAgfQ0KLSAgICBpdGFsaWNhbmdsZSA9IHB0bS0+b3RtSXRhbGljQW5nbGUgLyAxMDsNCi0gICAgYXNjZW5kID0gcHRtLT5vdG1yY0ZvbnRCb3gudG9wOw0KLSAgICBkZXNjZW5kID0gcHRtLT5vdG1yY0ZvbnRCb3guYm90dG9tOw0KLSAgICBjYXBoZWlnaHQgPSBwdG0tPm90bXNDYXBFbUhlaWdodDsNCi0gICAgYmJveFswXSA9IHB0bS0+b3RtcmNGb250Qm94LmxlZnQ7DQotICAgIGJib3hbMV0gPSBwdG0tPm90bXJjRm9udEJveC5ib3R0b207DQotICAgIGJib3hbMl0gPSBwdG0tPm90bXJjRm9udEJveC5yaWdodDsNCi0gICAgYmJveFszXSA9IHB0bS0+b3RtcmNGb250Qm94LnRvcDsNCi0gICAgRlhfRnJlZSh0bV9idWYpOw0KLSAgICBiYXNlZm9udC5SZXBsYWNlKCIgIiwgIiIpOw0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBCYXNlRGljdCA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7DQotICAgIHBCYXNlRGljdC0+U2V0QXROYW1lKCJUeXBlIiwgIkZvbnQiKTsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9udERpY3QgPSBwQmFzZURpY3Q7DQotICAgIGlmICghYkNKSykgew0KLSAgICAgICAgaWYgKHBMb2dGb250LT5sZkNoYXJTZXQgPT0gQU5TSV9DSEFSU0VUIHx8IHBMb2dGb250LT5sZkNoYXJTZXQgPT0gREVGQVVMVF9DSEFSU0VUIHx8DQotICAgICAgICAgICAgICAgIHBMb2dGb250LT5sZkNoYXJTZXQgPT0gU1lNQk9MX0NIQVJTRVQpIHsNCi0gICAgICAgICAgICBpZiAocExvZ0ZvbnQtPmxmQ2hhclNldCA9PSBTWU1CT0xfQ0hBUlNFVCkgew0KLSAgICAgICAgICAgICAgICBmbGFncyB8PSBQREZGT05UX1NZTUJPTElDOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGZsYWdzIHw9IFBERkZPTlRfTk9OU1lNQk9MSUM7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHBCYXNlRGljdC0+U2V0QXROYW1lKEZYX0JTVFJDKCJFbmNvZGluZyIpLCAiV2luQW5zaUVuY29kaW5nIik7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGZsYWdzIHw9IFBERkZPTlRfTk9OU1lNQk9MSUM7DQotICAgICAgICAgICAgaW50IGk7DQotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZiBnX0ZYX0NoYXJzZXRVbmljb2RlcyAvIHNpemVvZihGWF9DaGFyc2V0VW5pY29kZXMpOyBpICsrKQ0KLSAgICAgICAgICAgICAgICBpZiAoZ19GWF9DaGFyc2V0VW5pY29kZXNbaV0ubV9DaGFyc2V0ID09IHBMb2dGb250LT5sZkNoYXJTZXQpIHsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGkgPCBzaXplb2YgZ19GWF9DaGFyc2V0VW5pY29kZXMgLyBzaXplb2YoRlhfQ2hhcnNldFVuaWNvZGVzKSkgew0KLSAgICAgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBFbmNvZGluZyA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7DQotICAgICAgICAgICAgICAgIHBFbmNvZGluZy0+U2V0QXROYW1lKEZYX0JTVFJDKCJCYXNlRW5jb2RpbmciKSwgIldpbkFuc2lFbmNvZGluZyIpOw0KLSAgICAgICAgICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBGWF9ORVcgQ1BERl9BcnJheTsNCi0gICAgICAgICAgICAgICAgcEFycmF5LT5BZGRJbnRlZ2VyKDEyOCk7DQotICAgICAgICAgICAgICAgIGNvbnN0IEZYX1dDSEFSKiBwVW5pY29kZXMgPSBnX0ZYX0NoYXJzZXRVbmljb2Rlc1tpXS5tX3BVbmljb2RlczsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAxMjg7IGogKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIG5hbWUgPSBQREZfQWRvYmVOYW1lRnJvbVVuaWNvZGUocFVuaWNvZGVzW2pdKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lLklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBBcnJheS0+QWRkTmFtZShGWF9CU1RSQygiLm5vdGRlZiIpKTsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcEFycmF5LT5BZGROYW1lKG5hbWUpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHBFbmNvZGluZy0+U2V0QXQoRlhfQlNUUkMoIkRpZmZlcmVuY2VzIiksIHBBcnJheSk7DQotICAgICAgICAgICAgICAgIEFkZEluZGlyZWN0T2JqZWN0KHBFbmNvZGluZyk7DQotICAgICAgICAgICAgICAgIHBCYXNlRGljdC0+U2V0QXRSZWZlcmVuY2UoRlhfQlNUUkMoIkVuY29kaW5nIiksIHRoaXMsIHBFbmNvZGluZyk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBMb2dGb250LT5sZldlaWdodCA+IEZXX01FRElVTSAmJiBwTG9nRm9udC0+bGZJdGFsaWMpIHsNCi0gICAgICAgICAgICBiYXNlZm9udCArPSAiLEJvbGRJdGFsaWMiOw0KLSAgICAgICAgfSBlbHNlIGlmIChwTG9nRm9udC0+bGZXZWlnaHQgPiBGV19NRURJVU0pIHsNCi0gICAgICAgICAgICBiYXNlZm9udCArPSAiLEJvbGQiOw0KLSAgICAgICAgfSBlbHNlIGlmIChwTG9nRm9udC0+bGZJdGFsaWMpIHsNCi0gICAgICAgICAgICBiYXNlZm9udCArPSAiLEl0YWxpYyI7DQotICAgICAgICB9DQotICAgICAgICBwQmFzZURpY3QtPlNldEF0TmFtZSgiU3VidHlwZSIsICJUcnVlVHlwZSIpOw0KLSAgICAgICAgcEJhc2VEaWN0LT5TZXRBdE5hbWUoIkJhc2VGb250IiwgYmFzZWZvbnQpOw0KLSAgICAgICAgcEJhc2VEaWN0LT5TZXRBdE51bWJlcigiRmlyc3RDaGFyIiwgMzIpOw0KLSAgICAgICAgcEJhc2VEaWN0LT5TZXRBdE51bWJlcigiTGFzdENoYXIiLCAyNTUpOw0KLSAgICAgICAgaW50IGNoYXJfd2lkdGhzWzIyNF07DQotICAgICAgICBHZXRDaGFyV2lkdGgoaERDLCAzMiwgMjU1LCBjaGFyX3dpZHRocyk7DQotICAgICAgICBDUERGX0FycmF5KiBwV2lkdGhzID0gRlhfTkVXIENQREZfQXJyYXk7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDIyNDsgaSArKykgew0KLSAgICAgICAgICAgIHBXaWR0aHMtPkFkZEludGVnZXIoY2hhcl93aWR0aHNbaV0pOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcEJhc2VEaWN0LT5TZXRBdCgiV2lkdGhzIiwgcFdpZHRocyk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBmbGFncyB8PSBQREZGT05UX05PTlNZTUJPTElDOw0KLSAgICAgICAgcEZvbnREaWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIGNtYXA7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyBvcmRlcmluZzsNCi0gICAgICAgIGludCBzdXBwbGVtZW50Ow0KLSAgICAgICAgQ1BERl9BcnJheSogcFdpZHRoQXJyYXkgPSBGWF9ORVcgQ1BERl9BcnJheTsNCi0gICAgICAgIHN3aXRjaCAocExvZ0ZvbnQtPmxmQ2hhclNldCkgew0KLSAgICAgICAgICAgIGNhc2UgQ0hJTkVTRUJJRzVfQ0hBUlNFVDoNCi0gICAgICAgICAgICAgICAgY21hcCA9IGJWZXJ0ID8gIkVUZW5tcy1CNS1WIiA6ICJFVGVubXMtQjUtSCI7DQotICAgICAgICAgICAgICAgIG9yZGVyaW5nID0gIkNOUzEiOw0KLSAgICAgICAgICAgICAgICBzdXBwbGVtZW50ID0gNDsNCi0gICAgICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoMSk7DQotICAgICAgICAgICAgICAgIF9JbnNlcnRXaWR0aEFycmF5KGhEQywgMHgyMCwgMHg3ZSwgcFdpZHRoQXJyYXkpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIEdCMjMxMl9DSEFSU0VUOg0KLSAgICAgICAgICAgICAgICBjbWFwID0gYlZlcnQgPyAiR0JLLUVVQy1WIiA6ICJHQkstRVVDLUgiOw0KLSAgICAgICAgICAgICAgICBvcmRlcmluZyA9ICJHQjEiLCBzdXBwbGVtZW50ID0gMjsNCi0gICAgICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoNzcxNik7DQotICAgICAgICAgICAgICAgIF9JbnNlcnRXaWR0aEFycmF5KGhEQywgMHgyMCwgMHgyMCwgcFdpZHRoQXJyYXkpOw0KLSAgICAgICAgICAgICAgICBwV2lkdGhBcnJheS0+QWRkSW50ZWdlcig4MTQpOw0KLSAgICAgICAgICAgICAgICBfSW5zZXJ0V2lkdGhBcnJheShoREMsIDB4MjEsIDB4N2UsIHBXaWR0aEFycmF5KTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSBIQU5HRVVMX0NIQVJTRVQ6DQotICAgICAgICAgICAgICAgIGNtYXAgPSBiVmVydCA/ICJLU0Ntcy1VSEMtViIgOiAiS1NDbXMtVUhDLUgiOw0KLSAgICAgICAgICAgICAgICBvcmRlcmluZyA9ICJLb3JlYTEiOw0KLSAgICAgICAgICAgICAgICBzdXBwbGVtZW50ID0gMjsNCi0gICAgICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoMSk7DQotICAgICAgICAgICAgICAgIF9JbnNlcnRXaWR0aEFycmF5KGhEQywgMHgyMCwgMHg3ZSwgcFdpZHRoQXJyYXkpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIFNISUZUSklTX0NIQVJTRVQ6DQotICAgICAgICAgICAgICAgIGNtYXAgPSBiVmVydCA/ICI5MG1zLVJLU0otViIgOiAiOTBtcy1SS1NKLUgiOw0KLSAgICAgICAgICAgICAgICBvcmRlcmluZyA9ICJKYXBhbjEiOw0KLSAgICAgICAgICAgICAgICBzdXBwbGVtZW50ID0gNTsNCi0gICAgICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoMjMxKTsNCi0gICAgICAgICAgICAgICAgX0luc2VydFdpZHRoQXJyYXkoaERDLCAweDIwLCAweDdkLCBwV2lkdGhBcnJheSk7DQotICAgICAgICAgICAgICAgIHBXaWR0aEFycmF5LT5BZGRJbnRlZ2VyKDMyNik7DQotICAgICAgICAgICAgICAgIF9JbnNlcnRXaWR0aEFycmF5KGhEQywgMHhhMCwgMHhhMCwgcFdpZHRoQXJyYXkpOw0KLSAgICAgICAgICAgICAgICBwV2lkdGhBcnJheS0+QWRkSW50ZWdlcigzMjcpOw0KLSAgICAgICAgICAgICAgICBfSW5zZXJ0V2lkdGhBcnJheShoREMsIDB4YTEsIDB4ZGYsIHBXaWR0aEFycmF5KTsNCi0gICAgICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoNjMxKTsNCi0gICAgICAgICAgICAgICAgX0luc2VydFdpZHRoQXJyYXkoaERDLCAweDdlLCAweDdlLCBwV2lkdGhBcnJheSk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcEJhc2VEaWN0LT5TZXRBdE5hbWUoIlN1YnR5cGUiLCAiVHlwZTAiKTsNCi0gICAgICAgIHBCYXNlRGljdC0+U2V0QXROYW1lKCJCYXNlRm9udCIsIGJhc2Vmb250KTsNCi0gICAgICAgIHBCYXNlRGljdC0+U2V0QXROYW1lKCJFbmNvZGluZyIsIGNtYXApOw0KLSAgICAgICAgcEZvbnREaWN0LT5TZXRBdCgiVyIsIHBXaWR0aEFycmF5KTsNCi0gICAgICAgIHBGb250RGljdC0+U2V0QXROYW1lKCJUeXBlIiwgIkZvbnQiKTsNCi0gICAgICAgIHBGb250RGljdC0+U2V0QXROYW1lKCJTdWJ0eXBlIiwgIkNJREZvbnRUeXBlMiIpOw0KLSAgICAgICAgcEZvbnREaWN0LT5TZXRBdE5hbWUoIkJhc2VGb250IiwgYmFzZWZvbnQpOw0KLSAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwQ0lEU3lzSW5mbyA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7DQotICAgICAgICBwQ0lEU3lzSW5mby0+U2V0QXRTdHJpbmcoIlJlZ2lzdHJ5IiwgIkFkb2JlIik7DQotICAgICAgICBwQ0lEU3lzSW5mby0+U2V0QXRTdHJpbmcoIk9yZGVyaW5nIiwgb3JkZXJpbmcpOw0KLSAgICAgICAgcENJRFN5c0luZm8tPlNldEF0SW50ZWdlcigiU3VwcGxlbWVudCIsIHN1cHBsZW1lbnQpOw0KLSAgICAgICAgcEZvbnREaWN0LT5TZXRBdCgiQ0lEU3lzdGVtSW5mbyIsIHBDSURTeXNJbmZvKTsNCi0gICAgICAgIENQREZfQXJyYXkqIHBBcnJheSA9IEZYX05FVyBDUERGX0FycmF5Ow0KLSAgICAgICAgcEJhc2VEaWN0LT5TZXRBdCgiRGVzY2VuZGFudEZvbnRzIiwgcEFycmF5KTsNCi0gICAgICAgIEFkZEluZGlyZWN0T2JqZWN0KHBGb250RGljdCk7DQotICAgICAgICBwQXJyYXktPkFkZFJlZmVyZW5jZSh0aGlzLCBwRm9udERpY3QpOw0KLSAgICB9DQotICAgIEFkZEluZGlyZWN0T2JqZWN0KHBCYXNlRGljdCk7DQotICAgIENQREZfRGljdGlvbmFyeSogcEZvbnREZXNjID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsNCi0gICAgcEZvbnREZXNjLT5TZXRBdE5hbWUoIlR5cGUiLCAiRm9udERlc2NyaXB0b3IiKTsNCi0gICAgcEZvbnREZXNjLT5TZXRBdE5hbWUoIkZvbnROYW1lIiwgYmFzZWZvbnQpOw0KLSAgICBwRm9udERlc2MtPlNldEF0SW50ZWdlcigiRmxhZ3MiLCBmbGFncyk7DQotICAgIENQREZfQXJyYXkqIHBCQm94ID0gRlhfTkVXIENQREZfQXJyYXk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSArKykgew0KLSAgICAgICAgcEJCb3gtPkFkZEludGVnZXIoYmJveFtpXSk7DQotICAgIH0NCi0gICAgcEZvbnREZXNjLT5TZXRBdCgiRm9udEJCb3giLCBwQkJveCk7DQotICAgIHBGb250RGVzYy0+U2V0QXRJbnRlZ2VyKCJJdGFsaWNBbmdsZSIsIGl0YWxpY2FuZ2xlKTsNCi0gICAgcEZvbnREZXNjLT5TZXRBdEludGVnZXIoIkFzY2VudCIsIGFzY2VuZCk7DQotICAgIHBGb250RGVzYy0+U2V0QXRJbnRlZ2VyKCJEZXNjZW50IiwgZGVzY2VuZCk7DQotICAgIHBGb250RGVzYy0+U2V0QXRJbnRlZ2VyKCJDYXBIZWlnaHQiLCBjYXBoZWlnaHQpOw0KLSAgICBwRm9udERlc2MtPlNldEF0SW50ZWdlcigiU3RlbVYiLCBwTG9nRm9udC0+bGZXZWlnaHQgLyA1KTsNCi0gICAgQWRkSW5kaXJlY3RPYmplY3QocEZvbnREZXNjKTsNCi0gICAgcEZvbnREaWN0LT5TZXRBdFJlZmVyZW5jZSgiRm9udERlc2NyaXB0b3IiLCB0aGlzLCBwRm9udERlc2MpOw0KLSAgICBoRm9udCA9IFNlbGVjdE9iamVjdChoREMsIGhGb250KTsNCi0gICAgRGVsZXRlT2JqZWN0KGhGb250KTsNCi0gICAgRGVsZXRlREMoaERDKTsNCi0gICAgcmV0dXJuIExvYWRGb250KHBCYXNlRGljdCk7DQotfQ0KLSNlbmRpZg0KLSNpZiAoX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfKQ0KLUZYX1VJTlQzMiBGWF9HZXRMYW5nSGFzaENvZGUoIEZYX0xQQ1NUUiBwU3RyKQ0KLXsNCi0gICAgRlhTWVNfYXNzZXJ0KCBwU3RyICE9IE5VTEwpOw0KLSAgICBGWF9JTlQzMiBpTGVuZ3RoID0gRlhTWVNfc3RybGVuKHBTdHIpOw0KLSAgICBGWF9MUENTVFIgcFN0ckVuZCA9IHBTdHIgKyBpTGVuZ3RoOw0KLSAgICBGWF9VSU5UMzIgdUhhc2hDb2RlID0gMDsNCi0gICAgd2hpbGUgKCBwU3RyIDwgcFN0ckVuZCkgew0KLSAgICAgICAgdUhhc2hDb2RlID0gMzEgKiB1SGFzaENvZGUgKyB0b2xvd2VyKCpwU3RyKyspOw0KLSAgICB9DQotICAgIHJldHVybiB1SGFzaENvZGU7DQotfQ0KLXN0cnVjdCBGWF9MQU5HMkNTIHsNCi0gICAgRlhfRFdPUkQgICAgdUxhbmc7DQotICAgIGludCAgICAgICAgIHVDaGFyc2V0Ow0KLX0qRlhfTFBMQU5HMkNTOw0KLXN0YXRpYyBjb25zdCBGWF9MQU5HMkNTIGdzX0ZYTGFuZzJDaGFyc2V0VGFibGVbXSA9IHsNCi0gICAgezMxMDksIDB9LA0KLSAgICB7MzEyMSwgMTc4fSwNCi0gICAgezMxMjksIDE2Mn0sDQotICAgIHszMTM5LCAyMDR9LA0KLSAgICB7MzE0MSwgMjA0fSwNCi0gICAgezMxNjYsIDB9LA0KLSAgICB7MzE4NCwgMjM4fSwNCi0gICAgezMxOTcsIDB9LA0KLSAgICB7MzIwMSwgMH0sDQotICAgIHszMjM5LCAxNjF9LA0KLSAgICB7MzI0MSwgMH0sDQotICAgIHszMjQ2LCAwfSwNCi0gICAgezMyNDcsIDE4Nn0sDQotICAgIHszMjQ4LCAwfSwNCi0gICAgezMyNTksIDE3OH0sDQotICAgIHszMjY3LCAwfSwNCi0gICAgezMyNzMsIDB9LA0KLSAgICB7MzI3NiwgMH0sDQotICAgIHszMzAxLCAwfSwNCi0gICAgezMzMTAsIDF9LA0KLSAgICB7MzMyNSwgMTc3fSwNCi0gICAgezMzMjksIDF9LA0KLSAgICB7MzMzOCwgMjM4fSwNCi0gICAgezMzNDEsIDIzOH0sDQotICAgIHszMzQ1LCAxfSwNCi0gICAgezMzNTUsIDB9LA0KLSAgICB7MzM3MCwgMH0sDQotICAgIHszMzcxLCAwfSwNCi0gICAgezMzODMsIDEyOH0sDQotICAgIHszNDI0LCAyMDR9LA0KLSAgICB7MzQyNywgMX0sDQotICAgIHszNDI4LCAxMjl9LA0KLSAgICB7MzQzNiwgMTc4fSwNCi0gICAgezM0NjQsIDE4Nn0sDQotICAgIHszNDY2LCAxODZ9LA0KLSAgICB7MzQ4NiwgMjA0fSwNCi0gICAgezM0ODcsIDB9LA0KLSAgICB7MzQ5MywgMX0sDQotICAgIHszNDk0LCAwfSwNCi0gICAgezM1MDgsIDB9LA0KLSAgICB7MzUxOCwgMH0sDQotICAgIHszNTIwLCAwfSwNCi0gICAgezM1NjksIDF9LA0KLSAgICB7MzU4MCwgMjM4fSwNCi0gICAgezM1ODgsIDB9LA0KLSAgICB7MzY0NSwgMjM4fSwNCi0gICAgezM2NTEsIDIwNH0sDQotICAgIHszNjcyLCAyMzh9LA0KLSAgICB7MzY3MywgMjM4fSwNCi0gICAgezM2NzgsIDIzOH0sDQotICAgIHszNjc5LCAyMzh9LA0KLSAgICB7MzY4MywgMH0sDQotICAgIHszNjg0LCAwfSwNCi0gICAgezM2OTMsIDF9LA0KLSAgICB7MzY5NywgMX0sDQotICAgIHszNzAwLCAyMjJ9LA0KLSAgICB7MzcxMCwgMTYyfSwNCi0gICAgezM3MzQsIDIwNH0sDQotICAgIHszNzQxLCAxNzh9LA0KLSAgICB7Mzc0OSwgMTYyfSwNCi0gICAgezM3NjMsIDE2M30sDQotICAgIHszODg2LCAxMzR9LA0KLSAgICB7MTA1OTQzLCAwfSwNCi0gICAgezEwNjM3NSwgMX0sDQotICAgIHszOTIzNDUxODM3LCAxMzR9LA0KLSAgICB7MzkyMzQ1MTgzOCwgMTM2fSwNCi19Ow0KLXN0YXRpYyBGWF9XT1JEIEZYX0dldENzRnJvbUxhbmdDb2RlKEZYX1VJTlQzMiB1Q29kZSkNCi17DQotICAgIEZYX0lOVDMyIGlTdGFydCA9IDA7DQotICAgIEZYX0lOVDMyIGlFbmQgPSBzaXplb2YoZ3NfRlhMYW5nMkNoYXJzZXRUYWJsZSkgLyBzaXplb2YoRlhfTEFORzJDUykgLSAxOw0KLSAgICB3aGlsZSAoaVN0YXJ0IDw9IGlFbmQpIHsNCi0gICAgICAgIEZYX0lOVDMyIGlNaWQgPSAoaVN0YXJ0ICsgaUVuZCkgLyAyOw0KLSAgICAgICAgY29uc3QgRlhfTEFORzJDUyAmY2hhcnNldCA9IGdzX0ZYTGFuZzJDaGFyc2V0VGFibGVbaU1pZF07DQotICAgICAgICBpZiAodUNvZGUgPT0gY2hhcnNldC51TGFuZykgew0KLSAgICAgICAgICAgIHJldHVybiBjaGFyc2V0LnVDaGFyc2V0Ow0KLSAgICAgICAgfSBlbHNlIGlmICh1Q29kZSA8IGNoYXJzZXQudUxhbmcpIHsNCi0gICAgICAgICAgICBpRW5kID0gaU1pZCAtIDE7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlTdGFydCA9IGlNaWQgKyAxOw0KLSAgICAgICAgfQ0KLSAgICB9Ow0KLSAgICByZXR1cm4gMDsNCi19DQotc3RhdGljIEZYX1dPUkQgRlhfR2V0Q2hhcnNldEZyb21MYW5nKEZYX0xQQ1NUUiBwTGFuZywgRlhfSU5UMzIgaUxlbmd0aCkNCi17DQotICAgIEZYU1lTX2Fzc2VydChwTGFuZyk7DQotICAgIGlmIChpTGVuZ3RoIDwgMCkgew0KLSAgICAgICAgaUxlbmd0aCA9IEZYU1lTX3N0cmxlbihwTGFuZyk7DQotICAgIH0NCi0gICAgRlhfVUlOVDMyIHVIYXNoID0gRlhfR2V0TGFuZ0hhc2hDb2RlKHBMYW5nKTsNCi0gICAgcmV0dXJuIEZYX0dldENzRnJvbUxhbmdDb2RlKHVIYXNoKTsNCi19DQotc3RhdGljIHZvaWQgX0NGU3RyaW5nMkNGWEJ5dGVTdHJpbmcoQ0ZTdHJpbmdSZWYgc3JjLCBDRlhfQnl0ZVN0cmluZyAmZGVzdCkNCi17DQotICAgIFNJbnQzMiBsZW4gPSAgQ0ZTdHJpbmdHZXRMZW5ndGgoc3JjKTsNCi0gICAgQ0ZSYW5nZSByYW5nZSA9IENGUmFuZ2VNYWtlKDAsIGxlbik7DQotICAgIENGSW5kZXggdXNlZCA9IDA7DQotICAgIFVJbnQ4KiBwQnVmZmVyID0gKFVJbnQ4KiltYWxsb2Moc2l6ZW9mKFVJbnQ4KSAqIChsZW4gKyAxKSk7DQotICAgIEZYU1lTX21lbXNldDMyKHBCdWZmZXIsIDAsIHNpemVvZihVSW50OCkgKiAobGVuICsgMSkpOw0KLSAgICBDRlN0cmluZ0dldEJ5dGVzKHNyYywgcmFuZ2UsIGtDRlN0cmluZ0VuY29kaW5nQVNDSUksIDAsIGZhbHNlLCBwQnVmZmVyLCBsZW4sICZ1c2VkKTsNCi0gICAgZGVzdCA9IChGWF9MUFNUUilwQnVmZmVyOw0KLSAgICBmcmVlKHBCdWZmZXIpOw0KLX0NCi1GWF9CT09MIElzSGFzQ2hhclNldChDRkFycmF5UmVmIGxhbmd1YWdlcywgY29uc3QgQ0ZYX0RXb3JkQXJyYXkgJmNoYXJTZXRzKQ0KLXsNCi0gICAgaW50IGlDb3VudCA9IGNoYXJTZXRzLkdldFNpemUoKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBDRkFycmF5R2V0Q291bnQobGFuZ3VhZ2VzKTsgKytpKSB7DQotICAgICAgICBDRlN0cmluZ1JlZiBsYW5ndWFnZSA9IChDRlN0cmluZ1JlZilDRkFycmF5R2V0VmFsdWVBdEluZGV4KGxhbmd1YWdlcywgaSk7DQotICAgICAgICBGWF9EV09SRCBDaGFyU2V0ID0gRlhfR2V0Q2hhcnNldEZyb21MYW5nKENGU3RyaW5nR2V0Q1N0cmluZ1B0cihsYW5ndWFnZSwga0NGU3RyaW5nRW5jb2RpbmdNYWNSb21hbiksIC0xKTsNCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgaUNvdW50OyArK2opIHsNCi0gICAgICAgICAgICBpZiAoQ2hhclNldCA9PSBjaGFyU2V0c1tqXSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi12b2lkIEZYX0dldENoYXJXaWR0aChDVEZvbnRSZWYgZm9udCwgVW5pQ2hhciBzdGFydCwgVW5pQ2hhciBlbmQsIGludCogd2lkdGgpDQotew0KLSAgICBDR0Zsb2F0IHNpemUgPSBDVEZvbnRHZXRTaXplKGZvbnQpOw0KLSAgICBmb3IgKDsgc3RhcnQgPD0gZW5kOyArK3N0YXJ0KSB7DQotICAgICAgICBDR0dseXBoIHBHbHlwaCA9IDA7DQotICAgICAgICBDRkluZGV4IGNvdW50ID0gMTsNCi0gICAgICAgIENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMoZm9udCwgJnN0YXJ0LCAmcEdseXBoLCBjb3VudCk7DQotICAgICAgICBDR1NpemUgYWR2YW5jZXM7DQotICAgICAgICBDVEZvbnRHZXRBZHZhbmNlc0ZvckdseXBocyhmb250LCBrQ1RGb250RGVmYXVsdE9yaWVudGF0aW9uLCAmcEdseXBoLCAmYWR2YW5jZXMsIDEpOw0KLSAgICAgICAgKndpZHRoID0gKGludCkoYWR2YW5jZXMud2lkdGggLyBzaXplICogMTAwMCkgOw0KLSAgICAgICAgd2lkdGgrKzsNCi0gICAgfQ0KLX0NCi1zdGF0aWMgdm9pZCBfSW5zZXJ0V2lkdGhBcnJheShDVEZvbnRSZWYgZm9udCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBDUERGX0FycmF5KiBwV2lkdGhBcnJheSkNCi17DQotICAgIGludCBzaXplID0gZW5kIC0gc3RhcnQgKyAxOw0KLSAgICBpbnQqIHdpZHRocyA9IEZYX0FsbG9jKGludCwgc2l6ZSk7DQotICAgIEZYX0dldENoYXJXaWR0aChmb250LCBzdGFydCwgZW5kLCB3aWR0aHMpOw0KLSAgICBpbnQgaTsNCi0gICAgZm9yIChpID0gMTsgaSA8IHNpemU7IGkgKyspDQotICAgICAgICBpZiAod2lkdGhzW2ldICE9ICp3aWR0aHMpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgaWYgKGkgPT0gc2l6ZSkgew0KLSAgICAgICAgaW50IGZpcnN0ID0gcFdpZHRoQXJyYXktPkdldEludGVnZXIocFdpZHRoQXJyYXktPkdldENvdW50KCkgLSAxKTsNCi0gICAgICAgIHBXaWR0aEFycmF5LT5BZGRJbnRlZ2VyKGZpcnN0ICsgc2l6ZSAtIDEpOw0KLSAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoKndpZHRocyk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBDUERGX0FycmF5KiBwV2lkdGhBcnJheTEgPSBGWF9ORVcgQ1BERl9BcnJheTsNCi0gICAgICAgIHBXaWR0aEFycmF5LT5BZGQocFdpZHRoQXJyYXkxKTsNCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpICsrKSB7DQotICAgICAgICAgICAgcFdpZHRoQXJyYXkxLT5BZGRJbnRlZ2VyKHdpZHRoc1tpXSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhfRnJlZSh3aWR0aHMpOw0KLX0NCi1DUERGX0ZvbnQqIENQREZfRG9jdW1lbnQ6OkFkZE1hY0ZvbnQoQ1RGb250UmVmIHBGb250LCBGWF9CT09MIGJWZXJ0LCBGWF9CT09MIGJUcmFuc2xhdGVOYW1lKQ0KLXsNCi0gICAgQ1RGb250UmVmIGZvbnQgPSAoQ1RGb250UmVmKXBGb250Ow0KLSAgICBDVEZvbnREZXNjcmlwdG9yUmVmIGRlc2NyaXB0b3IgPSBDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udCk7DQotICAgIGlmIChkZXNjcmlwdG9yID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIGJhc2Vmb250Ow0KLSAgICBGWF9CT09MIGJDSksgPSBGQUxTRTsNCi0gICAgaW50IGZsYWdzID0gMCwgaXRhbGljYW5nbGUgPSAwLCBhc2NlbmQgPSAwLCBkZXNjZW5kID0gMCwgY2FwaGVpZ2h0ID0gMCwgYmJveFs0XTsNCi0gICAgRlhTWVNfbWVtc2V0MzIoYmJveCwgMCwgc2l6ZW9mKGludCkgKiA0KTsNCi0gICAgQ0ZBcnJheVJlZiBsYW5ndWFnZXMgPSAoQ0ZBcnJheVJlZilDVEZvbnREZXNjcmlwdG9yQ29weUF0dHJpYnV0ZShkZXNjcmlwdG9yLCBrQ1RGb250TGFuZ3VhZ2VzQXR0cmlidXRlKTsNCi0gICAgaWYgKGxhbmd1YWdlcyA9PSBOVUxMKSB7DQotICAgICAgICBDRlJlbGVhc2UoZGVzY3JpcHRvcik7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDRlhfRFdvcmRBcnJheSBjaGFyU2V0czsNCi0gICAgY2hhclNldHMuQWRkKEZYRk9OVF9DSElORVNFQklHNV9DSEFSU0VUKTsNCi0gICAgY2hhclNldHMuQWRkKEZYRk9OVF9HQjIzMTJfQ0hBUlNFVCk7DQotICAgIGNoYXJTZXRzLkFkZChGWEZPTlRfSEFOR0VVTF9DSEFSU0VUKTsNCi0gICAgY2hhclNldHMuQWRkKEZYRk9OVF9TSElGVEpJU19DSEFSU0VUKTsNCi0gICAgaWYgKElzSGFzQ2hhclNldChsYW5ndWFnZXMsIGNoYXJTZXRzKSkgew0KLSAgICAgICAgYkNKSyA9IFRSVUU7DQotICAgIH0NCi0gICAgQ0ZSZWxlYXNlKGRlc2NyaXB0b3IpOw0KLSAgICBDRkRpY3Rpb25hcnlSZWYgdHJhaXRzID0gKENGRGljdGlvbmFyeVJlZilDVEZvbnRDb3B5VHJhaXRzKGZvbnQpOw0KLSAgICBpZiAodHJhaXRzID09IE5VTEwpIHsNCi0gICAgICAgIENGUmVsZWFzZShsYW5ndWFnZXMpOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ0ZOdW1iZXJSZWYgc3lib2xpY1RyYWl0ID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHRyYWl0cywga0NURm9udFN5bWJvbGljVHJhaXQpOw0KLSAgICBDVEZvbnRTeW1ib2xpY1RyYWl0cyB0cmFpdCA9IDA7DQotICAgIENGTnVtYmVyR2V0VmFsdWUoc3lib2xpY1RyYWl0LCBrQ0ZOdW1iZXJTSW50MzJUeXBlLCAmdHJhaXQpOw0KLSAgICBpZiAodHJhaXQgJiBrQ1RGb250SXRhbGljVHJhaXQpIHsNCi0gICAgICAgIGZsYWdzIHw9IFBERkZPTlRfSVRBTElDOw0KLSAgICB9DQotICAgIGlmICh0cmFpdCAmIGtDVEZvbnRNb25vU3BhY2VUcmFpdCkgew0KLSAgICAgICAgZmxhZ3MgfD0gUERGRk9OVF9GSVhFRFBJVENIOw0KLSAgICB9DQotICAgIGlmICh0cmFpdCAmIGtDVEZvbnRNb2Rlcm5TZXJpZnNDbGFzcykgew0KLSAgICAgICAgZmxhZ3MgfD0gUERGRk9OVF9TRVJJRjsNCi0gICAgfQ0KLSAgICBpZiAodHJhaXQgJiBrQ1RGb250U2NyaXB0c0NsYXNzKSB7DQotICAgICAgICBmbGFncyB8PSBQREZGT05UX1NDUklQVDsNCi0gICAgfQ0KLSAgICBDRk51bWJlclJlZiB3ZWlnaHRUcmFpdCA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZSh0cmFpdHMsIGtDVEZvbnRXZWlnaHRUcmFpdCk7DQotICAgIEZsb2F0MzIgd2VpZ2h0ID0gMDsNCi0gICAgQ0ZOdW1iZXJHZXRWYWx1ZSh3ZWlnaHRUcmFpdCwga0NGTnVtYmVyRmxvYXQzMlR5cGUsICZ3ZWlnaHQpOw0KLSAgICBpdGFsaWNhbmdsZSA9IENURm9udEdldFNsYW50QW5nbGUoZm9udCk7DQotICAgIGFzY2VuZCAgICAgID0gQ1RGb250R2V0QXNjZW50KGZvbnQpOw0KLSAgICBkZXNjZW5kICAgICA9IENURm9udEdldERlc2NlbnQoZm9udCk7DQotICAgIGNhcGhlaWdodCAgID0gQ1RGb250R2V0Q2FwSGVpZ2h0KGZvbnQpOw0KLSAgICBDR1JlY3QgYm94ICA9IENURm9udEdldEJvdW5kaW5nQm94KGZvbnQpOw0KLSAgICBiYm94WzBdICAgICA9IGJveC5vcmlnaW4ueDsNCi0gICAgYmJveFsxXSAgICAgPSBib3gub3JpZ2luLnk7DQotICAgIGJib3hbMl0gICAgID0gYm94Lm9yaWdpbi54ICsgYm94LnNpemUud2lkdGg7DQotICAgIGJib3hbM10gICAgID0gYm94Lm9yaWdpbi55ICsgYm94LnNpemUuaGVpZ2h0Ow0KLSAgICBpZiAoYlRyYW5zbGF0ZU5hbWUgJiYgYkNKSykgew0KLSAgICAgICAgQ0ZTdHJpbmdSZWYgcG9zdE5hbWUgPSBDVEZvbnRDb3B5UG9zdFNjcmlwdE5hbWUoZm9udCk7DQotICAgICAgICBfQ0ZTdHJpbmcyQ0ZYQnl0ZVN0cmluZyhwb3N0TmFtZSwgYmFzZWZvbnQpOw0KLSAgICAgICAgQ0ZSZWxlYXNlKHBvc3ROYW1lKTsNCi0gICAgfQ0KLSAgICBpZiAoYmFzZWZvbnQuSXNFbXB0eSgpKSB7DQotICAgICAgICBDRlN0cmluZ1JlZiBmdWxsTmFtZSA9IENURm9udENvcHlGdWxsTmFtZShmb250KTsNCi0gICAgICAgIF9DRlN0cmluZzJDRlhCeXRlU3RyaW5nKGZ1bGxOYW1lLCBiYXNlZm9udCk7DQotICAgICAgICBDRlJlbGVhc2UoZnVsbE5hbWUpOw0KLSAgICB9DQotICAgIGJhc2Vmb250LlJlcGxhY2UoIiAiLCAiIik7DQotICAgIENQREZfRGljdGlvbmFyeSogcEZvbnREaWN0ID0gTlVMTDsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwQmFzZURpY3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5Ow0KLSAgICBwRm9udERpY3QgPSBwQmFzZURpY3Q7DQotICAgIGlmICghYkNKSykgew0KLSAgICAgICAgY2hhclNldHMuUmVtb3ZlQWxsKCk7DQotICAgICAgICBjaGFyU2V0cy5BZGQoRlhGT05UX0FOU0lfQ0hBUlNFVCk7DQotICAgICAgICBjaGFyU2V0cy5BZGQoRlhGT05UX0RFRkFVTFRfQ0hBUlNFVCk7DQotICAgICAgICBjaGFyU2V0cy5BZGQoRlhGT05UX1NZTUJPTF9DSEFSU0VUKTsNCi0gICAgICAgIGlmIChJc0hhc0NoYXJTZXQobGFuZ3VhZ2VzLCBjaGFyU2V0cykpIHsNCi0gICAgICAgICAgICBjaGFyU2V0cy5SZW1vdmVBbGwoKTsNCi0gICAgICAgICAgICBjaGFyU2V0cy5BZGQoRlhGT05UX1NZTUJPTF9DSEFSU0VUKTsNCi0gICAgICAgICAgICBpZiAoSXNIYXNDaGFyU2V0KGxhbmd1YWdlcywgY2hhclNldHMpKSB7DQotICAgICAgICAgICAgICAgIGZsYWdzIHw9IFBERkZPTlRfU1lNQk9MSUM7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgZmxhZ3MgfD0gUERGRk9OVF9OT05TWU1CT0xJQzsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcEJhc2VEaWN0LT5TZXRBdE5hbWUoRlhfQlNUUkMoIkVuY29kaW5nIiksICJXaW5BbnNpRW5jb2RpbmciKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgZmxhZ3MgfD0gUERGRk9OVF9OT05TWU1CT0xJQzsNCi0gICAgICAgICAgICBpbnQgaTsNCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIGdfRlhfQ2hhcnNldFVuaWNvZGVzIC8gc2l6ZW9mKEZYX0NoYXJzZXRVbmljb2Rlcyk7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgY2hhclNldHMuUmVtb3ZlQWxsKCk7DQotICAgICAgICAgICAgICAgIGNoYXJTZXRzLkFkZChnX0ZYX0NoYXJzZXRVbmljb2Rlc1tpXS5tX0NoYXJzZXQpOw0KLSAgICAgICAgICAgICAgICBpZiAoSXNIYXNDaGFyU2V0KGxhbmd1YWdlcywgY2hhclNldHMpKSB7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoaSA8IHNpemVvZiBnX0ZYX0NoYXJzZXRVbmljb2RlcyAvIHNpemVvZihGWF9DaGFyc2V0VW5pY29kZXMpKSB7DQotICAgICAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcEVuY29kaW5nID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsNCi0gICAgICAgICAgICAgICAgcEVuY29kaW5nLT5TZXRBdE5hbWUoRlhfQlNUUkMoIkJhc2VFbmNvZGluZyIpLCAiV2luQW5zaUVuY29kaW5nIik7DQotICAgICAgICAgICAgICAgIENQREZfQXJyYXkqIHBBcnJheSA9IEZYX05FVyBDUERGX0FycmF5Ow0KLSAgICAgICAgICAgICAgICBwQXJyYXktPkFkZEludGVnZXIoMTI4KTsNCi0gICAgICAgICAgICAgICAgY29uc3QgRlhfV0NIQVIqIHBVbmljb2RlcyA9IGdfRlhfQ2hhcnNldFVuaWNvZGVzW2ldLm1fcFVuaWNvZGVzOw0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDEyODsgaiArKykgew0KLSAgICAgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgbmFtZSA9IFBERl9BZG9iZU5hbWVGcm9tVW5pY29kZShwVW5pY29kZXNbal0pOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUuSXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcEFycmF5LT5BZGROYW1lKEZYX0JTVFJDKCIubm90ZGVmIikpOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBwQXJyYXktPkFkZE5hbWUobmFtZSk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcEVuY29kaW5nLT5TZXRBdChGWF9CU1RSQygiRGlmZmVyZW5jZXMiKSwgcEFycmF5KTsNCi0gICAgICAgICAgICAgICAgQWRkSW5kaXJlY3RPYmplY3QocEVuY29kaW5nKTsNCi0gICAgICAgICAgICAgICAgcEJhc2VEaWN0LT5TZXRBdFJlZmVyZW5jZShGWF9CU1RSQygiRW5jb2RpbmciKSwgdGhpcywgcEVuY29kaW5nKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAod2VpZ2h0ID4gMC4wICYmIHRyYWl0ICYga0NURm9udEl0YWxpY1RyYWl0KSB7DQotICAgICAgICAgICAgYmFzZWZvbnQgKz0gIixCb2xkSXRhbGljIjsNCi0gICAgICAgIH0gZWxzZSBpZiAod2VpZ2h0ID4gMC4wKSB7DQotICAgICAgICAgICAgYmFzZWZvbnQgKz0gIixCb2xkIjsNCi0gICAgICAgIH0gZWxzZSBpZiAodHJhaXQgJiBrQ1RGb250SXRhbGljVHJhaXQpIHsNCi0gICAgICAgICAgICBiYXNlZm9udCArPSAiLEl0YWxpYyI7DQotICAgICAgICB9DQotICAgICAgICBwQmFzZURpY3QtPlNldEF0TmFtZSgiU3VidHlwZSIsICJUcnVlVHlwZSIpOw0KLSAgICAgICAgcEJhc2VEaWN0LT5TZXRBdE5hbWUoIkJhc2VGb250IiwgYmFzZWZvbnQpOw0KLSAgICAgICAgcEJhc2VEaWN0LT5TZXRBdE51bWJlcigiRmlyc3RDaGFyIiwgMzIpOw0KLSAgICAgICAgcEJhc2VEaWN0LT5TZXRBdE51bWJlcigiTGFzdENoYXIiLCAyNTUpOw0KLSAgICAgICAgaW50IGNoYXJfd2lkdGhzWzIyNF07DQotICAgICAgICBGWF9HZXRDaGFyV2lkdGgoZm9udCwgMzIsIDI1NSwgY2hhcl93aWR0aHMpOw0KLSAgICAgICAgQ1BERl9BcnJheSogcFdpZHRocyA9IEZYX05FVyBDUERGX0FycmF5Ow0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyMjQ7IGkgKyspIHsNCi0gICAgICAgICAgICBwV2lkdGhzLT5BZGRJbnRlZ2VyKGNoYXJfd2lkdGhzW2ldKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHBCYXNlRGljdC0+U2V0QXQoIldpZHRocyIsIHBXaWR0aHMpOw0KLSAgICB9ICBlbHNlIHsNCi0gICAgICAgIGZsYWdzIHw9IFBERkZPTlRfTk9OU1lNQk9MSUM7DQotICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBOVUxMOw0KLSAgICAgICAgcEZvbnREaWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIGNtYXA7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyBvcmRlcmluZzsNCi0gICAgICAgIGludCBzdXBwbGVtZW50Ow0KLSAgICAgICAgRlhfQk9PTCBiRm91bmQgPSBGQUxTRTsNCi0gICAgICAgIENQREZfQXJyYXkqIHBXaWR0aEFycmF5ID0gRlhfTkVXIENQREZfQXJyYXk7DQotICAgICAgICBjaGFyU2V0cy5SZW1vdmVBbGwoKTsNCi0gICAgICAgIGNoYXJTZXRzLkFkZChGWEZPTlRfQ0hJTkVTRUJJRzVfQ0hBUlNFVCk7DQotICAgICAgICBpZiAoSXNIYXNDaGFyU2V0KGxhbmd1YWdlcywgY2hhclNldHMpKSB7DQotICAgICAgICAgICAgY21hcCA9IGJWZXJ0ID8gIkVUZW5tcy1CNS1WIiA6ICJFVGVubXMtQjUtSCI7DQotICAgICAgICAgICAgb3JkZXJpbmcgPSAiQ05TMSI7DQotICAgICAgICAgICAgc3VwcGxlbWVudCA9IDQ7DQotICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoMSk7DQotICAgICAgICAgICAgX0luc2VydFdpZHRoQXJyYXkoZm9udCwgMHgyMCwgMHg3ZSwgcFdpZHRoQXJyYXkpOw0KLSAgICAgICAgICAgIGJGb3VuZCA9IFRSVUU7DQotICAgICAgICB9DQotICAgICAgICBjaGFyU2V0cy5SZW1vdmVBbGwoKTsNCi0gICAgICAgIGNoYXJTZXRzLkFkZChGWEZPTlRfR0IyMzEyX0NIQVJTRVQpOw0KLSAgICAgICAgaWYgKCFiRm91bmQgJiYgSXNIYXNDaGFyU2V0KGxhbmd1YWdlcywgY2hhclNldHMpKSB7DQotICAgICAgICAgICAgY21hcCA9IGJWZXJ0ID8gIkdCSy1FVUMtViIgOiAiR0JLLUVVQy1IIjsNCi0gICAgICAgICAgICBvcmRlcmluZyA9ICJHQjEiLCBzdXBwbGVtZW50ID0gMjsNCi0gICAgICAgICAgICBwV2lkdGhBcnJheS0+QWRkSW50ZWdlcig3NzE2KTsNCi0gICAgICAgICAgICBfSW5zZXJ0V2lkdGhBcnJheShmb250LCAweDIwLCAweDIwLCBwV2lkdGhBcnJheSk7DQotICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoODE0KTsNCi0gICAgICAgICAgICBfSW5zZXJ0V2lkdGhBcnJheShmb250LCAweDIxLCAweDdlLCBwV2lkdGhBcnJheSk7DQotICAgICAgICAgICAgYkZvdW5kID0gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGNoYXJTZXRzLlJlbW92ZUFsbCgpOw0KLSAgICAgICAgY2hhclNldHMuQWRkKEZYRk9OVF9IQU5HRVVMX0NIQVJTRVQpOw0KLSAgICAgICAgaWYgKCFiRm91bmQgJiYgSXNIYXNDaGFyU2V0KGxhbmd1YWdlcywgY2hhclNldHMpKSB7DQotICAgICAgICAgICAgY21hcCA9IGJWZXJ0ID8gIktTQ21zLVVIQy1WIiA6ICJLU0Ntcy1VSEMtSCI7DQotICAgICAgICAgICAgb3JkZXJpbmcgPSAiS29yZWExIjsNCi0gICAgICAgICAgICBzdXBwbGVtZW50ID0gMjsNCi0gICAgICAgICAgICBwV2lkdGhBcnJheS0+QWRkSW50ZWdlcigxKTsNCi0gICAgICAgICAgICBfSW5zZXJ0V2lkdGhBcnJheShmb250LCAweDIwLCAweDdlLCBwV2lkdGhBcnJheSk7DQotICAgICAgICAgICAgYkZvdW5kID0gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGNoYXJTZXRzLlJlbW92ZUFsbCgpOw0KLSAgICAgICAgY2hhclNldHMuQWRkKEZYRk9OVF9TSElGVEpJU19DSEFSU0VUKTsNCi0gICAgICAgIGlmICghYkZvdW5kICYmIElzSGFzQ2hhclNldChsYW5ndWFnZXMsIGNoYXJTZXRzKSkgew0KLSAgICAgICAgICAgIGNtYXAgPSBiVmVydCA/ICI5MG1zLVJLU0otViIgOiAiOTBtcy1SS1NKLUgiOw0KLSAgICAgICAgICAgIG9yZGVyaW5nID0gIkphcGFuMSI7DQotICAgICAgICAgICAgc3VwcGxlbWVudCA9IDU7DQotICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoMjMxKTsNCi0gICAgICAgICAgICBfSW5zZXJ0V2lkdGhBcnJheShmb250LCAweDIwLCAweDdkLCBwV2lkdGhBcnJheSk7DQotICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoMzI2KTsNCi0gICAgICAgICAgICBfSW5zZXJ0V2lkdGhBcnJheShmb250LCAweGEwLCAweGEwLCBwV2lkdGhBcnJheSk7DQotICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoMzI3KTsNCi0gICAgICAgICAgICBfSW5zZXJ0V2lkdGhBcnJheShmb250LCAweGExLCAweGRmLCBwV2lkdGhBcnJheSk7DQotICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoNjMxKTsNCi0gICAgICAgICAgICBfSW5zZXJ0V2lkdGhBcnJheShmb250LCAweDdlLCAweDdlLCBwV2lkdGhBcnJheSk7DQotICAgICAgICB9DQotICAgICAgICBwQmFzZURpY3QtPlNldEF0TmFtZSgiU3VidHlwZSIsICJUeXBlMCIpOw0KLSAgICAgICAgcEJhc2VEaWN0LT5TZXRBdE5hbWUoIkJhc2VGb250IiwgYmFzZWZvbnQpOw0KLSAgICAgICAgcEJhc2VEaWN0LT5TZXRBdE5hbWUoIkVuY29kaW5nIiwgY21hcCk7DQotICAgICAgICBwRm9udERpY3QtPlNldEF0KCJXIiwgcFdpZHRoQXJyYXkpOw0KLSAgICAgICAgcEZvbnREaWN0LT5TZXRBdE5hbWUoIlR5cGUiLCAiRm9udCIpOw0KLSAgICAgICAgcEZvbnREaWN0LT5TZXRBdE5hbWUoIlN1YnR5cGUiLCAiQ0lERm9udFR5cGUyIik7DQotICAgICAgICBwRm9udERpY3QtPlNldEF0TmFtZSgiQmFzZUZvbnQiLCBiYXNlZm9udCk7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBDSURTeXNJbmZvID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsNCi0gICAgICAgIHBDSURTeXNJbmZvLT5TZXRBdFN0cmluZygiUmVnaXN0cnkiLCAiQWRvYmUiKTsNCi0gICAgICAgIHBDSURTeXNJbmZvLT5TZXRBdFN0cmluZygiT3JkZXJpbmciLCBvcmRlcmluZyk7DQotICAgICAgICBwQ0lEU3lzSW5mby0+U2V0QXRJbnRlZ2VyKCJTdXBwbGVtZW50Iiwgc3VwcGxlbWVudCk7DQotICAgICAgICBwRm9udERpY3QtPlNldEF0KCJDSURTeXN0ZW1JbmZvIiwgcENJRFN5c0luZm8pOw0KLSAgICAgICAgcEFycmF5ID0gRlhfTkVXIENQREZfQXJyYXk7DQotICAgICAgICBwQmFzZURpY3QtPlNldEF0KCJEZXNjZW5kYW50Rm9udHMiLCBwQXJyYXkpOw0KLSAgICAgICAgQWRkSW5kaXJlY3RPYmplY3QocEZvbnREaWN0KTsNCi0gICAgICAgIHBBcnJheS0+QWRkUmVmZXJlbmNlKHRoaXMsIHBGb250RGljdCk7DQotICAgIH0NCi0gICAgQWRkSW5kaXJlY3RPYmplY3QocEJhc2VEaWN0KTsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9udERlc2MgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5Ow0KLSAgICBwRm9udERlc2MtPlNldEF0TmFtZSgiVHlwZSIsICJGb250RGVzY3JpcHRvciIpOw0KLSAgICBwRm9udERlc2MtPlNldEF0TmFtZSgiRm9udE5hbWUiLCBiYXNlZm9udCk7DQotICAgIHBGb250RGVzYy0+U2V0QXRJbnRlZ2VyKCJGbGFncyIsIGZsYWdzKTsNCi0gICAgQ1BERl9BcnJheSogcEJCb3ggPSBGWF9ORVcgQ1BERl9BcnJheTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpICsrKSB7DQotICAgICAgICBwQkJveC0+QWRkSW50ZWdlcihiYm94W2ldKTsNCi0gICAgfQ0KLSAgICBwRm9udERlc2MtPlNldEF0KCJGb250QkJveCIsIHBCQm94KTsNCi0gICAgcEZvbnREZXNjLT5TZXRBdEludGVnZXIoIkl0YWxpY0FuZ2xlIiwgaXRhbGljYW5nbGUpOw0KLSAgICBwRm9udERlc2MtPlNldEF0SW50ZWdlcigiQXNjZW50IiwgYXNjZW5kKTsNCi0gICAgcEZvbnREZXNjLT5TZXRBdEludGVnZXIoIkRlc2NlbnQiLCBkZXNjZW5kKTsNCi0gICAgcEZvbnREZXNjLT5TZXRBdEludGVnZXIoIkNhcEhlaWdodCIsIGNhcGhlaWdodCk7DQotICAgIENHRmxvYXQgZlN0ZW1WID0gMDsNCi0gICAgaW50MTZfdCBtaW5fd2lkdGggPSBTSFJUX01BWDsNCi0gICAgc3RhdGljIGNvbnN0IFVuaUNoYXIgc3RlbV9jaGFyc1tdID0geydpJywgJ0knLCAnIScsICcxJ307DQotICAgIGNvbnN0IHNpemVfdCBjb3VudCA9IHNpemVvZihzdGVtX2NoYXJzKSAvIHNpemVvZihzdGVtX2NoYXJzWzBdKTsNCi0gICAgQ0dHbHlwaCBnbHlwaHNbY291bnRdOw0KLSAgICBDR1JlY3QgYm91bmRpbmdSZWN0c1tjb3VudF07DQotICAgIGlmIChDVEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKGZvbnQsIHN0ZW1fY2hhcnMsIGdseXBocywgY291bnQpKSB7DQotICAgICAgICBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKGZvbnQsIGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocywgYm91bmRpbmdSZWN0cywgY291bnQpOw0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7DQotICAgICAgICAgICAgaW50MTZfdCB3aWR0aCA9IGJvdW5kaW5nUmVjdHNbaV0uc2l6ZS53aWR0aDsNCi0gICAgICAgICAgICBpZiAod2lkdGggPiAwICYmIHdpZHRoIDwgbWluX3dpZHRoKSB7DQotICAgICAgICAgICAgICAgIG1pbl93aWR0aCA9IHdpZHRoOw0KLSAgICAgICAgICAgICAgICBmU3RlbVYgPSBtaW5fd2lkdGg7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHBGb250RGVzYy0+U2V0QXRJbnRlZ2VyKCJTdGVtViIsIGZTdGVtVik7DQotICAgIEFkZEluZGlyZWN0T2JqZWN0KHBGb250RGVzYyk7DQotICAgIHBGb250RGljdC0+U2V0QXRSZWZlcmVuY2UoIkZvbnREZXNjcmlwdG9yIiwgdGhpcywgcEZvbnREZXNjKTsNCi0gICAgQ0ZSZWxlYXNlKHRyYWl0cyk7DQotICAgIENGUmVsZWFzZShsYW5ndWFnZXMpOw0KLSAgICByZXR1cm4gTG9hZEZvbnQocEJhc2VEaWN0KTsNCi19DQotI2VuZGlmDQotc3RhdGljIHZvaWQgX0luc2VydFdpZHRoQXJyYXkxKENGWF9Gb250KiBwRm9udCwgSUZYX0ZvbnRFbmNvZGluZyogcEVuY29kaW5nLCBGWF9XQ0hBUiBzdGFydCwgRlhfV0NIQVIgZW5kLCBDUERGX0FycmF5KiBwV2lkdGhBcnJheSkNCi17DQotICAgIGludCBzaXplID0gZW5kIC0gc3RhcnQgKyAxOw0KLSAgICBpbnQqIHdpZHRocyA9IEZYX0FsbG9jKGludCwgc2l6ZSk7DQotICAgIGludCBpOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgew0KLSAgICAgICAgaW50IGdseXBoX2luZGV4ID0gcEVuY29kaW5nLT5HbHlwaEZyb21DaGFyQ29kZShzdGFydCArIGkpOw0KLSAgICAgICAgd2lkdGhzW2ldID0gcEZvbnQtPkdldEdseXBoV2lkdGgoZ2x5cGhfaW5kZXgpOw0KLSAgICB9DQotICAgIGZvciAoaSA9IDE7IGkgPCBzaXplOyBpICsrKQ0KLSAgICAgICAgaWYgKHdpZHRoc1tpXSAhPSAqd2lkdGhzKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIGlmIChpID09IHNpemUpIHsNCi0gICAgICAgIGludCBmaXJzdCA9IHBXaWR0aEFycmF5LT5HZXRJbnRlZ2VyKHBXaWR0aEFycmF5LT5HZXRDb3VudCgpIC0gMSk7DQotICAgICAgICBwV2lkdGhBcnJheS0+QWRkSW50ZWdlcihmaXJzdCArIHNpemUgLSAxKTsNCi0gICAgICAgIHBXaWR0aEFycmF5LT5BZGRJbnRlZ2VyKCp3aWR0aHMpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgQ1BERl9BcnJheSogcFdpZHRoQXJyYXkxID0gRlhfTkVXIENQREZfQXJyYXk7DQotICAgICAgICBwV2lkdGhBcnJheS0+QWRkKHBXaWR0aEFycmF5MSk7DQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgew0KLSAgICAgICAgICAgIHBXaWR0aEFycmF5MS0+QWRkSW50ZWdlcih3aWR0aHNbaV0pOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIEZYX0ZyZWUod2lkdGhzKTsNCi19DQotQ1BERl9Gb250KiBDUERGX0RvY3VtZW50OjpBZGRGb250KENGWF9Gb250KiBwRm9udCwgaW50IGNoYXJzZXQsIEZYX0JPT0wgYlZlcnQpDQotew0KLSAgICBpZiAocEZvbnQgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgRlhfQk9PTCBiQ0pLID0gY2hhcnNldCA9PSBGWEZPTlRfQ0hJTkVTRUJJRzVfQ0hBUlNFVCB8fCBjaGFyc2V0ID09IEZYRk9OVF9HQjIzMTJfQ0hBUlNFVCB8fA0KLSAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID09IEZYRk9OVF9IQU5HRVVMX0NIQVJTRVQgfHwgY2hhcnNldCA9PSBGWEZPTlRfU0hJRlRKSVNfQ0hBUlNFVDsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgYmFzZWZvbnQgPSBwRm9udC0+R2V0RmFtaWx5TmFtZSgpOw0KLSAgICBiYXNlZm9udC5SZXBsYWNlKCIgIiwgIiIpOw0KLSAgICBpbnQgZmxhZ3MgPSAwOw0KLSAgICBpZiAocEZvbnQtPklzQm9sZCgpKSB7DQotICAgICAgICBmbGFncyB8PSBQREZGT05UX0ZPUkNFQk9MRDsNCi0gICAgfQ0KLSAgICBpZiAocEZvbnQtPklzSXRhbGljKCkpIHsNCi0gICAgICAgIGZsYWdzIHw9IFBERkZPTlRfSVRBTElDOw0KLSAgICB9DQotICAgIGlmIChwRm9udC0+SXNGaXhlZFdpZHRoKCkpIHsNCi0gICAgICAgIGZsYWdzIHw9IFBERkZPTlRfRklYRURQSVRDSDsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBCYXNlRGljdCA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7DQotICAgIHBCYXNlRGljdC0+U2V0QXROYW1lKCJUeXBlIiwgIkZvbnQiKTsNCi0gICAgSUZYX0ZvbnRFbmNvZGluZyogcEVuY29kaW5nID0gRlhHRV9DcmVhdGVVbmljb2RlRW5jb2RpbmcocEZvbnQpOw0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBGb250RGljdCA9IHBCYXNlRGljdDsNCi0gICAgaWYgKCFiQ0pLKSB7DQotICAgICAgICBDUERGX0FycmF5KiBwV2lkdGhzID0gRlhfTkVXIENQREZfQXJyYXk7DQotICAgICAgICBpbnQgY2hhcmNvZGU7DQotICAgICAgICBmb3IgKGNoYXJjb2RlID0gMzI7IGNoYXJjb2RlIDwgMTI4OyBjaGFyY29kZSArKykgew0KLSAgICAgICAgICAgIGludCBnbHlwaF9pbmRleCA9IHBFbmNvZGluZy0+R2x5cGhGcm9tQ2hhckNvZGUoY2hhcmNvZGUpOw0KLSAgICAgICAgICAgIGludCBjaGFyX3dpZHRoID0gcEZvbnQtPkdldEdseXBoV2lkdGgoZ2x5cGhfaW5kZXgpOw0KLSAgICAgICAgICAgIHBXaWR0aHMtPkFkZEludGVnZXIoY2hhcl93aWR0aCk7DQotICAgICAgICB9DQotICAgICAgICBpZiAoY2hhcnNldCA9PSBGWEZPTlRfQU5TSV9DSEFSU0VUIHx8IGNoYXJzZXQgPT0gRlhGT05UX0RFRkFVTFRfQ0hBUlNFVCB8fA0KLSAgICAgICAgICAgICAgICBjaGFyc2V0ID09IEZYRk9OVF9TWU1CT0xfQ0hBUlNFVCkgew0KLSAgICAgICAgICAgIGlmIChjaGFyc2V0ID09IEZYRk9OVF9TWU1CT0xfQ0hBUlNFVCkgew0KLSAgICAgICAgICAgICAgICBmbGFncyB8PSBQREZGT05UX1NZTUJPTElDOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGZsYWdzIHw9IFBERkZPTlRfTk9OU1lNQk9MSUM7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHBCYXNlRGljdC0+U2V0QXROYW1lKEZYX0JTVFJDKCJFbmNvZGluZyIpLCAiV2luQW5zaUVuY29kaW5nIik7DQotICAgICAgICAgICAgZm9yIChjaGFyY29kZSA9IDEyODsgY2hhcmNvZGUgPD0gMjU1OyBjaGFyY29kZSArKykgew0KLSAgICAgICAgICAgICAgICBpbnQgZ2x5cGhfaW5kZXggPSBwRW5jb2RpbmctPkdseXBoRnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsNCi0gICAgICAgICAgICAgICAgaW50IGNoYXJfd2lkdGggPSBwRm9udC0+R2V0R2x5cGhXaWR0aChnbHlwaF9pbmRleCk7DQotICAgICAgICAgICAgICAgIHBXaWR0aHMtPkFkZEludGVnZXIoY2hhcl93aWR0aCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBmbGFncyB8PSBQREZGT05UX05PTlNZTUJPTElDOw0KLSAgICAgICAgICAgIGludCBpOw0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YgZ19GWF9DaGFyc2V0VW5pY29kZXMgLyBzaXplb2YoRlhfQ2hhcnNldFVuaWNvZGVzKTsgaSArKykNCi0gICAgICAgICAgICAgICAgaWYgKGdfRlhfQ2hhcnNldFVuaWNvZGVzW2ldLm1fQ2hhcnNldCA9PSBjaGFyc2V0KSB7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChpIDwgc2l6ZW9mIGdfRlhfQ2hhcnNldFVuaWNvZGVzIC8gc2l6ZW9mKEZYX0NoYXJzZXRVbmljb2RlcykpIHsNCi0gICAgICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRW5jb2RpbmdEaWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsNCi0gICAgICAgICAgICAgICAgcEVuY29kaW5nRGljdC0+U2V0QXROYW1lKEZYX0JTVFJDKCJCYXNlRW5jb2RpbmciKSwgIldpbkFuc2lFbmNvZGluZyIpOw0KLSAgICAgICAgICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBGWF9ORVcgQ1BERl9BcnJheTsNCi0gICAgICAgICAgICAgICAgcEFycmF5LT5BZGRJbnRlZ2VyKDEyOCk7DQotICAgICAgICAgICAgICAgIGNvbnN0IEZYX1dDSEFSKiBwVW5pY29kZXMgPSBnX0ZYX0NoYXJzZXRVbmljb2Rlc1tpXS5tX3BVbmljb2RlczsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAxMjg7IGogKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIG5hbWUgPSBQREZfQWRvYmVOYW1lRnJvbVVuaWNvZGUocFVuaWNvZGVzW2pdKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lLklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBBcnJheS0+QWRkTmFtZShGWF9CU1RSQygiLm5vdGRlZiIpKTsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcEFycmF5LT5BZGROYW1lKG5hbWUpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaW50IGdseXBoX2luZGV4ID0gcEVuY29kaW5nLT5HbHlwaEZyb21DaGFyQ29kZShwVW5pY29kZXNbal0pOw0KLSAgICAgICAgICAgICAgICAgICAgaW50IGNoYXJfd2lkdGggPSBwRm9udC0+R2V0R2x5cGhXaWR0aChnbHlwaF9pbmRleCk7DQotICAgICAgICAgICAgICAgICAgICBwV2lkdGhzLT5BZGRJbnRlZ2VyKGNoYXJfd2lkdGgpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHBFbmNvZGluZ0RpY3QtPlNldEF0KEZYX0JTVFJDKCJEaWZmZXJlbmNlcyIpLCBwQXJyYXkpOw0KLSAgICAgICAgICAgICAgICBBZGRJbmRpcmVjdE9iamVjdChwRW5jb2RpbmdEaWN0KTsNCi0gICAgICAgICAgICAgICAgcEJhc2VEaWN0LT5TZXRBdFJlZmVyZW5jZShGWF9CU1RSQygiRW5jb2RpbmciKSwgdGhpcywgcEVuY29kaW5nRGljdCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBGb250LT5Jc0JvbGQoKSAmJiBwRm9udC0+SXNJdGFsaWMoKSkgew0KLSAgICAgICAgICAgIGJhc2Vmb250ICs9ICIsQm9sZEl0YWxpYyI7DQotICAgICAgICB9IGVsc2UgaWYgKHBGb250LT5Jc0JvbGQoKSkgew0KLSAgICAgICAgICAgIGJhc2Vmb250ICs9ICIsQm9sZCI7DQotICAgICAgICB9IGVsc2UgaWYgKHBGb250LT5Jc0l0YWxpYygpKSB7DQotICAgICAgICAgICAgYmFzZWZvbnQgKz0gIixJdGFsaWMiOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcEJhc2VEaWN0LT5TZXRBdE5hbWUoIlN1YnR5cGUiLCAiVHJ1ZVR5cGUiKTsNCi0gICAgICAgIHBCYXNlRGljdC0+U2V0QXROYW1lKCJCYXNlRm9udCIsIGJhc2Vmb250KTsNCi0gICAgICAgIHBCYXNlRGljdC0+U2V0QXROdW1iZXIoIkZpcnN0Q2hhciIsIDMyKTsNCi0gICAgICAgIHBCYXNlRGljdC0+U2V0QXROdW1iZXIoIkxhc3RDaGFyIiwgMjU1KTsNCi0gICAgICAgIHBCYXNlRGljdC0+U2V0QXQoIldpZHRocyIsIHBXaWR0aHMpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZmxhZ3MgfD0gUERGRk9OVF9OT05TWU1CT0xJQzsNCi0gICAgICAgIHBGb250RGljdCA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyBjbWFwOw0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgb3JkZXJpbmc7DQotICAgICAgICBpbnQgc3VwcGxlbWVudDsNCi0gICAgICAgIENQREZfQXJyYXkqIHBXaWR0aEFycmF5ID0gRlhfTkVXIENQREZfQXJyYXk7DQotICAgICAgICBzd2l0Y2ggKGNoYXJzZXQpIHsNCi0gICAgICAgICAgICBjYXNlIEZYRk9OVF9DSElORVNFQklHNV9DSEFSU0VUOg0KLSAgICAgICAgICAgICAgICBjbWFwID0gYlZlcnQgPyAiRVRlbm1zLUI1LVYiIDogIkVUZW5tcy1CNS1IIjsNCi0gICAgICAgICAgICAgICAgb3JkZXJpbmcgPSAiQ05TMSI7DQotICAgICAgICAgICAgICAgIHN1cHBsZW1lbnQgPSA0Ow0KLSAgICAgICAgICAgICAgICBwV2lkdGhBcnJheS0+QWRkSW50ZWdlcigxKTsNCi0gICAgICAgICAgICAgICAgX0luc2VydFdpZHRoQXJyYXkxKHBGb250LCBwRW5jb2RpbmcsIDB4MjAsIDB4N2UsIHBXaWR0aEFycmF5KTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSBGWEZPTlRfR0IyMzEyX0NIQVJTRVQ6DQotICAgICAgICAgICAgICAgIGNtYXAgPSBiVmVydCA/ICJHQkstRVVDLVYiIDogIkdCSy1FVUMtSCI7DQotICAgICAgICAgICAgICAgIG9yZGVyaW5nID0gIkdCMSIsIHN1cHBsZW1lbnQgPSAyOw0KLSAgICAgICAgICAgICAgICBwV2lkdGhBcnJheS0+QWRkSW50ZWdlcig3NzE2KTsNCi0gICAgICAgICAgICAgICAgX0luc2VydFdpZHRoQXJyYXkxKHBGb250LCBwRW5jb2RpbmcsIDB4MjAsIDB4MjAsIHBXaWR0aEFycmF5KTsNCi0gICAgICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoODE0KTsNCi0gICAgICAgICAgICAgICAgX0luc2VydFdpZHRoQXJyYXkxKHBGb250LCBwRW5jb2RpbmcsIDB4MjEsIDB4N2UsIHBXaWR0aEFycmF5KTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSBGWEZPTlRfSEFOR0VVTF9DSEFSU0VUOg0KLSAgICAgICAgICAgICAgICBjbWFwID0gYlZlcnQgPyAiS1NDbXMtVUhDLVYiIDogIktTQ21zLVVIQy1IIjsNCi0gICAgICAgICAgICAgICAgb3JkZXJpbmcgPSAiS29yZWExIjsNCi0gICAgICAgICAgICAgICAgc3VwcGxlbWVudCA9IDI7DQotICAgICAgICAgICAgICAgIHBXaWR0aEFycmF5LT5BZGRJbnRlZ2VyKDEpOw0KLSAgICAgICAgICAgICAgICBfSW5zZXJ0V2lkdGhBcnJheTEocEZvbnQsIHBFbmNvZGluZywgMHgyMCwgMHg3ZSwgcFdpZHRoQXJyYXkpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIEZYRk9OVF9TSElGVEpJU19DSEFSU0VUOg0KLSAgICAgICAgICAgICAgICBjbWFwID0gYlZlcnQgPyAiOTBtcy1SS1NKLVYiIDogIjkwbXMtUktTSi1IIjsNCi0gICAgICAgICAgICAgICAgb3JkZXJpbmcgPSAiSmFwYW4xIjsNCi0gICAgICAgICAgICAgICAgc3VwcGxlbWVudCA9IDU7DQotICAgICAgICAgICAgICAgIHBXaWR0aEFycmF5LT5BZGRJbnRlZ2VyKDIzMSk7DQotICAgICAgICAgICAgICAgIF9JbnNlcnRXaWR0aEFycmF5MShwRm9udCwgcEVuY29kaW5nLCAweDIwLCAweDdkLCBwV2lkdGhBcnJheSk7DQotICAgICAgICAgICAgICAgIHBXaWR0aEFycmF5LT5BZGRJbnRlZ2VyKDMyNik7DQotICAgICAgICAgICAgICAgIF9JbnNlcnRXaWR0aEFycmF5MShwRm9udCwgcEVuY29kaW5nLCAweGEwLCAweGEwLCBwV2lkdGhBcnJheSk7DQotICAgICAgICAgICAgICAgIHBXaWR0aEFycmF5LT5BZGRJbnRlZ2VyKDMyNyk7DQotICAgICAgICAgICAgICAgIF9JbnNlcnRXaWR0aEFycmF5MShwRm9udCwgcEVuY29kaW5nLCAweGExLCAweGRmLCBwV2lkdGhBcnJheSk7DQotICAgICAgICAgICAgICAgIHBXaWR0aEFycmF5LT5BZGRJbnRlZ2VyKDYzMSk7DQotICAgICAgICAgICAgICAgIF9JbnNlcnRXaWR0aEFycmF5MShwRm9udCwgcEVuY29kaW5nLCAweDdlLCAweDdlLCBwV2lkdGhBcnJheSk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcEJhc2VEaWN0LT5TZXRBdE5hbWUoIlN1YnR5cGUiLCAiVHlwZTAiKTsNCi0gICAgICAgIHBCYXNlRGljdC0+U2V0QXROYW1lKCJCYXNlRm9udCIsIGJhc2Vmb250KTsNCi0gICAgICAgIHBCYXNlRGljdC0+U2V0QXROYW1lKCJFbmNvZGluZyIsIGNtYXApOw0KLSAgICAgICAgcEZvbnREaWN0LT5TZXRBdCgiVyIsIHBXaWR0aEFycmF5KTsNCi0gICAgICAgIHBGb250RGljdC0+U2V0QXROYW1lKCJUeXBlIiwgIkZvbnQiKTsNCi0gICAgICAgIHBGb250RGljdC0+U2V0QXROYW1lKCJTdWJ0eXBlIiwgIkNJREZvbnRUeXBlMiIpOw0KLSAgICAgICAgcEZvbnREaWN0LT5TZXRBdE5hbWUoIkJhc2VGb250IiwgYmFzZWZvbnQpOw0KLSAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwQ0lEU3lzSW5mbyA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7DQotICAgICAgICBwQ0lEU3lzSW5mby0+U2V0QXRTdHJpbmcoIlJlZ2lzdHJ5IiwgIkFkb2JlIik7DQotICAgICAgICBwQ0lEU3lzSW5mby0+U2V0QXRTdHJpbmcoIk9yZGVyaW5nIiwgb3JkZXJpbmcpOw0KLSAgICAgICAgcENJRFN5c0luZm8tPlNldEF0SW50ZWdlcigiU3VwcGxlbWVudCIsIHN1cHBsZW1lbnQpOw0KLSAgICAgICAgcEZvbnREaWN0LT5TZXRBdCgiQ0lEU3lzdGVtSW5mbyIsIHBDSURTeXNJbmZvKTsNCi0gICAgICAgIENQREZfQXJyYXkqIHBBcnJheSA9IEZYX05FVyBDUERGX0FycmF5Ow0KLSAgICAgICAgcEJhc2VEaWN0LT5TZXRBdCgiRGVzY2VuZGFudEZvbnRzIiwgcEFycmF5KTsNCi0gICAgICAgIEFkZEluZGlyZWN0T2JqZWN0KHBGb250RGljdCk7DQotICAgICAgICBwQXJyYXktPkFkZFJlZmVyZW5jZSh0aGlzLCBwRm9udERpY3QpOw0KLSAgICB9DQotICAgIEFkZEluZGlyZWN0T2JqZWN0KHBCYXNlRGljdCk7DQotICAgIENQREZfRGljdGlvbmFyeSogcEZvbnREZXNjID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsNCi0gICAgcEZvbnREZXNjLT5TZXRBdE5hbWUoIlR5cGUiLCAiRm9udERlc2NyaXB0b3IiKTsNCi0gICAgcEZvbnREZXNjLT5TZXRBdE5hbWUoIkZvbnROYW1lIiwgYmFzZWZvbnQpOw0KLSAgICBwRm9udERlc2MtPlNldEF0SW50ZWdlcigiRmxhZ3MiLCBmbGFncyk7DQotICAgIHBGb250RGVzYy0+U2V0QXRJbnRlZ2VyKCJJdGFsaWNBbmdsZSIsIHBGb250LT5tX3BTdWJzdEZvbnQgPyBwRm9udC0+bV9wU3Vic3RGb250LT5tX0l0YWxpY0FuZ2xlIDogMCk7DQotICAgIHBGb250RGVzYy0+U2V0QXRJbnRlZ2VyKCJBc2NlbnQiLCBwRm9udC0+R2V0QXNjZW50KCkpOw0KLSAgICBwRm9udERlc2MtPlNldEF0SW50ZWdlcigiRGVzY2VudCIsIHBGb250LT5HZXREZXNjZW50KCkpOw0KLSAgICBGWF9SRUNUIGJib3g7DQotICAgIHBGb250LT5HZXRCQm94KGJib3gpOw0KLSAgICBDUERGX0FycmF5KiBwQkJveCA9IEZYX05FVyBDUERGX0FycmF5Ow0KLSAgICBwQkJveC0+QWRkSW50ZWdlcihiYm94LmxlZnQpOw0KLSAgICBwQkJveC0+QWRkSW50ZWdlcihiYm94LmJvdHRvbSk7DQotICAgIHBCQm94LT5BZGRJbnRlZ2VyKGJib3gucmlnaHQpOw0KLSAgICBwQkJveC0+QWRkSW50ZWdlcihiYm94LnRvcCk7DQotICAgIHBGb250RGVzYy0+U2V0QXQoIkZvbnRCQm94IiwgcEJCb3gpOw0KLSAgICBGWF9JTlQzMiBuU3RlbVYgPSAwOw0KLSAgICBpZiAocEZvbnQtPm1fcFN1YnN0Rm9udCkgew0KLSAgICAgICAgblN0ZW1WID0gcEZvbnQtPm1fcFN1YnN0Rm9udC0+bV9XZWlnaHQgLyA1Ow0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgc3RhdGljIGNvbnN0IEZYX0NIQVIgc3RlbV9jaGFyc1tdID0geydpJywgJ0knLCAnIScsICcxJ307DQotICAgICAgICBjb25zdCBzaXplX3QgY291bnQgPSBzaXplb2Yoc3RlbV9jaGFycykgLyBzaXplb2Yoc3RlbV9jaGFyc1swXSk7DQotICAgICAgICBGWF9EV09SRCBnbHlwaCA9IHBFbmNvZGluZy0+R2x5cGhGcm9tQ2hhckNvZGUoc3RlbV9jaGFyc1swXSk7DQotICAgICAgICBuU3RlbVYgPSBwRm9udC0+R2V0R2x5cGhXaWR0aChnbHlwaCk7DQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGNvdW50OyBpKyspIHsNCi0gICAgICAgICAgICBnbHlwaCA9IHBFbmNvZGluZy0+R2x5cGhGcm9tQ2hhckNvZGUoc3RlbV9jaGFyc1tpXSk7DQotICAgICAgICAgICAgaW50IHdpZHRoID0gcEZvbnQtPkdldEdseXBoV2lkdGgoZ2x5cGgpOw0KLSAgICAgICAgICAgIGlmICh3aWR0aCA+IDAgJiYgd2lkdGggPCBuU3RlbVYpIHsNCi0gICAgICAgICAgICAgICAgblN0ZW1WID0gd2lkdGg7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChwRW5jb2RpbmcpIHsNCi0gICAgICAgIGRlbGV0ZSBwRW5jb2Rpbmc7DQotICAgIH0NCi0gICAgcEZvbnREZXNjLT5TZXRBdEludGVnZXIoIlN0ZW1WIiwgblN0ZW1WKTsNCi0gICAgQWRkSW5kaXJlY3RPYmplY3QocEZvbnREZXNjKTsNCi0gICAgcEZvbnREaWN0LT5TZXRBdFJlZmVyZW5jZSgiRm9udERlc2NyaXB0b3IiLCB0aGlzLCBwRm9udERlc2MpOw0KLSAgICByZXR1cm4gTG9hZEZvbnQocEJhc2VEaWN0KTsNCi19DQotc3RhdGljIENQREZfU3RyZWFtKiBHZXRGb3JtU3RyZWFtKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfT2JqZWN0KiBwUmVzT2JqKQ0KLXsNCi0gICAgaWYgKHBSZXNPYmotPkdldFR5cGUoKSAhPSBQREZPQkpfUkVGRVJFTkNFKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDUERGX1JlZmVyZW5jZSogcFJlZiA9IChDUERGX1JlZmVyZW5jZSopcFJlc09iajsNCi0gICAgRlhfQk9PTCBiRm9ybTsNCi0gICAgaWYgKHBEb2MtPklzRm9ybVN0cmVhbShwUmVmLT5HZXRSZWZPYmpOdW0oKSwgYkZvcm0pICYmICFiRm9ybSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcFJlc09iaiA9IHBSZWYtPkdldERpcmVjdCgpOw0KLSAgICBpZiAocFJlc09iai0+R2V0VHlwZSgpICE9IFBERk9CSl9TVFJFQU0pIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfU3RyZWFtKiBwWE9iamVjdCA9IChDUERGX1N0cmVhbSopcFJlc09iajsNCi0gICAgaWYgKHBYT2JqZWN0LT5HZXREaWN0KCktPkdldFN0cmluZyhGWF9CU1RSQygiU3VidHlwZSIpKSAhPSBGWF9CU1RSQygiRm9ybSIpKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gcFhPYmplY3Q7DQotfQ0KLXN0YXRpYyBpbnQgSW5zZXJ0RGVsZXRlUERGUGFnZShDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0RpY3Rpb25hcnkqIHBQYWdlcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5QYWdlc1RvR28sIENQREZfRGljdGlvbmFyeSogcFBhZ2UsIEZYX0JPT0wgYkluc2VydCwgQ0ZYX1B0ckFycmF5JiBzdGFja0xpc3QpDQotew0KLSAgICBDUERGX0FycmF5KiBwS2lkTGlzdCA9IHBQYWdlcy0+R2V0QXJyYXkoIktpZHMiKTsNCi0gICAgaWYgKCFwS2lkTGlzdCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIGludCBuS2lkcyA9IHBLaWRMaXN0LT5HZXRDb3VudCgpOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5LaWRzOyBpICsrKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBLaWQgPSBwS2lkTGlzdC0+R2V0RGljdChpKTsNCi0gICAgICAgIGlmIChwS2lkLT5HZXRTdHJpbmcoIlR5cGUiKSA9PSBGWF9CU1RSQygiUGFnZSIpKSB7DQotICAgICAgICAgICAgaWYgKG5QYWdlc1RvR28gPT0gMCkgew0KLSAgICAgICAgICAgICAgICBpZiAoYkluc2VydCkgew0KLSAgICAgICAgICAgICAgICAgICAgcEtpZExpc3QtPkluc2VydEF0KGksIENQREZfUmVmZXJlbmNlOjpDcmVhdGUocERvYywgcFBhZ2UtPkdldE9iak51bSgpKSk7DQotICAgICAgICAgICAgICAgICAgICBwUGFnZS0+U2V0QXRSZWZlcmVuY2UoIlBhcmVudCIsIHBEb2MsIHBQYWdlcy0+R2V0T2JqTnVtKCkpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgcEtpZExpc3QtPlJlbW92ZUF0KGkpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHBQYWdlcy0+U2V0QXRJbnRlZ2VyKCJDb3VudCIsIHBQYWdlcy0+R2V0SW50ZWdlcigiQ291bnQiKSArIChiSW5zZXJ0ID8gMSA6IC0xKSk7DQotICAgICAgICAgICAgICAgIHJldHVybiAxOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBuUGFnZXNUb0dvIC0tOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpbnQgblBhZ2VzID0gcEtpZC0+R2V0SW50ZWdlcigiQ291bnQiKTsNCi0gICAgICAgICAgICBpZiAoblBhZ2VzVG9HbyA8IG5QYWdlcykgew0KLSAgICAgICAgICAgICAgICBpbnQgc3RhY2tDb3VudCA9IHN0YWNrTGlzdC5HZXRTaXplKCk7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc3RhY2tDb3VudDsgKytqKSB7DQotICAgICAgICAgICAgICAgICAgICBpZiAocEtpZCA9PSBzdGFja0xpc3Rbal0pIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgc3RhY2tMaXN0LkFkZChwS2lkKTsNCi0gICAgICAgICAgICAgICAgaWYgKEluc2VydERlbGV0ZVBERlBhZ2UocERvYywgcEtpZCwgblBhZ2VzVG9HbywgcFBhZ2UsIGJJbnNlcnQsIHN0YWNrTGlzdCkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgc3RhY2tMaXN0LlJlbW92ZUF0KHN0YWNrQ291bnQpOw0KLSAgICAgICAgICAgICAgICBwUGFnZXMtPlNldEF0SW50ZWdlcigiQ291bnQiLCBwUGFnZXMtPkdldEludGVnZXIoIkNvdW50IikgKyAoYkluc2VydCA/IDEgOiAtMSkpOw0KLSAgICAgICAgICAgICAgICByZXR1cm4gMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgblBhZ2VzVG9HbyAtPSBuUGFnZXM7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIDA7DQotfQ0KLXN0YXRpYyBpbnQgSW5zZXJ0TmV3UGFnZShDUERGX0RvY3VtZW50KiBwRG9jLCBpbnQgaVBhZ2UsIENQREZfRGljdGlvbmFyeSogcFBhZ2VEaWN0LCBDRlhfRFdvcmRBcnJheSAmcGFnZUxpc3QpDQotew0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBSb290ID0gcERvYy0+R2V0Um9vdCgpOw0KLSAgICBpZiAoIXBSb290KSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZXMgPSBwUm9vdC0+R2V0RGljdChGWF9CU1RSQygiUGFnZXMiKSk7DQotICAgIGlmICghcFBhZ2VzKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgaW50IG5QYWdlcyA9IHBEb2MtPkdldFBhZ2VDb3VudCgpOw0KLSAgICBpZiAoaVBhZ2UgPCAwIHx8IGlQYWdlID4gblBhZ2VzKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgaWYgKGlQYWdlID09IG5QYWdlcykgew0KLSAgICAgICAgQ1BERl9BcnJheSogcFBhZ2VzTGlzdCA9IHBQYWdlcy0+R2V0QXJyYXkoRlhfQlNUUkMoIktpZHMiKSk7DQotICAgICAgICBpZiAoIXBQYWdlc0xpc3QpIHsNCi0gICAgICAgICAgICBwUGFnZXNMaXN0ID0gRlhfTkVXIENQREZfQXJyYXk7DQotICAgICAgICAgICAgcFBhZ2VzLT5TZXRBdChGWF9CU1RSQygiS2lkcyIpLCBwUGFnZXNMaXN0KTsNCi0gICAgICAgIH0NCi0gICAgICAgIHBQYWdlc0xpc3QtPkFkZChwUGFnZURpY3QsIHBEb2MpOw0KLSAgICAgICAgcFBhZ2VzLT5TZXRBdEludGVnZXIoRlhfQlNUUkMoIkNvdW50IiksIG5QYWdlcyArIDEpOw0KLSAgICAgICAgcFBhZ2VEaWN0LT5TZXRBdFJlZmVyZW5jZShGWF9CU1RSQygiUGFyZW50IiksIHBEb2MsIHBQYWdlcy0+R2V0T2JqTnVtKCkpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgQ0ZYX1B0ckFycmF5IHN0YWNrOw0KLSAgICAgICAgc3RhY2suQWRkKHBQYWdlcyk7DQotICAgICAgICBpZiAoSW5zZXJ0RGVsZXRlUERGUGFnZShwRG9jLCBwUGFnZXMsIGlQYWdlLCBwUGFnZURpY3QsIFRSVUUsIHN0YWNrKSA8IDApIHsNCi0gICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcGFnZUxpc3QuSW5zZXJ0QXQoaVBhZ2UsIHBQYWdlRGljdC0+R2V0T2JqTnVtKCkpOw0KLSAgICByZXR1cm4gaVBhZ2U7DQotfQ0KLUNQREZfRGljdGlvbmFyeSogQ1BERl9Eb2N1bWVudDo6Q3JlYXRlTmV3UGFnZShpbnQgaVBhZ2UpDQotew0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsNCi0gICAgcERpY3QtPlNldEF0TmFtZSgiVHlwZSIsICJQYWdlIik7DQotICAgIEZYX0RXT1JEIGR3T2JqTnVtID0gQWRkSW5kaXJlY3RPYmplY3QocERpY3QpOw0KLSAgICBpZiAoSW5zZXJ0TmV3UGFnZSh0aGlzLCBpUGFnZSwgcERpY3QsIG1fUGFnZUxpc3QpIDwgMCkgew0KLSAgICAgICAgUmVsZWFzZUluZGlyZWN0T2JqZWN0KGR3T2JqTnVtKTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiBwRGljdDsNCi19DQotaW50IF9QREZfR2V0U3RhbmRhcmRGb250TmFtZShDRlhfQnl0ZVN0cmluZyYgbmFtZSk7DQotQ1BERl9Gb250KiBDUERGX0RvY3VtZW50OjpBZGRTdGFuZGFyZEZvbnQoRlhfTFBDU1RSIGZvbnQsIENQREZfRm9udEVuY29kaW5nKiBwRW5jb2RpbmcpDQotew0KLSAgICBDRlhfQnl0ZVN0cmluZyBuYW1lKGZvbnQsIC0xKTsNCi0gICAgaWYgKF9QREZfR2V0U3RhbmRhcmRGb250TmFtZShuYW1lKSA8IDApIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiBHZXRQYWdlRGF0YSgpLT5HZXRTdGFuZGFyZEZvbnQobmFtZSwgcEVuY29kaW5nKTsNCi19DQotdm9pZCBDUERGX0RvY3VtZW50OjpEZWxldGVQYWdlKGludCBpUGFnZSkNCi17DQotICAgIENQREZfRGljdGlvbmFyeSogcFJvb3QgPSBHZXRSb290KCk7DQotICAgIGlmIChwUm9vdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZXMgPSBwUm9vdC0+R2V0RGljdCgiUGFnZXMiKTsNCi0gICAgaWYgKHBQYWdlcyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaW50IG5QYWdlcyA9IHBQYWdlcy0+R2V0SW50ZWdlcigiQ291bnQiKTsNCi0gICAgaWYgKGlQYWdlIDwgMCB8fCBpUGFnZSA+PSBuUGFnZXMpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDRlhfUHRyQXJyYXkgc3RhY2s7DQotICAgIHN0YWNrLkFkZChwUGFnZXMpOw0KLSAgICBpZiAoSW5zZXJ0RGVsZXRlUERGUGFnZSh0aGlzLCBwUGFnZXMsIGlQYWdlLCBOVUxMLCBGQUxTRSwgc3RhY2spIDwgMCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fUGFnZUxpc3QuUmVtb3ZlQXQoaVBhZ2UpOw0KLX0NCi1DUERGX09iamVjdCogRlBERkFQSV9HZXRQYWdlQXR0cihDUERGX0RpY3Rpb25hcnkqIHBQYWdlRGljdCwgRlhfQlNUUiBuYW1lKTsNCi12b2lkIEZQREZBUElfRmxhdFBhZ2VBdHRyKENQREZfRGljdGlvbmFyeSogcFBhZ2VEaWN0LCBGWF9CU1RSIG5hbWUpDQotew0KLSAgICBpZiAocFBhZ2VEaWN0LT5LZXlFeGlzdChuYW1lKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfT2JqZWN0KiBwT2JqID0gRlBERkFQSV9HZXRQYWdlQXR0cihwUGFnZURpY3QsIG5hbWUpOw0KLSAgICBpZiAocE9iaikgew0KLSAgICAgICAgcFBhZ2VEaWN0LT5TZXRBdChuYW1lLCBwT2JqLT5DbG9uZSgpKTsNCi0gICAgfQ0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX21vZHVsZS5oIgorI2luY2x1ZGUgIi4uL2ZwZGZfcGFnZS9wYWdlaW50LmgiCisjaW5jbHVkZSA8bGltaXRzLmg+CitDUERGX0RvY3VtZW50OjpDUERGX0RvY3VtZW50KCkgOiBDUERGX0luZGlyZWN0T2JqZWN0cyhOVUxMKQoreworICAgIG1fcFJvb3REaWN0ID0gTlVMTDsKKyAgICBtX3BJbmZvRGljdCA9IE5VTEw7CisgICAgbV9iTGluZWFyaXplZCA9IEZBTFNFOworICAgIG1fZHdGaXJzdFBhZ2VObyA9IDA7CisgICAgbV9kd0ZpcnN0UGFnZU9iak51bSA9IDA7CisgICAgbV9wRG9jUGFnZSA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UGFnZU1vZHVsZSgpLT5DcmVhdGVEb2NEYXRhKHRoaXMpOworICAgIG1fcERvY1JlbmRlciA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UmVuZGVyTW9kdWxlKCktPkNyZWF0ZURvY0RhdGEodGhpcyk7Cit9Cit2b2lkIENQREZfRG9jdW1lbnQ6OkNyZWF0ZU5ld0RvYygpCit7CisgICAgQVNTRVJUKG1fcFJvb3REaWN0ID09IE5VTEwgJiYgbV9wSW5mb0RpY3QgPT0gTlVMTCk7CisgICAgbV9wUm9vdERpY3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5OworICAgIG1fcFJvb3REaWN0LT5TZXRBdE5hbWUoIlR5cGUiLCAiQ2F0YWxvZyIpOworICAgIGludCBvYmpudW0gPSBBZGRJbmRpcmVjdE9iamVjdChtX3BSb290RGljdCk7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZXMgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5OworICAgIHBQYWdlcy0+U2V0QXROYW1lKCJUeXBlIiwgIlBhZ2VzIik7CisgICAgcFBhZ2VzLT5TZXRBdE51bWJlcigiQ291bnQiLCAwKTsKKyAgICBwUGFnZXMtPlNldEF0KCJLaWRzIiwgRlhfTkVXIENQREZfQXJyYXkpOworICAgIG9iam51bSA9IEFkZEluZGlyZWN0T2JqZWN0KHBQYWdlcyk7CisgICAgbV9wUm9vdERpY3QtPlNldEF0UmVmZXJlbmNlKCJQYWdlcyIsIHRoaXMsIG9iam51bSk7CisgICAgbV9wSW5mb0RpY3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5OworICAgIEFkZEluZGlyZWN0T2JqZWN0KG1fcEluZm9EaWN0KTsKK30KK3N0YXRpYyBjb25zdCBGWF9XQ0hBUiBnX0ZYX0NQODc0VW5pY29kZXNbMTI4XSA9IHsKKyAgICAweDIwQUMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMDI2LCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MjAxOCwgMHgyMDE5LCAweDIwMUMsIDB4MjAxRCwgMHgyMDIyLCAweDIwMTMsIDB4MjAxNCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwQTAsIDB4MEUwMSwgMHgwRTAyLCAweDBFMDMsIDB4MEUwNCwgMHgwRTA1LCAweDBFMDYsIDB4MEUwNywKKyAgICAweDBFMDgsIDB4MEUwOSwgMHgwRTBBLCAweDBFMEIsIDB4MEUwQywgMHgwRTBELCAweDBFMEUsIDB4MEUwRiwKKyAgICAweDBFMTAsIDB4MEUxMSwgMHgwRTEyLCAweDBFMTMsIDB4MEUxNCwgMHgwRTE1LCAweDBFMTYsIDB4MEUxNywKKyAgICAweDBFMTgsIDB4MEUxOSwgMHgwRTFBLCAweDBFMUIsIDB4MEUxQywgMHgwRTFELCAweDBFMUUsIDB4MEUxRiwKKyAgICAweDBFMjAsIDB4MEUyMSwgMHgwRTIyLCAweDBFMjMsIDB4MEUyNCwgMHgwRTI1LCAweDBFMjYsIDB4MEUyNywKKyAgICAweDBFMjgsIDB4MEUyOSwgMHgwRTJBLCAweDBFMkIsIDB4MEUyQywgMHgwRTJELCAweDBFMkUsIDB4MEUyRiwKKyAgICAweDBFMzAsIDB4MEUzMSwgMHgwRTMyLCAweDBFMzMsIDB4MEUzNCwgMHgwRTM1LCAweDBFMzYsIDB4MEUzNywKKyAgICAweDBFMzgsIDB4MEUzOSwgMHgwRTNBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MEUzRiwKKyAgICAweDBFNDAsIDB4MEU0MSwgMHgwRTQyLCAweDBFNDMsIDB4MEU0NCwgMHgwRTQ1LCAweDBFNDYsIDB4MEU0NywKKyAgICAweDBFNDgsIDB4MEU0OSwgMHgwRTRBLCAweDBFNEIsIDB4MEU0QywgMHgwRTRELCAweDBFNEUsIDB4MEU0RiwKKyAgICAweDBFNTAsIDB4MEU1MSwgMHgwRTUyLCAweDBFNTMsIDB4MEU1NCwgMHgwRTU1LCAweDBFNTYsIDB4MEU1NywKKyAgICAweDBFNTgsIDB4MEU1OSwgMHgwRTVBLCAweDBFNUIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKK307CitzdGF0aWMgY29uc3QgRlhfV0NIQVIgZ19GWF9DUDEyNTBVbmljb2Rlc1sxMjhdID0geworICAgIDB4MjBBQywgMHgwMDAwLCAweDIwMUEsIDB4MDAwMCwgMHgyMDFFLCAweDIwMjYsIDB4MjAyMCwgMHgyMDIxLAorICAgIDB4MDAwMCwgMHgyMDMwLCAweDAxNjAsIDB4MjAzOSwgMHgwMTVBLCAweDAxNjQsIDB4MDE3RCwgMHgwMTc5LAorICAgIDB4MDAwMCwgMHgyMDE4LCAweDIwMTksIDB4MjAxQywgMHgyMDFELCAweDIwMjIsIDB4MjAxMywgMHgyMDE0LAorICAgIDB4MDAwMCwgMHgyMTIyLCAweDAxNjEsIDB4MjAzQSwgMHgwMTVCLCAweDAxNjUsIDB4MDE3RSwgMHgwMTdBLAorICAgIDB4MDBBMCwgMHgwMkM3LCAweDAyRDgsIDB4MDE0MSwgMHgwMEE0LCAweDAxMDQsIDB4MDBBNiwgMHgwMEE3LAorICAgIDB4MDBBOCwgMHgwMEE5LCAweDAxNUUsIDB4MDBBQiwgMHgwMEFDLCAweDAwQUQsIDB4MDBBRSwgMHgwMTdCLAorICAgIDB4MDBCMCwgMHgwMEIxLCAweDAyREIsIDB4MDE0MiwgMHgwMEI0LCAweDAwQjUsIDB4MDBCNiwgMHgwMEI3LAorICAgIDB4MDBCOCwgMHgwMTA1LCAweDAxNUYsIDB4MDBCQiwgMHgwMTNELCAweDAyREQsIDB4MDEzRSwgMHgwMTdDLAorICAgIDB4MDE1NCwgMHgwMEMxLCAweDAwQzIsIDB4MDEwMiwgMHgwMEM0LCAweDAxMzksIDB4MDEwNiwgMHgwMEM3LAorICAgIDB4MDEwQywgMHgwMEM5LCAweDAxMTgsIDB4MDBDQiwgMHgwMTFBLCAweDAwQ0QsIDB4MDBDRSwgMHgwMTBFLAorICAgIDB4MDExMCwgMHgwMTQzLCAweDAxNDcsIDB4MDBEMywgMHgwMEQ0LCAweDAxNTAsIDB4MDBENiwgMHgwMEQ3LAorICAgIDB4MDE1OCwgMHgwMTZFLCAweDAwREEsIDB4MDE3MCwgMHgwMERDLCAweDAwREQsIDB4MDE2MiwgMHgwMERGLAorICAgIDB4MDE1NSwgMHgwMEUxLCAweDAwRTIsIDB4MDEwMywgMHgwMEU0LCAweDAxM0EsIDB4MDEwNywgMHgwMEU3LAorICAgIDB4MDEwRCwgMHgwMEU5LCAweDAxMTksIDB4MDBFQiwgMHgwMTFCLCAweDAwRUQsIDB4MDBFRSwgMHgwMTBGLAorICAgIDB4MDExMSwgMHgwMTQ0LCAweDAxNDgsIDB4MDBGMywgMHgwMEY0LCAweDAxNTEsIDB4MDBGNiwgMHgwMEY3LAorICAgIDB4MDE1OSwgMHgwMTZGLCAweDAwRkEsIDB4MDE3MSwgMHgwMEZDLCAweDAwRkQsIDB4MDE2MywgMHgwMkQ5LAorfTsKK3N0YXRpYyBjb25zdCBGWF9XQ0hBUiBnX0ZYX0NQMTI1MVVuaWNvZGVzWzEyOF0gPSB7CisgICAgMHgwNDAyLCAweDA0MDMsIDB4MjAxQSwgMHgwNDUzLCAweDIwMUUsIDB4MjAyNiwgMHgyMDIwLCAweDIwMjEsCisgICAgMHgyMEFDLCAweDIwMzAsIDB4MDQwOSwgMHgyMDM5LCAweDA0MEEsIDB4MDQwQywgMHgwNDBCLCAweDA0MEYsCisgICAgMHgwNDUyLCAweDIwMTgsIDB4MjAxOSwgMHgyMDFDLCAweDIwMUQsIDB4MjAyMiwgMHgyMDEzLCAweDIwMTQsCisgICAgMHgwMDAwLCAweDIxMjIsIDB4MDQ1OSwgMHgyMDNBLCAweDA0NUEsIDB4MDQ1QywgMHgwNDVCLCAweDA0NUYsCisgICAgMHgwMEEwLCAweDA0MEUsIDB4MDQ1RSwgMHgwNDA4LCAweDAwQTQsIDB4MDQ5MCwgMHgwMEE2LCAweDAwQTcsCisgICAgMHgwNDAxLCAweDAwQTksIDB4MDQwNCwgMHgwMEFCLCAweDAwQUMsIDB4MDBBRCwgMHgwMEFFLCAweDA0MDcsCisgICAgMHgwMEIwLCAweDAwQjEsIDB4MDQwNiwgMHgwNDU2LCAweDA0OTEsIDB4MDBCNSwgMHgwMEI2LCAweDAwQjcsCisgICAgMHgwNDUxLCAweDIxMTYsIDB4MDQ1NCwgMHgwMEJCLCAweDA0NTgsIDB4MDQwNSwgMHgwNDU1LCAweDA0NTcsCisgICAgMHgwNDEwLCAweDA0MTEsIDB4MDQxMiwgMHgwNDEzLCAweDA0MTQsIDB4MDQxNSwgMHgwNDE2LCAweDA0MTcsCisgICAgMHgwNDE4LCAweDA0MTksIDB4MDQxQSwgMHgwNDFCLCAweDA0MUMsIDB4MDQxRCwgMHgwNDFFLCAweDA0MUYsCisgICAgMHgwNDIwLCAweDA0MjEsIDB4MDQyMiwgMHgwNDIzLCAweDA0MjQsIDB4MDQyNSwgMHgwNDI2LCAweDA0MjcsCisgICAgMHgwNDI4LCAweDA0MjksIDB4MDQyQSwgMHgwNDJCLCAweDA0MkMsIDB4MDQyRCwgMHgwNDJFLCAweDA0MkYsCisgICAgMHgwNDMwLCAweDA0MzEsIDB4MDQzMiwgMHgwNDMzLCAweDA0MzQsIDB4MDQzNSwgMHgwNDM2LCAweDA0MzcsCisgICAgMHgwNDM4LCAweDA0MzksIDB4MDQzQSwgMHgwNDNCLCAweDA0M0MsIDB4MDQzRCwgMHgwNDNFLCAweDA0M0YsCisgICAgMHgwNDQwLCAweDA0NDEsIDB4MDQ0MiwgMHgwNDQzLCAweDA0NDQsIDB4MDQ0NSwgMHgwNDQ2LCAweDA0NDcsCisgICAgMHgwNDQ4LCAweDA0NDksIDB4MDQ0QSwgMHgwNDRCLCAweDA0NEMsIDB4MDQ0RCwgMHgwNDRFLCAweDA0NEYsCit9Oworc3RhdGljIGNvbnN0IEZYX1dDSEFSIGdfRlhfQ1AxMjUzVW5pY29kZXNbMTI4XSA9IHsKKyAgICAweDIwQUMsIDB4MDAwMCwgMHgyMDFBLCAweDAxOTIsIDB4MjAxRSwgMHgyMDI2LCAweDIwMjAsIDB4MjAyMSwKKyAgICAweDAwMDAsIDB4MjAzMCwgMHgwMDAwLCAweDIwMzksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MjAxOCwgMHgyMDE5LCAweDIwMUMsIDB4MjAxRCwgMHgyMDIyLCAweDIwMTMsIDB4MjAxNCwKKyAgICAweDAwMDAsIDB4MjEyMiwgMHgwMDAwLCAweDIwM0EsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwQTAsIDB4MDM4NSwgMHgwMzg2LCAweDAwQTMsIDB4MDBBNCwgMHgwMEE1LCAweDAwQTYsIDB4MDBBNywKKyAgICAweDAwQTgsIDB4MDBBOSwgMHgwMDAwLCAweDAwQUIsIDB4MDBBQywgMHgwMEFELCAweDAwQUUsIDB4MjAxNSwKKyAgICAweDAwQjAsIDB4MDBCMSwgMHgwMEIyLCAweDAwQjMsIDB4MDM4NCwgMHgwMEI1LCAweDAwQjYsIDB4MDBCNywKKyAgICAweDAzODgsIDB4MDM4OSwgMHgwMzhBLCAweDAwQkIsIDB4MDM4QywgMHgwMEJELCAweDAzOEUsIDB4MDM4RiwKKyAgICAweDAzOTAsIDB4MDM5MSwgMHgwMzkyLCAweDAzOTMsIDB4MDM5NCwgMHgwMzk1LCAweDAzOTYsIDB4MDM5NywKKyAgICAweDAzOTgsIDB4MDM5OSwgMHgwMzlBLCAweDAzOUIsIDB4MDM5QywgMHgwMzlELCAweDAzOUUsIDB4MDM5RiwKKyAgICAweDAzQTAsIDB4MDNBMSwgMHgwMDAwLCAweDAzQTMsIDB4MDNBNCwgMHgwM0E1LCAweDAzQTYsIDB4MDNBNywKKyAgICAweDAzQTgsIDB4MDNBOSwgMHgwM0FBLCAweDAzQUIsIDB4MDNBQywgMHgwM0FELCAweDAzQUUsIDB4MDNBRiwKKyAgICAweDAzQjAsIDB4MDNCMSwgMHgwM0IyLCAweDAzQjMsIDB4MDNCNCwgMHgwM0I1LCAweDAzQjYsIDB4MDNCNywKKyAgICAweDAzQjgsIDB4MDNCOSwgMHgwM0JBLCAweDAzQkIsIDB4MDNCQywgMHgwM0JELCAweDAzQkUsIDB4MDNCRiwKKyAgICAweDAzQzAsIDB4MDNDMSwgMHgwM0MyLCAweDAzQzMsIDB4MDNDNCwgMHgwM0M1LCAweDAzQzYsIDB4MDNDNywKKyAgICAweDAzQzgsIDB4MDNDOSwgMHgwM0NBLCAweDAzQ0IsIDB4MDNDQywgMHgwM0NELCAweDAzQ0UsIDB4MDAwMCwKK307CitzdGF0aWMgY29uc3QgRlhfV0NIQVIgZ19GWF9DUDEyNTRVbmljb2Rlc1sxMjhdID0geworICAgIDB4MjBBQywgMHgwMDAwLCAweDIwMUEsIDB4MDE5MiwgMHgyMDFFLCAweDIwMjYsIDB4MjAyMCwgMHgyMDIxLAorICAgIDB4MDJDNiwgMHgyMDMwLCAweDAxNjAsIDB4MjAzOSwgMHgwMTUyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgyMDE4LCAweDIwMTksIDB4MjAxQywgMHgyMDFELCAweDIwMjIsIDB4MjAxMywgMHgyMDE0LAorICAgIDB4MDJEQywgMHgyMTIyLCAweDAxNjEsIDB4MjAzQSwgMHgwMTUzLCAweDAwMDAsIDB4MDAwMCwgMHgwMTc4LAorICAgIDB4MDBBMCwgMHgwMEExLCAweDAwQTIsIDB4MDBBMywgMHgwMEE0LCAweDAwQTUsIDB4MDBBNiwgMHgwMEE3LAorICAgIDB4MDBBOCwgMHgwMEE5LCAweDAwQUEsIDB4MDBBQiwgMHgwMEFDLCAweDAwQUQsIDB4MDBBRSwgMHgwMEFGLAorICAgIDB4MDBCMCwgMHgwMEIxLCAweDAwQjIsIDB4MDBCMywgMHgwMEI0LCAweDAwQjUsIDB4MDBCNiwgMHgwMEI3LAorICAgIDB4MDBCOCwgMHgwMEI5LCAweDAwQkEsIDB4MDBCQiwgMHgwMEJDLCAweDAwQkQsIDB4MDBCRSwgMHgwMEJGLAorICAgIDB4MDBDMCwgMHgwMEMxLCAweDAwQzIsIDB4MDBDMywgMHgwMEM0LCAweDAwQzUsIDB4MDBDNiwgMHgwMEM3LAorICAgIDB4MDBDOCwgMHgwMEM5LCAweDAwQ0EsIDB4MDBDQiwgMHgwMENDLCAweDAwQ0QsIDB4MDBDRSwgMHgwMENGLAorICAgIDB4MDExRSwgMHgwMEQxLCAweDAwRDIsIDB4MDBEMywgMHgwMEQ0LCAweDAwRDUsIDB4MDBENiwgMHgwMEQ3LAorICAgIDB4MDBEOCwgMHgwMEQ5LCAweDAwREEsIDB4MDBEQiwgMHgwMERDLCAweDAxMzAsIDB4MDE1RSwgMHgwMERGLAorICAgIDB4MDBFMCwgMHgwMEUxLCAweDAwRTIsIDB4MDBFMywgMHgwMEU0LCAweDAwRTUsIDB4MDBFNiwgMHgwMEU3LAorICAgIDB4MDBFOCwgMHgwMEU5LCAweDAwRUEsIDB4MDBFQiwgMHgwMEVDLCAweDAwRUQsIDB4MDBFRSwgMHgwMEVGLAorICAgIDB4MDExRiwgMHgwMEYxLCAweDAwRjIsIDB4MDBGMywgMHgwMEY0LCAweDAwRjUsIDB4MDBGNiwgMHgwMEY3LAorICAgIDB4MDBGOCwgMHgwMEY5LCAweDAwRkEsIDB4MDBGQiwgMHgwMEZDLCAweDAxMzEsIDB4MDE1RiwgMHgwMEZGLAorfTsKK3N0YXRpYyBjb25zdCBGWF9XQ0hBUiBnX0ZYX0NQMTI1NVVuaWNvZGVzWzEyOF0gPSB7CisgICAgMHgyMEFDLCAweDAwMDAsIDB4MjAxQSwgMHgwMTkyLCAweDIwMUUsIDB4MjAyNiwgMHgyMDIwLCAweDIwMjEsCisgICAgMHgwMkM2LCAweDIwMzAsIDB4MDAwMCwgMHgyMDM5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDIwMTgsIDB4MjAxOSwgMHgyMDFDLCAweDIwMUQsIDB4MjAyMiwgMHgyMDEzLCAweDIwMTQsCisgICAgMHgwMkRDLCAweDIxMjIsIDB4MDAwMCwgMHgyMDNBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMEEwLCAweDAwQTEsIDB4MDBBMiwgMHgwMEEzLCAweDIwQUEsIDB4MDBBNSwgMHgwMEE2LCAweDAwQTcsCisgICAgMHgwMEE4LCAweDAwQTksIDB4MDBENywgMHgwMEFCLCAweDAwQUMsIDB4MDBBRCwgMHgwMEFFLCAweDAwQUYsCisgICAgMHgwMEIwLCAweDAwQjEsIDB4MDBCMiwgMHgwMEIzLCAweDAwQjQsIDB4MDBCNSwgMHgwMEI2LCAweDAwQjcsCisgICAgMHgwMEI4LCAweDAwQjksIDB4MDBGNywgMHgwMEJCLCAweDAwQkMsIDB4MDBCRCwgMHgwMEJFLCAweDAwQkYsCisgICAgMHgwNUIwLCAweDA1QjEsIDB4MDVCMiwgMHgwNUIzLCAweDA1QjQsIDB4MDVCNSwgMHgwNUI2LCAweDA1QjcsCisgICAgMHgwNUI4LCAweDA1QjksIDB4MDAwMCwgMHgwNUJCLCAweDA1QkMsIDB4MDVCRCwgMHgwNUJFLCAweDA1QkYsCisgICAgMHgwNUMwLCAweDA1QzEsIDB4MDVDMiwgMHgwNUMzLCAweDA1RjAsIDB4MDVGMSwgMHgwNUYyLCAweDA1RjMsCisgICAgMHgwNUY0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwNUQwLCAweDA1RDEsIDB4MDVEMiwgMHgwNUQzLCAweDA1RDQsIDB4MDVENSwgMHgwNUQ2LCAweDA1RDcsCisgICAgMHgwNUQ4LCAweDA1RDksIDB4MDVEQSwgMHgwNURCLCAweDA1REMsIDB4MDVERCwgMHgwNURFLCAweDA1REYsCisgICAgMHgwNUUwLCAweDA1RTEsIDB4MDVFMiwgMHgwNUUzLCAweDA1RTQsIDB4MDVFNSwgMHgwNUU2LCAweDA1RTcsCisgICAgMHgwNUU4LCAweDA1RTksIDB4MDVFQSwgMHgwMDAwLCAweDAwMDAsIDB4MjAwRSwgMHgyMDBGLCAweDAwMDAsCit9Oworc3RhdGljIGNvbnN0IEZYX1dDSEFSIGdfRlhfQ1AxMjU2VW5pY29kZXNbMTI4XSA9IHsKKyAgICAweDIwQUMsIDB4MDY3RSwgMHgyMDFBLCAweDAxOTIsIDB4MjAxRSwgMHgyMDI2LCAweDIwMjAsIDB4MjAyMSwKKyAgICAweDAyQzYsIDB4MjAzMCwgMHgwNjc5LCAweDIwMzksIDB4MDE1MiwgMHgwNjg2LCAweDA2OTgsIDB4MDY4OCwKKyAgICAweDA2QUYsIDB4MjAxOCwgMHgyMDE5LCAweDIwMUMsIDB4MjAxRCwgMHgyMDIyLCAweDIwMTMsIDB4MjAxNCwKKyAgICAweDA2QTksIDB4MjEyMiwgMHgwNjkxLCAweDIwM0EsIDB4MDE1MywgMHgyMDBDLCAweDIwMEQsIDB4MDZCQSwKKyAgICAweDAwQTAsIDB4MDYwQywgMHgwMEEyLCAweDAwQTMsIDB4MDBBNCwgMHgwMEE1LCAweDAwQTYsIDB4MDBBNywKKyAgICAweDAwQTgsIDB4MDBBOSwgMHgwNkJFLCAweDAwQUIsIDB4MDBBQywgMHgwMEFELCAweDAwQUUsIDB4MDBBRiwKKyAgICAweDAwQjAsIDB4MDBCMSwgMHgwMEIyLCAweDAwQjMsIDB4MDBCNCwgMHgwMEI1LCAweDAwQjYsIDB4MDBCNywKKyAgICAweDAwQjgsIDB4MDBCOSwgMHgwNjFCLCAweDAwQkIsIDB4MDBCQywgMHgwMEJELCAweDAwQkUsIDB4MDYxRiwKKyAgICAweDA2QzEsIDB4MDYyMSwgMHgwNjIyLCAweDA2MjMsIDB4MDYyNCwgMHgwNjI1LCAweDA2MjYsIDB4MDYyNywKKyAgICAweDA2MjgsIDB4MDYyOSwgMHgwNjJBLCAweDA2MkIsIDB4MDYyQywgMHgwNjJELCAweDA2MkUsIDB4MDYyRiwKKyAgICAweDA2MzAsIDB4MDYzMSwgMHgwNjMyLCAweDA2MzMsIDB4MDYzNCwgMHgwNjM1LCAweDA2MzYsIDB4MDBENywKKyAgICAweDA2MzcsIDB4MDYzOCwgMHgwNjM5LCAweDA2M0EsIDB4MDY0MCwgMHgwNjQxLCAweDA2NDIsIDB4MDY0MywKKyAgICAweDAwRTAsIDB4MDY0NCwgMHgwMEUyLCAweDA2NDUsIDB4MDY0NiwgMHgwNjQ3LCAweDA2NDgsIDB4MDBFNywKKyAgICAweDAwRTgsIDB4MDBFOSwgMHgwMEVBLCAweDAwRUIsIDB4MDY0OSwgMHgwNjRBLCAweDAwRUUsIDB4MDBFRiwKKyAgICAweDA2NEIsIDB4MDY0QywgMHgwNjRELCAweDA2NEUsIDB4MDBGNCwgMHgwNjRGLCAweDA2NTAsIDB4MDBGNywKKyAgICAweDA2NTEsIDB4MDBGOSwgMHgwNjUyLCAweDAwRkIsIDB4MDBGQywgMHgyMDBFLCAweDIwMEYsIDB4MDZEMiwKK307CitzdGF0aWMgY29uc3QgRlhfV0NIQVIgZ19GWF9DUDEyNTdVbmljb2Rlc1sxMjhdID0geworICAgIDB4MjBBQywgMHgwMDAwLCAweDIwMUEsIDB4MDAwMCwgMHgyMDFFLCAweDIwMjYsIDB4MjAyMCwgMHgyMDIxLAorICAgIDB4MDAwMCwgMHgyMDMwLCAweDAwMDAsIDB4MjAzOSwgMHgwMDAwLCAweDAwQTgsIDB4MDJDNywgMHgwMEI4LAorICAgIDB4MDAwMCwgMHgyMDE4LCAweDIwMTksIDB4MjAxQywgMHgyMDFELCAweDIwMjIsIDB4MjAxMywgMHgyMDE0LAorICAgIDB4MDAwMCwgMHgyMTIyLCAweDAwMDAsIDB4MjAzQSwgMHgwMDAwLCAweDAwQUYsIDB4MDJEQiwgMHgwMDAwLAorICAgIDB4MDBBMCwgMHgwMDAwLCAweDAwQTIsIDB4MDBBMywgMHgwMEE0LCAweDAwMDAsIDB4MDBBNiwgMHgwMEE3LAorICAgIDB4MDBEOCwgMHgwMEE5LCAweDAxNTYsIDB4MDBBQiwgMHgwMEFDLCAweDAwQUQsIDB4MDBBRSwgMHgwMEM2LAorICAgIDB4MDBCMCwgMHgwMEIxLCAweDAwQjIsIDB4MDBCMywgMHgwMEI0LCAweDAwQjUsIDB4MDBCNiwgMHgwMEI3LAorICAgIDB4MDBGOCwgMHgwMEI5LCAweDAxNTcsIDB4MDBCQiwgMHgwMEJDLCAweDAwQkQsIDB4MDBCRSwgMHgwMEU2LAorICAgIDB4MDEwNCwgMHgwMTJFLCAweDAxMDAsIDB4MDEwNiwgMHgwMEM0LCAweDAwQzUsIDB4MDExOCwgMHgwMTEyLAorICAgIDB4MDEwQywgMHgwMEM5LCAweDAxNzksIDB4MDExNiwgMHgwMTIyLCAweDAxMzYsIDB4MDEyQSwgMHgwMTNCLAorICAgIDB4MDE2MCwgMHgwMTQzLCAweDAxNDUsIDB4MDBEMywgMHgwMTRDLCAweDAwRDUsIDB4MDBENiwgMHgwMEQ3LAorICAgIDB4MDE3MiwgMHgwMTQxLCAweDAxNUEsIDB4MDE2QSwgMHgwMERDLCAweDAxN0IsIDB4MDE3RCwgMHgwMERGLAorICAgIDB4MDEwNSwgMHgwMTJGLCAweDAxMDEsIDB4MDEwNywgMHgwMEU0LCAweDAwRTUsIDB4MDExOSwgMHgwMTEzLAorICAgIDB4MDEwRCwgMHgwMEU5LCAweDAxN0EsIDB4MDExNywgMHgwMTIzLCAweDAxMzcsIDB4MDEyQiwgMHgwMTNDLAorICAgIDB4MDE2MSwgMHgwMTQ0LCAweDAxNDYsIDB4MDBGMywgMHgwMTRELCAweDAwRjUsIDB4MDBGNiwgMHgwMEY3LAorICAgIDB4MDE3MywgMHgwMTQyLCAweDAxNUIsIDB4MDE2QiwgMHgwMEZDLCAweDAxN0MsIDB4MDE3RSwgMHgwMkQ5LAorfTsKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBGWF9CWVRFCQltX0NoYXJzZXQ7CisgICAgY29uc3QgRlhfV0NIQVIqCW1fcFVuaWNvZGVzOworfSBGWF9DaGFyc2V0VW5pY29kZXM7Citjb25zdCBGWF9DaGFyc2V0VW5pY29kZXMgZ19GWF9DaGFyc2V0VW5pY29kZXNbXSA9IHsKKyAgICB7IEZYRk9OVF9USEFJX0NIQVJTRVQsIGdfRlhfQ1A4NzRVbmljb2RlcyB9LAorICAgIHsgRlhGT05UX0VBU1RFVVJPUEVfQ0hBUlNFVCwgZ19GWF9DUDEyNTBVbmljb2RlcyB9LAorICAgIHsgRlhGT05UX1JVU1NJQU5fQ0hBUlNFVCwgZ19GWF9DUDEyNTFVbmljb2RlcyB9LAorICAgIHsgRlhGT05UX0dSRUVLX0NIQVJTRVQsIGdfRlhfQ1AxMjUzVW5pY29kZXMgfSwKKyAgICB7IEZYRk9OVF9UVVJLSVNIX0NIQVJTRVQsIGdfRlhfQ1AxMjU0VW5pY29kZXMgfSwKKyAgICB7IEZYRk9OVF9IRUJSRVdfQ0hBUlNFVCwgZ19GWF9DUDEyNTVVbmljb2RlcyB9LAorICAgIHsgRlhGT05UX0FSQUJJQ19DSEFSU0VULCBnX0ZYX0NQMTI1NlVuaWNvZGVzIH0sCisgICAgeyBGWEZPTlRfQkFMVElDX0NIQVJTRVQsIGdfRlhfQ1AxMjU3VW5pY29kZXMgfSwKK307CisjaWYgKF9GWF9PU18gPT0gX0ZYX1dJTjMyX0RFU0tUT1BfIHx8IF9GWF9PU18gPT0gX0ZYX1dJTjMyX01PQklMRV8gfHwgX0ZYX09TXyA9PSBfRlhfV0lONjRfKQorc3RhdGljIHZvaWQgX0luc2VydFdpZHRoQXJyYXkoSERDIGhEQywgaW50IHN0YXJ0LCBpbnQgZW5kLCBDUERGX0FycmF5KiBwV2lkdGhBcnJheSkKK3sKKyAgICBpbnQgc2l6ZSA9IGVuZCAtIHN0YXJ0ICsgMTsKKyAgICBpbnQqIHdpZHRocyA9IEZYX0FsbG9jKGludCwgc2l6ZSk7CisgICAgR2V0Q2hhcldpZHRoKGhEQywgc3RhcnQsIGVuZCwgd2lkdGhzKTsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAxOyBpIDwgc2l6ZTsgaSArKykKKyAgICAgICAgaWYgKHdpZHRoc1tpXSAhPSAqd2lkdGhzKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIGlmIChpID09IHNpemUpIHsKKyAgICAgICAgaW50IGZpcnN0ID0gcFdpZHRoQXJyYXktPkdldEludGVnZXIocFdpZHRoQXJyYXktPkdldENvdW50KCkgLSAxKTsKKyAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoZmlyc3QgKyBzaXplIC0gMSk7CisgICAgICAgIHBXaWR0aEFycmF5LT5BZGRJbnRlZ2VyKCp3aWR0aHMpOworICAgIH0gZWxzZSB7CisgICAgICAgIENQREZfQXJyYXkqIHBXaWR0aEFycmF5MSA9IEZYX05FVyBDUERGX0FycmF5OworICAgICAgICBwV2lkdGhBcnJheS0+QWRkKHBXaWR0aEFycmF5MSk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpICsrKSB7CisgICAgICAgICAgICBwV2lkdGhBcnJheTEtPkFkZEludGVnZXIod2lkdGhzW2ldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBGWF9GcmVlKHdpZHRocyk7Cit9CitDUERGX0ZvbnQqIENQREZfRG9jdW1lbnQ6OkFkZFdpbmRvd3NGb250KExPR0ZPTlRXKiBwTG9nRm9udCwgRlhfQk9PTCBiVmVydCwgRlhfQk9PTCBiVHJhbnNsYXRlTmFtZSkKK3sKKyAgICBMT0dGT05UQSBsZmE7CisgICAgRlhTWVNfbWVtY3B5MzIoJmxmYSwgcExvZ0ZvbnQsIChjaGFyKilsZmEubGZGYWNlTmFtZSAtIChjaGFyKikmbGZhKTsKKyAgICBDRlhfQnl0ZVN0cmluZyBmYWNlID0gQ0ZYX0J5dGVTdHJpbmc6OkZyb21Vbmljb2RlKHBMb2dGb250LT5sZkZhY2VOYW1lKTsKKyAgICBpZiAoZmFjZS5HZXRMZW5ndGgoKSA+PSBMRl9GQUNFU0laRSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRlhTWVNfc3RyY3B5KGxmYS5sZkZhY2VOYW1lLCAoRlhfTFBDU1RSKWZhY2UpOworICAgIHJldHVybiBBZGRXaW5kb3dzRm9udCgmbGZhLCBiVmVydCwgYlRyYW5zbGF0ZU5hbWUpOworfQorZXh0ZXJuIENGWF9CeXRlU3RyaW5nIF9GUERGX0dldE5hbWVGcm9tVFQoRlhfTFBDQllURSBuYW1lX3RhYmxlLCBGWF9EV09SRCBuYW1lKTsKK0NGWF9CeXRlU3RyaW5nIF9GUERGX0dldFBTTmFtZUZyb21UVChIREMgaERDKQoreworICAgIENGWF9CeXRlU3RyaW5nIHJlc3VsdDsKKyAgICBEV09SRCBzaXplID0gOjpHZXRGb250RGF0YShoREMsICdlbWFuJywgMCwgTlVMTCwgMCk7CisgICAgaWYgKHNpemUgIT0gR0RJX0VSUk9SKSB7CisgICAgICAgIExQQllURSBidWZmZXIgPSBGWF9BbGxvYyhCWVRFLCBzaXplKTsKKyAgICAgICAgOjpHZXRGb250RGF0YShoREMsICdlbWFuJywgMCwgYnVmZmVyLCBzaXplKTsKKyAgICAgICAgcmVzdWx0ID0gX0ZQREZfR2V0TmFtZUZyb21UVChidWZmZXIsIDYpOworICAgICAgICBGWF9GcmVlKGJ1ZmZlcik7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CitDUERGX0ZvbnQqIENQREZfRG9jdW1lbnQ6OkFkZFdpbmRvd3NGb250KExPR0ZPTlRBKiBwTG9nRm9udCwgRlhfQk9PTCBiVmVydCwgRlhfQk9PTCBiVHJhbnNsYXRlTmFtZSkKK3sKKyAgICBwTG9nRm9udC0+bGZIZWlnaHQgPSAtMTAwMDsKKyAgICBwTG9nRm9udC0+bGZXaWR0aCA9IDA7CisgICAgSEdESU9CSiBoRm9udCA9IENyZWF0ZUZvbnRJbmRpcmVjdEEocExvZ0ZvbnQpOworICAgIEhEQyBoREMgPSBDcmVhdGVDb21wYXRpYmxlREMoTlVMTCk7CisgICAgaEZvbnQgPSBTZWxlY3RPYmplY3QoaERDLCBoRm9udCk7CisgICAgaW50IHRtX3NpemUgPSBHZXRPdXRsaW5lVGV4dE1ldHJpY3MoaERDLCAwLCBOVUxMKTsKKyAgICBpZiAodG1fc2l6ZSA9PSAwKSB7CisgICAgICAgIGhGb250ID0gU2VsZWN0T2JqZWN0KGhEQywgaEZvbnQpOworICAgICAgICBEZWxldGVPYmplY3QoaEZvbnQpOworICAgICAgICBEZWxldGVEQyhoREMpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgTFBCWVRFIHRtX2J1ZiA9IEZYX0FsbG9jKEJZVEUsIHRtX3NpemUpOworICAgIE9VVExJTkVURVhUTUVUUklDKiBwdG0gPSAoT1VUTElORVRFWFRNRVRSSUMqKXRtX2J1ZjsKKyAgICBHZXRPdXRsaW5lVGV4dE1ldHJpY3MoaERDLCB0bV9zaXplLCBwdG0pOworICAgIGludCBmbGFncyA9IDAsIGl0YWxpY2FuZ2xlLCBhc2NlbmQsIGRlc2NlbmQsIGNhcGhlaWdodCwgYmJveFs0XTsKKyAgICBpZiAocExvZ0ZvbnQtPmxmSXRhbGljKSB7CisgICAgICAgIGZsYWdzIHw9IFBERkZPTlRfSVRBTElDOworICAgIH0KKyAgICBpZiAoKHBMb2dGb250LT5sZlBpdGNoQW5kRmFtaWx5ICYgMykgPT0gRklYRURfUElUQ0gpIHsKKyAgICAgICAgZmxhZ3MgfD0gUERGRk9OVF9GSVhFRFBJVENIOworICAgIH0KKyAgICBpZiAoKHBMb2dGb250LT5sZlBpdGNoQW5kRmFtaWx5ICYgMHhmOCkgPT0gRkZfUk9NQU4pIHsKKyAgICAgICAgZmxhZ3MgfD0gUERGRk9OVF9TRVJJRjsKKyAgICB9CisgICAgaWYgKChwTG9nRm9udC0+bGZQaXRjaEFuZEZhbWlseSAmIDB4ZjgpID09IEZGX1NDUklQVCkgeworICAgICAgICBmbGFncyB8PSBQREZGT05UX1NDUklQVDsKKyAgICB9CisgICAgRlhfQk9PTCBiQ0pLID0gcExvZ0ZvbnQtPmxmQ2hhclNldCA9PSBDSElORVNFQklHNV9DSEFSU0VUIHx8IHBMb2dGb250LT5sZkNoYXJTZXQgPT0gR0IyMzEyX0NIQVJTRVQgfHwKKyAgICAgICAgICAgICAgICAgICBwTG9nRm9udC0+bGZDaGFyU2V0ID09IEhBTkdFVUxfQ0hBUlNFVCB8fCBwTG9nRm9udC0+bGZDaGFyU2V0ID09IFNISUZUSklTX0NIQVJTRVQ7CisgICAgQ0ZYX0J5dGVTdHJpbmcgYmFzZWZvbnQ7CisgICAgaWYgKGJUcmFuc2xhdGVOYW1lICYmIGJDSkspIHsKKyAgICAgICAgYmFzZWZvbnQgPSBfRlBERl9HZXRQU05hbWVGcm9tVFQoaERDKTsKKyAgICB9CisgICAgaWYgKGJhc2Vmb250LklzRW1wdHkoKSkgeworICAgICAgICBiYXNlZm9udCA9IHBMb2dGb250LT5sZkZhY2VOYW1lOworICAgIH0KKyAgICBpdGFsaWNhbmdsZSA9IHB0bS0+b3RtSXRhbGljQW5nbGUgLyAxMDsKKyAgICBhc2NlbmQgPSBwdG0tPm90bXJjRm9udEJveC50b3A7CisgICAgZGVzY2VuZCA9IHB0bS0+b3RtcmNGb250Qm94LmJvdHRvbTsKKyAgICBjYXBoZWlnaHQgPSBwdG0tPm90bXNDYXBFbUhlaWdodDsKKyAgICBiYm94WzBdID0gcHRtLT5vdG1yY0ZvbnRCb3gubGVmdDsKKyAgICBiYm94WzFdID0gcHRtLT5vdG1yY0ZvbnRCb3guYm90dG9tOworICAgIGJib3hbMl0gPSBwdG0tPm90bXJjRm9udEJveC5yaWdodDsKKyAgICBiYm94WzNdID0gcHRtLT5vdG1yY0ZvbnRCb3gudG9wOworICAgIEZYX0ZyZWUodG1fYnVmKTsKKyAgICBiYXNlZm9udC5SZXBsYWNlKCIgIiwgIiIpOworICAgIENQREZfRGljdGlvbmFyeSogcEJhc2VEaWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsKKyAgICBwQmFzZURpY3QtPlNldEF0TmFtZSgiVHlwZSIsICJGb250Iik7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9udERpY3QgPSBwQmFzZURpY3Q7CisgICAgaWYgKCFiQ0pLKSB7CisgICAgICAgIGlmIChwTG9nRm9udC0+bGZDaGFyU2V0ID09IEFOU0lfQ0hBUlNFVCB8fCBwTG9nRm9udC0+bGZDaGFyU2V0ID09IERFRkFVTFRfQ0hBUlNFVCB8fAorICAgICAgICAgICAgICAgIHBMb2dGb250LT5sZkNoYXJTZXQgPT0gU1lNQk9MX0NIQVJTRVQpIHsKKyAgICAgICAgICAgIGlmIChwTG9nRm9udC0+bGZDaGFyU2V0ID09IFNZTUJPTF9DSEFSU0VUKSB7CisgICAgICAgICAgICAgICAgZmxhZ3MgfD0gUERGRk9OVF9TWU1CT0xJQzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZmxhZ3MgfD0gUERGRk9OVF9OT05TWU1CT0xJQzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBCYXNlRGljdC0+U2V0QXROYW1lKEZYX0JTVFJDKCJFbmNvZGluZyIpLCAiV2luQW5zaUVuY29kaW5nIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmbGFncyB8PSBQREZGT05UX05PTlNZTUJPTElDOworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIGdfRlhfQ2hhcnNldFVuaWNvZGVzIC8gc2l6ZW9mKEZYX0NoYXJzZXRVbmljb2Rlcyk7IGkgKyspCisgICAgICAgICAgICAgICAgaWYgKGdfRlhfQ2hhcnNldFVuaWNvZGVzW2ldLm1fQ2hhcnNldCA9PSBwTG9nRm9udC0+bGZDaGFyU2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpIDwgc2l6ZW9mIGdfRlhfQ2hhcnNldFVuaWNvZGVzIC8gc2l6ZW9mKEZYX0NoYXJzZXRVbmljb2RlcykpIHsKKyAgICAgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBFbmNvZGluZyA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7CisgICAgICAgICAgICAgICAgcEVuY29kaW5nLT5TZXRBdE5hbWUoRlhfQlNUUkMoIkJhc2VFbmNvZGluZyIpLCAiV2luQW5zaUVuY29kaW5nIik7CisgICAgICAgICAgICAgICAgQ1BERl9BcnJheSogcEFycmF5ID0gRlhfTkVXIENQREZfQXJyYXk7CisgICAgICAgICAgICAgICAgcEFycmF5LT5BZGRJbnRlZ2VyKDEyOCk7CisgICAgICAgICAgICAgICAgY29uc3QgRlhfV0NIQVIqIHBVbmljb2RlcyA9IGdfRlhfQ2hhcnNldFVuaWNvZGVzW2ldLm1fcFVuaWNvZGVzOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMTI4OyBqICsrKSB7CisgICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIG5hbWUgPSBQREZfQWRvYmVOYW1lRnJvbVVuaWNvZGUocFVuaWNvZGVzW2pdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwQXJyYXktPkFkZE5hbWUoRlhfQlNUUkMoIi5ub3RkZWYiKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwQXJyYXktPkFkZE5hbWUobmFtZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcEVuY29kaW5nLT5TZXRBdChGWF9CU1RSQygiRGlmZmVyZW5jZXMiKSwgcEFycmF5KTsKKyAgICAgICAgICAgICAgICBBZGRJbmRpcmVjdE9iamVjdChwRW5jb2RpbmcpOworICAgICAgICAgICAgICAgIHBCYXNlRGljdC0+U2V0QXRSZWZlcmVuY2UoRlhfQlNUUkMoIkVuY29kaW5nIiksIHRoaXMsIHBFbmNvZGluZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBMb2dGb250LT5sZldlaWdodCA+IEZXX01FRElVTSAmJiBwTG9nRm9udC0+bGZJdGFsaWMpIHsKKyAgICAgICAgICAgIGJhc2Vmb250ICs9ICIsQm9sZEl0YWxpYyI7CisgICAgICAgIH0gZWxzZSBpZiAocExvZ0ZvbnQtPmxmV2VpZ2h0ID4gRldfTUVESVVNKSB7CisgICAgICAgICAgICBiYXNlZm9udCArPSAiLEJvbGQiOworICAgICAgICB9IGVsc2UgaWYgKHBMb2dGb250LT5sZkl0YWxpYykgeworICAgICAgICAgICAgYmFzZWZvbnQgKz0gIixJdGFsaWMiOworICAgICAgICB9CisgICAgICAgIHBCYXNlRGljdC0+U2V0QXROYW1lKCJTdWJ0eXBlIiwgIlRydWVUeXBlIik7CisgICAgICAgIHBCYXNlRGljdC0+U2V0QXROYW1lKCJCYXNlRm9udCIsIGJhc2Vmb250KTsKKyAgICAgICAgcEJhc2VEaWN0LT5TZXRBdE51bWJlcigiRmlyc3RDaGFyIiwgMzIpOworICAgICAgICBwQmFzZURpY3QtPlNldEF0TnVtYmVyKCJMYXN0Q2hhciIsIDI1NSk7CisgICAgICAgIGludCBjaGFyX3dpZHRoc1syMjRdOworICAgICAgICBHZXRDaGFyV2lkdGgoaERDLCAzMiwgMjU1LCBjaGFyX3dpZHRocyk7CisgICAgICAgIENQREZfQXJyYXkqIHBXaWR0aHMgPSBGWF9ORVcgQ1BERl9BcnJheTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyMjQ7IGkgKyspIHsKKyAgICAgICAgICAgIHBXaWR0aHMtPkFkZEludGVnZXIoY2hhcl93aWR0aHNbaV0pOworICAgICAgICB9CisgICAgICAgIHBCYXNlRGljdC0+U2V0QXQoIldpZHRocyIsIHBXaWR0aHMpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZsYWdzIHw9IFBERkZPTlRfTk9OU1lNQk9MSUM7CisgICAgICAgIHBGb250RGljdCA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7CisgICAgICAgIENGWF9CeXRlU3RyaW5nIGNtYXA7CisgICAgICAgIENGWF9CeXRlU3RyaW5nIG9yZGVyaW5nOworICAgICAgICBpbnQgc3VwcGxlbWVudDsKKyAgICAgICAgQ1BERl9BcnJheSogcFdpZHRoQXJyYXkgPSBGWF9ORVcgQ1BERl9BcnJheTsKKyAgICAgICAgc3dpdGNoIChwTG9nRm9udC0+bGZDaGFyU2V0KSB7CisgICAgICAgICAgICBjYXNlIENISU5FU0VCSUc1X0NIQVJTRVQ6CisgICAgICAgICAgICAgICAgY21hcCA9IGJWZXJ0ID8gIkVUZW5tcy1CNS1WIiA6ICJFVGVubXMtQjUtSCI7CisgICAgICAgICAgICAgICAgb3JkZXJpbmcgPSAiQ05TMSI7CisgICAgICAgICAgICAgICAgc3VwcGxlbWVudCA9IDQ7CisgICAgICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoMSk7CisgICAgICAgICAgICAgICAgX0luc2VydFdpZHRoQXJyYXkoaERDLCAweDIwLCAweDdlLCBwV2lkdGhBcnJheSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEdCMjMxMl9DSEFSU0VUOgorICAgICAgICAgICAgICAgIGNtYXAgPSBiVmVydCA/ICJHQkstRVVDLVYiIDogIkdCSy1FVUMtSCI7CisgICAgICAgICAgICAgICAgb3JkZXJpbmcgPSAiR0IxIiwgc3VwcGxlbWVudCA9IDI7CisgICAgICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoNzcxNik7CisgICAgICAgICAgICAgICAgX0luc2VydFdpZHRoQXJyYXkoaERDLCAweDIwLCAweDIwLCBwV2lkdGhBcnJheSk7CisgICAgICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoODE0KTsKKyAgICAgICAgICAgICAgICBfSW5zZXJ0V2lkdGhBcnJheShoREMsIDB4MjEsIDB4N2UsIHBXaWR0aEFycmF5KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSEFOR0VVTF9DSEFSU0VUOgorICAgICAgICAgICAgICAgIGNtYXAgPSBiVmVydCA/ICJLU0Ntcy1VSEMtViIgOiAiS1NDbXMtVUhDLUgiOworICAgICAgICAgICAgICAgIG9yZGVyaW5nID0gIktvcmVhMSI7CisgICAgICAgICAgICAgICAgc3VwcGxlbWVudCA9IDI7CisgICAgICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoMSk7CisgICAgICAgICAgICAgICAgX0luc2VydFdpZHRoQXJyYXkoaERDLCAweDIwLCAweDdlLCBwV2lkdGhBcnJheSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNISUZUSklTX0NIQVJTRVQ6CisgICAgICAgICAgICAgICAgY21hcCA9IGJWZXJ0ID8gIjkwbXMtUktTSi1WIiA6ICI5MG1zLVJLU0otSCI7CisgICAgICAgICAgICAgICAgb3JkZXJpbmcgPSAiSmFwYW4xIjsKKyAgICAgICAgICAgICAgICBzdXBwbGVtZW50ID0gNTsKKyAgICAgICAgICAgICAgICBwV2lkdGhBcnJheS0+QWRkSW50ZWdlcigyMzEpOworICAgICAgICAgICAgICAgIF9JbnNlcnRXaWR0aEFycmF5KGhEQywgMHgyMCwgMHg3ZCwgcFdpZHRoQXJyYXkpOworICAgICAgICAgICAgICAgIHBXaWR0aEFycmF5LT5BZGRJbnRlZ2VyKDMyNik7CisgICAgICAgICAgICAgICAgX0luc2VydFdpZHRoQXJyYXkoaERDLCAweGEwLCAweGEwLCBwV2lkdGhBcnJheSk7CisgICAgICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoMzI3KTsKKyAgICAgICAgICAgICAgICBfSW5zZXJ0V2lkdGhBcnJheShoREMsIDB4YTEsIDB4ZGYsIHBXaWR0aEFycmF5KTsKKyAgICAgICAgICAgICAgICBwV2lkdGhBcnJheS0+QWRkSW50ZWdlcig2MzEpOworICAgICAgICAgICAgICAgIF9JbnNlcnRXaWR0aEFycmF5KGhEQywgMHg3ZSwgMHg3ZSwgcFdpZHRoQXJyYXkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHBCYXNlRGljdC0+U2V0QXROYW1lKCJTdWJ0eXBlIiwgIlR5cGUwIik7CisgICAgICAgIHBCYXNlRGljdC0+U2V0QXROYW1lKCJCYXNlRm9udCIsIGJhc2Vmb250KTsKKyAgICAgICAgcEJhc2VEaWN0LT5TZXRBdE5hbWUoIkVuY29kaW5nIiwgY21hcCk7CisgICAgICAgIHBGb250RGljdC0+U2V0QXQoIlciLCBwV2lkdGhBcnJheSk7CisgICAgICAgIHBGb250RGljdC0+U2V0QXROYW1lKCJUeXBlIiwgIkZvbnQiKTsKKyAgICAgICAgcEZvbnREaWN0LT5TZXRBdE5hbWUoIlN1YnR5cGUiLCAiQ0lERm9udFR5cGUyIik7CisgICAgICAgIHBGb250RGljdC0+U2V0QXROYW1lKCJCYXNlRm9udCIsIGJhc2Vmb250KTsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwQ0lEU3lzSW5mbyA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7CisgICAgICAgIHBDSURTeXNJbmZvLT5TZXRBdFN0cmluZygiUmVnaXN0cnkiLCAiQWRvYmUiKTsKKyAgICAgICAgcENJRFN5c0luZm8tPlNldEF0U3RyaW5nKCJPcmRlcmluZyIsIG9yZGVyaW5nKTsKKyAgICAgICAgcENJRFN5c0luZm8tPlNldEF0SW50ZWdlcigiU3VwcGxlbWVudCIsIHN1cHBsZW1lbnQpOworICAgICAgICBwRm9udERpY3QtPlNldEF0KCJDSURTeXN0ZW1JbmZvIiwgcENJRFN5c0luZm8pOworICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBGWF9ORVcgQ1BERl9BcnJheTsKKyAgICAgICAgcEJhc2VEaWN0LT5TZXRBdCgiRGVzY2VuZGFudEZvbnRzIiwgcEFycmF5KTsKKyAgICAgICAgQWRkSW5kaXJlY3RPYmplY3QocEZvbnREaWN0KTsKKyAgICAgICAgcEFycmF5LT5BZGRSZWZlcmVuY2UodGhpcywgcEZvbnREaWN0KTsKKyAgICB9CisgICAgQWRkSW5kaXJlY3RPYmplY3QocEJhc2VEaWN0KTsKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBGb250RGVzYyA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7CisgICAgcEZvbnREZXNjLT5TZXRBdE5hbWUoIlR5cGUiLCAiRm9udERlc2NyaXB0b3IiKTsKKyAgICBwRm9udERlc2MtPlNldEF0TmFtZSgiRm9udE5hbWUiLCBiYXNlZm9udCk7CisgICAgcEZvbnREZXNjLT5TZXRBdEludGVnZXIoIkZsYWdzIiwgZmxhZ3MpOworICAgIENQREZfQXJyYXkqIHBCQm94ID0gRlhfTkVXIENQREZfQXJyYXk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpICsrKSB7CisgICAgICAgIHBCQm94LT5BZGRJbnRlZ2VyKGJib3hbaV0pOworICAgIH0KKyAgICBwRm9udERlc2MtPlNldEF0KCJGb250QkJveCIsIHBCQm94KTsKKyAgICBwRm9udERlc2MtPlNldEF0SW50ZWdlcigiSXRhbGljQW5nbGUiLCBpdGFsaWNhbmdsZSk7CisgICAgcEZvbnREZXNjLT5TZXRBdEludGVnZXIoIkFzY2VudCIsIGFzY2VuZCk7CisgICAgcEZvbnREZXNjLT5TZXRBdEludGVnZXIoIkRlc2NlbnQiLCBkZXNjZW5kKTsKKyAgICBwRm9udERlc2MtPlNldEF0SW50ZWdlcigiQ2FwSGVpZ2h0IiwgY2FwaGVpZ2h0KTsKKyAgICBwRm9udERlc2MtPlNldEF0SW50ZWdlcigiU3RlbVYiLCBwTG9nRm9udC0+bGZXZWlnaHQgLyA1KTsKKyAgICBBZGRJbmRpcmVjdE9iamVjdChwRm9udERlc2MpOworICAgIHBGb250RGljdC0+U2V0QXRSZWZlcmVuY2UoIkZvbnREZXNjcmlwdG9yIiwgdGhpcywgcEZvbnREZXNjKTsKKyAgICBoRm9udCA9IFNlbGVjdE9iamVjdChoREMsIGhGb250KTsKKyAgICBEZWxldGVPYmplY3QoaEZvbnQpOworICAgIERlbGV0ZURDKGhEQyk7CisgICAgcmV0dXJuIExvYWRGb250KHBCYXNlRGljdCk7Cit9CisjZW5kaWYKKyNpZiAoX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfKQorRlhfVUlOVDMyIEZYX0dldExhbmdIYXNoQ29kZSggRlhfTFBDU1RSIHBTdHIpCit7CisgICAgRlhTWVNfYXNzZXJ0KCBwU3RyICE9IE5VTEwpOworICAgIEZYX0lOVDMyIGlMZW5ndGggPSBGWFNZU19zdHJsZW4ocFN0cik7CisgICAgRlhfTFBDU1RSIHBTdHJFbmQgPSBwU3RyICsgaUxlbmd0aDsKKyAgICBGWF9VSU5UMzIgdUhhc2hDb2RlID0gMDsKKyAgICB3aGlsZSAoIHBTdHIgPCBwU3RyRW5kKSB7CisgICAgICAgIHVIYXNoQ29kZSA9IDMxICogdUhhc2hDb2RlICsgdG9sb3dlcigqcFN0cisrKTsKKyAgICB9CisgICAgcmV0dXJuIHVIYXNoQ29kZTsKK30KK3N0cnVjdCBGWF9MQU5HMkNTIHsKKyAgICBGWF9EV09SRCAgICB1TGFuZzsKKyAgICBpbnQgICAgICAgICB1Q2hhcnNldDsKK30qRlhfTFBMQU5HMkNTOworc3RhdGljIGNvbnN0IEZYX0xBTkcyQ1MgZ3NfRlhMYW5nMkNoYXJzZXRUYWJsZVtdID0geworICAgIHszMTA5LCAwfSwKKyAgICB7MzEyMSwgMTc4fSwKKyAgICB7MzEyOSwgMTYyfSwKKyAgICB7MzEzOSwgMjA0fSwKKyAgICB7MzE0MSwgMjA0fSwKKyAgICB7MzE2NiwgMH0sCisgICAgezMxODQsIDIzOH0sCisgICAgezMxOTcsIDB9LAorICAgIHszMjAxLCAwfSwKKyAgICB7MzIzOSwgMTYxfSwKKyAgICB7MzI0MSwgMH0sCisgICAgezMyNDYsIDB9LAorICAgIHszMjQ3LCAxODZ9LAorICAgIHszMjQ4LCAwfSwKKyAgICB7MzI1OSwgMTc4fSwKKyAgICB7MzI2NywgMH0sCisgICAgezMyNzMsIDB9LAorICAgIHszMjc2LCAwfSwKKyAgICB7MzMwMSwgMH0sCisgICAgezMzMTAsIDF9LAorICAgIHszMzI1LCAxNzd9LAorICAgIHszMzI5LCAxfSwKKyAgICB7MzMzOCwgMjM4fSwKKyAgICB7MzM0MSwgMjM4fSwKKyAgICB7MzM0NSwgMX0sCisgICAgezMzNTUsIDB9LAorICAgIHszMzcwLCAwfSwKKyAgICB7MzM3MSwgMH0sCisgICAgezMzODMsIDEyOH0sCisgICAgezM0MjQsIDIwNH0sCisgICAgezM0MjcsIDF9LAorICAgIHszNDI4LCAxMjl9LAorICAgIHszNDM2LCAxNzh9LAorICAgIHszNDY0LCAxODZ9LAorICAgIHszNDY2LCAxODZ9LAorICAgIHszNDg2LCAyMDR9LAorICAgIHszNDg3LCAwfSwKKyAgICB7MzQ5MywgMX0sCisgICAgezM0OTQsIDB9LAorICAgIHszNTA4LCAwfSwKKyAgICB7MzUxOCwgMH0sCisgICAgezM1MjAsIDB9LAorICAgIHszNTY5LCAxfSwKKyAgICB7MzU4MCwgMjM4fSwKKyAgICB7MzU4OCwgMH0sCisgICAgezM2NDUsIDIzOH0sCisgICAgezM2NTEsIDIwNH0sCisgICAgezM2NzIsIDIzOH0sCisgICAgezM2NzMsIDIzOH0sCisgICAgezM2NzgsIDIzOH0sCisgICAgezM2NzksIDIzOH0sCisgICAgezM2ODMsIDB9LAorICAgIHszNjg0LCAwfSwKKyAgICB7MzY5MywgMX0sCisgICAgezM2OTcsIDF9LAorICAgIHszNzAwLCAyMjJ9LAorICAgIHszNzEwLCAxNjJ9LAorICAgIHszNzM0LCAyMDR9LAorICAgIHszNzQxLCAxNzh9LAorICAgIHszNzQ5LCAxNjJ9LAorICAgIHszNzYzLCAxNjN9LAorICAgIHszODg2LCAxMzR9LAorICAgIHsxMDU5NDMsIDB9LAorICAgIHsxMDYzNzUsIDF9LAorICAgIHszOTIzNDUxODM3LCAxMzR9LAorICAgIHszOTIzNDUxODM4LCAxMzZ9LAorfTsKK3N0YXRpYyBGWF9XT1JEIEZYX0dldENzRnJvbUxhbmdDb2RlKEZYX1VJTlQzMiB1Q29kZSkKK3sKKyAgICBGWF9JTlQzMiBpU3RhcnQgPSAwOworICAgIEZYX0lOVDMyIGlFbmQgPSBzaXplb2YoZ3NfRlhMYW5nMkNoYXJzZXRUYWJsZSkgLyBzaXplb2YoRlhfTEFORzJDUykgLSAxOworICAgIHdoaWxlIChpU3RhcnQgPD0gaUVuZCkgeworICAgICAgICBGWF9JTlQzMiBpTWlkID0gKGlTdGFydCArIGlFbmQpIC8gMjsKKyAgICAgICAgY29uc3QgRlhfTEFORzJDUyAmY2hhcnNldCA9IGdzX0ZYTGFuZzJDaGFyc2V0VGFibGVbaU1pZF07CisgICAgICAgIGlmICh1Q29kZSA9PSBjaGFyc2V0LnVMYW5nKSB7CisgICAgICAgICAgICByZXR1cm4gY2hhcnNldC51Q2hhcnNldDsKKyAgICAgICAgfSBlbHNlIGlmICh1Q29kZSA8IGNoYXJzZXQudUxhbmcpIHsKKyAgICAgICAgICAgIGlFbmQgPSBpTWlkIC0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlTdGFydCA9IGlNaWQgKyAxOworICAgICAgICB9CisgICAgfTsKKyAgICByZXR1cm4gMDsKK30KK3N0YXRpYyBGWF9XT1JEIEZYX0dldENoYXJzZXRGcm9tTGFuZyhGWF9MUENTVFIgcExhbmcsIEZYX0lOVDMyIGlMZW5ndGgpCit7CisgICAgRlhTWVNfYXNzZXJ0KHBMYW5nKTsKKyAgICBpZiAoaUxlbmd0aCA8IDApIHsKKyAgICAgICAgaUxlbmd0aCA9IEZYU1lTX3N0cmxlbihwTGFuZyk7CisgICAgfQorICAgIEZYX1VJTlQzMiB1SGFzaCA9IEZYX0dldExhbmdIYXNoQ29kZShwTGFuZyk7CisgICAgcmV0dXJuIEZYX0dldENzRnJvbUxhbmdDb2RlKHVIYXNoKTsKK30KK3N0YXRpYyB2b2lkIF9DRlN0cmluZzJDRlhCeXRlU3RyaW5nKENGU3RyaW5nUmVmIHNyYywgQ0ZYX0J5dGVTdHJpbmcgJmRlc3QpCit7CisgICAgU0ludDMyIGxlbiA9ICBDRlN0cmluZ0dldExlbmd0aChzcmMpOworICAgIENGUmFuZ2UgcmFuZ2UgPSBDRlJhbmdlTWFrZSgwLCBsZW4pOworICAgIENGSW5kZXggdXNlZCA9IDA7CisgICAgVUludDgqIHBCdWZmZXIgPSAoVUludDgqKW1hbGxvYyhzaXplb2YoVUludDgpICogKGxlbiArIDEpKTsKKyAgICBGWFNZU19tZW1zZXQzMihwQnVmZmVyLCAwLCBzaXplb2YoVUludDgpICogKGxlbiArIDEpKTsKKyAgICBDRlN0cmluZ0dldEJ5dGVzKHNyYywgcmFuZ2UsIGtDRlN0cmluZ0VuY29kaW5nQVNDSUksIDAsIGZhbHNlLCBwQnVmZmVyLCBsZW4sICZ1c2VkKTsKKyAgICBkZXN0ID0gKEZYX0xQU1RSKXBCdWZmZXI7CisgICAgZnJlZShwQnVmZmVyKTsKK30KK0ZYX0JPT0wgSXNIYXNDaGFyU2V0KENGQXJyYXlSZWYgbGFuZ3VhZ2VzLCBjb25zdCBDRlhfRFdvcmRBcnJheSAmY2hhclNldHMpCit7CisgICAgaW50IGlDb3VudCA9IGNoYXJTZXRzLkdldFNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IENGQXJyYXlHZXRDb3VudChsYW5ndWFnZXMpOyArK2kpIHsKKyAgICAgICAgQ0ZTdHJpbmdSZWYgbGFuZ3VhZ2UgPSAoQ0ZTdHJpbmdSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChsYW5ndWFnZXMsIGkpOworICAgICAgICBGWF9EV09SRCBDaGFyU2V0ID0gRlhfR2V0Q2hhcnNldEZyb21MYW5nKENGU3RyaW5nR2V0Q1N0cmluZ1B0cihsYW5ndWFnZSwga0NGU3RyaW5nRW5jb2RpbmdNYWNSb21hbiksIC0xKTsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpQ291bnQ7ICsraikgeworICAgICAgICAgICAgaWYgKENoYXJTZXQgPT0gY2hhclNldHNbal0pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9Cit2b2lkIEZYX0dldENoYXJXaWR0aChDVEZvbnRSZWYgZm9udCwgVW5pQ2hhciBzdGFydCwgVW5pQ2hhciBlbmQsIGludCogd2lkdGgpCit7CisgICAgQ0dGbG9hdCBzaXplID0gQ1RGb250R2V0U2l6ZShmb250KTsKKyAgICBmb3IgKDsgc3RhcnQgPD0gZW5kOyArK3N0YXJ0KSB7CisgICAgICAgIENHR2x5cGggcEdseXBoID0gMDsKKyAgICAgICAgQ0ZJbmRleCBjb3VudCA9IDE7CisgICAgICAgIENURm9udEdldEdseXBoc0ZvckNoYXJhY3RlcnMoZm9udCwgJnN0YXJ0LCAmcEdseXBoLCBjb3VudCk7CisgICAgICAgIENHU2l6ZSBhZHZhbmNlczsKKyAgICAgICAgQ1RGb250R2V0QWR2YW5jZXNGb3JHbHlwaHMoZm9udCwga0NURm9udERlZmF1bHRPcmllbnRhdGlvbiwgJnBHbHlwaCwgJmFkdmFuY2VzLCAxKTsKKyAgICAgICAgKndpZHRoID0gKGludCkoYWR2YW5jZXMud2lkdGggLyBzaXplICogMTAwMCkgOworICAgICAgICB3aWR0aCsrOworICAgIH0KK30KK3N0YXRpYyB2b2lkIF9JbnNlcnRXaWR0aEFycmF5KENURm9udFJlZiBmb250LCBpbnQgc3RhcnQsIGludCBlbmQsIENQREZfQXJyYXkqIHBXaWR0aEFycmF5KQoreworICAgIGludCBzaXplID0gZW5kIC0gc3RhcnQgKyAxOworICAgIGludCogd2lkdGhzID0gRlhfQWxsb2MoaW50LCBzaXplKTsKKyAgICBGWF9HZXRDaGFyV2lkdGgoZm9udCwgc3RhcnQsIGVuZCwgd2lkdGhzKTsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAxOyBpIDwgc2l6ZTsgaSArKykKKyAgICAgICAgaWYgKHdpZHRoc1tpXSAhPSAqd2lkdGhzKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIGlmIChpID09IHNpemUpIHsKKyAgICAgICAgaW50IGZpcnN0ID0gcFdpZHRoQXJyYXktPkdldEludGVnZXIocFdpZHRoQXJyYXktPkdldENvdW50KCkgLSAxKTsKKyAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoZmlyc3QgKyBzaXplIC0gMSk7CisgICAgICAgIHBXaWR0aEFycmF5LT5BZGRJbnRlZ2VyKCp3aWR0aHMpOworICAgIH0gZWxzZSB7CisgICAgICAgIENQREZfQXJyYXkqIHBXaWR0aEFycmF5MSA9IEZYX05FVyBDUERGX0FycmF5OworICAgICAgICBwV2lkdGhBcnJheS0+QWRkKHBXaWR0aEFycmF5MSk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpICsrKSB7CisgICAgICAgICAgICBwV2lkdGhBcnJheTEtPkFkZEludGVnZXIod2lkdGhzW2ldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBGWF9GcmVlKHdpZHRocyk7Cit9CitDUERGX0ZvbnQqIENQREZfRG9jdW1lbnQ6OkFkZE1hY0ZvbnQoQ1RGb250UmVmIHBGb250LCBGWF9CT09MIGJWZXJ0LCBGWF9CT09MIGJUcmFuc2xhdGVOYW1lKQoreworICAgIENURm9udFJlZiBmb250ID0gKENURm9udFJlZilwRm9udDsKKyAgICBDVEZvbnREZXNjcmlwdG9yUmVmIGRlc2NyaXB0b3IgPSBDVEZvbnRDb3B5Rm9udERlc2NyaXB0b3IoZm9udCk7CisgICAgaWYgKGRlc2NyaXB0b3IgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgYmFzZWZvbnQ7CisgICAgRlhfQk9PTCBiQ0pLID0gRkFMU0U7CisgICAgaW50IGZsYWdzID0gMCwgaXRhbGljYW5nbGUgPSAwLCBhc2NlbmQgPSAwLCBkZXNjZW5kID0gMCwgY2FwaGVpZ2h0ID0gMCwgYmJveFs0XTsKKyAgICBGWFNZU19tZW1zZXQzMihiYm94LCAwLCBzaXplb2YoaW50KSAqIDQpOworICAgIENGQXJyYXlSZWYgbGFuZ3VhZ2VzID0gKENGQXJyYXlSZWYpQ1RGb250RGVzY3JpcHRvckNvcHlBdHRyaWJ1dGUoZGVzY3JpcHRvciwga0NURm9udExhbmd1YWdlc0F0dHJpYnV0ZSk7CisgICAgaWYgKGxhbmd1YWdlcyA9PSBOVUxMKSB7CisgICAgICAgIENGUmVsZWFzZShkZXNjcmlwdG9yKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENGWF9EV29yZEFycmF5IGNoYXJTZXRzOworICAgIGNoYXJTZXRzLkFkZChGWEZPTlRfQ0hJTkVTRUJJRzVfQ0hBUlNFVCk7CisgICAgY2hhclNldHMuQWRkKEZYRk9OVF9HQjIzMTJfQ0hBUlNFVCk7CisgICAgY2hhclNldHMuQWRkKEZYRk9OVF9IQU5HRVVMX0NIQVJTRVQpOworICAgIGNoYXJTZXRzLkFkZChGWEZPTlRfU0hJRlRKSVNfQ0hBUlNFVCk7CisgICAgaWYgKElzSGFzQ2hhclNldChsYW5ndWFnZXMsIGNoYXJTZXRzKSkgeworICAgICAgICBiQ0pLID0gVFJVRTsKKyAgICB9CisgICAgQ0ZSZWxlYXNlKGRlc2NyaXB0b3IpOworICAgIENGRGljdGlvbmFyeVJlZiB0cmFpdHMgPSAoQ0ZEaWN0aW9uYXJ5UmVmKUNURm9udENvcHlUcmFpdHMoZm9udCk7CisgICAgaWYgKHRyYWl0cyA9PSBOVUxMKSB7CisgICAgICAgIENGUmVsZWFzZShsYW5ndWFnZXMpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0ZOdW1iZXJSZWYgc3lib2xpY1RyYWl0ID0gKENGTnVtYmVyUmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHRyYWl0cywga0NURm9udFN5bWJvbGljVHJhaXQpOworICAgIENURm9udFN5bWJvbGljVHJhaXRzIHRyYWl0ID0gMDsKKyAgICBDRk51bWJlckdldFZhbHVlKHN5Ym9saWNUcmFpdCwga0NGTnVtYmVyU0ludDMyVHlwZSwgJnRyYWl0KTsKKyAgICBpZiAodHJhaXQgJiBrQ1RGb250SXRhbGljVHJhaXQpIHsKKyAgICAgICAgZmxhZ3MgfD0gUERGRk9OVF9JVEFMSUM7CisgICAgfQorICAgIGlmICh0cmFpdCAmIGtDVEZvbnRNb25vU3BhY2VUcmFpdCkgeworICAgICAgICBmbGFncyB8PSBQREZGT05UX0ZJWEVEUElUQ0g7CisgICAgfQorICAgIGlmICh0cmFpdCAmIGtDVEZvbnRNb2Rlcm5TZXJpZnNDbGFzcykgeworICAgICAgICBmbGFncyB8PSBQREZGT05UX1NFUklGOworICAgIH0KKyAgICBpZiAodHJhaXQgJiBrQ1RGb250U2NyaXB0c0NsYXNzKSB7CisgICAgICAgIGZsYWdzIHw9IFBERkZPTlRfU0NSSVBUOworICAgIH0KKyAgICBDRk51bWJlclJlZiB3ZWlnaHRUcmFpdCA9IChDRk51bWJlclJlZilDRkRpY3Rpb25hcnlHZXRWYWx1ZSh0cmFpdHMsIGtDVEZvbnRXZWlnaHRUcmFpdCk7CisgICAgRmxvYXQzMiB3ZWlnaHQgPSAwOworICAgIENGTnVtYmVyR2V0VmFsdWUod2VpZ2h0VHJhaXQsIGtDRk51bWJlckZsb2F0MzJUeXBlLCAmd2VpZ2h0KTsKKyAgICBpdGFsaWNhbmdsZSA9IENURm9udEdldFNsYW50QW5nbGUoZm9udCk7CisgICAgYXNjZW5kICAgICAgPSBDVEZvbnRHZXRBc2NlbnQoZm9udCk7CisgICAgZGVzY2VuZCAgICAgPSBDVEZvbnRHZXREZXNjZW50KGZvbnQpOworICAgIGNhcGhlaWdodCAgID0gQ1RGb250R2V0Q2FwSGVpZ2h0KGZvbnQpOworICAgIENHUmVjdCBib3ggID0gQ1RGb250R2V0Qm91bmRpbmdCb3goZm9udCk7CisgICAgYmJveFswXSAgICAgPSBib3gub3JpZ2luLng7CisgICAgYmJveFsxXSAgICAgPSBib3gub3JpZ2luLnk7CisgICAgYmJveFsyXSAgICAgPSBib3gub3JpZ2luLnggKyBib3guc2l6ZS53aWR0aDsKKyAgICBiYm94WzNdICAgICA9IGJveC5vcmlnaW4ueSArIGJveC5zaXplLmhlaWdodDsKKyAgICBpZiAoYlRyYW5zbGF0ZU5hbWUgJiYgYkNKSykgeworICAgICAgICBDRlN0cmluZ1JlZiBwb3N0TmFtZSA9IENURm9udENvcHlQb3N0U2NyaXB0TmFtZShmb250KTsKKyAgICAgICAgX0NGU3RyaW5nMkNGWEJ5dGVTdHJpbmcocG9zdE5hbWUsIGJhc2Vmb250KTsKKyAgICAgICAgQ0ZSZWxlYXNlKHBvc3ROYW1lKTsKKyAgICB9CisgICAgaWYgKGJhc2Vmb250LklzRW1wdHkoKSkgeworICAgICAgICBDRlN0cmluZ1JlZiBmdWxsTmFtZSA9IENURm9udENvcHlGdWxsTmFtZShmb250KTsKKyAgICAgICAgX0NGU3RyaW5nMkNGWEJ5dGVTdHJpbmcoZnVsbE5hbWUsIGJhc2Vmb250KTsKKyAgICAgICAgQ0ZSZWxlYXNlKGZ1bGxOYW1lKTsKKyAgICB9CisgICAgYmFzZWZvbnQuUmVwbGFjZSgiICIsICIiKTsKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBGb250RGljdCA9IE5VTEw7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwQmFzZURpY3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5OworICAgIHBGb250RGljdCA9IHBCYXNlRGljdDsKKyAgICBpZiAoIWJDSkspIHsKKyAgICAgICAgY2hhclNldHMuUmVtb3ZlQWxsKCk7CisgICAgICAgIGNoYXJTZXRzLkFkZChGWEZPTlRfQU5TSV9DSEFSU0VUKTsKKyAgICAgICAgY2hhclNldHMuQWRkKEZYRk9OVF9ERUZBVUxUX0NIQVJTRVQpOworICAgICAgICBjaGFyU2V0cy5BZGQoRlhGT05UX1NZTUJPTF9DSEFSU0VUKTsKKyAgICAgICAgaWYgKElzSGFzQ2hhclNldChsYW5ndWFnZXMsIGNoYXJTZXRzKSkgeworICAgICAgICAgICAgY2hhclNldHMuUmVtb3ZlQWxsKCk7CisgICAgICAgICAgICBjaGFyU2V0cy5BZGQoRlhGT05UX1NZTUJPTF9DSEFSU0VUKTsKKyAgICAgICAgICAgIGlmIChJc0hhc0NoYXJTZXQobGFuZ3VhZ2VzLCBjaGFyU2V0cykpIHsKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBQREZGT05UX1NZTUJPTElDOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBQREZGT05UX05PTlNZTUJPTElDOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcEJhc2VEaWN0LT5TZXRBdE5hbWUoRlhfQlNUUkMoIkVuY29kaW5nIiksICJXaW5BbnNpRW5jb2RpbmciKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZsYWdzIHw9IFBERkZPTlRfTk9OU1lNQk9MSUM7CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YgZ19GWF9DaGFyc2V0VW5pY29kZXMgLyBzaXplb2YoRlhfQ2hhcnNldFVuaWNvZGVzKTsgaSArKykgeworICAgICAgICAgICAgICAgIGNoYXJTZXRzLlJlbW92ZUFsbCgpOworICAgICAgICAgICAgICAgIGNoYXJTZXRzLkFkZChnX0ZYX0NoYXJzZXRVbmljb2Rlc1tpXS5tX0NoYXJzZXQpOworICAgICAgICAgICAgICAgIGlmIChJc0hhc0NoYXJTZXQobGFuZ3VhZ2VzLCBjaGFyU2V0cykpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGkgPCBzaXplb2YgZ19GWF9DaGFyc2V0VW5pY29kZXMgLyBzaXplb2YoRlhfQ2hhcnNldFVuaWNvZGVzKSkgeworICAgICAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcEVuY29kaW5nID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsKKyAgICAgICAgICAgICAgICBwRW5jb2RpbmctPlNldEF0TmFtZShGWF9CU1RSQygiQmFzZUVuY29kaW5nIiksICJXaW5BbnNpRW5jb2RpbmciKTsKKyAgICAgICAgICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBGWF9ORVcgQ1BERl9BcnJheTsKKyAgICAgICAgICAgICAgICBwQXJyYXktPkFkZEludGVnZXIoMTI4KTsKKyAgICAgICAgICAgICAgICBjb25zdCBGWF9XQ0hBUiogcFVuaWNvZGVzID0gZ19GWF9DaGFyc2V0VW5pY29kZXNbaV0ubV9wVW5pY29kZXM7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCAxMjg7IGogKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgbmFtZSA9IFBERl9BZG9iZU5hbWVGcm9tVW5pY29kZShwVW5pY29kZXNbal0pOworICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBBcnJheS0+QWRkTmFtZShGWF9CU1RSQygiLm5vdGRlZiIpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBBcnJheS0+QWRkTmFtZShuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwRW5jb2RpbmctPlNldEF0KEZYX0JTVFJDKCJEaWZmZXJlbmNlcyIpLCBwQXJyYXkpOworICAgICAgICAgICAgICAgIEFkZEluZGlyZWN0T2JqZWN0KHBFbmNvZGluZyk7CisgICAgICAgICAgICAgICAgcEJhc2VEaWN0LT5TZXRBdFJlZmVyZW5jZShGWF9CU1RSQygiRW5jb2RpbmciKSwgdGhpcywgcEVuY29kaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAod2VpZ2h0ID4gMC4wICYmIHRyYWl0ICYga0NURm9udEl0YWxpY1RyYWl0KSB7CisgICAgICAgICAgICBiYXNlZm9udCArPSAiLEJvbGRJdGFsaWMiOworICAgICAgICB9IGVsc2UgaWYgKHdlaWdodCA+IDAuMCkgeworICAgICAgICAgICAgYmFzZWZvbnQgKz0gIixCb2xkIjsKKyAgICAgICAgfSBlbHNlIGlmICh0cmFpdCAmIGtDVEZvbnRJdGFsaWNUcmFpdCkgeworICAgICAgICAgICAgYmFzZWZvbnQgKz0gIixJdGFsaWMiOworICAgICAgICB9CisgICAgICAgIHBCYXNlRGljdC0+U2V0QXROYW1lKCJTdWJ0eXBlIiwgIlRydWVUeXBlIik7CisgICAgICAgIHBCYXNlRGljdC0+U2V0QXROYW1lKCJCYXNlRm9udCIsIGJhc2Vmb250KTsKKyAgICAgICAgcEJhc2VEaWN0LT5TZXRBdE51bWJlcigiRmlyc3RDaGFyIiwgMzIpOworICAgICAgICBwQmFzZURpY3QtPlNldEF0TnVtYmVyKCJMYXN0Q2hhciIsIDI1NSk7CisgICAgICAgIGludCBjaGFyX3dpZHRoc1syMjRdOworICAgICAgICBGWF9HZXRDaGFyV2lkdGgoZm9udCwgMzIsIDI1NSwgY2hhcl93aWR0aHMpOworICAgICAgICBDUERGX0FycmF5KiBwV2lkdGhzID0gRlhfTkVXIENQREZfQXJyYXk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjI0OyBpICsrKSB7CisgICAgICAgICAgICBwV2lkdGhzLT5BZGRJbnRlZ2VyKGNoYXJfd2lkdGhzW2ldKTsKKyAgICAgICAgfQorICAgICAgICBwQmFzZURpY3QtPlNldEF0KCJXaWR0aHMiLCBwV2lkdGhzKTsKKyAgICB9ICBlbHNlIHsKKyAgICAgICAgZmxhZ3MgfD0gUERGRk9OVF9OT05TWU1CT0xJQzsKKyAgICAgICAgQ1BERl9BcnJheSogcEFycmF5ID0gTlVMTDsKKyAgICAgICAgcEZvbnREaWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY21hcDsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgb3JkZXJpbmc7CisgICAgICAgIGludCBzdXBwbGVtZW50OworICAgICAgICBGWF9CT09MIGJGb3VuZCA9IEZBTFNFOworICAgICAgICBDUERGX0FycmF5KiBwV2lkdGhBcnJheSA9IEZYX05FVyBDUERGX0FycmF5OworICAgICAgICBjaGFyU2V0cy5SZW1vdmVBbGwoKTsKKyAgICAgICAgY2hhclNldHMuQWRkKEZYRk9OVF9DSElORVNFQklHNV9DSEFSU0VUKTsKKyAgICAgICAgaWYgKElzSGFzQ2hhclNldChsYW5ndWFnZXMsIGNoYXJTZXRzKSkgeworICAgICAgICAgICAgY21hcCA9IGJWZXJ0ID8gIkVUZW5tcy1CNS1WIiA6ICJFVGVubXMtQjUtSCI7CisgICAgICAgICAgICBvcmRlcmluZyA9ICJDTlMxIjsKKyAgICAgICAgICAgIHN1cHBsZW1lbnQgPSA0OworICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoMSk7CisgICAgICAgICAgICBfSW5zZXJ0V2lkdGhBcnJheShmb250LCAweDIwLCAweDdlLCBwV2lkdGhBcnJheSk7CisgICAgICAgICAgICBiRm91bmQgPSBUUlVFOworICAgICAgICB9CisgICAgICAgIGNoYXJTZXRzLlJlbW92ZUFsbCgpOworICAgICAgICBjaGFyU2V0cy5BZGQoRlhGT05UX0dCMjMxMl9DSEFSU0VUKTsKKyAgICAgICAgaWYgKCFiRm91bmQgJiYgSXNIYXNDaGFyU2V0KGxhbmd1YWdlcywgY2hhclNldHMpKSB7CisgICAgICAgICAgICBjbWFwID0gYlZlcnQgPyAiR0JLLUVVQy1WIiA6ICJHQkstRVVDLUgiOworICAgICAgICAgICAgb3JkZXJpbmcgPSAiR0IxIiwgc3VwcGxlbWVudCA9IDI7CisgICAgICAgICAgICBwV2lkdGhBcnJheS0+QWRkSW50ZWdlcig3NzE2KTsKKyAgICAgICAgICAgIF9JbnNlcnRXaWR0aEFycmF5KGZvbnQsIDB4MjAsIDB4MjAsIHBXaWR0aEFycmF5KTsKKyAgICAgICAgICAgIHBXaWR0aEFycmF5LT5BZGRJbnRlZ2VyKDgxNCk7CisgICAgICAgICAgICBfSW5zZXJ0V2lkdGhBcnJheShmb250LCAweDIxLCAweDdlLCBwV2lkdGhBcnJheSk7CisgICAgICAgICAgICBiRm91bmQgPSBUUlVFOworICAgICAgICB9CisgICAgICAgIGNoYXJTZXRzLlJlbW92ZUFsbCgpOworICAgICAgICBjaGFyU2V0cy5BZGQoRlhGT05UX0hBTkdFVUxfQ0hBUlNFVCk7CisgICAgICAgIGlmICghYkZvdW5kICYmIElzSGFzQ2hhclNldChsYW5ndWFnZXMsIGNoYXJTZXRzKSkgeworICAgICAgICAgICAgY21hcCA9IGJWZXJ0ID8gIktTQ21zLVVIQy1WIiA6ICJLU0Ntcy1VSEMtSCI7CisgICAgICAgICAgICBvcmRlcmluZyA9ICJLb3JlYTEiOworICAgICAgICAgICAgc3VwcGxlbWVudCA9IDI7CisgICAgICAgICAgICBwV2lkdGhBcnJheS0+QWRkSW50ZWdlcigxKTsKKyAgICAgICAgICAgIF9JbnNlcnRXaWR0aEFycmF5KGZvbnQsIDB4MjAsIDB4N2UsIHBXaWR0aEFycmF5KTsKKyAgICAgICAgICAgIGJGb3VuZCA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgY2hhclNldHMuUmVtb3ZlQWxsKCk7CisgICAgICAgIGNoYXJTZXRzLkFkZChGWEZPTlRfU0hJRlRKSVNfQ0hBUlNFVCk7CisgICAgICAgIGlmICghYkZvdW5kICYmIElzSGFzQ2hhclNldChsYW5ndWFnZXMsIGNoYXJTZXRzKSkgeworICAgICAgICAgICAgY21hcCA9IGJWZXJ0ID8gIjkwbXMtUktTSi1WIiA6ICI5MG1zLVJLU0otSCI7CisgICAgICAgICAgICBvcmRlcmluZyA9ICJKYXBhbjEiOworICAgICAgICAgICAgc3VwcGxlbWVudCA9IDU7CisgICAgICAgICAgICBwV2lkdGhBcnJheS0+QWRkSW50ZWdlcigyMzEpOworICAgICAgICAgICAgX0luc2VydFdpZHRoQXJyYXkoZm9udCwgMHgyMCwgMHg3ZCwgcFdpZHRoQXJyYXkpOworICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoMzI2KTsKKyAgICAgICAgICAgIF9JbnNlcnRXaWR0aEFycmF5KGZvbnQsIDB4YTAsIDB4YTAsIHBXaWR0aEFycmF5KTsKKyAgICAgICAgICAgIHBXaWR0aEFycmF5LT5BZGRJbnRlZ2VyKDMyNyk7CisgICAgICAgICAgICBfSW5zZXJ0V2lkdGhBcnJheShmb250LCAweGExLCAweGRmLCBwV2lkdGhBcnJheSk7CisgICAgICAgICAgICBwV2lkdGhBcnJheS0+QWRkSW50ZWdlcig2MzEpOworICAgICAgICAgICAgX0luc2VydFdpZHRoQXJyYXkoZm9udCwgMHg3ZSwgMHg3ZSwgcFdpZHRoQXJyYXkpOworICAgICAgICB9CisgICAgICAgIHBCYXNlRGljdC0+U2V0QXROYW1lKCJTdWJ0eXBlIiwgIlR5cGUwIik7CisgICAgICAgIHBCYXNlRGljdC0+U2V0QXROYW1lKCJCYXNlRm9udCIsIGJhc2Vmb250KTsKKyAgICAgICAgcEJhc2VEaWN0LT5TZXRBdE5hbWUoIkVuY29kaW5nIiwgY21hcCk7CisgICAgICAgIHBGb250RGljdC0+U2V0QXQoIlciLCBwV2lkdGhBcnJheSk7CisgICAgICAgIHBGb250RGljdC0+U2V0QXROYW1lKCJUeXBlIiwgIkZvbnQiKTsKKyAgICAgICAgcEZvbnREaWN0LT5TZXRBdE5hbWUoIlN1YnR5cGUiLCAiQ0lERm9udFR5cGUyIik7CisgICAgICAgIHBGb250RGljdC0+U2V0QXROYW1lKCJCYXNlRm9udCIsIGJhc2Vmb250KTsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwQ0lEU3lzSW5mbyA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7CisgICAgICAgIHBDSURTeXNJbmZvLT5TZXRBdFN0cmluZygiUmVnaXN0cnkiLCAiQWRvYmUiKTsKKyAgICAgICAgcENJRFN5c0luZm8tPlNldEF0U3RyaW5nKCJPcmRlcmluZyIsIG9yZGVyaW5nKTsKKyAgICAgICAgcENJRFN5c0luZm8tPlNldEF0SW50ZWdlcigiU3VwcGxlbWVudCIsIHN1cHBsZW1lbnQpOworICAgICAgICBwRm9udERpY3QtPlNldEF0KCJDSURTeXN0ZW1JbmZvIiwgcENJRFN5c0luZm8pOworICAgICAgICBwQXJyYXkgPSBGWF9ORVcgQ1BERl9BcnJheTsKKyAgICAgICAgcEJhc2VEaWN0LT5TZXRBdCgiRGVzY2VuZGFudEZvbnRzIiwgcEFycmF5KTsKKyAgICAgICAgQWRkSW5kaXJlY3RPYmplY3QocEZvbnREaWN0KTsKKyAgICAgICAgcEFycmF5LT5BZGRSZWZlcmVuY2UodGhpcywgcEZvbnREaWN0KTsKKyAgICB9CisgICAgQWRkSW5kaXJlY3RPYmplY3QocEJhc2VEaWN0KTsKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBGb250RGVzYyA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7CisgICAgcEZvbnREZXNjLT5TZXRBdE5hbWUoIlR5cGUiLCAiRm9udERlc2NyaXB0b3IiKTsKKyAgICBwRm9udERlc2MtPlNldEF0TmFtZSgiRm9udE5hbWUiLCBiYXNlZm9udCk7CisgICAgcEZvbnREZXNjLT5TZXRBdEludGVnZXIoIkZsYWdzIiwgZmxhZ3MpOworICAgIENQREZfQXJyYXkqIHBCQm94ID0gRlhfTkVXIENQREZfQXJyYXk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpICsrKSB7CisgICAgICAgIHBCQm94LT5BZGRJbnRlZ2VyKGJib3hbaV0pOworICAgIH0KKyAgICBwRm9udERlc2MtPlNldEF0KCJGb250QkJveCIsIHBCQm94KTsKKyAgICBwRm9udERlc2MtPlNldEF0SW50ZWdlcigiSXRhbGljQW5nbGUiLCBpdGFsaWNhbmdsZSk7CisgICAgcEZvbnREZXNjLT5TZXRBdEludGVnZXIoIkFzY2VudCIsIGFzY2VuZCk7CisgICAgcEZvbnREZXNjLT5TZXRBdEludGVnZXIoIkRlc2NlbnQiLCBkZXNjZW5kKTsKKyAgICBwRm9udERlc2MtPlNldEF0SW50ZWdlcigiQ2FwSGVpZ2h0IiwgY2FwaGVpZ2h0KTsKKyAgICBDR0Zsb2F0IGZTdGVtViA9IDA7CisgICAgaW50MTZfdCBtaW5fd2lkdGggPSBTSFJUX01BWDsKKyAgICBzdGF0aWMgY29uc3QgVW5pQ2hhciBzdGVtX2NoYXJzW10gPSB7J2knLCAnSScsICchJywgJzEnfTsKKyAgICBjb25zdCBzaXplX3QgY291bnQgPSBzaXplb2Yoc3RlbV9jaGFycykgLyBzaXplb2Yoc3RlbV9jaGFyc1swXSk7CisgICAgQ0dHbHlwaCBnbHlwaHNbY291bnRdOworICAgIENHUmVjdCBib3VuZGluZ1JlY3RzW2NvdW50XTsKKyAgICBpZiAoQ1RGb250R2V0R2x5cGhzRm9yQ2hhcmFjdGVycyhmb250LCBzdGVtX2NoYXJzLCBnbHlwaHMsIGNvdW50KSkgeworICAgICAgICBDVEZvbnRHZXRCb3VuZGluZ1JlY3RzRm9yR2x5cGhzKGZvbnQsIGtDVEZvbnRIb3Jpem9udGFsT3JpZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzLCBib3VuZGluZ1JlY3RzLCBjb3VudCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgaW50MTZfdCB3aWR0aCA9IGJvdW5kaW5nUmVjdHNbaV0uc2l6ZS53aWR0aDsKKyAgICAgICAgICAgIGlmICh3aWR0aCA+IDAgJiYgd2lkdGggPCBtaW5fd2lkdGgpIHsKKyAgICAgICAgICAgICAgICBtaW5fd2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgICAgICBmU3RlbVYgPSBtaW5fd2lkdGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcEZvbnREZXNjLT5TZXRBdEludGVnZXIoIlN0ZW1WIiwgZlN0ZW1WKTsKKyAgICBBZGRJbmRpcmVjdE9iamVjdChwRm9udERlc2MpOworICAgIHBGb250RGljdC0+U2V0QXRSZWZlcmVuY2UoIkZvbnREZXNjcmlwdG9yIiwgdGhpcywgcEZvbnREZXNjKTsKKyAgICBDRlJlbGVhc2UodHJhaXRzKTsKKyAgICBDRlJlbGVhc2UobGFuZ3VhZ2VzKTsKKyAgICByZXR1cm4gTG9hZEZvbnQocEJhc2VEaWN0KTsKK30KKyNlbmRpZgorc3RhdGljIHZvaWQgX0luc2VydFdpZHRoQXJyYXkxKENGWF9Gb250KiBwRm9udCwgSUZYX0ZvbnRFbmNvZGluZyogcEVuY29kaW5nLCBGWF9XQ0hBUiBzdGFydCwgRlhfV0NIQVIgZW5kLCBDUERGX0FycmF5KiBwV2lkdGhBcnJheSkKK3sKKyAgICBpbnQgc2l6ZSA9IGVuZCAtIHN0YXJ0ICsgMTsKKyAgICBpbnQqIHdpZHRocyA9IEZYX0FsbG9jKGludCwgc2l6ZSk7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKyspIHsKKyAgICAgICAgaW50IGdseXBoX2luZGV4ID0gcEVuY29kaW5nLT5HbHlwaEZyb21DaGFyQ29kZShzdGFydCArIGkpOworICAgICAgICB3aWR0aHNbaV0gPSBwRm9udC0+R2V0R2x5cGhXaWR0aChnbHlwaF9pbmRleCk7CisgICAgfQorICAgIGZvciAoaSA9IDE7IGkgPCBzaXplOyBpICsrKQorICAgICAgICBpZiAod2lkdGhzW2ldICE9ICp3aWR0aHMpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgaWYgKGkgPT0gc2l6ZSkgeworICAgICAgICBpbnQgZmlyc3QgPSBwV2lkdGhBcnJheS0+R2V0SW50ZWdlcihwV2lkdGhBcnJheS0+R2V0Q291bnQoKSAtIDEpOworICAgICAgICBwV2lkdGhBcnJheS0+QWRkSW50ZWdlcihmaXJzdCArIHNpemUgLSAxKTsKKyAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoKndpZHRocyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQ1BERl9BcnJheSogcFdpZHRoQXJyYXkxID0gRlhfTkVXIENQREZfQXJyYXk7CisgICAgICAgIHBXaWR0aEFycmF5LT5BZGQocFdpZHRoQXJyYXkxKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKyspIHsKKyAgICAgICAgICAgIHBXaWR0aEFycmF5MS0+QWRkSW50ZWdlcih3aWR0aHNbaV0pOworICAgICAgICB9CisgICAgfQorICAgIEZYX0ZyZWUod2lkdGhzKTsKK30KK0NQREZfRm9udCogQ1BERl9Eb2N1bWVudDo6QWRkRm9udChDRlhfRm9udCogcEZvbnQsIGludCBjaGFyc2V0LCBGWF9CT09MIGJWZXJ0KQoreworICAgIGlmIChwRm9udCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBGWF9CT09MIGJDSksgPSBjaGFyc2V0ID09IEZYRk9OVF9DSElORVNFQklHNV9DSEFSU0VUIHx8IGNoYXJzZXQgPT0gRlhGT05UX0dCMjMxMl9DSEFSU0VUIHx8CisgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9PSBGWEZPTlRfSEFOR0VVTF9DSEFSU0VUIHx8IGNoYXJzZXQgPT0gRlhGT05UX1NISUZUSklTX0NIQVJTRVQ7CisgICAgQ0ZYX0J5dGVTdHJpbmcgYmFzZWZvbnQgPSBwRm9udC0+R2V0RmFtaWx5TmFtZSgpOworICAgIGJhc2Vmb250LlJlcGxhY2UoIiAiLCAiIik7CisgICAgaW50IGZsYWdzID0gMDsKKyAgICBpZiAocEZvbnQtPklzQm9sZCgpKSB7CisgICAgICAgIGZsYWdzIHw9IFBERkZPTlRfRk9SQ0VCT0xEOworICAgIH0KKyAgICBpZiAocEZvbnQtPklzSXRhbGljKCkpIHsKKyAgICAgICAgZmxhZ3MgfD0gUERGRk9OVF9JVEFMSUM7CisgICAgfQorICAgIGlmIChwRm9udC0+SXNGaXhlZFdpZHRoKCkpIHsKKyAgICAgICAgZmxhZ3MgfD0gUERGRk9OVF9GSVhFRFBJVENIOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBCYXNlRGljdCA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7CisgICAgcEJhc2VEaWN0LT5TZXRBdE5hbWUoIlR5cGUiLCAiRm9udCIpOworICAgIElGWF9Gb250RW5jb2RpbmcqIHBFbmNvZGluZyA9IEZYR0VfQ3JlYXRlVW5pY29kZUVuY29kaW5nKHBGb250KTsKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBGb250RGljdCA9IHBCYXNlRGljdDsKKyAgICBpZiAoIWJDSkspIHsKKyAgICAgICAgQ1BERl9BcnJheSogcFdpZHRocyA9IEZYX05FVyBDUERGX0FycmF5OworICAgICAgICBpbnQgY2hhcmNvZGU7CisgICAgICAgIGZvciAoY2hhcmNvZGUgPSAzMjsgY2hhcmNvZGUgPCAxMjg7IGNoYXJjb2RlICsrKSB7CisgICAgICAgICAgICBpbnQgZ2x5cGhfaW5kZXggPSBwRW5jb2RpbmctPkdseXBoRnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsKKyAgICAgICAgICAgIGludCBjaGFyX3dpZHRoID0gcEZvbnQtPkdldEdseXBoV2lkdGgoZ2x5cGhfaW5kZXgpOworICAgICAgICAgICAgcFdpZHRocy0+QWRkSW50ZWdlcihjaGFyX3dpZHRoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2hhcnNldCA9PSBGWEZPTlRfQU5TSV9DSEFSU0VUIHx8IGNoYXJzZXQgPT0gRlhGT05UX0RFRkFVTFRfQ0hBUlNFVCB8fAorICAgICAgICAgICAgICAgIGNoYXJzZXQgPT0gRlhGT05UX1NZTUJPTF9DSEFSU0VUKSB7CisgICAgICAgICAgICBpZiAoY2hhcnNldCA9PSBGWEZPTlRfU1lNQk9MX0NIQVJTRVQpIHsKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBQREZGT05UX1NZTUJPTElDOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmbGFncyB8PSBQREZGT05UX05PTlNZTUJPTElDOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcEJhc2VEaWN0LT5TZXRBdE5hbWUoRlhfQlNUUkMoIkVuY29kaW5nIiksICJXaW5BbnNpRW5jb2RpbmciKTsKKyAgICAgICAgICAgIGZvciAoY2hhcmNvZGUgPSAxMjg7IGNoYXJjb2RlIDw9IDI1NTsgY2hhcmNvZGUgKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgZ2x5cGhfaW5kZXggPSBwRW5jb2RpbmctPkdseXBoRnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsKKyAgICAgICAgICAgICAgICBpbnQgY2hhcl93aWR0aCA9IHBGb250LT5HZXRHbHlwaFdpZHRoKGdseXBoX2luZGV4KTsKKyAgICAgICAgICAgICAgICBwV2lkdGhzLT5BZGRJbnRlZ2VyKGNoYXJfd2lkdGgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmxhZ3MgfD0gUERGRk9OVF9OT05TWU1CT0xJQzsKKyAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZiBnX0ZYX0NoYXJzZXRVbmljb2RlcyAvIHNpemVvZihGWF9DaGFyc2V0VW5pY29kZXMpOyBpICsrKQorICAgICAgICAgICAgICAgIGlmIChnX0ZYX0NoYXJzZXRVbmljb2Rlc1tpXS5tX0NoYXJzZXQgPT0gY2hhcnNldCkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaSA8IHNpemVvZiBnX0ZYX0NoYXJzZXRVbmljb2RlcyAvIHNpemVvZihGWF9DaGFyc2V0VW5pY29kZXMpKSB7CisgICAgICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRW5jb2RpbmdEaWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsKKyAgICAgICAgICAgICAgICBwRW5jb2RpbmdEaWN0LT5TZXRBdE5hbWUoRlhfQlNUUkMoIkJhc2VFbmNvZGluZyIpLCAiV2luQW5zaUVuY29kaW5nIik7CisgICAgICAgICAgICAgICAgQ1BERl9BcnJheSogcEFycmF5ID0gRlhfTkVXIENQREZfQXJyYXk7CisgICAgICAgICAgICAgICAgcEFycmF5LT5BZGRJbnRlZ2VyKDEyOCk7CisgICAgICAgICAgICAgICAgY29uc3QgRlhfV0NIQVIqIHBVbmljb2RlcyA9IGdfRlhfQ2hhcnNldFVuaWNvZGVzW2ldLm1fcFVuaWNvZGVzOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMTI4OyBqICsrKSB7CisgICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIG5hbWUgPSBQREZfQWRvYmVOYW1lRnJvbVVuaWNvZGUocFVuaWNvZGVzW2pdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwQXJyYXktPkFkZE5hbWUoRlhfQlNUUkMoIi5ub3RkZWYiKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwQXJyYXktPkFkZE5hbWUobmFtZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaW50IGdseXBoX2luZGV4ID0gcEVuY29kaW5nLT5HbHlwaEZyb21DaGFyQ29kZShwVW5pY29kZXNbal0pOworICAgICAgICAgICAgICAgICAgICBpbnQgY2hhcl93aWR0aCA9IHBGb250LT5HZXRHbHlwaFdpZHRoKGdseXBoX2luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgcFdpZHRocy0+QWRkSW50ZWdlcihjaGFyX3dpZHRoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcEVuY29kaW5nRGljdC0+U2V0QXQoRlhfQlNUUkMoIkRpZmZlcmVuY2VzIiksIHBBcnJheSk7CisgICAgICAgICAgICAgICAgQWRkSW5kaXJlY3RPYmplY3QocEVuY29kaW5nRGljdCk7CisgICAgICAgICAgICAgICAgcEJhc2VEaWN0LT5TZXRBdFJlZmVyZW5jZShGWF9CU1RSQygiRW5jb2RpbmciKSwgdGhpcywgcEVuY29kaW5nRGljdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBGb250LT5Jc0JvbGQoKSAmJiBwRm9udC0+SXNJdGFsaWMoKSkgeworICAgICAgICAgICAgYmFzZWZvbnQgKz0gIixCb2xkSXRhbGljIjsKKyAgICAgICAgfSBlbHNlIGlmIChwRm9udC0+SXNCb2xkKCkpIHsKKyAgICAgICAgICAgIGJhc2Vmb250ICs9ICIsQm9sZCI7CisgICAgICAgIH0gZWxzZSBpZiAocEZvbnQtPklzSXRhbGljKCkpIHsKKyAgICAgICAgICAgIGJhc2Vmb250ICs9ICIsSXRhbGljIjsKKyAgICAgICAgfQorICAgICAgICBwQmFzZURpY3QtPlNldEF0TmFtZSgiU3VidHlwZSIsICJUcnVlVHlwZSIpOworICAgICAgICBwQmFzZURpY3QtPlNldEF0TmFtZSgiQmFzZUZvbnQiLCBiYXNlZm9udCk7CisgICAgICAgIHBCYXNlRGljdC0+U2V0QXROdW1iZXIoIkZpcnN0Q2hhciIsIDMyKTsKKyAgICAgICAgcEJhc2VEaWN0LT5TZXRBdE51bWJlcigiTGFzdENoYXIiLCAyNTUpOworICAgICAgICBwQmFzZURpY3QtPlNldEF0KCJXaWR0aHMiLCBwV2lkdGhzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmbGFncyB8PSBQREZGT05UX05PTlNZTUJPTElDOworICAgICAgICBwRm9udERpY3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5OworICAgICAgICBDRlhfQnl0ZVN0cmluZyBjbWFwOworICAgICAgICBDRlhfQnl0ZVN0cmluZyBvcmRlcmluZzsKKyAgICAgICAgaW50IHN1cHBsZW1lbnQ7CisgICAgICAgIENQREZfQXJyYXkqIHBXaWR0aEFycmF5ID0gRlhfTkVXIENQREZfQXJyYXk7CisgICAgICAgIHN3aXRjaCAoY2hhcnNldCkgeworICAgICAgICAgICAgY2FzZSBGWEZPTlRfQ0hJTkVTRUJJRzVfQ0hBUlNFVDoKKyAgICAgICAgICAgICAgICBjbWFwID0gYlZlcnQgPyAiRVRlbm1zLUI1LVYiIDogIkVUZW5tcy1CNS1IIjsKKyAgICAgICAgICAgICAgICBvcmRlcmluZyA9ICJDTlMxIjsKKyAgICAgICAgICAgICAgICBzdXBwbGVtZW50ID0gNDsKKyAgICAgICAgICAgICAgICBwV2lkdGhBcnJheS0+QWRkSW50ZWdlcigxKTsKKyAgICAgICAgICAgICAgICBfSW5zZXJ0V2lkdGhBcnJheTEocEZvbnQsIHBFbmNvZGluZywgMHgyMCwgMHg3ZSwgcFdpZHRoQXJyYXkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGWEZPTlRfR0IyMzEyX0NIQVJTRVQ6CisgICAgICAgICAgICAgICAgY21hcCA9IGJWZXJ0ID8gIkdCSy1FVUMtViIgOiAiR0JLLUVVQy1IIjsKKyAgICAgICAgICAgICAgICBvcmRlcmluZyA9ICJHQjEiLCBzdXBwbGVtZW50ID0gMjsKKyAgICAgICAgICAgICAgICBwV2lkdGhBcnJheS0+QWRkSW50ZWdlcig3NzE2KTsKKyAgICAgICAgICAgICAgICBfSW5zZXJ0V2lkdGhBcnJheTEocEZvbnQsIHBFbmNvZGluZywgMHgyMCwgMHgyMCwgcFdpZHRoQXJyYXkpOworICAgICAgICAgICAgICAgIHBXaWR0aEFycmF5LT5BZGRJbnRlZ2VyKDgxNCk7CisgICAgICAgICAgICAgICAgX0luc2VydFdpZHRoQXJyYXkxKHBGb250LCBwRW5jb2RpbmcsIDB4MjEsIDB4N2UsIHBXaWR0aEFycmF5KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRlhGT05UX0hBTkdFVUxfQ0hBUlNFVDoKKyAgICAgICAgICAgICAgICBjbWFwID0gYlZlcnQgPyAiS1NDbXMtVUhDLVYiIDogIktTQ21zLVVIQy1IIjsKKyAgICAgICAgICAgICAgICBvcmRlcmluZyA9ICJLb3JlYTEiOworICAgICAgICAgICAgICAgIHN1cHBsZW1lbnQgPSAyOworICAgICAgICAgICAgICAgIHBXaWR0aEFycmF5LT5BZGRJbnRlZ2VyKDEpOworICAgICAgICAgICAgICAgIF9JbnNlcnRXaWR0aEFycmF5MShwRm9udCwgcEVuY29kaW5nLCAweDIwLCAweDdlLCBwV2lkdGhBcnJheSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZYRk9OVF9TSElGVEpJU19DSEFSU0VUOgorICAgICAgICAgICAgICAgIGNtYXAgPSBiVmVydCA/ICI5MG1zLVJLU0otViIgOiAiOTBtcy1SS1NKLUgiOworICAgICAgICAgICAgICAgIG9yZGVyaW5nID0gIkphcGFuMSI7CisgICAgICAgICAgICAgICAgc3VwcGxlbWVudCA9IDU7CisgICAgICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoMjMxKTsKKyAgICAgICAgICAgICAgICBfSW5zZXJ0V2lkdGhBcnJheTEocEZvbnQsIHBFbmNvZGluZywgMHgyMCwgMHg3ZCwgcFdpZHRoQXJyYXkpOworICAgICAgICAgICAgICAgIHBXaWR0aEFycmF5LT5BZGRJbnRlZ2VyKDMyNik7CisgICAgICAgICAgICAgICAgX0luc2VydFdpZHRoQXJyYXkxKHBGb250LCBwRW5jb2RpbmcsIDB4YTAsIDB4YTAsIHBXaWR0aEFycmF5KTsKKyAgICAgICAgICAgICAgICBwV2lkdGhBcnJheS0+QWRkSW50ZWdlcigzMjcpOworICAgICAgICAgICAgICAgIF9JbnNlcnRXaWR0aEFycmF5MShwRm9udCwgcEVuY29kaW5nLCAweGExLCAweGRmLCBwV2lkdGhBcnJheSk7CisgICAgICAgICAgICAgICAgcFdpZHRoQXJyYXktPkFkZEludGVnZXIoNjMxKTsKKyAgICAgICAgICAgICAgICBfSW5zZXJ0V2lkdGhBcnJheTEocEZvbnQsIHBFbmNvZGluZywgMHg3ZSwgMHg3ZSwgcFdpZHRoQXJyYXkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHBCYXNlRGljdC0+U2V0QXROYW1lKCJTdWJ0eXBlIiwgIlR5cGUwIik7CisgICAgICAgIHBCYXNlRGljdC0+U2V0QXROYW1lKCJCYXNlRm9udCIsIGJhc2Vmb250KTsKKyAgICAgICAgcEJhc2VEaWN0LT5TZXRBdE5hbWUoIkVuY29kaW5nIiwgY21hcCk7CisgICAgICAgIHBGb250RGljdC0+U2V0QXQoIlciLCBwV2lkdGhBcnJheSk7CisgICAgICAgIHBGb250RGljdC0+U2V0QXROYW1lKCJUeXBlIiwgIkZvbnQiKTsKKyAgICAgICAgcEZvbnREaWN0LT5TZXRBdE5hbWUoIlN1YnR5cGUiLCAiQ0lERm9udFR5cGUyIik7CisgICAgICAgIHBGb250RGljdC0+U2V0QXROYW1lKCJCYXNlRm9udCIsIGJhc2Vmb250KTsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwQ0lEU3lzSW5mbyA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7CisgICAgICAgIHBDSURTeXNJbmZvLT5TZXRBdFN0cmluZygiUmVnaXN0cnkiLCAiQWRvYmUiKTsKKyAgICAgICAgcENJRFN5c0luZm8tPlNldEF0U3RyaW5nKCJPcmRlcmluZyIsIG9yZGVyaW5nKTsKKyAgICAgICAgcENJRFN5c0luZm8tPlNldEF0SW50ZWdlcigiU3VwcGxlbWVudCIsIHN1cHBsZW1lbnQpOworICAgICAgICBwRm9udERpY3QtPlNldEF0KCJDSURTeXN0ZW1JbmZvIiwgcENJRFN5c0luZm8pOworICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBGWF9ORVcgQ1BERl9BcnJheTsKKyAgICAgICAgcEJhc2VEaWN0LT5TZXRBdCgiRGVzY2VuZGFudEZvbnRzIiwgcEFycmF5KTsKKyAgICAgICAgQWRkSW5kaXJlY3RPYmplY3QocEZvbnREaWN0KTsKKyAgICAgICAgcEFycmF5LT5BZGRSZWZlcmVuY2UodGhpcywgcEZvbnREaWN0KTsKKyAgICB9CisgICAgQWRkSW5kaXJlY3RPYmplY3QocEJhc2VEaWN0KTsKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBGb250RGVzYyA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7CisgICAgcEZvbnREZXNjLT5TZXRBdE5hbWUoIlR5cGUiLCAiRm9udERlc2NyaXB0b3IiKTsKKyAgICBwRm9udERlc2MtPlNldEF0TmFtZSgiRm9udE5hbWUiLCBiYXNlZm9udCk7CisgICAgcEZvbnREZXNjLT5TZXRBdEludGVnZXIoIkZsYWdzIiwgZmxhZ3MpOworICAgIHBGb250RGVzYy0+U2V0QXRJbnRlZ2VyKCJJdGFsaWNBbmdsZSIsIHBGb250LT5tX3BTdWJzdEZvbnQgPyBwRm9udC0+bV9wU3Vic3RGb250LT5tX0l0YWxpY0FuZ2xlIDogMCk7CisgICAgcEZvbnREZXNjLT5TZXRBdEludGVnZXIoIkFzY2VudCIsIHBGb250LT5HZXRBc2NlbnQoKSk7CisgICAgcEZvbnREZXNjLT5TZXRBdEludGVnZXIoIkRlc2NlbnQiLCBwRm9udC0+R2V0RGVzY2VudCgpKTsKKyAgICBGWF9SRUNUIGJib3g7CisgICAgcEZvbnQtPkdldEJCb3goYmJveCk7CisgICAgQ1BERl9BcnJheSogcEJCb3ggPSBGWF9ORVcgQ1BERl9BcnJheTsKKyAgICBwQkJveC0+QWRkSW50ZWdlcihiYm94LmxlZnQpOworICAgIHBCQm94LT5BZGRJbnRlZ2VyKGJib3guYm90dG9tKTsKKyAgICBwQkJveC0+QWRkSW50ZWdlcihiYm94LnJpZ2h0KTsKKyAgICBwQkJveC0+QWRkSW50ZWdlcihiYm94LnRvcCk7CisgICAgcEZvbnREZXNjLT5TZXRBdCgiRm9udEJCb3giLCBwQkJveCk7CisgICAgRlhfSU5UMzIgblN0ZW1WID0gMDsKKyAgICBpZiAocEZvbnQtPm1fcFN1YnN0Rm9udCkgeworICAgICAgICBuU3RlbVYgPSBwRm9udC0+bV9wU3Vic3RGb250LT5tX1dlaWdodCAvIDU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZYX0NIQVIgc3RlbV9jaGFyc1tdID0geydpJywgJ0knLCAnIScsICcxJ307CisgICAgICAgIGNvbnN0IHNpemVfdCBjb3VudCA9IHNpemVvZihzdGVtX2NoYXJzKSAvIHNpemVvZihzdGVtX2NoYXJzWzBdKTsKKyAgICAgICAgRlhfRFdPUkQgZ2x5cGggPSBwRW5jb2RpbmctPkdseXBoRnJvbUNoYXJDb2RlKHN0ZW1fY2hhcnNbMF0pOworICAgICAgICBuU3RlbVYgPSBwRm9udC0+R2V0R2x5cGhXaWR0aChnbHlwaCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgZ2x5cGggPSBwRW5jb2RpbmctPkdseXBoRnJvbUNoYXJDb2RlKHN0ZW1fY2hhcnNbaV0pOworICAgICAgICAgICAgaW50IHdpZHRoID0gcEZvbnQtPkdldEdseXBoV2lkdGgoZ2x5cGgpOworICAgICAgICAgICAgaWYgKHdpZHRoID4gMCAmJiB3aWR0aCA8IG5TdGVtVikgeworICAgICAgICAgICAgICAgIG5TdGVtViA9IHdpZHRoOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChwRW5jb2RpbmcpIHsKKyAgICAgICAgZGVsZXRlIHBFbmNvZGluZzsKKyAgICB9CisgICAgcEZvbnREZXNjLT5TZXRBdEludGVnZXIoIlN0ZW1WIiwgblN0ZW1WKTsKKyAgICBBZGRJbmRpcmVjdE9iamVjdChwRm9udERlc2MpOworICAgIHBGb250RGljdC0+U2V0QXRSZWZlcmVuY2UoIkZvbnREZXNjcmlwdG9yIiwgdGhpcywgcEZvbnREZXNjKTsKKyAgICByZXR1cm4gTG9hZEZvbnQocEJhc2VEaWN0KTsKK30KK3N0YXRpYyBDUERGX1N0cmVhbSogR2V0Rm9ybVN0cmVhbShDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX09iamVjdCogcFJlc09iaikKK3sKKyAgICBpZiAocFJlc09iai0+R2V0VHlwZSgpICE9IFBERk9CSl9SRUZFUkVOQ0UpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfUmVmZXJlbmNlKiBwUmVmID0gKENQREZfUmVmZXJlbmNlKilwUmVzT2JqOworICAgIEZYX0JPT0wgYkZvcm07CisgICAgaWYgKHBEb2MtPklzRm9ybVN0cmVhbShwUmVmLT5HZXRSZWZPYmpOdW0oKSwgYkZvcm0pICYmICFiRm9ybSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcFJlc09iaiA9IHBSZWYtPkdldERpcmVjdCgpOworICAgIGlmIChwUmVzT2JqLT5HZXRUeXBlKCkgIT0gUERGT0JKX1NUUkVBTSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9TdHJlYW0qIHBYT2JqZWN0ID0gKENQREZfU3RyZWFtKilwUmVzT2JqOworICAgIGlmIChwWE9iamVjdC0+R2V0RGljdCgpLT5HZXRTdHJpbmcoRlhfQlNUUkMoIlN1YnR5cGUiKSkgIT0gRlhfQlNUUkMoIkZvcm0iKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHBYT2JqZWN0OworfQorc3RhdGljIGludCBJbnNlcnREZWxldGVQREZQYWdlKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfRGljdGlvbmFyeSogcFBhZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuUGFnZXNUb0dvLCBDUERGX0RpY3Rpb25hcnkqIHBQYWdlLCBGWF9CT09MIGJJbnNlcnQsIENGWF9QdHJBcnJheSYgc3RhY2tMaXN0KQoreworICAgIENQREZfQXJyYXkqIHBLaWRMaXN0ID0gcFBhZ2VzLT5HZXRBcnJheSgiS2lkcyIpOworICAgIGlmICghcEtpZExpc3QpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpbnQgbktpZHMgPSBwS2lkTGlzdC0+R2V0Q291bnQoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5LaWRzOyBpICsrKSB7CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcEtpZCA9IHBLaWRMaXN0LT5HZXREaWN0KGkpOworICAgICAgICBpZiAocEtpZC0+R2V0U3RyaW5nKCJUeXBlIikgPT0gRlhfQlNUUkMoIlBhZ2UiKSkgeworICAgICAgICAgICAgaWYgKG5QYWdlc1RvR28gPT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChiSW5zZXJ0KSB7CisgICAgICAgICAgICAgICAgICAgIHBLaWRMaXN0LT5JbnNlcnRBdChpLCBDUERGX1JlZmVyZW5jZTo6Q3JlYXRlKHBEb2MsIHBQYWdlLT5HZXRPYmpOdW0oKSkpOworICAgICAgICAgICAgICAgICAgICBwUGFnZS0+U2V0QXRSZWZlcmVuY2UoIlBhcmVudCIsIHBEb2MsIHBQYWdlcy0+R2V0T2JqTnVtKCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBLaWRMaXN0LT5SZW1vdmVBdChpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcFBhZ2VzLT5TZXRBdEludGVnZXIoIkNvdW50IiwgcFBhZ2VzLT5HZXRJbnRlZ2VyKCJDb3VudCIpICsgKGJJbnNlcnQgPyAxIDogLTEpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5QYWdlc1RvR28gLS07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgblBhZ2VzID0gcEtpZC0+R2V0SW50ZWdlcigiQ291bnQiKTsKKyAgICAgICAgICAgIGlmIChuUGFnZXNUb0dvIDwgblBhZ2VzKSB7CisgICAgICAgICAgICAgICAgaW50IHN0YWNrQ291bnQgPSBzdGFja0xpc3QuR2V0U2l6ZSgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc3RhY2tDb3VudDsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwS2lkID09IHN0YWNrTGlzdFtqXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0YWNrTGlzdC5BZGQocEtpZCk7CisgICAgICAgICAgICAgICAgaWYgKEluc2VydERlbGV0ZVBERlBhZ2UocERvYywgcEtpZCwgblBhZ2VzVG9HbywgcFBhZ2UsIGJJbnNlcnQsIHN0YWNrTGlzdCkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RhY2tMaXN0LlJlbW92ZUF0KHN0YWNrQ291bnQpOworICAgICAgICAgICAgICAgIHBQYWdlcy0+U2V0QXRJbnRlZ2VyKCJDb3VudCIsIHBQYWdlcy0+R2V0SW50ZWdlcigiQ291bnQiKSArIChiSW5zZXJ0ID8gMSA6IC0xKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBuUGFnZXNUb0dvIC09IG5QYWdlczsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KK3N0YXRpYyBpbnQgSW5zZXJ0TmV3UGFnZShDUERGX0RvY3VtZW50KiBwRG9jLCBpbnQgaVBhZ2UsIENQREZfRGljdGlvbmFyeSogcFBhZ2VEaWN0LCBDRlhfRFdvcmRBcnJheSAmcGFnZUxpc3QpCit7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUm9vdCA9IHBEb2MtPkdldFJvb3QoKTsKKyAgICBpZiAoIXBSb290KSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZXMgPSBwUm9vdC0+R2V0RGljdChGWF9CU1RSQygiUGFnZXMiKSk7CisgICAgaWYgKCFwUGFnZXMpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpbnQgblBhZ2VzID0gcERvYy0+R2V0UGFnZUNvdW50KCk7CisgICAgaWYgKGlQYWdlIDwgMCB8fCBpUGFnZSA+IG5QYWdlcykgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChpUGFnZSA9PSBuUGFnZXMpIHsKKyAgICAgICAgQ1BERl9BcnJheSogcFBhZ2VzTGlzdCA9IHBQYWdlcy0+R2V0QXJyYXkoRlhfQlNUUkMoIktpZHMiKSk7CisgICAgICAgIGlmICghcFBhZ2VzTGlzdCkgeworICAgICAgICAgICAgcFBhZ2VzTGlzdCA9IEZYX05FVyBDUERGX0FycmF5OworICAgICAgICAgICAgcFBhZ2VzLT5TZXRBdChGWF9CU1RSQygiS2lkcyIpLCBwUGFnZXNMaXN0KTsKKyAgICAgICAgfQorICAgICAgICBwUGFnZXNMaXN0LT5BZGQocFBhZ2VEaWN0LCBwRG9jKTsKKyAgICAgICAgcFBhZ2VzLT5TZXRBdEludGVnZXIoRlhfQlNUUkMoIkNvdW50IiksIG5QYWdlcyArIDEpOworICAgICAgICBwUGFnZURpY3QtPlNldEF0UmVmZXJlbmNlKEZYX0JTVFJDKCJQYXJlbnQiKSwgcERvYywgcFBhZ2VzLT5HZXRPYmpOdW0oKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQ0ZYX1B0ckFycmF5IHN0YWNrOworICAgICAgICBzdGFjay5BZGQocFBhZ2VzKTsKKyAgICAgICAgaWYgKEluc2VydERlbGV0ZVBERlBhZ2UocERvYywgcFBhZ2VzLCBpUGFnZSwgcFBhZ2VEaWN0LCBUUlVFLCBzdGFjaykgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgcGFnZUxpc3QuSW5zZXJ0QXQoaVBhZ2UsIHBQYWdlRGljdC0+R2V0T2JqTnVtKCkpOworICAgIHJldHVybiBpUGFnZTsKK30KK0NQREZfRGljdGlvbmFyeSogQ1BERl9Eb2N1bWVudDo6Q3JlYXRlTmV3UGFnZShpbnQgaVBhZ2UpCit7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7CisgICAgcERpY3QtPlNldEF0TmFtZSgiVHlwZSIsICJQYWdlIik7CisgICAgRlhfRFdPUkQgZHdPYmpOdW0gPSBBZGRJbmRpcmVjdE9iamVjdChwRGljdCk7CisgICAgaWYgKEluc2VydE5ld1BhZ2UodGhpcywgaVBhZ2UsIHBEaWN0LCBtX1BhZ2VMaXN0KSA8IDApIHsKKyAgICAgICAgUmVsZWFzZUluZGlyZWN0T2JqZWN0KGR3T2JqTnVtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBwRGljdDsKK30KK2ludCBfUERGX0dldFN0YW5kYXJkRm9udE5hbWUoQ0ZYX0J5dGVTdHJpbmcmIG5hbWUpOworQ1BERl9Gb250KiBDUERGX0RvY3VtZW50OjpBZGRTdGFuZGFyZEZvbnQoRlhfTFBDU1RSIGZvbnQsIENQREZfRm9udEVuY29kaW5nKiBwRW5jb2RpbmcpCit7CisgICAgQ0ZYX0J5dGVTdHJpbmcgbmFtZShmb250LCAtMSk7CisgICAgaWYgKF9QREZfR2V0U3RhbmRhcmRGb250TmFtZShuYW1lKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBHZXRQYWdlRGF0YSgpLT5HZXRTdGFuZGFyZEZvbnQobmFtZSwgcEVuY29kaW5nKTsKK30KK3ZvaWQgQ1BERl9Eb2N1bWVudDo6RGVsZXRlUGFnZShpbnQgaVBhZ2UpCit7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUm9vdCA9IEdldFJvb3QoKTsKKyAgICBpZiAocFJvb3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcFBhZ2VzID0gcFJvb3QtPkdldERpY3QoIlBhZ2VzIik7CisgICAgaWYgKHBQYWdlcyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IG5QYWdlcyA9IHBQYWdlcy0+R2V0SW50ZWdlcigiQ291bnQiKTsKKyAgICBpZiAoaVBhZ2UgPCAwIHx8IGlQYWdlID49IG5QYWdlcykgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENGWF9QdHJBcnJheSBzdGFjazsKKyAgICBzdGFjay5BZGQocFBhZ2VzKTsKKyAgICBpZiAoSW5zZXJ0RGVsZXRlUERGUGFnZSh0aGlzLCBwUGFnZXMsIGlQYWdlLCBOVUxMLCBGQUxTRSwgc3RhY2spIDwgMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fUGFnZUxpc3QuUmVtb3ZlQXQoaVBhZ2UpOworfQorQ1BERl9PYmplY3QqIEZQREZBUElfR2V0UGFnZUF0dHIoQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QsIEZYX0JTVFIgbmFtZSk7Cit2b2lkIEZQREZBUElfRmxhdFBhZ2VBdHRyKENQREZfRGljdGlvbmFyeSogcFBhZ2VEaWN0LCBGWF9CU1RSIG5hbWUpCit7CisgICAgaWYgKHBQYWdlRGljdC0+S2V5RXhpc3QobmFtZSkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX09iamVjdCogcE9iaiA9IEZQREZBUElfR2V0UGFnZUF0dHIocFBhZ2VEaWN0LCBuYW1lKTsKKyAgICBpZiAocE9iaikgeworICAgICAgICBwUGFnZURpY3QtPlNldEF0KG5hbWUsIHBPYmotPkNsb25lKCkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9lZGl0L2ZwZGZfZWRpdF9pbWFnZS5jcHAgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfZWRpdC9mcGRmX2VkaXRfaW1hZ2UuY3BwCmluZGV4IGNiNTA2MDEuLmQ3M2Q3NjEgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9lZGl0L2ZwZGZfZWRpdF9pbWFnZS5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2VkaXQvZnBkZl9lZGl0X2ltYWdlLmNwcApAQCAtMSwzNzQgKzEsMzc0IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfbW9kdWxlLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2UuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3JlbmRlci5oIg0KLSNpbmNsdWRlICIuLi9mcGRmX3BhZ2UvcGFnZWludC5oIg0KLSNpbmNsdWRlICIuLi9mcGRmX3JlbmRlci9yZW5kZXJfaW50LmgiDQotQ1BERl9EaWN0aW9uYXJ5KiBDUERGX0ltYWdlOjpJbml0SlBFRyhGWF9MUEJZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUpDQotew0KLSAgICBGWF9JTlQzMiB3aWR0aCwgaGVpZ2h0LCBjb2xvcl90cmFucywgbnVtX2NvbXBzLCBiaXRzOw0KLSAgICBpZiAoIUNQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0SnBlZ01vZHVsZSgpLT4NCi0gICAgICAgICAgICBMb2FkSW5mbyhwRGF0YSwgc2l6ZSwgd2lkdGgsIGhlaWdodCwgbnVtX2NvbXBzLCBiaXRzLCBjb2xvcl90cmFucykpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5Ow0KLSAgICBwRGljdC0+U2V0QXROYW1lKCJUeXBlIiwgIlhPYmplY3QiKTsNCi0gICAgcERpY3QtPlNldEF0TmFtZSgiU3VidHlwZSIsICJJbWFnZSIpOw0KLSAgICBwRGljdC0+U2V0QXRJbnRlZ2VyKCJXaWR0aCIsIHdpZHRoKTsNCi0gICAgcERpY3QtPlNldEF0SW50ZWdlcigiSGVpZ2h0IiwgaGVpZ2h0KTsNCi0gICAgRlhfTFBDU1RSIGNzbmFtZSA9IE5VTEw7DQotICAgIGlmIChudW1fY29tcHMgPT0gMSkgew0KLSAgICAgICAgY3NuYW1lID0gIkRldmljZUdyYXkiOw0KLSAgICB9IGVsc2UgaWYgKG51bV9jb21wcyA9PSAzKSB7DQotICAgICAgICBjc25hbWUgPSAiRGV2aWNlUkdCIjsNCi0gICAgfSBlbHNlIGlmIChudW1fY29tcHMgPT0gNCkgew0KLSAgICAgICAgY3NuYW1lID0gIkRldmljZUNNWUsiOw0KLSAgICAgICAgQ1BERl9BcnJheSogcERlY29kZSA9IENQREZfQXJyYXk6OkNyZWF0ZSgpOw0KLSAgICAgICAgZm9yIChpbnQgbiA9IDA7IG4gPCA0OyBuICsrKSB7DQotICAgICAgICAgICAgcERlY29kZS0+QWRkSW50ZWdlcigxKTsNCi0gICAgICAgICAgICBwRGVjb2RlLT5BZGRJbnRlZ2VyKDApOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcERpY3QtPlNldEF0KEZYX0JTVFJDKCJEZWNvZGUiKSwgcERlY29kZSk7DQotICAgIH0NCi0gICAgcERpY3QtPlNldEF0TmFtZSgiQ29sb3JTcGFjZSIsIGNzbmFtZSk7DQotICAgIHBEaWN0LT5TZXRBdEludGVnZXIoIkJpdHNQZXJDb21wb25lbnQiLCBiaXRzKTsNCi0gICAgcERpY3QtPlNldEF0TmFtZSgiRmlsdGVyIiwgIkRDVERlY29kZSIpOw0KLSAgICBpZiAoIWNvbG9yX3RyYW5zKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBQYXJtcyA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7DQotICAgICAgICBwRGljdC0+U2V0QXQoIkRlY29kZVBhcm1zIiwgcFBhcm1zKTsNCi0gICAgICAgIHBQYXJtcy0+U2V0QXRJbnRlZ2VyKCJDb2xvclRyYW5zZm9ybSIsIDApOw0KLSAgICB9DQotICAgIG1fYklzTWFzayA9IEZBTFNFOw0KLSAgICBtX1dpZHRoID0gd2lkdGg7DQotICAgIG1fSGVpZ2h0ID0gaGVpZ2h0Ow0KLSAgICBpZiAobV9wU3RyZWFtID09IE5VTEwpIHsNCi0gICAgICAgIG1fcFN0cmVhbSA9IEZYX05FVyBDUERGX1N0cmVhbShOVUxMLCAwLCBOVUxMKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gcERpY3Q7DQotfQ0KLXZvaWQgQ1BERl9JbWFnZTo6U2V0SnBlZ0ltYWdlKEZYX0xQQllURSBwRGF0YSwgRlhfRFdPUkQgc2l6ZSkNCi17DQotICAgIENQREZfRGljdGlvbmFyeSAqcERpY3QgPSBJbml0SlBFRyhwRGF0YSwgc2l6ZSk7DQotICAgIGlmICghcERpY3QpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX3BTdHJlYW0tPkluaXRTdHJlYW0ocERhdGEsIHNpemUsIHBEaWN0KTsNCi19DQotdm9pZCBDUERGX0ltYWdlOjpTZXRKcGVnSW1hZ2UoSUZYX0ZpbGVSZWFkICpwRmlsZSkNCi17DQotICAgIEZYX0RXT1JEIHNpemUgPSAoRlhfRFdPUkQpcEZpbGUtPkdldFNpemUoKTsNCi0gICAgaWYgKCFzaXplKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhfRFdPUkQgZHdFc3RpbWF0ZVNpemUgPSBzaXplOw0KLSAgICBpZiAoZHdFc3RpbWF0ZVNpemUgPiA4MTkyKSB7DQotICAgICAgICBkd0VzdGltYXRlU2l6ZSA9IDgxOTI7DQotICAgIH0NCi0gICAgRlhfTFBCWVRFIHBEYXRhID0gRlhfQWxsb2MoRlhfQllURSwgZHdFc3RpbWF0ZVNpemUpOw0KLSAgICBpZiAoIXBEYXRhKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgcEZpbGUtPlJlYWRCbG9jayhwRGF0YSwgMCwgZHdFc3RpbWF0ZVNpemUpOw0KLSAgICBDUERGX0RpY3Rpb25hcnkgKnBEaWN0ID0gSW5pdEpQRUcocERhdGEsIGR3RXN0aW1hdGVTaXplKTsNCi0gICAgRlhfRnJlZShwRGF0YSk7DQotICAgIGlmICghcERpY3QgJiYgc2l6ZSA+IGR3RXN0aW1hdGVTaXplKSB7DQotICAgICAgICBwRGF0YSA9IEZYX0FsbG9jKEZYX0JZVEUsIHNpemUpOw0KLSAgICAgICAgaWYgKCFwRGF0YSkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIHBGaWxlLT5SZWFkQmxvY2socERhdGEsIDAsIHNpemUpOw0KLSAgICAgICAgcERpY3QgPSBJbml0SlBFRyhwRGF0YSwgc2l6ZSk7DQotICAgICAgICBGWF9GcmVlKHBEYXRhKTsNCi0gICAgfQ0KLSAgICBpZiAoIXBEaWN0KSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbV9wU3RyZWFtLT5Jbml0U3RyZWFtKHBGaWxlLCBwRGljdCk7DQotfQ0KLXZvaWQgX0RDVEVuY29kZUJpdG1hcChDUERGX0RpY3Rpb25hcnkgKnBCaXRtYXBEaWN0LCBjb25zdCBDRlhfRElCaXRtYXAqIHBCaXRtYXAsIGludCBxdWFsaXR5LCBGWF9MUEJZVEUgJmJ1ZiwgRlhfU1RSU0laRSAmc2l6ZSkNCi17DQotfQ0KLXZvaWQgX0pCSUcyRW5jb2RlQml0bWFwKENQREZfRGljdGlvbmFyeSAqcEJpdG1hcERpY3QsIGNvbnN0IENGWF9ESUJpdG1hcCAqcEJpdG1hcCwgQ1BERl9Eb2N1bWVudCAqcERvYywgRlhfTFBCWVRFICZidWYsIEZYX1NUUlNJWkUgJnNpemUsIEZYX0JPT0wgYkxvc3NMZXNzKQ0KLXsNCi19DQotdm9pZCBDUERGX0ltYWdlOjpTZXRJbWFnZShjb25zdCBDRlhfRElCaXRtYXAqIHBCaXRtYXAsIEZYX0lOVDMyIGlDb21wcmVzcywgSUZYX0ZpbGVXcml0ZSAqcEZpbGVXcml0ZSwgSUZYX0ZpbGVSZWFkICpwRmlsZVJlYWQsIGNvbnN0IENGWF9ESUJpdG1hcCogcE1hc2ssIGNvbnN0IENQREZfSW1hZ2VTZXRQYXJhbSogcFBhcmFtKQ0KLXsNCi0gICAgRlhfSU5UMzIgQml0bWFwV2lkdGggPSBwQml0bWFwLT5HZXRXaWR0aCgpOw0KLSAgICBGWF9JTlQzMiBCaXRtYXBIZWlnaHQgPSBwQml0bWFwLT5HZXRIZWlnaHQoKTsNCi0gICAgaWYgKEJpdG1hcFdpZHRoIDwgMSB8fCBCaXRtYXBIZWlnaHQgPCAxKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhfTFBCWVRFIHNyY19idWYgPSBwQml0bWFwLT5HZXRCdWZmZXIoKTsNCi0gICAgRlhfSU5UMzIgc3JjX3BpdGNoID0gcEJpdG1hcC0+R2V0UGl0Y2goKTsNCi0gICAgRlhfSU5UMzIgYnBwID0gcEJpdG1hcC0+R2V0QlBQKCk7DQotICAgIEZYX0JPT0wgYlVzZU1hdHRlID0gcFBhcmFtICYmIHBQYXJhbS0+cE1hdHRlQ29sb3IgJiYgKHBCaXRtYXAtPkdldEZvcm1hdCgpID09IEZYRElCX0FyZ2IpOw0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsNCi0gICAgcERpY3QtPlNldEF0TmFtZShGWF9CU1RSQygiVHlwZSIpLCBGWF9CU1RSQygiWE9iamVjdCIpKTsNCi0gICAgcERpY3QtPlNldEF0TmFtZShGWF9CU1RSQygiU3VidHlwZSIpLCBGWF9CU1RSQygiSW1hZ2UiKSk7DQotICAgIHBEaWN0LT5TZXRBdEludGVnZXIoRlhfQlNUUkMoIldpZHRoIiksIEJpdG1hcFdpZHRoKTsNCi0gICAgcERpY3QtPlNldEF0SW50ZWdlcihGWF9CU1RSQygiSGVpZ2h0IiksIEJpdG1hcEhlaWdodCk7DQotICAgIEZYX0xQQllURSBkZXN0X2J1ZiA9IE5VTEw7DQotICAgIEZYX1NUUlNJWkUgZGVzdF9waXRjaCA9IDAsIGRlc3Rfc2l6ZSA9IDAsIG9wVHlwZSA9IC0xOw0KLSAgICBpZiAoYnBwID09IDEpIHsNCi0gICAgICAgIEZYX0lOVDMyIHJlc2V0X2EgPSAwLCByZXNldF9yID0gMCwgcmVzZXRfZyA9IDAsIHJlc2V0X2IgPSAwOw0KLSAgICAgICAgRlhfSU5UMzIgc2V0X2EgPSAwLCBzZXRfciA9IDAsIHNldF9nID0gMCwgc2V0X2IgPSAwOw0KLSAgICAgICAgaWYgKCFwQml0bWFwLT5Jc0FscGhhTWFzaygpKSB7DQotICAgICAgICAgICAgQXJnYkRlY29kZShwQml0bWFwLT5HZXRQYWxldHRlQXJnYigwKSwgcmVzZXRfYSwgcmVzZXRfciwgcmVzZXRfZywgcmVzZXRfYik7DQotICAgICAgICAgICAgQXJnYkRlY29kZShwQml0bWFwLT5HZXRQYWxldHRlQXJnYigxKSwgc2V0X2EsIHNldF9yLCBzZXRfZywgc2V0X2IpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHNldF9hID09IDAgfHwgcmVzZXRfYSA9PSAwKSB7DQotICAgICAgICAgICAgcERpY3QtPlNldEF0KEZYX0JTVFJDKCJJbWFnZU1hc2siKSwgRlhfTkVXIENQREZfQm9vbGVhbihUUlVFKSk7DQotICAgICAgICAgICAgaWYgKHJlc2V0X2EgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBGWF9ORVcgQ1BERl9BcnJheTsNCi0gICAgICAgICAgICAgICAgcEFycmF5LT5BZGRJbnRlZ2VyKDEpOw0KLSAgICAgICAgICAgICAgICBwQXJyYXktPkFkZEludGVnZXIoMCk7DQotICAgICAgICAgICAgICAgIHBEaWN0LT5TZXRBdChGWF9CU1RSQygiRGVjb2RlIiksIHBBcnJheSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBDUERGX0FycmF5KiBwQ1MgPSBGWF9ORVcgQ1BERl9BcnJheTsNCi0gICAgICAgICAgICBwQ1MtPkFkZE5hbWUoRlhfQlNUUkMoIkluZGV4ZWQiKSk7DQotICAgICAgICAgICAgcENTLT5BZGROYW1lKEZYX0JTVFJDKCJEZXZpY2VSR0IiKSk7DQotICAgICAgICAgICAgcENTLT5BZGRJbnRlZ2VyKDEpOw0KLSAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGN0Ow0KLSAgICAgICAgICAgIEZYX0xQU1RSIHBCdWYgPSBjdC5HZXRCdWZmZXIoNik7DQotICAgICAgICAgICAgcEJ1ZlswXSA9IChGWF9DSEFSKXJlc2V0X3I7DQotICAgICAgICAgICAgcEJ1ZlsxXSA9IChGWF9DSEFSKXJlc2V0X2c7DQotICAgICAgICAgICAgcEJ1ZlsyXSA9IChGWF9DSEFSKXJlc2V0X2I7DQotICAgICAgICAgICAgcEJ1ZlszXSA9IChGWF9DSEFSKXNldF9yOw0KLSAgICAgICAgICAgIHBCdWZbNF0gPSAoRlhfQ0hBUilzZXRfZzsNCi0gICAgICAgICAgICBwQnVmWzVdID0gKEZYX0NIQVIpc2V0X2I7DQotICAgICAgICAgICAgY3QuUmVsZWFzZUJ1ZmZlcig2KTsNCi0gICAgICAgICAgICBwQ1MtPkFkZChDUERGX1N0cmluZzo6Q3JlYXRlKGN0LCBUUlVFKSk7DQotICAgICAgICAgICAgcERpY3QtPlNldEF0KEZYX0JTVFJDKCJDb2xvclNwYWNlIiksIHBDUyk7DQotICAgICAgICB9DQotICAgICAgICBwRGljdC0+U2V0QXRJbnRlZ2VyKEZYX0JTVFJDKCJCaXRzUGVyQ29tcG9uZW50IiksIDEpOw0KLSAgICAgICAgZGVzdF9waXRjaCA9IChCaXRtYXBXaWR0aCArIDcpIC8gODsNCi0gICAgICAgIGlmICgoaUNvbXByZXNzICYgMHgwMykgPT0gUERGX0lNQUdFX05PX0NPTVBSRVNTKSB7DQotICAgICAgICAgICAgb3BUeXBlID0gMTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgb3BUeXBlID0gMDsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIGlmIChicHAgPT0gOCkgew0KLSAgICAgICAgRlhfSU5UMzIgaVBhbGV0dGUgPSBwQml0bWFwLT5HZXRQYWxldHRlU2l6ZSgpOw0KLSAgICAgICAgaWYgKGlQYWxldHRlID4gMCkgew0KLSAgICAgICAgICAgIENQREZfQXJyYXkqIHBDUyA9IEZYX05FVyBDUERGX0FycmF5Ow0KLSAgICAgICAgICAgIG1fcERvY3VtZW50LT5BZGRJbmRpcmVjdE9iamVjdChwQ1MpOw0KLSAgICAgICAgICAgIHBDUy0+QWRkTmFtZShGWF9CU1RSQygiSW5kZXhlZCIpKTsNCi0gICAgICAgICAgICBwQ1MtPkFkZE5hbWUoRlhfQlNUUkMoIkRldmljZVJHQiIpKTsNCi0gICAgICAgICAgICBwQ1MtPkFkZEludGVnZXIoaVBhbGV0dGUgLSAxKTsNCi0gICAgICAgICAgICBGWF9MUEJZVEUgcENvbG9yVGFibGUgPSBGWF9BbGxvYyhGWF9CWVRFLCBpUGFsZXR0ZSAqIDMpOw0KLSAgICAgICAgICAgIEZYX0xQQllURSBwdHIgPSBwQ29sb3JUYWJsZTsNCi0gICAgICAgICAgICBmb3IgKEZYX0lOVDMyIGkgPSAwOyBpIDwgaVBhbGV0dGU7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgRlhfRFdPUkQgYXJnYiA9IHBCaXRtYXAtPkdldFBhbGV0dGVBcmdiKGkpOw0KLSAgICAgICAgICAgICAgICBwdHJbMF0gPSAoRlhfQllURSkoYXJnYiA+PiAxNik7DQotICAgICAgICAgICAgICAgIHB0clsxXSA9IChGWF9CWVRFKShhcmdiID4+IDgpOw0KLSAgICAgICAgICAgICAgICBwdHJbMl0gPSAoRlhfQllURSlhcmdiOw0KLSAgICAgICAgICAgICAgICBwdHIgKz0gMzsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgQ1BERl9TdHJlYW0gKnBDVFMgPSBDUERGX1N0cmVhbTo6Q3JlYXRlKHBDb2xvclRhYmxlLCBpUGFsZXR0ZSAqIDMsIENQREZfRGljdGlvbmFyeTo6Q3JlYXRlKCkpOw0KLSAgICAgICAgICAgIG1fcERvY3VtZW50LT5BZGRJbmRpcmVjdE9iamVjdChwQ1RTKTsNCi0gICAgICAgICAgICBwQ1MtPkFkZFJlZmVyZW5jZShtX3BEb2N1bWVudCwgcENUUyk7DQotICAgICAgICAgICAgcERpY3QtPlNldEF0UmVmZXJlbmNlKEZYX0JTVFJDKCJDb2xvclNwYWNlIiksIG1fcERvY3VtZW50LCBwQ1MpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBwRGljdC0+U2V0QXROYW1lKEZYX0JTVFJDKCJDb2xvclNwYWNlIiksIEZYX0JTVFJDKCJEZXZpY2VHcmF5IikpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcERpY3QtPlNldEF0SW50ZWdlcihGWF9CU1RSQygiQml0c1BlckNvbXBvbmVudCIpLCA4KTsNCi0gICAgICAgIGlmICgoaUNvbXByZXNzICYgMHgwMykgPT0gUERGX0lNQUdFX05PX0NPTVBSRVNTKSB7DQotICAgICAgICAgICAgZGVzdF9waXRjaCA9IEJpdG1hcFdpZHRoOw0KLSAgICAgICAgICAgIG9wVHlwZSA9IDE7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIG9wVHlwZSA9IDA7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBwRGljdC0+U2V0QXROYW1lKEZYX0JTVFJDKCJDb2xvclNwYWNlIiksIEZYX0JTVFJDKCJEZXZpY2VSR0IiKSk7DQotICAgICAgICBwRGljdC0+U2V0QXRJbnRlZ2VyKEZYX0JTVFJDKCJCaXRzUGVyQ29tcG9uZW50IiksIDgpOw0KLSAgICAgICAgaWYgKChpQ29tcHJlc3MgJiAweDAzKSA9PSBQREZfSU1BR0VfTk9fQ09NUFJFU1MpIHsNCi0gICAgICAgICAgICBkZXN0X3BpdGNoID0gQml0bWFwV2lkdGggKiAzOw0KLSAgICAgICAgICAgIG9wVHlwZSA9IDI7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIG9wVHlwZSA9IDA7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgY29uc3QgQ0ZYX0RJQml0bWFwKiBwTWFza0JpdG1hcCA9IE5VTEw7DQotICAgIGlmIChwQml0bWFwLT5IYXNBbHBoYSgpKSB7DQotICAgICAgICBwTWFza0JpdG1hcCA9IHBCaXRtYXAtPkdldEFscGhhTWFzaygpOw0KLSAgICB9DQotICAgIGlmICghcE1hc2tCaXRtYXAgJiYgcE1hc2spIHsNCi0gICAgICAgIEZYRElCX0Zvcm1hdCBtYXNrRm9ybWF0ID0gcE1hc2stPkdldEZvcm1hdCgpOw0KLSAgICAgICAgaWYgKG1hc2tGb3JtYXQgPT0gRlhESUJfMWJwcE1hc2sgfHwgbWFza0Zvcm1hdCA9PSBGWERJQl84YnBwTWFzaykgew0KLSAgICAgICAgICAgIHBNYXNrQml0bWFwID0gcE1hc2s7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKHBNYXNrQml0bWFwKSB7DQotICAgICAgICBGWF9JTlQzMiBtYXNrV2lkdGggPSBwTWFza0JpdG1hcC0+R2V0V2lkdGgoKTsNCi0gICAgICAgIEZYX0lOVDMyIG1hc2tIZWlnaHQgPSBwTWFza0JpdG1hcC0+R2V0SGVpZ2h0KCk7DQotICAgICAgICBGWF9MUEJZVEUgbWFza19idWYgPSBOVUxMOw0KLSAgICAgICAgRlhfU1RSU0laRSBtYXNrX3NpemU7DQotICAgICAgICBGWF9CT09MIGJEZWxldGVNYXNrID0gVFJVRTsNCi0gICAgICAgIENQREZfRGljdGlvbmFyeSogcE1hc2tEaWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsNCi0gICAgICAgIHBNYXNrRGljdC0+U2V0QXROYW1lKEZYX0JTVFJDKCJUeXBlIiksIEZYX0JTVFJDKCJYT2JqZWN0IikpOw0KLSAgICAgICAgcE1hc2tEaWN0LT5TZXRBdE5hbWUoRlhfQlNUUkMoIlN1YnR5cGUiKSwgRlhfQlNUUkMoIkltYWdlIikpOw0KLSAgICAgICAgcE1hc2tEaWN0LT5TZXRBdEludGVnZXIoRlhfQlNUUkMoIldpZHRoIiksIG1hc2tXaWR0aCk7DQotICAgICAgICBwTWFza0RpY3QtPlNldEF0SW50ZWdlcihGWF9CU1RSQygiSGVpZ2h0IiksIG1hc2tIZWlnaHQpOw0KLSAgICAgICAgcE1hc2tEaWN0LT5TZXRBdE5hbWUoRlhfQlNUUkMoIkNvbG9yU3BhY2UiKSwgRlhfQlNUUkMoIkRldmljZUdyYXkiKSk7DQotICAgICAgICBwTWFza0RpY3QtPlNldEF0SW50ZWdlcihGWF9CU1RSQygiQml0c1BlckNvbXBvbmVudCIpLCA4KTsNCi0gICAgICAgIGlmIChwTWFza0JpdG1hcC0+R2V0QlBQKCkgPT0gOCAmJiAoaUNvbXByZXNzICYgUERGX0lNQUdFX01BU0tfTE9TU1lfQ09NUFJFU1MpICE9IDApIHsNCi0gICAgICAgICAgICBfRENURW5jb2RlQml0bWFwKHBNYXNrRGljdCwgcE1hc2tCaXRtYXAsIHBQYXJhbSA/IHBQYXJhbS0+blF1YWxpdHkgOiA3NSwgbWFza19idWYsIG1hc2tfc2l6ZSk7DQotICAgICAgICB9IGVsc2UgaWYgKHBNYXNrQml0bWFwLT5HZXRGb3JtYXQoKSA9PSBGWERJQl8xYnBwTWFzaykgew0KLSAgICAgICAgICAgIF9KQklHMkVuY29kZUJpdG1hcChwTWFza0RpY3QsIHBNYXNrQml0bWFwLCBtX3BEb2N1bWVudCwgbWFza19idWYsIG1hc2tfc2l6ZSwgVFJVRSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIG1hc2tfc2l6ZSA9IG1hc2tIZWlnaHQgKiBtYXNrV2lkdGg7DQotICAgICAgICAgICAgbWFza19idWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBtYXNrX3NpemUpOw0KLSAgICAgICAgICAgIGZvciAoRlhfSU5UMzIgYSA9IDA7IGEgPCBtYXNrSGVpZ2h0OyBhICsrKSB7DQotICAgICAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKG1hc2tfYnVmICsgYSAqIG1hc2tXaWR0aCwgcE1hc2tCaXRtYXAtPkdldFNjYW5saW5lKGEpLCBtYXNrV2lkdGgpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwTWFza0RpY3QpIHsNCi0gICAgICAgICAgICBwTWFza0RpY3QtPlNldEF0SW50ZWdlcihGWF9CU1RSQygiTGVuZ3RoIiksIG1hc2tfc2l6ZSk7DQotICAgICAgICAgICAgQ1BERl9TdHJlYW0qIHBNYXNrU3RyZWFtID0gTlVMTDsNCi0gICAgICAgICAgICBpZiAoYlVzZU1hdHRlKSB7DQotICAgICAgICAgICAgICAgIGludCBhLCByLCBnLCBiOw0KLSAgICAgICAgICAgICAgICBBcmdiRGVjb2RlKCoocFBhcmFtLT5wTWF0dGVDb2xvciksIGEsIHIsIGcsIGIpOw0KLSAgICAgICAgICAgICAgICBDUERGX0FycmF5KiBwTWF0dGUgPSBGWF9ORVcgQ1BERl9BcnJheTsNCi0gICAgICAgICAgICAgICAgcE1hdHRlLT5BZGRJbnRlZ2VyKHIpOw0KLSAgICAgICAgICAgICAgICBwTWF0dGUtPkFkZEludGVnZXIoZyk7DQotICAgICAgICAgICAgICAgIHBNYXR0ZS0+QWRkSW50ZWdlcihiKTsNCi0gICAgICAgICAgICAgICAgcE1hc2tEaWN0LT5TZXRBdChGWF9CU1RSQygiTWF0dGUiKSwgcE1hdHRlKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcE1hc2tTdHJlYW0gPSBGWF9ORVcgQ1BERl9TdHJlYW0obWFza19idWYsIG1hc2tfc2l6ZSwgcE1hc2tEaWN0KTsNCi0gICAgICAgICAgICBtX3BEb2N1bWVudC0+QWRkSW5kaXJlY3RPYmplY3QocE1hc2tTdHJlYW0pOw0KLSAgICAgICAgICAgIGJEZWxldGVNYXNrID0gRkFMU0U7DQotICAgICAgICAgICAgcERpY3QtPlNldEF0UmVmZXJlbmNlKEZYX0JTVFJDKCJTTWFzayIpLCBtX3BEb2N1bWVudCwgcE1hc2tTdHJlYW0pOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBCaXRtYXAtPkhhc0FscGhhKCkpIHsNCi0gICAgICAgICAgICBkZWxldGUgcE1hc2tCaXRtYXA7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhfQk9PTCBiU3RyZWFtID0gcEZpbGVXcml0ZSAhPSBOVUxMICYmIHBGaWxlUmVhZCAhPSBOVUxMOw0KLSAgICBpZiAob3BUeXBlID09IDApIHsNCi0gICAgICAgIGlmIChpQ29tcHJlc3MgJiBQREZfSU1BR0VfTE9TU0xFU1NfQ09NUFJFU1MpIHsNCi0gICAgICAgICAgICBpZiAocEJpdG1hcC0+R2V0QlBQKCkgPT0gMSkgew0KLSAgICAgICAgICAgICAgICBfSkJJRzJFbmNvZGVCaXRtYXAocERpY3QsIHBCaXRtYXAsIG1fcERvY3VtZW50LCBkZXN0X2J1ZiwgZGVzdF9zaXplLCBUUlVFKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlmIChwQml0bWFwLT5HZXRCUFAoKSA9PSAxKSB7DQotICAgICAgICAgICAgICAgIF9KQklHMkVuY29kZUJpdG1hcChwRGljdCwgcEJpdG1hcCwgbV9wRG9jdW1lbnQsIGRlc3RfYnVmLCBkZXN0X3NpemUsIEZBTFNFKTsNCi0gICAgICAgICAgICB9IGVsc2UgaWYgKHBCaXRtYXAtPkdldEJQUCgpID49IDggJiYgcEJpdG1hcC0+R2V0UGFsZXR0ZSgpICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgQ0ZYX0RJQml0bWFwICpwTmV3Qml0bWFwID0gRlhfTkVXIENGWF9ESUJpdG1hcCgpOw0KLSAgICAgICAgICAgICAgICBwTmV3Qml0bWFwLT5Db3B5KHBCaXRtYXApOw0KLSAgICAgICAgICAgICAgICBwTmV3Qml0bWFwLT5Db252ZXJ0Rm9ybWF0KEZYRElCX1JnYik7DQotICAgICAgICAgICAgICAgIFNldEltYWdlKHBOZXdCaXRtYXAsIGlDb21wcmVzcywgcEZpbGVXcml0ZSwgcEZpbGVSZWFkKTsNCi0gICAgICAgICAgICAgICAgaWYgKHBEaWN0KSB7DQotICAgICAgICAgICAgICAgICAgICBwRGljdC0+UmVsZWFzZSgpOw0KLSAgICAgICAgICAgICAgICAgICAgcERpY3QgPSBOVUxMOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChkZXN0X2J1Zikgew0KLSAgICAgICAgICAgICAgICAgICAgRlhfRnJlZShkZXN0X2J1Zik7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X2J1ZiA9IE5VTEw7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZGVzdF9zaXplID0gMDsNCi0gICAgICAgICAgICAgICAgZGVsZXRlIHBOZXdCaXRtYXA7DQotICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBpZiAoYlVzZU1hdHRlKSB7DQotICAgICAgICAgICAgICAgICAgICBDRlhfRElCaXRtYXAgKnBOZXdCaXRtYXAgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwKCk7DQotICAgICAgICAgICAgICAgICAgICBwTmV3Qml0bWFwLT5DcmVhdGUoQml0bWFwV2lkdGgsIEJpdG1hcEhlaWdodCwgRlhESUJfQXJnYik7DQotICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZHN0X2J1ZiA9IHBOZXdCaXRtYXAtPkdldEJ1ZmZlcigpOw0KLSAgICAgICAgICAgICAgICAgICAgRlhfSU5UMzIgc3JjX29mZnNldCA9IDA7DQotICAgICAgICAgICAgICAgICAgICBmb3IgKEZYX0lOVDMyIHJvdyA9IDA7IHJvdyA8IEJpdG1hcEhlaWdodDsgcm93ICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgc3JjX29mZnNldCA9IHJvdyAqIHNyY19waXRjaDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEZYX0lOVDMyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IEJpdG1hcFdpZHRoOyBjb2x1bW4gKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQgYWxwaGEgPSBzcmNfYnVmW3NyY19vZmZzZXQgKyAzXSAvIDI1NS4wZjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2J1ZltzcmNfb2Zmc2V0XSA9IChGWF9CWVRFKShzcmNfYnVmW3NyY19vZmZzZXRdICogYWxwaGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RfYnVmW3NyY19vZmZzZXQgKyAxXSA9IChGWF9CWVRFKShzcmNfYnVmW3NyY19vZmZzZXQgKyAxXSAqIGFscGhhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2J1ZltzcmNfb2Zmc2V0ICsgMl0gPSAoRlhfQllURSkoc3JjX2J1ZltzcmNfb2Zmc2V0ICsgMl0gKiBhbHBoYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdF9idWZbc3JjX29mZnNldCArIDNdID0gKEZYX0JZVEUpKHNyY19idWZbc3JjX29mZnNldCArIDNdKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX29mZnNldCArPSA0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIF9EQ1RFbmNvZGVCaXRtYXAocERpY3QsIHBOZXdCaXRtYXAsIHBQYXJhbSA/IHBQYXJhbS0+blF1YWxpdHkgOiA3NSwgZGVzdF9idWYsIGRlc3Rfc2l6ZSk7DQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgcE5ld0JpdG1hcDsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIF9EQ1RFbmNvZGVCaXRtYXAocERpY3QsIHBCaXRtYXAsIHBQYXJhbSA/IHBQYXJhbS0+blF1YWxpdHkgOiA3NSwgZGVzdF9idWYsIGRlc3Rfc2l6ZSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAoYlN0cmVhbSkgew0KLSAgICAgICAgICAgIHBGaWxlV3JpdGUtPldyaXRlQmxvY2soZGVzdF9idWYsIGRlc3Rfc2l6ZSk7DQotICAgICAgICAgICAgRlhfRnJlZShkZXN0X2J1Zik7DQotICAgICAgICAgICAgZGVzdF9idWYgPSBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2UgaWYgKG9wVHlwZSA9PSAxKSB7DQotICAgICAgICBpZiAoIWJTdHJlYW0pIHsNCi0gICAgICAgICAgICBkZXN0X3NpemUgPSBkZXN0X3BpdGNoICogQml0bWFwSGVpZ2h0Ow0KLSAgICAgICAgICAgIGRlc3RfYnVmID0gRlhfQWxsb2MoRlhfQllURSwgZGVzdF9zaXplKTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0xQQllURSBwRGVzdCA9IGRlc3RfYnVmOw0KLSAgICAgICAgZm9yIChGWF9JTlQzMiBpID0gMDsgaSA8IEJpdG1hcEhlaWdodDsgaSArKykgew0KLSAgICAgICAgICAgIGlmICghYlN0cmVhbSkgew0KLSAgICAgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihwRGVzdCwgc3JjX2J1ZiwgZGVzdF9waXRjaCk7DQotICAgICAgICAgICAgICAgIHBEZXN0ICs9IGRlc3RfcGl0Y2g7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgcEZpbGVXcml0ZS0+V3JpdGVCbG9jayhzcmNfYnVmLCBkZXN0X3BpdGNoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgc3JjX2J1ZiArPSBzcmNfcGl0Y2g7DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZiAob3BUeXBlID09IDIpIHsNCi0gICAgICAgIGlmICghYlN0cmVhbSkgew0KLSAgICAgICAgICAgIGRlc3Rfc2l6ZSA9IGRlc3RfcGl0Y2ggKiBCaXRtYXBIZWlnaHQ7DQotICAgICAgICAgICAgZGVzdF9idWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBkZXN0X3NpemUpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBkZXN0X2J1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIGRlc3RfcGl0Y2gpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfTFBCWVRFIHBEZXN0ID0gZGVzdF9idWY7DQotICAgICAgICBGWF9JTlQzMiBzcmNfb2Zmc2V0ID0gMDsNCi0gICAgICAgIEZYX0lOVDMyIGRlc3Rfb2Zmc2V0ID0gMDsNCi0gICAgICAgIGZvciAoRlhfSU5UMzIgcm93ID0gMDsgcm93IDwgQml0bWFwSGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgICAgICBzcmNfb2Zmc2V0ID0gcm93ICogc3JjX3BpdGNoOw0KLSAgICAgICAgICAgIGZvciAoRlhfSU5UMzIgY29sdW1uID0gMDsgY29sdW1uIDwgQml0bWFwV2lkdGg7IGNvbHVtbiArKykgew0KLSAgICAgICAgICAgICAgICBGWF9GTE9BVCBhbHBoYSA9IGJVc2VNYXR0ZSA/IHNyY19idWZbc3JjX29mZnNldCArIDNdIC8gMjU1LjBmIDogMTsNCi0gICAgICAgICAgICAgICAgcERlc3RbZGVzdF9vZmZzZXRdID0gKEZYX0JZVEUpKHNyY19idWZbc3JjX29mZnNldCArIDJdICogYWxwaGEpOw0KLSAgICAgICAgICAgICAgICBwRGVzdFtkZXN0X29mZnNldCArIDFdID0gKEZYX0JZVEUpKHNyY19idWZbc3JjX29mZnNldCArIDFdICogYWxwaGEpOw0KLSAgICAgICAgICAgICAgICBwRGVzdFtkZXN0X29mZnNldCArIDJdID0gKEZYX0JZVEUpKHNyY19idWZbc3JjX29mZnNldF0gKiBhbHBoYSk7DQotICAgICAgICAgICAgICAgIGRlc3Rfb2Zmc2V0ICs9IDM7DQotICAgICAgICAgICAgICAgIHNyY19vZmZzZXQgKz0gYnBwID09IDI0ID8gMyA6IDQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChiU3RyZWFtKSB7DQotICAgICAgICAgICAgICAgIHBGaWxlV3JpdGUtPldyaXRlQmxvY2socERlc3QsIGRlc3RfcGl0Y2gpOw0KLSAgICAgICAgICAgICAgICBwRGVzdCA9IGRlc3RfYnVmOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHBEZXN0ICs9IGRlc3RfcGl0Y2g7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGRlc3Rfb2Zmc2V0ID0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChiU3RyZWFtKSB7DQotICAgICAgICAgICAgRlhfRnJlZShkZXN0X2J1Zik7DQotICAgICAgICAgICAgZGVzdF9idWYgPSBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChtX3BTdHJlYW0gPT0gTlVMTCkgew0KLSAgICAgICAgbV9wU3RyZWFtID0gRlhfTkVXIENQREZfU3RyZWFtKE5VTEwsIDAsIE5VTEwpOw0KLSAgICB9DQotICAgIGlmICghYlN0cmVhbSkgew0KLSAgICAgICAgbV9wU3RyZWFtLT5Jbml0U3RyZWFtKGRlc3RfYnVmLCBkZXN0X3NpemUsIHBEaWN0KTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHBGaWxlV3JpdGUtPkZsdXNoKCk7DQotICAgICAgICBtX3BTdHJlYW0tPkluaXRTdHJlYW0ocEZpbGVSZWFkLCBwRGljdCk7DQotICAgIH0NCi0gICAgbV9iSXNNYXNrID0gcEJpdG1hcC0+SXNBbHBoYU1hc2soKTsNCi0gICAgbV9XaWR0aCA9IEJpdG1hcFdpZHRoOw0KLSAgICBtX0hlaWdodCA9IEJpdG1hcEhlaWdodDsNCi0gICAgaWYgKGRlc3RfYnVmKSB7DQotICAgICAgICBGWF9GcmVlKGRlc3RfYnVmKTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfSW1hZ2U6OlJlc2V0Q2FjaGUoQ1BERl9QYWdlKiBwUGFnZSwgY29uc3QgQ0ZYX0RJQml0bWFwKiBwQml0bWFwKQ0KLXsNCi0gICAgcFBhZ2UtPkdldFJlbmRlckNhY2hlKCktPlJlc2V0Qml0bWFwKG1fcFN0cmVhbSwgcEJpdG1hcCk7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcmVuZGVyLmgiCisjaW5jbHVkZSAiLi4vZnBkZl9wYWdlL3BhZ2VpbnQuaCIKKyNpbmNsdWRlICIuLi9mcGRmX3JlbmRlci9yZW5kZXJfaW50LmgiCitDUERGX0RpY3Rpb25hcnkqIENQREZfSW1hZ2U6OkluaXRKUEVHKEZYX0xQQllURSBwRGF0YSwgRlhfRFdPUkQgc2l6ZSkKK3sKKyAgICBGWF9JTlQzMiB3aWR0aCwgaGVpZ2h0LCBjb2xvcl90cmFucywgbnVtX2NvbXBzLCBiaXRzOworICAgIGlmICghQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRKcGVnTW9kdWxlKCktPgorICAgICAgICAgICAgTG9hZEluZm8ocERhdGEsIHNpemUsIHdpZHRoLCBoZWlnaHQsIG51bV9jb21wcywgYml0cywgY29sb3JfdHJhbnMpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsKKyAgICBwRGljdC0+U2V0QXROYW1lKCJUeXBlIiwgIlhPYmplY3QiKTsKKyAgICBwRGljdC0+U2V0QXROYW1lKCJTdWJ0eXBlIiwgIkltYWdlIik7CisgICAgcERpY3QtPlNldEF0SW50ZWdlcigiV2lkdGgiLCB3aWR0aCk7CisgICAgcERpY3QtPlNldEF0SW50ZWdlcigiSGVpZ2h0IiwgaGVpZ2h0KTsKKyAgICBGWF9MUENTVFIgY3NuYW1lID0gTlVMTDsKKyAgICBpZiAobnVtX2NvbXBzID09IDEpIHsKKyAgICAgICAgY3NuYW1lID0gIkRldmljZUdyYXkiOworICAgIH0gZWxzZSBpZiAobnVtX2NvbXBzID09IDMpIHsKKyAgICAgICAgY3NuYW1lID0gIkRldmljZVJHQiI7CisgICAgfSBlbHNlIGlmIChudW1fY29tcHMgPT0gNCkgeworICAgICAgICBjc25hbWUgPSAiRGV2aWNlQ01ZSyI7CisgICAgICAgIENQREZfQXJyYXkqIHBEZWNvZGUgPSBDUERGX0FycmF5OjpDcmVhdGUoKTsKKyAgICAgICAgZm9yIChpbnQgbiA9IDA7IG4gPCA0OyBuICsrKSB7CisgICAgICAgICAgICBwRGVjb2RlLT5BZGRJbnRlZ2VyKDEpOworICAgICAgICAgICAgcERlY29kZS0+QWRkSW50ZWdlcigwKTsKKyAgICAgICAgfQorICAgICAgICBwRGljdC0+U2V0QXQoRlhfQlNUUkMoIkRlY29kZSIpLCBwRGVjb2RlKTsKKyAgICB9CisgICAgcERpY3QtPlNldEF0TmFtZSgiQ29sb3JTcGFjZSIsIGNzbmFtZSk7CisgICAgcERpY3QtPlNldEF0SW50ZWdlcigiQml0c1BlckNvbXBvbmVudCIsIGJpdHMpOworICAgIHBEaWN0LT5TZXRBdE5hbWUoIkZpbHRlciIsICJEQ1REZWNvZGUiKTsKKyAgICBpZiAoIWNvbG9yX3RyYW5zKSB7CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcFBhcm1zID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsKKyAgICAgICAgcERpY3QtPlNldEF0KCJEZWNvZGVQYXJtcyIsIHBQYXJtcyk7CisgICAgICAgIHBQYXJtcy0+U2V0QXRJbnRlZ2VyKCJDb2xvclRyYW5zZm9ybSIsIDApOworICAgIH0KKyAgICBtX2JJc01hc2sgPSBGQUxTRTsKKyAgICBtX1dpZHRoID0gd2lkdGg7CisgICAgbV9IZWlnaHQgPSBoZWlnaHQ7CisgICAgaWYgKG1fcFN0cmVhbSA9PSBOVUxMKSB7CisgICAgICAgIG1fcFN0cmVhbSA9IEZYX05FVyBDUERGX1N0cmVhbShOVUxMLCAwLCBOVUxMKTsKKyAgICB9CisgICAgcmV0dXJuIHBEaWN0OworfQordm9pZCBDUERGX0ltYWdlOjpTZXRKcGVnSW1hZ2UoRlhfTFBCWVRFIHBEYXRhLCBGWF9EV09SRCBzaXplKQoreworICAgIENQREZfRGljdGlvbmFyeSAqcERpY3QgPSBJbml0SlBFRyhwRGF0YSwgc2l6ZSk7CisgICAgaWYgKCFwRGljdCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcFN0cmVhbS0+SW5pdFN0cmVhbShwRGF0YSwgc2l6ZSwgcERpY3QpOworfQordm9pZCBDUERGX0ltYWdlOjpTZXRKcGVnSW1hZ2UoSUZYX0ZpbGVSZWFkICpwRmlsZSkKK3sKKyAgICBGWF9EV09SRCBzaXplID0gKEZYX0RXT1JEKXBGaWxlLT5HZXRTaXplKCk7CisgICAgaWYgKCFzaXplKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfRFdPUkQgZHdFc3RpbWF0ZVNpemUgPSBzaXplOworICAgIGlmIChkd0VzdGltYXRlU2l6ZSA+IDgxOTIpIHsKKyAgICAgICAgZHdFc3RpbWF0ZVNpemUgPSA4MTkyOworICAgIH0KKyAgICBGWF9MUEJZVEUgcERhdGEgPSBGWF9BbGxvYyhGWF9CWVRFLCBkd0VzdGltYXRlU2l6ZSk7CisgICAgaWYgKCFwRGF0YSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHBGaWxlLT5SZWFkQmxvY2socERhdGEsIDAsIGR3RXN0aW1hdGVTaXplKTsKKyAgICBDUERGX0RpY3Rpb25hcnkgKnBEaWN0ID0gSW5pdEpQRUcocERhdGEsIGR3RXN0aW1hdGVTaXplKTsKKyAgICBGWF9GcmVlKHBEYXRhKTsKKyAgICBpZiAoIXBEaWN0ICYmIHNpemUgPiBkd0VzdGltYXRlU2l6ZSkgeworICAgICAgICBwRGF0YSA9IEZYX0FsbG9jKEZYX0JZVEUsIHNpemUpOworICAgICAgICBpZiAoIXBEYXRhKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcEZpbGUtPlJlYWRCbG9jayhwRGF0YSwgMCwgc2l6ZSk7CisgICAgICAgIHBEaWN0ID0gSW5pdEpQRUcocERhdGEsIHNpemUpOworICAgICAgICBGWF9GcmVlKHBEYXRhKTsKKyAgICB9CisgICAgaWYgKCFwRGljdCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcFN0cmVhbS0+SW5pdFN0cmVhbShwRmlsZSwgcERpY3QpOworfQordm9pZCBfRENURW5jb2RlQml0bWFwKENQREZfRGljdGlvbmFyeSAqcEJpdG1hcERpY3QsIGNvbnN0IENGWF9ESUJpdG1hcCogcEJpdG1hcCwgaW50IHF1YWxpdHksIEZYX0xQQllURSAmYnVmLCBGWF9TVFJTSVpFICZzaXplKQoreworfQordm9pZCBfSkJJRzJFbmNvZGVCaXRtYXAoQ1BERl9EaWN0aW9uYXJ5ICpwQml0bWFwRGljdCwgY29uc3QgQ0ZYX0RJQml0bWFwICpwQml0bWFwLCBDUERGX0RvY3VtZW50ICpwRG9jLCBGWF9MUEJZVEUgJmJ1ZiwgRlhfU1RSU0laRSAmc2l6ZSwgRlhfQk9PTCBiTG9zc0xlc3MpCit7Cit9Cit2b2lkIENQREZfSW1hZ2U6OlNldEltYWdlKGNvbnN0IENGWF9ESUJpdG1hcCogcEJpdG1hcCwgRlhfSU5UMzIgaUNvbXByZXNzLCBJRlhfRmlsZVdyaXRlICpwRmlsZVdyaXRlLCBJRlhfRmlsZVJlYWQgKnBGaWxlUmVhZCwgY29uc3QgQ0ZYX0RJQml0bWFwKiBwTWFzaywgY29uc3QgQ1BERl9JbWFnZVNldFBhcmFtKiBwUGFyYW0pCit7CisgICAgRlhfSU5UMzIgQml0bWFwV2lkdGggPSBwQml0bWFwLT5HZXRXaWR0aCgpOworICAgIEZYX0lOVDMyIEJpdG1hcEhlaWdodCA9IHBCaXRtYXAtPkdldEhlaWdodCgpOworICAgIGlmIChCaXRtYXBXaWR0aCA8IDEgfHwgQml0bWFwSGVpZ2h0IDwgMSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX0xQQllURSBzcmNfYnVmID0gcEJpdG1hcC0+R2V0QnVmZmVyKCk7CisgICAgRlhfSU5UMzIgc3JjX3BpdGNoID0gcEJpdG1hcC0+R2V0UGl0Y2goKTsKKyAgICBGWF9JTlQzMiBicHAgPSBwQml0bWFwLT5HZXRCUFAoKTsKKyAgICBGWF9CT09MIGJVc2VNYXR0ZSA9IHBQYXJhbSAmJiBwUGFyYW0tPnBNYXR0ZUNvbG9yICYmIChwQml0bWFwLT5HZXRGb3JtYXQoKSA9PSBGWERJQl9BcmdiKTsKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsKKyAgICBwRGljdC0+U2V0QXROYW1lKEZYX0JTVFJDKCJUeXBlIiksIEZYX0JTVFJDKCJYT2JqZWN0IikpOworICAgIHBEaWN0LT5TZXRBdE5hbWUoRlhfQlNUUkMoIlN1YnR5cGUiKSwgRlhfQlNUUkMoIkltYWdlIikpOworICAgIHBEaWN0LT5TZXRBdEludGVnZXIoRlhfQlNUUkMoIldpZHRoIiksIEJpdG1hcFdpZHRoKTsKKyAgICBwRGljdC0+U2V0QXRJbnRlZ2VyKEZYX0JTVFJDKCJIZWlnaHQiKSwgQml0bWFwSGVpZ2h0KTsKKyAgICBGWF9MUEJZVEUgZGVzdF9idWYgPSBOVUxMOworICAgIEZYX1NUUlNJWkUgZGVzdF9waXRjaCA9IDAsIGRlc3Rfc2l6ZSA9IDAsIG9wVHlwZSA9IC0xOworICAgIGlmIChicHAgPT0gMSkgeworICAgICAgICBGWF9JTlQzMiByZXNldF9hID0gMCwgcmVzZXRfciA9IDAsIHJlc2V0X2cgPSAwLCByZXNldF9iID0gMDsKKyAgICAgICAgRlhfSU5UMzIgc2V0X2EgPSAwLCBzZXRfciA9IDAsIHNldF9nID0gMCwgc2V0X2IgPSAwOworICAgICAgICBpZiAoIXBCaXRtYXAtPklzQWxwaGFNYXNrKCkpIHsKKyAgICAgICAgICAgIEFyZ2JEZWNvZGUocEJpdG1hcC0+R2V0UGFsZXR0ZUFyZ2IoMCksIHJlc2V0X2EsIHJlc2V0X3IsIHJlc2V0X2csIHJlc2V0X2IpOworICAgICAgICAgICAgQXJnYkRlY29kZShwQml0bWFwLT5HZXRQYWxldHRlQXJnYigxKSwgc2V0X2EsIHNldF9yLCBzZXRfZywgc2V0X2IpOworICAgICAgICB9CisgICAgICAgIGlmIChzZXRfYSA9PSAwIHx8IHJlc2V0X2EgPT0gMCkgeworICAgICAgICAgICAgcERpY3QtPlNldEF0KEZYX0JTVFJDKCJJbWFnZU1hc2siKSwgRlhfTkVXIENQREZfQm9vbGVhbihUUlVFKSk7CisgICAgICAgICAgICBpZiAocmVzZXRfYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgQ1BERl9BcnJheSogcEFycmF5ID0gRlhfTkVXIENQREZfQXJyYXk7CisgICAgICAgICAgICAgICAgcEFycmF5LT5BZGRJbnRlZ2VyKDEpOworICAgICAgICAgICAgICAgIHBBcnJheS0+QWRkSW50ZWdlcigwKTsKKyAgICAgICAgICAgICAgICBwRGljdC0+U2V0QXQoRlhfQlNUUkMoIkRlY29kZSIpLCBwQXJyYXkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQ1BERl9BcnJheSogcENTID0gRlhfTkVXIENQREZfQXJyYXk7CisgICAgICAgICAgICBwQ1MtPkFkZE5hbWUoRlhfQlNUUkMoIkluZGV4ZWQiKSk7CisgICAgICAgICAgICBwQ1MtPkFkZE5hbWUoRlhfQlNUUkMoIkRldmljZVJHQiIpKTsKKyAgICAgICAgICAgIHBDUy0+QWRkSW50ZWdlcigxKTsKKyAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGN0OworICAgICAgICAgICAgRlhfTFBTVFIgcEJ1ZiA9IGN0LkdldEJ1ZmZlcig2KTsKKyAgICAgICAgICAgIHBCdWZbMF0gPSAoRlhfQ0hBUilyZXNldF9yOworICAgICAgICAgICAgcEJ1ZlsxXSA9IChGWF9DSEFSKXJlc2V0X2c7CisgICAgICAgICAgICBwQnVmWzJdID0gKEZYX0NIQVIpcmVzZXRfYjsKKyAgICAgICAgICAgIHBCdWZbM10gPSAoRlhfQ0hBUilzZXRfcjsKKyAgICAgICAgICAgIHBCdWZbNF0gPSAoRlhfQ0hBUilzZXRfZzsKKyAgICAgICAgICAgIHBCdWZbNV0gPSAoRlhfQ0hBUilzZXRfYjsKKyAgICAgICAgICAgIGN0LlJlbGVhc2VCdWZmZXIoNik7CisgICAgICAgICAgICBwQ1MtPkFkZChDUERGX1N0cmluZzo6Q3JlYXRlKGN0LCBUUlVFKSk7CisgICAgICAgICAgICBwRGljdC0+U2V0QXQoRlhfQlNUUkMoIkNvbG9yU3BhY2UiKSwgcENTKTsKKyAgICAgICAgfQorICAgICAgICBwRGljdC0+U2V0QXRJbnRlZ2VyKEZYX0JTVFJDKCJCaXRzUGVyQ29tcG9uZW50IiksIDEpOworICAgICAgICBkZXN0X3BpdGNoID0gKEJpdG1hcFdpZHRoICsgNykgLyA4OworICAgICAgICBpZiAoKGlDb21wcmVzcyAmIDB4MDMpID09IFBERl9JTUFHRV9OT19DT01QUkVTUykgeworICAgICAgICAgICAgb3BUeXBlID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG9wVHlwZSA9IDA7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGJwcCA9PSA4KSB7CisgICAgICAgIEZYX0lOVDMyIGlQYWxldHRlID0gcEJpdG1hcC0+R2V0UGFsZXR0ZVNpemUoKTsKKyAgICAgICAgaWYgKGlQYWxldHRlID4gMCkgeworICAgICAgICAgICAgQ1BERl9BcnJheSogcENTID0gRlhfTkVXIENQREZfQXJyYXk7CisgICAgICAgICAgICBtX3BEb2N1bWVudC0+QWRkSW5kaXJlY3RPYmplY3QocENTKTsKKyAgICAgICAgICAgIHBDUy0+QWRkTmFtZShGWF9CU1RSQygiSW5kZXhlZCIpKTsKKyAgICAgICAgICAgIHBDUy0+QWRkTmFtZShGWF9CU1RSQygiRGV2aWNlUkdCIikpOworICAgICAgICAgICAgcENTLT5BZGRJbnRlZ2VyKGlQYWxldHRlIC0gMSk7CisgICAgICAgICAgICBGWF9MUEJZVEUgcENvbG9yVGFibGUgPSBGWF9BbGxvYyhGWF9CWVRFLCBpUGFsZXR0ZSAqIDMpOworICAgICAgICAgICAgRlhfTFBCWVRFIHB0ciA9IHBDb2xvclRhYmxlOworICAgICAgICAgICAgZm9yIChGWF9JTlQzMiBpID0gMDsgaSA8IGlQYWxldHRlOyBpICsrKSB7CisgICAgICAgICAgICAgICAgRlhfRFdPUkQgYXJnYiA9IHBCaXRtYXAtPkdldFBhbGV0dGVBcmdiKGkpOworICAgICAgICAgICAgICAgIHB0clswXSA9IChGWF9CWVRFKShhcmdiID4+IDE2KTsKKyAgICAgICAgICAgICAgICBwdHJbMV0gPSAoRlhfQllURSkoYXJnYiA+PiA4KTsKKyAgICAgICAgICAgICAgICBwdHJbMl0gPSAoRlhfQllURSlhcmdiOworICAgICAgICAgICAgICAgIHB0ciArPSAzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQ1BERl9TdHJlYW0gKnBDVFMgPSBDUERGX1N0cmVhbTo6Q3JlYXRlKHBDb2xvclRhYmxlLCBpUGFsZXR0ZSAqIDMsIENQREZfRGljdGlvbmFyeTo6Q3JlYXRlKCkpOworICAgICAgICAgICAgbV9wRG9jdW1lbnQtPkFkZEluZGlyZWN0T2JqZWN0KHBDVFMpOworICAgICAgICAgICAgcENTLT5BZGRSZWZlcmVuY2UobV9wRG9jdW1lbnQsIHBDVFMpOworICAgICAgICAgICAgcERpY3QtPlNldEF0UmVmZXJlbmNlKEZYX0JTVFJDKCJDb2xvclNwYWNlIiksIG1fcERvY3VtZW50LCBwQ1MpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcERpY3QtPlNldEF0TmFtZShGWF9CU1RSQygiQ29sb3JTcGFjZSIpLCBGWF9CU1RSQygiRGV2aWNlR3JheSIpKTsKKyAgICAgICAgfQorICAgICAgICBwRGljdC0+U2V0QXRJbnRlZ2VyKEZYX0JTVFJDKCJCaXRzUGVyQ29tcG9uZW50IiksIDgpOworICAgICAgICBpZiAoKGlDb21wcmVzcyAmIDB4MDMpID09IFBERl9JTUFHRV9OT19DT01QUkVTUykgeworICAgICAgICAgICAgZGVzdF9waXRjaCA9IEJpdG1hcFdpZHRoOworICAgICAgICAgICAgb3BUeXBlID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG9wVHlwZSA9IDA7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBwRGljdC0+U2V0QXROYW1lKEZYX0JTVFJDKCJDb2xvclNwYWNlIiksIEZYX0JTVFJDKCJEZXZpY2VSR0IiKSk7CisgICAgICAgIHBEaWN0LT5TZXRBdEludGVnZXIoRlhfQlNUUkMoIkJpdHNQZXJDb21wb25lbnQiKSwgOCk7CisgICAgICAgIGlmICgoaUNvbXByZXNzICYgMHgwMykgPT0gUERGX0lNQUdFX05PX0NPTVBSRVNTKSB7CisgICAgICAgICAgICBkZXN0X3BpdGNoID0gQml0bWFwV2lkdGggKiAzOworICAgICAgICAgICAgb3BUeXBlID0gMjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG9wVHlwZSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgY29uc3QgQ0ZYX0RJQml0bWFwKiBwTWFza0JpdG1hcCA9IE5VTEw7CisgICAgaWYgKHBCaXRtYXAtPkhhc0FscGhhKCkpIHsKKyAgICAgICAgcE1hc2tCaXRtYXAgPSBwQml0bWFwLT5HZXRBbHBoYU1hc2soKTsKKyAgICB9CisgICAgaWYgKCFwTWFza0JpdG1hcCAmJiBwTWFzaykgeworICAgICAgICBGWERJQl9Gb3JtYXQgbWFza0Zvcm1hdCA9IHBNYXNrLT5HZXRGb3JtYXQoKTsKKyAgICAgICAgaWYgKG1hc2tGb3JtYXQgPT0gRlhESUJfMWJwcE1hc2sgfHwgbWFza0Zvcm1hdCA9PSBGWERJQl84YnBwTWFzaykgeworICAgICAgICAgICAgcE1hc2tCaXRtYXAgPSBwTWFzazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocE1hc2tCaXRtYXApIHsKKyAgICAgICAgRlhfSU5UMzIgbWFza1dpZHRoID0gcE1hc2tCaXRtYXAtPkdldFdpZHRoKCk7CisgICAgICAgIEZYX0lOVDMyIG1hc2tIZWlnaHQgPSBwTWFza0JpdG1hcC0+R2V0SGVpZ2h0KCk7CisgICAgICAgIEZYX0xQQllURSBtYXNrX2J1ZiA9IE5VTEw7CisgICAgICAgIEZYX1NUUlNJWkUgbWFza19zaXplOworICAgICAgICBGWF9CT09MIGJEZWxldGVNYXNrID0gVFJVRTsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwTWFza0RpY3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5OworICAgICAgICBwTWFza0RpY3QtPlNldEF0TmFtZShGWF9CU1RSQygiVHlwZSIpLCBGWF9CU1RSQygiWE9iamVjdCIpKTsKKyAgICAgICAgcE1hc2tEaWN0LT5TZXRBdE5hbWUoRlhfQlNUUkMoIlN1YnR5cGUiKSwgRlhfQlNUUkMoIkltYWdlIikpOworICAgICAgICBwTWFza0RpY3QtPlNldEF0SW50ZWdlcihGWF9CU1RSQygiV2lkdGgiKSwgbWFza1dpZHRoKTsKKyAgICAgICAgcE1hc2tEaWN0LT5TZXRBdEludGVnZXIoRlhfQlNUUkMoIkhlaWdodCIpLCBtYXNrSGVpZ2h0KTsKKyAgICAgICAgcE1hc2tEaWN0LT5TZXRBdE5hbWUoRlhfQlNUUkMoIkNvbG9yU3BhY2UiKSwgRlhfQlNUUkMoIkRldmljZUdyYXkiKSk7CisgICAgICAgIHBNYXNrRGljdC0+U2V0QXRJbnRlZ2VyKEZYX0JTVFJDKCJCaXRzUGVyQ29tcG9uZW50IiksIDgpOworICAgICAgICBpZiAocE1hc2tCaXRtYXAtPkdldEJQUCgpID09IDggJiYgKGlDb21wcmVzcyAmIFBERl9JTUFHRV9NQVNLX0xPU1NZX0NPTVBSRVNTKSAhPSAwKSB7CisgICAgICAgICAgICBfRENURW5jb2RlQml0bWFwKHBNYXNrRGljdCwgcE1hc2tCaXRtYXAsIHBQYXJhbSA/IHBQYXJhbS0+blF1YWxpdHkgOiA3NSwgbWFza19idWYsIG1hc2tfc2l6ZSk7CisgICAgICAgIH0gZWxzZSBpZiAocE1hc2tCaXRtYXAtPkdldEZvcm1hdCgpID09IEZYRElCXzFicHBNYXNrKSB7CisgICAgICAgICAgICBfSkJJRzJFbmNvZGVCaXRtYXAocE1hc2tEaWN0LCBwTWFza0JpdG1hcCwgbV9wRG9jdW1lbnQsIG1hc2tfYnVmLCBtYXNrX3NpemUsIFRSVUUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWFza19zaXplID0gbWFza0hlaWdodCAqIG1hc2tXaWR0aDsKKyAgICAgICAgICAgIG1hc2tfYnVmID0gRlhfQWxsb2MoRlhfQllURSwgbWFza19zaXplKTsKKyAgICAgICAgICAgIGZvciAoRlhfSU5UMzIgYSA9IDA7IGEgPCBtYXNrSGVpZ2h0OyBhICsrKSB7CisgICAgICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIobWFza19idWYgKyBhICogbWFza1dpZHRoLCBwTWFza0JpdG1hcC0+R2V0U2NhbmxpbmUoYSksIG1hc2tXaWR0aCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBNYXNrRGljdCkgeworICAgICAgICAgICAgcE1hc2tEaWN0LT5TZXRBdEludGVnZXIoRlhfQlNUUkMoIkxlbmd0aCIpLCBtYXNrX3NpemUpOworICAgICAgICAgICAgQ1BERl9TdHJlYW0qIHBNYXNrU3RyZWFtID0gTlVMTDsKKyAgICAgICAgICAgIGlmIChiVXNlTWF0dGUpIHsKKyAgICAgICAgICAgICAgICBpbnQgYSwgciwgZywgYjsKKyAgICAgICAgICAgICAgICBBcmdiRGVjb2RlKCoocFBhcmFtLT5wTWF0dGVDb2xvciksIGEsIHIsIGcsIGIpOworICAgICAgICAgICAgICAgIENQREZfQXJyYXkqIHBNYXR0ZSA9IEZYX05FVyBDUERGX0FycmF5OworICAgICAgICAgICAgICAgIHBNYXR0ZS0+QWRkSW50ZWdlcihyKTsKKyAgICAgICAgICAgICAgICBwTWF0dGUtPkFkZEludGVnZXIoZyk7CisgICAgICAgICAgICAgICAgcE1hdHRlLT5BZGRJbnRlZ2VyKGIpOworICAgICAgICAgICAgICAgIHBNYXNrRGljdC0+U2V0QXQoRlhfQlNUUkMoIk1hdHRlIiksIHBNYXR0ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwTWFza1N0cmVhbSA9IEZYX05FVyBDUERGX1N0cmVhbShtYXNrX2J1ZiwgbWFza19zaXplLCBwTWFza0RpY3QpOworICAgICAgICAgICAgbV9wRG9jdW1lbnQtPkFkZEluZGlyZWN0T2JqZWN0KHBNYXNrU3RyZWFtKTsKKyAgICAgICAgICAgIGJEZWxldGVNYXNrID0gRkFMU0U7CisgICAgICAgICAgICBwRGljdC0+U2V0QXRSZWZlcmVuY2UoRlhfQlNUUkMoIlNNYXNrIiksIG1fcERvY3VtZW50LCBwTWFza1N0cmVhbSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBCaXRtYXAtPkhhc0FscGhhKCkpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwTWFza0JpdG1hcDsKKyAgICAgICAgfQorICAgIH0KKyAgICBGWF9CT09MIGJTdHJlYW0gPSBwRmlsZVdyaXRlICE9IE5VTEwgJiYgcEZpbGVSZWFkICE9IE5VTEw7CisgICAgaWYgKG9wVHlwZSA9PSAwKSB7CisgICAgICAgIGlmIChpQ29tcHJlc3MgJiBQREZfSU1BR0VfTE9TU0xFU1NfQ09NUFJFU1MpIHsKKyAgICAgICAgICAgIGlmIChwQml0bWFwLT5HZXRCUFAoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgX0pCSUcyRW5jb2RlQml0bWFwKHBEaWN0LCBwQml0bWFwLCBtX3BEb2N1bWVudCwgZGVzdF9idWYsIGRlc3Rfc2l6ZSwgVFJVRSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAocEJpdG1hcC0+R2V0QlBQKCkgPT0gMSkgeworICAgICAgICAgICAgICAgIF9KQklHMkVuY29kZUJpdG1hcChwRGljdCwgcEJpdG1hcCwgbV9wRG9jdW1lbnQsIGRlc3RfYnVmLCBkZXN0X3NpemUsIEZBTFNFKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocEJpdG1hcC0+R2V0QlBQKCkgPj0gOCAmJiBwQml0bWFwLT5HZXRQYWxldHRlKCkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIENGWF9ESUJpdG1hcCAqcE5ld0JpdG1hcCA9IEZYX05FVyBDRlhfRElCaXRtYXAoKTsKKyAgICAgICAgICAgICAgICBwTmV3Qml0bWFwLT5Db3B5KHBCaXRtYXApOworICAgICAgICAgICAgICAgIHBOZXdCaXRtYXAtPkNvbnZlcnRGb3JtYXQoRlhESUJfUmdiKTsKKyAgICAgICAgICAgICAgICBTZXRJbWFnZShwTmV3Qml0bWFwLCBpQ29tcHJlc3MsIHBGaWxlV3JpdGUsIHBGaWxlUmVhZCk7CisgICAgICAgICAgICAgICAgaWYgKHBEaWN0KSB7CisgICAgICAgICAgICAgICAgICAgIHBEaWN0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgIHBEaWN0ID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGRlc3RfYnVmKSB7CisgICAgICAgICAgICAgICAgICAgIEZYX0ZyZWUoZGVzdF9idWYpOworICAgICAgICAgICAgICAgICAgICBkZXN0X2J1ZiA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlc3Rfc2l6ZSA9IDA7CisgICAgICAgICAgICAgICAgZGVsZXRlIHBOZXdCaXRtYXA7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoYlVzZU1hdHRlKSB7CisgICAgICAgICAgICAgICAgICAgIENGWF9ESUJpdG1hcCAqcE5ld0JpdG1hcCA9IEZYX05FVyBDRlhfRElCaXRtYXAoKTsKKyAgICAgICAgICAgICAgICAgICAgcE5ld0JpdG1hcC0+Q3JlYXRlKEJpdG1hcFdpZHRoLCBCaXRtYXBIZWlnaHQsIEZYRElCX0FyZ2IpOworICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZHN0X2J1ZiA9IHBOZXdCaXRtYXAtPkdldEJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICBGWF9JTlQzMiBzcmNfb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChGWF9JTlQzMiByb3cgPSAwOyByb3cgPCBCaXRtYXBIZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgc3JjX29mZnNldCA9IHJvdyAqIHNyY19waXRjaDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoRlhfSU5UMzIgY29sdW1uID0gMDsgY29sdW1uIDwgQml0bWFwV2lkdGg7IGNvbHVtbiArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIGFscGhhID0gc3JjX2J1ZltzcmNfb2Zmc2V0ICsgM10gLyAyNTUuMGY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2J1ZltzcmNfb2Zmc2V0XSA9IChGWF9CWVRFKShzcmNfYnVmW3NyY19vZmZzZXRdICogYWxwaGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdF9idWZbc3JjX29mZnNldCArIDFdID0gKEZYX0JZVEUpKHNyY19idWZbc3JjX29mZnNldCArIDFdICogYWxwaGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdF9idWZbc3JjX29mZnNldCArIDJdID0gKEZYX0JZVEUpKHNyY19idWZbc3JjX29mZnNldCArIDJdICogYWxwaGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdF9idWZbc3JjX29mZnNldCArIDNdID0gKEZYX0JZVEUpKHNyY19idWZbc3JjX29mZnNldCArIDNdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfb2Zmc2V0ICs9IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgX0RDVEVuY29kZUJpdG1hcChwRGljdCwgcE5ld0JpdG1hcCwgcFBhcmFtID8gcFBhcmFtLT5uUXVhbGl0eSA6IDc1LCBkZXN0X2J1ZiwgZGVzdF9zaXplKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBOZXdCaXRtYXA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgX0RDVEVuY29kZUJpdG1hcChwRGljdCwgcEJpdG1hcCwgcFBhcmFtID8gcFBhcmFtLT5uUXVhbGl0eSA6IDc1LCBkZXN0X2J1ZiwgZGVzdF9zaXplKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJTdHJlYW0pIHsKKyAgICAgICAgICAgIHBGaWxlV3JpdGUtPldyaXRlQmxvY2soZGVzdF9idWYsIGRlc3Rfc2l6ZSk7CisgICAgICAgICAgICBGWF9GcmVlKGRlc3RfYnVmKTsKKyAgICAgICAgICAgIGRlc3RfYnVmID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAob3BUeXBlID09IDEpIHsKKyAgICAgICAgaWYgKCFiU3RyZWFtKSB7CisgICAgICAgICAgICBkZXN0X3NpemUgPSBkZXN0X3BpdGNoICogQml0bWFwSGVpZ2h0OworICAgICAgICAgICAgZGVzdF9idWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBkZXN0X3NpemUpOworICAgICAgICB9CisgICAgICAgIEZYX0xQQllURSBwRGVzdCA9IGRlc3RfYnVmOworICAgICAgICBmb3IgKEZYX0lOVDMyIGkgPSAwOyBpIDwgQml0bWFwSGVpZ2h0OyBpICsrKSB7CisgICAgICAgICAgICBpZiAoIWJTdHJlYW0pIHsKKyAgICAgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihwRGVzdCwgc3JjX2J1ZiwgZGVzdF9waXRjaCk7CisgICAgICAgICAgICAgICAgcERlc3QgKz0gZGVzdF9waXRjaDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcEZpbGVXcml0ZS0+V3JpdGVCbG9jayhzcmNfYnVmLCBkZXN0X3BpdGNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNyY19idWYgKz0gc3JjX3BpdGNoOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChvcFR5cGUgPT0gMikgeworICAgICAgICBpZiAoIWJTdHJlYW0pIHsKKyAgICAgICAgICAgIGRlc3Rfc2l6ZSA9IGRlc3RfcGl0Y2ggKiBCaXRtYXBIZWlnaHQ7CisgICAgICAgICAgICBkZXN0X2J1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIGRlc3Rfc2l6ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZXN0X2J1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIGRlc3RfcGl0Y2gpOworICAgICAgICB9CisgICAgICAgIEZYX0xQQllURSBwRGVzdCA9IGRlc3RfYnVmOworICAgICAgICBGWF9JTlQzMiBzcmNfb2Zmc2V0ID0gMDsKKyAgICAgICAgRlhfSU5UMzIgZGVzdF9vZmZzZXQgPSAwOworICAgICAgICBmb3IgKEZYX0lOVDMyIHJvdyA9IDA7IHJvdyA8IEJpdG1hcEhlaWdodDsgcm93ICsrKSB7CisgICAgICAgICAgICBzcmNfb2Zmc2V0ID0gcm93ICogc3JjX3BpdGNoOworICAgICAgICAgICAgZm9yIChGWF9JTlQzMiBjb2x1bW4gPSAwOyBjb2x1bW4gPCBCaXRtYXBXaWR0aDsgY29sdW1uICsrKSB7CisgICAgICAgICAgICAgICAgRlhfRkxPQVQgYWxwaGEgPSBiVXNlTWF0dGUgPyBzcmNfYnVmW3NyY19vZmZzZXQgKyAzXSAvIDI1NS4wZiA6IDE7CisgICAgICAgICAgICAgICAgcERlc3RbZGVzdF9vZmZzZXRdID0gKEZYX0JZVEUpKHNyY19idWZbc3JjX29mZnNldCArIDJdICogYWxwaGEpOworICAgICAgICAgICAgICAgIHBEZXN0W2Rlc3Rfb2Zmc2V0ICsgMV0gPSAoRlhfQllURSkoc3JjX2J1ZltzcmNfb2Zmc2V0ICsgMV0gKiBhbHBoYSk7CisgICAgICAgICAgICAgICAgcERlc3RbZGVzdF9vZmZzZXQgKyAyXSA9IChGWF9CWVRFKShzcmNfYnVmW3NyY19vZmZzZXRdICogYWxwaGEpOworICAgICAgICAgICAgICAgIGRlc3Rfb2Zmc2V0ICs9IDM7CisgICAgICAgICAgICAgICAgc3JjX29mZnNldCArPSBicHAgPT0gMjQgPyAzIDogNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChiU3RyZWFtKSB7CisgICAgICAgICAgICAgICAgcEZpbGVXcml0ZS0+V3JpdGVCbG9jayhwRGVzdCwgZGVzdF9waXRjaCk7CisgICAgICAgICAgICAgICAgcERlc3QgPSBkZXN0X2J1ZjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcERlc3QgKz0gZGVzdF9waXRjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlc3Rfb2Zmc2V0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoYlN0cmVhbSkgeworICAgICAgICAgICAgRlhfRnJlZShkZXN0X2J1Zik7CisgICAgICAgICAgICBkZXN0X2J1ZiA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1fcFN0cmVhbSA9PSBOVUxMKSB7CisgICAgICAgIG1fcFN0cmVhbSA9IEZYX05FVyBDUERGX1N0cmVhbShOVUxMLCAwLCBOVUxMKTsKKyAgICB9CisgICAgaWYgKCFiU3RyZWFtKSB7CisgICAgICAgIG1fcFN0cmVhbS0+SW5pdFN0cmVhbShkZXN0X2J1ZiwgZGVzdF9zaXplLCBwRGljdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcEZpbGVXcml0ZS0+Rmx1c2goKTsKKyAgICAgICAgbV9wU3RyZWFtLT5Jbml0U3RyZWFtKHBGaWxlUmVhZCwgcERpY3QpOworICAgIH0KKyAgICBtX2JJc01hc2sgPSBwQml0bWFwLT5Jc0FscGhhTWFzaygpOworICAgIG1fV2lkdGggPSBCaXRtYXBXaWR0aDsKKyAgICBtX0hlaWdodCA9IEJpdG1hcEhlaWdodDsKKyAgICBpZiAoZGVzdF9idWYpIHsKKyAgICAgICAgRlhfRnJlZShkZXN0X2J1Zik7CisgICAgfQorfQordm9pZCBDUERGX0ltYWdlOjpSZXNldENhY2hlKENQREZfUGFnZSogcFBhZ2UsIGNvbnN0IENGWF9ESUJpdG1hcCogcEJpdG1hcCkKK3sKKyAgICBwUGFnZS0+R2V0UmVuZGVyQ2FjaGUoKS0+UmVzZXRCaXRtYXAobV9wU3RyZWFtLCBwQml0bWFwKTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9mb250L2NvbW1vbi5oIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2ZvbnQvY29tbW9uLmgKaW5kZXggMWMxMWIyOC4uNGIzN2E0NCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2ZvbnQvY29tbW9uLmgKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2ZvbnQvY29tbW9uLmgKQEAgLTEsMTcgKzEsMTcgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgQ09NTU9OX0gNCi0jZGVmaW5lIENPTU1PTl9IDQotdHlwZWRlZiBzaWduZWQgY2hhciBUVF9pbnQ4X3Q7DQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFRUX3VpbnQ4X3Q7DQotdHlwZWRlZiBzaWduZWQgc2hvcnQgVFRfaW50MTZfdDsNCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0IFRUX3VpbnQxNl90Ow0KLXR5cGVkZWYgRlhfSU5UMzIgVFRfaW50MzJfdDsNCi10eXBlZGVmIEZYX0RXT1JEIFRUX3VpbnQzMl90Ow0KLXR5cGVkZWYgRlhfSU5UNjQgVFRfaW50NjRfdDsNCi10eXBlZGVmIEZYX1VJTlQ2NCBUVF91aW50NjRfdDsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIENPTU1PTl9ICisjZGVmaW5lIENPTU1PTl9ICit0eXBlZGVmIHNpZ25lZCBjaGFyIFRUX2ludDhfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBUVF91aW50OF90OwordHlwZWRlZiBzaWduZWQgc2hvcnQgVFRfaW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgVFRfdWludDE2X3Q7Cit0eXBlZGVmIEZYX0lOVDMyIFRUX2ludDMyX3Q7Cit0eXBlZGVmIEZYX0RXT1JEIFRUX3VpbnQzMl90OwordHlwZWRlZiBGWF9JTlQ2NCBUVF9pbnQ2NF90OwordHlwZWRlZiBGWF9VSU5UNjQgVFRfdWludDY0X3Q7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9mb250L2ZvbnRfaW50LmggYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfZm9udC9mb250X2ludC5oCmluZGV4IDc3OWY1OGUuLmIxNTFkNzggMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9mb250L2ZvbnRfaW50LmgKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2ZvbnQvZm9udF9pbnQuaApAQCAtMSwyMDEgKzEsMjAxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi10eXBlZGVmIHZvaWQqIEZYRlRfTGlicmFyeTsNCi1jbGFzcyBDUERGX0NNYXBNYW5hZ2VyIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDUERGX0NNYXBNYW5hZ2VyKCk7DQotICAgIH5DUERGX0NNYXBNYW5hZ2VyKCk7DQotICAgIEZYX0xQVk9JRAkJCQlHZXRQYWNrYWdlKEZYX0JPT0wgYlByb21wdCk7DQotICAgIENQREZfQ01hcCoJCQkJR2V0UHJlZGVmaW5lZENNYXAoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUsIEZYX0JPT0wgYlByb21wdCk7DQotICAgIENQREZfQ0lEMlVuaWNvZGVNYXAqCUdldENJRDJVbmljb2RlTWFwKGludCBjaGFyc2V0LCBGWF9CT09MIGJQcm9tcHQpOw0KLSAgICB2b2lkCQkJCQlSZWxvYWRBbGwoKTsNCi1wcml2YXRlOg0KLSAgICBDUERGX0NNYXAqCQkJCUxvYWRQcmVkZWZpbmVkQ01hcChjb25zdCBDRlhfQnl0ZVN0cmluZyYgbmFtZSwgIEZYX0JPT0wgYlByb21wdCk7DQotICAgIENQREZfQ0lEMlVuaWNvZGVNYXAqCUxvYWRDSUQyVW5pY29kZU1hcChpbnQgY2hhcnNldCwgRlhfQk9PTCBiUHJvbXB0KTsNCi0gICAgdm9pZAkJCQkJRHJvcEFsbChGWF9CT09MIGJSZWxvYWQpOw0KLSNpZm5kZWYgX0ZQREZBUElfTUlOSV8NCi0gICAgRlhfQk9PTAkJCQkJbV9iUHJvbXB0ZWQ7DQotICAgIEZYX0xQVk9JRAkJCQltX3BQYWNrYWdlOw0KLSNlbmRpZg0KLSAgICBDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyCW1fQ01hcHM7DQotICAgIENQREZfQ0lEMlVuaWNvZGVNYXAqCW1fQ0lEMlVuaWNvZGVNYXBzWzZdOw0KLX07DQotY2xhc3MgQ1BERl9Gb250R2xvYmFscyA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgQ1BERl9Gb250R2xvYmFscygpOw0KLSAgICB+Q1BERl9Gb250R2xvYmFscygpOw0KLSAgICB2b2lkCQkJCUNsZWFyQWxsKCk7DQotICAgIHZvaWQJCQkJQ2xlYXIodm9pZCoga2V5KTsNCi0gICAgQ1BERl9Gb250KgkJCUZpbmQodm9pZCoga2V5LCBpbnQgaW5kZXgpOw0KLSAgICB2b2lkCQkJCVNldCh2b2lkKiBrZXksIGludCBpbmRleCwgQ1BERl9Gb250KiBwRm9udCk7DQotICAgIENGWF9NYXBQdHJUb1B0cgkJbV9wU3RvY2tNYXA7DQotICAgIENQREZfQ01hcE1hbmFnZXIJbV9DTWFwTWFuYWdlcjsNCi0gICAgc3RydWN0IHsNCi0gICAgICAgIGNvbnN0IHN0cnVjdCBGWENNQVBfQ01hcCoJbV9wTWFwTGlzdDsNCi0gICAgICAgIGludAkJCQltX0NvdW50Ow0KLSAgICB9IG1fRW1iZWRkZWRDaGFyc2V0c1s1XTsNCi0gICAgc3RydWN0IHsNCi0gICAgICAgIGNvbnN0IEZYX1dPUkQqCW1fcE1hcDsNCi0gICAgICAgIGludAkJCQltX0NvdW50Ow0KLSAgICB9IG1fRW1iZWRkZWRUb1VuaWNvZGVzWzVdOw0KLSAgICBGWF9MUEJZVEUJCQltX3BDb250cmFzdFJhbXBzOw0KLX07DQotc3RydWN0IF9DTWFwX0NvZGVSYW5nZSB7DQotICAgIGludAkJCW1fQ2hhclNpemU7DQotICAgIEZYX0JZVEUJCW1fTG93ZXJbNF07DQotICAgIEZYX0JZVEUJCW1fVXBwZXJbNF07DQotfTsNCi1jbGFzcyBDUERGX0NNYXBQYXJzZXIgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfQ01hcFBhcnNlcigpOw0KLSAgICB+Q1BERl9DTWFwUGFyc2VyKCkge30NCi0gICAgRlhfQk9PTAlJbml0aWFsaXplKENQREZfQ01hcCopOw0KLSAgICB2b2lkCVBhcnNlV29yZChGWF9CU1RSIHN0cik7DQotICAgIENGWF9CaW5hcnlCdWYJbV9BZGRNYXBzOw0KLXByaXZhdGU6DQotICAgIENQREZfQ01hcCoJbV9wQ01hcDsNCi0gICAgaW50CQkJCW1fU3RhdHVzOw0KLSAgICBpbnQJCQkJbV9Db2RlU2VxOw0KLSAgICBGWF9EV09SRAkJbV9Db2RlUG9pbnRzWzRdOw0KLSAgICBDRlhfQXJyYXlUZW1wbGF0ZTxfQ01hcF9Db2RlUmFuZ2U+CW1fQ29kZVJhbmdlczsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcJbV9SZWdpc3RyeSwgbV9PcmRlcmluZywgbV9TdXBwbGVtZW50Ow0KLSAgICBDRlhfQnl0ZVN0cmluZwltX0xhc3RXb3JkOw0KLX07DQotI2RlZmluZSBDSURDT0RJTkdfVU5LTk9XTgkwDQotI2RlZmluZSBDSURDT0RJTkdfR0IJCTENCi0jZGVmaW5lIENJRENPRElOR19CSUc1CQkyDQotI2RlZmluZSBDSURDT0RJTkdfSklTCQkzDQotI2RlZmluZSBDSURDT0RJTkdfS09SRUEJCTQNCi0jZGVmaW5lIENJRENPRElOR19VQ1MyCQk1DQotI2RlZmluZSBDSURDT0RJTkdfQ0lECQk2DQotI2RlZmluZSBDSURDT0RJTkdfVVRGMTYJCTcNCi1jbGFzcyBDUERGX0NNYXAgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfQ01hcCgpOw0KLSAgICBGWF9CT09MCQkJCQlMb2FkUHJlZGVmaW5lZChDUERGX0NNYXBNYW5hZ2VyKiBwTWdyLCBjb25zdCBGWF9DSEFSKiBuYW1lLCBGWF9CT09MIGJQcm9tcHRDSkspOw0KLSAgICBGWF9CT09MCQkJCQlMb2FkRW1iZWRkZWQoRlhfTFBDQllURSBwRGF0YSwgRlhfRFdPUkQgZHdTaXplKTsNCi0gICAgdm9pZAkJCQkJUmVsZWFzZSgpOw0KLSAgICBGWF9CT09MCQkJCQlJc0xvYWRlZCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX2JMb2FkZWQ7DQotICAgIH0NCi0gICAgaW50CQkJCQkJR2V0Q2hhcnNldCgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0NoYXJzZXQ7DQotICAgIH0NCi0gICAgRlhfQk9PTAkJCQkJSXNWZXJ0V3JpdGluZygpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX2JWZXJ0aWNhbDsNCi0gICAgfQ0KLSAgICBGWF9XT1JECQkJCQlDSURGcm9tQ2hhckNvZGUoRlhfRFdPUkQgY2hhcmNvZGUpIGNvbnN0Ow0KLSAgICBGWF9EV09SRAkJCQlDaGFyQ29kZUZyb21DSUQoRlhfV09SRCBDSUQpIGNvbnN0Ow0KLSAgICBpbnQJCQkJCQlHZXRDaGFyU2l6ZShGWF9EV09SRCBjaGFyY29kZSkgY29uc3Q7DQotICAgIEZYX0RXT1JECQkJCUdldE5leHRDaGFyKGNvbnN0IEZYX0NIQVIqIHBTdHJpbmcsIGludCYgb2Zmc2V0KSBjb25zdDsNCi0gICAgaW50CQkJCQkJQ291bnRDaGFyKGNvbnN0IEZYX0NIQVIqIHBTdHJpbmcsIGludCBzaXplKSBjb25zdDsNCi0gICAgaW50CQkJCQkJQXBwZW5kQ2hhcihGWF9MUFNUUiBzdHIsIEZYX0RXT1JEIGNoYXJjb2RlKSBjb25zdDsNCi0gICAgdHlwZWRlZiBlbnVtIHtPbmVCeXRlLCBUd29CeXRlcywgTWl4ZWRUd29CeXRlcywgTWl4ZWRGb3VyQnl0ZXN9IENvZGluZ1NjaGVtZTsNCi1wcm90ZWN0ZWQ6DQotICAgIH5DUERGX0NNYXAoKTsNCi0gICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9DTWFwUGFyc2VyOw0KLSAgICBmcmllbmQgY2xhc3MJCQlDUERGX0NNYXBNYW5hZ2VyOw0KLSAgICBmcmllbmQgY2xhc3MJCQlDUERGX0NJREZvbnQ7DQotcHJvdGVjdGVkOg0KLSAgICBDRlhfQnl0ZVN0cmluZwkJCW1fUHJlZGVmaW5lZENNYXA7DQotICAgIEZYX0JPT0wJCQkJCW1fYlZlcnRpY2FsOw0KLSAgICBpbnQJCQkJCQltX0NoYXJzZXQsIG1fQ29kaW5nOw0KLSAgICBDb2RpbmdTY2hlbWUJCQltX0NvZGluZ1NjaGVtZTsNCi0gICAgaW50CQkJCQkJbV9uQ29kZVJhbmdlczsNCi0gICAgRlhfQllURSoJCQkJbV9wTGVhZGluZ0J5dGVzOw0KLSAgICBGWF9XT1JEKgkJCQltX3BNYXBwaW5nOw0KLSAgICBGWF9MUEJZVEUJCQkJbV9wQWRkTWFwcGluZzsNCi0gICAgRlhfQk9PTAkJCQkJbV9iTG9hZGVkOw0KLSAgICBjb25zdCBGWENNQVBfQ01hcCoJCW1fcEVtYmVkTWFwOw0KLSAgICBDUERGX0NNYXAqCQkJCW1fcFVzZU1hcDsNCi19Ow0KLWNsYXNzIENQREZfUHJlZGVmaW5lZENNYXANCi17DQotcHVibGljOg0KLSAgICBGWF9MUENTVFIJbV9wTmFtZTsNCi0gICAgaW50CQkJbV9DaGFyc2V0Ow0KLSAgICBpbnQJCQltX0NvZGluZzsNCi0gICAgQ1BERl9DTWFwOjpDb2RpbmdTY2hlbWUJbV9Db2RpbmdTY2hlbWU7DQotICAgIEZYX0RXT1JECW1fTGVhZGluZ1NlZ0NvdW50Ow0KLSAgICBGWF9CWVRFCQltX0xlYWRpbmdTZWdzWzRdOw0KLX07DQotdHlwZWRlZiBzdHJ1Y3QgX0ZpbGVIZWFkZXIgew0KLSAgICBGWF9CWVRFCQlidFRhZ1s0XTsNCi0gICAgRlhfQllURQkJYnRWZXJzaW9uOw0KLSAgICBGWF9CWVRFCQlidEZvcm1hdDsNCi0gICAgRlhfQllURQkJYnRSZXNlcnZlZDFbMl07DQotICAgIEZYX0RXT1JECWR3U3RhcnRJbmRleDsNCi0gICAgRlhfRFdPUkQJZHdFbmRJbmRleDsNCi0gICAgRlhfRFdPUkQJZHdEYXRhU2l6ZTsNCi0gICAgRlhfRFdPUkQJZHdEYXRhT2Zmc2V0Ow0KLSAgICBGWF9EV09SRAlkd1JlY29yZFNpemU7DQotfSBGWE1QX0ZJTEVIRUFERVI7DQotY2xhc3MgQ1BERl9GWE1QIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDUERGX0ZYTVAoKQ0KLSAgICB7DQotICAgICAgICBtX3BIZWFkZXIgPSBOVUxMOw0KLSAgICAgICAgbV9wVGFibGUgPSBOVUxMOw0KLSAgICB9DQotICAgIH5DUERGX0ZYTVAoKQ0KLSAgICB7DQotICAgICAgICBpZiAobV9wSGVhZGVyKSB7DQotICAgICAgICAgICAgRlhfRnJlZShtX3BIZWFkZXIpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIEZYX0JPT0wJCUlzTG9hZGVkKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcFRhYmxlICE9IE5VTEw7DQotICAgIH0NCi0gICAgRlhfQk9PTAkJTG9hZEZpbGUoRlhfTFBWT0lEIHBQYWNrYWdlLCBGWF9MUENTVFIgZmlsZWlkKTsNCi0gICAgRlhfTFBCWVRFCUdldFJlY29yZChGWF9EV09SRCBpbmRleCk7DQotcHJpdmF0ZToNCi0gICAgRlhNUF9GSUxFSEVBREVSKgltX3BIZWFkZXI7DQotICAgIEZYX0xQQllURQltX3BUYWJsZTsNCi19Ow0KLWNsYXNzIENQREZfQ0lEMlVuaWNvZGVNYXAgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfQ0lEMlVuaWNvZGVNYXAoKTsNCi0gICAgfkNQREZfQ0lEMlVuaWNvZGVNYXAoKTsNCi0gICAgRlhfQk9PTAkJSW5pdGlhbGl6ZSgpOw0KLSAgICBGWF9CT09MCQlJc0xvYWRlZCgpOw0KLSAgICB2b2lkCQlMb2FkKENQREZfQ01hcE1hbmFnZXIqIHBNZ3IsIGludCBjaGFyc2V0LCBGWF9CT09MIGJQcm9tcHRDSkspOw0KLSAgICBGWF9XQ0hBUglVbmljb2RlRnJvbUNJRChGWF9XT1JEIENJRCk7DQotcHJvdGVjdGVkOg0KLSAgICBpbnQJCQltX0NoYXJzZXQ7DQotICAgIGNvbnN0IEZYX1dPUkQqCW1fcEVtYmVkZGVkTWFwOw0KLSAgICBGWF9EV09SRAltX0VtYmVkZGVkQ291bnQ7DQotI2lmbmRlZiBfRlBERkFQSV9NSU5JXw0KLSAgICBDUERGX0ZYTVAqCW1fcEV4dGVybmFsTWFwOw0KLSNlbmRpZg0KLX07DQotY2xhc3MgQ1BERl9Ub1VuaWNvZGVNYXAgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIHZvaWQJCQkJCUxvYWQoQ1BERl9TdHJlYW0qIHBTdHJlYW0pOw0KLSAgICBDRlhfV2lkZVN0cmluZwkJCUxvb2t1cChGWF9EV09SRCBjaGFyY29kZSk7DQotICAgIEZYX0RXT1JECQkJCVJldmVyc2VMb29rdXAoRlhfV0NIQVIgdW5pY29kZSk7DQotcHJvdGVjdGVkOg0KLSAgICBDRlhfQ01hcERXb3JkVG9EV29yZAltX01hcDsNCi0gICAgQ1BERl9DSUQyVW5pY29kZU1hcCoJbV9wQmFzZU1hcDsNCi0gICAgQ0ZYX1dpZGVUZXh0QnVmCQkJbV9NdWx0aUNoYXJCdWY7DQotfTsNCi1jbGFzcyBDUERGX0ZvbnRDaGFyTWFwIDogcHVibGljIENGWF9DaGFyTWFwLCBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfRm9udENoYXJNYXAoQ1BERl9Gb250KiBwRm9udCk7DQotICAgIENQREZfRm9udCoJCW1fcEZvbnQ7DQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCit0eXBlZGVmIHZvaWQqIEZYRlRfTGlicmFyeTsKK2NsYXNzIENQREZfQ01hcE1hbmFnZXIgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENQREZfQ01hcE1hbmFnZXIoKTsKKyAgICB+Q1BERl9DTWFwTWFuYWdlcigpOworICAgIEZYX0xQVk9JRAkJCQlHZXRQYWNrYWdlKEZYX0JPT0wgYlByb21wdCk7CisgICAgQ1BERl9DTWFwKgkJCQlHZXRQcmVkZWZpbmVkQ01hcChjb25zdCBDRlhfQnl0ZVN0cmluZyYgbmFtZSwgRlhfQk9PTCBiUHJvbXB0KTsKKyAgICBDUERGX0NJRDJVbmljb2RlTWFwKglHZXRDSUQyVW5pY29kZU1hcChpbnQgY2hhcnNldCwgRlhfQk9PTCBiUHJvbXB0KTsKKyAgICB2b2lkCQkJCQlSZWxvYWRBbGwoKTsKK3ByaXZhdGU6CisgICAgQ1BERl9DTWFwKgkJCQlMb2FkUHJlZGVmaW5lZENNYXAoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUsICBGWF9CT09MIGJQcm9tcHQpOworICAgIENQREZfQ0lEMlVuaWNvZGVNYXAqCUxvYWRDSUQyVW5pY29kZU1hcChpbnQgY2hhcnNldCwgRlhfQk9PTCBiUHJvbXB0KTsKKyAgICB2b2lkCQkJCQlEcm9wQWxsKEZYX0JPT0wgYlJlbG9hZCk7CisjaWZuZGVmIF9GUERGQVBJX01JTklfCisgICAgRlhfQk9PTAkJCQkJbV9iUHJvbXB0ZWQ7CisgICAgRlhfTFBWT0lECQkJCW1fcFBhY2thZ2U7CisjZW5kaWYKKyAgICBDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyCW1fQ01hcHM7CisgICAgQ1BERl9DSUQyVW5pY29kZU1hcCoJbV9DSUQyVW5pY29kZU1hcHNbNl07Cit9OworY2xhc3MgQ1BERl9Gb250R2xvYmFscyA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ1BERl9Gb250R2xvYmFscygpOworICAgIH5DUERGX0ZvbnRHbG9iYWxzKCk7CisgICAgdm9pZAkJCQlDbGVhckFsbCgpOworICAgIHZvaWQJCQkJQ2xlYXIodm9pZCoga2V5KTsKKyAgICBDUERGX0ZvbnQqCQkJRmluZCh2b2lkKiBrZXksIGludCBpbmRleCk7CisgICAgdm9pZAkJCQlTZXQodm9pZCoga2V5LCBpbnQgaW5kZXgsIENQREZfRm9udCogcEZvbnQpOworICAgIENGWF9NYXBQdHJUb1B0cgkJbV9wU3RvY2tNYXA7CisgICAgQ1BERl9DTWFwTWFuYWdlcgltX0NNYXBNYW5hZ2VyOworICAgIHN0cnVjdCB7CisgICAgICAgIGNvbnN0IHN0cnVjdCBGWENNQVBfQ01hcCoJbV9wTWFwTGlzdDsKKyAgICAgICAgaW50CQkJCW1fQ291bnQ7CisgICAgfSBtX0VtYmVkZGVkQ2hhcnNldHNbNV07CisgICAgc3RydWN0IHsKKyAgICAgICAgY29uc3QgRlhfV09SRCoJbV9wTWFwOworICAgICAgICBpbnQJCQkJbV9Db3VudDsKKyAgICB9IG1fRW1iZWRkZWRUb1VuaWNvZGVzWzVdOworICAgIEZYX0xQQllURQkJCW1fcENvbnRyYXN0UmFtcHM7Cit9Oworc3RydWN0IF9DTWFwX0NvZGVSYW5nZSB7CisgICAgaW50CQkJbV9DaGFyU2l6ZTsKKyAgICBGWF9CWVRFCQltX0xvd2VyWzRdOworICAgIEZYX0JZVEUJCW1fVXBwZXJbNF07Cit9OworY2xhc3MgQ1BERl9DTWFwUGFyc2VyIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBDUERGX0NNYXBQYXJzZXIoKTsKKyAgICB+Q1BERl9DTWFwUGFyc2VyKCkge30KKyAgICBGWF9CT09MCUluaXRpYWxpemUoQ1BERl9DTWFwKik7CisgICAgdm9pZAlQYXJzZVdvcmQoRlhfQlNUUiBzdHIpOworICAgIENGWF9CaW5hcnlCdWYJbV9BZGRNYXBzOworcHJpdmF0ZToKKyAgICBDUERGX0NNYXAqCW1fcENNYXA7CisgICAgaW50CQkJCW1fU3RhdHVzOworICAgIGludAkJCQltX0NvZGVTZXE7CisgICAgRlhfRFdPUkQJCW1fQ29kZVBvaW50c1s0XTsKKyAgICBDRlhfQXJyYXlUZW1wbGF0ZTxfQ01hcF9Db2RlUmFuZ2U+CW1fQ29kZVJhbmdlczsKKyAgICBDRlhfQnl0ZVN0cmluZwltX1JlZ2lzdHJ5LCBtX09yZGVyaW5nLCBtX1N1cHBsZW1lbnQ7CisgICAgQ0ZYX0J5dGVTdHJpbmcJbV9MYXN0V29yZDsKK307CisjZGVmaW5lIENJRENPRElOR19VTktOT1dOCTAKKyNkZWZpbmUgQ0lEQ09ESU5HX0dCCQkxCisjZGVmaW5lIENJRENPRElOR19CSUc1CQkyCisjZGVmaW5lIENJRENPRElOR19KSVMJCTMKKyNkZWZpbmUgQ0lEQ09ESU5HX0tPUkVBCQk0CisjZGVmaW5lIENJRENPRElOR19VQ1MyCQk1CisjZGVmaW5lIENJRENPRElOR19DSUQJCTYKKyNkZWZpbmUgQ0lEQ09ESU5HX1VURjE2CQk3CitjbGFzcyBDUERGX0NNYXAgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENQREZfQ01hcCgpOworICAgIEZYX0JPT0wJCQkJCUxvYWRQcmVkZWZpbmVkKENQREZfQ01hcE1hbmFnZXIqIHBNZ3IsIGNvbnN0IEZYX0NIQVIqIG5hbWUsIEZYX0JPT0wgYlByb21wdENKSyk7CisgICAgRlhfQk9PTAkJCQkJTG9hZEVtYmVkZGVkKEZYX0xQQ0JZVEUgcERhdGEsIEZYX0RXT1JEIGR3U2l6ZSk7CisgICAgdm9pZAkJCQkJUmVsZWFzZSgpOworICAgIEZYX0JPT0wJCQkJCUlzTG9hZGVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JMb2FkZWQ7CisgICAgfQorICAgIGludAkJCQkJCUdldENoYXJzZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fQ2hhcnNldDsKKyAgICB9CisgICAgRlhfQk9PTAkJCQkJSXNWZXJ0V3JpdGluZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9iVmVydGljYWw7CisgICAgfQorICAgIEZYX1dPUkQJCQkJCUNJREZyb21DaGFyQ29kZShGWF9EV09SRCBjaGFyY29kZSkgY29uc3Q7CisgICAgRlhfRFdPUkQJCQkJQ2hhckNvZGVGcm9tQ0lEKEZYX1dPUkQgQ0lEKSBjb25zdDsKKyAgICBpbnQJCQkJCQlHZXRDaGFyU2l6ZShGWF9EV09SRCBjaGFyY29kZSkgY29uc3Q7CisgICAgRlhfRFdPUkQJCQkJR2V0TmV4dENoYXIoY29uc3QgRlhfQ0hBUiogcFN0cmluZywgaW50JiBvZmZzZXQpIGNvbnN0OworICAgIGludAkJCQkJCUNvdW50Q2hhcihjb25zdCBGWF9DSEFSKiBwU3RyaW5nLCBpbnQgc2l6ZSkgY29uc3Q7CisgICAgaW50CQkJCQkJQXBwZW5kQ2hhcihGWF9MUFNUUiBzdHIsIEZYX0RXT1JEIGNoYXJjb2RlKSBjb25zdDsKKyAgICB0eXBlZGVmIGVudW0ge09uZUJ5dGUsIFR3b0J5dGVzLCBNaXhlZFR3b0J5dGVzLCBNaXhlZEZvdXJCeXRlc30gQ29kaW5nU2NoZW1lOworcHJvdGVjdGVkOgorICAgIH5DUERGX0NNYXAoKTsKKyAgICBmcmllbmQgY2xhc3MJCQlDUERGX0NNYXBQYXJzZXI7CisgICAgZnJpZW5kIGNsYXNzCQkJQ1BERl9DTWFwTWFuYWdlcjsKKyAgICBmcmllbmQgY2xhc3MJCQlDUERGX0NJREZvbnQ7Citwcm90ZWN0ZWQ6CisgICAgQ0ZYX0J5dGVTdHJpbmcJCQltX1ByZWRlZmluZWRDTWFwOworICAgIEZYX0JPT0wJCQkJCW1fYlZlcnRpY2FsOworICAgIGludAkJCQkJCW1fQ2hhcnNldCwgbV9Db2Rpbmc7CisgICAgQ29kaW5nU2NoZW1lCQkJbV9Db2RpbmdTY2hlbWU7CisgICAgaW50CQkJCQkJbV9uQ29kZVJhbmdlczsKKyAgICBGWF9CWVRFKgkJCQltX3BMZWFkaW5nQnl0ZXM7CisgICAgRlhfV09SRCoJCQkJbV9wTWFwcGluZzsKKyAgICBGWF9MUEJZVEUJCQkJbV9wQWRkTWFwcGluZzsKKyAgICBGWF9CT09MCQkJCQltX2JMb2FkZWQ7CisgICAgY29uc3QgRlhDTUFQX0NNYXAqCQltX3BFbWJlZE1hcDsKKyAgICBDUERGX0NNYXAqCQkJCW1fcFVzZU1hcDsKK307CitjbGFzcyBDUERGX1ByZWRlZmluZWRDTWFwCit7CitwdWJsaWM6CisgICAgRlhfTFBDU1RSCW1fcE5hbWU7CisgICAgaW50CQkJbV9DaGFyc2V0OworICAgIGludAkJCW1fQ29kaW5nOworICAgIENQREZfQ01hcDo6Q29kaW5nU2NoZW1lCW1fQ29kaW5nU2NoZW1lOworICAgIEZYX0RXT1JECW1fTGVhZGluZ1NlZ0NvdW50OworICAgIEZYX0JZVEUJCW1fTGVhZGluZ1NlZ3NbNF07Cit9OwordHlwZWRlZiBzdHJ1Y3QgX0ZpbGVIZWFkZXIgeworICAgIEZYX0JZVEUJCWJ0VGFnWzRdOworICAgIEZYX0JZVEUJCWJ0VmVyc2lvbjsKKyAgICBGWF9CWVRFCQlidEZvcm1hdDsKKyAgICBGWF9CWVRFCQlidFJlc2VydmVkMVsyXTsKKyAgICBGWF9EV09SRAlkd1N0YXJ0SW5kZXg7CisgICAgRlhfRFdPUkQJZHdFbmRJbmRleDsKKyAgICBGWF9EV09SRAlkd0RhdGFTaXplOworICAgIEZYX0RXT1JECWR3RGF0YU9mZnNldDsKKyAgICBGWF9EV09SRAlkd1JlY29yZFNpemU7Cit9IEZYTVBfRklMRUhFQURFUjsKK2NsYXNzIENQREZfRlhNUCA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ1BERl9GWE1QKCkKKyAgICB7CisgICAgICAgIG1fcEhlYWRlciA9IE5VTEw7CisgICAgICAgIG1fcFRhYmxlID0gTlVMTDsKKyAgICB9CisgICAgfkNQREZfRlhNUCgpCisgICAgeworICAgICAgICBpZiAobV9wSGVhZGVyKSB7CisgICAgICAgICAgICBGWF9GcmVlKG1fcEhlYWRlcik7CisgICAgICAgIH0KKyAgICB9CisgICAgRlhfQk9PTAkJSXNMb2FkZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcFRhYmxlICE9IE5VTEw7CisgICAgfQorICAgIEZYX0JPT0wJCUxvYWRGaWxlKEZYX0xQVk9JRCBwUGFja2FnZSwgRlhfTFBDU1RSIGZpbGVpZCk7CisgICAgRlhfTFBCWVRFCUdldFJlY29yZChGWF9EV09SRCBpbmRleCk7Citwcml2YXRlOgorICAgIEZYTVBfRklMRUhFQURFUioJbV9wSGVhZGVyOworICAgIEZYX0xQQllURQltX3BUYWJsZTsKK307CitjbGFzcyBDUERGX0NJRDJVbmljb2RlTWFwIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBDUERGX0NJRDJVbmljb2RlTWFwKCk7CisgICAgfkNQREZfQ0lEMlVuaWNvZGVNYXAoKTsKKyAgICBGWF9CT09MCQlJbml0aWFsaXplKCk7CisgICAgRlhfQk9PTAkJSXNMb2FkZWQoKTsKKyAgICB2b2lkCQlMb2FkKENQREZfQ01hcE1hbmFnZXIqIHBNZ3IsIGludCBjaGFyc2V0LCBGWF9CT09MIGJQcm9tcHRDSkspOworICAgIEZYX1dDSEFSCVVuaWNvZGVGcm9tQ0lEKEZYX1dPUkQgQ0lEKTsKK3Byb3RlY3RlZDoKKyAgICBpbnQJCQltX0NoYXJzZXQ7CisgICAgY29uc3QgRlhfV09SRCoJbV9wRW1iZWRkZWRNYXA7CisgICAgRlhfRFdPUkQJbV9FbWJlZGRlZENvdW50OworI2lmbmRlZiBfRlBERkFQSV9NSU5JXworICAgIENQREZfRlhNUCoJbV9wRXh0ZXJuYWxNYXA7CisjZW5kaWYKK307CitjbGFzcyBDUERGX1RvVW5pY29kZU1hcCA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgdm9pZAkJCQkJTG9hZChDUERGX1N0cmVhbSogcFN0cmVhbSk7CisgICAgQ0ZYX1dpZGVTdHJpbmcJCQlMb29rdXAoRlhfRFdPUkQgY2hhcmNvZGUpOworICAgIEZYX0RXT1JECQkJCVJldmVyc2VMb29rdXAoRlhfV0NIQVIgdW5pY29kZSk7Citwcm90ZWN0ZWQ6CisgICAgQ0ZYX0NNYXBEV29yZFRvRFdvcmQJbV9NYXA7CisgICAgQ1BERl9DSUQyVW5pY29kZU1hcCoJbV9wQmFzZU1hcDsKKyAgICBDRlhfV2lkZVRleHRCdWYJCQltX011bHRpQ2hhckJ1ZjsKK307CitjbGFzcyBDUERGX0ZvbnRDaGFyTWFwIDogcHVibGljIENGWF9DaGFyTWFwLCBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENQREZfRm9udENoYXJNYXAoQ1BERl9Gb250KiBwRm9udCk7CisgICAgQ1BERl9Gb250KgkJbV9wRm9udDsKK307CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfZm9udC9mcGRmX2ZvbnQuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2ZvbnQvZnBkZl9mb250LmNwcAppbmRleCA4ODYxOTliLi40YmVjMzMzIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfZm9udC9mcGRmX2ZvbnQuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9mb250L2ZwZGZfZm9udC5jcHAKQEAgLTEsMTc2MyArMSwxNzYzIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZW9iai5oIg0KLSNpbmNsdWRlICJmb250X2ludC5oIg0KLSNpbmNsdWRlICIuLi9mcGRmX3BhZ2UvcGFnZWludC5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZnJlZXR5cGUuaCINCi1GWF9CT09MIEZUX1VzZVRUQ2hhcm1hcChGWEZUX0ZhY2UgZmFjZSwgaW50IHBsYXRmb3JtX2lkLCBpbnQgZW5jb2RpbmdfaWQpDQotew0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcENvdW50KGZhY2UpOyBpICsrKSB7DQotICAgICAgICBpZiAoRlhGVF9HZXRfQ2hhcm1hcF9QbGF0Zm9ybUlEKEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcHMoZmFjZSlbaV0pID09IHBsYXRmb3JtX2lkICYmDQotICAgICAgICAgICAgICAgIEZYRlRfR2V0X0NoYXJtYXBfRW5jb2RpbmdJRChGWEZUX0dldF9GYWNlX0NoYXJtYXBzKGZhY2UpW2ldKSA9PSBlbmNvZGluZ19pZCkgew0KLSAgICAgICAgICAgIEZYRlRfU2V0X0NoYXJtYXAoZmFjZSwgRlhGVF9HZXRfRmFjZV9DaGFybWFwcyhmYWNlKVtpXSk7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1leHRlcm4gY29uc3QgRlhfV09SRCogUERGX1VuaWNvZGVzRm9yUHJlZGVmaW5lZENoYXJTZXQoaW50KTsNCi1DUERGX0ZvbnRHbG9iYWxzOjpDUERGX0ZvbnRHbG9iYWxzKCkNCi17DQotICAgIEZYU1lTX21lbXNldDMyKG1fRW1iZWRkZWRDaGFyc2V0cywgMCwgc2l6ZW9mIG1fRW1iZWRkZWRDaGFyc2V0cyk7DQotICAgIEZYU1lTX21lbXNldDMyKG1fRW1iZWRkZWRUb1VuaWNvZGVzLCAwLCBzaXplb2YgbV9FbWJlZGRlZFRvVW5pY29kZXMpOw0KLSAgICBtX3BDb250cmFzdFJhbXBzID0gTlVMTDsNCi19DQotQ1BERl9Gb250R2xvYmFsczo6fkNQREZfRm9udEdsb2JhbHMoKQ0KLXsNCi0gICAgQ2xlYXJBbGwoKTsNCi0gICAgaWYgKG1fcENvbnRyYXN0UmFtcHMpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wQ29udHJhc3RSYW1wcyk7DQotICAgIH0NCi19DQotY2xhc3MgQ0ZYX1N0b2NrRm9udEFycmF5IDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDRlhfU3RvY2tGb250QXJyYXkoKQ0KLSAgICB7DQotICAgICAgICBGWFNZU19tZW1zZXQzMihtX3BTdG9ja0ZvbnRzLCAwLCBzaXplb2YoQ1BERl9Gb250KikgKiAxNCk7DQotICAgIH0NCi0gICAgQ1BERl9Gb250KgkJCW1fcFN0b2NrRm9udHNbMTRdOw0KLX07DQotQ1BERl9Gb250KiBDUERGX0ZvbnRHbG9iYWxzOjpGaW5kKHZvaWQqIGtleSwgaW50IGluZGV4KQ0KLXsNCi0gICAgdm9pZCogdmFsdWUgPSBOVUxMOw0KLSAgICBpZiAoIW1fcFN0b2NrTWFwLkxvb2t1cChrZXksIHZhbHVlKSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKCF2YWx1ZSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuICgoQ0ZYX1N0b2NrRm9udEFycmF5Kil2YWx1ZSktPm1fcFN0b2NrRm9udHNbaW5kZXhdOw0KLX0NCi12b2lkIENQREZfRm9udEdsb2JhbHM6OlNldCh2b2lkKiBrZXksIGludCBpbmRleCwgQ1BERl9Gb250KiBwRm9udCkNCi17DQotICAgIHZvaWQqIHZhbHVlID0gTlVMTDsNCi0gICAgaWYgKG1fcFN0b2NrTWFwLkxvb2t1cChrZXksIHZhbHVlKSkgew0KLSAgICAgICAgKChDRlhfU3RvY2tGb250QXJyYXkqKXZhbHVlKS0+bV9wU3RvY2tGb250c1tpbmRleF0gPSBwRm9udDsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDRlhfU3RvY2tGb250QXJyYXkqIHBGb250cyA9IEZYX05FVyBDRlhfU3RvY2tGb250QXJyYXkoKTsNCi0gICAgaWYgKHBGb250cykgew0KLSAgICAgICAgcEZvbnRzLT5tX3BTdG9ja0ZvbnRzW2luZGV4XSA9IHBGb250Ow0KLSAgICB9DQotICAgIG1fcFN0b2NrTWFwLlNldEF0KGtleSwgcEZvbnRzKTsNCi19DQotdm9pZCBDUERGX0ZvbnRHbG9iYWxzOjpDbGVhcih2b2lkKiBrZXkpDQotew0KLSAgICB2b2lkKiB2YWx1ZSA9IE5VTEw7DQotICAgIGlmICghbV9wU3RvY2tNYXAuTG9va3VwKGtleSwgdmFsdWUpKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKHZhbHVlKSB7DQotICAgICAgICBDRlhfU3RvY2tGb250QXJyYXkqIHBTdG9ja0ZvbnRzID0gKENGWF9TdG9ja0ZvbnRBcnJheSopdmFsdWU7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE0OyBpICsrKSB7DQotICAgICAgICAgICAgaWYgKHBTdG9ja0ZvbnRzLT5tX3BTdG9ja0ZvbnRzW2ldKSB7DQotICAgICAgICAgICAgICAgIHBTdG9ja0ZvbnRzLT5tX3BTdG9ja0ZvbnRzW2ldLT5HZXRGb250RGljdCgpLT5SZWxlYXNlKCk7DQotICAgICAgICAgICAgICAgIGRlbGV0ZSBwU3RvY2tGb250cy0+bV9wU3RvY2tGb250c1tpXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBkZWxldGUgcFN0b2NrRm9udHM7DQotICAgIH0NCi0gICAgbV9wU3RvY2tNYXAuUmVtb3ZlS2V5KGtleSk7DQotfQ0KLXZvaWQgQ1BERl9Gb250R2xvYmFsczo6Q2xlYXJBbGwoKQ0KLXsNCi0gICAgRlhfUE9TSVRJT04gcG9zID0gbV9wU3RvY2tNYXAuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICB2b2lkICprZXkgPSBOVUxMOw0KLSAgICAgICAgdm9pZCogdmFsdWUgPSBOVUxMOw0KLSAgICAgICAgbV9wU3RvY2tNYXAuR2V0TmV4dEFzc29jKHBvcywga2V5LCB2YWx1ZSk7DQotICAgICAgICBpZiAodmFsdWUpIHsNCi0gICAgICAgICAgICBDRlhfU3RvY2tGb250QXJyYXkqIHBTdG9ja0ZvbnRzID0gKENGWF9TdG9ja0ZvbnRBcnJheSopdmFsdWU7DQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNDsgaSArKykgew0KLSAgICAgICAgICAgICAgICBpZiAocFN0b2NrRm9udHMtPm1fcFN0b2NrRm9udHNbaV0pIHsNCi0gICAgICAgICAgICAgICAgICAgIHBTdG9ja0ZvbnRzLT5tX3BTdG9ja0ZvbnRzW2ldLT5HZXRGb250RGljdCgpLT5SZWxlYXNlKCk7DQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgcFN0b2NrRm9udHMtPm1fcFN0b2NrRm9udHNbaV07DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZGVsZXRlIHBTdG9ja0ZvbnRzOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wU3RvY2tNYXAuUmVtb3ZlS2V5KGtleSk7DQotICAgIH0NCi19DQotQ1BERl9Gb250OjpDUERGX0ZvbnQoKQ0KLXsNCi0gICAgbV9Gb250VHlwZSA9IDA7DQotICAgIG1fRm9udEJCb3gubGVmdCA9IG1fRm9udEJCb3gucmlnaHQgPSBtX0ZvbnRCQm94LnRvcCA9IG1fRm9udEJCb3guYm90dG9tID0gMDsNCi0gICAgbV9TdGVtViA9IG1fQXNjZW50ID0gbV9EZXNjZW50ID0gbV9JdGFsaWNBbmdsZSA9IDA7DQotICAgIG1fcEZvbnRGaWxlID0gTlVMTDsNCi0gICAgbV9GbGFncyA9IDA7DQotICAgIG1fcFRvVW5pY29kZU1hcCA9IE5VTEw7DQotICAgIG1fYlRvVW5pY29kZUxvYWRlZCA9IEZBTFNFOw0KLSAgICBtX3BDaGFyTWFwID0gTlVMTDsNCi19DQotRlhfQk9PTCBDUERGX0ZvbnQ6OkluaXRpYWxpemUoKQ0KLXsNCi0gICAgbV9wQ2hhck1hcCA9IEZYX05FVyBDUERGX0ZvbnRDaGFyTWFwKHRoaXMpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotQ1BERl9Gb250Ojp+Q1BERl9Gb250KCkNCi17DQotICAgIGlmIChtX3BDaGFyTWFwKSB7DQotICAgICAgICBGWF9GcmVlKG1fcENoYXJNYXApOw0KLSAgICAgICAgbV9wQ2hhck1hcCA9IE5VTEw7DQotICAgIH0NCi0gICAgaWYgKG1fcFRvVW5pY29kZU1hcCkgew0KLSAgICAgICAgZGVsZXRlIG1fcFRvVW5pY29kZU1hcDsNCi0gICAgICAgIG1fcFRvVW5pY29kZU1hcCA9IE5VTEw7DQotICAgIH0NCi0gICAgaWYgKG1fcEZvbnRGaWxlKSB7DQotICAgICAgICBtX3BEb2N1bWVudC0+R2V0UGFnZURhdGEoKS0+UmVsZWFzZUZvbnRGaWxlU3RyZWFtQWNjKChDUERGX1N0cmVhbSopbV9wRm9udEZpbGUtPkdldFN0cmVhbSgpKTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENQREZfRm9udDo6SXNWZXJ0V3JpdGluZygpIGNvbnN0DQotew0KLSAgICBGWF9CT09MIGJWZXJ0V3JpdGluZyA9IEZBTFNFOw0KLSAgICBDUERGX0NJREZvbnQqIHBDSURGb250ID0gR2V0Q0lERm9udCgpOw0KLSAgICBpZiAocENJREZvbnQpIHsNCi0gICAgICAgIGJWZXJ0V3JpdGluZyA9IHBDSURGb250LT5Jc1ZlcnRXcml0aW5nKCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBiVmVydFdyaXRpbmcgPSBtX0ZvbnQuSXNWZXJ0aWNhbCgpOw0KLSAgICB9DQotICAgIHJldHVybiBiVmVydFdyaXRpbmc7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENQREZfRm9udDo6R2V0Rm9udFR5cGVOYW1lKCkgY29uc3QNCi17DQotICAgIHN3aXRjaCAobV9Gb250VHlwZSkgew0KLSAgICAgICAgY2FzZSBQREZGT05UX1RZUEUxOg0KLSAgICAgICAgICAgIHJldHVybiBGWF9CU1RSQygiVHlwZTEiKTsNCi0gICAgICAgIGNhc2UgUERGRk9OVF9UUlVFVFlQRToNCi0gICAgICAgICAgICByZXR1cm4gRlhfQlNUUkMoIlRydWVUeXBlIik7DQotICAgICAgICBjYXNlIFBERkZPTlRfVFlQRTM6DQotICAgICAgICAgICAgcmV0dXJuIEZYX0JTVFJDKCJUeXBlMyIpOw0KLSAgICAgICAgY2FzZSBQREZGT05UX0NJREZPTlQ6DQotICAgICAgICAgICAgcmV0dXJuIEZYX0JTVFJDKCJUeXBlMCIpOw0KLSAgICB9DQotICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZygpOw0KLX0NCi12b2lkIENQREZfRm9udDo6QXBwZW5kQ2hhcihDRlhfQnl0ZVN0cmluZyYgc3RyLCBGWF9EV09SRCBjaGFyY29kZSkgY29uc3QNCi17DQotICAgIGNoYXIgYnVmWzRdOw0KLSAgICBpbnQgbGVuID0gQXBwZW5kQ2hhcihidWYsIGNoYXJjb2RlKTsNCi0gICAgaWYgKGxlbiA9PSAxKSB7DQotICAgICAgICBzdHIgKz0gYnVmWzBdOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgc3RyICs9IENGWF9CeXRlU3RyaW5nKGJ1ZiwgbGVuKTsNCi0gICAgfQ0KLX0NCi1DRlhfV2lkZVN0cmluZyBDUERGX0ZvbnQ6OlVuaWNvZGVGcm9tQ2hhckNvZGUoRlhfRFdPUkQgY2hhcmNvZGUpIGNvbnN0DQotew0KLSAgICBpZiAoIW1fYlRvVW5pY29kZUxvYWRlZCkgew0KLSAgICAgICAgKChDUERGX0ZvbnQqKXRoaXMpLT5Mb2FkVW5pY29kZU1hcCgpOw0KLSAgICB9DQotICAgIGlmIChtX3BUb1VuaWNvZGVNYXApIHsNCi0gICAgICAgIENGWF9XaWRlU3RyaW5nIHdzUmV0ID0gbV9wVG9Vbmljb2RlTWFwLT5Mb29rdXAoY2hhcmNvZGUpOw0KLSAgICAgICAgaWYgKCF3c1JldC5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICByZXR1cm4gd3NSZXQ7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhfV0NIQVIgdW5pY29kZSA9IF9Vbmljb2RlRnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsNCi0gICAgaWYgKHVuaWNvZGUgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7DQotICAgIH0NCi0gICAgcmV0dXJuIHVuaWNvZGU7DQotfQ0KLUZYX0RXT1JEIENQREZfRm9udDo6Q2hhckNvZGVGcm9tVW5pY29kZShGWF9XQ0hBUiB1bmljb2RlKSBjb25zdA0KLXsNCi0gICAgaWYgKCFtX2JUb1VuaWNvZGVMb2FkZWQpIHsNCi0gICAgICAgICgoQ1BERl9Gb250Kil0aGlzKS0+TG9hZFVuaWNvZGVNYXAoKTsNCi0gICAgfQ0KLSAgICBpZiAobV9wVG9Vbmljb2RlTWFwKSB7DQotICAgICAgICBGWF9EV09SRCBjaGFyY29kZSA9IG1fcFRvVW5pY29kZU1hcC0+UmV2ZXJzZUxvb2t1cCh1bmljb2RlKTsNCi0gICAgICAgIGlmIChjaGFyY29kZSkgew0KLSAgICAgICAgICAgIHJldHVybiBjaGFyY29kZTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gX0NoYXJDb2RlRnJvbVVuaWNvZGUodW5pY29kZSk7DQotfQ0KLUNGWF9XaWRlU3RyaW5nIENQREZfRm9udDo6RGVjb2RlU3RyaW5nKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIpIGNvbnN0DQotew0KLSAgICBDRlhfV2lkZVN0cmluZyByZXN1bHQ7DQotICAgIGludCBzcmNfbGVuID0gc3RyLkdldExlbmd0aCgpOw0KLSAgICByZXN1bHQuUmVzZXJ2ZShzcmNfbGVuKTsNCi0gICAgRlhfTFBDU1RSIHNyY19idWYgPSBzdHI7DQotICAgIGludCBzcmNfcG9zID0gMDsNCi0gICAgd2hpbGUgKHNyY19wb3MgPCBzcmNfbGVuKSB7DQotICAgICAgICBGWF9EV09SRCBjaGFyY29kZSA9IEdldE5leHRDaGFyKHNyY19idWYsIHNyY19wb3MpOw0KLSAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgdW5pY29kZSA9IFVuaWNvZGVGcm9tQ2hhckNvZGUoY2hhcmNvZGUpOw0KLSAgICAgICAgaWYgKCF1bmljb2RlLklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgIHJlc3VsdCArPSB1bmljb2RlOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICByZXN1bHQgKz0gKEZYX1dDSEFSKWNoYXJjb2RlOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiByZXN1bHQ7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENQREZfRm9udDo6RW5jb2RlU3RyaW5nKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHIpIGNvbnN0DQotew0KLSAgICBDRlhfQnl0ZVN0cmluZyByZXN1bHQ7DQotICAgIGludCBzcmNfbGVuID0gc3RyLkdldExlbmd0aCgpOw0KLSAgICBGWF9MUFNUUiBkZXN0X2J1ZiA9IHJlc3VsdC5HZXRCdWZmZXIoc3JjX2xlbiAqIDIpOw0KLSAgICBGWF9MUENXU1RSIHNyY19idWYgPSBzdHI7DQotICAgIGludCBkZXN0X3BvcyA9IDA7DQotICAgIGZvciAoaW50IHNyY19wb3MgPSAwOyBzcmNfcG9zIDwgc3JjX2xlbjsgc3JjX3BvcyArKykgew0KLSAgICAgICAgRlhfRFdPUkQgY2hhcmNvZGUgPSBDaGFyQ29kZUZyb21Vbmljb2RlKHNyY19idWZbc3JjX3Bvc10pOw0KLSAgICAgICAgZGVzdF9wb3MgKz0gQXBwZW5kQ2hhcihkZXN0X2J1ZiArIGRlc3RfcG9zLCBjaGFyY29kZSk7DQotICAgIH0NCi0gICAgcmVzdWx0LlJlbGVhc2VCdWZmZXIoZGVzdF9wb3MpOw0KLSAgICByZXR1cm4gcmVzdWx0Ow0KLX0NCi12b2lkIENQREZfRm9udDo6TG9hZEZvbnREZXNjcmlwdG9yKENQREZfRGljdGlvbmFyeSogcEZvbnREZXNjKQ0KLXsNCi0gICAgbV9GbGFncyA9IHBGb250RGVzYy0+R2V0SW50ZWdlcihGWF9CU1RSQygiRmxhZ3MiKSwgUERGRk9OVF9OT05TWU1CT0xJQyk7DQotICAgIGludCBJdGFsaWNBbmdsZSA9IDA7DQotICAgIEZYX0JPT0wgYkV4aXN0SXRhbGljQW5nbGUgPSBGQUxTRTsNCi0gICAgaWYgKHBGb250RGVzYy0+S2V5RXhpc3QoRlhfQlNUUkMoIkl0YWxpY0FuZ2xlIikpKSB7DQotICAgICAgICBJdGFsaWNBbmdsZSA9IHBGb250RGVzYy0+R2V0SW50ZWdlcihGWF9CU1RSQygiSXRhbGljQW5nbGUiKSk7DQotICAgICAgICBiRXhpc3RJdGFsaWNBbmdsZSA9IFRSVUU7DQotICAgIH0NCi0gICAgaWYgKEl0YWxpY0FuZ2xlIDwgMCkgew0KLSAgICAgICAgbV9GbGFncyB8PSBQREZGT05UX0lUQUxJQzsNCi0gICAgICAgIG1fSXRhbGljQW5nbGUgPSBJdGFsaWNBbmdsZTsNCi0gICAgfQ0KLSAgICBGWF9CT09MIGJFeGlzdFN0ZW1WID0gRkFMU0U7DQotICAgIGlmIChwRm9udERlc2MtPktleUV4aXN0KEZYX0JTVFJDKCJTdGVtViIpKSkgew0KLSAgICAgICAgbV9TdGVtViA9IHBGb250RGVzYy0+R2V0SW50ZWdlcihGWF9CU1RSQygiU3RlbVYiKSk7DQotICAgICAgICBiRXhpc3RTdGVtViA9IFRSVUU7DQotICAgIH0NCi0gICAgRlhfQk9PTCBiRXhpc3RBc2NlbnQgPSBGQUxTRTsNCi0gICAgaWYgKHBGb250RGVzYy0+S2V5RXhpc3QoRlhfQlNUUkMoIkFzY2VudCIpKSkgew0KLSAgICAgICAgbV9Bc2NlbnQgPSBwRm9udERlc2MtPkdldEludGVnZXIoRlhfQlNUUkMoIkFzY2VudCIpKTsNCi0gICAgICAgIGJFeGlzdEFzY2VudCA9IFRSVUU7DQotICAgIH0NCi0gICAgRlhfQk9PTCBiRXhpc3REZXNjZW50ID0gRkFMU0U7DQotICAgIGlmIChwRm9udERlc2MtPktleUV4aXN0KEZYX0JTVFJDKCJEZXNjZW50IikpKSB7DQotICAgICAgICBtX0Rlc2NlbnQgPSBwRm9udERlc2MtPkdldEludGVnZXIoRlhfQlNUUkMoIkRlc2NlbnQiKSk7DQotICAgICAgICBiRXhpc3REZXNjZW50ID0gVFJVRTsNCi0gICAgfQ0KLSAgICBGWF9CT09MIGJFeGlzdENhcEhlaWdodCA9IEZBTFNFOw0KLSAgICBpZiAocEZvbnREZXNjLT5LZXlFeGlzdChGWF9CU1RSQygiQ2FwSGVpZ2h0IikpKSB7DQotICAgICAgICBiRXhpc3RDYXBIZWlnaHQgPSBUUlVFOw0KLSAgICB9DQotICAgIGlmIChiRXhpc3RJdGFsaWNBbmdsZSAmJiBiRXhpc3RBc2NlbnQgJiYgYkV4aXN0Q2FwSGVpZ2h0ICYmIGJFeGlzdERlc2NlbnQgJiYgYkV4aXN0U3RlbVYpIHsNCi0gICAgICAgIG1fRmxhZ3MgfD0gUERGRk9OVF9VU0VFWFRFUk5BVFRSOw0KLSAgICB9DQotICAgIGlmIChtX0Rlc2NlbnQgPiAxMCkgew0KLSAgICAgICAgbV9EZXNjZW50ID0gLW1fRGVzY2VudDsNCi0gICAgfQ0KLSAgICBDUERGX0FycmF5KiBwQkJveCA9IHBGb250RGVzYy0+R2V0QXJyYXkoRlhfQlNUUkMoIkZvbnRCQm94IikpOw0KLSAgICBpZiAocEJCb3gpIHsNCi0gICAgICAgIG1fRm9udEJCb3gubGVmdCA9IHBCQm94LT5HZXRJbnRlZ2VyKDApOw0KLSAgICAgICAgbV9Gb250QkJveC5ib3R0b20gPSBwQkJveC0+R2V0SW50ZWdlcigxKTsNCi0gICAgICAgIG1fRm9udEJCb3gucmlnaHQgPSBwQkJveC0+R2V0SW50ZWdlcigyKTsNCi0gICAgICAgIG1fRm9udEJCb3gudG9wID0gcEJCb3gtPkdldEludGVnZXIoMyk7DQotICAgIH0NCi0gICAgQ1BERl9TdHJlYW0qIHBGb250RmlsZSA9IHBGb250RGVzYy0+R2V0U3RyZWFtKEZYX0JTVFJDKCJGb250RmlsZSIpKTsNCi0gICAgaWYgKHBGb250RmlsZSA9PSBOVUxMKSB7DQotICAgICAgICBwRm9udEZpbGUgPSBwRm9udERlc2MtPkdldFN0cmVhbShGWF9CU1RSQygiRm9udEZpbGUyIikpOw0KLSAgICB9DQotICAgIGlmIChwRm9udEZpbGUgPT0gTlVMTCkgew0KLSAgICAgICAgcEZvbnRGaWxlID0gcEZvbnREZXNjLT5HZXRTdHJlYW0oRlhfQlNUUkMoIkZvbnRGaWxlMyIpKTsNCi0gICAgfQ0KLSAgICBpZiAocEZvbnRGaWxlKSB7DQotICAgICAgICBtX3BGb250RmlsZSA9IG1fcERvY3VtZW50LT5Mb2FkRm9udEZpbGUocEZvbnRGaWxlKTsNCi0gICAgICAgIGlmIChtX3BGb250RmlsZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfTFBDQllURSBwRm9udERhdGEgPSBtX3BGb250RmlsZS0+R2V0RGF0YSgpOw0KLSAgICAgICAgRlhfRFdPUkQgZHdGb250U2l6ZSA9IG1fcEZvbnRGaWxlLT5HZXRTaXplKCk7DQotICAgICAgICBtX0ZvbnQuTG9hZEVtYmVkZGVkKHBGb250RGF0YSwgZHdGb250U2l6ZSk7DQotICAgICAgICBpZiAobV9Gb250Lm1fRmFjZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgbV9wRm9udEZpbGUgPSBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLXNob3J0IFRUMlBERihpbnQgbSwgRlhGVF9GYWNlIGZhY2UpDQotew0KLSAgICBpbnQgdXBtID0gRlhGVF9HZXRfRmFjZV9Vbml0c1BlckVNKGZhY2UpOw0KLSAgICBpZiAodXBtID09IDApIHsNCi0gICAgICAgIHJldHVybiAoc2hvcnQpbTsNCi0gICAgfQ0KLSAgICByZXR1cm4gKG0gKiAxMDAwICsgdXBtIC8gMikgLyB1cG07DQotfQ0KLXZvaWQgQ1BERl9Gb250OjpDaGVja0ZvbnRNZXRyaWNzKCkNCi17DQotICAgIGlmIChtX0ZvbnRCQm94LnRvcCA9PSAwICYmIG1fRm9udEJCb3guYm90dG9tID09IDAgJiYgbV9Gb250QkJveC5sZWZ0ID09IDAgJiYgbV9Gb250QkJveC5yaWdodCA9PSAwKSB7DQotICAgICAgICBpZiAobV9Gb250Lm1fRmFjZSkgew0KLSAgICAgICAgICAgIG1fRm9udEJCb3gubGVmdCA9IFRUMlBERihGWEZUX0dldF9GYWNlX3hNaW4obV9Gb250Lm1fRmFjZSksIG1fRm9udC5tX0ZhY2UpOw0KLSAgICAgICAgICAgIG1fRm9udEJCb3guYm90dG9tID0gVFQyUERGKEZYRlRfR2V0X0ZhY2VfeU1pbihtX0ZvbnQubV9GYWNlKSwgbV9Gb250Lm1fRmFjZSk7DQotICAgICAgICAgICAgbV9Gb250QkJveC5yaWdodCA9IFRUMlBERihGWEZUX0dldF9GYWNlX3hNYXgobV9Gb250Lm1fRmFjZSksIG1fRm9udC5tX0ZhY2UpOw0KLSAgICAgICAgICAgIG1fRm9udEJCb3gudG9wID0gVFQyUERGKEZYRlRfR2V0X0ZhY2VfeU1heChtX0ZvbnQubV9GYWNlKSwgbV9Gb250Lm1fRmFjZSk7DQotICAgICAgICAgICAgbV9Bc2NlbnQgPSBUVDJQREYoRlhGVF9HZXRfRmFjZV9Bc2NlbmRlcihtX0ZvbnQubV9GYWNlKSwgbV9Gb250Lm1fRmFjZSk7DQotICAgICAgICAgICAgbV9EZXNjZW50ID0gVFQyUERGKEZYRlRfR2V0X0ZhY2VfRGVzY2VuZGVyKG1fRm9udC5tX0ZhY2UpLCBtX0ZvbnQubV9GYWNlKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgRlhfQk9PTCBiRmlyc3QgPSBUUlVFOw0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7DQotICAgICAgICAgICAgICAgIEZYX1JFQ1QgcmVjdDsNCi0gICAgICAgICAgICAgICAgR2V0Q2hhckJCb3goaSwgcmVjdCk7DQotICAgICAgICAgICAgICAgIGlmIChyZWN0LmxlZnQgPT0gcmVjdC5yaWdodCkgew0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKGJGaXJzdCkgew0KLSAgICAgICAgICAgICAgICAgICAgbV9Gb250QkJveCA9IHJlY3Q7DQotICAgICAgICAgICAgICAgICAgICBiRmlyc3QgPSBGQUxTRTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX0ZvbnRCQm94LnRvcCA8IHJlY3QudG9wKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9Gb250QkJveC50b3AgPSByZWN0LnRvcDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX0ZvbnRCQm94LnJpZ2h0IDwgcmVjdC5yaWdodCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fRm9udEJCb3gucmlnaHQgPSByZWN0LnJpZ2h0Ow0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fRm9udEJCb3gubGVmdCA+IHJlY3QubGVmdCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fRm9udEJCb3gubGVmdCA9IHJlY3QubGVmdDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX0ZvbnRCQm94LmJvdHRvbSA+IHJlY3QuYm90dG9tKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9Gb250QkJveC5ib3R0b20gPSByZWN0LmJvdHRvbTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAobV9Bc2NlbnQgPT0gMCAmJiBtX0Rlc2NlbnQgPT0gMCkgew0KLSAgICAgICAgRlhfUkVDVCByZWN0Ow0KLSAgICAgICAgR2V0Q2hhckJCb3goJ0EnLCByZWN0KTsNCi0gICAgICAgIGlmIChyZWN0LmJvdHRvbSA9PSByZWN0LnRvcCkgew0KLSAgICAgICAgICAgIG1fQXNjZW50ID0gbV9Gb250QkJveC50b3A7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIG1fQXNjZW50ID0gcmVjdC50b3A7DQotICAgICAgICB9DQotICAgICAgICBHZXRDaGFyQkJveCgnZycsIHJlY3QpOw0KLSAgICAgICAgaWYgKHJlY3QuYm90dG9tID09IHJlY3QudG9wKSB7DQotICAgICAgICAgICAgbV9EZXNjZW50ID0gbV9Gb250QkJveC5ib3R0b207DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIG1fRGVzY2VudCA9IHJlY3QuYm90dG9tOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9Gb250OjpMb2FkVW5pY29kZU1hcCgpDQotew0KLSAgICBtX2JUb1VuaWNvZGVMb2FkZWQgPSBUUlVFOw0KLSAgICBDUERGX1N0cmVhbSogcFN0cmVhbSA9IG1fcEZvbnREaWN0LT5HZXRTdHJlYW0oRlhfQlNUUkMoIlRvVW5pY29kZSIpKTsNCi0gICAgaWYgKHBTdHJlYW0gPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fcFRvVW5pY29kZU1hcCA9IEZYX05FVyBDUERGX1RvVW5pY29kZU1hcDsNCi0gICAgbV9wVG9Vbmljb2RlTWFwLT5Mb2FkKHBTdHJlYW0pOw0KLX0NCi1pbnQgQ1BERl9Gb250OjpHZXRTdHJpbmdXaWR0aChGWF9MUENTVFIgcFN0cmluZywgaW50IHNpemUpDQotew0KLSAgICBpbnQgb2Zmc2V0ID0gMDsNCi0gICAgaW50IHdpZHRoID0gMDsNCi0gICAgd2hpbGUgKG9mZnNldCA8IHNpemUpIHsNCi0gICAgICAgIEZYX0RXT1JEIGNoYXJjb2RlID0gR2V0TmV4dENoYXIocFN0cmluZywgb2Zmc2V0KTsNCi0gICAgICAgIHdpZHRoICs9IEdldENoYXJXaWR0aEYoY2hhcmNvZGUpOw0KLSAgICB9DQotICAgIHJldHVybiB3aWR0aDsNCi19DQotaW50IENQREZfRm9udDo6R2V0Q2hhclR5cGVXaWR0aChGWF9EV09SRCBjaGFyY29kZSkNCi17DQotICAgIGlmIChtX0ZvbnQubV9GYWNlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGludCBnbHlwaF9pbmRleCA9IEdseXBoRnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsNCi0gICAgaWYgKGdseXBoX2luZGV4ID09IDB4ZmZmZikgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgcmV0dXJuIG1fRm9udC5HZXRHbHlwaFdpZHRoKGdseXBoX2luZGV4KTsNCi19DQotaW50IF9QREZfR2V0U3RhbmRhcmRGb250TmFtZShDRlhfQnl0ZVN0cmluZyYgbmFtZSk7DQotQ1BERl9Gb250KiBDUERGX0ZvbnQ6OkdldFN0b2NrRm9udChDUERGX0RvY3VtZW50KiBwRG9jLCBGWF9CU1RSIG5hbWUpDQotew0KLSAgICBDRlhfQnl0ZVN0cmluZyBmb250bmFtZShuYW1lKTsNCi0gICAgaW50IGZvbnRfaWQgPSBfUERGX0dldFN0YW5kYXJkRm9udE5hbWUoZm9udG5hbWUpOw0KLSAgICBpZiAoZm9udF9pZCA8IDApIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfRm9udEdsb2JhbHMqIHBGb250R2xvYmFscyA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UGFnZU1vZHVsZSgpLT5HZXRGb250R2xvYmFscygpOw0KLSAgICBDUERGX0ZvbnQqIHBGb250ID0gcEZvbnRHbG9iYWxzLT5GaW5kKHBEb2MsIGZvbnRfaWQpOw0KLSAgICBpZiAocEZvbnQpIHsNCi0gICAgICAgIHJldHVybiBwRm9udDsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gQ1BERl9EaWN0aW9uYXJ5OjpDcmVhdGUoKTsNCi0gICAgcERpY3QtPlNldEF0TmFtZShGWF9CU1RSQygiVHlwZSIpLCBGWF9CU1RSQygiRm9udCIpKTsNCi0gICAgcERpY3QtPlNldEF0TmFtZShGWF9CU1RSQygiU3VidHlwZSIpLCBGWF9CU1RSQygiVHlwZTEiKSk7DQotICAgIHBEaWN0LT5TZXRBdE5hbWUoRlhfQlNUUkMoIkJhc2VGb250IiksIGZvbnRuYW1lKTsNCi0gICAgcERpY3QtPlNldEF0TmFtZShGWF9CU1RSQygiRW5jb2RpbmciKSwgRlhfQlNUUkMoIldpbkFuc2lFbmNvZGluZyIpKTsNCi0gICAgcEZvbnQgPSBDUERGX0ZvbnQ6OkNyZWF0ZUZvbnRGKE5VTEwsIHBEaWN0KTsNCi0gICAgcEZvbnRHbG9iYWxzLT5TZXQocERvYywgZm9udF9pZCwgcEZvbnQpOw0KLSAgICByZXR1cm4gcEZvbnQ7DQotfQ0KLWNvbnN0IEZYX0JZVEUgQ2hpbmVzZUZvbnROYW1lc1tdWzVdID0gew0KLSAgICB7MHhDQiwgMHhDRSwgMHhDQywgMHhFNSwgMHgwMH0sDQotICAgIHsweEJGLCAweEFDLCAweENDLCAweEU1LCAweDAwfSwNCi0gICAgezB4QkEsIDB4REEsIDB4Q0MsIDB4RTUsIDB4MDB9LA0KLSAgICB7MHhCNywgMHhDMiwgMHhDQiwgMHhDRSwgMHgwMH0sDQotICAgIHsweEQwLCAweEMyLCAweENCLCAweENFLCAweDAwfQ0KLX07DQotQ1BERl9Gb250KiBDUERGX0ZvbnQ6OkNyZWF0ZUZvbnRGKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfRGljdGlvbmFyeSogcEZvbnREaWN0KQ0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgdHlwZSA9IHBGb250RGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJTdWJ0eXBlIikpOw0KLSAgICBDUERGX0ZvbnQqIHBGb250Ow0KLSAgICBpZiAodHlwZSA9PSBGWF9CU1RSQygiVHJ1ZVR5cGUiKSkgew0KLSAgICAgICAgew0KLSNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXyB8fCBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX0xJTlVYXyB8fCBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX0FORFJPSURfIHx8IF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fQVBQTEVfDQotICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgYmFzZWZvbnQgPSBwRm9udERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiQmFzZUZvbnQiKSk7DQotICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgdGFnID0gYmFzZWZvbnQuTGVmdCg0KTsNCi0gICAgICAgICAgICBpbnQgaTsNCi0gICAgICAgICAgICBpbnQgY291bnQgPSBzaXplb2YoQ2hpbmVzZUZvbnROYW1lcykgLyBzaXplb2YoQ2hpbmVzZUZvbnROYW1lc1swXSk7DQotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsNCi0gICAgICAgICAgICAgICAgaWYgKHRhZyA9PSBDRlhfQnl0ZVN0cmluZygoRlhfTFBDU1RSKUNoaW5lc2VGb250TmFtZXNbaV0pKSB7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoaSA8IGNvdW50KSB7DQotICAgICAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcEZvbnREZXNjID0gcEZvbnREaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJGb250RGVzY3JpcHRvciIpKTsNCi0gICAgICAgICAgICAgICAgaWYgKHBGb250RGVzYyA9PSBOVUxMIHx8ICFwRm9udERlc2MtPktleUV4aXN0KEZYX0JTVFJDKCJGb250RmlsZTIiKSkpIHsNCi0gICAgICAgICAgICAgICAgICAgIHBGb250ID0gRlhfTkVXIENQREZfQ0lERm9udDsNCi0gICAgICAgICAgICAgICAgICAgIHBGb250LT5Jbml0aWFsaXplKCk7DQotICAgICAgICAgICAgICAgICAgICBwRm9udC0+bV9Gb250VHlwZSA9IFBERkZPTlRfQ0lERk9OVDsNCi0gICAgICAgICAgICAgICAgICAgIHBGb250LT5tX3BGb250RGljdCA9IHBGb250RGljdDsNCi0gICAgICAgICAgICAgICAgICAgIHBGb250LT5tX3BEb2N1bWVudCA9IHBEb2M7DQotICAgICAgICAgICAgICAgICAgICBpZiAoIXBGb250LT5Mb2FkKCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcEZvbnQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcEZvbnQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotI2VuZGlmDQotICAgICAgICB9DQotICAgICAgICBwRm9udCA9IEZYX05FVyBDUERGX1RydWVUeXBlRm9udDsNCi0gICAgICAgIHBGb250LT5Jbml0aWFsaXplKCk7DQotICAgICAgICBwRm9udC0+bV9Gb250VHlwZSA9IFBERkZPTlRfVFJVRVRZUEU7DQotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBGWF9CU1RSQygiVHlwZTMiKSkgew0KLSAgICAgICAgcEZvbnQgPSBGWF9ORVcgQ1BERl9UeXBlM0ZvbnQ7DQotICAgICAgICBwRm9udC0+SW5pdGlhbGl6ZSgpOw0KLSAgICAgICAgcEZvbnQtPm1fRm9udFR5cGUgPSBQREZGT05UX1RZUEUzOw0KLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gRlhfQlNUUkMoIlR5cGUwIikpIHsNCi0gICAgICAgIHBGb250ID0gRlhfTkVXIENQREZfQ0lERm9udDsNCi0gICAgICAgIHBGb250LT5Jbml0aWFsaXplKCk7DQotICAgICAgICBwRm9udC0+bV9Gb250VHlwZSA9IFBERkZPTlRfQ0lERk9OVDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHBGb250ID0gRlhfTkVXIENQREZfVHlwZTFGb250Ow0KLSAgICAgICAgcEZvbnQtPkluaXRpYWxpemUoKTsNCi0gICAgICAgIHBGb250LT5tX0ZvbnRUeXBlID0gUERGRk9OVF9UWVBFMTsNCi0gICAgfQ0KLSAgICBwRm9udC0+bV9wRm9udERpY3QgPSBwRm9udERpY3Q7DQotICAgIHBGb250LT5tX3BEb2N1bWVudCA9IHBEb2M7DQotICAgIGlmICghcEZvbnQtPkxvYWQoKSkgew0KLSAgICAgICAgZGVsZXRlIHBGb250Ow0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIHBGb250Ow0KLX0NCi1GWF9CT09MIENQREZfRm9udDo6TG9hZCgpDQotew0KLSAgICBpZiAobV9wRm9udERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIHR5cGUgPSBtX3BGb250RGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJTdWJ0eXBlIikpOw0KLSAgICBtX0Jhc2VGb250ID0gbV9wRm9udERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiQmFzZUZvbnQiKSk7DQotICAgIGlmICh0eXBlID09IEZYX0JTVFJDKCJNTVR5cGUxIikpIHsNCi0gICAgICAgIHR5cGUgPSBGWF9CU1RSQygiVHlwZTEiKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gX0xvYWQoKTsNCi19DQotc3RhdGljIENGWF9XaWRlU3RyaW5nIF9Gb250TWFwX0dldFdpZGVTdHJpbmcoQ0ZYX0NoYXJNYXAqIHBNYXAsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBieXRlc3RyKQ0KLXsNCi0gICAgcmV0dXJuICgoQ1BERl9Gb250Q2hhck1hcCopcE1hcCktPm1fcEZvbnQtPkRlY29kZVN0cmluZyhieXRlc3RyKTsNCi19DQotc3RhdGljIENGWF9CeXRlU3RyaW5nIF9Gb250TWFwX0dldEJ5dGVTdHJpbmcoQ0ZYX0NoYXJNYXAqIHBNYXAsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiB3aWRlc3RyKQ0KLXsNCi0gICAgcmV0dXJuICgoQ1BERl9Gb250Q2hhck1hcCopcE1hcCktPm1fcEZvbnQtPkVuY29kZVN0cmluZyh3aWRlc3RyKTsNCi19DQotQ1BERl9Gb250Q2hhck1hcDo6Q1BERl9Gb250Q2hhck1hcChDUERGX0ZvbnQqIHBGb250KQ0KLXsNCi0gICAgbV9HZXRCeXRlU3RyaW5nID0gX0ZvbnRNYXBfR2V0Qnl0ZVN0cmluZzsNCi0gICAgbV9HZXRXaWRlU3RyaW5nID0gX0ZvbnRNYXBfR2V0V2lkZVN0cmluZzsNCi0gICAgbV9wRm9udCA9IHBGb250Ow0KLX0NCi1DRlhfV2lkZVN0cmluZyBDUERGX1RvVW5pY29kZU1hcDo6TG9va3VwKEZYX0RXT1JEIGNoYXJjb2RlKQ0KLXsNCi0gICAgRlhfRFdPUkQgdmFsdWU7DQotICAgIGlmIChtX01hcC5Mb29rdXAoY2hhcmNvZGUsIHZhbHVlKSkgew0KLSAgICAgICAgRlhfV0NIQVIgdW5pY29kZSA9IChGWF9XQ0hBUikodmFsdWUgJiAweGZmZmYpOw0KLSAgICAgICAgaWYgKHVuaWNvZGUgIT0gMHhmZmZmKSB7DQotICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGU7DQotICAgICAgICB9DQotICAgICAgICBGWF9MUENXU1RSIGJ1ZiA9IG1fTXVsdGlDaGFyQnVmLkdldEJ1ZmZlcigpOw0KLSAgICAgICAgRlhfRFdPUkQgYnVmX2xlbiA9IG1fTXVsdGlDaGFyQnVmLkdldExlbmd0aCgpOw0KLSAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMIHx8IGJ1Zl9sZW4gPT0gMCkgew0KLSAgICAgICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZygpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfRFdPUkQgaW5kZXggPSB2YWx1ZSA+PiAxNjsNCi0gICAgICAgIGlmIChpbmRleCA+PSBidWZfbGVuKSB7DQotICAgICAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7DQotICAgICAgICB9DQotICAgICAgICBGWF9EV09SRCBsZW4gPSBidWZbaW5kZXhdOw0KLSAgICAgICAgaWYgKGluZGV4ICsgbGVuIDwgaW5kZXggfHwgaW5kZXggKyBsZW4gPj0gYnVmX2xlbikgew0KLSAgICAgICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZygpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKGJ1ZiArIGluZGV4ICsgMSwgbGVuKTsNCi0gICAgfQ0KLSAgICBpZiAobV9wQmFzZU1hcCkgew0KLSAgICAgICAgcmV0dXJuIG1fcEJhc2VNYXAtPlVuaWNvZGVGcm9tQ0lEKChGWF9XT1JEKWNoYXJjb2RlKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsNCi19DQotRlhfRFdPUkQgQ1BERl9Ub1VuaWNvZGVNYXA6OlJldmVyc2VMb29rdXAoRlhfV0NIQVIgdW5pY29kZSkNCi17DQotICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fTWFwLkdldFN0YXJ0UG9zaXRpb24oKTsNCi0gICAgd2hpbGUgKHBvcykgew0KLSAgICAgICAgRlhfRFdPUkQga2V5LCB2YWx1ZTsNCi0gICAgICAgIG1fTWFwLkdldE5leHRBc3NvYyhwb3MsIGtleSwgdmFsdWUpOw0KLSAgICAgICAgaWYgKChGWF9XQ0hBUil2YWx1ZSA9PSB1bmljb2RlKSB7DQotICAgICAgICAgICAgcmV0dXJuIGtleTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gMDsNCi19DQotc3RhdGljIEZYX0RXT1JEIF9TdHJpbmdUb0NvZGUoRlhfQlNUUiBzdHIpDQotew0KLSAgICBGWF9MUENTVFIgYnVmID0gc3RyLkdldENTdHIoKTsNCi0gICAgaW50IGxlbiA9IHN0ci5HZXRMZW5ndGgoKTsNCi0gICAgaWYgKGxlbiA9PSAwKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBpbnQgcmVzdWx0ID0gMDsNCi0gICAgaWYgKGJ1ZlswXSA9PSAnPCcpIHsNCi0gICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbGVuOyBpICsrKSB7DQotICAgICAgICAgICAgaW50IGRpZ2l0Ow0KLSAgICAgICAgICAgIGlmIChidWZbaV0gPj0gJzAnICYmIGJ1ZltpXSA8PSAnOScpIHsNCi0gICAgICAgICAgICAgICAgZGlnaXQgPSBidWZbaV0gLSAnMCc7DQotICAgICAgICAgICAgfSBlbHNlIGlmIChidWZbaV0gPj0gJ2EnICYmIGJ1ZltpXSA8PSAnZicpIHsNCi0gICAgICAgICAgICAgICAgZGlnaXQgPSBidWZbaV0gLSAnYScgKyAxMDsNCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGJ1ZltpXSA+PSAnQScgJiYgYnVmW2ldIDw9ICdGJykgew0KLSAgICAgICAgICAgICAgICBkaWdpdCA9IGJ1ZltpXSAtICdBJyArIDEwOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxNiArIGRpZ2l0Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpICsrKSB7DQotICAgICAgICAgICAgaWYgKGJ1ZltpXSA8ICcwJyB8fCBidWZbaV0gPiAnOScpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDEwICsgYnVmW2ldIC0gJzAnOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiByZXN1bHQ7DQotfQ0KLXN0YXRpYyBDRlhfV2lkZVN0cmluZyBfU3RyaW5nRGF0YUFkZChDRlhfV2lkZVN0cmluZyBzdHIpDQotew0KLSAgICBDRlhfV2lkZVN0cmluZyByZXQ7DQotICAgIGludCBsZW4gPSBzdHIuR2V0TGVuZ3RoKCk7DQotICAgIEZYX1dDSEFSIHZhbHVlID0gMTsNCi0gICAgZm9yIChpbnQgaSA9IGxlbiAtIDE7IGkgPj0gMCA7IC0taSkgew0KLSAgICAgICAgRlhfV0NIQVIgY2ggPSBzdHJbaV0gKyB2YWx1ZTsNCi0gICAgICAgIGlmIChjaCA8IHN0cltpXSkgew0KLSAgICAgICAgICAgIHJldC5JbnNlcnQoMCwgMCk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHJldC5JbnNlcnQoMCwgY2gpOw0KLSAgICAgICAgICAgIHZhbHVlID0gMDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAodmFsdWUpIHsNCi0gICAgICAgIHJldC5JbnNlcnQoMCwgdmFsdWUpOw0KLSAgICB9DQotICAgIHJldHVybiByZXQ7DQotfQ0KLXN0YXRpYyBDRlhfV2lkZVN0cmluZyBfU3RyaW5nVG9XaWRlU3RyaW5nKEZYX0JTVFIgc3RyKQ0KLXsNCi0gICAgRlhfTFBDU1RSIGJ1ZiA9IHN0ci5HZXRDU3RyKCk7DQotICAgIGludCBsZW4gPSBzdHIuR2V0TGVuZ3RoKCk7DQotICAgIGlmIChsZW4gPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7DQotICAgIH0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcgcmVzdWx0Ow0KLSAgICBpZiAoYnVmWzBdID09ICc8Jykgew0KLSAgICAgICAgaW50IGJ5dGVfcG9zID0gMDsNCi0gICAgICAgIEZYX1dDSEFSIGNoID0gMDsNCi0gICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbGVuOyBpICsrKSB7DQotICAgICAgICAgICAgaW50IGRpZ2l0Ow0KLSAgICAgICAgICAgIGlmIChidWZbaV0gPj0gJzAnICYmIGJ1ZltpXSA8PSAnOScpIHsNCi0gICAgICAgICAgICAgICAgZGlnaXQgPSBidWZbaV0gLSAnMCc7DQotICAgICAgICAgICAgfSBlbHNlIGlmIChidWZbaV0gPj0gJ2EnICYmIGJ1ZltpXSA8PSAnZicpIHsNCi0gICAgICAgICAgICAgICAgZGlnaXQgPSBidWZbaV0gLSAnYScgKyAxMDsNCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGJ1ZltpXSA+PSAnQScgJiYgYnVmW2ldIDw9ICdGJykgew0KLSAgICAgICAgICAgICAgICBkaWdpdCA9IGJ1ZltpXSAtICdBJyArIDEwOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjaCA9IGNoICogMTYgKyBkaWdpdDsNCi0gICAgICAgICAgICBieXRlX3BvcyArKzsNCi0gICAgICAgICAgICBpZiAoYnl0ZV9wb3MgPT0gNCkgew0KLSAgICAgICAgICAgICAgICByZXN1bHQgKz0gY2g7DQotICAgICAgICAgICAgICAgIGJ5dGVfcG9zID0gMDsNCi0gICAgICAgICAgICAgICAgY2ggPSAwOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiByZXN1bHQ7DQotICAgIH0NCi0gICAgaWYgKGJ1ZlswXSA9PSAnKCcpIHsNCi0gICAgfQ0KLSAgICByZXR1cm4gcmVzdWx0Ow0KLX0NCi12b2lkIENQREZfVG9Vbmljb2RlTWFwOjpMb2FkKENQREZfU3RyZWFtKiBwU3RyZWFtKQ0KLXsNCi0gICAgaW50IENJRFNldCA9IDA7DQotICAgIENQREZfU3RyZWFtQWNjIHN0cmVhbTsNCi0gICAgc3RyZWFtLkxvYWRBbGxEYXRhKHBTdHJlYW0sIEZBTFNFKTsNCi0gICAgQ1BERl9TaW1wbGVQYXJzZXIgcGFyc2VyKHN0cmVhbS5HZXREYXRhKCksIHN0cmVhbS5HZXRTaXplKCkpOw0KLSAgICBtX01hcC5Fc3RpbWF0ZVNpemUoc3RyZWFtLkdldFNpemUoKSAvIDgsIDEwMjQpOw0KLSAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmdDIHdvcmQgPSBwYXJzZXIuR2V0V29yZCgpOw0KLSAgICAgICAgaWYgKHdvcmQuSXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBpZiAod29yZCA9PSBGWF9CU1RSQygiYmVnaW5iZmNoYXIiKSkgew0KLSAgICAgICAgICAgIHdoaWxlICgxKSB7DQotICAgICAgICAgICAgICAgIHdvcmQgPSBwYXJzZXIuR2V0V29yZCgpOw0KLSAgICAgICAgICAgICAgICBpZiAod29yZC5Jc0VtcHR5KCkgfHwgd29yZCA9PSBGWF9CU1RSQygiZW5kYmZjaGFyIikpIHsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIEZYX0RXT1JEIHNyY2NvZGUgPSBfU3RyaW5nVG9Db2RlKHdvcmQpOw0KLSAgICAgICAgICAgICAgICB3b3JkID0gcGFyc2VyLkdldFdvcmQoKTsNCi0gICAgICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgZGVzdGNvZGUgPSBfU3RyaW5nVG9XaWRlU3RyaW5nKHdvcmQpOw0KLSAgICAgICAgICAgICAgICBpbnQgbGVuID0gZGVzdGNvZGUuR2V0TGVuZ3RoKCk7DQotICAgICAgICAgICAgICAgIGlmIChsZW4gPT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKGxlbiA9PSAxKSB7DQotICAgICAgICAgICAgICAgICAgICBtX01hcC5TZXRBdChzcmNjb2RlLCBkZXN0Y29kZS5HZXRBdCgwKSk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBtX01hcC5TZXRBdChzcmNjb2RlLCBtX011bHRpQ2hhckJ1Zi5HZXRMZW5ndGgoKSAqIDB4MTAwMDAgKyAweGZmZmYpOw0KLSAgICAgICAgICAgICAgICAgICAgbV9NdWx0aUNoYXJCdWYuQXBwZW5kQ2hhcihkZXN0Y29kZS5HZXRMZW5ndGgoKSk7DQotICAgICAgICAgICAgICAgICAgICBtX011bHRpQ2hhckJ1ZiA8PCBkZXN0Y29kZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSBpZiAod29yZCA9PSBGWF9CU1RSQygiYmVnaW5iZnJhbmdlIikpIHsNCi0gICAgICAgICAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBsb3csIGhpZ2g7DQotICAgICAgICAgICAgICAgIGxvdyA9IHBhcnNlci5HZXRXb3JkKCk7DQotICAgICAgICAgICAgICAgIGlmIChsb3cuSXNFbXB0eSgpIHx8IGxvdyA9PSBGWF9CU1RSQygiZW5kYmZyYW5nZSIpKSB7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBoaWdoID0gcGFyc2VyLkdldFdvcmQoKTsNCi0gICAgICAgICAgICAgICAgRlhfRFdPUkQgbG93Y29kZSA9IF9TdHJpbmdUb0NvZGUobG93KTsNCi0gICAgICAgICAgICAgICAgRlhfRFdPUkQgaGlnaGNvZGUgPSAobG93Y29kZSAmIDB4ZmZmZmZmMDApIHwgKF9TdHJpbmdUb0NvZGUoaGlnaCkgJiAweGZmKTsNCi0gICAgICAgICAgICAgICAgaWYgKGhpZ2hjb2RlID09IChGWF9EV09SRCkgLSAxKSB7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBzdGFydCA9IHBhcnNlci5HZXRXb3JkKCk7DQotICAgICAgICAgICAgICAgIGlmIChzdGFydCA9PSBGWF9CU1RSQygiWyIpKSB7DQotICAgICAgICAgICAgICAgICAgICBmb3IgKEZYX0RXT1JEIGNvZGUgPSBsb3djb2RlOyBjb2RlIDw9IGhpZ2hjb2RlOyBjb2RlICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgZGVzdCA9IHBhcnNlci5HZXRXb3JkKCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgZGVzdGNvZGUgPSBfU3RyaW5nVG9XaWRlU3RyaW5nKGRlc3QpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4gPSBkZXN0Y29kZS5HZXRMZW5ndGgoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPT0gMSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX01hcC5TZXRBdChjb2RlLCBkZXN0Y29kZS5HZXRBdCgwKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9NYXAuU2V0QXQoY29kZSwgbV9NdWx0aUNoYXJCdWYuR2V0TGVuZ3RoKCkgKiAweDEwMDAwICsgMHhmZmZmKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9NdWx0aUNoYXJCdWYuQXBwZW5kQ2hhcihkZXN0Y29kZS5HZXRMZW5ndGgoKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fTXVsdGlDaGFyQnVmIDw8IGRlc3Rjb2RlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlci5HZXRXb3JkKCk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyBkZXN0Y29kZSA9IF9TdHJpbmdUb1dpZGVTdHJpbmcoc3RhcnQpOw0KLSAgICAgICAgICAgICAgICAgICAgaW50IGxlbiA9IGRlc3Rjb2RlLkdldExlbmd0aCgpOw0KLSAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgdmFsdWUgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA9PSAxKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBfU3RyaW5nVG9Db2RlKHN0YXJ0KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEZYX0RXT1JEIGNvZGUgPSBsb3djb2RlOyBjb2RlIDw9IGhpZ2hjb2RlOyBjb2RlICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fTWFwLlNldEF0KGNvZGUsIHZhbHVlKyspOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChGWF9EV09SRCBjb2RlID0gbG93Y29kZTsgY29kZSA8PSBoaWdoY29kZTsgY29kZSArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyByZXRjb2RlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PSBsb3djb2RlKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRjb2RlID0gZGVzdGNvZGU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRjb2RlID0gX1N0cmluZ0RhdGFBZGQoZGVzdGNvZGUpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fTWFwLlNldEF0KGNvZGUsIG1fTXVsdGlDaGFyQnVmLkdldExlbmd0aCgpICogMHgxMDAwMCArIDB4ZmZmZik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fTXVsdGlDaGFyQnVmLkFwcGVuZENoYXIocmV0Y29kZS5HZXRMZW5ndGgoKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fTXVsdGlDaGFyQnVmIDw8IHJldGNvZGU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rjb2RlID0gcmV0Y29kZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2UgaWYgKHdvcmQgPT0gRlhfQlNUUkMoIi9BZG9iZS1Lb3JlYTEtVUNTMiIpKSB7DQotICAgICAgICAgICAgQ0lEU2V0ID0gQ0lEU0VUX0tPUkVBMTsNCi0gICAgICAgIH0gZWxzZSBpZiAod29yZCA9PSBGWF9CU1RSQygiL0Fkb2JlLUphcGFuMS1VQ1MyIikpIHsNCi0gICAgICAgICAgICBDSURTZXQgPSBDSURTRVRfSkFQQU4xOw0KLSAgICAgICAgfSBlbHNlIGlmICh3b3JkID09IEZYX0JTVFJDKCIvQWRvYmUtQ05TMS1VQ1MyIikpIHsNCi0gICAgICAgICAgICBDSURTZXQgPSBDSURTRVRfQ05TMTsNCi0gICAgICAgIH0gZWxzZSBpZiAod29yZCA9PSBGWF9CU1RSQygiL0Fkb2JlLUdCMS1VQ1MyIikpIHsNCi0gICAgICAgICAgICBDSURTZXQgPSBDSURTRVRfR0IxOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChDSURTZXQpIHsNCi0gICAgICAgIG1fcEJhc2VNYXAgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldFBhZ2VNb2R1bGUoKS0+R2V0Rm9udEdsb2JhbHMoKS0+bV9DTWFwTWFuYWdlci5HZXRDSUQyVW5pY29kZU1hcChDSURTZXQsIEZBTFNFKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1fcEJhc2VNYXAgPSBOVUxMOw0KLSAgICB9DQotfQ0KLXN0YXRpYyBGWF9CT09MIEdldFByZWRlZmluZWRFbmNvZGluZyhpbnQmIGJhc2VtYXAsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiB2YWx1ZSkNCi17DQotICAgIGlmICh2YWx1ZSA9PSBGWF9CU1RSQygiV2luQW5zaUVuY29kaW5nIikpIHsNCi0gICAgICAgIGJhc2VtYXAgPSBQREZGT05UX0VOQ09ESU5HX1dJTkFOU0k7DQotICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gRlhfQlNUUkMoIk1hY1JvbWFuRW5jb2RpbmciKSkgew0KLSAgICAgICAgYmFzZW1hcCA9IFBERkZPTlRfRU5DT0RJTkdfTUFDUk9NQU47DQotICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gRlhfQlNUUkMoIk1hY0V4cGVydEVuY29kaW5nIikpIHsNCi0gICAgICAgIGJhc2VtYXAgPSBQREZGT05UX0VOQ09ESU5HX01BQ0VYUEVSVDsNCi0gICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBGWF9CU1RSQygiUERGRG9jRW5jb2RpbmciKSkgew0KLSAgICAgICAgYmFzZW1hcCA9IFBERkZPTlRfRU5DT0RJTkdfUERGRE9DOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi12b2lkIENQREZfRm9udDo6TG9hZFBERkVuY29kaW5nKENQREZfT2JqZWN0KiBwRW5jb2RpbmcsIGludCYgaUJhc2VFbmNvZGluZywgQ0ZYX0J5dGVTdHJpbmcqJiBwQ2hhck5hbWVzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiRW1iZWRkZWQsIEZYX0JPT0wgYlRydWVUeXBlKQ0KLXsNCi0gICAgaWYgKHBFbmNvZGluZyA9PSBOVUxMKSB7DQotICAgICAgICBpZiAobV9CYXNlRm9udCA9PSBGWF9CU1RSQygiU3ltYm9sIikpIHsNCi0gICAgICAgICAgICBpQmFzZUVuY29kaW5nID0gYlRydWVUeXBlID8gUERGRk9OVF9FTkNPRElOR19NU19TWU1CT0wgOiBQREZGT05UX0VOQ09ESU5HX0FET0JFX1NZTUJPTDsNCi0gICAgICAgIH0gZWxzZSBpZiAoIWJFbWJlZGRlZCAmJiBpQmFzZUVuY29kaW5nID09IFBERkZPTlRfRU5DT0RJTkdfQlVJTFRJTikgew0KLSAgICAgICAgICAgIGlCYXNlRW5jb2RpbmcgPSBQREZGT05UX0VOQ09ESU5HX1dJTkFOU0k7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKHBFbmNvZGluZy0+R2V0VHlwZSgpID09IFBERk9CSl9OQU1FKSB7DQotICAgICAgICBpZiAoaUJhc2VFbmNvZGluZyA9PSBQREZGT05UX0VOQ09ESU5HX0FET0JFX1NZTUJPTCB8fCBpQmFzZUVuY29kaW5nID09IFBERkZPTlRfRU5DT0RJTkdfWkFQRkRJTkdCQVRTKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKChtX0ZsYWdzICYgUERGRk9OVF9TWU1CT0xJQykgJiYgbV9CYXNlRm9udCA9PSBGWF9CU1RSQygiU3ltYm9sIikpIHsNCi0gICAgICAgICAgICBpZiAoIWJUcnVlVHlwZSkgew0KLSAgICAgICAgICAgICAgICBpQmFzZUVuY29kaW5nID0gUERGRk9OVF9FTkNPRElOR19BRE9CRV9TWU1CT0w7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIGJzRW5jb2RpbmcgPSBwRW5jb2RpbmctPkdldFN0cmluZygpOw0KLSAgICAgICAgaWYgKGJzRW5jb2RpbmcuQ29tcGFyZShGWF9CU1RSQygiTWFjRXhwZXJ0RW5jb2RpbmciKSkgPT0gMCkgew0KLSAgICAgICAgICAgIGJzRW5jb2RpbmcgPSBGWF9CU1RSQygiV2luQW5zaUVuY29kaW5nIik7DQotICAgICAgICB9DQotICAgICAgICBHZXRQcmVkZWZpbmVkRW5jb2RpbmcoaUJhc2VFbmNvZGluZywgYnNFbmNvZGluZyk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKHBFbmNvZGluZy0+R2V0VHlwZSgpICE9IFBERk9CSl9ESUNUSU9OQVJZKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IChDUERGX0RpY3Rpb25hcnkqKXBFbmNvZGluZzsNCi0gICAgaWYgKGlCYXNlRW5jb2RpbmcgIT0gUERGRk9OVF9FTkNPRElOR19BRE9CRV9TWU1CT0wgJiYgaUJhc2VFbmNvZGluZyAhPSBQREZGT05UX0VOQ09ESU5HX1pBUEZESU5HQkFUUykgew0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgYnNFbmNvZGluZyA9IHBEaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIkJhc2VFbmNvZGluZyIpKTsNCi0gICAgICAgIGlmIChic0VuY29kaW5nLkNvbXBhcmUoRlhfQlNUUkMoIk1hY0V4cGVydEVuY29kaW5nIikpID09IDAgJiYgYlRydWVUeXBlKSB7DQotICAgICAgICAgICAgYnNFbmNvZGluZyA9IEZYX0JTVFJDKCJXaW5BbnNpRW5jb2RpbmciKTsNCi0gICAgICAgIH0NCi0gICAgICAgIEdldFByZWRlZmluZWRFbmNvZGluZyhpQmFzZUVuY29kaW5nLCBic0VuY29kaW5nKTsNCi0gICAgfQ0KLSAgICBpZiAoKCFiRW1iZWRkZWQgfHwgYlRydWVUeXBlKSAmJiBpQmFzZUVuY29kaW5nID09IFBERkZPTlRfRU5DT0RJTkdfQlVJTFRJTikgew0KLSAgICAgICAgaUJhc2VFbmNvZGluZyA9IFBERkZPTlRfRU5DT0RJTkdfU1RBTkRBUkQ7DQotICAgIH0NCi0gICAgQ1BERl9BcnJheSogcERpZmZzID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJEaWZmZXJlbmNlcyIpKTsNCi0gICAgaWYgKHBEaWZmcyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhfTkVXX1ZFQ1RPUihwQ2hhck5hbWVzLCBDRlhfQnl0ZVN0cmluZywgMjU2KTsNCi0gICAgRlhfRFdPUkQgY3VyX2NvZGUgPSAwOw0KLSAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcERpZmZzLT5HZXRDb3VudCgpOyBpICsrKSB7DQotICAgICAgICBDUERGX09iamVjdCogcEVsZW1lbnQgPSBwRGlmZnMtPkdldEVsZW1lbnRWYWx1ZShpKTsNCi0gICAgICAgIGlmIChwRWxlbWVudCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAocEVsZW1lbnQtPkdldFR5cGUoKSA9PSBQREZPQkpfTkFNRSkgew0KLSAgICAgICAgICAgIGlmIChjdXJfY29kZSA8IDI1Nikgew0KLSAgICAgICAgICAgICAgICBwQ2hhck5hbWVzW2N1cl9jb2RlXSA9ICgoQ1BERl9OYW1lKilwRWxlbWVudCktPkdldFN0cmluZygpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjdXJfY29kZSArKzsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgY3VyX2NvZGUgPSBwRWxlbWVudC0+R2V0SW50ZWdlcigpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BERl9Gb250OjpJc1N0YW5kYXJkRm9udCgpIGNvbnN0DQotew0KLSAgICBpZiAobV9Gb250VHlwZSAhPSBQREZGT05UX1RZUEUxKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKG1fcEZvbnRGaWxlICE9IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoKChDUERGX1R5cGUxRm9udCopdGhpcyktPkdldEJhc2UxNEZvbnQoKSA8IDApIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotZXh0ZXJuIEZYX0xQQ1NUUiBQREZfQ2hhck5hbWVGcm9tUHJlZGVmaW5lZENoYXJTZXQoaW50IGVuY29kaW5nLCBGWF9CWVRFIGNoYXJjb2RlKTsNCi1DUERGX1NpbXBsZUZvbnQ6OkNQREZfU2ltcGxlRm9udCgpDQotew0KLSAgICBGWFNZU19tZW1zZXQ4KG1fQ2hhckJCb3gsIDB4ZmYsIHNpemVvZiBtX0NoYXJCQm94KTsNCi0gICAgRlhTWVNfbWVtc2V0OChtX0NoYXJXaWR0aCwgMHhmZiwgc2l6ZW9mIG1fQ2hhcldpZHRoKTsNCi0gICAgRlhTWVNfbWVtc2V0OChtX0dseXBoSW5kZXgsIDB4ZmYsIHNpemVvZiBtX0dseXBoSW5kZXgpOw0KLSAgICBGWFNZU19tZW1zZXQ4KG1fRXh0R0lELCAweGZmLCBzaXplb2YgbV9FeHRHSUQpOw0KLSAgICBtX3BDaGFyTmFtZXMgPSBOVUxMOw0KLSAgICBtX0Jhc2VFbmNvZGluZyA9IFBERkZPTlRfRU5DT0RJTkdfQlVJTFRJTjsNCi19DQotQ1BERl9TaW1wbGVGb250Ojp+Q1BERl9TaW1wbGVGb250KCkNCi17DQotICAgIGlmIChtX3BDaGFyTmFtZXMpIHsNCi0gICAgICAgIEZYX0RFTEVURV9WRUNUT1IobV9wQ2hhck5hbWVzLCBDRlhfQnl0ZVN0cmluZywgMjU2KTsNCi0gICAgfQ0KLX0NCi1pbnQgQ1BERl9TaW1wbGVGb250OjpHbHlwaEZyb21DaGFyQ29kZShGWF9EV09SRCBjaGFyY29kZSwgRlhfQk9PTCAqcFZlcnRHbHlwaCkNCi17DQotICAgIGlmIChwVmVydEdseXBoKSB7DQotICAgICAgICAqcFZlcnRHbHlwaCA9IEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChjaGFyY29kZSA+IDB4ZmYpIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBpbnQgaW5kZXggPSBtX0dseXBoSW5kZXhbKEZYX0JZVEUpY2hhcmNvZGVdOw0KLSAgICBpZiAoaW5kZXggPT0gMHhmZmZmKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgcmV0dXJuIGluZGV4Ow0KLX0NCi12b2lkIENQREZfU2ltcGxlRm9udDo6TG9hZENoYXJNZXRyaWNzKGludCBjaGFyY29kZSkNCi17DQotICAgIGlmIChtX0ZvbnQubV9GYWNlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAoY2hhcmNvZGUgPCAwIHx8IGNoYXJjb2RlID4gMHhmZikgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGludCBnbHlwaF9pbmRleCA9IG1fR2x5cGhJbmRleFtjaGFyY29kZV07DQotICAgIGlmIChnbHlwaF9pbmRleCA9PSAweGZmZmYpIHsNCi0gICAgICAgIGlmIChtX3BGb250RmlsZSA9PSBOVUxMICYmIGNoYXJjb2RlICE9IDMyKSB7DQotICAgICAgICAgICAgTG9hZENoYXJNZXRyaWNzKDMyKTsNCi0gICAgICAgICAgICBtX0NoYXJCQm94W2NoYXJjb2RlXSA9IG1fQ2hhckJCb3hbMzJdOw0KLSAgICAgICAgICAgIGlmIChtX2JVc2VGb250V2lkdGgpIHsNCi0gICAgICAgICAgICAgICAgbV9DaGFyV2lkdGhbY2hhcmNvZGVdID0gbV9DaGFyV2lkdGhbMzJdOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpbnQgZXJyID0gRlhGVF9Mb2FkX0dseXBoKG1fRm9udC5tX0ZhY2UsIGdseXBoX2luZGV4LCBGWEZUX0xPQURfTk9fU0NBTEUgfCBGWEZUX0xPQURfSUdOT1JFX0dMT0JBTF9BRFZBTkNFX1dJRFRIKTsNCi0gICAgaWYgKGVycikgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fQ2hhckJCb3hbY2hhcmNvZGVdLkxlZnQgPSBUVDJQREYoRlhGVF9HZXRfR2x5cGhfSG9yaUJlYXJpbmdYKG1fRm9udC5tX0ZhY2UpLCBtX0ZvbnQubV9GYWNlKTsNCi0gICAgbV9DaGFyQkJveFtjaGFyY29kZV0uUmlnaHQgPSBUVDJQREYoRlhGVF9HZXRfR2x5cGhfSG9yaUJlYXJpbmdYKG1fRm9udC5tX0ZhY2UpICsgRlhGVF9HZXRfR2x5cGhfV2lkdGgobV9Gb250Lm1fRmFjZSksIG1fRm9udC5tX0ZhY2UpOw0KLSAgICBtX0NoYXJCQm94W2NoYXJjb2RlXS5Ub3AgPSBUVDJQREYoRlhGVF9HZXRfR2x5cGhfSG9yaUJlYXJpbmdZKG1fRm9udC5tX0ZhY2UpLCBtX0ZvbnQubV9GYWNlKTsNCi0gICAgbV9DaGFyQkJveFtjaGFyY29kZV0uQm90dG9tID0gVFQyUERGKEZYRlRfR2V0X0dseXBoX0hvcmlCZWFyaW5nWShtX0ZvbnQubV9GYWNlKSAtIEZYRlRfR2V0X0dseXBoX0hlaWdodChtX0ZvbnQubV9GYWNlKSwgbV9Gb250Lm1fRmFjZSk7DQotICAgIGlmIChtX2JVc2VGb250V2lkdGgpIHsNCi0gICAgICAgIGludCBUVF9XaWR0aCA9IFRUMlBERihGWEZUX0dldF9HbHlwaF9Ib3JpQWR2YW5jZShtX0ZvbnQubV9GYWNlKSwgbV9Gb250Lm1fRmFjZSk7DQotICAgICAgICBpZiAobV9DaGFyV2lkdGhbY2hhcmNvZGVdID09IDB4ZmZmZikgew0KLSAgICAgICAgICAgIG1fQ2hhcldpZHRoW2NoYXJjb2RlXSA9IFRUX1dpZHRoOw0KLSAgICAgICAgfSBlbHNlIGlmIChUVF9XaWR0aCAmJiAhSXNFbWJlZGRlZCgpKSB7DQotICAgICAgICAgICAgbV9DaGFyQkJveFtjaGFyY29kZV0uUmlnaHQgPSBtX0NoYXJCQm94W2NoYXJjb2RlXS5SaWdodCAqIG1fQ2hhcldpZHRoW2NoYXJjb2RlXSAvIFRUX1dpZHRoOw0KLSAgICAgICAgICAgIG1fQ2hhckJCb3hbY2hhcmNvZGVdLkxlZnQgPSBtX0NoYXJCQm94W2NoYXJjb2RlXS5MZWZ0ICogbV9DaGFyV2lkdGhbY2hhcmNvZGVdIC8gVFRfV2lkdGg7DQotICAgICAgICB9DQotICAgIH0NCi19DQotaW50IENQREZfU2ltcGxlRm9udDo6R2V0Q2hhcldpZHRoRihGWF9EV09SRCBjaGFyY29kZSwgaW50IGxldmVsKQ0KLXsNCi0gICAgaWYgKGNoYXJjb2RlID4gMHhmZikgew0KLSAgICAgICAgY2hhcmNvZGUgPSAwOw0KLSAgICB9DQotICAgIGlmIChtX0NoYXJXaWR0aFtjaGFyY29kZV0gPT0gMHhmZmZmKSB7DQotICAgICAgICBMb2FkQ2hhck1ldHJpY3MoY2hhcmNvZGUpOw0KLSAgICAgICAgaWYgKG1fQ2hhcldpZHRoW2NoYXJjb2RlXSA9PSAweGZmZmYpIHsNCi0gICAgICAgICAgICBtX0NoYXJXaWR0aFtjaGFyY29kZV0gPSAwOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiAoRlhfSU5UMTYpbV9DaGFyV2lkdGhbY2hhcmNvZGVdOw0KLX0NCi12b2lkIENQREZfU2ltcGxlRm9udDo6R2V0Q2hhckJCb3goRlhfRFdPUkQgY2hhcmNvZGUsIEZYX1JFQ1QmIHJlY3QsIGludCBsZXZlbCkNCi17DQotICAgIGlmIChjaGFyY29kZSA+IDB4ZmYpIHsNCi0gICAgICAgIGNoYXJjb2RlID0gMDsNCi0gICAgfQ0KLSAgICBpZiAobV9DaGFyQkJveFtjaGFyY29kZV0uTGVmdCA9PSAoRlhfU0hPUlQpMHhmZmZmKSB7DQotICAgICAgICBMb2FkQ2hhck1ldHJpY3MoY2hhcmNvZGUpOw0KLSAgICB9DQotICAgIHJlY3QubGVmdCA9IG1fQ2hhckJCb3hbY2hhcmNvZGVdLkxlZnQ7DQotICAgIHJlY3QucmlnaHQgPSBtX0NoYXJCQm94W2NoYXJjb2RlXS5SaWdodDsNCi0gICAgcmVjdC5ib3R0b20gPSBtX0NoYXJCQm94W2NoYXJjb2RlXS5Cb3R0b207DQotICAgIHJlY3QudG9wID0gbV9DaGFyQkJveFtjaGFyY29kZV0uVG9wOw0KLX0NCi1GWF9MUENTVFIgR2V0QWRvYmVDaGFyTmFtZShpbnQgaUJhc2VFbmNvZGluZywgY29uc3QgQ0ZYX0J5dGVTdHJpbmcqIHBDaGFyTmFtZXMsIGludCBjaGFyY29kZSkNCi17DQotICAgIEFTU0VSVChjaGFyY29kZSA+PSAwICYmIGNoYXJjb2RlIDwgMjU2KTsNCi0gICAgaWYgKGNoYXJjb2RlIDwgMCB8fCBjaGFyY29kZSA+PSAyNTYpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIEZYX0xQQ1NUUiBuYW1lID0gTlVMTDsNCi0gICAgaWYgKHBDaGFyTmFtZXMpIHsNCi0gICAgICAgIG5hbWUgPSBwQ2hhck5hbWVzW2NoYXJjb2RlXTsNCi0gICAgfQ0KLSAgICBpZiAoKG5hbWUgPT0gTlVMTCB8fCBuYW1lWzBdID09IDApICYmIGlCYXNlRW5jb2RpbmcpIHsNCi0gICAgICAgIG5hbWUgPSBQREZfQ2hhck5hbWVGcm9tUHJlZGVmaW5lZENoYXJTZXQoaUJhc2VFbmNvZGluZywgY2hhcmNvZGUpOw0KLSAgICB9DQotICAgIGlmIChuYW1lID09IE5VTEwgfHwgbmFtZVswXSA9PSAwKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gbmFtZTsNCi19DQotRlhfQk9PTCBDUERGX1NpbXBsZUZvbnQ6OkxvYWRDb21tb24oKQ0KLXsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9udERlc2MgPSBtX3BGb250RGljdC0+R2V0RGljdChGWF9CU1RSQygiRm9udERlc2NyaXB0b3IiKSk7DQotICAgIGlmIChwRm9udERlc2MpIHsNCi0gICAgICAgIExvYWRGb250RGVzY3JpcHRvcihwRm9udERlc2MpOw0KLSAgICB9DQotICAgIENQREZfQXJyYXkqIHBXaWR0aEFycmF5ID0gbV9wRm9udERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJXaWR0aHMiKSk7DQotICAgIGludCB3aWR0aF9zdGFydCA9IDAsIHdpZHRoX2VuZCA9IC0xOw0KLSAgICBtX2JVc2VGb250V2lkdGggPSBUUlVFOw0KLSAgICBpZiAocFdpZHRoQXJyYXkpIHsNCi0gICAgICAgIG1fYlVzZUZvbnRXaWR0aCA9IEZBTFNFOw0KLSAgICAgICAgaWYgKHBGb250RGVzYyAmJiBwRm9udERlc2MtPktleUV4aXN0KEZYX0JTVFJDKCJNaXNzaW5nV2lkdGgiKSkpIHsNCi0gICAgICAgICAgICBpbnQgTWlzc2luZ1dpZHRoID0gcEZvbnREZXNjLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJNaXNzaW5nV2lkdGgiKSk7DQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgbV9DaGFyV2lkdGhbaV0gPSBNaXNzaW5nV2lkdGg7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgd2lkdGhfc3RhcnQgPSBtX3BGb250RGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiRmlyc3RDaGFyIiksIDApOw0KLSAgICAgICAgd2lkdGhfZW5kID0gbV9wRm9udERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIkxhc3RDaGFyIiksIDApOw0KLSAgICAgICAgaWYgKHdpZHRoX3N0YXJ0ID49IDAgJiYgd2lkdGhfc3RhcnQgPD0gMjU1KSB7DQotICAgICAgICAgICAgaWYgKHdpZHRoX2VuZCA8PSAwIHx8IHdpZHRoX2VuZCA+PSB3aWR0aF9zdGFydCArIChpbnQpcFdpZHRoQXJyYXktPkdldENvdW50KCkpIHsNCi0gICAgICAgICAgICAgICAgd2lkdGhfZW5kID0gd2lkdGhfc3RhcnQgKyBwV2lkdGhBcnJheS0+R2V0Q291bnQoKSAtIDE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmICh3aWR0aF9lbmQgPiAyNTUpIHsNCi0gICAgICAgICAgICAgICAgd2lkdGhfZW5kID0gMjU1Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBmb3IgKGludCBpID0gd2lkdGhfc3RhcnQ7IGkgPD0gd2lkdGhfZW5kOyBpICsrKSB7DQotICAgICAgICAgICAgICAgIG1fQ2hhcldpZHRoW2ldID0gcFdpZHRoQXJyYXktPkdldEludGVnZXIoaSAtIHdpZHRoX3N0YXJ0KTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKG1fcEZvbnRGaWxlID09IE5VTEwpIHsNCi0gICAgICAgIExvYWRTdWJzdEZvbnQoKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGlmIChtX0Jhc2VGb250LkdldExlbmd0aCgpID4gOCAmJiBtX0Jhc2VGb250WzddID09ICcrJykgew0KLSAgICAgICAgICAgIG1fQmFzZUZvbnQgPSBtX0Jhc2VGb250Lk1pZCg4KTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoIShtX0ZsYWdzICYgUERGRk9OVF9TWU1CT0xJQykpIHsNCi0gICAgICAgIG1fQmFzZUVuY29kaW5nID0gUERGRk9OVF9FTkNPRElOR19TVEFOREFSRDsNCi0gICAgfQ0KLSAgICBDUERGX09iamVjdCogcEVuY29kaW5nID0gbV9wRm9udERpY3QtPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiRW5jb2RpbmciKSk7DQotICAgIExvYWRQREZFbmNvZGluZyhwRW5jb2RpbmcsIG1fQmFzZUVuY29kaW5nLCBtX3BDaGFyTmFtZXMsIG1fcEZvbnRGaWxlICE9IE5VTEwsIG1fRm9udC5Jc1RURm9udCgpKTsNCi0gICAgTG9hZEdseXBoTWFwKCk7DQotICAgIGlmIChtX3BDaGFyTmFtZXMpIHsNCi0gICAgICAgIEZYX0RFTEVURV9WRUNUT1IobV9wQ2hhck5hbWVzLCBDRlhfQnl0ZVN0cmluZywgMjU2KTsNCi0gICAgICAgIG1fcENoYXJOYW1lcyA9IE5VTEw7DQotICAgIH0NCi0gICAgaWYgKG1fRm9udC5tX0ZhY2UgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgaWYgKG1fRmxhZ3MgJiBQREZGT05UX0FMTENBUCkgew0KLSAgICAgICAgdW5zaWduZWQgY2hhciBsb3dlcmNhc2VzW10gPSB7J2EnLCAneicsIDB4ZTAsIDB4ZjYsIDB4ZjgsIDB4ZmR9Ow0KLSAgICAgICAgZm9yIChpbnQgcmFuZ2UgPSAwOyByYW5nZSA8IHNpemVvZiBsb3dlcmNhc2VzIC8gMjsgcmFuZ2UgKyspIHsNCi0gICAgICAgICAgICBmb3IgKGludCBpID0gbG93ZXJjYXNlc1tyYW5nZSAqIDJdOyBpIDw9IGxvd2VyY2FzZXNbcmFuZ2UgKiAyICsgMV07IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgaWYgKG1fR2x5cGhJbmRleFtpXSAhPSAweGZmZmYgJiYgbV9wRm9udEZpbGUgIT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbV9HbHlwaEluZGV4W2ldID0gbV9HbHlwaEluZGV4W2kgLSAzMl07DQotICAgICAgICAgICAgICAgIGlmIChtX0NoYXJXaWR0aFtpIC0gMzJdKSB7DQotICAgICAgICAgICAgICAgICAgICBtX0NoYXJXaWR0aFtpXSA9IG1fQ2hhcldpZHRoW2kgLSAzMl07DQotICAgICAgICAgICAgICAgICAgICBtX0NoYXJCQm94W2ldID0gbV9DaGFyQkJveFtpIC0gMzJdOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIENoZWNrRm9udE1ldHJpY3MoKTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ1BERl9TaW1wbGVGb250OjpMb2FkU3Vic3RGb250KCkNCi17DQotICAgIGlmICghbV9iVXNlRm9udFdpZHRoICYmICEobV9GbGFncyAmIFBERkZPTlRfRklYRURQSVRDSCkpIHsNCi0gICAgICAgIGludCB3aWR0aCA9IDAsIGk7DQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7DQotICAgICAgICAgICAgaWYgKG1fQ2hhcldpZHRoW2ldID09IDAgfHwgbV9DaGFyV2lkdGhbaV0gPT0gMHhmZmZmKSB7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAod2lkdGggPT0gMCkgew0KLSAgICAgICAgICAgICAgICB3aWR0aCA9IG1fQ2hhcldpZHRoW2ldOw0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAod2lkdGggIT0gbV9DaGFyV2lkdGhbaV0pIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGkgPT0gMjU2ICYmIHdpZHRoKSB7DQotICAgICAgICAgICAgbV9GbGFncyB8PSBQREZGT05UX0ZJWEVEUElUQ0g7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaW50IHdlaWdodCA9IG1fU3RlbVYgPCAxNDAgPyBtX1N0ZW1WICogNSA6IChtX1N0ZW1WICogNCArIDE0MCk7DQotICAgIG1fRm9udC5Mb2FkU3Vic3QobV9CYXNlRm9udCwgbV9Gb250VHlwZSA9PSBQREZGT05UX1RSVUVUWVBFLCBtX0ZsYWdzLCB3ZWlnaHQsIG1fSXRhbGljQW5nbGUsIDApOw0KLSAgICBpZiAobV9Gb250Lm1fcFN1YnN0Rm9udC0+bV9TdWJzdEZsYWdzICYgRlhGT05UX1NVQlNUX05PTlNZTUJPTCkgew0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BERl9TaW1wbGVGb250OjpJc1VuaWNvZGVDb21wYXRpYmxlKCkgY29uc3QNCi17DQotICAgIHJldHVybiBtX0Jhc2VFbmNvZGluZyAhPSBQREZGT05UX0VOQ09ESU5HX0JVSUxUSU4gJiYgbV9CYXNlRW5jb2RpbmcgIT0gUERGRk9OVF9FTkNPRElOR19BRE9CRV9TWU1CT0wgJiYNCi0gICAgICAgICAgIG1fQmFzZUVuY29kaW5nICE9IFBERkZPTlRfRU5DT0RJTkdfWkFQRkRJTkdCQVRTOw0KLX0NCi1DUERGX1R5cGUxRm9udDo6Q1BERl9UeXBlMUZvbnQoKQ0KLXsNCi0gICAgbV9CYXNlMTRGb250ID0gLTE7DQotfQ0KLUZYX0JPT0wgQ1BERl9UeXBlMUZvbnQ6Ol9Mb2FkKCkNCi17DQotICAgIG1fQmFzZTE0Rm9udCA9IF9QREZfR2V0U3RhbmRhcmRGb250TmFtZShtX0Jhc2VGb250KTsNCi0gICAgaWYgKG1fQmFzZTE0Rm9udCA+PSAwKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBGb250RGVzYyA9IG1fcEZvbnREaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJGb250RGVzY3JpcHRvciIpKTsNCi0gICAgICAgIGlmIChwRm9udERlc2MgJiYgcEZvbnREZXNjLT5LZXlFeGlzdChGWF9CU1RSQygiRmxhZ3MiKSkpIHsNCi0gICAgICAgICAgICBtX0ZsYWdzID0gcEZvbnREZXNjLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJGbGFncyIpKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbV9GbGFncyA9IG1fQmFzZTE0Rm9udCA+PSAxMiA/IFBERkZPTlRfU1lNQk9MSUMgOiBQREZGT05UX05PTlNZTUJPTElDOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fQmFzZTE0Rm9udCA8IDQpDQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgbV9DaGFyV2lkdGhbaV0gPSA2MDA7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fQmFzZTE0Rm9udCA9PSAxMikgew0KLSAgICAgICAgICAgIG1fQmFzZUVuY29kaW5nID0gUERGRk9OVF9FTkNPRElOR19BRE9CRV9TWU1CT0w7DQotICAgICAgICB9IGVsc2UgaWYgKG1fQmFzZTE0Rm9udCA9PSAxMykgew0KLSAgICAgICAgICAgIG1fQmFzZUVuY29kaW5nID0gUERGRk9OVF9FTkNPRElOR19aQVBGRElOR0JBVFM7DQotICAgICAgICB9IGVsc2UgaWYgKG1fRmxhZ3MgJiBQREZGT05UX05PTlNZTUJPTElDKSB7DQotICAgICAgICAgICAgbV9CYXNlRW5jb2RpbmcgPSBQREZGT05UX0VOQ09ESU5HX1NUQU5EQVJEOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBMb2FkQ29tbW9uKCk7DQotfQ0KLXN0YXRpYyBGWF9CT09MIEZUX1VzZVR5cGUxQ2hhcm1hcChGWEZUX0ZhY2UgZmFjZSkNCi17DQotICAgIGlmIChGWEZUX0dldF9GYWNlX0NoYXJtYXBDb3VudChmYWNlKSA9PSAwKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcENvdW50KGZhY2UpID09IDEgJiYNCi0gICAgICAgICAgICBGWEZUX0dldF9DaGFybWFwX0VuY29kaW5nKEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcHMoZmFjZSlbMF0pID09IEZYRlRfRU5DT0RJTkdfVU5JQ09ERSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChGWEZUX0dldF9DaGFybWFwX0VuY29kaW5nKEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcHMoZmFjZSlbMF0pID09IEZYRlRfRU5DT0RJTkdfVU5JQ09ERSkgew0KLSAgICAgICAgRlhGVF9TZXRfQ2hhcm1hcChmYWNlLCBGWEZUX0dldF9GYWNlX0NoYXJtYXBzKGZhY2UpWzFdKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEZYRlRfU2V0X0NoYXJtYXAoZmFjZSwgRlhGVF9HZXRfRmFjZV9DaGFybWFwcyhmYWNlKVswXSk7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLWV4dGVybiBGWF9XQ0hBUiBGVF9Vbmljb2RlRnJvbUNoYXJDb2RlKGludCBlbmNvZGluZywgRlhfRFdPUkQgY2hhcmNvZGUpOw0KLSNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8NCi0jaW5jbHVkZSAiLi4vLi4vZnhnZS9hcHBsZS9hcHBsZV9pbnQuaCINCi0jZW5kaWYNCi1pbnQgQ1BERl9UeXBlMUZvbnQ6OkdseXBoRnJvbUNoYXJDb2RlRXh0KEZYX0RXT1JEIGNoYXJjb2RlKQ0KLXsNCi0gICAgaWYgKGNoYXJjb2RlID4gMHhmZikgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIGludCBpbmRleCA9IG1fRXh0R0lEWyhGWF9CWVRFKWNoYXJjb2RlXTsNCi0gICAgaWYgKGluZGV4ID09IDB4ZmZmZikgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIHJldHVybiBpbmRleDsNCi19DQotI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXw0KLXN0cnVjdCBfR2x5cGhOYW1lTWFwIHsNCi0gICAgRlhfTFBDU1RSIG1fcFN0ckFkb2JlOw0KLSAgICBGWF9MUENTVFIgbV9wU3RyVW5pY29kZTsNCi19Ow0KLXN0YXRpYyBjb25zdCBfR2x5cGhOYW1lTWFwIGdfR2x5cGhOYW1lU3Vic3RzW10gPSB7DQotICAgIHsiZmYiLCAidW5pRkIwMCJ9LA0KLSAgICB7ImZpIiwgInVuaUZCMDEifSwNCi0gICAgeyJmbCIsICJ1bmlGQjAyIn0sDQotICAgIHsiZmZpIiwgInVuaUZCMDMifSwNCi0gICAgeyJmZmwiLCAidW5pRkIwNCJ9DQotfTsNCi1leHRlcm4gIkMiIHsNCi0gICAgc3RhdGljIGludCBjb21wYXJlU3RyaW5nKGNvbnN0IHZvaWQqIGtleSwgY29uc3Qgdm9pZCogZWxlbWVudCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEZYU1lTX3N0cmljbXAoKEZYX0xQQ1NUUilrZXksICgoX0dseXBoTmFtZU1hcCopZWxlbWVudCktPm1fcFN0ckFkb2JlKTsNCi0gICAgfQ0KLX0NCi1zdGF0aWMgRlhfTFBDU1RSIF9HbHlwaE5hbWVSZW1hcChGWF9MUENTVFIgcFN0ckFkb2JlKQ0KLXsNCi0gICAgX0dseXBoTmFtZU1hcCogZm91bmQgPSAoX0dseXBoTmFtZU1hcCopRlhTWVNfYnNlYXJjaChwU3RyQWRvYmUsIGdfR2x5cGhOYW1lU3Vic3RzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiBnX0dseXBoTmFtZVN1YnN0cyAvIHNpemVvZihfR2x5cGhOYW1lTWFwKSwgc2l6ZW9mKF9HbHlwaE5hbWVNYXApLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVTdHJpbmcpOw0KLSAgICBpZiAoZm91bmQpIHsNCi0gICAgICAgIHJldHVybiBmb3VuZC0+bV9wU3RyVW5pY29kZTsNCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotI2VuZGlmDQotdm9pZCBDUERGX1R5cGUxRm9udDo6TG9hZEdseXBoTWFwKCkNCi17DQotICAgIGlmIChtX0ZvbnQubV9GYWNlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8NCi0gICAgRlhfQk9PTCBiQ29yZVRleHQgPSBUUlVFOw0KLSAgICBDUXVhcnR6MkQgJiBxdWFydHoyZCA9ICgoQ0FwcGxlUGxhdGZvcm0gKikgQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCkpLT5fcXVhcnR6MmQ7DQotICAgIGlmICghbV9Gb250Lm1fcFBsYXRmb3JtRm9udCkgew0KLSAgICAgICAgaWYgKG1fRm9udC5HZXRQc05hbWUoKSA9PSBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKCJERkhlaVN0ZC1XNSIpKSB7DQotICAgICAgICAgICAgYkNvcmVUZXh0ID0gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBtX0ZvbnQubV9wUGxhdGZvcm1Gb250ID0gcXVhcnR6MmQuQ3JlYXRlRm9udChtX0ZvbnQubV9wRm9udERhdGEsIG1fRm9udC5tX2R3U2l6ZSk7DQotICAgICAgICBpZiAoTlVMTCA9PSBtX0ZvbnQubV9wUGxhdGZvcm1Gb250KSB7DQotICAgICAgICAgICAgYkNvcmVUZXh0ID0gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0jZW5kaWYNCi0gICAgaWYgKCFJc0VtYmVkZGVkKCkgJiYgKG1fQmFzZTE0Rm9udCA8IDEyKSAmJiBtX0ZvbnQuSXNUVEZvbnQoKSkgew0KLSAgICAgICAgaWYgKEZUX1VzZVRUQ2hhcm1hcChtX0ZvbnQubV9GYWNlLCAzLCAwKSkgew0KLSAgICAgICAgICAgIEZYX0JPT0wgYkdvdE9uZSA9IEZBTFNFOw0KLSAgICAgICAgICAgIGZvciAoaW50IGNoYXJjb2RlID0gMDsgY2hhcmNvZGUgPCAyNTY7IGNoYXJjb2RlICsrKSB7DQotICAgICAgICAgICAgICAgIGNvbnN0IEZYX0JZVEUgcHJlZml4WzRdID0gezB4MDAsIDB4ZjAsIDB4ZjEsIDB4ZjJ9Ow0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGogKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX1dPUkQgdW5pY29kZSA9IHByZWZpeFtqXSAqIDI1NiArIGNoYXJjb2RlOw0KLSAgICAgICAgICAgICAgICAgICAgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9IEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgdW5pY29kZSk7DQotI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXw0KLSAgICAgICAgICAgICAgICAgICAgRlhfQ0hBUiBuYW1lX2dseXBoWzI1Nl07DQotICAgICAgICAgICAgICAgICAgICBGWEZUX0dldF9HbHlwaF9OYW1lKG1fRm9udC5tX0ZhY2UsIG1fR2x5cGhJbmRleFtjaGFyY29kZV0sIG5hbWVfZ2x5cGgsIDI1Nik7DQotICAgICAgICAgICAgICAgICAgICBuYW1lX2dseXBoWzI1NV0gPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgbmFtZV9jdCA9IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmdOb0NvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbmFtZV9nbHlwaCwga0NGU3RyaW5nRW5jb2RpbmdBU0NJSSwga0NGQWxsb2NhdG9yTnVsbCk7DQotICAgICAgICAgICAgICAgICAgICBtX0V4dEdJRFtjaGFyY29kZV0gPSBDR0ZvbnRHZXRHbHlwaFdpdGhHbHlwaE5hbWUoKENHRm9udFJlZiltX0ZvbnQubV9wUGxhdGZvcm1Gb250LCBuYW1lX2N0KTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lX2N0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ0ZSZWxlYXNlKG5hbWVfY3QpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSNlbmRpZg0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fR2x5cGhJbmRleFtjaGFyY29kZV0pIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBiR290T25lID0gVFJVRTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoYkdvdE9uZSkgew0KLSNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8NCi0gICAgICAgICAgICAgICAgaWYgKCFiQ29yZVRleHQpIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKG1fRXh0R0lELCBtX0dseXBoSW5kZXgsIDI1Nik7DQotICAgICAgICAgICAgICAgIH0NCi0jZW5kaWYNCi0gICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIEZYRlRfU2VsZWN0X0NoYXJtYXAobV9Gb250Lm1fRmFjZSwgRlhGVF9FTkNPRElOR19VTklDT0RFKTsNCi0gICAgICAgIGlmIChtX0Jhc2VFbmNvZGluZyA9PSAwKSB7DQotICAgICAgICAgICAgbV9CYXNlRW5jb2RpbmcgPSBQREZGT05UX0VOQ09ESU5HX1NUQU5EQVJEOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yIChpbnQgY2hhcmNvZGUgPSAwOyBjaGFyY29kZSA8IDI1NjsgY2hhcmNvZGUgKyspIHsNCi0gICAgICAgICAgICBGWF9MUENTVFIgbmFtZSA9IEdldEFkb2JlQ2hhck5hbWUobV9CYXNlRW5jb2RpbmcsIG1fcENoYXJOYW1lcywgY2hhcmNvZGUpOw0KLSAgICAgICAgICAgIGlmIChuYW1lID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tjaGFyY29kZV0gPSBQREZfVW5pY29kZUZyb21BZG9iZU5hbWUobmFtZSk7DQotICAgICAgICAgICAgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9IEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgbV9FbmNvZGluZy5tX1VuaWNvZGVzW2NoYXJjb2RlXSk7DQotI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXw0KLSAgICAgICAgICAgIEZYX0NIQVIgbmFtZV9nbHlwaFsyNTZdOw0KLSAgICAgICAgICAgIEZYRlRfR2V0X0dseXBoX05hbWUobV9Gb250Lm1fRmFjZSwgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSwgbmFtZV9nbHlwaCwgMjU2KTsNCi0gICAgICAgICAgICBuYW1lX2dseXBoWzI1NV0gPSAwOw0KLSAgICAgICAgICAgIENGU3RyaW5nUmVmIG5hbWVfY3QgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nTm9Db3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIG5hbWVfZ2x5cGgsIGtDRlN0cmluZ0VuY29kaW5nQVNDSUksIGtDRkFsbG9jYXRvck51bGwpOw0KLSAgICAgICAgICAgIG1fRXh0R0lEW2NoYXJjb2RlXSA9IENHRm9udEdldEdseXBoV2l0aEdseXBoTmFtZSgoQ0dGb250UmVmKW1fRm9udC5tX3BQbGF0Zm9ybUZvbnQsIG5hbWVfY3QpOw0KLSAgICAgICAgICAgIGlmIChuYW1lX2N0KSB7DQotICAgICAgICAgICAgICAgIENGUmVsZWFzZShuYW1lX2N0KTsNCi0gICAgICAgICAgICB9DQotI2VuZGlmDQotICAgICAgICAgICAgaWYgKG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPT0gMCAmJiBGWFNZU19zdHJjbXAobmFtZSwgIi5ub3RkZWYiKSA9PSAwKSB7DQotICAgICAgICAgICAgICAgIG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tjaGFyY29kZV0gPSAweDIwOw0KLSAgICAgICAgICAgICAgICBtX0dseXBoSW5kZXhbY2hhcmNvZGVdID0gRlhGVF9HZXRfQ2hhcl9JbmRleChtX0ZvbnQubV9GYWNlLCAweDIwKTsNCi0jaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfDQotICAgICAgICAgICAgICAgIEZYX0NIQVIgbmFtZV9nbHlwaFsyNTZdOw0KLSAgICAgICAgICAgICAgICBGWEZUX0dldF9HbHlwaF9OYW1lKG1fRm9udC5tX0ZhY2UsIG1fR2x5cGhJbmRleFtjaGFyY29kZV0sIG5hbWVfZ2x5cGgsIDI1Nik7DQotICAgICAgICAgICAgICAgIG5hbWVfZ2x5cGhbMjU1XSA9IDA7DQotICAgICAgICAgICAgICAgIENGU3RyaW5nUmVmIG5hbWVfY3QgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nTm9Db3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIG5hbWVfZ2x5cGgsIGtDRlN0cmluZ0VuY29kaW5nQVNDSUksIGtDRkFsbG9jYXRvck51bGwpOw0KLSAgICAgICAgICAgICAgICBtX0V4dEdJRFtjaGFyY29kZV0gPSBDR0ZvbnRHZXRHbHlwaFdpdGhHbHlwaE5hbWUoKENHRm9udFJlZiltX0ZvbnQubV9wUGxhdGZvcm1Gb250LCBuYW1lX2N0KTsNCi0gICAgICAgICAgICAgICAgaWYgKG5hbWVfY3QpIHsNCi0gICAgICAgICAgICAgICAgICAgIENGUmVsZWFzZShuYW1lX2N0KTsNCi0gICAgICAgICAgICAgICAgfQ0KLSNlbmRpZg0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0jaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfDQotICAgICAgICBpZiAoIWJDb3JlVGV4dCkgew0KLSAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKG1fRXh0R0lELCBtX0dseXBoSW5kZXgsIDI1Nik7DQotICAgICAgICB9DQotI2VuZGlmDQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlRfVXNlVHlwZTFDaGFybWFwKG1fRm9udC5tX0ZhY2UpOw0KLSNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8NCi0gICAgaWYgKGJDb3JlVGV4dCkgew0KLSAgICAgICAgaWYgKG1fRmxhZ3MgJiBQREZGT05UX1NZTUJPTElDKSB7DQotICAgICAgICAgICAgZm9yIChpbnQgY2hhcmNvZGUgPSAwOyBjaGFyY29kZSA8IDI1NjsgY2hhcmNvZGUgKyspIHsNCi0gICAgICAgICAgICAgICAgRlhfTFBDU1RSIG5hbWUgPSBHZXRBZG9iZUNoYXJOYW1lKG1fQmFzZUVuY29kaW5nLCBtX3BDaGFyTmFtZXMsIGNoYXJjb2RlKTsNCi0gICAgICAgICAgICAgICAgaWYgKG5hbWUpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tjaGFyY29kZV0gPSBQREZfVW5pY29kZUZyb21BZG9iZU5hbWUobmFtZSk7DQotICAgICAgICAgICAgICAgICAgICBtX0dseXBoSW5kZXhbY2hhcmNvZGVdID0gRlhGVF9HZXRfTmFtZV9JbmRleChtX0ZvbnQubV9GYWNlLCAoY2hhciopbmFtZSk7DQotICAgICAgICAgICAgICAgICAgICBDRlN0cmluZ1JlZiBuYW1lX2N0ID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZ05vQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBuYW1lLCBrQ0ZTdHJpbmdFbmNvZGluZ0FTQ0lJLCBrQ0ZBbGxvY2F0b3JOdWxsKTsNCi0gICAgICAgICAgICAgICAgICAgIG1fRXh0R0lEW2NoYXJjb2RlXSA9IENHRm9udEdldEdseXBoV2l0aEdseXBoTmFtZSgoQ0dGb250UmVmKW1fRm9udC5tX3BQbGF0Zm9ybUZvbnQsIG5hbWVfY3QpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWVfY3QpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBDRlJlbGVhc2UobmFtZV9jdCk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBtX0dseXBoSW5kZXhbY2hhcmNvZGVdID0gRlhGVF9HZXRfQ2hhcl9JbmRleChtX0ZvbnQubV9GYWNlLCBjaGFyY29kZSk7DQotICAgICAgICAgICAgICAgICAgICBGWF9XQ0hBUiB1bmljb2RlID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX0dseXBoSW5kZXhbY2hhcmNvZGVdKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZSA9IEZUX1VuaWNvZGVGcm9tQ2hhckNvZGUoUERGRk9OVF9FTkNPRElOR19TVEFOREFSRCwgY2hhcmNvZGUpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgRlhfQ0hBUiBuYW1lX2dseXBoWzI1Nl07DQotICAgICAgICAgICAgICAgICAgICBGWFNZU19tZW1zZXQzMihuYW1lX2dseXBoLCAwLCBzaXplb2YobmFtZV9nbHlwaCkpOw0KLSAgICAgICAgICAgICAgICAgICAgRlhGVF9HZXRfR2x5cGhfTmFtZShtX0ZvbnQubV9GYWNlLCBtX0dseXBoSW5kZXhbY2hhcmNvZGVdLCBuYW1lX2dseXBoLCAyNTYpOw0KLSAgICAgICAgICAgICAgICAgICAgbmFtZV9nbHlwaFsyNTVdID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlID09IDAgJiYgbmFtZV9nbHlwaFswXSAhPSAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZSA9IFBERl9Vbmljb2RlRnJvbUFkb2JlTmFtZShuYW1lX2dseXBoKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tjaGFyY29kZV0gPSB1bmljb2RlOw0KLSAgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgbmFtZV9jdCA9IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmdOb0NvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbmFtZV9nbHlwaCwga0NGU3RyaW5nRW5jb2RpbmdBU0NJSSwga0NGQWxsb2NhdG9yTnVsbCk7DQotICAgICAgICAgICAgICAgICAgICBtX0V4dEdJRFtjaGFyY29kZV0gPSBDR0ZvbnRHZXRHbHlwaFdpdGhHbHlwaE5hbWUoKENHRm9udFJlZiltX0ZvbnQubV9wUGxhdGZvcm1Gb250LCBuYW1lX2N0KTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lX2N0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ0ZSZWxlYXNlKG5hbWVfY3QpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0JPT0wgYlVuaWNvZGUgPSBGQUxTRTsNCi0gICAgICAgIGlmICgwID09IEZYRlRfU2VsZWN0X0NoYXJtYXAobV9Gb250Lm1fRmFjZSwgRlhGVF9FTkNPRElOR19VTklDT0RFKSkgew0KLSAgICAgICAgICAgIGJVbmljb2RlID0gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGZvciAoaW50IGNoYXJjb2RlID0gMDsgY2hhcmNvZGUgPCAyNTY7IGNoYXJjb2RlICsrKSB7DQotICAgICAgICAgICAgRlhfTFBDU1RSIG5hbWUgPSBHZXRBZG9iZUNoYXJOYW1lKG1fQmFzZUVuY29kaW5nLCBtX3BDaGFyTmFtZXMsIGNoYXJjb2RlKTsNCi0gICAgICAgICAgICBpZiAobmFtZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBtX0VuY29kaW5nLm1fVW5pY29kZXNbY2hhcmNvZGVdID0gUERGX1VuaWNvZGVGcm9tQWRvYmVOYW1lKG5hbWUpOw0KLSAgICAgICAgICAgIEZYX0xQQ1NUUiBwU3RyVW5pY29kZSA9IF9HbHlwaE5hbWVSZW1hcChuYW1lKTsNCi0gICAgICAgICAgICBpZiAocFN0clVuaWNvZGUgJiYgMCA9PSBGWEZUX0dldF9OYW1lX0luZGV4KG1fRm9udC5tX0ZhY2UsIChjaGFyKiluYW1lKSkgew0KLSAgICAgICAgICAgICAgICBuYW1lID0gcFN0clVuaWNvZGU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPSBGWEZUX0dldF9OYW1lX0luZGV4KG1fRm9udC5tX0ZhY2UsIChjaGFyKiluYW1lKTsNCi0gICAgICAgICAgICBDRlN0cmluZ1JlZiBuYW1lX2N0ID0gQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZ05vQ29weShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBuYW1lLCBrQ0ZTdHJpbmdFbmNvZGluZ0FTQ0lJLCBrQ0ZBbGxvY2F0b3JOdWxsKTsNCi0gICAgICAgICAgICBtX0V4dEdJRFtjaGFyY29kZV0gPSBDR0ZvbnRHZXRHbHlwaFdpdGhHbHlwaE5hbWUoKENHRm9udFJlZiltX0ZvbnQubV9wUGxhdGZvcm1Gb250LCBuYW1lX2N0KTsNCi0gICAgICAgICAgICBpZiAobmFtZV9jdCkgew0KLSAgICAgICAgICAgICAgICBDRlJlbGVhc2UobmFtZV9jdCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChtX0dseXBoSW5kZXhbY2hhcmNvZGVdID09IDApIHsNCi0gICAgICAgICAgICAgICAgaWYgKEZYU1lTX3N0cmNtcChuYW1lLCAiLm5vdGRlZiIpICE9IDAgJiYgRlhTWVNfc3RyY21wKG5hbWUsICJzcGFjZSIpICE9IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPSBGWEZUX0dldF9DaGFyX0luZGV4KG1fRm9udC5tX0ZhY2UsIGJVbmljb2RlID8gbV9FbmNvZGluZy5tX1VuaWNvZGVzW2NoYXJjb2RlXSA6IGNoYXJjb2RlKTsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0NIQVIgbmFtZV9nbHlwaFsyNTZdOw0KLSAgICAgICAgICAgICAgICAgICAgRlhGVF9HZXRfR2x5cGhfTmFtZShtX0ZvbnQubV9GYWNlLCBtX0dseXBoSW5kZXhbY2hhcmNvZGVdLCBuYW1lX2dseXBoLCAyNTYpOw0KLSAgICAgICAgICAgICAgICAgICAgbmFtZV9nbHlwaFsyNTVdID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIENGU3RyaW5nUmVmIG5hbWVfY3QgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nTm9Db3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIG5hbWVfZ2x5cGgsIGtDRlN0cmluZ0VuY29kaW5nQVNDSUksIGtDRkFsbG9jYXRvck51bGwpOw0KLSAgICAgICAgICAgICAgICAgICAgbV9FeHRHSURbY2hhcmNvZGVdID0gQ0dGb250R2V0R2x5cGhXaXRoR2x5cGhOYW1lKChDR0ZvbnRSZWYpbV9Gb250Lm1fcFBsYXRmb3JtRm9udCwgbmFtZV9jdCk7DQotICAgICAgICAgICAgICAgICAgICBpZiAobmFtZV9jdCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIENGUmVsZWFzZShuYW1lX2N0KTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tjaGFyY29kZV0gPSAweDIwOw0KLSAgICAgICAgICAgICAgICAgICAgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9IGJVbmljb2RlID8gRlhGVF9HZXRfQ2hhcl9JbmRleChtX0ZvbnQubV9GYWNlLCAweDIwKSA6IDB4ZmZmZjsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0NIQVIgbmFtZV9nbHlwaFsyNTZdOw0KLSAgICAgICAgICAgICAgICAgICAgRlhGVF9HZXRfR2x5cGhfTmFtZShtX0ZvbnQubV9GYWNlLCBtX0dseXBoSW5kZXhbY2hhcmNvZGVdLCBuYW1lX2dseXBoLCAyNTYpOw0KLSAgICAgICAgICAgICAgICAgICAgbmFtZV9nbHlwaFsyNTVdID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIENGU3RyaW5nUmVmIG5hbWVfY3QgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nTm9Db3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIG5hbWVfZ2x5cGgsIGtDRlN0cmluZ0VuY29kaW5nQVNDSUksIGtDRkFsbG9jYXRvck51bGwpOw0KLSAgICAgICAgICAgICAgICAgICAgbV9FeHRHSURbY2hhcmNvZGVdID0gQ0dGb250R2V0R2x5cGhXaXRoR2x5cGhOYW1lKChDR0ZvbnRSZWYpbV9Gb250Lm1fcFBsYXRmb3JtRm9udCwgbmFtZV9jdCk7DQotICAgICAgICAgICAgICAgICAgICBpZiAobmFtZV9jdCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIENGUmVsZWFzZShuYW1lX2N0KTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSNlbmRpZg0KLSAgICBpZiAobV9GbGFncyAmIFBERkZPTlRfU1lNQk9MSUMpIHsNCi0gICAgICAgIGZvciAoaW50IGNoYXJjb2RlID0gMDsgY2hhcmNvZGUgPCAyNTY7IGNoYXJjb2RlICsrKSB7DQotICAgICAgICAgICAgRlhfTFBDU1RSIG5hbWUgPSBHZXRBZG9iZUNoYXJOYW1lKG1fQmFzZUVuY29kaW5nLCBtX3BDaGFyTmFtZXMsIGNoYXJjb2RlKTsNCi0gICAgICAgICAgICBpZiAobmFtZSkgew0KLSAgICAgICAgICAgICAgICBtX0VuY29kaW5nLm1fVW5pY29kZXNbY2hhcmNvZGVdID0gUERGX1VuaWNvZGVGcm9tQWRvYmVOYW1lKG5hbWUpOw0KLSAgICAgICAgICAgICAgICBtX0dseXBoSW5kZXhbY2hhcmNvZGVdID0gRlhGVF9HZXRfTmFtZV9JbmRleChtX0ZvbnQubV9GYWNlLCAoY2hhciopbmFtZSk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9IEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgY2hhcmNvZGUpOw0KLSAgICAgICAgICAgICAgICBpZiAobV9HbHlwaEluZGV4W2NoYXJjb2RlXSkgew0KLSAgICAgICAgICAgICAgICAgICAgRlhfV0NIQVIgdW5pY29kZSA9IEZUX1VuaWNvZGVGcm9tQ2hhckNvZGUoUERGRk9OVF9FTkNPRElOR19TVEFOREFSRCwgY2hhcmNvZGUpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGUgPT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYX0NIQVIgbmFtZV9nbHlwaFsyNTZdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYU1lTX21lbXNldDMyKG5hbWVfZ2x5cGgsIDAsIHNpemVvZihuYW1lX2dseXBoKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgRlhGVF9HZXRfR2x5cGhfTmFtZShtX0ZvbnQubV9GYWNlLCBtX0dseXBoSW5kZXhbY2hhcmNvZGVdLCBuYW1lX2dseXBoLCAyNTYpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfZ2x5cGhbMjU1XSA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWVfZ2x5cGhbMF0gIT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlID0gUERGX1VuaWNvZGVGcm9tQWRvYmVOYW1lKG5hbWVfZ2x5cGgpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tjaGFyY29kZV0gPSB1bmljb2RlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8NCi0gICAgICAgIGlmICghYkNvcmVUZXh0KSB7DQotICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9FeHRHSUQsIG1fR2x5cGhJbmRleCwgMjU2KTsNCi0gICAgICAgIH0NCi0jZW5kaWYNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9CT09MIGJVbmljb2RlID0gRkFMU0U7DQotICAgIGlmICgwID09IEZYRlRfU2VsZWN0X0NoYXJtYXAobV9Gb250Lm1fRmFjZSwgRlhGVF9FTkNPRElOR19VTklDT0RFKSkgew0KLSAgICAgICAgYlVuaWNvZGUgPSBUUlVFOw0KLSAgICB9DQotICAgIGZvciAoaW50IGNoYXJjb2RlID0gMDsgY2hhcmNvZGUgPCAyNTY7IGNoYXJjb2RlICsrKSB7DQotICAgICAgICBGWF9MUENTVFIgbmFtZSA9IEdldEFkb2JlQ2hhck5hbWUobV9CYXNlRW5jb2RpbmcsIG1fcENoYXJOYW1lcywgY2hhcmNvZGUpOw0KLSAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9FbmNvZGluZy5tX1VuaWNvZGVzW2NoYXJjb2RlXSA9IFBERl9Vbmljb2RlRnJvbUFkb2JlTmFtZShuYW1lKTsNCi0gICAgICAgIG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPSBGWEZUX0dldF9OYW1lX0luZGV4KG1fRm9udC5tX0ZhY2UsIChjaGFyKiluYW1lKTsNCi0gICAgICAgIGlmIChtX0dseXBoSW5kZXhbY2hhcmNvZGVdID09IDApIHsNCi0gICAgICAgICAgICBpZiAoRlhTWVNfc3RyY21wKG5hbWUsICIubm90ZGVmIikgIT0gMCAmJiBGWFNZU19zdHJjbXAobmFtZSwgInNwYWNlIikgIT0gMCkgew0KLSAgICAgICAgICAgICAgICBtX0dseXBoSW5kZXhbY2hhcmNvZGVdID0gRlhGVF9HZXRfQ2hhcl9JbmRleChtX0ZvbnQubV9GYWNlLCBiVW5pY29kZSA/IG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tjaGFyY29kZV0gOiBjaGFyY29kZSk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgbV9FbmNvZGluZy5tX1VuaWNvZGVzW2NoYXJjb2RlXSA9IDB4MjA7DQotICAgICAgICAgICAgICAgIG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPSAweGZmZmY7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXw0KLSAgICBpZiAoIWJDb3JlVGV4dCkgew0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9FeHRHSUQsIG1fR2x5cGhJbmRleCwgMjU2KTsNCi0gICAgfQ0KLSNlbmRpZg0KLX0NCi1DUERGX0ZvbnRFbmNvZGluZzo6Q1BERl9Gb250RW5jb2RpbmcoKQ0KLXsNCi0gICAgRlhTWVNfbWVtc2V0MzIobV9Vbmljb2RlcywgMCwgc2l6ZW9mKG1fVW5pY29kZXMpKTsNCi19DQotaW50IENQREZfRm9udEVuY29kaW5nOjpDaGFyQ29kZUZyb21Vbmljb2RlKEZYX1dDSEFSIHVuaWNvZGUpIGNvbnN0DQotew0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSArKykNCi0gICAgICAgIGlmIChtX1VuaWNvZGVzW2ldID09IHVuaWNvZGUpIHsNCi0gICAgICAgICAgICByZXR1cm4gaTsNCi0gICAgICAgIH0NCi0gICAgcmV0dXJuIC0xOw0KLX0NCi1DUERGX0ZvbnRFbmNvZGluZzo6Q1BERl9Gb250RW5jb2RpbmcoaW50IFByZWRlZmluZWRFbmNvZGluZykNCi17DQotICAgIGNvbnN0IEZYX1dPUkQqIHBTcmMgPSBQREZfVW5pY29kZXNGb3JQcmVkZWZpbmVkQ2hhclNldChQcmVkZWZpbmVkRW5jb2RpbmcpOw0KLSAgICBpZiAoIXBTcmMpIHsNCi0gICAgICAgIEZYU1lTX21lbXNldDMyKG1fVW5pY29kZXMsIDAsIHNpemVvZihtX1VuaWNvZGVzKSk7DQotICAgIH0gZWxzZQ0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkrKykgew0KLSAgICAgICAgICAgIG1fVW5pY29kZXNbaV0gPSBwU3JjW2ldOw0KLSAgICAgICAgfQ0KLX0NCi1GWF9CT09MIENQREZfRm9udEVuY29kaW5nOjpJc0lkZW50aWNhbChDUERGX0ZvbnRFbmNvZGluZyogcEFub3RoZXIpIGNvbnN0DQotew0KLSAgICByZXR1cm4gRlhTWVNfbWVtY21wMzIobV9Vbmljb2RlcywgcEFub3RoZXItPm1fVW5pY29kZXMsIHNpemVvZihtX1VuaWNvZGVzKSkgPT0gMDsNCi19DQotQ1BERl9PYmplY3QqIENQREZfRm9udEVuY29kaW5nOjpSZWFsaXplKCkNCi17DQotICAgIGludCBwcmVkZWZpbmVkID0gMDsNCi0gICAgZm9yIChpbnQgY3MgPSBQREZGT05UX0VOQ09ESU5HX1dJTkFOU0k7IGNzIDwgUERGRk9OVF9FTkNPRElOR19aQVBGRElOR0JBVFM7IGNzICsrKSB7DQotICAgICAgICBjb25zdCBGWF9XT1JEKiBwU3JjID0gUERGX1VuaWNvZGVzRm9yUHJlZGVmaW5lZENoYXJTZXQoY3MpOw0KLSAgICAgICAgRlhfQk9PTCBtYXRjaCA9IFRSVUU7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgKytpKSB7DQotICAgICAgICAgICAgaWYgKG1fVW5pY29kZXNbaV0gIT0gcFNyY1tpXSkgew0KLSAgICAgICAgICAgICAgICBtYXRjaCA9IEZBTFNFOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAobWF0Y2gpIHsNCi0gICAgICAgICAgICBwcmVkZWZpbmVkID0gY3M7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKHByZWRlZmluZWQpIHsNCi0gICAgICAgIGlmIChwcmVkZWZpbmVkID09IFBERkZPTlRfRU5DT0RJTkdfV0lOQU5TSSkgew0KLSAgICAgICAgICAgIHJldHVybiBDUERGX05hbWU6OkNyZWF0ZSgiV2luQW5zaUVuY29kaW5nIik7DQotICAgICAgICB9DQotICAgICAgICBpZiAocHJlZGVmaW5lZCA9PSBQREZGT05UX0VOQ09ESU5HX01BQ1JPTUFOKSB7DQotICAgICAgICAgICAgcmV0dXJuIENQREZfTmFtZTo6Q3JlYXRlKCJNYWNSb21hbkVuY29kaW5nIik7DQotICAgICAgICB9DQotICAgICAgICBpZiAocHJlZGVmaW5lZCA9PSBQREZGT05UX0VOQ09ESU5HX01BQ0VYUEVSVCkgew0KLSAgICAgICAgICAgIHJldHVybiBDUERGX05hbWU6OkNyZWF0ZSgiTWFjRXhwZXJ0RW5jb2RpbmciKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSBDUERGX0RpY3Rpb25hcnk6OkNyZWF0ZSgpOw0KLSAgICBwRGljdC0+U2V0QXROYW1lKEZYX0JTVFJDKCJCYXNlRW5jb2RpbmciKSwgRlhfQlNUUkMoIldpbkFuc2lFbmNvZGluZyIpKTsNCi0gICAgY29uc3QgRlhfV09SRCogcFN0YW5kYXJkID0gUERGX1VuaWNvZGVzRm9yUHJlZGVmaW5lZENoYXJTZXQoUERGRk9OVF9FTkNPRElOR19XSU5BTlNJKTsNCi0gICAgQ1BERl9BcnJheSogcERpZmYgPSBDUERGX0FycmF5OjpDcmVhdGUoKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsNCi0gICAgICAgIGlmIChwU3RhbmRhcmRbaV0gPT0gbV9Vbmljb2Rlc1tpXSkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcERpZmYtPkFkZChDUERGX051bWJlcjo6Q3JlYXRlKGkpKTsNCi0gICAgICAgIHBEaWZmLT5BZGQoQ1BERl9OYW1lOjpDcmVhdGUoUERGX0Fkb2JlTmFtZUZyb21Vbmljb2RlKG1fVW5pY29kZXNbaV0pKSk7DQotICAgIH0NCi0gICAgcERpY3QtPlNldEF0KEZYX0JTVFJDKCJEaWZmZXJlbmNlcyIpLCBwRGlmZik7DQotICAgIHJldHVybiBwRGljdDsNCi19DQotQ1BERl9UcnVlVHlwZUZvbnQ6OkNQREZfVHJ1ZVR5cGVGb250KCkNCi17DQotfQ0KLUZYX0JPT0wgQ1BERl9UcnVlVHlwZUZvbnQ6Ol9Mb2FkKCkNCi17DQotICAgIHJldHVybiBMb2FkQ29tbW9uKCk7DQotfQ0KLWV4dGVybiBGWF9EV09SRCBGVF9DaGFyQ29kZUZyb21Vbmljb2RlKGludCBlbmNvZGluZywgRlhfV0NIQVIgdW5pY29kZSk7DQotdm9pZCBDUERGX1RydWVUeXBlRm9udDo6TG9hZEdseXBoTWFwKCkNCi17DQotICAgIGlmIChtX0ZvbnQubV9GYWNlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpbnQgYmFzZUVuY29kaW5nID0gbV9CYXNlRW5jb2Rpbmc7DQotICAgIGlmIChtX3BGb250RmlsZSAmJiBtX0ZvbnQubV9GYWNlLT5udW1fY2hhcm1hcHMgPiAwDQotICAgICAgICAgICAgJiYgKGJhc2VFbmNvZGluZyA9PSBQREZGT05UX0VOQ09ESU5HX01BQ1JPTUFOIHx8IGJhc2VFbmNvZGluZyA9PSBQREZGT05UX0VOQ09ESU5HX1dJTkFOU0kpDQotICAgICAgICAgICAgJiYgKG1fRmxhZ3MgJiBQREZGT05UX1NZTUJPTElDKSkgew0KLSAgICAgICAgRlhfQk9PTCBiU3VwcG9ydFdpbiA9IEZBTFNFOw0KLSAgICAgICAgRlhfQk9PTCBiU3VwcG9ydE1hYyA9IEZBTFNFOw0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGWEZUX0dldF9GYWNlX0NoYXJtYXBDb3VudChtX0ZvbnQubV9GYWNlKTsgaSsrKSB7DQotICAgICAgICAgICAgaW50IHBsYXRmb3JtX2lkID0gRlhGVF9HZXRfQ2hhcm1hcF9QbGF0Zm9ybUlEKEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcHMobV9Gb250Lm1fRmFjZSlbaV0pOw0KLSAgICAgICAgICAgIGlmIChwbGF0Zm9ybV9pZCA9PSAwIHx8IHBsYXRmb3JtX2lkID09IDMpIHsNCi0gICAgICAgICAgICAgICAgYlN1cHBvcnRXaW4gPSBUUlVFOw0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAocGxhdGZvcm1faWQgPT0gMCB8fCBwbGF0Zm9ybV9pZCA9PSAxKSB7DQotICAgICAgICAgICAgICAgIGJTdXBwb3J0TWFjID0gVFJVRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAoYmFzZUVuY29kaW5nID09IFBERkZPTlRfRU5DT0RJTkdfV0lOQU5TSSAmJiAhYlN1cHBvcnRXaW4pIHsNCi0gICAgICAgICAgICBiYXNlRW5jb2RpbmcgPSBiU3VwcG9ydE1hYyA/IFBERkZPTlRfRU5DT0RJTkdfTUFDUk9NQU4gOiBQREZGT05UX0VOQ09ESU5HX0JVSUxUSU47DQotICAgICAgICB9IGVsc2UgaWYgKGJhc2VFbmNvZGluZyA9PSBQREZGT05UX0VOQ09ESU5HX01BQ1JPTUFOICYmICFiU3VwcG9ydE1hYykgew0KLSAgICAgICAgICAgIGJhc2VFbmNvZGluZyA9IGJTdXBwb3J0V2luID8gUERGRk9OVF9FTkNPRElOR19XSU5BTlNJIDogUERGRk9OVF9FTkNPRElOR19CVUlMVElOOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmICgoKGJhc2VFbmNvZGluZyA9PSBQREZGT05UX0VOQ09ESU5HX01BQ1JPTUFOIHx8IGJhc2VFbmNvZGluZyA9PSBQREZGT05UX0VOQ09ESU5HX1dJTkFOU0kpDQotICAgICAgICAgICAgJiYgbV9wQ2hhck5hbWVzID09IE5VTEwpIHx8IChtX0ZsYWdzICYgUERGRk9OVF9OT05TWU1CT0xJQykpIHsNCi0gICAgICAgIGlmICghRlhGVF9IYXNfR2x5cGhfTmFtZXMobV9Gb250Lm1fRmFjZSkgJiYgKCFtX0ZvbnQubV9GYWNlLT5udW1fY2hhcm1hcHMgfHwgIW1fRm9udC5tX0ZhY2UtPmNoYXJtYXBzKSkgew0KLSAgICAgICAgICAgIGludCBuU3RhcnRDaGFyID0gbV9wRm9udERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIkZpcnN0Q2hhciIpKTsNCi0gICAgICAgICAgICBpbnQgY2hhcmNvZGUgPSAwOw0KLSAgICAgICAgICAgIGZvciAoOyBjaGFyY29kZSA8IG5TdGFydENoYXI7IGNoYXJjb2RlICsrKSB7DQotICAgICAgICAgICAgICAgIG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPSAwOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9XT1JEIG5HbHlwaCA9IGNoYXJjb2RlIC0gblN0YXJ0Q2hhciArIDM7DQotICAgICAgICAgICAgZm9yICg7IGNoYXJjb2RlIDwgMjU2OyBjaGFyY29kZSArKywgbkdseXBoICsrKSB7DQotICAgICAgICAgICAgICAgIG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPSBuR2x5cGg7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0JPT0wgYk1TVW5pY29kZSA9IEZUX1VzZVRUQ2hhcm1hcChtX0ZvbnQubV9GYWNlLCAzLCAxKTsNCi0gICAgICAgIEZYX0JPT0wgYk1hY1JvbWFuID0gRkFMU0UsIGJNU1N5bWJvbCA9IEZBTFNFOw0KLSAgICAgICAgaWYgKCFiTVNVbmljb2RlKSB7DQotICAgICAgICAgICAgaWYgKG1fRmxhZ3MgJiBQREZGT05UX05PTlNZTUJPTElDKSB7DQotICAgICAgICAgICAgICAgIGJNYWNSb21hbiA9IEZUX1VzZVRUQ2hhcm1hcChtX0ZvbnQubV9GYWNlLCAxLCAwKTsNCi0gICAgICAgICAgICAgICAgYk1TU3ltYm9sID0gIWJNYWNSb21hbiAmJiBGVF9Vc2VUVENoYXJtYXAobV9Gb250Lm1fRmFjZSwgMywgMCk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgYk1TU3ltYm9sID0gRlRfVXNlVFRDaGFybWFwKG1fRm9udC5tX0ZhY2UsIDMsIDApOw0KLSAgICAgICAgICAgICAgICBiTWFjUm9tYW4gPSAhYk1TU3ltYm9sICYmIEZUX1VzZVRUQ2hhcm1hcChtX0ZvbnQubV9GYWNlLCAxLCAwKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBGWF9CT09MIGJUb1VuaWNvZGUgPSBtX3BGb250RGljdC0+S2V5RXhpc3QoRlhfQlNUUkMoIlRvVW5pY29kZSIpKTsNCi0gICAgICAgIGZvciAoaW50IGNoYXJjb2RlID0gMDsgY2hhcmNvZGUgPCAyNTY7IGNoYXJjb2RlICsrKSB7DQotICAgICAgICAgICAgRlhfTFBDU1RSIG5hbWUgPSBHZXRBZG9iZUNoYXJOYW1lKGJhc2VFbmNvZGluZywgbV9wQ2hhck5hbWVzLCBjaGFyY29kZSk7DQotICAgICAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICBtX0dseXBoSW5kZXhbY2hhcmNvZGVdID0gbV9wRm9udEZpbGUgPyBGWEZUX0dldF9DaGFyX0luZGV4KG1fRm9udC5tX0ZhY2UsIGNoYXJjb2RlKSA6IC0xOw0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9FbmNvZGluZy5tX1VuaWNvZGVzW2NoYXJjb2RlXSA9IFBERl9Vbmljb2RlRnJvbUFkb2JlTmFtZShuYW1lKTsNCi0gICAgICAgICAgICBpZiAoYk1TU3ltYm9sKSB7DQotICAgICAgICAgICAgICAgIGNvbnN0IEZYX0JZVEUgcHJlZml4WzRdID0gezB4MDAsIDB4ZjAsIDB4ZjEsIDB4ZjJ9Ow0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGogKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX1dPUkQgdW5pY29kZSA9IHByZWZpeFtqXSAqIDI1NiArIGNoYXJjb2RlOw0KLSAgICAgICAgICAgICAgICAgICAgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9IEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgdW5pY29kZSk7DQotICAgICAgICAgICAgICAgICAgICBpZiAobV9HbHlwaEluZGV4W2NoYXJjb2RlXSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIGlmIChtX0VuY29kaW5nLm1fVW5pY29kZXNbY2hhcmNvZGVdKSB7DQotICAgICAgICAgICAgICAgIGlmIChiTVNVbmljb2RlKSB7DQotICAgICAgICAgICAgICAgICAgICBtX0dseXBoSW5kZXhbY2hhcmNvZGVdID0gRlhGVF9HZXRfQ2hhcl9JbmRleChtX0ZvbnQubV9GYWNlLCBtX0VuY29kaW5nLm1fVW5pY29kZXNbY2hhcmNvZGVdKTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiTWFjUm9tYW4pIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIG1hY2NvZGUgPSBGVF9DaGFyQ29kZUZyb21Vbmljb2RlKEZYRlRfRU5DT0RJTkdfQVBQTEVfUk9NQU4sIG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tjaGFyY29kZV0pOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtYWNjb2RlKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9IEZYRlRfR2V0X05hbWVfSW5kZXgobV9Gb250Lm1fRmFjZSwgKGNoYXIgKiluYW1lKTsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9IEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgbWFjY29kZSk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKChtX0dseXBoSW5kZXhbY2hhcmNvZGVdID09IDAgfHwgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9PSAweGZmZmYpICYmIG5hbWUgIT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICBpZiAobmFtZVswXSA9PSAnLicgJiYgRlhTWVNfc3RyY21wKG5hbWUsICIubm90ZGVmIikgPT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9IEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgMzIpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9IEZYRlRfR2V0X05hbWVfSW5kZXgobV9Gb250Lm1fRmFjZSwgKGNoYXIqKW5hbWUpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiVG9Vbmljb2RlKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIHdzVW5pY29kZSA9IFVuaWNvZGVGcm9tQ2hhckNvZGUoY2hhcmNvZGUpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdzVW5pY29kZS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPSBGWEZUX0dldF9DaGFyX0luZGV4KG1fRm9udC5tX0ZhY2UsIHdzVW5pY29kZVswXSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0VuY29kaW5nLm1fVW5pY29kZXNbY2hhcmNvZGVdID0gd3NVbmljb2RlWzBdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0dseXBoSW5kZXhbY2hhcmNvZGVdID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9IEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgY2hhcmNvZGUpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAoRlRfVXNlVFRDaGFybWFwKG1fRm9udC5tX0ZhY2UsIDMsIDApKSB7DQotICAgICAgICBjb25zdCBGWF9CWVRFIHByZWZpeFs0XSA9IHsweDAwLCAweGYwLCAweGYxLCAweGYyfTsNCi0gICAgICAgIEZYX0JPT0wgYkdvdE9uZSA9IEZBTFNFOw0KLSAgICAgICAgZm9yIChpbnQgY2hhcmNvZGUgPSAwOyBjaGFyY29kZSA8IDI1NjsgY2hhcmNvZGUgKyspIHsNCi0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGogKyspIHsNCi0gICAgICAgICAgICAgICAgRlhfV09SRCB1bmljb2RlID0gcHJlZml4W2pdICogMjU2ICsgY2hhcmNvZGU7DQotICAgICAgICAgICAgICAgIG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPSBGWEZUX0dldF9DaGFyX0luZGV4KG1fRm9udC5tX0ZhY2UsIHVuaWNvZGUpOw0KLSAgICAgICAgICAgICAgICBpZiAobV9HbHlwaEluZGV4W2NoYXJjb2RlXSkgew0KLSAgICAgICAgICAgICAgICAgICAgYkdvdE9uZSA9IFRSVUU7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChiR290T25lKSB7DQotICAgICAgICAgICAgaWYgKGJhc2VFbmNvZGluZyAhPSBQREZGT05UX0VOQ09ESU5HX0JVSUxUSU4pIHsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgY2hhcmNvZGUgPSAwOyBjaGFyY29kZSA8IDI1NjsgY2hhcmNvZGUgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0xQQ1NUUiBuYW1lID0gR2V0QWRvYmVDaGFyTmFtZShiYXNlRW5jb2RpbmcsIG1fcENoYXJOYW1lcywgY2hhcmNvZGUpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgbV9FbmNvZGluZy5tX1VuaWNvZGVzW2NoYXJjb2RlXSA9IFBERl9Vbmljb2RlRnJvbUFkb2JlTmFtZShuYW1lKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoRlRfVXNlVFRDaGFybWFwKG1fRm9udC5tX0ZhY2UsIDEsIDApKSB7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGNoYXJjb2RlID0gMDsgY2hhcmNvZGUgPCAyNTY7IGNoYXJjb2RlICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBtX0VuY29kaW5nLm1fVW5pY29kZXNbY2hhcmNvZGVdID0gRlRfVW5pY29kZUZyb21DaGFyQ29kZShGWEZUX0VOQ09ESU5HX0FQUExFX1JPTUFOLCBjaGFyY29kZSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChGVF9Vc2VUVENoYXJtYXAobV9Gb250Lm1fRmFjZSwgMSwgMCkpIHsNCi0gICAgICAgIEZYX0JPT0wgYkdvdE9uZSA9IEZBTFNFOw0KLSAgICAgICAgZm9yIChpbnQgY2hhcmNvZGUgPSAwOyBjaGFyY29kZSA8IDI1NjsgY2hhcmNvZGUgKyspIHsNCi0gICAgICAgICAgICBtX0dseXBoSW5kZXhbY2hhcmNvZGVdID0gRlhGVF9HZXRfQ2hhcl9JbmRleChtX0ZvbnQubV9GYWNlLCBjaGFyY29kZSk7DQotICAgICAgICAgICAgbV9FbmNvZGluZy5tX1VuaWNvZGVzW2NoYXJjb2RlXSA9IEZUX1VuaWNvZGVGcm9tQ2hhckNvZGUoRlhGVF9FTkNPRElOR19BUFBMRV9ST01BTiwgY2hhcmNvZGUpOw0KLSAgICAgICAgICAgIGlmIChtX0dseXBoSW5kZXhbY2hhcmNvZGVdKSB7DQotICAgICAgICAgICAgICAgIGJHb3RPbmUgPSBUUlVFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX3BGb250RmlsZSB8fCBiR290T25lKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChGWEZUX1NlbGVjdF9DaGFybWFwKG1fRm9udC5tX0ZhY2UsIEZYRlRfRU5DT0RJTkdfVU5JQ09ERSkgPT0gMCkgew0KLSAgICAgICAgRlhfQk9PTCBiR290T25lID0gRkFMU0U7DQotICAgICAgICBjb25zdCBGWF9XT1JEKiBwVW5pY29kZXMgPSBQREZfVW5pY29kZXNGb3JQcmVkZWZpbmVkQ2hhclNldChiYXNlRW5jb2RpbmcpOw0KLSAgICAgICAgZm9yIChpbnQgY2hhcmNvZGUgPSAwOyBjaGFyY29kZSA8IDI1NjsgY2hhcmNvZGUgKyspIHsNCi0gICAgICAgICAgICBpZiAobV9wRm9udEZpbGUgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICBGWF9MUENTVFIgbmFtZSA9IEdldEFkb2JlQ2hhck5hbWUoMCwgbV9wQ2hhck5hbWVzLCBjaGFyY29kZSk7DQotICAgICAgICAgICAgICAgIGlmIChuYW1lICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tjaGFyY29kZV0gPSBQREZfVW5pY29kZUZyb21BZG9iZU5hbWUobmFtZSk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocFVuaWNvZGVzKSB7DQotICAgICAgICAgICAgICAgICAgICBtX0VuY29kaW5nLm1fVW5pY29kZXNbY2hhcmNvZGVdID0gcFVuaWNvZGVzW2NoYXJjb2RlXTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tjaGFyY29kZV0gPSBjaGFyY29kZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9IEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgbV9FbmNvZGluZy5tX1VuaWNvZGVzW2NoYXJjb2RlXSk7DQotICAgICAgICAgICAgaWYgKG1fR2x5cGhJbmRleFtjaGFyY29kZV0pIHsNCi0gICAgICAgICAgICAgICAgYkdvdE9uZSA9IFRSVUU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGJHb3RPbmUpIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgIH0NCi0gICAgZm9yIChpbnQgY2hhcmNvZGUgPSAwOyBjaGFyY29kZSA8IDI1NjsgY2hhcmNvZGUgKyspIHsNCi0gICAgICAgIG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPSBjaGFyY29kZTsNCi0gICAgfQ0KLX0NCi1DUERGX1R5cGUzRm9udDo6Q1BERl9UeXBlM0ZvbnQoKQ0KLXsNCi0gICAgbV9wUGFnZVJlc291cmNlcyA9IE5VTEw7DQotICAgIEZYU1lTX21lbXNldDMyKG1fQ2hhcldpZHRoTCwgMCwgc2l6ZW9mIG1fQ2hhcldpZHRoTCk7DQotfQ0KLUNQREZfVHlwZTNGb250Ojp+Q1BERl9UeXBlM0ZvbnQoKQ0KLXsNCi0gICAgRlhfUE9TSVRJT04gcG9zID0gbV9DYWNoZU1hcC5HZXRTdGFydFBvc2l0aW9uKCk7DQotICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgIEZYX0xQVk9JRCBrZXksIHZhbHVlOw0KLSAgICAgICAgbV9DYWNoZU1hcC5HZXROZXh0QXNzb2MocG9zLCBrZXksIHZhbHVlKTsNCi0gICAgICAgIGRlbGV0ZSAoQ1BERl9UeXBlM0NoYXIqKXZhbHVlOw0KLSAgICB9DQotICAgIG1fQ2FjaGVNYXAuUmVtb3ZlQWxsKCk7DQotICAgIHBvcyA9IG1fRGVsZXRlZE1hcC5HZXRTdGFydFBvc2l0aW9uKCk7DQotICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgIEZYX0xQVk9JRCBrZXksIHZhbHVlOw0KLSAgICAgICAgbV9EZWxldGVkTWFwLkdldE5leHRBc3NvYyhwb3MsIGtleSwgdmFsdWUpOw0KLSAgICAgICAgZGVsZXRlIChDUERGX1R5cGUzQ2hhciopa2V5Ow0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BERl9UeXBlM0ZvbnQ6Ol9Mb2FkKCkNCi17DQotICAgIG1fcEZvbnRSZXNvdXJjZXMgPSBtX3BGb250RGljdC0+R2V0RGljdChGWF9CU1RSQygiUmVzb3VyY2VzIikpOw0KLSAgICBDUERGX0FycmF5KiBwTWF0cml4ID0gbV9wRm9udERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJGb250TWF0cml4IikpOw0KLSAgICBGWF9GTE9BVCB4c2NhbGUgPSAxLjBmLCB5c2NhbGUgPSAxLjBmOw0KLSAgICBpZiAocE1hdHJpeCkgew0KLSAgICAgICAgbV9Gb250TWF0cml4ID0gcE1hdHJpeC0+R2V0TWF0cml4KCk7DQotICAgICAgICB4c2NhbGUgPSBtX0ZvbnRNYXRyaXguYTsNCi0gICAgICAgIHlzY2FsZSA9IG1fRm9udE1hdHJpeC5kOw0KLSAgICB9DQotICAgIENQREZfQXJyYXkqIHBCQm94ID0gbV9wRm9udERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJGb250QkJveCIpKTsNCi0gICAgaWYgKHBCQm94KSB7DQotICAgICAgICBtX0ZvbnRCQm94LmxlZnQgPSAoRlhfSU5UMzIpKEZYU1lTX011bChwQkJveC0+R2V0TnVtYmVyKDApLCB4c2NhbGUpICogMTAwMCk7DQotICAgICAgICBtX0ZvbnRCQm94LmJvdHRvbSA9IChGWF9JTlQzMikoRlhTWVNfTXVsKHBCQm94LT5HZXROdW1iZXIoMSksIHlzY2FsZSkgKiAxMDAwKTsNCi0gICAgICAgIG1fRm9udEJCb3gucmlnaHQgPSAoRlhfSU5UMzIpKEZYU1lTX011bChwQkJveC0+R2V0TnVtYmVyKDIpLCB4c2NhbGUpICogMTAwMCk7DQotICAgICAgICBtX0ZvbnRCQm94LnRvcCA9IChGWF9JTlQzMikoRlhTWVNfTXVsKHBCQm94LT5HZXROdW1iZXIoMyksIHlzY2FsZSkgKiAxMDAwKTsNCi0gICAgfQ0KLSAgICBpbnQgU3RhcnRDaGFyID0gbV9wRm9udERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIkZpcnN0Q2hhciIpKTsNCi0gICAgQ1BERl9BcnJheSogcFdpZHRoQXJyYXkgPSBtX3BGb250RGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIldpZHRocyIpKTsNCi0gICAgaWYgKHBXaWR0aEFycmF5ICYmIChTdGFydENoYXIgPj0gMCAmJiBTdGFydENoYXIgPCAyNTYpKSB7DQotICAgICAgICBGWF9EV09SRCBjb3VudCA9IHBXaWR0aEFycmF5LT5HZXRDb3VudCgpOw0KLSAgICAgICAgaWYgKGNvdW50ID4gMjU2KSB7DQotICAgICAgICAgICAgY291bnQgPSAyNTY7DQotICAgICAgICB9DQotICAgICAgICBpZiAoU3RhcnRDaGFyICsgY291bnQgPiAyNTYpIHsNCi0gICAgICAgICAgICBjb3VudCA9IDI1NiAtIFN0YXJ0Q2hhcjsNCi0gICAgICAgIH0NCi0gICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBjb3VudDsgaSArKykgew0KLSAgICAgICAgICAgIG1fQ2hhcldpZHRoTFtTdGFydENoYXIgKyBpXSA9IEZYU1lTX3JvdW5kKEZYU1lTX011bChwV2lkdGhBcnJheS0+R2V0TnVtYmVyKGkpLCB4c2NhbGUpICogMTAwMCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9wQ2hhclByb2NzID0gbV9wRm9udERpY3QtPkdldERpY3QoRlhfQlNUUkMoIkNoYXJQcm9jcyIpKTsNCi0gICAgQ1BERl9PYmplY3QqIHBFbmNvZGluZyA9IG1fcEZvbnREaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkVuY29kaW5nIikpOw0KLSAgICBpZiAocEVuY29kaW5nKSB7DQotICAgICAgICBMb2FkUERGRW5jb2RpbmcocEVuY29kaW5nLCBtX0Jhc2VFbmNvZGluZywgbV9wQ2hhck5hbWVzLCBGQUxTRSwgRkFMU0UpOw0KLSAgICAgICAgaWYgKG1fcENoYXJOYW1lcykgew0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7DQotICAgICAgICAgICAgICAgIG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tpXSA9IFBERl9Vbmljb2RlRnJvbUFkb2JlTmFtZShtX3BDaGFyTmFtZXNbaV0pOw0KLSAgICAgICAgICAgICAgICBpZiAobV9FbmNvZGluZy5tX1VuaWNvZGVzW2ldID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tpXSA9IGk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ1BERl9UeXBlM0ZvbnQ6OkNoZWNrVHlwZTNGb250TWV0cmljcygpDQotew0KLSAgICBDaGVja0ZvbnRNZXRyaWNzKCk7DQotfQ0KLUNQREZfVHlwZTNDaGFyKiBDUERGX1R5cGUzRm9udDo6TG9hZENoYXIoRlhfRFdPUkQgY2hhcmNvZGUsIGludCBsZXZlbCkNCi17DQotICAgIGlmIChsZXZlbCA+PSBfRlBERl9NQVhfVFlQRTNfRk9STV9MRVZFTF8pIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfVHlwZTNDaGFyKiBwQ2hhciA9IE5VTEw7DQotICAgIGlmIChtX0NhY2hlTWFwLkxvb2t1cCgoRlhfTFBWT0lEKShGWF9VSU5UUFRSKWNoYXJjb2RlLCAoRlhfTFBWT0lEJilwQ2hhcikpIHsNCi0gICAgICAgIGlmIChwQ2hhci0+bV9iUGFnZVJlcXVpcmVkICYmIG1fcFBhZ2VSZXNvdXJjZXMpIHsNCi0gICAgICAgICAgICBkZWxldGUgcENoYXI7DQotICAgICAgICAgICAgbV9DYWNoZU1hcC5SZW1vdmVLZXkoKEZYX0xQVk9JRCkoRlhfVUlOVFBUUiljaGFyY29kZSk7DQotICAgICAgICAgICAgcmV0dXJuIExvYWRDaGFyKGNoYXJjb2RlLCBsZXZlbCArIDEpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHBDaGFyOw0KLSAgICB9DQotICAgIEZYX0xQQ1NUUiBuYW1lID0gR2V0QWRvYmVDaGFyTmFtZShtX0Jhc2VFbmNvZGluZywgbV9wQ2hhck5hbWVzLCBjaGFyY29kZSk7DQotICAgIGlmIChuYW1lID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfU3RyZWFtKiBwU3RyZWFtID0gKENQREZfU3RyZWFtKiltX3BDaGFyUHJvY3MtPkdldEVsZW1lbnRWYWx1ZShuYW1lKTsNCi0gICAgaWYgKHBTdHJlYW0gPT0gTlVMTCB8fCBwU3RyZWFtLT5HZXRUeXBlKCkgIT0gUERGT0JKX1NUUkVBTSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcENoYXIgPSBGWF9ORVcgQ1BERl9UeXBlM0NoYXI7DQotICAgIHBDaGFyLT5tX3BGb3JtID0gRlhfTkVXIENQREZfRm9ybShtX3BEb2N1bWVudCwgbV9wRm9udFJlc291cmNlcyA/IG1fcEZvbnRSZXNvdXJjZXMgOiBtX3BQYWdlUmVzb3VyY2VzLCBwU3RyZWFtLCBOVUxMKTsNCi0gICAgcENoYXItPm1fcEZvcm0tPlBhcnNlQ29udGVudChOVUxMLCBOVUxMLCBwQ2hhciwgTlVMTCwgbGV2ZWwgKyAxKTsNCi0gICAgRlhfRkxPQVQgc2NhbGUgPSBtX0ZvbnRNYXRyaXguR2V0WFVuaXQoKTsNCi0gICAgcENoYXItPm1fV2lkdGggPSAoRlhfSU5UMzIpKHBDaGFyLT5tX1dpZHRoICogc2NhbGUgKyAwLjVmKTsNCi0gICAgRlhfUkVDVCAmcmNCQm94ID0gcENoYXItPm1fQkJveDsNCi0gICAgQ0ZYX0Zsb2F0UmVjdCBjaGFyX3JlY3QoKEZYX0ZMT0FUKXJjQkJveC5sZWZ0IC8gMTAwMC4wZiwgKEZYX0ZMT0FUKXJjQkJveC5ib3R0b20gLyAxMDAwLjBmLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlhfRkxPQVQpcmNCQm94LnJpZ2h0IC8gMTAwMC4wZiwgKEZYX0ZMT0FUKXJjQkJveC50b3AgLyAxMDAwLjBmKTsNCi0gICAgaWYgKHJjQkJveC5yaWdodCA8PSByY0JCb3gubGVmdCB8fCByY0JCb3guYm90dG9tID49IHJjQkJveC50b3ApIHsNCi0gICAgICAgIGNoYXJfcmVjdCA9IHBDaGFyLT5tX3BGb3JtLT5DYWxjQm91bmRpbmdCb3goKTsNCi0gICAgfQ0KLSAgICBjaGFyX3JlY3QuVHJhbnNmb3JtKCZtX0ZvbnRNYXRyaXgpOw0KLSAgICByY0JCb3gubGVmdCA9IEZYU1lTX3JvdW5kKGNoYXJfcmVjdC5sZWZ0ICogMTAwMCk7DQotICAgIHJjQkJveC5yaWdodCA9IEZYU1lTX3JvdW5kKGNoYXJfcmVjdC5yaWdodCAqIDEwMDApOw0KLSAgICByY0JCb3gudG9wID0gRlhTWVNfcm91bmQoY2hhcl9yZWN0LnRvcCAqIDEwMDApOw0KLSAgICByY0JCb3guYm90dG9tID0gRlhTWVNfcm91bmQoY2hhcl9yZWN0LmJvdHRvbSAqIDEwMDApOw0KLSAgICBtX0NhY2hlTWFwLlNldEF0KChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpY2hhcmNvZGUsIHBDaGFyKTsNCi0gICAgaWYgKHBDaGFyLT5tX3BGb3JtLT5Db3VudE9iamVjdHMoKSA9PSAwKSB7DQotICAgICAgICBkZWxldGUgcENoYXItPm1fcEZvcm07DQotICAgICAgICBwQ2hhci0+bV9wRm9ybSA9IE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIHBDaGFyOw0KLX0NCi1pbnQgQ1BERl9UeXBlM0ZvbnQ6OkdldENoYXJXaWR0aEYoRlhfRFdPUkQgY2hhcmNvZGUsIGludCBsZXZlbCkNCi17DQotICAgIGlmIChjaGFyY29kZSA+IDB4ZmYpIHsNCi0gICAgICAgIGNoYXJjb2RlID0gMDsNCi0gICAgfQ0KLSAgICBpZiAobV9DaGFyV2lkdGhMW2NoYXJjb2RlXSkgew0KLSAgICAgICAgcmV0dXJuIG1fQ2hhcldpZHRoTFtjaGFyY29kZV07DQotICAgIH0NCi0gICAgQ1BERl9UeXBlM0NoYXIqIHBDaGFyID0gTG9hZENoYXIoY2hhcmNvZGUsIGxldmVsKTsNCi0gICAgaWYgKHBDaGFyID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIHJldHVybiBwQ2hhci0+bV9XaWR0aDsNCi19DQotdm9pZCBDUERGX1R5cGUzRm9udDo6R2V0Q2hhckJCb3goRlhfRFdPUkQgY2hhcmNvZGUsIEZYX1JFQ1QmIHJlY3QsIGludCBsZXZlbCkNCi17DQotICAgIENQREZfVHlwZTNDaGFyKiBwQ2hhciA9IExvYWRDaGFyKGNoYXJjb2RlLCBsZXZlbCk7DQotICAgIGlmIChwQ2hhciA9PSBOVUxMKSB7DQotICAgICAgICByZWN0LmxlZnQgPSByZWN0LnJpZ2h0ID0gcmVjdC50b3AgPSByZWN0LmJvdHRvbSA9IDA7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgcmVjdCA9IHBDaGFyLT5tX0JCb3g7DQotfQ0KLUNQREZfVHlwZTNDaGFyOjpDUERGX1R5cGUzQ2hhcigpDQotew0KLSAgICBtX3BGb3JtID0gTlVMTDsNCi0gICAgbV9wQml0bWFwID0gTlVMTDsNCi0gICAgbV9iUGFnZVJlcXVpcmVkID0gRkFMU0U7DQotICAgIG1fYkNvbG9yZWQgPSBGQUxTRTsNCi19DQotQ1BERl9UeXBlM0NoYXI6On5DUERGX1R5cGUzQ2hhcigpDQotew0KLSAgICBpZiAobV9wRm9ybSkgew0KLSAgICAgICAgZGVsZXRlIG1fcEZvcm07DQotICAgIH0NCi0gICAgaWYgKG1fcEJpdG1hcCkgew0KLSAgICAgICAgZGVsZXRlIG1fcEJpdG1hcDsNCi0gICAgfQ0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX21vZHVsZS5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2VvYmouaCIKKyNpbmNsdWRlICJmb250X2ludC5oIgorI2luY2x1ZGUgIi4uL2ZwZGZfcGFnZS9wYWdlaW50LmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2ZyZWV0eXBlLmgiCitGWF9CT09MIEZUX1VzZVRUQ2hhcm1hcChGWEZUX0ZhY2UgZmFjZSwgaW50IHBsYXRmb3JtX2lkLCBpbnQgZW5jb2RpbmdfaWQpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGWEZUX0dldF9GYWNlX0NoYXJtYXBDb3VudChmYWNlKTsgaSArKykgeworICAgICAgICBpZiAoRlhGVF9HZXRfQ2hhcm1hcF9QbGF0Zm9ybUlEKEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcHMoZmFjZSlbaV0pID09IHBsYXRmb3JtX2lkICYmCisgICAgICAgICAgICAgICAgRlhGVF9HZXRfQ2hhcm1hcF9FbmNvZGluZ0lEKEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcHMoZmFjZSlbaV0pID09IGVuY29kaW5nX2lkKSB7CisgICAgICAgICAgICBGWEZUX1NldF9DaGFybWFwKGZhY2UsIEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcHMoZmFjZSlbaV0pOworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorZXh0ZXJuIGNvbnN0IEZYX1dPUkQqIFBERl9Vbmljb2Rlc0ZvclByZWRlZmluZWRDaGFyU2V0KGludCk7CitDUERGX0ZvbnRHbG9iYWxzOjpDUERGX0ZvbnRHbG9iYWxzKCkKK3sKKyAgICBGWFNZU19tZW1zZXQzMihtX0VtYmVkZGVkQ2hhcnNldHMsIDAsIHNpemVvZiBtX0VtYmVkZGVkQ2hhcnNldHMpOworICAgIEZYU1lTX21lbXNldDMyKG1fRW1iZWRkZWRUb1VuaWNvZGVzLCAwLCBzaXplb2YgbV9FbWJlZGRlZFRvVW5pY29kZXMpOworICAgIG1fcENvbnRyYXN0UmFtcHMgPSBOVUxMOworfQorQ1BERl9Gb250R2xvYmFsczo6fkNQREZfRm9udEdsb2JhbHMoKQoreworICAgIENsZWFyQWxsKCk7CisgICAgaWYgKG1fcENvbnRyYXN0UmFtcHMpIHsKKyAgICAgICAgRlhfRnJlZShtX3BDb250cmFzdFJhbXBzKTsKKyAgICB9Cit9CitjbGFzcyBDRlhfU3RvY2tGb250QXJyYXkgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENGWF9TdG9ja0ZvbnRBcnJheSgpCisgICAgeworICAgICAgICBGWFNZU19tZW1zZXQzMihtX3BTdG9ja0ZvbnRzLCAwLCBzaXplb2YoQ1BERl9Gb250KikgKiAxNCk7CisgICAgfQorICAgIENQREZfRm9udCoJCQltX3BTdG9ja0ZvbnRzWzE0XTsKK307CitDUERGX0ZvbnQqIENQREZfRm9udEdsb2JhbHM6OkZpbmQodm9pZCoga2V5LCBpbnQgaW5kZXgpCit7CisgICAgdm9pZCogdmFsdWUgPSBOVUxMOworICAgIGlmICghbV9wU3RvY2tNYXAuTG9va3VwKGtleSwgdmFsdWUpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gKChDRlhfU3RvY2tGb250QXJyYXkqKXZhbHVlKS0+bV9wU3RvY2tGb250c1tpbmRleF07Cit9Cit2b2lkIENQREZfRm9udEdsb2JhbHM6OlNldCh2b2lkKiBrZXksIGludCBpbmRleCwgQ1BERl9Gb250KiBwRm9udCkKK3sKKyAgICB2b2lkKiB2YWx1ZSA9IE5VTEw7CisgICAgaWYgKG1fcFN0b2NrTWFwLkxvb2t1cChrZXksIHZhbHVlKSkgeworICAgICAgICAoKENGWF9TdG9ja0ZvbnRBcnJheSopdmFsdWUpLT5tX3BTdG9ja0ZvbnRzW2luZGV4XSA9IHBGb250OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENGWF9TdG9ja0ZvbnRBcnJheSogcEZvbnRzID0gRlhfTkVXIENGWF9TdG9ja0ZvbnRBcnJheSgpOworICAgIGlmIChwRm9udHMpIHsKKyAgICAgICAgcEZvbnRzLT5tX3BTdG9ja0ZvbnRzW2luZGV4XSA9IHBGb250OworICAgIH0KKyAgICBtX3BTdG9ja01hcC5TZXRBdChrZXksIHBGb250cyk7Cit9Cit2b2lkIENQREZfRm9udEdsb2JhbHM6OkNsZWFyKHZvaWQqIGtleSkKK3sKKyAgICB2b2lkKiB2YWx1ZSA9IE5VTEw7CisgICAgaWYgKCFtX3BTdG9ja01hcC5Mb29rdXAoa2V5LCB2YWx1ZSkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgQ0ZYX1N0b2NrRm9udEFycmF5KiBwU3RvY2tGb250cyA9IChDRlhfU3RvY2tGb250QXJyYXkqKXZhbHVlOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE0OyBpICsrKSB7CisgICAgICAgICAgICBpZiAocFN0b2NrRm9udHMtPm1fcFN0b2NrRm9udHNbaV0pIHsKKyAgICAgICAgICAgICAgICBwU3RvY2tGb250cy0+bV9wU3RvY2tGb250c1tpXS0+R2V0Rm9udERpY3QoKS0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIGRlbGV0ZSBwU3RvY2tGb250cy0+bV9wU3RvY2tGb250c1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZWxldGUgcFN0b2NrRm9udHM7CisgICAgfQorICAgIG1fcFN0b2NrTWFwLlJlbW92ZUtleShrZXkpOworfQordm9pZCBDUERGX0ZvbnRHbG9iYWxzOjpDbGVhckFsbCgpCit7CisgICAgRlhfUE9TSVRJT04gcG9zID0gbV9wU3RvY2tNYXAuR2V0U3RhcnRQb3NpdGlvbigpOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgdm9pZCAqa2V5ID0gTlVMTDsKKyAgICAgICAgdm9pZCogdmFsdWUgPSBOVUxMOworICAgICAgICBtX3BTdG9ja01hcC5HZXROZXh0QXNzb2MocG9zLCBrZXksIHZhbHVlKTsKKyAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICBDRlhfU3RvY2tGb250QXJyYXkqIHBTdG9ja0ZvbnRzID0gKENGWF9TdG9ja0ZvbnRBcnJheSopdmFsdWU7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE0OyBpICsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHBTdG9ja0ZvbnRzLT5tX3BTdG9ja0ZvbnRzW2ldKSB7CisgICAgICAgICAgICAgICAgICAgIHBTdG9ja0ZvbnRzLT5tX3BTdG9ja0ZvbnRzW2ldLT5HZXRGb250RGljdCgpLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwU3RvY2tGb250cy0+bV9wU3RvY2tGb250c1tpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWxldGUgcFN0b2NrRm9udHM7CisgICAgICAgIH0KKyAgICAgICAgbV9wU3RvY2tNYXAuUmVtb3ZlS2V5KGtleSk7CisgICAgfQorfQorQ1BERl9Gb250OjpDUERGX0ZvbnQoKQoreworICAgIG1fRm9udFR5cGUgPSAwOworICAgIG1fRm9udEJCb3gubGVmdCA9IG1fRm9udEJCb3gucmlnaHQgPSBtX0ZvbnRCQm94LnRvcCA9IG1fRm9udEJCb3guYm90dG9tID0gMDsKKyAgICBtX1N0ZW1WID0gbV9Bc2NlbnQgPSBtX0Rlc2NlbnQgPSBtX0l0YWxpY0FuZ2xlID0gMDsKKyAgICBtX3BGb250RmlsZSA9IE5VTEw7CisgICAgbV9GbGFncyA9IDA7CisgICAgbV9wVG9Vbmljb2RlTWFwID0gTlVMTDsKKyAgICBtX2JUb1VuaWNvZGVMb2FkZWQgPSBGQUxTRTsKKyAgICBtX3BDaGFyTWFwID0gTlVMTDsKK30KK0ZYX0JPT0wgQ1BERl9Gb250OjpJbml0aWFsaXplKCkKK3sKKyAgICBtX3BDaGFyTWFwID0gRlhfTkVXIENQREZfRm9udENoYXJNYXAodGhpcyk7CisgICAgcmV0dXJuIFRSVUU7Cit9CitDUERGX0ZvbnQ6On5DUERGX0ZvbnQoKQoreworICAgIGlmIChtX3BDaGFyTWFwKSB7CisgICAgICAgIEZYX0ZyZWUobV9wQ2hhck1hcCk7CisgICAgICAgIG1fcENoYXJNYXAgPSBOVUxMOworICAgIH0KKyAgICBpZiAobV9wVG9Vbmljb2RlTWFwKSB7CisgICAgICAgIGRlbGV0ZSBtX3BUb1VuaWNvZGVNYXA7CisgICAgICAgIG1fcFRvVW5pY29kZU1hcCA9IE5VTEw7CisgICAgfQorICAgIGlmIChtX3BGb250RmlsZSkgeworICAgICAgICBtX3BEb2N1bWVudC0+R2V0UGFnZURhdGEoKS0+UmVsZWFzZUZvbnRGaWxlU3RyZWFtQWNjKChDUERGX1N0cmVhbSopbV9wRm9udEZpbGUtPkdldFN0cmVhbSgpKTsKKyAgICB9Cit9CitGWF9CT09MIENQREZfRm9udDo6SXNWZXJ0V3JpdGluZygpIGNvbnN0Cit7CisgICAgRlhfQk9PTCBiVmVydFdyaXRpbmcgPSBGQUxTRTsKKyAgICBDUERGX0NJREZvbnQqIHBDSURGb250ID0gR2V0Q0lERm9udCgpOworICAgIGlmIChwQ0lERm9udCkgeworICAgICAgICBiVmVydFdyaXRpbmcgPSBwQ0lERm9udC0+SXNWZXJ0V3JpdGluZygpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJWZXJ0V3JpdGluZyA9IG1fRm9udC5Jc1ZlcnRpY2FsKCk7CisgICAgfQorICAgIHJldHVybiBiVmVydFdyaXRpbmc7Cit9CitDRlhfQnl0ZVN0cmluZyBDUERGX0ZvbnQ6OkdldEZvbnRUeXBlTmFtZSgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX0ZvbnRUeXBlKSB7CisgICAgICAgIGNhc2UgUERGRk9OVF9UWVBFMToKKyAgICAgICAgICAgIHJldHVybiBGWF9CU1RSQygiVHlwZTEiKTsKKyAgICAgICAgY2FzZSBQREZGT05UX1RSVUVUWVBFOgorICAgICAgICAgICAgcmV0dXJuIEZYX0JTVFJDKCJUcnVlVHlwZSIpOworICAgICAgICBjYXNlIFBERkZPTlRfVFlQRTM6CisgICAgICAgICAgICByZXR1cm4gRlhfQlNUUkMoIlR5cGUzIik7CisgICAgICAgIGNhc2UgUERGRk9OVF9DSURGT05UOgorICAgICAgICAgICAgcmV0dXJuIEZYX0JTVFJDKCJUeXBlMCIpOworICAgIH0KKyAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsKK30KK3ZvaWQgQ1BERl9Gb250OjpBcHBlbmRDaGFyKENGWF9CeXRlU3RyaW5nJiBzdHIsIEZYX0RXT1JEIGNoYXJjb2RlKSBjb25zdAoreworICAgIGNoYXIgYnVmWzRdOworICAgIGludCBsZW4gPSBBcHBlbmRDaGFyKGJ1ZiwgY2hhcmNvZGUpOworICAgIGlmIChsZW4gPT0gMSkgeworICAgICAgICBzdHIgKz0gYnVmWzBdOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0ciArPSBDRlhfQnl0ZVN0cmluZyhidWYsIGxlbik7CisgICAgfQorfQorQ0ZYX1dpZGVTdHJpbmcgQ1BERl9Gb250OjpVbmljb2RlRnJvbUNoYXJDb2RlKEZYX0RXT1JEIGNoYXJjb2RlKSBjb25zdAoreworICAgIGlmICghbV9iVG9Vbmljb2RlTG9hZGVkKSB7CisgICAgICAgICgoQ1BERl9Gb250Kil0aGlzKS0+TG9hZFVuaWNvZGVNYXAoKTsKKyAgICB9CisgICAgaWYgKG1fcFRvVW5pY29kZU1hcCkgeworICAgICAgICBDRlhfV2lkZVN0cmluZyB3c1JldCA9IG1fcFRvVW5pY29kZU1hcC0+TG9va3VwKGNoYXJjb2RlKTsKKyAgICAgICAgaWYgKCF3c1JldC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiB3c1JldDsKKyAgICAgICAgfQorICAgIH0KKyAgICBGWF9XQ0hBUiB1bmljb2RlID0gX1VuaWNvZGVGcm9tQ2hhckNvZGUoY2hhcmNvZGUpOworICAgIGlmICh1bmljb2RlID09IDApIHsKKyAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7CisgICAgfQorICAgIHJldHVybiB1bmljb2RlOworfQorRlhfRFdPUkQgQ1BERl9Gb250OjpDaGFyQ29kZUZyb21Vbmljb2RlKEZYX1dDSEFSIHVuaWNvZGUpIGNvbnN0Cit7CisgICAgaWYgKCFtX2JUb1VuaWNvZGVMb2FkZWQpIHsKKyAgICAgICAgKChDUERGX0ZvbnQqKXRoaXMpLT5Mb2FkVW5pY29kZU1hcCgpOworICAgIH0KKyAgICBpZiAobV9wVG9Vbmljb2RlTWFwKSB7CisgICAgICAgIEZYX0RXT1JEIGNoYXJjb2RlID0gbV9wVG9Vbmljb2RlTWFwLT5SZXZlcnNlTG9va3VwKHVuaWNvZGUpOworICAgICAgICBpZiAoY2hhcmNvZGUpIHsKKyAgICAgICAgICAgIHJldHVybiBjaGFyY29kZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gX0NoYXJDb2RlRnJvbVVuaWNvZGUodW5pY29kZSk7Cit9CitDRlhfV2lkZVN0cmluZyBDUERGX0ZvbnQ6OkRlY29kZVN0cmluZyhjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyKSBjb25zdAoreworICAgIENGWF9XaWRlU3RyaW5nIHJlc3VsdDsKKyAgICBpbnQgc3JjX2xlbiA9IHN0ci5HZXRMZW5ndGgoKTsKKyAgICByZXN1bHQuUmVzZXJ2ZShzcmNfbGVuKTsKKyAgICBGWF9MUENTVFIgc3JjX2J1ZiA9IHN0cjsKKyAgICBpbnQgc3JjX3BvcyA9IDA7CisgICAgd2hpbGUgKHNyY19wb3MgPCBzcmNfbGVuKSB7CisgICAgICAgIEZYX0RXT1JEIGNoYXJjb2RlID0gR2V0TmV4dENoYXIoc3JjX2J1Ziwgc3JjX3Bvcyk7CisgICAgICAgIENGWF9XaWRlU3RyaW5nIHVuaWNvZGUgPSBVbmljb2RlRnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsKKyAgICAgICAgaWYgKCF1bmljb2RlLklzRW1wdHkoKSkgeworICAgICAgICAgICAgcmVzdWx0ICs9IHVuaWNvZGU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXN1bHQgKz0gKEZYX1dDSEFSKWNoYXJjb2RlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CitDRlhfQnl0ZVN0cmluZyBDUERGX0ZvbnQ6OkVuY29kZVN0cmluZyhjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyKSBjb25zdAoreworICAgIENGWF9CeXRlU3RyaW5nIHJlc3VsdDsKKyAgICBpbnQgc3JjX2xlbiA9IHN0ci5HZXRMZW5ndGgoKTsKKyAgICBGWF9MUFNUUiBkZXN0X2J1ZiA9IHJlc3VsdC5HZXRCdWZmZXIoc3JjX2xlbiAqIDIpOworICAgIEZYX0xQQ1dTVFIgc3JjX2J1ZiA9IHN0cjsKKyAgICBpbnQgZGVzdF9wb3MgPSAwOworICAgIGZvciAoaW50IHNyY19wb3MgPSAwOyBzcmNfcG9zIDwgc3JjX2xlbjsgc3JjX3BvcyArKykgeworICAgICAgICBGWF9EV09SRCBjaGFyY29kZSA9IENoYXJDb2RlRnJvbVVuaWNvZGUoc3JjX2J1ZltzcmNfcG9zXSk7CisgICAgICAgIGRlc3RfcG9zICs9IEFwcGVuZENoYXIoZGVzdF9idWYgKyBkZXN0X3BvcywgY2hhcmNvZGUpOworICAgIH0KKyAgICByZXN1bHQuUmVsZWFzZUJ1ZmZlcihkZXN0X3Bvcyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KK3ZvaWQgQ1BERl9Gb250OjpMb2FkRm9udERlc2NyaXB0b3IoQ1BERl9EaWN0aW9uYXJ5KiBwRm9udERlc2MpCit7CisgICAgbV9GbGFncyA9IHBGb250RGVzYy0+R2V0SW50ZWdlcihGWF9CU1RSQygiRmxhZ3MiKSwgUERGRk9OVF9OT05TWU1CT0xJQyk7CisgICAgaW50IEl0YWxpY0FuZ2xlID0gMDsKKyAgICBGWF9CT09MIGJFeGlzdEl0YWxpY0FuZ2xlID0gRkFMU0U7CisgICAgaWYgKHBGb250RGVzYy0+S2V5RXhpc3QoRlhfQlNUUkMoIkl0YWxpY0FuZ2xlIikpKSB7CisgICAgICAgIEl0YWxpY0FuZ2xlID0gcEZvbnREZXNjLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJJdGFsaWNBbmdsZSIpKTsKKyAgICAgICAgYkV4aXN0SXRhbGljQW5nbGUgPSBUUlVFOworICAgIH0KKyAgICBpZiAoSXRhbGljQW5nbGUgPCAwKSB7CisgICAgICAgIG1fRmxhZ3MgfD0gUERGRk9OVF9JVEFMSUM7CisgICAgICAgIG1fSXRhbGljQW5nbGUgPSBJdGFsaWNBbmdsZTsKKyAgICB9CisgICAgRlhfQk9PTCBiRXhpc3RTdGVtViA9IEZBTFNFOworICAgIGlmIChwRm9udERlc2MtPktleUV4aXN0KEZYX0JTVFJDKCJTdGVtViIpKSkgeworICAgICAgICBtX1N0ZW1WID0gcEZvbnREZXNjLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJTdGVtViIpKTsKKyAgICAgICAgYkV4aXN0U3RlbVYgPSBUUlVFOworICAgIH0KKyAgICBGWF9CT09MIGJFeGlzdEFzY2VudCA9IEZBTFNFOworICAgIGlmIChwRm9udERlc2MtPktleUV4aXN0KEZYX0JTVFJDKCJBc2NlbnQiKSkpIHsKKyAgICAgICAgbV9Bc2NlbnQgPSBwRm9udERlc2MtPkdldEludGVnZXIoRlhfQlNUUkMoIkFzY2VudCIpKTsKKyAgICAgICAgYkV4aXN0QXNjZW50ID0gVFJVRTsKKyAgICB9CisgICAgRlhfQk9PTCBiRXhpc3REZXNjZW50ID0gRkFMU0U7CisgICAgaWYgKHBGb250RGVzYy0+S2V5RXhpc3QoRlhfQlNUUkMoIkRlc2NlbnQiKSkpIHsKKyAgICAgICAgbV9EZXNjZW50ID0gcEZvbnREZXNjLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJEZXNjZW50IikpOworICAgICAgICBiRXhpc3REZXNjZW50ID0gVFJVRTsKKyAgICB9CisgICAgRlhfQk9PTCBiRXhpc3RDYXBIZWlnaHQgPSBGQUxTRTsKKyAgICBpZiAocEZvbnREZXNjLT5LZXlFeGlzdChGWF9CU1RSQygiQ2FwSGVpZ2h0IikpKSB7CisgICAgICAgIGJFeGlzdENhcEhlaWdodCA9IFRSVUU7CisgICAgfQorICAgIGlmIChiRXhpc3RJdGFsaWNBbmdsZSAmJiBiRXhpc3RBc2NlbnQgJiYgYkV4aXN0Q2FwSGVpZ2h0ICYmIGJFeGlzdERlc2NlbnQgJiYgYkV4aXN0U3RlbVYpIHsKKyAgICAgICAgbV9GbGFncyB8PSBQREZGT05UX1VTRUVYVEVSTkFUVFI7CisgICAgfQorICAgIGlmIChtX0Rlc2NlbnQgPiAxMCkgeworICAgICAgICBtX0Rlc2NlbnQgPSAtbV9EZXNjZW50OworICAgIH0KKyAgICBDUERGX0FycmF5KiBwQkJveCA9IHBGb250RGVzYy0+R2V0QXJyYXkoRlhfQlNUUkMoIkZvbnRCQm94IikpOworICAgIGlmIChwQkJveCkgeworICAgICAgICBtX0ZvbnRCQm94LmxlZnQgPSBwQkJveC0+R2V0SW50ZWdlcigwKTsKKyAgICAgICAgbV9Gb250QkJveC5ib3R0b20gPSBwQkJveC0+R2V0SW50ZWdlcigxKTsKKyAgICAgICAgbV9Gb250QkJveC5yaWdodCA9IHBCQm94LT5HZXRJbnRlZ2VyKDIpOworICAgICAgICBtX0ZvbnRCQm94LnRvcCA9IHBCQm94LT5HZXRJbnRlZ2VyKDMpOworICAgIH0KKyAgICBDUERGX1N0cmVhbSogcEZvbnRGaWxlID0gcEZvbnREZXNjLT5HZXRTdHJlYW0oRlhfQlNUUkMoIkZvbnRGaWxlIikpOworICAgIGlmIChwRm9udEZpbGUgPT0gTlVMTCkgeworICAgICAgICBwRm9udEZpbGUgPSBwRm9udERlc2MtPkdldFN0cmVhbShGWF9CU1RSQygiRm9udEZpbGUyIikpOworICAgIH0KKyAgICBpZiAocEZvbnRGaWxlID09IE5VTEwpIHsKKyAgICAgICAgcEZvbnRGaWxlID0gcEZvbnREZXNjLT5HZXRTdHJlYW0oRlhfQlNUUkMoIkZvbnRGaWxlMyIpKTsKKyAgICB9CisgICAgaWYgKHBGb250RmlsZSkgeworICAgICAgICBtX3BGb250RmlsZSA9IG1fcERvY3VtZW50LT5Mb2FkRm9udEZpbGUocEZvbnRGaWxlKTsKKyAgICAgICAgaWYgKG1fcEZvbnRGaWxlID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBGWF9MUENCWVRFIHBGb250RGF0YSA9IG1fcEZvbnRGaWxlLT5HZXREYXRhKCk7CisgICAgICAgIEZYX0RXT1JEIGR3Rm9udFNpemUgPSBtX3BGb250RmlsZS0+R2V0U2l6ZSgpOworICAgICAgICBtX0ZvbnQuTG9hZEVtYmVkZGVkKHBGb250RGF0YSwgZHdGb250U2l6ZSk7CisgICAgICAgIGlmIChtX0ZvbnQubV9GYWNlID09IE5VTEwpIHsKKyAgICAgICAgICAgIG1fcEZvbnRGaWxlID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KK30KK3Nob3J0IFRUMlBERihpbnQgbSwgRlhGVF9GYWNlIGZhY2UpCit7CisgICAgaW50IHVwbSA9IEZYRlRfR2V0X0ZhY2VfVW5pdHNQZXJFTShmYWNlKTsKKyAgICBpZiAodXBtID09IDApIHsKKyAgICAgICAgcmV0dXJuIChzaG9ydCltOworICAgIH0KKyAgICByZXR1cm4gKG0gKiAxMDAwICsgdXBtIC8gMikgLyB1cG07Cit9Cit2b2lkIENQREZfRm9udDo6Q2hlY2tGb250TWV0cmljcygpCit7CisgICAgaWYgKG1fRm9udEJCb3gudG9wID09IDAgJiYgbV9Gb250QkJveC5ib3R0b20gPT0gMCAmJiBtX0ZvbnRCQm94LmxlZnQgPT0gMCAmJiBtX0ZvbnRCQm94LnJpZ2h0ID09IDApIHsKKyAgICAgICAgaWYgKG1fRm9udC5tX0ZhY2UpIHsKKyAgICAgICAgICAgIG1fRm9udEJCb3gubGVmdCA9IFRUMlBERihGWEZUX0dldF9GYWNlX3hNaW4obV9Gb250Lm1fRmFjZSksIG1fRm9udC5tX0ZhY2UpOworICAgICAgICAgICAgbV9Gb250QkJveC5ib3R0b20gPSBUVDJQREYoRlhGVF9HZXRfRmFjZV95TWluKG1fRm9udC5tX0ZhY2UpLCBtX0ZvbnQubV9GYWNlKTsKKyAgICAgICAgICAgIG1fRm9udEJCb3gucmlnaHQgPSBUVDJQREYoRlhGVF9HZXRfRmFjZV94TWF4KG1fRm9udC5tX0ZhY2UpLCBtX0ZvbnQubV9GYWNlKTsKKyAgICAgICAgICAgIG1fRm9udEJCb3gudG9wID0gVFQyUERGKEZYRlRfR2V0X0ZhY2VfeU1heChtX0ZvbnQubV9GYWNlKSwgbV9Gb250Lm1fRmFjZSk7CisgICAgICAgICAgICBtX0FzY2VudCA9IFRUMlBERihGWEZUX0dldF9GYWNlX0FzY2VuZGVyKG1fRm9udC5tX0ZhY2UpLCBtX0ZvbnQubV9GYWNlKTsKKyAgICAgICAgICAgIG1fRGVzY2VudCA9IFRUMlBERihGWEZUX0dldF9GYWNlX0Rlc2NlbmRlcihtX0ZvbnQubV9GYWNlKSwgbV9Gb250Lm1fRmFjZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBGWF9CT09MIGJGaXJzdCA9IFRSVUU7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSArKykgeworICAgICAgICAgICAgICAgIEZYX1JFQ1QgcmVjdDsKKyAgICAgICAgICAgICAgICBHZXRDaGFyQkJveChpLCByZWN0KTsKKyAgICAgICAgICAgICAgICBpZiAocmVjdC5sZWZ0ID09IHJlY3QucmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChiRmlyc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9Gb250QkJveCA9IHJlY3Q7CisgICAgICAgICAgICAgICAgICAgIGJGaXJzdCA9IEZBTFNFOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZvbnRCQm94LnRvcCA8IHJlY3QudG9wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX0ZvbnRCQm94LnRvcCA9IHJlY3QudG9wOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZvbnRCQm94LnJpZ2h0IDwgcmVjdC5yaWdodCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9Gb250QkJveC5yaWdodCA9IHJlY3QucmlnaHQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fRm9udEJCb3gubGVmdCA+IHJlY3QubGVmdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9Gb250QkJveC5sZWZ0ID0gcmVjdC5sZWZ0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZvbnRCQm94LmJvdHRvbSA+IHJlY3QuYm90dG9tKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX0ZvbnRCQm94LmJvdHRvbSA9IHJlY3QuYm90dG9tOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChtX0FzY2VudCA9PSAwICYmIG1fRGVzY2VudCA9PSAwKSB7CisgICAgICAgIEZYX1JFQ1QgcmVjdDsKKyAgICAgICAgR2V0Q2hhckJCb3goJ0EnLCByZWN0KTsKKyAgICAgICAgaWYgKHJlY3QuYm90dG9tID09IHJlY3QudG9wKSB7CisgICAgICAgICAgICBtX0FzY2VudCA9IG1fRm9udEJCb3gudG9wOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9Bc2NlbnQgPSByZWN0LnRvcDsKKyAgICAgICAgfQorICAgICAgICBHZXRDaGFyQkJveCgnZycsIHJlY3QpOworICAgICAgICBpZiAocmVjdC5ib3R0b20gPT0gcmVjdC50b3ApIHsKKyAgICAgICAgICAgIG1fRGVzY2VudCA9IG1fRm9udEJCb3guYm90dG9tOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9EZXNjZW50ID0gcmVjdC5ib3R0b207CisgICAgICAgIH0KKyAgICB9Cit9Cit2b2lkIENQREZfRm9udDo6TG9hZFVuaWNvZGVNYXAoKQoreworICAgIG1fYlRvVW5pY29kZUxvYWRlZCA9IFRSVUU7CisgICAgQ1BERl9TdHJlYW0qIHBTdHJlYW0gPSBtX3BGb250RGljdC0+R2V0U3RyZWFtKEZYX0JTVFJDKCJUb1VuaWNvZGUiKSk7CisgICAgaWYgKHBTdHJlYW0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcFRvVW5pY29kZU1hcCA9IEZYX05FVyBDUERGX1RvVW5pY29kZU1hcDsKKyAgICBtX3BUb1VuaWNvZGVNYXAtPkxvYWQocFN0cmVhbSk7Cit9CitpbnQgQ1BERl9Gb250OjpHZXRTdHJpbmdXaWR0aChGWF9MUENTVFIgcFN0cmluZywgaW50IHNpemUpCit7CisgICAgaW50IG9mZnNldCA9IDA7CisgICAgaW50IHdpZHRoID0gMDsKKyAgICB3aGlsZSAob2Zmc2V0IDwgc2l6ZSkgeworICAgICAgICBGWF9EV09SRCBjaGFyY29kZSA9IEdldE5leHRDaGFyKHBTdHJpbmcsIG9mZnNldCk7CisgICAgICAgIHdpZHRoICs9IEdldENoYXJXaWR0aEYoY2hhcmNvZGUpOworICAgIH0KKyAgICByZXR1cm4gd2lkdGg7Cit9CitpbnQgQ1BERl9Gb250OjpHZXRDaGFyVHlwZVdpZHRoKEZYX0RXT1JEIGNoYXJjb2RlKQoreworICAgIGlmIChtX0ZvbnQubV9GYWNlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGludCBnbHlwaF9pbmRleCA9IEdseXBoRnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsKKyAgICBpZiAoZ2x5cGhfaW5kZXggPT0gMHhmZmZmKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gbV9Gb250LkdldEdseXBoV2lkdGgoZ2x5cGhfaW5kZXgpOworfQoraW50IF9QREZfR2V0U3RhbmRhcmRGb250TmFtZShDRlhfQnl0ZVN0cmluZyYgbmFtZSk7CitDUERGX0ZvbnQqIENQREZfRm9udDo6R2V0U3RvY2tGb250KENQREZfRG9jdW1lbnQqIHBEb2MsIEZYX0JTVFIgbmFtZSkKK3sKKyAgICBDRlhfQnl0ZVN0cmluZyBmb250bmFtZShuYW1lKTsKKyAgICBpbnQgZm9udF9pZCA9IF9QREZfR2V0U3RhbmRhcmRGb250TmFtZShmb250bmFtZSk7CisgICAgaWYgKGZvbnRfaWQgPCAwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX0ZvbnRHbG9iYWxzKiBwRm9udEdsb2JhbHMgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldFBhZ2VNb2R1bGUoKS0+R2V0Rm9udEdsb2JhbHMoKTsKKyAgICBDUERGX0ZvbnQqIHBGb250ID0gcEZvbnRHbG9iYWxzLT5GaW5kKHBEb2MsIGZvbnRfaWQpOworICAgIGlmIChwRm9udCkgeworICAgICAgICByZXR1cm4gcEZvbnQ7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSBDUERGX0RpY3Rpb25hcnk6OkNyZWF0ZSgpOworICAgIHBEaWN0LT5TZXRBdE5hbWUoRlhfQlNUUkMoIlR5cGUiKSwgRlhfQlNUUkMoIkZvbnQiKSk7CisgICAgcERpY3QtPlNldEF0TmFtZShGWF9CU1RSQygiU3VidHlwZSIpLCBGWF9CU1RSQygiVHlwZTEiKSk7CisgICAgcERpY3QtPlNldEF0TmFtZShGWF9CU1RSQygiQmFzZUZvbnQiKSwgZm9udG5hbWUpOworICAgIHBEaWN0LT5TZXRBdE5hbWUoRlhfQlNUUkMoIkVuY29kaW5nIiksIEZYX0JTVFJDKCJXaW5BbnNpRW5jb2RpbmciKSk7CisgICAgcEZvbnQgPSBDUERGX0ZvbnQ6OkNyZWF0ZUZvbnRGKE5VTEwsIHBEaWN0KTsKKyAgICBwRm9udEdsb2JhbHMtPlNldChwRG9jLCBmb250X2lkLCBwRm9udCk7CisgICAgcmV0dXJuIHBGb250OworfQorY29uc3QgRlhfQllURSBDaGluZXNlRm9udE5hbWVzW11bNV0gPSB7CisgICAgezB4Q0IsIDB4Q0UsIDB4Q0MsIDB4RTUsIDB4MDB9LAorICAgIHsweEJGLCAweEFDLCAweENDLCAweEU1LCAweDAwfSwKKyAgICB7MHhCQSwgMHhEQSwgMHhDQywgMHhFNSwgMHgwMH0sCisgICAgezB4QjcsIDB4QzIsIDB4Q0IsIDB4Q0UsIDB4MDB9LAorICAgIHsweEQwLCAweEMyLCAweENCLCAweENFLCAweDAwfQorfTsKK0NQREZfRm9udCogQ1BERl9Gb250OjpDcmVhdGVGb250RihDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0RpY3Rpb25hcnkqIHBGb250RGljdCkKK3sKKyAgICBDRlhfQnl0ZVN0cmluZyB0eXBlID0gcEZvbnREaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIlN1YnR5cGUiKSk7CisgICAgQ1BERl9Gb250KiBwRm9udDsKKyAgICBpZiAodHlwZSA9PSBGWF9CU1RSQygiVHJ1ZVR5cGUiKSkgeworICAgICAgICB7CisjaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18gfHwgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9MSU5VWF8gfHwgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9BTkRST0lEXyB8fCBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXworICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgYmFzZWZvbnQgPSBwRm9udERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiQmFzZUZvbnQiKSk7CisgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyB0YWcgPSBiYXNlZm9udC5MZWZ0KDQpOworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBpbnQgY291bnQgPSBzaXplb2YoQ2hpbmVzZUZvbnROYW1lcykgLyBzaXplb2YoQ2hpbmVzZUZvbnROYW1lc1swXSk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICh0YWcgPT0gQ0ZYX0J5dGVTdHJpbmcoKEZYX0xQQ1NUUilDaGluZXNlRm9udE5hbWVzW2ldKSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaSA8IGNvdW50KSB7CisgICAgICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9udERlc2MgPSBwRm9udERpY3QtPkdldERpY3QoRlhfQlNUUkMoIkZvbnREZXNjcmlwdG9yIikpOworICAgICAgICAgICAgICAgIGlmIChwRm9udERlc2MgPT0gTlVMTCB8fCAhcEZvbnREZXNjLT5LZXlFeGlzdChGWF9CU1RSQygiRm9udEZpbGUyIikpKSB7CisgICAgICAgICAgICAgICAgICAgIHBGb250ID0gRlhfTkVXIENQREZfQ0lERm9udDsKKyAgICAgICAgICAgICAgICAgICAgcEZvbnQtPkluaXRpYWxpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgcEZvbnQtPm1fRm9udFR5cGUgPSBQREZGT05UX0NJREZPTlQ7CisgICAgICAgICAgICAgICAgICAgIHBGb250LT5tX3BGb250RGljdCA9IHBGb250RGljdDsKKyAgICAgICAgICAgICAgICAgICAgcEZvbnQtPm1fcERvY3VtZW50ID0gcERvYzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwRm9udC0+TG9hZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcEZvbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcEZvbnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgcEZvbnQgPSBGWF9ORVcgQ1BERl9UcnVlVHlwZUZvbnQ7CisgICAgICAgIHBGb250LT5Jbml0aWFsaXplKCk7CisgICAgICAgIHBGb250LT5tX0ZvbnRUeXBlID0gUERGRk9OVF9UUlVFVFlQRTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gRlhfQlNUUkMoIlR5cGUzIikpIHsKKyAgICAgICAgcEZvbnQgPSBGWF9ORVcgQ1BERl9UeXBlM0ZvbnQ7CisgICAgICAgIHBGb250LT5Jbml0aWFsaXplKCk7CisgICAgICAgIHBGb250LT5tX0ZvbnRUeXBlID0gUERGRk9OVF9UWVBFMzsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gRlhfQlNUUkMoIlR5cGUwIikpIHsKKyAgICAgICAgcEZvbnQgPSBGWF9ORVcgQ1BERl9DSURGb250OworICAgICAgICBwRm9udC0+SW5pdGlhbGl6ZSgpOworICAgICAgICBwRm9udC0+bV9Gb250VHlwZSA9IFBERkZPTlRfQ0lERk9OVDsKKyAgICB9IGVsc2UgeworICAgICAgICBwRm9udCA9IEZYX05FVyBDUERGX1R5cGUxRm9udDsKKyAgICAgICAgcEZvbnQtPkluaXRpYWxpemUoKTsKKyAgICAgICAgcEZvbnQtPm1fRm9udFR5cGUgPSBQREZGT05UX1RZUEUxOworICAgIH0KKyAgICBwRm9udC0+bV9wRm9udERpY3QgPSBwRm9udERpY3Q7CisgICAgcEZvbnQtPm1fcERvY3VtZW50ID0gcERvYzsKKyAgICBpZiAoIXBGb250LT5Mb2FkKCkpIHsKKyAgICAgICAgZGVsZXRlIHBGb250OworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHBGb250OworfQorRlhfQk9PTCBDUERGX0ZvbnQ6OkxvYWQoKQoreworICAgIGlmIChtX3BGb250RGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgdHlwZSA9IG1fcEZvbnREaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIlN1YnR5cGUiKSk7CisgICAgbV9CYXNlRm9udCA9IG1fcEZvbnREaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIkJhc2VGb250IikpOworICAgIGlmICh0eXBlID09IEZYX0JTVFJDKCJNTVR5cGUxIikpIHsKKyAgICAgICAgdHlwZSA9IEZYX0JTVFJDKCJUeXBlMSIpOworICAgIH0KKyAgICByZXR1cm4gX0xvYWQoKTsKK30KK3N0YXRpYyBDRlhfV2lkZVN0cmluZyBfRm9udE1hcF9HZXRXaWRlU3RyaW5nKENGWF9DaGFyTWFwKiBwTWFwLCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgYnl0ZXN0cikKK3sKKyAgICByZXR1cm4gKChDUERGX0ZvbnRDaGFyTWFwKilwTWFwKS0+bV9wRm9udC0+RGVjb2RlU3RyaW5nKGJ5dGVzdHIpOworfQorc3RhdGljIENGWF9CeXRlU3RyaW5nIF9Gb250TWFwX0dldEJ5dGVTdHJpbmcoQ0ZYX0NoYXJNYXAqIHBNYXAsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiB3aWRlc3RyKQoreworICAgIHJldHVybiAoKENQREZfRm9udENoYXJNYXAqKXBNYXApLT5tX3BGb250LT5FbmNvZGVTdHJpbmcod2lkZXN0cik7Cit9CitDUERGX0ZvbnRDaGFyTWFwOjpDUERGX0ZvbnRDaGFyTWFwKENQREZfRm9udCogcEZvbnQpCit7CisgICAgbV9HZXRCeXRlU3RyaW5nID0gX0ZvbnRNYXBfR2V0Qnl0ZVN0cmluZzsKKyAgICBtX0dldFdpZGVTdHJpbmcgPSBfRm9udE1hcF9HZXRXaWRlU3RyaW5nOworICAgIG1fcEZvbnQgPSBwRm9udDsKK30KK0NGWF9XaWRlU3RyaW5nIENQREZfVG9Vbmljb2RlTWFwOjpMb29rdXAoRlhfRFdPUkQgY2hhcmNvZGUpCit7CisgICAgRlhfRFdPUkQgdmFsdWU7CisgICAgaWYgKG1fTWFwLkxvb2t1cChjaGFyY29kZSwgdmFsdWUpKSB7CisgICAgICAgIEZYX1dDSEFSIHVuaWNvZGUgPSAoRlhfV0NIQVIpKHZhbHVlICYgMHhmZmZmKTsKKyAgICAgICAgaWYgKHVuaWNvZGUgIT0gMHhmZmZmKSB7CisgICAgICAgICAgICByZXR1cm4gdW5pY29kZTsKKyAgICAgICAgfQorICAgICAgICBGWF9MUENXU1RSIGJ1ZiA9IG1fTXVsdGlDaGFyQnVmLkdldEJ1ZmZlcigpOworICAgICAgICBGWF9EV09SRCBidWZfbGVuID0gbV9NdWx0aUNoYXJCdWYuR2V0TGVuZ3RoKCk7CisgICAgICAgIGlmIChidWYgPT0gTlVMTCB8fCBidWZfbGVuID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZygpOworICAgICAgICB9CisgICAgICAgIEZYX0RXT1JEIGluZGV4ID0gdmFsdWUgPj4gMTY7CisgICAgICAgIGlmIChpbmRleCA+PSBidWZfbGVuKSB7CisgICAgICAgICAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICBGWF9EV09SRCBsZW4gPSBidWZbaW5kZXhdOworICAgICAgICBpZiAoaW5kZXggKyBsZW4gPCBpbmRleCB8fCBpbmRleCArIGxlbiA+PSBidWZfbGVuKSB7CisgICAgICAgICAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoYnVmICsgaW5kZXggKyAxLCBsZW4pOworICAgIH0KKyAgICBpZiAobV9wQmFzZU1hcCkgeworICAgICAgICByZXR1cm4gbV9wQmFzZU1hcC0+VW5pY29kZUZyb21DSUQoKEZYX1dPUkQpY2hhcmNvZGUpOworICAgIH0KKyAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsKK30KK0ZYX0RXT1JEIENQREZfVG9Vbmljb2RlTWFwOjpSZXZlcnNlTG9va3VwKEZYX1dDSEFSIHVuaWNvZGUpCit7CisgICAgRlhfUE9TSVRJT04gcG9zID0gbV9NYXAuR2V0U3RhcnRQb3NpdGlvbigpOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgRlhfRFdPUkQga2V5LCB2YWx1ZTsKKyAgICAgICAgbV9NYXAuR2V0TmV4dEFzc29jKHBvcywga2V5LCB2YWx1ZSk7CisgICAgICAgIGlmICgoRlhfV0NIQVIpdmFsdWUgPT0gdW5pY29kZSkgeworICAgICAgICAgICAgcmV0dXJuIGtleTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KK3N0YXRpYyBGWF9EV09SRCBfU3RyaW5nVG9Db2RlKEZYX0JTVFIgc3RyKQoreworICAgIEZYX0xQQ1NUUiBidWYgPSBzdHIuR2V0Q1N0cigpOworICAgIGludCBsZW4gPSBzdHIuR2V0TGVuZ3RoKCk7CisgICAgaWYgKGxlbiA9PSAwKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICBpZiAoYnVmWzBdID09ICc8JykgeworICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IGxlbjsgaSArKykgeworICAgICAgICAgICAgaW50IGRpZ2l0OworICAgICAgICAgICAgaWYgKGJ1ZltpXSA+PSAnMCcgJiYgYnVmW2ldIDw9ICc5JykgeworICAgICAgICAgICAgICAgIGRpZ2l0ID0gYnVmW2ldIC0gJzAnOworICAgICAgICAgICAgfSBlbHNlIGlmIChidWZbaV0gPj0gJ2EnICYmIGJ1ZltpXSA8PSAnZicpIHsKKyAgICAgICAgICAgICAgICBkaWdpdCA9IGJ1ZltpXSAtICdhJyArIDEwOworICAgICAgICAgICAgfSBlbHNlIGlmIChidWZbaV0gPj0gJ0EnICYmIGJ1ZltpXSA8PSAnRicpIHsKKyAgICAgICAgICAgICAgICBkaWdpdCA9IGJ1ZltpXSAtICdBJyArIDEwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDE2ICsgZGlnaXQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSArKykgeworICAgICAgICAgICAgaWYgKGJ1ZltpXSA8ICcwJyB8fCBidWZbaV0gPiAnOScpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIDEwICsgYnVmW2ldIC0gJzAnOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CitzdGF0aWMgQ0ZYX1dpZGVTdHJpbmcgX1N0cmluZ0RhdGFBZGQoQ0ZYX1dpZGVTdHJpbmcgc3RyKQoreworICAgIENGWF9XaWRlU3RyaW5nIHJldDsKKyAgICBpbnQgbGVuID0gc3RyLkdldExlbmd0aCgpOworICAgIEZYX1dDSEFSIHZhbHVlID0gMTsKKyAgICBmb3IgKGludCBpID0gbGVuIC0gMTsgaSA+PSAwIDsgLS1pKSB7CisgICAgICAgIEZYX1dDSEFSIGNoID0gc3RyW2ldICsgdmFsdWU7CisgICAgICAgIGlmIChjaCA8IHN0cltpXSkgeworICAgICAgICAgICAgcmV0Lkluc2VydCgwLCAwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldC5JbnNlcnQoMCwgY2gpOworICAgICAgICAgICAgdmFsdWUgPSAwOworICAgICAgICB9CisgICAgfQorICAgIGlmICh2YWx1ZSkgeworICAgICAgICByZXQuSW5zZXJ0KDAsIHZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KK3N0YXRpYyBDRlhfV2lkZVN0cmluZyBfU3RyaW5nVG9XaWRlU3RyaW5nKEZYX0JTVFIgc3RyKQoreworICAgIEZYX0xQQ1NUUiBidWYgPSBzdHIuR2V0Q1N0cigpOworICAgIGludCBsZW4gPSBzdHIuR2V0TGVuZ3RoKCk7CisgICAgaWYgKGxlbiA9PSAwKSB7CisgICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZygpOworICAgIH0KKyAgICBDRlhfV2lkZVN0cmluZyByZXN1bHQ7CisgICAgaWYgKGJ1ZlswXSA9PSAnPCcpIHsKKyAgICAgICAgaW50IGJ5dGVfcG9zID0gMDsKKyAgICAgICAgRlhfV0NIQVIgY2ggPSAwOworICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IGxlbjsgaSArKykgeworICAgICAgICAgICAgaW50IGRpZ2l0OworICAgICAgICAgICAgaWYgKGJ1ZltpXSA+PSAnMCcgJiYgYnVmW2ldIDw9ICc5JykgeworICAgICAgICAgICAgICAgIGRpZ2l0ID0gYnVmW2ldIC0gJzAnOworICAgICAgICAgICAgfSBlbHNlIGlmIChidWZbaV0gPj0gJ2EnICYmIGJ1ZltpXSA8PSAnZicpIHsKKyAgICAgICAgICAgICAgICBkaWdpdCA9IGJ1ZltpXSAtICdhJyArIDEwOworICAgICAgICAgICAgfSBlbHNlIGlmIChidWZbaV0gPj0gJ0EnICYmIGJ1ZltpXSA8PSAnRicpIHsKKyAgICAgICAgICAgICAgICBkaWdpdCA9IGJ1ZltpXSAtICdBJyArIDEwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoID0gY2ggKiAxNiArIGRpZ2l0OworICAgICAgICAgICAgYnl0ZV9wb3MgKys7CisgICAgICAgICAgICBpZiAoYnl0ZV9wb3MgPT0gNCkgeworICAgICAgICAgICAgICAgIHJlc3VsdCArPSBjaDsKKyAgICAgICAgICAgICAgICBieXRlX3BvcyA9IDA7CisgICAgICAgICAgICAgICAgY2ggPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGlmIChidWZbMF0gPT0gJygnKSB7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9Cit2b2lkIENQREZfVG9Vbmljb2RlTWFwOjpMb2FkKENQREZfU3RyZWFtKiBwU3RyZWFtKQoreworICAgIGludCBDSURTZXQgPSAwOworICAgIENQREZfU3RyZWFtQWNjIHN0cmVhbTsKKyAgICBzdHJlYW0uTG9hZEFsbERhdGEocFN0cmVhbSwgRkFMU0UpOworICAgIENQREZfU2ltcGxlUGFyc2VyIHBhcnNlcihzdHJlYW0uR2V0RGF0YSgpLCBzdHJlYW0uR2V0U2l6ZSgpKTsKKyAgICBtX01hcC5Fc3RpbWF0ZVNpemUoc3RyZWFtLkdldFNpemUoKSAvIDgsIDEwMjQpOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIENGWF9CeXRlU3RyaW5nQyB3b3JkID0gcGFyc2VyLkdldFdvcmQoKTsKKyAgICAgICAgaWYgKHdvcmQuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAod29yZCA9PSBGWF9CU1RSQygiYmVnaW5iZmNoYXIiKSkgeworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICB3b3JkID0gcGFyc2VyLkdldFdvcmQoKTsKKyAgICAgICAgICAgICAgICBpZiAod29yZC5Jc0VtcHR5KCkgfHwgd29yZCA9PSBGWF9CU1RSQygiZW5kYmZjaGFyIikpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEZYX0RXT1JEIHNyY2NvZGUgPSBfU3RyaW5nVG9Db2RlKHdvcmQpOworICAgICAgICAgICAgICAgIHdvcmQgPSBwYXJzZXIuR2V0V29yZCgpOworICAgICAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIGRlc3Rjb2RlID0gX1N0cmluZ1RvV2lkZVN0cmluZyh3b3JkKTsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0gZGVzdGNvZGUuR2V0TGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgaWYgKGxlbiA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobGVuID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9NYXAuU2V0QXQoc3JjY29kZSwgZGVzdGNvZGUuR2V0QXQoMCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1fTWFwLlNldEF0KHNyY2NvZGUsIG1fTXVsdGlDaGFyQnVmLkdldExlbmd0aCgpICogMHgxMDAwMCArIDB4ZmZmZik7CisgICAgICAgICAgICAgICAgICAgIG1fTXVsdGlDaGFyQnVmLkFwcGVuZENoYXIoZGVzdGNvZGUuR2V0TGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICAgICBtX011bHRpQ2hhckJ1ZiA8PCBkZXN0Y29kZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAod29yZCA9PSBGWF9CU1RSQygiYmVnaW5iZnJhbmdlIikpIHsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgbG93LCBoaWdoOworICAgICAgICAgICAgICAgIGxvdyA9IHBhcnNlci5HZXRXb3JkKCk7CisgICAgICAgICAgICAgICAgaWYgKGxvdy5Jc0VtcHR5KCkgfHwgbG93ID09IEZYX0JTVFJDKCJlbmRiZnJhbmdlIikpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGhpZ2ggPSBwYXJzZXIuR2V0V29yZCgpOworICAgICAgICAgICAgICAgIEZYX0RXT1JEIGxvd2NvZGUgPSBfU3RyaW5nVG9Db2RlKGxvdyk7CisgICAgICAgICAgICAgICAgRlhfRFdPUkQgaGlnaGNvZGUgPSAobG93Y29kZSAmIDB4ZmZmZmZmMDApIHwgKF9TdHJpbmdUb0NvZGUoaGlnaCkgJiAweGZmKTsKKyAgICAgICAgICAgICAgICBpZiAoaGlnaGNvZGUgPT0gKEZYX0RXT1JEKSAtIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIHN0YXJ0ID0gcGFyc2VyLkdldFdvcmQoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPT0gRlhfQlNUUkMoIlsiKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKEZYX0RXT1JEIGNvZGUgPSBsb3djb2RlOyBjb2RlIDw9IGhpZ2hjb2RlOyBjb2RlICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBkZXN0ID0gcGFyc2VyLkdldFdvcmQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIGRlc3Rjb2RlID0gX1N0cmluZ1RvV2lkZVN0cmluZyhkZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4gPSBkZXN0Y29kZS5HZXRMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9NYXAuU2V0QXQoY29kZSwgZGVzdGNvZGUuR2V0QXQoMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX01hcC5TZXRBdChjb2RlLCBtX011bHRpQ2hhckJ1Zi5HZXRMZW5ndGgoKSAqIDB4MTAwMDAgKyAweGZmZmYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fTXVsdGlDaGFyQnVmLkFwcGVuZENoYXIoZGVzdGNvZGUuR2V0TGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fTXVsdGlDaGFyQnVmIDw8IGRlc3Rjb2RlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBhcnNlci5HZXRXb3JkKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgZGVzdGNvZGUgPSBfU3RyaW5nVG9XaWRlU3RyaW5nKHN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGxlbiA9IGRlc3Rjb2RlLkdldExlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCB2YWx1ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBfU3RyaW5nVG9Db2RlKHN0YXJ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgY29kZSA9IGxvd2NvZGU7IGNvZGUgPD0gaGlnaGNvZGU7IGNvZGUgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX01hcC5TZXRBdChjb2RlLCB2YWx1ZSsrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgY29kZSA9IGxvd2NvZGU7IGNvZGUgPD0gaGlnaGNvZGU7IGNvZGUgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyByZXRjb2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09IGxvd2NvZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0Y29kZSA9IGRlc3Rjb2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldGNvZGUgPSBfU3RyaW5nRGF0YUFkZChkZXN0Y29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fTWFwLlNldEF0KGNvZGUsIG1fTXVsdGlDaGFyQnVmLkdldExlbmd0aCgpICogMHgxMDAwMCArIDB4ZmZmZik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9NdWx0aUNoYXJCdWYuQXBwZW5kQ2hhcihyZXRjb2RlLkdldExlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX011bHRpQ2hhckJ1ZiA8PCByZXRjb2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rjb2RlID0gcmV0Y29kZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh3b3JkID09IEZYX0JTVFJDKCIvQWRvYmUtS29yZWExLVVDUzIiKSkgeworICAgICAgICAgICAgQ0lEU2V0ID0gQ0lEU0VUX0tPUkVBMTsKKyAgICAgICAgfSBlbHNlIGlmICh3b3JkID09IEZYX0JTVFJDKCIvQWRvYmUtSmFwYW4xLVVDUzIiKSkgeworICAgICAgICAgICAgQ0lEU2V0ID0gQ0lEU0VUX0pBUEFOMTsKKyAgICAgICAgfSBlbHNlIGlmICh3b3JkID09IEZYX0JTVFJDKCIvQWRvYmUtQ05TMS1VQ1MyIikpIHsKKyAgICAgICAgICAgIENJRFNldCA9IENJRFNFVF9DTlMxOworICAgICAgICB9IGVsc2UgaWYgKHdvcmQgPT0gRlhfQlNUUkMoIi9BZG9iZS1HQjEtVUNTMiIpKSB7CisgICAgICAgICAgICBDSURTZXQgPSBDSURTRVRfR0IxOworICAgICAgICB9CisgICAgfQorICAgIGlmIChDSURTZXQpIHsKKyAgICAgICAgbV9wQmFzZU1hcCA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UGFnZU1vZHVsZSgpLT5HZXRGb250R2xvYmFscygpLT5tX0NNYXBNYW5hZ2VyLkdldENJRDJVbmljb2RlTWFwKENJRFNldCwgRkFMU0UpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcEJhc2VNYXAgPSBOVUxMOworICAgIH0KK30KK3N0YXRpYyBGWF9CT09MIEdldFByZWRlZmluZWRFbmNvZGluZyhpbnQmIGJhc2VtYXAsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUgPT0gRlhfQlNUUkMoIldpbkFuc2lFbmNvZGluZyIpKSB7CisgICAgICAgIGJhc2VtYXAgPSBQREZGT05UX0VOQ09ESU5HX1dJTkFOU0k7CisgICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBGWF9CU1RSQygiTWFjUm9tYW5FbmNvZGluZyIpKSB7CisgICAgICAgIGJhc2VtYXAgPSBQREZGT05UX0VOQ09ESU5HX01BQ1JPTUFOOworICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gRlhfQlNUUkMoIk1hY0V4cGVydEVuY29kaW5nIikpIHsKKyAgICAgICAgYmFzZW1hcCA9IFBERkZPTlRfRU5DT0RJTkdfTUFDRVhQRVJUOworICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gRlhfQlNUUkMoIlBERkRvY0VuY29kaW5nIikpIHsKKyAgICAgICAgYmFzZW1hcCA9IFBERkZPTlRfRU5DT0RJTkdfUERGRE9DOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9Cit2b2lkIENQREZfRm9udDo6TG9hZFBERkVuY29kaW5nKENQREZfT2JqZWN0KiBwRW5jb2RpbmcsIGludCYgaUJhc2VFbmNvZGluZywgQ0ZYX0J5dGVTdHJpbmcqJiBwQ2hhck5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9CT09MIGJFbWJlZGRlZCwgRlhfQk9PTCBiVHJ1ZVR5cGUpCit7CisgICAgaWYgKHBFbmNvZGluZyA9PSBOVUxMKSB7CisgICAgICAgIGlmIChtX0Jhc2VGb250ID09IEZYX0JTVFJDKCJTeW1ib2wiKSkgeworICAgICAgICAgICAgaUJhc2VFbmNvZGluZyA9IGJUcnVlVHlwZSA/IFBERkZPTlRfRU5DT0RJTkdfTVNfU1lNQk9MIDogUERGRk9OVF9FTkNPRElOR19BRE9CRV9TWU1CT0w7CisgICAgICAgIH0gZWxzZSBpZiAoIWJFbWJlZGRlZCAmJiBpQmFzZUVuY29kaW5nID09IFBERkZPTlRfRU5DT0RJTkdfQlVJTFRJTikgeworICAgICAgICAgICAgaUJhc2VFbmNvZGluZyA9IFBERkZPTlRfRU5DT0RJTkdfV0lOQU5TSTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChwRW5jb2RpbmctPkdldFR5cGUoKSA9PSBQREZPQkpfTkFNRSkgeworICAgICAgICBpZiAoaUJhc2VFbmNvZGluZyA9PSBQREZGT05UX0VOQ09ESU5HX0FET0JFX1NZTUJPTCB8fCBpQmFzZUVuY29kaW5nID09IFBERkZPTlRfRU5DT0RJTkdfWkFQRkRJTkdCQVRTKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKChtX0ZsYWdzICYgUERGRk9OVF9TWU1CT0xJQykgJiYgbV9CYXNlRm9udCA9PSBGWF9CU1RSQygiU3ltYm9sIikpIHsKKyAgICAgICAgICAgIGlmICghYlRydWVUeXBlKSB7CisgICAgICAgICAgICAgICAgaUJhc2VFbmNvZGluZyA9IFBERkZPTlRfRU5DT0RJTkdfQURPQkVfU1lNQk9MOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIENGWF9CeXRlU3RyaW5nIGJzRW5jb2RpbmcgPSBwRW5jb2RpbmctPkdldFN0cmluZygpOworICAgICAgICBpZiAoYnNFbmNvZGluZy5Db21wYXJlKEZYX0JTVFJDKCJNYWNFeHBlcnRFbmNvZGluZyIpKSA9PSAwKSB7CisgICAgICAgICAgICBic0VuY29kaW5nID0gRlhfQlNUUkMoIldpbkFuc2lFbmNvZGluZyIpOworICAgICAgICB9CisgICAgICAgIEdldFByZWRlZmluZWRFbmNvZGluZyhpQmFzZUVuY29kaW5nLCBic0VuY29kaW5nKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocEVuY29kaW5nLT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gKENQREZfRGljdGlvbmFyeSopcEVuY29kaW5nOworICAgIGlmIChpQmFzZUVuY29kaW5nICE9IFBERkZPTlRfRU5DT0RJTkdfQURPQkVfU1lNQk9MICYmIGlCYXNlRW5jb2RpbmcgIT0gUERGRk9OVF9FTkNPRElOR19aQVBGRElOR0JBVFMpIHsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgYnNFbmNvZGluZyA9IHBEaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIkJhc2VFbmNvZGluZyIpKTsKKyAgICAgICAgaWYgKGJzRW5jb2RpbmcuQ29tcGFyZShGWF9CU1RSQygiTWFjRXhwZXJ0RW5jb2RpbmciKSkgPT0gMCAmJiBiVHJ1ZVR5cGUpIHsKKyAgICAgICAgICAgIGJzRW5jb2RpbmcgPSBGWF9CU1RSQygiV2luQW5zaUVuY29kaW5nIik7CisgICAgICAgIH0KKyAgICAgICAgR2V0UHJlZGVmaW5lZEVuY29kaW5nKGlCYXNlRW5jb2RpbmcsIGJzRW5jb2RpbmcpOworICAgIH0KKyAgICBpZiAoKCFiRW1iZWRkZWQgfHwgYlRydWVUeXBlKSAmJiBpQmFzZUVuY29kaW5nID09IFBERkZPTlRfRU5DT0RJTkdfQlVJTFRJTikgeworICAgICAgICBpQmFzZUVuY29kaW5nID0gUERGRk9OVF9FTkNPRElOR19TVEFOREFSRDsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcERpZmZzID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJEaWZmZXJlbmNlcyIpKTsKKyAgICBpZiAocERpZmZzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGWF9ORVdfVkVDVE9SKHBDaGFyTmFtZXMsIENGWF9CeXRlU3RyaW5nLCAyNTYpOworICAgIEZYX0RXT1JEIGN1cl9jb2RlID0gMDsKKyAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcERpZmZzLT5HZXRDb3VudCgpOyBpICsrKSB7CisgICAgICAgIENQREZfT2JqZWN0KiBwRWxlbWVudCA9IHBEaWZmcy0+R2V0RWxlbWVudFZhbHVlKGkpOworICAgICAgICBpZiAocEVsZW1lbnQgPT0gTlVMTCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBFbGVtZW50LT5HZXRUeXBlKCkgPT0gUERGT0JKX05BTUUpIHsKKyAgICAgICAgICAgIGlmIChjdXJfY29kZSA8IDI1NikgeworICAgICAgICAgICAgICAgIHBDaGFyTmFtZXNbY3VyX2NvZGVdID0gKChDUERGX05hbWUqKXBFbGVtZW50KS0+R2V0U3RyaW5nKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdXJfY29kZSArKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGN1cl9jb2RlID0gcEVsZW1lbnQtPkdldEludGVnZXIoKTsKKyAgICAgICAgfQorICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9Gb250OjpJc1N0YW5kYXJkRm9udCgpIGNvbnN0Cit7CisgICAgaWYgKG1fRm9udFR5cGUgIT0gUERGRk9OVF9UWVBFMSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChtX3BGb250RmlsZSAhPSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKCgoQ1BERl9UeXBlMUZvbnQqKXRoaXMpLT5HZXRCYXNlMTRGb250KCkgPCAwKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitleHRlcm4gRlhfTFBDU1RSIFBERl9DaGFyTmFtZUZyb21QcmVkZWZpbmVkQ2hhclNldChpbnQgZW5jb2RpbmcsIEZYX0JZVEUgY2hhcmNvZGUpOworQ1BERl9TaW1wbGVGb250OjpDUERGX1NpbXBsZUZvbnQoKQoreworICAgIEZYU1lTX21lbXNldDgobV9DaGFyQkJveCwgMHhmZiwgc2l6ZW9mIG1fQ2hhckJCb3gpOworICAgIEZYU1lTX21lbXNldDgobV9DaGFyV2lkdGgsIDB4ZmYsIHNpemVvZiBtX0NoYXJXaWR0aCk7CisgICAgRlhTWVNfbWVtc2V0OChtX0dseXBoSW5kZXgsIDB4ZmYsIHNpemVvZiBtX0dseXBoSW5kZXgpOworICAgIEZYU1lTX21lbXNldDgobV9FeHRHSUQsIDB4ZmYsIHNpemVvZiBtX0V4dEdJRCk7CisgICAgbV9wQ2hhck5hbWVzID0gTlVMTDsKKyAgICBtX0Jhc2VFbmNvZGluZyA9IFBERkZPTlRfRU5DT0RJTkdfQlVJTFRJTjsKK30KK0NQREZfU2ltcGxlRm9udDo6fkNQREZfU2ltcGxlRm9udCgpCit7CisgICAgaWYgKG1fcENoYXJOYW1lcykgeworICAgICAgICBGWF9ERUxFVEVfVkVDVE9SKG1fcENoYXJOYW1lcywgQ0ZYX0J5dGVTdHJpbmcsIDI1Nik7CisgICAgfQorfQoraW50IENQREZfU2ltcGxlRm9udDo6R2x5cGhGcm9tQ2hhckNvZGUoRlhfRFdPUkQgY2hhcmNvZGUsIEZYX0JPT0wgKnBWZXJ0R2x5cGgpCit7CisgICAgaWYgKHBWZXJ0R2x5cGgpIHsKKyAgICAgICAgKnBWZXJ0R2x5cGggPSBGQUxTRTsKKyAgICB9CisgICAgaWYgKGNoYXJjb2RlID4gMHhmZikgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGludCBpbmRleCA9IG1fR2x5cGhJbmRleFsoRlhfQllURSljaGFyY29kZV07CisgICAgaWYgKGluZGV4ID09IDB4ZmZmZikgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiBpbmRleDsKK30KK3ZvaWQgQ1BERl9TaW1wbGVGb250OjpMb2FkQ2hhck1ldHJpY3MoaW50IGNoYXJjb2RlKQoreworICAgIGlmIChtX0ZvbnQubV9GYWNlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoY2hhcmNvZGUgPCAwIHx8IGNoYXJjb2RlID4gMHhmZikgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludCBnbHlwaF9pbmRleCA9IG1fR2x5cGhJbmRleFtjaGFyY29kZV07CisgICAgaWYgKGdseXBoX2luZGV4ID09IDB4ZmZmZikgeworICAgICAgICBpZiAobV9wRm9udEZpbGUgPT0gTlVMTCAmJiBjaGFyY29kZSAhPSAzMikgeworICAgICAgICAgICAgTG9hZENoYXJNZXRyaWNzKDMyKTsKKyAgICAgICAgICAgIG1fQ2hhckJCb3hbY2hhcmNvZGVdID0gbV9DaGFyQkJveFszMl07CisgICAgICAgICAgICBpZiAobV9iVXNlRm9udFdpZHRoKSB7CisgICAgICAgICAgICAgICAgbV9DaGFyV2lkdGhbY2hhcmNvZGVdID0gbV9DaGFyV2lkdGhbMzJdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IGVyciA9IEZYRlRfTG9hZF9HbHlwaChtX0ZvbnQubV9GYWNlLCBnbHlwaF9pbmRleCwgRlhGVF9MT0FEX05PX1NDQUxFIHwgRlhGVF9MT0FEX0lHTk9SRV9HTE9CQUxfQURWQU5DRV9XSURUSCk7CisgICAgaWYgKGVycikgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fQ2hhckJCb3hbY2hhcmNvZGVdLkxlZnQgPSBUVDJQREYoRlhGVF9HZXRfR2x5cGhfSG9yaUJlYXJpbmdYKG1fRm9udC5tX0ZhY2UpLCBtX0ZvbnQubV9GYWNlKTsKKyAgICBtX0NoYXJCQm94W2NoYXJjb2RlXS5SaWdodCA9IFRUMlBERihGWEZUX0dldF9HbHlwaF9Ib3JpQmVhcmluZ1gobV9Gb250Lm1fRmFjZSkgKyBGWEZUX0dldF9HbHlwaF9XaWR0aChtX0ZvbnQubV9GYWNlKSwgbV9Gb250Lm1fRmFjZSk7CisgICAgbV9DaGFyQkJveFtjaGFyY29kZV0uVG9wID0gVFQyUERGKEZYRlRfR2V0X0dseXBoX0hvcmlCZWFyaW5nWShtX0ZvbnQubV9GYWNlKSwgbV9Gb250Lm1fRmFjZSk7CisgICAgbV9DaGFyQkJveFtjaGFyY29kZV0uQm90dG9tID0gVFQyUERGKEZYRlRfR2V0X0dseXBoX0hvcmlCZWFyaW5nWShtX0ZvbnQubV9GYWNlKSAtIEZYRlRfR2V0X0dseXBoX0hlaWdodChtX0ZvbnQubV9GYWNlKSwgbV9Gb250Lm1fRmFjZSk7CisgICAgaWYgKG1fYlVzZUZvbnRXaWR0aCkgeworICAgICAgICBpbnQgVFRfV2lkdGggPSBUVDJQREYoRlhGVF9HZXRfR2x5cGhfSG9yaUFkdmFuY2UobV9Gb250Lm1fRmFjZSksIG1fRm9udC5tX0ZhY2UpOworICAgICAgICBpZiAobV9DaGFyV2lkdGhbY2hhcmNvZGVdID09IDB4ZmZmZikgeworICAgICAgICAgICAgbV9DaGFyV2lkdGhbY2hhcmNvZGVdID0gVFRfV2lkdGg7CisgICAgICAgIH0gZWxzZSBpZiAoVFRfV2lkdGggJiYgIUlzRW1iZWRkZWQoKSkgeworICAgICAgICAgICAgbV9DaGFyQkJveFtjaGFyY29kZV0uUmlnaHQgPSBtX0NoYXJCQm94W2NoYXJjb2RlXS5SaWdodCAqIG1fQ2hhcldpZHRoW2NoYXJjb2RlXSAvIFRUX1dpZHRoOworICAgICAgICAgICAgbV9DaGFyQkJveFtjaGFyY29kZV0uTGVmdCA9IG1fQ2hhckJCb3hbY2hhcmNvZGVdLkxlZnQgKiBtX0NoYXJXaWR0aFtjaGFyY29kZV0gLyBUVF9XaWR0aDsKKyAgICAgICAgfQorICAgIH0KK30KK2ludCBDUERGX1NpbXBsZUZvbnQ6OkdldENoYXJXaWR0aEYoRlhfRFdPUkQgY2hhcmNvZGUsIGludCBsZXZlbCkKK3sKKyAgICBpZiAoY2hhcmNvZGUgPiAweGZmKSB7CisgICAgICAgIGNoYXJjb2RlID0gMDsKKyAgICB9CisgICAgaWYgKG1fQ2hhcldpZHRoW2NoYXJjb2RlXSA9PSAweGZmZmYpIHsKKyAgICAgICAgTG9hZENoYXJNZXRyaWNzKGNoYXJjb2RlKTsKKyAgICAgICAgaWYgKG1fQ2hhcldpZHRoW2NoYXJjb2RlXSA9PSAweGZmZmYpIHsKKyAgICAgICAgICAgIG1fQ2hhcldpZHRoW2NoYXJjb2RlXSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIChGWF9JTlQxNiltX0NoYXJXaWR0aFtjaGFyY29kZV07Cit9Cit2b2lkIENQREZfU2ltcGxlRm9udDo6R2V0Q2hhckJCb3goRlhfRFdPUkQgY2hhcmNvZGUsIEZYX1JFQ1QmIHJlY3QsIGludCBsZXZlbCkKK3sKKyAgICBpZiAoY2hhcmNvZGUgPiAweGZmKSB7CisgICAgICAgIGNoYXJjb2RlID0gMDsKKyAgICB9CisgICAgaWYgKG1fQ2hhckJCb3hbY2hhcmNvZGVdLkxlZnQgPT0gKEZYX1NIT1JUKTB4ZmZmZikgeworICAgICAgICBMb2FkQ2hhck1ldHJpY3MoY2hhcmNvZGUpOworICAgIH0KKyAgICByZWN0LmxlZnQgPSBtX0NoYXJCQm94W2NoYXJjb2RlXS5MZWZ0OworICAgIHJlY3QucmlnaHQgPSBtX0NoYXJCQm94W2NoYXJjb2RlXS5SaWdodDsKKyAgICByZWN0LmJvdHRvbSA9IG1fQ2hhckJCb3hbY2hhcmNvZGVdLkJvdHRvbTsKKyAgICByZWN0LnRvcCA9IG1fQ2hhckJCb3hbY2hhcmNvZGVdLlRvcDsKK30KK0ZYX0xQQ1NUUiBHZXRBZG9iZUNoYXJOYW1lKGludCBpQmFzZUVuY29kaW5nLCBjb25zdCBDRlhfQnl0ZVN0cmluZyogcENoYXJOYW1lcywgaW50IGNoYXJjb2RlKQoreworICAgIEFTU0VSVChjaGFyY29kZSA+PSAwICYmIGNoYXJjb2RlIDwgMjU2KTsKKyAgICBpZiAoY2hhcmNvZGUgPCAwIHx8IGNoYXJjb2RlID49IDI1NikgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRlhfTFBDU1RSIG5hbWUgPSBOVUxMOworICAgIGlmIChwQ2hhck5hbWVzKSB7CisgICAgICAgIG5hbWUgPSBwQ2hhck5hbWVzW2NoYXJjb2RlXTsKKyAgICB9CisgICAgaWYgKChuYW1lID09IE5VTEwgfHwgbmFtZVswXSA9PSAwKSAmJiBpQmFzZUVuY29kaW5nKSB7CisgICAgICAgIG5hbWUgPSBQREZfQ2hhck5hbWVGcm9tUHJlZGVmaW5lZENoYXJTZXQoaUJhc2VFbmNvZGluZywgY2hhcmNvZGUpOworICAgIH0KKyAgICBpZiAobmFtZSA9PSBOVUxMIHx8IG5hbWVbMF0gPT0gMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIG5hbWU7Cit9CitGWF9CT09MIENQREZfU2ltcGxlRm9udDo6TG9hZENvbW1vbigpCit7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9udERlc2MgPSBtX3BGb250RGljdC0+R2V0RGljdChGWF9CU1RSQygiRm9udERlc2NyaXB0b3IiKSk7CisgICAgaWYgKHBGb250RGVzYykgeworICAgICAgICBMb2FkRm9udERlc2NyaXB0b3IocEZvbnREZXNjKTsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcFdpZHRoQXJyYXkgPSBtX3BGb250RGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIldpZHRocyIpKTsKKyAgICBpbnQgd2lkdGhfc3RhcnQgPSAwLCB3aWR0aF9lbmQgPSAtMTsKKyAgICBtX2JVc2VGb250V2lkdGggPSBUUlVFOworICAgIGlmIChwV2lkdGhBcnJheSkgeworICAgICAgICBtX2JVc2VGb250V2lkdGggPSBGQUxTRTsKKyAgICAgICAgaWYgKHBGb250RGVzYyAmJiBwRm9udERlc2MtPktleUV4aXN0KEZYX0JTVFJDKCJNaXNzaW5nV2lkdGgiKSkpIHsKKyAgICAgICAgICAgIGludCBNaXNzaW5nV2lkdGggPSBwRm9udERlc2MtPkdldEludGVnZXIoRlhfQlNUUkMoIk1pc3NpbmdXaWR0aCIpKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7CisgICAgICAgICAgICAgICAgbV9DaGFyV2lkdGhbaV0gPSBNaXNzaW5nV2lkdGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2lkdGhfc3RhcnQgPSBtX3BGb250RGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiRmlyc3RDaGFyIiksIDApOworICAgICAgICB3aWR0aF9lbmQgPSBtX3BGb250RGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiTGFzdENoYXIiKSwgMCk7CisgICAgICAgIGlmICh3aWR0aF9zdGFydCA+PSAwICYmIHdpZHRoX3N0YXJ0IDw9IDI1NSkgeworICAgICAgICAgICAgaWYgKHdpZHRoX2VuZCA8PSAwIHx8IHdpZHRoX2VuZCA+PSB3aWR0aF9zdGFydCArIChpbnQpcFdpZHRoQXJyYXktPkdldENvdW50KCkpIHsKKyAgICAgICAgICAgICAgICB3aWR0aF9lbmQgPSB3aWR0aF9zdGFydCArIHBXaWR0aEFycmF5LT5HZXRDb3VudCgpIC0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh3aWR0aF9lbmQgPiAyNTUpIHsKKyAgICAgICAgICAgICAgICB3aWR0aF9lbmQgPSAyNTU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBpID0gd2lkdGhfc3RhcnQ7IGkgPD0gd2lkdGhfZW5kOyBpICsrKSB7CisgICAgICAgICAgICAgICAgbV9DaGFyV2lkdGhbaV0gPSBwV2lkdGhBcnJheS0+R2V0SW50ZWdlcihpIC0gd2lkdGhfc3RhcnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChtX3BGb250RmlsZSA9PSBOVUxMKSB7CisgICAgICAgIExvYWRTdWJzdEZvbnQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9CYXNlRm9udC5HZXRMZW5ndGgoKSA+IDggJiYgbV9CYXNlRm9udFs3XSA9PSAnKycpIHsKKyAgICAgICAgICAgIG1fQmFzZUZvbnQgPSBtX0Jhc2VGb250Lk1pZCg4KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIShtX0ZsYWdzICYgUERGRk9OVF9TWU1CT0xJQykpIHsKKyAgICAgICAgbV9CYXNlRW5jb2RpbmcgPSBQREZGT05UX0VOQ09ESU5HX1NUQU5EQVJEOworICAgIH0KKyAgICBDUERGX09iamVjdCogcEVuY29kaW5nID0gbV9wRm9udERpY3QtPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiRW5jb2RpbmciKSk7CisgICAgTG9hZFBERkVuY29kaW5nKHBFbmNvZGluZywgbV9CYXNlRW5jb2RpbmcsIG1fcENoYXJOYW1lcywgbV9wRm9udEZpbGUgIT0gTlVMTCwgbV9Gb250LklzVFRGb250KCkpOworICAgIExvYWRHbHlwaE1hcCgpOworICAgIGlmIChtX3BDaGFyTmFtZXMpIHsKKyAgICAgICAgRlhfREVMRVRFX1ZFQ1RPUihtX3BDaGFyTmFtZXMsIENGWF9CeXRlU3RyaW5nLCAyNTYpOworICAgICAgICBtX3BDaGFyTmFtZXMgPSBOVUxMOworICAgIH0KKyAgICBpZiAobV9Gb250Lm1fRmFjZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBpZiAobV9GbGFncyAmIFBERkZPTlRfQUxMQ0FQKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbG93ZXJjYXNlc1tdID0geydhJywgJ3onLCAweGUwLCAweGY2LCAweGY4LCAweGZkfTsKKyAgICAgICAgZm9yIChpbnQgcmFuZ2UgPSAwOyByYW5nZSA8IHNpemVvZiBsb3dlcmNhc2VzIC8gMjsgcmFuZ2UgKyspIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBsb3dlcmNhc2VzW3JhbmdlICogMl07IGkgPD0gbG93ZXJjYXNlc1tyYW5nZSAqIDIgKyAxXTsgaSArKykgeworICAgICAgICAgICAgICAgIGlmIChtX0dseXBoSW5kZXhbaV0gIT0gMHhmZmZmICYmIG1fcEZvbnRGaWxlICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fR2x5cGhJbmRleFtpXSA9IG1fR2x5cGhJbmRleFtpIC0gMzJdOworICAgICAgICAgICAgICAgIGlmIChtX0NoYXJXaWR0aFtpIC0gMzJdKSB7CisgICAgICAgICAgICAgICAgICAgIG1fQ2hhcldpZHRoW2ldID0gbV9DaGFyV2lkdGhbaSAtIDMyXTsKKyAgICAgICAgICAgICAgICAgICAgbV9DaGFyQkJveFtpXSA9IG1fQ2hhckJCb3hbaSAtIDMyXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQ2hlY2tGb250TWV0cmljcygpOworICAgIHJldHVybiBUUlVFOworfQordm9pZCBDUERGX1NpbXBsZUZvbnQ6OkxvYWRTdWJzdEZvbnQoKQoreworICAgIGlmICghbV9iVXNlRm9udFdpZHRoICYmICEobV9GbGFncyAmIFBERkZPTlRfRklYRURQSVRDSCkpIHsKKyAgICAgICAgaW50IHdpZHRoID0gMCwgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSArKykgeworICAgICAgICAgICAgaWYgKG1fQ2hhcldpZHRoW2ldID09IDAgfHwgbV9DaGFyV2lkdGhbaV0gPT0gMHhmZmZmKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAod2lkdGggPT0gMCkgeworICAgICAgICAgICAgICAgIHdpZHRoID0gbV9DaGFyV2lkdGhbaV07CisgICAgICAgICAgICB9IGVsc2UgaWYgKHdpZHRoICE9IG1fQ2hhcldpZHRoW2ldKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkgPT0gMjU2ICYmIHdpZHRoKSB7CisgICAgICAgICAgICBtX0ZsYWdzIHw9IFBERkZPTlRfRklYRURQSVRDSDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpbnQgd2VpZ2h0ID0gbV9TdGVtViA8IDE0MCA/IG1fU3RlbVYgKiA1IDogKG1fU3RlbVYgKiA0ICsgMTQwKTsKKyAgICBtX0ZvbnQuTG9hZFN1YnN0KG1fQmFzZUZvbnQsIG1fRm9udFR5cGUgPT0gUERGRk9OVF9UUlVFVFlQRSwgbV9GbGFncywgd2VpZ2h0LCBtX0l0YWxpY0FuZ2xlLCAwKTsKKyAgICBpZiAobV9Gb250Lm1fcFN1YnN0Rm9udC0+bV9TdWJzdEZsYWdzICYgRlhGT05UX1NVQlNUX05PTlNZTUJPTCkgeworICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9TaW1wbGVGb250OjpJc1VuaWNvZGVDb21wYXRpYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9CYXNlRW5jb2RpbmcgIT0gUERGRk9OVF9FTkNPRElOR19CVUlMVElOICYmIG1fQmFzZUVuY29kaW5nICE9IFBERkZPTlRfRU5DT0RJTkdfQURPQkVfU1lNQk9MICYmCisgICAgICAgICAgIG1fQmFzZUVuY29kaW5nICE9IFBERkZPTlRfRU5DT0RJTkdfWkFQRkRJTkdCQVRTOworfQorQ1BERl9UeXBlMUZvbnQ6OkNQREZfVHlwZTFGb250KCkKK3sKKyAgICBtX0Jhc2UxNEZvbnQgPSAtMTsKK30KK0ZYX0JPT0wgQ1BERl9UeXBlMUZvbnQ6Ol9Mb2FkKCkKK3sKKyAgICBtX0Jhc2UxNEZvbnQgPSBfUERGX0dldFN0YW5kYXJkRm9udE5hbWUobV9CYXNlRm9udCk7CisgICAgaWYgKG1fQmFzZTE0Rm9udCA+PSAwKSB7CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcEZvbnREZXNjID0gbV9wRm9udERpY3QtPkdldERpY3QoRlhfQlNUUkMoIkZvbnREZXNjcmlwdG9yIikpOworICAgICAgICBpZiAocEZvbnREZXNjICYmIHBGb250RGVzYy0+S2V5RXhpc3QoRlhfQlNUUkMoIkZsYWdzIikpKSB7CisgICAgICAgICAgICBtX0ZsYWdzID0gcEZvbnREZXNjLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJGbGFncyIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fRmxhZ3MgPSBtX0Jhc2UxNEZvbnQgPj0gMTIgPyBQREZGT05UX1NZTUJPTElDIDogUERGRk9OVF9OT05TWU1CT0xJQzsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9CYXNlMTRGb250IDwgNCkKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7CisgICAgICAgICAgICAgICAgbV9DaGFyV2lkdGhbaV0gPSA2MDA7CisgICAgICAgICAgICB9CisgICAgICAgIGlmIChtX0Jhc2UxNEZvbnQgPT0gMTIpIHsKKyAgICAgICAgICAgIG1fQmFzZUVuY29kaW5nID0gUERGRk9OVF9FTkNPRElOR19BRE9CRV9TWU1CT0w7CisgICAgICAgIH0gZWxzZSBpZiAobV9CYXNlMTRGb250ID09IDEzKSB7CisgICAgICAgICAgICBtX0Jhc2VFbmNvZGluZyA9IFBERkZPTlRfRU5DT0RJTkdfWkFQRkRJTkdCQVRTOworICAgICAgICB9IGVsc2UgaWYgKG1fRmxhZ3MgJiBQREZGT05UX05PTlNZTUJPTElDKSB7CisgICAgICAgICAgICBtX0Jhc2VFbmNvZGluZyA9IFBERkZPTlRfRU5DT0RJTkdfU1RBTkRBUkQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIExvYWRDb21tb24oKTsKK30KK3N0YXRpYyBGWF9CT09MIEZUX1VzZVR5cGUxQ2hhcm1hcChGWEZUX0ZhY2UgZmFjZSkKK3sKKyAgICBpZiAoRlhGVF9HZXRfRmFjZV9DaGFybWFwQ291bnQoZmFjZSkgPT0gMCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChGWEZUX0dldF9GYWNlX0NoYXJtYXBDb3VudChmYWNlKSA9PSAxICYmCisgICAgICAgICAgICBGWEZUX0dldF9DaGFybWFwX0VuY29kaW5nKEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcHMoZmFjZSlbMF0pID09IEZYRlRfRU5DT0RJTkdfVU5JQ09ERSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChGWEZUX0dldF9DaGFybWFwX0VuY29kaW5nKEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcHMoZmFjZSlbMF0pID09IEZYRlRfRU5DT0RJTkdfVU5JQ09ERSkgeworICAgICAgICBGWEZUX1NldF9DaGFybWFwKGZhY2UsIEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcHMoZmFjZSlbMV0pOworICAgIH0gZWxzZSB7CisgICAgICAgIEZYRlRfU2V0X0NoYXJtYXAoZmFjZSwgRlhGVF9HZXRfRmFjZV9DaGFybWFwcyhmYWNlKVswXSk7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorZXh0ZXJuIEZYX1dDSEFSIEZUX1VuaWNvZGVGcm9tQ2hhckNvZGUoaW50IGVuY29kaW5nLCBGWF9EV09SRCBjaGFyY29kZSk7CisjaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfCisjaW5jbHVkZSAiLi4vLi4vZnhnZS9hcHBsZS9hcHBsZV9pbnQuaCIKKyNlbmRpZgoraW50IENQREZfVHlwZTFGb250OjpHbHlwaEZyb21DaGFyQ29kZUV4dChGWF9EV09SRCBjaGFyY29kZSkKK3sKKyAgICBpZiAoY2hhcmNvZGUgPiAweGZmKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaW50IGluZGV4ID0gbV9FeHRHSURbKEZYX0JZVEUpY2hhcmNvZGVdOworICAgIGlmIChpbmRleCA9PSAweGZmZmYpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gaW5kZXg7Cit9CisjaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfCitzdHJ1Y3QgX0dseXBoTmFtZU1hcCB7CisgICAgRlhfTFBDU1RSIG1fcFN0ckFkb2JlOworICAgIEZYX0xQQ1NUUiBtX3BTdHJVbmljb2RlOworfTsKK3N0YXRpYyBjb25zdCBfR2x5cGhOYW1lTWFwIGdfR2x5cGhOYW1lU3Vic3RzW10gPSB7CisgICAgeyJmZiIsICJ1bmlGQjAwIn0sCisgICAgeyJmaSIsICJ1bmlGQjAxIn0sCisgICAgeyJmbCIsICJ1bmlGQjAyIn0sCisgICAgeyJmZmkiLCAidW5pRkIwMyJ9LAorICAgIHsiZmZsIiwgInVuaUZCMDQifQorfTsKK2V4dGVybiAiQyIgeworICAgIHN0YXRpYyBpbnQgY29tcGFyZVN0cmluZyhjb25zdCB2b2lkKiBrZXksIGNvbnN0IHZvaWQqIGVsZW1lbnQpCisgICAgeworICAgICAgICByZXR1cm4gRlhTWVNfc3RyaWNtcCgoRlhfTFBDU1RSKWtleSwgKChfR2x5cGhOYW1lTWFwKillbGVtZW50KS0+bV9wU3RyQWRvYmUpOworICAgIH0KK30KK3N0YXRpYyBGWF9MUENTVFIgX0dseXBoTmFtZVJlbWFwKEZYX0xQQ1NUUiBwU3RyQWRvYmUpCit7CisgICAgX0dseXBoTmFtZU1hcCogZm91bmQgPSAoX0dseXBoTmFtZU1hcCopRlhTWVNfYnNlYXJjaChwU3RyQWRvYmUsIGdfR2x5cGhOYW1lU3Vic3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIGdfR2x5cGhOYW1lU3Vic3RzIC8gc2l6ZW9mKF9HbHlwaE5hbWVNYXApLCBzaXplb2YoX0dseXBoTmFtZU1hcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlU3RyaW5nKTsKKyAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgcmV0dXJuIGZvdW5kLT5tX3BTdHJVbmljb2RlOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKyNlbmRpZgordm9pZCBDUERGX1R5cGUxRm9udDo6TG9hZEdseXBoTWFwKCkKK3sKKyAgICBpZiAobV9Gb250Lm1fRmFjZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfCisgICAgRlhfQk9PTCBiQ29yZVRleHQgPSBUUlVFOworICAgIENRdWFydHoyRCAmIHF1YXJ0ejJkID0gKChDQXBwbGVQbGF0Zm9ybSAqKSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPl9xdWFydHoyZDsKKyAgICBpZiAoIW1fRm9udC5tX3BQbGF0Zm9ybUZvbnQpIHsKKyAgICAgICAgaWYgKG1fRm9udC5HZXRQc05hbWUoKSA9PSBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKCJERkhlaVN0ZC1XNSIpKSB7CisgICAgICAgICAgICBiQ29yZVRleHQgPSBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBtX0ZvbnQubV9wUGxhdGZvcm1Gb250ID0gcXVhcnR6MmQuQ3JlYXRlRm9udChtX0ZvbnQubV9wRm9udERhdGEsIG1fRm9udC5tX2R3U2l6ZSk7CisgICAgICAgIGlmIChOVUxMID09IG1fRm9udC5tX3BQbGF0Zm9ybUZvbnQpIHsKKyAgICAgICAgICAgIGJDb3JlVGV4dCA9IEZBTFNFOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgaWYgKCFJc0VtYmVkZGVkKCkgJiYgKG1fQmFzZTE0Rm9udCA8IDEyKSAmJiBtX0ZvbnQuSXNUVEZvbnQoKSkgeworICAgICAgICBpZiAoRlRfVXNlVFRDaGFybWFwKG1fRm9udC5tX0ZhY2UsIDMsIDApKSB7CisgICAgICAgICAgICBGWF9CT09MIGJHb3RPbmUgPSBGQUxTRTsKKyAgICAgICAgICAgIGZvciAoaW50IGNoYXJjb2RlID0gMDsgY2hhcmNvZGUgPCAyNTY7IGNoYXJjb2RlICsrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgRlhfQllURSBwcmVmaXhbNF0gPSB7MHgwMCwgMHhmMCwgMHhmMSwgMHhmMn07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqICsrKSB7CisgICAgICAgICAgICAgICAgICAgIEZYX1dPUkQgdW5pY29kZSA9IHByZWZpeFtqXSAqIDI1NiArIGNoYXJjb2RlOworICAgICAgICAgICAgICAgICAgICBtX0dseXBoSW5kZXhbY2hhcmNvZGVdID0gRlhGVF9HZXRfQ2hhcl9JbmRleChtX0ZvbnQubV9GYWNlLCB1bmljb2RlKTsKKyNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8KKyAgICAgICAgICAgICAgICAgICAgRlhfQ0hBUiBuYW1lX2dseXBoWzI1Nl07CisgICAgICAgICAgICAgICAgICAgIEZYRlRfR2V0X0dseXBoX05hbWUobV9Gb250Lm1fRmFjZSwgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSwgbmFtZV9nbHlwaCwgMjU2KTsKKyAgICAgICAgICAgICAgICAgICAgbmFtZV9nbHlwaFsyNTVdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgbmFtZV9jdCA9IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmdOb0NvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbmFtZV9nbHlwaCwga0NGU3RyaW5nRW5jb2RpbmdBU0NJSSwga0NGQWxsb2NhdG9yTnVsbCk7CisgICAgICAgICAgICAgICAgICAgIG1fRXh0R0lEW2NoYXJjb2RlXSA9IENHRm9udEdldEdseXBoV2l0aEdseXBoTmFtZSgoQ0dGb250UmVmKW1fRm9udC5tX3BQbGF0Zm9ybUZvbnQsIG5hbWVfY3QpOworICAgICAgICAgICAgICAgICAgICBpZiAobmFtZV9jdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ0ZSZWxlYXNlKG5hbWVfY3QpOworICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fR2x5cGhJbmRleFtjaGFyY29kZV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJHb3RPbmUgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYkdvdE9uZSkgeworI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXworICAgICAgICAgICAgICAgIGlmICghYkNvcmVUZXh0KSB7CisgICAgICAgICAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKG1fRXh0R0lELCBtX0dseXBoSW5kZXgsIDI1Nik7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEZYRlRfU2VsZWN0X0NoYXJtYXAobV9Gb250Lm1fRmFjZSwgRlhGVF9FTkNPRElOR19VTklDT0RFKTsKKyAgICAgICAgaWYgKG1fQmFzZUVuY29kaW5nID09IDApIHsKKyAgICAgICAgICAgIG1fQmFzZUVuY29kaW5nID0gUERGRk9OVF9FTkNPRElOR19TVEFOREFSRDsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBjaGFyY29kZSA9IDA7IGNoYXJjb2RlIDwgMjU2OyBjaGFyY29kZSArKykgeworICAgICAgICAgICAgRlhfTFBDU1RSIG5hbWUgPSBHZXRBZG9iZUNoYXJOYW1lKG1fQmFzZUVuY29kaW5nLCBtX3BDaGFyTmFtZXMsIGNoYXJjb2RlKTsKKyAgICAgICAgICAgIGlmIChuYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tjaGFyY29kZV0gPSBQREZfVW5pY29kZUZyb21BZG9iZU5hbWUobmFtZSk7CisgICAgICAgICAgICBtX0dseXBoSW5kZXhbY2hhcmNvZGVdID0gRlhGVF9HZXRfQ2hhcl9JbmRleChtX0ZvbnQubV9GYWNlLCBtX0VuY29kaW5nLm1fVW5pY29kZXNbY2hhcmNvZGVdKTsKKyNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8KKyAgICAgICAgICAgIEZYX0NIQVIgbmFtZV9nbHlwaFsyNTZdOworICAgICAgICAgICAgRlhGVF9HZXRfR2x5cGhfTmFtZShtX0ZvbnQubV9GYWNlLCBtX0dseXBoSW5kZXhbY2hhcmNvZGVdLCBuYW1lX2dseXBoLCAyNTYpOworICAgICAgICAgICAgbmFtZV9nbHlwaFsyNTVdID0gMDsKKyAgICAgICAgICAgIENGU3RyaW5nUmVmIG5hbWVfY3QgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nTm9Db3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIG5hbWVfZ2x5cGgsIGtDRlN0cmluZ0VuY29kaW5nQVNDSUksIGtDRkFsbG9jYXRvck51bGwpOworICAgICAgICAgICAgbV9FeHRHSURbY2hhcmNvZGVdID0gQ0dGb250R2V0R2x5cGhXaXRoR2x5cGhOYW1lKChDR0ZvbnRSZWYpbV9Gb250Lm1fcFBsYXRmb3JtRm9udCwgbmFtZV9jdCk7CisgICAgICAgICAgICBpZiAobmFtZV9jdCkgeworICAgICAgICAgICAgICAgIENGUmVsZWFzZShuYW1lX2N0KTsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgaWYgKG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPT0gMCAmJiBGWFNZU19zdHJjbXAobmFtZSwgIi5ub3RkZWYiKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgbV9FbmNvZGluZy5tX1VuaWNvZGVzW2NoYXJjb2RlXSA9IDB4MjA7CisgICAgICAgICAgICAgICAgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9IEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgMHgyMCk7CisjaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfCisgICAgICAgICAgICAgICAgRlhfQ0hBUiBuYW1lX2dseXBoWzI1Nl07CisgICAgICAgICAgICAgICAgRlhGVF9HZXRfR2x5cGhfTmFtZShtX0ZvbnQubV9GYWNlLCBtX0dseXBoSW5kZXhbY2hhcmNvZGVdLCBuYW1lX2dseXBoLCAyNTYpOworICAgICAgICAgICAgICAgIG5hbWVfZ2x5cGhbMjU1XSA9IDA7CisgICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgbmFtZV9jdCA9IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmdOb0NvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbmFtZV9nbHlwaCwga0NGU3RyaW5nRW5jb2RpbmdBU0NJSSwga0NGQWxsb2NhdG9yTnVsbCk7CisgICAgICAgICAgICAgICAgbV9FeHRHSURbY2hhcmNvZGVdID0gQ0dGb250R2V0R2x5cGhXaXRoR2x5cGhOYW1lKChDR0ZvbnRSZWYpbV9Gb250Lm1fcFBsYXRmb3JtRm9udCwgbmFtZV9jdCk7CisgICAgICAgICAgICAgICAgaWYgKG5hbWVfY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgQ0ZSZWxlYXNlKG5hbWVfY3QpOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9CisjaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfCisgICAgICAgIGlmICghYkNvcmVUZXh0KSB7CisgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihtX0V4dEdJRCwgbV9HbHlwaEluZGV4LCAyNTYpOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGVF9Vc2VUeXBlMUNoYXJtYXAobV9Gb250Lm1fRmFjZSk7CisjaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfCisgICAgaWYgKGJDb3JlVGV4dCkgeworICAgICAgICBpZiAobV9GbGFncyAmIFBERkZPTlRfU1lNQk9MSUMpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGNoYXJjb2RlID0gMDsgY2hhcmNvZGUgPCAyNTY7IGNoYXJjb2RlICsrKSB7CisgICAgICAgICAgICAgICAgRlhfTFBDU1RSIG5hbWUgPSBHZXRBZG9iZUNoYXJOYW1lKG1fQmFzZUVuY29kaW5nLCBtX3BDaGFyTmFtZXMsIGNoYXJjb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAobmFtZSkgeworICAgICAgICAgICAgICAgICAgICBtX0VuY29kaW5nLm1fVW5pY29kZXNbY2hhcmNvZGVdID0gUERGX1VuaWNvZGVGcm9tQWRvYmVOYW1lKG5hbWUpOworICAgICAgICAgICAgICAgICAgICBtX0dseXBoSW5kZXhbY2hhcmNvZGVdID0gRlhGVF9HZXRfTmFtZV9JbmRleChtX0ZvbnQubV9GYWNlLCAoY2hhciopbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIENGU3RyaW5nUmVmIG5hbWVfY3QgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nTm9Db3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIG5hbWUsIGtDRlN0cmluZ0VuY29kaW5nQVNDSUksIGtDRkFsbG9jYXRvck51bGwpOworICAgICAgICAgICAgICAgICAgICBtX0V4dEdJRFtjaGFyY29kZV0gPSBDR0ZvbnRHZXRHbHlwaFdpdGhHbHlwaE5hbWUoKENHRm9udFJlZiltX0ZvbnQubV9wUGxhdGZvcm1Gb250LCBuYW1lX2N0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWVfY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENGUmVsZWFzZShuYW1lX2N0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPSBGWEZUX0dldF9DaGFyX0luZGV4KG1fRm9udC5tX0ZhY2UsIGNoYXJjb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgRlhfV0NIQVIgdW5pY29kZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX0dseXBoSW5kZXhbY2hhcmNvZGVdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlID0gRlRfVW5pY29kZUZyb21DaGFyQ29kZShQREZGT05UX0VOQ09ESU5HX1NUQU5EQVJELCBjaGFyY29kZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgRlhfQ0hBUiBuYW1lX2dseXBoWzI1Nl07CisgICAgICAgICAgICAgICAgICAgIEZYU1lTX21lbXNldDMyKG5hbWVfZ2x5cGgsIDAsIHNpemVvZihuYW1lX2dseXBoKSk7CisgICAgICAgICAgICAgICAgICAgIEZYRlRfR2V0X0dseXBoX05hbWUobV9Gb250Lm1fRmFjZSwgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSwgbmFtZV9nbHlwaCwgMjU2KTsKKyAgICAgICAgICAgICAgICAgICAgbmFtZV9nbHlwaFsyNTVdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGUgPT0gMCAmJiBuYW1lX2dseXBoWzBdICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGUgPSBQREZfVW5pY29kZUZyb21BZG9iZU5hbWUobmFtZV9nbHlwaCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbV9FbmNvZGluZy5tX1VuaWNvZGVzW2NoYXJjb2RlXSA9IHVuaWNvZGU7CisgICAgICAgICAgICAgICAgICAgIENGU3RyaW5nUmVmIG5hbWVfY3QgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nTm9Db3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIG5hbWVfZ2x5cGgsIGtDRlN0cmluZ0VuY29kaW5nQVNDSUksIGtDRkFsbG9jYXRvck51bGwpOworICAgICAgICAgICAgICAgICAgICBtX0V4dEdJRFtjaGFyY29kZV0gPSBDR0ZvbnRHZXRHbHlwaFdpdGhHbHlwaE5hbWUoKENHRm9udFJlZiltX0ZvbnQubV9wUGxhdGZvcm1Gb250LCBuYW1lX2N0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWVfY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENGUmVsZWFzZShuYW1lX2N0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBGWF9CT09MIGJVbmljb2RlID0gRkFMU0U7CisgICAgICAgIGlmICgwID09IEZYRlRfU2VsZWN0X0NoYXJtYXAobV9Gb250Lm1fRmFjZSwgRlhGVF9FTkNPRElOR19VTklDT0RFKSkgeworICAgICAgICAgICAgYlVuaWNvZGUgPSBUUlVFOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGNoYXJjb2RlID0gMDsgY2hhcmNvZGUgPCAyNTY7IGNoYXJjb2RlICsrKSB7CisgICAgICAgICAgICBGWF9MUENTVFIgbmFtZSA9IEdldEFkb2JlQ2hhck5hbWUobV9CYXNlRW5jb2RpbmcsIG1fcENoYXJOYW1lcywgY2hhcmNvZGUpOworICAgICAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9FbmNvZGluZy5tX1VuaWNvZGVzW2NoYXJjb2RlXSA9IFBERl9Vbmljb2RlRnJvbUFkb2JlTmFtZShuYW1lKTsKKyAgICAgICAgICAgIEZYX0xQQ1NUUiBwU3RyVW5pY29kZSA9IF9HbHlwaE5hbWVSZW1hcChuYW1lKTsKKyAgICAgICAgICAgIGlmIChwU3RyVW5pY29kZSAmJiAwID09IEZYRlRfR2V0X05hbWVfSW5kZXgobV9Gb250Lm1fRmFjZSwgKGNoYXIqKW5hbWUpKSB7CisgICAgICAgICAgICAgICAgbmFtZSA9IHBTdHJVbmljb2RlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9IEZYRlRfR2V0X05hbWVfSW5kZXgobV9Gb250Lm1fRmFjZSwgKGNoYXIqKW5hbWUpOworICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgbmFtZV9jdCA9IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmdOb0NvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbmFtZSwga0NGU3RyaW5nRW5jb2RpbmdBU0NJSSwga0NGQWxsb2NhdG9yTnVsbCk7CisgICAgICAgICAgICBtX0V4dEdJRFtjaGFyY29kZV0gPSBDR0ZvbnRHZXRHbHlwaFdpdGhHbHlwaE5hbWUoKENHRm9udFJlZiltX0ZvbnQubV9wUGxhdGZvcm1Gb250LCBuYW1lX2N0KTsKKyAgICAgICAgICAgIGlmIChuYW1lX2N0KSB7CisgICAgICAgICAgICAgICAgQ0ZSZWxlYXNlKG5hbWVfY3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChGWFNZU19zdHJjbXAobmFtZSwgIi5ub3RkZWYiKSAhPSAwICYmIEZYU1lTX3N0cmNtcChuYW1lLCAic3BhY2UiKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPSBGWEZUX0dldF9DaGFyX0luZGV4KG1fRm9udC5tX0ZhY2UsIGJVbmljb2RlID8gbV9FbmNvZGluZy5tX1VuaWNvZGVzW2NoYXJjb2RlXSA6IGNoYXJjb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgRlhfQ0hBUiBuYW1lX2dseXBoWzI1Nl07CisgICAgICAgICAgICAgICAgICAgIEZYRlRfR2V0X0dseXBoX05hbWUobV9Gb250Lm1fRmFjZSwgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSwgbmFtZV9nbHlwaCwgMjU2KTsKKyAgICAgICAgICAgICAgICAgICAgbmFtZV9nbHlwaFsyNTVdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgbmFtZV9jdCA9IENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmdOb0NvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbmFtZV9nbHlwaCwga0NGU3RyaW5nRW5jb2RpbmdBU0NJSSwga0NGQWxsb2NhdG9yTnVsbCk7CisgICAgICAgICAgICAgICAgICAgIG1fRXh0R0lEW2NoYXJjb2RlXSA9IENHRm9udEdldEdseXBoV2l0aEdseXBoTmFtZSgoQ0dGb250UmVmKW1fRm9udC5tX3BQbGF0Zm9ybUZvbnQsIG5hbWVfY3QpOworICAgICAgICAgICAgICAgICAgICBpZiAobmFtZV9jdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ0ZSZWxlYXNlKG5hbWVfY3QpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbV9FbmNvZGluZy5tX1VuaWNvZGVzW2NoYXJjb2RlXSA9IDB4MjA7CisgICAgICAgICAgICAgICAgICAgIG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPSBiVW5pY29kZSA/IEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgMHgyMCkgOiAweGZmZmY7CisgICAgICAgICAgICAgICAgICAgIEZYX0NIQVIgbmFtZV9nbHlwaFsyNTZdOworICAgICAgICAgICAgICAgICAgICBGWEZUX0dldF9HbHlwaF9OYW1lKG1fRm9udC5tX0ZhY2UsIG1fR2x5cGhJbmRleFtjaGFyY29kZV0sIG5hbWVfZ2x5cGgsIDI1Nik7CisgICAgICAgICAgICAgICAgICAgIG5hbWVfZ2x5cGhbMjU1XSA9IDA7CisgICAgICAgICAgICAgICAgICAgIENGU3RyaW5nUmVmIG5hbWVfY3QgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nTm9Db3B5KGtDRkFsbG9jYXRvckRlZmF1bHQsIG5hbWVfZ2x5cGgsIGtDRlN0cmluZ0VuY29kaW5nQVNDSUksIGtDRkFsbG9jYXRvck51bGwpOworICAgICAgICAgICAgICAgICAgICBtX0V4dEdJRFtjaGFyY29kZV0gPSBDR0ZvbnRHZXRHbHlwaFdpdGhHbHlwaE5hbWUoKENHRm9udFJlZiltX0ZvbnQubV9wUGxhdGZvcm1Gb250LCBuYW1lX2N0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWVfY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENGUmVsZWFzZShuYW1lX2N0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgaWYgKG1fRmxhZ3MgJiBQREZGT05UX1NZTUJPTElDKSB7CisgICAgICAgIGZvciAoaW50IGNoYXJjb2RlID0gMDsgY2hhcmNvZGUgPCAyNTY7IGNoYXJjb2RlICsrKSB7CisgICAgICAgICAgICBGWF9MUENTVFIgbmFtZSA9IEdldEFkb2JlQ2hhck5hbWUobV9CYXNlRW5jb2RpbmcsIG1fcENoYXJOYW1lcywgY2hhcmNvZGUpOworICAgICAgICAgICAgaWYgKG5hbWUpIHsKKyAgICAgICAgICAgICAgICBtX0VuY29kaW5nLm1fVW5pY29kZXNbY2hhcmNvZGVdID0gUERGX1VuaWNvZGVGcm9tQWRvYmVOYW1lKG5hbWUpOworICAgICAgICAgICAgICAgIG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPSBGWEZUX0dldF9OYW1lX0luZGV4KG1fRm9udC5tX0ZhY2UsIChjaGFyKiluYW1lKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9IEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgY2hhcmNvZGUpOworICAgICAgICAgICAgICAgIGlmIChtX0dseXBoSW5kZXhbY2hhcmNvZGVdKSB7CisgICAgICAgICAgICAgICAgICAgIEZYX1dDSEFSIHVuaWNvZGUgPSBGVF9Vbmljb2RlRnJvbUNoYXJDb2RlKFBERkZPTlRfRU5DT0RJTkdfU1RBTkRBUkQsIGNoYXJjb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGUgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgRlhfQ0hBUiBuYW1lX2dseXBoWzI1Nl07CisgICAgICAgICAgICAgICAgICAgICAgICBGWFNZU19tZW1zZXQzMihuYW1lX2dseXBoLCAwLCBzaXplb2YobmFtZV9nbHlwaCkpOworICAgICAgICAgICAgICAgICAgICAgICAgRlhGVF9HZXRfR2x5cGhfTmFtZShtX0ZvbnQubV9GYWNlLCBtX0dseXBoSW5kZXhbY2hhcmNvZGVdLCBuYW1lX2dseXBoLCAyNTYpOworICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9nbHlwaFsyNTVdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lX2dseXBoWzBdICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlID0gUERGX1VuaWNvZGVGcm9tQWRvYmVOYW1lKG5hbWVfZ2x5cGgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tjaGFyY29kZV0gPSB1bmljb2RlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXworICAgICAgICBpZiAoIWJDb3JlVGV4dCkgeworICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9FeHRHSUQsIG1fR2x5cGhJbmRleCwgMjU2KTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfQk9PTCBiVW5pY29kZSA9IEZBTFNFOworICAgIGlmICgwID09IEZYRlRfU2VsZWN0X0NoYXJtYXAobV9Gb250Lm1fRmFjZSwgRlhGVF9FTkNPRElOR19VTklDT0RFKSkgeworICAgICAgICBiVW5pY29kZSA9IFRSVUU7CisgICAgfQorICAgIGZvciAoaW50IGNoYXJjb2RlID0gMDsgY2hhcmNvZGUgPCAyNTY7IGNoYXJjb2RlICsrKSB7CisgICAgICAgIEZYX0xQQ1NUUiBuYW1lID0gR2V0QWRvYmVDaGFyTmFtZShtX0Jhc2VFbmNvZGluZywgbV9wQ2hhck5hbWVzLCBjaGFyY29kZSk7CisgICAgICAgIGlmIChuYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tjaGFyY29kZV0gPSBQREZfVW5pY29kZUZyb21BZG9iZU5hbWUobmFtZSk7CisgICAgICAgIG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPSBGWEZUX0dldF9OYW1lX0luZGV4KG1fRm9udC5tX0ZhY2UsIChjaGFyKiluYW1lKTsKKyAgICAgICAgaWYgKG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPT0gMCkgeworICAgICAgICAgICAgaWYgKEZYU1lTX3N0cmNtcChuYW1lLCAiLm5vdGRlZiIpICE9IDAgJiYgRlhTWVNfc3RyY21wKG5hbWUsICJzcGFjZSIpICE9IDApIHsKKyAgICAgICAgICAgICAgICBtX0dseXBoSW5kZXhbY2hhcmNvZGVdID0gRlhGVF9HZXRfQ2hhcl9JbmRleChtX0ZvbnQubV9GYWNlLCBiVW5pY29kZSA/IG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tjaGFyY29kZV0gOiBjaGFyY29kZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tjaGFyY29kZV0gPSAweDIwOworICAgICAgICAgICAgICAgIG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPSAweGZmZmY7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfCisgICAgaWYgKCFiQ29yZVRleHQpIHsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9FeHRHSUQsIG1fR2x5cGhJbmRleCwgMjU2KTsKKyAgICB9CisjZW5kaWYKK30KK0NQREZfRm9udEVuY29kaW5nOjpDUERGX0ZvbnRFbmNvZGluZygpCit7CisgICAgRlhTWVNfbWVtc2V0MzIobV9Vbmljb2RlcywgMCwgc2l6ZW9mKG1fVW5pY29kZXMpKTsKK30KK2ludCBDUERGX0ZvbnRFbmNvZGluZzo6Q2hhckNvZGVGcm9tVW5pY29kZShGWF9XQ0hBUiB1bmljb2RlKSBjb25zdAoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKQorICAgICAgICBpZiAobV9Vbmljb2Rlc1tpXSA9PSB1bmljb2RlKSB7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIHJldHVybiAtMTsKK30KK0NQREZfRm9udEVuY29kaW5nOjpDUERGX0ZvbnRFbmNvZGluZyhpbnQgUHJlZGVmaW5lZEVuY29kaW5nKQoreworICAgIGNvbnN0IEZYX1dPUkQqIHBTcmMgPSBQREZfVW5pY29kZXNGb3JQcmVkZWZpbmVkQ2hhclNldChQcmVkZWZpbmVkRW5jb2RpbmcpOworICAgIGlmICghcFNyYykgeworICAgICAgICBGWFNZU19tZW1zZXQzMihtX1VuaWNvZGVzLCAwLCBzaXplb2YobV9Vbmljb2RlcykpOworICAgIH0gZWxzZQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAgICBtX1VuaWNvZGVzW2ldID0gcFNyY1tpXTsKKyAgICAgICAgfQorfQorRlhfQk9PTCBDUERGX0ZvbnRFbmNvZGluZzo6SXNJZGVudGljYWwoQ1BERl9Gb250RW5jb2RpbmcqIHBBbm90aGVyKSBjb25zdAoreworICAgIHJldHVybiBGWFNZU19tZW1jbXAzMihtX1VuaWNvZGVzLCBwQW5vdGhlci0+bV9Vbmljb2Rlcywgc2l6ZW9mKG1fVW5pY29kZXMpKSA9PSAwOworfQorQ1BERl9PYmplY3QqIENQREZfRm9udEVuY29kaW5nOjpSZWFsaXplKCkKK3sKKyAgICBpbnQgcHJlZGVmaW5lZCA9IDA7CisgICAgZm9yIChpbnQgY3MgPSBQREZGT05UX0VOQ09ESU5HX1dJTkFOU0k7IGNzIDwgUERGRk9OVF9FTkNPRElOR19aQVBGRElOR0JBVFM7IGNzICsrKSB7CisgICAgICAgIGNvbnN0IEZYX1dPUkQqIHBTcmMgPSBQREZfVW5pY29kZXNGb3JQcmVkZWZpbmVkQ2hhclNldChjcyk7CisgICAgICAgIEZYX0JPT0wgbWF0Y2ggPSBUUlVFOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9Vbmljb2Rlc1tpXSAhPSBwU3JjW2ldKSB7CisgICAgICAgICAgICAgICAgbWF0Y2ggPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgIHByZWRlZmluZWQgPSBjczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmIChwcmVkZWZpbmVkKSB7CisgICAgICAgIGlmIChwcmVkZWZpbmVkID09IFBERkZPTlRfRU5DT0RJTkdfV0lOQU5TSSkgeworICAgICAgICAgICAgcmV0dXJuIENQREZfTmFtZTo6Q3JlYXRlKCJXaW5BbnNpRW5jb2RpbmciKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJlZGVmaW5lZCA9PSBQREZGT05UX0VOQ09ESU5HX01BQ1JPTUFOKSB7CisgICAgICAgICAgICByZXR1cm4gQ1BERl9OYW1lOjpDcmVhdGUoIk1hY1JvbWFuRW5jb2RpbmciKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJlZGVmaW5lZCA9PSBQREZGT05UX0VOQ09ESU5HX01BQ0VYUEVSVCkgeworICAgICAgICAgICAgcmV0dXJuIENQREZfTmFtZTo6Q3JlYXRlKCJNYWNFeHBlcnRFbmNvZGluZyIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gQ1BERl9EaWN0aW9uYXJ5OjpDcmVhdGUoKTsKKyAgICBwRGljdC0+U2V0QXROYW1lKEZYX0JTVFJDKCJCYXNlRW5jb2RpbmciKSwgRlhfQlNUUkMoIldpbkFuc2lFbmNvZGluZyIpKTsKKyAgICBjb25zdCBGWF9XT1JEKiBwU3RhbmRhcmQgPSBQREZfVW5pY29kZXNGb3JQcmVkZWZpbmVkQ2hhclNldChQREZGT05UX0VOQ09ESU5HX1dJTkFOU0kpOworICAgIENQREZfQXJyYXkqIHBEaWZmID0gQ1BERl9BcnJheTo6Q3JlYXRlKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsKKyAgICAgICAgaWYgKHBTdGFuZGFyZFtpXSA9PSBtX1VuaWNvZGVzW2ldKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBwRGlmZi0+QWRkKENQREZfTnVtYmVyOjpDcmVhdGUoaSkpOworICAgICAgICBwRGlmZi0+QWRkKENQREZfTmFtZTo6Q3JlYXRlKFBERl9BZG9iZU5hbWVGcm9tVW5pY29kZShtX1VuaWNvZGVzW2ldKSkpOworICAgIH0KKyAgICBwRGljdC0+U2V0QXQoRlhfQlNUUkMoIkRpZmZlcmVuY2VzIiksIHBEaWZmKTsKKyAgICByZXR1cm4gcERpY3Q7Cit9CitDUERGX1RydWVUeXBlRm9udDo6Q1BERl9UcnVlVHlwZUZvbnQoKQoreworfQorRlhfQk9PTCBDUERGX1RydWVUeXBlRm9udDo6X0xvYWQoKQoreworICAgIHJldHVybiBMb2FkQ29tbW9uKCk7Cit9CitleHRlcm4gRlhfRFdPUkQgRlRfQ2hhckNvZGVGcm9tVW5pY29kZShpbnQgZW5jb2RpbmcsIEZYX1dDSEFSIHVuaWNvZGUpOwordm9pZCBDUERGX1RydWVUeXBlRm9udDo6TG9hZEdseXBoTWFwKCkKK3sKKyAgICBpZiAobV9Gb250Lm1fRmFjZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IGJhc2VFbmNvZGluZyA9IG1fQmFzZUVuY29kaW5nOworICAgIGlmIChtX3BGb250RmlsZSAmJiBtX0ZvbnQubV9GYWNlLT5udW1fY2hhcm1hcHMgPiAwCisgICAgICAgICAgICAmJiAoYmFzZUVuY29kaW5nID09IFBERkZPTlRfRU5DT0RJTkdfTUFDUk9NQU4gfHwgYmFzZUVuY29kaW5nID09IFBERkZPTlRfRU5DT0RJTkdfV0lOQU5TSSkKKyAgICAgICAgICAgICYmIChtX0ZsYWdzICYgUERGRk9OVF9TWU1CT0xJQykpIHsKKyAgICAgICAgRlhfQk9PTCBiU3VwcG9ydFdpbiA9IEZBTFNFOworICAgICAgICBGWF9CT09MIGJTdXBwb3J0TWFjID0gRkFMU0U7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRlhGVF9HZXRfRmFjZV9DaGFybWFwQ291bnQobV9Gb250Lm1fRmFjZSk7IGkrKykgeworICAgICAgICAgICAgaW50IHBsYXRmb3JtX2lkID0gRlhGVF9HZXRfQ2hhcm1hcF9QbGF0Zm9ybUlEKEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcHMobV9Gb250Lm1fRmFjZSlbaV0pOworICAgICAgICAgICAgaWYgKHBsYXRmb3JtX2lkID09IDAgfHwgcGxhdGZvcm1faWQgPT0gMykgeworICAgICAgICAgICAgICAgIGJTdXBwb3J0V2luID0gVFJVRTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocGxhdGZvcm1faWQgPT0gMCB8fCBwbGF0Zm9ybV9pZCA9PSAxKSB7CisgICAgICAgICAgICAgICAgYlN1cHBvcnRNYWMgPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChiYXNlRW5jb2RpbmcgPT0gUERGRk9OVF9FTkNPRElOR19XSU5BTlNJICYmICFiU3VwcG9ydFdpbikgeworICAgICAgICAgICAgYmFzZUVuY29kaW5nID0gYlN1cHBvcnRNYWMgPyBQREZGT05UX0VOQ09ESU5HX01BQ1JPTUFOIDogUERGRk9OVF9FTkNPRElOR19CVUlMVElOOworICAgICAgICB9IGVsc2UgaWYgKGJhc2VFbmNvZGluZyA9PSBQREZGT05UX0VOQ09ESU5HX01BQ1JPTUFOICYmICFiU3VwcG9ydE1hYykgeworICAgICAgICAgICAgYmFzZUVuY29kaW5nID0gYlN1cHBvcnRXaW4gPyBQREZGT05UX0VOQ09ESU5HX1dJTkFOU0kgOiBQREZGT05UX0VOQ09ESU5HX0JVSUxUSU47CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCgoYmFzZUVuY29kaW5nID09IFBERkZPTlRfRU5DT0RJTkdfTUFDUk9NQU4gfHwgYmFzZUVuY29kaW5nID09IFBERkZPTlRfRU5DT0RJTkdfV0lOQU5TSSkKKyAgICAgICAgICAgICYmIG1fcENoYXJOYW1lcyA9PSBOVUxMKSB8fCAobV9GbGFncyAmIFBERkZPTlRfTk9OU1lNQk9MSUMpKSB7CisgICAgICAgIGlmICghRlhGVF9IYXNfR2x5cGhfTmFtZXMobV9Gb250Lm1fRmFjZSkgJiYgKCFtX0ZvbnQubV9GYWNlLT5udW1fY2hhcm1hcHMgfHwgIW1fRm9udC5tX0ZhY2UtPmNoYXJtYXBzKSkgeworICAgICAgICAgICAgaW50IG5TdGFydENoYXIgPSBtX3BGb250RGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiRmlyc3RDaGFyIikpOworICAgICAgICAgICAgaW50IGNoYXJjb2RlID0gMDsKKyAgICAgICAgICAgIGZvciAoOyBjaGFyY29kZSA8IG5TdGFydENoYXI7IGNoYXJjb2RlICsrKSB7CisgICAgICAgICAgICAgICAgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9XT1JEIG5HbHlwaCA9IGNoYXJjb2RlIC0gblN0YXJ0Q2hhciArIDM7CisgICAgICAgICAgICBmb3IgKDsgY2hhcmNvZGUgPCAyNTY7IGNoYXJjb2RlICsrLCBuR2x5cGggKyspIHsKKyAgICAgICAgICAgICAgICBtX0dseXBoSW5kZXhbY2hhcmNvZGVdID0gbkdseXBoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEZYX0JPT0wgYk1TVW5pY29kZSA9IEZUX1VzZVRUQ2hhcm1hcChtX0ZvbnQubV9GYWNlLCAzLCAxKTsKKyAgICAgICAgRlhfQk9PTCBiTWFjUm9tYW4gPSBGQUxTRSwgYk1TU3ltYm9sID0gRkFMU0U7CisgICAgICAgIGlmICghYk1TVW5pY29kZSkgeworICAgICAgICAgICAgaWYgKG1fRmxhZ3MgJiBQREZGT05UX05PTlNZTUJPTElDKSB7CisgICAgICAgICAgICAgICAgYk1hY1JvbWFuID0gRlRfVXNlVFRDaGFybWFwKG1fRm9udC5tX0ZhY2UsIDEsIDApOworICAgICAgICAgICAgICAgIGJNU1N5bWJvbCA9ICFiTWFjUm9tYW4gJiYgRlRfVXNlVFRDaGFybWFwKG1fRm9udC5tX0ZhY2UsIDMsIDApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBiTVNTeW1ib2wgPSBGVF9Vc2VUVENoYXJtYXAobV9Gb250Lm1fRmFjZSwgMywgMCk7CisgICAgICAgICAgICAgICAgYk1hY1JvbWFuID0gIWJNU1N5bWJvbCAmJiBGVF9Vc2VUVENoYXJtYXAobV9Gb250Lm1fRmFjZSwgMSwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgRlhfQk9PTCBiVG9Vbmljb2RlID0gbV9wRm9udERpY3QtPktleUV4aXN0KEZYX0JTVFJDKCJUb1VuaWNvZGUiKSk7CisgICAgICAgIGZvciAoaW50IGNoYXJjb2RlID0gMDsgY2hhcmNvZGUgPCAyNTY7IGNoYXJjb2RlICsrKSB7CisgICAgICAgICAgICBGWF9MUENTVFIgbmFtZSA9IEdldEFkb2JlQ2hhck5hbWUoYmFzZUVuY29kaW5nLCBtX3BDaGFyTmFtZXMsIGNoYXJjb2RlKTsKKyAgICAgICAgICAgIGlmIChuYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBtX0dseXBoSW5kZXhbY2hhcmNvZGVdID0gbV9wRm9udEZpbGUgPyBGWEZUX0dldF9DaGFyX0luZGV4KG1fRm9udC5tX0ZhY2UsIGNoYXJjb2RlKSA6IC0xOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9FbmNvZGluZy5tX1VuaWNvZGVzW2NoYXJjb2RlXSA9IFBERl9Vbmljb2RlRnJvbUFkb2JlTmFtZShuYW1lKTsKKyAgICAgICAgICAgIGlmIChiTVNTeW1ib2wpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBGWF9CWVRFIHByZWZpeFs0XSA9IHsweDAwLCAweGYwLCAweGYxLCAweGYyfTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGogKyspIHsKKyAgICAgICAgICAgICAgICAgICAgRlhfV09SRCB1bmljb2RlID0gcHJlZml4W2pdICogMjU2ICsgY2hhcmNvZGU7CisgICAgICAgICAgICAgICAgICAgIG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPSBGWEZUX0dldF9DaGFyX0luZGV4KG1fRm9udC5tX0ZhY2UsIHVuaWNvZGUpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9HbHlwaEluZGV4W2NoYXJjb2RlXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tjaGFyY29kZV0pIHsKKyAgICAgICAgICAgICAgICBpZiAoYk1TVW5pY29kZSkgeworICAgICAgICAgICAgICAgICAgICBtX0dseXBoSW5kZXhbY2hhcmNvZGVdID0gRlhGVF9HZXRfQ2hhcl9JbmRleChtX0ZvbnQubV9GYWNlLCBtX0VuY29kaW5nLm1fVW5pY29kZXNbY2hhcmNvZGVdKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJNYWNSb21hbikgeworICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBtYWNjb2RlID0gRlRfQ2hhckNvZGVGcm9tVW5pY29kZShGWEZUX0VOQ09ESU5HX0FQUExFX1JPTUFOLCBtX0VuY29kaW5nLm1fVW5pY29kZXNbY2hhcmNvZGVdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtYWNjb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX0dseXBoSW5kZXhbY2hhcmNvZGVdID0gRlhGVF9HZXRfTmFtZV9JbmRleChtX0ZvbnQubV9GYWNlLCAoY2hhciAqKW5hbWUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9IEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgbWFjY29kZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPT0gMCB8fCBtX0dseXBoSW5kZXhbY2hhcmNvZGVdID09IDB4ZmZmZikgJiYgbmFtZSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKG5hbWVbMF0gPT0gJy4nICYmIEZYU1lTX3N0cmNtcChuYW1lLCAiLm5vdGRlZiIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9IEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgMzIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPSBGWEZUX0dldF9OYW1lX0luZGV4KG1fRm9udC5tX0ZhY2UsIChjaGFyKiluYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJUb1VuaWNvZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyB3c1VuaWNvZGUgPSBVbmljb2RlRnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdzVW5pY29kZS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9IEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgd3NVbmljb2RlWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9FbmNvZGluZy5tX1VuaWNvZGVzW2NoYXJjb2RlXSA9IHdzVW5pY29kZVswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9IEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgY2hhcmNvZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKEZUX1VzZVRUQ2hhcm1hcChtX0ZvbnQubV9GYWNlLCAzLCAwKSkgeworICAgICAgICBjb25zdCBGWF9CWVRFIHByZWZpeFs0XSA9IHsweDAwLCAweGYwLCAweGYxLCAweGYyfTsKKyAgICAgICAgRlhfQk9PTCBiR290T25lID0gRkFMU0U7CisgICAgICAgIGZvciAoaW50IGNoYXJjb2RlID0gMDsgY2hhcmNvZGUgPCAyNTY7IGNoYXJjb2RlICsrKSB7CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDQ7IGogKyspIHsKKyAgICAgICAgICAgICAgICBGWF9XT1JEIHVuaWNvZGUgPSBwcmVmaXhbal0gKiAyNTYgKyBjaGFyY29kZTsKKyAgICAgICAgICAgICAgICBtX0dseXBoSW5kZXhbY2hhcmNvZGVdID0gRlhGVF9HZXRfQ2hhcl9JbmRleChtX0ZvbnQubV9GYWNlLCB1bmljb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAobV9HbHlwaEluZGV4W2NoYXJjb2RlXSkgeworICAgICAgICAgICAgICAgICAgICBiR290T25lID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChiR290T25lKSB7CisgICAgICAgICAgICBpZiAoYmFzZUVuY29kaW5nICE9IFBERkZPTlRfRU5DT0RJTkdfQlVJTFRJTikgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGNoYXJjb2RlID0gMDsgY2hhcmNvZGUgPCAyNTY7IGNoYXJjb2RlICsrKSB7CisgICAgICAgICAgICAgICAgICAgIEZYX0xQQ1NUUiBuYW1lID0gR2V0QWRvYmVDaGFyTmFtZShiYXNlRW5jb2RpbmcsIG1fcENoYXJOYW1lcywgY2hhcmNvZGUpOworICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtX0VuY29kaW5nLm1fVW5pY29kZXNbY2hhcmNvZGVdID0gUERGX1VuaWNvZGVGcm9tQWRvYmVOYW1lKG5hbWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoRlRfVXNlVFRDaGFybWFwKG1fRm9udC5tX0ZhY2UsIDEsIDApKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY2hhcmNvZGUgPSAwOyBjaGFyY29kZSA8IDI1NjsgY2hhcmNvZGUgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgbV9FbmNvZGluZy5tX1VuaWNvZGVzW2NoYXJjb2RlXSA9IEZUX1VuaWNvZGVGcm9tQ2hhckNvZGUoRlhGVF9FTkNPRElOR19BUFBMRV9ST01BTiwgY2hhcmNvZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoRlRfVXNlVFRDaGFybWFwKG1fRm9udC5tX0ZhY2UsIDEsIDApKSB7CisgICAgICAgIEZYX0JPT0wgYkdvdE9uZSA9IEZBTFNFOworICAgICAgICBmb3IgKGludCBjaGFyY29kZSA9IDA7IGNoYXJjb2RlIDwgMjU2OyBjaGFyY29kZSArKykgeworICAgICAgICAgICAgbV9HbHlwaEluZGV4W2NoYXJjb2RlXSA9IEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgY2hhcmNvZGUpOworICAgICAgICAgICAgbV9FbmNvZGluZy5tX1VuaWNvZGVzW2NoYXJjb2RlXSA9IEZUX1VuaWNvZGVGcm9tQ2hhckNvZGUoRlhGVF9FTkNPRElOR19BUFBMRV9ST01BTiwgY2hhcmNvZGUpOworICAgICAgICAgICAgaWYgKG1fR2x5cGhJbmRleFtjaGFyY29kZV0pIHsKKyAgICAgICAgICAgICAgICBiR290T25lID0gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobV9wRm9udEZpbGUgfHwgYkdvdE9uZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIGlmIChGWEZUX1NlbGVjdF9DaGFybWFwKG1fRm9udC5tX0ZhY2UsIEZYRlRfRU5DT0RJTkdfVU5JQ09ERSkgPT0gMCkgeworICAgICAgICBGWF9CT09MIGJHb3RPbmUgPSBGQUxTRTsKKyAgICAgICAgY29uc3QgRlhfV09SRCogcFVuaWNvZGVzID0gUERGX1VuaWNvZGVzRm9yUHJlZGVmaW5lZENoYXJTZXQoYmFzZUVuY29kaW5nKTsKKyAgICAgICAgZm9yIChpbnQgY2hhcmNvZGUgPSAwOyBjaGFyY29kZSA8IDI1NjsgY2hhcmNvZGUgKyspIHsKKyAgICAgICAgICAgIGlmIChtX3BGb250RmlsZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgRlhfTFBDU1RSIG5hbWUgPSBHZXRBZG9iZUNoYXJOYW1lKDAsIG1fcENoYXJOYW1lcywgY2hhcmNvZGUpOworICAgICAgICAgICAgICAgIGlmIChuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9FbmNvZGluZy5tX1VuaWNvZGVzW2NoYXJjb2RlXSA9IFBERl9Vbmljb2RlRnJvbUFkb2JlTmFtZShuYW1lKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBVbmljb2RlcykgeworICAgICAgICAgICAgICAgICAgICBtX0VuY29kaW5nLm1fVW5pY29kZXNbY2hhcmNvZGVdID0gcFVuaWNvZGVzW2NoYXJjb2RlXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tjaGFyY29kZV0gPSBjaGFyY29kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPSBGWEZUX0dldF9DaGFyX0luZGV4KG1fRm9udC5tX0ZhY2UsIG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tjaGFyY29kZV0pOworICAgICAgICAgICAgaWYgKG1fR2x5cGhJbmRleFtjaGFyY29kZV0pIHsKKyAgICAgICAgICAgICAgICBiR290T25lID0gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoYkdvdE9uZSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoaW50IGNoYXJjb2RlID0gMDsgY2hhcmNvZGUgPCAyNTY7IGNoYXJjb2RlICsrKSB7CisgICAgICAgIG1fR2x5cGhJbmRleFtjaGFyY29kZV0gPSBjaGFyY29kZTsKKyAgICB9Cit9CitDUERGX1R5cGUzRm9udDo6Q1BERl9UeXBlM0ZvbnQoKQoreworICAgIG1fcFBhZ2VSZXNvdXJjZXMgPSBOVUxMOworICAgIEZYU1lTX21lbXNldDMyKG1fQ2hhcldpZHRoTCwgMCwgc2l6ZW9mIG1fQ2hhcldpZHRoTCk7Cit9CitDUERGX1R5cGUzRm9udDo6fkNQREZfVHlwZTNGb250KCkKK3sKKyAgICBGWF9QT1NJVElPTiBwb3MgPSBtX0NhY2hlTWFwLkdldFN0YXJ0UG9zaXRpb24oKTsKKyAgICB3aGlsZSAocG9zKSB7CisgICAgICAgIEZYX0xQVk9JRCBrZXksIHZhbHVlOworICAgICAgICBtX0NhY2hlTWFwLkdldE5leHRBc3NvYyhwb3MsIGtleSwgdmFsdWUpOworICAgICAgICBkZWxldGUgKENQREZfVHlwZTNDaGFyKil2YWx1ZTsKKyAgICB9CisgICAgbV9DYWNoZU1hcC5SZW1vdmVBbGwoKTsKKyAgICBwb3MgPSBtX0RlbGV0ZWRNYXAuR2V0U3RhcnRQb3NpdGlvbigpOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgRlhfTFBWT0lEIGtleSwgdmFsdWU7CisgICAgICAgIG1fRGVsZXRlZE1hcC5HZXROZXh0QXNzb2MocG9zLCBrZXksIHZhbHVlKTsKKyAgICAgICAgZGVsZXRlIChDUERGX1R5cGUzQ2hhciopa2V5OworICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9UeXBlM0ZvbnQ6Ol9Mb2FkKCkKK3sKKyAgICBtX3BGb250UmVzb3VyY2VzID0gbV9wRm9udERpY3QtPkdldERpY3QoRlhfQlNUUkMoIlJlc291cmNlcyIpKTsKKyAgICBDUERGX0FycmF5KiBwTWF0cml4ID0gbV9wRm9udERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJGb250TWF0cml4IikpOworICAgIEZYX0ZMT0FUIHhzY2FsZSA9IDEuMGYsIHlzY2FsZSA9IDEuMGY7CisgICAgaWYgKHBNYXRyaXgpIHsKKyAgICAgICAgbV9Gb250TWF0cml4ID0gcE1hdHJpeC0+R2V0TWF0cml4KCk7CisgICAgICAgIHhzY2FsZSA9IG1fRm9udE1hdHJpeC5hOworICAgICAgICB5c2NhbGUgPSBtX0ZvbnRNYXRyaXguZDsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcEJCb3ggPSBtX3BGb250RGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIkZvbnRCQm94IikpOworICAgIGlmIChwQkJveCkgeworICAgICAgICBtX0ZvbnRCQm94LmxlZnQgPSAoRlhfSU5UMzIpKEZYU1lTX011bChwQkJveC0+R2V0TnVtYmVyKDApLCB4c2NhbGUpICogMTAwMCk7CisgICAgICAgIG1fRm9udEJCb3guYm90dG9tID0gKEZYX0lOVDMyKShGWFNZU19NdWwocEJCb3gtPkdldE51bWJlcigxKSwgeXNjYWxlKSAqIDEwMDApOworICAgICAgICBtX0ZvbnRCQm94LnJpZ2h0ID0gKEZYX0lOVDMyKShGWFNZU19NdWwocEJCb3gtPkdldE51bWJlcigyKSwgeHNjYWxlKSAqIDEwMDApOworICAgICAgICBtX0ZvbnRCQm94LnRvcCA9IChGWF9JTlQzMikoRlhTWVNfTXVsKHBCQm94LT5HZXROdW1iZXIoMyksIHlzY2FsZSkgKiAxMDAwKTsKKyAgICB9CisgICAgaW50IFN0YXJ0Q2hhciA9IG1fcEZvbnREaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJGaXJzdENoYXIiKSk7CisgICAgQ1BERl9BcnJheSogcFdpZHRoQXJyYXkgPSBtX3BGb250RGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIldpZHRocyIpKTsKKyAgICBpZiAocFdpZHRoQXJyYXkgJiYgKFN0YXJ0Q2hhciA+PSAwICYmIFN0YXJ0Q2hhciA8IDI1NikpIHsKKyAgICAgICAgRlhfRFdPUkQgY291bnQgPSBwV2lkdGhBcnJheS0+R2V0Q291bnQoKTsKKyAgICAgICAgaWYgKGNvdW50ID4gMjU2KSB7CisgICAgICAgICAgICBjb3VudCA9IDI1NjsKKyAgICAgICAgfQorICAgICAgICBpZiAoU3RhcnRDaGFyICsgY291bnQgPiAyNTYpIHsKKyAgICAgICAgICAgIGNvdW50ID0gMjU2IC0gU3RhcnRDaGFyOworICAgICAgICB9CisgICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBjb3VudDsgaSArKykgeworICAgICAgICAgICAgbV9DaGFyV2lkdGhMW1N0YXJ0Q2hhciArIGldID0gRlhTWVNfcm91bmQoRlhTWVNfTXVsKHBXaWR0aEFycmF5LT5HZXROdW1iZXIoaSksIHhzY2FsZSkgKiAxMDAwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX3BDaGFyUHJvY3MgPSBtX3BGb250RGljdC0+R2V0RGljdChGWF9CU1RSQygiQ2hhclByb2NzIikpOworICAgIENQREZfT2JqZWN0KiBwRW5jb2RpbmcgPSBtX3BGb250RGljdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJFbmNvZGluZyIpKTsKKyAgICBpZiAocEVuY29kaW5nKSB7CisgICAgICAgIExvYWRQREZFbmNvZGluZyhwRW5jb2RpbmcsIG1fQmFzZUVuY29kaW5nLCBtX3BDaGFyTmFtZXMsIEZBTFNFLCBGQUxTRSk7CisgICAgICAgIGlmIChtX3BDaGFyTmFtZXMpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7CisgICAgICAgICAgICAgICAgbV9FbmNvZGluZy5tX1VuaWNvZGVzW2ldID0gUERGX1VuaWNvZGVGcm9tQWRvYmVOYW1lKG1fcENoYXJOYW1lc1tpXSk7CisgICAgICAgICAgICAgICAgaWYgKG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tpXSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIG1fRW5jb2RpbmcubV9Vbmljb2Rlc1tpXSA9IGk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQordm9pZCBDUERGX1R5cGUzRm9udDo6Q2hlY2tUeXBlM0ZvbnRNZXRyaWNzKCkKK3sKKyAgICBDaGVja0ZvbnRNZXRyaWNzKCk7Cit9CitDUERGX1R5cGUzQ2hhciogQ1BERl9UeXBlM0ZvbnQ6OkxvYWRDaGFyKEZYX0RXT1JEIGNoYXJjb2RlLCBpbnQgbGV2ZWwpCit7CisgICAgaWYgKGxldmVsID49IF9GUERGX01BWF9UWVBFM19GT1JNX0xFVkVMXykgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9UeXBlM0NoYXIqIHBDaGFyID0gTlVMTDsKKyAgICBpZiAobV9DYWNoZU1hcC5Mb29rdXAoKEZYX0xQVk9JRCkoRlhfVUlOVFBUUiljaGFyY29kZSwgKEZYX0xQVk9JRCYpcENoYXIpKSB7CisgICAgICAgIGlmIChwQ2hhci0+bV9iUGFnZVJlcXVpcmVkICYmIG1fcFBhZ2VSZXNvdXJjZXMpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwQ2hhcjsKKyAgICAgICAgICAgIG1fQ2FjaGVNYXAuUmVtb3ZlS2V5KChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpY2hhcmNvZGUpOworICAgICAgICAgICAgcmV0dXJuIExvYWRDaGFyKGNoYXJjb2RlLCBsZXZlbCArIDEpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwQ2hhcjsKKyAgICB9CisgICAgRlhfTFBDU1RSIG5hbWUgPSBHZXRBZG9iZUNoYXJOYW1lKG1fQmFzZUVuY29kaW5nLCBtX3BDaGFyTmFtZXMsIGNoYXJjb2RlKTsKKyAgICBpZiAobmFtZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX1N0cmVhbSogcFN0cmVhbSA9IChDUERGX1N0cmVhbSopbV9wQ2hhclByb2NzLT5HZXRFbGVtZW50VmFsdWUobmFtZSk7CisgICAgaWYgKHBTdHJlYW0gPT0gTlVMTCB8fCBwU3RyZWFtLT5HZXRUeXBlKCkgIT0gUERGT0JKX1NUUkVBTSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcENoYXIgPSBGWF9ORVcgQ1BERl9UeXBlM0NoYXI7CisgICAgcENoYXItPm1fcEZvcm0gPSBGWF9ORVcgQ1BERl9Gb3JtKG1fcERvY3VtZW50LCBtX3BGb250UmVzb3VyY2VzID8gbV9wRm9udFJlc291cmNlcyA6IG1fcFBhZ2VSZXNvdXJjZXMsIHBTdHJlYW0sIE5VTEwpOworICAgIHBDaGFyLT5tX3BGb3JtLT5QYXJzZUNvbnRlbnQoTlVMTCwgTlVMTCwgcENoYXIsIE5VTEwsIGxldmVsICsgMSk7CisgICAgRlhfRkxPQVQgc2NhbGUgPSBtX0ZvbnRNYXRyaXguR2V0WFVuaXQoKTsKKyAgICBwQ2hhci0+bV9XaWR0aCA9IChGWF9JTlQzMikocENoYXItPm1fV2lkdGggKiBzY2FsZSArIDAuNWYpOworICAgIEZYX1JFQ1QgJnJjQkJveCA9IHBDaGFyLT5tX0JCb3g7CisgICAgQ0ZYX0Zsb2F0UmVjdCBjaGFyX3JlY3QoKEZYX0ZMT0FUKXJjQkJveC5sZWZ0IC8gMTAwMC4wZiwgKEZYX0ZMT0FUKXJjQkJveC5ib3R0b20gLyAxMDAwLjBmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGWF9GTE9BVClyY0JCb3gucmlnaHQgLyAxMDAwLjBmLCAoRlhfRkxPQVQpcmNCQm94LnRvcCAvIDEwMDAuMGYpOworICAgIGlmIChyY0JCb3gucmlnaHQgPD0gcmNCQm94LmxlZnQgfHwgcmNCQm94LmJvdHRvbSA+PSByY0JCb3gudG9wKSB7CisgICAgICAgIGNoYXJfcmVjdCA9IHBDaGFyLT5tX3BGb3JtLT5DYWxjQm91bmRpbmdCb3goKTsKKyAgICB9CisgICAgY2hhcl9yZWN0LlRyYW5zZm9ybSgmbV9Gb250TWF0cml4KTsKKyAgICByY0JCb3gubGVmdCA9IEZYU1lTX3JvdW5kKGNoYXJfcmVjdC5sZWZ0ICogMTAwMCk7CisgICAgcmNCQm94LnJpZ2h0ID0gRlhTWVNfcm91bmQoY2hhcl9yZWN0LnJpZ2h0ICogMTAwMCk7CisgICAgcmNCQm94LnRvcCA9IEZYU1lTX3JvdW5kKGNoYXJfcmVjdC50b3AgKiAxMDAwKTsKKyAgICByY0JCb3guYm90dG9tID0gRlhTWVNfcm91bmQoY2hhcl9yZWN0LmJvdHRvbSAqIDEwMDApOworICAgIG1fQ2FjaGVNYXAuU2V0QXQoKEZYX0xQVk9JRCkoRlhfVUlOVFBUUiljaGFyY29kZSwgcENoYXIpOworICAgIGlmIChwQ2hhci0+bV9wRm9ybS0+Q291bnRPYmplY3RzKCkgPT0gMCkgeworICAgICAgICBkZWxldGUgcENoYXItPm1fcEZvcm07CisgICAgICAgIHBDaGFyLT5tX3BGb3JtID0gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHBDaGFyOworfQoraW50IENQREZfVHlwZTNGb250OjpHZXRDaGFyV2lkdGhGKEZYX0RXT1JEIGNoYXJjb2RlLCBpbnQgbGV2ZWwpCit7CisgICAgaWYgKGNoYXJjb2RlID4gMHhmZikgeworICAgICAgICBjaGFyY29kZSA9IDA7CisgICAgfQorICAgIGlmIChtX0NoYXJXaWR0aExbY2hhcmNvZGVdKSB7CisgICAgICAgIHJldHVybiBtX0NoYXJXaWR0aExbY2hhcmNvZGVdOworICAgIH0KKyAgICBDUERGX1R5cGUzQ2hhciogcENoYXIgPSBMb2FkQ2hhcihjaGFyY29kZSwgbGV2ZWwpOworICAgIGlmIChwQ2hhciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gcENoYXItPm1fV2lkdGg7Cit9Cit2b2lkIENQREZfVHlwZTNGb250OjpHZXRDaGFyQkJveChGWF9EV09SRCBjaGFyY29kZSwgRlhfUkVDVCYgcmVjdCwgaW50IGxldmVsKQoreworICAgIENQREZfVHlwZTNDaGFyKiBwQ2hhciA9IExvYWRDaGFyKGNoYXJjb2RlLCBsZXZlbCk7CisgICAgaWYgKHBDaGFyID09IE5VTEwpIHsKKyAgICAgICAgcmVjdC5sZWZ0ID0gcmVjdC5yaWdodCA9IHJlY3QudG9wID0gcmVjdC5ib3R0b20gPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlY3QgPSBwQ2hhci0+bV9CQm94OworfQorQ1BERl9UeXBlM0NoYXI6OkNQREZfVHlwZTNDaGFyKCkKK3sKKyAgICBtX3BGb3JtID0gTlVMTDsKKyAgICBtX3BCaXRtYXAgPSBOVUxMOworICAgIG1fYlBhZ2VSZXF1aXJlZCA9IEZBTFNFOworICAgIG1fYkNvbG9yZWQgPSBGQUxTRTsKK30KK0NQREZfVHlwZTNDaGFyOjp+Q1BERl9UeXBlM0NoYXIoKQoreworICAgIGlmIChtX3BGb3JtKSB7CisgICAgICAgIGRlbGV0ZSBtX3BGb3JtOworICAgIH0KKyAgICBpZiAobV9wQml0bWFwKSB7CisgICAgICAgIGRlbGV0ZSBtX3BCaXRtYXA7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2ZvbnQvZnBkZl9mb250X2NoYXJzZXQuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2ZvbnQvZnBkZl9mb250X2NoYXJzZXQuY3BwCmluZGV4IGJkMDljZmMuLjk4MTAxOGIgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9mb250L2ZwZGZfZm9udF9jaGFyc2V0LmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfZm9udC9mcGRmX2ZvbnRfY2hhcnNldC5jcHAKQEAgLTEsNjI1ICsxLDYyNSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2UuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2ZyZWV0eXBlLmgiDQotZXh0ZXJuIEZYX1dDSEFSIFBERl9Vbmljb2RlRnJvbUFkb2JlTmFtZShjb25zdCBGWF9DSEFSKik7DQotY29uc3Qgc3RydWN0IF9Vbmljb2RlQWx0IHsNCi0gICAgRlhfV09SRAltX1VuaWNvZGU7DQotICAgIGNvbnN0IEZYX0NIQVIqIG1fQWx0ZXI7DQotfQ0KLVVuaWNvZGVBbHRzW10gPSB7DQotICAgIHsweDAwYTAsICIgIn0sIHsweDAwYTEsICIhIn0sIHsweDAwYTIsICJjIn0sIHsweDAwYTMsICJQIn0sIHsweDAwYTQsICJvIn0sDQotICAgIHsweDAwYTUsICJZIn0sIHsweDAwYTYsICJ8In0sIHsweDAwYTcsICJTIn0sIHsweDAwYTksICIoQykifSwgezB4MDBhYSwgImEifSwNCi0gICAgezB4MDBhYiwgIjw8In0sIHsweDAwYWMsICItfCJ9LCB7MHgwMGFlLCAiKFIpIn0sIHsweDAwYWYsICItIn0sDQotICAgIHsweDAwYjAsICJvIn0sIHsweDAwYjEsICIrLy0ifSwgezB4MDBiMiwgIl4yIn0sIHsgMHgwMGIzLCAiXjMifSwNCi0gICAgezB4MDBiNCwgIicifSwgezB4MDBiNSwgInUifSwgezB4MDBiNiwgIlAifSwgezB4MDBiNywgIi4ifSwNCi0gICAgezB4MDBiOSwgIl4xIn0sIHsweDAwYmEsICJvIn0sIHsweDAwYmIsICI+PiJ9LCB7MHgwMGJjLCAiMS80In0sDQotICAgIHsweDAwYmQsICIxLzIifSwgezB4MDBiZSwgIjMvNCJ9LCAgezB4MDBiZiwgIj8ifSwgezB4MDBjMCwgIkEifSwNCi0gICAgezB4MDBjMSwgIkEifSwgezB4MDBjMiwgIkEifSwgezB4MDBjMywgIkEifSwgezB4MDBjNCwgIkEifSwNCi0gICAgezB4MDBjNSwgIkEifSwgezB4MDBjNiwgIkFFIn0sIHsweDAwYzcsICJDIn0sIHsweDAwYzgsICJFIn0sDQotICAgIHsweDAwYzksICJFIn0sIHsweDAwY2EsICJFIn0sIHsweDAwY2IsICJFIn0sIHsweDAwY2MsICJJIn0sDQotICAgIHsweDAwY2QsICJJIn0sIHsweDAwY2UsICJJIn0sIHsweDAwY2YsICJJIn0sDQotICAgIHsweDAwZDEsICJOIn0sIHsweDAwZDIsICJPIn0sIHsweDAwZDMsICJPIn0sIHsweDAwZDQsICJPIn0sDQotICAgIHsweDAwZDUsICJPIn0sIHsweDAwZDYsICJPIn0sIHsweDAwZDcsICJ4In0sIHsweDAwZDgsICJPIn0sDQotICAgIHsweDAwZDksICJVIn0sIHsweDAwZGEsICJVIn0sIHsweDAwZGIsICJVIn0sIHsweDAwZGMsICJVIn0sDQotICAgIHsweDAwZGQsICJZIn0sIHsweDAwZGYsICJTIn0sIHsweDAwZTAsICJhIn0sDQotICAgIHsweDAwZTEsICJhIn0sIHsweDAwZTIsICJhIn0sIHsweDAwZTMsICJhIn0sIHsweDAwZTQsICJhIn0sDQotICAgIHsweDAwZTUsICJhIn0sIHsweDAwZTYsICJhZSJ9LCB7MHgwMGU3LCAiYyJ9LCB7MHgwMGU4LCAiZSJ9LA0KLSAgICB7MHgwMGU5LCAiZSJ9LCB7MHgwMGVhLCAiZSJ9LCB7MHgwMGViLCAiZSJ9LCB7MHgwMGVjLCAiaSJ9LA0KLSAgICB7MHgwMGVkLCAiaSJ9LCB7MHgwMGVlLCAiaSJ9LCB7MHgwMGVmLCAiaSJ9LA0KLSAgICB7MHgwMGYxLCAibiJ9LCB7MHgwMGYyLCAibyJ9LCB7MHgwMGYzLCAibyJ9LCB7MHgwMGY0LCAibyJ9LA0KLSAgICB7MHgwMGY1LCAibyJ9LCB7MHgwMGY2LCAibyJ9LCB7MHgwMGY3LCAiLyJ9LCB7MHgwMGY4LCAibyJ9LA0KLSAgICB7MHgwMGY5LCAidSJ9LCB7MHgwMGZhLCAidSJ9LCB7MHgwMGZiLCAidSJ9LCB7MHgwMGZjLCAidSJ9LA0KLSAgICB7MHgwMGZkLCAieSJ9LCB7MHgwMGZmLCAieSJ9LA0KLSAgICB7MHgwMmIwLCAiaCJ9LCB7MHgwMmIyLCAiaiJ9LCB7MHgwMmIzLCAiciJ9LCB7MHgwMmI3LCAidyJ9LA0KLSAgICB7MHgwMmI4LCAieSJ9LCB7MHgwMmI5LCAiJyJ9LCB7MHgwMmJhLCAiXCIifSwgezB4MDJiYiwgIicifSwNCi0gICAgezB4MDJiYywgIicifSwgezB4MDJiZCwgIicifSwgezB4MDJiZSwgIicifSwgezB4MDJiZiwgIicifSwNCi0gICAgezB4MDJjMiwgIjwifSwgezB4MDJjMywgIj4ifSwgezB4MDJjNCwgIl4ifSwgezB4MDJjNSwgInYifSwNCi0gICAgezB4MDJjNiwgIl4ifSwgezB4MDJjNywgInYifSwgezB4MDJjOCwgIicifSwgezB4MDJjOSwgIi0ifSwNCi0gICAgezB4MDJjYSwgIicifSwgezB4MDJjYiwgIicifSwgezB4MDJjYywgIi4ifSwgezB4MDJjZCwgIl8ifSwNCi0gICAgezB4MjAxMCwgIi0ifSwgezB4MjAxMiwgIi0ifSwgezB4MjAxMywgIi0ifSwgezB4MjAxNCwgIi0tIn0sDQotICAgIHsweDIwMTUsICItLSJ9LCB7MHgyMDE2LCAifCJ9LCB7MHgyMDE3LCAiXyJ9LA0KLSAgICB7MHgyMDE4LCAiJyJ9LCB7MHgyMDE5LCAiJyJ9LCB7MHgyMDFhLCAiLCJ9LCB7MHgyMDFiLCAiJyJ9LA0KLSAgICB7MHgyMDFjLCAiXCIifSwgezB4MjAxZCwgIlwiIn0sIHsweDIwMWUsICIsIn0sIHsweDIwMWYsICInIn0sDQotICAgIHsweDIwMjAsICIrIn0sIHsweDIwMjEsICIrIn0sIHsweDIwMjIsICIqIn0sIHsweDIwMjMsICI+In0sDQotICAgIHsweDIwMjQsICIuIn0sIHsweDIwMjUsICIuLiJ9LCB7MHgyMDI3LCAiLiJ9LCB7MHgyMDMyLCAiJyJ9LA0KLSAgICB7MHgyMDMzLCAiXCIifSwgezB4MjAzNSwgIicifSwgezB4MjAzNiwgIlwiIn0sIHsweDIwMzgsICJeIn0sDQotICAgIHsweDIwMzksICI8In0sIHsweDIwM2EsICI+In0sIHsweDIwM2IsICIqIn0sIHsweDIwM2MsICIhISJ9LA0KLSAgICB7MHgyMDNkLCAiPyEifSwgezB4MjAzZSwgIi0ifSwgezB4MjA0NCwgIi8ifSwgezB4MjA0NywgIj8/In0sDQotICAgIHsweDIwNDgsICI/ISJ9LCB7MHgyMDQ5LCAiIT8ifSwgezB4MjA0ZSwgIioifSwgezB4MjA1MiwgIiUifSwNCi0gICAgezB4MjEyMiwgIihUTSkifSwNCi0gICAgezB4MjIxMiwgIi0ifSwgezB4MjIxNSwgIi8ifSwgezB4MjIxNiwgIlxcIn0sIHsweDIyMTcsICIqIn0sDQotICAgIHsweDIyMTgsICIqIn0sIHsweDIyMTksICIqIn0sIHsweDIyMjMsICJ8In0sIHsweDIyYzUsICIuIn0sDQotICAgIHsweDI2NmYsICIjIn0sDQotICAgIHswWEY2RDksICIoQykifSwgezBYRjZEQSwgIihDKSJ9LCB7MFhGNkRCLCAiKFRNKSJ9LA0KLSAgICB7MFhGOEU4LCAiKEMpIn0sIHsweGY4ZTksICIoQykifSwgezBYRjhFQSwgIihUTSkifSwNCi0NCi0gICAgezB4ZmIwMSwgImZpIn0sIHsweGZiMDIsICJmbCJ9DQotfTsNCi1jb25zdCBGWF9DSEFSKiBGQ1NfR2V0QWx0U3RyKEZYX1dDSEFSIHVuaWNvZGUpDQotew0KLSAgICBpbnQgYmVnaW4gPSAwOw0KLSAgICBpbnQgZW5kID0gc2l6ZW9mIFVuaWNvZGVBbHRzIC8gc2l6ZW9mKHN0cnVjdCBfVW5pY29kZUFsdCkgLSAxOw0KLSAgICB3aGlsZSAoYmVnaW4gPD0gZW5kKSB7DQotICAgICAgICBpbnQgbWlkZGxlID0gKGJlZ2luICsgZW5kKSAvIDI7DQotICAgICAgICBGWF9XT1JEIG1pZGRsZWNvZGUgPSBVbmljb2RlQWx0c1ttaWRkbGVdLm1fVW5pY29kZTsNCi0gICAgICAgIGlmIChtaWRkbGVjb2RlID4gdW5pY29kZSkgew0KLSAgICAgICAgICAgIGVuZCA9IG1pZGRsZSAtIDE7DQotICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZWNvZGUgPCB1bmljb2RlKSB7DQotICAgICAgICAgICAgYmVnaW4gPSBtaWRkbGUgKyAxOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICByZXR1cm4gVW5pY29kZUFsdHNbbWlkZGxlXS5tX0FsdGVyOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1jb25zdCBGWF9XT1JEIFN0YW5kYXJkRW5jb2RpbmdbMjU2XSA9IHsNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAyMCwgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgyMDE5LA0KLSAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4MDAyZiwgMHgwMDMwLCAweDAwMzEsDQotICAgIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsIDB4MDAzOCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwNCi0gICAgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLCAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LA0KLSAgICAweDAwNDYsIDB4MDA0NywgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsDQotICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LCAweDAwNTgsIDB4MDA1OSwNCi0gICAgMHgwMDVhLCAweDAwNWIsIDB4MDA1YywgMHgwMDVkLCAweDAwNWUsIDB4MDA1ZiwgMHgyMDE4LCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLA0KLSAgICAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsIDB4MDA2OCwgMHgwMDY5LCAweDAwNmEsIDB4MDA2YiwgMHgwMDZjLCAweDAwNmQsDQotICAgIDB4MDA2ZSwgMHgwMDZmLCAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywNCi0gICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMDdiLCAweDAwN2MsIDB4MDA3ZCwgMHgwMDdlLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDBhMSwgMHgwMGEyLCAweDAwYTMsIDB4MjA0NCwgMHgwMGE1LCAweDAxOTIsIDB4MDBhNywgMHgwMGE0LCAweDAwMjcsDQotICAgIDB4MjAxYywgMHgwMGFiLCAweDIwMzksIDB4MjAzYSwgMHhmYjAxLCAweGZiMDIsIDB4MDAwMCwgMHgyMDEzLCAweDIwMjAsIDB4MjAyMSwNCi0gICAgMHgwMGI3LCAweDAwMDAsIDB4MDBiNiwgMHgyMDIyLCAweDIwMWEsIDB4MjAxZSwgMHgyMDFkLCAweDAwYmIsIDB4MjAyNiwgMHgyMDMwLA0KLSAgICAweDAwMDAsIDB4MDBiZiwgMHgwMDAwLCAweDAwNjAsIDB4MDBiNCwgMHgwMmM2LCAweDAyZGMsIDB4MDBhZiwgMHgwMmQ4LCAweDAyZDksDQotICAgIDB4MDBhOCwgMHgwMDAwLCAweDAyZGEsIDB4MDBiOCwgMHgwMDAwLCAweDAyZGQsIDB4MDJkYiwgMHgwMmM3LCAweDIwMTQsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMGM2LCAweDAwMDAsIDB4MDBhYSwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAxNDEsIDB4MDBkOCwgMHgwMTUyLCAweDAwYmEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwZTYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDEzMSwgMHgwMDAwLCAweDAwMDAsIDB4MDE0MiwgMHgwMGY4LA0KLSAgICAweDAxNTMsIDB4MDBkZiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwDQotfTsNCi1jb25zdCBGWF9XT1JEIE1hY1JvbWFuRW5jb2RpbmdbMjU2XSA9IHsNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAyMCwgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LA0KLSAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4MDAyZiwgMHgwMDMwLCAweDAwMzEsDQotICAgIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsIDB4MDAzOCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwNCi0gICAgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLCAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LA0KLSAgICAweDAwNDYsIDB4MDA0NywgMHgwMDQ4LCAweDAwNDksIDB4MDA0YSwgMHgwMDRiLCAweDAwNGMsIDB4MDA0ZCwgMHgwMDRlLCAweDAwNGYsDQotICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LCAweDAwNTgsIDB4MDA1OSwNCi0gICAgMHgwMDVhLCAweDAwNWIsIDB4MDA1YywgMHgwMDVkLCAweDAwNWUsIDB4MDA1ZiwgMHgwMDYwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLA0KLSAgICAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsIDB4MDA2OCwgMHgwMDY5LCAweDAwNmEsIDB4MDA2YiwgMHgwMDZjLCAweDAwNmQsDQotICAgIDB4MDA2ZSwgMHgwMDZmLCAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywNCi0gICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMDdiLCAweDAwN2MsIDB4MDA3ZCwgMHgwMDdlLCAweDAwMDAsIDB4MDBjNCwgMHgwMGM1LA0KLSAgICAweDAwYzcsIDB4MDBjOSwgMHgwMGQxLCAweDAwZDYsIDB4MDBkYywgMHgwMGUxLCAweDAwZTAsIDB4MDBlMiwgMHgwMGU0LCAweDAwZTMsDQotICAgIDB4MDBlNSwgMHgwMGU3LCAweDAwZTksIDB4MDBlOCwgMHgwMGVhLCAweDAwZWIsIDB4MDBlZCwgMHgwMGVjLCAweDAwZWUsIDB4MDBlZiwNCi0gICAgMHgwMGYxLCAweDAwZjMsIDB4MDBmMiwgMHgwMGY0LCAweDAwZjYsIDB4MDBmNSwgMHgwMGZhLCAweDAwZjksIDB4MDBmYiwgMHgwMGZjLA0KLSAgICAweDIwMjAsIDB4MDBiMCwgMHgwMGEyLCAweDAwYTMsIDB4MDBhNywgMHgyMDIyLCAweDAwYjYsIDB4MDBkZiwgMHgwMGFlLCAweDAwYTksDQotICAgIDB4MjEyMiwgMHgwMGI0LCAweDAwYTgsIDB4MDAwMCwgMHgwMGM2LCAweDAwZDgsIDB4MDAwMCwgMHgwMGIxLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMGE1LCAweDAwYjUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwYWEsIDB4MDBiYSwgMHgwMDAwLA0KLSAgICAweDAwZTYsIDB4MDBmOCwgMHgwMGJmLCAweDAwYTMsIDB4MDBhYywgMHgwMDAwLCAweDAxOTIsIDB4MDAwMCwgMHgwMDAwLCAweDAwYWIsDQotICAgIDB4MDBiYiwgMHgyMDI2LCAweDAwMjAsIDB4MDBjMCwgMHgwMGMzLCAweDAwZDUsIDB4MDE1MiwgMHgwMTUzLCAweDIwMTMsIDB4MjAxNCwNCi0gICAgMHgyMDFjLCAweDIwMWQsIDB4MjAxOCwgMHgyMDE5LCAweDAwZjcsIDB4MDAwMCwgMHgwMGZmLCAweDAxNzgsIDB4MjA0NCwgMHgwMGE0LA0KLSAgICAweDIwMzksIDB4MjAzYSwgMHhmYjAxLCAweGZiMDIsIDB4MjAyMSwgMHgwMGI3LCAweDIwMWEsIDB4MjAxZSwgMHgyMDMwLCAweDAwYzIsDQotICAgIDB4MDBjYSwgMHgwMGMxLCAweDAwY2IsIDB4MDBjOCwgMHgwMGNkLCAweDAwY2UsIDB4MDBjZiwgMHgwMGNjLCAweDAwZDMsIDB4MDBkNCwNCi0gICAgMHgwMDAwLCAweDAwZDIsIDB4MDBkYSwgMHgwMGRiLCAweDAwZDksIDB4MDEzMSwgMHgwMmM2LCAweDAyZGMsIDB4MDBhZiwgMHgwMmQ4LA0KLSAgICAweDAyZDksIDB4MDJkYSwgMHgwMGI4LCAweDAyZGQsIDB4MDJkYiwgMHgwMmM3DQotfTsNCi1jb25zdCBGWF9XT1JEIEFkb2JlV2luQW5zaUVuY29kaW5nWzI1Nl0gPSB7DQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMjAsIDB4MDAyMSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywNCi0gICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsDQotICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LA0KLSAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwNCi0gICAgMHgwMDQwLCAweDAwNDEsIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsDQotICAgIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLA0KLSAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywNCi0gICAgMHgwMDU4LCAweDAwNTksIDB4MDA1YSwgMHgwMDViLCAweDAwNWMsIDB4MDA1ZCwgMHgwMDVlLCAweDAwNWYsDQotICAgIDB4MDA2MCwgMHgwMDYxLCAweDAwNjIsIDB4MDA2MywgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LA0KLSAgICAweDAwNjgsIDB4MDA2OSwgMHgwMDZhLCAweDAwNmIsIDB4MDA2YywgMHgwMDZkLCAweDAwNmUsIDB4MDA2ZiwNCi0gICAgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsDQotICAgIDB4MDA3OCwgMHgwMDc5LCAweDAwN2EsIDB4MDA3YiwgMHgwMDdjLCAweDAwN2QsIDB4MDA3ZSwgMHgyMDIyLA0KLSAgICAweDIwYWMsIDB4MjAyMiwgMHgyMDFhLCAweDAxOTIsIDB4MjAxZSwgMHgyMDI2LCAweDIwMjAsIDB4MjAyMSwNCi0gICAgMHgwMmM2LCAweDIwMzAsIDB4MDE2MCwgMHgyMDM5LAkweDAxNTIsIDB4MjAyMiwgMHgwMTdkLCAweDIwMjIsDQotICAgIDB4MjAyMiwgMHgyMDE4LCAweDIwMTksIDB4MjAxYywgMHgyMDFkLCAweDIwMjIsIDB4MjAxMywgMHgyMDE0LA0KLSAgICAweDAyZGMsIDB4MjEyMiwgMHgwMTYxLCAweDIwM2EsIDB4MDE1MywgMHgyMDIyLCAweDAxN2UsIDB4MDE3OCwNCi0gICAgMHgwMDIwLCAweDAwYTEsIDB4MDBhMiwgMHgwMGEzLCAweDAwYTQsIDB4MDBhNSwgMHgwMGE2LCAweDAwYTcsDQotICAgIDB4MDBhOCwgMHgwMGE5LCAweDAwYWEsIDB4MDBhYiwgMHgwMGFjLCAweDAwMmQsIDB4MDBhZSwgMHgwMGFmLA0KLSAgICAweDAwYjAsIDB4MDBiMSwgMHgwMGIyLCAweDAwYjMsIDB4MDBiNCwgMHgwMGI1LCAweDAwYjYsIDB4MDBiNywNCi0gICAgMHgwMGI4LCAweDAwYjksIDB4MDBiYSwgMHgwMGJiLCAweDAwYmMsIDB4MDBiZCwgMHgwMGJlLCAweDAwYmYsDQotICAgIDB4MDBjMCwgMHgwMGMxLCAweDAwYzIsIDB4MDBjMywgMHgwMGM0LCAweDAwYzUsIDB4MDBjNiwgMHgwMGM3LA0KLSAgICAweDAwYzgsIDB4MDBjOSwgMHgwMGNhLCAweDAwY2IsIDB4MDBjYywgMHgwMGNkLCAweDAwY2UsIDB4MDBjZiwNCi0gICAgMHgwMGQwLCAweDAwZDEsIDB4MDBkMiwgMHgwMGQzLCAweDAwZDQsIDB4MDBkNSwgMHgwMGQ2LCAweDAwZDcsDQotICAgIDB4MDBkOCwgMHgwMGQ5LCAweDAwZGEsIDB4MDBkYiwgMHgwMGRjLCAweDAwZGQsIDB4MDBkZSwgMHgwMGRmLA0KLSAgICAweDAwZTAsIDB4MDBlMSwgMHgwMGUyLCAweDAwZTMsIDB4MDBlNCwgMHgwMGU1LCAweDAwZTYsIDB4MDBlNywNCi0gICAgMHgwMGU4LCAweDAwZTksIDB4MDBlYSwgMHgwMGViLCAweDAwZWMsIDB4MDBlZCwgMHgwMGVlLCAweDAwZWYsDQotICAgIDB4MDBmMCwgMHgwMGYxLCAweDAwZjIsIDB4MDBmMywgMHgwMGY0LCAweDAwZjUsIDB4MDBmNiwgMHgwMGY3LA0KLSAgICAweDAwZjgsIDB4MDBmOSwgMHgwMGZhLCAweDAwZmIsIDB4MDBmYywgMHgwMGZkLCAweDAwZmUsIDB4MDBmZg0KLX07DQotZXh0ZXJuIGNvbnN0IEZYX1dPUkQgUERGRG9jRW5jb2RpbmdbMjU2XTsNCi1jb25zdCBGWF9XT1JEIE1hY0V4cGVydEVuY29kaW5nWzI1Nl0gPSB7DQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMjAsIDB4ZjcyMSwgMHhmNmY4LCAweGY3YTIsIDB4ZjcyNCwgMHhmNmU0LCAweGY3MjYsIDB4ZjdiNCwNCi0gICAgMHgyMDdkLCAweDIwN2UsIDB4MjAyNSwgMHgyMDI0LCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDIwNDQsIDB4ZjczMCwgMHhmNzMxLA0KLSAgICAweGY3MzIsIDB4ZjczMywgMHhmNzM0LCAweGY3MzUsIDB4ZjczNiwgMHhmNzM3LCAweGY3MzgsIDB4ZjczOSwgMHgwMDNhLCAweDAwM2IsDQotICAgIDB4MDAwMCwgMHhmNmRlLCAweDAwMDAsIDB4ZjczZiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweGY3ZjAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwYmMsIDB4MDBiZCwgMHgwMGJlLCAweDIxNWIsIDB4MjE1YywgMHgyMTVkLCAweDIxNWUsIDB4MjE1MywgMHgyMTU0LA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweGZiMDAsIDB4ZmIwMSwgMHhmYjAyLCAweGZiMDMsDQotICAgIDB4ZmIwNCwgMHgyMDhkLCAweDAwMDAsIDB4MjA4ZSwgMHhmNmY2LCAweGY2ZTUsIDB4Zjc2MCwgMHhmNzYxLCAweGY3NjIsIDB4Zjc2MywNCi0gICAgMHhmNzY0LCAweGY3NjUsIDB4Zjc2NiwgMHhmNzY3LCAweGY3NjgsIDB4Zjc2OSwgMHhmNzZhLCAweGY3NmIsIDB4Zjc2YywgMHhmNzZkLA0KLSAgICAweGY3NmUsIDB4Zjc2ZiwgMHhmNzcwLCAweGY3NzEsIDB4Zjc3MiwgMHhmNzczLCAweGY3NzQsIDB4Zjc3NSwgMHhmNzc2LCAweGY3NzcsDQotICAgIDB4Zjc3OCwgMHhmNzc5LCAweGY3N2EsIDB4MjBhMSwgMHhmNmRjLCAweGY2ZGQsIDB4ZjZmZSwgMHgwMDAwLCAweDAwMDAsIDB4ZjZlOSwNCi0gICAgMHhmNmUwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ZjdlMSwgMHhmN2UwLCAweGY3ZTIsIDB4ZjdlNCwgMHhmN2UzLA0KLSAgICAweGY3ZTUsIDB4ZjdlNywgMHhmN2U5LCAweGY3ZTgsIDB4ZjdlYSwgMHhmN2ViLCAweGY3ZWQsIDB4ZjdlYywgMHhmN2VlLCAweGY3ZWYsDQotICAgIDB4ZjdmMSwgMHhmN2YzLCAweGY3ZjIsIDB4ZjdmNCwgMHhmN2Y2LCAweGY3ZjUsIDB4ZjdmYSwgMHhmN2Y5LCAweGY3ZmIsIDB4ZjdmYywNCi0gICAgMHgwMDAwLCAweDIwNzgsIDB4MjA4NCwgMHgyMDgzLCAweDIwODYsIDB4MjA4OCwgMHgyMDg3LCAweGY2ZmQsIDB4MDAwMCwgMHhmNmRmLA0KLSAgICAweDIwODIsIDB4MDAwMCwgMHhmN2E4LCAweDAwMDAsIDB4ZjZmNSwgMHhmNmZkLCAweDIwODUsIDB4MDAwMCwgMHhmNmUxLCAweGY2ZTcsDQotICAgIDB4ZjdmZCwgMHgwMDAwLCAweGY2ZTMsIDB4MDAwMCwgMHgwMDAwLCAweGY3ZmUsIDB4MDAwMCwgMHgyMDg5LCAweDIwODAsIDB4ZjZmZiwNCi0gICAgMHhmN2U2LCAweGY3ZjgsIDB4ZjdiZiwgMHgyMDgxLCAweGY2ZTksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4ZjdiOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ZjZmYSwgMHgyMDEyLCAweGY2ZTYsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHhmN2ExLCAweDAwMDAsIDB4ZjdmZiwgMHgwMDAwLCAweDAwYjksIDB4MDBiMiwNCi0gICAgMHgwMGIzLCAweDIwNzQsIDB4MjA3NSwgMHgyMDc2LCAweDIwNzcsIDB4MjA3OSwgMHgyMDcwLCAweDAwMDAsIDB4ZjZlYywgMHhmNmYxLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweGY2ZWQsIDB4ZjZmMiwgMHhmNmViLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHhmNmVlLCAweGY2ZmIsIDB4ZjZmNCwgMHhmN2FmLCAweGY2ZWEsIDB4MjA3ZiwgMHhmNmVmLCAweGY2ZTIsIDB4ZjZlOCwNCi0gICAgMHhmNmY3LCAweGY2ZmMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMA0KLX07DQotY29uc3QgRlhfV09SRCBBZG9iZVN5bWJvbEVuY29kaW5nWzI1Nl0gPSB7DQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMjAsIDB4MDAyMSwgMHgyMjAwLCAweDAwMjMsIDB4MjIwMywgMHgwMDI1LCAweDAwMjYsIDB4MjIwQiwNCi0gICAgMHgwMDI4LCAweDAwMjksIDB4MjIxNywgMHgwMDJCLCAweDAwMkMsIDB4MjIxMiwgMHgwMDJFLCAweDAwMkYsDQotICAgIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LA0KLSAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNBLCAweDAwM0IsIDB4MDAzQywgMHgwMDNELCAweDAwM0UsIDB4MDAzRiwNCi0gICAgMHgyMjQ1LCAweDAzOTEsIDB4MDM5MiwgMHgwM0E3LCAweDAzOTQsIDB4MDM5NSwgMHgwM0E2LCAweDAzOTMsDQotICAgIDB4MDM5NywgMHgwMzk5LCAweDAzRDEsIDB4MDM5QSwgMHgwMzlCLCAweDAzOUMsIDB4MDM5RCwgMHgwMzlGLA0KLSAgICAweDAzQTAsIDB4MDM5OCwgMHgwM0ExLCAweDAzQTMsIDB4MDNBNCwgMHgwM0E1LCAweDAzQzIsIDB4MDNBOSwNCi0gICAgMHgwMzlFLCAweDAzQTgsIDB4MDM5NiwgMHgwMDVCLCAweDIyMzQsIDB4MDA1RCwgMHgyMkE1LCAweDAwNUYsDQotICAgIDB4RjhFNSwgMHgwM0IxLCAweDAzQjIsIDB4MDNDNywgMHgwM0I0LCAweDAzQjUsIDB4MDNDNiwgMHgwM0IzLA0KLSAgICAweDAzQjcsIDB4MDNCOSwgMHgwM0Q1LCAweDAzQkEsIDB4MDNCQiwgMHgwM0JDLCAweDAzQkQsIDB4MDNCRiwNCi0gICAgMHgwM0MwLCAweDAzQjgsIDB4MDNDMSwgMHgwM0MzLCAweDAzQzQsIDB4MDNDNSwgMHgwM0Q2LCAweDAzQzksDQotICAgIDB4MDNCRSwgMHgwM0M4LCAweDAzQjYsIDB4MDA3QiwgMHgwMDdDLCAweDAwN0QsIDB4MjIzQywgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgyMEFDLCAweDAzRDIsIDB4MjAzMiwgMHgyMjY0LCAweDIwNDQsIDB4MjIxRSwgMHgwMTkyLCAweDI2NjMsDQotICAgIDB4MjY2NiwgMHgyNjY1LCAweDI2NjAsIDB4MjE5NCwgMHgyMTkwLCAweDIxOTEsIDB4MjE5MiwgMHgyMTkzLA0KLSAgICAweDAwQjAsIDB4MDBCMSwgMHgyMDMzLCAweDIyNjUsIDB4MDBENywgMHgyMjFELCAweDIyMDIsIDB4MjAyMiwNCi0gICAgMHgwMEY3LCAweDIyNjAsIDB4MjI2MSwgMHgyMjQ4LCAweDIwMjYsIDB4RjhFNiwgMHhGOEU3LCAweDIxQjUsDQotICAgIDB4MjEzNSwgMHgyMTExLCAweDIxMUMsIDB4MjExOCwgMHgyMjk3LCAweDIyOTUsIDB4MjIwNSwgMHgyMjI5LA0KLSAgICAweDIyMkEsIDB4MjI4MywgMHgyMjg3LCAweDIyODQsIDB4MjI4MiwgMHgyMjg2LCAweDIyMDgsIDB4MjIwOSwNCi0gICAgMHgyMjIwLCAweDIyMDcsIDB4RjZEQSwgMHhGNkQ5LCAweEY2REIsIDB4MjIwRiwgMHgyMjFBLCAweDIyQzUsDQotICAgIDB4MDBBQywgMHgyMjI3LCAweDIyMjgsIDB4MjFENCwgMHgyMUQwLCAweDIxRDEsIDB4MjFEMiwgMHgyMUQzLA0KLSAgICAweDI1Q0EsIDB4MjMyOSwgMHhGOEU4LCAweEY4RTksIDB4RjhFQSwgMHgyMjExLCAweEY4RUIsIDB4RjhFQywNCi0gICAgMHhGOEVELCAweEY4RUUsIDB4RjhFRiwgMHhGOEYwLCAweEY4RjEsIDB4RjhGMiwgMHhGOEYzLCAweEY4RjQsDQotICAgIDB4MDAwMCwgMHgyMzJBLCAweDIyMkIsIDB4MjMyMCwgMHhGOEY1LCAweDIzMjEsIDB4RjhGNiwgMHhGOEY3LA0KLSAgICAweEY4RjgsIDB4RjhGOSwgMHhGOEZBLCAweEY4RkIsIDB4RjhGQywgMHhGOEZELCAweEY4RkUsIDB4MDAwMCwNCi19Ow0KLWNvbnN0IEZYX1dPUkQgWmFwZkVuY29kaW5nWzI1Nl0gPSB7DQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMjAsIDB4MjcwMSwgMHgyNzAyLCAweDI3MDMsIDB4MjcwNCwgMHgyNjBFLCAweDI3MDYsIDB4MjcwNywNCi0gICAgMHgyNzA4LCAweDI3MDksIDB4MjYxQiwgMHgyNjFFLCAweDI3MEMsIDB4MjcwRCwgMHgyNzBFLCAweDI3MEYsDQotICAgIDB4MjcxMCwgMHgyNzExLCAweDI3MTIsIDB4MjcxMywgMHgyNzE0LCAweDI3MTUsIDB4MjcxNiwgMHgyNzE3LA0KLSAgICAweDI3MTgsIDB4MjcxOSwgMHgyNzFBLCAweDI3MUIsIDB4MjcxQywgMHgyNzFELCAweDI3MUUsIDB4MjcxRiwNCi0gICAgMHgyNzIwLCAweDI3MjEsIDB4MjcyMiwgMHgyNzIzLCAweDI3MjQsIDB4MjcyNSwgMHgyNzI2LCAweDI3MjcsDQotICAgIDB4MjYwNSwgMHgyNzI5LCAweDI3MkEsIDB4MjcyQiwgMHgyNzJDLCAweDI3MkQsIDB4MjcyRSwgMHgyNzJGLA0KLSAgICAweDI3MzAsIDB4MjczMSwgMHgyNzMyLCAweDI3MzMsIDB4MjczNCwgMHgyNzM1LCAweDI3MzYsIDB4MjczNywNCi0gICAgMHgyNzM4LCAweDI3MzksIDB4MjczQSwgMHgyNzNCLCAweDI3M0MsIDB4MjczRCwgMHgyNzNFLCAweDI3M0YsDQotICAgIDB4Mjc0MCwgMHgyNzQxLCAweDI3NDIsIDB4Mjc0MywgMHgyNzQ0LCAweDI3NDUsIDB4Mjc0NiwgMHgyNzQ3LA0KLSAgICAweDI3NDgsIDB4Mjc0OSwgMHgyNzRBLCAweDI3NEIsIDB4MjVDRiwgMHgyNzRELCAweDI1QTAsIDB4Mjc0RiwNCi0gICAgMHgyNzUwLCAweDI3NTEsIDB4Mjc1MiwgMHgyNUIyLCAweDI1QkMsIDB4MjVDNiwgMHgyNzU2LCAweDI1RDcsDQotICAgIDB4Mjc1OCwgMHgyNzU5LCAweDI3NUEsIDB4Mjc1QiwgMHgyNzVDLCAweDI3NUQsIDB4Mjc1RSwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDI3NjEsIDB4Mjc2MiwgMHgyNzYzLCAweDI3NjQsIDB4Mjc2NSwgMHgyNzY2LCAweDI3NjcsDQotICAgIDB4MjY2MywgMHgyNjY2LCAweDI2NjUsIDB4MjY2MCwgMHgyNDYwLCAweDI0NjEsIDB4MjQ2MiwgMHgyNDYzLA0KLSAgICAweDI0NjQsIDB4MjQ2NSwgMHgyNDY2LCAweDI0NjcsIDB4MjQ2OCwgMHgyNDY5LCAweDI3NzYsIDB4Mjc3NywNCi0gICAgMHgyNzc4LCAweDI3NzksIDB4Mjc3QSwgMHgyNzdCLCAweDI3N0MsIDB4Mjc3RCwgMHgyNzdFLCAweDI3N0YsDQotICAgIDB4Mjc4MCwgMHgyNzgxLCAweDI3ODIsIDB4Mjc4MywgMHgyNzg0LCAweDI3ODUsIDB4Mjc4NiwgMHgyNzg3LA0KLSAgICAweDI3ODgsIDB4Mjc4OSwgMHgyNzhBLCAweDI3OEIsIDB4Mjc4QywgMHgyNzhELCAweDI3OEUsIDB4Mjc4RiwNCi0gICAgMHgyNzkwLCAweDI3OTEsIDB4Mjc5MiwgMHgyNzkzLCAweDI3OTQsIDB4MjE5MiwgMHgyMTk0LCAweDIxOTUsDQotICAgIDB4Mjc5OCwgMHgyNzk5LCAweDI3OUEsIDB4Mjc5QiwgMHgyNzlDLCAweDI3OUQsIDB4Mjc5RSwgMHgyNzlGLA0KLSAgICAweDI3QTAsIDB4MjdBMSwgMHgyN0EyLCAweDI3QTMsIDB4MjdBNCwgMHgyN0E1LCAweDI3QTYsIDB4MjdBNywNCi0gICAgMHgyN0E4LCAweDI3QTksIDB4MjdBQSwgMHgyN0FCLCAweDI3QUMsIDB4MjdBRCwgMHgyN0FFLCAweDI3QUYsDQotICAgIDB4MDAwMCwgMHgyN0IxLCAweDI3QjIsIDB4MjdCMywgMHgyN0I0LCAweDI3QjUsIDB4MjdCNiwgMHgyN0I3LA0KLSAgICAweDI3QjgsIDB4MjdCOSwgMHgyN0JBLCAweDI3QkIsIDB4MjdCQywgMHgyN0JELCAweDI3QkUsIDB4MDAwMCwNCi19Ow0KLWNvbnN0IEZYX0xQQ1NUUiBTdGFuZGFyZEVuY29kaW5nTmFtZXNbMjI0XSA9IHsNCi0gICAgInNwYWNlIiwgImV4Y2xhbSIsICJxdW90ZWRibCIsICJudW1iZXJzaWduIiwgImRvbGxhciIsICJwZXJjZW50IiwgImFtcGVyc2FuZCIsICJxdW90ZXJpZ2h0IiwNCi0gICAgInBhcmVubGVmdCIsICJwYXJlbnJpZ2h0IiwgImFzdGVyaXNrIiwgInBsdXMiLCAiY29tbWEiLCAiaHlwaGVuIiwgInBlcmlvZCIsICJzbGFzaCIsDQotICAgICJ6ZXJvIiwgIm9uZSIsICJ0d28iLCAidGhyZWUiLCAiZm91ciIsICJmaXZlIiwgInNpeCIsICJzZXZlbiIsDQotICAgICJlaWdodCIsICJuaW5lIiwgImNvbG9uIiwgInNlbWljb2xvbiIsICJsZXNzIiwgImVxdWFsIiwgImdyZWF0ZXIiLCAicXVlc3Rpb24iLA0KLSAgICAiYXQiLCAiQSIsICJCIiwgIkMiLCAiRCIsICJFIiwgIkYiLCAiRyIsDQotICAgICJIIiwgIkkiLCAiSiIsICJLIiwgIkwiLCAiTSIsICJOIiwgIk8iLA0KLSAgICAiUCIsICJRIiwgIlIiLCAiUyIsICJUIiwgIlUiLCAiViIsICJXIiwNCi0gICAgIlgiLCAiWSIsICJaIiwgImJyYWNrZXRsZWZ0IiwgImJhY2tzbGFzaCIsICJicmFja2V0cmlnaHQiLCAiYXNjaWljaXJjdW0iLCAidW5kZXJzY29yZSIsDQotICAgICJxdW90ZWxlZnQiLCAiYSIsICJiIiwgImMiLCAiZCIsICJlIiwgImYiLCAiZyIsDQotICAgICJoIiwgImkiLCAiaiIsICJrIiwgImwiLCAibSIsICJuIiwgIm8iLA0KLSAgICAicCIsICJxIiwgInIiLCAicyIsICJ0IiwgInUiLCAidiIsICJ3IiwNCi0gICAgIngiLCAieSIsICJ6IiwgImJyYWNlbGVmdCIsICJiYXIiLCAiYnJhY2VyaWdodCIsICJhc2NpaXRpbGRlIiwgTlVMTCwNCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwNCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwNCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwNCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwNCi0gICAgTlVMTCwgImV4Y2xhbWRvd24iLCAiY2VudCIsICJzdGVybGluZyIsICJmcmFjdGlvbiIsICJ5ZW4iLCAiZmxvcmluIiwgInNlY3Rpb24iLA0KLSAgICAiY3VycmVuY3kiLCAicXVvdGVzaW5nbGUiLCAicXVvdGVkYmxsZWZ0IiwgImd1aWxsZW1vdGxlZnQiLCAiZ3VpbHNpbmdsbGVmdCIsICJndWlsc2luZ2xyaWdodCIsICJmaSIsICJmbCIsDQotICAgIE5VTEwsICJlbmRhc2giLCAiZGFnZ2VyIiwgImRhZ2dlcmRibCIsICJwZXJpb2RjZW50ZXJlZCIsIE5VTEwsICJwYXJhZ3JhcGgiLCAiYnVsbGV0IiwNCi0gICAgInF1b3Rlc2luZ2xiYXNlIiwgInF1b3RlZGJsYmFzZSIsICJxdW90ZWRibHJpZ2h0IiwgImd1aWxsZW1vdHJpZ2h0IiwgImVsbGlwc2lzIiwgInBlcnRob3VzYW5kIiwgTlVMTCwgInF1ZXN0aW9uZG93biIsDQotICAgIE5VTEwsICJncmF2ZSIsICJhY3V0ZSIsICJjaXJjdW1mbGV4IiwgInRpbGRlIiwgIm1hY3JvbiIsICJicmV2ZSIsICJkb3RhY2NlbnQiLA0KLSAgICAiZGllcmVzaXMiLCBOVUxMLCAicmluZyIsICJjZWRpbGxhIiwgTlVMTCwgImh1bmdhcnVtbGF1dCIsICJvZ29uZWsiLCAiY2Fyb24iLA0KLSAgICAiZW1kYXNoIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwNCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwNCi0gICAgTlVMTCwgIkFFIiwgTlVMTCwgIm9yZGZlbWluaW5lIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwNCi0gICAgIkxzbGFzaCIsICJPc2xhc2giLCAiT0UiLCAib3JkbWFzY3VsaW5lIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwNCi0gICAgTlVMTCwgImFlIiwgTlVMTCwgTlVMTCwgTlVMTCwgImRvdGxlc3NpIiwgTlVMTCwgTlVMTCwNCi0gICAgImxzbGFzaCIsICJvc2xhc2giLCAib2UiLCAiZ2VybWFuZGJscyIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsDQotfTsNCi1jb25zdCBGWF9MUENTVFIgQWRvYmVXaW5BbnNpRW5jb2RpbmdOYW1lc1syMjRdID0gew0KLSAgICAic3BhY2UiLCAiZXhjbGFtIiwgInF1b3RlZGJsIiwgIm51bWJlcnNpZ24iLCAiZG9sbGFyIiwgInBlcmNlbnQiLCAiYW1wZXJzYW5kIiwgInF1b3Rlc2luZ2xlIiwNCi0gICAgInBhcmVubGVmdCIsICJwYXJlbnJpZ2h0IiwgImFzdGVyaXNrIiwgInBsdXMiLCAiY29tbWEiLCAiaHlwaGVuIiwgInBlcmlvZCIsICJzbGFzaCIsDQotICAgICJ6ZXJvIiwgIm9uZSIsICJ0d28iLCAidGhyZWUiLCAiZm91ciIsICJmaXZlIiwgInNpeCIsICJzZXZlbiIsDQotICAgICJlaWdodCIsICJuaW5lIiwgImNvbG9uIiwgInNlbWljb2xvbiIsICJsZXNzIiwgImVxdWFsIiwgImdyZWF0ZXIiLCAicXVlc3Rpb24iLA0KLSAgICAiYXQiLCAiQSIsICJCIiwgIkMiLCAiRCIsICJFIiwgIkYiLCAiRyIsDQotICAgICJIIiwgIkkiLCAiSiIsICJLIiwgIkwiLCAiTSIsICJOIiwgIk8iLA0KLSAgICAiUCIsICJRIiwgIlIiLCAiUyIsICJUIiwgIlUiLCAiViIsICJXIiwNCi0gICAgIlgiLCAiWSIsICJaIiwgImJyYWNrZXRsZWZ0IiwgImJhY2tzbGFzaCIsICJicmFja2V0cmlnaHQiLCAiYXNjaWljaXJjdW0iLCAidW5kZXJzY29yZSIsDQotICAgICJncmF2ZSIsICJhIiwgImIiLCAiYyIsICJkIiwgImUiLCAiZiIsICJnIiwNCi0gICAgImgiLCAiaSIsICJqIiwgImsiLCAibCIsICJtIiwgIm4iLCAibyIsDQotICAgICJwIiwgInEiLCAiciIsICJzIiwgInQiLCAidSIsICJ2IiwgInciLA0KLSAgICAieCIsICJ5IiwgInoiLCAiYnJhY2VsZWZ0IiwgImJhciIsICJicmFjZXJpZ2h0IiwgImFzY2lpdGlsZGUiLCAiYnVsbGV0IiwNCi0gICAgIkV1cm8iLCAiYnVsbGV0IiwgInF1b3Rlc2luZ2xiYXNlIiwgImZsb3JpbiIsICJxdW90ZWRibGJhc2UiLCAiZWxsaXBzaXMiLCAiZGFnZ2VyIiwgImRhZ2dlcmRibCIsDQotICAgICJjaXJjdW1mbGV4IiwgInBlcnRob3VzYW5kIiwgIlNjYXJvbiIsICJndWlsc2luZ2xsZWZ0IiwgIk9FIiwgImJ1bGxldCIsICJaY2Fyb24iLCAiYnVsbGV0IiwNCi0gICAgImJ1bGxldCIsICJxdW90ZWxlZnQiLCAicXVvdGVyaWdodCIsICJxdW90ZWRibGxlZnQiLCAicXVvdGVkYmxyaWdodCIsICJidWxsZXQiLCAiZW5kYXNoIiwgImVtZGFzaCIsDQotICAgICJ0aWxkZSIsICJ0cmFkZW1hcmsiLCAic2Nhcm9uIiwgImd1aWxzaW5nbHJpZ2h0IiwgIm9lIiwgImJ1bGxldCIsICJ6Y2Fyb24iLCAiWWRpZXJlc2lzIiwNCi0gICAgInNwYWNlIiwgImV4Y2xhbWRvd24iLCAiY2VudCIsICJzdGVybGluZyIsICJjdXJyZW5jeSIsICJ5ZW4iLCAiYnJva2VuYmFyIiwgInNlY3Rpb24iLA0KLSAgICAiZGllcmVzaXMiLCAiY29weXJpZ2h0IiwgIm9yZGZlbWluaW5lIiwgImd1aWxsZW1vdGxlZnQiLCAibG9naWNhbG5vdCIsICJoeXBoZW4iLCAicmVnaXN0ZXJlZCIsICJtYWNyb24iLA0KLSAgICAiZGVncmVlIiwgInBsdXNtaW51cyIsICJ0d29zdXBlcmlvciIsICJ0aHJlZXN1cGVyaW9yIiwgImFjdXRlIiwgIm11IiwgInBhcmFncmFwaCIsICJwZXJpb2RjZW50ZXJlZCIsDQotICAgICJjZWRpbGxhIiwgIm9uZXN1cGVyaW9yIiwgIm9yZG1hc2N1bGluZSIsICJndWlsbGVtb3RyaWdodCIsICJvbmVxdWFydGVyIiwgIm9uZWhhbGYiLCAidGhyZWVxdWFydGVycyIsICJxdWVzdGlvbmRvd24iLA0KLSAgICAiQWdyYXZlIiwgIkFhY3V0ZSIsICJBY2lyY3VtZmxleCIsICJBdGlsZGUiLCAiQWRpZXJlc2lzIiwgIkFyaW5nIiwgIkFFIiwgIkNjZWRpbGxhIiwNCi0gICAgIkVncmF2ZSIsICJFYWN1dGUiLCAiRWNpcmN1bWZsZXgiLCAiRWRpZXJlc2lzIiwgIklncmF2ZSIsICJJYWN1dGUiLCAiSWNpcmN1bWZsZXgiLCAiSWRpZXJlc2lzIiwNCi0gICAgIkV0aCIsICJOdGlsZGUiLCAiT2dyYXZlIiwgIk9hY3V0ZSIsICJPY2lyY3VtZmxleCIsICJPdGlsZGUiLCAiT2RpZXJlc2lzIiwgIm11bHRpcGx5IiwNCi0gICAgIk9zbGFzaCIsICJVZ3JhdmUiLCAiVWFjdXRlIiwgIlVjaXJjdW1mbGV4IiwgIlVkaWVyZXNpcyIsICJZYWN1dGUiLCAiVGhvcm4iLCAiZ2VybWFuZGJscyIsDQotICAgICJhZ3JhdmUiLCAiYWFjdXRlIiwgImFjaXJjdW1mbGV4IiwgImF0aWxkZSIsICJhZGllcmVzaXMiLCAiYXJpbmciLCAiYWUiLCAiY2NlZGlsbGEiLA0KLSAgICAiZWdyYXZlIiwgImVhY3V0ZSIsICJlY2lyY3VtZmxleCIsICJlZGllcmVzaXMiLCAiaWdyYXZlIiwgImlhY3V0ZSIsICJpY2lyY3VtZmxleCIsICJpZGllcmVzaXMiLA0KLSAgICAiZXRoIiwgIm50aWxkZSIsICJvZ3JhdmUiLCAib2FjdXRlIiwgIm9jaXJjdW1mbGV4IiwgIm90aWxkZSIsICJvZGllcmVzaXMiLCAiZGl2aWRlIiwNCi0gICAgIm9zbGFzaCIsICJ1Z3JhdmUiLCAidWFjdXRlIiwgInVjaXJjdW1mbGV4IiwgInVkaWVyZXNpcyIsICJ5YWN1dGUiLCAidGhvcm4iLCAieWRpZXJlc2lzIiwNCi19Ow0KLWNvbnN0IEZYX0xQQ1NUUiAgTWFjUm9tYW5FbmNvZGluZ05hbWVzWzIyNF0gPSB7DQotICAgICJzcGFjZSIsICJleGNsYW0iLCAicXVvdGVkYmwiLCAibnVtYmVyc2lnbiIsICJkb2xsYXIiLCAicGVyY2VudCIsICJhbXBlcnNhbmQiLCAicXVvdGVzaW5nbGUiLA0KLSAgICAicGFyZW5sZWZ0IiwgInBhcmVucmlnaHQiLCAiYXN0ZXJpc2siLCAicGx1cyIsICJjb21tYSIsICJoeXBoZW4iLCAicGVyaW9kIiwgInNsYXNoIiwNCi0gICAgInplcm8iLCAib25lIiwgInR3byIsICJ0aHJlZSIsICJmb3VyIiwgImZpdmUiLCAic2l4IiwgInNldmVuIiwNCi0gICAgImVpZ2h0IiwgIm5pbmUiLCAiY29sb24iLCAic2VtaWNvbG9uIiwgImxlc3MiLCAiZXF1YWwiLCAiZ3JlYXRlciIsICJxdWVzdGlvbiIsDQotICAgICJhdCIsICJBIiwgIkIiLCAiQyIsICJEIiwgIkUiLCAiRiIsICJHIiwNCi0gICAgIkgiLCAiSSIsICJKIiwgIksiLCAiTCIsICJNIiwgIk4iLCAiTyIsDQotICAgICJQIiwgIlEiLCAiUiIsICJTIiwgIlQiLCAiVSIsICJWIiwgIlciLA0KLSAgICAiWCIsICJZIiwgIloiLCAiYnJhY2tldGxlZnQiLCAiYmFja3NsYXNoIiwgImJyYWNrZXRyaWdodCIsICJhc2NpaWNpcmN1bSIsICJ1bmRlcnNjb3JlIiwNCi0gICAgImdyYXZlIiwgImEiLCAiYiIsICJjIiwgImQiLCAiZSIsICJmIiwgImciLA0KLSAgICAiaCIsICJpIiwgImoiLCAiayIsICJsIiwgIm0iLCAibiIsICJvIiwNCi0gICAgInAiLCAicSIsICJyIiwgInMiLCAidCIsICJ1IiwgInYiLCAidyIsDQotICAgICJ4IiwgInkiLCAieiIsICJicmFjZWxlZnQiLCAiYmFyIiwgImJyYWNlcmlnaHQiLCAiYXNjaWl0aWxkZSIsIE5VTEwsDQotICAgICJBZGllcmVzaXMiLCAiQXJpbmciLCAiQ2NlZGlsbGEiLCAiRWFjdXRlIiwgIk50aWxkZSIsICJPZGllcmVzaXMiLCAiVWRpZXJlc2lzIiwgImFhY3V0ZSIsDQotICAgICJhZ3JhdmUiLCAiYWNpcmN1bWZsZXgiLCAiYWRpZXJlc2lzIiwgImF0aWxkZSIsICJhcmluZyIsICJjY2VkaWxsYSIsICJlYWN1dGUiLCAiZWdyYXZlIiwNCi0gICAgImVjaXJjdW1mbGV4IiwgImVkaWVyZXNpcyIsICJpYWN1dGUiLCAiaWdyYXZlIiwgImljaXJjdW1mbGV4IiwgImlkaWVyZXNpcyIsICJudGlsZGUiLCAib2FjdXRlIiwNCi0gICAgIm9ncmF2ZSIsICJvY2lyY3VtZmxleCIsICJvZGllcmVzaXMiLCAib3RpbGRlIiwgInVhY3V0ZSIsICJ1Z3JhdmUiLCAidWNpcmN1bWZsZXgiLCAidWRpZXJlc2lzIiwNCi0gICAgImRhZ2dlciIsICJkZWdyZWUiLCAiY2VudCIsICJzdGVybGluZyIsICJzZWN0aW9uIiwgImJ1bGxldCIsICJwYXJhZ3JhcGgiLCAiZ2VybWFuZGJscyIsDQotICAgICJyZWdpc3RlcmVkIiwgImNvcHlyaWdodCIsICJ0cmFkZW1hcmsiLCAiYWN1dGUiLCAiZGllcmVzaXMiLCAibm90ZXF1YWwiLCAiQUUiLCAiT3NsYXNoIiwNCi0gICAgImluZmluaXR5IiwgInBsdXNtaW51cyIsICJsZXNzZXF1YWwiLCAiZ3JlYXRlcmVxdWFsIiwgInllbiIsICJtdSIsICJwYXJ0aWFsZGlmZiIsICJzdW1tYXRpb24iLA0KLSAgICAicHJvZHVjdCIsICJwaSIsICJpbnRlZ3JhbCIsICJvcmRmZW1pbmluZSIsICJvcmRtYXNjdWxpbmUiLCAiT21lZ2EiLCAiYWUiLCAib3NsYXNoIiwNCi0gICAgInF1ZXN0aW9uZG93biIsICJleGNsYW1kb3duIiwgImxvZ2ljYWxub3QiLCAicmFkaWNhbCIsICJmbG9yaW4iLCAiYXBwcm94ZXF1YWwiLCAiRGVsdGEiLCAiZ3VpbGxlbW90bGVmdCIsDQotICAgICJndWlsbGVtb3RyaWdodCIsICJlbGxpcHNpcyIsICJzcGFjZSIsICJBZ3JhdmUiLCAiQXRpbGRlIiwgIk90aWxkZSIsICJPRSIsICJvZSIsDQotICAgICJlbmRhc2giLCAiZW1kYXNoIiwgInF1b3RlZGJsbGVmdCIsICJxdW90ZWRibHJpZ2h0IiwgInF1b3RlbGVmdCIsICJxdW90ZXJpZ2h0IiwgImRpdmlkZSIsICJsb3plbmdlIiwNCi0gICAgInlkaWVyZXNpcyIsICJZZGllcmVzaXMiLCAiZnJhY3Rpb24iLCAiY3VycmVuY3kiLCAiZ3VpbHNpbmdsbGVmdCIsICJndWlsc2luZ2xyaWdodCIsICJmaSIsICJmbCIsDQotICAgICJkYWdnZXJkYmwiLCAicGVyaW9kY2VudGVyZWQiLCAicXVvdGVzaW5nbGJhc2UiLCAicXVvdGVkYmxiYXNlIiwgInBlcnRob3VzYW5kIiwgIkFjaXJjdW1mbGV4IiwgIkVjaXJjdW1mbGV4IiwgIkFhY3V0ZSIsDQotICAgICJFZGllcmVzaXMiLCAiRWdyYXZlIiwgIklhY3V0ZSIsICJJY2lyY3VtZmxleCIsICJJZGllcmVzaXMiLCAiSWdyYXZlIiwgIk9hY3V0ZSIsICJPY2lyY3VtZmxleCIsDQotICAgICJhcHBsZSIsICJPZ3JhdmUiLCAiVWFjdXRlIiwgIlVjaXJjdW1mbGV4IiwgIlVncmF2ZSIsICJkb3RsZXNzaSIsICJjaXJjdW1mbGV4IiwgInRpbGRlIiwNCi0gICAgIm1hY3JvbiIsICJicmV2ZSIsICJkb3RhY2NlbnQiLCAicmluZyIsICJjZWRpbGxhIiwgImh1bmdhcnVtbGF1dCIsICJvZ29uZWsiLCAiY2Fyb24iLA0KLX07DQotY29uc3QgRlhfTFBDU1RSICBNYWNFeHBlcnRFbmNvZGluZ05hbWVzWzIyNF0gPSB7DQotICAgICJzcGFjZSIsICJleGNsYW1zbWFsbCIsICJIdW5nYXJ1bWxhdXRzbWFsbCIsICJjZW50b2xkc3R5bGUiLCAiZG9sbGFyb2xkc3R5bGUiLCAiZG9sbGFyc3VwZXJpb3IiLCAiYW1wZXJzYW5kc21hbGwiLCAiQWN1dGVzbWFsbCIsDQotICAgICJwYXJlbmxlZnRzdXBlcmlvciIsICJwYXJlbnJpZ2h0c3VwZXJpb3IiLCAidHdvZG90ZW5sZWFkZXIiLCAib25lZG90ZW5sZWFkZXIiLCAiY29tbWEiLCAiaHlwaGVuIiwgInBlcmlvZCIsICJmcmFjdGlvbiIsDQotICAgICJ6ZXJvb2xkc3R5bGUiLCAib25lb2xkc3R5bGUiLCAidHdvb2xkc3R5bGUiLCAidGhyZWVvbGRzdHlsZSIsICJmb3Vyb2xkc3R5bGUiLCAiZml2ZW9sZHN0eWxlIiwgInNpeG9sZHN0eWxlIiwgInNldmVub2xkc3R5bGUiLA0KLSAgICAiZWlnaHRvbGRzdHlsZSIsICJuaW5lb2xkc3R5bGUiLCAiY29sb24iLCAic2VtaWNvbG9uIiwgTlVMTCwgInRocmVlcXVhcnRlcnNlbWRhc2giLCBOVUxMLCAicXVlc3Rpb25zbWFsbCIsDQotICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICJFdGhzbWFsbCIsIE5VTEwsIE5VTEwsICJvbmVxdWFydGVyIiwNCi0gICAgIm9uZWhhbGYiLCAidGhyZWVxdWFydGVycyIsICJvbmVlaWdodGgiLCAidGhyZWVlaWdodGhzIiwgImZpdmVlaWdodGhzIiwgInNldmVuZWlnaHRocyIsICJvbmV0aGlyZCIsICJ0d290aGlyZHMiLA0KLSAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAiZmYiLCAiZmkiLA0KLSAgICAiZmwiLCAiZmZpIiwgImZmbCIsICJwYXJlbmxlZnRpbmZlcmlvciIsIE5VTEwsICJwYXJlbnJpZ2h0aW5mZXJpb3IiLCAiQ2lyY3VtZmxleHNtYWxsIiwgImh5cGhlbmluZmVyaW9yIiwNCi0gICAgIkdyYXZlc21hbGwiLCAiQXNtYWxsIiwgIkJzbWFsbCIsICJDc21hbGwiLCAiRHNtYWxsIiwgIkVzbWFsbCIsICJGc21hbGwiLCAiR3NtYWxsIiwNCi0gICAgIkhzbWFsbCIsICJJc21hbGwiLCAiSnNtYWxsIiwgIktzbWFsbCIsICJMc21hbGwiLCAiTXNtYWxsIiwgIk5zbWFsbCIsICJPc21hbGwiLA0KLSAgICAiUHNtYWxsIiwgIlFzbWFsbCIsICJSc21hbGwiLCAiU3NtYWxsIiwgIlRzbWFsbCIsICJVc21hbGwiLCAiVnNtYWxsIiwgIldzbWFsbCIsDQotICAgICJYc21hbGwiLCAiWXNtYWxsIiwgIlpzbWFsbCIsICJjb2xvbm1vbmV0YXJ5IiwgIm9uZWZpdHRlZCIsICJydXBpYWgiLCAiVGlsZGVzbWFsbCIsIE5VTEwsDQotICAgIE5VTEwsICJhc3VwZXJpb3IiLCAiY2VudHN1cGVyaW9yIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgIkFhY3V0ZXNtYWxsIiwNCi0gICAgIkFncmF2ZXNtYWxsIiwgIkFjaXJjdW1mbGV4c21hbGwiLCAiQWRpZXJlc2lzc21hbGwiLCAiQXRpbGRlc21hbGwiLCAiQXJpbmdzbWFsbCIsICJDY2VkaWxsYXNtYWxsIiwgIkVhY3V0ZXNtYWxsIiwgIkVncmF2ZXNtYWxsIiwNCi0gICAgIkVjaXJjdW1mbGV4c21hbGwiLCAiRWRpZXJlc2lzc21hbGwiLCAiSWFjdXRlc21hbGwiLCAiSWdyYXZlc21hbGwiLCAiSWNpcmN1bWZsZXhzbWFsbCIsICJJZGllcmVzaXNzbWFsbCIsICJOdGlsZGVzbWFsbCIsICJPYWN1dGVzbWFsbCIsDQotICAgICJPZ3JhdmVzbWFsbCIsICJPY2lyY3VtZmxleHNtYWxsIiwgIk9kaWVyZXNpc3NtYWxsIiwgIk90aWxkZXNtYWxsIiwgIlVhY3V0ZXNtYWxsIiwgIlVncmF2ZXNtYWxsIiwgIlVjaXJjdW1mbGV4c21hbGwiLCAiVWRpZXJlc2lzc21hbGwiLA0KLSAgICBOVUxMLCAiZWlnaHRzdXBlcmlvciIsICJmb3VyaW5mZXJpb3IiLCAidGhyZWVpbmZlcmlvciIsICJzaXhpbmZlcmlvciIsICJlaWdodGluZmVyaW9yIiwgInNldmVuaW5mZXJpb3IiLCAiU2Nhcm9uc21hbGwiLA0KLSAgICBOVUxMLCAiY2VudGluZmVyaW9yIiwgInR3b2luZmVyaW9yIiwgTlVMTCwgIkRpZXJlc2lzc21hbGwiLCBOVUxMLCAiQ2Fyb25zbWFsbCIsICJTY2Fyb25zbWFsbCIsDQotICAgICJmaXZlaW5mZXJpb3IiLCBOVUxMLCAiY29tbWFpbmZlcmlvciIsICJwZXJpb2RpbmZlcmlvciIsICJZYWN1dGVzbWFsbCIsIE5VTEwsICJkb2xsYXJpbmZlcmlvciIsIE5VTEwsDQotICAgIE5VTEwsICJUaG9ybnNtYWxsIiwgTlVMTCwgIm5pbmVpbmZlcmlvciIsICJ6ZXJvaW5mZXJpb3IiLCAiWmNhcm9uc21hbGwiLCAiQUVzbWFsbCIsICJPc2xhc2hzbWFsbCIsDQotICAgICJxdWVzdGlvbmRvd25zbWFsbCIsICJvbmVpbmZlcmlvciIsICJhc3VwZXJpb3IiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLA0KLSAgICBOVUxMLCAiQ2VkaWxsYXNtYWxsIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgIk9Fc21hbGwiLA0KLSAgICAiZmlndXJlZGFzaCIsICJoeXBoZW5zdXBlcmlvciIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICJleGNsYW1kb3duc21hbGwiLCBOVUxMLA0KLSAgICAiWWRpZXJlc2lzc21hbGwiLCBOVUxMLCAib25lc3VwZXJpb3IiLCAidHdvc3VwZXJpb3IiLCAidGhyZWVzdXBlcmlvciIsICJmb3Vyc3VwZXJpb3IiLCAiZml2ZXN1cGVyaW9yIiwgInNpeHN1cGVyaW9yIiwNCi0gICAgInNldmVuc3VwZXJpb3IiLCAibmluZXN1cGVyaW9yIiwgInplcm9zdXBlcmlvciIsIE5VTEwsICJlc3VwZXJpb3IiLCAicnN1cGVyaW9yIiwgTlVMTCwgTlVMTCwNCi0gICAgTlVMTCwgImlzdXBlcmlvciIsICJzc3VwZXJpb3IiLCAiZHN1cGVyaW9yIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwNCi0gICAgTlVMTCwgImxzdXBlcmlvciIsICJPZ29uZWtzbWFsbCIsICJCcmV2ZXNtYWxsIiwgIk1hY3JvbnNtYWxsIiwgImJzdXBlcmlvciIsICJuc3VwZXJpb3IiLCAibXN1cGVyaW9yIiwNCi0gICAgImNvbW1hc3VwZXJpb3IiLCAicGVyaW9kc3VwZXJpb3IiLCAiRG90YWNjZW50c21hbGwiLCAiUmluZ3NtYWxsIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwNCi19Ow0KLWNvbnN0IEZYX0xQQ1NUUiAgUERGRG9jRW5jb2RpbmdOYW1lc1syMzJdID0gew0KLSAgICAiYnJldmUiLCAiY2Fyb24iLCAiY2lyY3VtZmxleCIsICJkb3RhY2NlbnQiLCAiaHVuZ2FydW1sYXV0IiwgIm9nb25layIsICJyaW5nIiwgInRpbGRlIiwNCi0gICAgInNwYWNlIiwgImV4Y2xhbSIsICJxdW90ZWRibCIsICJudW1iZXJzaWduIiwgImRvbGxhciIsICJwZXJjZW50IiwgImFtcGVyc2FuZCIsICJxdW90ZXNpbmdsZSIsDQotICAgICJwYXJlbmxlZnQiLCAicGFyZW5yaWdodCIsICJhc3RlcmlzayIsICJwbHVzIiwgImNvbW1hIiwgImh5cGhlbiIsICJwZXJpb2QiLCAic2xhc2giLA0KLSAgICAiemVybyIsICJvbmUiLCAidHdvIiwgInRocmVlIiwgImZvdXIiLCAiZml2ZSIsICJzaXgiLCAic2V2ZW4iLA0KLSAgICAiZWlnaHQiLCAibmluZSIsICJjb2xvbiIsICJzZW1pY29sb24iLCAibGVzcyIsICJlcXVhbCIsICJncmVhdGVyIiwgInF1ZXN0aW9uIiwNCi0gICAgImF0IiwgIkEiLCAiQiIsICJDIiwgIkQiLCAiRSIsICJGIiwgIkciLA0KLSAgICAiSCIsICJJIiwgIkoiLCAiSyIsICJMIiwgIk0iLCAiTiIsICJPIiwNCi0gICAgIlAiLCAiUSIsICJSIiwgIlMiLCAiVCIsICJVIiwgIlYiLCAiVyIsDQotICAgICJYIiwgIlkiLCAiWiIsICJicmFja2V0bGVmdCIsICJiYWNrc2xhc2giLCAiYnJhY2tldHJpZ2h0IiwgImFzY2lpY2lyY3VtIiwgInVuZGVyc2NvcmUiLA0KLSAgICAiZ3JhdmUiLCAiYSIsICJiIiwgImMiLCAiZCIsICJlIiwgImYiLCAiZyIsDQotICAgICJoIiwgImkiLCAiaiIsICJrIiwgImwiLCAibSIsICJuIiwgIm8iLA0KLSAgICAicCIsICJxIiwgInIiLCAicyIsICJ0IiwgInUiLCAidiIsICJ3IiwNCi0gICAgIngiLCAieSIsICJ6IiwgImJyYWNlbGVmdCIsICJiYXIiLCAiYnJhY2VyaWdodCIsICJhc2NpaXRpbGRlIiwgTlVMTCwNCi0gICAgImJ1bGxldDMiLCAiZGFnZ2VyIiwgImRhZ2dlcmRibCIsICJlbGxpcHNpcyIsICJlbWRhc2giLCAiZW5kYXNoIiwgImZsb3JpbiIsICJmcmFjdGlvbiIsDQotICAgICJndWlsc2luZ2xsZWZ0IiwgImd1aWxzaW5nbHJpZ2h0IiwgIm1pbnVzIiwgInBlcnRob3VzYW5kIiwgInF1b3RlZGJsYmFzZSIsICJxdW90ZWRibGxlZnQiLCAicXVvdGVkYmxyaWdodCIsICJxdW90ZWxlZnQiLA0KLSAgICAicXVvdGVyaWdodCIsICJxdW90ZXNpbmdsYmFzZSIsICJ0cmFkZW1hcmsiLCAiZmkiLCAiZmwiLCAiTHNsYXNoIiwgIk9FIiwgIlNjYXJvbiIsDQotICAgICJZZGllcmVzaXMiLCAiWmNhcm9uMiIsICJkb3RsZXNzaSIsICJsc2xhc2giLCAib2UiLCAic2Nhcm9uIiwgInpjYXJvbjIiLCBOVUxMLA0KLSAgICAiRXVybyIsICJleGNsYW1kb3duIiwgImNlbnQiLCAic3RlcmxpbmciLCAiY3VycmVuY3kiLCAieWVuIiwgImJyb2tlbmJhciIsICJzZWN0aW9uIiwNCi0gICAgImRpZXJlc2lzIiwgImNvcHlyaWdodCIsICJvcmRmZW1pbmluZSIsICJndWlsbGVtb3RsZWZ0NCIsICJsb2dpY2Fsbm90IiwgTlVMTCwgInJlZ2lzdGVyZWQiLCAibWFjcm9uIiwNCi0gICAgImRlZ3JlZSIsICJwbHVzbWludXMiLCAidHdvc3VwZXJpb3IiLCAidGhyZWVzdXBlcmlvciIsICJhY3V0ZSIsICJtdSIsICJwYXJhZ3JhcGgiLCAicGVyaW9kY2VudGVyZWQiLA0KLSAgICAiY2VkaWxsYSIsICJvbmVzdXBlcmlvciIsICJvcmRtYXNjdWxpbmUiLCAiZ3VpbGxlbW90cmlnaHQ0IiwgIm9uZXF1YXJ0ZXIiLCAib25laGFsZiIsICJ0aHJlZXF1YXJ0ZXJzIiwgInF1ZXN0aW9uZG93biIsDQotICAgICJBZ3JhdmUiLCAiQWFjdXRlIiwgIkFjaXJjdW1mbGV4IiwgIkF0aWxkZSIsICJBZGllcmVzaXMiLCAiQXJpbmciLCAiQUUiLCAiQ2NlZGlsbGEiLA0KLSAgICAiRWdyYXZlIiwgIkVhY3V0ZSIsICJFY2lyY3VtZmxleCIsICJFZGllcmVzaXMiLCAiSWdyYXZlIiwgIklhY3V0ZSIsICJJY2lyY3VtZmxleCIsICJJZGllcmVzaXMiLA0KLSAgICAiRXRoIiwgIk50aWxkZSIsICJPZ3JhdmUiLCAiT2FjdXRlIiwgIk9jaXJjdW1mbGV4IiwgIk90aWxkZSIsICJPZGllcmVzaXMiLCAibXVsdGlwbHkiLA0KLSAgICAiT3NsYXNoIiwgIlVncmF2ZSIsICJVYWN1dGUiLCAiVWNpcmN1bWZsZXgiLCAiVWRpZXJlc2lzIiwgIllhY3V0ZSIsICJUaG9ybiIsICJnZXJtYW5kYmxzIiwNCi0gICAgImFncmF2ZSIsICJhYWN1dGUiLCAiYWNpcmN1bWZsZXgiLCAiYXRpbGRlIiwgImFkaWVyZXNpcyIsICJhcmluZyIsICJhZSIsICJjY2VkaWxsYSIsDQotICAgICJlZ3JhdmUiLCAiZWFjdXRlIiwgImVjaXJjdW1mbGV4IiwgImVkaWVyZXNpcyIsICJpZ3JhdmUiLCAiaWFjdXRlIiwgImljaXJjdW1mbGV4IiwgImlkaWVyZXNpcyIsDQotICAgICJldGgiLCAibnRpbGRlIiwgIm9ncmF2ZSIsICJvYWN1dGUiLCAib2NpcmN1bWZsZXgiLCAib3RpbGRlIiwgIm9kaWVyZXNpcyIsICJkaXZpZGUiLA0KLSAgICAib3NsYXNoIiwgInVncmF2ZSIsICJ1YWN1dGUiLCAidWNpcmN1bWZsZXgiLCAidWRpZXJlc2lzIiwgInlhY3V0ZSIsICJ0aG9ybiIsICJ5ZGllcmVzaXMiLA0KLX07DQotY29uc3QgRlhfTFBDU1RSICBBZG9iZVN5bWJvbEVuY29kaW5nTmFtZXNbMjI0XSA9IHsNCi0gICAgInNwYWNlIiwgImV4Y2xhbSIsICJ1bml2ZXJzYWwiLCAibnVtYmVyc2lnbiIsICJleGlzdGVudGlhbCIsICJwZXJjZW50IiwgImFtcGVyc2FuZCIsICJzdWNodGhhdCIsDQotICAgICJwYXJlbmxlZnQiLCAicGFyZW5yaWdodCIsICJhc3Rlcmlza21hdGgiLCAicGx1cyIsICJjb21tYSIsICJtaW51cyIsICJwZXJpb2QiLCAic2xhc2giLA0KLSAgICAiemVybyIsICJvbmUiLCAidHdvIiwgInRocmVlIiwgImZvdXIiLCAiZml2ZSIsICJzaXgiLCAic2V2ZW4iLA0KLSAgICAiZWlnaHQiLCAibmluZSIsICJjb2xvbiIsICJzZW1pY29sb24iLCAibGVzcyIsICJlcXVhbCIsICJncmVhdGVyIiwgInF1ZXN0aW9uIiwNCi0gICAgImNvbmdydWVudCIsICJBbHBoYSIsICJCZXRhIiwgIkNoaSIsICJEZWx0YSIsICJFcHNpbG9uIiwgIlBoaSIsICJHYW1tYSIsDQotICAgICJFdGEiLCAiSW90YSIsICJ0aGV0YTEiLCAiS2FwcGEiLCAiTGFtYmRhIiwgIk11IiwgIk51IiwgIk9taWNyb24iLA0KLSAgICAiUGkiLCAiVGhldGEiLCAiUmhvIiwgIlNpZ21hIiwgIlRhdSIsICJVcHNpbG9uIiwgInNpZ21hMSIsICJPbWVnYSIsDQotICAgICJYaSIsICJQc2kiLCAiWmV0YSIsICJicmFja2V0bGVmdCIsICJ0aGVyZWZvcmUiLCAiYnJhY2tldHJpZ2h0IiwgInBlcnBlbmRpY3VsYXIiLCAidW5kZXJzY29yZSIsDQotICAgICJyYWRpY2FsZXgiLCAiYWxwaGEiLCAiYmV0YSIsICJjaGkiLCAiZGVsdGEiLCAiZXBzaWxvbiIsICJwaGkiLCAiZ2FtbWEiLA0KLSAgICAiZXRhIiwgImlvdGEiLCAicGhpMSIsICJrYXBwYSIsICJsYW1iZGEiLCAibXUiLCAibnUiLCAib21pY3JvbiIsDQotICAgICJwaSIsICJ0aGV0YSIsICJyaG8iLCAic2lnbWEiLCAidGF1IiwgInVwc2lsb24iLCAib21lZ2ExIiwgIm9tZWdhIiwNCi0gICAgInhpIiwgInBzaSIsICJ6ZXRhIiwgImJyYWNlbGVmdCIsICJiYXIiLCAiYnJhY2VyaWdodCIsICJzaW1pbGFyIiwgTlVMTCwNCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwNCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwNCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwNCi0gICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwNCi0gICAgIkV1cm8iLCAiVXBzaWxvbjEiLCAibWludXRlIiwgImxlc3NlcXVhbCIsICJmcmFjdGlvbiIsICJpbmZpbml0eSIsICJmbG9yaW4iLCAiY2x1YiIsDQotICAgICJkaWFtb25kIiwgImhlYXJ0IiwgInNwYWRlIiwgImFycm93Ym90aCIsICJhcnJvd2xlZnQiLCAiYXJyb3d1cCIsICJhcnJvd3JpZ2h0IiwgImFycm93ZG93biIsDQotICAgICJkZWdyZWUiLCAicGx1c21pbnVzIiwgInNlY29uZCIsICJncmVhdGVyZXF1YWwiLCAibXVsdGlwbHkiLCAicHJvcG9ydGlvbmFsIiwgInBhcnRpYWxkaWZmIiwgImJ1bGxldCIsDQotICAgICJkaXZpZGUiLCAibm90ZXF1YWwiLCAiZXF1aXZhbGVuY2UiLCAiYXBwcm94ZXF1YWwiLCAiZWxsaXBzaXMiLCAiYXJyb3d2ZXJ0ZXgiLCAiYXJyb3dob3JpemV4IiwgImNhcnJpYWdlcmV0dXJuIiwNCi0gICAgImFsZXBoIiwgIklmcmFrdHVyIiwgIlJmcmFrdHVyIiwgIndlaWVyc3RyYXNzIiwgImNpcmNsZW11bHRpcGx5IiwgImNpcmNsZXBsdXMiLCAiZW1wdHlzZXQiLCAiaW50ZXJzZWN0aW9uIiwNCi0gICAgInVuaW9uIiwgInByb3BlcnN1cGVyc2V0IiwgInJlZmxleHN1cGVyc2V0IiwgIm5vdHN1YnNldCIsICJwcm9wZXJzdWJzZXQiLCAicmVmbGV4c3Vic2V0IiwgImVsZW1lbnQiLCAibm90ZWxlbWVudCIsDQotICAgICJhbmdsZSIsICJncmFkaWVudCIsICJyZWdpc3RlcnNlcmlmIiwgImNvcHlyaWdodHNlcmlmIiwgInRyYWRlbWFya3NlcmlmIiwgInByb2R1Y3QiLCAicmFkaWNhbCIsICJkb3RtYXRoIiwNCi0gICAgImxvZ2ljYWxub3QiLCAibG9naWNhbGFuZCIsICJsb2dpY2Fsb3IiLCAiYXJyb3dkYmxib3RoIiwgImFycm93ZGJsbGVmdCIsICJhcnJvd2RibHVwIiwgImFycm93ZGJscmlnaHQiLCAiYXJyb3dkYmxkb3duIiwNCi0gICAgImxvemVuZ2UiLCAiYW5nbGVsZWZ0IiwgInJlZ2lzdGVyc2FucyIsICJjb3B5cmlnaHRzYW5zIiwgInRyYWRlbWFya3NhbnMiLCAic3VtbWF0aW9uIiwgInBhcmVubGVmdHRwIiwgInBhcmVubGVmdGV4IiwNCi0gICAgInBhcmVubGVmdGJ0IiwgImJyYWNrZXRsZWZ0dHAiLCAiYnJhY2tldGxlZnRleCIsICJicmFja2V0bGVmdGJ0IiwgImJyYWNlbGVmdHRwIiwgImJyYWNlbGVmdG1pZCIsICJicmFjZWxlZnRidCIsICJicmFjZWV4IiwNCi0gICAgTlVMTCwgImFuZ2xlcmlnaHQiLCAiaW50ZWdyYWwiLCAiaW50ZWdyYWx0cCIsICJpbnRlZ3JhbGV4IiwgImludGVncmFsYnQiLCAicGFyZW5yaWdodHRwIiwgInBhcmVucmlnaHRleCIsDQotICAgICJwYXJlbnJpZ2h0YnQiLCAiYnJhY2tldHJpZ2h0dHAiLCAiYnJhY2tldHJpZ2h0ZXgiLCAiYnJhY2tldHJpZ2h0YnQiLCAiYnJhY2VyaWdodHRwIiwgImJyYWNlcmlnaHRtaWQiLCAiYnJhY2VyaWdodGJ0IiwgTlVMTCwNCi19Ow0KLWNvbnN0IEZYX0xQQ1NUUiAgWmFwZkVuY29kaW5nTmFtZXNbMjI0XSA9IHsNCi0gICAgInNwYWNlIiwgImExIiwgImEyIiwgImEyMDIiLCAiYTMiLCAiYTQiLCAiYTUiLCAiYTExOSIsDQotICAgICJhMTE4IiwgImExMTciLCAiYTExIiwgImExMiIsICJhMTMiLCAiYTE0IiwgImExNSIsICJhMTYiLA0KLSAgICAiYTEwNSIsICJhMTciLCAiYTE4IiwgImExOSIsICJhMjAiLCAiYTIxIiwgImEyMiIsICJhMjMiLA0KLSAgICAiYTI0IiwgImEyNSIsICJhMjYiLCAiYTI3IiwgImEyOCIsICJhNiIsICJhNyIsICJhOCIsDQotICAgICJhOSIsICJhMTAiLCAiYTI5IiwgImEzMCIsICJhMzEiLCAiYTMyIiwgImEzMyIsICJhMzQiLA0KLSAgICAiYTM1IiwgImEzNiIsICJhMzciLCAiYTM4IiwgImEzOSIsICJhNDAiLCAiYTQxIiwgImE0MiIsDQotICAgICJhNDMiLCAiYTQ0IiwgImE0NSIsICJhNDYiLCAiYTQ3IiwgImE0OCIsICJhNDkiLCAiYTUwIiwNCi0gICAgImE1MSIsICJhNTIiLCAiYTUzIiwgImE1NCIsICJhNTUiLCAiYTU2IiwgImE1NyIsICJhNTgiLA0KLSAgICAiYTU5IiwgImE2MCIsICJhNjEiLCAiYTYyIiwgImE2MyIsICJhNjQiLCAiYTY1IiwgImE2NiIsDQotICAgICJhNjciLCAiYTY4IiwgImE2OSIsICJhNzAiLCAiYTcxIiwgImE3MiIsICJhNzMiLCAiYTc0IiwNCi0gICAgImEyMDMiLCAiYTc1IiwgImEyMDQiLCAiYTc2IiwgImE3NyIsICJhNzgiLCAiYTc5IiwgImE4MSIsDQotICAgICJhODIiLCAiYTgzIiwgImE4NCIsICJhOTciLCAiYTk4IiwgImE5OSIsICJhMTAwIiwgTlVMTCwNCi0gICAgImE4OSIsICJhOTAiLCAiYTkzIiwgImE5NCIsICJhOTEiLCAiYTkyIiwgImEyMDUiLCAiYTg1IiwNCi0gICAgImEyMDYiLCAiYTg2IiwgImE4NyIsICJhODgiLCAiYTk1IiwgImE5NiIsIE5VTEwsIE5VTEwsDQotICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsDQotICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsDQotICAgIE5VTEwsICJhMTAxIiwgImExMDIiLCAiYTEwMyIsICJhMTA0IiwgImExMDYiLCAiYTEwNyIsICJhMTA4IiwNCi0gICAgImExMTIiLCAiYTExMSIsICJhMTEwIiwgImExMDkiLCAiYTEyMCIsICJhMTIxIiwgImExMjIiLCAiYTEyMyIsDQotICAgICJhMTI0IiwgImExMjUiLCAiYTEyNiIsICJhMTI3IiwgImExMjgiLCAiYTEyOSIsICJhMTMwIiwgImExMzEiLA0KLSAgICAiYTEzMiIsICJhMTMzIiwgImExMzQiLCAiYTEzNSIsICJhMTM2IiwgImExMzciLCAiYTEzOCIsICJhMTM5IiwNCi0gICAgImExNDAiLCAiYTE0MSIsICJhMTQyIiwgImExNDMiLCAiYTE0NCIsICJhMTQ1IiwgImExNDYiLCAiYTE0NyIsDQotICAgICJhMTQ4IiwgImExNDkiLCAiYTE1MCIsICJhMTUxIiwgImExNTIiLCAiYTE1MyIsICJhMTU0IiwgImExNTUiLA0KLSAgICAiYTE1NiIsICJhMTU3IiwgImExNTgiLCAiYTE1OSIsICJhMTYwIiwgImExNjEiLCAiYTE2MyIsICJhMTY0IiwNCi0gICAgImExOTYiLCAiYTE2NSIsICJhMTkyIiwgImExNjYiLCAiYTE2NyIsICJhMTY4IiwgImExNjkiLCAiYTE3MCIsDQotICAgICJhMTcxIiwgImExNzIiLCAiYTE3MyIsICJhMTYyIiwgImExNzQiLCAiYTE3NSIsICJhMTc2IiwgImExNzciLA0KLSAgICAiYTE3OCIsICJhMTc5IiwgImExOTMiLCAiYTE4MCIsICJhMTk5IiwgImExODEiLCAiYTIwMCIsICJhMTgyIiwNCi0gICAgTlVMTCwgImEyMDEiLCAiYTE4MyIsICJhMTg0IiwgImExOTciLCAiYTE4NSIsICJhMTk0IiwgImExOTgiLA0KLSAgICAiYTE4NiIsICJhMTk1IiwgImExODciLCAiYTE4OCIsICJhMTg5IiwgImExOTAiLCAiYTE5MSIsIE5VTEwNCi19Ow0KLWNvbnN0IEZYX0NIQVIqICBQREZfQ2hhck5hbWVGcm9tUHJlZGVmaW5lZENoYXJTZXQoaW50IGVuY29kaW5nLCBGWF9CWVRFIGNoYXJjb2RlKQ0KLXsNCi0gICAgaWYgKGVuY29kaW5nID09IFBERkZPTlRfRU5DT0RJTkdfUERGRE9DKSB7DQotICAgICAgICBpZiAoY2hhcmNvZGUgPCAyNCkgew0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICAgICAgY2hhcmNvZGUgLT0gMjQ7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZiAoY2hhcmNvZGUgPCAzMikgew0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICAgICAgY2hhcmNvZGUgLT0gMzI7DQotICAgIH0NCi0gICAgc3dpdGNoIChlbmNvZGluZykgew0KLSAgICAgICAgY2FzZSBQREZGT05UX0VOQ09ESU5HX1dJTkFOU0k6DQotICAgICAgICAgICAgcmV0dXJuIEFkb2JlV2luQW5zaUVuY29kaW5nTmFtZXNbY2hhcmNvZGVdOw0KLSAgICAgICAgY2FzZSBQREZGT05UX0VOQ09ESU5HX01BQ1JPTUFOOg0KLSAgICAgICAgICAgIHJldHVybiBNYWNSb21hbkVuY29kaW5nTmFtZXNbY2hhcmNvZGVdOw0KLSAgICAgICAgY2FzZSBQREZGT05UX0VOQ09ESU5HX01BQ0VYUEVSVDoNCi0gICAgICAgICAgICByZXR1cm4gTWFjRXhwZXJ0RW5jb2RpbmdOYW1lc1tjaGFyY29kZV07DQotICAgICAgICBjYXNlIFBERkZPTlRfRU5DT0RJTkdfU1RBTkRBUkQ6DQotICAgICAgICAgICAgcmV0dXJuIFN0YW5kYXJkRW5jb2RpbmdOYW1lc1tjaGFyY29kZV07DQotICAgICAgICBjYXNlIFBERkZPTlRfRU5DT0RJTkdfQURPQkVfU1lNQk9MOg0KLSAgICAgICAgICAgIHJldHVybiBBZG9iZVN5bWJvbEVuY29kaW5nTmFtZXNbY2hhcmNvZGVdOw0KLSAgICAgICAgY2FzZSBQREZGT05UX0VOQ09ESU5HX1pBUEZESU5HQkFUUzoNCi0gICAgICAgICAgICByZXR1cm4gWmFwZkVuY29kaW5nTmFtZXNbY2hhcmNvZGVdOw0KLSAgICAgICAgY2FzZSBQREZGT05UX0VOQ09ESU5HX1BERkRPQzoNCi0gICAgICAgICAgICByZXR1cm4gUERGRG9jRW5jb2RpbmdOYW1lc1tjaGFyY29kZV07DQotICAgIH0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLUZYX1dDSEFSIEZUX1VuaWNvZGVGcm9tQ2hhckNvZGUoaW50IGVuY29kaW5nLCBGWF9EV09SRCBjaGFyY29kZSkNCi17DQotICAgIHN3aXRjaCAoZW5jb2RpbmcpIHsNCi0gICAgICAgIGNhc2UgRlhGVF9FTkNPRElOR19VTklDT0RFOg0KLSAgICAgICAgICAgIHJldHVybiAoRlhfV09SRCljaGFyY29kZTsNCi0gICAgICAgIGNhc2UgRlhGVF9FTkNPRElOR19BRE9CRV9TVEFOREFSRDoNCi0gICAgICAgICAgICByZXR1cm4gU3RhbmRhcmRFbmNvZGluZ1soRlhfQllURSljaGFyY29kZV07DQotICAgICAgICBjYXNlIEZYRlRfRU5DT0RJTkdfQURPQkVfRVhQRVJUOg0KLSAgICAgICAgICAgIHJldHVybiBNYWNFeHBlcnRFbmNvZGluZ1soRlhfQllURSljaGFyY29kZV07DQotICAgICAgICBjYXNlIEZYRlRfRU5DT0RJTkdfQURPQkVfTEFUSU5fMToNCi0gICAgICAgICAgICByZXR1cm4gQWRvYmVXaW5BbnNpRW5jb2RpbmdbKEZYX0JZVEUpY2hhcmNvZGVdOw0KLSAgICAgICAgY2FzZSBGWEZUX0VOQ09ESU5HX0FQUExFX1JPTUFOOg0KLSAgICAgICAgICAgIHJldHVybiBNYWNSb21hbkVuY29kaW5nWyhGWF9CWVRFKWNoYXJjb2RlXTsNCi0gICAgICAgIGNhc2UgUERGRk9OVF9FTkNPRElOR19QREZET0M6DQotICAgICAgICAgICAgcmV0dXJuIFBERkRvY0VuY29kaW5nWyhGWF9CWVRFKWNoYXJjb2RlXTsNCi0gICAgfQ0KLSAgICByZXR1cm4gMDsNCi19DQotc3RhdGljIEZYX0RXT1JEIFBERl9GaW5kQ29kZShjb25zdCBGWF9XT1JEKiBwQ29kZXMsIEZYX1dPUkQgdW5pY29kZSkNCi17DQotICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCAyNTY7IGkgKyspDQotICAgICAgICBpZiAocENvZGVzW2ldID09IHVuaWNvZGUpIHsNCi0gICAgICAgICAgICByZXR1cm4gaTsNCi0gICAgICAgIH0NCi0gICAgcmV0dXJuIDA7DQotfQ0KLWNvbnN0IEZYX1dPUkQgTVNTeW1ib2xFbmNvZGluZ1syNTZdID0gew0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMzIsIDMzLCA4NzA0LCAzNSwgODcwNywgMzcsIDM4LCA4NzE1LA0KLSAgICA0MCwgNDEsIDg3MjcsIDQzLCA0NCwgODcyMiwgNDYsIDQ3LCA0OCwgNDksDQotICAgIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LA0KLSAgICA2MCwgNjEsIDYyLCA2MywgODc3MywgOTEzLCA5MTQsIDkzNSwgOTE2LCA5MTcsDQotICAgIDkzNCwgOTE1LCA5MTksIDkyMSwgOTc3LCA5MjIsIDkyMywgOTI0LCA5MjUsIDkyNywNCi0gICAgOTI4LCA5MjAsIDkyOSwgOTMxLCA5MzIsIDkzMywgOTYyLCA5MzcsIDkyNiwgOTM2LA0KLSAgICA5MTgsIDkxLCA4NzU2LCA5MywgODg2OSwgOTUsIDgyNTQsIDk0NSwgOTQ2LCA5NjcsDQotICAgIDk0OCwgOTQ5LCA5NjYsIDk0NywgOTUxLCA5NTMsIDk4MSwgOTU0LCA5NTUsIDk1NiwNCi0gICAgOTU3LCA5NTksIDk2MCwgOTUyLCA5NjEsIDk2MywgOTY0LCA5NjUsIDk4MiwgOTY5LA0KLSAgICA5NTgsIDk2OCwgOTUwLCAxMjMsIDEyNCwgMTI1LCA4NzY0LCAwLCAwLCAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDk3OCwgODI0MiwgODgwNCwgODcyNSwgODczNCwgNDAyLCA5ODI3LCA5ODMwLCA5ODI4LA0KLSAgICA5ODI0LCA4NTk2LCA4NTkyLCA4NTkzLCA4NTk0LCA4NTk1LCAxNzYsIDE3NywgODI0MywgODgwNSwNCi0gICAgMjE1LCA4NzMzLCA4NzA2LCA4NzI5LCAyNDcsIDg4MDAsIDg4MDEsIDg3NzYsIDg5NDMsIDAsDQotICAgIDAsIDg2MjksIDAsIDg0NjUsIDg0NzYsIDg0NzIsIDg4NTUsIDg4NTMsIDg3MDksIDg3NDUsDQotICAgIDg3NDYsIDg4MzUsIDg4MzksIDg4MzYsIDg4MzQsIDg4MzgsIDg3MTIsIDg3MTMsIDg3MzYsIDg3MTEsDQotICAgIDE3NCwgMTY5LCA4NDgyLCA4NzE5LCA4NzMwLCA4OTAxLCAxNzIsIDg3NDMsIDg3NDQsIDg2NjAsDQotICAgIDg2NTYsIDg2NTcsIDg2NTgsIDg2NTksIDk2NzQsIDkwMDEsIDAsIDAsIDAsIDg3MjEsDQotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsDQotICAgIDB4MDAwMCwgOTAwMiwgODc0NywgODk5MiwgMCwgODk5MywgMCwgMCwgMCwgMCwNCi0gICAgMCwgMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwDQotfTsNCi1GWF9EV09SRCBGVF9DaGFyQ29kZUZyb21Vbmljb2RlKGludCBlbmNvZGluZywgRlhfV0NIQVIgdW5pY29kZSkNCi17DQotICAgIHN3aXRjaCAoZW5jb2RpbmcpIHsNCi0gICAgICAgIGNhc2UgRlhGVF9FTkNPRElOR19VTklDT0RFOg0KLSAgICAgICAgICAgIHJldHVybiB1bmljb2RlOw0KLSAgICAgICAgY2FzZSBGWEZUX0VOQ09ESU5HX0FET0JFX1NUQU5EQVJEOg0KLSAgICAgICAgICAgIHJldHVybiBQREZfRmluZENvZGUoU3RhbmRhcmRFbmNvZGluZywgdW5pY29kZSk7DQotICAgICAgICBjYXNlIEZYRlRfRU5DT0RJTkdfQURPQkVfRVhQRVJUOg0KLSAgICAgICAgICAgIHJldHVybiBQREZfRmluZENvZGUoTWFjRXhwZXJ0RW5jb2RpbmcsIHVuaWNvZGUpOw0KLSAgICAgICAgY2FzZSBGWEZUX0VOQ09ESU5HX0FET0JFX0xBVElOXzE6DQotICAgICAgICAgICAgcmV0dXJuIFBERl9GaW5kQ29kZShBZG9iZVdpbkFuc2lFbmNvZGluZywgdW5pY29kZSk7DQotICAgICAgICBjYXNlIEZYRlRfRU5DT0RJTkdfQVBQTEVfUk9NQU46DQotICAgICAgICAgICAgcmV0dXJuIFBERl9GaW5kQ29kZShNYWNSb21hbkVuY29kaW5nLCB1bmljb2RlKTsNCi0gICAgICAgIGNhc2UgRlhGVF9FTkNPRElOR19BRE9CRV9DVVNUT006DQotICAgICAgICAgICAgcmV0dXJuIFBERl9GaW5kQ29kZShQREZEb2NFbmNvZGluZywgdW5pY29kZSk7DQotICAgICAgICBjYXNlIEZYRlRfRU5DT0RJTkdfTVNfU1lNQk9MOg0KLSAgICAgICAgICAgIHJldHVybiBQREZfRmluZENvZGUoTVNTeW1ib2xFbmNvZGluZywgdW5pY29kZSk7DQotICAgIH0NCi0gICAgcmV0dXJuIDA7DQotfQ0KLWNvbnN0IEZYX1dPUkQqIFBERl9Vbmljb2Rlc0ZvclByZWRlZmluZWRDaGFyU2V0KGludCBlbmNvZGluZykNCi17DQotICAgIHN3aXRjaCAoZW5jb2RpbmcpIHsNCi0gICAgICAgIGNhc2UgUERGRk9OVF9FTkNPRElOR19XSU5BTlNJOg0KLSAgICAgICAgICAgIHJldHVybiBBZG9iZVdpbkFuc2lFbmNvZGluZzsNCi0gICAgICAgIGNhc2UgUERGRk9OVF9FTkNPRElOR19NQUNST01BTjoNCi0gICAgICAgICAgICByZXR1cm4gTWFjUm9tYW5FbmNvZGluZzsNCi0gICAgICAgIGNhc2UgUERGRk9OVF9FTkNPRElOR19NQUNFWFBFUlQ6DQotICAgICAgICAgICAgcmV0dXJuIE1hY0V4cGVydEVuY29kaW5nOw0KLSAgICAgICAgY2FzZSBQREZGT05UX0VOQ09ESU5HX1NUQU5EQVJEOg0KLSAgICAgICAgICAgIHJldHVybiBTdGFuZGFyZEVuY29kaW5nOw0KLSAgICAgICAgY2FzZSBQREZGT05UX0VOQ09ESU5HX0FET0JFX1NZTUJPTDoNCi0gICAgICAgICAgICByZXR1cm4gQWRvYmVTeW1ib2xFbmNvZGluZzsNCi0gICAgICAgIGNhc2UgUERGRk9OVF9FTkNPRElOR19aQVBGRElOR0JBVFM6DQotICAgICAgICAgICAgcmV0dXJuIFphcGZFbmNvZGluZzsNCi0gICAgICAgIGNhc2UgUERGRk9OVF9FTkNPRElOR19QREZET0M6DQotICAgICAgICAgICAgcmV0dXJuIFBERkRvY0VuY29kaW5nOw0KLSAgICAgICAgY2FzZSBQREZGT05UX0VOQ09ESU5HX01TX1NZTUJPTDoNCi0gICAgICAgICAgICByZXR1cm4gTVNTeW1ib2xFbmNvZGluZzsNCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotRlhfRFdPUkQgUERGX1ByZWRlZmluZWRDaGFyQ29kZUZyb21Vbmljb2RlKGludCBlbmNvZGluZywgRlhfV0NIQVIgdW5pY29kZSkNCi17DQotICAgIHJldHVybiBQREZfRmluZENvZGUoUERGX1VuaWNvZGVzRm9yUHJlZGVmaW5lZENoYXJTZXQoZW5jb2RpbmcpLCB1bmljb2RlKTsNCi19DQotI2lmZGVmIF9fY3BsdXNwbHVzDQotZXh0ZXJuICJDIiB7DQotI2VuZGlmDQotZXh0ZXJuIGludCBGWEZUX3VuaWNvZGVfZnJvbV9hZG9iZV9uYW1lKGNvbnN0IGNoYXIqIG5hbWUpOw0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX0NCi0jZW5kaWYNCi1GWF9XQ0hBUiBQREZfVW5pY29kZUZyb21BZG9iZU5hbWUoY29uc3QgRlhfQ0hBUiogbmFtZSkNCi17DQotICAgIHJldHVybiAoRlhfV0NIQVIpKEZYRlRfdW5pY29kZV9mcm9tX2Fkb2JlX25hbWUobmFtZSkgJiAweDdGRkZGRkZGKTsNCi19DQotQ0ZYX0J5dGVTdHJpbmcgUERGX0Fkb2JlTmFtZUZyb21Vbmljb2RlKEZYX1dDSEFSIHVuaWNvZGUpDQotew0KLSAgICBjaGFyIGdseXBoX25hbWVbNjRdOw0KLSAgICBGWEZUX2Fkb2JlX25hbWVfZnJvbV91bmljb2RlKGdseXBoX25hbWUsIHVuaWNvZGUpOw0KLSAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoZ2x5cGhfbmFtZSwgLTEpOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9mcmVldHlwZS5oIgorZXh0ZXJuIEZYX1dDSEFSIFBERl9Vbmljb2RlRnJvbUFkb2JlTmFtZShjb25zdCBGWF9DSEFSKik7Citjb25zdCBzdHJ1Y3QgX1VuaWNvZGVBbHQgeworICAgIEZYX1dPUkQJbV9Vbmljb2RlOworICAgIGNvbnN0IEZYX0NIQVIqIG1fQWx0ZXI7Cit9CitVbmljb2RlQWx0c1tdID0geworICAgIHsweDAwYTAsICIgIn0sIHsweDAwYTEsICIhIn0sIHsweDAwYTIsICJjIn0sIHsweDAwYTMsICJQIn0sIHsweDAwYTQsICJvIn0sCisgICAgezB4MDBhNSwgIlkifSwgezB4MDBhNiwgInwifSwgezB4MDBhNywgIlMifSwgezB4MDBhOSwgIihDKSJ9LCB7MHgwMGFhLCAiYSJ9LAorICAgIHsweDAwYWIsICI8PCJ9LCB7MHgwMGFjLCAiLXwifSwgezB4MDBhZSwgIihSKSJ9LCB7MHgwMGFmLCAiLSJ9LAorICAgIHsweDAwYjAsICJvIn0sIHsweDAwYjEsICIrLy0ifSwgezB4MDBiMiwgIl4yIn0sIHsgMHgwMGIzLCAiXjMifSwKKyAgICB7MHgwMGI0LCAiJyJ9LCB7MHgwMGI1LCAidSJ9LCB7MHgwMGI2LCAiUCJ9LCB7MHgwMGI3LCAiLiJ9LAorICAgIHsweDAwYjksICJeMSJ9LCB7MHgwMGJhLCAibyJ9LCB7MHgwMGJiLCAiPj4ifSwgezB4MDBiYywgIjEvNCJ9LAorICAgIHsweDAwYmQsICIxLzIifSwgezB4MDBiZSwgIjMvNCJ9LCAgezB4MDBiZiwgIj8ifSwgezB4MDBjMCwgIkEifSwKKyAgICB7MHgwMGMxLCAiQSJ9LCB7MHgwMGMyLCAiQSJ9LCB7MHgwMGMzLCAiQSJ9LCB7MHgwMGM0LCAiQSJ9LAorICAgIHsweDAwYzUsICJBIn0sIHsweDAwYzYsICJBRSJ9LCB7MHgwMGM3LCAiQyJ9LCB7MHgwMGM4LCAiRSJ9LAorICAgIHsweDAwYzksICJFIn0sIHsweDAwY2EsICJFIn0sIHsweDAwY2IsICJFIn0sIHsweDAwY2MsICJJIn0sCisgICAgezB4MDBjZCwgIkkifSwgezB4MDBjZSwgIkkifSwgezB4MDBjZiwgIkkifSwKKyAgICB7MHgwMGQxLCAiTiJ9LCB7MHgwMGQyLCAiTyJ9LCB7MHgwMGQzLCAiTyJ9LCB7MHgwMGQ0LCAiTyJ9LAorICAgIHsweDAwZDUsICJPIn0sIHsweDAwZDYsICJPIn0sIHsweDAwZDcsICJ4In0sIHsweDAwZDgsICJPIn0sCisgICAgezB4MDBkOSwgIlUifSwgezB4MDBkYSwgIlUifSwgezB4MDBkYiwgIlUifSwgezB4MDBkYywgIlUifSwKKyAgICB7MHgwMGRkLCAiWSJ9LCB7MHgwMGRmLCAiUyJ9LCB7MHgwMGUwLCAiYSJ9LAorICAgIHsweDAwZTEsICJhIn0sIHsweDAwZTIsICJhIn0sIHsweDAwZTMsICJhIn0sIHsweDAwZTQsICJhIn0sCisgICAgezB4MDBlNSwgImEifSwgezB4MDBlNiwgImFlIn0sIHsweDAwZTcsICJjIn0sIHsweDAwZTgsICJlIn0sCisgICAgezB4MDBlOSwgImUifSwgezB4MDBlYSwgImUifSwgezB4MDBlYiwgImUifSwgezB4MDBlYywgImkifSwKKyAgICB7MHgwMGVkLCAiaSJ9LCB7MHgwMGVlLCAiaSJ9LCB7MHgwMGVmLCAiaSJ9LAorICAgIHsweDAwZjEsICJuIn0sIHsweDAwZjIsICJvIn0sIHsweDAwZjMsICJvIn0sIHsweDAwZjQsICJvIn0sCisgICAgezB4MDBmNSwgIm8ifSwgezB4MDBmNiwgIm8ifSwgezB4MDBmNywgIi8ifSwgezB4MDBmOCwgIm8ifSwKKyAgICB7MHgwMGY5LCAidSJ9LCB7MHgwMGZhLCAidSJ9LCB7MHgwMGZiLCAidSJ9LCB7MHgwMGZjLCAidSJ9LAorICAgIHsweDAwZmQsICJ5In0sIHsweDAwZmYsICJ5In0sCisgICAgezB4MDJiMCwgImgifSwgezB4MDJiMiwgImoifSwgezB4MDJiMywgInIifSwgezB4MDJiNywgIncifSwKKyAgICB7MHgwMmI4LCAieSJ9LCB7MHgwMmI5LCAiJyJ9LCB7MHgwMmJhLCAiXCIifSwgezB4MDJiYiwgIicifSwKKyAgICB7MHgwMmJjLCAiJyJ9LCB7MHgwMmJkLCAiJyJ9LCB7MHgwMmJlLCAiJyJ9LCB7MHgwMmJmLCAiJyJ9LAorICAgIHsweDAyYzIsICI8In0sIHsweDAyYzMsICI+In0sIHsweDAyYzQsICJeIn0sIHsweDAyYzUsICJ2In0sCisgICAgezB4MDJjNiwgIl4ifSwgezB4MDJjNywgInYifSwgezB4MDJjOCwgIicifSwgezB4MDJjOSwgIi0ifSwKKyAgICB7MHgwMmNhLCAiJyJ9LCB7MHgwMmNiLCAiJyJ9LCB7MHgwMmNjLCAiLiJ9LCB7MHgwMmNkLCAiXyJ9LAorICAgIHsweDIwMTAsICItIn0sIHsweDIwMTIsICItIn0sIHsweDIwMTMsICItIn0sIHsweDIwMTQsICItLSJ9LAorICAgIHsweDIwMTUsICItLSJ9LCB7MHgyMDE2LCAifCJ9LCB7MHgyMDE3LCAiXyJ9LAorICAgIHsweDIwMTgsICInIn0sIHsweDIwMTksICInIn0sIHsweDIwMWEsICIsIn0sIHsweDIwMWIsICInIn0sCisgICAgezB4MjAxYywgIlwiIn0sIHsweDIwMWQsICJcIiJ9LCB7MHgyMDFlLCAiLCJ9LCB7MHgyMDFmLCAiJyJ9LAorICAgIHsweDIwMjAsICIrIn0sIHsweDIwMjEsICIrIn0sIHsweDIwMjIsICIqIn0sIHsweDIwMjMsICI+In0sCisgICAgezB4MjAyNCwgIi4ifSwgezB4MjAyNSwgIi4uIn0sIHsweDIwMjcsICIuIn0sIHsweDIwMzIsICInIn0sCisgICAgezB4MjAzMywgIlwiIn0sIHsweDIwMzUsICInIn0sIHsweDIwMzYsICJcIiJ9LCB7MHgyMDM4LCAiXiJ9LAorICAgIHsweDIwMzksICI8In0sIHsweDIwM2EsICI+In0sIHsweDIwM2IsICIqIn0sIHsweDIwM2MsICIhISJ9LAorICAgIHsweDIwM2QsICI/ISJ9LCB7MHgyMDNlLCAiLSJ9LCB7MHgyMDQ0LCAiLyJ9LCB7MHgyMDQ3LCAiPz8ifSwKKyAgICB7MHgyMDQ4LCAiPyEifSwgezB4MjA0OSwgIiE/In0sIHsweDIwNGUsICIqIn0sIHsweDIwNTIsICIlIn0sCisgICAgezB4MjEyMiwgIihUTSkifSwKKyAgICB7MHgyMjEyLCAiLSJ9LCB7MHgyMjE1LCAiLyJ9LCB7MHgyMjE2LCAiXFwifSwgezB4MjIxNywgIioifSwKKyAgICB7MHgyMjE4LCAiKiJ9LCB7MHgyMjE5LCAiKiJ9LCB7MHgyMjIzLCAifCJ9LCB7MHgyMmM1LCAiLiJ9LAorICAgIHsweDI2NmYsICIjIn0sCisgICAgezBYRjZEOSwgIihDKSJ9LCB7MFhGNkRBLCAiKEMpIn0sIHswWEY2REIsICIoVE0pIn0sCisgICAgezBYRjhFOCwgIihDKSJ9LCB7MHhmOGU5LCAiKEMpIn0sIHswWEY4RUEsICIoVE0pIn0sCisKKyAgICB7MHhmYjAxLCAiZmkifSwgezB4ZmIwMiwgImZsIn0KK307Citjb25zdCBGWF9DSEFSKiBGQ1NfR2V0QWx0U3RyKEZYX1dDSEFSIHVuaWNvZGUpCit7CisgICAgaW50IGJlZ2luID0gMDsKKyAgICBpbnQgZW5kID0gc2l6ZW9mIFVuaWNvZGVBbHRzIC8gc2l6ZW9mKHN0cnVjdCBfVW5pY29kZUFsdCkgLSAxOworICAgIHdoaWxlIChiZWdpbiA8PSBlbmQpIHsKKyAgICAgICAgaW50IG1pZGRsZSA9IChiZWdpbiArIGVuZCkgLyAyOworICAgICAgICBGWF9XT1JEIG1pZGRsZWNvZGUgPSBVbmljb2RlQWx0c1ttaWRkbGVdLm1fVW5pY29kZTsKKyAgICAgICAgaWYgKG1pZGRsZWNvZGUgPiB1bmljb2RlKSB7CisgICAgICAgICAgICBlbmQgPSBtaWRkbGUgLSAxOworICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZWNvZGUgPCB1bmljb2RlKSB7CisgICAgICAgICAgICBiZWdpbiA9IG1pZGRsZSArIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gVW5pY29kZUFsdHNbbWlkZGxlXS5tX0FsdGVyOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorY29uc3QgRlhfV09SRCBTdGFuZGFyZEVuY29kaW5nWzI1Nl0gPSB7CisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAyMCwgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgyMDE5LAorICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJmLCAweDAwMzAsIDB4MDAzMSwKKyAgICAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LCAweDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsCisgICAgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLCAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LAorICAgIDB4MDA0NiwgMHgwMDQ3LCAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwKKyAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywgMHgwMDU4LCAweDAwNTksCisgICAgMHgwMDVhLCAweDAwNWIsIDB4MDA1YywgMHgwMDVkLCAweDAwNWUsIDB4MDA1ZiwgMHgyMDE4LCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLAorICAgIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywgMHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwKKyAgICAweDAwNmUsIDB4MDA2ZiwgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCisgICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMDdiLCAweDAwN2MsIDB4MDA3ZCwgMHgwMDdlLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMGExLCAweDAwYTIsIDB4MDBhMywgMHgyMDQ0LCAweDAwYTUsIDB4MDE5MiwgMHgwMGE3LCAweDAwYTQsIDB4MDAyNywKKyAgICAweDIwMWMsIDB4MDBhYiwgMHgyMDM5LCAweDIwM2EsIDB4ZmIwMSwgMHhmYjAyLCAweDAwMDAsIDB4MjAxMywgMHgyMDIwLCAweDIwMjEsCisgICAgMHgwMGI3LCAweDAwMDAsIDB4MDBiNiwgMHgyMDIyLCAweDIwMWEsIDB4MjAxZSwgMHgyMDFkLCAweDAwYmIsIDB4MjAyNiwgMHgyMDMwLAorICAgIDB4MDAwMCwgMHgwMGJmLCAweDAwMDAsIDB4MDA2MCwgMHgwMGI0LCAweDAyYzYsIDB4MDJkYywgMHgwMGFmLCAweDAyZDgsIDB4MDJkOSwKKyAgICAweDAwYTgsIDB4MDAwMCwgMHgwMmRhLCAweDAwYjgsIDB4MDAwMCwgMHgwMmRkLCAweDAyZGIsIDB4MDJjNywgMHgyMDE0LCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwYzYsIDB4MDAwMCwgMHgwMGFhLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMTQxLCAweDAwZDgsIDB4MDE1MiwgMHgwMGJhLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwZTYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDEzMSwgMHgwMDAwLCAweDAwMDAsIDB4MDE0MiwgMHgwMGY4LAorICAgIDB4MDE1MywgMHgwMGRmLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAKK307Citjb25zdCBGWF9XT1JEIE1hY1JvbWFuRW5jb2RpbmdbMjU2XSA9IHsKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDIwLCAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsCisgICAgMHgwMDI4LCAweDAwMjksIDB4MDAyYSwgMHgwMDJiLCAweDAwMmMsIDB4MDAyZCwgMHgwMDJlLCAweDAwMmYsIDB4MDAzMCwgMHgwMDMxLAorICAgIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsIDB4MDAzOCwgMHgwMDM5LCAweDAwM2EsIDB4MDAzYiwKKyAgICAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsIDB4MDA0MCwgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsCisgICAgMHgwMDQ2LCAweDAwNDcsIDB4MDA0OCwgMHgwMDQ5LCAweDAwNGEsIDB4MDA0YiwgMHgwMDRjLCAweDAwNGQsIDB4MDA0ZSwgMHgwMDRmLAorICAgIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LCAweDAwNTgsIDB4MDA1OSwKKyAgICAweDAwNWEsIDB4MDA1YiwgMHgwMDVjLCAweDAwNWQsIDB4MDA1ZSwgMHgwMDVmLCAweDAwNjAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsCisgICAgMHgwMDY0LCAweDAwNjUsIDB4MDA2NiwgMHgwMDY3LCAweDAwNjgsIDB4MDA2OSwgMHgwMDZhLCAweDAwNmIsIDB4MDA2YywgMHgwMDZkLAorICAgIDB4MDA2ZSwgMHgwMDZmLCAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywKKyAgICAweDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAweDAwN2IsIDB4MDA3YywgMHgwMDdkLCAweDAwN2UsIDB4MDAwMCwgMHgwMGM0LCAweDAwYzUsCisgICAgMHgwMGM3LCAweDAwYzksIDB4MDBkMSwgMHgwMGQ2LCAweDAwZGMsIDB4MDBlMSwgMHgwMGUwLCAweDAwZTIsIDB4MDBlNCwgMHgwMGUzLAorICAgIDB4MDBlNSwgMHgwMGU3LCAweDAwZTksIDB4MDBlOCwgMHgwMGVhLCAweDAwZWIsIDB4MDBlZCwgMHgwMGVjLCAweDAwZWUsIDB4MDBlZiwKKyAgICAweDAwZjEsIDB4MDBmMywgMHgwMGYyLCAweDAwZjQsIDB4MDBmNiwgMHgwMGY1LCAweDAwZmEsIDB4MDBmOSwgMHgwMGZiLCAweDAwZmMsCisgICAgMHgyMDIwLCAweDAwYjAsIDB4MDBhMiwgMHgwMGEzLCAweDAwYTcsIDB4MjAyMiwgMHgwMGI2LCAweDAwZGYsIDB4MDBhZSwgMHgwMGE5LAorICAgIDB4MjEyMiwgMHgwMGI0LCAweDAwYTgsIDB4MDAwMCwgMHgwMGM2LCAweDAwZDgsIDB4MDAwMCwgMHgwMGIxLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwYTUsIDB4MDBiNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDBhYSwgMHgwMGJhLCAweDAwMDAsCisgICAgMHgwMGU2LCAweDAwZjgsIDB4MDBiZiwgMHgwMGEzLCAweDAwYWMsIDB4MDAwMCwgMHgwMTkyLCAweDAwMDAsIDB4MDAwMCwgMHgwMGFiLAorICAgIDB4MDBiYiwgMHgyMDI2LCAweDAwMjAsIDB4MDBjMCwgMHgwMGMzLCAweDAwZDUsIDB4MDE1MiwgMHgwMTUzLCAweDIwMTMsIDB4MjAxNCwKKyAgICAweDIwMWMsIDB4MjAxZCwgMHgyMDE4LCAweDIwMTksIDB4MDBmNywgMHgwMDAwLCAweDAwZmYsIDB4MDE3OCwgMHgyMDQ0LCAweDAwYTQsCisgICAgMHgyMDM5LCAweDIwM2EsIDB4ZmIwMSwgMHhmYjAyLCAweDIwMjEsIDB4MDBiNywgMHgyMDFhLCAweDIwMWUsIDB4MjAzMCwgMHgwMGMyLAorICAgIDB4MDBjYSwgMHgwMGMxLCAweDAwY2IsIDB4MDBjOCwgMHgwMGNkLCAweDAwY2UsIDB4MDBjZiwgMHgwMGNjLCAweDAwZDMsIDB4MDBkNCwKKyAgICAweDAwMDAsIDB4MDBkMiwgMHgwMGRhLCAweDAwZGIsIDB4MDBkOSwgMHgwMTMxLCAweDAyYzYsIDB4MDJkYywgMHgwMGFmLCAweDAyZDgsCisgICAgMHgwMmQ5LCAweDAyZGEsIDB4MDBiOCwgMHgwMmRkLCAweDAyZGIsIDB4MDJjNworfTsKK2NvbnN0IEZYX1dPUkQgQWRvYmVXaW5BbnNpRW5jb2RpbmdbMjU2XSA9IHsKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMjAsIDB4MDAyMSwgMHgwMDIyLCAweDAwMjMsIDB4MDAyNCwgMHgwMDI1LCAweDAwMjYsIDB4MDAyNywKKyAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDJhLCAweDAwMmIsIDB4MDAyYywgMHgwMDJkLCAweDAwMmUsIDB4MDAyZiwKKyAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywKKyAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsIDB4MDAzYywgMHgwMDNkLCAweDAwM2UsIDB4MDAzZiwKKyAgICAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywKKyAgICAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwKKyAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywKKyAgICAweDAwNTgsIDB4MDA1OSwgMHgwMDVhLCAweDAwNWIsIDB4MDA1YywgMHgwMDVkLCAweDAwNWUsIDB4MDA1ZiwKKyAgICAweDAwNjAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywKKyAgICAweDAwNjgsIDB4MDA2OSwgMHgwMDZhLCAweDAwNmIsIDB4MDA2YywgMHgwMDZkLCAweDAwNmUsIDB4MDA2ZiwKKyAgICAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywKKyAgICAweDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAweDAwN2IsIDB4MDA3YywgMHgwMDdkLCAweDAwN2UsIDB4MjAyMiwKKyAgICAweDIwYWMsIDB4MjAyMiwgMHgyMDFhLCAweDAxOTIsIDB4MjAxZSwgMHgyMDI2LCAweDIwMjAsIDB4MjAyMSwKKyAgICAweDAyYzYsIDB4MjAzMCwgMHgwMTYwLCAweDIwMzksCTB4MDE1MiwgMHgyMDIyLCAweDAxN2QsIDB4MjAyMiwKKyAgICAweDIwMjIsIDB4MjAxOCwgMHgyMDE5LCAweDIwMWMsIDB4MjAxZCwgMHgyMDIyLCAweDIwMTMsIDB4MjAxNCwKKyAgICAweDAyZGMsIDB4MjEyMiwgMHgwMTYxLCAweDIwM2EsIDB4MDE1MywgMHgyMDIyLCAweDAxN2UsIDB4MDE3OCwKKyAgICAweDAwMjAsIDB4MDBhMSwgMHgwMGEyLCAweDAwYTMsIDB4MDBhNCwgMHgwMGE1LCAweDAwYTYsIDB4MDBhNywKKyAgICAweDAwYTgsIDB4MDBhOSwgMHgwMGFhLCAweDAwYWIsIDB4MDBhYywgMHgwMDJkLCAweDAwYWUsIDB4MDBhZiwKKyAgICAweDAwYjAsIDB4MDBiMSwgMHgwMGIyLCAweDAwYjMsIDB4MDBiNCwgMHgwMGI1LCAweDAwYjYsIDB4MDBiNywKKyAgICAweDAwYjgsIDB4MDBiOSwgMHgwMGJhLCAweDAwYmIsIDB4MDBiYywgMHgwMGJkLCAweDAwYmUsIDB4MDBiZiwKKyAgICAweDAwYzAsIDB4MDBjMSwgMHgwMGMyLCAweDAwYzMsIDB4MDBjNCwgMHgwMGM1LCAweDAwYzYsIDB4MDBjNywKKyAgICAweDAwYzgsIDB4MDBjOSwgMHgwMGNhLCAweDAwY2IsIDB4MDBjYywgMHgwMGNkLCAweDAwY2UsIDB4MDBjZiwKKyAgICAweDAwZDAsIDB4MDBkMSwgMHgwMGQyLCAweDAwZDMsIDB4MDBkNCwgMHgwMGQ1LCAweDAwZDYsIDB4MDBkNywKKyAgICAweDAwZDgsIDB4MDBkOSwgMHgwMGRhLCAweDAwZGIsIDB4MDBkYywgMHgwMGRkLCAweDAwZGUsIDB4MDBkZiwKKyAgICAweDAwZTAsIDB4MDBlMSwgMHgwMGUyLCAweDAwZTMsIDB4MDBlNCwgMHgwMGU1LCAweDAwZTYsIDB4MDBlNywKKyAgICAweDAwZTgsIDB4MDBlOSwgMHgwMGVhLCAweDAwZWIsIDB4MDBlYywgMHgwMGVkLCAweDAwZWUsIDB4MDBlZiwKKyAgICAweDAwZjAsIDB4MDBmMSwgMHgwMGYyLCAweDAwZjMsIDB4MDBmNCwgMHgwMGY1LCAweDAwZjYsIDB4MDBmNywKKyAgICAweDAwZjgsIDB4MDBmOSwgMHgwMGZhLCAweDAwZmIsIDB4MDBmYywgMHgwMGZkLCAweDAwZmUsIDB4MDBmZgorfTsKK2V4dGVybiBjb25zdCBGWF9XT1JEIFBERkRvY0VuY29kaW5nWzI1Nl07Citjb25zdCBGWF9XT1JEIE1hY0V4cGVydEVuY29kaW5nWzI1Nl0gPSB7CisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAyMCwgMHhmNzIxLCAweGY2ZjgsIDB4ZjdhMiwgMHhmNzI0LCAweGY2ZTQsIDB4ZjcyNiwgMHhmN2I0LAorICAgIDB4MjA3ZCwgMHgyMDdlLCAweDIwMjUsIDB4MjAyNCwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgyMDQ0LCAweGY3MzAsIDB4ZjczMSwKKyAgICAweGY3MzIsIDB4ZjczMywgMHhmNzM0LCAweGY3MzUsIDB4ZjczNiwgMHhmNzM3LCAweGY3MzgsIDB4ZjczOSwgMHgwMDNhLCAweDAwM2IsCisgICAgMHgwMDAwLCAweGY2ZGUsIDB4MDAwMCwgMHhmNzNmLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ZjdmMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMGJjLCAweDAwYmQsIDB4MDBiZSwgMHgyMTViLCAweDIxNWMsIDB4MjE1ZCwgMHgyMTVlLCAweDIxNTMsIDB4MjE1NCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweGZiMDAsIDB4ZmIwMSwgMHhmYjAyLCAweGZiMDMsCisgICAgMHhmYjA0LCAweDIwOGQsIDB4MDAwMCwgMHgyMDhlLCAweGY2ZjYsIDB4ZjZlNSwgMHhmNzYwLCAweGY3NjEsIDB4Zjc2MiwgMHhmNzYzLAorICAgIDB4Zjc2NCwgMHhmNzY1LCAweGY3NjYsIDB4Zjc2NywgMHhmNzY4LCAweGY3NjksIDB4Zjc2YSwgMHhmNzZiLCAweGY3NmMsIDB4Zjc2ZCwKKyAgICAweGY3NmUsIDB4Zjc2ZiwgMHhmNzcwLCAweGY3NzEsIDB4Zjc3MiwgMHhmNzczLCAweGY3NzQsIDB4Zjc3NSwgMHhmNzc2LCAweGY3NzcsCisgICAgMHhmNzc4LCAweGY3NzksIDB4Zjc3YSwgMHgyMGExLCAweGY2ZGMsIDB4ZjZkZCwgMHhmNmZlLCAweDAwMDAsIDB4MDAwMCwgMHhmNmU5LAorICAgIDB4ZjZlMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweGY3ZTEsIDB4ZjdlMCwgMHhmN2UyLCAweGY3ZTQsIDB4ZjdlMywKKyAgICAweGY3ZTUsIDB4ZjdlNywgMHhmN2U5LCAweGY3ZTgsIDB4ZjdlYSwgMHhmN2ViLCAweGY3ZWQsIDB4ZjdlYywgMHhmN2VlLCAweGY3ZWYsCisgICAgMHhmN2YxLCAweGY3ZjMsIDB4ZjdmMiwgMHhmN2Y0LCAweGY3ZjYsIDB4ZjdmNSwgMHhmN2ZhLCAweGY3ZjksIDB4ZjdmYiwgMHhmN2ZjLAorICAgIDB4MDAwMCwgMHgyMDc4LCAweDIwODQsIDB4MjA4MywgMHgyMDg2LCAweDIwODgsIDB4MjA4NywgMHhmNmZkLCAweDAwMDAsIDB4ZjZkZiwKKyAgICAweDIwODIsIDB4MDAwMCwgMHhmN2E4LCAweDAwMDAsIDB4ZjZmNSwgMHhmNmZkLCAweDIwODUsIDB4MDAwMCwgMHhmNmUxLCAweGY2ZTcsCisgICAgMHhmN2ZkLCAweDAwMDAsIDB4ZjZlMywgMHgwMDAwLCAweDAwMDAsIDB4ZjdmZSwgMHgwMDAwLCAweDIwODksIDB4MjA4MCwgMHhmNmZmLAorICAgIDB4ZjdlNiwgMHhmN2Y4LCAweGY3YmYsIDB4MjA4MSwgMHhmNmU5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4ZjdiOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ZjZmYSwgMHgyMDEyLCAweGY2ZTYsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweGY3YTEsIDB4MDAwMCwgMHhmN2ZmLCAweDAwMDAsIDB4MDBiOSwgMHgwMGIyLAorICAgIDB4MDBiMywgMHgyMDc0LCAweDIwNzUsIDB4MjA3NiwgMHgyMDc3LCAweDIwNzksIDB4MjA3MCwgMHgwMDAwLCAweGY2ZWMsIDB4ZjZmMSwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweGY2ZWQsIDB4ZjZmMiwgMHhmNmViLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweGY2ZWUsIDB4ZjZmYiwgMHhmNmY0LCAweGY3YWYsIDB4ZjZlYSwgMHgyMDdmLCAweGY2ZWYsIDB4ZjZlMiwgMHhmNmU4LAorICAgIDB4ZjZmNywgMHhmNmZjLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAKK307Citjb25zdCBGWF9XT1JEIEFkb2JlU3ltYm9sRW5jb2RpbmdbMjU2XSA9IHsKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMjAsIDB4MDAyMSwgMHgyMjAwLCAweDAwMjMsIDB4MjIwMywgMHgwMDI1LCAweDAwMjYsIDB4MjIwQiwKKyAgICAweDAwMjgsIDB4MDAyOSwgMHgyMjE3LCAweDAwMkIsIDB4MDAyQywgMHgyMjEyLCAweDAwMkUsIDB4MDAyRiwKKyAgICAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywKKyAgICAweDAwMzgsIDB4MDAzOSwgMHgwMDNBLCAweDAwM0IsIDB4MDAzQywgMHgwMDNELCAweDAwM0UsIDB4MDAzRiwKKyAgICAweDIyNDUsIDB4MDM5MSwgMHgwMzkyLCAweDAzQTcsIDB4MDM5NCwgMHgwMzk1LCAweDAzQTYsIDB4MDM5MywKKyAgICAweDAzOTcsIDB4MDM5OSwgMHgwM0QxLCAweDAzOUEsIDB4MDM5QiwgMHgwMzlDLCAweDAzOUQsIDB4MDM5RiwKKyAgICAweDAzQTAsIDB4MDM5OCwgMHgwM0ExLCAweDAzQTMsIDB4MDNBNCwgMHgwM0E1LCAweDAzQzIsIDB4MDNBOSwKKyAgICAweDAzOUUsIDB4MDNBOCwgMHgwMzk2LCAweDAwNUIsIDB4MjIzNCwgMHgwMDVELCAweDIyQTUsIDB4MDA1RiwKKyAgICAweEY4RTUsIDB4MDNCMSwgMHgwM0IyLCAweDAzQzcsIDB4MDNCNCwgMHgwM0I1LCAweDAzQzYsIDB4MDNCMywKKyAgICAweDAzQjcsIDB4MDNCOSwgMHgwM0Q1LCAweDAzQkEsIDB4MDNCQiwgMHgwM0JDLCAweDAzQkQsIDB4MDNCRiwKKyAgICAweDAzQzAsIDB4MDNCOCwgMHgwM0MxLCAweDAzQzMsIDB4MDNDNCwgMHgwM0M1LCAweDAzRDYsIDB4MDNDOSwKKyAgICAweDAzQkUsIDB4MDNDOCwgMHgwM0I2LCAweDAwN0IsIDB4MDA3QywgMHgwMDdELCAweDIyM0MsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDIwQUMsIDB4MDNEMiwgMHgyMDMyLCAweDIyNjQsIDB4MjA0NCwgMHgyMjFFLCAweDAxOTIsIDB4MjY2MywKKyAgICAweDI2NjYsIDB4MjY2NSwgMHgyNjYwLCAweDIxOTQsIDB4MjE5MCwgMHgyMTkxLCAweDIxOTIsIDB4MjE5MywKKyAgICAweDAwQjAsIDB4MDBCMSwgMHgyMDMzLCAweDIyNjUsIDB4MDBENywgMHgyMjFELCAweDIyMDIsIDB4MjAyMiwKKyAgICAweDAwRjcsIDB4MjI2MCwgMHgyMjYxLCAweDIyNDgsIDB4MjAyNiwgMHhGOEU2LCAweEY4RTcsIDB4MjFCNSwKKyAgICAweDIxMzUsIDB4MjExMSwgMHgyMTFDLCAweDIxMTgsIDB4MjI5NywgMHgyMjk1LCAweDIyMDUsIDB4MjIyOSwKKyAgICAweDIyMkEsIDB4MjI4MywgMHgyMjg3LCAweDIyODQsIDB4MjI4MiwgMHgyMjg2LCAweDIyMDgsIDB4MjIwOSwKKyAgICAweDIyMjAsIDB4MjIwNywgMHhGNkRBLCAweEY2RDksIDB4RjZEQiwgMHgyMjBGLCAweDIyMUEsIDB4MjJDNSwKKyAgICAweDAwQUMsIDB4MjIyNywgMHgyMjI4LCAweDIxRDQsIDB4MjFEMCwgMHgyMUQxLCAweDIxRDIsIDB4MjFEMywKKyAgICAweDI1Q0EsIDB4MjMyOSwgMHhGOEU4LCAweEY4RTksIDB4RjhFQSwgMHgyMjExLCAweEY4RUIsIDB4RjhFQywKKyAgICAweEY4RUQsIDB4RjhFRSwgMHhGOEVGLCAweEY4RjAsIDB4RjhGMSwgMHhGOEYyLCAweEY4RjMsIDB4RjhGNCwKKyAgICAweDAwMDAsIDB4MjMyQSwgMHgyMjJCLCAweDIzMjAsIDB4RjhGNSwgMHgyMzIxLCAweEY4RjYsIDB4RjhGNywKKyAgICAweEY4RjgsIDB4RjhGOSwgMHhGOEZBLCAweEY4RkIsIDB4RjhGQywgMHhGOEZELCAweEY4RkUsIDB4MDAwMCwKK307Citjb25zdCBGWF9XT1JEIFphcGZFbmNvZGluZ1syNTZdID0geworICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAyMCwgMHgyNzAxLCAweDI3MDIsIDB4MjcwMywgMHgyNzA0LCAweDI2MEUsIDB4MjcwNiwgMHgyNzA3LAorICAgIDB4MjcwOCwgMHgyNzA5LCAweDI2MUIsIDB4MjYxRSwgMHgyNzBDLCAweDI3MEQsIDB4MjcwRSwgMHgyNzBGLAorICAgIDB4MjcxMCwgMHgyNzExLCAweDI3MTIsIDB4MjcxMywgMHgyNzE0LCAweDI3MTUsIDB4MjcxNiwgMHgyNzE3LAorICAgIDB4MjcxOCwgMHgyNzE5LCAweDI3MUEsIDB4MjcxQiwgMHgyNzFDLCAweDI3MUQsIDB4MjcxRSwgMHgyNzFGLAorICAgIDB4MjcyMCwgMHgyNzIxLCAweDI3MjIsIDB4MjcyMywgMHgyNzI0LCAweDI3MjUsIDB4MjcyNiwgMHgyNzI3LAorICAgIDB4MjYwNSwgMHgyNzI5LCAweDI3MkEsIDB4MjcyQiwgMHgyNzJDLCAweDI3MkQsIDB4MjcyRSwgMHgyNzJGLAorICAgIDB4MjczMCwgMHgyNzMxLCAweDI3MzIsIDB4MjczMywgMHgyNzM0LCAweDI3MzUsIDB4MjczNiwgMHgyNzM3LAorICAgIDB4MjczOCwgMHgyNzM5LCAweDI3M0EsIDB4MjczQiwgMHgyNzNDLCAweDI3M0QsIDB4MjczRSwgMHgyNzNGLAorICAgIDB4Mjc0MCwgMHgyNzQxLCAweDI3NDIsIDB4Mjc0MywgMHgyNzQ0LCAweDI3NDUsIDB4Mjc0NiwgMHgyNzQ3LAorICAgIDB4Mjc0OCwgMHgyNzQ5LCAweDI3NEEsIDB4Mjc0QiwgMHgyNUNGLCAweDI3NEQsIDB4MjVBMCwgMHgyNzRGLAorICAgIDB4Mjc1MCwgMHgyNzUxLCAweDI3NTIsIDB4MjVCMiwgMHgyNUJDLCAweDI1QzYsIDB4Mjc1NiwgMHgyNUQ3LAorICAgIDB4Mjc1OCwgMHgyNzU5LCAweDI3NUEsIDB4Mjc1QiwgMHgyNzVDLCAweDI3NUQsIDB4Mjc1RSwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgyNzYxLCAweDI3NjIsIDB4Mjc2MywgMHgyNzY0LCAweDI3NjUsIDB4Mjc2NiwgMHgyNzY3LAorICAgIDB4MjY2MywgMHgyNjY2LCAweDI2NjUsIDB4MjY2MCwgMHgyNDYwLCAweDI0NjEsIDB4MjQ2MiwgMHgyNDYzLAorICAgIDB4MjQ2NCwgMHgyNDY1LCAweDI0NjYsIDB4MjQ2NywgMHgyNDY4LCAweDI0NjksIDB4Mjc3NiwgMHgyNzc3LAorICAgIDB4Mjc3OCwgMHgyNzc5LCAweDI3N0EsIDB4Mjc3QiwgMHgyNzdDLCAweDI3N0QsIDB4Mjc3RSwgMHgyNzdGLAorICAgIDB4Mjc4MCwgMHgyNzgxLCAweDI3ODIsIDB4Mjc4MywgMHgyNzg0LCAweDI3ODUsIDB4Mjc4NiwgMHgyNzg3LAorICAgIDB4Mjc4OCwgMHgyNzg5LCAweDI3OEEsIDB4Mjc4QiwgMHgyNzhDLCAweDI3OEQsIDB4Mjc4RSwgMHgyNzhGLAorICAgIDB4Mjc5MCwgMHgyNzkxLCAweDI3OTIsIDB4Mjc5MywgMHgyNzk0LCAweDIxOTIsIDB4MjE5NCwgMHgyMTk1LAorICAgIDB4Mjc5OCwgMHgyNzk5LCAweDI3OUEsIDB4Mjc5QiwgMHgyNzlDLCAweDI3OUQsIDB4Mjc5RSwgMHgyNzlGLAorICAgIDB4MjdBMCwgMHgyN0ExLCAweDI3QTIsIDB4MjdBMywgMHgyN0E0LCAweDI3QTUsIDB4MjdBNiwgMHgyN0E3LAorICAgIDB4MjdBOCwgMHgyN0E5LCAweDI3QUEsIDB4MjdBQiwgMHgyN0FDLCAweDI3QUQsIDB4MjdBRSwgMHgyN0FGLAorICAgIDB4MDAwMCwgMHgyN0IxLCAweDI3QjIsIDB4MjdCMywgMHgyN0I0LCAweDI3QjUsIDB4MjdCNiwgMHgyN0I3LAorICAgIDB4MjdCOCwgMHgyN0I5LCAweDI3QkEsIDB4MjdCQiwgMHgyN0JDLCAweDI3QkQsIDB4MjdCRSwgMHgwMDAwLAorfTsKK2NvbnN0IEZYX0xQQ1NUUiBTdGFuZGFyZEVuY29kaW5nTmFtZXNbMjI0XSA9IHsKKyAgICAic3BhY2UiLCAiZXhjbGFtIiwgInF1b3RlZGJsIiwgIm51bWJlcnNpZ24iLCAiZG9sbGFyIiwgInBlcmNlbnQiLCAiYW1wZXJzYW5kIiwgInF1b3RlcmlnaHQiLAorICAgICJwYXJlbmxlZnQiLCAicGFyZW5yaWdodCIsICJhc3RlcmlzayIsICJwbHVzIiwgImNvbW1hIiwgImh5cGhlbiIsICJwZXJpb2QiLCAic2xhc2giLAorICAgICJ6ZXJvIiwgIm9uZSIsICJ0d28iLCAidGhyZWUiLCAiZm91ciIsICJmaXZlIiwgInNpeCIsICJzZXZlbiIsCisgICAgImVpZ2h0IiwgIm5pbmUiLCAiY29sb24iLCAic2VtaWNvbG9uIiwgImxlc3MiLCAiZXF1YWwiLCAiZ3JlYXRlciIsICJxdWVzdGlvbiIsCisgICAgImF0IiwgIkEiLCAiQiIsICJDIiwgIkQiLCAiRSIsICJGIiwgIkciLAorICAgICJIIiwgIkkiLCAiSiIsICJLIiwgIkwiLCAiTSIsICJOIiwgIk8iLAorICAgICJQIiwgIlEiLCAiUiIsICJTIiwgIlQiLCAiVSIsICJWIiwgIlciLAorICAgICJYIiwgIlkiLCAiWiIsICJicmFja2V0bGVmdCIsICJiYWNrc2xhc2giLCAiYnJhY2tldHJpZ2h0IiwgImFzY2lpY2lyY3VtIiwgInVuZGVyc2NvcmUiLAorICAgICJxdW90ZWxlZnQiLCAiYSIsICJiIiwgImMiLCAiZCIsICJlIiwgImYiLCAiZyIsCisgICAgImgiLCAiaSIsICJqIiwgImsiLCAibCIsICJtIiwgIm4iLCAibyIsCisgICAgInAiLCAicSIsICJyIiwgInMiLCAidCIsICJ1IiwgInYiLCAidyIsCisgICAgIngiLCAieSIsICJ6IiwgImJyYWNlbGVmdCIsICJiYXIiLCAiYnJhY2VyaWdodCIsICJhc2NpaXRpbGRlIiwgTlVMTCwKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorICAgIE5VTEwsICJleGNsYW1kb3duIiwgImNlbnQiLCAic3RlcmxpbmciLCAiZnJhY3Rpb24iLCAieWVuIiwgImZsb3JpbiIsICJzZWN0aW9uIiwKKyAgICAiY3VycmVuY3kiLCAicXVvdGVzaW5nbGUiLCAicXVvdGVkYmxsZWZ0IiwgImd1aWxsZW1vdGxlZnQiLCAiZ3VpbHNpbmdsbGVmdCIsICJndWlsc2luZ2xyaWdodCIsICJmaSIsICJmbCIsCisgICAgTlVMTCwgImVuZGFzaCIsICJkYWdnZXIiLCAiZGFnZ2VyZGJsIiwgInBlcmlvZGNlbnRlcmVkIiwgTlVMTCwgInBhcmFncmFwaCIsICJidWxsZXQiLAorICAgICJxdW90ZXNpbmdsYmFzZSIsICJxdW90ZWRibGJhc2UiLCAicXVvdGVkYmxyaWdodCIsICJndWlsbGVtb3RyaWdodCIsICJlbGxpcHNpcyIsICJwZXJ0aG91c2FuZCIsIE5VTEwsICJxdWVzdGlvbmRvd24iLAorICAgIE5VTEwsICJncmF2ZSIsICJhY3V0ZSIsICJjaXJjdW1mbGV4IiwgInRpbGRlIiwgIm1hY3JvbiIsICJicmV2ZSIsICJkb3RhY2NlbnQiLAorICAgICJkaWVyZXNpcyIsIE5VTEwsICJyaW5nIiwgImNlZGlsbGEiLCBOVUxMLCAiaHVuZ2FydW1sYXV0IiwgIm9nb25layIsICJjYXJvbiIsCisgICAgImVtZGFzaCIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKyAgICBOVUxMLCAiQUUiLCBOVUxMLCAib3JkZmVtaW5pbmUiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorICAgICJMc2xhc2giLCAiT3NsYXNoIiwgIk9FIiwgIm9yZG1hc2N1bGluZSIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisgICAgTlVMTCwgImFlIiwgTlVMTCwgTlVMTCwgTlVMTCwgImRvdGxlc3NpIiwgTlVMTCwgTlVMTCwKKyAgICAibHNsYXNoIiwgIm9zbGFzaCIsICJvZSIsICJnZXJtYW5kYmxzIiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKK307Citjb25zdCBGWF9MUENTVFIgQWRvYmVXaW5BbnNpRW5jb2RpbmdOYW1lc1syMjRdID0geworICAgICJzcGFjZSIsICJleGNsYW0iLCAicXVvdGVkYmwiLCAibnVtYmVyc2lnbiIsICJkb2xsYXIiLCAicGVyY2VudCIsICJhbXBlcnNhbmQiLCAicXVvdGVzaW5nbGUiLAorICAgICJwYXJlbmxlZnQiLCAicGFyZW5yaWdodCIsICJhc3RlcmlzayIsICJwbHVzIiwgImNvbW1hIiwgImh5cGhlbiIsICJwZXJpb2QiLCAic2xhc2giLAorICAgICJ6ZXJvIiwgIm9uZSIsICJ0d28iLCAidGhyZWUiLCAiZm91ciIsICJmaXZlIiwgInNpeCIsICJzZXZlbiIsCisgICAgImVpZ2h0IiwgIm5pbmUiLCAiY29sb24iLCAic2VtaWNvbG9uIiwgImxlc3MiLCAiZXF1YWwiLCAiZ3JlYXRlciIsICJxdWVzdGlvbiIsCisgICAgImF0IiwgIkEiLCAiQiIsICJDIiwgIkQiLCAiRSIsICJGIiwgIkciLAorICAgICJIIiwgIkkiLCAiSiIsICJLIiwgIkwiLCAiTSIsICJOIiwgIk8iLAorICAgICJQIiwgIlEiLCAiUiIsICJTIiwgIlQiLCAiVSIsICJWIiwgIlciLAorICAgICJYIiwgIlkiLCAiWiIsICJicmFja2V0bGVmdCIsICJiYWNrc2xhc2giLCAiYnJhY2tldHJpZ2h0IiwgImFzY2lpY2lyY3VtIiwgInVuZGVyc2NvcmUiLAorICAgICJncmF2ZSIsICJhIiwgImIiLCAiYyIsICJkIiwgImUiLCAiZiIsICJnIiwKKyAgICAiaCIsICJpIiwgImoiLCAiayIsICJsIiwgIm0iLCAibiIsICJvIiwKKyAgICAicCIsICJxIiwgInIiLCAicyIsICJ0IiwgInUiLCAidiIsICJ3IiwKKyAgICAieCIsICJ5IiwgInoiLCAiYnJhY2VsZWZ0IiwgImJhciIsICJicmFjZXJpZ2h0IiwgImFzY2lpdGlsZGUiLCAiYnVsbGV0IiwKKyAgICAiRXVybyIsICJidWxsZXQiLCAicXVvdGVzaW5nbGJhc2UiLCAiZmxvcmluIiwgInF1b3RlZGJsYmFzZSIsICJlbGxpcHNpcyIsICJkYWdnZXIiLCAiZGFnZ2VyZGJsIiwKKyAgICAiY2lyY3VtZmxleCIsICJwZXJ0aG91c2FuZCIsICJTY2Fyb24iLCAiZ3VpbHNpbmdsbGVmdCIsICJPRSIsICJidWxsZXQiLCAiWmNhcm9uIiwgImJ1bGxldCIsCisgICAgImJ1bGxldCIsICJxdW90ZWxlZnQiLCAicXVvdGVyaWdodCIsICJxdW90ZWRibGxlZnQiLCAicXVvdGVkYmxyaWdodCIsICJidWxsZXQiLCAiZW5kYXNoIiwgImVtZGFzaCIsCisgICAgInRpbGRlIiwgInRyYWRlbWFyayIsICJzY2Fyb24iLCAiZ3VpbHNpbmdscmlnaHQiLCAib2UiLCAiYnVsbGV0IiwgInpjYXJvbiIsICJZZGllcmVzaXMiLAorICAgICJzcGFjZSIsICJleGNsYW1kb3duIiwgImNlbnQiLCAic3RlcmxpbmciLCAiY3VycmVuY3kiLCAieWVuIiwgImJyb2tlbmJhciIsICJzZWN0aW9uIiwKKyAgICAiZGllcmVzaXMiLCAiY29weXJpZ2h0IiwgIm9yZGZlbWluaW5lIiwgImd1aWxsZW1vdGxlZnQiLCAibG9naWNhbG5vdCIsICJoeXBoZW4iLCAicmVnaXN0ZXJlZCIsICJtYWNyb24iLAorICAgICJkZWdyZWUiLCAicGx1c21pbnVzIiwgInR3b3N1cGVyaW9yIiwgInRocmVlc3VwZXJpb3IiLCAiYWN1dGUiLCAibXUiLCAicGFyYWdyYXBoIiwgInBlcmlvZGNlbnRlcmVkIiwKKyAgICAiY2VkaWxsYSIsICJvbmVzdXBlcmlvciIsICJvcmRtYXNjdWxpbmUiLCAiZ3VpbGxlbW90cmlnaHQiLCAib25lcXVhcnRlciIsICJvbmVoYWxmIiwgInRocmVlcXVhcnRlcnMiLCAicXVlc3Rpb25kb3duIiwKKyAgICAiQWdyYXZlIiwgIkFhY3V0ZSIsICJBY2lyY3VtZmxleCIsICJBdGlsZGUiLCAiQWRpZXJlc2lzIiwgIkFyaW5nIiwgIkFFIiwgIkNjZWRpbGxhIiwKKyAgICAiRWdyYXZlIiwgIkVhY3V0ZSIsICJFY2lyY3VtZmxleCIsICJFZGllcmVzaXMiLCAiSWdyYXZlIiwgIklhY3V0ZSIsICJJY2lyY3VtZmxleCIsICJJZGllcmVzaXMiLAorICAgICJFdGgiLCAiTnRpbGRlIiwgIk9ncmF2ZSIsICJPYWN1dGUiLCAiT2NpcmN1bWZsZXgiLCAiT3RpbGRlIiwgIk9kaWVyZXNpcyIsICJtdWx0aXBseSIsCisgICAgIk9zbGFzaCIsICJVZ3JhdmUiLCAiVWFjdXRlIiwgIlVjaXJjdW1mbGV4IiwgIlVkaWVyZXNpcyIsICJZYWN1dGUiLCAiVGhvcm4iLCAiZ2VybWFuZGJscyIsCisgICAgImFncmF2ZSIsICJhYWN1dGUiLCAiYWNpcmN1bWZsZXgiLCAiYXRpbGRlIiwgImFkaWVyZXNpcyIsICJhcmluZyIsICJhZSIsICJjY2VkaWxsYSIsCisgICAgImVncmF2ZSIsICJlYWN1dGUiLCAiZWNpcmN1bWZsZXgiLCAiZWRpZXJlc2lzIiwgImlncmF2ZSIsICJpYWN1dGUiLCAiaWNpcmN1bWZsZXgiLCAiaWRpZXJlc2lzIiwKKyAgICAiZXRoIiwgIm50aWxkZSIsICJvZ3JhdmUiLCAib2FjdXRlIiwgIm9jaXJjdW1mbGV4IiwgIm90aWxkZSIsICJvZGllcmVzaXMiLCAiZGl2aWRlIiwKKyAgICAib3NsYXNoIiwgInVncmF2ZSIsICJ1YWN1dGUiLCAidWNpcmN1bWZsZXgiLCAidWRpZXJlc2lzIiwgInlhY3V0ZSIsICJ0aG9ybiIsICJ5ZGllcmVzaXMiLAorfTsKK2NvbnN0IEZYX0xQQ1NUUiAgTWFjUm9tYW5FbmNvZGluZ05hbWVzWzIyNF0gPSB7CisgICAgInNwYWNlIiwgImV4Y2xhbSIsICJxdW90ZWRibCIsICJudW1iZXJzaWduIiwgImRvbGxhciIsICJwZXJjZW50IiwgImFtcGVyc2FuZCIsICJxdW90ZXNpbmdsZSIsCisgICAgInBhcmVubGVmdCIsICJwYXJlbnJpZ2h0IiwgImFzdGVyaXNrIiwgInBsdXMiLCAiY29tbWEiLCAiaHlwaGVuIiwgInBlcmlvZCIsICJzbGFzaCIsCisgICAgInplcm8iLCAib25lIiwgInR3byIsICJ0aHJlZSIsICJmb3VyIiwgImZpdmUiLCAic2l4IiwgInNldmVuIiwKKyAgICAiZWlnaHQiLCAibmluZSIsICJjb2xvbiIsICJzZW1pY29sb24iLCAibGVzcyIsICJlcXVhbCIsICJncmVhdGVyIiwgInF1ZXN0aW9uIiwKKyAgICAiYXQiLCAiQSIsICJCIiwgIkMiLCAiRCIsICJFIiwgIkYiLCAiRyIsCisgICAgIkgiLCAiSSIsICJKIiwgIksiLCAiTCIsICJNIiwgIk4iLCAiTyIsCisgICAgIlAiLCAiUSIsICJSIiwgIlMiLCAiVCIsICJVIiwgIlYiLCAiVyIsCisgICAgIlgiLCAiWSIsICJaIiwgImJyYWNrZXRsZWZ0IiwgImJhY2tzbGFzaCIsICJicmFja2V0cmlnaHQiLCAiYXNjaWljaXJjdW0iLCAidW5kZXJzY29yZSIsCisgICAgImdyYXZlIiwgImEiLCAiYiIsICJjIiwgImQiLCAiZSIsICJmIiwgImciLAorICAgICJoIiwgImkiLCAiaiIsICJrIiwgImwiLCAibSIsICJuIiwgIm8iLAorICAgICJwIiwgInEiLCAiciIsICJzIiwgInQiLCAidSIsICJ2IiwgInciLAorICAgICJ4IiwgInkiLCAieiIsICJicmFjZWxlZnQiLCAiYmFyIiwgImJyYWNlcmlnaHQiLCAiYXNjaWl0aWxkZSIsIE5VTEwsCisgICAgIkFkaWVyZXNpcyIsICJBcmluZyIsICJDY2VkaWxsYSIsICJFYWN1dGUiLCAiTnRpbGRlIiwgIk9kaWVyZXNpcyIsICJVZGllcmVzaXMiLCAiYWFjdXRlIiwKKyAgICAiYWdyYXZlIiwgImFjaXJjdW1mbGV4IiwgImFkaWVyZXNpcyIsICJhdGlsZGUiLCAiYXJpbmciLCAiY2NlZGlsbGEiLCAiZWFjdXRlIiwgImVncmF2ZSIsCisgICAgImVjaXJjdW1mbGV4IiwgImVkaWVyZXNpcyIsICJpYWN1dGUiLCAiaWdyYXZlIiwgImljaXJjdW1mbGV4IiwgImlkaWVyZXNpcyIsICJudGlsZGUiLCAib2FjdXRlIiwKKyAgICAib2dyYXZlIiwgIm9jaXJjdW1mbGV4IiwgIm9kaWVyZXNpcyIsICJvdGlsZGUiLCAidWFjdXRlIiwgInVncmF2ZSIsICJ1Y2lyY3VtZmxleCIsICJ1ZGllcmVzaXMiLAorICAgICJkYWdnZXIiLCAiZGVncmVlIiwgImNlbnQiLCAic3RlcmxpbmciLCAic2VjdGlvbiIsICJidWxsZXQiLCAicGFyYWdyYXBoIiwgImdlcm1hbmRibHMiLAorICAgICJyZWdpc3RlcmVkIiwgImNvcHlyaWdodCIsICJ0cmFkZW1hcmsiLCAiYWN1dGUiLCAiZGllcmVzaXMiLCAibm90ZXF1YWwiLCAiQUUiLCAiT3NsYXNoIiwKKyAgICAiaW5maW5pdHkiLCAicGx1c21pbnVzIiwgImxlc3NlcXVhbCIsICJncmVhdGVyZXF1YWwiLCAieWVuIiwgIm11IiwgInBhcnRpYWxkaWZmIiwgInN1bW1hdGlvbiIsCisgICAgInByb2R1Y3QiLCAicGkiLCAiaW50ZWdyYWwiLCAib3JkZmVtaW5pbmUiLCAib3JkbWFzY3VsaW5lIiwgIk9tZWdhIiwgImFlIiwgIm9zbGFzaCIsCisgICAgInF1ZXN0aW9uZG93biIsICJleGNsYW1kb3duIiwgImxvZ2ljYWxub3QiLCAicmFkaWNhbCIsICJmbG9yaW4iLCAiYXBwcm94ZXF1YWwiLCAiRGVsdGEiLCAiZ3VpbGxlbW90bGVmdCIsCisgICAgImd1aWxsZW1vdHJpZ2h0IiwgImVsbGlwc2lzIiwgInNwYWNlIiwgIkFncmF2ZSIsICJBdGlsZGUiLCAiT3RpbGRlIiwgIk9FIiwgIm9lIiwKKyAgICAiZW5kYXNoIiwgImVtZGFzaCIsICJxdW90ZWRibGxlZnQiLCAicXVvdGVkYmxyaWdodCIsICJxdW90ZWxlZnQiLCAicXVvdGVyaWdodCIsICJkaXZpZGUiLCAibG96ZW5nZSIsCisgICAgInlkaWVyZXNpcyIsICJZZGllcmVzaXMiLCAiZnJhY3Rpb24iLCAiY3VycmVuY3kiLCAiZ3VpbHNpbmdsbGVmdCIsICJndWlsc2luZ2xyaWdodCIsICJmaSIsICJmbCIsCisgICAgImRhZ2dlcmRibCIsICJwZXJpb2RjZW50ZXJlZCIsICJxdW90ZXNpbmdsYmFzZSIsICJxdW90ZWRibGJhc2UiLCAicGVydGhvdXNhbmQiLCAiQWNpcmN1bWZsZXgiLCAiRWNpcmN1bWZsZXgiLCAiQWFjdXRlIiwKKyAgICAiRWRpZXJlc2lzIiwgIkVncmF2ZSIsICJJYWN1dGUiLCAiSWNpcmN1bWZsZXgiLCAiSWRpZXJlc2lzIiwgIklncmF2ZSIsICJPYWN1dGUiLCAiT2NpcmN1bWZsZXgiLAorICAgICJhcHBsZSIsICJPZ3JhdmUiLCAiVWFjdXRlIiwgIlVjaXJjdW1mbGV4IiwgIlVncmF2ZSIsICJkb3RsZXNzaSIsICJjaXJjdW1mbGV4IiwgInRpbGRlIiwKKyAgICAibWFjcm9uIiwgImJyZXZlIiwgImRvdGFjY2VudCIsICJyaW5nIiwgImNlZGlsbGEiLCAiaHVuZ2FydW1sYXV0IiwgIm9nb25layIsICJjYXJvbiIsCit9OworY29uc3QgRlhfTFBDU1RSICBNYWNFeHBlcnRFbmNvZGluZ05hbWVzWzIyNF0gPSB7CisgICAgInNwYWNlIiwgImV4Y2xhbXNtYWxsIiwgIkh1bmdhcnVtbGF1dHNtYWxsIiwgImNlbnRvbGRzdHlsZSIsICJkb2xsYXJvbGRzdHlsZSIsICJkb2xsYXJzdXBlcmlvciIsICJhbXBlcnNhbmRzbWFsbCIsICJBY3V0ZXNtYWxsIiwKKyAgICAicGFyZW5sZWZ0c3VwZXJpb3IiLCAicGFyZW5yaWdodHN1cGVyaW9yIiwgInR3b2RvdGVubGVhZGVyIiwgIm9uZWRvdGVubGVhZGVyIiwgImNvbW1hIiwgImh5cGhlbiIsICJwZXJpb2QiLCAiZnJhY3Rpb24iLAorICAgICJ6ZXJvb2xkc3R5bGUiLCAib25lb2xkc3R5bGUiLCAidHdvb2xkc3R5bGUiLCAidGhyZWVvbGRzdHlsZSIsICJmb3Vyb2xkc3R5bGUiLCAiZml2ZW9sZHN0eWxlIiwgInNpeG9sZHN0eWxlIiwgInNldmVub2xkc3R5bGUiLAorICAgICJlaWdodG9sZHN0eWxlIiwgIm5pbmVvbGRzdHlsZSIsICJjb2xvbiIsICJzZW1pY29sb24iLCBOVUxMLCAidGhyZWVxdWFydGVyc2VtZGFzaCIsIE5VTEwsICJxdWVzdGlvbnNtYWxsIiwKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAiRXRoc21hbGwiLCBOVUxMLCBOVUxMLCAib25lcXVhcnRlciIsCisgICAgIm9uZWhhbGYiLCAidGhyZWVxdWFydGVycyIsICJvbmVlaWdodGgiLCAidGhyZWVlaWdodGhzIiwgImZpdmVlaWdodGhzIiwgInNldmVuZWlnaHRocyIsICJvbmV0aGlyZCIsICJ0d290aGlyZHMiLAorICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsICJmZiIsICJmaSIsCisgICAgImZsIiwgImZmaSIsICJmZmwiLCAicGFyZW5sZWZ0aW5mZXJpb3IiLCBOVUxMLCAicGFyZW5yaWdodGluZmVyaW9yIiwgIkNpcmN1bWZsZXhzbWFsbCIsICJoeXBoZW5pbmZlcmlvciIsCisgICAgIkdyYXZlc21hbGwiLCAiQXNtYWxsIiwgIkJzbWFsbCIsICJDc21hbGwiLCAiRHNtYWxsIiwgIkVzbWFsbCIsICJGc21hbGwiLCAiR3NtYWxsIiwKKyAgICAiSHNtYWxsIiwgIklzbWFsbCIsICJKc21hbGwiLCAiS3NtYWxsIiwgIkxzbWFsbCIsICJNc21hbGwiLCAiTnNtYWxsIiwgIk9zbWFsbCIsCisgICAgIlBzbWFsbCIsICJRc21hbGwiLCAiUnNtYWxsIiwgIlNzbWFsbCIsICJUc21hbGwiLCAiVXNtYWxsIiwgIlZzbWFsbCIsICJXc21hbGwiLAorICAgICJYc21hbGwiLCAiWXNtYWxsIiwgIlpzbWFsbCIsICJjb2xvbm1vbmV0YXJ5IiwgIm9uZWZpdHRlZCIsICJydXBpYWgiLCAiVGlsZGVzbWFsbCIsIE5VTEwsCisgICAgTlVMTCwgImFzdXBlcmlvciIsICJjZW50c3VwZXJpb3IiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAiQWFjdXRlc21hbGwiLAorICAgICJBZ3JhdmVzbWFsbCIsICJBY2lyY3VtZmxleHNtYWxsIiwgIkFkaWVyZXNpc3NtYWxsIiwgIkF0aWxkZXNtYWxsIiwgIkFyaW5nc21hbGwiLCAiQ2NlZGlsbGFzbWFsbCIsICJFYWN1dGVzbWFsbCIsICJFZ3JhdmVzbWFsbCIsCisgICAgIkVjaXJjdW1mbGV4c21hbGwiLCAiRWRpZXJlc2lzc21hbGwiLCAiSWFjdXRlc21hbGwiLCAiSWdyYXZlc21hbGwiLCAiSWNpcmN1bWZsZXhzbWFsbCIsICJJZGllcmVzaXNzbWFsbCIsICJOdGlsZGVzbWFsbCIsICJPYWN1dGVzbWFsbCIsCisgICAgIk9ncmF2ZXNtYWxsIiwgIk9jaXJjdW1mbGV4c21hbGwiLCAiT2RpZXJlc2lzc21hbGwiLCAiT3RpbGRlc21hbGwiLCAiVWFjdXRlc21hbGwiLCAiVWdyYXZlc21hbGwiLCAiVWNpcmN1bWZsZXhzbWFsbCIsICJVZGllcmVzaXNzbWFsbCIsCisgICAgTlVMTCwgImVpZ2h0c3VwZXJpb3IiLCAiZm91cmluZmVyaW9yIiwgInRocmVlaW5mZXJpb3IiLCAic2l4aW5mZXJpb3IiLCAiZWlnaHRpbmZlcmlvciIsICJzZXZlbmluZmVyaW9yIiwgIlNjYXJvbnNtYWxsIiwKKyAgICBOVUxMLCAiY2VudGluZmVyaW9yIiwgInR3b2luZmVyaW9yIiwgTlVMTCwgIkRpZXJlc2lzc21hbGwiLCBOVUxMLCAiQ2Fyb25zbWFsbCIsICJTY2Fyb25zbWFsbCIsCisgICAgImZpdmVpbmZlcmlvciIsIE5VTEwsICJjb21tYWluZmVyaW9yIiwgInBlcmlvZGluZmVyaW9yIiwgIllhY3V0ZXNtYWxsIiwgTlVMTCwgImRvbGxhcmluZmVyaW9yIiwgTlVMTCwKKyAgICBOVUxMLCAiVGhvcm5zbWFsbCIsIE5VTEwsICJuaW5laW5mZXJpb3IiLCAiemVyb2luZmVyaW9yIiwgIlpjYXJvbnNtYWxsIiwgIkFFc21hbGwiLCAiT3NsYXNoc21hbGwiLAorICAgICJxdWVzdGlvbmRvd25zbWFsbCIsICJvbmVpbmZlcmlvciIsICJhc3VwZXJpb3IiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorICAgIE5VTEwsICJDZWRpbGxhc21hbGwiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAiT0VzbWFsbCIsCisgICAgImZpZ3VyZWRhc2giLCAiaHlwaGVuc3VwZXJpb3IiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCAiZXhjbGFtZG93bnNtYWxsIiwgTlVMTCwKKyAgICAiWWRpZXJlc2lzc21hbGwiLCBOVUxMLCAib25lc3VwZXJpb3IiLCAidHdvc3VwZXJpb3IiLCAidGhyZWVzdXBlcmlvciIsICJmb3Vyc3VwZXJpb3IiLCAiZml2ZXN1cGVyaW9yIiwgInNpeHN1cGVyaW9yIiwKKyAgICAic2V2ZW5zdXBlcmlvciIsICJuaW5lc3VwZXJpb3IiLCAiemVyb3N1cGVyaW9yIiwgTlVMTCwgImVzdXBlcmlvciIsICJyc3VwZXJpb3IiLCBOVUxMLCBOVUxMLAorICAgIE5VTEwsICJpc3VwZXJpb3IiLCAic3N1cGVyaW9yIiwgImRzdXBlcmlvciIsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisgICAgTlVMTCwgImxzdXBlcmlvciIsICJPZ29uZWtzbWFsbCIsICJCcmV2ZXNtYWxsIiwgIk1hY3JvbnNtYWxsIiwgImJzdXBlcmlvciIsICJuc3VwZXJpb3IiLCAibXN1cGVyaW9yIiwKKyAgICAiY29tbWFzdXBlcmlvciIsICJwZXJpb2RzdXBlcmlvciIsICJEb3RhY2NlbnRzbWFsbCIsICJSaW5nc21hbGwiLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorfTsKK2NvbnN0IEZYX0xQQ1NUUiAgUERGRG9jRW5jb2RpbmdOYW1lc1syMzJdID0geworICAgICJicmV2ZSIsICJjYXJvbiIsICJjaXJjdW1mbGV4IiwgImRvdGFjY2VudCIsICJodW5nYXJ1bWxhdXQiLCAib2dvbmVrIiwgInJpbmciLCAidGlsZGUiLAorICAgICJzcGFjZSIsICJleGNsYW0iLCAicXVvdGVkYmwiLCAibnVtYmVyc2lnbiIsICJkb2xsYXIiLCAicGVyY2VudCIsICJhbXBlcnNhbmQiLCAicXVvdGVzaW5nbGUiLAorICAgICJwYXJlbmxlZnQiLCAicGFyZW5yaWdodCIsICJhc3RlcmlzayIsICJwbHVzIiwgImNvbW1hIiwgImh5cGhlbiIsICJwZXJpb2QiLCAic2xhc2giLAorICAgICJ6ZXJvIiwgIm9uZSIsICJ0d28iLCAidGhyZWUiLCAiZm91ciIsICJmaXZlIiwgInNpeCIsICJzZXZlbiIsCisgICAgImVpZ2h0IiwgIm5pbmUiLCAiY29sb24iLCAic2VtaWNvbG9uIiwgImxlc3MiLCAiZXF1YWwiLCAiZ3JlYXRlciIsICJxdWVzdGlvbiIsCisgICAgImF0IiwgIkEiLCAiQiIsICJDIiwgIkQiLCAiRSIsICJGIiwgIkciLAorICAgICJIIiwgIkkiLCAiSiIsICJLIiwgIkwiLCAiTSIsICJOIiwgIk8iLAorICAgICJQIiwgIlEiLCAiUiIsICJTIiwgIlQiLCAiVSIsICJWIiwgIlciLAorICAgICJYIiwgIlkiLCAiWiIsICJicmFja2V0bGVmdCIsICJiYWNrc2xhc2giLCAiYnJhY2tldHJpZ2h0IiwgImFzY2lpY2lyY3VtIiwgInVuZGVyc2NvcmUiLAorICAgICJncmF2ZSIsICJhIiwgImIiLCAiYyIsICJkIiwgImUiLCAiZiIsICJnIiwKKyAgICAiaCIsICJpIiwgImoiLCAiayIsICJsIiwgIm0iLCAibiIsICJvIiwKKyAgICAicCIsICJxIiwgInIiLCAicyIsICJ0IiwgInUiLCAidiIsICJ3IiwKKyAgICAieCIsICJ5IiwgInoiLCAiYnJhY2VsZWZ0IiwgImJhciIsICJicmFjZXJpZ2h0IiwgImFzY2lpdGlsZGUiLCBOVUxMLAorICAgICJidWxsZXQzIiwgImRhZ2dlciIsICJkYWdnZXJkYmwiLCAiZWxsaXBzaXMiLCAiZW1kYXNoIiwgImVuZGFzaCIsICJmbG9yaW4iLCAiZnJhY3Rpb24iLAorICAgICJndWlsc2luZ2xsZWZ0IiwgImd1aWxzaW5nbHJpZ2h0IiwgIm1pbnVzIiwgInBlcnRob3VzYW5kIiwgInF1b3RlZGJsYmFzZSIsICJxdW90ZWRibGxlZnQiLCAicXVvdGVkYmxyaWdodCIsICJxdW90ZWxlZnQiLAorICAgICJxdW90ZXJpZ2h0IiwgInF1b3Rlc2luZ2xiYXNlIiwgInRyYWRlbWFyayIsICJmaSIsICJmbCIsICJMc2xhc2giLCAiT0UiLCAiU2Nhcm9uIiwKKyAgICAiWWRpZXJlc2lzIiwgIlpjYXJvbjIiLCAiZG90bGVzc2kiLCAibHNsYXNoIiwgIm9lIiwgInNjYXJvbiIsICJ6Y2Fyb24yIiwgTlVMTCwKKyAgICAiRXVybyIsICJleGNsYW1kb3duIiwgImNlbnQiLCAic3RlcmxpbmciLCAiY3VycmVuY3kiLCAieWVuIiwgImJyb2tlbmJhciIsICJzZWN0aW9uIiwKKyAgICAiZGllcmVzaXMiLCAiY29weXJpZ2h0IiwgIm9yZGZlbWluaW5lIiwgImd1aWxsZW1vdGxlZnQ0IiwgImxvZ2ljYWxub3QiLCBOVUxMLCAicmVnaXN0ZXJlZCIsICJtYWNyb24iLAorICAgICJkZWdyZWUiLCAicGx1c21pbnVzIiwgInR3b3N1cGVyaW9yIiwgInRocmVlc3VwZXJpb3IiLCAiYWN1dGUiLCAibXUiLCAicGFyYWdyYXBoIiwgInBlcmlvZGNlbnRlcmVkIiwKKyAgICAiY2VkaWxsYSIsICJvbmVzdXBlcmlvciIsICJvcmRtYXNjdWxpbmUiLCAiZ3VpbGxlbW90cmlnaHQ0IiwgIm9uZXF1YXJ0ZXIiLCAib25laGFsZiIsICJ0aHJlZXF1YXJ0ZXJzIiwgInF1ZXN0aW9uZG93biIsCisgICAgIkFncmF2ZSIsICJBYWN1dGUiLCAiQWNpcmN1bWZsZXgiLCAiQXRpbGRlIiwgIkFkaWVyZXNpcyIsICJBcmluZyIsICJBRSIsICJDY2VkaWxsYSIsCisgICAgIkVncmF2ZSIsICJFYWN1dGUiLCAiRWNpcmN1bWZsZXgiLCAiRWRpZXJlc2lzIiwgIklncmF2ZSIsICJJYWN1dGUiLCAiSWNpcmN1bWZsZXgiLCAiSWRpZXJlc2lzIiwKKyAgICAiRXRoIiwgIk50aWxkZSIsICJPZ3JhdmUiLCAiT2FjdXRlIiwgIk9jaXJjdW1mbGV4IiwgIk90aWxkZSIsICJPZGllcmVzaXMiLCAibXVsdGlwbHkiLAorICAgICJPc2xhc2giLCAiVWdyYXZlIiwgIlVhY3V0ZSIsICJVY2lyY3VtZmxleCIsICJVZGllcmVzaXMiLCAiWWFjdXRlIiwgIlRob3JuIiwgImdlcm1hbmRibHMiLAorICAgICJhZ3JhdmUiLCAiYWFjdXRlIiwgImFjaXJjdW1mbGV4IiwgImF0aWxkZSIsICJhZGllcmVzaXMiLCAiYXJpbmciLCAiYWUiLCAiY2NlZGlsbGEiLAorICAgICJlZ3JhdmUiLCAiZWFjdXRlIiwgImVjaXJjdW1mbGV4IiwgImVkaWVyZXNpcyIsICJpZ3JhdmUiLCAiaWFjdXRlIiwgImljaXJjdW1mbGV4IiwgImlkaWVyZXNpcyIsCisgICAgImV0aCIsICJudGlsZGUiLCAib2dyYXZlIiwgIm9hY3V0ZSIsICJvY2lyY3VtZmxleCIsICJvdGlsZGUiLCAib2RpZXJlc2lzIiwgImRpdmlkZSIsCisgICAgIm9zbGFzaCIsICJ1Z3JhdmUiLCAidWFjdXRlIiwgInVjaXJjdW1mbGV4IiwgInVkaWVyZXNpcyIsICJ5YWN1dGUiLCAidGhvcm4iLCAieWRpZXJlc2lzIiwKK307Citjb25zdCBGWF9MUENTVFIgIEFkb2JlU3ltYm9sRW5jb2RpbmdOYW1lc1syMjRdID0geworICAgICJzcGFjZSIsICJleGNsYW0iLCAidW5pdmVyc2FsIiwgIm51bWJlcnNpZ24iLCAiZXhpc3RlbnRpYWwiLCAicGVyY2VudCIsICJhbXBlcnNhbmQiLCAic3VjaHRoYXQiLAorICAgICJwYXJlbmxlZnQiLCAicGFyZW5yaWdodCIsICJhc3Rlcmlza21hdGgiLCAicGx1cyIsICJjb21tYSIsICJtaW51cyIsICJwZXJpb2QiLCAic2xhc2giLAorICAgICJ6ZXJvIiwgIm9uZSIsICJ0d28iLCAidGhyZWUiLCAiZm91ciIsICJmaXZlIiwgInNpeCIsICJzZXZlbiIsCisgICAgImVpZ2h0IiwgIm5pbmUiLCAiY29sb24iLCAic2VtaWNvbG9uIiwgImxlc3MiLCAiZXF1YWwiLCAiZ3JlYXRlciIsICJxdWVzdGlvbiIsCisgICAgImNvbmdydWVudCIsICJBbHBoYSIsICJCZXRhIiwgIkNoaSIsICJEZWx0YSIsICJFcHNpbG9uIiwgIlBoaSIsICJHYW1tYSIsCisgICAgIkV0YSIsICJJb3RhIiwgInRoZXRhMSIsICJLYXBwYSIsICJMYW1iZGEiLCAiTXUiLCAiTnUiLCAiT21pY3JvbiIsCisgICAgIlBpIiwgIlRoZXRhIiwgIlJobyIsICJTaWdtYSIsICJUYXUiLCAiVXBzaWxvbiIsICJzaWdtYTEiLCAiT21lZ2EiLAorICAgICJYaSIsICJQc2kiLCAiWmV0YSIsICJicmFja2V0bGVmdCIsICJ0aGVyZWZvcmUiLCAiYnJhY2tldHJpZ2h0IiwgInBlcnBlbmRpY3VsYXIiLCAidW5kZXJzY29yZSIsCisgICAgInJhZGljYWxleCIsICJhbHBoYSIsICJiZXRhIiwgImNoaSIsICJkZWx0YSIsICJlcHNpbG9uIiwgInBoaSIsICJnYW1tYSIsCisgICAgImV0YSIsICJpb3RhIiwgInBoaTEiLCAia2FwcGEiLCAibGFtYmRhIiwgIm11IiwgIm51IiwgIm9taWNyb24iLAorICAgICJwaSIsICJ0aGV0YSIsICJyaG8iLCAic2lnbWEiLCAidGF1IiwgInVwc2lsb24iLCAib21lZ2ExIiwgIm9tZWdhIiwKKyAgICAieGkiLCAicHNpIiwgInpldGEiLCAiYnJhY2VsZWZ0IiwgImJhciIsICJicmFjZXJpZ2h0IiwgInNpbWlsYXIiLCBOVUxMLAorICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisgICAgIkV1cm8iLCAiVXBzaWxvbjEiLCAibWludXRlIiwgImxlc3NlcXVhbCIsICJmcmFjdGlvbiIsICJpbmZpbml0eSIsICJmbG9yaW4iLCAiY2x1YiIsCisgICAgImRpYW1vbmQiLCAiaGVhcnQiLCAic3BhZGUiLCAiYXJyb3dib3RoIiwgImFycm93bGVmdCIsICJhcnJvd3VwIiwgImFycm93cmlnaHQiLCAiYXJyb3dkb3duIiwKKyAgICAiZGVncmVlIiwgInBsdXNtaW51cyIsICJzZWNvbmQiLCAiZ3JlYXRlcmVxdWFsIiwgIm11bHRpcGx5IiwgInByb3BvcnRpb25hbCIsICJwYXJ0aWFsZGlmZiIsICJidWxsZXQiLAorICAgICJkaXZpZGUiLCAibm90ZXF1YWwiLCAiZXF1aXZhbGVuY2UiLCAiYXBwcm94ZXF1YWwiLCAiZWxsaXBzaXMiLCAiYXJyb3d2ZXJ0ZXgiLCAiYXJyb3dob3JpemV4IiwgImNhcnJpYWdlcmV0dXJuIiwKKyAgICAiYWxlcGgiLCAiSWZyYWt0dXIiLCAiUmZyYWt0dXIiLCAid2VpZXJzdHJhc3MiLCAiY2lyY2xlbXVsdGlwbHkiLCAiY2lyY2xlcGx1cyIsICJlbXB0eXNldCIsICJpbnRlcnNlY3Rpb24iLAorICAgICJ1bmlvbiIsICJwcm9wZXJzdXBlcnNldCIsICJyZWZsZXhzdXBlcnNldCIsICJub3RzdWJzZXQiLCAicHJvcGVyc3Vic2V0IiwgInJlZmxleHN1YnNldCIsICJlbGVtZW50IiwgIm5vdGVsZW1lbnQiLAorICAgICJhbmdsZSIsICJncmFkaWVudCIsICJyZWdpc3RlcnNlcmlmIiwgImNvcHlyaWdodHNlcmlmIiwgInRyYWRlbWFya3NlcmlmIiwgInByb2R1Y3QiLCAicmFkaWNhbCIsICJkb3RtYXRoIiwKKyAgICAibG9naWNhbG5vdCIsICJsb2dpY2FsYW5kIiwgImxvZ2ljYWxvciIsICJhcnJvd2RibGJvdGgiLCAiYXJyb3dkYmxsZWZ0IiwgImFycm93ZGJsdXAiLCAiYXJyb3dkYmxyaWdodCIsICJhcnJvd2RibGRvd24iLAorICAgICJsb3plbmdlIiwgImFuZ2xlbGVmdCIsICJyZWdpc3RlcnNhbnMiLCAiY29weXJpZ2h0c2FucyIsICJ0cmFkZW1hcmtzYW5zIiwgInN1bW1hdGlvbiIsICJwYXJlbmxlZnR0cCIsICJwYXJlbmxlZnRleCIsCisgICAgInBhcmVubGVmdGJ0IiwgImJyYWNrZXRsZWZ0dHAiLCAiYnJhY2tldGxlZnRleCIsICJicmFja2V0bGVmdGJ0IiwgImJyYWNlbGVmdHRwIiwgImJyYWNlbGVmdG1pZCIsICJicmFjZWxlZnRidCIsICJicmFjZWV4IiwKKyAgICBOVUxMLCAiYW5nbGVyaWdodCIsICJpbnRlZ3JhbCIsICJpbnRlZ3JhbHRwIiwgImludGVncmFsZXgiLCAiaW50ZWdyYWxidCIsICJwYXJlbnJpZ2h0dHAiLCAicGFyZW5yaWdodGV4IiwKKyAgICAicGFyZW5yaWdodGJ0IiwgImJyYWNrZXRyaWdodHRwIiwgImJyYWNrZXRyaWdodGV4IiwgImJyYWNrZXRyaWdodGJ0IiwgImJyYWNlcmlnaHR0cCIsICJicmFjZXJpZ2h0bWlkIiwgImJyYWNlcmlnaHRidCIsIE5VTEwsCit9OworY29uc3QgRlhfTFBDU1RSICBaYXBmRW5jb2RpbmdOYW1lc1syMjRdID0geworICAgICJzcGFjZSIsICJhMSIsICJhMiIsICJhMjAyIiwgImEzIiwgImE0IiwgImE1IiwgImExMTkiLAorICAgICJhMTE4IiwgImExMTciLCAiYTExIiwgImExMiIsICJhMTMiLCAiYTE0IiwgImExNSIsICJhMTYiLAorICAgICJhMTA1IiwgImExNyIsICJhMTgiLCAiYTE5IiwgImEyMCIsICJhMjEiLCAiYTIyIiwgImEyMyIsCisgICAgImEyNCIsICJhMjUiLCAiYTI2IiwgImEyNyIsICJhMjgiLCAiYTYiLCAiYTciLCAiYTgiLAorICAgICJhOSIsICJhMTAiLCAiYTI5IiwgImEzMCIsICJhMzEiLCAiYTMyIiwgImEzMyIsICJhMzQiLAorICAgICJhMzUiLCAiYTM2IiwgImEzNyIsICJhMzgiLCAiYTM5IiwgImE0MCIsICJhNDEiLCAiYTQyIiwKKyAgICAiYTQzIiwgImE0NCIsICJhNDUiLCAiYTQ2IiwgImE0NyIsICJhNDgiLCAiYTQ5IiwgImE1MCIsCisgICAgImE1MSIsICJhNTIiLCAiYTUzIiwgImE1NCIsICJhNTUiLCAiYTU2IiwgImE1NyIsICJhNTgiLAorICAgICJhNTkiLCAiYTYwIiwgImE2MSIsICJhNjIiLCAiYTYzIiwgImE2NCIsICJhNjUiLCAiYTY2IiwKKyAgICAiYTY3IiwgImE2OCIsICJhNjkiLCAiYTcwIiwgImE3MSIsICJhNzIiLCAiYTczIiwgImE3NCIsCisgICAgImEyMDMiLCAiYTc1IiwgImEyMDQiLCAiYTc2IiwgImE3NyIsICJhNzgiLCAiYTc5IiwgImE4MSIsCisgICAgImE4MiIsICJhODMiLCAiYTg0IiwgImE5NyIsICJhOTgiLCAiYTk5IiwgImExMDAiLCBOVUxMLAorICAgICJhODkiLCAiYTkwIiwgImE5MyIsICJhOTQiLCAiYTkxIiwgImE5MiIsICJhMjA1IiwgImE4NSIsCisgICAgImEyMDYiLCAiYTg2IiwgImE4NyIsICJhODgiLCAiYTk1IiwgImE5NiIsIE5VTEwsIE5VTEwsCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorICAgIE5VTEwsICJhMTAxIiwgImExMDIiLCAiYTEwMyIsICJhMTA0IiwgImExMDYiLCAiYTEwNyIsICJhMTA4IiwKKyAgICAiYTExMiIsICJhMTExIiwgImExMTAiLCAiYTEwOSIsICJhMTIwIiwgImExMjEiLCAiYTEyMiIsICJhMTIzIiwKKyAgICAiYTEyNCIsICJhMTI1IiwgImExMjYiLCAiYTEyNyIsICJhMTI4IiwgImExMjkiLCAiYTEzMCIsICJhMTMxIiwKKyAgICAiYTEzMiIsICJhMTMzIiwgImExMzQiLCAiYTEzNSIsICJhMTM2IiwgImExMzciLCAiYTEzOCIsICJhMTM5IiwKKyAgICAiYTE0MCIsICJhMTQxIiwgImExNDIiLCAiYTE0MyIsICJhMTQ0IiwgImExNDUiLCAiYTE0NiIsICJhMTQ3IiwKKyAgICAiYTE0OCIsICJhMTQ5IiwgImExNTAiLCAiYTE1MSIsICJhMTUyIiwgImExNTMiLCAiYTE1NCIsICJhMTU1IiwKKyAgICAiYTE1NiIsICJhMTU3IiwgImExNTgiLCAiYTE1OSIsICJhMTYwIiwgImExNjEiLCAiYTE2MyIsICJhMTY0IiwKKyAgICAiYTE5NiIsICJhMTY1IiwgImExOTIiLCAiYTE2NiIsICJhMTY3IiwgImExNjgiLCAiYTE2OSIsICJhMTcwIiwKKyAgICAiYTE3MSIsICJhMTcyIiwgImExNzMiLCAiYTE2MiIsICJhMTc0IiwgImExNzUiLCAiYTE3NiIsICJhMTc3IiwKKyAgICAiYTE3OCIsICJhMTc5IiwgImExOTMiLCAiYTE4MCIsICJhMTk5IiwgImExODEiLCAiYTIwMCIsICJhMTgyIiwKKyAgICBOVUxMLCAiYTIwMSIsICJhMTgzIiwgImExODQiLCAiYTE5NyIsICJhMTg1IiwgImExOTQiLCAiYTE5OCIsCisgICAgImExODYiLCAiYTE5NSIsICJhMTg3IiwgImExODgiLCAiYTE4OSIsICJhMTkwIiwgImExOTEiLCBOVUxMCit9OworY29uc3QgRlhfQ0hBUiogIFBERl9DaGFyTmFtZUZyb21QcmVkZWZpbmVkQ2hhclNldChpbnQgZW5jb2RpbmcsIEZYX0JZVEUgY2hhcmNvZGUpCit7CisgICAgaWYgKGVuY29kaW5nID09IFBERkZPTlRfRU5DT0RJTkdfUERGRE9DKSB7CisgICAgICAgIGlmIChjaGFyY29kZSA8IDI0KSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBjaGFyY29kZSAtPSAyNDsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoY2hhcmNvZGUgPCAzMikgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgY2hhcmNvZGUgLT0gMzI7CisgICAgfQorICAgIHN3aXRjaCAoZW5jb2RpbmcpIHsKKyAgICAgICAgY2FzZSBQREZGT05UX0VOQ09ESU5HX1dJTkFOU0k6CisgICAgICAgICAgICByZXR1cm4gQWRvYmVXaW5BbnNpRW5jb2RpbmdOYW1lc1tjaGFyY29kZV07CisgICAgICAgIGNhc2UgUERGRk9OVF9FTkNPRElOR19NQUNST01BTjoKKyAgICAgICAgICAgIHJldHVybiBNYWNSb21hbkVuY29kaW5nTmFtZXNbY2hhcmNvZGVdOworICAgICAgICBjYXNlIFBERkZPTlRfRU5DT0RJTkdfTUFDRVhQRVJUOgorICAgICAgICAgICAgcmV0dXJuIE1hY0V4cGVydEVuY29kaW5nTmFtZXNbY2hhcmNvZGVdOworICAgICAgICBjYXNlIFBERkZPTlRfRU5DT0RJTkdfU1RBTkRBUkQ6CisgICAgICAgICAgICByZXR1cm4gU3RhbmRhcmRFbmNvZGluZ05hbWVzW2NoYXJjb2RlXTsKKyAgICAgICAgY2FzZSBQREZGT05UX0VOQ09ESU5HX0FET0JFX1NZTUJPTDoKKyAgICAgICAgICAgIHJldHVybiBBZG9iZVN5bWJvbEVuY29kaW5nTmFtZXNbY2hhcmNvZGVdOworICAgICAgICBjYXNlIFBERkZPTlRfRU5DT0RJTkdfWkFQRkRJTkdCQVRTOgorICAgICAgICAgICAgcmV0dXJuIFphcGZFbmNvZGluZ05hbWVzW2NoYXJjb2RlXTsKKyAgICAgICAgY2FzZSBQREZGT05UX0VOQ09ESU5HX1BERkRPQzoKKyAgICAgICAgICAgIHJldHVybiBQREZEb2NFbmNvZGluZ05hbWVzW2NoYXJjb2RlXTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CitGWF9XQ0hBUiBGVF9Vbmljb2RlRnJvbUNoYXJDb2RlKGludCBlbmNvZGluZywgRlhfRFdPUkQgY2hhcmNvZGUpCit7CisgICAgc3dpdGNoIChlbmNvZGluZykgeworICAgICAgICBjYXNlIEZYRlRfRU5DT0RJTkdfVU5JQ09ERToKKyAgICAgICAgICAgIHJldHVybiAoRlhfV09SRCljaGFyY29kZTsKKyAgICAgICAgY2FzZSBGWEZUX0VOQ09ESU5HX0FET0JFX1NUQU5EQVJEOgorICAgICAgICAgICAgcmV0dXJuIFN0YW5kYXJkRW5jb2RpbmdbKEZYX0JZVEUpY2hhcmNvZGVdOworICAgICAgICBjYXNlIEZYRlRfRU5DT0RJTkdfQURPQkVfRVhQRVJUOgorICAgICAgICAgICAgcmV0dXJuIE1hY0V4cGVydEVuY29kaW5nWyhGWF9CWVRFKWNoYXJjb2RlXTsKKyAgICAgICAgY2FzZSBGWEZUX0VOQ09ESU5HX0FET0JFX0xBVElOXzE6CisgICAgICAgICAgICByZXR1cm4gQWRvYmVXaW5BbnNpRW5jb2RpbmdbKEZYX0JZVEUpY2hhcmNvZGVdOworICAgICAgICBjYXNlIEZYRlRfRU5DT0RJTkdfQVBQTEVfUk9NQU46CisgICAgICAgICAgICByZXR1cm4gTWFjUm9tYW5FbmNvZGluZ1soRlhfQllURSljaGFyY29kZV07CisgICAgICAgIGNhc2UgUERGRk9OVF9FTkNPRElOR19QREZET0M6CisgICAgICAgICAgICByZXR1cm4gUERGRG9jRW5jb2RpbmdbKEZYX0JZVEUpY2hhcmNvZGVdOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KK3N0YXRpYyBGWF9EV09SRCBQREZfRmluZENvZGUoY29uc3QgRlhfV09SRCogcENvZGVzLCBGWF9XT1JEIHVuaWNvZGUpCit7CisgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IDI1NjsgaSArKykKKyAgICAgICAgaWYgKHBDb2Rlc1tpXSA9PSB1bmljb2RlKSB7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIHJldHVybiAwOworfQorY29uc3QgRlhfV09SRCBNU1N5bWJvbEVuY29kaW5nWzI1Nl0gPSB7CisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDMyLCAzMywgODcwNCwgMzUsIDg3MDcsIDM3LCAzOCwgODcxNSwKKyAgICA0MCwgNDEsIDg3MjcsIDQzLCA0NCwgODcyMiwgNDYsIDQ3LCA0OCwgNDksCisgICAgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksCisgICAgNjAsIDYxLCA2MiwgNjMsIDg3NzMsIDkxMywgOTE0LCA5MzUsIDkxNiwgOTE3LAorICAgIDkzNCwgOTE1LCA5MTksIDkyMSwgOTc3LCA5MjIsIDkyMywgOTI0LCA5MjUsIDkyNywKKyAgICA5MjgsIDkyMCwgOTI5LCA5MzEsIDkzMiwgOTMzLCA5NjIsIDkzNywgOTI2LCA5MzYsCisgICAgOTE4LCA5MSwgODc1NiwgOTMsIDg4NjksIDk1LCA4MjU0LCA5NDUsIDk0NiwgOTY3LAorICAgIDk0OCwgOTQ5LCA5NjYsIDk0NywgOTUxLCA5NTMsIDk4MSwgOTU0LCA5NTUsIDk1NiwKKyAgICA5NTcsIDk1OSwgOTYwLCA5NTIsIDk2MSwgOTYzLCA5NjQsIDk2NSwgOTgyLCA5NjksCisgICAgOTU4LCA5NjgsIDk1MCwgMTIzLCAxMjQsIDEyNSwgODc2NCwgMCwgMCwgMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDk3OCwgODI0MiwgODgwNCwgODcyNSwgODczNCwgNDAyLCA5ODI3LCA5ODMwLCA5ODI4LAorICAgIDk4MjQsIDg1OTYsIDg1OTIsIDg1OTMsIDg1OTQsIDg1OTUsIDE3NiwgMTc3LCA4MjQzLCA4ODA1LAorICAgIDIxNSwgODczMywgODcwNiwgODcyOSwgMjQ3LCA4ODAwLCA4ODAxLCA4Nzc2LCA4OTQzLCAwLAorICAgIDAsIDg2MjksIDAsIDg0NjUsIDg0NzYsIDg0NzIsIDg4NTUsIDg4NTMsIDg3MDksIDg3NDUsCisgICAgODc0NiwgODgzNSwgODgzOSwgODgzNiwgODgzNCwgODgzOCwgODcxMiwgODcxMywgODczNiwgODcxMSwKKyAgICAxNzQsIDE2OSwgODQ4MiwgODcxOSwgODczMCwgODkwMSwgMTcyLCA4NzQzLCA4NzQ0LCA4NjYwLAorICAgIDg2NTYsIDg2NTcsIDg2NTgsIDg2NTksIDk2NzQsIDkwMDEsIDAsIDAsIDAsIDg3MjEsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAweDAwMDAsIDkwMDIsIDg3NDcsIDg5OTIsIDAsIDg5OTMsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwCit9OworRlhfRFdPUkQgRlRfQ2hhckNvZGVGcm9tVW5pY29kZShpbnQgZW5jb2RpbmcsIEZYX1dDSEFSIHVuaWNvZGUpCit7CisgICAgc3dpdGNoIChlbmNvZGluZykgeworICAgICAgICBjYXNlIEZYRlRfRU5DT0RJTkdfVU5JQ09ERToKKyAgICAgICAgICAgIHJldHVybiB1bmljb2RlOworICAgICAgICBjYXNlIEZYRlRfRU5DT0RJTkdfQURPQkVfU1RBTkRBUkQ6CisgICAgICAgICAgICByZXR1cm4gUERGX0ZpbmRDb2RlKFN0YW5kYXJkRW5jb2RpbmcsIHVuaWNvZGUpOworICAgICAgICBjYXNlIEZYRlRfRU5DT0RJTkdfQURPQkVfRVhQRVJUOgorICAgICAgICAgICAgcmV0dXJuIFBERl9GaW5kQ29kZShNYWNFeHBlcnRFbmNvZGluZywgdW5pY29kZSk7CisgICAgICAgIGNhc2UgRlhGVF9FTkNPRElOR19BRE9CRV9MQVRJTl8xOgorICAgICAgICAgICAgcmV0dXJuIFBERl9GaW5kQ29kZShBZG9iZVdpbkFuc2lFbmNvZGluZywgdW5pY29kZSk7CisgICAgICAgIGNhc2UgRlhGVF9FTkNPRElOR19BUFBMRV9ST01BTjoKKyAgICAgICAgICAgIHJldHVybiBQREZfRmluZENvZGUoTWFjUm9tYW5FbmNvZGluZywgdW5pY29kZSk7CisgICAgICAgIGNhc2UgRlhGVF9FTkNPRElOR19BRE9CRV9DVVNUT006CisgICAgICAgICAgICByZXR1cm4gUERGX0ZpbmRDb2RlKFBERkRvY0VuY29kaW5nLCB1bmljb2RlKTsKKyAgICAgICAgY2FzZSBGWEZUX0VOQ09ESU5HX01TX1NZTUJPTDoKKyAgICAgICAgICAgIHJldHVybiBQREZfRmluZENvZGUoTVNTeW1ib2xFbmNvZGluZywgdW5pY29kZSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorY29uc3QgRlhfV09SRCogUERGX1VuaWNvZGVzRm9yUHJlZGVmaW5lZENoYXJTZXQoaW50IGVuY29kaW5nKQoreworICAgIHN3aXRjaCAoZW5jb2RpbmcpIHsKKyAgICAgICAgY2FzZSBQREZGT05UX0VOQ09ESU5HX1dJTkFOU0k6CisgICAgICAgICAgICByZXR1cm4gQWRvYmVXaW5BbnNpRW5jb2Rpbmc7CisgICAgICAgIGNhc2UgUERGRk9OVF9FTkNPRElOR19NQUNST01BTjoKKyAgICAgICAgICAgIHJldHVybiBNYWNSb21hbkVuY29kaW5nOworICAgICAgICBjYXNlIFBERkZPTlRfRU5DT0RJTkdfTUFDRVhQRVJUOgorICAgICAgICAgICAgcmV0dXJuIE1hY0V4cGVydEVuY29kaW5nOworICAgICAgICBjYXNlIFBERkZPTlRfRU5DT0RJTkdfU1RBTkRBUkQ6CisgICAgICAgICAgICByZXR1cm4gU3RhbmRhcmRFbmNvZGluZzsKKyAgICAgICAgY2FzZSBQREZGT05UX0VOQ09ESU5HX0FET0JFX1NZTUJPTDoKKyAgICAgICAgICAgIHJldHVybiBBZG9iZVN5bWJvbEVuY29kaW5nOworICAgICAgICBjYXNlIFBERkZPTlRfRU5DT0RJTkdfWkFQRkRJTkdCQVRTOgorICAgICAgICAgICAgcmV0dXJuIFphcGZFbmNvZGluZzsKKyAgICAgICAgY2FzZSBQREZGT05UX0VOQ09ESU5HX1BERkRPQzoKKyAgICAgICAgICAgIHJldHVybiBQREZEb2NFbmNvZGluZzsKKyAgICAgICAgY2FzZSBQREZGT05UX0VOQ09ESU5HX01TX1NZTUJPTDoKKyAgICAgICAgICAgIHJldHVybiBNU1N5bWJvbEVuY29kaW5nOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK0ZYX0RXT1JEIFBERl9QcmVkZWZpbmVkQ2hhckNvZGVGcm9tVW5pY29kZShpbnQgZW5jb2RpbmcsIEZYX1dDSEFSIHVuaWNvZGUpCit7CisgICAgcmV0dXJuIFBERl9GaW5kQ29kZShQREZfVW5pY29kZXNGb3JQcmVkZWZpbmVkQ2hhclNldChlbmNvZGluZyksIHVuaWNvZGUpOworfQorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorZXh0ZXJuIGludCBGWEZUX3VuaWNvZGVfZnJvbV9hZG9iZV9uYW1lKGNvbnN0IGNoYXIqIG5hbWUpOworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK0ZYX1dDSEFSIFBERl9Vbmljb2RlRnJvbUFkb2JlTmFtZShjb25zdCBGWF9DSEFSKiBuYW1lKQoreworICAgIHJldHVybiAoRlhfV0NIQVIpKEZYRlRfdW5pY29kZV9mcm9tX2Fkb2JlX25hbWUobmFtZSkgJiAweDdGRkZGRkZGKTsKK30KK0NGWF9CeXRlU3RyaW5nIFBERl9BZG9iZU5hbWVGcm9tVW5pY29kZShGWF9XQ0hBUiB1bmljb2RlKQoreworICAgIGNoYXIgZ2x5cGhfbmFtZVs2NF07CisgICAgRlhGVF9hZG9iZV9uYW1lX2Zyb21fdW5pY29kZShnbHlwaF9uYW1lLCB1bmljb2RlKTsKKyAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoZ2x5cGhfbmFtZSwgLTEpOworfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2ZvbnQvZnBkZl9mb250X2NpZC5jcHAgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfZm9udC9mcGRmX2ZvbnRfY2lkLmNwcAppbmRleCA4OTFkODJmLi4yM2JiYzRhIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfZm9udC9mcGRmX2ZvbnRfY2lkLmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfZm9udC9mcGRmX2ZvbnRfY2lkLmNwcApAQCAtMSwxNzE2ICsxLDE3MTYgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oIg0KLSNpbmNsdWRlICJmb250X2ludC5oIg0KLSNpbmNsdWRlICIuLi9mcGRmX2NtYXBzL2NtYXBfaW50LmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZS5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZnJlZXR5cGUuaCINCi1leHRlcm4gRlhfRFdPUkQgRlRfQ2hhckNvZGVGcm9tVW5pY29kZShpbnQgZW5jb2RpbmcsIEZYX1dDSEFSIHVuaWNvZGUpOw0KLWV4dGVybiBGWF9MUFZPSUQgRlhGQ19Mb2FkUGFja2FnZShGWF9MUENTVFIgbmFtZSk7DQotZXh0ZXJuIEZYX0JPT0wgRlhGQ19Mb2FkRmlsZShGWF9MUFZPSUQgcFBhY2thZ2UsIEZYX0xQQ1NUUiBuYW1lLCBGWF9MUEJZVEUmIHBCdWZmZXIsIEZYX0RXT1JEJiBzaXplKTsNCi1leHRlcm4gdm9pZCBGWEZDX0Nsb3NlUGFja2FnZShGWF9MUFZPSUQgcFBhY2thZ2UpOw0KLWV4dGVybiBzaG9ydCBUVDJQREYoaW50IG0sIEZYRlRfRmFjZSBmYWNlKTsNCi1leHRlcm4gRlhfQk9PTCBGVF9Vc2VUVENoYXJtYXAoRlhGVF9GYWNlIGZhY2UsIGludCBwbGF0Zm9ybV9pZCwgaW50IGVuY29kaW5nX2lkKTsNCi1leHRlcm4gRlhfTFBDU1RSIEdldEFkb2JlQ2hhck5hbWUoaW50IGlCYXNlRW5jb2RpbmcsIGNvbnN0IENGWF9CeXRlU3RyaW5nKiBwQ2hhck5hbWVzLCBpbnQgY2hhcmNvZGUpOw0KLUNQREZfQ01hcE1hbmFnZXI6OkNQREZfQ01hcE1hbmFnZXIoKQ0KLXsNCi0jaWZuZGVmIF9GUERGQVBJX01JTklfDQotICAgIG1fYlByb21wdGVkID0gRkFMU0U7DQotICAgIG1fcFBhY2thZ2UgPSBOVUxMOw0KLSNlbmRpZg0KLSAgICBGWFNZU19tZW1zZXQzMihtX0NJRDJVbmljb2RlTWFwcywgMCwgc2l6ZW9mIG1fQ0lEMlVuaWNvZGVNYXBzKTsNCi19DQotQ1BERl9DTWFwTWFuYWdlcjo6fkNQREZfQ01hcE1hbmFnZXIoKQ0KLXsNCi0gICAgRHJvcEFsbChGQUxTRSk7DQotI2lmbmRlZiBfRlBERkFQSV9NSU5JXw0KLSAgICBpZiAobV9wUGFja2FnZSkgew0KLSAgICAgICAgRlhGQ19DbG9zZVBhY2thZ2UobV9wUGFja2FnZSk7DQotICAgIH0NCi0jZW5kaWYNCi19DQotI2lmbmRlZiBfRlBERkFQSV9NSU5JXw0KLUZYX0xQVk9JRCBDUERGX0NNYXBNYW5hZ2VyOjpHZXRQYWNrYWdlKEZYX0JPT0wgYlByb21wdCkNCi17DQotI2lmbmRlZiBGT1hJVF9DSFJPTUVfQlVJTEQNCi0gICAgaWYgKG1fcFBhY2thZ2UgPT0gTlVMTCkgew0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgZmlsZW5hbWUgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldE1vZHVsZUZpbGVQYXRoKEFERElOX05BTUVfQ0pLLCAiRlBERkNKSy5CSU4iKTsNCi0gICAgICAgIG1fcFBhY2thZ2UgPSBGWEZDX0xvYWRQYWNrYWdlKGZpbGVuYW1lKTsNCi0gICAgICAgIGlmIChiUHJvbXB0ICYmIG1fcFBhY2thZ2UgPT0gTlVMTCAmJiAhbV9iUHJvbXB0ZWQpIHsNCi0gICAgICAgICAgICBtX2JQcm9tcHRlZCA9IFRSVUU7DQotICAgICAgICAgICAgaWYgKCFDUERGX01vZHVsZU1ncjo6R2V0KCktPkRvd25sb2FkTW9kdWxlKEFERElOX05BTUVfQ0pLKSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9wUGFja2FnZSA9IEZYRkNfTG9hZFBhY2thZ2UoZmlsZW5hbWUpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotI2VuZGlmDQotICAgIHJldHVybiBtX3BQYWNrYWdlOw0KLX0NCi0jZW5kaWYNCi1DUERGX0NNYXAqIENQREZfQ01hcE1hbmFnZXI6OkdldFByZWRlZmluZWRDTWFwKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lLCBGWF9CT09MIGJQcm9tcHRDSkspDQotew0KLSAgICBDUERGX0NNYXAqIHBDTWFwOw0KLSAgICBpZiAobV9DTWFwcy5Mb29rdXAobmFtZSwgKEZYX0xQVk9JRCYpcENNYXApKSB7DQotICAgICAgICByZXR1cm4gcENNYXA7DQotICAgIH0NCi0gICAgcENNYXAgPSBMb2FkUHJlZGVmaW5lZENNYXAobmFtZSwgYlByb21wdENKSyk7DQotICAgIGlmIChuYW1lLklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuIHBDTWFwOw0KLSAgICB9DQotICAgIG1fQ01hcHMuU2V0QXQobmFtZSwgcENNYXApOw0KLSAgICByZXR1cm4gcENNYXA7DQotfQ0KLUNQREZfQ01hcCogQ1BERl9DTWFwTWFuYWdlcjo6TG9hZFByZWRlZmluZWRDTWFwKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lLCBGWF9CT09MIGJQcm9tcHRDSkspDQotew0KLSAgICBDUERGX0NNYXAqIHBDTWFwID0gRlhfTkVXIENQREZfQ01hcDsNCi0gICAgRlhfTFBDU1RSIHBuYW1lID0gbmFtZTsNCi0gICAgaWYgKCpwbmFtZSA9PSAnLycpIHsNCi0gICAgICAgIHBuYW1lICsrOw0KLSAgICB9DQotICAgIHBDTWFwLT5Mb2FkUHJlZGVmaW5lZCh0aGlzLCBwbmFtZSwgYlByb21wdENKSyk7DQotICAgIHJldHVybiBwQ01hcDsNCi19DQotY29uc3QgRlhfTFBDU1RSIGdfQ2hhcnNldE5hbWVzW10gPSB7TlVMTCwgIkdCMSIsICJDTlMxIiwgIkphcGFuMSIsICJLb3JlYTEiLCAiVUNTIiwgTlVMTH07DQotY29uc3QgaW50IGdfQ2hhcnNldENQc1tdID0gezAsIDkzNiwgOTUwLCA5MzIsIDk0OSwgMTIwMCwgMH07DQotaW50IF9DaGFyc2V0RnJvbU9yZGVyaW5nKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBPcmRlcmluZykNCi17DQotICAgIGludCBjaGFyc2V0ID0gMTsNCi0gICAgd2hpbGUgKGdfQ2hhcnNldE5hbWVzW2NoYXJzZXRdICYmIE9yZGVyaW5nICE9IENGWF9CeXRlU3RyaW5nQyhnX0NoYXJzZXROYW1lc1tjaGFyc2V0XSkpIHsNCi0gICAgICAgIGNoYXJzZXQgKys7DQotICAgIH0NCi0gICAgaWYgKGdfQ2hhcnNldE5hbWVzW2NoYXJzZXRdID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBDSURTRVRfVU5LTk9XTjsNCi0gICAgfQ0KLSAgICByZXR1cm4gY2hhcnNldDsNCi19DQotdm9pZCBDUERGX0NNYXBNYW5hZ2VyOjpSZWxvYWRBbGwoKQ0KLXsNCi0gICAgRHJvcEFsbChUUlVFKTsNCi19DQotdm9pZCBDUERGX0NNYXBNYW5hZ2VyOjpEcm9wQWxsKEZYX0JPT0wgYlJlbG9hZCkNCi17DQotICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fQ01hcHMuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyBuYW1lOw0KLSAgICAgICAgQ1BERl9DTWFwKiBwQ01hcDsNCi0gICAgICAgIG1fQ01hcHMuR2V0TmV4dEFzc29jKHBvcywgbmFtZSwgKEZYX0xQVk9JRCYpcENNYXApOw0KLSAgICAgICAgaWYgKHBDTWFwID09IE5VTEwpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChiUmVsb2FkKSB7DQotICAgICAgICAgICAgcENNYXAtPkxvYWRQcmVkZWZpbmVkKHRoaXMsIG5hbWUsIEZBTFNFKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgZGVsZXRlIHBDTWFwOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mIG1fQ0lEMlVuaWNvZGVNYXBzIC8gc2l6ZW9mKENQREZfQ0lEMlVuaWNvZGVNYXAqKTsgaSArKykgew0KLSAgICAgICAgQ1BERl9DSUQyVW5pY29kZU1hcCogcE1hcCA9IG1fQ0lEMlVuaWNvZGVNYXBzW2ldOw0KLSAgICAgICAgaWYgKHBNYXAgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGJSZWxvYWQpIHsNCi0gICAgICAgICAgICBwTWFwLT5Mb2FkKHRoaXMsIGksIEZBTFNFKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgZGVsZXRlIHBNYXA7DQotICAgICAgICB9DQotICAgIH0NCi19DQotQ1BERl9DSUQyVW5pY29kZU1hcCogQ1BERl9DTWFwTWFuYWdlcjo6R2V0Q0lEMlVuaWNvZGVNYXAoaW50IGNoYXJzZXQsIEZYX0JPT0wgYlByb21wdENKSykNCi17DQotICAgIGlmIChtX0NJRDJVbmljb2RlTWFwc1tjaGFyc2V0XSA9PSBOVUxMKSB7DQotICAgICAgICBtX0NJRDJVbmljb2RlTWFwc1tjaGFyc2V0XSA9IExvYWRDSUQyVW5pY29kZU1hcChjaGFyc2V0LCBiUHJvbXB0Q0pLKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9DSUQyVW5pY29kZU1hcHNbY2hhcnNldF07DQotfQ0KLUNQREZfQ0lEMlVuaWNvZGVNYXAqIENQREZfQ01hcE1hbmFnZXI6OkxvYWRDSUQyVW5pY29kZU1hcChpbnQgY2hhcnNldCwgRlhfQk9PTCBiUHJvbXB0Q0pLKQ0KLXsNCi0gICAgQ1BERl9DSUQyVW5pY29kZU1hcCogcE1hcCA9IEZYX05FVyBDUERGX0NJRDJVbmljb2RlTWFwKCk7DQotICAgIGlmICghcE1hcC0+SW5pdGlhbGl6ZSgpKSB7DQotICAgICAgICBkZWxldGUgcE1hcDsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHBNYXAtPkxvYWQodGhpcywgY2hhcnNldCwgYlByb21wdENKSyk7DQotICAgIHJldHVybiBwTWFwOw0KLX0NCi1DUERGX0NNYXBQYXJzZXI6OkNQREZfQ01hcFBhcnNlcigpDQotew0KLSAgICBtX3BDTWFwID0gTlVMTDsNCi0gICAgbV9TdGF0dXMgPSAwOw0KLSAgICBtX0NvZGVTZXEgPSAwOw0KLX0NCi1GWF9CT09MCUNQREZfQ01hcFBhcnNlcjo6SW5pdGlhbGl6ZShDUERGX0NNYXAqIHBDTWFwKQ0KLXsNCi0gICAgbV9wQ01hcCA9IHBDTWFwOw0KLSAgICBtX1N0YXR1cyA9IDA7DQotICAgIG1fQ29kZVNlcSA9IDA7DQotICAgIG1fQWRkTWFwcy5Fc3RpbWF0ZVNpemUoMCwgMTAyNDApOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotc3RhdGljIEZYX0RXT1JEIENNYXBfR2V0Q29kZShGWF9CU1RSIHdvcmQpDQotew0KLSAgICBpbnQgbnVtID0gMDsNCi0gICAgaWYgKHdvcmQuR2V0QXQoMCkgPT0gJzwnKSB7DQotICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHdvcmQuR2V0TGVuZ3RoKCk7IGkgKyspIHsNCi0gICAgICAgICAgICBGWF9CWVRFIGRpZ2l0ID0gd29yZC5HZXRBdChpKTsNCi0gICAgICAgICAgICBpZiAoZGlnaXQgPj0gJzAnICYmIGRpZ2l0IDw9ICc5Jykgew0KLSAgICAgICAgICAgICAgICBkaWdpdCA9IGRpZ2l0IC0gJzAnOw0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlnaXQgPj0gJ2EnICYmIGRpZ2l0IDw9ICdmJykgew0KLSAgICAgICAgICAgICAgICBkaWdpdCA9IGRpZ2l0IC0gJ2EnICsgMTA7DQotICAgICAgICAgICAgfSBlbHNlIGlmIChkaWdpdCA+PSAnQScgJiYgZGlnaXQgPD0gJ0YnKSB7DQotICAgICAgICAgICAgICAgIGRpZ2l0ID0gZGlnaXQgLSAnQScgKyAxMDsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICByZXR1cm4gbnVtOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBudW0gPSBudW0gKiAxNiArIGRpZ2l0Ow0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3b3JkLkdldExlbmd0aCgpOyBpICsrKSB7DQotICAgICAgICAgICAgaWYgKHdvcmQuR2V0QXQoaSkgPCAnMCcgfHwgd29yZC5HZXRBdChpKSA+ICc5Jykgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gbnVtOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBudW0gPSBudW0gKiAxMCArIHdvcmQuR2V0QXQoaSkgLSAnMCc7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIG51bTsNCi19DQotc3RhdGljIEZYX0JPT0wgX0NNYXBfR2V0Q29kZVJhbmdlKF9DTWFwX0NvZGVSYW5nZSYgcmFuZ2UsIEZYX0JTVFIgZmlyc3QsIEZYX0JTVFIgc2Vjb25kKQ0KLXsNCi0gICAgaWYgKGZpcnN0LkdldExlbmd0aCgpID09IDAgfHwgZmlyc3QuR2V0QXQoMCkgIT0gJzwnKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaW50IG51bSA9IDA7DQotICAgIGludCBpOw0KLSAgICBmb3IgKGkgPSAxOyBpIDwgZmlyc3QuR2V0TGVuZ3RoKCk7IGkgKyspDQotICAgICAgICBpZiAoZmlyc3QuR2V0QXQoaSkgPT0gJz4nKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIHJhbmdlLm1fQ2hhclNpemUgPSAoaSAtIDEpIC8gMjsNCi0gICAgaWYgKHJhbmdlLm1fQ2hhclNpemUgPiA0KSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgZm9yIChpID0gMDsgaSA8IHJhbmdlLm1fQ2hhclNpemU7IGkgKyspIHsNCi0gICAgICAgIEZYX0JZVEUgZGlnaXQxID0gZmlyc3QuR2V0QXQoaSAqIDIgKyAxKTsNCi0gICAgICAgIEZYX0JZVEUgZGlnaXQyID0gZmlyc3QuR2V0QXQoaSAqIDIgKyAyKTsNCi0gICAgICAgIEZYX0JZVEUgYnl0ZSA9IChkaWdpdDEgPj0gJzAnICYmIGRpZ2l0MSA8PSAnOScpID8gKGRpZ2l0MSAtICcwJykgOiAoKGRpZ2l0MSAmIDB4ZGYpIC0gJ0EnICsgMTApOw0KLSAgICAgICAgYnl0ZSA9IGJ5dGUgKiAxNiArICgoZGlnaXQyID49ICcwJyAmJiBkaWdpdDIgPD0gJzknKSA/IChkaWdpdDIgLSAnMCcpIDogKChkaWdpdDIgJiAweGRmKSAtICdBJyArIDEwKSk7DQotICAgICAgICByYW5nZS5tX0xvd2VyW2ldID0gYnl0ZTsNCi0gICAgfQ0KLSAgICBGWF9EV09SRCBzaXplID0gc2Vjb25kLkdldExlbmd0aCgpOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgcmFuZ2UubV9DaGFyU2l6ZTsgaSArKykgew0KLSAgICAgICAgRlhfQllURSBkaWdpdDEgPSAoKEZYX0RXT1JEKWkgKiAyICsgMSA8IHNpemUpID8gc2Vjb25kLkdldEF0KChGWF9TVFJTSVpFKWkgKiAyICsgMSkgOiAwOw0KLSAgICAgICAgRlhfQllURSBkaWdpdDIgPSAoKEZYX0RXT1JEKWkgKiAyICsgMiA8IHNpemUpID8gc2Vjb25kLkdldEF0KChGWF9TVFJTSVpFKWkgKiAyICsgMikgOiAwOw0KLSAgICAgICAgRlhfQllURSBieXRlID0gKGRpZ2l0MSA+PSAnMCcgJiYgZGlnaXQxIDw9ICc5JykgPyAoZGlnaXQxIC0gJzAnKSA6ICgoZGlnaXQxICYgMHhkZikgLSAnQScgKyAxMCk7DQotICAgICAgICBieXRlID0gYnl0ZSAqIDE2ICsgKChkaWdpdDIgPj0gJzAnICYmIGRpZ2l0MiA8PSAnOScpID8gKGRpZ2l0MiAtICcwJykgOiAoKGRpZ2l0MiAmIDB4ZGYpIC0gJ0EnICsgMTApKTsNCi0gICAgICAgIHJhbmdlLm1fVXBwZXJbaV0gPSBieXRlOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1zdGF0aWMgQ0ZYX0J5dGVTdHJpbmcgQ01hcF9HZXRTdHJpbmcoRlhfQlNUUiB3b3JkKQ0KLXsNCi0gICAgcmV0dXJuIHdvcmQuTWlkKDEsIHdvcmQuR2V0TGVuZ3RoKCkgLSAyKTsNCi19DQotdm9pZCBDUERGX0NNYXBQYXJzZXI6OlBhcnNlV29yZChGWF9CU1RSIHdvcmQpDQotew0KLSAgICBpZiAod29yZC5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAod29yZCA9PSBGWF9CU1RSQygiYmVnaW5jaWRjaGFyIikpIHsNCi0gICAgICAgIG1fU3RhdHVzID0gMTsNCi0gICAgICAgIG1fQ29kZVNlcSA9IDA7DQotICAgIH0gZWxzZSBpZiAod29yZCA9PSBGWF9CU1RSQygiYmVnaW5jaWRyYW5nZSIpKSB7DQotICAgICAgICBtX1N0YXR1cyA9IDI7DQotICAgICAgICBtX0NvZGVTZXEgPSAwOw0KLSAgICB9IGVsc2UgaWYgKHdvcmQgPT0gRlhfQlNUUkMoImVuZGNpZHJhbmdlIikgfHwgd29yZCA9PSBGWF9CU1RSQygiZW5kY2lkY2hhciIpKSB7DQotICAgICAgICBtX1N0YXR1cyA9IDA7DQotICAgIH0gZWxzZSBpZiAod29yZCA9PSBGWF9CU1RSQygiL1dNb2RlIikpIHsNCi0gICAgICAgIG1fU3RhdHVzID0gNjsNCi0gICAgfSBlbHNlIGlmICh3b3JkID09IEZYX0JTVFJDKCIvUmVnaXN0cnkiKSkgew0KLSAgICAgICAgbV9TdGF0dXMgPSAzOw0KLSAgICB9IGVsc2UgaWYgKHdvcmQgPT0gRlhfQlNUUkMoIi9PcmRlcmluZyIpKSB7DQotICAgICAgICBtX1N0YXR1cyA9IDQ7DQotICAgIH0gZWxzZSBpZiAod29yZCA9PSBGWF9CU1RSQygiL1N1cHBsZW1lbnQiKSkgew0KLSAgICAgICAgbV9TdGF0dXMgPSA1Ow0KLSAgICB9IGVsc2UgaWYgKHdvcmQgPT0gRlhfQlNUUkMoImJlZ2luY29kZXNwYWNlcmFuZ2UiKSkgew0KLSAgICAgICAgbV9TdGF0dXMgPSA3Ow0KLSAgICAgICAgbV9Db2RlU2VxID0gMDsNCi0gICAgfSBlbHNlIGlmICh3b3JkID09IEZYX0JTVFJDKCJ1c2VjbWFwIikpIHsNCi0gICAgfSBlbHNlIGlmIChtX1N0YXR1cyA9PSAxIHx8IG1fU3RhdHVzID09IDIpIHsNCi0gICAgICAgIG1fQ29kZVBvaW50c1ttX0NvZGVTZXFdID0gQ01hcF9HZXRDb2RlKHdvcmQpOw0KLSAgICAgICAgbV9Db2RlU2VxICsrOw0KLSAgICAgICAgRlhfRFdPUkQgU3RhcnRDb2RlLCBFbmRDb2RlOw0KLSAgICAgICAgRlhfV09SRCBTdGFydENJRDsNCi0gICAgICAgIGlmIChtX1N0YXR1cyA9PSAxKSB7DQotICAgICAgICAgICAgaWYgKG1fQ29kZVNlcSA8IDIpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBFbmRDb2RlID0gU3RhcnRDb2RlID0gbV9Db2RlUG9pbnRzWzBdOw0KLSAgICAgICAgICAgIFN0YXJ0Q0lEID0gKEZYX1dPUkQpbV9Db2RlUG9pbnRzWzFdOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAobV9Db2RlU2VxIDwgMykgew0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIFN0YXJ0Q29kZSA9IG1fQ29kZVBvaW50c1swXTsNCi0gICAgICAgICAgICBFbmRDb2RlID0gbV9Db2RlUG9pbnRzWzFdOw0KLSAgICAgICAgICAgIFN0YXJ0Q0lEID0gKEZYX1dPUkQpbV9Db2RlUG9pbnRzWzJdOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKEVuZENvZGUgPCAweDEwMDAwKSB7DQotICAgICAgICAgICAgZm9yIChGWF9EV09SRCBjb2RlID0gU3RhcnRDb2RlOyBjb2RlIDw9IEVuZENvZGU7IGNvZGUgKyspIHsNCi0gICAgICAgICAgICAgICAgbV9wQ01hcC0+bV9wTWFwcGluZ1tjb2RlXSA9IChGWF9XT1JEKShTdGFydENJRCArIGNvZGUgLSBTdGFydENvZGUpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgRlhfRFdPUkQgYnVmWzJdOw0KLSAgICAgICAgICAgIGJ1ZlswXSA9IFN0YXJ0Q29kZTsNCi0gICAgICAgICAgICBidWZbMV0gPSAoKEVuZENvZGUgLSBTdGFydENvZGUpIDw8IDE2KSArIFN0YXJ0Q0lEOw0KLSAgICAgICAgICAgIG1fQWRkTWFwcy5BcHBlbmRCbG9jayhidWYsIHNpemVvZiBidWYpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9Db2RlU2VxID0gMDsNCi0gICAgfSBlbHNlIGlmIChtX1N0YXR1cyA9PSAzKSB7DQotICAgICAgICBDTWFwX0dldFN0cmluZyh3b3JkKTsNCi0gICAgICAgIG1fU3RhdHVzID0gMDsNCi0gICAgfSBlbHNlIGlmIChtX1N0YXR1cyA9PSA0KSB7DQotICAgICAgICBtX3BDTWFwLT5tX0NoYXJzZXQgPSBfQ2hhcnNldEZyb21PcmRlcmluZyhDTWFwX0dldFN0cmluZyh3b3JkKSk7DQotICAgICAgICBtX1N0YXR1cyA9IDA7DQotICAgIH0gZWxzZSBpZiAobV9TdGF0dXMgPT0gNSkgew0KLSAgICAgICAgQ01hcF9HZXRDb2RlKHdvcmQpOw0KLSAgICAgICAgbV9TdGF0dXMgPSAwOw0KLSAgICB9IGVsc2UgaWYgKG1fU3RhdHVzID09IDYpIHsNCi0gICAgICAgIG1fcENNYXAtPm1fYlZlcnRpY2FsID0gQ01hcF9HZXRDb2RlKHdvcmQpOw0KLSAgICAgICAgbV9TdGF0dXMgPSAwOw0KLSAgICB9IGVsc2UgaWYgKG1fU3RhdHVzID09IDcpIHsNCi0gICAgICAgIGlmICh3b3JkID09IEZYX0JTVFJDKCJlbmRjb2Rlc3BhY2VyYW5nZSIpKSB7DQotICAgICAgICAgICAgaW50IG5TZWdzID0gbV9Db2RlUmFuZ2VzLkdldFNpemUoKTsNCi0gICAgICAgICAgICBpZiAoblNlZ3MgPiAxKSB7DQotICAgICAgICAgICAgICAgIG1fcENNYXAtPm1fQ29kaW5nU2NoZW1lID0gQ1BERl9DTWFwOjpNaXhlZEZvdXJCeXRlczsNCi0gICAgICAgICAgICAgICAgbV9wQ01hcC0+bV9uQ29kZVJhbmdlcyA9IG5TZWdzOw0KLSAgICAgICAgICAgICAgICBtX3BDTWFwLT5tX3BMZWFkaW5nQnl0ZXMgPSBGWF9BbGxvYyhGWF9CWVRFLCBuU2VncyAqIHNpemVvZihfQ01hcF9Db2RlUmFuZ2UpKTsNCi0gICAgICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wQ01hcC0+bV9wTGVhZGluZ0J5dGVzLCBtX0NvZGVSYW5nZXMuR2V0RGF0YSgpLCBuU2VncyAqIHNpemVvZihfQ01hcF9Db2RlUmFuZ2UpKTsNCi0gICAgICAgICAgICB9IGVsc2UgaWYgKG5TZWdzID09IDEpIHsNCi0gICAgICAgICAgICAgICAgbV9wQ01hcC0+bV9Db2RpbmdTY2hlbWUgPSAobV9Db2RlUmFuZ2VzWzBdLm1fQ2hhclNpemUgPT0gMikgPyBDUERGX0NNYXA6OlR3b0J5dGVzIDogQ1BERl9DTWFwOjpPbmVCeXRlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBtX1N0YXR1cyA9IDA7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlmICh3b3JkLkdldExlbmd0aCgpID09IDAgfHwgd29yZC5HZXRBdCgwKSAhPSAnPCcpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobV9Db2RlU2VxICUgMikgew0KLSAgICAgICAgICAgICAgICBfQ01hcF9Db2RlUmFuZ2UgcmFuZ2U7DQotICAgICAgICAgICAgICAgIGlmIChfQ01hcF9HZXRDb2RlUmFuZ2UocmFuZ2UsIG1fTGFzdFdvcmQsIHdvcmQpKSB7DQotICAgICAgICAgICAgICAgICAgICBtX0NvZGVSYW5nZXMuQWRkKHJhbmdlKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBtX0NvZGVTZXEgKys7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9MYXN0V29yZCA9IHdvcmQ7DQotfQ0KLUNQREZfQ01hcDo6Q1BERl9DTWFwKCkNCi17DQotICAgIG1fQ2hhcnNldCA9IENJRFNFVF9VTktOT1dOOw0KLSAgICBtX0NvZGluZyA9IENJRENPRElOR19VTktOT1dOOw0KLSAgICBtX0NvZGluZ1NjaGVtZSA9IFR3b0J5dGVzOw0KLSAgICBtX2JWZXJ0aWNhbCA9IDA7DQotICAgIG1fYkxvYWRlZCA9IEZBTFNFOw0KLSAgICBtX3BNYXBwaW5nID0gTlVMTDsNCi0gICAgbV9wTGVhZGluZ0J5dGVzID0gTlVMTDsNCi0gICAgbV9wQWRkTWFwcGluZyA9IE5VTEw7DQotICAgIG1fcEVtYmVkTWFwID0gTlVMTDsNCi0gICAgbV9wVXNlTWFwID0gTlVMTDsNCi0gICAgbV9uQ29kZVJhbmdlcyA9IDA7DQotfQ0KLUNQREZfQ01hcDo6fkNQREZfQ01hcCgpDQotew0KLSAgICBpZiAobV9wTWFwcGluZykgew0KLSAgICAgICAgRlhfRnJlZShtX3BNYXBwaW5nKTsNCi0gICAgfQ0KLSAgICBpZiAobV9wQWRkTWFwcGluZykgew0KLSAgICAgICAgRlhfRnJlZShtX3BBZGRNYXBwaW5nKTsNCi0gICAgfQ0KLSAgICBpZiAobV9wTGVhZGluZ0J5dGVzKSB7DQotICAgICAgICBGWF9GcmVlKG1fcExlYWRpbmdCeXRlcyk7DQotICAgIH0NCi0gICAgaWYgKG1fcFVzZU1hcCkgew0KLSAgICAgICAgZGVsZXRlIG1fcFVzZU1hcDsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfQ01hcDo6UmVsZWFzZSgpDQotew0KLSAgICBpZiAobV9QcmVkZWZpbmVkQ01hcC5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIGRlbGV0ZSB0aGlzOw0KLSAgICB9DQotfQ0KLWNvbnN0IENQREZfUHJlZGVmaW5lZENNYXAgZ19QcmVkZWZpbmVkQ01hcHNbXSA9IHsNCi0gICAgeyAiR0ItRVVDIiwgQ0lEU0VUX0dCMSwgQ0lEQ09ESU5HX0dCLCBDUERGX0NNYXA6Ok1peGVkVHdvQnl0ZXMsIDEsIHsweGExLCAweGZlfSB9LA0KLSAgICB7ICJHQnBjLUVVQyIsIENJRFNFVF9HQjEsIENJRENPRElOR19HQiwgQ1BERl9DTWFwOjpNaXhlZFR3b0J5dGVzLCAxLCB7MHhhMSwgMHhmY30gfSwNCi0gICAgeyAiR0JLLUVVQyIsIENJRFNFVF9HQjEsIENJRENPRElOR19HQiwgQ1BERl9DTWFwOjpNaXhlZFR3b0J5dGVzLCAxLCB7MHg4MSwgMHhmZX0gfSwNCi0gICAgeyAiR0JLcC1FVUMiLCBDSURTRVRfR0IxLCBDSURDT0RJTkdfR0IsIENQREZfQ01hcDo6TWl4ZWRUd29CeXRlcywgMSwgezB4ODEsIDB4ZmV9IH0sDQotICAgIHsgIkdCSzJLLUVVQyIsIENJRFNFVF9HQjEsIENJRENPRElOR19HQiwgQ1BERl9DTWFwOjpNaXhlZFR3b0J5dGVzLCAxLCB7MHg4MSwgMHhmZX0gfSwNCi0gICAgeyAiR0JLMksiLCBDSURTRVRfR0IxLCBDSURDT0RJTkdfR0IsIENQREZfQ01hcDo6TWl4ZWRUd29CeXRlcywgMSwgezB4ODEsIDB4ZmV9IH0sDQotICAgIHsgIlVuaUdCLVVDUzIiLCBDSURTRVRfR0IxLCBDSURDT0RJTkdfVUNTMiwgQ1BERl9DTWFwOjpUd29CeXRlcyB9LA0KLSAgICB7ICJVbmlHQi1VVEYxNiIsIENJRFNFVF9HQjEsIENJRENPRElOR19VVEYxNiwgQ1BERl9DTWFwOjpUd29CeXRlcyB9LA0KLSAgICB7ICJCNXBjIiwgQ0lEU0VUX0NOUzEsIENJRENPRElOR19CSUc1LCBDUERGX0NNYXA6Ok1peGVkVHdvQnl0ZXMsIDEsIHsweGExLCAweGZjfSB9LA0KLSAgICB7ICJIS3Njcy1CNSIsIENJRFNFVF9DTlMxLCBDSURDT0RJTkdfQklHNSwgQ1BERl9DTWFwOjpNaXhlZFR3b0J5dGVzLCAxLCB7MHg4OCwgMHhmZX0gfSwNCi0gICAgeyAiRVRlbi1CNSIsIENJRFNFVF9DTlMxLCBDSURDT0RJTkdfQklHNSwgQ1BERl9DTWFwOjpNaXhlZFR3b0J5dGVzLCAxLCB7MHhhMSwgMHhmZX0gfSwNCi0gICAgeyAiRVRlbm1zLUI1IiwgQ0lEU0VUX0NOUzEsIENJRENPRElOR19CSUc1LCBDUERGX0NNYXA6Ok1peGVkVHdvQnl0ZXMsIDEsIHsweGExLCAweGZlfSB9LA0KLSAgICB7ICJVbmlDTlMtVUNTMiIsIENJRFNFVF9DTlMxLCBDSURDT0RJTkdfVUNTMiwgQ1BERl9DTWFwOjpUd29CeXRlcyB9LA0KLSAgICB7ICJVbmlDTlMtVVRGMTYiLCBDSURTRVRfQ05TMSwgQ0lEQ09ESU5HX1VURjE2LCBDUERGX0NNYXA6OlR3b0J5dGVzIH0sDQotICAgIHsgIjgzcHYtUktTSiIsIENJRFNFVF9KQVBBTjEsIENJRENPRElOR19KSVMsIENQREZfQ01hcDo6TWl4ZWRUd29CeXRlcywgMiwgezB4ODEsIDB4OWYsIDB4ZTAsIDB4ZmN9IH0sDQotICAgIHsgIjkwbXMtUktTSiIsIENJRFNFVF9KQVBBTjEsIENJRENPRElOR19KSVMsIENQREZfQ01hcDo6TWl4ZWRUd29CeXRlcywgMiwgezB4ODEsIDB4OWYsIDB4ZTAsIDB4ZmN9IH0sDQotICAgIHsgIjkwbXNwLVJLU0oiLCBDSURTRVRfSkFQQU4xLCBDSURDT0RJTkdfSklTLCBDUERGX0NNYXA6Ok1peGVkVHdvQnl0ZXMsIDIsIHsweDgxLCAweDlmLCAweGUwLCAweGZjfSB9LA0KLSAgICB7ICI5MHB2LVJLU0oiLCBDSURTRVRfSkFQQU4xLCBDSURDT0RJTkdfSklTLCBDUERGX0NNYXA6Ok1peGVkVHdvQnl0ZXMsIDIsIHsweDgxLCAweDlmLCAweGUwLCAweGZjfSB9LA0KLSAgICB7ICJBZGQtUktTSiIsIENJRFNFVF9KQVBBTjEsIENJRENPRElOR19KSVMsIENQREZfQ01hcDo6TWl4ZWRUd29CeXRlcywgMiwgezB4ODEsIDB4OWYsIDB4ZTAsIDB4ZmN9IH0sDQotICAgIHsgIkVVQyIsIENJRFNFVF9KQVBBTjEsIENJRENPRElOR19KSVMsIENQREZfQ01hcDo6TWl4ZWRUd29CeXRlcywgMiwgezB4OGUsIDB4OGUsIDB4YTEsIDB4ZmV9IH0sDQotICAgIHsgIkgiLCBDSURTRVRfSkFQQU4xLCBDSURDT0RJTkdfSklTLCBDUERGX0NNYXA6OlR3b0J5dGVzLCAxLCB7MHgyMSwgMHg3ZX0gfSwNCi0gICAgeyAiViIsIENJRFNFVF9KQVBBTjEsIENJRENPRElOR19KSVMsIENQREZfQ01hcDo6VHdvQnl0ZXMsIDEsIHsweDIxLCAweDdlfSB9LA0KLSAgICB7ICJFeHQtUktTSiIsIENJRFNFVF9KQVBBTjEsIENJRENPRElOR19KSVMsIENQREZfQ01hcDo6TWl4ZWRUd29CeXRlcywgMiwgezB4ODEsIDB4OWYsIDB4ZTAsIDB4ZmN9IH0sDQotICAgIHsgIlVuaUpJUy1VQ1MyIiwgQ0lEU0VUX0pBUEFOMSwgQ0lEQ09ESU5HX1VDUzIsIENQREZfQ01hcDo6VHdvQnl0ZXMgfSwNCi0gICAgeyAiVW5pSklTLVVDUzItSFciLCBDSURTRVRfSkFQQU4xLCBDSURDT0RJTkdfVUNTMiwgQ1BERl9DTWFwOjpUd29CeXRlcyB9LA0KLSAgICB7ICJVbmlKSVMtVVRGMTYiLCBDSURTRVRfSkFQQU4xLCBDSURDT0RJTkdfVVRGMTYsIENQREZfQ01hcDo6VHdvQnl0ZXMgfSwNCi0gICAgeyAiS1NDLUVVQyIsIENJRFNFVF9LT1JFQTEsIENJRENPRElOR19LT1JFQSwgQ1BERl9DTWFwOjpNaXhlZFR3b0J5dGVzLCAxLCB7MHhhMSwgMHhmZX0gfSwNCi0gICAgeyAiS1NDbXMtVUhDIiwgQ0lEU0VUX0tPUkVBMSwgQ0lEQ09ESU5HX0tPUkVBLCBDUERGX0NNYXA6Ok1peGVkVHdvQnl0ZXMsIDEsIHsweDgxLCAweGZlfSB9LA0KLSAgICB7ICJLU0Ntcy1VSEMtSFciLCBDSURTRVRfS09SRUExLCBDSURDT0RJTkdfS09SRUEsIENQREZfQ01hcDo6TWl4ZWRUd29CeXRlcywgMSwgezB4ODEsIDB4ZmV9IH0sDQotICAgIHsgIktTQ3BjLUVVQyIsIENJRFNFVF9LT1JFQTEsIENJRENPRElOR19LT1JFQSwgQ1BERl9DTWFwOjpNaXhlZFR3b0J5dGVzLCAxLCB7MHhhMSwgMHhmZH0gfSwNCi0gICAgeyAiVW5pS1MtVUNTMiIsIENJRFNFVF9LT1JFQTEsIENJRENPRElOR19VQ1MyLCBDUERGX0NNYXA6OlR3b0J5dGVzIH0sDQotICAgIHsgIlVuaUtTLVVURjE2IiwgQ0lEU0VUX0tPUkVBMSwgQ0lEQ09ESU5HX1VURjE2LCBDUERGX0NNYXA6OlR3b0J5dGVzIH0sDQotICAgIHsgTlVMTCwgMCwgMCB9DQotfTsNCi1leHRlcm4gdm9pZCBGUERGQVBJX0ZpbmRFbWJlZGRlZENNYXAoY29uc3QgY2hhciogbmFtZSwgaW50IGNoYXJzZXQsIGludCBjb2RpbmcsIGNvbnN0IEZYQ01BUF9DTWFwKiYgcE1hcCk7DQotZXh0ZXJuIEZYX1dPUkQgRlBERkFQSV9DSURGcm9tQ2hhckNvZGUoY29uc3QgRlhDTUFQX0NNYXAqIHBNYXAsIEZYX0RXT1JEIGNoYXJjb2RlKTsNCi1GWF9CT09MIENQREZfQ01hcDo6TG9hZFByZWRlZmluZWQoQ1BERl9DTWFwTWFuYWdlciogcE1nciwgRlhfTFBDU1RSIHBOYW1lLCBGWF9CT09MIGJQcm9tcHRDSkspDQotew0KLSAgICBtX1ByZWRlZmluZWRDTWFwID0gcE5hbWU7DQotICAgIGlmIChtX1ByZWRlZmluZWRDTWFwID09IEZYX0JTVFJDKCJJZGVudGl0eS1IIikgfHwgbV9QcmVkZWZpbmVkQ01hcCA9PSBGWF9CU1RSQygiSWRlbnRpdHktViIpKSB7DQotICAgICAgICBtX0NvZGluZyA9IENJRENPRElOR19DSUQ7DQotICAgICAgICBtX2JWZXJ0aWNhbCA9IHBOYW1lWzldID09ICdWJzsNCi0gICAgICAgIG1fYkxvYWRlZCA9IFRSVUU7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVN0cmluZyBjbWFwaWQgPSBtX1ByZWRlZmluZWRDTWFwOw0KLSAgICBtX2JWZXJ0aWNhbCA9IGNtYXBpZC5SaWdodCgxKSA9PSBGWF9CU1RSQygiViIpOw0KLSAgICBpZiAoY21hcGlkLkdldExlbmd0aCgpID4gMikgew0KLSAgICAgICAgY21hcGlkID0gY21hcGlkLkxlZnQoY21hcGlkLkdldExlbmd0aCgpIC0gMik7DQotICAgIH0NCi0gICAgaW50IGluZGV4ID0gMDsNCi0gICAgd2hpbGUgKDEpIHsNCi0gICAgICAgIGlmIChnX1ByZWRlZmluZWRDTWFwc1tpbmRleF0ubV9wTmFtZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGNtYXBpZCA9PSBDRlhfQnl0ZVN0cmluZ0MoZ19QcmVkZWZpbmVkQ01hcHNbaW5kZXhdLm1fcE5hbWUpKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBpbmRleCArKzsNCi0gICAgfQ0KLSAgICBjb25zdCBDUERGX1ByZWRlZmluZWRDTWFwJiBtYXAgPSBnX1ByZWRlZmluZWRDTWFwc1tpbmRleF07DQotICAgIG1fQ2hhcnNldCA9IG1hcC5tX0NoYXJzZXQ7DQotICAgIG1fQ29kaW5nID0gbWFwLm1fQ29kaW5nOw0KLSAgICBtX0NvZGluZ1NjaGVtZSA9IG1hcC5tX0NvZGluZ1NjaGVtZTsNCi0gICAgaWYgKG1fQ29kaW5nU2NoZW1lID09IE1peGVkVHdvQnl0ZXMpIHsNCi0gICAgICAgIG1fcExlYWRpbmdCeXRlcyA9IEZYX0FsbG9jKEZYX0JZVEUsIDI1Nik7DQotICAgICAgICBGWFNZU19tZW1zZXQzMihtX3BMZWFkaW5nQnl0ZXMsIDAsIDI1Nik7DQotICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgbWFwLm1fTGVhZGluZ1NlZ0NvdW50OyBpICsrKSB7DQotICAgICAgICAgICAgZm9yIChpbnQgYiA9IG1hcC5tX0xlYWRpbmdTZWdzW2kgKiAyXTsgYiA8PSBtYXAubV9MZWFkaW5nU2Vnc1tpICogMiArIDFdOyBiICsrKSB7DQotICAgICAgICAgICAgICAgIG1fcExlYWRpbmdCeXRlc1tiXSA9IDE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIEZQREZBUElfRmluZEVtYmVkZGVkQ01hcChwTmFtZSwgbV9DaGFyc2V0LCBtX0NvZGluZywgbV9wRW1iZWRNYXApOw0KLSAgICBpZiAobV9wRW1iZWRNYXApIHsNCi0gICAgICAgIG1fYkxvYWRlZCA9IFRSVUU7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSNpZm5kZWYgX0ZQREZBUElfTUlOSV8NCi0gICAgRlhfTFBWT0lEIHBQYWNrYWdlID0gcE1nci0+R2V0UGFja2FnZShiUHJvbXB0Q0pLKTsNCi0gICAgRlhfTFBCWVRFIHBCdWZmZXI7DQotICAgIEZYX0RXT1JEIHNpemU7DQotICAgIGlmIChwUGFja2FnZSA9PSBOVUxMIHx8ICFGWEZDX0xvYWRGaWxlKHBQYWNrYWdlLCBtX1ByZWRlZmluZWRDTWFwLCBwQnVmZmVyLCBzaXplKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fcE1hcHBpbmcgPSBGWF9BbGxvYyhGWF9XT1JELCA2NTUzNik7DQotICAgIEZYU1lTX21lbXNldDMyKG1fcE1hcHBpbmcsIDAsIDY1NTM2ICogc2l6ZW9mKEZYX1dPUkQpKTsNCi0gICAgRlhfRFdPUkQgZHdSZWNvZGVFbmRQb3MgPSAwOw0KLSAgICBpZiAocEJ1ZmZlcls1XSA9PSAwKSB7DQotICAgICAgICBGWF9EV09SRCBkd1N0YXJ0SW5kZXggPSAqKEZYX0RXT1JEKikocEJ1ZmZlciArIDgpOw0KLSAgICAgICAgRlhfRFdPUkQgZHdSZWNvcmRDb3VudCA9ICooRlhfRFdPUkQqKShwQnVmZmVyICsgMTYpOw0KLSAgICAgICAgRlhfRFdPUkQgZHdEYXRhT2Zmc2V0ID0gKihGWF9EV09SRCopKHBCdWZmZXIgKyAyMCk7DQotICAgICAgICBpZiAoZHdSZWNvcmRDb3VudCAqIDIgKyBkd1N0YXJ0SW5kZXggKiAyIDwgNjU1MzYpIHsNCi0gICAgICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BNYXBwaW5nICsgZHdTdGFydEluZGV4ICogMiwgcEJ1ZmZlciArIGR3RGF0YU9mZnNldCwgZHdSZWNvcmRDb3VudCAqIDIpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZHdSZWNvZGVFbmRQb3MgPSBkd0RhdGFPZmZzZXQgKyBkd1JlY29yZENvdW50ICogMjsNCi0gICAgfSBlbHNlIGlmIChwQnVmZmVyWzVdID09IDIpIHsNCi0gICAgICAgIEZYX0RXT1JEIG5TZWdtZW50cyA9ICooRlhfRFdPUkQqKShwQnVmZmVyICsgMTYpOw0KLSAgICAgICAgRlhfRFdPUkQgZHdEYXRhT2Zmc2V0ID0gKihGWF9EV09SRCopKHBCdWZmZXIgKyAyMCk7DQotICAgICAgICBkd1JlY29kZUVuZFBvcyA9IGR3RGF0YU9mZnNldCArIDYgKiBuU2VnbWVudHM7DQotICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgblNlZ21lbnRzOyBpICsrKSB7DQotICAgICAgICAgICAgRlhfTFBCWVRFIHBSZWNvcmQgPSBwQnVmZmVyICsgZHdEYXRhT2Zmc2V0ICsgaSAqIDY7DQotICAgICAgICAgICAgRlhfV09SRCBJbmRleFN0YXJ0ID0gKihGWF9XT1JEKilwUmVjb3JkOw0KLSAgICAgICAgICAgIEZYX1dPUkQgSW5kZXhDb3VudCA9ICooRlhfV09SRCopKHBSZWNvcmQgKyAyKTsNCi0gICAgICAgICAgICBGWF9XT1JEIENvZGVTdGFydCA9ICooRlhfV09SRCopKHBSZWNvcmQgKyA0KTsNCi0gICAgICAgICAgICBpZiAoSW5kZXhTdGFydCArIEluZGV4Q291bnQgPCA2NTUzNikNCi0gICAgICAgICAgICAgICAgZm9yIChGWF9EV09SRCBqID0gMDsgaiA8IEluZGV4Q291bnQ7IGogKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fcE1hcHBpbmdbSW5kZXhTdGFydCArIGogXSA9IChGWF9XT1JEKShDb2RlU3RhcnQgKyBqKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChkd1JlY29kZUVuZFBvcyA8IHNpemUpIHsNCi0gICAgICAgIEZYX0RXT1JEIGR3TWFwTGVuID0gKihGWF9EV09SRCopKHBCdWZmZXIgKyBkd1JlY29kZUVuZFBvcyk7DQotICAgICAgICBpZiAoZHdNYXBMZW4pIHsNCi0gICAgICAgICAgICBtX3BVc2VNYXAgPSBGWF9ORVcgQ1BERl9DTWFwOw0KLSAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGJzTmFtZShwQnVmZmVyICsgZHdSZWNvZGVFbmRQb3MgKyA0ICwgZHdNYXBMZW4pOw0KLSAgICAgICAgICAgIGlmIChtX3BVc2VNYXApIHsNCi0gICAgICAgICAgICAgICAgbV9wVXNlTWFwLT5Mb2FkUHJlZGVmaW5lZChwTWdyLCBic05hbWUsIGJQcm9tcHRDSkspOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBGWF9GcmVlKHBCdWZmZXIpOw0KLSAgICBtX2JMb2FkZWQgPSBUUlVFOw0KLSNlbmRpZg0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotZXh0ZXJuICJDIiB7DQotICAgIHN0YXRpYyBpbnQgY29tcGFyZV9kd29yZChjb25zdCB2b2lkKiBkYXRhMSwgY29uc3Qgdm9pZCogZGF0YTIpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAoKihGWF9EV09SRCopZGF0YTEpIC0gKCooRlhfRFdPUkQqKWRhdGEyKTsNCi0gICAgfQ0KLX07DQotRlhfQk9PTCBDUERGX0NNYXA6OkxvYWRFbWJlZGRlZChGWF9MUENCWVRFIHBEYXRhLCBGWF9EV09SRCBzaXplKQ0KLXsNCi0gICAgbV9wTWFwcGluZyA9IEZYX0FsbG9jKEZYX1dPUkQsIDY1NTM2KTsNCi0gICAgRlhTWVNfbWVtc2V0MzIobV9wTWFwcGluZywgMCwgNjU1MzYgKiBzaXplb2YoRlhfV09SRCkpOw0KLSAgICBDUERGX0NNYXBQYXJzZXIgcGFyc2VyOw0KLSAgICBwYXJzZXIuSW5pdGlhbGl6ZSh0aGlzKTsNCi0gICAgQ1BERl9TaW1wbGVQYXJzZXIgc3ludGF4KHBEYXRhLCBzaXplKTsNCi0gICAgd2hpbGUgKDEpIHsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nQyB3b3JkID0gc3ludGF4LkdldFdvcmQoKTsNCi0gICAgICAgIGlmICh3b3JkLklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcGFyc2VyLlBhcnNlV29yZCh3b3JkKTsNCi0gICAgfQ0KLSAgICBpZiAobV9Db2RpbmdTY2hlbWUgPT0gTWl4ZWRGb3VyQnl0ZXMgJiYgcGFyc2VyLm1fQWRkTWFwcy5HZXRTaXplKCkpIHsNCi0gICAgICAgIG1fcEFkZE1hcHBpbmcgPSBGWF9BbGxvYyhGWF9CWVRFLCBwYXJzZXIubV9BZGRNYXBzLkdldFNpemUoKSArIDQpOw0KLSAgICAgICAgKihGWF9EV09SRCopbV9wQWRkTWFwcGluZyA9IHBhcnNlci5tX0FkZE1hcHMuR2V0U2l6ZSgpIC8gODsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKG1fcEFkZE1hcHBpbmcgKyA0LCBwYXJzZXIubV9BZGRNYXBzLkdldEJ1ZmZlcigpLCBwYXJzZXIubV9BZGRNYXBzLkdldFNpemUoKSk7DQotICAgICAgICBGWFNZU19xc29ydChtX3BBZGRNYXBwaW5nICsgNCwgcGFyc2VyLm1fQWRkTWFwcy5HZXRTaXplKCkgLyA4LCA4LCBjb21wYXJlX2R3b3JkKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotZXh0ZXJuICJDIiB7DQotICAgIHN0YXRpYyBpbnQgY29tcGFyZUNJRChjb25zdCB2b2lkKiBrZXksIGNvbnN0IHZvaWQqIGVsZW1lbnQpDQotICAgIHsNCi0gICAgICAgIGlmICgoKihGWF9EV09SRCopa2V5KSA8ICgqKEZYX0RXT1JEKillbGVtZW50KSkgew0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICgoKihGWF9EV09SRCopa2V5KSA+ICgqKEZYX0RXT1JEKillbGVtZW50KSArICgoRlhfRFdPUkQqKWVsZW1lbnQpWzFdIC8gNjU1MzYpIHsNCi0gICAgICAgICAgICByZXR1cm4gMTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotfTsNCi1GWF9XT1JEIENQREZfQ01hcDo6Q0lERnJvbUNoYXJDb2RlKEZYX0RXT1JEIGNoYXJjb2RlKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fQ29kaW5nID09IENJRENPRElOR19DSUQpIHsNCi0gICAgICAgIHJldHVybiAoRlhfV09SRCljaGFyY29kZTsNCi0gICAgfQ0KLSAgICBpZiAobV9wRW1iZWRNYXApIHsNCi0gICAgICAgIHJldHVybiBGUERGQVBJX0NJREZyb21DaGFyQ29kZShtX3BFbWJlZE1hcCwgY2hhcmNvZGUpOw0KLSAgICB9DQotICAgIGlmIChtX3BNYXBwaW5nID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAoRlhfV09SRCljaGFyY29kZTsNCi0gICAgfQ0KLSAgICBpZiAoY2hhcmNvZGUgPj4gMTYpIHsNCi0gICAgICAgIGlmIChtX3BBZGRNYXBwaW5nKSB7DQotICAgICAgICAgICAgdm9pZCogZm91bmQgPSBGWFNZU19ic2VhcmNoKCZjaGFyY29kZSwgbV9wQWRkTWFwcGluZyArIDQsICooRlhfRFdPUkQqKW1fcEFkZE1hcHBpbmcsIDgsIGNvbXBhcmVDSUQpOw0KLSAgICAgICAgICAgIGlmIChmb3VuZCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIGlmIChtX3BVc2VNYXApIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtX3BVc2VNYXAtPkNJREZyb21DaGFyQ29kZShjaGFyY29kZSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybiAoRlhfV09SRCkoKChGWF9EV09SRCopZm91bmQpWzFdICUgNjU1MzYgKyBjaGFyY29kZSAtICogKEZYX0RXT1JEKilmb3VuZCk7DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9wVXNlTWFwKSB7DQotICAgICAgICAgICAgcmV0dXJuIG1fcFVzZU1hcC0+Q0lERnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIEZYX0RXT1JEIENJRCA9IG1fcE1hcHBpbmdbY2hhcmNvZGVdOw0KLSAgICBpZiAoIUNJRCAmJiBtX3BVc2VNYXApIHsNCi0gICAgICAgIHJldHVybiBtX3BVc2VNYXAtPkNJREZyb21DaGFyQ29kZShjaGFyY29kZSk7DQotICAgIH0NCi0gICAgcmV0dXJuIChGWF9XT1JEKUNJRDsNCi19DQotc3RhdGljIGludCBfQ2hlY2tDb2RlUmFuZ2UoRlhfTFBCWVRFIGNvZGVzLCBpbnQgc2l6ZSwgX0NNYXBfQ29kZVJhbmdlKiBwUmFuZ2VzLCBpbnQgblJhbmdlcykNCi17DQotICAgIGludCBpU2VnID0gblJhbmdlcyAtIDE7DQotICAgIHdoaWxlIChpU2VnID49IDApIHsNCi0gICAgICAgIGlmIChwUmFuZ2VzW2lTZWddLm1fQ2hhclNpemUgPCBzaXplKSB7DQotICAgICAgICAgICAgaVNlZyAtLTsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBpQ2hhciA9IDA7DQotICAgICAgICB3aGlsZSAoaUNoYXIgPCBzaXplKSB7DQotICAgICAgICAgICAgaWYgKGNvZGVzW2lDaGFyXSA8IHBSYW5nZXNbaVNlZ10ubV9Mb3dlcltpQ2hhcl0gfHwNCi0gICAgICAgICAgICAgICAgICAgIGNvZGVzW2lDaGFyXSA+IHBSYW5nZXNbaVNlZ10ubV9VcHBlcltpQ2hhcl0pIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlDaGFyICsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGlDaGFyID09IHBSYW5nZXNbaVNlZ10ubV9DaGFyU2l6ZSkgew0KLSAgICAgICAgICAgIHJldHVybiAyOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGlDaGFyKSB7DQotICAgICAgICAgICAgaWYgKHNpemUgPT0gcFJhbmdlc1tpU2VnXS5tX0NoYXJTaXplKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAyOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlTZWcgLS07DQotICAgIH0NCi0gICAgcmV0dXJuIDA7DQotfQ0KLUZYX0RXT1JEIENQREZfQ01hcDo6R2V0TmV4dENoYXIoRlhfTFBDU1RSIHBTdHJpbmcsIGludCYgb2Zmc2V0KSBjb25zdA0KLXsNCi0gICAgc3dpdGNoIChtX0NvZGluZ1NjaGVtZSkgew0KLSAgICAgICAgY2FzZSBPbmVCeXRlOg0KLSAgICAgICAgICAgIHJldHVybiAoKEZYX0xQQllURSlwU3RyaW5nKVtvZmZzZXQrK107DQotICAgICAgICBjYXNlIFR3b0J5dGVzOg0KLSAgICAgICAgICAgIG9mZnNldCArPSAyOw0KLSAgICAgICAgICAgIHJldHVybiAoKEZYX0xQQllURSlwU3RyaW5nKVtvZmZzZXQgLSAyXSAqIDI1NiArICgoRlhfTFBCWVRFKXBTdHJpbmcpW29mZnNldCAtIDFdOw0KLSAgICAgICAgY2FzZSBNaXhlZFR3b0J5dGVzOiB7DQotICAgICAgICAgICAgICAgIEZYX0JZVEUgYnl0ZTEgPSAoKEZYX0xQQllURSlwU3RyaW5nKVtvZmZzZXQrK107DQotICAgICAgICAgICAgICAgIGlmICghbV9wTGVhZGluZ0J5dGVzW2J5dGUxXSkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ5dGUxOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIEZYX0JZVEUgYnl0ZTIgPSAoKEZYX0xQQllURSlwU3RyaW5nKVtvZmZzZXQrK107DQotICAgICAgICAgICAgICAgIHJldHVybiBieXRlMSAqIDI1NiArIGJ5dGUyOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgTWl4ZWRGb3VyQnl0ZXM6IHsNCi0gICAgICAgICAgICAgICAgRlhfQllURSBjb2Rlc1s0XTsNCi0gICAgICAgICAgICAgICAgaW50IGNoYXJfc2l6ZSA9IDE7DQotICAgICAgICAgICAgICAgIGNvZGVzWzBdID0gKChGWF9MUEJZVEUpcFN0cmluZylbb2Zmc2V0KytdOw0KLSAgICAgICAgICAgICAgICBfQ01hcF9Db2RlUmFuZ2UqIHBSYW5nZXMgPSAoX0NNYXBfQ29kZVJhbmdlKiltX3BMZWFkaW5nQnl0ZXM7DQotICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7DQotICAgICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gX0NoZWNrQ29kZVJhbmdlKGNvZGVzLCBjaGFyX3NpemUsIHBSYW5nZXMsIG1fbkNvZGVSYW5nZXMpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID09IDIpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBjaGFyY29kZSA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGFyX3NpemU7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmNvZGUgPSAoY2hhcmNvZGUgPDwgOCkgKyBjb2Rlc1tpXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJjb2RlOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJfc2l6ZSA9PSA0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBjb2Rlc1tjaGFyX3NpemUgKytdID0gKChGWF9MUEJZVEUpcFN0cmluZylbb2Zmc2V0KytdOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gMDsNCi19DQotaW50IENQREZfQ01hcDo6R2V0Q2hhclNpemUoRlhfRFdPUkQgY2hhcmNvZGUpIGNvbnN0DQotew0KLSAgICBzd2l0Y2ggKG1fQ29kaW5nU2NoZW1lKSB7DQotICAgICAgICBjYXNlIE9uZUJ5dGU6DQotICAgICAgICAgICAgcmV0dXJuIDE7DQotICAgICAgICBjYXNlIFR3b0J5dGVzOg0KLSAgICAgICAgICAgIHJldHVybiAyOw0KLSAgICAgICAgY2FzZSBNaXhlZFR3b0J5dGVzOg0KLSAgICAgICAgY2FzZSBNaXhlZEZvdXJCeXRlczoNCi0gICAgICAgICAgICBpZiAoY2hhcmNvZGUgPCAweDEwMCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGNoYXJjb2RlIDwgMHgxMDAwMCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gMjsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGNoYXJjb2RlIDwgMHgxMDAwMDAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAzOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gNDsNCi0gICAgfQ0KLSAgICByZXR1cm4gMTsNCi19DQotaW50IENQREZfQ01hcDo6Q291bnRDaGFyKEZYX0xQQ1NUUiBwU3RyaW5nLCBpbnQgc2l6ZSkgY29uc3QNCi17DQotICAgIHN3aXRjaCAobV9Db2RpbmdTY2hlbWUpIHsNCi0gICAgICAgIGNhc2UgT25lQnl0ZToNCi0gICAgICAgICAgICByZXR1cm4gc2l6ZTsNCi0gICAgICAgIGNhc2UgVHdvQnl0ZXM6DQotICAgICAgICAgICAgcmV0dXJuIChzaXplICsgMSkgLyAyOw0KLSAgICAgICAgY2FzZSBNaXhlZFR3b0J5dGVzOiB7DQotICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDA7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgew0KLSAgICAgICAgICAgICAgICAgICAgY291bnQgKys7DQotICAgICAgICAgICAgICAgICAgICBpZiAobV9wTGVhZGluZ0J5dGVzWygoRlhfTFBCWVRFKXBTdHJpbmcpW2ldXSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGkgKys7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgTWl4ZWRGb3VyQnl0ZXM6IHsNCi0gICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMCwgb2Zmc2V0ID0gMDsNCi0gICAgICAgICAgICAgICAgd2hpbGUgKG9mZnNldCA8IHNpemUpIHsNCi0gICAgICAgICAgICAgICAgICAgIEdldE5leHRDaGFyKHBTdHJpbmcsIG9mZnNldCk7DQotICAgICAgICAgICAgICAgICAgICBjb3VudCArKzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICByZXR1cm4gY291bnQ7DQotICAgICAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBzaXplOw0KLX0NCi1pbnQgX0dldENoYXJTaXplKEZYX0RXT1JEIGNoYXJjb2RlLCBfQ01hcF9Db2RlUmFuZ2UqIHBSYW5nZXMsIGludCBpUmFuZ2VzU2l6ZSkNCi17DQotICAgIGlmICghaVJhbmdlc1NpemUpIHsNCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotICAgIEZYX0JZVEUgY29kZXNbNF07DQotICAgIGNvZGVzWzBdID0gY29kZXNbMV0gPSAweDAwOw0KLSAgICBjb2Rlc1syXSA9IChGWF9CWVRFKShjaGFyY29kZSA+PiA4ICYgMHhGRik7DQotICAgIGNvZGVzWzNdID0gKEZYX0JZVEUpY2hhcmNvZGU7DQotICAgIGludCBvZmZzZXQgPSAwLCBzaXplID0gNDsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsNCi0gICAgICAgIGludCBpU2VnID0gaVJhbmdlc1NpemUgLSAxOw0KLSAgICAgICAgd2hpbGUgKGlTZWcgPj0gMCkgew0KLSAgICAgICAgICAgIGlmIChwUmFuZ2VzW2lTZWddLm1fQ2hhclNpemUgPCBzaXplKSB7DQotICAgICAgICAgICAgICAgIGlTZWcgLS07DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpbnQgaUNoYXIgPSAwOw0KLSAgICAgICAgICAgIHdoaWxlIChpQ2hhciA8IHNpemUpIHsNCi0gICAgICAgICAgICAgICAgaWYgKGNvZGVzW29mZnNldCArIGlDaGFyXSA8IHBSYW5nZXNbaVNlZ10ubV9Mb3dlcltpQ2hhcl0gfHwNCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2Rlc1tvZmZzZXQgKyBpQ2hhcl0gPiBwUmFuZ2VzW2lTZWddLm1fVXBwZXJbaUNoYXJdKSB7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpQ2hhciArKzsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGlDaGFyID09IHBSYW5nZXNbaVNlZ10ubV9DaGFyU2l6ZSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gc2l6ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaVNlZyAtLTsNCi0gICAgICAgIH0NCi0gICAgICAgIHNpemUgLS07DQotICAgICAgICBvZmZzZXQgKys7DQotICAgIH0NCi0gICAgcmV0dXJuIDE7DQotfQ0KLWludCBDUERGX0NNYXA6OkFwcGVuZENoYXIoRlhfTFBTVFIgc3RyLCBGWF9EV09SRCBjaGFyY29kZSkgY29uc3QNCi17DQotICAgIHN3aXRjaCAobV9Db2RpbmdTY2hlbWUpIHsNCi0gICAgICAgIGNhc2UgT25lQnl0ZToNCi0gICAgICAgICAgICBzdHJbMF0gPSAoRlhfQllURSljaGFyY29kZTsNCi0gICAgICAgICAgICByZXR1cm4gMTsNCi0gICAgICAgIGNhc2UgVHdvQnl0ZXM6DQotICAgICAgICAgICAgc3RyWzBdID0gKEZYX0JZVEUpKGNoYXJjb2RlIC8gMjU2KTsNCi0gICAgICAgICAgICBzdHJbMV0gPSAoRlhfQllURSkoY2hhcmNvZGUgJSAyNTYpOw0KLSAgICAgICAgICAgIHJldHVybiAyOw0KLSAgICAgICAgY2FzZSBNaXhlZFR3b0J5dGVzOg0KLSAgICAgICAgY2FzZSBNaXhlZEZvdXJCeXRlczoNCi0gICAgICAgICAgICBpZiAoY2hhcmNvZGUgPCAweDEwMCkgew0KLSAgICAgICAgICAgICAgICBfQ01hcF9Db2RlUmFuZ2UqIHBSYW5nZXMgPSAoX0NNYXBfQ29kZVJhbmdlKiltX3BMZWFkaW5nQnl0ZXM7DQotICAgICAgICAgICAgICAgIGludCBpU2l6ZSA9IF9HZXRDaGFyU2l6ZShjaGFyY29kZSwgcFJhbmdlcywgbV9uQ29kZVJhbmdlcyk7DQotICAgICAgICAgICAgICAgIGlmIChpU2l6ZSA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICBpU2l6ZSA9IDE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKGlTaXplID4gMSkgew0KLSAgICAgICAgICAgICAgICAgICAgRlhTWVNfbWVtc2V0MzIoc3RyLCAwLCBzaXplb2YoRlhfQllURSkgKiBpU2l6ZSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgc3RyW2lTaXplIC0gMV0gPSAoRlhfQllURSljaGFyY29kZTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIGlTaXplOw0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhcmNvZGUgPCAweDEwMDAwKSB7DQotICAgICAgICAgICAgICAgIHN0clswXSA9IChGWF9CWVRFKShjaGFyY29kZSA+PiA4KTsNCi0gICAgICAgICAgICAgICAgc3RyWzFdID0gKEZYX0JZVEUpY2hhcmNvZGU7DQotICAgICAgICAgICAgICAgIHJldHVybiAyOw0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhcmNvZGUgPCAweDEwMDAwMDApIHsNCi0gICAgICAgICAgICAgICAgc3RyWzBdID0gKEZYX0JZVEUpKGNoYXJjb2RlID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgc3RyWzFdID0gKEZYX0JZVEUpKGNoYXJjb2RlID4+IDgpOw0KLSAgICAgICAgICAgICAgICBzdHJbMl0gPSAoRlhfQllURSljaGFyY29kZTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIDM7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgc3RyWzBdID0gKEZYX0JZVEUpKGNoYXJjb2RlID4+IDI0KTsNCi0gICAgICAgICAgICAgICAgc3RyWzFdID0gKEZYX0JZVEUpKGNoYXJjb2RlID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgc3RyWzJdID0gKEZYX0JZVEUpKGNoYXJjb2RlID4+IDgpOw0KLSAgICAgICAgICAgICAgICBzdHJbM10gPSAoRlhfQllURSljaGFyY29kZTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIDQ7DQotICAgICAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiAwOw0KLX0NCi1DUERGX0NJRDJVbmljb2RlTWFwOjpDUERGX0NJRDJVbmljb2RlTWFwKCkNCi17DQotICAgIG1fRW1iZWRkZWRDb3VudCA9IDA7DQotI2lmbmRlZiBfRlBERkFQSV9NSU5JXw0KLSAgICBtX3BFeHRlcm5hbE1hcCA9IE5VTEw7DQotI2VuZGlmDQotfQ0KLUNQREZfQ0lEMlVuaWNvZGVNYXA6On5DUERGX0NJRDJVbmljb2RlTWFwKCkNCi17DQotI2lmbmRlZiBfRlBERkFQSV9NSU5JXw0KLSAgICBpZiAobV9wRXh0ZXJuYWxNYXApIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BFeHRlcm5hbE1hcDsNCi0gICAgfQ0KLSNlbmRpZg0KLX0NCi1GWF9CT09MIENQREZfQ0lEMlVuaWNvZGVNYXA6OkluaXRpYWxpemUoKQ0KLXsNCi0jaWZuZGVmIF9GUERGQVBJX01JTklfDQotICAgIG1fcEV4dGVybmFsTWFwID0gRlhfTkVXIENQREZfRlhNUDsNCi0jZW5kaWYNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ1BERl9DSUQyVW5pY29kZU1hcDo6SXNMb2FkZWQoKQ0KLXsNCi0jaWZkZWYgX0ZQREZBUElfTUlOSV8NCi0gICAgcmV0dXJuIG1fRW1iZWRkZWRDb3VudCAhPSAwOw0KLSNlbHNlDQotICAgIHJldHVybiBtX0VtYmVkZGVkQ291bnQgIT0gMCB8fCAobV9wRXh0ZXJuYWxNYXAgIT0gTlVMTCAmJiBtX3BFeHRlcm5hbE1hcC0+SXNMb2FkZWQoKSk7DQotI2VuZGlmDQotfQ0KLUZYX1dDSEFSIENQREZfQ0lEMlVuaWNvZGVNYXA6OlVuaWNvZGVGcm9tQ0lEKEZYX1dPUkQgQ0lEKQ0KLXsNCi0gICAgaWYgKG1fQ2hhcnNldCA9PSBDSURTRVRfVU5JQ09ERSkgew0KLSAgICAgICAgcmV0dXJuIENJRDsNCi0gICAgfQ0KLSAgICBpZiAoQ0lEIDwgbV9FbWJlZGRlZENvdW50KSB7DQotICAgICAgICByZXR1cm4gbV9wRW1iZWRkZWRNYXBbQ0lEXTsNCi0gICAgfQ0KLSNpZmRlZiBfRlBERkFQSV9NSU5JXw0KLSAgICByZXR1cm4gMDsNCi0jZWxzZQ0KLSAgICBGWF9MUENCWVRFIHJlY29yZCA9IG1fcEV4dGVybmFsTWFwLT5HZXRSZWNvcmQoQ0lEKTsNCi0gICAgaWYgKHJlY29yZCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICByZXR1cm4gKihGWF9XT1JEKilyZWNvcmQ7DQotI2VuZGlmDQotfQ0KLXZvaWQgRlBERkFQSV9Mb2FkQ0lEMlVuaWNvZGVNYXAoaW50IGNoYXJzZXQsIGNvbnN0IEZYX1dPUkQqJiBwTWFwLCBGWF9EV09SRCYgY291bnQpOw0KLXZvaWQgQ1BERl9DSUQyVW5pY29kZU1hcDo6TG9hZChDUERGX0NNYXBNYW5hZ2VyKiBwTWdyLCBpbnQgY2hhcnNldCwgRlhfQk9PTCBiUHJvbXB0Q0pLKQ0KLXsNCi0gICAgbV9DaGFyc2V0ID0gY2hhcnNldDsNCi0gICAgRlBERkFQSV9Mb2FkQ0lEMlVuaWNvZGVNYXAoY2hhcnNldCwgbV9wRW1iZWRkZWRNYXAsIG1fRW1iZWRkZWRDb3VudCk7DQotICAgIGlmIChtX0VtYmVkZGVkQ291bnQpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSNpZm5kZWYgX0ZQREZBUElfTUlOSV8NCi0gICAgRlhfTFBWT0lEIHBQYWNrYWdlID0gcE1nci0+R2V0UGFja2FnZShiUHJvbXB0Q0pLKTsNCi0gICAgaWYgKHBQYWNrYWdlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX3BFeHRlcm5hbE1hcC0+TG9hZEZpbGUocFBhY2thZ2UsIEZYX0JTVFJDKCJDSURJbmZvXyIpICsgZ19DaGFyc2V0TmFtZXNbY2hhcnNldF0pOw0KLSNlbmRpZg0KLX0NCi0jaW5jbHVkZSAidHRnc3VidGFibGUuaCINCi1DUERGX0NJREZvbnQ6OkNQREZfQ0lERm9udCgpDQotew0KLSAgICBtX3BDTWFwID0gTlVMTDsNCi0gICAgbV9wQWxsb2NhdGVkQ01hcCA9IE5VTEw7DQotICAgIG1fcENJRDJVbmljb2RlTWFwID0gTlVMTDsNCi0gICAgbV9wQW5zaVdpZHRocyA9IE5VTEw7DQotICAgIG1fcENJRFRvR0lETWFwID0gTlVMTDsNCi0gICAgbV9iQ0lESXNHSUQgPSBGQUxTRTsNCi0gICAgbV9iQWRvYmVDb3VyaWVyU3RkID0gRkFMU0U7DQotICAgIG1fcFRUR1NVQlRhYmxlID0gTlVMTDsNCi0gICAgRlhTWVNfbWVtc2V0OChtX0NoYXJCQm94LCAweGZmLCAyNTYgKiBzaXplb2YoRlhfU01BTExfUkVDVCkpOw0KLX0NCi1DUERGX0NJREZvbnQ6On5DUERGX0NJREZvbnQoKQ0KLXsNCi0gICAgaWYgKG1fcEFuc2lXaWR0aHMpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wQW5zaVdpZHRocyk7DQotICAgIH0NCi0gICAgaWYgKG1fcEFsbG9jYXRlZENNYXApIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BBbGxvY2F0ZWRDTWFwOw0KLSAgICB9DQotICAgIGlmIChtX3BDSURUb0dJRE1hcCkgew0KLSAgICAgICAgZGVsZXRlIG1fcENJRFRvR0lETWFwOw0KLSAgICB9DQotICAgIGlmIChtX3BUVEdTVUJUYWJsZSkgew0KLSAgICAgICAgZGVsZXRlIG1fcFRUR1NVQlRhYmxlOw0KLSAgICB9DQotfQ0KLUZYX1dPUkQgQ1BERl9DSURGb250OjpDSURGcm9tQ2hhckNvZGUoRlhfRFdPUkQgY2hhcmNvZGUpIGNvbnN0DQotew0KLSAgICBpZiAobV9wQ01hcCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gKEZYX1dPUkQpY2hhcmNvZGU7DQotICAgIH0NCi0gICAgcmV0dXJuIG1fcENNYXAtPkNJREZyb21DaGFyQ29kZShjaGFyY29kZSk7DQotfQ0KLUZYX0JPT0wgQ1BERl9DSURGb250OjpJc1ZlcnRXcml0aW5nKCkgY29uc3QNCi17DQotICAgIHJldHVybiBtX3BDTWFwID8gbV9wQ01hcC0+SXNWZXJ0V3JpdGluZygpIDogRkFMU0U7DQotfQ0KLWV4dGVybiBGWF9EV09SRCBGUERGQVBJX0NoYXJDb2RlRnJvbUNJRChjb25zdCBGWENNQVBfQ01hcCogcE1hcCwgRlhfV09SRCBjaWQpOw0KLXN0YXRpYyBGWF9EV09SRCBfRW1iZWRkZWRDaGFyY29kZUZyb21Vbmljb2RlKGNvbnN0IEZYQ01BUF9DTWFwKiBwRW1iZWRNYXAsIGludCBjaGFyc2V0LCBGWF9XQ0hBUiB1bmljb2RlKQ0KLXsNCi0gICAgaWYgKGNoYXJzZXQgPD0gMCB8fCBjaGFyc2V0ID4gNCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgQ1BERl9Gb250R2xvYmFscyogcEZvbnRHbG9iYWxzID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRQYWdlTW9kdWxlKCktPkdldEZvbnRHbG9iYWxzKCk7DQotICAgIGNvbnN0IEZYX1dPUkQqIHBDb2RlcyA9IHBGb250R2xvYmFscy0+bV9FbWJlZGRlZFRvVW5pY29kZXNbY2hhcnNldF0ubV9wTWFwOw0KLSAgICBpZiAocENvZGVzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGludCBuQ29kZXMgPSBwRm9udEdsb2JhbHMtPm1fRW1iZWRkZWRUb1VuaWNvZGVzW2NoYXJzZXRdLm1fQ291bnQ7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkNvZGVzOyBpKyspIHsNCi0gICAgICAgIGlmIChwQ29kZXNbaV0gPT0gdW5pY29kZSkgew0KLSAgICAgICAgICAgIEZYX0RXT1JEIENoYXJDb2RlID0gRlBERkFQSV9DaGFyQ29kZUZyb21DSUQocEVtYmVkTWFwLCBpKTsNCi0gICAgICAgICAgICBpZiAoQ2hhckNvZGUgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuIENoYXJDb2RlOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiAwOw0KLX0NCi1zdGF0aWMgRlhfV0NIQVIgX0VtYmVkZGVkVW5pY29kZUZyb21DaGFyY29kZShjb25zdCBGWENNQVBfQ01hcCogcEVtYmVkTWFwLCBpbnQgY2hhcnNldCwgRlhfRFdPUkQgY2hhcmNvZGUpDQotew0KLSAgICBpZiAoY2hhcnNldCA8PSAwIHx8IGNoYXJzZXQgPiA0KSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBGWF9XT1JEIGNpZCA9IEZQREZBUElfQ0lERnJvbUNoYXJDb2RlKHBFbWJlZE1hcCwgY2hhcmNvZGUpOw0KLSAgICBpZiAoY2lkID09IDApIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIENQREZfRm9udEdsb2JhbHMqIHBGb250R2xvYmFscyA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UGFnZU1vZHVsZSgpLT5HZXRGb250R2xvYmFscygpOw0KLSAgICBjb25zdCBGWF9XT1JEKiBwQ29kZXMgPSBwRm9udEdsb2JhbHMtPm1fRW1iZWRkZWRUb1VuaWNvZGVzW2NoYXJzZXRdLm1fcE1hcDsNCi0gICAgaWYgKHBDb2RlcyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBpZiAoY2lkIDwgcEZvbnRHbG9iYWxzLT5tX0VtYmVkZGVkVG9Vbmljb2Rlc1tjaGFyc2V0XS5tX0NvdW50KSB7DQotICAgICAgICByZXR1cm4gcENvZGVzW2NpZF07DQotICAgIH0NCi0gICAgcmV0dXJuIDA7DQotfQ0KLUZYX1dDSEFSIENQREZfQ0lERm9udDo6X1VuaWNvZGVGcm9tQ2hhckNvZGUoRlhfRFdPUkQgY2hhcmNvZGUpIGNvbnN0DQotew0KLSAgICBzd2l0Y2ggKG1fcENNYXAtPm1fQ29kaW5nKSB7DQotICAgICAgICBjYXNlIENJRENPRElOR19VQ1MyOg0KLSAgICAgICAgY2FzZSBDSURDT0RJTkdfVVRGMTY6DQotICAgICAgICAgICAgcmV0dXJuIChGWF9XQ0hBUiljaGFyY29kZTsNCi0gICAgICAgIGNhc2UgQ0lEQ09ESU5HX0NJRDoNCi0gICAgICAgICAgICBpZiAobV9wQ0lEMlVuaWNvZGVNYXAgPT0gTlVMTCB8fCAhbV9wQ0lEMlVuaWNvZGVNYXAtPklzTG9hZGVkKCkpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybiBtX3BDSUQyVW5pY29kZU1hcC0+VW5pY29kZUZyb21DSUQoKEZYX1dPUkQpY2hhcmNvZGUpOw0KLSAgICB9DQotICAgIGlmICghbV9wQ01hcC0+SXNMb2FkZWQoKSB8fCBtX3BDSUQyVW5pY29kZU1hcCA9PSBOVUxMIHx8ICFtX3BDSUQyVW5pY29kZU1hcC0+SXNMb2FkZWQoKSkgew0KLSNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfDQotICAgICAgICBGWF9XQ0hBUiB1bmljb2RlOw0KLSAgICAgICAgaW50IGNoYXJzaXplID0gMTsNCi0gICAgICAgIGlmIChjaGFyY29kZSA+IDI1NSkgew0KLSAgICAgICAgICAgIGNoYXJjb2RlID0gKGNoYXJjb2RlICUgMjU2KSAqIDI1NiArIChjaGFyY29kZSAvIDI1Nik7DQotICAgICAgICAgICAgY2hhcnNpemUgPSAyOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW50IHJldCA9IEZYU1lTX011bHRpQnl0ZVRvV2lkZUNoYXIoZ19DaGFyc2V0Q1BzW21fcENNYXAtPm1fQ29kaW5nXSwgMCwgKEZYX0xQQ1NUUikmY2hhcmNvZGUsIGNoYXJzaXplLCAmdW5pY29kZSwgMSk7DQotICAgICAgICBpZiAocmV0ICE9IDEpIHsNCi0gICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiB1bmljb2RlOw0KLSNlbmRpZg0KLSAgICAgICAgaWYgKG1fcENNYXAtPm1fcEVtYmVkTWFwKSB7DQotICAgICAgICAgICAgcmV0dXJuIF9FbWJlZGRlZFVuaWNvZGVGcm9tQ2hhcmNvZGUobV9wQ01hcC0+bV9wRW1iZWRNYXAsIG1fcENNYXAtPm1fQ2hhcnNldCwgY2hhcmNvZGUpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wQ0lEMlVuaWNvZGVNYXAtPlVuaWNvZGVGcm9tQ0lEKENJREZyb21DaGFyQ29kZShjaGFyY29kZSkpOw0KLX0NCi1GWF9EV09SRCBDUERGX0NJREZvbnQ6Ol9DaGFyQ29kZUZyb21Vbmljb2RlKEZYX1dDSEFSIHVuaWNvZGUpIGNvbnN0DQotew0KLSAgICBzd2l0Y2ggKG1fcENNYXAtPm1fQ29kaW5nKSB7DQotICAgICAgICBjYXNlIENJRENPRElOR19VTktOT1dOOg0KLSAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgY2FzZSBDSURDT0RJTkdfVUNTMjoNCi0gICAgICAgIGNhc2UgQ0lEQ09ESU5HX1VURjE2Og0KLSAgICAgICAgICAgIHJldHVybiB1bmljb2RlOw0KLSAgICAgICAgY2FzZSBDSURDT0RJTkdfQ0lEOiB7DQotICAgICAgICAgICAgICAgIGlmIChtX3BDSUQyVW5pY29kZU1hcCA9PSBOVUxMIHx8ICFtX3BDSUQyVW5pY29kZU1hcC0+SXNMb2FkZWQoKSkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgRlhfRFdPUkQgQ0lEID0gMDsNCi0gICAgICAgICAgICAgICAgd2hpbGUgKENJRCA8IDY1NTM2KSB7DQotICAgICAgICAgICAgICAgICAgICBGWF9XQ0hBUiB0aGlzX3VuaWNvZGUgPSBtX3BDSUQyVW5pY29kZU1hcC0+VW5pY29kZUZyb21DSUQoKEZYX1dPUkQpQ0lEKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzX3VuaWNvZGUgPT0gdW5pY29kZSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDSUQ7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBDSUQgKys7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICB9DQotI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18NCi0gICAgRlhfQllURSBidWZmZXJbMzJdOw0KLSAgICBpbnQgcmV0ID0gRlhTWVNfV2lkZUNoYXJUb011bHRpQnl0ZShnX0NoYXJzZXRDUHNbbV9wQ01hcC0+bV9Db2RpbmddLCAwLCAmdW5pY29kZSwgMSwgKGNoYXIqKWJ1ZmZlciwgNCwgTlVMTCwgTlVMTCk7DQotICAgIGlmIChyZXQgPT0gMSkgew0KLSAgICAgICAgcmV0dXJuIGJ1ZmZlclswXTsNCi0gICAgfSBlbHNlIGlmIChyZXQgPT0gMikgew0KLSAgICAgICAgcmV0dXJuIGJ1ZmZlclswXSAqIDI1NiArIGJ1ZmZlclsxXTsNCi0gICAgfQ0KLSAgICByZXR1cm4gMDsNCi0jZW5kaWYNCi0gICAgaWYgKHVuaWNvZGUgPCAweDgwKSB7DQotICAgICAgICByZXR1cm4gKEZYX0RXT1JEKXVuaWNvZGU7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZiAobV9wQ01hcC0+bV9wRW1iZWRNYXApIHsNCi0gICAgICAgICAgICByZXR1cm4gX0VtYmVkZGVkQ2hhcmNvZGVGcm9tVW5pY29kZShtX3BDTWFwLT5tX3BFbWJlZE1hcCwgbV9wQ01hcC0+bV9DaGFyc2V0LCB1bmljb2RlKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICB9DQotICAgIH0NCi19DQotc3RhdGljIHZvaWQgRlRfVXNlQ0lEQ2hhcm1hcChGWEZUX0ZhY2UgZmFjZSwgaW50IGNvZGluZykNCi17DQotICAgIGludCBlbmNvZGluZzsNCi0gICAgc3dpdGNoIChjb2RpbmcpIHsNCi0gICAgICAgIGNhc2UgQ0lEQ09ESU5HX0dCOg0KLSAgICAgICAgICAgIGVuY29kaW5nID0gRlhGVF9FTkNPRElOR19HQjIzMTI7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIENJRENPRElOR19CSUc1Og0KLSAgICAgICAgICAgIGVuY29kaW5nID0gRlhGVF9FTkNPRElOR19CSUc1Ow0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBDSURDT0RJTkdfSklTOg0KLSAgICAgICAgICAgIGVuY29kaW5nID0gRlhGVF9FTkNPRElOR19TSklTOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBDSURDT0RJTkdfS09SRUE6DQotICAgICAgICAgICAgZW5jb2RpbmcgPSBGWEZUX0VOQ09ESU5HX0pPSEFCOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgZGVmYXVsdDoNCi0gICAgICAgICAgICBlbmNvZGluZyA9IEZYRlRfRU5DT0RJTkdfVU5JQ09ERTsNCi0gICAgfQ0KLSAgICBpbnQgZXJyID0gRlhGVF9TZWxlY3RfQ2hhcm1hcChmYWNlLCBlbmNvZGluZyk7DQotICAgIGlmIChlcnIpIHsNCi0gICAgICAgIGVyciA9IEZYRlRfU2VsZWN0X0NoYXJtYXAoZmFjZSwgRlhGVF9FTkNPRElOR19VTklDT0RFKTsNCi0gICAgfQ0KLSAgICBpZiAoZXJyICYmIEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcHMoZmFjZSkpIHsNCi0gICAgICAgIEZYRlRfU2V0X0NoYXJtYXAoZmFjZSwgKkZYRlRfR2V0X0ZhY2VfQ2hhcm1hcHMoZmFjZSkpOw0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BERl9DSURGb250OjpfTG9hZCgpDQotew0KLSAgICBpZiAobV9wRm9udERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiU3VidHlwZSIpKSA9PSBGWF9CU1RSQygiVHJ1ZVR5cGUiKSkgew0KLSAgICAgICAgcmV0dXJuIExvYWRHQjIzMTIoKTsNCi0gICAgfQ0KLSAgICBDUERGX0FycmF5KiBwRm9udHMgPSBtX3BGb250RGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIkRlc2NlbmRhbnRGb250cyIpKTsNCi0gICAgaWYgKHBGb250cyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKHBGb250cy0+R2V0Q291bnQoKSAhPSAxKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwQ0lERm9udERpY3QgPSBwRm9udHMtPkdldERpY3QoMCk7DQotICAgIGlmIChwQ0lERm9udERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fQmFzZUZvbnQgPSBwQ0lERm9udERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiQmFzZUZvbnQiKSk7DQotICAgIGlmICgobV9CYXNlRm9udC5Db21wYXJlKCJDb3VyaWVyU3RkIikgPT0gMCB8fCBtX0Jhc2VGb250LkNvbXBhcmUoIkNvdXJpZXJTdGQtQm9sZCIpID09IDANCi0gICAgICAgICAgICB8fCBtX0Jhc2VGb250LkNvbXBhcmUoIkNvdXJpZXJTdGQtQm9sZE9ibGlxdWUiKSA9PSAwIHx8IG1fQmFzZUZvbnQuQ29tcGFyZSgiQ291cmllclN0ZC1PYmxpcXVlIikgPT0gMCkNCi0gICAgICAgICAgICAmJiAhSXNFbWJlZGRlZCgpKSB7DQotICAgICAgICBtX2JBZG9iZUNvdXJpZXJTdGQgPSBUUlVFOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcEZvbnREZXNjID0gcENJREZvbnREaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJGb250RGVzY3JpcHRvciIpKTsNCi0gICAgaWYgKHBGb250RGVzYykgew0KLSAgICAgICAgTG9hZEZvbnREZXNjcmlwdG9yKHBGb250RGVzYyk7DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QqIHBFbmNvZGluZyA9IG1fcEZvbnREaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkVuY29kaW5nIikpOw0KLSAgICBpZiAocEVuY29kaW5nID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVN0cmluZyBzdWJ0eXBlID0gcENJREZvbnREaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIlN1YnR5cGUiKSk7DQotICAgIG1fYlR5cGUxID0gRkFMU0U7DQotICAgIGlmIChzdWJ0eXBlID09IEZYX0JTVFJDKCJDSURGb250VHlwZTAiKSkgew0KLSAgICAgICAgbV9iVHlwZTEgPSBUUlVFOw0KLSAgICB9DQotICAgIGlmIChwRW5jb2RpbmctPkdldFR5cGUoKSA9PSBQREZPQkpfTkFNRSkgew0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY21hcCA9IHBFbmNvZGluZy0+R2V0U3RyaW5nKCk7DQotICAgICAgICBtX3BDTWFwID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRQYWdlTW9kdWxlKCktPkdldEZvbnRHbG9iYWxzKCktPm1fQ01hcE1hbmFnZXIuR2V0UHJlZGVmaW5lZENNYXAoY21hcCwNCi0gICAgICAgICAgICAgICAgICBtX3BGb250RmlsZSAmJiBtX2JUeXBlMSk7DQotICAgIH0gZWxzZSBpZiAocEVuY29kaW5nLT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUkVBTSkgew0KLSAgICAgICAgbV9wQWxsb2NhdGVkQ01hcCA9IG1fcENNYXAgPSBGWF9ORVcgQ1BERl9DTWFwOw0KLSAgICAgICAgQ1BERl9TdHJlYW0qIHBTdHJlYW0gPSAoQ1BERl9TdHJlYW0qKXBFbmNvZGluZzsNCi0gICAgICAgIENQREZfU3RyZWFtQWNjIGFjYzsNCi0gICAgICAgIGFjYy5Mb2FkQWxsRGF0YShwU3RyZWFtLCBGQUxTRSk7DQotICAgICAgICBtX3BDTWFwLT5Mb2FkRW1iZWRkZWQoYWNjLkdldERhdGEoKSwgYWNjLkdldFNpemUoKSk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKG1fcENNYXAgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fQ2hhcnNldCA9IG1fcENNYXAtPm1fQ2hhcnNldDsNCi0gICAgaWYgKG1fQ2hhcnNldCA9PSBDSURTRVRfVU5LTk9XTikgew0KLSAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwQ0lESW5mbyA9IHBDSURGb250RGljdC0+R2V0RGljdChGWF9CU1RSQygiQ0lEU3lzdGVtSW5mbyIpKTsNCi0gICAgICAgIGlmIChwQ0lESW5mbykgew0KLSAgICAgICAgICAgIG1fQ2hhcnNldCA9IF9DaGFyc2V0RnJvbU9yZGVyaW5nKHBDSURJbmZvLT5HZXRTdHJpbmcoRlhfQlNUUkMoIk9yZGVyaW5nIikpKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAobV9DaGFyc2V0ICE9IENJRFNFVF9VTktOT1dOKQ0KLSAgICAgICAgbV9wQ0lEMlVuaWNvZGVNYXAgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldFBhZ2VNb2R1bGUoKS0+R2V0Rm9udEdsb2JhbHMoKS0+bV9DTWFwTWFuYWdlci5HZXRDSUQyVW5pY29kZU1hcChtX0NoYXJzZXQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcEZvbnRGaWxlID09IE5VTEwgJiYgKG1fcENNYXAtPm1fQ29kaW5nID09IENJRENPRElOR19DSUQgfHwgcENJREZvbnREaWN0LT5LZXlFeGlzdChGWF9CU1RSQygiVyIpKSkpOw0KLSAgICBpZiAobV9Gb250LkdldEZhY2UoKSkgew0KLSAgICAgICAgaWYgKG1fYlR5cGUxKSB7DQotICAgICAgICAgICAgRlhGVF9TZWxlY3RfQ2hhcm1hcChtX0ZvbnQuR2V0RmFjZSgpLCBGWEZUX0VOQ09ESU5HX1VOSUNPREUpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBGVF9Vc2VDSURDaGFybWFwKG1fRm9udC5HZXRGYWNlKCksIG1fcENNYXAtPm1fQ29kaW5nKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX0RlZmF1bHRXaWR0aCA9IHBDSURGb250RGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiRFciKSwgMTAwMCk7DQotICAgIENQREZfQXJyYXkqIHBXaWR0aEFycmF5ID0gcENJREZvbnREaWN0LT5HZXRBcnJheShGWF9CU1RSQygiVyIpKTsNCi0gICAgaWYgKHBXaWR0aEFycmF5KSB7DQotICAgICAgICBMb2FkTWV0cmljc0FycmF5KHBXaWR0aEFycmF5LCBtX1dpZHRoTGlzdCwgMSk7DQotICAgIH0NCi0gICAgaWYgKCFJc0VtYmVkZGVkKCkpIHsNCi0gICAgICAgIExvYWRTdWJzdEZvbnQoKTsNCi0gICAgfQ0KLSAgICBpZiAoMSkgew0KLSAgICAgICAgaWYgKG1fcEZvbnRGaWxlIHx8IChHZXRTdWJzdEZvbnQoKS0+bV9TdWJzdEZsYWdzICYgRlhGT05UX1NVQlNUX0VYQUNUKSkgew0KLSAgICAgICAgICAgIENQREZfT2JqZWN0KiBwbWFwID0gcENJREZvbnREaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkNJRFRvR0lETWFwIikpOw0KLSAgICAgICAgICAgIGlmIChwbWFwKSB7DQotICAgICAgICAgICAgICAgIGlmIChwbWFwLT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUkVBTSkgew0KLSAgICAgICAgICAgICAgICAgICAgbV9wQ0lEVG9HSURNYXAgPSBGWF9ORVcgQ1BERl9TdHJlYW1BY2M7DQotICAgICAgICAgICAgICAgICAgICBtX3BDSURUb0dJRE1hcC0+TG9hZEFsbERhdGEoKENQREZfU3RyZWFtKilwbWFwLCBGQUxTRSk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocG1hcC0+R2V0U3RyaW5nKCkgPT0gRlhfQlNUUkMoIklkZW50aXR5IikpIHsNCi0jaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfDQotICAgICAgICAgICAgICAgICAgICBpZiAobV9wRm9udEZpbGUpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2JDSURJc0dJRCA9IFRSVUU7DQotICAgICAgICAgICAgICAgICAgICB9DQotI2Vsc2UNCi0gICAgICAgICAgICAgICAgICAgIG1fYkNJRElzR0lEID0gVFJVRTsNCi0jZW5kaWYNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDaGVja0ZvbnRNZXRyaWNzKCk7DQotICAgIGlmIChJc1ZlcnRXcml0aW5nKCkpIHsNCi0gICAgICAgIHBXaWR0aEFycmF5ID0gcENJREZvbnREaWN0LT5HZXRBcnJheShGWF9CU1RSQygiVzIiKSk7DQotICAgICAgICBpZiAocFdpZHRoQXJyYXkpIHsNCi0gICAgICAgICAgICBMb2FkTWV0cmljc0FycmF5KHBXaWR0aEFycmF5LCBtX1ZlcnRNZXRyaWNzLCAzKTsNCi0gICAgICAgIH0NCi0gICAgICAgIENQREZfQXJyYXkqIHBEZWZhdWx0QXJyYXkgPSBwQ0lERm9udERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJEVzIiKSk7DQotICAgICAgICBpZiAocERlZmF1bHRBcnJheSkgew0KLSAgICAgICAgICAgIG1fRGVmYXVsdFZZID0gcERlZmF1bHRBcnJheS0+R2V0SW50ZWdlcigwKTsNCi0gICAgICAgICAgICBtX0RlZmF1bHRXMSA9IHBEZWZhdWx0QXJyYXktPkdldEludGVnZXIoMSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIG1fRGVmYXVsdFZZID0gODgwOw0KLSAgICAgICAgICAgIG1fRGVmYXVsdFcxID0gLTEwMDA7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0ZMT0FUIF9DSURUcmFuc2Zvcm1Ub0Zsb2F0KEZYX0JZVEUgY2gpDQotew0KLSAgICBpZiAoY2ggPCAxMjgpIHsNCi0gICAgICAgIHJldHVybiBjaCAqIDEuMGYgLyAxMjc7DQotICAgIH0NCi0gICAgcmV0dXJuICgtMjU1ICsgY2gpICogMS4wZiAvIDEyNzsNCi19DQotdm9pZCBDUERGX0NJREZvbnQ6OkdldENoYXJCQm94KEZYX0RXT1JEIGNoYXJjb2RlLCBGWF9SRUNUJiByZWN0LCBpbnQgbGV2ZWwpDQotew0KLSAgICBpZiAoY2hhcmNvZGUgPCAyNTYgJiYgbV9DaGFyQkJveFtjaGFyY29kZV0uUmlnaHQgIT0gLTEpIHsNCi0gICAgICAgIHJlY3QuYm90dG9tID0gbV9DaGFyQkJveFtjaGFyY29kZV0uQm90dG9tOw0KLSAgICAgICAgcmVjdC5sZWZ0ID0gbV9DaGFyQkJveFtjaGFyY29kZV0uTGVmdDsNCi0gICAgICAgIHJlY3QucmlnaHQgPSBtX0NoYXJCQm94W2NoYXJjb2RlXS5SaWdodDsNCi0gICAgICAgIHJlY3QudG9wID0gbV9DaGFyQkJveFtjaGFyY29kZV0uVG9wOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX0JPT0wgYlZlcnQgPSBGQUxTRTsNCi0gICAgaW50IGdseXBoX2luZGV4ID0gR2x5cGhGcm9tQ2hhckNvZGUoY2hhcmNvZGUsICZiVmVydCk7DQotICAgIGlmIChtX0ZvbnQubV9GYWNlID09IE5VTEwpIHsNCi0gICAgICAgIHJlY3QgPSBGWF9SRUNUKDAsIDAsIDAsIDApOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmVjdC5sZWZ0ID0gcmVjdC5ib3R0b20gPSByZWN0LnJpZ2h0ID0gcmVjdC50b3AgPSAwOw0KLSAgICAgICAgRlhGVF9GYWNlIGZhY2UgPSBtX0ZvbnQubV9GYWNlOw0KLSAgICAgICAgaWYgKEZYRlRfSXNfRmFjZV9Ucmlja3koZmFjZSkpIHsNCi0gICAgICAgICAgICBpbnQgZXJyID0gRlhGVF9Mb2FkX0dseXBoKGZhY2UsIGdseXBoX2luZGV4LCBGWEZUX0xPQURfSUdOT1JFX0dMT0JBTF9BRFZBTkNFX1dJRFRIKTsNCi0gICAgICAgICAgICBpZiAoIWVycikgew0KLSAgICAgICAgICAgICAgICBGWEZUX0JCb3ggY2JveDsNCi0gICAgICAgICAgICAgICAgRlhGVF9HbHlwaCBnbHlwaDsNCi0gICAgICAgICAgICAgICAgZXJyID0gRlhGVF9HZXRfR2x5cGgoKChGWEZUX0ZhY2UpZmFjZSktPmdseXBoLCAmZ2x5cGgpOw0KLSAgICAgICAgICAgICAgICBpZiAoIWVycikgew0KLSAgICAgICAgICAgICAgICAgICAgRlhGVF9HbHlwaF9HZXRfQ0JveChnbHlwaCwgRlhGVF9HTFlQSF9CQk9YX1BJWEVMUywgJmNib3gpOw0KLSAgICAgICAgICAgICAgICAgICAgaW50IHBpeGVsX3NpemVfeCA9ICgoRlhGVF9GYWNlKWZhY2UpLT5zaXplLT5tZXRyaWNzLnhfcHBlbTsNCi0gICAgICAgICAgICAgICAgICAgIGludAlwaXhlbF9zaXplX3kgPSAoKEZYRlRfRmFjZSlmYWNlKS0+c2l6ZS0+bWV0cmljcy55X3BwZW07DQotICAgICAgICAgICAgICAgICAgICBpZiAocGl4ZWxfc2l6ZV94ID09IDAgfHwgcGl4ZWxfc2l6ZV95ID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZWN0LmxlZnQgPSBjYm94LnhNaW47DQotICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5yaWdodCA9IGNib3gueE1heDsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZWN0LnRvcCA9IGNib3gueU1heDsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZWN0LmJvdHRvbSA9IGNib3gueU1pbjsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5sZWZ0ID0gY2JveC54TWluICogMTAwMCAvIHBpeGVsX3NpemVfeDsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZWN0LnJpZ2h0ID0gY2JveC54TWF4ICogMTAwMCAvIHBpeGVsX3NpemVfeDsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZWN0LnRvcCA9IGNib3gueU1heCAqIDEwMDAgLyBwaXhlbF9zaXplX3k7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBjYm94LnlNaW4gKiAxMDAwIC8gcGl4ZWxfc2l6ZV95Ow0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlY3QudG9wID4gRlhGVF9HZXRfRmFjZV9Bc2NlbmRlcihmYWNlKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QudG9wID0gRlhGVF9HZXRfRmFjZV9Bc2NlbmRlcihmYWNlKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGlmIChyZWN0LmJvdHRvbSA8IEZYRlRfR2V0X0ZhY2VfRGVzY2VuZGVyKGZhY2UpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBGWEZUX0dldF9GYWNlX0Rlc2NlbmRlcihmYWNlKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIEZYRlRfRG9uZV9HbHlwaChnbHlwaCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGludCBlcnIgPSBGWEZUX0xvYWRfR2x5cGgoZmFjZSwgZ2x5cGhfaW5kZXgsIEZYRlRfTE9BRF9OT19TQ0FMRSk7DQotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7DQotICAgICAgICAgICAgICAgIHJlY3QubGVmdCA9IFRUMlBERihGWEZUX0dldF9HbHlwaF9Ib3JpQmVhcmluZ1goZmFjZSksIGZhY2UpOw0KLSAgICAgICAgICAgICAgICByZWN0LnJpZ2h0ID0gVFQyUERGKEZYRlRfR2V0X0dseXBoX0hvcmlCZWFyaW5nWChmYWNlKSArIEZYRlRfR2V0X0dseXBoX1dpZHRoKGZhY2UpLCBmYWNlKTsNCi0gICAgICAgICAgICAgICAgcmVjdC50b3AgPSBUVDJQREYoRlhGVF9HZXRfR2x5cGhfSG9yaUJlYXJpbmdZKGZhY2UpLCBmYWNlKTsNCi0gICAgICAgICAgICAgICAgcmVjdC50b3AgKz0gcmVjdC50b3AgLyA2NDsNCi0gICAgICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBUVDJQREYoRlhGVF9HZXRfR2x5cGhfSG9yaUJlYXJpbmdZKGZhY2UpIC0gRlhGVF9HZXRfR2x5cGhfSGVpZ2h0KGZhY2UpLCBmYWNlKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKG1fcEZvbnRGaWxlID09IE5VTEwgJiYgbV9DaGFyc2V0ID09IENJRFNFVF9KQVBBTjEpIHsNCi0gICAgICAgIEZYX1dPUkQgQ0lEID0gQ0lERnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsNCi0gICAgICAgIEZYX0xQQ0JZVEUgcFRyYW5zZm9ybSA9IEdldENJRFRyYW5zZm9ybShDSUQpOw0KLSAgICAgICAgaWYgKHBUcmFuc2Zvcm0gJiYgIWJWZXJ0KSB7DQotICAgICAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXgoX0NJRFRyYW5zZm9ybVRvRmxvYXQocFRyYW5zZm9ybVswXSksIF9DSURUcmFuc2Zvcm1Ub0Zsb2F0KHBUcmFuc2Zvcm1bMV0pLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DSURUcmFuc2Zvcm1Ub0Zsb2F0KHBUcmFuc2Zvcm1bMl0pLCBfQ0lEVHJhbnNmb3JtVG9GbG9hdChwVHJhbnNmb3JtWzNdKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ0lEVHJhbnNmb3JtVG9GbG9hdChwVHJhbnNmb3JtWzRdKSAqIDEwMDAgLCBfQ0lEVHJhbnNmb3JtVG9GbG9hdChwVHJhbnNmb3JtWzVdKSAqIDEwMDApOw0KLSAgICAgICAgICAgIENGWF9GbG9hdFJlY3QgcmVjdF9mKHJlY3QpOw0KLSAgICAgICAgICAgIHJlY3RfZi5UcmFuc2Zvcm0oJm1hdHJpeCk7DQotICAgICAgICAgICAgcmVjdCA9IHJlY3RfZi5HZXRPdXR0ZXJSZWN0KCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKGNoYXJjb2RlIDwgMjU2KSB7DQotICAgICAgICBtX0NoYXJCQm94W2NoYXJjb2RlXS5Cb3R0b20gPSAoc2hvcnQpcmVjdC5ib3R0b207DQotICAgICAgICBtX0NoYXJCQm94W2NoYXJjb2RlXS5MZWZ0ID0gKHNob3J0KXJlY3QubGVmdDsNCi0gICAgICAgIG1fQ2hhckJCb3hbY2hhcmNvZGVdLlJpZ2h0ID0gKHNob3J0KXJlY3QucmlnaHQ7DQotICAgICAgICBtX0NoYXJCQm94W2NoYXJjb2RlXS5Ub3AgPSAoc2hvcnQpcmVjdC50b3A7DQotICAgIH0NCi19DQotaW50IENQREZfQ0lERm9udDo6R2V0Q2hhcldpZHRoRihGWF9EV09SRCBjaGFyY29kZSwgaW50IGxldmVsKQ0KLXsNCi0gICAgaWYgKG1fcEFuc2lXaWR0aHMgJiYgY2hhcmNvZGUgPCAweDgwKSB7DQotICAgICAgICByZXR1cm4gbV9wQW5zaVdpZHRoc1tjaGFyY29kZV07DQotICAgIH0NCi0gICAgRlhfV09SRCBjaWQgPSBDSURGcm9tQ2hhckNvZGUoY2hhcmNvZGUpOw0KLSAgICBpbnQgc2l6ZSA9IG1fV2lkdGhMaXN0LkdldFNpemUoKTsNCi0gICAgRlhfRFdPUkQqIGxpc3QgPSBtX1dpZHRoTGlzdC5HZXREYXRhKCk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSAzKSB7DQotICAgICAgICBpZiAoY2lkID49IGxpc3RbaV0gJiYgY2lkIDw9IGxpc3RbaSArIDFdKSB7DQotICAgICAgICAgICAgcmV0dXJuIChpbnQpbGlzdFtpICsgMl07DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIG1fRGVmYXVsdFdpZHRoOw0KLX0NCi1zaG9ydCBDUERGX0NJREZvbnQ6OkdldFZlcnRXaWR0aChGWF9XT1JEIENJRCkgY29uc3QNCi17DQotICAgIEZYX0RXT1JEIHZlcnRzaXplID0gbV9WZXJ0TWV0cmljcy5HZXRTaXplKCkgLyA1Ow0KLSAgICBpZiAodmVydHNpemUgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIG1fRGVmYXVsdFcxOw0KLSAgICB9DQotICAgIGNvbnN0IEZYX0RXT1JEKiBwVGFibGUgPSBtX1ZlcnRNZXRyaWNzLkdldERhdGEoKTsNCi0gICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHZlcnRzaXplOyBpICsrKQ0KLSAgICAgICAgaWYgKHBUYWJsZVtpICogNV0gPD0gQ0lEICYmIHBUYWJsZVtpICogNSArIDFdID49IENJRCkgew0KLSAgICAgICAgICAgIHJldHVybiAoc2hvcnQpKGludClwVGFibGVbaSAqIDUgKyAyXTsNCi0gICAgICAgIH0NCi0gICAgcmV0dXJuIG1fRGVmYXVsdFcxOw0KLX0NCi12b2lkIENQREZfQ0lERm9udDo6R2V0VmVydE9yaWdpbihGWF9XT1JEIENJRCwgc2hvcnQmIHZ4LCBzaG9ydCAmdnkpIGNvbnN0DQotew0KLSAgICBGWF9EV09SRCB2ZXJ0c2l6ZSA9IG1fVmVydE1ldHJpY3MuR2V0U2l6ZSgpIC8gNTsNCi0gICAgaWYgKHZlcnRzaXplKSB7DQotICAgICAgICBjb25zdCBGWF9EV09SRCogcFRhYmxlID0gbV9WZXJ0TWV0cmljcy5HZXREYXRhKCk7DQotICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgdmVydHNpemU7IGkgKyspDQotICAgICAgICAgICAgaWYgKHBUYWJsZVtpICogNV0gPD0gQ0lEICYmIHBUYWJsZVtpICogNSArIDFdID49IENJRCkgew0KLSAgICAgICAgICAgICAgICB2eCA9IChzaG9ydCkoaW50KXBUYWJsZVtpICogNSArIDNdOw0KLSAgICAgICAgICAgICAgICB2eSA9IChzaG9ydCkoaW50KXBUYWJsZVtpICogNSArIDRdOw0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLSAgICB9DQotICAgIEZYX0RXT1JEIGR3V2lkdGggPSBtX0RlZmF1bHRXaWR0aDsNCi0gICAgaW50IHNpemUgPSBtX1dpZHRoTGlzdC5HZXRTaXplKCk7DQotICAgIGNvbnN0IEZYX0RXT1JEKiBsaXN0ID0gbV9XaWR0aExpc3QuR2V0RGF0YSgpOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkgKz0gMykgew0KLSAgICAgICAgaWYgKENJRCA+PSBsaXN0W2ldICYmIENJRCA8PSBsaXN0W2kgKyAxXSkgew0KLSAgICAgICAgICAgIGR3V2lkdGggPSAoRlhfV09SRClsaXN0W2kgKyAyXTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICB2eCA9IChzaG9ydClkd1dpZHRoIC8gMjsNCi0gICAgdnkgPSAoc2hvcnQpbV9EZWZhdWx0Vlk7DQotfQ0KLWludAlDUERGX0NJREZvbnQ6OkdldEdseXBoSW5kZXgoRlhfRFdPUkQgdW5pY29kZSwgRlhfQk9PTCAqcFZlcnRHbHlwaCkNCi17DQotICAgIGlmIChwVmVydEdseXBoKSB7DQotICAgICAgICAqcFZlcnRHbHlwaCA9IEZBTFNFOw0KLSAgICB9DQotICAgIGludCBpbmRleCA9IEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgdW5pY29kZSApOw0KLSAgICBpZiAodW5pY29kZSA9PSAweDI1MDIpIHsNCi0gICAgICAgIHJldHVybiBpbmRleDsNCi0gICAgfQ0KLSAgICBpZiAoaW5kZXggJiYgSXNWZXJ0V3JpdGluZygpKSB7DQotICAgICAgICBpZiAobV9wVFRHU1VCVGFibGUpIHsNCi0gICAgICAgICAgICBUVF91aW50MzJfdCB2aW5kZXggPSAwOw0KLSAgICAgICAgICAgIG1fcFRUR1NVQlRhYmxlLT5HZXRWZXJ0aWNhbEdseXBoKGluZGV4LCAmdmluZGV4KTsNCi0gICAgICAgICAgICBpZiAodmluZGV4KSB7DQotICAgICAgICAgICAgICAgIGluZGV4ID0gdmluZGV4Ow0KLSAgICAgICAgICAgICAgICBpZiAocFZlcnRHbHlwaCkgew0KLSAgICAgICAgICAgICAgICAgICAgKnBWZXJ0R2x5cGggPSBUUlVFOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybiBpbmRleDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChOVUxMID09IG1fRm9udC5tX3BHc3ViRGF0YSkgew0KLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoID0gMDsNCi0gICAgICAgICAgICBpbnQgZXJyb3IgPSBGWEZUX0xvYWRfU2ZudF9UYWJsZSggbV9Gb250Lm1fRmFjZSwgRlRfTUFLRV9UQUcoJ0cnLCAnUycsICdVJywgJ0InKSwgMCwgTlVMTCwgJmxlbmd0aCk7DQotICAgICAgICAgICAgaWYgKCFlcnJvcikgew0KLSAgICAgICAgICAgICAgICBtX0ZvbnQubV9wR3N1YkRhdGEgPSAodW5zaWduZWQgY2hhciopRlhfQWxsb2MoRlhfQllURSwgbGVuZ3RoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpbnQgZXJyb3IgPSBGWEZUX0xvYWRfU2ZudF9UYWJsZSggbV9Gb250Lm1fRmFjZSwgRlRfTUFLRV9UQUcoJ0cnLCAnUycsICdVJywgJ0InKSwgMCwgbV9Gb250Lm1fcEdzdWJEYXRhLCBOVUxMKTsNCi0gICAgICAgIGlmICghZXJyb3IgJiYgbV9Gb250Lm1fcEdzdWJEYXRhKSB7DQotICAgICAgICAgICAgbV9wVFRHU1VCVGFibGUgPSBGWF9ORVcgQ0ZYX0NUVEdTVUJUYWJsZTsNCi0gICAgICAgICAgICBtX3BUVEdTVUJUYWJsZS0+TG9hZEdTVUJUYWJsZSgoRlRfQnl0ZXMpbV9Gb250Lm1fcEdzdWJEYXRhKTsNCi0gICAgICAgICAgICBUVF91aW50MzJfdCB2aW5kZXggPSAwOw0KLSAgICAgICAgICAgIG1fcFRUR1NVQlRhYmxlLT5HZXRWZXJ0aWNhbEdseXBoKGluZGV4LCAmdmluZGV4KTsNCi0gICAgICAgICAgICBpZiAodmluZGV4KSB7DQotICAgICAgICAgICAgICAgIGluZGV4ID0gdmluZGV4Ow0KLSAgICAgICAgICAgICAgICBpZiAocFZlcnRHbHlwaCkgew0KLSAgICAgICAgICAgICAgICAgICAgKnBWZXJ0R2x5cGggPSBUUlVFOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIGluZGV4Ow0KLSAgICB9DQotICAgIGlmIChwVmVydEdseXBoKSB7DQotICAgICAgICAqcFZlcnRHbHlwaCA9IEZBTFNFOw0KLSAgICB9DQotICAgIHJldHVybiBpbmRleDsNCi19DQotaW50IENQREZfQ0lERm9udDo6R2x5cGhGcm9tQ2hhckNvZGUoRlhfRFdPUkQgY2hhcmNvZGUsIEZYX0JPT0wgKnBWZXJ0R2x5cGgpDQotew0KLSAgICBpZiAocFZlcnRHbHlwaCkgew0KLSAgICAgICAgKnBWZXJ0R2x5cGggPSBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAobV9wRm9udEZpbGUgPT0gTlVMTCAmJiBtX3BDSURUb0dJRE1hcCA9PSBOVUxMKSB7DQotICAgICAgICBGWF9XT1JEIGNpZCA9IENJREZyb21DaGFyQ29kZShjaGFyY29kZSk7DQotICAgICAgICBGWF9XQ0hBUiB1bmljb2RlID0gMDsNCi0gICAgICAgIGlmIChtX2JDSURJc0dJRCkgew0KLSNpZiBfRlhNX1BMQVRGT1JNXyAhPSBfRlhNX1BMQVRGT1JNX0FQUExFXw0KLSAgICAgICAgICAgIHJldHVybiBjaWQ7DQotI2Vsc2UNCi0gICAgICAgICAgICBpZiAobV9GbGFncyAmIFBERkZPTlRfU1lNQk9MSUMpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNpZDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgdW5pX3N0ciA9IFVuaWNvZGVGcm9tQ2hhckNvZGUoY2hhcmNvZGUpOw0KLSAgICAgICAgICAgIGlmICh1bmlfc3RyLklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gY2lkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB1bmljb2RlID0gdW5pX3N0ci5HZXRBdCgwKTsNCi0jZW5kaWYNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYgKGNpZCAmJiBtX3BDSUQyVW5pY29kZU1hcCAmJiBtX3BDSUQyVW5pY29kZU1hcC0+SXNMb2FkZWQoKSkgew0KLSAgICAgICAgICAgICAgICB1bmljb2RlID0gbV9wQ0lEMlVuaWNvZGVNYXAtPlVuaWNvZGVGcm9tQ0lEKGNpZCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmICh1bmljb2RlID09IDApIHsNCi0gICAgICAgICAgICAgICAgdW5pY29kZSA9IF9Vbmljb2RlRnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKHVuaWNvZGUgPT0gMCAmJiAhKG1fRmxhZ3MgJiBQREZGT05UX1NZTUJPTElDKSkgew0KLSAgICAgICAgICAgICAgICB1bmljb2RlID0gVW5pY29kZUZyb21DaGFyQ29kZShjaGFyY29kZSkuR2V0QXQoMCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHVuaWNvZGUgPT0gMCkgew0KLSAgICAgICAgICAgIGlmICghbV9iQWRvYmVDb3VyaWVyU3RkKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBjaGFyY29kZSA9PSAwID8gLTEgOiAoaW50KWNoYXJjb2RlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjaGFyY29kZSArPSAzMTsNCi0gICAgICAgICAgICBpbnQgaW5kZXggPSAwLCBpQmFzZUVuY29kaW5nOw0KLSAgICAgICAgICAgIEZYX0JPT0wgYk1TVW5pY29kZSA9IEZUX1VzZVRUQ2hhcm1hcChtX0ZvbnQubV9GYWNlLCAzLCAxKTsNCi0gICAgICAgICAgICBGWF9CT09MIGJNYWNSb21hbiA9IEZBTFNFOw0KLSAgICAgICAgICAgIGlmICghYk1TVW5pY29kZSkgew0KLSAgICAgICAgICAgICAgICBiTWFjUm9tYW4gPSBGVF9Vc2VUVENoYXJtYXAobV9Gb250Lm1fRmFjZSwgMSwgMCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlCYXNlRW5jb2RpbmcgPSBQREZGT05UX0VOQ09ESU5HX1NUQU5EQVJEOw0KLSAgICAgICAgICAgIGlmIChiTVNVbmljb2RlKSB7DQotICAgICAgICAgICAgICAgIGlCYXNlRW5jb2RpbmcgPSBQREZGT05UX0VOQ09ESU5HX1dJTkFOU0k7DQotICAgICAgICAgICAgfSBlbHNlIGlmIChiTWFjUm9tYW4pIHsNCi0gICAgICAgICAgICAgICAgaUJhc2VFbmNvZGluZyA9IFBERkZPTlRfRU5DT0RJTkdfTUFDUk9NQU47DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIEZYX0xQQ1NUUiBuYW1lID0gR2V0QWRvYmVDaGFyTmFtZShpQmFzZUVuY29kaW5nLCBOVUxMLCBjaGFyY29kZSk7DQotICAgICAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gY2hhcmNvZGUgPT0gMCA/IC0xIDogKGludCljaGFyY29kZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgRlhfV09SRCB1bmljb2RlID0gUERGX1VuaWNvZGVGcm9tQWRvYmVOYW1lKG5hbWUpOw0KLSAgICAgICAgICAgIGlmICh1bmljb2RlKSB7DQotICAgICAgICAgICAgICAgIGlmIChiTVNVbmljb2RlKSB7DQotICAgICAgICAgICAgICAgICAgICBpbmRleCA9IEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgdW5pY29kZSk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYk1hY1JvbWFuKSB7DQotICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBtYWNjb2RlID0gRlRfQ2hhckNvZGVGcm9tVW5pY29kZShGWEZUX0VOQ09ESU5HX0FQUExFX1JPTUFOLCB1bmljb2RlKTsNCi0gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gIW1hY2NvZGUgPyBGWEZUX0dldF9OYW1lX0luZGV4KG1fRm9udC5tX0ZhY2UsIChjaGFyICopbmFtZSkgOiBGWEZUX0dldF9DaGFyX0luZGV4KG1fRm9udC5tX0ZhY2UsIG1hY2NvZGUpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgdW5pY29kZSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICByZXR1cm4gY2hhcmNvZGUgPT0gMCA/IC0xIDogKGludCljaGFyY29kZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGluZGV4ID09IDAgfHwgaW5kZXggPT0gMHhmZmZmKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBjaGFyY29kZSA9PSAwID8gLTEgOiAoaW50KWNoYXJjb2RlOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9DaGFyc2V0ID09IENJRFNFVF9KQVBBTjEpIHsNCi0gICAgICAgICAgICBpZiAodW5pY29kZSA9PSAnXFwnKSB7DQotICAgICAgICAgICAgICAgIHVuaWNvZGUgPSAnLyc7DQotICAgICAgICAgICAgfQ0KLSNpZiAhZGVmaW5lZChfRlBERkFQSV9NSU5JXykgJiYgX0ZYTV9QTEFURk9STV8gIT0gX0ZYTV9QTEFURk9STV9BUFBMRV8NCi0gICAgICAgICAgICBlbHNlIGlmICh1bmljb2RlID09IDB4YTUpIHsNCi0gICAgICAgICAgICAgICAgdW5pY29kZSA9IDB4NWM7DQotICAgICAgICAgICAgfQ0KLSNlbmRpZg0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fRm9udC5tX0ZhY2UgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiB1bmljb2RlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW50IGVyciA9IEZYRlRfU2VsZWN0X0NoYXJtYXAobV9Gb250Lm1fRmFjZSwgRlhGVF9FTkNPRElOR19VTklDT0RFKTsNCi0gICAgICAgIGlmIChlcnIgIT0gMCkgew0KLSAgICAgICAgICAgIGludCBpOw0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBGWEZUX0dldF9GYWNlX0NoYXJtYXBDb3VudChtX0ZvbnQubV9GYWNlKTsgaSArKykgew0KLSAgICAgICAgICAgICAgICBGWF9EV09SRCByZXQgPSBGVF9DaGFyQ29kZUZyb21Vbmljb2RlKEZYRlRfR2V0X0NoYXJtYXBfRW5jb2RpbmcoRlhGVF9HZXRfRmFjZV9DaGFybWFwcyhtX0ZvbnQubV9GYWNlKVtpXSksIChGWF9XQ0hBUiljaGFyY29kZSk7DQotICAgICAgICAgICAgICAgIGlmIChyZXQgPT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgRlhGVF9TZXRfQ2hhcm1hcChtX0ZvbnQubV9GYWNlLCBGWEZUX0dldF9GYWNlX0NoYXJtYXBzKG1fRm9udC5tX0ZhY2UpW2ldKTsNCi0gICAgICAgICAgICAgICAgdW5pY29kZSA9IChGWF9XQ0hBUilyZXQ7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoaSA9PSBGWEZUX0dldF9GYWNlX0NoYXJtYXBDb3VudChtX0ZvbnQubV9GYWNlKSAmJiBpKSB7DQotICAgICAgICAgICAgICAgIEZYRlRfU2V0X0NoYXJtYXAobV9Gb250Lm1fRmFjZSwgRlhGVF9HZXRfRmFjZV9DaGFybWFwcyhtX0ZvbnQubV9GYWNlKVswXSk7DQotICAgICAgICAgICAgICAgIHVuaWNvZGUgPSAoRlhfV0NIQVIpY2hhcmNvZGU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcChtX0ZvbnQubV9GYWNlKSkgew0KLSAgICAgICAgICAgIGludCBpbmRleCA9IEdldEdseXBoSW5kZXgodW5pY29kZSwgcFZlcnRHbHlwaCk7DQotICAgICAgICAgICAgaWYgKGluZGV4ID09IDApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gaW5kZXg7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gdW5pY29kZSA7DQotICAgIH0NCi0gICAgaWYgKG1fRm9udC5tX0ZhY2UgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIEZYX1dPUkQgY2lkID0gQ0lERnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsNCi0gICAgaWYgKG1fYlR5cGUxKSB7DQotICAgICAgICBpZiAoTlVMTCA9PSBtX3BDSURUb0dJRE1hcCkgew0KLSAgICAgICAgICAgIHJldHVybiBjaWQ7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZiAobV9wQ0lEVG9HSURNYXAgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIGlmIChtX3BGb250RmlsZSAmJiBtX3BDTWFwLT5tX3BNYXBwaW5nID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNpZDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKG1fcENNYXAtPm1fQ29kaW5nID09IENJRENPRElOR19VTktOT1dOIHx8IEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcChtX0ZvbnQubV9GYWNlKSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBjaWQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChGWEZUX0dldF9DaGFybWFwX0VuY29kaW5nKEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcChtX0ZvbnQubV9GYWNlKSkgPT0gRlhGVF9FTkNPRElOR19VTklDT0RFKSB7DQotICAgICAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIHVuaWNvZGVfc3RyID0gVW5pY29kZUZyb21DaGFyQ29kZShjaGFyY29kZSk7DQotICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3N0ci5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBjaGFyY29kZSA9IHVuaWNvZGVfc3RyLkdldEF0KDApOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gR2V0R2x5cGhJbmRleChjaGFyY29kZSwgcFZlcnRHbHlwaCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhfRFdPUkQgYnl0ZV9wb3MgPSBjaWQgKiAyOw0KLSAgICBpZiAoYnl0ZV9wb3MgKyAyID4gbV9wQ0lEVG9HSURNYXAtPkdldFNpemUoKSkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIEZYX0xQQ0JZVEUgcGRhdGEgPSBtX3BDSURUb0dJRE1hcC0+R2V0RGF0YSgpICsgYnl0ZV9wb3M7DQotICAgIHJldHVybiBwZGF0YVswXSAqIDI1NiArIHBkYXRhWzFdOw0KLX0NCi1GWF9EV09SRCBDUERGX0NJREZvbnQ6OkdldE5leHRDaGFyKEZYX0xQQ1NUUiBwU3RyaW5nLCBpbnQmIG9mZnNldCkgY29uc3QNCi17DQotICAgIHJldHVybiBtX3BDTWFwLT5HZXROZXh0Q2hhcihwU3RyaW5nLCBvZmZzZXQpOw0KLX0NCi1pbnQgQ1BERl9DSURGb250OjpHZXRDaGFyU2l6ZShGWF9EV09SRCBjaGFyY29kZSkgY29uc3QNCi17DQotICAgIHJldHVybiBtX3BDTWFwLT5HZXRDaGFyU2l6ZShjaGFyY29kZSk7DQotfQ0KLWludCBDUERGX0NJREZvbnQ6OkNvdW50Q2hhcihGWF9MUENTVFIgcFN0cmluZywgaW50IHNpemUpIGNvbnN0DQotew0KLSAgICByZXR1cm4gbV9wQ01hcC0+Q291bnRDaGFyKHBTdHJpbmcsIHNpemUpOw0KLX0NCi1pbnQgQ1BERl9DSURGb250OjpBcHBlbmRDaGFyKEZYX0xQU1RSIHN0ciwgRlhfRFdPUkQgY2hhcmNvZGUpIGNvbnN0DQotew0KLSAgICByZXR1cm4gbV9wQ01hcC0+QXBwZW5kQ2hhcihzdHIsIGNoYXJjb2RlKTsNCi19DQotRlhfQk9PTCBDUERGX0NJREZvbnQ6OklzVW5pY29kZUNvbXBhdGlibGUoKSBjb25zdA0KLXsNCi0gICAgaWYgKCFtX3BDTWFwLT5Jc0xvYWRlZCgpIHx8IG1fcENJRDJVbmljb2RlTWFwID09IE5VTEwgfHwgIW1fcENJRDJVbmljb2RlTWFwLT5Jc0xvYWRlZCgpKSB7DQotICAgICAgICByZXR1cm4gbV9wQ01hcC0+bV9Db2RpbmcgIT0gQ0lEQ09ESU5HX1VOS05PV047DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ1BERl9DSURGb250OjpJc0ZvbnRTdHlsZUZyb21DaGFyQ29kZShGWF9EV09SRCBjaGFyY29kZSkgY29uc3QNCi17DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi12b2lkIENQREZfQ0lERm9udDo6TG9hZFN1YnN0Rm9udCgpDQotew0KLSAgICBtX0ZvbnQuTG9hZFN1YnN0KG1fQmFzZUZvbnQsICFtX2JUeXBlMSwgbV9GbGFncywgbV9TdGVtViAqIDUsIG1fSXRhbGljQW5nbGUsIGdfQ2hhcnNldENQc1ttX0NoYXJzZXRdLCBJc1ZlcnRXcml0aW5nKCkpOw0KLX0NCi12b2lkIENQREZfQ0lERm9udDo6TG9hZE1ldHJpY3NBcnJheShDUERGX0FycmF5KiBwQXJyYXksIENGWF9EV29yZEFycmF5JiByZXN1bHQsIGludCBuRWxlbWVudHMpDQotew0KLSAgICBpbnQgd2lkdGhfc3RhdHVzID0gMDsNCi0gICAgaW50IGlDdXJFbGVtZW50ID0gMDsNCi0gICAgaW50IGZpcnN0X2NvZGUgPSAwLCBsYXN0X2NvZGU7DQotICAgIEZYX0RXT1JEIGNvdW50ID0gcEFycmF5LT5HZXRDb3VudCgpOw0KLSAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgY291bnQ7IGkgKyspIHsNCi0gICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gcEFycmF5LT5HZXRFbGVtZW50VmFsdWUoaSk7DQotICAgICAgICBpZiAocE9iaiA9PSBOVUxMKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAocE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgew0KLSAgICAgICAgICAgIGlmICh3aWR0aF9zdGF0dXMgIT0gMSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIENQREZfQXJyYXkqIHBBcnJheSA9IChDUERGX0FycmF5KilwT2JqOw0KLSAgICAgICAgICAgIEZYX0RXT1JEIGNvdW50ID0gcEFycmF5LT5HZXRDb3VudCgpOw0KLSAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgaiA9IDA7IGogPCBjb3VudDsgaiArPSBuRWxlbWVudHMpIHsNCi0gICAgICAgICAgICAgICAgcmVzdWx0LkFkZChmaXJzdF9jb2RlKTsNCi0gICAgICAgICAgICAgICAgcmVzdWx0LkFkZChmaXJzdF9jb2RlKTsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBuRWxlbWVudHM7IGsgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5BZGQocEFycmF5LT5HZXRJbnRlZ2VyKGogKyBrKSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZmlyc3RfY29kZSArKzsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgd2lkdGhfc3RhdHVzID0gMDsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYgKHdpZHRoX3N0YXR1cyA9PSAwKSB7DQotICAgICAgICAgICAgICAgIGZpcnN0X2NvZGUgPSBwT2JqLT5HZXRJbnRlZ2VyKCk7DQotICAgICAgICAgICAgICAgIHdpZHRoX3N0YXR1cyA9IDE7DQotICAgICAgICAgICAgfSBlbHNlIGlmICh3aWR0aF9zdGF0dXMgPT0gMSkgew0KLSAgICAgICAgICAgICAgICBsYXN0X2NvZGUgPSBwT2JqLT5HZXRJbnRlZ2VyKCk7DQotICAgICAgICAgICAgICAgIHdpZHRoX3N0YXR1cyA9IDI7DQotICAgICAgICAgICAgICAgIGlDdXJFbGVtZW50ID0gMDsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBpZiAoIWlDdXJFbGVtZW50KSB7DQotICAgICAgICAgICAgICAgICAgICByZXN1bHQuQWRkKGZpcnN0X2NvZGUpOw0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LkFkZChsYXN0X2NvZGUpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHJlc3VsdC5BZGQocE9iai0+R2V0SW50ZWdlcigpKTsNCi0gICAgICAgICAgICAgICAgaUN1ckVsZW1lbnQgKys7DQotICAgICAgICAgICAgICAgIGlmIChpQ3VyRWxlbWVudCA9PSBuRWxlbWVudHMpIHsNCi0gICAgICAgICAgICAgICAgICAgIHdpZHRoX3N0YXR1cyA9IDA7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi19DQotRlhfQk9PTCBDUERGX0NJREZvbnQ6OkxvYWRHQjIzMTIoKQ0KLXsNCi0gICAgbV9CYXNlRm9udCA9IG1fcEZvbnREaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIkJhc2VGb250IikpOw0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBGb250RGVzYyA9IG1fcEZvbnREaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJGb250RGVzY3JpcHRvciIpKTsNCi0gICAgaWYgKHBGb250RGVzYykgew0KLSAgICAgICAgTG9hZEZvbnREZXNjcmlwdG9yKHBGb250RGVzYyk7DQotICAgIH0NCi0gICAgbV9DaGFyc2V0ID0gQ0lEU0VUX0dCMTsNCi0gICAgbV9iVHlwZTEgPSBGQUxTRTsNCi0gICAgbV9wQ01hcCA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UGFnZU1vZHVsZSgpLT5HZXRGb250R2xvYmFscygpLT5tX0NNYXBNYW5hZ2VyLkdldFByZWRlZmluZWRDTWFwKA0KLSAgICAgICAgICAgICAgICAgIEZYX0JTVFJDKCJHQkstRVVDLUgiKSwgRkFMU0UpOw0KLSAgICBtX3BDSUQyVW5pY29kZU1hcCA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UGFnZU1vZHVsZSgpLT5HZXRGb250R2xvYmFscygpLT5tX0NNYXBNYW5hZ2VyLkdldENJRDJVbmljb2RlTWFwKG1fQ2hhcnNldCwgRkFMU0UpOw0KLSAgICBpZiAoIUlzRW1iZWRkZWQoKSkgew0KLSAgICAgICAgTG9hZFN1YnN0Rm9udCgpOw0KLSAgICB9DQotICAgIENoZWNrRm9udE1ldHJpY3MoKTsNCi0gICAgbV9EZWZhdWx0V2lkdGggPSAxMDAwOw0KLSAgICBtX3BBbnNpV2lkdGhzID0gRlhfQWxsb2MoRlhfV09SRCwgMTI4KTsNCi0gICAgRlhTWVNfbWVtc2V0MzIobV9wQW5zaVdpZHRocywgMCwgMTI4ICogc2l6ZW9mKEZYX1dPUkQpKTsNCi0gICAgZm9yIChpbnQgaSA9IDMyOyBpIDwgMTI3OyBpICsrKSB7DQotICAgICAgICBtX3BBbnNpV2lkdGhzW2ldID0gNTAwOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1jb25zdCBzdHJ1Y3QgX0NJRFRyYW5zZm9ybSB7DQotICAgIEZYX1dPUkQJCUNJRDsNCi0gICAgRlhfQllURQkJYSwgYiwgYywgZCwgZSwgZjsNCi19DQotSmFwYW4xX1ZlcnRDSURzW10gPSB7DQotICAgIHs5NywgMTI5LCAwLCAwLCAxMjcsIDU1LCAwfSwNCi0gICAgezc4ODcsIDEyNywgMCwgMCwgMTI3LCA3NiwgODl9LA0KLSAgICB7Nzg4OCwgMTI3LCAwLCAwLCAxMjcsIDc5LCA5NH0sDQotICAgIHs3ODg5LCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3ODkwLCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3ODkxLCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3ODkyLCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3ODkzLCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3ODk0LCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3ODk1LCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3ODk2LCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3ODk3LCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3ODk4LCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3ODk5LCAwLCAxMjksIDEyNywgMCwgMTcsIDEwNH0sDQotICAgIHs3OTAwLCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3OTAxLCAwLCAxMjksIDEyNywgMCwgMTcsIDEwNH0sDQotICAgIHs3OTAyLCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3OTAzLCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3OTA0LCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3OTA1LCAwLCAxMjksIDEyNywgMCwgMTcsIDExNH0sDQotICAgIHs3OTA2LCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3OTA3LCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3OTA4LCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3OTA5LCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3OTEwLCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3OTExLCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3OTEyLCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3OTEzLCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3OTE0LCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3OTE1LCAwLCAxMjksIDEyNywgMCwgMTcsIDExNH0sDQotICAgIHs3OTE2LCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3OTE3LCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sDQotICAgIHs3OTE4LCAxMjcsIDAsIDAsIDEyNywgMTgsIDI1fSwNCi0gICAgezc5MTksIDEyNywgMCwgMCwgMTI3LCAxOCwgMjV9LA0KLSAgICB7NzkyMCwgMTI3LCAwLCAwLCAxMjcsIDE4LCAyNX0sDQotICAgIHs3OTIxLCAxMjcsIDAsIDAsIDEyNywgMTgsIDI1fSwNCi0gICAgezc5MjIsIDEyNywgMCwgMCwgMTI3LCAxOCwgMjV9LA0KLSAgICB7NzkyMywgMTI3LCAwLCAwLCAxMjcsIDE4LCAyNX0sDQotICAgIHs3OTI0LCAxMjcsIDAsIDAsIDEyNywgMTgsIDI1fSwNCi0gICAgezc5MjUsIDEyNywgMCwgMCwgMTI3LCAxOCwgMjV9LA0KLSAgICB7NzkyNiwgMTI3LCAwLCAwLCAxMjcsIDE4LCAyNX0sDQotICAgIHs3OTI3LCAxMjcsIDAsIDAsIDEyNywgMTgsIDI1fSwNCi0gICAgezc5MjgsIDEyNywgMCwgMCwgMTI3LCAxOCwgMjV9LA0KLSAgICB7NzkyOSwgMTI3LCAwLCAwLCAxMjcsIDE4LCAyNX0sDQotICAgIHs3OTMwLCAxMjcsIDAsIDAsIDEyNywgMTgsIDI1fSwNCi0gICAgezc5MzEsIDEyNywgMCwgMCwgMTI3LCAxOCwgMjV9LA0KLSAgICB7NzkzMiwgMTI3LCAwLCAwLCAxMjcsIDE4LCAyNX0sDQotICAgIHs3OTMzLCAxMjcsIDAsIDAsIDEyNywgMTgsIDI1fSwNCi0gICAgezc5MzQsIDEyNywgMCwgMCwgMTI3LCAxOCwgMjV9LA0KLSAgICB7NzkzNSwgMTI3LCAwLCAwLCAxMjcsIDE4LCAyNX0sDQotICAgIHs3OTM2LCAxMjcsIDAsIDAsIDEyNywgMTgsIDI1fSwNCi0gICAgezc5MzcsIDEyNywgMCwgMCwgMTI3LCAxOCwgMjV9LA0KLSAgICB7NzkzOCwgMTI3LCAwLCAwLCAxMjcsIDE4LCAyNX0sDQotICAgIHs3OTM5LCAxMjcsIDAsIDAsIDEyNywgMTgsIDI1fSwNCi0gICAgezg3MjAsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3MjEsIDAsIDEyOSwgMTI3LCAwLCAxMywgMTI3fSwNCi0gICAgezg3MjIsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3MjMsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3MjQsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3MjUsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3MjYsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3MjcsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3MjgsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTE0fSwNCi0gICAgezg3MjksIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTE0fSwNCi0gICAgezg3MzAsIDAsIDEyOSwgMTI3LCAwLCAzOCwgMTA4fSwNCi0gICAgezg3MzEsIDAsIDEyOSwgMTI3LCAwLCAxMywgMTA4fSwNCi0gICAgezg3MzIsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3MzMsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3MzQsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3MzUsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3MzYsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3MzcsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3MzgsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3MzksIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NDAsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NDEsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NDIsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NDMsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NDQsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NDUsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NDYsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTE0fSwNCi0gICAgezg3NDcsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTE0fSwNCi0gICAgezg3NDgsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NDksIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NTAsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NTEsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NTIsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NTMsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NTQsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NTUsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NTYsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NTcsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NTgsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NTksIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NjAsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NjEsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NjIsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NjMsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NjQsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NjUsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NjYsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NjcsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NjgsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NjksIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NzAsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NzEsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NzIsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NzMsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NzQsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NzUsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NzYsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NzcsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NzgsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg3NzksIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTE0fSwNCi0gICAgezg3ODAsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3ODEsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTE0fSwNCi0gICAgezg3ODIsIDAsIDEyOSwgMTI3LCAwLCAxMywgMTE0fSwNCi0gICAgezg3ODMsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3ODQsIDAsIDEyOSwgMTI3LCAwLCAxMywgMTE0fSwNCi0gICAgezg3ODUsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3ODYsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3ODcsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3ODgsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3ODksIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3OTAsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3OTEsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3OTIsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3OTMsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3OTQsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3OTUsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3OTYsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3OTcsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3OTgsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg3OTksIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg4MDAsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg4MDEsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg4MDIsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg4MDMsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg4MDQsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg4MDUsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg4MDYsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg4MDcsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg4MDgsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg4MDksIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg4MTAsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwNCi0gICAgezg4MTEsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTE0fSwNCi0gICAgezg4MTIsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwNCi0gICAgezg4MTMsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTE0fSwNCi0gICAgezg4MTQsIDAsIDEyOSwgMTI3LCAwLCA3NiwgMTAyfSwNCi0gICAgezg4MTUsIDAsIDEyOSwgMTI3LCAwLCAxMywgMTIxfSwNCi0gICAgezg4MTYsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTE0fSwNCi0gICAgezg4MTcsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTI3fSwNCi0gICAgezg4MTgsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTE0fSwNCi0gICAgezg4MTksIDAsIDEyOSwgMTI3LCAwLCAyMTgsIDEwOH0sDQotfTsNCi1GWF9MUENCWVRFIENQREZfQ0lERm9udDo6R2V0Q0lEVHJhbnNmb3JtKEZYX1dPUkQgQ0lEKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fQ2hhcnNldCAhPSBDSURTRVRfSkFQQU4xIHx8IG1fcEZvbnRGaWxlICE9IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGludCBiZWdpbiA9IDA7DQotICAgIGludCBlbmQgPSBzaXplb2YgSmFwYW4xX1ZlcnRDSURzIC8gc2l6ZW9mKHN0cnVjdCBfQ0lEVHJhbnNmb3JtKSAtIDE7DQotICAgIHdoaWxlIChiZWdpbiA8PSBlbmQpIHsNCi0gICAgICAgIGludCBtaWRkbGUgPSAoYmVnaW4gKyBlbmQpIC8gMjsNCi0gICAgICAgIEZYX1dPUkQgbWlkZGxlY29kZSA9IEphcGFuMV9WZXJ0Q0lEc1ttaWRkbGVdLkNJRDsNCi0gICAgICAgIGlmIChtaWRkbGVjb2RlID4gQ0lEKSB7DQotICAgICAgICAgICAgZW5kID0gbWlkZGxlIC0gMTsNCi0gICAgICAgIH0gZWxzZSBpZiAobWlkZGxlY29kZSA8IENJRCkgew0KLSAgICAgICAgICAgIGJlZ2luID0gbWlkZGxlICsgMTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcmV0dXJuICZKYXBhbjFfVmVydENJRHNbbWlkZGxlXS5hOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfbW9kdWxlLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oIgorI2luY2x1ZGUgImZvbnRfaW50LmgiCisjaW5jbHVkZSAiLi4vZnBkZl9jbWFwcy9jbWFwX2ludC5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZS5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9mcmVldHlwZS5oIgorZXh0ZXJuIEZYX0RXT1JEIEZUX0NoYXJDb2RlRnJvbVVuaWNvZGUoaW50IGVuY29kaW5nLCBGWF9XQ0hBUiB1bmljb2RlKTsKK2V4dGVybiBGWF9MUFZPSUQgRlhGQ19Mb2FkUGFja2FnZShGWF9MUENTVFIgbmFtZSk7CitleHRlcm4gRlhfQk9PTCBGWEZDX0xvYWRGaWxlKEZYX0xQVk9JRCBwUGFja2FnZSwgRlhfTFBDU1RSIG5hbWUsIEZYX0xQQllURSYgcEJ1ZmZlciwgRlhfRFdPUkQmIHNpemUpOworZXh0ZXJuIHZvaWQgRlhGQ19DbG9zZVBhY2thZ2UoRlhfTFBWT0lEIHBQYWNrYWdlKTsKK2V4dGVybiBzaG9ydCBUVDJQREYoaW50IG0sIEZYRlRfRmFjZSBmYWNlKTsKK2V4dGVybiBGWF9CT09MIEZUX1VzZVRUQ2hhcm1hcChGWEZUX0ZhY2UgZmFjZSwgaW50IHBsYXRmb3JtX2lkLCBpbnQgZW5jb2RpbmdfaWQpOworZXh0ZXJuIEZYX0xQQ1NUUiBHZXRBZG9iZUNoYXJOYW1lKGludCBpQmFzZUVuY29kaW5nLCBjb25zdCBDRlhfQnl0ZVN0cmluZyogcENoYXJOYW1lcywgaW50IGNoYXJjb2RlKTsKK0NQREZfQ01hcE1hbmFnZXI6OkNQREZfQ01hcE1hbmFnZXIoKQoreworI2lmbmRlZiBfRlBERkFQSV9NSU5JXworICAgIG1fYlByb21wdGVkID0gRkFMU0U7CisgICAgbV9wUGFja2FnZSA9IE5VTEw7CisjZW5kaWYKKyAgICBGWFNZU19tZW1zZXQzMihtX0NJRDJVbmljb2RlTWFwcywgMCwgc2l6ZW9mIG1fQ0lEMlVuaWNvZGVNYXBzKTsKK30KK0NQREZfQ01hcE1hbmFnZXI6On5DUERGX0NNYXBNYW5hZ2VyKCkKK3sKKyAgICBEcm9wQWxsKEZBTFNFKTsKKyNpZm5kZWYgX0ZQREZBUElfTUlOSV8KKyAgICBpZiAobV9wUGFja2FnZSkgeworICAgICAgICBGWEZDX0Nsb3NlUGFja2FnZShtX3BQYWNrYWdlKTsKKyAgICB9CisjZW5kaWYKK30KKyNpZm5kZWYgX0ZQREZBUElfTUlOSV8KK0ZYX0xQVk9JRCBDUERGX0NNYXBNYW5hZ2VyOjpHZXRQYWNrYWdlKEZYX0JPT0wgYlByb21wdCkKK3sKKyNpZm5kZWYgRk9YSVRfQ0hST01FX0JVSUxECisgICAgaWYgKG1fcFBhY2thZ2UgPT0gTlVMTCkgeworICAgICAgICBDRlhfQnl0ZVN0cmluZyBmaWxlbmFtZSA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0TW9kdWxlRmlsZVBhdGgoQURESU5fTkFNRV9DSkssICJGUERGQ0pLLkJJTiIpOworICAgICAgICBtX3BQYWNrYWdlID0gRlhGQ19Mb2FkUGFja2FnZShmaWxlbmFtZSk7CisgICAgICAgIGlmIChiUHJvbXB0ICYmIG1fcFBhY2thZ2UgPT0gTlVMTCAmJiAhbV9iUHJvbXB0ZWQpIHsKKyAgICAgICAgICAgIG1fYlByb21wdGVkID0gVFJVRTsKKyAgICAgICAgICAgIGlmICghQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5Eb3dubG9hZE1vZHVsZShBRERJTl9OQU1FX0NKSykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcFBhY2thZ2UgPSBGWEZDX0xvYWRQYWNrYWdlKGZpbGVuYW1lKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBtX3BQYWNrYWdlOworfQorI2VuZGlmCitDUERGX0NNYXAqIENQREZfQ01hcE1hbmFnZXI6OkdldFByZWRlZmluZWRDTWFwKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lLCBGWF9CT09MIGJQcm9tcHRDSkspCit7CisgICAgQ1BERl9DTWFwKiBwQ01hcDsKKyAgICBpZiAobV9DTWFwcy5Mb29rdXAobmFtZSwgKEZYX0xQVk9JRCYpcENNYXApKSB7CisgICAgICAgIHJldHVybiBwQ01hcDsKKyAgICB9CisgICAgcENNYXAgPSBMb2FkUHJlZGVmaW5lZENNYXAobmFtZSwgYlByb21wdENKSyk7CisgICAgaWYgKG5hbWUuSXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybiBwQ01hcDsKKyAgICB9CisgICAgbV9DTWFwcy5TZXRBdChuYW1lLCBwQ01hcCk7CisgICAgcmV0dXJuIHBDTWFwOworfQorQ1BERl9DTWFwKiBDUERGX0NNYXBNYW5hZ2VyOjpMb2FkUHJlZGVmaW5lZENNYXAoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUsIEZYX0JPT0wgYlByb21wdENKSykKK3sKKyAgICBDUERGX0NNYXAqIHBDTWFwID0gRlhfTkVXIENQREZfQ01hcDsKKyAgICBGWF9MUENTVFIgcG5hbWUgPSBuYW1lOworICAgIGlmICgqcG5hbWUgPT0gJy8nKSB7CisgICAgICAgIHBuYW1lICsrOworICAgIH0KKyAgICBwQ01hcC0+TG9hZFByZWRlZmluZWQodGhpcywgcG5hbWUsIGJQcm9tcHRDSkspOworICAgIHJldHVybiBwQ01hcDsKK30KK2NvbnN0IEZYX0xQQ1NUUiBnX0NoYXJzZXROYW1lc1tdID0ge05VTEwsICJHQjEiLCAiQ05TMSIsICJKYXBhbjEiLCAiS29yZWExIiwgIlVDUyIsIE5VTEx9OworY29uc3QgaW50IGdfQ2hhcnNldENQc1tdID0gezAsIDkzNiwgOTUwLCA5MzIsIDk0OSwgMTIwMCwgMH07CitpbnQgX0NoYXJzZXRGcm9tT3JkZXJpbmcoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIE9yZGVyaW5nKQoreworICAgIGludCBjaGFyc2V0ID0gMTsKKyAgICB3aGlsZSAoZ19DaGFyc2V0TmFtZXNbY2hhcnNldF0gJiYgT3JkZXJpbmcgIT0gQ0ZYX0J5dGVTdHJpbmdDKGdfQ2hhcnNldE5hbWVzW2NoYXJzZXRdKSkgeworICAgICAgICBjaGFyc2V0ICsrOworICAgIH0KKyAgICBpZiAoZ19DaGFyc2V0TmFtZXNbY2hhcnNldF0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gQ0lEU0VUX1VOS05PV047CisgICAgfQorICAgIHJldHVybiBjaGFyc2V0OworfQordm9pZCBDUERGX0NNYXBNYW5hZ2VyOjpSZWxvYWRBbGwoKQoreworICAgIERyb3BBbGwoVFJVRSk7Cit9Cit2b2lkIENQREZfQ01hcE1hbmFnZXI6OkRyb3BBbGwoRlhfQk9PTCBiUmVsb2FkKQoreworICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fQ01hcHMuR2V0U3RhcnRQb3NpdGlvbigpOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgbmFtZTsKKyAgICAgICAgQ1BERl9DTWFwKiBwQ01hcDsKKyAgICAgICAgbV9DTWFwcy5HZXROZXh0QXNzb2MocG9zLCBuYW1lLCAoRlhfTFBWT0lEJilwQ01hcCk7CisgICAgICAgIGlmIChwQ01hcCA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYlJlbG9hZCkgeworICAgICAgICAgICAgcENNYXAtPkxvYWRQcmVkZWZpbmVkKHRoaXMsIG5hbWUsIEZBTFNFKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwQ01hcDsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemVvZiBtX0NJRDJVbmljb2RlTWFwcyAvIHNpemVvZihDUERGX0NJRDJVbmljb2RlTWFwKik7IGkgKyspIHsKKyAgICAgICAgQ1BERl9DSUQyVW5pY29kZU1hcCogcE1hcCA9IG1fQ0lEMlVuaWNvZGVNYXBzW2ldOworICAgICAgICBpZiAocE1hcCA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYlJlbG9hZCkgeworICAgICAgICAgICAgcE1hcC0+TG9hZCh0aGlzLCBpLCBGQUxTRSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZWxldGUgcE1hcDsKKyAgICAgICAgfQorICAgIH0KK30KK0NQREZfQ0lEMlVuaWNvZGVNYXAqIENQREZfQ01hcE1hbmFnZXI6OkdldENJRDJVbmljb2RlTWFwKGludCBjaGFyc2V0LCBGWF9CT09MIGJQcm9tcHRDSkspCit7CisgICAgaWYgKG1fQ0lEMlVuaWNvZGVNYXBzW2NoYXJzZXRdID09IE5VTEwpIHsKKyAgICAgICAgbV9DSUQyVW5pY29kZU1hcHNbY2hhcnNldF0gPSBMb2FkQ0lEMlVuaWNvZGVNYXAoY2hhcnNldCwgYlByb21wdENKSyk7CisgICAgfQorICAgIHJldHVybiBtX0NJRDJVbmljb2RlTWFwc1tjaGFyc2V0XTsKK30KK0NQREZfQ0lEMlVuaWNvZGVNYXAqIENQREZfQ01hcE1hbmFnZXI6OkxvYWRDSUQyVW5pY29kZU1hcChpbnQgY2hhcnNldCwgRlhfQk9PTCBiUHJvbXB0Q0pLKQoreworICAgIENQREZfQ0lEMlVuaWNvZGVNYXAqIHBNYXAgPSBGWF9ORVcgQ1BERl9DSUQyVW5pY29kZU1hcCgpOworICAgIGlmICghcE1hcC0+SW5pdGlhbGl6ZSgpKSB7CisgICAgICAgIGRlbGV0ZSBwTWFwOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcE1hcC0+TG9hZCh0aGlzLCBjaGFyc2V0LCBiUHJvbXB0Q0pLKTsKKyAgICByZXR1cm4gcE1hcDsKK30KK0NQREZfQ01hcFBhcnNlcjo6Q1BERl9DTWFwUGFyc2VyKCkKK3sKKyAgICBtX3BDTWFwID0gTlVMTDsKKyAgICBtX1N0YXR1cyA9IDA7CisgICAgbV9Db2RlU2VxID0gMDsKK30KK0ZYX0JPT0wJQ1BERl9DTWFwUGFyc2VyOjpJbml0aWFsaXplKENQREZfQ01hcCogcENNYXApCit7CisgICAgbV9wQ01hcCA9IHBDTWFwOworICAgIG1fU3RhdHVzID0gMDsKKyAgICBtX0NvZGVTZXEgPSAwOworICAgIG1fQWRkTWFwcy5Fc3RpbWF0ZVNpemUoMCwgMTAyNDApOworICAgIHJldHVybiBUUlVFOworfQorc3RhdGljIEZYX0RXT1JEIENNYXBfR2V0Q29kZShGWF9CU1RSIHdvcmQpCit7CisgICAgaW50IG51bSA9IDA7CisgICAgaWYgKHdvcmQuR2V0QXQoMCkgPT0gJzwnKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgd29yZC5HZXRMZW5ndGgoKTsgaSArKykgeworICAgICAgICAgICAgRlhfQllURSBkaWdpdCA9IHdvcmQuR2V0QXQoaSk7CisgICAgICAgICAgICBpZiAoZGlnaXQgPj0gJzAnICYmIGRpZ2l0IDw9ICc5JykgeworICAgICAgICAgICAgICAgIGRpZ2l0ID0gZGlnaXQgLSAnMCc7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGRpZ2l0ID49ICdhJyAmJiBkaWdpdCA8PSAnZicpIHsKKyAgICAgICAgICAgICAgICBkaWdpdCA9IGRpZ2l0IC0gJ2EnICsgMTA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGRpZ2l0ID49ICdBJyAmJiBkaWdpdCA8PSAnRicpIHsKKyAgICAgICAgICAgICAgICBkaWdpdCA9IGRpZ2l0IC0gJ0EnICsgMTA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBudW07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBudW0gPSBudW0gKiAxNiArIGRpZ2l0OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3b3JkLkdldExlbmd0aCgpOyBpICsrKSB7CisgICAgICAgICAgICBpZiAod29yZC5HZXRBdChpKSA8ICcwJyB8fCB3b3JkLkdldEF0KGkpID4gJzknKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG51bSA9IG51bSAqIDEwICsgd29yZC5HZXRBdChpKSAtICcwJzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVtOworfQorc3RhdGljIEZYX0JPT0wgX0NNYXBfR2V0Q29kZVJhbmdlKF9DTWFwX0NvZGVSYW5nZSYgcmFuZ2UsIEZYX0JTVFIgZmlyc3QsIEZYX0JTVFIgc2Vjb25kKQoreworICAgIGlmIChmaXJzdC5HZXRMZW5ndGgoKSA9PSAwIHx8IGZpcnN0LkdldEF0KDApICE9ICc8JykgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGludCBudW0gPSAwOworICAgIGludCBpOworICAgIGZvciAoaSA9IDE7IGkgPCBmaXJzdC5HZXRMZW5ndGgoKTsgaSArKykKKyAgICAgICAgaWYgKGZpcnN0LkdldEF0KGkpID09ICc+JykgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICByYW5nZS5tX0NoYXJTaXplID0gKGkgLSAxKSAvIDI7CisgICAgaWYgKHJhbmdlLm1fQ2hhclNpemUgPiA0KSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IHJhbmdlLm1fQ2hhclNpemU7IGkgKyspIHsKKyAgICAgICAgRlhfQllURSBkaWdpdDEgPSBmaXJzdC5HZXRBdChpICogMiArIDEpOworICAgICAgICBGWF9CWVRFIGRpZ2l0MiA9IGZpcnN0LkdldEF0KGkgKiAyICsgMik7CisgICAgICAgIEZYX0JZVEUgYnl0ZSA9IChkaWdpdDEgPj0gJzAnICYmIGRpZ2l0MSA8PSAnOScpID8gKGRpZ2l0MSAtICcwJykgOiAoKGRpZ2l0MSAmIDB4ZGYpIC0gJ0EnICsgMTApOworICAgICAgICBieXRlID0gYnl0ZSAqIDE2ICsgKChkaWdpdDIgPj0gJzAnICYmIGRpZ2l0MiA8PSAnOScpID8gKGRpZ2l0MiAtICcwJykgOiAoKGRpZ2l0MiAmIDB4ZGYpIC0gJ0EnICsgMTApKTsKKyAgICAgICAgcmFuZ2UubV9Mb3dlcltpXSA9IGJ5dGU7CisgICAgfQorICAgIEZYX0RXT1JEIHNpemUgPSBzZWNvbmQuR2V0TGVuZ3RoKCk7CisgICAgZm9yIChpID0gMDsgaSA8IHJhbmdlLm1fQ2hhclNpemU7IGkgKyspIHsKKyAgICAgICAgRlhfQllURSBkaWdpdDEgPSAoKEZYX0RXT1JEKWkgKiAyICsgMSA8IHNpemUpID8gc2Vjb25kLkdldEF0KChGWF9TVFJTSVpFKWkgKiAyICsgMSkgOiAwOworICAgICAgICBGWF9CWVRFIGRpZ2l0MiA9ICgoRlhfRFdPUkQpaSAqIDIgKyAyIDwgc2l6ZSkgPyBzZWNvbmQuR2V0QXQoKEZYX1NUUlNJWkUpaSAqIDIgKyAyKSA6IDA7CisgICAgICAgIEZYX0JZVEUgYnl0ZSA9IChkaWdpdDEgPj0gJzAnICYmIGRpZ2l0MSA8PSAnOScpID8gKGRpZ2l0MSAtICcwJykgOiAoKGRpZ2l0MSAmIDB4ZGYpIC0gJ0EnICsgMTApOworICAgICAgICBieXRlID0gYnl0ZSAqIDE2ICsgKChkaWdpdDIgPj0gJzAnICYmIGRpZ2l0MiA8PSAnOScpID8gKGRpZ2l0MiAtICcwJykgOiAoKGRpZ2l0MiAmIDB4ZGYpIC0gJ0EnICsgMTApKTsKKyAgICAgICAgcmFuZ2UubV9VcHBlcltpXSA9IGJ5dGU7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorc3RhdGljIENGWF9CeXRlU3RyaW5nIENNYXBfR2V0U3RyaW5nKEZYX0JTVFIgd29yZCkKK3sKKyAgICByZXR1cm4gd29yZC5NaWQoMSwgd29yZC5HZXRMZW5ndGgoKSAtIDIpOworfQordm9pZCBDUERGX0NNYXBQYXJzZXI6OlBhcnNlV29yZChGWF9CU1RSIHdvcmQpCit7CisgICAgaWYgKHdvcmQuSXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHdvcmQgPT0gRlhfQlNUUkMoImJlZ2luY2lkY2hhciIpKSB7CisgICAgICAgIG1fU3RhdHVzID0gMTsKKyAgICAgICAgbV9Db2RlU2VxID0gMDsKKyAgICB9IGVsc2UgaWYgKHdvcmQgPT0gRlhfQlNUUkMoImJlZ2luY2lkcmFuZ2UiKSkgeworICAgICAgICBtX1N0YXR1cyA9IDI7CisgICAgICAgIG1fQ29kZVNlcSA9IDA7CisgICAgfSBlbHNlIGlmICh3b3JkID09IEZYX0JTVFJDKCJlbmRjaWRyYW5nZSIpIHx8IHdvcmQgPT0gRlhfQlNUUkMoImVuZGNpZGNoYXIiKSkgeworICAgICAgICBtX1N0YXR1cyA9IDA7CisgICAgfSBlbHNlIGlmICh3b3JkID09IEZYX0JTVFJDKCIvV01vZGUiKSkgeworICAgICAgICBtX1N0YXR1cyA9IDY7CisgICAgfSBlbHNlIGlmICh3b3JkID09IEZYX0JTVFJDKCIvUmVnaXN0cnkiKSkgeworICAgICAgICBtX1N0YXR1cyA9IDM7CisgICAgfSBlbHNlIGlmICh3b3JkID09IEZYX0JTVFJDKCIvT3JkZXJpbmciKSkgeworICAgICAgICBtX1N0YXR1cyA9IDQ7CisgICAgfSBlbHNlIGlmICh3b3JkID09IEZYX0JTVFJDKCIvU3VwcGxlbWVudCIpKSB7CisgICAgICAgIG1fU3RhdHVzID0gNTsKKyAgICB9IGVsc2UgaWYgKHdvcmQgPT0gRlhfQlNUUkMoImJlZ2luY29kZXNwYWNlcmFuZ2UiKSkgeworICAgICAgICBtX1N0YXR1cyA9IDc7CisgICAgICAgIG1fQ29kZVNlcSA9IDA7CisgICAgfSBlbHNlIGlmICh3b3JkID09IEZYX0JTVFJDKCJ1c2VjbWFwIikpIHsKKyAgICB9IGVsc2UgaWYgKG1fU3RhdHVzID09IDEgfHwgbV9TdGF0dXMgPT0gMikgeworICAgICAgICBtX0NvZGVQb2ludHNbbV9Db2RlU2VxXSA9IENNYXBfR2V0Q29kZSh3b3JkKTsKKyAgICAgICAgbV9Db2RlU2VxICsrOworICAgICAgICBGWF9EV09SRCBTdGFydENvZGUsIEVuZENvZGU7CisgICAgICAgIEZYX1dPUkQgU3RhcnRDSUQ7CisgICAgICAgIGlmIChtX1N0YXR1cyA9PSAxKSB7CisgICAgICAgICAgICBpZiAobV9Db2RlU2VxIDwgMikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEVuZENvZGUgPSBTdGFydENvZGUgPSBtX0NvZGVQb2ludHNbMF07CisgICAgICAgICAgICBTdGFydENJRCA9IChGWF9XT1JEKW1fQ29kZVBvaW50c1sxXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX0NvZGVTZXEgPCAzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RhcnRDb2RlID0gbV9Db2RlUG9pbnRzWzBdOworICAgICAgICAgICAgRW5kQ29kZSA9IG1fQ29kZVBvaW50c1sxXTsKKyAgICAgICAgICAgIFN0YXJ0Q0lEID0gKEZYX1dPUkQpbV9Db2RlUG9pbnRzWzJdOworICAgICAgICB9CisgICAgICAgIGlmIChFbmRDb2RlIDwgMHgxMDAwMCkgeworICAgICAgICAgICAgZm9yIChGWF9EV09SRCBjb2RlID0gU3RhcnRDb2RlOyBjb2RlIDw9IEVuZENvZGU7IGNvZGUgKyspIHsKKyAgICAgICAgICAgICAgICBtX3BDTWFwLT5tX3BNYXBwaW5nW2NvZGVdID0gKEZYX1dPUkQpKFN0YXJ0Q0lEICsgY29kZSAtIFN0YXJ0Q29kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBGWF9EV09SRCBidWZbMl07CisgICAgICAgICAgICBidWZbMF0gPSBTdGFydENvZGU7CisgICAgICAgICAgICBidWZbMV0gPSAoKEVuZENvZGUgLSBTdGFydENvZGUpIDw8IDE2KSArIFN0YXJ0Q0lEOworICAgICAgICAgICAgbV9BZGRNYXBzLkFwcGVuZEJsb2NrKGJ1Ziwgc2l6ZW9mIGJ1Zik7CisgICAgICAgIH0KKyAgICAgICAgbV9Db2RlU2VxID0gMDsKKyAgICB9IGVsc2UgaWYgKG1fU3RhdHVzID09IDMpIHsKKyAgICAgICAgQ01hcF9HZXRTdHJpbmcod29yZCk7CisgICAgICAgIG1fU3RhdHVzID0gMDsKKyAgICB9IGVsc2UgaWYgKG1fU3RhdHVzID09IDQpIHsKKyAgICAgICAgbV9wQ01hcC0+bV9DaGFyc2V0ID0gX0NoYXJzZXRGcm9tT3JkZXJpbmcoQ01hcF9HZXRTdHJpbmcod29yZCkpOworICAgICAgICBtX1N0YXR1cyA9IDA7CisgICAgfSBlbHNlIGlmIChtX1N0YXR1cyA9PSA1KSB7CisgICAgICAgIENNYXBfR2V0Q29kZSh3b3JkKTsKKyAgICAgICAgbV9TdGF0dXMgPSAwOworICAgIH0gZWxzZSBpZiAobV9TdGF0dXMgPT0gNikgeworICAgICAgICBtX3BDTWFwLT5tX2JWZXJ0aWNhbCA9IENNYXBfR2V0Q29kZSh3b3JkKTsKKyAgICAgICAgbV9TdGF0dXMgPSAwOworICAgIH0gZWxzZSBpZiAobV9TdGF0dXMgPT0gNykgeworICAgICAgICBpZiAod29yZCA9PSBGWF9CU1RSQygiZW5kY29kZXNwYWNlcmFuZ2UiKSkgeworICAgICAgICAgICAgaW50IG5TZWdzID0gbV9Db2RlUmFuZ2VzLkdldFNpemUoKTsKKyAgICAgICAgICAgIGlmIChuU2VncyA+IDEpIHsKKyAgICAgICAgICAgICAgICBtX3BDTWFwLT5tX0NvZGluZ1NjaGVtZSA9IENQREZfQ01hcDo6TWl4ZWRGb3VyQnl0ZXM7CisgICAgICAgICAgICAgICAgbV9wQ01hcC0+bV9uQ29kZVJhbmdlcyA9IG5TZWdzOworICAgICAgICAgICAgICAgIG1fcENNYXAtPm1fcExlYWRpbmdCeXRlcyA9IEZYX0FsbG9jKEZYX0JZVEUsIG5TZWdzICogc2l6ZW9mKF9DTWFwX0NvZGVSYW5nZSkpOworICAgICAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcENNYXAtPm1fcExlYWRpbmdCeXRlcywgbV9Db2RlUmFuZ2VzLkdldERhdGEoKSwgblNlZ3MgKiBzaXplb2YoX0NNYXBfQ29kZVJhbmdlKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG5TZWdzID09IDEpIHsKKyAgICAgICAgICAgICAgICBtX3BDTWFwLT5tX0NvZGluZ1NjaGVtZSA9IChtX0NvZGVSYW5nZXNbMF0ubV9DaGFyU2l6ZSA9PSAyKSA/IENQREZfQ01hcDo6VHdvQnl0ZXMgOiBDUERGX0NNYXA6Ok9uZUJ5dGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX1N0YXR1cyA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAod29yZC5HZXRMZW5ndGgoKSA9PSAwIHx8IHdvcmQuR2V0QXQoMCkgIT0gJzwnKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fQ29kZVNlcSAlIDIpIHsKKyAgICAgICAgICAgICAgICBfQ01hcF9Db2RlUmFuZ2UgcmFuZ2U7CisgICAgICAgICAgICAgICAgaWYgKF9DTWFwX0dldENvZGVSYW5nZShyYW5nZSwgbV9MYXN0V29yZCwgd29yZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9Db2RlUmFuZ2VzLkFkZChyYW5nZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9Db2RlU2VxICsrOworICAgICAgICB9CisgICAgfQorICAgIG1fTGFzdFdvcmQgPSB3b3JkOworfQorQ1BERl9DTWFwOjpDUERGX0NNYXAoKQoreworICAgIG1fQ2hhcnNldCA9IENJRFNFVF9VTktOT1dOOworICAgIG1fQ29kaW5nID0gQ0lEQ09ESU5HX1VOS05PV047CisgICAgbV9Db2RpbmdTY2hlbWUgPSBUd29CeXRlczsKKyAgICBtX2JWZXJ0aWNhbCA9IDA7CisgICAgbV9iTG9hZGVkID0gRkFMU0U7CisgICAgbV9wTWFwcGluZyA9IE5VTEw7CisgICAgbV9wTGVhZGluZ0J5dGVzID0gTlVMTDsKKyAgICBtX3BBZGRNYXBwaW5nID0gTlVMTDsKKyAgICBtX3BFbWJlZE1hcCA9IE5VTEw7CisgICAgbV9wVXNlTWFwID0gTlVMTDsKKyAgICBtX25Db2RlUmFuZ2VzID0gMDsKK30KK0NQREZfQ01hcDo6fkNQREZfQ01hcCgpCit7CisgICAgaWYgKG1fcE1hcHBpbmcpIHsKKyAgICAgICAgRlhfRnJlZShtX3BNYXBwaW5nKTsKKyAgICB9CisgICAgaWYgKG1fcEFkZE1hcHBpbmcpIHsKKyAgICAgICAgRlhfRnJlZShtX3BBZGRNYXBwaW5nKTsKKyAgICB9CisgICAgaWYgKG1fcExlYWRpbmdCeXRlcykgeworICAgICAgICBGWF9GcmVlKG1fcExlYWRpbmdCeXRlcyk7CisgICAgfQorICAgIGlmIChtX3BVc2VNYXApIHsKKyAgICAgICAgZGVsZXRlIG1fcFVzZU1hcDsKKyAgICB9Cit9Cit2b2lkIENQREZfQ01hcDo6UmVsZWFzZSgpCit7CisgICAgaWYgKG1fUHJlZGVmaW5lZENNYXAuSXNFbXB0eSgpKSB7CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIH0KK30KK2NvbnN0IENQREZfUHJlZGVmaW5lZENNYXAgZ19QcmVkZWZpbmVkQ01hcHNbXSA9IHsKKyAgICB7ICJHQi1FVUMiLCBDSURTRVRfR0IxLCBDSURDT0RJTkdfR0IsIENQREZfQ01hcDo6TWl4ZWRUd29CeXRlcywgMSwgezB4YTEsIDB4ZmV9IH0sCisgICAgeyAiR0JwYy1FVUMiLCBDSURTRVRfR0IxLCBDSURDT0RJTkdfR0IsIENQREZfQ01hcDo6TWl4ZWRUd29CeXRlcywgMSwgezB4YTEsIDB4ZmN9IH0sCisgICAgeyAiR0JLLUVVQyIsIENJRFNFVF9HQjEsIENJRENPRElOR19HQiwgQ1BERl9DTWFwOjpNaXhlZFR3b0J5dGVzLCAxLCB7MHg4MSwgMHhmZX0gfSwKKyAgICB7ICJHQktwLUVVQyIsIENJRFNFVF9HQjEsIENJRENPRElOR19HQiwgQ1BERl9DTWFwOjpNaXhlZFR3b0J5dGVzLCAxLCB7MHg4MSwgMHhmZX0gfSwKKyAgICB7ICJHQksySy1FVUMiLCBDSURTRVRfR0IxLCBDSURDT0RJTkdfR0IsIENQREZfQ01hcDo6TWl4ZWRUd29CeXRlcywgMSwgezB4ODEsIDB4ZmV9IH0sCisgICAgeyAiR0JLMksiLCBDSURTRVRfR0IxLCBDSURDT0RJTkdfR0IsIENQREZfQ01hcDo6TWl4ZWRUd29CeXRlcywgMSwgezB4ODEsIDB4ZmV9IH0sCisgICAgeyAiVW5pR0ItVUNTMiIsIENJRFNFVF9HQjEsIENJRENPRElOR19VQ1MyLCBDUERGX0NNYXA6OlR3b0J5dGVzIH0sCisgICAgeyAiVW5pR0ItVVRGMTYiLCBDSURTRVRfR0IxLCBDSURDT0RJTkdfVVRGMTYsIENQREZfQ01hcDo6VHdvQnl0ZXMgfSwKKyAgICB7ICJCNXBjIiwgQ0lEU0VUX0NOUzEsIENJRENPRElOR19CSUc1LCBDUERGX0NNYXA6Ok1peGVkVHdvQnl0ZXMsIDEsIHsweGExLCAweGZjfSB9LAorICAgIHsgIkhLc2NzLUI1IiwgQ0lEU0VUX0NOUzEsIENJRENPRElOR19CSUc1LCBDUERGX0NNYXA6Ok1peGVkVHdvQnl0ZXMsIDEsIHsweDg4LCAweGZlfSB9LAorICAgIHsgIkVUZW4tQjUiLCBDSURTRVRfQ05TMSwgQ0lEQ09ESU5HX0JJRzUsIENQREZfQ01hcDo6TWl4ZWRUd29CeXRlcywgMSwgezB4YTEsIDB4ZmV9IH0sCisgICAgeyAiRVRlbm1zLUI1IiwgQ0lEU0VUX0NOUzEsIENJRENPRElOR19CSUc1LCBDUERGX0NNYXA6Ok1peGVkVHdvQnl0ZXMsIDEsIHsweGExLCAweGZlfSB9LAorICAgIHsgIlVuaUNOUy1VQ1MyIiwgQ0lEU0VUX0NOUzEsIENJRENPRElOR19VQ1MyLCBDUERGX0NNYXA6OlR3b0J5dGVzIH0sCisgICAgeyAiVW5pQ05TLVVURjE2IiwgQ0lEU0VUX0NOUzEsIENJRENPRElOR19VVEYxNiwgQ1BERl9DTWFwOjpUd29CeXRlcyB9LAorICAgIHsgIjgzcHYtUktTSiIsIENJRFNFVF9KQVBBTjEsIENJRENPRElOR19KSVMsIENQREZfQ01hcDo6TWl4ZWRUd29CeXRlcywgMiwgezB4ODEsIDB4OWYsIDB4ZTAsIDB4ZmN9IH0sCisgICAgeyAiOTBtcy1SS1NKIiwgQ0lEU0VUX0pBUEFOMSwgQ0lEQ09ESU5HX0pJUywgQ1BERl9DTWFwOjpNaXhlZFR3b0J5dGVzLCAyLCB7MHg4MSwgMHg5ZiwgMHhlMCwgMHhmY30gfSwKKyAgICB7ICI5MG1zcC1SS1NKIiwgQ0lEU0VUX0pBUEFOMSwgQ0lEQ09ESU5HX0pJUywgQ1BERl9DTWFwOjpNaXhlZFR3b0J5dGVzLCAyLCB7MHg4MSwgMHg5ZiwgMHhlMCwgMHhmY30gfSwKKyAgICB7ICI5MHB2LVJLU0oiLCBDSURTRVRfSkFQQU4xLCBDSURDT0RJTkdfSklTLCBDUERGX0NNYXA6Ok1peGVkVHdvQnl0ZXMsIDIsIHsweDgxLCAweDlmLCAweGUwLCAweGZjfSB9LAorICAgIHsgIkFkZC1SS1NKIiwgQ0lEU0VUX0pBUEFOMSwgQ0lEQ09ESU5HX0pJUywgQ1BERl9DTWFwOjpNaXhlZFR3b0J5dGVzLCAyLCB7MHg4MSwgMHg5ZiwgMHhlMCwgMHhmY30gfSwKKyAgICB7ICJFVUMiLCBDSURTRVRfSkFQQU4xLCBDSURDT0RJTkdfSklTLCBDUERGX0NNYXA6Ok1peGVkVHdvQnl0ZXMsIDIsIHsweDhlLCAweDhlLCAweGExLCAweGZlfSB9LAorICAgIHsgIkgiLCBDSURTRVRfSkFQQU4xLCBDSURDT0RJTkdfSklTLCBDUERGX0NNYXA6OlR3b0J5dGVzLCAxLCB7MHgyMSwgMHg3ZX0gfSwKKyAgICB7ICJWIiwgQ0lEU0VUX0pBUEFOMSwgQ0lEQ09ESU5HX0pJUywgQ1BERl9DTWFwOjpUd29CeXRlcywgMSwgezB4MjEsIDB4N2V9IH0sCisgICAgeyAiRXh0LVJLU0oiLCBDSURTRVRfSkFQQU4xLCBDSURDT0RJTkdfSklTLCBDUERGX0NNYXA6Ok1peGVkVHdvQnl0ZXMsIDIsIHsweDgxLCAweDlmLCAweGUwLCAweGZjfSB9LAorICAgIHsgIlVuaUpJUy1VQ1MyIiwgQ0lEU0VUX0pBUEFOMSwgQ0lEQ09ESU5HX1VDUzIsIENQREZfQ01hcDo6VHdvQnl0ZXMgfSwKKyAgICB7ICJVbmlKSVMtVUNTMi1IVyIsIENJRFNFVF9KQVBBTjEsIENJRENPRElOR19VQ1MyLCBDUERGX0NNYXA6OlR3b0J5dGVzIH0sCisgICAgeyAiVW5pSklTLVVURjE2IiwgQ0lEU0VUX0pBUEFOMSwgQ0lEQ09ESU5HX1VURjE2LCBDUERGX0NNYXA6OlR3b0J5dGVzIH0sCisgICAgeyAiS1NDLUVVQyIsIENJRFNFVF9LT1JFQTEsIENJRENPRElOR19LT1JFQSwgQ1BERl9DTWFwOjpNaXhlZFR3b0J5dGVzLCAxLCB7MHhhMSwgMHhmZX0gfSwKKyAgICB7ICJLU0Ntcy1VSEMiLCBDSURTRVRfS09SRUExLCBDSURDT0RJTkdfS09SRUEsIENQREZfQ01hcDo6TWl4ZWRUd29CeXRlcywgMSwgezB4ODEsIDB4ZmV9IH0sCisgICAgeyAiS1NDbXMtVUhDLUhXIiwgQ0lEU0VUX0tPUkVBMSwgQ0lEQ09ESU5HX0tPUkVBLCBDUERGX0NNYXA6Ok1peGVkVHdvQnl0ZXMsIDEsIHsweDgxLCAweGZlfSB9LAorICAgIHsgIktTQ3BjLUVVQyIsIENJRFNFVF9LT1JFQTEsIENJRENPRElOR19LT1JFQSwgQ1BERl9DTWFwOjpNaXhlZFR3b0J5dGVzLCAxLCB7MHhhMSwgMHhmZH0gfSwKKyAgICB7ICJVbmlLUy1VQ1MyIiwgQ0lEU0VUX0tPUkVBMSwgQ0lEQ09ESU5HX1VDUzIsIENQREZfQ01hcDo6VHdvQnl0ZXMgfSwKKyAgICB7ICJVbmlLUy1VVEYxNiIsIENJRFNFVF9LT1JFQTEsIENJRENPRElOR19VVEYxNiwgQ1BERl9DTWFwOjpUd29CeXRlcyB9LAorICAgIHsgTlVMTCwgMCwgMCB9Cit9OworZXh0ZXJuIHZvaWQgRlBERkFQSV9GaW5kRW1iZWRkZWRDTWFwKGNvbnN0IGNoYXIqIG5hbWUsIGludCBjaGFyc2V0LCBpbnQgY29kaW5nLCBjb25zdCBGWENNQVBfQ01hcComIHBNYXApOworZXh0ZXJuIEZYX1dPUkQgRlBERkFQSV9DSURGcm9tQ2hhckNvZGUoY29uc3QgRlhDTUFQX0NNYXAqIHBNYXAsIEZYX0RXT1JEIGNoYXJjb2RlKTsKK0ZYX0JPT0wgQ1BERl9DTWFwOjpMb2FkUHJlZGVmaW5lZChDUERGX0NNYXBNYW5hZ2VyKiBwTWdyLCBGWF9MUENTVFIgcE5hbWUsIEZYX0JPT0wgYlByb21wdENKSykKK3sKKyAgICBtX1ByZWRlZmluZWRDTWFwID0gcE5hbWU7CisgICAgaWYgKG1fUHJlZGVmaW5lZENNYXAgPT0gRlhfQlNUUkMoIklkZW50aXR5LUgiKSB8fCBtX1ByZWRlZmluZWRDTWFwID09IEZYX0JTVFJDKCJJZGVudGl0eS1WIikpIHsKKyAgICAgICAgbV9Db2RpbmcgPSBDSURDT0RJTkdfQ0lEOworICAgICAgICBtX2JWZXJ0aWNhbCA9IHBOYW1lWzldID09ICdWJzsKKyAgICAgICAgbV9iTG9hZGVkID0gVFJVRTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIGNtYXBpZCA9IG1fUHJlZGVmaW5lZENNYXA7CisgICAgbV9iVmVydGljYWwgPSBjbWFwaWQuUmlnaHQoMSkgPT0gRlhfQlNUUkMoIlYiKTsKKyAgICBpZiAoY21hcGlkLkdldExlbmd0aCgpID4gMikgeworICAgICAgICBjbWFwaWQgPSBjbWFwaWQuTGVmdChjbWFwaWQuR2V0TGVuZ3RoKCkgLSAyKTsKKyAgICB9CisgICAgaW50IGluZGV4ID0gMDsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoZ19QcmVkZWZpbmVkQ01hcHNbaW5kZXhdLm1fcE5hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmIChjbWFwaWQgPT0gQ0ZYX0J5dGVTdHJpbmdDKGdfUHJlZGVmaW5lZENNYXBzW2luZGV4XS5tX3BOYW1lKSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaW5kZXggKys7CisgICAgfQorICAgIGNvbnN0IENQREZfUHJlZGVmaW5lZENNYXAmIG1hcCA9IGdfUHJlZGVmaW5lZENNYXBzW2luZGV4XTsKKyAgICBtX0NoYXJzZXQgPSBtYXAubV9DaGFyc2V0OworICAgIG1fQ29kaW5nID0gbWFwLm1fQ29kaW5nOworICAgIG1fQ29kaW5nU2NoZW1lID0gbWFwLm1fQ29kaW5nU2NoZW1lOworICAgIGlmIChtX0NvZGluZ1NjaGVtZSA9PSBNaXhlZFR3b0J5dGVzKSB7CisgICAgICAgIG1fcExlYWRpbmdCeXRlcyA9IEZYX0FsbG9jKEZYX0JZVEUsIDI1Nik7CisgICAgICAgIEZYU1lTX21lbXNldDMyKG1fcExlYWRpbmdCeXRlcywgMCwgMjU2KTsKKyAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IG1hcC5tX0xlYWRpbmdTZWdDb3VudDsgaSArKykgeworICAgICAgICAgICAgZm9yIChpbnQgYiA9IG1hcC5tX0xlYWRpbmdTZWdzW2kgKiAyXTsgYiA8PSBtYXAubV9MZWFkaW5nU2Vnc1tpICogMiArIDFdOyBiICsrKSB7CisgICAgICAgICAgICAgICAgbV9wTGVhZGluZ0J5dGVzW2JdID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBGUERGQVBJX0ZpbmRFbWJlZGRlZENNYXAocE5hbWUsIG1fQ2hhcnNldCwgbV9Db2RpbmcsIG1fcEVtYmVkTWFwKTsKKyAgICBpZiAobV9wRW1iZWRNYXApIHsKKyAgICAgICAgbV9iTG9hZGVkID0gVFJVRTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorI2lmbmRlZiBfRlBERkFQSV9NSU5JXworICAgIEZYX0xQVk9JRCBwUGFja2FnZSA9IHBNZ3ItPkdldFBhY2thZ2UoYlByb21wdENKSyk7CisgICAgRlhfTFBCWVRFIHBCdWZmZXI7CisgICAgRlhfRFdPUkQgc2l6ZTsKKyAgICBpZiAocFBhY2thZ2UgPT0gTlVMTCB8fCAhRlhGQ19Mb2FkRmlsZShwUGFja2FnZSwgbV9QcmVkZWZpbmVkQ01hcCwgcEJ1ZmZlciwgc2l6ZSkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBtX3BNYXBwaW5nID0gRlhfQWxsb2MoRlhfV09SRCwgNjU1MzYpOworICAgIEZYU1lTX21lbXNldDMyKG1fcE1hcHBpbmcsIDAsIDY1NTM2ICogc2l6ZW9mKEZYX1dPUkQpKTsKKyAgICBGWF9EV09SRCBkd1JlY29kZUVuZFBvcyA9IDA7CisgICAgaWYgKHBCdWZmZXJbNV0gPT0gMCkgeworICAgICAgICBGWF9EV09SRCBkd1N0YXJ0SW5kZXggPSAqKEZYX0RXT1JEKikocEJ1ZmZlciArIDgpOworICAgICAgICBGWF9EV09SRCBkd1JlY29yZENvdW50ID0gKihGWF9EV09SRCopKHBCdWZmZXIgKyAxNik7CisgICAgICAgIEZYX0RXT1JEIGR3RGF0YU9mZnNldCA9ICooRlhfRFdPUkQqKShwQnVmZmVyICsgMjApOworICAgICAgICBpZiAoZHdSZWNvcmRDb3VudCAqIDIgKyBkd1N0YXJ0SW5kZXggKiAyIDwgNjU1MzYpIHsKKyAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcE1hcHBpbmcgKyBkd1N0YXJ0SW5kZXggKiAyLCBwQnVmZmVyICsgZHdEYXRhT2Zmc2V0LCBkd1JlY29yZENvdW50ICogMik7CisgICAgICAgIH0KKyAgICAgICAgZHdSZWNvZGVFbmRQb3MgPSBkd0RhdGFPZmZzZXQgKyBkd1JlY29yZENvdW50ICogMjsKKyAgICB9IGVsc2UgaWYgKHBCdWZmZXJbNV0gPT0gMikgeworICAgICAgICBGWF9EV09SRCBuU2VnbWVudHMgPSAqKEZYX0RXT1JEKikocEJ1ZmZlciArIDE2KTsKKyAgICAgICAgRlhfRFdPUkQgZHdEYXRhT2Zmc2V0ID0gKihGWF9EV09SRCopKHBCdWZmZXIgKyAyMCk7CisgICAgICAgIGR3UmVjb2RlRW5kUG9zID0gZHdEYXRhT2Zmc2V0ICsgNiAqIG5TZWdtZW50czsKKyAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IG5TZWdtZW50czsgaSArKykgeworICAgICAgICAgICAgRlhfTFBCWVRFIHBSZWNvcmQgPSBwQnVmZmVyICsgZHdEYXRhT2Zmc2V0ICsgaSAqIDY7CisgICAgICAgICAgICBGWF9XT1JEIEluZGV4U3RhcnQgPSAqKEZYX1dPUkQqKXBSZWNvcmQ7CisgICAgICAgICAgICBGWF9XT1JEIEluZGV4Q291bnQgPSAqKEZYX1dPUkQqKShwUmVjb3JkICsgMik7CisgICAgICAgICAgICBGWF9XT1JEIENvZGVTdGFydCA9ICooRlhfV09SRCopKHBSZWNvcmQgKyA0KTsKKyAgICAgICAgICAgIGlmIChJbmRleFN0YXJ0ICsgSW5kZXhDb3VudCA8IDY1NTM2KQorICAgICAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgaiA9IDA7IGogPCBJbmRleENvdW50OyBqICsrKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcE1hcHBpbmdbSW5kZXhTdGFydCArIGogXSA9IChGWF9XT1JEKShDb2RlU3RhcnQgKyBqKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGR3UmVjb2RlRW5kUG9zIDwgc2l6ZSkgeworICAgICAgICBGWF9EV09SRCBkd01hcExlbiA9ICooRlhfRFdPUkQqKShwQnVmZmVyICsgZHdSZWNvZGVFbmRQb3MpOworICAgICAgICBpZiAoZHdNYXBMZW4pIHsKKyAgICAgICAgICAgIG1fcFVzZU1hcCA9IEZYX05FVyBDUERGX0NNYXA7CisgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBic05hbWUocEJ1ZmZlciArIGR3UmVjb2RlRW5kUG9zICsgNCAsIGR3TWFwTGVuKTsKKyAgICAgICAgICAgIGlmIChtX3BVc2VNYXApIHsKKyAgICAgICAgICAgICAgICBtX3BVc2VNYXAtPkxvYWRQcmVkZWZpbmVkKHBNZ3IsIGJzTmFtZSwgYlByb21wdENKSyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgRlhfRnJlZShwQnVmZmVyKTsKKyAgICBtX2JMb2FkZWQgPSBUUlVFOworI2VuZGlmCisgICAgcmV0dXJuIFRSVUU7Cit9CitleHRlcm4gIkMiIHsKKyAgICBzdGF0aWMgaW50IGNvbXBhcmVfZHdvcmQoY29uc3Qgdm9pZCogZGF0YTEsIGNvbnN0IHZvaWQqIGRhdGEyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICgqKEZYX0RXT1JEKilkYXRhMSkgLSAoKihGWF9EV09SRCopZGF0YTIpOworICAgIH0KK307CitGWF9CT09MIENQREZfQ01hcDo6TG9hZEVtYmVkZGVkKEZYX0xQQ0JZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUpCit7CisgICAgbV9wTWFwcGluZyA9IEZYX0FsbG9jKEZYX1dPUkQsIDY1NTM2KTsKKyAgICBGWFNZU19tZW1zZXQzMihtX3BNYXBwaW5nLCAwLCA2NTUzNiAqIHNpemVvZihGWF9XT1JEKSk7CisgICAgQ1BERl9DTWFwUGFyc2VyIHBhcnNlcjsKKyAgICBwYXJzZXIuSW5pdGlhbGl6ZSh0aGlzKTsKKyAgICBDUERGX1NpbXBsZVBhcnNlciBzeW50YXgocERhdGEsIHNpemUpOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIENGWF9CeXRlU3RyaW5nQyB3b3JkID0gc3ludGF4LkdldFdvcmQoKTsKKyAgICAgICAgaWYgKHdvcmQuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBwYXJzZXIuUGFyc2VXb3JkKHdvcmQpOworICAgIH0KKyAgICBpZiAobV9Db2RpbmdTY2hlbWUgPT0gTWl4ZWRGb3VyQnl0ZXMgJiYgcGFyc2VyLm1fQWRkTWFwcy5HZXRTaXplKCkpIHsKKyAgICAgICAgbV9wQWRkTWFwcGluZyA9IEZYX0FsbG9jKEZYX0JZVEUsIHBhcnNlci5tX0FkZE1hcHMuR2V0U2l6ZSgpICsgNCk7CisgICAgICAgICooRlhfRFdPUkQqKW1fcEFkZE1hcHBpbmcgPSBwYXJzZXIubV9BZGRNYXBzLkdldFNpemUoKSAvIDg7CisgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcEFkZE1hcHBpbmcgKyA0LCBwYXJzZXIubV9BZGRNYXBzLkdldEJ1ZmZlcigpLCBwYXJzZXIubV9BZGRNYXBzLkdldFNpemUoKSk7CisgICAgICAgIEZYU1lTX3Fzb3J0KG1fcEFkZE1hcHBpbmcgKyA0LCBwYXJzZXIubV9BZGRNYXBzLkdldFNpemUoKSAvIDgsIDgsIGNvbXBhcmVfZHdvcmQpOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK2V4dGVybiAiQyIgeworICAgIHN0YXRpYyBpbnQgY29tcGFyZUNJRChjb25zdCB2b2lkKiBrZXksIGNvbnN0IHZvaWQqIGVsZW1lbnQpCisgICAgeworICAgICAgICBpZiAoKCooRlhfRFdPUkQqKWtleSkgPCAoKihGWF9EV09SRCopZWxlbWVudCkpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKCooRlhfRFdPUkQqKWtleSkgPiAoKihGWF9EV09SRCopZWxlbWVudCkgKyAoKEZYX0RXT1JEKillbGVtZW50KVsxXSAvIDY1NTM2KSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9OworRlhfV09SRCBDUERGX0NNYXA6OkNJREZyb21DaGFyQ29kZShGWF9EV09SRCBjaGFyY29kZSkgY29uc3QKK3sKKyAgICBpZiAobV9Db2RpbmcgPT0gQ0lEQ09ESU5HX0NJRCkgeworICAgICAgICByZXR1cm4gKEZYX1dPUkQpY2hhcmNvZGU7CisgICAgfQorICAgIGlmIChtX3BFbWJlZE1hcCkgeworICAgICAgICByZXR1cm4gRlBERkFQSV9DSURGcm9tQ2hhckNvZGUobV9wRW1iZWRNYXAsIGNoYXJjb2RlKTsKKyAgICB9CisgICAgaWYgKG1fcE1hcHBpbmcgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gKEZYX1dPUkQpY2hhcmNvZGU7CisgICAgfQorICAgIGlmIChjaGFyY29kZSA+PiAxNikgeworICAgICAgICBpZiAobV9wQWRkTWFwcGluZykgeworICAgICAgICAgICAgdm9pZCogZm91bmQgPSBGWFNZU19ic2VhcmNoKCZjaGFyY29kZSwgbV9wQWRkTWFwcGluZyArIDQsICooRlhfRFdPUkQqKW1fcEFkZE1hcHBpbmcsIDgsIGNvbXBhcmVDSUQpOworICAgICAgICAgICAgaWYgKGZvdW5kID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9wVXNlTWFwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX3BVc2VNYXAtPkNJREZyb21DaGFyQ29kZShjaGFyY29kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIChGWF9XT1JEKSgoKEZYX0RXT1JEKilmb3VuZClbMV0gJSA2NTUzNiArIGNoYXJjb2RlIC0gKiAoRlhfRFdPUkQqKWZvdW5kKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9wVXNlTWFwKSB7CisgICAgICAgICAgICByZXR1cm4gbV9wVXNlTWFwLT5DSURGcm9tQ2hhckNvZGUoY2hhcmNvZGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBGWF9EV09SRCBDSUQgPSBtX3BNYXBwaW5nW2NoYXJjb2RlXTsKKyAgICBpZiAoIUNJRCAmJiBtX3BVc2VNYXApIHsKKyAgICAgICAgcmV0dXJuIG1fcFVzZU1hcC0+Q0lERnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsKKyAgICB9CisgICAgcmV0dXJuIChGWF9XT1JEKUNJRDsKK30KK3N0YXRpYyBpbnQgX0NoZWNrQ29kZVJhbmdlKEZYX0xQQllURSBjb2RlcywgaW50IHNpemUsIF9DTWFwX0NvZGVSYW5nZSogcFJhbmdlcywgaW50IG5SYW5nZXMpCit7CisgICAgaW50IGlTZWcgPSBuUmFuZ2VzIC0gMTsKKyAgICB3aGlsZSAoaVNlZyA+PSAwKSB7CisgICAgICAgIGlmIChwUmFuZ2VzW2lTZWddLm1fQ2hhclNpemUgPCBzaXplKSB7CisgICAgICAgICAgICBpU2VnIC0tOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaW50IGlDaGFyID0gMDsKKyAgICAgICAgd2hpbGUgKGlDaGFyIDwgc2l6ZSkgeworICAgICAgICAgICAgaWYgKGNvZGVzW2lDaGFyXSA8IHBSYW5nZXNbaVNlZ10ubV9Mb3dlcltpQ2hhcl0gfHwKKyAgICAgICAgICAgICAgICAgICAgY29kZXNbaUNoYXJdID4gcFJhbmdlc1tpU2VnXS5tX1VwcGVyW2lDaGFyXSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaUNoYXIgKys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlDaGFyID09IHBSYW5nZXNbaVNlZ10ubV9DaGFyU2l6ZSkgeworICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlDaGFyKSB7CisgICAgICAgICAgICBpZiAoc2l6ZSA9PSBwUmFuZ2VzW2lTZWddLm1fQ2hhclNpemUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgIGlTZWcgLS07CisgICAgfQorICAgIHJldHVybiAwOworfQorRlhfRFdPUkQgQ1BERl9DTWFwOjpHZXROZXh0Q2hhcihGWF9MUENTVFIgcFN0cmluZywgaW50JiBvZmZzZXQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX0NvZGluZ1NjaGVtZSkgeworICAgICAgICBjYXNlIE9uZUJ5dGU6CisgICAgICAgICAgICByZXR1cm4gKChGWF9MUEJZVEUpcFN0cmluZylbb2Zmc2V0KytdOworICAgICAgICBjYXNlIFR3b0J5dGVzOgorICAgICAgICAgICAgb2Zmc2V0ICs9IDI7CisgICAgICAgICAgICByZXR1cm4gKChGWF9MUEJZVEUpcFN0cmluZylbb2Zmc2V0IC0gMl0gKiAyNTYgKyAoKEZYX0xQQllURSlwU3RyaW5nKVtvZmZzZXQgLSAxXTsKKyAgICAgICAgY2FzZSBNaXhlZFR3b0J5dGVzOiB7CisgICAgICAgICAgICAgICAgRlhfQllURSBieXRlMSA9ICgoRlhfTFBCWVRFKXBTdHJpbmcpW29mZnNldCsrXTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fcExlYWRpbmdCeXRlc1tieXRlMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ5dGUxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBGWF9CWVRFIGJ5dGUyID0gKChGWF9MUEJZVEUpcFN0cmluZylbb2Zmc2V0KytdOworICAgICAgICAgICAgICAgIHJldHVybiBieXRlMSAqIDI1NiArIGJ5dGUyOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIE1peGVkRm91ckJ5dGVzOiB7CisgICAgICAgICAgICAgICAgRlhfQllURSBjb2Rlc1s0XTsKKyAgICAgICAgICAgICAgICBpbnQgY2hhcl9zaXplID0gMTsKKyAgICAgICAgICAgICAgICBjb2Rlc1swXSA9ICgoRlhfTFBCWVRFKXBTdHJpbmcpW29mZnNldCsrXTsKKyAgICAgICAgICAgICAgICBfQ01hcF9Db2RlUmFuZ2UqIHBSYW5nZXMgPSAoX0NNYXBfQ29kZVJhbmdlKiltX3BMZWFkaW5nQnl0ZXM7CisgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHJldCA9IF9DaGVja0NvZGVSYW5nZShjb2RlcywgY2hhcl9zaXplLCBwUmFuZ2VzLCBtX25Db2RlUmFuZ2VzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID09IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGNoYXJjb2RlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hhcl9zaXplOyBpICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmNvZGUgPSAoY2hhcmNvZGUgPDwgOCkgKyBjb2Rlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGFyY29kZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcl9zaXplID09IDQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNvZGVzW2NoYXJfc2l6ZSArK10gPSAoKEZYX0xQQllURSlwU3RyaW5nKVtvZmZzZXQrK107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KK2ludCBDUERGX0NNYXA6OkdldENoYXJTaXplKEZYX0RXT1JEIGNoYXJjb2RlKSBjb25zdAoreworICAgIHN3aXRjaCAobV9Db2RpbmdTY2hlbWUpIHsKKyAgICAgICAgY2FzZSBPbmVCeXRlOgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgVHdvQnl0ZXM6CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBNaXhlZFR3b0J5dGVzOgorICAgICAgICBjYXNlIE1peGVkRm91ckJ5dGVzOgorICAgICAgICAgICAgaWYgKGNoYXJjb2RlIDwgMHgxMDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjaGFyY29kZSA8IDB4MTAwMDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjaGFyY29kZSA8IDB4MTAwMDAwMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgfQorICAgIHJldHVybiAxOworfQoraW50IENQREZfQ01hcDo6Q291bnRDaGFyKEZYX0xQQ1NUUiBwU3RyaW5nLCBpbnQgc2l6ZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fQ29kaW5nU2NoZW1lKSB7CisgICAgICAgIGNhc2UgT25lQnl0ZToKKyAgICAgICAgICAgIHJldHVybiBzaXplOworICAgICAgICBjYXNlIFR3b0J5dGVzOgorICAgICAgICAgICAgcmV0dXJuIChzaXplICsgMSkgLyAyOworICAgICAgICBjYXNlIE1peGVkVHdvQnl0ZXM6IHsKKyAgICAgICAgICAgICAgICBpbnQgY291bnQgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgeworICAgICAgICAgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fcExlYWRpbmdCeXRlc1soKEZYX0xQQllURSlwU3RyaW5nKVtpXV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50OworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIE1peGVkRm91ckJ5dGVzOiB7CisgICAgICAgICAgICAgICAgaW50IGNvdW50ID0gMCwgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgICB3aGlsZSAob2Zmc2V0IDwgc2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBHZXROZXh0Q2hhcihwU3RyaW5nLCBvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50OworICAgICAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc2l6ZTsKK30KK2ludCBfR2V0Q2hhclNpemUoRlhfRFdPUkQgY2hhcmNvZGUsIF9DTWFwX0NvZGVSYW5nZSogcFJhbmdlcywgaW50IGlSYW5nZXNTaXplKQoreworICAgIGlmICghaVJhbmdlc1NpemUpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIEZYX0JZVEUgY29kZXNbNF07CisgICAgY29kZXNbMF0gPSBjb2Rlc1sxXSA9IDB4MDA7CisgICAgY29kZXNbMl0gPSAoRlhfQllURSkoY2hhcmNvZGUgPj4gOCAmIDB4RkYpOworICAgIGNvZGVzWzNdID0gKEZYX0JZVEUpY2hhcmNvZGU7CisgICAgaW50IG9mZnNldCA9IDAsIHNpemUgPSA0OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7CisgICAgICAgIGludCBpU2VnID0gaVJhbmdlc1NpemUgLSAxOworICAgICAgICB3aGlsZSAoaVNlZyA+PSAwKSB7CisgICAgICAgICAgICBpZiAocFJhbmdlc1tpU2VnXS5tX0NoYXJTaXplIDwgc2l6ZSkgeworICAgICAgICAgICAgICAgIGlTZWcgLS07CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgaUNoYXIgPSAwOworICAgICAgICAgICAgd2hpbGUgKGlDaGFyIDwgc2l6ZSkgeworICAgICAgICAgICAgICAgIGlmIChjb2Rlc1tvZmZzZXQgKyBpQ2hhcl0gPCBwUmFuZ2VzW2lTZWddLm1fTG93ZXJbaUNoYXJdIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBjb2Rlc1tvZmZzZXQgKyBpQ2hhcl0gPiBwUmFuZ2VzW2lTZWddLm1fVXBwZXJbaUNoYXJdKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpQ2hhciArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpQ2hhciA9PSBwUmFuZ2VzW2lTZWddLm1fQ2hhclNpemUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlTZWcgLS07CisgICAgICAgIH0KKyAgICAgICAgc2l6ZSAtLTsKKyAgICAgICAgb2Zmc2V0ICsrOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KK2ludCBDUERGX0NNYXA6OkFwcGVuZENoYXIoRlhfTFBTVFIgc3RyLCBGWF9EV09SRCBjaGFyY29kZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fQ29kaW5nU2NoZW1lKSB7CisgICAgICAgIGNhc2UgT25lQnl0ZToKKyAgICAgICAgICAgIHN0clswXSA9IChGWF9CWVRFKWNoYXJjb2RlOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgVHdvQnl0ZXM6CisgICAgICAgICAgICBzdHJbMF0gPSAoRlhfQllURSkoY2hhcmNvZGUgLyAyNTYpOworICAgICAgICAgICAgc3RyWzFdID0gKEZYX0JZVEUpKGNoYXJjb2RlICUgMjU2KTsKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIE1peGVkVHdvQnl0ZXM6CisgICAgICAgIGNhc2UgTWl4ZWRGb3VyQnl0ZXM6CisgICAgICAgICAgICBpZiAoY2hhcmNvZGUgPCAweDEwMCkgeworICAgICAgICAgICAgICAgIF9DTWFwX0NvZGVSYW5nZSogcFJhbmdlcyA9IChfQ01hcF9Db2RlUmFuZ2UqKW1fcExlYWRpbmdCeXRlczsKKyAgICAgICAgICAgICAgICBpbnQgaVNpemUgPSBfR2V0Q2hhclNpemUoY2hhcmNvZGUsIHBSYW5nZXMsIG1fbkNvZGVSYW5nZXMpOworICAgICAgICAgICAgICAgIGlmIChpU2l6ZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlTaXplID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGlTaXplID4gMSkgeworICAgICAgICAgICAgICAgICAgICBGWFNZU19tZW1zZXQzMihzdHIsIDAsIHNpemVvZihGWF9CWVRFKSAqIGlTaXplKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RyW2lTaXplIC0gMV0gPSAoRlhfQllURSljaGFyY29kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaVNpemU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYXJjb2RlIDwgMHgxMDAwMCkgeworICAgICAgICAgICAgICAgIHN0clswXSA9IChGWF9CWVRFKShjaGFyY29kZSA+PiA4KTsKKyAgICAgICAgICAgICAgICBzdHJbMV0gPSAoRlhfQllURSljaGFyY29kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhcmNvZGUgPCAweDEwMDAwMDApIHsKKyAgICAgICAgICAgICAgICBzdHJbMF0gPSAoRlhfQllURSkoY2hhcmNvZGUgPj4gMTYpOworICAgICAgICAgICAgICAgIHN0clsxXSA9IChGWF9CWVRFKShjaGFyY29kZSA+PiA4KTsKKyAgICAgICAgICAgICAgICBzdHJbMl0gPSAoRlhfQllURSljaGFyY29kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RyWzBdID0gKEZYX0JZVEUpKGNoYXJjb2RlID4+IDI0KTsKKyAgICAgICAgICAgICAgICBzdHJbMV0gPSAoRlhfQllURSkoY2hhcmNvZGUgPj4gMTYpOworICAgICAgICAgICAgICAgIHN0clsyXSA9IChGWF9CWVRFKShjaGFyY29kZSA+PiA4KTsKKyAgICAgICAgICAgICAgICBzdHJbM10gPSAoRlhfQllURSljaGFyY29kZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CitDUERGX0NJRDJVbmljb2RlTWFwOjpDUERGX0NJRDJVbmljb2RlTWFwKCkKK3sKKyAgICBtX0VtYmVkZGVkQ291bnQgPSAwOworI2lmbmRlZiBfRlBERkFQSV9NSU5JXworICAgIG1fcEV4dGVybmFsTWFwID0gTlVMTDsKKyNlbmRpZgorfQorQ1BERl9DSUQyVW5pY29kZU1hcDo6fkNQREZfQ0lEMlVuaWNvZGVNYXAoKQoreworI2lmbmRlZiBfRlBERkFQSV9NSU5JXworICAgIGlmIChtX3BFeHRlcm5hbE1hcCkgeworICAgICAgICBkZWxldGUgbV9wRXh0ZXJuYWxNYXA7CisgICAgfQorI2VuZGlmCit9CitGWF9CT09MIENQREZfQ0lEMlVuaWNvZGVNYXA6OkluaXRpYWxpemUoKQoreworI2lmbmRlZiBfRlBERkFQSV9NSU5JXworICAgIG1fcEV4dGVybmFsTWFwID0gRlhfTkVXIENQREZfRlhNUDsKKyNlbmRpZgorICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDUERGX0NJRDJVbmljb2RlTWFwOjpJc0xvYWRlZCgpCit7CisjaWZkZWYgX0ZQREZBUElfTUlOSV8KKyAgICByZXR1cm4gbV9FbWJlZGRlZENvdW50ICE9IDA7CisjZWxzZQorICAgIHJldHVybiBtX0VtYmVkZGVkQ291bnQgIT0gMCB8fCAobV9wRXh0ZXJuYWxNYXAgIT0gTlVMTCAmJiBtX3BFeHRlcm5hbE1hcC0+SXNMb2FkZWQoKSk7CisjZW5kaWYKK30KK0ZYX1dDSEFSIENQREZfQ0lEMlVuaWNvZGVNYXA6OlVuaWNvZGVGcm9tQ0lEKEZYX1dPUkQgQ0lEKQoreworICAgIGlmIChtX0NoYXJzZXQgPT0gQ0lEU0VUX1VOSUNPREUpIHsKKyAgICAgICAgcmV0dXJuIENJRDsKKyAgICB9CisgICAgaWYgKENJRCA8IG1fRW1iZWRkZWRDb3VudCkgeworICAgICAgICByZXR1cm4gbV9wRW1iZWRkZWRNYXBbQ0lEXTsKKyAgICB9CisjaWZkZWYgX0ZQREZBUElfTUlOSV8KKyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgRlhfTFBDQllURSByZWNvcmQgPSBtX3BFeHRlcm5hbE1hcC0+R2V0UmVjb3JkKENJRCk7CisgICAgaWYgKHJlY29yZCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gKihGWF9XT1JEKilyZWNvcmQ7CisjZW5kaWYKK30KK3ZvaWQgRlBERkFQSV9Mb2FkQ0lEMlVuaWNvZGVNYXAoaW50IGNoYXJzZXQsIGNvbnN0IEZYX1dPUkQqJiBwTWFwLCBGWF9EV09SRCYgY291bnQpOwordm9pZCBDUERGX0NJRDJVbmljb2RlTWFwOjpMb2FkKENQREZfQ01hcE1hbmFnZXIqIHBNZ3IsIGludCBjaGFyc2V0LCBGWF9CT09MIGJQcm9tcHRDSkspCit7CisgICAgbV9DaGFyc2V0ID0gY2hhcnNldDsKKyAgICBGUERGQVBJX0xvYWRDSUQyVW5pY29kZU1hcChjaGFyc2V0LCBtX3BFbWJlZGRlZE1hcCwgbV9FbWJlZGRlZENvdW50KTsKKyAgICBpZiAobV9FbWJlZGRlZENvdW50KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjaWZuZGVmIF9GUERGQVBJX01JTklfCisgICAgRlhfTFBWT0lEIHBQYWNrYWdlID0gcE1nci0+R2V0UGFja2FnZShiUHJvbXB0Q0pLKTsKKyAgICBpZiAocFBhY2thZ2UgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcEV4dGVybmFsTWFwLT5Mb2FkRmlsZShwUGFja2FnZSwgRlhfQlNUUkMoIkNJREluZm9fIikgKyBnX0NoYXJzZXROYW1lc1tjaGFyc2V0XSk7CisjZW5kaWYKK30KKyNpbmNsdWRlICJ0dGdzdWJ0YWJsZS5oIgorQ1BERl9DSURGb250OjpDUERGX0NJREZvbnQoKQoreworICAgIG1fcENNYXAgPSBOVUxMOworICAgIG1fcEFsbG9jYXRlZENNYXAgPSBOVUxMOworICAgIG1fcENJRDJVbmljb2RlTWFwID0gTlVMTDsKKyAgICBtX3BBbnNpV2lkdGhzID0gTlVMTDsKKyAgICBtX3BDSURUb0dJRE1hcCA9IE5VTEw7CisgICAgbV9iQ0lESXNHSUQgPSBGQUxTRTsKKyAgICBtX2JBZG9iZUNvdXJpZXJTdGQgPSBGQUxTRTsKKyAgICBtX3BUVEdTVUJUYWJsZSA9IE5VTEw7CisgICAgRlhTWVNfbWVtc2V0OChtX0NoYXJCQm94LCAweGZmLCAyNTYgKiBzaXplb2YoRlhfU01BTExfUkVDVCkpOworfQorQ1BERl9DSURGb250Ojp+Q1BERl9DSURGb250KCkKK3sKKyAgICBpZiAobV9wQW5zaVdpZHRocykgeworICAgICAgICBGWF9GcmVlKG1fcEFuc2lXaWR0aHMpOworICAgIH0KKyAgICBpZiAobV9wQWxsb2NhdGVkQ01hcCkgeworICAgICAgICBkZWxldGUgbV9wQWxsb2NhdGVkQ01hcDsKKyAgICB9CisgICAgaWYgKG1fcENJRFRvR0lETWFwKSB7CisgICAgICAgIGRlbGV0ZSBtX3BDSURUb0dJRE1hcDsKKyAgICB9CisgICAgaWYgKG1fcFRUR1NVQlRhYmxlKSB7CisgICAgICAgIGRlbGV0ZSBtX3BUVEdTVUJUYWJsZTsKKyAgICB9Cit9CitGWF9XT1JEIENQREZfQ0lERm9udDo6Q0lERnJvbUNoYXJDb2RlKEZYX0RXT1JEIGNoYXJjb2RlKSBjb25zdAoreworICAgIGlmIChtX3BDTWFwID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIChGWF9XT1JEKWNoYXJjb2RlOworICAgIH0KKyAgICByZXR1cm4gbV9wQ01hcC0+Q0lERnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsKK30KK0ZYX0JPT0wgQ1BERl9DSURGb250OjpJc1ZlcnRXcml0aW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wQ01hcCA/IG1fcENNYXAtPklzVmVydFdyaXRpbmcoKSA6IEZBTFNFOworfQorZXh0ZXJuIEZYX0RXT1JEIEZQREZBUElfQ2hhckNvZGVGcm9tQ0lEKGNvbnN0IEZYQ01BUF9DTWFwKiBwTWFwLCBGWF9XT1JEIGNpZCk7CitzdGF0aWMgRlhfRFdPUkQgX0VtYmVkZGVkQ2hhcmNvZGVGcm9tVW5pY29kZShjb25zdCBGWENNQVBfQ01hcCogcEVtYmVkTWFwLCBpbnQgY2hhcnNldCwgRlhfV0NIQVIgdW5pY29kZSkKK3sKKyAgICBpZiAoY2hhcnNldCA8PSAwIHx8IGNoYXJzZXQgPiA0KSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBDUERGX0ZvbnRHbG9iYWxzKiBwRm9udEdsb2JhbHMgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldFBhZ2VNb2R1bGUoKS0+R2V0Rm9udEdsb2JhbHMoKTsKKyAgICBjb25zdCBGWF9XT1JEKiBwQ29kZXMgPSBwRm9udEdsb2JhbHMtPm1fRW1iZWRkZWRUb1VuaWNvZGVzW2NoYXJzZXRdLm1fcE1hcDsKKyAgICBpZiAocENvZGVzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGludCBuQ29kZXMgPSBwRm9udEdsb2JhbHMtPm1fRW1iZWRkZWRUb1VuaWNvZGVzW2NoYXJzZXRdLm1fQ291bnQ7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuQ29kZXM7IGkrKykgeworICAgICAgICBpZiAocENvZGVzW2ldID09IHVuaWNvZGUpIHsKKyAgICAgICAgICAgIEZYX0RXT1JEIENoYXJDb2RlID0gRlBERkFQSV9DaGFyQ29kZUZyb21DSUQocEVtYmVkTWFwLCBpKTsKKyAgICAgICAgICAgIGlmIChDaGFyQ29kZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gQ2hhckNvZGU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CitzdGF0aWMgRlhfV0NIQVIgX0VtYmVkZGVkVW5pY29kZUZyb21DaGFyY29kZShjb25zdCBGWENNQVBfQ01hcCogcEVtYmVkTWFwLCBpbnQgY2hhcnNldCwgRlhfRFdPUkQgY2hhcmNvZGUpCit7CisgICAgaWYgKGNoYXJzZXQgPD0gMCB8fCBjaGFyc2V0ID4gNCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgRlhfV09SRCBjaWQgPSBGUERGQVBJX0NJREZyb21DaGFyQ29kZShwRW1iZWRNYXAsIGNoYXJjb2RlKTsKKyAgICBpZiAoY2lkID09IDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIENQREZfRm9udEdsb2JhbHMqIHBGb250R2xvYmFscyA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UGFnZU1vZHVsZSgpLT5HZXRGb250R2xvYmFscygpOworICAgIGNvbnN0IEZYX1dPUkQqIHBDb2RlcyA9IHBGb250R2xvYmFscy0+bV9FbWJlZGRlZFRvVW5pY29kZXNbY2hhcnNldF0ubV9wTWFwOworICAgIGlmIChwQ29kZXMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKGNpZCA8IHBGb250R2xvYmFscy0+bV9FbWJlZGRlZFRvVW5pY29kZXNbY2hhcnNldF0ubV9Db3VudCkgeworICAgICAgICByZXR1cm4gcENvZGVzW2NpZF07CisgICAgfQorICAgIHJldHVybiAwOworfQorRlhfV0NIQVIgQ1BERl9DSURGb250OjpfVW5pY29kZUZyb21DaGFyQ29kZShGWF9EV09SRCBjaGFyY29kZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fcENNYXAtPm1fQ29kaW5nKSB7CisgICAgICAgIGNhc2UgQ0lEQ09ESU5HX1VDUzI6CisgICAgICAgIGNhc2UgQ0lEQ09ESU5HX1VURjE2OgorICAgICAgICAgICAgcmV0dXJuIChGWF9XQ0hBUiljaGFyY29kZTsKKyAgICAgICAgY2FzZSBDSURDT0RJTkdfQ0lEOgorICAgICAgICAgICAgaWYgKG1fcENJRDJVbmljb2RlTWFwID09IE5VTEwgfHwgIW1fcENJRDJVbmljb2RlTWFwLT5Jc0xvYWRlZCgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbV9wQ0lEMlVuaWNvZGVNYXAtPlVuaWNvZGVGcm9tQ0lEKChGWF9XT1JEKWNoYXJjb2RlKTsKKyAgICB9CisgICAgaWYgKCFtX3BDTWFwLT5Jc0xvYWRlZCgpIHx8IG1fcENJRDJVbmljb2RlTWFwID09IE5VTEwgfHwgIW1fcENJRDJVbmljb2RlTWFwLT5Jc0xvYWRlZCgpKSB7CisjaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXworICAgICAgICBGWF9XQ0hBUiB1bmljb2RlOworICAgICAgICBpbnQgY2hhcnNpemUgPSAxOworICAgICAgICBpZiAoY2hhcmNvZGUgPiAyNTUpIHsKKyAgICAgICAgICAgIGNoYXJjb2RlID0gKGNoYXJjb2RlICUgMjU2KSAqIDI1NiArIChjaGFyY29kZSAvIDI1Nik7CisgICAgICAgICAgICBjaGFyc2l6ZSA9IDI7CisgICAgICAgIH0KKyAgICAgICAgaW50IHJldCA9IEZYU1lTX011bHRpQnl0ZVRvV2lkZUNoYXIoZ19DaGFyc2V0Q1BzW21fcENNYXAtPm1fQ29kaW5nXSwgMCwgKEZYX0xQQ1NUUikmY2hhcmNvZGUsIGNoYXJzaXplLCAmdW5pY29kZSwgMSk7CisgICAgICAgIGlmIChyZXQgIT0gMSkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHVuaWNvZGU7CisjZW5kaWYKKyAgICAgICAgaWYgKG1fcENNYXAtPm1fcEVtYmVkTWFwKSB7CisgICAgICAgICAgICByZXR1cm4gX0VtYmVkZGVkVW5pY29kZUZyb21DaGFyY29kZShtX3BDTWFwLT5tX3BFbWJlZE1hcCwgbV9wQ01hcC0+bV9DaGFyc2V0LCBjaGFyY29kZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbV9wQ0lEMlVuaWNvZGVNYXAtPlVuaWNvZGVGcm9tQ0lEKENJREZyb21DaGFyQ29kZShjaGFyY29kZSkpOworfQorRlhfRFdPUkQgQ1BERl9DSURGb250OjpfQ2hhckNvZGVGcm9tVW5pY29kZShGWF9XQ0hBUiB1bmljb2RlKSBjb25zdAoreworICAgIHN3aXRjaCAobV9wQ01hcC0+bV9Db2RpbmcpIHsKKyAgICAgICAgY2FzZSBDSURDT0RJTkdfVU5LTk9XTjoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIENJRENPRElOR19VQ1MyOgorICAgICAgICBjYXNlIENJRENPRElOR19VVEYxNjoKKyAgICAgICAgICAgIHJldHVybiB1bmljb2RlOworICAgICAgICBjYXNlIENJRENPRElOR19DSUQ6IHsKKyAgICAgICAgICAgICAgICBpZiAobV9wQ0lEMlVuaWNvZGVNYXAgPT0gTlVMTCB8fCAhbV9wQ0lEMlVuaWNvZGVNYXAtPklzTG9hZGVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEZYX0RXT1JEIENJRCA9IDA7CisgICAgICAgICAgICAgICAgd2hpbGUgKENJRCA8IDY1NTM2KSB7CisgICAgICAgICAgICAgICAgICAgIEZYX1dDSEFSIHRoaXNfdW5pY29kZSA9IG1fcENJRDJVbmljb2RlTWFwLT5Vbmljb2RlRnJvbUNJRCgoRlhfV09SRClDSUQpOworICAgICAgICAgICAgICAgICAgICBpZiAodGhpc191bmljb2RlID09IHVuaWNvZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDSUQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgQ0lEICsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICB9CisjaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXworICAgIEZYX0JZVEUgYnVmZmVyWzMyXTsKKyAgICBpbnQgcmV0ID0gRlhTWVNfV2lkZUNoYXJUb011bHRpQnl0ZShnX0NoYXJzZXRDUHNbbV9wQ01hcC0+bV9Db2RpbmddLCAwLCAmdW5pY29kZSwgMSwgKGNoYXIqKWJ1ZmZlciwgNCwgTlVMTCwgTlVMTCk7CisgICAgaWYgKHJldCA9PSAxKSB7CisgICAgICAgIHJldHVybiBidWZmZXJbMF07CisgICAgfSBlbHNlIGlmIChyZXQgPT0gMikgeworICAgICAgICByZXR1cm4gYnVmZmVyWzBdICogMjU2ICsgYnVmZmVyWzFdOworICAgIH0KKyAgICByZXR1cm4gMDsKKyNlbmRpZgorICAgIGlmICh1bmljb2RlIDwgMHg4MCkgeworICAgICAgICByZXR1cm4gKEZYX0RXT1JEKXVuaWNvZGU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fcENNYXAtPm1fcEVtYmVkTWFwKSB7CisgICAgICAgICAgICByZXR1cm4gX0VtYmVkZGVkQ2hhcmNvZGVGcm9tVW5pY29kZShtX3BDTWFwLT5tX3BFbWJlZE1hcCwgbV9wQ01hcC0+bV9DaGFyc2V0LCB1bmljb2RlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorfQorc3RhdGljIHZvaWQgRlRfVXNlQ0lEQ2hhcm1hcChGWEZUX0ZhY2UgZmFjZSwgaW50IGNvZGluZykKK3sKKyAgICBpbnQgZW5jb2Rpbmc7CisgICAgc3dpdGNoIChjb2RpbmcpIHsKKyAgICAgICAgY2FzZSBDSURDT0RJTkdfR0I6CisgICAgICAgICAgICBlbmNvZGluZyA9IEZYRlRfRU5DT0RJTkdfR0IyMzEyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ0lEQ09ESU5HX0JJRzU6CisgICAgICAgICAgICBlbmNvZGluZyA9IEZYRlRfRU5DT0RJTkdfQklHNTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENJRENPRElOR19KSVM6CisgICAgICAgICAgICBlbmNvZGluZyA9IEZYRlRfRU5DT0RJTkdfU0pJUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENJRENPRElOR19LT1JFQToKKyAgICAgICAgICAgIGVuY29kaW5nID0gRlhGVF9FTkNPRElOR19KT0hBQjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZW5jb2RpbmcgPSBGWEZUX0VOQ09ESU5HX1VOSUNPREU7CisgICAgfQorICAgIGludCBlcnIgPSBGWEZUX1NlbGVjdF9DaGFybWFwKGZhY2UsIGVuY29kaW5nKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIGVyciA9IEZYRlRfU2VsZWN0X0NoYXJtYXAoZmFjZSwgRlhGVF9FTkNPRElOR19VTklDT0RFKTsKKyAgICB9CisgICAgaWYgKGVyciAmJiBGWEZUX0dldF9GYWNlX0NoYXJtYXBzKGZhY2UpKSB7CisgICAgICAgIEZYRlRfU2V0X0NoYXJtYXAoZmFjZSwgKkZYRlRfR2V0X0ZhY2VfQ2hhcm1hcHMoZmFjZSkpOworICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9DSURGb250OjpfTG9hZCgpCit7CisgICAgaWYgKG1fcEZvbnREaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIlN1YnR5cGUiKSkgPT0gRlhfQlNUUkMoIlRydWVUeXBlIikpIHsKKyAgICAgICAgcmV0dXJuIExvYWRHQjIzMTIoKTsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcEZvbnRzID0gbV9wRm9udERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJEZXNjZW5kYW50Rm9udHMiKSk7CisgICAgaWYgKHBGb250cyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKHBGb250cy0+R2V0Q291bnQoKSAhPSAxKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwQ0lERm9udERpY3QgPSBwRm9udHMtPkdldERpY3QoMCk7CisgICAgaWYgKHBDSURGb250RGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9CYXNlRm9udCA9IHBDSURGb250RGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJCYXNlRm9udCIpKTsKKyAgICBpZiAoKG1fQmFzZUZvbnQuQ29tcGFyZSgiQ291cmllclN0ZCIpID09IDAgfHwgbV9CYXNlRm9udC5Db21wYXJlKCJDb3VyaWVyU3RkLUJvbGQiKSA9PSAwCisgICAgICAgICAgICB8fCBtX0Jhc2VGb250LkNvbXBhcmUoIkNvdXJpZXJTdGQtQm9sZE9ibGlxdWUiKSA9PSAwIHx8IG1fQmFzZUZvbnQuQ29tcGFyZSgiQ291cmllclN0ZC1PYmxpcXVlIikgPT0gMCkKKyAgICAgICAgICAgICYmICFJc0VtYmVkZGVkKCkpIHsKKyAgICAgICAgbV9iQWRvYmVDb3VyaWVyU3RkID0gVFJVRTsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9udERlc2MgPSBwQ0lERm9udERpY3QtPkdldERpY3QoRlhfQlNUUkMoIkZvbnREZXNjcmlwdG9yIikpOworICAgIGlmIChwRm9udERlc2MpIHsKKyAgICAgICAgTG9hZEZvbnREZXNjcmlwdG9yKHBGb250RGVzYyk7CisgICAgfQorICAgIENQREZfT2JqZWN0KiBwRW5jb2RpbmcgPSBtX3BGb250RGljdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJFbmNvZGluZyIpKTsKKyAgICBpZiAocEVuY29kaW5nID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDRlhfQnl0ZVN0cmluZyBzdWJ0eXBlID0gcENJREZvbnREaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIlN1YnR5cGUiKSk7CisgICAgbV9iVHlwZTEgPSBGQUxTRTsKKyAgICBpZiAoc3VidHlwZSA9PSBGWF9CU1RSQygiQ0lERm9udFR5cGUwIikpIHsKKyAgICAgICAgbV9iVHlwZTEgPSBUUlVFOworICAgIH0KKyAgICBpZiAocEVuY29kaW5nLT5HZXRUeXBlKCkgPT0gUERGT0JKX05BTUUpIHsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY21hcCA9IHBFbmNvZGluZy0+R2V0U3RyaW5nKCk7CisgICAgICAgIG1fcENNYXAgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldFBhZ2VNb2R1bGUoKS0+R2V0Rm9udEdsb2JhbHMoKS0+bV9DTWFwTWFuYWdlci5HZXRQcmVkZWZpbmVkQ01hcChjbWFwLAorICAgICAgICAgICAgICAgICAgbV9wRm9udEZpbGUgJiYgbV9iVHlwZTEpOworICAgIH0gZWxzZSBpZiAocEVuY29kaW5nLT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUkVBTSkgeworICAgICAgICBtX3BBbGxvY2F0ZWRDTWFwID0gbV9wQ01hcCA9IEZYX05FVyBDUERGX0NNYXA7CisgICAgICAgIENQREZfU3RyZWFtKiBwU3RyZWFtID0gKENQREZfU3RyZWFtKilwRW5jb2Rpbmc7CisgICAgICAgIENQREZfU3RyZWFtQWNjIGFjYzsKKyAgICAgICAgYWNjLkxvYWRBbGxEYXRhKHBTdHJlYW0sIEZBTFNFKTsKKyAgICAgICAgbV9wQ01hcC0+TG9hZEVtYmVkZGVkKGFjYy5HZXREYXRhKCksIGFjYy5HZXRTaXplKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKG1fcENNYXAgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fQ2hhcnNldCA9IG1fcENNYXAtPm1fQ2hhcnNldDsKKyAgICBpZiAobV9DaGFyc2V0ID09IENJRFNFVF9VTktOT1dOKSB7CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcENJREluZm8gPSBwQ0lERm9udERpY3QtPkdldERpY3QoRlhfQlNUUkMoIkNJRFN5c3RlbUluZm8iKSk7CisgICAgICAgIGlmIChwQ0lESW5mbykgeworICAgICAgICAgICAgbV9DaGFyc2V0ID0gX0NoYXJzZXRGcm9tT3JkZXJpbmcocENJREluZm8tPkdldFN0cmluZyhGWF9CU1RSQygiT3JkZXJpbmciKSkpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChtX0NoYXJzZXQgIT0gQ0lEU0VUX1VOS05PV04pCisgICAgICAgIG1fcENJRDJVbmljb2RlTWFwID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRQYWdlTW9kdWxlKCktPkdldEZvbnRHbG9iYWxzKCktPm1fQ01hcE1hbmFnZXIuR2V0Q0lEMlVuaWNvZGVNYXAobV9DaGFyc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcEZvbnRGaWxlID09IE5VTEwgJiYgKG1fcENNYXAtPm1fQ29kaW5nID09IENJRENPRElOR19DSUQgfHwgcENJREZvbnREaWN0LT5LZXlFeGlzdChGWF9CU1RSQygiVyIpKSkpOworICAgIGlmIChtX0ZvbnQuR2V0RmFjZSgpKSB7CisgICAgICAgIGlmIChtX2JUeXBlMSkgeworICAgICAgICAgICAgRlhGVF9TZWxlY3RfQ2hhcm1hcChtX0ZvbnQuR2V0RmFjZSgpLCBGWEZUX0VOQ09ESU5HX1VOSUNPREUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRlRfVXNlQ0lEQ2hhcm1hcChtX0ZvbnQuR2V0RmFjZSgpLCBtX3BDTWFwLT5tX0NvZGluZyk7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9EZWZhdWx0V2lkdGggPSBwQ0lERm9udERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIkRXIiksIDEwMDApOworICAgIENQREZfQXJyYXkqIHBXaWR0aEFycmF5ID0gcENJREZvbnREaWN0LT5HZXRBcnJheShGWF9CU1RSQygiVyIpKTsKKyAgICBpZiAocFdpZHRoQXJyYXkpIHsKKyAgICAgICAgTG9hZE1ldHJpY3NBcnJheShwV2lkdGhBcnJheSwgbV9XaWR0aExpc3QsIDEpOworICAgIH0KKyAgICBpZiAoIUlzRW1iZWRkZWQoKSkgeworICAgICAgICBMb2FkU3Vic3RGb250KCk7CisgICAgfQorICAgIGlmICgxKSB7CisgICAgICAgIGlmIChtX3BGb250RmlsZSB8fCAoR2V0U3Vic3RGb250KCktPm1fU3Vic3RGbGFncyAmIEZYRk9OVF9TVUJTVF9FWEFDVCkpIHsKKyAgICAgICAgICAgIENQREZfT2JqZWN0KiBwbWFwID0gcENJREZvbnREaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkNJRFRvR0lETWFwIikpOworICAgICAgICAgICAgaWYgKHBtYXApIHsKKyAgICAgICAgICAgICAgICBpZiAocG1hcC0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJFQU0pIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wQ0lEVG9HSURNYXAgPSBGWF9ORVcgQ1BERl9TdHJlYW1BY2M7CisgICAgICAgICAgICAgICAgICAgIG1fcENJRFRvR0lETWFwLT5Mb2FkQWxsRGF0YSgoQ1BERl9TdHJlYW0qKXBtYXAsIEZBTFNFKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBtYXAtPkdldFN0cmluZygpID09IEZYX0JTVFJDKCJJZGVudGl0eSIpKSB7CisjaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfCisgICAgICAgICAgICAgICAgICAgIGlmIChtX3BGb250RmlsZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9iQ0lESXNHSUQgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBtX2JDSURJc0dJRCA9IFRSVUU7CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQ2hlY2tGb250TWV0cmljcygpOworICAgIGlmIChJc1ZlcnRXcml0aW5nKCkpIHsKKyAgICAgICAgcFdpZHRoQXJyYXkgPSBwQ0lERm9udERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJXMiIpKTsKKyAgICAgICAgaWYgKHBXaWR0aEFycmF5KSB7CisgICAgICAgICAgICBMb2FkTWV0cmljc0FycmF5KHBXaWR0aEFycmF5LCBtX1ZlcnRNZXRyaWNzLCAzKTsKKyAgICAgICAgfQorICAgICAgICBDUERGX0FycmF5KiBwRGVmYXVsdEFycmF5ID0gcENJREZvbnREaWN0LT5HZXRBcnJheShGWF9CU1RSQygiRFcyIikpOworICAgICAgICBpZiAocERlZmF1bHRBcnJheSkgeworICAgICAgICAgICAgbV9EZWZhdWx0VlkgPSBwRGVmYXVsdEFycmF5LT5HZXRJbnRlZ2VyKDApOworICAgICAgICAgICAgbV9EZWZhdWx0VzEgPSBwRGVmYXVsdEFycmF5LT5HZXRJbnRlZ2VyKDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9EZWZhdWx0VlkgPSA4ODA7CisgICAgICAgICAgICBtX0RlZmF1bHRXMSA9IC0xMDAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfRkxPQVQgX0NJRFRyYW5zZm9ybVRvRmxvYXQoRlhfQllURSBjaCkKK3sKKyAgICBpZiAoY2ggPCAxMjgpIHsKKyAgICAgICAgcmV0dXJuIGNoICogMS4wZiAvIDEyNzsKKyAgICB9CisgICAgcmV0dXJuICgtMjU1ICsgY2gpICogMS4wZiAvIDEyNzsKK30KK3ZvaWQgQ1BERl9DSURGb250OjpHZXRDaGFyQkJveChGWF9EV09SRCBjaGFyY29kZSwgRlhfUkVDVCYgcmVjdCwgaW50IGxldmVsKQoreworICAgIGlmIChjaGFyY29kZSA8IDI1NiAmJiBtX0NoYXJCQm94W2NoYXJjb2RlXS5SaWdodCAhPSAtMSkgeworICAgICAgICByZWN0LmJvdHRvbSA9IG1fQ2hhckJCb3hbY2hhcmNvZGVdLkJvdHRvbTsKKyAgICAgICAgcmVjdC5sZWZ0ID0gbV9DaGFyQkJveFtjaGFyY29kZV0uTGVmdDsKKyAgICAgICAgcmVjdC5yaWdodCA9IG1fQ2hhckJCb3hbY2hhcmNvZGVdLlJpZ2h0OworICAgICAgICByZWN0LnRvcCA9IG1fQ2hhckJCb3hbY2hhcmNvZGVdLlRvcDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGWF9CT09MIGJWZXJ0ID0gRkFMU0U7CisgICAgaW50IGdseXBoX2luZGV4ID0gR2x5cGhGcm9tQ2hhckNvZGUoY2hhcmNvZGUsICZiVmVydCk7CisgICAgaWYgKG1fRm9udC5tX0ZhY2UgPT0gTlVMTCkgeworICAgICAgICByZWN0ID0gRlhfUkVDVCgwLCAwLCAwLCAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZWN0LmxlZnQgPSByZWN0LmJvdHRvbSA9IHJlY3QucmlnaHQgPSByZWN0LnRvcCA9IDA7CisgICAgICAgIEZYRlRfRmFjZSBmYWNlID0gbV9Gb250Lm1fRmFjZTsKKyAgICAgICAgaWYgKEZYRlRfSXNfRmFjZV9Ucmlja3koZmFjZSkpIHsKKyAgICAgICAgICAgIGludCBlcnIgPSBGWEZUX0xvYWRfR2x5cGgoZmFjZSwgZ2x5cGhfaW5kZXgsIEZYRlRfTE9BRF9JR05PUkVfR0xPQkFMX0FEVkFOQ0VfV0lEVEgpOworICAgICAgICAgICAgaWYgKCFlcnIpIHsKKyAgICAgICAgICAgICAgICBGWEZUX0JCb3ggY2JveDsKKyAgICAgICAgICAgICAgICBGWEZUX0dseXBoIGdseXBoOworICAgICAgICAgICAgICAgIGVyciA9IEZYRlRfR2V0X0dseXBoKCgoRlhGVF9GYWNlKWZhY2UpLT5nbHlwaCwgJmdseXBoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWVycikgeworICAgICAgICAgICAgICAgICAgICBGWEZUX0dseXBoX0dldF9DQm94KGdseXBoLCBGWEZUX0dMWVBIX0JCT1hfUElYRUxTLCAmY2JveCk7CisgICAgICAgICAgICAgICAgICAgIGludCBwaXhlbF9zaXplX3ggPSAoKEZYRlRfRmFjZSlmYWNlKS0+c2l6ZS0+bWV0cmljcy54X3BwZW07CisgICAgICAgICAgICAgICAgICAgIGludAlwaXhlbF9zaXplX3kgPSAoKEZYRlRfRmFjZSlmYWNlKS0+c2l6ZS0+bWV0cmljcy55X3BwZW07CisgICAgICAgICAgICAgICAgICAgIGlmIChwaXhlbF9zaXplX3ggPT0gMCB8fCBwaXhlbF9zaXplX3kgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5sZWZ0ID0gY2JveC54TWluOworICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5yaWdodCA9IGNib3gueE1heDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QudG9wID0gY2JveC55TWF4OworICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBjYm94LnlNaW47CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZWN0LmxlZnQgPSBjYm94LnhNaW4gKiAxMDAwIC8gcGl4ZWxfc2l6ZV94OworICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5yaWdodCA9IGNib3gueE1heCAqIDEwMDAgLyBwaXhlbF9zaXplX3g7CisgICAgICAgICAgICAgICAgICAgICAgICByZWN0LnRvcCA9IGNib3gueU1heCAqIDEwMDAgLyBwaXhlbF9zaXplX3k7CisgICAgICAgICAgICAgICAgICAgICAgICByZWN0LmJvdHRvbSA9IGNib3gueU1pbiAqIDEwMDAgLyBwaXhlbF9zaXplX3k7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlY3QudG9wID4gRlhGVF9HZXRfRmFjZV9Bc2NlbmRlcihmYWNlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC50b3AgPSBGWEZUX0dldF9GYWNlX0FzY2VuZGVyKGZhY2UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWN0LmJvdHRvbSA8IEZYRlRfR2V0X0ZhY2VfRGVzY2VuZGVyKGZhY2UpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZWN0LmJvdHRvbSA9IEZYRlRfR2V0X0ZhY2VfRGVzY2VuZGVyKGZhY2UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEZYRlRfRG9uZV9HbHlwaChnbHlwaCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IGVyciA9IEZYRlRfTG9hZF9HbHlwaChmYWNlLCBnbHlwaF9pbmRleCwgRlhGVF9MT0FEX05PX1NDQUxFKTsKKyAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgeworICAgICAgICAgICAgICAgIHJlY3QubGVmdCA9IFRUMlBERihGWEZUX0dldF9HbHlwaF9Ib3JpQmVhcmluZ1goZmFjZSksIGZhY2UpOworICAgICAgICAgICAgICAgIHJlY3QucmlnaHQgPSBUVDJQREYoRlhGVF9HZXRfR2x5cGhfSG9yaUJlYXJpbmdYKGZhY2UpICsgRlhGVF9HZXRfR2x5cGhfV2lkdGgoZmFjZSksIGZhY2UpOworICAgICAgICAgICAgICAgIHJlY3QudG9wID0gVFQyUERGKEZYRlRfR2V0X0dseXBoX0hvcmlCZWFyaW5nWShmYWNlKSwgZmFjZSk7CisgICAgICAgICAgICAgICAgcmVjdC50b3AgKz0gcmVjdC50b3AgLyA2NDsKKyAgICAgICAgICAgICAgICByZWN0LmJvdHRvbSA9IFRUMlBERihGWEZUX0dldF9HbHlwaF9Ib3JpQmVhcmluZ1koZmFjZSkgLSBGWEZUX0dldF9HbHlwaF9IZWlnaHQoZmFjZSksIGZhY2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChtX3BGb250RmlsZSA9PSBOVUxMICYmIG1fQ2hhcnNldCA9PSBDSURTRVRfSkFQQU4xKSB7CisgICAgICAgIEZYX1dPUkQgQ0lEID0gQ0lERnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsKKyAgICAgICAgRlhfTFBDQllURSBwVHJhbnNmb3JtID0gR2V0Q0lEVHJhbnNmb3JtKENJRCk7CisgICAgICAgIGlmIChwVHJhbnNmb3JtICYmICFiVmVydCkgeworICAgICAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXgoX0NJRFRyYW5zZm9ybVRvRmxvYXQocFRyYW5zZm9ybVswXSksIF9DSURUcmFuc2Zvcm1Ub0Zsb2F0KHBUcmFuc2Zvcm1bMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NJRFRyYW5zZm9ybVRvRmxvYXQocFRyYW5zZm9ybVsyXSksIF9DSURUcmFuc2Zvcm1Ub0Zsb2F0KHBUcmFuc2Zvcm1bM10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NJRFRyYW5zZm9ybVRvRmxvYXQocFRyYW5zZm9ybVs0XSkgKiAxMDAwICwgX0NJRFRyYW5zZm9ybVRvRmxvYXQocFRyYW5zZm9ybVs1XSkgKiAxMDAwKTsKKyAgICAgICAgICAgIENGWF9GbG9hdFJlY3QgcmVjdF9mKHJlY3QpOworICAgICAgICAgICAgcmVjdF9mLlRyYW5zZm9ybSgmbWF0cml4KTsKKyAgICAgICAgICAgIHJlY3QgPSByZWN0X2YuR2V0T3V0dGVyUmVjdCgpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChjaGFyY29kZSA8IDI1NikgeworICAgICAgICBtX0NoYXJCQm94W2NoYXJjb2RlXS5Cb3R0b20gPSAoc2hvcnQpcmVjdC5ib3R0b207CisgICAgICAgIG1fQ2hhckJCb3hbY2hhcmNvZGVdLkxlZnQgPSAoc2hvcnQpcmVjdC5sZWZ0OworICAgICAgICBtX0NoYXJCQm94W2NoYXJjb2RlXS5SaWdodCA9IChzaG9ydClyZWN0LnJpZ2h0OworICAgICAgICBtX0NoYXJCQm94W2NoYXJjb2RlXS5Ub3AgPSAoc2hvcnQpcmVjdC50b3A7CisgICAgfQorfQoraW50IENQREZfQ0lERm9udDo6R2V0Q2hhcldpZHRoRihGWF9EV09SRCBjaGFyY29kZSwgaW50IGxldmVsKQoreworICAgIGlmIChtX3BBbnNpV2lkdGhzICYmIGNoYXJjb2RlIDwgMHg4MCkgeworICAgICAgICByZXR1cm4gbV9wQW5zaVdpZHRoc1tjaGFyY29kZV07CisgICAgfQorICAgIEZYX1dPUkQgY2lkID0gQ0lERnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsKKyAgICBpbnQgc2l6ZSA9IG1fV2lkdGhMaXN0LkdldFNpemUoKTsKKyAgICBGWF9EV09SRCogbGlzdCA9IG1fV2lkdGhMaXN0LkdldERhdGEoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkgKz0gMykgeworICAgICAgICBpZiAoY2lkID49IGxpc3RbaV0gJiYgY2lkIDw9IGxpc3RbaSArIDFdKSB7CisgICAgICAgICAgICByZXR1cm4gKGludClsaXN0W2kgKyAyXTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbV9EZWZhdWx0V2lkdGg7Cit9CitzaG9ydCBDUERGX0NJREZvbnQ6OkdldFZlcnRXaWR0aChGWF9XT1JEIENJRCkgY29uc3QKK3sKKyAgICBGWF9EV09SRCB2ZXJ0c2l6ZSA9IG1fVmVydE1ldHJpY3MuR2V0U2l6ZSgpIC8gNTsKKyAgICBpZiAodmVydHNpemUgPT0gMCkgeworICAgICAgICByZXR1cm4gbV9EZWZhdWx0VzE7CisgICAgfQorICAgIGNvbnN0IEZYX0RXT1JEKiBwVGFibGUgPSBtX1ZlcnRNZXRyaWNzLkdldERhdGEoKTsKKyAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgdmVydHNpemU7IGkgKyspCisgICAgICAgIGlmIChwVGFibGVbaSAqIDVdIDw9IENJRCAmJiBwVGFibGVbaSAqIDUgKyAxXSA+PSBDSUQpIHsKKyAgICAgICAgICAgIHJldHVybiAoc2hvcnQpKGludClwVGFibGVbaSAqIDUgKyAyXTsKKyAgICAgICAgfQorICAgIHJldHVybiBtX0RlZmF1bHRXMTsKK30KK3ZvaWQgQ1BERl9DSURGb250OjpHZXRWZXJ0T3JpZ2luKEZYX1dPUkQgQ0lELCBzaG9ydCYgdngsIHNob3J0ICZ2eSkgY29uc3QKK3sKKyAgICBGWF9EV09SRCB2ZXJ0c2l6ZSA9IG1fVmVydE1ldHJpY3MuR2V0U2l6ZSgpIC8gNTsKKyAgICBpZiAodmVydHNpemUpIHsKKyAgICAgICAgY29uc3QgRlhfRFdPUkQqIHBUYWJsZSA9IG1fVmVydE1ldHJpY3MuR2V0RGF0YSgpOworICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgdmVydHNpemU7IGkgKyspCisgICAgICAgICAgICBpZiAocFRhYmxlW2kgKiA1XSA8PSBDSUQgJiYgcFRhYmxlW2kgKiA1ICsgMV0gPj0gQ0lEKSB7CisgICAgICAgICAgICAgICAgdnggPSAoc2hvcnQpKGludClwVGFibGVbaSAqIDUgKyAzXTsKKyAgICAgICAgICAgICAgICB2eSA9IChzaG9ydCkoaW50KXBUYWJsZVtpICogNSArIDRdOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICB9CisgICAgRlhfRFdPUkQgZHdXaWR0aCA9IG1fRGVmYXVsdFdpZHRoOworICAgIGludCBzaXplID0gbV9XaWR0aExpc3QuR2V0U2l6ZSgpOworICAgIGNvbnN0IEZYX0RXT1JEKiBsaXN0ID0gbV9XaWR0aExpc3QuR2V0RGF0YSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSAzKSB7CisgICAgICAgIGlmIChDSUQgPj0gbGlzdFtpXSAmJiBDSUQgPD0gbGlzdFtpICsgMV0pIHsKKyAgICAgICAgICAgIGR3V2lkdGggPSAoRlhfV09SRClsaXN0W2kgKyAyXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHZ4ID0gKHNob3J0KWR3V2lkdGggLyAyOworICAgIHZ5ID0gKHNob3J0KW1fRGVmYXVsdFZZOworfQoraW50CUNQREZfQ0lERm9udDo6R2V0R2x5cGhJbmRleChGWF9EV09SRCB1bmljb2RlLCBGWF9CT09MICpwVmVydEdseXBoKQoreworICAgIGlmIChwVmVydEdseXBoKSB7CisgICAgICAgICpwVmVydEdseXBoID0gRkFMU0U7CisgICAgfQorICAgIGludCBpbmRleCA9IEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgdW5pY29kZSApOworICAgIGlmICh1bmljb2RlID09IDB4MjUwMikgeworICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgfQorICAgIGlmIChpbmRleCAmJiBJc1ZlcnRXcml0aW5nKCkpIHsKKyAgICAgICAgaWYgKG1fcFRUR1NVQlRhYmxlKSB7CisgICAgICAgICAgICBUVF91aW50MzJfdCB2aW5kZXggPSAwOworICAgICAgICAgICAgbV9wVFRHU1VCVGFibGUtPkdldFZlcnRpY2FsR2x5cGgoaW5kZXgsICZ2aW5kZXgpOworICAgICAgICAgICAgaWYgKHZpbmRleCkgeworICAgICAgICAgICAgICAgIGluZGV4ID0gdmluZGV4OworICAgICAgICAgICAgICAgIGlmIChwVmVydEdseXBoKSB7CisgICAgICAgICAgICAgICAgICAgICpwVmVydEdseXBoID0gVFJVRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKE5VTEwgPT0gbV9Gb250Lm1fcEdzdWJEYXRhKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCA9IDA7CisgICAgICAgICAgICBpbnQgZXJyb3IgPSBGWEZUX0xvYWRfU2ZudF9UYWJsZSggbV9Gb250Lm1fRmFjZSwgRlRfTUFLRV9UQUcoJ0cnLCAnUycsICdVJywgJ0InKSwgMCwgTlVMTCwgJmxlbmd0aCk7CisgICAgICAgICAgICBpZiAoIWVycm9yKSB7CisgICAgICAgICAgICAgICAgbV9Gb250Lm1fcEdzdWJEYXRhID0gKHVuc2lnbmVkIGNoYXIqKUZYX0FsbG9jKEZYX0JZVEUsIGxlbmd0aCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaW50IGVycm9yID0gRlhGVF9Mb2FkX1NmbnRfVGFibGUoIG1fRm9udC5tX0ZhY2UsIEZUX01BS0VfVEFHKCdHJywgJ1MnLCAnVScsICdCJyksIDAsIG1fRm9udC5tX3BHc3ViRGF0YSwgTlVMTCk7CisgICAgICAgIGlmICghZXJyb3IgJiYgbV9Gb250Lm1fcEdzdWJEYXRhKSB7CisgICAgICAgICAgICBtX3BUVEdTVUJUYWJsZSA9IEZYX05FVyBDRlhfQ1RUR1NVQlRhYmxlOworICAgICAgICAgICAgbV9wVFRHU1VCVGFibGUtPkxvYWRHU1VCVGFibGUoKEZUX0J5dGVzKW1fRm9udC5tX3BHc3ViRGF0YSk7CisgICAgICAgICAgICBUVF91aW50MzJfdCB2aW5kZXggPSAwOworICAgICAgICAgICAgbV9wVFRHU1VCVGFibGUtPkdldFZlcnRpY2FsR2x5cGgoaW5kZXgsICZ2aW5kZXgpOworICAgICAgICAgICAgaWYgKHZpbmRleCkgeworICAgICAgICAgICAgICAgIGluZGV4ID0gdmluZGV4OworICAgICAgICAgICAgICAgIGlmIChwVmVydEdseXBoKSB7CisgICAgICAgICAgICAgICAgICAgICpwVmVydEdseXBoID0gVFJVRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGluZGV4OworICAgIH0KKyAgICBpZiAocFZlcnRHbHlwaCkgeworICAgICAgICAqcFZlcnRHbHlwaCA9IEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gaW5kZXg7Cit9CitpbnQgQ1BERl9DSURGb250OjpHbHlwaEZyb21DaGFyQ29kZShGWF9EV09SRCBjaGFyY29kZSwgRlhfQk9PTCAqcFZlcnRHbHlwaCkKK3sKKyAgICBpZiAocFZlcnRHbHlwaCkgeworICAgICAgICAqcFZlcnRHbHlwaCA9IEZBTFNFOworICAgIH0KKyAgICBpZiAobV9wRm9udEZpbGUgPT0gTlVMTCAmJiBtX3BDSURUb0dJRE1hcCA9PSBOVUxMKSB7CisgICAgICAgIEZYX1dPUkQgY2lkID0gQ0lERnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsKKyAgICAgICAgRlhfV0NIQVIgdW5pY29kZSA9IDA7CisgICAgICAgIGlmIChtX2JDSURJc0dJRCkgeworI2lmIF9GWE1fUExBVEZPUk1fICE9IF9GWE1fUExBVEZPUk1fQVBQTEVfCisgICAgICAgICAgICByZXR1cm4gY2lkOworI2Vsc2UKKyAgICAgICAgICAgIGlmIChtX0ZsYWdzICYgUERGRk9OVF9TWU1CT0xJQykgeworICAgICAgICAgICAgICAgIHJldHVybiBjaWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyB1bmlfc3RyID0gVW5pY29kZUZyb21DaGFyQ29kZShjaGFyY29kZSk7CisgICAgICAgICAgICBpZiAodW5pX3N0ci5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2lkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdW5pY29kZSA9IHVuaV9zdHIuR2V0QXQoMCk7CisjZW5kaWYKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChjaWQgJiYgbV9wQ0lEMlVuaWNvZGVNYXAgJiYgbV9wQ0lEMlVuaWNvZGVNYXAtPklzTG9hZGVkKCkpIHsKKyAgICAgICAgICAgICAgICB1bmljb2RlID0gbV9wQ0lEMlVuaWNvZGVNYXAtPlVuaWNvZGVGcm9tQ0lEKGNpZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodW5pY29kZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgdW5pY29kZSA9IF9Vbmljb2RlRnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh1bmljb2RlID09IDAgJiYgIShtX0ZsYWdzICYgUERGRk9OVF9TWU1CT0xJQykpIHsKKyAgICAgICAgICAgICAgICB1bmljb2RlID0gVW5pY29kZUZyb21DaGFyQ29kZShjaGFyY29kZSkuR2V0QXQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVuaWNvZGUgPT0gMCkgeworICAgICAgICAgICAgaWYgKCFtX2JBZG9iZUNvdXJpZXJTdGQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hhcmNvZGUgPT0gMCA/IC0xIDogKGludCljaGFyY29kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoYXJjb2RlICs9IDMxOworICAgICAgICAgICAgaW50IGluZGV4ID0gMCwgaUJhc2VFbmNvZGluZzsKKyAgICAgICAgICAgIEZYX0JPT0wgYk1TVW5pY29kZSA9IEZUX1VzZVRUQ2hhcm1hcChtX0ZvbnQubV9GYWNlLCAzLCAxKTsKKyAgICAgICAgICAgIEZYX0JPT0wgYk1hY1JvbWFuID0gRkFMU0U7CisgICAgICAgICAgICBpZiAoIWJNU1VuaWNvZGUpIHsKKyAgICAgICAgICAgICAgICBiTWFjUm9tYW4gPSBGVF9Vc2VUVENoYXJtYXAobV9Gb250Lm1fRmFjZSwgMSwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpQmFzZUVuY29kaW5nID0gUERGRk9OVF9FTkNPRElOR19TVEFOREFSRDsKKyAgICAgICAgICAgIGlmIChiTVNVbmljb2RlKSB7CisgICAgICAgICAgICAgICAgaUJhc2VFbmNvZGluZyA9IFBERkZPTlRfRU5DT0RJTkdfV0lOQU5TSTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYk1hY1JvbWFuKSB7CisgICAgICAgICAgICAgICAgaUJhc2VFbmNvZGluZyA9IFBERkZPTlRfRU5DT0RJTkdfTUFDUk9NQU47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9MUENTVFIgbmFtZSA9IEdldEFkb2JlQ2hhck5hbWUoaUJhc2VFbmNvZGluZywgTlVMTCwgY2hhcmNvZGUpOworICAgICAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiBjaGFyY29kZSA9PSAwID8gLTEgOiAoaW50KWNoYXJjb2RlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfV09SRCB1bmljb2RlID0gUERGX1VuaWNvZGVGcm9tQWRvYmVOYW1lKG5hbWUpOworICAgICAgICAgICAgaWYgKHVuaWNvZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoYk1TVW5pY29kZSkgeworICAgICAgICAgICAgICAgICAgICBpbmRleCA9IEZYRlRfR2V0X0NoYXJfSW5kZXgobV9Gb250Lm1fRmFjZSwgdW5pY29kZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiTWFjUm9tYW4pIHsKKyAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgbWFjY29kZSA9IEZUX0NoYXJDb2RlRnJvbVVuaWNvZGUoRlhGVF9FTkNPRElOR19BUFBMRV9ST01BTiwgdW5pY29kZSk7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gIW1hY2NvZGUgPyBGWEZUX0dldF9OYW1lX0luZGV4KG1fRm9udC5tX0ZhY2UsIChjaGFyICopbmFtZSkgOiBGWEZUX0dldF9DaGFyX0luZGV4KG1fRm9udC5tX0ZhY2UsIG1hY2NvZGUpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGWEZUX0dldF9DaGFyX0luZGV4KG1fRm9udC5tX0ZhY2UsIHVuaWNvZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJjb2RlID09IDAgPyAtMSA6IChpbnQpY2hhcmNvZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaW5kZXggPT0gMCB8fCBpbmRleCA9PSAweGZmZmYpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hhcmNvZGUgPT0gMCA/IC0xIDogKGludCljaGFyY29kZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChtX0NoYXJzZXQgPT0gQ0lEU0VUX0pBUEFOMSkgeworICAgICAgICAgICAgaWYgKHVuaWNvZGUgPT0gJ1xcJykgeworICAgICAgICAgICAgICAgIHVuaWNvZGUgPSAnLyc7CisgICAgICAgICAgICB9CisjaWYgIWRlZmluZWQoX0ZQREZBUElfTUlOSV8pICYmIF9GWE1fUExBVEZPUk1fICE9IF9GWE1fUExBVEZPUk1fQVBQTEVfCisgICAgICAgICAgICBlbHNlIGlmICh1bmljb2RlID09IDB4YTUpIHsKKyAgICAgICAgICAgICAgICB1bmljb2RlID0gMHg1YzsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGlmIChtX0ZvbnQubV9GYWNlID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiB1bmljb2RlOworICAgICAgICB9CisgICAgICAgIGludCBlcnIgPSBGWEZUX1NlbGVjdF9DaGFybWFwKG1fRm9udC5tX0ZhY2UsIEZYRlRfRU5DT0RJTkdfVU5JQ09ERSk7CisgICAgICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgRlhGVF9HZXRfRmFjZV9DaGFybWFwQ291bnQobV9Gb250Lm1fRmFjZSk7IGkgKyspIHsKKyAgICAgICAgICAgICAgICBGWF9EV09SRCByZXQgPSBGVF9DaGFyQ29kZUZyb21Vbmljb2RlKEZYRlRfR2V0X0NoYXJtYXBfRW5jb2RpbmcoRlhGVF9HZXRfRmFjZV9DaGFybWFwcyhtX0ZvbnQubV9GYWNlKVtpXSksIChGWF9XQ0hBUiljaGFyY29kZSk7CisgICAgICAgICAgICAgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBGWEZUX1NldF9DaGFybWFwKG1fRm9udC5tX0ZhY2UsIEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcHMobV9Gb250Lm1fRmFjZSlbaV0pOworICAgICAgICAgICAgICAgIHVuaWNvZGUgPSAoRlhfV0NIQVIpcmV0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGkgPT0gRlhGVF9HZXRfRmFjZV9DaGFybWFwQ291bnQobV9Gb250Lm1fRmFjZSkgJiYgaSkgeworICAgICAgICAgICAgICAgIEZYRlRfU2V0X0NoYXJtYXAobV9Gb250Lm1fRmFjZSwgRlhGVF9HZXRfRmFjZV9DaGFybWFwcyhtX0ZvbnQubV9GYWNlKVswXSk7CisgICAgICAgICAgICAgICAgdW5pY29kZSA9IChGWF9XQ0hBUiljaGFyY29kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoRlhGVF9HZXRfRmFjZV9DaGFybWFwKG1fRm9udC5tX0ZhY2UpKSB7CisgICAgICAgICAgICBpbnQgaW5kZXggPSBHZXRHbHlwaEluZGV4KHVuaWNvZGUsIHBWZXJ0R2x5cGgpOworICAgICAgICAgICAgaWYgKGluZGV4ID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHVuaWNvZGUgOworICAgIH0KKyAgICBpZiAobV9Gb250Lm1fRmFjZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgRlhfV09SRCBjaWQgPSBDSURGcm9tQ2hhckNvZGUoY2hhcmNvZGUpOworICAgIGlmIChtX2JUeXBlMSkgeworICAgICAgICBpZiAoTlVMTCA9PSBtX3BDSURUb0dJRE1hcCkgeworICAgICAgICAgICAgcmV0dXJuIGNpZDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3BDSURUb0dJRE1hcCA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAobV9wRm9udEZpbGUgJiYgbV9wQ01hcC0+bV9wTWFwcGluZyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNpZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX3BDTWFwLT5tX0NvZGluZyA9PSBDSURDT0RJTkdfVU5LTk9XTiB8fCBGWEZUX0dldF9GYWNlX0NoYXJtYXAobV9Gb250Lm1fRmFjZSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiBjaWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoRlhGVF9HZXRfQ2hhcm1hcF9FbmNvZGluZyhGWEZUX0dldF9GYWNlX0NoYXJtYXAobV9Gb250Lm1fRmFjZSkpID09IEZYRlRfRU5DT0RJTkdfVU5JQ09ERSkgeworICAgICAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIHVuaWNvZGVfc3RyID0gVW5pY29kZUZyb21DaGFyQ29kZShjaGFyY29kZSk7CisgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfc3RyLklzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNoYXJjb2RlID0gdW5pY29kZV9zdHIuR2V0QXQoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gR2V0R2x5cGhJbmRleChjaGFyY29kZSwgcFZlcnRHbHlwaCk7CisgICAgICAgIH0KKyAgICB9CisgICAgRlhfRFdPUkQgYnl0ZV9wb3MgPSBjaWQgKiAyOworICAgIGlmIChieXRlX3BvcyArIDIgPiBtX3BDSURUb0dJRE1hcC0+R2V0U2l6ZSgpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgRlhfTFBDQllURSBwZGF0YSA9IG1fcENJRFRvR0lETWFwLT5HZXREYXRhKCkgKyBieXRlX3BvczsKKyAgICByZXR1cm4gcGRhdGFbMF0gKiAyNTYgKyBwZGF0YVsxXTsKK30KK0ZYX0RXT1JEIENQREZfQ0lERm9udDo6R2V0TmV4dENoYXIoRlhfTFBDU1RSIHBTdHJpbmcsIGludCYgb2Zmc2V0KSBjb25zdAoreworICAgIHJldHVybiBtX3BDTWFwLT5HZXROZXh0Q2hhcihwU3RyaW5nLCBvZmZzZXQpOworfQoraW50IENQREZfQ0lERm9udDo6R2V0Q2hhclNpemUoRlhfRFdPUkQgY2hhcmNvZGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcENNYXAtPkdldENoYXJTaXplKGNoYXJjb2RlKTsKK30KK2ludCBDUERGX0NJREZvbnQ6OkNvdW50Q2hhcihGWF9MUENTVFIgcFN0cmluZywgaW50IHNpemUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcENNYXAtPkNvdW50Q2hhcihwU3RyaW5nLCBzaXplKTsKK30KK2ludCBDUERGX0NJREZvbnQ6OkFwcGVuZENoYXIoRlhfTFBTVFIgc3RyLCBGWF9EV09SRCBjaGFyY29kZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wQ01hcC0+QXBwZW5kQ2hhcihzdHIsIGNoYXJjb2RlKTsKK30KK0ZYX0JPT0wgQ1BERl9DSURGb250OjpJc1VuaWNvZGVDb21wYXRpYmxlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcENNYXAtPklzTG9hZGVkKCkgfHwgbV9wQ0lEMlVuaWNvZGVNYXAgPT0gTlVMTCB8fCAhbV9wQ0lEMlVuaWNvZGVNYXAtPklzTG9hZGVkKCkpIHsKKyAgICAgICAgcmV0dXJuIG1fcENNYXAtPm1fQ29kaW5nICE9IENJRENPRElOR19VTktOT1dOOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ1BERl9DSURGb250OjpJc0ZvbnRTdHlsZUZyb21DaGFyQ29kZShGWF9EV09SRCBjaGFyY29kZSkgY29uc3QKK3sKKyAgICByZXR1cm4gVFJVRTsKK30KK3ZvaWQgQ1BERl9DSURGb250OjpMb2FkU3Vic3RGb250KCkKK3sKKyAgICBtX0ZvbnQuTG9hZFN1YnN0KG1fQmFzZUZvbnQsICFtX2JUeXBlMSwgbV9GbGFncywgbV9TdGVtViAqIDUsIG1fSXRhbGljQW5nbGUsIGdfQ2hhcnNldENQc1ttX0NoYXJzZXRdLCBJc1ZlcnRXcml0aW5nKCkpOworfQordm9pZCBDUERGX0NJREZvbnQ6OkxvYWRNZXRyaWNzQXJyYXkoQ1BERl9BcnJheSogcEFycmF5LCBDRlhfRFdvcmRBcnJheSYgcmVzdWx0LCBpbnQgbkVsZW1lbnRzKQoreworICAgIGludCB3aWR0aF9zdGF0dXMgPSAwOworICAgIGludCBpQ3VyRWxlbWVudCA9IDA7CisgICAgaW50IGZpcnN0X2NvZGUgPSAwLCBsYXN0X2NvZGU7CisgICAgRlhfRFdPUkQgY291bnQgPSBwQXJyYXktPkdldENvdW50KCk7CisgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IGNvdW50OyBpICsrKSB7CisgICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gcEFycmF5LT5HZXRFbGVtZW50VmFsdWUoaSk7CisgICAgICAgIGlmIChwT2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChwT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgICAgICBpZiAod2lkdGhfc3RhdHVzICE9IDEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSAoQ1BERl9BcnJheSopcE9iajsKKyAgICAgICAgICAgIEZYX0RXT1JEIGNvdW50ID0gcEFycmF5LT5HZXRDb3VudCgpOworICAgICAgICAgICAgZm9yIChGWF9EV09SRCBqID0gMDsgaiA8IGNvdW50OyBqICs9IG5FbGVtZW50cykgeworICAgICAgICAgICAgICAgIHJlc3VsdC5BZGQoZmlyc3RfY29kZSk7CisgICAgICAgICAgICAgICAgcmVzdWx0LkFkZChmaXJzdF9jb2RlKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IG5FbGVtZW50czsgayArKykgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQuQWRkKHBBcnJheS0+R2V0SW50ZWdlcihqICsgaykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmaXJzdF9jb2RlICsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2lkdGhfc3RhdHVzID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh3aWR0aF9zdGF0dXMgPT0gMCkgeworICAgICAgICAgICAgICAgIGZpcnN0X2NvZGUgPSBwT2JqLT5HZXRJbnRlZ2VyKCk7CisgICAgICAgICAgICAgICAgd2lkdGhfc3RhdHVzID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAod2lkdGhfc3RhdHVzID09IDEpIHsKKyAgICAgICAgICAgICAgICBsYXN0X2NvZGUgPSBwT2JqLT5HZXRJbnRlZ2VyKCk7CisgICAgICAgICAgICAgICAgd2lkdGhfc3RhdHVzID0gMjsKKyAgICAgICAgICAgICAgICBpQ3VyRWxlbWVudCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghaUN1ckVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LkFkZChmaXJzdF9jb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LkFkZChsYXN0X2NvZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXN1bHQuQWRkKHBPYmotPkdldEludGVnZXIoKSk7CisgICAgICAgICAgICAgICAgaUN1ckVsZW1lbnQgKys7CisgICAgICAgICAgICAgICAgaWYgKGlDdXJFbGVtZW50ID09IG5FbGVtZW50cykgeworICAgICAgICAgICAgICAgICAgICB3aWR0aF9zdGF0dXMgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9DSURGb250OjpMb2FkR0IyMzEyKCkKK3sKKyAgICBtX0Jhc2VGb250ID0gbV9wRm9udERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiQmFzZUZvbnQiKSk7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9udERlc2MgPSBtX3BGb250RGljdC0+R2V0RGljdChGWF9CU1RSQygiRm9udERlc2NyaXB0b3IiKSk7CisgICAgaWYgKHBGb250RGVzYykgeworICAgICAgICBMb2FkRm9udERlc2NyaXB0b3IocEZvbnREZXNjKTsKKyAgICB9CisgICAgbV9DaGFyc2V0ID0gQ0lEU0VUX0dCMTsKKyAgICBtX2JUeXBlMSA9IEZBTFNFOworICAgIG1fcENNYXAgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldFBhZ2VNb2R1bGUoKS0+R2V0Rm9udEdsb2JhbHMoKS0+bV9DTWFwTWFuYWdlci5HZXRQcmVkZWZpbmVkQ01hcCgKKyAgICAgICAgICAgICAgICAgIEZYX0JTVFJDKCJHQkstRVVDLUgiKSwgRkFMU0UpOworICAgIG1fcENJRDJVbmljb2RlTWFwID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRQYWdlTW9kdWxlKCktPkdldEZvbnRHbG9iYWxzKCktPm1fQ01hcE1hbmFnZXIuR2V0Q0lEMlVuaWNvZGVNYXAobV9DaGFyc2V0LCBGQUxTRSk7CisgICAgaWYgKCFJc0VtYmVkZGVkKCkpIHsKKyAgICAgICAgTG9hZFN1YnN0Rm9udCgpOworICAgIH0KKyAgICBDaGVja0ZvbnRNZXRyaWNzKCk7CisgICAgbV9EZWZhdWx0V2lkdGggPSAxMDAwOworICAgIG1fcEFuc2lXaWR0aHMgPSBGWF9BbGxvYyhGWF9XT1JELCAxMjgpOworICAgIEZYU1lTX21lbXNldDMyKG1fcEFuc2lXaWR0aHMsIDAsIDEyOCAqIHNpemVvZihGWF9XT1JEKSk7CisgICAgZm9yIChpbnQgaSA9IDMyOyBpIDwgMTI3OyBpICsrKSB7CisgICAgICAgIG1fcEFuc2lXaWR0aHNbaV0gPSA1MDA7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorY29uc3Qgc3RydWN0IF9DSURUcmFuc2Zvcm0geworICAgIEZYX1dPUkQJCUNJRDsKKyAgICBGWF9CWVRFCQlhLCBiLCBjLCBkLCBlLCBmOworfQorSmFwYW4xX1ZlcnRDSURzW10gPSB7CisgICAgezk3LCAxMjksIDAsIDAsIDEyNywgNTUsIDB9LAorICAgIHs3ODg3LCAxMjcsIDAsIDAsIDEyNywgNzYsIDg5fSwKKyAgICB7Nzg4OCwgMTI3LCAwLCAwLCAxMjcsIDc5LCA5NH0sCisgICAgezc4ODksIDAsIDEyOSwgMTI3LCAwLCAxNywgMTI3fSwKKyAgICB7Nzg5MCwgMCwgMTI5LCAxMjcsIDAsIDE3LCAxMjd9LAorICAgIHs3ODkxLCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sCisgICAgezc4OTIsIDAsIDEyOSwgMTI3LCAwLCAxNywgMTI3fSwKKyAgICB7Nzg5MywgMCwgMTI5LCAxMjcsIDAsIDE3LCAxMjd9LAorICAgIHs3ODk0LCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sCisgICAgezc4OTUsIDAsIDEyOSwgMTI3LCAwLCAxNywgMTI3fSwKKyAgICB7Nzg5NiwgMCwgMTI5LCAxMjcsIDAsIDE3LCAxMjd9LAorICAgIHs3ODk3LCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sCisgICAgezc4OTgsIDAsIDEyOSwgMTI3LCAwLCAxNywgMTI3fSwKKyAgICB7Nzg5OSwgMCwgMTI5LCAxMjcsIDAsIDE3LCAxMDR9LAorICAgIHs3OTAwLCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sCisgICAgezc5MDEsIDAsIDEyOSwgMTI3LCAwLCAxNywgMTA0fSwKKyAgICB7NzkwMiwgMCwgMTI5LCAxMjcsIDAsIDE3LCAxMjd9LAorICAgIHs3OTAzLCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sCisgICAgezc5MDQsIDAsIDEyOSwgMTI3LCAwLCAxNywgMTI3fSwKKyAgICB7NzkwNSwgMCwgMTI5LCAxMjcsIDAsIDE3LCAxMTR9LAorICAgIHs3OTA2LCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sCisgICAgezc5MDcsIDAsIDEyOSwgMTI3LCAwLCAxNywgMTI3fSwKKyAgICB7NzkwOCwgMCwgMTI5LCAxMjcsIDAsIDE3LCAxMjd9LAorICAgIHs3OTA5LCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sCisgICAgezc5MTAsIDAsIDEyOSwgMTI3LCAwLCAxNywgMTI3fSwKKyAgICB7NzkxMSwgMCwgMTI5LCAxMjcsIDAsIDE3LCAxMjd9LAorICAgIHs3OTEyLCAwLCAxMjksIDEyNywgMCwgMTcsIDEyN30sCisgICAgezc5MTMsIDAsIDEyOSwgMTI3LCAwLCAxNywgMTI3fSwKKyAgICB7NzkxNCwgMCwgMTI5LCAxMjcsIDAsIDE3LCAxMjd9LAorICAgIHs3OTE1LCAwLCAxMjksIDEyNywgMCwgMTcsIDExNH0sCisgICAgezc5MTYsIDAsIDEyOSwgMTI3LCAwLCAxNywgMTI3fSwKKyAgICB7NzkxNywgMCwgMTI5LCAxMjcsIDAsIDE3LCAxMjd9LAorICAgIHs3OTE4LCAxMjcsIDAsIDAsIDEyNywgMTgsIDI1fSwKKyAgICB7NzkxOSwgMTI3LCAwLCAwLCAxMjcsIDE4LCAyNX0sCisgICAgezc5MjAsIDEyNywgMCwgMCwgMTI3LCAxOCwgMjV9LAorICAgIHs3OTIxLCAxMjcsIDAsIDAsIDEyNywgMTgsIDI1fSwKKyAgICB7NzkyMiwgMTI3LCAwLCAwLCAxMjcsIDE4LCAyNX0sCisgICAgezc5MjMsIDEyNywgMCwgMCwgMTI3LCAxOCwgMjV9LAorICAgIHs3OTI0LCAxMjcsIDAsIDAsIDEyNywgMTgsIDI1fSwKKyAgICB7NzkyNSwgMTI3LCAwLCAwLCAxMjcsIDE4LCAyNX0sCisgICAgezc5MjYsIDEyNywgMCwgMCwgMTI3LCAxOCwgMjV9LAorICAgIHs3OTI3LCAxMjcsIDAsIDAsIDEyNywgMTgsIDI1fSwKKyAgICB7NzkyOCwgMTI3LCAwLCAwLCAxMjcsIDE4LCAyNX0sCisgICAgezc5MjksIDEyNywgMCwgMCwgMTI3LCAxOCwgMjV9LAorICAgIHs3OTMwLCAxMjcsIDAsIDAsIDEyNywgMTgsIDI1fSwKKyAgICB7NzkzMSwgMTI3LCAwLCAwLCAxMjcsIDE4LCAyNX0sCisgICAgezc5MzIsIDEyNywgMCwgMCwgMTI3LCAxOCwgMjV9LAorICAgIHs3OTMzLCAxMjcsIDAsIDAsIDEyNywgMTgsIDI1fSwKKyAgICB7NzkzNCwgMTI3LCAwLCAwLCAxMjcsIDE4LCAyNX0sCisgICAgezc5MzUsIDEyNywgMCwgMCwgMTI3LCAxOCwgMjV9LAorICAgIHs3OTM2LCAxMjcsIDAsIDAsIDEyNywgMTgsIDI1fSwKKyAgICB7NzkzNywgMTI3LCAwLCAwLCAxMjcsIDE4LCAyNX0sCisgICAgezc5MzgsIDEyNywgMCwgMCwgMTI3LCAxOCwgMjV9LAorICAgIHs3OTM5LCAxMjcsIDAsIDAsIDEyNywgMTgsIDI1fSwKKyAgICB7ODcyMCwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDJ9LAorICAgIHs4NzIxLCAwLCAxMjksIDEyNywgMCwgMTMsIDEyN30sCisgICAgezg3MjIsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwKKyAgICB7ODcyMywgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDJ9LAorICAgIHs4NzI0LCAwLCAxMjksIDEyNywgMCwgMTksIDEwMn0sCisgICAgezg3MjUsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwKKyAgICB7ODcyNiwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDJ9LAorICAgIHs4NzI3LCAwLCAxMjksIDEyNywgMCwgMTksIDEwMn0sCisgICAgezg3MjgsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTE0fSwKKyAgICB7ODcyOSwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMTR9LAorICAgIHs4NzMwLCAwLCAxMjksIDEyNywgMCwgMzgsIDEwOH0sCisgICAgezg3MzEsIDAsIDEyOSwgMTI3LCAwLCAxMywgMTA4fSwKKyAgICB7ODczMiwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDh9LAorICAgIHs4NzMzLCAwLCAxMjksIDEyNywgMCwgMTksIDEwOH0sCisgICAgezg3MzQsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwKKyAgICB7ODczNSwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDh9LAorICAgIHs4NzM2LCAwLCAxMjksIDEyNywgMCwgMTksIDEwMn0sCisgICAgezg3MzcsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwKKyAgICB7ODczOCwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDJ9LAorICAgIHs4NzM5LCAwLCAxMjksIDEyNywgMCwgMTksIDEwMn0sCisgICAgezg3NDAsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwKKyAgICB7ODc0MSwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDJ9LAorICAgIHs4NzQyLCAwLCAxMjksIDEyNywgMCwgMTksIDEwMn0sCisgICAgezg3NDMsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwKKyAgICB7ODc0NCwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDJ9LAorICAgIHs4NzQ1LCAwLCAxMjksIDEyNywgMCwgMTksIDEwMn0sCisgICAgezg3NDYsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTE0fSwKKyAgICB7ODc0NywgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMTR9LAorICAgIHs4NzQ4LCAwLCAxMjksIDEyNywgMCwgMTksIDEwMn0sCisgICAgezg3NDksIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwKKyAgICB7ODc1MCwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDJ9LAorICAgIHs4NzUxLCAwLCAxMjksIDEyNywgMCwgMTksIDEwMn0sCisgICAgezg3NTIsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwKKyAgICB7ODc1MywgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDJ9LAorICAgIHs4NzU0LCAwLCAxMjksIDEyNywgMCwgMTksIDEwMn0sCisgICAgezg3NTUsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwKKyAgICB7ODc1NiwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDJ9LAorICAgIHs4NzU3LCAwLCAxMjksIDEyNywgMCwgMTksIDEwMn0sCisgICAgezg3NTgsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwKKyAgICB7ODc1OSwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDJ9LAorICAgIHs4NzYwLCAwLCAxMjksIDEyNywgMCwgMTksIDEwMn0sCisgICAgezg3NjEsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwKKyAgICB7ODc2MiwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDJ9LAorICAgIHs4NzYzLCAwLCAxMjksIDEyNywgMCwgMTksIDEwMn0sCisgICAgezg3NjQsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwKKyAgICB7ODc2NSwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDJ9LAorICAgIHs4NzY2LCAwLCAxMjksIDEyNywgMCwgMTksIDEwMn0sCisgICAgezg3NjcsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwKKyAgICB7ODc2OCwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDJ9LAorICAgIHs4NzY5LCAwLCAxMjksIDEyNywgMCwgMTksIDEwMn0sCisgICAgezg3NzAsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwKKyAgICB7ODc3MSwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDJ9LAorICAgIHs4NzcyLCAwLCAxMjksIDEyNywgMCwgMTksIDEwMn0sCisgICAgezg3NzMsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwKKyAgICB7ODc3NCwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDJ9LAorICAgIHs4Nzc1LCAwLCAxMjksIDEyNywgMCwgMTksIDEwMn0sCisgICAgezg3NzYsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwKKyAgICB7ODc3NywgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDJ9LAorICAgIHs4Nzc4LCAwLCAxMjksIDEyNywgMCwgMTksIDEwMn0sCisgICAgezg3NzksIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTE0fSwKKyAgICB7ODc4MCwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDh9LAorICAgIHs4NzgxLCAwLCAxMjksIDEyNywgMCwgMTksIDExNH0sCisgICAgezg3ODIsIDAsIDEyOSwgMTI3LCAwLCAxMywgMTE0fSwKKyAgICB7ODc4MywgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDh9LAorICAgIHs4Nzg0LCAwLCAxMjksIDEyNywgMCwgMTMsIDExNH0sCisgICAgezg3ODUsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwKKyAgICB7ODc4NiwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDh9LAorICAgIHs4Nzg3LCAwLCAxMjksIDEyNywgMCwgMTksIDEwOH0sCisgICAgezg3ODgsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwKKyAgICB7ODc4OSwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDh9LAorICAgIHs4NzkwLCAwLCAxMjksIDEyNywgMCwgMTksIDEwOH0sCisgICAgezg3OTEsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwKKyAgICB7ODc5MiwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDh9LAorICAgIHs4NzkzLCAwLCAxMjksIDEyNywgMCwgMTksIDEwOH0sCisgICAgezg3OTQsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwKKyAgICB7ODc5NSwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDh9LAorICAgIHs4Nzk2LCAwLCAxMjksIDEyNywgMCwgMTksIDEwOH0sCisgICAgezg3OTcsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwKKyAgICB7ODc5OCwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDh9LAorICAgIHs4Nzk5LCAwLCAxMjksIDEyNywgMCwgMTksIDEwOH0sCisgICAgezg4MDAsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwKKyAgICB7ODgwMSwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDh9LAorICAgIHs4ODAyLCAwLCAxMjksIDEyNywgMCwgMTksIDEwOH0sCisgICAgezg4MDMsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwKKyAgICB7ODgwNCwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDh9LAorICAgIHs4ODA1LCAwLCAxMjksIDEyNywgMCwgMTksIDEwOH0sCisgICAgezg4MDYsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwKKyAgICB7ODgwNywgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDh9LAorICAgIHs4ODA4LCAwLCAxMjksIDEyNywgMCwgMTksIDEwOH0sCisgICAgezg4MDksIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTA4fSwKKyAgICB7ODgxMCwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMDh9LAorICAgIHs4ODExLCAwLCAxMjksIDEyNywgMCwgMTksIDExNH0sCisgICAgezg4MTIsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTAyfSwKKyAgICB7ODgxMywgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMTR9LAorICAgIHs4ODE0LCAwLCAxMjksIDEyNywgMCwgNzYsIDEwMn0sCisgICAgezg4MTUsIDAsIDEyOSwgMTI3LCAwLCAxMywgMTIxfSwKKyAgICB7ODgxNiwgMCwgMTI5LCAxMjcsIDAsIDE5LCAxMTR9LAorICAgIHs4ODE3LCAwLCAxMjksIDEyNywgMCwgMTksIDEyN30sCisgICAgezg4MTgsIDAsIDEyOSwgMTI3LCAwLCAxOSwgMTE0fSwKKyAgICB7ODgxOSwgMCwgMTI5LCAxMjcsIDAsIDIxOCwgMTA4fSwKK307CitGWF9MUENCWVRFIENQREZfQ0lERm9udDo6R2V0Q0lEVHJhbnNmb3JtKEZYX1dPUkQgQ0lEKSBjb25zdAoreworICAgIGlmIChtX0NoYXJzZXQgIT0gQ0lEU0VUX0pBUEFOMSB8fCBtX3BGb250RmlsZSAhPSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpbnQgYmVnaW4gPSAwOworICAgIGludCBlbmQgPSBzaXplb2YgSmFwYW4xX1ZlcnRDSURzIC8gc2l6ZW9mKHN0cnVjdCBfQ0lEVHJhbnNmb3JtKSAtIDE7CisgICAgd2hpbGUgKGJlZ2luIDw9IGVuZCkgeworICAgICAgICBpbnQgbWlkZGxlID0gKGJlZ2luICsgZW5kKSAvIDI7CisgICAgICAgIEZYX1dPUkQgbWlkZGxlY29kZSA9IEphcGFuMV9WZXJ0Q0lEc1ttaWRkbGVdLkNJRDsKKyAgICAgICAgaWYgKG1pZGRsZWNvZGUgPiBDSUQpIHsKKyAgICAgICAgICAgIGVuZCA9IG1pZGRsZSAtIDE7CisgICAgICAgIH0gZWxzZSBpZiAobWlkZGxlY29kZSA8IENJRCkgeworICAgICAgICAgICAgYmVnaW4gPSBtaWRkbGUgKyAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuICZKYXBhbjFfVmVydENJRHNbbWlkZGxlXS5hOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2ZvbnQvZnBkZl9mb250X3V0aWxpdHkuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2ZvbnQvZnBkZl9mb250X3V0aWxpdHkuY3BwCmluZGV4IDc4MTBmZTguLmIxMGJmZjcgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9mb250L2ZwZGZfZm9udF91dGlsaXR5LmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfZm9udC9mcGRmX2ZvbnRfdXRpbGl0eS5jcHAKQEAgLTEsOTcgKzEsOTcgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcmVzb3VyY2UuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgiDQotI2luY2x1ZGUgImZvbnRfaW50LmgiDQotI2lmbmRlZiBfRlBERkFQSV9NSU5JXw0KLXR5cGVkZWYgc3RydWN0IHsNCi0gICAgRlhTWVNfRklMRSoJbV9wRmlsZTsNCi0gICAgaW50CQltX25GaWxlczsNCi0gICAgaW50CQltX0luZGV4U2l6ZTsNCi0gICAgaW50CQltX0luZGV4T2Zmc2V0Ow0KLX0gRlhGQ19QQUNLQUdFOw0KLUZYX0xQVk9JRCBGWEZDX0xvYWRQYWNrYWdlKEZYX0xQQ1NUUiBuYW1lKQ0KLXsNCi0gICAgRlhTWVNfRklMRSogZmlsZSA9IEZYU1lTX2ZvcGVuKG5hbWUsIChGWF9MUENTVFIpInJiIik7DQotICAgIGlmIChmaWxlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIEZYX0JZVEUgYnVmWzI1Nl07DQotICAgIHNpemVfdCByZWFkID0gRlhTWVNfZnJlYWQoYnVmLCAxLCAyMCwgZmlsZSk7DQotICAgIGlmICgqKEZYX0RXT1JEKilidWYgIT0gMHg0MzQ2NTg0Nikgew0KLSAgICAgICAgRlhTWVNfZmNsb3NlKGZpbGUpOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgRlhGQ19QQUNLQUdFKiBwUGFja2FnZSA9IEZYX0FsbG9jKEZYRkNfUEFDS0FHRSwgMSk7DQotICAgIHBQYWNrYWdlLT5tX3BGaWxlID0gZmlsZTsNCi0gICAgcFBhY2thZ2UtPm1fbkZpbGVzID0gKihpbnQqKShidWYgKyA4KTsNCi0gICAgcFBhY2thZ2UtPm1fSW5kZXhTaXplID0gKihpbnQqKShidWYgKyAxMik7DQotICAgIHBQYWNrYWdlLT5tX0luZGV4T2Zmc2V0ID0gKihpbnQqKShidWYgKyAxNik7DQotICAgIHJldHVybiBwUGFja2FnZTsNCi19DQotdm9pZCBGWEZDX0Nsb3NlUGFja2FnZShGWF9MUFZPSUQgcCkNCi17DQotICAgIEZYRkNfUEFDS0FHRSogcFBhY2thZ2UgPSAoRlhGQ19QQUNLQUdFKilwOw0KLSAgICBGWFNZU19mY2xvc2UocFBhY2thZ2UtPm1fcEZpbGUpOw0KLSAgICBGWF9GcmVlKHBQYWNrYWdlKTsNCi19DQotRlhfQk9PTCBGWEZDX0xvYWRGaWxlKEZYX0xQVk9JRCBwLCBGWF9MUENTVFIgbmFtZSwgRlhfTFBCWVRFJiBwQnVmZmVyLCBGWF9EV09SRCYgc2l6ZSkNCi17DQotICAgIEZYRkNfUEFDS0FHRSogcFBhY2thZ2UgPSAoRlhGQ19QQUNLQUdFKilwOw0KLSAgICBGWFNZU19mc2VlayhwUGFja2FnZS0+bV9wRmlsZSwgcFBhY2thZ2UtPm1fSW5kZXhPZmZzZXQsIEZYU1lTX1NFRUtfU0VUKTsNCi0gICAgRlhfQllURSBidWZbMTI4XTsNCi0gICAgc2l6ZV90IHJlYWQgPSAwOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBQYWNrYWdlLT5tX25GaWxlczsgaSArKykgew0KLSAgICAgICAgcmVhZCA9IEZYU1lTX2ZyZWFkKGJ1ZiwgcFBhY2thZ2UtPm1fSW5kZXhTaXplLCAxLCBwUGFja2FnZS0+bV9wRmlsZSk7DQotICAgICAgICBpZiAoRlhTWVNfc3RyaWNtcCgoRlhfTFBDU1RSKWJ1ZiwgbmFtZSkgPT0gMCkgew0KLSAgICAgICAgICAgIEZYX0RXT1JEIG9mZnNldCA9ICooRlhfRFdPUkQqKSZidWZbNjRdOw0KLSAgICAgICAgICAgIHNpemUgPSAqKEZYX0RXT1JEKikmYnVmWzY4XTsNCi0gICAgICAgICAgICBwQnVmZmVyID0gRlhfQWxsb2MoRlhfQllURSwgc2l6ZSk7DQotICAgICAgICAgICAgRlhTWVNfZnNlZWsocFBhY2thZ2UtPm1fcEZpbGUsIG9mZnNldCwgRlhTWVNfU0VFS19TRVQpOw0KLSAgICAgICAgICAgIHJlYWQgPSBGWFNZU19mcmVhZChwQnVmZmVyLCBzaXplLCAxLCBwUGFja2FnZS0+bV9wRmlsZSk7DQotICAgICAgICAgICAgaWYgKGJ1Zls3Ml0pIHsNCi0gICAgICAgICAgICAgICAgRlhfRFdPUkQgb3JpZ19zaXplOw0KLSAgICAgICAgICAgICAgICBGWF9MUEJZVEUgY29tcF9idWYgPSBwQnVmZmVyOw0KLSAgICAgICAgICAgICAgICBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldEZsYXRlTW9kdWxlKCktPkZsYXRlT3JMWldEZWNvZGUoRkFMU0UsIGNvbXBfYnVmLCBzaXplLCBGQUxTRSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCBwQnVmZmVyLCBvcmlnX3NpemUpOw0KLSAgICAgICAgICAgICAgICBGWF9GcmVlKGNvbXBfYnVmKTsNCi0gICAgICAgICAgICAgICAgc2l6ZSA9IG9yaWdfc2l6ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1GWF9CT09MIENQREZfRlhNUDo6TG9hZEZpbGUoRlhfTFBWT0lEIHBQYWNrYWdlLCBGWF9MUENTVFIgZmlsZWlkKQ0KLXsNCi0gICAgaWYgKG1fcEhlYWRlcikgew0KLSAgICAgICAgRlhfRnJlZShtX3BIZWFkZXIpOw0KLSAgICAgICAgbV9wSGVhZGVyID0gTlVMTDsNCi0gICAgfQ0KLSAgICBtX3BUYWJsZSA9IE5VTEw7DQotICAgIEZYX0RXT1JEIHNpemU7DQotICAgIGlmICghRlhGQ19Mb2FkRmlsZShwUGFja2FnZSwgZmlsZWlkLCAoRlhfTFBCWVRFJiltX3BIZWFkZXIsIHNpemUpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKEZYU1lTX21lbWNtcDMyKG1fcEhlYWRlciwgIkZYTVAiLCA0KSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fcFRhYmxlID0gKEZYX0xQQllURSltX3BIZWFkZXIgKyBtX3BIZWFkZXItPmR3RGF0YU9mZnNldDsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0xQQllURSBDUERGX0ZYTVA6OkdldFJlY29yZChGWF9EV09SRCBpbmRleCkNCi17DQotICAgIGlmIChtX3BUYWJsZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAoKGludClpbmRleCA8IChpbnQpbV9wSGVhZGVyLT5kd1N0YXJ0SW5kZXggfHwgaW5kZXggPiBtX3BIZWFkZXItPmR3RW5kSW5kZXgpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiBtX3BUYWJsZSArIChpbmRleCAtIG1fcEhlYWRlci0+ZHdTdGFydEluZGV4KSAqIG1fcEhlYWRlci0+ZHdSZWNvcmRTaXplOw0KLX0NCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfbW9kdWxlLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcmVzb3VyY2UuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaCIKKyNpbmNsdWRlICJmb250X2ludC5oIgorI2lmbmRlZiBfRlBERkFQSV9NSU5JXwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEZYU1lTX0ZJTEUqCW1fcEZpbGU7CisgICAgaW50CQltX25GaWxlczsKKyAgICBpbnQJCW1fSW5kZXhTaXplOworICAgIGludAkJbV9JbmRleE9mZnNldDsKK30gRlhGQ19QQUNLQUdFOworRlhfTFBWT0lEIEZYRkNfTG9hZFBhY2thZ2UoRlhfTFBDU1RSIG5hbWUpCit7CisgICAgRlhTWVNfRklMRSogZmlsZSA9IEZYU1lTX2ZvcGVuKG5hbWUsIChGWF9MUENTVFIpInJiIik7CisgICAgaWYgKGZpbGUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRlhfQllURSBidWZbMjU2XTsKKyAgICBzaXplX3QgcmVhZCA9IEZYU1lTX2ZyZWFkKGJ1ZiwgMSwgMjAsIGZpbGUpOworICAgIGlmICgqKEZYX0RXT1JEKilidWYgIT0gMHg0MzQ2NTg0NikgeworICAgICAgICBGWFNZU19mY2xvc2UoZmlsZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBGWEZDX1BBQ0tBR0UqIHBQYWNrYWdlID0gRlhfQWxsb2MoRlhGQ19QQUNLQUdFLCAxKTsKKyAgICBwUGFja2FnZS0+bV9wRmlsZSA9IGZpbGU7CisgICAgcFBhY2thZ2UtPm1fbkZpbGVzID0gKihpbnQqKShidWYgKyA4KTsKKyAgICBwUGFja2FnZS0+bV9JbmRleFNpemUgPSAqKGludCopKGJ1ZiArIDEyKTsKKyAgICBwUGFja2FnZS0+bV9JbmRleE9mZnNldCA9ICooaW50KikoYnVmICsgMTYpOworICAgIHJldHVybiBwUGFja2FnZTsKK30KK3ZvaWQgRlhGQ19DbG9zZVBhY2thZ2UoRlhfTFBWT0lEIHApCit7CisgICAgRlhGQ19QQUNLQUdFKiBwUGFja2FnZSA9IChGWEZDX1BBQ0tBR0UqKXA7CisgICAgRlhTWVNfZmNsb3NlKHBQYWNrYWdlLT5tX3BGaWxlKTsKKyAgICBGWF9GcmVlKHBQYWNrYWdlKTsKK30KK0ZYX0JPT0wgRlhGQ19Mb2FkRmlsZShGWF9MUFZPSUQgcCwgRlhfTFBDU1RSIG5hbWUsIEZYX0xQQllURSYgcEJ1ZmZlciwgRlhfRFdPUkQmIHNpemUpCit7CisgICAgRlhGQ19QQUNLQUdFKiBwUGFja2FnZSA9IChGWEZDX1BBQ0tBR0UqKXA7CisgICAgRlhTWVNfZnNlZWsocFBhY2thZ2UtPm1fcEZpbGUsIHBQYWNrYWdlLT5tX0luZGV4T2Zmc2V0LCBGWFNZU19TRUVLX1NFVCk7CisgICAgRlhfQllURSBidWZbMTI4XTsKKyAgICBzaXplX3QgcmVhZCA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwUGFja2FnZS0+bV9uRmlsZXM7IGkgKyspIHsKKyAgICAgICAgcmVhZCA9IEZYU1lTX2ZyZWFkKGJ1ZiwgcFBhY2thZ2UtPm1fSW5kZXhTaXplLCAxLCBwUGFja2FnZS0+bV9wRmlsZSk7CisgICAgICAgIGlmIChGWFNZU19zdHJpY21wKChGWF9MUENTVFIpYnVmLCBuYW1lKSA9PSAwKSB7CisgICAgICAgICAgICBGWF9EV09SRCBvZmZzZXQgPSAqKEZYX0RXT1JEKikmYnVmWzY0XTsKKyAgICAgICAgICAgIHNpemUgPSAqKEZYX0RXT1JEKikmYnVmWzY4XTsKKyAgICAgICAgICAgIHBCdWZmZXIgPSBGWF9BbGxvYyhGWF9CWVRFLCBzaXplKTsKKyAgICAgICAgICAgIEZYU1lTX2ZzZWVrKHBQYWNrYWdlLT5tX3BGaWxlLCBvZmZzZXQsIEZYU1lTX1NFRUtfU0VUKTsKKyAgICAgICAgICAgIHJlYWQgPSBGWFNZU19mcmVhZChwQnVmZmVyLCBzaXplLCAxLCBwUGFja2FnZS0+bV9wRmlsZSk7CisgICAgICAgICAgICBpZiAoYnVmWzcyXSkgeworICAgICAgICAgICAgICAgIEZYX0RXT1JEIG9yaWdfc2l6ZTsKKyAgICAgICAgICAgICAgICBGWF9MUEJZVEUgY29tcF9idWYgPSBwQnVmZmVyOworICAgICAgICAgICAgICAgIENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0RmxhdGVNb2R1bGUoKS0+RmxhdGVPckxaV0RlY29kZShGQUxTRSwgY29tcF9idWYsIHNpemUsIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgcEJ1ZmZlciwgb3JpZ19zaXplKTsKKyAgICAgICAgICAgICAgICBGWF9GcmVlKGNvbXBfYnVmKTsKKyAgICAgICAgICAgICAgICBzaXplID0gb3JpZ19zaXplOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorRlhfQk9PTCBDUERGX0ZYTVA6OkxvYWRGaWxlKEZYX0xQVk9JRCBwUGFja2FnZSwgRlhfTFBDU1RSIGZpbGVpZCkKK3sKKyAgICBpZiAobV9wSGVhZGVyKSB7CisgICAgICAgIEZYX0ZyZWUobV9wSGVhZGVyKTsKKyAgICAgICAgbV9wSGVhZGVyID0gTlVMTDsKKyAgICB9CisgICAgbV9wVGFibGUgPSBOVUxMOworICAgIEZYX0RXT1JEIHNpemU7CisgICAgaWYgKCFGWEZDX0xvYWRGaWxlKHBQYWNrYWdlLCBmaWxlaWQsIChGWF9MUEJZVEUmKW1fcEhlYWRlciwgc2l6ZSkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoRlhTWVNfbWVtY21wMzIobV9wSGVhZGVyLCAiRlhNUCIsIDQpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9wVGFibGUgPSAoRlhfTFBCWVRFKW1fcEhlYWRlciArIG1fcEhlYWRlci0+ZHdEYXRhT2Zmc2V0OworICAgIHJldHVybiBUUlVFOworfQorRlhfTFBCWVRFIENQREZfRlhNUDo6R2V0UmVjb3JkKEZYX0RXT1JEIGluZGV4KQoreworICAgIGlmIChtX3BUYWJsZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoKGludClpbmRleCA8IChpbnQpbV9wSGVhZGVyLT5kd1N0YXJ0SW5kZXggfHwgaW5kZXggPiBtX3BIZWFkZXItPmR3RW5kSW5kZXgpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBtX3BUYWJsZSArIChpbmRleCAtIG1fcEhlYWRlci0+ZHdTdGFydEluZGV4KSAqIG1fcEhlYWRlci0+ZHdSZWNvcmRTaXplOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfZm9udC90dGdzdWJ0YWJsZS5jcHAgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfZm9udC90dGdzdWJ0YWJsZS5jcHAKaW5kZXggYjdhNzg2NC4uNDJmNzdkZSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2ZvbnQvdHRnc3VidGFibGUuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9mb250L3R0Z3N1YnRhYmxlLmNwcApAQCAtMSw0NTIgKzEsNDUyIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9mcmVldHlwZS5oIg0KLSNpbmNsdWRlICJ0dGdzdWJ0YWJsZS5oIg0KLUNGWF9HbHlwaE1hcDo6Q0ZYX0dseXBoTWFwKCkNCi17DQotfQ0KLUNGWF9HbHlwaE1hcDo6fkNGWF9HbHlwaE1hcCgpDQotew0KLX0NCi1leHRlcm4gIkMiIHsNCi0gICAgc3RhdGljIGludCBfQ29tcGFyZUludChjb25zdCB2b2lkKiBwMSwgY29uc3Qgdm9pZCogcDIpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAoKihGWF9EV09SRCopcDEpIC0gKCooRlhfRFdPUkQqKXAyKTsNCi0gICAgfQ0KLX07DQotc3RydWN0IF9JbnRQYWlyIHsNCi0gICAgRlhfSU5UMzIga2V5Ow0KLSAgICBGWF9JTlQzMiB2YWx1ZTsNCi19Ow0KLXZvaWQgQ0ZYX0dseXBoTWFwOjpTZXRBdChpbnQga2V5LCBpbnQgdmFsdWUpDQotew0KLSAgICBGWF9EV09SRCBjb3VudCA9IG1fQnVmZmVyLkdldFNpemUoKSAvIHNpemVvZihfSW50UGFpcik7DQotICAgIF9JbnRQYWlyKiBidWYgPSAoX0ludFBhaXIqKW1fQnVmZmVyLkdldEJ1ZmZlcigpOw0KLSAgICBfSW50UGFpciBwYWlyID0ge2tleSwgdmFsdWV9Ow0KLSAgICBpZiAoY291bnQgPT0gMCB8fCBrZXkgPiBidWZbY291bnQgLSAxXS5rZXkpIHsNCi0gICAgICAgIG1fQnVmZmVyLkFwcGVuZEJsb2NrKCZwYWlyLCBzaXplb2YoX0ludFBhaXIpKTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpbnQgbG93ID0gMCwgaGlnaCA9IGNvdW50IC0gMTsNCi0gICAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7DQotICAgICAgICBpbnQgbWlkID0gKGxvdyArIGhpZ2gpIC8gMjsNCi0gICAgICAgIGlmIChidWZbbWlkXS5rZXkgPCBrZXkpIHsNCi0gICAgICAgICAgICBsb3cgPSBtaWQgKyAxOw0KLSAgICAgICAgfSBlbHNlIGlmIChidWZbbWlkXS5rZXkgPiBrZXkpIHsNCi0gICAgICAgICAgICBoaWdoID0gbWlkIC0gMTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgYnVmW21pZF0udmFsdWUgPSB2YWx1ZTsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9CdWZmZXIuSW5zZXJ0QmxvY2sobG93ICogc2l6ZW9mKF9JbnRQYWlyKSwgJnBhaXIsIHNpemVvZihfSW50UGFpcikpOw0KLX0NCi1GWF9CT09MIENGWF9HbHlwaE1hcDo6TG9va3VwKGludCBrZXksIGludCAmdmFsdWUpDQotew0KLSAgICBGWF9MUFZPSUQgcFJlc3VsdCA9IEZYU1lTX2JzZWFyY2goJmtleSwgbV9CdWZmZXIuR2V0QnVmZmVyKCksIG1fQnVmZmVyLkdldFNpemUoKSAvIHNpemVvZihfSW50UGFpciksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoX0ludFBhaXIpLCBfQ29tcGFyZUludCk7DQotICAgIGlmIChwUmVzdWx0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICB2YWx1ZSA9ICgoRlhfRFdPUkQqKXBSZXN1bHQpWzFdOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotYm9vbCBDRlhfQ1RUR1NVQlRhYmxlOjpMb2FkR1NVQlRhYmxlKEZUX0J5dGVzIGdzdWIpDQotew0KLSAgICBoZWFkZXIuVmVyc2lvbiA9IGdzdWJbMF0gPDwgMjQgfCBnc3ViWzFdIDw8IDE2IHwgZ3N1YlsyXSA8PCA4IHwgZ3N1YlszXTsNCi0gICAgaWYoaGVhZGVyLlZlcnNpb24gIT0gMHgwMDAxMDAwMCkgew0KLSAgICAgICAgcmV0dXJuIGZhbHNlOw0KLSAgICB9DQotICAgIGhlYWRlci5TY3JpcHRMaXN0ICA9IGdzdWJbNF0gPDwgOCB8IGdzdWJbNV07DQotICAgIGhlYWRlci5GZWF0dXJlTGlzdCA9IGdzdWJbNl0gPDwgOCB8IGdzdWJbN107DQotICAgIGhlYWRlci5Mb29rdXBMaXN0ICA9IGdzdWJbOF0gPDwgOCB8IGdzdWJbOV07DQotICAgIHJldHVybiBQYXJzZSgNCi0gICAgICAgICAgICAgICAmZ3N1YltoZWFkZXIuU2NyaXB0TGlzdF0sDQotICAgICAgICAgICAgICAgJmdzdWJbaGVhZGVyLkZlYXR1cmVMaXN0XSwNCi0gICAgICAgICAgICAgICAmZ3N1YltoZWFkZXIuTG9va3VwTGlzdF0pOw0KLX0NCi1ib29sIENGWF9DVFRHU1VCVGFibGU6OkdldFZlcnRpY2FsR2x5cGgoVFRfdWludDMyX3QgZ2x5cGhudW0sIFRUX3VpbnQzMl90ICp2Z2x5cGhudW0pDQotew0KLSAgICBUVF91aW50MzJfdCB0YWdbXSA9IHsNCi0gICAgICAgIChUVF91aW50OF90KSd2JyA8PCAyNCB8DQotICAgICAgICAoVFRfdWludDhfdCkncicgPDwgMTYgfA0KLSAgICAgICAgKFRUX3VpbnQ4X3QpJ3QnIDw8ICA4IHwNCi0gICAgICAgIChUVF91aW50OF90KScyJywNCi0gICAgICAgIChUVF91aW50OF90KSd2JyA8PCAyNCB8DQotICAgICAgICAoVFRfdWludDhfdCknZScgPDwgMTYgfA0KLSAgICAgICAgKFRUX3VpbnQ4X3QpJ3InIDw8ICA4IHwNCi0gICAgICAgIChUVF91aW50OF90KSd0JywNCi0gICAgfTsNCi0gICAgaWYgKCFtX2JGZWF1dHVyZU1hcExvYWQpIHsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU2NyaXB0TGlzdC5TY3JpcHRDb3VudDsgaSsrKSB7DQotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPAkoU2NyaXB0TGlzdC5TY3JpcHRSZWNvcmQgKyBpKS0+U2NyaXB0LkxhbmdTeXNDb3VudDsgKytqKSB7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgKChTY3JpcHRMaXN0LlNjcmlwdFJlY29yZCArIGkpLT5TY3JpcHQuTGFuZ1N5c1JlY29yZCArIGopLT5MYW5nU3lzLkZlYXR1cmVDb3VudDsgKytrKSB7DQotICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBpbmRleCA9ICooKChTY3JpcHRMaXN0LlNjcmlwdFJlY29yZCArIGkpLT5TY3JpcHQuTGFuZ1N5c1JlY29yZCArIGopLT5MYW5nU3lzLkZlYXR1cmVJbmRleCArIGspOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKEZlYXR1cmVMaXN0LkZlYXR1cmVSZWNvcmRbaW5kZXhdLkZlYXR1cmVUYWcgPT0gdGFnWzBdIHx8IEZlYXR1cmVMaXN0LkZlYXR1cmVSZWNvcmRbaW5kZXhdLkZlYXR1cmVUYWcgPT0gdGFnWzFdKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgdmFsdWU7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2ZlYXR1cmVNYXAuTG9va3VwKGluZGV4LCB2YWx1ZSkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mZWF0dXJlTWFwLlNldEF0KGluZGV4LCBpbmRleCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCFtX2ZlYXR1cmVNYXAuR2V0U3RhcnRQb3NpdGlvbigpKSB7DQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGZWF0dXJlTGlzdC5GZWF0dXJlQ291bnQ7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgaWYgKEZlYXR1cmVMaXN0LkZlYXR1cmVSZWNvcmRbaV0uRmVhdHVyZVRhZyA9PSB0YWdbMF0gfHwgRmVhdHVyZUxpc3QuRmVhdHVyZVJlY29yZFtpXS5GZWF0dXJlVGFnID09IHRhZ1sxXSkgew0KLSAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgdmFsdWU7DQotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZmVhdHVyZU1hcC5Mb29rdXAoaSwgdmFsdWUpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9mZWF0dXJlTWFwLlNldEF0KGksIGkpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9iRmVhdXR1cmVNYXBMb2FkID0gVFJVRTsNCi0gICAgfQ0KLSAgICBGWF9QT1NJVElPTiBwb3MgPSBtX2ZlYXR1cmVNYXAuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICBGWF9EV09SRCBpbmRleCwgdmFsdWU7DQotICAgICAgICBtX2ZlYXR1cmVNYXAuR2V0TmV4dEFzc29jKHBvcywgaW5kZXgsIHZhbHVlKTsNCi0gICAgICAgIGlmKEdldFZlcnRpY2FsR2x5cGhTdWIoZ2x5cGhudW0sIHZnbHlwaG51bSwJJkZlYXR1cmVMaXN0LkZlYXR1cmVSZWNvcmRbdmFsdWVdLkZlYXR1cmUpKSB7DQotICAgICAgICAgICAgcmV0dXJuIHRydWU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIGZhbHNlOw0KLX0NCi1ib29sIENGWF9DVFRHU1VCVGFibGU6OkdldFZlcnRpY2FsR2x5cGhTdWIoDQotICAgIFRUX3VpbnQzMl90IGdseXBobnVtLA0KLSAgICBUVF91aW50MzJfdCAqdmdseXBobnVtLA0KLSAgICBzdHJ1Y3QgVEZlYXR1cmUgKkZlYXR1cmUpDQotew0KLSAgICBmb3IoaW50IGkgPSAwOyBpIDwgRmVhdHVyZS0+TG9va3VwQ291bnQ7IGkrKykgew0KLSAgICAgICAgaW50IGluZGV4ID0gRmVhdHVyZS0+TG9va3VwTGlzdEluZGV4W2ldOw0KLSAgICAgICAgaWYoaW5kZXggPCAwIHx8IExvb2t1cExpc3QuTG9va3VwQ291bnQgPCBpbmRleCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoTG9va3VwTGlzdC5Mb29rdXBbaW5kZXhdLkxvb2t1cFR5cGUgPT0gMSkgew0KLSAgICAgICAgICAgIGlmKEdldFZlcnRpY2FsR2x5cGhTdWIyKA0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdseXBobnVtLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZnbHlwaG51bSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAmTG9va3VwTGlzdC5Mb29rdXBbaW5kZXhdKSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIGZhbHNlOw0KLX0NCi1ib29sIENGWF9DVFRHU1VCVGFibGU6OkdldFZlcnRpY2FsR2x5cGhTdWIyKA0KLSAgICBUVF91aW50MzJfdCBnbHlwaG51bSwNCi0gICAgVFRfdWludDMyX3QgKnZnbHlwaG51bSwNCi0gICAgc3RydWN0IFRMb29rdXAgKkxvb2t1cCkNCi17DQotICAgIGZvcihpbnQgaSA9IDA7IGkgPCBMb29rdXAtPlN1YlRhYmxlQ291bnQ7IGkrKykgew0KLSAgICAgICAgc3dpdGNoKExvb2t1cC0+U3ViVGFibGVbaV0tPlN1YnN0Rm9ybWF0KSB7DQotICAgICAgICAgICAgY2FzZSAxOiB7DQotICAgICAgICAgICAgICAgICAgICBUU2luZ2xlU3Vic3RGb3JtYXQxICp0YmwxID0gKFRTaW5nbGVTdWJzdEZvcm1hdDEqKUxvb2t1cC0+U3ViVGFibGVbaV07DQotICAgICAgICAgICAgICAgICAgICBpZihHZXRDb3ZlcmFnZUluZGV4KHRibDEtPkNvdmVyYWdlLCBnbHlwaG51bSkgPj0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICp2Z2x5cGhudW0gPSBnbHlwaG51bSArIHRibDEtPkRlbHRhR2x5cGhJRDsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgY2FzZSAyOiB7DQotICAgICAgICAgICAgICAgICAgICBUU2luZ2xlU3Vic3RGb3JtYXQyICp0YmwyID0gKFRTaW5nbGVTdWJzdEZvcm1hdDIqKUxvb2t1cC0+U3ViVGFibGVbaV07DQotICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSAtMTsNCi0gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gR2V0Q292ZXJhZ2VJbmRleCh0YmwyLT5Db3ZlcmFnZSwgZ2x5cGhudW0pOw0KLSAgICAgICAgICAgICAgICAgICAgaWYoMCA8PSBpbmRleCAmJiBpbmRleCA8IHRibDItPkdseXBoQ291bnQpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqdmdseXBobnVtID0gdGJsMi0+U3Vic3RpdHV0ZVtpbmRleF07DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBmYWxzZTsNCi19DQotaW50IENGWF9DVFRHU1VCVGFibGU6OkdldENvdmVyYWdlSW5kZXgoc3RydWN0IFRDb3ZlcmFnZUZvcm1hdEJhc2UgKkNvdmVyYWdlLCBUVF91aW50MzJfdCBnKQ0KLXsNCi0gICAgaW50IGkgPSAwOw0KLSAgICBpZihDb3ZlcmFnZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgc3dpdGNoKENvdmVyYWdlLT5Db3ZlcmFnZUZvcm1hdCkgew0KLSAgICAgICAgY2FzZSAxOiB7DQotICAgICAgICAgICAgICAgIFRDb3ZlcmFnZUZvcm1hdDEgKmMxID0gKFRDb3ZlcmFnZUZvcm1hdDEqKUNvdmVyYWdlOw0KLSAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBjMS0+R2x5cGhDb3VudDsgaSsrKSB7DQotICAgICAgICAgICAgICAgICAgICBpZigoVFRfdWludDMyX3QpYzEtPkdseXBoQXJyYXlbaV0gPT0gZykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIDI6IHsNCi0gICAgICAgICAgICAgICAgVENvdmVyYWdlRm9ybWF0MiAqYzIgPSAoVENvdmVyYWdlRm9ybWF0MiopQ292ZXJhZ2U7DQotICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IGMyLT5SYW5nZUNvdW50OyBpKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIFRUX3VpbnQzMl90IHMgPSBjMi0+UmFuZ2VSZWNvcmRbaV0uU3RhcnQ7DQotICAgICAgICAgICAgICAgICAgICBUVF91aW50MzJfdCBlID0gYzItPlJhbmdlUmVjb3JkW2ldLkVuZDsNCi0gICAgICAgICAgICAgICAgICAgIFRUX3VpbnQzMl90IHNpID0gYzItPlJhbmdlUmVjb3JkW2ldLlN0YXJ0Q292ZXJhZ2VJbmRleDsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChzIDw9IGcgJiYgZyA8PSBlKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpICsgZyAtIHM7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gLTE7DQotfQ0KLWJvb2wgQ0ZYX0NUVEdTVUJUYWJsZTo6UGFyc2UoDQotICAgIEZUX0J5dGVzIHNjcmlwdGxpc3QsDQotICAgIEZUX0J5dGVzIGZlYXR1cmVsaXN0LA0KLSAgICBGVF9CeXRlcyBsb29rdXBsaXN0KQ0KLXsNCi0gICAgUGFyc2VTY3JpcHRMaXN0KHNjcmlwdGxpc3QsICZTY3JpcHRMaXN0KTsNCi0gICAgUGFyc2VGZWF0dXJlTGlzdChmZWF0dXJlbGlzdCwgJkZlYXR1cmVMaXN0KTsNCi0gICAgUGFyc2VMb29rdXBMaXN0KGxvb2t1cGxpc3QsICZMb29rdXBMaXN0KTsNCi0gICAgcmV0dXJuIHRydWU7DQotfQ0KLXZvaWQgQ0ZYX0NUVEdTVUJUYWJsZTo6UGFyc2VTY3JpcHRMaXN0KEZUX0J5dGVzIHJhdywgc3RydWN0IFRTY3JpcHRMaXN0ICpyZWMpDQotew0KLSAgICBpbnQgaTsNCi0gICAgRlRfQnl0ZXMgc3AgPSByYXc7DQotICAgIHJlYy0+U2NyaXB0Q291bnQgPSBHZXRVSW50MTYoc3ApOw0KLSAgICBpZihyZWMtPlNjcmlwdENvdW50IDw9IDApIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICByZWMtPlNjcmlwdFJlY29yZCA9IG5ldyBzdHJ1Y3QgVFNjcmlwdFJlY29yZFtyZWMtPlNjcmlwdENvdW50XTsNCi0gICAgZm9yKGkgPSAwOyBpIDwgcmVjLT5TY3JpcHRDb3VudDsgaSsrKSB7DQotICAgICAgICByZWMtPlNjcmlwdFJlY29yZFtpXS5TY3JpcHRUYWcgPSBHZXRVSW50MzIoc3ApOw0KLSAgICAgICAgVFRfdWludDE2X3Qgb2Zmc2V0ID0gR2V0VUludDE2KHNwKTsNCi0gICAgICAgIFBhcnNlU2NyaXB0KA0KLSAgICAgICAgICAgICZyYXdbb2Zmc2V0XSwNCi0gICAgICAgICAgICAmcmVjLT5TY3JpcHRSZWNvcmRbaV0uU2NyaXB0KTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9DVFRHU1VCVGFibGU6OlBhcnNlU2NyaXB0KEZUX0J5dGVzIHJhdywgc3RydWN0IFRTY3JpcHQgKnJlYykNCi17DQotICAgIGludCBpOw0KLSAgICBGVF9CeXRlcyBzcCA9IHJhdzsNCi0gICAgcmVjLT5EZWZhdWx0TGFuZ1N5cyA9IEdldFVJbnQxNihzcCk7DQotICAgIHJlYy0+TGFuZ1N5c0NvdW50ID0gR2V0VUludDE2KHNwKTsNCi0gICAgaWYocmVjLT5MYW5nU3lzQ291bnQgPD0gMCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHJlYy0+TGFuZ1N5c1JlY29yZCA9IG5ldyBzdHJ1Y3QgVExhbmdTeXNSZWNvcmRbcmVjLT5MYW5nU3lzQ291bnRdOw0KLSAgICBmb3IoaSA9IDA7IGkgPCByZWMtPkxhbmdTeXNDb3VudDsgaSsrKSB7DQotICAgICAgICByZWMtPkxhbmdTeXNSZWNvcmRbaV0uTGFuZ1N5c1RhZyA9IEdldFVJbnQzMihzcCk7DQotICAgICAgICBUVF91aW50MTZfdCBvZmZzZXQgPSBHZXRVSW50MTYoc3ApOw0KLSAgICAgICAgUGFyc2VMYW5nU3lzKA0KLSAgICAgICAgICAgICZyYXdbb2Zmc2V0XSwNCi0gICAgICAgICAgICAmcmVjLT5MYW5nU3lzUmVjb3JkW2ldLkxhbmdTeXMpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0ZYX0NUVEdTVUJUYWJsZTo6UGFyc2VMYW5nU3lzKEZUX0J5dGVzIHJhdywgc3RydWN0IFRMYW5nU3lzICpyZWMpDQotew0KLSAgICBGVF9CeXRlcyBzcCA9IHJhdzsNCi0gICAgcmVjLT5Mb29rdXBPcmRlciA9IEdldFVJbnQxNihzcCk7DQotICAgIHJlYy0+UmVxRmVhdHVyZUluZGV4ID0gR2V0VUludDE2KHNwKTsNCi0gICAgcmVjLT5GZWF0dXJlQ291bnQgPSBHZXRVSW50MTYoc3ApOw0KLSAgICBpZihyZWMtPkZlYXR1cmVDb3VudCA8PSAwKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgcmVjLT5GZWF0dXJlSW5kZXggPSBuZXcgVFRfdWludDE2X3RbcmVjLT5GZWF0dXJlQ291bnRdOw0KLSAgICBGWFNZU19tZW1zZXQzMihyZWMtPkZlYXR1cmVJbmRleCwgMCwgc2l6ZW9mKFRUX3VpbnQxNl90KSAqIHJlYy0+RmVhdHVyZUNvdW50KTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWMtPkZlYXR1cmVDb3VudDsgKytpKSB7DQotICAgICAgICByZWMtPkZlYXR1cmVJbmRleFtpXSA9IEdldFVJbnQxNihzcCk7DQotICAgIH0NCi19DQotdm9pZCBDRlhfQ1RUR1NVQlRhYmxlOjpQYXJzZUZlYXR1cmVMaXN0KEZUX0J5dGVzIHJhdywgVEZlYXR1cmVMaXN0ICpyZWMpDQotew0KLSAgICBpbnQgaTsNCi0gICAgRlRfQnl0ZXMgc3AgPSByYXc7DQotICAgIHJlYy0+RmVhdHVyZUNvdW50ID0gR2V0VUludDE2KHNwKTsNCi0gICAgaWYocmVjLT5GZWF0dXJlQ291bnQgPD0gMCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHJlYy0+RmVhdHVyZVJlY29yZCA9IG5ldyBzdHJ1Y3QgVEZlYXR1cmVSZWNvcmRbcmVjLT5GZWF0dXJlQ291bnRdOw0KLSAgICBmb3IoaSA9IDA7IGkgPCByZWMtPkZlYXR1cmVDb3VudDsgaSsrKSB7DQotICAgICAgICByZWMtPkZlYXR1cmVSZWNvcmRbaV0uRmVhdHVyZVRhZyA9IEdldFVJbnQzMihzcCk7DQotICAgICAgICBUVF91aW50MTZfdCBvZmZzZXQgPSBHZXRVSW50MTYoc3ApOw0KLSAgICAgICAgUGFyc2VGZWF0dXJlKA0KLSAgICAgICAgICAgICZyYXdbb2Zmc2V0XSwNCi0gICAgICAgICAgICAmcmVjLT5GZWF0dXJlUmVjb3JkW2ldLkZlYXR1cmUpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0ZYX0NUVEdTVUJUYWJsZTo6UGFyc2VGZWF0dXJlKEZUX0J5dGVzIHJhdywgVEZlYXR1cmUgKnJlYykNCi17DQotICAgIGludCBpOw0KLSAgICBGVF9CeXRlcyBzcCA9IHJhdzsNCi0gICAgcmVjLT5GZWF0dXJlUGFyYW1zID0gR2V0VUludDE2KHNwKTsNCi0gICAgcmVjLT5Mb29rdXBDb3VudCA9IEdldFVJbnQxNihzcCk7DQotICAgIGlmKHJlYy0+TG9va3VwQ291bnQgPD0gMCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHJlYy0+TG9va3VwTGlzdEluZGV4ID0gbmV3IFRUX3VpbnQxNl90W3JlYy0+TG9va3VwQ291bnRdOw0KLSAgICBmb3IoaSA9IDA7IGkgPCByZWMtPkxvb2t1cENvdW50OyBpKyspIHsNCi0gICAgICAgIHJlYy0+TG9va3VwTGlzdEluZGV4W2ldID0gR2V0VUludDE2KHNwKTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9DVFRHU1VCVGFibGU6OlBhcnNlTG9va3VwTGlzdChGVF9CeXRlcyByYXcsIFRMb29rdXBMaXN0ICpyZWMpDQotew0KLSAgICBpbnQgaTsNCi0gICAgRlRfQnl0ZXMgc3AgPSByYXc7DQotICAgIHJlYy0+TG9va3VwQ291bnQgPSBHZXRVSW50MTYoc3ApOw0KLSAgICBpZihyZWMtPkxvb2t1cENvdW50IDw9IDApIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICByZWMtPkxvb2t1cCA9IG5ldyBzdHJ1Y3QgVExvb2t1cFtyZWMtPkxvb2t1cENvdW50XTsNCi0gICAgZm9yKGkgPSAwOyBpIDwgcmVjLT5Mb29rdXBDb3VudDsgaSsrKSB7DQotICAgICAgICBUVF91aW50MTZfdCBvZmZzZXQgPSBHZXRVSW50MTYoc3ApOw0KLSAgICAgICAgUGFyc2VMb29rdXAoDQotICAgICAgICAgICAgJnJhd1tvZmZzZXRdLA0KLSAgICAgICAgICAgICZyZWMtPkxvb2t1cFtpXSk7DQotICAgIH0NCi19DQotdm9pZCBDRlhfQ1RUR1NVQlRhYmxlOjpQYXJzZUxvb2t1cChGVF9CeXRlcyByYXcsIFRMb29rdXAgKnJlYykNCi17DQotICAgIGludCBpOw0KLSAgICBGVF9CeXRlcyBzcCA9IHJhdzsNCi0gICAgcmVjLT5Mb29rdXBUeXBlID0gR2V0VUludDE2KHNwKTsNCi0gICAgcmVjLT5Mb29rdXBGbGFnID0gR2V0VUludDE2KHNwKTsNCi0gICAgcmVjLT5TdWJUYWJsZUNvdW50ID0gR2V0VUludDE2KHNwKTsNCi0gICAgaWYocmVjLT5TdWJUYWJsZUNvdW50IDw9IDApIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICByZWMtPlN1YlRhYmxlID0gbmV3IHN0cnVjdCBUU3ViVGFibGVCYXNlKltyZWMtPlN1YlRhYmxlQ291bnRdOw0KLSAgICBmb3IoaSA9IDA7IGkgPCByZWMtPlN1YlRhYmxlQ291bnQ7IGkrKykgew0KLSAgICAgICAgcmVjLT5TdWJUYWJsZVtpXSA9IE5VTEw7DQotICAgIH0NCi0gICAgaWYocmVjLT5Mb29rdXBUeXBlICE9IDEpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBmb3IoaSA9IDA7IGkgPCByZWMtPlN1YlRhYmxlQ291bnQ7IGkrKykgew0KLSAgICAgICAgVFRfdWludDE2X3Qgb2Zmc2V0ID0gR2V0VUludDE2KHNwKTsNCi0gICAgICAgIFBhcnNlU2luZ2xlU3Vic3QoDQotICAgICAgICAgICAgJnJhd1tvZmZzZXRdLA0KLSAgICAgICAgICAgICZyZWMtPlN1YlRhYmxlW2ldKTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9DVFRHU1VCVGFibGU6OlBhcnNlQ292ZXJhZ2UoRlRfQnl0ZXMgcmF3LCBUQ292ZXJhZ2VGb3JtYXRCYXNlICoqcmVjKQ0KLXsNCi0gICAgRlRfQnl0ZXMgc3AgPSByYXc7DQotICAgIFRUX3VpbnQxNl90IEZvcm1hdCA9IEdldFVJbnQxNihzcCk7DQotICAgIHN3aXRjaChGb3JtYXQpIHsNCi0gICAgICAgIGNhc2UgMToNCi0gICAgICAgICAgICAqcmVjID0gbmV3IFRDb3ZlcmFnZUZvcm1hdDEoKTsNCi0gICAgICAgICAgICBQYXJzZUNvdmVyYWdlRm9ybWF0MShyYXcsIChUQ292ZXJhZ2VGb3JtYXQxKikqcmVjKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgMjoNCi0gICAgICAgICAgICAqcmVjID0gbmV3IFRDb3ZlcmFnZUZvcm1hdDIoKTsNCi0gICAgICAgICAgICBQYXJzZUNvdmVyYWdlRm9ybWF0MihyYXcsIChUQ292ZXJhZ2VGb3JtYXQyKikqcmVjKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9DVFRHU1VCVGFibGU6OlBhcnNlQ292ZXJhZ2VGb3JtYXQxKEZUX0J5dGVzIHJhdywgVENvdmVyYWdlRm9ybWF0MSAqcmVjKQ0KLXsNCi0gICAgaW50IGk7DQotICAgIEZUX0J5dGVzIHNwID0gcmF3Ow0KLSAgICBHZXRVSW50MTYoc3ApOw0KLSAgICByZWMtPkdseXBoQ291bnQgPSBHZXRVSW50MTYoc3ApOw0KLSAgICBpZihyZWMtPkdseXBoQ291bnQgPD0gMCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHJlYy0+R2x5cGhBcnJheSA9IG5ldyBUVF91aW50MTZfdFtyZWMtPkdseXBoQ291bnRdOw0KLSAgICBmb3IoaSA9IDA7IGkgPCByZWMtPkdseXBoQ291bnQ7IGkrKykgew0KLSAgICAgICAgcmVjLT5HbHlwaEFycmF5W2ldID0gR2V0VUludDE2KHNwKTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9DVFRHU1VCVGFibGU6OlBhcnNlQ292ZXJhZ2VGb3JtYXQyKEZUX0J5dGVzIHJhdywgVENvdmVyYWdlRm9ybWF0MiAqcmVjKQ0KLXsNCi0gICAgaW50IGk7DQotICAgIEZUX0J5dGVzIHNwID0gcmF3Ow0KLSAgICBHZXRVSW50MTYoc3ApOw0KLSAgICByZWMtPlJhbmdlQ291bnQgPSBHZXRVSW50MTYoc3ApOw0KLSAgICBpZihyZWMtPlJhbmdlQ291bnQgPD0gMCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHJlYy0+UmFuZ2VSZWNvcmQgPSBuZXcgVFJhbmdlUmVjb3JkW3JlYy0+UmFuZ2VDb3VudF07DQotICAgIGZvcihpID0gMDsgaSA8IHJlYy0+UmFuZ2VDb3VudDsgaSsrKSB7DQotICAgICAgICByZWMtPlJhbmdlUmVjb3JkW2ldLlN0YXJ0ID0gR2V0VUludDE2KHNwKTsNCi0gICAgICAgIHJlYy0+UmFuZ2VSZWNvcmRbaV0uRW5kID0gR2V0VUludDE2KHNwKTsNCi0gICAgICAgIHJlYy0+UmFuZ2VSZWNvcmRbaV0uU3RhcnRDb3ZlcmFnZUluZGV4ID0gR2V0VUludDE2KHNwKTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9DVFRHU1VCVGFibGU6OlBhcnNlU2luZ2xlU3Vic3QoRlRfQnl0ZXMgcmF3LCBUU3ViVGFibGVCYXNlICoqcmVjKQ0KLXsNCi0gICAgRlRfQnl0ZXMgc3AgPSByYXc7DQotICAgIFRUX3VpbnQxNl90IEZvcm1hdCA9IEdldFVJbnQxNihzcCk7DQotICAgIHN3aXRjaChGb3JtYXQpIHsNCi0gICAgICAgIGNhc2UgMToNCi0gICAgICAgICAgICAqcmVjID0gbmV3IFRTaW5nbGVTdWJzdEZvcm1hdDEoKTsNCi0gICAgICAgICAgICBQYXJzZVNpbmdsZVN1YnN0Rm9ybWF0MShyYXcsIChUU2luZ2xlU3Vic3RGb3JtYXQxKikqcmVjKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgMjoNCi0gICAgICAgICAgICAqcmVjID0gbmV3IFRTaW5nbGVTdWJzdEZvcm1hdDIoKTsNCi0gICAgICAgICAgICBQYXJzZVNpbmdsZVN1YnN0Rm9ybWF0MihyYXcsIChUU2luZ2xlU3Vic3RGb3JtYXQyKikqcmVjKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9DVFRHU1VCVGFibGU6OlBhcnNlU2luZ2xlU3Vic3RGb3JtYXQxKEZUX0J5dGVzIHJhdywgVFNpbmdsZVN1YnN0Rm9ybWF0MSAqcmVjKQ0KLXsNCi0gICAgRlRfQnl0ZXMgc3AgPSByYXc7DQotICAgIEdldFVJbnQxNihzcCk7DQotICAgIFRUX3VpbnQxNl90IG9mZnNldCA9IEdldFVJbnQxNihzcCk7DQotICAgIFBhcnNlQ292ZXJhZ2UoDQotICAgICAgICAmcmF3W29mZnNldF0sDQotICAgICAgICAmcmVjLT5Db3ZlcmFnZSk7DQotICAgIHJlYy0+RGVsdGFHbHlwaElEID0gR2V0SW50MTYoc3ApOw0KLX0NCi12b2lkIENGWF9DVFRHU1VCVGFibGU6OlBhcnNlU2luZ2xlU3Vic3RGb3JtYXQyKEZUX0J5dGVzIHJhdywgVFNpbmdsZVN1YnN0Rm9ybWF0MiAqcmVjKQ0KLXsNCi0gICAgaW50IGk7DQotICAgIEZUX0J5dGVzIHNwID0gcmF3Ow0KLSAgICBHZXRVSW50MTYoc3ApOw0KLSAgICBUVF91aW50MTZfdCBvZmZzZXQgPSBHZXRVSW50MTYoc3ApOw0KLSAgICBQYXJzZUNvdmVyYWdlKA0KLSAgICAgICAgJnJhd1tvZmZzZXRdLA0KLSAgICAgICAgJnJlYy0+Q292ZXJhZ2UpOw0KLSAgICByZWMtPkdseXBoQ291bnQgPSBHZXRVSW50MTYoc3ApOw0KLSAgICBpZihyZWMtPkdseXBoQ291bnQgPD0gMCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHJlYy0+U3Vic3RpdHV0ZSA9IG5ldyBUVF91aW50MTZfdFtyZWMtPkdseXBoQ291bnRdOw0KLSAgICBmb3IoaSA9IDA7IGkgPCByZWMtPkdseXBoQ291bnQ7IGkrKykgew0KLSAgICAgICAgcmVjLT5TdWJzdGl0dXRlW2ldID0gR2V0VUludDE2KHNwKTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENGWF9HU1VCVGFibGU6OkdldFZlcnRpY2FsR2x5cGgoRlhfRFdPUkQgZ2x5cGhudW0sIEZYX0RXT1JEKiB2Z2x5cGhudW0pDQotew0KLSAgICByZXR1cm4gbV9Hc3ViSW1wLkdldFZlcnRpY2FsR2x5cGgoZ2x5cGhudW0sIHZnbHlwaG51bSk7DQotfQ0KLUlGWF9HU1VCVGFibGUqIEZYR0VfQ3JlYXRlR1NVQlRhYmxlKENGWF9Gb250KiBwRm9udCkNCi17DQotICAgIGlmICghcEZvbnQpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmIChOVUxMID09IHBGb250LT5tX3BHc3ViRGF0YSkgew0KLSAgICAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGggPSAwOw0KLSAgICAgICAgaW50IGVycm9yID0gRlhGVF9Mb2FkX1NmbnRfVGFibGUocEZvbnQtPm1fRmFjZSwgRlRfTUFLRV9UQUcoJ0cnLCAnUycsICdVJywgJ0InKSwgMCwgTlVMTCwgJmxlbmd0aCk7DQotICAgICAgICBpZiAoIWVycm9yKSB7DQotICAgICAgICAgICAgcEZvbnQtPm1fcEdzdWJEYXRhID0gKHVuc2lnbmVkIGNoYXIqKUZYX0FsbG9jKEZYX0JZVEUsIGxlbmd0aCk7DQotICAgICAgICB9DQotICAgICAgICBpZiAoIXBGb250LT5tX3BHc3ViRGF0YSkgew0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGludCBlcnJvciA9IEZYRlRfTG9hZF9TZm50X1RhYmxlKHBGb250LT5tX0ZhY2UsIEZUX01BS0VfVEFHKCdHJywgJ1MnLCAnVScsICdCJyksIDAsIHBGb250LT5tX3BHc3ViRGF0YSwgTlVMTCk7DQotICAgIGlmICghZXJyb3IgJiYgcEZvbnQtPm1fcEdzdWJEYXRhKSB7DQotICAgICAgICBDRlhfR1NVQlRhYmxlKiBwR3N1YlRhYmxlID0gRlhfTkVXIENGWF9HU1VCVGFibGU7DQotICAgICAgICBpZiAoIXBHc3ViVGFibGUpIHsNCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwR3N1YlRhYmxlLT5tX0dzdWJJbXAuTG9hZEdTVUJUYWJsZSgoRlRfQnl0ZXMpcEZvbnQtPm1fcEdzdWJEYXRhKSkgew0KLSAgICAgICAgICAgIHJldHVybiBwR3N1YlRhYmxlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVsZXRlIHBHc3ViVGFibGU7DQotICAgIH0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2UuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZnJlZXR5cGUuaCIKKyNpbmNsdWRlICJ0dGdzdWJ0YWJsZS5oIgorQ0ZYX0dseXBoTWFwOjpDRlhfR2x5cGhNYXAoKQoreworfQorQ0ZYX0dseXBoTWFwOjp+Q0ZYX0dseXBoTWFwKCkKK3sKK30KK2V4dGVybiAiQyIgeworICAgIHN0YXRpYyBpbnQgX0NvbXBhcmVJbnQoY29uc3Qgdm9pZCogcDEsIGNvbnN0IHZvaWQqIHAyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICgqKEZYX0RXT1JEKilwMSkgLSAoKihGWF9EV09SRCopcDIpOworICAgIH0KK307CitzdHJ1Y3QgX0ludFBhaXIgeworICAgIEZYX0lOVDMyIGtleTsKKyAgICBGWF9JTlQzMiB2YWx1ZTsKK307Cit2b2lkIENGWF9HbHlwaE1hcDo6U2V0QXQoaW50IGtleSwgaW50IHZhbHVlKQoreworICAgIEZYX0RXT1JEIGNvdW50ID0gbV9CdWZmZXIuR2V0U2l6ZSgpIC8gc2l6ZW9mKF9JbnRQYWlyKTsKKyAgICBfSW50UGFpciogYnVmID0gKF9JbnRQYWlyKiltX0J1ZmZlci5HZXRCdWZmZXIoKTsKKyAgICBfSW50UGFpciBwYWlyID0ge2tleSwgdmFsdWV9OworICAgIGlmIChjb3VudCA9PSAwIHx8IGtleSA+IGJ1Zltjb3VudCAtIDFdLmtleSkgeworICAgICAgICBtX0J1ZmZlci5BcHBlbmRCbG9jaygmcGFpciwgc2l6ZW9mKF9JbnRQYWlyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IGxvdyA9IDAsIGhpZ2ggPSBjb3VudCAtIDE7CisgICAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7CisgICAgICAgIGludCBtaWQgPSAobG93ICsgaGlnaCkgLyAyOworICAgICAgICBpZiAoYnVmW21pZF0ua2V5IDwga2V5KSB7CisgICAgICAgICAgICBsb3cgPSBtaWQgKyAxOworICAgICAgICB9IGVsc2UgaWYgKGJ1ZlttaWRdLmtleSA+IGtleSkgeworICAgICAgICAgICAgaGlnaCA9IG1pZCAtIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBidWZbbWlkXS52YWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIG1fQnVmZmVyLkluc2VydEJsb2NrKGxvdyAqIHNpemVvZihfSW50UGFpciksICZwYWlyLCBzaXplb2YoX0ludFBhaXIpKTsKK30KK0ZYX0JPT0wgQ0ZYX0dseXBoTWFwOjpMb29rdXAoaW50IGtleSwgaW50ICZ2YWx1ZSkKK3sKKyAgICBGWF9MUFZPSUQgcFJlc3VsdCA9IEZYU1lTX2JzZWFyY2goJmtleSwgbV9CdWZmZXIuR2V0QnVmZmVyKCksIG1fQnVmZmVyLkdldFNpemUoKSAvIHNpemVvZihfSW50UGFpciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihfSW50UGFpciksIF9Db21wYXJlSW50KTsKKyAgICBpZiAocFJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgdmFsdWUgPSAoKEZYX0RXT1JEKilwUmVzdWx0KVsxXTsKKyAgICByZXR1cm4gVFJVRTsKK30KK2Jvb2wgQ0ZYX0NUVEdTVUJUYWJsZTo6TG9hZEdTVUJUYWJsZShGVF9CeXRlcyBnc3ViKQoreworICAgIGhlYWRlci5WZXJzaW9uID0gZ3N1YlswXSA8PCAyNCB8IGdzdWJbMV0gPDwgMTYgfCBnc3ViWzJdIDw8IDggfCBnc3ViWzNdOworICAgIGlmKGhlYWRlci5WZXJzaW9uICE9IDB4MDAwMTAwMDApIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBoZWFkZXIuU2NyaXB0TGlzdCAgPSBnc3ViWzRdIDw8IDggfCBnc3ViWzVdOworICAgIGhlYWRlci5GZWF0dXJlTGlzdCA9IGdzdWJbNl0gPDwgOCB8IGdzdWJbN107CisgICAgaGVhZGVyLkxvb2t1cExpc3QgID0gZ3N1Yls4XSA8PCA4IHwgZ3N1Yls5XTsKKyAgICByZXR1cm4gUGFyc2UoCisgICAgICAgICAgICAgICAmZ3N1YltoZWFkZXIuU2NyaXB0TGlzdF0sCisgICAgICAgICAgICAgICAmZ3N1YltoZWFkZXIuRmVhdHVyZUxpc3RdLAorICAgICAgICAgICAgICAgJmdzdWJbaGVhZGVyLkxvb2t1cExpc3RdKTsKK30KK2Jvb2wgQ0ZYX0NUVEdTVUJUYWJsZTo6R2V0VmVydGljYWxHbHlwaChUVF91aW50MzJfdCBnbHlwaG51bSwgVFRfdWludDMyX3QgKnZnbHlwaG51bSkKK3sKKyAgICBUVF91aW50MzJfdCB0YWdbXSA9IHsKKyAgICAgICAgKFRUX3VpbnQ4X3QpJ3YnIDw8IDI0IHwKKyAgICAgICAgKFRUX3VpbnQ4X3QpJ3InIDw8IDE2IHwKKyAgICAgICAgKFRUX3VpbnQ4X3QpJ3QnIDw8ICA4IHwKKyAgICAgICAgKFRUX3VpbnQ4X3QpJzInLAorICAgICAgICAoVFRfdWludDhfdCkndicgPDwgMjQgfAorICAgICAgICAoVFRfdWludDhfdCknZScgPDwgMTYgfAorICAgICAgICAoVFRfdWludDhfdCkncicgPDwgIDggfAorICAgICAgICAoVFRfdWludDhfdCkndCcsCisgICAgfTsKKyAgICBpZiAoIW1fYkZlYXV0dXJlTWFwTG9hZCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IFNjcmlwdExpc3QuU2NyaXB0Q291bnQ7IGkrKykgeworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPAkoU2NyaXB0TGlzdC5TY3JpcHRSZWNvcmQgKyBpKS0+U2NyaXB0LkxhbmdTeXNDb3VudDsgKytqKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCAoKFNjcmlwdExpc3QuU2NyaXB0UmVjb3JkICsgaSktPlNjcmlwdC5MYW5nU3lzUmVjb3JkICsgaiktPkxhbmdTeXMuRmVhdHVyZUNvdW50OyArK2spIHsKKyAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgaW5kZXggPSAqKCgoU2NyaXB0TGlzdC5TY3JpcHRSZWNvcmQgKyBpKS0+U2NyaXB0LkxhbmdTeXNSZWNvcmQgKyBqKS0+TGFuZ1N5cy5GZWF0dXJlSW5kZXggKyBrKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEZlYXR1cmVMaXN0LkZlYXR1cmVSZWNvcmRbaW5kZXhdLkZlYXR1cmVUYWcgPT0gdGFnWzBdIHx8IEZlYXR1cmVMaXN0LkZlYXR1cmVSZWNvcmRbaW5kZXhdLkZlYXR1cmVUYWcgPT0gdGFnWzFdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9mZWF0dXJlTWFwLkxvb2t1cChpbmRleCwgdmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mZWF0dXJlTWFwLlNldEF0KGluZGV4LCBpbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFtX2ZlYXR1cmVNYXAuR2V0U3RhcnRQb3NpdGlvbigpKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IEZlYXR1cmVMaXN0LkZlYXR1cmVDb3VudDsgaSArKykgeworICAgICAgICAgICAgICAgIGlmIChGZWF0dXJlTGlzdC5GZWF0dXJlUmVjb3JkW2ldLkZlYXR1cmVUYWcgPT0gdGFnWzBdIHx8IEZlYXR1cmVMaXN0LkZlYXR1cmVSZWNvcmRbaV0uRmVhdHVyZVRhZyA9PSB0YWdbMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9mZWF0dXJlTWFwLkxvb2t1cChpLCB2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZmVhdHVyZU1hcC5TZXRBdChpLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX2JGZWF1dHVyZU1hcExvYWQgPSBUUlVFOworICAgIH0KKyAgICBGWF9QT1NJVElPTiBwb3MgPSBtX2ZlYXR1cmVNYXAuR2V0U3RhcnRQb3NpdGlvbigpOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgRlhfRFdPUkQgaW5kZXgsIHZhbHVlOworICAgICAgICBtX2ZlYXR1cmVNYXAuR2V0TmV4dEFzc29jKHBvcywgaW5kZXgsIHZhbHVlKTsKKyAgICAgICAgaWYoR2V0VmVydGljYWxHbHlwaFN1YihnbHlwaG51bSwgdmdseXBobnVtLAkmRmVhdHVyZUxpc3QuRmVhdHVyZVJlY29yZFt2YWx1ZV0uRmVhdHVyZSkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KK2Jvb2wgQ0ZYX0NUVEdTVUJUYWJsZTo6R2V0VmVydGljYWxHbHlwaFN1YigKKyAgICBUVF91aW50MzJfdCBnbHlwaG51bSwKKyAgICBUVF91aW50MzJfdCAqdmdseXBobnVtLAorICAgIHN0cnVjdCBURmVhdHVyZSAqRmVhdHVyZSkKK3sKKyAgICBmb3IoaW50IGkgPSAwOyBpIDwgRmVhdHVyZS0+TG9va3VwQ291bnQ7IGkrKykgeworICAgICAgICBpbnQgaW5kZXggPSBGZWF0dXJlLT5Mb29rdXBMaXN0SW5kZXhbaV07CisgICAgICAgIGlmKGluZGV4IDwgMCB8fCBMb29rdXBMaXN0Lkxvb2t1cENvdW50IDwgaW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmKExvb2t1cExpc3QuTG9va3VwW2luZGV4XS5Mb29rdXBUeXBlID09IDEpIHsKKyAgICAgICAgICAgIGlmKEdldFZlcnRpY2FsR2x5cGhTdWIyKAorICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhudW0sCisgICAgICAgICAgICAgICAgICAgICAgICB2Z2x5cGhudW0sCisgICAgICAgICAgICAgICAgICAgICAgICAmTG9va3VwTGlzdC5Mb29rdXBbaW5kZXhdKSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KK2Jvb2wgQ0ZYX0NUVEdTVUJUYWJsZTo6R2V0VmVydGljYWxHbHlwaFN1YjIoCisgICAgVFRfdWludDMyX3QgZ2x5cGhudW0sCisgICAgVFRfdWludDMyX3QgKnZnbHlwaG51bSwKKyAgICBzdHJ1Y3QgVExvb2t1cCAqTG9va3VwKQoreworICAgIGZvcihpbnQgaSA9IDA7IGkgPCBMb29rdXAtPlN1YlRhYmxlQ291bnQ7IGkrKykgeworICAgICAgICBzd2l0Y2goTG9va3VwLT5TdWJUYWJsZVtpXS0+U3Vic3RGb3JtYXQpIHsKKyAgICAgICAgICAgIGNhc2UgMTogeworICAgICAgICAgICAgICAgICAgICBUU2luZ2xlU3Vic3RGb3JtYXQxICp0YmwxID0gKFRTaW5nbGVTdWJzdEZvcm1hdDEqKUxvb2t1cC0+U3ViVGFibGVbaV07CisgICAgICAgICAgICAgICAgICAgIGlmKEdldENvdmVyYWdlSW5kZXgodGJsMS0+Q292ZXJhZ2UsIGdseXBobnVtKSA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqdmdseXBobnVtID0gZ2x5cGhudW0gKyB0YmwxLT5EZWx0YUdseXBoSUQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIDI6IHsKKyAgICAgICAgICAgICAgICAgICAgVFNpbmdsZVN1YnN0Rm9ybWF0MiAqdGJsMiA9IChUU2luZ2xlU3Vic3RGb3JtYXQyKilMb29rdXAtPlN1YlRhYmxlW2ldOworICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBHZXRDb3ZlcmFnZUluZGV4KHRibDItPkNvdmVyYWdlLCBnbHlwaG51bSk7CisgICAgICAgICAgICAgICAgICAgIGlmKDAgPD0gaW5kZXggJiYgaW5kZXggPCB0YmwyLT5HbHlwaENvdW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqdmdseXBobnVtID0gdGJsMi0+U3Vic3RpdHV0ZVtpbmRleF07CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQoraW50IENGWF9DVFRHU1VCVGFibGU6OkdldENvdmVyYWdlSW5kZXgoc3RydWN0IFRDb3ZlcmFnZUZvcm1hdEJhc2UgKkNvdmVyYWdlLCBUVF91aW50MzJfdCBnKQoreworICAgIGludCBpID0gMDsKKyAgICBpZihDb3ZlcmFnZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgc3dpdGNoKENvdmVyYWdlLT5Db3ZlcmFnZUZvcm1hdCkgeworICAgICAgICBjYXNlIDE6IHsKKyAgICAgICAgICAgICAgICBUQ292ZXJhZ2VGb3JtYXQxICpjMSA9IChUQ292ZXJhZ2VGb3JtYXQxKilDb3ZlcmFnZTsKKyAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBjMS0+R2x5cGhDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmKChUVF91aW50MzJfdCljMS0+R2x5cGhBcnJheVtpXSA9PSBnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgMjogeworICAgICAgICAgICAgICAgIFRDb3ZlcmFnZUZvcm1hdDIgKmMyID0gKFRDb3ZlcmFnZUZvcm1hdDIqKUNvdmVyYWdlOworICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IGMyLT5SYW5nZUNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgVFRfdWludDMyX3QgcyA9IGMyLT5SYW5nZVJlY29yZFtpXS5TdGFydDsKKyAgICAgICAgICAgICAgICAgICAgVFRfdWludDMyX3QgZSA9IGMyLT5SYW5nZVJlY29yZFtpXS5FbmQ7CisgICAgICAgICAgICAgICAgICAgIFRUX3VpbnQzMl90IHNpID0gYzItPlJhbmdlUmVjb3JkW2ldLlN0YXJ0Q292ZXJhZ2VJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHMgPD0gZyAmJiBnIDw9IGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaSArIGcgLSBzOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIC0xOworfQorYm9vbCBDRlhfQ1RUR1NVQlRhYmxlOjpQYXJzZSgKKyAgICBGVF9CeXRlcyBzY3JpcHRsaXN0LAorICAgIEZUX0J5dGVzIGZlYXR1cmVsaXN0LAorICAgIEZUX0J5dGVzIGxvb2t1cGxpc3QpCit7CisgICAgUGFyc2VTY3JpcHRMaXN0KHNjcmlwdGxpc3QsICZTY3JpcHRMaXN0KTsKKyAgICBQYXJzZUZlYXR1cmVMaXN0KGZlYXR1cmVsaXN0LCAmRmVhdHVyZUxpc3QpOworICAgIFBhcnNlTG9va3VwTGlzdChsb29rdXBsaXN0LCAmTG9va3VwTGlzdCk7CisgICAgcmV0dXJuIHRydWU7Cit9Cit2b2lkIENGWF9DVFRHU1VCVGFibGU6OlBhcnNlU2NyaXB0TGlzdChGVF9CeXRlcyByYXcsIHN0cnVjdCBUU2NyaXB0TGlzdCAqcmVjKQoreworICAgIGludCBpOworICAgIEZUX0J5dGVzIHNwID0gcmF3OworICAgIHJlYy0+U2NyaXB0Q291bnQgPSBHZXRVSW50MTYoc3ApOworICAgIGlmKHJlYy0+U2NyaXB0Q291bnQgPD0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlYy0+U2NyaXB0UmVjb3JkID0gbmV3IHN0cnVjdCBUU2NyaXB0UmVjb3JkW3JlYy0+U2NyaXB0Q291bnRdOworICAgIGZvcihpID0gMDsgaSA8IHJlYy0+U2NyaXB0Q291bnQ7IGkrKykgeworICAgICAgICByZWMtPlNjcmlwdFJlY29yZFtpXS5TY3JpcHRUYWcgPSBHZXRVSW50MzIoc3ApOworICAgICAgICBUVF91aW50MTZfdCBvZmZzZXQgPSBHZXRVSW50MTYoc3ApOworICAgICAgICBQYXJzZVNjcmlwdCgKKyAgICAgICAgICAgICZyYXdbb2Zmc2V0XSwKKyAgICAgICAgICAgICZyZWMtPlNjcmlwdFJlY29yZFtpXS5TY3JpcHQpOworICAgIH0KK30KK3ZvaWQgQ0ZYX0NUVEdTVUJUYWJsZTo6UGFyc2VTY3JpcHQoRlRfQnl0ZXMgcmF3LCBzdHJ1Y3QgVFNjcmlwdCAqcmVjKQoreworICAgIGludCBpOworICAgIEZUX0J5dGVzIHNwID0gcmF3OworICAgIHJlYy0+RGVmYXVsdExhbmdTeXMgPSBHZXRVSW50MTYoc3ApOworICAgIHJlYy0+TGFuZ1N5c0NvdW50ID0gR2V0VUludDE2KHNwKTsKKyAgICBpZihyZWMtPkxhbmdTeXNDb3VudCA8PSAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVjLT5MYW5nU3lzUmVjb3JkID0gbmV3IHN0cnVjdCBUTGFuZ1N5c1JlY29yZFtyZWMtPkxhbmdTeXNDb3VudF07CisgICAgZm9yKGkgPSAwOyBpIDwgcmVjLT5MYW5nU3lzQ291bnQ7IGkrKykgeworICAgICAgICByZWMtPkxhbmdTeXNSZWNvcmRbaV0uTGFuZ1N5c1RhZyA9IEdldFVJbnQzMihzcCk7CisgICAgICAgIFRUX3VpbnQxNl90IG9mZnNldCA9IEdldFVJbnQxNihzcCk7CisgICAgICAgIFBhcnNlTGFuZ1N5cygKKyAgICAgICAgICAgICZyYXdbb2Zmc2V0XSwKKyAgICAgICAgICAgICZyZWMtPkxhbmdTeXNSZWNvcmRbaV0uTGFuZ1N5cyk7CisgICAgfQorfQordm9pZCBDRlhfQ1RUR1NVQlRhYmxlOjpQYXJzZUxhbmdTeXMoRlRfQnl0ZXMgcmF3LCBzdHJ1Y3QgVExhbmdTeXMgKnJlYykKK3sKKyAgICBGVF9CeXRlcyBzcCA9IHJhdzsKKyAgICByZWMtPkxvb2t1cE9yZGVyID0gR2V0VUludDE2KHNwKTsKKyAgICByZWMtPlJlcUZlYXR1cmVJbmRleCA9IEdldFVJbnQxNihzcCk7CisgICAgcmVjLT5GZWF0dXJlQ291bnQgPSBHZXRVSW50MTYoc3ApOworICAgIGlmKHJlYy0+RmVhdHVyZUNvdW50IDw9IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICByZWMtPkZlYXR1cmVJbmRleCA9IG5ldyBUVF91aW50MTZfdFtyZWMtPkZlYXR1cmVDb3VudF07CisgICAgRlhTWVNfbWVtc2V0MzIocmVjLT5GZWF0dXJlSW5kZXgsIDAsIHNpemVvZihUVF91aW50MTZfdCkgKiByZWMtPkZlYXR1cmVDb3VudCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWMtPkZlYXR1cmVDb3VudDsgKytpKSB7CisgICAgICAgIHJlYy0+RmVhdHVyZUluZGV4W2ldID0gR2V0VUludDE2KHNwKTsKKyAgICB9Cit9Cit2b2lkIENGWF9DVFRHU1VCVGFibGU6OlBhcnNlRmVhdHVyZUxpc3QoRlRfQnl0ZXMgcmF3LCBURmVhdHVyZUxpc3QgKnJlYykKK3sKKyAgICBpbnQgaTsKKyAgICBGVF9CeXRlcyBzcCA9IHJhdzsKKyAgICByZWMtPkZlYXR1cmVDb3VudCA9IEdldFVJbnQxNihzcCk7CisgICAgaWYocmVjLT5GZWF0dXJlQ291bnQgPD0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlYy0+RmVhdHVyZVJlY29yZCA9IG5ldyBzdHJ1Y3QgVEZlYXR1cmVSZWNvcmRbcmVjLT5GZWF0dXJlQ291bnRdOworICAgIGZvcihpID0gMDsgaSA8IHJlYy0+RmVhdHVyZUNvdW50OyBpKyspIHsKKyAgICAgICAgcmVjLT5GZWF0dXJlUmVjb3JkW2ldLkZlYXR1cmVUYWcgPSBHZXRVSW50MzIoc3ApOworICAgICAgICBUVF91aW50MTZfdCBvZmZzZXQgPSBHZXRVSW50MTYoc3ApOworICAgICAgICBQYXJzZUZlYXR1cmUoCisgICAgICAgICAgICAmcmF3W29mZnNldF0sCisgICAgICAgICAgICAmcmVjLT5GZWF0dXJlUmVjb3JkW2ldLkZlYXR1cmUpOworICAgIH0KK30KK3ZvaWQgQ0ZYX0NUVEdTVUJUYWJsZTo6UGFyc2VGZWF0dXJlKEZUX0J5dGVzIHJhdywgVEZlYXR1cmUgKnJlYykKK3sKKyAgICBpbnQgaTsKKyAgICBGVF9CeXRlcyBzcCA9IHJhdzsKKyAgICByZWMtPkZlYXR1cmVQYXJhbXMgPSBHZXRVSW50MTYoc3ApOworICAgIHJlYy0+TG9va3VwQ291bnQgPSBHZXRVSW50MTYoc3ApOworICAgIGlmKHJlYy0+TG9va3VwQ291bnQgPD0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlYy0+TG9va3VwTGlzdEluZGV4ID0gbmV3IFRUX3VpbnQxNl90W3JlYy0+TG9va3VwQ291bnRdOworICAgIGZvcihpID0gMDsgaSA8IHJlYy0+TG9va3VwQ291bnQ7IGkrKykgeworICAgICAgICByZWMtPkxvb2t1cExpc3RJbmRleFtpXSA9IEdldFVJbnQxNihzcCk7CisgICAgfQorfQordm9pZCBDRlhfQ1RUR1NVQlRhYmxlOjpQYXJzZUxvb2t1cExpc3QoRlRfQnl0ZXMgcmF3LCBUTG9va3VwTGlzdCAqcmVjKQoreworICAgIGludCBpOworICAgIEZUX0J5dGVzIHNwID0gcmF3OworICAgIHJlYy0+TG9va3VwQ291bnQgPSBHZXRVSW50MTYoc3ApOworICAgIGlmKHJlYy0+TG9va3VwQ291bnQgPD0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlYy0+TG9va3VwID0gbmV3IHN0cnVjdCBUTG9va3VwW3JlYy0+TG9va3VwQ291bnRdOworICAgIGZvcihpID0gMDsgaSA8IHJlYy0+TG9va3VwQ291bnQ7IGkrKykgeworICAgICAgICBUVF91aW50MTZfdCBvZmZzZXQgPSBHZXRVSW50MTYoc3ApOworICAgICAgICBQYXJzZUxvb2t1cCgKKyAgICAgICAgICAgICZyYXdbb2Zmc2V0XSwKKyAgICAgICAgICAgICZyZWMtPkxvb2t1cFtpXSk7CisgICAgfQorfQordm9pZCBDRlhfQ1RUR1NVQlRhYmxlOjpQYXJzZUxvb2t1cChGVF9CeXRlcyByYXcsIFRMb29rdXAgKnJlYykKK3sKKyAgICBpbnQgaTsKKyAgICBGVF9CeXRlcyBzcCA9IHJhdzsKKyAgICByZWMtPkxvb2t1cFR5cGUgPSBHZXRVSW50MTYoc3ApOworICAgIHJlYy0+TG9va3VwRmxhZyA9IEdldFVJbnQxNihzcCk7CisgICAgcmVjLT5TdWJUYWJsZUNvdW50ID0gR2V0VUludDE2KHNwKTsKKyAgICBpZihyZWMtPlN1YlRhYmxlQ291bnQgPD0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlYy0+U3ViVGFibGUgPSBuZXcgc3RydWN0IFRTdWJUYWJsZUJhc2UqW3JlYy0+U3ViVGFibGVDb3VudF07CisgICAgZm9yKGkgPSAwOyBpIDwgcmVjLT5TdWJUYWJsZUNvdW50OyBpKyspIHsKKyAgICAgICAgcmVjLT5TdWJUYWJsZVtpXSA9IE5VTEw7CisgICAgfQorICAgIGlmKHJlYy0+TG9va3VwVHlwZSAhPSAxKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZm9yKGkgPSAwOyBpIDwgcmVjLT5TdWJUYWJsZUNvdW50OyBpKyspIHsKKyAgICAgICAgVFRfdWludDE2X3Qgb2Zmc2V0ID0gR2V0VUludDE2KHNwKTsKKyAgICAgICAgUGFyc2VTaW5nbGVTdWJzdCgKKyAgICAgICAgICAgICZyYXdbb2Zmc2V0XSwKKyAgICAgICAgICAgICZyZWMtPlN1YlRhYmxlW2ldKTsKKyAgICB9Cit9Cit2b2lkIENGWF9DVFRHU1VCVGFibGU6OlBhcnNlQ292ZXJhZ2UoRlRfQnl0ZXMgcmF3LCBUQ292ZXJhZ2VGb3JtYXRCYXNlICoqcmVjKQoreworICAgIEZUX0J5dGVzIHNwID0gcmF3OworICAgIFRUX3VpbnQxNl90IEZvcm1hdCA9IEdldFVJbnQxNihzcCk7CisgICAgc3dpdGNoKEZvcm1hdCkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAqcmVjID0gbmV3IFRDb3ZlcmFnZUZvcm1hdDEoKTsKKyAgICAgICAgICAgIFBhcnNlQ292ZXJhZ2VGb3JtYXQxKHJhdywgKFRDb3ZlcmFnZUZvcm1hdDEqKSpyZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICpyZWMgPSBuZXcgVENvdmVyYWdlRm9ybWF0MigpOworICAgICAgICAgICAgUGFyc2VDb3ZlcmFnZUZvcm1hdDIocmF3LCAoVENvdmVyYWdlRm9ybWF0MiopKnJlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9Cit2b2lkIENGWF9DVFRHU1VCVGFibGU6OlBhcnNlQ292ZXJhZ2VGb3JtYXQxKEZUX0J5dGVzIHJhdywgVENvdmVyYWdlRm9ybWF0MSAqcmVjKQoreworICAgIGludCBpOworICAgIEZUX0J5dGVzIHNwID0gcmF3OworICAgIEdldFVJbnQxNihzcCk7CisgICAgcmVjLT5HbHlwaENvdW50ID0gR2V0VUludDE2KHNwKTsKKyAgICBpZihyZWMtPkdseXBoQ291bnQgPD0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlYy0+R2x5cGhBcnJheSA9IG5ldyBUVF91aW50MTZfdFtyZWMtPkdseXBoQ291bnRdOworICAgIGZvcihpID0gMDsgaSA8IHJlYy0+R2x5cGhDb3VudDsgaSsrKSB7CisgICAgICAgIHJlYy0+R2x5cGhBcnJheVtpXSA9IEdldFVJbnQxNihzcCk7CisgICAgfQorfQordm9pZCBDRlhfQ1RUR1NVQlRhYmxlOjpQYXJzZUNvdmVyYWdlRm9ybWF0MihGVF9CeXRlcyByYXcsIFRDb3ZlcmFnZUZvcm1hdDIgKnJlYykKK3sKKyAgICBpbnQgaTsKKyAgICBGVF9CeXRlcyBzcCA9IHJhdzsKKyAgICBHZXRVSW50MTYoc3ApOworICAgIHJlYy0+UmFuZ2VDb3VudCA9IEdldFVJbnQxNihzcCk7CisgICAgaWYocmVjLT5SYW5nZUNvdW50IDw9IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICByZWMtPlJhbmdlUmVjb3JkID0gbmV3IFRSYW5nZVJlY29yZFtyZWMtPlJhbmdlQ291bnRdOworICAgIGZvcihpID0gMDsgaSA8IHJlYy0+UmFuZ2VDb3VudDsgaSsrKSB7CisgICAgICAgIHJlYy0+UmFuZ2VSZWNvcmRbaV0uU3RhcnQgPSBHZXRVSW50MTYoc3ApOworICAgICAgICByZWMtPlJhbmdlUmVjb3JkW2ldLkVuZCA9IEdldFVJbnQxNihzcCk7CisgICAgICAgIHJlYy0+UmFuZ2VSZWNvcmRbaV0uU3RhcnRDb3ZlcmFnZUluZGV4ID0gR2V0VUludDE2KHNwKTsKKyAgICB9Cit9Cit2b2lkIENGWF9DVFRHU1VCVGFibGU6OlBhcnNlU2luZ2xlU3Vic3QoRlRfQnl0ZXMgcmF3LCBUU3ViVGFibGVCYXNlICoqcmVjKQoreworICAgIEZUX0J5dGVzIHNwID0gcmF3OworICAgIFRUX3VpbnQxNl90IEZvcm1hdCA9IEdldFVJbnQxNihzcCk7CisgICAgc3dpdGNoKEZvcm1hdCkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAqcmVjID0gbmV3IFRTaW5nbGVTdWJzdEZvcm1hdDEoKTsKKyAgICAgICAgICAgIFBhcnNlU2luZ2xlU3Vic3RGb3JtYXQxKHJhdywgKFRTaW5nbGVTdWJzdEZvcm1hdDEqKSpyZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICpyZWMgPSBuZXcgVFNpbmdsZVN1YnN0Rm9ybWF0MigpOworICAgICAgICAgICAgUGFyc2VTaW5nbGVTdWJzdEZvcm1hdDIocmF3LCAoVFNpbmdsZVN1YnN0Rm9ybWF0MiopKnJlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9Cit2b2lkIENGWF9DVFRHU1VCVGFibGU6OlBhcnNlU2luZ2xlU3Vic3RGb3JtYXQxKEZUX0J5dGVzIHJhdywgVFNpbmdsZVN1YnN0Rm9ybWF0MSAqcmVjKQoreworICAgIEZUX0J5dGVzIHNwID0gcmF3OworICAgIEdldFVJbnQxNihzcCk7CisgICAgVFRfdWludDE2X3Qgb2Zmc2V0ID0gR2V0VUludDE2KHNwKTsKKyAgICBQYXJzZUNvdmVyYWdlKAorICAgICAgICAmcmF3W29mZnNldF0sCisgICAgICAgICZyZWMtPkNvdmVyYWdlKTsKKyAgICByZWMtPkRlbHRhR2x5cGhJRCA9IEdldEludDE2KHNwKTsKK30KK3ZvaWQgQ0ZYX0NUVEdTVUJUYWJsZTo6UGFyc2VTaW5nbGVTdWJzdEZvcm1hdDIoRlRfQnl0ZXMgcmF3LCBUU2luZ2xlU3Vic3RGb3JtYXQyICpyZWMpCit7CisgICAgaW50IGk7CisgICAgRlRfQnl0ZXMgc3AgPSByYXc7CisgICAgR2V0VUludDE2KHNwKTsKKyAgICBUVF91aW50MTZfdCBvZmZzZXQgPSBHZXRVSW50MTYoc3ApOworICAgIFBhcnNlQ292ZXJhZ2UoCisgICAgICAgICZyYXdbb2Zmc2V0XSwKKyAgICAgICAgJnJlYy0+Q292ZXJhZ2UpOworICAgIHJlYy0+R2x5cGhDb3VudCA9IEdldFVJbnQxNihzcCk7CisgICAgaWYocmVjLT5HbHlwaENvdW50IDw9IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICByZWMtPlN1YnN0aXR1dGUgPSBuZXcgVFRfdWludDE2X3RbcmVjLT5HbHlwaENvdW50XTsKKyAgICBmb3IoaSA9IDA7IGkgPCByZWMtPkdseXBoQ291bnQ7IGkrKykgeworICAgICAgICByZWMtPlN1YnN0aXR1dGVbaV0gPSBHZXRVSW50MTYoc3ApOworICAgIH0KK30KK0ZYX0JPT0wgQ0ZYX0dTVUJUYWJsZTo6R2V0VmVydGljYWxHbHlwaChGWF9EV09SRCBnbHlwaG51bSwgRlhfRFdPUkQqIHZnbHlwaG51bSkKK3sKKyAgICByZXR1cm4gbV9Hc3ViSW1wLkdldFZlcnRpY2FsR2x5cGgoZ2x5cGhudW0sIHZnbHlwaG51bSk7Cit9CitJRlhfR1NVQlRhYmxlKiBGWEdFX0NyZWF0ZUdTVUJUYWJsZShDRlhfRm9udCogcEZvbnQpCit7CisgICAgaWYgKCFwRm9udCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKE5VTEwgPT0gcEZvbnQtPm1fcEdzdWJEYXRhKSB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuZ3RoID0gMDsKKyAgICAgICAgaW50IGVycm9yID0gRlhGVF9Mb2FkX1NmbnRfVGFibGUocEZvbnQtPm1fRmFjZSwgRlRfTUFLRV9UQUcoJ0cnLCAnUycsICdVJywgJ0InKSwgMCwgTlVMTCwgJmxlbmd0aCk7CisgICAgICAgIGlmICghZXJyb3IpIHsKKyAgICAgICAgICAgIHBGb250LT5tX3BHc3ViRGF0YSA9ICh1bnNpZ25lZCBjaGFyKilGWF9BbGxvYyhGWF9CWVRFLCBsZW5ndGgpOworICAgICAgICB9CisgICAgICAgIGlmICghcEZvbnQtPm1fcEdzdWJEYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpbnQgZXJyb3IgPSBGWEZUX0xvYWRfU2ZudF9UYWJsZShwRm9udC0+bV9GYWNlLCBGVF9NQUtFX1RBRygnRycsICdTJywgJ1UnLCAnQicpLCAwLCBwRm9udC0+bV9wR3N1YkRhdGEsIE5VTEwpOworICAgIGlmICghZXJyb3IgJiYgcEZvbnQtPm1fcEdzdWJEYXRhKSB7CisgICAgICAgIENGWF9HU1VCVGFibGUqIHBHc3ViVGFibGUgPSBGWF9ORVcgQ0ZYX0dTVUJUYWJsZTsKKyAgICAgICAgaWYgKCFwR3N1YlRhYmxlKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAocEdzdWJUYWJsZS0+bV9Hc3ViSW1wLkxvYWRHU1VCVGFibGUoKEZUX0J5dGVzKXBGb250LT5tX3BHc3ViRGF0YSkpIHsKKyAgICAgICAgICAgIHJldHVybiBwR3N1YlRhYmxlOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZSBwR3N1YlRhYmxlOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9mb250L3R0Z3N1YnRhYmxlLmggYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfZm9udC90dGdzdWJ0YWJsZS5oCmluZGV4IGExZjBlODguLmJmOWM3YTQgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9mb250L3R0Z3N1YnRhYmxlLmgKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX2ZvbnQvdHRnc3VidGFibGUuaApAQCAtMSw0MTkgKzEsNDE5IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIFRUR1NVQlRhYmxlX0gNCi0jZGVmaW5lIFRUR1NVQlRhYmxlX0gNCi0jaW5jbHVkZSAiLi4vLi4vZnhfZnJlZXR5cGUuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNydC9meF9iYXNpYy5oIg0KLSNpbmNsdWRlICJjb21tb24uaCINCi1jbGFzcyBDRlhfR2x5cGhNYXANCi17DQotcHVibGljOg0KLSAgICBDRlhfR2x5cGhNYXAoKTsNCi0gICAgfkNGWF9HbHlwaE1hcCgpOw0KLSAgICB2b2lkCVNldEF0KGludCBrZXksIGludCB2YWx1ZSk7DQotICAgIEZYX0JPT0wJTG9va3VwKGludCBrZXksIGludCAmdmFsdWUpOw0KLXByb3RlY3RlZDoNCi0gICAgQ0ZYX0JpbmFyeUJ1ZgltX0J1ZmZlcjsNCi19Ow0KLWNsYXNzIENGWF9DVFRHU1VCVGFibGUgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENGWF9DVFRHU1VCVGFibGUodm9pZCk6IGxvYWRlZChmYWxzZSksIG1fYkZlYXV0dXJlTWFwTG9hZChGQUxTRSkge307DQotICAgIENGWF9DVFRHU1VCVGFibGUoRlRfQnl0ZXMgZ3N1Yik6IGxvYWRlZChmYWxzZSksIG1fYkZlYXV0dXJlTWFwTG9hZChGQUxTRSkNCi0gICAgew0KLSAgICAgICAgTG9hZEdTVUJUYWJsZShnc3ViKTsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIH5DRlhfQ1RUR1NVQlRhYmxlKCkge30NCi0gICAgYm9vbCBJc09rKHZvaWQpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBsb2FkZWQ7DQotICAgIH0NCi0gICAgYm9vbCBMb2FkR1NVQlRhYmxlKEZUX0J5dGVzIGdzdWIpOw0KLSAgICBib29sIEdldFZlcnRpY2FsR2x5cGgoVFRfdWludDMyX3QgZ2x5cGhudW0sIFRUX3VpbnQzMl90ICp2Z2x5cGhudW0pOw0KLXByaXZhdGU6DQotICAgIHN0cnVjdCB0dF9nc3ViX2hlYWRlciB7DQotICAgICAgICBUVF91aW50MzJfdCBWZXJzaW9uOw0KLSAgICAgICAgVFRfdWludDE2X3QgU2NyaXB0TGlzdDsNCi0gICAgICAgIFRUX3VpbnQxNl90IEZlYXR1cmVMaXN0Ow0KLSAgICAgICAgVFRfdWludDE2X3QgTG9va3VwTGlzdDsNCi0gICAgfTsNCi0gICAgc3RydWN0IFRMYW5nU3lzIHsNCi0gICAgICAgIFRUX3VpbnQxNl90IExvb2t1cE9yZGVyOw0KLSAgICAgICAgVFRfdWludDE2X3QgUmVxRmVhdHVyZUluZGV4Ow0KLSAgICAgICAgVFRfdWludDE2X3QgRmVhdHVyZUNvdW50Ow0KLSAgICAgICAgVFRfdWludDE2X3QgKkZlYXR1cmVJbmRleDsNCi0gICAgICAgIFRMYW5nU3lzKCk6IExvb2t1cE9yZGVyKDApLCBSZXFGZWF0dXJlSW5kZXgoMCksIEZlYXR1cmVDb3VudCgwKSwgRmVhdHVyZUluZGV4KE5VTEwpIHt9DQotICAgICAgICB+VExhbmdTeXMoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlmKEZlYXR1cmVJbmRleCkgew0KLSAgICAgICAgICAgICAgICBkZWxldGVbXSBGZWF0dXJlSW5kZXg7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICBwcml2YXRlOg0KLSAgICAgICAgVExhbmdTeXMoY29uc3QgVExhbmdTeXMmKTsNCi0gICAgICAgIFRMYW5nU3lzJiBvcGVyYXRvcj0oY29uc3QgVExhbmdTeXMmKTsNCi0gICAgfTsNCi0gICAgc3RydWN0IFRMYW5nU3lzUmVjb3JkIHsNCi0gICAgICAgIFRUX3VpbnQzMl90IExhbmdTeXNUYWc7DQotICAgICAgICBzdHJ1Y3QgVExhbmdTeXMgTGFuZ1N5czsNCi0gICAgICAgIFRMYW5nU3lzUmVjb3JkKCk6IExhbmdTeXNUYWcoMCkge30NCi0gICAgcHJpdmF0ZToNCi0gICAgICAgIFRMYW5nU3lzUmVjb3JkKGNvbnN0IFRMYW5nU3lzUmVjb3JkJik7DQotICAgICAgICBUTGFuZ1N5c1JlY29yZCYgb3BlcmF0b3I9KGNvbnN0IFRMYW5nU3lzUmVjb3JkJik7DQotICAgIH07DQotICAgIHN0cnVjdCBUU2NyaXB0IHsNCi0gICAgICAgIFRUX3VpbnQxNl90IERlZmF1bHRMYW5nU3lzOw0KLSAgICAgICAgVFRfdWludDE2X3QgTGFuZ1N5c0NvdW50Ow0KLSAgICAgICAgc3RydWN0IFRMYW5nU3lzUmVjb3JkICpMYW5nU3lzUmVjb3JkOw0KLSAgICAgICAgVFNjcmlwdCgpOiBEZWZhdWx0TGFuZ1N5cygwKSwgTGFuZ1N5c0NvdW50KDApLCBMYW5nU3lzUmVjb3JkKE5VTEwpIHt9DQotICAgICAgICB+VFNjcmlwdCgpDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYoTGFuZ1N5c1JlY29yZCkgew0KLSAgICAgICAgICAgICAgICBkZWxldGVbXSBMYW5nU3lzUmVjb3JkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgcHJpdmF0ZToNCi0gICAgICAgIFRTY3JpcHQoY29uc3QgVFNjcmlwdCYpOw0KLSAgICAgICAgVFNjcmlwdCYgb3BlcmF0b3I9KGNvbnN0IFRTY3JpcHQmKTsNCi0gICAgfTsNCi0gICAgc3RydWN0IFRTY3JpcHRSZWNvcmQgew0KLSAgICAgICAgVFRfdWludDMyX3QgU2NyaXB0VGFnOw0KLSAgICAgICAgc3RydWN0IFRTY3JpcHQgU2NyaXB0Ow0KLSAgICAgICAgVFNjcmlwdFJlY29yZCgpOiBTY3JpcHRUYWcoMCkge30NCi0gICAgcHJpdmF0ZToNCi0gICAgICAgIFRTY3JpcHRSZWNvcmQoY29uc3QgVFNjcmlwdFJlY29yZCYpOw0KLSAgICAgICAgVFNjcmlwdFJlY29yZCYgb3BlcmF0b3I9KGNvbnN0IFRTY3JpcHRSZWNvcmQmKTsNCi0gICAgfTsNCi0gICAgc3RydWN0IFRTY3JpcHRMaXN0IHsNCi0gICAgICAgIFRUX3VpbnQxNl90IFNjcmlwdENvdW50Ow0KLSAgICAgICAgc3RydWN0IFRTY3JpcHRSZWNvcmQgKlNjcmlwdFJlY29yZDsNCi0gICAgICAgIFRTY3JpcHRMaXN0KCk6IFNjcmlwdENvdW50KDApLCBTY3JpcHRSZWNvcmQoTlVMTCkge30NCi0gICAgICAgIH5UU2NyaXB0TGlzdCgpDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYoU2NyaXB0UmVjb3JkKSB7DQotICAgICAgICAgICAgICAgIGRlbGV0ZVtdIFNjcmlwdFJlY29yZDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIHByaXZhdGU6DQotICAgICAgICBUU2NyaXB0TGlzdChjb25zdCBUU2NyaXB0TGlzdCYpOw0KLSAgICAgICAgVFNjcmlwdExpc3QmIG9wZXJhdG9yPShjb25zdCBUU2NyaXB0TGlzdCYpOw0KLSAgICB9Ow0KLSAgICBzdHJ1Y3QgVEZlYXR1cmUgew0KLSAgICAgICAgVFRfdWludDE2X3QgRmVhdHVyZVBhcmFtczsNCi0gICAgICAgIGludCBMb29rdXBDb3VudDsNCi0gICAgICAgIFRUX3VpbnQxNl90ICpMb29rdXBMaXN0SW5kZXg7DQotICAgICAgICBURmVhdHVyZSgpOiBGZWF0dXJlUGFyYW1zKDApLCBMb29rdXBDb3VudCgwKSwgTG9va3VwTGlzdEluZGV4KE5VTEwpIHt9DQotICAgICAgICB+VEZlYXR1cmUoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlmKExvb2t1cExpc3RJbmRleCkgew0KLSAgICAgICAgICAgICAgICBkZWxldGVbXSBMb29rdXBMaXN0SW5kZXg7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICBwcml2YXRlOg0KLSAgICAgICAgVEZlYXR1cmUoY29uc3QgVEZlYXR1cmUmKTsNCi0gICAgICAgIFRGZWF0dXJlJiBvcGVyYXRvcj0oY29uc3QgVEZlYXR1cmUmKTsNCi0gICAgfTsNCi0gICAgc3RydWN0IFRGZWF0dXJlUmVjb3JkIHsNCi0gICAgICAgIFRUX3VpbnQzMl90IEZlYXR1cmVUYWc7DQotICAgICAgICBzdHJ1Y3QgVEZlYXR1cmUgRmVhdHVyZTsNCi0gICAgICAgIFRGZWF0dXJlUmVjb3JkKCk6IEZlYXR1cmVUYWcoMCkge30NCi0gICAgcHJpdmF0ZToNCi0gICAgICAgIFRGZWF0dXJlUmVjb3JkKGNvbnN0IFRGZWF0dXJlUmVjb3JkJik7DQotICAgICAgICBURmVhdHVyZVJlY29yZCYgb3BlcmF0b3I9KGNvbnN0IFRGZWF0dXJlUmVjb3JkJik7DQotICAgIH07DQotICAgIHN0cnVjdCBURmVhdHVyZUxpc3Qgew0KLSAgICAgICAgaW50IEZlYXR1cmVDb3VudDsNCi0gICAgICAgIHN0cnVjdCBURmVhdHVyZVJlY29yZCAqRmVhdHVyZVJlY29yZDsNCi0gICAgICAgIFRGZWF0dXJlTGlzdCgpOiBGZWF0dXJlQ291bnQoMCksIEZlYXR1cmVSZWNvcmQoTlVMTCkge30NCi0gICAgICAgIH5URmVhdHVyZUxpc3QoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlmKEZlYXR1cmVSZWNvcmQpIHsNCi0gICAgICAgICAgICAgICAgZGVsZXRlW10gRmVhdHVyZVJlY29yZDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIHByaXZhdGU6DQotICAgICAgICBURmVhdHVyZUxpc3QoY29uc3QgVEZlYXR1cmVMaXN0Jik7DQotICAgICAgICBURmVhdHVyZUxpc3QmIG9wZXJhdG9yPShjb25zdCBURmVhdHVyZUxpc3QmKTsNCi0gICAgfTsNCi0gICAgZW51bSBUTG9va3VwRmxhZyB7DQotICAgICAgICBMT09LVVBGTEFHX1JpZ2h0VG9MZWZ0ID0gMHgwMDAxLA0KLSAgICAgICAgTE9PS1VQRkxBR19JZ25vcmVCYXNlR2x5cGhzID0gMHgwMDAyLA0KLSAgICAgICAgTE9PS1VQRkxBR19JZ25vcmVMaWdhdHVyZXMgPSAweDAwMDQsDQotICAgICAgICBMT09LVVBGTEFHX0lnbm9yZU1hcmtzID0gMHgwMDA4LA0KLSAgICAgICAgTE9PS1VQRkxBR19SZXNlcnZlZCA9IDB4MDBGMCwNCi0gICAgICAgIExPT0tVUEZMQUdfTWFya0F0dGFjaG1lbnRUeXBlID0gMHhGRjAwLA0KLSAgICB9Ow0KLSAgICBzdHJ1Y3QgVENvdmVyYWdlRm9ybWF0QmFzZSB7DQotICAgICAgICBUVF91aW50MTZfdCBDb3ZlcmFnZUZvcm1hdDsNCi0gICAgICAgIENGWF9HbHlwaE1hcCBtX2dseXBoTWFwOw0KLSAgICAgICAgVENvdmVyYWdlRm9ybWF0QmFzZSgpOiBDb3ZlcmFnZUZvcm1hdCgwKSB7fQ0KLSAgICAgICAgdmlydHVhbCB+VENvdmVyYWdlRm9ybWF0QmFzZSgpIHt9DQotICAgIHByaXZhdGU6DQotICAgICAgICBUQ292ZXJhZ2VGb3JtYXRCYXNlKGNvbnN0IFRDb3ZlcmFnZUZvcm1hdEJhc2UmKTsNCi0gICAgICAgIFRDb3ZlcmFnZUZvcm1hdEJhc2UmIG9wZXJhdG9yPShjb25zdCBUQ292ZXJhZ2VGb3JtYXRCYXNlJik7DQotICAgIH07DQotICAgIHN0cnVjdCBUQ292ZXJhZ2VGb3JtYXQxOiBwdWJsaWMgVENvdmVyYWdlRm9ybWF0QmFzZSB7DQotICAgICAgICBUVF91aW50MTZfdCBHbHlwaENvdW50Ow0KLSAgICAgICAgVFRfdWludDE2X3QgKkdseXBoQXJyYXk7DQotICAgICAgICBUQ292ZXJhZ2VGb3JtYXQxKCk6IEdseXBoQ291bnQoMCksIEdseXBoQXJyYXkoTlVMTCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBDb3ZlcmFnZUZvcm1hdCA9IDE7DQotICAgICAgICB9DQotICAgICAgICB+VENvdmVyYWdlRm9ybWF0MSgpDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYoR2x5cGhBcnJheSkgew0KLSAgICAgICAgICAgICAgICBkZWxldGVbXSBHbHlwaEFycmF5Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgcHJpdmF0ZToNCi0gICAgICAgIFRDb3ZlcmFnZUZvcm1hdDEoY29uc3QgVENvdmVyYWdlRm9ybWF0MSYpOw0KLSAgICAgICAgVENvdmVyYWdlRm9ybWF0MSYgb3BlcmF0b3I9KGNvbnN0IFRDb3ZlcmFnZUZvcm1hdDEmKTsNCi0gICAgfTsNCi0gICAgc3RydWN0IFRSYW5nZVJlY29yZCB7DQotICAgICAgICBUVF91aW50MTZfdCBTdGFydDsNCi0gICAgICAgIFRUX3VpbnQxNl90IEVuZDsNCi0gICAgICAgIFRUX3VpbnQxNl90IFN0YXJ0Q292ZXJhZ2VJbmRleDsNCi0gICAgICAgIFRSYW5nZVJlY29yZCgpOiBTdGFydCgwKSwgRW5kKDApLCBTdGFydENvdmVyYWdlSW5kZXgoMCkge30NCi0gICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yID4gKGNvbnN0IFRSYW5nZVJlY29yZCAmcjEsIGNvbnN0IFRSYW5nZVJlY29yZCAmcjIpDQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJuIHIxLlN0YXJ0ID4gcjIuU3RhcnQ7DQotICAgICAgICB9DQotICAgIHByaXZhdGU6DQotICAgICAgICBUUmFuZ2VSZWNvcmQoY29uc3QgVFJhbmdlUmVjb3JkJik7DQotICAgIH07DQotICAgIHN0cnVjdCBUQ292ZXJhZ2VGb3JtYXQyOiBwdWJsaWMgVENvdmVyYWdlRm9ybWF0QmFzZSB7DQotICAgICAgICBUVF91aW50MTZfdCBSYW5nZUNvdW50Ow0KLSAgICAgICAgc3RydWN0IFRSYW5nZVJlY29yZCAqUmFuZ2VSZWNvcmQ7DQotICAgICAgICBUQ292ZXJhZ2VGb3JtYXQyKCk6IFJhbmdlQ291bnQoMCksIFJhbmdlUmVjb3JkKE5VTEwpDQotICAgICAgICB7DQotICAgICAgICAgICAgQ292ZXJhZ2VGb3JtYXQgPSAyOw0KLSAgICAgICAgfQ0KLSAgICAgICAgflRDb3ZlcmFnZUZvcm1hdDIoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlmKFJhbmdlUmVjb3JkKSB7DQotICAgICAgICAgICAgICAgIGRlbGV0ZVtdIFJhbmdlUmVjb3JkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgcHJpdmF0ZToNCi0gICAgICAgIFRDb3ZlcmFnZUZvcm1hdDIoY29uc3QgVENvdmVyYWdlRm9ybWF0MiYpOw0KLSAgICAgICAgVENvdmVyYWdlRm9ybWF0MiYgb3BlcmF0b3I9KGNvbnN0IFRDb3ZlcmFnZUZvcm1hdDImKTsNCi0gICAgfTsNCi0gICAgc3RydWN0IFRDbGFzc0RlZkZvcm1hdEJhc2Ugew0KLSAgICAgICAgVFRfdWludDE2X3QgQ2xhc3NGb3JtYXQ7DQotICAgICAgICBUQ2xhc3NEZWZGb3JtYXRCYXNlKCk6IENsYXNzRm9ybWF0KDApIHt9DQotICAgICAgICB2aXJ0dWFsIH5UQ2xhc3NEZWZGb3JtYXRCYXNlKCkge30NCi0gICAgcHJpdmF0ZToNCi0gICAgICAgIFRDbGFzc0RlZkZvcm1hdEJhc2UoY29uc3QgVENsYXNzRGVmRm9ybWF0QmFzZSYpOw0KLSAgICAgICAgVENsYXNzRGVmRm9ybWF0QmFzZSYgb3BlcmF0b3I9KGNvbnN0IFRDbGFzc0RlZkZvcm1hdEJhc2UmKTsNCi0gICAgfTsNCi0gICAgc3RydWN0IFRDbGFzc0RlZkZvcm1hdDE6IHB1YmxpYyBUQ2xhc3NEZWZGb3JtYXRCYXNlIHsNCi0gICAgICAgIFRUX3VpbnQxNl90IFN0YXJ0R2x5cGg7DQotICAgICAgICBUVF91aW50MTZfdCBHbHlwaENvdW50Ow0KLSAgICAgICAgVFRfdWludDE2X3QgKkNsYXNzVmFsdWVBcnJheTsNCi0gICAgICAgIFRDbGFzc0RlZkZvcm1hdDEoKTogU3RhcnRHbHlwaCgwKSwgR2x5cGhDb3VudCgwKSwgQ2xhc3NWYWx1ZUFycmF5KE5VTEwpDQotICAgICAgICB7DQotICAgICAgICAgICAgQ2xhc3NGb3JtYXQgPSAxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgflRDbGFzc0RlZkZvcm1hdDEoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlmKENsYXNzVmFsdWVBcnJheSkgew0KLSAgICAgICAgICAgICAgICBkZWxldGVbXSBDbGFzc1ZhbHVlQXJyYXk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICBwcml2YXRlOg0KLSAgICAgICAgVENsYXNzRGVmRm9ybWF0MShjb25zdCBUQ2xhc3NEZWZGb3JtYXQxJik7DQotICAgICAgICBUQ2xhc3NEZWZGb3JtYXQxJiBvcGVyYXRvcj0oY29uc3QgVENsYXNzRGVmRm9ybWF0MSYpOw0KLSAgICB9Ow0KLSAgICBzdHJ1Y3QgVENsYXNzUmFuZ2VSZWNvcmQgew0KLSAgICAgICAgVFRfdWludDE2X3QgU3RhcnQ7DQotICAgICAgICBUVF91aW50MTZfdCBFbmQ7DQotICAgICAgICBUVF91aW50MTZfdCBDbGFzczsNCi0gICAgICAgIFRDbGFzc1JhbmdlUmVjb3JkKCk6IFN0YXJ0KDApLCBFbmQoMCksIENsYXNzKDApIHt9DQotICAgIHByaXZhdGU6DQotICAgICAgICBUQ2xhc3NSYW5nZVJlY29yZChjb25zdCBUQ2xhc3NSYW5nZVJlY29yZCYpOw0KLSAgICAgICAgVENsYXNzUmFuZ2VSZWNvcmQmIG9wZXJhdG9yPShjb25zdCBUQ2xhc3NSYW5nZVJlY29yZCYpOw0KLSAgICB9Ow0KLSAgICBzdHJ1Y3QgVENsYXNzRGVmRm9ybWF0MjogcHVibGljIFRDbGFzc0RlZkZvcm1hdEJhc2Ugew0KLSAgICAgICAgVFRfdWludDE2X3QgQ2xhc3NSYW5nZUNvdW50Ow0KLSAgICAgICAgc3RydWN0IFRDbGFzc1JhbmdlUmVjb3JkICpDbGFzc1JhbmdlUmVjb3JkOw0KLSAgICAgICAgVENsYXNzRGVmRm9ybWF0MigpOiBDbGFzc1JhbmdlQ291bnQoMCksIENsYXNzUmFuZ2VSZWNvcmQoTlVMTCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBDbGFzc0Zvcm1hdCA9IDI7DQotICAgICAgICB9DQotICAgICAgICB+VENsYXNzRGVmRm9ybWF0MigpDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYoQ2xhc3NSYW5nZVJlY29yZCkgew0KLSAgICAgICAgICAgICAgICBkZWxldGVbXSBDbGFzc1JhbmdlUmVjb3JkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgcHJpdmF0ZToNCi0gICAgICAgIFRDbGFzc0RlZkZvcm1hdDIoY29uc3QgVENsYXNzRGVmRm9ybWF0MiYpOw0KLSAgICAgICAgVENsYXNzRGVmRm9ybWF0MiYgb3BlcmF0b3I9KGNvbnN0IFRDbGFzc0RlZkZvcm1hdDImKTsNCi0gICAgfTsNCi0gICAgc3RydWN0IFREZXZpY2Ugew0KLSAgICAgICAgVFRfdWludDE2X3QgU3RhcnRTaXplOw0KLSAgICAgICAgVFRfdWludDE2X3QgRW5kU2l6ZTsNCi0gICAgICAgIFRUX3VpbnQxNl90IERlbHRhRm9ybWF0Ow0KLSAgICAgICAgVERldmljZSgpOiBTdGFydFNpemUoMCksIEVuZFNpemUoMCksIERlbHRhRm9ybWF0KDApIHt9DQotICAgIHByaXZhdGU6DQotICAgICAgICBURGV2aWNlKGNvbnN0IFREZXZpY2UmKTsNCi0gICAgICAgIFREZXZpY2UmIG9wZXJhdG9yPShjb25zdCBURGV2aWNlJik7DQotICAgIH07DQotICAgIHN0cnVjdCBUU3ViVGFibGVCYXNlIHsNCi0gICAgICAgIFRUX3VpbnQxNl90IFN1YnN0Rm9ybWF0Ow0KLSAgICAgICAgVFN1YlRhYmxlQmFzZSgpOiBTdWJzdEZvcm1hdCgwKSB7fQ0KLSAgICAgICAgdmlydHVhbCB+VFN1YlRhYmxlQmFzZSgpIHt9DQotICAgIHByaXZhdGU6DQotICAgICAgICBUU3ViVGFibGVCYXNlKGNvbnN0IFRTdWJUYWJsZUJhc2UmKTsNCi0gICAgICAgIFRTdWJUYWJsZUJhc2UmIG9wZXJhdG9yPShjb25zdCBUU3ViVGFibGVCYXNlJik7DQotICAgIH07DQotICAgIHN0cnVjdCBUU2luZ2xlU3Vic3RGb3JtYXQxOiBwdWJsaWMgVFN1YlRhYmxlQmFzZSB7DQotICAgICAgICBUQ292ZXJhZ2VGb3JtYXRCYXNlICpDb3ZlcmFnZTsNCi0gICAgICAgIFRUX2ludDE2X3QgRGVsdGFHbHlwaElEOw0KLSAgICAgICAgVFNpbmdsZVN1YnN0Rm9ybWF0MSgpOiBEZWx0YUdseXBoSUQoMCksIENvdmVyYWdlKE5VTEwpDQotICAgICAgICB7DQotICAgICAgICAgICAgU3Vic3RGb3JtYXQgPSAxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgflRTaW5nbGVTdWJzdEZvcm1hdDEoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlmKENvdmVyYWdlKSB7DQotICAgICAgICAgICAgICAgIGRlbGV0ZSBDb3ZlcmFnZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIHByaXZhdGU6DQotICAgICAgICBUU2luZ2xlU3Vic3RGb3JtYXQxKGNvbnN0IFRTaW5nbGVTdWJzdEZvcm1hdDEmKTsNCi0gICAgICAgIFRTaW5nbGVTdWJzdEZvcm1hdDEmIG9wZXJhdG9yPShjb25zdCBUU2luZ2xlU3Vic3RGb3JtYXQxJik7DQotICAgIH07DQotICAgIHN0cnVjdCBUU2luZ2xlU3Vic3RGb3JtYXQyOiBwdWJsaWMgVFN1YlRhYmxlQmFzZSB7DQotICAgICAgICBUQ292ZXJhZ2VGb3JtYXRCYXNlICpDb3ZlcmFnZTsNCi0gICAgICAgIFRUX3VpbnQxNl90IEdseXBoQ291bnQ7DQotICAgICAgICBUVF91aW50MTZfdCAqU3Vic3RpdHV0ZTsNCi0gICAgICAgIFRTaW5nbGVTdWJzdEZvcm1hdDIoKTogQ292ZXJhZ2UoTlVMTCksIEdseXBoQ291bnQoMCksIFN1YnN0aXR1dGUoTlVMTCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBTdWJzdEZvcm1hdCA9IDI7DQotICAgICAgICB9DQotICAgICAgICB+VFNpbmdsZVN1YnN0Rm9ybWF0MigpDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYoQ292ZXJhZ2UpIHsNCi0gICAgICAgICAgICAgICAgZGVsZXRlIENvdmVyYWdlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZihTdWJzdGl0dXRlKSB7DQotICAgICAgICAgICAgICAgIGRlbGV0ZVtdIFN1YnN0aXR1dGU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICBwcml2YXRlOg0KLSAgICAgICAgVFNpbmdsZVN1YnN0Rm9ybWF0Mihjb25zdCBUU2luZ2xlU3Vic3RGb3JtYXQyJik7DQotICAgICAgICBUU2luZ2xlU3Vic3RGb3JtYXQyJiBvcGVyYXRvcj0oY29uc3QgVFNpbmdsZVN1YnN0Rm9ybWF0MiYpOw0KLSAgICB9Ow0KLSAgICBzdHJ1Y3QgVExvb2t1cCB7DQotICAgICAgICBUVF91aW50MTZfdCBMb29rdXBUeXBlOw0KLSAgICAgICAgVFRfdWludDE2X3QgTG9va3VwRmxhZzsNCi0gICAgICAgIFRUX3VpbnQxNl90IFN1YlRhYmxlQ291bnQ7DQotICAgICAgICBzdHJ1Y3QgVFN1YlRhYmxlQmFzZSAqKlN1YlRhYmxlOw0KLSAgICAgICAgVExvb2t1cCgpOiBMb29rdXBUeXBlKDApLCBMb29rdXBGbGFnKDApLCBTdWJUYWJsZUNvdW50KDApLCBTdWJUYWJsZShOVUxMKSB7fQ0KLSAgICAgICAgflRMb29rdXAoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlmKFN1YlRhYmxlQ291bnQgPiAwICYmIFN1YlRhYmxlICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IFN1YlRhYmxlQ291bnQ7IGkrKykgew0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFN1YlRhYmxlW2ldOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGRlbGV0ZVtdIFN1YlRhYmxlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgcHJpdmF0ZToNCi0gICAgICAgIFRMb29rdXAoY29uc3QgVExvb2t1cCYpOw0KLSAgICAgICAgVExvb2t1cCYgb3BlcmF0b3I9KGNvbnN0IFRMb29rdXAmKTsNCi0gICAgfTsNCi0gICAgc3RydWN0IFRMb29rdXBMaXN0IHsNCi0gICAgICAgIGludCBMb29rdXBDb3VudDsNCi0gICAgICAgIHN0cnVjdCBUTG9va3VwICpMb29rdXA7DQotICAgICAgICBUTG9va3VwTGlzdCgpOiBMb29rdXBDb3VudCgwKSwgTG9va3VwKE5VTEwpIHt9DQotICAgICAgICB+VExvb2t1cExpc3QoKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlmKExvb2t1cCkgew0KLSAgICAgICAgICAgICAgICBkZWxldGVbXSBMb29rdXA7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICBwcml2YXRlOg0KLSAgICAgICAgVExvb2t1cExpc3QoY29uc3QgVExvb2t1cExpc3QmKTsNCi0gICAgICAgIFRMb29rdXBMaXN0JiBvcGVyYXRvcj0oY29uc3QgVExvb2t1cExpc3QmKTsNCi0gICAgfTsNCi0gICAgYm9vbCBQYXJzZSgNCi0gICAgICAgIEZUX0J5dGVzIHNjcmlwdGxpc3QsDQotICAgICAgICBGVF9CeXRlcyBmZWF0dXJlbGlzdCwNCi0gICAgICAgIEZUX0J5dGVzIGxvb2t1cGxpc3QpOw0KLSAgICB2b2lkIFBhcnNlU2NyaXB0TGlzdChGVF9CeXRlcyByYXcsIFRTY3JpcHRMaXN0ICpyZWMpOw0KLSAgICB2b2lkIFBhcnNlU2NyaXB0KEZUX0J5dGVzIHJhdywgVFNjcmlwdCAqcmVjKTsNCi0gICAgdm9pZCBQYXJzZUxhbmdTeXMoRlRfQnl0ZXMgcmF3LCBUTGFuZ1N5cyAqcmVjKTsNCi0gICAgdm9pZCBQYXJzZUZlYXR1cmVMaXN0KEZUX0J5dGVzIHJhdywgVEZlYXR1cmVMaXN0ICpyZWMpOw0KLSAgICB2b2lkIFBhcnNlRmVhdHVyZShGVF9CeXRlcyByYXcsIFRGZWF0dXJlICpyZWMpOw0KLSAgICB2b2lkIFBhcnNlTG9va3VwTGlzdChGVF9CeXRlcyByYXcsIFRMb29rdXBMaXN0ICpyZWMpOw0KLSAgICB2b2lkIFBhcnNlTG9va3VwKEZUX0J5dGVzIHJhdywgVExvb2t1cCAqcmVjKTsNCi0gICAgdm9pZCBQYXJzZUNvdmVyYWdlKEZUX0J5dGVzIHJhdywgVENvdmVyYWdlRm9ybWF0QmFzZSAqKnJlYyk7DQotICAgIHZvaWQgUGFyc2VDb3ZlcmFnZUZvcm1hdDEoRlRfQnl0ZXMgcmF3LCBUQ292ZXJhZ2VGb3JtYXQxICpyZWMpOw0KLSAgICB2b2lkIFBhcnNlQ292ZXJhZ2VGb3JtYXQyKEZUX0J5dGVzIHJhdywgVENvdmVyYWdlRm9ybWF0MiAqcmVjKTsNCi0gICAgdm9pZCBQYXJzZVNpbmdsZVN1YnN0KEZUX0J5dGVzIHJhdywgVFN1YlRhYmxlQmFzZSAqKnJlYyk7DQotICAgIHZvaWQgUGFyc2VTaW5nbGVTdWJzdEZvcm1hdDEoRlRfQnl0ZXMgcmF3LCBUU2luZ2xlU3Vic3RGb3JtYXQxICpyZWMpOw0KLSAgICB2b2lkIFBhcnNlU2luZ2xlU3Vic3RGb3JtYXQyKEZUX0J5dGVzIHJhdywgVFNpbmdsZVN1YnN0Rm9ybWF0MiAqcmVjKTsNCi0gICAgYm9vbCBHZXRWZXJ0aWNhbEdseXBoU3ViKA0KLSAgICAgICAgVFRfdWludDMyX3QgZ2x5cGhudW0sDQotICAgICAgICBUVF91aW50MzJfdCAqdmdseXBobnVtLA0KLSAgICAgICAgc3RydWN0IFRGZWF0dXJlICpGZWF0dXJlKTsNCi0gICAgYm9vbCBHZXRWZXJ0aWNhbEdseXBoU3ViMigNCi0gICAgICAgIFRUX3VpbnQzMl90IGdseXBobnVtLA0KLSAgICAgICAgVFRfdWludDMyX3QgKnZnbHlwaG51bSwNCi0gICAgICAgIHN0cnVjdCBUTG9va3VwICpMb29rdXApOw0KLSAgICBpbnQgR2V0Q292ZXJhZ2VJbmRleChzdHJ1Y3QgVENvdmVyYWdlRm9ybWF0QmFzZSAqQ292ZXJhZ2UsIFRUX3VpbnQzMl90IGcpOw0KLSAgICBUVF91aW50OF90IEdldFVJbnQ4KEZUX0J5dGVzJiBwKSBjb25zdA0KLSAgICB7DQotICAgICAgICBUVF91aW50OF90IHJldCA9IHBbMF07DQotICAgICAgICBwICs9IDE7DQotICAgICAgICByZXR1cm4gcmV0Ow0KLSAgICB9DQotICAgIFRUX2ludDE2X3QgR2V0SW50MTYoRlRfQnl0ZXMmIHApIGNvbnN0DQotICAgIHsNCi0gICAgICAgIFRUX3VpbnQxNl90IHJldCA9IHBbMF0gPDwgOCB8IHBbMV07DQotICAgICAgICBwICs9IDI7DQotICAgICAgICByZXR1cm4gKihUVF9pbnQxNl90KikmcmV0Ow0KLSAgICB9DQotICAgIFRUX3VpbnQxNl90IEdldFVJbnQxNihGVF9CeXRlcyYgcCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgVFRfdWludDE2X3QgcmV0ID0gcFswXSA8PCA4IHwgcFsxXTsNCi0gICAgICAgIHAgKz0gMjsNCi0gICAgICAgIHJldHVybiByZXQ7DQotICAgIH0NCi0gICAgVFRfaW50MzJfdCBHZXRJbnQzMihGVF9CeXRlcyYgcCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgVFRfdWludDMyX3QgcmV0ID0gcFswXSA8PCAyNCB8IHBbMV0gPDwgMTYgfCBwWzJdIDw8IDggfCBwWzNdOw0KLSAgICAgICAgcCArPSA0Ow0KLSAgICAgICAgcmV0dXJuICooVFRfaW50MzJfdCopJnJldDsNCi0gICAgfQ0KLSAgICBUVF91aW50MzJfdCBHZXRVSW50MzIoRlRfQnl0ZXMmIHApIGNvbnN0DQotICAgIHsNCi0gICAgICAgIFRUX3VpbnQzMl90IHJldCA9IHBbMF0gPDwgMjQgfCBwWzFdIDw8IDE2IHwgcFsyXSA8PCA4IHwgcFszXTsNCi0gICAgICAgIHAgKz0gNDsNCi0gICAgICAgIHJldHVybiByZXQ7DQotICAgIH0NCi0gICAgQ0ZYX0NNYXBEV29yZFRvRFdvcmQgbV9mZWF0dXJlTWFwOw0KLSAgICBGWF9CT09MCW1fYkZlYXV0dXJlTWFwTG9hZDsNCi0gICAgYm9vbCBsb2FkZWQ7DQotICAgIHN0cnVjdCB0dF9nc3ViX2hlYWRlciBoZWFkZXI7DQotICAgIHN0cnVjdCBUU2NyaXB0TGlzdCBTY3JpcHRMaXN0Ow0KLSAgICBzdHJ1Y3QgVEZlYXR1cmVMaXN0IEZlYXR1cmVMaXN0Ow0KLSAgICBzdHJ1Y3QgVExvb2t1cExpc3QgTG9va3VwTGlzdDsNCi19Ow0KLWNsYXNzIENGWF9HU1VCVGFibGUgOiBwdWJsaWMgSUZYX0dTVUJUYWJsZSwgcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICB2aXJ0dWFsIHZvaWQJUmVsZWFzZSgpDQotICAgIHsNCi0gICAgICAgIGRlbGV0ZSB0aGlzOw0KLSAgICB9DQotICAgIHZpcnR1YWwgRlhfQk9PTCBHZXRWZXJ0aWNhbEdseXBoKEZYX0RXT1JEIGdseXBobnVtLCBGWF9EV09SRCogdmdseXBobnVtKTsNCi0gICAgQ0ZYX0NUVEdTVUJUYWJsZSBtX0dzdWJJbXA7DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIFRUR1NVQlRhYmxlX0gKKyNkZWZpbmUgVFRHU1VCVGFibGVfSAorI2luY2x1ZGUgIi4uLy4uL2Z4X2ZyZWV0eXBlLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNydC9meF9iYXNpYy5oIgorI2luY2x1ZGUgImNvbW1vbi5oIgorY2xhc3MgQ0ZYX0dseXBoTWFwCit7CitwdWJsaWM6CisgICAgQ0ZYX0dseXBoTWFwKCk7CisgICAgfkNGWF9HbHlwaE1hcCgpOworICAgIHZvaWQJU2V0QXQoaW50IGtleSwgaW50IHZhbHVlKTsKKyAgICBGWF9CT09MCUxvb2t1cChpbnQga2V5LCBpbnQgJnZhbHVlKTsKK3Byb3RlY3RlZDoKKyAgICBDRlhfQmluYXJ5QnVmCW1fQnVmZmVyOworfTsKK2NsYXNzIENGWF9DVFRHU1VCVGFibGUgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENGWF9DVFRHU1VCVGFibGUodm9pZCk6IGxvYWRlZChmYWxzZSksIG1fYkZlYXV0dXJlTWFwTG9hZChGQUxTRSkge307CisgICAgQ0ZYX0NUVEdTVUJUYWJsZShGVF9CeXRlcyBnc3ViKTogbG9hZGVkKGZhbHNlKSwgbV9iRmVhdXR1cmVNYXBMb2FkKEZBTFNFKQorICAgIHsKKyAgICAgICAgTG9hZEdTVUJUYWJsZShnc3ViKTsKKyAgICB9CisgICAgdmlydHVhbCB+Q0ZYX0NUVEdTVUJUYWJsZSgpIHt9CisgICAgYm9vbCBJc09rKHZvaWQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbG9hZGVkOworICAgIH0KKyAgICBib29sIExvYWRHU1VCVGFibGUoRlRfQnl0ZXMgZ3N1Yik7CisgICAgYm9vbCBHZXRWZXJ0aWNhbEdseXBoKFRUX3VpbnQzMl90IGdseXBobnVtLCBUVF91aW50MzJfdCAqdmdseXBobnVtKTsKK3ByaXZhdGU6CisgICAgc3RydWN0IHR0X2dzdWJfaGVhZGVyIHsKKyAgICAgICAgVFRfdWludDMyX3QgVmVyc2lvbjsKKyAgICAgICAgVFRfdWludDE2X3QgU2NyaXB0TGlzdDsKKyAgICAgICAgVFRfdWludDE2X3QgRmVhdHVyZUxpc3Q7CisgICAgICAgIFRUX3VpbnQxNl90IExvb2t1cExpc3Q7CisgICAgfTsKKyAgICBzdHJ1Y3QgVExhbmdTeXMgeworICAgICAgICBUVF91aW50MTZfdCBMb29rdXBPcmRlcjsKKyAgICAgICAgVFRfdWludDE2X3QgUmVxRmVhdHVyZUluZGV4OworICAgICAgICBUVF91aW50MTZfdCBGZWF0dXJlQ291bnQ7CisgICAgICAgIFRUX3VpbnQxNl90ICpGZWF0dXJlSW5kZXg7CisgICAgICAgIFRMYW5nU3lzKCk6IExvb2t1cE9yZGVyKDApLCBSZXFGZWF0dXJlSW5kZXgoMCksIEZlYXR1cmVDb3VudCgwKSwgRmVhdHVyZUluZGV4KE5VTEwpIHt9CisgICAgICAgIH5UTGFuZ1N5cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKEZlYXR1cmVJbmRleCkgeworICAgICAgICAgICAgICAgIGRlbGV0ZVtdIEZlYXR1cmVJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIFRMYW5nU3lzKGNvbnN0IFRMYW5nU3lzJik7CisgICAgICAgIFRMYW5nU3lzJiBvcGVyYXRvcj0oY29uc3QgVExhbmdTeXMmKTsKKyAgICB9OworICAgIHN0cnVjdCBUTGFuZ1N5c1JlY29yZCB7CisgICAgICAgIFRUX3VpbnQzMl90IExhbmdTeXNUYWc7CisgICAgICAgIHN0cnVjdCBUTGFuZ1N5cyBMYW5nU3lzOworICAgICAgICBUTGFuZ1N5c1JlY29yZCgpOiBMYW5nU3lzVGFnKDApIHt9CisgICAgcHJpdmF0ZToKKyAgICAgICAgVExhbmdTeXNSZWNvcmQoY29uc3QgVExhbmdTeXNSZWNvcmQmKTsKKyAgICAgICAgVExhbmdTeXNSZWNvcmQmIG9wZXJhdG9yPShjb25zdCBUTGFuZ1N5c1JlY29yZCYpOworICAgIH07CisgICAgc3RydWN0IFRTY3JpcHQgeworICAgICAgICBUVF91aW50MTZfdCBEZWZhdWx0TGFuZ1N5czsKKyAgICAgICAgVFRfdWludDE2X3QgTGFuZ1N5c0NvdW50OworICAgICAgICBzdHJ1Y3QgVExhbmdTeXNSZWNvcmQgKkxhbmdTeXNSZWNvcmQ7CisgICAgICAgIFRTY3JpcHQoKTogRGVmYXVsdExhbmdTeXMoMCksIExhbmdTeXNDb3VudCgwKSwgTGFuZ1N5c1JlY29yZChOVUxMKSB7fQorICAgICAgICB+VFNjcmlwdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKExhbmdTeXNSZWNvcmQpIHsKKyAgICAgICAgICAgICAgICBkZWxldGVbXSBMYW5nU3lzUmVjb3JkOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgVFNjcmlwdChjb25zdCBUU2NyaXB0Jik7CisgICAgICAgIFRTY3JpcHQmIG9wZXJhdG9yPShjb25zdCBUU2NyaXB0Jik7CisgICAgfTsKKyAgICBzdHJ1Y3QgVFNjcmlwdFJlY29yZCB7CisgICAgICAgIFRUX3VpbnQzMl90IFNjcmlwdFRhZzsKKyAgICAgICAgc3RydWN0IFRTY3JpcHQgU2NyaXB0OworICAgICAgICBUU2NyaXB0UmVjb3JkKCk6IFNjcmlwdFRhZygwKSB7fQorICAgIHByaXZhdGU6CisgICAgICAgIFRTY3JpcHRSZWNvcmQoY29uc3QgVFNjcmlwdFJlY29yZCYpOworICAgICAgICBUU2NyaXB0UmVjb3JkJiBvcGVyYXRvcj0oY29uc3QgVFNjcmlwdFJlY29yZCYpOworICAgIH07CisgICAgc3RydWN0IFRTY3JpcHRMaXN0IHsKKyAgICAgICAgVFRfdWludDE2X3QgU2NyaXB0Q291bnQ7CisgICAgICAgIHN0cnVjdCBUU2NyaXB0UmVjb3JkICpTY3JpcHRSZWNvcmQ7CisgICAgICAgIFRTY3JpcHRMaXN0KCk6IFNjcmlwdENvdW50KDApLCBTY3JpcHRSZWNvcmQoTlVMTCkge30KKyAgICAgICAgflRTY3JpcHRMaXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoU2NyaXB0UmVjb3JkKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlW10gU2NyaXB0UmVjb3JkOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgVFNjcmlwdExpc3QoY29uc3QgVFNjcmlwdExpc3QmKTsKKyAgICAgICAgVFNjcmlwdExpc3QmIG9wZXJhdG9yPShjb25zdCBUU2NyaXB0TGlzdCYpOworICAgIH07CisgICAgc3RydWN0IFRGZWF0dXJlIHsKKyAgICAgICAgVFRfdWludDE2X3QgRmVhdHVyZVBhcmFtczsKKyAgICAgICAgaW50IExvb2t1cENvdW50OworICAgICAgICBUVF91aW50MTZfdCAqTG9va3VwTGlzdEluZGV4OworICAgICAgICBURmVhdHVyZSgpOiBGZWF0dXJlUGFyYW1zKDApLCBMb29rdXBDb3VudCgwKSwgTG9va3VwTGlzdEluZGV4KE5VTEwpIHt9CisgICAgICAgIH5URmVhdHVyZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKExvb2t1cExpc3RJbmRleCkgeworICAgICAgICAgICAgICAgIGRlbGV0ZVtdIExvb2t1cExpc3RJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIFRGZWF0dXJlKGNvbnN0IFRGZWF0dXJlJik7CisgICAgICAgIFRGZWF0dXJlJiBvcGVyYXRvcj0oY29uc3QgVEZlYXR1cmUmKTsKKyAgICB9OworICAgIHN0cnVjdCBURmVhdHVyZVJlY29yZCB7CisgICAgICAgIFRUX3VpbnQzMl90IEZlYXR1cmVUYWc7CisgICAgICAgIHN0cnVjdCBURmVhdHVyZSBGZWF0dXJlOworICAgICAgICBURmVhdHVyZVJlY29yZCgpOiBGZWF0dXJlVGFnKDApIHt9CisgICAgcHJpdmF0ZToKKyAgICAgICAgVEZlYXR1cmVSZWNvcmQoY29uc3QgVEZlYXR1cmVSZWNvcmQmKTsKKyAgICAgICAgVEZlYXR1cmVSZWNvcmQmIG9wZXJhdG9yPShjb25zdCBURmVhdHVyZVJlY29yZCYpOworICAgIH07CisgICAgc3RydWN0IFRGZWF0dXJlTGlzdCB7CisgICAgICAgIGludCBGZWF0dXJlQ291bnQ7CisgICAgICAgIHN0cnVjdCBURmVhdHVyZVJlY29yZCAqRmVhdHVyZVJlY29yZDsKKyAgICAgICAgVEZlYXR1cmVMaXN0KCk6IEZlYXR1cmVDb3VudCgwKSwgRmVhdHVyZVJlY29yZChOVUxMKSB7fQorICAgICAgICB+VEZlYXR1cmVMaXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoRmVhdHVyZVJlY29yZCkgeworICAgICAgICAgICAgICAgIGRlbGV0ZVtdIEZlYXR1cmVSZWNvcmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBwcml2YXRlOgorICAgICAgICBURmVhdHVyZUxpc3QoY29uc3QgVEZlYXR1cmVMaXN0Jik7CisgICAgICAgIFRGZWF0dXJlTGlzdCYgb3BlcmF0b3I9KGNvbnN0IFRGZWF0dXJlTGlzdCYpOworICAgIH07CisgICAgZW51bSBUTG9va3VwRmxhZyB7CisgICAgICAgIExPT0tVUEZMQUdfUmlnaHRUb0xlZnQgPSAweDAwMDEsCisgICAgICAgIExPT0tVUEZMQUdfSWdub3JlQmFzZUdseXBocyA9IDB4MDAwMiwKKyAgICAgICAgTE9PS1VQRkxBR19JZ25vcmVMaWdhdHVyZXMgPSAweDAwMDQsCisgICAgICAgIExPT0tVUEZMQUdfSWdub3JlTWFya3MgPSAweDAwMDgsCisgICAgICAgIExPT0tVUEZMQUdfUmVzZXJ2ZWQgPSAweDAwRjAsCisgICAgICAgIExPT0tVUEZMQUdfTWFya0F0dGFjaG1lbnRUeXBlID0gMHhGRjAwLAorICAgIH07CisgICAgc3RydWN0IFRDb3ZlcmFnZUZvcm1hdEJhc2UgeworICAgICAgICBUVF91aW50MTZfdCBDb3ZlcmFnZUZvcm1hdDsKKyAgICAgICAgQ0ZYX0dseXBoTWFwIG1fZ2x5cGhNYXA7CisgICAgICAgIFRDb3ZlcmFnZUZvcm1hdEJhc2UoKTogQ292ZXJhZ2VGb3JtYXQoMCkge30KKyAgICAgICAgdmlydHVhbCB+VENvdmVyYWdlRm9ybWF0QmFzZSgpIHt9CisgICAgcHJpdmF0ZToKKyAgICAgICAgVENvdmVyYWdlRm9ybWF0QmFzZShjb25zdCBUQ292ZXJhZ2VGb3JtYXRCYXNlJik7CisgICAgICAgIFRDb3ZlcmFnZUZvcm1hdEJhc2UmIG9wZXJhdG9yPShjb25zdCBUQ292ZXJhZ2VGb3JtYXRCYXNlJik7CisgICAgfTsKKyAgICBzdHJ1Y3QgVENvdmVyYWdlRm9ybWF0MTogcHVibGljIFRDb3ZlcmFnZUZvcm1hdEJhc2UgeworICAgICAgICBUVF91aW50MTZfdCBHbHlwaENvdW50OworICAgICAgICBUVF91aW50MTZfdCAqR2x5cGhBcnJheTsKKyAgICAgICAgVENvdmVyYWdlRm9ybWF0MSgpOiBHbHlwaENvdW50KDApLCBHbHlwaEFycmF5KE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIENvdmVyYWdlRm9ybWF0ID0gMTsKKyAgICAgICAgfQorICAgICAgICB+VENvdmVyYWdlRm9ybWF0MSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKEdseXBoQXJyYXkpIHsKKyAgICAgICAgICAgICAgICBkZWxldGVbXSBHbHlwaEFycmF5OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgVENvdmVyYWdlRm9ybWF0MShjb25zdCBUQ292ZXJhZ2VGb3JtYXQxJik7CisgICAgICAgIFRDb3ZlcmFnZUZvcm1hdDEmIG9wZXJhdG9yPShjb25zdCBUQ292ZXJhZ2VGb3JtYXQxJik7CisgICAgfTsKKyAgICBzdHJ1Y3QgVFJhbmdlUmVjb3JkIHsKKyAgICAgICAgVFRfdWludDE2X3QgU3RhcnQ7CisgICAgICAgIFRUX3VpbnQxNl90IEVuZDsKKyAgICAgICAgVFRfdWludDE2X3QgU3RhcnRDb3ZlcmFnZUluZGV4OworICAgICAgICBUUmFuZ2VSZWNvcmQoKTogU3RhcnQoMCksIEVuZCgwKSwgU3RhcnRDb3ZlcmFnZUluZGV4KDApIHt9CisgICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yID4gKGNvbnN0IFRSYW5nZVJlY29yZCAmcjEsIGNvbnN0IFRSYW5nZVJlY29yZCAmcjIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiByMS5TdGFydCA+IHIyLlN0YXJ0OworICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgVFJhbmdlUmVjb3JkKGNvbnN0IFRSYW5nZVJlY29yZCYpOworICAgIH07CisgICAgc3RydWN0IFRDb3ZlcmFnZUZvcm1hdDI6IHB1YmxpYyBUQ292ZXJhZ2VGb3JtYXRCYXNlIHsKKyAgICAgICAgVFRfdWludDE2X3QgUmFuZ2VDb3VudDsKKyAgICAgICAgc3RydWN0IFRSYW5nZVJlY29yZCAqUmFuZ2VSZWNvcmQ7CisgICAgICAgIFRDb3ZlcmFnZUZvcm1hdDIoKTogUmFuZ2VDb3VudCgwKSwgUmFuZ2VSZWNvcmQoTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgQ292ZXJhZ2VGb3JtYXQgPSAyOworICAgICAgICB9CisgICAgICAgIH5UQ292ZXJhZ2VGb3JtYXQyKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoUmFuZ2VSZWNvcmQpIHsKKyAgICAgICAgICAgICAgICBkZWxldGVbXSBSYW5nZVJlY29yZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIFRDb3ZlcmFnZUZvcm1hdDIoY29uc3QgVENvdmVyYWdlRm9ybWF0MiYpOworICAgICAgICBUQ292ZXJhZ2VGb3JtYXQyJiBvcGVyYXRvcj0oY29uc3QgVENvdmVyYWdlRm9ybWF0MiYpOworICAgIH07CisgICAgc3RydWN0IFRDbGFzc0RlZkZvcm1hdEJhc2UgeworICAgICAgICBUVF91aW50MTZfdCBDbGFzc0Zvcm1hdDsKKyAgICAgICAgVENsYXNzRGVmRm9ybWF0QmFzZSgpOiBDbGFzc0Zvcm1hdCgwKSB7fQorICAgICAgICB2aXJ0dWFsIH5UQ2xhc3NEZWZGb3JtYXRCYXNlKCkge30KKyAgICBwcml2YXRlOgorICAgICAgICBUQ2xhc3NEZWZGb3JtYXRCYXNlKGNvbnN0IFRDbGFzc0RlZkZvcm1hdEJhc2UmKTsKKyAgICAgICAgVENsYXNzRGVmRm9ybWF0QmFzZSYgb3BlcmF0b3I9KGNvbnN0IFRDbGFzc0RlZkZvcm1hdEJhc2UmKTsKKyAgICB9OworICAgIHN0cnVjdCBUQ2xhc3NEZWZGb3JtYXQxOiBwdWJsaWMgVENsYXNzRGVmRm9ybWF0QmFzZSB7CisgICAgICAgIFRUX3VpbnQxNl90IFN0YXJ0R2x5cGg7CisgICAgICAgIFRUX3VpbnQxNl90IEdseXBoQ291bnQ7CisgICAgICAgIFRUX3VpbnQxNl90ICpDbGFzc1ZhbHVlQXJyYXk7CisgICAgICAgIFRDbGFzc0RlZkZvcm1hdDEoKTogU3RhcnRHbHlwaCgwKSwgR2x5cGhDb3VudCgwKSwgQ2xhc3NWYWx1ZUFycmF5KE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIENsYXNzRm9ybWF0ID0gMTsKKyAgICAgICAgfQorICAgICAgICB+VENsYXNzRGVmRm9ybWF0MSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKENsYXNzVmFsdWVBcnJheSkgeworICAgICAgICAgICAgICAgIGRlbGV0ZVtdIENsYXNzVmFsdWVBcnJheTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIFRDbGFzc0RlZkZvcm1hdDEoY29uc3QgVENsYXNzRGVmRm9ybWF0MSYpOworICAgICAgICBUQ2xhc3NEZWZGb3JtYXQxJiBvcGVyYXRvcj0oY29uc3QgVENsYXNzRGVmRm9ybWF0MSYpOworICAgIH07CisgICAgc3RydWN0IFRDbGFzc1JhbmdlUmVjb3JkIHsKKyAgICAgICAgVFRfdWludDE2X3QgU3RhcnQ7CisgICAgICAgIFRUX3VpbnQxNl90IEVuZDsKKyAgICAgICAgVFRfdWludDE2X3QgQ2xhc3M7CisgICAgICAgIFRDbGFzc1JhbmdlUmVjb3JkKCk6IFN0YXJ0KDApLCBFbmQoMCksIENsYXNzKDApIHt9CisgICAgcHJpdmF0ZToKKyAgICAgICAgVENsYXNzUmFuZ2VSZWNvcmQoY29uc3QgVENsYXNzUmFuZ2VSZWNvcmQmKTsKKyAgICAgICAgVENsYXNzUmFuZ2VSZWNvcmQmIG9wZXJhdG9yPShjb25zdCBUQ2xhc3NSYW5nZVJlY29yZCYpOworICAgIH07CisgICAgc3RydWN0IFRDbGFzc0RlZkZvcm1hdDI6IHB1YmxpYyBUQ2xhc3NEZWZGb3JtYXRCYXNlIHsKKyAgICAgICAgVFRfdWludDE2X3QgQ2xhc3NSYW5nZUNvdW50OworICAgICAgICBzdHJ1Y3QgVENsYXNzUmFuZ2VSZWNvcmQgKkNsYXNzUmFuZ2VSZWNvcmQ7CisgICAgICAgIFRDbGFzc0RlZkZvcm1hdDIoKTogQ2xhc3NSYW5nZUNvdW50KDApLCBDbGFzc1JhbmdlUmVjb3JkKE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIENsYXNzRm9ybWF0ID0gMjsKKyAgICAgICAgfQorICAgICAgICB+VENsYXNzRGVmRm9ybWF0MigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKENsYXNzUmFuZ2VSZWNvcmQpIHsKKyAgICAgICAgICAgICAgICBkZWxldGVbXSBDbGFzc1JhbmdlUmVjb3JkOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgVENsYXNzRGVmRm9ybWF0Mihjb25zdCBUQ2xhc3NEZWZGb3JtYXQyJik7CisgICAgICAgIFRDbGFzc0RlZkZvcm1hdDImIG9wZXJhdG9yPShjb25zdCBUQ2xhc3NEZWZGb3JtYXQyJik7CisgICAgfTsKKyAgICBzdHJ1Y3QgVERldmljZSB7CisgICAgICAgIFRUX3VpbnQxNl90IFN0YXJ0U2l6ZTsKKyAgICAgICAgVFRfdWludDE2X3QgRW5kU2l6ZTsKKyAgICAgICAgVFRfdWludDE2X3QgRGVsdGFGb3JtYXQ7CisgICAgICAgIFREZXZpY2UoKTogU3RhcnRTaXplKDApLCBFbmRTaXplKDApLCBEZWx0YUZvcm1hdCgwKSB7fQorICAgIHByaXZhdGU6CisgICAgICAgIFREZXZpY2UoY29uc3QgVERldmljZSYpOworICAgICAgICBURGV2aWNlJiBvcGVyYXRvcj0oY29uc3QgVERldmljZSYpOworICAgIH07CisgICAgc3RydWN0IFRTdWJUYWJsZUJhc2UgeworICAgICAgICBUVF91aW50MTZfdCBTdWJzdEZvcm1hdDsKKyAgICAgICAgVFN1YlRhYmxlQmFzZSgpOiBTdWJzdEZvcm1hdCgwKSB7fQorICAgICAgICB2aXJ0dWFsIH5UU3ViVGFibGVCYXNlKCkge30KKyAgICBwcml2YXRlOgorICAgICAgICBUU3ViVGFibGVCYXNlKGNvbnN0IFRTdWJUYWJsZUJhc2UmKTsKKyAgICAgICAgVFN1YlRhYmxlQmFzZSYgb3BlcmF0b3I9KGNvbnN0IFRTdWJUYWJsZUJhc2UmKTsKKyAgICB9OworICAgIHN0cnVjdCBUU2luZ2xlU3Vic3RGb3JtYXQxOiBwdWJsaWMgVFN1YlRhYmxlQmFzZSB7CisgICAgICAgIFRDb3ZlcmFnZUZvcm1hdEJhc2UgKkNvdmVyYWdlOworICAgICAgICBUVF9pbnQxNl90IERlbHRhR2x5cGhJRDsKKyAgICAgICAgVFNpbmdsZVN1YnN0Rm9ybWF0MSgpOiBEZWx0YUdseXBoSUQoMCksIENvdmVyYWdlKE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIFN1YnN0Rm9ybWF0ID0gMTsKKyAgICAgICAgfQorICAgICAgICB+VFNpbmdsZVN1YnN0Rm9ybWF0MSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKENvdmVyYWdlKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIENvdmVyYWdlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgVFNpbmdsZVN1YnN0Rm9ybWF0MShjb25zdCBUU2luZ2xlU3Vic3RGb3JtYXQxJik7CisgICAgICAgIFRTaW5nbGVTdWJzdEZvcm1hdDEmIG9wZXJhdG9yPShjb25zdCBUU2luZ2xlU3Vic3RGb3JtYXQxJik7CisgICAgfTsKKyAgICBzdHJ1Y3QgVFNpbmdsZVN1YnN0Rm9ybWF0MjogcHVibGljIFRTdWJUYWJsZUJhc2UgeworICAgICAgICBUQ292ZXJhZ2VGb3JtYXRCYXNlICpDb3ZlcmFnZTsKKyAgICAgICAgVFRfdWludDE2X3QgR2x5cGhDb3VudDsKKyAgICAgICAgVFRfdWludDE2X3QgKlN1YnN0aXR1dGU7CisgICAgICAgIFRTaW5nbGVTdWJzdEZvcm1hdDIoKTogQ292ZXJhZ2UoTlVMTCksIEdseXBoQ291bnQoMCksIFN1YnN0aXR1dGUoTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgU3Vic3RGb3JtYXQgPSAyOworICAgICAgICB9CisgICAgICAgIH5UU2luZ2xlU3Vic3RGb3JtYXQyKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoQ292ZXJhZ2UpIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgQ292ZXJhZ2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihTdWJzdGl0dXRlKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlW10gU3Vic3RpdHV0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIFRTaW5nbGVTdWJzdEZvcm1hdDIoY29uc3QgVFNpbmdsZVN1YnN0Rm9ybWF0MiYpOworICAgICAgICBUU2luZ2xlU3Vic3RGb3JtYXQyJiBvcGVyYXRvcj0oY29uc3QgVFNpbmdsZVN1YnN0Rm9ybWF0MiYpOworICAgIH07CisgICAgc3RydWN0IFRMb29rdXAgeworICAgICAgICBUVF91aW50MTZfdCBMb29rdXBUeXBlOworICAgICAgICBUVF91aW50MTZfdCBMb29rdXBGbGFnOworICAgICAgICBUVF91aW50MTZfdCBTdWJUYWJsZUNvdW50OworICAgICAgICBzdHJ1Y3QgVFN1YlRhYmxlQmFzZSAqKlN1YlRhYmxlOworICAgICAgICBUTG9va3VwKCk6IExvb2t1cFR5cGUoMCksIExvb2t1cEZsYWcoMCksIFN1YlRhYmxlQ291bnQoMCksIFN1YlRhYmxlKE5VTEwpIHt9CisgICAgICAgIH5UTG9va3VwKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoU3ViVGFibGVDb3VudCA+IDAgJiYgU3ViVGFibGUgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBTdWJUYWJsZUNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFN1YlRhYmxlW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZWxldGVbXSBTdWJUYWJsZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIFRMb29rdXAoY29uc3QgVExvb2t1cCYpOworICAgICAgICBUTG9va3VwJiBvcGVyYXRvcj0oY29uc3QgVExvb2t1cCYpOworICAgIH07CisgICAgc3RydWN0IFRMb29rdXBMaXN0IHsKKyAgICAgICAgaW50IExvb2t1cENvdW50OworICAgICAgICBzdHJ1Y3QgVExvb2t1cCAqTG9va3VwOworICAgICAgICBUTG9va3VwTGlzdCgpOiBMb29rdXBDb3VudCgwKSwgTG9va3VwKE5VTEwpIHt9CisgICAgICAgIH5UTG9va3VwTGlzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKExvb2t1cCkgeworICAgICAgICAgICAgICAgIGRlbGV0ZVtdIExvb2t1cDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIFRMb29rdXBMaXN0KGNvbnN0IFRMb29rdXBMaXN0Jik7CisgICAgICAgIFRMb29rdXBMaXN0JiBvcGVyYXRvcj0oY29uc3QgVExvb2t1cExpc3QmKTsKKyAgICB9OworICAgIGJvb2wgUGFyc2UoCisgICAgICAgIEZUX0J5dGVzIHNjcmlwdGxpc3QsCisgICAgICAgIEZUX0J5dGVzIGZlYXR1cmVsaXN0LAorICAgICAgICBGVF9CeXRlcyBsb29rdXBsaXN0KTsKKyAgICB2b2lkIFBhcnNlU2NyaXB0TGlzdChGVF9CeXRlcyByYXcsIFRTY3JpcHRMaXN0ICpyZWMpOworICAgIHZvaWQgUGFyc2VTY3JpcHQoRlRfQnl0ZXMgcmF3LCBUU2NyaXB0ICpyZWMpOworICAgIHZvaWQgUGFyc2VMYW5nU3lzKEZUX0J5dGVzIHJhdywgVExhbmdTeXMgKnJlYyk7CisgICAgdm9pZCBQYXJzZUZlYXR1cmVMaXN0KEZUX0J5dGVzIHJhdywgVEZlYXR1cmVMaXN0ICpyZWMpOworICAgIHZvaWQgUGFyc2VGZWF0dXJlKEZUX0J5dGVzIHJhdywgVEZlYXR1cmUgKnJlYyk7CisgICAgdm9pZCBQYXJzZUxvb2t1cExpc3QoRlRfQnl0ZXMgcmF3LCBUTG9va3VwTGlzdCAqcmVjKTsKKyAgICB2b2lkIFBhcnNlTG9va3VwKEZUX0J5dGVzIHJhdywgVExvb2t1cCAqcmVjKTsKKyAgICB2b2lkIFBhcnNlQ292ZXJhZ2UoRlRfQnl0ZXMgcmF3LCBUQ292ZXJhZ2VGb3JtYXRCYXNlICoqcmVjKTsKKyAgICB2b2lkIFBhcnNlQ292ZXJhZ2VGb3JtYXQxKEZUX0J5dGVzIHJhdywgVENvdmVyYWdlRm9ybWF0MSAqcmVjKTsKKyAgICB2b2lkIFBhcnNlQ292ZXJhZ2VGb3JtYXQyKEZUX0J5dGVzIHJhdywgVENvdmVyYWdlRm9ybWF0MiAqcmVjKTsKKyAgICB2b2lkIFBhcnNlU2luZ2xlU3Vic3QoRlRfQnl0ZXMgcmF3LCBUU3ViVGFibGVCYXNlICoqcmVjKTsKKyAgICB2b2lkIFBhcnNlU2luZ2xlU3Vic3RGb3JtYXQxKEZUX0J5dGVzIHJhdywgVFNpbmdsZVN1YnN0Rm9ybWF0MSAqcmVjKTsKKyAgICB2b2lkIFBhcnNlU2luZ2xlU3Vic3RGb3JtYXQyKEZUX0J5dGVzIHJhdywgVFNpbmdsZVN1YnN0Rm9ybWF0MiAqcmVjKTsKKyAgICBib29sIEdldFZlcnRpY2FsR2x5cGhTdWIoCisgICAgICAgIFRUX3VpbnQzMl90IGdseXBobnVtLAorICAgICAgICBUVF91aW50MzJfdCAqdmdseXBobnVtLAorICAgICAgICBzdHJ1Y3QgVEZlYXR1cmUgKkZlYXR1cmUpOworICAgIGJvb2wgR2V0VmVydGljYWxHbHlwaFN1YjIoCisgICAgICAgIFRUX3VpbnQzMl90IGdseXBobnVtLAorICAgICAgICBUVF91aW50MzJfdCAqdmdseXBobnVtLAorICAgICAgICBzdHJ1Y3QgVExvb2t1cCAqTG9va3VwKTsKKyAgICBpbnQgR2V0Q292ZXJhZ2VJbmRleChzdHJ1Y3QgVENvdmVyYWdlRm9ybWF0QmFzZSAqQ292ZXJhZ2UsIFRUX3VpbnQzMl90IGcpOworICAgIFRUX3VpbnQ4X3QgR2V0VUludDgoRlRfQnl0ZXMmIHApIGNvbnN0CisgICAgeworICAgICAgICBUVF91aW50OF90IHJldCA9IHBbMF07CisgICAgICAgIHAgKz0gMTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisgICAgVFRfaW50MTZfdCBHZXRJbnQxNihGVF9CeXRlcyYgcCkgY29uc3QKKyAgICB7CisgICAgICAgIFRUX3VpbnQxNl90IHJldCA9IHBbMF0gPDwgOCB8IHBbMV07CisgICAgICAgIHAgKz0gMjsKKyAgICAgICAgcmV0dXJuICooVFRfaW50MTZfdCopJnJldDsKKyAgICB9CisgICAgVFRfdWludDE2X3QgR2V0VUludDE2KEZUX0J5dGVzJiBwKSBjb25zdAorICAgIHsKKyAgICAgICAgVFRfdWludDE2X3QgcmV0ID0gcFswXSA8PCA4IHwgcFsxXTsKKyAgICAgICAgcCArPSAyOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICBUVF9pbnQzMl90IEdldEludDMyKEZUX0J5dGVzJiBwKSBjb25zdAorICAgIHsKKyAgICAgICAgVFRfdWludDMyX3QgcmV0ID0gcFswXSA8PCAyNCB8IHBbMV0gPDwgMTYgfCBwWzJdIDw8IDggfCBwWzNdOworICAgICAgICBwICs9IDQ7CisgICAgICAgIHJldHVybiAqKFRUX2ludDMyX3QqKSZyZXQ7CisgICAgfQorICAgIFRUX3VpbnQzMl90IEdldFVJbnQzMihGVF9CeXRlcyYgcCkgY29uc3QKKyAgICB7CisgICAgICAgIFRUX3VpbnQzMl90IHJldCA9IHBbMF0gPDwgMjQgfCBwWzFdIDw8IDE2IHwgcFsyXSA8PCA4IHwgcFszXTsKKyAgICAgICAgcCArPSA0OworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICBDRlhfQ01hcERXb3JkVG9EV29yZCBtX2ZlYXR1cmVNYXA7CisgICAgRlhfQk9PTAltX2JGZWF1dHVyZU1hcExvYWQ7CisgICAgYm9vbCBsb2FkZWQ7CisgICAgc3RydWN0IHR0X2dzdWJfaGVhZGVyIGhlYWRlcjsKKyAgICBzdHJ1Y3QgVFNjcmlwdExpc3QgU2NyaXB0TGlzdDsKKyAgICBzdHJ1Y3QgVEZlYXR1cmVMaXN0IEZlYXR1cmVMaXN0OworICAgIHN0cnVjdCBUTG9va3VwTGlzdCBMb29rdXBMaXN0OworfTsKK2NsYXNzIENGWF9HU1VCVGFibGUgOiBwdWJsaWMgSUZYX0dTVUJUYWJsZSwgcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQJUmVsZWFzZSgpCisgICAgeworICAgICAgICBkZWxldGUgdGhpczsKKyAgICB9CisgICAgdmlydHVhbCBGWF9CT09MIEdldFZlcnRpY2FsR2x5cGgoRlhfRFdPUkQgZ2x5cGhudW0sIEZYX0RXT1JEKiB2Z2x5cGhudW0pOworICAgIENGWF9DVFRHU1VCVGFibGUgbV9Hc3ViSW1wOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhZ2UvZnBkZl9wYWdlLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYWdlL2ZwZGZfcGFnZS5jcHAKaW5kZXggMjMyZTU2MS4uM2NmYjkzZSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhZ2UvZnBkZl9wYWdlLmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFnZS9mcGRmX3BhZ2UuY3BwCkBAIC0xLDEwNDcgKzEsMTA0NyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2UuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfbW9kdWxlLmgiDQotI2luY2x1ZGUgInBhZ2VpbnQuaCINCi12b2lkIENQREZfUGFnZU9iamVjdDo6UmVsZWFzZSgpDQotew0KLSAgICBkZWxldGUgdGhpczsNCi19DQotQ1BERl9QYWdlT2JqZWN0KiBDUERGX1BhZ2VPYmplY3Q6OkNyZWF0ZShpbnQgdHlwZSkNCi17DQotICAgIHN3aXRjaCAodHlwZSkgew0KLSAgICAgICAgY2FzZSBQREZQQUdFX1RFWFQ6DQotICAgICAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX1RleHRPYmplY3Q7DQotICAgICAgICBjYXNlIFBERlBBR0VfSU1BR0U6DQotICAgICAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX0ltYWdlT2JqZWN0Ow0KLSAgICAgICAgY2FzZSBQREZQQUdFX1BBVEg6DQotICAgICAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX1BhdGhPYmplY3Q7DQotICAgICAgICBjYXNlIFBERlBBR0VfU0hBRElORzoNCi0gICAgICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfU2hhZGluZ09iamVjdDsNCi0gICAgICAgIGNhc2UgUERGUEFHRV9GT1JNOg0KLSAgICAgICAgICAgIHJldHVybiBGWF9ORVcgQ1BERl9Gb3JtT2JqZWN0Ow0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1DUERGX1BhZ2VPYmplY3QqIENQREZfUGFnZU9iamVjdDo6Q2xvbmUoKSBjb25zdA0KLXsNCi0gICAgQ1BERl9QYWdlT2JqZWN0KiBwT2JqID0gQ3JlYXRlKG1fVHlwZSk7DQotICAgIHBPYmotPkNvcHkodGhpcyk7DQotICAgIHJldHVybiBwT2JqOw0KLX0NCi12b2lkIENQREZfUGFnZU9iamVjdDo6Q29weShjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBTcmMpDQotew0KLSAgICBpZiAobV9UeXBlICE9IHBTcmMtPm1fVHlwZSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENvcHlEYXRhKHBTcmMpOw0KLSAgICBDb3B5U3RhdGVzKCpwU3JjKTsNCi0gICAgbV9MZWZ0ID0gcFNyYy0+bV9MZWZ0Ow0KLSAgICBtX1JpZ2h0ID0gcFNyYy0+bV9SaWdodDsNCi0gICAgbV9Ub3AgPSBwU3JjLT5tX1RvcDsNCi0gICAgbV9Cb3R0b20gPSBwU3JjLT5tX0JvdHRvbTsNCi19DQotdm9pZCBDUERGX1BhZ2VPYmplY3Q6OkFwcGVuZENsaXBQYXRoKENQREZfUGF0aCBwYXRoLCBpbnQgdHlwZSwgRlhfQk9PTCBiQXV0b01lcmdlKQ0KLXsNCi0gICAgbV9DbGlwUGF0aC5BcHBlbmRQYXRoKHBhdGgsIHR5cGUsIGJBdXRvTWVyZ2UpOw0KLX0NCi12b2lkIENQREZfUGFnZU9iamVjdDo6Q29weUNsaXBQYXRoKENQREZfUGFnZU9iamVjdCogcE9iaikNCi17DQotICAgIG1fQ2xpcFBhdGggPSBwT2JqLT5tX0NsaXBQYXRoOw0KLX0NCi12b2lkIENQREZfUGFnZU9iamVjdDo6UmVtb3ZlQ2xpcFBhdGgoKQ0KLXsNCi0gICAgbV9DbGlwUGF0aC5TZXROdWxsKCk7DQotfQ0KLXZvaWQgQ1BERl9QYWdlT2JqZWN0OjpSZWNhbGNCQm94KCkNCi17DQotICAgIHN3aXRjaCAobV9UeXBlKSB7DQotICAgICAgICBjYXNlIFBERlBBR0VfVEVYVDoNCi0gICAgICAgICAgICAoKENQREZfVGV4dE9iamVjdCopdGhpcyktPlJlY2FsY1Bvc2l0aW9uRGF0YSgpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBQREZQQUdFX1BBVEg6DQotICAgICAgICAgICAgKChDUERGX1BhdGhPYmplY3QqKXRoaXMpLT5DYWxjQm91bmRpbmdCb3goKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgUERGUEFHRV9TSEFESU5HOg0KLSAgICAgICAgICAgICgoQ1BERl9TaGFkaW5nT2JqZWN0Kil0aGlzKS0+Q2FsY0JvdW5kaW5nQm94KCk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgIH0NCi19DQotdm9pZCBDUERGX1BhZ2VPYmplY3Q6OlRyYW5zZm9ybUNsaXBQYXRoKENGWF9BZmZpbmVNYXRyaXgmIG1hdHJpeCkNCi17DQotICAgIGlmIChtX0NsaXBQYXRoLklzTnVsbCgpKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbV9DbGlwUGF0aC5HZXRNb2RpZnkoKTsNCi0gICAgbV9DbGlwUGF0aC5UcmFuc2Zvcm0obWF0cml4KTsNCi19DQotdm9pZCBDUERGX1BhZ2VPYmplY3Q6OlRyYW5zZm9ybUdlbmVyYWxTdGF0ZShDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpDQotew0KLSAgICBpZihtX0dlbmVyYWxTdGF0ZS5Jc051bGwoKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfR2VuZXJhbFN0YXRlRGF0YSogcEdTID0gbV9HZW5lcmFsU3RhdGUuR2V0TW9kaWZ5KCk7DQotICAgIHBHUy0+bV9NYXRyaXguQ29uY2F0KG1hdHJpeCk7DQotfQ0KLUZYX1JFQ1QgQ1BERl9QYWdlT2JqZWN0OjpHZXRCQm94KGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgpIGNvbnN0DQotew0KLSAgICBDRlhfRmxvYXRSZWN0IHJlY3QobV9MZWZ0LCBtX0JvdHRvbSwgbV9SaWdodCwgbV9Ub3ApOw0KLSAgICBpZiAocE1hdHJpeCkgew0KLSAgICAgICAgcE1hdHJpeC0+VHJhbnNmb3JtUmVjdChyZWN0KTsNCi0gICAgfQ0KLSAgICByZXR1cm4gcmVjdC5HZXRPdXR0ZXJSZWN0KCk7DQotfQ0KLUNQREZfVGV4dE9iamVjdDo6Q1BERl9UZXh0T2JqZWN0KCkNCi17DQotICAgIG1fVHlwZSA9IFBERlBBR0VfVEVYVDsNCi0gICAgbV9wQ2hhckNvZGVzID0gTlVMTDsNCi0gICAgbV9wQ2hhclBvcyA9IE5VTEw7DQotICAgIG1fbkNoYXJzID0gMDsNCi0gICAgbV9Qb3NYID0gbV9Qb3NZID0gMDsNCi19DQotQ1BERl9UZXh0T2JqZWN0Ojp+Q1BERl9UZXh0T2JqZWN0KCkNCi17DQotICAgIGlmIChtX25DaGFycyA+IDEgJiYgbV9wQ2hhckNvZGVzKSB7DQotICAgICAgICBGWF9GcmVlKG1fcENoYXJDb2Rlcyk7DQotICAgIH0NCi0gICAgaWYgKG1fcENoYXJQb3MpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wQ2hhclBvcyk7DQotICAgIH0NCi19DQotdm9pZCBDUERGX1RleHRPYmplY3Q6OkdldEl0ZW1JbmZvKGludCBpbmRleCwgQ1BERl9UZXh0T2JqZWN0SXRlbSogcEluZm8pIGNvbnN0DQotew0KLSAgICBwSW5mby0+bV9DaGFyQ29kZSA9IG1fbkNoYXJzID09IDEgPyAoRlhfRFdPUkQpKEZYX1VJTlRQVFIpbV9wQ2hhckNvZGVzIDogbV9wQ2hhckNvZGVzW2luZGV4XTsNCi0gICAgcEluZm8tPm1fT3JpZ2luWCA9IGluZGV4ID8gbV9wQ2hhclBvc1tpbmRleCAtIDFdIDogMDsNCi0gICAgcEluZm8tPm1fT3JpZ2luWSA9IDA7DQotICAgIGlmIChwSW5mby0+bV9DaGFyQ29kZSA9PSAtMSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfRm9udCogcEZvbnQgPSBtX1RleHRTdGF0ZS5HZXRGb250KCk7DQotICAgIGlmIChwRm9udC0+R2V0Rm9udFR5cGUoKSAhPSBQREZGT05UX0NJREZPTlQpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAoISgoQ1BERl9DSURGb250KilwRm9udCktPklzVmVydFdyaXRpbmcoKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX1dPUkQgQ0lEID0gKChDUERGX0NJREZvbnQqKXBGb250KS0+Q0lERnJvbUNoYXJDb2RlKHBJbmZvLT5tX0NoYXJDb2RlKTsNCi0gICAgcEluZm8tPm1fT3JpZ2luWSA9IHBJbmZvLT5tX09yaWdpblg7DQotICAgIHBJbmZvLT5tX09yaWdpblggPSAwOw0KLSAgICBzaG9ydCB2eCwgdnk7DQotICAgICgoQ1BERl9DSURGb250KilwRm9udCktPkdldFZlcnRPcmlnaW4oQ0lELCB2eCwgdnkpOw0KLSAgICBGWF9GTE9BVCBmb250c2l6ZSA9IG1fVGV4dFN0YXRlLkdldEZvbnRTaXplKCk7DQotICAgIHBJbmZvLT5tX09yaWdpblggLT0gZm9udHNpemUgKiB2eCAvIDEwMDA7DQotICAgIHBJbmZvLT5tX09yaWdpblkgLT0gZm9udHNpemUgKiB2eSAvIDEwMDA7DQotfQ0KLWludCBDUERGX1RleHRPYmplY3Q6OkNvdW50Q2hhcnMoKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fbkNoYXJzID09IDEpIHsNCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotICAgIGludCBjb3VudCA9IDA7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9uQ2hhcnM7IGkgKyspDQotICAgICAgICBpZiAobV9wQ2hhckNvZGVzW2ldICE9IChGWF9EV09SRCkgLSAxKSB7DQotICAgICAgICAgICAgY291bnQgKys7DQotICAgICAgICB9DQotICAgIHJldHVybiBjb3VudDsNCi19DQotdm9pZCBDUERGX1RleHRPYmplY3Q6OkdldENoYXJJbmZvKGludCBpbmRleCwgRlhfRFdPUkQmIGNoYXJjb2RlLCBGWF9GTE9BVCYga2VybmluZykgY29uc3QNCi17DQotICAgIGlmIChtX25DaGFycyA9PSAxKSB7DQotICAgICAgICBjaGFyY29kZSA9IChGWF9EV09SRCkoRlhfVUlOVFBUUiltX3BDaGFyQ29kZXM7DQotICAgICAgICBrZXJuaW5nID0gMDsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpbnQgY291bnQgPSAwOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbkNoYXJzOyBpICsrKSB7DQotICAgICAgICBpZiAobV9wQ2hhckNvZGVzW2ldICE9IChGWF9EV09SRCkgLSAxKSB7DQotICAgICAgICAgICAgaWYgKGNvdW50ID09IGluZGV4KSB7DQotICAgICAgICAgICAgICAgIGNoYXJjb2RlID0gbV9wQ2hhckNvZGVzW2ldOw0KLSAgICAgICAgICAgICAgICBpZiAoaSA9PSBtX25DaGFycyAtIDEgfHwgbV9wQ2hhckNvZGVzW2kgKyAxXSAhPSAoRlhfRFdPUkQpIC0gMSkgew0KLSAgICAgICAgICAgICAgICAgICAga2VybmluZyA9IDA7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBrZXJuaW5nID0gbV9wQ2hhclBvc1tpXTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNvdW50ICsrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9UZXh0T2JqZWN0OjpHZXRDaGFySW5mbyhpbnQgaW5kZXgsIENQREZfVGV4dE9iamVjdEl0ZW0qIHBJbmZvKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fbkNoYXJzID09IDEpIHsNCi0gICAgICAgIEdldEl0ZW1JbmZvKDAsIHBJbmZvKTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpbnQgY291bnQgPSAwOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbkNoYXJzOyBpICsrKSB7DQotICAgICAgICBGWF9EV09SRCBjaGFyY29kZSA9IG1fcENoYXJDb2Rlc1tpXTsNCi0gICAgICAgIGlmIChjaGFyY29kZSA9PSAoRlhfRFdPUkQpIC0gMSkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGNvdW50ID09IGluZGV4KSB7DQotICAgICAgICAgICAgR2V0SXRlbUluZm8oaSwgcEluZm8pOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgY291bnQgKys7DQotICAgIH0NCi19DQotdm9pZCBDUERGX1RleHRPYmplY3Q6OkNvcHlEYXRhKGNvbnN0IENQREZfUGFnZU9iamVjdCogcFNyYykNCi17DQotICAgIGNvbnN0IENQREZfVGV4dE9iamVjdCogcFNyY09iaiA9IChjb25zdCBDUERGX1RleHRPYmplY3QqKXBTcmM7DQotICAgIGlmIChtX25DaGFycyA+IDEgJiYgbV9wQ2hhckNvZGVzKSB7DQotICAgICAgICBGWF9GcmVlKG1fcENoYXJDb2Rlcyk7DQotICAgICAgICBtX3BDaGFyQ29kZXMgPSBOVUxMOw0KLSAgICB9DQotICAgIGlmIChtX3BDaGFyUG9zKSB7DQotICAgICAgICBGWF9GcmVlKG1fcENoYXJQb3MpOw0KLSAgICAgICAgbV9wQ2hhclBvcyA9IE5VTEw7DQotICAgIH0NCi0gICAgbV9uQ2hhcnMgPSBwU3JjT2JqLT5tX25DaGFyczsNCi0gICAgaWYgKG1fbkNoYXJzID4gMSkgew0KLSAgICAgICAgbV9wQ2hhckNvZGVzID0gRlhfQWxsb2MoRlhfRFdPUkQsIG1fbkNoYXJzKTsNCi0gICAgICAgIG1fcENoYXJQb3MgPSBGWF9BbGxvYyhGWF9GTE9BVCwgbV9uQ2hhcnMgLSAxKTsNCi0gICAgICAgIGludCBpOw0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG1fbkNoYXJzOyBpICsrKSB7DQotICAgICAgICAgICAgbV9wQ2hhckNvZGVzW2ldID0gcFNyY09iai0+bV9wQ2hhckNvZGVzW2ldOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG1fbkNoYXJzIC0gMTsgaSArKykgew0KLSAgICAgICAgICAgIG1fcENoYXJQb3NbaV0gPSBwU3JjT2JqLT5tX3BDaGFyUG9zW2ldOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wQ2hhckNvZGVzID0gcFNyY09iai0+bV9wQ2hhckNvZGVzOw0KLSAgICB9DQotICAgIG1fUG9zWCA9IHBTcmNPYmotPm1fUG9zWDsNCi0gICAgbV9Qb3NZID0gcFNyY09iai0+bV9Qb3NZOw0KLX0NCi12b2lkIENQREZfVGV4dE9iamVjdDo6R2V0VGV4dE1hdHJpeChDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4KSBjb25zdA0KLXsNCi0gICAgRlhfRkxPQVQqIHBUZXh0TWF0cml4ID0gbV9UZXh0U3RhdGUuR2V0TWF0cml4KCk7DQotICAgIHBNYXRyaXgtPlNldChwVGV4dE1hdHJpeFswXSwgcFRleHRNYXRyaXhbMl0sIHBUZXh0TWF0cml4WzFdLCBwVGV4dE1hdHJpeFszXSwgbV9Qb3NYLCBtX1Bvc1kpOw0KLX0NCi12b2lkIENQREZfVGV4dE9iamVjdDo6U2V0U2VnbWVudHMoY29uc3QgQ0ZYX0J5dGVTdHJpbmcqIHBTdHJzLCBGWF9GTE9BVCogcEtlcm5pbmcsIGludCBuc2VncykNCi17DQotICAgIGlmIChtX25DaGFycyA+IDEgJiYgbV9wQ2hhckNvZGVzKSB7DQotICAgICAgICBGWF9GcmVlKG1fcENoYXJDb2Rlcyk7DQotICAgICAgICBtX3BDaGFyQ29kZXMgPSBOVUxMOw0KLSAgICB9DQotICAgIGlmIChtX3BDaGFyUG9zKSB7DQotICAgICAgICBGWF9GcmVlKG1fcENoYXJQb3MpOw0KLSAgICAgICAgbV9wQ2hhclBvcyA9IE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9Gb250KiBwRm9udCA9IG1fVGV4dFN0YXRlLkdldEZvbnQoKTsNCi0gICAgbV9uQ2hhcnMgPSAwOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5zZWdzOyBpICsrKSB7DQotICAgICAgICBtX25DaGFycyArPSBwRm9udC0+Q291bnRDaGFyKHBTdHJzW2ldLCBwU3Ryc1tpXS5HZXRMZW5ndGgoKSk7DQotICAgIH0NCi0gICAgbV9uQ2hhcnMgKz0gbnNlZ3MgLSAxOw0KLSAgICBpZiAobV9uQ2hhcnMgPiAxKSB7DQotICAgICAgICBtX3BDaGFyQ29kZXMgPSBGWF9BbGxvYyhGWF9EV09SRCwgbV9uQ2hhcnMpOw0KLSAgICAgICAgbV9wQ2hhclBvcyA9IEZYX0FsbG9jKEZYX0ZMT0FULCBtX25DaGFycyAtIDEpOw0KLSAgICAgICAgaW50IGluZGV4ID0gMDsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnNlZ3M7IGkgKyspIHsNCi0gICAgICAgICAgICBGWF9MUENTVFIgc2VnbWVudCA9IHBTdHJzW2ldOw0KLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAwLCBsZW4gPSBwU3Ryc1tpXS5HZXRMZW5ndGgoKTsNCi0gICAgICAgICAgICB3aGlsZSAob2Zmc2V0IDwgbGVuKSB7DQotICAgICAgICAgICAgICAgIG1fcENoYXJDb2Rlc1tpbmRleCsrXSA9IHBGb250LT5HZXROZXh0Q2hhcihzZWdtZW50LCBvZmZzZXQpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoaSAhPSBuc2VncyAtIDEpIHsNCi0gICAgICAgICAgICAgICAgbV9wQ2hhclBvc1tpbmRleCAtIDFdID0gcEtlcm5pbmdbaV07DQotICAgICAgICAgICAgICAgIG1fcENoYXJDb2Rlc1tpbmRleCArK10gPSAoRlhfRFdPUkQpIC0gMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpbnQgb2Zmc2V0ID0gMDsNCi0gICAgICAgIG1fcENoYXJDb2RlcyA9IChGWF9EV09SRCopKEZYX1VJTlRQVFIpcEZvbnQtPkdldE5leHRDaGFyKHBTdHJzWzBdLCBvZmZzZXQpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9UZXh0T2JqZWN0OjpTZXRUZXh0KGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIpDQotew0KLSAgICBTZXRTZWdtZW50cygmc3RyLCBOVUxMLCAxKTsNCi0gICAgUmVjYWxjUG9zaXRpb25EYXRhKCk7DQotfQ0KLXZvaWQgQ1BERl9UZXh0T2JqZWN0OjpTZXRFbXB0eSgpDQotew0KLSAgICBpZiAobV9uQ2hhcnMgPiAxICYmIG1fcENoYXJDb2Rlcykgew0KLSAgICAgICAgRlhfRnJlZShtX3BDaGFyQ29kZXMpOw0KLSAgICB9DQotICAgIGlmIChtX25DaGFycyA+IDEgJiYgbV9wQ2hhclBvcykgew0KLSAgICAgICAgRlhfRnJlZShtX3BDaGFyUG9zKTsNCi0gICAgfQ0KLSAgICBtX25DaGFycyA9IDA7DQotICAgIG1fcENoYXJDb2RlcyA9IE5VTEw7DQotICAgIG1fcENoYXJQb3MgPSBOVUxMOw0KLSAgICBtX0xlZnQgPSBtX1JpZ2h0ID0gbV9Qb3NYOw0KLSAgICBtX1RvcCA9IG1fQm90dG9tID0gbV9Qb3NZOw0KLX0NCi12b2lkIENQREZfVGV4dE9iamVjdDo6U2V0VGV4dChDRlhfQnl0ZVN0cmluZyogcFN0cnMsIEZYX0ZMT0FUKiBwS2VybmluZywgaW50IG5TZWdzKQ0KLXsNCi0gICAgU2V0U2VnbWVudHMocFN0cnMsIHBLZXJuaW5nLCBuU2Vncyk7DQotICAgIFJlY2FsY1Bvc2l0aW9uRGF0YSgpOw0KLX0NCi12b2lkIENQREZfVGV4dE9iamVjdDo6U2V0VGV4dChpbnQgbkNoYXJzLCBGWF9EV09SRCogcENoYXJDb2RlcywgRlhfRkxPQVQqIHBLZXJuaW5ncykNCi17DQotICAgIGlmIChtX25DaGFycyA+IDEgJiYgbV9wQ2hhckNvZGVzKSB7DQotICAgICAgICBGWF9GcmVlKG1fcENoYXJDb2Rlcyk7DQotICAgICAgICBtX3BDaGFyQ29kZXMgPSBOVUxMOw0KLSAgICB9DQotICAgIGlmIChtX3BDaGFyUG9zKSB7DQotICAgICAgICBGWF9GcmVlKG1fcENoYXJQb3MpOw0KLSAgICAgICAgbV9wQ2hhclBvcyA9IE5VTEw7DQotICAgIH0NCi0gICAgaW50IG5LZXJuaW5ncyA9IDA7DQotICAgIGludCBpOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbkNoYXJzIC0gMTsgaSArKykNCi0gICAgICAgIGlmIChwS2VybmluZ3NbaV0gIT0gMCkgew0KLSAgICAgICAgICAgIG5LZXJuaW5ncyArKzsNCi0gICAgICAgIH0NCi0gICAgbV9uQ2hhcnMgPSBuQ2hhcnMgKyBuS2VybmluZ3M7DQotICAgIGlmIChtX25DaGFycyA+IDEpIHsNCi0gICAgICAgIG1fcENoYXJDb2RlcyA9IEZYX0FsbG9jKEZYX0RXT1JELCBtX25DaGFycyk7DQotICAgICAgICBtX3BDaGFyUG9zID0gRlhfQWxsb2MoRlhfRkxPQVQsIG1fbkNoYXJzIC0gMSk7DQotICAgICAgICBpbnQgaW5kZXggPSAwOw0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuQ2hhcnM7IGkgKyspIHsNCi0gICAgICAgICAgICBtX3BDaGFyQ29kZXNbaW5kZXgrK10gPSBwQ2hhckNvZGVzW2ldOw0KLSAgICAgICAgICAgIGlmIChwS2VybmluZ3NbaV0gIT0gMCAmJiBpICE9IG5DaGFycyAtIDEpIHsNCi0gICAgICAgICAgICAgICAgbV9wQ2hhckNvZGVzW2luZGV4XSA9IChGWF9EV09SRCkgLSAxOw0KLSAgICAgICAgICAgICAgICBtX3BDaGFyUG9zW2luZGV4IC0gMV0gPSBwS2VybmluZ3NbaV07DQotICAgICAgICAgICAgICAgIGluZGV4ICsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGludCBvZmZzZXQgPSAwOw0KLSAgICAgICAgbV9wQ2hhckNvZGVzID0gKEZYX0RXT1JEKikoRlhfVUlOVFBUUilwQ2hhckNvZGVzWzBdOw0KLSAgICB9DQotICAgIFJlY2FsY1Bvc2l0aW9uRGF0YSgpOw0KLX0NCi1GWF9GTE9BVCBDUERGX1RleHRPYmplY3Q6OkdldENoYXJXaWR0aChGWF9EV09SRCBjaGFyY29kZSkgY29uc3QNCi17DQotICAgIEZYX0ZMT0FUIGZvbnRzaXplID0gbV9UZXh0U3RhdGUuR2V0Rm9udFNpemUoKSAvIDEwMDA7DQotICAgIENQREZfRm9udCogcEZvbnQgPSBtX1RleHRTdGF0ZS5HZXRGb250KCk7DQotICAgIEZYX0JPT0wgYlZlcnRXcml0aW5nID0gRkFMU0U7DQotICAgIENQREZfQ0lERm9udCogcENJREZvbnQgPSBwRm9udC0+R2V0Q0lERm9udCgpOw0KLSAgICBpZiAocENJREZvbnQpIHsNCi0gICAgICAgIGJWZXJ0V3JpdGluZyA9IHBDSURGb250LT5Jc1ZlcnRXcml0aW5nKCk7DQotICAgIH0NCi0gICAgaWYgKCFiVmVydFdyaXRpbmcpIHsNCi0gICAgICAgIHJldHVybiBwRm9udC0+R2V0Q2hhcldpZHRoRihjaGFyY29kZSwgMCkgKiBmb250c2l6ZTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEZYX1dPUkQgQ0lEID0gcENJREZvbnQtPkNJREZyb21DaGFyQ29kZShjaGFyY29kZSk7DQotICAgICAgICByZXR1cm4gcENJREZvbnQtPkdldFZlcnRXaWR0aChDSUQpICogZm9udHNpemU7DQotICAgIH0NCi19DQotRlhfRkxPQVQgQ1BERl9UZXh0T2JqZWN0OjpHZXRTcGFjZUNoYXJXaWR0aCgpIGNvbnN0DQotew0KLSAgICBDUERGX0ZvbnQqIHBGb250ID0gbV9UZXh0U3RhdGUuR2V0Rm9udCgpOw0KLSAgICBGWF9EV09SRCBjaGFyQ29kZSA9IG1fVGV4dFN0YXRlLkdldEZvbnQoKS0+Q2hhckNvZGVGcm9tVW5pY29kZSgzMik7DQotICAgIGlmIChjaGFyQ29kZSAhPSAoRlhfRFdPUkQpIC0gMSkgew0KLSAgICAgICAgcmV0dXJuIEdldENoYXJXaWR0aChjaGFyQ29kZSk7DQotICAgIH0NCi0gICAgRlhfRkxPQVQgZm9udFNpemUgPSBtX1RleHRTdGF0ZS5HZXRGb250U2l6ZSgpIC8gNDAwMC4wZjsNCi0gICAgRlhfQk9PTCBiVmVydFdyaXRpbmcgPSBGQUxTRTsNCi0gICAgQ1BERl9DSURGb250KiBwQ0lERm9udCA9IHBGb250LT5HZXRDSURGb250KCk7DQotICAgIGlmIChwQ0lERm9udCkgew0KLSAgICAgICAgYlZlcnRXcml0aW5nID0gcENJREZvbnQtPklzVmVydFdyaXRpbmcoKTsNCi0gICAgfQ0KLSAgICBGWF9SRUNUIGZvbnRSZWN0Ow0KLSAgICBwRm9udC0+R2V0Rm9udEJCb3goZm9udFJlY3QpOw0KLSAgICBmb250U2l6ZSAqPSBiVmVydFdyaXRpbmcgPyAoRlhfRkxPQVQpZm9udFJlY3QuSGVpZ2h0KCkgOiAoRlhfRkxPQVQpZm9udFJlY3QuV2lkdGgoKTsNCi0gICAgcmV0dXJuIGZvbnRTaXplOw0KLX0NCi12b2lkIENQREZfVGV4dE9iamVjdDo6R2V0Q2hhclJlY3QoaW50IGluZGV4LCBDRlhfRmxvYXRSZWN0JiByZWN0KSBjb25zdA0KLXsNCi0gICAgRlhfRkxPQVQgY3VycG9zID0gMDsNCi0gICAgQ1BERl9Gb250KiBwRm9udCA9IG1fVGV4dFN0YXRlLkdldEZvbnQoKTsNCi0gICAgRlhfQk9PTCBiVmVydFdyaXRpbmcgPSBGQUxTRTsNCi0gICAgQ1BERl9DSURGb250KiBwQ0lERm9udCA9IHBGb250LT5HZXRDSURGb250KCk7DQotICAgIGlmIChwQ0lERm9udCkgew0KLSAgICAgICAgYlZlcnRXcml0aW5nID0gcENJREZvbnQtPklzVmVydFdyaXRpbmcoKTsNCi0gICAgfQ0KLSAgICBGWF9GTE9BVCBmb250c2l6ZSA9IG1fVGV4dFN0YXRlLkdldEZvbnRTaXplKCkgLyAxMDAwOw0KLSAgICBpbnQgY291bnQgPSAwOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbkNoYXJzOyBpICsrKSB7DQotICAgICAgICBGWF9EV09SRCBjaGFyY29kZSA9IG1fbkNoYXJzID09IDEgPyAoRlhfRFdPUkQpKEZYX1VJTlRQVFIpbV9wQ2hhckNvZGVzIDogbV9wQ2hhckNvZGVzW2ldOw0KLSAgICAgICAgaWYgKGNoYXJjb2RlID09IChGWF9EV09SRCkgLSAxKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiggY291bnQgIT0gaW5kZXgpIHsNCi0gICAgICAgICAgICBjb3VudCsrOw0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfRkxPQVQgY3VycG9zID0gaSA+IDAgPyBtX3BDaGFyUG9zW2kgLSAxXSA6IDA7DQotICAgICAgICBGWF9SRUNUIGNoYXJfcmVjdDsNCi0gICAgICAgIHBGb250LT5HZXRDaGFyQkJveChjaGFyY29kZSwgY2hhcl9yZWN0LCAwKTsNCi0gICAgICAgIGlmICghYlZlcnRXcml0aW5nKSB7DQotICAgICAgICAgICAgcmVjdC5sZWZ0ID0gY3VycG9zICsgY2hhcl9yZWN0LmxlZnQgKiBmb250c2l6ZTsNCi0gICAgICAgICAgICByZWN0LnJpZ2h0ID0gY3VycG9zICsgY2hhcl9yZWN0LnJpZ2h0ICogZm9udHNpemU7DQotICAgICAgICAgICAgcmVjdC50b3AgPSBjaGFyX3JlY3QudG9wICogZm9udHNpemU7DQotICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBjaGFyX3JlY3QuYm90dG9tICogZm9udHNpemU7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIEZYX1dPUkQgQ0lEID0gcENJREZvbnQtPkNJREZyb21DaGFyQ29kZShjaGFyY29kZSk7DQotICAgICAgICAgICAgc2hvcnQgdngsIHZ5Ow0KLSAgICAgICAgICAgIHBDSURGb250LT5HZXRWZXJ0T3JpZ2luKENJRCwgdngsIHZ5KTsNCi0gICAgICAgICAgICBjaGFyX3JlY3QubGVmdCAtPSB2eDsNCi0gICAgICAgICAgICBjaGFyX3JlY3QucmlnaHQgLT0gdng7DQotICAgICAgICAgICAgY2hhcl9yZWN0LnRvcCAtPSB2eTsNCi0gICAgICAgICAgICBjaGFyX3JlY3QuYm90dG9tIC09IHZ5Ow0KLSAgICAgICAgICAgIHJlY3QubGVmdCA9IGNoYXJfcmVjdC5sZWZ0ICogZm9udHNpemU7DQotICAgICAgICAgICAgcmVjdC5yaWdodCA9IGNoYXJfcmVjdC5yaWdodCAqIGZvbnRzaXplOw0KLSAgICAgICAgICAgIHJlY3QudG9wID0gY3VycG9zICsgY2hhcl9yZWN0LnRvcCAqIGZvbnRzaXplOw0KLSAgICAgICAgICAgIHJlY3QuYm90dG9tID0gY3VycG9zICsgY2hhcl9yZWN0LmJvdHRvbSAqIGZvbnRzaXplOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9UZXh0T2JqZWN0OjpDYWxjUG9zaXRpb25EYXRhKEZYX0ZMT0FUKiBwVGV4dEFkdmFuY2VYLCBGWF9GTE9BVCogcFRleHRBZHZhbmNlWSwgRlhfRkxPQVQgaG9yel9zY2FsZSwgaW50IGxldmVsKQ0KLXsNCi0gICAgRlhfRkxPQVQgY3VycG9zID0gMDsNCi0gICAgRlhfRkxPQVQgbWluX3ggPSAxMDAwMCAqIDEuMGYsIG1heF94ID0gLTEwMDAwICogMS4wZiwgbWluX3kgPSAxMDAwMCAqIDEuMGYsIG1heF95ID0gLTEwMDAwICogMS4wZjsNCi0gICAgQ1BERl9Gb250KiBwRm9udCA9IG1fVGV4dFN0YXRlLkdldEZvbnQoKTsNCi0gICAgRlhfQk9PTCBiVmVydFdyaXRpbmcgPSBGQUxTRTsNCi0gICAgQ1BERl9DSURGb250KiBwQ0lERm9udCA9IHBGb250LT5HZXRDSURGb250KCk7DQotICAgIGlmIChwQ0lERm9udCkgew0KLSAgICAgICAgYlZlcnRXcml0aW5nID0gcENJREZvbnQtPklzVmVydFdyaXRpbmcoKTsNCi0gICAgfQ0KLSAgICBGWF9GTE9BVCBmb250c2l6ZSA9IG1fVGV4dFN0YXRlLkdldEZvbnRTaXplKCk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9uQ2hhcnM7IGkgKyspIHsNCi0gICAgICAgIEZYX0RXT1JEIGNoYXJjb2RlID0gbV9uQ2hhcnMgPT0gMSA/IChGWF9EV09SRCkoRlhfVUlOVFBUUiltX3BDaGFyQ29kZXMgOiBtX3BDaGFyQ29kZXNbaV07DQotICAgICAgICBpZiAoY2hhcmNvZGUgPT0gKEZYX0RXT1JEKSAtIDEpIHsNCi0gICAgICAgICAgICBjdXJwb3MgLT0gRlhTWVNfTXVsKG1fcENoYXJQb3NbaSAtIDFdLCBmb250c2l6ZSkgLyAxMDAwOw0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGkpIHsNCi0gICAgICAgICAgICBtX3BDaGFyUG9zW2kgLSAxXSA9IGN1cnBvczsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX1JFQ1QgY2hhcl9yZWN0Ow0KLSAgICAgICAgcEZvbnQtPkdldENoYXJCQm94KGNoYXJjb2RlLCBjaGFyX3JlY3QsIGxldmVsKTsNCi0gICAgICAgIEZYX0ZMT0FUIGNoYXJ3aWR0aDsNCi0gICAgICAgIGlmICghYlZlcnRXcml0aW5nKSB7DQotICAgICAgICAgICAgaWYgKG1pbl95ID4gY2hhcl9yZWN0LnRvcCkgew0KLSAgICAgICAgICAgICAgICBtaW5feSA9IChGWF9GTE9BVCljaGFyX3JlY3QudG9wOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobWF4X3kgPCBjaGFyX3JlY3QudG9wKSB7DQotICAgICAgICAgICAgICAgIG1heF95ID0gKEZYX0ZMT0FUKWNoYXJfcmVjdC50b3A7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChtaW5feSA+IGNoYXJfcmVjdC5ib3R0b20pIHsNCi0gICAgICAgICAgICAgICAgbWluX3kgPSAoRlhfRkxPQVQpY2hhcl9yZWN0LmJvdHRvbTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKG1heF95IDwgY2hhcl9yZWN0LmJvdHRvbSkgew0KLSAgICAgICAgICAgICAgICBtYXhfeSA9IChGWF9GTE9BVCljaGFyX3JlY3QuYm90dG9tOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9GTE9BVCBjaGFyX2xlZnQgPSBjdXJwb3MgKyBjaGFyX3JlY3QubGVmdCAqIGZvbnRzaXplIC8gMTAwMDsNCi0gICAgICAgICAgICBGWF9GTE9BVCBjaGFyX3JpZ2h0ID0gY3VycG9zICsgY2hhcl9yZWN0LnJpZ2h0ICogZm9udHNpemUgLyAxMDAwOw0KLSAgICAgICAgICAgIGlmIChtaW5feCA+IGNoYXJfbGVmdCkgew0KLSAgICAgICAgICAgICAgICBtaW5feCA9IGNoYXJfbGVmdDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKG1heF94IDwgY2hhcl9sZWZ0KSB7DQotICAgICAgICAgICAgICAgIG1heF94ID0gY2hhcl9sZWZ0Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobWluX3ggPiBjaGFyX3JpZ2h0KSB7DQotICAgICAgICAgICAgICAgIG1pbl94ID0gY2hhcl9yaWdodDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKG1heF94IDwgY2hhcl9yaWdodCkgew0KLSAgICAgICAgICAgICAgICBtYXhfeCA9IGNoYXJfcmlnaHQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNoYXJ3aWR0aCA9IHBGb250LT5HZXRDaGFyV2lkdGhGKGNoYXJjb2RlLCBsZXZlbCkgKiBmb250c2l6ZSAvIDEwMDA7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIEZYX1dPUkQgQ0lEID0gcENJREZvbnQtPkNJREZyb21DaGFyQ29kZShjaGFyY29kZSk7DQotICAgICAgICAgICAgc2hvcnQgdngsIHZ5Ow0KLSAgICAgICAgICAgIHBDSURGb250LT5HZXRWZXJ0T3JpZ2luKENJRCwgdngsIHZ5KTsNCi0gICAgICAgICAgICBjaGFyX3JlY3QubGVmdCAtPSB2eDsNCi0gICAgICAgICAgICBjaGFyX3JlY3QucmlnaHQgLT0gdng7DQotICAgICAgICAgICAgY2hhcl9yZWN0LnRvcCAtPSB2eTsNCi0gICAgICAgICAgICBjaGFyX3JlY3QuYm90dG9tIC09IHZ5Ow0KLSAgICAgICAgICAgIGlmIChtaW5feCA+IGNoYXJfcmVjdC5sZWZ0KSB7DQotICAgICAgICAgICAgICAgIG1pbl94ID0gKEZYX0ZMT0FUKWNoYXJfcmVjdC5sZWZ0Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobWF4X3ggPCBjaGFyX3JlY3QubGVmdCkgew0KLSAgICAgICAgICAgICAgICBtYXhfeCA9IChGWF9GTE9BVCljaGFyX3JlY3QubGVmdDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKG1pbl94ID4gY2hhcl9yZWN0LnJpZ2h0KSB7DQotICAgICAgICAgICAgICAgIG1pbl94ID0gKEZYX0ZMT0FUKWNoYXJfcmVjdC5yaWdodDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKG1heF94IDwgY2hhcl9yZWN0LnJpZ2h0KSB7DQotICAgICAgICAgICAgICAgIG1heF94ID0gKEZYX0ZMT0FUKWNoYXJfcmVjdC5yaWdodDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgRlhfRkxPQVQgY2hhcl90b3AgPSBjdXJwb3MgKyBjaGFyX3JlY3QudG9wICogZm9udHNpemUgLyAxMDAwOw0KLSAgICAgICAgICAgIEZYX0ZMT0FUIGNoYXJfYm90dG9tID0gY3VycG9zICsgY2hhcl9yZWN0LmJvdHRvbSAqIGZvbnRzaXplIC8gMTAwMDsNCi0gICAgICAgICAgICBpZiAobWluX3kgPiBjaGFyX3RvcCkgew0KLSAgICAgICAgICAgICAgICBtaW5feSA9IGNoYXJfdG9wOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobWF4X3kgPCBjaGFyX3RvcCkgew0KLSAgICAgICAgICAgICAgICBtYXhfeSA9IGNoYXJfdG9wOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobWluX3kgPiBjaGFyX2JvdHRvbSkgew0KLSAgICAgICAgICAgICAgICBtaW5feSA9IGNoYXJfYm90dG9tOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobWF4X3kgPCBjaGFyX2JvdHRvbSkgew0KLSAgICAgICAgICAgICAgICBtYXhfeSA9IGNoYXJfYm90dG9tOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjaGFyd2lkdGggPSBwQ0lERm9udC0+R2V0VmVydFdpZHRoKENJRCkgKiBmb250c2l6ZSAvIDEwMDA7DQotICAgICAgICB9DQotICAgICAgICBjdXJwb3MgKz0gY2hhcndpZHRoOw0KLSAgICAgICAgaWYgKGNoYXJjb2RlID09ICcgJyAmJiAocENJREZvbnQgPT0gTlVMTCB8fCBwQ0lERm9udC0+R2V0Q2hhclNpemUoMzIpID09IDEpKSB7DQotICAgICAgICAgICAgY3VycG9zICs9IG1fVGV4dFN0YXRlLkdldE9iamVjdCgpLT5tX1dvcmRTcGFjZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGN1cnBvcyArPSBtX1RleHRTdGF0ZS5HZXRPYmplY3QoKS0+bV9DaGFyU3BhY2U7DQotICAgIH0NCi0gICAgaWYgKGJWZXJ0V3JpdGluZykgew0KLSAgICAgICAgaWYgKHBUZXh0QWR2YW5jZVgpIHsNCi0gICAgICAgICAgICAqcFRleHRBZHZhbmNlWCA9IDA7DQotICAgICAgICB9DQotICAgICAgICBpZiAocFRleHRBZHZhbmNlWSkgew0KLSAgICAgICAgICAgICpwVGV4dEFkdmFuY2VZID0gY3VycG9zOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbWluX3ggPSBtaW5feCAqIGZvbnRzaXplIC8gMTAwMDsNCi0gICAgICAgIG1heF94ID0gbWF4X3ggKiBmb250c2l6ZSAvIDEwMDA7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZiAocFRleHRBZHZhbmNlWCkgew0KLSAgICAgICAgICAgICpwVGV4dEFkdmFuY2VYID0gRlhTWVNfTXVsKGN1cnBvcywgaG9yel9zY2FsZSk7DQotICAgICAgICB9DQotICAgICAgICBpZiAocFRleHRBZHZhbmNlWSkgew0KLSAgICAgICAgICAgICpwVGV4dEFkdmFuY2VZID0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIG1pbl95ID0gbWluX3kgKiBmb250c2l6ZSAvIDEwMDA7DQotICAgICAgICBtYXhfeSA9IG1heF95ICogZm9udHNpemUgLyAxMDAwOw0KLSAgICB9DQotICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4Ow0KLSAgICBHZXRUZXh0TWF0cml4KCZtYXRyaXgpOw0KLSAgICBtX0xlZnQgPSBtaW5feDsNCi0gICAgbV9SaWdodCA9IG1heF94Ow0KLSAgICBtX0JvdHRvbSA9IG1pbl95Ow0KLSAgICBtX1RvcCA9IG1heF95Ow0KLSAgICBtYXRyaXguVHJhbnNmb3JtUmVjdChtX0xlZnQsIG1fUmlnaHQsIG1fVG9wLCBtX0JvdHRvbSk7DQotICAgIGludCB0ZXh0bW9kZSA9IG1fVGV4dFN0YXRlLkdldE9iamVjdCgpLT5tX1RleHRNb2RlOw0KLSAgICBpZiAodGV4dG1vZGUgPT0gMSB8fCB0ZXh0bW9kZSA9PSAyIHx8IHRleHRtb2RlID09IDUgfHwgdGV4dG1vZGUgPT0gNikgew0KLSAgICAgICAgRlhfRkxPQVQgaGFsZl93aWR0aCA9IG1fR3JhcGhTdGF0ZS5HZXRPYmplY3QoKS0+bV9MaW5lV2lkdGggLyAyOw0KLSAgICAgICAgbV9MZWZ0IC09IGhhbGZfd2lkdGg7DQotICAgICAgICBtX1JpZ2h0ICs9IGhhbGZfd2lkdGg7DQotICAgICAgICBtX1RvcCArPSBoYWxmX3dpZHRoOw0KLSAgICAgICAgbV9Cb3R0b20gLT0gaGFsZl93aWR0aDsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfVGV4dE9iamVjdDo6Q2FsY0NoYXJQb3MoRlhfRkxPQVQqIHBQb3NBcnJheSkgY29uc3QNCi17DQotICAgIEZYX0ZMT0FUIGN1cnBvcyA9IDA7DQotICAgIGludCBjb3VudCA9IDA7DQotICAgIENQREZfRm9udCogcEZvbnQgPSBtX1RleHRTdGF0ZS5HZXRGb250KCk7DQotICAgIEZYX0JPT0wgYlZlcnRXcml0aW5nID0gRkFMU0U7DQotICAgIENQREZfQ0lERm9udCogcENJREZvbnQgPSBwRm9udC0+R2V0Q0lERm9udCgpOw0KLSAgICBpZiAocENJREZvbnQpIHsNCi0gICAgICAgIGJWZXJ0V3JpdGluZyA9IHBDSURGb250LT5Jc1ZlcnRXcml0aW5nKCk7DQotICAgIH0NCi0gICAgRlhfRkxPQVQgZm9udHNpemUgPSBtX1RleHRTdGF0ZS5HZXRGb250U2l6ZSgpOw0KLSAgICBpbnQgaW5kZXggPSAwOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbkNoYXJzOyBpICsrKSB7DQotICAgICAgICBGWF9EV09SRCBjaGFyY29kZSA9IG1fbkNoYXJzID09IDEgPyAoRlhfRFdPUkQpKEZYX1VJTlRQVFIpbV9wQ2hhckNvZGVzIDogbV9wQ2hhckNvZGVzW2ldOw0KLSAgICAgICAgaWYgKGNoYXJjb2RlID09IChGWF9EV09SRCkgLSAxKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBwUG9zQXJyYXlbaW5kZXgrK10gPSBpID8gbV9wQ2hhclBvc1tpIC0gMV0gOiAwOw0KLSAgICAgICAgRlhfRkxPQVQgY2hhcndpZHRoOw0KLSAgICAgICAgaWYgKGJWZXJ0V3JpdGluZykgew0KLSAgICAgICAgICAgIEZYX1dPUkQgQ0lEID0gcENJREZvbnQtPkNJREZyb21DaGFyQ29kZShjaGFyY29kZSk7DQotICAgICAgICAgICAgY2hhcndpZHRoID0gcENJREZvbnQtPkdldFZlcnRXaWR0aChDSUQpICogZm9udHNpemUgLyAxMDAwOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBjaGFyd2lkdGggPSBwRm9udC0+R2V0Q2hhcldpZHRoRihjaGFyY29kZSkgKiBmb250c2l6ZSAvIDEwMDA7DQotICAgICAgICB9DQotICAgICAgICBwUG9zQXJyYXlbaW5kZXhdID0gcFBvc0FycmF5W2luZGV4IC0gMV0gKyBjaGFyd2lkdGg7DQotICAgICAgICBpbmRleCsrOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9UZXh0T2JqZWN0OjpUcmFuc2Zvcm0oY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCYgbWF0cml4KQ0KLXsNCi0gICAgbV9UZXh0U3RhdGUuR2V0TW9kaWZ5KCk7DQotICAgIENGWF9BZmZpbmVNYXRyaXggdGV4dF9tYXRyaXg7DQotICAgIEdldFRleHRNYXRyaXgoJnRleHRfbWF0cml4KTsNCi0gICAgdGV4dF9tYXRyaXguQ29uY2F0KG1hdHJpeCk7DQotICAgIEZYX0ZMT0FUKiBwVGV4dE1hdHJpeCA9IG1fVGV4dFN0YXRlLkdldE1hdHJpeCgpOw0KLSAgICBwVGV4dE1hdHJpeFswXSA9IHRleHRfbWF0cml4LkdldEEoKTsNCi0gICAgcFRleHRNYXRyaXhbMV0gPSB0ZXh0X21hdHJpeC5HZXRDKCk7DQotICAgIHBUZXh0TWF0cml4WzJdID0gdGV4dF9tYXRyaXguR2V0QigpOw0KLSAgICBwVGV4dE1hdHJpeFszXSA9IHRleHRfbWF0cml4LkdldEQoKTsNCi0gICAgbV9Qb3NYID0gdGV4dF9tYXRyaXguR2V0RSgpOw0KLSAgICBtX1Bvc1kgPSB0ZXh0X21hdHJpeC5HZXRGKCk7DQotICAgIENhbGNQb3NpdGlvbkRhdGEoTlVMTCwgTlVMTCwgMCk7DQotfQ0KLXZvaWQgQ1BERl9UZXh0T2JqZWN0OjpTZXRQb3NpdGlvbihGWF9GTE9BVCB4LCBGWF9GTE9BVCB5KQ0KLXsNCi0gICAgRlhfRkxPQVQgZHggPSB4IC0gbV9Qb3NYOw0KLSAgICBGWF9GTE9BVCBkeSA9IHkgLSBtX1Bvc1k7DQotICAgIG1fUG9zWCA9IHg7DQotICAgIG1fUG9zWSA9IHk7DQotICAgIG1fTGVmdCArPSBkeDsNCi0gICAgbV9SaWdodCArPSBkeDsNCi0gICAgbV9Ub3AgKz0gZHk7DQotICAgIG1fQm90dG9tICs9IGR5Ow0KLX0NCi12b2lkIENQREZfVGV4dE9iamVjdDo6U2V0RGF0YShpbnQgbkNoYXJzLCBGWF9EV09SRCogcENoYXJDb2RlcywgRlhfRkxPQVQqIHBDaGFyUG9zLCBGWF9GTE9BVCB4LCBGWF9GTE9BVCB5KQ0KLXsNCi0gICAgQVNTRVJUKG1fbkNoYXJzID09IDApOw0KLSAgICBtX25DaGFycyA9IG5DaGFyczsNCi0gICAgbV9Qb3NYID0geDsNCi0gICAgbV9Qb3NZID0geTsNCi0gICAgaWYgKG5DaGFycyA9PSAwKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKG5DaGFycyA9PSAxKSB7DQotICAgICAgICBtX3BDaGFyQ29kZXMgPSAoRlhfRFdPUkQqKShGWF9VSU5UUFRSKSAqIHBDaGFyQ29kZXM7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX3BDaGFyQ29kZXMgPSBGWF9BbGxvYyhGWF9EV09SRCwgbkNoYXJzKTsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKG1fcENoYXJDb2RlcywgcENoYXJDb2Rlcywgc2l6ZW9mKEZYX0RXT1JEKSpuQ2hhcnMpOw0KLSAgICAgICAgbV9wQ2hhclBvcyA9IEZYX0FsbG9jKEZYX0ZMT0FULCBuQ2hhcnMgLSAxKTsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKG1fcENoYXJQb3MsIHBDaGFyUG9zLCBzaXplb2YoRlhfRkxPQVQpICogKG5DaGFycyAtIDEpKTsNCi0gICAgfQ0KLSAgICBSZWNhbGNQb3NpdGlvbkRhdGEoKTsNCi19DQotdm9pZCBDUERGX1RleHRPYmplY3Q6OlNldFRleHRTdGF0ZShDUERGX1RleHRTdGF0ZSBUZXh0U3RhdGUpDQotew0KLSAgICBtX1RleHRTdGF0ZSA9IFRleHRTdGF0ZTsNCi0gICAgQ2FsY1Bvc2l0aW9uRGF0YShOVUxMLCBOVUxMLCAwKTsNCi19DQotQ1BERl9TaGFkaW5nT2JqZWN0OjpDUERGX1NoYWRpbmdPYmplY3QoKQ0KLXsNCi0gICAgbV9wU2hhZGluZyA9IE5VTEw7DQotICAgIG1fVHlwZSA9IFBERlBBR0VfU0hBRElORzsNCi19DQotQ1BERl9TaGFkaW5nT2JqZWN0Ojp+Q1BERl9TaGFkaW5nT2JqZWN0KCkNCi17DQotICAgIENQREZfU2hhZGluZ1BhdHRlcm4qIHBTaGFkaW5nID0gbV9wU2hhZGluZzsNCi0gICAgaWYgKHBTaGFkaW5nICYmIHBTaGFkaW5nLT5tX3BEb2N1bWVudCkgew0KLSAgICAgICAgcFNoYWRpbmctPm1fcERvY3VtZW50LT5HZXRQYWdlRGF0YSgpLT5SZWxlYXNlUGF0dGVybihwU2hhZGluZy0+bV9wU2hhZGluZ09iaik7DQotICAgIH0NCi19DQotdm9pZCBDUERGX1NoYWRpbmdPYmplY3Q6OkNvcHlEYXRhKGNvbnN0IENQREZfUGFnZU9iamVjdCogcFNyYykNCi17DQotICAgIENQREZfU2hhZGluZ09iamVjdCogcFNyY09iaiA9IChDUERGX1NoYWRpbmdPYmplY3QqKXBTcmM7DQotICAgIG1fcFNoYWRpbmcgPSBwU3JjT2JqLT5tX3BTaGFkaW5nOw0KLSAgICBpZiAobV9wU2hhZGluZyAmJiBtX3BTaGFkaW5nLT5tX3BEb2N1bWVudCkgew0KLSAgICAgICAgQ1BERl9Eb2NQYWdlRGF0YSogcERvY1BhZ2VEYXRhID0gbV9wU2hhZGluZy0+bV9wRG9jdW1lbnQtPkdldFBhZ2VEYXRhKCk7DQotICAgICAgICBtX3BTaGFkaW5nID0gKENQREZfU2hhZGluZ1BhdHRlcm4qKXBEb2NQYWdlRGF0YS0+R2V0UGF0dGVybihtX3BTaGFkaW5nLT5tX3BTaGFkaW5nT2JqLCBtX3BTaGFkaW5nLT5tX2JTaGFkaW5nT2JqLCAmbV9wU2hhZGluZy0+bV9QYXJlbnRNYXRyaXgpOw0KLSAgICB9DQotICAgIG1fTWF0cml4ID0gcFNyY09iai0+bV9NYXRyaXg7DQotfQ0KLXZvaWQgQ1BERl9TaGFkaW5nT2JqZWN0OjpUcmFuc2Zvcm0oY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCYgbWF0cml4KQ0KLXsNCi0gICAgaWYgKCFtX0NsaXBQYXRoLklzTnVsbCgpKSB7DQotICAgICAgICBtX0NsaXBQYXRoLkdldE1vZGlmeSgpOw0KLSAgICAgICAgbV9DbGlwUGF0aC5UcmFuc2Zvcm0obWF0cml4KTsNCi0gICAgfQ0KLSAgICBtX01hdHJpeC5Db25jYXQobWF0cml4KTsNCi0gICAgaWYgKCFtX0NsaXBQYXRoLklzTnVsbCgpKSB7DQotICAgICAgICBDYWxjQm91bmRpbmdCb3goKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1hdHJpeC5UcmFuc2Zvcm1SZWN0KG1fTGVmdCwgbV9SaWdodCwgbV9Ub3AsIG1fQm90dG9tKTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfU2hhZGluZ09iamVjdDo6Q2FsY0JvdW5kaW5nQm94KCkNCi17DQotICAgIGlmIChtX0NsaXBQYXRoLklzTnVsbCgpKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ0ZYX0Zsb2F0UmVjdCByZWN0ID0gbV9DbGlwUGF0aC5HZXRDbGlwQm94KCk7DQotICAgIG1fTGVmdCA9IHJlY3QubGVmdDsNCi0gICAgbV9Cb3R0b20gPSByZWN0LmJvdHRvbTsNCi0gICAgbV9SaWdodCA9IHJlY3QucmlnaHQ7DQotICAgIG1fVG9wID0gcmVjdC50b3A7DQotfQ0KLUNQREZfRm9ybU9iamVjdDo6fkNQREZfRm9ybU9iamVjdCgpDQotew0KLSAgICBpZiAobV9wRm9ybSkgew0KLSAgICAgICAgZGVsZXRlIG1fcEZvcm07DQotICAgIH0NCi19DQotdm9pZCBDUERGX0Zvcm1PYmplY3Q6OlRyYW5zZm9ybShjb25zdCBDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpDQotew0KLSAgICBtX0Zvcm1NYXRyaXguQ29uY2F0KG1hdHJpeCk7DQotICAgIENhbGNCb3VuZGluZ0JveCgpOw0KLX0NCi12b2lkIENQREZfRm9ybU9iamVjdDo6Q29weURhdGEoY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwU3JjKQ0KLXsNCi0gICAgY29uc3QgQ1BERl9Gb3JtT2JqZWN0KiBwU3JjT2JqID0gKGNvbnN0IENQREZfRm9ybU9iamVjdCopcFNyYzsNCi0gICAgaWYgKG1fcEZvcm0pIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BGb3JtOw0KLSAgICB9DQotICAgIG1fcEZvcm0gPSBwU3JjT2JqLT5tX3BGb3JtLT5DbG9uZSgpOw0KLSAgICBtX0Zvcm1NYXRyaXggPSBwU3JjT2JqLT5tX0Zvcm1NYXRyaXg7DQotfQ0KLXZvaWQgQ1BERl9Gb3JtT2JqZWN0OjpDYWxjQm91bmRpbmdCb3goKQ0KLXsNCi0gICAgQ0ZYX0Zsb2F0UmVjdCBmb3JtX3JlY3QgPSBtX3BGb3JtLT5DYWxjQm91bmRpbmdCb3goKTsNCi0gICAgZm9ybV9yZWN0LlRyYW5zZm9ybSgmbV9Gb3JtTWF0cml4KTsNCi0gICAgbV9MZWZ0ID0gZm9ybV9yZWN0LmxlZnQ7DQotICAgIG1fQm90dG9tID0gZm9ybV9yZWN0LmJvdHRvbTsNCi0gICAgbV9SaWdodCA9IGZvcm1fcmVjdC5yaWdodDsNCi0gICAgbV9Ub3AgPSBmb3JtX3JlY3QudG9wOw0KLX0NCi1DUERGX1BhZ2VPYmplY3RzOjpDUERGX1BhZ2VPYmplY3RzKEZYX0JPT0wgYlJlbGVhc2VNZW1iZXJzKSA6IG1fT2JqZWN0TGlzdCgxMjgpDQotew0KLSAgICBtX2JCYWNrZ3JvdW5kQWxwaGFOZWVkZWQgPSBGQUxTRTsNCi0gICAgbV9iUmVsZWFzZU1lbWJlcnMgPSBiUmVsZWFzZU1lbWJlcnM7DQotICAgIG1fUGFyc2VTdGF0ZSA9IFBERl9DT05URU5UX05PVF9QQVJTRUQ7DQotICAgIG1fcFBhcnNlciA9IE5VTEw7DQotICAgIG1fcEZvcm1TdHJlYW0gPSBOVUxMOw0KLSAgICBtX3BSZXNvdXJjZXMgPSBOVUxMOw0KLX0NCi1DUERGX1BhZ2VPYmplY3RzOjp+Q1BERl9QYWdlT2JqZWN0cygpDQotew0KLSAgICBpZiAobV9wUGFyc2VyKSB7DQotICAgICAgICBkZWxldGUgbV9wUGFyc2VyOw0KLSAgICB9DQotICAgIGlmICghbV9iUmVsZWFzZU1lbWJlcnMpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9QT1NJVElPTiBwb3MgPSBtX09iamVjdExpc3QuR2V0SGVhZFBvc2l0aW9uKCk7DQotICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgIENQREZfUGFnZU9iamVjdCogcFBhZ2VPYmogPSAoQ1BERl9QYWdlT2JqZWN0KiltX09iamVjdExpc3QuR2V0TmV4dChwb3MpOw0KLSAgICAgICAgaWYgKCFwUGFnZU9iaikgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcFBhZ2VPYmotPlJlbGVhc2UoKTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfUGFnZU9iamVjdHM6OkNvbnRpbnVlUGFyc2UoSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBpZiAobV9wUGFyc2VyID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX3BQYXJzZXItPkNvbnRpbnVlKHBQYXVzZSk7DQotICAgIGlmIChtX3BQYXJzZXItPkdldFN0YXR1cygpID09IENQREZfQ29udGVudFBhcnNlcjo6RG9uZSkgew0KLSAgICAgICAgbV9QYXJzZVN0YXRlID0gUERGX0NPTlRFTlRfUEFSU0VEOw0KLSAgICAgICAgZGVsZXRlIG1fcFBhcnNlcjsNCi0gICAgICAgIG1fcFBhcnNlciA9IE5VTEw7DQotICAgIH0NCi19DQotaW50IENQREZfUGFnZU9iamVjdHM6OkVzdGltYXRlUGFyc2VQcm9ncmVzcygpIGNvbnN0DQotew0KLSAgICBpZiAobV9wUGFyc2VyID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBtX1BhcnNlU3RhdGUgPT0gUERGX0NPTlRFTlRfUEFSU0VEID8gMTAwIDogMDsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wUGFyc2VyLT5Fc3RpbWF0ZVByb2dyZXNzKCk7DQotfQ0KLUZYX1BPU0lUSU9OIENQREZfUGFnZU9iamVjdHM6Okluc2VydE9iamVjdChGWF9QT1NJVElPTiBwb3NJbnNlcnRBZnRlciwgQ1BERl9QYWdlT2JqZWN0KiBwTmV3T2JqZWN0KQ0KLXsNCi0gICAgaWYgKHBvc0luc2VydEFmdGVyID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBtX09iamVjdExpc3QuQWRkSGVhZChwTmV3T2JqZWN0KTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHJldHVybiBtX09iamVjdExpc3QuSW5zZXJ0QWZ0ZXIocG9zSW5zZXJ0QWZ0ZXIsIHBOZXdPYmplY3QpOw0KLSAgICB9DQotfQ0KLWludCBDUERGX1BhZ2VPYmplY3RzOjpHZXRPYmplY3RJbmRleChDUERGX1BhZ2VPYmplY3QqIHBPYmopIGNvbnN0DQotew0KLSAgICBpbnQgaW5kZXggPSAwOw0KLSAgICBGWF9QT1NJVElPTiBwb3MgPSBtX09iamVjdExpc3QuR2V0SGVhZFBvc2l0aW9uKCk7DQotICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgIENQREZfUGFnZU9iamVjdCogcFRoaXNPYmogPSAoQ1BERl9QYWdlT2JqZWN0KiltX09iamVjdExpc3QuR2V0TmV4dChwb3MpOw0KLSAgICAgICAgaWYgKHBUaGlzT2JqID09IHBPYmopIHsNCi0gICAgICAgICAgICByZXR1cm4gaW5kZXg7DQotICAgICAgICB9DQotICAgICAgICBpbmRleCArKzsNCi0gICAgfQ0KLSAgICByZXR1cm4gLTE7DQotfQ0KLUNQREZfUGFnZU9iamVjdCogQ1BERl9QYWdlT2JqZWN0czo6R2V0T2JqZWN0QnlJbmRleChpbnQgaW5kZXgpIGNvbnN0DQotew0KLSAgICBGWF9QT1NJVElPTiBwb3MgPSBtX09iamVjdExpc3QuRmluZEluZGV4KGluZGV4KTsNCi0gICAgaWYgKHBvcyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gKENQREZfUGFnZU9iamVjdCopbV9PYmplY3RMaXN0LkdldEF0KHBvcyk7DQotfQ0KLXZvaWQgQ1BERl9QYWdlT2JqZWN0czo6VHJhbnNmb3JtKGNvbnN0IENGWF9BZmZpbmVNYXRyaXgmIG1hdHJpeCkNCi17DQotICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fT2JqZWN0TGlzdC5HZXRIZWFkUG9zaXRpb24oKTsNCi0gICAgd2hpbGUgKHBvcykgew0KLSAgICAgICAgQ1BERl9QYWdlT2JqZWN0KiBwT2JqID0gKENQREZfUGFnZU9iamVjdCopbV9PYmplY3RMaXN0LkdldE5leHQocG9zKTsNCi0gICAgICAgIHBPYmotPlRyYW5zZm9ybShtYXRyaXgpOw0KLSAgICB9DQotfQ0KLUNGWF9GbG9hdFJlY3QgQ1BERl9QYWdlT2JqZWN0czo6Q2FsY0JvdW5kaW5nQm94KCkgY29uc3QNCi17DQotICAgIGlmIChtX09iamVjdExpc3QuR2V0Q291bnQoKSA9PSAwKSB7DQotICAgICAgICByZXR1cm4gQ0ZYX0Zsb2F0UmVjdCgwLCAwLCAwLCAwKTsNCi0gICAgfQ0KLSAgICBGWF9GTE9BVCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b207DQotICAgIGxlZnQgPSBib3R0b20gPSAxMDAwMDAwICogMS4wZjsNCi0gICAgcmlnaHQgPSB0b3AgPSAtMTAwMDAwMCAqIDEuMGY7DQotICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fT2JqZWN0TGlzdC5HZXRIZWFkUG9zaXRpb24oKTsNCi0gICAgd2hpbGUgKHBvcykgew0KLSAgICAgICAgQ1BERl9QYWdlT2JqZWN0KiBwT2JqID0gKENQREZfUGFnZU9iamVjdCopbV9PYmplY3RMaXN0LkdldE5leHQocG9zKTsNCi0gICAgICAgIGlmIChsZWZ0ID4gcE9iai0+bV9MZWZ0KSB7DQotICAgICAgICAgICAgbGVmdCA9IHBPYmotPm1fTGVmdDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChyaWdodCA8IHBPYmotPm1fUmlnaHQpIHsNCi0gICAgICAgICAgICByaWdodCA9IHBPYmotPm1fUmlnaHQ7DQotICAgICAgICB9DQotICAgICAgICBpZiAodG9wIDwgcE9iai0+bV9Ub3ApIHsNCi0gICAgICAgICAgICB0b3AgPSBwT2JqLT5tX1RvcDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChib3R0b20gPiBwT2JqLT5tX0JvdHRvbSkgew0KLSAgICAgICAgICAgIGJvdHRvbSA9IHBPYmotPm1fQm90dG9tOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBDRlhfRmxvYXRSZWN0KGxlZnQsIGJvdHRvbSwgcmlnaHQsIHRvcCk7DQotfQ0KLXZvaWQgQ1BERl9QYWdlT2JqZWN0czo6TG9hZFRyYW5zSW5mbygpDQotew0KLSAgICBpZiAobV9wRm9ybURpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcEdyb3VwID0gbV9wRm9ybURpY3QtPkdldERpY3QoRlhfQlNUUkMoIkdyb3VwIikpOw0KLSAgICBpZiAocEdyb3VwID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAocEdyb3VwLT5HZXRTdHJpbmcoRlhfQlNUUkMoIlMiKSkgIT0gRlhfQlNUUkMoIlRyYW5zcGFyZW5jeSIpKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbV9UcmFuc3BhcmVuY3kgfD0gUERGVFJBTlNfR1JPVVA7DQotICAgIGlmIChwR3JvdXAtPkdldEludGVnZXIoRlhfQlNUUkMoIkkiKSkpIHsNCi0gICAgICAgIG1fVHJhbnNwYXJlbmN5IHw9IFBERlRSQU5TX0lTT0xBVEVEOw0KLSAgICB9DQotICAgIGlmIChwR3JvdXAtPkdldEludGVnZXIoRlhfQlNUUkMoIksiKSkpIHsNCi0gICAgICAgIG1fVHJhbnNwYXJlbmN5IHw9IFBERlRSQU5TX0tOT0NLT1VUOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9QYWdlT2JqZWN0czo6Q2xlYXJDYWNoZU9iamVjdHMoKQ0KLXsNCi0gICAgbV9QYXJzZVN0YXRlID0gUERGX0NPTlRFTlRfTk9UX1BBUlNFRDsNCi0gICAgaWYgKG1fcFBhcnNlcikgew0KLSAgICAgICAgZGVsZXRlIG1fcFBhcnNlcjsNCi0gICAgfQ0KLSAgICBtX3BQYXJzZXIgPSBOVUxMOw0KLSAgICBpZiAobV9iUmVsZWFzZU1lbWJlcnMpIHsNCi0gICAgICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fT2JqZWN0TGlzdC5HZXRIZWFkUG9zaXRpb24oKTsNCi0gICAgICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgICAgICBDUERGX1BhZ2VPYmplY3QqIHBQYWdlT2JqID0gKENQREZfUGFnZU9iamVjdCopbV9PYmplY3RMaXN0LkdldE5leHQocG9zKTsNCi0gICAgICAgICAgICBpZiAoIXBQYWdlT2JqKSB7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwUGFnZU9iai0+UmVsZWFzZSgpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fT2JqZWN0TGlzdC5SZW1vdmVBbGwoKTsNCi19DQotQ1BERl9QYWdlOjpDUERGX1BhZ2UoKQ0KLXsNCi0gICAgbV9wUGFnZVJlbmRlciA9IE5VTEw7DQotfQ0KLXZvaWQgQ1BERl9QYWdlOjpMb2FkKENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QsIEZYX0JPT0wgYlBhZ2VDYWNoZSkNCi17DQotICAgIG1fcERvY3VtZW50ID0gKENQREZfRG9jdW1lbnQqKXBEb2N1bWVudDsNCi0gICAgbV9wRm9ybURpY3QgPSBwUGFnZURpY3Q7DQotICAgIGlmIChiUGFnZUNhY2hlKSB7DQotICAgICAgICBtX3BQYWdlUmVuZGVyID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRSZW5kZXJNb2R1bGUoKS0+Q3JlYXRlUGFnZUNhY2hlKHRoaXMpOw0KLSAgICB9DQotICAgIGlmIChwUGFnZURpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgbV9QYWdlV2lkdGggPSBtX1BhZ2VIZWlnaHQgPSAxMDAgKiAxLjBmOw0KLSAgICAgICAgbV9wUGFnZVJlc291cmNlcyA9IG1fcFJlc291cmNlcyA9IE5VTEw7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbV9wUmVzb3VyY2VzID0gR2V0UGFnZUF0dHIoRlhfQlNUUkMoIlJlc291cmNlcyIpKS0+R2V0RGljdCgpOw0KLSAgICBtX3BQYWdlUmVzb3VyY2VzID0gbV9wUmVzb3VyY2VzOw0KLSAgICBDUERGX09iamVjdCogcFJvdGF0ZSA9IEdldFBhZ2VBdHRyKEZYX0JTVFJDKCJSb3RhdGUiKSk7DQotICAgIGludCByb3RhdGUgPSAwOw0KLSAgICBpZiAocFJvdGF0ZSkgew0KLSAgICAgICAgcm90YXRlID0gcFJvdGF0ZS0+R2V0SW50ZWdlcigpIC8gOTAgJSA0Ow0KLSAgICB9DQotICAgIGlmIChyb3RhdGUgPCAwKSB7DQotICAgICAgICByb3RhdGUgKz0gNDsNCi0gICAgfQ0KLSAgICBDUERGX0FycmF5KiBwTWVkaWFCb3gsICpwQ3JvcEJveDsNCi0gICAgcE1lZGlhQm94ID0gKENQREZfQXJyYXkqKUdldFBhZ2VBdHRyKEZYX0JTVFJDKCJNZWRpYUJveCIpKTsNCi0gICAgQ0ZYX0Zsb2F0UmVjdCBtZWRpYWJveDsNCi0gICAgaWYgKHBNZWRpYUJveCkgew0KLSAgICAgICAgbWVkaWFib3ggPSBwTWVkaWFCb3gtPkdldFJlY3QoKTsNCi0gICAgICAgIG1lZGlhYm94Lk5vcm1hbGl6ZSgpOw0KLSAgICB9DQotICAgIGlmIChtZWRpYWJveC5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIG1lZGlhYm94ID0gQ0ZYX0Zsb2F0UmVjdCgwLCAwLCA2MTIsIDc5Mik7DQotICAgIH0NCi0gICAgcENyb3BCb3ggPSAoQ1BERl9BcnJheSopR2V0UGFnZUF0dHIoRlhfQlNUUkMoIkNyb3BCb3giKSk7DQotICAgIGlmIChwQ3JvcEJveCkgew0KLSAgICAgICAgbV9CQm94ID0gcENyb3BCb3gtPkdldFJlY3QoKTsNCi0gICAgICAgIG1fQkJveC5Ob3JtYWxpemUoKTsNCi0gICAgfQ0KLSAgICBpZiAobV9CQm94LklzRW1wdHkoKSkgew0KLSAgICAgICAgbV9CQm94ID0gbWVkaWFib3g7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX0JCb3guSW50ZXJzZWN0KG1lZGlhYm94KTsNCi0gICAgfQ0KLSAgICBpZiAocm90YXRlICUgMikgew0KLSAgICAgICAgbV9QYWdlSGVpZ2h0ID0gbV9CQm94LnJpZ2h0IC0gbV9CQm94LmxlZnQ7DQotICAgICAgICBtX1BhZ2VXaWR0aCA9IG1fQkJveC50b3AgLSBtX0JCb3guYm90dG9tOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9QYWdlV2lkdGggPSBtX0JCb3gucmlnaHQgLSBtX0JCb3gubGVmdDsNCi0gICAgICAgIG1fUGFnZUhlaWdodCA9IG1fQkJveC50b3AgLSBtX0JCb3guYm90dG9tOw0KLSAgICB9DQotICAgIHN3aXRjaCAocm90YXRlKSB7DQotICAgICAgICBjYXNlIDA6DQotICAgICAgICAgICAgbV9QYWdlTWF0cml4LlNldCgxLjBmLCAwLCAwLCAxLjBmLCAtbV9CQm94LmxlZnQsIC1tX0JCb3guYm90dG9tKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgMToNCi0gICAgICAgICAgICBtX1BhZ2VNYXRyaXguU2V0KDAsIC0xLjBmLCAxLjBmLCAwLCAtbV9CQm94LmJvdHRvbSwgbV9CQm94LnJpZ2h0KTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgMjoNCi0gICAgICAgICAgICBtX1BhZ2VNYXRyaXguU2V0KC0xLjBmLCAwLCAwLCAtMS4wZiwgbV9CQm94LnJpZ2h0LCBtX0JCb3gudG9wKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgMzoNCi0gICAgICAgICAgICBtX1BhZ2VNYXRyaXguU2V0KDAsIDEuMGYsIC0xLjBmLCAwLCBtX0JCb3gudG9wLCAtbV9CQm94LmxlZnQpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICB9DQotICAgIG1fVHJhbnNwYXJlbmN5ID0gUERGVFJBTlNfSVNPTEFURUQ7DQotICAgIExvYWRUcmFuc0luZm8oKTsNCi19DQotdm9pZCBDUERGX1BhZ2U6OlN0YXJ0UGFyc2UoQ1BERl9QYXJzZU9wdGlvbnMqIHBPcHRpb25zLCBGWF9CT09MIGJSZVBhcnNlKQ0KLXsNCi0gICAgaWYgKGJSZVBhcnNlKSB7DQotICAgICAgICBDbGVhckNhY2hlT2JqZWN0cygpOw0KLSAgICB9DQotICAgIGlmIChtX1BhcnNlU3RhdGUgPT0gUERGX0NPTlRFTlRfUEFSU0VEIHx8IG1fUGFyc2VTdGF0ZSA9PSBQREZfQ09OVEVOVF9QQVJTSU5HKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbV9wUGFyc2VyID0gRlhfTkVXIENQREZfQ29udGVudFBhcnNlcjsNCi0gICAgbV9wUGFyc2VyLT5TdGFydCh0aGlzLCBwT3B0aW9ucyk7DQotICAgIG1fUGFyc2VTdGF0ZSA9IFBERl9DT05URU5UX1BBUlNJTkc7DQotfQ0KLXZvaWQgQ1BERl9QYWdlOjpQYXJzZUNvbnRlbnQoQ1BERl9QYXJzZU9wdGlvbnMqIHBPcHRpb25zLCBGWF9CT09MIGJSZVBhcnNlKQ0KLXsNCi0gICAgU3RhcnRQYXJzZShwT3B0aW9ucywgYlJlUGFyc2UpOw0KLSAgICBDb250aW51ZVBhcnNlKE5VTEwpOw0KLX0NCi1DUERGX1BhZ2U6On5DUERGX1BhZ2UoKQ0KLXsNCi0gICAgaWYgKG1fcFBhZ2VSZW5kZXIpIHsNCi0gICAgICAgIENQREZfUmVuZGVyTW9kdWxlRGVmKiBwTW9kdWxlID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRSZW5kZXJNb2R1bGUoKTsNCi0gICAgICAgIHBNb2R1bGUtPkRlc3Ryb3lQYWdlQ2FjaGUobV9wUGFnZVJlbmRlcik7DQotICAgIH0NCi19DQotQ1BERl9PYmplY3QqIEZQREZBUElfR2V0UGFnZUF0dHIoQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QsIEZYX0JTVFIgbmFtZSkNCi17DQotICAgIGludCBsZXZlbCA9IDA7DQotICAgIHdoaWxlICgxKSB7DQotICAgICAgICBDUERGX09iamVjdCogcE9iaiA9IHBQYWdlRGljdC0+R2V0RWxlbWVudFZhbHVlKG5hbWUpOw0KLSAgICAgICAgaWYgKHBPYmopIHsNCi0gICAgICAgICAgICByZXR1cm4gcE9iajsNCi0gICAgICAgIH0NCi0gICAgICAgIENQREZfRGljdGlvbmFyeSogcFBhcmVudCA9IHBQYWdlRGljdC0+R2V0RGljdChGWF9CU1RSQygiUGFyZW50IikpOw0KLSAgICAgICAgaWYgKCFwUGFyZW50IHx8IHBQYXJlbnQgPT0gcFBhZ2VEaWN0KSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBwUGFnZURpY3QgPSBwUGFyZW50Ow0KLSAgICAgICAgbGV2ZWwgKys7DQotICAgICAgICBpZiAobGV2ZWwgPT0gMTAwMCkgew0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLUNQREZfT2JqZWN0KiBDUERGX1BhZ2U6OkdldFBhZ2VBdHRyKEZYX0JTVFIgbmFtZSkgY29uc3QNCi17DQotICAgIHJldHVybiBGUERGQVBJX0dldFBhZ2VBdHRyKG1fcEZvcm1EaWN0LCBuYW1lKTsNCi19DQotQ1BERl9Gb3JtOjpDUERGX0Zvcm0oQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZVJlc291cmNlcywgQ1BERl9TdHJlYW0qIHBGb3JtU3RyZWFtLCBDUERGX0RpY3Rpb25hcnkqIHBQYXJlbnRSZXNvdXJjZXMpDQotew0KLSAgICBtX3BEb2N1bWVudCA9IHBEb2M7DQotICAgIG1fcEZvcm1TdHJlYW0gPSBwRm9ybVN0cmVhbTsNCi0gICAgbV9wRm9ybURpY3QgPSBwRm9ybVN0cmVhbS0+R2V0RGljdCgpOw0KLSAgICBtX3BSZXNvdXJjZXMgPSBtX3BGb3JtRGljdC0+R2V0RGljdChGWF9CU1RSQygiUmVzb3VyY2VzIikpOw0KLSAgICBtX3BQYWdlUmVzb3VyY2VzID0gcFBhZ2VSZXNvdXJjZXM7DQotICAgIGlmIChtX3BSZXNvdXJjZXMgPT0gTlVMTCkgew0KLSAgICAgICAgbV9wUmVzb3VyY2VzID0gcFBhcmVudFJlc291cmNlczsNCi0gICAgfQ0KLSAgICBpZiAobV9wUmVzb3VyY2VzID09IE5VTEwpIHsNCi0gICAgICAgIG1fcFJlc291cmNlcyA9IHBQYWdlUmVzb3VyY2VzOw0KLSAgICB9DQotICAgIG1fVHJhbnNwYXJlbmN5ID0gMDsNCi0gICAgTG9hZFRyYW5zSW5mbygpOw0KLX0NCi1DUERGX0Zvcm06On5DUERGX0Zvcm0oKQ0KLXsNCi19DQotdm9pZCBDUERGX0Zvcm06OlN0YXJ0UGFyc2UoQ1BERl9BbGxTdGF0ZXMqIHBHcmFwaGljU3RhdGVzLCBDRlhfQWZmaW5lTWF0cml4KiBwUGFyZW50TWF0cml4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfVHlwZTNDaGFyKiBwVHlwZTNDaGFyLCBDUERGX1BhcnNlT3B0aW9ucyogcE9wdGlvbnMsIGludCBsZXZlbCkNCi17DQotICAgIGlmIChtX1BhcnNlU3RhdGUgPT0gUERGX0NPTlRFTlRfUEFSU0VEIHx8IG1fUGFyc2VTdGF0ZSA9PSBQREZfQ09OVEVOVF9QQVJTSU5HKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbV9wUGFyc2VyID0gRlhfTkVXIENQREZfQ29udGVudFBhcnNlcjsNCi0gICAgbV9wUGFyc2VyLT5TdGFydCh0aGlzLCBwR3JhcGhpY1N0YXRlcywgcFBhcmVudE1hdHJpeCwgcFR5cGUzQ2hhciwgcE9wdGlvbnMsIGxldmVsKTsNCi0gICAgbV9QYXJzZVN0YXRlID0gUERGX0NPTlRFTlRfUEFSU0lORzsNCi19DQotdm9pZCBDUERGX0Zvcm06OlBhcnNlQ29udGVudChDUERGX0FsbFN0YXRlcyogcEdyYXBoaWNTdGF0ZXMsIENGWF9BZmZpbmVNYXRyaXgqIHBQYXJlbnRNYXRyaXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX1R5cGUzQ2hhciogcFR5cGUzQ2hhciwgQ1BERl9QYXJzZU9wdGlvbnMqIHBPcHRpb25zLCBpbnQgbGV2ZWwpDQotew0KLSAgICBTdGFydFBhcnNlKHBHcmFwaGljU3RhdGVzLCBwUGFyZW50TWF0cml4LCBwVHlwZTNDaGFyLCBwT3B0aW9ucywgbGV2ZWwpOw0KLSAgICBDb250aW51ZVBhcnNlKE5VTEwpOw0KLX0NCi1DUERGX0Zvcm0qIENQREZfRm9ybTo6Q2xvbmUoKSBjb25zdA0KLXsNCi0gICAgQ1BERl9Gb3JtKiBwQ2xvbmUgPSBGWF9ORVcgQ1BERl9Gb3JtKG1fcERvY3VtZW50LCBtX3BQYWdlUmVzb3VyY2VzLCBtX3BGb3JtU3RyZWFtLCBtX3BSZXNvdXJjZXMpOw0KLSAgICBGWF9QT1NJVElPTiBwb3MgPSBtX09iamVjdExpc3QuR2V0SGVhZFBvc2l0aW9uKCk7DQotICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgIENQREZfUGFnZU9iamVjdCogcE9iaiA9IChDUERGX1BhZ2VPYmplY3QqKW1fT2JqZWN0TGlzdC5HZXROZXh0KHBvcyk7DQotICAgICAgICBwQ2xvbmUtPm1fT2JqZWN0TGlzdC5BZGRUYWlsKHBPYmotPkNsb25lKCkpOw0KLSAgICB9DQotICAgIHJldHVybiBwQ2xvbmU7DQotfQ0KLXZvaWQgQ1BERl9QYWdlOjpHZXREaXNwbGF5TWF0cml4KENGWF9BZmZpbmVNYXRyaXgmIG1hdHJpeCwgaW50IHhQb3MsIGludCB5UG9zLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB4U2l6ZSwgaW50IHlTaXplLCBpbnQgaVJvdGF0ZSkgY29uc3QNCi17DQotICAgIGlmIChtX1BhZ2VXaWR0aCA9PSAwIHx8IG1fUGFnZUhlaWdodCA9PSAwKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBkaXNwbGF5X21hdHJpeDsNCi0gICAgaW50IHgwLCB5MCwgeDEsIHkxLCB4MiwgeTI7DQotICAgIGlSb3RhdGUgJT0gNDsNCi0gICAgc3dpdGNoIChpUm90YXRlKSB7DQotICAgICAgICBjYXNlIDA6DQotICAgICAgICAgICAgeDAgPSB4UG9zOw0KLSAgICAgICAgICAgIHkwID0geVBvcyArIHlTaXplOw0KLSAgICAgICAgICAgIHgxID0geFBvczsNCi0gICAgICAgICAgICB5MSA9IHlQb3M7DQotICAgICAgICAgICAgeDIgPSB4UG9zICsgeFNpemU7DQotICAgICAgICAgICAgeTIgPSB5UG9zICsgeVNpemU7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIDE6DQotICAgICAgICAgICAgeDAgPSB4UG9zOw0KLSAgICAgICAgICAgIHkwID0geVBvczsNCi0gICAgICAgICAgICB4MSA9IHhQb3MgKyB4U2l6ZTsNCi0gICAgICAgICAgICB5MSA9IHlQb3M7DQotICAgICAgICAgICAgeDIgPSB4UG9zOw0KLSAgICAgICAgICAgIHkyID0geVBvcyArIHlTaXplOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSAyOg0KLSAgICAgICAgICAgIHgwID0geFBvcyArIHhTaXplOw0KLSAgICAgICAgICAgIHkwID0geVBvczsNCi0gICAgICAgICAgICB4MSA9IHhQb3MgKyB4U2l6ZTsNCi0gICAgICAgICAgICB5MSA9IHlQb3MgKyB5U2l6ZTsNCi0gICAgICAgICAgICB4MiA9IHhQb3M7DQotICAgICAgICAgICAgeTIgPSB5UG9zOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSAzOg0KLSAgICAgICAgICAgIHgwID0geFBvcyArIHhTaXplOw0KLSAgICAgICAgICAgIHkwID0geVBvcyArIHlTaXplOw0KLSAgICAgICAgICAgIHgxID0geFBvczsNCi0gICAgICAgICAgICB5MSA9IHlQb3MgKyB5U2l6ZTsNCi0gICAgICAgICAgICB4MiA9IHhQb3MgKyB4U2l6ZTsNCi0gICAgICAgICAgICB5MiA9IHlQb3M7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgIH0NCi0gICAgZGlzcGxheV9tYXRyaXguU2V0KEZYU1lTX0RpdigoRlhfRkxPQVQpKHgyIC0geDApLCBtX1BhZ2VXaWR0aCksDQotICAgICAgICAgICAgICAgICAgICAgICBGWFNZU19EaXYoKEZYX0ZMT0FUKSh5MiAtIHkwKSwgbV9QYWdlV2lkdGgpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgRlhTWVNfRGl2KChGWF9GTE9BVCkoeDEgLSB4MCksIG1fUGFnZUhlaWdodCksDQotICAgICAgICAgICAgICAgICAgICAgICBGWFNZU19EaXYoKEZYX0ZMT0FUKSh5MSAtIHkwKSwgbV9QYWdlSGVpZ2h0KSwNCi0gICAgICAgICAgICAgICAgICAgICAgIChGWF9GTE9BVCl4MCwgKEZYX0ZMT0FUKXkwKTsNCi0gICAgbWF0cml4ID0gbV9QYWdlTWF0cml4Ow0KLSAgICBtYXRyaXguQ29uY2F0KGRpc3BsYXlfbWF0cml4KTsNCi19DQotQ1BERl9QYXJzZU9wdGlvbnM6OkNQREZfUGFyc2VPcHRpb25zKCkNCi17DQotICAgIG1fYlRleHRPbmx5ID0gRkFMU0U7DQotICAgIG1fYk1hcmtlZENvbnRlbnQgPSBUUlVFOw0KLSAgICBtX2JTZXBhcmF0ZUZvcm0gPSBUUlVFOw0KLSAgICBtX2JEZWNvZGVJbmxpbmVJbWFnZSA9IEZBTFNFOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX21vZHVsZS5oIgorI2luY2x1ZGUgInBhZ2VpbnQuaCIKK3ZvaWQgQ1BERl9QYWdlT2JqZWN0OjpSZWxlYXNlKCkKK3sKKyAgICBkZWxldGUgdGhpczsKK30KK0NQREZfUGFnZU9iamVjdCogQ1BERl9QYWdlT2JqZWN0OjpDcmVhdGUoaW50IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgUERGUEFHRV9URVhUOgorICAgICAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX1RleHRPYmplY3Q7CisgICAgICAgIGNhc2UgUERGUEFHRV9JTUFHRToKKyAgICAgICAgICAgIHJldHVybiBGWF9ORVcgQ1BERl9JbWFnZU9iamVjdDsKKyAgICAgICAgY2FzZSBQREZQQUdFX1BBVEg6CisgICAgICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfUGF0aE9iamVjdDsKKyAgICAgICAgY2FzZSBQREZQQUdFX1NIQURJTkc6CisgICAgICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfU2hhZGluZ09iamVjdDsKKyAgICAgICAgY2FzZSBQREZQQUdFX0ZPUk06CisgICAgICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfRm9ybU9iamVjdDsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CitDUERGX1BhZ2VPYmplY3QqIENQREZfUGFnZU9iamVjdDo6Q2xvbmUoKSBjb25zdAoreworICAgIENQREZfUGFnZU9iamVjdCogcE9iaiA9IENyZWF0ZShtX1R5cGUpOworICAgIHBPYmotPkNvcHkodGhpcyk7CisgICAgcmV0dXJuIHBPYmo7Cit9Cit2b2lkIENQREZfUGFnZU9iamVjdDo6Q29weShjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBTcmMpCit7CisgICAgaWYgKG1fVHlwZSAhPSBwU3JjLT5tX1R5cGUpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDb3B5RGF0YShwU3JjKTsKKyAgICBDb3B5U3RhdGVzKCpwU3JjKTsKKyAgICBtX0xlZnQgPSBwU3JjLT5tX0xlZnQ7CisgICAgbV9SaWdodCA9IHBTcmMtPm1fUmlnaHQ7CisgICAgbV9Ub3AgPSBwU3JjLT5tX1RvcDsKKyAgICBtX0JvdHRvbSA9IHBTcmMtPm1fQm90dG9tOworfQordm9pZCBDUERGX1BhZ2VPYmplY3Q6OkFwcGVuZENsaXBQYXRoKENQREZfUGF0aCBwYXRoLCBpbnQgdHlwZSwgRlhfQk9PTCBiQXV0b01lcmdlKQoreworICAgIG1fQ2xpcFBhdGguQXBwZW5kUGF0aChwYXRoLCB0eXBlLCBiQXV0b01lcmdlKTsKK30KK3ZvaWQgQ1BERl9QYWdlT2JqZWN0OjpDb3B5Q2xpcFBhdGgoQ1BERl9QYWdlT2JqZWN0KiBwT2JqKQoreworICAgIG1fQ2xpcFBhdGggPSBwT2JqLT5tX0NsaXBQYXRoOworfQordm9pZCBDUERGX1BhZ2VPYmplY3Q6OlJlbW92ZUNsaXBQYXRoKCkKK3sKKyAgICBtX0NsaXBQYXRoLlNldE51bGwoKTsKK30KK3ZvaWQgQ1BERl9QYWdlT2JqZWN0OjpSZWNhbGNCQm94KCkKK3sKKyAgICBzd2l0Y2ggKG1fVHlwZSkgeworICAgICAgICBjYXNlIFBERlBBR0VfVEVYVDoKKyAgICAgICAgICAgICgoQ1BERl9UZXh0T2JqZWN0Kil0aGlzKS0+UmVjYWxjUG9zaXRpb25EYXRhKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQREZQQUdFX1BBVEg6CisgICAgICAgICAgICAoKENQREZfUGF0aE9iamVjdCopdGhpcyktPkNhbGNCb3VuZGluZ0JveCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUERGUEFHRV9TSEFESU5HOgorICAgICAgICAgICAgKChDUERGX1NoYWRpbmdPYmplY3QqKXRoaXMpLT5DYWxjQm91bmRpbmdCb3goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KK3ZvaWQgQ1BERl9QYWdlT2JqZWN0OjpUcmFuc2Zvcm1DbGlwUGF0aChDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpCit7CisgICAgaWYgKG1fQ2xpcFBhdGguSXNOdWxsKCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX0NsaXBQYXRoLkdldE1vZGlmeSgpOworICAgIG1fQ2xpcFBhdGguVHJhbnNmb3JtKG1hdHJpeCk7Cit9Cit2b2lkIENQREZfUGFnZU9iamVjdDo6VHJhbnNmb3JtR2VuZXJhbFN0YXRlKENGWF9BZmZpbmVNYXRyaXgmIG1hdHJpeCkKK3sKKyAgICBpZihtX0dlbmVyYWxTdGF0ZS5Jc051bGwoKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfR2VuZXJhbFN0YXRlRGF0YSogcEdTID0gbV9HZW5lcmFsU3RhdGUuR2V0TW9kaWZ5KCk7CisgICAgcEdTLT5tX01hdHJpeC5Db25jYXQobWF0cml4KTsKK30KK0ZYX1JFQ1QgQ1BERl9QYWdlT2JqZWN0OjpHZXRCQm94KGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgpIGNvbnN0Cit7CisgICAgQ0ZYX0Zsb2F0UmVjdCByZWN0KG1fTGVmdCwgbV9Cb3R0b20sIG1fUmlnaHQsIG1fVG9wKTsKKyAgICBpZiAocE1hdHJpeCkgeworICAgICAgICBwTWF0cml4LT5UcmFuc2Zvcm1SZWN0KHJlY3QpOworICAgIH0KKyAgICByZXR1cm4gcmVjdC5HZXRPdXR0ZXJSZWN0KCk7Cit9CitDUERGX1RleHRPYmplY3Q6OkNQREZfVGV4dE9iamVjdCgpCit7CisgICAgbV9UeXBlID0gUERGUEFHRV9URVhUOworICAgIG1fcENoYXJDb2RlcyA9IE5VTEw7CisgICAgbV9wQ2hhclBvcyA9IE5VTEw7CisgICAgbV9uQ2hhcnMgPSAwOworICAgIG1fUG9zWCA9IG1fUG9zWSA9IDA7Cit9CitDUERGX1RleHRPYmplY3Q6On5DUERGX1RleHRPYmplY3QoKQoreworICAgIGlmIChtX25DaGFycyA+IDEgJiYgbV9wQ2hhckNvZGVzKSB7CisgICAgICAgIEZYX0ZyZWUobV9wQ2hhckNvZGVzKTsKKyAgICB9CisgICAgaWYgKG1fcENoYXJQb3MpIHsKKyAgICAgICAgRlhfRnJlZShtX3BDaGFyUG9zKTsKKyAgICB9Cit9Cit2b2lkIENQREZfVGV4dE9iamVjdDo6R2V0SXRlbUluZm8oaW50IGluZGV4LCBDUERGX1RleHRPYmplY3RJdGVtKiBwSW5mbykgY29uc3QKK3sKKyAgICBwSW5mby0+bV9DaGFyQ29kZSA9IG1fbkNoYXJzID09IDEgPyAoRlhfRFdPUkQpKEZYX1VJTlRQVFIpbV9wQ2hhckNvZGVzIDogbV9wQ2hhckNvZGVzW2luZGV4XTsKKyAgICBwSW5mby0+bV9PcmlnaW5YID0gaW5kZXggPyBtX3BDaGFyUG9zW2luZGV4IC0gMV0gOiAwOworICAgIHBJbmZvLT5tX09yaWdpblkgPSAwOworICAgIGlmIChwSW5mby0+bV9DaGFyQ29kZSA9PSAtMSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfRm9udCogcEZvbnQgPSBtX1RleHRTdGF0ZS5HZXRGb250KCk7CisgICAgaWYgKHBGb250LT5HZXRGb250VHlwZSgpICE9IFBERkZPTlRfQ0lERk9OVCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghKChDUERGX0NJREZvbnQqKXBGb250KS0+SXNWZXJ0V3JpdGluZygpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfV09SRCBDSUQgPSAoKENQREZfQ0lERm9udCopcEZvbnQpLT5DSURGcm9tQ2hhckNvZGUocEluZm8tPm1fQ2hhckNvZGUpOworICAgIHBJbmZvLT5tX09yaWdpblkgPSBwSW5mby0+bV9PcmlnaW5YOworICAgIHBJbmZvLT5tX09yaWdpblggPSAwOworICAgIHNob3J0IHZ4LCB2eTsKKyAgICAoKENQREZfQ0lERm9udCopcEZvbnQpLT5HZXRWZXJ0T3JpZ2luKENJRCwgdngsIHZ5KTsKKyAgICBGWF9GTE9BVCBmb250c2l6ZSA9IG1fVGV4dFN0YXRlLkdldEZvbnRTaXplKCk7CisgICAgcEluZm8tPm1fT3JpZ2luWCAtPSBmb250c2l6ZSAqIHZ4IC8gMTAwMDsKKyAgICBwSW5mby0+bV9PcmlnaW5ZIC09IGZvbnRzaXplICogdnkgLyAxMDAwOworfQoraW50IENQREZfVGV4dE9iamVjdDo6Q291bnRDaGFycygpIGNvbnN0Cit7CisgICAgaWYgKG1fbkNoYXJzID09IDEpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX25DaGFyczsgaSArKykKKyAgICAgICAgaWYgKG1fcENoYXJDb2Rlc1tpXSAhPSAoRlhfRFdPUkQpIC0gMSkgeworICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgIH0KKyAgICByZXR1cm4gY291bnQ7Cit9Cit2b2lkIENQREZfVGV4dE9iamVjdDo6R2V0Q2hhckluZm8oaW50IGluZGV4LCBGWF9EV09SRCYgY2hhcmNvZGUsIEZYX0ZMT0FUJiBrZXJuaW5nKSBjb25zdAoreworICAgIGlmIChtX25DaGFycyA9PSAxKSB7CisgICAgICAgIGNoYXJjb2RlID0gKEZYX0RXT1JEKShGWF9VSU5UUFRSKW1fcENoYXJDb2RlczsKKyAgICAgICAga2VybmluZyA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbkNoYXJzOyBpICsrKSB7CisgICAgICAgIGlmIChtX3BDaGFyQ29kZXNbaV0gIT0gKEZYX0RXT1JEKSAtIDEpIHsKKyAgICAgICAgICAgIGlmIChjb3VudCA9PSBpbmRleCkgeworICAgICAgICAgICAgICAgIGNoYXJjb2RlID0gbV9wQ2hhckNvZGVzW2ldOworICAgICAgICAgICAgICAgIGlmIChpID09IG1fbkNoYXJzIC0gMSB8fCBtX3BDaGFyQ29kZXNbaSArIDFdICE9IChGWF9EV09SRCkgLSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGtlcm5pbmcgPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGtlcm5pbmcgPSBtX3BDaGFyUG9zW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudCArKzsKKyAgICAgICAgfQorICAgIH0KK30KK3ZvaWQgQ1BERl9UZXh0T2JqZWN0OjpHZXRDaGFySW5mbyhpbnQgaW5kZXgsIENQREZfVGV4dE9iamVjdEl0ZW0qIHBJbmZvKSBjb25zdAoreworICAgIGlmIChtX25DaGFycyA9PSAxKSB7CisgICAgICAgIEdldEl0ZW1JbmZvKDAsIHBJbmZvKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9uQ2hhcnM7IGkgKyspIHsKKyAgICAgICAgRlhfRFdPUkQgY2hhcmNvZGUgPSBtX3BDaGFyQ29kZXNbaV07CisgICAgICAgIGlmIChjaGFyY29kZSA9PSAoRlhfRFdPUkQpIC0gMSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvdW50ID09IGluZGV4KSB7CisgICAgICAgICAgICBHZXRJdGVtSW5mbyhpLCBwSW5mbyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjb3VudCArKzsKKyAgICB9Cit9Cit2b2lkIENQREZfVGV4dE9iamVjdDo6Q29weURhdGEoY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwU3JjKQoreworICAgIGNvbnN0IENQREZfVGV4dE9iamVjdCogcFNyY09iaiA9IChjb25zdCBDUERGX1RleHRPYmplY3QqKXBTcmM7CisgICAgaWYgKG1fbkNoYXJzID4gMSAmJiBtX3BDaGFyQ29kZXMpIHsKKyAgICAgICAgRlhfRnJlZShtX3BDaGFyQ29kZXMpOworICAgICAgICBtX3BDaGFyQ29kZXMgPSBOVUxMOworICAgIH0KKyAgICBpZiAobV9wQ2hhclBvcykgeworICAgICAgICBGWF9GcmVlKG1fcENoYXJQb3MpOworICAgICAgICBtX3BDaGFyUG9zID0gTlVMTDsKKyAgICB9CisgICAgbV9uQ2hhcnMgPSBwU3JjT2JqLT5tX25DaGFyczsKKyAgICBpZiAobV9uQ2hhcnMgPiAxKSB7CisgICAgICAgIG1fcENoYXJDb2RlcyA9IEZYX0FsbG9jKEZYX0RXT1JELCBtX25DaGFycyk7CisgICAgICAgIG1fcENoYXJQb3MgPSBGWF9BbGxvYyhGWF9GTE9BVCwgbV9uQ2hhcnMgLSAxKTsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtX25DaGFyczsgaSArKykgeworICAgICAgICAgICAgbV9wQ2hhckNvZGVzW2ldID0gcFNyY09iai0+bV9wQ2hhckNvZGVzW2ldOworICAgICAgICB9CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtX25DaGFycyAtIDE7IGkgKyspIHsKKyAgICAgICAgICAgIG1fcENoYXJQb3NbaV0gPSBwU3JjT2JqLT5tX3BDaGFyUG9zW2ldOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wQ2hhckNvZGVzID0gcFNyY09iai0+bV9wQ2hhckNvZGVzOworICAgIH0KKyAgICBtX1Bvc1ggPSBwU3JjT2JqLT5tX1Bvc1g7CisgICAgbV9Qb3NZID0gcFNyY09iai0+bV9Qb3NZOworfQordm9pZCBDUERGX1RleHRPYmplY3Q6OkdldFRleHRNYXRyaXgoQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCkgY29uc3QKK3sKKyAgICBGWF9GTE9BVCogcFRleHRNYXRyaXggPSBtX1RleHRTdGF0ZS5HZXRNYXRyaXgoKTsKKyAgICBwTWF0cml4LT5TZXQocFRleHRNYXRyaXhbMF0sIHBUZXh0TWF0cml4WzJdLCBwVGV4dE1hdHJpeFsxXSwgcFRleHRNYXRyaXhbM10sIG1fUG9zWCwgbV9Qb3NZKTsKK30KK3ZvaWQgQ1BERl9UZXh0T2JqZWN0OjpTZXRTZWdtZW50cyhjb25zdCBDRlhfQnl0ZVN0cmluZyogcFN0cnMsIEZYX0ZMT0FUKiBwS2VybmluZywgaW50IG5zZWdzKQoreworICAgIGlmIChtX25DaGFycyA+IDEgJiYgbV9wQ2hhckNvZGVzKSB7CisgICAgICAgIEZYX0ZyZWUobV9wQ2hhckNvZGVzKTsKKyAgICAgICAgbV9wQ2hhckNvZGVzID0gTlVMTDsKKyAgICB9CisgICAgaWYgKG1fcENoYXJQb3MpIHsKKyAgICAgICAgRlhfRnJlZShtX3BDaGFyUG9zKTsKKyAgICAgICAgbV9wQ2hhclBvcyA9IE5VTEw7CisgICAgfQorICAgIENQREZfRm9udCogcEZvbnQgPSBtX1RleHRTdGF0ZS5HZXRGb250KCk7CisgICAgbV9uQ2hhcnMgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnNlZ3M7IGkgKyspIHsKKyAgICAgICAgbV9uQ2hhcnMgKz0gcEZvbnQtPkNvdW50Q2hhcihwU3Ryc1tpXSwgcFN0cnNbaV0uR2V0TGVuZ3RoKCkpOworICAgIH0KKyAgICBtX25DaGFycyArPSBuc2VncyAtIDE7CisgICAgaWYgKG1fbkNoYXJzID4gMSkgeworICAgICAgICBtX3BDaGFyQ29kZXMgPSBGWF9BbGxvYyhGWF9EV09SRCwgbV9uQ2hhcnMpOworICAgICAgICBtX3BDaGFyUG9zID0gRlhfQWxsb2MoRlhfRkxPQVQsIG1fbkNoYXJzIC0gMSk7CisgICAgICAgIGludCBpbmRleCA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnNlZ3M7IGkgKyspIHsKKyAgICAgICAgICAgIEZYX0xQQ1NUUiBzZWdtZW50ID0gcFN0cnNbaV07CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gMCwgbGVuID0gcFN0cnNbaV0uR2V0TGVuZ3RoKCk7CisgICAgICAgICAgICB3aGlsZSAob2Zmc2V0IDwgbGVuKSB7CisgICAgICAgICAgICAgICAgbV9wQ2hhckNvZGVzW2luZGV4KytdID0gcEZvbnQtPkdldE5leHRDaGFyKHNlZ21lbnQsIG9mZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaSAhPSBuc2VncyAtIDEpIHsKKyAgICAgICAgICAgICAgICBtX3BDaGFyUG9zW2luZGV4IC0gMV0gPSBwS2VybmluZ1tpXTsKKyAgICAgICAgICAgICAgICBtX3BDaGFyQ29kZXNbaW5kZXggKytdID0gKEZYX0RXT1JEKSAtIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKKyAgICAgICAgbV9wQ2hhckNvZGVzID0gKEZYX0RXT1JEKikoRlhfVUlOVFBUUilwRm9udC0+R2V0TmV4dENoYXIocFN0cnNbMF0sIG9mZnNldCk7CisgICAgfQorfQordm9pZCBDUERGX1RleHRPYmplY3Q6OlNldFRleHQoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cikKK3sKKyAgICBTZXRTZWdtZW50cygmc3RyLCBOVUxMLCAxKTsKKyAgICBSZWNhbGNQb3NpdGlvbkRhdGEoKTsKK30KK3ZvaWQgQ1BERl9UZXh0T2JqZWN0OjpTZXRFbXB0eSgpCit7CisgICAgaWYgKG1fbkNoYXJzID4gMSAmJiBtX3BDaGFyQ29kZXMpIHsKKyAgICAgICAgRlhfRnJlZShtX3BDaGFyQ29kZXMpOworICAgIH0KKyAgICBpZiAobV9uQ2hhcnMgPiAxICYmIG1fcENoYXJQb3MpIHsKKyAgICAgICAgRlhfRnJlZShtX3BDaGFyUG9zKTsKKyAgICB9CisgICAgbV9uQ2hhcnMgPSAwOworICAgIG1fcENoYXJDb2RlcyA9IE5VTEw7CisgICAgbV9wQ2hhclBvcyA9IE5VTEw7CisgICAgbV9MZWZ0ID0gbV9SaWdodCA9IG1fUG9zWDsKKyAgICBtX1RvcCA9IG1fQm90dG9tID0gbV9Qb3NZOworfQordm9pZCBDUERGX1RleHRPYmplY3Q6OlNldFRleHQoQ0ZYX0J5dGVTdHJpbmcqIHBTdHJzLCBGWF9GTE9BVCogcEtlcm5pbmcsIGludCBuU2VncykKK3sKKyAgICBTZXRTZWdtZW50cyhwU3RycywgcEtlcm5pbmcsIG5TZWdzKTsKKyAgICBSZWNhbGNQb3NpdGlvbkRhdGEoKTsKK30KK3ZvaWQgQ1BERl9UZXh0T2JqZWN0OjpTZXRUZXh0KGludCBuQ2hhcnMsIEZYX0RXT1JEKiBwQ2hhckNvZGVzLCBGWF9GTE9BVCogcEtlcm5pbmdzKQoreworICAgIGlmIChtX25DaGFycyA+IDEgJiYgbV9wQ2hhckNvZGVzKSB7CisgICAgICAgIEZYX0ZyZWUobV9wQ2hhckNvZGVzKTsKKyAgICAgICAgbV9wQ2hhckNvZGVzID0gTlVMTDsKKyAgICB9CisgICAgaWYgKG1fcENoYXJQb3MpIHsKKyAgICAgICAgRlhfRnJlZShtX3BDaGFyUG9zKTsKKyAgICAgICAgbV9wQ2hhclBvcyA9IE5VTEw7CisgICAgfQorICAgIGludCBuS2VybmluZ3MgPSAwOworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBuQ2hhcnMgLSAxOyBpICsrKQorICAgICAgICBpZiAocEtlcm5pbmdzW2ldICE9IDApIHsKKyAgICAgICAgICAgIG5LZXJuaW5ncyArKzsKKyAgICAgICAgfQorICAgIG1fbkNoYXJzID0gbkNoYXJzICsgbktlcm5pbmdzOworICAgIGlmIChtX25DaGFycyA+IDEpIHsKKyAgICAgICAgbV9wQ2hhckNvZGVzID0gRlhfQWxsb2MoRlhfRFdPUkQsIG1fbkNoYXJzKTsKKyAgICAgICAgbV9wQ2hhclBvcyA9IEZYX0FsbG9jKEZYX0ZMT0FULCBtX25DaGFycyAtIDEpOworICAgICAgICBpbnQgaW5kZXggPSAwOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5DaGFyczsgaSArKykgeworICAgICAgICAgICAgbV9wQ2hhckNvZGVzW2luZGV4KytdID0gcENoYXJDb2Rlc1tpXTsKKyAgICAgICAgICAgIGlmIChwS2VybmluZ3NbaV0gIT0gMCAmJiBpICE9IG5DaGFycyAtIDEpIHsKKyAgICAgICAgICAgICAgICBtX3BDaGFyQ29kZXNbaW5kZXhdID0gKEZYX0RXT1JEKSAtIDE7CisgICAgICAgICAgICAgICAgbV9wQ2hhclBvc1tpbmRleCAtIDFdID0gcEtlcm5pbmdzW2ldOworICAgICAgICAgICAgICAgIGluZGV4ICsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IG9mZnNldCA9IDA7CisgICAgICAgIG1fcENoYXJDb2RlcyA9IChGWF9EV09SRCopKEZYX1VJTlRQVFIpcENoYXJDb2Rlc1swXTsKKyAgICB9CisgICAgUmVjYWxjUG9zaXRpb25EYXRhKCk7Cit9CitGWF9GTE9BVCBDUERGX1RleHRPYmplY3Q6OkdldENoYXJXaWR0aChGWF9EV09SRCBjaGFyY29kZSkgY29uc3QKK3sKKyAgICBGWF9GTE9BVCBmb250c2l6ZSA9IG1fVGV4dFN0YXRlLkdldEZvbnRTaXplKCkgLyAxMDAwOworICAgIENQREZfRm9udCogcEZvbnQgPSBtX1RleHRTdGF0ZS5HZXRGb250KCk7CisgICAgRlhfQk9PTCBiVmVydFdyaXRpbmcgPSBGQUxTRTsKKyAgICBDUERGX0NJREZvbnQqIHBDSURGb250ID0gcEZvbnQtPkdldENJREZvbnQoKTsKKyAgICBpZiAocENJREZvbnQpIHsKKyAgICAgICAgYlZlcnRXcml0aW5nID0gcENJREZvbnQtPklzVmVydFdyaXRpbmcoKTsKKyAgICB9CisgICAgaWYgKCFiVmVydFdyaXRpbmcpIHsKKyAgICAgICAgcmV0dXJuIHBGb250LT5HZXRDaGFyV2lkdGhGKGNoYXJjb2RlLCAwKSAqIGZvbnRzaXplOworICAgIH0gZWxzZSB7CisgICAgICAgIEZYX1dPUkQgQ0lEID0gcENJREZvbnQtPkNJREZyb21DaGFyQ29kZShjaGFyY29kZSk7CisgICAgICAgIHJldHVybiBwQ0lERm9udC0+R2V0VmVydFdpZHRoKENJRCkgKiBmb250c2l6ZTsKKyAgICB9Cit9CitGWF9GTE9BVCBDUERGX1RleHRPYmplY3Q6OkdldFNwYWNlQ2hhcldpZHRoKCkgY29uc3QKK3sKKyAgICBDUERGX0ZvbnQqIHBGb250ID0gbV9UZXh0U3RhdGUuR2V0Rm9udCgpOworICAgIEZYX0RXT1JEIGNoYXJDb2RlID0gbV9UZXh0U3RhdGUuR2V0Rm9udCgpLT5DaGFyQ29kZUZyb21Vbmljb2RlKDMyKTsKKyAgICBpZiAoY2hhckNvZGUgIT0gKEZYX0RXT1JEKSAtIDEpIHsKKyAgICAgICAgcmV0dXJuIEdldENoYXJXaWR0aChjaGFyQ29kZSk7CisgICAgfQorICAgIEZYX0ZMT0FUIGZvbnRTaXplID0gbV9UZXh0U3RhdGUuR2V0Rm9udFNpemUoKSAvIDQwMDAuMGY7CisgICAgRlhfQk9PTCBiVmVydFdyaXRpbmcgPSBGQUxTRTsKKyAgICBDUERGX0NJREZvbnQqIHBDSURGb250ID0gcEZvbnQtPkdldENJREZvbnQoKTsKKyAgICBpZiAocENJREZvbnQpIHsKKyAgICAgICAgYlZlcnRXcml0aW5nID0gcENJREZvbnQtPklzVmVydFdyaXRpbmcoKTsKKyAgICB9CisgICAgRlhfUkVDVCBmb250UmVjdDsKKyAgICBwRm9udC0+R2V0Rm9udEJCb3goZm9udFJlY3QpOworICAgIGZvbnRTaXplICo9IGJWZXJ0V3JpdGluZyA/IChGWF9GTE9BVClmb250UmVjdC5IZWlnaHQoKSA6IChGWF9GTE9BVClmb250UmVjdC5XaWR0aCgpOworICAgIHJldHVybiBmb250U2l6ZTsKK30KK3ZvaWQgQ1BERl9UZXh0T2JqZWN0OjpHZXRDaGFyUmVjdChpbnQgaW5kZXgsIENGWF9GbG9hdFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgRlhfRkxPQVQgY3VycG9zID0gMDsKKyAgICBDUERGX0ZvbnQqIHBGb250ID0gbV9UZXh0U3RhdGUuR2V0Rm9udCgpOworICAgIEZYX0JPT0wgYlZlcnRXcml0aW5nID0gRkFMU0U7CisgICAgQ1BERl9DSURGb250KiBwQ0lERm9udCA9IHBGb250LT5HZXRDSURGb250KCk7CisgICAgaWYgKHBDSURGb250KSB7CisgICAgICAgIGJWZXJ0V3JpdGluZyA9IHBDSURGb250LT5Jc1ZlcnRXcml0aW5nKCk7CisgICAgfQorICAgIEZYX0ZMT0FUIGZvbnRzaXplID0gbV9UZXh0U3RhdGUuR2V0Rm9udFNpemUoKSAvIDEwMDA7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbkNoYXJzOyBpICsrKSB7CisgICAgICAgIEZYX0RXT1JEIGNoYXJjb2RlID0gbV9uQ2hhcnMgPT0gMSA/IChGWF9EV09SRCkoRlhfVUlOVFBUUiltX3BDaGFyQ29kZXMgOiBtX3BDaGFyQ29kZXNbaV07CisgICAgICAgIGlmIChjaGFyY29kZSA9PSAoRlhfRFdPUkQpIC0gMSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYoIGNvdW50ICE9IGluZGV4KSB7CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgRlhfRkxPQVQgY3VycG9zID0gaSA+IDAgPyBtX3BDaGFyUG9zW2kgLSAxXSA6IDA7CisgICAgICAgIEZYX1JFQ1QgY2hhcl9yZWN0OworICAgICAgICBwRm9udC0+R2V0Q2hhckJCb3goY2hhcmNvZGUsIGNoYXJfcmVjdCwgMCk7CisgICAgICAgIGlmICghYlZlcnRXcml0aW5nKSB7CisgICAgICAgICAgICByZWN0LmxlZnQgPSBjdXJwb3MgKyBjaGFyX3JlY3QubGVmdCAqIGZvbnRzaXplOworICAgICAgICAgICAgcmVjdC5yaWdodCA9IGN1cnBvcyArIGNoYXJfcmVjdC5yaWdodCAqIGZvbnRzaXplOworICAgICAgICAgICAgcmVjdC50b3AgPSBjaGFyX3JlY3QudG9wICogZm9udHNpemU7CisgICAgICAgICAgICByZWN0LmJvdHRvbSA9IGNoYXJfcmVjdC5ib3R0b20gKiBmb250c2l6ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEZYX1dPUkQgQ0lEID0gcENJREZvbnQtPkNJREZyb21DaGFyQ29kZShjaGFyY29kZSk7CisgICAgICAgICAgICBzaG9ydCB2eCwgdnk7CisgICAgICAgICAgICBwQ0lERm9udC0+R2V0VmVydE9yaWdpbihDSUQsIHZ4LCB2eSk7CisgICAgICAgICAgICBjaGFyX3JlY3QubGVmdCAtPSB2eDsKKyAgICAgICAgICAgIGNoYXJfcmVjdC5yaWdodCAtPSB2eDsKKyAgICAgICAgICAgIGNoYXJfcmVjdC50b3AgLT0gdnk7CisgICAgICAgICAgICBjaGFyX3JlY3QuYm90dG9tIC09IHZ5OworICAgICAgICAgICAgcmVjdC5sZWZ0ID0gY2hhcl9yZWN0LmxlZnQgKiBmb250c2l6ZTsKKyAgICAgICAgICAgIHJlY3QucmlnaHQgPSBjaGFyX3JlY3QucmlnaHQgKiBmb250c2l6ZTsKKyAgICAgICAgICAgIHJlY3QudG9wID0gY3VycG9zICsgY2hhcl9yZWN0LnRvcCAqIGZvbnRzaXplOworICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBjdXJwb3MgKyBjaGFyX3JlY3QuYm90dG9tICogZm9udHNpemU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KK3ZvaWQgQ1BERl9UZXh0T2JqZWN0OjpDYWxjUG9zaXRpb25EYXRhKEZYX0ZMT0FUKiBwVGV4dEFkdmFuY2VYLCBGWF9GTE9BVCogcFRleHRBZHZhbmNlWSwgRlhfRkxPQVQgaG9yel9zY2FsZSwgaW50IGxldmVsKQoreworICAgIEZYX0ZMT0FUIGN1cnBvcyA9IDA7CisgICAgRlhfRkxPQVQgbWluX3ggPSAxMDAwMCAqIDEuMGYsIG1heF94ID0gLTEwMDAwICogMS4wZiwgbWluX3kgPSAxMDAwMCAqIDEuMGYsIG1heF95ID0gLTEwMDAwICogMS4wZjsKKyAgICBDUERGX0ZvbnQqIHBGb250ID0gbV9UZXh0U3RhdGUuR2V0Rm9udCgpOworICAgIEZYX0JPT0wgYlZlcnRXcml0aW5nID0gRkFMU0U7CisgICAgQ1BERl9DSURGb250KiBwQ0lERm9udCA9IHBGb250LT5HZXRDSURGb250KCk7CisgICAgaWYgKHBDSURGb250KSB7CisgICAgICAgIGJWZXJ0V3JpdGluZyA9IHBDSURGb250LT5Jc1ZlcnRXcml0aW5nKCk7CisgICAgfQorICAgIEZYX0ZMT0FUIGZvbnRzaXplID0gbV9UZXh0U3RhdGUuR2V0Rm9udFNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbkNoYXJzOyBpICsrKSB7CisgICAgICAgIEZYX0RXT1JEIGNoYXJjb2RlID0gbV9uQ2hhcnMgPT0gMSA/IChGWF9EV09SRCkoRlhfVUlOVFBUUiltX3BDaGFyQ29kZXMgOiBtX3BDaGFyQ29kZXNbaV07CisgICAgICAgIGlmIChjaGFyY29kZSA9PSAoRlhfRFdPUkQpIC0gMSkgeworICAgICAgICAgICAgY3VycG9zIC09IEZYU1lTX011bChtX3BDaGFyUG9zW2kgLSAxXSwgZm9udHNpemUpIC8gMTAwMDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpKSB7CisgICAgICAgICAgICBtX3BDaGFyUG9zW2kgLSAxXSA9IGN1cnBvczsKKyAgICAgICAgfQorICAgICAgICBGWF9SRUNUIGNoYXJfcmVjdDsKKyAgICAgICAgcEZvbnQtPkdldENoYXJCQm94KGNoYXJjb2RlLCBjaGFyX3JlY3QsIGxldmVsKTsKKyAgICAgICAgRlhfRkxPQVQgY2hhcndpZHRoOworICAgICAgICBpZiAoIWJWZXJ0V3JpdGluZykgeworICAgICAgICAgICAgaWYgKG1pbl95ID4gY2hhcl9yZWN0LnRvcCkgeworICAgICAgICAgICAgICAgIG1pbl95ID0gKEZYX0ZMT0FUKWNoYXJfcmVjdC50b3A7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobWF4X3kgPCBjaGFyX3JlY3QudG9wKSB7CisgICAgICAgICAgICAgICAgbWF4X3kgPSAoRlhfRkxPQVQpY2hhcl9yZWN0LnRvcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtaW5feSA+IGNoYXJfcmVjdC5ib3R0b20pIHsKKyAgICAgICAgICAgICAgICBtaW5feSA9IChGWF9GTE9BVCljaGFyX3JlY3QuYm90dG9tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1heF95IDwgY2hhcl9yZWN0LmJvdHRvbSkgeworICAgICAgICAgICAgICAgIG1heF95ID0gKEZYX0ZMT0FUKWNoYXJfcmVjdC5ib3R0b207CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9GTE9BVCBjaGFyX2xlZnQgPSBjdXJwb3MgKyBjaGFyX3JlY3QubGVmdCAqIGZvbnRzaXplIC8gMTAwMDsKKyAgICAgICAgICAgIEZYX0ZMT0FUIGNoYXJfcmlnaHQgPSBjdXJwb3MgKyBjaGFyX3JlY3QucmlnaHQgKiBmb250c2l6ZSAvIDEwMDA7CisgICAgICAgICAgICBpZiAobWluX3ggPiBjaGFyX2xlZnQpIHsKKyAgICAgICAgICAgICAgICBtaW5feCA9IGNoYXJfbGVmdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYXhfeCA8IGNoYXJfbGVmdCkgeworICAgICAgICAgICAgICAgIG1heF94ID0gY2hhcl9sZWZ0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1pbl94ID4gY2hhcl9yaWdodCkgeworICAgICAgICAgICAgICAgIG1pbl94ID0gY2hhcl9yaWdodDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYXhfeCA8IGNoYXJfcmlnaHQpIHsKKyAgICAgICAgICAgICAgICBtYXhfeCA9IGNoYXJfcmlnaHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGFyd2lkdGggPSBwRm9udC0+R2V0Q2hhcldpZHRoRihjaGFyY29kZSwgbGV2ZWwpICogZm9udHNpemUgLyAxMDAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRlhfV09SRCBDSUQgPSBwQ0lERm9udC0+Q0lERnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsKKyAgICAgICAgICAgIHNob3J0IHZ4LCB2eTsKKyAgICAgICAgICAgIHBDSURGb250LT5HZXRWZXJ0T3JpZ2luKENJRCwgdngsIHZ5KTsKKyAgICAgICAgICAgIGNoYXJfcmVjdC5sZWZ0IC09IHZ4OworICAgICAgICAgICAgY2hhcl9yZWN0LnJpZ2h0IC09IHZ4OworICAgICAgICAgICAgY2hhcl9yZWN0LnRvcCAtPSB2eTsKKyAgICAgICAgICAgIGNoYXJfcmVjdC5ib3R0b20gLT0gdnk7CisgICAgICAgICAgICBpZiAobWluX3ggPiBjaGFyX3JlY3QubGVmdCkgeworICAgICAgICAgICAgICAgIG1pbl94ID0gKEZYX0ZMT0FUKWNoYXJfcmVjdC5sZWZ0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1heF94IDwgY2hhcl9yZWN0LmxlZnQpIHsKKyAgICAgICAgICAgICAgICBtYXhfeCA9IChGWF9GTE9BVCljaGFyX3JlY3QubGVmdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtaW5feCA+IGNoYXJfcmVjdC5yaWdodCkgeworICAgICAgICAgICAgICAgIG1pbl94ID0gKEZYX0ZMT0FUKWNoYXJfcmVjdC5yaWdodDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYXhfeCA8IGNoYXJfcmVjdC5yaWdodCkgeworICAgICAgICAgICAgICAgIG1heF94ID0gKEZYX0ZMT0FUKWNoYXJfcmVjdC5yaWdodDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZYX0ZMT0FUIGNoYXJfdG9wID0gY3VycG9zICsgY2hhcl9yZWN0LnRvcCAqIGZvbnRzaXplIC8gMTAwMDsKKyAgICAgICAgICAgIEZYX0ZMT0FUIGNoYXJfYm90dG9tID0gY3VycG9zICsgY2hhcl9yZWN0LmJvdHRvbSAqIGZvbnRzaXplIC8gMTAwMDsKKyAgICAgICAgICAgIGlmIChtaW5feSA+IGNoYXJfdG9wKSB7CisgICAgICAgICAgICAgICAgbWluX3kgPSBjaGFyX3RvcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYXhfeSA8IGNoYXJfdG9wKSB7CisgICAgICAgICAgICAgICAgbWF4X3kgPSBjaGFyX3RvcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtaW5feSA+IGNoYXJfYm90dG9tKSB7CisgICAgICAgICAgICAgICAgbWluX3kgPSBjaGFyX2JvdHRvbTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtYXhfeSA8IGNoYXJfYm90dG9tKSB7CisgICAgICAgICAgICAgICAgbWF4X3kgPSBjaGFyX2JvdHRvbTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoYXJ3aWR0aCA9IHBDSURGb250LT5HZXRWZXJ0V2lkdGgoQ0lEKSAqIGZvbnRzaXplIC8gMTAwMDsKKyAgICAgICAgfQorICAgICAgICBjdXJwb3MgKz0gY2hhcndpZHRoOworICAgICAgICBpZiAoY2hhcmNvZGUgPT0gJyAnICYmIChwQ0lERm9udCA9PSBOVUxMIHx8IHBDSURGb250LT5HZXRDaGFyU2l6ZSgzMikgPT0gMSkpIHsKKyAgICAgICAgICAgIGN1cnBvcyArPSBtX1RleHRTdGF0ZS5HZXRPYmplY3QoKS0+bV9Xb3JkU3BhY2U7CisgICAgICAgIH0KKyAgICAgICAgY3VycG9zICs9IG1fVGV4dFN0YXRlLkdldE9iamVjdCgpLT5tX0NoYXJTcGFjZTsKKyAgICB9CisgICAgaWYgKGJWZXJ0V3JpdGluZykgeworICAgICAgICBpZiAocFRleHRBZHZhbmNlWCkgeworICAgICAgICAgICAgKnBUZXh0QWR2YW5jZVggPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChwVGV4dEFkdmFuY2VZKSB7CisgICAgICAgICAgICAqcFRleHRBZHZhbmNlWSA9IGN1cnBvczsKKyAgICAgICAgfQorICAgICAgICBtaW5feCA9IG1pbl94ICogZm9udHNpemUgLyAxMDAwOworICAgICAgICBtYXhfeCA9IG1heF94ICogZm9udHNpemUgLyAxMDAwOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChwVGV4dEFkdmFuY2VYKSB7CisgICAgICAgICAgICAqcFRleHRBZHZhbmNlWCA9IEZYU1lTX011bChjdXJwb3MsIGhvcnpfc2NhbGUpOworICAgICAgICB9CisgICAgICAgIGlmIChwVGV4dEFkdmFuY2VZKSB7CisgICAgICAgICAgICAqcFRleHRBZHZhbmNlWSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgbWluX3kgPSBtaW5feSAqIGZvbnRzaXplIC8gMTAwMDsKKyAgICAgICAgbWF4X3kgPSBtYXhfeSAqIGZvbnRzaXplIC8gMTAwMDsKKyAgICB9CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXg7CisgICAgR2V0VGV4dE1hdHJpeCgmbWF0cml4KTsKKyAgICBtX0xlZnQgPSBtaW5feDsKKyAgICBtX1JpZ2h0ID0gbWF4X3g7CisgICAgbV9Cb3R0b20gPSBtaW5feTsKKyAgICBtX1RvcCA9IG1heF95OworICAgIG1hdHJpeC5UcmFuc2Zvcm1SZWN0KG1fTGVmdCwgbV9SaWdodCwgbV9Ub3AsIG1fQm90dG9tKTsKKyAgICBpbnQgdGV4dG1vZGUgPSBtX1RleHRTdGF0ZS5HZXRPYmplY3QoKS0+bV9UZXh0TW9kZTsKKyAgICBpZiAodGV4dG1vZGUgPT0gMSB8fCB0ZXh0bW9kZSA9PSAyIHx8IHRleHRtb2RlID09IDUgfHwgdGV4dG1vZGUgPT0gNikgeworICAgICAgICBGWF9GTE9BVCBoYWxmX3dpZHRoID0gbV9HcmFwaFN0YXRlLkdldE9iamVjdCgpLT5tX0xpbmVXaWR0aCAvIDI7CisgICAgICAgIG1fTGVmdCAtPSBoYWxmX3dpZHRoOworICAgICAgICBtX1JpZ2h0ICs9IGhhbGZfd2lkdGg7CisgICAgICAgIG1fVG9wICs9IGhhbGZfd2lkdGg7CisgICAgICAgIG1fQm90dG9tIC09IGhhbGZfd2lkdGg7CisgICAgfQorfQordm9pZCBDUERGX1RleHRPYmplY3Q6OkNhbGNDaGFyUG9zKEZYX0ZMT0FUKiBwUG9zQXJyYXkpIGNvbnN0Cit7CisgICAgRlhfRkxPQVQgY3VycG9zID0gMDsKKyAgICBpbnQgY291bnQgPSAwOworICAgIENQREZfRm9udCogcEZvbnQgPSBtX1RleHRTdGF0ZS5HZXRGb250KCk7CisgICAgRlhfQk9PTCBiVmVydFdyaXRpbmcgPSBGQUxTRTsKKyAgICBDUERGX0NJREZvbnQqIHBDSURGb250ID0gcEZvbnQtPkdldENJREZvbnQoKTsKKyAgICBpZiAocENJREZvbnQpIHsKKyAgICAgICAgYlZlcnRXcml0aW5nID0gcENJREZvbnQtPklzVmVydFdyaXRpbmcoKTsKKyAgICB9CisgICAgRlhfRkxPQVQgZm9udHNpemUgPSBtX1RleHRTdGF0ZS5HZXRGb250U2l6ZSgpOworICAgIGludCBpbmRleCA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX25DaGFyczsgaSArKykgeworICAgICAgICBGWF9EV09SRCBjaGFyY29kZSA9IG1fbkNoYXJzID09IDEgPyAoRlhfRFdPUkQpKEZYX1VJTlRQVFIpbV9wQ2hhckNvZGVzIDogbV9wQ2hhckNvZGVzW2ldOworICAgICAgICBpZiAoY2hhcmNvZGUgPT0gKEZYX0RXT1JEKSAtIDEpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHBQb3NBcnJheVtpbmRleCsrXSA9IGkgPyBtX3BDaGFyUG9zW2kgLSAxXSA6IDA7CisgICAgICAgIEZYX0ZMT0FUIGNoYXJ3aWR0aDsKKyAgICAgICAgaWYgKGJWZXJ0V3JpdGluZykgeworICAgICAgICAgICAgRlhfV09SRCBDSUQgPSBwQ0lERm9udC0+Q0lERnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsKKyAgICAgICAgICAgIGNoYXJ3aWR0aCA9IHBDSURGb250LT5HZXRWZXJ0V2lkdGgoQ0lEKSAqIGZvbnRzaXplIC8gMTAwMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNoYXJ3aWR0aCA9IHBGb250LT5HZXRDaGFyV2lkdGhGKGNoYXJjb2RlKSAqIGZvbnRzaXplIC8gMTAwMDsKKyAgICAgICAgfQorICAgICAgICBwUG9zQXJyYXlbaW5kZXhdID0gcFBvc0FycmF5W2luZGV4IC0gMV0gKyBjaGFyd2lkdGg7CisgICAgICAgIGluZGV4Kys7CisgICAgfQorfQordm9pZCBDUERGX1RleHRPYmplY3Q6OlRyYW5zZm9ybShjb25zdCBDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpCit7CisgICAgbV9UZXh0U3RhdGUuR2V0TW9kaWZ5KCk7CisgICAgQ0ZYX0FmZmluZU1hdHJpeCB0ZXh0X21hdHJpeDsKKyAgICBHZXRUZXh0TWF0cml4KCZ0ZXh0X21hdHJpeCk7CisgICAgdGV4dF9tYXRyaXguQ29uY2F0KG1hdHJpeCk7CisgICAgRlhfRkxPQVQqIHBUZXh0TWF0cml4ID0gbV9UZXh0U3RhdGUuR2V0TWF0cml4KCk7CisgICAgcFRleHRNYXRyaXhbMF0gPSB0ZXh0X21hdHJpeC5HZXRBKCk7CisgICAgcFRleHRNYXRyaXhbMV0gPSB0ZXh0X21hdHJpeC5HZXRDKCk7CisgICAgcFRleHRNYXRyaXhbMl0gPSB0ZXh0X21hdHJpeC5HZXRCKCk7CisgICAgcFRleHRNYXRyaXhbM10gPSB0ZXh0X21hdHJpeC5HZXREKCk7CisgICAgbV9Qb3NYID0gdGV4dF9tYXRyaXguR2V0RSgpOworICAgIG1fUG9zWSA9IHRleHRfbWF0cml4LkdldEYoKTsKKyAgICBDYWxjUG9zaXRpb25EYXRhKE5VTEwsIE5VTEwsIDApOworfQordm9pZCBDUERGX1RleHRPYmplY3Q6OlNldFBvc2l0aW9uKEZYX0ZMT0FUIHgsIEZYX0ZMT0FUIHkpCit7CisgICAgRlhfRkxPQVQgZHggPSB4IC0gbV9Qb3NYOworICAgIEZYX0ZMT0FUIGR5ID0geSAtIG1fUG9zWTsKKyAgICBtX1Bvc1ggPSB4OworICAgIG1fUG9zWSA9IHk7CisgICAgbV9MZWZ0ICs9IGR4OworICAgIG1fUmlnaHQgKz0gZHg7CisgICAgbV9Ub3AgKz0gZHk7CisgICAgbV9Cb3R0b20gKz0gZHk7Cit9Cit2b2lkIENQREZfVGV4dE9iamVjdDo6U2V0RGF0YShpbnQgbkNoYXJzLCBGWF9EV09SRCogcENoYXJDb2RlcywgRlhfRkxPQVQqIHBDaGFyUG9zLCBGWF9GTE9BVCB4LCBGWF9GTE9BVCB5KQoreworICAgIEFTU0VSVChtX25DaGFycyA9PSAwKTsKKyAgICBtX25DaGFycyA9IG5DaGFyczsKKyAgICBtX1Bvc1ggPSB4OworICAgIG1fUG9zWSA9IHk7CisgICAgaWYgKG5DaGFycyA9PSAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG5DaGFycyA9PSAxKSB7CisgICAgICAgIG1fcENoYXJDb2RlcyA9IChGWF9EV09SRCopKEZYX1VJTlRQVFIpICogcENoYXJDb2RlczsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3BDaGFyQ29kZXMgPSBGWF9BbGxvYyhGWF9EV09SRCwgbkNoYXJzKTsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wQ2hhckNvZGVzLCBwQ2hhckNvZGVzLCBzaXplb2YoRlhfRFdPUkQpKm5DaGFycyk7CisgICAgICAgIG1fcENoYXJQb3MgPSBGWF9BbGxvYyhGWF9GTE9BVCwgbkNoYXJzIC0gMSk7CisgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcENoYXJQb3MsIHBDaGFyUG9zLCBzaXplb2YoRlhfRkxPQVQpICogKG5DaGFycyAtIDEpKTsKKyAgICB9CisgICAgUmVjYWxjUG9zaXRpb25EYXRhKCk7Cit9Cit2b2lkIENQREZfVGV4dE9iamVjdDo6U2V0VGV4dFN0YXRlKENQREZfVGV4dFN0YXRlIFRleHRTdGF0ZSkKK3sKKyAgICBtX1RleHRTdGF0ZSA9IFRleHRTdGF0ZTsKKyAgICBDYWxjUG9zaXRpb25EYXRhKE5VTEwsIE5VTEwsIDApOworfQorQ1BERl9TaGFkaW5nT2JqZWN0OjpDUERGX1NoYWRpbmdPYmplY3QoKQoreworICAgIG1fcFNoYWRpbmcgPSBOVUxMOworICAgIG1fVHlwZSA9IFBERlBBR0VfU0hBRElORzsKK30KK0NQREZfU2hhZGluZ09iamVjdDo6fkNQREZfU2hhZGluZ09iamVjdCgpCit7CisgICAgQ1BERl9TaGFkaW5nUGF0dGVybiogcFNoYWRpbmcgPSBtX3BTaGFkaW5nOworICAgIGlmIChwU2hhZGluZyAmJiBwU2hhZGluZy0+bV9wRG9jdW1lbnQpIHsKKyAgICAgICAgcFNoYWRpbmctPm1fcERvY3VtZW50LT5HZXRQYWdlRGF0YSgpLT5SZWxlYXNlUGF0dGVybihwU2hhZGluZy0+bV9wU2hhZGluZ09iaik7CisgICAgfQorfQordm9pZCBDUERGX1NoYWRpbmdPYmplY3Q6OkNvcHlEYXRhKGNvbnN0IENQREZfUGFnZU9iamVjdCogcFNyYykKK3sKKyAgICBDUERGX1NoYWRpbmdPYmplY3QqIHBTcmNPYmogPSAoQ1BERl9TaGFkaW5nT2JqZWN0KilwU3JjOworICAgIG1fcFNoYWRpbmcgPSBwU3JjT2JqLT5tX3BTaGFkaW5nOworICAgIGlmIChtX3BTaGFkaW5nICYmIG1fcFNoYWRpbmctPm1fcERvY3VtZW50KSB7CisgICAgICAgIENQREZfRG9jUGFnZURhdGEqIHBEb2NQYWdlRGF0YSA9IG1fcFNoYWRpbmctPm1fcERvY3VtZW50LT5HZXRQYWdlRGF0YSgpOworICAgICAgICBtX3BTaGFkaW5nID0gKENQREZfU2hhZGluZ1BhdHRlcm4qKXBEb2NQYWdlRGF0YS0+R2V0UGF0dGVybihtX3BTaGFkaW5nLT5tX3BTaGFkaW5nT2JqLCBtX3BTaGFkaW5nLT5tX2JTaGFkaW5nT2JqLCAmbV9wU2hhZGluZy0+bV9QYXJlbnRNYXRyaXgpOworICAgIH0KKyAgICBtX01hdHJpeCA9IHBTcmNPYmotPm1fTWF0cml4OworfQordm9pZCBDUERGX1NoYWRpbmdPYmplY3Q6OlRyYW5zZm9ybShjb25zdCBDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpCit7CisgICAgaWYgKCFtX0NsaXBQYXRoLklzTnVsbCgpKSB7CisgICAgICAgIG1fQ2xpcFBhdGguR2V0TW9kaWZ5KCk7CisgICAgICAgIG1fQ2xpcFBhdGguVHJhbnNmb3JtKG1hdHJpeCk7CisgICAgfQorICAgIG1fTWF0cml4LkNvbmNhdChtYXRyaXgpOworICAgIGlmICghbV9DbGlwUGF0aC5Jc051bGwoKSkgeworICAgICAgICBDYWxjQm91bmRpbmdCb3goKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtYXRyaXguVHJhbnNmb3JtUmVjdChtX0xlZnQsIG1fUmlnaHQsIG1fVG9wLCBtX0JvdHRvbSk7CisgICAgfQorfQordm9pZCBDUERGX1NoYWRpbmdPYmplY3Q6OkNhbGNCb3VuZGluZ0JveCgpCit7CisgICAgaWYgKG1fQ2xpcFBhdGguSXNOdWxsKCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDRlhfRmxvYXRSZWN0IHJlY3QgPSBtX0NsaXBQYXRoLkdldENsaXBCb3goKTsKKyAgICBtX0xlZnQgPSByZWN0LmxlZnQ7CisgICAgbV9Cb3R0b20gPSByZWN0LmJvdHRvbTsKKyAgICBtX1JpZ2h0ID0gcmVjdC5yaWdodDsKKyAgICBtX1RvcCA9IHJlY3QudG9wOworfQorQ1BERl9Gb3JtT2JqZWN0Ojp+Q1BERl9Gb3JtT2JqZWN0KCkKK3sKKyAgICBpZiAobV9wRm9ybSkgeworICAgICAgICBkZWxldGUgbV9wRm9ybTsKKyAgICB9Cit9Cit2b2lkIENQREZfRm9ybU9iamVjdDo6VHJhbnNmb3JtKGNvbnN0IENGWF9BZmZpbmVNYXRyaXgmIG1hdHJpeCkKK3sKKyAgICBtX0Zvcm1NYXRyaXguQ29uY2F0KG1hdHJpeCk7CisgICAgQ2FsY0JvdW5kaW5nQm94KCk7Cit9Cit2b2lkIENQREZfRm9ybU9iamVjdDo6Q29weURhdGEoY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwU3JjKQoreworICAgIGNvbnN0IENQREZfRm9ybU9iamVjdCogcFNyY09iaiA9IChjb25zdCBDUERGX0Zvcm1PYmplY3QqKXBTcmM7CisgICAgaWYgKG1fcEZvcm0pIHsKKyAgICAgICAgZGVsZXRlIG1fcEZvcm07CisgICAgfQorICAgIG1fcEZvcm0gPSBwU3JjT2JqLT5tX3BGb3JtLT5DbG9uZSgpOworICAgIG1fRm9ybU1hdHJpeCA9IHBTcmNPYmotPm1fRm9ybU1hdHJpeDsKK30KK3ZvaWQgQ1BERl9Gb3JtT2JqZWN0OjpDYWxjQm91bmRpbmdCb3goKQoreworICAgIENGWF9GbG9hdFJlY3QgZm9ybV9yZWN0ID0gbV9wRm9ybS0+Q2FsY0JvdW5kaW5nQm94KCk7CisgICAgZm9ybV9yZWN0LlRyYW5zZm9ybSgmbV9Gb3JtTWF0cml4KTsKKyAgICBtX0xlZnQgPSBmb3JtX3JlY3QubGVmdDsKKyAgICBtX0JvdHRvbSA9IGZvcm1fcmVjdC5ib3R0b207CisgICAgbV9SaWdodCA9IGZvcm1fcmVjdC5yaWdodDsKKyAgICBtX1RvcCA9IGZvcm1fcmVjdC50b3A7Cit9CitDUERGX1BhZ2VPYmplY3RzOjpDUERGX1BhZ2VPYmplY3RzKEZYX0JPT0wgYlJlbGVhc2VNZW1iZXJzKSA6IG1fT2JqZWN0TGlzdCgxMjgpCit7CisgICAgbV9iQmFja2dyb3VuZEFscGhhTmVlZGVkID0gRkFMU0U7CisgICAgbV9iUmVsZWFzZU1lbWJlcnMgPSBiUmVsZWFzZU1lbWJlcnM7CisgICAgbV9QYXJzZVN0YXRlID0gUERGX0NPTlRFTlRfTk9UX1BBUlNFRDsKKyAgICBtX3BQYXJzZXIgPSBOVUxMOworICAgIG1fcEZvcm1TdHJlYW0gPSBOVUxMOworICAgIG1fcFJlc291cmNlcyA9IE5VTEw7Cit9CitDUERGX1BhZ2VPYmplY3RzOjp+Q1BERl9QYWdlT2JqZWN0cygpCit7CisgICAgaWYgKG1fcFBhcnNlcikgeworICAgICAgICBkZWxldGUgbV9wUGFyc2VyOworICAgIH0KKyAgICBpZiAoIW1fYlJlbGVhc2VNZW1iZXJzKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfUE9TSVRJT04gcG9zID0gbV9PYmplY3RMaXN0LkdldEhlYWRQb3NpdGlvbigpOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgQ1BERl9QYWdlT2JqZWN0KiBwUGFnZU9iaiA9IChDUERGX1BhZ2VPYmplY3QqKW1fT2JqZWN0TGlzdC5HZXROZXh0KHBvcyk7CisgICAgICAgIGlmICghcFBhZ2VPYmopIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHBQYWdlT2JqLT5SZWxlYXNlKCk7CisgICAgfQorfQordm9pZCBDUERGX1BhZ2VPYmplY3RzOjpDb250aW51ZVBhcnNlKElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIGlmIChtX3BQYXJzZXIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcFBhcnNlci0+Q29udGludWUocFBhdXNlKTsKKyAgICBpZiAobV9wUGFyc2VyLT5HZXRTdGF0dXMoKSA9PSBDUERGX0NvbnRlbnRQYXJzZXI6OkRvbmUpIHsKKyAgICAgICAgbV9QYXJzZVN0YXRlID0gUERGX0NPTlRFTlRfUEFSU0VEOworICAgICAgICBkZWxldGUgbV9wUGFyc2VyOworICAgICAgICBtX3BQYXJzZXIgPSBOVUxMOworICAgIH0KK30KK2ludCBDUERGX1BhZ2VPYmplY3RzOjpFc3RpbWF0ZVBhcnNlUHJvZ3Jlc3MoKSBjb25zdAoreworICAgIGlmIChtX3BQYXJzZXIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gbV9QYXJzZVN0YXRlID09IFBERl9DT05URU5UX1BBUlNFRCA/IDEwMCA6IDA7CisgICAgfQorICAgIHJldHVybiBtX3BQYXJzZXItPkVzdGltYXRlUHJvZ3Jlc3MoKTsKK30KK0ZYX1BPU0lUSU9OIENQREZfUGFnZU9iamVjdHM6Okluc2VydE9iamVjdChGWF9QT1NJVElPTiBwb3NJbnNlcnRBZnRlciwgQ1BERl9QYWdlT2JqZWN0KiBwTmV3T2JqZWN0KQoreworICAgIGlmIChwb3NJbnNlcnRBZnRlciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBtX09iamVjdExpc3QuQWRkSGVhZChwTmV3T2JqZWN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gbV9PYmplY3RMaXN0Lkluc2VydEFmdGVyKHBvc0luc2VydEFmdGVyLCBwTmV3T2JqZWN0KTsKKyAgICB9Cit9CitpbnQgQ1BERl9QYWdlT2JqZWN0czo6R2V0T2JqZWN0SW5kZXgoQ1BERl9QYWdlT2JqZWN0KiBwT2JqKSBjb25zdAoreworICAgIGludCBpbmRleCA9IDA7CisgICAgRlhfUE9TSVRJT04gcG9zID0gbV9PYmplY3RMaXN0LkdldEhlYWRQb3NpdGlvbigpOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgQ1BERl9QYWdlT2JqZWN0KiBwVGhpc09iaiA9IChDUERGX1BhZ2VPYmplY3QqKW1fT2JqZWN0TGlzdC5HZXROZXh0KHBvcyk7CisgICAgICAgIGlmIChwVGhpc09iaiA9PSBwT2JqKSB7CisgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgIH0KKyAgICAgICAgaW5kZXggKys7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KK0NQREZfUGFnZU9iamVjdCogQ1BERl9QYWdlT2JqZWN0czo6R2V0T2JqZWN0QnlJbmRleChpbnQgaW5kZXgpIGNvbnN0Cit7CisgICAgRlhfUE9TSVRJT04gcG9zID0gbV9PYmplY3RMaXN0LkZpbmRJbmRleChpbmRleCk7CisgICAgaWYgKHBvcyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gKENQREZfUGFnZU9iamVjdCopbV9PYmplY3RMaXN0LkdldEF0KHBvcyk7Cit9Cit2b2lkIENQREZfUGFnZU9iamVjdHM6OlRyYW5zZm9ybShjb25zdCBDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpCit7CisgICAgRlhfUE9TSVRJT04gcG9zID0gbV9PYmplY3RMaXN0LkdldEhlYWRQb3NpdGlvbigpOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgQ1BERl9QYWdlT2JqZWN0KiBwT2JqID0gKENQREZfUGFnZU9iamVjdCopbV9PYmplY3RMaXN0LkdldE5leHQocG9zKTsKKyAgICAgICAgcE9iai0+VHJhbnNmb3JtKG1hdHJpeCk7CisgICAgfQorfQorQ0ZYX0Zsb2F0UmVjdCBDUERGX1BhZ2VPYmplY3RzOjpDYWxjQm91bmRpbmdCb3goKSBjb25zdAoreworICAgIGlmIChtX09iamVjdExpc3QuR2V0Q291bnQoKSA9PSAwKSB7CisgICAgICAgIHJldHVybiBDRlhfRmxvYXRSZWN0KDAsIDAsIDAsIDApOworICAgIH0KKyAgICBGWF9GTE9BVCBsZWZ0LCByaWdodCwgdG9wLCBib3R0b207CisgICAgbGVmdCA9IGJvdHRvbSA9IDEwMDAwMDAgKiAxLjBmOworICAgIHJpZ2h0ID0gdG9wID0gLTEwMDAwMDAgKiAxLjBmOworICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fT2JqZWN0TGlzdC5HZXRIZWFkUG9zaXRpb24oKTsKKyAgICB3aGlsZSAocG9zKSB7CisgICAgICAgIENQREZfUGFnZU9iamVjdCogcE9iaiA9IChDUERGX1BhZ2VPYmplY3QqKW1fT2JqZWN0TGlzdC5HZXROZXh0KHBvcyk7CisgICAgICAgIGlmIChsZWZ0ID4gcE9iai0+bV9MZWZ0KSB7CisgICAgICAgICAgICBsZWZ0ID0gcE9iai0+bV9MZWZ0OworICAgICAgICB9CisgICAgICAgIGlmIChyaWdodCA8IHBPYmotPm1fUmlnaHQpIHsKKyAgICAgICAgICAgIHJpZ2h0ID0gcE9iai0+bV9SaWdodDsKKyAgICAgICAgfQorICAgICAgICBpZiAodG9wIDwgcE9iai0+bV9Ub3ApIHsKKyAgICAgICAgICAgIHRvcCA9IHBPYmotPm1fVG9wOworICAgICAgICB9CisgICAgICAgIGlmIChib3R0b20gPiBwT2JqLT5tX0JvdHRvbSkgeworICAgICAgICAgICAgYm90dG9tID0gcE9iai0+bV9Cb3R0b207CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIENGWF9GbG9hdFJlY3QobGVmdCwgYm90dG9tLCByaWdodCwgdG9wKTsKK30KK3ZvaWQgQ1BERl9QYWdlT2JqZWN0czo6TG9hZFRyYW5zSW5mbygpCit7CisgICAgaWYgKG1fcEZvcm1EaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBHcm91cCA9IG1fcEZvcm1EaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJHcm91cCIpKTsKKyAgICBpZiAocEdyb3VwID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocEdyb3VwLT5HZXRTdHJpbmcoRlhfQlNUUkMoIlMiKSkgIT0gRlhfQlNUUkMoIlRyYW5zcGFyZW5jeSIpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9UcmFuc3BhcmVuY3kgfD0gUERGVFJBTlNfR1JPVVA7CisgICAgaWYgKHBHcm91cC0+R2V0SW50ZWdlcihGWF9CU1RSQygiSSIpKSkgeworICAgICAgICBtX1RyYW5zcGFyZW5jeSB8PSBQREZUUkFOU19JU09MQVRFRDsKKyAgICB9CisgICAgaWYgKHBHcm91cC0+R2V0SW50ZWdlcihGWF9CU1RSQygiSyIpKSkgeworICAgICAgICBtX1RyYW5zcGFyZW5jeSB8PSBQREZUUkFOU19LTk9DS09VVDsKKyAgICB9Cit9Cit2b2lkIENQREZfUGFnZU9iamVjdHM6OkNsZWFyQ2FjaGVPYmplY3RzKCkKK3sKKyAgICBtX1BhcnNlU3RhdGUgPSBQREZfQ09OVEVOVF9OT1RfUEFSU0VEOworICAgIGlmIChtX3BQYXJzZXIpIHsKKyAgICAgICAgZGVsZXRlIG1fcFBhcnNlcjsKKyAgICB9CisgICAgbV9wUGFyc2VyID0gTlVMTDsKKyAgICBpZiAobV9iUmVsZWFzZU1lbWJlcnMpIHsKKyAgICAgICAgRlhfUE9TSVRJT04gcG9zID0gbV9PYmplY3RMaXN0LkdldEhlYWRQb3NpdGlvbigpOworICAgICAgICB3aGlsZSAocG9zKSB7CisgICAgICAgICAgICBDUERGX1BhZ2VPYmplY3QqIHBQYWdlT2JqID0gKENQREZfUGFnZU9iamVjdCopbV9PYmplY3RMaXN0LkdldE5leHQocG9zKTsKKyAgICAgICAgICAgIGlmICghcFBhZ2VPYmopIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBQYWdlT2JqLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9PYmplY3RMaXN0LlJlbW92ZUFsbCgpOworfQorQ1BERl9QYWdlOjpDUERGX1BhZ2UoKQoreworICAgIG1fcFBhZ2VSZW5kZXIgPSBOVUxMOworfQordm9pZCBDUERGX1BhZ2U6OkxvYWQoQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDUERGX0RpY3Rpb25hcnkqIHBQYWdlRGljdCwgRlhfQk9PTCBiUGFnZUNhY2hlKQoreworICAgIG1fcERvY3VtZW50ID0gKENQREZfRG9jdW1lbnQqKXBEb2N1bWVudDsKKyAgICBtX3BGb3JtRGljdCA9IHBQYWdlRGljdDsKKyAgICBpZiAoYlBhZ2VDYWNoZSkgeworICAgICAgICBtX3BQYWdlUmVuZGVyID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRSZW5kZXJNb2R1bGUoKS0+Q3JlYXRlUGFnZUNhY2hlKHRoaXMpOworICAgIH0KKyAgICBpZiAocFBhZ2VEaWN0ID09IE5VTEwpIHsKKyAgICAgICAgbV9QYWdlV2lkdGggPSBtX1BhZ2VIZWlnaHQgPSAxMDAgKiAxLjBmOworICAgICAgICBtX3BQYWdlUmVzb3VyY2VzID0gbV9wUmVzb3VyY2VzID0gTlVMTDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3BSZXNvdXJjZXMgPSBHZXRQYWdlQXR0cihGWF9CU1RSQygiUmVzb3VyY2VzIikpLT5HZXREaWN0KCk7CisgICAgbV9wUGFnZVJlc291cmNlcyA9IG1fcFJlc291cmNlczsKKyAgICBDUERGX09iamVjdCogcFJvdGF0ZSA9IEdldFBhZ2VBdHRyKEZYX0JTVFJDKCJSb3RhdGUiKSk7CisgICAgaW50IHJvdGF0ZSA9IDA7CisgICAgaWYgKHBSb3RhdGUpIHsKKyAgICAgICAgcm90YXRlID0gcFJvdGF0ZS0+R2V0SW50ZWdlcigpIC8gOTAgJSA0OworICAgIH0KKyAgICBpZiAocm90YXRlIDwgMCkgeworICAgICAgICByb3RhdGUgKz0gNDsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcE1lZGlhQm94LCAqcENyb3BCb3g7CisgICAgcE1lZGlhQm94ID0gKENQREZfQXJyYXkqKUdldFBhZ2VBdHRyKEZYX0JTVFJDKCJNZWRpYUJveCIpKTsKKyAgICBDRlhfRmxvYXRSZWN0IG1lZGlhYm94OworICAgIGlmIChwTWVkaWFCb3gpIHsKKyAgICAgICAgbWVkaWFib3ggPSBwTWVkaWFCb3gtPkdldFJlY3QoKTsKKyAgICAgICAgbWVkaWFib3guTm9ybWFsaXplKCk7CisgICAgfQorICAgIGlmIChtZWRpYWJveC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgbWVkaWFib3ggPSBDRlhfRmxvYXRSZWN0KDAsIDAsIDYxMiwgNzkyKTsKKyAgICB9CisgICAgcENyb3BCb3ggPSAoQ1BERl9BcnJheSopR2V0UGFnZUF0dHIoRlhfQlNUUkMoIkNyb3BCb3giKSk7CisgICAgaWYgKHBDcm9wQm94KSB7CisgICAgICAgIG1fQkJveCA9IHBDcm9wQm94LT5HZXRSZWN0KCk7CisgICAgICAgIG1fQkJveC5Ob3JtYWxpemUoKTsKKyAgICB9CisgICAgaWYgKG1fQkJveC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgbV9CQm94ID0gbWVkaWFib3g7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9CQm94LkludGVyc2VjdChtZWRpYWJveCk7CisgICAgfQorICAgIGlmIChyb3RhdGUgJSAyKSB7CisgICAgICAgIG1fUGFnZUhlaWdodCA9IG1fQkJveC5yaWdodCAtIG1fQkJveC5sZWZ0OworICAgICAgICBtX1BhZ2VXaWR0aCA9IG1fQkJveC50b3AgLSBtX0JCb3guYm90dG9tOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fUGFnZVdpZHRoID0gbV9CQm94LnJpZ2h0IC0gbV9CQm94LmxlZnQ7CisgICAgICAgIG1fUGFnZUhlaWdodCA9IG1fQkJveC50b3AgLSBtX0JCb3guYm90dG9tOworICAgIH0KKyAgICBzd2l0Y2ggKHJvdGF0ZSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBtX1BhZ2VNYXRyaXguU2V0KDEuMGYsIDAsIDAsIDEuMGYsIC1tX0JCb3gubGVmdCwgLW1fQkJveC5ib3R0b20pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIG1fUGFnZU1hdHJpeC5TZXQoMCwgLTEuMGYsIDEuMGYsIDAsIC1tX0JCb3guYm90dG9tLCBtX0JCb3gucmlnaHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIG1fUGFnZU1hdHJpeC5TZXQoLTEuMGYsIDAsIDAsIC0xLjBmLCBtX0JCb3gucmlnaHQsIG1fQkJveC50b3ApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIG1fUGFnZU1hdHJpeC5TZXQoMCwgMS4wZiwgLTEuMGYsIDAsIG1fQkJveC50b3AsIC1tX0JCb3gubGVmdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgbV9UcmFuc3BhcmVuY3kgPSBQREZUUkFOU19JU09MQVRFRDsKKyAgICBMb2FkVHJhbnNJbmZvKCk7Cit9Cit2b2lkIENQREZfUGFnZTo6U3RhcnRQYXJzZShDUERGX1BhcnNlT3B0aW9ucyogcE9wdGlvbnMsIEZYX0JPT0wgYlJlUGFyc2UpCit7CisgICAgaWYgKGJSZVBhcnNlKSB7CisgICAgICAgIENsZWFyQ2FjaGVPYmplY3RzKCk7CisgICAgfQorICAgIGlmIChtX1BhcnNlU3RhdGUgPT0gUERGX0NPTlRFTlRfUEFSU0VEIHx8IG1fUGFyc2VTdGF0ZSA9PSBQREZfQ09OVEVOVF9QQVJTSU5HKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wUGFyc2VyID0gRlhfTkVXIENQREZfQ29udGVudFBhcnNlcjsKKyAgICBtX3BQYXJzZXItPlN0YXJ0KHRoaXMsIHBPcHRpb25zKTsKKyAgICBtX1BhcnNlU3RhdGUgPSBQREZfQ09OVEVOVF9QQVJTSU5HOworfQordm9pZCBDUERGX1BhZ2U6OlBhcnNlQ29udGVudChDUERGX1BhcnNlT3B0aW9ucyogcE9wdGlvbnMsIEZYX0JPT0wgYlJlUGFyc2UpCit7CisgICAgU3RhcnRQYXJzZShwT3B0aW9ucywgYlJlUGFyc2UpOworICAgIENvbnRpbnVlUGFyc2UoTlVMTCk7Cit9CitDUERGX1BhZ2U6On5DUERGX1BhZ2UoKQoreworICAgIGlmIChtX3BQYWdlUmVuZGVyKSB7CisgICAgICAgIENQREZfUmVuZGVyTW9kdWxlRGVmKiBwTW9kdWxlID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRSZW5kZXJNb2R1bGUoKTsKKyAgICAgICAgcE1vZHVsZS0+RGVzdHJveVBhZ2VDYWNoZShtX3BQYWdlUmVuZGVyKTsKKyAgICB9Cit9CitDUERGX09iamVjdCogRlBERkFQSV9HZXRQYWdlQXR0cihDUERGX0RpY3Rpb25hcnkqIHBQYWdlRGljdCwgRlhfQlNUUiBuYW1lKQoreworICAgIGludCBsZXZlbCA9IDA7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgQ1BERl9PYmplY3QqIHBPYmogPSBwUGFnZURpY3QtPkdldEVsZW1lbnRWYWx1ZShuYW1lKTsKKyAgICAgICAgaWYgKHBPYmopIHsKKyAgICAgICAgICAgIHJldHVybiBwT2JqOworICAgICAgICB9CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcFBhcmVudCA9IHBQYWdlRGljdC0+R2V0RGljdChGWF9CU1RSQygiUGFyZW50IikpOworICAgICAgICBpZiAoIXBQYXJlbnQgfHwgcFBhcmVudCA9PSBwUGFnZURpY3QpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHBQYWdlRGljdCA9IHBQYXJlbnQ7CisgICAgICAgIGxldmVsICsrOworICAgICAgICBpZiAobGV2ZWwgPT0gMTAwMCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9Cit9CitDUERGX09iamVjdCogQ1BERl9QYWdlOjpHZXRQYWdlQXR0cihGWF9CU1RSIG5hbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZQREZBUElfR2V0UGFnZUF0dHIobV9wRm9ybURpY3QsIG5hbWUpOworfQorQ1BERl9Gb3JtOjpDUERGX0Zvcm0oQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZVJlc291cmNlcywgQ1BERl9TdHJlYW0qIHBGb3JtU3RyZWFtLCBDUERGX0RpY3Rpb25hcnkqIHBQYXJlbnRSZXNvdXJjZXMpCit7CisgICAgbV9wRG9jdW1lbnQgPSBwRG9jOworICAgIG1fcEZvcm1TdHJlYW0gPSBwRm9ybVN0cmVhbTsKKyAgICBtX3BGb3JtRGljdCA9IHBGb3JtU3RyZWFtLT5HZXREaWN0KCk7CisgICAgbV9wUmVzb3VyY2VzID0gbV9wRm9ybURpY3QtPkdldERpY3QoRlhfQlNUUkMoIlJlc291cmNlcyIpKTsKKyAgICBtX3BQYWdlUmVzb3VyY2VzID0gcFBhZ2VSZXNvdXJjZXM7CisgICAgaWYgKG1fcFJlc291cmNlcyA9PSBOVUxMKSB7CisgICAgICAgIG1fcFJlc291cmNlcyA9IHBQYXJlbnRSZXNvdXJjZXM7CisgICAgfQorICAgIGlmIChtX3BSZXNvdXJjZXMgPT0gTlVMTCkgeworICAgICAgICBtX3BSZXNvdXJjZXMgPSBwUGFnZVJlc291cmNlczsKKyAgICB9CisgICAgbV9UcmFuc3BhcmVuY3kgPSAwOworICAgIExvYWRUcmFuc0luZm8oKTsKK30KK0NQREZfRm9ybTo6fkNQREZfRm9ybSgpCit7Cit9Cit2b2lkIENQREZfRm9ybTo6U3RhcnRQYXJzZShDUERGX0FsbFN0YXRlcyogcEdyYXBoaWNTdGF0ZXMsIENGWF9BZmZpbmVNYXRyaXgqIHBQYXJlbnRNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX1R5cGUzQ2hhciogcFR5cGUzQ2hhciwgQ1BERl9QYXJzZU9wdGlvbnMqIHBPcHRpb25zLCBpbnQgbGV2ZWwpCit7CisgICAgaWYgKG1fUGFyc2VTdGF0ZSA9PSBQREZfQ09OVEVOVF9QQVJTRUQgfHwgbV9QYXJzZVN0YXRlID09IFBERl9DT05URU5UX1BBUlNJTkcpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3BQYXJzZXIgPSBGWF9ORVcgQ1BERl9Db250ZW50UGFyc2VyOworICAgIG1fcFBhcnNlci0+U3RhcnQodGhpcywgcEdyYXBoaWNTdGF0ZXMsIHBQYXJlbnRNYXRyaXgsIHBUeXBlM0NoYXIsIHBPcHRpb25zLCBsZXZlbCk7CisgICAgbV9QYXJzZVN0YXRlID0gUERGX0NPTlRFTlRfUEFSU0lORzsKK30KK3ZvaWQgQ1BERl9Gb3JtOjpQYXJzZUNvbnRlbnQoQ1BERl9BbGxTdGF0ZXMqIHBHcmFwaGljU3RhdGVzLCBDRlhfQWZmaW5lTWF0cml4KiBwUGFyZW50TWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX1R5cGUzQ2hhciogcFR5cGUzQ2hhciwgQ1BERl9QYXJzZU9wdGlvbnMqIHBPcHRpb25zLCBpbnQgbGV2ZWwpCit7CisgICAgU3RhcnRQYXJzZShwR3JhcGhpY1N0YXRlcywgcFBhcmVudE1hdHJpeCwgcFR5cGUzQ2hhciwgcE9wdGlvbnMsIGxldmVsKTsKKyAgICBDb250aW51ZVBhcnNlKE5VTEwpOworfQorQ1BERl9Gb3JtKiBDUERGX0Zvcm06OkNsb25lKCkgY29uc3QKK3sKKyAgICBDUERGX0Zvcm0qIHBDbG9uZSA9IEZYX05FVyBDUERGX0Zvcm0obV9wRG9jdW1lbnQsIG1fcFBhZ2VSZXNvdXJjZXMsIG1fcEZvcm1TdHJlYW0sIG1fcFJlc291cmNlcyk7CisgICAgRlhfUE9TSVRJT04gcG9zID0gbV9PYmplY3RMaXN0LkdldEhlYWRQb3NpdGlvbigpOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgQ1BERl9QYWdlT2JqZWN0KiBwT2JqID0gKENQREZfUGFnZU9iamVjdCopbV9PYmplY3RMaXN0LkdldE5leHQocG9zKTsKKyAgICAgICAgcENsb25lLT5tX09iamVjdExpc3QuQWRkVGFpbChwT2JqLT5DbG9uZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIHBDbG9uZTsKK30KK3ZvaWQgQ1BERl9QYWdlOjpHZXREaXNwbGF5TWF0cml4KENGWF9BZmZpbmVNYXRyaXgmIG1hdHJpeCwgaW50IHhQb3MsIGludCB5UG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHhTaXplLCBpbnQgeVNpemUsIGludCBpUm90YXRlKSBjb25zdAoreworICAgIGlmIChtX1BhZ2VXaWR0aCA9PSAwIHx8IG1fUGFnZUhlaWdodCA9PSAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBkaXNwbGF5X21hdHJpeDsKKyAgICBpbnQgeDAsIHkwLCB4MSwgeTEsIHgyLCB5MjsKKyAgICBpUm90YXRlICU9IDQ7CisgICAgc3dpdGNoIChpUm90YXRlKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIHgwID0geFBvczsKKyAgICAgICAgICAgIHkwID0geVBvcyArIHlTaXplOworICAgICAgICAgICAgeDEgPSB4UG9zOworICAgICAgICAgICAgeTEgPSB5UG9zOworICAgICAgICAgICAgeDIgPSB4UG9zICsgeFNpemU7CisgICAgICAgICAgICB5MiA9IHlQb3MgKyB5U2l6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICB4MCA9IHhQb3M7CisgICAgICAgICAgICB5MCA9IHlQb3M7CisgICAgICAgICAgICB4MSA9IHhQb3MgKyB4U2l6ZTsKKyAgICAgICAgICAgIHkxID0geVBvczsKKyAgICAgICAgICAgIHgyID0geFBvczsKKyAgICAgICAgICAgIHkyID0geVBvcyArIHlTaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHgwID0geFBvcyArIHhTaXplOworICAgICAgICAgICAgeTAgPSB5UG9zOworICAgICAgICAgICAgeDEgPSB4UG9zICsgeFNpemU7CisgICAgICAgICAgICB5MSA9IHlQb3MgKyB5U2l6ZTsKKyAgICAgICAgICAgIHgyID0geFBvczsKKyAgICAgICAgICAgIHkyID0geVBvczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICB4MCA9IHhQb3MgKyB4U2l6ZTsKKyAgICAgICAgICAgIHkwID0geVBvcyArIHlTaXplOworICAgICAgICAgICAgeDEgPSB4UG9zOworICAgICAgICAgICAgeTEgPSB5UG9zICsgeVNpemU7CisgICAgICAgICAgICB4MiA9IHhQb3MgKyB4U2l6ZTsKKyAgICAgICAgICAgIHkyID0geVBvczsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkaXNwbGF5X21hdHJpeC5TZXQoRlhTWVNfRGl2KChGWF9GTE9BVCkoeDIgLSB4MCksIG1fUGFnZVdpZHRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlhTWVNfRGl2KChGWF9GTE9BVCkoeTIgLSB5MCksIG1fUGFnZVdpZHRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlhTWVNfRGl2KChGWF9GTE9BVCkoeDEgLSB4MCksIG1fUGFnZUhlaWdodCksCisgICAgICAgICAgICAgICAgICAgICAgIEZYU1lTX0RpdigoRlhfRkxPQVQpKHkxIC0geTApLCBtX1BhZ2VIZWlnaHQpLAorICAgICAgICAgICAgICAgICAgICAgICAoRlhfRkxPQVQpeDAsIChGWF9GTE9BVCl5MCk7CisgICAgbWF0cml4ID0gbV9QYWdlTWF0cml4OworICAgIG1hdHJpeC5Db25jYXQoZGlzcGxheV9tYXRyaXgpOworfQorQ1BERl9QYXJzZU9wdGlvbnM6OkNQREZfUGFyc2VPcHRpb25zKCkKK3sKKyAgICBtX2JUZXh0T25seSA9IEZBTFNFOworICAgIG1fYk1hcmtlZENvbnRlbnQgPSBUUlVFOworICAgIG1fYlNlcGFyYXRlRm9ybSA9IFRSVUU7CisgICAgbV9iRGVjb2RlSW5saW5lSW1hZ2UgPSBGQUxTRTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYWdlL2ZwZGZfcGFnZV9jb2xvcnMuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhZ2UvZnBkZl9wYWdlX2NvbG9ycy5jcHAKaW5kZXggNDRiNGZjMC4uOGMyNzRiMiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhZ2UvZnBkZl9wYWdlX2NvbG9ycy5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhZ2UvZnBkZl9wYWdlX2NvbG9ycy5jcHAKQEAgLTEsMTQwMSArMSwxNDAxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgiDQotI2luY2x1ZGUgInBhZ2VpbnQuaCINCi0jaW5jbHVkZSA8bGltaXRzLmg+DQotdm9pZCBzUkdCX3RvX0Fkb2JlQ01ZSyhGWF9GTE9BVCBSLCBGWF9GTE9BVCBHLCBGWF9GTE9BVCBCLCBGWF9GTE9BVCYgYywgRlhfRkxPQVQmIG0sIEZYX0ZMT0FUJiB5LCBGWF9GTE9BVCYgaykNCi17DQotICAgIGMgPSAxLjBmIC0gUjsNCi0gICAgbSA9IDEuMGYgLSBHOw0KLSAgICB5ID0gMS4wZiAtIEI7DQotICAgIGsgPSBjOw0KLSAgICBpZiAobSA8IGspIHsNCi0gICAgICAgIGsgPSBtOw0KLSAgICB9DQotICAgIGlmICh5IDwgaykgew0KLSAgICAgICAgayA9IHk7DQotICAgIH0NCi19DQotQ1BERl9EZXZpY2VDUzo6Q1BERl9EZXZpY2VDUyhpbnQgZmFtaWx5KQ0KLXsNCi0gICAgbV9GYW1pbHkgPSBmYW1pbHk7DQotICAgIGlmIChtX0ZhbWlseSA9PSBQREZDU19ERVZJQ0VSR0IpIHsNCi0gICAgICAgIG1fbkNvbXBvbmVudHMgPSAzOw0KLSAgICB9IGVsc2UgaWYgKG1fRmFtaWx5ID09IFBERkNTX0RFVklDRUdSQVkpIHsNCi0gICAgICAgIG1fbkNvbXBvbmVudHMgPSAxOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9uQ29tcG9uZW50cyA9IDQ7DQotICAgIH0NCi19DQotRlhfQk9PTCBDUERGX0RldmljZUNTOjpHZXRSR0IoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUJiBSLCBGWF9GTE9BVCYgRywgRlhfRkxPQVQmIEIpIGNvbnN0DQotew0KLSAgICBpZiAobV9GYW1pbHkgPT0gUERGQ1NfREVWSUNFUkdCKSB7DQotICAgICAgICBSID0gcEJ1ZlswXTsNCi0gICAgICAgIGlmIChSIDwgMCkgew0KLSAgICAgICAgICAgIFIgPSAwOw0KLSAgICAgICAgfSBlbHNlIGlmIChSID4gMSkgew0KLSAgICAgICAgICAgIFIgPSAxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRyA9IHBCdWZbMV07DQotICAgICAgICBpZiAoRyA8IDApIHsNCi0gICAgICAgICAgICBHID0gMDsNCi0gICAgICAgIH0gZWxzZSBpZiAoRyA+IDEpIHsNCi0gICAgICAgICAgICBHID0gMTsNCi0gICAgICAgIH0NCi0gICAgICAgIEIgPSBwQnVmWzJdOw0KLSAgICAgICAgaWYgKEIgPCAwKSB7DQotICAgICAgICAgICAgQiA9IDA7DQotICAgICAgICB9IGVsc2UgaWYgKEIgPiAxKSB7DQotICAgICAgICAgICAgQiA9IDE7DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZiAobV9GYW1pbHkgPT0gUERGQ1NfREVWSUNFR1JBWSkgew0KLSAgICAgICAgUiA9ICpwQnVmOw0KLSAgICAgICAgaWYgKFIgPCAwKSB7DQotICAgICAgICAgICAgUiA9IDA7DQotICAgICAgICB9IGVsc2UgaWYgKFIgPiAxKSB7DQotICAgICAgICAgICAgUiA9IDE7DQotICAgICAgICB9DQotICAgICAgICBHID0gQiA9IFI7DQotICAgIH0gZWxzZSBpZiAobV9GYW1pbHkgPT0gUERGQ1NfREVWSUNFQ01ZSykgew0KLSAgICAgICAgaWYgKCFtX2R3U3RkQ29udmVyc2lvbikgew0KLSAgICAgICAgICAgIEFkb2JlQ01ZS190b19zUkdCKHBCdWZbMF0sIHBCdWZbMV0sIHBCdWZbMl0sIHBCdWZbM10sIFIsIEcsIEIpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBGWF9GTE9BVCBrID0gcEJ1ZlszXTsNCi0gICAgICAgICAgICBSID0gMS4wZiAtIEZYX01JTigxLjBmLCBwQnVmWzBdICsgayk7DQotICAgICAgICAgICAgRyA9IDEuMGYgLSBGWF9NSU4oMS4wZiwgcEJ1ZlsxXSArIGspOw0KLSAgICAgICAgICAgIEIgPSAxLjBmIC0gRlhfTUlOKDEuMGYsIHBCdWZbMl0gKyBrKTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEFTU0VSVChtX0ZhbWlseSA9PSBQREZDU19QQVRURVJOKTsNCi0gICAgICAgIFIgPSBHID0gQiA9IDA7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ1BERl9EZXZpY2VDUzo6dl9HZXRDTVlLKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCYgYywgRlhfRkxPQVQmIG0sIEZYX0ZMT0FUJiB5LCBGWF9GTE9BVCYgaykgY29uc3QNCi17DQotICAgIGlmIChtX0ZhbWlseSAhPSBQREZDU19ERVZJQ0VDTVlLKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgYyA9IHBCdWZbMF07DQotICAgIG0gPSBwQnVmWzFdOw0KLSAgICB5ID0gcEJ1ZlsyXTsNCi0gICAgayA9IHBCdWZbM107DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENQREZfRGV2aWNlQ1M6OlNldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQgUiwgRlhfRkxPQVQgRywgRlhfRkxPQVQgQikgY29uc3QNCi17DQotICAgIGlmIChtX0ZhbWlseSA9PSBQREZDU19ERVZJQ0VSR0IpIHsNCi0gICAgICAgIHBCdWZbMF0gPSBSOw0KLSAgICAgICAgcEJ1ZlsxXSA9IEc7DQotICAgICAgICBwQnVmWzJdID0gQjsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9IGVsc2UgaWYgKG1fRmFtaWx5ID09IFBERkNTX0RFVklDRUdSQVkpIHsNCi0gICAgICAgIGlmIChSID09IEcgJiYgUiA9PSBCKSB7DQotICAgICAgICAgICAgKnBCdWYgPSBSOw0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZiAobV9GYW1pbHkgPT0gUERGQ1NfREVWSUNFQ01ZSykgew0KLSAgICAgICAgc1JHQl90b19BZG9iZUNNWUsoUiwgRywgQiwgcEJ1ZlswXSwgcEJ1ZlsxXSwgcEJ1ZlsyXSwgcEJ1ZlszXSk7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUZYX0JPT0wgQ1BERl9EZXZpY2VDUzo6dl9TZXRDTVlLKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCBjLCBGWF9GTE9BVCBtLCBGWF9GTE9BVCB5LCBGWF9GTE9BVCBrKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fRmFtaWx5ID09IFBERkNTX0RFVklDRVJHQikgew0KLSAgICAgICAgQWRvYmVDTVlLX3RvX3NSR0IoYywgbSwgeSwgaywgcEJ1ZlswXSwgcEJ1ZlsxXSwgcEJ1ZlsyXSk7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfSBlbHNlIGlmIChtX0ZhbWlseSA9PSBQREZDU19ERVZJQ0VHUkFZKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0gZWxzZSBpZiAobV9GYW1pbHkgPT0gUERGQ1NfREVWSUNFQ01ZSykgew0KLSAgICAgICAgcEJ1ZlswXSA9IGM7DQotICAgICAgICBwQnVmWzFdID0gbTsNCi0gICAgICAgIHBCdWZbMl0gPSB5Ow0KLSAgICAgICAgcEJ1ZlszXSA9IGs7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLXN0YXRpYyB2b2lkIFJldmVyc2VSR0IoRlhfTFBCWVRFIHBEZXN0QnVmLCBGWF9MUENCWVRFIHBTcmNCdWYsIGludCBwaXhlbHMpDQotew0KLSAgICBpZiAocERlc3RCdWYgPT0gcFNyY0J1ZikNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGl4ZWxzOyBpICsrKSB7DQotICAgICAgICAgICAgRlhfQllURSB0ZW1wID0gcERlc3RCdWZbMl07DQotICAgICAgICAgICAgcERlc3RCdWZbMl0gPSBwRGVzdEJ1ZlswXTsNCi0gICAgICAgICAgICBwRGVzdEJ1ZlswXSA9IHRlbXA7DQotICAgICAgICAgICAgcERlc3RCdWYgKz0gMzsNCi0gICAgICAgIH0NCi0gICAgZWxzZQ0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaXhlbHM7IGkgKyspIHsNCi0gICAgICAgICAgICAqcERlc3RCdWYgKysgPSBwU3JjQnVmWzJdOw0KLSAgICAgICAgICAgICpwRGVzdEJ1ZiArKyA9IHBTcmNCdWZbMV07DQotICAgICAgICAgICAgKnBEZXN0QnVmICsrID0gcFNyY0J1ZlswXTsNCi0gICAgICAgICAgICBwU3JjQnVmICs9IDM7DQotICAgICAgICB9DQotfQ0KLXZvaWQgQ1BERl9EZXZpY2VDUzo6VHJhbnNsYXRlSW1hZ2VMaW5lKEZYX0xQQllURSBwRGVzdEJ1ZiwgRlhfTFBDQllURSBwU3JjQnVmLCBpbnQgcGl4ZWxzLCBpbnQgaW1hZ2Vfd2lkdGgsIGludCBpbWFnZV9oZWlnaHQsIEZYX0JPT0wgYlRyYW5zTWFzaykgY29uc3QNCi17DQotICAgIGlmIChiVHJhbnNNYXNrICYmIG1fRmFtaWx5ID09IFBERkNTX0RFVklDRUNNWUspIHsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGl4ZWxzOyBpICsrKSB7DQotICAgICAgICAgICAgaW50IGsgPSAyNTUgLSBwU3JjQnVmWzNdOw0KLSAgICAgICAgICAgIHBEZXN0QnVmWzBdID0gKCgyNTUgLSBwU3JjQnVmWzBdKSAqIGspIC8gMjU1Ow0KLSAgICAgICAgICAgIHBEZXN0QnVmWzFdID0gKCgyNTUgLSBwU3JjQnVmWzFdKSAqIGspIC8gMjU1Ow0KLSAgICAgICAgICAgIHBEZXN0QnVmWzJdID0gKCgyNTUgLSBwU3JjQnVmWzJdKSAqIGspIC8gMjU1Ow0KLSAgICAgICAgICAgIHBEZXN0QnVmICs9IDM7DQotICAgICAgICAgICAgcFNyY0J1ZiArPSA0Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChtX0ZhbWlseSA9PSBQREZDU19ERVZJQ0VSR0IpIHsNCi0gICAgICAgIFJldmVyc2VSR0IocERlc3RCdWYsIHBTcmNCdWYsIHBpeGVscyk7DQotICAgIH0gZWxzZSBpZiAobV9GYW1pbHkgPT0gUERGQ1NfREVWSUNFR1JBWSkgew0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaXhlbHM7IGkgKyspIHsNCi0gICAgICAgICAgICAqcERlc3RCdWYgKysgPSBwU3JjQnVmW2ldOw0KLSAgICAgICAgICAgICpwRGVzdEJ1ZiArKyA9IHBTcmNCdWZbaV07DQotICAgICAgICAgICAgKnBEZXN0QnVmICsrID0gcFNyY0J1ZltpXTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGl4ZWxzOyBpICsrKSB7DQotICAgICAgICAgICAgaWYgKCFtX2R3U3RkQ29udmVyc2lvbikgew0KLSAgICAgICAgICAgICAgICBBZG9iZUNNWUtfdG9fc1JHQjEocFNyY0J1ZlswXSwgcFNyY0J1ZlsxXSwgcFNyY0J1ZlsyXSwgcFNyY0J1ZlszXSwgcERlc3RCdWZbMl0sIHBEZXN0QnVmWzFdLCBwRGVzdEJ1ZlswXSk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgRlhfQllURSBrID0gcFNyY0J1ZlszXTsNCi0gICAgICAgICAgICAgICAgcERlc3RCdWZbMl0gPSAyNTUgLSBGWF9NSU4oMjU1LCBwU3JjQnVmWzBdICsgayk7DQotICAgICAgICAgICAgICAgIHBEZXN0QnVmWzFdID0gMjU1IC0gRlhfTUlOKDI1NSwgcFNyY0J1ZlsxXSArIGspOw0KLSAgICAgICAgICAgICAgICBwRGVzdEJ1ZlswXSA9IDI1NSAtIEZYX01JTigyNTUsIHBTcmNCdWZbMl0gKyBrKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcFNyY0J1ZiArPSA0Ow0KLSAgICAgICAgICAgIHBEZXN0QnVmICs9IDM7DQotICAgICAgICB9DQotICAgIH0NCi19DQotY29uc3QgRlhfQllURSBnX3NSR0JTYW1wbGVzMVtdID0gew0KLSAgICAwLCAgIDMsICAgNiwgIDEwLCAgMTMsICAxNSwgIDE4LCAgMjAsICAyMiwgIDIzLCAgMjUsICAyNywgIDI4LCAgMzAsICAzMSwgIDMyLA0KLSAgICAzNCwgIDM1LCAgMzYsICAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LCAgNDgsICA0OSwNCi0gICAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTYsICA1NywgIDU4LCAgNTgsICA1OSwgIDYwLCAgNjEsDQotICAgIDYxLCAgNjIsICA2MiwgIDYzLCAgNjQsICA2NCwgIDY1LCAgNjYsICA2NiwgIDY3LCAgNjcsICA2OCwgIDY4LCAgNjksICA3MCwgIDcwLA0KLSAgICA3MSwgIDcxLCAgNzIsICA3MiwgIDczLCAgNzMsICA3NCwgIDc0LCAgNzUsICA3NiwgIDc2LCAgNzcsICA3NywgIDc4LCAgNzgsICA3OSwNCi0gICAgNzksICA3OSwgIDgwLCAgODAsICA4MSwgIDgxLCAgODIsICA4MiwgIDgzLCAgODMsICA4NCwgIDg0LCAgODUsICA4NSwgIDg1LCAgODYsDQotICAgIDg2LCAgODcsICA4NywgIDg4LCAgODgsICA4OCwgIDg5LCAgODksICA5MCwgIDkwLCAgOTEsICA5MSwgIDkxLCAgOTIsICA5MiwgIDkzLA0KLSAgICA5MywgIDkzLCAgOTQsICA5NCwgIDk1LCAgOTUsICA5NSwgIDk2LCAgOTYsICA5NywgIDk3LCAgOTcsICA5OCwgIDk4LCAgOTgsICA5OSwNCi0gICAgOTksICA5OSwgMTAwLCAxMDAsIDEwMSwgMTAxLCAxMDEsIDEwMiwgMTAyLCAxMDIsIDEwMywgMTAzLCAxMDMsIDEwNCwgMTA0LCAxMDQsDQotICAgIDEwNSwgMTA1LCAxMDYsIDEwNiwgMTA2LCAxMDcsIDEwNywgMTA3LCAxMDgsIDEwOCwgMTA4LCAxMDksIDEwOSwgMTA5LCAxMTAsIDExMCwNCi0gICAgMTEwLCAxMTAsIDExMSwgMTExLCAxMTEsIDExMiwgMTEyLCAxMTIsIDExMywgMTEzLCAxMTMsIDExNCwgMTE0LCAxMTQsIDExNSwgMTE1LA0KLSAgICAxMTUsIDExNSwgMTE2LCAxMTYsIDExNiwgMTE3LCAxMTcsIDExNywgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTksIDExOSwgMTE5LCAxMjAsDQotfTsNCi1jb25zdCBGWF9CWVRFIGdfc1JHQlNhbXBsZXMyW10gPSB7DQotICAgIDEyMCwgMTIxLCAxMjIsIDEyNCwgMTI1LCAxMjYsIDEyNywgMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwNCi0gICAgMTM3LCAxMzgsIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLCAxNDQsIDE0NSwgMTQ2LCAxNDcsIDE0OCwgMTQ4LCAxNDksIDE1MCwgMTUxLA0KLSAgICAxNTIsIDE1MywgMTU0LCAxNTUsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LCAxNTksIDE2MCwgMTYxLCAxNjIsIDE2MywgMTYzLCAxNjQsDQotICAgIDE2NSwgMTY2LCAxNjcsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcwLCAxNzEsIDE3MiwgMTczLCAxNzMsIDE3NCwgMTc1LCAxNzUsIDE3NiwNCi0gICAgMTc3LCAxNzgsIDE3OCwgMTc5LCAxODAsIDE4MCwgMTgxLCAxODIsIDE4MiwgMTgzLCAxODQsIDE4NSwgMTg1LCAxODYsIDE4NywgMTg3LA0KLSAgICAxODgsIDE4OSwgMTg5LCAxOTAsIDE5MCwgMTkxLCAxOTIsIDE5MiwgMTkzLCAxOTQsIDE5NCwgMTk1LCAxOTYsIDE5NiwgMTk3LCAxOTcsDQotICAgIDE5OCwgMTk5LCAxOTksIDIwMCwgMjAwLCAyMDEsIDIwMiwgMjAyLCAyMDMsIDIwMywgMjA0LCAyMDUsIDIwNSwgMjA2LCAyMDYsIDIwNywNCi0gICAgMjA4LCAyMDgsIDIwOSwgMjA5LCAyMTAsIDIxMCwgMjExLCAyMTIsIDIxMiwgMjEzLCAyMTMsIDIxNCwgMjE0LCAyMTUsIDIxNSwgMjE2LA0KLSAgICAyMTYsIDIxNywgMjE4LCAyMTgsIDIxOSwgMjE5LCAyMjAsIDIyMCwgMjIxLCAyMjEsIDIyMiwgMjIyLCAyMjMsIDIyMywgMjI0LCAyMjQsDQotICAgIDIyNSwgMjI2LCAyMjYsIDIyNywgMjI3LCAyMjgsIDIyOCwgMjI5LCAyMjksIDIzMCwgMjMwLCAyMzEsIDIzMSwgMjMyLCAyMzIsIDIzMywNCi0gICAgMjMzLCAyMzQsIDIzNCwgMjM1LCAyMzUsIDIzNiwgMjM2LCAyMzcsIDIzNywgMjM4LCAyMzgsIDIzOCwgMjM5LCAyMzksIDI0MCwgMjQwLA0KLSAgICAyNDEsIDI0MSwgMjQyLCAyNDIsIDI0MywgMjQzLCAyNDQsIDI0NCwgMjQ1LCAyNDUsIDI0NiwgMjQ2LCAyNDYsIDI0NywgMjQ3LCAyNDgsDQotICAgIDI0OCwgMjQ5LCAyNDksIDI1MCwgMjUwLCAyNTEsIDI1MSwgMjUxLCAyNTIsIDI1MiwgMjUzLCAyNTMsIDI1NCwgMjU0LCAyNTUsIDI1NSwNCi19Ow0KLXN0YXRpYyB2b2lkIFhZWl90b19zUkdCKEZYX0ZMT0FUIFgsIEZYX0ZMT0FUIFksIEZYX0ZMT0FUIFosIEZYX0ZMT0FUJiBSLCBGWF9GTE9BVCYgRywgRlhfRkxPQVQmIEIpDQotew0KLSAgICBGWF9GTE9BVCBSMSA9IDMuMjQxMGYgKiBYIC0gMS41Mzc0ZiAqIFkgLSAwLjQ5ODZmICogWjsNCi0gICAgRlhfRkxPQVQgRzEgPSAtMC45NjkyZiAqIFggKyAxLjg3NjBmICogWSArIDAuMDQxNmYgKiBaOw0KLSAgICBGWF9GTE9BVCBCMSA9ICAwLjA1NTZmICogWCAtIDAuMjA0MGYgKiBZICsgMS4wNTcwZiAqIFo7DQotICAgIGlmIChSMSA+IDEpIHsNCi0gICAgICAgIFIxID0gMTsNCi0gICAgfQ0KLSAgICBpZiAoUjEgPCAwKSB7DQotICAgICAgICBSMSA9IDA7DQotICAgIH0NCi0gICAgaWYgKEcxID4gMSkgew0KLSAgICAgICAgRzEgPSAxOw0KLSAgICB9DQotICAgIGlmIChHMSA8IDApIHsNCi0gICAgICAgIEcxID0gMDsNCi0gICAgfQ0KLSAgICBpZiAoQjEgPiAxKSB7DQotICAgICAgICBCMSA9IDE7DQotICAgIH0NCi0gICAgaWYgKEIxIDwgMCkgew0KLSAgICAgICAgQjEgPSAwOw0KLSAgICB9DQotICAgIGludCBzY2FsZSA9IChpbnQpKFIxICogMTAyMyk7DQotICAgIGlmIChzY2FsZSA8IDApIHsNCi0gICAgICAgIHNjYWxlID0gMDsNCi0gICAgfQ0KLSAgICBpZiAoc2NhbGUgPCAxOTIpIHsNCi0gICAgICAgIFIgPSAoZ19zUkdCU2FtcGxlczFbc2NhbGVdIC8gMjU1LjBmKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIFIgPSAoZ19zUkdCU2FtcGxlczJbc2NhbGUgLyA0IC0gNDhdIC8gMjU1LjBmKTsNCi0gICAgfQ0KLSAgICBzY2FsZSA9IChpbnQpKEcxICogMTAyMyk7DQotICAgIGlmIChzY2FsZSA8IDApIHsNCi0gICAgICAgIHNjYWxlID0gMDsNCi0gICAgfQ0KLSAgICBpZiAoc2NhbGUgPCAxOTIpIHsNCi0gICAgICAgIEcgPSAoZ19zUkdCU2FtcGxlczFbc2NhbGVdIC8gMjU1LjBmKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEcgPSAoZ19zUkdCU2FtcGxlczJbc2NhbGUgLyA0IC0gNDhdIC8gMjU1LjBmKTsNCi0gICAgfQ0KLSAgICBzY2FsZSA9IChpbnQpKEIxICogMTAyMyk7DQotICAgIGlmIChzY2FsZSA8IDApIHsNCi0gICAgICAgIHNjYWxlID0gMDsNCi0gICAgfQ0KLSAgICBpZiAoc2NhbGUgPCAxOTIpIHsNCi0gICAgICAgIEIgPSAoZ19zUkdCU2FtcGxlczFbc2NhbGVdIC8gMjU1LjBmKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEIgPSAoZ19zUkdCU2FtcGxlczJbc2NhbGUgLyA0IC0gNDhdIC8gMjU1LjBmKTsNCi0gICAgfQ0KLX0NCi1jbGFzcyBDUERGX0NhbEdyYXkgOiBwdWJsaWMgQ1BERl9Db2xvclNwYWNlDQotew0KLXB1YmxpYzoNCi0gICAgQ1BERl9DYWxHcmF5KCk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJdl9Mb2FkKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfQXJyYXkqIHBBcnJheSk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJR2V0UkdCKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCYgUiwgRlhfRkxPQVQmIEcsIEZYX0ZMT0FUJiBCKSBjb25zdDsNCi0gICAgdmlydHVhbCB2b2lkCQlUcmFuc2xhdGVJbWFnZUxpbmUoRlhfTFBCWVRFIHBEZXN0QnVmLCBGWF9MUENCWVRFIHBTcmNCdWYsIGludCBwaXhlbHMsIGludCBpbWFnZV93aWR0aCwgaW50IGltYWdlX2hlaWdodCwgRlhfQk9PTCBiVHJhbnNNYXNrID0gRkFMU0UpIGNvbnN0Ow0KLSAgICBGWF9CT09MCQkJCVNldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQgUiwgRlhfRkxPQVQgRywgRlhfRkxPQVQgQikgY29uc3Q7DQotICAgIEZYX0ZMT0FUCQkJbV9XaGl0ZVBvaW50WzNdOw0KLSAgICBGWF9GTE9BVAkJCW1fQmxhY2tQb2ludFszXTsNCi0gICAgRlhfRkxPQVQJCQltX0dhbW1hOw0KLX07DQotQ1BERl9DYWxHcmF5OjpDUERGX0NhbEdyYXkoKQ0KLXsNCi0gICAgbV9GYW1pbHkgPSBQREZDU19DQUxHUkFZOw0KLSAgICBtX25Db21wb25lbnRzID0gMTsNCi19DQotRlhfQk9PTCBDUERGX0NhbEdyYXk6OnZfTG9hZChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0FycmF5KiBwQXJyYXkpDQotew0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gcEFycmF5LT5HZXREaWN0KDEpOw0KLSAgICBDUERGX0FycmF5KiBwUGFyYW0gPSBwRGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIldoaXRlUG9pbnQiKSk7DQotICAgIGludCBpOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSArKykgew0KLSAgICAgICAgbV9XaGl0ZVBvaW50W2ldID0gcFBhcmFtLT5HZXROdW1iZXIoaSk7DQotICAgIH0NCi0gICAgcFBhcmFtID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJCbGFja1BvaW50IikpOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSArKykgew0KLSAgICAgICAgbV9CbGFja1BvaW50W2ldID0gcFBhcmFtID8gcFBhcmFtLT5HZXROdW1iZXIoaSkgOiAwOw0KLSAgICB9DQotICAgIG1fR2FtbWEgPSBwRGljdC0+R2V0TnVtYmVyKEZYX0JTVFJDKCJHYW1tYSIpKTsNCi0gICAgaWYgKG1fR2FtbWEgPT0gMCkgew0KLSAgICAgICAgbV9HYW1tYSA9IDEuMGY7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ1BERl9DYWxHcmF5OjpHZXRSR0IoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUJiBSLCBGWF9GTE9BVCYgRywgRlhfRkxPQVQmIEIpIGNvbnN0DQotew0KLSAgICBSID0gRyA9IEIgPSAqcEJ1ZjsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ1BERl9DYWxHcmF5OjpTZXRSR0IoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUIFIsIEZYX0ZMT0FUIEcsIEZYX0ZMT0FUIEIpIGNvbnN0DQotew0KLSAgICBpZiAoUiA9PSBHICYmIFIgPT0gQikgew0KLSAgICAgICAgKnBCdWYgPSBSOw0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0gZWxzZSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi19DQotdm9pZCBDUERGX0NhbEdyYXk6OlRyYW5zbGF0ZUltYWdlTGluZShGWF9MUEJZVEUgcERlc3RCdWYsIEZYX0xQQ0JZVEUgcFNyY0J1ZiwgaW50IHBpeGVscywgaW50IGltYWdlX3dpZHRoLCBpbnQgaW1hZ2VfaGVpZ2h0LCBGWF9CT09MIGJUcmFuc01hc2spIGNvbnN0DQotew0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBpeGVsczsgaSArKykgew0KLSAgICAgICAgKnBEZXN0QnVmICsrID0gcFNyY0J1ZltpXTsNCi0gICAgICAgICpwRGVzdEJ1ZiArKyA9IHBTcmNCdWZbaV07DQotICAgICAgICAqcERlc3RCdWYgKysgPSBwU3JjQnVmW2ldOw0KLSAgICB9DQotfQ0KLWNsYXNzIENQREZfQ2FsUkdCIDogcHVibGljIENQREZfQ29sb3JTcGFjZQ0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfQ2FsUkdCKCk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJdl9Mb2FkKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfQXJyYXkqIHBBcnJheSk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJR2V0UkdCKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCYgUiwgRlhfRkxPQVQmIEcsIEZYX0ZMT0FUJiBCKSBjb25zdDsNCi0gICAgdmlydHVhbCB2b2lkCQlUcmFuc2xhdGVJbWFnZUxpbmUoRlhfTFBCWVRFIHBEZXN0QnVmLCBGWF9MUENCWVRFIHBTcmNCdWYsIGludCBwaXhlbHMsIGludCBpbWFnZV93aWR0aCwgaW50IGltYWdlX2hlaWdodCwgRlhfQk9PTCBiVHJhbnNNYXNrID0gRkFMU0UpIGNvbnN0Ow0KLSAgICBGWF9CT09MCQkJCVNldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQgUiwgRlhfRkxPQVQgRywgRlhfRkxPQVQgQikgY29uc3Q7DQotICAgIEZYX0ZMT0FUCQkJbV9XaGl0ZVBvaW50WzNdOw0KLSAgICBGWF9GTE9BVAkJCW1fQmxhY2tQb2ludFszXTsNCi0gICAgRlhfRkxPQVQJCQltX0dhbW1hWzNdOw0KLSAgICBGWF9GTE9BVAkJCW1fTWF0cml4WzldOw0KLSAgICBGWF9CT09MCQkJCW1fYkdhbW1hLCBtX2JNYXRyaXg7DQotfTsNCi1DUERGX0NhbFJHQjo6Q1BERl9DYWxSR0IoKQ0KLXsNCi0gICAgbV9GYW1pbHkgPSBQREZDU19DQUxSR0I7DQotICAgIG1fbkNvbXBvbmVudHMgPSAzOw0KLX0NCi1GWF9CT09MIENQREZfQ2FsUkdCOjp2X0xvYWQoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9BcnJheSogcEFycmF5KQ0KLXsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IHBBcnJheS0+R2V0RGljdCgxKTsNCi0gICAgQ1BERl9BcnJheSogcFBhcmFtID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJXaGl0ZVBvaW50IikpOw0KLSAgICBpbnQgaTsNCi0gICAgZm9yIChpID0gMDsgaSA8IDM7IGkgKyspIHsNCi0gICAgICAgIG1fV2hpdGVQb2ludFtpXSA9IHBQYXJhbS0+R2V0TnVtYmVyKGkpOw0KLSAgICB9DQotICAgIHBQYXJhbSA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiQmxhY2tQb2ludCIpKTsNCi0gICAgZm9yIChpID0gMDsgaSA8IDM7IGkgKyspIHsNCi0gICAgICAgIG1fQmxhY2tQb2ludFtpXSA9IHBQYXJhbSA/IHBQYXJhbS0+R2V0TnVtYmVyKGkpIDogMDsNCi0gICAgfQ0KLSAgICBwUGFyYW0gPSBwRGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIkdhbW1hIikpOw0KLSAgICBpZiAocFBhcmFtKSB7DQotICAgICAgICBtX2JHYW1tYSA9IFRSVUU7DQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSArKykgew0KLSAgICAgICAgICAgIG1fR2FtbWFbaV0gPSBwUGFyYW0tPkdldE51bWJlcihpKTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1fYkdhbW1hID0gRkFMU0U7DQotICAgIH0NCi0gICAgcFBhcmFtID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJNYXRyaXgiKSk7DQotICAgIGlmIChwUGFyYW0pIHsNCi0gICAgICAgIG1fYk1hdHJpeCA9IFRSVUU7DQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgOTsgaSArKykgew0KLSAgICAgICAgICAgIG1fTWF0cml4W2ldID0gcFBhcmFtLT5HZXROdW1iZXIoaSk7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX2JNYXRyaXggPSBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDUERGX0NhbFJHQjo6R2V0UkdCKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCYgUiwgRlhfRkxPQVQmIEcsIEZYX0ZMT0FUJiBCKSBjb25zdA0KLXsNCi0gICAgRlhfRkxPQVQgQV8gPSBwQnVmWzBdOw0KLSAgICBGWF9GTE9BVCBCXyA9IHBCdWZbMV07DQotICAgIEZYX0ZMT0FUIENfID0gcEJ1ZlsyXTsNCi0gICAgaWYgKG1fYkdhbW1hKSB7DQotICAgICAgICBBXyA9IChGWF9GTE9BVClGWFNZU19wb3coQV8sIG1fR2FtbWFbMF0pOw0KLSAgICAgICAgQl8gPSAoRlhfRkxPQVQpRlhTWVNfcG93KEJfLCBtX0dhbW1hWzFdKTsNCi0gICAgICAgIENfID0gKEZYX0ZMT0FUKUZYU1lTX3BvdyhDXywgbV9HYW1tYVsyXSk7DQotICAgIH0NCi0gICAgRlhfRkxPQVQgWCwgWSwgWjsNCi0gICAgaWYgKG1fYk1hdHJpeCkgew0KLSAgICAgICAgWCA9IG1fTWF0cml4WzBdICogQV8gKyBtX01hdHJpeFszXSAqIEJfICsgbV9NYXRyaXhbNl0gKiBDXzsNCi0gICAgICAgIFkgPSBtX01hdHJpeFsxXSAqIEFfICsgbV9NYXRyaXhbNF0gKiBCXyArIG1fTWF0cml4WzddICogQ187DQotICAgICAgICBaID0gbV9NYXRyaXhbMl0gKiBBXyArIG1fTWF0cml4WzVdICogQl8gKyBtX01hdHJpeFs4XSAqIENfOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgWCA9IEFfOw0KLSAgICAgICAgWSA9IEJfOw0KLSAgICAgICAgWiA9IENfOw0KLSAgICB9DQotICAgIFhZWl90b19zUkdCKFgsIFksIFosIFIsIEcsIEIpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDUERGX0NhbFJHQjo6U2V0UkdCKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCBSLCBGWF9GTE9BVCBHLCBGWF9GTE9BVCBCKSBjb25zdA0KLXsNCi0gICAgcEJ1ZlswXSA9IFI7DQotICAgIHBCdWZbMV0gPSBHOw0KLSAgICBwQnVmWzJdID0gQjsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ1BERl9DYWxSR0I6OlRyYW5zbGF0ZUltYWdlTGluZShGWF9MUEJZVEUgcERlc3RCdWYsIEZYX0xQQ0JZVEUgcFNyY0J1ZiwgaW50IHBpeGVscywgaW50IGltYWdlX3dpZHRoLCBpbnQgaW1hZ2VfaGVpZ2h0LCBGWF9CT09MIGJUcmFuc01hc2spIGNvbnN0DQotew0KLSAgICBpZiAoYlRyYW5zTWFzaykgew0KLSAgICAgICAgRlhfRkxPQVQgQ2FsWzNdOw0KLSAgICAgICAgRlhfRkxPQVQgUiwgRywgQjsNCi0gICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBwaXhlbHM7IGkgKyspIHsNCi0gICAgICAgICAgICBDYWxbMF0gPSAoKEZYX0ZMT0FUKXBTcmNCdWZbMl0pIC8gMjU1Ow0KLSAgICAgICAgICAgIENhbFsxXSA9ICgoRlhfRkxPQVQpcFNyY0J1ZlsxXSkgLyAyNTU7DQotICAgICAgICAgICAgQ2FsWzJdID0gKChGWF9GTE9BVClwU3JjQnVmWzBdKSAvIDI1NTsNCi0gICAgICAgICAgICBHZXRSR0IoQ2FsLCBSLCBHLCBCKTsNCi0gICAgICAgICAgICBwRGVzdEJ1ZlswXSA9IEZYU1lTX3JvdW5kKEIgKiAyNTUpOw0KLSAgICAgICAgICAgIHBEZXN0QnVmWzFdID0gRlhTWVNfcm91bmQoRyAqIDI1NSk7DQotICAgICAgICAgICAgcERlc3RCdWZbMl0gPSBGWFNZU19yb3VuZChSICogMjU1KTsNCi0gICAgICAgICAgICBwU3JjQnVmICs9IDM7DQotICAgICAgICAgICAgcERlc3RCdWYgKz0gMzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBSZXZlcnNlUkdCKHBEZXN0QnVmLCBwU3JjQnVmLCBwaXhlbHMpOw0KLX0NCi1jbGFzcyBDUERGX0xhYkNTIDogcHVibGljIENQREZfQ29sb3JTcGFjZQ0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfTGFiQ1MoKQ0KLSAgICB7DQotICAgICAgICBtX0ZhbWlseSA9IFBERkNTX0xBQjsNCi0gICAgICAgIG1fbkNvbXBvbmVudHMgPSAzOw0KLSAgICB9DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJdl9Mb2FkKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfQXJyYXkqIHBBcnJheSk7DQotICAgIHZpcnR1YWwgdm9pZAkJR2V0RGVmYXVsdFZhbHVlKGludCBpQ29tcG9uZW50LCBGWF9GTE9BVCYgdmFsdWUsIEZYX0ZMT0FUJiBtaW4sIEZYX0ZMT0FUJiBtYXgpIGNvbnN0Ow0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCUdldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQmIFIsIEZYX0ZMT0FUJiBHLCBGWF9GTE9BVCYgQikgY29uc3Q7DQotICAgIEZYX0JPT0wJCVNldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQgUiwgRlhfRkxPQVQgRywgRlhfRkxPQVQgQikgY29uc3Q7DQotICAgIHZpcnR1YWwgdm9pZAkJVHJhbnNsYXRlSW1hZ2VMaW5lKEZYX0xQQllURSBwRGVzdEJ1ZiwgRlhfTFBDQllURSBwU3JjQnVmLCBpbnQgcGl4ZWxzLCBpbnQgaW1hZ2Vfd2lkdGgsIGludCBpbWFnZV9oZWlnaHQsIEZYX0JPT0wgYlRyYW5zTWFzayA9IEZBTFNFKSBjb25zdDsNCi0gICAgRlhfRkxPQVQJbV9XaGl0ZVBvaW50WzNdOw0KLSAgICBGWF9GTE9BVAltX0JsYWNrUG9pbnRbM107DQotICAgIEZYX0ZMT0FUCW1fUmFuZ2VzWzRdOw0KLX07DQotRlhfQk9PTCBDUERGX0xhYkNTOjp2X0xvYWQoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9BcnJheSogcEFycmF5KQ0KLXsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IHBBcnJheS0+R2V0RGljdCgxKTsNCi0gICAgQ1BERl9BcnJheSogcFBhcmFtID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJXaGl0ZVBvaW50IikpOw0KLSAgICBpbnQgaTsNCi0gICAgZm9yIChpID0gMDsgaSA8IDM7IGkgKyspIHsNCi0gICAgICAgIG1fV2hpdGVQb2ludFtpXSA9IHBQYXJhbS0+R2V0TnVtYmVyKGkpOw0KLSAgICB9DQotICAgIHBQYXJhbSA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiQmxhY2tQb2ludCIpKTsNCi0gICAgZm9yIChpID0gMDsgaSA8IDM7IGkgKyspIHsNCi0gICAgICAgIG1fQmxhY2tQb2ludFtpXSA9IHBQYXJhbSA/IHBQYXJhbS0+R2V0TnVtYmVyKGkpIDogMDsNCi0gICAgfQ0KLSAgICBwUGFyYW0gPSBwRGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIlJhbmdlIikpOw0KLSAgICBjb25zdCBGWF9GTE9BVCBkZWZfcmFuZ2VzWzRdID0geyAtMTAwICogMS4wZiwgMTAwICogMS4wZiwgLTEwMCAqIDEuMGYsIDEwMCAqIDEuMGZ9Ow0KLSAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSArKykgew0KLSAgICAgICAgbV9SYW5nZXNbaV0gPSBwUGFyYW0gPyBwUGFyYW0tPkdldE51bWJlcihpKSA6IGRlZl9yYW5nZXNbaV07DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ1BERl9MYWJDUzo6R2V0RGVmYXVsdFZhbHVlKGludCBpQ29tcG9uZW50LCBGWF9GTE9BVCYgdmFsdWUsIEZYX0ZMT0FUJiBtaW4sIEZYX0ZMT0FUJiBtYXgpIGNvbnN0DQotew0KLSAgICB2YWx1ZSA9IDA7DQotICAgIGlmIChpQ29tcG9uZW50ID09IDApIHsNCi0gICAgICAgIG1pbiA9IDA7DQotICAgICAgICBtYXggPSAxMDAgKiAxLjBmOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbWluID0gbV9SYW5nZXNbaUNvbXBvbmVudCAqIDIgLSAyXTsNCi0gICAgICAgIG1heCA9IG1fUmFuZ2VzW2lDb21wb25lbnQgKiAyIC0gMV07DQotICAgICAgICBpZiAodmFsdWUgPCBtaW4pIHsNCi0gICAgICAgICAgICB2YWx1ZSA9IG1pbjsNCi0gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPiBtYXgpIHsNCi0gICAgICAgICAgICB2YWx1ZSA9IG1heDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1GWF9CT09MIENQREZfTGFiQ1M6OkdldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQmIFIsIEZYX0ZMT0FUJiBHLCBGWF9GTE9BVCYgQikgY29uc3QNCi17DQotICAgIEZYX0ZMT0FUIExzdGFyID0gcEJ1ZlswXTsNCi0gICAgRlhfRkxPQVQgYXN0YXIgPSBwQnVmWzFdOw0KLSAgICBGWF9GTE9BVCBic3RhciA9IHBCdWZbMl07DQotICAgIEZYX0ZMT0FUIE0gPSAoTHN0YXIgKyAxNi4wZikgLyAxMTYuMGY7DQotICAgIEZYX0ZMT0FUIEwgPSBNICsgYXN0YXIgLyA1MDAuMGY7DQotICAgIEZYX0ZMT0FUIE4gPSBNIC0gYnN0YXIgLyAyMDAuMGY7DQotICAgIEZYX0ZMT0FUIFgsIFksIFo7DQotICAgIGlmIChMIDwgMC4yMDY5Zikgew0KLSAgICAgICAgWCA9IDAuOTU3ZiAqIDAuMTI4NDJmICogKEwgLSAwLjEzNzlmKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIFggPSAwLjk1N2YgKiBMICogTCAqIEw7DQotICAgIH0NCi0gICAgaWYgKE0gPCAwLjIwNjlmKSB7DQotICAgICAgICBZID0gMC4xMjg0MmYgKiAoTSAtIDAuMTM3OWYpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgWSA9IE0gKiBNICogTTsNCi0gICAgfQ0KLSAgICBpZiAoTiA8IDAuMjA2OWYpIHsNCi0gICAgICAgIFogPSAxLjA4ODlmICogMC4xMjg0MmYgKiAoTiAtIDAuMTM3OWYpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgWiA9IDEuMDg4OWYgKiBOICogTiAqIE47DQotICAgIH0NCi0gICAgWFlaX3RvX3NSR0IoWCwgWSwgWiwgUiwgRywgQik7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENQREZfTGFiQ1M6OlNldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQgUiwgRlhfRkxPQVQgRywgRlhfRkxPQVQgQikgY29uc3QNCi17DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotdm9pZCBDUERGX0xhYkNTOjpUcmFuc2xhdGVJbWFnZUxpbmUoRlhfTFBCWVRFIHBEZXN0QnVmLCBGWF9MUENCWVRFIHBTcmNCdWYsIGludCBwaXhlbHMsIGludCBpbWFnZV93aWR0aCwgaW50IGltYWdlX2hlaWdodCwgRlhfQk9PTCBiVHJhbnNNYXNrKSBjb25zdA0KLXsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaXhlbHM7IGkgKyspIHsNCi0gICAgICAgIEZYX0ZMT0FUIGxhYlszXTsNCi0gICAgICAgIEZYX0ZMT0FUIFIsIEcsIEI7DQotICAgICAgICBsYWJbMF0gPSAocFNyY0J1ZlswXSAqIDEwMCAvIDI1NS4wZik7DQotICAgICAgICBsYWJbMV0gPSAoRlhfRkxPQVQpKHBTcmNCdWZbMV0gLSAxMjgpOw0KLSAgICAgICAgbGFiWzJdID0gKEZYX0ZMT0FUKShwU3JjQnVmWzJdIC0gMTI4KTsNCi0gICAgICAgIEdldFJHQihsYWIsIFIsIEcsIEIpOw0KLSAgICAgICAgcERlc3RCdWZbMF0gPSAoRlhfSU5UMzIpKEIgKiAyNTUpOw0KLSAgICAgICAgcERlc3RCdWZbMV0gPSAoRlhfSU5UMzIpKEcgKiAyNTUpOw0KLSAgICAgICAgcERlc3RCdWZbMl0gPSAoRlhfSU5UMzIpKFIgKiAyNTUpOw0KLSAgICAgICAgcERlc3RCdWYgKz0gMzsNCi0gICAgICAgIHBTcmNCdWYgKz0gMzsNCi0gICAgfQ0KLX0NCi1DUERGX0ljY1Byb2ZpbGU6OkNQREZfSWNjUHJvZmlsZShGWF9MUENCWVRFIHBEYXRhLCBGWF9EV09SRCBkd1NpemUsIGludCBuQ29tcG9uZW50cykNCi17DQotICAgIG1fYnNSR0IgPSBuQ29tcG9uZW50cyA9PSAzICYmIGR3U2l6ZSA9PSAzMTQ0ICYmIEZYU1lTX21lbWNtcDMyKHBEYXRhICsgMHgxOTAsICJzUkdCIElFQzYxOTY2LTIuMSIsIDE3KSA9PSAwOw0KLSAgICBtX3BUcmFuc2Zvcm0gPSBOVUxMOw0KLSAgICBpZiAoIW1fYnNSR0IgJiYgQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRJY2NNb2R1bGUoKSkgew0KLSAgICAgICAgbV9wVHJhbnNmb3JtID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRJY2NNb2R1bGUoKS0+Q3JlYXRlVHJhbnNmb3JtX3NSR0IocERhdGEsIGR3U2l6ZSwgbkNvbXBvbmVudHMpOw0KLSAgICB9DQotfQ0KLUNQREZfSWNjUHJvZmlsZTo6fkNQREZfSWNjUHJvZmlsZSgpDQotew0KLSAgICBpZiAobV9wVHJhbnNmb3JtKSB7DQotICAgICAgICBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldEljY01vZHVsZSgpLT5EZXN0cm95VHJhbnNmb3JtKG1fcFRyYW5zZm9ybSk7DQotICAgIH0NCi19DQotY2xhc3MgQ1BERl9JQ0NCYXNlZENTIDogcHVibGljIENQREZfQ29sb3JTcGFjZQ0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfSUNDQmFzZWRDUygpOw0KLSAgICB2aXJ0dWFsIH5DUERGX0lDQ0Jhc2VkQ1MoKTsNCi0gICAgdmlydHVhbCBGWF9CT09MCQl2X0xvYWQoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9BcnJheSogcEFycmF5KTsNCi0gICAgdm9pZAkJCQlHZXREZWZhdWx0VmFsdWUoaW50IGksIEZYX0ZMT0FUJiBtaW4sIEZYX0ZMT0FUJiBtYXgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIG1pbiA9IG1fcFJhbmdlc1tpICogMl07DQotICAgICAgICBtYXggPSBtX3BSYW5nZXNbaSAqIDIgKyAxXTsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCUdldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQmIFIsIEZYX0ZMT0FUJiBHLCBGWF9GTE9BVCYgQikgY29uc3Q7DQotICAgIEZYX0JPT0wJCQkJdl9HZXRDTVlLKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCYgYywgRlhfRkxPQVQmIG0sIEZYX0ZMT0FUJiB5LCBGWF9GTE9BVCYgaykgY29uc3Q7DQotICAgIEZYX0JPT0wJCQkJU2V0UkdCKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCBSLCBGWF9GTE9BVCBHLCBGWF9GTE9BVCBCKSBjb25zdDsNCi0gICAgdmlydHVhbCB2b2lkCQlFbmFibGVTdGRDb252ZXJzaW9uKEZYX0JPT0wgYkVuYWJsZWQpOw0KLSAgICB2aXJ0dWFsIHZvaWQJCVRyYW5zbGF0ZUltYWdlTGluZShGWF9MUEJZVEUgcERlc3RCdWYsIEZYX0xQQ0JZVEUgcFNyY0J1ZiwgaW50IHBpeGVscywgaW50IGltYWdlX3dpZHRoLCBpbnQgaW1hZ2VfaGVpZ2h0LCBGWF9CT09MIGJUcmFuc01hc2sgPSBGQUxTRSkgY29uc3Q7DQotICAgIEZYX0ZMT0FUKgkJbV9wUmFuZ2VzOw0KLSAgICBDUERGX0ljY1Byb2ZpbGUqCW1fcFByb2ZpbGU7DQotICAgIENQREZfQ29sb3JTcGFjZSoJbV9wQWx0ZXJDUzsNCi0gICAgRlhfTFBCWVRFCQkJbV9wQ2FjaGU7DQotICAgIEZYX0JPT0wJCQkJbV9iT3duOw0KLX07DQotQ1BERl9JQ0NCYXNlZENTOjpDUERGX0lDQ0Jhc2VkQ1MoKQ0KLXsNCi0gICAgbV9wQWx0ZXJDUyA9IE5VTEw7DQotICAgIG1fcFByb2ZpbGUgPSBOVUxMOw0KLSAgICBtX0ZhbWlseSA9IFBERkNTX0lDQ0JBU0VEOw0KLSAgICBtX3BDYWNoZSA9IE5VTEw7DQotICAgIG1fcFJhbmdlcyA9IE5VTEw7DQotICAgIG1fYk93biA9IEZBTFNFOw0KLX0NCi1DUERGX0lDQ0Jhc2VkQ1M6On5DUERGX0lDQ0Jhc2VkQ1MoKQ0KLXsNCi0gICAgaWYgKG1fcENhY2hlKSB7DQotICAgICAgICBGWF9GcmVlKG1fcENhY2hlKTsNCi0gICAgfQ0KLSAgICBpZiAobV9wUmFuZ2VzKSB7DQotICAgICAgICBGWF9GcmVlKG1fcFJhbmdlcyk7DQotICAgIH0NCi0gICAgaWYgKG1fcEFsdGVyQ1MgJiYgbV9iT3duKSB7DQotICAgICAgICBtX3BBbHRlckNTLT5SZWxlYXNlQ1MoKTsNCi0gICAgfQ0KLSAgICBpZiAobV9wUHJvZmlsZSAmJiBtX3BEb2N1bWVudCkgew0KLSAgICAgICAgbV9wRG9jdW1lbnQtPkdldFBhZ2VEYXRhKCktPlJlbGVhc2VJY2NQcm9maWxlKE5VTEwsIG1fcFByb2ZpbGUpOw0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BERl9JQ0NCYXNlZENTOjp2X0xvYWQoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9BcnJheSogcEFycmF5KQ0KLXsNCi0gICAgQ1BERl9TdHJlYW0qIHBTdHJlYW0gPSBwQXJyYXktPkdldFN0cmVhbSgxKTsNCi0gICAgaWYgKHBTdHJlYW0gPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fbkNvbXBvbmVudHMgPSBwU3RyZWFtLT5HZXREaWN0KCktPkdldEludGVnZXIoRlhfQlNUUkMoIk4iKSk7DQotICAgIGlmIChtX25Db21wb25lbnRzIDwgMCB8fCBtX25Db21wb25lbnRzID4gKDEgPDwgMTYpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ1BERl9BcnJheSogcFJhbmdlcyA9IHBTdHJlYW0tPkdldERpY3QoKS0+R2V0QXJyYXkoRlhfQlNUUkMoIlJhbmdlIikpOw0KLSAgICBtX3BSYW5nZXMgPSBGWF9BbGxvYyhGWF9GTE9BVCwgbV9uQ29tcG9uZW50cyAqIDIpOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbkNvbXBvbmVudHMgKiAyOyBpICsrKSB7DQotICAgICAgICBpZiAocFJhbmdlcykgew0KLSAgICAgICAgICAgIG1fcFJhbmdlc1tpXSA9IHBSYW5nZXMtPkdldE51bWJlcihpKTsNCi0gICAgICAgIH0gZWxzZSBpZiAoaSAlIDIpIHsNCi0gICAgICAgICAgICBtX3BSYW5nZXNbaV0gPSAxLjBmOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBtX3BSYW5nZXNbaV0gPSAwOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fcFByb2ZpbGUgPSBwRG9jLT5Mb2FkSWNjUHJvZmlsZShwU3RyZWFtLCBtX25Db21wb25lbnRzKTsNCi0gICAgaWYgKCFtX3BQcm9maWxlKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKG1fcFByb2ZpbGUtPm1fcFRyYW5zZm9ybSA9PSBOVUxMKSB7DQotICAgICAgICBDUERGX09iamVjdCogcEFsdGVyQ1NPYmogPSBwU3RyZWFtLT5HZXREaWN0KCktPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiQWx0ZXJuYXRlIikpOw0KLSAgICAgICAgaWYgKHBBbHRlckNTT2JqKSB7DQotICAgICAgICAgICAgQ1BERl9Db2xvclNwYWNlKiBhbHRlcl9jcyA9IENQREZfQ29sb3JTcGFjZTo6TG9hZChwRG9jLCBwQWx0ZXJDU09iaik7DQotICAgICAgICAgICAgaWYgKGFsdGVyX2NzKSB7DQotICAgICAgICAgICAgICAgIGlmIChhbHRlcl9jcy0+Q291bnRDb21wb25lbnRzKCkgPiBtX25Db21wb25lbnRzKSB7DQotICAgICAgICAgICAgICAgICAgICBhbHRlcl9jcy0+UmVsZWFzZUNTKCk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBtX3BBbHRlckNTID0gYWx0ZXJfY3M7DQotICAgICAgICAgICAgICAgICAgICBtX2JPd24gPSBUUlVFOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCFtX3BBbHRlckNTKSB7DQotICAgICAgICAgICAgaWYgKG1fbkNvbXBvbmVudHMgPT0gMykgew0KLSAgICAgICAgICAgICAgICBtX3BBbHRlckNTID0gR2V0U3RvY2tDUyhQREZDU19ERVZJQ0VSR0IpOw0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9uQ29tcG9uZW50cyA9PSA0KSB7DQotICAgICAgICAgICAgICAgIG1fcEFsdGVyQ1MgPSBHZXRTdG9ja0NTKFBERkNTX0RFVklDRUNNWUspOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIG1fcEFsdGVyQ1MgPSBHZXRTdG9ja0NTKFBERkNTX0RFVklDRUdSQVkpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDUERGX0lDQ0Jhc2VkQ1M6OkdldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQmIFIsIEZYX0ZMT0FUJiBHLCBGWF9GTE9BVCYgQikgY29uc3QNCi17DQotICAgIGlmIChtX3BQcm9maWxlICYmIG1fcFByb2ZpbGUtPm1fYnNSR0IpIHsNCi0gICAgICAgIFIgPSBwQnVmWzBdOw0KLSAgICAgICAgRyA9IHBCdWZbMV07DQotICAgICAgICBCID0gcEJ1ZlsyXTsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIElDb2RlY19JY2NNb2R1bGUgKnBJY2NNb2R1bGUgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldEljY01vZHVsZSgpOw0KLSAgICBpZiAobV9wUHJvZmlsZS0+bV9wVHJhbnNmb3JtID09IE5VTEwgfHwgcEljY01vZHVsZSA9PSBOVUxMKSB7DQotICAgICAgICBpZiAobV9wQWx0ZXJDUykgew0KLSAgICAgICAgICAgIG1fcEFsdGVyQ1MtPkdldFJHQihwQnVmLCBSLCBHLCBCKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgUiA9IEcgPSBCID0gMC4wZjsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIEZYX0ZMT0FUIHJnYlszXTsNCi0gICAgcEljY01vZHVsZS0+VHJhbnNsYXRlKG1fcFByb2ZpbGUtPm1fcFRyYW5zZm9ybSwgcEJ1ZiwgcmdiKTsNCi0gICAgUiA9IHJnYlswXTsNCi0gICAgRyA9IHJnYlsxXTsNCi0gICAgQiA9IHJnYlsyXTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ1BERl9JQ0NCYXNlZENTOjp2X0dldENNWUsoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUJiBjLCBGWF9GTE9BVCYgbSwgRlhfRkxPQVQmIHksIEZYX0ZMT0FUJiBrKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fbkNvbXBvbmVudHMgIT0gNCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGMgPSBwQnVmWzBdOw0KLSAgICBtID0gcEJ1ZlsxXTsNCi0gICAgeSA9IHBCdWZbMl07DQotICAgIGsgPSBwQnVmWzNdOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDUERGX0lDQ0Jhc2VkQ1M6OlNldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQgUiwgRlhfRkxPQVQgRywgRlhfRkxPQVQgQikgY29uc3QNCi17DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotdm9pZCBDUERGX0lDQ0Jhc2VkQ1M6OkVuYWJsZVN0ZENvbnZlcnNpb24oRlhfQk9PTCBiRW5hYmxlZCkNCi17DQotICAgIENQREZfQ29sb3JTcGFjZTo6RW5hYmxlU3RkQ29udmVyc2lvbihiRW5hYmxlZCk7DQotICAgIGlmIChtX3BBbHRlckNTKSB7DQotICAgICAgICBtX3BBbHRlckNTLT5FbmFibGVTdGRDb252ZXJzaW9uKGJFbmFibGVkKTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfSUNDQmFzZWRDUzo6VHJhbnNsYXRlSW1hZ2VMaW5lKEZYX0xQQllURSBwRGVzdEJ1ZiwgRlhfTFBDQllURSBwU3JjQnVmLCBpbnQgcGl4ZWxzLCBpbnQgaW1hZ2Vfd2lkdGgsIGludCBpbWFnZV9oZWlnaHQsIEZYX0JPT0wgYlRyYW5zTWFzaykgY29uc3QNCi17DQotICAgIGlmIChtX3BQcm9maWxlLT5tX2JzUkdCKSB7DQotICAgICAgICBSZXZlcnNlUkdCKHBEZXN0QnVmLCBwU3JjQnVmLCBwaXhlbHMpOw0KLSAgICB9IGVsc2UgaWYgKG1fcFByb2ZpbGUtPm1fcFRyYW5zZm9ybSkgew0KLSAgICAgICAgaW50IG5NYXhDb2xvcnMgPSAxOw0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX25Db21wb25lbnRzOyBpICsrKSB7DQotICAgICAgICAgICAgbk1heENvbG9ycyAqPSA1MjsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX25Db21wb25lbnRzID4gMyB8fCBpbWFnZV93aWR0aCAqIGltYWdlX2hlaWdodCA8IG5NYXhDb2xvcnMgKiAzIC8gMikgew0KLSAgICAgICAgICAgIENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0SWNjTW9kdWxlKCktPlRyYW5zbGF0ZVNjYW5saW5lKG1fcFByb2ZpbGUtPm1fcFRyYW5zZm9ybSwgcERlc3RCdWYsIHBTcmNCdWYsIHBpeGVscyk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlmIChtX3BDYWNoZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICgoQ1BERl9JQ0NCYXNlZENTKil0aGlzKS0+bV9wQ2FjaGUgPSBGWF9BbGxvYyhGWF9CWVRFLCBuTWF4Q29sb3JzICogMyk7DQotICAgICAgICAgICAgICAgIEZYX0xQQllURSB0ZW1wX3NyYyA9IEZYX0FsbG9jKEZYX0JZVEUsIG5NYXhDb2xvcnMgKiBtX25Db21wb25lbnRzKTsNCi0gICAgICAgICAgICAgICAgRlhfTFBCWVRFIHBTcmMgPSB0ZW1wX3NyYzsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuTWF4Q29sb3JzOyBpICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBjb2xvciA9IGk7DQotICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBvcmRlciA9IG5NYXhDb2xvcnMgLyA1MjsNCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgbV9uQ29tcG9uZW50czsgYyArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICpwU3JjKysgPSAoRlhfQllURSkoY29sb3IgLyBvcmRlciAqIDUpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yICU9IG9yZGVyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyIC89IDUyOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0SWNjTW9kdWxlKCktPlRyYW5zbGF0ZVNjYW5saW5lKG1fcFByb2ZpbGUtPm1fcFRyYW5zZm9ybSwgbV9wQ2FjaGUsIHRlbXBfc3JjLCBuTWF4Q29sb3JzKTsNCi0gICAgICAgICAgICAgICAgRlhfRnJlZSh0ZW1wX3NyYyk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGl4ZWxzOyBpICsrKSB7DQotICAgICAgICAgICAgICAgIGludCBpbmRleCA9IDA7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgbV9uQ29tcG9uZW50czsgYyArKykgew0KLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleCAqIDUyICsgKCpwU3JjQnVmKSAvIDU7DQotICAgICAgICAgICAgICAgICAgICBwU3JjQnVmICsrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGluZGV4ICo9IDM7DQotICAgICAgICAgICAgICAgICpwRGVzdEJ1ZisrID0gbV9wQ2FjaGVbaW5kZXhdOw0KLSAgICAgICAgICAgICAgICAqcERlc3RCdWYrKyA9IG1fcENhY2hlW2luZGV4ICsgMV07DQotICAgICAgICAgICAgICAgICpwRGVzdEJ1ZisrID0gbV9wQ2FjaGVbaW5kZXggKyAyXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZiAobV9wQWx0ZXJDUykgew0KLSAgICAgICAgbV9wQWx0ZXJDUy0+VHJhbnNsYXRlSW1hZ2VMaW5lKHBEZXN0QnVmLCBwU3JjQnVmLCBwaXhlbHMsIGltYWdlX3dpZHRoLCBpbWFnZV9oZWlnaHQpOw0KLSAgICB9DQotfQ0KLWNsYXNzIENQREZfSW5kZXhlZENTIDogcHVibGljIENQREZfQ29sb3JTcGFjZQ0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfSW5kZXhlZENTKCk7DQotICAgIHZpcnR1YWwgfkNQREZfSW5kZXhlZENTKCk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJdl9Mb2FkKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfQXJyYXkqIHBBcnJheSk7DQotICAgIHZvaWQJCQkJR2V0RGVmYXVsdFZhbHVlKGludCBpQ29tcG9uZW50LCBGWF9GTE9BVCYgbWluLCBGWF9GTE9BVCYgbWF4KSBjb25zdA0KLSAgICB7DQotICAgICAgICBtaW4gPSAwOw0KLSAgICAgICAgbWF4ID0gKEZYX0ZMT0FUKW1fTWF4SW5kZXg7DQotICAgIH0NCi0gICAgdmlydHVhbCBGWF9CT09MCQlHZXRSR0IoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUJiBSLCBGWF9GTE9BVCYgRywgRlhfRkxPQVQmIEIpIGNvbnN0Ow0KLSAgICB2aXJ0dWFsIENQREZfQ29sb3JTcGFjZSoJR2V0QmFzZUNTKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcEJhc2VDUzsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIHZvaWQJCUVuYWJsZVN0ZENvbnZlcnNpb24oRlhfQk9PTCBiRW5hYmxlZCk7DQotICAgIENQREZfQ29sb3JTcGFjZSoJbV9wQmFzZUNTOw0KLSAgICBpbnQJCQkJCW1fbkJhc2VDb21wb25lbnRzOw0KLSAgICBpbnQJCQkJCW1fTWF4SW5kZXg7DQotICAgIENGWF9CeXRlU3RyaW5nCQltX1RhYmxlOw0KLSAgICBGWF9GTE9BVCoJCW1fcENvbXBNaW5NYXg7DQotfTsNCi1DUERGX0luZGV4ZWRDUzo6Q1BERl9JbmRleGVkQ1MoKQ0KLXsNCi0gICAgbV9wQmFzZUNTID0gTlVMTDsNCi0gICAgbV9GYW1pbHkgPSBQREZDU19JTkRFWEVEOw0KLSAgICBtX25Db21wb25lbnRzID0gMTsNCi0gICAgbV9wQ29tcE1pbk1heCA9IE5VTEw7DQotfQ0KLUNQREZfSW5kZXhlZENTOjp+Q1BERl9JbmRleGVkQ1MoKQ0KLXsNCi0gICAgaWYgKG1fcENvbXBNaW5NYXgpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wQ29tcE1pbk1heCk7DQotICAgIH0NCi0gICAgQ1BERl9Db2xvclNwYWNlKiBwQ1MgPSBtX3BCYXNlQ1M7DQotICAgIGlmIChwQ1MgJiYgbV9wRG9jdW1lbnQpIHsNCi0gICAgICAgIG1fcERvY3VtZW50LT5HZXRQYWdlRGF0YSgpLT5SZWxlYXNlQ29sb3JTcGFjZShwQ1MtPkdldEFycmF5KCkpOw0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BERl9JbmRleGVkQ1M6OnZfTG9hZChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0FycmF5KiBwQXJyYXkpDQotew0KLSAgICBpZiAocEFycmF5LT5HZXRDb3VudCgpIDwgNCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIENQREZfT2JqZWN0KiBwQmFzZU9iaiA9IHBBcnJheS0+R2V0RWxlbWVudFZhbHVlKDEpOw0KLSAgICBpZiAocEJhc2VPYmogPT0gbV9wQXJyYXkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDUERGX0RvY1BhZ2VEYXRhKiBwRG9jUGFnZURhdGEgPSBwRG9jLT5HZXRQYWdlRGF0YSgpOw0KLSAgICBtX3BCYXNlQ1MgPSBwRG9jUGFnZURhdGEtPkdldENvbG9yU3BhY2UocEJhc2VPYmosIE5VTEwpOw0KLSAgICBpZiAobV9wQmFzZUNTID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBtX25CYXNlQ29tcG9uZW50cyA9IG1fcEJhc2VDUy0+Q291bnRDb21wb25lbnRzKCk7DQotICAgIG1fcENvbXBNaW5NYXggPSBGWF9BbGxvYyhGWF9GTE9BVCwgbV9uQmFzZUNvbXBvbmVudHMgKiAyKTsNCi0gICAgRlhfRkxPQVQgZGVmdmFsdWU7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9uQmFzZUNvbXBvbmVudHM7IGkgKyspIHsNCi0gICAgICAgIG1fcEJhc2VDUy0+R2V0RGVmYXVsdFZhbHVlKGksIGRlZnZhbHVlLCBtX3BDb21wTWluTWF4W2kgKiAyXSwgbV9wQ29tcE1pbk1heFtpICogMiArIDFdKTsNCi0gICAgICAgIG1fcENvbXBNaW5NYXhbaSAqIDIgKyAxXSAtPSBtX3BDb21wTWluTWF4W2kgKiAyXTsNCi0gICAgfQ0KLSAgICBtX01heEluZGV4ID0gcEFycmF5LT5HZXRJbnRlZ2VyKDIpOw0KLSAgICBDUERGX09iamVjdCogcFRhYmxlT2JqID0gcEFycmF5LT5HZXRFbGVtZW50VmFsdWUoMyk7DQotICAgIGlmIChwVGFibGVPYmogPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYX0xQQ0JZVEUgcFRhYmxlID0gTlVMTDsNCi0gICAgRlhfRFdPUkQgc2l6ZSA9IDA7DQotICAgIENQREZfU3RyZWFtQWNjKiBwU3RyZWFtQWNjID0gTlVMTDsNCi0gICAgaWYgKHBUYWJsZU9iai0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJJTkcpIHsNCi0gICAgICAgIG1fVGFibGUgPSAoKENQREZfU3RyaW5nKilwVGFibGVPYmopLT5HZXRTdHJpbmcoKTsNCi0gICAgfSBlbHNlIGlmIChwVGFibGVPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSRUFNKSB7DQotICAgICAgICBDUERGX1N0cmVhbUFjYyBhY2M7DQotICAgICAgICBhY2MuTG9hZEFsbERhdGEoKENQREZfU3RyZWFtKilwVGFibGVPYmosIEZBTFNFKTsNCi0gICAgICAgIG1fVGFibGUgPSBDRlhfQnl0ZVN0cmluZ0MoYWNjLkdldERhdGEoKSwgYWNjLkdldFNpemUoKSk7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ1BERl9JbmRleGVkQ1M6OkdldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQmIFIsIEZYX0ZMT0FUJiBHLCBGWF9GTE9BVCYgQikgY29uc3QNCi17DQotICAgIGludCBpbmRleCA9IChGWF9JTlQzMikoKnBCdWYpOw0KLSAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gbV9NYXhJbmRleCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChtX25CYXNlQ29tcG9uZW50cykgew0KLSAgICAgICAgaWYgKGluZGV4ID09IElOVF9NQVggfHwgKGluZGV4ICsgMSkgPiBJTlRfTUFYIC8gbV9uQmFzZUNvbXBvbmVudHMgfHwNCi0gICAgICAgICAgICAgICAgKGluZGV4ICsgMSkqbV9uQmFzZUNvbXBvbmVudHMgPiAoaW50KW1fVGFibGUuR2V0TGVuZ3RoKCkpIHsNCi0gICAgICAgICAgICBSID0gRyA9IEIgPSAwOw0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDRlhfRml4ZWRCdWZHcm93PEZYX0ZMT0FULCAxNj4gQ29tcHMobV9uQmFzZUNvbXBvbmVudHMpOw0KLSAgICBGWF9GTE9BVCogY29tcHMgPSBDb21wczsNCi0gICAgRlhfTFBDQllURSBwVGFibGUgPSBtX1RhYmxlOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbkJhc2VDb21wb25lbnRzOyBpICsrKSB7DQotICAgICAgICBjb21wc1tpXSA9IG1fcENvbXBNaW5NYXhbaSAqIDJdICsgbV9wQ29tcE1pbk1heFtpICogMiArIDFdICogcFRhYmxlW2luZGV4ICogbV9uQmFzZUNvbXBvbmVudHMgKyBpXSAvIDI1NTsNCi0gICAgfQ0KLSAgICBtX3BCYXNlQ1MtPkdldFJHQihjb21wcywgUiwgRywgQik7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi12b2lkIENQREZfSW5kZXhlZENTOjpFbmFibGVTdGRDb252ZXJzaW9uKEZYX0JPT0wgYkVuYWJsZWQpDQotew0KLSAgICBDUERGX0NvbG9yU3BhY2U6OkVuYWJsZVN0ZENvbnZlcnNpb24oYkVuYWJsZWQpOw0KLSAgICBpZiAobV9wQmFzZUNTKSB7DQotICAgICAgICBtX3BCYXNlQ1MtPkVuYWJsZVN0ZENvbnZlcnNpb24oYkVuYWJsZWQpOw0KLSAgICB9DQotfQ0KLSNkZWZpbmUgTUFYX1BBVFRFUk5fQ09MT1JDT01QUwkxNg0KLXR5cGVkZWYgc3RydWN0IF9QYXR0ZXJuVmFsdWUgew0KLSAgICBDUERGX1BhdHRlcm4qCW1fcFBhdHRlcm47DQotICAgIGludAkJCQltX25Db21wczsNCi0gICAgRlhfRkxPQVQJCW1fQ29tcHNbTUFYX1BBVFRFUk5fQ09MT1JDT01QU107DQotfSBQYXR0ZXJuVmFsdWU7DQotQ1BERl9QYXR0ZXJuQ1M6OkNQREZfUGF0dGVybkNTKCkNCi17DQotICAgIG1fRmFtaWx5ID0gUERGQ1NfUEFUVEVSTjsNCi0gICAgbV9wQmFzZUNTID0gTlVMTDsNCi0gICAgbV9uQ29tcG9uZW50cyA9IDE7DQotfQ0KLUNQREZfUGF0dGVybkNTOjp+Q1BERl9QYXR0ZXJuQ1MoKQ0KLXsNCi0gICAgQ1BERl9Db2xvclNwYWNlKiBwQ1MgPSBtX3BCYXNlQ1M7DQotICAgIGlmIChwQ1MgJiYgbV9wRG9jdW1lbnQpIHsNCi0gICAgICAgIG1fcERvY3VtZW50LT5HZXRQYWdlRGF0YSgpLT5SZWxlYXNlQ29sb3JTcGFjZShwQ1MtPkdldEFycmF5KCkpOw0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BERl9QYXR0ZXJuQ1M6OnZfTG9hZChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0FycmF5KiBwQXJyYXkpDQotew0KLSAgICBDUERGX09iamVjdCogcEJhc2VDUyA9IHBBcnJheS0+R2V0RWxlbWVudFZhbHVlKDEpOw0KLSAgICBpZiAocEJhc2VDUyA9PSBtX3BBcnJheSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIENQREZfRG9jUGFnZURhdGEqIHBEb2NQYWdlRGF0YSA9IHBEb2MtPkdldFBhZ2VEYXRhKCk7DQotICAgIG1fcEJhc2VDUyA9IHBEb2NQYWdlRGF0YS0+R2V0Q29sb3JTcGFjZShwQmFzZUNTLCBOVUxMKTsNCi0gICAgaWYgKG1fcEJhc2VDUykgew0KLSAgICAgICAgbV9uQ29tcG9uZW50cyA9IG1fcEJhc2VDUy0+Q291bnRDb21wb25lbnRzKCkgKyAxOw0KLSAgICAgICAgaWYgKG1fcEJhc2VDUy0+Q291bnRDb21wb25lbnRzKCkgPiBNQVhfUEFUVEVSTl9DT0xPUkNPTVBTKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9uQ29tcG9uZW50cyA9IDE7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ1BERl9QYXR0ZXJuQ1M6OkdldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQmIFIsIEZYX0ZMT0FUJiBHLCBGWF9GTE9BVCYgQikgY29uc3QNCi17DQotICAgIGlmIChtX3BCYXNlQ1MpIHsNCi0gICAgICAgIFBhdHRlcm5WYWx1ZSogcHZhbHVlID0gKFBhdHRlcm5WYWx1ZSopcEJ1ZjsNCi0gICAgICAgIG1fcEJhc2VDUy0+R2V0UkdCKHB2YWx1ZS0+bV9Db21wcywgUiwgRywgQik7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBSID0gRyA9IEIgPSAwLjc1ZjsNCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1jbGFzcyBDUERGX1NlcGFyYXRpb25DUyA6IHB1YmxpYyBDUERGX0NvbG9yU3BhY2UNCi17DQotcHVibGljOg0KLSAgICBDUERGX1NlcGFyYXRpb25DUygpOw0KLSAgICB2aXJ0dWFsIH5DUERGX1NlcGFyYXRpb25DUygpOw0KLSAgICB2aXJ0dWFsIHZvaWQJCUdldERlZmF1bHRWYWx1ZShpbnQgaUNvbXBvbmVudCwgRlhfRkxPQVQmIHZhbHVlLCBGWF9GTE9BVCYgbWluLCBGWF9GTE9BVCYgbWF4KSBjb25zdA0KLSAgICB7DQotICAgICAgICB2YWx1ZSA9IDEuMGY7DQotICAgICAgICBtaW4gPSAwOw0KLSAgICAgICAgbWF4ID0gMS4wZjsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCXZfTG9hZChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0FycmF5KiBwQXJyYXkpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCUdldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQmIFIsIEZYX0ZMT0FUJiBHLCBGWF9GTE9BVCYgQikgY29uc3Q7DQotICAgIHZpcnR1YWwgdm9pZAkJRW5hYmxlU3RkQ29udmVyc2lvbihGWF9CT09MIGJFbmFibGVkKTsNCi0gICAgQ1BERl9Db2xvclNwYWNlKgltX3BBbHRDUzsNCi0gICAgQ1BERl9GdW5jdGlvbioJCW1fcEZ1bmM7DQotICAgIGVudW0ge05vbmUsIEFsbCwgQ29sb3JhbnR9CW1fVHlwZTsNCi19Ow0KLUNQREZfU2VwYXJhdGlvbkNTOjpDUERGX1NlcGFyYXRpb25DUygpDQotew0KLSAgICBtX0ZhbWlseSA9IFBERkNTX1NFUEFSQVRJT047DQotICAgIG1fcEFsdENTID0gTlVMTDsNCi0gICAgbV9wRnVuYyA9IE5VTEw7DQotICAgIG1fbkNvbXBvbmVudHMgPSAxOw0KLX0NCi1DUERGX1NlcGFyYXRpb25DUzo6fkNQREZfU2VwYXJhdGlvbkNTKCkNCi17DQotICAgIGlmIChtX3BBbHRDUykgew0KLSAgICAgICAgbV9wQWx0Q1MtPlJlbGVhc2VDUygpOw0KLSAgICB9DQotICAgIGlmIChtX3BGdW5jKSB7DQotICAgICAgICBkZWxldGUgbV9wRnVuYzsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENQREZfU2VwYXJhdGlvbkNTOjp2X0xvYWQoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9BcnJheSogcEFycmF5KQ0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgbmFtZSA9IHBBcnJheS0+R2V0U3RyaW5nKDEpOw0KLSAgICBpZiAobmFtZSA9PSBGWF9CU1RSQygiTm9uZSIpKSB7DQotICAgICAgICBtX1R5cGUgPSBOb25lOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9UeXBlID0gQ29sb3JhbnQ7DQotICAgICAgICBDUERGX09iamVjdCogcEFsdENTID0gcEFycmF5LT5HZXRFbGVtZW50VmFsdWUoMik7DQotICAgICAgICBpZiAocEFsdENTID09IG1fcEFycmF5KSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wQWx0Q1MgPSBMb2FkKHBEb2MsIHBBbHRDUyk7DQotICAgICAgICBDUERGX09iamVjdCogcEZ1bmNPYmogPSBwQXJyYXktPkdldEVsZW1lbnRWYWx1ZSgzKTsNCi0gICAgICAgIGlmIChwRnVuY09iaiAmJiBwRnVuY09iai0+R2V0VHlwZSgpICE9IFBERk9CSl9OQU1FKSB7DQotICAgICAgICAgICAgbV9wRnVuYyA9IENQREZfRnVuY3Rpb246OkxvYWQocEZ1bmNPYmopOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fcEZ1bmMgJiYgbV9wQWx0Q1MgJiYgbV9wRnVuYy0+Q291bnRPdXRwdXRzKCkgPCBtX3BBbHRDUy0+Q291bnRDb21wb25lbnRzKCkpIHsNCi0gICAgICAgICAgICBkZWxldGUgbV9wRnVuYzsNCi0gICAgICAgICAgICBtX3BGdW5jID0gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDUERGX1NlcGFyYXRpb25DUzo6R2V0UkdCKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCYgUiwgRlhfRkxPQVQmIEcsIEZYX0ZMT0FUJiBCKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fVHlwZSA9PSBOb25lKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKG1fcEZ1bmMgPT0gTlVMTCkgew0KLSAgICAgICAgaWYgKG1fcEFsdENTID09IE5VTEwpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBpbnQgbkNvbXBzID0gbV9wQWx0Q1MtPkNvdW50Q29tcG9uZW50cygpOw0KLSAgICAgICAgQ0ZYX0ZpeGVkQnVmR3JvdzxGWF9GTE9BVCwgMTY+IHJlc3VsdHMobkNvbXBzKTsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkNvbXBzOyBpICsrKSB7DQotICAgICAgICAgICAgcmVzdWx0c1tpXSA9ICpwQnVmOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wQWx0Q1MtPkdldFJHQihyZXN1bHRzLCBSLCBHLCBCKTsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIENGWF9GaXhlZEJ1Zkdyb3c8RlhfRkxPQVQsIDE2PiByZXN1bHRzKG1fcEZ1bmMtPkNvdW50T3V0cHV0cygpKTsNCi0gICAgaW50IG5yZXN1bHRzOw0KLSAgICBtX3BGdW5jLT5DYWxsKHBCdWYsIDEsIHJlc3VsdHMsIG5yZXN1bHRzKTsNCi0gICAgaWYgKG5yZXN1bHRzID09IDApIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAobV9wQWx0Q1MpIHsNCi0gICAgICAgIG1fcEFsdENTLT5HZXRSR0IocmVzdWx0cywgUiwgRywgQik7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIFIgPSBHID0gQiA9IDA7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi19DQotdm9pZCBDUERGX1NlcGFyYXRpb25DUzo6RW5hYmxlU3RkQ29udmVyc2lvbihGWF9CT09MIGJFbmFibGVkKQ0KLXsNCi0gICAgQ1BERl9Db2xvclNwYWNlOjpFbmFibGVTdGRDb252ZXJzaW9uKGJFbmFibGVkKTsNCi0gICAgaWYgKG1fcEFsdENTKSB7DQotICAgICAgICBtX3BBbHRDUy0+RW5hYmxlU3RkQ29udmVyc2lvbihiRW5hYmxlZCk7DQotICAgIH0NCi19DQotY2xhc3MgQ1BERl9EZXZpY2VOQ1MgOiBwdWJsaWMgQ1BERl9Db2xvclNwYWNlDQotew0KLXB1YmxpYzoNCi0gICAgQ1BERl9EZXZpY2VOQ1MoKTsNCi0gICAgdmlydHVhbCB+Q1BERl9EZXZpY2VOQ1MoKTsNCi0gICAgdmlydHVhbCB2b2lkCQlHZXREZWZhdWx0VmFsdWUoaW50IGlDb21wb25lbnQsIEZYX0ZMT0FUJiB2YWx1ZSwgRlhfRkxPQVQmIG1pbiwgRlhfRkxPQVQmIG1heCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgdmFsdWUgPSAxLjBmOw0KLSAgICAgICAgbWluID0gMDsNCi0gICAgICAgIG1heCA9IDEuMGY7DQotICAgIH0NCi0gICAgdmlydHVhbCBGWF9CT09MCXZfTG9hZChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0FycmF5KiBwQXJyYXkpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJR2V0UkdCKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCYgUiwgRlhfRkxPQVQmIEcsIEZYX0ZMT0FUJiBCKSBjb25zdDsNCi0gICAgdmlydHVhbCB2b2lkCUVuYWJsZVN0ZENvbnZlcnNpb24oRlhfQk9PTCBiRW5hYmxlZCk7DQotICAgIENQREZfQ29sb3JTcGFjZSoJbV9wQWx0Q1M7DQotICAgIENQREZfRnVuY3Rpb24qCQltX3BGdW5jOw0KLX07DQotQ1BERl9EZXZpY2VOQ1M6OkNQREZfRGV2aWNlTkNTKCkNCi17DQotICAgIG1fRmFtaWx5ID0gUERGQ1NfREVWSUNFTjsNCi0gICAgbV9wQWx0Q1MgPSBOVUxMOw0KLSAgICBtX3BGdW5jID0gTlVMTDsNCi19DQotQ1BERl9EZXZpY2VOQ1M6On5DUERGX0RldmljZU5DUygpDQotew0KLSAgICBpZiAobV9wRnVuYykgew0KLSAgICAgICAgZGVsZXRlIG1fcEZ1bmM7DQotICAgIH0NCi0gICAgaWYgKG1fcEFsdENTKSB7DQotICAgICAgICBtX3BBbHRDUy0+UmVsZWFzZUNTKCk7DQotICAgIH0NCi19DQotRlhfQk9PTCBDUERGX0RldmljZU5DUzo6dl9Mb2FkKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfQXJyYXkqIHBBcnJheSkNCi17DQotICAgIENQREZfT2JqZWN0KiBwT2JqID0gcEFycmF5LT5HZXRFbGVtZW50VmFsdWUoMSk7DQotICAgIGlmICghcE9iaikgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChwT2JqLT5HZXRUeXBlKCkgIT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbV9uQ29tcG9uZW50cyA9ICgoQ1BERl9BcnJheSopcE9iaiktPkdldENvdW50KCk7DQotICAgIENQREZfT2JqZWN0KiBwQWx0Q1MgPSBwQXJyYXktPkdldEVsZW1lbnRWYWx1ZSgyKTsNCi0gICAgaWYgKCFwQWx0Q1MgfHwgcEFsdENTID09IG1fcEFycmF5KSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbV9wQWx0Q1MgPSBMb2FkKHBEb2MsIHBBbHRDUyk7DQotICAgIG1fcEZ1bmMgPSBDUERGX0Z1bmN0aW9uOjpMb2FkKHBBcnJheS0+R2V0RWxlbWVudFZhbHVlKDMpKTsNCi0gICAgaWYgKG1fcEFsdENTID09IE5VTEwgfHwgbV9wRnVuYyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKG1fcEZ1bmMtPkNvdW50T3V0cHV0cygpIDwgbV9wQWx0Q1MtPkNvdW50Q29tcG9uZW50cygpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ1BERl9EZXZpY2VOQ1M6OkdldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQmIFIsIEZYX0ZMT0FUJiBHLCBGWF9GTE9BVCYgQikgY29uc3QNCi17DQotICAgIGlmIChtX3BGdW5jID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDRlhfRml4ZWRCdWZHcm93PEZYX0ZMT0FULCAxNj4gcmVzdWx0cyhtX3BGdW5jLT5Db3VudE91dHB1dHMoKSk7DQotICAgIGludCBucmVzdWx0czsNCi0gICAgbV9wRnVuYy0+Q2FsbChwQnVmLCBtX25Db21wb25lbnRzLCByZXN1bHRzLCBucmVzdWx0cyk7DQotICAgIGlmIChucmVzdWx0cyA9PSAwKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbV9wQWx0Q1MtPkdldFJHQihyZXN1bHRzLCBSLCBHLCBCKTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ1BERl9EZXZpY2VOQ1M6OkVuYWJsZVN0ZENvbnZlcnNpb24oRlhfQk9PTCBiRW5hYmxlZCkNCi17DQotICAgIENQREZfQ29sb3JTcGFjZTo6RW5hYmxlU3RkQ29udmVyc2lvbihiRW5hYmxlZCk7DQotICAgIGlmIChtX3BBbHRDUykgew0KLSAgICAgICAgbV9wQWx0Q1MtPkVuYWJsZVN0ZENvbnZlcnNpb24oYkVuYWJsZWQpOw0KLSAgICB9DQotfQ0KLUNQREZfQ29sb3JTcGFjZSogQ1BERl9Db2xvclNwYWNlOjpHZXRTdG9ja0NTKGludCBmYW1pbHkpDQotew0KLSAgICByZXR1cm4gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRQYWdlTW9kdWxlKCktPkdldFN0b2NrQ1MoZmFtaWx5KTs7DQotfQ0KLUNQREZfQ29sb3JTcGFjZSogX0NTRnJvbU5hbWUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUpDQotew0KLSAgICBpZiAobmFtZSA9PSBGWF9CU1RSQygiRGV2aWNlUkdCIikgfHwgbmFtZSA9PSBGWF9CU1RSQygiUkdCIikpIHsNCi0gICAgICAgIHJldHVybiBDUERGX0NvbG9yU3BhY2U6OkdldFN0b2NrQ1MoUERGQ1NfREVWSUNFUkdCKTsNCi0gICAgfQ0KLSAgICBpZiAobmFtZSA9PSBGWF9CU1RSQygiRGV2aWNlR3JheSIpIHx8IG5hbWUgPT0gRlhfQlNUUkMoIkciKSkgew0KLSAgICAgICAgcmV0dXJuIENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19ERVZJQ0VHUkFZKTsNCi0gICAgfQ0KLSAgICBpZiAobmFtZSA9PSBGWF9CU1RSQygiRGV2aWNlQ01ZSyIpIHx8IG5hbWUgPT0gRlhfQlNUUkMoIkNNWUsiKSkgew0KLSAgICAgICAgcmV0dXJuIENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19ERVZJQ0VDTVlLKTsNCi0gICAgfQ0KLSAgICBpZiAobmFtZSA9PSBGWF9CU1RSQygiUGF0dGVybiIpKSB7DQotICAgICAgICByZXR1cm4gQ1BERl9Db2xvclNwYWNlOjpHZXRTdG9ja0NTKFBERkNTX1BBVFRFUk4pOw0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1DUERGX0NvbG9yU3BhY2UqIENQREZfQ29sb3JTcGFjZTo6TG9hZChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX09iamVjdCogcE9iaikNCi17DQotICAgIGlmIChwT2JqID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmIChwT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX05BTUUpIHsNCi0gICAgICAgIHJldHVybiBfQ1NGcm9tTmFtZShwT2JqLT5HZXRTdHJpbmcoKSk7DQotICAgIH0NCi0gICAgaWYgKHBPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSRUFNKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkgKnBEaWN0ID0gKChDUERGX1N0cmVhbSAqKXBPYmopLT5HZXREaWN0KCk7DQotICAgICAgICBpZiAoIXBEaWN0KSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBDUERGX0NvbG9yU3BhY2UgKnBSZXQgPSBOVUxMOw0KLSAgICAgICAgRlhfUE9TSVRJT04gcG9zID0gcERpY3QtPkdldFN0YXJ0UG9zKCk7DQotICAgICAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgYnNLZXk7DQotICAgICAgICAgICAgQ1BERl9PYmplY3QgKnBWYWx1ZSA9IHBEaWN0LT5HZXROZXh0RWxlbWVudChwb3MsIGJzS2V5KTsNCi0gICAgICAgICAgICBpZiAocFZhbHVlLT5HZXRUeXBlKCkgPT0gUERGT0JKX05BTUUpIHsNCi0gICAgICAgICAgICAgICAgcFJldCA9IF9DU0Zyb21OYW1lKHBWYWx1ZS0+R2V0U3RyaW5nKCkpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAocFJldCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gcFJldDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAocE9iai0+R2V0VHlwZSgpICE9IFBERk9CSl9BUlJBWSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9BcnJheSogcEFycmF5ID0gKENQREZfQXJyYXkqKXBPYmo7DQotICAgIGlmIChwQXJyYXktPkdldENvdW50KCkgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgZmFtaWx5bmFtZSA9IHBBcnJheS0+R2V0RWxlbWVudFZhbHVlKDApLT5HZXRTdHJpbmcoKTsNCi0gICAgaWYgKHBBcnJheS0+R2V0Q291bnQoKSA9PSAxKSB7DQotICAgICAgICByZXR1cm4gX0NTRnJvbU5hbWUoZmFtaWx5bmFtZSk7DQotICAgIH0NCi0gICAgQ1BERl9Db2xvclNwYWNlKiBwQ1MgPSBOVUxMOw0KLSAgICBGWF9EV09SRCBpZCA9IGZhbWlseW5hbWUuR2V0SUQoKTsNCi0gICAgaWYgKGlkID09IEZYQlNUUl9JRCgnQycsICdhJywgJ2wnLCAnRycpKSB7DQotICAgICAgICBwQ1MgPSBGWF9ORVcgQ1BERl9DYWxHcmF5KCk7DQotICAgIH0gZWxzZSBpZiAoaWQgPT0gRlhCU1RSX0lEKCdDJywgJ2EnLCAnbCcsICdSJykpIHsNCi0gICAgICAgIHBDUyA9IEZYX05FVyBDUERGX0NhbFJHQigpOw0KLSAgICB9IGVsc2UgaWYgKGlkID09IEZYQlNUUl9JRCgnTCcsICdhJywgJ2InLCAwKSkgew0KLSAgICAgICAgcENTID0gRlhfTkVXIENQREZfTGFiQ1MoKTsNCi0gICAgfSBlbHNlIGlmIChpZCA9PSBGWEJTVFJfSUQoJ0knLCAnQycsICdDJywgJ0InKSkgew0KLSAgICAgICAgcENTID0gRlhfTkVXIENQREZfSUNDQmFzZWRDUygpOw0KLSAgICB9IGVsc2UgaWYgKGlkID09IEZYQlNUUl9JRCgnSScsICduJywgJ2QnLCAnZScpIHx8IGlkID09IEZYQlNUUl9JRCgnSScsIDAsIDAsIDApKSB7DQotICAgICAgICBwQ1MgPSBGWF9ORVcgQ1BERl9JbmRleGVkQ1MoKTsNCi0gICAgfSBlbHNlIGlmIChpZCA9PSBGWEJTVFJfSUQoJ1MnLCAnZScsICdwJywgJ2EnKSkgew0KLSAgICAgICAgcENTID0gRlhfTkVXIENQREZfU2VwYXJhdGlvbkNTKCk7DQotICAgIH0gZWxzZSBpZiAoaWQgPT0gRlhCU1RSX0lEKCdEJywgJ2UnLCAndicsICdpJykpIHsNCi0gICAgICAgIHBDUyA9IEZYX05FVyBDUERGX0RldmljZU5DUygpOw0KLSAgICB9IGVsc2UgaWYgKGlkID09IEZYQlNUUl9JRCgnUCcsICdhJywgJ3QnLCAndCcpKSB7DQotICAgICAgICBwQ1MgPSBGWF9ORVcgQ1BERl9QYXR0ZXJuQ1MoKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHBDUy0+bV9wRG9jdW1lbnQgPSBwRG9jOw0KLSAgICBwQ1MtPm1fcEFycmF5ID0gcEFycmF5Ow0KLSAgICBpZiAoIXBDUy0+dl9Mb2FkKHBEb2MsIHBBcnJheSkpIHsNCi0gICAgICAgIHBDUy0+UmVsZWFzZUNTKCk7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gcENTOw0KLX0NCi1DUERGX0NvbG9yU3BhY2U6OkNQREZfQ29sb3JTcGFjZSgpDQotew0KLSAgICBtX0ZhbWlseSA9IDA7DQotICAgIG1fcEFycmF5ID0gTlVMTDsNCi0gICAgbV9kd1N0ZENvbnZlcnNpb24gPSAwOw0KLSAgICBtX3BEb2N1bWVudCA9IE5VTEw7DQotfQ0KLXZvaWQgQ1BERl9Db2xvclNwYWNlOjpSZWxlYXNlQ1MoKQ0KLXsNCi0gICAgaWYgKHRoaXMgPT0gR2V0U3RvY2tDUyhQREZDU19ERVZJQ0VSR0IpKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKHRoaXMgPT0gR2V0U3RvY2tDUyhQREZDU19ERVZJQ0VHUkFZKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmICh0aGlzID09IEdldFN0b2NrQ1MoUERGQ1NfREVWSUNFQ01ZSykpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAodGhpcyA9PSBHZXRTdG9ja0NTKFBERkNTX1BBVFRFUk4pKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgZGVsZXRlIHRoaXM7DQotfQ0KLWludCBDUERGX0NvbG9yU3BhY2U6OkdldEJ1ZlNpemUoKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fRmFtaWx5ID09IFBERkNTX1BBVFRFUk4pIHsNCi0gICAgICAgIHJldHVybiBzaXplb2YoUGF0dGVyblZhbHVlKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9uQ29tcG9uZW50cyAqIHNpemVvZihGWF9GTE9BVCk7DQotfQ0KLUZYX0ZMT0FUKiBDUERGX0NvbG9yU3BhY2U6OkNyZWF0ZUJ1ZigpDQotew0KLSAgICBpbnQgc2l6ZSA9IEdldEJ1ZlNpemUoKTsNCi0gICAgRlhfQllURSogcEJ1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIHNpemUpOw0KLSAgICBGWFNZU19tZW1zZXQzMihwQnVmLCAwLCBzaXplKTsNCi0gICAgcmV0dXJuIChGWF9GTE9BVCopcEJ1ZjsNCi19DQotRlhfQk9PTCBDUERGX0NvbG9yU3BhY2U6OnNSR0IoKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fRmFtaWx5ID09IFBERkNTX0RFVklDRVJHQikgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgaWYgKG1fRmFtaWx5ICE9IFBERkNTX0lDQ0JBU0VEKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ1BERl9JQ0NCYXNlZENTKiBwQ1MgPSAoQ1BERl9JQ0NCYXNlZENTKil0aGlzOw0KLSAgICByZXR1cm4gcENTLT5tX3BQcm9maWxlLT5tX2JzUkdCOw0KLX0NCi1GWF9CT09MIENQREZfQ29sb3JTcGFjZTo6R2V0Q01ZSyhGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQmIGMsIEZYX0ZMT0FUJiBtLCBGWF9GTE9BVCYgeSwgRlhfRkxPQVQmIGspIGNvbnN0DQotew0KLSAgICBpZiAodl9HZXRDTVlLKHBCdWYsIGMsIG0sIHksIGspKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBGWF9GTE9BVCBSLCBHLCBCOw0KLSAgICBpZiAoIUdldFJHQihwQnVmLCBSLCBHLCBCKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHNSR0JfdG9fQWRvYmVDTVlLKFIsIEcsIEIsIGMsIG0sIHksIGspOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDUERGX0NvbG9yU3BhY2U6OlNldENNWUsoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUIGMsIEZYX0ZMT0FUIG0sIEZYX0ZMT0FUIHksIEZYX0ZMT0FUIGspIGNvbnN0DQotew0KLSAgICBpZiAodl9TZXRDTVlLKHBCdWYsIGMsIG0sIHksIGspKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBGWF9GTE9BVCBSLCBHLCBCOw0KLSAgICBBZG9iZUNNWUtfdG9fc1JHQihjLCBtLCB5LCBrLCBSLCBHLCBCKTsNCi0gICAgcmV0dXJuIFNldFJHQihwQnVmLCBSLCBHLCBCKTsNCi19DQotdm9pZCBDUERGX0NvbG9yU3BhY2U6OkdldERlZmF1bHRDb2xvcihGWF9GTE9BVCogYnVmKSBjb25zdA0KLXsNCi0gICAgaWYgKGJ1ZiA9PSBOVUxMIHx8IG1fRmFtaWx5ID09IFBERkNTX1BBVFRFUk4pIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9GTE9BVCBtaW4sIG1heDsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX25Db21wb25lbnRzOyBpICsrKSB7DQotICAgICAgICBHZXREZWZhdWx0VmFsdWUoaSwgYnVmW2ldLCBtaW4sIG1heCk7DQotICAgIH0NCi19DQotaW50IENQREZfQ29sb3JTcGFjZTo6R2V0TWF4SW5kZXgoKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fRmFtaWx5ICE9IFBERkNTX0lOREVYRUQpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIENQREZfSW5kZXhlZENTKiBwQ1MgPSAoQ1BERl9JbmRleGVkQ1MqKXRoaXM7DQotICAgIHJldHVybiBwQ1MtPm1fTWF4SW5kZXg7DQotfQ0KLXZvaWQgQ1BERl9Db2xvclNwYWNlOjpUcmFuc2xhdGVJbWFnZUxpbmUoRlhfTFBCWVRFIGRlc3RfYnVmLCBGWF9MUENCWVRFIHNyY19idWYsIGludCBwaXhlbHMsIGludCBpbWFnZV93aWR0aCwgaW50IGltYWdlX2hlaWdodCwgRlhfQk9PTCBiVHJhbnNNYXNrKSBjb25zdA0KLXsNCi0gICAgQ0ZYX0ZpeGVkQnVmR3JvdzxGWF9GTE9BVCwgMTY+IHNyY2J1ZihtX25Db21wb25lbnRzKTsNCi0gICAgRlhfRkxPQVQqIHNyYyA9IHNyY2J1ZjsNCi0gICAgRlhfRkxPQVQgUiwgRywgQjsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaXhlbHM7IGkgKyspIHsNCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbV9uQ29tcG9uZW50czsgaiArKykNCi0gICAgICAgICAgICBpZiAobV9GYW1pbHkgPT0gUERGQ1NfSU5ERVhFRCkgew0KLSAgICAgICAgICAgICAgICBzcmNbal0gPSAoRlhfRkxPQVQpKCpzcmNfYnVmICsrKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBzcmNbal0gPSAoRlhfRkxPQVQpKCpzcmNfYnVmICsrKSAvIDI1NTsNCi0gICAgICAgICAgICB9DQotICAgICAgICBHZXRSR0Ioc3JjLCBSLCBHLCBCKTsNCi0gICAgICAgICpkZXN0X2J1ZiArKyA9IChGWF9JTlQzMikoQiAqIDI1NSk7DQotICAgICAgICAqZGVzdF9idWYgKysgPSAoRlhfSU5UMzIpKEcgKiAyNTUpOw0KLSAgICAgICAgKmRlc3RfYnVmICsrID0gKEZYX0lOVDMyKShSICogMjU1KTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfQ29sb3JTcGFjZTo6RW5hYmxlU3RkQ29udmVyc2lvbihGWF9CT09MIGJFbmFibGVkKQ0KLXsNCi0gICAgaWYgKGJFbmFibGVkKSB7DQotICAgICAgICBtX2R3U3RkQ29udmVyc2lvbiArKzsNCi0gICAgfSBlbHNlIGlmIChtX2R3U3RkQ29udmVyc2lvbikgew0KLSAgICAgICAgbV9kd1N0ZENvbnZlcnNpb24gLS07DQotICAgIH0NCi19DQotQ1BERl9Db2xvcjo6Q1BERl9Db2xvcihpbnQgZmFtaWx5KQ0KLXsNCi0gICAgbV9wQ1MgPSBDUERGX0NvbG9yU3BhY2U6OkdldFN0b2NrQ1MoZmFtaWx5KTsNCi0gICAgaW50IG5Db21wcyA9IDM7DQotICAgIGlmIChmYW1pbHkgPT0gUERGQ1NfREVWSUNFR1JBWSkgew0KLSAgICAgICAgbkNvbXBzID0gMTsNCi0gICAgfSBlbHNlIGlmIChmYW1pbHkgPT0gUERGQ1NfREVWSUNFQ01ZSykgew0KLSAgICAgICAgbkNvbXBzID0gNDsNCi0gICAgfQ0KLSAgICBtX3BCdWZmZXIgPSBGWF9BbGxvYyhGWF9GTE9BVCwgbkNvbXBzKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuQ29tcHM7IGkgKyspIHsNCi0gICAgICAgIG1fcEJ1ZmZlcltpXSA9IDA7DQotICAgIH0NCi19DQotQ1BERl9Db2xvcjo6fkNQREZfQ29sb3IoKQ0KLXsNCi0gICAgUmVsZWFzZUJ1ZmZlcigpOw0KLSAgICBSZWxlYXNlQ29sb3JTcGFjZSgpOw0KLX0NCi12b2lkIENQREZfQ29sb3I6OlJlbGVhc2VCdWZmZXIoKQ0KLXsNCi0gICAgaWYgKCFtX3BCdWZmZXIpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAobV9wQ1MtPkdldEZhbWlseSgpID09IFBERkNTX1BBVFRFUk4pIHsNCi0gICAgICAgIFBhdHRlcm5WYWx1ZSogcHZhbHVlID0gKFBhdHRlcm5WYWx1ZSopbV9wQnVmZmVyOw0KLSAgICAgICAgQ1BERl9QYXR0ZXJuKiBwUGF0dGVybiA9IHB2YWx1ZS0+bV9wUGF0dGVybjsNCi0gICAgICAgIGlmIChwUGF0dGVybiAmJiBwUGF0dGVybi0+bV9wRG9jdW1lbnQpIHsNCi0gICAgICAgICAgICBwUGF0dGVybi0+bV9wRG9jdW1lbnQtPkdldFBhZ2VEYXRhKCktPlJlbGVhc2VQYXR0ZXJuKHBQYXR0ZXJuLT5tX3BQYXR0ZXJuT2JqKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBGWF9GcmVlKG1fcEJ1ZmZlcik7DQotICAgIG1fcEJ1ZmZlciA9IE5VTEw7DQotfQ0KLXZvaWQgQ1BERl9Db2xvcjo6UmVsZWFzZUNvbG9yU3BhY2UoKQ0KLXsNCi0gICAgaWYgKG1fcENTICYmIG1fcENTLT5tX3BEb2N1bWVudCAmJiBtX3BDUy0+R2V0QXJyYXkoKSkgew0KLSAgICAgICAgbV9wQ1MtPm1fcERvY3VtZW50LT5HZXRQYWdlRGF0YSgpLT5SZWxlYXNlQ29sb3JTcGFjZShtX3BDUy0+R2V0QXJyYXkoKSk7DQotICAgICAgICBtX3BDUyA9IE5VTEw7DQotICAgIH0NCi19DQotdm9pZCBDUERGX0NvbG9yOjpTZXRDb2xvclNwYWNlKENQREZfQ29sb3JTcGFjZSogcENTKQ0KLXsNCi0gICAgaWYgKG1fcENTID09IHBDUykgew0KLSAgICAgICAgaWYgKG1fcEJ1ZmZlciA9PSBOVUxMKSB7DQotICAgICAgICAgICAgbV9wQnVmZmVyID0gcENTLT5DcmVhdGVCdWYoKTsNCi0gICAgICAgIH0NCi0gICAgICAgIFJlbGVhc2VDb2xvclNwYWNlKCk7DQotICAgICAgICBtX3BDUyA9IHBDUzsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBSZWxlYXNlQnVmZmVyKCk7DQotICAgIFJlbGVhc2VDb2xvclNwYWNlKCk7DQotICAgIG1fcENTID0gcENTOw0KLSAgICBpZiAobV9wQ1MpIHsNCi0gICAgICAgIG1fcEJ1ZmZlciA9IHBDUy0+Q3JlYXRlQnVmKCk7DQotICAgICAgICBwQ1MtPkdldERlZmF1bHRDb2xvcihtX3BCdWZmZXIpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9Db2xvcjo6U2V0VmFsdWUoRlhfRkxPQVQqIGNvbXBzKQ0KLXsNCi0gICAgaWYgKG1fcEJ1ZmZlciA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKG1fcENTLT5HZXRGYW1pbHkoKSAhPSBQREZDU19QQVRURVJOKSB7DQotICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BCdWZmZXIsIGNvbXBzLCBtX3BDUy0+Q291bnRDb21wb25lbnRzKCkgKiBzaXplb2YoRlhfRkxPQVQpKTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfQ29sb3I6OlNldFZhbHVlKENQREZfUGF0dGVybiogcFBhdHRlcm4sIEZYX0ZMT0FUKiBjb21wcywgaW50IG5jb21wcykNCi17DQotICAgIGlmIChuY29tcHMgPiBNQVhfUEFUVEVSTl9DT0xPUkNPTVBTKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKG1fcENTID09IE5VTEwgfHwgbV9wQ1MtPkdldEZhbWlseSgpICE9IFBERkNTX1BBVFRFUk4pIHsNCi0gICAgICAgIGlmIChtX3BCdWZmZXIpIHsNCi0gICAgICAgICAgICBGWF9GcmVlKG1fcEJ1ZmZlcik7DQotICAgICAgICB9DQotICAgICAgICBtX3BDUyA9IENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19QQVRURVJOKTsNCi0gICAgICAgIG1fcEJ1ZmZlciA9IG1fcENTLT5DcmVhdGVCdWYoKTsNCi0gICAgfQ0KLSAgICBDUERGX0RvY1BhZ2VEYXRhKiBwRG9jUGFnZURhdGEgPSBOVUxMOw0KLSAgICBQYXR0ZXJuVmFsdWUqIHB2YWx1ZSA9IChQYXR0ZXJuVmFsdWUqKW1fcEJ1ZmZlcjsNCi0gICAgaWYgKHB2YWx1ZS0+bV9wUGF0dGVybiAmJiBwdmFsdWUtPm1fcFBhdHRlcm4tPm1fcERvY3VtZW50KSB7DQotICAgICAgICBwRG9jUGFnZURhdGEgPSBwdmFsdWUtPm1fcFBhdHRlcm4tPm1fcERvY3VtZW50LT5HZXRQYWdlRGF0YSgpOw0KLSAgICAgICAgcERvY1BhZ2VEYXRhLT5SZWxlYXNlUGF0dGVybihwdmFsdWUtPm1fcFBhdHRlcm4tPm1fcFBhdHRlcm5PYmopOw0KLSAgICB9DQotICAgIHB2YWx1ZS0+bV9uQ29tcHMgPSBuY29tcHM7DQotICAgIHB2YWx1ZS0+bV9wUGF0dGVybiA9IHBQYXR0ZXJuOw0KLSAgICBpZiAobmNvbXBzKSB7DQotICAgICAgICBGWFNZU19tZW1jcHkzMihwdmFsdWUtPm1fQ29tcHMsIGNvbXBzLCBuY29tcHMgKiBzaXplb2YoRlhfRkxPQVQpKTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfQ29sb3I6OkNvcHkoY29uc3QgQ1BERl9Db2xvciogcFNyYykNCi17DQotICAgIFJlbGVhc2VCdWZmZXIoKTsNCi0gICAgUmVsZWFzZUNvbG9yU3BhY2UoKTsNCi0gICAgbV9wQ1MgPSBwU3JjLT5tX3BDUzsNCi0gICAgaWYgKG1fcENTICYmIG1fcENTLT5tX3BEb2N1bWVudCkgew0KLSAgICAgICAgQ1BERl9BcnJheSogcEFycmF5ID0gbV9wQ1MtPkdldEFycmF5KCk7DQotICAgICAgICBpZiAocEFycmF5KSB7DQotICAgICAgICAgICAgbV9wQ1MgPSBtX3BDUy0+bV9wRG9jdW1lbnQtPkdldFBhZ2VEYXRhKCktPkdldENvcGllZENvbG9yU3BhY2UocEFycmF5KTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAobV9wQ1MgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fcEJ1ZmZlciA9IG1fcENTLT5DcmVhdGVCdWYoKTsNCi0gICAgRlhTWVNfbWVtY3B5MzIobV9wQnVmZmVyLCBwU3JjLT5tX3BCdWZmZXIsIG1fcENTLT5HZXRCdWZTaXplKCkpOw0KLSAgICBpZiAobV9wQ1MtPkdldEZhbWlseSgpID09IFBERkNTX1BBVFRFUk4pIHsNCi0gICAgICAgIFBhdHRlcm5WYWx1ZSogcHZhbHVlID0gKFBhdHRlcm5WYWx1ZSopbV9wQnVmZmVyOw0KLSAgICAgICAgaWYgKHB2YWx1ZS0+bV9wUGF0dGVybiAmJiBwdmFsdWUtPm1fcFBhdHRlcm4tPm1fcERvY3VtZW50KSB7DQotICAgICAgICAgICAgcHZhbHVlLT5tX3BQYXR0ZXJuID0gcHZhbHVlLT5tX3BQYXR0ZXJuLT5tX3BEb2N1bWVudC0+R2V0UGFnZURhdGEoKS0+R2V0UGF0dGVybihwdmFsdWUtPm1fcFBhdHRlcm4tPm1fcFBhdHRlcm5PYmosIEZBTFNFLCAmcHZhbHVlLT5tX3BQYXR0ZXJuLT5tX1BhcmVudE1hdHJpeCk7DQotICAgICAgICB9DQotICAgIH0NCi19DQotRlhfQk9PTCBDUERGX0NvbG9yOjpHZXRSR0IoaW50JiBSLCBpbnQmIEcsIGludCYgQikgY29uc3QNCi17DQotICAgIGlmIChtX3BDUyA9PSBOVUxMIHx8IG1fcEJ1ZmZlciA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgRlhfRkxPQVQgciwgZywgYjsNCi0gICAgaWYgKCFtX3BDUy0+R2V0UkdCKG1fcEJ1ZmZlciwgciwgZywgYikpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBSID0gKEZYX0lOVDMyKShyICogMjU1ICsgMC41Zik7DQotICAgIEcgPSAoRlhfSU5UMzIpKGcgKiAyNTUgKyAwLjVmKTsNCi0gICAgQiA9IChGWF9JTlQzMikoYiAqIDI1NSArIDAuNWYpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotQ1BERl9QYXR0ZXJuKiBDUERGX0NvbG9yOjpHZXRQYXR0ZXJuKCkgY29uc3QNCi17DQotICAgIGlmIChtX3BCdWZmZXIgPT0gTlVMTCB8fCBtX3BDUy0+R2V0RmFtaWx5KCkgIT0gUERGQ1NfUEFUVEVSTikgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgUGF0dGVyblZhbHVlKiBwdmFsdWUgPSAoUGF0dGVyblZhbHVlKiltX3BCdWZmZXI7DQotICAgIHJldHVybiBwdmFsdWUtPm1fcFBhdHRlcm47DQotfQ0KLUNQREZfQ29sb3JTcGFjZSogQ1BERl9Db2xvcjo6R2V0UGF0dGVybkNTKCkgY29uc3QNCi17DQotICAgIGlmIChtX3BCdWZmZXIgPT0gTlVMTCB8fCBtX3BDUy0+R2V0RmFtaWx5KCkgIT0gUERGQ1NfUEFUVEVSTikgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIG1fcENTLT5HZXRCYXNlQ1MoKTsNCi19DQotRlhfRkxPQVQqIENQREZfQ29sb3I6OkdldFBhdHRlcm5Db2xvcigpIGNvbnN0DQotew0KLSAgICBpZiAobV9wQnVmZmVyID09IE5VTEwgfHwgbV9wQ1MtPkdldEZhbWlseSgpICE9IFBERkNTX1BBVFRFUk4pIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIFBhdHRlcm5WYWx1ZSogcHZhbHVlID0gKFBhdHRlcm5WYWx1ZSopbV9wQnVmZmVyOw0KLSAgICByZXR1cm4gcHZhbHVlLT5tX25Db21wcyA/IHB2YWx1ZS0+bV9Db21wcyA6IE5VTEw7DQotfQ0KLUZYX0JPT0wgQ1BERl9Db2xvcjo6SXNFcXVhbChjb25zdCBDUERGX0NvbG9yJiBvdGhlcikgY29uc3QNCi17DQotICAgIGlmIChtX3BDUyAhPSBvdGhlci5tX3BDUyB8fCBtX3BDUyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgcmV0dXJuIEZYU1lTX21lbWNtcDMyKG1fcEJ1ZmZlciwgb3RoZXIubV9wQnVmZmVyLCBtX3BDUy0+R2V0QnVmU2l6ZSgpKSA9PSAwOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX21vZHVsZS5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjb2RlYy9meF9jb2RlYy5oIgorI2luY2x1ZGUgInBhZ2VpbnQuaCIKKyNpbmNsdWRlIDxsaW1pdHMuaD4KK3ZvaWQgc1JHQl90b19BZG9iZUNNWUsoRlhfRkxPQVQgUiwgRlhfRkxPQVQgRywgRlhfRkxPQVQgQiwgRlhfRkxPQVQmIGMsIEZYX0ZMT0FUJiBtLCBGWF9GTE9BVCYgeSwgRlhfRkxPQVQmIGspCit7CisgICAgYyA9IDEuMGYgLSBSOworICAgIG0gPSAxLjBmIC0gRzsKKyAgICB5ID0gMS4wZiAtIEI7CisgICAgayA9IGM7CisgICAgaWYgKG0gPCBrKSB7CisgICAgICAgIGsgPSBtOworICAgIH0KKyAgICBpZiAoeSA8IGspIHsKKyAgICAgICAgayA9IHk7CisgICAgfQorfQorQ1BERl9EZXZpY2VDUzo6Q1BERl9EZXZpY2VDUyhpbnQgZmFtaWx5KQoreworICAgIG1fRmFtaWx5ID0gZmFtaWx5OworICAgIGlmIChtX0ZhbWlseSA9PSBQREZDU19ERVZJQ0VSR0IpIHsKKyAgICAgICAgbV9uQ29tcG9uZW50cyA9IDM7CisgICAgfSBlbHNlIGlmIChtX0ZhbWlseSA9PSBQREZDU19ERVZJQ0VHUkFZKSB7CisgICAgICAgIG1fbkNvbXBvbmVudHMgPSAxOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fbkNvbXBvbmVudHMgPSA0OworICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9EZXZpY2VDUzo6R2V0UkdCKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCYgUiwgRlhfRkxPQVQmIEcsIEZYX0ZMT0FUJiBCKSBjb25zdAoreworICAgIGlmIChtX0ZhbWlseSA9PSBQREZDU19ERVZJQ0VSR0IpIHsKKyAgICAgICAgUiA9IHBCdWZbMF07CisgICAgICAgIGlmIChSIDwgMCkgeworICAgICAgICAgICAgUiA9IDA7CisgICAgICAgIH0gZWxzZSBpZiAoUiA+IDEpIHsKKyAgICAgICAgICAgIFIgPSAxOworICAgICAgICB9CisgICAgICAgIEcgPSBwQnVmWzFdOworICAgICAgICBpZiAoRyA8IDApIHsKKyAgICAgICAgICAgIEcgPSAwOworICAgICAgICB9IGVsc2UgaWYgKEcgPiAxKSB7CisgICAgICAgICAgICBHID0gMTsKKyAgICAgICAgfQorICAgICAgICBCID0gcEJ1ZlsyXTsKKyAgICAgICAgaWYgKEIgPCAwKSB7CisgICAgICAgICAgICBCID0gMDsKKyAgICAgICAgfSBlbHNlIGlmIChCID4gMSkgeworICAgICAgICAgICAgQiA9IDE7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fRmFtaWx5ID09IFBERkNTX0RFVklDRUdSQVkpIHsKKyAgICAgICAgUiA9ICpwQnVmOworICAgICAgICBpZiAoUiA8IDApIHsKKyAgICAgICAgICAgIFIgPSAwOworICAgICAgICB9IGVsc2UgaWYgKFIgPiAxKSB7CisgICAgICAgICAgICBSID0gMTsKKyAgICAgICAgfQorICAgICAgICBHID0gQiA9IFI7CisgICAgfSBlbHNlIGlmIChtX0ZhbWlseSA9PSBQREZDU19ERVZJQ0VDTVlLKSB7CisgICAgICAgIGlmICghbV9kd1N0ZENvbnZlcnNpb24pIHsKKyAgICAgICAgICAgIEFkb2JlQ01ZS190b19zUkdCKHBCdWZbMF0sIHBCdWZbMV0sIHBCdWZbMl0sIHBCdWZbM10sIFIsIEcsIEIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRlhfRkxPQVQgayA9IHBCdWZbM107CisgICAgICAgICAgICBSID0gMS4wZiAtIEZYX01JTigxLjBmLCBwQnVmWzBdICsgayk7CisgICAgICAgICAgICBHID0gMS4wZiAtIEZYX01JTigxLjBmLCBwQnVmWzFdICsgayk7CisgICAgICAgICAgICBCID0gMS4wZiAtIEZYX01JTigxLjBmLCBwQnVmWzJdICsgayk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQobV9GYW1pbHkgPT0gUERGQ1NfUEFUVEVSTik7CisgICAgICAgIFIgPSBHID0gQiA9IDA7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENQREZfRGV2aWNlQ1M6OnZfR2V0Q01ZSyhGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQmIGMsIEZYX0ZMT0FUJiBtLCBGWF9GTE9BVCYgeSwgRlhfRkxPQVQmIGspIGNvbnN0Cit7CisgICAgaWYgKG1fRmFtaWx5ICE9IFBERkNTX0RFVklDRUNNWUspIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBjID0gcEJ1ZlswXTsKKyAgICBtID0gcEJ1ZlsxXTsKKyAgICB5ID0gcEJ1ZlsyXTsKKyAgICBrID0gcEJ1ZlszXTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ1BERl9EZXZpY2VDUzo6U2V0UkdCKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCBSLCBGWF9GTE9BVCBHLCBGWF9GTE9BVCBCKSBjb25zdAoreworICAgIGlmIChtX0ZhbWlseSA9PSBQREZDU19ERVZJQ0VSR0IpIHsKKyAgICAgICAgcEJ1ZlswXSA9IFI7CisgICAgICAgIHBCdWZbMV0gPSBHOworICAgICAgICBwQnVmWzJdID0gQjsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfSBlbHNlIGlmIChtX0ZhbWlseSA9PSBQREZDU19ERVZJQ0VHUkFZKSB7CisgICAgICAgIGlmIChSID09IEcgJiYgUiA9PSBCKSB7CisgICAgICAgICAgICAqcEJ1ZiA9IFI7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9GYW1pbHkgPT0gUERGQ1NfREVWSUNFQ01ZSykgeworICAgICAgICBzUkdCX3RvX0Fkb2JlQ01ZSyhSLCBHLCBCLCBwQnVmWzBdLCBwQnVmWzFdLCBwQnVmWzJdLCBwQnVmWzNdKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK0ZYX0JPT0wgQ1BERl9EZXZpY2VDUzo6dl9TZXRDTVlLKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCBjLCBGWF9GTE9BVCBtLCBGWF9GTE9BVCB5LCBGWF9GTE9BVCBrKSBjb25zdAoreworICAgIGlmIChtX0ZhbWlseSA9PSBQREZDU19ERVZJQ0VSR0IpIHsKKyAgICAgICAgQWRvYmVDTVlLX3RvX3NSR0IoYywgbSwgeSwgaywgcEJ1ZlswXSwgcEJ1ZlsxXSwgcEJ1ZlsyXSk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0gZWxzZSBpZiAobV9GYW1pbHkgPT0gUERGQ1NfREVWSUNFR1JBWSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfSBlbHNlIGlmIChtX0ZhbWlseSA9PSBQREZDU19ERVZJQ0VDTVlLKSB7CisgICAgICAgIHBCdWZbMF0gPSBjOworICAgICAgICBwQnVmWzFdID0gbTsKKyAgICAgICAgcEJ1ZlsyXSA9IHk7CisgICAgICAgIHBCdWZbM10gPSBrOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorc3RhdGljIHZvaWQgUmV2ZXJzZVJHQihGWF9MUEJZVEUgcERlc3RCdWYsIEZYX0xQQ0JZVEUgcFNyY0J1ZiwgaW50IHBpeGVscykKK3sKKyAgICBpZiAocERlc3RCdWYgPT0gcFNyY0J1ZikKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaXhlbHM7IGkgKyspIHsKKyAgICAgICAgICAgIEZYX0JZVEUgdGVtcCA9IHBEZXN0QnVmWzJdOworICAgICAgICAgICAgcERlc3RCdWZbMl0gPSBwRGVzdEJ1ZlswXTsKKyAgICAgICAgICAgIHBEZXN0QnVmWzBdID0gdGVtcDsKKyAgICAgICAgICAgIHBEZXN0QnVmICs9IDM7CisgICAgICAgIH0KKyAgICBlbHNlCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGl4ZWxzOyBpICsrKSB7CisgICAgICAgICAgICAqcERlc3RCdWYgKysgPSBwU3JjQnVmWzJdOworICAgICAgICAgICAgKnBEZXN0QnVmICsrID0gcFNyY0J1ZlsxXTsKKyAgICAgICAgICAgICpwRGVzdEJ1ZiArKyA9IHBTcmNCdWZbMF07CisgICAgICAgICAgICBwU3JjQnVmICs9IDM7CisgICAgICAgIH0KK30KK3ZvaWQgQ1BERl9EZXZpY2VDUzo6VHJhbnNsYXRlSW1hZ2VMaW5lKEZYX0xQQllURSBwRGVzdEJ1ZiwgRlhfTFBDQllURSBwU3JjQnVmLCBpbnQgcGl4ZWxzLCBpbnQgaW1hZ2Vfd2lkdGgsIGludCBpbWFnZV9oZWlnaHQsIEZYX0JPT0wgYlRyYW5zTWFzaykgY29uc3QKK3sKKyAgICBpZiAoYlRyYW5zTWFzayAmJiBtX0ZhbWlseSA9PSBQREZDU19ERVZJQ0VDTVlLKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGl4ZWxzOyBpICsrKSB7CisgICAgICAgICAgICBpbnQgayA9IDI1NSAtIHBTcmNCdWZbM107CisgICAgICAgICAgICBwRGVzdEJ1ZlswXSA9ICgoMjU1IC0gcFNyY0J1ZlswXSkgKiBrKSAvIDI1NTsKKyAgICAgICAgICAgIHBEZXN0QnVmWzFdID0gKCgyNTUgLSBwU3JjQnVmWzFdKSAqIGspIC8gMjU1OworICAgICAgICAgICAgcERlc3RCdWZbMl0gPSAoKDI1NSAtIHBTcmNCdWZbMl0pICogaykgLyAyNTU7CisgICAgICAgICAgICBwRGVzdEJ1ZiArPSAzOworICAgICAgICAgICAgcFNyY0J1ZiArPSA0OworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fRmFtaWx5ID09IFBERkNTX0RFVklDRVJHQikgeworICAgICAgICBSZXZlcnNlUkdCKHBEZXN0QnVmLCBwU3JjQnVmLCBwaXhlbHMpOworICAgIH0gZWxzZSBpZiAobV9GYW1pbHkgPT0gUERGQ1NfREVWSUNFR1JBWSkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBpeGVsczsgaSArKykgeworICAgICAgICAgICAgKnBEZXN0QnVmICsrID0gcFNyY0J1ZltpXTsKKyAgICAgICAgICAgICpwRGVzdEJ1ZiArKyA9IHBTcmNCdWZbaV07CisgICAgICAgICAgICAqcERlc3RCdWYgKysgPSBwU3JjQnVmW2ldOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaXhlbHM7IGkgKyspIHsKKyAgICAgICAgICAgIGlmICghbV9kd1N0ZENvbnZlcnNpb24pIHsKKyAgICAgICAgICAgICAgICBBZG9iZUNNWUtfdG9fc1JHQjEocFNyY0J1ZlswXSwgcFNyY0J1ZlsxXSwgcFNyY0J1ZlsyXSwgcFNyY0J1ZlszXSwgcERlc3RCdWZbMl0sIHBEZXN0QnVmWzFdLCBwRGVzdEJ1ZlswXSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEZYX0JZVEUgayA9IHBTcmNCdWZbM107CisgICAgICAgICAgICAgICAgcERlc3RCdWZbMl0gPSAyNTUgLSBGWF9NSU4oMjU1LCBwU3JjQnVmWzBdICsgayk7CisgICAgICAgICAgICAgICAgcERlc3RCdWZbMV0gPSAyNTUgLSBGWF9NSU4oMjU1LCBwU3JjQnVmWzFdICsgayk7CisgICAgICAgICAgICAgICAgcERlc3RCdWZbMF0gPSAyNTUgLSBGWF9NSU4oMjU1LCBwU3JjQnVmWzJdICsgayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwU3JjQnVmICs9IDQ7CisgICAgICAgICAgICBwRGVzdEJ1ZiArPSAzOworICAgICAgICB9CisgICAgfQorfQorY29uc3QgRlhfQllURSBnX3NSR0JTYW1wbGVzMVtdID0geworICAgIDAsICAgMywgICA2LCAgMTAsICAxMywgIDE1LCAgMTgsICAyMCwgIDIyLCAgMjMsICAyNSwgIDI3LCAgMjgsICAzMCwgIDMxLCAgMzIsCisgICAgMzQsICAzNSwgIDM2LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDYsICA0NywgIDQ4LCAgNDksCisgICAgNDksICA1MCwgIDUxLCAgNTIsICA1MywgIDUzLCAgNTQsICA1NSwgIDU2LCAgNTYsICA1NywgIDU4LCAgNTgsICA1OSwgIDYwLCAgNjEsCisgICAgNjEsICA2MiwgIDYyLCAgNjMsICA2NCwgIDY0LCAgNjUsICA2NiwgIDY2LCAgNjcsICA2NywgIDY4LCAgNjgsICA2OSwgIDcwLCAgNzAsCisgICAgNzEsICA3MSwgIDcyLCAgNzIsICA3MywgIDczLCAgNzQsICA3NCwgIDc1LCAgNzYsICA3NiwgIDc3LCAgNzcsICA3OCwgIDc4LCAgNzksCisgICAgNzksICA3OSwgIDgwLCAgODAsICA4MSwgIDgxLCAgODIsICA4MiwgIDgzLCAgODMsICA4NCwgIDg0LCAgODUsICA4NSwgIDg1LCAgODYsCisgICAgODYsICA4NywgIDg3LCAgODgsICA4OCwgIDg4LCAgODksICA4OSwgIDkwLCAgOTAsICA5MSwgIDkxLCAgOTEsICA5MiwgIDkyLCAgOTMsCisgICAgOTMsICA5MywgIDk0LCAgOTQsICA5NSwgIDk1LCAgOTUsICA5NiwgIDk2LCAgOTcsICA5NywgIDk3LCAgOTgsICA5OCwgIDk4LCAgOTksCisgICAgOTksICA5OSwgMTAwLCAxMDAsIDEwMSwgMTAxLCAxMDEsIDEwMiwgMTAyLCAxMDIsIDEwMywgMTAzLCAxMDMsIDEwNCwgMTA0LCAxMDQsCisgICAgMTA1LCAxMDUsIDEwNiwgMTA2LCAxMDYsIDEwNywgMTA3LCAxMDcsIDEwOCwgMTA4LCAxMDgsIDEwOSwgMTA5LCAxMDksIDExMCwgMTEwLAorICAgIDExMCwgMTEwLCAxMTEsIDExMSwgMTExLCAxMTIsIDExMiwgMTEyLCAxMTMsIDExMywgMTEzLCAxMTQsIDExNCwgMTE0LCAxMTUsIDExNSwKKyAgICAxMTUsIDExNSwgMTE2LCAxMTYsIDExNiwgMTE3LCAxMTcsIDExNywgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTksIDExOSwgMTE5LCAxMjAsCit9OworY29uc3QgRlhfQllURSBnX3NSR0JTYW1wbGVzMltdID0geworICAgIDEyMCwgMTIxLCAxMjIsIDEyNCwgMTI1LCAxMjYsIDEyNywgMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwKKyAgICAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsIDE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDgsIDE0OSwgMTUwLCAxNTEsCisgICAgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwgMTU5LCAxNjAsIDE2MSwgMTYyLCAxNjMsIDE2MywgMTY0LAorICAgIDE2NSwgMTY2LCAxNjcsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcwLCAxNzEsIDE3MiwgMTczLCAxNzMsIDE3NCwgMTc1LCAxNzUsIDE3NiwKKyAgICAxNzcsIDE3OCwgMTc4LCAxNzksIDE4MCwgMTgwLCAxODEsIDE4MiwgMTgyLCAxODMsIDE4NCwgMTg1LCAxODUsIDE4NiwgMTg3LCAxODcsCisgICAgMTg4LCAxODksIDE4OSwgMTkwLCAxOTAsIDE5MSwgMTkyLCAxOTIsIDE5MywgMTk0LCAxOTQsIDE5NSwgMTk2LCAxOTYsIDE5NywgMTk3LAorICAgIDE5OCwgMTk5LCAxOTksIDIwMCwgMjAwLCAyMDEsIDIwMiwgMjAyLCAyMDMsIDIwMywgMjA0LCAyMDUsIDIwNSwgMjA2LCAyMDYsIDIwNywKKyAgICAyMDgsIDIwOCwgMjA5LCAyMDksIDIxMCwgMjEwLCAyMTEsIDIxMiwgMjEyLCAyMTMsIDIxMywgMjE0LCAyMTQsIDIxNSwgMjE1LCAyMTYsCisgICAgMjE2LCAyMTcsIDIxOCwgMjE4LCAyMTksIDIxOSwgMjIwLCAyMjAsIDIyMSwgMjIxLCAyMjIsIDIyMiwgMjIzLCAyMjMsIDIyNCwgMjI0LAorICAgIDIyNSwgMjI2LCAyMjYsIDIyNywgMjI3LCAyMjgsIDIyOCwgMjI5LCAyMjksIDIzMCwgMjMwLCAyMzEsIDIzMSwgMjMyLCAyMzIsIDIzMywKKyAgICAyMzMsIDIzNCwgMjM0LCAyMzUsIDIzNSwgMjM2LCAyMzYsIDIzNywgMjM3LCAyMzgsIDIzOCwgMjM4LCAyMzksIDIzOSwgMjQwLCAyNDAsCisgICAgMjQxLCAyNDEsIDI0MiwgMjQyLCAyNDMsIDI0MywgMjQ0LCAyNDQsIDI0NSwgMjQ1LCAyNDYsIDI0NiwgMjQ2LCAyNDcsIDI0NywgMjQ4LAorICAgIDI0OCwgMjQ5LCAyNDksIDI1MCwgMjUwLCAyNTEsIDI1MSwgMjUxLCAyNTIsIDI1MiwgMjUzLCAyNTMsIDI1NCwgMjU0LCAyNTUsIDI1NSwKK307CitzdGF0aWMgdm9pZCBYWVpfdG9fc1JHQihGWF9GTE9BVCBYLCBGWF9GTE9BVCBZLCBGWF9GTE9BVCBaLCBGWF9GTE9BVCYgUiwgRlhfRkxPQVQmIEcsIEZYX0ZMT0FUJiBCKQoreworICAgIEZYX0ZMT0FUIFIxID0gMy4yNDEwZiAqIFggLSAxLjUzNzRmICogWSAtIDAuNDk4NmYgKiBaOworICAgIEZYX0ZMT0FUIEcxID0gLTAuOTY5MmYgKiBYICsgMS44NzYwZiAqIFkgKyAwLjA0MTZmICogWjsKKyAgICBGWF9GTE9BVCBCMSA9ICAwLjA1NTZmICogWCAtIDAuMjA0MGYgKiBZICsgMS4wNTcwZiAqIFo7CisgICAgaWYgKFIxID4gMSkgeworICAgICAgICBSMSA9IDE7CisgICAgfQorICAgIGlmIChSMSA8IDApIHsKKyAgICAgICAgUjEgPSAwOworICAgIH0KKyAgICBpZiAoRzEgPiAxKSB7CisgICAgICAgIEcxID0gMTsKKyAgICB9CisgICAgaWYgKEcxIDwgMCkgeworICAgICAgICBHMSA9IDA7CisgICAgfQorICAgIGlmIChCMSA+IDEpIHsKKyAgICAgICAgQjEgPSAxOworICAgIH0KKyAgICBpZiAoQjEgPCAwKSB7CisgICAgICAgIEIxID0gMDsKKyAgICB9CisgICAgaW50IHNjYWxlID0gKGludCkoUjEgKiAxMDIzKTsKKyAgICBpZiAoc2NhbGUgPCAwKSB7CisgICAgICAgIHNjYWxlID0gMDsKKyAgICB9CisgICAgaWYgKHNjYWxlIDwgMTkyKSB7CisgICAgICAgIFIgPSAoZ19zUkdCU2FtcGxlczFbc2NhbGVdIC8gMjU1LjBmKTsKKyAgICB9IGVsc2UgeworICAgICAgICBSID0gKGdfc1JHQlNhbXBsZXMyW3NjYWxlIC8gNCAtIDQ4XSAvIDI1NS4wZik7CisgICAgfQorICAgIHNjYWxlID0gKGludCkoRzEgKiAxMDIzKTsKKyAgICBpZiAoc2NhbGUgPCAwKSB7CisgICAgICAgIHNjYWxlID0gMDsKKyAgICB9CisgICAgaWYgKHNjYWxlIDwgMTkyKSB7CisgICAgICAgIEcgPSAoZ19zUkdCU2FtcGxlczFbc2NhbGVdIC8gMjU1LjBmKTsKKyAgICB9IGVsc2UgeworICAgICAgICBHID0gKGdfc1JHQlNhbXBsZXMyW3NjYWxlIC8gNCAtIDQ4XSAvIDI1NS4wZik7CisgICAgfQorICAgIHNjYWxlID0gKGludCkoQjEgKiAxMDIzKTsKKyAgICBpZiAoc2NhbGUgPCAwKSB7CisgICAgICAgIHNjYWxlID0gMDsKKyAgICB9CisgICAgaWYgKHNjYWxlIDwgMTkyKSB7CisgICAgICAgIEIgPSAoZ19zUkdCU2FtcGxlczFbc2NhbGVdIC8gMjU1LjBmKTsKKyAgICB9IGVsc2UgeworICAgICAgICBCID0gKGdfc1JHQlNhbXBsZXMyW3NjYWxlIC8gNCAtIDQ4XSAvIDI1NS4wZik7CisgICAgfQorfQorY2xhc3MgQ1BERl9DYWxHcmF5IDogcHVibGljIENQREZfQ29sb3JTcGFjZQoreworcHVibGljOgorICAgIENQREZfQ2FsR3JheSgpOworICAgIHZpcnR1YWwgRlhfQk9PTAkJdl9Mb2FkKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfQXJyYXkqIHBBcnJheSk7CisgICAgdmlydHVhbCBGWF9CT09MCQlHZXRSR0IoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUJiBSLCBGWF9GTE9BVCYgRywgRlhfRkxPQVQmIEIpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZAkJVHJhbnNsYXRlSW1hZ2VMaW5lKEZYX0xQQllURSBwRGVzdEJ1ZiwgRlhfTFBDQllURSBwU3JjQnVmLCBpbnQgcGl4ZWxzLCBpbnQgaW1hZ2Vfd2lkdGgsIGludCBpbWFnZV9oZWlnaHQsIEZYX0JPT0wgYlRyYW5zTWFzayA9IEZBTFNFKSBjb25zdDsKKyAgICBGWF9CT09MCQkJCVNldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQgUiwgRlhfRkxPQVQgRywgRlhfRkxPQVQgQikgY29uc3Q7CisgICAgRlhfRkxPQVQJCQltX1doaXRlUG9pbnRbM107CisgICAgRlhfRkxPQVQJCQltX0JsYWNrUG9pbnRbM107CisgICAgRlhfRkxPQVQJCQltX0dhbW1hOworfTsKK0NQREZfQ2FsR3JheTo6Q1BERl9DYWxHcmF5KCkKK3sKKyAgICBtX0ZhbWlseSA9IFBERkNTX0NBTEdSQVk7CisgICAgbV9uQ29tcG9uZW50cyA9IDE7Cit9CitGWF9CT09MIENQREZfQ2FsR3JheTo6dl9Mb2FkKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfQXJyYXkqIHBBcnJheSkKK3sKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gcEFycmF5LT5HZXREaWN0KDEpOworICAgIENQREZfQXJyYXkqIHBQYXJhbSA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiV2hpdGVQb2ludCIpKTsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSArKykgeworICAgICAgICBtX1doaXRlUG9pbnRbaV0gPSBwUGFyYW0tPkdldE51bWJlcihpKTsKKyAgICB9CisgICAgcFBhcmFtID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJCbGFja1BvaW50IikpOworICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpICsrKSB7CisgICAgICAgIG1fQmxhY2tQb2ludFtpXSA9IHBQYXJhbSA/IHBQYXJhbS0+R2V0TnVtYmVyKGkpIDogMDsKKyAgICB9CisgICAgbV9HYW1tYSA9IHBEaWN0LT5HZXROdW1iZXIoRlhfQlNUUkMoIkdhbW1hIikpOworICAgIGlmIChtX0dhbW1hID09IDApIHsKKyAgICAgICAgbV9HYW1tYSA9IDEuMGY7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDUERGX0NhbEdyYXk6OkdldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQmIFIsIEZYX0ZMT0FUJiBHLCBGWF9GTE9BVCYgQikgY29uc3QKK3sKKyAgICBSID0gRyA9IEIgPSAqcEJ1ZjsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ1BERl9DYWxHcmF5OjpTZXRSR0IoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUIFIsIEZYX0ZMT0FUIEcsIEZYX0ZMT0FUIEIpIGNvbnN0Cit7CisgICAgaWYgKFIgPT0gRyAmJiBSID09IEIpIHsKKyAgICAgICAgKnBCdWYgPSBSOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorfQordm9pZCBDUERGX0NhbEdyYXk6OlRyYW5zbGF0ZUltYWdlTGluZShGWF9MUEJZVEUgcERlc3RCdWYsIEZYX0xQQ0JZVEUgcFNyY0J1ZiwgaW50IHBpeGVscywgaW50IGltYWdlX3dpZHRoLCBpbnQgaW1hZ2VfaGVpZ2h0LCBGWF9CT09MIGJUcmFuc01hc2spIGNvbnN0Cit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaXhlbHM7IGkgKyspIHsKKyAgICAgICAgKnBEZXN0QnVmICsrID0gcFNyY0J1ZltpXTsKKyAgICAgICAgKnBEZXN0QnVmICsrID0gcFNyY0J1ZltpXTsKKyAgICAgICAgKnBEZXN0QnVmICsrID0gcFNyY0J1ZltpXTsKKyAgICB9Cit9CitjbGFzcyBDUERGX0NhbFJHQiA6IHB1YmxpYyBDUERGX0NvbG9yU3BhY2UKK3sKK3B1YmxpYzoKKyAgICBDUERGX0NhbFJHQigpOworICAgIHZpcnR1YWwgRlhfQk9PTAkJdl9Mb2FkKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfQXJyYXkqIHBBcnJheSk7CisgICAgdmlydHVhbCBGWF9CT09MCQlHZXRSR0IoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUJiBSLCBGWF9GTE9BVCYgRywgRlhfRkxPQVQmIEIpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZAkJVHJhbnNsYXRlSW1hZ2VMaW5lKEZYX0xQQllURSBwRGVzdEJ1ZiwgRlhfTFBDQllURSBwU3JjQnVmLCBpbnQgcGl4ZWxzLCBpbnQgaW1hZ2Vfd2lkdGgsIGludCBpbWFnZV9oZWlnaHQsIEZYX0JPT0wgYlRyYW5zTWFzayA9IEZBTFNFKSBjb25zdDsKKyAgICBGWF9CT09MCQkJCVNldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQgUiwgRlhfRkxPQVQgRywgRlhfRkxPQVQgQikgY29uc3Q7CisgICAgRlhfRkxPQVQJCQltX1doaXRlUG9pbnRbM107CisgICAgRlhfRkxPQVQJCQltX0JsYWNrUG9pbnRbM107CisgICAgRlhfRkxPQVQJCQltX0dhbW1hWzNdOworICAgIEZYX0ZMT0FUCQkJbV9NYXRyaXhbOV07CisgICAgRlhfQk9PTAkJCQltX2JHYW1tYSwgbV9iTWF0cml4OworfTsKK0NQREZfQ2FsUkdCOjpDUERGX0NhbFJHQigpCit7CisgICAgbV9GYW1pbHkgPSBQREZDU19DQUxSR0I7CisgICAgbV9uQ29tcG9uZW50cyA9IDM7Cit9CitGWF9CT09MIENQREZfQ2FsUkdCOjp2X0xvYWQoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9BcnJheSogcEFycmF5KQoreworICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSBwQXJyYXktPkdldERpY3QoMSk7CisgICAgQ1BERl9BcnJheSogcFBhcmFtID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJXaGl0ZVBvaW50IikpOworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpICsrKSB7CisgICAgICAgIG1fV2hpdGVQb2ludFtpXSA9IHBQYXJhbS0+R2V0TnVtYmVyKGkpOworICAgIH0KKyAgICBwUGFyYW0gPSBwRGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIkJsYWNrUG9pbnQiKSk7CisgICAgZm9yIChpID0gMDsgaSA8IDM7IGkgKyspIHsKKyAgICAgICAgbV9CbGFja1BvaW50W2ldID0gcFBhcmFtID8gcFBhcmFtLT5HZXROdW1iZXIoaSkgOiAwOworICAgIH0KKyAgICBwUGFyYW0gPSBwRGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIkdhbW1hIikpOworICAgIGlmIChwUGFyYW0pIHsKKyAgICAgICAgbV9iR2FtbWEgPSBUUlVFOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSArKykgeworICAgICAgICAgICAgbV9HYW1tYVtpXSA9IHBQYXJhbS0+R2V0TnVtYmVyKGkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9iR2FtbWEgPSBGQUxTRTsKKyAgICB9CisgICAgcFBhcmFtID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJNYXRyaXgiKSk7CisgICAgaWYgKHBQYXJhbSkgeworICAgICAgICBtX2JNYXRyaXggPSBUUlVFOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgOTsgaSArKykgeworICAgICAgICAgICAgbV9NYXRyaXhbaV0gPSBwUGFyYW0tPkdldE51bWJlcihpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG1fYk1hdHJpeCA9IEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ1BERl9DYWxSR0I6OkdldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQmIFIsIEZYX0ZMT0FUJiBHLCBGWF9GTE9BVCYgQikgY29uc3QKK3sKKyAgICBGWF9GTE9BVCBBXyA9IHBCdWZbMF07CisgICAgRlhfRkxPQVQgQl8gPSBwQnVmWzFdOworICAgIEZYX0ZMT0FUIENfID0gcEJ1ZlsyXTsKKyAgICBpZiAobV9iR2FtbWEpIHsKKyAgICAgICAgQV8gPSAoRlhfRkxPQVQpRlhTWVNfcG93KEFfLCBtX0dhbW1hWzBdKTsKKyAgICAgICAgQl8gPSAoRlhfRkxPQVQpRlhTWVNfcG93KEJfLCBtX0dhbW1hWzFdKTsKKyAgICAgICAgQ18gPSAoRlhfRkxPQVQpRlhTWVNfcG93KENfLCBtX0dhbW1hWzJdKTsKKyAgICB9CisgICAgRlhfRkxPQVQgWCwgWSwgWjsKKyAgICBpZiAobV9iTWF0cml4KSB7CisgICAgICAgIFggPSBtX01hdHJpeFswXSAqIEFfICsgbV9NYXRyaXhbM10gKiBCXyArIG1fTWF0cml4WzZdICogQ187CisgICAgICAgIFkgPSBtX01hdHJpeFsxXSAqIEFfICsgbV9NYXRyaXhbNF0gKiBCXyArIG1fTWF0cml4WzddICogQ187CisgICAgICAgIFogPSBtX01hdHJpeFsyXSAqIEFfICsgbV9NYXRyaXhbNV0gKiBCXyArIG1fTWF0cml4WzhdICogQ187CisgICAgfSBlbHNlIHsKKyAgICAgICAgWCA9IEFfOworICAgICAgICBZID0gQl87CisgICAgICAgIFogPSBDXzsKKyAgICB9CisgICAgWFlaX3RvX3NSR0IoWCwgWSwgWiwgUiwgRywgQik7CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENQREZfQ2FsUkdCOjpTZXRSR0IoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUIFIsIEZYX0ZMT0FUIEcsIEZYX0ZMT0FUIEIpIGNvbnN0Cit7CisgICAgcEJ1ZlswXSA9IFI7CisgICAgcEJ1ZlsxXSA9IEc7CisgICAgcEJ1ZlsyXSA9IEI7CisgICAgcmV0dXJuIFRSVUU7Cit9Cit2b2lkIENQREZfQ2FsUkdCOjpUcmFuc2xhdGVJbWFnZUxpbmUoRlhfTFBCWVRFIHBEZXN0QnVmLCBGWF9MUENCWVRFIHBTcmNCdWYsIGludCBwaXhlbHMsIGludCBpbWFnZV93aWR0aCwgaW50IGltYWdlX2hlaWdodCwgRlhfQk9PTCBiVHJhbnNNYXNrKSBjb25zdAoreworICAgIGlmIChiVHJhbnNNYXNrKSB7CisgICAgICAgIEZYX0ZMT0FUIENhbFszXTsKKyAgICAgICAgRlhfRkxPQVQgUiwgRywgQjsKKyAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHBpeGVsczsgaSArKykgeworICAgICAgICAgICAgQ2FsWzBdID0gKChGWF9GTE9BVClwU3JjQnVmWzJdKSAvIDI1NTsKKyAgICAgICAgICAgIENhbFsxXSA9ICgoRlhfRkxPQVQpcFNyY0J1ZlsxXSkgLyAyNTU7CisgICAgICAgICAgICBDYWxbMl0gPSAoKEZYX0ZMT0FUKXBTcmNCdWZbMF0pIC8gMjU1OworICAgICAgICAgICAgR2V0UkdCKENhbCwgUiwgRywgQik7CisgICAgICAgICAgICBwRGVzdEJ1ZlswXSA9IEZYU1lTX3JvdW5kKEIgKiAyNTUpOworICAgICAgICAgICAgcERlc3RCdWZbMV0gPSBGWFNZU19yb3VuZChHICogMjU1KTsKKyAgICAgICAgICAgIHBEZXN0QnVmWzJdID0gRlhTWVNfcm91bmQoUiAqIDI1NSk7CisgICAgICAgICAgICBwU3JjQnVmICs9IDM7CisgICAgICAgICAgICBwRGVzdEJ1ZiArPSAzOworICAgICAgICB9CisgICAgfQorICAgIFJldmVyc2VSR0IocERlc3RCdWYsIHBTcmNCdWYsIHBpeGVscyk7Cit9CitjbGFzcyBDUERGX0xhYkNTIDogcHVibGljIENQREZfQ29sb3JTcGFjZQoreworcHVibGljOgorICAgIENQREZfTGFiQ1MoKQorICAgIHsKKyAgICAgICAgbV9GYW1pbHkgPSBQREZDU19MQUI7CisgICAgICAgIG1fbkNvbXBvbmVudHMgPSAzOworICAgIH0KKyAgICB2aXJ0dWFsIEZYX0JPT0wJCXZfTG9hZChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0FycmF5KiBwQXJyYXkpOworICAgIHZpcnR1YWwgdm9pZAkJR2V0RGVmYXVsdFZhbHVlKGludCBpQ29tcG9uZW50LCBGWF9GTE9BVCYgdmFsdWUsIEZYX0ZMT0FUJiBtaW4sIEZYX0ZMT0FUJiBtYXgpIGNvbnN0OworICAgIHZpcnR1YWwgRlhfQk9PTAkJR2V0UkdCKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCYgUiwgRlhfRkxPQVQmIEcsIEZYX0ZMT0FUJiBCKSBjb25zdDsKKyAgICBGWF9CT09MCQlTZXRSR0IoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUIFIsIEZYX0ZMT0FUIEcsIEZYX0ZMT0FUIEIpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZAkJVHJhbnNsYXRlSW1hZ2VMaW5lKEZYX0xQQllURSBwRGVzdEJ1ZiwgRlhfTFBDQllURSBwU3JjQnVmLCBpbnQgcGl4ZWxzLCBpbnQgaW1hZ2Vfd2lkdGgsIGludCBpbWFnZV9oZWlnaHQsIEZYX0JPT0wgYlRyYW5zTWFzayA9IEZBTFNFKSBjb25zdDsKKyAgICBGWF9GTE9BVAltX1doaXRlUG9pbnRbM107CisgICAgRlhfRkxPQVQJbV9CbGFja1BvaW50WzNdOworICAgIEZYX0ZMT0FUCW1fUmFuZ2VzWzRdOworfTsKK0ZYX0JPT0wgQ1BERl9MYWJDUzo6dl9Mb2FkKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfQXJyYXkqIHBBcnJheSkKK3sKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gcEFycmF5LT5HZXREaWN0KDEpOworICAgIENQREZfQXJyYXkqIHBQYXJhbSA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiV2hpdGVQb2ludCIpKTsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSArKykgeworICAgICAgICBtX1doaXRlUG9pbnRbaV0gPSBwUGFyYW0tPkdldE51bWJlcihpKTsKKyAgICB9CisgICAgcFBhcmFtID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJCbGFja1BvaW50IikpOworICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpICsrKSB7CisgICAgICAgIG1fQmxhY2tQb2ludFtpXSA9IHBQYXJhbSA/IHBQYXJhbS0+R2V0TnVtYmVyKGkpIDogMDsKKyAgICB9CisgICAgcFBhcmFtID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJSYW5nZSIpKTsKKyAgICBjb25zdCBGWF9GTE9BVCBkZWZfcmFuZ2VzWzRdID0geyAtMTAwICogMS4wZiwgMTAwICogMS4wZiwgLTEwMCAqIDEuMGYsIDEwMCAqIDEuMGZ9OworICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpICsrKSB7CisgICAgICAgIG1fUmFuZ2VzW2ldID0gcFBhcmFtID8gcFBhcmFtLT5HZXROdW1iZXIoaSkgOiBkZWZfcmFuZ2VzW2ldOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK3ZvaWQgQ1BERl9MYWJDUzo6R2V0RGVmYXVsdFZhbHVlKGludCBpQ29tcG9uZW50LCBGWF9GTE9BVCYgdmFsdWUsIEZYX0ZMT0FUJiBtaW4sIEZYX0ZMT0FUJiBtYXgpIGNvbnN0Cit7CisgICAgdmFsdWUgPSAwOworICAgIGlmIChpQ29tcG9uZW50ID09IDApIHsKKyAgICAgICAgbWluID0gMDsKKyAgICAgICAgbWF4ID0gMTAwICogMS4wZjsKKyAgICB9IGVsc2UgeworICAgICAgICBtaW4gPSBtX1Jhbmdlc1tpQ29tcG9uZW50ICogMiAtIDJdOworICAgICAgICBtYXggPSBtX1Jhbmdlc1tpQ29tcG9uZW50ICogMiAtIDFdOworICAgICAgICBpZiAodmFsdWUgPCBtaW4pIHsKKyAgICAgICAgICAgIHZhbHVlID0gbWluOworICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID4gbWF4KSB7CisgICAgICAgICAgICB2YWx1ZSA9IG1heDsKKyAgICAgICAgfQorICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9MYWJDUzo6R2V0UkdCKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCYgUiwgRlhfRkxPQVQmIEcsIEZYX0ZMT0FUJiBCKSBjb25zdAoreworICAgIEZYX0ZMT0FUIExzdGFyID0gcEJ1ZlswXTsKKyAgICBGWF9GTE9BVCBhc3RhciA9IHBCdWZbMV07CisgICAgRlhfRkxPQVQgYnN0YXIgPSBwQnVmWzJdOworICAgIEZYX0ZMT0FUIE0gPSAoTHN0YXIgKyAxNi4wZikgLyAxMTYuMGY7CisgICAgRlhfRkxPQVQgTCA9IE0gKyBhc3RhciAvIDUwMC4wZjsKKyAgICBGWF9GTE9BVCBOID0gTSAtIGJzdGFyIC8gMjAwLjBmOworICAgIEZYX0ZMT0FUIFgsIFksIFo7CisgICAgaWYgKEwgPCAwLjIwNjlmKSB7CisgICAgICAgIFggPSAwLjk1N2YgKiAwLjEyODQyZiAqIChMIC0gMC4xMzc5Zik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgWCA9IDAuOTU3ZiAqIEwgKiBMICogTDsKKyAgICB9CisgICAgaWYgKE0gPCAwLjIwNjlmKSB7CisgICAgICAgIFkgPSAwLjEyODQyZiAqIChNIC0gMC4xMzc5Zik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgWSA9IE0gKiBNICogTTsKKyAgICB9CisgICAgaWYgKE4gPCAwLjIwNjlmKSB7CisgICAgICAgIFogPSAxLjA4ODlmICogMC4xMjg0MmYgKiAoTiAtIDAuMTM3OWYpOworICAgIH0gZWxzZSB7CisgICAgICAgIFogPSAxLjA4ODlmICogTiAqIE4gKiBOOworICAgIH0KKyAgICBYWVpfdG9fc1JHQihYLCBZLCBaLCBSLCBHLCBCKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ1BERl9MYWJDUzo6U2V0UkdCKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCBSLCBGWF9GTE9BVCBHLCBGWF9GTE9BVCBCKSBjb25zdAoreworICAgIHJldHVybiBGQUxTRTsKK30KK3ZvaWQgQ1BERl9MYWJDUzo6VHJhbnNsYXRlSW1hZ2VMaW5lKEZYX0xQQllURSBwRGVzdEJ1ZiwgRlhfTFBDQllURSBwU3JjQnVmLCBpbnQgcGl4ZWxzLCBpbnQgaW1hZ2Vfd2lkdGgsIGludCBpbWFnZV9oZWlnaHQsIEZYX0JPT0wgYlRyYW5zTWFzaykgY29uc3QKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBpeGVsczsgaSArKykgeworICAgICAgICBGWF9GTE9BVCBsYWJbM107CisgICAgICAgIEZYX0ZMT0FUIFIsIEcsIEI7CisgICAgICAgIGxhYlswXSA9IChwU3JjQnVmWzBdICogMTAwIC8gMjU1LjBmKTsKKyAgICAgICAgbGFiWzFdID0gKEZYX0ZMT0FUKShwU3JjQnVmWzFdIC0gMTI4KTsKKyAgICAgICAgbGFiWzJdID0gKEZYX0ZMT0FUKShwU3JjQnVmWzJdIC0gMTI4KTsKKyAgICAgICAgR2V0UkdCKGxhYiwgUiwgRywgQik7CisgICAgICAgIHBEZXN0QnVmWzBdID0gKEZYX0lOVDMyKShCICogMjU1KTsKKyAgICAgICAgcERlc3RCdWZbMV0gPSAoRlhfSU5UMzIpKEcgKiAyNTUpOworICAgICAgICBwRGVzdEJ1ZlsyXSA9IChGWF9JTlQzMikoUiAqIDI1NSk7CisgICAgICAgIHBEZXN0QnVmICs9IDM7CisgICAgICAgIHBTcmNCdWYgKz0gMzsKKyAgICB9Cit9CitDUERGX0ljY1Byb2ZpbGU6OkNQREZfSWNjUHJvZmlsZShGWF9MUENCWVRFIHBEYXRhLCBGWF9EV09SRCBkd1NpemUsIGludCBuQ29tcG9uZW50cykKK3sKKyAgICBtX2JzUkdCID0gbkNvbXBvbmVudHMgPT0gMyAmJiBkd1NpemUgPT0gMzE0NCAmJiBGWFNZU19tZW1jbXAzMihwRGF0YSArIDB4MTkwLCAic1JHQiBJRUM2MTk2Ni0yLjEiLCAxNykgPT0gMDsKKyAgICBtX3BUcmFuc2Zvcm0gPSBOVUxMOworICAgIGlmICghbV9ic1JHQiAmJiBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldEljY01vZHVsZSgpKSB7CisgICAgICAgIG1fcFRyYW5zZm9ybSA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0SWNjTW9kdWxlKCktPkNyZWF0ZVRyYW5zZm9ybV9zUkdCKHBEYXRhLCBkd1NpemUsIG5Db21wb25lbnRzKTsKKyAgICB9Cit9CitDUERGX0ljY1Byb2ZpbGU6On5DUERGX0ljY1Byb2ZpbGUoKQoreworICAgIGlmIChtX3BUcmFuc2Zvcm0pIHsKKyAgICAgICAgQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRJY2NNb2R1bGUoKS0+RGVzdHJveVRyYW5zZm9ybShtX3BUcmFuc2Zvcm0pOworICAgIH0KK30KK2NsYXNzIENQREZfSUNDQmFzZWRDUyA6IHB1YmxpYyBDUERGX0NvbG9yU3BhY2UKK3sKK3B1YmxpYzoKKyAgICBDUERGX0lDQ0Jhc2VkQ1MoKTsKKyAgICB2aXJ0dWFsIH5DUERGX0lDQ0Jhc2VkQ1MoKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCXZfTG9hZChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0FycmF5KiBwQXJyYXkpOworICAgIHZvaWQJCQkJR2V0RGVmYXVsdFZhbHVlKGludCBpLCBGWF9GTE9BVCYgbWluLCBGWF9GTE9BVCYgbWF4KSBjb25zdAorICAgIHsKKyAgICAgICAgbWluID0gbV9wUmFuZ2VzW2kgKiAyXTsKKyAgICAgICAgbWF4ID0gbV9wUmFuZ2VzW2kgKiAyICsgMV07CisgICAgfQorICAgIHZpcnR1YWwgRlhfQk9PTAkJR2V0UkdCKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCYgUiwgRlhfRkxPQVQmIEcsIEZYX0ZMT0FUJiBCKSBjb25zdDsKKyAgICBGWF9CT09MCQkJCXZfR2V0Q01ZSyhGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQmIGMsIEZYX0ZMT0FUJiBtLCBGWF9GTE9BVCYgeSwgRlhfRkxPQVQmIGspIGNvbnN0OworICAgIEZYX0JPT0wJCQkJU2V0UkdCKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCBSLCBGWF9GTE9BVCBHLCBGWF9GTE9BVCBCKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQJCUVuYWJsZVN0ZENvbnZlcnNpb24oRlhfQk9PTCBiRW5hYmxlZCk7CisgICAgdmlydHVhbCB2b2lkCQlUcmFuc2xhdGVJbWFnZUxpbmUoRlhfTFBCWVRFIHBEZXN0QnVmLCBGWF9MUENCWVRFIHBTcmNCdWYsIGludCBwaXhlbHMsIGludCBpbWFnZV93aWR0aCwgaW50IGltYWdlX2hlaWdodCwgRlhfQk9PTCBiVHJhbnNNYXNrID0gRkFMU0UpIGNvbnN0OworICAgIEZYX0ZMT0FUKgkJbV9wUmFuZ2VzOworICAgIENQREZfSWNjUHJvZmlsZSoJbV9wUHJvZmlsZTsKKyAgICBDUERGX0NvbG9yU3BhY2UqCW1fcEFsdGVyQ1M7CisgICAgRlhfTFBCWVRFCQkJbV9wQ2FjaGU7CisgICAgRlhfQk9PTAkJCQltX2JPd247Cit9OworQ1BERl9JQ0NCYXNlZENTOjpDUERGX0lDQ0Jhc2VkQ1MoKQoreworICAgIG1fcEFsdGVyQ1MgPSBOVUxMOworICAgIG1fcFByb2ZpbGUgPSBOVUxMOworICAgIG1fRmFtaWx5ID0gUERGQ1NfSUNDQkFTRUQ7CisgICAgbV9wQ2FjaGUgPSBOVUxMOworICAgIG1fcFJhbmdlcyA9IE5VTEw7CisgICAgbV9iT3duID0gRkFMU0U7Cit9CitDUERGX0lDQ0Jhc2VkQ1M6On5DUERGX0lDQ0Jhc2VkQ1MoKQoreworICAgIGlmIChtX3BDYWNoZSkgeworICAgICAgICBGWF9GcmVlKG1fcENhY2hlKTsKKyAgICB9CisgICAgaWYgKG1fcFJhbmdlcykgeworICAgICAgICBGWF9GcmVlKG1fcFJhbmdlcyk7CisgICAgfQorICAgIGlmIChtX3BBbHRlckNTICYmIG1fYk93bikgeworICAgICAgICBtX3BBbHRlckNTLT5SZWxlYXNlQ1MoKTsKKyAgICB9CisgICAgaWYgKG1fcFByb2ZpbGUgJiYgbV9wRG9jdW1lbnQpIHsKKyAgICAgICAgbV9wRG9jdW1lbnQtPkdldFBhZ2VEYXRhKCktPlJlbGVhc2VJY2NQcm9maWxlKE5VTEwsIG1fcFByb2ZpbGUpOworICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9JQ0NCYXNlZENTOjp2X0xvYWQoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9BcnJheSogcEFycmF5KQoreworICAgIENQREZfU3RyZWFtKiBwU3RyZWFtID0gcEFycmF5LT5HZXRTdHJlYW0oMSk7CisgICAgaWYgKHBTdHJlYW0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fbkNvbXBvbmVudHMgPSBwU3RyZWFtLT5HZXREaWN0KCktPkdldEludGVnZXIoRlhfQlNUUkMoIk4iKSk7CisgICAgaWYgKG1fbkNvbXBvbmVudHMgPCAwIHx8IG1fbkNvbXBvbmVudHMgPiAoMSA8PCAxNikpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDUERGX0FycmF5KiBwUmFuZ2VzID0gcFN0cmVhbS0+R2V0RGljdCgpLT5HZXRBcnJheShGWF9CU1RSQygiUmFuZ2UiKSk7CisgICAgbV9wUmFuZ2VzID0gRlhfQWxsb2MoRlhfRkxPQVQsIG1fbkNvbXBvbmVudHMgKiAyKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbkNvbXBvbmVudHMgKiAyOyBpICsrKSB7CisgICAgICAgIGlmIChwUmFuZ2VzKSB7CisgICAgICAgICAgICBtX3BSYW5nZXNbaV0gPSBwUmFuZ2VzLT5HZXROdW1iZXIoaSk7CisgICAgICAgIH0gZWxzZSBpZiAoaSAlIDIpIHsKKyAgICAgICAgICAgIG1fcFJhbmdlc1tpXSA9IDEuMGY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3BSYW5nZXNbaV0gPSAwOworICAgICAgICB9CisgICAgfQorICAgIG1fcFByb2ZpbGUgPSBwRG9jLT5Mb2FkSWNjUHJvZmlsZShwU3RyZWFtLCBtX25Db21wb25lbnRzKTsKKyAgICBpZiAoIW1fcFByb2ZpbGUpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAobV9wUHJvZmlsZS0+bV9wVHJhbnNmb3JtID09IE5VTEwpIHsKKyAgICAgICAgQ1BERl9PYmplY3QqIHBBbHRlckNTT2JqID0gcFN0cmVhbS0+R2V0RGljdCgpLT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkFsdGVybmF0ZSIpKTsKKyAgICAgICAgaWYgKHBBbHRlckNTT2JqKSB7CisgICAgICAgICAgICBDUERGX0NvbG9yU3BhY2UqIGFsdGVyX2NzID0gQ1BERl9Db2xvclNwYWNlOjpMb2FkKHBEb2MsIHBBbHRlckNTT2JqKTsKKyAgICAgICAgICAgIGlmIChhbHRlcl9jcykgeworICAgICAgICAgICAgICAgIGlmIChhbHRlcl9jcy0+Q291bnRDb21wb25lbnRzKCkgPiBtX25Db21wb25lbnRzKSB7CisgICAgICAgICAgICAgICAgICAgIGFsdGVyX2NzLT5SZWxlYXNlQ1MoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX3BBbHRlckNTID0gYWx0ZXJfY3M7CisgICAgICAgICAgICAgICAgICAgIG1fYk93biA9IFRSVUU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghbV9wQWx0ZXJDUykgeworICAgICAgICAgICAgaWYgKG1fbkNvbXBvbmVudHMgPT0gMykgeworICAgICAgICAgICAgICAgIG1fcEFsdGVyQ1MgPSBHZXRTdG9ja0NTKFBERkNTX0RFVklDRVJHQik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fbkNvbXBvbmVudHMgPT0gNCkgeworICAgICAgICAgICAgICAgIG1fcEFsdGVyQ1MgPSBHZXRTdG9ja0NTKFBERkNTX0RFVklDRUNNWUspOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX3BBbHRlckNTID0gR2V0U3RvY2tDUyhQREZDU19ERVZJQ0VHUkFZKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ1BERl9JQ0NCYXNlZENTOjpHZXRSR0IoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUJiBSLCBGWF9GTE9BVCYgRywgRlhfRkxPQVQmIEIpIGNvbnN0Cit7CisgICAgaWYgKG1fcFByb2ZpbGUgJiYgbV9wUHJvZmlsZS0+bV9ic1JHQikgeworICAgICAgICBSID0gcEJ1ZlswXTsKKyAgICAgICAgRyA9IHBCdWZbMV07CisgICAgICAgIEIgPSBwQnVmWzJdOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgSUNvZGVjX0ljY01vZHVsZSAqcEljY01vZHVsZSA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0SWNjTW9kdWxlKCk7CisgICAgaWYgKG1fcFByb2ZpbGUtPm1fcFRyYW5zZm9ybSA9PSBOVUxMIHx8IHBJY2NNb2R1bGUgPT0gTlVMTCkgeworICAgICAgICBpZiAobV9wQWx0ZXJDUykgeworICAgICAgICAgICAgbV9wQWx0ZXJDUy0+R2V0UkdCKHBCdWYsIFIsIEcsIEIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUiA9IEcgPSBCID0gMC4wZjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgRlhfRkxPQVQgcmdiWzNdOworICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZShtX3BQcm9maWxlLT5tX3BUcmFuc2Zvcm0sIHBCdWYsIHJnYik7CisgICAgUiA9IHJnYlswXTsKKyAgICBHID0gcmdiWzFdOworICAgIEIgPSByZ2JbMl07CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENQREZfSUNDQmFzZWRDUzo6dl9HZXRDTVlLKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCYgYywgRlhfRkxPQVQmIG0sIEZYX0ZMT0FUJiB5LCBGWF9GTE9BVCYgaykgY29uc3QKK3sKKyAgICBpZiAobV9uQ29tcG9uZW50cyAhPSA0KSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgYyA9IHBCdWZbMF07CisgICAgbSA9IHBCdWZbMV07CisgICAgeSA9IHBCdWZbMl07CisgICAgayA9IHBCdWZbM107CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENQREZfSUNDQmFzZWRDUzo6U2V0UkdCKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCBSLCBGWF9GTE9BVCBHLCBGWF9GTE9BVCBCKSBjb25zdAoreworICAgIHJldHVybiBGQUxTRTsKK30KK3ZvaWQgQ1BERl9JQ0NCYXNlZENTOjpFbmFibGVTdGRDb252ZXJzaW9uKEZYX0JPT0wgYkVuYWJsZWQpCit7CisgICAgQ1BERl9Db2xvclNwYWNlOjpFbmFibGVTdGRDb252ZXJzaW9uKGJFbmFibGVkKTsKKyAgICBpZiAobV9wQWx0ZXJDUykgeworICAgICAgICBtX3BBbHRlckNTLT5FbmFibGVTdGRDb252ZXJzaW9uKGJFbmFibGVkKTsKKyAgICB9Cit9Cit2b2lkIENQREZfSUNDQmFzZWRDUzo6VHJhbnNsYXRlSW1hZ2VMaW5lKEZYX0xQQllURSBwRGVzdEJ1ZiwgRlhfTFBDQllURSBwU3JjQnVmLCBpbnQgcGl4ZWxzLCBpbnQgaW1hZ2Vfd2lkdGgsIGludCBpbWFnZV9oZWlnaHQsIEZYX0JPT0wgYlRyYW5zTWFzaykgY29uc3QKK3sKKyAgICBpZiAobV9wUHJvZmlsZS0+bV9ic1JHQikgeworICAgICAgICBSZXZlcnNlUkdCKHBEZXN0QnVmLCBwU3JjQnVmLCBwaXhlbHMpOworICAgIH0gZWxzZSBpZiAobV9wUHJvZmlsZS0+bV9wVHJhbnNmb3JtKSB7CisgICAgICAgIGludCBuTWF4Q29sb3JzID0gMTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX25Db21wb25lbnRzOyBpICsrKSB7CisgICAgICAgICAgICBuTWF4Q29sb3JzICo9IDUyOworICAgICAgICB9CisgICAgICAgIGlmIChtX25Db21wb25lbnRzID4gMyB8fCBpbWFnZV93aWR0aCAqIGltYWdlX2hlaWdodCA8IG5NYXhDb2xvcnMgKiAzIC8gMikgeworICAgICAgICAgICAgQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRJY2NNb2R1bGUoKS0+VHJhbnNsYXRlU2NhbmxpbmUobV9wUHJvZmlsZS0+bV9wVHJhbnNmb3JtLCBwRGVzdEJ1ZiwgcFNyY0J1ZiwgcGl4ZWxzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX3BDYWNoZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgKChDUERGX0lDQ0Jhc2VkQ1MqKXRoaXMpLT5tX3BDYWNoZSA9IEZYX0FsbG9jKEZYX0JZVEUsIG5NYXhDb2xvcnMgKiAzKTsKKyAgICAgICAgICAgICAgICBGWF9MUEJZVEUgdGVtcF9zcmMgPSBGWF9BbGxvYyhGWF9CWVRFLCBuTWF4Q29sb3JzICogbV9uQ29tcG9uZW50cyk7CisgICAgICAgICAgICAgICAgRlhfTFBCWVRFIHBTcmMgPSB0ZW1wX3NyYzsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5NYXhDb2xvcnM7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgY29sb3IgPSBpOworICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBvcmRlciA9IG5NYXhDb2xvcnMgLyA1MjsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBtX25Db21wb25lbnRzOyBjICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqcFNyYysrID0gKEZYX0JZVEUpKGNvbG9yIC8gb3JkZXIgKiA1KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yICU9IG9yZGVyOworICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXIgLz0gNTI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRJY2NNb2R1bGUoKS0+VHJhbnNsYXRlU2NhbmxpbmUobV9wUHJvZmlsZS0+bV9wVHJhbnNmb3JtLCBtX3BDYWNoZSwgdGVtcF9zcmMsIG5NYXhDb2xvcnMpOworICAgICAgICAgICAgICAgIEZYX0ZyZWUodGVtcF9zcmMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaXhlbHM7IGkgKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSAwOworICAgICAgICAgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgbV9uQ29tcG9uZW50czsgYyArKykgeworICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGluZGV4ICogNTIgKyAoKnBTcmNCdWYpIC8gNTsKKyAgICAgICAgICAgICAgICAgICAgcFNyY0J1ZiArKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5kZXggKj0gMzsKKyAgICAgICAgICAgICAgICAqcERlc3RCdWYrKyA9IG1fcENhY2hlW2luZGV4XTsKKyAgICAgICAgICAgICAgICAqcERlc3RCdWYrKyA9IG1fcENhY2hlW2luZGV4ICsgMV07CisgICAgICAgICAgICAgICAgKnBEZXN0QnVmKysgPSBtX3BDYWNoZVtpbmRleCArIDJdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX3BBbHRlckNTKSB7CisgICAgICAgIG1fcEFsdGVyQ1MtPlRyYW5zbGF0ZUltYWdlTGluZShwRGVzdEJ1ZiwgcFNyY0J1ZiwgcGl4ZWxzLCBpbWFnZV93aWR0aCwgaW1hZ2VfaGVpZ2h0KTsKKyAgICB9Cit9CitjbGFzcyBDUERGX0luZGV4ZWRDUyA6IHB1YmxpYyBDUERGX0NvbG9yU3BhY2UKK3sKK3B1YmxpYzoKKyAgICBDUERGX0luZGV4ZWRDUygpOworICAgIHZpcnR1YWwgfkNQREZfSW5kZXhlZENTKCk7CisgICAgdmlydHVhbCBGWF9CT09MCQl2X0xvYWQoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9BcnJheSogcEFycmF5KTsKKyAgICB2b2lkCQkJCUdldERlZmF1bHRWYWx1ZShpbnQgaUNvbXBvbmVudCwgRlhfRkxPQVQmIG1pbiwgRlhfRkxPQVQmIG1heCkgY29uc3QKKyAgICB7CisgICAgICAgIG1pbiA9IDA7CisgICAgICAgIG1heCA9IChGWF9GTE9BVCltX01heEluZGV4OworICAgIH0KKyAgICB2aXJ0dWFsIEZYX0JPT0wJCUdldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQmIFIsIEZYX0ZMT0FUJiBHLCBGWF9GTE9BVCYgQikgY29uc3Q7CisgICAgdmlydHVhbCBDUERGX0NvbG9yU3BhY2UqCUdldEJhc2VDUygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wQmFzZUNTOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQJCUVuYWJsZVN0ZENvbnZlcnNpb24oRlhfQk9PTCBiRW5hYmxlZCk7CisgICAgQ1BERl9Db2xvclNwYWNlKgltX3BCYXNlQ1M7CisgICAgaW50CQkJCQltX25CYXNlQ29tcG9uZW50czsKKyAgICBpbnQJCQkJCW1fTWF4SW5kZXg7CisgICAgQ0ZYX0J5dGVTdHJpbmcJCW1fVGFibGU7CisgICAgRlhfRkxPQVQqCQltX3BDb21wTWluTWF4OworfTsKK0NQREZfSW5kZXhlZENTOjpDUERGX0luZGV4ZWRDUygpCit7CisgICAgbV9wQmFzZUNTID0gTlVMTDsKKyAgICBtX0ZhbWlseSA9IFBERkNTX0lOREVYRUQ7CisgICAgbV9uQ29tcG9uZW50cyA9IDE7CisgICAgbV9wQ29tcE1pbk1heCA9IE5VTEw7Cit9CitDUERGX0luZGV4ZWRDUzo6fkNQREZfSW5kZXhlZENTKCkKK3sKKyAgICBpZiAobV9wQ29tcE1pbk1heCkgeworICAgICAgICBGWF9GcmVlKG1fcENvbXBNaW5NYXgpOworICAgIH0KKyAgICBDUERGX0NvbG9yU3BhY2UqIHBDUyA9IG1fcEJhc2VDUzsKKyAgICBpZiAocENTICYmIG1fcERvY3VtZW50KSB7CisgICAgICAgIG1fcERvY3VtZW50LT5HZXRQYWdlRGF0YSgpLT5SZWxlYXNlQ29sb3JTcGFjZShwQ1MtPkdldEFycmF5KCkpOworICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9JbmRleGVkQ1M6OnZfTG9hZChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0FycmF5KiBwQXJyYXkpCit7CisgICAgaWYgKHBBcnJheS0+R2V0Q291bnQoKSA8IDQpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDUERGX09iamVjdCogcEJhc2VPYmogPSBwQXJyYXktPkdldEVsZW1lbnRWYWx1ZSgxKTsKKyAgICBpZiAocEJhc2VPYmogPT0gbV9wQXJyYXkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDUERGX0RvY1BhZ2VEYXRhKiBwRG9jUGFnZURhdGEgPSBwRG9jLT5HZXRQYWdlRGF0YSgpOworICAgIG1fcEJhc2VDUyA9IHBEb2NQYWdlRGF0YS0+R2V0Q29sb3JTcGFjZShwQmFzZU9iaiwgTlVMTCk7CisgICAgaWYgKG1fcEJhc2VDUyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9uQmFzZUNvbXBvbmVudHMgPSBtX3BCYXNlQ1MtPkNvdW50Q29tcG9uZW50cygpOworICAgIG1fcENvbXBNaW5NYXggPSBGWF9BbGxvYyhGWF9GTE9BVCwgbV9uQmFzZUNvbXBvbmVudHMgKiAyKTsKKyAgICBGWF9GTE9BVCBkZWZ2YWx1ZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbkJhc2VDb21wb25lbnRzOyBpICsrKSB7CisgICAgICAgIG1fcEJhc2VDUy0+R2V0RGVmYXVsdFZhbHVlKGksIGRlZnZhbHVlLCBtX3BDb21wTWluTWF4W2kgKiAyXSwgbV9wQ29tcE1pbk1heFtpICogMiArIDFdKTsKKyAgICAgICAgbV9wQ29tcE1pbk1heFtpICogMiArIDFdIC09IG1fcENvbXBNaW5NYXhbaSAqIDJdOworICAgIH0KKyAgICBtX01heEluZGV4ID0gcEFycmF5LT5HZXRJbnRlZ2VyKDIpOworICAgIENQREZfT2JqZWN0KiBwVGFibGVPYmogPSBwQXJyYXktPkdldEVsZW1lbnRWYWx1ZSgzKTsKKyAgICBpZiAocFRhYmxlT2JqID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWF9MUENCWVRFIHBUYWJsZSA9IE5VTEw7CisgICAgRlhfRFdPUkQgc2l6ZSA9IDA7CisgICAgQ1BERl9TdHJlYW1BY2MqIHBTdHJlYW1BY2MgPSBOVUxMOworICAgIGlmIChwVGFibGVPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSSU5HKSB7CisgICAgICAgIG1fVGFibGUgPSAoKENQREZfU3RyaW5nKilwVGFibGVPYmopLT5HZXRTdHJpbmcoKTsKKyAgICB9IGVsc2UgaWYgKHBUYWJsZU9iai0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJFQU0pIHsKKyAgICAgICAgQ1BERl9TdHJlYW1BY2MgYWNjOworICAgICAgICBhY2MuTG9hZEFsbERhdGEoKENQREZfU3RyZWFtKilwVGFibGVPYmosIEZBTFNFKTsKKyAgICAgICAgbV9UYWJsZSA9IENGWF9CeXRlU3RyaW5nQyhhY2MuR2V0RGF0YSgpLCBhY2MuR2V0U2l6ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENQREZfSW5kZXhlZENTOjpHZXRSR0IoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUJiBSLCBGWF9GTE9BVCYgRywgRlhfRkxPQVQmIEIpIGNvbnN0Cit7CisgICAgaW50IGluZGV4ID0gKEZYX0lOVDMyKSgqcEJ1Zik7CisgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+IG1fTWF4SW5kZXgpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAobV9uQmFzZUNvbXBvbmVudHMpIHsKKyAgICAgICAgaWYgKGluZGV4ID09IElOVF9NQVggfHwgKGluZGV4ICsgMSkgPiBJTlRfTUFYIC8gbV9uQmFzZUNvbXBvbmVudHMgfHwKKyAgICAgICAgICAgICAgICAoaW5kZXggKyAxKSptX25CYXNlQ29tcG9uZW50cyA+IChpbnQpbV9UYWJsZS5HZXRMZW5ndGgoKSkgeworICAgICAgICAgICAgUiA9IEcgPSBCID0gMDsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBDRlhfRml4ZWRCdWZHcm93PEZYX0ZMT0FULCAxNj4gQ29tcHMobV9uQmFzZUNvbXBvbmVudHMpOworICAgIEZYX0ZMT0FUKiBjb21wcyA9IENvbXBzOworICAgIEZYX0xQQ0JZVEUgcFRhYmxlID0gbV9UYWJsZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbkJhc2VDb21wb25lbnRzOyBpICsrKSB7CisgICAgICAgIGNvbXBzW2ldID0gbV9wQ29tcE1pbk1heFtpICogMl0gKyBtX3BDb21wTWluTWF4W2kgKiAyICsgMV0gKiBwVGFibGVbaW5kZXggKiBtX25CYXNlQ29tcG9uZW50cyArIGldIC8gMjU1OworICAgIH0KKyAgICBtX3BCYXNlQ1MtPkdldFJHQihjb21wcywgUiwgRywgQik7CisgICAgcmV0dXJuIFRSVUU7Cit9Cit2b2lkIENQREZfSW5kZXhlZENTOjpFbmFibGVTdGRDb252ZXJzaW9uKEZYX0JPT0wgYkVuYWJsZWQpCit7CisgICAgQ1BERl9Db2xvclNwYWNlOjpFbmFibGVTdGRDb252ZXJzaW9uKGJFbmFibGVkKTsKKyAgICBpZiAobV9wQmFzZUNTKSB7CisgICAgICAgIG1fcEJhc2VDUy0+RW5hYmxlU3RkQ29udmVyc2lvbihiRW5hYmxlZCk7CisgICAgfQorfQorI2RlZmluZSBNQVhfUEFUVEVSTl9DT0xPUkNPTVBTCTE2Cit0eXBlZGVmIHN0cnVjdCBfUGF0dGVyblZhbHVlIHsKKyAgICBDUERGX1BhdHRlcm4qCW1fcFBhdHRlcm47CisgICAgaW50CQkJCW1fbkNvbXBzOworICAgIEZYX0ZMT0FUCQltX0NvbXBzW01BWF9QQVRURVJOX0NPTE9SQ09NUFNdOworfSBQYXR0ZXJuVmFsdWU7CitDUERGX1BhdHRlcm5DUzo6Q1BERl9QYXR0ZXJuQ1MoKQoreworICAgIG1fRmFtaWx5ID0gUERGQ1NfUEFUVEVSTjsKKyAgICBtX3BCYXNlQ1MgPSBOVUxMOworICAgIG1fbkNvbXBvbmVudHMgPSAxOworfQorQ1BERl9QYXR0ZXJuQ1M6On5DUERGX1BhdHRlcm5DUygpCit7CisgICAgQ1BERl9Db2xvclNwYWNlKiBwQ1MgPSBtX3BCYXNlQ1M7CisgICAgaWYgKHBDUyAmJiBtX3BEb2N1bWVudCkgeworICAgICAgICBtX3BEb2N1bWVudC0+R2V0UGFnZURhdGEoKS0+UmVsZWFzZUNvbG9yU3BhY2UocENTLT5HZXRBcnJheSgpKTsKKyAgICB9Cit9CitGWF9CT09MIENQREZfUGF0dGVybkNTOjp2X0xvYWQoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9BcnJheSogcEFycmF5KQoreworICAgIENQREZfT2JqZWN0KiBwQmFzZUNTID0gcEFycmF5LT5HZXRFbGVtZW50VmFsdWUoMSk7CisgICAgaWYgKHBCYXNlQ1MgPT0gbV9wQXJyYXkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDUERGX0RvY1BhZ2VEYXRhKiBwRG9jUGFnZURhdGEgPSBwRG9jLT5HZXRQYWdlRGF0YSgpOworICAgIG1fcEJhc2VDUyA9IHBEb2NQYWdlRGF0YS0+R2V0Q29sb3JTcGFjZShwQmFzZUNTLCBOVUxMKTsKKyAgICBpZiAobV9wQmFzZUNTKSB7CisgICAgICAgIG1fbkNvbXBvbmVudHMgPSBtX3BCYXNlQ1MtPkNvdW50Q29tcG9uZW50cygpICsgMTsKKyAgICAgICAgaWYgKG1fcEJhc2VDUy0+Q291bnRDb21wb25lbnRzKCkgPiBNQVhfUEFUVEVSTl9DT0xPUkNPTVBTKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBtX25Db21wb25lbnRzID0gMTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENQREZfUGF0dGVybkNTOjpHZXRSR0IoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUJiBSLCBGWF9GTE9BVCYgRywgRlhfRkxPQVQmIEIpIGNvbnN0Cit7CisgICAgaWYgKG1fcEJhc2VDUykgeworICAgICAgICBQYXR0ZXJuVmFsdWUqIHB2YWx1ZSA9IChQYXR0ZXJuVmFsdWUqKXBCdWY7CisgICAgICAgIG1fcEJhc2VDUy0+R2V0UkdCKHB2YWx1ZS0+bV9Db21wcywgUiwgRywgQik7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBSID0gRyA9IEIgPSAwLjc1ZjsKKyAgICByZXR1cm4gRkFMU0U7Cit9CitjbGFzcyBDUERGX1NlcGFyYXRpb25DUyA6IHB1YmxpYyBDUERGX0NvbG9yU3BhY2UKK3sKK3B1YmxpYzoKKyAgICBDUERGX1NlcGFyYXRpb25DUygpOworICAgIHZpcnR1YWwgfkNQREZfU2VwYXJhdGlvbkNTKCk7CisgICAgdmlydHVhbCB2b2lkCQlHZXREZWZhdWx0VmFsdWUoaW50IGlDb21wb25lbnQsIEZYX0ZMT0FUJiB2YWx1ZSwgRlhfRkxPQVQmIG1pbiwgRlhfRkxPQVQmIG1heCkgY29uc3QKKyAgICB7CisgICAgICAgIHZhbHVlID0gMS4wZjsKKyAgICAgICAgbWluID0gMDsKKyAgICAgICAgbWF4ID0gMS4wZjsKKyAgICB9CisgICAgdmlydHVhbCBGWF9CT09MCQl2X0xvYWQoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9BcnJheSogcEFycmF5KTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCUdldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQmIFIsIEZYX0ZMT0FUJiBHLCBGWF9GTE9BVCYgQikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkCQlFbmFibGVTdGRDb252ZXJzaW9uKEZYX0JPT0wgYkVuYWJsZWQpOworICAgIENQREZfQ29sb3JTcGFjZSoJbV9wQWx0Q1M7CisgICAgQ1BERl9GdW5jdGlvbioJCW1fcEZ1bmM7CisgICAgZW51bSB7Tm9uZSwgQWxsLCBDb2xvcmFudH0JbV9UeXBlOworfTsKK0NQREZfU2VwYXJhdGlvbkNTOjpDUERGX1NlcGFyYXRpb25DUygpCit7CisgICAgbV9GYW1pbHkgPSBQREZDU19TRVBBUkFUSU9OOworICAgIG1fcEFsdENTID0gTlVMTDsKKyAgICBtX3BGdW5jID0gTlVMTDsKKyAgICBtX25Db21wb25lbnRzID0gMTsKK30KK0NQREZfU2VwYXJhdGlvbkNTOjp+Q1BERl9TZXBhcmF0aW9uQ1MoKQoreworICAgIGlmIChtX3BBbHRDUykgeworICAgICAgICBtX3BBbHRDUy0+UmVsZWFzZUNTKCk7CisgICAgfQorICAgIGlmIChtX3BGdW5jKSB7CisgICAgICAgIGRlbGV0ZSBtX3BGdW5jOworICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9TZXBhcmF0aW9uQ1M6OnZfTG9hZChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0FycmF5KiBwQXJyYXkpCit7CisgICAgQ0ZYX0J5dGVTdHJpbmcgbmFtZSA9IHBBcnJheS0+R2V0U3RyaW5nKDEpOworICAgIGlmIChuYW1lID09IEZYX0JTVFJDKCJOb25lIikpIHsKKyAgICAgICAgbV9UeXBlID0gTm9uZTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX1R5cGUgPSBDb2xvcmFudDsKKyAgICAgICAgQ1BERl9PYmplY3QqIHBBbHRDUyA9IHBBcnJheS0+R2V0RWxlbWVudFZhbHVlKDIpOworICAgICAgICBpZiAocEFsdENTID09IG1fcEFycmF5KSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgbV9wQWx0Q1MgPSBMb2FkKHBEb2MsIHBBbHRDUyk7CisgICAgICAgIENQREZfT2JqZWN0KiBwRnVuY09iaiA9IHBBcnJheS0+R2V0RWxlbWVudFZhbHVlKDMpOworICAgICAgICBpZiAocEZ1bmNPYmogJiYgcEZ1bmNPYmotPkdldFR5cGUoKSAhPSBQREZPQkpfTkFNRSkgeworICAgICAgICAgICAgbV9wRnVuYyA9IENQREZfRnVuY3Rpb246OkxvYWQocEZ1bmNPYmopOworICAgICAgICB9CisgICAgICAgIGlmIChtX3BGdW5jICYmIG1fcEFsdENTICYmIG1fcEZ1bmMtPkNvdW50T3V0cHV0cygpIDwgbV9wQWx0Q1MtPkNvdW50Q29tcG9uZW50cygpKSB7CisgICAgICAgICAgICBkZWxldGUgbV9wRnVuYzsKKyAgICAgICAgICAgIG1fcEZ1bmMgPSBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDUERGX1NlcGFyYXRpb25DUzo6R2V0UkdCKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCYgUiwgRlhfRkxPQVQmIEcsIEZYX0ZMT0FUJiBCKSBjb25zdAoreworICAgIGlmIChtX1R5cGUgPT0gTm9uZSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChtX3BGdW5jID09IE5VTEwpIHsKKyAgICAgICAgaWYgKG1fcEFsdENTID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBpbnQgbkNvbXBzID0gbV9wQWx0Q1MtPkNvdW50Q29tcG9uZW50cygpOworICAgICAgICBDRlhfRml4ZWRCdWZHcm93PEZYX0ZMT0FULCAxNj4gcmVzdWx0cyhuQ29tcHMpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5Db21wczsgaSArKykgeworICAgICAgICAgICAgcmVzdWx0c1tpXSA9ICpwQnVmOworICAgICAgICB9CisgICAgICAgIG1fcEFsdENTLT5HZXRSR0IocmVzdWx0cywgUiwgRywgQik7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBDRlhfRml4ZWRCdWZHcm93PEZYX0ZMT0FULCAxNj4gcmVzdWx0cyhtX3BGdW5jLT5Db3VudE91dHB1dHMoKSk7CisgICAgaW50IG5yZXN1bHRzOworICAgIG1fcEZ1bmMtPkNhbGwocEJ1ZiwgMSwgcmVzdWx0cywgbnJlc3VsdHMpOworICAgIGlmIChucmVzdWx0cyA9PSAwKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKG1fcEFsdENTKSB7CisgICAgICAgIG1fcEFsdENTLT5HZXRSR0IocmVzdWx0cywgUiwgRywgQik7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0gZWxzZSB7CisgICAgICAgIFIgPSBHID0gQiA9IDA7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9Cit9Cit2b2lkIENQREZfU2VwYXJhdGlvbkNTOjpFbmFibGVTdGRDb252ZXJzaW9uKEZYX0JPT0wgYkVuYWJsZWQpCit7CisgICAgQ1BERl9Db2xvclNwYWNlOjpFbmFibGVTdGRDb252ZXJzaW9uKGJFbmFibGVkKTsKKyAgICBpZiAobV9wQWx0Q1MpIHsKKyAgICAgICAgbV9wQWx0Q1MtPkVuYWJsZVN0ZENvbnZlcnNpb24oYkVuYWJsZWQpOworICAgIH0KK30KK2NsYXNzIENQREZfRGV2aWNlTkNTIDogcHVibGljIENQREZfQ29sb3JTcGFjZQoreworcHVibGljOgorICAgIENQREZfRGV2aWNlTkNTKCk7CisgICAgdmlydHVhbCB+Q1BERl9EZXZpY2VOQ1MoKTsKKyAgICB2aXJ0dWFsIHZvaWQJCUdldERlZmF1bHRWYWx1ZShpbnQgaUNvbXBvbmVudCwgRlhfRkxPQVQmIHZhbHVlLCBGWF9GTE9BVCYgbWluLCBGWF9GTE9BVCYgbWF4KSBjb25zdAorICAgIHsKKyAgICAgICAgdmFsdWUgPSAxLjBmOworICAgICAgICBtaW4gPSAwOworICAgICAgICBtYXggPSAxLjBmOworICAgIH0KKyAgICB2aXJ0dWFsIEZYX0JPT0wJdl9Mb2FkKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfQXJyYXkqIHBBcnJheSk7CisgICAgdmlydHVhbCBGWF9CT09MCUdldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQmIFIsIEZYX0ZMT0FUJiBHLCBGWF9GTE9BVCYgQikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkCUVuYWJsZVN0ZENvbnZlcnNpb24oRlhfQk9PTCBiRW5hYmxlZCk7CisgICAgQ1BERl9Db2xvclNwYWNlKgltX3BBbHRDUzsKKyAgICBDUERGX0Z1bmN0aW9uKgkJbV9wRnVuYzsKK307CitDUERGX0RldmljZU5DUzo6Q1BERl9EZXZpY2VOQ1MoKQoreworICAgIG1fRmFtaWx5ID0gUERGQ1NfREVWSUNFTjsKKyAgICBtX3BBbHRDUyA9IE5VTEw7CisgICAgbV9wRnVuYyA9IE5VTEw7Cit9CitDUERGX0RldmljZU5DUzo6fkNQREZfRGV2aWNlTkNTKCkKK3sKKyAgICBpZiAobV9wRnVuYykgeworICAgICAgICBkZWxldGUgbV9wRnVuYzsKKyAgICB9CisgICAgaWYgKG1fcEFsdENTKSB7CisgICAgICAgIG1fcEFsdENTLT5SZWxlYXNlQ1MoKTsKKyAgICB9Cit9CitGWF9CT09MIENQREZfRGV2aWNlTkNTOjp2X0xvYWQoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9BcnJheSogcEFycmF5KQoreworICAgIENQREZfT2JqZWN0KiBwT2JqID0gcEFycmF5LT5HZXRFbGVtZW50VmFsdWUoMSk7CisgICAgaWYgKCFwT2JqKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKHBPYmotPkdldFR5cGUoKSAhPSBQREZPQkpfQVJSQVkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBtX25Db21wb25lbnRzID0gKChDUERGX0FycmF5KilwT2JqKS0+R2V0Q291bnQoKTsKKyAgICBDUERGX09iamVjdCogcEFsdENTID0gcEFycmF5LT5HZXRFbGVtZW50VmFsdWUoMik7CisgICAgaWYgKCFwQWx0Q1MgfHwgcEFsdENTID09IG1fcEFycmF5KSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9wQWx0Q1MgPSBMb2FkKHBEb2MsIHBBbHRDUyk7CisgICAgbV9wRnVuYyA9IENQREZfRnVuY3Rpb246OkxvYWQocEFycmF5LT5HZXRFbGVtZW50VmFsdWUoMykpOworICAgIGlmIChtX3BBbHRDUyA9PSBOVUxMIHx8IG1fcEZ1bmMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChtX3BGdW5jLT5Db3VudE91dHB1dHMoKSA8IG1fcEFsdENTLT5Db3VudENvbXBvbmVudHMoKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDUERGX0RldmljZU5DUzo6R2V0UkdCKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCYgUiwgRlhfRkxPQVQmIEcsIEZYX0ZMT0FUJiBCKSBjb25zdAoreworICAgIGlmIChtX3BGdW5jID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDRlhfRml4ZWRCdWZHcm93PEZYX0ZMT0FULCAxNj4gcmVzdWx0cyhtX3BGdW5jLT5Db3VudE91dHB1dHMoKSk7CisgICAgaW50IG5yZXN1bHRzOworICAgIG1fcEZ1bmMtPkNhbGwocEJ1ZiwgbV9uQ29tcG9uZW50cywgcmVzdWx0cywgbnJlc3VsdHMpOworICAgIGlmIChucmVzdWx0cyA9PSAwKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9wQWx0Q1MtPkdldFJHQihyZXN1bHRzLCBSLCBHLCBCKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK3ZvaWQgQ1BERl9EZXZpY2VOQ1M6OkVuYWJsZVN0ZENvbnZlcnNpb24oRlhfQk9PTCBiRW5hYmxlZCkKK3sKKyAgICBDUERGX0NvbG9yU3BhY2U6OkVuYWJsZVN0ZENvbnZlcnNpb24oYkVuYWJsZWQpOworICAgIGlmIChtX3BBbHRDUykgeworICAgICAgICBtX3BBbHRDUy0+RW5hYmxlU3RkQ29udmVyc2lvbihiRW5hYmxlZCk7CisgICAgfQorfQorQ1BERl9Db2xvclNwYWNlKiBDUERGX0NvbG9yU3BhY2U6OkdldFN0b2NrQ1MoaW50IGZhbWlseSkKK3sKKyAgICByZXR1cm4gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRQYWdlTW9kdWxlKCktPkdldFN0b2NrQ1MoZmFtaWx5KTs7Cit9CitDUERGX0NvbG9yU3BhY2UqIF9DU0Zyb21OYW1lKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lID09IEZYX0JTVFJDKCJEZXZpY2VSR0IiKSB8fCBuYW1lID09IEZYX0JTVFJDKCJSR0IiKSkgeworICAgICAgICByZXR1cm4gQ1BERl9Db2xvclNwYWNlOjpHZXRTdG9ja0NTKFBERkNTX0RFVklDRVJHQik7CisgICAgfQorICAgIGlmIChuYW1lID09IEZYX0JTVFJDKCJEZXZpY2VHcmF5IikgfHwgbmFtZSA9PSBGWF9CU1RSQygiRyIpKSB7CisgICAgICAgIHJldHVybiBDUERGX0NvbG9yU3BhY2U6OkdldFN0b2NrQ1MoUERGQ1NfREVWSUNFR1JBWSk7CisgICAgfQorICAgIGlmIChuYW1lID09IEZYX0JTVFJDKCJEZXZpY2VDTVlLIikgfHwgbmFtZSA9PSBGWF9CU1RSQygiQ01ZSyIpKSB7CisgICAgICAgIHJldHVybiBDUERGX0NvbG9yU3BhY2U6OkdldFN0b2NrQ1MoUERGQ1NfREVWSUNFQ01ZSyk7CisgICAgfQorICAgIGlmIChuYW1lID09IEZYX0JTVFJDKCJQYXR0ZXJuIikpIHsKKyAgICAgICAgcmV0dXJuIENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19QQVRURVJOKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CitDUERGX0NvbG9yU3BhY2UqIENQREZfQ29sb3JTcGFjZTo6TG9hZChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX09iamVjdCogcE9iaikKK3sKKyAgICBpZiAocE9iaiA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAocE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9OQU1FKSB7CisgICAgICAgIHJldHVybiBfQ1NGcm9tTmFtZShwT2JqLT5HZXRTdHJpbmcoKSk7CisgICAgfQorICAgIGlmIChwT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUkVBTSkgeworICAgICAgICBDUERGX0RpY3Rpb25hcnkgKnBEaWN0ID0gKChDUERGX1N0cmVhbSAqKXBPYmopLT5HZXREaWN0KCk7CisgICAgICAgIGlmICghcERpY3QpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIENQREZfQ29sb3JTcGFjZSAqcFJldCA9IE5VTEw7CisgICAgICAgIEZYX1BPU0lUSU9OIHBvcyA9IHBEaWN0LT5HZXRTdGFydFBvcygpOworICAgICAgICB3aGlsZSAocG9zKSB7CisgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBic0tleTsKKyAgICAgICAgICAgIENQREZfT2JqZWN0ICpwVmFsdWUgPSBwRGljdC0+R2V0TmV4dEVsZW1lbnQocG9zLCBic0tleSk7CisgICAgICAgICAgICBpZiAocFZhbHVlLT5HZXRUeXBlKCkgPT0gUERGT0JKX05BTUUpIHsKKyAgICAgICAgICAgICAgICBwUmV0ID0gX0NTRnJvbU5hbWUocFZhbHVlLT5HZXRTdHJpbmcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocFJldCkgeworICAgICAgICAgICAgICAgIHJldHVybiBwUmV0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAocE9iai0+R2V0VHlwZSgpICE9IFBERk9CSl9BUlJBWSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcEFycmF5ID0gKENQREZfQXJyYXkqKXBPYmo7CisgICAgaWYgKHBBcnJheS0+R2V0Q291bnQoKSA9PSAwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDRlhfQnl0ZVN0cmluZyBmYW1pbHluYW1lID0gcEFycmF5LT5HZXRFbGVtZW50VmFsdWUoMCktPkdldFN0cmluZygpOworICAgIGlmIChwQXJyYXktPkdldENvdW50KCkgPT0gMSkgeworICAgICAgICByZXR1cm4gX0NTRnJvbU5hbWUoZmFtaWx5bmFtZSk7CisgICAgfQorICAgIENQREZfQ29sb3JTcGFjZSogcENTID0gTlVMTDsKKyAgICBGWF9EV09SRCBpZCA9IGZhbWlseW5hbWUuR2V0SUQoKTsKKyAgICBpZiAoaWQgPT0gRlhCU1RSX0lEKCdDJywgJ2EnLCAnbCcsICdHJykpIHsKKyAgICAgICAgcENTID0gRlhfTkVXIENQREZfQ2FsR3JheSgpOworICAgIH0gZWxzZSBpZiAoaWQgPT0gRlhCU1RSX0lEKCdDJywgJ2EnLCAnbCcsICdSJykpIHsKKyAgICAgICAgcENTID0gRlhfTkVXIENQREZfQ2FsUkdCKCk7CisgICAgfSBlbHNlIGlmIChpZCA9PSBGWEJTVFJfSUQoJ0wnLCAnYScsICdiJywgMCkpIHsKKyAgICAgICAgcENTID0gRlhfTkVXIENQREZfTGFiQ1MoKTsKKyAgICB9IGVsc2UgaWYgKGlkID09IEZYQlNUUl9JRCgnSScsICdDJywgJ0MnLCAnQicpKSB7CisgICAgICAgIHBDUyA9IEZYX05FVyBDUERGX0lDQ0Jhc2VkQ1MoKTsKKyAgICB9IGVsc2UgaWYgKGlkID09IEZYQlNUUl9JRCgnSScsICduJywgJ2QnLCAnZScpIHx8IGlkID09IEZYQlNUUl9JRCgnSScsIDAsIDAsIDApKSB7CisgICAgICAgIHBDUyA9IEZYX05FVyBDUERGX0luZGV4ZWRDUygpOworICAgIH0gZWxzZSBpZiAoaWQgPT0gRlhCU1RSX0lEKCdTJywgJ2UnLCAncCcsICdhJykpIHsKKyAgICAgICAgcENTID0gRlhfTkVXIENQREZfU2VwYXJhdGlvbkNTKCk7CisgICAgfSBlbHNlIGlmIChpZCA9PSBGWEJTVFJfSUQoJ0QnLCAnZScsICd2JywgJ2knKSkgeworICAgICAgICBwQ1MgPSBGWF9ORVcgQ1BERl9EZXZpY2VOQ1MoKTsKKyAgICB9IGVsc2UgaWYgKGlkID09IEZYQlNUUl9JRCgnUCcsICdhJywgJ3QnLCAndCcpKSB7CisgICAgICAgIHBDUyA9IEZYX05FVyBDUERGX1BhdHRlcm5DUygpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwQ1MtPm1fcERvY3VtZW50ID0gcERvYzsKKyAgICBwQ1MtPm1fcEFycmF5ID0gcEFycmF5OworICAgIGlmICghcENTLT52X0xvYWQocERvYywgcEFycmF5KSkgeworICAgICAgICBwQ1MtPlJlbGVhc2VDUygpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHBDUzsKK30KK0NQREZfQ29sb3JTcGFjZTo6Q1BERl9Db2xvclNwYWNlKCkKK3sKKyAgICBtX0ZhbWlseSA9IDA7CisgICAgbV9wQXJyYXkgPSBOVUxMOworICAgIG1fZHdTdGRDb252ZXJzaW9uID0gMDsKKyAgICBtX3BEb2N1bWVudCA9IE5VTEw7Cit9Cit2b2lkIENQREZfQ29sb3JTcGFjZTo6UmVsZWFzZUNTKCkKK3sKKyAgICBpZiAodGhpcyA9PSBHZXRTdG9ja0NTKFBERkNTX0RFVklDRVJHQikpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodGhpcyA9PSBHZXRTdG9ja0NTKFBERkNTX0RFVklDRUdSQVkpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRoaXMgPT0gR2V0U3RvY2tDUyhQREZDU19ERVZJQ0VDTVlLKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh0aGlzID09IEdldFN0b2NrQ1MoUERGQ1NfUEFUVEVSTikpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkZWxldGUgdGhpczsKK30KK2ludCBDUERGX0NvbG9yU3BhY2U6OkdldEJ1ZlNpemUoKSBjb25zdAoreworICAgIGlmIChtX0ZhbWlseSA9PSBQREZDU19QQVRURVJOKSB7CisgICAgICAgIHJldHVybiBzaXplb2YoUGF0dGVyblZhbHVlKTsKKyAgICB9CisgICAgcmV0dXJuIG1fbkNvbXBvbmVudHMgKiBzaXplb2YoRlhfRkxPQVQpOworfQorRlhfRkxPQVQqIENQREZfQ29sb3JTcGFjZTo6Q3JlYXRlQnVmKCkKK3sKKyAgICBpbnQgc2l6ZSA9IEdldEJ1ZlNpemUoKTsKKyAgICBGWF9CWVRFKiBwQnVmID0gRlhfQWxsb2MoRlhfQllURSwgc2l6ZSk7CisgICAgRlhTWVNfbWVtc2V0MzIocEJ1ZiwgMCwgc2l6ZSk7CisgICAgcmV0dXJuIChGWF9GTE9BVCopcEJ1ZjsKK30KK0ZYX0JPT0wgQ1BERl9Db2xvclNwYWNlOjpzUkdCKCkgY29uc3QKK3sKKyAgICBpZiAobV9GYW1pbHkgPT0gUERGQ1NfREVWSUNFUkdCKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBpZiAobV9GYW1pbHkgIT0gUERGQ1NfSUNDQkFTRUQpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDUERGX0lDQ0Jhc2VkQ1MqIHBDUyA9IChDUERGX0lDQ0Jhc2VkQ1MqKXRoaXM7CisgICAgcmV0dXJuIHBDUy0+bV9wUHJvZmlsZS0+bV9ic1JHQjsKK30KK0ZYX0JPT0wgQ1BERl9Db2xvclNwYWNlOjpHZXRDTVlLKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCYgYywgRlhfRkxPQVQmIG0sIEZYX0ZMT0FUJiB5LCBGWF9GTE9BVCYgaykgY29uc3QKK3sKKyAgICBpZiAodl9HZXRDTVlLKHBCdWYsIGMsIG0sIHksIGspKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBGWF9GTE9BVCBSLCBHLCBCOworICAgIGlmICghR2V0UkdCKHBCdWYsIFIsIEcsIEIpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgc1JHQl90b19BZG9iZUNNWUsoUiwgRywgQiwgYywgbSwgeSwgayk7CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENQREZfQ29sb3JTcGFjZTo6U2V0Q01ZSyhGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQgYywgRlhfRkxPQVQgbSwgRlhfRkxPQVQgeSwgRlhfRkxPQVQgaykgY29uc3QKK3sKKyAgICBpZiAodl9TZXRDTVlLKHBCdWYsIGMsIG0sIHksIGspKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBGWF9GTE9BVCBSLCBHLCBCOworICAgIEFkb2JlQ01ZS190b19zUkdCKGMsIG0sIHksIGssIFIsIEcsIEIpOworICAgIHJldHVybiBTZXRSR0IocEJ1ZiwgUiwgRywgQik7Cit9Cit2b2lkIENQREZfQ29sb3JTcGFjZTo6R2V0RGVmYXVsdENvbG9yKEZYX0ZMT0FUKiBidWYpIGNvbnN0Cit7CisgICAgaWYgKGJ1ZiA9PSBOVUxMIHx8IG1fRmFtaWx5ID09IFBERkNTX1BBVFRFUk4pIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGWF9GTE9BVCBtaW4sIG1heDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbkNvbXBvbmVudHM7IGkgKyspIHsKKyAgICAgICAgR2V0RGVmYXVsdFZhbHVlKGksIGJ1ZltpXSwgbWluLCBtYXgpOworICAgIH0KK30KK2ludCBDUERGX0NvbG9yU3BhY2U6OkdldE1heEluZGV4KCkgY29uc3QKK3sKKyAgICBpZiAobV9GYW1pbHkgIT0gUERGQ1NfSU5ERVhFRCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQ1BERl9JbmRleGVkQ1MqIHBDUyA9IChDUERGX0luZGV4ZWRDUyopdGhpczsKKyAgICByZXR1cm4gcENTLT5tX01heEluZGV4OworfQordm9pZCBDUERGX0NvbG9yU3BhY2U6OlRyYW5zbGF0ZUltYWdlTGluZShGWF9MUEJZVEUgZGVzdF9idWYsIEZYX0xQQ0JZVEUgc3JjX2J1ZiwgaW50IHBpeGVscywgaW50IGltYWdlX3dpZHRoLCBpbnQgaW1hZ2VfaGVpZ2h0LCBGWF9CT09MIGJUcmFuc01hc2spIGNvbnN0Cit7CisgICAgQ0ZYX0ZpeGVkQnVmR3JvdzxGWF9GTE9BVCwgMTY+IHNyY2J1ZihtX25Db21wb25lbnRzKTsKKyAgICBGWF9GTE9BVCogc3JjID0gc3JjYnVmOworICAgIEZYX0ZMT0FUIFIsIEcsIEI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaXhlbHM7IGkgKyspIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtX25Db21wb25lbnRzOyBqICsrKQorICAgICAgICAgICAgaWYgKG1fRmFtaWx5ID09IFBERkNTX0lOREVYRUQpIHsKKyAgICAgICAgICAgICAgICBzcmNbal0gPSAoRlhfRkxPQVQpKCpzcmNfYnVmICsrKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3JjW2pdID0gKEZYX0ZMT0FUKSgqc3JjX2J1ZiArKykgLyAyNTU7CisgICAgICAgICAgICB9CisgICAgICAgIEdldFJHQihzcmMsIFIsIEcsIEIpOworICAgICAgICAqZGVzdF9idWYgKysgPSAoRlhfSU5UMzIpKEIgKiAyNTUpOworICAgICAgICAqZGVzdF9idWYgKysgPSAoRlhfSU5UMzIpKEcgKiAyNTUpOworICAgICAgICAqZGVzdF9idWYgKysgPSAoRlhfSU5UMzIpKFIgKiAyNTUpOworICAgIH0KK30KK3ZvaWQgQ1BERl9Db2xvclNwYWNlOjpFbmFibGVTdGRDb252ZXJzaW9uKEZYX0JPT0wgYkVuYWJsZWQpCit7CisgICAgaWYgKGJFbmFibGVkKSB7CisgICAgICAgIG1fZHdTdGRDb252ZXJzaW9uICsrOworICAgIH0gZWxzZSBpZiAobV9kd1N0ZENvbnZlcnNpb24pIHsKKyAgICAgICAgbV9kd1N0ZENvbnZlcnNpb24gLS07CisgICAgfQorfQorQ1BERl9Db2xvcjo6Q1BERl9Db2xvcihpbnQgZmFtaWx5KQoreworICAgIG1fcENTID0gQ1BERl9Db2xvclNwYWNlOjpHZXRTdG9ja0NTKGZhbWlseSk7CisgICAgaW50IG5Db21wcyA9IDM7CisgICAgaWYgKGZhbWlseSA9PSBQREZDU19ERVZJQ0VHUkFZKSB7CisgICAgICAgIG5Db21wcyA9IDE7CisgICAgfSBlbHNlIGlmIChmYW1pbHkgPT0gUERGQ1NfREVWSUNFQ01ZSykgeworICAgICAgICBuQ29tcHMgPSA0OworICAgIH0KKyAgICBtX3BCdWZmZXIgPSBGWF9BbGxvYyhGWF9GTE9BVCwgbkNvbXBzKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5Db21wczsgaSArKykgeworICAgICAgICBtX3BCdWZmZXJbaV0gPSAwOworICAgIH0KK30KK0NQREZfQ29sb3I6On5DUERGX0NvbG9yKCkKK3sKKyAgICBSZWxlYXNlQnVmZmVyKCk7CisgICAgUmVsZWFzZUNvbG9yU3BhY2UoKTsKK30KK3ZvaWQgQ1BERl9Db2xvcjo6UmVsZWFzZUJ1ZmZlcigpCit7CisgICAgaWYgKCFtX3BCdWZmZXIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9wQ1MtPkdldEZhbWlseSgpID09IFBERkNTX1BBVFRFUk4pIHsKKyAgICAgICAgUGF0dGVyblZhbHVlKiBwdmFsdWUgPSAoUGF0dGVyblZhbHVlKiltX3BCdWZmZXI7CisgICAgICAgIENQREZfUGF0dGVybiogcFBhdHRlcm4gPSBwdmFsdWUtPm1fcFBhdHRlcm47CisgICAgICAgIGlmIChwUGF0dGVybiAmJiBwUGF0dGVybi0+bV9wRG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHBQYXR0ZXJuLT5tX3BEb2N1bWVudC0+R2V0UGFnZURhdGEoKS0+UmVsZWFzZVBhdHRlcm4ocFBhdHRlcm4tPm1fcFBhdHRlcm5PYmopOworICAgICAgICB9CisgICAgfQorICAgIEZYX0ZyZWUobV9wQnVmZmVyKTsKKyAgICBtX3BCdWZmZXIgPSBOVUxMOworfQordm9pZCBDUERGX0NvbG9yOjpSZWxlYXNlQ29sb3JTcGFjZSgpCit7CisgICAgaWYgKG1fcENTICYmIG1fcENTLT5tX3BEb2N1bWVudCAmJiBtX3BDUy0+R2V0QXJyYXkoKSkgeworICAgICAgICBtX3BDUy0+bV9wRG9jdW1lbnQtPkdldFBhZ2VEYXRhKCktPlJlbGVhc2VDb2xvclNwYWNlKG1fcENTLT5HZXRBcnJheSgpKTsKKyAgICAgICAgbV9wQ1MgPSBOVUxMOworICAgIH0KK30KK3ZvaWQgQ1BERl9Db2xvcjo6U2V0Q29sb3JTcGFjZShDUERGX0NvbG9yU3BhY2UqIHBDUykKK3sKKyAgICBpZiAobV9wQ1MgPT0gcENTKSB7CisgICAgICAgIGlmIChtX3BCdWZmZXIgPT0gTlVMTCkgeworICAgICAgICAgICAgbV9wQnVmZmVyID0gcENTLT5DcmVhdGVCdWYoKTsKKyAgICAgICAgfQorICAgICAgICBSZWxlYXNlQ29sb3JTcGFjZSgpOworICAgICAgICBtX3BDUyA9IHBDUzsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSZWxlYXNlQnVmZmVyKCk7CisgICAgUmVsZWFzZUNvbG9yU3BhY2UoKTsKKyAgICBtX3BDUyA9IHBDUzsKKyAgICBpZiAobV9wQ1MpIHsKKyAgICAgICAgbV9wQnVmZmVyID0gcENTLT5DcmVhdGVCdWYoKTsKKyAgICAgICAgcENTLT5HZXREZWZhdWx0Q29sb3IobV9wQnVmZmVyKTsKKyAgICB9Cit9Cit2b2lkIENQREZfQ29sb3I6OlNldFZhbHVlKEZYX0ZMT0FUKiBjb21wcykKK3sKKyAgICBpZiAobV9wQnVmZmVyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9wQ1MtPkdldEZhbWlseSgpICE9IFBERkNTX1BBVFRFUk4pIHsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wQnVmZmVyLCBjb21wcywgbV9wQ1MtPkNvdW50Q29tcG9uZW50cygpICogc2l6ZW9mKEZYX0ZMT0FUKSk7CisgICAgfQorfQordm9pZCBDUERGX0NvbG9yOjpTZXRWYWx1ZShDUERGX1BhdHRlcm4qIHBQYXR0ZXJuLCBGWF9GTE9BVCogY29tcHMsIGludCBuY29tcHMpCit7CisgICAgaWYgKG5jb21wcyA+IE1BWF9QQVRURVJOX0NPTE9SQ09NUFMpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9wQ1MgPT0gTlVMTCB8fCBtX3BDUy0+R2V0RmFtaWx5KCkgIT0gUERGQ1NfUEFUVEVSTikgeworICAgICAgICBpZiAobV9wQnVmZmVyKSB7CisgICAgICAgICAgICBGWF9GcmVlKG1fcEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgbV9wQ1MgPSBDUERGX0NvbG9yU3BhY2U6OkdldFN0b2NrQ1MoUERGQ1NfUEFUVEVSTik7CisgICAgICAgIG1fcEJ1ZmZlciA9IG1fcENTLT5DcmVhdGVCdWYoKTsKKyAgICB9CisgICAgQ1BERl9Eb2NQYWdlRGF0YSogcERvY1BhZ2VEYXRhID0gTlVMTDsKKyAgICBQYXR0ZXJuVmFsdWUqIHB2YWx1ZSA9IChQYXR0ZXJuVmFsdWUqKW1fcEJ1ZmZlcjsKKyAgICBpZiAocHZhbHVlLT5tX3BQYXR0ZXJuICYmIHB2YWx1ZS0+bV9wUGF0dGVybi0+bV9wRG9jdW1lbnQpIHsKKyAgICAgICAgcERvY1BhZ2VEYXRhID0gcHZhbHVlLT5tX3BQYXR0ZXJuLT5tX3BEb2N1bWVudC0+R2V0UGFnZURhdGEoKTsKKyAgICAgICAgcERvY1BhZ2VEYXRhLT5SZWxlYXNlUGF0dGVybihwdmFsdWUtPm1fcFBhdHRlcm4tPm1fcFBhdHRlcm5PYmopOworICAgIH0KKyAgICBwdmFsdWUtPm1fbkNvbXBzID0gbmNvbXBzOworICAgIHB2YWx1ZS0+bV9wUGF0dGVybiA9IHBQYXR0ZXJuOworICAgIGlmIChuY29tcHMpIHsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIocHZhbHVlLT5tX0NvbXBzLCBjb21wcywgbmNvbXBzICogc2l6ZW9mKEZYX0ZMT0FUKSk7CisgICAgfQorfQordm9pZCBDUERGX0NvbG9yOjpDb3B5KGNvbnN0IENQREZfQ29sb3IqIHBTcmMpCit7CisgICAgUmVsZWFzZUJ1ZmZlcigpOworICAgIFJlbGVhc2VDb2xvclNwYWNlKCk7CisgICAgbV9wQ1MgPSBwU3JjLT5tX3BDUzsKKyAgICBpZiAobV9wQ1MgJiYgbV9wQ1MtPm1fcERvY3VtZW50KSB7CisgICAgICAgIENQREZfQXJyYXkqIHBBcnJheSA9IG1fcENTLT5HZXRBcnJheSgpOworICAgICAgICBpZiAocEFycmF5KSB7CisgICAgICAgICAgICBtX3BDUyA9IG1fcENTLT5tX3BEb2N1bWVudC0+R2V0UGFnZURhdGEoKS0+R2V0Q29waWVkQ29sb3JTcGFjZShwQXJyYXkpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChtX3BDUyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wQnVmZmVyID0gbV9wQ1MtPkNyZWF0ZUJ1ZigpOworICAgIEZYU1lTX21lbWNweTMyKG1fcEJ1ZmZlciwgcFNyYy0+bV9wQnVmZmVyLCBtX3BDUy0+R2V0QnVmU2l6ZSgpKTsKKyAgICBpZiAobV9wQ1MtPkdldEZhbWlseSgpID09IFBERkNTX1BBVFRFUk4pIHsKKyAgICAgICAgUGF0dGVyblZhbHVlKiBwdmFsdWUgPSAoUGF0dGVyblZhbHVlKiltX3BCdWZmZXI7CisgICAgICAgIGlmIChwdmFsdWUtPm1fcFBhdHRlcm4gJiYgcHZhbHVlLT5tX3BQYXR0ZXJuLT5tX3BEb2N1bWVudCkgeworICAgICAgICAgICAgcHZhbHVlLT5tX3BQYXR0ZXJuID0gcHZhbHVlLT5tX3BQYXR0ZXJuLT5tX3BEb2N1bWVudC0+R2V0UGFnZURhdGEoKS0+R2V0UGF0dGVybihwdmFsdWUtPm1fcFBhdHRlcm4tPm1fcFBhdHRlcm5PYmosIEZBTFNFLCAmcHZhbHVlLT5tX3BQYXR0ZXJuLT5tX1BhcmVudE1hdHJpeCk7CisgICAgICAgIH0KKyAgICB9Cit9CitGWF9CT09MIENQREZfQ29sb3I6OkdldFJHQihpbnQmIFIsIGludCYgRywgaW50JiBCKSBjb25zdAoreworICAgIGlmIChtX3BDUyA9PSBOVUxMIHx8IG1fcEJ1ZmZlciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgRlhfRkxPQVQgciwgZywgYjsKKyAgICBpZiAoIW1fcENTLT5HZXRSR0IobV9wQnVmZmVyLCByLCBnLCBiKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIFIgPSAoRlhfSU5UMzIpKHIgKiAyNTUgKyAwLjVmKTsKKyAgICBHID0gKEZYX0lOVDMyKShnICogMjU1ICsgMC41Zik7CisgICAgQiA9IChGWF9JTlQzMikoYiAqIDI1NSArIDAuNWYpOworICAgIHJldHVybiBUUlVFOworfQorQ1BERl9QYXR0ZXJuKiBDUERGX0NvbG9yOjpHZXRQYXR0ZXJuKCkgY29uc3QKK3sKKyAgICBpZiAobV9wQnVmZmVyID09IE5VTEwgfHwgbV9wQ1MtPkdldEZhbWlseSgpICE9IFBERkNTX1BBVFRFUk4pIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFBhdHRlcm5WYWx1ZSogcHZhbHVlID0gKFBhdHRlcm5WYWx1ZSopbV9wQnVmZmVyOworICAgIHJldHVybiBwdmFsdWUtPm1fcFBhdHRlcm47Cit9CitDUERGX0NvbG9yU3BhY2UqIENQREZfQ29sb3I6OkdldFBhdHRlcm5DUygpIGNvbnN0Cit7CisgICAgaWYgKG1fcEJ1ZmZlciA9PSBOVUxMIHx8IG1fcENTLT5HZXRGYW1pbHkoKSAhPSBQREZDU19QQVRURVJOKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gbV9wQ1MtPkdldEJhc2VDUygpOworfQorRlhfRkxPQVQqIENQREZfQ29sb3I6OkdldFBhdHRlcm5Db2xvcigpIGNvbnN0Cit7CisgICAgaWYgKG1fcEJ1ZmZlciA9PSBOVUxMIHx8IG1fcENTLT5HZXRGYW1pbHkoKSAhPSBQREZDU19QQVRURVJOKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQYXR0ZXJuVmFsdWUqIHB2YWx1ZSA9IChQYXR0ZXJuVmFsdWUqKW1fcEJ1ZmZlcjsKKyAgICByZXR1cm4gcHZhbHVlLT5tX25Db21wcyA/IHB2YWx1ZS0+bV9Db21wcyA6IE5VTEw7Cit9CitGWF9CT09MIENQREZfQ29sb3I6OklzRXF1YWwoY29uc3QgQ1BERl9Db2xvciYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG1fcENTICE9IG90aGVyLm1fcENTIHx8IG1fcENTID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gRlhTWVNfbWVtY21wMzIobV9wQnVmZmVyLCBvdGhlci5tX3BCdWZmZXIsIG1fcENTLT5HZXRCdWZTaXplKCkpID09IDA7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFnZS9mcGRmX3BhZ2VfZG9jLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYWdlL2ZwZGZfcGFnZV9kb2MuY3BwCmluZGV4IGQ0ZTViZWYuLmE5ZDJjNGQgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYWdlL2ZwZGZfcGFnZV9kb2MuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYWdlL2ZwZGZfcGFnZV9kb2MuY3BwCkBAIC0xLDY0NyArMSw2NDcgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX21vZHVsZS5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Zkcm0vZnhfY3J5cHQuaCINCi0jaW5jbHVkZSAiLi4vZnBkZl9mb250L2ZvbnRfaW50LmgiDQotI2luY2x1ZGUgInBhZ2VpbnQuaCINCi1jbGFzcyBDUERGX1BhZ2VNb2R1bGUgOiBwdWJsaWMgQ1BERl9QYWdlTW9kdWxlRGVmDQotew0KLXB1YmxpYzoNCi0gICAgQ1BERl9QYWdlTW9kdWxlKCkgOiBtX1N0b2NrR3JheUNTKFBERkNTX0RFVklDRUdSQVkpLCBtX1N0b2NrUkdCQ1MoUERGQ1NfREVWSUNFUkdCKSwNCi0gICAgICAgIG1fU3RvY2tDTVlLQ1MoUERGQ1NfREVWSUNFQ01ZSykge30NCi0gICAgdmlydHVhbCB+Q1BERl9QYWdlTW9kdWxlKCkge30NCi0gICAgdmlydHVhbCBGWF9CT09MCQlJbnN0YWxsZWQoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIENQREZfRG9jUGFnZURhdGEqCUNyZWF0ZURvY0RhdGEoQ1BERl9Eb2N1bWVudCogcERvYykNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX0RvY1BhZ2VEYXRhKHBEb2MpOw0KLSAgICB9DQotICAgIHZpcnR1YWwgdm9pZAkJUmVsZWFzZURvYyhDUERGX0RvY3VtZW50KiBwRG9jKTsNCi0gICAgdmlydHVhbCB2b2lkCQlDbGVhckRvYyhDUERGX0RvY3VtZW50KiBwRG9jKTsNCi0gICAgdmlydHVhbCBDUERGX0ZvbnRHbG9iYWxzKglHZXRGb250R2xvYmFscygpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAmbV9Gb250R2xvYmFsczsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQkJQ2xlYXJTdG9ja0ZvbnQoQ1BERl9Eb2N1bWVudCogcERvYykNCi0gICAgew0KLSAgICAgICAgbV9Gb250R2xvYmFscy5DbGVhcihwRG9jKTsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIENQREZfQ29sb3JTcGFjZSoJR2V0U3RvY2tDUyhpbnQgZmFtaWx5KTsNCi0gICAgdmlydHVhbCB2b2lkCQlOb3RpZnlDSktBdmFpbGFibGUoKTsNCi0gICAgQ1BERl9Gb250R2xvYmFscwltX0ZvbnRHbG9iYWxzOw0KLSAgICBDUERGX0RldmljZUNTCQltX1N0b2NrR3JheUNTOw0KLSAgICBDUERGX0RldmljZUNTCQltX1N0b2NrUkdCQ1M7DQotICAgIENQREZfRGV2aWNlQ1MJCW1fU3RvY2tDTVlLQ1M7DQotICAgIENQREZfUGF0dGVybkNTCQltX1N0b2NrUGF0dGVybkNTOw0KLX07DQotQ1BERl9Db2xvclNwYWNlKiBDUERGX1BhZ2VNb2R1bGU6OkdldFN0b2NrQ1MoaW50IGZhbWlseSkNCi17DQotICAgIGlmIChmYW1pbHkgPT0gUERGQ1NfREVWSUNFR1JBWSkgew0KLSAgICAgICAgcmV0dXJuICZtX1N0b2NrR3JheUNTOw0KLSAgICB9DQotICAgIGlmIChmYW1pbHkgPT0gUERGQ1NfREVWSUNFUkdCKSB7DQotICAgICAgICByZXR1cm4gJm1fU3RvY2tSR0JDUzsNCi0gICAgfQ0KLSAgICBpZiAoZmFtaWx5ID09IFBERkNTX0RFVklDRUNNWUspIHsNCi0gICAgICAgIHJldHVybiAmbV9TdG9ja0NNWUtDUzsNCi0gICAgfQ0KLSAgICBpZiAoZmFtaWx5ID09IFBERkNTX1BBVFRFUk4pIHsNCi0gICAgICAgIHJldHVybiAmbV9TdG9ja1BhdHRlcm5DUzsNCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotdm9pZCBDUERGX01vZHVsZU1ncjo6SW5pdFBhZ2VNb2R1bGUoKQ0KLXsNCi0gICAgaWYgKG1fcFBhZ2VNb2R1bGUpIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BQYWdlTW9kdWxlOw0KLSAgICB9DQotICAgIENQREZfUGFnZU1vZHVsZSogcFBhZ2VNb2R1bGUgPSBGWF9ORVcgQ1BERl9QYWdlTW9kdWxlOw0KLSAgICBtX3BQYWdlTW9kdWxlID0gcFBhZ2VNb2R1bGU7DQotfQ0KLXZvaWQgQ1BERl9QYWdlTW9kdWxlOjpSZWxlYXNlRG9jKENQREZfRG9jdW1lbnQqIHBEb2MpDQotew0KLSAgICBkZWxldGUgcERvYy0+R2V0UGFnZURhdGEoKTsNCi19DQotdm9pZCBDUERGX1BhZ2VNb2R1bGU6OkNsZWFyRG9jKENQREZfRG9jdW1lbnQqIHBEb2MpDQotew0KLSAgICBwRG9jLT5HZXRQYWdlRGF0YSgpLT5DbGVhcihGQUxTRSk7DQotfQ0KLXZvaWQgQ1BERl9QYWdlTW9kdWxlOjpOb3RpZnlDSktBdmFpbGFibGUoKQ0KLXsNCi0gICAgbV9Gb250R2xvYmFscy5tX0NNYXBNYW5hZ2VyLlJlbG9hZEFsbCgpOw0KLX0NCi1DUERGX0ZvbnQqIENQREZfRG9jdW1lbnQ6OkxvYWRGb250KENQREZfRGljdGlvbmFyeSogcEZvbnREaWN0KQ0KLXsNCi0gICAgaWYgKCFwRm9udERpY3QpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiBHZXRWYWxpZGF0ZVBhZ2VEYXRhKCktPkdldEZvbnQocEZvbnREaWN0LCBGQUxTRSk7DQotfQ0KLUNQREZfRm9udCogQ1BERl9Eb2N1bWVudDo6RmluZEZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9udERpY3QpDQotew0KLSAgICBpZiAoIXBGb250RGljdCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIEdldFZhbGlkYXRlUGFnZURhdGEoKS0+R2V0Rm9udChwRm9udERpY3QsIFRSVUUpOw0KLX0NCi1DUERGX1N0cmVhbUFjYyogQ1BERl9Eb2N1bWVudDo6TG9hZEZvbnRGaWxlKENQREZfU3RyZWFtKiBwU3RyZWFtKQ0KLXsNCi0gICAgaWYgKHBTdHJlYW0gPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIEdldFZhbGlkYXRlUGFnZURhdGEoKS0+R2V0Rm9udEZpbGVTdHJlYW1BY2MocFN0cmVhbSk7DQotfQ0KLUNQREZfQ29sb3JTcGFjZSogX0NTRnJvbU5hbWUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUpOw0KLUNQREZfQ29sb3JTcGFjZSogQ1BERl9Eb2N1bWVudDo6TG9hZENvbG9yU3BhY2UoQ1BERl9PYmplY3QqIHBDU09iaiwgQ1BERl9EaWN0aW9uYXJ5KiBwUmVzb3VyY2VzKQ0KLXsNCi0gICAgcmV0dXJuIEdldFZhbGlkYXRlUGFnZURhdGEoKS0+R2V0Q29sb3JTcGFjZShwQ1NPYmosIHBSZXNvdXJjZXMpOw0KLX0NCi1DUERGX1BhdHRlcm4qIENQREZfRG9jdW1lbnQ6OkxvYWRQYXR0ZXJuKENQREZfT2JqZWN0KiBwUGF0dGVybk9iaiwgRlhfQk9PTCBiU2hhZGluZywgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogbWF0cml4KQ0KLXsNCi0gICAgcmV0dXJuIEdldFZhbGlkYXRlUGFnZURhdGEoKS0+R2V0UGF0dGVybihwUGF0dGVybk9iaiwgYlNoYWRpbmcsIG1hdHJpeCk7DQotfQ0KLUNQREZfSWNjUHJvZmlsZSogQ1BERl9Eb2N1bWVudDo6TG9hZEljY1Byb2ZpbGUoQ1BERl9TdHJlYW0qIHBTdHJlYW0sIGludCBuQ29tcG9uZW50cykNCi17DQotICAgIHJldHVybiBHZXRWYWxpZGF0ZVBhZ2VEYXRhKCktPkdldEljY1Byb2ZpbGUocFN0cmVhbSwgbkNvbXBvbmVudHMpOw0KLX0NCi1DUERGX0ltYWdlKiBDUERGX0RvY3VtZW50OjpMb2FkSW1hZ2VGKENQREZfT2JqZWN0KiBwT2JqKQ0KLXsNCi0gICAgaWYgKCFwT2JqKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBGWFNZU19hc3NlcnQocE9iai0+R2V0T2JqTnVtKCkpOw0KLSAgICByZXR1cm4gR2V0VmFsaWRhdGVQYWdlRGF0YSgpLT5HZXRJbWFnZShwT2JqKTsNCi19DQotdm9pZCBDUERGX0RvY3VtZW50OjpSZW1vdmVDb2xvclNwYWNlRnJvbVBhZ2VEYXRhKENQREZfT2JqZWN0KiBwQ1NPYmopDQotew0KLSAgICBpZiAoIXBDU09iaikgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEdldFBhZ2VEYXRhKCktPlJlbGVhc2VDb2xvclNwYWNlKHBDU09iaik7DQotfQ0KLUNQREZfRG9jUGFnZURhdGE6OkNQREZfRG9jUGFnZURhdGEoQ1BERl9Eb2N1bWVudCAqcFBERkRvYykNCi0gICAgOiBtX3BQREZEb2MocFBERkRvYykNCi0gICAgLCBtX0ZvbnRNYXAoKQ0KLSAgICAsIG1fQ29sb3JTcGFjZU1hcCgpDQotICAgICwgbV9QYXR0ZXJuTWFwKCkNCi0gICAgLCBtX0ltYWdlTWFwKCkNCi0gICAgLCBtX0ljY1Byb2ZpbGVNYXAoKQ0KLSAgICAsIG1fRm9udEZpbGVNYXAoKQ0KLXsNCi0gICAgbV9Gb250TWFwLkluaXRIYXNoVGFibGUoNjQpOw0KLSAgICBtX0NvbG9yU3BhY2VNYXAuSW5pdEhhc2hUYWJsZSgzMik7DQotICAgIG1fUGF0dGVybk1hcC5Jbml0SGFzaFRhYmxlKDE2KTsNCi0gICAgbV9JbWFnZU1hcC5Jbml0SGFzaFRhYmxlKDY0KTsNCi0gICAgbV9JY2NQcm9maWxlTWFwLkluaXRIYXNoVGFibGUoMTYpOw0KLSAgICBtX0ZvbnRGaWxlTWFwLkluaXRIYXNoVGFibGUoMzIpOw0KLX0NCi1DUERGX0RvY1BhZ2VEYXRhOjp+Q1BERl9Eb2NQYWdlRGF0YSgpDQotew0KLSAgICBDbGVhcihGQUxTRSk7DQotICAgIENsZWFyKFRSVUUpOw0KLSAgICBGWF9QT1NJVElPTiBwb3MgPSBOVUxMOw0KLX0NCi12b2lkIENQREZfRG9jUGFnZURhdGE6OkNsZWFyKEZYX0JPT0wgYlJlbGVhc2UpDQotew0KLSAgICBGWF9QT1NJVElPTiBwb3M7DQotICAgIEZYX0RXT1JECW5Db3VudDsNCi0gICAgew0KLSAgICAgICAgcG9zID0gbV9QYXR0ZXJuTWFwLkdldFN0YXJ0UG9zaXRpb24oKTsNCi0gICAgICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgICAgICBDUERGX09iamVjdCogcHRPYmo7DQotICAgICAgICAgICAgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfUGF0dGVybio+KiBwdERhdGE7DQotICAgICAgICAgICAgbV9QYXR0ZXJuTWFwLkdldE5leHRBc3NvYyhwb3MsIHB0T2JqLCBwdERhdGEpOw0KLSAgICAgICAgICAgIG5Db3VudCA9IHB0RGF0YS0+bV9uQ291bnQ7DQotICAgICAgICAgICAgaWYgKGJSZWxlYXNlIHx8IG5Db3VudCA8IDIpIHsNCi0gICAgICAgICAgICAgICAgZGVsZXRlIHB0RGF0YS0+bV9PYmo7DQotICAgICAgICAgICAgICAgIHB0RGF0YS0+bV9PYmogPSBOVUxMOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICB7DQotICAgICAgICBwb3MgPSBtX0ZvbnRNYXAuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICAgICAgd2hpbGUgKHBvcykgew0KLSAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogZm9udERpY3Q7DQotICAgICAgICAgICAgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfRm9udCo+KiBmb250RGF0YTsNCi0gICAgICAgICAgICBtX0ZvbnRNYXAuR2V0TmV4dEFzc29jKHBvcywgZm9udERpY3QsIGZvbnREYXRhKTsNCi0gICAgICAgICAgICBuQ291bnQgPSBmb250RGF0YS0+bV9uQ291bnQ7DQotICAgICAgICAgICAgaWYgKGJSZWxlYXNlIHx8IG5Db3VudCA8IDIpIHsNCi0gICAgICAgICAgICAgICAgZGVsZXRlIGZvbnREYXRhLT5tX09iajsNCi0gICAgICAgICAgICAgICAgZm9udERhdGEtPm1fT2JqID0gTlVMTDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgew0KLSAgICAgICAgcG9zID0gbV9JbWFnZU1hcC5HZXRTdGFydFBvc2l0aW9uKCk7DQotICAgICAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICAgICAgRlhfRFdPUkQgb2JqTnVtOw0KLSAgICAgICAgICAgIENQREZfQ291bnRlZE9iamVjdDxDUERGX0ltYWdlKj4qIGltYWdlRGF0YTsNCi0gICAgICAgICAgICBtX0ltYWdlTWFwLkdldE5leHRBc3NvYyhwb3MsIG9iak51bSwgaW1hZ2VEYXRhKTsNCi0gICAgICAgICAgICBuQ291bnQgPSBpbWFnZURhdGEtPm1fbkNvdW50Ow0KLSAgICAgICAgICAgIGlmIChiUmVsZWFzZSB8fCBuQ291bnQgPCAyKSB7DQotICAgICAgICAgICAgICAgIGRlbGV0ZSBpbWFnZURhdGEtPm1fT2JqOw0KLSAgICAgICAgICAgICAgICBkZWxldGUgaW1hZ2VEYXRhOw0KLSAgICAgICAgICAgICAgICBtX0ltYWdlTWFwLlJlbW92ZUtleShvYmpOdW0pOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICB7DQotICAgICAgICBwb3MgPSBtX0NvbG9yU3BhY2VNYXAuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICAgICAgd2hpbGUgKHBvcykgew0KLSAgICAgICAgICAgIENQREZfT2JqZWN0KiBjc0tleTsNCi0gICAgICAgICAgICBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9Db2xvclNwYWNlKj4qIGNzRGF0YTsNCi0gICAgICAgICAgICBtX0NvbG9yU3BhY2VNYXAuR2V0TmV4dEFzc29jKHBvcywgY3NLZXksIGNzRGF0YSk7DQotICAgICAgICAgICAgbkNvdW50ID0gY3NEYXRhLT5tX25Db3VudDsNCi0gICAgICAgICAgICBpZiAoYlJlbGVhc2UgfHwgbkNvdW50IDwgMikgew0KLSAgICAgICAgICAgICAgICBjc0RhdGEtPm1fT2JqLT5SZWxlYXNlQ1MoKTsNCi0gICAgICAgICAgICAgICAgY3NEYXRhLT5tX09iaiA9IE5VTEw7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHsNCi0gICAgICAgIHBvcyA9IG1fSWNjUHJvZmlsZU1hcC5HZXRTdGFydFBvc2l0aW9uKCk7DQotICAgICAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICAgICAgQ1BERl9TdHJlYW0qIGlwS2V5Ow0KLSAgICAgICAgICAgIENQREZfQ291bnRlZE9iamVjdDxDUERGX0ljY1Byb2ZpbGUqPiogaXBEYXRhOw0KLSAgICAgICAgICAgIG1fSWNjUHJvZmlsZU1hcC5HZXROZXh0QXNzb2MocG9zLCBpcEtleSwgaXBEYXRhKTsNCi0gICAgICAgICAgICBuQ291bnQgPSBpcERhdGEtPm1fbkNvdW50Ow0KLSAgICAgICAgICAgIGlmIChiUmVsZWFzZSB8fCBuQ291bnQgPCAyKSB7DQotICAgICAgICAgICAgICAgIEZYX1BPU0lUSU9OIHBvczIgPSBtX0hhc2hQcm9maWxlTWFwLkdldFN0YXJ0UG9zaXRpb24oKTsNCi0gICAgICAgICAgICAgICAgd2hpbGUgKHBvczIpIHsNCi0gICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGJzS2V5Ow0KLSAgICAgICAgICAgICAgICAgICAgQ1BERl9TdHJlYW0qIHBGaW5kU3RyZWFtID0gTlVMTDsNCi0gICAgICAgICAgICAgICAgICAgIG1fSGFzaFByb2ZpbGVNYXAuR2V0TmV4dEFzc29jKHBvczIsIGJzS2V5LCAodm9pZComKXBGaW5kU3RyZWFtKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChpcEtleSA9PSBwRmluZFN0cmVhbSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fSGFzaFByb2ZpbGVNYXAuUmVtb3ZlS2V5KGJzS2V5KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBkZWxldGUgaXBEYXRhLT5tX09iajsNCi0gICAgICAgICAgICAgICAgZGVsZXRlIGlwRGF0YTsNCi0gICAgICAgICAgICAgICAgbV9JY2NQcm9maWxlTWFwLlJlbW92ZUtleShpcEtleSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHsNCi0gICAgICAgIHBvcyA9IG1fRm9udEZpbGVNYXAuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICAgICAgd2hpbGUgKHBvcykgew0KLSAgICAgICAgICAgIENQREZfU3RyZWFtKiBmdEtleTsNCi0gICAgICAgICAgICBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9TdHJlYW1BY2MqPiogZnREYXRhOw0KLSAgICAgICAgICAgIG1fRm9udEZpbGVNYXAuR2V0TmV4dEFzc29jKHBvcywgZnRLZXksIGZ0RGF0YSk7DQotICAgICAgICAgICAgbkNvdW50ID0gZnREYXRhLT5tX25Db3VudDsNCi0gICAgICAgICAgICBpZiAoYlJlbGVhc2UgfHwgbkNvdW50IDwgMikgew0KLSAgICAgICAgICAgICAgICBkZWxldGUgZnREYXRhLT5tX09iajsNCi0gICAgICAgICAgICAgICAgZGVsZXRlIGZ0RGF0YTsNCi0gICAgICAgICAgICAgICAgbV9Gb250RmlsZU1hcC5SZW1vdmVLZXkoZnRLZXkpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1DUERGX0ZvbnQqIENQREZfRG9jUGFnZURhdGE6OkdldEZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9udERpY3QsIEZYX0JPT0wgZmluZE9ubHkpDQotew0KLSAgICBpZiAoIXBGb250RGljdCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKGZpbmRPbmx5KSB7DQotICAgICAgICBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9Gb250Kj4qIGZvbnREYXRhOw0KLSAgICAgICAgaWYgKG1fRm9udE1hcC5Mb29rdXAocEZvbnREaWN0LCBmb250RGF0YSkpIHsNCi0gICAgICAgICAgICBpZiAoIWZvbnREYXRhLT5tX09iaikgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZm9udERhdGEtPm1fbkNvdW50ICsrOw0KLSAgICAgICAgICAgIHJldHVybiBmb250RGF0YS0+bV9PYmo7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9Gb250Kj4qIGZvbnREYXRhID0gTlVMTDsNCi0gICAgaWYgKG1fRm9udE1hcC5Mb29rdXAocEZvbnREaWN0LCBmb250RGF0YSkpIHsNCi0gICAgICAgIGlmIChmb250RGF0YS0+bV9PYmopIHsNCi0gICAgICAgICAgICBmb250RGF0YS0+bV9uQ291bnQgKys7DQotICAgICAgICAgICAgcmV0dXJuIGZvbnREYXRhLT5tX09iajsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBGWF9CT09MIGJOZXcgPSBGQUxTRTsNCi0gICAgaWYgKCFmb250RGF0YSkgew0KLSAgICAgICAgZm9udERhdGEgPSBGWF9ORVcgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfRm9udCo+Ow0KLSAgICAgICAgYk5ldyA9IFRSVUU7DQotICAgICAgICBpZiAoIWZvbnREYXRhKSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgQ1BERl9Gb250KiBwRm9udCA9IENQREZfRm9udDo6Q3JlYXRlRm9udEYobV9wUERGRG9jLCBwRm9udERpY3QpOw0KLSAgICBpZiAoIXBGb250KSB7DQotICAgICAgICBpZiAoYk5ldykgew0KLSAgICAgICAgICAgIGRlbGV0ZSBmb250RGF0YTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGZvbnREYXRhLT5tX25Db3VudCA9IDI7DQotICAgIGZvbnREYXRhLT5tX09iaiA9IHBGb250Ow0KLSAgICBtX0ZvbnRNYXAuU2V0QXQocEZvbnREaWN0LCBmb250RGF0YSk7DQotICAgIHJldHVybiBwRm9udDsNCi19DQotQ1BERl9Gb250KiBDUERGX0RvY1BhZ2VEYXRhOjpHZXRTdGFuZGFyZEZvbnQoRlhfQlNUUiBmb250TmFtZSwgQ1BERl9Gb250RW5jb2RpbmcqIHBFbmNvZGluZykNCi17DQotICAgIGlmIChmb250TmFtZS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fRm9udE1hcC5HZXRTdGFydFBvc2l0aW9uKCk7DQotICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgIENQREZfRGljdGlvbmFyeSogZm9udERpY3Q7DQotICAgICAgICBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9Gb250Kj4qIGZvbnREYXRhOw0KLSAgICAgICAgbV9Gb250TWFwLkdldE5leHRBc3NvYyhwb3MsIGZvbnREaWN0LCBmb250RGF0YSk7DQotICAgICAgICBDUERGX0ZvbnQqIHBGb250ID0gZm9udERhdGEtPm1fT2JqOw0KLSAgICAgICAgaWYgKCFwRm9udCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBGb250LT5HZXRCYXNlRm9udCgpICE9IGZvbnROYW1lKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAocEZvbnQtPklzRW1iZWRkZWQoKSkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBGb250LT5HZXRGb250VHlwZSgpICE9IFBERkZPTlRfVFlQRTEpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwRm9udC0+R2V0Rm9udERpY3QoKS0+S2V5RXhpc3QoRlhfQlNUUkMoIldpZHRocyIpKSkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1BERl9UeXBlMUZvbnQqIHBUMUZvbnQgPSBwRm9udC0+R2V0VHlwZTFGb250KCk7DQotICAgICAgICBpZiAocEVuY29kaW5nICYmICFwVDFGb250LT5HZXRFbmNvZGluZygpLT5Jc0lkZW50aWNhbChwRW5jb2RpbmcpKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBmb250RGF0YS0+bV9uQ291bnQgKys7DQotICAgICAgICByZXR1cm4gcEZvbnQ7DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7DQotICAgIHBEaWN0LT5TZXRBdE5hbWUoRlhfQlNUUkMoIlR5cGUiKSwgRlhfQlNUUkMoIkZvbnQiKSk7DQotICAgIHBEaWN0LT5TZXRBdE5hbWUoRlhfQlNUUkMoIlN1YnR5cGUiKSwgRlhfQlNUUkMoIlR5cGUxIikpOw0KLSAgICBwRGljdC0+U2V0QXROYW1lKEZYX0JTVFJDKCJCYXNlRm9udCIpLCBmb250TmFtZSk7DQotICAgIGlmIChwRW5jb2RpbmcpIHsNCi0gICAgICAgIHBEaWN0LT5TZXRBdChGWF9CU1RSQygiRW5jb2RpbmciKSwgcEVuY29kaW5nLT5SZWFsaXplKCkpOw0KLSAgICB9DQotICAgIG1fcFBERkRvYy0+QWRkSW5kaXJlY3RPYmplY3QocERpY3QpOw0KLSAgICBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9Gb250Kj4qIGZvbnREYXRhID0gRlhfTkVXIENQREZfQ291bnRlZE9iamVjdDxDUERGX0ZvbnQqPjsNCi0gICAgaWYgKCFmb250RGF0YSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9Gb250KiBwRm9udCA9IENQREZfRm9udDo6Q3JlYXRlRm9udEYobV9wUERGRG9jLCBwRGljdCk7DQotICAgIGlmICghcEZvbnQpIHsNCi0gICAgICAgIGRlbGV0ZSBmb250RGF0YTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGZvbnREYXRhLT5tX25Db3VudCA9IDI7DQotICAgIGZvbnREYXRhLT5tX09iaiA9IHBGb250Ow0KLSAgICBtX0ZvbnRNYXAuU2V0QXQocERpY3QsIGZvbnREYXRhKTsNCi0gICAgcmV0dXJuIHBGb250Ow0KLX0NCi12b2lkIENQREZfRG9jUGFnZURhdGE6OlJlbGVhc2VGb250KENQREZfRGljdGlvbmFyeSogcEZvbnREaWN0KQ0KLXsNCi0gICAgaWYgKCFwRm9udERpY3QpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9Gb250Kj4qIGZvbnREYXRhOw0KLSAgICBpZiAoIW1fRm9udE1hcC5Mb29rdXAocEZvbnREaWN0LCBmb250RGF0YSkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAoZm9udERhdGEtPm1fT2JqICYmIC0tZm9udERhdGEtPm1fbkNvdW50ID09IDApIHsNCi0gICAgICAgIGRlbGV0ZSBmb250RGF0YS0+bV9PYmo7DQotICAgICAgICBmb250RGF0YS0+bV9PYmogPSBOVUxMOw0KLSAgICB9DQotfQ0KLUNQREZfQ29sb3JTcGFjZSogQ1BERl9Eb2NQYWdlRGF0YTo6R2V0Q29sb3JTcGFjZShDUERGX09iamVjdCogcENTT2JqLCBDUERGX0RpY3Rpb25hcnkqIHBSZXNvdXJjZXMpDQotew0KLSAgICBpZiAoIXBDU09iaikgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKHBDU09iai0+R2V0VHlwZSgpID09IFBERk9CSl9OQU1FKSB7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyBuYW1lID0gcENTT2JqLT5HZXRDb25zdFN0cmluZygpOw0KLSAgICAgICAgQ1BERl9Db2xvclNwYWNlKiBwQ1MgPSBfQ1NGcm9tTmFtZShuYW1lKTsNCi0gICAgICAgIGlmICghcENTICYmIHBSZXNvdXJjZXMpIHsNCi0gICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBMaXN0ID0gcFJlc291cmNlcy0+R2V0RGljdChGWF9CU1RSQygiQ29sb3JTcGFjZSIpKTsNCi0gICAgICAgICAgICBpZiAocExpc3QpIHsNCi0gICAgICAgICAgICAgICAgcENTT2JqID0gcExpc3QtPkdldEVsZW1lbnRWYWx1ZShuYW1lKTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdldENvbG9yU3BhY2UocENTT2JqLCBOVUxMKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAocENTID09IE5VTEwgfHwgcFJlc291cmNlcyA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIHBDUzsNCi0gICAgICAgIH0NCi0gICAgICAgIENQREZfRGljdGlvbmFyeSogcENvbG9yU3BhY2VzID0gcFJlc291cmNlcy0+R2V0RGljdChGWF9CU1RSQygiQ29sb3JTcGFjZSIpKTsNCi0gICAgICAgIGlmIChwQ29sb3JTcGFjZXMgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiBwQ1M7DQotICAgICAgICB9DQotICAgICAgICBDUERGX09iamVjdCogcERlZmF1bHRDUyA9IE5VTEw7DQotICAgICAgICBzd2l0Y2ggKHBDUy0+R2V0RmFtaWx5KCkpIHsNCi0gICAgICAgICAgICBjYXNlIFBERkNTX0RFVklDRVJHQjoNCi0gICAgICAgICAgICAgICAgcERlZmF1bHRDUyA9IHBDb2xvclNwYWNlcy0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJEZWZhdWx0UkdCIikpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIFBERkNTX0RFVklDRUdSQVk6DQotICAgICAgICAgICAgICAgIHBEZWZhdWx0Q1MgPSBwQ29sb3JTcGFjZXMtPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiRGVmYXVsdEdyYXkiKSk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgUERGQ1NfREVWSUNFQ01ZSzoNCi0gICAgICAgICAgICAgICAgcERlZmF1bHRDUyA9IHBDb2xvclNwYWNlcy0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJEZWZhdWx0Q01ZSyIpKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBpZiAocERlZmF1bHRDUyA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIHBDUzsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBHZXRDb2xvclNwYWNlKHBEZWZhdWx0Q1MsIE5VTEwpOw0KLSAgICB9DQotICAgIGlmIChwQ1NPYmotPkdldFR5cGUoKSAhPSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfQXJyYXkqIHBBcnJheSA9IChDUERGX0FycmF5KilwQ1NPYmo7DQotICAgIGlmIChwQXJyYXktPkdldENvdW50KCkgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKHBBcnJheS0+R2V0Q291bnQoKSA9PSAxKSB7DQotICAgICAgICByZXR1cm4gR2V0Q29sb3JTcGFjZShwQXJyYXktPkdldEVsZW1lbnRWYWx1ZSgwKSwgcFJlc291cmNlcyk7DQotICAgIH0NCi0gICAgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfQ29sb3JTcGFjZSo+KiBjc0RhdGEgPSBOVUxMOw0KLSAgICBpZiAobV9Db2xvclNwYWNlTWFwLkxvb2t1cChwQ1NPYmosIGNzRGF0YSkpIHsNCi0gICAgICAgIGlmIChjc0RhdGEtPm1fT2JqKSB7DQotICAgICAgICAgICAgY3NEYXRhLT5tX25Db3VudCsrOw0KLSAgICAgICAgICAgIHJldHVybiBjc0RhdGEtPm1fT2JqOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIEZYX0JPT0wgYk5ldyA9IEZBTFNFOw0KLSAgICBpZiAoIWNzRGF0YSkgew0KLSAgICAgICAgY3NEYXRhID0gRlhfTkVXIENQREZfQ291bnRlZE9iamVjdDxDUERGX0NvbG9yU3BhY2UqPjsNCi0gICAgICAgIGlmICghY3NEYXRhKSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBiTmV3ID0gVFJVRTsNCi0gICAgfQ0KLSAgICBDUERGX0NvbG9yU3BhY2UqIHBDUyA9IENQREZfQ29sb3JTcGFjZTo6TG9hZChtX3BQREZEb2MsIHBBcnJheSk7DQotICAgIGlmICghcENTKSB7DQotICAgICAgICBpZiAoYk5ldykgew0KLSAgICAgICAgICAgIGRlbGV0ZSBjc0RhdGE7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBjc0RhdGEtPm1fbkNvdW50ID0gMjsNCi0gICAgY3NEYXRhLT5tX09iaiA9IHBDUzsNCi0gICAgbV9Db2xvclNwYWNlTWFwLlNldEF0KHBDU09iaiwgY3NEYXRhKTsNCi0gICAgcmV0dXJuIHBDUzsNCi19DQotQ1BERl9Db2xvclNwYWNlKiBDUERGX0RvY1BhZ2VEYXRhOjpHZXRDb3BpZWRDb2xvclNwYWNlKENQREZfT2JqZWN0KiBwQ1NPYmopDQotew0KLSAgICBpZiAoIXBDU09iaikgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfQ29sb3JTcGFjZSo+KiBjc0RhdGE7DQotICAgIGlmICghbV9Db2xvclNwYWNlTWFwLkxvb2t1cChwQ1NPYmosIGNzRGF0YSkpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmICghY3NEYXRhLT5tX09iaikgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgY3NEYXRhLT5tX25Db3VudCArKzsNCi0gICAgcmV0dXJuIGNzRGF0YS0+bV9PYmo7DQotfQ0KLXZvaWQgQ1BERl9Eb2NQYWdlRGF0YTo6UmVsZWFzZUNvbG9yU3BhY2UoQ1BERl9PYmplY3QqIHBDb2xvclNwYWNlKQ0KLXsNCi0gICAgaWYgKCFwQ29sb3JTcGFjZSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfQ291bnRlZE9iamVjdDxDUERGX0NvbG9yU3BhY2UqPiogY3NEYXRhOw0KLSAgICBpZiAoIW1fQ29sb3JTcGFjZU1hcC5Mb29rdXAocENvbG9yU3BhY2UsIGNzRGF0YSkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAoY3NEYXRhLT5tX09iaiAmJiAtLWNzRGF0YS0+bV9uQ291bnQgPT0gMCkgew0KLSAgICAgICAgY3NEYXRhLT5tX09iai0+UmVsZWFzZUNTKCk7DQotICAgICAgICBjc0RhdGEtPm1fT2JqID0gTlVMTDsNCi0gICAgfQ0KLX0NCi1DUERGX1BhdHRlcm4qIENQREZfRG9jUGFnZURhdGE6OkdldFBhdHRlcm4oQ1BERl9PYmplY3QqIHBQYXR0ZXJuT2JqLCBGWF9CT09MIGJTaGFkaW5nLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBtYXRyaXgpDQotew0KLSAgICBpZiAoIXBQYXR0ZXJuT2JqKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9QYXR0ZXJuKj4qIHB0RGF0YSA9IE5VTEw7DQotICAgIGlmIChtX1BhdHRlcm5NYXAuTG9va3VwKHBQYXR0ZXJuT2JqLCBwdERhdGEpKSB7DQotICAgICAgICBpZiAocHREYXRhLT5tX09iaikgew0KLSAgICAgICAgICAgIHB0RGF0YS0+bV9uQ291bnQrKzsNCi0gICAgICAgICAgICByZXR1cm4gcHREYXRhLT5tX09iajsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBGWF9CT09MIGJOZXcgPSBGQUxTRTsNCi0gICAgaWYgKCFwdERhdGEpIHsNCi0gICAgICAgIHB0RGF0YSA9IEZYX05FVyBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9QYXR0ZXJuKj47DQotICAgICAgICBiTmV3ID0gVFJVRTsNCi0gICAgICAgIGlmICghcHREYXRhKSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgQ1BERl9QYXR0ZXJuKiBwUGF0dGVybiA9IE5VTEw7DQotICAgIGlmIChiU2hhZGluZykgew0KLSAgICAgICAgcFBhdHRlcm4gPSBGWF9ORVcgQ1BERl9TaGFkaW5nUGF0dGVybihtX3BQREZEb2MsIHBQYXR0ZXJuT2JqLCBiU2hhZGluZywgbWF0cml4KTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSBwUGF0dGVybk9iai0+R2V0RGljdCgpOw0KLSAgICAgICAgaWYgKHBEaWN0KSB7DQotICAgICAgICAgICAgaW50IHR5cGUgPSBwRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiUGF0dGVyblR5cGUiKSk7DQotICAgICAgICAgICAgaWYgKHR5cGUgPT0gMSkgew0KLSAgICAgICAgICAgICAgICBwUGF0dGVybiA9IEZYX05FVyBDUERGX1RpbGluZ1BhdHRlcm4obV9wUERGRG9jLCBwUGF0dGVybk9iaiwgbWF0cml4KTsNCi0gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gMikgew0KLSAgICAgICAgICAgICAgICBwUGF0dGVybiA9IEZYX05FVyBDUERGX1NoYWRpbmdQYXR0ZXJuKG1fcFBERkRvYywgcFBhdHRlcm5PYmosIEZBTFNFLCBtYXRyaXgpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoIXBQYXR0ZXJuKSB7DQotICAgICAgICBpZiAoYk5ldykgew0KLSAgICAgICAgICAgIGRlbGV0ZSBwdERhdGE7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBwdERhdGEtPm1fbkNvdW50ID0gMjsNCi0gICAgcHREYXRhLT5tX09iaiA9IHBQYXR0ZXJuOw0KLSAgICBtX1BhdHRlcm5NYXAuU2V0QXQocFBhdHRlcm5PYmosIHB0RGF0YSk7DQotICAgIHJldHVybiBwUGF0dGVybjsNCi19DQotdm9pZCBDUERGX0RvY1BhZ2VEYXRhOjpSZWxlYXNlUGF0dGVybihDUERGX09iamVjdCogcFBhdHRlcm5PYmopDQotew0KLSAgICBpZiAoIXBQYXR0ZXJuT2JqKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfUGF0dGVybio+KiBwdERhdGE7DQotICAgIGlmICghbV9QYXR0ZXJuTWFwLkxvb2t1cChwUGF0dGVybk9iaiwgcHREYXRhKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChwdERhdGEtPm1fT2JqICYmIC0tcHREYXRhLT5tX25Db3VudCA9PSAwKSB7DQotICAgICAgICBkZWxldGUgcHREYXRhLT5tX09iajsNCi0gICAgICAgIHB0RGF0YS0+bV9PYmogPSBOVUxMOw0KLSAgICB9DQotfQ0KLUNQREZfSW1hZ2UqIENQREZfRG9jUGFnZURhdGE6OkdldEltYWdlKENQREZfT2JqZWN0KiBwSW1hZ2VTdHJlYW0pDQotew0KLSAgICBpZiAoIXBJbWFnZVN0cmVhbSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgRlhfRFdPUkQgZHdJbWFnZU9iak51bSA9IHBJbWFnZVN0cmVhbS0+R2V0T2JqTnVtKCk7DQotICAgIENQREZfQ291bnRlZE9iamVjdDxDUERGX0ltYWdlKj4qIGltYWdlRGF0YTsNCi0gICAgaWYgKG1fSW1hZ2VNYXAuTG9va3VwKGR3SW1hZ2VPYmpOdW0sIGltYWdlRGF0YSkpIHsNCi0gICAgICAgIGltYWdlRGF0YS0+bV9uQ291bnQgKys7DQotICAgICAgICByZXR1cm4gaW1hZ2VEYXRhLT5tX09iajsNCi0gICAgfQ0KLSAgICBpbWFnZURhdGEgPSBGWF9ORVcgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfSW1hZ2UqPjsNCi0gICAgaWYgKCFpbWFnZURhdGEpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfSW1hZ2UqIHBJbWFnZSA9IEZYX05FVyBDUERGX0ltYWdlKG1fcFBERkRvYyk7DQotICAgIGlmICghcEltYWdlKSB7DQotICAgICAgICBkZWxldGUgaW1hZ2VEYXRhOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcEltYWdlLT5Mb2FkSW1hZ2VGKChDUERGX1N0cmVhbSopcEltYWdlU3RyZWFtLCBGQUxTRSk7DQotICAgIGltYWdlRGF0YS0+bV9uQ291bnQgPSAyOw0KLSAgICBpbWFnZURhdGEtPm1fT2JqID0gcEltYWdlOw0KLSAgICBtX0ltYWdlTWFwLlNldEF0KGR3SW1hZ2VPYmpOdW0sIGltYWdlRGF0YSk7DQotICAgIHJldHVybiBwSW1hZ2U7DQotfQ0KLXZvaWQgQ1BERl9Eb2NQYWdlRGF0YTo6UmVsZWFzZUltYWdlKENQREZfT2JqZWN0KiBwSW1hZ2VTdHJlYW0pDQotew0KLSAgICBpZiAoIXBJbWFnZVN0cmVhbSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIFBERl9Eb2NQYWdlRGF0YV9SZWxlYXNlPEZYX0RXT1JELCBDUERGX0ltYWdlKj4obV9JbWFnZU1hcCwgcEltYWdlU3RyZWFtLT5HZXRPYmpOdW0oKSwgTlVMTCk7DQotfQ0KLUNQREZfSWNjUHJvZmlsZSogQ1BERl9Eb2NQYWdlRGF0YTo6R2V0SWNjUHJvZmlsZShDUERGX1N0cmVhbSogcEljY1Byb2ZpbGVTdHJlYW0sIEZYX0lOVDMyIG5Db21wb25lbnRzKQ0KLXsNCi0gICAgaWYgKCFwSWNjUHJvZmlsZVN0cmVhbSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfSWNjUHJvZmlsZSo+KiBpcERhdGEgPSBOVUxMOw0KLSAgICBpZiAobV9JY2NQcm9maWxlTWFwLkxvb2t1cChwSWNjUHJvZmlsZVN0cmVhbSwgaXBEYXRhKSkgew0KLSAgICAgICAgaXBEYXRhLT5tX25Db3VudCsrOw0KLSAgICAgICAgcmV0dXJuIGlwRGF0YS0+bV9PYmo7DQotICAgIH0NCi0gICAgQ1BERl9TdHJlYW1BY2Mgc3RyZWFtOw0KLSAgICBzdHJlYW0uTG9hZEFsbERhdGEocEljY1Byb2ZpbGVTdHJlYW0sIEZBTFNFKTsNCi0gICAgRlhfQllURSBkaWdlc3RbMjBdOw0KLSAgICBDUERGX1N0cmVhbSogcENvcGllZFN0cmVhbSA9IE5VTEw7DQotICAgIENSWVBUX1NIQTFHZW5lcmF0ZShzdHJlYW0uR2V0RGF0YSgpLCBzdHJlYW0uR2V0U2l6ZSgpLCBkaWdlc3QpOw0KLSAgICBpZiAobV9IYXNoUHJvZmlsZU1hcC5Mb29rdXAoQ0ZYX0J5dGVTdHJpbmdDKGRpZ2VzdCwgMjApLCAodm9pZComKXBDb3BpZWRTdHJlYW0pKSB7DQotICAgICAgICBtX0ljY1Byb2ZpbGVNYXAuTG9va3VwKHBDb3BpZWRTdHJlYW0sIGlwRGF0YSk7DQotICAgICAgICBpcERhdGEtPm1fbkNvdW50Kys7DQotICAgICAgICByZXR1cm4gaXBEYXRhLT5tX09iajsNCi0gICAgfQ0KLSAgICBDUERGX0ljY1Byb2ZpbGUqIHBQcm9maWxlID0gRlhfTkVXIENQREZfSWNjUHJvZmlsZShzdHJlYW0uR2V0RGF0YSgpLCBzdHJlYW0uR2V0U2l6ZSgpLCBuQ29tcG9uZW50cyk7DQotICAgIGlmICghcFByb2ZpbGUpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlwRGF0YSA9IEZYX05FVyBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9JY2NQcm9maWxlKj47DQotICAgIGlmICghaXBEYXRhKSB7DQotICAgICAgICBkZWxldGUgcFByb2ZpbGU7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpcERhdGEtPm1fbkNvdW50ID0gMjsNCi0gICAgaXBEYXRhLT5tX09iaiA9IHBQcm9maWxlOw0KLSAgICBtX0ljY1Byb2ZpbGVNYXAuU2V0QXQocEljY1Byb2ZpbGVTdHJlYW0sIGlwRGF0YSk7DQotICAgIG1fSGFzaFByb2ZpbGVNYXAuU2V0QXQoQ0ZYX0J5dGVTdHJpbmdDKGRpZ2VzdCwgMjApLCBwSWNjUHJvZmlsZVN0cmVhbSk7DQotICAgIHJldHVybiBwUHJvZmlsZTsNCi19DQotdm9pZCBDUERGX0RvY1BhZ2VEYXRhOjpSZWxlYXNlSWNjUHJvZmlsZShDUERGX1N0cmVhbSogcEljY1Byb2ZpbGVTdHJlYW0sIENQREZfSWNjUHJvZmlsZSogcEljY1Byb2ZpbGUpDQotew0KLSAgICBpZiAoIXBJY2NQcm9maWxlU3RyZWFtICYmICFwSWNjUHJvZmlsZSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfQ291bnRlZE9iamVjdDxDUERGX0ljY1Byb2ZpbGUqPiogaXBEYXRhID0gTlVMTDsNCi0gICAgaWYgKG1fSWNjUHJvZmlsZU1hcC5Mb29rdXAocEljY1Byb2ZpbGVTdHJlYW0sIGlwRGF0YSkgJiYgaXBEYXRhLT5tX25Db3VudCA8IDIpIHsNCi0gICAgICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fSGFzaFByb2ZpbGVNYXAuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICAgICAgd2hpbGUgKHBvcykgew0KLSAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGtleTsNCi0gICAgICAgICAgICBDUERGX1N0cmVhbSogcEZpbmRTdHJlYW0gPSBOVUxMOw0KLSAgICAgICAgICAgIG1fSGFzaFByb2ZpbGVNYXAuR2V0TmV4dEFzc29jKHBvcywga2V5LCAodm9pZComKXBGaW5kU3RyZWFtKTsNCi0gICAgICAgICAgICBpZiAocEljY1Byb2ZpbGVTdHJlYW0gPT0gcEZpbmRTdHJlYW0pIHsNCi0gICAgICAgICAgICAgICAgbV9IYXNoUHJvZmlsZU1hcC5SZW1vdmVLZXkoa2V5KTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIFBERl9Eb2NQYWdlRGF0YV9SZWxlYXNlPENQREZfU3RyZWFtKiwgQ1BERl9JY2NQcm9maWxlKj4obV9JY2NQcm9maWxlTWFwLCBwSWNjUHJvZmlsZVN0cmVhbSwgcEljY1Byb2ZpbGUpOw0KLX0NCi1DUERGX1N0cmVhbUFjYyogQ1BERl9Eb2NQYWdlRGF0YTo6R2V0Rm9udEZpbGVTdHJlYW1BY2MoQ1BERl9TdHJlYW0qIHBGb250U3RyZWFtKQ0KLXsNCi0gICAgaWYgKCFwRm9udFN0cmVhbSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfU3RyZWFtQWNjKj4qIGZ0RGF0YTsNCi0gICAgaWYgKG1fRm9udEZpbGVNYXAuTG9va3VwKHBGb250U3RyZWFtLCBmdERhdGEpKSB7DQotICAgICAgICBmdERhdGEtPm1fbkNvdW50ICsrOw0KLSAgICAgICAgcmV0dXJuIGZ0RGF0YS0+bV9PYmo7DQotICAgIH0NCi0gICAgZnREYXRhID0gRlhfTkVXIENQREZfQ291bnRlZE9iamVjdDxDUERGX1N0cmVhbUFjYyo+Ow0KLSAgICBpZiAoIWZ0RGF0YSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9TdHJlYW1BY2MqIHBGb250RmlsZSA9IEZYX05FVyBDUERGX1N0cmVhbUFjYzsNCi0gICAgaWYgKCFwRm9udEZpbGUpIHsNCi0gICAgICAgIGRlbGV0ZSBmdERhdGE7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBGb250RGljdCA9IHBGb250U3RyZWFtLT5HZXREaWN0KCk7DQotICAgIEZYX0lOVDMyIG9yZ19zaXplID0gcEZvbnREaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJMZW5ndGgxIikpICsgcEZvbnREaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJMZW5ndGgyIikpICsgcEZvbnREaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJMZW5ndGgzIikpOw0KLSAgICBpZiAob3JnX3NpemUgPCAwKSB7DQotICAgICAgICBvcmdfc2l6ZSA9IDA7DQotICAgIH0NCi0gICAgcEZvbnRGaWxlLT5Mb2FkQWxsRGF0YShwRm9udFN0cmVhbSwgRkFMU0UsIG9yZ19zaXplKTsNCi0gICAgZnREYXRhLT5tX25Db3VudCA9IDI7DQotICAgIGZ0RGF0YS0+bV9PYmogPSBwRm9udEZpbGU7DQotICAgIG1fRm9udEZpbGVNYXAuU2V0QXQocEZvbnRTdHJlYW0sIGZ0RGF0YSk7DQotICAgIHJldHVybiBwRm9udEZpbGU7DQotfQ0KLXZvaWQgQ1BERl9Eb2NQYWdlRGF0YTo6UmVsZWFzZUZvbnRGaWxlU3RyZWFtQWNjKENQREZfU3RyZWFtKiBwRm9udFN0cmVhbSwgRlhfQk9PTCBiRm9yY2UpDQotew0KLSAgICBpZiAoIXBGb250U3RyZWFtKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgUERGX0RvY1BhZ2VEYXRhX1JlbGVhc2U8Q1BERl9TdHJlYW0qLCBDUERGX1N0cmVhbUFjYyo+KG1fRm9udEZpbGVNYXAsIHBGb250U3RyZWFtLCBOVUxMLCBiRm9yY2UpOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX21vZHVsZS5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZmRybS9meF9jcnlwdC5oIgorI2luY2x1ZGUgIi4uL2ZwZGZfZm9udC9mb250X2ludC5oIgorI2luY2x1ZGUgInBhZ2VpbnQuaCIKK2NsYXNzIENQREZfUGFnZU1vZHVsZSA6IHB1YmxpYyBDUERGX1BhZ2VNb2R1bGVEZWYKK3sKK3B1YmxpYzoKKyAgICBDUERGX1BhZ2VNb2R1bGUoKSA6IG1fU3RvY2tHcmF5Q1MoUERGQ1NfREVWSUNFR1JBWSksIG1fU3RvY2tSR0JDUyhQREZDU19ERVZJQ0VSR0IpLAorICAgICAgICBtX1N0b2NrQ01ZS0NTKFBERkNTX0RFVklDRUNNWUspIHt9CisgICAgdmlydHVhbCB+Q1BERl9QYWdlTW9kdWxlKCkge30KKyAgICB2aXJ0dWFsIEZYX0JPT0wJCUluc3RhbGxlZCgpCisgICAgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgdmlydHVhbCBDUERGX0RvY1BhZ2VEYXRhKglDcmVhdGVEb2NEYXRhKENQREZfRG9jdW1lbnQqIHBEb2MpCisgICAgeworICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfRG9jUGFnZURhdGEocERvYyk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZAkJUmVsZWFzZURvYyhDUERGX0RvY3VtZW50KiBwRG9jKTsKKyAgICB2aXJ0dWFsIHZvaWQJCUNsZWFyRG9jKENQREZfRG9jdW1lbnQqIHBEb2MpOworICAgIHZpcnR1YWwgQ1BERl9Gb250R2xvYmFscyoJR2V0Rm9udEdsb2JhbHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZtX0ZvbnRHbG9iYWxzOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQJCQkJQ2xlYXJTdG9ja0ZvbnQoQ1BERl9Eb2N1bWVudCogcERvYykKKyAgICB7CisgICAgICAgIG1fRm9udEdsb2JhbHMuQ2xlYXIocERvYyk7CisgICAgfQorICAgIHZpcnR1YWwgQ1BERl9Db2xvclNwYWNlKglHZXRTdG9ja0NTKGludCBmYW1pbHkpOworICAgIHZpcnR1YWwgdm9pZAkJTm90aWZ5Q0pLQXZhaWxhYmxlKCk7CisgICAgQ1BERl9Gb250R2xvYmFscwltX0ZvbnRHbG9iYWxzOworICAgIENQREZfRGV2aWNlQ1MJCW1fU3RvY2tHcmF5Q1M7CisgICAgQ1BERl9EZXZpY2VDUwkJbV9TdG9ja1JHQkNTOworICAgIENQREZfRGV2aWNlQ1MJCW1fU3RvY2tDTVlLQ1M7CisgICAgQ1BERl9QYXR0ZXJuQ1MJCW1fU3RvY2tQYXR0ZXJuQ1M7Cit9OworQ1BERl9Db2xvclNwYWNlKiBDUERGX1BhZ2VNb2R1bGU6OkdldFN0b2NrQ1MoaW50IGZhbWlseSkKK3sKKyAgICBpZiAoZmFtaWx5ID09IFBERkNTX0RFVklDRUdSQVkpIHsKKyAgICAgICAgcmV0dXJuICZtX1N0b2NrR3JheUNTOworICAgIH0KKyAgICBpZiAoZmFtaWx5ID09IFBERkNTX0RFVklDRVJHQikgeworICAgICAgICByZXR1cm4gJm1fU3RvY2tSR0JDUzsKKyAgICB9CisgICAgaWYgKGZhbWlseSA9PSBQREZDU19ERVZJQ0VDTVlLKSB7CisgICAgICAgIHJldHVybiAmbV9TdG9ja0NNWUtDUzsKKyAgICB9CisgICAgaWYgKGZhbWlseSA9PSBQREZDU19QQVRURVJOKSB7CisgICAgICAgIHJldHVybiAmbV9TdG9ja1BhdHRlcm5DUzsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9Cit2b2lkIENQREZfTW9kdWxlTWdyOjpJbml0UGFnZU1vZHVsZSgpCit7CisgICAgaWYgKG1fcFBhZ2VNb2R1bGUpIHsKKyAgICAgICAgZGVsZXRlIG1fcFBhZ2VNb2R1bGU7CisgICAgfQorICAgIENQREZfUGFnZU1vZHVsZSogcFBhZ2VNb2R1bGUgPSBGWF9ORVcgQ1BERl9QYWdlTW9kdWxlOworICAgIG1fcFBhZ2VNb2R1bGUgPSBwUGFnZU1vZHVsZTsKK30KK3ZvaWQgQ1BERl9QYWdlTW9kdWxlOjpSZWxlYXNlRG9jKENQREZfRG9jdW1lbnQqIHBEb2MpCit7CisgICAgZGVsZXRlIHBEb2MtPkdldFBhZ2VEYXRhKCk7Cit9Cit2b2lkIENQREZfUGFnZU1vZHVsZTo6Q2xlYXJEb2MoQ1BERl9Eb2N1bWVudCogcERvYykKK3sKKyAgICBwRG9jLT5HZXRQYWdlRGF0YSgpLT5DbGVhcihGQUxTRSk7Cit9Cit2b2lkIENQREZfUGFnZU1vZHVsZTo6Tm90aWZ5Q0pLQXZhaWxhYmxlKCkKK3sKKyAgICBtX0ZvbnRHbG9iYWxzLm1fQ01hcE1hbmFnZXIuUmVsb2FkQWxsKCk7Cit9CitDUERGX0ZvbnQqIENQREZfRG9jdW1lbnQ6OkxvYWRGb250KENQREZfRGljdGlvbmFyeSogcEZvbnREaWN0KQoreworICAgIGlmICghcEZvbnREaWN0KSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gR2V0VmFsaWRhdGVQYWdlRGF0YSgpLT5HZXRGb250KHBGb250RGljdCwgRkFMU0UpOworfQorQ1BERl9Gb250KiBDUERGX0RvY3VtZW50OjpGaW5kRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb250RGljdCkKK3sKKyAgICBpZiAoIXBGb250RGljdCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIEdldFZhbGlkYXRlUGFnZURhdGEoKS0+R2V0Rm9udChwRm9udERpY3QsIFRSVUUpOworfQorQ1BERl9TdHJlYW1BY2MqIENQREZfRG9jdW1lbnQ6OkxvYWRGb250RmlsZShDUERGX1N0cmVhbSogcFN0cmVhbSkKK3sKKyAgICBpZiAocFN0cmVhbSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gR2V0VmFsaWRhdGVQYWdlRGF0YSgpLT5HZXRGb250RmlsZVN0cmVhbUFjYyhwU3RyZWFtKTsKK30KK0NQREZfQ29sb3JTcGFjZSogX0NTRnJvbU5hbWUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUpOworQ1BERl9Db2xvclNwYWNlKiBDUERGX0RvY3VtZW50OjpMb2FkQ29sb3JTcGFjZShDUERGX09iamVjdCogcENTT2JqLCBDUERGX0RpY3Rpb25hcnkqIHBSZXNvdXJjZXMpCit7CisgICAgcmV0dXJuIEdldFZhbGlkYXRlUGFnZURhdGEoKS0+R2V0Q29sb3JTcGFjZShwQ1NPYmosIHBSZXNvdXJjZXMpOworfQorQ1BERl9QYXR0ZXJuKiBDUERGX0RvY3VtZW50OjpMb2FkUGF0dGVybihDUERGX09iamVjdCogcFBhdHRlcm5PYmosIEZYX0JPT0wgYlNoYWRpbmcsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIG1hdHJpeCkKK3sKKyAgICByZXR1cm4gR2V0VmFsaWRhdGVQYWdlRGF0YSgpLT5HZXRQYXR0ZXJuKHBQYXR0ZXJuT2JqLCBiU2hhZGluZywgbWF0cml4KTsKK30KK0NQREZfSWNjUHJvZmlsZSogQ1BERl9Eb2N1bWVudDo6TG9hZEljY1Byb2ZpbGUoQ1BERl9TdHJlYW0qIHBTdHJlYW0sIGludCBuQ29tcG9uZW50cykKK3sKKyAgICByZXR1cm4gR2V0VmFsaWRhdGVQYWdlRGF0YSgpLT5HZXRJY2NQcm9maWxlKHBTdHJlYW0sIG5Db21wb25lbnRzKTsKK30KK0NQREZfSW1hZ2UqIENQREZfRG9jdW1lbnQ6OkxvYWRJbWFnZUYoQ1BERl9PYmplY3QqIHBPYmopCit7CisgICAgaWYgKCFwT2JqKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBGWFNZU19hc3NlcnQocE9iai0+R2V0T2JqTnVtKCkpOworICAgIHJldHVybiBHZXRWYWxpZGF0ZVBhZ2VEYXRhKCktPkdldEltYWdlKHBPYmopOworfQordm9pZCBDUERGX0RvY3VtZW50OjpSZW1vdmVDb2xvclNwYWNlRnJvbVBhZ2VEYXRhKENQREZfT2JqZWN0KiBwQ1NPYmopCit7CisgICAgaWYgKCFwQ1NPYmopIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBHZXRQYWdlRGF0YSgpLT5SZWxlYXNlQ29sb3JTcGFjZShwQ1NPYmopOworfQorQ1BERl9Eb2NQYWdlRGF0YTo6Q1BERl9Eb2NQYWdlRGF0YShDUERGX0RvY3VtZW50ICpwUERGRG9jKQorICAgIDogbV9wUERGRG9jKHBQREZEb2MpCisgICAgLCBtX0ZvbnRNYXAoKQorICAgICwgbV9Db2xvclNwYWNlTWFwKCkKKyAgICAsIG1fUGF0dGVybk1hcCgpCisgICAgLCBtX0ltYWdlTWFwKCkKKyAgICAsIG1fSWNjUHJvZmlsZU1hcCgpCisgICAgLCBtX0ZvbnRGaWxlTWFwKCkKK3sKKyAgICBtX0ZvbnRNYXAuSW5pdEhhc2hUYWJsZSg2NCk7CisgICAgbV9Db2xvclNwYWNlTWFwLkluaXRIYXNoVGFibGUoMzIpOworICAgIG1fUGF0dGVybk1hcC5Jbml0SGFzaFRhYmxlKDE2KTsKKyAgICBtX0ltYWdlTWFwLkluaXRIYXNoVGFibGUoNjQpOworICAgIG1fSWNjUHJvZmlsZU1hcC5Jbml0SGFzaFRhYmxlKDE2KTsKKyAgICBtX0ZvbnRGaWxlTWFwLkluaXRIYXNoVGFibGUoMzIpOworfQorQ1BERl9Eb2NQYWdlRGF0YTo6fkNQREZfRG9jUGFnZURhdGEoKQoreworICAgIENsZWFyKEZBTFNFKTsKKyAgICBDbGVhcihUUlVFKTsKKyAgICBGWF9QT1NJVElPTiBwb3MgPSBOVUxMOworfQordm9pZCBDUERGX0RvY1BhZ2VEYXRhOjpDbGVhcihGWF9CT09MIGJSZWxlYXNlKQoreworICAgIEZYX1BPU0lUSU9OIHBvczsKKyAgICBGWF9EV09SRAluQ291bnQ7CisgICAgeworICAgICAgICBwb3MgPSBtX1BhdHRlcm5NYXAuR2V0U3RhcnRQb3NpdGlvbigpOworICAgICAgICB3aGlsZSAocG9zKSB7CisgICAgICAgICAgICBDUERGX09iamVjdCogcHRPYmo7CisgICAgICAgICAgICBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9QYXR0ZXJuKj4qIHB0RGF0YTsKKyAgICAgICAgICAgIG1fUGF0dGVybk1hcC5HZXROZXh0QXNzb2MocG9zLCBwdE9iaiwgcHREYXRhKTsKKyAgICAgICAgICAgIG5Db3VudCA9IHB0RGF0YS0+bV9uQ291bnQ7CisgICAgICAgICAgICBpZiAoYlJlbGVhc2UgfHwgbkNvdW50IDwgMikgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBwdERhdGEtPm1fT2JqOworICAgICAgICAgICAgICAgIHB0RGF0YS0+bV9PYmogPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHsKKyAgICAgICAgcG9zID0gbV9Gb250TWFwLkdldFN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgd2hpbGUgKHBvcykgeworICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBmb250RGljdDsKKyAgICAgICAgICAgIENQREZfQ291bnRlZE9iamVjdDxDUERGX0ZvbnQqPiogZm9udERhdGE7CisgICAgICAgICAgICBtX0ZvbnRNYXAuR2V0TmV4dEFzc29jKHBvcywgZm9udERpY3QsIGZvbnREYXRhKTsKKyAgICAgICAgICAgIG5Db3VudCA9IGZvbnREYXRhLT5tX25Db3VudDsKKyAgICAgICAgICAgIGlmIChiUmVsZWFzZSB8fCBuQ291bnQgPCAyKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIGZvbnREYXRhLT5tX09iajsKKyAgICAgICAgICAgICAgICBmb250RGF0YS0+bV9PYmogPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHsKKyAgICAgICAgcG9zID0gbV9JbWFnZU1hcC5HZXRTdGFydFBvc2l0aW9uKCk7CisgICAgICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgICAgIEZYX0RXT1JEIG9iak51bTsKKyAgICAgICAgICAgIENQREZfQ291bnRlZE9iamVjdDxDUERGX0ltYWdlKj4qIGltYWdlRGF0YTsKKyAgICAgICAgICAgIG1fSW1hZ2VNYXAuR2V0TmV4dEFzc29jKHBvcywgb2JqTnVtLCBpbWFnZURhdGEpOworICAgICAgICAgICAgbkNvdW50ID0gaW1hZ2VEYXRhLT5tX25Db3VudDsKKyAgICAgICAgICAgIGlmIChiUmVsZWFzZSB8fCBuQ291bnQgPCAyKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIGltYWdlRGF0YS0+bV9PYmo7CisgICAgICAgICAgICAgICAgZGVsZXRlIGltYWdlRGF0YTsKKyAgICAgICAgICAgICAgICBtX0ltYWdlTWFwLlJlbW92ZUtleShvYmpOdW0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHsKKyAgICAgICAgcG9zID0gbV9Db2xvclNwYWNlTWFwLkdldFN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgd2hpbGUgKHBvcykgeworICAgICAgICAgICAgQ1BERl9PYmplY3QqIGNzS2V5OworICAgICAgICAgICAgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfQ29sb3JTcGFjZSo+KiBjc0RhdGE7CisgICAgICAgICAgICBtX0NvbG9yU3BhY2VNYXAuR2V0TmV4dEFzc29jKHBvcywgY3NLZXksIGNzRGF0YSk7CisgICAgICAgICAgICBuQ291bnQgPSBjc0RhdGEtPm1fbkNvdW50OworICAgICAgICAgICAgaWYgKGJSZWxlYXNlIHx8IG5Db3VudCA8IDIpIHsKKyAgICAgICAgICAgICAgICBjc0RhdGEtPm1fT2JqLT5SZWxlYXNlQ1MoKTsKKyAgICAgICAgICAgICAgICBjc0RhdGEtPm1fT2JqID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB7CisgICAgICAgIHBvcyA9IG1fSWNjUHJvZmlsZU1hcC5HZXRTdGFydFBvc2l0aW9uKCk7CisgICAgICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgICAgIENQREZfU3RyZWFtKiBpcEtleTsKKyAgICAgICAgICAgIENQREZfQ291bnRlZE9iamVjdDxDUERGX0ljY1Byb2ZpbGUqPiogaXBEYXRhOworICAgICAgICAgICAgbV9JY2NQcm9maWxlTWFwLkdldE5leHRBc3NvYyhwb3MsIGlwS2V5LCBpcERhdGEpOworICAgICAgICAgICAgbkNvdW50ID0gaXBEYXRhLT5tX25Db3VudDsKKyAgICAgICAgICAgIGlmIChiUmVsZWFzZSB8fCBuQ291bnQgPCAyKSB7CisgICAgICAgICAgICAgICAgRlhfUE9TSVRJT04gcG9zMiA9IG1fSGFzaFByb2ZpbGVNYXAuR2V0U3RhcnRQb3NpdGlvbigpOworICAgICAgICAgICAgICAgIHdoaWxlIChwb3MyKSB7CisgICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGJzS2V5OworICAgICAgICAgICAgICAgICAgICBDUERGX1N0cmVhbSogcEZpbmRTdHJlYW0gPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBtX0hhc2hQcm9maWxlTWFwLkdldE5leHRBc3NvYyhwb3MyLCBic0tleSwgKHZvaWQqJilwRmluZFN0cmVhbSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpcEtleSA9PSBwRmluZFN0cmVhbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9IYXNoUHJvZmlsZU1hcC5SZW1vdmVLZXkoYnNLZXkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVsZXRlIGlwRGF0YS0+bV9PYmo7CisgICAgICAgICAgICAgICAgZGVsZXRlIGlwRGF0YTsKKyAgICAgICAgICAgICAgICBtX0ljY1Byb2ZpbGVNYXAuUmVtb3ZlS2V5KGlwS2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB7CisgICAgICAgIHBvcyA9IG1fRm9udEZpbGVNYXAuR2V0U3RhcnRQb3NpdGlvbigpOworICAgICAgICB3aGlsZSAocG9zKSB7CisgICAgICAgICAgICBDUERGX1N0cmVhbSogZnRLZXk7CisgICAgICAgICAgICBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9TdHJlYW1BY2MqPiogZnREYXRhOworICAgICAgICAgICAgbV9Gb250RmlsZU1hcC5HZXROZXh0QXNzb2MocG9zLCBmdEtleSwgZnREYXRhKTsKKyAgICAgICAgICAgIG5Db3VudCA9IGZ0RGF0YS0+bV9uQ291bnQ7CisgICAgICAgICAgICBpZiAoYlJlbGVhc2UgfHwgbkNvdW50IDwgMikgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBmdERhdGEtPm1fT2JqOworICAgICAgICAgICAgICAgIGRlbGV0ZSBmdERhdGE7CisgICAgICAgICAgICAgICAgbV9Gb250RmlsZU1hcC5SZW1vdmVLZXkoZnRLZXkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorQ1BERl9Gb250KiBDUERGX0RvY1BhZ2VEYXRhOjpHZXRGb250KENQREZfRGljdGlvbmFyeSogcEZvbnREaWN0LCBGWF9CT09MIGZpbmRPbmx5KQoreworICAgIGlmICghcEZvbnREaWN0KSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoZmluZE9ubHkpIHsKKyAgICAgICAgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfRm9udCo+KiBmb250RGF0YTsKKyAgICAgICAgaWYgKG1fRm9udE1hcC5Mb29rdXAocEZvbnREaWN0LCBmb250RGF0YSkpIHsKKyAgICAgICAgICAgIGlmICghZm9udERhdGEtPm1fT2JqKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb250RGF0YS0+bV9uQ291bnQgKys7CisgICAgICAgICAgICByZXR1cm4gZm9udERhdGEtPm1fT2JqOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9Gb250Kj4qIGZvbnREYXRhID0gTlVMTDsKKyAgICBpZiAobV9Gb250TWFwLkxvb2t1cChwRm9udERpY3QsIGZvbnREYXRhKSkgeworICAgICAgICBpZiAoZm9udERhdGEtPm1fT2JqKSB7CisgICAgICAgICAgICBmb250RGF0YS0+bV9uQ291bnQgKys7CisgICAgICAgICAgICByZXR1cm4gZm9udERhdGEtPm1fT2JqOworICAgICAgICB9CisgICAgfQorICAgIEZYX0JPT0wgYk5ldyA9IEZBTFNFOworICAgIGlmICghZm9udERhdGEpIHsKKyAgICAgICAgZm9udERhdGEgPSBGWF9ORVcgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfRm9udCo+OworICAgICAgICBiTmV3ID0gVFJVRTsKKyAgICAgICAgaWYgKCFmb250RGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgQ1BERl9Gb250KiBwRm9udCA9IENQREZfRm9udDo6Q3JlYXRlRm9udEYobV9wUERGRG9jLCBwRm9udERpY3QpOworICAgIGlmICghcEZvbnQpIHsKKyAgICAgICAgaWYgKGJOZXcpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBmb250RGF0YTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZm9udERhdGEtPm1fbkNvdW50ID0gMjsKKyAgICBmb250RGF0YS0+bV9PYmogPSBwRm9udDsKKyAgICBtX0ZvbnRNYXAuU2V0QXQocEZvbnREaWN0LCBmb250RGF0YSk7CisgICAgcmV0dXJuIHBGb250OworfQorQ1BERl9Gb250KiBDUERGX0RvY1BhZ2VEYXRhOjpHZXRTdGFuZGFyZEZvbnQoRlhfQlNUUiBmb250TmFtZSwgQ1BERl9Gb250RW5jb2RpbmcqIHBFbmNvZGluZykKK3sKKyAgICBpZiAoZm9udE5hbWUuSXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBGWF9QT1NJVElPTiBwb3MgPSBtX0ZvbnRNYXAuR2V0U3RhcnRQb3NpdGlvbigpOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBmb250RGljdDsKKyAgICAgICAgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfRm9udCo+KiBmb250RGF0YTsKKyAgICAgICAgbV9Gb250TWFwLkdldE5leHRBc3NvYyhwb3MsIGZvbnREaWN0LCBmb250RGF0YSk7CisgICAgICAgIENQREZfRm9udCogcEZvbnQgPSBmb250RGF0YS0+bV9PYmo7CisgICAgICAgIGlmICghcEZvbnQpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChwRm9udC0+R2V0QmFzZUZvbnQoKSAhPSBmb250TmFtZSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBGb250LT5Jc0VtYmVkZGVkKCkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChwRm9udC0+R2V0Rm9udFR5cGUoKSAhPSBQREZGT05UX1RZUEUxKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocEZvbnQtPkdldEZvbnREaWN0KCktPktleUV4aXN0KEZYX0JTVFJDKCJXaWR0aHMiKSkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIENQREZfVHlwZTFGb250KiBwVDFGb250ID0gcEZvbnQtPkdldFR5cGUxRm9udCgpOworICAgICAgICBpZiAocEVuY29kaW5nICYmICFwVDFGb250LT5HZXRFbmNvZGluZygpLT5Jc0lkZW50aWNhbChwRW5jb2RpbmcpKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBmb250RGF0YS0+bV9uQ291bnQgKys7CisgICAgICAgIHJldHVybiBwRm9udDsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7CisgICAgcERpY3QtPlNldEF0TmFtZShGWF9CU1RSQygiVHlwZSIpLCBGWF9CU1RSQygiRm9udCIpKTsKKyAgICBwRGljdC0+U2V0QXROYW1lKEZYX0JTVFJDKCJTdWJ0eXBlIiksIEZYX0JTVFJDKCJUeXBlMSIpKTsKKyAgICBwRGljdC0+U2V0QXROYW1lKEZYX0JTVFJDKCJCYXNlRm9udCIpLCBmb250TmFtZSk7CisgICAgaWYgKHBFbmNvZGluZykgeworICAgICAgICBwRGljdC0+U2V0QXQoRlhfQlNUUkMoIkVuY29kaW5nIiksIHBFbmNvZGluZy0+UmVhbGl6ZSgpKTsKKyAgICB9CisgICAgbV9wUERGRG9jLT5BZGRJbmRpcmVjdE9iamVjdChwRGljdCk7CisgICAgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfRm9udCo+KiBmb250RGF0YSA9IEZYX05FVyBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9Gb250Kj47CisgICAgaWYgKCFmb250RGF0YSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9Gb250KiBwRm9udCA9IENQREZfRm9udDo6Q3JlYXRlRm9udEYobV9wUERGRG9jLCBwRGljdCk7CisgICAgaWYgKCFwRm9udCkgeworICAgICAgICBkZWxldGUgZm9udERhdGE7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBmb250RGF0YS0+bV9uQ291bnQgPSAyOworICAgIGZvbnREYXRhLT5tX09iaiA9IHBGb250OworICAgIG1fRm9udE1hcC5TZXRBdChwRGljdCwgZm9udERhdGEpOworICAgIHJldHVybiBwRm9udDsKK30KK3ZvaWQgQ1BERl9Eb2NQYWdlRGF0YTo6UmVsZWFzZUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9udERpY3QpCit7CisgICAgaWYgKCFwRm9udERpY3QpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9Gb250Kj4qIGZvbnREYXRhOworICAgIGlmICghbV9Gb250TWFwLkxvb2t1cChwRm9udERpY3QsIGZvbnREYXRhKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChmb250RGF0YS0+bV9PYmogJiYgLS1mb250RGF0YS0+bV9uQ291bnQgPT0gMCkgeworICAgICAgICBkZWxldGUgZm9udERhdGEtPm1fT2JqOworICAgICAgICBmb250RGF0YS0+bV9PYmogPSBOVUxMOworICAgIH0KK30KK0NQREZfQ29sb3JTcGFjZSogQ1BERl9Eb2NQYWdlRGF0YTo6R2V0Q29sb3JTcGFjZShDUERGX09iamVjdCogcENTT2JqLCBDUERGX0RpY3Rpb25hcnkqIHBSZXNvdXJjZXMpCit7CisgICAgaWYgKCFwQ1NPYmopIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChwQ1NPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfTkFNRSkgeworICAgICAgICBDRlhfQnl0ZVN0cmluZyBuYW1lID0gcENTT2JqLT5HZXRDb25zdFN0cmluZygpOworICAgICAgICBDUERGX0NvbG9yU3BhY2UqIHBDUyA9IF9DU0Zyb21OYW1lKG5hbWUpOworICAgICAgICBpZiAoIXBDUyAmJiBwUmVzb3VyY2VzKSB7CisgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBMaXN0ID0gcFJlc291cmNlcy0+R2V0RGljdChGWF9CU1RSQygiQ29sb3JTcGFjZSIpKTsKKyAgICAgICAgICAgIGlmIChwTGlzdCkgeworICAgICAgICAgICAgICAgIHBDU09iaiA9IHBMaXN0LT5HZXRFbGVtZW50VmFsdWUobmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdldENvbG9yU3BhY2UocENTT2JqLCBOVUxMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocENTID09IE5VTEwgfHwgcFJlc291cmNlcyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gcENTOworICAgICAgICB9CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcENvbG9yU3BhY2VzID0gcFJlc291cmNlcy0+R2V0RGljdChGWF9CU1RSQygiQ29sb3JTcGFjZSIpKTsKKyAgICAgICAgaWYgKHBDb2xvclNwYWNlcyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gcENTOworICAgICAgICB9CisgICAgICAgIENQREZfT2JqZWN0KiBwRGVmYXVsdENTID0gTlVMTDsKKyAgICAgICAgc3dpdGNoIChwQ1MtPkdldEZhbWlseSgpKSB7CisgICAgICAgICAgICBjYXNlIFBERkNTX0RFVklDRVJHQjoKKyAgICAgICAgICAgICAgICBwRGVmYXVsdENTID0gcENvbG9yU3BhY2VzLT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkRlZmF1bHRSR0IiKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFBERkNTX0RFVklDRUdSQVk6CisgICAgICAgICAgICAgICAgcERlZmF1bHRDUyA9IHBDb2xvclNwYWNlcy0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJEZWZhdWx0R3JheSIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUERGQ1NfREVWSUNFQ01ZSzoKKyAgICAgICAgICAgICAgICBwRGVmYXVsdENTID0gcENvbG9yU3BhY2VzLT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkRlZmF1bHRDTVlLIikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChwRGVmYXVsdENTID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBwQ1M7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEdldENvbG9yU3BhY2UocERlZmF1bHRDUywgTlVMTCk7CisgICAgfQorICAgIGlmIChwQ1NPYmotPkdldFR5cGUoKSAhPSBQREZPQkpfQVJSQVkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfQXJyYXkqIHBBcnJheSA9IChDUERGX0FycmF5KilwQ1NPYmo7CisgICAgaWYgKHBBcnJheS0+R2V0Q291bnQoKSA9PSAwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAocEFycmF5LT5HZXRDb3VudCgpID09IDEpIHsKKyAgICAgICAgcmV0dXJuIEdldENvbG9yU3BhY2UocEFycmF5LT5HZXRFbGVtZW50VmFsdWUoMCksIHBSZXNvdXJjZXMpOworICAgIH0KKyAgICBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9Db2xvclNwYWNlKj4qIGNzRGF0YSA9IE5VTEw7CisgICAgaWYgKG1fQ29sb3JTcGFjZU1hcC5Mb29rdXAocENTT2JqLCBjc0RhdGEpKSB7CisgICAgICAgIGlmIChjc0RhdGEtPm1fT2JqKSB7CisgICAgICAgICAgICBjc0RhdGEtPm1fbkNvdW50Kys7CisgICAgICAgICAgICByZXR1cm4gY3NEYXRhLT5tX09iajsKKyAgICAgICAgfQorICAgIH0KKyAgICBGWF9CT09MIGJOZXcgPSBGQUxTRTsKKyAgICBpZiAoIWNzRGF0YSkgeworICAgICAgICBjc0RhdGEgPSBGWF9ORVcgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfQ29sb3JTcGFjZSo+OworICAgICAgICBpZiAoIWNzRGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgYk5ldyA9IFRSVUU7CisgICAgfQorICAgIENQREZfQ29sb3JTcGFjZSogcENTID0gQ1BERl9Db2xvclNwYWNlOjpMb2FkKG1fcFBERkRvYywgcEFycmF5KTsKKyAgICBpZiAoIXBDUykgeworICAgICAgICBpZiAoYk5ldykgeworICAgICAgICAgICAgZGVsZXRlIGNzRGF0YTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgY3NEYXRhLT5tX25Db3VudCA9IDI7CisgICAgY3NEYXRhLT5tX09iaiA9IHBDUzsKKyAgICBtX0NvbG9yU3BhY2VNYXAuU2V0QXQocENTT2JqLCBjc0RhdGEpOworICAgIHJldHVybiBwQ1M7Cit9CitDUERGX0NvbG9yU3BhY2UqIENQREZfRG9jUGFnZURhdGE6OkdldENvcGllZENvbG9yU3BhY2UoQ1BERl9PYmplY3QqIHBDU09iaikKK3sKKyAgICBpZiAoIXBDU09iaikgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfQ29sb3JTcGFjZSo+KiBjc0RhdGE7CisgICAgaWYgKCFtX0NvbG9yU3BhY2VNYXAuTG9va3VwKHBDU09iaiwgY3NEYXRhKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKCFjc0RhdGEtPm1fT2JqKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBjc0RhdGEtPm1fbkNvdW50ICsrOworICAgIHJldHVybiBjc0RhdGEtPm1fT2JqOworfQordm9pZCBDUERGX0RvY1BhZ2VEYXRhOjpSZWxlYXNlQ29sb3JTcGFjZShDUERGX09iamVjdCogcENvbG9yU3BhY2UpCit7CisgICAgaWYgKCFwQ29sb3JTcGFjZSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfQ291bnRlZE9iamVjdDxDUERGX0NvbG9yU3BhY2UqPiogY3NEYXRhOworICAgIGlmICghbV9Db2xvclNwYWNlTWFwLkxvb2t1cChwQ29sb3JTcGFjZSwgY3NEYXRhKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChjc0RhdGEtPm1fT2JqICYmIC0tY3NEYXRhLT5tX25Db3VudCA9PSAwKSB7CisgICAgICAgIGNzRGF0YS0+bV9PYmotPlJlbGVhc2VDUygpOworICAgICAgICBjc0RhdGEtPm1fT2JqID0gTlVMTDsKKyAgICB9Cit9CitDUERGX1BhdHRlcm4qIENQREZfRG9jUGFnZURhdGE6OkdldFBhdHRlcm4oQ1BERl9PYmplY3QqIHBQYXR0ZXJuT2JqLCBGWF9CT09MIGJTaGFkaW5nLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBtYXRyaXgpCit7CisgICAgaWYgKCFwUGF0dGVybk9iaikgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfUGF0dGVybio+KiBwdERhdGEgPSBOVUxMOworICAgIGlmIChtX1BhdHRlcm5NYXAuTG9va3VwKHBQYXR0ZXJuT2JqLCBwdERhdGEpKSB7CisgICAgICAgIGlmIChwdERhdGEtPm1fT2JqKSB7CisgICAgICAgICAgICBwdERhdGEtPm1fbkNvdW50Kys7CisgICAgICAgICAgICByZXR1cm4gcHREYXRhLT5tX09iajsKKyAgICAgICAgfQorICAgIH0KKyAgICBGWF9CT09MIGJOZXcgPSBGQUxTRTsKKyAgICBpZiAoIXB0RGF0YSkgeworICAgICAgICBwdERhdGEgPSBGWF9ORVcgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfUGF0dGVybio+OworICAgICAgICBiTmV3ID0gVFJVRTsKKyAgICAgICAgaWYgKCFwdERhdGEpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIENQREZfUGF0dGVybiogcFBhdHRlcm4gPSBOVUxMOworICAgIGlmIChiU2hhZGluZykgeworICAgICAgICBwUGF0dGVybiA9IEZYX05FVyBDUERGX1NoYWRpbmdQYXR0ZXJuKG1fcFBERkRvYywgcFBhdHRlcm5PYmosIGJTaGFkaW5nLCBtYXRyaXgpOworICAgIH0gZWxzZSB7CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSBwUGF0dGVybk9iai0+R2V0RGljdCgpOworICAgICAgICBpZiAocERpY3QpIHsKKyAgICAgICAgICAgIGludCB0eXBlID0gcERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIlBhdHRlcm5UeXBlIikpOworICAgICAgICAgICAgaWYgKHR5cGUgPT0gMSkgeworICAgICAgICAgICAgICAgIHBQYXR0ZXJuID0gRlhfTkVXIENQREZfVGlsaW5nUGF0dGVybihtX3BQREZEb2MsIHBQYXR0ZXJuT2JqLCBtYXRyaXgpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IDIpIHsKKyAgICAgICAgICAgICAgICBwUGF0dGVybiA9IEZYX05FVyBDUERGX1NoYWRpbmdQYXR0ZXJuKG1fcFBERkRvYywgcFBhdHRlcm5PYmosIEZBTFNFLCBtYXRyaXgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmICghcFBhdHRlcm4pIHsKKyAgICAgICAgaWYgKGJOZXcpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwdERhdGE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHB0RGF0YS0+bV9uQ291bnQgPSAyOworICAgIHB0RGF0YS0+bV9PYmogPSBwUGF0dGVybjsKKyAgICBtX1BhdHRlcm5NYXAuU2V0QXQocFBhdHRlcm5PYmosIHB0RGF0YSk7CisgICAgcmV0dXJuIHBQYXR0ZXJuOworfQordm9pZCBDUERGX0RvY1BhZ2VEYXRhOjpSZWxlYXNlUGF0dGVybihDUERGX09iamVjdCogcFBhdHRlcm5PYmopCit7CisgICAgaWYgKCFwUGF0dGVybk9iaikgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfQ291bnRlZE9iamVjdDxDUERGX1BhdHRlcm4qPiogcHREYXRhOworICAgIGlmICghbV9QYXR0ZXJuTWFwLkxvb2t1cChwUGF0dGVybk9iaiwgcHREYXRhKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChwdERhdGEtPm1fT2JqICYmIC0tcHREYXRhLT5tX25Db3VudCA9PSAwKSB7CisgICAgICAgIGRlbGV0ZSBwdERhdGEtPm1fT2JqOworICAgICAgICBwdERhdGEtPm1fT2JqID0gTlVMTDsKKyAgICB9Cit9CitDUERGX0ltYWdlKiBDUERGX0RvY1BhZ2VEYXRhOjpHZXRJbWFnZShDUERGX09iamVjdCogcEltYWdlU3RyZWFtKQoreworICAgIGlmICghcEltYWdlU3RyZWFtKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBGWF9EV09SRCBkd0ltYWdlT2JqTnVtID0gcEltYWdlU3RyZWFtLT5HZXRPYmpOdW0oKTsKKyAgICBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9JbWFnZSo+KiBpbWFnZURhdGE7CisgICAgaWYgKG1fSW1hZ2VNYXAuTG9va3VwKGR3SW1hZ2VPYmpOdW0sIGltYWdlRGF0YSkpIHsKKyAgICAgICAgaW1hZ2VEYXRhLT5tX25Db3VudCArKzsKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YS0+bV9PYmo7CisgICAgfQorICAgIGltYWdlRGF0YSA9IEZYX05FVyBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9JbWFnZSo+OworICAgIGlmICghaW1hZ2VEYXRhKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX0ltYWdlKiBwSW1hZ2UgPSBGWF9ORVcgQ1BERl9JbWFnZShtX3BQREZEb2MpOworICAgIGlmICghcEltYWdlKSB7CisgICAgICAgIGRlbGV0ZSBpbWFnZURhdGE7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwSW1hZ2UtPkxvYWRJbWFnZUYoKENQREZfU3RyZWFtKilwSW1hZ2VTdHJlYW0sIEZBTFNFKTsKKyAgICBpbWFnZURhdGEtPm1fbkNvdW50ID0gMjsKKyAgICBpbWFnZURhdGEtPm1fT2JqID0gcEltYWdlOworICAgIG1fSW1hZ2VNYXAuU2V0QXQoZHdJbWFnZU9iak51bSwgaW1hZ2VEYXRhKTsKKyAgICByZXR1cm4gcEltYWdlOworfQordm9pZCBDUERGX0RvY1BhZ2VEYXRhOjpSZWxlYXNlSW1hZ2UoQ1BERl9PYmplY3QqIHBJbWFnZVN0cmVhbSkKK3sKKyAgICBpZiAoIXBJbWFnZVN0cmVhbSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFBERl9Eb2NQYWdlRGF0YV9SZWxlYXNlPEZYX0RXT1JELCBDUERGX0ltYWdlKj4obV9JbWFnZU1hcCwgcEltYWdlU3RyZWFtLT5HZXRPYmpOdW0oKSwgTlVMTCk7Cit9CitDUERGX0ljY1Byb2ZpbGUqIENQREZfRG9jUGFnZURhdGE6OkdldEljY1Byb2ZpbGUoQ1BERl9TdHJlYW0qIHBJY2NQcm9maWxlU3RyZWFtLCBGWF9JTlQzMiBuQ29tcG9uZW50cykKK3sKKyAgICBpZiAoIXBJY2NQcm9maWxlU3RyZWFtKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9JY2NQcm9maWxlKj4qIGlwRGF0YSA9IE5VTEw7CisgICAgaWYgKG1fSWNjUHJvZmlsZU1hcC5Mb29rdXAocEljY1Byb2ZpbGVTdHJlYW0sIGlwRGF0YSkpIHsKKyAgICAgICAgaXBEYXRhLT5tX25Db3VudCsrOworICAgICAgICByZXR1cm4gaXBEYXRhLT5tX09iajsKKyAgICB9CisgICAgQ1BERl9TdHJlYW1BY2Mgc3RyZWFtOworICAgIHN0cmVhbS5Mb2FkQWxsRGF0YShwSWNjUHJvZmlsZVN0cmVhbSwgRkFMU0UpOworICAgIEZYX0JZVEUgZGlnZXN0WzIwXTsKKyAgICBDUERGX1N0cmVhbSogcENvcGllZFN0cmVhbSA9IE5VTEw7CisgICAgQ1JZUFRfU0hBMUdlbmVyYXRlKHN0cmVhbS5HZXREYXRhKCksIHN0cmVhbS5HZXRTaXplKCksIGRpZ2VzdCk7CisgICAgaWYgKG1fSGFzaFByb2ZpbGVNYXAuTG9va3VwKENGWF9CeXRlU3RyaW5nQyhkaWdlc3QsIDIwKSwgKHZvaWQqJilwQ29waWVkU3RyZWFtKSkgeworICAgICAgICBtX0ljY1Byb2ZpbGVNYXAuTG9va3VwKHBDb3BpZWRTdHJlYW0sIGlwRGF0YSk7CisgICAgICAgIGlwRGF0YS0+bV9uQ291bnQrKzsKKyAgICAgICAgcmV0dXJuIGlwRGF0YS0+bV9PYmo7CisgICAgfQorICAgIENQREZfSWNjUHJvZmlsZSogcFByb2ZpbGUgPSBGWF9ORVcgQ1BERl9JY2NQcm9maWxlKHN0cmVhbS5HZXREYXRhKCksIHN0cmVhbS5HZXRTaXplKCksIG5Db21wb25lbnRzKTsKKyAgICBpZiAoIXBQcm9maWxlKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpcERhdGEgPSBGWF9ORVcgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfSWNjUHJvZmlsZSo+OworICAgIGlmICghaXBEYXRhKSB7CisgICAgICAgIGRlbGV0ZSBwUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlwRGF0YS0+bV9uQ291bnQgPSAyOworICAgIGlwRGF0YS0+bV9PYmogPSBwUHJvZmlsZTsKKyAgICBtX0ljY1Byb2ZpbGVNYXAuU2V0QXQocEljY1Byb2ZpbGVTdHJlYW0sIGlwRGF0YSk7CisgICAgbV9IYXNoUHJvZmlsZU1hcC5TZXRBdChDRlhfQnl0ZVN0cmluZ0MoZGlnZXN0LCAyMCksIHBJY2NQcm9maWxlU3RyZWFtKTsKKyAgICByZXR1cm4gcFByb2ZpbGU7Cit9Cit2b2lkIENQREZfRG9jUGFnZURhdGE6OlJlbGVhc2VJY2NQcm9maWxlKENQREZfU3RyZWFtKiBwSWNjUHJvZmlsZVN0cmVhbSwgQ1BERl9JY2NQcm9maWxlKiBwSWNjUHJvZmlsZSkKK3sKKyAgICBpZiAoIXBJY2NQcm9maWxlU3RyZWFtICYmICFwSWNjUHJvZmlsZSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfQ291bnRlZE9iamVjdDxDUERGX0ljY1Byb2ZpbGUqPiogaXBEYXRhID0gTlVMTDsKKyAgICBpZiAobV9JY2NQcm9maWxlTWFwLkxvb2t1cChwSWNjUHJvZmlsZVN0cmVhbSwgaXBEYXRhKSAmJiBpcERhdGEtPm1fbkNvdW50IDwgMikgeworICAgICAgICBGWF9QT1NJVElPTiBwb3MgPSBtX0hhc2hQcm9maWxlTWFwLkdldFN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgd2hpbGUgKHBvcykgeworICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcga2V5OworICAgICAgICAgICAgQ1BERl9TdHJlYW0qIHBGaW5kU3RyZWFtID0gTlVMTDsKKyAgICAgICAgICAgIG1fSGFzaFByb2ZpbGVNYXAuR2V0TmV4dEFzc29jKHBvcywga2V5LCAodm9pZComKXBGaW5kU3RyZWFtKTsKKyAgICAgICAgICAgIGlmIChwSWNjUHJvZmlsZVN0cmVhbSA9PSBwRmluZFN0cmVhbSkgeworICAgICAgICAgICAgICAgIG1fSGFzaFByb2ZpbGVNYXAuUmVtb3ZlS2V5KGtleSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgUERGX0RvY1BhZ2VEYXRhX1JlbGVhc2U8Q1BERl9TdHJlYW0qLCBDUERGX0ljY1Byb2ZpbGUqPihtX0ljY1Byb2ZpbGVNYXAsIHBJY2NQcm9maWxlU3RyZWFtLCBwSWNjUHJvZmlsZSk7Cit9CitDUERGX1N0cmVhbUFjYyogQ1BERl9Eb2NQYWdlRGF0YTo6R2V0Rm9udEZpbGVTdHJlYW1BY2MoQ1BERl9TdHJlYW0qIHBGb250U3RyZWFtKQoreworICAgIGlmICghcEZvbnRTdHJlYW0pIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfQ291bnRlZE9iamVjdDxDUERGX1N0cmVhbUFjYyo+KiBmdERhdGE7CisgICAgaWYgKG1fRm9udEZpbGVNYXAuTG9va3VwKHBGb250U3RyZWFtLCBmdERhdGEpKSB7CisgICAgICAgIGZ0RGF0YS0+bV9uQ291bnQgKys7CisgICAgICAgIHJldHVybiBmdERhdGEtPm1fT2JqOworICAgIH0KKyAgICBmdERhdGEgPSBGWF9ORVcgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfU3RyZWFtQWNjKj47CisgICAgaWYgKCFmdERhdGEpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfU3RyZWFtQWNjKiBwRm9udEZpbGUgPSBGWF9ORVcgQ1BERl9TdHJlYW1BY2M7CisgICAgaWYgKCFwRm9udEZpbGUpIHsKKyAgICAgICAgZGVsZXRlIGZ0RGF0YTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcEZvbnREaWN0ID0gcEZvbnRTdHJlYW0tPkdldERpY3QoKTsKKyAgICBGWF9JTlQzMiBvcmdfc2l6ZSA9IHBGb250RGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiTGVuZ3RoMSIpKSArIHBGb250RGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiTGVuZ3RoMiIpKSArIHBGb250RGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiTGVuZ3RoMyIpKTsKKyAgICBpZiAob3JnX3NpemUgPCAwKSB7CisgICAgICAgIG9yZ19zaXplID0gMDsKKyAgICB9CisgICAgcEZvbnRGaWxlLT5Mb2FkQWxsRGF0YShwRm9udFN0cmVhbSwgRkFMU0UsIG9yZ19zaXplKTsKKyAgICBmdERhdGEtPm1fbkNvdW50ID0gMjsKKyAgICBmdERhdGEtPm1fT2JqID0gcEZvbnRGaWxlOworICAgIG1fRm9udEZpbGVNYXAuU2V0QXQocEZvbnRTdHJlYW0sIGZ0RGF0YSk7CisgICAgcmV0dXJuIHBGb250RmlsZTsKK30KK3ZvaWQgQ1BERl9Eb2NQYWdlRGF0YTo6UmVsZWFzZUZvbnRGaWxlU3RyZWFtQWNjKENQREZfU3RyZWFtKiBwRm9udFN0cmVhbSwgRlhfQk9PTCBiRm9yY2UpCit7CisgICAgaWYgKCFwRm9udFN0cmVhbSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFBERl9Eb2NQYWdlRGF0YV9SZWxlYXNlPENQREZfU3RyZWFtKiwgQ1BERl9TdHJlYW1BY2MqPihtX0ZvbnRGaWxlTWFwLCBwRm9udFN0cmVhbSwgTlVMTCwgYkZvcmNlKTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYWdlL2ZwZGZfcGFnZV9mdW5jLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYWdlL2ZwZGZfcGFnZV9mdW5jLmNwcAppbmRleCAzMzU0NjBmLi41YjE3OGY5IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFnZS9mcGRmX3BhZ2VfZnVuYy5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhZ2UvZnBkZl9wYWdlX2Z1bmMuY3BwCkBAIC0xLDg4NiArMSw4ODYgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX21vZHVsZS5oIg0KLSNpbmNsdWRlICJwYWdlaW50LmgiDQotI2luY2x1ZGUgPGxpbWl0cy5oPg0KLWNsYXNzIENQREZfUFNFbmdpbmU7DQotdHlwZWRlZiBlbnVtIHtQU09QX0FERCwgUFNPUF9TVUIsIFBTT1BfTVVMLCBQU09QX0RJViwgUFNPUF9JRElWLCBQU09QX01PRCwNCi0gICAgICAgICAgICAgIFBTT1BfTkVHLCBQU09QX0FCUywgUFNPUF9DRUlMSU5HLCBQU09QX0ZMT09SLCBQU09QX1JPVU5ELCBQU09QX1RSVU5DQVRFLA0KLSAgICAgICAgICAgICAgUFNPUF9TUVJULCBQU09QX1NJTiwgUFNPUF9DT1MsIFBTT1BfQVRBTiwgUFNPUF9FWFAsIFBTT1BfTE4sIFBTT1BfTE9HLA0KLSAgICAgICAgICAgICAgUFNPUF9DVkksIFBTT1BfQ1ZSLCBQU09QX0VRLCBQU09QX05FLCBQU09QX0dULCBQU09QX0dFLCBQU09QX0xULCBQU09QX0xFLA0KLSAgICAgICAgICAgICAgUFNPUF9BTkQsIFBTT1BfT1IsIFBTT1BfWE9SLCBQU09QX05PVCwgUFNPUF9CSVRTSElGVCwgUFNPUF9UUlVFLCBQU09QX0ZBTFNFLA0KLSAgICAgICAgICAgICAgUFNPUF9JRiwgUFNPUF9JRkVMU0UsIFBTT1BfUE9QLCBQU09QX0VYQ0gsIFBTT1BfRFVQLCBQU09QX0NPUFksDQotICAgICAgICAgICAgICBQU09QX0lOREVYLCBQU09QX1JPTEwsIFBTT1BfUFJPQywgUFNPUF9DT05TVA0KLSAgICAgICAgICAgICB9IFBERl9QU09QOw0KLWNsYXNzIENQREZfUFNQcm9jIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICB+Q1BERl9QU1Byb2MoKTsNCi0gICAgRlhfQk9PTAlQYXJzZShDUERGX1NpbXBsZVBhcnNlciYgcGFyc2VyKTsNCi0gICAgRlhfQk9PTAlFeGVjdXRlKENQREZfUFNFbmdpbmUqIHBFbmdpbmUpOw0KLSAgICBDRlhfUHRyQXJyYXkJCW1fT3BlcmF0b3JzOw0KLX07DQotI2RlZmluZSBQU0VOR0lORV9TVEFDS1NJWkUgMTAwDQotY2xhc3MgQ1BERl9QU0VuZ2luZSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgQ1BERl9QU0VuZ2luZSgpOw0KLSAgICB+Q1BERl9QU0VuZ2luZSgpOw0KLSAgICBGWF9CT09MCVBhcnNlKGNvbnN0IEZYX0NIQVIqIHN0cmluZywgaW50IHNpemUpOw0KLSAgICBGWF9CT09MCUV4ZWN1dGUoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9NYWluUHJvYy5FeGVjdXRlKHRoaXMpOw0KLSAgICB9DQotICAgIEZYX0JPT0wJRG9PcGVyYXRvcihQREZfUFNPUCBvcCk7DQotICAgIHZvaWQJUmVzZXQoKQ0KLSAgICB7DQotICAgICAgICBtX1N0YWNrQ291bnQgPSAwOw0KLSAgICB9DQotICAgIHZvaWQJUHVzaChGWF9GTE9BVCB2YWx1ZSk7DQotICAgIHZvaWQJUHVzaChpbnQgdmFsdWUpDQotICAgIHsNCi0gICAgICAgIFB1c2goKEZYX0ZMT0FUKXZhbHVlKTsNCi0gICAgfQ0KLSAgICBGWF9GTE9BVAlQb3AoKTsNCi0gICAgaW50CQlHZXRTdGFja1NpemUoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9TdGFja0NvdW50Ow0KLSAgICB9DQotcHJpdmF0ZToNCi0gICAgRlhfRkxPQVQJbV9TdGFja1tQU0VOR0lORV9TVEFDS1NJWkVdOw0KLSAgICBpbnQJCW1fU3RhY2tDb3VudDsNCi0gICAgQ1BERl9QU1Byb2MJbV9NYWluUHJvYzsNCi19Ow0KLUNQREZfUFNQcm9jOjp+Q1BERl9QU1Byb2MoKQ0KLXsNCi0gICAgaW50IHNpemUgPSBtX09wZXJhdG9ycy5HZXRTaXplKCk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgew0KLSAgICAgICAgaWYgKG1fT3BlcmF0b3JzW2ldID09IChGWF9MUFZPSUQpUFNPUF9QUk9DKSB7DQotICAgICAgICAgICAgZGVsZXRlIChDUERGX1BTUHJvYyopbV9PcGVyYXRvcnNbaSArIDFdOw0KLSAgICAgICAgICAgIGkgKys7DQotICAgICAgICB9IGVsc2UgaWYgKG1fT3BlcmF0b3JzW2ldID09IChGWF9MUFZPSUQpUFNPUF9DT05TVCkgew0KLSAgICAgICAgICAgIEZYX0ZyZWUoKEZYX0ZMT0FUKiltX09wZXJhdG9yc1tpICsgMV0pOw0KLSAgICAgICAgICAgIGkgKys7DQotICAgICAgICB9DQotICAgIH0NCi19DQotI3ByYWdtYSBvcHRpbWl6ZSggIiIsIG9mZiApDQotRlhfQk9PTCBDUERGX1BTUHJvYzo6RXhlY3V0ZShDUERGX1BTRW5naW5lKiBwRW5naW5lKQ0KLXsNCi0gICAgaW50IHNpemUgPSBtX09wZXJhdG9ycy5HZXRTaXplKCk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgew0KLSAgICAgICAgUERGX1BTT1Agb3AgPSAoUERGX1BTT1ApKEZYX1VJTlRQVFIpbV9PcGVyYXRvcnNbaV07DQotICAgICAgICBpZiAob3AgPT0gUFNPUF9QUk9DKSB7DQotICAgICAgICAgICAgaSArKzsNCi0gICAgICAgIH0gZWxzZSBpZiAob3AgPT0gUFNPUF9DT05TVCkgew0KLSAgICAgICAgICAgIHBFbmdpbmUtPlB1c2goKihGWF9GTE9BVCopbV9PcGVyYXRvcnNbaSArIDFdKTsNCi0gICAgICAgICAgICBpICsrOw0KLSAgICAgICAgfSBlbHNlIGlmIChvcCA9PSBQU09QX0lGKSB7DQotICAgICAgICAgICAgaWYgKGkgPCAyIHx8IG1fT3BlcmF0b3JzW2kgLSAyXSAhPSAoRlhfTFBWT0lEKVBTT1BfUFJPQykgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmICgoaW50KXBFbmdpbmUtPlBvcCgpKSB7DQotICAgICAgICAgICAgICAgICgoQ1BERl9QU1Byb2MqKW1fT3BlcmF0b3JzW2kgLSAxXSktPkV4ZWN1dGUocEVuZ2luZSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIGlmIChvcCA9PSBQU09QX0lGRUxTRSkgew0KLSAgICAgICAgICAgIGlmIChpIDwgNCB8fCBtX09wZXJhdG9yc1tpIC0gMl0gIT0gKEZYX0xQVk9JRClQU09QX1BST0MgfHwNCi0gICAgICAgICAgICAgICAgICAgIG1fT3BlcmF0b3JzW2kgLSA0XSAhPSAoRlhfTFBWT0lEKVBTT1BfUFJPQykgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmICgoaW50KXBFbmdpbmUtPlBvcCgpKSB7DQotICAgICAgICAgICAgICAgICgoQ1BERl9QU1Byb2MqKW1fT3BlcmF0b3JzW2kgLSAzXSktPkV4ZWN1dGUocEVuZ2luZSk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgKChDUERGX1BTUHJvYyopbV9PcGVyYXRvcnNbaSAtIDFdKS0+RXhlY3V0ZShwRW5naW5lKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHBFbmdpbmUtPkRvT3BlcmF0b3Iob3ApOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi0jcHJhZ21hIG9wdGltaXplKCAiIiwgb24gKQ0KLUNQREZfUFNFbmdpbmU6OkNQREZfUFNFbmdpbmUoKQ0KLXsNCi0gICAgbV9TdGFja0NvdW50ID0gMDsNCi19DQotQ1BERl9QU0VuZ2luZTo6fkNQREZfUFNFbmdpbmUoKQ0KLXsNCi19DQotdm9pZCBDUERGX1BTRW5naW5lOjpQdXNoKEZYX0ZMT0FUIHYpDQotew0KLSAgICBpZiAobV9TdGFja0NvdW50ID09IDEwMCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fU3RhY2tbbV9TdGFja0NvdW50KytdID0gdjsNCi19DQotRlhfRkxPQVQgQ1BERl9QU0VuZ2luZTo6UG9wKCkNCi17DQotICAgIGlmIChtX1N0YWNrQ291bnQgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgcmV0dXJuIG1fU3RhY2tbLS1tX1N0YWNrQ291bnRdOw0KLX0NCi1jb25zdCBzdHJ1Y3QgX1BERl9QU09wTmFtZSB7DQotICAgIGNvbnN0IEZYX0NIQVIqIG5hbWU7DQotICAgIFBERl9QU09QIG9wOw0KLX0gX1BERl9QU09wTmFtZXNbXSA9IHsNCi0gICAgeyJhZGQiLCBQU09QX0FERH0sIHsic3ViIiwgUFNPUF9TVUJ9LCB7Im11bCIsIFBTT1BfTVVMfSwgeyJkaXYiLCBQU09QX0RJVn0sDQotICAgIHsiaWRpdiIsIFBTT1BfSURJVn0sIHsibW9kIiwgUFNPUF9NT0R9LCB7Im5lZyIsIFBTT1BfTkVHfSwgeyJhYnMiLCBQU09QX0FCU30sDQotICAgIHsiY2VpbGluZyIsIFBTT1BfQ0VJTElOR30sIHsiZmxvb3IiLCBQU09QX0ZMT09SfSwgeyJyb3VuZCIsIFBTT1BfUk9VTkR9LA0KLSAgICB7InRydW5jYXRlIiwgUFNPUF9UUlVOQ0FURX0sIHsic3FydCIsIFBTT1BfU1FSVH0sIHsic2luIiwgUFNPUF9TSU59LA0KLSAgICB7ImNvcyIsIFBTT1BfQ09TfSwgeyJhdGFuIiwgUFNPUF9BVEFOfSwgeyJleHAiLCBQU09QX0VYUH0sIHsibG4iLCBQU09QX0xOfSwNCi0gICAgeyJsb2ciLCBQU09QX0xPR30sIHsiY3ZpIiwgUFNPUF9DVkl9LCB7ImN2ciIsIFBTT1BfQ1ZSfSwgeyJlcSIsIFBTT1BfRVF9LA0KLSAgICB7Im5lIiwgUFNPUF9ORX0sIHsiZ3QiLCBQU09QX0dUfSwgeyJnZSIsIFBTT1BfR0V9LCB7Imx0IiwgUFNPUF9MVH0sDQotICAgIHsibGUiLCBQU09QX0xFfSwgeyJhbmQiLCBQU09QX0FORH0sIHsib3IiLCBQU09QX09SfSwgeyJ4b3IiLCBQU09QX1hPUn0sDQotICAgIHsibm90IiwgUFNPUF9OT1R9LCB7ImJpdHNoaWZ0IiwgUFNPUF9CSVRTSElGVH0sIHsidHJ1ZSIsIFBTT1BfVFJVRX0sDQotICAgIHsiZmFsc2UiLCBQU09QX0ZBTFNFfSwgeyJpZiIsIFBTT1BfSUZ9LCB7ImlmZWxzZSIsIFBTT1BfSUZFTFNFfSwNCi0gICAgeyJwb3AiLCBQU09QX1BPUH0sIHsiZXhjaCIsIFBTT1BfRVhDSH0sIHsiZHVwIiwgUFNPUF9EVVB9LA0KLSAgICB7ImNvcHkiLCBQU09QX0NPUFl9LCB7ImluZGV4IiwgUFNPUF9JTkRFWH0sIHsicm9sbCIsIFBTT1BfUk9MTH0sDQotICAgIHtOVUxMLCBQU09QX1BST0N9DQotfTsNCi1GWF9CT09MIENQREZfUFNFbmdpbmU6OlBhcnNlKGNvbnN0IEZYX0NIQVIqIHN0cmluZywgaW50IHNpemUpDQotew0KLSAgICBDUERGX1NpbXBsZVBhcnNlciBwYXJzZXIoKEZYX0xQQllURSlzdHJpbmcsIHNpemUpOw0KLSAgICBDRlhfQnl0ZVN0cmluZ0Mgd29yZCA9IHBhcnNlci5HZXRXb3JkKCk7DQotICAgIGlmICh3b3JkICE9IEZYX0JTVFJDKCJ7IikpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9NYWluUHJvYy5QYXJzZShwYXJzZXIpOw0KLX0NCi1GWF9CT09MIENQREZfUFNQcm9jOjpQYXJzZShDUERGX1NpbXBsZVBhcnNlciYgcGFyc2VyKQ0KLXsNCi0gICAgd2hpbGUgKDEpIHsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nQyB3b3JkID0gcGFyc2VyLkdldFdvcmQoKTsNCi0gICAgICAgIGlmICh3b3JkLklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICh3b3JkID09IEZYX0JTVFJDKCJ9IikpIHsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICh3b3JkID09IEZYX0JTVFJDKCJ7IikpIHsNCi0gICAgICAgICAgICBDUERGX1BTUHJvYyogcFByb2MgPSBGWF9ORVcgQ1BERl9QU1Byb2M7DQotICAgICAgICAgICAgbV9PcGVyYXRvcnMuQWRkKChGWF9MUFZPSUQpUFNPUF9QUk9DKTsNCi0gICAgICAgICAgICBtX09wZXJhdG9ycy5BZGQocFByb2MpOw0KLSAgICAgICAgICAgIGlmICghcFByb2MtPlBhcnNlKHBhcnNlcikpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaW50IGkgPSAwOw0KLSAgICAgICAgICAgIHdoaWxlIChfUERGX1BTT3BOYW1lc1tpXS5uYW1lKSB7DQotICAgICAgICAgICAgICAgIGlmICh3b3JkID09IENGWF9CeXRlU3RyaW5nQyhfUERGX1BTT3BOYW1lc1tpXS5uYW1lKSkgew0KLSAgICAgICAgICAgICAgICAgICAgbV9PcGVyYXRvcnMuQWRkKChGWF9MUFZPSUQpX1BERl9QU09wTmFtZXNbaV0ub3ApOw0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaSArKzsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKF9QREZfUFNPcE5hbWVzW2ldLm5hbWUgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICBGWF9GTE9BVCogcGQgPSBGWF9BbGxvYyhGWF9GTE9BVCwgMSk7DQotICAgICAgICAgICAgICAgICpwZCA9IEZYX2F0b2Yod29yZCk7DQotICAgICAgICAgICAgICAgIG1fT3BlcmF0b3JzLkFkZCgoRlhfTFBWT0lEKVBTT1BfQ09OU1QpOw0KLSAgICAgICAgICAgICAgICBtX09wZXJhdG9ycy5BZGQocGQpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi0jZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NWYNCi1GWF9CT09MIENQREZfUFNFbmdpbmU6OkRvT3BlcmF0b3IoUERGX1BTT1Agb3ApDQotew0KLSAgICBpbnQgaTEsIGkyOw0KLSAgICBGWF9GTE9BVCBkMSwgZDI7DQotICAgIHN3aXRjaCAob3ApIHsNCi0gICAgICAgIGNhc2UgUFNPUF9BREQ6DQotICAgICAgICAgICAgZDEgPSBQb3AoKTsNCi0gICAgICAgICAgICBkMiA9IFBvcCgpOw0KLSAgICAgICAgICAgIFB1c2goZDEgKyBkMik7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIFBTT1BfU1VCOg0KLSAgICAgICAgICAgIGQyID0gUG9wKCk7DQotICAgICAgICAgICAgZDEgPSBQb3AoKTsNCi0gICAgICAgICAgICBQdXNoKGQxIC0gZDIpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBQU09QX01VTDoNCi0gICAgICAgICAgICBkMSA9IFBvcCgpOw0KLSAgICAgICAgICAgIGQyID0gUG9wKCk7DQotICAgICAgICAgICAgUHVzaChkMSAqIGQyKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgUFNPUF9ESVY6DQotICAgICAgICAgICAgZDIgPSBQb3AoKTsNCi0gICAgICAgICAgICBkMSA9IFBvcCgpOw0KLSAgICAgICAgICAgIFB1c2goZDEgLyBkMik7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIFBTT1BfSURJVjoNCi0gICAgICAgICAgICBpMiA9IChpbnQpUG9wKCk7DQotICAgICAgICAgICAgaTEgPSAoaW50KVBvcCgpOw0KLSAgICAgICAgICAgIFB1c2goaTEgLyBpMik7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIFBTT1BfTU9EOg0KLSAgICAgICAgICAgIGkyID0gKGludClQb3AoKTsNCi0gICAgICAgICAgICBpMSA9IChpbnQpUG9wKCk7DQotICAgICAgICAgICAgUHVzaChpMSAlIGkyKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgUFNPUF9ORUc6DQotICAgICAgICAgICAgZDEgPSBQb3AoKTsNCi0gICAgICAgICAgICBQdXNoKC1kMSk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIFBTT1BfQUJTOg0KLSAgICAgICAgICAgIGQxID0gUG9wKCk7DQotICAgICAgICAgICAgUHVzaCgoRlhfRkxPQVQpRlhTWVNfZmFicyhkMSkpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBQU09QX0NFSUxJTkc6DQotICAgICAgICAgICAgZDEgPSBQb3AoKTsNCi0gICAgICAgICAgICBQdXNoKChGWF9GTE9BVClGWFNZU19jZWlsKGQxKSk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIFBTT1BfRkxPT1I6DQotICAgICAgICAgICAgZDEgPSBQb3AoKTsNCi0gICAgICAgICAgICBQdXNoKChGWF9GTE9BVClGWFNZU19mbG9vcihkMSkpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBQU09QX1JPVU5EOg0KLSAgICAgICAgICAgIGQxID0gUG9wKCk7DQotICAgICAgICAgICAgUHVzaChGWFNZU19yb3VuZChkMSkpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBQU09QX1RSVU5DQVRFOg0KLSAgICAgICAgICAgIGkxID0gKGludClQb3AoKTsNCi0gICAgICAgICAgICBQdXNoKGkxKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgUFNPUF9TUVJUOg0KLSAgICAgICAgICAgIGQxID0gUG9wKCk7DQotICAgICAgICAgICAgUHVzaCgoRlhfRkxPQVQpRlhTWVNfc3FydChkMSkpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBQU09QX1NJTjoNCi0gICAgICAgICAgICBkMSA9IFBvcCgpOw0KLSAgICAgICAgICAgIFB1c2goKEZYX0ZMT0FUKUZYU1lTX3NpbihkMSAqIFBJIC8gMTgwLjBmKSk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIFBTT1BfQ09TOg0KLSAgICAgICAgICAgIGQxID0gUG9wKCk7DQotICAgICAgICAgICAgUHVzaCgoRlhfRkxPQVQpRlhTWVNfY29zKGQxICogUEkgLyAxODAuMGYpKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgUFNPUF9BVEFOOg0KLSAgICAgICAgICAgIGQyID0gUG9wKCk7DQotICAgICAgICAgICAgZDEgPSBQb3AoKTsNCi0gICAgICAgICAgICBkMSA9IChGWF9GTE9BVCkoRlhTWVNfYXRhbjIoZDEsIGQyKSAqIDE4MC4wIC8gUEkpOw0KLSAgICAgICAgICAgIGlmIChkMSA8IDApIHsNCi0gICAgICAgICAgICAgICAgZDEgKz0gMzYwOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBQdXNoKGQxKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgUFNPUF9FWFA6DQotICAgICAgICAgICAgZDIgPSBQb3AoKTsNCi0gICAgICAgICAgICBkMSA9IFBvcCgpOw0KLSAgICAgICAgICAgIFB1c2goKEZYX0ZMT0FUKUZYU1lTX3BvdyhkMSwgZDIpKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgUFNPUF9MTjoNCi0gICAgICAgICAgICBkMSA9IFBvcCgpOw0KLSAgICAgICAgICAgIFB1c2goKEZYX0ZMT0FUKUZYU1lTX2xvZyhkMSkpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBQU09QX0xPRzoNCi0gICAgICAgICAgICBkMSA9IFBvcCgpOw0KLSAgICAgICAgICAgIFB1c2goKEZYX0ZMT0FUKUZYU1lTX2xvZzEwKGQxKSk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIFBTT1BfQ1ZJOg0KLSAgICAgICAgICAgIGkxID0gKGludClQb3AoKTsNCi0gICAgICAgICAgICBQdXNoKGkxKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgUFNPUF9DVlI6DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIFBTT1BfRVE6DQotICAgICAgICAgICAgZDIgPSBQb3AoKTsNCi0gICAgICAgICAgICBkMSA9IFBvcCgpOw0KLSAgICAgICAgICAgIFB1c2goKGludCkoZDEgPT0gZDIpKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgUFNPUF9ORToNCi0gICAgICAgICAgICBkMiA9IFBvcCgpOw0KLSAgICAgICAgICAgIGQxID0gUG9wKCk7DQotICAgICAgICAgICAgUHVzaCgoaW50KShkMSAhPSBkMikpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBQU09QX0dUOg0KLSAgICAgICAgICAgIGQyID0gUG9wKCk7DQotICAgICAgICAgICAgZDEgPSBQb3AoKTsNCi0gICAgICAgICAgICBQdXNoKChpbnQpKGQxID4gZDIpKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgUFNPUF9HRToNCi0gICAgICAgICAgICBkMiA9IFBvcCgpOw0KLSAgICAgICAgICAgIGQxID0gUG9wKCk7DQotICAgICAgICAgICAgUHVzaCgoaW50KShkMSA+PSBkMikpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBQU09QX0xUOg0KLSAgICAgICAgICAgIGQyID0gUG9wKCk7DQotICAgICAgICAgICAgZDEgPSBQb3AoKTsNCi0gICAgICAgICAgICBQdXNoKChpbnQpKGQxIDwgZDIpKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgUFNPUF9MRToNCi0gICAgICAgICAgICBkMiA9IFBvcCgpOw0KLSAgICAgICAgICAgIGQxID0gUG9wKCk7DQotICAgICAgICAgICAgUHVzaCgoaW50KShkMSA8PSBkMikpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBQU09QX0FORDoNCi0gICAgICAgICAgICBpMSA9IChpbnQpUG9wKCk7DQotICAgICAgICAgICAgaTIgPSAoaW50KVBvcCgpOw0KLSAgICAgICAgICAgIFB1c2goaTEgJiBpMik7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIFBTT1BfT1I6DQotICAgICAgICAgICAgaTEgPSAoaW50KVBvcCgpOw0KLSAgICAgICAgICAgIGkyID0gKGludClQb3AoKTsNCi0gICAgICAgICAgICBQdXNoKGkxIHwgaTIpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBQU09QX1hPUjoNCi0gICAgICAgICAgICBpMSA9IChpbnQpUG9wKCk7DQotICAgICAgICAgICAgaTIgPSAoaW50KVBvcCgpOw0KLSAgICAgICAgICAgIFB1c2goaTEgXiBpMik7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIFBTT1BfTk9UOg0KLSAgICAgICAgICAgIGkxID0gKGludClQb3AoKTsNCi0gICAgICAgICAgICBQdXNoKChpbnQpIWkxKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgUFNPUF9CSVRTSElGVDogew0KLSAgICAgICAgICAgICAgICBpbnQgc2hpZnQgPSAoaW50KVBvcCgpOw0KLSAgICAgICAgICAgICAgICBpbnQgaSA9IChpbnQpUG9wKCk7DQotICAgICAgICAgICAgICAgIGlmIChzaGlmdCA+IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIFB1c2goaSA8PCBzaGlmdCk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBQdXNoKGkgPj4gLXNoaWZ0KTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIFBTT1BfVFJVRToNCi0gICAgICAgICAgICBQdXNoKDEpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBQU09QX0ZBTFNFOg0KLSAgICAgICAgICAgIFB1c2goMCk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIFBTT1BfUE9QOg0KLSAgICAgICAgICAgIFBvcCgpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBQU09QX0VYQ0g6DQotICAgICAgICAgICAgZDIgPSBQb3AoKTsNCi0gICAgICAgICAgICBkMSA9IFBvcCgpOw0KLSAgICAgICAgICAgIFB1c2goZDIpOw0KLSAgICAgICAgICAgIFB1c2goZDEpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBQU09QX0RVUDoNCi0gICAgICAgICAgICBkMSA9IFBvcCgpOw0KLSAgICAgICAgICAgIFB1c2goZDEpOw0KLSAgICAgICAgICAgIFB1c2goZDEpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBQU09QX0NPUFk6IHsNCi0gICAgICAgICAgICAgICAgaW50IG4gPSAoaW50KVBvcCgpOw0KLSAgICAgICAgICAgICAgICBpZiAobiA8IDAgfHwgbiA+IFBTRU5HSU5FX1NUQUNLU0laRSB8fCBtX1N0YWNrQ291bnQgKyBuID4gUFNFTkdJTkVfU1RBQ0tTSVpFIHx8IG4gPiBtX1N0YWNrQ291bnQpIHsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSArKykgew0KLSAgICAgICAgICAgICAgICAgICAgbV9TdGFja1ttX1N0YWNrQ291bnQgKyBpXSA9IG1fU3RhY2tbbV9TdGFja0NvdW50ICsgaSAtIG5dOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG1fU3RhY2tDb3VudCArPSBuOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIFBTT1BfSU5ERVg6IHsNCi0gICAgICAgICAgICAgICAgaW50IG4gPSAoaW50KVBvcCgpOw0KLSAgICAgICAgICAgICAgICBpZiAobiA8IDAgfHwgbiA+PSBtX1N0YWNrQ291bnQpIHsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIFB1c2gobV9TdGFja1ttX1N0YWNrQ291bnQgLSBuIC0gMV0pOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIFBTT1BfUk9MTDogew0KLSAgICAgICAgICAgICAgICBpbnQgaiA9IChpbnQpUG9wKCk7DQotICAgICAgICAgICAgICAgIGludCBuID0gKGludClQb3AoKTsNCi0gICAgICAgICAgICAgICAgaWYgKG1fU3RhY2tDb3VudCA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAobiA8IDAgfHwgbiA+IG1fU3RhY2tDb3VudCkgew0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKGogPCAwKQ0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAtajsgaSArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIGZpcnN0ID0gbV9TdGFja1ttX1N0YWNrQ291bnQgLSBuXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgbiAtIDE7IGlpICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RhY2tbbV9TdGFja0NvdW50IC0gbiArIGlpXSA9IG1fU3RhY2tbbV9TdGFja0NvdW50IC0gbiArIGlpICsgMV07DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RhY2tbbV9TdGFja0NvdW50IC0gMV0gPSBmaXJzdDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBqOyBpICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQgbGFzdCA9IG1fU3RhY2tbbV9TdGFja0NvdW50IC0gMV07DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaWkgPSAwOyBpaSA8IG4gLSAxOyBpaSArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0YWNrW21fU3RhY2tDb3VudCAtIGlpIC0gMV0gPSBtX1N0YWNrW21fU3RhY2tDb3VudCAtIGlpIC0gMl07DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RhY2tbbV9TdGFja0NvdW50IC0gaWkgLSAxXSA9IGxhc3Q7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgYnJlYWs7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXN0YXRpYyBGWF9GTE9BVCBQREZfSW50ZXJwb2xhdGUoRlhfRkxPQVQgeCwgRlhfRkxPQVQgeG1pbiwgRlhfRkxPQVQgeG1heCwgRlhfRkxPQVQgeW1pbiwgRlhfRkxPQVQgeW1heCkNCi17DQotICAgIHJldHVybiAoKHggLSB4bWluKSAqICh5bWF4IC0geW1pbikgLyAoeG1heCAtIHhtaW4pKSArIHltaW47DQotfQ0KLXN0YXRpYyBGWF9EV09SRCBfR2V0Qml0czMyKEZYX0xQQ0JZVEUgcERhdGEsIGludCBiaXRwb3MsIGludCBuYml0cykNCi17DQotICAgIGludCByZXN1bHQgPSAwOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iaXRzOyBpICsrKQ0KLSAgICAgICAgaWYgKHBEYXRhWyhiaXRwb3MgKyBpKSAvIDhdICYgKDEgPDwgKDcgLSAoYml0cG9zICsgaSkgJSA4KSkpIHsNCi0gICAgICAgICAgICByZXN1bHQgfD0gMSA8PCAobmJpdHMgLSBpIC0gMSk7DQotICAgICAgICB9DQotICAgIHJldHVybiByZXN1bHQ7DQotfQ0KLXR5cGVkZWYgc3RydWN0IHsNCi0gICAgRlhfRkxPQVQJZW5jb2RlX21heCwgZW5jb2RlX21pbjsNCi0gICAgaW50CQkJc2l6ZXM7DQotfSBTYW1wbGVFbmNvZGVJbmZvOw0KLXR5cGVkZWYgc3RydWN0IHsNCi0gICAgRlhfRkxPQVQJZGVjb2RlX21heCwgZGVjb2RlX21pbjsNCi19IFNhbXBsZURlY29kZUluZm87DQotY2xhc3MgQ1BERl9TYW1wbGVkRnVuYyA6IHB1YmxpYyBDUERGX0Z1bmN0aW9uDQotew0KLXB1YmxpYzoNCi0gICAgQ1BERl9TYW1wbGVkRnVuYygpOw0KLSAgICB2aXJ0dWFsIH5DUERGX1NhbXBsZWRGdW5jKCk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJdl9Jbml0KENQREZfT2JqZWN0KiBwT2JqKTsNCi0gICAgdmlydHVhbCBGWF9CT09MCQl2X0NhbGwoRlhfRkxPQVQqIGlucHV0cywgRlhfRkxPQVQqIHJlc3VsdHMpIGNvbnN0Ow0KLSAgICBTYW1wbGVFbmNvZGVJbmZvKgltX3BFbmNvZGVJbmZvOw0KLSAgICBTYW1wbGVEZWNvZGVJbmZvKgltX3BEZWNvZGVJbmZvOw0KLSAgICBGWF9EV09SRAltX25CaXRzUGVyU2FtcGxlLCBtX1NhbXBsZU1heDsNCi0gICAgQ1BERl9TdHJlYW1BY2MqCW1fcFNhbXBsZVN0cmVhbTsNCi19Ow0KLUNQREZfU2FtcGxlZEZ1bmM6OkNQREZfU2FtcGxlZEZ1bmMoKQ0KLXsNCi0gICAgbV9wU2FtcGxlU3RyZWFtID0gTlVMTDsNCi0gICAgbV9wRW5jb2RlSW5mbyA9IE5VTEw7DQotICAgIG1fcERlY29kZUluZm8gPSBOVUxMOw0KLX0NCi1DUERGX1NhbXBsZWRGdW5jOjp+Q1BERl9TYW1wbGVkRnVuYygpDQotew0KLSAgICBpZiAobV9wU2FtcGxlU3RyZWFtKSB7DQotICAgICAgICBkZWxldGUgbV9wU2FtcGxlU3RyZWFtOw0KLSAgICB9DQotICAgIGlmIChtX3BFbmNvZGVJbmZvKSB7DQotICAgICAgICBGWF9GcmVlKG1fcEVuY29kZUluZm8pOw0KLSAgICB9DQotICAgIGlmIChtX3BEZWNvZGVJbmZvKSB7DQotICAgICAgICBGWF9GcmVlKG1fcERlY29kZUluZm8pOw0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BERl9TYW1wbGVkRnVuYzo6dl9Jbml0KENQREZfT2JqZWN0KiBwT2JqKQ0KLXsNCi0gICAgaWYgKHBPYmotPkdldFR5cGUoKSAhPSBQREZPQkpfU1RSRUFNKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ1BERl9TdHJlYW0qIHBTdHJlYW0gPSAoQ1BERl9TdHJlYW0qKXBPYmo7DQotICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSBwU3RyZWFtLT5HZXREaWN0KCk7DQotICAgIENQREZfQXJyYXkqIHBTaXplID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJTaXplIikpOw0KLSAgICBDUERGX0FycmF5KiBwRW5jb2RlID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJFbmNvZGUiKSk7DQotICAgIENQREZfQXJyYXkqIHBEZWNvZGUgPSBwRGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIkRlY29kZSIpKTsNCi0gICAgbV9uQml0c1BlclNhbXBsZSA9IHBEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJCaXRzUGVyU2FtcGxlIikpOw0KLSAgICBtX1NhbXBsZU1heCA9IDB4ZmZmZmZmZmYgPj4gKDMyIC0gbV9uQml0c1BlclNhbXBsZSk7DQotICAgIG1fcFNhbXBsZVN0cmVhbSA9IEZYX05FVyBDUERGX1N0cmVhbUFjYzsNCi0gICAgbV9wU2FtcGxlU3RyZWFtLT5Mb2FkQWxsRGF0YShwU3RyZWFtLCBGQUxTRSk7DQotICAgIG1fcEVuY29kZUluZm8gPSBGWF9BbGxvYyhTYW1wbGVFbmNvZGVJbmZvLCBtX25JbnB1dHMpOw0KLSAgICBpbnQgaTsNCi0gICAgRlhfRFdPUkQgblRvdGFsU2FtcGxlcyA9IDE7DQotICAgIGZvciAoaSA9IDA7IGkgPCBtX25JbnB1dHM7IGkgKyspIHsNCi0gICAgICAgIG1fcEVuY29kZUluZm9baV0uc2l6ZXMgPSBwU2l6ZS0+R2V0SW50ZWdlcihpKTsNCi0gICAgICAgIGlmICghcFNpemUgJiYgaSA9PSAwKSB7DQotICAgICAgICAgICAgbV9wRW5jb2RlSW5mb1tpXS5zaXplcyA9IHBEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJTaXplIikpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG5Ub3RhbFNhbXBsZXMgPiAwICYmIChGWF9VSU5UMzIpKG1fcEVuY29kZUluZm9baV0uc2l6ZXMpID4gVUlOVF9NQVggLyBuVG90YWxTYW1wbGVzKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgblRvdGFsU2FtcGxlcyAqPSBtX3BFbmNvZGVJbmZvW2ldLnNpemVzOw0KLSAgICAgICAgaWYgKHBFbmNvZGUpIHsNCi0gICAgICAgICAgICBtX3BFbmNvZGVJbmZvW2ldLmVuY29kZV9taW4gPSBwRW5jb2RlLT5HZXRGbG9hdChpICogMik7DQotICAgICAgICAgICAgbV9wRW5jb2RlSW5mb1tpXS5lbmNvZGVfbWF4ID0gcEVuY29kZS0+R2V0RmxvYXQoaSAqIDIgKyAxKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbV9wRW5jb2RlSW5mb1tpXS5lbmNvZGVfbWluID0gMDsNCi0gICAgICAgICAgICBpZiAobV9wRW5jb2RlSW5mb1tpXS5zaXplcyA9PSAxKSB7DQotICAgICAgICAgICAgICAgIG1fcEVuY29kZUluZm9baV0uZW5jb2RlX21heCA9IDE7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgbV9wRW5jb2RlSW5mb1tpXS5lbmNvZGVfbWF4ID0gKEZYX0ZMT0FUKW1fcEVuY29kZUluZm9baV0uc2l6ZXMgLSAxOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoblRvdGFsU2FtcGxlcyA+IDAgJiYgbV9uQml0c1BlclNhbXBsZSA+IFVJTlRfTUFYIC8gblRvdGFsU2FtcGxlcykgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG5Ub3RhbFNhbXBsZXMgKj0gbV9uQml0c1BlclNhbXBsZTsNCi0gICAgaWYgKG5Ub3RhbFNhbXBsZXMgPiAwICYmICgoRlhfVUlOVDMyKW1fbk91dHB1dHMpID4gVUlOVF9NQVggLyBuVG90YWxTYW1wbGVzKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgblRvdGFsU2FtcGxlcyAqPSBtX25PdXRwdXRzOw0KLSAgICBpZiAoblRvdGFsU2FtcGxlcyA9PSAwIHx8IG1fcFNhbXBsZVN0cmVhbS0+R2V0U2l6ZSgpICogOCA8IG5Ub3RhbFNhbXBsZXMpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBtX3BEZWNvZGVJbmZvID0gRlhfQWxsb2MoU2FtcGxlRGVjb2RlSW5mbywgbV9uT3V0cHV0cyk7DQotICAgIGZvciAoaSA9IDA7IGkgPCBtX25PdXRwdXRzOyBpICsrKSB7DQotICAgICAgICBpZiAocERlY29kZSkgew0KLSAgICAgICAgICAgIG1fcERlY29kZUluZm9baV0uZGVjb2RlX21pbiA9IHBEZWNvZGUtPkdldEZsb2F0KDIgKiBpKTsNCi0gICAgICAgICAgICBtX3BEZWNvZGVJbmZvW2ldLmRlY29kZV9tYXggPSBwRGVjb2RlLT5HZXRGbG9hdCgyICogaSArIDEpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBtX3BEZWNvZGVJbmZvW2ldLmRlY29kZV9taW4gPSBtX3BSYW5nZXNbaSAqIDJdOw0KLSAgICAgICAgICAgIG1fcERlY29kZUluZm9baV0uZGVjb2RlX21heCA9IG1fcFJhbmdlc1tpICogMiArIDFdOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENQREZfU2FtcGxlZEZ1bmM6OnZfQ2FsbChGWF9GTE9BVCogaW5wdXRzLCBGWF9GTE9BVCogcmVzdWx0cykgY29uc3QNCi17DQotICAgIGludCBwb3MgPSAwOw0KLSAgICBDRlhfRml4ZWRCdWZHcm93PEZYX0ZMT0FULCAxNj4gZW5jb2RlZF9pbnB1dF9idWYobV9uSW5wdXRzKTsNCi0gICAgRlhfRkxPQVQqIGVuY29kZWRfaW5wdXQgPSBlbmNvZGVkX2lucHV0X2J1ZjsNCi0gICAgQ0ZYX0ZpeGVkQnVmR3JvdzxpbnQsIDMyPiBpbnRfYnVmKG1fbklucHV0cyAqIDIpOw0KLSAgICBpbnQqIGluZGV4ID0gaW50X2J1ZjsNCi0gICAgaW50KiBibG9ja3NpemUgPSBpbmRleCArIG1fbklucHV0czsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX25JbnB1dHM7IGkgKyspIHsNCi0gICAgICAgIGlmIChpID09IDApIHsNCi0gICAgICAgICAgICBibG9ja3NpemVbaV0gPSAxOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBibG9ja3NpemVbaV0gPSBibG9ja3NpemVbaSAtIDFdICogbV9wRW5jb2RlSW5mb1tpIC0gMV0uc2l6ZXM7DQotICAgICAgICB9DQotICAgICAgICBlbmNvZGVkX2lucHV0W2ldID0gUERGX0ludGVycG9sYXRlKGlucHV0c1tpXSwgbV9wRG9tYWluc1tpICogMl0sIG1fcERvbWFpbnNbaSAqIDIgKyAxXSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wRW5jb2RlSW5mb1tpXS5lbmNvZGVfbWluLCBtX3BFbmNvZGVJbmZvW2ldLmVuY29kZV9tYXgpOw0KLSAgICAgICAgaW5kZXhbaV0gPSAoaW50KWVuY29kZWRfaW5wdXRbaV07DQotICAgICAgICBpZiAoaW5kZXhbaV0gPCAwKSB7DQotICAgICAgICAgICAgaW5kZXhbaV0gPSAwOw0KLSAgICAgICAgfSBlbHNlIGlmIChpbmRleFtpXSA+IG1fcEVuY29kZUluZm9baV0uc2l6ZXMgLSAxKSB7DQotICAgICAgICAgICAgaW5kZXhbaV0gPSBtX3BFbmNvZGVJbmZvW2ldLnNpemVzIC0gMTsNCi0gICAgICAgIH0NCi0gICAgICAgIHBvcyArPSBpbmRleFtpXSAqIGJsb2Nrc2l6ZVtpXTsNCi0gICAgfQ0KLSAgICBpbnQgYml0cG9zID0gcG9zICogbV9uQml0c1BlclNhbXBsZSAqIG1fbk91dHB1dHM7DQotICAgIEZYX0xQQ0JZVEUgcFNhbXBsZURhdGEgPSBtX3BTYW1wbGVTdHJlYW0tPkdldERhdGEoKTsNCi0gICAgaWYgKHBTYW1wbGVEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBmb3IgKGludCBqID0gMDsgaiA8IG1fbk91dHB1dHM7IGogKyspIHsNCi0gICAgICAgIEZYX0RXT1JEIHNhbXBsZSA9IF9HZXRCaXRzMzIocFNhbXBsZURhdGEsIGJpdHBvcyArIGogKiBtX25CaXRzUGVyU2FtcGxlLCBtX25CaXRzUGVyU2FtcGxlKTsNCi0gICAgICAgIEZYX0ZMT0FUIGVuY29kZWQgPSAoRlhfRkxPQVQpc2FtcGxlOw0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX25JbnB1dHM7IGkgKyspIHsNCi0gICAgICAgICAgICBpZiAoaW5kZXhbaV0gPT0gbV9wRW5jb2RlSW5mb1tpXS5zaXplcyAtIDEpIHsNCi0gICAgICAgICAgICAgICAgaWYgKGluZGV4W2ldID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIGVuY29kZWQgPSBlbmNvZGVkX2lucHV0W2ldICogKEZYX0ZMT0FUKXNhbXBsZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGludCBiaXRwb3MxID0gYml0cG9zICsgbV9uQml0c1BlclNhbXBsZSAqIG1fbk91dHB1dHMgKiBibG9ja3NpemVbaV07DQotICAgICAgICAgICAgICAgIEZYX0RXT1JEIHNhbXBsZTEgPSBfR2V0Qml0czMyKHBTYW1wbGVEYXRhLCBiaXRwb3MxICsgaiAqIG1fbkJpdHNQZXJTYW1wbGUsIG1fbkJpdHNQZXJTYW1wbGUpOw0KLSAgICAgICAgICAgICAgICBlbmNvZGVkICs9IChlbmNvZGVkX2lucHV0W2ldIC0gaW5kZXhbaV0pICogKChGWF9GTE9BVClzYW1wbGUxIC0gKEZYX0ZMT0FUKXNhbXBsZSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcmVzdWx0c1tqXSA9IFBERl9JbnRlcnBvbGF0ZShlbmNvZGVkLCAwLCAoRlhfRkxPQVQpbV9TYW1wbGVNYXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcERlY29kZUluZm9bal0uZGVjb2RlX21pbiwgbV9wRGVjb2RlSW5mb1tqXS5kZWNvZGVfbWF4KTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotY2xhc3MgQ1BERl9QU0Z1bmMgOiBwdWJsaWMgQ1BERl9GdW5jdGlvbg0KLXsNCi1wdWJsaWM6DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJdl9Jbml0KENQREZfT2JqZWN0KiBwT2JqKTsNCi0gICAgdmlydHVhbCBGWF9CT09MCQl2X0NhbGwoRlhfRkxPQVQqIGlucHV0cywgRlhfRkxPQVQqIHJlc3VsdHMpIGNvbnN0Ow0KLSAgICBDUERGX1BTRW5naW5lIG1fUFM7DQotfTsNCi1GWF9CT09MIENQREZfUFNGdW5jOjp2X0luaXQoQ1BERl9PYmplY3QqIHBPYmopDQotew0KLSAgICBDUERGX1N0cmVhbSogcFN0cmVhbSA9IChDUERGX1N0cmVhbSopcE9iajsNCi0gICAgQ1BERl9TdHJlYW1BY2MgYWNjOw0KLSAgICBhY2MuTG9hZEFsbERhdGEocFN0cmVhbSwgRkFMU0UpOw0KLSAgICByZXR1cm4gbV9QUy5QYXJzZSgoY29uc3QgRlhfQ0hBUiopYWNjLkdldERhdGEoKSwgYWNjLkdldFNpemUoKSk7DQotfQ0KLUZYX0JPT0wgQ1BERl9QU0Z1bmM6OnZfQ2FsbChGWF9GTE9BVCogaW5wdXRzLCBGWF9GTE9BVCogcmVzdWx0cykgY29uc3QNCi17DQotICAgIENQREZfUFNFbmdpbmUmIFBTID0gKENQREZfUFNFbmdpbmUmKW1fUFM7DQotICAgIFBTLlJlc2V0KCk7DQotICAgIGludCBpOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbV9uSW5wdXRzOyBpICsrKSB7DQotICAgICAgICBQUy5QdXNoKGlucHV0c1tpXSk7DQotICAgIH0NCi0gICAgUFMuRXhlY3V0ZSgpOw0KLSAgICBpZiAoUFMuR2V0U3RhY2tTaXplKCkgPCBtX25PdXRwdXRzKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgZm9yIChpID0gMDsgaSA8IG1fbk91dHB1dHM7IGkgKyspIHsNCi0gICAgICAgIHJlc3VsdHNbbV9uT3V0cHV0cyAtIGkgLSAxXSA9IFBTLlBvcCgpOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1jbGFzcyBDUERGX0V4cEludEZ1bmMgOiBwdWJsaWMgQ1BERl9GdW5jdGlvbg0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfRXhwSW50RnVuYygpOw0KLSAgICB2aXJ0dWFsIH5DUERGX0V4cEludEZ1bmMoKTsNCi0gICAgdmlydHVhbCBGWF9CT09MCQl2X0luaXQoQ1BERl9PYmplY3QqIHBPYmopOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCXZfQ2FsbChGWF9GTE9BVCogaW5wdXRzLCBGWF9GTE9BVCogcmVzdWx0cykgY29uc3Q7DQotICAgIEZYX0ZMT0FUCW1fRXhwb25lbnQ7DQotICAgIEZYX0ZMT0FUKgltX3BCZWdpblZhbHVlczsNCi0gICAgRlhfRkxPQVQqCW1fcEVuZFZhbHVlczsNCi0gICAgaW50CQltX25PcmlnT3V0cHV0czsNCi19Ow0KLUNQREZfRXhwSW50RnVuYzo6Q1BERl9FeHBJbnRGdW5jKCkNCi17DQotICAgIG1fcEJlZ2luVmFsdWVzID0gTlVMTDsNCi0gICAgbV9wRW5kVmFsdWVzID0gTlVMTDsNCi19DQotQ1BERl9FeHBJbnRGdW5jOjp+Q1BERl9FeHBJbnRGdW5jKCkNCi17DQotICAgIGlmIChtX3BCZWdpblZhbHVlcykgew0KLSAgICAgICAgRlhfRnJlZShtX3BCZWdpblZhbHVlcyk7DQotICAgIH0NCi0gICAgaWYgKG1fcEVuZFZhbHVlcykgew0KLSAgICAgICAgRlhfRnJlZShtX3BFbmRWYWx1ZXMpOw0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BERl9FeHBJbnRGdW5jOjp2X0luaXQoQ1BERl9PYmplY3QqIHBPYmopDQotew0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gcE9iai0+R2V0RGljdCgpOw0KLSAgICBpZiAocERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIENQREZfQXJyYXkqIHBBcnJheTAgPSBwRGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIkMwIikpOw0KLSAgICBpZiAobV9uT3V0cHV0cyA9PSAwKSB7DQotICAgICAgICBtX25PdXRwdXRzID0gMTsNCi0gICAgICAgIGlmIChwQXJyYXkwKSB7DQotICAgICAgICAgICAgbV9uT3V0cHV0cyA9IHBBcnJheTAtPkdldENvdW50KCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgQ1BERl9BcnJheSogcEFycmF5MSA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiQzEiKSk7DQotICAgIG1fcEJlZ2luVmFsdWVzID0gRlhfQWxsb2MoRlhfRkxPQVQsIG1fbk91dHB1dHMgKiAyKTsNCi0gICAgbV9wRW5kVmFsdWVzID0gRlhfQWxsb2MoRlhfRkxPQVQsIG1fbk91dHB1dHMgKiAyKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX25PdXRwdXRzOyBpICsrKSB7DQotICAgICAgICBtX3BCZWdpblZhbHVlc1tpXSA9IHBBcnJheTAgPyBwQXJyYXkwLT5HZXRGbG9hdChpKSA6IDAuMGY7DQotICAgICAgICBtX3BFbmRWYWx1ZXNbaV0gPSBwQXJyYXkxID8gcEFycmF5MS0+R2V0RmxvYXQoaSkgOiAxLjBmOw0KLSAgICB9DQotICAgIG1fRXhwb25lbnQgPSBwRGljdC0+R2V0RmxvYXQoRlhfQlNUUkMoIk4iKSk7DQotICAgIG1fbk9yaWdPdXRwdXRzID0gbV9uT3V0cHV0czsNCi0gICAgaWYgKG1fbk91dHB1dHMgJiYgbV9uSW5wdXRzID4gSU5UX01BWCAvIG1fbk91dHB1dHMpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBtX25PdXRwdXRzICo9IG1fbklucHV0czsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ1BERl9FeHBJbnRGdW5jOjp2X0NhbGwoRlhfRkxPQVQqIGlucHV0cywgRlhfRkxPQVQqIHJlc3VsdHMpIGNvbnN0DQotew0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbklucHV0czsgaSArKykNCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbV9uT3JpZ091dHB1dHM7IGogKyspIHsNCi0gICAgICAgICAgICByZXN1bHRzW2kgKiBtX25PcmlnT3V0cHV0cyArIGpdID0gbV9wQmVnaW5WYWx1ZXNbal0gKyAoRlhfRkxPQVQpRlhTWVNfcG93KGlucHV0c1tpXSwgbV9FeHBvbmVudCkgKg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobV9wRW5kVmFsdWVzW2pdIC0gbV9wQmVnaW5WYWx1ZXNbal0pOw0KLSAgICAgICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotY2xhc3MgQ1BERl9TdGl0Y2hGdW5jIDogcHVibGljIENQREZfRnVuY3Rpb24NCi17DQotcHVibGljOg0KLSAgICBDUERGX1N0aXRjaEZ1bmMoKTsNCi0gICAgdmlydHVhbCB+Q1BERl9TdGl0Y2hGdW5jKCk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJdl9Jbml0KENQREZfT2JqZWN0KiBwT2JqKTsNCi0gICAgdmlydHVhbCBGWF9CT09MCQl2X0NhbGwoRlhfRkxPQVQqIGlucHV0cywgRlhfRkxPQVQqIHJlc3VsdHMpIGNvbnN0Ow0KLSAgICBpbnQJCQltX25TdWJzOw0KLSAgICBDUERGX0Z1bmN0aW9uKiogbV9wU3ViRnVuY3Rpb25zOw0KLSAgICBGWF9GTE9BVCoJbV9wQm91bmRzOw0KLSAgICBGWF9GTE9BVCoJbV9wRW5jb2RlOw0KLX07DQotQ1BERl9TdGl0Y2hGdW5jOjpDUERGX1N0aXRjaEZ1bmMoKQ0KLXsNCi0gICAgbV9uU3VicyA9IDA7DQotICAgIG1fcFN1YkZ1bmN0aW9ucyA9IE5VTEw7DQotICAgIG1fcEJvdW5kcyA9IE5VTEw7DQotICAgIG1fcEVuY29kZSA9IE5VTEw7DQotfQ0KLUNQREZfU3RpdGNoRnVuYzo6fkNQREZfU3RpdGNoRnVuYygpDQotew0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fblN1YnM7IGkgKyspDQotICAgICAgICBpZiAobV9wU3ViRnVuY3Rpb25zW2ldKSB7DQotICAgICAgICAgICAgZGVsZXRlIG1fcFN1YkZ1bmN0aW9uc1tpXTsNCi0gICAgICAgIH0NCi0gICAgaWYgKG1fcFN1YkZ1bmN0aW9ucykgew0KLSAgICAgICAgRlhfRnJlZShtX3BTdWJGdW5jdGlvbnMpOw0KLSAgICB9DQotICAgIGlmIChtX3BCb3VuZHMpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wQm91bmRzKTsNCi0gICAgfQ0KLSAgICBpZiAobV9wRW5jb2RlKSB7DQotICAgICAgICBGWF9GcmVlKG1fcEVuY29kZSk7DQotICAgIH0NCi19DQotRlhfQk9PTCBDUERGX1N0aXRjaEZ1bmM6OnZfSW5pdChDUERGX09iamVjdCogcE9iaikNCi17DQotICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSBwT2JqLT5HZXREaWN0KCk7DQotICAgIGlmIChwRGljdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ1BERl9BcnJheSogcEFycmF5ID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJGdW5jdGlvbnMiKSk7DQotICAgIGlmIChwQXJyYXkgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fblN1YnMgPSBwQXJyYXktPkdldENvdW50KCk7DQotICAgIGlmIChtX25TdWJzID09IDApIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBtX3BTdWJGdW5jdGlvbnMgPSBGWF9BbGxvYyhDUERGX0Z1bmN0aW9uKiwgbV9uU3Vicyk7DQotICAgIEZYU1lTX21lbXNldDMyKG1fcFN1YkZ1bmN0aW9ucywgMCwgc2l6ZW9mKENQREZfRnVuY3Rpb24qKSptX25TdWJzKTsNCi0gICAgbV9uT3V0cHV0cyA9IDA7DQotICAgIGludCBpOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbV9uU3ViczsgaSArKykgew0KLSAgICAgICAgQ1BERl9PYmplY3QqIHBTdWIgPSBwQXJyYXktPkdldEVsZW1lbnRWYWx1ZShpKTsNCi0gICAgICAgIGlmIChwU3ViID09IHBPYmopIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBtX3BTdWJGdW5jdGlvbnNbaV0gPSBDUERGX0Z1bmN0aW9uOjpMb2FkKHBTdWIpOw0KLSAgICAgICAgaWYgKG1fcFN1YkZ1bmN0aW9uc1tpXSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fcFN1YkZ1bmN0aW9uc1tpXS0+Q291bnRPdXRwdXRzKCkgPiBtX25PdXRwdXRzKSB7DQotICAgICAgICAgICAgbV9uT3V0cHV0cyA9IG1fcFN1YkZ1bmN0aW9uc1tpXS0+Q291bnRPdXRwdXRzKCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9wQm91bmRzID0gRlhfQWxsb2MoRlhfRkxPQVQsIG1fblN1YnMgKyAxKTsNCi0gICAgbV9wQm91bmRzWzBdID0gbV9wRG9tYWluc1swXTsNCi0gICAgcEFycmF5ID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJCb3VuZHMiKSk7DQotICAgIGlmIChwQXJyYXkgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGZvciAoaSA9IDA7IGkgPCBtX25TdWJzIC0gMTsgaSArKykgew0KLSAgICAgICAgbV9wQm91bmRzW2kgKyAxXSA9IHBBcnJheS0+R2V0RmxvYXQoaSk7DQotICAgIH0NCi0gICAgbV9wQm91bmRzW21fblN1YnNdID0gbV9wRG9tYWluc1sxXTsNCi0gICAgbV9wRW5jb2RlID0gRlhfQWxsb2MoRlhfRkxPQVQsIG1fblN1YnMgKiAyKTsNCi0gICAgcEFycmF5ID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJFbmNvZGUiKSk7DQotICAgIGlmIChwQXJyYXkgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGZvciAoaSA9IDA7IGkgPCBtX25TdWJzICogMjsgaSArKykgew0KLSAgICAgICAgbV9wRW5jb2RlW2ldID0gcEFycmF5LT5HZXRGbG9hdChpKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDUERGX1N0aXRjaEZ1bmM6OnZfQ2FsbChGWF9GTE9BVCogaW5wdXRzLCBGWF9GTE9BVCogb3V0cHV0cykgY29uc3QNCi17DQotICAgIEZYX0ZMT0FUIGlucHV0ID0gaW5wdXRzWzBdOw0KLSAgICBpbnQgaTsNCi0gICAgZm9yIChpID0gMDsgaSA8IG1fblN1YnMgLSAxOyBpICsrKQ0KLSAgICAgICAgaWYgKGlucHV0IDwgbV9wQm91bmRzW2kgKyAxXSkgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICBpZiAobV9wU3ViRnVuY3Rpb25zW2ldID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpbnB1dCA9IFBERl9JbnRlcnBvbGF0ZShpbnB1dCwgbV9wQm91bmRzW2ldLCBtX3BCb3VuZHNbaSArIDFdLCBtX3BFbmNvZGVbaSAqIDJdLCBtX3BFbmNvZGVbaSAqIDIgKyAxXSk7DQotICAgIGludCBucmVzdWx0czsNCi0gICAgbV9wU3ViRnVuY3Rpb25zW2ldLT5DYWxsKCZpbnB1dCwgbV9uSW5wdXRzLCBvdXRwdXRzLCBucmVzdWx0cyk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1DUERGX0Z1bmN0aW9uKiBDUERGX0Z1bmN0aW9uOjpMb2FkKENQREZfT2JqZWN0KiBwRnVuY09iaikNCi17DQotICAgIGlmIChwRnVuY09iaiA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDUERGX0Z1bmN0aW9uKiBwRnVuYyA9IE5VTEw7DQotICAgIGludCB0eXBlOw0KLSAgICBpZiAocEZ1bmNPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSRUFNKSB7DQotICAgICAgICB0eXBlID0gKChDUERGX1N0cmVhbSopcEZ1bmNPYmopLT5HZXREaWN0KCktPkdldEludGVnZXIoRlhfQlNUUkMoIkZ1bmN0aW9uVHlwZSIpKTsNCi0gICAgfSBlbHNlIGlmIChwRnVuY09iai0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKSB7DQotICAgICAgICB0eXBlID0gKChDUERGX0RpY3Rpb25hcnkqKXBGdW5jT2JqKS0+R2V0SW50ZWdlcihGWF9CU1RSQygiRnVuY3Rpb25UeXBlIikpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKHR5cGUgPT0gMCkgew0KLSAgICAgICAgcEZ1bmMgPSBGWF9ORVcgQ1BERl9TYW1wbGVkRnVuYzsNCi0gICAgfSBlbHNlIGlmICh0eXBlID09IDIpIHsNCi0gICAgICAgIHBGdW5jID0gRlhfTkVXIENQREZfRXhwSW50RnVuYzsNCi0gICAgfSBlbHNlIGlmICh0eXBlID09IDMpIHsNCi0gICAgICAgIHBGdW5jID0gRlhfTkVXIENQREZfU3RpdGNoRnVuYzsNCi0gICAgfSBlbHNlIGlmICh0eXBlID09IDQpIHsNCi0gICAgICAgIHBGdW5jID0gRlhfTkVXIENQREZfUFNGdW5jOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKCFwRnVuYy0+SW5pdChwRnVuY09iaikpIHsNCi0gICAgICAgIGRlbGV0ZSBwRnVuYzsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiBwRnVuYzsNCi19DQotQ1BERl9GdW5jdGlvbjo6Q1BERl9GdW5jdGlvbigpDQotew0KLSAgICBtX3BEb21haW5zID0gTlVMTDsNCi0gICAgbV9wUmFuZ2VzID0gTlVMTDsNCi19DQotQ1BERl9GdW5jdGlvbjo6fkNQREZfRnVuY3Rpb24oKQ0KLXsNCi0gICAgaWYgKG1fcERvbWFpbnMpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wRG9tYWlucyk7DQotICAgICAgICBtX3BEb21haW5zID0gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAobV9wUmFuZ2VzKSB7DQotICAgICAgICBGWF9GcmVlKG1fcFJhbmdlcyk7DQotICAgICAgICBtX3BSYW5nZXMgPSBOVUxMOw0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BERl9GdW5jdGlvbjo6SW5pdChDUERGX09iamVjdCogcE9iaikNCi17DQotICAgIENQREZfRGljdGlvbmFyeSogcERpY3Q7DQotICAgIGlmIChwT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUkVBTSkgew0KLSAgICAgICAgcERpY3QgPSAoKENQREZfU3RyZWFtKilwT2JqKS0+R2V0RGljdCgpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcERpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KilwT2JqOw0KLSAgICB9DQotICAgIENQREZfQXJyYXkqIHBEb21haW5zID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJEb21haW4iKSk7DQotICAgIGlmIChwRG9tYWlucyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbV9uSW5wdXRzID0gcERvbWFpbnMtPkdldENvdW50KCkgLyAyOw0KLSAgICBpZiAobV9uSW5wdXRzID09IDApIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBtX3BEb21haW5zID0gRlhfQWxsb2MoRlhfRkxPQVQsIG1fbklucHV0cyAqIDIpOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbklucHV0cyAqIDI7IGkgKyspIHsNCi0gICAgICAgIG1fcERvbWFpbnNbaV0gPSBwRG9tYWlucy0+R2V0RmxvYXQoaSk7DQotICAgIH0NCi0gICAgQ1BERl9BcnJheSogcFJhbmdlcyA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiUmFuZ2UiKSk7DQotICAgIG1fbk91dHB1dHMgPSAwOw0KLSAgICBpZiAocFJhbmdlcykgew0KLSAgICAgICAgbV9uT3V0cHV0cyA9IHBSYW5nZXMtPkdldENvdW50KCkgLyAyOw0KLSAgICAgICAgbV9wUmFuZ2VzID0gRlhfQWxsb2MoRlhfRkxPQVQsIG1fbk91dHB1dHMgKiAyKTsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9uT3V0cHV0cyAqIDI7IGkgKyspIHsNCi0gICAgICAgICAgICBtX3BSYW5nZXNbaV0gPSBwUmFuZ2VzLT5HZXRGbG9hdChpKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBGWF9EV09SRCBvbGRfb3V0cHV0cyA9IG1fbk91dHB1dHM7DQotICAgIEZYX0JPT0wgcmV0ID0gdl9Jbml0KHBPYmopOw0KLSAgICBpZiAobV9wUmFuZ2VzICYmIG1fbk91dHB1dHMgPiAoaW50KW9sZF9vdXRwdXRzKSB7DQotICAgICAgICBtX3BSYW5nZXMgPSBGWF9SZWFsbG9jKEZYX0ZMT0FULCBtX3BSYW5nZXMsIG1fbk91dHB1dHMgKiAyKTsNCi0gICAgICAgIGlmIChtX3BSYW5nZXMpIHsNCi0gICAgICAgICAgICBGWFNZU19tZW1zZXQzMihtX3BSYW5nZXMgKyAob2xkX291dHB1dHMgKiAyKSwgMCwgc2l6ZW9mKEZYX0ZMT0FUKSAqIChtX25PdXRwdXRzIC0gb2xkX291dHB1dHMpICogMik7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIHJldDsNCi19DQotRlhfQk9PTCBDUERGX0Z1bmN0aW9uOjpDYWxsKEZYX0ZMT0FUKiBpbnB1dHMsIGludCBuaW5wdXRzLCBGWF9GTE9BVCogcmVzdWx0cywgaW50JiBucmVzdWx0cykgY29uc3QNCi17DQotICAgIGlmIChtX25JbnB1dHMgIT0gbmlucHV0cykgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG5yZXN1bHRzID0gbV9uT3V0cHV0czsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX25JbnB1dHM7IGkgKyspIHsNCi0gICAgICAgIGlmIChpbnB1dHNbaV0gPCBtX3BEb21haW5zW2kgKiAyXSkgew0KLSAgICAgICAgICAgIGlucHV0c1tpXSA9IG1fcERvbWFpbnNbaSAqIDJdOw0KLSAgICAgICAgfSBlbHNlIGlmIChpbnB1dHNbaV0gPiBtX3BEb21haW5zW2kgKiAyICsgMV0pIHsNCi0gICAgICAgICAgICBpbnB1dHNbaV0gPSBtX3BEb21haW5zW2kgKiAyXSArIDE7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgdl9DYWxsKGlucHV0cywgcmVzdWx0cyk7DQotICAgIGlmIChtX3BSYW5nZXMpIHsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9uT3V0cHV0czsgaSArKykgew0KLSAgICAgICAgICAgIGlmIChyZXN1bHRzW2ldIDwgbV9wUmFuZ2VzW2kgKiAyXSkgew0KLSAgICAgICAgICAgICAgICByZXN1bHRzW2ldID0gbV9wUmFuZ2VzW2kgKiAyXTsNCi0gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdHNbaV0gPiBtX3BSYW5nZXNbaSAqIDIgKyAxXSkgew0KLSAgICAgICAgICAgICAgICByZXN1bHRzW2ldID0gbV9wUmFuZ2VzW2kgKiAyICsgMV07DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX21vZHVsZS5oIgorI2luY2x1ZGUgInBhZ2VpbnQuaCIKKyNpbmNsdWRlIDxsaW1pdHMuaD4KK2NsYXNzIENQREZfUFNFbmdpbmU7Cit0eXBlZGVmIGVudW0ge1BTT1BfQURELCBQU09QX1NVQiwgUFNPUF9NVUwsIFBTT1BfRElWLCBQU09QX0lESVYsIFBTT1BfTU9ELAorICAgICAgICAgICAgICBQU09QX05FRywgUFNPUF9BQlMsIFBTT1BfQ0VJTElORywgUFNPUF9GTE9PUiwgUFNPUF9ST1VORCwgUFNPUF9UUlVOQ0FURSwKKyAgICAgICAgICAgICAgUFNPUF9TUVJULCBQU09QX1NJTiwgUFNPUF9DT1MsIFBTT1BfQVRBTiwgUFNPUF9FWFAsIFBTT1BfTE4sIFBTT1BfTE9HLAorICAgICAgICAgICAgICBQU09QX0NWSSwgUFNPUF9DVlIsIFBTT1BfRVEsIFBTT1BfTkUsIFBTT1BfR1QsIFBTT1BfR0UsIFBTT1BfTFQsIFBTT1BfTEUsCisgICAgICAgICAgICAgIFBTT1BfQU5ELCBQU09QX09SLCBQU09QX1hPUiwgUFNPUF9OT1QsIFBTT1BfQklUU0hJRlQsIFBTT1BfVFJVRSwgUFNPUF9GQUxTRSwKKyAgICAgICAgICAgICAgUFNPUF9JRiwgUFNPUF9JRkVMU0UsIFBTT1BfUE9QLCBQU09QX0VYQ0gsIFBTT1BfRFVQLCBQU09QX0NPUFksCisgICAgICAgICAgICAgIFBTT1BfSU5ERVgsIFBTT1BfUk9MTCwgUFNPUF9QUk9DLCBQU09QX0NPTlNUCisgICAgICAgICAgICAgfSBQREZfUFNPUDsKK2NsYXNzIENQREZfUFNQcm9jIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICB+Q1BERl9QU1Byb2MoKTsKKyAgICBGWF9CT09MCVBhcnNlKENQREZfU2ltcGxlUGFyc2VyJiBwYXJzZXIpOworICAgIEZYX0JPT0wJRXhlY3V0ZShDUERGX1BTRW5naW5lKiBwRW5naW5lKTsKKyAgICBDRlhfUHRyQXJyYXkJCW1fT3BlcmF0b3JzOworfTsKKyNkZWZpbmUgUFNFTkdJTkVfU1RBQ0tTSVpFIDEwMAorY2xhc3MgQ1BERl9QU0VuZ2luZSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ1BERl9QU0VuZ2luZSgpOworICAgIH5DUERGX1BTRW5naW5lKCk7CisgICAgRlhfQk9PTAlQYXJzZShjb25zdCBGWF9DSEFSKiBzdHJpbmcsIGludCBzaXplKTsKKyAgICBGWF9CT09MCUV4ZWN1dGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fTWFpblByb2MuRXhlY3V0ZSh0aGlzKTsKKyAgICB9CisgICAgRlhfQk9PTAlEb09wZXJhdG9yKFBERl9QU09QIG9wKTsKKyAgICB2b2lkCVJlc2V0KCkKKyAgICB7CisgICAgICAgIG1fU3RhY2tDb3VudCA9IDA7CisgICAgfQorICAgIHZvaWQJUHVzaChGWF9GTE9BVCB2YWx1ZSk7CisgICAgdm9pZAlQdXNoKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIFB1c2goKEZYX0ZMT0FUKXZhbHVlKTsKKyAgICB9CisgICAgRlhfRkxPQVQJUG9wKCk7CisgICAgaW50CQlHZXRTdGFja1NpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fU3RhY2tDb3VudDsKKyAgICB9Citwcml2YXRlOgorICAgIEZYX0ZMT0FUCW1fU3RhY2tbUFNFTkdJTkVfU1RBQ0tTSVpFXTsKKyAgICBpbnQJCW1fU3RhY2tDb3VudDsKKyAgICBDUERGX1BTUHJvYwltX01haW5Qcm9jOworfTsKK0NQREZfUFNQcm9jOjp+Q1BERl9QU1Byb2MoKQoreworICAgIGludCBzaXplID0gbV9PcGVyYXRvcnMuR2V0U2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgeworICAgICAgICBpZiAobV9PcGVyYXRvcnNbaV0gPT0gKEZYX0xQVk9JRClQU09QX1BST0MpIHsKKyAgICAgICAgICAgIGRlbGV0ZSAoQ1BERl9QU1Byb2MqKW1fT3BlcmF0b3JzW2kgKyAxXTsKKyAgICAgICAgICAgIGkgKys7CisgICAgICAgIH0gZWxzZSBpZiAobV9PcGVyYXRvcnNbaV0gPT0gKEZYX0xQVk9JRClQU09QX0NPTlNUKSB7CisgICAgICAgICAgICBGWF9GcmVlKChGWF9GTE9BVCopbV9PcGVyYXRvcnNbaSArIDFdKTsKKyAgICAgICAgICAgIGkgKys7CisgICAgICAgIH0KKyAgICB9Cit9CisjcHJhZ21hIG9wdGltaXplKCAiIiwgb2ZmICkKK0ZYX0JPT0wgQ1BERl9QU1Byb2M6OkV4ZWN1dGUoQ1BERl9QU0VuZ2luZSogcEVuZ2luZSkKK3sKKyAgICBpbnQgc2l6ZSA9IG1fT3BlcmF0b3JzLkdldFNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkgKyspIHsKKyAgICAgICAgUERGX1BTT1Agb3AgPSAoUERGX1BTT1ApKEZYX1VJTlRQVFIpbV9PcGVyYXRvcnNbaV07CisgICAgICAgIGlmIChvcCA9PSBQU09QX1BST0MpIHsKKyAgICAgICAgICAgIGkgKys7CisgICAgICAgIH0gZWxzZSBpZiAob3AgPT0gUFNPUF9DT05TVCkgeworICAgICAgICAgICAgcEVuZ2luZS0+UHVzaCgqKEZYX0ZMT0FUKiltX09wZXJhdG9yc1tpICsgMV0pOworICAgICAgICAgICAgaSArKzsKKyAgICAgICAgfSBlbHNlIGlmIChvcCA9PSBQU09QX0lGKSB7CisgICAgICAgICAgICBpZiAoaSA8IDIgfHwgbV9PcGVyYXRvcnNbaSAtIDJdICE9IChGWF9MUFZPSUQpUFNPUF9QUk9DKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChpbnQpcEVuZ2luZS0+UG9wKCkpIHsKKyAgICAgICAgICAgICAgICAoKENQREZfUFNQcm9jKiltX09wZXJhdG9yc1tpIC0gMV0pLT5FeGVjdXRlKHBFbmdpbmUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG9wID09IFBTT1BfSUZFTFNFKSB7CisgICAgICAgICAgICBpZiAoaSA8IDQgfHwgbV9PcGVyYXRvcnNbaSAtIDJdICE9IChGWF9MUFZPSUQpUFNPUF9QUk9DIHx8CisgICAgICAgICAgICAgICAgICAgIG1fT3BlcmF0b3JzW2kgLSA0XSAhPSAoRlhfTFBWT0lEKVBTT1BfUFJPQykgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoaW50KXBFbmdpbmUtPlBvcCgpKSB7CisgICAgICAgICAgICAgICAgKChDUERGX1BTUHJvYyopbV9PcGVyYXRvcnNbaSAtIDNdKS0+RXhlY3V0ZShwRW5naW5lKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgKChDUERGX1BTUHJvYyopbV9PcGVyYXRvcnNbaSAtIDFdKS0+RXhlY3V0ZShwRW5naW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBFbmdpbmUtPkRvT3BlcmF0b3Iob3ApOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorI3ByYWdtYSBvcHRpbWl6ZSggIiIsIG9uICkKK0NQREZfUFNFbmdpbmU6OkNQREZfUFNFbmdpbmUoKQoreworICAgIG1fU3RhY2tDb3VudCA9IDA7Cit9CitDUERGX1BTRW5naW5lOjp+Q1BERl9QU0VuZ2luZSgpCit7Cit9Cit2b2lkIENQREZfUFNFbmdpbmU6OlB1c2goRlhfRkxPQVQgdikKK3sKKyAgICBpZiAobV9TdGFja0NvdW50ID09IDEwMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fU3RhY2tbbV9TdGFja0NvdW50KytdID0gdjsKK30KK0ZYX0ZMT0FUIENQREZfUFNFbmdpbmU6OlBvcCgpCit7CisgICAgaWYgKG1fU3RhY2tDb3VudCA9PSAwKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gbV9TdGFja1stLW1fU3RhY2tDb3VudF07Cit9Citjb25zdCBzdHJ1Y3QgX1BERl9QU09wTmFtZSB7CisgICAgY29uc3QgRlhfQ0hBUiogbmFtZTsKKyAgICBQREZfUFNPUCBvcDsKK30gX1BERl9QU09wTmFtZXNbXSA9IHsKKyAgICB7ImFkZCIsIFBTT1BfQUREfSwgeyJzdWIiLCBQU09QX1NVQn0sIHsibXVsIiwgUFNPUF9NVUx9LCB7ImRpdiIsIFBTT1BfRElWfSwKKyAgICB7ImlkaXYiLCBQU09QX0lESVZ9LCB7Im1vZCIsIFBTT1BfTU9EfSwgeyJuZWciLCBQU09QX05FR30sIHsiYWJzIiwgUFNPUF9BQlN9LAorICAgIHsiY2VpbGluZyIsIFBTT1BfQ0VJTElOR30sIHsiZmxvb3IiLCBQU09QX0ZMT09SfSwgeyJyb3VuZCIsIFBTT1BfUk9VTkR9LAorICAgIHsidHJ1bmNhdGUiLCBQU09QX1RSVU5DQVRFfSwgeyJzcXJ0IiwgUFNPUF9TUVJUfSwgeyJzaW4iLCBQU09QX1NJTn0sCisgICAgeyJjb3MiLCBQU09QX0NPU30sIHsiYXRhbiIsIFBTT1BfQVRBTn0sIHsiZXhwIiwgUFNPUF9FWFB9LCB7ImxuIiwgUFNPUF9MTn0sCisgICAgeyJsb2ciLCBQU09QX0xPR30sIHsiY3ZpIiwgUFNPUF9DVkl9LCB7ImN2ciIsIFBTT1BfQ1ZSfSwgeyJlcSIsIFBTT1BfRVF9LAorICAgIHsibmUiLCBQU09QX05FfSwgeyJndCIsIFBTT1BfR1R9LCB7ImdlIiwgUFNPUF9HRX0sIHsibHQiLCBQU09QX0xUfSwKKyAgICB7ImxlIiwgUFNPUF9MRX0sIHsiYW5kIiwgUFNPUF9BTkR9LCB7Im9yIiwgUFNPUF9PUn0sIHsieG9yIiwgUFNPUF9YT1J9LAorICAgIHsibm90IiwgUFNPUF9OT1R9LCB7ImJpdHNoaWZ0IiwgUFNPUF9CSVRTSElGVH0sIHsidHJ1ZSIsIFBTT1BfVFJVRX0sCisgICAgeyJmYWxzZSIsIFBTT1BfRkFMU0V9LCB7ImlmIiwgUFNPUF9JRn0sIHsiaWZlbHNlIiwgUFNPUF9JRkVMU0V9LAorICAgIHsicG9wIiwgUFNPUF9QT1B9LCB7ImV4Y2giLCBQU09QX0VYQ0h9LCB7ImR1cCIsIFBTT1BfRFVQfSwKKyAgICB7ImNvcHkiLCBQU09QX0NPUFl9LCB7ImluZGV4IiwgUFNPUF9JTkRFWH0sIHsicm9sbCIsIFBTT1BfUk9MTH0sCisgICAge05VTEwsIFBTT1BfUFJPQ30KK307CitGWF9CT09MIENQREZfUFNFbmdpbmU6OlBhcnNlKGNvbnN0IEZYX0NIQVIqIHN0cmluZywgaW50IHNpemUpCit7CisgICAgQ1BERl9TaW1wbGVQYXJzZXIgcGFyc2VyKChGWF9MUEJZVEUpc3RyaW5nLCBzaXplKTsKKyAgICBDRlhfQnl0ZVN0cmluZ0Mgd29yZCA9IHBhcnNlci5HZXRXb3JkKCk7CisgICAgaWYgKHdvcmQgIT0gRlhfQlNUUkMoInsiKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBtX01haW5Qcm9jLlBhcnNlKHBhcnNlcik7Cit9CitGWF9CT09MIENQREZfUFNQcm9jOjpQYXJzZShDUERGX1NpbXBsZVBhcnNlciYgcGFyc2VyKQoreworICAgIHdoaWxlICgxKSB7CisgICAgICAgIENGWF9CeXRlU3RyaW5nQyB3b3JkID0gcGFyc2VyLkdldFdvcmQoKTsKKyAgICAgICAgaWYgKHdvcmQuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdvcmQgPT0gRlhfQlNUUkMoIn0iKSkgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdvcmQgPT0gRlhfQlNUUkMoInsiKSkgeworICAgICAgICAgICAgQ1BERl9QU1Byb2MqIHBQcm9jID0gRlhfTkVXIENQREZfUFNQcm9jOworICAgICAgICAgICAgbV9PcGVyYXRvcnMuQWRkKChGWF9MUFZPSUQpUFNPUF9QUk9DKTsKKyAgICAgICAgICAgIG1fT3BlcmF0b3JzLkFkZChwUHJvYyk7CisgICAgICAgICAgICBpZiAoIXBQcm9jLT5QYXJzZShwYXJzZXIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IGkgPSAwOworICAgICAgICAgICAgd2hpbGUgKF9QREZfUFNPcE5hbWVzW2ldLm5hbWUpIHsKKyAgICAgICAgICAgICAgICBpZiAod29yZCA9PSBDRlhfQnl0ZVN0cmluZ0MoX1BERl9QU09wTmFtZXNbaV0ubmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9PcGVyYXRvcnMuQWRkKChGWF9MUFZPSUQpX1BERl9QU09wTmFtZXNbaV0ub3ApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaSArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfUERGX1BTT3BOYW1lc1tpXS5uYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBGWF9GTE9BVCogcGQgPSBGWF9BbGxvYyhGWF9GTE9BVCwgMSk7CisgICAgICAgICAgICAgICAgKnBkID0gRlhfYXRvZih3b3JkKTsKKyAgICAgICAgICAgICAgICBtX09wZXJhdG9ycy5BZGQoKEZYX0xQVk9JRClQU09QX0NPTlNUKTsKKyAgICAgICAgICAgICAgICBtX09wZXJhdG9ycy5BZGQocGQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorI2RlZmluZSBQSSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2MjY0MzM4MzI3OTVmCitGWF9CT09MIENQREZfUFNFbmdpbmU6OkRvT3BlcmF0b3IoUERGX1BTT1Agb3ApCit7CisgICAgaW50IGkxLCBpMjsKKyAgICBGWF9GTE9BVCBkMSwgZDI7CisgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIFBTT1BfQUREOgorICAgICAgICAgICAgZDEgPSBQb3AoKTsKKyAgICAgICAgICAgIGQyID0gUG9wKCk7CisgICAgICAgICAgICBQdXNoKGQxICsgZDIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFNPUF9TVUI6CisgICAgICAgICAgICBkMiA9IFBvcCgpOworICAgICAgICAgICAgZDEgPSBQb3AoKTsKKyAgICAgICAgICAgIFB1c2goZDEgLSBkMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQU09QX01VTDoKKyAgICAgICAgICAgIGQxID0gUG9wKCk7CisgICAgICAgICAgICBkMiA9IFBvcCgpOworICAgICAgICAgICAgUHVzaChkMSAqIGQyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBTT1BfRElWOgorICAgICAgICAgICAgZDIgPSBQb3AoKTsKKyAgICAgICAgICAgIGQxID0gUG9wKCk7CisgICAgICAgICAgICBQdXNoKGQxIC8gZDIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFNPUF9JRElWOgorICAgICAgICAgICAgaTIgPSAoaW50KVBvcCgpOworICAgICAgICAgICAgaTEgPSAoaW50KVBvcCgpOworICAgICAgICAgICAgUHVzaChpMSAvIGkyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBTT1BfTU9EOgorICAgICAgICAgICAgaTIgPSAoaW50KVBvcCgpOworICAgICAgICAgICAgaTEgPSAoaW50KVBvcCgpOworICAgICAgICAgICAgUHVzaChpMSAlIGkyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBTT1BfTkVHOgorICAgICAgICAgICAgZDEgPSBQb3AoKTsKKyAgICAgICAgICAgIFB1c2goLWQxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBTT1BfQUJTOgorICAgICAgICAgICAgZDEgPSBQb3AoKTsKKyAgICAgICAgICAgIFB1c2goKEZYX0ZMT0FUKUZYU1lTX2ZhYnMoZDEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBTT1BfQ0VJTElORzoKKyAgICAgICAgICAgIGQxID0gUG9wKCk7CisgICAgICAgICAgICBQdXNoKChGWF9GTE9BVClGWFNZU19jZWlsKGQxKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQU09QX0ZMT09SOgorICAgICAgICAgICAgZDEgPSBQb3AoKTsKKyAgICAgICAgICAgIFB1c2goKEZYX0ZMT0FUKUZYU1lTX2Zsb29yKGQxKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQU09QX1JPVU5EOgorICAgICAgICAgICAgZDEgPSBQb3AoKTsKKyAgICAgICAgICAgIFB1c2goRlhTWVNfcm91bmQoZDEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBTT1BfVFJVTkNBVEU6CisgICAgICAgICAgICBpMSA9IChpbnQpUG9wKCk7CisgICAgICAgICAgICBQdXNoKGkxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBTT1BfU1FSVDoKKyAgICAgICAgICAgIGQxID0gUG9wKCk7CisgICAgICAgICAgICBQdXNoKChGWF9GTE9BVClGWFNZU19zcXJ0KGQxKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQU09QX1NJTjoKKyAgICAgICAgICAgIGQxID0gUG9wKCk7CisgICAgICAgICAgICBQdXNoKChGWF9GTE9BVClGWFNZU19zaW4oZDEgKiBQSSAvIDE4MC4wZikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFNPUF9DT1M6CisgICAgICAgICAgICBkMSA9IFBvcCgpOworICAgICAgICAgICAgUHVzaCgoRlhfRkxPQVQpRlhTWVNfY29zKGQxICogUEkgLyAxODAuMGYpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBTT1BfQVRBTjoKKyAgICAgICAgICAgIGQyID0gUG9wKCk7CisgICAgICAgICAgICBkMSA9IFBvcCgpOworICAgICAgICAgICAgZDEgPSAoRlhfRkxPQVQpKEZYU1lTX2F0YW4yKGQxLCBkMikgKiAxODAuMCAvIFBJKTsKKyAgICAgICAgICAgIGlmIChkMSA8IDApIHsKKyAgICAgICAgICAgICAgICBkMSArPSAzNjA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQdXNoKGQxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBTT1BfRVhQOgorICAgICAgICAgICAgZDIgPSBQb3AoKTsKKyAgICAgICAgICAgIGQxID0gUG9wKCk7CisgICAgICAgICAgICBQdXNoKChGWF9GTE9BVClGWFNZU19wb3coZDEsIGQyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQU09QX0xOOgorICAgICAgICAgICAgZDEgPSBQb3AoKTsKKyAgICAgICAgICAgIFB1c2goKEZYX0ZMT0FUKUZYU1lTX2xvZyhkMSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFNPUF9MT0c6CisgICAgICAgICAgICBkMSA9IFBvcCgpOworICAgICAgICAgICAgUHVzaCgoRlhfRkxPQVQpRlhTWVNfbG9nMTAoZDEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBTT1BfQ1ZJOgorICAgICAgICAgICAgaTEgPSAoaW50KVBvcCgpOworICAgICAgICAgICAgUHVzaChpMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQU09QX0NWUjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBTT1BfRVE6CisgICAgICAgICAgICBkMiA9IFBvcCgpOworICAgICAgICAgICAgZDEgPSBQb3AoKTsKKyAgICAgICAgICAgIFB1c2goKGludCkoZDEgPT0gZDIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBTT1BfTkU6CisgICAgICAgICAgICBkMiA9IFBvcCgpOworICAgICAgICAgICAgZDEgPSBQb3AoKTsKKyAgICAgICAgICAgIFB1c2goKGludCkoZDEgIT0gZDIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBTT1BfR1Q6CisgICAgICAgICAgICBkMiA9IFBvcCgpOworICAgICAgICAgICAgZDEgPSBQb3AoKTsKKyAgICAgICAgICAgIFB1c2goKGludCkoZDEgPiBkMikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFNPUF9HRToKKyAgICAgICAgICAgIGQyID0gUG9wKCk7CisgICAgICAgICAgICBkMSA9IFBvcCgpOworICAgICAgICAgICAgUHVzaCgoaW50KShkMSA+PSBkMikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFNPUF9MVDoKKyAgICAgICAgICAgIGQyID0gUG9wKCk7CisgICAgICAgICAgICBkMSA9IFBvcCgpOworICAgICAgICAgICAgUHVzaCgoaW50KShkMSA8IGQyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQU09QX0xFOgorICAgICAgICAgICAgZDIgPSBQb3AoKTsKKyAgICAgICAgICAgIGQxID0gUG9wKCk7CisgICAgICAgICAgICBQdXNoKChpbnQpKGQxIDw9IGQyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQU09QX0FORDoKKyAgICAgICAgICAgIGkxID0gKGludClQb3AoKTsKKyAgICAgICAgICAgIGkyID0gKGludClQb3AoKTsKKyAgICAgICAgICAgIFB1c2goaTEgJiBpMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQU09QX09SOgorICAgICAgICAgICAgaTEgPSAoaW50KVBvcCgpOworICAgICAgICAgICAgaTIgPSAoaW50KVBvcCgpOworICAgICAgICAgICAgUHVzaChpMSB8IGkyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBTT1BfWE9SOgorICAgICAgICAgICAgaTEgPSAoaW50KVBvcCgpOworICAgICAgICAgICAgaTIgPSAoaW50KVBvcCgpOworICAgICAgICAgICAgUHVzaChpMSBeIGkyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBTT1BfTk9UOgorICAgICAgICAgICAgaTEgPSAoaW50KVBvcCgpOworICAgICAgICAgICAgUHVzaCgoaW50KSFpMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQU09QX0JJVFNISUZUOiB7CisgICAgICAgICAgICAgICAgaW50IHNoaWZ0ID0gKGludClQb3AoKTsKKyAgICAgICAgICAgICAgICBpbnQgaSA9IChpbnQpUG9wKCk7CisgICAgICAgICAgICAgICAgaWYgKHNoaWZ0ID4gMCkgeworICAgICAgICAgICAgICAgICAgICBQdXNoKGkgPDwgc2hpZnQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFB1c2goaSA+PiAtc2hpZnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBQU09QX1RSVUU6CisgICAgICAgICAgICBQdXNoKDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFNPUF9GQUxTRToKKyAgICAgICAgICAgIFB1c2goMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQU09QX1BPUDoKKyAgICAgICAgICAgIFBvcCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFNPUF9FWENIOgorICAgICAgICAgICAgZDIgPSBQb3AoKTsKKyAgICAgICAgICAgIGQxID0gUG9wKCk7CisgICAgICAgICAgICBQdXNoKGQyKTsKKyAgICAgICAgICAgIFB1c2goZDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFNPUF9EVVA6CisgICAgICAgICAgICBkMSA9IFBvcCgpOworICAgICAgICAgICAgUHVzaChkMSk7CisgICAgICAgICAgICBQdXNoKGQxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBTT1BfQ09QWTogeworICAgICAgICAgICAgICAgIGludCBuID0gKGludClQb3AoKTsKKyAgICAgICAgICAgICAgICBpZiAobiA8IDAgfHwgbiA+IFBTRU5HSU5FX1NUQUNLU0laRSB8fCBtX1N0YWNrQ291bnQgKyBuID4gUFNFTkdJTkVfU1RBQ0tTSVpFIHx8IG4gPiBtX1N0YWNrQ291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSArKykgeworICAgICAgICAgICAgICAgICAgICBtX1N0YWNrW21fU3RhY2tDb3VudCArIGldID0gbV9TdGFja1ttX1N0YWNrQ291bnQgKyBpIC0gbl07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fU3RhY2tDb3VudCArPSBuOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFBTT1BfSU5ERVg6IHsKKyAgICAgICAgICAgICAgICBpbnQgbiA9IChpbnQpUG9wKCk7CisgICAgICAgICAgICAgICAgaWYgKG4gPCAwIHx8IG4gPj0gbV9TdGFja0NvdW50KSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBQdXNoKG1fU3RhY2tbbV9TdGFja0NvdW50IC0gbiAtIDFdKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBQU09QX1JPTEw6IHsKKyAgICAgICAgICAgICAgICBpbnQgaiA9IChpbnQpUG9wKCk7CisgICAgICAgICAgICAgICAgaW50IG4gPSAoaW50KVBvcCgpOworICAgICAgICAgICAgICAgIGlmIChtX1N0YWNrQ291bnQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG4gPCAwIHx8IG4gPiBtX1N0YWNrQ291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChqIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAtajsgaSArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQgZmlyc3QgPSBtX1N0YWNrW21fU3RhY2tDb3VudCAtIG5dOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IG4gLSAxOyBpaSArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RhY2tbbV9TdGFja0NvdW50IC0gbiArIGlpXSA9IG1fU3RhY2tbbV9TdGFja0NvdW50IC0gbiArIGlpICsgMV07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBtX1N0YWNrW21fU3RhY2tDb3VudCAtIDFdID0gZmlyc3Q7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgajsgaSArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQgbGFzdCA9IG1fU3RhY2tbbV9TdGFja0NvdW50IC0gMV07CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBuIC0gMTsgaWkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0YWNrW21fU3RhY2tDb3VudCAtIGlpIC0gMV0gPSBtX1N0YWNrW21fU3RhY2tDb3VudCAtIGlpIC0gMl07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBtX1N0YWNrW21fU3RhY2tDb3VudCAtIGlpIC0gMV0gPSBsYXN0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitzdGF0aWMgRlhfRkxPQVQgUERGX0ludGVycG9sYXRlKEZYX0ZMT0FUIHgsIEZYX0ZMT0FUIHhtaW4sIEZYX0ZMT0FUIHhtYXgsIEZYX0ZMT0FUIHltaW4sIEZYX0ZMT0FUIHltYXgpCit7CisgICAgcmV0dXJuICgoeCAtIHhtaW4pICogKHltYXggLSB5bWluKSAvICh4bWF4IC0geG1pbikpICsgeW1pbjsKK30KK3N0YXRpYyBGWF9EV09SRCBfR2V0Qml0czMyKEZYX0xQQ0JZVEUgcERhdGEsIGludCBiaXRwb3MsIGludCBuYml0cykKK3sKKyAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iaXRzOyBpICsrKQorICAgICAgICBpZiAocERhdGFbKGJpdHBvcyArIGkpIC8gOF0gJiAoMSA8PCAoNyAtIChiaXRwb3MgKyBpKSAlIDgpKSkgeworICAgICAgICAgICAgcmVzdWx0IHw9IDEgPDwgKG5iaXRzIC0gaSAtIDEpOworICAgICAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBGWF9GTE9BVAllbmNvZGVfbWF4LCBlbmNvZGVfbWluOworICAgIGludAkJCXNpemVzOworfSBTYW1wbGVFbmNvZGVJbmZvOwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEZYX0ZMT0FUCWRlY29kZV9tYXgsIGRlY29kZV9taW47Cit9IFNhbXBsZURlY29kZUluZm87CitjbGFzcyBDUERGX1NhbXBsZWRGdW5jIDogcHVibGljIENQREZfRnVuY3Rpb24KK3sKK3B1YmxpYzoKKyAgICBDUERGX1NhbXBsZWRGdW5jKCk7CisgICAgdmlydHVhbCB+Q1BERl9TYW1wbGVkRnVuYygpOworICAgIHZpcnR1YWwgRlhfQk9PTAkJdl9Jbml0KENQREZfT2JqZWN0KiBwT2JqKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCXZfQ2FsbChGWF9GTE9BVCogaW5wdXRzLCBGWF9GTE9BVCogcmVzdWx0cykgY29uc3Q7CisgICAgU2FtcGxlRW5jb2RlSW5mbyoJbV9wRW5jb2RlSW5mbzsKKyAgICBTYW1wbGVEZWNvZGVJbmZvKgltX3BEZWNvZGVJbmZvOworICAgIEZYX0RXT1JECW1fbkJpdHNQZXJTYW1wbGUsIG1fU2FtcGxlTWF4OworICAgIENQREZfU3RyZWFtQWNjKgltX3BTYW1wbGVTdHJlYW07Cit9OworQ1BERl9TYW1wbGVkRnVuYzo6Q1BERl9TYW1wbGVkRnVuYygpCit7CisgICAgbV9wU2FtcGxlU3RyZWFtID0gTlVMTDsKKyAgICBtX3BFbmNvZGVJbmZvID0gTlVMTDsKKyAgICBtX3BEZWNvZGVJbmZvID0gTlVMTDsKK30KK0NQREZfU2FtcGxlZEZ1bmM6On5DUERGX1NhbXBsZWRGdW5jKCkKK3sKKyAgICBpZiAobV9wU2FtcGxlU3RyZWFtKSB7CisgICAgICAgIGRlbGV0ZSBtX3BTYW1wbGVTdHJlYW07CisgICAgfQorICAgIGlmIChtX3BFbmNvZGVJbmZvKSB7CisgICAgICAgIEZYX0ZyZWUobV9wRW5jb2RlSW5mbyk7CisgICAgfQorICAgIGlmIChtX3BEZWNvZGVJbmZvKSB7CisgICAgICAgIEZYX0ZyZWUobV9wRGVjb2RlSW5mbyk7CisgICAgfQorfQorRlhfQk9PTCBDUERGX1NhbXBsZWRGdW5jOjp2X0luaXQoQ1BERl9PYmplY3QqIHBPYmopCit7CisgICAgaWYgKHBPYmotPkdldFR5cGUoKSAhPSBQREZPQkpfU1RSRUFNKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgQ1BERl9TdHJlYW0qIHBTdHJlYW0gPSAoQ1BERl9TdHJlYW0qKXBPYmo7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IHBTdHJlYW0tPkdldERpY3QoKTsKKyAgICBDUERGX0FycmF5KiBwU2l6ZSA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiU2l6ZSIpKTsKKyAgICBDUERGX0FycmF5KiBwRW5jb2RlID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJFbmNvZGUiKSk7CisgICAgQ1BERl9BcnJheSogcERlY29kZSA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiRGVjb2RlIikpOworICAgIG1fbkJpdHNQZXJTYW1wbGUgPSBwRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiQml0c1BlclNhbXBsZSIpKTsKKyAgICBtX1NhbXBsZU1heCA9IDB4ZmZmZmZmZmYgPj4gKDMyIC0gbV9uQml0c1BlclNhbXBsZSk7CisgICAgbV9wU2FtcGxlU3RyZWFtID0gRlhfTkVXIENQREZfU3RyZWFtQWNjOworICAgIG1fcFNhbXBsZVN0cmVhbS0+TG9hZEFsbERhdGEocFN0cmVhbSwgRkFMU0UpOworICAgIG1fcEVuY29kZUluZm8gPSBGWF9BbGxvYyhTYW1wbGVFbmNvZGVJbmZvLCBtX25JbnB1dHMpOworICAgIGludCBpOworICAgIEZYX0RXT1JEIG5Ub3RhbFNhbXBsZXMgPSAxOworICAgIGZvciAoaSA9IDA7IGkgPCBtX25JbnB1dHM7IGkgKyspIHsKKyAgICAgICAgbV9wRW5jb2RlSW5mb1tpXS5zaXplcyA9IHBTaXplLT5HZXRJbnRlZ2VyKGkpOworICAgICAgICBpZiAoIXBTaXplICYmIGkgPT0gMCkgeworICAgICAgICAgICAgbV9wRW5jb2RlSW5mb1tpXS5zaXplcyA9IHBEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJTaXplIikpOworICAgICAgICB9CisgICAgICAgIGlmIChuVG90YWxTYW1wbGVzID4gMCAmJiAoRlhfVUlOVDMyKShtX3BFbmNvZGVJbmZvW2ldLnNpemVzKSA+IFVJTlRfTUFYIC8gblRvdGFsU2FtcGxlcykgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIG5Ub3RhbFNhbXBsZXMgKj0gbV9wRW5jb2RlSW5mb1tpXS5zaXplczsKKyAgICAgICAgaWYgKHBFbmNvZGUpIHsKKyAgICAgICAgICAgIG1fcEVuY29kZUluZm9baV0uZW5jb2RlX21pbiA9IHBFbmNvZGUtPkdldEZsb2F0KGkgKiAyKTsKKyAgICAgICAgICAgIG1fcEVuY29kZUluZm9baV0uZW5jb2RlX21heCA9IHBFbmNvZGUtPkdldEZsb2F0KGkgKiAyICsgMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3BFbmNvZGVJbmZvW2ldLmVuY29kZV9taW4gPSAwOworICAgICAgICAgICAgaWYgKG1fcEVuY29kZUluZm9baV0uc2l6ZXMgPT0gMSkgeworICAgICAgICAgICAgICAgIG1fcEVuY29kZUluZm9baV0uZW5jb2RlX21heCA9IDE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fcEVuY29kZUluZm9baV0uZW5jb2RlX21heCA9IChGWF9GTE9BVCltX3BFbmNvZGVJbmZvW2ldLnNpemVzIC0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoblRvdGFsU2FtcGxlcyA+IDAgJiYgbV9uQml0c1BlclNhbXBsZSA+IFVJTlRfTUFYIC8gblRvdGFsU2FtcGxlcykgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG5Ub3RhbFNhbXBsZXMgKj0gbV9uQml0c1BlclNhbXBsZTsKKyAgICBpZiAoblRvdGFsU2FtcGxlcyA+IDAgJiYgKChGWF9VSU5UMzIpbV9uT3V0cHV0cykgPiBVSU5UX01BWCAvIG5Ub3RhbFNhbXBsZXMpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBuVG90YWxTYW1wbGVzICo9IG1fbk91dHB1dHM7CisgICAgaWYgKG5Ub3RhbFNhbXBsZXMgPT0gMCB8fCBtX3BTYW1wbGVTdHJlYW0tPkdldFNpemUoKSAqIDggPCBuVG90YWxTYW1wbGVzKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9wRGVjb2RlSW5mbyA9IEZYX0FsbG9jKFNhbXBsZURlY29kZUluZm8sIG1fbk91dHB1dHMpOworICAgIGZvciAoaSA9IDA7IGkgPCBtX25PdXRwdXRzOyBpICsrKSB7CisgICAgICAgIGlmIChwRGVjb2RlKSB7CisgICAgICAgICAgICBtX3BEZWNvZGVJbmZvW2ldLmRlY29kZV9taW4gPSBwRGVjb2RlLT5HZXRGbG9hdCgyICogaSk7CisgICAgICAgICAgICBtX3BEZWNvZGVJbmZvW2ldLmRlY29kZV9tYXggPSBwRGVjb2RlLT5HZXRGbG9hdCgyICogaSArIDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9wRGVjb2RlSW5mb1tpXS5kZWNvZGVfbWluID0gbV9wUmFuZ2VzW2kgKiAyXTsKKyAgICAgICAgICAgIG1fcERlY29kZUluZm9baV0uZGVjb2RlX21heCA9IG1fcFJhbmdlc1tpICogMiArIDFdOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDUERGX1NhbXBsZWRGdW5jOjp2X0NhbGwoRlhfRkxPQVQqIGlucHV0cywgRlhfRkxPQVQqIHJlc3VsdHMpIGNvbnN0Cit7CisgICAgaW50IHBvcyA9IDA7CisgICAgQ0ZYX0ZpeGVkQnVmR3JvdzxGWF9GTE9BVCwgMTY+IGVuY29kZWRfaW5wdXRfYnVmKG1fbklucHV0cyk7CisgICAgRlhfRkxPQVQqIGVuY29kZWRfaW5wdXQgPSBlbmNvZGVkX2lucHV0X2J1ZjsKKyAgICBDRlhfRml4ZWRCdWZHcm93PGludCwgMzI+IGludF9idWYobV9uSW5wdXRzICogMik7CisgICAgaW50KiBpbmRleCA9IGludF9idWY7CisgICAgaW50KiBibG9ja3NpemUgPSBpbmRleCArIG1fbklucHV0czsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbklucHV0czsgaSArKykgeworICAgICAgICBpZiAoaSA9PSAwKSB7CisgICAgICAgICAgICBibG9ja3NpemVbaV0gPSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYmxvY2tzaXplW2ldID0gYmxvY2tzaXplW2kgLSAxXSAqIG1fcEVuY29kZUluZm9baSAtIDFdLnNpemVzOworICAgICAgICB9CisgICAgICAgIGVuY29kZWRfaW5wdXRbaV0gPSBQREZfSW50ZXJwb2xhdGUoaW5wdXRzW2ldLCBtX3BEb21haW5zW2kgKiAyXSwgbV9wRG9tYWluc1tpICogMiArIDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcEVuY29kZUluZm9baV0uZW5jb2RlX21pbiwgbV9wRW5jb2RlSW5mb1tpXS5lbmNvZGVfbWF4KTsKKyAgICAgICAgaW5kZXhbaV0gPSAoaW50KWVuY29kZWRfaW5wdXRbaV07CisgICAgICAgIGlmIChpbmRleFtpXSA8IDApIHsKKyAgICAgICAgICAgIGluZGV4W2ldID0gMDsKKyAgICAgICAgfSBlbHNlIGlmIChpbmRleFtpXSA+IG1fcEVuY29kZUluZm9baV0uc2l6ZXMgLSAxKSB7CisgICAgICAgICAgICBpbmRleFtpXSA9IG1fcEVuY29kZUluZm9baV0uc2l6ZXMgLSAxOworICAgICAgICB9CisgICAgICAgIHBvcyArPSBpbmRleFtpXSAqIGJsb2Nrc2l6ZVtpXTsKKyAgICB9CisgICAgaW50IGJpdHBvcyA9IHBvcyAqIG1fbkJpdHNQZXJTYW1wbGUgKiBtX25PdXRwdXRzOworICAgIEZYX0xQQ0JZVEUgcFNhbXBsZURhdGEgPSBtX3BTYW1wbGVTdHJlYW0tPkdldERhdGEoKTsKKyAgICBpZiAocFNhbXBsZURhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGZvciAoaW50IGogPSAwOyBqIDwgbV9uT3V0cHV0czsgaiArKykgeworICAgICAgICBGWF9EV09SRCBzYW1wbGUgPSBfR2V0Qml0czMyKHBTYW1wbGVEYXRhLCBiaXRwb3MgKyBqICogbV9uQml0c1BlclNhbXBsZSwgbV9uQml0c1BlclNhbXBsZSk7CisgICAgICAgIEZYX0ZMT0FUIGVuY29kZWQgPSAoRlhfRkxPQVQpc2FtcGxlOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbklucHV0czsgaSArKykgeworICAgICAgICAgICAgaWYgKGluZGV4W2ldID09IG1fcEVuY29kZUluZm9baV0uc2l6ZXMgLSAxKSB7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4W2ldID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZW5jb2RlZCA9IGVuY29kZWRfaW5wdXRbaV0gKiAoRlhfRkxPQVQpc2FtcGxlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IGJpdHBvczEgPSBiaXRwb3MgKyBtX25CaXRzUGVyU2FtcGxlICogbV9uT3V0cHV0cyAqIGJsb2Nrc2l6ZVtpXTsKKyAgICAgICAgICAgICAgICBGWF9EV09SRCBzYW1wbGUxID0gX0dldEJpdHMzMihwU2FtcGxlRGF0YSwgYml0cG9zMSArIGogKiBtX25CaXRzUGVyU2FtcGxlLCBtX25CaXRzUGVyU2FtcGxlKTsKKyAgICAgICAgICAgICAgICBlbmNvZGVkICs9IChlbmNvZGVkX2lucHV0W2ldIC0gaW5kZXhbaV0pICogKChGWF9GTE9BVClzYW1wbGUxIC0gKEZYX0ZMT0FUKXNhbXBsZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0c1tqXSA9IFBERl9JbnRlcnBvbGF0ZShlbmNvZGVkLCAwLCAoRlhfRkxPQVQpbV9TYW1wbGVNYXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wRGVjb2RlSW5mb1tqXS5kZWNvZGVfbWluLCBtX3BEZWNvZGVJbmZvW2pdLmRlY29kZV9tYXgpOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK2NsYXNzIENQREZfUFNGdW5jIDogcHVibGljIENQREZfRnVuY3Rpb24KK3sKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCXZfSW5pdChDUERGX09iamVjdCogcE9iaik7CisgICAgdmlydHVhbCBGWF9CT09MCQl2X0NhbGwoRlhfRkxPQVQqIGlucHV0cywgRlhfRkxPQVQqIHJlc3VsdHMpIGNvbnN0OworICAgIENQREZfUFNFbmdpbmUgbV9QUzsKK307CitGWF9CT09MIENQREZfUFNGdW5jOjp2X0luaXQoQ1BERl9PYmplY3QqIHBPYmopCit7CisgICAgQ1BERl9TdHJlYW0qIHBTdHJlYW0gPSAoQ1BERl9TdHJlYW0qKXBPYmo7CisgICAgQ1BERl9TdHJlYW1BY2MgYWNjOworICAgIGFjYy5Mb2FkQWxsRGF0YShwU3RyZWFtLCBGQUxTRSk7CisgICAgcmV0dXJuIG1fUFMuUGFyc2UoKGNvbnN0IEZYX0NIQVIqKWFjYy5HZXREYXRhKCksIGFjYy5HZXRTaXplKCkpOworfQorRlhfQk9PTCBDUERGX1BTRnVuYzo6dl9DYWxsKEZYX0ZMT0FUKiBpbnB1dHMsIEZYX0ZMT0FUKiByZXN1bHRzKSBjb25zdAoreworICAgIENQREZfUFNFbmdpbmUmIFBTID0gKENQREZfUFNFbmdpbmUmKW1fUFM7CisgICAgUFMuUmVzZXQoKTsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbV9uSW5wdXRzOyBpICsrKSB7CisgICAgICAgIFBTLlB1c2goaW5wdXRzW2ldKTsKKyAgICB9CisgICAgUFMuRXhlY3V0ZSgpOworICAgIGlmIChQUy5HZXRTdGFja1NpemUoKSA8IG1fbk91dHB1dHMpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgbV9uT3V0cHV0czsgaSArKykgeworICAgICAgICByZXN1bHRzW21fbk91dHB1dHMgLSBpIC0gMV0gPSBQUy5Qb3AoKTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitjbGFzcyBDUERGX0V4cEludEZ1bmMgOiBwdWJsaWMgQ1BERl9GdW5jdGlvbgoreworcHVibGljOgorICAgIENQREZfRXhwSW50RnVuYygpOworICAgIHZpcnR1YWwgfkNQREZfRXhwSW50RnVuYygpOworICAgIHZpcnR1YWwgRlhfQk9PTAkJdl9Jbml0KENQREZfT2JqZWN0KiBwT2JqKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCXZfQ2FsbChGWF9GTE9BVCogaW5wdXRzLCBGWF9GTE9BVCogcmVzdWx0cykgY29uc3Q7CisgICAgRlhfRkxPQVQJbV9FeHBvbmVudDsKKyAgICBGWF9GTE9BVCoJbV9wQmVnaW5WYWx1ZXM7CisgICAgRlhfRkxPQVQqCW1fcEVuZFZhbHVlczsKKyAgICBpbnQJCW1fbk9yaWdPdXRwdXRzOworfTsKK0NQREZfRXhwSW50RnVuYzo6Q1BERl9FeHBJbnRGdW5jKCkKK3sKKyAgICBtX3BCZWdpblZhbHVlcyA9IE5VTEw7CisgICAgbV9wRW5kVmFsdWVzID0gTlVMTDsKK30KK0NQREZfRXhwSW50RnVuYzo6fkNQREZfRXhwSW50RnVuYygpCit7CisgICAgaWYgKG1fcEJlZ2luVmFsdWVzKSB7CisgICAgICAgIEZYX0ZyZWUobV9wQmVnaW5WYWx1ZXMpOworICAgIH0KKyAgICBpZiAobV9wRW5kVmFsdWVzKSB7CisgICAgICAgIEZYX0ZyZWUobV9wRW5kVmFsdWVzKTsKKyAgICB9Cit9CitGWF9CT09MIENQREZfRXhwSW50RnVuYzo6dl9Jbml0KENQREZfT2JqZWN0KiBwT2JqKQoreworICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSBwT2JqLT5HZXREaWN0KCk7CisgICAgaWYgKHBEaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDUERGX0FycmF5KiBwQXJyYXkwID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJDMCIpKTsKKyAgICBpZiAobV9uT3V0cHV0cyA9PSAwKSB7CisgICAgICAgIG1fbk91dHB1dHMgPSAxOworICAgICAgICBpZiAocEFycmF5MCkgeworICAgICAgICAgICAgbV9uT3V0cHV0cyA9IHBBcnJheTAtPkdldENvdW50KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgQ1BERl9BcnJheSogcEFycmF5MSA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiQzEiKSk7CisgICAgbV9wQmVnaW5WYWx1ZXMgPSBGWF9BbGxvYyhGWF9GTE9BVCwgbV9uT3V0cHV0cyAqIDIpOworICAgIG1fcEVuZFZhbHVlcyA9IEZYX0FsbG9jKEZYX0ZMT0FULCBtX25PdXRwdXRzICogMik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX25PdXRwdXRzOyBpICsrKSB7CisgICAgICAgIG1fcEJlZ2luVmFsdWVzW2ldID0gcEFycmF5MCA/IHBBcnJheTAtPkdldEZsb2F0KGkpIDogMC4wZjsKKyAgICAgICAgbV9wRW5kVmFsdWVzW2ldID0gcEFycmF5MSA/IHBBcnJheTEtPkdldEZsb2F0KGkpIDogMS4wZjsKKyAgICB9CisgICAgbV9FeHBvbmVudCA9IHBEaWN0LT5HZXRGbG9hdChGWF9CU1RSQygiTiIpKTsKKyAgICBtX25PcmlnT3V0cHV0cyA9IG1fbk91dHB1dHM7CisgICAgaWYgKG1fbk91dHB1dHMgJiYgbV9uSW5wdXRzID4gSU5UX01BWCAvIG1fbk91dHB1dHMpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBtX25PdXRwdXRzICo9IG1fbklucHV0czsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ1BERl9FeHBJbnRGdW5jOjp2X0NhbGwoRlhfRkxPQVQqIGlucHV0cywgRlhfRkxPQVQqIHJlc3VsdHMpIGNvbnN0Cit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX25JbnB1dHM7IGkgKyspCisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbV9uT3JpZ091dHB1dHM7IGogKyspIHsKKyAgICAgICAgICAgIHJlc3VsdHNbaSAqIG1fbk9yaWdPdXRwdXRzICsgal0gPSBtX3BCZWdpblZhbHVlc1tqXSArIChGWF9GTE9BVClGWFNZU19wb3coaW5wdXRzW2ldLCBtX0V4cG9uZW50KSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1fcEVuZFZhbHVlc1tqXSAtIG1fcEJlZ2luVmFsdWVzW2pdKTsKKyAgICAgICAgfQorICAgIHJldHVybiBUUlVFOworfQorY2xhc3MgQ1BERl9TdGl0Y2hGdW5jIDogcHVibGljIENQREZfRnVuY3Rpb24KK3sKK3B1YmxpYzoKKyAgICBDUERGX1N0aXRjaEZ1bmMoKTsKKyAgICB2aXJ0dWFsIH5DUERGX1N0aXRjaEZ1bmMoKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCXZfSW5pdChDUERGX09iamVjdCogcE9iaik7CisgICAgdmlydHVhbCBGWF9CT09MCQl2X0NhbGwoRlhfRkxPQVQqIGlucHV0cywgRlhfRkxPQVQqIHJlc3VsdHMpIGNvbnN0OworICAgIGludAkJCW1fblN1YnM7CisgICAgQ1BERl9GdW5jdGlvbioqIG1fcFN1YkZ1bmN0aW9uczsKKyAgICBGWF9GTE9BVCoJbV9wQm91bmRzOworICAgIEZYX0ZMT0FUKgltX3BFbmNvZGU7Cit9OworQ1BERl9TdGl0Y2hGdW5jOjpDUERGX1N0aXRjaEZ1bmMoKQoreworICAgIG1fblN1YnMgPSAwOworICAgIG1fcFN1YkZ1bmN0aW9ucyA9IE5VTEw7CisgICAgbV9wQm91bmRzID0gTlVMTDsKKyAgICBtX3BFbmNvZGUgPSBOVUxMOworfQorQ1BERl9TdGl0Y2hGdW5jOjp+Q1BERl9TdGl0Y2hGdW5jKCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fblN1YnM7IGkgKyspCisgICAgICAgIGlmIChtX3BTdWJGdW5jdGlvbnNbaV0pIHsKKyAgICAgICAgICAgIGRlbGV0ZSBtX3BTdWJGdW5jdGlvbnNbaV07CisgICAgICAgIH0KKyAgICBpZiAobV9wU3ViRnVuY3Rpb25zKSB7CisgICAgICAgIEZYX0ZyZWUobV9wU3ViRnVuY3Rpb25zKTsKKyAgICB9CisgICAgaWYgKG1fcEJvdW5kcykgeworICAgICAgICBGWF9GcmVlKG1fcEJvdW5kcyk7CisgICAgfQorICAgIGlmIChtX3BFbmNvZGUpIHsKKyAgICAgICAgRlhfRnJlZShtX3BFbmNvZGUpOworICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9TdGl0Y2hGdW5jOjp2X0luaXQoQ1BERl9PYmplY3QqIHBPYmopCit7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IHBPYmotPkdldERpY3QoKTsKKyAgICBpZiAocERpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIENQREZfQXJyYXkqIHBBcnJheSA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiRnVuY3Rpb25zIikpOworICAgIGlmIChwQXJyYXkgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fblN1YnMgPSBwQXJyYXktPkdldENvdW50KCk7CisgICAgaWYgKG1fblN1YnMgPT0gMCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fcFN1YkZ1bmN0aW9ucyA9IEZYX0FsbG9jKENQREZfRnVuY3Rpb24qLCBtX25TdWJzKTsKKyAgICBGWFNZU19tZW1zZXQzMihtX3BTdWJGdW5jdGlvbnMsIDAsIHNpemVvZihDUERGX0Z1bmN0aW9uKikqbV9uU3Vicyk7CisgICAgbV9uT3V0cHV0cyA9IDA7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IG1fblN1YnM7IGkgKyspIHsKKyAgICAgICAgQ1BERl9PYmplY3QqIHBTdWIgPSBwQXJyYXktPkdldEVsZW1lbnRWYWx1ZShpKTsKKyAgICAgICAgaWYgKHBTdWIgPT0gcE9iaikgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIG1fcFN1YkZ1bmN0aW9uc1tpXSA9IENQREZfRnVuY3Rpb246OkxvYWQocFN1Yik7CisgICAgICAgIGlmIChtX3BTdWJGdW5jdGlvbnNbaV0gPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmIChtX3BTdWJGdW5jdGlvbnNbaV0tPkNvdW50T3V0cHV0cygpID4gbV9uT3V0cHV0cykgeworICAgICAgICAgICAgbV9uT3V0cHV0cyA9IG1fcFN1YkZ1bmN0aW9uc1tpXS0+Q291bnRPdXRwdXRzKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9wQm91bmRzID0gRlhfQWxsb2MoRlhfRkxPQVQsIG1fblN1YnMgKyAxKTsKKyAgICBtX3BCb3VuZHNbMF0gPSBtX3BEb21haW5zWzBdOworICAgIHBBcnJheSA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiQm91bmRzIikpOworICAgIGlmIChwQXJyYXkgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBtX25TdWJzIC0gMTsgaSArKykgeworICAgICAgICBtX3BCb3VuZHNbaSArIDFdID0gcEFycmF5LT5HZXRGbG9hdChpKTsKKyAgICB9CisgICAgbV9wQm91bmRzW21fblN1YnNdID0gbV9wRG9tYWluc1sxXTsKKyAgICBtX3BFbmNvZGUgPSBGWF9BbGxvYyhGWF9GTE9BVCwgbV9uU3VicyAqIDIpOworICAgIHBBcnJheSA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiRW5jb2RlIikpOworICAgIGlmIChwQXJyYXkgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBtX25TdWJzICogMjsgaSArKykgeworICAgICAgICBtX3BFbmNvZGVbaV0gPSBwQXJyYXktPkdldEZsb2F0KGkpOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ1BERl9TdGl0Y2hGdW5jOjp2X0NhbGwoRlhfRkxPQVQqIGlucHV0cywgRlhfRkxPQVQqIG91dHB1dHMpIGNvbnN0Cit7CisgICAgRlhfRkxPQVQgaW5wdXQgPSBpbnB1dHNbMF07CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IG1fblN1YnMgLSAxOyBpICsrKQorICAgICAgICBpZiAoaW5wdXQgPCBtX3BCb3VuZHNbaSArIDFdKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIGlmIChtX3BTdWJGdW5jdGlvbnNbaV0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlucHV0ID0gUERGX0ludGVycG9sYXRlKGlucHV0LCBtX3BCb3VuZHNbaV0sIG1fcEJvdW5kc1tpICsgMV0sIG1fcEVuY29kZVtpICogMl0sIG1fcEVuY29kZVtpICogMiArIDFdKTsKKyAgICBpbnQgbnJlc3VsdHM7CisgICAgbV9wU3ViRnVuY3Rpb25zW2ldLT5DYWxsKCZpbnB1dCwgbV9uSW5wdXRzLCBvdXRwdXRzLCBucmVzdWx0cyk7CisgICAgcmV0dXJuIFRSVUU7Cit9CitDUERGX0Z1bmN0aW9uKiBDUERGX0Z1bmN0aW9uOjpMb2FkKENQREZfT2JqZWN0KiBwRnVuY09iaikKK3sKKyAgICBpZiAocEZ1bmNPYmogPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9GdW5jdGlvbiogcEZ1bmMgPSBOVUxMOworICAgIGludCB0eXBlOworICAgIGlmIChwRnVuY09iai0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJFQU0pIHsKKyAgICAgICAgdHlwZSA9ICgoQ1BERl9TdHJlYW0qKXBGdW5jT2JqKS0+R2V0RGljdCgpLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJGdW5jdGlvblR5cGUiKSk7CisgICAgfSBlbHNlIGlmIChwRnVuY09iai0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKSB7CisgICAgICAgIHR5cGUgPSAoKENQREZfRGljdGlvbmFyeSopcEZ1bmNPYmopLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJGdW5jdGlvblR5cGUiKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmICh0eXBlID09IDApIHsKKyAgICAgICAgcEZ1bmMgPSBGWF9ORVcgQ1BERl9TYW1wbGVkRnVuYzsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gMikgeworICAgICAgICBwRnVuYyA9IEZYX05FVyBDUERGX0V4cEludEZ1bmM7CisgICAgfSBlbHNlIGlmICh0eXBlID09IDMpIHsKKyAgICAgICAgcEZ1bmMgPSBGWF9ORVcgQ1BERl9TdGl0Y2hGdW5jOworICAgIH0gZWxzZSBpZiAodHlwZSA9PSA0KSB7CisgICAgICAgIHBGdW5jID0gRlhfTkVXIENQREZfUFNGdW5jOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoIXBGdW5jLT5Jbml0KHBGdW5jT2JqKSkgeworICAgICAgICBkZWxldGUgcEZ1bmM7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcEZ1bmM7Cit9CitDUERGX0Z1bmN0aW9uOjpDUERGX0Z1bmN0aW9uKCkKK3sKKyAgICBtX3BEb21haW5zID0gTlVMTDsKKyAgICBtX3BSYW5nZXMgPSBOVUxMOworfQorQ1BERl9GdW5jdGlvbjo6fkNQREZfRnVuY3Rpb24oKQoreworICAgIGlmIChtX3BEb21haW5zKSB7CisgICAgICAgIEZYX0ZyZWUobV9wRG9tYWlucyk7CisgICAgICAgIG1fcERvbWFpbnMgPSBOVUxMOworICAgIH0KKyAgICBpZiAobV9wUmFuZ2VzKSB7CisgICAgICAgIEZYX0ZyZWUobV9wUmFuZ2VzKTsKKyAgICAgICAgbV9wUmFuZ2VzID0gTlVMTDsKKyAgICB9Cit9CitGWF9CT09MIENQREZfRnVuY3Rpb246OkluaXQoQ1BERl9PYmplY3QqIHBPYmopCit7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdDsKKyAgICBpZiAocE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJFQU0pIHsKKyAgICAgICAgcERpY3QgPSAoKENQREZfU3RyZWFtKilwT2JqKS0+R2V0RGljdCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHBEaWN0ID0gKENQREZfRGljdGlvbmFyeSopcE9iajsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcERvbWFpbnMgPSBwRGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIkRvbWFpbiIpKTsKKyAgICBpZiAocERvbWFpbnMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fbklucHV0cyA9IHBEb21haW5zLT5HZXRDb3VudCgpIC8gMjsKKyAgICBpZiAobV9uSW5wdXRzID09IDApIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBtX3BEb21haW5zID0gRlhfQWxsb2MoRlhfRkxPQVQsIG1fbklucHV0cyAqIDIpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9uSW5wdXRzICogMjsgaSArKykgeworICAgICAgICBtX3BEb21haW5zW2ldID0gcERvbWFpbnMtPkdldEZsb2F0KGkpOworICAgIH0KKyAgICBDUERGX0FycmF5KiBwUmFuZ2VzID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJSYW5nZSIpKTsKKyAgICBtX25PdXRwdXRzID0gMDsKKyAgICBpZiAocFJhbmdlcykgeworICAgICAgICBtX25PdXRwdXRzID0gcFJhbmdlcy0+R2V0Q291bnQoKSAvIDI7CisgICAgICAgIG1fcFJhbmdlcyA9IEZYX0FsbG9jKEZYX0ZMT0FULCBtX25PdXRwdXRzICogMik7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9uT3V0cHV0cyAqIDI7IGkgKyspIHsKKyAgICAgICAgICAgIG1fcFJhbmdlc1tpXSA9IHBSYW5nZXMtPkdldEZsb2F0KGkpOworICAgICAgICB9CisgICAgfQorICAgIEZYX0RXT1JEIG9sZF9vdXRwdXRzID0gbV9uT3V0cHV0czsKKyAgICBGWF9CT09MIHJldCA9IHZfSW5pdChwT2JqKTsKKyAgICBpZiAobV9wUmFuZ2VzICYmIG1fbk91dHB1dHMgPiAoaW50KW9sZF9vdXRwdXRzKSB7CisgICAgICAgIG1fcFJhbmdlcyA9IEZYX1JlYWxsb2MoRlhfRkxPQVQsIG1fcFJhbmdlcywgbV9uT3V0cHV0cyAqIDIpOworICAgICAgICBpZiAobV9wUmFuZ2VzKSB7CisgICAgICAgICAgICBGWFNZU19tZW1zZXQzMihtX3BSYW5nZXMgKyAob2xkX291dHB1dHMgKiAyKSwgMCwgc2l6ZW9mKEZYX0ZMT0FUKSAqIChtX25PdXRwdXRzIC0gb2xkX291dHB1dHMpICogMik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KK0ZYX0JPT0wgQ1BERl9GdW5jdGlvbjo6Q2FsbChGWF9GTE9BVCogaW5wdXRzLCBpbnQgbmlucHV0cywgRlhfRkxPQVQqIHJlc3VsdHMsIGludCYgbnJlc3VsdHMpIGNvbnN0Cit7CisgICAgaWYgKG1fbklucHV0cyAhPSBuaW5wdXRzKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbnJlc3VsdHMgPSBtX25PdXRwdXRzOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9uSW5wdXRzOyBpICsrKSB7CisgICAgICAgIGlmIChpbnB1dHNbaV0gPCBtX3BEb21haW5zW2kgKiAyXSkgeworICAgICAgICAgICAgaW5wdXRzW2ldID0gbV9wRG9tYWluc1tpICogMl07CisgICAgICAgIH0gZWxzZSBpZiAoaW5wdXRzW2ldID4gbV9wRG9tYWluc1tpICogMiArIDFdKSB7CisgICAgICAgICAgICBpbnB1dHNbaV0gPSBtX3BEb21haW5zW2kgKiAyXSArIDE7CisgICAgICAgIH0KKyAgICB9CisgICAgdl9DYWxsKGlucHV0cywgcmVzdWx0cyk7CisgICAgaWYgKG1fcFJhbmdlcykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbk91dHB1dHM7IGkgKyspIHsKKyAgICAgICAgICAgIGlmIChyZXN1bHRzW2ldIDwgbV9wUmFuZ2VzW2kgKiAyXSkgeworICAgICAgICAgICAgICAgIHJlc3VsdHNbaV0gPSBtX3BSYW5nZXNbaSAqIDJdOworICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHRzW2ldID4gbV9wUmFuZ2VzW2kgKiAyICsgMV0pIHsKKyAgICAgICAgICAgICAgICByZXN1bHRzW2ldID0gbV9wUmFuZ2VzW2kgKiAyICsgMV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFnZS9mcGRmX3BhZ2VfZ3JhcGhfc3RhdGUuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhZ2UvZnBkZl9wYWdlX2dyYXBoX3N0YXRlLmNwcAppbmRleCBlOTExNWU2Li5mNTNhNWIyIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFnZS9mcGRmX3BhZ2VfZ3JhcGhfc3RhdGUuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYWdlL2ZwZGZfcGFnZV9ncmFwaF9zdGF0ZS5jcHAKQEAgLTEsNzA3ICsxLDcwNyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2UuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZW9iai5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcmVuZGVyLmgiDQotI2luY2x1ZGUgInBhZ2VpbnQuaCINCi0jaW5jbHVkZSAiLi4vZnBkZl9yZW5kZXIvcmVuZGVyX2ludC5oIg0KLXZvaWQgQ1BERl9HcmFwaGljU3RhdGVzOjpEZWZhdWx0U3RhdGVzKCkNCi17DQotICAgIG1fQ29sb3JTdGF0ZS5OZXcoKS0+RGVmYXVsdCgpOw0KLX0NCi12b2lkIENQREZfR3JhcGhpY1N0YXRlczo6Q29weVN0YXRlcyhjb25zdCBDUERGX0dyYXBoaWNTdGF0ZXMmIHNyYykNCi17DQotICAgIG1fQ2xpcFBhdGggPSBzcmMubV9DbGlwUGF0aDsNCi0gICAgbV9HcmFwaFN0YXRlID0gc3JjLm1fR3JhcGhTdGF0ZTsNCi0gICAgbV9Db2xvclN0YXRlID0gc3JjLm1fQ29sb3JTdGF0ZTsNCi0gICAgbV9UZXh0U3RhdGUgPSBzcmMubV9UZXh0U3RhdGU7DQotICAgIG1fR2VuZXJhbFN0YXRlID0gc3JjLm1fR2VuZXJhbFN0YXRlOw0KLX0NCi1DUERGX0NsaXBQYXRoRGF0YTo6Q1BERl9DbGlwUGF0aERhdGEoKQ0KLXsNCi0gICAgbV9QYXRoQ291bnQgPSAwOw0KLSAgICBtX3BQYXRoTGlzdCA9IE5VTEw7DQotICAgIG1fcFR5cGVMaXN0ID0gTlVMTDsNCi0gICAgbV9UZXh0Q291bnQgPSAwOw0KLSAgICBtX3BUZXh0TGlzdCA9IE5VTEw7DQotfQ0KLUNQREZfQ2xpcFBhdGhEYXRhOjp+Q1BERl9DbGlwUGF0aERhdGEoKQ0KLXsNCi0gICAgaW50IGk7DQotICAgIGlmIChtX3BQYXRoTGlzdCkgew0KLSAgICAgICAgRlhfREVMRVRFX1ZFQ1RPUihtX3BQYXRoTGlzdCwgQ1BERl9QYXRoLCBtX1BhdGhDb3VudCk7DQotICAgIH0NCi0gICAgaWYgKG1fcFR5cGVMaXN0KSB7DQotICAgICAgICBGWF9GcmVlKG1fcFR5cGVMaXN0KTsNCi0gICAgfQ0KLSAgICBmb3IgKGkgPSBtX1RleHRDb3VudCAtIDE7IGkgPiAtMTsgaSAtLSkNCi0gICAgICAgIGlmIChtX3BUZXh0TGlzdFtpXSkgew0KLSAgICAgICAgICAgIGRlbGV0ZSBtX3BUZXh0TGlzdFtpXTsNCi0gICAgICAgIH0NCi0gICAgaWYgKG1fcFRleHRMaXN0KSB7DQotICAgICAgICBGWF9GcmVlKG1fcFRleHRMaXN0KTsNCi0gICAgfQ0KLX0NCi1DUERGX0NsaXBQYXRoRGF0YTo6Q1BERl9DbGlwUGF0aERhdGEoY29uc3QgQ1BERl9DbGlwUGF0aERhdGEmIHNyYykNCi17DQotICAgIG1fcFBhdGhMaXN0ID0gTlVMTDsNCi0gICAgbV9wUGF0aExpc3QgPSBOVUxMOw0KLSAgICBtX3BUZXh0TGlzdCA9IE5VTEw7DQotICAgIG1fUGF0aENvdW50ID0gc3JjLm1fUGF0aENvdW50Ow0KLSAgICBpZiAobV9QYXRoQ291bnQpIHsNCi0gICAgICAgIGludCBhbGxvY19zaXplID0gbV9QYXRoQ291bnQ7DQotICAgICAgICBpZiAoYWxsb2Nfc2l6ZSAlIDgpIHsNCi0gICAgICAgICAgICBhbGxvY19zaXplICs9IDggLSAoYWxsb2Nfc2l6ZSAlIDgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfTkVXX1ZFQ1RPUihtX3BQYXRoTGlzdCwgQ1BERl9QYXRoLCBhbGxvY19zaXplKTsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9QYXRoQ291bnQ7IGkgKyspIHsNCi0gICAgICAgICAgICBtX3BQYXRoTGlzdFtpXSA9IHNyYy5tX3BQYXRoTGlzdFtpXTsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fcFR5cGVMaXN0ID0gRlhfQWxsb2MoRlhfQllURSwgYWxsb2Nfc2l6ZSk7DQotICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BUeXBlTGlzdCwgc3JjLm1fcFR5cGVMaXN0LCBtX1BhdGhDb3VudCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX3BQYXRoTGlzdCA9IE5VTEw7DQotICAgICAgICBtX3BUeXBlTGlzdCA9IE5VTEw7DQotICAgIH0NCi0gICAgbV9UZXh0Q291bnQgPSBzcmMubV9UZXh0Q291bnQ7DQotICAgIGlmIChtX1RleHRDb3VudCkgew0KLSAgICAgICAgbV9wVGV4dExpc3QgPSBGWF9BbGxvYyhDUERGX1RleHRPYmplY3QqLCBtX1RleHRDb3VudCk7DQotICAgICAgICBGWFNZU19tZW1zZXQzMihtX3BUZXh0TGlzdCwgMCwgc2l6ZW9mKENQREZfVGV4dE9iamVjdCopICogbV9UZXh0Q291bnQpOw0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX1RleHRDb3VudDsgaSArKykgew0KLSAgICAgICAgICAgIGlmIChzcmMubV9wVGV4dExpc3RbaV0pIHsNCi0gICAgICAgICAgICAgICAgbV9wVGV4dExpc3RbaV0gPSBGWF9ORVcgQ1BERl9UZXh0T2JqZWN0Ow0KLSAgICAgICAgICAgICAgICBtX3BUZXh0TGlzdFtpXS0+Q29weShzcmMubV9wVGV4dExpc3RbaV0pOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIG1fcFRleHRMaXN0W2ldID0gTlVMTDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX3BUZXh0TGlzdCA9IE5VTEw7DQotICAgIH0NCi19DQotdm9pZCBDUERGX0NsaXBQYXRoRGF0YTo6U2V0Q291bnQoaW50IHBhdGhfY291bnQsIGludCB0ZXh0X2NvdW50KQ0KLXsNCi0gICAgQVNTRVJUKG1fVGV4dENvdW50ID09IDAgJiYgbV9QYXRoQ291bnQgPT0gMCk7DQotICAgIGlmIChwYXRoX2NvdW50KSB7DQotICAgICAgICBtX1BhdGhDb3VudCA9IHBhdGhfY291bnQ7DQotICAgICAgICBpbnQgYWxsb2Nfc2l6ZSA9IChwYXRoX2NvdW50ICsgNykgLyA4ICogODsNCi0gICAgICAgIEZYX05FV19WRUNUT1IobV9wUGF0aExpc3QsIENQREZfUGF0aCwgYWxsb2Nfc2l6ZSk7DQotICAgICAgICBtX3BUeXBlTGlzdCA9IEZYX0FsbG9jKEZYX0JZVEUsIGFsbG9jX3NpemUpOw0KLSAgICB9DQotICAgIGlmICh0ZXh0X2NvdW50KSB7DQotICAgICAgICBtX1RleHRDb3VudCA9IHRleHRfY291bnQ7DQotICAgICAgICBtX3BUZXh0TGlzdCA9IEZYX0FsbG9jKENQREZfVGV4dE9iamVjdCosIHRleHRfY291bnQpOw0KLSAgICAgICAgRlhTWVNfbWVtc2V0MzIobV9wVGV4dExpc3QsIDAsIHNpemVvZih2b2lkKikgKiB0ZXh0X2NvdW50KTsNCi0gICAgfQ0KLX0NCi1DUERGX1JlY3QgQ1BERl9DbGlwUGF0aDo6R2V0Q2xpcEJveCgpIGNvbnN0DQotew0KLSAgICBDUERGX1JlY3QgcmVjdDsNCi0gICAgRlhfQk9PTCBiU3RhcnRlZCA9IEZBTFNFOw0KLSAgICBpbnQgY291bnQgPSBHZXRQYXRoQ291bnQoKTsNCi0gICAgaWYgKGNvdW50KSB7DQotICAgICAgICByZWN0ID0gR2V0UGF0aCgwKS5HZXRCb3VuZGluZ0JveCgpOw0KLSAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBjb3VudDsgaSArKykgew0KLSAgICAgICAgICAgIENQREZfUmVjdCBwYXRoX3JlY3QgPSBHZXRQYXRoKGkpLkdldEJvdW5kaW5nQm94KCk7DQotICAgICAgICAgICAgcmVjdC5JbnRlcnNlY3QocGF0aF9yZWN0KTsNCi0gICAgICAgIH0NCi0gICAgICAgIGJTdGFydGVkID0gVFJVRTsNCi0gICAgfQ0KLSAgICBjb3VudCA9IEdldFRleHRDb3VudCgpOw0KLSAgICBpZiAoY291bnQpIHsNCi0gICAgICAgIENQREZfUmVjdCBsYXllcl9yZWN0Ow0KLSAgICAgICAgRlhfQk9PTCBiTGF5ZXJTdGFydGVkID0gRkFMU0U7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpICsrKSB7DQotICAgICAgICAgICAgQ1BERl9UZXh0T2JqZWN0KiBwVGV4dE9iaiA9IEdldFRleHQoaSk7DQotICAgICAgICAgICAgaWYgKHBUZXh0T2JqID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgaWYgKCFiU3RhcnRlZCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmVjdCA9IGxheWVyX3JlY3Q7DQotICAgICAgICAgICAgICAgICAgICBiU3RhcnRlZCA9IFRSVUU7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICByZWN0LkludGVyc2VjdChsYXllcl9yZWN0KTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBiTGF5ZXJTdGFydGVkID0gRkFMU0U7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgaWYgKCFiTGF5ZXJTdGFydGVkKSB7DQotICAgICAgICAgICAgICAgICAgICBsYXllcl9yZWN0ID0gcFRleHRPYmotPkdldEJCb3goTlVMTCk7DQotICAgICAgICAgICAgICAgICAgICBiTGF5ZXJTdGFydGVkID0gVFJVRTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIGxheWVyX3JlY3QuVW5pb24ocFRleHRPYmotPkdldEJCb3goTlVMTCkpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiByZWN0Ow0KLX0NCi12b2lkIENQREZfQ2xpcFBhdGg6OkFwcGVuZFBhdGgoQ1BERl9QYXRoIHBhdGgsIGludCB0eXBlLCBGWF9CT09MIGJBdXRvTWVyZ2UpDQotew0KLSAgICBDUERGX0NsaXBQYXRoRGF0YSogcERhdGEgPSBHZXRNb2RpZnkoKTsNCi0gICAgaWYgKHBEYXRhLT5tX1BhdGhDb3VudCAmJiBiQXV0b01lcmdlKSB7DQotICAgICAgICBDUERGX1BhdGggb2xkX3BhdGggPSBwRGF0YS0+bV9wUGF0aExpc3RbcERhdGEtPm1fUGF0aENvdW50IC0gMV07DQotICAgICAgICBpZiAob2xkX3BhdGguSXNSZWN0KCkpIHsNCi0gICAgICAgICAgICBDUERGX1JlY3Qgb2xkX3JlY3Qob2xkX3BhdGguR2V0UG9pbnRYKDApLCBvbGRfcGF0aC5HZXRQb2ludFkoMCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9wYXRoLkdldFBvaW50WCgyKSwgb2xkX3BhdGguR2V0UG9pbnRZKDIpKTsNCi0gICAgICAgICAgICBDUERGX1JlY3QgbmV3X3JlY3QgPSBwYXRoLkdldEJvdW5kaW5nQm94KCk7DQotICAgICAgICAgICAgaWYgKG9sZF9yZWN0LkNvbnRhaW5zKG5ld19yZWN0KSkgew0KLSAgICAgICAgICAgICAgICBwRGF0YS0+bV9QYXRoQ291bnQgLS07DQotICAgICAgICAgICAgICAgIHBEYXRhLT5tX3BQYXRoTGlzdFtwRGF0YS0+bV9QYXRoQ291bnRdLlNldE51bGwoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKHBEYXRhLT5tX1BhdGhDb3VudCAlIDggPT0gMCkgew0KLSAgICAgICAgQ1BERl9QYXRoKiBwTmV3UGF0aDsNCi0gICAgICAgIEZYX05FV19WRUNUT1IocE5ld1BhdGgsIENQREZfUGF0aCwgcERhdGEtPm1fUGF0aENvdW50ICsgOCk7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBEYXRhLT5tX1BhdGhDb3VudDsgaSArKykgew0KLSAgICAgICAgICAgIHBOZXdQYXRoW2ldID0gcERhdGEtPm1fcFBhdGhMaXN0W2ldOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBEYXRhLT5tX3BQYXRoTGlzdCkgew0KLSAgICAgICAgICAgIEZYX0RFTEVURV9WRUNUT1IocERhdGEtPm1fcFBhdGhMaXN0LCBDUERGX1BhdGgsIHBEYXRhLT5tX1BhdGhDb3VudCk7DQotICAgICAgICB9DQotICAgICAgICBGWF9CWVRFKiBwTmV3VHlwZSA9IEZYX0FsbG9jKEZYX0JZVEUsIHBEYXRhLT5tX1BhdGhDb3VudCArIDgpOw0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIocE5ld1R5cGUsIHBEYXRhLT5tX3BUeXBlTGlzdCwgcERhdGEtPm1fUGF0aENvdW50KTsNCi0gICAgICAgIGlmIChwRGF0YS0+bV9wVHlwZUxpc3QpIHsNCi0gICAgICAgICAgICBGWF9GcmVlKHBEYXRhLT5tX3BUeXBlTGlzdCk7DQotICAgICAgICB9DQotICAgICAgICBwRGF0YS0+bV9wUGF0aExpc3QgPSBwTmV3UGF0aDsNCi0gICAgICAgIHBEYXRhLT5tX3BUeXBlTGlzdCA9IHBOZXdUeXBlOw0KLSAgICB9DQotICAgIHBEYXRhLT5tX3BQYXRoTGlzdFtwRGF0YS0+bV9QYXRoQ291bnRdID0gcGF0aDsNCi0gICAgcERhdGEtPm1fcFR5cGVMaXN0W3BEYXRhLT5tX1BhdGhDb3VudF0gPSAoRlhfQllURSl0eXBlOw0KLSAgICBwRGF0YS0+bV9QYXRoQ291bnQgKys7DQotfQ0KLXZvaWQgQ1BERl9DbGlwUGF0aDo6RGVsZXRlUGF0aChpbnQgaW5kZXgpDQotew0KLSAgICBDUERGX0NsaXBQYXRoRGF0YSogcERhdGEgPSBHZXRNb2RpZnkoKTsNCi0gICAgaWYgKGluZGV4ID49IHBEYXRhLT5tX1BhdGhDb3VudCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHBEYXRhLT5tX3BQYXRoTGlzdFtpbmRleF0uU2V0TnVsbCgpOw0KLSAgICBmb3IgKGludCBpID0gaW5kZXg7IGkgPCBwRGF0YS0+bV9QYXRoQ291bnQgLSAxOyBpICsrKSB7DQotICAgICAgICBwRGF0YS0+bV9wUGF0aExpc3RbaV0gPSBwRGF0YS0+bV9wUGF0aExpc3RbaSArIDFdOw0KLSAgICB9DQotICAgIHBEYXRhLT5tX3BQYXRoTGlzdFtwRGF0YS0+bV9QYXRoQ291bnQgLSAxXS5TZXROdWxsKCk7DQotICAgIEZYU1lTX21lbW1vdmUzMihwRGF0YS0+bV9wVHlwZUxpc3QgKyBpbmRleCwgcERhdGEtPm1fcFR5cGVMaXN0ICsgaW5kZXggKyAxLCBwRGF0YS0+bV9QYXRoQ291bnQgLSBpbmRleCAtIDEpOw0KLSAgICBwRGF0YS0+bV9QYXRoQ291bnQgLS07DQotfQ0KLSNkZWZpbmUgRlBERl9DTElQUEFUSF9NQVhfVEVYVFMgMTAyNA0KLXZvaWQgQ1BERl9DbGlwUGF0aDo6QXBwZW5kVGV4dHMoQ1BERl9UZXh0T2JqZWN0KiogcFRleHRzLCBpbnQgY291bnQpDQotew0KLSAgICBDUERGX0NsaXBQYXRoRGF0YSogcERhdGEgPSBHZXRNb2RpZnkoKTsNCi0gICAgaWYgKHBEYXRhLT5tX1RleHRDb3VudCArIGNvdW50ID4gRlBERl9DTElQUEFUSF9NQVhfVEVYVFMpIHsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkgKyspIHsNCi0gICAgICAgICAgICBwVGV4dHNbaV0tPlJlbGVhc2UoKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDUERGX1RleHRPYmplY3QqKiBwTmV3TGlzdCA9IEZYX0FsbG9jKENQREZfVGV4dE9iamVjdCosIHBEYXRhLT5tX1RleHRDb3VudCArIGNvdW50ICsgMSk7DQotICAgIGlmIChwRGF0YS0+bV9wVGV4dExpc3QpIHsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKHBOZXdMaXN0LCBwRGF0YS0+bV9wVGV4dExpc3QsIHBEYXRhLT5tX1RleHRDb3VudCAqIHNpemVvZihDUERGX1RleHRPYmplY3QqKSk7DQotICAgICAgICBGWF9GcmVlKHBEYXRhLT5tX3BUZXh0TGlzdCk7DQotICAgIH0NCi0gICAgcERhdGEtPm1fcFRleHRMaXN0ID0gcE5ld0xpc3Q7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkgKyspIHsNCi0gICAgICAgIHBEYXRhLT5tX3BUZXh0TGlzdFtwRGF0YS0+bV9UZXh0Q291bnQgKyBpXSA9IHBUZXh0c1tpXTsNCi0gICAgfQ0KLSAgICBwRGF0YS0+bV9wVGV4dExpc3RbcERhdGEtPm1fVGV4dENvdW50ICsgY291bnRdID0gTlVMTDsNCi0gICAgcERhdGEtPm1fVGV4dENvdW50ICs9IGNvdW50ICsgMTsNCi19DQotdm9pZCBDUERGX0NsaXBQYXRoOjpUcmFuc2Zvcm0oY29uc3QgQ1BERl9NYXRyaXgmIG1hdHJpeCkNCi17DQotICAgIENQREZfQ2xpcFBhdGhEYXRhKiBwRGF0YSA9IEdldE1vZGlmeSgpOw0KLSAgICBpbnQgaTsNCi0gICAgZm9yIChpID0gMDsgaSA8IHBEYXRhLT5tX1BhdGhDb3VudDsgaSArKykgew0KLSAgICAgICAgcERhdGEtPm1fcFBhdGhMaXN0W2ldLlRyYW5zZm9ybSgmbWF0cml4KTsNCi0gICAgfQ0KLSAgICBmb3IgKGkgPSAwOyBpIDwgcERhdGEtPm1fVGV4dENvdW50OyBpICsrKQ0KLSAgICAgICAgaWYgKHBEYXRhLT5tX3BUZXh0TGlzdFtpXSkgew0KLSAgICAgICAgICAgIHBEYXRhLT5tX3BUZXh0TGlzdFtpXS0+VHJhbnNmb3JtKG1hdHJpeCk7DQotICAgICAgICB9DQotfQ0KLUNQREZfQ29sb3JTdGF0ZURhdGE6OkNQREZfQ29sb3JTdGF0ZURhdGEoY29uc3QgQ1BERl9Db2xvclN0YXRlRGF0YSYgc3JjKQ0KLXsNCi0gICAgbV9GaWxsQ29sb3IuQ29weSgmc3JjLm1fRmlsbENvbG9yKTsNCi0gICAgbV9GaWxsUkdCID0gc3JjLm1fRmlsbFJHQjsNCi0gICAgbV9TdHJva2VDb2xvci5Db3B5KCZzcmMubV9TdHJva2VDb2xvcik7DQotICAgIG1fU3Ryb2tlUkdCID0gc3JjLm1fU3Ryb2tlUkdCOw0KLX0NCi12b2lkIENQREZfQ29sb3JTdGF0ZURhdGE6OkRlZmF1bHQoKQ0KLXsNCi0gICAgbV9GaWxsUkdCID0gbV9TdHJva2VSR0IgPSAwOw0KLSAgICBtX0ZpbGxDb2xvci5TZXRDb2xvclNwYWNlKENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19ERVZJQ0VHUkFZKSk7DQotICAgIG1fU3Ryb2tlQ29sb3IuU2V0Q29sb3JTcGFjZShDUERGX0NvbG9yU3BhY2U6OkdldFN0b2NrQ1MoUERGQ1NfREVWSUNFR1JBWSkpOw0KLX0NCi12b2lkIENQREZfQ29sb3JTdGF0ZTo6U2V0RmlsbENvbG9yKENQREZfQ29sb3JTcGFjZSogcENTLCBGWF9GTE9BVCogcFZhbHVlLCBpbnQgblZhbHVlcykNCi17DQotICAgIENQREZfQ29sb3JTdGF0ZURhdGEqIHBEYXRhID0gR2V0TW9kaWZ5KCk7DQotICAgIFNldENvbG9yKHBEYXRhLT5tX0ZpbGxDb2xvciwgcERhdGEtPm1fRmlsbFJHQiwgcENTLCBwVmFsdWUsIG5WYWx1ZXMpOw0KLX0NCi12b2lkIENQREZfQ29sb3JTdGF0ZTo6U2V0U3Ryb2tlQ29sb3IoQ1BERl9Db2xvclNwYWNlKiBwQ1MsIEZYX0ZMT0FUKiBwVmFsdWUsIGludCBuVmFsdWVzKQ0KLXsNCi0gICAgQ1BERl9Db2xvclN0YXRlRGF0YSogcERhdGEgPSBHZXRNb2RpZnkoKTsNCi0gICAgU2V0Q29sb3IocERhdGEtPm1fU3Ryb2tlQ29sb3IsIHBEYXRhLT5tX1N0cm9rZVJHQiwgcENTLCBwVmFsdWUsIG5WYWx1ZXMpOw0KLX0NCi12b2lkIENQREZfQ29sb3JTdGF0ZTo6U2V0Q29sb3IoQ1BERl9Db2xvciYgY29sb3IsIEZYX0RXT1JEJiByZ2IsIENQREZfQ29sb3JTcGFjZSogcENTLCBGWF9GTE9BVCogcFZhbHVlLCBpbnQgblZhbHVlcykNCi17DQotICAgIGlmIChwQ1MpIHsNCi0gICAgICAgIGNvbG9yLlNldENvbG9yU3BhY2UocENTKTsNCi0gICAgfSBlbHNlIGlmIChjb2xvci5Jc051bGwoKSkgew0KLSAgICAgICAgY29sb3IuU2V0Q29sb3JTcGFjZShDUERGX0NvbG9yU3BhY2U6OkdldFN0b2NrQ1MoUERGQ1NfREVWSUNFR1JBWSkpOw0KLSAgICB9DQotICAgIGlmIChjb2xvci5tX3BDUy0+Q291bnRDb21wb25lbnRzKCkgPiBuVmFsdWVzKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgY29sb3IuU2V0VmFsdWUocFZhbHVlKTsNCi0gICAgaW50IFIsIEcsIEI7DQotICAgIHJnYiA9IGNvbG9yLkdldFJHQihSLCBHLCBCKSA/IEZYU1lTX1JHQihSLCBHLCBCKSA6IChGWF9EV09SRCkgLSAxOw0KLX0NCi12b2lkIENQREZfQ29sb3JTdGF0ZTo6U2V0RmlsbFBhdHRlcm4oQ1BERl9QYXR0ZXJuKiBwUGF0dGVybiwgRlhfRkxPQVQqIHBWYWx1ZSwgaW50IG5WYWx1ZXMpDQotew0KLSAgICBDUERGX0NvbG9yU3RhdGVEYXRhKiBwRGF0YSA9IEdldE1vZGlmeSgpOw0KLSAgICBwRGF0YS0+bV9GaWxsQ29sb3IuU2V0VmFsdWUocFBhdHRlcm4sIHBWYWx1ZSwgblZhbHVlcyk7DQotICAgIGludCBSLCBHLCBCOw0KLSAgICBGWF9CT09MIHJldCA9IHBEYXRhLT5tX0ZpbGxDb2xvci5HZXRSR0IoUiwgRywgQik7DQotICAgIGlmIChwUGF0dGVybi0+bV9QYXR0ZXJuVHlwZSA9PSAxICYmICgoQ1BERl9UaWxpbmdQYXR0ZXJuKilwUGF0dGVybiktPm1fYkNvbG9yZWQgJiYgIXJldCkgew0KLSAgICAgICAgcERhdGEtPm1fRmlsbFJHQiA9IDB4MDBCRkJGQkY7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgcERhdGEtPm1fRmlsbFJHQiA9IHJldCA/IEZYU1lTX1JHQihSLCBHLCBCKSA6IChGWF9EV09SRCkgLSAxOw0KLX0NCi12b2lkIENQREZfQ29sb3JTdGF0ZTo6U2V0U3Ryb2tlUGF0dGVybihDUERGX1BhdHRlcm4qIHBQYXR0ZXJuLCBGWF9GTE9BVCogcFZhbHVlLCBpbnQgblZhbHVlcykNCi17DQotICAgIENQREZfQ29sb3JTdGF0ZURhdGEqIHBEYXRhID0gR2V0TW9kaWZ5KCk7DQotICAgIHBEYXRhLT5tX1N0cm9rZUNvbG9yLlNldFZhbHVlKHBQYXR0ZXJuLCBwVmFsdWUsIG5WYWx1ZXMpOw0KLSAgICBpbnQgUiwgRywgQjsNCi0gICAgRlhfQk9PTCByZXQgPSBwRGF0YS0+bV9TdHJva2VDb2xvci5HZXRSR0IoUiwgRywgQik7DQotICAgIGlmIChwUGF0dGVybi0+bV9QYXR0ZXJuVHlwZSA9PSAxICYmICgoQ1BERl9UaWxpbmdQYXR0ZXJuKilwUGF0dGVybiktPm1fYkNvbG9yZWQgJiYgIXJldCkgew0KLSAgICAgICAgcERhdGEtPm1fU3Ryb2tlUkdCID0gMHgwMEJGQkZCRjsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBwRGF0YS0+bV9TdHJva2VSR0IgPSBwRGF0YS0+bV9TdHJva2VDb2xvci5HZXRSR0IoUiwgRywgQikgPyBGWFNZU19SR0IoUiwgRywgQikgOiAoRlhfRFdPUkQpIC0gMTsNCi19DQotQ1BERl9UZXh0U3RhdGVEYXRhOjpDUERGX1RleHRTdGF0ZURhdGEoKQ0KLXsNCi0gICAgbV9wRm9udCA9IE5VTEw7DQotICAgIG1fRm9udFNpemUgPSAxLjBmOw0KLSAgICBtX1dvcmRTcGFjZSA9IDA7DQotICAgIG1fQ2hhclNwYWNlID0gMDsNCi0gICAgbV9UZXh0TW9kZSA9IDA7DQotICAgIG1fTWF0cml4WzBdID0gbV9NYXRyaXhbM10gPSAxLjBmOw0KLSAgICBtX01hdHJpeFsxXSA9IG1fTWF0cml4WzJdID0gMDsNCi0gICAgbV9DVE1bMF0gPSBtX0NUTVszXSA9IDEuMGY7DQotICAgIG1fQ1RNWzFdID0gbV9DVE1bMl0gPSAwOw0KLX0NCi1DUERGX1RleHRTdGF0ZURhdGE6OkNQREZfVGV4dFN0YXRlRGF0YShjb25zdCBDUERGX1RleHRTdGF0ZURhdGEmIHNyYykNCi17DQotICAgIEZYU1lTX21lbWNweTMyKHRoaXMsICZzcmMsIHNpemVvZihDUERGX1RleHRTdGF0ZURhdGEpKTsNCi0gICAgaWYgKG1fcEZvbnQgJiYgbV9wRm9udC0+bV9wRG9jdW1lbnQpIHsNCi0gICAgICAgIG1fcEZvbnQgPSBtX3BGb250LT5tX3BEb2N1bWVudC0+R2V0UGFnZURhdGEoKS0+R2V0Rm9udChtX3BGb250LT5HZXRGb250RGljdCgpLCBGQUxTRSk7DQotICAgIH0NCi19DQotQ1BERl9UZXh0U3RhdGVEYXRhOjp+Q1BERl9UZXh0U3RhdGVEYXRhKCkNCi17DQotICAgIENQREZfRm9udCogcEZvbnQgPSBtX3BGb250Ow0KLSAgICBpZiAocEZvbnQgJiYgcEZvbnQtPm1fcERvY3VtZW50KSB7DQotICAgICAgICBwRm9udC0+bV9wRG9jdW1lbnQtPkdldFBhZ2VEYXRhKCktPlJlbGVhc2VGb250KHBGb250LT5HZXRGb250RGljdCgpKTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfVGV4dFN0YXRlOjpTZXRGb250KENQREZfRm9udCogcEZvbnQpDQotew0KLSAgICBDUERGX0ZvbnQqJiBwU3RhdGVGb250ID0gR2V0TW9kaWZ5KCktPm1fcEZvbnQ7DQotICAgIENQREZfRG9jUGFnZURhdGEqIHBEb2NQYWdlRGF0YSA9IE5VTEw7DQotICAgIGlmIChwU3RhdGVGb250ICYmIHBTdGF0ZUZvbnQtPm1fcERvY3VtZW50KSB7DQotICAgICAgICBwRG9jUGFnZURhdGEgPSBwU3RhdGVGb250LT5tX3BEb2N1bWVudC0+R2V0UGFnZURhdGEoKTsNCi0gICAgICAgIHBEb2NQYWdlRGF0YS0+UmVsZWFzZUZvbnQocFN0YXRlRm9udC0+R2V0Rm9udERpY3QoKSk7DQotICAgIH0NCi0gICAgcFN0YXRlRm9udCA9IHBGb250Ow0KLX0NCi1GWF9GTE9BVCBDUERGX1RleHRTdGF0ZTo6R2V0Rm9udFNpemVWKCkgY29uc3QNCi17DQotICAgIEZYX0ZMT0FUKiBwTWF0cml4ID0gR2V0TWF0cml4KCk7DQotICAgIEZYX0ZMT0FUIHVuaXQgPSBGWFNZU19zcXJ0MihwTWF0cml4WzFdLCBwTWF0cml4WzNdKTsNCi0gICAgRlhfRkxPQVQgc2l6ZSA9IEZYU1lTX011bCh1bml0LCBHZXRGb250U2l6ZSgpKTsNCi0gICAgcmV0dXJuIChGWF9GTE9BVClGWFNZU19mYWJzKHNpemUpOw0KLX0NCi1GWF9GTE9BVCBDUERGX1RleHRTdGF0ZTo6R2V0Rm9udFNpemVIKCkgY29uc3QNCi17DQotICAgIEZYX0ZMT0FUKiBwTWF0cml4ID0gR2V0TWF0cml4KCk7DQotICAgIEZYX0ZMT0FUIHVuaXQgPSBGWFNZU19zcXJ0MihwTWF0cml4WzBdLCBwTWF0cml4WzJdKTsNCi0gICAgRlhfRkxPQVQgc2l6ZSA9IEZYU1lTX011bCh1bml0LCBHZXRGb250U2l6ZSgpKTsNCi0gICAgcmV0dXJuIChGWF9GTE9BVClGWFNZU19mYWJzKHNpemUpOw0KLX0NCi1GWF9GTE9BVCBDUERGX1RleHRTdGF0ZTo6R2V0QmFzZWxpbmVBbmdsZSgpIGNvbnN0DQotew0KLSAgICBGWF9GTE9BVCogbV9NYXRyaXggPSBHZXRNYXRyaXgoKTsNCi0gICAgcmV0dXJuIEZYU1lTX2F0YW4yKG1fTWF0cml4WzJdLCBtX01hdHJpeFswXSk7DQotfQ0KLUZYX0ZMT0FUIENQREZfVGV4dFN0YXRlOjpHZXRTaGVhckFuZ2xlKCkgY29uc3QNCi17DQotICAgIEZYX0ZMT0FUKiBtX01hdHJpeCA9IEdldE1hdHJpeCgpOw0KLSAgICBGWF9GTE9BVCBzaGVhcl9hbmdsZSA9IEZYU1lTX2F0YW4yKG1fTWF0cml4WzFdLCBtX01hdHJpeFszXSk7DQotICAgIHJldHVybiBHZXRCYXNlbGluZUFuZ2xlKCkgKyBzaGVhcl9hbmdsZTsNCi19DQotQ1BERl9HZW5lcmFsU3RhdGVEYXRhOjpDUERGX0dlbmVyYWxTdGF0ZURhdGEoKQ0KLXsNCi0gICAgRlhTWVNfbWVtc2V0MzIodGhpcywgMCwgc2l6ZW9mKENQREZfR2VuZXJhbFN0YXRlRGF0YSkpOw0KLSAgICBGWFNZU19zdHJjcHkoKEZYX0xQU1RSKW1fQmxlbmRNb2RlLCAoRlhfTFBDU1RSKSJOb3JtYWwiKTsNCi0gICAgbV9TdHJva2VBbHBoYSA9IDEuMGY7DQotICAgIG1fRmlsbEFscGhhID0gMS4wZjsNCi0gICAgbV9GbGF0bmVzcyA9IDEuMGY7DQotICAgIG1fTWF0cml4LlNldElkZW50aXR5KCk7DQotfQ0KLUNQREZfR2VuZXJhbFN0YXRlRGF0YTo6Q1BERl9HZW5lcmFsU3RhdGVEYXRhKGNvbnN0IENQREZfR2VuZXJhbFN0YXRlRGF0YSYgc3JjKQ0KLXsNCi0gICAgRlhTWVNfbWVtY3B5MzIodGhpcywgJnNyYywgc2l6ZW9mKENQREZfR2VuZXJhbFN0YXRlRGF0YSkpOw0KLSAgICBpZiAoc3JjLm1fcFRyYW5zZmVyRnVuYyAmJiBzcmMubV9wVHJhbnNmZXJGdW5jLT5tX3BQREZEb2MpIHsNCi0gICAgICAgIENQREZfRG9jUmVuZGVyRGF0YSogcERvY0NhY2hlID0gc3JjLm1fcFRyYW5zZmVyRnVuYy0+bV9wUERGRG9jLT5HZXRSZW5kZXJEYXRhKCk7DQotICAgICAgICBpZiAoIXBEb2NDYWNoZSkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fcFRyYW5zZmVyRnVuYyA9IHBEb2NDYWNoZS0+R2V0VHJhbnNmZXJGdW5jKG1fcFRSKTsNCi0gICAgfQ0KLX0NCi1DUERGX0dlbmVyYWxTdGF0ZURhdGE6On5DUERGX0dlbmVyYWxTdGF0ZURhdGEoKQ0KLXsNCi0gICAgaWYgKG1fcFRyYW5zZmVyRnVuYyAmJiBtX3BUcmFuc2ZlckZ1bmMtPm1fcFBERkRvYykgew0KLSAgICAgICAgQ1BERl9Eb2NSZW5kZXJEYXRhKiBwRG9jQ2FjaGUgPSBtX3BUcmFuc2ZlckZ1bmMtPm1fcFBERkRvYy0+R2V0UmVuZGVyRGF0YSgpOw0KLSAgICAgICAgaWYgKCFwRG9jQ2FjaGUpIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBwRG9jQ2FjaGUtPlJlbGVhc2VUcmFuc2ZlckZ1bmMobV9wVFIpOw0KLSAgICB9DQotfQ0KLXN0YXRpYyBpbnQgR2V0QmxlbmRUeXBlKEZYX0JTVFIgbW9kZSkNCi17DQotICAgIHN3aXRjaCAobW9kZS5HZXRJRCgpKSB7DQotICAgICAgICBjYXNlIEZYQlNUUl9JRCgnTicsICdvJywgJ3InLCAnbScpOg0KLSAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0MnLCAnbycsICdtJywgJ3AnKToNCi0gICAgICAgICAgICByZXR1cm4gRlhESUJfQkxFTkRfTk9STUFMOw0KLSAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ00nLCAndScsICdsJywgJ3QnKToNCi0gICAgICAgICAgICByZXR1cm4gRlhESUJfQkxFTkRfTVVMVElQTFk7DQotICAgICAgICBjYXNlIEZYQlNUUl9JRCgnUycsICdjJywgJ3InLCAnZScpOg0KLSAgICAgICAgICAgIHJldHVybiBGWERJQl9CTEVORF9TQ1JFRU47DQotICAgICAgICBjYXNlIEZYQlNUUl9JRCgnTycsICd2JywgJ2UnLCAncicpOg0KLSAgICAgICAgICAgIHJldHVybiBGWERJQl9CTEVORF9PVkVSTEFZOw0KLSAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0QnLCAnYScsICdyJywgJ2snKToNCi0gICAgICAgICAgICByZXR1cm4gRlhESUJfQkxFTkRfREFSS0VOOw0KLSAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0wnLCAnaScsICdnJywgJ2gnKToNCi0gICAgICAgICAgICByZXR1cm4gRlhESUJfQkxFTkRfTElHSFRFTjsNCi0gICAgICAgIGNhc2UgRlhCU1RSX0lEKCdDJywgJ28nLCAnbCcsICdvJyk6DQotICAgICAgICAgICAgaWYgKG1vZGUuR2V0TGVuZ3RoKCkgPT0gMTApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZYRElCX0JMRU5EX0NPTE9SRE9ER0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChtb2RlLkdldExlbmd0aCgpID09IDkpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZYRElCX0JMRU5EX0NPTE9SQlVSTjsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuIEZYRElCX0JMRU5EX0NPTE9SOw0KLSAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0gnLCAnYScsICdyJywgJ2QnKToNCi0gICAgICAgICAgICByZXR1cm4gRlhESUJfQkxFTkRfSEFSRExJR0hUOw0KLSAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ1MnLCAnbycsICdmJywgJ3QnKToNCi0gICAgICAgICAgICByZXR1cm4gRlhESUJfQkxFTkRfU09GVExJR0hUOw0KLSAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0QnLCAnaScsICdmJywgJ2YnKToNCi0gICAgICAgICAgICByZXR1cm4gRlhESUJfQkxFTkRfRElGRkVSRU5DRTsNCi0gICAgICAgIGNhc2UgRlhCU1RSX0lEKCdFJywgJ3gnLCAnYycsICdsJyk6DQotICAgICAgICAgICAgcmV0dXJuIEZYRElCX0JMRU5EX0VYQ0xVU0lPTjsNCi0gICAgICAgIGNhc2UgRlhCU1RSX0lEKCdIJywgJ3UnLCAnZScsIDApOg0KLSAgICAgICAgICAgIHJldHVybiBGWERJQl9CTEVORF9IVUU7DQotICAgICAgICBjYXNlIEZYQlNUUl9JRCgnUycsICdhJywgJ3QnLCAndScpOg0KLSAgICAgICAgICAgIHJldHVybiBGWERJQl9CTEVORF9TQVRVUkFUSU9OOw0KLSAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0wnLCAndScsICdtJywgJ2knKToNCi0gICAgICAgICAgICByZXR1cm4gRlhESUJfQkxFTkRfTFVNSU5PU0lUWTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRlhESUJfQkxFTkRfTk9STUFMOw0KLX0NCi12b2lkIENQREZfR2VuZXJhbFN0YXRlRGF0YTo6U2V0QmxlbmRNb2RlKEZYX0JTVFIgYmxlbmRfbW9kZSkNCi17DQotICAgIGlmIChibGVuZF9tb2RlLkdldExlbmd0aCgpID4gMTUpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWFNZU19tZW1jcHkzMihtX0JsZW5kTW9kZSwgKEZYX0xQQ0JZVEUpYmxlbmRfbW9kZSwgYmxlbmRfbW9kZS5HZXRMZW5ndGgoKSk7DQotICAgIG1fQmxlbmRNb2RlW2JsZW5kX21vZGUuR2V0TGVuZ3RoKCldID0gMDsNCi0gICAgbV9CbGVuZFR5cGUgPSA6OkdldEJsZW5kVHlwZShibGVuZF9tb2RlKTsNCi19DQotaW50IFJJX1N0cmluZ1RvSWQoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHJpKQ0KLXsNCi0gICAgRlhfRFdPUkQgaWQgPSByaS5HZXRJRCgpOw0KLSAgICBpZiAoaWQgPT0gRlhCU1RSX0lEKCdBJywgJ2InLCAncycsICdvJykpIHsNCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotICAgIGlmIChpZCA9PSBGWEJTVFJfSUQoJ1MnLCAnYScsICd0JywgJ3UnKSkgew0KLSAgICAgICAgcmV0dXJuIDI7DQotICAgIH0NCi0gICAgaWYgKGlkID09IEZYQlNUUl9JRCgnUCcsICdlJywgJ3InLCAnYycpKSB7DQotICAgICAgICByZXR1cm4gMzsNCi0gICAgfQ0KLSAgICByZXR1cm4gMDsNCi19DQotdm9pZCBDUERGX0dlbmVyYWxTdGF0ZTo6U2V0UmVuZGVySW50ZW50KGNvbnN0IENGWF9CeXRlU3RyaW5nJiByaSkNCi17DQotICAgIEdldE1vZGlmeSgpLT5tX1JlbmRlckludGVudCA9IFJJX1N0cmluZ1RvSWQocmkpOw0KLX0NCi1DUERGX0FsbFN0YXRlczo6Q1BERl9BbGxTdGF0ZXMoKQ0KLXsNCi0gICAgbV9UZXh0WCA9IG1fVGV4dFkgPSBtX1RleHRMaW5lWCA9IG1fVGV4dExpbmVZID0gMDsNCi0gICAgbV9UZXh0TGVhZGluZyA9IDA7DQotICAgIG1fVGV4dFJpc2UgPSAwOw0KLSAgICBtX1RleHRIb3J6U2NhbGUgPSAxLjBmOw0KLX0NCi1DUERGX0FsbFN0YXRlczo6fkNQREZfQWxsU3RhdGVzKCkNCi17DQotfQ0KLXZvaWQgQ1BERl9BbGxTdGF0ZXM6OkNvcHkoY29uc3QgQ1BERl9BbGxTdGF0ZXMmIHNyYykNCi17DQotICAgIENvcHlTdGF0ZXMoc3JjKTsNCi0gICAgbV9UZXh0TWF0cml4LkNvcHkoc3JjLm1fVGV4dE1hdHJpeCk7DQotICAgIG1fUGFyZW50TWF0cml4LkNvcHkoc3JjLm1fUGFyZW50TWF0cml4KTsNCi0gICAgbV9DVE0uQ29weShzcmMubV9DVE0pOw0KLSAgICBtX1RleHRYID0gc3JjLm1fVGV4dFg7DQotICAgIG1fVGV4dFkgPSBzcmMubV9UZXh0WTsNCi0gICAgbV9UZXh0TGluZVggPSBzcmMubV9UZXh0TGluZVg7DQotICAgIG1fVGV4dExpbmVZID0gc3JjLm1fVGV4dExpbmVZOw0KLSAgICBtX1RleHRMZWFkaW5nID0gc3JjLm1fVGV4dExlYWRpbmc7DQotICAgIG1fVGV4dFJpc2UgPSBzcmMubV9UZXh0UmlzZTsNCi0gICAgbV9UZXh0SG9yelNjYWxlID0gc3JjLm1fVGV4dEhvcnpTY2FsZTsNCi19DQotdm9pZCBDUERGX0FsbFN0YXRlczo6U2V0TGluZURhc2goQ1BERl9BcnJheSogcEFycmF5LCBGWF9GTE9BVCBwaGFzZSwgRlhfRkxPQVQgc2NhbGUpDQotew0KLSAgICBDRlhfR3JhcGhTdGF0ZURhdGEqIHBEYXRhID0gbV9HcmFwaFN0YXRlLkdldE1vZGlmeSgpOw0KLSAgICBwRGF0YS0+bV9EYXNoUGhhc2UgPSBGWFNZU19NdWwocGhhc2UsIHNjYWxlKTsNCi0gICAgcERhdGEtPlNldERhc2hDb3VudChwQXJyYXktPkdldENvdW50KCkpOw0KLSAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcEFycmF5LT5HZXRDb3VudCgpOyBpICsrKSB7DQotICAgICAgICBwRGF0YS0+bV9EYXNoQXJyYXlbaV0gPSBGWFNZU19NdWwocEFycmF5LT5HZXROdW1iZXIoaSksIHNjYWxlKTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfQWxsU3RhdGVzOjpQcm9jZXNzRXh0R1MoQ1BERl9EaWN0aW9uYXJ5KiBwR1MsIENQREZfU3RyZWFtQ29udGVudFBhcnNlciogcFBhcnNlcikNCi17DQotICAgIENQREZfR2VuZXJhbFN0YXRlRGF0YSogcEdlbmVyYWxTdGF0ZSA9IG1fR2VuZXJhbFN0YXRlLkdldE1vZGlmeSgpOw0KLSAgICBGWF9QT1NJVElPTiBwb3MgPSBwR1MtPkdldFN0YXJ0UG9zKCk7DQotICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIGtleV9zdHI7DQotICAgICAgICBDUERGX09iamVjdCogcE9iamVjdCA9IHBHUy0+R2V0TmV4dEVsZW1lbnQocG9zLCBrZXlfc3RyKS0+R2V0RGlyZWN0KCk7DQotICAgICAgICBpZiAocE9iamVjdCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBGWF9EV09SRCBrZXkgPSBrZXlfc3RyLkdldElEKCk7DQotICAgICAgICBzd2l0Y2ggKGtleSkgew0KLSAgICAgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdMJywgJ1cnLCAwLCAwKToNCi0gICAgICAgICAgICAgICAgbV9HcmFwaFN0YXRlLkdldE1vZGlmeSgpLT5tX0xpbmVXaWR0aCA9IHBPYmplY3QtPkdldE51bWJlcigpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIEZYQlNUUl9JRCgnTCcsICdDJywgMCwgMCk6DQotICAgICAgICAgICAgICAgIG1fR3JhcGhTdGF0ZS5HZXRNb2RpZnkoKS0+bV9MaW5lQ2FwID0gKENGWF9HcmFwaFN0YXRlRGF0YTo6TGluZUNhcClwT2JqZWN0LT5HZXRJbnRlZ2VyKCk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdMJywgJ0onLCAwLCAwKToNCi0gICAgICAgICAgICAgICAgbV9HcmFwaFN0YXRlLkdldE1vZGlmeSgpLT5tX0xpbmVKb2luID0gKENGWF9HcmFwaFN0YXRlRGF0YTo6TGluZUpvaW4pcE9iamVjdC0+R2V0SW50ZWdlcigpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIEZYQlNUUl9JRCgnTScsICdMJywgMCwgMCk6DQotICAgICAgICAgICAgICAgIG1fR3JhcGhTdGF0ZS5HZXRNb2RpZnkoKS0+bV9NaXRlckxpbWl0ID0gcE9iamVjdC0+R2V0TnVtYmVyKCk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdEJywgMCwgMCwgMCk6CXsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwT2JqZWN0LT5HZXRUeXBlKCkgIT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBDUERGX0FycmF5KiBwRGFzaCA9IChDUERGX0FycmF5KilwT2JqZWN0Ow0KLSAgICAgICAgICAgICAgICAgICAgQ1BERl9BcnJheSogcEFycmF5ID0gcERhc2gtPkdldEFycmF5KDApOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBBcnJheSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBTZXRMaW5lRGFzaChwQXJyYXksIHBEYXNoLT5HZXROdW1iZXIoMSksIDEuMGYpOw0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjYXNlIEZYQlNUUl9JRCgnUicsICdJJywgMCwgMCk6DQotICAgICAgICAgICAgICAgIG1fR2VuZXJhbFN0YXRlLlNldFJlbmRlckludGVudChwT2JqZWN0LT5HZXRTdHJpbmcoKSk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdGJywgJ28nLCAnbicsICd0Jyk6CXsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwT2JqZWN0LT5HZXRUeXBlKCkgIT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBDUERGX0FycmF5KiBwRm9udCA9IChDUERGX0FycmF5KilwT2JqZWN0Ow0KLSAgICAgICAgICAgICAgICAgICAgbV9UZXh0U3RhdGUuR2V0TW9kaWZ5KCktPm1fRm9udFNpemUgPSBwRm9udC0+R2V0TnVtYmVyKDEpOw0KLSAgICAgICAgICAgICAgICAgICAgbV9UZXh0U3RhdGUuU2V0Rm9udChwUGFyc2VyLT5GaW5kRm9udChwRm9udC0+R2V0U3RyaW5nKDApKSk7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdUJywgJ1InLCAwLCAwKToNCi0gICAgICAgICAgICAgICAgaWYgKHBHUy0+S2V5RXhpc3QoRlhfQlNUUkMoIlRSMiIpKSkgew0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjYXNlIEZYQlNUUl9JRCgnVCcsICdSJywgJzInLCAwKToNCi0gICAgICAgICAgICAgICAgaWYgKHBPYmplY3QgJiYgcE9iamVjdC0+R2V0VHlwZSgpICE9IFBERk9CSl9OQU1FKSB7DQotICAgICAgICAgICAgICAgICAgICBwR2VuZXJhbFN0YXRlLT5tX3BUUiA9IHBPYmplY3Q7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBwR2VuZXJhbFN0YXRlLT5tX3BUUiA9IE5VTEw7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0InLCAnTScsIDAsIDApOgl7DQotICAgICAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBtb2RlOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBPYmplY3QtPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gKChDUERGX0FycmF5KilwT2JqZWN0KS0+R2V0U3RyaW5nKDApOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gcE9iamVjdC0+R2V0U3RyaW5nKCk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBwR2VuZXJhbFN0YXRlLT5TZXRCbGVuZE1vZGUobW9kZSk7DQotICAgICAgICAgICAgICAgICAgICBpZiAocEdlbmVyYWxTdGF0ZS0+bV9CbGVuZFR5cGUgPiBGWERJQl9CTEVORF9NVUxUSVBMWSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBQYXJzZXItPm1fcE9iamVjdExpc3QtPm1fYkJhY2tncm91bmRBbHBoYU5lZWRlZCA9IFRSVUU7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdTJywgJ00nLCAnYScsICdzJyk6DQotICAgICAgICAgICAgICAgIGlmIChwT2JqZWN0ICYmIHBPYmplY3QtPkdldFR5cGUoKSA9PSBQREZPQkpfRElDVElPTkFSWSkgew0KLSAgICAgICAgICAgICAgICAgICAgcEdlbmVyYWxTdGF0ZS0+bV9wU29mdE1hc2sgPSBwT2JqZWN0Ow0KLSAgICAgICAgICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIocEdlbmVyYWxTdGF0ZS0+bV9TTWFza01hdHJpeCwgJnBQYXJzZXItPm1fcEN1clN0YXRlcy0+bV9DVE0sIHNpemVvZihDUERGX01hdHJpeCkpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgcEdlbmVyYWxTdGF0ZS0+bV9wU29mdE1hc2sgPSBOVUxMOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdDJywgJ0EnLCAwLCAwKToNCi0gICAgICAgICAgICAgICAgcEdlbmVyYWxTdGF0ZS0+bV9TdHJva2VBbHBoYSA9IFBERl9DbGlwRmxvYXQocE9iamVjdC0+R2V0TnVtYmVyKCkpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIEZYQlNUUl9JRCgnYycsICdhJywgMCwgMCk6DQotICAgICAgICAgICAgICAgIHBHZW5lcmFsU3RhdGUtPm1fRmlsbEFscGhhID0gUERGX0NsaXBGbG9hdChwT2JqZWN0LT5HZXROdW1iZXIoKSk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdPJywgJ1AnLCAwLCAwKToNCi0gICAgICAgICAgICAgICAgcEdlbmVyYWxTdGF0ZS0+bV9TdHJva2VPUCA9IHBPYmplY3QtPkdldEludGVnZXIoKTsNCi0gICAgICAgICAgICAgICAgaWYgKCFwR1MtPktleUV4aXN0KEZYX0JTVFJDKCJvcCIpKSkgew0KLSAgICAgICAgICAgICAgICAgICAgcEdlbmVyYWxTdGF0ZS0+bV9GaWxsT1AgPSBwT2JqZWN0LT5HZXRJbnRlZ2VyKCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ28nLCAncCcsIDAsIDApOg0KLSAgICAgICAgICAgICAgICBwR2VuZXJhbFN0YXRlLT5tX0ZpbGxPUCA9IHBPYmplY3QtPkdldEludGVnZXIoKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ08nLCAnUCcsICdNJywgMCk6DQotICAgICAgICAgICAgICAgIHBHZW5lcmFsU3RhdGUtPm1fT1BNb2RlID0gcE9iamVjdC0+R2V0SW50ZWdlcigpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIEZYQlNUUl9JRCgnQicsICdHJywgMCwgMCk6DQotICAgICAgICAgICAgICAgIGlmIChwR1MtPktleUV4aXN0KEZYX0JTVFJDKCJCRzIiKSkpIHsNCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0InLCAnRycsICcyJywgMCk6DQotICAgICAgICAgICAgICAgIHBHZW5lcmFsU3RhdGUtPm1fcEJHID0gcE9iamVjdDsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ1UnLCAnQycsICdSJywgMCk6DQotICAgICAgICAgICAgICAgIGlmIChwR1MtPktleUV4aXN0KEZYX0JTVFJDKCJVQ1IyIikpKSB7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdVJywgJ0MnLCAnUicsICcyJyk6DQotICAgICAgICAgICAgICAgIHBHZW5lcmFsU3RhdGUtPm1fcFVDUiA9IHBPYmplY3Q7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdIJywgJ1QnLCAwLCAwKToNCi0gICAgICAgICAgICAgICAgcEdlbmVyYWxTdGF0ZS0+bV9wSFQgPSBwT2JqZWN0Ow0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIEZYQlNUUl9JRCgnRicsICdMJywgMCwgMCk6DQotICAgICAgICAgICAgICAgIHBHZW5lcmFsU3RhdGUtPm1fRmxhdG5lc3MgPSBwT2JqZWN0LT5HZXROdW1iZXIoKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ1MnLCAnTScsIDAsIDApOg0KLSAgICAgICAgICAgICAgICBwR2VuZXJhbFN0YXRlLT5tX1Ntb290aG5lc3MgPSBwT2JqZWN0LT5HZXROdW1iZXIoKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ1MnLCAnQScsIDAsIDApOg0KLSAgICAgICAgICAgICAgICBwR2VuZXJhbFN0YXRlLT5tX1N0cm9rZUFkanVzdCA9IHBPYmplY3QtPkdldEludGVnZXIoKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0EnLCAnSScsICdTJywgMCk6DQotICAgICAgICAgICAgICAgIHBHZW5lcmFsU3RhdGUtPm1fQWxwaGFTb3VyY2UgPSBwT2JqZWN0LT5HZXRJbnRlZ2VyKCk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdUJywgJ0snLCAwLCAwKToNCi0gICAgICAgICAgICAgICAgcEdlbmVyYWxTdGF0ZS0+bV9UZXh0S25vY2tvdXQgPSBwT2JqZWN0LT5HZXRJbnRlZ2VyKCk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHBHZW5lcmFsU3RhdGUtPm1fTWF0cml4ID0gbV9DVE07DQotfQ0KLUNQREZfQ29udGVudE1hcmtJdGVtOjpDUERGX0NvbnRlbnRNYXJrSXRlbSgpDQotew0KLSAgICBtX1BhcmFtVHlwZSA9IE5vbmU7DQotfQ0KLUNQREZfQ29udGVudE1hcmtJdGVtOjpDUERGX0NvbnRlbnRNYXJrSXRlbShjb25zdCBDUERGX0NvbnRlbnRNYXJrSXRlbSYgc3JjKQ0KLXsNCi0gICAgbV9NYXJrTmFtZSA9IHNyYy5tX01hcmtOYW1lOw0KLSAgICBtX1BhcmFtVHlwZSA9IHNyYy5tX1BhcmFtVHlwZTsNCi0gICAgaWYgKG1fUGFyYW1UeXBlID09IERpcmVjdERpY3QpIHsNCi0gICAgICAgIG1fcFBhcmFtID0gKChDUERGX0RpY3Rpb25hcnkqKXNyYy5tX3BQYXJhbSktPkNsb25lKCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX3BQYXJhbSA9IHNyYy5tX3BQYXJhbTsNCi0gICAgfQ0KLX0NCi1DUERGX0NvbnRlbnRNYXJrSXRlbTo6fkNQREZfQ29udGVudE1hcmtJdGVtKCkNCi17DQotICAgIGlmIChtX1BhcmFtVHlwZSA9PSBEaXJlY3REaWN0KSB7DQotICAgICAgICAoKENQREZfRGljdGlvbmFyeSopbV9wUGFyYW0pLT5SZWxlYXNlKCk7DQotICAgIH0NCi19DQotRlhfQk9PTAlDUERGX0NvbnRlbnRNYXJrSXRlbTo6SGFzTUNJRCgpIGNvbnN0DQotew0KLSAgICBpZiAobV9wUGFyYW0gJiYgKG1fUGFyYW1UeXBlID09IERpcmVjdERpY3QgfHwgbV9QYXJhbVR5cGUgPT0gUHJvcGVydGllc0RpY3QpKSB7DQotICAgICAgICByZXR1cm4gKChDUERGX0RpY3Rpb25hcnkgKiltX3BQYXJhbSktPktleUV4aXN0KEZYX0JTVFJDKCJNQ0lEIikpOw0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotQ1BERl9Db250ZW50TWFya0RhdGE6OkNQREZfQ29udGVudE1hcmtEYXRhKGNvbnN0IENQREZfQ29udGVudE1hcmtEYXRhJiBzcmMpDQotew0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNyYy5tX01hcmtzLkdldFNpemUoKTsgaSArKykgew0KLSAgICAgICAgbV9NYXJrcy5BZGQoc3JjLm1fTWFya3NbaV0pOw0KLSAgICB9DQotfQ0KLWludCBDUERGX0NvbnRlbnRNYXJrRGF0YTo6R2V0TUNJRCgpIGNvbnN0DQotew0KLSAgICBDUERGX0NvbnRlbnRNYXJrSXRlbTo6UGFyYW1UeXBlIHR5cGUgPSBDUERGX0NvbnRlbnRNYXJrSXRlbTo6Tm9uZTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX01hcmtzLkdldFNpemUoKTsgaSArKykgew0KLSAgICAgICAgdHlwZSA9IG1fTWFya3NbaV0uR2V0UGFyYW1UeXBlKCk7DQotICAgICAgICBpZiAodHlwZSA9PSBDUERGX0NvbnRlbnRNYXJrSXRlbTo6UHJvcGVydGllc0RpY3QgfHwgdHlwZSA9PSBDUERGX0NvbnRlbnRNYXJrSXRlbTo6RGlyZWN0RGljdCkgew0KLSAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSAqcERpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5ICopbV9NYXJrc1tpXS5HZXRQYXJhbSgpOw0KLSAgICAgICAgICAgIGlmIChwRGljdC0+S2V5RXhpc3QoRlhfQlNUUkMoIk1DSUQiKSkpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJNQ0lEIikpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gLTE7DQotfQ0KLXZvaWQgQ1BERl9Db250ZW50TWFya0RhdGE6OkFkZE1hcmsoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUsIENQREZfRGljdGlvbmFyeSogcERpY3QsIEZYX0JPT0wgYkRpcmVjdCkNCi17DQotICAgIENQREZfQ29udGVudE1hcmtJdGVtJiBpdGVtID0gbV9NYXJrcy5BZGQoKTsNCi0gICAgaXRlbS5TZXROYW1lKG5hbWUpOw0KLSAgICBpZiAocERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGl0ZW0uU2V0UGFyYW0oYkRpcmVjdCA/IENQREZfQ29udGVudE1hcmtJdGVtOjpEaXJlY3REaWN0IDogQ1BERl9Db250ZW50TWFya0l0ZW06OlByb3BlcnRpZXNEaWN0LA0KLSAgICAgICAgICAgICAgICAgIGJEaXJlY3QgPyBwRGljdC0+Q2xvbmUoKSA6IHBEaWN0KTsNCi19DQotdm9pZCBDUERGX0NvbnRlbnRNYXJrRGF0YTo6RGVsZXRlTGFzdE1hcmsoKQ0KLXsNCi0gICAgaW50IHNpemUgPSBtX01hcmtzLkdldFNpemUoKTsNCi0gICAgaWYgKHNpemUgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fTWFya3MuUmVtb3ZlQXQoc2l6ZSAtIDEpOw0KLX0NCi1GWF9CT09MIENQREZfQ29udGVudE1hcms6Okhhc01hcmsoRlhfQlNUUiBtYXJrKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fcE9iamVjdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3BPYmplY3QtPkNvdW50SXRlbXMoKTsgaSArKykgew0KLSAgICAgICAgQ1BERl9Db250ZW50TWFya0l0ZW0mIGl0ZW0gPSBtX3BPYmplY3QtPkdldEl0ZW0oaSk7DQotICAgICAgICBpZiAoaXRlbS5HZXROYW1lKCkgPT0gbWFyaykgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotRlhfQk9PTCBDUERGX0NvbnRlbnRNYXJrOjpMb29rdXBNYXJrKEZYX0JTVFIgbWFyaywgQ1BERl9EaWN0aW9uYXJ5KiYgcERpY3QpIGNvbnN0DQotew0KLSAgICBpZiAobV9wT2JqZWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fcE9iamVjdC0+Q291bnRJdGVtcygpOyBpICsrKSB7DQotICAgICAgICBDUERGX0NvbnRlbnRNYXJrSXRlbSYgaXRlbSA9IG1fcE9iamVjdC0+R2V0SXRlbShpKTsNCi0gICAgICAgIGlmIChpdGVtLkdldE5hbWUoKSA9PSBtYXJrKSB7DQotICAgICAgICAgICAgcERpY3QgPSBOVUxMOw0KLSAgICAgICAgICAgIGlmIChpdGVtLkdldFBhcmFtVHlwZSgpID09IENQREZfQ29udGVudE1hcmtJdGVtOjpQcm9wZXJ0aWVzRGljdCB8fA0KLSAgICAgICAgICAgICAgICAgICAgaXRlbS5HZXRQYXJhbVR5cGUoKSA9PSBDUERGX0NvbnRlbnRNYXJrSXRlbTo6RGlyZWN0RGljdCkgew0KLSAgICAgICAgICAgICAgICBwRGljdCA9IChDUERGX0RpY3Rpb25hcnkqKWl0ZW0uR2V0UGFyYW0oKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2VvYmouaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9yZW5kZXIuaCIKKyNpbmNsdWRlICJwYWdlaW50LmgiCisjaW5jbHVkZSAiLi4vZnBkZl9yZW5kZXIvcmVuZGVyX2ludC5oIgordm9pZCBDUERGX0dyYXBoaWNTdGF0ZXM6OkRlZmF1bHRTdGF0ZXMoKQoreworICAgIG1fQ29sb3JTdGF0ZS5OZXcoKS0+RGVmYXVsdCgpOworfQordm9pZCBDUERGX0dyYXBoaWNTdGF0ZXM6OkNvcHlTdGF0ZXMoY29uc3QgQ1BERl9HcmFwaGljU3RhdGVzJiBzcmMpCit7CisgICAgbV9DbGlwUGF0aCA9IHNyYy5tX0NsaXBQYXRoOworICAgIG1fR3JhcGhTdGF0ZSA9IHNyYy5tX0dyYXBoU3RhdGU7CisgICAgbV9Db2xvclN0YXRlID0gc3JjLm1fQ29sb3JTdGF0ZTsKKyAgICBtX1RleHRTdGF0ZSA9IHNyYy5tX1RleHRTdGF0ZTsKKyAgICBtX0dlbmVyYWxTdGF0ZSA9IHNyYy5tX0dlbmVyYWxTdGF0ZTsKK30KK0NQREZfQ2xpcFBhdGhEYXRhOjpDUERGX0NsaXBQYXRoRGF0YSgpCit7CisgICAgbV9QYXRoQ291bnQgPSAwOworICAgIG1fcFBhdGhMaXN0ID0gTlVMTDsKKyAgICBtX3BUeXBlTGlzdCA9IE5VTEw7CisgICAgbV9UZXh0Q291bnQgPSAwOworICAgIG1fcFRleHRMaXN0ID0gTlVMTDsKK30KK0NQREZfQ2xpcFBhdGhEYXRhOjp+Q1BERl9DbGlwUGF0aERhdGEoKQoreworICAgIGludCBpOworICAgIGlmIChtX3BQYXRoTGlzdCkgeworICAgICAgICBGWF9ERUxFVEVfVkVDVE9SKG1fcFBhdGhMaXN0LCBDUERGX1BhdGgsIG1fUGF0aENvdW50KTsKKyAgICB9CisgICAgaWYgKG1fcFR5cGVMaXN0KSB7CisgICAgICAgIEZYX0ZyZWUobV9wVHlwZUxpc3QpOworICAgIH0KKyAgICBmb3IgKGkgPSBtX1RleHRDb3VudCAtIDE7IGkgPiAtMTsgaSAtLSkKKyAgICAgICAgaWYgKG1fcFRleHRMaXN0W2ldKSB7CisgICAgICAgICAgICBkZWxldGUgbV9wVGV4dExpc3RbaV07CisgICAgICAgIH0KKyAgICBpZiAobV9wVGV4dExpc3QpIHsKKyAgICAgICAgRlhfRnJlZShtX3BUZXh0TGlzdCk7CisgICAgfQorfQorQ1BERl9DbGlwUGF0aERhdGE6OkNQREZfQ2xpcFBhdGhEYXRhKGNvbnN0IENQREZfQ2xpcFBhdGhEYXRhJiBzcmMpCit7CisgICAgbV9wUGF0aExpc3QgPSBOVUxMOworICAgIG1fcFBhdGhMaXN0ID0gTlVMTDsKKyAgICBtX3BUZXh0TGlzdCA9IE5VTEw7CisgICAgbV9QYXRoQ291bnQgPSBzcmMubV9QYXRoQ291bnQ7CisgICAgaWYgKG1fUGF0aENvdW50KSB7CisgICAgICAgIGludCBhbGxvY19zaXplID0gbV9QYXRoQ291bnQ7CisgICAgICAgIGlmIChhbGxvY19zaXplICUgOCkgeworICAgICAgICAgICAgYWxsb2Nfc2l6ZSArPSA4IC0gKGFsbG9jX3NpemUgJSA4KTsKKyAgICAgICAgfQorICAgICAgICBGWF9ORVdfVkVDVE9SKG1fcFBhdGhMaXN0LCBDUERGX1BhdGgsIGFsbG9jX3NpemUpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fUGF0aENvdW50OyBpICsrKSB7CisgICAgICAgICAgICBtX3BQYXRoTGlzdFtpXSA9IHNyYy5tX3BQYXRoTGlzdFtpXTsKKyAgICAgICAgfQorICAgICAgICBtX3BUeXBlTGlzdCA9IEZYX0FsbG9jKEZYX0JZVEUsIGFsbG9jX3NpemUpOworICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BUeXBlTGlzdCwgc3JjLm1fcFR5cGVMaXN0LCBtX1BhdGhDb3VudCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wUGF0aExpc3QgPSBOVUxMOworICAgICAgICBtX3BUeXBlTGlzdCA9IE5VTEw7CisgICAgfQorICAgIG1fVGV4dENvdW50ID0gc3JjLm1fVGV4dENvdW50OworICAgIGlmIChtX1RleHRDb3VudCkgeworICAgICAgICBtX3BUZXh0TGlzdCA9IEZYX0FsbG9jKENQREZfVGV4dE9iamVjdCosIG1fVGV4dENvdW50KTsKKyAgICAgICAgRlhTWVNfbWVtc2V0MzIobV9wVGV4dExpc3QsIDAsIHNpemVvZihDUERGX1RleHRPYmplY3QqKSAqIG1fVGV4dENvdW50KTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX1RleHRDb3VudDsgaSArKykgeworICAgICAgICAgICAgaWYgKHNyYy5tX3BUZXh0TGlzdFtpXSkgeworICAgICAgICAgICAgICAgIG1fcFRleHRMaXN0W2ldID0gRlhfTkVXIENQREZfVGV4dE9iamVjdDsKKyAgICAgICAgICAgICAgICBtX3BUZXh0TGlzdFtpXS0+Q29weShzcmMubV9wVGV4dExpc3RbaV0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX3BUZXh0TGlzdFtpXSA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBtX3BUZXh0TGlzdCA9IE5VTEw7CisgICAgfQorfQordm9pZCBDUERGX0NsaXBQYXRoRGF0YTo6U2V0Q291bnQoaW50IHBhdGhfY291bnQsIGludCB0ZXh0X2NvdW50KQoreworICAgIEFTU0VSVChtX1RleHRDb3VudCA9PSAwICYmIG1fUGF0aENvdW50ID09IDApOworICAgIGlmIChwYXRoX2NvdW50KSB7CisgICAgICAgIG1fUGF0aENvdW50ID0gcGF0aF9jb3VudDsKKyAgICAgICAgaW50IGFsbG9jX3NpemUgPSAocGF0aF9jb3VudCArIDcpIC8gOCAqIDg7CisgICAgICAgIEZYX05FV19WRUNUT1IobV9wUGF0aExpc3QsIENQREZfUGF0aCwgYWxsb2Nfc2l6ZSk7CisgICAgICAgIG1fcFR5cGVMaXN0ID0gRlhfQWxsb2MoRlhfQllURSwgYWxsb2Nfc2l6ZSk7CisgICAgfQorICAgIGlmICh0ZXh0X2NvdW50KSB7CisgICAgICAgIG1fVGV4dENvdW50ID0gdGV4dF9jb3VudDsKKyAgICAgICAgbV9wVGV4dExpc3QgPSBGWF9BbGxvYyhDUERGX1RleHRPYmplY3QqLCB0ZXh0X2NvdW50KTsKKyAgICAgICAgRlhTWVNfbWVtc2V0MzIobV9wVGV4dExpc3QsIDAsIHNpemVvZih2b2lkKikgKiB0ZXh0X2NvdW50KTsKKyAgICB9Cit9CitDUERGX1JlY3QgQ1BERl9DbGlwUGF0aDo6R2V0Q2xpcEJveCgpIGNvbnN0Cit7CisgICAgQ1BERl9SZWN0IHJlY3Q7CisgICAgRlhfQk9PTCBiU3RhcnRlZCA9IEZBTFNFOworICAgIGludCBjb3VudCA9IEdldFBhdGhDb3VudCgpOworICAgIGlmIChjb3VudCkgeworICAgICAgICByZWN0ID0gR2V0UGF0aCgwKS5HZXRCb3VuZGluZ0JveCgpOworICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IGNvdW50OyBpICsrKSB7CisgICAgICAgICAgICBDUERGX1JlY3QgcGF0aF9yZWN0ID0gR2V0UGF0aChpKS5HZXRCb3VuZGluZ0JveCgpOworICAgICAgICAgICAgcmVjdC5JbnRlcnNlY3QocGF0aF9yZWN0KTsKKyAgICAgICAgfQorICAgICAgICBiU3RhcnRlZCA9IFRSVUU7CisgICAgfQorICAgIGNvdW50ID0gR2V0VGV4dENvdW50KCk7CisgICAgaWYgKGNvdW50KSB7CisgICAgICAgIENQREZfUmVjdCBsYXllcl9yZWN0OworICAgICAgICBGWF9CT09MIGJMYXllclN0YXJ0ZWQgPSBGQUxTRTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSArKykgeworICAgICAgICAgICAgQ1BERl9UZXh0T2JqZWN0KiBwVGV4dE9iaiA9IEdldFRleHQoaSk7CisgICAgICAgICAgICBpZiAocFRleHRPYmogPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGlmICghYlN0YXJ0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVjdCA9IGxheWVyX3JlY3Q7CisgICAgICAgICAgICAgICAgICAgIGJTdGFydGVkID0gVFJVRTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICByZWN0LkludGVyc2VjdChsYXllcl9yZWN0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYkxheWVyU3RhcnRlZCA9IEZBTFNFOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIWJMYXllclN0YXJ0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgbGF5ZXJfcmVjdCA9IHBUZXh0T2JqLT5HZXRCQm94KE5VTEwpOworICAgICAgICAgICAgICAgICAgICBiTGF5ZXJTdGFydGVkID0gVFJVRTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsYXllcl9yZWN0LlVuaW9uKHBUZXh0T2JqLT5HZXRCQm94KE5VTEwpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlY3Q7Cit9Cit2b2lkIENQREZfQ2xpcFBhdGg6OkFwcGVuZFBhdGgoQ1BERl9QYXRoIHBhdGgsIGludCB0eXBlLCBGWF9CT09MIGJBdXRvTWVyZ2UpCit7CisgICAgQ1BERl9DbGlwUGF0aERhdGEqIHBEYXRhID0gR2V0TW9kaWZ5KCk7CisgICAgaWYgKHBEYXRhLT5tX1BhdGhDb3VudCAmJiBiQXV0b01lcmdlKSB7CisgICAgICAgIENQREZfUGF0aCBvbGRfcGF0aCA9IHBEYXRhLT5tX3BQYXRoTGlzdFtwRGF0YS0+bV9QYXRoQ291bnQgLSAxXTsKKyAgICAgICAgaWYgKG9sZF9wYXRoLklzUmVjdCgpKSB7CisgICAgICAgICAgICBDUERGX1JlY3Qgb2xkX3JlY3Qob2xkX3BhdGguR2V0UG9pbnRYKDApLCBvbGRfcGF0aC5HZXRQb2ludFkoMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX3BhdGguR2V0UG9pbnRYKDIpLCBvbGRfcGF0aC5HZXRQb2ludFkoMikpOworICAgICAgICAgICAgQ1BERl9SZWN0IG5ld19yZWN0ID0gcGF0aC5HZXRCb3VuZGluZ0JveCgpOworICAgICAgICAgICAgaWYgKG9sZF9yZWN0LkNvbnRhaW5zKG5ld19yZWN0KSkgeworICAgICAgICAgICAgICAgIHBEYXRhLT5tX1BhdGhDb3VudCAtLTsKKyAgICAgICAgICAgICAgICBwRGF0YS0+bV9wUGF0aExpc3RbcERhdGEtPm1fUGF0aENvdW50XS5TZXROdWxsKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHBEYXRhLT5tX1BhdGhDb3VudCAlIDggPT0gMCkgeworICAgICAgICBDUERGX1BhdGgqIHBOZXdQYXRoOworICAgICAgICBGWF9ORVdfVkVDVE9SKHBOZXdQYXRoLCBDUERGX1BhdGgsIHBEYXRhLT5tX1BhdGhDb3VudCArIDgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBEYXRhLT5tX1BhdGhDb3VudDsgaSArKykgeworICAgICAgICAgICAgcE5ld1BhdGhbaV0gPSBwRGF0YS0+bV9wUGF0aExpc3RbaV07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBEYXRhLT5tX3BQYXRoTGlzdCkgeworICAgICAgICAgICAgRlhfREVMRVRFX1ZFQ1RPUihwRGF0YS0+bV9wUGF0aExpc3QsIENQREZfUGF0aCwgcERhdGEtPm1fUGF0aENvdW50KTsKKyAgICAgICAgfQorICAgICAgICBGWF9CWVRFKiBwTmV3VHlwZSA9IEZYX0FsbG9jKEZYX0JZVEUsIHBEYXRhLT5tX1BhdGhDb3VudCArIDgpOworICAgICAgICBGWFNZU19tZW1jcHkzMihwTmV3VHlwZSwgcERhdGEtPm1fcFR5cGVMaXN0LCBwRGF0YS0+bV9QYXRoQ291bnQpOworICAgICAgICBpZiAocERhdGEtPm1fcFR5cGVMaXN0KSB7CisgICAgICAgICAgICBGWF9GcmVlKHBEYXRhLT5tX3BUeXBlTGlzdCk7CisgICAgICAgIH0KKyAgICAgICAgcERhdGEtPm1fcFBhdGhMaXN0ID0gcE5ld1BhdGg7CisgICAgICAgIHBEYXRhLT5tX3BUeXBlTGlzdCA9IHBOZXdUeXBlOworICAgIH0KKyAgICBwRGF0YS0+bV9wUGF0aExpc3RbcERhdGEtPm1fUGF0aENvdW50XSA9IHBhdGg7CisgICAgcERhdGEtPm1fcFR5cGVMaXN0W3BEYXRhLT5tX1BhdGhDb3VudF0gPSAoRlhfQllURSl0eXBlOworICAgIHBEYXRhLT5tX1BhdGhDb3VudCArKzsKK30KK3ZvaWQgQ1BERl9DbGlwUGF0aDo6RGVsZXRlUGF0aChpbnQgaW5kZXgpCit7CisgICAgQ1BERl9DbGlwUGF0aERhdGEqIHBEYXRhID0gR2V0TW9kaWZ5KCk7CisgICAgaWYgKGluZGV4ID49IHBEYXRhLT5tX1BhdGhDb3VudCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHBEYXRhLT5tX3BQYXRoTGlzdFtpbmRleF0uU2V0TnVsbCgpOworICAgIGZvciAoaW50IGkgPSBpbmRleDsgaSA8IHBEYXRhLT5tX1BhdGhDb3VudCAtIDE7IGkgKyspIHsKKyAgICAgICAgcERhdGEtPm1fcFBhdGhMaXN0W2ldID0gcERhdGEtPm1fcFBhdGhMaXN0W2kgKyAxXTsKKyAgICB9CisgICAgcERhdGEtPm1fcFBhdGhMaXN0W3BEYXRhLT5tX1BhdGhDb3VudCAtIDFdLlNldE51bGwoKTsKKyAgICBGWFNZU19tZW1tb3ZlMzIocERhdGEtPm1fcFR5cGVMaXN0ICsgaW5kZXgsIHBEYXRhLT5tX3BUeXBlTGlzdCArIGluZGV4ICsgMSwgcERhdGEtPm1fUGF0aENvdW50IC0gaW5kZXggLSAxKTsKKyAgICBwRGF0YS0+bV9QYXRoQ291bnQgLS07Cit9CisjZGVmaW5lIEZQREZfQ0xJUFBBVEhfTUFYX1RFWFRTIDEwMjQKK3ZvaWQgQ1BERl9DbGlwUGF0aDo6QXBwZW5kVGV4dHMoQ1BERl9UZXh0T2JqZWN0KiogcFRleHRzLCBpbnQgY291bnQpCit7CisgICAgQ1BERl9DbGlwUGF0aERhdGEqIHBEYXRhID0gR2V0TW9kaWZ5KCk7CisgICAgaWYgKHBEYXRhLT5tX1RleHRDb3VudCArIGNvdW50ID4gRlBERl9DTElQUEFUSF9NQVhfVEVYVFMpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSArKykgeworICAgICAgICAgICAgcFRleHRzW2ldLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX1RleHRPYmplY3QqKiBwTmV3TGlzdCA9IEZYX0FsbG9jKENQREZfVGV4dE9iamVjdCosIHBEYXRhLT5tX1RleHRDb3VudCArIGNvdW50ICsgMSk7CisgICAgaWYgKHBEYXRhLT5tX3BUZXh0TGlzdCkgeworICAgICAgICBGWFNZU19tZW1jcHkzMihwTmV3TGlzdCwgcERhdGEtPm1fcFRleHRMaXN0LCBwRGF0YS0+bV9UZXh0Q291bnQgKiBzaXplb2YoQ1BERl9UZXh0T2JqZWN0KikpOworICAgICAgICBGWF9GcmVlKHBEYXRhLT5tX3BUZXh0TGlzdCk7CisgICAgfQorICAgIHBEYXRhLT5tX3BUZXh0TGlzdCA9IHBOZXdMaXN0OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkgKyspIHsKKyAgICAgICAgcERhdGEtPm1fcFRleHRMaXN0W3BEYXRhLT5tX1RleHRDb3VudCArIGldID0gcFRleHRzW2ldOworICAgIH0KKyAgICBwRGF0YS0+bV9wVGV4dExpc3RbcERhdGEtPm1fVGV4dENvdW50ICsgY291bnRdID0gTlVMTDsKKyAgICBwRGF0YS0+bV9UZXh0Q291bnQgKz0gY291bnQgKyAxOworfQordm9pZCBDUERGX0NsaXBQYXRoOjpUcmFuc2Zvcm0oY29uc3QgQ1BERl9NYXRyaXgmIG1hdHJpeCkKK3sKKyAgICBDUERGX0NsaXBQYXRoRGF0YSogcERhdGEgPSBHZXRNb2RpZnkoKTsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgcERhdGEtPm1fUGF0aENvdW50OyBpICsrKSB7CisgICAgICAgIHBEYXRhLT5tX3BQYXRoTGlzdFtpXS5UcmFuc2Zvcm0oJm1hdHJpeCk7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBwRGF0YS0+bV9UZXh0Q291bnQ7IGkgKyspCisgICAgICAgIGlmIChwRGF0YS0+bV9wVGV4dExpc3RbaV0pIHsKKyAgICAgICAgICAgIHBEYXRhLT5tX3BUZXh0TGlzdFtpXS0+VHJhbnNmb3JtKG1hdHJpeCk7CisgICAgICAgIH0KK30KK0NQREZfQ29sb3JTdGF0ZURhdGE6OkNQREZfQ29sb3JTdGF0ZURhdGEoY29uc3QgQ1BERl9Db2xvclN0YXRlRGF0YSYgc3JjKQoreworICAgIG1fRmlsbENvbG9yLkNvcHkoJnNyYy5tX0ZpbGxDb2xvcik7CisgICAgbV9GaWxsUkdCID0gc3JjLm1fRmlsbFJHQjsKKyAgICBtX1N0cm9rZUNvbG9yLkNvcHkoJnNyYy5tX1N0cm9rZUNvbG9yKTsKKyAgICBtX1N0cm9rZVJHQiA9IHNyYy5tX1N0cm9rZVJHQjsKK30KK3ZvaWQgQ1BERl9Db2xvclN0YXRlRGF0YTo6RGVmYXVsdCgpCit7CisgICAgbV9GaWxsUkdCID0gbV9TdHJva2VSR0IgPSAwOworICAgIG1fRmlsbENvbG9yLlNldENvbG9yU3BhY2UoQ1BERl9Db2xvclNwYWNlOjpHZXRTdG9ja0NTKFBERkNTX0RFVklDRUdSQVkpKTsKKyAgICBtX1N0cm9rZUNvbG9yLlNldENvbG9yU3BhY2UoQ1BERl9Db2xvclNwYWNlOjpHZXRTdG9ja0NTKFBERkNTX0RFVklDRUdSQVkpKTsKK30KK3ZvaWQgQ1BERl9Db2xvclN0YXRlOjpTZXRGaWxsQ29sb3IoQ1BERl9Db2xvclNwYWNlKiBwQ1MsIEZYX0ZMT0FUKiBwVmFsdWUsIGludCBuVmFsdWVzKQoreworICAgIENQREZfQ29sb3JTdGF0ZURhdGEqIHBEYXRhID0gR2V0TW9kaWZ5KCk7CisgICAgU2V0Q29sb3IocERhdGEtPm1fRmlsbENvbG9yLCBwRGF0YS0+bV9GaWxsUkdCLCBwQ1MsIHBWYWx1ZSwgblZhbHVlcyk7Cit9Cit2b2lkIENQREZfQ29sb3JTdGF0ZTo6U2V0U3Ryb2tlQ29sb3IoQ1BERl9Db2xvclNwYWNlKiBwQ1MsIEZYX0ZMT0FUKiBwVmFsdWUsIGludCBuVmFsdWVzKQoreworICAgIENQREZfQ29sb3JTdGF0ZURhdGEqIHBEYXRhID0gR2V0TW9kaWZ5KCk7CisgICAgU2V0Q29sb3IocERhdGEtPm1fU3Ryb2tlQ29sb3IsIHBEYXRhLT5tX1N0cm9rZVJHQiwgcENTLCBwVmFsdWUsIG5WYWx1ZXMpOworfQordm9pZCBDUERGX0NvbG9yU3RhdGU6OlNldENvbG9yKENQREZfQ29sb3ImIGNvbG9yLCBGWF9EV09SRCYgcmdiLCBDUERGX0NvbG9yU3BhY2UqIHBDUywgRlhfRkxPQVQqIHBWYWx1ZSwgaW50IG5WYWx1ZXMpCit7CisgICAgaWYgKHBDUykgeworICAgICAgICBjb2xvci5TZXRDb2xvclNwYWNlKHBDUyk7CisgICAgfSBlbHNlIGlmIChjb2xvci5Jc051bGwoKSkgeworICAgICAgICBjb2xvci5TZXRDb2xvclNwYWNlKENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19ERVZJQ0VHUkFZKSk7CisgICAgfQorICAgIGlmIChjb2xvci5tX3BDUy0+Q291bnRDb21wb25lbnRzKCkgPiBuVmFsdWVzKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29sb3IuU2V0VmFsdWUocFZhbHVlKTsKKyAgICBpbnQgUiwgRywgQjsKKyAgICByZ2IgPSBjb2xvci5HZXRSR0IoUiwgRywgQikgPyBGWFNZU19SR0IoUiwgRywgQikgOiAoRlhfRFdPUkQpIC0gMTsKK30KK3ZvaWQgQ1BERl9Db2xvclN0YXRlOjpTZXRGaWxsUGF0dGVybihDUERGX1BhdHRlcm4qIHBQYXR0ZXJuLCBGWF9GTE9BVCogcFZhbHVlLCBpbnQgblZhbHVlcykKK3sKKyAgICBDUERGX0NvbG9yU3RhdGVEYXRhKiBwRGF0YSA9IEdldE1vZGlmeSgpOworICAgIHBEYXRhLT5tX0ZpbGxDb2xvci5TZXRWYWx1ZShwUGF0dGVybiwgcFZhbHVlLCBuVmFsdWVzKTsKKyAgICBpbnQgUiwgRywgQjsKKyAgICBGWF9CT09MIHJldCA9IHBEYXRhLT5tX0ZpbGxDb2xvci5HZXRSR0IoUiwgRywgQik7CisgICAgaWYgKHBQYXR0ZXJuLT5tX1BhdHRlcm5UeXBlID09IDEgJiYgKChDUERGX1RpbGluZ1BhdHRlcm4qKXBQYXR0ZXJuKS0+bV9iQ29sb3JlZCAmJiAhcmV0KSB7CisgICAgICAgIHBEYXRhLT5tX0ZpbGxSR0IgPSAweDAwQkZCRkJGOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHBEYXRhLT5tX0ZpbGxSR0IgPSByZXQgPyBGWFNZU19SR0IoUiwgRywgQikgOiAoRlhfRFdPUkQpIC0gMTsKK30KK3ZvaWQgQ1BERl9Db2xvclN0YXRlOjpTZXRTdHJva2VQYXR0ZXJuKENQREZfUGF0dGVybiogcFBhdHRlcm4sIEZYX0ZMT0FUKiBwVmFsdWUsIGludCBuVmFsdWVzKQoreworICAgIENQREZfQ29sb3JTdGF0ZURhdGEqIHBEYXRhID0gR2V0TW9kaWZ5KCk7CisgICAgcERhdGEtPm1fU3Ryb2tlQ29sb3IuU2V0VmFsdWUocFBhdHRlcm4sIHBWYWx1ZSwgblZhbHVlcyk7CisgICAgaW50IFIsIEcsIEI7CisgICAgRlhfQk9PTCByZXQgPSBwRGF0YS0+bV9TdHJva2VDb2xvci5HZXRSR0IoUiwgRywgQik7CisgICAgaWYgKHBQYXR0ZXJuLT5tX1BhdHRlcm5UeXBlID09IDEgJiYgKChDUERGX1RpbGluZ1BhdHRlcm4qKXBQYXR0ZXJuKS0+bV9iQ29sb3JlZCAmJiAhcmV0KSB7CisgICAgICAgIHBEYXRhLT5tX1N0cm9rZVJHQiA9IDB4MDBCRkJGQkY7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcERhdGEtPm1fU3Ryb2tlUkdCID0gcERhdGEtPm1fU3Ryb2tlQ29sb3IuR2V0UkdCKFIsIEcsIEIpID8gRlhTWVNfUkdCKFIsIEcsIEIpIDogKEZYX0RXT1JEKSAtIDE7Cit9CitDUERGX1RleHRTdGF0ZURhdGE6OkNQREZfVGV4dFN0YXRlRGF0YSgpCit7CisgICAgbV9wRm9udCA9IE5VTEw7CisgICAgbV9Gb250U2l6ZSA9IDEuMGY7CisgICAgbV9Xb3JkU3BhY2UgPSAwOworICAgIG1fQ2hhclNwYWNlID0gMDsKKyAgICBtX1RleHRNb2RlID0gMDsKKyAgICBtX01hdHJpeFswXSA9IG1fTWF0cml4WzNdID0gMS4wZjsKKyAgICBtX01hdHJpeFsxXSA9IG1fTWF0cml4WzJdID0gMDsKKyAgICBtX0NUTVswXSA9IG1fQ1RNWzNdID0gMS4wZjsKKyAgICBtX0NUTVsxXSA9IG1fQ1RNWzJdID0gMDsKK30KK0NQREZfVGV4dFN0YXRlRGF0YTo6Q1BERl9UZXh0U3RhdGVEYXRhKGNvbnN0IENQREZfVGV4dFN0YXRlRGF0YSYgc3JjKQoreworICAgIEZYU1lTX21lbWNweTMyKHRoaXMsICZzcmMsIHNpemVvZihDUERGX1RleHRTdGF0ZURhdGEpKTsKKyAgICBpZiAobV9wRm9udCAmJiBtX3BGb250LT5tX3BEb2N1bWVudCkgeworICAgICAgICBtX3BGb250ID0gbV9wRm9udC0+bV9wRG9jdW1lbnQtPkdldFBhZ2VEYXRhKCktPkdldEZvbnQobV9wRm9udC0+R2V0Rm9udERpY3QoKSwgRkFMU0UpOworICAgIH0KK30KK0NQREZfVGV4dFN0YXRlRGF0YTo6fkNQREZfVGV4dFN0YXRlRGF0YSgpCit7CisgICAgQ1BERl9Gb250KiBwRm9udCA9IG1fcEZvbnQ7CisgICAgaWYgKHBGb250ICYmIHBGb250LT5tX3BEb2N1bWVudCkgeworICAgICAgICBwRm9udC0+bV9wRG9jdW1lbnQtPkdldFBhZ2VEYXRhKCktPlJlbGVhc2VGb250KHBGb250LT5HZXRGb250RGljdCgpKTsKKyAgICB9Cit9Cit2b2lkIENQREZfVGV4dFN0YXRlOjpTZXRGb250KENQREZfRm9udCogcEZvbnQpCit7CisgICAgQ1BERl9Gb250KiYgcFN0YXRlRm9udCA9IEdldE1vZGlmeSgpLT5tX3BGb250OworICAgIENQREZfRG9jUGFnZURhdGEqIHBEb2NQYWdlRGF0YSA9IE5VTEw7CisgICAgaWYgKHBTdGF0ZUZvbnQgJiYgcFN0YXRlRm9udC0+bV9wRG9jdW1lbnQpIHsKKyAgICAgICAgcERvY1BhZ2VEYXRhID0gcFN0YXRlRm9udC0+bV9wRG9jdW1lbnQtPkdldFBhZ2VEYXRhKCk7CisgICAgICAgIHBEb2NQYWdlRGF0YS0+UmVsZWFzZUZvbnQocFN0YXRlRm9udC0+R2V0Rm9udERpY3QoKSk7CisgICAgfQorICAgIHBTdGF0ZUZvbnQgPSBwRm9udDsKK30KK0ZYX0ZMT0FUIENQREZfVGV4dFN0YXRlOjpHZXRGb250U2l6ZVYoKSBjb25zdAoreworICAgIEZYX0ZMT0FUKiBwTWF0cml4ID0gR2V0TWF0cml4KCk7CisgICAgRlhfRkxPQVQgdW5pdCA9IEZYU1lTX3NxcnQyKHBNYXRyaXhbMV0sIHBNYXRyaXhbM10pOworICAgIEZYX0ZMT0FUIHNpemUgPSBGWFNZU19NdWwodW5pdCwgR2V0Rm9udFNpemUoKSk7CisgICAgcmV0dXJuIChGWF9GTE9BVClGWFNZU19mYWJzKHNpemUpOworfQorRlhfRkxPQVQgQ1BERl9UZXh0U3RhdGU6OkdldEZvbnRTaXplSCgpIGNvbnN0Cit7CisgICAgRlhfRkxPQVQqIHBNYXRyaXggPSBHZXRNYXRyaXgoKTsKKyAgICBGWF9GTE9BVCB1bml0ID0gRlhTWVNfc3FydDIocE1hdHJpeFswXSwgcE1hdHJpeFsyXSk7CisgICAgRlhfRkxPQVQgc2l6ZSA9IEZYU1lTX011bCh1bml0LCBHZXRGb250U2l6ZSgpKTsKKyAgICByZXR1cm4gKEZYX0ZMT0FUKUZYU1lTX2ZhYnMoc2l6ZSk7Cit9CitGWF9GTE9BVCBDUERGX1RleHRTdGF0ZTo6R2V0QmFzZWxpbmVBbmdsZSgpIGNvbnN0Cit7CisgICAgRlhfRkxPQVQqIG1fTWF0cml4ID0gR2V0TWF0cml4KCk7CisgICAgcmV0dXJuIEZYU1lTX2F0YW4yKG1fTWF0cml4WzJdLCBtX01hdHJpeFswXSk7Cit9CitGWF9GTE9BVCBDUERGX1RleHRTdGF0ZTo6R2V0U2hlYXJBbmdsZSgpIGNvbnN0Cit7CisgICAgRlhfRkxPQVQqIG1fTWF0cml4ID0gR2V0TWF0cml4KCk7CisgICAgRlhfRkxPQVQgc2hlYXJfYW5nbGUgPSBGWFNZU19hdGFuMihtX01hdHJpeFsxXSwgbV9NYXRyaXhbM10pOworICAgIHJldHVybiBHZXRCYXNlbGluZUFuZ2xlKCkgKyBzaGVhcl9hbmdsZTsKK30KK0NQREZfR2VuZXJhbFN0YXRlRGF0YTo6Q1BERl9HZW5lcmFsU3RhdGVEYXRhKCkKK3sKKyAgICBGWFNZU19tZW1zZXQzMih0aGlzLCAwLCBzaXplb2YoQ1BERl9HZW5lcmFsU3RhdGVEYXRhKSk7CisgICAgRlhTWVNfc3RyY3B5KChGWF9MUFNUUiltX0JsZW5kTW9kZSwgKEZYX0xQQ1NUUikiTm9ybWFsIik7CisgICAgbV9TdHJva2VBbHBoYSA9IDEuMGY7CisgICAgbV9GaWxsQWxwaGEgPSAxLjBmOworICAgIG1fRmxhdG5lc3MgPSAxLjBmOworICAgIG1fTWF0cml4LlNldElkZW50aXR5KCk7Cit9CitDUERGX0dlbmVyYWxTdGF0ZURhdGE6OkNQREZfR2VuZXJhbFN0YXRlRGF0YShjb25zdCBDUERGX0dlbmVyYWxTdGF0ZURhdGEmIHNyYykKK3sKKyAgICBGWFNZU19tZW1jcHkzMih0aGlzLCAmc3JjLCBzaXplb2YoQ1BERl9HZW5lcmFsU3RhdGVEYXRhKSk7CisgICAgaWYgKHNyYy5tX3BUcmFuc2ZlckZ1bmMgJiYgc3JjLm1fcFRyYW5zZmVyRnVuYy0+bV9wUERGRG9jKSB7CisgICAgICAgIENQREZfRG9jUmVuZGVyRGF0YSogcERvY0NhY2hlID0gc3JjLm1fcFRyYW5zZmVyRnVuYy0+bV9wUERGRG9jLT5HZXRSZW5kZXJEYXRhKCk7CisgICAgICAgIGlmICghcERvY0NhY2hlKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9wVHJhbnNmZXJGdW5jID0gcERvY0NhY2hlLT5HZXRUcmFuc2ZlckZ1bmMobV9wVFIpOworICAgIH0KK30KK0NQREZfR2VuZXJhbFN0YXRlRGF0YTo6fkNQREZfR2VuZXJhbFN0YXRlRGF0YSgpCit7CisgICAgaWYgKG1fcFRyYW5zZmVyRnVuYyAmJiBtX3BUcmFuc2ZlckZ1bmMtPm1fcFBERkRvYykgeworICAgICAgICBDUERGX0RvY1JlbmRlckRhdGEqIHBEb2NDYWNoZSA9IG1fcFRyYW5zZmVyRnVuYy0+bV9wUERGRG9jLT5HZXRSZW5kZXJEYXRhKCk7CisgICAgICAgIGlmICghcERvY0NhY2hlKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcERvY0NhY2hlLT5SZWxlYXNlVHJhbnNmZXJGdW5jKG1fcFRSKTsKKyAgICB9Cit9CitzdGF0aWMgaW50IEdldEJsZW5kVHlwZShGWF9CU1RSIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlLkdldElEKCkpIHsKKyAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ04nLCAnbycsICdyJywgJ20nKToKKyAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0MnLCAnbycsICdtJywgJ3AnKToKKyAgICAgICAgICAgIHJldHVybiBGWERJQl9CTEVORF9OT1JNQUw7CisgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdNJywgJ3UnLCAnbCcsICd0Jyk6CisgICAgICAgICAgICByZXR1cm4gRlhESUJfQkxFTkRfTVVMVElQTFk7CisgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdTJywgJ2MnLCAncicsICdlJyk6CisgICAgICAgICAgICByZXR1cm4gRlhESUJfQkxFTkRfU0NSRUVOOworICAgICAgICBjYXNlIEZYQlNUUl9JRCgnTycsICd2JywgJ2UnLCAncicpOgorICAgICAgICAgICAgcmV0dXJuIEZYRElCX0JMRU5EX09WRVJMQVk7CisgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdEJywgJ2EnLCAncicsICdrJyk6CisgICAgICAgICAgICByZXR1cm4gRlhESUJfQkxFTkRfREFSS0VOOworICAgICAgICBjYXNlIEZYQlNUUl9JRCgnTCcsICdpJywgJ2cnLCAnaCcpOgorICAgICAgICAgICAgcmV0dXJuIEZYRElCX0JMRU5EX0xJR0hURU47CisgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdDJywgJ28nLCAnbCcsICdvJyk6CisgICAgICAgICAgICBpZiAobW9kZS5HZXRMZW5ndGgoKSA9PSAxMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBGWERJQl9CTEVORF9DT0xPUkRPREdFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1vZGUuR2V0TGVuZ3RoKCkgPT0gOSkgeworICAgICAgICAgICAgICAgIHJldHVybiBGWERJQl9CTEVORF9DT0xPUkJVUk47CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gRlhESUJfQkxFTkRfQ09MT1I7CisgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdIJywgJ2EnLCAncicsICdkJyk6CisgICAgICAgICAgICByZXR1cm4gRlhESUJfQkxFTkRfSEFSRExJR0hUOworICAgICAgICBjYXNlIEZYQlNUUl9JRCgnUycsICdvJywgJ2YnLCAndCcpOgorICAgICAgICAgICAgcmV0dXJuIEZYRElCX0JMRU5EX1NPRlRMSUdIVDsKKyAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0QnLCAnaScsICdmJywgJ2YnKToKKyAgICAgICAgICAgIHJldHVybiBGWERJQl9CTEVORF9ESUZGRVJFTkNFOworICAgICAgICBjYXNlIEZYQlNUUl9JRCgnRScsICd4JywgJ2MnLCAnbCcpOgorICAgICAgICAgICAgcmV0dXJuIEZYRElCX0JMRU5EX0VYQ0xVU0lPTjsKKyAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0gnLCAndScsICdlJywgMCk6CisgICAgICAgICAgICByZXR1cm4gRlhESUJfQkxFTkRfSFVFOworICAgICAgICBjYXNlIEZYQlNUUl9JRCgnUycsICdhJywgJ3QnLCAndScpOgorICAgICAgICAgICAgcmV0dXJuIEZYRElCX0JMRU5EX1NBVFVSQVRJT047CisgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdMJywgJ3UnLCAnbScsICdpJyk6CisgICAgICAgICAgICByZXR1cm4gRlhESUJfQkxFTkRfTFVNSU5PU0lUWTsKKyAgICB9CisgICAgcmV0dXJuIEZYRElCX0JMRU5EX05PUk1BTDsKK30KK3ZvaWQgQ1BERl9HZW5lcmFsU3RhdGVEYXRhOjpTZXRCbGVuZE1vZGUoRlhfQlNUUiBibGVuZF9tb2RlKQoreworICAgIGlmIChibGVuZF9tb2RlLkdldExlbmd0aCgpID4gMTUpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGWFNZU19tZW1jcHkzMihtX0JsZW5kTW9kZSwgKEZYX0xQQ0JZVEUpYmxlbmRfbW9kZSwgYmxlbmRfbW9kZS5HZXRMZW5ndGgoKSk7CisgICAgbV9CbGVuZE1vZGVbYmxlbmRfbW9kZS5HZXRMZW5ndGgoKV0gPSAwOworICAgIG1fQmxlbmRUeXBlID0gOjpHZXRCbGVuZFR5cGUoYmxlbmRfbW9kZSk7Cit9CitpbnQgUklfU3RyaW5nVG9JZChjb25zdCBDRlhfQnl0ZVN0cmluZyYgcmkpCit7CisgICAgRlhfRFdPUkQgaWQgPSByaS5HZXRJRCgpOworICAgIGlmIChpZCA9PSBGWEJTVFJfSUQoJ0EnLCAnYicsICdzJywgJ28nKSkgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgaWYgKGlkID09IEZYQlNUUl9JRCgnUycsICdhJywgJ3QnLCAndScpKSB7CisgICAgICAgIHJldHVybiAyOworICAgIH0KKyAgICBpZiAoaWQgPT0gRlhCU1RSX0lEKCdQJywgJ2UnLCAncicsICdjJykpIHsKKyAgICAgICAgcmV0dXJuIDM7CisgICAgfQorICAgIHJldHVybiAwOworfQordm9pZCBDUERGX0dlbmVyYWxTdGF0ZTo6U2V0UmVuZGVySW50ZW50KGNvbnN0IENGWF9CeXRlU3RyaW5nJiByaSkKK3sKKyAgICBHZXRNb2RpZnkoKS0+bV9SZW5kZXJJbnRlbnQgPSBSSV9TdHJpbmdUb0lkKHJpKTsKK30KK0NQREZfQWxsU3RhdGVzOjpDUERGX0FsbFN0YXRlcygpCit7CisgICAgbV9UZXh0WCA9IG1fVGV4dFkgPSBtX1RleHRMaW5lWCA9IG1fVGV4dExpbmVZID0gMDsKKyAgICBtX1RleHRMZWFkaW5nID0gMDsKKyAgICBtX1RleHRSaXNlID0gMDsKKyAgICBtX1RleHRIb3J6U2NhbGUgPSAxLjBmOworfQorQ1BERl9BbGxTdGF0ZXM6On5DUERGX0FsbFN0YXRlcygpCit7Cit9Cit2b2lkIENQREZfQWxsU3RhdGVzOjpDb3B5KGNvbnN0IENQREZfQWxsU3RhdGVzJiBzcmMpCit7CisgICAgQ29weVN0YXRlcyhzcmMpOworICAgIG1fVGV4dE1hdHJpeC5Db3B5KHNyYy5tX1RleHRNYXRyaXgpOworICAgIG1fUGFyZW50TWF0cml4LkNvcHkoc3JjLm1fUGFyZW50TWF0cml4KTsKKyAgICBtX0NUTS5Db3B5KHNyYy5tX0NUTSk7CisgICAgbV9UZXh0WCA9IHNyYy5tX1RleHRYOworICAgIG1fVGV4dFkgPSBzcmMubV9UZXh0WTsKKyAgICBtX1RleHRMaW5lWCA9IHNyYy5tX1RleHRMaW5lWDsKKyAgICBtX1RleHRMaW5lWSA9IHNyYy5tX1RleHRMaW5lWTsKKyAgICBtX1RleHRMZWFkaW5nID0gc3JjLm1fVGV4dExlYWRpbmc7CisgICAgbV9UZXh0UmlzZSA9IHNyYy5tX1RleHRSaXNlOworICAgIG1fVGV4dEhvcnpTY2FsZSA9IHNyYy5tX1RleHRIb3J6U2NhbGU7Cit9Cit2b2lkIENQREZfQWxsU3RhdGVzOjpTZXRMaW5lRGFzaChDUERGX0FycmF5KiBwQXJyYXksIEZYX0ZMT0FUIHBoYXNlLCBGWF9GTE9BVCBzY2FsZSkKK3sKKyAgICBDRlhfR3JhcGhTdGF0ZURhdGEqIHBEYXRhID0gbV9HcmFwaFN0YXRlLkdldE1vZGlmeSgpOworICAgIHBEYXRhLT5tX0Rhc2hQaGFzZSA9IEZYU1lTX011bChwaGFzZSwgc2NhbGUpOworICAgIHBEYXRhLT5TZXREYXNoQ291bnQocEFycmF5LT5HZXRDb3VudCgpKTsKKyAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcEFycmF5LT5HZXRDb3VudCgpOyBpICsrKSB7CisgICAgICAgIHBEYXRhLT5tX0Rhc2hBcnJheVtpXSA9IEZYU1lTX011bChwQXJyYXktPkdldE51bWJlcihpKSwgc2NhbGUpOworICAgIH0KK30KK3ZvaWQgQ1BERl9BbGxTdGF0ZXM6OlByb2Nlc3NFeHRHUyhDUERGX0RpY3Rpb25hcnkqIHBHUywgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyKiBwUGFyc2VyKQoreworICAgIENQREZfR2VuZXJhbFN0YXRlRGF0YSogcEdlbmVyYWxTdGF0ZSA9IG1fR2VuZXJhbFN0YXRlLkdldE1vZGlmeSgpOworICAgIEZYX1BPU0lUSU9OIHBvcyA9IHBHUy0+R2V0U3RhcnRQb3MoKTsKKyAgICB3aGlsZSAocG9zKSB7CisgICAgICAgIENGWF9CeXRlU3RyaW5nIGtleV9zdHI7CisgICAgICAgIENQREZfT2JqZWN0KiBwT2JqZWN0ID0gcEdTLT5HZXROZXh0RWxlbWVudChwb3MsIGtleV9zdHIpLT5HZXREaXJlY3QoKTsKKyAgICAgICAgaWYgKHBPYmplY3QgPT0gTlVMTCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgRlhfRFdPUkQga2V5ID0ga2V5X3N0ci5HZXRJRCgpOworICAgICAgICBzd2l0Y2ggKGtleSkgeworICAgICAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0wnLCAnVycsIDAsIDApOgorICAgICAgICAgICAgICAgIG1fR3JhcGhTdGF0ZS5HZXRNb2RpZnkoKS0+bV9MaW5lV2lkdGggPSBwT2JqZWN0LT5HZXROdW1iZXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdMJywgJ0MnLCAwLCAwKToKKyAgICAgICAgICAgICAgICBtX0dyYXBoU3RhdGUuR2V0TW9kaWZ5KCktPm1fTGluZUNhcCA9IChDRlhfR3JhcGhTdGF0ZURhdGE6OkxpbmVDYXApcE9iamVjdC0+R2V0SW50ZWdlcigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0wnLCAnSicsIDAsIDApOgorICAgICAgICAgICAgICAgIG1fR3JhcGhTdGF0ZS5HZXRNb2RpZnkoKS0+bV9MaW5lSm9pbiA9IChDRlhfR3JhcGhTdGF0ZURhdGE6OkxpbmVKb2luKXBPYmplY3QtPkdldEludGVnZXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdNJywgJ0wnLCAwLCAwKToKKyAgICAgICAgICAgICAgICBtX0dyYXBoU3RhdGUuR2V0TW9kaWZ5KCktPm1fTWl0ZXJMaW1pdCA9IHBPYmplY3QtPkdldE51bWJlcigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0QnLCAwLCAwLCAwKToJeworICAgICAgICAgICAgICAgICAgICBpZiAocE9iamVjdC0+R2V0VHlwZSgpICE9IFBERk9CSl9BUlJBWSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgQ1BERl9BcnJheSogcERhc2ggPSAoQ1BERl9BcnJheSopcE9iamVjdDsKKyAgICAgICAgICAgICAgICAgICAgQ1BERl9BcnJheSogcEFycmF5ID0gcERhc2gtPkdldEFycmF5KDApOworICAgICAgICAgICAgICAgICAgICBpZiAocEFycmF5ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIFNldExpbmVEYXNoKHBBcnJheSwgcERhc2gtPkdldE51bWJlcigxKSwgMS4wZik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdSJywgJ0knLCAwLCAwKToKKyAgICAgICAgICAgICAgICBtX0dlbmVyYWxTdGF0ZS5TZXRSZW5kZXJJbnRlbnQocE9iamVjdC0+R2V0U3RyaW5nKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0YnLCAnbycsICduJywgJ3QnKToJeworICAgICAgICAgICAgICAgICAgICBpZiAocE9iamVjdC0+R2V0VHlwZSgpICE9IFBERk9CSl9BUlJBWSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgQ1BERl9BcnJheSogcEZvbnQgPSAoQ1BERl9BcnJheSopcE9iamVjdDsKKyAgICAgICAgICAgICAgICAgICAgbV9UZXh0U3RhdGUuR2V0TW9kaWZ5KCktPm1fRm9udFNpemUgPSBwRm9udC0+R2V0TnVtYmVyKDEpOworICAgICAgICAgICAgICAgICAgICBtX1RleHRTdGF0ZS5TZXRGb250KHBQYXJzZXItPkZpbmRGb250KHBGb250LT5HZXRTdHJpbmcoMCkpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ1QnLCAnUicsIDAsIDApOgorICAgICAgICAgICAgICAgIGlmIChwR1MtPktleUV4aXN0KEZYX0JTVFJDKCJUUjIiKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ1QnLCAnUicsICcyJywgMCk6CisgICAgICAgICAgICAgICAgaWYgKHBPYmplY3QgJiYgcE9iamVjdC0+R2V0VHlwZSgpICE9IFBERk9CSl9OQU1FKSB7CisgICAgICAgICAgICAgICAgICAgIHBHZW5lcmFsU3RhdGUtPm1fcFRSID0gcE9iamVjdDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwR2VuZXJhbFN0YXRlLT5tX3BUUiA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0InLCAnTScsIDAsIDApOgl7CisgICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIG1vZGU7CisgICAgICAgICAgICAgICAgICAgIGlmIChwT2JqZWN0LT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gKChDUERGX0FycmF5KilwT2JqZWN0KS0+R2V0U3RyaW5nKDApOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9IHBPYmplY3QtPkdldFN0cmluZygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBHZW5lcmFsU3RhdGUtPlNldEJsZW5kTW9kZShtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBHZW5lcmFsU3RhdGUtPm1fQmxlbmRUeXBlID4gRlhESUJfQkxFTkRfTVVMVElQTFkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBQYXJzZXItPm1fcE9iamVjdExpc3QtPm1fYkJhY2tncm91bmRBbHBoYU5lZWRlZCA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ1MnLCAnTScsICdhJywgJ3MnKToKKyAgICAgICAgICAgICAgICBpZiAocE9iamVjdCAmJiBwT2JqZWN0LT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgICAgICAgICAgICAgcEdlbmVyYWxTdGF0ZS0+bV9wU29mdE1hc2sgPSBwT2JqZWN0OworICAgICAgICAgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihwR2VuZXJhbFN0YXRlLT5tX1NNYXNrTWF0cml4LCAmcFBhcnNlci0+bV9wQ3VyU3RhdGVzLT5tX0NUTSwgc2l6ZW9mKENQREZfTWF0cml4KSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcEdlbmVyYWxTdGF0ZS0+bV9wU29mdE1hc2sgPSBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdDJywgJ0EnLCAwLCAwKToKKyAgICAgICAgICAgICAgICBwR2VuZXJhbFN0YXRlLT5tX1N0cm9rZUFscGhhID0gUERGX0NsaXBGbG9hdChwT2JqZWN0LT5HZXROdW1iZXIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZYQlNUUl9JRCgnYycsICdhJywgMCwgMCk6CisgICAgICAgICAgICAgICAgcEdlbmVyYWxTdGF0ZS0+bV9GaWxsQWxwaGEgPSBQREZfQ2xpcEZsb2F0KHBPYmplY3QtPkdldE51bWJlcigpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdPJywgJ1AnLCAwLCAwKToKKyAgICAgICAgICAgICAgICBwR2VuZXJhbFN0YXRlLT5tX1N0cm9rZU9QID0gcE9iamVjdC0+R2V0SW50ZWdlcigpOworICAgICAgICAgICAgICAgIGlmICghcEdTLT5LZXlFeGlzdChGWF9CU1RSQygib3AiKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcEdlbmVyYWxTdGF0ZS0+bV9GaWxsT1AgPSBwT2JqZWN0LT5HZXRJbnRlZ2VyKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ28nLCAncCcsIDAsIDApOgorICAgICAgICAgICAgICAgIHBHZW5lcmFsU3RhdGUtPm1fRmlsbE9QID0gcE9iamVjdC0+R2V0SW50ZWdlcigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ08nLCAnUCcsICdNJywgMCk6CisgICAgICAgICAgICAgICAgcEdlbmVyYWxTdGF0ZS0+bV9PUE1vZGUgPSBwT2JqZWN0LT5HZXRJbnRlZ2VyKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZYQlNUUl9JRCgnQicsICdHJywgMCwgMCk6CisgICAgICAgICAgICAgICAgaWYgKHBHUy0+S2V5RXhpc3QoRlhfQlNUUkMoIkJHMiIpKSkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEZYQlNUUl9JRCgnQicsICdHJywgJzInLCAwKToKKyAgICAgICAgICAgICAgICBwR2VuZXJhbFN0YXRlLT5tX3BCRyA9IHBPYmplY3Q7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZYQlNUUl9JRCgnVScsICdDJywgJ1InLCAwKToKKyAgICAgICAgICAgICAgICBpZiAocEdTLT5LZXlFeGlzdChGWF9CU1RSQygiVUNSMiIpKSkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEZYQlNUUl9JRCgnVScsICdDJywgJ1InLCAnMicpOgorICAgICAgICAgICAgICAgIHBHZW5lcmFsU3RhdGUtPm1fcFVDUiA9IHBPYmplY3Q7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZYQlNUUl9JRCgnSCcsICdUJywgMCwgMCk6CisgICAgICAgICAgICAgICAgcEdlbmVyYWxTdGF0ZS0+bV9wSFQgPSBwT2JqZWN0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0YnLCAnTCcsIDAsIDApOgorICAgICAgICAgICAgICAgIHBHZW5lcmFsU3RhdGUtPm1fRmxhdG5lc3MgPSBwT2JqZWN0LT5HZXROdW1iZXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdTJywgJ00nLCAwLCAwKToKKyAgICAgICAgICAgICAgICBwR2VuZXJhbFN0YXRlLT5tX1Ntb290aG5lc3MgPSBwT2JqZWN0LT5HZXROdW1iZXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdTJywgJ0EnLCAwLCAwKToKKyAgICAgICAgICAgICAgICBwR2VuZXJhbFN0YXRlLT5tX1N0cm9rZUFkanVzdCA9IHBPYmplY3QtPkdldEludGVnZXIoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdBJywgJ0knLCAnUycsIDApOgorICAgICAgICAgICAgICAgIHBHZW5lcmFsU3RhdGUtPm1fQWxwaGFTb3VyY2UgPSBwT2JqZWN0LT5HZXRJbnRlZ2VyKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZYQlNUUl9JRCgnVCcsICdLJywgMCwgMCk6CisgICAgICAgICAgICAgICAgcEdlbmVyYWxTdGF0ZS0+bV9UZXh0S25vY2tvdXQgPSBwT2JqZWN0LT5HZXRJbnRlZ2VyKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcEdlbmVyYWxTdGF0ZS0+bV9NYXRyaXggPSBtX0NUTTsKK30KK0NQREZfQ29udGVudE1hcmtJdGVtOjpDUERGX0NvbnRlbnRNYXJrSXRlbSgpCit7CisgICAgbV9QYXJhbVR5cGUgPSBOb25lOworfQorQ1BERl9Db250ZW50TWFya0l0ZW06OkNQREZfQ29udGVudE1hcmtJdGVtKGNvbnN0IENQREZfQ29udGVudE1hcmtJdGVtJiBzcmMpCit7CisgICAgbV9NYXJrTmFtZSA9IHNyYy5tX01hcmtOYW1lOworICAgIG1fUGFyYW1UeXBlID0gc3JjLm1fUGFyYW1UeXBlOworICAgIGlmIChtX1BhcmFtVHlwZSA9PSBEaXJlY3REaWN0KSB7CisgICAgICAgIG1fcFBhcmFtID0gKChDUERGX0RpY3Rpb25hcnkqKXNyYy5tX3BQYXJhbSktPkNsb25lKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wUGFyYW0gPSBzcmMubV9wUGFyYW07CisgICAgfQorfQorQ1BERl9Db250ZW50TWFya0l0ZW06On5DUERGX0NvbnRlbnRNYXJrSXRlbSgpCit7CisgICAgaWYgKG1fUGFyYW1UeXBlID09IERpcmVjdERpY3QpIHsKKyAgICAgICAgKChDUERGX0RpY3Rpb25hcnkqKW1fcFBhcmFtKS0+UmVsZWFzZSgpOworICAgIH0KK30KK0ZYX0JPT0wJQ1BERl9Db250ZW50TWFya0l0ZW06Okhhc01DSUQoKSBjb25zdAoreworICAgIGlmIChtX3BQYXJhbSAmJiAobV9QYXJhbVR5cGUgPT0gRGlyZWN0RGljdCB8fCBtX1BhcmFtVHlwZSA9PSBQcm9wZXJ0aWVzRGljdCkpIHsKKyAgICAgICAgcmV0dXJuICgoQ1BERl9EaWN0aW9uYXJ5ICopbV9wUGFyYW0pLT5LZXlFeGlzdChGWF9CU1RSQygiTUNJRCIpKTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorQ1BERl9Db250ZW50TWFya0RhdGE6OkNQREZfQ29udGVudE1hcmtEYXRhKGNvbnN0IENQREZfQ29udGVudE1hcmtEYXRhJiBzcmMpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcmMubV9NYXJrcy5HZXRTaXplKCk7IGkgKyspIHsKKyAgICAgICAgbV9NYXJrcy5BZGQoc3JjLm1fTWFya3NbaV0pOworICAgIH0KK30KK2ludCBDUERGX0NvbnRlbnRNYXJrRGF0YTo6R2V0TUNJRCgpIGNvbnN0Cit7CisgICAgQ1BERl9Db250ZW50TWFya0l0ZW06OlBhcmFtVHlwZSB0eXBlID0gQ1BERl9Db250ZW50TWFya0l0ZW06Ok5vbmU7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX01hcmtzLkdldFNpemUoKTsgaSArKykgeworICAgICAgICB0eXBlID0gbV9NYXJrc1tpXS5HZXRQYXJhbVR5cGUoKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQ1BERl9Db250ZW50TWFya0l0ZW06OlByb3BlcnRpZXNEaWN0IHx8IHR5cGUgPT0gQ1BERl9Db250ZW50TWFya0l0ZW06OkRpcmVjdERpY3QpIHsKKyAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSAqcERpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5ICopbV9NYXJrc1tpXS5HZXRQYXJhbSgpOworICAgICAgICAgICAgaWYgKHBEaWN0LT5LZXlFeGlzdChGWF9CU1RSQygiTUNJRCIpKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBwRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiTUNJRCIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gLTE7Cit9Cit2b2lkIENQREZfQ29udGVudE1hcmtEYXRhOjpBZGRNYXJrKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lLCBDUERGX0RpY3Rpb25hcnkqIHBEaWN0LCBGWF9CT09MIGJEaXJlY3QpCit7CisgICAgQ1BERl9Db250ZW50TWFya0l0ZW0mIGl0ZW0gPSBtX01hcmtzLkFkZCgpOworICAgIGl0ZW0uU2V0TmFtZShuYW1lKTsKKyAgICBpZiAocERpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGl0ZW0uU2V0UGFyYW0oYkRpcmVjdCA/IENQREZfQ29udGVudE1hcmtJdGVtOjpEaXJlY3REaWN0IDogQ1BERl9Db250ZW50TWFya0l0ZW06OlByb3BlcnRpZXNEaWN0LAorICAgICAgICAgICAgICAgICAgYkRpcmVjdCA/IHBEaWN0LT5DbG9uZSgpIDogcERpY3QpOworfQordm9pZCBDUERGX0NvbnRlbnRNYXJrRGF0YTo6RGVsZXRlTGFzdE1hcmsoKQoreworICAgIGludCBzaXplID0gbV9NYXJrcy5HZXRTaXplKCk7CisgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fTWFya3MuUmVtb3ZlQXQoc2l6ZSAtIDEpOworfQorRlhfQk9PTCBDUERGX0NvbnRlbnRNYXJrOjpIYXNNYXJrKEZYX0JTVFIgbWFyaykgY29uc3QKK3sKKyAgICBpZiAobV9wT2JqZWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fcE9iamVjdC0+Q291bnRJdGVtcygpOyBpICsrKSB7CisgICAgICAgIENQREZfQ29udGVudE1hcmtJdGVtJiBpdGVtID0gbV9wT2JqZWN0LT5HZXRJdGVtKGkpOworICAgICAgICBpZiAoaXRlbS5HZXROYW1lKCkgPT0gbWFyaykgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorRlhfQk9PTCBDUERGX0NvbnRlbnRNYXJrOjpMb29rdXBNYXJrKEZYX0JTVFIgbWFyaywgQ1BERl9EaWN0aW9uYXJ5KiYgcERpY3QpIGNvbnN0Cit7CisgICAgaWYgKG1fcE9iamVjdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3BPYmplY3QtPkNvdW50SXRlbXMoKTsgaSArKykgeworICAgICAgICBDUERGX0NvbnRlbnRNYXJrSXRlbSYgaXRlbSA9IG1fcE9iamVjdC0+R2V0SXRlbShpKTsKKyAgICAgICAgaWYgKGl0ZW0uR2V0TmFtZSgpID09IG1hcmspIHsKKyAgICAgICAgICAgIHBEaWN0ID0gTlVMTDsKKyAgICAgICAgICAgIGlmIChpdGVtLkdldFBhcmFtVHlwZSgpID09IENQREZfQ29udGVudE1hcmtJdGVtOjpQcm9wZXJ0aWVzRGljdCB8fAorICAgICAgICAgICAgICAgICAgICBpdGVtLkdldFBhcmFtVHlwZSgpID09IENQREZfQ29udGVudE1hcmtJdGVtOjpEaXJlY3REaWN0KSB7CisgICAgICAgICAgICAgICAgcERpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KilpdGVtLkdldFBhcmFtKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFnZS9mcGRmX3BhZ2VfaW1hZ2UuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhZ2UvZnBkZl9wYWdlX2ltYWdlLmNwcAppbmRleCBlYzM1MTA1Li5iMWZiZTAxIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFnZS9mcGRmX3BhZ2VfaW1hZ2UuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYWdlL2ZwZGZfcGFnZV9pbWFnZS5jcHAKQEAgLTEsMTE2ICsxLDExNiBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2UuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZW9iai5oIg0KLSNpbmNsdWRlICJwYWdlaW50LmgiDQotQ1BERl9JbWFnZU9iamVjdDo6Q1BERl9JbWFnZU9iamVjdCgpDQotew0KLSAgICBtX3BJbWFnZSA9IE5VTEw7DQotICAgIG1fVHlwZSA9IFBERlBBR0VfSU1BR0U7DQotfQ0KLUNQREZfSW1hZ2VPYmplY3Q6On5DUERGX0ltYWdlT2JqZWN0KCkNCi17DQotICAgIGlmICghbV9wSW1hZ2UpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAobV9wSW1hZ2UtPklzSW5saW5lKCkgfHwgKG1fcEltYWdlLT5HZXRTdHJlYW0oKSAmJiBtX3BJbWFnZS0+R2V0U3RyZWFtKCktPkdldE9iak51bSgpID09IDApKSB7DQotICAgICAgICBkZWxldGUgbV9wSW1hZ2U7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX3BJbWFnZS0+R2V0RG9jdW1lbnQoKS0+R2V0UGFnZURhdGEoKS0+UmVsZWFzZUltYWdlKG1fcEltYWdlLT5HZXRTdHJlYW0oKSk7DQotICAgIH0NCi19DQotdm9pZCBDUERGX0ltYWdlT2JqZWN0OjpDb3B5RGF0YShjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBTcmMpDQotew0KLSAgICBjb25zdCBDUERGX0ltYWdlT2JqZWN0KiBwU3JjT2JqID0gKGNvbnN0IENQREZfSW1hZ2VPYmplY3QqKXBTcmM7DQotICAgIGlmIChtX3BJbWFnZSkgew0KLSAgICAgICAgbV9wSW1hZ2UtPlJlbGVhc2UoKTsNCi0gICAgfQ0KLSAgICBtX3BJbWFnZSA9IHBTcmNPYmotPm1fcEltYWdlLT5DbG9uZSgpOw0KLSAgICBtX01hdHJpeCA9IHBTcmNPYmotPm1fTWF0cml4Ow0KLX0NCi12b2lkIENQREZfSW1hZ2VPYmplY3Q6OlRyYW5zZm9ybShjb25zdCBDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpDQotew0KLSAgICBtX01hdHJpeC5Db25jYXQobWF0cml4KTsNCi0gICAgQ2FsY0JvdW5kaW5nQm94KCk7DQotfQ0KLXZvaWQgQ1BERl9JbWFnZU9iamVjdDo6Q2FsY0JvdW5kaW5nQm94KCkNCi17DQotICAgIG1fTGVmdCA9IG1fQm90dG9tID0gMDsNCi0gICAgbV9SaWdodCA9IG1fVG9wID0gMS4wZjsNCi0gICAgbV9NYXRyaXguVHJhbnNmb3JtUmVjdChtX0xlZnQsIG1fUmlnaHQsIG1fVG9wLCBtX0JvdHRvbSk7DQotfQ0KLXZvaWQgQ1BERl9JbWFnZTo6UmVsZWFzZSgpDQotew0KLSAgICBpZiAobV9iSW5saW5lIHx8IChtX3BTdHJlYW0gJiYgbV9wU3RyZWFtLT5HZXRPYmpOdW0oKSA9PSAwKSkgew0KLSAgICAgICAgZGVsZXRlIHRoaXM7DQotICAgIH0NCi19DQotQ1BERl9JbWFnZSogQ1BERl9JbWFnZTo6Q2xvbmUoKQ0KLXsNCi0gICAgaWYgKG1fcFN0cmVhbS0+R2V0T2JqTnVtKCkpIHsNCi0gICAgICAgIHJldHVybiBtX3BEb2N1bWVudC0+R2V0UGFnZURhdGEoKS0+R2V0SW1hZ2UobV9wU3RyZWFtKTsNCi0gICAgfQ0KLSAgICBDUERGX0ltYWdlKiBwSW1hZ2UgPSBGWF9ORVcgQ1BERl9JbWFnZShtX3BEb2N1bWVudCk7DQotICAgIHBJbWFnZS0+TG9hZEltYWdlRigoQ1BERl9TdHJlYW0qKSgoQ1BERl9PYmplY3QqKW1fcFN0cmVhbSktPkNsb25lKCksIG1fYklubGluZSk7DQotICAgIGlmIChtX2JJbmxpbmUpIHsNCi0gICAgICAgIENQREZfRGljdGlvbmFyeSAqcElubGluZURpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KiltX3BJbmxpbmVEaWN0LT5DbG9uZShUUlVFKTsNCi0gICAgICAgIHBJbWFnZS0+U2V0SW5saW5lRGljdChwSW5saW5lRGljdCk7DQotICAgIH0NCi0gICAgcmV0dXJuIHBJbWFnZTsNCi19DQotQ1BERl9JbWFnZTo6Q1BERl9JbWFnZShDUERGX0RvY3VtZW50KiBwRG9jKQ0KLXsNCi0gICAgbV9wRG9jdW1lbnQgPSBwRG9jOw0KLSAgICBtX3BTdHJlYW0gPSBOVUxMOw0KLSAgICBtX3BPQyA9IE5VTEw7DQotICAgIG1fYklubGluZSA9IEZBTFNFOw0KLSAgICBtX3BJbmxpbmVEaWN0ID0gTlVMTDsNCi0gICAgbV9wRElCU291cmNlID0gTlVMTDsNCi0gICAgbV9wTWFzayA9IE5VTEw7DQotICAgIG1fTWF0dGVDb2xvciA9IDA7DQotfQ0KLUNQREZfSW1hZ2U6On5DUERGX0ltYWdlKCkNCi17DQotICAgIGlmIChtX2JJbmxpbmUpIHsNCi0gICAgICAgIGlmIChtX3BTdHJlYW0pIHsNCi0jaWZuZGVmIEZPWElUX0NIUk9NRV9CVUlMRA0KLSAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSBtX3BTdHJlYW0tPkdldERpY3QoKTsNCi0gICAgICAgICAgICBpZiAocERpY3QpIHsNCi0gICAgICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBDU09iaiA9IHBEaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkNvbG9yU3BhY2UiKSk7DQotICAgICAgICAgICAgICAgIGlmIChwQ1NPYmogJiYgbV9wRG9jdW1lbnQpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fcERvY3VtZW50LT5SZW1vdmVDb2xvclNwYWNlRnJvbVBhZ2VEYXRhKHBDU09iaik7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotI2VuZGlmDQotICAgICAgICAgICAgbV9wU3RyZWFtLT5SZWxlYXNlKCk7DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9wSW5saW5lRGljdCkgew0KLSAgICAgICAgICAgIG1fcElubGluZURpY3QtPlJlbGVhc2UoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1GWF9CT09MIENQREZfSW1hZ2U6OkxvYWRJbWFnZUYoQ1BERl9TdHJlYW0qIHBTdHJlYW0sIEZYX0JPT0wgYklubGluZSkNCi17DQotICAgIG1fcFN0cmVhbSA9IHBTdHJlYW07DQotICAgIGlmIChtX2JJbmxpbmUgJiYgbV9wSW5saW5lRGljdCkgew0KLSAgICAgICAgbV9wSW5saW5lRGljdC0+UmVsZWFzZSgpOw0KLSAgICAgICAgbV9wSW5saW5lRGljdCA9IE5VTEw7DQotICAgIH0NCi0gICAgbV9iSW5saW5lID0gYklubGluZTsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IHBTdHJlYW0tPkdldERpY3QoKTsNCi0gICAgaWYgKG1fYklubGluZSkgew0KLSAgICAgICAgbV9wSW5saW5lRGljdCA9IChDUERGX0RpY3Rpb25hcnkqKXBEaWN0LT5DbG9uZSgpOw0KLSAgICB9DQotICAgIG1fcE9DID0gcERpY3QtPkdldERpY3QoRlhfQlNUUkMoIk9DIikpOw0KLSAgICBtX2JJc01hc2sgPSAhcERpY3QtPktleUV4aXN0KEZYX0JTVFJDKCJDb2xvclNwYWNlIikpIHx8IHBEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJJbWFnZU1hc2siKSk7DQotI2lmbmRlZiBfRlBERkFQSV9NSU5JXw0KLSAgICBtX2JJbnRlcnBvbGF0ZSA9IHBEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJJbnRlcnBvbGF0ZSIpKTsNCi0jZW5kaWYNCi0gICAgbV9IZWlnaHQgPSBwRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiSGVpZ2h0IikpOw0KLSAgICBtX1dpZHRoID0gcERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIldpZHRoIikpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2UuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlb2JqLmgiCisjaW5jbHVkZSAicGFnZWludC5oIgorQ1BERl9JbWFnZU9iamVjdDo6Q1BERl9JbWFnZU9iamVjdCgpCit7CisgICAgbV9wSW1hZ2UgPSBOVUxMOworICAgIG1fVHlwZSA9IFBERlBBR0VfSU1BR0U7Cit9CitDUERGX0ltYWdlT2JqZWN0Ojp+Q1BERl9JbWFnZU9iamVjdCgpCit7CisgICAgaWYgKCFtX3BJbWFnZSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX3BJbWFnZS0+SXNJbmxpbmUoKSB8fCAobV9wSW1hZ2UtPkdldFN0cmVhbSgpICYmIG1fcEltYWdlLT5HZXRTdHJlYW0oKS0+R2V0T2JqTnVtKCkgPT0gMCkpIHsKKyAgICAgICAgZGVsZXRlIG1fcEltYWdlOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcEltYWdlLT5HZXREb2N1bWVudCgpLT5HZXRQYWdlRGF0YSgpLT5SZWxlYXNlSW1hZ2UobV9wSW1hZ2UtPkdldFN0cmVhbSgpKTsKKyAgICB9Cit9Cit2b2lkIENQREZfSW1hZ2VPYmplY3Q6OkNvcHlEYXRhKGNvbnN0IENQREZfUGFnZU9iamVjdCogcFNyYykKK3sKKyAgICBjb25zdCBDUERGX0ltYWdlT2JqZWN0KiBwU3JjT2JqID0gKGNvbnN0IENQREZfSW1hZ2VPYmplY3QqKXBTcmM7CisgICAgaWYgKG1fcEltYWdlKSB7CisgICAgICAgIG1fcEltYWdlLT5SZWxlYXNlKCk7CisgICAgfQorICAgIG1fcEltYWdlID0gcFNyY09iai0+bV9wSW1hZ2UtPkNsb25lKCk7CisgICAgbV9NYXRyaXggPSBwU3JjT2JqLT5tX01hdHJpeDsKK30KK3ZvaWQgQ1BERl9JbWFnZU9iamVjdDo6VHJhbnNmb3JtKGNvbnN0IENGWF9BZmZpbmVNYXRyaXgmIG1hdHJpeCkKK3sKKyAgICBtX01hdHJpeC5Db25jYXQobWF0cml4KTsKKyAgICBDYWxjQm91bmRpbmdCb3goKTsKK30KK3ZvaWQgQ1BERl9JbWFnZU9iamVjdDo6Q2FsY0JvdW5kaW5nQm94KCkKK3sKKyAgICBtX0xlZnQgPSBtX0JvdHRvbSA9IDA7CisgICAgbV9SaWdodCA9IG1fVG9wID0gMS4wZjsKKyAgICBtX01hdHJpeC5UcmFuc2Zvcm1SZWN0KG1fTGVmdCwgbV9SaWdodCwgbV9Ub3AsIG1fQm90dG9tKTsKK30KK3ZvaWQgQ1BERl9JbWFnZTo6UmVsZWFzZSgpCit7CisgICAgaWYgKG1fYklubGluZSB8fCAobV9wU3RyZWFtICYmIG1fcFN0cmVhbS0+R2V0T2JqTnVtKCkgPT0gMCkpIHsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorfQorQ1BERl9JbWFnZSogQ1BERl9JbWFnZTo6Q2xvbmUoKQoreworICAgIGlmIChtX3BTdHJlYW0tPkdldE9iak51bSgpKSB7CisgICAgICAgIHJldHVybiBtX3BEb2N1bWVudC0+R2V0UGFnZURhdGEoKS0+R2V0SW1hZ2UobV9wU3RyZWFtKTsKKyAgICB9CisgICAgQ1BERl9JbWFnZSogcEltYWdlID0gRlhfTkVXIENQREZfSW1hZ2UobV9wRG9jdW1lbnQpOworICAgIHBJbWFnZS0+TG9hZEltYWdlRigoQ1BERl9TdHJlYW0qKSgoQ1BERl9PYmplY3QqKW1fcFN0cmVhbSktPkNsb25lKCksIG1fYklubGluZSk7CisgICAgaWYgKG1fYklubGluZSkgeworICAgICAgICBDUERGX0RpY3Rpb25hcnkgKnBJbmxpbmVEaWN0ID0gKENQREZfRGljdGlvbmFyeSopbV9wSW5saW5lRGljdC0+Q2xvbmUoVFJVRSk7CisgICAgICAgIHBJbWFnZS0+U2V0SW5saW5lRGljdChwSW5saW5lRGljdCk7CisgICAgfQorICAgIHJldHVybiBwSW1hZ2U7Cit9CitDUERGX0ltYWdlOjpDUERGX0ltYWdlKENQREZfRG9jdW1lbnQqIHBEb2MpCit7CisgICAgbV9wRG9jdW1lbnQgPSBwRG9jOworICAgIG1fcFN0cmVhbSA9IE5VTEw7CisgICAgbV9wT0MgPSBOVUxMOworICAgIG1fYklubGluZSA9IEZBTFNFOworICAgIG1fcElubGluZURpY3QgPSBOVUxMOworICAgIG1fcERJQlNvdXJjZSA9IE5VTEw7CisgICAgbV9wTWFzayA9IE5VTEw7CisgICAgbV9NYXR0ZUNvbG9yID0gMDsKK30KK0NQREZfSW1hZ2U6On5DUERGX0ltYWdlKCkKK3sKKyAgICBpZiAobV9iSW5saW5lKSB7CisgICAgICAgIGlmIChtX3BTdHJlYW0pIHsKKyNpZm5kZWYgRk9YSVRfQ0hST01FX0JVSUxECisgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gbV9wU3RyZWFtLT5HZXREaWN0KCk7CisgICAgICAgICAgICBpZiAocERpY3QpIHsKKyAgICAgICAgICAgICAgICBDUERGX09iamVjdCogcENTT2JqID0gcERpY3QtPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiQ29sb3JTcGFjZSIpKTsKKyAgICAgICAgICAgICAgICBpZiAocENTT2JqICYmIG1fcERvY3VtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIG1fcERvY3VtZW50LT5SZW1vdmVDb2xvclNwYWNlRnJvbVBhZ2VEYXRhKHBDU09iaik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICBtX3BTdHJlYW0tPlJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9wSW5saW5lRGljdCkgeworICAgICAgICAgICAgbV9wSW5saW5lRGljdC0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgfQorfQorRlhfQk9PTCBDUERGX0ltYWdlOjpMb2FkSW1hZ2VGKENQREZfU3RyZWFtKiBwU3RyZWFtLCBGWF9CT09MIGJJbmxpbmUpCit7CisgICAgbV9wU3RyZWFtID0gcFN0cmVhbTsKKyAgICBpZiAobV9iSW5saW5lICYmIG1fcElubGluZURpY3QpIHsKKyAgICAgICAgbV9wSW5saW5lRGljdC0+UmVsZWFzZSgpOworICAgICAgICBtX3BJbmxpbmVEaWN0ID0gTlVMTDsKKyAgICB9CisgICAgbV9iSW5saW5lID0gYklubGluZTsKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gcFN0cmVhbS0+R2V0RGljdCgpOworICAgIGlmIChtX2JJbmxpbmUpIHsKKyAgICAgICAgbV9wSW5saW5lRGljdCA9IChDUERGX0RpY3Rpb25hcnkqKXBEaWN0LT5DbG9uZSgpOworICAgIH0KKyAgICBtX3BPQyA9IHBEaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJPQyIpKTsKKyAgICBtX2JJc01hc2sgPSAhcERpY3QtPktleUV4aXN0KEZYX0JTVFJDKCJDb2xvclNwYWNlIikpIHx8IHBEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJJbWFnZU1hc2siKSk7CisjaWZuZGVmIF9GUERGQVBJX01JTklfCisgICAgbV9iSW50ZXJwb2xhdGUgPSBwRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiSW50ZXJwb2xhdGUiKSk7CisjZW5kaWYKKyAgICBtX0hlaWdodCA9IHBEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJIZWlnaHQiKSk7CisgICAgbV9XaWR0aCA9IHBEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJXaWR0aCIpKTsKKyAgICByZXR1cm4gVFJVRTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYWdlL2ZwZGZfcGFnZV9wYXJzZXIuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhZ2UvZnBkZl9wYWdlX3BhcnNlci5jcHAKaW5kZXggNDBmNmQwNC4uZmY2NzA5NiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhZ2UvZnBkZl9wYWdlX3BhcnNlci5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhZ2UvZnBkZl9wYWdlX3BhcnNlci5jcHAKQEAgLTEsMTY4MSArMSwxNjgxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfc2VyaWFsLmgiDQotI2luY2x1ZGUgInBhZ2VpbnQuaCINCi0jZGVmaW5lIFJFUVVJUkVfUEFSQU1TKGNvdW50KSBpZiAobV9QYXJhbUNvdW50ICE9IGNvdW50KSB7IG1fYkFib3J0ID0gVFJVRTsgcmV0dXJuOyB9DQotQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXIoKQ0KLXsNCi0gICAgbV9EZWZGb250U2l6ZSA9IDA7DQotICAgIG1fcEN1clN0YXRlcyA9IE5VTEw7DQotICAgIG1fcExhc3RUZXh0T2JqZWN0ID0gTlVMTDsNCi0gICAgbV9wUGF0aFBvaW50cyA9IE5VTEw7DQotICAgIG1fUGF0aENsaXBUeXBlID0gMDsNCi0gICAgbV9QYXRoUG9pbnRDb3VudCA9IG1fUGF0aEFsbG9jU2l6ZSA9IDA7DQotICAgIG1fUGF0aEN1cnJlbnRYID0gbV9QYXRoQ3VycmVudFkgPSAwLjBmOw0KLSAgICBtX2JSZXNvdXJjZU1pc3NpbmcgPSBGQUxTRTsNCi0gICAgbV9iQ29sb3JlZCA9IEZBTFNFOw0KLSAgICBGWFNZU19tZW1zZXQzMihtX1R5cGUzRGF0YSwgMCwgc2l6ZW9mKEZYX0ZMT0FUKSAqIDYpOw0KLSAgICBtX1BhcmFtQ291bnQgPSAwOw0KLSAgICBtX1BhcmFtU3RhcnRQb3MgPSAwOw0KLSAgICBtX2JBYm9ydCA9IEZBTFNFOw0KLSAgICBtX3BMYXN0SW1hZ2VEaWN0ID0gTlVMTDsNCi0gICAgbV9wTGFzdENsb25lSW1hZ2VEaWN0ID0gTlVMTDsNCi0gICAgbV9wTGFzdEltYWdlID0gTlVMTDsNCi0gICAgbV9iUmVsZWFzZUxhc3REaWN0ID0gVFJVRTsNCi0gICAgbV9wUGFyZW50UmVzb3VyY2VzID0gTlVMTDsNCi0jaWZkZWYgX0ZQREZBUElfTUlOSV8NCi0gICAgbV9wT2JqZWN0U3RhdGUgPSBOVUxMOw0KLSAgICBtX3BPYmplY3RTdGFjayA9IE5VTEw7DQotICAgIG1fcFdvcmRCdWYgPSBOVUxMOw0KLSAgICBtX3BEaWN0TmFtZSA9IE5VTEw7DQotICAgIG1fcFN0cmVhbUJ1ZiA9IE5VTEw7DQotICAgIG1fV29yZFN0YXRlID0gMDsNCi0gICAgbV9PYmplY3RTaXplID0gMDsNCi0jZW5kaWYNCi19DQotRlhfQk9PTCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkluaXRpYWxpemUoKQ0KLXsNCi0jaWZkZWYgX0ZQREZBUElfTUlOSV8NCi0gICAgbV9wT2JqZWN0U3RhdGUgPSBGWF9BbGxvYyhGWF9CT09MLCBfRlBERl9NQVhfT0JKRUNUX1NUQUNLX1NJWkVfKTsNCi0gICAgRlhTWVNfbWVtc2V0MzIobV9wT2JqZWN0U3RhdGUsIDAsIF9GUERGX01BWF9PQkpFQ1RfU1RBQ0tfU0laRV8gKiBzaXplb2YoRlhfQk9PTCkpOw0KLSAgICBtX3BPYmplY3RTdGFjayA9IEZYX0FsbG9jKENQREZfT2JqZWN0KiwgX0ZQREZfTUFYX09CSkVDVF9TVEFDS19TSVpFXyk7DQotICAgIEZYU1lTX21lbXNldDMyKG1fcE9iamVjdFN0YWNrLCAwLCBfRlBERl9NQVhfT0JKRUNUX1NUQUNLX1NJWkVfICogc2l6ZW9mKENQREZfT2JqZWN0KikpOw0KLSAgICBtX3BXb3JkQnVmID0gRlhfQWxsb2MoRlhfQllURSwgMjU2KTsNCi0gICAgRlhTWVNfbWVtc2V0MzIobV9wV29yZEJ1ZiwgMCwgMjU2ICogc2l6ZW9mKEZYX0JZVEUpKTsNCi0gICAgbV9wRGljdE5hbWUgPSBGWF9BbGxvYyhGWF9CWVRFLCAyNTYpOw0KLSAgICBGWFNZU19tZW1zZXQzMihtX3BEaWN0TmFtZSwgMCwgMjU2ICogc2l6ZW9mKEZYX0JZVEUpKTsNCi0gICAgbV9wU3RyZWFtQnVmID0gRlhfQWxsb2MoRlhfQllURSwgU1RSRUFNX1BBUlNFX0JVRlNJWkUpOw0KLSAgICBGWFNZU19tZW1zZXQzMihtX3BTdHJlYW1CdWYsIDAsIFNUUkVBTV9QQVJTRV9CVUZTSVpFICogc2l6ZW9mKEZYX0JZVEUpKTsNCi0gICAgbV9TdHJpbmdCdWYuRXN0aW1hdGVTaXplKDEwMjQpOw0KLSAgICBtX09iamVjdFNpemUgPSAwOw0KLSAgICBtX0ltYWdlU3JjQnVmLkVzdGltYXRlU2l6ZShTVFJFQU1fUEFSU0VfQlVGU0laRSk7DQotI2VuZGlmDQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1DUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6On5DUERGX1N0cmVhbUNvbnRlbnRQYXJzZXIoKQ0KLXsNCi0gICAgQ2xlYXJBbGxQYXJhbXMoKTsNCi0gICAgaW50IGkgPSAwOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbV9TdGF0ZVN0YWNrLkdldFNpemUoKTsgaSArKykgew0KLSAgICAgICAgZGVsZXRlIChDUERGX0FsbFN0YXRlcyopbV9TdGF0ZVN0YWNrW2ldOw0KLSAgICB9DQotICAgIGlmIChtX3BQYXRoUG9pbnRzKSB7DQotICAgICAgICBGWF9GcmVlKG1fcFBhdGhQb2ludHMpOw0KLSAgICB9DQotICAgIGlmIChtX3BDdXJTdGF0ZXMpIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BDdXJTdGF0ZXM7DQotICAgIH0NCi0gICAgaWYgKG1fcExhc3RJbWFnZURpY3QpIHsNCi0gICAgICAgIG1fcExhc3RJbWFnZURpY3QtPlJlbGVhc2UoKTsNCi0gICAgfQ0KLSAgICBpZiAobV9wTGFzdENsb25lSW1hZ2VEaWN0KSB7DQotICAgICAgICBtX3BMYXN0Q2xvbmVJbWFnZURpY3QtPlJlbGVhc2UoKTsNCi0gICAgfQ0KLSNpZmRlZiBfRlBERkFQSV9NSU5JXw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgKGludCltX09iamVjdFNpemU7ICsraSkgew0KLSAgICAgICAgaWYgKCFtX3BPYmplY3RTdGF0ZVtpXSkgew0KLSAgICAgICAgICAgIG1fcE9iamVjdFN0YWNrW2ldLT5SZWxlYXNlKCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhfRnJlZShtX3BPYmplY3RTdGFjayk7DQotICAgIEZYX0ZyZWUobV9wT2JqZWN0U3RhdGUpOw0KLSAgICBGWF9GcmVlKG1fcFN0cmVhbUJ1Zik7DQotICAgIEZYX0ZyZWUobV9wV29yZEJ1Zik7DQotICAgIEZYX0ZyZWUobV9wRGljdE5hbWUpOw0KLSNlbmRpZg0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6UHJlcGFyZVBhcnNlKENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwNCi0gICAgICAgIENQREZfRGljdGlvbmFyeSogcFBhZ2VSZXNvdXJjZXMsIENQREZfRGljdGlvbmFyeSogcFBhcmVudFJlc291cmNlcywgQ0ZYX0FmZmluZU1hdHJpeCogcG10Q29udGVudFRvVXNlciwgQ1BERl9QYWdlT2JqZWN0cyogcE9iakxpc3QsDQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBSZXNvdXJjZXMsIENQREZfUmVjdCogcEJCb3gsIENQREZfUGFyc2VPcHRpb25zKiBwT3B0aW9ucywNCi0gICAgICAgIENQREZfQWxsU3RhdGVzKiBwU3RhdGVzLCBpbnQgbGV2ZWwpDQotew0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkgKyspIHsNCi0gICAgICAgIG1fVHlwZTNEYXRhW2ldID0gMDsNCi0gICAgfQ0KLSAgICBtX3BEb2N1bWVudCA9IHBEb2N1bWVudDsNCi0gICAgbV9wUGFnZVJlc291cmNlcyA9IHBQYWdlUmVzb3VyY2VzOw0KLSAgICBtX3BQYXJlbnRSZXNvdXJjZXMgPSBwUGFyZW50UmVzb3VyY2VzOw0KLSAgICBpZiAocG10Q29udGVudFRvVXNlcikgew0KLSAgICAgICAgbV9tdENvbnRlbnRUb1VzZXIgPSAqcG10Q29udGVudFRvVXNlcjsNCi0gICAgfQ0KLSAgICBpZiAocE9wdGlvbnMpIHsNCi0gICAgICAgIG1fT3B0aW9ucyA9ICpwT3B0aW9uczsNCi0gICAgfQ0KLSAgICBtX3BPYmplY3RMaXN0ID0gcE9iakxpc3Q7DQotICAgIG1fcFJlc291cmNlcyA9IHBSZXNvdXJjZXM7DQotICAgIGlmIChwUmVzb3VyY2VzID09IE5VTEwpIHsNCi0gICAgICAgIG1fcFJlc291cmNlcyA9IG1fcFBhcmVudFJlc291cmNlczsNCi0gICAgfQ0KLSAgICBpZiAobV9wUmVzb3VyY2VzID09IE5VTEwpIHsNCi0gICAgICAgIG1fcFJlc291cmNlcyA9IHBQYWdlUmVzb3VyY2VzOw0KLSAgICB9DQotICAgIGlmIChwQkJveCkgew0KLSAgICAgICAgbV9CQm94ID0gKnBCQm94Ow0KLSAgICB9DQotICAgIG1fTGV2ZWwgPSBsZXZlbDsNCi0gICAgbV9wQ3VyU3RhdGVzID0gRlhfTkVXIENQREZfQWxsU3RhdGVzOw0KLSAgICBpZiAocFN0YXRlcykgew0KLSAgICAgICAgbV9wQ3VyU3RhdGVzLT5Db3B5KCpwU3RhdGVzKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1fcEN1clN0YXRlcy0+bV9HZW5lcmFsU3RhdGUuTmV3KCk7DQotICAgICAgICBtX3BDdXJTdGF0ZXMtPm1fR3JhcGhTdGF0ZS5OZXcoKTsNCi0gICAgICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0U3RhdGUuTmV3KCk7DQotICAgICAgICBtX3BDdXJTdGF0ZXMtPm1fQ29sb3JTdGF0ZS5OZXcoKTsNCi0gICAgfQ0KLSNpZmRlZiBfRlBERkFQSV9NSU5JXw0KLSAgICBGWFNZU19tZW1zZXQzMihtX3BPYmplY3RTdGF0ZSwgMCwgX0ZQREZfTUFYX09CSkVDVF9TVEFDS19TSVpFXyAqIHNpemVvZihGWF9CT09MKSk7DQotI2VuZGlmDQotfQ0KLWludCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkdldE5leHRQYXJhbVBvcygpDQotew0KLSAgICBpZiAobV9QYXJhbUNvdW50ID09IFBBUkFNX0JVRl9TSVpFKSB7DQotICAgICAgICBtX1BhcmFtU3RhcnRQb3MgKys7DQotICAgICAgICBpZiAobV9QYXJhbVN0YXJ0UG9zID09IFBBUkFNX0JVRl9TSVpFKSB7DQotICAgICAgICAgICAgbV9QYXJhbVN0YXJ0UG9zID0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX1BhcmFtQnVmMVttX1BhcmFtU3RhcnRQb3NdLm1fVHlwZSA9PSAwKSB7DQotICAgICAgICAgICAgbV9QYXJhbUJ1ZjFbbV9QYXJhbVN0YXJ0UG9zXS5tX3BPYmplY3QtPlJlbGVhc2UoKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBtX1BhcmFtU3RhcnRQb3M7DQotICAgIH0NCi0gICAgaW50IGluZGV4ID0gbV9QYXJhbVN0YXJ0UG9zICsgbV9QYXJhbUNvdW50Ow0KLSAgICBpZiAoaW5kZXggPj0gUEFSQU1fQlVGX1NJWkUpIHsNCi0gICAgICAgIGluZGV4IC09IFBBUkFNX0JVRl9TSVpFOw0KLSAgICB9DQotICAgIG1fUGFyYW1Db3VudCArKzsNCi0gICAgcmV0dXJuIGluZGV4Ow0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6QWRkTmFtZVBhcmFtKEZYX0xQQ1NUUiBuYW1lLCBpbnQgbGVuKQ0KLXsNCi0gICAgaW50IGluZGV4ID0gR2V0TmV4dFBhcmFtUG9zKCk7DQotICAgIGlmIChsZW4gPiAzMikgew0KLSAgICAgICAgbV9QYXJhbUJ1ZjFbaW5kZXhdLm1fVHlwZSA9IDA7DQotICAgICAgICBtX1BhcmFtQnVmMVtpbmRleF0ubV9wT2JqZWN0ID0gQ1BERl9OYW1lOjpDcmVhdGUoUERGX05hbWVEZWNvZGUoQ0ZYX0J5dGVTdHJpbmdDKG5hbWUsIGxlbikpKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1fUGFyYW1CdWYxW2luZGV4XS5tX1R5cGUgPSBQREZPQkpfTkFNRTsNCi0gICAgICAgIGlmIChGWFNZU19tZW1jaHIobmFtZSwgJyMnLCBsZW4pID09IE5VTEwpIHsNCi0gICAgICAgICAgICBGWFNZU19tZW1jcHkzMihtX1BhcmFtQnVmMVtpbmRleF0ubV9OYW1lLm1fQnVmZmVyLCBuYW1lLCBsZW4pOw0KLSAgICAgICAgICAgIG1fUGFyYW1CdWYxW2luZGV4XS5tX05hbWUubV9MZW4gPSBsZW47DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIHN0ciA9IFBERl9OYW1lRGVjb2RlKENGWF9CeXRlU3RyaW5nQyhuYW1lLCBsZW4pKTsNCi0gICAgICAgICAgICBGWFNZU19tZW1jcHkzMihtX1BhcmFtQnVmMVtpbmRleF0ubV9OYW1lLm1fQnVmZmVyLCAoRlhfTFBDU1RSKXN0ciwgc3RyLkdldExlbmd0aCgpKTsNCi0gICAgICAgICAgICBtX1BhcmFtQnVmMVtpbmRleF0ubV9OYW1lLm1fTGVuID0gc3RyLkdldExlbmd0aCgpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpBZGROdW1iZXJQYXJhbShGWF9MUENTVFIgc3RyLCBpbnQgbGVuKQ0KLXsNCi0gICAgaW50IGluZGV4ID0gR2V0TmV4dFBhcmFtUG9zKCk7DQotICAgIG1fUGFyYW1CdWYxW2luZGV4XS5tX1R5cGUgPSBQREZPQkpfTlVNQkVSOw0KLSAgICBGWF9hdG9udW0oQ0ZYX0J5dGVTdHJpbmdDKHN0ciwgbGVuKSwgbV9QYXJhbUJ1ZjFbaW5kZXhdLm1fTnVtYmVyLm1fYkludGVnZXIsDQotICAgICAgICAgICAgICAmbV9QYXJhbUJ1ZjFbaW5kZXhdLm1fTnVtYmVyLm1fSW50ZWdlcik7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpBZGRPYmplY3RQYXJhbShDUERGX09iamVjdCogcE9iaikNCi17DQotICAgIGludCBpbmRleCA9IEdldE5leHRQYXJhbVBvcygpOw0KLSAgICBtX1BhcmFtQnVmMVtpbmRleF0ubV9UeXBlID0gMDsNCi0gICAgbV9QYXJhbUJ1ZjFbaW5kZXhdLm1fcE9iamVjdCA9IHBPYmo7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpDbGVhckFsbFBhcmFtcygpDQotew0KLSAgICBGWF9EV09SRCBpbmRleCA9IG1fUGFyYW1TdGFydFBvczsNCi0gICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IG1fUGFyYW1Db3VudDsgaSArKykgew0KLSAgICAgICAgaWYgKG1fUGFyYW1CdWYxW2luZGV4XS5tX1R5cGUgPT0gMCkgew0KLSAgICAgICAgICAgIG1fUGFyYW1CdWYxW2luZGV4XS5tX3BPYmplY3QtPlJlbGVhc2UoKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGluZGV4ICsrOw0KLSAgICAgICAgaWYgKGluZGV4ID09IFBBUkFNX0JVRl9TSVpFKSB7DQotICAgICAgICAgICAgaW5kZXggPSAwOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fUGFyYW1TdGFydFBvcyA9IDA7DQotICAgIG1fUGFyYW1Db3VudCA9IDA7DQotfQ0KLUNQREZfT2JqZWN0KiBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkdldE9iamVjdChGWF9EV09SRCBpbmRleCkNCi17DQotICAgIGlmIChpbmRleCA+PSBtX1BhcmFtQ291bnQpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGludCByZWFsX2luZGV4ID0gbV9QYXJhbVN0YXJ0UG9zICsgbV9QYXJhbUNvdW50IC0gaW5kZXggLSAxOw0KLSAgICBpZiAocmVhbF9pbmRleCA+PSBQQVJBTV9CVUZfU0laRSkgew0KLSAgICAgICAgcmVhbF9pbmRleCAtPSBQQVJBTV9CVUZfU0laRTsNCi0gICAgfQ0KLSAgICBfQ29udGVudFBhcmFtJiBwYXJhbSA9IG1fUGFyYW1CdWYxW3JlYWxfaW5kZXhdOw0KLSAgICBpZiAocGFyYW0ubV9UeXBlID09IFBERk9CSl9OVU1CRVIpIHsNCi0gICAgICAgIENQREZfTnVtYmVyKiBwTnVtYmVyID0gQ1BERl9OdW1iZXI6OkNyZWF0ZShwYXJhbS5tX051bWJlci5tX2JJbnRlZ2VyLCAmcGFyYW0ubV9OdW1iZXIubV9JbnRlZ2VyKTsNCi0gICAgICAgIHBhcmFtLm1fVHlwZSA9IDA7DQotICAgICAgICBwYXJhbS5tX3BPYmplY3QgPSBwTnVtYmVyOw0KLSAgICAgICAgcmV0dXJuIHBOdW1iZXI7DQotICAgIH0NCi0gICAgaWYgKHBhcmFtLm1fVHlwZSA9PSBQREZPQkpfTkFNRSkgew0KLSAgICAgICAgQ1BERl9OYW1lKiBwTmFtZSA9IENQREZfTmFtZTo6Q3JlYXRlKENGWF9CeXRlU3RyaW5nKHBhcmFtLm1fTmFtZS5tX0J1ZmZlciwgcGFyYW0ubV9OYW1lLm1fTGVuKSk7DQotICAgICAgICBwYXJhbS5tX1R5cGUgPSAwOw0KLSAgICAgICAgcGFyYW0ubV9wT2JqZWN0ID0gcE5hbWU7DQotICAgICAgICByZXR1cm4gcE5hbWU7DQotICAgIH0NCi0gICAgaWYgKHBhcmFtLm1fVHlwZSA9PSAwKSB7DQotICAgICAgICByZXR1cm4gcGFyYW0ubV9wT2JqZWN0Ow0KLSAgICB9DQotICAgIEFTU0VSVChGQUxTRSk7DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1DRlhfQnl0ZVN0cmluZyBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkdldFN0cmluZyhGWF9EV09SRCBpbmRleCkNCi17DQotICAgIGlmIChpbmRleCA+PSBtX1BhcmFtQ291bnQpIHsNCi0gICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZygpOw0KLSAgICB9DQotICAgIGludCByZWFsX2luZGV4ID0gbV9QYXJhbVN0YXJ0UG9zICsgbV9QYXJhbUNvdW50IC0gaW5kZXggLSAxOw0KLSAgICBpZiAocmVhbF9pbmRleCA+PSBQQVJBTV9CVUZfU0laRSkgew0KLSAgICAgICAgcmVhbF9pbmRleCAtPSBQQVJBTV9CVUZfU0laRTsNCi0gICAgfQ0KLSAgICBfQ29udGVudFBhcmFtJiBwYXJhbSA9IG1fUGFyYW1CdWYxW3JlYWxfaW5kZXhdOw0KLSAgICBpZiAocGFyYW0ubV9UeXBlID09IFBERk9CSl9OQU1FKSB7DQotICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcocGFyYW0ubV9OYW1lLm1fQnVmZmVyLCBwYXJhbS5tX05hbWUubV9MZW4pOw0KLSAgICB9DQotICAgIGlmIChwYXJhbS5tX1R5cGUgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIHBhcmFtLm1fcE9iamVjdC0+R2V0U3RyaW5nKCk7DQotICAgIH0NCi0gICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKCk7DQotfQ0KLUZYX0ZMT0FUIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6R2V0TnVtYmVyKEZYX0RXT1JEIGluZGV4KQ0KLXsNCi0gICAgaWYgKGluZGV4ID49IG1fUGFyYW1Db3VudCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgaW50IHJlYWxfaW5kZXggPSBtX1BhcmFtU3RhcnRQb3MgKyBtX1BhcmFtQ291bnQgLSBpbmRleCAtIDE7DQotICAgIGlmIChyZWFsX2luZGV4ID49IFBBUkFNX0JVRl9TSVpFKSB7DQotICAgICAgICByZWFsX2luZGV4IC09IFBBUkFNX0JVRl9TSVpFOw0KLSAgICB9DQotICAgIF9Db250ZW50UGFyYW0mIHBhcmFtID0gbV9QYXJhbUJ1ZjFbcmVhbF9pbmRleF07DQotICAgIGlmIChwYXJhbS5tX1R5cGUgPT0gUERGT0JKX05VTUJFUikgew0KLSAgICAgICAgcmV0dXJuIHBhcmFtLm1fTnVtYmVyLm1fYkludGVnZXIgPyAoRlhfRkxPQVQpcGFyYW0ubV9OdW1iZXIubV9JbnRlZ2VyIDogcGFyYW0ubV9OdW1iZXIubV9GbG9hdDsNCi0gICAgfQ0KLSAgICBpZiAocGFyYW0ubV9UeXBlID09IDApIHsNCi0gICAgICAgIHJldHVybiBwYXJhbS5tX3BPYmplY3QtPkdldE51bWJlcigpOw0KLSAgICB9DQotICAgIHJldHVybiAwOw0KLX0NCi1GWF9GTE9BVCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkdldE51bWJlcjE2KEZYX0RXT1JEIGluZGV4KQ0KLXsNCi0gICAgcmV0dXJuIEdldE51bWJlcihpbmRleCk7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpTZXRHcmFwaGljU3RhdGVzKENQREZfUGFnZU9iamVjdCogcE9iaiwgRlhfQk9PTCBiQ29sb3IsIEZYX0JPT0wgYlRleHQsIEZYX0JPT0wgYkdyYXBoKQ0KLXsNCi0gICAgcE9iai0+bV9HZW5lcmFsU3RhdGUgPSBtX3BDdXJTdGF0ZXMtPm1fR2VuZXJhbFN0YXRlOw0KLSAgICBwT2JqLT5tX0NsaXBQYXRoID0gbV9wQ3VyU3RhdGVzLT5tX0NsaXBQYXRoOw0KLSAgICBwT2JqLT5tX0NvbnRlbnRNYXJrID0gbV9DdXJDb250ZW50TWFyazsNCi0gICAgaWYgKGJDb2xvcikgew0KLSAgICAgICAgcE9iai0+bV9Db2xvclN0YXRlID0gbV9wQ3VyU3RhdGVzLT5tX0NvbG9yU3RhdGU7DQotICAgIH0NCi0gICAgaWYgKGJHcmFwaCkgew0KLSAgICAgICAgcE9iai0+bV9HcmFwaFN0YXRlID0gbV9wQ3VyU3RhdGVzLT5tX0dyYXBoU3RhdGU7DQotICAgIH0NCi0gICAgaWYgKGJUZXh0KSB7DQotICAgICAgICBwT2JqLT5tX1RleHRTdGF0ZSA9IG1fcEN1clN0YXRlcy0+bV9UZXh0U3RhdGU7DQotICAgIH0NCi19DQotY29uc3Qgc3RydWN0IF9PcENvZGUgew0KLSAgICBGWF9EV09SRAltX09wSWQ7DQotICAgIHZvaWQgKENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6Km1fT3BIYW5kbGVyKSgpOw0KLX0gZ19PcENvZGVzW10gPSB7DQotICAgIHtGWEJTVFJfSUQoJyInLCAwLCAwLCAwKSwJCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9OZXh0TGluZVNob3dUZXh0X1NwYWNlfSwNCi0gICAge0ZYQlNUUl9JRCgnXCcnLCAwLCAwLCAwKSwJCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9OZXh0TGluZVNob3dUZXh0fSwNCi0gICAge0ZYQlNUUl9JRCgnQicsIDAsIDAsIDApLAkJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0ZpbGxTdHJva2VQYXRofSwNCi0gICAge0ZYQlNUUl9JRCgnQicsICcqJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9FT0ZpbGxTdHJva2VQYXRofSwNCi0gICAge0ZYQlNUUl9JRCgnQicsICdEJywgJ0MnLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0JlZ2luTWFya2VkQ29udGVudF9EaWN0aW9uYXJ5fSwNCi0gICAge0ZYQlNUUl9JRCgnQicsICdJJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9CZWdpbkltYWdlfSwNCi0gICAge0ZYQlNUUl9JRCgnQicsICdNJywgJ0MnLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0JlZ2luTWFya2VkQ29udGVudH0sDQotICAgIHtGWEJTVFJfSUQoJ0InLCAnVCcsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfQmVnaW5UZXh0fSwNCi0gICAge0ZYQlNUUl9JRCgnQicsICdYJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9CZWdpblNlY3Rpb25VbmRlZmluZWR9LA0KLSAgICB7RlhCU1RSX0lEKCdDJywgJ1MnLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldENvbG9yU3BhY2VfU3Ryb2tlfSwNCi0gICAge0ZYQlNUUl9JRCgnRCcsICdQJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9NYXJrUGxhY2VfRGljdGlvbmFyeX0sDQotICAgIHtGWEJTVFJfSUQoJ0QnLCAnbycsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfRXhlY3V0ZVhPYmplY3R9LA0KLSAgICB7RlhCU1RSX0lEKCdFJywgJ0knLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0VuZEltYWdlfSwNCi0gICAge0ZYQlNUUl9JRCgnRScsICdNJywgJ0MnLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0VuZE1hcmtlZENvbnRlbnR9LA0KLSAgICB7RlhCU1RSX0lEKCdFJywgJ1QnLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0VuZFRleHR9LA0KLSAgICB7RlhCU1RSX0lEKCdFJywgJ1gnLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0VuZFNlY3Rpb25VbmRlZmluZWR9LA0KLSAgICB7RlhCU1RSX0lEKCdGJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfRmlsbFBhdGhPbGR9LA0KLSAgICB7RlhCU1RSX0lEKCdHJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0R3JheV9TdHJva2V9LA0KLSAgICB7RlhCU1RSX0lEKCdJJywgJ0QnLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0JlZ2luSW1hZ2VEYXRhfSwNCi0gICAge0ZYQlNUUl9JRCgnSicsIDAsIDAsIDApLAkJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldExpbmVDYXB9LA0KLSAgICB7RlhCU1RSX0lEKCdLJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0Q01ZS0NvbG9yX1N0cm9rZX0sDQotICAgIHtGWEJTVFJfSUQoJ00nLCAwLCAwLCAwKSwJCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRNaXRlckxpbWl0fSwNCi0gICAge0ZYQlNUUl9JRCgnTScsICdQJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9NYXJrUGxhY2V9LA0KLSAgICB7RlhCU1RSX0lEKCdRJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfUmVzdG9yZUdyYXBoU3RhdGV9LA0KLSAgICB7RlhCU1RSX0lEKCdSJywgJ0cnLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldFJHQkNvbG9yX1N0cm9rZX0sDQotICAgIHtGWEJTVFJfSUQoJ1MnLCAwLCAwLCAwKSwJCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TdHJva2VQYXRofSwNCi0gICAge0ZYQlNUUl9JRCgnUycsICdDJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRDb2xvcl9TdHJva2V9LA0KLSAgICB7RlhCU1RSX0lEKCdTJywgJ0MnLCAnTicsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0Q29sb3JQU19TdHJva2V9LA0KLSAgICB7RlhCU1RSX0lEKCdUJywgJyonLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX01vdmVUb05leHRMaW5lfSwNCi0gICAge0ZYQlNUUl9JRCgnVCcsICdEJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9Nb3ZlVGV4dFBvaW50X1NldExlYWRpbmd9LA0KLSAgICB7RlhCU1RSX0lEKCdUJywgJ0onLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1Nob3dUZXh0X1Bvc2l0aW9uaW5nfSwNCi0gICAge0ZYQlNUUl9JRCgnVCcsICdMJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRUZXh0TGVhZGluZ30sDQotICAgIHtGWEJTVFJfSUQoJ1QnLCAnYycsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0Q2hhclNwYWNlfSwNCi0gICAge0ZYQlNUUl9JRCgnVCcsICdkJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9Nb3ZlVGV4dFBvaW50fSwNCi0gICAge0ZYQlNUUl9JRCgnVCcsICdmJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRGb250fSwNCi0gICAge0ZYQlNUUl9JRCgnVCcsICdqJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TaG93VGV4dH0sDQotICAgIHtGWEJTVFJfSUQoJ1QnLCAnbScsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0VGV4dE1hdHJpeH0sDQotICAgIHtGWEJTVFJfSUQoJ1QnLCAncicsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0VGV4dFJlbmRlck1vZGV9LA0KLSAgICB7RlhCU1RSX0lEKCdUJywgJ3MnLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldFRleHRSaXNlfSwNCi0gICAge0ZYQlNUUl9JRCgnVCcsICd3JywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRXb3JkU3BhY2V9LA0KLSAgICB7RlhCU1RSX0lEKCdUJywgJ3onLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldEhvcnpTY2FsZX0sDQotICAgIHtGWEJTVFJfSUQoJ1cnLCAwLCAwLCAwKSwJCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9DbGlwfSwNCi0gICAge0ZYQlNUUl9JRCgnVycsICcqJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9FT0NsaXB9LA0KLSAgICB7RlhCU1RSX0lEKCdiJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfQ2xvc2VGaWxsU3Ryb2tlUGF0aH0sDQotICAgIHtGWEJTVFJfSUQoJ2InLCAnKicsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfQ2xvc2VFT0ZpbGxTdHJva2VQYXRofSwNCi0gICAge0ZYQlNUUl9JRCgnYycsIDAsIDAsIDApLAkJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0N1cnZlVG9fMTIzfSwNCi0gICAge0ZYQlNUUl9JRCgnYycsICdtJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9Db25jYXRNYXRyaXh9LA0KLSAgICB7RlhCU1RSX0lEKCdjJywgJ3MnLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldENvbG9yU3BhY2VfRmlsbH0sDQotICAgIHtGWEJTVFJfSUQoJ2QnLCAwLCAwLCAwKSwJCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXREYXNofSwNCi0gICAge0ZYQlNUUl9JRCgnZCcsICcwJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRDaGFyV2lkdGh9LA0KLSAgICB7RlhCU1RSX0lEKCdkJywgJzEnLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldENhY2hlZERldmljZX0sDQotICAgIHtGWEJTVFJfSUQoJ2YnLCAwLCAwLCAwKSwJCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9GaWxsUGF0aH0sDQotICAgIHtGWEJTVFJfSUQoJ2YnLCAnKicsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfRU9GaWxsUGF0aH0sDQotICAgIHtGWEJTVFJfSUQoJ2cnLCAwLCAwLCAwKSwJCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRHcmF5X0ZpbGx9LA0KLSAgICB7RlhCU1RSX0lEKCdnJywgJ3MnLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldEV4dGVuZEdyYXBoU3RhdGV9LA0KLSAgICB7RlhCU1RSX0lEKCdoJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfQ2xvc2VQYXRofSwNCi0gICAge0ZYQlNUUl9JRCgnaScsIDAsIDAsIDApLAkJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldEZsYXR9LA0KLSAgICB7RlhCU1RSX0lEKCdqJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0TGluZUpvaW59LA0KLSAgICB7RlhCU1RSX0lEKCdrJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0Q01ZS0NvbG9yX0ZpbGx9LA0KLSAgICB7RlhCU1RSX0lEKCdsJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfTGluZVRvfSwNCi0gICAge0ZYQlNUUl9JRCgnbScsIDAsIDAsIDApLAkJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX01vdmVUb30sDQotICAgIHtGWEJTVFJfSUQoJ24nLCAwLCAwLCAwKSwJCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9FbmRQYXRofSwNCi0gICAge0ZYQlNUUl9JRCgncScsIDAsIDAsIDApLAkJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NhdmVHcmFwaFN0YXRlfSwNCi0gICAge0ZYQlNUUl9JRCgncicsICdlJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9SZWN0YW5nbGV9LA0KLSAgICB7RlhCU1RSX0lEKCdyJywgJ2cnLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldFJHQkNvbG9yX0ZpbGx9LA0KLSAgICB7RlhCU1RSX0lEKCdyJywgJ2knLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldFJlbmRlckludGVudH0sDQotICAgIHtGWEJTVFJfSUQoJ3MnLCAwLCAwLCAwKSwJCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9DbG9zZVN0cm9rZVBhdGh9LA0KLSAgICB7RlhCU1RSX0lEKCdzJywgJ2MnLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldENvbG9yX0ZpbGx9LA0KLSAgICB7RlhCU1RSX0lEKCdzJywgJ2MnLCAnbicsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0Q29sb3JQU19GaWxsfSwNCi0gICAge0ZYQlNUUl9JRCgncycsICdoJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TaGFkZUZpbGx9LA0KLSAgICB7RlhCU1RSX0lEKCd2JywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfQ3VydmVUb18yM30sDQotICAgIHtGWEJTVFJfSUQoJ3cnLCAwLCAwLCAwKSwJCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRMaW5lV2lkdGh9LA0KLSAgICB7RlhCU1RSX0lEKCd5JywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfQ3VydmVUb18xM30sDQotfTsNCi1GWF9CT09MIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6T25PcGVyYXRvcihGWF9MUENTVFIgb3ApDQotew0KLSAgICBpbnQgaSA9IDA7DQotICAgIEZYX0RXT1JEIG9waWQgPSAwOw0KLSAgICB3aGlsZSAoaSA8IDQgJiYgb3BbaV0pIHsNCi0gICAgICAgIG9waWQgPSAob3BpZCA8PCA4KSArIG9wW2ldOw0KLSAgICAgICAgaSArKzsNCi0gICAgfQ0KLSAgICB3aGlsZSAoaSA8IDQpIHsNCi0gICAgICAgIG9waWQgPDw9IDg7DQotICAgICAgICBpICsrOw0KLSAgICB9Ow0KLSAgICBpbnQgbG93ID0gMCwgaGlnaCA9IHNpemVvZiBnX09wQ29kZXMgLyBzaXplb2Yoc3RydWN0IF9PcENvZGUpIC0gMTsNCi0gICAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7DQotICAgICAgICBpbnQgbWlkZGxlID0gKGxvdyArIGhpZ2gpIC8gMjsNCi0gICAgICAgIGludCBjb21wYXJlID0gb3BpZCAtIGdfT3BDb2Rlc1ttaWRkbGVdLm1fT3BJZDsNCi0gICAgICAgIGlmIChjb21wYXJlID09IDApIHsNCi0gICAgICAgICAgICAodGhpcy0+KmdfT3BDb2Rlc1ttaWRkbGVdLm1fT3BIYW5kbGVyKSgpOw0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfSBlbHNlIGlmIChjb21wYXJlIDwgMCkgew0KLSAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBsb3cgPSBtaWRkbGUgKyAxOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBtX0NvbXBhdENvdW50ICE9IDA7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfQ2xvc2VGaWxsU3Ryb2tlUGF0aCgpDQotew0KLSAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgSGFuZGxlX0Nsb3NlUGF0aCgpOw0KLSAgICBBZGRQYXRoT2JqZWN0KEZYRklMTF9XSU5ESU5HLCBUUlVFKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9GaWxsU3Ryb2tlUGF0aCgpDQotew0KLSAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQWRkUGF0aE9iamVjdChGWEZJTExfV0lORElORywgVFJVRSk7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfQ2xvc2VFT0ZpbGxTdHJva2VQYXRoKCkNCi17DQotICAgIGlmIChtX09wdGlvbnMubV9iVGV4dE9ubHkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBBZGRQYXRoUG9pbnQobV9QYXRoU3RhcnRYLCBtX1BhdGhTdGFydFksIEZYUFRfTElORVRPIHwgRlhQVF9DTE9TRUZJR1VSRSk7DQotICAgIEFkZFBhdGhPYmplY3QoRlhGSUxMX0FMVEVSTkFURSwgVFJVRSk7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfRU9GaWxsU3Ryb2tlUGF0aCgpDQotew0KLSAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQWRkUGF0aE9iamVjdChGWEZJTExfQUxURVJOQVRFLCBUUlVFKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9CZWdpbk1hcmtlZENvbnRlbnRfRGljdGlvbmFyeSgpDQotew0KLSAgICBpZiAoIW1fT3B0aW9ucy5tX2JNYXJrZWRDb250ZW50KSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgdGFnID0gR2V0U3RyaW5nKDEpOw0KLSAgICBDUERGX09iamVjdCogcFByb3BlcnR5ID0gR2V0T2JqZWN0KDApOw0KLSAgICBpZiAocFByb3BlcnR5ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9CT09MIGJEaXJlY3QgPSBUUlVFOw0KLSAgICBpZiAocFByb3BlcnR5LT5HZXRUeXBlKCkgPT0gUERGT0JKX05BTUUpIHsNCi0gICAgICAgIHBQcm9wZXJ0eSA9IEZpbmRSZXNvdXJjZU9iaihGWF9CU1RSQygiUHJvcGVydGllcyIpLCBwUHJvcGVydHktPkdldFN0cmluZygpKTsNCi0gICAgICAgIGlmIChwUHJvcGVydHkgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIGJEaXJlY3QgPSBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAocFByb3BlcnR5LT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX0N1ckNvbnRlbnRNYXJrLkdldE1vZGlmeSgpLT5BZGRNYXJrKHRhZywgKENQREZfRGljdGlvbmFyeSopcFByb3BlcnR5LCBiRGlyZWN0KTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9CZWdpbk1hcmtlZENvbnRlbnQoKQ0KLXsNCi0gICAgaWYgKCFtX09wdGlvbnMubV9iTWFya2VkQ29udGVudCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIHRhZyA9IEdldFN0cmluZygwKTsNCi0gICAgbV9DdXJDb250ZW50TWFyay5HZXRNb2RpZnkoKS0+QWRkTWFyayh0YWcsIE5VTEwsIEZBTFNFKTsNCi19DQotc3RydWN0IF9GWF9CU1RSIHsNCi0gICAgRlhfTFBDU1RSCW1fUHRyOw0KLSAgICBpbnQJCQltX1NpemU7DQotfTsNCi0jZGVmaW5lIF9GWF9CU1RSQyhzdHIpIHtzdHIsIHNpemVvZihzdHIpLTF9DQotY29uc3QgX0ZYX0JTVFIgX1BERl9JbmxpbmVLZXlBYmJyW10gPSB7DQotICAgIF9GWF9CU1RSQygiQml0c1BlckNvbXBvbmVudCIpLCBfRlhfQlNUUkMoIkJQQyIpLA0KLSAgICBfRlhfQlNUUkMoIkNvbG9yU3BhY2UiKSwgX0ZYX0JTVFJDKCJDUyIpLA0KLSAgICBfRlhfQlNUUkMoIkRlY29kZSIpLCBfRlhfQlNUUkMoIkQiKSwNCi0gICAgX0ZYX0JTVFJDKCJEZWNvZGVQYXJtcyIpLCBfRlhfQlNUUkMoIkRQIiksDQotICAgIF9GWF9CU1RSQygiRmlsdGVyIiksIF9GWF9CU1RSQygiRiIpLA0KLSAgICBfRlhfQlNUUkMoIkhlaWdodCIpLCBfRlhfQlNUUkMoIkgiKSwNCi0gICAgX0ZYX0JTVFJDKCJJbWFnZU1hc2siKSwgX0ZYX0JTVFJDKCJJTSIpLA0KLSAgICBfRlhfQlNUUkMoIkludGVycG9sYXRlIiksIF9GWF9CU1RSQygiSSIpLA0KLSAgICBfRlhfQlNUUkMoIldpZHRoIiksIF9GWF9CU1RSQygiVyIpLA0KLX07DQotY29uc3QgX0ZYX0JTVFIgX1BERl9JbmxpbmVWYWx1ZUFiYnJbXSA9IHsNCi0gICAgX0ZYX0JTVFJDKCJEZXZpY2VHcmF5IiksIF9GWF9CU1RSQygiRyIpLA0KLSAgICBfRlhfQlNUUkMoIkRldmljZVJHQiIpLCBfRlhfQlNUUkMoIlJHQiIpLA0KLSAgICBfRlhfQlNUUkMoIkRldmljZUNNWUsiKSwgX0ZYX0JTVFJDKCJDTVlLIiksDQotICAgIF9GWF9CU1RSQygiSW5kZXhlZCIpLCBfRlhfQlNUUkMoIkkiKSwNCi0gICAgX0ZYX0JTVFJDKCJBU0NJSUhleERlY29kZSIpLCBfRlhfQlNUUkMoIkFIeCIpLA0KLSAgICBfRlhfQlNUUkMoIkFTQ0lJODVEZWNvZGUiKSwgX0ZYX0JTVFJDKCJBODUiKSwNCi0gICAgX0ZYX0JTVFJDKCJMWldEZWNvZGUiKSwgX0ZYX0JTVFJDKCJMWlciKSwNCi0gICAgX0ZYX0JTVFJDKCJGbGF0ZURlY29kZSIpLCBfRlhfQlNUUkMoIkZsIiksDQotICAgIF9GWF9CU1RSQygiUnVuTGVuZ3RoRGVjb2RlIiksIF9GWF9CU1RSQygiUkwiKSwNCi0gICAgX0ZYX0JTVFJDKCJDQ0lUVEZheERlY29kZSIpLCBfRlhfQlNUUkMoIkNDRiIpLA0KLSAgICBfRlhfQlNUUkMoIkRDVERlY29kZSIpLCBfRlhfQlNUUkMoIkRDVCIpLA0KLX07DQotc3RhdGljIENGWF9CeXRlU3RyaW5nQyBfUERGX0ZpbmRGdWxsTmFtZShjb25zdCBfRlhfQlNUUiogdGFibGUsIGludCBjb3VudCwgRlhfQlNUUiBhYmJyKQ0KLXsNCi0gICAgaW50IGkgPSAwOw0KLSAgICB3aGlsZSAoaSA8IGNvdW50KSB7DQotICAgICAgICBpZiAoYWJici5HZXRMZW5ndGgoKSA9PSB0YWJsZVtpICsgMV0ubV9TaXplICYmIEZYU1lTX21lbWNtcDMyKGFiYnIuR2V0UHRyKCksIHRhYmxlW2kgKyAxXS5tX1B0ciwgYWJici5HZXRMZW5ndGgoKSkgPT0gMCkgew0KLSAgICAgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0ModGFibGVbaV0ubV9QdHIsIHRhYmxlW2ldLm1fU2l6ZSk7DQotICAgICAgICB9DQotICAgICAgICBpICs9IDI7DQotICAgIH0NCi0gICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nQygpOw0KLX0NCi12b2lkIF9QREZfUmVwbGFjZUFiYnIoQ1BERl9PYmplY3QqIHBPYmopDQotew0KLSAgICBzd2l0Y2ggKHBPYmotPkdldFR5cGUoKSkgew0KLSAgICAgICAgY2FzZSBQREZPQkpfRElDVElPTkFSWTogew0KLSAgICAgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gKENQREZfRGljdGlvbmFyeSopcE9iajsNCi0gICAgICAgICAgICAgICAgRlhfUE9TSVRJT04gcG9zID0gcERpY3QtPkdldFN0YXJ0UG9zKCk7DQotICAgICAgICAgICAgICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGtleTsNCi0gICAgICAgICAgICAgICAgICAgIENQREZfT2JqZWN0KiB2YWx1ZSA9IHBEaWN0LT5HZXROZXh0RWxlbWVudChwb3MsIGtleSk7DQotICAgICAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZ0MgZnVsbG5hbWUgPSBfUERGX0ZpbmRGdWxsTmFtZShfUERGX0lubGluZUtleUFiYnIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgX1BERl9JbmxpbmVLZXlBYmJyIC8gc2l6ZW9mKF9GWF9CU1RSKSwga2V5KTsNCi0gICAgICAgICAgICAgICAgICAgIGlmICghZnVsbG5hbWUuSXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcERpY3QtPlJlcGxhY2VLZXkoa2V5LCBmdWxsbmFtZSk7DQotICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gZnVsbG5hbWU7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPkdldFR5cGUoKSA9PSBQREZPQkpfTkFNRSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIG5hbWUgPSB2YWx1ZS0+R2V0U3RyaW5nKCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgZnVsbG5hbWUgPSBfUERGX0ZpbmRGdWxsTmFtZShfUERGX0lubGluZVZhbHVlQWJiciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiBfUERGX0lubGluZVZhbHVlQWJiciAvIHNpemVvZihfRlhfQlNUUiksIG5hbWUpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZnVsbG5hbWUuSXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEaWN0LT5TZXRBdE5hbWUoa2V5LCBmdWxsbmFtZSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBfUERGX1JlcGxhY2VBYmJyKHZhbHVlKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIFBERk9CSl9BUlJBWTogew0KLSAgICAgICAgICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSAoQ1BERl9BcnJheSopcE9iajsNCi0gICAgICAgICAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHBBcnJheS0+R2V0Q291bnQoKTsgaSArKykgew0KLSAgICAgICAgICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBFbGVtZW50ID0gcEFycmF5LT5HZXRFbGVtZW50KGkpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBFbGVtZW50LT5HZXRUeXBlKCkgPT0gUERGT0JKX05BTUUpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBuYW1lID0gcEVsZW1lbnQtPkdldFN0cmluZygpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nQyBmdWxsbmFtZSA9IF9QREZfRmluZEZ1bGxOYW1lKF9QREZfSW5saW5lVmFsdWVBYmJyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiBfUERGX0lubGluZVZhbHVlQWJiciAvIHNpemVvZihfRlhfQlNUUiksIG5hbWUpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZnVsbG5hbWUuSXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBcnJheS0+U2V0QXQoaSwgQ1BERl9OYW1lOjpDcmVhdGUoZnVsbG5hbWUpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIF9QREZfUmVwbGFjZUFiYnIocEVsZW1lbnQpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgfQ0KLX0NCi1zdGF0aWMgQ0ZYX0J5dGVTdHJpbmdDIF9QREZfRmluZEFiYnJOYW1lKGNvbnN0IF9GWF9CU1RSKiB0YWJsZSwgaW50IGNvdW50LCBGWF9CU1RSIGZ1bGxOYW1lKQ0KLXsNCi0gICAgaW50IGkgPSAwOw0KLSAgICB3aGlsZSAoaSA8IGNvdW50KSB7DQotICAgICAgICBpZiAoZnVsbE5hbWUuR2V0TGVuZ3RoKCkgPT0gdGFibGVbaV0ubV9TaXplICYmIEZYU1lTX21lbWNtcDMyKGZ1bGxOYW1lLkdldFB0cigpLCB0YWJsZVtpXS5tX1B0ciwgZnVsbE5hbWUuR2V0TGVuZ3RoKCkpID09IDApIHsNCi0gICAgICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmdDKHRhYmxlW2kgKyAxXS5tX1B0ciwgdGFibGVbaSArIDFdLm1fU2l6ZSk7DQotICAgICAgICB9DQotICAgICAgICBpICs9IDI7DQotICAgIH0NCi0gICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nQygpOw0KLX0NCi12b2lkIF9QREZfUmVwbGFjZUZ1bGwoQ1BERl9PYmplY3QqIHBPYmopDQotew0KLSAgICBzd2l0Y2ggKHBPYmotPkdldFR5cGUoKSkgew0KLSAgICAgICAgY2FzZSBQREZPQkpfRElDVElPTkFSWTogew0KLSAgICAgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gKENQREZfRGljdGlvbmFyeSopcE9iajsNCi0gICAgICAgICAgICAgICAgRlhfUE9TSVRJT04gcG9zID0gcERpY3QtPkdldFN0YXJ0UG9zKCk7DQotICAgICAgICAgICAgICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGtleTsNCi0gICAgICAgICAgICAgICAgICAgIENQREZfT2JqZWN0KiB2YWx1ZSA9IHBEaWN0LT5HZXROZXh0RWxlbWVudChwb3MsIGtleSk7DQotICAgICAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZ0MgYWJick5hbWUgPSBfUERGX0ZpbmRBYmJyTmFtZShfUERGX0lubGluZUtleUFiYnIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoX1BERl9JbmxpbmVLZXlBYmJyKSAvIHNpemVvZihfRlhfQlNUUiksIGtleSk7DQotICAgICAgICAgICAgICAgICAgICBpZiAoIWFiYnJOYW1lLklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBEaWN0LT5SZXBsYWNlS2V5KGtleSwgYWJick5hbWUpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGFiYnJOYW1lOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5HZXRUeXBlKCkgPT0gUERGT0JKX05BTUUpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBuYW1lID0gdmFsdWUtPkdldFN0cmluZygpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFiYnJOYW1lID0gX1BERl9GaW5kQWJick5hbWUoX1BERl9JbmxpbmVWYWx1ZUFiYnIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoX1BERl9JbmxpbmVWYWx1ZUFiYnIpIC8gc2l6ZW9mKF9GWF9CU1RSKSwgbmFtZSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhYmJyTmFtZS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcERpY3QtPlNldEF0TmFtZShrZXksIGFiYnJOYW1lKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIF9QREZfUmVwbGFjZUZ1bGwodmFsdWUpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgUERGT0JKX0FSUkFZOiB7DQotICAgICAgICAgICAgICAgIENQREZfQXJyYXkqIHBBcnJheSA9IChDUERGX0FycmF5KilwT2JqOw0KLSAgICAgICAgICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcEFycmF5LT5HZXRDb3VudCgpOyBpICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBDUERGX09iamVjdCogcEVsZW1lbnQgPSBwQXJyYXktPkdldEVsZW1lbnQoaSk7DQotICAgICAgICAgICAgICAgICAgICBpZiAocEVsZW1lbnQtPkdldFR5cGUoKSA9PSBQREZPQkpfTkFNRSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIG5hbWUgPSBwRWxlbWVudC0+R2V0U3RyaW5nKCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmdDIGFiYnJOYW1lID0gX1BERl9GaW5kQWJick5hbWUoX1BERl9JbmxpbmVWYWx1ZUFiYnIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIF9QREZfSW5saW5lVmFsdWVBYmJyIC8gc2l6ZW9mKF9GWF9CU1RSKSwgbmFtZSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhYmJyTmFtZS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFycmF5LT5TZXRBdChpLCBDUERGX05hbWU6OkNyZWF0ZShhYmJyTmFtZSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgX1BERl9SZXBsYWNlRnVsbChwRWxlbWVudCk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfQmVnaW5UZXh0KCkNCi17DQotICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0TWF0cml4LlNldCgxLjBmLCAwLCAwLCAxLjBmLCAwLCAwKTsNCi0gICAgT25DaGFuZ2VUZXh0TWF0cml4KCk7DQotICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0WCA9IDA7DQotICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0WSA9IDA7DQotICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0TGluZVggPSAwOw0KLSAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dExpbmVZID0gMDsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9CZWdpblNlY3Rpb25VbmRlZmluZWQoKQ0KLXsNCi0gICAgbV9Db21wYXRDb3VudCArKzsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9DdXJ2ZVRvXzEyMygpDQotew0KLSAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQWRkUGF0aFBvaW50KEdldE51bWJlcig1KSwgR2V0TnVtYmVyKDQpLCBGWFBUX0JFWklFUlRPKTsNCi0gICAgQWRkUGF0aFBvaW50KEdldE51bWJlcigzKSwgR2V0TnVtYmVyKDIpLCBGWFBUX0JFWklFUlRPKTsNCi0gICAgQWRkUGF0aFBvaW50KEdldE51bWJlcigxKSwgR2V0TnVtYmVyKDApLCBGWFBUX0JFWklFUlRPKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9Db25jYXRNYXRyaXgoKQ0KLXsNCi0gICAgRlhfRkxPQVQgYTIgPSBHZXROdW1iZXIxNig1KSwgYjIgPSBHZXROdW1iZXIxNig0KSwgYzIgPSBHZXROdW1iZXIxNigzKSwgZDIgPSBHZXROdW1iZXIxNigyKTsNCi0gICAgRlhfRkxPQVQgZTIgPSBHZXROdW1iZXIoMSksIGYyID0gR2V0TnVtYmVyKDApOw0KLSAgICBGWF9GTE9BVCBvbGRfd2lkdGhfc2NhbGUgPSBtX3BDdXJTdGF0ZXMtPm1fQ1RNLkdldFhVbml0KCk7DQotICAgIENGWF9BZmZpbmVNYXRyaXggbmV3X21hdHJpeChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKTsNCi0gICAgbmV3X21hdHJpeC5Db25jYXQobV9wQ3VyU3RhdGVzLT5tX0NUTSk7DQotICAgIG1fcEN1clN0YXRlcy0+bV9DVE0gPSBuZXdfbWF0cml4Ow0KLSAgICBGWF9GTE9BVCBuZXdfd2lkdGhfc2NhbGUgPSBtX3BDdXJTdGF0ZXMtPm1fQ1RNLkdldFhVbml0KCk7DQotICAgIE9uQ2hhbmdlVGV4dE1hdHJpeCgpOw0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldENvbG9yU3BhY2VfRmlsbCgpDQotew0KLSAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgY3NuYW1lID0gR2V0U3RyaW5nKDApOw0KLSAgICBDUERGX0NvbG9yU3BhY2UqIHBDUyA9IEZpbmRDb2xvclNwYWNlKGNzbmFtZSk7DQotICAgIGlmIChwQ1MgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fcEN1clN0YXRlcy0+bV9Db2xvclN0YXRlLkdldE1vZGlmeSgpLT5tX0ZpbGxDb2xvci5TZXRDb2xvclNwYWNlKHBDUyk7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0Q29sb3JTcGFjZV9TdHJva2UoKQ0KLXsNCi0gICAgaWYgKG1fT3B0aW9ucy5tX2JUZXh0T25seSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIGNzbmFtZSA9IEdldFN0cmluZygwKTsNCi0gICAgQ1BERl9Db2xvclNwYWNlKiBwQ1MgPSBGaW5kQ29sb3JTcGFjZShjc25hbWUpOw0KLSAgICBpZiAocENTID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX3BDdXJTdGF0ZXMtPm1fQ29sb3JTdGF0ZS5HZXRNb2RpZnkoKS0+bV9TdHJva2VDb2xvci5TZXRDb2xvclNwYWNlKHBDUyk7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0RGFzaCgpDQotew0KLSAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9BcnJheSogcEFycmF5ID0gR2V0T2JqZWN0KDEpLT5HZXRBcnJheSgpOw0KLSAgICBpZiAocEFycmF5ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX3BDdXJTdGF0ZXMtPlNldExpbmVEYXNoKHBBcnJheSwgR2V0TnVtYmVyKDApLCAxLjBmKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRDaGFyV2lkdGgoKQ0KLXsNCi0gICAgbV9UeXBlM0RhdGFbMF0gPSBHZXROdW1iZXIoMSk7DQotICAgIG1fVHlwZTNEYXRhWzFdID0gR2V0TnVtYmVyKDApOw0KLSAgICBtX2JDb2xvcmVkID0gVFJVRTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRDYWNoZWREZXZpY2UoKQ0KLXsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpICsrKSB7DQotICAgICAgICBtX1R5cGUzRGF0YVtpXSA9IEdldE51bWJlcig1IC0gaSk7DQotICAgIH0NCi0gICAgbV9iQ29sb3JlZCA9IEZBTFNFOw0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0V4ZWN1dGVYT2JqZWN0KCkNCi17DQotICAgIENGWF9CeXRlU3RyaW5nIG5hbWUgPSBHZXRTdHJpbmcoMCk7DQotICAgIGlmIChuYW1lID09IG1fTGFzdEltYWdlTmFtZSAmJiBtX3BMYXN0SW1hZ2UgJiYgbV9wTGFzdEltYWdlLT5HZXRTdHJlYW0oKSAmJiBtX3BMYXN0SW1hZ2UtPkdldFN0cmVhbSgpLT5HZXRPYmpOdW0oKSkgew0KLSNpZiBkZWZpbmVkKF9GUERGQVBJX01JTklfKSAmJiAhZGVmaW5lZChfRlhDT1JFX0ZFQVRVUkVfQUxMXykNCi0gICAgICAgIEFkZER1cGxpY2F0ZUltYWdlKCk7DQotI2Vsc2UNCi0gICAgICAgIEFkZEltYWdlKE5VTEwsIG1fcExhc3RJbWFnZSwgRkFMU0UpOw0KLSNlbmRpZg0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChtX09wdGlvbnMubV9iVGV4dE9ubHkpIHsNCi0gICAgICAgIENQREZfT2JqZWN0KiBwUmVzID0gTlVMTDsNCi0gICAgICAgIGlmIChtX3BSZXNvdXJjZXMgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX3BSZXNvdXJjZXMgPT0gbV9wUGFnZVJlc291cmNlcykgew0KLSAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcExpc3QgPSBtX3BSZXNvdXJjZXMtPkdldERpY3QoRlhfQlNUUkMoIlhPYmplY3QiKSk7DQotICAgICAgICAgICAgaWYgKHBMaXN0ID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwUmVzID0gcExpc3QtPkdldEVsZW1lbnQobmFtZSk7DQotICAgICAgICAgICAgaWYgKHBSZXMgPT0gTlVMTCB8fCBwUmVzLT5HZXRUeXBlKCkgIT0gUERGT0JKX1JFRkVSRU5DRSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBMaXN0ID0gbV9wUmVzb3VyY2VzLT5HZXREaWN0KEZYX0JTVFJDKCJYT2JqZWN0IikpOw0KLSAgICAgICAgICAgIGlmIChwTGlzdCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIGlmIChtX3BQYWdlUmVzb3VyY2VzID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBMaXN0ID0gbV9wUGFnZVJlc291cmNlcy0+R2V0RGljdChGWF9CU1RSQygiWE9iamVjdCIpKTsNCi0gICAgICAgICAgICAgICAgaWYgKHBMaXN0ID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBwUmVzID0gcExpc3QtPkdldEVsZW1lbnQobmFtZSk7DQotICAgICAgICAgICAgICAgIGlmIChwUmVzID09IE5VTEwgfHwgcFJlcy0+R2V0VHlwZSgpICE9IFBERk9CSl9SRUZFUkVOQ0UpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHBSZXMgPSBwTGlzdC0+R2V0RWxlbWVudChuYW1lKTsNCi0gICAgICAgICAgICAgICAgaWYgKHBSZXMgPT0gTlVMTCB8fCBwUmVzLT5HZXRUeXBlKCkgIT0gUERGT0JKX1JFRkVSRU5DRSkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfQk9PTCBiRm9ybTsNCi0gICAgICAgIGlmIChtX3BEb2N1bWVudC0+SXNGb3JtU3RyZWFtKCgoQ1BERl9SZWZlcmVuY2UqKXBSZXMpLT5HZXRSZWZPYmpOdW0oKSwgYkZvcm0pICYmICFiRm9ybSkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDUERGX1N0cmVhbSogcFhPYmplY3QgPSAoQ1BERl9TdHJlYW0qKUZpbmRSZXNvdXJjZU9iaihGWF9CU1RSQygiWE9iamVjdCIpLCBuYW1lKTsNCi0gICAgaWYgKHBYT2JqZWN0ID09IE5VTEwgfHwgcFhPYmplY3QtPkdldFR5cGUoKSAhPSBQREZPQkpfU1RSRUFNKSB7DQotICAgICAgICBtX2JSZXNvdXJjZU1pc3NpbmcgPSBUUlVFOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nQyB0eXBlID0gcFhPYmplY3QtPkdldERpY3QoKS0+R2V0Q29uc3RTdHJpbmcoRlhfQlNUUkMoIlN1YnR5cGUiKSk7DQotICAgIGlmICh0eXBlID09IEZYX0JTVFJDKCJJbWFnZSIpKSB7DQotICAgICAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1BERl9JbWFnZU9iamVjdCogcE9iaiA9IEFkZEltYWdlKHBYT2JqZWN0LCBOVUxMLCBGQUxTRSk7DQotICAgICAgICBtX0xhc3RJbWFnZU5hbWUgPSBuYW1lOw0KLSAgICAgICAgbV9wTGFzdEltYWdlID0gcE9iai0+bV9wSW1hZ2U7DQotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBGWF9CU1RSQygiRm9ybSIpKSB7DQotICAgICAgICBBZGRGb3JtKHBYT2JqZWN0KTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6QWRkRm9ybShDUERGX1N0cmVhbSogcFN0cmVhbSkNCi17DQotI2lmICFkZWZpbmVkKF9GUERGQVBJX01JTklfKSB8fCBkZWZpbmVkKF9GWENPUkVfRkVBVFVSRV9BTExfKQ0KLSAgICBpZiAoIW1fT3B0aW9ucy5tX2JTZXBhcmF0ZUZvcm0pIHsNCi0gICAgICAgIENQREZfRGljdGlvbmFyeSogcFJlc291cmNlcyA9IHBTdHJlYW0tPkdldERpY3QoKS0+R2V0RGljdChGWF9CU1RSQygiUmVzb3VyY2VzIikpOw0KLSAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCBmb3JtX21hdHJpeCA9IHBTdHJlYW0tPkdldERpY3QoKS0+R2V0TWF0cml4KEZYX0JTVFJDKCJNYXRyaXgiKSk7DQotICAgICAgICBmb3JtX21hdHJpeC5Db25jYXQobV9wQ3VyU3RhdGVzLT5tX0NUTSk7DQotICAgICAgICBDUERGX0FycmF5KiBwQkJveCA9IHBTdHJlYW0tPkdldERpY3QoKS0+R2V0QXJyYXkoRlhfQlNUUkMoIkJCb3giKSk7DQotICAgICAgICBDRlhfRmxvYXRSZWN0IGZvcm1fYmJveDsNCi0gICAgICAgIENQREZfUGF0aCBDbGlwUGF0aDsNCi0gICAgICAgIGlmIChwQkJveCkgew0KLSAgICAgICAgICAgIGZvcm1fYmJveCA9IHBTdHJlYW0tPkdldERpY3QoKS0+R2V0UmVjdChGWF9CU1RSQygiQkJveCIpKTsNCi0gICAgICAgICAgICBDbGlwUGF0aC5OZXcoKTsNCi0gICAgICAgICAgICBDbGlwUGF0aC5BcHBlbmRSZWN0KGZvcm1fYmJveC5sZWZ0LCBmb3JtX2Jib3guYm90dG9tLCBmb3JtX2Jib3gucmlnaHQsIGZvcm1fYmJveC50b3ApOw0KLSAgICAgICAgICAgIENsaXBQYXRoLlRyYW5zZm9ybSgmZm9ybV9tYXRyaXgpOw0KLSAgICAgICAgICAgIGZvcm1fYmJveC5UcmFuc2Zvcm0oJmZvcm1fbWF0cml4KTsNCi0gICAgICAgIH0NCi0gICAgICAgIENQREZfU3RyZWFtQ29udGVudFBhcnNlciBwYXJzZXI7DQotICAgICAgICBwYXJzZXIuSW5pdGlhbGl6ZSgpOw0KLSAgICAgICAgcGFyc2VyLlByZXBhcmVQYXJzZShtX3BEb2N1bWVudCwgbV9wUGFnZVJlc291cmNlcywgbV9wUmVzb3VyY2VzLCAmbV9tdENvbnRlbnRUb1VzZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcE9iamVjdExpc3QsIHBSZXNvdXJjZXMsICZmb3JtX2Jib3gsICZtX09wdGlvbnMsIG1fcEN1clN0YXRlcywgbV9MZXZlbCArIDEpOw0KLSAgICAgICAgcGFyc2VyLm1fcEN1clN0YXRlcy0+bV9DVE0gPSBmb3JtX21hdHJpeDsNCi0gICAgICAgIGlmIChDbGlwUGF0aC5Ob3ROdWxsKCkpIHsNCi0gICAgICAgICAgICBwYXJzZXIubV9wQ3VyU3RhdGVzLT5tX0NsaXBQYXRoLkFwcGVuZFBhdGgoQ2xpcFBhdGgsIEZYRklMTF9XSU5ESU5HLCBUUlVFKTsNCi0gICAgICAgIH0NCi0gICAgICAgIENQREZfU3RyZWFtQWNjIHN0cmVhbTsNCi0gICAgICAgIHN0cmVhbS5Mb2FkQWxsRGF0YShwU3RyZWFtLCBGQUxTRSk7DQotICAgICAgICBpZiAoc3RyZWFtLkdldFNpemUoKSA9PSAwKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSNpZmRlZiBfRlBERkFQSV9NSU5JXw0KLSAgICAgICAgcGFyc2VyLklucHV0RGF0YShzdHJlYW0uR2V0RGF0YSgpLCBzdHJlYW0uR2V0U2l6ZSgpKTsNCi0gICAgICAgIHBhcnNlci5GaW5pc2goKTsNCi0jZWxzZQ0KLSAgICAgICAgcGFyc2VyLlBhcnNlKHN0cmVhbS5HZXREYXRhKCksIHN0cmVhbS5HZXRTaXplKCksIDApOw0KLSNlbmRpZg0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotI2VuZGlmDQotICAgIENQREZfRm9ybU9iamVjdCogcEZvcm1PYmogPSBGWF9ORVcgQ1BERl9Gb3JtT2JqZWN0Ow0KLSAgICBwRm9ybU9iai0+bV9wRm9ybSA9IEZYX05FVyBDUERGX0Zvcm0obV9wRG9jdW1lbnQsIG1fcFBhZ2VSZXNvdXJjZXMsIHBTdHJlYW0sIG1fcFJlc291cmNlcyk7DQotICAgIHBGb3JtT2JqLT5tX0Zvcm1NYXRyaXggPSBtX3BDdXJTdGF0ZXMtPm1fQ1RNOw0KLSAgICBwRm9ybU9iai0+bV9Gb3JtTWF0cml4LkNvbmNhdChtX210Q29udGVudFRvVXNlcik7DQotICAgIENQREZfQWxsU3RhdGVzIHN0YXR1czsNCi0gICAgc3RhdHVzLm1fR2VuZXJhbFN0YXRlID0gbV9wQ3VyU3RhdGVzLT5tX0dlbmVyYWxTdGF0ZTsNCi0gICAgc3RhdHVzLm1fR3JhcGhTdGF0ZSA9IG1fcEN1clN0YXRlcy0+bV9HcmFwaFN0YXRlOw0KLSAgICBzdGF0dXMubV9Db2xvclN0YXRlID0gbV9wQ3VyU3RhdGVzLT5tX0NvbG9yU3RhdGU7DQotICAgIHN0YXR1cy5tX1RleHRTdGF0ZSA9IG1fcEN1clN0YXRlcy0+bV9UZXh0U3RhdGU7DQotICAgIHBGb3JtT2JqLT5tX3BGb3JtLT5QYXJzZUNvbnRlbnQoJnN0YXR1cywgTlVMTCwgTlVMTCwgJm1fT3B0aW9ucywgbV9MZXZlbCArIDEpOw0KLSAgICBpZiAoIW1fcE9iamVjdExpc3QtPm1fYkJhY2tncm91bmRBbHBoYU5lZWRlZCAmJiBwRm9ybU9iai0+bV9wRm9ybS0+bV9iQmFja2dyb3VuZEFscGhhTmVlZGVkKSB7DQotICAgICAgICBtX3BPYmplY3RMaXN0LT5tX2JCYWNrZ3JvdW5kQWxwaGFOZWVkZWQgPSBUUlVFOw0KLSAgICB9DQotICAgIHBGb3JtT2JqLT5DYWxjQm91bmRpbmdCb3goKTsNCi0gICAgU2V0R3JhcGhpY1N0YXRlcyhwRm9ybU9iaiwgVFJVRSwgVFJVRSwgVFJVRSk7DQotICAgIG1fcE9iamVjdExpc3QtPm1fT2JqZWN0TGlzdC5BZGRUYWlsKHBGb3JtT2JqKTsNCi19DQotI2lmIGRlZmluZWQoX0ZQREZBUElfTUlOSV8pICYmICFkZWZpbmVkKF9GWENPUkVfRkVBVFVSRV9BTExfKQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpBZGREdXBsaWNhdGVJbWFnZSgpDQotew0KLSAgICBGWF9QT1NJVElPTiB0YWlscG9zID0gbV9wT2JqZWN0TGlzdC0+bV9PYmplY3RMaXN0LkdldFRhaWxQb3NpdGlvbigpOw0KLSAgICBDUERGX1BhZ2VPYmplY3QqIHBMYXN0T2JqID0gKENQREZfUGFnZU9iamVjdCopbV9wT2JqZWN0TGlzdC0+bV9PYmplY3RMaXN0LkdldEF0KHRhaWxwb3MpOw0KLSAgICBpZiAocExhc3RPYmogPT0gTlVMTCB8fCAocExhc3RPYmotPm1fVHlwZSAhPSBQREZQQUdFX0lOTElORVMgJiYgcExhc3RPYmotPm1fVHlwZSAhPSBQREZQQUdFX0lNQUdFKSkgew0KLSAgICAgICAgQWRkSW1hZ2UoTlVMTCwgbV9wTGFzdEltYWdlLCBGQUxTRSk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKHBMYXN0T2JqLT5tX0dlbmVyYWxTdGF0ZSAhPSBtX3BDdXJTdGF0ZXMtPm1fR2VuZXJhbFN0YXRlIHx8DQotICAgICAgICAgICAgcExhc3RPYmotPm1fQ2xpcFBhdGggIT0gbV9wQ3VyU3RhdGVzLT5tX0NsaXBQYXRoIHx8DQotICAgICAgICAgICAgcExhc3RPYmotPm1fQ29sb3JTdGF0ZSAhPSBtX3BDdXJTdGF0ZXMtPm1fQ29sb3JTdGF0ZSkgew0KLSAgICAgICAgQWRkSW1hZ2UoTlVMTCwgbV9wTGFzdEltYWdlLCBGQUxTRSk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBJbWFnZU1hdHJpeDsNCi0gICAgSW1hZ2VNYXRyaXguQ29weShtX3BDdXJTdGF0ZXMtPm1fQ1RNKTsNCi0gICAgSW1hZ2VNYXRyaXguQ29uY2F0KG1fbXRDb250ZW50VG9Vc2VyKTsNCi0gICAgaWYgKHBMYXN0T2JqLT5tX1R5cGUgPT0gUERGUEFHRV9JTkxJTkVTKSB7DQotICAgICAgICBDUERGX0lubGluZUltYWdlcyogcElubGluZXMgPSAoQ1BERl9JbmxpbmVJbWFnZXMqKXBMYXN0T2JqOw0KLSAgICAgICAgaWYgKHBJbmxpbmVzLT5tX3BTdHJlYW0gIT0gbV9wTGFzdEltYWdlLT5HZXRTdHJlYW0oKSkgew0KLSAgICAgICAgICAgIEFkZEltYWdlKE5VTEwsIG1fcExhc3RJbWFnZSwgRkFMU0UpOw0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIHBJbmxpbmVzLT5BZGRNYXRyaXgoSW1hZ2VNYXRyaXgpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgQ1BERl9JbWFnZU9iamVjdCogcEltYWdlT2JqID0gKENQREZfSW1hZ2VPYmplY3QqKXBMYXN0T2JqOw0KLSAgICAgICAgQ1BERl9JbmxpbmVJbWFnZXMqIHBJbmxpbmVzID0gRlhfTkVXIENQREZfSW5saW5lSW1hZ2VzOw0KLSAgICAgICAgcElubGluZXMtPm1fcFN0cmVhbSA9IG1fcExhc3RJbWFnZS0+R2V0U3RyZWFtKCk7DQotICAgICAgICBTZXRHcmFwaGljU3RhdGVzKHBJbmxpbmVzLCAhcElubGluZXMtPm1fcFN0cmVhbS0+R2V0RGljdCgpLT5LZXlFeGlzdChGWF9CU1RSQygiQ29sb3JTcGFjZSIpKSwgRkFMU0UsIEZBTFNFKTsNCi0gICAgICAgIHBJbmxpbmVzLT5BZGRNYXRyaXgocEltYWdlT2JqLT5tX01hdHJpeCk7DQotICAgICAgICBwSW5saW5lcy0+QWRkTWF0cml4KEltYWdlTWF0cml4KTsNCi0gICAgICAgIG1fcE9iamVjdExpc3QtPm1fT2JqZWN0TGlzdC5SZW1vdmVBdCh0YWlscG9zKTsNCi0gICAgICAgIG1fcE9iamVjdExpc3QtPm1fT2JqZWN0TGlzdC5BZGRUYWlsKHBJbmxpbmVzKTsNCi0gICAgICAgIHBMYXN0T2JqLT5SZWxlYXNlKCk7DQotICAgIH0NCi19DQotI2VuZGlmDQotQ1BERl9JbWFnZU9iamVjdCogQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpBZGRJbWFnZShDUERGX1N0cmVhbSogcFN0cmVhbSwgQ1BERl9JbWFnZSogcEltYWdlLCBGWF9CT09MIGJJbmxpbmUpDQotew0KLSAgICBpZiAocFN0cmVhbSA9PSBOVUxMICYmIHBJbWFnZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDRlhfQWZmaW5lTWF0cml4IEltYWdlTWF0cml4Ow0KLSAgICBJbWFnZU1hdHJpeC5Db3B5KG1fcEN1clN0YXRlcy0+bV9DVE0pOw0KLSAgICBJbWFnZU1hdHJpeC5Db25jYXQobV9tdENvbnRlbnRUb1VzZXIpOw0KLSAgICBDUERGX0ltYWdlT2JqZWN0KiBwSW1hZ2VPYmogPSBGWF9ORVcgQ1BERl9JbWFnZU9iamVjdDsNCi0gICAgaWYgKHBJbWFnZSkgew0KLSAgICAgICAgcEltYWdlT2JqLT5tX3BJbWFnZSA9IG1fcERvY3VtZW50LT5HZXRQYWdlRGF0YSgpLT5HZXRJbWFnZShwSW1hZ2UtPkdldFN0cmVhbSgpKTsNCi0gICAgfSBlbHNlIGlmIChwU3RyZWFtLT5HZXRPYmpOdW0oKSkgew0KLSAgICAgICAgcEltYWdlT2JqLT5tX3BJbWFnZSA9IG1fcERvY3VtZW50LT5Mb2FkSW1hZ2VGKHBTdHJlYW0pOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcEltYWdlT2JqLT5tX3BJbWFnZSA9IEZYX05FVyBDUERGX0ltYWdlKG1fcERvY3VtZW50KTsNCi0gICAgICAgIHBJbWFnZU9iai0+bV9wSW1hZ2UtPkxvYWRJbWFnZUYocFN0cmVhbSwgYklubGluZSk7DQotICAgIH0NCi0gICAgU2V0R3JhcGhpY1N0YXRlcyhwSW1hZ2VPYmosIHBJbWFnZU9iai0+bV9wSW1hZ2UtPklzTWFzaygpLCBGQUxTRSwgRkFMU0UpOw0KLSAgICBwSW1hZ2VPYmotPm1fTWF0cml4ID0gSW1hZ2VNYXRyaXg7DQotICAgIHBJbWFnZU9iai0+Q2FsY0JvdW5kaW5nQm94KCk7DQotICAgIG1fcE9iamVjdExpc3QtPm1fT2JqZWN0TGlzdC5BZGRUYWlsKHBJbWFnZU9iaik7DQotICAgIHJldHVybiBwSW1hZ2VPYmo7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfTWFya1BsYWNlX0RpY3Rpb25hcnkoKQ0KLXsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9FbmRJbWFnZSgpDQotew0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0VuZE1hcmtlZENvbnRlbnQoKQ0KLXsNCi0gICAgaWYgKCFtX09wdGlvbnMubV9iTWFya2VkQ29udGVudCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChtX0N1ckNvbnRlbnRNYXJrLklzTnVsbCgpKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaW50IGNvdW50ID0gbV9DdXJDb250ZW50TWFyay5HZXRPYmplY3QoKS0+Q291bnRJdGVtcygpOw0KLSAgICBpZiAoY291bnQgPT0gMSkgew0KLSAgICAgICAgbV9DdXJDb250ZW50TWFyay5TZXROdWxsKCk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbV9DdXJDb250ZW50TWFyay5HZXRNb2RpZnkoKS0+RGVsZXRlTGFzdE1hcmsoKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9FbmRUZXh0KCkNCi17DQotICAgIGludCBjb3VudCA9IG1fQ2xpcFRleHRMaXN0LkdldFNpemUoKTsNCi0gICAgaWYgKGNvdW50ID09IDApIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAobV9wQ3VyU3RhdGVzLT5tX1RleHRTdGF0ZS5HZXRPYmplY3QoKS0+bV9UZXh0TW9kZSA8IDQpIHsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkgKyspIHsNCi0gICAgICAgICAgICBDUERGX1RleHRPYmplY3QqIHBUZXh0ID0gKENQREZfVGV4dE9iamVjdCopbV9DbGlwVGV4dExpc3QuR2V0QXQoaSk7DQotICAgICAgICAgICAgaWYgKHBUZXh0KSB7DQotICAgICAgICAgICAgICAgIGRlbGV0ZSBwVGV4dDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX3BDdXJTdGF0ZXMtPm1fQ2xpcFBhdGguQXBwZW5kVGV4dHMoKENQREZfVGV4dE9iamVjdCoqKW1fQ2xpcFRleHRMaXN0LkdldERhdGEoKSwgY291bnQpOw0KLSAgICB9DQotICAgIG1fQ2xpcFRleHRMaXN0LlJlbW92ZUFsbCgpOw0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0VuZFNlY3Rpb25VbmRlZmluZWQoKQ0KLXsNCi0gICAgaWYgKG1fQ29tcGF0Q291bnQpIHsNCi0gICAgICAgIG1fQ29tcGF0Q291bnQgLS07DQotICAgIH0NCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9GaWxsUGF0aCgpDQotew0KLSAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQWRkUGF0aE9iamVjdChGWEZJTExfV0lORElORywgRkFMU0UpOw0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0ZpbGxQYXRoT2xkKCkNCi17DQotICAgIGlmIChtX09wdGlvbnMubV9iVGV4dE9ubHkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBBZGRQYXRoT2JqZWN0KEZYRklMTF9XSU5ESU5HLCBGQUxTRSk7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfRU9GaWxsUGF0aCgpDQotew0KLSAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQWRkUGF0aE9iamVjdChGWEZJTExfQUxURVJOQVRFLCBGQUxTRSk7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0R3JheV9GaWxsKCkNCi17DQotICAgIEZYX0ZMT0FUIHZhbHVlID0gR2V0TnVtYmVyKDApOw0KLSAgICBDUERGX0NvbG9yU3BhY2UqIHBDUyA9IENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19ERVZJQ0VHUkFZKTsNCi0gICAgbV9wQ3VyU3RhdGVzLT5tX0NvbG9yU3RhdGUuU2V0RmlsbENvbG9yKHBDUywgJnZhbHVlLCAxKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRHcmF5X1N0cm9rZSgpDQotew0KLSAgICBGWF9GTE9BVCB2YWx1ZSA9IEdldE51bWJlcigwKTsNCi0gICAgQ1BERl9Db2xvclNwYWNlKiBwQ1MgPSBDUERGX0NvbG9yU3BhY2U6OkdldFN0b2NrQ1MoUERGQ1NfREVWSUNFR1JBWSk7DQotICAgIG1fcEN1clN0YXRlcy0+bV9Db2xvclN0YXRlLlNldFN0cm9rZUNvbG9yKHBDUywgJnZhbHVlLCAxKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRFeHRlbmRHcmFwaFN0YXRlKCkNCi17DQotICAgIENGWF9CeXRlU3RyaW5nIG5hbWUgPSBHZXRTdHJpbmcoMCk7DQotICAgIENQREZfRGljdGlvbmFyeSogcEdTID0gKENQREZfRGljdGlvbmFyeSopRmluZFJlc291cmNlT2JqKEZYX0JTVFJDKCJFeHRHU3RhdGUiKSwgbmFtZSk7DQotICAgIGlmIChwR1MgPT0gTlVMTCB8fCBwR1MtPkdldFR5cGUoKSAhPSBQREZPQkpfRElDVElPTkFSWSkgew0KLSAgICAgICAgbV9iUmVzb3VyY2VNaXNzaW5nID0gVFJVRTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX3BDdXJTdGF0ZXMtPlByb2Nlc3NFeHRHUyhwR1MsIHRoaXMpOw0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0Nsb3NlUGF0aCgpDQotew0KLSAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKG1fUGF0aFBvaW50Q291bnQgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChtX1BhdGhTdGFydFggIT0gbV9QYXRoQ3VycmVudFggfHwgbV9QYXRoU3RhcnRZICE9IG1fUGF0aEN1cnJlbnRZKSB7DQotICAgICAgICBBZGRQYXRoUG9pbnQobV9QYXRoU3RhcnRYLCBtX1BhdGhTdGFydFksIEZYUFRfTElORVRPIHwgRlhQVF9DTE9TRUZJR1VSRSk7DQotICAgIH0gZWxzZSBpZiAobV9wUGF0aFBvaW50c1ttX1BhdGhQb2ludENvdW50IC0gMV0ubV9GbGFnICE9IEZYUFRfTU9WRVRPKSB7DQotICAgICAgICBtX3BQYXRoUG9pbnRzW21fUGF0aFBvaW50Q291bnQgLSAxXS5tX0ZsYWcgfD0gRlhQVF9DTE9TRUZJR1VSRTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldEZsYXQoKQ0KLXsNCi0jaWYgIWRlZmluZWQoX0ZQREZBUElfTUlOSV8pIHx8IGRlZmluZWQoX0ZYQ09SRV9GRUFUVVJFX0FMTF8pDQotICAgIG1fcEN1clN0YXRlcy0+bV9HZW5lcmFsU3RhdGUuR2V0TW9kaWZ5KCktPm1fRmxhdG5lc3MgPSBHZXROdW1iZXIoMCk7DQotI2VuZGlmDQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfQmVnaW5JbWFnZURhdGEoKQ0KLXsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRMaW5lSm9pbigpDQotew0KLSAgICBtX3BDdXJTdGF0ZXMtPm1fR3JhcGhTdGF0ZS5HZXRNb2RpZnkoKS0+bV9MaW5lSm9pbiA9IChDRlhfR3JhcGhTdGF0ZURhdGE6OkxpbmVKb2luKUdldEludGVnZXIoMCk7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0TGluZUNhcCgpDQotew0KLSAgICBtX3BDdXJTdGF0ZXMtPm1fR3JhcGhTdGF0ZS5HZXRNb2RpZnkoKS0+bV9MaW5lQ2FwID0gKENGWF9HcmFwaFN0YXRlRGF0YTo6TGluZUNhcClHZXRJbnRlZ2VyKDApOw0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldENNWUtDb2xvcl9GaWxsKCkNCi17DQotICAgIFJFUVVJUkVfUEFSQU1TKDQpOw0KLSAgICBGWF9GTE9BVCB2YWx1ZXNbNF07DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSArKykgew0KLSAgICAgICAgdmFsdWVzW2ldID0gR2V0TnVtYmVyKDMgLSBpKTsNCi0gICAgfQ0KLSAgICBDUERGX0NvbG9yU3BhY2UqIHBDUyA9IENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19ERVZJQ0VDTVlLKTsNCi0gICAgbV9wQ3VyU3RhdGVzLT5tX0NvbG9yU3RhdGUuU2V0RmlsbENvbG9yKHBDUywgdmFsdWVzLCA0KTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRDTVlLQ29sb3JfU3Ryb2tlKCkNCi17DQotICAgIFJFUVVJUkVfUEFSQU1TKDQpOw0KLSAgICBGWF9GTE9BVCB2YWx1ZXNbNF07DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSArKykgew0KLSAgICAgICAgdmFsdWVzW2ldID0gR2V0TnVtYmVyKDMgLSBpKTsNCi0gICAgfQ0KLSAgICBDUERGX0NvbG9yU3BhY2UqIHBDUyA9IENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19ERVZJQ0VDTVlLKTsNCi0gICAgbV9wQ3VyU3RhdGVzLT5tX0NvbG9yU3RhdGUuU2V0U3Ryb2tlQ29sb3IocENTLCB2YWx1ZXMsIDQpOw0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0xpbmVUbygpDQotew0KLSAgICBSRVFVSVJFX1BBUkFNUygyKTsNCi0gICAgaWYgKG1fT3B0aW9ucy5tX2JUZXh0T25seSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEFkZFBhdGhQb2ludChHZXROdW1iZXIoMSksIEdldE51bWJlcigwKSwgRlhQVF9MSU5FVE8pOw0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX01vdmVUbygpDQotew0KLSAgICBSRVFVSVJFX1BBUkFNUygyKTsNCi0gICAgaWYgKG1fT3B0aW9ucy5tX2JUZXh0T25seSkgew0KLSNpZm5kZWYgX0ZQREZBUElfTUlOSV8NCi0gICAgICAgIG1fcFN5bnRheC0+U2tpcFBhdGhPYmplY3QoKTsNCi0jZW5kaWYNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBBZGRQYXRoUG9pbnQoR2V0TnVtYmVyKDEpLCBHZXROdW1iZXIoMCksIEZYUFRfTU9WRVRPKTsNCi0jaWZuZGVmIF9GUERGQVBJX01JTklfDQotICAgIFBhcnNlUGF0aE9iamVjdCgpOw0KLSNlbmRpZg0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldE1pdGVyTGltaXQoKQ0KLXsNCi0gICAgbV9wQ3VyU3RhdGVzLT5tX0dyYXBoU3RhdGUuR2V0TW9kaWZ5KCktPm1fTWl0ZXJMaW1pdCA9IEdldE51bWJlcigwKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9NYXJrUGxhY2UoKQ0KLXsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9FbmRQYXRoKCkNCi17DQotICAgIGlmIChtX09wdGlvbnMubV9iVGV4dE9ubHkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBBZGRQYXRoT2JqZWN0KDAsIEZBTFNFKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TYXZlR3JhcGhTdGF0ZSgpDQotew0KLSAgICBDUERGX0FsbFN0YXRlcyogcFN0YXRlcyA9IEZYX05FVyBDUERGX0FsbFN0YXRlczsNCi0gICAgcFN0YXRlcy0+Q29weSgqbV9wQ3VyU3RhdGVzKTsNCi0gICAgbV9TdGF0ZVN0YWNrLkFkZChwU3RhdGVzKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9SZXN0b3JlR3JhcGhTdGF0ZSgpDQotew0KLSAgICBpbnQgc2l6ZSA9IG1fU3RhdGVTdGFjay5HZXRTaXplKCk7DQotICAgIGlmIChzaXplID09IDApIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDUERGX0FsbFN0YXRlcyogcFN0YXRlcyA9IChDUERGX0FsbFN0YXRlcyopbV9TdGF0ZVN0YWNrLkdldEF0KHNpemUgLSAxKTsNCi0gICAgbV9wQ3VyU3RhdGVzLT5Db3B5KCpwU3RhdGVzKTsNCi0gICAgZGVsZXRlIHBTdGF0ZXM7DQotICAgIG1fU3RhdGVTdGFjay5SZW1vdmVBdChzaXplIC0gMSk7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfUmVjdGFuZ2xlKCkNCi17DQotICAgIGlmIChtX09wdGlvbnMubV9iVGV4dE9ubHkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9GTE9BVCB4ID0gR2V0TnVtYmVyKDMpLCB5ID0gR2V0TnVtYmVyKDIpOw0KLSAgICBGWF9GTE9BVCB3ID0gR2V0TnVtYmVyKDEpLCBoID0gR2V0TnVtYmVyKDApOw0KLSAgICBBZGRQYXRoUmVjdCh4LCB5LCB3LCBoKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkFkZFBhdGhSZWN0KEZYX0ZMT0FUIHgsIEZYX0ZMT0FUIHksIEZYX0ZMT0FUIHcsIEZYX0ZMT0FUIGgpDQotew0KLSAgICBBZGRQYXRoUG9pbnQoeCwgeSwgRlhQVF9NT1ZFVE8pOw0KLSAgICBBZGRQYXRoUG9pbnQoeCArIHcsIHksIEZYUFRfTElORVRPKTsNCi0gICAgQWRkUGF0aFBvaW50KHggKyB3LCB5ICsgaCwgRlhQVF9MSU5FVE8pOw0KLSAgICBBZGRQYXRoUG9pbnQoeCwgeSArIGgsIEZYUFRfTElORVRPKTsNCi0gICAgQWRkUGF0aFBvaW50KHgsIHksIEZYUFRfTElORVRPIHwgRlhQVF9DTE9TRUZJR1VSRSk7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0UkdCQ29sb3JfRmlsbCgpDQotew0KLSAgICBSRVFVSVJFX1BBUkFNUygzKTsNCi0gICAgRlhfRkxPQVQgdmFsdWVzWzNdOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkgKyspIHsNCi0gICAgICAgIHZhbHVlc1tpXSA9IEdldE51bWJlcigyIC0gaSk7DQotICAgIH0NCi0gICAgQ1BERl9Db2xvclNwYWNlKiBwQ1MgPSBDUERGX0NvbG9yU3BhY2U6OkdldFN0b2NrQ1MoUERGQ1NfREVWSUNFUkdCKTsNCi0gICAgbV9wQ3VyU3RhdGVzLT5tX0NvbG9yU3RhdGUuU2V0RmlsbENvbG9yKHBDUywgdmFsdWVzLCAzKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRSR0JDb2xvcl9TdHJva2UoKQ0KLXsNCi0gICAgUkVRVUlSRV9QQVJBTVMoMyk7DQotICAgIEZYX0ZMT0FUIHZhbHVlc1szXTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpICsrKSB7DQotICAgICAgICB2YWx1ZXNbaV0gPSBHZXROdW1iZXIoMiAtIGkpOw0KLSAgICB9DQotICAgIENQREZfQ29sb3JTcGFjZSogcENTID0gQ1BERl9Db2xvclNwYWNlOjpHZXRTdG9ja0NTKFBERkNTX0RFVklDRVJHQik7DQotICAgIG1fcEN1clN0YXRlcy0+bV9Db2xvclN0YXRlLlNldFN0cm9rZUNvbG9yKHBDUywgdmFsdWVzLCAzKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRSZW5kZXJJbnRlbnQoKQ0KLXsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9DbG9zZVN0cm9rZVBhdGgoKQ0KLXsNCi0gICAgaWYgKG1fT3B0aW9ucy5tX2JUZXh0T25seSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEhhbmRsZV9DbG9zZVBhdGgoKTsNCi0gICAgQWRkUGF0aE9iamVjdCgwLCBUUlVFKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TdHJva2VQYXRoKCkNCi17DQotICAgIGlmIChtX09wdGlvbnMubV9iVGV4dE9ubHkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBBZGRQYXRoT2JqZWN0KDAsIFRSVUUpOw0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldENvbG9yX0ZpbGwoKQ0KLXsNCi0gICAgaWYgKG1fT3B0aW9ucy5tX2JUZXh0T25seSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX0ZMT0FUIHZhbHVlc1s0XTsNCi0gICAgaW50IG5hcmdzID0gbV9QYXJhbUNvdW50Ow0KLSAgICBpZiAobmFyZ3MgPiA0KSB7DQotICAgICAgICBuYXJncyA9IDQ7DQotICAgIH0NCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYXJnczsgaSArKykgew0KLSAgICAgICAgdmFsdWVzW2ldID0gR2V0TnVtYmVyKG5hcmdzIC0gaSAtIDEpOw0KLSAgICB9DQotICAgIG1fcEN1clN0YXRlcy0+bV9Db2xvclN0YXRlLlNldEZpbGxDb2xvcihOVUxMLCB2YWx1ZXMsIG5hcmdzKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRDb2xvcl9TdHJva2UoKQ0KLXsNCi0gICAgaWYgKG1fT3B0aW9ucy5tX2JUZXh0T25seSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX0ZMT0FUIHZhbHVlc1s0XTsNCi0gICAgaW50IG5hcmdzID0gbV9QYXJhbUNvdW50Ow0KLSAgICBpZiAobmFyZ3MgPiA0KSB7DQotICAgICAgICBuYXJncyA9IDQ7DQotICAgIH0NCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYXJnczsgaSArKykgew0KLSAgICAgICAgdmFsdWVzW2ldID0gR2V0TnVtYmVyKG5hcmdzIC0gaSAtIDEpOw0KLSAgICB9DQotICAgIG1fcEN1clN0YXRlcy0+bV9Db2xvclN0YXRlLlNldFN0cm9rZUNvbG9yKE5VTEwsIHZhbHVlcywgbmFyZ3MpOw0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldENvbG9yUFNfRmlsbCgpDQotew0KLSAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QqIHBMYXN0UGFyYW0gPSBHZXRPYmplY3QoMCk7DQotICAgIGlmIChwTGFzdFBhcmFtID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpbnQgbmFyZ3MgPSBtX1BhcmFtQ291bnQ7DQotICAgIGludCBudmFsdWVzID0gbmFyZ3M7DQotICAgIGlmIChwTGFzdFBhcmFtLT5HZXRUeXBlKCkgPT0gUERGT0JKX05BTUUpIHsNCi0gICAgICAgIG52YWx1ZXMgLS07DQotICAgIH0NCi0gICAgRlhfRkxPQVQqIHZhbHVlcyA9IE5VTEw7DQotICAgIGlmIChudmFsdWVzKSB7DQotICAgICAgICB2YWx1ZXMgPSBGWF9BbGxvYyhGWF9GTE9BVCwgbnZhbHVlcyk7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG52YWx1ZXM7IGkgKyspIHsNCi0gICAgICAgICAgICB2YWx1ZXNbaV0gPSBHZXROdW1iZXIobmFyZ3MgLSBpIC0gMSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKG52YWx1ZXMgIT0gbmFyZ3MpIHsNCi0gICAgICAgIENQREZfUGF0dGVybiogcFBhdHRlcm4gPSBGaW5kUGF0dGVybihHZXRTdHJpbmcoMCksIEZBTFNFKTsNCi0gICAgICAgIGlmIChwUGF0dGVybikgew0KLSAgICAgICAgICAgIG1fcEN1clN0YXRlcy0+bV9Db2xvclN0YXRlLlNldEZpbGxQYXR0ZXJuKHBQYXR0ZXJuLCB2YWx1ZXMsIG52YWx1ZXMpOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wQ3VyU3RhdGVzLT5tX0NvbG9yU3RhdGUuU2V0RmlsbENvbG9yKE5VTEwsIHZhbHVlcywgbnZhbHVlcyk7DQotICAgIH0NCi0gICAgaWYgKHZhbHVlcykgew0KLSAgICAgICAgRlhfRnJlZSh2YWx1ZXMpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0Q29sb3JQU19TdHJva2UoKQ0KLXsNCi0gICAgaWYgKG1fT3B0aW9ucy5tX2JUZXh0T25seSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfT2JqZWN0KiBwTGFzdFBhcmFtID0gR2V0T2JqZWN0KDApOw0KLSAgICBpZiAocExhc3RQYXJhbSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaW50IG5hcmdzID0gbV9QYXJhbUNvdW50Ow0KLSAgICBpbnQgbnZhbHVlcyA9IG5hcmdzOw0KLSAgICBpZiAocExhc3RQYXJhbS0+R2V0VHlwZSgpID09IFBERk9CSl9OQU1FKSB7DQotICAgICAgICBudmFsdWVzIC0tOw0KLSAgICB9DQotICAgIEZYX0ZMT0FUKiB2YWx1ZXMgPSBOVUxMOw0KLSAgICBpZiAobnZhbHVlcykgew0KLSAgICAgICAgdmFsdWVzID0gRlhfQWxsb2MoRlhfRkxPQVQsIG52YWx1ZXMpOw0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudmFsdWVzOyBpICsrKSB7DQotICAgICAgICAgICAgdmFsdWVzW2ldID0gR2V0TnVtYmVyKG5hcmdzIC0gaSAtIDEpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChudmFsdWVzICE9IG5hcmdzKSB7DQotICAgICAgICBDUERGX1BhdHRlcm4qIHBQYXR0ZXJuID0gRmluZFBhdHRlcm4oR2V0U3RyaW5nKDApLCBGQUxTRSk7DQotICAgICAgICBpZiAocFBhdHRlcm4pIHsNCi0gICAgICAgICAgICBtX3BDdXJTdGF0ZXMtPm1fQ29sb3JTdGF0ZS5TZXRTdHJva2VQYXR0ZXJuKHBQYXR0ZXJuLCB2YWx1ZXMsIG52YWx1ZXMpOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wQ3VyU3RhdGVzLT5tX0NvbG9yU3RhdGUuU2V0U3Ryb2tlQ29sb3IoTlVMTCwgdmFsdWVzLCBudmFsdWVzKTsNCi0gICAgfQ0KLSAgICBpZiAodmFsdWVzKSB7DQotICAgICAgICBGWF9GcmVlKHZhbHVlcyk7DQotICAgIH0NCi19DQotQ0ZYX0Zsb2F0UmVjdCBfR2V0U2hhZGluZ0JCb3goQ1BERl9TdHJlYW0qIHBTdHJlYW0sIGludCB0eXBlLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfRnVuY3Rpb24qKiBwRnVuY3MsIGludCBuRnVuY3MsIENQREZfQ29sb3JTcGFjZSogcENTKTsNCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NoYWRlRmlsbCgpDQotew0KLSAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9QYXR0ZXJuKiBwUGF0dGVybiA9IEZpbmRQYXR0ZXJuKEdldFN0cmluZygwKSwgVFJVRSk7DQotICAgIGlmIChwUGF0dGVybiA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKHBQYXR0ZXJuLT5tX1BhdHRlcm5UeXBlICE9IFBBVFRFUk5fU0hBRElORykgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfU2hhZGluZ1BhdHRlcm4qIHBTaGFkaW5nID0gKENQREZfU2hhZGluZ1BhdHRlcm4qKXBQYXR0ZXJuOw0KLSAgICBpZiAoIXBTaGFkaW5nLT5tX2JTaGFkaW5nT2JqKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKCFwU2hhZGluZy0+TG9hZCgpKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9TaGFkaW5nT2JqZWN0KiBwT2JqID0gRlhfTkVXIENQREZfU2hhZGluZ09iamVjdDsNCi0gICAgcE9iai0+bV9wU2hhZGluZyA9IHBTaGFkaW5nOw0KLSAgICBTZXRHcmFwaGljU3RhdGVzKHBPYmosIEZBTFNFLCBGQUxTRSwgRkFMU0UpOw0KLSAgICBwT2JqLT5tX01hdHJpeCA9IG1fcEN1clN0YXRlcy0+bV9DVE07DQotICAgIHBPYmotPm1fTWF0cml4LkNvbmNhdChtX210Q29udGVudFRvVXNlcik7DQotICAgIENGWF9GbG9hdFJlY3QgYmJveDsNCi0gICAgaWYgKCFwT2JqLT5tX0NsaXBQYXRoLklzTnVsbCgpKSB7DQotICAgICAgICBiYm94ID0gcE9iai0+bV9DbGlwUGF0aC5HZXRDbGlwQm94KCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBiYm94ID0gbV9CQm94Ow0KLSAgICB9DQotICAgIGlmIChwU2hhZGluZy0+bV9TaGFkaW5nVHlwZSA+PSA0KSB7DQotICAgICAgICBiYm94LkludGVyc2VjdChfR2V0U2hhZGluZ0JCb3goKENQREZfU3RyZWFtKilwU2hhZGluZy0+bV9wU2hhZGluZ09iaiwgcFNoYWRpbmctPm1fU2hhZGluZ1R5cGUsICZwT2JqLT5tX01hdHJpeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU2hhZGluZy0+bV9wRnVuY3Rpb25zLCBwU2hhZGluZy0+bV9uRnVuY3MsIHBTaGFkaW5nLT5tX3BDUykpOw0KLSAgICB9DQotICAgIHBPYmotPm1fTGVmdCA9IGJib3gubGVmdDsNCi0gICAgcE9iai0+bV9SaWdodCA9IGJib3gucmlnaHQ7DQotICAgIHBPYmotPm1fVG9wID0gYmJveC50b3A7DQotICAgIHBPYmotPm1fQm90dG9tID0gYmJveC5ib3R0b207DQotICAgIG1fcE9iamVjdExpc3QtPm1fT2JqZWN0TGlzdC5BZGRUYWlsKHBPYmopOw0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldENoYXJTcGFjZSgpDQotew0KLSAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dFN0YXRlLkdldE1vZGlmeSgpLT5tX0NoYXJTcGFjZSA9IEdldE51bWJlcigwKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9Nb3ZlVGV4dFBvaW50KCkNCi17DQotICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0TGluZVggKz0gR2V0TnVtYmVyKDEpOw0KLSAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dExpbmVZICs9IEdldE51bWJlcigwKTsNCi0gICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRYID0gbV9wQ3VyU3RhdGVzLT5tX1RleHRMaW5lWDsNCi0gICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRZID0gbV9wQ3VyU3RhdGVzLT5tX1RleHRMaW5lWTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9Nb3ZlVGV4dFBvaW50X1NldExlYWRpbmcoKQ0KLXsNCi0gICAgSGFuZGxlX01vdmVUZXh0UG9pbnQoKTsNCi0gICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRMZWFkaW5nID0gLUdldE51bWJlcigwKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRGb250KCkNCi17DQotICAgIEZYX0ZMT0FUIGZzID0gR2V0TnVtYmVyKDApOw0KLSAgICBpZiAoZnMgPT0gMCkgew0KLSAgICAgICAgZnMgPSBtX0RlZkZvbnRTaXplOw0KLSAgICB9DQotICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0U3RhdGUuR2V0TW9kaWZ5KCktPm1fRm9udFNpemUgPSBmczsNCi0gICAgQ1BERl9Gb250KiBwRm9udCA9IEZpbmRGb250KEdldFN0cmluZygxKSk7DQotICAgIGlmIChwRm9udCkgew0KLSAgICAgICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRTdGF0ZS5TZXRGb250KHBGb250KTsNCi0gICAgfQ0KLX0NCi1DUERGX09iamVjdCogQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpGaW5kUmVzb3VyY2VPYmooRlhfQlNUUiB0eXBlLCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgbmFtZSkNCi17DQotICAgIGlmIChtX3BSZXNvdXJjZXMgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKG1fcFJlc291cmNlcyA9PSBtX3BQYWdlUmVzb3VyY2VzKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBMaXN0ID0gbV9wUmVzb3VyY2VzLT5HZXREaWN0KHR5cGUpOw0KLSAgICAgICAgaWYgKHBMaXN0ID09IE5VTEwpIHsNCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIENQREZfT2JqZWN0KiBwUmVzID0gcExpc3QtPkdldEVsZW1lbnRWYWx1ZShuYW1lKTsNCi0gICAgICAgIHJldHVybiBwUmVzOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcExpc3QgPSBtX3BSZXNvdXJjZXMtPkdldERpY3QodHlwZSk7DQotICAgIGlmIChwTGlzdCA9PSBOVUxMKSB7DQotICAgICAgICBpZiAobV9wUGFnZVJlc291cmNlcyA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBMaXN0ID0gbV9wUGFnZVJlc291cmNlcy0+R2V0RGljdCh0eXBlKTsNCi0gICAgICAgIGlmIChwTGlzdCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBDUERGX09iamVjdCogcFJlcyA9IHBMaXN0LT5HZXRFbGVtZW50VmFsdWUobmFtZSk7DQotICAgICAgICByZXR1cm4gcFJlczsNCi0gICAgfQ0KLSAgICBDUERGX09iamVjdCogcFJlcyA9IHBMaXN0LT5HZXRFbGVtZW50VmFsdWUobmFtZSk7DQotICAgIHJldHVybiBwUmVzOw0KLX0NCi1DUERGX0ZvbnQqIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6RmluZEZvbnQoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUpDQotew0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBGb250RGljdCA9IChDUERGX0RpY3Rpb25hcnkqKUZpbmRSZXNvdXJjZU9iaihGWF9CU1RSQygiRm9udCIpLCBuYW1lKTsNCi0gICAgaWYgKHBGb250RGljdCA9PSBOVUxMIHx8IHBGb250RGljdC0+R2V0VHlwZSgpICE9IFBERk9CSl9ESUNUSU9OQVJZKSB7DQotICAgICAgICBtX2JSZXNvdXJjZU1pc3NpbmcgPSBUUlVFOw0KLSAgICAgICAgcmV0dXJuIENQREZfRm9udDo6R2V0U3RvY2tGb250KG1fcERvY3VtZW50LCBGWF9CU1RSQygiSGVsdmV0aWNhIikpOw0KLSAgICB9DQotICAgIENQREZfRm9udCogcEZvbnQgPSBtX3BEb2N1bWVudC0+TG9hZEZvbnQocEZvbnREaWN0KTsNCi0gICAgaWYgKHBGb250ICYmIHBGb250LT5HZXRUeXBlM0ZvbnQoKSkgew0KLSAgICAgICAgcEZvbnQtPkdldFR5cGUzRm9udCgpLT5TZXRQYWdlUmVzb3VyY2VzKG1fcFJlc291cmNlcyk7DQotICAgICAgICBwRm9udC0+R2V0VHlwZTNGb250KCktPkNoZWNrVHlwZTNGb250TWV0cmljcygpOw0KLSAgICB9DQotICAgIHJldHVybiBwRm9udDsNCi19DQotQ1BERl9Db2xvclNwYWNlKiBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkZpbmRDb2xvclNwYWNlKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lKQ0KLXsNCi0gICAgaWYgKG5hbWUgPT0gRlhfQlNUUkMoIlBhdHRlcm4iKSkgew0KLSAgICAgICAgcmV0dXJuIENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19QQVRURVJOKTsNCi0gICAgfQ0KLSAgICBpZiAobmFtZSA9PSBGWF9CU1RSQygiRGV2aWNlR3JheSIpIHx8IG5hbWUgPT0gRlhfQlNUUkMoIkRldmljZUNNWUsiKSB8fCBuYW1lID09IEZYX0JTVFJDKCJEZXZpY2VSR0IiKSkgew0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgZGVmbmFtZSA9ICJEZWZhdWx0IjsNCi0gICAgICAgIGRlZm5hbWUgKz0gbmFtZS5NaWQoNyk7DQotICAgICAgICBDUERGX09iamVjdCogcERlZk9iaiA9IEZpbmRSZXNvdXJjZU9iaihGWF9CU1RSQygiQ29sb3JTcGFjZSIpLCBkZWZuYW1lKTsNCi0gICAgICAgIGlmIChwRGVmT2JqID09IE5VTEwpIHsNCi0gICAgICAgICAgICBpZiAobmFtZSA9PSBGWF9CU1RSQygiRGV2aWNlR3JheSIpKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBDUERGX0NvbG9yU3BhY2U6OkdldFN0b2NrQ1MoUERGQ1NfREVWSUNFR1JBWSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChuYW1lID09IEZYX0JTVFJDKCJEZXZpY2VSR0IiKSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gQ1BERl9Db2xvclNwYWNlOjpHZXRTdG9ja0NTKFBERkNTX0RFVklDRVJHQik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybiBDUERGX0NvbG9yU3BhY2U6OkdldFN0b2NrQ1MoUERGQ1NfREVWSUNFQ01ZSyk7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gbV9wRG9jdW1lbnQtPkxvYWRDb2xvclNwYWNlKHBEZWZPYmopOw0KLSAgICB9DQotICAgIENQREZfT2JqZWN0KiBwQ1NPYmogPSBGaW5kUmVzb3VyY2VPYmooRlhfQlNUUkMoIkNvbG9yU3BhY2UiKSwgbmFtZSk7DQotICAgIGlmIChwQ1NPYmogPT0gTlVMTCkgew0KLSAgICAgICAgbV9iUmVzb3VyY2VNaXNzaW5nID0gVFJVRTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiBtX3BEb2N1bWVudC0+TG9hZENvbG9yU3BhY2UocENTT2JqKTsNCi19DQotQ1BERl9QYXR0ZXJuKiBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkZpbmRQYXR0ZXJuKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lLCBGWF9CT09MIGJTaGFkaW5nKQ0KLXsNCi0gICAgQ1BERl9PYmplY3QqIHBQYXR0ZXJuID0gRmluZFJlc291cmNlT2JqKGJTaGFkaW5nID8gRlhfQlNUUkMoIlNoYWRpbmciKSA6IEZYX0JTVFJDKCJQYXR0ZXJuIiksIG5hbWUpOw0KLSAgICBpZiAocFBhdHRlcm4gPT0gTlVMTCB8fCAocFBhdHRlcm4tPkdldFR5cGUoKSAhPSBQREZPQkpfRElDVElPTkFSWSAmJg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFBhdHRlcm4tPkdldFR5cGUoKSAhPSBQREZPQkpfU1RSRUFNKSkgew0KLSAgICAgICAgbV9iUmVzb3VyY2VNaXNzaW5nID0gVFJVRTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiBtX3BEb2N1bWVudC0+TG9hZFBhdHRlcm4ocFBhdHRlcm4sIGJTaGFkaW5nLCAmbV9wQ3VyU3RhdGVzLT5tX1BhcmVudE1hdHJpeCk7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpDb252ZXJ0VGV4dFNwYWNlKEZYX0ZMT0FUJiB4LCBGWF9GTE9BVCYgeSkNCi17DQotICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0TWF0cml4LlRyYW5zZm9ybSh4LCB5LCB4LCB5KTsNCi0gICAgQ29udmVydFVzZXJTcGFjZSh4LCB5KTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkNvbnZlcnRVc2VyU3BhY2UoRlhfRkxPQVQmIHgsIEZYX0ZMT0FUJiB5KQ0KLXsNCi0gICAgbV9wQ3VyU3RhdGVzLT5tX0NUTS5UcmFuc2Zvcm0oeCwgeSwgeCwgeSk7DQotICAgIG1fbXRDb250ZW50VG9Vc2VyLlRyYW5zZm9ybSh4LCB5LCB4LCB5KTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkFkZFRleHRPYmplY3QoQ0ZYX0J5dGVTdHJpbmcqIHBTdHJzLCBGWF9GTE9BVCBmSW5pdEtlcm5pbmcsIEZYX0ZMT0FUKiBwS2VybmluZywgaW50IG5zZWdzKQ0KLXsNCi0gICAgQ1BERl9Gb250KiBwRm9udCA9IG1fcEN1clN0YXRlcy0+bV9UZXh0U3RhdGUuR2V0Rm9udCgpOw0KLSAgICBpZiAocEZvbnQgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChmSW5pdEtlcm5pbmcgIT0gMCkgew0KLSAgICAgICAgaWYgKCFwRm9udC0+SXNWZXJ0V3JpdGluZygpKSB7DQotICAgICAgICAgICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRYIC09IEZYU1lTX011bChmSW5pdEtlcm5pbmcsIG1fcEN1clN0YXRlcy0+bV9UZXh0U3RhdGUuR2V0Rm9udFNpemUoKSkgLyAxMDAwOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dFkgLT0gRlhTWVNfTXVsKGZJbml0S2VybmluZywgbV9wQ3VyU3RhdGVzLT5tX1RleHRTdGF0ZS5HZXRGb250U2l6ZSgpKSAvIDEwMDA7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKG5zZWdzID09IDApIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpbnQgdGV4dG1vZGU7DQotICAgIGlmIChwRm9udC0+R2V0Rm9udFR5cGUoKSA9PSBQREZGT05UX1RZUEUzKSB7DQotICAgICAgICB0ZXh0bW9kZSA9IDA7DQotICAgIH0gZWxzZSB7DQotICAgICAgICB0ZXh0bW9kZSA9IG1fcEN1clN0YXRlcy0+bV9UZXh0U3RhdGUuR2V0T2JqZWN0KCktPm1fVGV4dE1vZGU7DQotICAgIH0NCi0gICAgQ1BERl9UZXh0T2JqZWN0KiBwVGV4dCA9IEZYX05FVyBDUERGX1RleHRPYmplY3Q7DQotICAgIG1fcExhc3RUZXh0T2JqZWN0ID0gcFRleHQ7DQotICAgIFNldEdyYXBoaWNTdGF0ZXMocFRleHQsIFRSVUUsIFRSVUUsIFRSVUUpOw0KLSAgICBpZiAodGV4dG1vZGUgJiYgdGV4dG1vZGUgIT0gMyAmJiB0ZXh0bW9kZSAhPSA0ICYmIHRleHRtb2RlICE9IDcpIHsNCi0gICAgICAgIEZYX0ZMT0FUKiBwQ1RNID0gcFRleHQtPm1fVGV4dFN0YXRlLkdldE1vZGlmeSgpLT5tX0NUTTsNCi0gICAgICAgIHBDVE1bMF0gPSBtX3BDdXJTdGF0ZXMtPm1fQ1RNLmE7DQotICAgICAgICBwQ1RNWzFdID0gbV9wQ3VyU3RhdGVzLT5tX0NUTS5jOw0KLSAgICAgICAgcENUTVsyXSA9IG1fcEN1clN0YXRlcy0+bV9DVE0uYjsNCi0gICAgICAgIHBDVE1bM10gPSBtX3BDdXJTdGF0ZXMtPm1fQ1RNLmQ7DQotICAgIH0NCi0gICAgcFRleHQtPlNldFNlZ21lbnRzKHBTdHJzLCBwS2VybmluZywgbnNlZ3MpOw0KLSAgICBwVGV4dC0+bV9Qb3NYID0gbV9wQ3VyU3RhdGVzLT5tX1RleHRYOw0KLSAgICBwVGV4dC0+bV9Qb3NZID0gbV9wQ3VyU3RhdGVzLT5tX1RleHRZICsgbV9wQ3VyU3RhdGVzLT5tX1RleHRSaXNlOw0KLSAgICBDb252ZXJ0VGV4dFNwYWNlKHBUZXh0LT5tX1Bvc1gsIHBUZXh0LT5tX1Bvc1kpOw0KLSAgICBGWF9GTE9BVCB4X2FkdmFuY2UsIHlfYWR2YW5jZTsNCi0gICAgcFRleHQtPkNhbGNQb3NpdGlvbkRhdGEoJnhfYWR2YW5jZSwgJnlfYWR2YW5jZSwgbV9wQ3VyU3RhdGVzLT5tX1RleHRIb3J6U2NhbGUsIG1fTGV2ZWwpOw0KLSAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dFggKz0geF9hZHZhbmNlOw0KLSAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dFkgKz0geV9hZHZhbmNlOw0KLSAgICBpZiAodGV4dG1vZGUgPiAzKSB7DQotICAgICAgICBDUERGX1RleHRPYmplY3QqIHBDb3B5ID0gRlhfTkVXIENQREZfVGV4dE9iamVjdDsNCi0gICAgICAgIHBDb3B5LT5Db3B5KHBUZXh0KTsNCi0gICAgICAgIG1fQ2xpcFRleHRMaXN0LkFkZChwQ29weSk7DQotICAgIH0NCi0gICAgbV9wT2JqZWN0TGlzdC0+bV9PYmplY3RMaXN0LkFkZFRhaWwocFRleHQpOw0KLSAgICBpZiAocEtlcm5pbmcgJiYgcEtlcm5pbmdbbnNlZ3MgLSAxXSAhPSAwKSB7DQotICAgICAgICBpZiAoIXBGb250LT5Jc1ZlcnRXcml0aW5nKCkpIHsNCi0gICAgICAgICAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dFggLT0gRlhTWVNfTXVsKHBLZXJuaW5nW25zZWdzIC0gMV0sIG1fcEN1clN0YXRlcy0+bV9UZXh0U3RhdGUuR2V0Rm9udFNpemUoKSkgLyAxMDAwOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dFkgLT0gRlhTWVNfTXVsKHBLZXJuaW5nW25zZWdzIC0gMV0sIG1fcEN1clN0YXRlcy0+bV9UZXh0U3RhdGUuR2V0Rm9udFNpemUoKSkgLyAxMDAwOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2hvd1RleHQoKQ0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgc3RyID0gR2V0U3RyaW5nKDApOw0KLSAgICBpZiAoc3RyLklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEFkZFRleHRPYmplY3QoJnN0ciwgMCwgTlVMTCwgMSk7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2hvd1RleHRfUG9zaXRpb25pbmcoKQ0KLXsNCi0gICAgQ1BERl9BcnJheSogcEFycmF5ID0gR2V0T2JqZWN0KDApLT5HZXRBcnJheSgpOw0KLSAgICBpZiAocEFycmF5ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpbnQgbiA9IHBBcnJheS0+R2V0Q291bnQoKSwgbnNlZ3MgPSAwLCBpOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSArKykgew0KLSAgICAgICAgQ1BERl9PYmplY3QqIHBPYmogPSBwQXJyYXktPkdldEVsZW1lbnRWYWx1ZShpKTsNCi0gICAgICAgIGlmIChwT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUklORykgew0KLSAgICAgICAgICAgIG5zZWdzICsrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChuc2VncyA9PSAwKSB7DQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSArKykgew0KLSAgICAgICAgICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0WCAtPSBGWFNZU19NdWwocEFycmF5LT5HZXROdW1iZXIoaSksIG1fcEN1clN0YXRlcy0+bV9UZXh0U3RhdGUuR2V0Rm9udFNpemUoKSkgLyAxMDAwOw0KLSAgICAgICAgfTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVN0cmluZyogcFN0cnM7DQotICAgIEZYX05FV19WRUNUT1IocFN0cnMsIENGWF9CeXRlU3RyaW5nLCBuc2Vncyk7DQotICAgIEZYX0ZMT0FUKiBwS2VybmluZyA9IEZYX0FsbG9jKEZYX0ZMT0FULCBuc2Vncyk7DQotICAgIGludCBpU2VnbWVudCA9IDA7DQotICAgIEZYX0ZMT0FUIGZJbml0S2VybmluZyA9IDA7DQotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpICsrKSB7DQotICAgICAgICBDUERGX09iamVjdCogcE9iaiA9IHBBcnJheS0+R2V0RWxlbWVudFZhbHVlKGkpOw0KLSAgICAgICAgaWYgKHBPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSSU5HKSB7DQotICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc3RyID0gcE9iai0+R2V0U3RyaW5nKCk7DQotICAgICAgICAgICAgaWYgKHN0ci5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHBTdHJzW2lTZWdtZW50XSA9IHN0cjsNCi0gICAgICAgICAgICBwS2VybmluZ1tpU2VnbWVudCArK10gPSAwOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAoaVNlZ21lbnQgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBmSW5pdEtlcm5pbmcgKz0gcE9iai0+R2V0TnVtYmVyKCk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgcEtlcm5pbmdbaVNlZ21lbnQgLSAxXSArPSBwT2JqLT5HZXROdW1iZXIoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgQWRkVGV4dE9iamVjdChwU3RycywgZkluaXRLZXJuaW5nLCBwS2VybmluZywgaVNlZ21lbnQpOw0KLSAgICBGWF9ERUxFVEVfVkVDVE9SKHBTdHJzLCBDRlhfQnl0ZVN0cmluZywgbnNlZ3MpOw0KLSAgICBGWF9GcmVlKHBLZXJuaW5nKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRUZXh0TGVhZGluZygpDQotew0KLSAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dExlYWRpbmcgPSBHZXROdW1iZXIoMCk7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0VGV4dE1hdHJpeCgpDQotew0KLSAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dE1hdHJpeC5TZXQoR2V0TnVtYmVyMTYoNSksIEdldE51bWJlcjE2KDQpLCBHZXROdW1iZXIxNigzKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldE51bWJlcjE2KDIpLCBHZXROdW1iZXIoMSksIEdldE51bWJlcigwKSk7DQotICAgIE9uQ2hhbmdlVGV4dE1hdHJpeCgpOw0KLSAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dFggPSAwOw0KLSAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dFkgPSAwOw0KLSAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dExpbmVYID0gMDsNCi0gICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRMaW5lWSA9IDA7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpPbkNoYW5nZVRleHRNYXRyaXgoKQ0KLXsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCB0ZXh0X21hdHJpeChtX3BDdXJTdGF0ZXMtPm1fVGV4dEhvcnpTY2FsZSwgMC4wZiwgMC4wZiwgMS4wZiwgMC4wZiwgMC4wZik7DQotICAgIHRleHRfbWF0cml4LkNvbmNhdChtX3BDdXJTdGF0ZXMtPm1fVGV4dE1hdHJpeCk7DQotICAgIHRleHRfbWF0cml4LkNvbmNhdChtX3BDdXJTdGF0ZXMtPm1fQ1RNKTsNCi0gICAgdGV4dF9tYXRyaXguQ29uY2F0KG1fbXRDb250ZW50VG9Vc2VyKTsNCi0gICAgRlhfRkxPQVQqIHBUZXh0TWF0cml4ID0gbV9wQ3VyU3RhdGVzLT5tX1RleHRTdGF0ZS5HZXRNb2RpZnkoKS0+bV9NYXRyaXg7DQotICAgIHBUZXh0TWF0cml4WzBdID0gdGV4dF9tYXRyaXguYTsNCi0gICAgcFRleHRNYXRyaXhbMV0gPSB0ZXh0X21hdHJpeC5jOw0KLSAgICBwVGV4dE1hdHJpeFsyXSA9IHRleHRfbWF0cml4LmI7DQotICAgIHBUZXh0TWF0cml4WzNdID0gdGV4dF9tYXRyaXguZDsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRUZXh0UmVuZGVyTW9kZSgpDQotew0KLSAgICBpbnQgbW9kZSA9IEdldEludGVnZXIoMCk7DQotICAgIGlmIChtb2RlIDwgMCB8fCBtb2RlID4gNykgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0U3RhdGUuR2V0TW9kaWZ5KCktPm1fVGV4dE1vZGUgPSBtb2RlOw0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldFRleHRSaXNlKCkNCi17DQotICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0UmlzZSA9IEdldE51bWJlcigwKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRXb3JkU3BhY2UoKQ0KLXsNCi0gICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRTdGF0ZS5HZXRNb2RpZnkoKS0+bV9Xb3JkU3BhY2UgPSBHZXROdW1iZXIoMCk7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0SG9yelNjYWxlKCkNCi17DQotICAgIGlmIChtX1BhcmFtQ291bnQgIT0gMSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0SG9yelNjYWxlID0gR2V0TnVtYmVyKDApIC8gMTAwOw0KLSAgICBPbkNoYW5nZVRleHRNYXRyaXgoKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9Nb3ZlVG9OZXh0TGluZSgpDQotew0KLSAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dExpbmVZIC09IG1fcEN1clN0YXRlcy0+bV9UZXh0TGVhZGluZzsNCi0gICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRYID0gbV9wQ3VyU3RhdGVzLT5tX1RleHRMaW5lWDsNCi0gICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRZID0gbV9wQ3VyU3RhdGVzLT5tX1RleHRMaW5lWTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9DdXJ2ZVRvXzIzKCkNCi17DQotICAgIGlmIChtX09wdGlvbnMubV9iVGV4dE9ubHkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBBZGRQYXRoUG9pbnQobV9QYXRoQ3VycmVudFgsIG1fUGF0aEN1cnJlbnRZLCBGWFBUX0JFWklFUlRPKTsNCi0gICAgQWRkUGF0aFBvaW50KEdldE51bWJlcigzKSwgR2V0TnVtYmVyKDIpLCBGWFBUX0JFWklFUlRPKTsNCi0gICAgQWRkUGF0aFBvaW50KEdldE51bWJlcigxKSwgR2V0TnVtYmVyKDApLCBGWFBUX0JFWklFUlRPKTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRMaW5lV2lkdGgoKQ0KLXsNCi0gICAgRlhfRkxPQVQgd2lkdGggPSBHZXROdW1iZXIoMCk7DQotICAgIG1fcEN1clN0YXRlcy0+bV9HcmFwaFN0YXRlLkdldE1vZGlmeSgpLT5tX0xpbmVXaWR0aCA9IHdpZHRoOw0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0NsaXAoKQ0KLXsNCi0gICAgbV9QYXRoQ2xpcFR5cGUgPSBGWEZJTExfV0lORElORzsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9FT0NsaXAoKQ0KLXsNCi0gICAgbV9QYXRoQ2xpcFR5cGUgPSBGWEZJTExfQUxURVJOQVRFOw0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0N1cnZlVG9fMTMoKQ0KLXsNCi0gICAgaWYgKG1fT3B0aW9ucy5tX2JUZXh0T25seSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEFkZFBhdGhQb2ludChHZXROdW1iZXIoMyksIEdldE51bWJlcigyKSwgRlhQVF9CRVpJRVJUTyk7DQotICAgIEFkZFBhdGhQb2ludChHZXROdW1iZXIoMSksIEdldE51bWJlcigwKSwgRlhQVF9CRVpJRVJUTyk7DQotICAgIEFkZFBhdGhQb2ludChHZXROdW1iZXIoMSksIEdldE51bWJlcigwKSwgRlhQVF9CRVpJRVJUTyk7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfTmV4dExpbmVTaG93VGV4dCgpDQotew0KLSAgICBIYW5kbGVfTW92ZVRvTmV4dExpbmUoKTsNCi0gICAgSGFuZGxlX1Nob3dUZXh0KCk7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfTmV4dExpbmVTaG93VGV4dF9TcGFjZSgpDQotew0KLSAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dFN0YXRlLkdldE1vZGlmeSgpLT5tX1dvcmRTcGFjZSA9IEdldE51bWJlcigyKTsNCi0gICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRTdGF0ZS5HZXRNb2RpZnkoKS0+bV9DaGFyU3BhY2UgPSBHZXROdW1iZXIoMSk7DQotICAgIEhhbmRsZV9OZXh0TGluZVNob3dUZXh0KCk7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfSW52YWxpZCgpDQotew0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6QWRkUGF0aFBvaW50KEZYX0ZMT0FUIHgsIEZYX0ZMT0FUIHksIGludCBmbGFnKQ0KLXsNCi0gICAgbV9QYXRoQ3VycmVudFggPSB4Ow0KLSAgICBtX1BhdGhDdXJyZW50WSA9IHk7DQotICAgIGlmIChmbGFnID09IEZYUFRfTU9WRVRPKSB7DQotICAgICAgICBtX1BhdGhTdGFydFggPSB4Ow0KLSAgICAgICAgbV9QYXRoU3RhcnRZID0geTsNCi0gICAgICAgIGlmIChtX1BhdGhQb2ludENvdW50ICYmIG1fcFBhdGhQb2ludHNbbV9QYXRoUG9pbnRDb3VudCAtIDFdLm1fRmxhZyA9PSBGWFBUX01PVkVUTykgew0KLSAgICAgICAgICAgIG1fcFBhdGhQb2ludHNbbV9QYXRoUG9pbnRDb3VudCAtIDFdLm1fUG9pbnRYID0geDsNCi0gICAgICAgICAgICBtX3BQYXRoUG9pbnRzW21fUGF0aFBvaW50Q291bnQgLSAxXS5tX1BvaW50WSA9IHk7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2UgaWYgKG1fUGF0aFBvaW50Q291bnQgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fUGF0aFBvaW50Q291bnQgKys7DQotICAgIGlmIChtX1BhdGhQb2ludENvdW50ID4gbV9QYXRoQWxsb2NTaXplKSB7DQotICAgICAgICBpbnQgbmV3c2l6ZSA9IG1fUGF0aFBvaW50Q291bnQgKyAyNTY7DQotICAgICAgICBGWF9QQVRIUE9JTlQqIHBOZXdQb2ludHMgPSBGWF9BbGxvYyhGWF9QQVRIUE9JTlQsIG5ld3NpemUpOw0KLSAgICAgICAgaWYgKG1fUGF0aEFsbG9jU2l6ZSkgew0KLSAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKHBOZXdQb2ludHMsIG1fcFBhdGhQb2ludHMsIG1fUGF0aEFsbG9jU2l6ZSAqIHNpemVvZihGWF9QQVRIUE9JTlQpKTsNCi0gICAgICAgICAgICBGWF9GcmVlKG1fcFBhdGhQb2ludHMpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wUGF0aFBvaW50cyA9IHBOZXdQb2ludHM7DQotICAgICAgICBtX1BhdGhBbGxvY1NpemUgPSBuZXdzaXplOw0KLSAgICB9DQotICAgIG1fcFBhdGhQb2ludHNbbV9QYXRoUG9pbnRDb3VudCAtIDFdLm1fRmxhZyA9IGZsYWc7DQotICAgIG1fcFBhdGhQb2ludHNbbV9QYXRoUG9pbnRDb3VudCAtIDFdLm1fUG9pbnRYID0geDsNCi0gICAgbV9wUGF0aFBvaW50c1ttX1BhdGhQb2ludENvdW50IC0gMV0ubV9Qb2ludFkgPSB5Ow0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6QWRkUGF0aE9iamVjdChpbnQgRmlsbFR5cGUsIEZYX0JPT0wgYlN0cm9rZSkNCi17DQotICAgIGludCBQYXRoUG9pbnRDb3VudCA9IG1fUGF0aFBvaW50Q291bnQsIFBhdGhDbGlwVHlwZSA9IG1fUGF0aENsaXBUeXBlOw0KLSAgICBtX1BhdGhQb2ludENvdW50ID0gMDsNCi0gICAgbV9QYXRoQ2xpcFR5cGUgPSAwOw0KLSAgICBpZiAoUGF0aFBvaW50Q291bnQgPD0gMSkgew0KLSAgICAgICAgaWYgKFBhdGhQb2ludENvdW50ICYmIFBhdGhDbGlwVHlwZSkgew0KLSAgICAgICAgICAgIENQREZfUGF0aCBwYXRoOw0KLSAgICAgICAgICAgIHBhdGguTmV3KCktPkFwcGVuZFJlY3QoMCwgMCwgMCwgMCk7DQotICAgICAgICAgICAgbV9wQ3VyU3RhdGVzLT5tX0NsaXBQYXRoLkFwcGVuZFBhdGgocGF0aCwgRlhGSUxMX1dJTkRJTkcsIFRSVUUpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChQYXRoUG9pbnRDb3VudCAmJiBtX3BQYXRoUG9pbnRzW1BhdGhQb2ludENvdW50IC0gMV0ubV9GbGFnID09IEZYUFRfTU9WRVRPKSB7DQotICAgICAgICBQYXRoUG9pbnRDb3VudCAtLTsNCi0gICAgfQ0KLSAgICBDUERGX1BhdGggUGF0aDsNCi0gICAgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEgPSBQYXRoLk5ldygpOw0KLSAgICBwUGF0aERhdGEtPlNldFBvaW50Q291bnQoUGF0aFBvaW50Q291bnQpOw0KLSAgICBGWFNZU19tZW1jcHkzMihwUGF0aERhdGEtPkdldFBvaW50cygpLCBtX3BQYXRoUG9pbnRzLCBzaXplb2YoRlhfUEFUSFBPSU5UKSAqIFBhdGhQb2ludENvdW50KTsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXggPSBtX3BDdXJTdGF0ZXMtPm1fQ1RNOw0KLSAgICBtYXRyaXguQ29uY2F0KG1fbXRDb250ZW50VG9Vc2VyKTsNCi0gICAgaWYgKGJTdHJva2UgfHwgRmlsbFR5cGUpIHsNCi0gICAgICAgIENQREZfUGF0aE9iamVjdCogcFBhdGhPYmogPSBGWF9ORVcgQ1BERl9QYXRoT2JqZWN0Ow0KLSAgICAgICAgcFBhdGhPYmotPm1fYlN0cm9rZSA9IGJTdHJva2U7DQotICAgICAgICBwUGF0aE9iai0+bV9GaWxsVHlwZSA9IEZpbGxUeXBlOw0KLSAgICAgICAgcFBhdGhPYmotPm1fUGF0aCA9IFBhdGg7DQotICAgICAgICBwUGF0aE9iai0+bV9NYXRyaXggPSBtYXRyaXg7DQotICAgICAgICBTZXRHcmFwaGljU3RhdGVzKHBQYXRoT2JqLCBUUlVFLCBGQUxTRSwgVFJVRSk7DQotICAgICAgICBwUGF0aE9iai0+Q2FsY0JvdW5kaW5nQm94KCk7DQotICAgICAgICBtX3BPYmplY3RMaXN0LT5tX09iamVjdExpc3QuQWRkVGFpbChwUGF0aE9iaik7DQotICAgIH0NCi0gICAgaWYgKFBhdGhDbGlwVHlwZSkgew0KLSAgICAgICAgaWYgKCFtYXRyaXguSXNJZGVudGl0eSgpKSB7DQotICAgICAgICAgICAgUGF0aC5UcmFuc2Zvcm0oJm1hdHJpeCk7DQotICAgICAgICAgICAgbWF0cml4LlNldElkZW50aXR5KCk7DQotICAgICAgICB9DQotICAgICAgICBtX3BDdXJTdGF0ZXMtPm1fQ2xpcFBhdGguQXBwZW5kUGF0aChQYXRoLCBQYXRoQ2xpcFR5cGUsIFRSVUUpOw0KLSAgICB9DQotfQ0KLUNGWF9CeXRlU3RyaW5nIF9GUERGX0J5dGVTdHJpbmdGcm9tSGV4KENGWF9CaW5hcnlCdWYmIHNyY19idWYpDQotew0KLSAgICBDRlhfQnl0ZVRleHRCdWYgYnVmOw0KLSAgICBGWF9CT09MIGJGaXJzdCA9IFRSVUU7DQotICAgIGludCBjb2RlID0gMDsNCi0gICAgRlhfTFBDQllURSBzdHIgPSBzcmNfYnVmLkdldEJ1ZmZlcigpOw0KLSAgICBGWF9EV09SRCBzaXplID0gc3JjX2J1Zi5HZXRTaXplKCk7DQotICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBzaXplOyBpICsrKSB7DQotICAgICAgICBGWF9CWVRFIGNoID0gc3RyW2ldOw0KLSAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsNCi0gICAgICAgICAgICBpZiAoYkZpcnN0KSB7DQotICAgICAgICAgICAgICAgIGNvZGUgPSAoY2ggLSAnMCcpICogMTY7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgY29kZSArPSBjaCAtICcwJzsNCi0gICAgICAgICAgICAgICAgYnVmLkFwcGVuZENoYXIoKGNoYXIpY29kZSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGJGaXJzdCA9ICFiRmlyc3Q7DQotICAgICAgICB9IGVsc2UgaWYgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHsNCi0gICAgICAgICAgICBpZiAoYkZpcnN0KSB7DQotICAgICAgICAgICAgICAgIGNvZGUgPSAoY2ggLSAnQScgKyAxMCkgKiAxNjsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBjb2RlICs9IGNoIC0gJ0EnICsgMTA7DQotICAgICAgICAgICAgICAgIGJ1Zi5BcHBlbmRDaGFyKChjaGFyKWNvZGUpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBiRmlyc3QgPSAhYkZpcnN0Ow0KLSAgICAgICAgfSBlbHNlIGlmIChjaCA+PSAnYScgJiYgY2ggPD0gJ2YnKSB7DQotICAgICAgICAgICAgaWYgKGJGaXJzdCkgew0KLSAgICAgICAgICAgICAgICBjb2RlID0gKGNoIC0gJ2EnICsgMTApICogMTY7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgY29kZSArPSBjaCAtICdhJyArIDEwOw0KLSAgICAgICAgICAgICAgICBidWYuQXBwZW5kQ2hhcigoY2hhciljb2RlKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgYkZpcnN0ID0gIWJGaXJzdDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoIWJGaXJzdCkgew0KLSAgICAgICAgYnVmLkFwcGVuZENoYXIoKGNoYXIpY29kZSk7DQotICAgIH0NCi0gICAgcmV0dXJuIGJ1Zi5HZXRCeXRlU3RyaW5nKCk7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfbW9kdWxlLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfc2VyaWFsLmgiCisjaW5jbHVkZSAicGFnZWludC5oIgorI2RlZmluZSBSRVFVSVJFX1BBUkFNUyhjb3VudCkgaWYgKG1fUGFyYW1Db3VudCAhPSBjb3VudCkgeyBtX2JBYm9ydCA9IFRSVUU7IHJldHVybjsgfQorQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXIoKQoreworICAgIG1fRGVmRm9udFNpemUgPSAwOworICAgIG1fcEN1clN0YXRlcyA9IE5VTEw7CisgICAgbV9wTGFzdFRleHRPYmplY3QgPSBOVUxMOworICAgIG1fcFBhdGhQb2ludHMgPSBOVUxMOworICAgIG1fUGF0aENsaXBUeXBlID0gMDsKKyAgICBtX1BhdGhQb2ludENvdW50ID0gbV9QYXRoQWxsb2NTaXplID0gMDsKKyAgICBtX1BhdGhDdXJyZW50WCA9IG1fUGF0aEN1cnJlbnRZID0gMC4wZjsKKyAgICBtX2JSZXNvdXJjZU1pc3NpbmcgPSBGQUxTRTsKKyAgICBtX2JDb2xvcmVkID0gRkFMU0U7CisgICAgRlhTWVNfbWVtc2V0MzIobV9UeXBlM0RhdGEsIDAsIHNpemVvZihGWF9GTE9BVCkgKiA2KTsKKyAgICBtX1BhcmFtQ291bnQgPSAwOworICAgIG1fUGFyYW1TdGFydFBvcyA9IDA7CisgICAgbV9iQWJvcnQgPSBGQUxTRTsKKyAgICBtX3BMYXN0SW1hZ2VEaWN0ID0gTlVMTDsKKyAgICBtX3BMYXN0Q2xvbmVJbWFnZURpY3QgPSBOVUxMOworICAgIG1fcExhc3RJbWFnZSA9IE5VTEw7CisgICAgbV9iUmVsZWFzZUxhc3REaWN0ID0gVFJVRTsKKyAgICBtX3BQYXJlbnRSZXNvdXJjZXMgPSBOVUxMOworI2lmZGVmIF9GUERGQVBJX01JTklfCisgICAgbV9wT2JqZWN0U3RhdGUgPSBOVUxMOworICAgIG1fcE9iamVjdFN0YWNrID0gTlVMTDsKKyAgICBtX3BXb3JkQnVmID0gTlVMTDsKKyAgICBtX3BEaWN0TmFtZSA9IE5VTEw7CisgICAgbV9wU3RyZWFtQnVmID0gTlVMTDsKKyAgICBtX1dvcmRTdGF0ZSA9IDA7CisgICAgbV9PYmplY3RTaXplID0gMDsKKyNlbmRpZgorfQorRlhfQk9PTCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkluaXRpYWxpemUoKQoreworI2lmZGVmIF9GUERGQVBJX01JTklfCisgICAgbV9wT2JqZWN0U3RhdGUgPSBGWF9BbGxvYyhGWF9CT09MLCBfRlBERl9NQVhfT0JKRUNUX1NUQUNLX1NJWkVfKTsKKyAgICBGWFNZU19tZW1zZXQzMihtX3BPYmplY3RTdGF0ZSwgMCwgX0ZQREZfTUFYX09CSkVDVF9TVEFDS19TSVpFXyAqIHNpemVvZihGWF9CT09MKSk7CisgICAgbV9wT2JqZWN0U3RhY2sgPSBGWF9BbGxvYyhDUERGX09iamVjdCosIF9GUERGX01BWF9PQkpFQ1RfU1RBQ0tfU0laRV8pOworICAgIEZYU1lTX21lbXNldDMyKG1fcE9iamVjdFN0YWNrLCAwLCBfRlBERl9NQVhfT0JKRUNUX1NUQUNLX1NJWkVfICogc2l6ZW9mKENQREZfT2JqZWN0KikpOworICAgIG1fcFdvcmRCdWYgPSBGWF9BbGxvYyhGWF9CWVRFLCAyNTYpOworICAgIEZYU1lTX21lbXNldDMyKG1fcFdvcmRCdWYsIDAsIDI1NiAqIHNpemVvZihGWF9CWVRFKSk7CisgICAgbV9wRGljdE5hbWUgPSBGWF9BbGxvYyhGWF9CWVRFLCAyNTYpOworICAgIEZYU1lTX21lbXNldDMyKG1fcERpY3ROYW1lLCAwLCAyNTYgKiBzaXplb2YoRlhfQllURSkpOworICAgIG1fcFN0cmVhbUJ1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIFNUUkVBTV9QQVJTRV9CVUZTSVpFKTsKKyAgICBGWFNZU19tZW1zZXQzMihtX3BTdHJlYW1CdWYsIDAsIFNUUkVBTV9QQVJTRV9CVUZTSVpFICogc2l6ZW9mKEZYX0JZVEUpKTsKKyAgICBtX1N0cmluZ0J1Zi5Fc3RpbWF0ZVNpemUoMTAyNCk7CisgICAgbV9PYmplY3RTaXplID0gMDsKKyAgICBtX0ltYWdlU3JjQnVmLkVzdGltYXRlU2l6ZShTVFJFQU1fUEFSU0VfQlVGU0laRSk7CisjZW5kaWYKKyAgICByZXR1cm4gVFJVRTsKK30KK0NQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6fkNQREZfU3RyZWFtQ29udGVudFBhcnNlcigpCit7CisgICAgQ2xlYXJBbGxQYXJhbXMoKTsKKyAgICBpbnQgaSA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IG1fU3RhdGVTdGFjay5HZXRTaXplKCk7IGkgKyspIHsKKyAgICAgICAgZGVsZXRlIChDUERGX0FsbFN0YXRlcyopbV9TdGF0ZVN0YWNrW2ldOworICAgIH0KKyAgICBpZiAobV9wUGF0aFBvaW50cykgeworICAgICAgICBGWF9GcmVlKG1fcFBhdGhQb2ludHMpOworICAgIH0KKyAgICBpZiAobV9wQ3VyU3RhdGVzKSB7CisgICAgICAgIGRlbGV0ZSBtX3BDdXJTdGF0ZXM7CisgICAgfQorICAgIGlmIChtX3BMYXN0SW1hZ2VEaWN0KSB7CisgICAgICAgIG1fcExhc3RJbWFnZURpY3QtPlJlbGVhc2UoKTsKKyAgICB9CisgICAgaWYgKG1fcExhc3RDbG9uZUltYWdlRGljdCkgeworICAgICAgICBtX3BMYXN0Q2xvbmVJbWFnZURpY3QtPlJlbGVhc2UoKTsKKyAgICB9CisjaWZkZWYgX0ZQREZBUElfTUlOSV8KKyAgICBmb3IgKGkgPSAwOyBpIDwgKGludCltX09iamVjdFNpemU7ICsraSkgeworICAgICAgICBpZiAoIW1fcE9iamVjdFN0YXRlW2ldKSB7CisgICAgICAgICAgICBtX3BPYmplY3RTdGFja1tpXS0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgfQorICAgIEZYX0ZyZWUobV9wT2JqZWN0U3RhY2spOworICAgIEZYX0ZyZWUobV9wT2JqZWN0U3RhdGUpOworICAgIEZYX0ZyZWUobV9wU3RyZWFtQnVmKTsKKyAgICBGWF9GcmVlKG1fcFdvcmRCdWYpOworICAgIEZYX0ZyZWUobV9wRGljdE5hbWUpOworI2VuZGlmCit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6UHJlcGFyZVBhcnNlKENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZVJlc291cmNlcywgQ1BERl9EaWN0aW9uYXJ5KiBwUGFyZW50UmVzb3VyY2VzLCBDRlhfQWZmaW5lTWF0cml4KiBwbXRDb250ZW50VG9Vc2VyLCBDUERGX1BhZ2VPYmplY3RzKiBwT2JqTGlzdCwKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUmVzb3VyY2VzLCBDUERGX1JlY3QqIHBCQm94LCBDUERGX1BhcnNlT3B0aW9ucyogcE9wdGlvbnMsCisgICAgICAgIENQREZfQWxsU3RhdGVzKiBwU3RhdGVzLCBpbnQgbGV2ZWwpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpICsrKSB7CisgICAgICAgIG1fVHlwZTNEYXRhW2ldID0gMDsKKyAgICB9CisgICAgbV9wRG9jdW1lbnQgPSBwRG9jdW1lbnQ7CisgICAgbV9wUGFnZVJlc291cmNlcyA9IHBQYWdlUmVzb3VyY2VzOworICAgIG1fcFBhcmVudFJlc291cmNlcyA9IHBQYXJlbnRSZXNvdXJjZXM7CisgICAgaWYgKHBtdENvbnRlbnRUb1VzZXIpIHsKKyAgICAgICAgbV9tdENvbnRlbnRUb1VzZXIgPSAqcG10Q29udGVudFRvVXNlcjsKKyAgICB9CisgICAgaWYgKHBPcHRpb25zKSB7CisgICAgICAgIG1fT3B0aW9ucyA9ICpwT3B0aW9uczsKKyAgICB9CisgICAgbV9wT2JqZWN0TGlzdCA9IHBPYmpMaXN0OworICAgIG1fcFJlc291cmNlcyA9IHBSZXNvdXJjZXM7CisgICAgaWYgKHBSZXNvdXJjZXMgPT0gTlVMTCkgeworICAgICAgICBtX3BSZXNvdXJjZXMgPSBtX3BQYXJlbnRSZXNvdXJjZXM7CisgICAgfQorICAgIGlmIChtX3BSZXNvdXJjZXMgPT0gTlVMTCkgeworICAgICAgICBtX3BSZXNvdXJjZXMgPSBwUGFnZVJlc291cmNlczsKKyAgICB9CisgICAgaWYgKHBCQm94KSB7CisgICAgICAgIG1fQkJveCA9ICpwQkJveDsKKyAgICB9CisgICAgbV9MZXZlbCA9IGxldmVsOworICAgIG1fcEN1clN0YXRlcyA9IEZYX05FVyBDUERGX0FsbFN0YXRlczsKKyAgICBpZiAocFN0YXRlcykgeworICAgICAgICBtX3BDdXJTdGF0ZXMtPkNvcHkoKnBTdGF0ZXMpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcEN1clN0YXRlcy0+bV9HZW5lcmFsU3RhdGUuTmV3KCk7CisgICAgICAgIG1fcEN1clN0YXRlcy0+bV9HcmFwaFN0YXRlLk5ldygpOworICAgICAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dFN0YXRlLk5ldygpOworICAgICAgICBtX3BDdXJTdGF0ZXMtPm1fQ29sb3JTdGF0ZS5OZXcoKTsKKyAgICB9CisjaWZkZWYgX0ZQREZBUElfTUlOSV8KKyAgICBGWFNZU19tZW1zZXQzMihtX3BPYmplY3RTdGF0ZSwgMCwgX0ZQREZfTUFYX09CSkVDVF9TVEFDS19TSVpFXyAqIHNpemVvZihGWF9CT09MKSk7CisjZW5kaWYKK30KK2ludCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkdldE5leHRQYXJhbVBvcygpCit7CisgICAgaWYgKG1fUGFyYW1Db3VudCA9PSBQQVJBTV9CVUZfU0laRSkgeworICAgICAgICBtX1BhcmFtU3RhcnRQb3MgKys7CisgICAgICAgIGlmIChtX1BhcmFtU3RhcnRQb3MgPT0gUEFSQU1fQlVGX1NJWkUpIHsKKyAgICAgICAgICAgIG1fUGFyYW1TdGFydFBvcyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fUGFyYW1CdWYxW21fUGFyYW1TdGFydFBvc10ubV9UeXBlID09IDApIHsKKyAgICAgICAgICAgIG1fUGFyYW1CdWYxW21fUGFyYW1TdGFydFBvc10ubV9wT2JqZWN0LT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fUGFyYW1TdGFydFBvczsKKyAgICB9CisgICAgaW50IGluZGV4ID0gbV9QYXJhbVN0YXJ0UG9zICsgbV9QYXJhbUNvdW50OworICAgIGlmIChpbmRleCA+PSBQQVJBTV9CVUZfU0laRSkgeworICAgICAgICBpbmRleCAtPSBQQVJBTV9CVUZfU0laRTsKKyAgICB9CisgICAgbV9QYXJhbUNvdW50ICsrOworICAgIHJldHVybiBpbmRleDsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpBZGROYW1lUGFyYW0oRlhfTFBDU1RSIG5hbWUsIGludCBsZW4pCit7CisgICAgaW50IGluZGV4ID0gR2V0TmV4dFBhcmFtUG9zKCk7CisgICAgaWYgKGxlbiA+IDMyKSB7CisgICAgICAgIG1fUGFyYW1CdWYxW2luZGV4XS5tX1R5cGUgPSAwOworICAgICAgICBtX1BhcmFtQnVmMVtpbmRleF0ubV9wT2JqZWN0ID0gQ1BERl9OYW1lOjpDcmVhdGUoUERGX05hbWVEZWNvZGUoQ0ZYX0J5dGVTdHJpbmdDKG5hbWUsIGxlbikpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX1BhcmFtQnVmMVtpbmRleF0ubV9UeXBlID0gUERGT0JKX05BTUU7CisgICAgICAgIGlmIChGWFNZU19tZW1jaHIobmFtZSwgJyMnLCBsZW4pID09IE5VTEwpIHsKKyAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKG1fUGFyYW1CdWYxW2luZGV4XS5tX05hbWUubV9CdWZmZXIsIG5hbWUsIGxlbik7CisgICAgICAgICAgICBtX1BhcmFtQnVmMVtpbmRleF0ubV9OYW1lLm1fTGVuID0gbGVuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc3RyID0gUERGX05hbWVEZWNvZGUoQ0ZYX0J5dGVTdHJpbmdDKG5hbWUsIGxlbikpOworICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9QYXJhbUJ1ZjFbaW5kZXhdLm1fTmFtZS5tX0J1ZmZlciwgKEZYX0xQQ1NUUilzdHIsIHN0ci5HZXRMZW5ndGgoKSk7CisgICAgICAgICAgICBtX1BhcmFtQnVmMVtpbmRleF0ubV9OYW1lLm1fTGVuID0gc3RyLkdldExlbmd0aCgpOworICAgICAgICB9CisgICAgfQorfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkFkZE51bWJlclBhcmFtKEZYX0xQQ1NUUiBzdHIsIGludCBsZW4pCit7CisgICAgaW50IGluZGV4ID0gR2V0TmV4dFBhcmFtUG9zKCk7CisgICAgbV9QYXJhbUJ1ZjFbaW5kZXhdLm1fVHlwZSA9IFBERk9CSl9OVU1CRVI7CisgICAgRlhfYXRvbnVtKENGWF9CeXRlU3RyaW5nQyhzdHIsIGxlbiksIG1fUGFyYW1CdWYxW2luZGV4XS5tX051bWJlci5tX2JJbnRlZ2VyLAorICAgICAgICAgICAgICAmbV9QYXJhbUJ1ZjFbaW5kZXhdLm1fTnVtYmVyLm1fSW50ZWdlcik7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6QWRkT2JqZWN0UGFyYW0oQ1BERl9PYmplY3QqIHBPYmopCit7CisgICAgaW50IGluZGV4ID0gR2V0TmV4dFBhcmFtUG9zKCk7CisgICAgbV9QYXJhbUJ1ZjFbaW5kZXhdLm1fVHlwZSA9IDA7CisgICAgbV9QYXJhbUJ1ZjFbaW5kZXhdLm1fcE9iamVjdCA9IHBPYmo7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6Q2xlYXJBbGxQYXJhbXMoKQoreworICAgIEZYX0RXT1JEIGluZGV4ID0gbV9QYXJhbVN0YXJ0UG9zOworICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBtX1BhcmFtQ291bnQ7IGkgKyspIHsKKyAgICAgICAgaWYgKG1fUGFyYW1CdWYxW2luZGV4XS5tX1R5cGUgPT0gMCkgeworICAgICAgICAgICAgbV9QYXJhbUJ1ZjFbaW5kZXhdLm1fcE9iamVjdC0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgICAgIGluZGV4ICsrOworICAgICAgICBpZiAoaW5kZXggPT0gUEFSQU1fQlVGX1NJWkUpIHsKKyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX1BhcmFtU3RhcnRQb3MgPSAwOworICAgIG1fUGFyYW1Db3VudCA9IDA7Cit9CitDUERGX09iamVjdCogQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpHZXRPYmplY3QoRlhfRFdPUkQgaW5kZXgpCit7CisgICAgaWYgKGluZGV4ID49IG1fUGFyYW1Db3VudCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaW50IHJlYWxfaW5kZXggPSBtX1BhcmFtU3RhcnRQb3MgKyBtX1BhcmFtQ291bnQgLSBpbmRleCAtIDE7CisgICAgaWYgKHJlYWxfaW5kZXggPj0gUEFSQU1fQlVGX1NJWkUpIHsKKyAgICAgICAgcmVhbF9pbmRleCAtPSBQQVJBTV9CVUZfU0laRTsKKyAgICB9CisgICAgX0NvbnRlbnRQYXJhbSYgcGFyYW0gPSBtX1BhcmFtQnVmMVtyZWFsX2luZGV4XTsKKyAgICBpZiAocGFyYW0ubV9UeXBlID09IFBERk9CSl9OVU1CRVIpIHsKKyAgICAgICAgQ1BERl9OdW1iZXIqIHBOdW1iZXIgPSBDUERGX051bWJlcjo6Q3JlYXRlKHBhcmFtLm1fTnVtYmVyLm1fYkludGVnZXIsICZwYXJhbS5tX051bWJlci5tX0ludGVnZXIpOworICAgICAgICBwYXJhbS5tX1R5cGUgPSAwOworICAgICAgICBwYXJhbS5tX3BPYmplY3QgPSBwTnVtYmVyOworICAgICAgICByZXR1cm4gcE51bWJlcjsKKyAgICB9CisgICAgaWYgKHBhcmFtLm1fVHlwZSA9PSBQREZPQkpfTkFNRSkgeworICAgICAgICBDUERGX05hbWUqIHBOYW1lID0gQ1BERl9OYW1lOjpDcmVhdGUoQ0ZYX0J5dGVTdHJpbmcocGFyYW0ubV9OYW1lLm1fQnVmZmVyLCBwYXJhbS5tX05hbWUubV9MZW4pKTsKKyAgICAgICAgcGFyYW0ubV9UeXBlID0gMDsKKyAgICAgICAgcGFyYW0ubV9wT2JqZWN0ID0gcE5hbWU7CisgICAgICAgIHJldHVybiBwTmFtZTsKKyAgICB9CisgICAgaWYgKHBhcmFtLm1fVHlwZSA9PSAwKSB7CisgICAgICAgIHJldHVybiBwYXJhbS5tX3BPYmplY3Q7CisgICAgfQorICAgIEFTU0VSVChGQUxTRSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CitDRlhfQnl0ZVN0cmluZyBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkdldFN0cmluZyhGWF9EV09SRCBpbmRleCkKK3sKKyAgICBpZiAoaW5kZXggPj0gbV9QYXJhbUNvdW50KSB7CisgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZygpOworICAgIH0KKyAgICBpbnQgcmVhbF9pbmRleCA9IG1fUGFyYW1TdGFydFBvcyArIG1fUGFyYW1Db3VudCAtIGluZGV4IC0gMTsKKyAgICBpZiAocmVhbF9pbmRleCA+PSBQQVJBTV9CVUZfU0laRSkgeworICAgICAgICByZWFsX2luZGV4IC09IFBBUkFNX0JVRl9TSVpFOworICAgIH0KKyAgICBfQ29udGVudFBhcmFtJiBwYXJhbSA9IG1fUGFyYW1CdWYxW3JlYWxfaW5kZXhdOworICAgIGlmIChwYXJhbS5tX1R5cGUgPT0gUERGT0JKX05BTUUpIHsKKyAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKHBhcmFtLm1fTmFtZS5tX0J1ZmZlciwgcGFyYW0ubV9OYW1lLm1fTGVuKTsKKyAgICB9CisgICAgaWYgKHBhcmFtLm1fVHlwZSA9PSAwKSB7CisgICAgICAgIHJldHVybiBwYXJhbS5tX3BPYmplY3QtPkdldFN0cmluZygpOworICAgIH0KKyAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsKK30KK0ZYX0ZMT0FUIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6R2V0TnVtYmVyKEZYX0RXT1JEIGluZGV4KQoreworICAgIGlmIChpbmRleCA+PSBtX1BhcmFtQ291bnQpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGludCByZWFsX2luZGV4ID0gbV9QYXJhbVN0YXJ0UG9zICsgbV9QYXJhbUNvdW50IC0gaW5kZXggLSAxOworICAgIGlmIChyZWFsX2luZGV4ID49IFBBUkFNX0JVRl9TSVpFKSB7CisgICAgICAgIHJlYWxfaW5kZXggLT0gUEFSQU1fQlVGX1NJWkU7CisgICAgfQorICAgIF9Db250ZW50UGFyYW0mIHBhcmFtID0gbV9QYXJhbUJ1ZjFbcmVhbF9pbmRleF07CisgICAgaWYgKHBhcmFtLm1fVHlwZSA9PSBQREZPQkpfTlVNQkVSKSB7CisgICAgICAgIHJldHVybiBwYXJhbS5tX051bWJlci5tX2JJbnRlZ2VyID8gKEZYX0ZMT0FUKXBhcmFtLm1fTnVtYmVyLm1fSW50ZWdlciA6IHBhcmFtLm1fTnVtYmVyLm1fRmxvYXQ7CisgICAgfQorICAgIGlmIChwYXJhbS5tX1R5cGUgPT0gMCkgeworICAgICAgICByZXR1cm4gcGFyYW0ubV9wT2JqZWN0LT5HZXROdW1iZXIoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CitGWF9GTE9BVCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkdldE51bWJlcjE2KEZYX0RXT1JEIGluZGV4KQoreworICAgIHJldHVybiBHZXROdW1iZXIoaW5kZXgpOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OlNldEdyYXBoaWNTdGF0ZXMoQ1BERl9QYWdlT2JqZWN0KiBwT2JqLCBGWF9CT09MIGJDb2xvciwgRlhfQk9PTCBiVGV4dCwgRlhfQk9PTCBiR3JhcGgpCit7CisgICAgcE9iai0+bV9HZW5lcmFsU3RhdGUgPSBtX3BDdXJTdGF0ZXMtPm1fR2VuZXJhbFN0YXRlOworICAgIHBPYmotPm1fQ2xpcFBhdGggPSBtX3BDdXJTdGF0ZXMtPm1fQ2xpcFBhdGg7CisgICAgcE9iai0+bV9Db250ZW50TWFyayA9IG1fQ3VyQ29udGVudE1hcms7CisgICAgaWYgKGJDb2xvcikgeworICAgICAgICBwT2JqLT5tX0NvbG9yU3RhdGUgPSBtX3BDdXJTdGF0ZXMtPm1fQ29sb3JTdGF0ZTsKKyAgICB9CisgICAgaWYgKGJHcmFwaCkgeworICAgICAgICBwT2JqLT5tX0dyYXBoU3RhdGUgPSBtX3BDdXJTdGF0ZXMtPm1fR3JhcGhTdGF0ZTsKKyAgICB9CisgICAgaWYgKGJUZXh0KSB7CisgICAgICAgIHBPYmotPm1fVGV4dFN0YXRlID0gbV9wQ3VyU3RhdGVzLT5tX1RleHRTdGF0ZTsKKyAgICB9Cit9Citjb25zdCBzdHJ1Y3QgX09wQ29kZSB7CisgICAgRlhfRFdPUkQJbV9PcElkOworICAgIHZvaWQgKENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6Km1fT3BIYW5kbGVyKSgpOworfSBnX09wQ29kZXNbXSA9IHsKKyAgICB7RlhCU1RSX0lEKCciJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfTmV4dExpbmVTaG93VGV4dF9TcGFjZX0sCisgICAge0ZYQlNUUl9JRCgnXCcnLCAwLCAwLCAwKSwJCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9OZXh0TGluZVNob3dUZXh0fSwKKyAgICB7RlhCU1RSX0lEKCdCJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfRmlsbFN0cm9rZVBhdGh9LAorICAgIHtGWEJTVFJfSUQoJ0InLCAnKicsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfRU9GaWxsU3Ryb2tlUGF0aH0sCisgICAge0ZYQlNUUl9JRCgnQicsICdEJywgJ0MnLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0JlZ2luTWFya2VkQ29udGVudF9EaWN0aW9uYXJ5fSwKKyAgICB7RlhCU1RSX0lEKCdCJywgJ0knLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0JlZ2luSW1hZ2V9LAorICAgIHtGWEJTVFJfSUQoJ0InLCAnTScsICdDJywgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9CZWdpbk1hcmtlZENvbnRlbnR9LAorICAgIHtGWEJTVFJfSUQoJ0InLCAnVCcsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfQmVnaW5UZXh0fSwKKyAgICB7RlhCU1RSX0lEKCdCJywgJ1gnLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0JlZ2luU2VjdGlvblVuZGVmaW5lZH0sCisgICAge0ZYQlNUUl9JRCgnQycsICdTJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRDb2xvclNwYWNlX1N0cm9rZX0sCisgICAge0ZYQlNUUl9JRCgnRCcsICdQJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9NYXJrUGxhY2VfRGljdGlvbmFyeX0sCisgICAge0ZYQlNUUl9JRCgnRCcsICdvJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9FeGVjdXRlWE9iamVjdH0sCisgICAge0ZYQlNUUl9JRCgnRScsICdJJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9FbmRJbWFnZX0sCisgICAge0ZYQlNUUl9JRCgnRScsICdNJywgJ0MnLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0VuZE1hcmtlZENvbnRlbnR9LAorICAgIHtGWEJTVFJfSUQoJ0UnLCAnVCcsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfRW5kVGV4dH0sCisgICAge0ZYQlNUUl9JRCgnRScsICdYJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9FbmRTZWN0aW9uVW5kZWZpbmVkfSwKKyAgICB7RlhCU1RSX0lEKCdGJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfRmlsbFBhdGhPbGR9LAorICAgIHtGWEJTVFJfSUQoJ0cnLCAwLCAwLCAwKSwJCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRHcmF5X1N0cm9rZX0sCisgICAge0ZYQlNUUl9JRCgnSScsICdEJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9CZWdpbkltYWdlRGF0YX0sCisgICAge0ZYQlNUUl9JRCgnSicsIDAsIDAsIDApLAkJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldExpbmVDYXB9LAorICAgIHtGWEJTVFJfSUQoJ0snLCAwLCAwLCAwKSwJCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRDTVlLQ29sb3JfU3Ryb2tlfSwKKyAgICB7RlhCU1RSX0lEKCdNJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0TWl0ZXJMaW1pdH0sCisgICAge0ZYQlNUUl9JRCgnTScsICdQJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9NYXJrUGxhY2V9LAorICAgIHtGWEJTVFJfSUQoJ1EnLCAwLCAwLCAwKSwJCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9SZXN0b3JlR3JhcGhTdGF0ZX0sCisgICAge0ZYQlNUUl9JRCgnUicsICdHJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRSR0JDb2xvcl9TdHJva2V9LAorICAgIHtGWEJTVFJfSUQoJ1MnLCAwLCAwLCAwKSwJCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TdHJva2VQYXRofSwKKyAgICB7RlhCU1RSX0lEKCdTJywgJ0MnLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldENvbG9yX1N0cm9rZX0sCisgICAge0ZYQlNUUl9JRCgnUycsICdDJywgJ04nLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldENvbG9yUFNfU3Ryb2tlfSwKKyAgICB7RlhCU1RSX0lEKCdUJywgJyonLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX01vdmVUb05leHRMaW5lfSwKKyAgICB7RlhCU1RSX0lEKCdUJywgJ0QnLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX01vdmVUZXh0UG9pbnRfU2V0TGVhZGluZ30sCisgICAge0ZYQlNUUl9JRCgnVCcsICdKJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TaG93VGV4dF9Qb3NpdGlvbmluZ30sCisgICAge0ZYQlNUUl9JRCgnVCcsICdMJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRUZXh0TGVhZGluZ30sCisgICAge0ZYQlNUUl9JRCgnVCcsICdjJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRDaGFyU3BhY2V9LAorICAgIHtGWEJTVFJfSUQoJ1QnLCAnZCcsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfTW92ZVRleHRQb2ludH0sCisgICAge0ZYQlNUUl9JRCgnVCcsICdmJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRGb250fSwKKyAgICB7RlhCU1RSX0lEKCdUJywgJ2onLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1Nob3dUZXh0fSwKKyAgICB7RlhCU1RSX0lEKCdUJywgJ20nLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldFRleHRNYXRyaXh9LAorICAgIHtGWEJTVFJfSUQoJ1QnLCAncicsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0VGV4dFJlbmRlck1vZGV9LAorICAgIHtGWEJTVFJfSUQoJ1QnLCAncycsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0VGV4dFJpc2V9LAorICAgIHtGWEJTVFJfSUQoJ1QnLCAndycsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0V29yZFNwYWNlfSwKKyAgICB7RlhCU1RSX0lEKCdUJywgJ3onLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldEhvcnpTY2FsZX0sCisgICAge0ZYQlNUUl9JRCgnVycsIDAsIDAsIDApLAkJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0NsaXB9LAorICAgIHtGWEJTVFJfSUQoJ1cnLCAnKicsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfRU9DbGlwfSwKKyAgICB7RlhCU1RSX0lEKCdiJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfQ2xvc2VGaWxsU3Ryb2tlUGF0aH0sCisgICAge0ZYQlNUUl9JRCgnYicsICcqJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9DbG9zZUVPRmlsbFN0cm9rZVBhdGh9LAorICAgIHtGWEJTVFJfSUQoJ2MnLCAwLCAwLCAwKSwJCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9DdXJ2ZVRvXzEyM30sCisgICAge0ZYQlNUUl9JRCgnYycsICdtJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9Db25jYXRNYXRyaXh9LAorICAgIHtGWEJTVFJfSUQoJ2MnLCAncycsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0Q29sb3JTcGFjZV9GaWxsfSwKKyAgICB7RlhCU1RSX0lEKCdkJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0RGFzaH0sCisgICAge0ZYQlNUUl9JRCgnZCcsICcwJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRDaGFyV2lkdGh9LAorICAgIHtGWEJTVFJfSUQoJ2QnLCAnMScsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0Q2FjaGVkRGV2aWNlfSwKKyAgICB7RlhCU1RSX0lEKCdmJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfRmlsbFBhdGh9LAorICAgIHtGWEJTVFJfSUQoJ2YnLCAnKicsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfRU9GaWxsUGF0aH0sCisgICAge0ZYQlNUUl9JRCgnZycsIDAsIDAsIDApLAkJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldEdyYXlfRmlsbH0sCisgICAge0ZYQlNUUl9JRCgnZycsICdzJywgMCwgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRFeHRlbmRHcmFwaFN0YXRlfSwKKyAgICB7RlhCU1RSX0lEKCdoJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfQ2xvc2VQYXRofSwKKyAgICB7RlhCU1RSX0lEKCdpJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0RmxhdH0sCisgICAge0ZYQlNUUl9JRCgnaicsIDAsIDAsIDApLAkJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldExpbmVKb2lufSwKKyAgICB7RlhCU1RSX0lEKCdrJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0Q01ZS0NvbG9yX0ZpbGx9LAorICAgIHtGWEJTVFJfSUQoJ2wnLCAwLCAwLCAwKSwJCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9MaW5lVG99LAorICAgIHtGWEJTVFJfSUQoJ20nLCAwLCAwLCAwKSwJCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9Nb3ZlVG99LAorICAgIHtGWEJTVFJfSUQoJ24nLCAwLCAwLCAwKSwJCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9FbmRQYXRofSwKKyAgICB7RlhCU1RSX0lEKCdxJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2F2ZUdyYXBoU3RhdGV9LAorICAgIHtGWEJTVFJfSUQoJ3InLCAnZScsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfUmVjdGFuZ2xlfSwKKyAgICB7RlhCU1RSX0lEKCdyJywgJ2cnLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldFJHQkNvbG9yX0ZpbGx9LAorICAgIHtGWEJTVFJfSUQoJ3InLCAnaScsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0UmVuZGVySW50ZW50fSwKKyAgICB7RlhCU1RSX0lEKCdzJywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfQ2xvc2VTdHJva2VQYXRofSwKKyAgICB7RlhCU1RSX0lEKCdzJywgJ2MnLCAwLCAwKSwJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldENvbG9yX0ZpbGx9LAorICAgIHtGWEJTVFJfSUQoJ3MnLCAnYycsICduJywgMCksCSZDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRDb2xvclBTX0ZpbGx9LAorICAgIHtGWEJTVFJfSUQoJ3MnLCAnaCcsIDAsIDApLAkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2hhZGVGaWxsfSwKKyAgICB7RlhCU1RSX0lEKCd2JywgMCwgMCwgMCksCQkmQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfQ3VydmVUb18yM30sCisgICAge0ZYQlNUUl9JRCgndycsIDAsIDAsIDApLAkJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldExpbmVXaWR0aH0sCisgICAge0ZYQlNUUl9JRCgneScsIDAsIDAsIDApLAkJJkNQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0N1cnZlVG9fMTN9LAorfTsKK0ZYX0JPT0wgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpPbk9wZXJhdG9yKEZYX0xQQ1NUUiBvcCkKK3sKKyAgICBpbnQgaSA9IDA7CisgICAgRlhfRFdPUkQgb3BpZCA9IDA7CisgICAgd2hpbGUgKGkgPCA0ICYmIG9wW2ldKSB7CisgICAgICAgIG9waWQgPSAob3BpZCA8PCA4KSArIG9wW2ldOworICAgICAgICBpICsrOworICAgIH0KKyAgICB3aGlsZSAoaSA8IDQpIHsKKyAgICAgICAgb3BpZCA8PD0gODsKKyAgICAgICAgaSArKzsKKyAgICB9OworICAgIGludCBsb3cgPSAwLCBoaWdoID0gc2l6ZW9mIGdfT3BDb2RlcyAvIHNpemVvZihzdHJ1Y3QgX09wQ29kZSkgLSAxOworICAgIHdoaWxlIChsb3cgPD0gaGlnaCkgeworICAgICAgICBpbnQgbWlkZGxlID0gKGxvdyArIGhpZ2gpIC8gMjsKKyAgICAgICAgaW50IGNvbXBhcmUgPSBvcGlkIC0gZ19PcENvZGVzW21pZGRsZV0ubV9PcElkOworICAgICAgICBpZiAoY29tcGFyZSA9PSAwKSB7CisgICAgICAgICAgICAodGhpcy0+KmdfT3BDb2Rlc1ttaWRkbGVdLm1fT3BIYW5kbGVyKSgpOworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0gZWxzZSBpZiAoY29tcGFyZSA8IDApIHsKKyAgICAgICAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG93ID0gbWlkZGxlICsgMTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbV9Db21wYXRDb3VudCAhPSAwOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9DbG9zZUZpbGxTdHJva2VQYXRoKCkKK3sKKyAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgSGFuZGxlX0Nsb3NlUGF0aCgpOworICAgIEFkZFBhdGhPYmplY3QoRlhGSUxMX1dJTkRJTkcsIFRSVUUpOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9GaWxsU3Ryb2tlUGF0aCgpCit7CisgICAgaWYgKG1fT3B0aW9ucy5tX2JUZXh0T25seSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFkZFBhdGhPYmplY3QoRlhGSUxMX1dJTkRJTkcsIFRSVUUpOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9DbG9zZUVPRmlsbFN0cm9rZVBhdGgoKQoreworICAgIGlmIChtX09wdGlvbnMubV9iVGV4dE9ubHkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBZGRQYXRoUG9pbnQobV9QYXRoU3RhcnRYLCBtX1BhdGhTdGFydFksIEZYUFRfTElORVRPIHwgRlhQVF9DTE9TRUZJR1VSRSk7CisgICAgQWRkUGF0aE9iamVjdChGWEZJTExfQUxURVJOQVRFLCBUUlVFKTsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfRU9GaWxsU3Ryb2tlUGF0aCgpCit7CisgICAgaWYgKG1fT3B0aW9ucy5tX2JUZXh0T25seSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFkZFBhdGhPYmplY3QoRlhGSUxMX0FMVEVSTkFURSwgVFJVRSk7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0JlZ2luTWFya2VkQ29udGVudF9EaWN0aW9uYXJ5KCkKK3sKKyAgICBpZiAoIW1fT3B0aW9ucy5tX2JNYXJrZWRDb250ZW50KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgdGFnID0gR2V0U3RyaW5nKDEpOworICAgIENQREZfT2JqZWN0KiBwUHJvcGVydHkgPSBHZXRPYmplY3QoMCk7CisgICAgaWYgKHBQcm9wZXJ0eSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfQk9PTCBiRGlyZWN0ID0gVFJVRTsKKyAgICBpZiAocFByb3BlcnR5LT5HZXRUeXBlKCkgPT0gUERGT0JKX05BTUUpIHsKKyAgICAgICAgcFByb3BlcnR5ID0gRmluZFJlc291cmNlT2JqKEZYX0JTVFJDKCJQcm9wZXJ0aWVzIiksIHBQcm9wZXJ0eS0+R2V0U3RyaW5nKCkpOworICAgICAgICBpZiAocFByb3BlcnR5ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBiRGlyZWN0ID0gRkFMU0U7CisgICAgfQorICAgIGlmIChwUHJvcGVydHktPkdldFR5cGUoKSAhPSBQREZPQkpfRElDVElPTkFSWSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fQ3VyQ29udGVudE1hcmsuR2V0TW9kaWZ5KCktPkFkZE1hcmsodGFnLCAoQ1BERl9EaWN0aW9uYXJ5KilwUHJvcGVydHksIGJEaXJlY3QpOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9CZWdpbk1hcmtlZENvbnRlbnQoKQoreworICAgIGlmICghbV9PcHRpb25zLm1fYk1hcmtlZENvbnRlbnQpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDRlhfQnl0ZVN0cmluZyB0YWcgPSBHZXRTdHJpbmcoMCk7CisgICAgbV9DdXJDb250ZW50TWFyay5HZXRNb2RpZnkoKS0+QWRkTWFyayh0YWcsIE5VTEwsIEZBTFNFKTsKK30KK3N0cnVjdCBfRlhfQlNUUiB7CisgICAgRlhfTFBDU1RSCW1fUHRyOworICAgIGludAkJCW1fU2l6ZTsKK307CisjZGVmaW5lIF9GWF9CU1RSQyhzdHIpIHtzdHIsIHNpemVvZihzdHIpLTF9Citjb25zdCBfRlhfQlNUUiBfUERGX0lubGluZUtleUFiYnJbXSA9IHsKKyAgICBfRlhfQlNUUkMoIkJpdHNQZXJDb21wb25lbnQiKSwgX0ZYX0JTVFJDKCJCUEMiKSwKKyAgICBfRlhfQlNUUkMoIkNvbG9yU3BhY2UiKSwgX0ZYX0JTVFJDKCJDUyIpLAorICAgIF9GWF9CU1RSQygiRGVjb2RlIiksIF9GWF9CU1RSQygiRCIpLAorICAgIF9GWF9CU1RSQygiRGVjb2RlUGFybXMiKSwgX0ZYX0JTVFJDKCJEUCIpLAorICAgIF9GWF9CU1RSQygiRmlsdGVyIiksIF9GWF9CU1RSQygiRiIpLAorICAgIF9GWF9CU1RSQygiSGVpZ2h0IiksIF9GWF9CU1RSQygiSCIpLAorICAgIF9GWF9CU1RSQygiSW1hZ2VNYXNrIiksIF9GWF9CU1RSQygiSU0iKSwKKyAgICBfRlhfQlNUUkMoIkludGVycG9sYXRlIiksIF9GWF9CU1RSQygiSSIpLAorICAgIF9GWF9CU1RSQygiV2lkdGgiKSwgX0ZYX0JTVFJDKCJXIiksCit9OworY29uc3QgX0ZYX0JTVFIgX1BERl9JbmxpbmVWYWx1ZUFiYnJbXSA9IHsKKyAgICBfRlhfQlNUUkMoIkRldmljZUdyYXkiKSwgX0ZYX0JTVFJDKCJHIiksCisgICAgX0ZYX0JTVFJDKCJEZXZpY2VSR0IiKSwgX0ZYX0JTVFJDKCJSR0IiKSwKKyAgICBfRlhfQlNUUkMoIkRldmljZUNNWUsiKSwgX0ZYX0JTVFJDKCJDTVlLIiksCisgICAgX0ZYX0JTVFJDKCJJbmRleGVkIiksIF9GWF9CU1RSQygiSSIpLAorICAgIF9GWF9CU1RSQygiQVNDSUlIZXhEZWNvZGUiKSwgX0ZYX0JTVFJDKCJBSHgiKSwKKyAgICBfRlhfQlNUUkMoIkFTQ0lJODVEZWNvZGUiKSwgX0ZYX0JTVFJDKCJBODUiKSwKKyAgICBfRlhfQlNUUkMoIkxaV0RlY29kZSIpLCBfRlhfQlNUUkMoIkxaVyIpLAorICAgIF9GWF9CU1RSQygiRmxhdGVEZWNvZGUiKSwgX0ZYX0JTVFJDKCJGbCIpLAorICAgIF9GWF9CU1RSQygiUnVuTGVuZ3RoRGVjb2RlIiksIF9GWF9CU1RSQygiUkwiKSwKKyAgICBfRlhfQlNUUkMoIkNDSVRURmF4RGVjb2RlIiksIF9GWF9CU1RSQygiQ0NGIiksCisgICAgX0ZYX0JTVFJDKCJEQ1REZWNvZGUiKSwgX0ZYX0JTVFJDKCJEQ1QiKSwKK307CitzdGF0aWMgQ0ZYX0J5dGVTdHJpbmdDIF9QREZfRmluZEZ1bGxOYW1lKGNvbnN0IF9GWF9CU1RSKiB0YWJsZSwgaW50IGNvdW50LCBGWF9CU1RSIGFiYnIpCit7CisgICAgaW50IGkgPSAwOworICAgIHdoaWxlIChpIDwgY291bnQpIHsKKyAgICAgICAgaWYgKGFiYnIuR2V0TGVuZ3RoKCkgPT0gdGFibGVbaSArIDFdLm1fU2l6ZSAmJiBGWFNZU19tZW1jbXAzMihhYmJyLkdldFB0cigpLCB0YWJsZVtpICsgMV0ubV9QdHIsIGFiYnIuR2V0TGVuZ3RoKCkpID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0ModGFibGVbaV0ubV9QdHIsIHRhYmxlW2ldLm1fU2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgaSArPSAyOworICAgIH0KKyAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmdDKCk7Cit9Cit2b2lkIF9QREZfUmVwbGFjZUFiYnIoQ1BERl9PYmplY3QqIHBPYmopCit7CisgICAgc3dpdGNoIChwT2JqLT5HZXRUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBQREZPQkpfRElDVElPTkFSWTogeworICAgICAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KilwT2JqOworICAgICAgICAgICAgICAgIEZYX1BPU0lUSU9OIHBvcyA9IHBEaWN0LT5HZXRTdGFydFBvcygpOworICAgICAgICAgICAgICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcga2V5OworICAgICAgICAgICAgICAgICAgICBDUERGX09iamVjdCogdmFsdWUgPSBwRGljdC0+R2V0TmV4dEVsZW1lbnQocG9zLCBrZXkpOworICAgICAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZ0MgZnVsbG5hbWUgPSBfUERGX0ZpbmRGdWxsTmFtZShfUERGX0lubGluZUtleUFiYnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiBfUERGX0lubGluZUtleUFiYnIgLyBzaXplb2YoX0ZYX0JTVFIpLCBrZXkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWZ1bGxuYW1lLklzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcERpY3QtPlJlcGxhY2VLZXkoa2V5LCBmdWxsbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBmdWxsbmFtZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPkdldFR5cGUoKSA9PSBQREZPQkpfTkFNRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgbmFtZSA9IHZhbHVlLT5HZXRTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxuYW1lID0gX1BERl9GaW5kRnVsbE5hbWUoX1BERl9JbmxpbmVWYWx1ZUFiYnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiBfUERGX0lubGluZVZhbHVlQWJiciAvIHNpemVvZihfRlhfQlNUUiksIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmdWxsbmFtZS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRGljdC0+U2V0QXROYW1lKGtleSwgZnVsbG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgX1BERl9SZXBsYWNlQWJicih2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgUERGT0JKX0FSUkFZOiB7CisgICAgICAgICAgICAgICAgQ1BERl9BcnJheSogcEFycmF5ID0gKENQREZfQXJyYXkqKXBPYmo7CisgICAgICAgICAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHBBcnJheS0+R2V0Q291bnQoKTsgaSArKykgeworICAgICAgICAgICAgICAgICAgICBDUERGX09iamVjdCogcEVsZW1lbnQgPSBwQXJyYXktPkdldEVsZW1lbnQoaSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwRWxlbWVudC0+R2V0VHlwZSgpID09IFBERk9CSl9OQU1FKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBuYW1lID0gcEVsZW1lbnQtPkdldFN0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmdDIGZ1bGxuYW1lID0gX1BERl9GaW5kRnVsbE5hbWUoX1BERl9JbmxpbmVWYWx1ZUFiYnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgX1BERl9JbmxpbmVWYWx1ZUFiYnIgLyBzaXplb2YoX0ZYX0JTVFIpLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZnVsbG5hbWUuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFycmF5LT5TZXRBdChpLCBDUERGX05hbWU6OkNyZWF0ZShmdWxsbmFtZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgX1BERl9SZXBsYWNlQWJicihwRWxlbWVudCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgfQorfQorc3RhdGljIENGWF9CeXRlU3RyaW5nQyBfUERGX0ZpbmRBYmJyTmFtZShjb25zdCBfRlhfQlNUUiogdGFibGUsIGludCBjb3VudCwgRlhfQlNUUiBmdWxsTmFtZSkKK3sKKyAgICBpbnQgaSA9IDA7CisgICAgd2hpbGUgKGkgPCBjb3VudCkgeworICAgICAgICBpZiAoZnVsbE5hbWUuR2V0TGVuZ3RoKCkgPT0gdGFibGVbaV0ubV9TaXplICYmIEZYU1lTX21lbWNtcDMyKGZ1bGxOYW1lLkdldFB0cigpLCB0YWJsZVtpXS5tX1B0ciwgZnVsbE5hbWUuR2V0TGVuZ3RoKCkpID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0ModGFibGVbaSArIDFdLm1fUHRyLCB0YWJsZVtpICsgMV0ubV9TaXplKTsKKyAgICAgICAgfQorICAgICAgICBpICs9IDI7CisgICAgfQorICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0MoKTsKK30KK3ZvaWQgX1BERl9SZXBsYWNlRnVsbChDUERGX09iamVjdCogcE9iaikKK3sKKyAgICBzd2l0Y2ggKHBPYmotPkdldFR5cGUoKSkgeworICAgICAgICBjYXNlIFBERk9CSl9ESUNUSU9OQVJZOiB7CisgICAgICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IChDUERGX0RpY3Rpb25hcnkqKXBPYmo7CisgICAgICAgICAgICAgICAgRlhfUE9TSVRJT04gcG9zID0gcERpY3QtPkdldFN0YXJ0UG9zKCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKHBvcykgeworICAgICAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBrZXk7CisgICAgICAgICAgICAgICAgICAgIENQREZfT2JqZWN0KiB2YWx1ZSA9IHBEaWN0LT5HZXROZXh0RWxlbWVudChwb3MsIGtleSk7CisgICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nQyBhYmJyTmFtZSA9IF9QREZfRmluZEFiYnJOYW1lKF9QREZfSW5saW5lS2V5QWJiciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKF9QREZfSW5saW5lS2V5QWJicikgLyBzaXplb2YoX0ZYX0JTVFIpLCBrZXkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWFiYnJOYW1lLklzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcERpY3QtPlJlcGxhY2VLZXkoa2V5LCBhYmJyTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBhYmJyTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPkdldFR5cGUoKSA9PSBQREZPQkpfTkFNRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgbmFtZSA9IHZhbHVlLT5HZXRTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFiYnJOYW1lID0gX1BERl9GaW5kQWJick5hbWUoX1BERl9JbmxpbmVWYWx1ZUFiYnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihfUERGX0lubGluZVZhbHVlQWJicikgLyBzaXplb2YoX0ZYX0JTVFIpLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWJick5hbWUuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERpY3QtPlNldEF0TmFtZShrZXksIGFiYnJOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9QREZfUmVwbGFjZUZ1bGwodmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFBERk9CSl9BUlJBWTogeworICAgICAgICAgICAgICAgIENQREZfQXJyYXkqIHBBcnJheSA9IChDUERGX0FycmF5KilwT2JqOworICAgICAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwQXJyYXktPkdldENvdW50KCk7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBFbGVtZW50ID0gcEFycmF5LT5HZXRFbGVtZW50KGkpOworICAgICAgICAgICAgICAgICAgICBpZiAocEVsZW1lbnQtPkdldFR5cGUoKSA9PSBQREZPQkpfTkFNRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgbmFtZSA9IHBFbGVtZW50LT5HZXRTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nQyBhYmJyTmFtZSA9IF9QREZfRmluZEFiYnJOYW1lKF9QREZfSW5saW5lVmFsdWVBYmJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIF9QREZfSW5saW5lVmFsdWVBYmJyIC8gc2l6ZW9mKF9GWF9CU1RSKSwgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFiYnJOYW1lLklzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBcnJheS0+U2V0QXQoaSwgQ1BERl9OYW1lOjpDcmVhdGUoYWJick5hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9QREZfUmVwbGFjZUZ1bGwocEVsZW1lbnQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgIH0KK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfQmVnaW5UZXh0KCkKK3sKKyAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dE1hdHJpeC5TZXQoMS4wZiwgMCwgMCwgMS4wZiwgMCwgMCk7CisgICAgT25DaGFuZ2VUZXh0TWF0cml4KCk7CisgICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRYID0gMDsKKyAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dFkgPSAwOworICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0TGluZVggPSAwOworICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0TGluZVkgPSAwOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9CZWdpblNlY3Rpb25VbmRlZmluZWQoKQoreworICAgIG1fQ29tcGF0Q291bnQgKys7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0N1cnZlVG9fMTIzKCkKK3sKKyAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQWRkUGF0aFBvaW50KEdldE51bWJlcig1KSwgR2V0TnVtYmVyKDQpLCBGWFBUX0JFWklFUlRPKTsKKyAgICBBZGRQYXRoUG9pbnQoR2V0TnVtYmVyKDMpLCBHZXROdW1iZXIoMiksIEZYUFRfQkVaSUVSVE8pOworICAgIEFkZFBhdGhQb2ludChHZXROdW1iZXIoMSksIEdldE51bWJlcigwKSwgRlhQVF9CRVpJRVJUTyk7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0NvbmNhdE1hdHJpeCgpCit7CisgICAgRlhfRkxPQVQgYTIgPSBHZXROdW1iZXIxNig1KSwgYjIgPSBHZXROdW1iZXIxNig0KSwgYzIgPSBHZXROdW1iZXIxNigzKSwgZDIgPSBHZXROdW1iZXIxNigyKTsKKyAgICBGWF9GTE9BVCBlMiA9IEdldE51bWJlcigxKSwgZjIgPSBHZXROdW1iZXIoMCk7CisgICAgRlhfRkxPQVQgb2xkX3dpZHRoX3NjYWxlID0gbV9wQ3VyU3RhdGVzLT5tX0NUTS5HZXRYVW5pdCgpOworICAgIENGWF9BZmZpbmVNYXRyaXggbmV3X21hdHJpeChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKTsKKyAgICBuZXdfbWF0cml4LkNvbmNhdChtX3BDdXJTdGF0ZXMtPm1fQ1RNKTsKKyAgICBtX3BDdXJTdGF0ZXMtPm1fQ1RNID0gbmV3X21hdHJpeDsKKyAgICBGWF9GTE9BVCBuZXdfd2lkdGhfc2NhbGUgPSBtX3BDdXJTdGF0ZXMtPm1fQ1RNLkdldFhVbml0KCk7CisgICAgT25DaGFuZ2VUZXh0TWF0cml4KCk7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldENvbG9yU3BhY2VfRmlsbCgpCit7CisgICAgaWYgKG1fT3B0aW9ucy5tX2JUZXh0T25seSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIGNzbmFtZSA9IEdldFN0cmluZygwKTsKKyAgICBDUERGX0NvbG9yU3BhY2UqIHBDUyA9IEZpbmRDb2xvclNwYWNlKGNzbmFtZSk7CisgICAgaWYgKHBDUyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wQ3VyU3RhdGVzLT5tX0NvbG9yU3RhdGUuR2V0TW9kaWZ5KCktPm1fRmlsbENvbG9yLlNldENvbG9yU3BhY2UocENTKTsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0Q29sb3JTcGFjZV9TdHJva2UoKQoreworICAgIGlmIChtX09wdGlvbnMubV9iVGV4dE9ubHkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDRlhfQnl0ZVN0cmluZyBjc25hbWUgPSBHZXRTdHJpbmcoMCk7CisgICAgQ1BERl9Db2xvclNwYWNlKiBwQ1MgPSBGaW5kQ29sb3JTcGFjZShjc25hbWUpOworICAgIGlmIChwQ1MgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcEN1clN0YXRlcy0+bV9Db2xvclN0YXRlLkdldE1vZGlmeSgpLT5tX1N0cm9rZUNvbG9yLlNldENvbG9yU3BhY2UocENTKTsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0RGFzaCgpCit7CisgICAgaWYgKG1fT3B0aW9ucy5tX2JUZXh0T25seSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfQXJyYXkqIHBBcnJheSA9IEdldE9iamVjdCgxKS0+R2V0QXJyYXkoKTsKKyAgICBpZiAocEFycmF5ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3BDdXJTdGF0ZXMtPlNldExpbmVEYXNoKHBBcnJheSwgR2V0TnVtYmVyKDApLCAxLjBmKTsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0Q2hhcldpZHRoKCkKK3sKKyAgICBtX1R5cGUzRGF0YVswXSA9IEdldE51bWJlcigxKTsKKyAgICBtX1R5cGUzRGF0YVsxXSA9IEdldE51bWJlcigwKTsKKyAgICBtX2JDb2xvcmVkID0gVFJVRTsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0Q2FjaGVkRGV2aWNlKCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkgKyspIHsKKyAgICAgICAgbV9UeXBlM0RhdGFbaV0gPSBHZXROdW1iZXIoNSAtIGkpOworICAgIH0KKyAgICBtX2JDb2xvcmVkID0gRkFMU0U7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0V4ZWN1dGVYT2JqZWN0KCkKK3sKKyAgICBDRlhfQnl0ZVN0cmluZyBuYW1lID0gR2V0U3RyaW5nKDApOworICAgIGlmIChuYW1lID09IG1fTGFzdEltYWdlTmFtZSAmJiBtX3BMYXN0SW1hZ2UgJiYgbV9wTGFzdEltYWdlLT5HZXRTdHJlYW0oKSAmJiBtX3BMYXN0SW1hZ2UtPkdldFN0cmVhbSgpLT5HZXRPYmpOdW0oKSkgeworI2lmIGRlZmluZWQoX0ZQREZBUElfTUlOSV8pICYmICFkZWZpbmVkKF9GWENPUkVfRkVBVFVSRV9BTExfKQorICAgICAgICBBZGREdXBsaWNhdGVJbWFnZSgpOworI2Vsc2UKKyAgICAgICAgQWRkSW1hZ2UoTlVMTCwgbV9wTGFzdEltYWdlLCBGQUxTRSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7CisgICAgICAgIENQREZfT2JqZWN0KiBwUmVzID0gTlVMTDsKKyAgICAgICAgaWYgKG1fcFJlc291cmNlcyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fcFJlc291cmNlcyA9PSBtX3BQYWdlUmVzb3VyY2VzKSB7CisgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBMaXN0ID0gbV9wUmVzb3VyY2VzLT5HZXREaWN0KEZYX0JTVFJDKCJYT2JqZWN0IikpOworICAgICAgICAgICAgaWYgKHBMaXN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwUmVzID0gcExpc3QtPkdldEVsZW1lbnQobmFtZSk7CisgICAgICAgICAgICBpZiAocFJlcyA9PSBOVUxMIHx8IHBSZXMtPkdldFR5cGUoKSAhPSBQREZPQkpfUkVGRVJFTkNFKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwTGlzdCA9IG1fcFJlc291cmNlcy0+R2V0RGljdChGWF9CU1RSQygiWE9iamVjdCIpKTsKKyAgICAgICAgICAgIGlmIChwTGlzdCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fcFBhZ2VSZXNvdXJjZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcExpc3QgPSBtX3BQYWdlUmVzb3VyY2VzLT5HZXREaWN0KEZYX0JTVFJDKCJYT2JqZWN0IikpOworICAgICAgICAgICAgICAgIGlmIChwTGlzdCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcFJlcyA9IHBMaXN0LT5HZXRFbGVtZW50KG5hbWUpOworICAgICAgICAgICAgICAgIGlmIChwUmVzID09IE5VTEwgfHwgcFJlcy0+R2V0VHlwZSgpICE9IFBERk9CSl9SRUZFUkVOQ0UpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcFJlcyA9IHBMaXN0LT5HZXRFbGVtZW50KG5hbWUpOworICAgICAgICAgICAgICAgIGlmIChwUmVzID09IE5VTEwgfHwgcFJlcy0+R2V0VHlwZSgpICE9IFBERk9CSl9SRUZFUkVOQ0UpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBGWF9CT09MIGJGb3JtOworICAgICAgICBpZiAobV9wRG9jdW1lbnQtPklzRm9ybVN0cmVhbSgoKENQREZfUmVmZXJlbmNlKilwUmVzKS0+R2V0UmVmT2JqTnVtKCksIGJGb3JtKSAmJiAhYkZvcm0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBDUERGX1N0cmVhbSogcFhPYmplY3QgPSAoQ1BERl9TdHJlYW0qKUZpbmRSZXNvdXJjZU9iaihGWF9CU1RSQygiWE9iamVjdCIpLCBuYW1lKTsKKyAgICBpZiAocFhPYmplY3QgPT0gTlVMTCB8fCBwWE9iamVjdC0+R2V0VHlwZSgpICE9IFBERk9CSl9TVFJFQU0pIHsKKyAgICAgICAgbV9iUmVzb3VyY2VNaXNzaW5nID0gVFJVRTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDRlhfQnl0ZVN0cmluZ0MgdHlwZSA9IHBYT2JqZWN0LT5HZXREaWN0KCktPkdldENvbnN0U3RyaW5nKEZYX0JTVFJDKCJTdWJ0eXBlIikpOworICAgIGlmICh0eXBlID09IEZYX0JTVFJDKCJJbWFnZSIpKSB7CisgICAgICAgIGlmIChtX09wdGlvbnMubV9iVGV4dE9ubHkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBDUERGX0ltYWdlT2JqZWN0KiBwT2JqID0gQWRkSW1hZ2UocFhPYmplY3QsIE5VTEwsIEZBTFNFKTsKKyAgICAgICAgbV9MYXN0SW1hZ2VOYW1lID0gbmFtZTsKKyAgICAgICAgbV9wTGFzdEltYWdlID0gcE9iai0+bV9wSW1hZ2U7CisgICAgfSBlbHNlIGlmICh0eXBlID09IEZYX0JTVFJDKCJGb3JtIikpIHsKKyAgICAgICAgQWRkRm9ybShwWE9iamVjdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpBZGRGb3JtKENQREZfU3RyZWFtKiBwU3RyZWFtKQoreworI2lmICFkZWZpbmVkKF9GUERGQVBJX01JTklfKSB8fCBkZWZpbmVkKF9GWENPUkVfRkVBVFVSRV9BTExfKQorICAgIGlmICghbV9PcHRpb25zLm1fYlNlcGFyYXRlRm9ybSkgeworICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBSZXNvdXJjZXMgPSBwU3RyZWFtLT5HZXREaWN0KCktPkdldERpY3QoRlhfQlNUUkMoIlJlc291cmNlcyIpKTsKKyAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCBmb3JtX21hdHJpeCA9IHBTdHJlYW0tPkdldERpY3QoKS0+R2V0TWF0cml4KEZYX0JTVFJDKCJNYXRyaXgiKSk7CisgICAgICAgIGZvcm1fbWF0cml4LkNvbmNhdChtX3BDdXJTdGF0ZXMtPm1fQ1RNKTsKKyAgICAgICAgQ1BERl9BcnJheSogcEJCb3ggPSBwU3RyZWFtLT5HZXREaWN0KCktPkdldEFycmF5KEZYX0JTVFJDKCJCQm94IikpOworICAgICAgICBDRlhfRmxvYXRSZWN0IGZvcm1fYmJveDsKKyAgICAgICAgQ1BERl9QYXRoIENsaXBQYXRoOworICAgICAgICBpZiAocEJCb3gpIHsKKyAgICAgICAgICAgIGZvcm1fYmJveCA9IHBTdHJlYW0tPkdldERpY3QoKS0+R2V0UmVjdChGWF9CU1RSQygiQkJveCIpKTsKKyAgICAgICAgICAgIENsaXBQYXRoLk5ldygpOworICAgICAgICAgICAgQ2xpcFBhdGguQXBwZW5kUmVjdChmb3JtX2Jib3gubGVmdCwgZm9ybV9iYm94LmJvdHRvbSwgZm9ybV9iYm94LnJpZ2h0LCBmb3JtX2Jib3gudG9wKTsKKyAgICAgICAgICAgIENsaXBQYXRoLlRyYW5zZm9ybSgmZm9ybV9tYXRyaXgpOworICAgICAgICAgICAgZm9ybV9iYm94LlRyYW5zZm9ybSgmZm9ybV9tYXRyaXgpOworICAgICAgICB9CisgICAgICAgIENQREZfU3RyZWFtQ29udGVudFBhcnNlciBwYXJzZXI7CisgICAgICAgIHBhcnNlci5Jbml0aWFsaXplKCk7CisgICAgICAgIHBhcnNlci5QcmVwYXJlUGFyc2UobV9wRG9jdW1lbnQsIG1fcFBhZ2VSZXNvdXJjZXMsIG1fcFJlc291cmNlcywgJm1fbXRDb250ZW50VG9Vc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcE9iamVjdExpc3QsIHBSZXNvdXJjZXMsICZmb3JtX2Jib3gsICZtX09wdGlvbnMsIG1fcEN1clN0YXRlcywgbV9MZXZlbCArIDEpOworICAgICAgICBwYXJzZXIubV9wQ3VyU3RhdGVzLT5tX0NUTSA9IGZvcm1fbWF0cml4OworICAgICAgICBpZiAoQ2xpcFBhdGguTm90TnVsbCgpKSB7CisgICAgICAgICAgICBwYXJzZXIubV9wQ3VyU3RhdGVzLT5tX0NsaXBQYXRoLkFwcGVuZFBhdGgoQ2xpcFBhdGgsIEZYRklMTF9XSU5ESU5HLCBUUlVFKTsKKyAgICAgICAgfQorICAgICAgICBDUERGX1N0cmVhbUFjYyBzdHJlYW07CisgICAgICAgIHN0cmVhbS5Mb2FkQWxsRGF0YShwU3RyZWFtLCBGQUxTRSk7CisgICAgICAgIGlmIChzdHJlYW0uR2V0U2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorI2lmZGVmIF9GUERGQVBJX01JTklfCisgICAgICAgIHBhcnNlci5JbnB1dERhdGEoc3RyZWFtLkdldERhdGEoKSwgc3RyZWFtLkdldFNpemUoKSk7CisgICAgICAgIHBhcnNlci5GaW5pc2goKTsKKyNlbHNlCisgICAgICAgIHBhcnNlci5QYXJzZShzdHJlYW0uR2V0RGF0YSgpLCBzdHJlYW0uR2V0U2l6ZSgpLCAwKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisgICAgQ1BERl9Gb3JtT2JqZWN0KiBwRm9ybU9iaiA9IEZYX05FVyBDUERGX0Zvcm1PYmplY3Q7CisgICAgcEZvcm1PYmotPm1fcEZvcm0gPSBGWF9ORVcgQ1BERl9Gb3JtKG1fcERvY3VtZW50LCBtX3BQYWdlUmVzb3VyY2VzLCBwU3RyZWFtLCBtX3BSZXNvdXJjZXMpOworICAgIHBGb3JtT2JqLT5tX0Zvcm1NYXRyaXggPSBtX3BDdXJTdGF0ZXMtPm1fQ1RNOworICAgIHBGb3JtT2JqLT5tX0Zvcm1NYXRyaXguQ29uY2F0KG1fbXRDb250ZW50VG9Vc2VyKTsKKyAgICBDUERGX0FsbFN0YXRlcyBzdGF0dXM7CisgICAgc3RhdHVzLm1fR2VuZXJhbFN0YXRlID0gbV9wQ3VyU3RhdGVzLT5tX0dlbmVyYWxTdGF0ZTsKKyAgICBzdGF0dXMubV9HcmFwaFN0YXRlID0gbV9wQ3VyU3RhdGVzLT5tX0dyYXBoU3RhdGU7CisgICAgc3RhdHVzLm1fQ29sb3JTdGF0ZSA9IG1fcEN1clN0YXRlcy0+bV9Db2xvclN0YXRlOworICAgIHN0YXR1cy5tX1RleHRTdGF0ZSA9IG1fcEN1clN0YXRlcy0+bV9UZXh0U3RhdGU7CisgICAgcEZvcm1PYmotPm1fcEZvcm0tPlBhcnNlQ29udGVudCgmc3RhdHVzLCBOVUxMLCBOVUxMLCAmbV9PcHRpb25zLCBtX0xldmVsICsgMSk7CisgICAgaWYgKCFtX3BPYmplY3RMaXN0LT5tX2JCYWNrZ3JvdW5kQWxwaGFOZWVkZWQgJiYgcEZvcm1PYmotPm1fcEZvcm0tPm1fYkJhY2tncm91bmRBbHBoYU5lZWRlZCkgeworICAgICAgICBtX3BPYmplY3RMaXN0LT5tX2JCYWNrZ3JvdW5kQWxwaGFOZWVkZWQgPSBUUlVFOworICAgIH0KKyAgICBwRm9ybU9iai0+Q2FsY0JvdW5kaW5nQm94KCk7CisgICAgU2V0R3JhcGhpY1N0YXRlcyhwRm9ybU9iaiwgVFJVRSwgVFJVRSwgVFJVRSk7CisgICAgbV9wT2JqZWN0TGlzdC0+bV9PYmplY3RMaXN0LkFkZFRhaWwocEZvcm1PYmopOworfQorI2lmIGRlZmluZWQoX0ZQREZBUElfTUlOSV8pICYmICFkZWZpbmVkKF9GWENPUkVfRkVBVFVSRV9BTExfKQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkFkZER1cGxpY2F0ZUltYWdlKCkKK3sKKyAgICBGWF9QT1NJVElPTiB0YWlscG9zID0gbV9wT2JqZWN0TGlzdC0+bV9PYmplY3RMaXN0LkdldFRhaWxQb3NpdGlvbigpOworICAgIENQREZfUGFnZU9iamVjdCogcExhc3RPYmogPSAoQ1BERl9QYWdlT2JqZWN0KiltX3BPYmplY3RMaXN0LT5tX09iamVjdExpc3QuR2V0QXQodGFpbHBvcyk7CisgICAgaWYgKHBMYXN0T2JqID09IE5VTEwgfHwgKHBMYXN0T2JqLT5tX1R5cGUgIT0gUERGUEFHRV9JTkxJTkVTICYmIHBMYXN0T2JqLT5tX1R5cGUgIT0gUERGUEFHRV9JTUFHRSkpIHsKKyAgICAgICAgQWRkSW1hZ2UoTlVMTCwgbV9wTGFzdEltYWdlLCBGQUxTRSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHBMYXN0T2JqLT5tX0dlbmVyYWxTdGF0ZSAhPSBtX3BDdXJTdGF0ZXMtPm1fR2VuZXJhbFN0YXRlIHx8CisgICAgICAgICAgICBwTGFzdE9iai0+bV9DbGlwUGF0aCAhPSBtX3BDdXJTdGF0ZXMtPm1fQ2xpcFBhdGggfHwKKyAgICAgICAgICAgIHBMYXN0T2JqLT5tX0NvbG9yU3RhdGUgIT0gbV9wQ3VyU3RhdGVzLT5tX0NvbG9yU3RhdGUpIHsKKyAgICAgICAgQWRkSW1hZ2UoTlVMTCwgbV9wTGFzdEltYWdlLCBGQUxTRSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBJbWFnZU1hdHJpeDsKKyAgICBJbWFnZU1hdHJpeC5Db3B5KG1fcEN1clN0YXRlcy0+bV9DVE0pOworICAgIEltYWdlTWF0cml4LkNvbmNhdChtX210Q29udGVudFRvVXNlcik7CisgICAgaWYgKHBMYXN0T2JqLT5tX1R5cGUgPT0gUERGUEFHRV9JTkxJTkVTKSB7CisgICAgICAgIENQREZfSW5saW5lSW1hZ2VzKiBwSW5saW5lcyA9IChDUERGX0lubGluZUltYWdlcyopcExhc3RPYmo7CisgICAgICAgIGlmIChwSW5saW5lcy0+bV9wU3RyZWFtICE9IG1fcExhc3RJbWFnZS0+R2V0U3RyZWFtKCkpIHsKKyAgICAgICAgICAgIEFkZEltYWdlKE5VTEwsIG1fcExhc3RJbWFnZSwgRkFMU0UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHBJbmxpbmVzLT5BZGRNYXRyaXgoSW1hZ2VNYXRyaXgpOworICAgIH0gZWxzZSB7CisgICAgICAgIENQREZfSW1hZ2VPYmplY3QqIHBJbWFnZU9iaiA9IChDUERGX0ltYWdlT2JqZWN0KilwTGFzdE9iajsKKyAgICAgICAgQ1BERl9JbmxpbmVJbWFnZXMqIHBJbmxpbmVzID0gRlhfTkVXIENQREZfSW5saW5lSW1hZ2VzOworICAgICAgICBwSW5saW5lcy0+bV9wU3RyZWFtID0gbV9wTGFzdEltYWdlLT5HZXRTdHJlYW0oKTsKKyAgICAgICAgU2V0R3JhcGhpY1N0YXRlcyhwSW5saW5lcywgIXBJbmxpbmVzLT5tX3BTdHJlYW0tPkdldERpY3QoKS0+S2V5RXhpc3QoRlhfQlNUUkMoIkNvbG9yU3BhY2UiKSksIEZBTFNFLCBGQUxTRSk7CisgICAgICAgIHBJbmxpbmVzLT5BZGRNYXRyaXgocEltYWdlT2JqLT5tX01hdHJpeCk7CisgICAgICAgIHBJbmxpbmVzLT5BZGRNYXRyaXgoSW1hZ2VNYXRyaXgpOworICAgICAgICBtX3BPYmplY3RMaXN0LT5tX09iamVjdExpc3QuUmVtb3ZlQXQodGFpbHBvcyk7CisgICAgICAgIG1fcE9iamVjdExpc3QtPm1fT2JqZWN0TGlzdC5BZGRUYWlsKHBJbmxpbmVzKTsKKyAgICAgICAgcExhc3RPYmotPlJlbGVhc2UoKTsKKyAgICB9Cit9CisjZW5kaWYKK0NQREZfSW1hZ2VPYmplY3QqIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6QWRkSW1hZ2UoQ1BERl9TdHJlYW0qIHBTdHJlYW0sIENQREZfSW1hZ2UqIHBJbWFnZSwgRlhfQk9PTCBiSW5saW5lKQoreworICAgIGlmIChwU3RyZWFtID09IE5VTEwgJiYgcEltYWdlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENGWF9BZmZpbmVNYXRyaXggSW1hZ2VNYXRyaXg7CisgICAgSW1hZ2VNYXRyaXguQ29weShtX3BDdXJTdGF0ZXMtPm1fQ1RNKTsKKyAgICBJbWFnZU1hdHJpeC5Db25jYXQobV9tdENvbnRlbnRUb1VzZXIpOworICAgIENQREZfSW1hZ2VPYmplY3QqIHBJbWFnZU9iaiA9IEZYX05FVyBDUERGX0ltYWdlT2JqZWN0OworICAgIGlmIChwSW1hZ2UpIHsKKyAgICAgICAgcEltYWdlT2JqLT5tX3BJbWFnZSA9IG1fcERvY3VtZW50LT5HZXRQYWdlRGF0YSgpLT5HZXRJbWFnZShwSW1hZ2UtPkdldFN0cmVhbSgpKTsKKyAgICB9IGVsc2UgaWYgKHBTdHJlYW0tPkdldE9iak51bSgpKSB7CisgICAgICAgIHBJbWFnZU9iai0+bV9wSW1hZ2UgPSBtX3BEb2N1bWVudC0+TG9hZEltYWdlRihwU3RyZWFtKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwSW1hZ2VPYmotPm1fcEltYWdlID0gRlhfTkVXIENQREZfSW1hZ2UobV9wRG9jdW1lbnQpOworICAgICAgICBwSW1hZ2VPYmotPm1fcEltYWdlLT5Mb2FkSW1hZ2VGKHBTdHJlYW0sIGJJbmxpbmUpOworICAgIH0KKyAgICBTZXRHcmFwaGljU3RhdGVzKHBJbWFnZU9iaiwgcEltYWdlT2JqLT5tX3BJbWFnZS0+SXNNYXNrKCksIEZBTFNFLCBGQUxTRSk7CisgICAgcEltYWdlT2JqLT5tX01hdHJpeCA9IEltYWdlTWF0cml4OworICAgIHBJbWFnZU9iai0+Q2FsY0JvdW5kaW5nQm94KCk7CisgICAgbV9wT2JqZWN0TGlzdC0+bV9PYmplY3RMaXN0LkFkZFRhaWwocEltYWdlT2JqKTsKKyAgICByZXR1cm4gcEltYWdlT2JqOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9NYXJrUGxhY2VfRGljdGlvbmFyeSgpCit7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0VuZEltYWdlKCkKK3sKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfRW5kTWFya2VkQ29udGVudCgpCit7CisgICAgaWYgKCFtX09wdGlvbnMubV9iTWFya2VkQ29udGVudCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX0N1ckNvbnRlbnRNYXJrLklzTnVsbCgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IGNvdW50ID0gbV9DdXJDb250ZW50TWFyay5HZXRPYmplY3QoKS0+Q291bnRJdGVtcygpOworICAgIGlmIChjb3VudCA9PSAxKSB7CisgICAgICAgIG1fQ3VyQ29udGVudE1hcmsuU2V0TnVsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fQ3VyQ29udGVudE1hcmsuR2V0TW9kaWZ5KCktPkRlbGV0ZUxhc3RNYXJrKCk7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0VuZFRleHQoKQoreworICAgIGludCBjb3VudCA9IG1fQ2xpcFRleHRMaXN0LkdldFNpemUoKTsKKyAgICBpZiAoY291bnQgPT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX3BDdXJTdGF0ZXMtPm1fVGV4dFN0YXRlLkdldE9iamVjdCgpLT5tX1RleHRNb2RlIDwgNCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpICsrKSB7CisgICAgICAgICAgICBDUERGX1RleHRPYmplY3QqIHBUZXh0ID0gKENQREZfVGV4dE9iamVjdCopbV9DbGlwVGV4dExpc3QuR2V0QXQoaSk7CisgICAgICAgICAgICBpZiAocFRleHQpIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgcFRleHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBtX3BDdXJTdGF0ZXMtPm1fQ2xpcFBhdGguQXBwZW5kVGV4dHMoKENQREZfVGV4dE9iamVjdCoqKW1fQ2xpcFRleHRMaXN0LkdldERhdGEoKSwgY291bnQpOworICAgIH0KKyAgICBtX0NsaXBUZXh0TGlzdC5SZW1vdmVBbGwoKTsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfRW5kU2VjdGlvblVuZGVmaW5lZCgpCit7CisgICAgaWYgKG1fQ29tcGF0Q291bnQpIHsKKyAgICAgICAgbV9Db21wYXRDb3VudCAtLTsKKyAgICB9Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0ZpbGxQYXRoKCkKK3sKKyAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQWRkUGF0aE9iamVjdChGWEZJTExfV0lORElORywgRkFMU0UpOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9GaWxsUGF0aE9sZCgpCit7CisgICAgaWYgKG1fT3B0aW9ucy5tX2JUZXh0T25seSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFkZFBhdGhPYmplY3QoRlhGSUxMX1dJTkRJTkcsIEZBTFNFKTsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfRU9GaWxsUGF0aCgpCit7CisgICAgaWYgKG1fT3B0aW9ucy5tX2JUZXh0T25seSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFkZFBhdGhPYmplY3QoRlhGSUxMX0FMVEVSTkFURSwgRkFMU0UpOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRHcmF5X0ZpbGwoKQoreworICAgIEZYX0ZMT0FUIHZhbHVlID0gR2V0TnVtYmVyKDApOworICAgIENQREZfQ29sb3JTcGFjZSogcENTID0gQ1BERl9Db2xvclNwYWNlOjpHZXRTdG9ja0NTKFBERkNTX0RFVklDRUdSQVkpOworICAgIG1fcEN1clN0YXRlcy0+bV9Db2xvclN0YXRlLlNldEZpbGxDb2xvcihwQ1MsICZ2YWx1ZSwgMSk7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldEdyYXlfU3Ryb2tlKCkKK3sKKyAgICBGWF9GTE9BVCB2YWx1ZSA9IEdldE51bWJlcigwKTsKKyAgICBDUERGX0NvbG9yU3BhY2UqIHBDUyA9IENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19ERVZJQ0VHUkFZKTsKKyAgICBtX3BDdXJTdGF0ZXMtPm1fQ29sb3JTdGF0ZS5TZXRTdHJva2VDb2xvcihwQ1MsICZ2YWx1ZSwgMSk7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldEV4dGVuZEdyYXBoU3RhdGUoKQoreworICAgIENGWF9CeXRlU3RyaW5nIG5hbWUgPSBHZXRTdHJpbmcoMCk7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwR1MgPSAoQ1BERl9EaWN0aW9uYXJ5KilGaW5kUmVzb3VyY2VPYmooRlhfQlNUUkMoIkV4dEdTdGF0ZSIpLCBuYW1lKTsKKyAgICBpZiAocEdTID09IE5VTEwgfHwgcEdTLT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgbV9iUmVzb3VyY2VNaXNzaW5nID0gVFJVRTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3BDdXJTdGF0ZXMtPlByb2Nlc3NFeHRHUyhwR1MsIHRoaXMpOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9DbG9zZVBhdGgoKQoreworICAgIGlmIChtX09wdGlvbnMubV9iVGV4dE9ubHkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9QYXRoUG9pbnRDb3VudCA9PSAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fUGF0aFN0YXJ0WCAhPSBtX1BhdGhDdXJyZW50WCB8fCBtX1BhdGhTdGFydFkgIT0gbV9QYXRoQ3VycmVudFkpIHsKKyAgICAgICAgQWRkUGF0aFBvaW50KG1fUGF0aFN0YXJ0WCwgbV9QYXRoU3RhcnRZLCBGWFBUX0xJTkVUTyB8IEZYUFRfQ0xPU0VGSUdVUkUpOworICAgIH0gZWxzZSBpZiAobV9wUGF0aFBvaW50c1ttX1BhdGhQb2ludENvdW50IC0gMV0ubV9GbGFnICE9IEZYUFRfTU9WRVRPKSB7CisgICAgICAgIG1fcFBhdGhQb2ludHNbbV9QYXRoUG9pbnRDb3VudCAtIDFdLm1fRmxhZyB8PSBGWFBUX0NMT1NFRklHVVJFOworICAgIH0KK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0RmxhdCgpCit7CisjaWYgIWRlZmluZWQoX0ZQREZBUElfTUlOSV8pIHx8IGRlZmluZWQoX0ZYQ09SRV9GRUFUVVJFX0FMTF8pCisgICAgbV9wQ3VyU3RhdGVzLT5tX0dlbmVyYWxTdGF0ZS5HZXRNb2RpZnkoKS0+bV9GbGF0bmVzcyA9IEdldE51bWJlcigwKTsKKyNlbmRpZgorfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9CZWdpbkltYWdlRGF0YSgpCit7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldExpbmVKb2luKCkKK3sKKyAgICBtX3BDdXJTdGF0ZXMtPm1fR3JhcGhTdGF0ZS5HZXRNb2RpZnkoKS0+bV9MaW5lSm9pbiA9IChDRlhfR3JhcGhTdGF0ZURhdGE6OkxpbmVKb2luKUdldEludGVnZXIoMCk7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldExpbmVDYXAoKQoreworICAgIG1fcEN1clN0YXRlcy0+bV9HcmFwaFN0YXRlLkdldE1vZGlmeSgpLT5tX0xpbmVDYXAgPSAoQ0ZYX0dyYXBoU3RhdGVEYXRhOjpMaW5lQ2FwKUdldEludGVnZXIoMCk7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldENNWUtDb2xvcl9GaWxsKCkKK3sKKyAgICBSRVFVSVJFX1BBUkFNUyg0KTsKKyAgICBGWF9GTE9BVCB2YWx1ZXNbNF07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpICsrKSB7CisgICAgICAgIHZhbHVlc1tpXSA9IEdldE51bWJlcigzIC0gaSk7CisgICAgfQorICAgIENQREZfQ29sb3JTcGFjZSogcENTID0gQ1BERl9Db2xvclNwYWNlOjpHZXRTdG9ja0NTKFBERkNTX0RFVklDRUNNWUspOworICAgIG1fcEN1clN0YXRlcy0+bV9Db2xvclN0YXRlLlNldEZpbGxDb2xvcihwQ1MsIHZhbHVlcywgNCk7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldENNWUtDb2xvcl9TdHJva2UoKQoreworICAgIFJFUVVJUkVfUEFSQU1TKDQpOworICAgIEZYX0ZMT0FUIHZhbHVlc1s0XTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkgKyspIHsKKyAgICAgICAgdmFsdWVzW2ldID0gR2V0TnVtYmVyKDMgLSBpKTsKKyAgICB9CisgICAgQ1BERl9Db2xvclNwYWNlKiBwQ1MgPSBDUERGX0NvbG9yU3BhY2U6OkdldFN0b2NrQ1MoUERGQ1NfREVWSUNFQ01ZSyk7CisgICAgbV9wQ3VyU3RhdGVzLT5tX0NvbG9yU3RhdGUuU2V0U3Ryb2tlQ29sb3IocENTLCB2YWx1ZXMsIDQpOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9MaW5lVG8oKQoreworICAgIFJFUVVJUkVfUEFSQU1TKDIpOworICAgIGlmIChtX09wdGlvbnMubV9iVGV4dE9ubHkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBZGRQYXRoUG9pbnQoR2V0TnVtYmVyKDEpLCBHZXROdW1iZXIoMCksIEZYUFRfTElORVRPKTsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfTW92ZVRvKCkKK3sKKyAgICBSRVFVSVJFX1BBUkFNUygyKTsKKyAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7CisjaWZuZGVmIF9GUERGQVBJX01JTklfCisgICAgICAgIG1fcFN5bnRheC0+U2tpcFBhdGhPYmplY3QoKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFkZFBhdGhQb2ludChHZXROdW1iZXIoMSksIEdldE51bWJlcigwKSwgRlhQVF9NT1ZFVE8pOworI2lmbmRlZiBfRlBERkFQSV9NSU5JXworICAgIFBhcnNlUGF0aE9iamVjdCgpOworI2VuZGlmCit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldE1pdGVyTGltaXQoKQoreworICAgIG1fcEN1clN0YXRlcy0+bV9HcmFwaFN0YXRlLkdldE1vZGlmeSgpLT5tX01pdGVyTGltaXQgPSBHZXROdW1iZXIoMCk7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX01hcmtQbGFjZSgpCit7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0VuZFBhdGgoKQoreworICAgIGlmIChtX09wdGlvbnMubV9iVGV4dE9ubHkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBZGRQYXRoT2JqZWN0KDAsIEZBTFNFKTsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2F2ZUdyYXBoU3RhdGUoKQoreworICAgIENQREZfQWxsU3RhdGVzKiBwU3RhdGVzID0gRlhfTkVXIENQREZfQWxsU3RhdGVzOworICAgIHBTdGF0ZXMtPkNvcHkoKm1fcEN1clN0YXRlcyk7CisgICAgbV9TdGF0ZVN0YWNrLkFkZChwU3RhdGVzKTsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfUmVzdG9yZUdyYXBoU3RhdGUoKQoreworICAgIGludCBzaXplID0gbV9TdGF0ZVN0YWNrLkdldFNpemUoKTsKKyAgICBpZiAoc2l6ZSA9PSAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1BERl9BbGxTdGF0ZXMqIHBTdGF0ZXMgPSAoQ1BERl9BbGxTdGF0ZXMqKW1fU3RhdGVTdGFjay5HZXRBdChzaXplIC0gMSk7CisgICAgbV9wQ3VyU3RhdGVzLT5Db3B5KCpwU3RhdGVzKTsKKyAgICBkZWxldGUgcFN0YXRlczsKKyAgICBtX1N0YXRlU3RhY2suUmVtb3ZlQXQoc2l6ZSAtIDEpOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9SZWN0YW5nbGUoKQoreworICAgIGlmIChtX09wdGlvbnMubV9iVGV4dE9ubHkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGWF9GTE9BVCB4ID0gR2V0TnVtYmVyKDMpLCB5ID0gR2V0TnVtYmVyKDIpOworICAgIEZYX0ZMT0FUIHcgPSBHZXROdW1iZXIoMSksIGggPSBHZXROdW1iZXIoMCk7CisgICAgQWRkUGF0aFJlY3QoeCwgeSwgdywgaCk7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6QWRkUGF0aFJlY3QoRlhfRkxPQVQgeCwgRlhfRkxPQVQgeSwgRlhfRkxPQVQgdywgRlhfRkxPQVQgaCkKK3sKKyAgICBBZGRQYXRoUG9pbnQoeCwgeSwgRlhQVF9NT1ZFVE8pOworICAgIEFkZFBhdGhQb2ludCh4ICsgdywgeSwgRlhQVF9MSU5FVE8pOworICAgIEFkZFBhdGhQb2ludCh4ICsgdywgeSArIGgsIEZYUFRfTElORVRPKTsKKyAgICBBZGRQYXRoUG9pbnQoeCwgeSArIGgsIEZYUFRfTElORVRPKTsKKyAgICBBZGRQYXRoUG9pbnQoeCwgeSwgRlhQVF9MSU5FVE8gfCBGWFBUX0NMT1NFRklHVVJFKTsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0UkdCQ29sb3JfRmlsbCgpCit7CisgICAgUkVRVUlSRV9QQVJBTVMoMyk7CisgICAgRlhfRkxPQVQgdmFsdWVzWzNdOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSArKykgeworICAgICAgICB2YWx1ZXNbaV0gPSBHZXROdW1iZXIoMiAtIGkpOworICAgIH0KKyAgICBDUERGX0NvbG9yU3BhY2UqIHBDUyA9IENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19ERVZJQ0VSR0IpOworICAgIG1fcEN1clN0YXRlcy0+bV9Db2xvclN0YXRlLlNldEZpbGxDb2xvcihwQ1MsIHZhbHVlcywgMyk7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldFJHQkNvbG9yX1N0cm9rZSgpCit7CisgICAgUkVRVUlSRV9QQVJBTVMoMyk7CisgICAgRlhfRkxPQVQgdmFsdWVzWzNdOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSArKykgeworICAgICAgICB2YWx1ZXNbaV0gPSBHZXROdW1iZXIoMiAtIGkpOworICAgIH0KKyAgICBDUERGX0NvbG9yU3BhY2UqIHBDUyA9IENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19ERVZJQ0VSR0IpOworICAgIG1fcEN1clN0YXRlcy0+bV9Db2xvclN0YXRlLlNldFN0cm9rZUNvbG9yKHBDUywgdmFsdWVzLCAzKTsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0UmVuZGVySW50ZW50KCkKK3sKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfQ2xvc2VTdHJva2VQYXRoKCkKK3sKKyAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgSGFuZGxlX0Nsb3NlUGF0aCgpOworICAgIEFkZFBhdGhPYmplY3QoMCwgVFJVRSk7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1N0cm9rZVBhdGgoKQoreworICAgIGlmIChtX09wdGlvbnMubV9iVGV4dE9ubHkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBZGRQYXRoT2JqZWN0KDAsIFRSVUUpOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRDb2xvcl9GaWxsKCkKK3sKKyAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfRkxPQVQgdmFsdWVzWzRdOworICAgIGludCBuYXJncyA9IG1fUGFyYW1Db3VudDsKKyAgICBpZiAobmFyZ3MgPiA0KSB7CisgICAgICAgIG5hcmdzID0gNDsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYXJnczsgaSArKykgeworICAgICAgICB2YWx1ZXNbaV0gPSBHZXROdW1iZXIobmFyZ3MgLSBpIC0gMSk7CisgICAgfQorICAgIG1fcEN1clN0YXRlcy0+bV9Db2xvclN0YXRlLlNldEZpbGxDb2xvcihOVUxMLCB2YWx1ZXMsIG5hcmdzKTsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2V0Q29sb3JfU3Ryb2tlKCkKK3sKKyAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfRkxPQVQgdmFsdWVzWzRdOworICAgIGludCBuYXJncyA9IG1fUGFyYW1Db3VudDsKKyAgICBpZiAobmFyZ3MgPiA0KSB7CisgICAgICAgIG5hcmdzID0gNDsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYXJnczsgaSArKykgeworICAgICAgICB2YWx1ZXNbaV0gPSBHZXROdW1iZXIobmFyZ3MgLSBpIC0gMSk7CisgICAgfQorICAgIG1fcEN1clN0YXRlcy0+bV9Db2xvclN0YXRlLlNldFN0cm9rZUNvbG9yKE5VTEwsIHZhbHVlcywgbmFyZ3MpOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRDb2xvclBTX0ZpbGwoKQoreworICAgIGlmIChtX09wdGlvbnMubV9iVGV4dE9ubHkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX09iamVjdCogcExhc3RQYXJhbSA9IEdldE9iamVjdCgwKTsKKyAgICBpZiAocExhc3RQYXJhbSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IG5hcmdzID0gbV9QYXJhbUNvdW50OworICAgIGludCBudmFsdWVzID0gbmFyZ3M7CisgICAgaWYgKHBMYXN0UGFyYW0tPkdldFR5cGUoKSA9PSBQREZPQkpfTkFNRSkgeworICAgICAgICBudmFsdWVzIC0tOworICAgIH0KKyAgICBGWF9GTE9BVCogdmFsdWVzID0gTlVMTDsKKyAgICBpZiAobnZhbHVlcykgeworICAgICAgICB2YWx1ZXMgPSBGWF9BbGxvYyhGWF9GTE9BVCwgbnZhbHVlcyk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnZhbHVlczsgaSArKykgeworICAgICAgICAgICAgdmFsdWVzW2ldID0gR2V0TnVtYmVyKG5hcmdzIC0gaSAtIDEpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChudmFsdWVzICE9IG5hcmdzKSB7CisgICAgICAgIENQREZfUGF0dGVybiogcFBhdHRlcm4gPSBGaW5kUGF0dGVybihHZXRTdHJpbmcoMCksIEZBTFNFKTsKKyAgICAgICAgaWYgKHBQYXR0ZXJuKSB7CisgICAgICAgICAgICBtX3BDdXJTdGF0ZXMtPm1fQ29sb3JTdGF0ZS5TZXRGaWxsUGF0dGVybihwUGF0dGVybiwgdmFsdWVzLCBudmFsdWVzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG1fcEN1clN0YXRlcy0+bV9Db2xvclN0YXRlLlNldEZpbGxDb2xvcihOVUxMLCB2YWx1ZXMsIG52YWx1ZXMpOworICAgIH0KKyAgICBpZiAodmFsdWVzKSB7CisgICAgICAgIEZYX0ZyZWUodmFsdWVzKTsKKyAgICB9Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldENvbG9yUFNfU3Ryb2tlKCkKK3sKKyAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1BERl9PYmplY3QqIHBMYXN0UGFyYW0gPSBHZXRPYmplY3QoMCk7CisgICAgaWYgKHBMYXN0UGFyYW0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludCBuYXJncyA9IG1fUGFyYW1Db3VudDsKKyAgICBpbnQgbnZhbHVlcyA9IG5hcmdzOworICAgIGlmIChwTGFzdFBhcmFtLT5HZXRUeXBlKCkgPT0gUERGT0JKX05BTUUpIHsKKyAgICAgICAgbnZhbHVlcyAtLTsKKyAgICB9CisgICAgRlhfRkxPQVQqIHZhbHVlcyA9IE5VTEw7CisgICAgaWYgKG52YWx1ZXMpIHsKKyAgICAgICAgdmFsdWVzID0gRlhfQWxsb2MoRlhfRkxPQVQsIG52YWx1ZXMpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG52YWx1ZXM7IGkgKyspIHsKKyAgICAgICAgICAgIHZhbHVlc1tpXSA9IEdldE51bWJlcihuYXJncyAtIGkgLSAxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobnZhbHVlcyAhPSBuYXJncykgeworICAgICAgICBDUERGX1BhdHRlcm4qIHBQYXR0ZXJuID0gRmluZFBhdHRlcm4oR2V0U3RyaW5nKDApLCBGQUxTRSk7CisgICAgICAgIGlmIChwUGF0dGVybikgeworICAgICAgICAgICAgbV9wQ3VyU3RhdGVzLT5tX0NvbG9yU3RhdGUuU2V0U3Ryb2tlUGF0dGVybihwUGF0dGVybiwgdmFsdWVzLCBudmFsdWVzKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG1fcEN1clN0YXRlcy0+bV9Db2xvclN0YXRlLlNldFN0cm9rZUNvbG9yKE5VTEwsIHZhbHVlcywgbnZhbHVlcyk7CisgICAgfQorICAgIGlmICh2YWx1ZXMpIHsKKyAgICAgICAgRlhfRnJlZSh2YWx1ZXMpOworICAgIH0KK30KK0NGWF9GbG9hdFJlY3QgX0dldFNoYWRpbmdCQm94KENQREZfU3RyZWFtKiBwU3RyZWFtLCBpbnQgdHlwZSwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfRnVuY3Rpb24qKiBwRnVuY3MsIGludCBuRnVuY3MsIENQREZfQ29sb3JTcGFjZSogcENTKTsKK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfU2hhZGVGaWxsKCkKK3sKKyAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1BERl9QYXR0ZXJuKiBwUGF0dGVybiA9IEZpbmRQYXR0ZXJuKEdldFN0cmluZygwKSwgVFJVRSk7CisgICAgaWYgKHBQYXR0ZXJuID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocFBhdHRlcm4tPm1fUGF0dGVyblR5cGUgIT0gUEFUVEVSTl9TSEFESU5HKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1BERl9TaGFkaW5nUGF0dGVybiogcFNoYWRpbmcgPSAoQ1BERl9TaGFkaW5nUGF0dGVybiopcFBhdHRlcm47CisgICAgaWYgKCFwU2hhZGluZy0+bV9iU2hhZGluZ09iaikgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghcFNoYWRpbmctPkxvYWQoKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfU2hhZGluZ09iamVjdCogcE9iaiA9IEZYX05FVyBDUERGX1NoYWRpbmdPYmplY3Q7CisgICAgcE9iai0+bV9wU2hhZGluZyA9IHBTaGFkaW5nOworICAgIFNldEdyYXBoaWNTdGF0ZXMocE9iaiwgRkFMU0UsIEZBTFNFLCBGQUxTRSk7CisgICAgcE9iai0+bV9NYXRyaXggPSBtX3BDdXJTdGF0ZXMtPm1fQ1RNOworICAgIHBPYmotPm1fTWF0cml4LkNvbmNhdChtX210Q29udGVudFRvVXNlcik7CisgICAgQ0ZYX0Zsb2F0UmVjdCBiYm94OworICAgIGlmICghcE9iai0+bV9DbGlwUGF0aC5Jc051bGwoKSkgeworICAgICAgICBiYm94ID0gcE9iai0+bV9DbGlwUGF0aC5HZXRDbGlwQm94KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmJveCA9IG1fQkJveDsKKyAgICB9CisgICAgaWYgKHBTaGFkaW5nLT5tX1NoYWRpbmdUeXBlID49IDQpIHsKKyAgICAgICAgYmJveC5JbnRlcnNlY3QoX0dldFNoYWRpbmdCQm94KChDUERGX1N0cmVhbSopcFNoYWRpbmctPm1fcFNoYWRpbmdPYmosIHBTaGFkaW5nLT5tX1NoYWRpbmdUeXBlLCAmcE9iai0+bV9NYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU2hhZGluZy0+bV9wRnVuY3Rpb25zLCBwU2hhZGluZy0+bV9uRnVuY3MsIHBTaGFkaW5nLT5tX3BDUykpOworICAgIH0KKyAgICBwT2JqLT5tX0xlZnQgPSBiYm94LmxlZnQ7CisgICAgcE9iai0+bV9SaWdodCA9IGJib3gucmlnaHQ7CisgICAgcE9iai0+bV9Ub3AgPSBiYm94LnRvcDsKKyAgICBwT2JqLT5tX0JvdHRvbSA9IGJib3guYm90dG9tOworICAgIG1fcE9iamVjdExpc3QtPm1fT2JqZWN0TGlzdC5BZGRUYWlsKHBPYmopOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRDaGFyU3BhY2UoKQoreworICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0U3RhdGUuR2V0TW9kaWZ5KCktPm1fQ2hhclNwYWNlID0gR2V0TnVtYmVyKDApOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9Nb3ZlVGV4dFBvaW50KCkKK3sKKyAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dExpbmVYICs9IEdldE51bWJlcigxKTsKKyAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dExpbmVZICs9IEdldE51bWJlcigwKTsKKyAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dFggPSBtX3BDdXJTdGF0ZXMtPm1fVGV4dExpbmVYOworICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0WSA9IG1fcEN1clN0YXRlcy0+bV9UZXh0TGluZVk7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX01vdmVUZXh0UG9pbnRfU2V0TGVhZGluZygpCit7CisgICAgSGFuZGxlX01vdmVUZXh0UG9pbnQoKTsKKyAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dExlYWRpbmcgPSAtR2V0TnVtYmVyKDApOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRGb250KCkKK3sKKyAgICBGWF9GTE9BVCBmcyA9IEdldE51bWJlcigwKTsKKyAgICBpZiAoZnMgPT0gMCkgeworICAgICAgICBmcyA9IG1fRGVmRm9udFNpemU7CisgICAgfQorICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0U3RhdGUuR2V0TW9kaWZ5KCktPm1fRm9udFNpemUgPSBmczsKKyAgICBDUERGX0ZvbnQqIHBGb250ID0gRmluZEZvbnQoR2V0U3RyaW5nKDEpKTsKKyAgICBpZiAocEZvbnQpIHsKKyAgICAgICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRTdGF0ZS5TZXRGb250KHBGb250KTsKKyAgICB9Cit9CitDUERGX09iamVjdCogQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpGaW5kUmVzb3VyY2VPYmooRlhfQlNUUiB0eXBlLCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobV9wUmVzb3VyY2VzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChtX3BSZXNvdXJjZXMgPT0gbV9wUGFnZVJlc291cmNlcykgeworICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBMaXN0ID0gbV9wUmVzb3VyY2VzLT5HZXREaWN0KHR5cGUpOworICAgICAgICBpZiAocExpc3QgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgQ1BERl9PYmplY3QqIHBSZXMgPSBwTGlzdC0+R2V0RWxlbWVudFZhbHVlKG5hbWUpOworICAgICAgICByZXR1cm4gcFJlczsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwTGlzdCA9IG1fcFJlc291cmNlcy0+R2V0RGljdCh0eXBlKTsKKyAgICBpZiAocExpc3QgPT0gTlVMTCkgeworICAgICAgICBpZiAobV9wUGFnZVJlc291cmNlcyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBMaXN0ID0gbV9wUGFnZVJlc291cmNlcy0+R2V0RGljdCh0eXBlKTsKKyAgICAgICAgaWYgKHBMaXN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIENQREZfT2JqZWN0KiBwUmVzID0gcExpc3QtPkdldEVsZW1lbnRWYWx1ZShuYW1lKTsKKyAgICAgICAgcmV0dXJuIHBSZXM7CisgICAgfQorICAgIENQREZfT2JqZWN0KiBwUmVzID0gcExpc3QtPkdldEVsZW1lbnRWYWx1ZShuYW1lKTsKKyAgICByZXR1cm4gcFJlczsKK30KK0NQREZfRm9udCogQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpGaW5kRm9udChjb25zdCBDRlhfQnl0ZVN0cmluZyYgbmFtZSkKK3sKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBGb250RGljdCA9IChDUERGX0RpY3Rpb25hcnkqKUZpbmRSZXNvdXJjZU9iaihGWF9CU1RSQygiRm9udCIpLCBuYW1lKTsKKyAgICBpZiAocEZvbnREaWN0ID09IE5VTEwgfHwgcEZvbnREaWN0LT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgbV9iUmVzb3VyY2VNaXNzaW5nID0gVFJVRTsKKyAgICAgICAgcmV0dXJuIENQREZfRm9udDo6R2V0U3RvY2tGb250KG1fcERvY3VtZW50LCBGWF9CU1RSQygiSGVsdmV0aWNhIikpOworICAgIH0KKyAgICBDUERGX0ZvbnQqIHBGb250ID0gbV9wRG9jdW1lbnQtPkxvYWRGb250KHBGb250RGljdCk7CisgICAgaWYgKHBGb250ICYmIHBGb250LT5HZXRUeXBlM0ZvbnQoKSkgeworICAgICAgICBwRm9udC0+R2V0VHlwZTNGb250KCktPlNldFBhZ2VSZXNvdXJjZXMobV9wUmVzb3VyY2VzKTsKKyAgICAgICAgcEZvbnQtPkdldFR5cGUzRm9udCgpLT5DaGVja1R5cGUzRm9udE1ldHJpY3MoKTsKKyAgICB9CisgICAgcmV0dXJuIHBGb250OworfQorQ1BERl9Db2xvclNwYWNlKiBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkZpbmRDb2xvclNwYWNlKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lID09IEZYX0JTVFJDKCJQYXR0ZXJuIikpIHsKKyAgICAgICAgcmV0dXJuIENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19QQVRURVJOKTsKKyAgICB9CisgICAgaWYgKG5hbWUgPT0gRlhfQlNUUkMoIkRldmljZUdyYXkiKSB8fCBuYW1lID09IEZYX0JTVFJDKCJEZXZpY2VDTVlLIikgfHwgbmFtZSA9PSBGWF9CU1RSQygiRGV2aWNlUkdCIikpIHsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgZGVmbmFtZSA9ICJEZWZhdWx0IjsKKyAgICAgICAgZGVmbmFtZSArPSBuYW1lLk1pZCg3KTsKKyAgICAgICAgQ1BERl9PYmplY3QqIHBEZWZPYmogPSBGaW5kUmVzb3VyY2VPYmooRlhfQlNUUkMoIkNvbG9yU3BhY2UiKSwgZGVmbmFtZSk7CisgICAgICAgIGlmIChwRGVmT2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChuYW1lID09IEZYX0JTVFJDKCJEZXZpY2VHcmF5IikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1BERl9Db2xvclNwYWNlOjpHZXRTdG9ja0NTKFBERkNTX0RFVklDRUdSQVkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5hbWUgPT0gRlhfQlNUUkMoIkRldmljZVJHQiIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19ERVZJQ0VSR0IpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19ERVZJQ0VDTVlLKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9wRG9jdW1lbnQtPkxvYWRDb2xvclNwYWNlKHBEZWZPYmopOworICAgIH0KKyAgICBDUERGX09iamVjdCogcENTT2JqID0gRmluZFJlc291cmNlT2JqKEZYX0JTVFJDKCJDb2xvclNwYWNlIiksIG5hbWUpOworICAgIGlmIChwQ1NPYmogPT0gTlVMTCkgeworICAgICAgICBtX2JSZXNvdXJjZU1pc3NpbmcgPSBUUlVFOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIG1fcERvY3VtZW50LT5Mb2FkQ29sb3JTcGFjZShwQ1NPYmopOworfQorQ1BERl9QYXR0ZXJuKiBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkZpbmRQYXR0ZXJuKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lLCBGWF9CT09MIGJTaGFkaW5nKQoreworICAgIENQREZfT2JqZWN0KiBwUGF0dGVybiA9IEZpbmRSZXNvdXJjZU9iaihiU2hhZGluZyA/IEZYX0JTVFJDKCJTaGFkaW5nIikgOiBGWF9CU1RSQygiUGF0dGVybiIpLCBuYW1lKTsKKyAgICBpZiAocFBhdHRlcm4gPT0gTlVMTCB8fCAocFBhdHRlcm4tPkdldFR5cGUoKSAhPSBQREZPQkpfRElDVElPTkFSWSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUGF0dGVybi0+R2V0VHlwZSgpICE9IFBERk9CSl9TVFJFQU0pKSB7CisgICAgICAgIG1fYlJlc291cmNlTWlzc2luZyA9IFRSVUU7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gbV9wRG9jdW1lbnQtPkxvYWRQYXR0ZXJuKHBQYXR0ZXJuLCBiU2hhZGluZywgJm1fcEN1clN0YXRlcy0+bV9QYXJlbnRNYXRyaXgpOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkNvbnZlcnRUZXh0U3BhY2UoRlhfRkxPQVQmIHgsIEZYX0ZMT0FUJiB5KQoreworICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0TWF0cml4LlRyYW5zZm9ybSh4LCB5LCB4LCB5KTsKKyAgICBDb252ZXJ0VXNlclNwYWNlKHgsIHkpOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkNvbnZlcnRVc2VyU3BhY2UoRlhfRkxPQVQmIHgsIEZYX0ZMT0FUJiB5KQoreworICAgIG1fcEN1clN0YXRlcy0+bV9DVE0uVHJhbnNmb3JtKHgsIHksIHgsIHkpOworICAgIG1fbXRDb250ZW50VG9Vc2VyLlRyYW5zZm9ybSh4LCB5LCB4LCB5KTsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpBZGRUZXh0T2JqZWN0KENGWF9CeXRlU3RyaW5nKiBwU3RycywgRlhfRkxPQVQgZkluaXRLZXJuaW5nLCBGWF9GTE9BVCogcEtlcm5pbmcsIGludCBuc2VncykKK3sKKyAgICBDUERGX0ZvbnQqIHBGb250ID0gbV9wQ3VyU3RhdGVzLT5tX1RleHRTdGF0ZS5HZXRGb250KCk7CisgICAgaWYgKHBGb250ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoZkluaXRLZXJuaW5nICE9IDApIHsKKyAgICAgICAgaWYgKCFwRm9udC0+SXNWZXJ0V3JpdGluZygpKSB7CisgICAgICAgICAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dFggLT0gRlhTWVNfTXVsKGZJbml0S2VybmluZywgbV9wQ3VyU3RhdGVzLT5tX1RleHRTdGF0ZS5HZXRGb250U2l6ZSgpKSAvIDEwMDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dFkgLT0gRlhTWVNfTXVsKGZJbml0S2VybmluZywgbV9wQ3VyU3RhdGVzLT5tX1RleHRTdGF0ZS5HZXRGb250U2l6ZSgpKSAvIDEwMDA7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG5zZWdzID09IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgdGV4dG1vZGU7CisgICAgaWYgKHBGb250LT5HZXRGb250VHlwZSgpID09IFBERkZPTlRfVFlQRTMpIHsKKyAgICAgICAgdGV4dG1vZGUgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHRleHRtb2RlID0gbV9wQ3VyU3RhdGVzLT5tX1RleHRTdGF0ZS5HZXRPYmplY3QoKS0+bV9UZXh0TW9kZTsKKyAgICB9CisgICAgQ1BERl9UZXh0T2JqZWN0KiBwVGV4dCA9IEZYX05FVyBDUERGX1RleHRPYmplY3Q7CisgICAgbV9wTGFzdFRleHRPYmplY3QgPSBwVGV4dDsKKyAgICBTZXRHcmFwaGljU3RhdGVzKHBUZXh0LCBUUlVFLCBUUlVFLCBUUlVFKTsKKyAgICBpZiAodGV4dG1vZGUgJiYgdGV4dG1vZGUgIT0gMyAmJiB0ZXh0bW9kZSAhPSA0ICYmIHRleHRtb2RlICE9IDcpIHsKKyAgICAgICAgRlhfRkxPQVQqIHBDVE0gPSBwVGV4dC0+bV9UZXh0U3RhdGUuR2V0TW9kaWZ5KCktPm1fQ1RNOworICAgICAgICBwQ1RNWzBdID0gbV9wQ3VyU3RhdGVzLT5tX0NUTS5hOworICAgICAgICBwQ1RNWzFdID0gbV9wQ3VyU3RhdGVzLT5tX0NUTS5jOworICAgICAgICBwQ1RNWzJdID0gbV9wQ3VyU3RhdGVzLT5tX0NUTS5iOworICAgICAgICBwQ1RNWzNdID0gbV9wQ3VyU3RhdGVzLT5tX0NUTS5kOworICAgIH0KKyAgICBwVGV4dC0+U2V0U2VnbWVudHMocFN0cnMsIHBLZXJuaW5nLCBuc2Vncyk7CisgICAgcFRleHQtPm1fUG9zWCA9IG1fcEN1clN0YXRlcy0+bV9UZXh0WDsKKyAgICBwVGV4dC0+bV9Qb3NZID0gbV9wQ3VyU3RhdGVzLT5tX1RleHRZICsgbV9wQ3VyU3RhdGVzLT5tX1RleHRSaXNlOworICAgIENvbnZlcnRUZXh0U3BhY2UocFRleHQtPm1fUG9zWCwgcFRleHQtPm1fUG9zWSk7CisgICAgRlhfRkxPQVQgeF9hZHZhbmNlLCB5X2FkdmFuY2U7CisgICAgcFRleHQtPkNhbGNQb3NpdGlvbkRhdGEoJnhfYWR2YW5jZSwgJnlfYWR2YW5jZSwgbV9wQ3VyU3RhdGVzLT5tX1RleHRIb3J6U2NhbGUsIG1fTGV2ZWwpOworICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0WCArPSB4X2FkdmFuY2U7CisgICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRZICs9IHlfYWR2YW5jZTsKKyAgICBpZiAodGV4dG1vZGUgPiAzKSB7CisgICAgICAgIENQREZfVGV4dE9iamVjdCogcENvcHkgPSBGWF9ORVcgQ1BERl9UZXh0T2JqZWN0OworICAgICAgICBwQ29weS0+Q29weShwVGV4dCk7CisgICAgICAgIG1fQ2xpcFRleHRMaXN0LkFkZChwQ29weSk7CisgICAgfQorICAgIG1fcE9iamVjdExpc3QtPm1fT2JqZWN0TGlzdC5BZGRUYWlsKHBUZXh0KTsKKyAgICBpZiAocEtlcm5pbmcgJiYgcEtlcm5pbmdbbnNlZ3MgLSAxXSAhPSAwKSB7CisgICAgICAgIGlmICghcEZvbnQtPklzVmVydFdyaXRpbmcoKSkgeworICAgICAgICAgICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRYIC09IEZYU1lTX011bChwS2VybmluZ1tuc2VncyAtIDFdLCBtX3BDdXJTdGF0ZXMtPm1fVGV4dFN0YXRlLkdldEZvbnRTaXplKCkpIC8gMTAwMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0WSAtPSBGWFNZU19NdWwocEtlcm5pbmdbbnNlZ3MgLSAxXSwgbV9wQ3VyU3RhdGVzLT5tX1RleHRTdGF0ZS5HZXRGb250U2l6ZSgpKSAvIDEwMDA7CisgICAgICAgIH0KKyAgICB9Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1Nob3dUZXh0KCkKK3sKKyAgICBDRlhfQnl0ZVN0cmluZyBzdHIgPSBHZXRTdHJpbmcoMCk7CisgICAgaWYgKHN0ci5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBZGRUZXh0T2JqZWN0KCZzdHIsIDAsIE5VTEwsIDEpOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TaG93VGV4dF9Qb3NpdGlvbmluZygpCit7CisgICAgQ1BERl9BcnJheSogcEFycmF5ID0gR2V0T2JqZWN0KDApLT5HZXRBcnJheSgpOworICAgIGlmIChwQXJyYXkgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludCBuID0gcEFycmF5LT5HZXRDb3VudCgpLCBuc2VncyA9IDAsIGk7CisgICAgZm9yIChpID0gMDsgaSA8IG47IGkgKyspIHsKKyAgICAgICAgQ1BERl9PYmplY3QqIHBPYmogPSBwQXJyYXktPkdldEVsZW1lbnRWYWx1ZShpKTsKKyAgICAgICAgaWYgKHBPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSSU5HKSB7CisgICAgICAgICAgICBuc2VncyArKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobnNlZ3MgPT0gMCkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSArKykgeworICAgICAgICAgICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRYIC09IEZYU1lTX011bChwQXJyYXktPkdldE51bWJlcihpKSwgbV9wQ3VyU3RhdGVzLT5tX1RleHRTdGF0ZS5HZXRGb250U2l6ZSgpKSAvIDEwMDA7CisgICAgICAgIH07CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcqIHBTdHJzOworICAgIEZYX05FV19WRUNUT1IocFN0cnMsIENGWF9CeXRlU3RyaW5nLCBuc2Vncyk7CisgICAgRlhfRkxPQVQqIHBLZXJuaW5nID0gRlhfQWxsb2MoRlhfRkxPQVQsIG5zZWdzKTsKKyAgICBpbnQgaVNlZ21lbnQgPSAwOworICAgIEZYX0ZMT0FUIGZJbml0S2VybmluZyA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IG47IGkgKyspIHsKKyAgICAgICAgQ1BERl9PYmplY3QqIHBPYmogPSBwQXJyYXktPkdldEVsZW1lbnRWYWx1ZShpKTsKKyAgICAgICAgaWYgKHBPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSSU5HKSB7CisgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBzdHIgPSBwT2JqLT5HZXRTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmIChzdHIuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwU3Ryc1tpU2VnbWVudF0gPSBzdHI7CisgICAgICAgICAgICBwS2VybmluZ1tpU2VnbWVudCArK10gPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGlTZWdtZW50ID09IDApIHsKKyAgICAgICAgICAgICAgICBmSW5pdEtlcm5pbmcgKz0gcE9iai0+R2V0TnVtYmVyKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBLZXJuaW5nW2lTZWdtZW50IC0gMV0gKz0gcE9iai0+R2V0TnVtYmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQWRkVGV4dE9iamVjdChwU3RycywgZkluaXRLZXJuaW5nLCBwS2VybmluZywgaVNlZ21lbnQpOworICAgIEZYX0RFTEVURV9WRUNUT1IocFN0cnMsIENGWF9CeXRlU3RyaW5nLCBuc2Vncyk7CisgICAgRlhfRnJlZShwS2VybmluZyk7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldFRleHRMZWFkaW5nKCkKK3sKKyAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dExlYWRpbmcgPSBHZXROdW1iZXIoMCk7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX1NldFRleHRNYXRyaXgoKQoreworICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0TWF0cml4LlNldChHZXROdW1iZXIxNig1KSwgR2V0TnVtYmVyMTYoNCksIEdldE51bWJlcjE2KDMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXROdW1iZXIxNigyKSwgR2V0TnVtYmVyKDEpLCBHZXROdW1iZXIoMCkpOworICAgIE9uQ2hhbmdlVGV4dE1hdHJpeCgpOworICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0WCA9IDA7CisgICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRZID0gMDsKKyAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dExpbmVYID0gMDsKKyAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dExpbmVZID0gMDsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpPbkNoYW5nZVRleHRNYXRyaXgoKQoreworICAgIENGWF9BZmZpbmVNYXRyaXggdGV4dF9tYXRyaXgobV9wQ3VyU3RhdGVzLT5tX1RleHRIb3J6U2NhbGUsIDAuMGYsIDAuMGYsIDEuMGYsIDAuMGYsIDAuMGYpOworICAgIHRleHRfbWF0cml4LkNvbmNhdChtX3BDdXJTdGF0ZXMtPm1fVGV4dE1hdHJpeCk7CisgICAgdGV4dF9tYXRyaXguQ29uY2F0KG1fcEN1clN0YXRlcy0+bV9DVE0pOworICAgIHRleHRfbWF0cml4LkNvbmNhdChtX210Q29udGVudFRvVXNlcik7CisgICAgRlhfRkxPQVQqIHBUZXh0TWF0cml4ID0gbV9wQ3VyU3RhdGVzLT5tX1RleHRTdGF0ZS5HZXRNb2RpZnkoKS0+bV9NYXRyaXg7CisgICAgcFRleHRNYXRyaXhbMF0gPSB0ZXh0X21hdHJpeC5hOworICAgIHBUZXh0TWF0cml4WzFdID0gdGV4dF9tYXRyaXguYzsKKyAgICBwVGV4dE1hdHJpeFsyXSA9IHRleHRfbWF0cml4LmI7CisgICAgcFRleHRNYXRyaXhbM10gPSB0ZXh0X21hdHJpeC5kOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRUZXh0UmVuZGVyTW9kZSgpCit7CisgICAgaW50IG1vZGUgPSBHZXRJbnRlZ2VyKDApOworICAgIGlmIChtb2RlIDwgMCB8fCBtb2RlID4gNykgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0U3RhdGUuR2V0TW9kaWZ5KCktPm1fVGV4dE1vZGUgPSBtb2RlOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRUZXh0UmlzZSgpCit7CisgICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRSaXNlID0gR2V0TnVtYmVyKDApOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRXb3JkU3BhY2UoKQoreworICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0U3RhdGUuR2V0TW9kaWZ5KCktPm1fV29yZFNwYWNlID0gR2V0TnVtYmVyKDApOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRIb3J6U2NhbGUoKQoreworICAgIGlmIChtX1BhcmFtQ291bnQgIT0gMSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcEN1clN0YXRlcy0+bV9UZXh0SG9yelNjYWxlID0gR2V0TnVtYmVyKDApIC8gMTAwOworICAgIE9uQ2hhbmdlVGV4dE1hdHJpeCgpOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9Nb3ZlVG9OZXh0TGluZSgpCit7CisgICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRMaW5lWSAtPSBtX3BDdXJTdGF0ZXMtPm1fVGV4dExlYWRpbmc7CisgICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRYID0gbV9wQ3VyU3RhdGVzLT5tX1RleHRMaW5lWDsKKyAgICBtX3BDdXJTdGF0ZXMtPm1fVGV4dFkgPSBtX3BDdXJTdGF0ZXMtPm1fVGV4dExpbmVZOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9DdXJ2ZVRvXzIzKCkKK3sKKyAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQWRkUGF0aFBvaW50KG1fUGF0aEN1cnJlbnRYLCBtX1BhdGhDdXJyZW50WSwgRlhQVF9CRVpJRVJUTyk7CisgICAgQWRkUGF0aFBvaW50KEdldE51bWJlcigzKSwgR2V0TnVtYmVyKDIpLCBGWFBUX0JFWklFUlRPKTsKKyAgICBBZGRQYXRoUG9pbnQoR2V0TnVtYmVyKDEpLCBHZXROdW1iZXIoMCksIEZYUFRfQkVaSUVSVE8pOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9TZXRMaW5lV2lkdGgoKQoreworICAgIEZYX0ZMT0FUIHdpZHRoID0gR2V0TnVtYmVyKDApOworICAgIG1fcEN1clN0YXRlcy0+bV9HcmFwaFN0YXRlLkdldE1vZGlmeSgpLT5tX0xpbmVXaWR0aCA9IHdpZHRoOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9DbGlwKCkKK3sKKyAgICBtX1BhdGhDbGlwVHlwZSA9IEZYRklMTF9XSU5ESU5HOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9FT0NsaXAoKQoreworICAgIG1fUGF0aENsaXBUeXBlID0gRlhGSUxMX0FMVEVSTkFURTsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfQ3VydmVUb18xMygpCit7CisgICAgaWYgKG1fT3B0aW9ucy5tX2JUZXh0T25seSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFkZFBhdGhQb2ludChHZXROdW1iZXIoMyksIEdldE51bWJlcigyKSwgRlhQVF9CRVpJRVJUTyk7CisgICAgQWRkUGF0aFBvaW50KEdldE51bWJlcigxKSwgR2V0TnVtYmVyKDApLCBGWFBUX0JFWklFUlRPKTsKKyAgICBBZGRQYXRoUG9pbnQoR2V0TnVtYmVyKDEpLCBHZXROdW1iZXIoMCksIEZYUFRfQkVaSUVSVE8pOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9OZXh0TGluZVNob3dUZXh0KCkKK3sKKyAgICBIYW5kbGVfTW92ZVRvTmV4dExpbmUoKTsKKyAgICBIYW5kbGVfU2hvd1RleHQoKTsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfTmV4dExpbmVTaG93VGV4dF9TcGFjZSgpCit7CisgICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRTdGF0ZS5HZXRNb2RpZnkoKS0+bV9Xb3JkU3BhY2UgPSBHZXROdW1iZXIoMik7CisgICAgbV9wQ3VyU3RhdGVzLT5tX1RleHRTdGF0ZS5HZXRNb2RpZnkoKS0+bV9DaGFyU3BhY2UgPSBHZXROdW1iZXIoMSk7CisgICAgSGFuZGxlX05leHRMaW5lU2hvd1RleHQoKTsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpIYW5kbGVfSW52YWxpZCgpCit7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6QWRkUGF0aFBvaW50KEZYX0ZMT0FUIHgsIEZYX0ZMT0FUIHksIGludCBmbGFnKQoreworICAgIG1fUGF0aEN1cnJlbnRYID0geDsKKyAgICBtX1BhdGhDdXJyZW50WSA9IHk7CisgICAgaWYgKGZsYWcgPT0gRlhQVF9NT1ZFVE8pIHsKKyAgICAgICAgbV9QYXRoU3RhcnRYID0geDsKKyAgICAgICAgbV9QYXRoU3RhcnRZID0geTsKKyAgICAgICAgaWYgKG1fUGF0aFBvaW50Q291bnQgJiYgbV9wUGF0aFBvaW50c1ttX1BhdGhQb2ludENvdW50IC0gMV0ubV9GbGFnID09IEZYUFRfTU9WRVRPKSB7CisgICAgICAgICAgICBtX3BQYXRoUG9pbnRzW21fUGF0aFBvaW50Q291bnQgLSAxXS5tX1BvaW50WCA9IHg7CisgICAgICAgICAgICBtX3BQYXRoUG9pbnRzW21fUGF0aFBvaW50Q291bnQgLSAxXS5tX1BvaW50WSA9IHk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fUGF0aFBvaW50Q291bnQgPT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fUGF0aFBvaW50Q291bnQgKys7CisgICAgaWYgKG1fUGF0aFBvaW50Q291bnQgPiBtX1BhdGhBbGxvY1NpemUpIHsKKyAgICAgICAgaW50IG5ld3NpemUgPSBtX1BhdGhQb2ludENvdW50ICsgMjU2OworICAgICAgICBGWF9QQVRIUE9JTlQqIHBOZXdQb2ludHMgPSBGWF9BbGxvYyhGWF9QQVRIUE9JTlQsIG5ld3NpemUpOworICAgICAgICBpZiAobV9QYXRoQWxsb2NTaXplKSB7CisgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihwTmV3UG9pbnRzLCBtX3BQYXRoUG9pbnRzLCBtX1BhdGhBbGxvY1NpemUgKiBzaXplb2YoRlhfUEFUSFBPSU5UKSk7CisgICAgICAgICAgICBGWF9GcmVlKG1fcFBhdGhQb2ludHMpOworICAgICAgICB9CisgICAgICAgIG1fcFBhdGhQb2ludHMgPSBwTmV3UG9pbnRzOworICAgICAgICBtX1BhdGhBbGxvY1NpemUgPSBuZXdzaXplOworICAgIH0KKyAgICBtX3BQYXRoUG9pbnRzW21fUGF0aFBvaW50Q291bnQgLSAxXS5tX0ZsYWcgPSBmbGFnOworICAgIG1fcFBhdGhQb2ludHNbbV9QYXRoUG9pbnRDb3VudCAtIDFdLm1fUG9pbnRYID0geDsKKyAgICBtX3BQYXRoUG9pbnRzW21fUGF0aFBvaW50Q291bnQgLSAxXS5tX1BvaW50WSA9IHk7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6QWRkUGF0aE9iamVjdChpbnQgRmlsbFR5cGUsIEZYX0JPT0wgYlN0cm9rZSkKK3sKKyAgICBpbnQgUGF0aFBvaW50Q291bnQgPSBtX1BhdGhQb2ludENvdW50LCBQYXRoQ2xpcFR5cGUgPSBtX1BhdGhDbGlwVHlwZTsKKyAgICBtX1BhdGhQb2ludENvdW50ID0gMDsKKyAgICBtX1BhdGhDbGlwVHlwZSA9IDA7CisgICAgaWYgKFBhdGhQb2ludENvdW50IDw9IDEpIHsKKyAgICAgICAgaWYgKFBhdGhQb2ludENvdW50ICYmIFBhdGhDbGlwVHlwZSkgeworICAgICAgICAgICAgQ1BERl9QYXRoIHBhdGg7CisgICAgICAgICAgICBwYXRoLk5ldygpLT5BcHBlbmRSZWN0KDAsIDAsIDAsIDApOworICAgICAgICAgICAgbV9wQ3VyU3RhdGVzLT5tX0NsaXBQYXRoLkFwcGVuZFBhdGgocGF0aCwgRlhGSUxMX1dJTkRJTkcsIFRSVUUpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKFBhdGhQb2ludENvdW50ICYmIG1fcFBhdGhQb2ludHNbUGF0aFBvaW50Q291bnQgLSAxXS5tX0ZsYWcgPT0gRlhQVF9NT1ZFVE8pIHsKKyAgICAgICAgUGF0aFBvaW50Q291bnQgLS07CisgICAgfQorICAgIENQREZfUGF0aCBQYXRoOworICAgIENGWF9QYXRoRGF0YSogcFBhdGhEYXRhID0gUGF0aC5OZXcoKTsKKyAgICBwUGF0aERhdGEtPlNldFBvaW50Q291bnQoUGF0aFBvaW50Q291bnQpOworICAgIEZYU1lTX21lbWNweTMyKHBQYXRoRGF0YS0+R2V0UG9pbnRzKCksIG1fcFBhdGhQb2ludHMsIHNpemVvZihGWF9QQVRIUE9JTlQpICogUGF0aFBvaW50Q291bnQpOworICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4ID0gbV9wQ3VyU3RhdGVzLT5tX0NUTTsKKyAgICBtYXRyaXguQ29uY2F0KG1fbXRDb250ZW50VG9Vc2VyKTsKKyAgICBpZiAoYlN0cm9rZSB8fCBGaWxsVHlwZSkgeworICAgICAgICBDUERGX1BhdGhPYmplY3QqIHBQYXRoT2JqID0gRlhfTkVXIENQREZfUGF0aE9iamVjdDsKKyAgICAgICAgcFBhdGhPYmotPm1fYlN0cm9rZSA9IGJTdHJva2U7CisgICAgICAgIHBQYXRoT2JqLT5tX0ZpbGxUeXBlID0gRmlsbFR5cGU7CisgICAgICAgIHBQYXRoT2JqLT5tX1BhdGggPSBQYXRoOworICAgICAgICBwUGF0aE9iai0+bV9NYXRyaXggPSBtYXRyaXg7CisgICAgICAgIFNldEdyYXBoaWNTdGF0ZXMocFBhdGhPYmosIFRSVUUsIEZBTFNFLCBUUlVFKTsKKyAgICAgICAgcFBhdGhPYmotPkNhbGNCb3VuZGluZ0JveCgpOworICAgICAgICBtX3BPYmplY3RMaXN0LT5tX09iamVjdExpc3QuQWRkVGFpbChwUGF0aE9iaik7CisgICAgfQorICAgIGlmIChQYXRoQ2xpcFR5cGUpIHsKKyAgICAgICAgaWYgKCFtYXRyaXguSXNJZGVudGl0eSgpKSB7CisgICAgICAgICAgICBQYXRoLlRyYW5zZm9ybSgmbWF0cml4KTsKKyAgICAgICAgICAgIG1hdHJpeC5TZXRJZGVudGl0eSgpOworICAgICAgICB9CisgICAgICAgIG1fcEN1clN0YXRlcy0+bV9DbGlwUGF0aC5BcHBlbmRQYXRoKFBhdGgsIFBhdGhDbGlwVHlwZSwgVFJVRSk7CisgICAgfQorfQorQ0ZYX0J5dGVTdHJpbmcgX0ZQREZfQnl0ZVN0cmluZ0Zyb21IZXgoQ0ZYX0JpbmFyeUJ1ZiYgc3JjX2J1ZikKK3sKKyAgICBDRlhfQnl0ZVRleHRCdWYgYnVmOworICAgIEZYX0JPT0wgYkZpcnN0ID0gVFJVRTsKKyAgICBpbnQgY29kZSA9IDA7CisgICAgRlhfTFBDQllURSBzdHIgPSBzcmNfYnVmLkdldEJ1ZmZlcigpOworICAgIEZYX0RXT1JEIHNpemUgPSBzcmNfYnVmLkdldFNpemUoKTsKKyAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgeworICAgICAgICBGWF9CWVRFIGNoID0gc3RyW2ldOworICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgeworICAgICAgICAgICAgaWYgKGJGaXJzdCkgeworICAgICAgICAgICAgICAgIGNvZGUgPSAoY2ggLSAnMCcpICogMTY7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvZGUgKz0gY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgYnVmLkFwcGVuZENoYXIoKGNoYXIpY29kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiRmlyc3QgPSAhYkZpcnN0OworICAgICAgICB9IGVsc2UgaWYgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHsKKyAgICAgICAgICAgIGlmIChiRmlyc3QpIHsKKyAgICAgICAgICAgICAgICBjb2RlID0gKGNoIC0gJ0EnICsgMTApICogMTY7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvZGUgKz0gY2ggLSAnQScgKyAxMDsKKyAgICAgICAgICAgICAgICBidWYuQXBwZW5kQ2hhcigoY2hhciljb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJGaXJzdCA9ICFiRmlyc3Q7CisgICAgICAgIH0gZWxzZSBpZiAoY2ggPj0gJ2EnICYmIGNoIDw9ICdmJykgeworICAgICAgICAgICAgaWYgKGJGaXJzdCkgeworICAgICAgICAgICAgICAgIGNvZGUgPSAoY2ggLSAnYScgKyAxMCkgKiAxNjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29kZSArPSBjaCAtICdhJyArIDEwOworICAgICAgICAgICAgICAgIGJ1Zi5BcHBlbmRDaGFyKChjaGFyKWNvZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYkZpcnN0ID0gIWJGaXJzdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWJGaXJzdCkgeworICAgICAgICBidWYuQXBwZW5kQ2hhcigoY2hhciljb2RlKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1Zi5HZXRCeXRlU3RyaW5nKCk7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFnZS9mcGRmX3BhZ2VfcGFyc2VyX25ldy5jcHAgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFnZS9mcGRmX3BhZ2VfcGFyc2VyX25ldy5jcHAKaW5kZXggMmVlYjFmZS4uNTQ0MmY5YiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhZ2UvZnBkZl9wYWdlX3BhcnNlcl9uZXcuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYWdlL2ZwZGZfcGFnZV9wYXJzZXJfbmV3LmNwcApAQCAtMSw4MjIgKzEsODIyIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCINCi0jaW5jbHVkZSAicGFnZWludC5oIg0KLSNpZiBkZWZpbmVkKF9GUERGQVBJX01JTklfKQ0KLWV4dGVybiBjb25zdCBGWF9MUENTVFIgX1BERl9DaGFyVHlwZTsNCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SW5wdXREYXRhKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUpDQotew0KLSAgICBpZiAobV9MZXZlbCA+IF9GUERGX01BWF9GT1JNX0xFVkVMXykgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBzcmNfc2l6ZTsgaSArKykgew0KLSAgICAgICAgaW50IGNoID0gc3JjX2J1ZltpXTsNCi0gICAgICAgIGludCB0eXBlID0gX1BERl9DaGFyVHlwZVtjaF07DQotc3RhcnQ6DQotICAgICAgICBzd2l0Y2ggKG1fV29yZFN0YXRlKSB7DQotICAgICAgICAgICAgY2FzZSAwOg0KLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSAnVycpIHsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09ICdOJykgew0KLSAgICAgICAgICAgICAgICAgICAgbV9Xb3JkU3RhdGUgPSA1Ow0KLSAgICAgICAgICAgICAgICAgICAgbV9wV29yZEJ1ZlswXSA9IGNoOw0KLSAgICAgICAgICAgICAgICAgICAgbV9Xb3JkU2l6ZSA9IDE7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSAnUicpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fV29yZFN0YXRlID0gNDsNCi0gICAgICAgICAgICAgICAgICAgIG1fcFdvcmRCdWZbMF0gPSBjaDsNCi0gICAgICAgICAgICAgICAgICAgIG1fV29yZFNpemUgPSAxOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugc3dpdGNoIChjaCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJy8nOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1dvcmRTdGF0ZSA9IDI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fV29yZFNpemUgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdbJzoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRBcnJheSgpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICddJzoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kQXJyYXkoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnKCc6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fV29yZFN0YXRlID0gNzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdMZXZlbCA9IDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RyaW5nU3RhdGUgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0J1Zi5DbGVhcigpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc8JzoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9Xb3JkU3RhdGUgPSAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc+JzoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9Xb3JkU3RhdGUgPSA4Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICclJzoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9Xb3JkU3RhdGUgPSAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSAxOg0KLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ1xuJyB8fCBjaCA9PSAnXHInKSB7DQotICAgICAgICAgICAgICAgICAgICBtX1dvcmRTdGF0ZSA9IDA7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSAyOg0KLSAgICAgICAgICAgICAgICBpZiAodHlwZSAhPSAnUicgJiYgdHlwZSAhPSAnTicpIHsNCi0gICAgICAgICAgICAgICAgICAgIEVuZE5hbWUoKTsNCi0gICAgICAgICAgICAgICAgICAgIG1fV29yZFN0YXRlID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gc3RhcnQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKG1fV29yZFNpemUgPCAyNTYpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fcFdvcmRCdWZbbV9Xb3JkU2l6ZSsrXSA9IGNoOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgMzoNCi0gICAgICAgICAgICAgICAgaWYgKGNoID09ICc8Jykgew0KLSAgICAgICAgICAgICAgICAgICAgU3RhcnREaWN0KCk7DQotICAgICAgICAgICAgICAgICAgICBtX1dvcmRTdGF0ZSA9IDA7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0J1Zi5DbGVhcigpOw0KLSAgICAgICAgICAgICAgICAgICAgbV9Xb3JkU3RhdGUgPSA2Ow0KLSAgICAgICAgICAgICAgICAgICAgZ290byBzdGFydDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDQ6DQotICAgICAgICAgICAgICAgIGlmICh0eXBlICE9ICdSJyAmJiB0eXBlICE9ICdOJykgew0KLSAgICAgICAgICAgICAgICAgICAgbV9Xb3JkU3RhdGUgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgRW5kS2V5d29yZCgpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fYkFib3J0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgZ290byBzdGFydDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAobV9Xb3JkU2l6ZSA8IDI1Nikgew0KLSAgICAgICAgICAgICAgICAgICAgbV9wV29yZEJ1ZlttX1dvcmRTaXplKytdID0gY2g7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSA1Og0KLSAgICAgICAgICAgICAgICBpZiAodHlwZSAhPSAnTicpIHsNCi0gICAgICAgICAgICAgICAgICAgIEVuZE51bWJlcigpOw0KLSAgICAgICAgICAgICAgICAgICAgbV9Xb3JkU3RhdGUgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgZ290byBzdGFydDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAobV9Xb3JkU2l6ZSA8IDI1Nikgew0KLSAgICAgICAgICAgICAgICAgICAgbV9wV29yZEJ1ZlttX1dvcmRTaXplKytdID0gY2g7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSA2Og0KLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz4nKSB7DQotICAgICAgICAgICAgICAgICAgICBFbmRIZXhTdHJpbmcoKTsNCi0gICAgICAgICAgICAgICAgICAgIG1fV29yZFN0YXRlID0gMDsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fU3RyaW5nQnVmLkFwcGVuZEJ5dGUoY2gpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgNzoNCi0gICAgICAgICAgICAgICAgc3dpdGNoIChtX1N0cmluZ1N0YXRlKSB7DQotICAgICAgICAgICAgICAgICAgICBjYXNlIDA6DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICcpJykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0xldmVsIC0tOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9TdHJpbmdMZXZlbCA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmRTdHJpbmcoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fV29yZFN0YXRlID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RyaW5nQnVmLkFwcGVuZEJ5dGUoJyknKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICcoJykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0xldmVsICsrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0J1Zi5BcHBlbmRCeXRlKCcoJyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnXFwnKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RyaW5nU3RhdGUgPSAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RyaW5nQnVmLkFwcGVuZEJ5dGUoKGNoYXIpY2gpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc3Jykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0VzY0NvZGUgPSBjaCAtICcwJzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdTdGF0ZSA9IDI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ24nKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RyaW5nQnVmLkFwcGVuZEJ5dGUoJ1xuJyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAncicpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdCdWYuQXBwZW5kQnl0ZSgnXHInKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICd0Jykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0J1Zi5BcHBlbmRCeXRlKCdcdCcpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJ2InKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RyaW5nQnVmLkFwcGVuZEJ5dGUoJ1xiJyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnZicpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdCdWYuQXBwZW5kQnl0ZSgnXGYnKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICdcXCcpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdCdWYuQXBwZW5kQnl0ZSgnXFwnKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICcoJykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0J1Zi5BcHBlbmRCeXRlKCcoJyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnKScpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdCdWYuQXBwZW5kQnl0ZSgnKScpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJ1xyJykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ1N0YXRlID0gNDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnXG4nKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdCdWYuQXBwZW5kQnl0ZShjaCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RyaW5nU3RhdGUgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSAyOg0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzcnKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fRXNjQ29kZSA9IG1fRXNjQ29kZSAqIDggKyBjaCAtICcwJzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdTdGF0ZSA9IDM7DQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdCdWYuQXBwZW5kQnl0ZShtX0VzY0NvZGUpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ1N0YXRlID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBzdGFydDsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICBjYXNlIDM6DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnNycpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9Fc2NDb2RlID0gbV9Fc2NDb2RlICogOCArIGNoIC0gJzAnOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0J1Zi5BcHBlbmRCeXRlKG1fRXNjQ29kZSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RyaW5nU3RhdGUgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RyaW5nQnVmLkFwcGVuZEJ5dGUobV9Fc2NDb2RlKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdTdGF0ZSA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc3RhcnQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSA0Og0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RyaW5nU3RhdGUgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCAhPSAnXG4nKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc3RhcnQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgODoNCi0gICAgICAgICAgICAgICAgbV9Xb3JkU3RhdGUgPSAwOw0KLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz4nKSB7DQotICAgICAgICAgICAgICAgICAgICBFbmREaWN0KCk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBnb3RvIHN0YXJ0Ow0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgOToNCi0gICAgICAgICAgICAgICAgc3dpdGNoIChtX0lubGluZUltYWdlU3RhdGUpIHsNCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgMDoNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSAnVycgfHwgdHlwZSA9PSAnRCcpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9JbmxpbmVJbWFnZVN0YXRlID0gMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9JbmxpbmVXaGl0ZUNoYXIgPSBjaDsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0J1Zi5BcHBlbmRCeXRlKGNoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICBjYXNlIDE6DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdCdWYuQXBwZW5kQnl0ZShtX0lubGluZVdoaXRlQ2hhcik7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICdJJykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0lubGluZUltYWdlU3RhdGUgPSAyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fSW5saW5lSW1hZ2VTdGF0ZSA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc3RhcnQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSAyOg0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnRCcpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9JbmxpbmVJbWFnZVN0YXRlID0gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0J1Zi5BcHBlbmRCeXRlKCdJJyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fSW5saW5lSW1hZ2VTdGF0ZSA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc3RhcnQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSAzOg0KLSAgICAgICAgICAgICAgICAgICAgICAgIEVuZEltYWdlRGljdCgpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgMTA6DQotICAgICAgICAgICAgICAgIHN3aXRjaCAobV9JbmxpbmVJbWFnZVN0YXRlKSB7DQotICAgICAgICAgICAgICAgICAgICBjYXNlIDA6DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gJ1cnKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fSW5saW5lSW1hZ2VTdGF0ZSA9IDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fSW5saW5lV2hpdGVDaGFyID0gY2g7DQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9JbWFnZVNyY0J1Zi5BcHBlbmRCeXRlKGNoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICBjYXNlIDE6DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICdFJykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0lubGluZUltYWdlU3RhdGUgPSAyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fSW1hZ2VTcmNCdWYuQXBwZW5kQnl0ZShtX0lubGluZVdoaXRlQ2hhcik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fSW5saW5lSW1hZ2VTdGF0ZSA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc3RhcnQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSAyOg0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnSScpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9JbmxpbmVJbWFnZVN0YXRlID0gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0ltYWdlU3JjQnVmLkFwcGVuZEJ5dGUobV9JbmxpbmVXaGl0ZUNoYXIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0ltYWdlU3JjQnVmLkFwcGVuZEJ5dGUoJ0UnKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9JbmxpbmVJbWFnZVN0YXRlID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBzdGFydDsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICBjYXNlIDM6DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gJ1cnKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZElubGluZUltYWdlKCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9JbWFnZVNyY0J1Zi5BcHBlbmRCeXRlKG1fSW5saW5lV2hpdGVDaGFyKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9JbWFnZVNyY0J1Zi5BcHBlbmRCeXRlKCdFJyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fSW1hZ2VTcmNCdWYuQXBwZW5kQnl0ZSgnSScpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0lubGluZUltYWdlU3RhdGUgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHN0YXJ0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDExOg0KLSAgICAgICAgICAgICAgICBpZiAobV9JbmxpbmVJbWFnZVN0YXRlIDwgbV9JbWFnZVNyY0J1Zi5HZXRTaXplKCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fSW1hZ2VTcmNCdWYuR2V0QnVmZmVyKClbbV9JbmxpbmVJbWFnZVN0YXRlICsrXSA9IGNoOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICdJJykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIEVuZElubGluZUltYWdlKCk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0NCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkZpbmlzaCgpDQotew0KLSAgICBzd2l0Y2ggKG1fV29yZFN0YXRlKSB7DQotICAgICAgICBjYXNlIDA6DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIDE6DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIDI6DQotICAgICAgICAgICAgRW5kTmFtZSgpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSAzOg0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSA0Og0KLSAgICAgICAgICAgIEVuZEtleXdvcmQoKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgNToNCi0gICAgICAgICAgICBFbmROdW1iZXIoKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgNjoNCi0gICAgICAgICAgICBFbmRIZXhTdHJpbmcoKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgNzoNCi0gICAgICAgICAgICBFbmRTdHJpbmcoKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgODoNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgOToNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgMTA6DQotICAgICAgICAgICAgRW5kSW5saW5lSW1hZ2UoKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgfQ0KLSAgICBtX1dvcmRTdGF0ZSA9IDA7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpBZGRDb250YWluZXIoQ1BERl9PYmplY3QqIHBPYmplY3QpDQotew0KLSAgICBpZiAobV9PYmplY3RTaXplKSB7DQotICAgICAgICBtX3BPYmplY3RTdGF0ZVttX09iamVjdFNpemVdID0gU2V0VG9DdXJPYmoocE9iamVjdCk7DQotICAgIH0NCi0gICAgRlhTWVNfYXNzZXJ0KG1fT2JqZWN0U2l6ZSA8IF9GUERGX01BWF9PQkpFQ1RfU1RBQ0tfU0laRV8pOw0KLSAgICBtX3BPYmplY3RTdGFja1ttX09iamVjdFNpemUrK10gPSBwT2JqZWN0Ow0KLX0NCi1GWF9CT09MIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6U2V0VG9DdXJPYmooQ1BERl9PYmplY3QqIHBPYmplY3QpDQotew0KLSAgICBpZiAobV9PYmplY3RTaXplID09IDApIHsNCi0gICAgICAgIEFkZE9iamVjdFBhcmFtKHBPYmplY3QpOw0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgRlhfQk9PTCBiSW5BcnJheU9yRGljdCA9IFRSVUU7DQotICAgIENQREZfT2JqZWN0KiBwQ3VyT2JqID0gbV9wT2JqZWN0U3RhY2tbbV9PYmplY3RTaXplIC0gMV07DQotICAgIGlmIChwQ3VyT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICAoKENQREZfQXJyYXkqKXBDdXJPYmopLT5BZGQocE9iamVjdCwgbV9wRG9jdW1lbnQpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYgKCFtX2JEaWN0TmFtZSAmJiBtX3BEaWN0TmFtZVswXSkgew0KLSAgICAgICAgICAgICgoQ1BERl9EaWN0aW9uYXJ5KilwQ3VyT2JqKS0+U2V0QXQoKEZYX0xQQ1NUUiltX3BEaWN0TmFtZSwgcE9iamVjdCwgbV9wRG9jdW1lbnQpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBiSW5BcnJheU9yRGljdCA9IEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9iRGljdE5hbWUgPSBUUlVFOw0KLSAgICB9DQotICAgIHJldHVybiBiSW5BcnJheU9yRGljdDsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OlN0YXJ0QXJyYXkoKQ0KLXsNCi0gICAgaWYgKG1fT2JqZWN0U2l6ZSkNCi0gICAgICAgIGlmIChtX3BPYmplY3RTdGFja1swXS0+R2V0VHlwZSgpICE9IFBERk9CSl9ESUNUSU9OQVJZICYmIG1fcE9iamVjdFN0YWNrW21fT2JqZWN0U2l6ZSAtIDFdLT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBGWF9ORVcgQ1BERl9BcnJheTsNCi0gICAgQWRkQ29udGFpbmVyKHBBcnJheSk7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpFbmRBcnJheSgpDQotew0KLSAgICBpZiAobV9PYmplY3RTaXplID09IDApIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDUERGX09iamVjdCogcEN1ck9iaiA9IG1fcE9iamVjdFN0YWNrW21fT2JqZWN0U2l6ZSAtIDFdOw0KLSAgICBpZiAocEN1ck9iai0+R2V0VHlwZSgpICE9IFBERk9CSl9BUlJBWSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fT2JqZWN0U2l6ZSAtLTsNCi0gICAgaWYgKG1fT2JqZWN0U2l6ZSA9PSAwKSB7DQotICAgICAgICBBZGRPYmplY3RQYXJhbShwQ3VyT2JqKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGlmICghbV9wT2JqZWN0U3RhdGVbbV9PYmplY3RTaXplXSkgew0KLSAgICAgICAgICAgIHBDdXJPYmotPlJlbGVhc2UoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX3BPYmplY3RTdGF0ZVttX09iamVjdFNpemVdID0gRkFMU0U7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpTdGFydERpY3QoKQ0KLXsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7DQotICAgIEFkZENvbnRhaW5lcihwRGljdCk7DQotICAgIG1fYkRpY3ROYW1lID0gVFJVRTsNCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkVuZERpY3QoKQ0KLXsNCi0gICAgaWYgKG1fT2JqZWN0U2l6ZSA9PSAwKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QqIHBDdXJPYmogPSBtX3BPYmplY3RTdGFja1ttX09iamVjdFNpemUgLSAxXTsNCi0gICAgaWYgKHBDdXJPYmotPkdldFR5cGUoKSAhPSBQREZPQkpfRElDVElPTkFSWSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fT2JqZWN0U2l6ZSAtLTsNCi0gICAgaWYgKG1fT2JqZWN0U2l6ZSA9PSAwKSB7DQotICAgICAgICBBZGRPYmplY3RQYXJhbShwQ3VyT2JqKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGlmICghbV9wT2JqZWN0U3RhdGVbbV9PYmplY3RTaXplXSkgew0KLSAgICAgICAgICAgIHBDdXJPYmotPlJlbGVhc2UoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX3BPYmplY3RTdGF0ZVttX09iamVjdFNpemVdID0gRkFMU0U7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpFbmROYW1lKCkNCi17DQotICAgIGlmIChtX09iamVjdFNpemUgPT0gMCkgew0KLSAgICAgICAgQWRkTmFtZVBhcmFtKChGWF9MUENTVFIpbV9wV29yZEJ1ZiwgbV9Xb3JkU2l6ZSk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QqIHBDdXJPYmogPSBtX3BPYmplY3RTdGFja1ttX09iamVjdFNpemUgLSAxXTsNCi0gICAgaWYgKHBDdXJPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgICgoQ1BERl9BcnJheSopcEN1ck9iaiktPkFkZE5hbWUoQ0ZYX0J5dGVTdHJpbmcobV9wV29yZEJ1ZiwgbV9Xb3JkU2l6ZSkpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYgKG1fYkRpY3ROYW1lKSB7DQotICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wRGljdE5hbWUsIG1fcFdvcmRCdWYsIG1fV29yZFNpemUpOw0KLSAgICAgICAgICAgIG1fcERpY3ROYW1lW21fV29yZFNpemVdID0gMDsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYgKG1fcERpY3ROYW1lWzBdICE9IDApIHsNCi0gICAgICAgICAgICAgICAgKChDUERGX0RpY3Rpb25hcnkqKXBDdXJPYmopLT5TZXRBdE5hbWUoKEZYX0xQQ1NUUiltX3BEaWN0TmFtZSwgQ0ZYX0J5dGVTdHJpbmcobV9wV29yZEJ1ZiwgbV9Xb3JkU2l6ZSkpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIG1fYkRpY3ROYW1lID0gIW1fYkRpY3ROYW1lOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpFbmROdW1iZXIoKQ0KLXsNCi0gICAgaWYgKG1fT2JqZWN0U2l6ZSA9PSAwKSB7DQotICAgICAgICBBZGROdW1iZXJQYXJhbSgoRlhfTFBDU1RSKW1fcFdvcmRCdWYsIG1fV29yZFNpemUpOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfTnVtYmVyICpwT2JqID0gRlhfTkVXIENQREZfTnVtYmVyKENGWF9CeXRlU3RyaW5nQyhtX3BXb3JkQnVmLCBtX1dvcmRTaXplKSk7DQotICAgIGlmICghU2V0VG9DdXJPYmoocE9iaikpIHsNCi0gICAgICAgIHBPYmotPlJlbGVhc2UoKTsNCi0gICAgfQ0KLX0NCi1leHRlcm4gQ0ZYX0J5dGVTdHJpbmcgX0ZQREZfQnl0ZVN0cmluZ0Zyb21IZXgoQ0ZYX0JpbmFyeUJ1ZiYgc3JjX2J1Zik7DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkVuZEhleFN0cmluZygpDQotew0KLSAgICBDUERGX1N0cmluZyAqcE9iaiA9IEZYX05FVyBDUERGX1N0cmluZyhfRlBERl9CeXRlU3RyaW5nRnJvbUhleChtX1N0cmluZ0J1ZiksIFRSVUUpOw0KLSAgICBpZiAoIVNldFRvQ3VyT2JqKHBPYmopKSB7DQotICAgICAgICBwT2JqLT5SZWxlYXNlKCk7DQotICAgIH0NCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkVuZFN0cmluZygpDQotew0KLSAgICBDUERGX1N0cmluZyAqcE9iaiA9IEZYX05FVyBDUERGX1N0cmluZyhtX1N0cmluZ0J1Zi5HZXRCeXRlU3RyaW5nKCkpOw0KLSAgICBpZiAoIVNldFRvQ3VyT2JqKHBPYmopKSB7DQotICAgICAgICBwT2JqLT5SZWxlYXNlKCk7DQotICAgIH0NCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9CZWdpbkltYWdlKHZvaWQpDQotew0KLSAgICBtX1dvcmRTdGF0ZSA9IDk7DQotICAgIG1fSW5saW5lSW1hZ2VTdGF0ZSA9IDA7DQotICAgIG1fU3RyaW5nQnVmLkNsZWFyKCk7DQotfQ0KLXZvaWQgX1BERl9SZXBsYWNlQWJicihDUERGX09iamVjdCogcE9iaik7DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkVuZEltYWdlRGljdCgpDQotew0KLSAgICBpZiAobV9TdHJpbmdCdWYuR2V0U2l6ZSgpICE9IG1fTGFzdEltYWdlRGljdC5HZXRTaXplKCkgfHwNCi0gICAgICAgICAgICBGWFNZU19tZW1jbXAzMihtX1N0cmluZ0J1Zi5HZXRCdWZmZXIoKSwgbV9MYXN0SW1hZ2VEaWN0LkdldEJ1ZmZlcigpLCBtX1N0cmluZ0J1Zi5HZXRTaXplKCkpKSB7DQotICAgICAgICBtX1dvcmRTdGF0ZSA9IDA7DQotICAgICAgICBTdGFydERpY3QoKTsNCi0gICAgICAgIElucHV0RGF0YShtX1N0cmluZ0J1Zi5HZXRCdWZmZXIoKSwgbV9TdHJpbmdCdWYuR2V0U2l6ZSgpKTsNCi0gICAgICAgIEZpbmlzaCgpOw0KLSAgICAgICAgbV9iU2FtZUxhc3REaWN0ID0gRkFMU0U7DQotICAgICAgICBpZiAobV9wTGFzdEltYWdlRGljdCAmJiBtX2JSZWxlYXNlTGFzdERpY3QpIHsNCi0gICAgICAgICAgICBtX3BMYXN0SW1hZ2VEaWN0LT5SZWxlYXNlKCk7DQotICAgICAgICAgICAgbV9wTGFzdEltYWdlRGljdCA9IE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBpZiAoIW1fT2JqZWN0U2l6ZSkgew0KLSAgICAgICAgICAgIG1fSW5saW5lSW1hZ2VTdGF0ZSA9IDA7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wTGFzdEltYWdlRGljdCA9IChDUERGX0RpY3Rpb25hcnkqKW1fcE9iamVjdFN0YWNrWy0tbV9PYmplY3RTaXplXTsNCi0gICAgICAgIG1fYlJlbGVhc2VMYXN0RGljdCA9ICFtX3BPYmplY3RTdGF0ZVttX09iamVjdFNpemVdOw0KLSAgICAgICAgbV9wT2JqZWN0U3RhdGVbbV9PYmplY3RTaXplXSA9IEZBTFNFOw0KLSAgICAgICAgX1BERl9SZXBsYWNlQWJicihtX3BMYXN0SW1hZ2VEaWN0KTsNCi0gICAgICAgIG1fTGFzdEltYWdlRGljdC5UYWtlT3ZlcihtX1N0cmluZ0J1Zik7DQotICAgICAgICBpZiAobV9wTGFzdEltYWdlRGljdC0+S2V5RXhpc3QoRlhfQlNUUkMoIkNvbG9yU3BhY2UiKSkpIHsNCi0gICAgICAgICAgICBDUERGX09iamVjdCogcENTT2JqID0gbV9wTGFzdEltYWdlRGljdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJDb2xvclNwYWNlIikpOw0KLSAgICAgICAgICAgIGlmIChwQ1NPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfTkFNRSkgew0KLSAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBuYW1lID0gcENTT2JqLT5HZXRTdHJpbmcoKTsNCi0gICAgICAgICAgICAgICAgaWYgKG5hbWUgIT0gRlhfQlNUUkMoIkRldmljZVJHQiIpICYmIG5hbWUgIT0gRlhfQlNUUkMoIkRldmljZUdyYXkiKSAmJiBuYW1lICE9IEZYX0JTVFJDKCJEZXZpY2VDTVlLIikpIHsNCi0gICAgICAgICAgICAgICAgICAgIHBDU09iaiA9IEZpbmRSZXNvdXJjZU9iaihGWF9CU1RSQygiQ29sb3JTcGFjZSIpLCBuYW1lKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwQ1NPYmopIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBDU09iai0+R2V0T2JqTnVtKCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcENTT2JqID0gcENTT2JqLT5DbG9uZSgpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3BMYXN0SW1hZ2VEaWN0LT5TZXRBdChGWF9CU1RSQygiQ29sb3JTcGFjZSIpLCBwQ1NPYmosIG1fcERvY3VtZW50KTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1fYlNhbWVMYXN0RGljdCA9IFRSVUU7DQotICAgIH0NCi0gICAgbV9JbWFnZVNyY0J1Zi5DbGVhcigpOw0KLSAgICBpZiAobV9wTGFzdENsb25lSW1hZ2VEaWN0KSB7DQotICAgICAgICBtX3BMYXN0Q2xvbmVJbWFnZURpY3QtPlJlbGVhc2UoKTsNCi0gICAgfQ0KLSAgICBtX3BMYXN0Q2xvbmVJbWFnZURpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KiltX3BMYXN0SW1hZ2VEaWN0LT5DbG9uZSgpOw0KLSAgICBpZiAobV9wTGFzdENsb25lSW1hZ2VEaWN0LT5LZXlFeGlzdChGWF9CU1RSQygiRmlsdGVyIikpKSB7DQotICAgICAgICBtX1dvcmRTdGF0ZSA9IDEwOw0KLSAgICAgICAgbV9JbmxpbmVJbWFnZVN0YXRlID0gMDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGludCB3aWR0aCA9IG1fcExhc3RDbG9uZUltYWdlRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiV2lkdGgiKSk7DQotICAgICAgICBpbnQgaGVpZ2h0ID0gbV9wTGFzdENsb25lSW1hZ2VEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJIZWlnaHQiKSk7DQotICAgICAgICBpbnQgT3JpZ1NpemUgPSAwOw0KLSAgICAgICAgQ1BERl9PYmplY3QqIHBDU09iaiA9IG1fcExhc3RDbG9uZUltYWdlRGljdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJDb2xvclNwYWNlIikpOw0KLSAgICAgICAgaWYgKHBDU09iaiAhPSBOVUxMKSB7DQotICAgICAgICAgICAgaW50IGJwYyA9IG1fcExhc3RDbG9uZUltYWdlRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiQml0c1BlckNvbXBvbmVudCIpKTsNCi0gICAgICAgICAgICBpbnQgbkNvbXBvbmVudHMgPSAxOw0KLSAgICAgICAgICAgIENQREZfQ29sb3JTcGFjZSogcENTID0gbV9wRG9jdW1lbnQtPkxvYWRDb2xvclNwYWNlKHBDU09iaik7DQotICAgICAgICAgICAgaWYgKHBDUyA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIG5Db21wb25lbnRzID0gMzsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBuQ29tcG9uZW50cyA9IHBDUy0+Q291bnRDb21wb25lbnRzKCk7DQotICAgICAgICAgICAgICAgIG1fcERvY3VtZW50LT5HZXRQYWdlRGF0YSgpLT5SZWxlYXNlQ29sb3JTcGFjZShwQ1NPYmopOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpbnQgcGl0Y2ggPSAod2lkdGggKiBicGMgKiBuQ29tcG9uZW50cyArIDcpIC8gODsNCi0gICAgICAgICAgICBPcmlnU2l6ZSA9IHBpdGNoICogaGVpZ2h0Ow0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBPcmlnU2l6ZSA9ICgod2lkdGggKyA3KSAvIDgpICogaGVpZ2h0Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9JbWFnZVNyY0J1Zi5BcHBlbmRCbG9jayhOVUxMLCBPcmlnU2l6ZSk7DQotICAgICAgICBtX1dvcmRTdGF0ZSA9IDExOw0KLSAgICAgICAgbV9JbmxpbmVJbWFnZVN0YXRlID0gMDsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6RW5kSW5saW5lSW1hZ2UoKQ0KLXsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBJbWFnZU1hdHJpeDsNCi0gICAgSW1hZ2VNYXRyaXguQ29weShtX3BDdXJTdGF0ZXMtPm1fQ1RNKTsNCi0gICAgSW1hZ2VNYXRyaXguQ29uY2F0KG1fbXRDb250ZW50VG9Vc2VyKTsNCi0gICAgbV9MYXN0SW1hZ2VEYXRhLkNvcHlEYXRhKG1fSW1hZ2VTcmNCdWYuR2V0QnVmZmVyKCksIG1fSW1hZ2VTcmNCdWYuR2V0U2l6ZSgpKTsNCi0gICAgQ1BERl9TdHJlYW0qIHBTdHJlYW0gPSBDUERGX1N0cmVhbTo6Q3JlYXRlKG1fSW1hZ2VTcmNCdWYuR2V0QnVmZmVyKCksIG1fSW1hZ2VTcmNCdWYuR2V0U2l6ZSgpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcExhc3RDbG9uZUltYWdlRGljdCk7DQotICAgIG1fSW1hZ2VTcmNCdWYuRGV0YWNoQnVmZmVyKCk7DQotICAgIG1fcExhc3RDbG9uZUltYWdlRGljdCA9IE5VTEw7DQotICAgIENQREZfSW5saW5lSW1hZ2VzKiBwSW1hZ2VzID0gRlhfTkVXIENQREZfSW5saW5lSW1hZ2VzOw0KLSAgICBwSW1hZ2VzLT5tX3BTdHJlYW0gPSBwU3RyZWFtOw0KLSAgICBTZXRHcmFwaGljU3RhdGVzKHBJbWFnZXMsICFtX3BMYXN0Q2xvbmVJbWFnZURpY3QtPktleUV4aXN0KEZYX0JTVFJDKCJDb2xvclNwYWNlIikpLCBGQUxTRSwgRkFMU0UpOw0KLSAgICBwSW1hZ2VzLT5BZGRNYXRyaXgoSW1hZ2VNYXRyaXgpOw0KLSAgICBtX3BPYmplY3RMaXN0LT5tX09iamVjdExpc3QuQWRkVGFpbChwSW1hZ2VzKTsNCi0gICAgbV9Xb3JkU3RhdGUgPSAwOw0KLX0NCi0jZGVmaW5lIEZYRFdPUkRfVFJVRSBGWERXT1JEX0ZST01fTFNCRklSU1QoMHg2NTc1NzI3NCkNCi0jZGVmaW5lIEZYRFdPUkRfTlVMTCBGWERXT1JEX0ZST01fTFNCRklSU1QoMHg2YzZjNzU2ZSkNCi0jZGVmaW5lIEZYRFdPUkRfRkFMUyBGWERXT1JEX0ZST01fTFNCRklSU1QoMHg3MzZjNjE2NikNCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6RW5kS2V5d29yZCgpDQotew0KLSAgICBDUERGX09iamVjdCAqcE9iaiA9IE5VTEw7DQotICAgIGlmIChtX1dvcmRTaXplID09IDQpIHsNCi0gICAgICAgIGlmICgqKEZYX0RXT1JEKiltX3BXb3JkQnVmID09IEZYRFdPUkRfVFJVRSkgew0KLSAgICAgICAgICAgIHBPYmogPSBDUERGX0Jvb2xlYW46OkNyZWF0ZShUUlVFKTsNCi0gICAgICAgICAgICBpZiAoIVNldFRvQ3VyT2JqKHBPYmopKSB7DQotICAgICAgICAgICAgICAgIHBPYmotPlJlbGVhc2UoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfSBlbHNlIGlmICgqKEZYX0RXT1JEKiltX3BXb3JkQnVmID09IEZYRFdPUkRfTlVMTCkgew0KLSAgICAgICAgICAgIHBPYmogPSBDUERGX051bGw6OkNyZWF0ZSgpOw0KLSAgICAgICAgICAgIGlmICghU2V0VG9DdXJPYmoocE9iaikpIHsNCi0gICAgICAgICAgICAgICAgcE9iai0+UmVsZWFzZSgpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZiAobV9Xb3JkU2l6ZSA9PSA1KSB7DQotICAgICAgICBpZiAoKihGWF9EV09SRCopbV9wV29yZEJ1ZiA9PSBGWERXT1JEX0ZBTFMgJiYgbV9wV29yZEJ1Zls0XSA9PSAnZScpIHsNCi0gICAgICAgICAgICBwT2JqID0gQ1BERl9Cb29sZWFuOjpDcmVhdGUoRkFMU0UpOw0KLSAgICAgICAgICAgIGlmICghU2V0VG9DdXJPYmoocE9iaikpIHsNCi0gICAgICAgICAgICAgICAgcE9iai0+UmVsZWFzZSgpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9wV29yZEJ1ZlttX1dvcmRTaXplXSA9IDA7DQotICAgIE9uT3BlcmF0b3IoKGNoYXIqKW1fcFdvcmRCdWYpOw0KLSAgICBDbGVhckFsbFBhcmFtcygpOw0KLX0NCi0jZGVmaW5lIFBBR0VQQVJTRV9TVEFHRV9QQVJTRQkJCTINCi0jZGVmaW5lIFBBR0VQQVJTRV9TVEFHRV9DSEVDS0NMSVAJCTMNCi1DUERGX0NvbnRlbnRQYXJzZXI6OkNQREZfQ29udGVudFBhcnNlcigpDQotew0KLSAgICBtX3BQYXJzZXIgPSBOVUxMOw0KLSAgICBtX1N0YXR1cyA9IFJlYWR5Ow0KLSAgICBtX3BTdHJlYW1GaWx0ZXIgPSBOVUxMOw0KLSAgICBtX3BUeXBlM0NoYXIgPSBOVUxMOw0KLX0NCi1DUERGX0NvbnRlbnRQYXJzZXI6On5DUERGX0NvbnRlbnRQYXJzZXIoKQ0KLXsNCi0gICAgQ2xlYXIoKTsNCi19DQotdm9pZCBDUERGX0NvbnRlbnRQYXJzZXI6OkNsZWFyKCkNCi17DQotICAgIGlmIChtX3BQYXJzZXIpIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BQYXJzZXI7DQotICAgIH0NCi0gICAgaWYgKG1fcFN0cmVhbUZpbHRlcikgew0KLSAgICAgICAgZGVsZXRlIG1fcFN0cmVhbUZpbHRlcjsNCi0gICAgfQ0KLSAgICBtX3BQYXJzZXIgPSBOVUxMOw0KLSAgICBtX1N0YXR1cyA9IFJlYWR5Ow0KLX0NCi12b2lkIENQREZfQ29udGVudFBhcnNlcjo6U3RhcnQoQ1BERl9QYWdlKiBwUGFnZSwgQ1BERl9QYXJzZU9wdGlvbnMqIHBPcHRpb25zKQ0KLXsNCi0gICAgaWYgKG1fU3RhdHVzICE9IFJlYWR5IHx8IHBQYWdlID09IE5VTEwgfHwgcFBhZ2UtPm1fcERvY3VtZW50ID09IE5VTEwgfHwgcFBhZ2UtPm1fcEZvcm1EaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIG1fU3RhdHVzID0gRG9uZTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX3BPYmplY3RzID0gcFBhZ2U7DQotICAgIG1fYkZvcm0gPSBGQUxTRTsNCi0gICAgaWYgKHBPcHRpb25zKSB7DQotICAgICAgICBtX09wdGlvbnMgPSAqcE9wdGlvbnM7DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QqIHBDb250ZW50ID0gcFBhZ2UtPm1fcEZvcm1EaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkNvbnRlbnRzIikpOw0KLSAgICBpZiAocENvbnRlbnQgPT0gTlVMTCkgew0KLSAgICAgICAgbV9TdGF0dXMgPSBEb25lOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChwQ29udGVudC0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJFQU0pIHsNCi0gICAgICAgIG1fblN0cmVhbXMgPSAxOw0KLSAgICB9IGVsc2UgaWYgKHBDb250ZW50LT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICBtX25TdHJlYW1zID0gKChDUERGX0FycmF5KilwQ29udGVudCktPkdldENvdW50KCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX1N0YXR1cyA9IERvbmU7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbV9TdGF0dXMgPSBUb0JlQ29udGludWVkOw0KLSAgICBtX0ludGVybmFsU3RhZ2UgPSBQQUdFUEFSU0VfU1RBR0VfUEFSU0U7DQotICAgIG1fQ3VycmVudE9mZnNldCA9IDA7DQotICAgIG1fcFBhcnNlciA9IEZYX05FVyBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI7DQotICAgIG1fcFBhcnNlci0+SW5pdGlhbGl6ZSgpOw0KLSAgICBtX3BQYXJzZXItPlByZXBhcmVQYXJzZShwUGFnZS0+bV9wRG9jdW1lbnQsIHBQYWdlLT5tX3BSZXNvdXJjZXMsIE5VTEwsIE5VTEwsIHBQYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUGFnZS0+bV9wUmVzb3VyY2VzLCAmcFBhZ2UtPm1fQkJveCwgJm1fT3B0aW9ucywgTlVMTCwgMCk7DQotICAgIG1fcFBhcnNlci0+bV9wQ3VyU3RhdGVzLT5tX0NvbG9yU3RhdGUuR2V0TW9kaWZ5KCktPkRlZmF1bHQoKTsNCi19DQotdm9pZCBDUERGX0NvbnRlbnRQYXJzZXI6OlN0YXJ0KENQREZfRm9ybSogcEZvcm0sIENQREZfQWxsU3RhdGVzKiBwR3JhcGhpY1N0YXRlcywgQ0ZYX0FmZmluZU1hdHJpeCogcFBhcmVudE1hdHJpeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9UeXBlM0NoYXIqIHBUeXBlM0NoYXIsIENQREZfUGFyc2VPcHRpb25zKiBwT3B0aW9ucywgaW50IGxldmVsKQ0KLXsNCi0gICAgbV9wVHlwZTNDaGFyID0gcFR5cGUzQ2hhcjsNCi0gICAgbV9wT2JqZWN0cyA9IHBGb3JtOw0KLSAgICBtX2JGb3JtID0gVFJVRTsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBmb3JtX21hdHJpeCA9IHBGb3JtLT5tX3BGb3JtRGljdC0+R2V0TWF0cml4KEZYX0JTVFJDKCJNYXRyaXgiKSk7DQotICAgIGlmIChwR3JhcGhpY1N0YXRlcykgew0KLSAgICAgICAgZm9ybV9tYXRyaXguQ29uY2F0KHBHcmFwaGljU3RhdGVzLT5tX0NUTSk7DQotICAgIH0NCi0gICAgQ1BERl9BcnJheSogcEJCb3ggPSBwRm9ybS0+bV9wRm9ybURpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJCQm94IikpOw0KLSAgICBDRlhfRmxvYXRSZWN0IGZvcm1fYmJveDsNCi0gICAgQ1BERl9QYXRoIENsaXBQYXRoOw0KLSAgICBpZiAocEJCb3gpIHsNCi0gICAgICAgIGZvcm1fYmJveCA9IHBCQm94LT5HZXRSZWN0KCk7DQotICAgICAgICBDbGlwUGF0aC5OZXcoKTsNCi0gICAgICAgIENsaXBQYXRoLkFwcGVuZFJlY3QoZm9ybV9iYm94LmxlZnQsIGZvcm1fYmJveC5ib3R0b20sIGZvcm1fYmJveC5yaWdodCwgZm9ybV9iYm94LnRvcCk7DQotICAgICAgICBDbGlwUGF0aC5UcmFuc2Zvcm0oJmZvcm1fbWF0cml4KTsNCi0gICAgICAgIGlmIChwUGFyZW50TWF0cml4KSB7DQotICAgICAgICAgICAgQ2xpcFBhdGguVHJhbnNmb3JtKHBQYXJlbnRNYXRyaXgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9ybV9iYm94LlRyYW5zZm9ybSgmZm9ybV9tYXRyaXgpOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcFJlc291cmNlcyA9IHBGb3JtLT5tX3BGb3JtRGljdC0+R2V0RGljdChGWF9CU1RSQygiUmVzb3VyY2VzIikpOw0KLSAgICBtX3BQYXJzZXIgPSBGWF9ORVcgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOw0KLSAgICBtX3BQYXJzZXItPkluaXRpYWxpemUoKTsNCi0gICAgbV9wUGFyc2VyLT5QcmVwYXJlUGFyc2UocEZvcm0tPm1fcERvY3VtZW50LCBwRm9ybS0+bV9wUGFnZVJlc291cmNlcywgcEZvcm0tPm1fcFJlc291cmNlcywgcFBhcmVudE1hdHJpeCwgcEZvcm0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBSZXNvdXJjZXMsICZmb3JtX2Jib3gsIHBPcHRpb25zLCBwR3JhcGhpY1N0YXRlcywgbGV2ZWwpOw0KLSAgICBtX3BQYXJzZXItPm1fcEN1clN0YXRlcy0+bV9DVE0gPSBmb3JtX21hdHJpeDsNCi0gICAgaWYgKENsaXBQYXRoLk5vdE51bGwoKSkgew0KLSAgICAgICAgbV9wUGFyc2VyLT5tX3BDdXJTdGF0ZXMtPm1fQ2xpcFBhdGguQXBwZW5kUGF0aChDbGlwUGF0aCwgRlhGSUxMX1dJTkRJTkcsIFRSVUUpOw0KLSAgICB9DQotICAgIGlmIChwRm9ybS0+bV9UcmFuc3BhcmVuY3kgJiBQREZUUkFOU19HUk9VUCkgew0KLSAgICAgICAgQ1BERl9HZW5lcmFsU3RhdGVEYXRhKiBwRGF0YSA9IG1fcFBhcnNlci0+bV9wQ3VyU3RhdGVzLT5tX0dlbmVyYWxTdGF0ZS5HZXRNb2RpZnkoKTsNCi0gICAgICAgIHBEYXRhLT5tX0JsZW5kVHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTDsNCi0gICAgICAgIHBEYXRhLT5tX1N0cm9rZUFscGhhID0gMS4wZjsNCi0gICAgICAgIHBEYXRhLT5tX0ZpbGxBbHBoYSA9IDEuMGY7DQotICAgICAgICBwRGF0YS0+bV9wU29mdE1hc2sgPSBOVUxMOw0KLSAgICB9DQotICAgIG1fcFN0cmVhbUZpbHRlciA9IHBGb3JtLT5tX3BGb3JtU3RyZWFtLT5HZXRTdHJlYW1GaWx0ZXIoKTsNCi0gICAgbV9uU3RyZWFtcyA9IDE7DQotICAgIG1fU3RhdHVzID0gVG9CZUNvbnRpbnVlZDsNCi0gICAgbV9JbnRlcm5hbFN0YWdlID0gUEFHRVBBUlNFX1NUQUdFX1BBUlNFOw0KLSAgICBtX0N1cnJlbnRPZmZzZXQgPSAwOw0KLX0NCi12b2lkIENQREZfQ29udGVudFBhcnNlcjo6Q29udGludWUoSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICB3aGlsZSAobV9TdGF0dXMgPT0gVG9CZUNvbnRpbnVlZCkgew0KLSAgICAgICAgaWYgKG1fSW50ZXJuYWxTdGFnZSA9PSBQQUdFUEFSU0VfU1RBR0VfUEFSU0UpIHsNCi0gICAgICAgICAgICBpZiAobV9wU3RyZWFtRmlsdGVyID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgaWYgKG1fQ3VycmVudE9mZnNldCA9PSBtX25TdHJlYW1zKSB7DQotICAgICAgICAgICAgICAgICAgICBtX0ludGVybmFsU3RhZ2UgPSBQQUdFUEFSU0VfU1RBR0VfQ0hFQ0tDTElQOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fcFR5cGUzQ2hhcikgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcFR5cGUzQ2hhci0+bV9iQ29sb3JlZCA9IG1fcFBhcnNlci0+bV9iQ29sb3JlZDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3BUeXBlM0NoYXItPm1fV2lkdGggPSBGWFNZU19yb3VuZChtX3BQYXJzZXItPm1fVHlwZTNEYXRhWzBdICogMTAwMCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9wVHlwZTNDaGFyLT5tX0JCb3gubGVmdCA9IEZYU1lTX3JvdW5kKG1fcFBhcnNlci0+bV9UeXBlM0RhdGFbMl0gKiAxMDAwKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3BUeXBlM0NoYXItPm1fQkJveC5ib3R0b20gPSBGWFNZU19yb3VuZChtX3BQYXJzZXItPm1fVHlwZTNEYXRhWzNdICogMTAwMCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9wVHlwZTNDaGFyLT5tX0JCb3gucmlnaHQgPSBGWFNZU19yb3VuZChtX3BQYXJzZXItPm1fVHlwZTNEYXRhWzRdICogMTAwMCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9wVHlwZTNDaGFyLT5tX0JCb3gudG9wID0gRlhTWVNfcm91bmQobV9wUGFyc2VyLT5tX1R5cGUzRGF0YVs1XSAqIDEwMDApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcFR5cGUzQ2hhci0+bV9iUGFnZVJlcXVpcmVkID0gbV9wUGFyc2VyLT5tX2JSZXNvdXJjZU1pc3Npbmc7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgbV9wUGFyc2VyOw0KLSAgICAgICAgICAgICAgICAgICAgbV9wUGFyc2VyID0gTlVMTDsNCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIENQREZfT2JqZWN0KiBwQ29udGVudCA9IG1fcE9iamVjdHMtPm1fcEZvcm1EaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkNvbnRlbnRzIikpOw0KLSAgICAgICAgICAgICAgICBpZiAocENvbnRlbnQtPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSRUFNKSB7DQotICAgICAgICAgICAgICAgICAgICBtX3BTdHJlYW1GaWx0ZXIgPSAoKENQREZfU3RyZWFtKilwQ29udGVudCktPkdldFN0cmVhbUZpbHRlcigpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgQ1BERl9TdHJlYW0qIHBTdHJlYW0gPSAoKENQREZfQXJyYXkqKXBDb250ZW50KS0+R2V0U3RyZWFtKG1fQ3VycmVudE9mZnNldCk7DQotICAgICAgICAgICAgICAgICAgICBpZiAocFN0cmVhbSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9DdXJyZW50T2Zmc2V0ICsrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgbV9wU3RyZWFtRmlsdGVyID0gcFN0cmVhbS0+R2V0U3RyZWFtRmlsdGVyKCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgRlhfRFdPUkQgbGVuID0gbV9wU3RyZWFtRmlsdGVyLT5SZWFkQmxvY2sobV9wUGFyc2VyLT5tX3BTdHJlYW1CdWYsIFNUUkVBTV9QQVJTRV9CVUZTSVpFKTsNCi0gICAgICAgICAgICBtX3BQYXJzZXItPklucHV0RGF0YShtX3BQYXJzZXItPm1fcFN0cmVhbUJ1ZiwgbGVuKTsNCi0gICAgICAgICAgICBpZiAobV9wUGFyc2VyLT5tX2JBYm9ydCkgew0KLSAgICAgICAgICAgICAgICBkZWxldGUgbV9wU3RyZWFtRmlsdGVyOw0KLSAgICAgICAgICAgICAgICBtX3BTdHJlYW1GaWx0ZXIgPSBOVUxMOw0KLSAgICAgICAgICAgICAgICBtX1N0YXR1cyA9IERvbmU7DQotICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3BQYXJzZXI7DQotICAgICAgICAgICAgICAgIG1fcFBhcnNlciA9IE5VTEw7DQotICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGxlbiA8IFNUUkVBTV9QQVJTRV9CVUZTSVpFKSB7DQotICAgICAgICAgICAgICAgIG1fcFBhcnNlci0+RmluaXNoKCk7DQotICAgICAgICAgICAgICAgIG1fQ3VycmVudE9mZnNldCArKzsNCi0gICAgICAgICAgICAgICAgZGVsZXRlIG1fcFN0cmVhbUZpbHRlcjsNCi0gICAgICAgICAgICAgICAgbV9wU3RyZWFtRmlsdGVyID0gTlVMTDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKHBQYXVzZSAmJiBwUGF1c2UtPk5lZWRUb1BhdXNlTm93KCkpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX0ludGVybmFsU3RhZ2UgPT0gUEFHRVBBUlNFX1NUQUdFX0NIRUNLQ0xJUCkgew0KLSAgICAgICAgICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fcE9iamVjdHMtPm1fT2JqZWN0TGlzdC5HZXRIZWFkUG9zaXRpb24oKTsNCi0gICAgICAgICAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICAgICAgICAgIENQREZfUGFnZU9iamVjdCogcE9iaiA9IChDUERGX1BhZ2VPYmplY3QqKW1fcE9iamVjdHMtPm1fT2JqZWN0TGlzdC5HZXROZXh0KHBvcyk7DQotICAgICAgICAgICAgICAgIGlmIChwT2JqID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChwT2JqLT5tX0NsaXBQYXRoLklzTnVsbCgpKSB7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAocE9iai0+bV9DbGlwUGF0aC5HZXRQYXRoQ291bnQoKSAhPSAxKSB7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAocE9iai0+bV9DbGlwUGF0aC5HZXRUZXh0Q291bnQoKSkgew0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgQ1BERl9QYXRoIENsaXBQYXRoID0gcE9iai0+bV9DbGlwUGF0aC5HZXRQYXRoKDApOw0KLSAgICAgICAgICAgICAgICBpZiAoIUNsaXBQYXRoLklzUmVjdCgpIHx8IHBPYmotPm1fVHlwZSA9PSBQREZQQUdFX1NIQURJTkcpIHsNCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIENGWF9GbG9hdFJlY3Qgb2xkX3JlY3QoQ2xpcFBhdGguR2V0UG9pbnRYKDApLCBDbGlwUGF0aC5HZXRQb2ludFkoMCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpcFBhdGguR2V0UG9pbnRYKDIpLCBDbGlwUGF0aC5HZXRQb2ludFkoMikpOw0KLSAgICAgICAgICAgICAgICBDRlhfRmxvYXRSZWN0IG9ial9yZWN0KHBPYmotPm1fTGVmdCwgcE9iai0+bV9Cb3R0b20sIHBPYmotPm1fUmlnaHQsIHBPYmotPm1fVG9wKTsNCi0gICAgICAgICAgICAgICAgaWYgKG9sZF9yZWN0LkNvbnRhaW5zKG9ial9yZWN0KSkgew0KLSAgICAgICAgICAgICAgICAgICAgcE9iai0+bV9DbGlwUGF0aC5TZXROdWxsKCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKG1fcE9iamVjdHMtPm1fT2JqZWN0TGlzdC5HZXRDb3VudCgpID09IDEpIHsNCi0gICAgICAgICAgICAgICAgQ1BERl9QYWdlT2JqZWN0KiBwT2JqID0gKENQREZfUGFnZU9iamVjdCopbV9wT2JqZWN0cy0+bV9PYmplY3RMaXN0LkdldEF0KG1fcE9iamVjdHMtPm1fT2JqZWN0TGlzdC5HZXRIZWFkUG9zaXRpb24oKSk7DQotICAgICAgICAgICAgICAgIGlmIChwT2JqICYmIHBPYmotPm1fVHlwZSA9PSBQREZQQUdFX1RFWFQpIHsNCi0gICAgICAgICAgICAgICAgICAgIENQREZfVGV4dE9iamVjdCogcFRleHQgPSAoQ1BERl9UZXh0T2JqZWN0KilwT2JqOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fU3RhdHVzID0gRG9uZTsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgIH0NCi19DQotaW50IENQREZfQ29udGVudFBhcnNlcjo6RXN0aW1hdGVQcm9ncmVzcygpDQotew0KLSAgICBpZiAobV9TdGF0dXMgPT0gUmVhZHkpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGlmIChtX1N0YXR1cyA9PSBEb25lKSB7DQotICAgICAgICByZXR1cm4gMTAwOw0KLSAgICB9DQotICAgIGlmIChtX0ludGVybmFsU3RhZ2UgPT0gUEFHRVBBUlNFX1NUQUdFX0NIRUNLQ0xJUCkgew0KLSAgICAgICAgcmV0dXJuIDkwOw0KLSAgICB9DQotICAgIGlmIChtX3BTdHJlYW1GaWx0ZXIgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIDkwICogbV9DdXJyZW50T2Zmc2V0IC8gbV9uU3RyZWFtczsNCi0gICAgfQ0KLSAgICBpbnQgdG90YWxfcmF3X3NpemUgPSBtX3BTdHJlYW1GaWx0ZXItPkdldFN0cmVhbSgpLT5HZXRSYXdTaXplKCkgKiBtX25TdHJlYW1zOw0KLSAgICBpbnQgcGFyc2VkX3Jhd19zaXplID0gbV9wU3RyZWFtRmlsdGVyLT5HZXRTdHJlYW0oKS0+R2V0UmF3U2l6ZSgpICogbV9DdXJyZW50T2Zmc2V0ICsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG1fcFN0cmVhbUZpbHRlci0+R2V0U3JjUG9zKCk7DQotICAgIHJldHVybiA5MCAqIHBhcnNlZF9yYXdfc2l6ZSAvIHRvdGFsX3Jhd19zaXplOw0KLX0NCi1DUERGX0lubGluZUltYWdlczo6Q1BERl9JbmxpbmVJbWFnZXMoKQ0KLXsNCi0gICAgbV9UeXBlID0gUERGUEFHRV9JTkxJTkVTOw0KLSAgICBtX3BTdHJlYW0gPSBOVUxMOw0KLSAgICBtX3BCaXRtYXAgPSBOVUxMOw0KLX0NCi1DUERGX0lubGluZUltYWdlczo6fkNQREZfSW5saW5lSW1hZ2VzKCkNCi17DQotICAgIGlmIChtX3BTdHJlYW0pIHsNCi0gICAgICAgIG1fcFN0cmVhbS0+UmVsZWFzZSgpOw0KLSAgICB9DQotICAgIGlmIChtX3BCaXRtYXApIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BCaXRtYXA7DQotICAgIH0NCi19DQotdm9pZCBDUERGX0lubGluZUltYWdlczo6QWRkTWF0cml4KENGWF9BZmZpbmVNYXRyaXgmIG1hdHJpeCkNCi17DQotICAgIG1fTWF0cmljZXMuQWRkKG1hdHJpeCk7DQotICAgIENGWF9GbG9hdFJlY3QgcmVjdCA9IG1hdHJpeC5HZXRVbml0UmVjdCgpOw0KLSAgICBpZiAobV9NYXRyaWNlcy5HZXRTaXplKCkgPiAxKSB7DQotICAgICAgICBDRlhfRmxvYXRSZWN0IHJlY3QxKG1fTGVmdCwgbV9Cb3R0b20sIG1fUmlnaHQsIG1fVG9wKTsNCi0gICAgICAgIHJlY3QuVW5pb24ocmVjdDEpOw0KLSAgICB9DQotICAgIG1fTGVmdCA9IHJlY3QubGVmdDsNCi0gICAgbV9SaWdodCA9IHJlY3QucmlnaHQ7DQotICAgIG1fVG9wID0gcmVjdC50b3A7DQotICAgIG1fQm90dG9tID0gcmVjdC5ib3R0b207DQotfQ0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfbW9kdWxlLmgiCisjaW5jbHVkZSAicGFnZWludC5oIgorI2lmIGRlZmluZWQoX0ZQREZBUElfTUlOSV8pCitleHRlcm4gY29uc3QgRlhfTFBDU1RSIF9QREZfQ2hhclR5cGU7Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SW5wdXREYXRhKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUpCit7CisgICAgaWYgKG1fTGV2ZWwgPiBfRlBERl9NQVhfRk9STV9MRVZFTF8pIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgc3JjX3NpemU7IGkgKyspIHsKKyAgICAgICAgaW50IGNoID0gc3JjX2J1ZltpXTsKKyAgICAgICAgaW50IHR5cGUgPSBfUERGX0NoYXJUeXBlW2NoXTsKK3N0YXJ0OgorICAgICAgICBzd2l0Y2ggKG1fV29yZFN0YXRlKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gJ1cnKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09ICdOJykgeworICAgICAgICAgICAgICAgICAgICBtX1dvcmRTdGF0ZSA9IDU7CisgICAgICAgICAgICAgICAgICAgIG1fcFdvcmRCdWZbMF0gPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgbV9Xb3JkU2l6ZSA9IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09ICdSJykgeworICAgICAgICAgICAgICAgICAgICBtX1dvcmRTdGF0ZSA9IDQ7CisgICAgICAgICAgICAgICAgICAgIG1fcFdvcmRCdWZbMF0gPSBjaDsKKyAgICAgICAgICAgICAgICAgICAgbV9Xb3JkU2l6ZSA9IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIHN3aXRjaCAoY2gpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJy8nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fV29yZFN0YXRlID0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1dvcmRTaXplID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1snOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0QXJyYXkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ10nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZEFycmF5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcoJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1dvcmRTdGF0ZSA9IDc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdMZXZlbCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdTdGF0ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdCdWYuQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzwnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fV29yZFN0YXRlID0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJz4nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fV29yZFN0YXRlID0gODsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyUnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fV29yZFN0YXRlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnXG4nIHx8IGNoID09ICdccicpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9Xb3JkU3RhdGUgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBpZiAodHlwZSAhPSAnUicgJiYgdHlwZSAhPSAnTicpIHsKKyAgICAgICAgICAgICAgICAgICAgRW5kTmFtZSgpOworICAgICAgICAgICAgICAgICAgICBtX1dvcmRTdGF0ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gc3RhcnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtX1dvcmRTaXplIDwgMjU2KSB7CisgICAgICAgICAgICAgICAgICAgIG1fcFdvcmRCdWZbbV9Xb3JkU2l6ZSsrXSA9IGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJzwnKSB7CisgICAgICAgICAgICAgICAgICAgIFN0YXJ0RGljdCgpOworICAgICAgICAgICAgICAgICAgICBtX1dvcmRTdGF0ZSA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdCdWYuQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9Xb3JkU3RhdGUgPSA2OworICAgICAgICAgICAgICAgICAgICBnb3RvIHN0YXJ0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICBpZiAodHlwZSAhPSAnUicgJiYgdHlwZSAhPSAnTicpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9Xb3JkU3RhdGUgPSAwOworICAgICAgICAgICAgICAgICAgICBFbmRLZXl3b3JkKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2JBYm9ydCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGdvdG8gc3RhcnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtX1dvcmRTaXplIDwgMjU2KSB7CisgICAgICAgICAgICAgICAgICAgIG1fcFdvcmRCdWZbbV9Xb3JkU2l6ZSsrXSA9IGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICBpZiAodHlwZSAhPSAnTicpIHsKKyAgICAgICAgICAgICAgICAgICAgRW5kTnVtYmVyKCk7CisgICAgICAgICAgICAgICAgICAgIG1fV29yZFN0YXRlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZ290byBzdGFydDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1fV29yZFNpemUgPCAyNTYpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wV29yZEJ1ZlttX1dvcmRTaXplKytdID0gY2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnPicpIHsKKyAgICAgICAgICAgICAgICAgICAgRW5kSGV4U3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIG1fV29yZFN0YXRlID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0J1Zi5BcHBlbmRCeXRlKGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgICAgc3dpdGNoIChtX1N0cmluZ1N0YXRlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnKScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0xldmVsIC0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX1N0cmluZ0xldmVsID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fV29yZFN0YXRlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RyaW5nQnVmLkFwcGVuZEJ5dGUoJyknKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJygnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdMZXZlbCArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0J1Zi5BcHBlbmRCeXRlKCcoJyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ1N0YXRlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdCdWYuQXBwZW5kQnl0ZSgoY2hhciljaCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnNycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0VzY0NvZGUgPSBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ1N0YXRlID0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnbicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0J1Zi5BcHBlbmRCeXRlKCdcbicpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAncicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0J1Zi5BcHBlbmRCeXRlKCdccicpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAndCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0J1Zi5BcHBlbmRCeXRlKCdcdCcpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnYicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0J1Zi5BcHBlbmRCeXRlKCdcYicpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnZicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0J1Zi5BcHBlbmRCeXRlKCdcZicpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdCdWYuQXBwZW5kQnl0ZSgnXFwnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJygnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdCdWYuQXBwZW5kQnl0ZSgnKCcpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnKScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0J1Zi5BcHBlbmRCeXRlKCcpJyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICdccicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ1N0YXRlID0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0J1Zi5BcHBlbmRCeXRlKGNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RyaW5nU3RhdGUgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzcnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9Fc2NDb2RlID0gbV9Fc2NDb2RlICogOCArIGNoIC0gJzAnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RyaW5nU3RhdGUgPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0J1Zi5BcHBlbmRCeXRlKG1fRXNjQ29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdTdGF0ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBzdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc3JykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fRXNjQ29kZSA9IG1fRXNjQ29kZSAqIDggKyBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ0J1Zi5BcHBlbmRCeXRlKG1fRXNjQ29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdTdGF0ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RyaW5nQnVmLkFwcGVuZEJ5dGUobV9Fc2NDb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmluZ1N0YXRlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHN0YXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RyaW5nU3RhdGUgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoICE9ICdcbicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHN0YXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgICAgIG1fV29yZFN0YXRlID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgICAgIEVuZERpY3QoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBnb3RvIHN0YXJ0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgOToKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fSW5saW5lSW1hZ2VTdGF0ZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSAnVycgfHwgdHlwZSA9PSAnRCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0lubGluZUltYWdlU3RhdGUgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fSW5saW5lV2hpdGVDaGFyID0gY2g7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RyaW5nQnVmLkFwcGVuZEJ5dGUoY2gpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RyaW5nQnVmLkFwcGVuZEJ5dGUobV9JbmxpbmVXaGl0ZUNoYXIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICdJJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fSW5saW5lSW1hZ2VTdGF0ZSA9IDI7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fSW5saW5lSW1hZ2VTdGF0ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBzdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ0QnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9JbmxpbmVJbWFnZVN0YXRlID0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJpbmdCdWYuQXBwZW5kQnl0ZSgnSScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fSW5saW5lSW1hZ2VTdGF0ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBzdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgICAgICBFbmRJbWFnZURpY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMTA6CisgICAgICAgICAgICAgICAgc3dpdGNoIChtX0lubGluZUltYWdlU3RhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gJ1cnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9JbmxpbmVJbWFnZVN0YXRlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0lubGluZVdoaXRlQ2hhciA9IGNoOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0ltYWdlU3JjQnVmLkFwcGVuZEJ5dGUoY2gpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnRScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0lubGluZUltYWdlU3RhdGUgPSAyOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0ltYWdlU3JjQnVmLkFwcGVuZEJ5dGUobV9JbmxpbmVXaGl0ZUNoYXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fSW5saW5lSW1hZ2VTdGF0ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBzdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ0knKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9JbmxpbmVJbWFnZVN0YXRlID0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9JbWFnZVNyY0J1Zi5BcHBlbmRCeXRlKG1fSW5saW5lV2hpdGVDaGFyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0ltYWdlU3JjQnVmLkFwcGVuZEJ5dGUoJ0UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0lubGluZUltYWdlU3RhdGUgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gJ1cnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kSW5saW5lSW1hZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9JbWFnZVNyY0J1Zi5BcHBlbmRCeXRlKG1fSW5saW5lV2hpdGVDaGFyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0ltYWdlU3JjQnVmLkFwcGVuZEJ5dGUoJ0UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0ltYWdlU3JjQnVmLkFwcGVuZEJ5dGUoJ0knKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0lubGluZUltYWdlU3RhdGUgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDExOgorICAgICAgICAgICAgICAgIGlmIChtX0lubGluZUltYWdlU3RhdGUgPCBtX0ltYWdlU3JjQnVmLkdldFNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICBtX0ltYWdlU3JjQnVmLkdldEJ1ZmZlcigpW21fSW5saW5lSW1hZ2VTdGF0ZSArK10gPSBjaDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ0knKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBFbmRJbmxpbmVJbWFnZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkZpbmlzaCgpCit7CisgICAgc3dpdGNoIChtX1dvcmRTdGF0ZSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIEVuZE5hbWUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgRW5kS2V5d29yZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgIEVuZE51bWJlcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgIEVuZEhleFN0cmluZygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNzoKKyAgICAgICAgICAgIEVuZFN0cmluZygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDk6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMDoKKyAgICAgICAgICAgIEVuZElubGluZUltYWdlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgbV9Xb3JkU3RhdGUgPSAwOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkFkZENvbnRhaW5lcihDUERGX09iamVjdCogcE9iamVjdCkKK3sKKyAgICBpZiAobV9PYmplY3RTaXplKSB7CisgICAgICAgIG1fcE9iamVjdFN0YXRlW21fT2JqZWN0U2l6ZV0gPSBTZXRUb0N1ck9iaihwT2JqZWN0KTsKKyAgICB9CisgICAgRlhTWVNfYXNzZXJ0KG1fT2JqZWN0U2l6ZSA8IF9GUERGX01BWF9PQkpFQ1RfU1RBQ0tfU0laRV8pOworICAgIG1fcE9iamVjdFN0YWNrW21fT2JqZWN0U2l6ZSsrXSA9IHBPYmplY3Q7Cit9CitGWF9CT09MIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6U2V0VG9DdXJPYmooQ1BERl9PYmplY3QqIHBPYmplY3QpCit7CisgICAgaWYgKG1fT2JqZWN0U2l6ZSA9PSAwKSB7CisgICAgICAgIEFkZE9iamVjdFBhcmFtKHBPYmplY3QpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgRlhfQk9PTCBiSW5BcnJheU9yRGljdCA9IFRSVUU7CisgICAgQ1BERl9PYmplY3QqIHBDdXJPYmogPSBtX3BPYmplY3RTdGFja1ttX09iamVjdFNpemUgLSAxXTsKKyAgICBpZiAocEN1ck9iai0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgeworICAgICAgICAoKENQREZfQXJyYXkqKXBDdXJPYmopLT5BZGQocE9iamVjdCwgbV9wRG9jdW1lbnQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghbV9iRGljdE5hbWUgJiYgbV9wRGljdE5hbWVbMF0pIHsKKyAgICAgICAgICAgICgoQ1BERl9EaWN0aW9uYXJ5KilwQ3VyT2JqKS0+U2V0QXQoKEZYX0xQQ1NUUiltX3BEaWN0TmFtZSwgcE9iamVjdCwgbV9wRG9jdW1lbnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYkluQXJyYXlPckRpY3QgPSBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBtX2JEaWN0TmFtZSA9IFRSVUU7CisgICAgfQorICAgIHJldHVybiBiSW5BcnJheU9yRGljdDsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpTdGFydEFycmF5KCkKK3sKKyAgICBpZiAobV9PYmplY3RTaXplKQorICAgICAgICBpZiAobV9wT2JqZWN0U3RhY2tbMF0tPkdldFR5cGUoKSAhPSBQREZPQkpfRElDVElPTkFSWSAmJiBtX3BPYmplY3RTdGFja1ttX09iamVjdFNpemUgLSAxXS0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgQ1BERl9BcnJheSogcEFycmF5ID0gRlhfTkVXIENQREZfQXJyYXk7CisgICAgQWRkQ29udGFpbmVyKHBBcnJheSk7Cit9Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6RW5kQXJyYXkoKQoreworICAgIGlmIChtX09iamVjdFNpemUgPT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfT2JqZWN0KiBwQ3VyT2JqID0gbV9wT2JqZWN0U3RhY2tbbV9PYmplY3RTaXplIC0gMV07CisgICAgaWYgKHBDdXJPYmotPkdldFR5cGUoKSAhPSBQREZPQkpfQVJSQVkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX09iamVjdFNpemUgLS07CisgICAgaWYgKG1fT2JqZWN0U2l6ZSA9PSAwKSB7CisgICAgICAgIEFkZE9iamVjdFBhcmFtKHBDdXJPYmopOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghbV9wT2JqZWN0U3RhdGVbbV9PYmplY3RTaXplXSkgeworICAgICAgICAgICAgcEN1ck9iai0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgfQorICAgIG1fcE9iamVjdFN0YXRlW21fT2JqZWN0U2l6ZV0gPSBGQUxTRTsKK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpTdGFydERpY3QoKQoreworICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5OworICAgIEFkZENvbnRhaW5lcihwRGljdCk7CisgICAgbV9iRGljdE5hbWUgPSBUUlVFOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkVuZERpY3QoKQoreworICAgIGlmIChtX09iamVjdFNpemUgPT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfT2JqZWN0KiBwQ3VyT2JqID0gbV9wT2JqZWN0U3RhY2tbbV9PYmplY3RTaXplIC0gMV07CisgICAgaWYgKHBDdXJPYmotPkdldFR5cGUoKSAhPSBQREZPQkpfRElDVElPTkFSWSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fT2JqZWN0U2l6ZSAtLTsKKyAgICBpZiAobV9PYmplY3RTaXplID09IDApIHsKKyAgICAgICAgQWRkT2JqZWN0UGFyYW0ocEN1ck9iaik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFtX3BPYmplY3RTdGF0ZVttX09iamVjdFNpemVdKSB7CisgICAgICAgICAgICBwQ3VyT2JqLT5SZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9wT2JqZWN0U3RhdGVbbV9PYmplY3RTaXplXSA9IEZBTFNFOworfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkVuZE5hbWUoKQoreworICAgIGlmIChtX09iamVjdFNpemUgPT0gMCkgeworICAgICAgICBBZGROYW1lUGFyYW0oKEZYX0xQQ1NUUiltX3BXb3JkQnVmLCBtX1dvcmRTaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX09iamVjdCogcEN1ck9iaiA9IG1fcE9iamVjdFN0YWNrW21fT2JqZWN0U2l6ZSAtIDFdOworICAgIGlmIChwQ3VyT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgICgoQ1BERl9BcnJheSopcEN1ck9iaiktPkFkZE5hbWUoQ0ZYX0J5dGVTdHJpbmcobV9wV29yZEJ1ZiwgbV9Xb3JkU2l6ZSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2JEaWN0TmFtZSkgeworICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wRGljdE5hbWUsIG1fcFdvcmRCdWYsIG1fV29yZFNpemUpOworICAgICAgICAgICAgbV9wRGljdE5hbWVbbV9Xb3JkU2l6ZV0gPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fcERpY3ROYW1lWzBdICE9IDApIHsKKyAgICAgICAgICAgICAgICAoKENQREZfRGljdGlvbmFyeSopcEN1ck9iaiktPlNldEF0TmFtZSgoRlhfTFBDU1RSKW1fcERpY3ROYW1lLCBDRlhfQnl0ZVN0cmluZyhtX3BXb3JkQnVmLCBtX1dvcmRTaXplKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9iRGljdE5hbWUgPSAhbV9iRGljdE5hbWU7CisgICAgfQorfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkVuZE51bWJlcigpCit7CisgICAgaWYgKG1fT2JqZWN0U2l6ZSA9PSAwKSB7CisgICAgICAgIEFkZE51bWJlclBhcmFtKChGWF9MUENTVFIpbV9wV29yZEJ1ZiwgbV9Xb3JkU2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1BERl9OdW1iZXIgKnBPYmogPSBGWF9ORVcgQ1BERl9OdW1iZXIoQ0ZYX0J5dGVTdHJpbmdDKG1fcFdvcmRCdWYsIG1fV29yZFNpemUpKTsKKyAgICBpZiAoIVNldFRvQ3VyT2JqKHBPYmopKSB7CisgICAgICAgIHBPYmotPlJlbGVhc2UoKTsKKyAgICB9Cit9CitleHRlcm4gQ0ZYX0J5dGVTdHJpbmcgX0ZQREZfQnl0ZVN0cmluZ0Zyb21IZXgoQ0ZYX0JpbmFyeUJ1ZiYgc3JjX2J1Zik7Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6RW5kSGV4U3RyaW5nKCkKK3sKKyAgICBDUERGX1N0cmluZyAqcE9iaiA9IEZYX05FVyBDUERGX1N0cmluZyhfRlBERl9CeXRlU3RyaW5nRnJvbUhleChtX1N0cmluZ0J1ZiksIFRSVUUpOworICAgIGlmICghU2V0VG9DdXJPYmoocE9iaikpIHsKKyAgICAgICAgcE9iai0+UmVsZWFzZSgpOworICAgIH0KK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpFbmRTdHJpbmcoKQoreworICAgIENQREZfU3RyaW5nICpwT2JqID0gRlhfTkVXIENQREZfU3RyaW5nKG1fU3RyaW5nQnVmLkdldEJ5dGVTdHJpbmcoKSk7CisgICAgaWYgKCFTZXRUb0N1ck9iaihwT2JqKSkgeworICAgICAgICBwT2JqLT5SZWxlYXNlKCk7CisgICAgfQorfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9CZWdpbkltYWdlKHZvaWQpCit7CisgICAgbV9Xb3JkU3RhdGUgPSA5OworICAgIG1fSW5saW5lSW1hZ2VTdGF0ZSA9IDA7CisgICAgbV9TdHJpbmdCdWYuQ2xlYXIoKTsKK30KK3ZvaWQgX1BERl9SZXBsYWNlQWJicihDUERGX09iamVjdCogcE9iaik7Cit2b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6RW5kSW1hZ2VEaWN0KCkKK3sKKyAgICBpZiAobV9TdHJpbmdCdWYuR2V0U2l6ZSgpICE9IG1fTGFzdEltYWdlRGljdC5HZXRTaXplKCkgfHwKKyAgICAgICAgICAgIEZYU1lTX21lbWNtcDMyKG1fU3RyaW5nQnVmLkdldEJ1ZmZlcigpLCBtX0xhc3RJbWFnZURpY3QuR2V0QnVmZmVyKCksIG1fU3RyaW5nQnVmLkdldFNpemUoKSkpIHsKKyAgICAgICAgbV9Xb3JkU3RhdGUgPSAwOworICAgICAgICBTdGFydERpY3QoKTsKKyAgICAgICAgSW5wdXREYXRhKG1fU3RyaW5nQnVmLkdldEJ1ZmZlcigpLCBtX1N0cmluZ0J1Zi5HZXRTaXplKCkpOworICAgICAgICBGaW5pc2goKTsKKyAgICAgICAgbV9iU2FtZUxhc3REaWN0ID0gRkFMU0U7CisgICAgICAgIGlmIChtX3BMYXN0SW1hZ2VEaWN0ICYmIG1fYlJlbGVhc2VMYXN0RGljdCkgeworICAgICAgICAgICAgbV9wTGFzdEltYWdlRGljdC0+UmVsZWFzZSgpOworICAgICAgICAgICAgbV9wTGFzdEltYWdlRGljdCA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFtX09iamVjdFNpemUpIHsKKyAgICAgICAgICAgIG1fSW5saW5lSW1hZ2VTdGF0ZSA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9wTGFzdEltYWdlRGljdCA9IChDUERGX0RpY3Rpb25hcnkqKW1fcE9iamVjdFN0YWNrWy0tbV9PYmplY3RTaXplXTsKKyAgICAgICAgbV9iUmVsZWFzZUxhc3REaWN0ID0gIW1fcE9iamVjdFN0YXRlW21fT2JqZWN0U2l6ZV07CisgICAgICAgIG1fcE9iamVjdFN0YXRlW21fT2JqZWN0U2l6ZV0gPSBGQUxTRTsKKyAgICAgICAgX1BERl9SZXBsYWNlQWJicihtX3BMYXN0SW1hZ2VEaWN0KTsKKyAgICAgICAgbV9MYXN0SW1hZ2VEaWN0LlRha2VPdmVyKG1fU3RyaW5nQnVmKTsKKyAgICAgICAgaWYgKG1fcExhc3RJbWFnZURpY3QtPktleUV4aXN0KEZYX0JTVFJDKCJDb2xvclNwYWNlIikpKSB7CisgICAgICAgICAgICBDUERGX09iamVjdCogcENTT2JqID0gbV9wTGFzdEltYWdlRGljdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJDb2xvclNwYWNlIikpOworICAgICAgICAgICAgaWYgKHBDU09iai0+R2V0VHlwZSgpID09IFBERk9CSl9OQU1FKSB7CisgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgbmFtZSA9IHBDU09iai0+R2V0U3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKG5hbWUgIT0gRlhfQlNUUkMoIkRldmljZVJHQiIpICYmIG5hbWUgIT0gRlhfQlNUUkMoIkRldmljZUdyYXkiKSAmJiBuYW1lICE9IEZYX0JTVFJDKCJEZXZpY2VDTVlLIikpIHsKKyAgICAgICAgICAgICAgICAgICAgcENTT2JqID0gRmluZFJlc291cmNlT2JqKEZYX0JTVFJDKCJDb2xvclNwYWNlIiksIG5hbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAocENTT2JqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBDU09iai0+R2V0T2JqTnVtKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ1NPYmogPSBwQ1NPYmotPkNsb25lKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BMYXN0SW1hZ2VEaWN0LT5TZXRBdChGWF9CU1RSQygiQ29sb3JTcGFjZSIpLCBwQ1NPYmosIG1fcERvY3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG1fYlNhbWVMYXN0RGljdCA9IFRSVUU7CisgICAgfQorICAgIG1fSW1hZ2VTcmNCdWYuQ2xlYXIoKTsKKyAgICBpZiAobV9wTGFzdENsb25lSW1hZ2VEaWN0KSB7CisgICAgICAgIG1fcExhc3RDbG9uZUltYWdlRGljdC0+UmVsZWFzZSgpOworICAgIH0KKyAgICBtX3BMYXN0Q2xvbmVJbWFnZURpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KiltX3BMYXN0SW1hZ2VEaWN0LT5DbG9uZSgpOworICAgIGlmIChtX3BMYXN0Q2xvbmVJbWFnZURpY3QtPktleUV4aXN0KEZYX0JTVFJDKCJGaWx0ZXIiKSkpIHsKKyAgICAgICAgbV9Xb3JkU3RhdGUgPSAxMDsKKyAgICAgICAgbV9JbmxpbmVJbWFnZVN0YXRlID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgd2lkdGggPSBtX3BMYXN0Q2xvbmVJbWFnZURpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIldpZHRoIikpOworICAgICAgICBpbnQgaGVpZ2h0ID0gbV9wTGFzdENsb25lSW1hZ2VEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJIZWlnaHQiKSk7CisgICAgICAgIGludCBPcmlnU2l6ZSA9IDA7CisgICAgICAgIENQREZfT2JqZWN0KiBwQ1NPYmogPSBtX3BMYXN0Q2xvbmVJbWFnZURpY3QtPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiQ29sb3JTcGFjZSIpKTsKKyAgICAgICAgaWYgKHBDU09iaiAhPSBOVUxMKSB7CisgICAgICAgICAgICBpbnQgYnBjID0gbV9wTGFzdENsb25lSW1hZ2VEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJCaXRzUGVyQ29tcG9uZW50IikpOworICAgICAgICAgICAgaW50IG5Db21wb25lbnRzID0gMTsKKyAgICAgICAgICAgIENQREZfQ29sb3JTcGFjZSogcENTID0gbV9wRG9jdW1lbnQtPkxvYWRDb2xvclNwYWNlKHBDU09iaik7CisgICAgICAgICAgICBpZiAocENTID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBuQ29tcG9uZW50cyA9IDM7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG5Db21wb25lbnRzID0gcENTLT5Db3VudENvbXBvbmVudHMoKTsKKyAgICAgICAgICAgICAgICBtX3BEb2N1bWVudC0+R2V0UGFnZURhdGEoKS0+UmVsZWFzZUNvbG9yU3BhY2UocENTT2JqKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBwaXRjaCA9ICh3aWR0aCAqIGJwYyAqIG5Db21wb25lbnRzICsgNykgLyA4OworICAgICAgICAgICAgT3JpZ1NpemUgPSBwaXRjaCAqIGhlaWdodDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE9yaWdTaXplID0gKCh3aWR0aCArIDcpIC8gOCkgKiBoZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgbV9JbWFnZVNyY0J1Zi5BcHBlbmRCbG9jayhOVUxMLCBPcmlnU2l6ZSk7CisgICAgICAgIG1fV29yZFN0YXRlID0gMTE7CisgICAgICAgIG1fSW5saW5lSW1hZ2VTdGF0ZSA9IDA7CisgICAgfQorfQordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkVuZElubGluZUltYWdlKCkKK3sKKyAgICBDRlhfQWZmaW5lTWF0cml4IEltYWdlTWF0cml4OworICAgIEltYWdlTWF0cml4LkNvcHkobV9wQ3VyU3RhdGVzLT5tX0NUTSk7CisgICAgSW1hZ2VNYXRyaXguQ29uY2F0KG1fbXRDb250ZW50VG9Vc2VyKTsKKyAgICBtX0xhc3RJbWFnZURhdGEuQ29weURhdGEobV9JbWFnZVNyY0J1Zi5HZXRCdWZmZXIoKSwgbV9JbWFnZVNyY0J1Zi5HZXRTaXplKCkpOworICAgIENQREZfU3RyZWFtKiBwU3RyZWFtID0gQ1BERl9TdHJlYW06OkNyZWF0ZShtX0ltYWdlU3JjQnVmLkdldEJ1ZmZlcigpLCBtX0ltYWdlU3JjQnVmLkdldFNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcExhc3RDbG9uZUltYWdlRGljdCk7CisgICAgbV9JbWFnZVNyY0J1Zi5EZXRhY2hCdWZmZXIoKTsKKyAgICBtX3BMYXN0Q2xvbmVJbWFnZURpY3QgPSBOVUxMOworICAgIENQREZfSW5saW5lSW1hZ2VzKiBwSW1hZ2VzID0gRlhfTkVXIENQREZfSW5saW5lSW1hZ2VzOworICAgIHBJbWFnZXMtPm1fcFN0cmVhbSA9IHBTdHJlYW07CisgICAgU2V0R3JhcGhpY1N0YXRlcyhwSW1hZ2VzLCAhbV9wTGFzdENsb25lSW1hZ2VEaWN0LT5LZXlFeGlzdChGWF9CU1RSQygiQ29sb3JTcGFjZSIpKSwgRkFMU0UsIEZBTFNFKTsKKyAgICBwSW1hZ2VzLT5BZGRNYXRyaXgoSW1hZ2VNYXRyaXgpOworICAgIG1fcE9iamVjdExpc3QtPm1fT2JqZWN0TGlzdC5BZGRUYWlsKHBJbWFnZXMpOworICAgIG1fV29yZFN0YXRlID0gMDsKK30KKyNkZWZpbmUgRlhEV09SRF9UUlVFIEZYRFdPUkRfRlJPTV9MU0JGSVJTVCgweDY1NzU3Mjc0KQorI2RlZmluZSBGWERXT1JEX05VTEwgRlhEV09SRF9GUk9NX0xTQkZJUlNUKDB4NmM2Yzc1NmUpCisjZGVmaW5lIEZYRFdPUkRfRkFMUyBGWERXT1JEX0ZST01fTFNCRklSU1QoMHg3MzZjNjE2NikKK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpFbmRLZXl3b3JkKCkKK3sKKyAgICBDUERGX09iamVjdCAqcE9iaiA9IE5VTEw7CisgICAgaWYgKG1fV29yZFNpemUgPT0gNCkgeworICAgICAgICBpZiAoKihGWF9EV09SRCopbV9wV29yZEJ1ZiA9PSBGWERXT1JEX1RSVUUpIHsKKyAgICAgICAgICAgIHBPYmogPSBDUERGX0Jvb2xlYW46OkNyZWF0ZShUUlVFKTsKKyAgICAgICAgICAgIGlmICghU2V0VG9DdXJPYmoocE9iaikpIHsKKyAgICAgICAgICAgICAgICBwT2JqLT5SZWxlYXNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoKihGWF9EV09SRCopbV9wV29yZEJ1ZiA9PSBGWERXT1JEX05VTEwpIHsKKyAgICAgICAgICAgIHBPYmogPSBDUERGX051bGw6OkNyZWF0ZSgpOworICAgICAgICAgICAgaWYgKCFTZXRUb0N1ck9iaihwT2JqKSkgeworICAgICAgICAgICAgICAgIHBPYmotPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9Xb3JkU2l6ZSA9PSA1KSB7CisgICAgICAgIGlmICgqKEZYX0RXT1JEKiltX3BXb3JkQnVmID09IEZYRFdPUkRfRkFMUyAmJiBtX3BXb3JkQnVmWzRdID09ICdlJykgeworICAgICAgICAgICAgcE9iaiA9IENQREZfQm9vbGVhbjo6Q3JlYXRlKEZBTFNFKTsKKyAgICAgICAgICAgIGlmICghU2V0VG9DdXJPYmoocE9iaikpIHsKKyAgICAgICAgICAgICAgICBwT2JqLT5SZWxlYXNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgbV9wV29yZEJ1ZlttX1dvcmRTaXplXSA9IDA7CisgICAgT25PcGVyYXRvcigoY2hhciopbV9wV29yZEJ1Zik7CisgICAgQ2xlYXJBbGxQYXJhbXMoKTsKK30KKyNkZWZpbmUgUEFHRVBBUlNFX1NUQUdFX1BBUlNFCQkJMgorI2RlZmluZSBQQUdFUEFSU0VfU1RBR0VfQ0hFQ0tDTElQCQkzCitDUERGX0NvbnRlbnRQYXJzZXI6OkNQREZfQ29udGVudFBhcnNlcigpCit7CisgICAgbV9wUGFyc2VyID0gTlVMTDsKKyAgICBtX1N0YXR1cyA9IFJlYWR5OworICAgIG1fcFN0cmVhbUZpbHRlciA9IE5VTEw7CisgICAgbV9wVHlwZTNDaGFyID0gTlVMTDsKK30KK0NQREZfQ29udGVudFBhcnNlcjo6fkNQREZfQ29udGVudFBhcnNlcigpCit7CisgICAgQ2xlYXIoKTsKK30KK3ZvaWQgQ1BERl9Db250ZW50UGFyc2VyOjpDbGVhcigpCit7CisgICAgaWYgKG1fcFBhcnNlcikgeworICAgICAgICBkZWxldGUgbV9wUGFyc2VyOworICAgIH0KKyAgICBpZiAobV9wU3RyZWFtRmlsdGVyKSB7CisgICAgICAgIGRlbGV0ZSBtX3BTdHJlYW1GaWx0ZXI7CisgICAgfQorICAgIG1fcFBhcnNlciA9IE5VTEw7CisgICAgbV9TdGF0dXMgPSBSZWFkeTsKK30KK3ZvaWQgQ1BERl9Db250ZW50UGFyc2VyOjpTdGFydChDUERGX1BhZ2UqIHBQYWdlLCBDUERGX1BhcnNlT3B0aW9ucyogcE9wdGlvbnMpCit7CisgICAgaWYgKG1fU3RhdHVzICE9IFJlYWR5IHx8IHBQYWdlID09IE5VTEwgfHwgcFBhZ2UtPm1fcERvY3VtZW50ID09IE5VTEwgfHwgcFBhZ2UtPm1fcEZvcm1EaWN0ID09IE5VTEwpIHsKKyAgICAgICAgbV9TdGF0dXMgPSBEb25lOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcE9iamVjdHMgPSBwUGFnZTsKKyAgICBtX2JGb3JtID0gRkFMU0U7CisgICAgaWYgKHBPcHRpb25zKSB7CisgICAgICAgIG1fT3B0aW9ucyA9ICpwT3B0aW9uczsKKyAgICB9CisgICAgQ1BERl9PYmplY3QqIHBDb250ZW50ID0gcFBhZ2UtPm1fcEZvcm1EaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkNvbnRlbnRzIikpOworICAgIGlmIChwQ29udGVudCA9PSBOVUxMKSB7CisgICAgICAgIG1fU3RhdHVzID0gRG9uZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocENvbnRlbnQtPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSRUFNKSB7CisgICAgICAgIG1fblN0cmVhbXMgPSAxOworICAgIH0gZWxzZSBpZiAocENvbnRlbnQtPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsKKyAgICAgICAgbV9uU3RyZWFtcyA9ICgoQ1BERl9BcnJheSopcENvbnRlbnQpLT5HZXRDb3VudCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fU3RhdHVzID0gRG9uZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX1N0YXR1cyA9IFRvQmVDb250aW51ZWQ7CisgICAgbV9JbnRlcm5hbFN0YWdlID0gUEFHRVBBUlNFX1NUQUdFX1BBUlNFOworICAgIG1fQ3VycmVudE9mZnNldCA9IDA7CisgICAgbV9wUGFyc2VyID0gRlhfTkVXIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjsKKyAgICBtX3BQYXJzZXItPkluaXRpYWxpemUoKTsKKyAgICBtX3BQYXJzZXItPlByZXBhcmVQYXJzZShwUGFnZS0+bV9wRG9jdW1lbnQsIHBQYWdlLT5tX3BSZXNvdXJjZXMsIE5VTEwsIE5VTEwsIHBQYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBQYWdlLT5tX3BSZXNvdXJjZXMsICZwUGFnZS0+bV9CQm94LCAmbV9PcHRpb25zLCBOVUxMLCAwKTsKKyAgICBtX3BQYXJzZXItPm1fcEN1clN0YXRlcy0+bV9Db2xvclN0YXRlLkdldE1vZGlmeSgpLT5EZWZhdWx0KCk7Cit9Cit2b2lkIENQREZfQ29udGVudFBhcnNlcjo6U3RhcnQoQ1BERl9Gb3JtKiBwRm9ybSwgQ1BERl9BbGxTdGF0ZXMqIHBHcmFwaGljU3RhdGVzLCBDRlhfQWZmaW5lTWF0cml4KiBwUGFyZW50TWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfVHlwZTNDaGFyKiBwVHlwZTNDaGFyLCBDUERGX1BhcnNlT3B0aW9ucyogcE9wdGlvbnMsIGludCBsZXZlbCkKK3sKKyAgICBtX3BUeXBlM0NoYXIgPSBwVHlwZTNDaGFyOworICAgIG1fcE9iamVjdHMgPSBwRm9ybTsKKyAgICBtX2JGb3JtID0gVFJVRTsKKyAgICBDRlhfQWZmaW5lTWF0cml4IGZvcm1fbWF0cml4ID0gcEZvcm0tPm1fcEZvcm1EaWN0LT5HZXRNYXRyaXgoRlhfQlNUUkMoIk1hdHJpeCIpKTsKKyAgICBpZiAocEdyYXBoaWNTdGF0ZXMpIHsKKyAgICAgICAgZm9ybV9tYXRyaXguQ29uY2F0KHBHcmFwaGljU3RhdGVzLT5tX0NUTSk7CisgICAgfQorICAgIENQREZfQXJyYXkqIHBCQm94ID0gcEZvcm0tPm1fcEZvcm1EaWN0LT5HZXRBcnJheShGWF9CU1RSQygiQkJveCIpKTsKKyAgICBDRlhfRmxvYXRSZWN0IGZvcm1fYmJveDsKKyAgICBDUERGX1BhdGggQ2xpcFBhdGg7CisgICAgaWYgKHBCQm94KSB7CisgICAgICAgIGZvcm1fYmJveCA9IHBCQm94LT5HZXRSZWN0KCk7CisgICAgICAgIENsaXBQYXRoLk5ldygpOworICAgICAgICBDbGlwUGF0aC5BcHBlbmRSZWN0KGZvcm1fYmJveC5sZWZ0LCBmb3JtX2Jib3guYm90dG9tLCBmb3JtX2Jib3gucmlnaHQsIGZvcm1fYmJveC50b3ApOworICAgICAgICBDbGlwUGF0aC5UcmFuc2Zvcm0oJmZvcm1fbWF0cml4KTsKKyAgICAgICAgaWYgKHBQYXJlbnRNYXRyaXgpIHsKKyAgICAgICAgICAgIENsaXBQYXRoLlRyYW5zZm9ybShwUGFyZW50TWF0cml4KTsKKyAgICAgICAgfQorICAgICAgICBmb3JtX2Jib3guVHJhbnNmb3JtKCZmb3JtX21hdHJpeCk7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcFJlc291cmNlcyA9IHBGb3JtLT5tX3BGb3JtRGljdC0+R2V0RGljdChGWF9CU1RSQygiUmVzb3VyY2VzIikpOworICAgIG1fcFBhcnNlciA9IEZYX05FVyBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI7CisgICAgbV9wUGFyc2VyLT5Jbml0aWFsaXplKCk7CisgICAgbV9wUGFyc2VyLT5QcmVwYXJlUGFyc2UocEZvcm0tPm1fcERvY3VtZW50LCBwRm9ybS0+bV9wUGFnZVJlc291cmNlcywgcEZvcm0tPm1fcFJlc291cmNlcywgcFBhcmVudE1hdHJpeCwgcEZvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFJlc291cmNlcywgJmZvcm1fYmJveCwgcE9wdGlvbnMsIHBHcmFwaGljU3RhdGVzLCBsZXZlbCk7CisgICAgbV9wUGFyc2VyLT5tX3BDdXJTdGF0ZXMtPm1fQ1RNID0gZm9ybV9tYXRyaXg7CisgICAgaWYgKENsaXBQYXRoLk5vdE51bGwoKSkgeworICAgICAgICBtX3BQYXJzZXItPm1fcEN1clN0YXRlcy0+bV9DbGlwUGF0aC5BcHBlbmRQYXRoKENsaXBQYXRoLCBGWEZJTExfV0lORElORywgVFJVRSk7CisgICAgfQorICAgIGlmIChwRm9ybS0+bV9UcmFuc3BhcmVuY3kgJiBQREZUUkFOU19HUk9VUCkgeworICAgICAgICBDUERGX0dlbmVyYWxTdGF0ZURhdGEqIHBEYXRhID0gbV9wUGFyc2VyLT5tX3BDdXJTdGF0ZXMtPm1fR2VuZXJhbFN0YXRlLkdldE1vZGlmeSgpOworICAgICAgICBwRGF0YS0+bV9CbGVuZFR5cGUgPSBGWERJQl9CTEVORF9OT1JNQUw7CisgICAgICAgIHBEYXRhLT5tX1N0cm9rZUFscGhhID0gMS4wZjsKKyAgICAgICAgcERhdGEtPm1fRmlsbEFscGhhID0gMS4wZjsKKyAgICAgICAgcERhdGEtPm1fcFNvZnRNYXNrID0gTlVMTDsKKyAgICB9CisgICAgbV9wU3RyZWFtRmlsdGVyID0gcEZvcm0tPm1fcEZvcm1TdHJlYW0tPkdldFN0cmVhbUZpbHRlcigpOworICAgIG1fblN0cmVhbXMgPSAxOworICAgIG1fU3RhdHVzID0gVG9CZUNvbnRpbnVlZDsKKyAgICBtX0ludGVybmFsU3RhZ2UgPSBQQUdFUEFSU0VfU1RBR0VfUEFSU0U7CisgICAgbV9DdXJyZW50T2Zmc2V0ID0gMDsKK30KK3ZvaWQgQ1BERl9Db250ZW50UGFyc2VyOjpDb250aW51ZShJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICB3aGlsZSAobV9TdGF0dXMgPT0gVG9CZUNvbnRpbnVlZCkgeworICAgICAgICBpZiAobV9JbnRlcm5hbFN0YWdlID09IFBBR0VQQVJTRV9TVEFHRV9QQVJTRSkgeworICAgICAgICAgICAgaWYgKG1fcFN0cmVhbUZpbHRlciA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fQ3VycmVudE9mZnNldCA9PSBtX25TdHJlYW1zKSB7CisgICAgICAgICAgICAgICAgICAgIG1fSW50ZXJuYWxTdGFnZSA9IFBBR0VQQVJTRV9TVEFHRV9DSEVDS0NMSVA7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3BUeXBlM0NoYXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcFR5cGUzQ2hhci0+bV9iQ29sb3JlZCA9IG1fcFBhcnNlci0+bV9iQ29sb3JlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcFR5cGUzQ2hhci0+bV9XaWR0aCA9IEZYU1lTX3JvdW5kKG1fcFBhcnNlci0+bV9UeXBlM0RhdGFbMF0gKiAxMDAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcFR5cGUzQ2hhci0+bV9CQm94LmxlZnQgPSBGWFNZU19yb3VuZChtX3BQYXJzZXItPm1fVHlwZTNEYXRhWzJdICogMTAwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BUeXBlM0NoYXItPm1fQkJveC5ib3R0b20gPSBGWFNZU19yb3VuZChtX3BQYXJzZXItPm1fVHlwZTNEYXRhWzNdICogMTAwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BUeXBlM0NoYXItPm1fQkJveC5yaWdodCA9IEZYU1lTX3JvdW5kKG1fcFBhcnNlci0+bV9UeXBlM0RhdGFbNF0gKiAxMDAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcFR5cGUzQ2hhci0+bV9CQm94LnRvcCA9IEZYU1lTX3JvdW5kKG1fcFBhcnNlci0+bV9UeXBlM0RhdGFbNV0gKiAxMDAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcFR5cGUzQ2hhci0+bV9iUGFnZVJlcXVpcmVkID0gbV9wUGFyc2VyLT5tX2JSZXNvdXJjZU1pc3Npbmc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG1fcFBhcnNlcjsKKyAgICAgICAgICAgICAgICAgICAgbV9wUGFyc2VyID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIENQREZfT2JqZWN0KiBwQ29udGVudCA9IG1fcE9iamVjdHMtPm1fcEZvcm1EaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkNvbnRlbnRzIikpOworICAgICAgICAgICAgICAgIGlmIChwQ29udGVudC0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJFQU0pIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wU3RyZWFtRmlsdGVyID0gKChDUERGX1N0cmVhbSopcENvbnRlbnQpLT5HZXRTdHJlYW1GaWx0ZXIoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBDUERGX1N0cmVhbSogcFN0cmVhbSA9ICgoQ1BERl9BcnJheSopcENvbnRlbnQpLT5HZXRTdHJlYW0obV9DdXJyZW50T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBTdHJlYW0gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9DdXJyZW50T2Zmc2V0ICsrOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbV9wU3RyZWFtRmlsdGVyID0gcFN0cmVhbS0+R2V0U3RyZWFtRmlsdGVyKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfRFdPUkQgbGVuID0gbV9wU3RyZWFtRmlsdGVyLT5SZWFkQmxvY2sobV9wUGFyc2VyLT5tX3BTdHJlYW1CdWYsIFNUUkVBTV9QQVJTRV9CVUZTSVpFKTsKKyAgICAgICAgICAgIG1fcFBhcnNlci0+SW5wdXREYXRhKG1fcFBhcnNlci0+bV9wU3RyZWFtQnVmLCBsZW4pOworICAgICAgICAgICAgaWYgKG1fcFBhcnNlci0+bV9iQWJvcnQpIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgbV9wU3RyZWFtRmlsdGVyOworICAgICAgICAgICAgICAgIG1fcFN0cmVhbUZpbHRlciA9IE5VTEw7CisgICAgICAgICAgICAgICAgbV9TdGF0dXMgPSBEb25lOworICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3BQYXJzZXI7CisgICAgICAgICAgICAgICAgbV9wUGFyc2VyID0gTlVMTDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobGVuIDwgU1RSRUFNX1BBUlNFX0JVRlNJWkUpIHsKKyAgICAgICAgICAgICAgICBtX3BQYXJzZXItPkZpbmlzaCgpOworICAgICAgICAgICAgICAgIG1fQ3VycmVudE9mZnNldCArKzsKKyAgICAgICAgICAgICAgICBkZWxldGUgbV9wU3RyZWFtRmlsdGVyOworICAgICAgICAgICAgICAgIG1fcFN0cmVhbUZpbHRlciA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocFBhdXNlICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobV9JbnRlcm5hbFN0YWdlID09IFBBR0VQQVJTRV9TVEFHRV9DSEVDS0NMSVApIHsKKyAgICAgICAgICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fcE9iamVjdHMtPm1fT2JqZWN0TGlzdC5HZXRIZWFkUG9zaXRpb24oKTsKKyAgICAgICAgICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgICAgICAgICBDUERGX1BhZ2VPYmplY3QqIHBPYmogPSAoQ1BERl9QYWdlT2JqZWN0KiltX3BPYmplY3RzLT5tX09iamVjdExpc3QuR2V0TmV4dChwb3MpOworICAgICAgICAgICAgICAgIGlmIChwT2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChwT2JqLT5tX0NsaXBQYXRoLklzTnVsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocE9iai0+bV9DbGlwUGF0aC5HZXRQYXRoQ291bnQoKSAhPSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocE9iai0+bV9DbGlwUGF0aC5HZXRUZXh0Q291bnQoKSkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ1BERl9QYXRoIENsaXBQYXRoID0gcE9iai0+bV9DbGlwUGF0aC5HZXRQYXRoKDApOworICAgICAgICAgICAgICAgIGlmICghQ2xpcFBhdGguSXNSZWN0KCkgfHwgcE9iai0+bV9UeXBlID09IFBERlBBR0VfU0hBRElORykgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ0ZYX0Zsb2F0UmVjdCBvbGRfcmVjdChDbGlwUGF0aC5HZXRQb2ludFgoMCksIENsaXBQYXRoLkdldFBvaW50WSgwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaXBQYXRoLkdldFBvaW50WCgyKSwgQ2xpcFBhdGguR2V0UG9pbnRZKDIpKTsKKyAgICAgICAgICAgICAgICBDRlhfRmxvYXRSZWN0IG9ial9yZWN0KHBPYmotPm1fTGVmdCwgcE9iai0+bV9Cb3R0b20sIHBPYmotPm1fUmlnaHQsIHBPYmotPm1fVG9wKTsKKyAgICAgICAgICAgICAgICBpZiAob2xkX3JlY3QuQ29udGFpbnMob2JqX3JlY3QpKSB7CisgICAgICAgICAgICAgICAgICAgIHBPYmotPm1fQ2xpcFBhdGguU2V0TnVsbCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX3BPYmplY3RzLT5tX09iamVjdExpc3QuR2V0Q291bnQoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgQ1BERl9QYWdlT2JqZWN0KiBwT2JqID0gKENQREZfUGFnZU9iamVjdCopbV9wT2JqZWN0cy0+bV9PYmplY3RMaXN0LkdldEF0KG1fcE9iamVjdHMtPm1fT2JqZWN0TGlzdC5HZXRIZWFkUG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgaWYgKHBPYmogJiYgcE9iai0+bV9UeXBlID09IFBERlBBR0VfVEVYVCkgeworICAgICAgICAgICAgICAgICAgICBDUERGX1RleHRPYmplY3QqIHBUZXh0ID0gKENQREZfVGV4dE9iamVjdCopcE9iajsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX1N0YXR1cyA9IERvbmU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CitpbnQgQ1BERl9Db250ZW50UGFyc2VyOjpFc3RpbWF0ZVByb2dyZXNzKCkKK3sKKyAgICBpZiAobV9TdGF0dXMgPT0gUmVhZHkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChtX1N0YXR1cyA9PSBEb25lKSB7CisgICAgICAgIHJldHVybiAxMDA7CisgICAgfQorICAgIGlmIChtX0ludGVybmFsU3RhZ2UgPT0gUEFHRVBBUlNFX1NUQUdFX0NIRUNLQ0xJUCkgeworICAgICAgICByZXR1cm4gOTA7CisgICAgfQorICAgIGlmIChtX3BTdHJlYW1GaWx0ZXIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gOTAgKiBtX0N1cnJlbnRPZmZzZXQgLyBtX25TdHJlYW1zOworICAgIH0KKyAgICBpbnQgdG90YWxfcmF3X3NpemUgPSBtX3BTdHJlYW1GaWx0ZXItPkdldFN0cmVhbSgpLT5HZXRSYXdTaXplKCkgKiBtX25TdHJlYW1zOworICAgIGludCBwYXJzZWRfcmF3X3NpemUgPSBtX3BTdHJlYW1GaWx0ZXItPkdldFN0cmVhbSgpLT5HZXRSYXdTaXplKCkgKiBtX0N1cnJlbnRPZmZzZXQgKworICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BTdHJlYW1GaWx0ZXItPkdldFNyY1BvcygpOworICAgIHJldHVybiA5MCAqIHBhcnNlZF9yYXdfc2l6ZSAvIHRvdGFsX3Jhd19zaXplOworfQorQ1BERl9JbmxpbmVJbWFnZXM6OkNQREZfSW5saW5lSW1hZ2VzKCkKK3sKKyAgICBtX1R5cGUgPSBQREZQQUdFX0lOTElORVM7CisgICAgbV9wU3RyZWFtID0gTlVMTDsKKyAgICBtX3BCaXRtYXAgPSBOVUxMOworfQorQ1BERl9JbmxpbmVJbWFnZXM6On5DUERGX0lubGluZUltYWdlcygpCit7CisgICAgaWYgKG1fcFN0cmVhbSkgeworICAgICAgICBtX3BTdHJlYW0tPlJlbGVhc2UoKTsKKyAgICB9CisgICAgaWYgKG1fcEJpdG1hcCkgeworICAgICAgICBkZWxldGUgbV9wQml0bWFwOworICAgIH0KK30KK3ZvaWQgQ1BERl9JbmxpbmVJbWFnZXM6OkFkZE1hdHJpeChDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpCit7CisgICAgbV9NYXRyaWNlcy5BZGQobWF0cml4KTsKKyAgICBDRlhfRmxvYXRSZWN0IHJlY3QgPSBtYXRyaXguR2V0VW5pdFJlY3QoKTsKKyAgICBpZiAobV9NYXRyaWNlcy5HZXRTaXplKCkgPiAxKSB7CisgICAgICAgIENGWF9GbG9hdFJlY3QgcmVjdDEobV9MZWZ0LCBtX0JvdHRvbSwgbV9SaWdodCwgbV9Ub3ApOworICAgICAgICByZWN0LlVuaW9uKHJlY3QxKTsKKyAgICB9CisgICAgbV9MZWZ0ID0gcmVjdC5sZWZ0OworICAgIG1fUmlnaHQgPSByZWN0LnJpZ2h0OworICAgIG1fVG9wID0gcmVjdC50b3A7CisgICAgbV9Cb3R0b20gPSByZWN0LmJvdHRvbTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhZ2UvZnBkZl9wYWdlX3BhcnNlcl9vbGQuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhZ2UvZnBkZl9wYWdlX3BhcnNlcl9vbGQuY3BwCmluZGV4IDJmMGExOGQuLmNhZmNhMjYgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYWdlL2ZwZGZfcGFnZV9wYXJzZXJfb2xkLmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFnZS9mcGRmX3BhZ2VfcGFyc2VyX29sZC5jcHAKQEAgLTEsMTE0NiArMSwxMTQ2IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgiDQotI2luY2x1ZGUgInBhZ2VpbnQuaCINCi0jaW5jbHVkZSA8bGltaXRzLmg+DQotZXh0ZXJuIGNvbnN0IEZYX0xQQ1NUUiBfUERGX09wQ2hhclR5cGUgPQ0KLSAgICAiSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUkiDQotICAgICJJSVZJSUlJVklJVklJSUlJVlZJSUlJSUlJSUlJSUlJSSINCi0gICAgIklJVlZWVlZWSVZWVlZWVklWVlZWVklJVlZJSUlJSUlJIg0KLSAgICAiSUlWVlZWVlZWVlZWVlZWVklWVlZJSVZWSVZWSUlJSUkiDQotICAgICJJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSSINCi0gICAgIklJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJIg0KLSAgICAiSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUkiDQotICAgICJJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSSI7DQotRlhfQk9PTCBfUERGX0hhc0ludmFsaWRPcENoYXIoRlhfTFBDU1RSIG9wKQ0KLXsNCi0gICAgaWYoIW9wKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgRlhfQllURSBjaDsNCi0gICAgd2hpbGUoKGNoID0gKm9wKyspKSB7DQotICAgICAgICBpZihfUERGX09wQ2hhclR5cGVbY2hdID09ICdJJykgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotRlhfRFdPUkQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpQYXJzZShGWF9MUENCWVRFIHBEYXRhLCBGWF9EV09SRCBkd1NpemUsIEZYX0RXT1JEIG1heF9jb3N0KQ0KLXsNCi0gICAgaWYgKG1fTGV2ZWwgPiBfRlBERl9NQVhfRk9STV9MRVZFTF8pIHsNCi0gICAgICAgIHJldHVybiBkd1NpemU7DQotICAgIH0NCi0gICAgRlhfRFdPUkQgSW5pdE9iakNvdW50ID0gbV9wT2JqZWN0TGlzdC0+Q291bnRPYmplY3RzKCk7DQotICAgIENQREZfU3RyZWFtUGFyc2VyIHN5bnRheChwRGF0YSwgZHdTaXplKTsNCi0gICAgbV9wU3ludGF4ID0gJnN5bnRheDsNCi0gICAgbV9Db21wYXRDb3VudCA9IDA7DQotICAgIHdoaWxlICgxKSB7DQotICAgICAgICBGWF9EV09SRCBjb3N0ID0gbV9wT2JqZWN0TGlzdC0+Q291bnRPYmplY3RzKCkgLSBJbml0T2JqQ291bnQ7DQotICAgICAgICBpZiAobWF4X2Nvc3QgJiYgY29zdCA+PSBtYXhfY29zdCkgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgc3dpdGNoIChzeW50YXguUGFyc2VOZXh0RWxlbWVudCgpKSB7DQotICAgICAgICAgICAgY2FzZSBDUERGX1N0cmVhbVBhcnNlcjo6RW5kT2ZEYXRhOg0KLSAgICAgICAgICAgICAgICByZXR1cm4gbV9wU3ludGF4LT5HZXRQb3MoKTsNCi0gICAgICAgICAgICBjYXNlIENQREZfU3RyZWFtUGFyc2VyOjpLZXl3b3JkOg0KLSAgICAgICAgICAgICAgICBpZighT25PcGVyYXRvcigoY2hhciopc3ludGF4LkdldFdvcmRCdWYoKSkgJiYgX1BERl9IYXNJbnZhbGlkT3BDaGFyKChjaGFyKilzeW50YXguR2V0V29yZEJ1ZigpKSkgew0KLSAgICAgICAgICAgICAgICAgICAgbV9iQWJvcnQgPSBUUlVFOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChtX2JBYm9ydCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fcFN5bnRheC0+R2V0UG9zKCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgQ2xlYXJBbGxQYXJhbXMoKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSBDUERGX1N0cmVhbVBhcnNlcjo6TnVtYmVyOg0KLSAgICAgICAgICAgICAgICBBZGROdW1iZXJQYXJhbSgoY2hhciopc3ludGF4LkdldFdvcmRCdWYoKSwgc3ludGF4LkdldFdvcmRTaXplKCkpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIENQREZfU3RyZWFtUGFyc2VyOjpOYW1lOg0KLSAgICAgICAgICAgICAgICBBZGROYW1lUGFyYW0oKEZYX0xQQ1NUUilzeW50YXguR2V0V29yZEJ1ZigpICsgMSwgc3ludGF4LkdldFdvcmRTaXplKCkgLSAxKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgZGVmYXVsdDoNCi0gICAgICAgICAgICAgICAgQWRkT2JqZWN0UGFyYW0oc3ludGF4LkdldE9iamVjdCgpKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wU3ludGF4LT5HZXRQb3MoKTsNCi19DQotdm9pZCBfUERGX1JlcGxhY2VBYmJyKENQREZfT2JqZWN0KiBwT2JqKTsNCi12b2lkIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6SGFuZGxlX0JlZ2luSW1hZ2UoKQ0KLXsNCi0gICAgRlhfRklMRVNJWkUgc2F2ZVBvcyA9IG1fcFN5bnRheC0+R2V0UG9zKCk7DQotICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSBDUERGX0RpY3Rpb25hcnk6OkNyZWF0ZSgpOw0KLSAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgQ1BERl9TdHJlYW1QYXJzZXI6OlN5bnRheFR5cGUgdHlwZSA9IG1fcFN5bnRheC0+UGFyc2VOZXh0RWxlbWVudCgpOw0KLSAgICAgICAgaWYgKHR5cGUgPT0gQ1BERl9TdHJlYW1QYXJzZXI6OktleXdvcmQpIHsNCi0gICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBic0tleXdvcmQobV9wU3ludGF4LT5HZXRXb3JkQnVmKCksIG1fcFN5bnRheC0+R2V0V29yZFNpemUoKSk7DQotICAgICAgICAgICAgaWYgKGJzS2V5d29yZCAhPSBGWF9CU1RSQygiSUQiKSkgew0KLSAgICAgICAgICAgICAgICBtX3BTeW50YXgtPlNldFBvcyhzYXZlUG9zKTsNCi0gICAgICAgICAgICAgICAgcERpY3QtPlJlbGVhc2UoKTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmICh0eXBlICE9IENQREZfU3RyZWFtUGFyc2VyOjpOYW1lKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyBrZXkoKEZYX0xQQ1NUUiltX3BTeW50YXgtPkdldFdvcmRCdWYoKSArIDEsIG1fcFN5bnRheC0+R2V0V29yZFNpemUoKSAtIDEpOw0KLSAgICAgICAgQ1BERl9PYmplY3QqIHBPYmogPSBtX3BTeW50YXgtPlJlYWROZXh0T2JqZWN0KCk7DQotICAgICAgICBpZiAoIWtleS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICBwRGljdC0+U2V0QXQoa2V5LCBwT2JqLCBtX3BEb2N1bWVudCk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHBPYmotPlJlbGVhc2UoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBfUERGX1JlcGxhY2VBYmJyKHBEaWN0KTsNCi0gICAgQ1BERl9PYmplY3QqIHBDU09iaiA9IE5VTEw7DQotICAgIGlmIChwRGljdC0+S2V5RXhpc3QoRlhfQlNUUkMoIkNvbG9yU3BhY2UiKSkpIHsNCi0gICAgICAgIHBDU09iaiA9IHBEaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkNvbG9yU3BhY2UiKSk7DQotICAgICAgICBpZiAocENTT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX05BTUUpIHsNCi0gICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBuYW1lID0gcENTT2JqLT5HZXRTdHJpbmcoKTsNCi0gICAgICAgICAgICBpZiAobmFtZSAhPSBGWF9CU1RSQygiRGV2aWNlUkdCIikgJiYgbmFtZSAhPSBGWF9CU1RSQygiRGV2aWNlR3JheSIpICYmIG5hbWUgIT0gRlhfQlNUUkMoIkRldmljZUNNWUsiKSkgew0KLSAgICAgICAgICAgICAgICBwQ1NPYmogPSBGaW5kUmVzb3VyY2VPYmooRlhfQlNUUkMoIkNvbG9yU3BhY2UiKSwgbmFtZSk7DQotICAgICAgICAgICAgICAgIGlmIChwQ1NPYmogJiYgIXBDU09iai0+R2V0T2JqTnVtKCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIHBDU09iaiA9IHBDU09iai0+Q2xvbmUoKTsNCi0gICAgICAgICAgICAgICAgICAgIHBEaWN0LT5TZXRBdChGWF9CU1RSQygiQ29sb3JTcGFjZSIpLCBwQ1NPYmosIG1fcERvY3VtZW50KTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDUERGX1N0cmVhbSogcFN0cmVhbSA9IG1fcFN5bnRheC0+UmVhZElubGluZVN0cmVhbShtX3BEb2N1bWVudCwgcERpY3QsIHBDU09iaiwgbV9PcHRpb25zLm1fYkRlY29kZUlubGluZUltYWdlKTsNCi0gICAgd2hpbGUgKDEpIHsNCi0gICAgICAgIENQREZfU3RyZWFtUGFyc2VyOjpTeW50YXhUeXBlIHR5cGUgPSBtX3BTeW50YXgtPlBhcnNlTmV4dEVsZW1lbnQoKTsNCi0gICAgICAgIGlmICh0eXBlID09IENQREZfU3RyZWFtUGFyc2VyOjpFbmRPZkRhdGEpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICh0eXBlICE9IENQREZfU3RyZWFtUGFyc2VyOjpLZXl3b3JkKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9wU3ludGF4LT5HZXRXb3JkU2l6ZSgpID09IDIgJiYgbV9wU3ludGF4LT5HZXRXb3JkQnVmKClbMF0gPT0gJ0UnICYmDQotICAgICAgICAgICAgICAgIG1fcFN5bnRheC0+R2V0V29yZEJ1ZigpWzFdID09ICdJJykgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChtX09wdGlvbnMubV9iVGV4dE9ubHkpIHsNCi0gICAgICAgIGlmIChwU3RyZWFtKSB7DQotICAgICAgICAgICAgcFN0cmVhbS0+UmVsZWFzZSgpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBwRGljdC0+UmVsZWFzZSgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHBEaWN0LT5TZXRBdE5hbWUoRlhfQlNUUkMoIlN1YnR5cGUiKSwgRlhfQlNUUkMoIkltYWdlIikpOw0KLSAgICBDUERGX0ltYWdlT2JqZWN0ICpwSW1nT2JqID0gQWRkSW1hZ2UocFN0cmVhbSwgTlVMTCwgVFJVRSk7DQotICAgIGlmICghcEltZ09iaikgew0KLSAgICAgICAgaWYgKHBTdHJlYW0pIHsNCi0gICAgICAgICAgICBwU3RyZWFtLT5SZWxlYXNlKCk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHBEaWN0LT5SZWxlYXNlKCk7DQotICAgICAgICB9DQotICAgIH0NCi19DQotdm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OlBhcnNlUGF0aE9iamVjdCgpDQotew0KLSAgICBGWF9GTE9BVCBwYXJhbXNbNl0gPSB7MH07DQotICAgIGludCBuUGFyYW1zID0gMDsNCi0gICAgaW50IGxhc3RfcG9zID0gbV9wU3ludGF4LT5HZXRQb3MoKTsNCi0gICAgd2hpbGUgKDEpIHsNCi0gICAgICAgIENQREZfU3RyZWFtUGFyc2VyOjpTeW50YXhUeXBlIHR5cGUgPSBtX3BTeW50YXgtPlBhcnNlTmV4dEVsZW1lbnQoKTsNCi0gICAgICAgIEZYX0JPT0wgYlByb2Nlc3NlZCA9IFRSVUU7DQotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsNCi0gICAgICAgICAgICBjYXNlIENQREZfU3RyZWFtUGFyc2VyOjpFbmRPZkRhdGE6DQotICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICBjYXNlIENQREZfU3RyZWFtUGFyc2VyOjpLZXl3b3JkOiB7DQotICAgICAgICAgICAgICAgICAgICBpbnQgbGVuID0gbV9wU3ludGF4LT5HZXRXb3JkU2l6ZSgpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA9PSAxKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtX3BTeW50YXgtPkdldFdvcmRCdWYoKVswXSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtJzoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZFBhdGhQb2ludChwYXJhbXNbMF0sIHBhcmFtc1sxXSwgRlhQVF9NT1ZFVE8pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgblBhcmFtcyA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbCc6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRQYXRoUG9pbnQocGFyYW1zWzBdLCBwYXJhbXNbMV0sIEZYUFRfTElORVRPKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5QYXJhbXMgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2MnOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkUGF0aFBvaW50KHBhcmFtc1swXSwgcGFyYW1zWzFdLCBGWFBUX0JFWklFUlRPKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZFBhdGhQb2ludChwYXJhbXNbMl0sIHBhcmFtc1szXSwgRlhQVF9CRVpJRVJUTyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRQYXRoUG9pbnQocGFyYW1zWzRdLCBwYXJhbXNbNV0sIEZYUFRfQkVaSUVSVE8pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgblBhcmFtcyA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndic6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRQYXRoUG9pbnQobV9QYXRoQ3VycmVudFgsIG1fUGF0aEN1cnJlbnRZLCBGWFBUX0JFWklFUlRPKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZFBhdGhQb2ludChwYXJhbXNbMF0sIHBhcmFtc1sxXSwgRlhQVF9CRVpJRVJUTyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRQYXRoUG9pbnQocGFyYW1zWzJdLCBwYXJhbXNbM10sIEZYUFRfQkVaSUVSVE8pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgblBhcmFtcyA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAneSc6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRQYXRoUG9pbnQocGFyYW1zWzBdLCBwYXJhbXNbMV0sIEZYUFRfQkVaSUVSVE8pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkUGF0aFBvaW50KHBhcmFtc1syXSwgcGFyYW1zWzNdLCBGWFBUX0JFWklFUlRPKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZFBhdGhQb2ludChwYXJhbXNbMl0sIHBhcmFtc1szXSwgRlhQVF9CRVpJRVJUTyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuUGFyYW1zID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdoJzoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhhbmRsZV9DbG9zZVBhdGgoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5QYXJhbXMgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiUHJvY2Vzc2VkID0gRkFMU0U7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlbiA9PSAyKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fcFN5bnRheC0+R2V0V29yZEJ1ZigpWzBdID09ICdyJyAmJiBtX3BTeW50YXgtPkdldFdvcmRCdWYoKVsxXSA9PSAnZScpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkUGF0aFJlY3QocGFyYW1zWzBdLCBwYXJhbXNbMV0sIHBhcmFtc1syXSwgcGFyYW1zWzNdKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgblBhcmFtcyA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYlByb2Nlc3NlZCA9IEZBTFNFOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgYlByb2Nlc3NlZCA9IEZBTFNFOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJQcm9jZXNzZWQpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3BvcyA9IG1fcFN5bnRheC0+R2V0UG9zKCk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNhc2UgQ1BERl9TdHJlYW1QYXJzZXI6Ok51bWJlcjogew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5QYXJhbXMgPT0gNikgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiSW50ZWdlcjsNCi0gICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZTsNCi0gICAgICAgICAgICAgICAgICAgIEZYX2F0b251bShDRlhfQnl0ZVN0cmluZ0MobV9wU3ludGF4LT5HZXRXb3JkQnVmKCksIG1fcFN5bnRheC0+R2V0V29yZFNpemUoKSksIGJJbnRlZ2VyLCAmdmFsdWUpOw0KLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zW25QYXJhbXMrK10gPSBiSW50ZWdlciA/IChGWF9GTE9BVCl2YWx1ZSA6ICooRlhfRkxPQVQqKSZ2YWx1ZTsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgZGVmYXVsdDoNCi0gICAgICAgICAgICAgICAgYlByb2Nlc3NlZCA9IEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCFiUHJvY2Vzc2VkKSB7DQotICAgICAgICAgICAgbV9wU3ludGF4LT5TZXRQb3MobGFzdF9wb3MpOw0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1DUERGX1N0cmVhbVBhcnNlcjo6Q1BERl9TdHJlYW1QYXJzZXIoY29uc3QgRlhfQllURSogcERhdGEsIEZYX0RXT1JEIGR3U2l6ZSkNCi17DQotICAgIG1fcEJ1ZiA9IHBEYXRhOw0KLSAgICBtX1NpemUgPSBkd1NpemU7DQotICAgIG1fUG9zID0gMDsNCi0gICAgbV9wTGFzdE9iaiA9IE5VTEw7DQotfQ0KLUNQREZfU3RyZWFtUGFyc2VyOjp+Q1BERl9TdHJlYW1QYXJzZXIoKQ0KLXsNCi0gICAgaWYgKG1fcExhc3RPYmopIHsNCi0gICAgICAgIG1fcExhc3RPYmotPlJlbGVhc2UoKTsNCi0gICAgfQ0KLX0NCi1GWF9EV09SRCBfRGVjb2RlQWxsU2NhbmxpbmVzKElDb2RlY19TY2FubGluZURlY29kZXIqIHBEZWNvZGVyLCBGWF9MUEJZVEUmIGRlc3RfYnVmLCBGWF9EV09SRCYgZGVzdF9zaXplKQ0KLXsNCi0gICAgaWYgKHBEZWNvZGVyID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAoRlhfRFdPUkQpIC0gMTsNCi0gICAgfQ0KLSAgICBpbnQgbmNvbXBzID0gcERlY29kZXItPkNvdW50Q29tcHMoKTsNCi0gICAgaW50IGJwYyA9IHBEZWNvZGVyLT5HZXRCUEMoKTsNCi0gICAgaW50IHdpZHRoID0gcERlY29kZXItPkdldFdpZHRoKCk7DQotICAgIGludCBoZWlnaHQgPSBwRGVjb2Rlci0+R2V0SGVpZ2h0KCk7DQotICAgIGludCBwaXRjaCA9ICh3aWR0aCAqIG5jb21wcyAqIGJwYyArIDcpIC8gODsNCi0gICAgaWYgKGhlaWdodCA9PSAwIHx8IHBpdGNoID4gKDEgPDwgMzApIC8gaGVpZ2h0KSB7DQotICAgICAgICBkZWxldGUgcERlY29kZXI7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgZGVzdF9zaXplID0gcGl0Y2ggKiBoZWlnaHQ7DQotICAgIGRlc3RfYnVmID0gRlhfQWxsb2MoIEZYX0JZVEUsIGRlc3Rfc2l6ZSk7DQotICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7DQotICAgICAgICBGWF9MUEJZVEUgcExpbmUgPSBwRGVjb2Rlci0+R2V0U2NhbmxpbmUocm93KTsNCi0gICAgICAgIGlmIChwTGluZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBGWFNZU19tZW1jcHkzMihkZXN0X2J1ZiArIHJvdyAqIHBpdGNoLCBwTGluZSwgcGl0Y2gpOw0KLSAgICB9DQotICAgIEZYX0RXT1JEIHNyY29mZiA9IHBEZWNvZGVyLT5HZXRTcmNPZmZzZXQoKTsNCi0gICAgZGVsZXRlIHBEZWNvZGVyOw0KLSAgICByZXR1cm4gc3Jjb2ZmOw0KLX0NCi1JQ29kZWNfU2NhbmxpbmVEZWNvZGVyKiBGUERGQVBJX0NyZWF0ZUZheERlY29kZXIoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KLSAgICAgICAgY29uc3QgQ1BERl9EaWN0aW9uYXJ5KiBwUGFyYW1zKTsNCi1GWF9EV09SRCBfQTg1RGVjb2RlKGNvbnN0IEZYX0JZVEUqIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBGWF9MUEJZVEUmIGRlc3RfYnVmLCBGWF9EV09SRCYgZGVzdF9zaXplKTsNCi1GWF9EV09SRCBfSGV4RGVjb2RlKGNvbnN0IEZYX0JZVEUqIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBGWF9MUEJZVEUmIGRlc3RfYnVmLCBGWF9EV09SRCYgZGVzdF9zaXplKTsNCi1GWF9EV09SRCBGUERGQVBJX0ZsYXRlT3JMWldEZWNvZGUoRlhfQk9PTCBiTFpXLCBjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ1BERl9EaWN0aW9uYXJ5KiBwUGFyYW1zLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBlc3RpbWF0ZWRfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSk7DQotRlhfRFdPUkQgUERGX0RlY29kZUlubGluZVN0cmVhbShjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBsaW1pdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgQ0ZYX0J5dGVTdHJpbmcmIGRlY29kZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBQYXJhbSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkNCi17DQotICAgIGlmIChkZWNvZGVyID09IEZYX0JTVFJDKCJDQ0lUVEZheERlY29kZSIpIHx8IGRlY29kZXIgPT0gRlhfQlNUUkMoIkNDRiIpKSB7DQotICAgICAgICBJQ29kZWNfU2NhbmxpbmVEZWNvZGVyKiBwRGVjb2RlciA9IEZQREZBUElfQ3JlYXRlRmF4RGVjb2RlcihzcmNfYnVmLCBsaW1pdCwgd2lkdGgsIGhlaWdodCwgcFBhcmFtKTsNCi0gICAgICAgIHJldHVybiBfRGVjb2RlQWxsU2NhbmxpbmVzKHBEZWNvZGVyLCBkZXN0X2J1ZiwgZGVzdF9zaXplKTsNCi0gICAgfSBlbHNlIGlmIChkZWNvZGVyID09IEZYX0JTVFJDKCJBU0NJSTg1RGVjb2RlIikgfHwgZGVjb2RlciA9PSBGWF9CU1RSQygiQTg1IikpIHsNCi0gICAgICAgIHJldHVybiBfQTg1RGVjb2RlKHNyY19idWYsIGxpbWl0LCBkZXN0X2J1ZiwgZGVzdF9zaXplKTsNCi0gICAgfSBlbHNlIGlmIChkZWNvZGVyID09IEZYX0JTVFJDKCJBU0NJSUhleERlY29kZSIpIHx8IGRlY29kZXIgPT0gRlhfQlNUUkMoIkFIeCIpKSB7DQotICAgICAgICByZXR1cm4gX0hleERlY29kZShzcmNfYnVmLCBsaW1pdCwgZGVzdF9idWYsIGRlc3Rfc2l6ZSk7DQotICAgIH0gZWxzZSBpZiAoZGVjb2RlciA9PSBGWF9CU1RSQygiRmxhdGVEZWNvZGUiKSB8fCBkZWNvZGVyID09IEZYX0JTVFJDKCJGbCIpKSB7DQotICAgICAgICByZXR1cm4gRlBERkFQSV9GbGF0ZU9yTFpXRGVjb2RlKEZBTFNFLCBzcmNfYnVmLCBsaW1pdCwgcFBhcmFtLCBkZXN0X3NpemUsIGRlc3RfYnVmLCBkZXN0X3NpemUpOw0KLSAgICB9IGVsc2UgaWYgKGRlY29kZXIgPT0gRlhfQlNUUkMoIkxaV0RlY29kZSIpIHx8IGRlY29kZXIgPT0gRlhfQlNUUkMoIkxaVyIpKSB7DQotICAgICAgICByZXR1cm4gRlBERkFQSV9GbGF0ZU9yTFpXRGVjb2RlKFRSVUUsIHNyY19idWYsIGxpbWl0LCBwUGFyYW0sIDAsIGRlc3RfYnVmLCBkZXN0X3NpemUpOw0KLSAgICB9IGVsc2UgaWYgKGRlY29kZXIgPT0gRlhfQlNUUkMoIkRDVERlY29kZSIpIHx8IGRlY29kZXIgPT0gRlhfQlNUUkMoIkRDVCIpKSB7DQotICAgICAgICBJQ29kZWNfU2NhbmxpbmVEZWNvZGVyKiBwRGVjb2RlciA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0SnBlZ01vZHVsZSgpLT5DcmVhdGVEZWNvZGVyKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2J1ZiwgbGltaXQsIHdpZHRoLCBoZWlnaHQsIDAsIHBQYXJhbSA/IHBQYXJhbS0+R2V0SW50ZWdlcihGWF9CU1RSQygiQ29sb3JUcmFuc2Zvcm0iKSwgMSkgOiAxKTsNCi0gICAgICAgIHJldHVybiBfRGVjb2RlQWxsU2NhbmxpbmVzKHBEZWNvZGVyLCBkZXN0X2J1ZiwgZGVzdF9zaXplKTsNCi0gICAgfSBlbHNlIGlmIChkZWNvZGVyID09IEZYX0JTVFJDKCJSdW5MZW5ndGhEZWNvZGUiKSB8fCBkZWNvZGVyID09IEZYX0JTVFJDKCJSTCIpKSB7DQotICAgICAgICByZXR1cm4gUnVuTGVuZ3RoRGVjb2RlKHNyY19idWYsIGxpbWl0LCBkZXN0X2J1ZiwgZGVzdF9zaXplKTsNCi0gICAgfQ0KLSAgICBkZXN0X3NpemUgPSAwOw0KLSAgICBkZXN0X2J1ZiA9IDA7DQotICAgIHJldHVybiAoRlhfRFdPUkQpIC0gMTsNCi19DQotZXh0ZXJuIGNvbnN0IEZYX0xQQ1NUUiBfUERGX0NoYXJUeXBlOw0KLUNQREZfU3RyZWFtKiBDUERGX1N0cmVhbVBhcnNlcjo6UmVhZElubGluZVN0cmVhbShDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0RpY3Rpb25hcnkqIHBEaWN0LCBDUERGX09iamVjdCogcENTT2JqLCBGWF9CT09MIGJEZWNvZGUpDQotew0KLSAgICBpZiAobV9Qb3MgPT0gbV9TaXplKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAoX1BERl9DaGFyVHlwZVttX3BCdWZbbV9Qb3NdXSA9PSAnVycpIHsNCi0gICAgICAgIG1fUG9zICsrOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIERlY29kZXI7DQotICAgIENQREZfRGljdGlvbmFyeSogcFBhcmFtID0gTlVMTDsNCi0gICAgQ1BERl9PYmplY3QqIHBGaWx0ZXIgPSBwRGljdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJGaWx0ZXIiKSk7DQotICAgIGlmIChwRmlsdGVyID09IE5VTEwpIHsNCi0gICAgfSBlbHNlIGlmIChwRmlsdGVyLT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICBEZWNvZGVyID0gKChDUERGX0FycmF5KilwRmlsdGVyKS0+R2V0U3RyaW5nKDApOw0KLSAgICAgICAgQ1BERl9BcnJheSogcFBhcmFtcyA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiRGVjb2RlUGFybXMiKSk7DQotICAgICAgICBpZiAocFBhcmFtcykgew0KLSAgICAgICAgICAgIHBQYXJhbSA9IHBQYXJhbXMtPkdldERpY3QoMCk7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBEZWNvZGVyID0gcEZpbHRlci0+R2V0U3RyaW5nKCk7DQotICAgICAgICBwUGFyYW0gPSBwRGljdC0+R2V0RGljdChGWF9CU1RSQygiRGVjb2RlUGFybXMiKSk7DQotICAgIH0NCi0gICAgRlhfRFdPUkQgd2lkdGggPSBwRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiV2lkdGgiKSk7DQotICAgIEZYX0RXT1JEIGhlaWdodCA9IHBEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJIZWlnaHQiKSk7DQotICAgIEZYX0RXT1JEIE9yaWdTaXplID0gMDsNCi0gICAgaWYgKHBDU09iaiAhPSBOVUxMKSB7DQotICAgICAgICBGWF9EV09SRCBicGMgPSBwRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiQml0c1BlckNvbXBvbmVudCIpKTsNCi0gICAgICAgIEZYX0RXT1JEIG5Db21wb25lbnRzID0gMTsNCi0gICAgICAgIENQREZfQ29sb3JTcGFjZSogcENTID0gcERvYy0+TG9hZENvbG9yU3BhY2UocENTT2JqKTsNCi0gICAgICAgIGlmIChwQ1MgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIG5Db21wb25lbnRzID0gMzsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbkNvbXBvbmVudHMgPSBwQ1MtPkNvdW50Q29tcG9uZW50cygpOw0KLSAgICAgICAgICAgIHBEb2MtPkdldFBhZ2VEYXRhKCktPlJlbGVhc2VDb2xvclNwYWNlKHBDU09iaik7DQotICAgICAgICB9DQotICAgICAgICBGWF9EV09SRCBwaXRjaCA9IHdpZHRoOw0KLSAgICAgICAgaWYgKGJwYyAmJiBwaXRjaCA+IElOVF9NQVggLyBicGMpIHsNCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIHBpdGNoICo9IGJwYzsNCi0gICAgICAgIGlmIChuQ29tcG9uZW50cyAmJiBwaXRjaCA+IElOVF9NQVggLyBuQ29tcG9uZW50cykgew0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcGl0Y2ggKj0gbkNvbXBvbmVudHM7DQotICAgICAgICBpZiAocGl0Y2ggPiBJTlRfTUFYIC0gNykgew0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcGl0Y2ggKz0gNzsNCi0gICAgICAgIHBpdGNoIC89IDg7DQotICAgICAgICBPcmlnU2l6ZSA9IHBpdGNoOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYgKHdpZHRoID4gSU5UX01BWCAtIDcpIHsNCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIE9yaWdTaXplID0gKCh3aWR0aCArIDcpIC8gOCk7DQotICAgIH0NCi0gICAgaWYgKGhlaWdodCAmJiBPcmlnU2l6ZSA+IElOVF9NQVggLyBoZWlnaHQpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIE9yaWdTaXplICo9IGhlaWdodDsNCi0gICAgRlhfTFBCWVRFIHBEYXRhID0gTlVMTDsNCi0gICAgRlhfRFdPUkQgZHdTdHJlYW1TaXplOw0KLSAgICBpZiAoRGVjb2Rlci5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIGlmIChPcmlnU2l6ZSA+IG1fU2l6ZSAtIG1fUG9zKSB7DQotICAgICAgICAgICAgT3JpZ1NpemUgPSBtX1NpemUgLSBtX1BvczsNCi0gICAgICAgIH0NCi0gICAgICAgIHBEYXRhID0gRlhfQWxsb2MoRlhfQllURSwgT3JpZ1NpemUpOw0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIocERhdGEsIG1fcEJ1ZiArIG1fUG9zLCBPcmlnU2l6ZSk7DQotICAgICAgICBkd1N0cmVhbVNpemUgPSBPcmlnU2l6ZTsNCi0gICAgICAgIG1fUG9zICs9IE9yaWdTaXplOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgRlhfRFdPUkQgZHdEZXN0U2l6ZSA9IE9yaWdTaXplOw0KLSAgICAgICAgZHdTdHJlYW1TaXplID0gUERGX0RlY29kZUlubGluZVN0cmVhbShtX3BCdWYgKyBtX1BvcywgbV9TaXplIC0gbV9Qb3MsIHdpZHRoLCBoZWlnaHQsIERlY29kZXIsIHBQYXJhbSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERhdGEsIGR3RGVzdFNpemUpOw0KLSAgICAgICAgaWYgKChpbnQpZHdTdHJlYW1TaXplIDwgMCkgew0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGJEZWNvZGUpIHsNCi0gICAgICAgICAgICBtX1BvcyArPSBkd1N0cmVhbVNpemU7DQotICAgICAgICAgICAgZHdTdHJlYW1TaXplID0gZHdEZXN0U2l6ZTsNCi0gICAgICAgICAgICBpZiAocEZpbHRlci0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgew0KLSAgICAgICAgICAgICAgICAoKENQREZfQXJyYXkqKXBGaWx0ZXIpLT5SZW1vdmVBdCgwKTsNCi0gICAgICAgICAgICAgICAgQ1BERl9BcnJheSogcFBhcmFtcyA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiRGVjb2RlUGFybXMiKSk7DQotICAgICAgICAgICAgICAgIGlmIChwUGFyYW1zKSB7DQotICAgICAgICAgICAgICAgICAgICBwUGFyYW1zLT5SZW1vdmVBdCgwKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHBEaWN0LT5SZW1vdmVBdChGWF9CU1RSQygiRmlsdGVyIikpOw0KLSAgICAgICAgICAgICAgICBwRGljdC0+UmVtb3ZlQXQoRlhfQlNUUkMoIkRlY29kZVBhcm1zIikpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYgKHBEYXRhKSB7DQotICAgICAgICAgICAgICAgIEZYX0ZyZWUocERhdGEpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9EV09SRCBkd1NhdmVQb3MgPSBtX1BvczsNCi0gICAgICAgICAgICBtX1BvcyArPSBkd1N0cmVhbVNpemU7DQotICAgICAgICAgICAgd2hpbGUgKDEpIHsNCi0gICAgICAgICAgICAgICAgRlhfRFdPUkQgZHdQcmV2UG9zID0gbV9Qb3M7DQotICAgICAgICAgICAgICAgIENQREZfU3RyZWFtUGFyc2VyOjpTeW50YXhUeXBlIHR5cGUgPSBQYXJzZU5leHRFbGVtZW50KCk7DQotICAgICAgICAgICAgICAgIGlmICh0eXBlID09IENQREZfU3RyZWFtUGFyc2VyOjpFbmRPZkRhdGEpIHsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmICh0eXBlICE9IENQREZfU3RyZWFtUGFyc2VyOjpLZXl3b3JkKSB7DQotICAgICAgICAgICAgICAgICAgICBkd1N0cmVhbVNpemUgKz0gbV9Qb3MgLSBkd1ByZXZQb3M7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoR2V0V29yZFNpemUoKSA9PSAyICYmIEdldFdvcmRCdWYoKVswXSA9PSAnRScgJiYNCi0gICAgICAgICAgICAgICAgICAgICAgICBHZXRXb3JkQnVmKClbMV0gPT0gJ0knKSB7DQotICAgICAgICAgICAgICAgICAgICBtX1BvcyA9IGR3UHJldlBvczsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGR3U3RyZWFtU2l6ZSArPSBtX1BvcyAtIGR3UHJldlBvczsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9Qb3MgPSBkd1NhdmVQb3M7DQotICAgICAgICAgICAgcERhdGEgPSBGWF9BbGxvYyhGWF9CWVRFLCBkd1N0cmVhbVNpemUpOw0KLSAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKHBEYXRhLCBtX3BCdWYgKyBtX1BvcywgZHdTdHJlYW1TaXplKTsNCi0gICAgICAgICAgICBtX1BvcyArPSBkd1N0cmVhbVNpemU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcERpY3QtPlNldEF0SW50ZWdlcihGWF9CU1RSQygiTGVuZ3RoIiksIChpbnQpZHdTdHJlYW1TaXplKTsNCi0gICAgcmV0dXJuIENQREZfU3RyZWFtOjpDcmVhdGUocERhdGEsIGR3U3RyZWFtU2l6ZSwgcERpY3QpOw0KLX0NCi0jZGVmaW5lIE1BWF9XT1JEX0JVRkZFUiAyNTYNCi0jZGVmaW5lIE1BWF9TVFJJTkdfTEVOR1RICTMyNzY3DQotI2RlZmluZSBGWERXT1JEX1RSVUUgRlhEV09SRF9GUk9NX0xTQkZJUlNUKDB4NjU3NTcyNzQpDQotI2RlZmluZSBGWERXT1JEX05VTEwgRlhEV09SRF9GUk9NX0xTQkZJUlNUKDB4NmM2Yzc1NmUpDQotI2RlZmluZSBGWERXT1JEX0ZBTFMgRlhEV09SRF9GUk9NX0xTQkZJUlNUKDB4NzM2YzYxNjYpDQotQ1BERl9TdHJlYW1QYXJzZXI6OlN5bnRheFR5cGUgQ1BERl9TdHJlYW1QYXJzZXI6OlBhcnNlTmV4dEVsZW1lbnQoKQ0KLXsNCi0gICAgaWYgKG1fcExhc3RPYmopIHsNCi0gICAgICAgIG1fcExhc3RPYmotPlJlbGVhc2UoKTsNCi0gICAgICAgIG1fcExhc3RPYmogPSBOVUxMOw0KLSAgICB9DQotICAgIG1fV29yZFNpemUgPSAwOw0KLSAgICBGWF9CT09MIGJJc051bWJlciA9IFRSVUU7DQotICAgIGlmIChtX1BvcyA+PSBtX1NpemUpIHsNCi0gICAgICAgIHJldHVybiBFbmRPZkRhdGE7DQotICAgIH0NCi0gICAgaW50IGNoID0gbV9wQnVmW21fUG9zKytdOw0KLSAgICBpbnQgdHlwZSA9IF9QREZfQ2hhclR5cGVbY2hdOw0KLSAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgd2hpbGUgKHR5cGUgPT0gJ1cnKSB7DQotICAgICAgICAgICAgaWYgKG1fU2l6ZSA8PSBtX1Bvcykgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRW5kT2ZEYXRhOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjaCA9IG1fcEJ1ZlttX1BvcysrXTsNCi0gICAgICAgICAgICB0eXBlID0gX1BERl9DaGFyVHlwZVtjaF07DQotICAgICAgICB9DQotICAgICAgICBpZiAoY2ggIT0gJyUnKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgICAgIGlmIChtX1NpemUgPD0gbV9Qb3MpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEVuZE9mRGF0YTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgY2ggPSBtX3BCdWZbbV9Qb3MrK107DQotICAgICAgICAgICAgaWYgKGNoID09ICdccicgfHwgY2ggPT0gJ1xuJykgew0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICB0eXBlID0gX1BERl9DaGFyVHlwZVtjaF07DQotICAgIH0NCi0gICAgaWYgKHR5cGUgPT0gJ0QnICYmIGNoICE9ICcvJykgew0KLSAgICAgICAgbV9Qb3MgLS07DQotICAgICAgICBtX3BMYXN0T2JqID0gUmVhZE5leHRPYmplY3QoKTsNCi0gICAgICAgIHJldHVybiBPdGhlcnM7DQotICAgIH0NCi0gICAgd2hpbGUgKDEpIHsNCi0gICAgICAgIGlmIChtX1dvcmRTaXplIDwgTUFYX1dPUkRfQlVGRkVSKSB7DQotICAgICAgICAgICAgbV9Xb3JkQnVmZmVyW21fV29yZFNpemUrK10gPSBjaDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICh0eXBlICE9ICdOJykgew0KLSAgICAgICAgICAgIGJJc051bWJlciA9IEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fU2l6ZSA8PSBtX1Bvcykgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgY2ggPSBtX3BCdWZbbV9Qb3MrK107DQotICAgICAgICB0eXBlID0gX1BERl9DaGFyVHlwZVtjaF07DQotICAgICAgICBpZiAodHlwZSA9PSAnRCcgfHwgdHlwZSA9PSAnVycpIHsNCi0gICAgICAgICAgICBtX1BvcyAtLTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX1dvcmRCdWZmZXJbbV9Xb3JkU2l6ZV0gPSAwOw0KLSAgICBpZiAoYklzTnVtYmVyKSB7DQotICAgICAgICByZXR1cm4gTnVtYmVyOw0KLSAgICB9DQotICAgIGlmIChtX1dvcmRCdWZmZXJbMF0gPT0gJy8nKSB7DQotICAgICAgICByZXR1cm4gTmFtZTsNCi0gICAgfQ0KLSAgICBpZiAobV9Xb3JkU2l6ZSA9PSA0KSB7DQotICAgICAgICBpZiAoKihGWF9EV09SRCopbV9Xb3JkQnVmZmVyID09IEZYRFdPUkRfVFJVRSkgew0KLSAgICAgICAgICAgIG1fcExhc3RPYmogPSBDUERGX0Jvb2xlYW46OkNyZWF0ZShUUlVFKTsNCi0gICAgICAgICAgICByZXR1cm4gT3RoZXJzOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCooRlhfRFdPUkQqKW1fV29yZEJ1ZmZlciA9PSBGWERXT1JEX05VTEwpIHsNCi0gICAgICAgICAgICBtX3BMYXN0T2JqID0gQ1BERl9OdWxsOjpDcmVhdGUoKTsNCi0gICAgICAgICAgICByZXR1cm4gT3RoZXJzOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2UgaWYgKG1fV29yZFNpemUgPT0gNSkgew0KLSAgICAgICAgaWYgKCooRlhfRFdPUkQqKW1fV29yZEJ1ZmZlciA9PSBGWERXT1JEX0ZBTFMgJiYgbV9Xb3JkQnVmZmVyWzRdID09ICdlJykgew0KLSAgICAgICAgICAgIG1fcExhc3RPYmogPSBDUERGX0Jvb2xlYW46OkNyZWF0ZShGQUxTRSk7DQotICAgICAgICAgICAgcmV0dXJuIE90aGVyczsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gS2V5d29yZDsNCi19DQotdm9pZCBDUERGX1N0cmVhbVBhcnNlcjo6U2tpcFBhdGhPYmplY3QoKQ0KLXsNCi0gICAgRlhfRFdPUkQgY29tbWFuZF9zdGFydHBvcyA9IG1fUG9zOw0KLSAgICBpZiAobV9Qb3MgPj0gbV9TaXplKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaW50IGNoID0gbV9wQnVmW21fUG9zKytdOw0KLSAgICBpbnQgdHlwZSA9IF9QREZfQ2hhclR5cGVbY2hdOw0KLSAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgd2hpbGUgKHR5cGUgPT0gJ1cnKSB7DQotICAgICAgICAgICAgaWYgKG1fUG9zID49IG1fU2l6ZSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNoID0gbV9wQnVmW21fUG9zKytdOw0KLSAgICAgICAgICAgIHR5cGUgPSBfUERGX0NoYXJUeXBlW2NoXTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICh0eXBlICE9ICdOJykgew0KLSAgICAgICAgICAgIG1fUG9zID0gY29tbWFuZF9zdGFydHBvczsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgICAgIHdoaWxlICh0eXBlICE9ICdXJykgew0KLSAgICAgICAgICAgICAgICBpZiAobV9Qb3MgPj0gbV9TaXplKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgY2ggPSBtX3BCdWZbbV9Qb3MrK107DQotICAgICAgICAgICAgICAgIHR5cGUgPSBfUERGX0NoYXJUeXBlW2NoXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgd2hpbGUgKHR5cGUgPT0gJ1cnKSB7DQotICAgICAgICAgICAgICAgIGlmIChtX1BvcyA+PSBtX1NpemUpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBjaCA9IG1fcEJ1ZlttX1BvcysrXTsNCi0gICAgICAgICAgICAgICAgdHlwZSA9IF9QREZfQ2hhclR5cGVbY2hdOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAodHlwZSA9PSAnTicpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIEZYX0RXT1JEIG9wX3N0YXJ0cG9zID0gbV9Qb3MgLSAxOw0KLSAgICAgICAgICAgIHdoaWxlICh0eXBlICE9ICdXJyAmJiB0eXBlICE9ICdEJykgew0KLSAgICAgICAgICAgICAgICBpZiAobV9Qb3MgPj0gbV9TaXplKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgY2ggPSBtX3BCdWZbbV9Qb3MrK107DQotICAgICAgICAgICAgICAgIHR5cGUgPSBfUERGX0NoYXJUeXBlW2NoXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKG1fUG9zIC0gb3Bfc3RhcnRwb3MgPT0gMikgew0KLSAgICAgICAgICAgICAgICBpbnQgb3AgPSBtX3BCdWZbb3Bfc3RhcnRwb3NdOw0KLSAgICAgICAgICAgICAgICBpZiAob3AgPT0gJ20nIHx8IG9wID09ICdsJyB8fCBvcCA9PSAnYycgfHwgb3AgPT0gJ3YnIHx8IG9wID09ICd5Jykgew0KLSAgICAgICAgICAgICAgICAgICAgY29tbWFuZF9zdGFydHBvcyA9IG1fUG9zOw0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fUG9zIC0gb3Bfc3RhcnRwb3MgPT0gMykgew0KLSAgICAgICAgICAgICAgICBpZiAobV9wQnVmW29wX3N0YXJ0cG9zXSA9PSAncicgJiYgbV9wQnVmW29wX3N0YXJ0cG9zICsgMV0gPT0gJ2UnKSB7DQotICAgICAgICAgICAgICAgICAgICBjb21tYW5kX3N0YXJ0cG9zID0gbV9Qb3M7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBtX1BvcyA9IGNvbW1hbmRfc3RhcnRwb3M7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLUNQREZfT2JqZWN0KiBDUERGX1N0cmVhbVBhcnNlcjo6UmVhZE5leHRPYmplY3QoRlhfQk9PTCBiQWxsb3dOZXN0ZWRBcnJheSwgRlhfQk9PTCBiSW5BcnJheSkNCi17DQotICAgIEZYX0JPT0wgYklzTnVtYmVyOw0KLSAgICBHZXROZXh0V29yZChiSXNOdW1iZXIpOw0KLSAgICBpZiAobV9Xb3JkU2l6ZSA9PSAwKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAoYklzTnVtYmVyKSB7DQotICAgICAgICBtX1dvcmRCdWZmZXJbbV9Xb3JkU2l6ZV0gPSAwOw0KLSAgICAgICAgcmV0dXJuIENQREZfTnVtYmVyOjpDcmVhdGUoQ0ZYX0J5dGVTdHJpbmdDKG1fV29yZEJ1ZmZlciwgbV9Xb3JkU2l6ZSkpOw0KLSAgICB9DQotICAgIGludCBmaXJzdF9jaGFyID0gbV9Xb3JkQnVmZmVyWzBdOw0KLSAgICBpZiAoZmlyc3RfY2hhciA9PSAnLycpIHsNCi0gICAgICAgIHJldHVybiBDUERGX05hbWU6OkNyZWF0ZShQREZfTmFtZURlY29kZShDRlhfQnl0ZVN0cmluZ0MobV9Xb3JkQnVmZmVyICsgMSwgbV9Xb3JkU2l6ZSAtIDEpKSk7DQotICAgIH0NCi0gICAgaWYgKGZpcnN0X2NoYXIgPT0gJygnKSB7DQotICAgICAgICByZXR1cm4gQ1BERl9TdHJpbmc6OkNyZWF0ZShSZWFkU3RyaW5nKCkpOw0KLSAgICB9DQotICAgIGlmIChmaXJzdF9jaGFyID09ICc8Jykgew0KLSAgICAgICAgaWYgKG1fV29yZFNpemUgPT0gMSkgew0KLSAgICAgICAgICAgIHJldHVybiBDUERGX1N0cmluZzo6Q3JlYXRlKFJlYWRIZXhTdHJpbmcoKSwgVFJVRSk7DQotICAgICAgICB9DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gQ1BERl9EaWN0aW9uYXJ5OjpDcmVhdGUoKTsNCi0gICAgICAgIHdoaWxlICgxKSB7DQotICAgICAgICAgICAgR2V0TmV4dFdvcmQoYklzTnVtYmVyKTsNCi0gICAgICAgICAgICBpZiAobV9Xb3JkU2l6ZSA9PSAwKSB7DQotICAgICAgICAgICAgICAgIHBEaWN0LT5SZWxlYXNlKCk7DQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobV9Xb3JkU2l6ZSA9PSAyICYmIG1fV29yZEJ1ZmZlclswXSA9PSAnPicpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChtX1dvcmRCdWZmZXJbMF0gIT0gJy8nKSB7DQotICAgICAgICAgICAgICAgIHBEaWN0LT5SZWxlYXNlKCk7DQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBrZXkgPSBQREZfTmFtZURlY29kZShDRlhfQnl0ZVN0cmluZ0MobV9Xb3JkQnVmZmVyICsgMSwgbV9Xb3JkU2l6ZSAtIDEpKTsNCi0gICAgICAgICAgICBDUERGX09iamVjdCogcE9iaiA9IFJlYWROZXh0T2JqZWN0KFRSVUUpOw0KLSAgICAgICAgICAgIGlmIChwT2JqID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgaWYgKHBEaWN0KSB7DQotICAgICAgICAgICAgICAgICAgICBwRGljdC0+UmVsZWFzZSgpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoIWtleS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICAgICAgcERpY3QtPlNldEF0KGtleSwgcE9iaik7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgcE9iai0+UmVsZWFzZSgpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBwRGljdDsNCi0gICAgfQ0KLSAgICBpZiAoZmlyc3RfY2hhciA9PSAnWycpIHsNCi0gICAgICAgIGlmICghYkFsbG93TmVzdGVkQXJyYXkgJiYgYkluQXJyYXkpIHsNCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIENQREZfQXJyYXkqIHBBcnJheSA9IENQREZfQXJyYXk6OkNyZWF0ZSgpOw0KLSAgICAgICAgd2hpbGUgKDEpIHsNCi0gICAgICAgICAgICBDUERGX09iamVjdCogcE9iaiA9IFJlYWROZXh0T2JqZWN0KGJBbGxvd05lc3RlZEFycmF5LCBUUlVFKTsNCi0gICAgICAgICAgICBpZiAocE9iaiA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIGlmIChtX1dvcmRTaXplID09IDAgfHwgbV9Xb3JkQnVmZmVyWzBdID09ICddJykgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBBcnJheTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAobV9Xb3JkQnVmZmVyWzBdID09ICdbJykgew0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBwQXJyYXktPkFkZChwT2JqKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKG1fV29yZFNpemUgPT0gNCkgew0KLSAgICAgICAgaWYgKCooRlhfRFdPUkQqKW1fV29yZEJ1ZmZlciA9PSBGWERXT1JEX1RSVUUpIHsNCi0gICAgICAgICAgICByZXR1cm4gQ1BERl9Cb29sZWFuOjpDcmVhdGUoVFJVRSk7DQotICAgICAgICB9DQotICAgICAgICBpZiAoKihGWF9EV09SRCopbV9Xb3JkQnVmZmVyID09IEZYRFdPUkRfTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiBDUERGX051bGw6OkNyZWF0ZSgpOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2UgaWYgKG1fV29yZFNpemUgPT0gNSkgew0KLSAgICAgICAgaWYgKCooRlhfRFdPUkQqKW1fV29yZEJ1ZmZlciA9PSBGWERXT1JEX0ZBTFMgJiYgbV9Xb3JkQnVmZmVyWzRdID09ICdlJykgew0KLSAgICAgICAgICAgIHJldHVybiBDUERGX0Jvb2xlYW46OkNyZWF0ZShGQUxTRSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW1QYXJzZXI6OkdldE5leHRXb3JkKEZYX0JPT0wmIGJJc051bWJlcikNCi17DQotICAgIG1fV29yZFNpemUgPSAwOw0KLSAgICBiSXNOdW1iZXIgPSBUUlVFOw0KLSAgICBpZiAobV9TaXplIDw9IG1fUG9zKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaW50IGNoID0gbV9wQnVmW21fUG9zKytdOw0KLSAgICBpbnQgdHlwZSA9IF9QREZfQ2hhclR5cGVbY2hdOw0KLSAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgd2hpbGUgKHR5cGUgPT0gJ1cnKSB7DQotICAgICAgICAgICAgaWYgKG1fU2l6ZSA8PSBtX1Bvcykgew0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNoID0gbV9wQnVmW21fUG9zKytdOw0KLSAgICAgICAgICAgIHR5cGUgPSBfUERGX0NoYXJUeXBlW2NoXTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChjaCAhPSAnJScpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIHdoaWxlICgxKSB7DQotICAgICAgICAgICAgaWYgKG1fU2l6ZSA8PSBtX1Bvcykgew0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNoID0gbV9wQnVmW21fUG9zKytdOw0KLSAgICAgICAgICAgIGlmIChjaCA9PSAnXHInIHx8IGNoID09ICdcbicpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgdHlwZSA9IF9QREZfQ2hhclR5cGVbY2hdOw0KLSAgICB9DQotICAgIGlmICh0eXBlID09ICdEJykgew0KLSAgICAgICAgYklzTnVtYmVyID0gRkFMU0U7DQotICAgICAgICBtX1dvcmRCdWZmZXJbbV9Xb3JkU2l6ZSsrXSA9IGNoOw0KLSAgICAgICAgaWYgKGNoID09ICcvJykgew0KLSAgICAgICAgICAgIHdoaWxlICgxKSB7DQotICAgICAgICAgICAgICAgIGlmIChtX1NpemUgPD0gbV9Qb3MpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBjaCA9IG1fcEJ1ZlttX1BvcysrXTsNCi0gICAgICAgICAgICAgICAgdHlwZSA9IF9QREZfQ2hhclR5cGVbY2hdOw0KLSAgICAgICAgICAgICAgICBpZiAodHlwZSAhPSAnUicgJiYgdHlwZSAhPSAnTicpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fUG9zIC0tOw0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChtX1dvcmRTaXplIDwgTUFYX1dPUkRfQlVGRkVSKSB7DQotICAgICAgICAgICAgICAgICAgICBtX1dvcmRCdWZmZXJbbV9Xb3JkU2l6ZSsrXSA9IGNoOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnPCcpIHsNCi0gICAgICAgICAgICBpZiAobV9TaXplIDw9IG1fUG9zKSB7DQotICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgY2ggPSBtX3BCdWZbbV9Qb3MrK107DQotICAgICAgICAgICAgaWYgKGNoID09ICc8Jykgew0KLSAgICAgICAgICAgICAgICBtX1dvcmRCdWZmZXJbbV9Xb3JkU2l6ZSsrXSA9IGNoOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIG1fUG9zIC0tOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJz4nKSB7DQotICAgICAgICAgICAgaWYgKG1fU2l6ZSA8PSBtX1Bvcykgew0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNoID0gbV9wQnVmW21fUG9zKytdOw0KLSAgICAgICAgICAgIGlmIChjaCA9PSAnPicpIHsNCi0gICAgICAgICAgICAgICAgbV9Xb3JkQnVmZmVyW21fV29yZFNpemUrK10gPSBjaDsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBtX1BvcyAtLTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgd2hpbGUgKDEpIHsNCi0gICAgICAgIGlmIChtX1dvcmRTaXplIDwgTUFYX1dPUkRfQlVGRkVSKSB7DQotICAgICAgICAgICAgbV9Xb3JkQnVmZmVyW21fV29yZFNpemUrK10gPSBjaDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICh0eXBlICE9ICdOJykgew0KLSAgICAgICAgICAgIGJJc051bWJlciA9IEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fU2l6ZSA8PSBtX1Bvcykgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIGNoID0gbV9wQnVmW21fUG9zKytdOw0KLSAgICAgICAgdHlwZSA9IF9QREZfQ2hhclR5cGVbY2hdOw0KLSAgICAgICAgaWYgKHR5cGUgPT0gJ0QnIHx8IHR5cGUgPT0gJ1cnKSB7DQotICAgICAgICAgICAgbV9Qb3MgLS07DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0NCi19DQotQ0ZYX0J5dGVTdHJpbmcgQ1BERl9TdHJlYW1QYXJzZXI6OlJlYWRTdHJpbmcoKQ0KLXsNCi0gICAgaWYgKG1fU2l6ZSA8PSBtX1Bvcykgew0KLSAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKCk7DQotICAgIH0NCi0gICAgaW50IGNoID0gbV9wQnVmW21fUG9zKytdOw0KLSAgICBDRlhfQnl0ZVRleHRCdWYgYnVmOw0KLSAgICBpbnQgcGFybGV2ZWwgPSAwOw0KLSAgICBpbnQgc3RhdHVzID0gMCwgaUVzY0NvZGUgPSAwOw0KLSAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgc3dpdGNoIChzdGF0dXMpIHsNCi0gICAgICAgICAgICBjYXNlIDA6DQotICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnKScpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwYXJsZXZlbCA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Zi5HZXRMZW5ndGgoKSA+IE1BWF9TVFJJTkdfTEVOR1RIKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZyhidWYuR2V0QnVmZmVyKCksIE1BWF9TVFJJTkdfTEVOR1RIKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1Zi5HZXRCeXRlU3RyaW5nKCk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBwYXJsZXZlbCAtLTsNCi0gICAgICAgICAgICAgICAgICAgIGJ1Zi5BcHBlbmRDaGFyKCcpJyk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJygnKSB7DQotICAgICAgICAgICAgICAgICAgICBwYXJsZXZlbCArKzsNCi0gICAgICAgICAgICAgICAgICAgIGJ1Zi5BcHBlbmRDaGFyKCcoJyk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJ1xcJykgew0KLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gMTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIGJ1Zi5BcHBlbmRDaGFyKChjaGFyKWNoKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDE6DQotICAgICAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzcnKSB7DQotICAgICAgICAgICAgICAgICAgICBpRXNjQ29kZSA9IGNoIC0gJzAnOw0KLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gMjsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnbicpIHsNCi0gICAgICAgICAgICAgICAgICAgIGJ1Zi5BcHBlbmRDaGFyKCdcbicpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICdyJykgew0KLSAgICAgICAgICAgICAgICAgICAgYnVmLkFwcGVuZENoYXIoJ1xyJyk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJ3QnKSB7DQotICAgICAgICAgICAgICAgICAgICBidWYuQXBwZW5kQ2hhcignXHQnKTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnYicpIHsNCi0gICAgICAgICAgICAgICAgICAgIGJ1Zi5BcHBlbmRDaGFyKCdcYicpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICdmJykgew0KLSAgICAgICAgICAgICAgICAgICAgYnVmLkFwcGVuZENoYXIoJ1xmJyk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJ1xyJykgew0KLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gNDsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICdcbicpIHsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIGJ1Zi5BcHBlbmRDaGFyKGNoKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBzdGF0dXMgPSAwOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDI6DQotICAgICAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzcnKSB7DQotICAgICAgICAgICAgICAgICAgICBpRXNjQ29kZSA9IGlFc2NDb2RlICogOCArIGNoIC0gJzAnOw0KLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gMzsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIGJ1Zi5BcHBlbmRDaGFyKGlFc2NDb2RlKTsNCi0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IDA7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDM6DQotICAgICAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzcnKSB7DQotICAgICAgICAgICAgICAgICAgICBpRXNjQ29kZSA9IGlFc2NDb2RlICogOCArIGNoIC0gJzAnOw0KLSAgICAgICAgICAgICAgICAgICAgYnVmLkFwcGVuZENoYXIoaUVzY0NvZGUpOw0KLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gMDsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIGJ1Zi5BcHBlbmRDaGFyKGlFc2NDb2RlKTsNCi0gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IDA7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDQ6DQotICAgICAgICAgICAgICAgIHN0YXR1cyA9IDA7DQotICAgICAgICAgICAgICAgIGlmIChjaCAhPSAnXG4nKSB7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX1NpemUgPD0gbV9Qb3MpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIGNoID0gbV9wQnVmW21fUG9zKytdOw0KLSAgICB9DQotICAgIGlmIChtX1NpemUgPiBtX1Bvcykgew0KLSAgICAgICAgY2ggPSBtX3BCdWZbbV9Qb3MrK107DQotICAgIH0NCi0gICAgaWYgKGJ1Zi5HZXRMZW5ndGgoKSA+IE1BWF9TVFJJTkdfTEVOR1RIKSB7DQotICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoYnVmLkdldEJ1ZmZlcigpLCBNQVhfU1RSSU5HX0xFTkdUSCk7DQotICAgIH0NCi0gICAgcmV0dXJuIGJ1Zi5HZXRCeXRlU3RyaW5nKCk7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENQREZfU3RyZWFtUGFyc2VyOjpSZWFkSGV4U3RyaW5nKCkNCi17DQotICAgIGlmIChtX1NpemUgPD0gbV9Qb3MpIHsNCi0gICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZygpOw0KLSAgICB9DQotICAgIGludCBjaCA9IG1fcEJ1ZlttX1BvcysrXTsNCi0gICAgQ0ZYX0J5dGVUZXh0QnVmIGJ1ZjsNCi0gICAgRlhfQk9PTCBiRmlyc3QgPSBUUlVFOw0KLSAgICBpbnQgY29kZSA9IDA7DQotICAgIHdoaWxlICgxKSB7DQotICAgICAgICBpZiAoY2ggPT0gJz4nKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykgew0KLSAgICAgICAgICAgIGlmIChiRmlyc3QpIHsNCi0gICAgICAgICAgICAgICAgY29kZSA9IChjaCAtICcwJykgKiAxNjsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBjb2RlICs9IGNoIC0gJzAnOw0KLSAgICAgICAgICAgICAgICBidWYuQXBwZW5kQ2hhcigoY2hhciljb2RlKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgYkZpcnN0ID0gIWJGaXJzdDsNCi0gICAgICAgIH0gZWxzZSBpZiAoY2ggPj0gJ0EnICYmIGNoIDw9ICdGJykgew0KLSAgICAgICAgICAgIGlmIChiRmlyc3QpIHsNCi0gICAgICAgICAgICAgICAgY29kZSA9IChjaCAtICdBJyArIDEwKSAqIDE2Ow0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGNvZGUgKz0gY2ggLSAnQScgKyAxMDsNCi0gICAgICAgICAgICAgICAgYnVmLkFwcGVuZENoYXIoKGNoYXIpY29kZSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGJGaXJzdCA9ICFiRmlyc3Q7DQotICAgICAgICB9IGVsc2UgaWYgKGNoID49ICdhJyAmJiBjaCA8PSAnZicpIHsNCi0gICAgICAgICAgICBpZiAoYkZpcnN0KSB7DQotICAgICAgICAgICAgICAgIGNvZGUgPSAoY2ggLSAnYScgKyAxMCkgKiAxNjsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBjb2RlICs9IGNoIC0gJ2EnICsgMTA7DQotICAgICAgICAgICAgICAgIGJ1Zi5BcHBlbmRDaGFyKChjaGFyKWNvZGUpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBiRmlyc3QgPSAhYkZpcnN0Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fU2l6ZSA8PSBtX1Bvcykgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgY2ggPSBtX3BCdWZbbV9Qb3MrK107DQotICAgIH0NCi0gICAgaWYgKCFiRmlyc3QpIHsNCi0gICAgICAgIGJ1Zi5BcHBlbmRDaGFyKChjaGFyKWNvZGUpOw0KLSAgICB9DQotICAgIGlmIChidWYuR2V0TGVuZ3RoKCkgPiBNQVhfU1RSSU5HX0xFTkdUSCkgew0KLSAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKGJ1Zi5HZXRCdWZmZXIoKSwgTUFYX1NUUklOR19MRU5HVEgpOw0KLSAgICB9DQotICAgIHJldHVybiBidWYuR2V0Qnl0ZVN0cmluZygpOw0KLX0NCi0jZGVmaW5lIFBBR0VQQVJTRV9TVEFHRV9HRVRDT05URU5UCQkxDQotI2RlZmluZSBQQUdFUEFSU0VfU1RBR0VfUEFSU0UJCQkyDQotI2RlZmluZSBQQUdFUEFSU0VfU1RBR0VfQ0hFQ0tDTElQCQkzDQotQ1BERl9Db250ZW50UGFyc2VyOjpDUERGX0NvbnRlbnRQYXJzZXIoKQ0KLXsNCi0gICAgbV9wUGFyc2VyID0gTlVMTDsNCi0gICAgbV9wU3RyZWFtQXJyYXkgPSBOVUxMOw0KLSAgICBtX3BTaW5nbGVTdHJlYW0gPSBOVUxMOw0KLSAgICBtX3BEYXRhID0gTlVMTDsNCi0gICAgbV9TdGF0dXMgPSBSZWFkeTsNCi0gICAgbV9wVHlwZTNDaGFyID0gTlVMTDsNCi19DQotQ1BERl9Db250ZW50UGFyc2VyOjp+Q1BERl9Db250ZW50UGFyc2VyKCkNCi17DQotICAgIENsZWFyKCk7DQotfQ0KLXZvaWQgQ1BERl9Db250ZW50UGFyc2VyOjpDbGVhcigpDQotew0KLSAgICBpZiAobV9wUGFyc2VyKSB7DQotICAgICAgICBkZWxldGUgbV9wUGFyc2VyOw0KLSAgICB9DQotICAgIGlmIChtX3BTaW5nbGVTdHJlYW0pIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BTaW5nbGVTdHJlYW07DQotICAgIH0NCi0gICAgaWYgKG1fcFN0cmVhbUFycmF5KSB7DQotICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgbV9uU3RyZWFtczsgaSArKykNCi0gICAgICAgICAgICBpZiAobV9wU3RyZWFtQXJyYXlbaV0pIHsNCi0gICAgICAgICAgICAgICAgZGVsZXRlIG1fcFN0cmVhbUFycmF5W2ldOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIEZYX0ZyZWUobV9wU3RyZWFtQXJyYXkpOw0KLSAgICB9DQotICAgIGlmIChtX3BEYXRhICYmIG1fcFNpbmdsZVN0cmVhbSA9PSBOVUxMKSB7DQotICAgICAgICBGWF9GcmVlKCh2b2lkKiltX3BEYXRhKTsNCi0gICAgfQ0KLSAgICBtX3BQYXJzZXIgPSBOVUxMOw0KLSAgICBtX3BTdHJlYW1BcnJheSA9IE5VTEw7DQotICAgIG1fcFNpbmdsZVN0cmVhbSA9IE5VTEw7DQotICAgIG1fcERhdGEgPSBOVUxMOw0KLSAgICBtX1N0YXR1cyA9IFJlYWR5Ow0KLX0NCi12b2lkIENQREZfQ29udGVudFBhcnNlcjo6U3RhcnQoQ1BERl9QYWdlKiBwUGFnZSwgQ1BERl9QYXJzZU9wdGlvbnMqIHBPcHRpb25zKQ0KLXsNCi0gICAgaWYgKG1fU3RhdHVzICE9IFJlYWR5IHx8IHBQYWdlID09IE5VTEwgfHwgcFBhZ2UtPm1fcERvY3VtZW50ID09IE5VTEwgfHwgcFBhZ2UtPm1fcEZvcm1EaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIG1fU3RhdHVzID0gRG9uZTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX3BPYmplY3RzID0gcFBhZ2U7DQotICAgIG1fYkZvcm0gPSBGQUxTRTsNCi0gICAgaWYgKHBPcHRpb25zKSB7DQotICAgICAgICBtX09wdGlvbnMgPSAqcE9wdGlvbnM7DQotICAgIH0NCi0gICAgbV9TdGF0dXMgPSBUb0JlQ29udGludWVkOw0KLSAgICBtX0ludGVybmFsU3RhZ2UgPSBQQUdFUEFSU0VfU1RBR0VfR0VUQ09OVEVOVDsNCi0gICAgbV9DdXJyZW50T2Zmc2V0ID0gMDsNCi0gICAgQ1BERl9PYmplY3QqIHBDb250ZW50ID0gcFBhZ2UtPm1fcEZvcm1EaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkNvbnRlbnRzIikpOw0KLSAgICBpZiAocENvbnRlbnQgPT0gTlVMTCkgew0KLSAgICAgICAgbV9TdGF0dXMgPSBEb25lOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChwQ29udGVudC0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJFQU0pIHsNCi0gICAgICAgIG1fblN0cmVhbXMgPSAwOw0KLSAgICAgICAgbV9wU2luZ2xlU3RyZWFtID0gRlhfTkVXIENQREZfU3RyZWFtQWNjOw0KLSAgICAgICAgbV9wU2luZ2xlU3RyZWFtLT5Mb2FkQWxsRGF0YSgoQ1BERl9TdHJlYW0qKXBDb250ZW50LCBGQUxTRSk7DQotICAgIH0gZWxzZSBpZiAocENvbnRlbnQtPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgIENQREZfQXJyYXkqIHBBcnJheSA9IChDUERGX0FycmF5KilwQ29udGVudDsNCi0gICAgICAgIG1fblN0cmVhbXMgPSBwQXJyYXktPkdldENvdW50KCk7DQotICAgICAgICBpZiAobV9uU3RyZWFtcyA9PSAwKSB7DQotICAgICAgICAgICAgbV9TdGF0dXMgPSBEb25lOw0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fcFN0cmVhbUFycmF5ID0gRlhfQWxsb2MoQ1BERl9TdHJlYW1BY2MqLCBtX25TdHJlYW1zKTsNCi0gICAgICAgIEZYU1lTX21lbXNldDMyKG1fcFN0cmVhbUFycmF5LCAwLCBzaXplb2YoQ1BERl9TdHJlYW1BY2MqKSAqIG1fblN0cmVhbXMpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9TdGF0dXMgPSBEb25lOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9Db250ZW50UGFyc2VyOjpTdGFydChDUERGX0Zvcm0qIHBGb3JtLCBDUERGX0FsbFN0YXRlcyogcEdyYXBoaWNTdGF0ZXMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9BZmZpbmVNYXRyaXgqIHBQYXJlbnRNYXRyaXgsIENQREZfVHlwZTNDaGFyKiBwVHlwZTNDaGFyLCBDUERGX1BhcnNlT3B0aW9ucyogcE9wdGlvbnMsIGludCBsZXZlbCkNCi17DQotICAgIG1fcFR5cGUzQ2hhciA9IHBUeXBlM0NoYXI7DQotICAgIG1fcE9iamVjdHMgPSBwRm9ybTsNCi0gICAgbV9iRm9ybSA9IFRSVUU7DQotICAgIENGWF9BZmZpbmVNYXRyaXggZm9ybV9tYXRyaXggPSBwRm9ybS0+bV9wRm9ybURpY3QtPkdldE1hdHJpeChGWF9CU1RSQygiTWF0cml4IikpOw0KLSAgICBpZiAocEdyYXBoaWNTdGF0ZXMpIHsNCi0gICAgICAgIGZvcm1fbWF0cml4LkNvbmNhdChwR3JhcGhpY1N0YXRlcy0+bV9DVE0pOw0KLSAgICB9DQotICAgIENQREZfQXJyYXkqIHBCQm94ID0gcEZvcm0tPm1fcEZvcm1EaWN0LT5HZXRBcnJheShGWF9CU1RSQygiQkJveCIpKTsNCi0gICAgQ0ZYX0Zsb2F0UmVjdCBmb3JtX2Jib3g7DQotICAgIENQREZfUGF0aCBDbGlwUGF0aDsNCi0gICAgaWYgKHBCQm94KSB7DQotICAgICAgICBmb3JtX2Jib3ggPSBwQkJveC0+R2V0UmVjdCgpOw0KLSAgICAgICAgQ2xpcFBhdGguTmV3KCk7DQotICAgICAgICBDbGlwUGF0aC5BcHBlbmRSZWN0KGZvcm1fYmJveC5sZWZ0LCBmb3JtX2Jib3guYm90dG9tLCBmb3JtX2Jib3gucmlnaHQsIGZvcm1fYmJveC50b3ApOw0KLSAgICAgICAgQ2xpcFBhdGguVHJhbnNmb3JtKCZmb3JtX21hdHJpeCk7DQotICAgICAgICBpZiAocFBhcmVudE1hdHJpeCkgew0KLSAgICAgICAgICAgIENsaXBQYXRoLlRyYW5zZm9ybShwUGFyZW50TWF0cml4KTsNCi0gICAgICAgIH0NCi0gICAgICAgIGZvcm1fYmJveC5UcmFuc2Zvcm0oJmZvcm1fbWF0cml4KTsNCi0gICAgICAgIGlmIChwUGFyZW50TWF0cml4KSB7DQotICAgICAgICAgICAgZm9ybV9iYm94LlRyYW5zZm9ybShwUGFyZW50TWF0cml4KTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBSZXNvdXJjZXMgPSBwRm9ybS0+bV9wRm9ybURpY3QtPkdldERpY3QoRlhfQlNUUkMoIlJlc291cmNlcyIpKTsNCi0gICAgbV9wUGFyc2VyID0gRlhfTkVXIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjsNCi0gICAgbV9wUGFyc2VyLT5Jbml0aWFsaXplKCk7DQotICAgIG1fcFBhcnNlci0+UHJlcGFyZVBhcnNlKHBGb3JtLT5tX3BEb2N1bWVudCwgcEZvcm0tPm1fcFBhZ2VSZXNvdXJjZXMsIHBGb3JtLT5tX3BSZXNvdXJjZXMsIHBQYXJlbnRNYXRyaXgsIHBGb3JtLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUmVzb3VyY2VzLCAmZm9ybV9iYm94LCBwT3B0aW9ucywgcEdyYXBoaWNTdGF0ZXMsIGxldmVsKTsNCi0gICAgbV9wUGFyc2VyLT5tX3BDdXJTdGF0ZXMtPm1fQ1RNID0gZm9ybV9tYXRyaXg7DQotICAgIG1fcFBhcnNlci0+bV9wQ3VyU3RhdGVzLT5tX1BhcmVudE1hdHJpeCA9IGZvcm1fbWF0cml4Ow0KLSAgICBpZiAoQ2xpcFBhdGguTm90TnVsbCgpKSB7DQotICAgICAgICBtX3BQYXJzZXItPm1fcEN1clN0YXRlcy0+bV9DbGlwUGF0aC5BcHBlbmRQYXRoKENsaXBQYXRoLCBGWEZJTExfV0lORElORywgVFJVRSk7DQotICAgIH0NCi0gICAgaWYgKHBGb3JtLT5tX1RyYW5zcGFyZW5jeSAmIFBERlRSQU5TX0dST1VQKSB7DQotICAgICAgICBDUERGX0dlbmVyYWxTdGF0ZURhdGEqIHBEYXRhID0gbV9wUGFyc2VyLT5tX3BDdXJTdGF0ZXMtPm1fR2VuZXJhbFN0YXRlLkdldE1vZGlmeSgpOw0KLSAgICAgICAgcERhdGEtPm1fQmxlbmRUeXBlID0gRlhESUJfQkxFTkRfTk9STUFMOw0KLSAgICAgICAgcERhdGEtPm1fU3Ryb2tlQWxwaGEgPSAxLjBmOw0KLSAgICAgICAgcERhdGEtPm1fRmlsbEFscGhhID0gMS4wZjsNCi0gICAgICAgIHBEYXRhLT5tX3BTb2Z0TWFzayA9IE5VTEw7DQotICAgIH0NCi0gICAgbV9uU3RyZWFtcyA9IDA7DQotICAgIG1fcFNpbmdsZVN0cmVhbSA9IEZYX05FVyBDUERGX1N0cmVhbUFjYzsNCi0gICAgaWYgKHBGb3JtLT5tX3BEb2N1bWVudCkgew0KLSAgICAgICAgbV9wU2luZ2xlU3RyZWFtLT5Mb2FkQWxsRGF0YShwRm9ybS0+bV9wRm9ybVN0cmVhbSwgRkFMU0UpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wU2luZ2xlU3RyZWFtLT5Mb2FkQWxsRGF0YShwRm9ybS0+bV9wRm9ybVN0cmVhbSwgRkFMU0UpOw0KLSAgICB9DQotICAgIG1fcERhdGEgPSAoRlhfTFBCWVRFKW1fcFNpbmdsZVN0cmVhbS0+R2V0RGF0YSgpOw0KLSAgICBtX1NpemUgPSBtX3BTaW5nbGVTdHJlYW0tPkdldFNpemUoKTsNCi0gICAgbV9TdGF0dXMgPSBUb0JlQ29udGludWVkOw0KLSAgICBtX0ludGVybmFsU3RhZ2UgPSBQQUdFUEFSU0VfU1RBR0VfUEFSU0U7DQotICAgIG1fQ3VycmVudE9mZnNldCA9IDA7DQotfQ0KLXZvaWQgQ1BERl9Db250ZW50UGFyc2VyOjpDb250aW51ZShJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIGludCBzdGVwcyA9IDA7DQotICAgIHdoaWxlIChtX1N0YXR1cyA9PSBUb0JlQ29udGludWVkKSB7DQotICAgICAgICBpZiAobV9JbnRlcm5hbFN0YWdlID09IFBBR0VQQVJTRV9TVEFHRV9HRVRDT05URU5UKSB7DQotICAgICAgICAgICAgaWYgKG1fQ3VycmVudE9mZnNldCA9PSBtX25TdHJlYW1zKSB7DQotICAgICAgICAgICAgICAgIGlmIChtX3BTdHJlYW1BcnJheSkgew0KLSAgICAgICAgICAgICAgICAgICAgbV9TaXplID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGk7DQotICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9uU3RyZWFtczsgaSArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIHNpemUgPSBtX3BTdHJlYW1BcnJheVtpXS0+R2V0U2l6ZSgpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX1NpemUgKyBzaXplICsgMSA8PSBtX1NpemUpIHsNCi0JCQkJCQkJbV9TdGF0dXMgPSBEb25lOw0KLQkJCQkJCQlyZXR1cm47DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fU2l6ZSArPSBzaXplICsgMTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIG1fcERhdGEgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1NpemUpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3BEYXRhKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9TdGF0dXMgPSBEb25lOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIHBvcyA9IDA7DQotICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9uU3RyZWFtczsgaSArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcERhdGEgKyBwb3MsIG1fcFN0cmVhbUFycmF5W2ldLT5HZXREYXRhKCksIG1fcFN0cmVhbUFycmF5W2ldLT5HZXRTaXplKCkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBvcyArPSBtX3BTdHJlYW1BcnJheVtpXS0+R2V0U2l6ZSgpICsgMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3BEYXRhW3BvcyAtIDFdID0gJyAnOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3BTdHJlYW1BcnJheVtpXTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIEZYX0ZyZWUobV9wU3RyZWFtQXJyYXkpOw0KLSAgICAgICAgICAgICAgICAgICAgbV9wU3RyZWFtQXJyYXkgPSBOVUxMOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgbV9wRGF0YSA9IChGWF9MUEJZVEUpbV9wU2luZ2xlU3RyZWFtLT5HZXREYXRhKCk7DQotICAgICAgICAgICAgICAgICAgICBtX1NpemUgPSBtX3BTaW5nbGVTdHJlYW0tPkdldFNpemUoKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBtX0ludGVybmFsU3RhZ2UgPSBQQUdFUEFSU0VfU1RBR0VfUEFSU0U7DQotICAgICAgICAgICAgICAgIG1fQ3VycmVudE9mZnNldCA9IDA7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgQ1BERl9BcnJheSogcENvbnRlbnQgPSBtX3BPYmplY3RzLT5tX3BGb3JtRGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIkNvbnRlbnRzIikpOw0KLSAgICAgICAgICAgICAgICBtX3BTdHJlYW1BcnJheVttX0N1cnJlbnRPZmZzZXRdID0gRlhfTkVXIENQREZfU3RyZWFtQWNjOw0KLSAgICAgICAgICAgICAgICBDUERGX1N0cmVhbSogcFN0cmVhbU9iaiA9IChDUERGX1N0cmVhbSopcENvbnRlbnQtPkdldEVsZW1lbnRWYWx1ZShtX0N1cnJlbnRPZmZzZXQpOw0KLSAgICAgICAgICAgICAgICBtX3BTdHJlYW1BcnJheVttX0N1cnJlbnRPZmZzZXRdLT5Mb2FkQWxsRGF0YShwU3RyZWFtT2JqLCBGQUxTRSk7DQotICAgICAgICAgICAgICAgIG1fQ3VycmVudE9mZnNldCArKzsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9JbnRlcm5hbFN0YWdlID09IFBBR0VQQVJTRV9TVEFHRV9QQVJTRSkgew0KLSAgICAgICAgICAgIGlmIChtX3BQYXJzZXIgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICBtX3BQYXJzZXIgPSBGWF9ORVcgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOw0KLSAgICAgICAgICAgICAgICBtX3BQYXJzZXItPkluaXRpYWxpemUoKTsNCi0gICAgICAgICAgICAgICAgbV9wUGFyc2VyLT5QcmVwYXJlUGFyc2UobV9wT2JqZWN0cy0+bV9wRG9jdW1lbnQsIG1fcE9iamVjdHMtPm1fcFBhZ2VSZXNvdXJjZXMsIE5VTEwsIE5VTEwsIG1fcE9iamVjdHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcE9iamVjdHMtPm1fcFJlc291cmNlcywgJm1fcE9iamVjdHMtPm1fQkJveCwgJm1fT3B0aW9ucywgTlVMTCwgMCk7DQotICAgICAgICAgICAgICAgIG1fcFBhcnNlci0+bV9wQ3VyU3RhdGVzLT5tX0NvbG9yU3RhdGUuR2V0TW9kaWZ5KCktPkRlZmF1bHQoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKG1fQ3VycmVudE9mZnNldCA+PSBtX1NpemUpIHsNCi0gICAgICAgICAgICAgICAgbV9JbnRlcm5hbFN0YWdlID0gUEFHRVBBUlNFX1NUQUdFX0NIRUNLQ0xJUDsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBtX0N1cnJlbnRPZmZzZXQgKz0gbV9wUGFyc2VyLT5QYXJzZShtX3BEYXRhICsgbV9DdXJyZW50T2Zmc2V0LCBtX1NpemUgLSBtX0N1cnJlbnRPZmZzZXQsIFBBUlNFX1NURVBfTElNSVQpOw0KLSAgICAgICAgICAgICAgICBpZiAobV9wUGFyc2VyLT5tX2JBYm9ydCkgew0KLSAgICAgICAgICAgICAgICAgICAgbV9JbnRlcm5hbFN0YWdlID0gUEFHRVBBUlNFX1NUQUdFX0NIRUNLQ0xJUDsNCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fSW50ZXJuYWxTdGFnZSA9PSBQQUdFUEFSU0VfU1RBR0VfQ0hFQ0tDTElQKSB7DQotICAgICAgICAgICAgaWYgKG1fcFR5cGUzQ2hhcikgew0KLSAgICAgICAgICAgICAgICBtX3BUeXBlM0NoYXItPm1fYkNvbG9yZWQgPSBtX3BQYXJzZXItPm1fYkNvbG9yZWQ7DQotICAgICAgICAgICAgICAgIG1fcFR5cGUzQ2hhci0+bV9XaWR0aCA9IEZYU1lTX3JvdW5kKG1fcFBhcnNlci0+bV9UeXBlM0RhdGFbMF0gKiAxMDAwKTsNCi0gICAgICAgICAgICAgICAgbV9wVHlwZTNDaGFyLT5tX0JCb3gubGVmdCA9IEZYU1lTX3JvdW5kKG1fcFBhcnNlci0+bV9UeXBlM0RhdGFbMl0gKiAxMDAwKTsNCi0gICAgICAgICAgICAgICAgbV9wVHlwZTNDaGFyLT5tX0JCb3guYm90dG9tID0gRlhTWVNfcm91bmQobV9wUGFyc2VyLT5tX1R5cGUzRGF0YVszXSAqIDEwMDApOw0KLSAgICAgICAgICAgICAgICBtX3BUeXBlM0NoYXItPm1fQkJveC5yaWdodCA9IEZYU1lTX3JvdW5kKG1fcFBhcnNlci0+bV9UeXBlM0RhdGFbNF0gKiAxMDAwKTsNCi0gICAgICAgICAgICAgICAgbV9wVHlwZTNDaGFyLT5tX0JCb3gudG9wID0gRlhTWVNfcm91bmQobV9wUGFyc2VyLT5tX1R5cGUzRGF0YVs1XSAqIDEwMDApOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9QT1NJVElPTiBwb3MgPSBtX3BPYmplY3RzLT5tX09iamVjdExpc3QuR2V0SGVhZFBvc2l0aW9uKCk7DQotICAgICAgICAgICAgd2hpbGUgKHBvcykgew0KLSAgICAgICAgICAgICAgICBDUERGX1BhZ2VPYmplY3QqIHBPYmogPSAoQ1BERl9QYWdlT2JqZWN0KiltX3BPYmplY3RzLT5tX09iamVjdExpc3QuR2V0TmV4dChwb3MpOw0KLSAgICAgICAgICAgICAgICBpZiAocE9iai0+bV9DbGlwUGF0aC5Jc051bGwoKSkgew0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKHBPYmotPm1fQ2xpcFBhdGguR2V0UGF0aENvdW50KCkgIT0gMSkgew0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKHBPYmotPm1fQ2xpcFBhdGguR2V0VGV4dENvdW50KCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIENQREZfUGF0aCBDbGlwUGF0aCA9IHBPYmotPm1fQ2xpcFBhdGguR2V0UGF0aCgwKTsNCi0gICAgICAgICAgICAgICAgaWYgKCFDbGlwUGF0aC5Jc1JlY3QoKSB8fCBwT2JqLT5tX1R5cGUgPT0gUERGUEFHRV9TSEFESU5HKSB7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBDRlhfRmxvYXRSZWN0IG9sZF9yZWN0KENsaXBQYXRoLkdldFBvaW50WCgwKSwgQ2xpcFBhdGguR2V0UG9pbnRZKDApLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaXBQYXRoLkdldFBvaW50WCgyKSwgQ2xpcFBhdGguR2V0UG9pbnRZKDIpKTsNCi0gICAgICAgICAgICAgICAgQ0ZYX0Zsb2F0UmVjdCBvYmpfcmVjdChwT2JqLT5tX0xlZnQsIHBPYmotPm1fQm90dG9tLCBwT2JqLT5tX1JpZ2h0LCBwT2JqLT5tX1RvcCk7DQotICAgICAgICAgICAgICAgIGlmIChvbGRfcmVjdC5Db250YWlucyhvYmpfcmVjdCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIHBPYmotPm1fQ2xpcFBhdGguU2V0TnVsbCgpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fU3RhdHVzID0gRG9uZTsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBzdGVwcyArKzsNCi0gICAgICAgIGlmIChwUGF1c2UgJiYgcFBhdXNlLT5OZWVkVG9QYXVzZU5vdygpKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0NCi19DQotaW50IENQREZfQ29udGVudFBhcnNlcjo6RXN0aW1hdGVQcm9ncmVzcygpDQotew0KLSAgICBpZiAobV9TdGF0dXMgPT0gUmVhZHkpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGlmIChtX1N0YXR1cyA9PSBEb25lKSB7DQotICAgICAgICByZXR1cm4gMTAwOw0KLSAgICB9DQotICAgIGlmIChtX0ludGVybmFsU3RhZ2UgPT0gUEFHRVBBUlNFX1NUQUdFX0dFVENPTlRFTlQpIHsNCi0gICAgICAgIHJldHVybiAxMDsNCi0gICAgfQ0KLSAgICBpZiAobV9JbnRlcm5hbFN0YWdlID09IFBBR0VQQVJTRV9TVEFHRV9DSEVDS0NMSVApIHsNCi0gICAgICAgIHJldHVybiA5MDsNCi0gICAgfQ0KLSAgICByZXR1cm4gMTAgKyA4MCAqIG1fQ3VycmVudE9mZnNldCAvIG1fU2l6ZTsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2UuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaCIKKyNpbmNsdWRlICJwYWdlaW50LmgiCisjaW5jbHVkZSA8bGltaXRzLmg+CitleHRlcm4gY29uc3QgRlhfTFBDU1RSIF9QREZfT3BDaGFyVHlwZSA9CisgICAgIklJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJIgorICAgICJJSVZJSUlJVklJVklJSUlJVlZJSUlJSUlJSUlJSUlJSSIKKyAgICAiSUlWVlZWVlZJVlZWVlZWSVZWVlZWSUlWVklJSUlJSUkiCisgICAgIklJVlZWVlZWVlZWVlZWVlZJVlZWSUlWVklWVklJSUlJIgorICAgICJJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSSIKKyAgICAiSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUkiCisgICAgIklJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJIgorICAgICJJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSSI7CitGWF9CT09MIF9QREZfSGFzSW52YWxpZE9wQ2hhcihGWF9MUENTVFIgb3ApCit7CisgICAgaWYoIW9wKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgRlhfQllURSBjaDsKKyAgICB3aGlsZSgoY2ggPSAqb3ArKykpIHsKKyAgICAgICAgaWYoX1BERl9PcENoYXJUeXBlW2NoXSA9PSAnSScpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK0ZYX0RXT1JEIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjo6UGFyc2UoRlhfTFBDQllURSBwRGF0YSwgRlhfRFdPUkQgZHdTaXplLCBGWF9EV09SRCBtYXhfY29zdCkKK3sKKyAgICBpZiAobV9MZXZlbCA+IF9GUERGX01BWF9GT1JNX0xFVkVMXykgeworICAgICAgICByZXR1cm4gZHdTaXplOworICAgIH0KKyAgICBGWF9EV09SRCBJbml0T2JqQ291bnQgPSBtX3BPYmplY3RMaXN0LT5Db3VudE9iamVjdHMoKTsKKyAgICBDUERGX1N0cmVhbVBhcnNlciBzeW50YXgocERhdGEsIGR3U2l6ZSk7CisgICAgbV9wU3ludGF4ID0gJnN5bnRheDsKKyAgICBtX0NvbXBhdENvdW50ID0gMDsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBGWF9EV09SRCBjb3N0ID0gbV9wT2JqZWN0TGlzdC0+Q291bnRPYmplY3RzKCkgLSBJbml0T2JqQ291bnQ7CisgICAgICAgIGlmIChtYXhfY29zdCAmJiBjb3N0ID49IG1heF9jb3N0KSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKHN5bnRheC5QYXJzZU5leHRFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGNhc2UgQ1BERl9TdHJlYW1QYXJzZXI6OkVuZE9mRGF0YToKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9wU3ludGF4LT5HZXRQb3MoKTsKKyAgICAgICAgICAgIGNhc2UgQ1BERl9TdHJlYW1QYXJzZXI6OktleXdvcmQ6CisgICAgICAgICAgICAgICAgaWYoIU9uT3BlcmF0b3IoKGNoYXIqKXN5bnRheC5HZXRXb3JkQnVmKCkpICYmIF9QREZfSGFzSW52YWxpZE9wQ2hhcigoY2hhciopc3ludGF4LkdldFdvcmRCdWYoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9iQWJvcnQgPSBUUlVFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobV9iQWJvcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fcFN5bnRheC0+R2V0UG9zKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIENsZWFyQWxsUGFyYW1zKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENQREZfU3RyZWFtUGFyc2VyOjpOdW1iZXI6CisgICAgICAgICAgICAgICAgQWRkTnVtYmVyUGFyYW0oKGNoYXIqKXN5bnRheC5HZXRXb3JkQnVmKCksIHN5bnRheC5HZXRXb3JkU2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1BERl9TdHJlYW1QYXJzZXI6Ok5hbWU6CisgICAgICAgICAgICAgICAgQWRkTmFtZVBhcmFtKChGWF9MUENTVFIpc3ludGF4LkdldFdvcmRCdWYoKSArIDEsIHN5bnRheC5HZXRXb3JkU2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFkZE9iamVjdFBhcmFtKHN5bnRheC5HZXRPYmplY3QoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG1fcFN5bnRheC0+R2V0UG9zKCk7Cit9Cit2b2lkIF9QREZfUmVwbGFjZUFiYnIoQ1BERl9PYmplY3QqIHBPYmopOwordm9pZCBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI6OkhhbmRsZV9CZWdpbkltYWdlKCkKK3sKKyAgICBGWF9GSUxFU0laRSBzYXZlUG9zID0gbV9wU3ludGF4LT5HZXRQb3MoKTsKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gQ1BERl9EaWN0aW9uYXJ5OjpDcmVhdGUoKTsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBDUERGX1N0cmVhbVBhcnNlcjo6U3ludGF4VHlwZSB0eXBlID0gbV9wU3ludGF4LT5QYXJzZU5leHRFbGVtZW50KCk7CisgICAgICAgIGlmICh0eXBlID09IENQREZfU3RyZWFtUGFyc2VyOjpLZXl3b3JkKSB7CisgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBic0tleXdvcmQobV9wU3ludGF4LT5HZXRXb3JkQnVmKCksIG1fcFN5bnRheC0+R2V0V29yZFNpemUoKSk7CisgICAgICAgICAgICBpZiAoYnNLZXl3b3JkICE9IEZYX0JTVFJDKCJJRCIpKSB7CisgICAgICAgICAgICAgICAgbV9wU3ludGF4LT5TZXRQb3Moc2F2ZVBvcyk7CisgICAgICAgICAgICAgICAgcERpY3QtPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUgIT0gQ1BERl9TdHJlYW1QYXJzZXI6Ok5hbWUpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIENGWF9CeXRlU3RyaW5nIGtleSgoRlhfTFBDU1RSKW1fcFN5bnRheC0+R2V0V29yZEJ1ZigpICsgMSwgbV9wU3ludGF4LT5HZXRXb3JkU2l6ZSgpIC0gMSk7CisgICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gbV9wU3ludGF4LT5SZWFkTmV4dE9iamVjdCgpOworICAgICAgICBpZiAoIWtleS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHBEaWN0LT5TZXRBdChrZXksIHBPYmosIG1fcERvY3VtZW50KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBPYmotPlJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBfUERGX1JlcGxhY2VBYmJyKHBEaWN0KTsKKyAgICBDUERGX09iamVjdCogcENTT2JqID0gTlVMTDsKKyAgICBpZiAocERpY3QtPktleUV4aXN0KEZYX0JTVFJDKCJDb2xvclNwYWNlIikpKSB7CisgICAgICAgIHBDU09iaiA9IHBEaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkNvbG9yU3BhY2UiKSk7CisgICAgICAgIGlmIChwQ1NPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfTkFNRSkgeworICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgbmFtZSA9IHBDU09iai0+R2V0U3RyaW5nKCk7CisgICAgICAgICAgICBpZiAobmFtZSAhPSBGWF9CU1RSQygiRGV2aWNlUkdCIikgJiYgbmFtZSAhPSBGWF9CU1RSQygiRGV2aWNlR3JheSIpICYmIG5hbWUgIT0gRlhfQlNUUkMoIkRldmljZUNNWUsiKSkgeworICAgICAgICAgICAgICAgIHBDU09iaiA9IEZpbmRSZXNvdXJjZU9iaihGWF9CU1RSQygiQ29sb3JTcGFjZSIpLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAocENTT2JqICYmICFwQ1NPYmotPkdldE9iak51bSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHBDU09iaiA9IHBDU09iai0+Q2xvbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgcERpY3QtPlNldEF0KEZYX0JTVFJDKCJDb2xvclNwYWNlIiksIHBDU09iaiwgbV9wRG9jdW1lbnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBDUERGX1N0cmVhbSogcFN0cmVhbSA9IG1fcFN5bnRheC0+UmVhZElubGluZVN0cmVhbShtX3BEb2N1bWVudCwgcERpY3QsIHBDU09iaiwgbV9PcHRpb25zLm1fYkRlY29kZUlubGluZUltYWdlKTsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBDUERGX1N0cmVhbVBhcnNlcjo6U3ludGF4VHlwZSB0eXBlID0gbV9wU3ludGF4LT5QYXJzZU5leHRFbGVtZW50KCk7CisgICAgICAgIGlmICh0eXBlID09IENQREZfU3RyZWFtUGFyc2VyOjpFbmRPZkRhdGEpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICh0eXBlICE9IENQREZfU3RyZWFtUGFyc2VyOjpLZXl3b3JkKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9wU3ludGF4LT5HZXRXb3JkU2l6ZSgpID09IDIgJiYgbV9wU3ludGF4LT5HZXRXb3JkQnVmKClbMF0gPT0gJ0UnICYmCisgICAgICAgICAgICAgICAgbV9wU3ludGF4LT5HZXRXb3JkQnVmKClbMV0gPT0gJ0knKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9PcHRpb25zLm1fYlRleHRPbmx5KSB7CisgICAgICAgIGlmIChwU3RyZWFtKSB7CisgICAgICAgICAgICBwU3RyZWFtLT5SZWxlYXNlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwRGljdC0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcERpY3QtPlNldEF0TmFtZShGWF9CU1RSQygiU3VidHlwZSIpLCBGWF9CU1RSQygiSW1hZ2UiKSk7CisgICAgQ1BERl9JbWFnZU9iamVjdCAqcEltZ09iaiA9IEFkZEltYWdlKHBTdHJlYW0sIE5VTEwsIFRSVUUpOworICAgIGlmICghcEltZ09iaikgeworICAgICAgICBpZiAocFN0cmVhbSkgeworICAgICAgICAgICAgcFN0cmVhbS0+UmVsZWFzZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcERpY3QtPlJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH0KK30KK3ZvaWQgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyOjpQYXJzZVBhdGhPYmplY3QoKQoreworICAgIEZYX0ZMT0FUIHBhcmFtc1s2XSA9IHswfTsKKyAgICBpbnQgblBhcmFtcyA9IDA7CisgICAgaW50IGxhc3RfcG9zID0gbV9wU3ludGF4LT5HZXRQb3MoKTsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBDUERGX1N0cmVhbVBhcnNlcjo6U3ludGF4VHlwZSB0eXBlID0gbV9wU3ludGF4LT5QYXJzZU5leHRFbGVtZW50KCk7CisgICAgICAgIEZYX0JPT0wgYlByb2Nlc3NlZCA9IFRSVUU7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAgY2FzZSBDUERGX1N0cmVhbVBhcnNlcjo6RW5kT2ZEYXRhOgorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNhc2UgQ1BERl9TdHJlYW1QYXJzZXI6OktleXdvcmQ6IHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGxlbiA9IG1fcFN5bnRheC0+R2V0V29yZFNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fcFN5bnRheC0+R2V0V29yZEJ1ZigpWzBdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbSc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZFBhdGhQb2ludChwYXJhbXNbMF0sIHBhcmFtc1sxXSwgRlhQVF9NT1ZFVE8pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuUGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbCc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZFBhdGhQb2ludChwYXJhbXNbMF0sIHBhcmFtc1sxXSwgRlhQVF9MSU5FVE8pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuUGFyYW1zID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZFBhdGhQb2ludChwYXJhbXNbMF0sIHBhcmFtc1sxXSwgRlhQVF9CRVpJRVJUTyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZFBhdGhQb2ludChwYXJhbXNbMl0sIHBhcmFtc1szXSwgRlhQVF9CRVpJRVJUTyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZFBhdGhQb2ludChwYXJhbXNbNF0sIHBhcmFtc1s1XSwgRlhQVF9CRVpJRVJUTyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5QYXJhbXMgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkUGF0aFBvaW50KG1fUGF0aEN1cnJlbnRYLCBtX1BhdGhDdXJyZW50WSwgRlhQVF9CRVpJRVJUTyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZFBhdGhQb2ludChwYXJhbXNbMF0sIHBhcmFtc1sxXSwgRlhQVF9CRVpJRVJUTyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZFBhdGhQb2ludChwYXJhbXNbMl0sIHBhcmFtc1szXSwgRlhQVF9CRVpJRVJUTyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5QYXJhbXMgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd5JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkUGF0aFBvaW50KHBhcmFtc1swXSwgcGFyYW1zWzFdLCBGWFBUX0JFWklFUlRPKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkUGF0aFBvaW50KHBhcmFtc1syXSwgcGFyYW1zWzNdLCBGWFBUX0JFWklFUlRPKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkUGF0aFBvaW50KHBhcmFtc1syXSwgcGFyYW1zWzNdLCBGWFBUX0JFWklFUlRPKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgblBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIYW5kbGVfQ2xvc2VQYXRoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5QYXJhbXMgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiUHJvY2Vzc2VkID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxlbiA9PSAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9wU3ludGF4LT5HZXRXb3JkQnVmKClbMF0gPT0gJ3InICYmIG1fcFN5bnRheC0+R2V0V29yZEJ1ZigpWzFdID09ICdlJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZFBhdGhSZWN0KHBhcmFtc1swXSwgcGFyYW1zWzFdLCBwYXJhbXNbMl0sIHBhcmFtc1szXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgblBhcmFtcyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJQcm9jZXNzZWQgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJQcm9jZXNzZWQgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoYlByb2Nlc3NlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9wb3MgPSBtX3BTeW50YXgtPkdldFBvcygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgQ1BERl9TdHJlYW1QYXJzZXI6Ok51bWJlcjogeworICAgICAgICAgICAgICAgICAgICBpZiAoblBhcmFtcyA9PSA2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBGWF9CT09MIGJJbnRlZ2VyOworICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIEZYX2F0b251bShDRlhfQnl0ZVN0cmluZ0MobV9wU3ludGF4LT5HZXRXb3JkQnVmKCksIG1fcFN5bnRheC0+R2V0V29yZFNpemUoKSksIGJJbnRlZ2VyLCAmdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBwYXJhbXNbblBhcmFtcysrXSA9IGJJbnRlZ2VyID8gKEZYX0ZMT0FUKXZhbHVlIDogKihGWF9GTE9BVCopJnZhbHVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJQcm9jZXNzZWQgPSBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWJQcm9jZXNzZWQpIHsKKyAgICAgICAgICAgIG1fcFN5bnRheC0+U2V0UG9zKGxhc3RfcG9zKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KK0NQREZfU3RyZWFtUGFyc2VyOjpDUERGX1N0cmVhbVBhcnNlcihjb25zdCBGWF9CWVRFKiBwRGF0YSwgRlhfRFdPUkQgZHdTaXplKQoreworICAgIG1fcEJ1ZiA9IHBEYXRhOworICAgIG1fU2l6ZSA9IGR3U2l6ZTsKKyAgICBtX1BvcyA9IDA7CisgICAgbV9wTGFzdE9iaiA9IE5VTEw7Cit9CitDUERGX1N0cmVhbVBhcnNlcjo6fkNQREZfU3RyZWFtUGFyc2VyKCkKK3sKKyAgICBpZiAobV9wTGFzdE9iaikgeworICAgICAgICBtX3BMYXN0T2JqLT5SZWxlYXNlKCk7CisgICAgfQorfQorRlhfRFdPUkQgX0RlY29kZUFsbFNjYW5saW5lcyhJQ29kZWNfU2NhbmxpbmVEZWNvZGVyKiBwRGVjb2RlciwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkKK3sKKyAgICBpZiAocERlY29kZXIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gKEZYX0RXT1JEKSAtIDE7CisgICAgfQorICAgIGludCBuY29tcHMgPSBwRGVjb2Rlci0+Q291bnRDb21wcygpOworICAgIGludCBicGMgPSBwRGVjb2Rlci0+R2V0QlBDKCk7CisgICAgaW50IHdpZHRoID0gcERlY29kZXItPkdldFdpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IHBEZWNvZGVyLT5HZXRIZWlnaHQoKTsKKyAgICBpbnQgcGl0Y2ggPSAod2lkdGggKiBuY29tcHMgKiBicGMgKyA3KSAvIDg7CisgICAgaWYgKGhlaWdodCA9PSAwIHx8IHBpdGNoID4gKDEgPDwgMzApIC8gaGVpZ2h0KSB7CisgICAgICAgIGRlbGV0ZSBwRGVjb2RlcjsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBkZXN0X3NpemUgPSBwaXRjaCAqIGhlaWdodDsKKyAgICBkZXN0X2J1ZiA9IEZYX0FsbG9jKCBGWF9CWVRFLCBkZXN0X3NpemUpOworICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7CisgICAgICAgIEZYX0xQQllURSBwTGluZSA9IHBEZWNvZGVyLT5HZXRTY2FubGluZShyb3cpOworICAgICAgICBpZiAocExpbmUgPT0gTlVMTCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgRlhTWVNfbWVtY3B5MzIoZGVzdF9idWYgKyByb3cgKiBwaXRjaCwgcExpbmUsIHBpdGNoKTsKKyAgICB9CisgICAgRlhfRFdPUkQgc3Jjb2ZmID0gcERlY29kZXItPkdldFNyY09mZnNldCgpOworICAgIGRlbGV0ZSBwRGVjb2RlcjsKKyAgICByZXR1cm4gc3Jjb2ZmOworfQorSUNvZGVjX1NjYW5saW5lRGVjb2RlciogRlBERkFQSV9DcmVhdGVGYXhEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgY29uc3QgQ1BERl9EaWN0aW9uYXJ5KiBwUGFyYW1zKTsKK0ZYX0RXT1JEIF9BODVEZWNvZGUoY29uc3QgRlhfQllURSogc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpOworRlhfRFdPUkQgX0hleERlY29kZShjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSk7CitGWF9EV09SRCBGUERGQVBJX0ZsYXRlT3JMWldEZWNvZGUoRlhfQk9PTCBiTFpXLCBjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ1BERl9EaWN0aW9uYXJ5KiBwUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGVzdGltYXRlZF9zaXplLCBGWF9MUEJZVEUmIGRlc3RfYnVmLCBGWF9EV09SRCYgZGVzdF9zaXplKTsKK0ZYX0RXT1JEIFBERl9EZWNvZGVJbmxpbmVTdHJlYW0oY29uc3QgRlhfQllURSogc3JjX2J1ZiwgRlhfRFdPUkQgbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgQ0ZYX0J5dGVTdHJpbmcmIGRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcFBhcmFtLCBGWF9MUEJZVEUmIGRlc3RfYnVmLCBGWF9EV09SRCYgZGVzdF9zaXplKQoreworICAgIGlmIChkZWNvZGVyID09IEZYX0JTVFJDKCJDQ0lUVEZheERlY29kZSIpIHx8IGRlY29kZXIgPT0gRlhfQlNUUkMoIkNDRiIpKSB7CisgICAgICAgIElDb2RlY19TY2FubGluZURlY29kZXIqIHBEZWNvZGVyID0gRlBERkFQSV9DcmVhdGVGYXhEZWNvZGVyKHNyY19idWYsIGxpbWl0LCB3aWR0aCwgaGVpZ2h0LCBwUGFyYW0pOworICAgICAgICByZXR1cm4gX0RlY29kZUFsbFNjYW5saW5lcyhwRGVjb2RlciwgZGVzdF9idWYsIGRlc3Rfc2l6ZSk7CisgICAgfSBlbHNlIGlmIChkZWNvZGVyID09IEZYX0JTVFJDKCJBU0NJSTg1RGVjb2RlIikgfHwgZGVjb2RlciA9PSBGWF9CU1RSQygiQTg1IikpIHsKKyAgICAgICAgcmV0dXJuIF9BODVEZWNvZGUoc3JjX2J1ZiwgbGltaXQsIGRlc3RfYnVmLCBkZXN0X3NpemUpOworICAgIH0gZWxzZSBpZiAoZGVjb2RlciA9PSBGWF9CU1RSQygiQVNDSUlIZXhEZWNvZGUiKSB8fCBkZWNvZGVyID09IEZYX0JTVFJDKCJBSHgiKSkgeworICAgICAgICByZXR1cm4gX0hleERlY29kZShzcmNfYnVmLCBsaW1pdCwgZGVzdF9idWYsIGRlc3Rfc2l6ZSk7CisgICAgfSBlbHNlIGlmIChkZWNvZGVyID09IEZYX0JTVFJDKCJGbGF0ZURlY29kZSIpIHx8IGRlY29kZXIgPT0gRlhfQlNUUkMoIkZsIikpIHsKKyAgICAgICAgcmV0dXJuIEZQREZBUElfRmxhdGVPckxaV0RlY29kZShGQUxTRSwgc3JjX2J1ZiwgbGltaXQsIHBQYXJhbSwgZGVzdF9zaXplLCBkZXN0X2J1ZiwgZGVzdF9zaXplKTsKKyAgICB9IGVsc2UgaWYgKGRlY29kZXIgPT0gRlhfQlNUUkMoIkxaV0RlY29kZSIpIHx8IGRlY29kZXIgPT0gRlhfQlNUUkMoIkxaVyIpKSB7CisgICAgICAgIHJldHVybiBGUERGQVBJX0ZsYXRlT3JMWldEZWNvZGUoVFJVRSwgc3JjX2J1ZiwgbGltaXQsIHBQYXJhbSwgMCwgZGVzdF9idWYsIGRlc3Rfc2l6ZSk7CisgICAgfSBlbHNlIGlmIChkZWNvZGVyID09IEZYX0JTVFJDKCJEQ1REZWNvZGUiKSB8fCBkZWNvZGVyID09IEZYX0JTVFJDKCJEQ1QiKSkgeworICAgICAgICBJQ29kZWNfU2NhbmxpbmVEZWNvZGVyKiBwRGVjb2RlciA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0SnBlZ01vZHVsZSgpLT5DcmVhdGVEZWNvZGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYnVmLCBsaW1pdCwgd2lkdGgsIGhlaWdodCwgMCwgcFBhcmFtID8gcFBhcmFtLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJDb2xvclRyYW5zZm9ybSIpLCAxKSA6IDEpOworICAgICAgICByZXR1cm4gX0RlY29kZUFsbFNjYW5saW5lcyhwRGVjb2RlciwgZGVzdF9idWYsIGRlc3Rfc2l6ZSk7CisgICAgfSBlbHNlIGlmIChkZWNvZGVyID09IEZYX0JTVFJDKCJSdW5MZW5ndGhEZWNvZGUiKSB8fCBkZWNvZGVyID09IEZYX0JTVFJDKCJSTCIpKSB7CisgICAgICAgIHJldHVybiBSdW5MZW5ndGhEZWNvZGUoc3JjX2J1ZiwgbGltaXQsIGRlc3RfYnVmLCBkZXN0X3NpemUpOworICAgIH0KKyAgICBkZXN0X3NpemUgPSAwOworICAgIGRlc3RfYnVmID0gMDsKKyAgICByZXR1cm4gKEZYX0RXT1JEKSAtIDE7Cit9CitleHRlcm4gY29uc3QgRlhfTFBDU1RSIF9QREZfQ2hhclR5cGU7CitDUERGX1N0cmVhbSogQ1BERl9TdHJlYW1QYXJzZXI6OlJlYWRJbmxpbmVTdHJlYW0oQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCwgQ1BERl9PYmplY3QqIHBDU09iaiwgRlhfQk9PTCBiRGVjb2RlKQoreworICAgIGlmIChtX1BvcyA9PSBtX1NpemUpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChfUERGX0NoYXJUeXBlW21fcEJ1ZlttX1Bvc11dID09ICdXJykgeworICAgICAgICBtX1BvcyArKzsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgRGVjb2RlcjsKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBQYXJhbSA9IE5VTEw7CisgICAgQ1BERl9PYmplY3QqIHBGaWx0ZXIgPSBwRGljdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJGaWx0ZXIiKSk7CisgICAgaWYgKHBGaWx0ZXIgPT0gTlVMTCkgeworICAgIH0gZWxzZSBpZiAocEZpbHRlci0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgeworICAgICAgICBEZWNvZGVyID0gKChDUERGX0FycmF5KilwRmlsdGVyKS0+R2V0U3RyaW5nKDApOworICAgICAgICBDUERGX0FycmF5KiBwUGFyYW1zID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJEZWNvZGVQYXJtcyIpKTsKKyAgICAgICAgaWYgKHBQYXJhbXMpIHsKKyAgICAgICAgICAgIHBQYXJhbSA9IHBQYXJhbXMtPkdldERpY3QoMCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBEZWNvZGVyID0gcEZpbHRlci0+R2V0U3RyaW5nKCk7CisgICAgICAgIHBQYXJhbSA9IHBEaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJEZWNvZGVQYXJtcyIpKTsKKyAgICB9CisgICAgRlhfRFdPUkQgd2lkdGggPSBwRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiV2lkdGgiKSk7CisgICAgRlhfRFdPUkQgaGVpZ2h0ID0gcERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIkhlaWdodCIpKTsKKyAgICBGWF9EV09SRCBPcmlnU2l6ZSA9IDA7CisgICAgaWYgKHBDU09iaiAhPSBOVUxMKSB7CisgICAgICAgIEZYX0RXT1JEIGJwYyA9IHBEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJCaXRzUGVyQ29tcG9uZW50IikpOworICAgICAgICBGWF9EV09SRCBuQ29tcG9uZW50cyA9IDE7CisgICAgICAgIENQREZfQ29sb3JTcGFjZSogcENTID0gcERvYy0+TG9hZENvbG9yU3BhY2UocENTT2JqKTsKKyAgICAgICAgaWYgKHBDUyA9PSBOVUxMKSB7CisgICAgICAgICAgICBuQ29tcG9uZW50cyA9IDM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuQ29tcG9uZW50cyA9IHBDUy0+Q291bnRDb21wb25lbnRzKCk7CisgICAgICAgICAgICBwRG9jLT5HZXRQYWdlRGF0YSgpLT5SZWxlYXNlQ29sb3JTcGFjZShwQ1NPYmopOworICAgICAgICB9CisgICAgICAgIEZYX0RXT1JEIHBpdGNoID0gd2lkdGg7CisgICAgICAgIGlmIChicGMgJiYgcGl0Y2ggPiBJTlRfTUFYIC8gYnBjKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBwaXRjaCAqPSBicGM7CisgICAgICAgIGlmIChuQ29tcG9uZW50cyAmJiBwaXRjaCA+IElOVF9NQVggLyBuQ29tcG9uZW50cykgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcGl0Y2ggKj0gbkNvbXBvbmVudHM7CisgICAgICAgIGlmIChwaXRjaCA+IElOVF9NQVggLSA3KSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBwaXRjaCArPSA3OworICAgICAgICBwaXRjaCAvPSA4OworICAgICAgICBPcmlnU2l6ZSA9IHBpdGNoOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICh3aWR0aCA+IElOVF9NQVggLSA3KSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBPcmlnU2l6ZSA9ICgod2lkdGggKyA3KSAvIDgpOworICAgIH0KKyAgICBpZiAoaGVpZ2h0ICYmIE9yaWdTaXplID4gSU5UX01BWCAvIGhlaWdodCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgT3JpZ1NpemUgKj0gaGVpZ2h0OworICAgIEZYX0xQQllURSBwRGF0YSA9IE5VTEw7CisgICAgRlhfRFdPUkQgZHdTdHJlYW1TaXplOworICAgIGlmIChEZWNvZGVyLklzRW1wdHkoKSkgeworICAgICAgICBpZiAoT3JpZ1NpemUgPiBtX1NpemUgLSBtX1BvcykgeworICAgICAgICAgICAgT3JpZ1NpemUgPSBtX1NpemUgLSBtX1BvczsKKyAgICAgICAgfQorICAgICAgICBwRGF0YSA9IEZYX0FsbG9jKEZYX0JZVEUsIE9yaWdTaXplKTsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIocERhdGEsIG1fcEJ1ZiArIG1fUG9zLCBPcmlnU2l6ZSk7CisgICAgICAgIGR3U3RyZWFtU2l6ZSA9IE9yaWdTaXplOworICAgICAgICBtX1BvcyArPSBPcmlnU2l6ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBGWF9EV09SRCBkd0Rlc3RTaXplID0gT3JpZ1NpemU7CisgICAgICAgIGR3U3RyZWFtU2l6ZSA9IFBERl9EZWNvZGVJbmxpbmVTdHJlYW0obV9wQnVmICsgbV9Qb3MsIG1fU2l6ZSAtIG1fUG9zLCB3aWR0aCwgaGVpZ2h0LCBEZWNvZGVyLCBwUGFyYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERhdGEsIGR3RGVzdFNpemUpOworICAgICAgICBpZiAoKGludClkd1N0cmVhbVNpemUgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoYkRlY29kZSkgeworICAgICAgICAgICAgbV9Qb3MgKz0gZHdTdHJlYW1TaXplOworICAgICAgICAgICAgZHdTdHJlYW1TaXplID0gZHdEZXN0U2l6ZTsKKyAgICAgICAgICAgIGlmIChwRmlsdGVyLT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgICAgICAgICAgKChDUERGX0FycmF5KilwRmlsdGVyKS0+UmVtb3ZlQXQoMCk7CisgICAgICAgICAgICAgICAgQ1BERl9BcnJheSogcFBhcmFtcyA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiRGVjb2RlUGFybXMiKSk7CisgICAgICAgICAgICAgICAgaWYgKHBQYXJhbXMpIHsKKyAgICAgICAgICAgICAgICAgICAgcFBhcmFtcy0+UmVtb3ZlQXQoMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwRGljdC0+UmVtb3ZlQXQoRlhfQlNUUkMoIkZpbHRlciIpKTsKKyAgICAgICAgICAgICAgICBwRGljdC0+UmVtb3ZlQXQoRlhfQlNUUkMoIkRlY29kZVBhcm1zIikpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHBEYXRhKSB7CisgICAgICAgICAgICAgICAgRlhfRnJlZShwRGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9EV09SRCBkd1NhdmVQb3MgPSBtX1BvczsKKyAgICAgICAgICAgIG1fUG9zICs9IGR3U3RyZWFtU2l6ZTsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgRlhfRFdPUkQgZHdQcmV2UG9zID0gbV9Qb3M7CisgICAgICAgICAgICAgICAgQ1BERl9TdHJlYW1QYXJzZXI6OlN5bnRheFR5cGUgdHlwZSA9IFBhcnNlTmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBDUERGX1N0cmVhbVBhcnNlcjo6RW5kT2ZEYXRhKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodHlwZSAhPSBDUERGX1N0cmVhbVBhcnNlcjo6S2V5d29yZCkgeworICAgICAgICAgICAgICAgICAgICBkd1N0cmVhbVNpemUgKz0gbV9Qb3MgLSBkd1ByZXZQb3M7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoR2V0V29yZFNpemUoKSA9PSAyICYmIEdldFdvcmRCdWYoKVswXSA9PSAnRScgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIEdldFdvcmRCdWYoKVsxXSA9PSAnSScpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9Qb3MgPSBkd1ByZXZQb3M7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkd1N0cmVhbVNpemUgKz0gbV9Qb3MgLSBkd1ByZXZQb3M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX1BvcyA9IGR3U2F2ZVBvczsKKyAgICAgICAgICAgIHBEYXRhID0gRlhfQWxsb2MoRlhfQllURSwgZHdTdHJlYW1TaXplKTsKKyAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKHBEYXRhLCBtX3BCdWYgKyBtX1BvcywgZHdTdHJlYW1TaXplKTsKKyAgICAgICAgICAgIG1fUG9zICs9IGR3U3RyZWFtU2l6ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwRGljdC0+U2V0QXRJbnRlZ2VyKEZYX0JTVFJDKCJMZW5ndGgiKSwgKGludClkd1N0cmVhbVNpemUpOworICAgIHJldHVybiBDUERGX1N0cmVhbTo6Q3JlYXRlKHBEYXRhLCBkd1N0cmVhbVNpemUsIHBEaWN0KTsKK30KKyNkZWZpbmUgTUFYX1dPUkRfQlVGRkVSIDI1NgorI2RlZmluZSBNQVhfU1RSSU5HX0xFTkdUSAkzMjc2NworI2RlZmluZSBGWERXT1JEX1RSVUUgRlhEV09SRF9GUk9NX0xTQkZJUlNUKDB4NjU3NTcyNzQpCisjZGVmaW5lIEZYRFdPUkRfTlVMTCBGWERXT1JEX0ZST01fTFNCRklSU1QoMHg2YzZjNzU2ZSkKKyNkZWZpbmUgRlhEV09SRF9GQUxTIEZYRFdPUkRfRlJPTV9MU0JGSVJTVCgweDczNmM2MTY2KQorQ1BERl9TdHJlYW1QYXJzZXI6OlN5bnRheFR5cGUgQ1BERl9TdHJlYW1QYXJzZXI6OlBhcnNlTmV4dEVsZW1lbnQoKQoreworICAgIGlmIChtX3BMYXN0T2JqKSB7CisgICAgICAgIG1fcExhc3RPYmotPlJlbGVhc2UoKTsKKyAgICAgICAgbV9wTGFzdE9iaiA9IE5VTEw7CisgICAgfQorICAgIG1fV29yZFNpemUgPSAwOworICAgIEZYX0JPT0wgYklzTnVtYmVyID0gVFJVRTsKKyAgICBpZiAobV9Qb3MgPj0gbV9TaXplKSB7CisgICAgICAgIHJldHVybiBFbmRPZkRhdGE7CisgICAgfQorICAgIGludCBjaCA9IG1fcEJ1ZlttX1BvcysrXTsKKyAgICBpbnQgdHlwZSA9IF9QREZfQ2hhclR5cGVbY2hdOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHdoaWxlICh0eXBlID09ICdXJykgeworICAgICAgICAgICAgaWYgKG1fU2l6ZSA8PSBtX1BvcykgeworICAgICAgICAgICAgICAgIHJldHVybiBFbmRPZkRhdGE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaCA9IG1fcEJ1ZlttX1BvcysrXTsKKyAgICAgICAgICAgIHR5cGUgPSBfUERGX0NoYXJUeXBlW2NoXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2ggIT0gJyUnKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgaWYgKG1fU2l6ZSA8PSBtX1BvcykgeworICAgICAgICAgICAgICAgIHJldHVybiBFbmRPZkRhdGE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaCA9IG1fcEJ1ZlttX1BvcysrXTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnXHInIHx8IGNoID09ICdcbicpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0eXBlID0gX1BERl9DaGFyVHlwZVtjaF07CisgICAgfQorICAgIGlmICh0eXBlID09ICdEJyAmJiBjaCAhPSAnLycpIHsKKyAgICAgICAgbV9Qb3MgLS07CisgICAgICAgIG1fcExhc3RPYmogPSBSZWFkTmV4dE9iamVjdCgpOworICAgICAgICByZXR1cm4gT3RoZXJzOworICAgIH0KKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAobV9Xb3JkU2l6ZSA8IE1BWF9XT1JEX0JVRkZFUikgeworICAgICAgICAgICAgbV9Xb3JkQnVmZmVyW21fV29yZFNpemUrK10gPSBjaDsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSAhPSAnTicpIHsKKyAgICAgICAgICAgIGJJc051bWJlciA9IEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmIChtX1NpemUgPD0gbV9Qb3MpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNoID0gbV9wQnVmW21fUG9zKytdOworICAgICAgICB0eXBlID0gX1BERl9DaGFyVHlwZVtjaF07CisgICAgICAgIGlmICh0eXBlID09ICdEJyB8fCB0eXBlID09ICdXJykgeworICAgICAgICAgICAgbV9Qb3MgLS07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX1dvcmRCdWZmZXJbbV9Xb3JkU2l6ZV0gPSAwOworICAgIGlmIChiSXNOdW1iZXIpIHsKKyAgICAgICAgcmV0dXJuIE51bWJlcjsKKyAgICB9CisgICAgaWYgKG1fV29yZEJ1ZmZlclswXSA9PSAnLycpIHsKKyAgICAgICAgcmV0dXJuIE5hbWU7CisgICAgfQorICAgIGlmIChtX1dvcmRTaXplID09IDQpIHsKKyAgICAgICAgaWYgKCooRlhfRFdPUkQqKW1fV29yZEJ1ZmZlciA9PSBGWERXT1JEX1RSVUUpIHsKKyAgICAgICAgICAgIG1fcExhc3RPYmogPSBDUERGX0Jvb2xlYW46OkNyZWF0ZShUUlVFKTsKKyAgICAgICAgICAgIHJldHVybiBPdGhlcnM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCooRlhfRFdPUkQqKW1fV29yZEJ1ZmZlciA9PSBGWERXT1JEX05VTEwpIHsKKyAgICAgICAgICAgIG1fcExhc3RPYmogPSBDUERGX051bGw6OkNyZWF0ZSgpOworICAgICAgICAgICAgcmV0dXJuIE90aGVyczsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9Xb3JkU2l6ZSA9PSA1KSB7CisgICAgICAgIGlmICgqKEZYX0RXT1JEKiltX1dvcmRCdWZmZXIgPT0gRlhEV09SRF9GQUxTICYmIG1fV29yZEJ1ZmZlcls0XSA9PSAnZScpIHsKKyAgICAgICAgICAgIG1fcExhc3RPYmogPSBDUERGX0Jvb2xlYW46OkNyZWF0ZShGQUxTRSk7CisgICAgICAgICAgICByZXR1cm4gT3RoZXJzOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBLZXl3b3JkOworfQordm9pZCBDUERGX1N0cmVhbVBhcnNlcjo6U2tpcFBhdGhPYmplY3QoKQoreworICAgIEZYX0RXT1JEIGNvbW1hbmRfc3RhcnRwb3MgPSBtX1BvczsKKyAgICBpZiAobV9Qb3MgPj0gbV9TaXplKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IGNoID0gbV9wQnVmW21fUG9zKytdOworICAgIGludCB0eXBlID0gX1BERl9DaGFyVHlwZVtjaF07CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgd2hpbGUgKHR5cGUgPT0gJ1cnKSB7CisgICAgICAgICAgICBpZiAobV9Qb3MgPj0gbV9TaXplKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2ggPSBtX3BCdWZbbV9Qb3MrK107CisgICAgICAgICAgICB0eXBlID0gX1BERl9DaGFyVHlwZVtjaF07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUgIT0gJ04nKSB7CisgICAgICAgICAgICBtX1BvcyA9IGNvbW1hbmRfc3RhcnRwb3M7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIHdoaWxlICh0eXBlICE9ICdXJykgeworICAgICAgICAgICAgICAgIGlmIChtX1BvcyA+PSBtX1NpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjaCA9IG1fcEJ1ZlttX1BvcysrXTsKKyAgICAgICAgICAgICAgICB0eXBlID0gX1BERl9DaGFyVHlwZVtjaF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAodHlwZSA9PSAnVycpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9Qb3MgPj0gbV9TaXplKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2ggPSBtX3BCdWZbbV9Qb3MrK107CisgICAgICAgICAgICAgICAgdHlwZSA9IF9QREZfQ2hhclR5cGVbY2hdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHR5cGUgPT0gJ04nKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9EV09SRCBvcF9zdGFydHBvcyA9IG1fUG9zIC0gMTsKKyAgICAgICAgICAgIHdoaWxlICh0eXBlICE9ICdXJyAmJiB0eXBlICE9ICdEJykgeworICAgICAgICAgICAgICAgIGlmIChtX1BvcyA+PSBtX1NpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjaCA9IG1fcEJ1ZlttX1BvcysrXTsKKyAgICAgICAgICAgICAgICB0eXBlID0gX1BERl9DaGFyVHlwZVtjaF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9Qb3MgLSBvcF9zdGFydHBvcyA9PSAyKSB7CisgICAgICAgICAgICAgICAgaW50IG9wID0gbV9wQnVmW29wX3N0YXJ0cG9zXTsKKyAgICAgICAgICAgICAgICBpZiAob3AgPT0gJ20nIHx8IG9wID09ICdsJyB8fCBvcCA9PSAnYycgfHwgb3AgPT0gJ3YnIHx8IG9wID09ICd5JykgeworICAgICAgICAgICAgICAgICAgICBjb21tYW5kX3N0YXJ0cG9zID0gbV9Qb3M7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9Qb3MgLSBvcF9zdGFydHBvcyA9PSAzKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fcEJ1ZltvcF9zdGFydHBvc10gPT0gJ3InICYmIG1fcEJ1ZltvcF9zdGFydHBvcyArIDFdID09ICdlJykgeworICAgICAgICAgICAgICAgICAgICBjb21tYW5kX3N0YXJ0cG9zID0gbV9Qb3M7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fUG9zID0gY29tbWFuZF9zdGFydHBvczsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KK0NQREZfT2JqZWN0KiBDUERGX1N0cmVhbVBhcnNlcjo6UmVhZE5leHRPYmplY3QoRlhfQk9PTCBiQWxsb3dOZXN0ZWRBcnJheSwgRlhfQk9PTCBiSW5BcnJheSkKK3sKKyAgICBGWF9CT09MIGJJc051bWJlcjsKKyAgICBHZXROZXh0V29yZChiSXNOdW1iZXIpOworICAgIGlmIChtX1dvcmRTaXplID09IDApIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChiSXNOdW1iZXIpIHsKKyAgICAgICAgbV9Xb3JkQnVmZmVyW21fV29yZFNpemVdID0gMDsKKyAgICAgICAgcmV0dXJuIENQREZfTnVtYmVyOjpDcmVhdGUoQ0ZYX0J5dGVTdHJpbmdDKG1fV29yZEJ1ZmZlciwgbV9Xb3JkU2l6ZSkpOworICAgIH0KKyAgICBpbnQgZmlyc3RfY2hhciA9IG1fV29yZEJ1ZmZlclswXTsKKyAgICBpZiAoZmlyc3RfY2hhciA9PSAnLycpIHsKKyAgICAgICAgcmV0dXJuIENQREZfTmFtZTo6Q3JlYXRlKFBERl9OYW1lRGVjb2RlKENGWF9CeXRlU3RyaW5nQyhtX1dvcmRCdWZmZXIgKyAxLCBtX1dvcmRTaXplIC0gMSkpKTsKKyAgICB9CisgICAgaWYgKGZpcnN0X2NoYXIgPT0gJygnKSB7CisgICAgICAgIHJldHVybiBDUERGX1N0cmluZzo6Q3JlYXRlKFJlYWRTdHJpbmcoKSk7CisgICAgfQorICAgIGlmIChmaXJzdF9jaGFyID09ICc8JykgeworICAgICAgICBpZiAobV9Xb3JkU2l6ZSA9PSAxKSB7CisgICAgICAgICAgICByZXR1cm4gQ1BERl9TdHJpbmc6OkNyZWF0ZShSZWFkSGV4U3RyaW5nKCksIFRSVUUpOworICAgICAgICB9CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSBDUERGX0RpY3Rpb25hcnk6OkNyZWF0ZSgpOworICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgR2V0TmV4dFdvcmQoYklzTnVtYmVyKTsKKyAgICAgICAgICAgIGlmIChtX1dvcmRTaXplID09IDApIHsKKyAgICAgICAgICAgICAgICBwRGljdC0+UmVsZWFzZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fV29yZFNpemUgPT0gMiAmJiBtX1dvcmRCdWZmZXJbMF0gPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9Xb3JkQnVmZmVyWzBdICE9ICcvJykgeworICAgICAgICAgICAgICAgIHBEaWN0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBrZXkgPSBQREZfTmFtZURlY29kZShDRlhfQnl0ZVN0cmluZ0MobV9Xb3JkQnVmZmVyICsgMSwgbV9Xb3JkU2l6ZSAtIDEpKTsKKyAgICAgICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gUmVhZE5leHRPYmplY3QoVFJVRSk7CisgICAgICAgICAgICBpZiAocE9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKHBEaWN0KSB7CisgICAgICAgICAgICAgICAgICAgIHBEaWN0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFrZXkuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgcERpY3QtPlNldEF0KGtleSwgcE9iaik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBPYmotPlJlbGVhc2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcERpY3Q7CisgICAgfQorICAgIGlmIChmaXJzdF9jaGFyID09ICdbJykgeworICAgICAgICBpZiAoIWJBbGxvd05lc3RlZEFycmF5ICYmIGJJbkFycmF5KSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBDUERGX0FycmF5OjpDcmVhdGUoKTsKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gUmVhZE5leHRPYmplY3QoYkFsbG93TmVzdGVkQXJyYXksIFRSVUUpOworICAgICAgICAgICAgaWYgKHBPYmogPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGlmIChtX1dvcmRTaXplID09IDAgfHwgbV9Xb3JkQnVmZmVyWzBdID09ICddJykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcEFycmF5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobV9Xb3JkQnVmZmVyWzBdID09ICdbJykgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBBcnJheS0+QWRkKHBPYmopOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChtX1dvcmRTaXplID09IDQpIHsKKyAgICAgICAgaWYgKCooRlhfRFdPUkQqKW1fV29yZEJ1ZmZlciA9PSBGWERXT1JEX1RSVUUpIHsKKyAgICAgICAgICAgIHJldHVybiBDUERGX0Jvb2xlYW46OkNyZWF0ZShUUlVFKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKihGWF9EV09SRCopbV9Xb3JkQnVmZmVyID09IEZYRFdPUkRfTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIENQREZfTnVsbDo6Q3JlYXRlKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fV29yZFNpemUgPT0gNSkgeworICAgICAgICBpZiAoKihGWF9EV09SRCopbV9Xb3JkQnVmZmVyID09IEZYRFdPUkRfRkFMUyAmJiBtX1dvcmRCdWZmZXJbNF0gPT0gJ2UnKSB7CisgICAgICAgICAgICByZXR1cm4gQ1BERl9Cb29sZWFuOjpDcmVhdGUoRkFMU0UpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQordm9pZCBDUERGX1N0cmVhbVBhcnNlcjo6R2V0TmV4dFdvcmQoRlhfQk9PTCYgYklzTnVtYmVyKQoreworICAgIG1fV29yZFNpemUgPSAwOworICAgIGJJc051bWJlciA9IFRSVUU7CisgICAgaWYgKG1fU2l6ZSA8PSBtX1BvcykgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludCBjaCA9IG1fcEJ1ZlttX1BvcysrXTsKKyAgICBpbnQgdHlwZSA9IF9QREZfQ2hhclR5cGVbY2hdOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHdoaWxlICh0eXBlID09ICdXJykgeworICAgICAgICAgICAgaWYgKG1fU2l6ZSA8PSBtX1BvcykgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoID0gbV9wQnVmW21fUG9zKytdOworICAgICAgICAgICAgdHlwZSA9IF9QREZfQ2hhclR5cGVbY2hdOworICAgICAgICB9CisgICAgICAgIGlmIChjaCAhPSAnJScpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBpZiAobV9TaXplIDw9IG1fUG9zKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2ggPSBtX3BCdWZbbV9Qb3MrK107CisgICAgICAgICAgICBpZiAoY2ggPT0gJ1xyJyB8fCBjaCA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdHlwZSA9IF9QREZfQ2hhclR5cGVbY2hdOworICAgIH0KKyAgICBpZiAodHlwZSA9PSAnRCcpIHsKKyAgICAgICAgYklzTnVtYmVyID0gRkFMU0U7CisgICAgICAgIG1fV29yZEJ1ZmZlclttX1dvcmRTaXplKytdID0gY2g7CisgICAgICAgIGlmIChjaCA9PSAnLycpIHsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fU2l6ZSA8PSBtX1BvcykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNoID0gbV9wQnVmW21fUG9zKytdOworICAgICAgICAgICAgICAgIHR5cGUgPSBfUERGX0NoYXJUeXBlW2NoXTsKKyAgICAgICAgICAgICAgICBpZiAodHlwZSAhPSAnUicgJiYgdHlwZSAhPSAnTicpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9Qb3MgLS07CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1fV29yZFNpemUgPCBNQVhfV09SRF9CVUZGRVIpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9Xb3JkQnVmZmVyW21fV29yZFNpemUrK10gPSBjaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJzwnKSB7CisgICAgICAgICAgICBpZiAobV9TaXplIDw9IG1fUG9zKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2ggPSBtX3BCdWZbbV9Qb3MrK107CisgICAgICAgICAgICBpZiAoY2ggPT0gJzwnKSB7CisgICAgICAgICAgICAgICAgbV9Xb3JkQnVmZmVyW21fV29yZFNpemUrK10gPSBjaDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9Qb3MgLS07CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJz4nKSB7CisgICAgICAgICAgICBpZiAobV9TaXplIDw9IG1fUG9zKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2ggPSBtX3BCdWZbbV9Qb3MrK107CisgICAgICAgICAgICBpZiAoY2ggPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgbV9Xb3JkQnVmZmVyW21fV29yZFNpemUrK10gPSBjaDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9Qb3MgLS07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAobV9Xb3JkU2l6ZSA8IE1BWF9XT1JEX0JVRkZFUikgeworICAgICAgICAgICAgbV9Xb3JkQnVmZmVyW21fV29yZFNpemUrK10gPSBjaDsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZSAhPSAnTicpIHsKKyAgICAgICAgICAgIGJJc051bWJlciA9IEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmIChtX1NpemUgPD0gbV9Qb3MpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjaCA9IG1fcEJ1ZlttX1BvcysrXTsKKyAgICAgICAgdHlwZSA9IF9QREZfQ2hhclR5cGVbY2hdOworICAgICAgICBpZiAodHlwZSA9PSAnRCcgfHwgdHlwZSA9PSAnVycpIHsKKyAgICAgICAgICAgIG1fUG9zIC0tOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CitDRlhfQnl0ZVN0cmluZyBDUERGX1N0cmVhbVBhcnNlcjo6UmVhZFN0cmluZygpCit7CisgICAgaWYgKG1fU2l6ZSA8PSBtX1BvcykgeworICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsKKyAgICB9CisgICAgaW50IGNoID0gbV9wQnVmW21fUG9zKytdOworICAgIENGWF9CeXRlVGV4dEJ1ZiBidWY7CisgICAgaW50IHBhcmxldmVsID0gMDsKKyAgICBpbnQgc3RhdHVzID0gMCwgaUVzY0NvZGUgPSAwOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHN3aXRjaCAoc3RhdHVzKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICcpJykgeworICAgICAgICAgICAgICAgICAgICBpZiAocGFybGV2ZWwgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Zi5HZXRMZW5ndGgoKSA+IE1BWF9TVFJJTkdfTEVOR1RIKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKGJ1Zi5HZXRCdWZmZXIoKSwgTUFYX1NUUklOR19MRU5HVEgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1Zi5HZXRCeXRlU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcGFybGV2ZWwgLS07CisgICAgICAgICAgICAgICAgICAgIGJ1Zi5BcHBlbmRDaGFyKCcpJyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnKCcpIHsKKyAgICAgICAgICAgICAgICAgICAgcGFybGV2ZWwgKys7CisgICAgICAgICAgICAgICAgICAgIGJ1Zi5BcHBlbmRDaGFyKCcoJyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYnVmLkFwcGVuZENoYXIoKGNoYXIpY2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc3JykgeworICAgICAgICAgICAgICAgICAgICBpRXNjQ29kZSA9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICduJykgeworICAgICAgICAgICAgICAgICAgICBidWYuQXBwZW5kQ2hhcignXG4nKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICdyJykgeworICAgICAgICAgICAgICAgICAgICBidWYuQXBwZW5kQ2hhcignXHInKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICd0JykgeworICAgICAgICAgICAgICAgICAgICBidWYuQXBwZW5kQ2hhcignXHQnKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICdiJykgeworICAgICAgICAgICAgICAgICAgICBidWYuQXBwZW5kQ2hhcignXGInKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICdmJykgeworICAgICAgICAgICAgICAgICAgICBidWYuQXBwZW5kQ2hhcignXGYnKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICdccicpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gNDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYnVmLkFwcGVuZENoYXIoY2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGF0dXMgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzcnKSB7CisgICAgICAgICAgICAgICAgICAgIGlFc2NDb2RlID0gaUVzY0NvZGUgKiA4ICsgY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IDM7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYnVmLkFwcGVuZENoYXIoaUVzY0NvZGUpOworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAwOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnNycpIHsKKyAgICAgICAgICAgICAgICAgICAgaUVzY0NvZGUgPSBpRXNjQ29kZSAqIDggKyBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICAgICAgYnVmLkFwcGVuZENoYXIoaUVzY0NvZGUpOworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJ1Zi5BcHBlbmRDaGFyKGlFc2NDb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgIHN0YXR1cyA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGNoICE9ICdcbicpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChtX1NpemUgPD0gbV9Qb3MpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNoID0gbV9wQnVmW21fUG9zKytdOworICAgIH0KKyAgICBpZiAobV9TaXplID4gbV9Qb3MpIHsKKyAgICAgICAgY2ggPSBtX3BCdWZbbV9Qb3MrK107CisgICAgfQorICAgIGlmIChidWYuR2V0TGVuZ3RoKCkgPiBNQVhfU1RSSU5HX0xFTkdUSCkgeworICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoYnVmLkdldEJ1ZmZlcigpLCBNQVhfU1RSSU5HX0xFTkdUSCk7CisgICAgfQorICAgIHJldHVybiBidWYuR2V0Qnl0ZVN0cmluZygpOworfQorQ0ZYX0J5dGVTdHJpbmcgQ1BERl9TdHJlYW1QYXJzZXI6OlJlYWRIZXhTdHJpbmcoKQoreworICAgIGlmIChtX1NpemUgPD0gbV9Qb3MpIHsKKyAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKCk7CisgICAgfQorICAgIGludCBjaCA9IG1fcEJ1ZlttX1BvcysrXTsKKyAgICBDRlhfQnl0ZVRleHRCdWYgYnVmOworICAgIEZYX0JPT0wgYkZpcnN0ID0gVFJVRTsKKyAgICBpbnQgY29kZSA9IDA7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKGNoID09ICc+JykgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAgICAgIGlmIChiRmlyc3QpIHsKKyAgICAgICAgICAgICAgICBjb2RlID0gKGNoIC0gJzAnKSAqIDE2OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb2RlICs9IGNoIC0gJzAnOworICAgICAgICAgICAgICAgIGJ1Zi5BcHBlbmRDaGFyKChjaGFyKWNvZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYkZpcnN0ID0gIWJGaXJzdDsKKyAgICAgICAgfSBlbHNlIGlmIChjaCA+PSAnQScgJiYgY2ggPD0gJ0YnKSB7CisgICAgICAgICAgICBpZiAoYkZpcnN0KSB7CisgICAgICAgICAgICAgICAgY29kZSA9IChjaCAtICdBJyArIDEwKSAqIDE2OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb2RlICs9IGNoIC0gJ0EnICsgMTA7CisgICAgICAgICAgICAgICAgYnVmLkFwcGVuZENoYXIoKGNoYXIpY29kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiRmlyc3QgPSAhYkZpcnN0OworICAgICAgICB9IGVsc2UgaWYgKGNoID49ICdhJyAmJiBjaCA8PSAnZicpIHsKKyAgICAgICAgICAgIGlmIChiRmlyc3QpIHsKKyAgICAgICAgICAgICAgICBjb2RlID0gKGNoIC0gJ2EnICsgMTApICogMTY7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvZGUgKz0gY2ggLSAnYScgKyAxMDsKKyAgICAgICAgICAgICAgICBidWYuQXBwZW5kQ2hhcigoY2hhciljb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJGaXJzdCA9ICFiRmlyc3Q7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fU2l6ZSA8PSBtX1BvcykgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2ggPSBtX3BCdWZbbV9Qb3MrK107CisgICAgfQorICAgIGlmICghYkZpcnN0KSB7CisgICAgICAgIGJ1Zi5BcHBlbmRDaGFyKChjaGFyKWNvZGUpOworICAgIH0KKyAgICBpZiAoYnVmLkdldExlbmd0aCgpID4gTUFYX1NUUklOR19MRU5HVEgpIHsKKyAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKGJ1Zi5HZXRCdWZmZXIoKSwgTUFYX1NUUklOR19MRU5HVEgpOworICAgIH0KKyAgICByZXR1cm4gYnVmLkdldEJ5dGVTdHJpbmcoKTsKK30KKyNkZWZpbmUgUEFHRVBBUlNFX1NUQUdFX0dFVENPTlRFTlQJCTEKKyNkZWZpbmUgUEFHRVBBUlNFX1NUQUdFX1BBUlNFCQkJMgorI2RlZmluZSBQQUdFUEFSU0VfU1RBR0VfQ0hFQ0tDTElQCQkzCitDUERGX0NvbnRlbnRQYXJzZXI6OkNQREZfQ29udGVudFBhcnNlcigpCit7CisgICAgbV9wUGFyc2VyID0gTlVMTDsKKyAgICBtX3BTdHJlYW1BcnJheSA9IE5VTEw7CisgICAgbV9wU2luZ2xlU3RyZWFtID0gTlVMTDsKKyAgICBtX3BEYXRhID0gTlVMTDsKKyAgICBtX1N0YXR1cyA9IFJlYWR5OworICAgIG1fcFR5cGUzQ2hhciA9IE5VTEw7Cit9CitDUERGX0NvbnRlbnRQYXJzZXI6On5DUERGX0NvbnRlbnRQYXJzZXIoKQoreworICAgIENsZWFyKCk7Cit9Cit2b2lkIENQREZfQ29udGVudFBhcnNlcjo6Q2xlYXIoKQoreworICAgIGlmIChtX3BQYXJzZXIpIHsKKyAgICAgICAgZGVsZXRlIG1fcFBhcnNlcjsKKyAgICB9CisgICAgaWYgKG1fcFNpbmdsZVN0cmVhbSkgeworICAgICAgICBkZWxldGUgbV9wU2luZ2xlU3RyZWFtOworICAgIH0KKyAgICBpZiAobV9wU3RyZWFtQXJyYXkpIHsKKyAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IG1fblN0cmVhbXM7IGkgKyspCisgICAgICAgICAgICBpZiAobV9wU3RyZWFtQXJyYXlbaV0pIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgbV9wU3RyZWFtQXJyYXlbaV07CisgICAgICAgICAgICB9CisgICAgICAgIEZYX0ZyZWUobV9wU3RyZWFtQXJyYXkpOworICAgIH0KKyAgICBpZiAobV9wRGF0YSAmJiBtX3BTaW5nbGVTdHJlYW0gPT0gTlVMTCkgeworICAgICAgICBGWF9GcmVlKCh2b2lkKiltX3BEYXRhKTsKKyAgICB9CisgICAgbV9wUGFyc2VyID0gTlVMTDsKKyAgICBtX3BTdHJlYW1BcnJheSA9IE5VTEw7CisgICAgbV9wU2luZ2xlU3RyZWFtID0gTlVMTDsKKyAgICBtX3BEYXRhID0gTlVMTDsKKyAgICBtX1N0YXR1cyA9IFJlYWR5OworfQordm9pZCBDUERGX0NvbnRlbnRQYXJzZXI6OlN0YXJ0KENQREZfUGFnZSogcFBhZ2UsIENQREZfUGFyc2VPcHRpb25zKiBwT3B0aW9ucykKK3sKKyAgICBpZiAobV9TdGF0dXMgIT0gUmVhZHkgfHwgcFBhZ2UgPT0gTlVMTCB8fCBwUGFnZS0+bV9wRG9jdW1lbnQgPT0gTlVMTCB8fCBwUGFnZS0+bV9wRm9ybURpY3QgPT0gTlVMTCkgeworICAgICAgICBtX1N0YXR1cyA9IERvbmU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wT2JqZWN0cyA9IHBQYWdlOworICAgIG1fYkZvcm0gPSBGQUxTRTsKKyAgICBpZiAocE9wdGlvbnMpIHsKKyAgICAgICAgbV9PcHRpb25zID0gKnBPcHRpb25zOworICAgIH0KKyAgICBtX1N0YXR1cyA9IFRvQmVDb250aW51ZWQ7CisgICAgbV9JbnRlcm5hbFN0YWdlID0gUEFHRVBBUlNFX1NUQUdFX0dFVENPTlRFTlQ7CisgICAgbV9DdXJyZW50T2Zmc2V0ID0gMDsKKyAgICBDUERGX09iamVjdCogcENvbnRlbnQgPSBwUGFnZS0+bV9wRm9ybURpY3QtPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiQ29udGVudHMiKSk7CisgICAgaWYgKHBDb250ZW50ID09IE5VTEwpIHsKKyAgICAgICAgbV9TdGF0dXMgPSBEb25lOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChwQ29udGVudC0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJFQU0pIHsKKyAgICAgICAgbV9uU3RyZWFtcyA9IDA7CisgICAgICAgIG1fcFNpbmdsZVN0cmVhbSA9IEZYX05FVyBDUERGX1N0cmVhbUFjYzsKKyAgICAgICAgbV9wU2luZ2xlU3RyZWFtLT5Mb2FkQWxsRGF0YSgoQ1BERl9TdHJlYW0qKXBDb250ZW50LCBGQUxTRSk7CisgICAgfSBlbHNlIGlmIChwQ29udGVudC0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgeworICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSAoQ1BERl9BcnJheSopcENvbnRlbnQ7CisgICAgICAgIG1fblN0cmVhbXMgPSBwQXJyYXktPkdldENvdW50KCk7CisgICAgICAgIGlmIChtX25TdHJlYW1zID09IDApIHsKKyAgICAgICAgICAgIG1fU3RhdHVzID0gRG9uZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX3BTdHJlYW1BcnJheSA9IEZYX0FsbG9jKENQREZfU3RyZWFtQWNjKiwgbV9uU3RyZWFtcyk7CisgICAgICAgIEZYU1lTX21lbXNldDMyKG1fcFN0cmVhbUFycmF5LCAwLCBzaXplb2YoQ1BERl9TdHJlYW1BY2MqKSAqIG1fblN0cmVhbXMpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fU3RhdHVzID0gRG9uZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KK3ZvaWQgQ1BERl9Db250ZW50UGFyc2VyOjpTdGFydChDUERGX0Zvcm0qIHBGb3JtLCBDUERGX0FsbFN0YXRlcyogcEdyYXBoaWNTdGF0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCogcFBhcmVudE1hdHJpeCwgQ1BERl9UeXBlM0NoYXIqIHBUeXBlM0NoYXIsIENQREZfUGFyc2VPcHRpb25zKiBwT3B0aW9ucywgaW50IGxldmVsKQoreworICAgIG1fcFR5cGUzQ2hhciA9IHBUeXBlM0NoYXI7CisgICAgbV9wT2JqZWN0cyA9IHBGb3JtOworICAgIG1fYkZvcm0gPSBUUlVFOworICAgIENGWF9BZmZpbmVNYXRyaXggZm9ybV9tYXRyaXggPSBwRm9ybS0+bV9wRm9ybURpY3QtPkdldE1hdHJpeChGWF9CU1RSQygiTWF0cml4IikpOworICAgIGlmIChwR3JhcGhpY1N0YXRlcykgeworICAgICAgICBmb3JtX21hdHJpeC5Db25jYXQocEdyYXBoaWNTdGF0ZXMtPm1fQ1RNKTsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcEJCb3ggPSBwRm9ybS0+bV9wRm9ybURpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJCQm94IikpOworICAgIENGWF9GbG9hdFJlY3QgZm9ybV9iYm94OworICAgIENQREZfUGF0aCBDbGlwUGF0aDsKKyAgICBpZiAocEJCb3gpIHsKKyAgICAgICAgZm9ybV9iYm94ID0gcEJCb3gtPkdldFJlY3QoKTsKKyAgICAgICAgQ2xpcFBhdGguTmV3KCk7CisgICAgICAgIENsaXBQYXRoLkFwcGVuZFJlY3QoZm9ybV9iYm94LmxlZnQsIGZvcm1fYmJveC5ib3R0b20sIGZvcm1fYmJveC5yaWdodCwgZm9ybV9iYm94LnRvcCk7CisgICAgICAgIENsaXBQYXRoLlRyYW5zZm9ybSgmZm9ybV9tYXRyaXgpOworICAgICAgICBpZiAocFBhcmVudE1hdHJpeCkgeworICAgICAgICAgICAgQ2xpcFBhdGguVHJhbnNmb3JtKHBQYXJlbnRNYXRyaXgpOworICAgICAgICB9CisgICAgICAgIGZvcm1fYmJveC5UcmFuc2Zvcm0oJmZvcm1fbWF0cml4KTsKKyAgICAgICAgaWYgKHBQYXJlbnRNYXRyaXgpIHsKKyAgICAgICAgICAgIGZvcm1fYmJveC5UcmFuc2Zvcm0ocFBhcmVudE1hdHJpeCk7CisgICAgICAgIH0KKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUmVzb3VyY2VzID0gcEZvcm0tPm1fcEZvcm1EaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJSZXNvdXJjZXMiKSk7CisgICAgbV9wUGFyc2VyID0gRlhfTkVXIENQREZfU3RyZWFtQ29udGVudFBhcnNlcjsKKyAgICBtX3BQYXJzZXItPkluaXRpYWxpemUoKTsKKyAgICBtX3BQYXJzZXItPlByZXBhcmVQYXJzZShwRm9ybS0+bV9wRG9jdW1lbnQsIHBGb3JtLT5tX3BQYWdlUmVzb3VyY2VzLCBwRm9ybS0+bV9wUmVzb3VyY2VzLCBwUGFyZW50TWF0cml4LCBwRm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUmVzb3VyY2VzLCAmZm9ybV9iYm94LCBwT3B0aW9ucywgcEdyYXBoaWNTdGF0ZXMsIGxldmVsKTsKKyAgICBtX3BQYXJzZXItPm1fcEN1clN0YXRlcy0+bV9DVE0gPSBmb3JtX21hdHJpeDsKKyAgICBtX3BQYXJzZXItPm1fcEN1clN0YXRlcy0+bV9QYXJlbnRNYXRyaXggPSBmb3JtX21hdHJpeDsKKyAgICBpZiAoQ2xpcFBhdGguTm90TnVsbCgpKSB7CisgICAgICAgIG1fcFBhcnNlci0+bV9wQ3VyU3RhdGVzLT5tX0NsaXBQYXRoLkFwcGVuZFBhdGgoQ2xpcFBhdGgsIEZYRklMTF9XSU5ESU5HLCBUUlVFKTsKKyAgICB9CisgICAgaWYgKHBGb3JtLT5tX1RyYW5zcGFyZW5jeSAmIFBERlRSQU5TX0dST1VQKSB7CisgICAgICAgIENQREZfR2VuZXJhbFN0YXRlRGF0YSogcERhdGEgPSBtX3BQYXJzZXItPm1fcEN1clN0YXRlcy0+bV9HZW5lcmFsU3RhdGUuR2V0TW9kaWZ5KCk7CisgICAgICAgIHBEYXRhLT5tX0JsZW5kVHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTDsKKyAgICAgICAgcERhdGEtPm1fU3Ryb2tlQWxwaGEgPSAxLjBmOworICAgICAgICBwRGF0YS0+bV9GaWxsQWxwaGEgPSAxLjBmOworICAgICAgICBwRGF0YS0+bV9wU29mdE1hc2sgPSBOVUxMOworICAgIH0KKyAgICBtX25TdHJlYW1zID0gMDsKKyAgICBtX3BTaW5nbGVTdHJlYW0gPSBGWF9ORVcgQ1BERl9TdHJlYW1BY2M7CisgICAgaWYgKHBGb3JtLT5tX3BEb2N1bWVudCkgeworICAgICAgICBtX3BTaW5nbGVTdHJlYW0tPkxvYWRBbGxEYXRhKHBGb3JtLT5tX3BGb3JtU3RyZWFtLCBGQUxTRSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wU2luZ2xlU3RyZWFtLT5Mb2FkQWxsRGF0YShwRm9ybS0+bV9wRm9ybVN0cmVhbSwgRkFMU0UpOworICAgIH0KKyAgICBtX3BEYXRhID0gKEZYX0xQQllURSltX3BTaW5nbGVTdHJlYW0tPkdldERhdGEoKTsKKyAgICBtX1NpemUgPSBtX3BTaW5nbGVTdHJlYW0tPkdldFNpemUoKTsKKyAgICBtX1N0YXR1cyA9IFRvQmVDb250aW51ZWQ7CisgICAgbV9JbnRlcm5hbFN0YWdlID0gUEFHRVBBUlNFX1NUQUdFX1BBUlNFOworICAgIG1fQ3VycmVudE9mZnNldCA9IDA7Cit9Cit2b2lkIENQREZfQ29udGVudFBhcnNlcjo6Q29udGludWUoSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgaW50IHN0ZXBzID0gMDsKKyAgICB3aGlsZSAobV9TdGF0dXMgPT0gVG9CZUNvbnRpbnVlZCkgeworICAgICAgICBpZiAobV9JbnRlcm5hbFN0YWdlID09IFBBR0VQQVJTRV9TVEFHRV9HRVRDT05URU5UKSB7CisgICAgICAgICAgICBpZiAobV9DdXJyZW50T2Zmc2V0ID09IG1fblN0cmVhbXMpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9wU3RyZWFtQXJyYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9TaXplID0gMDsKKyAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgaTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1fblN0cmVhbXM7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIHNpemUgPSBtX3BTdHJlYW1BcnJheVtpXS0+R2V0U2l6ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fU2l6ZSArIHNpemUgKyAxIDw9IG1fU2l6ZSkgeworCQkJCQkJCW1fU3RhdHVzID0gRG9uZTsKKwkJCQkJCQlyZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBtX1NpemUgKz0gc2l6ZSArIDE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbV9wRGF0YSA9IEZYX0FsbG9jKEZYX0JZVEUsIG1fU2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9wRGF0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9TdGF0dXMgPSBEb25lOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIHBvcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtX25TdHJlYW1zOyBpICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhICsgcG9zLCBtX3BTdHJlYW1BcnJheVtpXS0+R2V0RGF0YSgpLCBtX3BTdHJlYW1BcnJheVtpXS0+R2V0U2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcyArPSBtX3BTdHJlYW1BcnJheVtpXS0+R2V0U2l6ZSgpICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcERhdGFbcG9zIC0gMV0gPSAnICc7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbV9wU3RyZWFtQXJyYXlbaV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgRlhfRnJlZShtX3BTdHJlYW1BcnJheSk7CisgICAgICAgICAgICAgICAgICAgIG1fcFN0cmVhbUFycmF5ID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX3BEYXRhID0gKEZYX0xQQllURSltX3BTaW5nbGVTdHJlYW0tPkdldERhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9TaXplID0gbV9wU2luZ2xlU3RyZWFtLT5HZXRTaXplKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fSW50ZXJuYWxTdGFnZSA9IFBBR0VQQVJTRV9TVEFHRV9QQVJTRTsKKyAgICAgICAgICAgICAgICBtX0N1cnJlbnRPZmZzZXQgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBDUERGX0FycmF5KiBwQ29udGVudCA9IG1fcE9iamVjdHMtPm1fcEZvcm1EaWN0LT5HZXRBcnJheShGWF9CU1RSQygiQ29udGVudHMiKSk7CisgICAgICAgICAgICAgICAgbV9wU3RyZWFtQXJyYXlbbV9DdXJyZW50T2Zmc2V0XSA9IEZYX05FVyBDUERGX1N0cmVhbUFjYzsKKyAgICAgICAgICAgICAgICBDUERGX1N0cmVhbSogcFN0cmVhbU9iaiA9IChDUERGX1N0cmVhbSopcENvbnRlbnQtPkdldEVsZW1lbnRWYWx1ZShtX0N1cnJlbnRPZmZzZXQpOworICAgICAgICAgICAgICAgIG1fcFN0cmVhbUFycmF5W21fQ3VycmVudE9mZnNldF0tPkxvYWRBbGxEYXRhKHBTdHJlYW1PYmosIEZBTFNFKTsKKyAgICAgICAgICAgICAgICBtX0N1cnJlbnRPZmZzZXQgKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fSW50ZXJuYWxTdGFnZSA9PSBQQUdFUEFSU0VfU1RBR0VfUEFSU0UpIHsKKyAgICAgICAgICAgIGlmIChtX3BQYXJzZXIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIG1fcFBhcnNlciA9IEZYX05FVyBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXI7CisgICAgICAgICAgICAgICAgbV9wUGFyc2VyLT5Jbml0aWFsaXplKCk7CisgICAgICAgICAgICAgICAgbV9wUGFyc2VyLT5QcmVwYXJlUGFyc2UobV9wT2JqZWN0cy0+bV9wRG9jdW1lbnQsIG1fcE9iamVjdHMtPm1fcFBhZ2VSZXNvdXJjZXMsIE5VTEwsIE5VTEwsIG1fcE9iamVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wT2JqZWN0cy0+bV9wUmVzb3VyY2VzLCAmbV9wT2JqZWN0cy0+bV9CQm94LCAmbV9PcHRpb25zLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBtX3BQYXJzZXItPm1fcEN1clN0YXRlcy0+bV9Db2xvclN0YXRlLkdldE1vZGlmeSgpLT5EZWZhdWx0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9DdXJyZW50T2Zmc2V0ID49IG1fU2l6ZSkgeworICAgICAgICAgICAgICAgIG1fSW50ZXJuYWxTdGFnZSA9IFBBR0VQQVJTRV9TVEFHRV9DSEVDS0NMSVA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fQ3VycmVudE9mZnNldCArPSBtX3BQYXJzZXItPlBhcnNlKG1fcERhdGEgKyBtX0N1cnJlbnRPZmZzZXQsIG1fU2l6ZSAtIG1fQ3VycmVudE9mZnNldCwgUEFSU0VfU1RFUF9MSU1JVCk7CisgICAgICAgICAgICAgICAgaWYgKG1fcFBhcnNlci0+bV9iQWJvcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9JbnRlcm5hbFN0YWdlID0gUEFHRVBBUlNFX1NUQUdFX0NIRUNLQ0xJUDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChtX0ludGVybmFsU3RhZ2UgPT0gUEFHRVBBUlNFX1NUQUdFX0NIRUNLQ0xJUCkgeworICAgICAgICAgICAgaWYgKG1fcFR5cGUzQ2hhcikgeworICAgICAgICAgICAgICAgIG1fcFR5cGUzQ2hhci0+bV9iQ29sb3JlZCA9IG1fcFBhcnNlci0+bV9iQ29sb3JlZDsKKyAgICAgICAgICAgICAgICBtX3BUeXBlM0NoYXItPm1fV2lkdGggPSBGWFNZU19yb3VuZChtX3BQYXJzZXItPm1fVHlwZTNEYXRhWzBdICogMTAwMCk7CisgICAgICAgICAgICAgICAgbV9wVHlwZTNDaGFyLT5tX0JCb3gubGVmdCA9IEZYU1lTX3JvdW5kKG1fcFBhcnNlci0+bV9UeXBlM0RhdGFbMl0gKiAxMDAwKTsKKyAgICAgICAgICAgICAgICBtX3BUeXBlM0NoYXItPm1fQkJveC5ib3R0b20gPSBGWFNZU19yb3VuZChtX3BQYXJzZXItPm1fVHlwZTNEYXRhWzNdICogMTAwMCk7CisgICAgICAgICAgICAgICAgbV9wVHlwZTNDaGFyLT5tX0JCb3gucmlnaHQgPSBGWFNZU19yb3VuZChtX3BQYXJzZXItPm1fVHlwZTNEYXRhWzRdICogMTAwMCk7CisgICAgICAgICAgICAgICAgbV9wVHlwZTNDaGFyLT5tX0JCb3gudG9wID0gRlhTWVNfcm91bmQobV9wUGFyc2VyLT5tX1R5cGUzRGF0YVs1XSAqIDEwMDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfUE9TSVRJT04gcG9zID0gbV9wT2JqZWN0cy0+bV9PYmplY3RMaXN0LkdldEhlYWRQb3NpdGlvbigpOworICAgICAgICAgICAgd2hpbGUgKHBvcykgeworICAgICAgICAgICAgICAgIENQREZfUGFnZU9iamVjdCogcE9iaiA9IChDUERGX1BhZ2VPYmplY3QqKW1fcE9iamVjdHMtPm1fT2JqZWN0TGlzdC5HZXROZXh0KHBvcyk7CisgICAgICAgICAgICAgICAgaWYgKHBPYmotPm1fQ2xpcFBhdGguSXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChwT2JqLT5tX0NsaXBQYXRoLkdldFBhdGhDb3VudCgpICE9IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChwT2JqLT5tX0NsaXBQYXRoLkdldFRleHRDb3VudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBDUERGX1BhdGggQ2xpcFBhdGggPSBwT2JqLT5tX0NsaXBQYXRoLkdldFBhdGgoMCk7CisgICAgICAgICAgICAgICAgaWYgKCFDbGlwUGF0aC5Jc1JlY3QoKSB8fCBwT2JqLT5tX1R5cGUgPT0gUERGUEFHRV9TSEFESU5HKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBDRlhfRmxvYXRSZWN0IG9sZF9yZWN0KENsaXBQYXRoLkdldFBvaW50WCgwKSwgQ2xpcFBhdGguR2V0UG9pbnRZKDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xpcFBhdGguR2V0UG9pbnRYKDIpLCBDbGlwUGF0aC5HZXRQb2ludFkoMikpOworICAgICAgICAgICAgICAgIENGWF9GbG9hdFJlY3Qgb2JqX3JlY3QocE9iai0+bV9MZWZ0LCBwT2JqLT5tX0JvdHRvbSwgcE9iai0+bV9SaWdodCwgcE9iai0+bV9Ub3ApOworICAgICAgICAgICAgICAgIGlmIChvbGRfcmVjdC5Db250YWlucyhvYmpfcmVjdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcE9iai0+bV9DbGlwUGF0aC5TZXROdWxsKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9TdGF0dXMgPSBEb25lOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHN0ZXBzICsrOworICAgICAgICBpZiAocFBhdXNlICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CitpbnQgQ1BERl9Db250ZW50UGFyc2VyOjpFc3RpbWF0ZVByb2dyZXNzKCkKK3sKKyAgICBpZiAobV9TdGF0dXMgPT0gUmVhZHkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChtX1N0YXR1cyA9PSBEb25lKSB7CisgICAgICAgIHJldHVybiAxMDA7CisgICAgfQorICAgIGlmIChtX0ludGVybmFsU3RhZ2UgPT0gUEFHRVBBUlNFX1NUQUdFX0dFVENPTlRFTlQpIHsKKyAgICAgICAgcmV0dXJuIDEwOworICAgIH0KKyAgICBpZiAobV9JbnRlcm5hbFN0YWdlID09IFBBR0VQQVJTRV9TVEFHRV9DSEVDS0NMSVApIHsKKyAgICAgICAgcmV0dXJuIDkwOworICAgIH0KKyAgICByZXR1cm4gMTAgKyA4MCAqIG1fQ3VycmVudE9mZnNldCAvIG1fU2l6ZTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYWdlL2ZwZGZfcGFnZV9wYXRoLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYWdlL2ZwZGZfcGFnZV9wYXRoLmNwcAppbmRleCA4MzZjOTQwLi44YjRkNDIyIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFnZS9mcGRmX3BhZ2VfcGF0aC5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhZ2UvZnBkZl9wYWdlX3BhdGguY3BwCkBAIC0xLDUyICsxLDUyIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlb2JqLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX21vZHVsZS5oIg0KLSNpbmNsdWRlICJwYWdlaW50LmgiDQotdm9pZCBDUERGX1BhdGhPYmplY3Q6OkNvcHlEYXRhKGNvbnN0IENQREZfUGFnZU9iamVjdCogcFNyYykNCi17DQotICAgIGNvbnN0IENQREZfUGF0aE9iamVjdCogcFNyY09iaiA9IChjb25zdCBDUERGX1BhdGhPYmplY3QqKXBTcmM7DQotICAgIG1fUGF0aCA9IHBTcmNPYmotPm1fUGF0aDsNCi0gICAgbV9GaWxsVHlwZSA9IHBTcmNPYmotPm1fRmlsbFR5cGU7DQotICAgIG1fYlN0cm9rZSA9IHBTcmNPYmotPm1fYlN0cm9rZTsNCi0gICAgbV9NYXRyaXggPSBwU3JjT2JqLT5tX01hdHJpeDsNCi19DQotdm9pZCBDUERGX1BhdGhPYmplY3Q6OlRyYW5zZm9ybShjb25zdCBDUERGX01hdHJpeCYgbWF0cml4KQ0KLXsNCi0gICAgbV9NYXRyaXguQ29uY2F0KG1hdHJpeCk7DQotICAgIENhbGNCb3VuZGluZ0JveCgpOw0KLX0NCi12b2lkIENQREZfUGF0aE9iamVjdDo6U2V0R3JhcGhTdGF0ZShDUERGX0dyYXBoU3RhdGUgR3JhcGhTdGF0ZSkNCi17DQotICAgIG1fR3JhcGhTdGF0ZSA9IEdyYXBoU3RhdGU7DQotICAgIENhbGNCb3VuZGluZ0JveCgpOw0KLX0NCi12b2lkIENQREZfUGF0aE9iamVjdDo6Q2FsY0JvdW5kaW5nQm94KCkNCi17DQotICAgIGlmIChtX1BhdGguSXNOdWxsKCkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDRlhfRmxvYXRSZWN0IHJlY3Q7DQotICAgIEZYX0ZMT0FUIHdpZHRoID0gbV9HcmFwaFN0YXRlLkdldE9iamVjdCgpLT5tX0xpbmVXaWR0aDsNCi0gICAgaWYgKG1fYlN0cm9rZSAmJiB3aWR0aCAhPSAwKSB7DQotICAgICAgICByZWN0ID0gbV9QYXRoLkdldEJvdW5kaW5nQm94KHdpZHRoLCBtX0dyYXBoU3RhdGUuR2V0T2JqZWN0KCktPm1fTWl0ZXJMaW1pdCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICByZWN0ID0gbV9QYXRoLkdldEJvdW5kaW5nQm94KCk7DQotICAgIH0NCi0gICAgcmVjdC5UcmFuc2Zvcm0oJm1fTWF0cml4KTsNCi0gICAgaWYgKHdpZHRoID09IDAgJiYgbV9iU3Ryb2tlKSB7DQotICAgICAgICByZWN0LmxlZnQgKz0gLTAuNWY7DQotICAgICAgICByZWN0LnJpZ2h0ICs9IDAuNWY7DQotICAgICAgICByZWN0LmJvdHRvbSArPSAtMC41ZjsNCi0gICAgICAgIHJlY3QudG9wICs9IDAuNWY7DQotICAgIH0NCi0gICAgbV9MZWZ0ID0gcmVjdC5sZWZ0Ow0KLSAgICBtX1JpZ2h0ID0gcmVjdC5yaWdodDsNCi0gICAgbV9Ub3AgPSByZWN0LnRvcDsNCi0gICAgbV9Cb3R0b20gPSByZWN0LmJvdHRvbTsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2UuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlb2JqLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfbW9kdWxlLmgiCisjaW5jbHVkZSAicGFnZWludC5oIgordm9pZCBDUERGX1BhdGhPYmplY3Q6OkNvcHlEYXRhKGNvbnN0IENQREZfUGFnZU9iamVjdCogcFNyYykKK3sKKyAgICBjb25zdCBDUERGX1BhdGhPYmplY3QqIHBTcmNPYmogPSAoY29uc3QgQ1BERl9QYXRoT2JqZWN0KilwU3JjOworICAgIG1fUGF0aCA9IHBTcmNPYmotPm1fUGF0aDsKKyAgICBtX0ZpbGxUeXBlID0gcFNyY09iai0+bV9GaWxsVHlwZTsKKyAgICBtX2JTdHJva2UgPSBwU3JjT2JqLT5tX2JTdHJva2U7CisgICAgbV9NYXRyaXggPSBwU3JjT2JqLT5tX01hdHJpeDsKK30KK3ZvaWQgQ1BERl9QYXRoT2JqZWN0OjpUcmFuc2Zvcm0oY29uc3QgQ1BERl9NYXRyaXgmIG1hdHJpeCkKK3sKKyAgICBtX01hdHJpeC5Db25jYXQobWF0cml4KTsKKyAgICBDYWxjQm91bmRpbmdCb3goKTsKK30KK3ZvaWQgQ1BERl9QYXRoT2JqZWN0OjpTZXRHcmFwaFN0YXRlKENQREZfR3JhcGhTdGF0ZSBHcmFwaFN0YXRlKQoreworICAgIG1fR3JhcGhTdGF0ZSA9IEdyYXBoU3RhdGU7CisgICAgQ2FsY0JvdW5kaW5nQm94KCk7Cit9Cit2b2lkIENQREZfUGF0aE9iamVjdDo6Q2FsY0JvdW5kaW5nQm94KCkKK3sKKyAgICBpZiAobV9QYXRoLklzTnVsbCgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZYX0Zsb2F0UmVjdCByZWN0OworICAgIEZYX0ZMT0FUIHdpZHRoID0gbV9HcmFwaFN0YXRlLkdldE9iamVjdCgpLT5tX0xpbmVXaWR0aDsKKyAgICBpZiAobV9iU3Ryb2tlICYmIHdpZHRoICE9IDApIHsKKyAgICAgICAgcmVjdCA9IG1fUGF0aC5HZXRCb3VuZGluZ0JveCh3aWR0aCwgbV9HcmFwaFN0YXRlLkdldE9iamVjdCgpLT5tX01pdGVyTGltaXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlY3QgPSBtX1BhdGguR2V0Qm91bmRpbmdCb3goKTsKKyAgICB9CisgICAgcmVjdC5UcmFuc2Zvcm0oJm1fTWF0cml4KTsKKyAgICBpZiAod2lkdGggPT0gMCAmJiBtX2JTdHJva2UpIHsKKyAgICAgICAgcmVjdC5sZWZ0ICs9IC0wLjVmOworICAgICAgICByZWN0LnJpZ2h0ICs9IDAuNWY7CisgICAgICAgIHJlY3QuYm90dG9tICs9IC0wLjVmOworICAgICAgICByZWN0LnRvcCArPSAwLjVmOworICAgIH0KKyAgICBtX0xlZnQgPSByZWN0LmxlZnQ7CisgICAgbV9SaWdodCA9IHJlY3QucmlnaHQ7CisgICAgbV9Ub3AgPSByZWN0LnRvcDsKKyAgICBtX0JvdHRvbSA9IHJlY3QuYm90dG9tOworfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhZ2UvZnBkZl9wYWdlX3BhdHRlcm4uY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhZ2UvZnBkZl9wYWdlX3BhdHRlcm4uY3BwCmluZGV4IGFlZTAzNjcuLjZjNmMwOTUgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYWdlL2ZwZGZfcGFnZV9wYXR0ZXJuLmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFnZS9mcGRmX3BhZ2VfcGF0dGVybi5jcHAKQEAgLTEsMjc4ICsxLDI3OCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2UuaCINCi0jaW5jbHVkZSAicGFnZWludC5oIg0KLUNQREZfVGlsaW5nUGF0dGVybjo6Q1BERl9UaWxpbmdQYXR0ZXJuKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfT2JqZWN0KiBwUGF0dGVybk9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcGFyZW50TWF0cml4KSA6DQotICAgIENQREZfUGF0dGVybihwYXJlbnRNYXRyaXgpDQotew0KLSAgICBtX1BhdHRlcm5UeXBlID0gUEFUVEVSTl9USUxJTkc7DQotICAgIG1fcFBhdHRlcm5PYmogPSBwUGF0dGVybk9iajsNCi0gICAgbV9wRG9jdW1lbnQgPSBwRG9jOw0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gbV9wUGF0dGVybk9iai0+R2V0RGljdCgpOw0KLSAgICBBU1NFUlQocERpY3QgIT0gTlVMTCk7DQotICAgIG1fUGF0dGVybjJGb3JtID0gcERpY3QtPkdldE1hdHJpeChGWF9CU1RSQygiTWF0cml4IikpOw0KLSAgICBtX2JDb2xvcmVkID0gcERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIlBhaW50VHlwZSIpKSA9PSAxOw0KLSAgICBpZiAocGFyZW50TWF0cml4KSB7DQotICAgICAgICBtX1BhdHRlcm4yRm9ybS5Db25jYXQoKnBhcmVudE1hdHJpeCk7DQotICAgIH0NCi0gICAgbV9wRm9ybSA9IE5VTEw7DQotfQ0KLUNQREZfVGlsaW5nUGF0dGVybjo6fkNQREZfVGlsaW5nUGF0dGVybigpDQotew0KLSAgICBpZiAobV9wRm9ybSkgew0KLSAgICAgICAgZGVsZXRlIG1fcEZvcm07DQotICAgIH0NCi19DQotRlhfQk9PTCBDUERGX1RpbGluZ1BhdHRlcm46OkxvYWQoKQ0KLXsNCi0gICAgaWYgKG1fcEZvcm0gIT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IG1fcFBhdHRlcm5PYmotPkdldERpY3QoKTsNCi0gICAgaWYgKHBEaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBtX2JDb2xvcmVkID0gcERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIlBhaW50VHlwZSIpKSA9PSAxOw0KLSAgICBtX1hTdGVwID0gKEZYX0ZMT0FUKUZYU1lTX2ZhYnMocERpY3QtPkdldE51bWJlcihGWF9CU1RSQygiWFN0ZXAiKSkpOw0KLSAgICBtX1lTdGVwID0gKEZYX0ZMT0FUKUZYU1lTX2ZhYnMocERpY3QtPkdldE51bWJlcihGWF9CU1RSQygiWVN0ZXAiKSkpOw0KLSAgICBpZiAobV9wUGF0dGVybk9iai0+R2V0VHlwZSgpICE9IFBERk9CSl9TVFJFQU0pIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDUERGX1N0cmVhbSogcFN0cmVhbSA9IChDUERGX1N0cmVhbSopbV9wUGF0dGVybk9iajsNCi0gICAgbV9wRm9ybSA9IEZYX05FVyBDUERGX0Zvcm0obV9wRG9jdW1lbnQsIE5VTEwsIHBTdHJlYW0pOw0KLSAgICBtX3BGb3JtLT5QYXJzZUNvbnRlbnQoTlVMTCwgJm1fUGFyZW50TWF0cml4LCBOVUxMLCBOVUxMKTsNCi0gICAgbV9CQm94ID0gcERpY3QtPkdldFJlY3QoRlhfQlNUUkMoIkJCb3giKSk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1DUERGX1NoYWRpbmdQYXR0ZXJuOjpDUERGX1NoYWRpbmdQYXR0ZXJuKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfT2JqZWN0KiBwUGF0dGVybk9iaiwgRlhfQk9PTCBiU2hhZGluZywgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcGFyZW50TWF0cml4KSA6IENQREZfUGF0dGVybihwYXJlbnRNYXRyaXgpDQotew0KLSAgICBtX1BhdHRlcm5UeXBlID0gUEFUVEVSTl9TSEFESU5HOw0KLSAgICBtX3BQYXR0ZXJuT2JqID0gYlNoYWRpbmcgPyBOVUxMIDogcFBhdHRlcm5PYmo7DQotICAgIG1fcERvY3VtZW50ID0gcERvYzsNCi0gICAgbV9iU2hhZGluZ09iaiA9IGJTaGFkaW5nOw0KLSAgICBpZiAoIWJTaGFkaW5nKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gbV9wUGF0dGVybk9iai0+R2V0RGljdCgpOw0KLSAgICAgICAgQVNTRVJUKHBEaWN0ICE9IE5VTEwpOw0KLSAgICAgICAgbV9QYXR0ZXJuMkZvcm0gPSBwRGljdC0+R2V0TWF0cml4KEZYX0JTVFJDKCJNYXRyaXgiKSk7DQotICAgICAgICBtX3BTaGFkaW5nT2JqID0gcERpY3QtPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiU2hhZGluZyIpKTsNCi0gICAgICAgIGlmIChwYXJlbnRNYXRyaXgpIHsNCi0gICAgICAgICAgICBtX1BhdHRlcm4yRm9ybS5Db25jYXQoKnBhcmVudE1hdHJpeCk7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX3BTaGFkaW5nT2JqID0gcFBhdHRlcm5PYmo7DQotICAgIH0NCi0gICAgbV9TaGFkaW5nVHlwZSA9IDA7DQotICAgIG1fcENTID0gTlVMTDsNCi0gICAgbV9uRnVuY3MgPSAwOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkgKyspIHsNCi0gICAgICAgIG1fcEZ1bmN0aW9uc1tpXSA9IE5VTEw7DQotICAgIH0NCi19DQotQ1BERl9TaGFkaW5nUGF0dGVybjo6fkNQREZfU2hhZGluZ1BhdHRlcm4oKQ0KLXsNCi0gICAgQ2xlYXIoKTsNCi19DQotdm9pZCBDUERGX1NoYWRpbmdQYXR0ZXJuOjpDbGVhcigpDQotew0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbkZ1bmNzOyBpICsrKSB7DQotICAgICAgICBpZiAobV9wRnVuY3Rpb25zW2ldKSB7DQotICAgICAgICAgICAgZGVsZXRlIG1fcEZ1bmN0aW9uc1tpXTsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fcEZ1bmN0aW9uc1tpXSA9IE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9Db2xvclNwYWNlKiBwQ1MgPSBtX3BDUzsNCi0gICAgaWYgKHBDUyAmJiBtX3BEb2N1bWVudCkgew0KLSAgICAgICAgbV9wRG9jdW1lbnQtPkdldFBhZ2VEYXRhKCktPlJlbGVhc2VDb2xvclNwYWNlKHBDUy0+R2V0QXJyYXkoKSk7DQotICAgIH0NCi0gICAgbV9TaGFkaW5nVHlwZSA9IDA7DQotICAgIG1fcENTID0gTlVMTDsNCi0gICAgbV9uRnVuY3MgPSAwOw0KLX0NCi1GWF9CT09MIENQREZfU2hhZGluZ1BhdHRlcm46OkxvYWQoKQ0KLXsNCi0gICAgaWYgKG1fU2hhZGluZ1R5cGUgIT0gMCkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwU2hhZGluZ0RpY3QgPSBtX3BTaGFkaW5nT2JqLT5HZXREaWN0KCk7DQotICAgIGlmIChwU2hhZGluZ0RpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChtX25GdW5jcykgew0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX25GdW5jczsgaSArKykNCi0gICAgICAgICAgICBpZiAobV9wRnVuY3Rpb25zW2ldKSB7DQotICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3BGdW5jdGlvbnNbaV07DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgbV9uRnVuY3MgPSAwOw0KLSAgICB9DQotICAgIENQREZfT2JqZWN0KiBwRnVuYyA9IHBTaGFkaW5nRGljdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJGdW5jdGlvbiIpKTsNCi0gICAgaWYgKHBGdW5jKSB7DQotICAgICAgICBpZiAocEZ1bmMtPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgICAgICBtX25GdW5jcyA9ICgoQ1BERl9BcnJheSopcEZ1bmMpLT5HZXRDb3VudCgpOw0KLSAgICAgICAgICAgIGlmIChtX25GdW5jcyA+IDQpIHsNCi0gICAgICAgICAgICAgICAgbV9uRnVuY3MgPSA0Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbkZ1bmNzOyBpICsrKSB7DQotICAgICAgICAgICAgICAgIG1fcEZ1bmN0aW9uc1tpXSA9IENQREZfRnVuY3Rpb246OkxvYWQoKChDUERGX0FycmF5KilwRnVuYyktPkdldEVsZW1lbnRWYWx1ZShpKSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBtX3BGdW5jdGlvbnNbMF0gPSBDUERGX0Z1bmN0aW9uOjpMb2FkKHBGdW5jKTsNCi0gICAgICAgICAgICBtX25GdW5jcyA9IDE7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QqIHBDU09iaiA9IHBTaGFkaW5nRGljdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJDb2xvclNwYWNlIikpOw0KLSAgICBpZiAocENTT2JqID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDUERGX0RvY1BhZ2VEYXRhKiBwRG9jUGFnZURhdGEgPSBtX3BEb2N1bWVudC0+R2V0UGFnZURhdGEoKTsNCi0gICAgbV9wQ1MgPSBwRG9jUGFnZURhdGEtPkdldENvbG9yU3BhY2UocENTT2JqLCBOVUxMKTsNCi0gICAgbV9TaGFkaW5nVHlwZSA9IHBTaGFkaW5nRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiU2hhZGluZ1R5cGUiKSk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENQREZfU2hhZGluZ1BhdHRlcm46OlJlbG9hZCgpDQotew0KLSAgICBDbGVhcigpOw0KLSAgICByZXR1cm4gTG9hZCgpOw0KLX0NCi1GWF9CT09MIENQREZfTWVzaFN0cmVhbTo6TG9hZChDUERGX1N0cmVhbSogcFNoYWRpbmdTdHJlYW0sIENQREZfRnVuY3Rpb24qKiBwRnVuY3MsIGludCBuRnVuY3MsIENQREZfQ29sb3JTcGFjZSogcENTKQ0KLXsNCi0gICAgbV9TdHJlYW0uTG9hZEFsbERhdGEocFNoYWRpbmdTdHJlYW0pOw0KLSAgICBtX0JpdFN0cmVhbS5Jbml0KG1fU3RyZWFtLkdldERhdGEoKSwgbV9TdHJlYW0uR2V0U2l6ZSgpKTsNCi0gICAgbV9wRnVuY3MgPSBwRnVuY3M7DQotICAgIG1fbkZ1bmNzID0gbkZ1bmNzOw0KLSAgICBtX3BDUyA9IHBDUzsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IHBTaGFkaW5nU3RyZWFtLT5HZXREaWN0KCk7DQotICAgIG1fbkNvb3JkQml0cyA9IHBEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJCaXRzUGVyQ29vcmRpbmF0ZSIpKTsNCi0gICAgbV9uQ29tcEJpdHMgPSBwRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiQml0c1BlckNvbXBvbmVudCIpKTsNCi0gICAgbV9uRmxhZ0JpdHMgPSBwRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiQml0c1BlckZsYWciKSk7DQotICAgIGlmICghbV9uQ29vcmRCaXRzIHx8ICFtX25Db21wQml0cykgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGludCBuQ29tcHMgPSBwQ1MtPkNvdW50Q29tcG9uZW50cygpOw0KLSAgICBpZiAobkNvbXBzID4gOCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fbkNvbXBzID0gbkZ1bmNzID8gMSA6IG5Db21wczsNCi0gICAgaWYgKCgoaW50KW1fbkNvbXBzIDwgMCkgfHwgbV9uQ29tcHMgPiA4KSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbV9Db29yZE1heCA9IG1fbkNvb3JkQml0cyA9PSAzMiA/IC0xIDogKDEgPDwgbV9uQ29vcmRCaXRzKSAtIDE7DQotICAgIG1fQ29tcE1heCA9ICgxIDw8IG1fbkNvbXBCaXRzKSAtIDE7DQotICAgIENQREZfQXJyYXkqIHBEZWNvZGUgPSBwRGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIkRlY29kZSIpKTsNCi0gICAgaWYgKHBEZWNvZGUgPT0gTlVMTCB8fCBwRGVjb2RlLT5HZXRDb3VudCgpICE9IDQgKyBtX25Db21wcyAqIDIpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBtX3htaW4gPSBwRGVjb2RlLT5HZXROdW1iZXIoMCk7DQotICAgIG1feG1heCA9IHBEZWNvZGUtPkdldE51bWJlcigxKTsNCi0gICAgbV95bWluID0gcERlY29kZS0+R2V0TnVtYmVyKDIpOw0KLSAgICBtX3ltYXggPSBwRGVjb2RlLT5HZXROdW1iZXIoMyk7DQotICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBtX25Db21wczsgaSArKykgew0KLSAgICAgICAgbV9Db2xvck1pbltpXSA9IHBEZWNvZGUtPkdldE51bWJlcihpICogMiArIDQpOw0KLSAgICAgICAgbV9Db2xvck1heFtpXSA9IHBEZWNvZGUtPkdldE51bWJlcihpICogMiArIDUpOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9EV09SRCBDUERGX01lc2hTdHJlYW06OkdldEZsYWcoKQ0KLXsNCi0gICAgcmV0dXJuIG1fQml0U3RyZWFtLkdldEJpdHMobV9uRmxhZ0JpdHMpICYgMHgwMzsNCi19DQotdm9pZCBDUERGX01lc2hTdHJlYW06OkdldENvb3JkcyhGWF9GTE9BVCYgeCwgRlhfRkxPQVQmIHkpDQotew0KLSAgICBpZiAobV9uQ29vcmRCaXRzID09IDMyKSB7DQotICAgICAgICB4ID0gbV94bWluICsgKEZYX0ZMT0FUKShtX0JpdFN0cmVhbS5HZXRCaXRzKG1fbkNvb3JkQml0cykgKiAobV94bWF4IC0gbV94bWluKSAvIChkb3VibGUpbV9Db29yZE1heCk7DQotICAgICAgICB5ID0gbV95bWluICsgKEZYX0ZMT0FUKShtX0JpdFN0cmVhbS5HZXRCaXRzKG1fbkNvb3JkQml0cykgKiAobV95bWF4IC0gbV95bWluKSAvIChkb3VibGUpbV9Db29yZE1heCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICB4ID0gbV94bWluICsgbV9CaXRTdHJlYW0uR2V0Qml0cyhtX25Db29yZEJpdHMpICogKG1feG1heCAtIG1feG1pbikgLyBtX0Nvb3JkTWF4Ow0KLSAgICAgICAgeSA9IG1feW1pbiArIG1fQml0U3RyZWFtLkdldEJpdHMobV9uQ29vcmRCaXRzKSAqIChtX3ltYXggLSBtX3ltaW4pIC8gbV9Db29yZE1heDsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfTWVzaFN0cmVhbTo6R2V0Q29sb3IoRlhfRkxPQVQmIHIsIEZYX0ZMT0FUJiBnLCBGWF9GTE9BVCYgYikNCi17DQotICAgIEZYX0RXT1JEIGk7DQotICAgIEZYX0ZMT0FUIGNvbG9yX3ZhbHVlWzhdOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbV9uQ29tcHM7IGkgKyspIHsNCi0gICAgICAgIGNvbG9yX3ZhbHVlW2ldID0gbV9Db2xvck1pbltpXSArIG1fQml0U3RyZWFtLkdldEJpdHMobV9uQ29tcEJpdHMpICogKG1fQ29sb3JNYXhbaV0gLSBtX0NvbG9yTWluW2ldKSAvIG1fQ29tcE1heDsNCi0gICAgfQ0KLSAgICBpZiAobV9uRnVuY3MpIHsNCi0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQga01heFJlc3VsdHMgPSA4Ow0KLSAgICAgICAgRlhfRkxPQVQgcmVzdWx0W2tNYXhSZXN1bHRzXTsNCi0gICAgICAgIGludCBuUmVzdWx0czsNCi0gICAgICAgIEZYU1lTX21lbXNldDMyKHJlc3VsdCwgMCwgc2l6ZW9mKHJlc3VsdCkpOw0KLSAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IG1fbkZ1bmNzOyBpICsrKSB7DQotICAgICAgICAgICAgaWYgKG1fcEZ1bmNzW2ldICYmIG1fcEZ1bmNzW2ldLT5Db3VudE91dHB1dHMoKSA8PSBrTWF4UmVzdWx0cykgew0KLSAgICAgICAgICAgICAgICBtX3BGdW5jc1tpXS0+Q2FsbChjb2xvcl92YWx1ZSwgMSwgcmVzdWx0LCBuUmVzdWx0cyk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wQ1MtPkdldFJHQihyZXN1bHQsIHIsIGcsIGIpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wQ1MtPkdldFJHQihjb2xvcl92YWx1ZSwgciwgZywgYik7DQotICAgIH0NCi19DQotRlhfRFdPUkQgQ1BERl9NZXNoU3RyZWFtOjpHZXRWZXJ0ZXgoQ1BERl9NZXNoVmVydGV4JiB2ZXJ0ZXgsIENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyQml0bWFwKQ0KLXsNCi0gICAgRlhfRFdPUkQgZmxhZyA9IEdldEZsYWcoKTsNCi0gICAgR2V0Q29vcmRzKHZlcnRleC54LCB2ZXJ0ZXgueSk7DQotICAgIHBPYmplY3QyQml0bWFwLT5UcmFuc2Zvcm0odmVydGV4LngsIHZlcnRleC55KTsNCi0gICAgR2V0Q29sb3IodmVydGV4LnIsIHZlcnRleC5nLCB2ZXJ0ZXguYik7DQotICAgIG1fQml0U3RyZWFtLkJ5dGVBbGlnbigpOw0KLSAgICByZXR1cm4gZmxhZzsNCi19DQotRlhfQk9PTCBDUERGX01lc2hTdHJlYW06OkdldFZlcnRleFJvdyhDUERGX01lc2hWZXJ0ZXgqIHZlcnRleCwgaW50IGNvdW50LCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkJpdG1hcCkNCi17DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkgKyspIHsNCi0gICAgICAgIGlmIChtX0JpdFN0cmVhbS5Jc0VPRigpKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgR2V0Q29vcmRzKHZlcnRleFtpXS54LCB2ZXJ0ZXhbaV0ueSk7DQotICAgICAgICBwT2JqZWN0MkJpdG1hcC0+VHJhbnNmb3JtKHZlcnRleFtpXS54LCB2ZXJ0ZXhbaV0ueSk7DQotICAgICAgICBHZXRDb2xvcih2ZXJ0ZXhbaV0uciwgdmVydGV4W2ldLmcsIHZlcnRleFtpXS5iKTsNCi0gICAgICAgIG1fQml0U3RyZWFtLkJ5dGVBbGlnbigpOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1DRlhfRmxvYXRSZWN0IF9HZXRTaGFkaW5nQkJveChDUERGX1N0cmVhbSogcFN0cmVhbSwgaW50IHR5cGUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9GdW5jdGlvbioqIHBGdW5jcywgaW50IG5GdW5jcywgQ1BERl9Db2xvclNwYWNlKiBwQ1MpDQotew0KLSAgICBpZiAocFN0cmVhbSA9PSBOVUxMIHx8IHBTdHJlYW0tPkdldFR5cGUoKSAhPSBQREZPQkpfU1RSRUFNIHx8IHBGdW5jcyA9PSBOVUxMIHx8IHBDUyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gQ0ZYX0Zsb2F0UmVjdCgwLCAwLCAwLCAwKTsNCi0gICAgfQ0KLSAgICBDUERGX01lc2hTdHJlYW0gc3RyZWFtOw0KLSAgICBpZiAoIXN0cmVhbS5Mb2FkKHBTdHJlYW0sIHBGdW5jcywgbkZ1bmNzLCBwQ1MpKSB7DQotICAgICAgICByZXR1cm4gQ0ZYX0Zsb2F0UmVjdCgwLCAwLCAwLCAwKTsNCi0gICAgfQ0KLSAgICBDRlhfRmxvYXRSZWN0IHJlY3Q7DQotICAgIEZYX0JPT0wgYlN0YXJ0ZWQgPSBGQUxTRTsNCi0gICAgRlhfQk9PTCBiR291cmF1ZCA9IHR5cGUgPT0gNCB8fCB0eXBlID09IDU7DQotICAgIGludCBmdWxsX3BvaW50X2NvdW50ID0gdHlwZSA9PSA3ID8gMTYgOiAodHlwZSA9PSA2ID8gMTIgOiAxKTsNCi0gICAgaW50IGZ1bGxfY29sb3JfY291bnQgPSAodHlwZSA9PSA2IHx8IHR5cGUgPT0gNykgPyA0IDogMTsNCi0gICAgd2hpbGUgKCFzdHJlYW0ubV9CaXRTdHJlYW0uSXNFT0YoKSkgew0KLSAgICAgICAgRlhfRFdPUkQgZmxhZzsNCi0gICAgICAgIGlmICh0eXBlICE9IDUpIHsNCi0gICAgICAgICAgICBmbGFnID0gc3RyZWFtLkdldEZsYWcoKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBwb2ludF9jb3VudCA9IGZ1bGxfcG9pbnRfY291bnQsIGNvbG9yX2NvdW50ID0gZnVsbF9jb2xvcl9jb3VudDsNCi0gICAgICAgIGlmICghYkdvdXJhdWQgJiYgZmxhZykgew0KLSAgICAgICAgICAgIHBvaW50X2NvdW50IC09IDQ7DQotICAgICAgICAgICAgY29sb3JfY291bnQgLT0gMjsNCi0gICAgICAgIH0NCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9pbnRfY291bnQ7IGkgKyspIHsNCi0gICAgICAgICAgICBGWF9GTE9BVCB4LCB5Ow0KLSAgICAgICAgICAgIHN0cmVhbS5HZXRDb29yZHMoeCwgeSk7DQotICAgICAgICAgICAgaWYgKGJTdGFydGVkKSB7DQotICAgICAgICAgICAgICAgIHJlY3QuVXBkYXRlUmVjdCh4LCB5KTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICByZWN0LkluaXRSZWN0KHgsIHkpOw0KLSAgICAgICAgICAgICAgICBiU3RhcnRlZCA9IFRSVUU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgc3RyZWFtLm1fQml0U3RyZWFtLlNraXBCaXRzKHN0cmVhbS5tX25Db21wcyAqIHN0cmVhbS5tX25Db21wQml0cyAqIGNvbG9yX2NvdW50KTsNCi0gICAgICAgIGlmIChiR291cmF1ZCkgew0KLSAgICAgICAgICAgIHN0cmVhbS5tX0JpdFN0cmVhbS5CeXRlQWxpZ24oKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZWN0LlRyYW5zZm9ybShwTWF0cml4KTsNCi0gICAgcmV0dXJuIHJlY3Q7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlLmgiCisjaW5jbHVkZSAicGFnZWludC5oIgorQ1BERl9UaWxpbmdQYXR0ZXJuOjpDUERGX1RpbGluZ1BhdHRlcm4oQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9PYmplY3QqIHBQYXR0ZXJuT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwYXJlbnRNYXRyaXgpIDoKKyAgICBDUERGX1BhdHRlcm4ocGFyZW50TWF0cml4KQoreworICAgIG1fUGF0dGVyblR5cGUgPSBQQVRURVJOX1RJTElORzsKKyAgICBtX3BQYXR0ZXJuT2JqID0gcFBhdHRlcm5PYmo7CisgICAgbV9wRG9jdW1lbnQgPSBwRG9jOworICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSBtX3BQYXR0ZXJuT2JqLT5HZXREaWN0KCk7CisgICAgQVNTRVJUKHBEaWN0ICE9IE5VTEwpOworICAgIG1fUGF0dGVybjJGb3JtID0gcERpY3QtPkdldE1hdHJpeChGWF9CU1RSQygiTWF0cml4IikpOworICAgIG1fYkNvbG9yZWQgPSBwRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiUGFpbnRUeXBlIikpID09IDE7CisgICAgaWYgKHBhcmVudE1hdHJpeCkgeworICAgICAgICBtX1BhdHRlcm4yRm9ybS5Db25jYXQoKnBhcmVudE1hdHJpeCk7CisgICAgfQorICAgIG1fcEZvcm0gPSBOVUxMOworfQorQ1BERl9UaWxpbmdQYXR0ZXJuOjp+Q1BERl9UaWxpbmdQYXR0ZXJuKCkKK3sKKyAgICBpZiAobV9wRm9ybSkgeworICAgICAgICBkZWxldGUgbV9wRm9ybTsKKyAgICB9Cit9CitGWF9CT09MIENQREZfVGlsaW5nUGF0dGVybjo6TG9hZCgpCit7CisgICAgaWYgKG1fcEZvcm0gIT0gTlVMTCkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IG1fcFBhdHRlcm5PYmotPkdldERpY3QoKTsKKyAgICBpZiAocERpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fYkNvbG9yZWQgPSBwRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiUGFpbnRUeXBlIikpID09IDE7CisgICAgbV9YU3RlcCA9IChGWF9GTE9BVClGWFNZU19mYWJzKHBEaWN0LT5HZXROdW1iZXIoRlhfQlNUUkMoIlhTdGVwIikpKTsKKyAgICBtX1lTdGVwID0gKEZYX0ZMT0FUKUZYU1lTX2ZhYnMocERpY3QtPkdldE51bWJlcihGWF9CU1RSQygiWVN0ZXAiKSkpOworICAgIGlmIChtX3BQYXR0ZXJuT2JqLT5HZXRUeXBlKCkgIT0gUERGT0JKX1NUUkVBTSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIENQREZfU3RyZWFtKiBwU3RyZWFtID0gKENQREZfU3RyZWFtKiltX3BQYXR0ZXJuT2JqOworICAgIG1fcEZvcm0gPSBGWF9ORVcgQ1BERl9Gb3JtKG1fcERvY3VtZW50LCBOVUxMLCBwU3RyZWFtKTsKKyAgICBtX3BGb3JtLT5QYXJzZUNvbnRlbnQoTlVMTCwgJm1fUGFyZW50TWF0cml4LCBOVUxMLCBOVUxMKTsKKyAgICBtX0JCb3ggPSBwRGljdC0+R2V0UmVjdChGWF9CU1RSQygiQkJveCIpKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0NQREZfU2hhZGluZ1BhdHRlcm46OkNQREZfU2hhZGluZ1BhdHRlcm4oQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9PYmplY3QqIHBQYXR0ZXJuT2JqLCBGWF9CT09MIGJTaGFkaW5nLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwYXJlbnRNYXRyaXgpIDogQ1BERl9QYXR0ZXJuKHBhcmVudE1hdHJpeCkKK3sKKyAgICBtX1BhdHRlcm5UeXBlID0gUEFUVEVSTl9TSEFESU5HOworICAgIG1fcFBhdHRlcm5PYmogPSBiU2hhZGluZyA/IE5VTEwgOiBwUGF0dGVybk9iajsKKyAgICBtX3BEb2N1bWVudCA9IHBEb2M7CisgICAgbV9iU2hhZGluZ09iaiA9IGJTaGFkaW5nOworICAgIGlmICghYlNoYWRpbmcpIHsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IG1fcFBhdHRlcm5PYmotPkdldERpY3QoKTsKKyAgICAgICAgQVNTRVJUKHBEaWN0ICE9IE5VTEwpOworICAgICAgICBtX1BhdHRlcm4yRm9ybSA9IHBEaWN0LT5HZXRNYXRyaXgoRlhfQlNUUkMoIk1hdHJpeCIpKTsKKyAgICAgICAgbV9wU2hhZGluZ09iaiA9IHBEaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIlNoYWRpbmciKSk7CisgICAgICAgIGlmIChwYXJlbnRNYXRyaXgpIHsKKyAgICAgICAgICAgIG1fUGF0dGVybjJGb3JtLkNvbmNhdCgqcGFyZW50TWF0cml4KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG1fcFNoYWRpbmdPYmogPSBwUGF0dGVybk9iajsKKyAgICB9CisgICAgbV9TaGFkaW5nVHlwZSA9IDA7CisgICAgbV9wQ1MgPSBOVUxMOworICAgIG1fbkZ1bmNzID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkgKyspIHsKKyAgICAgICAgbV9wRnVuY3Rpb25zW2ldID0gTlVMTDsKKyAgICB9Cit9CitDUERGX1NoYWRpbmdQYXR0ZXJuOjp+Q1BERl9TaGFkaW5nUGF0dGVybigpCit7CisgICAgQ2xlYXIoKTsKK30KK3ZvaWQgQ1BERl9TaGFkaW5nUGF0dGVybjo6Q2xlYXIoKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9uRnVuY3M7IGkgKyspIHsKKyAgICAgICAgaWYgKG1fcEZ1bmN0aW9uc1tpXSkgeworICAgICAgICAgICAgZGVsZXRlIG1fcEZ1bmN0aW9uc1tpXTsKKyAgICAgICAgfQorICAgICAgICBtX3BGdW5jdGlvbnNbaV0gPSBOVUxMOworICAgIH0KKyAgICBDUERGX0NvbG9yU3BhY2UqIHBDUyA9IG1fcENTOworICAgIGlmIChwQ1MgJiYgbV9wRG9jdW1lbnQpIHsKKyAgICAgICAgbV9wRG9jdW1lbnQtPkdldFBhZ2VEYXRhKCktPlJlbGVhc2VDb2xvclNwYWNlKHBDUy0+R2V0QXJyYXkoKSk7CisgICAgfQorICAgIG1fU2hhZGluZ1R5cGUgPSAwOworICAgIG1fcENTID0gTlVMTDsKKyAgICBtX25GdW5jcyA9IDA7Cit9CitGWF9CT09MIENQREZfU2hhZGluZ1BhdHRlcm46OkxvYWQoKQoreworICAgIGlmIChtX1NoYWRpbmdUeXBlICE9IDApIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcFNoYWRpbmdEaWN0ID0gbV9wU2hhZGluZ09iai0+R2V0RGljdCgpOworICAgIGlmIChwU2hhZGluZ0RpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChtX25GdW5jcykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbkZ1bmNzOyBpICsrKQorICAgICAgICAgICAgaWYgKG1fcEZ1bmN0aW9uc1tpXSkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3BGdW5jdGlvbnNbaV07CisgICAgICAgICAgICB9CisgICAgICAgIG1fbkZ1bmNzID0gMDsKKyAgICB9CisgICAgQ1BERl9PYmplY3QqIHBGdW5jID0gcFNoYWRpbmdEaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkZ1bmN0aW9uIikpOworICAgIGlmIChwRnVuYykgeworICAgICAgICBpZiAocEZ1bmMtPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsKKyAgICAgICAgICAgIG1fbkZ1bmNzID0gKChDUERGX0FycmF5KilwRnVuYyktPkdldENvdW50KCk7CisgICAgICAgICAgICBpZiAobV9uRnVuY3MgPiA0KSB7CisgICAgICAgICAgICAgICAgbV9uRnVuY3MgPSA0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX25GdW5jczsgaSArKykgeworICAgICAgICAgICAgICAgIG1fcEZ1bmN0aW9uc1tpXSA9IENQREZfRnVuY3Rpb246OkxvYWQoKChDUERGX0FycmF5KilwRnVuYyktPkdldEVsZW1lbnRWYWx1ZShpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3BGdW5jdGlvbnNbMF0gPSBDUERGX0Z1bmN0aW9uOjpMb2FkKHBGdW5jKTsKKyAgICAgICAgICAgIG1fbkZ1bmNzID0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBDUERGX09iamVjdCogcENTT2JqID0gcFNoYWRpbmdEaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkNvbG9yU3BhY2UiKSk7CisgICAgaWYgKHBDU09iaiA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgQ1BERl9Eb2NQYWdlRGF0YSogcERvY1BhZ2VEYXRhID0gbV9wRG9jdW1lbnQtPkdldFBhZ2VEYXRhKCk7CisgICAgbV9wQ1MgPSBwRG9jUGFnZURhdGEtPkdldENvbG9yU3BhY2UocENTT2JqLCBOVUxMKTsKKyAgICBtX1NoYWRpbmdUeXBlID0gcFNoYWRpbmdEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJTaGFkaW5nVHlwZSIpKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ1BERl9TaGFkaW5nUGF0dGVybjo6UmVsb2FkKCkKK3sKKyAgICBDbGVhcigpOworICAgIHJldHVybiBMb2FkKCk7Cit9CitGWF9CT09MIENQREZfTWVzaFN0cmVhbTo6TG9hZChDUERGX1N0cmVhbSogcFNoYWRpbmdTdHJlYW0sIENQREZfRnVuY3Rpb24qKiBwRnVuY3MsIGludCBuRnVuY3MsIENQREZfQ29sb3JTcGFjZSogcENTKQoreworICAgIG1fU3RyZWFtLkxvYWRBbGxEYXRhKHBTaGFkaW5nU3RyZWFtKTsKKyAgICBtX0JpdFN0cmVhbS5Jbml0KG1fU3RyZWFtLkdldERhdGEoKSwgbV9TdHJlYW0uR2V0U2l6ZSgpKTsKKyAgICBtX3BGdW5jcyA9IHBGdW5jczsKKyAgICBtX25GdW5jcyA9IG5GdW5jczsKKyAgICBtX3BDUyA9IHBDUzsKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gcFNoYWRpbmdTdHJlYW0tPkdldERpY3QoKTsKKyAgICBtX25Db29yZEJpdHMgPSBwRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiQml0c1BlckNvb3JkaW5hdGUiKSk7CisgICAgbV9uQ29tcEJpdHMgPSBwRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiQml0c1BlckNvbXBvbmVudCIpKTsKKyAgICBtX25GbGFnQml0cyA9IHBEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJCaXRzUGVyRmxhZyIpKTsKKyAgICBpZiAoIW1fbkNvb3JkQml0cyB8fCAhbV9uQ29tcEJpdHMpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpbnQgbkNvbXBzID0gcENTLT5Db3VudENvbXBvbmVudHMoKTsKKyAgICBpZiAobkNvbXBzID4gOCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fbkNvbXBzID0gbkZ1bmNzID8gMSA6IG5Db21wczsKKyAgICBpZiAoKChpbnQpbV9uQ29tcHMgPCAwKSB8fCBtX25Db21wcyA+IDgpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBtX0Nvb3JkTWF4ID0gbV9uQ29vcmRCaXRzID09IDMyID8gLTEgOiAoMSA8PCBtX25Db29yZEJpdHMpIC0gMTsKKyAgICBtX0NvbXBNYXggPSAoMSA8PCBtX25Db21wQml0cykgLSAxOworICAgIENQREZfQXJyYXkqIHBEZWNvZGUgPSBwRGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIkRlY29kZSIpKTsKKyAgICBpZiAocERlY29kZSA9PSBOVUxMIHx8IHBEZWNvZGUtPkdldENvdW50KCkgIT0gNCArIG1fbkNvbXBzICogMikgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1feG1pbiA9IHBEZWNvZGUtPkdldE51bWJlcigwKTsKKyAgICBtX3htYXggPSBwRGVjb2RlLT5HZXROdW1iZXIoMSk7CisgICAgbV95bWluID0gcERlY29kZS0+R2V0TnVtYmVyKDIpOworICAgIG1feW1heCA9IHBEZWNvZGUtPkdldE51bWJlcigzKTsKKyAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgbV9uQ29tcHM7IGkgKyspIHsKKyAgICAgICAgbV9Db2xvck1pbltpXSA9IHBEZWNvZGUtPkdldE51bWJlcihpICogMiArIDQpOworICAgICAgICBtX0NvbG9yTWF4W2ldID0gcERlY29kZS0+R2V0TnVtYmVyKGkgKiAyICsgNSk7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfRFdPUkQgQ1BERl9NZXNoU3RyZWFtOjpHZXRGbGFnKCkKK3sKKyAgICByZXR1cm4gbV9CaXRTdHJlYW0uR2V0Qml0cyhtX25GbGFnQml0cykgJiAweDAzOworfQordm9pZCBDUERGX01lc2hTdHJlYW06OkdldENvb3JkcyhGWF9GTE9BVCYgeCwgRlhfRkxPQVQmIHkpCit7CisgICAgaWYgKG1fbkNvb3JkQml0cyA9PSAzMikgeworICAgICAgICB4ID0gbV94bWluICsgKEZYX0ZMT0FUKShtX0JpdFN0cmVhbS5HZXRCaXRzKG1fbkNvb3JkQml0cykgKiAobV94bWF4IC0gbV94bWluKSAvIChkb3VibGUpbV9Db29yZE1heCk7CisgICAgICAgIHkgPSBtX3ltaW4gKyAoRlhfRkxPQVQpKG1fQml0U3RyZWFtLkdldEJpdHMobV9uQ29vcmRCaXRzKSAqIChtX3ltYXggLSBtX3ltaW4pIC8gKGRvdWJsZSltX0Nvb3JkTWF4KTsKKyAgICB9IGVsc2UgeworICAgICAgICB4ID0gbV94bWluICsgbV9CaXRTdHJlYW0uR2V0Qml0cyhtX25Db29yZEJpdHMpICogKG1feG1heCAtIG1feG1pbikgLyBtX0Nvb3JkTWF4OworICAgICAgICB5ID0gbV95bWluICsgbV9CaXRTdHJlYW0uR2V0Qml0cyhtX25Db29yZEJpdHMpICogKG1feW1heCAtIG1feW1pbikgLyBtX0Nvb3JkTWF4OworICAgIH0KK30KK3ZvaWQgQ1BERl9NZXNoU3RyZWFtOjpHZXRDb2xvcihGWF9GTE9BVCYgciwgRlhfRkxPQVQmIGcsIEZYX0ZMT0FUJiBiKQoreworICAgIEZYX0RXT1JEIGk7CisgICAgRlhfRkxPQVQgY29sb3JfdmFsdWVbOF07CisgICAgZm9yIChpID0gMDsgaSA8IG1fbkNvbXBzOyBpICsrKSB7CisgICAgICAgIGNvbG9yX3ZhbHVlW2ldID0gbV9Db2xvck1pbltpXSArIG1fQml0U3RyZWFtLkdldEJpdHMobV9uQ29tcEJpdHMpICogKG1fQ29sb3JNYXhbaV0gLSBtX0NvbG9yTWluW2ldKSAvIG1fQ29tcE1heDsKKyAgICB9CisgICAgaWYgKG1fbkZ1bmNzKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQga01heFJlc3VsdHMgPSA4OworICAgICAgICBGWF9GTE9BVCByZXN1bHRba01heFJlc3VsdHNdOworICAgICAgICBpbnQgblJlc3VsdHM7CisgICAgICAgIEZYU1lTX21lbXNldDMyKHJlc3VsdCwgMCwgc2l6ZW9mKHJlc3VsdCkpOworICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgbV9uRnVuY3M7IGkgKyspIHsKKyAgICAgICAgICAgIGlmIChtX3BGdW5jc1tpXSAmJiBtX3BGdW5jc1tpXS0+Q291bnRPdXRwdXRzKCkgPD0ga01heFJlc3VsdHMpIHsKKyAgICAgICAgICAgICAgICBtX3BGdW5jc1tpXS0+Q2FsbChjb2xvcl92YWx1ZSwgMSwgcmVzdWx0LCBuUmVzdWx0cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9wQ1MtPkdldFJHQihyZXN1bHQsIHIsIGcsIGIpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcENTLT5HZXRSR0IoY29sb3JfdmFsdWUsIHIsIGcsIGIpOworICAgIH0KK30KK0ZYX0RXT1JEIENQREZfTWVzaFN0cmVhbTo6R2V0VmVydGV4KENQREZfTWVzaFZlcnRleCYgdmVydGV4LCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkJpdG1hcCkKK3sKKyAgICBGWF9EV09SRCBmbGFnID0gR2V0RmxhZygpOworICAgIEdldENvb3Jkcyh2ZXJ0ZXgueCwgdmVydGV4LnkpOworICAgIHBPYmplY3QyQml0bWFwLT5UcmFuc2Zvcm0odmVydGV4LngsIHZlcnRleC55KTsKKyAgICBHZXRDb2xvcih2ZXJ0ZXguciwgdmVydGV4LmcsIHZlcnRleC5iKTsKKyAgICBtX0JpdFN0cmVhbS5CeXRlQWxpZ24oKTsKKyAgICByZXR1cm4gZmxhZzsKK30KK0ZYX0JPT0wgQ1BERl9NZXNoU3RyZWFtOjpHZXRWZXJ0ZXhSb3coQ1BERl9NZXNoVmVydGV4KiB2ZXJ0ZXgsIGludCBjb3VudCwgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJCaXRtYXApCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSArKykgeworICAgICAgICBpZiAobV9CaXRTdHJlYW0uSXNFT0YoKSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIEdldENvb3Jkcyh2ZXJ0ZXhbaV0ueCwgdmVydGV4W2ldLnkpOworICAgICAgICBwT2JqZWN0MkJpdG1hcC0+VHJhbnNmb3JtKHZlcnRleFtpXS54LCB2ZXJ0ZXhbaV0ueSk7CisgICAgICAgIEdldENvbG9yKHZlcnRleFtpXS5yLCB2ZXJ0ZXhbaV0uZywgdmVydGV4W2ldLmIpOworICAgICAgICBtX0JpdFN0cmVhbS5CeXRlQWxpZ24oKTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitDRlhfRmxvYXRSZWN0IF9HZXRTaGFkaW5nQkJveChDUERGX1N0cmVhbSogcFN0cmVhbSwgaW50IHR5cGUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0Z1bmN0aW9uKiogcEZ1bmNzLCBpbnQgbkZ1bmNzLCBDUERGX0NvbG9yU3BhY2UqIHBDUykKK3sKKyAgICBpZiAocFN0cmVhbSA9PSBOVUxMIHx8IHBTdHJlYW0tPkdldFR5cGUoKSAhPSBQREZPQkpfU1RSRUFNIHx8IHBGdW5jcyA9PSBOVUxMIHx8IHBDUyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBDRlhfRmxvYXRSZWN0KDAsIDAsIDAsIDApOworICAgIH0KKyAgICBDUERGX01lc2hTdHJlYW0gc3RyZWFtOworICAgIGlmICghc3RyZWFtLkxvYWQocFN0cmVhbSwgcEZ1bmNzLCBuRnVuY3MsIHBDUykpIHsKKyAgICAgICAgcmV0dXJuIENGWF9GbG9hdFJlY3QoMCwgMCwgMCwgMCk7CisgICAgfQorICAgIENGWF9GbG9hdFJlY3QgcmVjdDsKKyAgICBGWF9CT09MIGJTdGFydGVkID0gRkFMU0U7CisgICAgRlhfQk9PTCBiR291cmF1ZCA9IHR5cGUgPT0gNCB8fCB0eXBlID09IDU7CisgICAgaW50IGZ1bGxfcG9pbnRfY291bnQgPSB0eXBlID09IDcgPyAxNiA6ICh0eXBlID09IDYgPyAxMiA6IDEpOworICAgIGludCBmdWxsX2NvbG9yX2NvdW50ID0gKHR5cGUgPT0gNiB8fCB0eXBlID09IDcpID8gNCA6IDE7CisgICAgd2hpbGUgKCFzdHJlYW0ubV9CaXRTdHJlYW0uSXNFT0YoKSkgeworICAgICAgICBGWF9EV09SRCBmbGFnOworICAgICAgICBpZiAodHlwZSAhPSA1KSB7CisgICAgICAgICAgICBmbGFnID0gc3RyZWFtLkdldEZsYWcoKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgcG9pbnRfY291bnQgPSBmdWxsX3BvaW50X2NvdW50LCBjb2xvcl9jb3VudCA9IGZ1bGxfY29sb3JfY291bnQ7CisgICAgICAgIGlmICghYkdvdXJhdWQgJiYgZmxhZykgeworICAgICAgICAgICAgcG9pbnRfY291bnQgLT0gNDsKKyAgICAgICAgICAgIGNvbG9yX2NvdW50IC09IDI7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb2ludF9jb3VudDsgaSArKykgeworICAgICAgICAgICAgRlhfRkxPQVQgeCwgeTsKKyAgICAgICAgICAgIHN0cmVhbS5HZXRDb29yZHMoeCwgeSk7CisgICAgICAgICAgICBpZiAoYlN0YXJ0ZWQpIHsKKyAgICAgICAgICAgICAgICByZWN0LlVwZGF0ZVJlY3QoeCwgeSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlY3QuSW5pdFJlY3QoeCwgeSk7CisgICAgICAgICAgICAgICAgYlN0YXJ0ZWQgPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN0cmVhbS5tX0JpdFN0cmVhbS5Ta2lwQml0cyhzdHJlYW0ubV9uQ29tcHMgKiBzdHJlYW0ubV9uQ29tcEJpdHMgKiBjb2xvcl9jb3VudCk7CisgICAgICAgIGlmIChiR291cmF1ZCkgeworICAgICAgICAgICAgc3RyZWFtLm1fQml0U3RyZWFtLkJ5dGVBbGlnbigpOworICAgICAgICB9CisgICAgfQorICAgIHJlY3QuVHJhbnNmb3JtKHBNYXRyaXgpOworICAgIHJldHVybiByZWN0OworfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhZ2UvcGFnZWludC5oIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhZ2UvcGFnZWludC5oCmluZGV4IGIxYTgzZWMuLjRlMDk3Y2EgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYWdlL3BhZ2VpbnQuaAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFnZS9wYWdlaW50LmgKQEAgLTEsNTA1ICsxLDUwNSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2VvYmouaCINCi0jZGVmaW5lIFBBUlNFX1NURVBfTElNSVQJCTEwMA0KLSNkZWZpbmUgU1RSRUFNX1BBUlNFX0JVRlNJWkUJMjA0ODANCi1jbGFzcyBDUERGX1F1aWNrRm9udENhY2hlOw0KLSNpZm5kZWYgX0ZQREZBUElfTUlOSV8NCi1jbGFzcyBDUERGX1N0cmVhbVBhcnNlciA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ1BERl9TdHJlYW1QYXJzZXIoY29uc3QgRlhfQllURSogcERhdGEsIEZYX0RXT1JEIGR3U2l6ZSk7DQotICAgIH5DUERGX1N0cmVhbVBhcnNlcigpOw0KLQ0KLSAgICBDUERGX1N0cmVhbSoJCVJlYWRJbmxpbmVTdHJlYW0oQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCwgQ1BERl9PYmplY3QqIHBDU09iaiwgRlhfQk9PTCBiRGVjb2RlKTsNCi0gICAgdHlwZWRlZiBlbnVtIHsgRW5kT2ZEYXRhLCBOdW1iZXIsIEtleXdvcmQsIE5hbWUsIE90aGVycyB9IFN5bnRheFR5cGU7DQotDQotICAgIFN5bnRheFR5cGUJCQlQYXJzZU5leHRFbGVtZW50KCk7DQotICAgIEZYX0xQQllURQkJCUdldFdvcmRCdWYoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9Xb3JkQnVmZmVyOw0KLSAgICB9DQotICAgIEZYX0RXT1JECQkJR2V0V29yZFNpemUoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9Xb3JkU2l6ZTsNCi0gICAgfQ0KLSAgICBDUERGX09iamVjdCoJCUdldE9iamVjdCgpDQotICAgIHsNCi0gICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gbV9wTGFzdE9iajsNCi0gICAgICAgIG1fcExhc3RPYmogPSBOVUxMOw0KLSAgICAgICAgcmV0dXJuIHBPYmo7DQotICAgIH0NCi0gICAgRlhfRFdPUkQJCQlHZXRQb3MoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9Qb3M7DQotICAgIH0NCi0gICAgdm9pZAkJCQlTZXRQb3MoRlhfRFdPUkQgcG9zKQ0KLSAgICB7DQotICAgICAgICBtX1BvcyA9IHBvczsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX09iamVjdCoJCVJlYWROZXh0T2JqZWN0KEZYX0JPT0wgYkFsbG93TmVzdGVkQXJyYXkgPSBGQUxTRSwgRlhfQk9PTCBiSW5BcnJheSA9IEZBTFNFKTsNCi0gICAgdm9pZAkJCQlTa2lwUGF0aE9iamVjdCgpOw0KLXByb3RlY3RlZDoNCi0gICAgdm9pZAkJCQlHZXROZXh0V29yZChGWF9CT09MJiBiSXNOdW1iZXIpOw0KLSAgICBDRlhfQnl0ZVN0cmluZwkJUmVhZFN0cmluZygpOw0KLSAgICBDRlhfQnl0ZVN0cmluZwkJUmVhZEhleFN0cmluZygpOw0KLSAgICBjb25zdCBGWF9CWVRFKgkJbV9wQnVmOw0KLSAgICBGWF9EV09SRAkJCW1fU2l6ZTsNCi0gICAgRlhfRFdPUkQJCQltX1BvczsNCi0gICAgRlhfQllURQkJCQltX1dvcmRCdWZmZXJbMjU2XTsNCi0gICAgRlhfRFdPUkQJCQltX1dvcmRTaXplOw0KLSAgICBDUERGX09iamVjdCoJCW1fcExhc3RPYmo7DQotfTsNCi0jZW5kaWYNCi10eXBlZGVmIGVudW0gew0KLSAgICBQREZPUF9DbG9zZUZpbGxTdHJva2VQYXRoID0gMCwgUERGT1BfRmlsbFN0cm9rZVBhdGgsDQotICAgIFBERk9QX0Nsb3NlRU9GaWxsU3Ryb2tlUGF0aCwgUERGT1BfRU9GaWxsU3Ryb2tlUGF0aCwNCi0gICAgUERGT1BfQmVnaW5NYXJrZWRDb250ZW50X0RpY3Rpb25hcnksIFBERk9QX0JlZ2luSW1hZ2UsDQotICAgIFBERk9QX0JlZ2luTWFya2VkQ29udGVudCwgUERGT1BfQmVnaW5UZXh0LA0KLSAgICBQREZPUF9CZWdpblNlY3Rpb25VbmRlZmluZWQsIFBERk9QX0N1cnZlVG9fMTIzLA0KLSAgICBQREZPUF9Db25jYXRNYXRyaXgsIFBERk9QX1NldENvbG9yU3BhY2VfRmlsbCwNCi0gICAgUERGT1BfU2V0Q29sb3JTcGFjZV9TdHJva2UsIFBERk9QX1NldERhc2gsDQotICAgIFBERk9QX1NldENoYXJXaWR0aCwgUERGT1BfU2V0Q2FjaGVkRGV2aWNlLA0KLSAgICBQREZPUF9FeGVjdXRlWE9iamVjdCwgUERGT1BfTWFya1BsYWNlX0RpY3Rpb25hcnksDQotICAgIFBERk9QX0VuZEltYWdlLCBQREZPUF9FbmRNYXJrZWRDb250ZW50LA0KLSAgICBQREZPUF9FbmRUZXh0LCBQREZPUF9FbmRTZWN0aW9uVW5kZWZpbmVkLA0KLSAgICBQREZPUF9GaWxsUGF0aCwgUERGT1BfRmlsbFBhdGhPbGQsDQotICAgIFBERk9QX0VPRmlsbFBhdGgsIFBERk9QX1NldEdyYXlfRmlsbCwNCi0gICAgUERGT1BfU2V0R3JheV9TdHJva2UsIFBERk9QX1NldEV4dGVuZEdyYXBoU3RhdGUsDQotICAgIFBERk9QX0Nsb3NlUGF0aCwgUERGT1BfU2V0RmxhdCwNCi0gICAgUERGT1BfQmVnaW5JbWFnZURhdGEsIFBERk9QX1NldExpbmVKb2luLA0KLSAgICBQREZPUF9TZXRMaW5lQ2FwLCBQREZPUF9TZXRDTVlLQ29sb3JfRmlsbCwNCi0gICAgUERGT1BfU2V0Q01ZS0NvbG9yX1N0cm9rZSwgUERGT1BfTGluZVRvLA0KLSAgICBQREZPUF9Nb3ZlVG8sIFBERk9QX1NldE1pdGVyTGltaXQsDQotICAgIFBERk9QX01hcmtQbGFjZSwgUERGT1BfRW5kUGF0aCwNCi0gICAgUERGT1BfU2F2ZUdyYXBoU3RhdGUsIFBERk9QX1Jlc3RvcmVHcmFwaFN0YXRlLA0KLSAgICBQREZPUF9SZWN0YW5nbGUsIFBERk9QX1NldFJHQkNvbG9yX0ZpbGwsDQotICAgIFBERk9QX1NldFJHQkNvbG9yX1N0cm9rZSwgUERGT1BfU2V0UmVuZGVySW50ZW50LA0KLSAgICBQREZPUF9DbG9zZVN0cm9rZVBhdGgsIFBERk9QX1N0cm9rZVBhdGgsDQotICAgIFBERk9QX1NldENvbG9yX0ZpbGwsIFBERk9QX1NldENvbG9yX1N0cm9rZSwNCi0gICAgUERGT1BfU2V0Q29sb3JQU19GaWxsLCBQREZPUF9TZXRDb2xvclBTX1N0cm9rZSwNCi0gICAgUERGT1BfU2hhZGVGaWxsLCBQREZPUF9TZXRDaGFyU3BhY2UsDQotICAgIFBERk9QX01vdmVUZXh0UG9pbnQsIFBERk9QX01vdmVUZXh0UG9pbnRfU2V0TGVhZGluZywNCi0gICAgUERGT1BfU2V0Rm9udCwgUERGT1BfU2hvd1RleHQsDQotICAgIFBERk9QX1Nob3dUZXh0X1Bvc2l0aW9uaW5nLCBQREZPUF9TZXRUZXh0TGVhZGluZywNCi0gICAgUERGT1BfU2V0VGV4dE1hdHJpeCwgUERGT1BfU2V0VGV4dFJlbmRlck1vZGUsDQotICAgIFBERk9QX1NldFRleHRSaXNlLCBQREZPUF9TZXRXb3JkU3BhY2UsDQotICAgIFBERk9QX1NldEhvcnpTY2FsZSwgUERGT1BfTW92ZVRvTmV4dExpbmUsDQotICAgIFBERk9QX0N1cnZlVG9fMjMsIFBERk9QX1NldExpbmVXaWR0aCwNCi0gICAgUERGT1BfQ2xpcCwgUERGT1BfRU9DbGlwLA0KLSAgICBQREZPUF9DdXJ2ZVRvXzEzLCBQREZPUF9OZXh0TGluZVNob3dUZXh0LA0KLSAgICBQREZPUF9OZXh0TGluZVNob3dUZXh0X1NwYWNlLCBQREZPUF9JbnZhbGlkDQotfSBQREZPUDsNCi0jZGVmaW5lIFBBUkFNX0JVRl9TSVpFCTE2DQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgICBpbnQJCQltX1R5cGU7DQotICAgIHVuaW9uIHsNCi0gICAgICAgIHN0cnVjdCB7DQotICAgICAgICAgICAgRlhfQk9PTAkJbV9iSW50ZWdlcjsNCi0gICAgICAgICAgICB1bmlvbiB7DQotICAgICAgICAgICAgICAgIGludAkJbV9JbnRlZ2VyOw0KLSAgICAgICAgICAgICAgICBGWF9GTE9BVCBtX0Zsb2F0Ow0KLSAgICAgICAgICAgIH07DQotICAgICAgICB9IG1fTnVtYmVyOw0KLSAgICAgICAgQ1BERl9PYmplY3QqCW1fcE9iamVjdDsNCi0gICAgICAgIHN0cnVjdCB7DQotICAgICAgICAgICAgaW50CQkJbV9MZW47DQotICAgICAgICAgICAgY2hhcgkJbV9CdWZmZXJbMzJdOw0KLSAgICAgICAgfSBtX05hbWU7DQotICAgIH07DQotfSBfQ29udGVudFBhcmFtOw0KLSNpZiBkZWZpbmVkKF9GUERGQVBJX01JTklfKQ0KLSNkZWZpbmUgX0ZQREZfTUFYX0ZPUk1fTEVWRUxfCQkxNw0KLSNlbHNlDQotI2RlZmluZSBfRlBERl9NQVhfRk9STV9MRVZFTF8JCTMwDQotI2VuZGlmDQotI2RlZmluZSBfRlBERl9NQVhfVFlQRTNfRk9STV9MRVZFTF8JNA0KLSNkZWZpbmUgX0ZQREZfTUFYX09CSkVDVF9TVEFDS19TSVpFXyA1MTINCi1jbGFzcyBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXIgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfU3RyZWFtQ29udGVudFBhcnNlcigpOw0KLSAgICB+Q1BERl9TdHJlYW1Db250ZW50UGFyc2VyKCk7DQotICAgIEZYX0JPT0wgSW5pdGlhbGl6ZSgpOw0KLSAgICB2b2lkCVByZXBhcmVQYXJzZShDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0RpY3Rpb25hcnkqIHBQYWdlUmVzb3VyY2VzLCBDUERGX0RpY3Rpb25hcnkqIHBQYXJlbnRSZXNvdXJjZXMsDQotICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9BZmZpbmVNYXRyaXgqIHBtdENvbnRlbnRUb1VzZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfUGFnZU9iamVjdHMqIHBPYmpMaXN0LCBDUERGX0RpY3Rpb25hcnkqIHBSZXNvdXJjZXMsDQotICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9GbG9hdFJlY3QqIHBCQm94LCBDUERGX1BhcnNlT3B0aW9ucyogcE9wdGlvbnMsDQotICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfQWxsU3RhdGVzKiBwQWxsU3RhdGVzLCBpbnQgbGV2ZWwpOw0KLSAgICBDUERGX0RvY3VtZW50KgkJbV9wRG9jdW1lbnQ7DQotICAgIENQREZfRGljdGlvbmFyeSoJbV9wUGFnZVJlc291cmNlczsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KgltX3BQYXJlbnRSZXNvdXJjZXM7DQotICAgIENQREZfUGFnZU9iamVjdHMqCW1fcE9iamVjdExpc3Q7DQotICAgIENQREZfRGljdGlvbmFyeSoJbV9wUmVzb3VyY2VzOw0KLSAgICBpbnQJCQkJCW1fTGV2ZWw7DQotICAgIENGWF9BZmZpbmVNYXRyaXgJbV9tdENvbnRlbnRUb1VzZXI7DQotICAgIENGWF9GbG9hdFJlY3QJCW1fQkJveDsNCi0gICAgQ1BERl9QYXJzZU9wdGlvbnMJbV9PcHRpb25zOw0KLSAgICBfQ29udGVudFBhcmFtCQltX1BhcmFtQnVmMVtQQVJBTV9CVUZfU0laRV07DQotICAgIEZYX0RXT1JECQkJbV9QYXJhbVN0YXJ0UG9zOw0KLSAgICBGWF9EV09SRAkJCW1fUGFyYW1Db3VudDsNCi0gICAgdm9pZAkJCQlBZGROdW1iZXJQYXJhbShGWF9MUENTVFIgc3RyLCBpbnQgbGVuKTsNCi0gICAgdm9pZAkJCQlBZGRPYmplY3RQYXJhbShDUERGX09iamVjdCogcE9iaik7DQotICAgIHZvaWQJCQkJQWRkTmFtZVBhcmFtKEZYX0xQQ1NUUiBuYW1lLCBpbnQgc2l6ZSk7DQotICAgIGludAkJCQkJR2V0TmV4dFBhcmFtUG9zKCk7DQotICAgIHZvaWQJCQkJQ2xlYXJBbGxQYXJhbXMoKTsNCi0gICAgQ1BERl9PYmplY3QqCQlHZXRPYmplY3QoRlhfRFdPUkQgaW5kZXgpOw0KLSAgICBDRlhfQnl0ZVN0cmluZwkJR2V0U3RyaW5nKEZYX0RXT1JEIGluZGV4KTsNCi0gICAgRlhfRkxPQVQJCQlHZXROdW1iZXIoRlhfRFdPUkQgaW5kZXgpOw0KLSAgICBGWF9GTE9BVAkJR2V0TnVtYmVyMTYoRlhfRFdPUkQgaW5kZXgpOw0KLSAgICBpbnQJCQkJCUdldEludGVnZXIoRlhfRFdPUkQgaW5kZXgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAoRlhfSU5UMzIpKEdldE51bWJlcihpbmRleCkpOw0KLSAgICB9DQotICAgIEZYX0JPT0wJCQkJT25PcGVyYXRvcihGWF9MUENTVFIgb3ApOw0KLSAgICB2b2lkCQkJCUJpZ0Nhc2VDYWxsZXIoaW50IGluZGV4KTsNCi0gICAgRlhfQk9PTAkJCQltX2JBYm9ydDsNCi0jaWZuZGVmIF9GUERGQVBJX01JTklfDQotICAgIENQREZfU3RyZWFtUGFyc2VyKgltX3BTeW50YXg7DQotICAgIEZYX0RXT1JECQkJR2V0UGFyc2VQb3MoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wU3ludGF4LT5HZXRQb3MoKTsNCi0gICAgfQ0KLSNlbHNlDQotICAgIGludAkJCQkJbV9Xb3JkU3RhdGU7DQotICAgIHZvaWQJCQkJSW5wdXREYXRhKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUpOw0KLSAgICB2b2lkCQkJCUZpbmlzaCgpOw0KLSAgICB2b2lkCQkJCVN0YXJ0QXJyYXkoKTsNCi0gICAgdm9pZAkJCQlFbmRBcnJheSgpOw0KLSAgICB2b2lkCQkJCVN0YXJ0RGljdCgpOw0KLSAgICB2b2lkCQkJCUVuZERpY3QoKTsNCi0gICAgdm9pZAkJCQlFbmROYW1lKCk7DQotICAgIHZvaWQJCQkJRW5kTnVtYmVyKCk7DQotICAgIHZvaWQJCQkJRW5kS2V5d29yZCgpOw0KLSAgICB2b2lkCQkJCUVuZEhleFN0cmluZygpOw0KLSAgICB2b2lkCQkJCUVuZFN0cmluZygpOw0KLSAgICB2b2lkCQkJCUVuZEltYWdlRGljdCgpOw0KLSAgICB2b2lkCQkJCUVuZElubGluZUltYWdlKCk7DQotICAgIEZYX0xQQllURQkJCW1fcFdvcmRCdWY7DQotICAgIEZYX0RXT1JECQkJbV9Xb3JkU2l6ZTsNCi0gICAgQ0ZYX0JpbmFyeUJ1ZgkJbV9TdHJpbmdCdWY7DQotICAgIGludAkJCQkJbV9TdHJpbmdMZXZlbCwgbV9TdHJpbmdTdGF0ZSwgbV9Fc2NDb2RlOw0KLSAgICB2b2lkCQkJCUFkZENvbnRhaW5lcihDUERGX09iamVjdCogcE9iamVjdCk7DQotICAgIEZYX0JPT0wJCQkJU2V0VG9DdXJPYmooQ1BERl9PYmplY3QqIHBPYmplY3QpOw0KLSAgICBGWF9MUEJZVEUJCQltX3BEaWN0TmFtZTsNCi0gICAgRlhfQk9PTAkJCQltX2JEaWN0TmFtZTsNCi0gICAgQ1BERl9PYmplY3QqKgkJbV9wT2JqZWN0U3RhY2s7DQotICAgIEZYX0JPT0wqCQkJbV9wT2JqZWN0U3RhdGU7DQotICAgIEZYX0RXT1JECQkJbV9PYmplY3RTaXplOw0KLSAgICBpbnQJCQkJCW1fSW5saW5lSW1hZ2VTdGF0ZTsNCi0gICAgRlhfQllURQkJCQltX0lubGluZVdoaXRlQ2hhcjsNCi0gICAgQ0ZYX0JpbmFyeUJ1ZgkJbV9JbWFnZVNyY0J1ZjsNCi0gICAgRlhfTFBCWVRFCQkJbV9wU3RyZWFtQnVmOw0KLSNlbmRpZg0KLSAgICBDUERGX0FsbFN0YXRlcyoJCW1fcEN1clN0YXRlczsNCi0gICAgQ1BERl9Db250ZW50TWFyawltX0N1ckNvbnRlbnRNYXJrOw0KLSAgICBDRlhfUHRyQXJyYXkJCW1fQ2xpcFRleHRMaXN0Ow0KLSAgICBDUERGX1RleHRPYmplY3QqCW1fcExhc3RUZXh0T2JqZWN0Ow0KLSAgICBGWF9GTE9BVAkJCW1fRGVmRm9udFNpemU7DQotICAgIHZvaWQJCQkJQWRkVGV4dE9iamVjdChDRlhfQnl0ZVN0cmluZyogcFRleHQsIEZYX0ZMT0FUIGZJbml0S2VybmluZywgRlhfRkxPQVQqIHBLZXJuaW5nLCBpbnQgY291bnQpOw0KLQ0KLSAgICB2b2lkCQkJCUNvbnZlcnRVc2VyU3BhY2UoRlhfRkxPQVQmIHgsIEZYX0ZMT0FUJiB5KTsNCi0gICAgdm9pZAkJCQlDb252ZXJ0VGV4dFNwYWNlKEZYX0ZMT0FUJiB4LCBGWF9GTE9BVCYgeSk7DQotICAgIHZvaWQJCQkJT25DaGFuZ2VUZXh0TWF0cml4KCk7DQotI2lmbmRlZiBfRlBERkFQSV9NSU5JXw0KLSAgICBGWF9EV09SRAkJCVBhcnNlKEZYX0xQQ0JZVEUgcERhdGEsIEZYX0RXT1JEIGR3U2l6ZSwgRlhfRFdPUkQgbWF4X2Nvc3QpOw0KLSAgICB2b2lkCQkJCVBhcnNlUGF0aE9iamVjdCgpOw0KLSNlbmRpZg0KLSAgICBpbnQJCQkJCW1fQ29tcGF0Q291bnQ7DQotICAgIEZYX1BBVEhQT0lOVCoJCW1fcFBhdGhQb2ludHM7DQotICAgIGludAkJCQkJbV9QYXRoUG9pbnRDb3VudDsNCi0gICAgaW50CQkJCQltX1BhdGhBbGxvY1NpemU7DQotICAgIEZYX0ZMT0FUCQkJbV9QYXRoU3RhcnRYLCBtX1BhdGhTdGFydFk7DQotICAgIEZYX0ZMT0FUCQkJbV9QYXRoQ3VycmVudFgsIG1fUGF0aEN1cnJlbnRZOw0KLSAgICBpbnQJCQkJCW1fUGF0aENsaXBUeXBlOw0KLSAgICB2b2lkCQkJCUFkZFBhdGhQb2ludChGWF9GTE9BVCB4LCBGWF9GTE9BVCB5LCBpbnQgZmxhZyk7DQotICAgIHZvaWQJCQkJQWRkUGF0aFJlY3QoRlhfRkxPQVQgeCwgRlhfRkxPQVQgeSwgRlhfRkxPQVQgdywgRlhfRkxPQVQgaCk7DQotICAgIHZvaWQJCQkJQWRkUGF0aE9iamVjdChpbnQgRmlsbFR5cGUsIEZYX0JPT0wgYlN0cm9rZSk7DQotICAgIENQREZfSW1hZ2VPYmplY3QqCUFkZEltYWdlKENQREZfU3RyZWFtKiBwU3RyZWFtLCBDUERGX0ltYWdlKiBwSW1hZ2UsIEZYX0JPT0wgYklubGluZSk7DQotICAgIHZvaWQJCQkJQWRkRHVwbGljYXRlSW1hZ2UoKTsNCi0gICAgdm9pZAkJCQlBZGRGb3JtKENQREZfU3RyZWFtKik7DQotICAgIENGWF9CeXRlU3RyaW5nCQltX0xhc3RJbWFnZU5hbWU7DQotICAgIENQREZfSW1hZ2UqCQkJbV9wTGFzdEltYWdlOw0KLSAgICBDRlhfQmluYXJ5QnVmCQltX0xhc3RJbWFnZURpY3QsIG1fTGFzdEltYWdlRGF0YTsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KgltX3BMYXN0SW1hZ2VEaWN0Ow0KLSAgICBDUERGX0RpY3Rpb25hcnkqICAgIG1fcExhc3RDbG9uZUltYWdlRGljdDsNCi0gICAgRlhfQk9PTAkJCQltX2JSZWxlYXNlTGFzdERpY3Q7DQotICAgIEZYX0JPT0wJCQkJbV9iU2FtZUxhc3REaWN0Ow0KLSAgICB2b2lkCQkJCVNldEdyYXBoaWNTdGF0ZXMoQ1BERl9QYWdlT2JqZWN0KiBwT2JqLCBGWF9CT09MIGJDb2xvciwgRlhfQk9PTCBiVGV4dCwgRlhfQk9PTCBiR3JhcGgpOw0KLSAgICBGWF9CT09MCQkJCW1fYkNvbG9yZWQ7DQotICAgIEZYX0ZMT0FUCQkJbV9UeXBlM0RhdGFbNl07DQotICAgIEZYX0JPT0wJCQkJbV9iUmVzb3VyY2VNaXNzaW5nOw0KLSAgICBDRlhfUHRyQXJyYXkJCW1fU3RhdGVTdGFjazsNCi0gICAgdm9pZAkJCQlTYXZlU3RhdGVzKENQREZfQWxsU3RhdGVzKik7DQotICAgIHZvaWQJCQkJUmVzdG9yZVN0YXRlcyhDUERGX0FsbFN0YXRlcyopOw0KLSAgICBDUERGX0ZvbnQqCQkJRmluZEZvbnQoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUpOw0KLSAgICBDUERGX0NvbG9yU3BhY2UqCUZpbmRDb2xvclNwYWNlKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lKTsNCi0gICAgQ1BERl9QYXR0ZXJuKgkJRmluZFBhdHRlcm4oY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUsIEZYX0JPT0wgYlNoYWRpbmcpOw0KLSAgICBDUERGX09iamVjdCoJCUZpbmRSZXNvdXJjZU9iaihGWF9CU1RSIHR5cGUsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lKTsNCi0gICAgdm9pZCBIYW5kbGVfQ2xvc2VGaWxsU3Ryb2tlUGF0aCgpOw0KLSAgICB2b2lkIEhhbmRsZV9GaWxsU3Ryb2tlUGF0aCgpOw0KLSAgICB2b2lkIEhhbmRsZV9DbG9zZUVPRmlsbFN0cm9rZVBhdGgoKTsNCi0gICAgdm9pZCBIYW5kbGVfRU9GaWxsU3Ryb2tlUGF0aCgpOw0KLSAgICB2b2lkIEhhbmRsZV9CZWdpbk1hcmtlZENvbnRlbnRfRGljdGlvbmFyeSgpOw0KLSAgICB2b2lkIEhhbmRsZV9CZWdpbkltYWdlKCk7DQotICAgIHZvaWQgSGFuZGxlX0JlZ2luTWFya2VkQ29udGVudCgpOw0KLSAgICB2b2lkIEhhbmRsZV9CZWdpblRleHQoKTsNCi0gICAgdm9pZCBIYW5kbGVfQmVnaW5TZWN0aW9uVW5kZWZpbmVkKCk7DQotICAgIHZvaWQgSGFuZGxlX0N1cnZlVG9fMTIzKCk7DQotICAgIHZvaWQgSGFuZGxlX0NvbmNhdE1hdHJpeCgpOw0KLSAgICB2b2lkIEhhbmRsZV9TZXRDb2xvclNwYWNlX0ZpbGwoKTsNCi0gICAgdm9pZCBIYW5kbGVfU2V0Q29sb3JTcGFjZV9TdHJva2UoKTsNCi0gICAgdm9pZCBIYW5kbGVfU2V0RGFzaCgpOw0KLSAgICB2b2lkIEhhbmRsZV9TZXRDaGFyV2lkdGgoKTsNCi0gICAgdm9pZCBIYW5kbGVfU2V0Q2FjaGVkRGV2aWNlKCk7DQotICAgIHZvaWQgSGFuZGxlX0V4ZWN1dGVYT2JqZWN0KCk7DQotICAgIHZvaWQgSGFuZGxlX01hcmtQbGFjZV9EaWN0aW9uYXJ5KCk7DQotICAgIHZvaWQgSGFuZGxlX0VuZEltYWdlKCk7DQotICAgIHZvaWQgSGFuZGxlX0VuZE1hcmtlZENvbnRlbnQoKTsNCi0gICAgdm9pZCBIYW5kbGVfRW5kVGV4dCgpOw0KLSAgICB2b2lkIEhhbmRsZV9FbmRTZWN0aW9uVW5kZWZpbmVkKCk7DQotICAgIHZvaWQgSGFuZGxlX0ZpbGxQYXRoKCk7DQotICAgIHZvaWQgSGFuZGxlX0ZpbGxQYXRoT2xkKCk7DQotICAgIHZvaWQgSGFuZGxlX0VPRmlsbFBhdGgoKTsNCi0gICAgdm9pZCBIYW5kbGVfU2V0R3JheV9GaWxsKCk7DQotICAgIHZvaWQgSGFuZGxlX1NldEdyYXlfU3Ryb2tlKCk7DQotICAgIHZvaWQgSGFuZGxlX1NldEV4dGVuZEdyYXBoU3RhdGUoKTsNCi0gICAgdm9pZCBIYW5kbGVfQ2xvc2VQYXRoKCk7DQotICAgIHZvaWQgSGFuZGxlX1NldEZsYXQoKTsNCi0gICAgdm9pZCBIYW5kbGVfQmVnaW5JbWFnZURhdGEoKTsNCi0gICAgdm9pZCBIYW5kbGVfU2V0TGluZUpvaW4oKTsNCi0gICAgdm9pZCBIYW5kbGVfU2V0TGluZUNhcCgpOw0KLSAgICB2b2lkIEhhbmRsZV9TZXRDTVlLQ29sb3JfRmlsbCgpOw0KLSAgICB2b2lkIEhhbmRsZV9TZXRDTVlLQ29sb3JfU3Ryb2tlKCk7DQotICAgIHZvaWQgSGFuZGxlX0xpbmVUbygpOw0KLSAgICB2b2lkIEhhbmRsZV9Nb3ZlVG8oKTsNCi0gICAgdm9pZCBIYW5kbGVfU2V0TWl0ZXJMaW1pdCgpOw0KLSAgICB2b2lkIEhhbmRsZV9NYXJrUGxhY2UoKTsNCi0gICAgdm9pZCBIYW5kbGVfRW5kUGF0aCgpOw0KLSAgICB2b2lkIEhhbmRsZV9TYXZlR3JhcGhTdGF0ZSgpOw0KLSAgICB2b2lkIEhhbmRsZV9SZXN0b3JlR3JhcGhTdGF0ZSgpOw0KLSAgICB2b2lkIEhhbmRsZV9SZWN0YW5nbGUoKTsNCi0gICAgdm9pZCBIYW5kbGVfU2V0UkdCQ29sb3JfRmlsbCgpOw0KLSAgICB2b2lkIEhhbmRsZV9TZXRSR0JDb2xvcl9TdHJva2UoKTsNCi0gICAgdm9pZCBIYW5kbGVfU2V0UmVuZGVySW50ZW50KCk7DQotICAgIHZvaWQgSGFuZGxlX0Nsb3NlU3Ryb2tlUGF0aCgpOw0KLSAgICB2b2lkIEhhbmRsZV9TdHJva2VQYXRoKCk7DQotICAgIHZvaWQgSGFuZGxlX1NldENvbG9yX0ZpbGwoKTsNCi0gICAgdm9pZCBIYW5kbGVfU2V0Q29sb3JfU3Ryb2tlKCk7DQotICAgIHZvaWQgSGFuZGxlX1NldENvbG9yUFNfRmlsbCgpOw0KLSAgICB2b2lkIEhhbmRsZV9TZXRDb2xvclBTX1N0cm9rZSgpOw0KLSAgICB2b2lkIEhhbmRsZV9TaGFkZUZpbGwoKTsNCi0gICAgdm9pZCBIYW5kbGVfU2V0Q2hhclNwYWNlKCk7DQotICAgIHZvaWQgSGFuZGxlX01vdmVUZXh0UG9pbnQoKTsNCi0gICAgdm9pZCBIYW5kbGVfTW92ZVRleHRQb2ludF9TZXRMZWFkaW5nKCk7DQotICAgIHZvaWQgSGFuZGxlX1NldEZvbnQoKTsNCi0gICAgdm9pZCBIYW5kbGVfU2hvd1RleHQoKTsNCi0gICAgdm9pZCBIYW5kbGVfU2hvd1RleHRfUG9zaXRpb25pbmcoKTsNCi0gICAgdm9pZCBIYW5kbGVfU2V0VGV4dExlYWRpbmcoKTsNCi0gICAgdm9pZCBIYW5kbGVfU2V0VGV4dE1hdHJpeCgpOw0KLSAgICB2b2lkIEhhbmRsZV9TZXRUZXh0UmVuZGVyTW9kZSgpOw0KLSAgICB2b2lkIEhhbmRsZV9TZXRUZXh0UmlzZSgpOw0KLSAgICB2b2lkIEhhbmRsZV9TZXRXb3JkU3BhY2UoKTsNCi0gICAgdm9pZCBIYW5kbGVfU2V0SG9yelNjYWxlKCk7DQotICAgIHZvaWQgSGFuZGxlX01vdmVUb05leHRMaW5lKCk7DQotICAgIHZvaWQgSGFuZGxlX0N1cnZlVG9fMjMoKTsNCi0gICAgdm9pZCBIYW5kbGVfU2V0TGluZVdpZHRoKCk7DQotICAgIHZvaWQgSGFuZGxlX0NsaXAoKTsNCi0gICAgdm9pZCBIYW5kbGVfRU9DbGlwKCk7DQotICAgIHZvaWQgSGFuZGxlX0N1cnZlVG9fMTMoKTsNCi0gICAgdm9pZCBIYW5kbGVfTmV4dExpbmVTaG93VGV4dCgpOw0KLSAgICB2b2lkIEhhbmRsZV9OZXh0TGluZVNob3dUZXh0X1NwYWNlKCk7DQotICAgIHZvaWQgSGFuZGxlX0ludmFsaWQoKTsNCi19Ow0KLWNsYXNzIENQREZfQ29udGVudFBhcnNlciA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgQ1BERl9Db250ZW50UGFyc2VyKCk7DQotICAgIH5DUERGX0NvbnRlbnRQYXJzZXIoKTsNCi0gICAgdHlwZWRlZiBlbnVtIHsgUmVhZHksIFRvQmVDb250aW51ZWQsIERvbmUgfSBQYXJzZVN0YXR1czsNCi0gICAgUGFyc2VTdGF0dXMJCQlHZXRTdGF0dXMoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9TdGF0dXM7DQotICAgIH0NCi0gICAgdm9pZAkJCQlTdGFydChDUERGX1BhZ2UqIHBQYWdlLCBDUERGX1BhcnNlT3B0aW9ucyogcE9wdGlvbnMpOw0KLSAgICB2b2lkCQkJCVN0YXJ0KENQREZfRm9ybSogcEZvcm0sIENQREZfQWxsU3RhdGVzKiBwR3JhcGhpY1N0YXRlcywgQ0ZYX0FmZmluZU1hdHJpeCogcFBhcmVudE1hdHJpeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX1R5cGUzQ2hhciogcFR5cGUzQ2hhciwgQ1BERl9QYXJzZU9wdGlvbnMqIHBPcHRpb25zLCBpbnQgbGV2ZWwpOw0KLSAgICB2b2lkCQkJCUNvbnRpbnVlKElGWF9QYXVzZSogcFBhdXNlKTsNCi0gICAgaW50CQkJCQlFc3RpbWF0ZVByb2dyZXNzKCk7DQotcHJvdGVjdGVkOg0KLSAgICB2b2lkCQkJCUNsZWFyKCk7DQotICAgIFBhcnNlU3RhdHVzCQkJbV9TdGF0dXM7DQotICAgIENQREZfUGFnZU9iamVjdHMqCW1fcE9iamVjdHM7DQotICAgIEZYX0JPT0wJCQkJbV9iRm9ybTsNCi0gICAgQ1BERl9QYXJzZU9wdGlvbnMJbV9PcHRpb25zOw0KLSAgICBDUERGX1R5cGUzQ2hhcioJCW1fcFR5cGUzQ2hhcjsNCi0gICAgaW50CQkJCQltX0ludGVybmFsU3RhZ2U7DQotICAgIENQREZfU3RyZWFtQWNjKgkJbV9wU2luZ2xlU3RyZWFtOw0KLSAgICBDUERGX1N0cmVhbUFjYyoqCW1fcFN0cmVhbUFycmF5Ow0KLSAgICBGWF9EV09SRAkJCW1fblN0cmVhbXM7DQotICAgIEZYX0xQQllURQkJCW1fcERhdGE7DQotICAgIEZYX0RXT1JECQkJbV9TaXplOw0KLSAgICBjbGFzcyBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXIqCW1fcFBhcnNlcjsNCi0gICAgRlhfRFdPUkQJCQltX0N1cnJlbnRPZmZzZXQ7DQotICAgIENQREZfU3RyZWFtRmlsdGVyKgltX3BTdHJlYW1GaWx0ZXI7DQotfTsNCi1jbGFzcyBDUERGX0FsbFN0YXRlcyA6IHB1YmxpYyBDUERGX0dyYXBoaWNTdGF0ZXMNCi17DQotcHVibGljOg0KLSAgICBDUERGX0FsbFN0YXRlcygpOw0KLSAgICB+Q1BERl9BbGxTdGF0ZXMoKTsNCi0gICAgdm9pZAlDb3B5KGNvbnN0IENQREZfQWxsU3RhdGVzJiBzcmMpOw0KLSAgICB2b2lkCVByb2Nlc3NFeHRHUyhDUERGX0RpY3Rpb25hcnkqIHBHUywgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyKiBwUGFyc2VyKTsNCi0gICAgdm9pZAlTZXRMaW5lRGFzaChDUERGX0FycmF5KiwgRlhfRkxPQVQsIEZYX0ZMT0FUIHNjYWxlKTsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeAkJbV9UZXh0TWF0cml4LCBtX0NUTSwgbV9QYXJlbnRNYXRyaXg7DQotICAgIEZYX0ZMT0FUCQkJCW1fVGV4dFgsIG1fVGV4dFksIG1fVGV4dExpbmVYLCBtX1RleHRMaW5lWTsNCi0gICAgRlhfRkxPQVQJCQkJbV9UZXh0TGVhZGluZywgbV9UZXh0UmlzZSwgbV9UZXh0SG9yelNjYWxlOw0KLX07DQotdGVtcGxhdGUgPGNsYXNzIE9iakNsYXNzPiBjbGFzcyBDUERGX0NvdW50ZWRPYmplY3QgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIE9iakNsYXNzCW1fT2JqOw0KLSAgICBGWF9EV09SRAltX25Db3VudDsNCi19Ow0KLXR5cGVkZWYgQ0ZYX01hcFB0clRlbXBsYXRlPENQREZfRGljdGlvbmFyeSosIENQREZfQ291bnRlZE9iamVjdDxDUERGX0ZvbnQqPio+CQlDUERGX0ZvbnRNYXA7DQotdHlwZWRlZiBDRlhfTWFwUHRyVGVtcGxhdGU8Q1BERl9PYmplY3QqLCBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9Db2xvclNwYWNlKj4qPgkJQ1BERl9Db2xvclNwYWNlTWFwOw0KLXR5cGVkZWYgQ0ZYX01hcFB0clRlbXBsYXRlPENQREZfT2JqZWN0KiwgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfUGF0dGVybio+Kj4JCUNQREZfUGF0dGVybk1hcDsNCi10eXBlZGVmIENGWF9NYXBQdHJUZW1wbGF0ZTxGWF9EV09SRCwgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfSW1hZ2UqPio+CQkJCUNQREZfSW1hZ2VNYXA7DQotdHlwZWRlZiBDRlhfTWFwUHRyVGVtcGxhdGU8Q1BERl9TdHJlYW0qLCBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9JY2NQcm9maWxlKj4qPgkJQ1BERl9JY2NQcm9maWxlTWFwOw0KLXR5cGVkZWYgQ0ZYX01hcFB0clRlbXBsYXRlPENQREZfU3RyZWFtKiwgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfU3RyZWFtQWNjKj4qPgkJQ1BERl9Gb250RmlsZU1hcDsNCi10ZW1wbGF0ZSA8Y2xhc3MgS2V5VHlwZSwgY2xhc3MgVmFsdWVUeXBlPg0KLUtleVR5cGUgUERGX0RvY1BhZ2VEYXRhX0ZpbmRWYWx1ZShjb25zdCBDRlhfTWFwUHRyVGVtcGxhdGU8S2V5VHlwZSwgQ1BERl9Db3VudGVkT2JqZWN0PFZhbHVlVHlwZT4qPiAmbWFwLCBWYWx1ZVR5cGUgZmluZFZhbHVlLCBDUERGX0NvdW50ZWRPYmplY3Q8VmFsdWVUeXBlPiomIGZpbmREYXRhKQ0KLXsNCi0gICAgRlhfUE9TSVRJT04gcG9zID0gbWFwLkdldFN0YXJ0UG9zaXRpb24oKTsNCi0gICAgd2hpbGUgKHBvcykgew0KLSAgICAgICAgS2V5VHlwZSBmaW5kS2V5Ow0KLSAgICAgICAgbWFwLkdldE5leHRBc3NvYyhwb3MsIGZpbmRLZXksIGZpbmREYXRhKTsNCi0gICAgICAgIGlmIChmaW5kRGF0YS0+bV9PYmogPT0gZmluZFZhbHVlKSB7DQotICAgICAgICAgICAgcmV0dXJuIGZpbmRLZXk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgZmluZERhdGEgPSBOVUxMOw0KLSAgICByZXR1cm4gKEtleVR5cGUpKEZYX1VJTlRQVFIpTlVMTDsNCi19DQotdGVtcGxhdGUgPGNsYXNzIEtleVR5cGUsIGNsYXNzIFZhbHVlVHlwZT4NCi1GWF9CT09MIFBERl9Eb2NQYWdlRGF0YV9SZWxlYXNlKENGWF9NYXBQdHJUZW1wbGF0ZTxLZXlUeXBlLCBDUERGX0NvdW50ZWRPYmplY3Q8VmFsdWVUeXBlPio+ICZtYXAsIEtleVR5cGUgZmluZEtleSwgVmFsdWVUeXBlIGZpbmRWYWx1ZSwgRlhfQk9PTCBiRm9yY2UgPSBGQUxTRSkNCi17DQotICAgIGlmICghZmluZEtleSAmJiAhZmluZFZhbHVlKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ1BERl9Db3VudGVkT2JqZWN0PFZhbHVlVHlwZT4qIGZpbmREYXRhID0gTlVMTDsNCi0gICAgaWYgKCFmaW5kS2V5KSB7DQotICAgICAgICBmaW5kS2V5ID0gUERGX0RvY1BhZ2VEYXRhX0ZpbmRWYWx1ZTxLZXlUeXBlLCBWYWx1ZVR5cGU+KG1hcCwgZmluZFZhbHVlLCBmaW5kRGF0YSk7DQotICAgIH0gZWxzZSBpZiAoIW1hcC5Mb29rdXAoZmluZEtleSwgZmluZERhdGEpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKGZpbmREYXRhICYmICgoLS0gZmluZERhdGEtPm1fbkNvdW50KSA9PSAwIHx8IGJGb3JjZSkpIHsNCi0gICAgICAgIGRlbGV0ZSBmaW5kRGF0YS0+bV9PYmo7DQotICAgICAgICBkZWxldGUgZmluZERhdGE7DQotICAgICAgICBtYXAuUmVtb3ZlS2V5KGZpbmRLZXkpOw0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1jbGFzcyBDUERGX0RvY1BhZ2VEYXRhIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDUERGX0RvY1BhZ2VEYXRhKENQREZfRG9jdW1lbnQgKnBQREZEb2MpOw0KLSAgICB+Q1BERl9Eb2NQYWdlRGF0YSgpOw0KLSAgICB2b2lkCQkJCQlDbGVhcihGWF9CT09MIGJSZWxlYXNlID0gRkFMU0UpOw0KLSAgICBDUERGX0ZvbnQqCQkJCUdldEZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9udERpY3QsIEZYX0JPT0wgZmluZE9ubHkpOw0KLSAgICBDUERGX0ZvbnQqCQkJCUdldFN0YW5kYXJkRm9udChGWF9CU1RSIGZvbnROYW1lLCBDUERGX0ZvbnRFbmNvZGluZyogcEVuY29kaW5nKTsNCi0gICAgdm9pZAkJCQkJUmVsZWFzZUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9udERpY3QpOw0KLSAgICBDUERGX0NvbG9yU3BhY2UqCQlHZXRDb2xvclNwYWNlKENQREZfT2JqZWN0KiBwQ1NPYmosIENQREZfRGljdGlvbmFyeSogcFJlc291cmNlcyk7DQotICAgIENQREZfQ29sb3JTcGFjZSoJCUdldENvcGllZENvbG9yU3BhY2UoQ1BERl9PYmplY3QqIHBDU09iaik7DQotICAgIHZvaWQJCQkJCVJlbGVhc2VDb2xvclNwYWNlKENQREZfT2JqZWN0KiBwQ29sb3JTcGFjZSk7DQotICAgIENQREZfUGF0dGVybioJCQlHZXRQYXR0ZXJuKENQREZfT2JqZWN0KiBwUGF0dGVybk9iaiwgRlhfQk9PTCBiU2hhZGluZywgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogbWF0cml4KTsNCi0gICAgdm9pZAkJCQkJUmVsZWFzZVBhdHRlcm4oQ1BERl9PYmplY3QqIHBQYXR0ZXJuT2JqKTsNCi0gICAgQ1BERl9JbWFnZSoJCQkJR2V0SW1hZ2UoQ1BERl9PYmplY3QqIHBJbWFnZVN0cmVhbSk7DQotICAgIHZvaWQJCQkJCVJlbGVhc2VJbWFnZShDUERGX09iamVjdCogcEltYWdlU3RyZWFtKTsNCi0gICAgQ1BERl9JY2NQcm9maWxlKgkJR2V0SWNjUHJvZmlsZShDUERGX1N0cmVhbSogcEljY1Byb2ZpbGVTdHJlYW0sIEZYX0lOVDMyIG5Db21wb25lbnRzKTsNCi0gICAgdm9pZAkJCQkJUmVsZWFzZUljY1Byb2ZpbGUoQ1BERl9TdHJlYW0qIHBJY2NQcm9maWxlU3RyZWFtLCBDUERGX0ljY1Byb2ZpbGUqIHBJY2NQcm9maWxlKTsNCi0gICAgQ1BERl9TdHJlYW1BY2MqCQkJR2V0Rm9udEZpbGVTdHJlYW1BY2MoQ1BERl9TdHJlYW0qIHBGb250U3RyZWFtKTsNCi0gICAgdm9pZAkJCQkJUmVsZWFzZUZvbnRGaWxlU3RyZWFtQWNjKENQREZfU3RyZWFtKiBwRm9udFN0cmVhbSwgRlhfQk9PTCBiRm9yY2UgPSBGQUxTRSk7DQotICAgIENQREZfRG9jdW1lbnQqCQkJbV9wUERGRG9jOw0KLSAgICBDUERGX0ZvbnRNYXAJCQltX0ZvbnRNYXA7DQotICAgIENQREZfQ29sb3JTcGFjZU1hcAkJbV9Db2xvclNwYWNlTWFwOw0KLSAgICBDUERGX1BhdHRlcm5NYXAJCQltX1BhdHRlcm5NYXA7DQotICAgIENQREZfSW1hZ2VNYXAJCQltX0ltYWdlTWFwOw0KLSAgICBDUERGX0ljY1Byb2ZpbGVNYXAJCW1fSWNjUHJvZmlsZU1hcDsNCi0gICAgQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0cgltX0hhc2hQcm9maWxlTWFwOw0KLSAgICBDUERGX0ZvbnRGaWxlTWFwCQltX0ZvbnRGaWxlTWFwOw0KLX07DQotY2xhc3MgQ1BERl9GdW5jdGlvbiA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgc3RhdGljIENQREZfRnVuY3Rpb24qCUxvYWQoQ1BERl9PYmplY3QqIHBGdW5jT2JqKTsNCi0gICAgdmlydHVhbCB+Q1BERl9GdW5jdGlvbigpOw0KLSAgICBGWF9CT09MCQlDYWxsKEZYX0ZMT0FUKiBpbnB1dHMsIGludCBuaW5wdXRzLCBGWF9GTE9BVCogcmVzdWx0cywgaW50JiBucmVzdWx0cykgY29uc3Q7DQotICAgIGludAkJCUNvdW50SW5wdXRzKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fbklucHV0czsNCi0gICAgfQ0KLSAgICBpbnQJCQlDb3VudE91dHB1dHMoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9uT3V0cHV0czsNCi0gICAgfQ0KLXByb3RlY3RlZDoNCi0gICAgQ1BERl9GdW5jdGlvbigpOw0KLSAgICBpbnQJCQltX25JbnB1dHMsIG1fbk91dHB1dHM7DQotICAgIEZYX0ZMT0FUKgltX3BEb21haW5zOw0KLSAgICBGWF9GTE9BVCoJbV9wUmFuZ2VzOw0KLSAgICBGWF9CT09MCQlJbml0KENQREZfT2JqZWN0KiBwT2JqKTsNCi0gICAgdmlydHVhbCBGWF9CT09MCXZfSW5pdChDUERGX09iamVjdCogcE9iaikgPSAwOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJdl9DYWxsKEZYX0ZMT0FUKiBpbnB1dHMsIEZYX0ZMT0FUKiByZXN1bHRzKSBjb25zdCA9IDA7DQotfTsNCi1jbGFzcyBDUERGX0ljY1Byb2ZpbGUgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfSWNjUHJvZmlsZShGWF9MUENCWVRFIHBEYXRhLCBGWF9EV09SRCBkd1NpemUsIGludCBuQ29tcG9uZW50cyk7DQotICAgIH5DUERGX0ljY1Byb2ZpbGUoKTsNCi0gICAgRlhfQk9PTAkJCQkJbV9ic1JHQjsNCi0gICAgRlhfTFBWT0lECQkJCW1fcFRyYW5zZm9ybTsNCi19Ow0KLWNsYXNzIENQREZfRGV2aWNlQ1MgOiBwdWJsaWMgQ1BERl9Db2xvclNwYWNlDQotew0KLXB1YmxpYzoNCi0gICAgQ1BERl9EZXZpY2VDUyhpbnQgZmFtaWx5KTsNCi0gICAgdmlydHVhbCBGWF9CT09MCUdldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQmIFIsIEZYX0ZMT0FUJiBHLCBGWF9GTE9BVCYgQikgY29uc3Q7DQotICAgIEZYX0JPT0wJU2V0UkdCKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCBSLCBGWF9GTE9BVCBHLCBGWF9GTE9BVCBCKSBjb25zdDsNCi0gICAgRlhfQk9PTAl2X0dldENNWUsoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUJiBjLCBGWF9GTE9BVCYgbSwgRlhfRkxPQVQmIHksIEZYX0ZMT0FUJiBrKSBjb25zdDsNCi0gICAgRlhfQk9PTAl2X1NldENNWUsoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUIGMsIEZYX0ZMT0FUIG0sIEZYX0ZMT0FUIHksIEZYX0ZMT0FUIGspIGNvbnN0Ow0KLSAgICB2aXJ0dWFsIHZvaWQJVHJhbnNsYXRlSW1hZ2VMaW5lKEZYX0xQQllURSBwRGVzdEJ1ZiwgRlhfTFBDQllURSBwU3JjQnVmLCBpbnQgcGl4ZWxzLCBpbnQgaW1hZ2Vfd2lkdGgsIGludCBpbWFnZV9oZWlnaHQsIEZYX0JPT0wgYlRyYW5zTWFzayA9IEZBTFNFKSBjb25zdDsNCi19Ow0KLWNsYXNzIENQREZfUGF0dGVybkNTIDogcHVibGljIENQREZfQ29sb3JTcGFjZQ0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfUGF0dGVybkNTKCk7DQotICAgIH5DUERGX1BhdHRlcm5DUygpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCXZfTG9hZChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0FycmF5KiBwQXJyYXkpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCUdldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQmIFIsIEZYX0ZMT0FUJiBHLCBGWF9GTE9BVCYgQikgY29uc3Q7DQotICAgIHZpcnR1YWwgQ1BERl9Db2xvclNwYWNlKglHZXRCYXNlQ1MoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wQmFzZUNTOw0KLSAgICB9DQotICAgIENQREZfQ29sb3JTcGFjZSoJbV9wQmFzZUNTOw0KLX07DQotI2RlZmluZQlNQVhfUEFHRV9PQkpFQ1RTX1VOSUZZX05BTUlORwkJCQk0MDk2DQotY2xhc3MgQ1BERl9SZXNvdXJjZU5hbWluZyA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgc3RydWN0IF9OYW1pbmdTdGF0ZSA6IHB1YmxpYyBDRlhfT2JqZWN0IHsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nCW1fUHJlZml4Ow0KLSAgICAgICAgaW50CQkJCW1fbkluZGV4Ow0KLSAgICB9Ow0KLSAgICB+Q1BERl9SZXNvdXJjZU5hbWluZygpOw0KLSAgICBDRlhfQnl0ZVN0cmluZwkJR2V0TmFtZShjb25zdCBDUERGX0RpY3Rpb25hcnkqIHBSZXNMaXN0LCBGWF9MUENTVFIgc3pUeXBlKTsNCi1wcm90ZWN0ZWQ6DQotICAgIENGWF9NYXBCeXRlU3RyaW5nVG9QdHIJbV9OYW1pbmdDYWNoZTsNCi19Ow0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlb2JqLmgiCisjZGVmaW5lIFBBUlNFX1NURVBfTElNSVQJCTEwMAorI2RlZmluZSBTVFJFQU1fUEFSU0VfQlVGU0laRQkyMDQ4MAorY2xhc3MgQ1BERl9RdWlja0ZvbnRDYWNoZTsKKyNpZm5kZWYgX0ZQREZBUElfTUlOSV8KK2NsYXNzIENQREZfU3RyZWFtUGFyc2VyIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENQREZfU3RyZWFtUGFyc2VyKGNvbnN0IEZYX0JZVEUqIHBEYXRhLCBGWF9EV09SRCBkd1NpemUpOworICAgIH5DUERGX1N0cmVhbVBhcnNlcigpOworCisgICAgQ1BERl9TdHJlYW0qCQlSZWFkSW5saW5lU3RyZWFtKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfRGljdGlvbmFyeSogcERpY3QsIENQREZfT2JqZWN0KiBwQ1NPYmosIEZYX0JPT0wgYkRlY29kZSk7CisgICAgdHlwZWRlZiBlbnVtIHsgRW5kT2ZEYXRhLCBOdW1iZXIsIEtleXdvcmQsIE5hbWUsIE90aGVycyB9IFN5bnRheFR5cGU7CisKKyAgICBTeW50YXhUeXBlCQkJUGFyc2VOZXh0RWxlbWVudCgpOworICAgIEZYX0xQQllURQkJCUdldFdvcmRCdWYoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fV29yZEJ1ZmZlcjsKKyAgICB9CisgICAgRlhfRFdPUkQJCQlHZXRXb3JkU2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9Xb3JkU2l6ZTsKKyAgICB9CisgICAgQ1BERl9PYmplY3QqCQlHZXRPYmplY3QoKQorICAgIHsKKyAgICAgICAgQ1BERl9PYmplY3QqIHBPYmogPSBtX3BMYXN0T2JqOworICAgICAgICBtX3BMYXN0T2JqID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIHBPYmo7CisgICAgfQorICAgIEZYX0RXT1JECQkJR2V0UG9zKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX1BvczsKKyAgICB9CisgICAgdm9pZAkJCQlTZXRQb3MoRlhfRFdPUkQgcG9zKQorICAgIHsKKyAgICAgICAgbV9Qb3MgPSBwb3M7CisgICAgfQorCisgICAgQ1BERl9PYmplY3QqCQlSZWFkTmV4dE9iamVjdChGWF9CT09MIGJBbGxvd05lc3RlZEFycmF5ID0gRkFMU0UsIEZYX0JPT0wgYkluQXJyYXkgPSBGQUxTRSk7CisgICAgdm9pZAkJCQlTa2lwUGF0aE9iamVjdCgpOworcHJvdGVjdGVkOgorICAgIHZvaWQJCQkJR2V0TmV4dFdvcmQoRlhfQk9PTCYgYklzTnVtYmVyKTsKKyAgICBDRlhfQnl0ZVN0cmluZwkJUmVhZFN0cmluZygpOworICAgIENGWF9CeXRlU3RyaW5nCQlSZWFkSGV4U3RyaW5nKCk7CisgICAgY29uc3QgRlhfQllURSoJCW1fcEJ1ZjsKKyAgICBGWF9EV09SRAkJCW1fU2l6ZTsKKyAgICBGWF9EV09SRAkJCW1fUG9zOworICAgIEZYX0JZVEUJCQkJbV9Xb3JkQnVmZmVyWzI1Nl07CisgICAgRlhfRFdPUkQJCQltX1dvcmRTaXplOworICAgIENQREZfT2JqZWN0KgkJbV9wTGFzdE9iajsKK307CisjZW5kaWYKK3R5cGVkZWYgZW51bSB7CisgICAgUERGT1BfQ2xvc2VGaWxsU3Ryb2tlUGF0aCA9IDAsIFBERk9QX0ZpbGxTdHJva2VQYXRoLAorICAgIFBERk9QX0Nsb3NlRU9GaWxsU3Ryb2tlUGF0aCwgUERGT1BfRU9GaWxsU3Ryb2tlUGF0aCwKKyAgICBQREZPUF9CZWdpbk1hcmtlZENvbnRlbnRfRGljdGlvbmFyeSwgUERGT1BfQmVnaW5JbWFnZSwKKyAgICBQREZPUF9CZWdpbk1hcmtlZENvbnRlbnQsIFBERk9QX0JlZ2luVGV4dCwKKyAgICBQREZPUF9CZWdpblNlY3Rpb25VbmRlZmluZWQsIFBERk9QX0N1cnZlVG9fMTIzLAorICAgIFBERk9QX0NvbmNhdE1hdHJpeCwgUERGT1BfU2V0Q29sb3JTcGFjZV9GaWxsLAorICAgIFBERk9QX1NldENvbG9yU3BhY2VfU3Ryb2tlLCBQREZPUF9TZXREYXNoLAorICAgIFBERk9QX1NldENoYXJXaWR0aCwgUERGT1BfU2V0Q2FjaGVkRGV2aWNlLAorICAgIFBERk9QX0V4ZWN1dGVYT2JqZWN0LCBQREZPUF9NYXJrUGxhY2VfRGljdGlvbmFyeSwKKyAgICBQREZPUF9FbmRJbWFnZSwgUERGT1BfRW5kTWFya2VkQ29udGVudCwKKyAgICBQREZPUF9FbmRUZXh0LCBQREZPUF9FbmRTZWN0aW9uVW5kZWZpbmVkLAorICAgIFBERk9QX0ZpbGxQYXRoLCBQREZPUF9GaWxsUGF0aE9sZCwKKyAgICBQREZPUF9FT0ZpbGxQYXRoLCBQREZPUF9TZXRHcmF5X0ZpbGwsCisgICAgUERGT1BfU2V0R3JheV9TdHJva2UsIFBERk9QX1NldEV4dGVuZEdyYXBoU3RhdGUsCisgICAgUERGT1BfQ2xvc2VQYXRoLCBQREZPUF9TZXRGbGF0LAorICAgIFBERk9QX0JlZ2luSW1hZ2VEYXRhLCBQREZPUF9TZXRMaW5lSm9pbiwKKyAgICBQREZPUF9TZXRMaW5lQ2FwLCBQREZPUF9TZXRDTVlLQ29sb3JfRmlsbCwKKyAgICBQREZPUF9TZXRDTVlLQ29sb3JfU3Ryb2tlLCBQREZPUF9MaW5lVG8sCisgICAgUERGT1BfTW92ZVRvLCBQREZPUF9TZXRNaXRlckxpbWl0LAorICAgIFBERk9QX01hcmtQbGFjZSwgUERGT1BfRW5kUGF0aCwKKyAgICBQREZPUF9TYXZlR3JhcGhTdGF0ZSwgUERGT1BfUmVzdG9yZUdyYXBoU3RhdGUsCisgICAgUERGT1BfUmVjdGFuZ2xlLCBQREZPUF9TZXRSR0JDb2xvcl9GaWxsLAorICAgIFBERk9QX1NldFJHQkNvbG9yX1N0cm9rZSwgUERGT1BfU2V0UmVuZGVySW50ZW50LAorICAgIFBERk9QX0Nsb3NlU3Ryb2tlUGF0aCwgUERGT1BfU3Ryb2tlUGF0aCwKKyAgICBQREZPUF9TZXRDb2xvcl9GaWxsLCBQREZPUF9TZXRDb2xvcl9TdHJva2UsCisgICAgUERGT1BfU2V0Q29sb3JQU19GaWxsLCBQREZPUF9TZXRDb2xvclBTX1N0cm9rZSwKKyAgICBQREZPUF9TaGFkZUZpbGwsIFBERk9QX1NldENoYXJTcGFjZSwKKyAgICBQREZPUF9Nb3ZlVGV4dFBvaW50LCBQREZPUF9Nb3ZlVGV4dFBvaW50X1NldExlYWRpbmcsCisgICAgUERGT1BfU2V0Rm9udCwgUERGT1BfU2hvd1RleHQsCisgICAgUERGT1BfU2hvd1RleHRfUG9zaXRpb25pbmcsIFBERk9QX1NldFRleHRMZWFkaW5nLAorICAgIFBERk9QX1NldFRleHRNYXRyaXgsIFBERk9QX1NldFRleHRSZW5kZXJNb2RlLAorICAgIFBERk9QX1NldFRleHRSaXNlLCBQREZPUF9TZXRXb3JkU3BhY2UsCisgICAgUERGT1BfU2V0SG9yelNjYWxlLCBQREZPUF9Nb3ZlVG9OZXh0TGluZSwKKyAgICBQREZPUF9DdXJ2ZVRvXzIzLCBQREZPUF9TZXRMaW5lV2lkdGgsCisgICAgUERGT1BfQ2xpcCwgUERGT1BfRU9DbGlwLAorICAgIFBERk9QX0N1cnZlVG9fMTMsIFBERk9QX05leHRMaW5lU2hvd1RleHQsCisgICAgUERGT1BfTmV4dExpbmVTaG93VGV4dF9TcGFjZSwgUERGT1BfSW52YWxpZAorfSBQREZPUDsKKyNkZWZpbmUgUEFSQU1fQlVGX1NJWkUJMTYKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQJCQltX1R5cGU7CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgRlhfQk9PTAkJbV9iSW50ZWdlcjsKKyAgICAgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgICAgICBpbnQJCW1fSW50ZWdlcjsKKyAgICAgICAgICAgICAgICBGWF9GTE9BVCBtX0Zsb2F0OworICAgICAgICAgICAgfTsKKyAgICAgICAgfSBtX051bWJlcjsKKyAgICAgICAgQ1BERl9PYmplY3QqCW1fcE9iamVjdDsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIGludAkJCW1fTGVuOworICAgICAgICAgICAgY2hhcgkJbV9CdWZmZXJbMzJdOworICAgICAgICB9IG1fTmFtZTsKKyAgICB9OworfSBfQ29udGVudFBhcmFtOworI2lmIGRlZmluZWQoX0ZQREZBUElfTUlOSV8pCisjZGVmaW5lIF9GUERGX01BWF9GT1JNX0xFVkVMXwkJMTcKKyNlbHNlCisjZGVmaW5lIF9GUERGX01BWF9GT1JNX0xFVkVMXwkJMzAKKyNlbmRpZgorI2RlZmluZSBfRlBERl9NQVhfVFlQRTNfRk9STV9MRVZFTF8JNAorI2RlZmluZSBfRlBERl9NQVhfT0JKRUNUX1NUQUNLX1NJWkVfIDUxMgorY2xhc3MgQ1BERl9TdHJlYW1Db250ZW50UGFyc2VyIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBDUERGX1N0cmVhbUNvbnRlbnRQYXJzZXIoKTsKKyAgICB+Q1BERl9TdHJlYW1Db250ZW50UGFyc2VyKCk7CisgICAgRlhfQk9PTCBJbml0aWFsaXplKCk7CisgICAgdm9pZAlQcmVwYXJlUGFyc2UoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZVJlc291cmNlcywgQ1BERl9EaWN0aW9uYXJ5KiBwUGFyZW50UmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9BZmZpbmVNYXRyaXgqIHBtdENvbnRlbnRUb1VzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9QYWdlT2JqZWN0cyogcE9iakxpc3QsIENQREZfRGljdGlvbmFyeSogcFJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBDRlhfRmxvYXRSZWN0KiBwQkJveCwgQ1BERl9QYXJzZU9wdGlvbnMqIHBPcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfQWxsU3RhdGVzKiBwQWxsU3RhdGVzLCBpbnQgbGV2ZWwpOworICAgIENQREZfRG9jdW1lbnQqCQltX3BEb2N1bWVudDsKKyAgICBDUERGX0RpY3Rpb25hcnkqCW1fcFBhZ2VSZXNvdXJjZXM7CisgICAgQ1BERl9EaWN0aW9uYXJ5KgltX3BQYXJlbnRSZXNvdXJjZXM7CisgICAgQ1BERl9QYWdlT2JqZWN0cyoJbV9wT2JqZWN0TGlzdDsKKyAgICBDUERGX0RpY3Rpb25hcnkqCW1fcFJlc291cmNlczsKKyAgICBpbnQJCQkJCW1fTGV2ZWw7CisgICAgQ0ZYX0FmZmluZU1hdHJpeAltX210Q29udGVudFRvVXNlcjsKKyAgICBDRlhfRmxvYXRSZWN0CQltX0JCb3g7CisgICAgQ1BERl9QYXJzZU9wdGlvbnMJbV9PcHRpb25zOworICAgIF9Db250ZW50UGFyYW0JCW1fUGFyYW1CdWYxW1BBUkFNX0JVRl9TSVpFXTsKKyAgICBGWF9EV09SRAkJCW1fUGFyYW1TdGFydFBvczsKKyAgICBGWF9EV09SRAkJCW1fUGFyYW1Db3VudDsKKyAgICB2b2lkCQkJCUFkZE51bWJlclBhcmFtKEZYX0xQQ1NUUiBzdHIsIGludCBsZW4pOworICAgIHZvaWQJCQkJQWRkT2JqZWN0UGFyYW0oQ1BERl9PYmplY3QqIHBPYmopOworICAgIHZvaWQJCQkJQWRkTmFtZVBhcmFtKEZYX0xQQ1NUUiBuYW1lLCBpbnQgc2l6ZSk7CisgICAgaW50CQkJCQlHZXROZXh0UGFyYW1Qb3MoKTsKKyAgICB2b2lkCQkJCUNsZWFyQWxsUGFyYW1zKCk7CisgICAgQ1BERl9PYmplY3QqCQlHZXRPYmplY3QoRlhfRFdPUkQgaW5kZXgpOworICAgIENGWF9CeXRlU3RyaW5nCQlHZXRTdHJpbmcoRlhfRFdPUkQgaW5kZXgpOworICAgIEZYX0ZMT0FUCQkJR2V0TnVtYmVyKEZYX0RXT1JEIGluZGV4KTsKKyAgICBGWF9GTE9BVAkJR2V0TnVtYmVyMTYoRlhfRFdPUkQgaW5kZXgpOworICAgIGludAkJCQkJR2V0SW50ZWdlcihGWF9EV09SRCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiAoRlhfSU5UMzIpKEdldE51bWJlcihpbmRleCkpOworICAgIH0KKyAgICBGWF9CT09MCQkJCU9uT3BlcmF0b3IoRlhfTFBDU1RSIG9wKTsKKyAgICB2b2lkCQkJCUJpZ0Nhc2VDYWxsZXIoaW50IGluZGV4KTsKKyAgICBGWF9CT09MCQkJCW1fYkFib3J0OworI2lmbmRlZiBfRlBERkFQSV9NSU5JXworICAgIENQREZfU3RyZWFtUGFyc2VyKgltX3BTeW50YXg7CisgICAgRlhfRFdPUkQJCQlHZXRQYXJzZVBvcygpCisgICAgeworICAgICAgICByZXR1cm4gbV9wU3ludGF4LT5HZXRQb3MoKTsKKyAgICB9CisjZWxzZQorICAgIGludAkJCQkJbV9Xb3JkU3RhdGU7CisgICAgdm9pZAkJCQlJbnB1dERhdGEoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSk7CisgICAgdm9pZAkJCQlGaW5pc2goKTsKKyAgICB2b2lkCQkJCVN0YXJ0QXJyYXkoKTsKKyAgICB2b2lkCQkJCUVuZEFycmF5KCk7CisgICAgdm9pZAkJCQlTdGFydERpY3QoKTsKKyAgICB2b2lkCQkJCUVuZERpY3QoKTsKKyAgICB2b2lkCQkJCUVuZE5hbWUoKTsKKyAgICB2b2lkCQkJCUVuZE51bWJlcigpOworICAgIHZvaWQJCQkJRW5kS2V5d29yZCgpOworICAgIHZvaWQJCQkJRW5kSGV4U3RyaW5nKCk7CisgICAgdm9pZAkJCQlFbmRTdHJpbmcoKTsKKyAgICB2b2lkCQkJCUVuZEltYWdlRGljdCgpOworICAgIHZvaWQJCQkJRW5kSW5saW5lSW1hZ2UoKTsKKyAgICBGWF9MUEJZVEUJCQltX3BXb3JkQnVmOworICAgIEZYX0RXT1JECQkJbV9Xb3JkU2l6ZTsKKyAgICBDRlhfQmluYXJ5QnVmCQltX1N0cmluZ0J1ZjsKKyAgICBpbnQJCQkJCW1fU3RyaW5nTGV2ZWwsIG1fU3RyaW5nU3RhdGUsIG1fRXNjQ29kZTsKKyAgICB2b2lkCQkJCUFkZENvbnRhaW5lcihDUERGX09iamVjdCogcE9iamVjdCk7CisgICAgRlhfQk9PTAkJCQlTZXRUb0N1ck9iaihDUERGX09iamVjdCogcE9iamVjdCk7CisgICAgRlhfTFBCWVRFCQkJbV9wRGljdE5hbWU7CisgICAgRlhfQk9PTAkJCQltX2JEaWN0TmFtZTsKKyAgICBDUERGX09iamVjdCoqCQltX3BPYmplY3RTdGFjazsKKyAgICBGWF9CT09MKgkJCW1fcE9iamVjdFN0YXRlOworICAgIEZYX0RXT1JECQkJbV9PYmplY3RTaXplOworICAgIGludAkJCQkJbV9JbmxpbmVJbWFnZVN0YXRlOworICAgIEZYX0JZVEUJCQkJbV9JbmxpbmVXaGl0ZUNoYXI7CisgICAgQ0ZYX0JpbmFyeUJ1ZgkJbV9JbWFnZVNyY0J1ZjsKKyAgICBGWF9MUEJZVEUJCQltX3BTdHJlYW1CdWY7CisjZW5kaWYKKyAgICBDUERGX0FsbFN0YXRlcyoJCW1fcEN1clN0YXRlczsKKyAgICBDUERGX0NvbnRlbnRNYXJrCW1fQ3VyQ29udGVudE1hcms7CisgICAgQ0ZYX1B0ckFycmF5CQltX0NsaXBUZXh0TGlzdDsKKyAgICBDUERGX1RleHRPYmplY3QqCW1fcExhc3RUZXh0T2JqZWN0OworICAgIEZYX0ZMT0FUCQkJbV9EZWZGb250U2l6ZTsKKyAgICB2b2lkCQkJCUFkZFRleHRPYmplY3QoQ0ZYX0J5dGVTdHJpbmcqIHBUZXh0LCBGWF9GTE9BVCBmSW5pdEtlcm5pbmcsIEZYX0ZMT0FUKiBwS2VybmluZywgaW50IGNvdW50KTsKKworICAgIHZvaWQJCQkJQ29udmVydFVzZXJTcGFjZShGWF9GTE9BVCYgeCwgRlhfRkxPQVQmIHkpOworICAgIHZvaWQJCQkJQ29udmVydFRleHRTcGFjZShGWF9GTE9BVCYgeCwgRlhfRkxPQVQmIHkpOworICAgIHZvaWQJCQkJT25DaGFuZ2VUZXh0TWF0cml4KCk7CisjaWZuZGVmIF9GUERGQVBJX01JTklfCisgICAgRlhfRFdPUkQJCQlQYXJzZShGWF9MUENCWVRFIHBEYXRhLCBGWF9EV09SRCBkd1NpemUsIEZYX0RXT1JEIG1heF9jb3N0KTsKKyAgICB2b2lkCQkJCVBhcnNlUGF0aE9iamVjdCgpOworI2VuZGlmCisgICAgaW50CQkJCQltX0NvbXBhdENvdW50OworICAgIEZYX1BBVEhQT0lOVCoJCW1fcFBhdGhQb2ludHM7CisgICAgaW50CQkJCQltX1BhdGhQb2ludENvdW50OworICAgIGludAkJCQkJbV9QYXRoQWxsb2NTaXplOworICAgIEZYX0ZMT0FUCQkJbV9QYXRoU3RhcnRYLCBtX1BhdGhTdGFydFk7CisgICAgRlhfRkxPQVQJCQltX1BhdGhDdXJyZW50WCwgbV9QYXRoQ3VycmVudFk7CisgICAgaW50CQkJCQltX1BhdGhDbGlwVHlwZTsKKyAgICB2b2lkCQkJCUFkZFBhdGhQb2ludChGWF9GTE9BVCB4LCBGWF9GTE9BVCB5LCBpbnQgZmxhZyk7CisgICAgdm9pZAkJCQlBZGRQYXRoUmVjdChGWF9GTE9BVCB4LCBGWF9GTE9BVCB5LCBGWF9GTE9BVCB3LCBGWF9GTE9BVCBoKTsKKyAgICB2b2lkCQkJCUFkZFBhdGhPYmplY3QoaW50IEZpbGxUeXBlLCBGWF9CT09MIGJTdHJva2UpOworICAgIENQREZfSW1hZ2VPYmplY3QqCUFkZEltYWdlKENQREZfU3RyZWFtKiBwU3RyZWFtLCBDUERGX0ltYWdlKiBwSW1hZ2UsIEZYX0JPT0wgYklubGluZSk7CisgICAgdm9pZAkJCQlBZGREdXBsaWNhdGVJbWFnZSgpOworICAgIHZvaWQJCQkJQWRkRm9ybShDUERGX1N0cmVhbSopOworICAgIENGWF9CeXRlU3RyaW5nCQltX0xhc3RJbWFnZU5hbWU7CisgICAgQ1BERl9JbWFnZSoJCQltX3BMYXN0SW1hZ2U7CisgICAgQ0ZYX0JpbmFyeUJ1ZgkJbV9MYXN0SW1hZ2VEaWN0LCBtX0xhc3RJbWFnZURhdGE7CisgICAgQ1BERl9EaWN0aW9uYXJ5KgltX3BMYXN0SW1hZ2VEaWN0OworICAgIENQREZfRGljdGlvbmFyeSogICAgbV9wTGFzdENsb25lSW1hZ2VEaWN0OworICAgIEZYX0JPT0wJCQkJbV9iUmVsZWFzZUxhc3REaWN0OworICAgIEZYX0JPT0wJCQkJbV9iU2FtZUxhc3REaWN0OworICAgIHZvaWQJCQkJU2V0R3JhcGhpY1N0YXRlcyhDUERGX1BhZ2VPYmplY3QqIHBPYmosIEZYX0JPT0wgYkNvbG9yLCBGWF9CT09MIGJUZXh0LCBGWF9CT09MIGJHcmFwaCk7CisgICAgRlhfQk9PTAkJCQltX2JDb2xvcmVkOworICAgIEZYX0ZMT0FUCQkJbV9UeXBlM0RhdGFbNl07CisgICAgRlhfQk9PTAkJCQltX2JSZXNvdXJjZU1pc3Npbmc7CisgICAgQ0ZYX1B0ckFycmF5CQltX1N0YXRlU3RhY2s7CisgICAgdm9pZAkJCQlTYXZlU3RhdGVzKENQREZfQWxsU3RhdGVzKik7CisgICAgdm9pZAkJCQlSZXN0b3JlU3RhdGVzKENQREZfQWxsU3RhdGVzKik7CisgICAgQ1BERl9Gb250KgkJCUZpbmRGb250KGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lKTsKKyAgICBDUERGX0NvbG9yU3BhY2UqCUZpbmRDb2xvclNwYWNlKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lKTsKKyAgICBDUERGX1BhdHRlcm4qCQlGaW5kUGF0dGVybihjb25zdCBDRlhfQnl0ZVN0cmluZyYgbmFtZSwgRlhfQk9PTCBiU2hhZGluZyk7CisgICAgQ1BERl9PYmplY3QqCQlGaW5kUmVzb3VyY2VPYmooRlhfQlNUUiB0eXBlLCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgbmFtZSk7CisgICAgdm9pZCBIYW5kbGVfQ2xvc2VGaWxsU3Ryb2tlUGF0aCgpOworICAgIHZvaWQgSGFuZGxlX0ZpbGxTdHJva2VQYXRoKCk7CisgICAgdm9pZCBIYW5kbGVfQ2xvc2VFT0ZpbGxTdHJva2VQYXRoKCk7CisgICAgdm9pZCBIYW5kbGVfRU9GaWxsU3Ryb2tlUGF0aCgpOworICAgIHZvaWQgSGFuZGxlX0JlZ2luTWFya2VkQ29udGVudF9EaWN0aW9uYXJ5KCk7CisgICAgdm9pZCBIYW5kbGVfQmVnaW5JbWFnZSgpOworICAgIHZvaWQgSGFuZGxlX0JlZ2luTWFya2VkQ29udGVudCgpOworICAgIHZvaWQgSGFuZGxlX0JlZ2luVGV4dCgpOworICAgIHZvaWQgSGFuZGxlX0JlZ2luU2VjdGlvblVuZGVmaW5lZCgpOworICAgIHZvaWQgSGFuZGxlX0N1cnZlVG9fMTIzKCk7CisgICAgdm9pZCBIYW5kbGVfQ29uY2F0TWF0cml4KCk7CisgICAgdm9pZCBIYW5kbGVfU2V0Q29sb3JTcGFjZV9GaWxsKCk7CisgICAgdm9pZCBIYW5kbGVfU2V0Q29sb3JTcGFjZV9TdHJva2UoKTsKKyAgICB2b2lkIEhhbmRsZV9TZXREYXNoKCk7CisgICAgdm9pZCBIYW5kbGVfU2V0Q2hhcldpZHRoKCk7CisgICAgdm9pZCBIYW5kbGVfU2V0Q2FjaGVkRGV2aWNlKCk7CisgICAgdm9pZCBIYW5kbGVfRXhlY3V0ZVhPYmplY3QoKTsKKyAgICB2b2lkIEhhbmRsZV9NYXJrUGxhY2VfRGljdGlvbmFyeSgpOworICAgIHZvaWQgSGFuZGxlX0VuZEltYWdlKCk7CisgICAgdm9pZCBIYW5kbGVfRW5kTWFya2VkQ29udGVudCgpOworICAgIHZvaWQgSGFuZGxlX0VuZFRleHQoKTsKKyAgICB2b2lkIEhhbmRsZV9FbmRTZWN0aW9uVW5kZWZpbmVkKCk7CisgICAgdm9pZCBIYW5kbGVfRmlsbFBhdGgoKTsKKyAgICB2b2lkIEhhbmRsZV9GaWxsUGF0aE9sZCgpOworICAgIHZvaWQgSGFuZGxlX0VPRmlsbFBhdGgoKTsKKyAgICB2b2lkIEhhbmRsZV9TZXRHcmF5X0ZpbGwoKTsKKyAgICB2b2lkIEhhbmRsZV9TZXRHcmF5X1N0cm9rZSgpOworICAgIHZvaWQgSGFuZGxlX1NldEV4dGVuZEdyYXBoU3RhdGUoKTsKKyAgICB2b2lkIEhhbmRsZV9DbG9zZVBhdGgoKTsKKyAgICB2b2lkIEhhbmRsZV9TZXRGbGF0KCk7CisgICAgdm9pZCBIYW5kbGVfQmVnaW5JbWFnZURhdGEoKTsKKyAgICB2b2lkIEhhbmRsZV9TZXRMaW5lSm9pbigpOworICAgIHZvaWQgSGFuZGxlX1NldExpbmVDYXAoKTsKKyAgICB2b2lkIEhhbmRsZV9TZXRDTVlLQ29sb3JfRmlsbCgpOworICAgIHZvaWQgSGFuZGxlX1NldENNWUtDb2xvcl9TdHJva2UoKTsKKyAgICB2b2lkIEhhbmRsZV9MaW5lVG8oKTsKKyAgICB2b2lkIEhhbmRsZV9Nb3ZlVG8oKTsKKyAgICB2b2lkIEhhbmRsZV9TZXRNaXRlckxpbWl0KCk7CisgICAgdm9pZCBIYW5kbGVfTWFya1BsYWNlKCk7CisgICAgdm9pZCBIYW5kbGVfRW5kUGF0aCgpOworICAgIHZvaWQgSGFuZGxlX1NhdmVHcmFwaFN0YXRlKCk7CisgICAgdm9pZCBIYW5kbGVfUmVzdG9yZUdyYXBoU3RhdGUoKTsKKyAgICB2b2lkIEhhbmRsZV9SZWN0YW5nbGUoKTsKKyAgICB2b2lkIEhhbmRsZV9TZXRSR0JDb2xvcl9GaWxsKCk7CisgICAgdm9pZCBIYW5kbGVfU2V0UkdCQ29sb3JfU3Ryb2tlKCk7CisgICAgdm9pZCBIYW5kbGVfU2V0UmVuZGVySW50ZW50KCk7CisgICAgdm9pZCBIYW5kbGVfQ2xvc2VTdHJva2VQYXRoKCk7CisgICAgdm9pZCBIYW5kbGVfU3Ryb2tlUGF0aCgpOworICAgIHZvaWQgSGFuZGxlX1NldENvbG9yX0ZpbGwoKTsKKyAgICB2b2lkIEhhbmRsZV9TZXRDb2xvcl9TdHJva2UoKTsKKyAgICB2b2lkIEhhbmRsZV9TZXRDb2xvclBTX0ZpbGwoKTsKKyAgICB2b2lkIEhhbmRsZV9TZXRDb2xvclBTX1N0cm9rZSgpOworICAgIHZvaWQgSGFuZGxlX1NoYWRlRmlsbCgpOworICAgIHZvaWQgSGFuZGxlX1NldENoYXJTcGFjZSgpOworICAgIHZvaWQgSGFuZGxlX01vdmVUZXh0UG9pbnQoKTsKKyAgICB2b2lkIEhhbmRsZV9Nb3ZlVGV4dFBvaW50X1NldExlYWRpbmcoKTsKKyAgICB2b2lkIEhhbmRsZV9TZXRGb250KCk7CisgICAgdm9pZCBIYW5kbGVfU2hvd1RleHQoKTsKKyAgICB2b2lkIEhhbmRsZV9TaG93VGV4dF9Qb3NpdGlvbmluZygpOworICAgIHZvaWQgSGFuZGxlX1NldFRleHRMZWFkaW5nKCk7CisgICAgdm9pZCBIYW5kbGVfU2V0VGV4dE1hdHJpeCgpOworICAgIHZvaWQgSGFuZGxlX1NldFRleHRSZW5kZXJNb2RlKCk7CisgICAgdm9pZCBIYW5kbGVfU2V0VGV4dFJpc2UoKTsKKyAgICB2b2lkIEhhbmRsZV9TZXRXb3JkU3BhY2UoKTsKKyAgICB2b2lkIEhhbmRsZV9TZXRIb3J6U2NhbGUoKTsKKyAgICB2b2lkIEhhbmRsZV9Nb3ZlVG9OZXh0TGluZSgpOworICAgIHZvaWQgSGFuZGxlX0N1cnZlVG9fMjMoKTsKKyAgICB2b2lkIEhhbmRsZV9TZXRMaW5lV2lkdGgoKTsKKyAgICB2b2lkIEhhbmRsZV9DbGlwKCk7CisgICAgdm9pZCBIYW5kbGVfRU9DbGlwKCk7CisgICAgdm9pZCBIYW5kbGVfQ3VydmVUb18xMygpOworICAgIHZvaWQgSGFuZGxlX05leHRMaW5lU2hvd1RleHQoKTsKKyAgICB2b2lkIEhhbmRsZV9OZXh0TGluZVNob3dUZXh0X1NwYWNlKCk7CisgICAgdm9pZCBIYW5kbGVfSW52YWxpZCgpOworfTsKK2NsYXNzIENQREZfQ29udGVudFBhcnNlciA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ1BERl9Db250ZW50UGFyc2VyKCk7CisgICAgfkNQREZfQ29udGVudFBhcnNlcigpOworICAgIHR5cGVkZWYgZW51bSB7IFJlYWR5LCBUb0JlQ29udGludWVkLCBEb25lIH0gUGFyc2VTdGF0dXM7CisgICAgUGFyc2VTdGF0dXMJCQlHZXRTdGF0dXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fU3RhdHVzOworICAgIH0KKyAgICB2b2lkCQkJCVN0YXJ0KENQREZfUGFnZSogcFBhZ2UsIENQREZfUGFyc2VPcHRpb25zKiBwT3B0aW9ucyk7CisgICAgdm9pZAkJCQlTdGFydChDUERGX0Zvcm0qIHBGb3JtLCBDUERGX0FsbFN0YXRlcyogcEdyYXBoaWNTdGF0ZXMsIENGWF9BZmZpbmVNYXRyaXgqIHBQYXJlbnRNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX1R5cGUzQ2hhciogcFR5cGUzQ2hhciwgQ1BERl9QYXJzZU9wdGlvbnMqIHBPcHRpb25zLCBpbnQgbGV2ZWwpOworICAgIHZvaWQJCQkJQ29udGludWUoSUZYX1BhdXNlKiBwUGF1c2UpOworICAgIGludAkJCQkJRXN0aW1hdGVQcm9ncmVzcygpOworcHJvdGVjdGVkOgorICAgIHZvaWQJCQkJQ2xlYXIoKTsKKyAgICBQYXJzZVN0YXR1cwkJCW1fU3RhdHVzOworICAgIENQREZfUGFnZU9iamVjdHMqCW1fcE9iamVjdHM7CisgICAgRlhfQk9PTAkJCQltX2JGb3JtOworICAgIENQREZfUGFyc2VPcHRpb25zCW1fT3B0aW9uczsKKyAgICBDUERGX1R5cGUzQ2hhcioJCW1fcFR5cGUzQ2hhcjsKKyAgICBpbnQJCQkJCW1fSW50ZXJuYWxTdGFnZTsKKyAgICBDUERGX1N0cmVhbUFjYyoJCW1fcFNpbmdsZVN0cmVhbTsKKyAgICBDUERGX1N0cmVhbUFjYyoqCW1fcFN0cmVhbUFycmF5OworICAgIEZYX0RXT1JECQkJbV9uU3RyZWFtczsKKyAgICBGWF9MUEJZVEUJCQltX3BEYXRhOworICAgIEZYX0RXT1JECQkJbV9TaXplOworICAgIGNsYXNzIENQREZfU3RyZWFtQ29udGVudFBhcnNlcioJbV9wUGFyc2VyOworICAgIEZYX0RXT1JECQkJbV9DdXJyZW50T2Zmc2V0OworICAgIENQREZfU3RyZWFtRmlsdGVyKgltX3BTdHJlYW1GaWx0ZXI7Cit9OworY2xhc3MgQ1BERl9BbGxTdGF0ZXMgOiBwdWJsaWMgQ1BERl9HcmFwaGljU3RhdGVzCit7CitwdWJsaWM6CisgICAgQ1BERl9BbGxTdGF0ZXMoKTsKKyAgICB+Q1BERl9BbGxTdGF0ZXMoKTsKKyAgICB2b2lkCUNvcHkoY29uc3QgQ1BERl9BbGxTdGF0ZXMmIHNyYyk7CisgICAgdm9pZAlQcm9jZXNzRXh0R1MoQ1BERl9EaWN0aW9uYXJ5KiBwR1MsIENQREZfU3RyZWFtQ29udGVudFBhcnNlciogcFBhcnNlcik7CisgICAgdm9pZAlTZXRMaW5lRGFzaChDUERGX0FycmF5KiwgRlhfRkxPQVQsIEZYX0ZMT0FUIHNjYWxlKTsKKyAgICBDRlhfQWZmaW5lTWF0cml4CQltX1RleHRNYXRyaXgsIG1fQ1RNLCBtX1BhcmVudE1hdHJpeDsKKyAgICBGWF9GTE9BVAkJCQltX1RleHRYLCBtX1RleHRZLCBtX1RleHRMaW5lWCwgbV9UZXh0TGluZVk7CisgICAgRlhfRkxPQVQJCQkJbV9UZXh0TGVhZGluZywgbV9UZXh0UmlzZSwgbV9UZXh0SG9yelNjYWxlOworfTsKK3RlbXBsYXRlIDxjbGFzcyBPYmpDbGFzcz4gY2xhc3MgQ1BERl9Db3VudGVkT2JqZWN0IDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBPYmpDbGFzcwltX09iajsKKyAgICBGWF9EV09SRAltX25Db3VudDsKK307Cit0eXBlZGVmIENGWF9NYXBQdHJUZW1wbGF0ZTxDUERGX0RpY3Rpb25hcnkqLCBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9Gb250Kj4qPgkJQ1BERl9Gb250TWFwOwordHlwZWRlZiBDRlhfTWFwUHRyVGVtcGxhdGU8Q1BERl9PYmplY3QqLCBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9Db2xvclNwYWNlKj4qPgkJQ1BERl9Db2xvclNwYWNlTWFwOwordHlwZWRlZiBDRlhfTWFwUHRyVGVtcGxhdGU8Q1BERl9PYmplY3QqLCBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9QYXR0ZXJuKj4qPgkJQ1BERl9QYXR0ZXJuTWFwOwordHlwZWRlZiBDRlhfTWFwUHRyVGVtcGxhdGU8RlhfRFdPUkQsIENQREZfQ291bnRlZE9iamVjdDxDUERGX0ltYWdlKj4qPgkJCQlDUERGX0ltYWdlTWFwOwordHlwZWRlZiBDRlhfTWFwUHRyVGVtcGxhdGU8Q1BERl9TdHJlYW0qLCBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9JY2NQcm9maWxlKj4qPgkJQ1BERl9JY2NQcm9maWxlTWFwOwordHlwZWRlZiBDRlhfTWFwUHRyVGVtcGxhdGU8Q1BERl9TdHJlYW0qLCBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9TdHJlYW1BY2MqPio+CQlDUERGX0ZvbnRGaWxlTWFwOwordGVtcGxhdGUgPGNsYXNzIEtleVR5cGUsIGNsYXNzIFZhbHVlVHlwZT4KK0tleVR5cGUgUERGX0RvY1BhZ2VEYXRhX0ZpbmRWYWx1ZShjb25zdCBDRlhfTWFwUHRyVGVtcGxhdGU8S2V5VHlwZSwgQ1BERl9Db3VudGVkT2JqZWN0PFZhbHVlVHlwZT4qPiAmbWFwLCBWYWx1ZVR5cGUgZmluZFZhbHVlLCBDUERGX0NvdW50ZWRPYmplY3Q8VmFsdWVUeXBlPiomIGZpbmREYXRhKQoreworICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1hcC5HZXRTdGFydFBvc2l0aW9uKCk7CisgICAgd2hpbGUgKHBvcykgeworICAgICAgICBLZXlUeXBlIGZpbmRLZXk7CisgICAgICAgIG1hcC5HZXROZXh0QXNzb2MocG9zLCBmaW5kS2V5LCBmaW5kRGF0YSk7CisgICAgICAgIGlmIChmaW5kRGF0YS0+bV9PYmogPT0gZmluZFZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm4gZmluZEtleTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmaW5kRGF0YSA9IE5VTEw7CisgICAgcmV0dXJuIChLZXlUeXBlKShGWF9VSU5UUFRSKU5VTEw7Cit9Cit0ZW1wbGF0ZSA8Y2xhc3MgS2V5VHlwZSwgY2xhc3MgVmFsdWVUeXBlPgorRlhfQk9PTCBQREZfRG9jUGFnZURhdGFfUmVsZWFzZShDRlhfTWFwUHRyVGVtcGxhdGU8S2V5VHlwZSwgQ1BERl9Db3VudGVkT2JqZWN0PFZhbHVlVHlwZT4qPiAmbWFwLCBLZXlUeXBlIGZpbmRLZXksIFZhbHVlVHlwZSBmaW5kVmFsdWUsIEZYX0JPT0wgYkZvcmNlID0gRkFMU0UpCit7CisgICAgaWYgKCFmaW5kS2V5ICYmICFmaW5kVmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDUERGX0NvdW50ZWRPYmplY3Q8VmFsdWVUeXBlPiogZmluZERhdGEgPSBOVUxMOworICAgIGlmICghZmluZEtleSkgeworICAgICAgICBmaW5kS2V5ID0gUERGX0RvY1BhZ2VEYXRhX0ZpbmRWYWx1ZTxLZXlUeXBlLCBWYWx1ZVR5cGU+KG1hcCwgZmluZFZhbHVlLCBmaW5kRGF0YSk7CisgICAgfSBlbHNlIGlmICghbWFwLkxvb2t1cChmaW5kS2V5LCBmaW5kRGF0YSkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoZmluZERhdGEgJiYgKCgtLSBmaW5kRGF0YS0+bV9uQ291bnQpID09IDAgfHwgYkZvcmNlKSkgeworICAgICAgICBkZWxldGUgZmluZERhdGEtPm1fT2JqOworICAgICAgICBkZWxldGUgZmluZERhdGE7CisgICAgICAgIG1hcC5SZW1vdmVLZXkoZmluZEtleSk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitjbGFzcyBDUERGX0RvY1BhZ2VEYXRhIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBDUERGX0RvY1BhZ2VEYXRhKENQREZfRG9jdW1lbnQgKnBQREZEb2MpOworICAgIH5DUERGX0RvY1BhZ2VEYXRhKCk7CisgICAgdm9pZAkJCQkJQ2xlYXIoRlhfQk9PTCBiUmVsZWFzZSA9IEZBTFNFKTsKKyAgICBDUERGX0ZvbnQqCQkJCUdldEZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9udERpY3QsIEZYX0JPT0wgZmluZE9ubHkpOworICAgIENQREZfRm9udCoJCQkJR2V0U3RhbmRhcmRGb250KEZYX0JTVFIgZm9udE5hbWUsIENQREZfRm9udEVuY29kaW5nKiBwRW5jb2RpbmcpOworICAgIHZvaWQJCQkJCVJlbGVhc2VGb250KENQREZfRGljdGlvbmFyeSogcEZvbnREaWN0KTsKKyAgICBDUERGX0NvbG9yU3BhY2UqCQlHZXRDb2xvclNwYWNlKENQREZfT2JqZWN0KiBwQ1NPYmosIENQREZfRGljdGlvbmFyeSogcFJlc291cmNlcyk7CisgICAgQ1BERl9Db2xvclNwYWNlKgkJR2V0Q29waWVkQ29sb3JTcGFjZShDUERGX09iamVjdCogcENTT2JqKTsKKyAgICB2b2lkCQkJCQlSZWxlYXNlQ29sb3JTcGFjZShDUERGX09iamVjdCogcENvbG9yU3BhY2UpOworICAgIENQREZfUGF0dGVybioJCQlHZXRQYXR0ZXJuKENQREZfT2JqZWN0KiBwUGF0dGVybk9iaiwgRlhfQk9PTCBiU2hhZGluZywgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogbWF0cml4KTsKKyAgICB2b2lkCQkJCQlSZWxlYXNlUGF0dGVybihDUERGX09iamVjdCogcFBhdHRlcm5PYmopOworICAgIENQREZfSW1hZ2UqCQkJCUdldEltYWdlKENQREZfT2JqZWN0KiBwSW1hZ2VTdHJlYW0pOworICAgIHZvaWQJCQkJCVJlbGVhc2VJbWFnZShDUERGX09iamVjdCogcEltYWdlU3RyZWFtKTsKKyAgICBDUERGX0ljY1Byb2ZpbGUqCQlHZXRJY2NQcm9maWxlKENQREZfU3RyZWFtKiBwSWNjUHJvZmlsZVN0cmVhbSwgRlhfSU5UMzIgbkNvbXBvbmVudHMpOworICAgIHZvaWQJCQkJCVJlbGVhc2VJY2NQcm9maWxlKENQREZfU3RyZWFtKiBwSWNjUHJvZmlsZVN0cmVhbSwgQ1BERl9JY2NQcm9maWxlKiBwSWNjUHJvZmlsZSk7CisgICAgQ1BERl9TdHJlYW1BY2MqCQkJR2V0Rm9udEZpbGVTdHJlYW1BY2MoQ1BERl9TdHJlYW0qIHBGb250U3RyZWFtKTsKKyAgICB2b2lkCQkJCQlSZWxlYXNlRm9udEZpbGVTdHJlYW1BY2MoQ1BERl9TdHJlYW0qIHBGb250U3RyZWFtLCBGWF9CT09MIGJGb3JjZSA9IEZBTFNFKTsKKyAgICBDUERGX0RvY3VtZW50KgkJCW1fcFBERkRvYzsKKyAgICBDUERGX0ZvbnRNYXAJCQltX0ZvbnRNYXA7CisgICAgQ1BERl9Db2xvclNwYWNlTWFwCQltX0NvbG9yU3BhY2VNYXA7CisgICAgQ1BERl9QYXR0ZXJuTWFwCQkJbV9QYXR0ZXJuTWFwOworICAgIENQREZfSW1hZ2VNYXAJCQltX0ltYWdlTWFwOworICAgIENQREZfSWNjUHJvZmlsZU1hcAkJbV9JY2NQcm9maWxlTWFwOworICAgIENGWF9NYXBCeXRlU3RyaW5nVG9QdHIJbV9IYXNoUHJvZmlsZU1hcDsKKyAgICBDUERGX0ZvbnRGaWxlTWFwCQltX0ZvbnRGaWxlTWFwOworfTsKK2NsYXNzIENQREZfRnVuY3Rpb24gOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIHN0YXRpYyBDUERGX0Z1bmN0aW9uKglMb2FkKENQREZfT2JqZWN0KiBwRnVuY09iaik7CisgICAgdmlydHVhbCB+Q1BERl9GdW5jdGlvbigpOworICAgIEZYX0JPT0wJCUNhbGwoRlhfRkxPQVQqIGlucHV0cywgaW50IG5pbnB1dHMsIEZYX0ZMT0FUKiByZXN1bHRzLCBpbnQmIG5yZXN1bHRzKSBjb25zdDsKKyAgICBpbnQJCQlDb3VudElucHV0cygpCisgICAgeworICAgICAgICByZXR1cm4gbV9uSW5wdXRzOworICAgIH0KKyAgICBpbnQJCQlDb3VudE91dHB1dHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbk91dHB1dHM7CisgICAgfQorcHJvdGVjdGVkOgorICAgIENQREZfRnVuY3Rpb24oKTsKKyAgICBpbnQJCQltX25JbnB1dHMsIG1fbk91dHB1dHM7CisgICAgRlhfRkxPQVQqCW1fcERvbWFpbnM7CisgICAgRlhfRkxPQVQqCW1fcFJhbmdlczsKKyAgICBGWF9CT09MCQlJbml0KENQREZfT2JqZWN0KiBwT2JqKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJdl9Jbml0KENQREZfT2JqZWN0KiBwT2JqKSA9IDA7CisgICAgdmlydHVhbCBGWF9CT09MCXZfQ2FsbChGWF9GTE9BVCogaW5wdXRzLCBGWF9GTE9BVCogcmVzdWx0cykgY29uc3QgPSAwOworfTsKK2NsYXNzIENQREZfSWNjUHJvZmlsZSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ1BERl9JY2NQcm9maWxlKEZYX0xQQ0JZVEUgcERhdGEsIEZYX0RXT1JEIGR3U2l6ZSwgaW50IG5Db21wb25lbnRzKTsKKyAgICB+Q1BERl9JY2NQcm9maWxlKCk7CisgICAgRlhfQk9PTAkJCQkJbV9ic1JHQjsKKyAgICBGWF9MUFZPSUQJCQkJbV9wVHJhbnNmb3JtOworfTsKK2NsYXNzIENQREZfRGV2aWNlQ1MgOiBwdWJsaWMgQ1BERl9Db2xvclNwYWNlCit7CitwdWJsaWM6CisgICAgQ1BERl9EZXZpY2VDUyhpbnQgZmFtaWx5KTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJR2V0UkdCKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCYgUiwgRlhfRkxPQVQmIEcsIEZYX0ZMT0FUJiBCKSBjb25zdDsKKyAgICBGWF9CT09MCVNldFJHQihGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQgUiwgRlhfRkxPQVQgRywgRlhfRkxPQVQgQikgY29uc3Q7CisgICAgRlhfQk9PTAl2X0dldENNWUsoRlhfRkxPQVQqIHBCdWYsIEZYX0ZMT0FUJiBjLCBGWF9GTE9BVCYgbSwgRlhfRkxPQVQmIHksIEZYX0ZMT0FUJiBrKSBjb25zdDsKKyAgICBGWF9CT09MCXZfU2V0Q01ZSyhGWF9GTE9BVCogcEJ1ZiwgRlhfRkxPQVQgYywgRlhfRkxPQVQgbSwgRlhfRkxPQVQgeSwgRlhfRkxPQVQgaykgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkCVRyYW5zbGF0ZUltYWdlTGluZShGWF9MUEJZVEUgcERlc3RCdWYsIEZYX0xQQ0JZVEUgcFNyY0J1ZiwgaW50IHBpeGVscywgaW50IGltYWdlX3dpZHRoLCBpbnQgaW1hZ2VfaGVpZ2h0LCBGWF9CT09MIGJUcmFuc01hc2sgPSBGQUxTRSkgY29uc3Q7Cit9OworY2xhc3MgQ1BERl9QYXR0ZXJuQ1MgOiBwdWJsaWMgQ1BERl9Db2xvclNwYWNlCit7CitwdWJsaWM6CisgICAgQ1BERl9QYXR0ZXJuQ1MoKTsKKyAgICB+Q1BERl9QYXR0ZXJuQ1MoKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCXZfTG9hZChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0FycmF5KiBwQXJyYXkpOworICAgIHZpcnR1YWwgRlhfQk9PTAkJR2V0UkdCKEZYX0ZMT0FUKiBwQnVmLCBGWF9GTE9BVCYgUiwgRlhfRkxPQVQmIEcsIEZYX0ZMT0FUJiBCKSBjb25zdDsKKyAgICB2aXJ0dWFsIENQREZfQ29sb3JTcGFjZSoJR2V0QmFzZUNTKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BCYXNlQ1M7CisgICAgfQorICAgIENQREZfQ29sb3JTcGFjZSoJbV9wQmFzZUNTOworfTsKKyNkZWZpbmUJTUFYX1BBR0VfT0JKRUNUU19VTklGWV9OQU1JTkcJCQkJNDA5NgorY2xhc3MgQ1BERl9SZXNvdXJjZU5hbWluZyA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgc3RydWN0IF9OYW1pbmdTdGF0ZSA6IHB1YmxpYyBDRlhfT2JqZWN0IHsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcJbV9QcmVmaXg7CisgICAgICAgIGludAkJCQltX25JbmRleDsKKyAgICB9OworICAgIH5DUERGX1Jlc291cmNlTmFtaW5nKCk7CisgICAgQ0ZYX0J5dGVTdHJpbmcJCUdldE5hbWUoY29uc3QgQ1BERl9EaWN0aW9uYXJ5KiBwUmVzTGlzdCwgRlhfTFBDU1RSIHN6VHlwZSk7Citwcm90ZWN0ZWQ6CisgICAgQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0cgltX05hbWluZ0NhY2hlOworfTsKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYXJzZXIvZmlsdGVyc19pbnQuaCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYXJzZXIvZmlsdGVyc19pbnQuaAppbmRleCBmYTdkN2RiLi5kMWRlZGM0IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFyc2VyL2ZpbHRlcnNfaW50LmgKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhcnNlci9maWx0ZXJzX2ludC5oCkBAIC0xLDExOSArMSwxMTkgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLWNsYXNzIENQREZfRGVjcnlwdEZpbHRlciA6IHB1YmxpYyBDRlhfRGF0YUZpbHRlcg0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfRGVjcnlwdEZpbHRlcihDUERGX0NyeXB0b0hhbmRsZXIqIHBDcnlwdG9IYW5kbGVyLCBGWF9EV09SRCBvYmpudW0sIEZYX0RXT1JEIGdlbm51bSk7DQotICAgIHZpcnR1YWwgfkNQREZfRGVjcnlwdEZpbHRlcigpOw0KLSAgICB2aXJ0dWFsCXZvaWQJdl9GaWx0ZXJJbihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1Zik7DQotICAgIHZpcnR1YWwgdm9pZAl2X0ZpbHRlckZpbmlzaChDRlhfQmluYXJ5QnVmJiBkZXN0X2J1Zik7DQotICAgIENQREZfQ3J5cHRvSGFuZGxlcioJbV9wQ3J5cHRvSGFuZGxlcjsNCi0gICAgRlhfTFBWT0lECQltX3BDb250ZXh0Ow0KLSAgICBGWF9EV09SRAkJbV9PYmpOdW0sIG1fR2VuTnVtOw0KLX07DQotY2xhc3MgQ1BERl9GbGF0ZUZpbHRlciA6IHB1YmxpYyBDRlhfRGF0YUZpbHRlcg0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfRmxhdGVGaWx0ZXIoKTsNCi0gICAgdmlydHVhbCB+Q1BERl9GbGF0ZUZpbHRlcigpOw0KLSAgICB2aXJ0dWFsCXZvaWQJdl9GaWx0ZXJJbihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1Zik7DQotICAgIHZpcnR1YWwgdm9pZAl2X0ZpbHRlckZpbmlzaChDRlhfQmluYXJ5QnVmJiBkZXN0X2J1Zikge30NCi0gICAgdm9pZCoJCQltX3BDb250ZXh0Ow0KLSAgICBGWF9CWVRFCQkJbV9EZXN0QnVmZmVyW0ZQREZfRklMVEVSX0JVRkZFUl9TSVpFXTsNCi19Ow0KLWNsYXNzIENQREZfTHp3RmlsdGVyIDogcHVibGljIENGWF9EYXRhRmlsdGVyDQotew0KLXB1YmxpYzoNCi0gICAgQ1BERl9MendGaWx0ZXIoRlhfQk9PTCBiRWFybHlDaGFuZ2UpOw0KLSAgICB2aXJ0dWFsIH5DUERGX0x6d0ZpbHRlcigpIHt9DQotICAgIHZpcnR1YWwJdm9pZAl2X0ZpbHRlckluKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKTsNCi0gICAgdmlydHVhbCB2b2lkCXZfRmlsdGVyRmluaXNoKENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKSB7fQ0KLSAgICBGWF9CT09MCQkJbV9iRWFybHlDaGFuZ2U7DQotICAgIEZYX0RXT1JECQltX0NvZGVBcnJheVs1MDIxXTsNCi0gICAgRlhfRFdPUkQJCW1fbkNvZGVzOw0KLSAgICBGWF9EV09SRAkJbV9Db2RlTGVuOw0KLSAgICBGWF9EV09SRAkJbV9PbGRDb2RlOw0KLSAgICBGWF9CWVRFCQkJbV9MYXN0Q2hhcjsNCi0gICAgRlhfRFdPUkQJCW1fbkxlZnRCaXRzLCBtX0xlZnRCaXRzOw0KLSAgICBGWF9CWVRFCQkJbV9EZWNvZGVTdGFja1s0MDAwXTsNCi0gICAgRlhfRFdPUkQJCW1fU3RhY2tMZW47DQotICAgIHZvaWQJCQlBZGRDb2RlKEZYX0RXT1JEIHByZWZpeF9jb2RlLCBGWF9CWVRFIGFwcGVuZF9jaGFyKTsNCi0gICAgdm9pZAkJCURlY29kZVN0cmluZyhGWF9EV09SRCBjb2RlKTsNCi19Ow0KLWNsYXNzIENQREZfUHJlZGljdG9yRmlsdGVyIDogcHVibGljIENGWF9EYXRhRmlsdGVyDQotew0KLXB1YmxpYzoNCi0gICAgQ1BERl9QcmVkaWN0b3JGaWx0ZXIoaW50IHByZWRpY3RvciwgaW50IGNvbG9ycywgaW50IGJwYywgaW50IGNvbHMpOw0KLSAgICB2aXJ0dWFsIH5DUERGX1ByZWRpY3RvckZpbHRlcigpOw0KLSAgICB2aXJ0dWFsCXZvaWQJdl9GaWx0ZXJJbihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1Zik7DQotICAgIHZpcnR1YWwgdm9pZAl2X0ZpbHRlckZpbmlzaChDRlhfQmluYXJ5QnVmJiBkZXN0X2J1Zikge30NCi0gICAgRlhfQk9PTAkJCW1fYlRpZmY7DQotICAgIEZYX0RXT1JECQltX1BpdGNoLCBtX0JwcDsNCi0gICAgRlhfTFBCWVRFCQltX3BSZWZMaW5lLCBtX3BDdXJMaW5lOw0KLSAgICBGWF9EV09SRAkJbV9pTGluZSwgbV9MaW5lSW5TaXplOw0KLX07DQotY2xhc3MgQ1BERl9Bc2NpaUhleEZpbHRlciA6IHB1YmxpYyBDRlhfRGF0YUZpbHRlcg0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfQXNjaWlIZXhGaWx0ZXIoKTsNCi0gICAgdmlydHVhbCB+Q1BERl9Bc2NpaUhleEZpbHRlcigpIHt9DQotICAgIHZpcnR1YWwJdm9pZAl2X0ZpbHRlckluKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKTsNCi0gICAgdmlydHVhbCB2b2lkCXZfRmlsdGVyRmluaXNoKENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKSB7fQ0KLSAgICBpbnQJCQkJbV9TdGF0ZTsNCi0gICAgaW50CQkJCW1fRmlyc3REaWdpdDsNCi19Ow0KLWNsYXNzIENQREZfQXNjaWk4NUZpbHRlciA6IHB1YmxpYyBDRlhfRGF0YUZpbHRlcg0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfQXNjaWk4NUZpbHRlcigpOw0KLSAgICB2aXJ0dWFsIH5DUERGX0FzY2lpODVGaWx0ZXIoKSB7fQ0KLSAgICB2aXJ0dWFsCXZvaWQJdl9GaWx0ZXJJbihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1Zik7DQotICAgIHZpcnR1YWwgdm9pZAl2X0ZpbHRlckZpbmlzaChDRlhfQmluYXJ5QnVmJiBkZXN0X2J1Zikge30NCi0gICAgaW50CQkJCW1fU3RhdGU7DQotICAgIGludAkJCQltX0NoYXJDb3VudDsNCi0gICAgRlhfRFdPUkQJCW1fQ3VyRFdvcmQ7DQotfTsNCi1jbGFzcyBDUERGX1J1bkxlbkZpbHRlciA6IHB1YmxpYyBDRlhfRGF0YUZpbHRlcg0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfUnVuTGVuRmlsdGVyKCk7DQotICAgIHZpcnR1YWwgfkNQREZfUnVuTGVuRmlsdGVyKCkge30NCi0gICAgdmlydHVhbAl2b2lkCXZfRmlsdGVySW4oRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpOw0KLSAgICB2aXJ0dWFsIHZvaWQJdl9GaWx0ZXJGaW5pc2goQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpIHt9DQotICAgIGludAkJCQltX1N0YXRlOw0KLSAgICBGWF9EV09SRAkJbV9Db3VudDsNCi19Ow0KLWNsYXNzIENQREZfSnBlZ0ZpbHRlciA6IHB1YmxpYyBDRlhfRGF0YUZpbHRlcg0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfSnBlZ0ZpbHRlcigpOw0KLSAgICB2aXJ0dWFsIH5DUERGX0pwZWdGaWx0ZXIoKTsNCi0gICAgdmlydHVhbAl2b2lkCXZfRmlsdGVySW4oRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpOw0KLSAgICB2aXJ0dWFsIHZvaWQJdl9GaWx0ZXJGaW5pc2goQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpIHt9DQotICAgIHZvaWQqCQkJbV9wQ29udGV4dDsNCi0gICAgQ0ZYX0JpbmFyeUJ1ZgltX0lucHV0QnVmOw0KLSAgICBGWF9MUEJZVEUJCW1fcFNjYW5saW5lOw0KLSAgICBpbnQJCQkJbV9QaXRjaCwgbV9IZWlnaHQsIG1fV2lkdGgsIG1fbkNvbXBzLCBtX2lMaW5lOw0KLSAgICBGWF9CT09MCQkJbV9iR290SGVhZGVyOw0KLX07DQotY2xhc3MgQ1BERl9GYXhGaWx0ZXIgOiBwdWJsaWMgQ0ZYX0RhdGFGaWx0ZXINCi17DQotcHVibGljOg0KLSAgICBDUERGX0ZheEZpbHRlcigpOw0KLSAgICB2aXJ0dWFsIH5DUERGX0ZheEZpbHRlcigpOw0KLSAgICBGWF9CT09MCQkJSW5pdGlhbGl6ZShpbnQgRW5jb2RpbmcsIGludCBiRW5kT2ZMaW5lLCBpbnQgYkJ5dGVBbGlnbiwgaW50IGJCbGFjaywgaW50IG5Sb3dzLCBpbnQgbkNvbHVtbnMpOw0KLSAgICB2aXJ0dWFsCXZvaWQJdl9GaWx0ZXJJbihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1Zik7DQotICAgIHZpcnR1YWwgdm9pZAl2X0ZpbHRlckZpbmlzaChDRlhfQmluYXJ5QnVmJiBkZXN0X2J1Zik7DQotICAgIGludAkJCQltX0VuY29kaW5nLCBtX2JFbmRPZkxpbmUsIG1fYkJ5dGVBbGlnbiwgbV9iQmxhY2s7DQotICAgIGludAkJCQltX25Sb3dzLCBtX25Db2x1bW5zLCBtX1BpdGNoLCBtX2lSb3c7DQotICAgIEZYX0xQQllURQkJbV9wU2NhbmxpbmVCdWYsIG1fcFJlZkJ1ZjsNCi0gICAgQ0ZYX0JpbmFyeUJ1ZgltX0lucHV0QnVmOw0KLSAgICBpbnQJCQkJbV9JbnB1dEJpdFBvczsNCi0gICAgdm9pZAkJCVByb2Nlc3NEYXRhKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCYgYml0cG9zLCBGWF9CT09MIGJGaW5pc2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1Zik7DQotICAgIEZYX0JPT0wJCQlSZWFkTGluZShGWF9MUENCWVRFIHNyY19idWYsIGludCBiaXRzaXplLCBpbnQmIGJpdHBvcyk7DQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitjbGFzcyBDUERGX0RlY3J5cHRGaWx0ZXIgOiBwdWJsaWMgQ0ZYX0RhdGFGaWx0ZXIKK3sKK3B1YmxpYzoKKyAgICBDUERGX0RlY3J5cHRGaWx0ZXIoQ1BERl9DcnlwdG9IYW5kbGVyKiBwQ3J5cHRvSGFuZGxlciwgRlhfRFdPUkQgb2JqbnVtLCBGWF9EV09SRCBnZW5udW0pOworICAgIHZpcnR1YWwgfkNQREZfRGVjcnlwdEZpbHRlcigpOworICAgIHZpcnR1YWwJdm9pZAl2X0ZpbHRlckluKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKTsKKyAgICB2aXJ0dWFsIHZvaWQJdl9GaWx0ZXJGaW5pc2goQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpOworICAgIENQREZfQ3J5cHRvSGFuZGxlcioJbV9wQ3J5cHRvSGFuZGxlcjsKKyAgICBGWF9MUFZPSUQJCW1fcENvbnRleHQ7CisgICAgRlhfRFdPUkQJCW1fT2JqTnVtLCBtX0dlbk51bTsKK307CitjbGFzcyBDUERGX0ZsYXRlRmlsdGVyIDogcHVibGljIENGWF9EYXRhRmlsdGVyCit7CitwdWJsaWM6CisgICAgQ1BERl9GbGF0ZUZpbHRlcigpOworICAgIHZpcnR1YWwgfkNQREZfRmxhdGVGaWx0ZXIoKTsKKyAgICB2aXJ0dWFsCXZvaWQJdl9GaWx0ZXJJbihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1Zik7CisgICAgdmlydHVhbCB2b2lkCXZfRmlsdGVyRmluaXNoKENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKSB7fQorICAgIHZvaWQqCQkJbV9wQ29udGV4dDsKKyAgICBGWF9CWVRFCQkJbV9EZXN0QnVmZmVyW0ZQREZfRklMVEVSX0JVRkZFUl9TSVpFXTsKK307CitjbGFzcyBDUERGX0x6d0ZpbHRlciA6IHB1YmxpYyBDRlhfRGF0YUZpbHRlcgoreworcHVibGljOgorICAgIENQREZfTHp3RmlsdGVyKEZYX0JPT0wgYkVhcmx5Q2hhbmdlKTsKKyAgICB2aXJ0dWFsIH5DUERGX0x6d0ZpbHRlcigpIHt9CisgICAgdmlydHVhbAl2b2lkCXZfRmlsdGVySW4oRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpOworICAgIHZpcnR1YWwgdm9pZAl2X0ZpbHRlckZpbmlzaChDRlhfQmluYXJ5QnVmJiBkZXN0X2J1Zikge30KKyAgICBGWF9CT09MCQkJbV9iRWFybHlDaGFuZ2U7CisgICAgRlhfRFdPUkQJCW1fQ29kZUFycmF5WzUwMjFdOworICAgIEZYX0RXT1JECQltX25Db2RlczsKKyAgICBGWF9EV09SRAkJbV9Db2RlTGVuOworICAgIEZYX0RXT1JECQltX09sZENvZGU7CisgICAgRlhfQllURQkJCW1fTGFzdENoYXI7CisgICAgRlhfRFdPUkQJCW1fbkxlZnRCaXRzLCBtX0xlZnRCaXRzOworICAgIEZYX0JZVEUJCQltX0RlY29kZVN0YWNrWzQwMDBdOworICAgIEZYX0RXT1JECQltX1N0YWNrTGVuOworICAgIHZvaWQJCQlBZGRDb2RlKEZYX0RXT1JEIHByZWZpeF9jb2RlLCBGWF9CWVRFIGFwcGVuZF9jaGFyKTsKKyAgICB2b2lkCQkJRGVjb2RlU3RyaW5nKEZYX0RXT1JEIGNvZGUpOworfTsKK2NsYXNzIENQREZfUHJlZGljdG9yRmlsdGVyIDogcHVibGljIENGWF9EYXRhRmlsdGVyCit7CitwdWJsaWM6CisgICAgQ1BERl9QcmVkaWN0b3JGaWx0ZXIoaW50IHByZWRpY3RvciwgaW50IGNvbG9ycywgaW50IGJwYywgaW50IGNvbHMpOworICAgIHZpcnR1YWwgfkNQREZfUHJlZGljdG9yRmlsdGVyKCk7CisgICAgdmlydHVhbAl2b2lkCXZfRmlsdGVySW4oRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpOworICAgIHZpcnR1YWwgdm9pZAl2X0ZpbHRlckZpbmlzaChDRlhfQmluYXJ5QnVmJiBkZXN0X2J1Zikge30KKyAgICBGWF9CT09MCQkJbV9iVGlmZjsKKyAgICBGWF9EV09SRAkJbV9QaXRjaCwgbV9CcHA7CisgICAgRlhfTFBCWVRFCQltX3BSZWZMaW5lLCBtX3BDdXJMaW5lOworICAgIEZYX0RXT1JECQltX2lMaW5lLCBtX0xpbmVJblNpemU7Cit9OworY2xhc3MgQ1BERl9Bc2NpaUhleEZpbHRlciA6IHB1YmxpYyBDRlhfRGF0YUZpbHRlcgoreworcHVibGljOgorICAgIENQREZfQXNjaWlIZXhGaWx0ZXIoKTsKKyAgICB2aXJ0dWFsIH5DUERGX0FzY2lpSGV4RmlsdGVyKCkge30KKyAgICB2aXJ0dWFsCXZvaWQJdl9GaWx0ZXJJbihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1Zik7CisgICAgdmlydHVhbCB2b2lkCXZfRmlsdGVyRmluaXNoKENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKSB7fQorICAgIGludAkJCQltX1N0YXRlOworICAgIGludAkJCQltX0ZpcnN0RGlnaXQ7Cit9OworY2xhc3MgQ1BERl9Bc2NpaTg1RmlsdGVyIDogcHVibGljIENGWF9EYXRhRmlsdGVyCit7CitwdWJsaWM6CisgICAgQ1BERl9Bc2NpaTg1RmlsdGVyKCk7CisgICAgdmlydHVhbCB+Q1BERl9Bc2NpaTg1RmlsdGVyKCkge30KKyAgICB2aXJ0dWFsCXZvaWQJdl9GaWx0ZXJJbihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1Zik7CisgICAgdmlydHVhbCB2b2lkCXZfRmlsdGVyRmluaXNoKENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKSB7fQorICAgIGludAkJCQltX1N0YXRlOworICAgIGludAkJCQltX0NoYXJDb3VudDsKKyAgICBGWF9EV09SRAkJbV9DdXJEV29yZDsKK307CitjbGFzcyBDUERGX1J1bkxlbkZpbHRlciA6IHB1YmxpYyBDRlhfRGF0YUZpbHRlcgoreworcHVibGljOgorICAgIENQREZfUnVuTGVuRmlsdGVyKCk7CisgICAgdmlydHVhbCB+Q1BERl9SdW5MZW5GaWx0ZXIoKSB7fQorICAgIHZpcnR1YWwJdm9pZAl2X0ZpbHRlckluKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKTsKKyAgICB2aXJ0dWFsIHZvaWQJdl9GaWx0ZXJGaW5pc2goQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpIHt9CisgICAgaW50CQkJCW1fU3RhdGU7CisgICAgRlhfRFdPUkQJCW1fQ291bnQ7Cit9OworY2xhc3MgQ1BERl9KcGVnRmlsdGVyIDogcHVibGljIENGWF9EYXRhRmlsdGVyCit7CitwdWJsaWM6CisgICAgQ1BERl9KcGVnRmlsdGVyKCk7CisgICAgdmlydHVhbCB+Q1BERl9KcGVnRmlsdGVyKCk7CisgICAgdmlydHVhbAl2b2lkCXZfRmlsdGVySW4oRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpOworICAgIHZpcnR1YWwgdm9pZAl2X0ZpbHRlckZpbmlzaChDRlhfQmluYXJ5QnVmJiBkZXN0X2J1Zikge30KKyAgICB2b2lkKgkJCW1fcENvbnRleHQ7CisgICAgQ0ZYX0JpbmFyeUJ1ZgltX0lucHV0QnVmOworICAgIEZYX0xQQllURQkJbV9wU2NhbmxpbmU7CisgICAgaW50CQkJCW1fUGl0Y2gsIG1fSGVpZ2h0LCBtX1dpZHRoLCBtX25Db21wcywgbV9pTGluZTsKKyAgICBGWF9CT09MCQkJbV9iR290SGVhZGVyOworfTsKK2NsYXNzIENQREZfRmF4RmlsdGVyIDogcHVibGljIENGWF9EYXRhRmlsdGVyCit7CitwdWJsaWM6CisgICAgQ1BERl9GYXhGaWx0ZXIoKTsKKyAgICB2aXJ0dWFsIH5DUERGX0ZheEZpbHRlcigpOworICAgIEZYX0JPT0wJCQlJbml0aWFsaXplKGludCBFbmNvZGluZywgaW50IGJFbmRPZkxpbmUsIGludCBiQnl0ZUFsaWduLCBpbnQgYkJsYWNrLCBpbnQgblJvd3MsIGludCBuQ29sdW1ucyk7CisgICAgdmlydHVhbAl2b2lkCXZfRmlsdGVySW4oRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpOworICAgIHZpcnR1YWwgdm9pZAl2X0ZpbHRlckZpbmlzaChDRlhfQmluYXJ5QnVmJiBkZXN0X2J1Zik7CisgICAgaW50CQkJCW1fRW5jb2RpbmcsIG1fYkVuZE9mTGluZSwgbV9iQnl0ZUFsaWduLCBtX2JCbGFjazsKKyAgICBpbnQJCQkJbV9uUm93cywgbV9uQ29sdW1ucywgbV9QaXRjaCwgbV9pUm93OworICAgIEZYX0xQQllURQkJbV9wU2NhbmxpbmVCdWYsIG1fcFJlZkJ1ZjsKKyAgICBDRlhfQmluYXJ5QnVmCW1fSW5wdXRCdWY7CisgICAgaW50CQkJCW1fSW5wdXRCaXRQb3M7CisgICAgdm9pZAkJCVByb2Nlc3NEYXRhKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCYgYml0cG9zLCBGWF9CT09MIGJGaW5pc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKTsKKyAgICBGWF9CT09MCQkJUmVhZExpbmUoRlhfTFBDQllURSBzcmNfYnVmLCBpbnQgYml0c2l6ZSwgaW50JiBiaXRwb3MpOworfTsKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYXJzZXIvZnBkZl9wYXJzZXJfZGVjb2RlLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYXJzZXIvZnBkZl9wYXJzZXJfZGVjb2RlLmNwcAppbmRleCA3NGU4MWQ0Li5kZmMyNmJjIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFyc2VyL2ZwZGZfcGFyc2VyX2RlY29kZS5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhcnNlci9mcGRmX3BhcnNlcl9kZWNvZGUuY3BwCkBAIC0xLDUzMyArMSw1MzMgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYXJzZXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfbW9kdWxlLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjb2RlYy9meF9jb2RlYy5oIg0KLSNpbmNsdWRlIDxsaW1pdHMuaD4NCi0jZGVmaW5lIF9TVFJFQU1fTUFYX1NJWkVfCQkyMCAqIDEwMjQgKiAxMDI0DQotRlhfRFdPUkQgX0E4NURlY29kZShjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkNCi17DQotICAgIGRlc3Rfc2l6ZSA9IDA7DQotICAgIGRlc3RfYnVmID0gTlVMTDsNCi0gICAgaWYgKHNyY19zaXplID09IDApIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIEZYX0RXT1JEIG9yaWdfc2l6ZSA9IGRlc3Rfc2l6ZTsNCi0gICAgRlhfRFdPUkQgemNvdW50ID0gMDsNCi0gICAgRlhfRFdPUkQgcG9zID0gMDsNCi0gICAgd2hpbGUgKHBvcyA8IHNyY19zaXplKSB7DQotICAgICAgICBGWF9CWVRFIGNoID0gc3JjX2J1Zltwb3NdOw0KLSAgICAgICAgaWYgKGNoIDwgJyEnICYmIGNoICE9ICdcbicgJiYgY2ggIT0gJ1xyJyAmJiBjaCAhPSAnICcgJiYgY2ggIT0gJ1x0Jykgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGNoID09ICd6Jykgew0KLSAgICAgICAgICAgIHpjb3VudCArKzsNCi0gICAgICAgIH0gZWxzZSBpZiAoY2ggPiAndScpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIHBvcyArKzsNCi0gICAgfQ0KLSAgICBpZiAocG9zID09IDApIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGlmICh6Y291bnQgPiBVSU5UX01BWCAvIDQpIHsNCi0gICAgICAgIHJldHVybiAoRlhfRFdPUkQpIC0gMTsNCi0gICAgfQ0KLSAgICBpZiAoemNvdW50ICogNCA+IFVJTlRfTUFYIC0gKHBvcyAtIHpjb3VudCkpIHsNCi0gICAgICAgIHJldHVybiAoRlhfRFdPUkQpIC0gMTsNCi0gICAgfQ0KLSAgICBkZXN0X2J1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIHpjb3VudCAqIDQgKyAocG9zIC0gemNvdW50KSk7DQotICAgIGlmIChkZXN0X2J1ZiA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gKEZYX0RXT1JEKSAtIDE7DQotICAgIH0NCi0gICAgaW50IHN0YXRlID0gMCwgcmVzID0gMDsNCi0gICAgcG9zID0gZGVzdF9zaXplID0gMDsNCi0gICAgd2hpbGUgKHBvcyA8IHNyY19zaXplKSB7DQotICAgICAgICBGWF9CWVRFIGNoID0gc3JjX2J1Zltwb3MrK107DQotICAgICAgICBpZiAoY2ggPT0gJ1xuJyB8fCBjaCA9PSAnXHInIHx8IGNoID09ICcgJyB8fCBjaCA9PSAnXHQnKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoY2ggPT0gJ3onKSB7DQotICAgICAgICAgICAgRlhTWVNfbWVtc2V0MzIoZGVzdF9idWYgKyBkZXN0X3NpemUsIDAsIDQpOw0KLSAgICAgICAgICAgIHN0YXRlID0gMDsNCi0gICAgICAgICAgICByZXMgPSAwOw0KLSAgICAgICAgICAgIGRlc3Rfc2l6ZSArPSA0Ow0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAoY2ggPCAnIScgfHwgY2ggPiAndScpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJlcyA9IHJlcyAqIDg1ICsgY2ggLSAzMzsNCi0gICAgICAgICAgICBzdGF0ZSArKzsNCi0gICAgICAgICAgICBpZiAoc3RhdGUgPT0gNSkgew0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3RfYnVmW2Rlc3Rfc2l6ZSsrXSA9IChGWF9CWVRFKShyZXMgPj4gKDMgLSBpKSAqIDgpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHN0YXRlID0gMDsNCi0gICAgICAgICAgICAgICAgcmVzID0gMDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKHN0YXRlKSB7DQotICAgICAgICBpbnQgaTsNCi0gICAgICAgIGZvciAoaSA9IHN0YXRlOyBpIDwgNTsgaSArKykgew0KLSAgICAgICAgICAgIHJlcyA9IHJlcyAqIDg1ICsgODQ7DQotICAgICAgICB9DQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RhdGUgLSAxOyBpICsrKSB7DQotICAgICAgICAgICAgZGVzdF9idWZbZGVzdF9zaXplKytdID0gKEZYX0JZVEUpKHJlcyA+PiAoMyAtIGkpICogOCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKHBvcyA8IHNyY19zaXplICYmIHNyY19idWZbcG9zXSA9PSAnPicpIHsNCi0gICAgICAgIHBvcyArKzsNCi0gICAgfQ0KLSAgICByZXR1cm4gcG9zOw0KLX0NCi1GWF9EV09SRCBfSGV4RGVjb2RlKGNvbnN0IEZYX0JZVEUqIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBGWF9MUEJZVEUmIGRlc3RfYnVmLCBGWF9EV09SRCYgZGVzdF9zaXplKQ0KLXsNCi0gICAgRlhfRFdPUkQgb3JpZ19zaXplID0gZGVzdF9zaXplOw0KLSAgICBGWF9EV09SRCBpOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc3JjX3NpemU7IGkgKyspDQotICAgICAgICBpZiAoc3JjX2J1ZltpXSA9PSAnPicpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgZGVzdF9idWYgPSBGWF9BbGxvYyggRlhfQllURSwgaSAvIDIgKyAxKTsNCi0gICAgZGVzdF9zaXplID0gMDsNCi0gICAgRlhfQk9PTCBiRmlyc3REaWdpdCA9IFRSVUU7DQotICAgIGZvciAoaSA9IDA7IGkgPCBzcmNfc2l6ZTsgaSArKykgew0KLSAgICAgICAgRlhfQllURSBjaCA9IHNyY19idWZbaV07DQotICAgICAgICBpZiAoY2ggPT0gJyAnIHx8IGNoID09ICdcbicgfHwgY2ggPT0gJ1x0JyB8fCBjaCA9PSAnXHInKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpbnQgZGlnaXQ7DQotICAgICAgICBpZiAoY2ggPD0gJzknICYmIGNoID49ICcwJykgew0KLSAgICAgICAgICAgIGRpZ2l0ID0gY2ggLSAnMCc7DQotICAgICAgICB9IGVsc2UgaWYgKGNoIDw9ICdmJyAmJiBjaCA+PSAnYScpIHsNCi0gICAgICAgICAgICBkaWdpdCA9IGNoIC0gJ2EnICsgMTA7DQotICAgICAgICB9IGVsc2UgaWYgKGNoIDw9ICdGJyAmJiBjaCA+PSAnQScpIHsNCi0gICAgICAgICAgICBkaWdpdCA9IGNoIC0gJ0EnICsgMTA7DQotICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc+Jykgew0KLSAgICAgICAgICAgIGkgKys7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGJGaXJzdERpZ2l0KSB7DQotICAgICAgICAgICAgZGVzdF9idWZbZGVzdF9zaXplXSA9IGRpZ2l0ICogMTY7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGRlc3RfYnVmW2Rlc3Rfc2l6ZSArK10gKz0gZGlnaXQ7DQotICAgICAgICB9DQotICAgICAgICBiRmlyc3REaWdpdCA9ICFiRmlyc3REaWdpdDsNCi0gICAgfQ0KLSAgICBpZiAoIWJGaXJzdERpZ2l0KSB7DQotICAgICAgICBkZXN0X3NpemUgKys7DQotICAgIH0NCi0gICAgcmV0dXJuIGk7DQotfQ0KLUZYX0RXT1JEIFJ1bkxlbmd0aERlY29kZShjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkNCi17DQotICAgIEZYX0RXT1JEIG9yaWdfc2l6ZSA9IGRlc3Rfc2l6ZTsNCi0gICAgRlhfRFdPUkQgaSA9IDA7DQotICAgIEZYX0RXT1JEIG9sZDsNCi0gICAgZGVzdF9zaXplID0gMDsNCi0gICAgd2hpbGUgKGkgPCBzcmNfc2l6ZSkgew0KLSAgICAgICAgaWYgKHNyY19idWZbaV0gPCAxMjgpIHsNCi0gICAgICAgICAgICBvbGQgPSBkZXN0X3NpemU7DQotICAgICAgICAgICAgZGVzdF9zaXplICs9IHNyY19idWZbaV0gKyAxOw0KLSAgICAgICAgICAgIGlmIChkZXN0X3NpemUgPCBvbGQpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIChGWF9EV09SRCkgLSAxOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpICs9IHNyY19idWZbaV0gKyAyOw0KLSAgICAgICAgfSBlbHNlIGlmIChzcmNfYnVmW2ldID4gMTI4KSB7DQotICAgICAgICAgICAgb2xkID0gZGVzdF9zaXplOw0KLSAgICAgICAgICAgIGRlc3Rfc2l6ZSArPSAyNTcgLSBzcmNfYnVmW2ldOw0KLSAgICAgICAgICAgIGlmIChkZXN0X3NpemUgPCBvbGQpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIChGWF9EV09SRCkgLSAxOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpICs9IDI7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChkZXN0X3NpemUgPj0gX1NUUkVBTV9NQVhfU0laRV8pIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBkZXN0X2J1ZiA9IEZYX0FsbG9jKCBGWF9CWVRFLCBkZXN0X3NpemUpOw0KLSAgICBpZiAoIWRlc3RfYnVmKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgaSA9IDA7DQotICAgIGludCBkZXN0X2NvdW50ID0gMDsNCi0gICAgd2hpbGUgKGkgPCBzcmNfc2l6ZSkgew0KLSAgICAgICAgaWYgKHNyY19idWZbaV0gPCAxMjgpIHsNCi0gICAgICAgICAgICBGWF9EV09SRCBjb3B5X2xlbiA9IHNyY19idWZbaV0gKyAxOw0KLSAgICAgICAgICAgIEZYX0RXT1JEIGJ1Zl9sZWZ0ID0gc3JjX3NpemUgLSBpIC0gMTsNCi0gICAgICAgICAgICBpZiAoYnVmX2xlZnQgPCBjb3B5X2xlbikgew0KLSAgICAgICAgICAgICAgICBGWF9EV09SRCBkZWx0YSA9IGNvcHlfbGVuIC0gYnVmX2xlZnQ7DQotICAgICAgICAgICAgICAgIGNvcHlfbGVuID0gYnVmX2xlZnQ7DQotICAgICAgICAgICAgICAgIEZYU1lTX21lbXNldDgoZGVzdF9idWYgKyBkZXN0X2NvdW50ICsgY29weV9sZW4sICdcMCcsIGRlbHRhKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIoZGVzdF9idWYgKyBkZXN0X2NvdW50LCBzcmNfYnVmICsgaSArIDEsIGNvcHlfbGVuKTsNCi0gICAgICAgICAgICBkZXN0X2NvdW50ICs9IHNyY19idWZbaV0gKyAxOw0KLSAgICAgICAgICAgIGkgKz0gc3JjX2J1ZltpXSArIDI7DQotICAgICAgICB9IGVsc2UgaWYgKHNyY19idWZbaV0gPiAxMjgpIHsNCi0gICAgICAgICAgICBpbnQgZmlsbCA9IDA7DQotICAgICAgICAgICAgaWYgKGkgPCBzcmNfc2l6ZSAtIDEpIHsNCi0gICAgICAgICAgICAgICAgZmlsbCA9IHNyY19idWZbaSArIDFdOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWFNZU19tZW1zZXQ4KGRlc3RfYnVmICsgZGVzdF9jb3VudCwgZmlsbCwgMjU3IC0gc3JjX2J1ZltpXSk7DQotICAgICAgICAgICAgZGVzdF9jb3VudCArPSAyNTcgLSBzcmNfYnVmW2ldOw0KLSAgICAgICAgICAgIGkgKz0gMjsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhfRFdPUkQgcmV0ID0gaSArIDE7DQotICAgIGlmIChyZXQgPiBzcmNfc2l6ZSkgew0KLSAgICAgICAgcmV0ID0gc3JjX3NpemU7DQotICAgIH0NCi0gICAgcmV0dXJuIHJldDsNCi19DQotSUNvZGVjX1NjYW5saW5lRGVjb2RlciogRlBERkFQSV9DcmVhdGVGYXhEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwNCi0gICAgICAgIGNvbnN0IENQREZfRGljdGlvbmFyeSogcFBhcmFtcykNCi17DQotICAgIGludCBLID0gMDsNCi0gICAgRlhfQk9PTCBFbmRPZkxpbmUgPSBGQUxTRTsNCi0gICAgRlhfQk9PTCBCeXRlQWxpZ24gPSBGQUxTRTsNCi0gICAgRlhfQk9PTCBCbGFja0lzMSA9IEZBTFNFOw0KLSAgICBGWF9CT09MIENvbHVtbnMgPSAxNzI4Ow0KLSAgICBGWF9CT09MIFJvd3MgPSAwOw0KLSAgICBpZiAocFBhcmFtcykgew0KLSAgICAgICAgSyA9IHBQYXJhbXMtPkdldEludGVnZXIoRlhfQlNUUkMoIksiKSk7DQotICAgICAgICBFbmRPZkxpbmUgPSBwUGFyYW1zLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJFbmRPZkxpbmUiKSk7DQotICAgICAgICBCeXRlQWxpZ24gPSBwUGFyYW1zLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJFbmNvZGVkQnl0ZUFsaWduIikpOw0KLSAgICAgICAgQmxhY2tJczEgPSBwUGFyYW1zLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJCbGFja0lzMSIpKTsNCi0gICAgICAgIENvbHVtbnMgPSBwUGFyYW1zLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJDb2x1bW5zIiksIDE3MjgpOw0KLSAgICAgICAgUm93cyA9IHBQYXJhbXMtPkdldEludGVnZXIoRlhfQlNUUkMoIlJvd3MiKSk7DQotICAgICAgICBpZiAoUm93cyA+IFVTSFJUX01BWCkgew0KLSAgICAgICAgICAgIFJvd3MgPSAwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKENvbHVtbnMgPD0gMCB8fCBSb3dzIDwgMCB8fCBDb2x1bW5zID4gVVNIUlRfTUFYIHx8IFJvd3MgPiBVU0hSVF9NQVgpIHsNCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRGYXhNb2R1bGUoKS0+Q3JlYXRlRGVjb2RlcihzcmNfYnVmLCBzcmNfc2l6ZSwgd2lkdGgsIGhlaWdodCwNCi0gICAgICAgICAgICBLLCBFbmRPZkxpbmUsIEJ5dGVBbGlnbiwgQmxhY2tJczEsIENvbHVtbnMsIFJvd3MpOw0KLX0NCi1zdGF0aWMgRlhfQk9PTCBDaGVja0ZsYXRlRGVjb2RlUGFyYW1zKGludCBDb2xvcnMsIGludCBCaXRzUGVyQ29tcG9uZW50LCBpbnQgQ29sdW1ucykNCi17DQotICAgIGlmIChDb2x1bW5zIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGludCBjaGVjayA9IENvbHVtbnM7DQotICAgIGlmIChDb2xvcnMgPCAwIHx8IChjaGVjayA+IDAgJiYgQ29sb3JzID4gSU5UX01BWCAvIGNoZWNrKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGNoZWNrICo9IENvbG9yczsNCi0gICAgaWYgKEJpdHNQZXJDb21wb25lbnQgPCAwIHx8DQotICAgICAgICAgICAgKGNoZWNrID4gMCAmJiBCaXRzUGVyQ29tcG9uZW50ID4gSU5UX01BWCAvIGNoZWNrKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGNoZWNrICo9IEJpdHNQZXJDb21wb25lbnQ7DQotICAgIGlmIChjaGVjayA+IElOVF9NQVggLSA3KSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUlDb2RlY19TY2FubGluZURlY29kZXIqIEZQREZBUElfQ3JlYXRlRmxhdGVEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwNCi0gICAgICAgIGludCBuQ29tcHMsIGludCBicGMsIGNvbnN0IENQREZfRGljdGlvbmFyeSogcFBhcmFtcykNCi17DQotICAgIGludCBwcmVkaWN0b3IgPSAwOw0KLSAgICBGWF9CT09MIGJFYXJseUNoYW5nZSA9IFRSVUU7DQotICAgIGludCBDb2xvcnMgPSAwLCBCaXRzUGVyQ29tcG9uZW50ID0gMCwgQ29sdW1ucyA9IDA7DQotICAgIGlmIChwUGFyYW1zKSB7DQotICAgICAgICBwcmVkaWN0b3IgPSAoKENQREZfRGljdGlvbmFyeSopcFBhcmFtcyktPkdldEludGVnZXIoRlhfQlNUUkMoIlByZWRpY3RvciIpKTsNCi0gICAgICAgIGJFYXJseUNoYW5nZSA9ICgoQ1BERl9EaWN0aW9uYXJ5KilwUGFyYW1zKS0+R2V0SW50ZWdlcihGWF9CU1RSQygiRWFybHlDaGFuZ2UiKSwgMSk7DQotICAgICAgICBDb2xvcnMgPSBwUGFyYW1zLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJDb2xvcnMiKSwgMSk7DQotICAgICAgICBCaXRzUGVyQ29tcG9uZW50ID0gcFBhcmFtcy0+R2V0SW50ZWdlcihGWF9CU1RSQygiQml0c1BlckNvbXBvbmVudCIpLCA4KTsNCi0gICAgICAgIENvbHVtbnMgPSBwUGFyYW1zLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJDb2x1bW5zIiksIDEpOw0KLSAgICAgICAgaWYgKCFDaGVja0ZsYXRlRGVjb2RlUGFyYW1zKENvbG9ycywgQml0c1BlckNvbXBvbmVudCwgQ29sdW1ucykpIHsNCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRGbGF0ZU1vZHVsZSgpLT5DcmVhdGVEZWNvZGVyKHNyY19idWYsIHNyY19zaXplLCB3aWR0aCwgaGVpZ2h0LA0KLSAgICAgICAgICAgIG5Db21wcywgYnBjLCBwcmVkaWN0b3IsIENvbG9ycywgQml0c1BlckNvbXBvbmVudCwgQ29sdW1ucyk7DQotfQ0KLUZYX0RXT1JEIEZQREZBUElfRmxhdGVPckxaV0RlY29kZShGWF9CT09MIGJMWlcsIGNvbnN0IEZYX0JZVEUqIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBDUERGX0RpY3Rpb25hcnkqIHBQYXJhbXMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGVzdGltYXRlZF9zaXplLCBGWF9MUEJZVEUmIGRlc3RfYnVmLCBGWF9EV09SRCYgZGVzdF9zaXplKQ0KLXsNCi0gICAgaW50IHByZWRpY3RvciA9IDA7DQotICAgIEZYX0JPT0wgYkVhcmx5Q2hhbmdlID0gVFJVRTsNCi0gICAgaW50IENvbG9ycyA9IDAsIEJpdHNQZXJDb21wb25lbnQgPSAwLCBDb2x1bW5zID0gMDsNCi0gICAgaWYgKHBQYXJhbXMpIHsNCi0gICAgICAgIHByZWRpY3RvciA9ICgoQ1BERl9EaWN0aW9uYXJ5KilwUGFyYW1zKS0+R2V0SW50ZWdlcihGWF9CU1RSQygiUHJlZGljdG9yIikpOw0KLSAgICAgICAgYkVhcmx5Q2hhbmdlID0gKChDUERGX0RpY3Rpb25hcnkqKXBQYXJhbXMpLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJFYXJseUNoYW5nZSIpLCAxKTsNCi0gICAgICAgIENvbG9ycyA9IHBQYXJhbXMtPkdldEludGVnZXIoRlhfQlNUUkMoIkNvbG9ycyIpLCAxKTsNCi0gICAgICAgIEJpdHNQZXJDb21wb25lbnQgPSBwUGFyYW1zLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJCaXRzUGVyQ29tcG9uZW50IiksIDgpOw0KLSAgICAgICAgQ29sdW1ucyA9IHBQYXJhbXMtPkdldEludGVnZXIoRlhfQlNUUkMoIkNvbHVtbnMiKSwgMSk7DQotICAgICAgICBpZiAoIUNoZWNrRmxhdGVEZWNvZGVQYXJhbXMoQ29sb3JzLCBCaXRzUGVyQ29tcG9uZW50LCBDb2x1bW5zKSkgew0KLSAgICAgICAgICAgIHJldHVybiAoRlhfRFdPUkQpIC0gMTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRGbGF0ZU1vZHVsZSgpLT5GbGF0ZU9yTFpXRGVjb2RlKGJMWlcsIHNyY19idWYsIHNyY19zaXplLA0KLSAgICAgICAgICAgIGJFYXJseUNoYW5nZSwgcHJlZGljdG9yLCBDb2xvcnMsIEJpdHNQZXJDb21wb25lbnQsIENvbHVtbnMsIGVzdGltYXRlZF9zaXplLA0KLSAgICAgICAgICAgIGRlc3RfYnVmLCBkZXN0X3NpemUpOw0KLX0NCi1GWF9CT09MIFBERl9EYXRhRGVjb2RlKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGNvbnN0IENQREZfRGljdGlvbmFyeSogcERpY3QsDQotICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUmIGRlc3RfYnVmLCBGWF9EV09SRCYgZGVzdF9zaXplLCBDRlhfQnl0ZVN0cmluZyYgSW1hZ2VFbmNvZGluZywNCi0gICAgICAgICAgICAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSomIHBJbWFnZVBhcm1zLCBGWF9EV09SRCBsYXN0X2VzdGltYXRlZF9zaXplLCBGWF9CT09MIGJJbWFnZUFjYykNCi0NCi17DQotICAgIENQREZfT2JqZWN0KiBwRGVjb2RlciA9IHBEaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkZpbHRlciIpKTsNCi0gICAgaWYgKHBEZWNvZGVyID09IE5VTEwgfHwgKHBEZWNvZGVyLT5HZXRUeXBlKCkgIT0gUERGT0JKX0FSUkFZICYmIHBEZWNvZGVyLT5HZXRUeXBlKCkgIT0gUERGT0JKX05BTUUpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QqIHBQYXJhbXMgPSBwRGljdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJEZWNvZGVQYXJtcyIpKTsNCi0gICAgQ0ZYX0J5dGVTdHJpbmdBcnJheSBEZWNvZGVyTGlzdDsNCi0gICAgQ0ZYX1B0ckFycmF5IFBhcmFtTGlzdDsNCi0gICAgaWYgKHBEZWNvZGVyLT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICBpZiAocFBhcmFtcyAmJiBwUGFyYW1zLT5HZXRUeXBlKCkgIT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICAgICAgcFBhcmFtcyA9IE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBDUERGX0FycmF5KiBwRGVjb2RlcnMgPSAoQ1BERl9BcnJheSopcERlY29kZXI7DQotICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcERlY29kZXJzLT5HZXRDb3VudCgpOyBpICsrKSB7DQotICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmdDIHN0ciA9IHBEZWNvZGVycy0+R2V0Q29uc3RTdHJpbmcoaSk7DQotICAgICAgICAgICAgRGVjb2Rlckxpc3QuQWRkKHN0cik7DQotICAgICAgICAgICAgaWYgKHBQYXJhbXMpIHsNCi0gICAgICAgICAgICAgICAgUGFyYW1MaXN0LkFkZCgoKENQREZfQXJyYXkqKXBQYXJhbXMpLT5HZXREaWN0KGkpKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBQYXJhbUxpc3QuQWRkKE5VTEwpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIERlY29kZXJMaXN0LkFkZChwRGVjb2Rlci0+R2V0Q29uc3RTdHJpbmcoKSk7DQotICAgICAgICBQYXJhbUxpc3QuQWRkKHBQYXJhbXMtPkdldERpY3QoKSk7DQotICAgIH0NCi0gICAgRlhfTFBCWVRFIGxhc3RfYnVmID0gKEZYX0xQQllURSlzcmNfYnVmOw0KLSAgICBGWF9EV09SRCBsYXN0X3NpemUgPSBzcmNfc2l6ZTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBEZWNvZGVyTGlzdC5HZXRTaXplKCk7IGkgKyspIHsNCi0gICAgICAgIGludCBlc3RpbWF0ZWRfc2l6ZSA9IGkgPT0gRGVjb2Rlckxpc3QuR2V0U2l6ZSgpIC0gMSA/IGxhc3RfZXN0aW1hdGVkX3NpemUgOiAwOw0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgZGVjb2RlciA9IERlY29kZXJMaXN0W2ldOw0KLSAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUGFyYW0gPSAoQ1BERl9EaWN0aW9uYXJ5KilQYXJhbUxpc3RbaV07DQotICAgICAgICBGWF9MUEJZVEUgbmV3X2J1ZiA9IE5VTEw7DQotICAgICAgICBGWF9EV09SRCBuZXdfc2l6ZSA9IChGWF9EV09SRCkgLSAxOw0KLSAgICAgICAgaW50IG9mZnNldCA9IC0xOw0KLSAgICAgICAgaWYgKGRlY29kZXIgPT0gRlhfQlNUUkMoIkZsYXRlRGVjb2RlIikgfHwgZGVjb2RlciA9PSBGWF9CU1RSQygiRmwiKSkgew0KLSAgICAgICAgICAgIGlmIChiSW1hZ2VBY2MgJiYgaSA9PSBEZWNvZGVyTGlzdC5HZXRTaXplKCkgLSAxKSB7DQotICAgICAgICAgICAgICAgIEltYWdlRW5jb2RpbmcgPSBGWF9CU1RSQygiRmxhdGVEZWNvZGUiKTsNCi0gICAgICAgICAgICAgICAgZGVzdF9idWYgPSAoRlhfTFBCWVRFKWxhc3RfYnVmOw0KLSAgICAgICAgICAgICAgICBkZXN0X3NpemUgPSBsYXN0X3NpemU7DQotICAgICAgICAgICAgICAgIHBJbWFnZVBhcm1zID0gcFBhcmFtOw0KLSAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBvZmZzZXQgPSBGUERGQVBJX0ZsYXRlT3JMWldEZWNvZGUoRkFMU0UsIGxhc3RfYnVmLCBsYXN0X3NpemUsIHBQYXJhbSwgZXN0aW1hdGVkX3NpemUsIG5ld19idWYsIG5ld19zaXplKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2UgaWYgKGRlY29kZXIgPT0gRlhfQlNUUkMoIkxaV0RlY29kZSIpIHx8IGRlY29kZXIgPT0gRlhfQlNUUkMoIkxaVyIpKSB7DQotICAgICAgICAgICAgb2Zmc2V0ID0gRlBERkFQSV9GbGF0ZU9yTFpXRGVjb2RlKFRSVUUsIGxhc3RfYnVmLCBsYXN0X3NpemUsIHBQYXJhbSwgZXN0aW1hdGVkX3NpemUsIG5ld19idWYsIG5ld19zaXplKTsNCi0gICAgICAgIH0gZWxzZSBpZiAoZGVjb2RlciA9PSBGWF9CU1RSQygiQVNDSUk4NURlY29kZSIpIHx8IGRlY29kZXIgPT0gRlhfQlNUUkMoIkE4NSIpKSB7DQotICAgICAgICAgICAgb2Zmc2V0ID0gX0E4NURlY29kZShsYXN0X2J1ZiwgbGFzdF9zaXplLCBuZXdfYnVmLCBuZXdfc2l6ZSk7DQotICAgICAgICB9IGVsc2UgaWYgKGRlY29kZXIgPT0gRlhfQlNUUkMoIkFTQ0lJSGV4RGVjb2RlIikgfHwgZGVjb2RlciA9PSBGWF9CU1RSQygiQUh4IikpIHsNCi0gICAgICAgICAgICBvZmZzZXQgPSBfSGV4RGVjb2RlKGxhc3RfYnVmLCBsYXN0X3NpemUsIG5ld19idWYsIG5ld19zaXplKTsNCi0gICAgICAgIH0gZWxzZSBpZiAoZGVjb2RlciA9PSBGWF9CU1RSQygiUnVuTGVuZ3RoRGVjb2RlIikgfHwgZGVjb2RlciA9PSBGWF9CU1RSQygiUkwiKSkgew0KLSAgICAgICAgICAgIGlmIChiSW1hZ2VBY2MgJiYgaSA9PSBEZWNvZGVyTGlzdC5HZXRTaXplKCkgLSAxKSB7DQotICAgICAgICAgICAgICAgIEltYWdlRW5jb2RpbmcgPSBGWF9CU1RSQygiUnVuTGVuZ3RoRGVjb2RlIik7DQotICAgICAgICAgICAgICAgIGRlc3RfYnVmID0gKEZYX0xQQllURSlsYXN0X2J1ZjsNCi0gICAgICAgICAgICAgICAgZGVzdF9zaXplID0gbGFzdF9zaXplOw0KLSAgICAgICAgICAgICAgICBwSW1hZ2VQYXJtcyA9IHBQYXJhbTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG9mZnNldCA9IFJ1bkxlbmd0aERlY29kZShsYXN0X2J1ZiwgbGFzdF9zaXplLCBuZXdfYnVmLCBuZXdfc2l6ZSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlmIChkZWNvZGVyID09IEZYX0JTVFJDKCJEQ1QiKSkgew0KLSAgICAgICAgICAgICAgICBkZWNvZGVyID0gIkRDVERlY29kZSI7DQotICAgICAgICAgICAgfSBlbHNlIGlmIChkZWNvZGVyID09IEZYX0JTVFJDKCJDQ0YiKSkgew0KLSAgICAgICAgICAgICAgICBkZWNvZGVyID0gIkNDSVRURmF4RGVjb2RlIjsNCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGRlY29kZXIgPT0gRlhfQlNUUkMoIkNyeXB0IikpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIEltYWdlRW5jb2RpbmcgPSBkZWNvZGVyOw0KLSAgICAgICAgICAgIHBJbWFnZVBhcm1zID0gcFBhcmFtOw0KLSAgICAgICAgICAgIGRlc3RfYnVmID0gKEZYX0xQQllURSlsYXN0X2J1ZjsNCi0gICAgICAgICAgICBkZXN0X3NpemUgPSBsYXN0X3NpemU7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgICAgICBpZiAobGFzdF9idWYgIT0gc3JjX2J1Zikgew0KLSAgICAgICAgICAgIEZYX0ZyZWUobGFzdF9idWYpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG9mZnNldCA9PSAtMSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGxhc3RfYnVmID0gbmV3X2J1ZjsNCi0gICAgICAgIGxhc3Rfc2l6ZSA9IG5ld19zaXplOw0KLSAgICB9DQotICAgIEltYWdlRW5jb2RpbmcgPSAiIjsNCi0gICAgcEltYWdlUGFybXMgPSBOVUxMOw0KLSAgICBkZXN0X2J1ZiA9IGxhc3RfYnVmOw0KLSAgICBkZXN0X3NpemUgPSBsYXN0X3NpemU7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1leHRlcm4gY29uc3QgRlhfV09SRCBQREZEb2NFbmNvZGluZ1syNTZdID0gew0KLSAgICAweDAwMDAsIDB4MDAwMSwgMHgwMDAyLCAweDAwMDMsIDB4MDAwNCwgMHgwMDA1LCAweDAwMDYsIDB4MDAwNywgMHgwMDA4LCAweDAwMDksDQotICAgIDB4MDAwYSwgMHgwMDBiLCAweDAwMGMsIDB4MDAwZCwgMHgwMDBlLCAweDAwMGYsIDB4MDAxMCwgMHgwMDExLCAweDAwMTIsIDB4MDAxMywNCi0gICAgMHgwMDE0LCAweDAwMTUsIDB4MDAxNiwgMHgwMDE3LCAweDAyZDgsIDB4MDJjNywgMHgwMmM2LCAweDAyZDksIDB4MDJkZCwgMHgwMmRiLA0KLSAgICAweDAyZGEsIDB4MDJkYywgMHgwMDIwLCAweDAwMjEsIDB4MDAyMiwgMHgwMDIzLCAweDAwMjQsIDB4MDAyNSwgMHgwMDI2LCAweDAwMjcsDQotICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJmLCAweDAwMzAsIDB4MDAzMSwNCi0gICAgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgMHgwMDM4LCAweDAwMzksIDB4MDAzYSwgMHgwMDNiLA0KLSAgICAweDAwM2MsIDB4MDAzZCwgMHgwMDNlLCAweDAwM2YsIDB4MDA0MCwgMHgwMDQxLCAweDAwNDIsIDB4MDA0MywgMHgwMDQ0LCAweDAwNDUsDQotICAgIDB4MDA0NiwgMHgwMDQ3LCAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwNCi0gICAgMHgwMDUwLCAweDAwNTEsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU2LCAweDAwNTcsIDB4MDA1OCwgMHgwMDU5LA0KLSAgICAweDAwNWEsIDB4MDA1YiwgMHgwMDVjLCAweDAwNWQsIDB4MDA1ZSwgMHgwMDVmLCAweDAwNjAsIDB4MDA2MSwgMHgwMDYyLCAweDAwNjMsDQotICAgIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywgMHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwNCi0gICAgMHgwMDZlLCAweDAwNmYsIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LA0KLSAgICAweDAwNzgsIDB4MDA3OSwgMHgwMDdhLCAweDAwN2IsIDB4MDA3YywgMHgwMDdkLCAweDAwN2UsIDB4MDAwMCwgMHgyMDIyLCAweDIwMjAsDQotICAgIDB4MjAyMSwgMHgyMDI2LCAweDIwMTQsIDB4MjAxMywgMHgwMTkyLCAweDIwNDQsIDB4MjAzOSwgMHgyMDNhLCAweDIyMTIsIDB4MjAzMCwNCi0gICAgMHgyMDFlLCAweDIwMWMsIDB4MjAxZCwgMHgyMDE4LCAweDIwMTksIDB4MjAxYSwgMHgyMTIyLCAweGZiMDEsIDB4ZmIwMiwgMHgwMTQxLA0KLSAgICAweDAxNTIsIDB4MDE2MCwgMHgwMTc4LCAweDAxN2QsIDB4MDEzMSwgMHgwMTQyLCAweDAxNTMsIDB4MDE2MSwgMHgwMTdlLCAweDAwMDAsDQotICAgIDB4MjBhYywgMHgwMGExLCAweDAwYTIsIDB4MDBhMywgMHgwMGE0LCAweDAwYTUsIDB4MDBhNiwgMHgwMGE3LCAweDAwYTgsIDB4MDBhOSwNCi0gICAgMHgwMGFhLCAweDAwYWIsIDB4MDBhYywgMHgwMDAwLCAweDAwYWUsIDB4MDBhZiwgMHgwMGIwLCAweDAwYjEsIDB4MDBiMiwgMHgwMGIzLA0KLSAgICAweDAwYjQsIDB4MDBiNSwgMHgwMGI2LCAweDAwYjcsIDB4MDBiOCwgMHgwMGI5LCAweDAwYmEsIDB4MDBiYiwgMHgwMGJjLCAweDAwYmQsDQotICAgIDB4MDBiZSwgMHgwMGJmLCAweDAwYzAsIDB4MDBjMSwgMHgwMGMyLCAweDAwYzMsIDB4MDBjNCwgMHgwMGM1LCAweDAwYzYsIDB4MDBjNywNCi0gICAgMHgwMGM4LCAweDAwYzksIDB4MDBjYSwgMHgwMGNiLCAweDAwY2MsIDB4MDBjZCwgMHgwMGNlLCAweDAwY2YsIDB4MDBkMCwgMHgwMGQxLA0KLSAgICAweDAwZDIsIDB4MDBkMywgMHgwMGQ0LCAweDAwZDUsIDB4MDBkNiwgMHgwMGQ3LCAweDAwZDgsIDB4MDBkOSwgMHgwMGRhLCAweDAwZGIsDQotICAgIDB4MDBkYywgMHgwMGRkLCAweDAwZGUsIDB4MDBkZiwgMHgwMGUwLCAweDAwZTEsIDB4MDBlMiwgMHgwMGUzLCAweDAwZTQsIDB4MDBlNSwNCi0gICAgMHgwMGU2LCAweDAwZTcsIDB4MDBlOCwgMHgwMGU5LCAweDAwZWEsIDB4MDBlYiwgMHgwMGVjLCAweDAwZWQsIDB4MDBlZSwgMHgwMGVmLA0KLSAgICAweDAwZjAsIDB4MDBmMSwgMHgwMGYyLCAweDAwZjMsIDB4MDBmNCwgMHgwMGY1LCAweDAwZjYsIDB4MDBmNywgMHgwMGY4LCAweDAwZjksDQotICAgIDB4MDBmYSwgMHgwMGZiLCAweDAwZmMsIDB4MDBmZCwgMHgwMGZlLCAweDAwZmYNCi19Ow0KLUNGWF9XaWRlU3RyaW5nIFBERl9EZWNvZGVUZXh0KEZYX0xQQ0JZVEUgc3JjX2RhdGEsIEZYX0RXT1JEIHNyY19sZW4sIENGWF9DaGFyTWFwKiBwQ2hhck1hcCkNCi17DQotICAgIENGWF9XaWRlU3RyaW5nIHJlc3VsdDsNCi0gICAgaWYgKHNyY19sZW4gPj0gMiAmJiAoKHNyY19kYXRhWzBdID09IDB4ZmUgJiYgc3JjX2RhdGFbMV0gPT0gMHhmZikgfHwgKHNyY19kYXRhWzBdID09IDB4ZmYgJiYgc3JjX2RhdGFbMV0gPT0gMHhmZSkpKSB7DQotICAgICAgICBGWF9CT09MIGJCRSA9IHNyY19kYXRhWzBdID09IDB4ZmU7DQotICAgICAgICBpbnQgbWF4X2NoYXJzID0gKHNyY19sZW4gLSAyKSAvIDI7DQotICAgICAgICBpZiAoIW1heF9jaGFycykgew0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQotICAgICAgICB9DQotICAgICAgICBpZiAoc3JjX2RhdGFbMF0gPT0gMHhmZikgew0KLSAgICAgICAgICAgIGJCRSA9ICFzcmNfZGF0YVsyXTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0xQV1NUUiBkZXN0X2J1ZiA9IHJlc3VsdC5HZXRCdWZmZXIobWF4X2NoYXJzKTsNCi0gICAgICAgIEZYX0xQQ0JZVEUgdW5pX3N0ciA9IHNyY19kYXRhICsgMjsNCi0gICAgICAgIGludCBkZXN0X3BvcyA9IDA7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heF9jaGFycyAqIDI7IGkgKz0gMikgew0KLSAgICAgICAgICAgIEZYX1dPUkQgdW5pY29kZSA9IGJCRSA/ICh1bmlfc3RyW2ldIDw8IDggfCB1bmlfc3RyW2kgKyAxXSkgOiAodW5pX3N0cltpICsgMV0gPDwgOCB8IHVuaV9zdHJbaV0pOw0KLSAgICAgICAgICAgIGlmICh1bmljb2RlID09IDB4MWIpIHsNCi0gICAgICAgICAgICAgICAgaSArPSAyOw0KLSAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IG1heF9jaGFycyAqIDIpIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX1dPUkQgdW5pY29kZSA9IGJCRSA/ICh1bmlfc3RyW2ldIDw8IDggfCB1bmlfc3RyW2kgKyAxXSkgOiAodW5pX3N0cltpICsgMV0gPDwgOCB8IHVuaV9zdHJbaV0pOw0KLSAgICAgICAgICAgICAgICAgICAgaSArPSAyOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGUgPT0gMHgxYikgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9idWZbZGVzdF9wb3MrK10gPSB1bmljb2RlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHJlc3VsdC5SZWxlYXNlQnVmZmVyKGRlc3RfcG9zKTsNCi0gICAgfSBlbHNlIGlmIChwQ2hhck1hcCA9PSBOVUxMKSB7DQotICAgICAgICBGWF9MUFdTVFIgZGVzdF9idWYgPSByZXN1bHQuR2V0QnVmZmVyKHNyY19sZW4pOw0KLSAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHNyY19sZW47IGkgKyspIHsNCi0gICAgICAgICAgICBkZXN0X2J1ZltpXSA9IFBERkRvY0VuY29kaW5nW3NyY19kYXRhW2ldXTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJlc3VsdC5SZWxlYXNlQnVmZmVyKHNyY19sZW4pOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmV0dXJuICgqcENoYXJNYXAtPm1fR2V0V2lkZVN0cmluZykocENoYXJNYXAsIENGWF9CeXRlU3RyaW5nKChGWF9MUENTVFIpc3JjX2RhdGEsIHNyY19sZW4pKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gcmVzdWx0Ow0KLX0NCi1DRlhfV2lkZVN0cmluZyBQREZfRGVjb2RlVGV4dChjb25zdCBDRlhfQnl0ZVN0cmluZyYgYnN0ciwgQ0ZYX0NoYXJNYXAqIHBDaGFyTWFwKQ0KLXsNCi0gICAgcmV0dXJuIFBERl9EZWNvZGVUZXh0KChGWF9MUENCWVRFKShGWF9MUENTVFIpYnN0ciwgYnN0ci5HZXRMZW5ndGgoKSwgcENoYXJNYXApOw0KLX0NCi1DRlhfQnl0ZVN0cmluZyBQREZfRW5jb2RlVGV4dChGWF9MUENXU1RSIHBTdHJpbmcsIGludCBsZW4sIENGWF9DaGFyTWFwKiBwQ2hhck1hcCkNCi17DQotICAgIGlmIChsZW4gPT0gLTEpIHsNCi0gICAgICAgIGxlbiA9IChGWF9TVFJTSVpFKUZYU1lTX3djc2xlbihwU3RyaW5nKTsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVN0cmluZyByZXN1bHQ7DQotICAgIGlmIChwQ2hhck1hcCA9PSBOVUxMKSB7DQotICAgICAgICBGWF9MUFNUUiBkZXN0X2J1ZjEgPSByZXN1bHQuR2V0QnVmZmVyKGxlbik7DQotICAgICAgICBpbnQgaTsNCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKyspIHsNCi0gICAgICAgICAgICBpbnQgY29kZTsNCi0gICAgICAgICAgICBmb3IgKGNvZGUgPSAwOyBjb2RlIDwgMjU2OyBjb2RlICsrKQ0KLSAgICAgICAgICAgICAgICBpZiAoUERGRG9jRW5jb2RpbmdbY29kZV0gPT0gcFN0cmluZ1tpXSkgew0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoY29kZSA9PSAyNTYpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGRlc3RfYnVmMVtpXSA9IGNvZGU7DQotICAgICAgICB9DQotICAgICAgICByZXN1bHQuUmVsZWFzZUJ1ZmZlcihpKTsNCi0gICAgICAgIGlmIChpID09IGxlbikgew0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhfTFBCWVRFIGRlc3RfYnVmMiA9IChGWF9MUEJZVEUpcmVzdWx0LkdldEJ1ZmZlcihsZW4gKiAyICsgMik7DQotICAgIGRlc3RfYnVmMlswXSA9IDB4ZmU7DQotICAgIGRlc3RfYnVmMlsxXSA9IDB4ZmY7DQotICAgIGRlc3RfYnVmMiArPSAyOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSArKykgew0KLSAgICAgICAgKmRlc3RfYnVmMisrID0gcFN0cmluZ1tpXSA+PiA4Ow0KLSAgICAgICAgKmRlc3RfYnVmMisrID0gKEZYX0JZVEUpcFN0cmluZ1tpXTsNCi0gICAgfQ0KLSAgICByZXN1bHQuUmVsZWFzZUJ1ZmZlcihsZW4gKiAyICsgMik7DQotICAgIHJldHVybiByZXN1bHQ7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIFBERl9FbmNvZGVTdHJpbmcoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNyYywgRlhfQk9PTCBiSGV4KQ0KLXsNCi0gICAgQ0ZYX0J5dGVUZXh0QnVmIHJlc3VsdDsNCi0gICAgaW50IHNyY2xlbiA9IHNyYy5HZXRMZW5ndGgoKTsNCi0gICAgaWYgKGJIZXgpIHsNCi0gICAgICAgIHJlc3VsdC5BcHBlbmRDaGFyKCc8Jyk7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNyY2xlbjsgaSArKykgew0KLSAgICAgICAgICAgIHJlc3VsdC5BcHBlbmRDaGFyKCIwMTIzNDU2Nzg5QUJDREVGIltzcmNbaV0gLyAxNl0pOw0KLSAgICAgICAgICAgIHJlc3VsdC5BcHBlbmRDaGFyKCIwMTIzNDU2Nzg5QUJDREVGIltzcmNbaV0gJSAxNl0pOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmVzdWx0LkFwcGVuZENoYXIoJz4nKTsNCi0gICAgICAgIHJldHVybiByZXN1bHQuR2V0Qnl0ZVN0cmluZygpOw0KLSAgICB9DQotICAgIHJlc3VsdC5BcHBlbmRDaGFyKCcoJyk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3JjbGVuOyBpICsrKSB7DQotICAgICAgICBGWF9CWVRFIGNoID0gc3JjW2ldOw0KLSAgICAgICAgaWYgKGNoID09ICcpJyB8fCBjaCA9PSAnXFwnIHx8IGNoID09ICcoJykgew0KLSAgICAgICAgICAgIHJlc3VsdC5BcHBlbmRDaGFyKCdcXCcpOw0KLSAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAweDBhKSB7DQotICAgICAgICAgICAgcmVzdWx0IDw8IEZYX0JTVFJDKCJcXG4iKTsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gMHgwZCkgew0KLSAgICAgICAgICAgIHJlc3VsdCA8PCBGWF9CU1RSQygiXFxyIik7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICByZXN1bHQuQXBwZW5kQ2hhcihjaCk7DQotICAgIH0NCi0gICAgcmVzdWx0LkFwcGVuZENoYXIoJyknKTsNCi0gICAgcmV0dXJuIHJlc3VsdC5HZXRCeXRlU3RyaW5nKCk7DQotfQ0KLXZvaWQgRmxhdGVFbmNvZGUoY29uc3QgRlhfQllURSogc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpDQotew0KLSAgICBDQ29kZWNfTW9kdWxlTWdyKiBwRW5jb2RlcnMgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldENvZGVjTW9kdWxlKCk7DQotICAgIGlmIChwRW5jb2RlcnMpIHsNCi0gICAgICAgIHBFbmNvZGVycy0+R2V0RmxhdGVNb2R1bGUoKS0+RW5jb2RlKHNyY19idWYsIHNyY19zaXplLCBkZXN0X2J1ZiwgZGVzdF9zaXplKTsNCi0gICAgfQ0KLX0NCi12b2lkIEZsYXRlRW5jb2RlKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCBwcmVkaWN0b3IsIGludCBDb2xvcnMsIGludCBCaXRzUGVyQ29tcG9uZW50LCBpbnQgQ29sdW1ucywNCi0gICAgICAgICAgICAgICAgIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpDQotew0KLSAgICBDQ29kZWNfTW9kdWxlTWdyKiBwRW5jb2RlcnMgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldENvZGVjTW9kdWxlKCk7DQotICAgIGlmIChwRW5jb2RlcnMpIHsNCi0gICAgICAgIHBFbmNvZGVycy0+R2V0RmxhdGVNb2R1bGUoKS0+RW5jb2RlKHNyY19idWYsIHNyY19zaXplLCBwcmVkaWN0b3IsIENvbG9ycywgQml0c1BlckNvbXBvbmVudCwgQ29sdW1ucywgZGVzdF9idWYsIGRlc3Rfc2l6ZSk7DQotICAgIH0NCi19DQotRlhfRFdPUkQgRmxhdGVEZWNvZGUoY29uc3QgRlhfQllURSogc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpDQotew0KLSAgICBDQ29kZWNfTW9kdWxlTWdyKiBwRW5jb2RlcnMgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldENvZGVjTW9kdWxlKCk7DQotICAgIGlmIChwRW5jb2RlcnMpIHsNCi0gICAgICAgIHJldHVybiBwRW5jb2RlcnMtPkdldEZsYXRlTW9kdWxlKCktPkZsYXRlT3JMWldEZWNvZGUoRkFMU0UsIHNyY19idWYsIHNyY19zaXplLCBGQUxTRSwgMCwgMCwgMCwgMCwgMCwgZGVzdF9idWYsIGRlc3Rfc2l6ZSk7DQotICAgIH0NCi0gICAgcmV0dXJuIDA7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYXJzZXIuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaCIKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNkZWZpbmUgX1NUUkVBTV9NQVhfU0laRV8JCTIwICogMTAyNCAqIDEwMjQKK0ZYX0RXT1JEIF9BODVEZWNvZGUoY29uc3QgRlhfQllURSogc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpCit7CisgICAgZGVzdF9zaXplID0gMDsKKyAgICBkZXN0X2J1ZiA9IE5VTEw7CisgICAgaWYgKHNyY19zaXplID09IDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEZYX0RXT1JEIG9yaWdfc2l6ZSA9IGRlc3Rfc2l6ZTsKKyAgICBGWF9EV09SRCB6Y291bnQgPSAwOworICAgIEZYX0RXT1JEIHBvcyA9IDA7CisgICAgd2hpbGUgKHBvcyA8IHNyY19zaXplKSB7CisgICAgICAgIEZYX0JZVEUgY2ggPSBzcmNfYnVmW3Bvc107CisgICAgICAgIGlmIChjaCA8ICchJyAmJiBjaCAhPSAnXG4nICYmIGNoICE9ICdccicgJiYgY2ggIT0gJyAnICYmIGNoICE9ICdcdCcpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChjaCA9PSAneicpIHsKKyAgICAgICAgICAgIHpjb3VudCArKzsKKyAgICAgICAgfSBlbHNlIGlmIChjaCA+ICd1JykgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcG9zICsrOworICAgIH0KKyAgICBpZiAocG9zID09IDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICh6Y291bnQgPiBVSU5UX01BWCAvIDQpIHsKKyAgICAgICAgcmV0dXJuIChGWF9EV09SRCkgLSAxOworICAgIH0KKyAgICBpZiAoemNvdW50ICogNCA+IFVJTlRfTUFYIC0gKHBvcyAtIHpjb3VudCkpIHsKKyAgICAgICAgcmV0dXJuIChGWF9EV09SRCkgLSAxOworICAgIH0KKyAgICBkZXN0X2J1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIHpjb3VudCAqIDQgKyAocG9zIC0gemNvdW50KSk7CisgICAgaWYgKGRlc3RfYnVmID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIChGWF9EV09SRCkgLSAxOworICAgIH0KKyAgICBpbnQgc3RhdGUgPSAwLCByZXMgPSAwOworICAgIHBvcyA9IGRlc3Rfc2l6ZSA9IDA7CisgICAgd2hpbGUgKHBvcyA8IHNyY19zaXplKSB7CisgICAgICAgIEZYX0JZVEUgY2ggPSBzcmNfYnVmW3BvcysrXTsKKyAgICAgICAgaWYgKGNoID09ICdcbicgfHwgY2ggPT0gJ1xyJyB8fCBjaCA9PSAnICcgfHwgY2ggPT0gJ1x0JykgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNoID09ICd6JykgeworICAgICAgICAgICAgRlhTWVNfbWVtc2V0MzIoZGVzdF9idWYgKyBkZXN0X3NpemUsIDAsIDQpOworICAgICAgICAgICAgc3RhdGUgPSAwOworICAgICAgICAgICAgcmVzID0gMDsKKyAgICAgICAgICAgIGRlc3Rfc2l6ZSArPSA0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGNoIDwgJyEnIHx8IGNoID4gJ3UnKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXMgPSByZXMgKiA4NSArIGNoIC0gMzM7CisgICAgICAgICAgICBzdGF0ZSArKzsKKyAgICAgICAgICAgIGlmIChzdGF0ZSA9PSA1KSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpICsrKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3RfYnVmW2Rlc3Rfc2l6ZSsrXSA9IChGWF9CWVRFKShyZXMgPj4gKDMgLSBpKSAqIDgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGF0ZSA9IDA7CisgICAgICAgICAgICAgICAgcmVzID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc3RhdGUpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGZvciAoaSA9IHN0YXRlOyBpIDwgNTsgaSArKykgeworICAgICAgICAgICAgcmVzID0gcmVzICogODUgKyA4NDsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RhdGUgLSAxOyBpICsrKSB7CisgICAgICAgICAgICBkZXN0X2J1ZltkZXN0X3NpemUrK10gPSAoRlhfQllURSkocmVzID4+ICgzIC0gaSkgKiA4KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocG9zIDwgc3JjX3NpemUgJiYgc3JjX2J1Zltwb3NdID09ICc+JykgeworICAgICAgICBwb3MgKys7CisgICAgfQorICAgIHJldHVybiBwb3M7Cit9CitGWF9EV09SRCBfSGV4RGVjb2RlKGNvbnN0IEZYX0JZVEUqIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBGWF9MUEJZVEUmIGRlc3RfYnVmLCBGWF9EV09SRCYgZGVzdF9zaXplKQoreworICAgIEZYX0RXT1JEIG9yaWdfc2l6ZSA9IGRlc3Rfc2l6ZTsKKyAgICBGWF9EV09SRCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBzcmNfc2l6ZTsgaSArKykKKyAgICAgICAgaWYgKHNyY19idWZbaV0gPT0gJz4nKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIGRlc3RfYnVmID0gRlhfQWxsb2MoIEZYX0JZVEUsIGkgLyAyICsgMSk7CisgICAgZGVzdF9zaXplID0gMDsKKyAgICBGWF9CT09MIGJGaXJzdERpZ2l0ID0gVFJVRTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc3JjX3NpemU7IGkgKyspIHsKKyAgICAgICAgRlhfQllURSBjaCA9IHNyY19idWZbaV07CisgICAgICAgIGlmIChjaCA9PSAnICcgfHwgY2ggPT0gJ1xuJyB8fCBjaCA9PSAnXHQnIHx8IGNoID09ICdccicpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGludCBkaWdpdDsKKyAgICAgICAgaWYgKGNoIDw9ICc5JyAmJiBjaCA+PSAnMCcpIHsKKyAgICAgICAgICAgIGRpZ2l0ID0gY2ggLSAnMCc7CisgICAgICAgIH0gZWxzZSBpZiAoY2ggPD0gJ2YnICYmIGNoID49ICdhJykgeworICAgICAgICAgICAgZGlnaXQgPSBjaCAtICdhJyArIDEwOworICAgICAgICB9IGVsc2UgaWYgKGNoIDw9ICdGJyAmJiBjaCA+PSAnQScpIHsKKyAgICAgICAgICAgIGRpZ2l0ID0gY2ggLSAnQScgKyAxMDsKKyAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnPicpIHsKKyAgICAgICAgICAgIGkgKys7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChiRmlyc3REaWdpdCkgeworICAgICAgICAgICAgZGVzdF9idWZbZGVzdF9zaXplXSA9IGRpZ2l0ICogMTY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZXN0X2J1ZltkZXN0X3NpemUgKytdICs9IGRpZ2l0OworICAgICAgICB9CisgICAgICAgIGJGaXJzdERpZ2l0ID0gIWJGaXJzdERpZ2l0OworICAgIH0KKyAgICBpZiAoIWJGaXJzdERpZ2l0KSB7CisgICAgICAgIGRlc3Rfc2l6ZSArKzsKKyAgICB9CisgICAgcmV0dXJuIGk7Cit9CitGWF9EV09SRCBSdW5MZW5ndGhEZWNvZGUoY29uc3QgRlhfQllURSogc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpCit7CisgICAgRlhfRFdPUkQgb3JpZ19zaXplID0gZGVzdF9zaXplOworICAgIEZYX0RXT1JEIGkgPSAwOworICAgIEZYX0RXT1JEIG9sZDsKKyAgICBkZXN0X3NpemUgPSAwOworICAgIHdoaWxlIChpIDwgc3JjX3NpemUpIHsKKyAgICAgICAgaWYgKHNyY19idWZbaV0gPCAxMjgpIHsKKyAgICAgICAgICAgIG9sZCA9IGRlc3Rfc2l6ZTsKKyAgICAgICAgICAgIGRlc3Rfc2l6ZSArPSBzcmNfYnVmW2ldICsgMTsKKyAgICAgICAgICAgIGlmIChkZXN0X3NpemUgPCBvbGQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKEZYX0RXT1JEKSAtIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IHNyY19idWZbaV0gKyAyOworICAgICAgICB9IGVsc2UgaWYgKHNyY19idWZbaV0gPiAxMjgpIHsKKyAgICAgICAgICAgIG9sZCA9IGRlc3Rfc2l6ZTsKKyAgICAgICAgICAgIGRlc3Rfc2l6ZSArPSAyNTcgLSBzcmNfYnVmW2ldOworICAgICAgICAgICAgaWYgKGRlc3Rfc2l6ZSA8IG9sZCkgeworICAgICAgICAgICAgICAgIHJldHVybiAoRlhfRFdPUkQpIC0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmIChkZXN0X3NpemUgPj0gX1NUUkVBTV9NQVhfU0laRV8pIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBkZXN0X2J1ZiA9IEZYX0FsbG9jKCBGWF9CWVRFLCBkZXN0X3NpemUpOworICAgIGlmICghZGVzdF9idWYpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpID0gMDsKKyAgICBpbnQgZGVzdF9jb3VudCA9IDA7CisgICAgd2hpbGUgKGkgPCBzcmNfc2l6ZSkgeworICAgICAgICBpZiAoc3JjX2J1ZltpXSA8IDEyOCkgeworICAgICAgICAgICAgRlhfRFdPUkQgY29weV9sZW4gPSBzcmNfYnVmW2ldICsgMTsKKyAgICAgICAgICAgIEZYX0RXT1JEIGJ1Zl9sZWZ0ID0gc3JjX3NpemUgLSBpIC0gMTsKKyAgICAgICAgICAgIGlmIChidWZfbGVmdCA8IGNvcHlfbGVuKSB7CisgICAgICAgICAgICAgICAgRlhfRFdPUkQgZGVsdGEgPSBjb3B5X2xlbiAtIGJ1Zl9sZWZ0OworICAgICAgICAgICAgICAgIGNvcHlfbGVuID0gYnVmX2xlZnQ7CisgICAgICAgICAgICAgICAgRlhTWVNfbWVtc2V0OChkZXN0X2J1ZiArIGRlc3RfY291bnQgKyBjb3B5X2xlbiwgJ1wwJywgZGVsdGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIoZGVzdF9idWYgKyBkZXN0X2NvdW50LCBzcmNfYnVmICsgaSArIDEsIGNvcHlfbGVuKTsKKyAgICAgICAgICAgIGRlc3RfY291bnQgKz0gc3JjX2J1ZltpXSArIDE7CisgICAgICAgICAgICBpICs9IHNyY19idWZbaV0gKyAyOworICAgICAgICB9IGVsc2UgaWYgKHNyY19idWZbaV0gPiAxMjgpIHsKKyAgICAgICAgICAgIGludCBmaWxsID0gMDsKKyAgICAgICAgICAgIGlmIChpIDwgc3JjX3NpemUgLSAxKSB7CisgICAgICAgICAgICAgICAgZmlsbCA9IHNyY19idWZbaSArIDFdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhTWVNfbWVtc2V0OChkZXN0X2J1ZiArIGRlc3RfY291bnQsIGZpbGwsIDI1NyAtIHNyY19idWZbaV0pOworICAgICAgICAgICAgZGVzdF9jb3VudCArPSAyNTcgLSBzcmNfYnVmW2ldOworICAgICAgICAgICAgaSArPSAyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgRlhfRFdPUkQgcmV0ID0gaSArIDE7CisgICAgaWYgKHJldCA+IHNyY19zaXplKSB7CisgICAgICAgIHJldCA9IHNyY19zaXplOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorSUNvZGVjX1NjYW5saW5lRGVjb2RlciogRlBERkFQSV9DcmVhdGVGYXhEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgY29uc3QgQ1BERl9EaWN0aW9uYXJ5KiBwUGFyYW1zKQoreworICAgIGludCBLID0gMDsKKyAgICBGWF9CT09MIEVuZE9mTGluZSA9IEZBTFNFOworICAgIEZYX0JPT0wgQnl0ZUFsaWduID0gRkFMU0U7CisgICAgRlhfQk9PTCBCbGFja0lzMSA9IEZBTFNFOworICAgIEZYX0JPT0wgQ29sdW1ucyA9IDE3Mjg7CisgICAgRlhfQk9PTCBSb3dzID0gMDsKKyAgICBpZiAocFBhcmFtcykgeworICAgICAgICBLID0gcFBhcmFtcy0+R2V0SW50ZWdlcihGWF9CU1RSQygiSyIpKTsKKyAgICAgICAgRW5kT2ZMaW5lID0gcFBhcmFtcy0+R2V0SW50ZWdlcihGWF9CU1RSQygiRW5kT2ZMaW5lIikpOworICAgICAgICBCeXRlQWxpZ24gPSBwUGFyYW1zLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJFbmNvZGVkQnl0ZUFsaWduIikpOworICAgICAgICBCbGFja0lzMSA9IHBQYXJhbXMtPkdldEludGVnZXIoRlhfQlNUUkMoIkJsYWNrSXMxIikpOworICAgICAgICBDb2x1bW5zID0gcFBhcmFtcy0+R2V0SW50ZWdlcihGWF9CU1RSQygiQ29sdW1ucyIpLCAxNzI4KTsKKyAgICAgICAgUm93cyA9IHBQYXJhbXMtPkdldEludGVnZXIoRlhfQlNUUkMoIlJvd3MiKSk7CisgICAgICAgIGlmIChSb3dzID4gVVNIUlRfTUFYKSB7CisgICAgICAgICAgICBSb3dzID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoQ29sdW1ucyA8PSAwIHx8IFJvd3MgPCAwIHx8IENvbHVtbnMgPiBVU0hSVF9NQVggfHwgUm93cyA+IFVTSFJUX01BWCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0RmF4TW9kdWxlKCktPkNyZWF0ZURlY29kZXIoc3JjX2J1Ziwgc3JjX3NpemUsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICBLLCBFbmRPZkxpbmUsIEJ5dGVBbGlnbiwgQmxhY2tJczEsIENvbHVtbnMsIFJvd3MpOworfQorc3RhdGljIEZYX0JPT0wgQ2hlY2tGbGF0ZURlY29kZVBhcmFtcyhpbnQgQ29sb3JzLCBpbnQgQml0c1BlckNvbXBvbmVudCwgaW50IENvbHVtbnMpCit7CisgICAgaWYgKENvbHVtbnMgPCAwKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaW50IGNoZWNrID0gQ29sdW1uczsKKyAgICBpZiAoQ29sb3JzIDwgMCB8fCAoY2hlY2sgPiAwICYmIENvbG9ycyA+IElOVF9NQVggLyBjaGVjaykpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBjaGVjayAqPSBDb2xvcnM7CisgICAgaWYgKEJpdHNQZXJDb21wb25lbnQgPCAwIHx8CisgICAgICAgICAgICAoY2hlY2sgPiAwICYmIEJpdHNQZXJDb21wb25lbnQgPiBJTlRfTUFYIC8gY2hlY2spKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgY2hlY2sgKj0gQml0c1BlckNvbXBvbmVudDsKKyAgICBpZiAoY2hlY2sgPiBJTlRfTUFYIC0gNykgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorSUNvZGVjX1NjYW5saW5lRGVjb2RlciogRlBERkFQSV9DcmVhdGVGbGF0ZURlY29kZXIoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorICAgICAgICBpbnQgbkNvbXBzLCBpbnQgYnBjLCBjb25zdCBDUERGX0RpY3Rpb25hcnkqIHBQYXJhbXMpCit7CisgICAgaW50IHByZWRpY3RvciA9IDA7CisgICAgRlhfQk9PTCBiRWFybHlDaGFuZ2UgPSBUUlVFOworICAgIGludCBDb2xvcnMgPSAwLCBCaXRzUGVyQ29tcG9uZW50ID0gMCwgQ29sdW1ucyA9IDA7CisgICAgaWYgKHBQYXJhbXMpIHsKKyAgICAgICAgcHJlZGljdG9yID0gKChDUERGX0RpY3Rpb25hcnkqKXBQYXJhbXMpLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJQcmVkaWN0b3IiKSk7CisgICAgICAgIGJFYXJseUNoYW5nZSA9ICgoQ1BERl9EaWN0aW9uYXJ5KilwUGFyYW1zKS0+R2V0SW50ZWdlcihGWF9CU1RSQygiRWFybHlDaGFuZ2UiKSwgMSk7CisgICAgICAgIENvbG9ycyA9IHBQYXJhbXMtPkdldEludGVnZXIoRlhfQlNUUkMoIkNvbG9ycyIpLCAxKTsKKyAgICAgICAgQml0c1BlckNvbXBvbmVudCA9IHBQYXJhbXMtPkdldEludGVnZXIoRlhfQlNUUkMoIkJpdHNQZXJDb21wb25lbnQiKSwgOCk7CisgICAgICAgIENvbHVtbnMgPSBwUGFyYW1zLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJDb2x1bW5zIiksIDEpOworICAgICAgICBpZiAoIUNoZWNrRmxhdGVEZWNvZGVQYXJhbXMoQ29sb3JzLCBCaXRzUGVyQ29tcG9uZW50LCBDb2x1bW5zKSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0RmxhdGVNb2R1bGUoKS0+Q3JlYXRlRGVjb2RlcihzcmNfYnVmLCBzcmNfc2l6ZSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgIG5Db21wcywgYnBjLCBwcmVkaWN0b3IsIENvbG9ycywgQml0c1BlckNvbXBvbmVudCwgQ29sdW1ucyk7Cit9CitGWF9EV09SRCBGUERGQVBJX0ZsYXRlT3JMWldEZWNvZGUoRlhfQk9PTCBiTFpXLCBjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ1BERl9EaWN0aW9uYXJ5KiBwUGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGVzdGltYXRlZF9zaXplLCBGWF9MUEJZVEUmIGRlc3RfYnVmLCBGWF9EV09SRCYgZGVzdF9zaXplKQoreworICAgIGludCBwcmVkaWN0b3IgPSAwOworICAgIEZYX0JPT0wgYkVhcmx5Q2hhbmdlID0gVFJVRTsKKyAgICBpbnQgQ29sb3JzID0gMCwgQml0c1BlckNvbXBvbmVudCA9IDAsIENvbHVtbnMgPSAwOworICAgIGlmIChwUGFyYW1zKSB7CisgICAgICAgIHByZWRpY3RvciA9ICgoQ1BERl9EaWN0aW9uYXJ5KilwUGFyYW1zKS0+R2V0SW50ZWdlcihGWF9CU1RSQygiUHJlZGljdG9yIikpOworICAgICAgICBiRWFybHlDaGFuZ2UgPSAoKENQREZfRGljdGlvbmFyeSopcFBhcmFtcyktPkdldEludGVnZXIoRlhfQlNUUkMoIkVhcmx5Q2hhbmdlIiksIDEpOworICAgICAgICBDb2xvcnMgPSBwUGFyYW1zLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJDb2xvcnMiKSwgMSk7CisgICAgICAgIEJpdHNQZXJDb21wb25lbnQgPSBwUGFyYW1zLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJCaXRzUGVyQ29tcG9uZW50IiksIDgpOworICAgICAgICBDb2x1bW5zID0gcFBhcmFtcy0+R2V0SW50ZWdlcihGWF9CU1RSQygiQ29sdW1ucyIpLCAxKTsKKyAgICAgICAgaWYgKCFDaGVja0ZsYXRlRGVjb2RlUGFyYW1zKENvbG9ycywgQml0c1BlckNvbXBvbmVudCwgQ29sdW1ucykpIHsKKyAgICAgICAgICAgIHJldHVybiAoRlhfRFdPUkQpIC0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRGbGF0ZU1vZHVsZSgpLT5GbGF0ZU9yTFpXRGVjb2RlKGJMWlcsIHNyY19idWYsIHNyY19zaXplLAorICAgICAgICAgICAgYkVhcmx5Q2hhbmdlLCBwcmVkaWN0b3IsIENvbG9ycywgQml0c1BlckNvbXBvbmVudCwgQ29sdW1ucywgZXN0aW1hdGVkX3NpemUsCisgICAgICAgICAgICBkZXN0X2J1ZiwgZGVzdF9zaXplKTsKK30KK0ZYX0JPT0wgUERGX0RhdGFEZWNvZGUoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgY29uc3QgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSwgQ0ZYX0J5dGVTdHJpbmcmIEltYWdlRW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSomIHBJbWFnZVBhcm1zLCBGWF9EV09SRCBsYXN0X2VzdGltYXRlZF9zaXplLCBGWF9CT09MIGJJbWFnZUFjYykKKworeworICAgIENQREZfT2JqZWN0KiBwRGVjb2RlciA9IHBEaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkZpbHRlciIpKTsKKyAgICBpZiAocERlY29kZXIgPT0gTlVMTCB8fCAocERlY29kZXItPkdldFR5cGUoKSAhPSBQREZPQkpfQVJSQVkgJiYgcERlY29kZXItPkdldFR5cGUoKSAhPSBQREZPQkpfTkFNRSkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDUERGX09iamVjdCogcFBhcmFtcyA9IHBEaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkRlY29kZVBhcm1zIikpOworICAgIENGWF9CeXRlU3RyaW5nQXJyYXkgRGVjb2Rlckxpc3Q7CisgICAgQ0ZYX1B0ckFycmF5IFBhcmFtTGlzdDsKKyAgICBpZiAocERlY29kZXItPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsKKyAgICAgICAgaWYgKHBQYXJhbXMgJiYgcFBhcmFtcy0+R2V0VHlwZSgpICE9IFBERk9CSl9BUlJBWSkgeworICAgICAgICAgICAgcFBhcmFtcyA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgQ1BERl9BcnJheSogcERlY29kZXJzID0gKENQREZfQXJyYXkqKXBEZWNvZGVyOworICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcERlY29kZXJzLT5HZXRDb3VudCgpOyBpICsrKSB7CisgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZ0Mgc3RyID0gcERlY29kZXJzLT5HZXRDb25zdFN0cmluZyhpKTsKKyAgICAgICAgICAgIERlY29kZXJMaXN0LkFkZChzdHIpOworICAgICAgICAgICAgaWYgKHBQYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBQYXJhbUxpc3QuQWRkKCgoQ1BERl9BcnJheSopcFBhcmFtcyktPkdldERpY3QoaSkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBQYXJhbUxpc3QuQWRkKE5VTEwpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgRGVjb2Rlckxpc3QuQWRkKHBEZWNvZGVyLT5HZXRDb25zdFN0cmluZygpKTsKKyAgICAgICAgUGFyYW1MaXN0LkFkZChwUGFyYW1zLT5HZXREaWN0KCkpOworICAgIH0KKyAgICBGWF9MUEJZVEUgbGFzdF9idWYgPSAoRlhfTFBCWVRFKXNyY19idWY7CisgICAgRlhfRFdPUkQgbGFzdF9zaXplID0gc3JjX3NpemU7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBEZWNvZGVyTGlzdC5HZXRTaXplKCk7IGkgKyspIHsKKyAgICAgICAgaW50IGVzdGltYXRlZF9zaXplID0gaSA9PSBEZWNvZGVyTGlzdC5HZXRTaXplKCkgLSAxID8gbGFzdF9lc3RpbWF0ZWRfc2l6ZSA6IDA7CisgICAgICAgIENGWF9CeXRlU3RyaW5nIGRlY29kZXIgPSBEZWNvZGVyTGlzdFtpXTsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUGFyYW0gPSAoQ1BERl9EaWN0aW9uYXJ5KilQYXJhbUxpc3RbaV07CisgICAgICAgIEZYX0xQQllURSBuZXdfYnVmID0gTlVMTDsKKyAgICAgICAgRlhfRFdPUkQgbmV3X3NpemUgPSAoRlhfRFdPUkQpIC0gMTsKKyAgICAgICAgaW50IG9mZnNldCA9IC0xOworICAgICAgICBpZiAoZGVjb2RlciA9PSBGWF9CU1RSQygiRmxhdGVEZWNvZGUiKSB8fCBkZWNvZGVyID09IEZYX0JTVFJDKCJGbCIpKSB7CisgICAgICAgICAgICBpZiAoYkltYWdlQWNjICYmIGkgPT0gRGVjb2Rlckxpc3QuR2V0U2l6ZSgpIC0gMSkgeworICAgICAgICAgICAgICAgIEltYWdlRW5jb2RpbmcgPSBGWF9CU1RSQygiRmxhdGVEZWNvZGUiKTsKKyAgICAgICAgICAgICAgICBkZXN0X2J1ZiA9IChGWF9MUEJZVEUpbGFzdF9idWY7CisgICAgICAgICAgICAgICAgZGVzdF9zaXplID0gbGFzdF9zaXplOworICAgICAgICAgICAgICAgIHBJbWFnZVBhcm1zID0gcFBhcmFtOworICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBGUERGQVBJX0ZsYXRlT3JMWldEZWNvZGUoRkFMU0UsIGxhc3RfYnVmLCBsYXN0X3NpemUsIHBQYXJhbSwgZXN0aW1hdGVkX3NpemUsIG5ld19idWYsIG5ld19zaXplKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChkZWNvZGVyID09IEZYX0JTVFJDKCJMWldEZWNvZGUiKSB8fCBkZWNvZGVyID09IEZYX0JTVFJDKCJMWlciKSkgeworICAgICAgICAgICAgb2Zmc2V0ID0gRlBERkFQSV9GbGF0ZU9yTFpXRGVjb2RlKFRSVUUsIGxhc3RfYnVmLCBsYXN0X3NpemUsIHBQYXJhbSwgZXN0aW1hdGVkX3NpemUsIG5ld19idWYsIG5ld19zaXplKTsKKyAgICAgICAgfSBlbHNlIGlmIChkZWNvZGVyID09IEZYX0JTVFJDKCJBU0NJSTg1RGVjb2RlIikgfHwgZGVjb2RlciA9PSBGWF9CU1RSQygiQTg1IikpIHsKKyAgICAgICAgICAgIG9mZnNldCA9IF9BODVEZWNvZGUobGFzdF9idWYsIGxhc3Rfc2l6ZSwgbmV3X2J1ZiwgbmV3X3NpemUpOworICAgICAgICB9IGVsc2UgaWYgKGRlY29kZXIgPT0gRlhfQlNUUkMoIkFTQ0lJSGV4RGVjb2RlIikgfHwgZGVjb2RlciA9PSBGWF9CU1RSQygiQUh4IikpIHsKKyAgICAgICAgICAgIG9mZnNldCA9IF9IZXhEZWNvZGUobGFzdF9idWYsIGxhc3Rfc2l6ZSwgbmV3X2J1ZiwgbmV3X3NpemUpOworICAgICAgICB9IGVsc2UgaWYgKGRlY29kZXIgPT0gRlhfQlNUUkMoIlJ1bkxlbmd0aERlY29kZSIpIHx8IGRlY29kZXIgPT0gRlhfQlNUUkMoIlJMIikpIHsKKyAgICAgICAgICAgIGlmIChiSW1hZ2VBY2MgJiYgaSA9PSBEZWNvZGVyTGlzdC5HZXRTaXplKCkgLSAxKSB7CisgICAgICAgICAgICAgICAgSW1hZ2VFbmNvZGluZyA9IEZYX0JTVFJDKCJSdW5MZW5ndGhEZWNvZGUiKTsKKyAgICAgICAgICAgICAgICBkZXN0X2J1ZiA9IChGWF9MUEJZVEUpbGFzdF9idWY7CisgICAgICAgICAgICAgICAgZGVzdF9zaXplID0gbGFzdF9zaXplOworICAgICAgICAgICAgICAgIHBJbWFnZVBhcm1zID0gcFBhcmFtOworICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb2Zmc2V0ID0gUnVuTGVuZ3RoRGVjb2RlKGxhc3RfYnVmLCBsYXN0X3NpemUsIG5ld19idWYsIG5ld19zaXplKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChkZWNvZGVyID09IEZYX0JTVFJDKCJEQ1QiKSkgeworICAgICAgICAgICAgICAgIGRlY29kZXIgPSAiRENURGVjb2RlIjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVjb2RlciA9PSBGWF9CU1RSQygiQ0NGIikpIHsKKyAgICAgICAgICAgICAgICBkZWNvZGVyID0gIkNDSVRURmF4RGVjb2RlIjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVjb2RlciA9PSBGWF9CU1RSQygiQ3J5cHQiKSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgSW1hZ2VFbmNvZGluZyA9IGRlY29kZXI7CisgICAgICAgICAgICBwSW1hZ2VQYXJtcyA9IHBQYXJhbTsKKyAgICAgICAgICAgIGRlc3RfYnVmID0gKEZYX0xQQllURSlsYXN0X2J1ZjsKKyAgICAgICAgICAgIGRlc3Rfc2l6ZSA9IGxhc3Rfc2l6ZTsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIGlmIChsYXN0X2J1ZiAhPSBzcmNfYnVmKSB7CisgICAgICAgICAgICBGWF9GcmVlKGxhc3RfYnVmKTsKKyAgICAgICAgfQorICAgICAgICBpZiAob2Zmc2V0ID09IC0xKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgbGFzdF9idWYgPSBuZXdfYnVmOworICAgICAgICBsYXN0X3NpemUgPSBuZXdfc2l6ZTsKKyAgICB9CisgICAgSW1hZ2VFbmNvZGluZyA9ICIiOworICAgIHBJbWFnZVBhcm1zID0gTlVMTDsKKyAgICBkZXN0X2J1ZiA9IGxhc3RfYnVmOworICAgIGRlc3Rfc2l6ZSA9IGxhc3Rfc2l6ZTsKKyAgICByZXR1cm4gVFJVRTsKK30KK2V4dGVybiBjb25zdCBGWF9XT1JEIFBERkRvY0VuY29kaW5nWzI1Nl0gPSB7CisgICAgMHgwMDAwLCAweDAwMDEsIDB4MDAwMiwgMHgwMDAzLCAweDAwMDQsIDB4MDAwNSwgMHgwMDA2LCAweDAwMDcsIDB4MDAwOCwgMHgwMDA5LAorICAgIDB4MDAwYSwgMHgwMDBiLCAweDAwMGMsIDB4MDAwZCwgMHgwMDBlLCAweDAwMGYsIDB4MDAxMCwgMHgwMDExLCAweDAwMTIsIDB4MDAxMywKKyAgICAweDAwMTQsIDB4MDAxNSwgMHgwMDE2LCAweDAwMTcsIDB4MDJkOCwgMHgwMmM3LCAweDAyYzYsIDB4MDJkOSwgMHgwMmRkLCAweDAyZGIsCisgICAgMHgwMmRhLCAweDAyZGMsIDB4MDAyMCwgMHgwMDIxLCAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LAorICAgIDB4MDAyOCwgMHgwMDI5LCAweDAwMmEsIDB4MDAyYiwgMHgwMDJjLCAweDAwMmQsIDB4MDAyZSwgMHgwMDJmLCAweDAwMzAsIDB4MDAzMSwKKyAgICAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LCAweDAwMzgsIDB4MDAzOSwgMHgwMDNhLCAweDAwM2IsCisgICAgMHgwMDNjLCAweDAwM2QsIDB4MDAzZSwgMHgwMDNmLCAweDAwNDAsIDB4MDA0MSwgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LAorICAgIDB4MDA0NiwgMHgwMDQ3LCAweDAwNDgsIDB4MDA0OSwgMHgwMDRhLCAweDAwNGIsIDB4MDA0YywgMHgwMDRkLCAweDAwNGUsIDB4MDA0ZiwKKyAgICAweDAwNTAsIDB4MDA1MSwgMHgwMDUyLCAweDAwNTMsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTYsIDB4MDA1NywgMHgwMDU4LCAweDAwNTksCisgICAgMHgwMDVhLCAweDAwNWIsIDB4MDA1YywgMHgwMDVkLCAweDAwNWUsIDB4MDA1ZiwgMHgwMDYwLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLAorICAgIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywgMHgwMDY4LCAweDAwNjksIDB4MDA2YSwgMHgwMDZiLCAweDAwNmMsIDB4MDA2ZCwKKyAgICAweDAwNmUsIDB4MDA2ZiwgMHgwMDcwLCAweDAwNzEsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsCisgICAgMHgwMDc4LCAweDAwNzksIDB4MDA3YSwgMHgwMDdiLCAweDAwN2MsIDB4MDA3ZCwgMHgwMDdlLCAweDAwMDAsIDB4MjAyMiwgMHgyMDIwLAorICAgIDB4MjAyMSwgMHgyMDI2LCAweDIwMTQsIDB4MjAxMywgMHgwMTkyLCAweDIwNDQsIDB4MjAzOSwgMHgyMDNhLCAweDIyMTIsIDB4MjAzMCwKKyAgICAweDIwMWUsIDB4MjAxYywgMHgyMDFkLCAweDIwMTgsIDB4MjAxOSwgMHgyMDFhLCAweDIxMjIsIDB4ZmIwMSwgMHhmYjAyLCAweDAxNDEsCisgICAgMHgwMTUyLCAweDAxNjAsIDB4MDE3OCwgMHgwMTdkLCAweDAxMzEsIDB4MDE0MiwgMHgwMTUzLCAweDAxNjEsIDB4MDE3ZSwgMHgwMDAwLAorICAgIDB4MjBhYywgMHgwMGExLCAweDAwYTIsIDB4MDBhMywgMHgwMGE0LCAweDAwYTUsIDB4MDBhNiwgMHgwMGE3LCAweDAwYTgsIDB4MDBhOSwKKyAgICAweDAwYWEsIDB4MDBhYiwgMHgwMGFjLCAweDAwMDAsIDB4MDBhZSwgMHgwMGFmLCAweDAwYjAsIDB4MDBiMSwgMHgwMGIyLCAweDAwYjMsCisgICAgMHgwMGI0LCAweDAwYjUsIDB4MDBiNiwgMHgwMGI3LCAweDAwYjgsIDB4MDBiOSwgMHgwMGJhLCAweDAwYmIsIDB4MDBiYywgMHgwMGJkLAorICAgIDB4MDBiZSwgMHgwMGJmLCAweDAwYzAsIDB4MDBjMSwgMHgwMGMyLCAweDAwYzMsIDB4MDBjNCwgMHgwMGM1LCAweDAwYzYsIDB4MDBjNywKKyAgICAweDAwYzgsIDB4MDBjOSwgMHgwMGNhLCAweDAwY2IsIDB4MDBjYywgMHgwMGNkLCAweDAwY2UsIDB4MDBjZiwgMHgwMGQwLCAweDAwZDEsCisgICAgMHgwMGQyLCAweDAwZDMsIDB4MDBkNCwgMHgwMGQ1LCAweDAwZDYsIDB4MDBkNywgMHgwMGQ4LCAweDAwZDksIDB4MDBkYSwgMHgwMGRiLAorICAgIDB4MDBkYywgMHgwMGRkLCAweDAwZGUsIDB4MDBkZiwgMHgwMGUwLCAweDAwZTEsIDB4MDBlMiwgMHgwMGUzLCAweDAwZTQsIDB4MDBlNSwKKyAgICAweDAwZTYsIDB4MDBlNywgMHgwMGU4LCAweDAwZTksIDB4MDBlYSwgMHgwMGViLCAweDAwZWMsIDB4MDBlZCwgMHgwMGVlLCAweDAwZWYsCisgICAgMHgwMGYwLCAweDAwZjEsIDB4MDBmMiwgMHgwMGYzLCAweDAwZjQsIDB4MDBmNSwgMHgwMGY2LCAweDAwZjcsIDB4MDBmOCwgMHgwMGY5LAorICAgIDB4MDBmYSwgMHgwMGZiLCAweDAwZmMsIDB4MDBmZCwgMHgwMGZlLCAweDAwZmYKK307CitDRlhfV2lkZVN0cmluZyBQREZfRGVjb2RlVGV4dChGWF9MUENCWVRFIHNyY19kYXRhLCBGWF9EV09SRCBzcmNfbGVuLCBDRlhfQ2hhck1hcCogcENoYXJNYXApCit7CisgICAgQ0ZYX1dpZGVTdHJpbmcgcmVzdWx0OworICAgIGlmIChzcmNfbGVuID49IDIgJiYgKChzcmNfZGF0YVswXSA9PSAweGZlICYmIHNyY19kYXRhWzFdID09IDB4ZmYpIHx8IChzcmNfZGF0YVswXSA9PSAweGZmICYmIHNyY19kYXRhWzFdID09IDB4ZmUpKSkgeworICAgICAgICBGWF9CT09MIGJCRSA9IHNyY19kYXRhWzBdID09IDB4ZmU7CisgICAgICAgIGludCBtYXhfY2hhcnMgPSAoc3JjX2xlbiAtIDIpIC8gMjsKKyAgICAgICAgaWYgKCFtYXhfY2hhcnMpIHsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNyY19kYXRhWzBdID09IDB4ZmYpIHsKKyAgICAgICAgICAgIGJCRSA9ICFzcmNfZGF0YVsyXTsKKyAgICAgICAgfQorICAgICAgICBGWF9MUFdTVFIgZGVzdF9idWYgPSByZXN1bHQuR2V0QnVmZmVyKG1heF9jaGFycyk7CisgICAgICAgIEZYX0xQQ0JZVEUgdW5pX3N0ciA9IHNyY19kYXRhICsgMjsKKyAgICAgICAgaW50IGRlc3RfcG9zID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhfY2hhcnMgKiAyOyBpICs9IDIpIHsKKyAgICAgICAgICAgIEZYX1dPUkQgdW5pY29kZSA9IGJCRSA/ICh1bmlfc3RyW2ldIDw8IDggfCB1bmlfc3RyW2kgKyAxXSkgOiAodW5pX3N0cltpICsgMV0gPDwgOCB8IHVuaV9zdHJbaV0pOworICAgICAgICAgICAgaWYgKHVuaWNvZGUgPT0gMHgxYikgeworICAgICAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IG1heF9jaGFycyAqIDIpIHsKKyAgICAgICAgICAgICAgICAgICAgRlhfV09SRCB1bmljb2RlID0gYkJFID8gKHVuaV9zdHJbaV0gPDwgOCB8IHVuaV9zdHJbaSArIDFdKSA6ICh1bmlfc3RyW2kgKyAxXSA8PCA4IHwgdW5pX3N0cltpXSk7CisgICAgICAgICAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGUgPT0gMHgxYikgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlc3RfYnVmW2Rlc3RfcG9zKytdID0gdW5pY29kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXN1bHQuUmVsZWFzZUJ1ZmZlcihkZXN0X3Bvcyk7CisgICAgfSBlbHNlIGlmIChwQ2hhck1hcCA9PSBOVUxMKSB7CisgICAgICAgIEZYX0xQV1NUUiBkZXN0X2J1ZiA9IHJlc3VsdC5HZXRCdWZmZXIoc3JjX2xlbik7CisgICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBzcmNfbGVuOyBpICsrKSB7CisgICAgICAgICAgICBkZXN0X2J1ZltpXSA9IFBERkRvY0VuY29kaW5nW3NyY19kYXRhW2ldXTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQuUmVsZWFzZUJ1ZmZlcihzcmNfbGVuKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gKCpwQ2hhck1hcC0+bV9HZXRXaWRlU3RyaW5nKShwQ2hhck1hcCwgQ0ZYX0J5dGVTdHJpbmcoKEZYX0xQQ1NUUilzcmNfZGF0YSwgc3JjX2xlbikpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorQ0ZYX1dpZGVTdHJpbmcgUERGX0RlY29kZVRleHQoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGJzdHIsIENGWF9DaGFyTWFwKiBwQ2hhck1hcCkKK3sKKyAgICByZXR1cm4gUERGX0RlY29kZVRleHQoKEZYX0xQQ0JZVEUpKEZYX0xQQ1NUUilic3RyLCBic3RyLkdldExlbmd0aCgpLCBwQ2hhck1hcCk7Cit9CitDRlhfQnl0ZVN0cmluZyBQREZfRW5jb2RlVGV4dChGWF9MUENXU1RSIHBTdHJpbmcsIGludCBsZW4sIENGWF9DaGFyTWFwKiBwQ2hhck1hcCkKK3sKKyAgICBpZiAobGVuID09IC0xKSB7CisgICAgICAgIGxlbiA9IChGWF9TVFJTSVpFKUZYU1lTX3djc2xlbihwU3RyaW5nKTsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgcmVzdWx0OworICAgIGlmIChwQ2hhck1hcCA9PSBOVUxMKSB7CisgICAgICAgIEZYX0xQU1RSIGRlc3RfYnVmMSA9IHJlc3VsdC5HZXRCdWZmZXIobGVuKTsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKyspIHsKKyAgICAgICAgICAgIGludCBjb2RlOworICAgICAgICAgICAgZm9yIChjb2RlID0gMDsgY29kZSA8IDI1NjsgY29kZSArKykKKyAgICAgICAgICAgICAgICBpZiAoUERGRG9jRW5jb2RpbmdbY29kZV0gPT0gcFN0cmluZ1tpXSkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29kZSA9PSAyNTYpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlc3RfYnVmMVtpXSA9IGNvZGU7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0LlJlbGVhc2VCdWZmZXIoaSk7CisgICAgICAgIGlmIChpID09IGxlbikgeworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBGWF9MUEJZVEUgZGVzdF9idWYyID0gKEZYX0xQQllURSlyZXN1bHQuR2V0QnVmZmVyKGxlbiAqIDIgKyAyKTsKKyAgICBkZXN0X2J1ZjJbMF0gPSAweGZlOworICAgIGRlc3RfYnVmMlsxXSA9IDB4ZmY7CisgICAgZGVzdF9idWYyICs9IDI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkgKyspIHsKKyAgICAgICAgKmRlc3RfYnVmMisrID0gcFN0cmluZ1tpXSA+PiA4OworICAgICAgICAqZGVzdF9idWYyKysgPSAoRlhfQllURSlwU3RyaW5nW2ldOworICAgIH0KKyAgICByZXN1bHQuUmVsZWFzZUJ1ZmZlcihsZW4gKiAyICsgMik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KK0NGWF9CeXRlU3RyaW5nIFBERl9FbmNvZGVTdHJpbmcoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNyYywgRlhfQk9PTCBiSGV4KQoreworICAgIENGWF9CeXRlVGV4dEJ1ZiByZXN1bHQ7CisgICAgaW50IHNyY2xlbiA9IHNyYy5HZXRMZW5ndGgoKTsKKyAgICBpZiAoYkhleCkgeworICAgICAgICByZXN1bHQuQXBwZW5kQ2hhcignPCcpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNyY2xlbjsgaSArKykgeworICAgICAgICAgICAgcmVzdWx0LkFwcGVuZENoYXIoIjAxMjM0NTY3ODlBQkNERUYiW3NyY1tpXSAvIDE2XSk7CisgICAgICAgICAgICByZXN1bHQuQXBwZW5kQ2hhcigiMDEyMzQ1Njc4OUFCQ0RFRiJbc3JjW2ldICUgMTZdKTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQuQXBwZW5kQ2hhcignPicpOworICAgICAgICByZXR1cm4gcmVzdWx0LkdldEJ5dGVTdHJpbmcoKTsKKyAgICB9CisgICAgcmVzdWx0LkFwcGVuZENoYXIoJygnKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNyY2xlbjsgaSArKykgeworICAgICAgICBGWF9CWVRFIGNoID0gc3JjW2ldOworICAgICAgICBpZiAoY2ggPT0gJyknIHx8IGNoID09ICdcXCcgfHwgY2ggPT0gJygnKSB7CisgICAgICAgICAgICByZXN1bHQuQXBwZW5kQ2hhcignXFwnKTsKKyAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAweDBhKSB7CisgICAgICAgICAgICByZXN1bHQgPDwgRlhfQlNUUkMoIlxcbiIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gMHgwZCkgeworICAgICAgICAgICAgcmVzdWx0IDw8IEZYX0JTVFJDKCJcXHIiKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHJlc3VsdC5BcHBlbmRDaGFyKGNoKTsKKyAgICB9CisgICAgcmVzdWx0LkFwcGVuZENoYXIoJyknKTsKKyAgICByZXR1cm4gcmVzdWx0LkdldEJ5dGVTdHJpbmcoKTsKK30KK3ZvaWQgRmxhdGVFbmNvZGUoY29uc3QgRlhfQllURSogc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpCit7CisgICAgQ0NvZGVjX01vZHVsZU1nciogcEVuY29kZXJzID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpOworICAgIGlmIChwRW5jb2RlcnMpIHsKKyAgICAgICAgcEVuY29kZXJzLT5HZXRGbGF0ZU1vZHVsZSgpLT5FbmNvZGUoc3JjX2J1Ziwgc3JjX3NpemUsIGRlc3RfYnVmLCBkZXN0X3NpemUpOworICAgIH0KK30KK3ZvaWQgRmxhdGVFbmNvZGUoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50IHByZWRpY3RvciwgaW50IENvbG9ycywgaW50IEJpdHNQZXJDb21wb25lbnQsIGludCBDb2x1bW5zLAorICAgICAgICAgICAgICAgICBGWF9MUEJZVEUmIGRlc3RfYnVmLCBGWF9EV09SRCYgZGVzdF9zaXplKQoreworICAgIENDb2RlY19Nb2R1bGVNZ3IqIHBFbmNvZGVycyA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKTsKKyAgICBpZiAocEVuY29kZXJzKSB7CisgICAgICAgIHBFbmNvZGVycy0+R2V0RmxhdGVNb2R1bGUoKS0+RW5jb2RlKHNyY19idWYsIHNyY19zaXplLCBwcmVkaWN0b3IsIENvbG9ycywgQml0c1BlckNvbXBvbmVudCwgQ29sdW1ucywgZGVzdF9idWYsIGRlc3Rfc2l6ZSk7CisgICAgfQorfQorRlhfRFdPUkQgRmxhdGVEZWNvZGUoY29uc3QgRlhfQllURSogc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpCit7CisgICAgQ0NvZGVjX01vZHVsZU1nciogcEVuY29kZXJzID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpOworICAgIGlmIChwRW5jb2RlcnMpIHsKKyAgICAgICAgcmV0dXJuIHBFbmNvZGVycy0+R2V0RmxhdGVNb2R1bGUoKS0+RmxhdGVPckxaV0RlY29kZShGQUxTRSwgc3JjX2J1Ziwgc3JjX3NpemUsIEZBTFNFLCAwLCAwLCAwLCAwLCAwLCBkZXN0X2J1ZiwgZGVzdF9zaXplKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFyc2VyL2ZwZGZfcGFyc2VyX2RvY3VtZW50LmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYXJzZXIvZnBkZl9wYXJzZXJfZG9jdW1lbnQuY3BwCmluZGV4IDA2OGE2MDYuLmE0OTgyMDQgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYXJzZXIvZnBkZl9wYXJzZXJfZG9jdW1lbnQuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYXJzZXIvZnBkZl9wYXJzZXJfZG9jdW1lbnQuY3BwCkBAIC0xLDM5OCArMSwzOTggQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYXJzZXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfbW9kdWxlLmgiDQotZXh0ZXJuIEZYX0xQVk9JRCBQREZQcmV2aWV3SW5pdENhY2hlKENQREZfRG9jdW1lbnQqIHBEb2MpOw0KLWV4dGVybiB2b2lkIFBERlByZXZpZXdDbGVhckNhY2hlKEZYX0xQVk9JRCBwQ2FjaGUpOw0KLUNQREZfRG9jdW1lbnQ6OkNQREZfRG9jdW1lbnQoSVBERl9Eb2NQYXJzZXIqIHBQYXJzZXIpIDogQ1BERl9JbmRpcmVjdE9iamVjdHMocFBhcnNlcikNCi17DQotICAgIEFTU0VSVChwUGFyc2VyICE9IE5VTEwpOw0KLSAgICBtX3BSb290RGljdCA9IE5VTEw7DQotICAgIG1fcEluZm9EaWN0ID0gTlVMTDsNCi0gICAgbV9iTGluZWFyaXplZCA9IEZBTFNFOw0KLSAgICBtX2R3Rmlyc3RQYWdlTm8gPSAwOw0KLSAgICBtX2R3Rmlyc3RQYWdlT2JqTnVtID0gMDsNCi0gICAgbV9wRG9jUGFnZSA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UGFnZU1vZHVsZSgpLT5DcmVhdGVEb2NEYXRhKHRoaXMpOw0KLSAgICBtX3BEb2NSZW5kZXIgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldFJlbmRlck1vZHVsZSgpLT5DcmVhdGVEb2NEYXRhKHRoaXMpOw0KLX0NCi1DUERGX0RvY1BhZ2VEYXRhKiBDUERGX0RvY3VtZW50OjpHZXRWYWxpZGF0ZVBhZ2VEYXRhKCkNCi17DQotICAgIGlmIChtX3BEb2NQYWdlKSB7DQotICAgICAgICByZXR1cm4gbV9wRG9jUGFnZTsNCi0gICAgfQ0KLSAgICBtX3BEb2NQYWdlID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRQYWdlTW9kdWxlKCktPkNyZWF0ZURvY0RhdGEodGhpcyk7DQotICAgIHJldHVybiBtX3BEb2NQYWdlOw0KLX0NCi1DUERGX0RvY1JlbmRlckRhdGEqIENQREZfRG9jdW1lbnQ6OkdldFZhbGlkYXRlUmVuZGVyRGF0YSgpDQotew0KLSAgICBpZiAobV9wRG9jUmVuZGVyKSB7DQotICAgICAgICByZXR1cm4gbV9wRG9jUmVuZGVyOw0KLSAgICB9DQotICAgIG1fcERvY1JlbmRlciA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UmVuZGVyTW9kdWxlKCktPkNyZWF0ZURvY0RhdGEodGhpcyk7DQotICAgIHJldHVybiBtX3BEb2NSZW5kZXI7DQotfQ0KLXZvaWQgQ1BERl9Eb2N1bWVudDo6TG9hZERvYygpDQotew0KLSAgICBtX0xhc3RPYmpOdW0gPSBtX3BQYXJzZXItPkdldExhc3RPYmpOdW0oKTsNCi0gICAgQ1BERl9PYmplY3QqIHBSb290T2JqID0gR2V0SW5kaXJlY3RPYmplY3QobV9wUGFyc2VyLT5HZXRSb290T2JqTnVtKCkpOw0KLSAgICBpZiAocFJvb3RPYmogPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fcFJvb3REaWN0ID0gcFJvb3RPYmotPkdldERpY3QoKTsNCi0gICAgaWYgKG1fcFJvb3REaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDUERGX09iamVjdCogcEluZm9PYmogPSBHZXRJbmRpcmVjdE9iamVjdChtX3BQYXJzZXItPkdldEluZm9PYmpOdW0oKSk7DQotICAgIGlmIChwSW5mb09iaikgew0KLSAgICAgICAgbV9wSW5mb0RpY3QgPSBwSW5mb09iai0+R2V0RGljdCgpOw0KLSAgICB9DQotICAgIENQREZfQXJyYXkqIHBJREFycmF5ID0gbV9wUGFyc2VyLT5HZXRJREFycmF5KCk7DQotICAgIGlmIChwSURBcnJheSkgew0KLSAgICAgICAgbV9JRDEgPSBwSURBcnJheS0+R2V0U3RyaW5nKDApOw0KLSAgICAgICAgbV9JRDIgPSBwSURBcnJheS0+R2V0U3RyaW5nKDEpOw0KLSAgICB9DQotICAgIG1fUGFnZUxpc3QuU2V0U2l6ZShfR2V0UGFnZUNvdW50KCkpOw0KLX0NCi12b2lkIENQREZfRG9jdW1lbnQ6OkxvYWRBc3luRG9jKENQREZfRGljdGlvbmFyeSAqcExpbmVhcml6ZWQpDQotew0KLSAgICBtX2JMaW5lYXJpemVkID0gVFJVRTsNCi0gICAgbV9MYXN0T2JqTnVtID0gbV9wUGFyc2VyLT5HZXRMYXN0T2JqTnVtKCk7DQotICAgIG1fcFJvb3REaWN0ID0gR2V0SW5kaXJlY3RPYmplY3QobV9wUGFyc2VyLT5HZXRSb290T2JqTnVtKCkpLT5HZXREaWN0KCk7DQotICAgIGlmIChtX3BSb290RGljdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbV9wSW5mb0RpY3QgPSBHZXRJbmRpcmVjdE9iamVjdChtX3BQYXJzZXItPkdldEluZm9PYmpOdW0oKSktPkdldERpY3QoKTsNCi0gICAgQ1BERl9BcnJheSogcElEQXJyYXkgPSBtX3BQYXJzZXItPkdldElEQXJyYXkoKTsNCi0gICAgaWYgKHBJREFycmF5KSB7DQotICAgICAgICBtX0lEMSA9IHBJREFycmF5LT5HZXRTdHJpbmcoMCk7DQotICAgICAgICBtX0lEMiA9IHBJREFycmF5LT5HZXRTdHJpbmcoMSk7DQotICAgIH0NCi0gICAgRlhfRFdPUkQgZHdQYWdlQ291bnQgPSAwOw0KLSAgICBDUERGX09iamVjdCAqcENvdW50ID0gcExpbmVhcml6ZWQtPkdldEVsZW1lbnQoRlhfQlNUUkMoIk4iKSk7DQotICAgIGlmIChwQ291bnQgJiYgcENvdW50LT5HZXRUeXBlKCkgPT0gUERGT0JKX05VTUJFUikgew0KLSAgICAgICAgZHdQYWdlQ291bnQgPSBwQ291bnQtPkdldEludGVnZXIoKTsNCi0gICAgfQ0KLSAgICBtX1BhZ2VMaXN0LlNldFNpemUoZHdQYWdlQ291bnQpOw0KLSAgICBDUERGX09iamVjdCAqcE5vID0gcExpbmVhcml6ZWQtPkdldEVsZW1lbnQoRlhfQlNUUkMoIlAiKSk7DQotICAgIGlmIChwTm8gJiYgcE5vLT5HZXRUeXBlKCkgPT0gUERGT0JKX05VTUJFUikgew0KLSAgICAgICAgbV9kd0ZpcnN0UGFnZU5vID0gcE5vLT5HZXRJbnRlZ2VyKCk7DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QgKnBPYmpOdW0gPSBwTGluZWFyaXplZC0+R2V0RWxlbWVudChGWF9CU1RSQygiTyIpKTsNCi0gICAgaWYgKHBPYmpOdW0gJiYgcE9iak51bS0+R2V0VHlwZSgpID09IFBERk9CSl9OVU1CRVIpIHsNCi0gICAgICAgIG1fZHdGaXJzdFBhZ2VPYmpOdW0gPSBwT2JqTnVtLT5HZXRJbnRlZ2VyKCk7DQotICAgIH0NCi19DQotdm9pZCBDUERGX0RvY3VtZW50OjpMb2FkUGFnZXMoKQ0KLXsNCi0gICAgbV9QYWdlTGlzdC5TZXRTaXplKF9HZXRQYWdlQ291bnQoKSk7DQotfQ0KLWV4dGVybiB2b2lkIEZQREZfVFRGYWNlTWFwcGVyX1JlbGVhc2VEb2MoQ1BERl9Eb2N1bWVudCopOw0KLUNQREZfRG9jdW1lbnQ6On5DUERGX0RvY3VtZW50KCkNCi17DQotICAgIGlmIChtX3BEb2NSZW5kZXIpIHsNCi0gICAgICAgIENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UmVuZGVyTW9kdWxlKCktPkRlc3Ryb3lEb2NEYXRhKG1fcERvY1JlbmRlcik7DQotICAgIH0NCi0gICAgaWYgKG1fcERvY1BhZ2UpIHsNCi0gICAgICAgIENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UGFnZU1vZHVsZSgpLT5SZWxlYXNlRG9jKHRoaXMpOw0KLSAgICAgICAgQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRQYWdlTW9kdWxlKCktPkNsZWFyU3RvY2tGb250KHRoaXMpOw0KLSAgICB9DQotfQ0KLSNkZWZpbmUJCUZYX01BWF9QQUdFX0xFVkVMCQkJMTAyNA0KLUNQREZfRGljdGlvbmFyeSogQ1BERl9Eb2N1bWVudDo6X0ZpbmRQREZQYWdlKENQREZfRGljdGlvbmFyeSogcFBhZ2VzLCBpbnQgaVBhZ2UsIGludCBuUGFnZXNUb0dvLCBpbnQgbGV2ZWwpDQotew0KLSAgICBDUERGX0FycmF5KiBwS2lkTGlzdCA9IHBQYWdlcy0+R2V0QXJyYXkoRlhfQlNUUkMoIktpZHMiKSk7DQotICAgIGlmIChwS2lkTGlzdCA9PSBOVUxMKSB7DQotICAgICAgICBpZiAoblBhZ2VzVG9HbyA9PSAwKSB7DQotICAgICAgICAgICAgcmV0dXJuIHBQYWdlczsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmIChsZXZlbCA+PSBGWF9NQVhfUEFHRV9MRVZFTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaW50IG5LaWRzID0gcEtpZExpc3QtPkdldENvdW50KCk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbktpZHM7IGkgKyspIHsNCi0gICAgICAgIENQREZfRGljdGlvbmFyeSogcEtpZCA9IHBLaWRMaXN0LT5HZXREaWN0KGkpOw0KLSAgICAgICAgaWYgKHBLaWQgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIG5QYWdlc1RvR28gLS07DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAocEtpZCA9PSBwUGFnZXMpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICghcEtpZC0+S2V5RXhpc3QoRlhfQlNUUkMoIktpZHMiKSkpIHsNCi0gICAgICAgICAgICBpZiAoblBhZ2VzVG9HbyA9PSAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBwS2lkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBtX1BhZ2VMaXN0LlNldEF0KGlQYWdlIC0gblBhZ2VzVG9HbywgcEtpZC0+R2V0T2JqTnVtKCkpOw0KLSAgICAgICAgICAgIG5QYWdlc1RvR28gLS07DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGludCBuUGFnZXMgPSBwS2lkLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJDb3VudCIpKTsNCi0gICAgICAgICAgICBpZiAoblBhZ2VzVG9HbyA8IG5QYWdlcykgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gX0ZpbmRQREZQYWdlKHBLaWQsIGlQYWdlLCBuUGFnZXNUb0dvLCBsZXZlbCArIDEpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBuUGFnZXNUb0dvIC09IG5QYWdlczsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotQ1BERl9EaWN0aW9uYXJ5KiBDUERGX0RvY3VtZW50OjpHZXRQYWdlKGludCBpUGFnZSkNCi17DQotICAgIGlmIChpUGFnZSA8IDAgfHwgaVBhZ2UgPj0gbV9QYWdlTGlzdC5HZXRTaXplKCkpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmIChtX2JMaW5lYXJpemVkICYmIChpUGFnZSA9PSAoaW50KW1fZHdGaXJzdFBhZ2VObykpIHsNCi0gICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gR2V0SW5kaXJlY3RPYmplY3QobV9kd0ZpcnN0UGFnZU9iak51bSk7DQotICAgICAgICBpZiAocE9iaiAmJiBwT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpIHsNCi0gICAgICAgICAgICByZXR1cm4gKENQREZfRGljdGlvbmFyeSopcE9iajsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpbnQgb2JqbnVtID0gbV9QYWdlTGlzdC5HZXRBdChpUGFnZSk7DQotICAgIGlmIChvYmpudW0pIHsNCi0gICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gR2V0SW5kaXJlY3RPYmplY3Qob2JqbnVtKTsNCi0gICAgICAgIEFTU0VSVChwT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpOw0KLSAgICAgICAgcmV0dXJuIChDUERGX0RpY3Rpb25hcnkqKXBPYmo7DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwUm9vdCA9IEdldFJvb3QoKTsNCi0gICAgaWYgKHBSb290ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcFBhZ2VzID0gcFJvb3QtPkdldERpY3QoRlhfQlNUUkMoIlBhZ2VzIikpOw0KLSAgICBpZiAocFBhZ2VzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcFBhZ2UgPSBfRmluZFBERlBhZ2UocFBhZ2VzLCBpUGFnZSwgaVBhZ2UsIDApOw0KLSAgICBpZiAocFBhZ2UgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgbV9QYWdlTGlzdC5TZXRBdChpUGFnZSwgcFBhZ2UtPkdldE9iak51bSgpKTsNCi0gICAgcmV0dXJuIHBQYWdlOw0KLX0NCi1pbnQgQ1BERl9Eb2N1bWVudDo6X0ZpbmRQYWdlSW5kZXgoQ1BERl9EaWN0aW9uYXJ5KiBwTm9kZSwgRlhfRFdPUkQmIHNraXBfY291bnQsIEZYX0RXT1JEIG9iam51bSwgaW50JiBpbmRleCwgaW50IGxldmVsKQ0KLXsNCi0gICAgaWYgKHBOb2RlLT5LZXlFeGlzdChGWF9CU1RSQygiS2lkcyIpKSkgew0KLSAgICAgICAgQ1BERl9BcnJheSogcEtpZExpc3QgPSBwTm9kZS0+R2V0QXJyYXkoRlhfQlNUUkMoIktpZHMiKSk7DQotICAgICAgICBpZiAocEtpZExpc3QgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChsZXZlbCA+PSBGWF9NQVhfUEFHRV9MRVZFTCkgew0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0RXT1JEIGNvdW50ID0gcE5vZGUtPkdldEludGVnZXIoRlhfQlNUUkMoIkNvdW50IikpOw0KLSAgICAgICAgaWYgKGNvdW50IDw9IHNraXBfY291bnQpIHsNCi0gICAgICAgICAgICBza2lwX2NvdW50IC09IGNvdW50Ow0KLSAgICAgICAgICAgIGluZGV4ICs9IGNvdW50Ow0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChjb3VudCAmJiBjb3VudCA9PSBwS2lkTGlzdC0+R2V0Q291bnQoKSkgew0KLSAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBjb3VudDsgaSArKykgew0KLSAgICAgICAgICAgICAgICBDUERGX1JlZmVyZW5jZSogcEtpZCA9IChDUERGX1JlZmVyZW5jZSopcEtpZExpc3QtPkdldEVsZW1lbnQoaSk7DQotICAgICAgICAgICAgICAgIGlmIChwS2lkICYmIHBLaWQtPkdldFR5cGUoKSA9PSBQREZPQkpfUkVGRVJFTkNFKSB7DQotICAgICAgICAgICAgICAgICAgICBpZiAocEtpZC0+R2V0UmVmT2JqTnVtKCkgPT0gb2JqbnVtKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9QYWdlTGlzdC5TZXRBdChpbmRleCArIGksIG9iam51bSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4ICsgaTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwS2lkTGlzdC0+R2V0Q291bnQoKTsgaSArKykgew0KLSAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcEtpZCA9IHBLaWRMaXN0LT5HZXREaWN0KGkpOw0KLSAgICAgICAgICAgIGlmIChwS2lkID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChwS2lkID09IHBOb2RlKSB7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpbnQgZm91bmRfaW5kZXggPSBfRmluZFBhZ2VJbmRleChwS2lkLCBza2lwX2NvdW50LCBvYmpudW0sIGluZGV4LCBsZXZlbCArIDEpOw0KLSAgICAgICAgICAgIGlmIChmb3VuZF9pbmRleCA+PSAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZF9pbmRleDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZiAob2JqbnVtID09IHBOb2RlLT5HZXRPYmpOdW0oKSkgew0KLSAgICAgICAgICAgIHJldHVybiBpbmRleDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChza2lwX2NvdW50KSB7DQotICAgICAgICAgICAgc2tpcF9jb3VudC0tOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW5kZXggKys7DQotICAgIH0NCi0gICAgcmV0dXJuIC0xOw0KLX0NCi1pbnQgQ1BERl9Eb2N1bWVudDo6R2V0UGFnZUluZGV4KEZYX0RXT1JEIG9iam51bSkNCi17DQotICAgIEZYX0RXT1JEIG5QYWdlcyA9IG1fUGFnZUxpc3QuR2V0U2l6ZSgpOw0KLSAgICBGWF9EV09SRCBza2lwX2NvdW50ID0gMDsNCi0gICAgRlhfQk9PTCBiU2tpcHBlZCA9IEZBTFNFOw0KLSAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgblBhZ2VzOyBpICsrKSB7DQotICAgICAgICBGWF9EV09SRCBvYmpudW0xID0gbV9QYWdlTGlzdC5HZXRBdChpKTsNCi0gICAgICAgIGlmIChvYmpudW0xID09IG9iam51bSkgew0KLSAgICAgICAgICAgIHJldHVybiBpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCFiU2tpcHBlZCAmJiBvYmpudW0xID09IDApIHsNCi0gICAgICAgICAgICBza2lwX2NvdW50ID0gaTsNCi0gICAgICAgICAgICBiU2tpcHBlZCA9IFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwUm9vdCA9IEdldFJvb3QoKTsNCi0gICAgaWYgKHBSb290ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBQYWdlcyA9IHBSb290LT5HZXREaWN0KEZYX0JTVFJDKCJQYWdlcyIpKTsNCi0gICAgaWYgKHBQYWdlcyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgaW50IGluZGV4ID0gMDsNCi0gICAgcmV0dXJuIF9GaW5kUGFnZUluZGV4KHBQYWdlcywgc2tpcF9jb3VudCwgb2JqbnVtLCBpbmRleCk7DQotfQ0KLWludCBDUERGX0RvY3VtZW50OjpHZXRQYWdlQ291bnQoKSBjb25zdA0KLXsNCi0gICAgcmV0dXJuIG1fUGFnZUxpc3QuR2V0U2l6ZSgpOw0KLX0NCi1zdGF0aWMgaW50IF9Db3VudFBhZ2VzKENQREZfRGljdGlvbmFyeSogcFBhZ2VzLCBpbnQgbGV2ZWwpDQotew0KLSAgICBpZiAobGV2ZWwgPiAxMjgpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGludCBjb3VudCA9IHBQYWdlcy0+R2V0SW50ZWdlcihGWF9CU1RSQygiQ291bnQiKSk7DQotICAgIGlmIChjb3VudCA+IDAgJiYgY291bnQgPCBGUERGX1BBR0VfTUFYX05VTSkgew0KLSAgICAgICAgcmV0dXJuIGNvdW50Ow0KLSAgICB9DQotICAgIENQREZfQXJyYXkqIHBLaWRMaXN0ID0gcFBhZ2VzLT5HZXRBcnJheShGWF9CU1RSQygiS2lkcyIpKTsNCi0gICAgaWYgKHBLaWRMaXN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGNvdW50ID0gMDsNCi0gICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHBLaWRMaXN0LT5HZXRDb3VudCgpOyBpICsrKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBLaWQgPSBwS2lkTGlzdC0+R2V0RGljdChpKTsNCi0gICAgICAgIGlmIChwS2lkID09IE5VTEwpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICghcEtpZC0+S2V5RXhpc3QoRlhfQlNUUkMoIktpZHMiKSkpIHsNCi0gICAgICAgICAgICBjb3VudCArKzsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgY291bnQgKz0gX0NvdW50UGFnZXMocEtpZCwgbGV2ZWwgKyAxKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBwUGFnZXMtPlNldEF0SW50ZWdlcihGWF9CU1RSQygiQ291bnQiKSwgY291bnQpOw0KLSAgICByZXR1cm4gY291bnQ7DQotfQ0KLWludCBDUERGX0RvY3VtZW50OjpfR2V0UGFnZUNvdW50KCkgY29uc3QNCi17DQotICAgIENQREZfRGljdGlvbmFyeSogcFJvb3QgPSBHZXRSb290KCk7DQotICAgIGlmIChwUm9vdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBQYWdlcyA9IHBSb290LT5HZXREaWN0KEZYX0JTVFJDKCJQYWdlcyIpKTsNCi0gICAgaWYgKHBQYWdlcyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBpZiAoIXBQYWdlcy0+S2V5RXhpc3QoRlhfQlNUUkMoIktpZHMiKSkpIHsNCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotICAgIHJldHVybiBfQ291bnRQYWdlcyhwUGFnZXMsIDApOw0KLX0NCi1zdGF0aWMgRlhfQk9PTCBfRW51bVBhZ2VzKENQREZfRGljdGlvbmFyeSogcFBhZ2VzLCBJUERGX0VudW1QYWdlSGFuZGxlciogcEhhbmRsZXIpDQotew0KLSAgICBDUERGX0FycmF5KiBwS2lkTGlzdCA9IHBQYWdlcy0+R2V0QXJyYXkoRlhfQlNUUkMoIktpZHMiKSk7DQotICAgIGlmIChwS2lkTGlzdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gcEhhbmRsZXItPkVudW1QYWdlKHBQYWdlcyk7DQotICAgIH0NCi0gICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHBLaWRMaXN0LT5HZXRDb3VudCgpOyBpICsrKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBLaWQgPSBwS2lkTGlzdC0+R2V0RGljdChpKTsNCi0gICAgICAgIGlmIChwS2lkID09IE5VTEwpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICghcEtpZC0+S2V5RXhpc3QoRlhfQlNUUkMoIktpZHMiKSkpIHsNCi0gICAgICAgICAgICBpZiAoIXBIYW5kbGVyLT5FbnVtUGFnZShwS2lkKSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICByZXR1cm4gX0VudW1QYWdlcyhwS2lkLCBwSGFuZGxlcik7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ1BERl9Eb2N1bWVudDo6RW51bVBhZ2VzKElQREZfRW51bVBhZ2VIYW5kbGVyKiBwSGFuZGxlcikNCi17DQotICAgIENQREZfRGljdGlvbmFyeSogcFJvb3QgPSBHZXRSb290KCk7DQotICAgIGlmIChwUm9vdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZXMgPSBwUm9vdC0+R2V0RGljdChGWF9CU1RSQygiUGFnZXMiKSk7DQotICAgIGlmIChwUGFnZXMgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIF9FbnVtUGFnZXMocFBhZ2VzLCBwSGFuZGxlcik7DQotfQ0KLUZYX0JPT0wgQ1BERl9Eb2N1bWVudDo6SXNDb250ZW50VXNlZEVsc2V3aGVyZShGWF9EV09SRCBvYmpudW0sIENQREZfRGljdGlvbmFyeSogcFRoaXNQYWdlRGljdCkNCi17DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9QYWdlTGlzdC5HZXRTaXplKCk7IGkgKyspIHsNCi0gICAgICAgIENQREZfRGljdGlvbmFyeSogcFBhZ2VEaWN0ID0gR2V0UGFnZShpKTsNCi0gICAgICAgIGlmIChwUGFnZURpY3QgPT0gcFRoaXNQYWdlRGljdCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1BERl9PYmplY3QqIHBDb250ZW50cyA9IHBQYWdlRGljdC0+R2V0RWxlbWVudChGWF9CU1RSQygiQ29udGVudHMiKSk7DQotICAgICAgICBpZiAocENvbnRlbnRzID09IE5VTEwpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwQ29udGVudHMtPkdldERpcmVjdFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSAoQ1BERl9BcnJheSopcENvbnRlbnRzLT5HZXREaXJlY3QoKTsNCi0gICAgICAgICAgICBmb3IgKEZYX0RXT1JEIGogPSAwOyBqIDwgcEFycmF5LT5HZXRDb3VudCgpOyBqICsrKSB7DQotICAgICAgICAgICAgICAgIENQREZfUmVmZXJlbmNlKiBwUmVmID0gKENQREZfUmVmZXJlbmNlKilwQXJyYXktPkdldEVsZW1lbnQoaik7DQotICAgICAgICAgICAgICAgIGlmIChwUmVmLT5HZXRSZWZPYmpOdW0oKSA9PSBvYmpudW0pIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIGlmIChwQ29udGVudHMtPkdldE9iak51bSgpID09IG9iam51bSkgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotRlhfRFdPUkQgQ1BERl9Eb2N1bWVudDo6R2V0VXNlclBlcm1pc3Npb25zKEZYX0JPT0wgYkNoZWNrUmV2aXNpb24pIGNvbnN0DQotew0KLSAgICBpZiAobV9wUGFyc2VyID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAoRlhfRFdPUkQpIC0gMTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wUGFyc2VyLT5HZXRQZXJtaXNzaW9ucyhiQ2hlY2tSZXZpc2lvbik7DQotfQ0KLUZYX0JPT0wgQ1BERl9Eb2N1bWVudDo6SXNPd25lcigpIGNvbnN0DQotew0KLSAgICBpZiAobV9wUGFyc2VyID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIHJldHVybiBtX3BQYXJzZXItPklzT3duZXIoKTsNCi19DQotRlhfQk9PTCBDUERGX0RvY3VtZW50OjpJc0Zvcm1TdHJlYW0oRlhfRFdPUkQgb2JqbnVtLCBGWF9CT09MJiBiRm9ybSkgY29uc3QNCi17DQotICAgIHsNCi0gICAgICAgIENQREZfT2JqZWN0KiBwT2JqOw0KLSAgICAgICAgaWYgKG1fSW5kaXJlY3RPYmpzLkxvb2t1cCgoRlhfTFBWT0lEKShGWF9VSU5UUFRSKW9iam51bSwgKEZYX0xQVk9JRCYpcE9iaikpIHsNCi0gICAgICAgICAgICBiRm9ybSA9IHBPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSRUFNICYmDQotICAgICAgICAgICAgICAgICAgICAoKENQREZfU3RyZWFtKilwT2JqKS0+R2V0RGljdCgpLT5HZXRTdHJpbmcoRlhfQlNUUkMoIlN1YnR5cGUiKSkgPT0gRlhfQlNUUkMoIkZvcm0iKTsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAobV9wUGFyc2VyID09IE5VTEwpIHsNCi0gICAgICAgIGJGb3JtID0gRkFMU0U7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wUGFyc2VyLT5Jc0Zvcm1TdHJlYW0ob2JqbnVtLCBiRm9ybSk7DQotfQ0KLXZvaWQgQ1BERl9Eb2N1bWVudDo6Q2xlYXJQYWdlRGF0YSgpDQotew0KLSAgICBpZiAobV9wRG9jUGFnZSkgew0KLSAgICAgICAgQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRQYWdlTW9kdWxlKCktPkNsZWFyRG9jKHRoaXMpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9Eb2N1bWVudDo6Q2xlYXJSZW5kZXJEYXRhKCkNCi17DQotICAgIGlmIChtX3BEb2NSZW5kZXIpIHsNCi0gICAgICAgIENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UmVuZGVyTW9kdWxlKCktPkNsZWFyRG9jRGF0YShtX3BEb2NSZW5kZXIpOw0KLSAgICB9DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYXJzZXIuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCIKK2V4dGVybiBGWF9MUFZPSUQgUERGUHJldmlld0luaXRDYWNoZShDUERGX0RvY3VtZW50KiBwRG9jKTsKK2V4dGVybiB2b2lkIFBERlByZXZpZXdDbGVhckNhY2hlKEZYX0xQVk9JRCBwQ2FjaGUpOworQ1BERl9Eb2N1bWVudDo6Q1BERl9Eb2N1bWVudChJUERGX0RvY1BhcnNlciogcFBhcnNlcikgOiBDUERGX0luZGlyZWN0T2JqZWN0cyhwUGFyc2VyKQoreworICAgIEFTU0VSVChwUGFyc2VyICE9IE5VTEwpOworICAgIG1fcFJvb3REaWN0ID0gTlVMTDsKKyAgICBtX3BJbmZvRGljdCA9IE5VTEw7CisgICAgbV9iTGluZWFyaXplZCA9IEZBTFNFOworICAgIG1fZHdGaXJzdFBhZ2VObyA9IDA7CisgICAgbV9kd0ZpcnN0UGFnZU9iak51bSA9IDA7CisgICAgbV9wRG9jUGFnZSA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UGFnZU1vZHVsZSgpLT5DcmVhdGVEb2NEYXRhKHRoaXMpOworICAgIG1fcERvY1JlbmRlciA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UmVuZGVyTW9kdWxlKCktPkNyZWF0ZURvY0RhdGEodGhpcyk7Cit9CitDUERGX0RvY1BhZ2VEYXRhKiBDUERGX0RvY3VtZW50OjpHZXRWYWxpZGF0ZVBhZ2VEYXRhKCkKK3sKKyAgICBpZiAobV9wRG9jUGFnZSkgeworICAgICAgICByZXR1cm4gbV9wRG9jUGFnZTsKKyAgICB9CisgICAgbV9wRG9jUGFnZSA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UGFnZU1vZHVsZSgpLT5DcmVhdGVEb2NEYXRhKHRoaXMpOworICAgIHJldHVybiBtX3BEb2NQYWdlOworfQorQ1BERl9Eb2NSZW5kZXJEYXRhKiBDUERGX0RvY3VtZW50OjpHZXRWYWxpZGF0ZVJlbmRlckRhdGEoKQoreworICAgIGlmIChtX3BEb2NSZW5kZXIpIHsKKyAgICAgICAgcmV0dXJuIG1fcERvY1JlbmRlcjsKKyAgICB9CisgICAgbV9wRG9jUmVuZGVyID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRSZW5kZXJNb2R1bGUoKS0+Q3JlYXRlRG9jRGF0YSh0aGlzKTsKKyAgICByZXR1cm4gbV9wRG9jUmVuZGVyOworfQordm9pZCBDUERGX0RvY3VtZW50OjpMb2FkRG9jKCkKK3sKKyAgICBtX0xhc3RPYmpOdW0gPSBtX3BQYXJzZXItPkdldExhc3RPYmpOdW0oKTsKKyAgICBDUERGX09iamVjdCogcFJvb3RPYmogPSBHZXRJbmRpcmVjdE9iamVjdChtX3BQYXJzZXItPkdldFJvb3RPYmpOdW0oKSk7CisgICAgaWYgKHBSb290T2JqID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3BSb290RGljdCA9IHBSb290T2JqLT5HZXREaWN0KCk7CisgICAgaWYgKG1fcFJvb3REaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX09iamVjdCogcEluZm9PYmogPSBHZXRJbmRpcmVjdE9iamVjdChtX3BQYXJzZXItPkdldEluZm9PYmpOdW0oKSk7CisgICAgaWYgKHBJbmZvT2JqKSB7CisgICAgICAgIG1fcEluZm9EaWN0ID0gcEluZm9PYmotPkdldERpY3QoKTsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcElEQXJyYXkgPSBtX3BQYXJzZXItPkdldElEQXJyYXkoKTsKKyAgICBpZiAocElEQXJyYXkpIHsKKyAgICAgICAgbV9JRDEgPSBwSURBcnJheS0+R2V0U3RyaW5nKDApOworICAgICAgICBtX0lEMiA9IHBJREFycmF5LT5HZXRTdHJpbmcoMSk7CisgICAgfQorICAgIG1fUGFnZUxpc3QuU2V0U2l6ZShfR2V0UGFnZUNvdW50KCkpOworfQordm9pZCBDUERGX0RvY3VtZW50OjpMb2FkQXN5bkRvYyhDUERGX0RpY3Rpb25hcnkgKnBMaW5lYXJpemVkKQoreworICAgIG1fYkxpbmVhcml6ZWQgPSBUUlVFOworICAgIG1fTGFzdE9iak51bSA9IG1fcFBhcnNlci0+R2V0TGFzdE9iak51bSgpOworICAgIG1fcFJvb3REaWN0ID0gR2V0SW5kaXJlY3RPYmplY3QobV9wUGFyc2VyLT5HZXRSb290T2JqTnVtKCkpLT5HZXREaWN0KCk7CisgICAgaWYgKG1fcFJvb3REaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3BJbmZvRGljdCA9IEdldEluZGlyZWN0T2JqZWN0KG1fcFBhcnNlci0+R2V0SW5mb09iak51bSgpKS0+R2V0RGljdCgpOworICAgIENQREZfQXJyYXkqIHBJREFycmF5ID0gbV9wUGFyc2VyLT5HZXRJREFycmF5KCk7CisgICAgaWYgKHBJREFycmF5KSB7CisgICAgICAgIG1fSUQxID0gcElEQXJyYXktPkdldFN0cmluZygwKTsKKyAgICAgICAgbV9JRDIgPSBwSURBcnJheS0+R2V0U3RyaW5nKDEpOworICAgIH0KKyAgICBGWF9EV09SRCBkd1BhZ2VDb3VudCA9IDA7CisgICAgQ1BERl9PYmplY3QgKnBDb3VudCA9IHBMaW5lYXJpemVkLT5HZXRFbGVtZW50KEZYX0JTVFJDKCJOIikpOworICAgIGlmIChwQ291bnQgJiYgcENvdW50LT5HZXRUeXBlKCkgPT0gUERGT0JKX05VTUJFUikgeworICAgICAgICBkd1BhZ2VDb3VudCA9IHBDb3VudC0+R2V0SW50ZWdlcigpOworICAgIH0KKyAgICBtX1BhZ2VMaXN0LlNldFNpemUoZHdQYWdlQ291bnQpOworICAgIENQREZfT2JqZWN0ICpwTm8gPSBwTGluZWFyaXplZC0+R2V0RWxlbWVudChGWF9CU1RSQygiUCIpKTsKKyAgICBpZiAocE5vICYmIHBOby0+R2V0VHlwZSgpID09IFBERk9CSl9OVU1CRVIpIHsKKyAgICAgICAgbV9kd0ZpcnN0UGFnZU5vID0gcE5vLT5HZXRJbnRlZ2VyKCk7CisgICAgfQorICAgIENQREZfT2JqZWN0ICpwT2JqTnVtID0gcExpbmVhcml6ZWQtPkdldEVsZW1lbnQoRlhfQlNUUkMoIk8iKSk7CisgICAgaWYgKHBPYmpOdW0gJiYgcE9iak51bS0+R2V0VHlwZSgpID09IFBERk9CSl9OVU1CRVIpIHsKKyAgICAgICAgbV9kd0ZpcnN0UGFnZU9iak51bSA9IHBPYmpOdW0tPkdldEludGVnZXIoKTsKKyAgICB9Cit9Cit2b2lkIENQREZfRG9jdW1lbnQ6OkxvYWRQYWdlcygpCit7CisgICAgbV9QYWdlTGlzdC5TZXRTaXplKF9HZXRQYWdlQ291bnQoKSk7Cit9CitleHRlcm4gdm9pZCBGUERGX1RURmFjZU1hcHBlcl9SZWxlYXNlRG9jKENQREZfRG9jdW1lbnQqKTsKK0NQREZfRG9jdW1lbnQ6On5DUERGX0RvY3VtZW50KCkKK3sKKyAgICBpZiAobV9wRG9jUmVuZGVyKSB7CisgICAgICAgIENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UmVuZGVyTW9kdWxlKCktPkRlc3Ryb3lEb2NEYXRhKG1fcERvY1JlbmRlcik7CisgICAgfQorICAgIGlmIChtX3BEb2NQYWdlKSB7CisgICAgICAgIENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UGFnZU1vZHVsZSgpLT5SZWxlYXNlRG9jKHRoaXMpOworICAgICAgICBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldFBhZ2VNb2R1bGUoKS0+Q2xlYXJTdG9ja0ZvbnQodGhpcyk7CisgICAgfQorfQorI2RlZmluZQkJRlhfTUFYX1BBR0VfTEVWRUwJCQkxMDI0CitDUERGX0RpY3Rpb25hcnkqIENQREZfRG9jdW1lbnQ6Ol9GaW5kUERGUGFnZShDUERGX0RpY3Rpb25hcnkqIHBQYWdlcywgaW50IGlQYWdlLCBpbnQgblBhZ2VzVG9HbywgaW50IGxldmVsKQoreworICAgIENQREZfQXJyYXkqIHBLaWRMaXN0ID0gcFBhZ2VzLT5HZXRBcnJheShGWF9CU1RSQygiS2lkcyIpKTsKKyAgICBpZiAocEtpZExpc3QgPT0gTlVMTCkgeworICAgICAgICBpZiAoblBhZ2VzVG9HbyA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gcFBhZ2VzOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAobGV2ZWwgPj0gRlhfTUFYX1BBR0VfTEVWRUwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGludCBuS2lkcyA9IHBLaWRMaXN0LT5HZXRDb3VudCgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbktpZHM7IGkgKyspIHsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwS2lkID0gcEtpZExpc3QtPkdldERpY3QoaSk7CisgICAgICAgIGlmIChwS2lkID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5QYWdlc1RvR28gLS07CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocEtpZCA9PSBwUGFnZXMpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmICghcEtpZC0+S2V5RXhpc3QoRlhfQlNUUkMoIktpZHMiKSkpIHsKKyAgICAgICAgICAgIGlmIChuUGFnZXNUb0dvID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcEtpZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fUGFnZUxpc3QuU2V0QXQoaVBhZ2UgLSBuUGFnZXNUb0dvLCBwS2lkLT5HZXRPYmpOdW0oKSk7CisgICAgICAgICAgICBuUGFnZXNUb0dvIC0tOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IG5QYWdlcyA9IHBLaWQtPkdldEludGVnZXIoRlhfQlNUUkMoIkNvdW50IikpOworICAgICAgICAgICAgaWYgKG5QYWdlc1RvR28gPCBuUGFnZXMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gX0ZpbmRQREZQYWdlKHBLaWQsIGlQYWdlLCBuUGFnZXNUb0dvLCBsZXZlbCArIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgblBhZ2VzVG9HbyAtPSBuUGFnZXM7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CitDUERGX0RpY3Rpb25hcnkqIENQREZfRG9jdW1lbnQ6OkdldFBhZ2UoaW50IGlQYWdlKQoreworICAgIGlmIChpUGFnZSA8IDAgfHwgaVBhZ2UgPj0gbV9QYWdlTGlzdC5HZXRTaXplKCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChtX2JMaW5lYXJpemVkICYmIChpUGFnZSA9PSAoaW50KW1fZHdGaXJzdFBhZ2VObykpIHsKKyAgICAgICAgQ1BERl9PYmplY3QqIHBPYmogPSBHZXRJbmRpcmVjdE9iamVjdChtX2R3Rmlyc3RQYWdlT2JqTnVtKTsKKyAgICAgICAgaWYgKHBPYmogJiYgcE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKSB7CisgICAgICAgICAgICByZXR1cm4gKENQREZfRGljdGlvbmFyeSopcE9iajsKKyAgICAgICAgfQorICAgIH0KKyAgICBpbnQgb2JqbnVtID0gbV9QYWdlTGlzdC5HZXRBdChpUGFnZSk7CisgICAgaWYgKG9iam51bSkgeworICAgICAgICBDUERGX09iamVjdCogcE9iaiA9IEdldEluZGlyZWN0T2JqZWN0KG9iam51bSk7CisgICAgICAgIEFTU0VSVChwT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpOworICAgICAgICByZXR1cm4gKENQREZfRGljdGlvbmFyeSopcE9iajsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUm9vdCA9IEdldFJvb3QoKTsKKyAgICBpZiAocFJvb3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZXMgPSBwUm9vdC0+R2V0RGljdChGWF9CU1RSQygiUGFnZXMiKSk7CisgICAgaWYgKHBQYWdlcyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBQYWdlID0gX0ZpbmRQREZQYWdlKHBQYWdlcywgaVBhZ2UsIGlQYWdlLCAwKTsKKyAgICBpZiAocFBhZ2UgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbV9QYWdlTGlzdC5TZXRBdChpUGFnZSwgcFBhZ2UtPkdldE9iak51bSgpKTsKKyAgICByZXR1cm4gcFBhZ2U7Cit9CitpbnQgQ1BERl9Eb2N1bWVudDo6X0ZpbmRQYWdlSW5kZXgoQ1BERl9EaWN0aW9uYXJ5KiBwTm9kZSwgRlhfRFdPUkQmIHNraXBfY291bnQsIEZYX0RXT1JEIG9iam51bSwgaW50JiBpbmRleCwgaW50IGxldmVsKQoreworICAgIGlmIChwTm9kZS0+S2V5RXhpc3QoRlhfQlNUUkMoIktpZHMiKSkpIHsKKyAgICAgICAgQ1BERl9BcnJheSogcEtpZExpc3QgPSBwTm9kZS0+R2V0QXJyYXkoRlhfQlNUUkMoIktpZHMiKSk7CisgICAgICAgIGlmIChwS2lkTGlzdCA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxldmVsID49IEZYX01BWF9QQUdFX0xFVkVMKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgRlhfRFdPUkQgY291bnQgPSBwTm9kZS0+R2V0SW50ZWdlcihGWF9CU1RSQygiQ291bnQiKSk7CisgICAgICAgIGlmIChjb3VudCA8PSBza2lwX2NvdW50KSB7CisgICAgICAgICAgICBza2lwX2NvdW50IC09IGNvdW50OworICAgICAgICAgICAgaW5kZXggKz0gY291bnQ7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvdW50ICYmIGNvdW50ID09IHBLaWRMaXN0LT5HZXRDb3VudCgpKSB7CisgICAgICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgY291bnQ7IGkgKyspIHsKKyAgICAgICAgICAgICAgICBDUERGX1JlZmVyZW5jZSogcEtpZCA9IChDUERGX1JlZmVyZW5jZSopcEtpZExpc3QtPkdldEVsZW1lbnQoaSk7CisgICAgICAgICAgICAgICAgaWYgKHBLaWQgJiYgcEtpZC0+R2V0VHlwZSgpID09IFBERk9CSl9SRUZFUkVOQ0UpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBLaWQtPkdldFJlZk9iak51bSgpID09IG9iam51bSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9QYWdlTGlzdC5TZXRBdChpbmRleCArIGksIG9iam51bSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggKyBpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwS2lkTGlzdC0+R2V0Q291bnQoKTsgaSArKykgeworICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwS2lkID0gcEtpZExpc3QtPkdldERpY3QoaSk7CisgICAgICAgICAgICBpZiAocEtpZCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocEtpZCA9PSBwTm9kZSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGZvdW5kX2luZGV4ID0gX0ZpbmRQYWdlSW5kZXgocEtpZCwgc2tpcF9jb3VudCwgb2JqbnVtLCBpbmRleCwgbGV2ZWwgKyAxKTsKKyAgICAgICAgICAgIGlmIChmb3VuZF9pbmRleCA+PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kX2luZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG9iam51bSA9PSBwTm9kZS0+R2V0T2JqTnVtKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2tpcF9jb3VudCkgeworICAgICAgICAgICAgc2tpcF9jb3VudC0tOworICAgICAgICB9CisgICAgICAgIGluZGV4ICsrOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CitpbnQgQ1BERl9Eb2N1bWVudDo6R2V0UGFnZUluZGV4KEZYX0RXT1JEIG9iam51bSkKK3sKKyAgICBGWF9EV09SRCBuUGFnZXMgPSBtX1BhZ2VMaXN0LkdldFNpemUoKTsKKyAgICBGWF9EV09SRCBza2lwX2NvdW50ID0gMDsKKyAgICBGWF9CT09MIGJTa2lwcGVkID0gRkFMU0U7CisgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IG5QYWdlczsgaSArKykgeworICAgICAgICBGWF9EV09SRCBvYmpudW0xID0gbV9QYWdlTGlzdC5HZXRBdChpKTsKKyAgICAgICAgaWYgKG9iam51bTEgPT0gb2JqbnVtKSB7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWJTa2lwcGVkICYmIG9iam51bTEgPT0gMCkgeworICAgICAgICAgICAgc2tpcF9jb3VudCA9IGk7CisgICAgICAgICAgICBiU2tpcHBlZCA9IFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUm9vdCA9IEdldFJvb3QoKTsKKyAgICBpZiAocFJvb3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcFBhZ2VzID0gcFJvb3QtPkdldERpY3QoRlhfQlNUUkMoIlBhZ2VzIikpOworICAgIGlmIChwUGFnZXMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGludCBpbmRleCA9IDA7CisgICAgcmV0dXJuIF9GaW5kUGFnZUluZGV4KHBQYWdlcywgc2tpcF9jb3VudCwgb2JqbnVtLCBpbmRleCk7Cit9CitpbnQgQ1BERl9Eb2N1bWVudDo6R2V0UGFnZUNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9QYWdlTGlzdC5HZXRTaXplKCk7Cit9CitzdGF0aWMgaW50IF9Db3VudFBhZ2VzKENQREZfRGljdGlvbmFyeSogcFBhZ2VzLCBpbnQgbGV2ZWwpCit7CisgICAgaWYgKGxldmVsID4gMTI4KSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpbnQgY291bnQgPSBwUGFnZXMtPkdldEludGVnZXIoRlhfQlNUUkMoIkNvdW50IikpOworICAgIGlmIChjb3VudCA+IDAgJiYgY291bnQgPCBGUERGX1BBR0VfTUFYX05VTSkgeworICAgICAgICByZXR1cm4gY291bnQ7CisgICAgfQorICAgIENQREZfQXJyYXkqIHBLaWRMaXN0ID0gcFBhZ2VzLT5HZXRBcnJheShGWF9CU1RSQygiS2lkcyIpKTsKKyAgICBpZiAocEtpZExpc3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgY291bnQgPSAwOworICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwS2lkTGlzdC0+R2V0Q291bnQoKTsgaSArKykgeworICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBLaWQgPSBwS2lkTGlzdC0+R2V0RGljdChpKTsKKyAgICAgICAgaWYgKHBLaWQgPT0gTlVMTCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFwS2lkLT5LZXlFeGlzdChGWF9CU1RSQygiS2lkcyIpKSkgeworICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb3VudCArPSBfQ291bnRQYWdlcyhwS2lkLCBsZXZlbCArIDEpOworICAgICAgICB9CisgICAgfQorICAgIHBQYWdlcy0+U2V0QXRJbnRlZ2VyKEZYX0JTVFJDKCJDb3VudCIpLCBjb3VudCk7CisgICAgcmV0dXJuIGNvdW50OworfQoraW50IENQREZfRG9jdW1lbnQ6Ol9HZXRQYWdlQ291bnQoKSBjb25zdAoreworICAgIENQREZfRGljdGlvbmFyeSogcFJvb3QgPSBHZXRSb290KCk7CisgICAgaWYgKHBSb290ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcFBhZ2VzID0gcFJvb3QtPkdldERpY3QoRlhfQlNUUkMoIlBhZ2VzIikpOworICAgIGlmIChwUGFnZXMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFwUGFnZXMtPktleUV4aXN0KEZYX0JTVFJDKCJLaWRzIikpKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICByZXR1cm4gX0NvdW50UGFnZXMocFBhZ2VzLCAwKTsKK30KK3N0YXRpYyBGWF9CT09MIF9FbnVtUGFnZXMoQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZXMsIElQREZfRW51bVBhZ2VIYW5kbGVyKiBwSGFuZGxlcikKK3sKKyAgICBDUERGX0FycmF5KiBwS2lkTGlzdCA9IHBQYWdlcy0+R2V0QXJyYXkoRlhfQlNUUkMoIktpZHMiKSk7CisgICAgaWYgKHBLaWRMaXN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIHBIYW5kbGVyLT5FbnVtUGFnZShwUGFnZXMpOworICAgIH0KKyAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcEtpZExpc3QtPkdldENvdW50KCk7IGkgKyspIHsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwS2lkID0gcEtpZExpc3QtPkdldERpY3QoaSk7CisgICAgICAgIGlmIChwS2lkID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmICghcEtpZC0+S2V5RXhpc3QoRlhfQlNUUkMoIktpZHMiKSkpIHsKKyAgICAgICAgICAgIGlmICghcEhhbmRsZXItPkVudW1QYWdlKHBLaWQpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIF9FbnVtUGFnZXMocEtpZCwgcEhhbmRsZXIpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQordm9pZCBDUERGX0RvY3VtZW50OjpFbnVtUGFnZXMoSVBERl9FbnVtUGFnZUhhbmRsZXIqIHBIYW5kbGVyKQoreworICAgIENQREZfRGljdGlvbmFyeSogcFJvb3QgPSBHZXRSb290KCk7CisgICAgaWYgKHBSb290ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBQYWdlcyA9IHBSb290LT5HZXREaWN0KEZYX0JTVFJDKCJQYWdlcyIpKTsKKyAgICBpZiAocFBhZ2VzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBfRW51bVBhZ2VzKHBQYWdlcywgcEhhbmRsZXIpOworfQorRlhfQk9PTCBDUERGX0RvY3VtZW50OjpJc0NvbnRlbnRVc2VkRWxzZXdoZXJlKEZYX0RXT1JEIG9iam51bSwgQ1BERl9EaWN0aW9uYXJ5KiBwVGhpc1BhZ2VEaWN0KQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9QYWdlTGlzdC5HZXRTaXplKCk7IGkgKyspIHsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QgPSBHZXRQYWdlKGkpOworICAgICAgICBpZiAocFBhZ2VEaWN0ID09IHBUaGlzUGFnZURpY3QpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIENQREZfT2JqZWN0KiBwQ29udGVudHMgPSBwUGFnZURpY3QtPkdldEVsZW1lbnQoRlhfQlNUUkMoIkNvbnRlbnRzIikpOworICAgICAgICBpZiAocENvbnRlbnRzID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChwQ29udGVudHMtPkdldERpcmVjdFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsKKyAgICAgICAgICAgIENQREZfQXJyYXkqIHBBcnJheSA9IChDUERGX0FycmF5KilwQ29udGVudHMtPkdldERpcmVjdCgpOworICAgICAgICAgICAgZm9yIChGWF9EV09SRCBqID0gMDsgaiA8IHBBcnJheS0+R2V0Q291bnQoKTsgaiArKykgeworICAgICAgICAgICAgICAgIENQREZfUmVmZXJlbmNlKiBwUmVmID0gKENQREZfUmVmZXJlbmNlKilwQXJyYXktPkdldEVsZW1lbnQoaik7CisgICAgICAgICAgICAgICAgaWYgKHBSZWYtPkdldFJlZk9iak51bSgpID09IG9iam51bSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAocENvbnRlbnRzLT5HZXRPYmpOdW0oKSA9PSBvYmpudW0pIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK0ZYX0RXT1JEIENQREZfRG9jdW1lbnQ6OkdldFVzZXJQZXJtaXNzaW9ucyhGWF9CT09MIGJDaGVja1JldmlzaW9uKSBjb25zdAoreworICAgIGlmIChtX3BQYXJzZXIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gKEZYX0RXT1JEKSAtIDE7CisgICAgfQorICAgIHJldHVybiBtX3BQYXJzZXItPkdldFBlcm1pc3Npb25zKGJDaGVja1JldmlzaW9uKTsKK30KK0ZYX0JPT0wgQ1BERl9Eb2N1bWVudDo6SXNPd25lcigpIGNvbnN0Cit7CisgICAgaWYgKG1fcFBhcnNlciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gbV9wUGFyc2VyLT5Jc093bmVyKCk7Cit9CitGWF9CT09MIENQREZfRG9jdW1lbnQ6OklzRm9ybVN0cmVhbShGWF9EV09SRCBvYmpudW0sIEZYX0JPT0wmIGJGb3JtKSBjb25zdAoreworICAgIHsKKyAgICAgICAgQ1BERl9PYmplY3QqIHBPYmo7CisgICAgICAgIGlmIChtX0luZGlyZWN0T2Jqcy5Mb29rdXAoKEZYX0xQVk9JRCkoRlhfVUlOVFBUUilvYmpudW0sIChGWF9MUFZPSUQmKXBPYmopKSB7CisgICAgICAgICAgICBiRm9ybSA9IHBPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSRUFNICYmCisgICAgICAgICAgICAgICAgICAgICgoQ1BERl9TdHJlYW0qKXBPYmopLT5HZXREaWN0KCktPkdldFN0cmluZyhGWF9CU1RSQygiU3VidHlwZSIpKSA9PSBGWF9CU1RSQygiRm9ybSIpOworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1fcFBhcnNlciA9PSBOVUxMKSB7CisgICAgICAgIGJGb3JtID0gRkFMU0U7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gbV9wUGFyc2VyLT5Jc0Zvcm1TdHJlYW0ob2JqbnVtLCBiRm9ybSk7Cit9Cit2b2lkIENQREZfRG9jdW1lbnQ6OkNsZWFyUGFnZURhdGEoKQoreworICAgIGlmIChtX3BEb2NQYWdlKSB7CisgICAgICAgIENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UGFnZU1vZHVsZSgpLT5DbGVhckRvYyh0aGlzKTsKKyAgICB9Cit9Cit2b2lkIENQREZfRG9jdW1lbnQ6OkNsZWFyUmVuZGVyRGF0YSgpCit7CisgICAgaWYgKG1fcERvY1JlbmRlcikgeworICAgICAgICBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldFJlbmRlck1vZHVsZSgpLT5DbGVhckRvY0RhdGEobV9wRG9jUmVuZGVyKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFyc2VyL2ZwZGZfcGFyc2VyX2VuY3J5cHQuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhcnNlci9mcGRmX3BhcnNlcl9lbmNyeXB0LmNwcAppbmRleCBkMWYxYTI0Li5mYWRjZDM4IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFyc2VyL2ZwZGZfcGFyc2VyX2VuY3J5cHQuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYXJzZXIvZnBkZl9wYXJzZXJfZW5jcnlwdC5jcHAKQEAgLTEsOTU3ICsxLDk1NyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgPHRpbWUuaD4NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFyc2VyLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZmRybS9meF9jcnlwdC5oIg0KLWNvbnN0IEZYX0JZVEUgZGVmcGFzc2NvZGVbMzJdID0gew0KLSAgICAweDI4LCAweGJmLCAweDRlLCAweDVlLCAweDRlLCAweDc1LCAweDhhLCAweDQxLA0KLSAgICAweDY0LCAweDAwLCAweDRlLCAweDU2LCAweGZmLCAweGZhLCAweDAxLCAweDA4LA0KLSAgICAweDJlLCAweDJlLCAweDAwLCAweGI2LCAweGQwLCAweDY4LCAweDNlLCAweDgwLA0KLSAgICAweDJmLCAweDBjLCAweGE5LCAweGZlLCAweDY0LCAweDUzLCAweDY5LCAweDdhDQotfTsNCi12b2lkIENhbGNFbmNyeXB0S2V5KENQREZfRGljdGlvbmFyeSogcEVuY3J5cHQsIEZYX0xQQ0JZVEUgcGFzc3dvcmQsIEZYX0RXT1JEIHBhc3Nfc2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSBrZXksIGludCBrZXlsZW4sIEZYX0JPT0wgYklnbm9yZU1ldGEsIENQREZfQXJyYXkqIHBJZEFycmF5KQ0KLXsNCi0gICAgaW50IHJldmlzaW9uID0gcEVuY3J5cHQtPkdldEludGVnZXIoRlhfQlNUUkMoIlIiKSk7DQotICAgIEZYX0JZVEUgcGFzc2NvZGVbMzJdOw0KLSAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgMzI7IGkgKyspIHsNCi0gICAgICAgIHBhc3Njb2RlW2ldID0gaSA8IHBhc3Nfc2l6ZSA/IHBhc3N3b3JkW2ldIDogZGVmcGFzc2NvZGVbaSAtIHBhc3Nfc2l6ZV07DQotICAgIH0NCi0gICAgRlhfQllURSBtZDVbMTAwXTsNCi0gICAgQ1JZUFRfTUQ1U3RhcnQobWQ1KTsNCi0gICAgQ1JZUFRfTUQ1VXBkYXRlKG1kNSwgcGFzc2NvZGUsIDMyKTsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgb2tleSA9IHBFbmNyeXB0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIk8iKSk7DQotICAgIENSWVBUX01ENVVwZGF0ZShtZDUsIChGWF9MUEJZVEUpKEZYX0xQQ1NUUilva2V5LCBva2V5LkdldExlbmd0aCgpKTsNCi0gICAgRlhfRFdPUkQgcGVybSA9IHBFbmNyeXB0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJQIikpOw0KLSAgICBDUllQVF9NRDVVcGRhdGUobWQ1LCAoRlhfTFBCWVRFKSZwZXJtLCA0KTsNCi0gICAgaWYgKHBJZEFycmF5KSB7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyBpZCA9IHBJZEFycmF5LT5HZXRTdHJpbmcoMCk7DQotICAgICAgICBDUllQVF9NRDVVcGRhdGUobWQ1LCAoRlhfTFBCWVRFKShGWF9MUENTVFIpaWQsIGlkLkdldExlbmd0aCgpKTsNCi0gICAgfQ0KLSAgICBpZiAoIWJJZ25vcmVNZXRhICYmIHJldmlzaW9uID49IDMgJiYgIXBFbmNyeXB0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJFbmNyeXB0TWV0YWRhdGEiKSwgMSkpIHsNCi0gICAgICAgIEZYX0RXT1JEIHRhZyA9IChGWF9EV09SRCkgLSAxOw0KLSAgICAgICAgQ1JZUFRfTUQ1VXBkYXRlKG1kNSwgKEZYX0xQQllURSkmdGFnLCA0KTsNCi0gICAgfQ0KLSAgICBGWF9CWVRFIGRpZ2VzdFsxNl07DQotICAgIENSWVBUX01ENUZpbmlzaChtZDUsIGRpZ2VzdCk7DQotICAgIEZYX0RXT1JEIGNvcHlfbGVuID0ga2V5bGVuOw0KLSAgICBpZiAoY29weV9sZW4gPiBzaXplb2YoZGlnZXN0KSkgew0KLSAgICAgICAgY29weV9sZW4gPSBzaXplb2YoZGlnZXN0KTsNCi0gICAgfQ0KLSAgICBpZiAocmV2aXNpb24gPj0gMykgew0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA1MDsgaSArKykgew0KLSAgICAgICAgICAgIENSWVBUX01ENUdlbmVyYXRlKGRpZ2VzdCwgY29weV9sZW4sIGRpZ2VzdCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhTWVNfbWVtc2V0MzIoa2V5LCAwLCBrZXlsZW4pOw0KLSAgICBGWFNZU19tZW1jcHkzMihrZXksIGRpZ2VzdCwgY29weV9sZW4pOw0KLX0NCi1DUERGX0NyeXB0b0hhbmRsZXIqIENQREZfU3RhbmRhcmRTZWN1cml0eUhhbmRsZXI6OkNyZWF0ZUNyeXB0b0hhbmRsZXIoKQ0KLXsNCi0gICAgcmV0dXJuIEZYX05FVyBDUERGX1N0YW5kYXJkQ3J5cHRvSGFuZGxlcjsNCi19DQotdHlwZWRlZiBzdHJ1Y3QgX1BERl9DUllQVE9JVEVNIDogcHVibGljIENGWF9PYmplY3Qgew0KLSAgICBGWF9JTlQzMgltX0NpcGhlcjsNCi0gICAgRlhfSU5UMzIJbV9LZXlMZW47DQotICAgIEZYX0JPT0wJCW1fYkNoZWNrZWQ7DQotICAgIENQREZfU3RhbmRhcmRDcnlwdG9IYW5kbGVyKgltX3BDcnlwdG9IYW5kbGVyOw0KLX0gUERGX0NSWVBUT0lURU07DQotQ1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcjo6Q1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcigpDQotew0KLSAgICBtX1ZlcnNpb24gPSAwOw0KLSAgICBtX1JldmlzaW9uID0gMDsNCi0gICAgbV9wUGFyc2VyID0gTlVMTDsNCi0gICAgbV9wRW5jcnlwdERpY3QgPSBOVUxMOw0KLSAgICBtX2JPd25lciA9IEZBTFNFOw0KLSAgICBtX1Blcm1pc3Npb25zID0gMDsNCi0gICAgbV9DaXBoZXIgPSBGWENJUEhFUl9OT05FOw0KLSAgICBtX0tleUxlbiA9IDA7DQotfQ0KLUNQREZfU3RhbmRhcmRTZWN1cml0eUhhbmRsZXI6On5DUERGX1N0YW5kYXJkU2VjdXJpdHlIYW5kbGVyKCkNCi17DQotfQ0KLUZYX0JPT0wgQ1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcjo6T25Jbml0KENQREZfUGFyc2VyKiBwUGFyc2VyLCBDUERGX0RpY3Rpb25hcnkqIHBFbmNyeXB0RGljdCkNCi17DQotICAgIG1fcFBhcnNlciA9IHBQYXJzZXI7DQotICAgIGlmICghTG9hZERpY3QocEVuY3J5cHREaWN0KSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChtX0NpcGhlciA9PSBGWENJUEhFUl9OT05FKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gQ2hlY2tTZWN1cml0eShtX0tleUxlbik7DQotfQ0KLUZYX0JPT0wgQ1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcjo6Q2hlY2tTZWN1cml0eShGWF9JTlQzMiBrZXlfbGVuKQ0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgcGFzc3dvcmQgPSBtX3BQYXJzZXItPkdldFBhc3N3b3JkKCk7DQotICAgIGlmIChDaGVja1Bhc3N3b3JkKHBhc3N3b3JkLCBwYXNzd29yZC5HZXRMZW5ndGgoKSwgVFJVRSwgbV9FbmNyeXB0S2V5LCBrZXlfbGVuKSkgew0KLSAgICAgICAgaWYgKHBhc3N3b3JkLklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgIGlmICghQ2hlY2tQYXNzd29yZChwYXNzd29yZCwgcGFzc3dvcmQuR2V0TGVuZ3RoKCksIEZBTFNFLCBtX0VuY3J5cHRLZXksIGtleV9sZW4pKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBtX2JPd25lciA9IFRSVUU7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gQ2hlY2tQYXNzd29yZChwYXNzd29yZCwgcGFzc3dvcmQuR2V0TGVuZ3RoKCksIEZBTFNFLCBtX0VuY3J5cHRLZXksIGtleV9sZW4pOw0KLX0NCi1GWF9EV09SRCBDUERGX1N0YW5kYXJkU2VjdXJpdHlIYW5kbGVyOjpHZXRQZXJtaXNzaW9ucygpDQotew0KLSAgICByZXR1cm4gbV9QZXJtaXNzaW9uczsNCi19DQotc3RhdGljIEZYX0JPT0wgX0xvYWRDcnlwdEluZm8oQ1BERl9EaWN0aW9uYXJ5KiBwRW5jcnlwdERpY3QsIEZYX0JTVFIgbmFtZSwgaW50JiBjaXBoZXIsIGludCYga2V5bGVuKQ0KLXsNCi0gICAgaW50IFZlcnNpb24gPSBwRW5jcnlwdERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIlYiKSk7DQotICAgIGludCBSZXZpc2lvbiA9IHBFbmNyeXB0RGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiUiIpKTsNCi0gICAgY2lwaGVyID0gRlhDSVBIRVJfUkM0Ow0KLSAgICBrZXlsZW4gPSAwOw0KLSAgICBpZiAoVmVyc2lvbiA+PSA0KSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBDcnlwdEZpbHRlcnMgPSBwRW5jcnlwdERpY3QtPkdldERpY3QoRlhfQlNUUkMoIkNGIikpOw0KLSAgICAgICAgaWYgKHBDcnlwdEZpbHRlcnMgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChuYW1lID09IEZYX0JTVFJDKCJJZGVudGl0eSIpKSB7DQotICAgICAgICAgICAgY2lwaGVyID0gRlhDSVBIRVJfTk9ORTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGVmRmlsdGVyID0gcENyeXB0RmlsdGVycy0+R2V0RGljdChuYW1lKTsNCi0gICAgICAgICAgICBpZiAocERlZkZpbHRlciA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaW50IG5LZXlCaXRzID0gMDsNCi0gICAgICAgICAgICBpZiAoVmVyc2lvbiA9PSA0KSB7DQotICAgICAgICAgICAgICAgIG5LZXlCaXRzID0gcERlZkZpbHRlci0+R2V0SW50ZWdlcihGWF9CU1RSQygiTGVuZ3RoIiksIDApOw0KLSAgICAgICAgICAgICAgICBpZiAobktleUJpdHMgPT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgbktleUJpdHMgPSBwRW5jcnlwdERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIkxlbmd0aCIpLCAxMjgpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgbktleUJpdHMgPSBwRW5jcnlwdERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIkxlbmd0aCIpLCAyNTYpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobktleUJpdHMgPCA0MCkgew0KLSAgICAgICAgICAgICAgICBuS2V5Qml0cyAqPSA4Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBrZXlsZW4gPSBuS2V5Qml0cyAvIDg7DQotICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY2lwaGVyX25hbWUgPSBwRGVmRmlsdGVyLT5HZXRTdHJpbmcoRlhfQlNUUkMoIkNGTSIpKTsNCi0gICAgICAgICAgICBpZiAoY2lwaGVyX25hbWUgPT0gRlhfQlNUUkMoIkFFU1YyIikgfHwgY2lwaGVyX25hbWUgPT0gRlhfQlNUUkMoIkFFU1YzIikpIHsNCi0gICAgICAgICAgICAgICAgY2lwaGVyID0gRlhDSVBIRVJfQUVTOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGtleWxlbiA9IFZlcnNpb24gPiAxID8gcEVuY3J5cHREaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJMZW5ndGgiKSwgNDApIC8gOCA6IDU7DQotICAgIH0NCi0gICAgaWYgKGtleWxlbiA+IDMyIHx8IGtleWxlbiA8IDApIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDUERGX1N0YW5kYXJkU2VjdXJpdHlIYW5kbGVyOjpMb2FkRGljdChDUERGX0RpY3Rpb25hcnkqIHBFbmNyeXB0RGljdCkNCi17DQotICAgIG1fcEVuY3J5cHREaWN0ID0gcEVuY3J5cHREaWN0Ow0KLSAgICBtX2JPd25lciA9IEZBTFNFOw0KLSAgICBtX1ZlcnNpb24gPSBwRW5jcnlwdERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIlYiKSk7DQotICAgIG1fUmV2aXNpb24gPSBwRW5jcnlwdERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIlIiKSk7DQotICAgIG1fUGVybWlzc2lvbnMgPSBwRW5jcnlwdERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIlAiKSwgLTEpOw0KLSAgICBpZiAobV9WZXJzaW9uIDwgNCkgew0KLSAgICAgICAgcmV0dXJuIF9Mb2FkQ3J5cHRJbmZvKHBFbmNyeXB0RGljdCwgQ0ZYX0J5dGVTdHJpbmcoKSwgbV9DaXBoZXIsIG1fS2V5TGVuKTsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVN0cmluZyBzdG1mX25hbWUgPSBwRW5jcnlwdERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiU3RtRiIpKTsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgc3RyZl9uYW1lID0gcEVuY3J5cHREaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIlN0ckYiKSk7DQotICAgIGlmIChzdG1mX25hbWUgIT0gc3RyZl9uYW1lKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKCFfTG9hZENyeXB0SW5mbyhwRW5jcnlwdERpY3QsIHN0cmZfbmFtZSwgbV9DaXBoZXIsIG1fS2V5TGVuKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENQREZfU3RhbmRhcmRTZWN1cml0eUhhbmRsZXI6OkxvYWREaWN0KENQREZfRGljdGlvbmFyeSogcEVuY3J5cHREaWN0LCBGWF9EV09SRCB0eXBlLCBpbnQmIGNpcGhlciwgaW50JiBrZXlfbGVuKQ0KLXsNCi0gICAgbV9wRW5jcnlwdERpY3QgPSBwRW5jcnlwdERpY3Q7DQotICAgIG1fYk93bmVyID0gRkFMU0U7DQotICAgIG1fVmVyc2lvbiA9IHBFbmNyeXB0RGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiViIpKTsNCi0gICAgbV9SZXZpc2lvbiA9IHBFbmNyeXB0RGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiUiIpKTsNCi0gICAgbV9QZXJtaXNzaW9ucyA9IHBFbmNyeXB0RGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiUCIpLCAtMSk7DQotICAgIENGWF9CeXRlU3RyaW5nIHN0cmZfbmFtZSwgc3RtZl9uYW1lOw0KLSAgICBpZiAobV9WZXJzaW9uID49IDQpIHsNCi0gICAgICAgIHN0bWZfbmFtZSA9IHBFbmNyeXB0RGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJTdG1GIikpOw0KLSAgICAgICAgc3RyZl9uYW1lID0gcEVuY3J5cHREaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIlN0ckYiKSk7DQotICAgICAgICBpZiAoc3RtZl9uYW1lICE9IHN0cmZfbmFtZSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoIV9Mb2FkQ3J5cHRJbmZvKHBFbmNyeXB0RGljdCwgc3RyZl9uYW1lLCBjaXBoZXIsIGtleV9sZW4pKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbV9DaXBoZXIgPSBjaXBoZXI7DQotICAgIG1fS2V5TGVuID0ga2V5X2xlbjsNCi0gICAgcmV0dXJuIFRSVUU7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENQREZfU3RhbmRhcmRTZWN1cml0eUhhbmRsZXI6OkdldENyeXB0SW5mbyhpbnQmIGNpcGhlciwgRlhfTFBDQllURSYgYnVmZmVyLCBpbnQmIGtleWxlbikNCi17DQotICAgIGNpcGhlciA9IG1fQ2lwaGVyOw0KLSAgICBidWZmZXIgPSBtX0VuY3J5cHRLZXk7DQotICAgIGtleWxlbiA9IG1fS2V5TGVuOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotI2RlZmluZSBGWF9HRVRfMzJXT1JEKG4sYixpKQkJCQkJCQkJXA0KLSAgICB7CQkJCQkJCQkJCQkJCQlcDQotICAgICAgICAobikgPSAoRlhfRFdPUkQpKCggKEZYX1VJTlQ2NCkgKGIpWyhpKV0gPDwgMjQgKQkJCVwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgfCAoIChGWF9VSU5UNjQpIChiKVsoaSkgKyAxXSA8PCAxNiApCQkJCQlcDQotICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCAoRlhfVUlOVDY0KSAoYilbKGkpICsgMl0gPDwgIDggKQkJCQkJXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICB8ICggKEZYX1VJTlQ2NCkgKGIpWyhpKSArIDNdICAgICAgICkpOwkJCQkJXA0KLSAgICB9DQotaW50IEJpZ09yZGVyNjRCaXRzTW9kMyhGWF9MUEJZVEUgZGF0YSkNCi17DQotICAgIEZYX1VJTlQ2NCByZXQgPSAwOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkgew0KLSAgICAgICAgRlhfRFdPUkQgdmFsdWU7DQotICAgICAgICBGWF9HRVRfMzJXT1JEKHZhbHVlLCBkYXRhLCA0ICogaSk7DQotICAgICAgICByZXQgPDw9IDMyOw0KLSAgICAgICAgcmV0IHw9IHZhbHVlOw0KLSAgICAgICAgcmV0ICU9IDM7DQotICAgIH0NCi0gICAgcmV0dXJuIChpbnQpcmV0Ow0KLX0NCi12b2lkIFJldmlzaW9uNl9IYXNoKEZYX0xQQ0JZVEUgcGFzc3dvcmQsIEZYX0RXT1JEIHNpemUsIEZYX0xQQ0JZVEUgc2FsdCwgRlhfTFBDQllURSB2ZWN0b3IsIEZYX0xQQllURSBoYXNoKQ0KLXsNCi0gICAgaW50IGlCbG9ja1NpemUgPSAzMjsNCi0gICAgRlhfQllURSBzaGFbMTI4XTsNCi0gICAgQ1JZUFRfU0hBMjU2U3RhcnQoc2hhKTsNCi0gICAgQ1JZUFRfU0hBMjU2VXBkYXRlKHNoYSwgcGFzc3dvcmQsIHNpemUpOw0KLSAgICBDUllQVF9TSEEyNTZVcGRhdGUoc2hhLCBzYWx0LCA4KTsNCi0gICAgaWYgKHZlY3Rvcikgew0KLSAgICAgICAgQ1JZUFRfU0hBMjU2VXBkYXRlKHNoYSwgdmVjdG9yLCA0OCk7DQotICAgIH0NCi0gICAgRlhfQllURSBkaWdlc3RbMzJdOw0KLSAgICBDUllQVF9TSEEyNTZGaW5pc2goc2hhLCBkaWdlc3QpOw0KLSAgICBDRlhfQnl0ZVRleHRCdWYgYnVmOw0KLSAgICBGWF9MUEJZVEUgaW5wdXQgPSBkaWdlc3Q7DQotICAgIEZYX0xQQllURSBrZXkgPSBpbnB1dDsNCi0gICAgRlhfTFBCWVRFIGl2ID0gaW5wdXQgKyAxNjsNCi0gICAgRlhfTFBCWVRFIEUgPSBidWYuR2V0QnVmZmVyKCk7DQotICAgIGludCBpQnVmTGVuID0gYnVmLkdldExlbmd0aCgpOw0KLSAgICBDRlhfQnl0ZVRleHRCdWYgaW50ZXJEaWdlc3Q7DQotICAgIGludCBpID0gMDsNCi0gICAgRlhfTFBCWVRFIGFlcyA9IEZYX0FsbG9jKEZYX0JZVEUsIDIwNDgpOw0KLSAgICB3aGlsZSAoaSA8IDY0IHx8IGkgPCBFW2lCdWZMZW4gLSAxXSAgKyAzMikgew0KLSAgICAgICAgaW50IGlSb3VuZFNpemUgPSBzaXplICsgaUJsb2NrU2l6ZTsNCi0gICAgICAgIGlmICh2ZWN0b3IpIHsNCi0gICAgICAgICAgICBpUm91bmRTaXplICs9IDQ4Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgaUJ1ZkxlbiA9IGlSb3VuZFNpemUgKiA2NDsNCi0gICAgICAgIGJ1Zi5Fc3RpbWF0ZVNpemUoaUJ1Zkxlbik7DQotICAgICAgICBFID0gYnVmLkdldEJ1ZmZlcigpOw0KLSAgICAgICAgQ0ZYX0J5dGVUZXh0QnVmIGNvbnRlbnQ7DQotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDY0OyArK2opIHsNCi0gICAgICAgICAgICBjb250ZW50LkFwcGVuZEJsb2NrKHBhc3N3b3JkLCBzaXplKTsNCi0gICAgICAgICAgICBjb250ZW50LkFwcGVuZEJsb2NrKGlucHV0LCBpQmxvY2tTaXplKTsNCi0gICAgICAgICAgICBpZiAodmVjdG9yKSB7DQotICAgICAgICAgICAgICAgIGNvbnRlbnQuQXBwZW5kQmxvY2sodmVjdG9yLCA0OCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1JZUFRfQUVTU2V0S2V5KGFlcywgMTYsIGtleSwgMTYsIFRSVUUpOw0KLSAgICAgICAgQ1JZUFRfQUVTU2V0SVYoYWVzLCBpdik7DQotICAgICAgICBDUllQVF9BRVNFbmNyeXB0KGFlcywgRSwgY29udGVudC5HZXRCdWZmZXIoKSwgaUJ1Zkxlbik7DQotICAgICAgICBpbnQgaUhhc2ggPSAwOw0KLSAgICAgICAgc3dpdGNoIChCaWdPcmRlcjY0Qml0c01vZDMoRSkpIHsNCi0gICAgICAgICAgICBjYXNlIDA6DQotICAgICAgICAgICAgICAgIGlIYXNoID0gMDsNCi0gICAgICAgICAgICAgICAgaUJsb2NrU2l6ZSA9IDMyOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDE6DQotICAgICAgICAgICAgICAgIGlIYXNoID0gMTsNCi0gICAgICAgICAgICAgICAgaUJsb2NrU2l6ZSA9IDQ4Ow0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBkZWZhdWx0Og0KLSAgICAgICAgICAgICAgICBpSGFzaCA9IDI7DQotICAgICAgICAgICAgICAgIGlCbG9ja1NpemUgPSA2NDsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBpbnRlckRpZ2VzdC5Fc3RpbWF0ZVNpemUoaUJsb2NrU2l6ZSk7DQotICAgICAgICBpbnB1dCA9IGludGVyRGlnZXN0LkdldEJ1ZmZlcigpOw0KLSAgICAgICAgaWYgKGlIYXNoID09IDApIHsNCi0gICAgICAgICAgICBDUllQVF9TSEEyNTZHZW5lcmF0ZShFLCBpQnVmTGVuLCBpbnB1dCk7DQotICAgICAgICB9IGVsc2UgaWYgKGlIYXNoID09IDEpIHsNCi0gICAgICAgICAgICBDUllQVF9TSEEzODRHZW5lcmF0ZShFLCBpQnVmTGVuLCBpbnB1dCk7DQotICAgICAgICB9IGVsc2UgaWYgKGlIYXNoID09IDIpIHsNCi0gICAgICAgICAgICBDUllQVF9TSEE1MTJHZW5lcmF0ZShFLCBpQnVmTGVuLCBpbnB1dCk7DQotICAgICAgICB9DQotICAgICAgICBrZXkgPSBpbnB1dDsNCi0gICAgICAgIGl2ID0gaW5wdXQgKyAxNjsNCi0gICAgICAgICsraTsNCi0gICAgfQ0KLSAgICBGWF9GcmVlKGFlcyk7DQotICAgIGlmIChoYXNoKSB7DQotICAgICAgICBGWFNZU19tZW1jcHkzMihoYXNoLCBpbnB1dCwgMzIpOw0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcjo6QUVTMjU2X0NoZWNrUGFzc3dvcmQoRlhfTFBDQllURSBwYXNzd29yZCwgRlhfRFdPUkQgc2l6ZSwNCi0gICAgICAgIEZYX0JPT0wgYk93bmVyLCBGWF9MUEJZVEUga2V5KQ0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgb2tleSA9IG1fcEVuY3J5cHREaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIk8iKSk7DQotICAgIGlmIChva2V5LkdldExlbmd0aCgpIDwgNDgpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVN0cmluZyB1a2V5ID0gbV9wRW5jcnlwdERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiVSIpKTsNCi0gICAgaWYgKHVrZXkuR2V0TGVuZ3RoKCkgPCA0OCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYX0xQQ0JZVEUgcGtleSA9IGJPd25lciA/IChGWF9MUENCWVRFKW9rZXkgOiAoRlhfTFBDQllURSl1a2V5Ow0KLSAgICBGWF9CWVRFIHNoYVsxMjhdOw0KLSAgICBGWF9CWVRFIGRpZ2VzdFszMl07DQotICAgIGlmIChtX1JldmlzaW9uID49IDYpIHsNCi0gICAgICAgIFJldmlzaW9uNl9IYXNoKHBhc3N3b3JkLCBzaXplLCAoRlhfTFBDQllURSlwa2V5ICsgMzIsIChiT3duZXIgPyAoRlhfTFBDQllURSl1a2V5IDogTlVMTCksIGRpZ2VzdCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBDUllQVF9TSEEyNTZTdGFydChzaGEpOw0KLSAgICAgICAgQ1JZUFRfU0hBMjU2VXBkYXRlKHNoYSwgcGFzc3dvcmQsIHNpemUpOw0KLSAgICAgICAgQ1JZUFRfU0hBMjU2VXBkYXRlKHNoYSwgcGtleSArIDMyLCA4KTsNCi0gICAgICAgIGlmIChiT3duZXIpIHsNCi0gICAgICAgICAgICBDUllQVF9TSEEyNTZVcGRhdGUoc2hhLCB1a2V5LCA0OCk7DQotICAgICAgICB9DQotICAgICAgICBDUllQVF9TSEEyNTZGaW5pc2goc2hhLCBkaWdlc3QpOw0KLSAgICB9DQotICAgIGlmIChGWFNZU19tZW1jbXAzMihkaWdlc3QsIHBrZXksIDMyKSAhPSAwKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKGtleSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBpZiAobV9SZXZpc2lvbiA+PSA2KSB7DQotICAgICAgICBSZXZpc2lvbjZfSGFzaChwYXNzd29yZCwgc2l6ZSwgKEZYX0xQQ0JZVEUpcGtleSArIDQwLCAoYk93bmVyID8gKEZYX0xQQ0JZVEUpdWtleSA6IE5VTEwpLCBkaWdlc3QpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgQ1JZUFRfU0hBMjU2U3RhcnQoc2hhKTsNCi0gICAgICAgIENSWVBUX1NIQTI1NlVwZGF0ZShzaGEsIHBhc3N3b3JkLCBzaXplKTsNCi0gICAgICAgIENSWVBUX1NIQTI1NlVwZGF0ZShzaGEsIHBrZXkgKyA0MCwgOCk7DQotICAgICAgICBpZiAoYk93bmVyKSB7DQotICAgICAgICAgICAgQ1JZUFRfU0hBMjU2VXBkYXRlKHNoYSwgdWtleSwgNDgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1JZUFRfU0hBMjU2RmluaXNoKHNoYSwgZGlnZXN0KTsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVN0cmluZyBla2V5ID0gbV9wRW5jcnlwdERpY3QtPkdldFN0cmluZyhiT3duZXIgPyBGWF9CU1RSQygiT0UiKSA6IEZYX0JTVFJDKCJVRSIpKTsNCi0gICAgaWYgKGVrZXkuR2V0TGVuZ3RoKCkgPCAzMikgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYX0JZVEUqIGFlcyA9IEZYX0FsbG9jKEZYX0JZVEUsIDIwNDgpOw0KLSAgICBDUllQVF9BRVNTZXRLZXkoYWVzLCAxNiwgZGlnZXN0LCAzMiwgRkFMU0UpOw0KLSAgICBGWF9CWVRFIGl2WzE2XTsNCi0gICAgRlhTWVNfbWVtc2V0MzIoaXYsIDAsIDE2KTsNCi0gICAgQ1JZUFRfQUVTU2V0SVYoYWVzLCBpdik7DQotICAgIENSWVBUX0FFU0RlY3J5cHQoYWVzLCBrZXksIGVrZXksIDMyKTsNCi0gICAgQ1JZUFRfQUVTU2V0S2V5KGFlcywgMTYsIGtleSwgMzIsIEZBTFNFKTsNCi0gICAgQ1JZUFRfQUVTU2V0SVYoYWVzLCBpdik7DQotICAgIENGWF9CeXRlU3RyaW5nIHBlcm1zID0gbV9wRW5jcnlwdERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiUGVybXMiKSk7DQotICAgIGlmIChwZXJtcy5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWF9CWVRFIHBlcm1zX2J1ZlsxNl07DQotICAgIEZYU1lTX21lbXNldDMyKHBlcm1zX2J1ZiwgMCwgc2l6ZW9mKHBlcm1zX2J1ZikpOw0KLSAgICBGWF9EV09SRCBjb3B5X2xlbiA9IHNpemVvZihwZXJtc19idWYpOw0KLSAgICBpZiAoY29weV9sZW4gPiAoRlhfRFdPUkQpcGVybXMuR2V0TGVuZ3RoKCkpIHsNCi0gICAgICAgIGNvcHlfbGVuID0gcGVybXMuR2V0TGVuZ3RoKCk7DQotICAgIH0NCi0gICAgRlhTWVNfbWVtY3B5MzIocGVybXNfYnVmLCAoRlhfTFBDQllURSlwZXJtcywgY29weV9sZW4pOw0KLSAgICBGWF9CWVRFIGJ1ZlsxNl07DQotICAgIENSWVBUX0FFU0RlY3J5cHQoYWVzLCBidWYsIHBlcm1zX2J1ZiwgMTYpOw0KLSAgICBGWF9GcmVlKGFlcyk7DQotICAgIGlmIChidWZbOV0gIT0gJ2EnIHx8IGJ1ZlsxMF0gIT0gJ2QnIHx8IGJ1ZlsxMV0gIT0gJ2InKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKEZYRFdPUkRfR0VUX0xTQkZJUlNUKGJ1ZikgIT0gbV9QZXJtaXNzaW9ucykgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmICgoYnVmWzhdID09ICdUJyAmJiAhSXNNZXRhZGF0YUVuY3J5cHRlZCgpKSB8fCAoYnVmWzhdID09ICdGJyAmJiBJc01ldGFkYXRhRW5jcnlwdGVkKCkpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLWludCBDUERGX1N0YW5kYXJkU2VjdXJpdHlIYW5kbGVyOjpDaGVja1Bhc3N3b3JkKEZYX0xQQ0JZVEUgcGFzc3dvcmQsIEZYX0RXT1JEIHBhc3Nfc2l6ZSwgRlhfQk9PTCBiT3duZXIsIEZYX0xQQllURSBrZXkpDQotew0KLSAgICByZXR1cm4gQ2hlY2tQYXNzd29yZChwYXNzd29yZCwgcGFzc19zaXplLCBiT3duZXIsIGtleSwgbV9LZXlMZW4pOw0KLX0NCi1pbnQgQ1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcjo6Q2hlY2tQYXNzd29yZChGWF9MUENCWVRFIHBhc3N3b3JkLCBGWF9EV09SRCBzaXplLCBGWF9CT09MIGJPd25lciwgRlhfTFBCWVRFIGtleSwgRlhfSU5UMzIga2V5X2xlbikNCi17DQotICAgIGlmIChtX1JldmlzaW9uID49IDUpIHsNCi0gICAgICAgIHJldHVybiBBRVMyNTZfQ2hlY2tQYXNzd29yZChwYXNzd29yZCwgc2l6ZSwgYk93bmVyLCBrZXkpOw0KLSAgICB9DQotICAgIEZYX0JZVEUga2V5YnVmWzMyXTsNCi0gICAgaWYgKGtleSA9PSBOVUxMKSB7DQotICAgICAgICBrZXkgPSBrZXlidWY7DQotICAgIH0NCi0gICAgaWYgKGJPd25lcikgew0KLSAgICAgICAgcmV0dXJuIENoZWNrT3duZXJQYXNzd29yZChwYXNzd29yZCwgc2l6ZSwga2V5LCBrZXlfbGVuKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gQ2hlY2tVc2VyUGFzc3dvcmQocGFzc3dvcmQsIHNpemUsIEZBTFNFLCBrZXksIGtleV9sZW4pIHx8IENoZWNrVXNlclBhc3N3b3JkKHBhc3N3b3JkLCBzaXplLCBUUlVFLCBrZXksIGtleV9sZW4pOw0KLX0NCi1GWF9CT09MIENQREZfU3RhbmRhcmRTZWN1cml0eUhhbmRsZXI6OkNoZWNrVXNlclBhc3N3b3JkKEZYX0xQQ0JZVEUgcGFzc3dvcmQsIEZYX0RXT1JEIHBhc3Nfc2l6ZSwNCi0gICAgICAgIEZYX0JPT0wgYklnbm9yZUVuY3J5cHRNZXRhLCBGWF9MUEJZVEUga2V5LCBGWF9JTlQzMiBrZXlfbGVuKQ0KLXsNCi0gICAgQ2FsY0VuY3J5cHRLZXkobV9wRW5jcnlwdERpY3QsIHBhc3N3b3JkLCBwYXNzX3NpemUsIGtleSwga2V5X2xlbiwgYklnbm9yZUVuY3J5cHRNZXRhLA0KLSAgICAgICAgICAgICAgICAgICBtX3BQYXJzZXItPkdldElEQXJyYXkoKSk7DQotICAgIENGWF9CeXRlU3RyaW5nIHVrZXkgPSBtX3BFbmNyeXB0RGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJVIikpOw0KLSAgICBpZiAodWtleS5HZXRMZW5ndGgoKSA8IDE2KSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgRlhfQllURSB1a2V5YnVmWzMyXTsNCi0gICAgaWYgKG1fUmV2aXNpb24gPT0gMikgew0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIodWtleWJ1ZiwgZGVmcGFzc2NvZGUsIDMyKTsNCi0gICAgICAgIENSWVBUX0FyY0ZvdXJDcnlwdEJsb2NrKHVrZXlidWYsIDMyLCBrZXksIGtleV9sZW4pOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgRlhfQllURSB0ZXN0WzMyXSwgdG1wa2V5WzMyXTsNCi0gICAgICAgIEZYX0RXT1JEIGNvcHlfbGVuID0gc2l6ZW9mKHRlc3QpOw0KLSAgICAgICAgaWYgKGNvcHlfbGVuID4gKEZYX0RXT1JEKXVrZXkuR2V0TGVuZ3RoKCkpIHsNCi0gICAgICAgICAgICBjb3B5X2xlbiA9IHVrZXkuR2V0TGVuZ3RoKCk7DQotICAgICAgICB9DQotICAgICAgICBGWFNZU19tZW1zZXQzMih0ZXN0LCAwLCBzaXplb2YodGVzdCkpOw0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIodGVzdCwgKEZYX0xQQ1NUUil1a2V5LCBjb3B5X2xlbik7DQotICAgICAgICBmb3IgKGludCBpID0gMTk7IGkgPj0gMDsgaSAtLSkgew0KLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwga2V5X2xlbjsgaiArKykgew0KLSAgICAgICAgICAgICAgICB0bXBrZXlbal0gPSBrZXlbal0gXiBpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBDUllQVF9BcmNGb3VyQ3J5cHRCbG9jayh0ZXN0LCAzMiwgdG1wa2V5LCBrZXlfbGVuKTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0JZVEUgbWQ1WzEwMF07DQotICAgICAgICBDUllQVF9NRDVTdGFydChtZDUpOw0KLSAgICAgICAgQ1JZUFRfTUQ1VXBkYXRlKG1kNSwgZGVmcGFzc2NvZGUsIDMyKTsNCi0gICAgICAgIENQREZfQXJyYXkqIHBJZEFycmF5ID0gbV9wUGFyc2VyLT5HZXRJREFycmF5KCk7DQotICAgICAgICBpZiAocElkQXJyYXkpIHsNCi0gICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBpZCA9IHBJZEFycmF5LT5HZXRTdHJpbmcoMCk7DQotICAgICAgICAgICAgQ1JZUFRfTUQ1VXBkYXRlKG1kNSwgKEZYX0xQQllURSkoRlhfTFBDU1RSKWlkLCBpZC5HZXRMZW5ndGgoKSk7DQotICAgICAgICB9DQotICAgICAgICBDUllQVF9NRDVGaW5pc2gobWQ1LCB1a2V5YnVmKTsNCi0gICAgICAgIHJldHVybiBGWFNZU19tZW1jbXAzMih0ZXN0LCB1a2V5YnVmLCAxNikgPT0gMDsNCi0gICAgfQ0KLSAgICBpZiAoRlhTWVNfbWVtY21wMzIoKEZYX0xQVk9JRCkoRlhfTFBDU1RSKXVrZXksIHVrZXlidWYsIDE2KSA9PSAwKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENQREZfU3RhbmRhcmRTZWN1cml0eUhhbmRsZXI6OkdldFVzZXJQYXNzd29yZChGWF9MUENCWVRFIG93bmVyX3Bhc3MsIEZYX0RXT1JEIHBhc3Nfc2l6ZSkNCi17DQotICAgIHJldHVybiBHZXRVc2VyUGFzc3dvcmQob3duZXJfcGFzcywgcGFzc19zaXplLCBtX0tleUxlbik7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENQREZfU3RhbmRhcmRTZWN1cml0eUhhbmRsZXI6OkdldFVzZXJQYXNzd29yZChGWF9MUENCWVRFIG93bmVyX3Bhc3MsIEZYX0RXT1JEIHBhc3Nfc2l6ZSwgRlhfSU5UMzIga2V5X2xlbikNCi17DQotICAgIENGWF9CeXRlU3RyaW5nIG9rZXkgPSBtX3BFbmNyeXB0RGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJPIikpOw0KLSAgICBGWF9CWVRFIHBhc3Njb2RlWzMyXTsNCi0gICAgRlhfRFdPUkQgaTsNCi0gICAgZm9yIChpID0gMDsgaSA8IDMyOyBpICsrKSB7DQotICAgICAgICBwYXNzY29kZVtpXSA9IGkgPCBwYXNzX3NpemUgPyBvd25lcl9wYXNzW2ldIDogZGVmcGFzc2NvZGVbaSAtIHBhc3Nfc2l6ZV07DQotICAgIH0NCi0gICAgRlhfQllURSBkaWdlc3RbMTZdOw0KLSAgICBDUllQVF9NRDVHZW5lcmF0ZShwYXNzY29kZSwgMzIsIGRpZ2VzdCk7DQotICAgIGlmIChtX1JldmlzaW9uID49IDMpIHsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTA7IGkgKyspIHsNCi0gICAgICAgICAgICBDUllQVF9NRDVHZW5lcmF0ZShkaWdlc3QsIDE2LCBkaWdlc3QpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIEZYX0JZVEUgZW5ja2V5WzMyXTsNCi0gICAgRlhTWVNfbWVtc2V0MzIoZW5ja2V5LCAwLCBzaXplb2YoZW5ja2V5KSk7DQotICAgIEZYX0RXT1JEIGNvcHlfbGVuID0ga2V5X2xlbjsNCi0gICAgaWYgKGNvcHlfbGVuID4gc2l6ZW9mKGRpZ2VzdCkpIHsNCi0gICAgICAgIGNvcHlfbGVuID0gc2l6ZW9mKGRpZ2VzdCk7DQotICAgIH0NCi0gICAgRlhTWVNfbWVtY3B5MzIoZW5ja2V5LCBkaWdlc3QsIGNvcHlfbGVuKTsNCi0gICAgaW50IG9rZXlsZW4gPSBva2V5LkdldExlbmd0aCgpOw0KLSAgICBpZiAob2tleWxlbiA+IDMyKSB7DQotICAgICAgICBva2V5bGVuID0gMzI7DQotICAgIH0NCi0gICAgRlhfQllURSBva2V5YnVmWzY0XTsNCi0gICAgRlhTWVNfbWVtY3B5MzIob2tleWJ1ZiwgKEZYX0xQQ1NUUilva2V5LCBva2V5bGVuKTsNCi0gICAgaWYgKG1fUmV2aXNpb24gPT0gMikgew0KLSAgICAgICAgQ1JZUFRfQXJjRm91ckNyeXB0QmxvY2sob2tleWJ1Ziwgb2tleWxlbiwgZW5ja2V5LCBrZXlfbGVuKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGZvciAoaW50IGkgPSAxOTsgaSA+PSAwOyBpIC0tKSB7DQotICAgICAgICAgICAgRlhfQllURSB0ZW1wa2V5WzMyXTsNCi0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG1fS2V5TGVuOyBqICsrKSB7DQotICAgICAgICAgICAgICAgIHRlbXBrZXlbal0gPSBlbmNrZXlbal0gXiBpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBDUllQVF9BcmNGb3VyQ3J5cHRCbG9jayhva2V5YnVmLCBva2V5bGVuLCB0ZW1wa2V5LCBrZXlfbGVuKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpbnQgbGVuID0gMzI7DQotICAgIHdoaWxlIChsZW4gJiYgZGVmcGFzc2NvZGVbbGVuIC0gMV0gPT0gb2tleWJ1ZltsZW4gLSAxXSkgew0KLSAgICAgICAgbGVuIC0tOw0KLSAgICB9DQotICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZyhva2V5YnVmLCBsZW4pOw0KLX0NCi1GWF9CT09MIENQREZfU3RhbmRhcmRTZWN1cml0eUhhbmRsZXI6OkNoZWNrT3duZXJQYXNzd29yZChGWF9MUENCWVRFIHBhc3N3b3JkLCBGWF9EV09SRCBwYXNzX3NpemUsDQotICAgICAgICBGWF9MUEJZVEUga2V5LCBGWF9JTlQzMiBrZXlfbGVuKQ0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgdXNlcl9wYXNzID0gR2V0VXNlclBhc3N3b3JkKHBhc3N3b3JkLCBwYXNzX3NpemUsIGtleV9sZW4pOw0KLSAgICBpZiAoQ2hlY2tVc2VyUGFzc3dvcmQodXNlcl9wYXNzLCB1c2VyX3Bhc3MuR2V0TGVuZ3RoKCksIEZBTFNFLCBrZXksIGtleV9sZW4pKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gQ2hlY2tVc2VyUGFzc3dvcmQodXNlcl9wYXNzLCB1c2VyX3Bhc3MuR2V0TGVuZ3RoKCksIFRSVUUsIGtleSwga2V5X2xlbik7DQotfQ0KLUZYX0JPT0wgQ1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcjo6SXNNZXRhZGF0YUVuY3J5cHRlZCgpDQotew0KLSAgICByZXR1cm4gbV9wRW5jcnlwdERpY3QtPkdldEJvb2xlYW4oRlhfQlNUUkMoIkVuY3J5cHRNZXRhZGF0YSIpLCBUUlVFKTsNCi19DQotQ1BERl9TZWN1cml0eUhhbmRsZXIqIEZQREZfQ3JlYXRlU3RhbmRhcmRTZWN1cml0eUhhbmRsZXIoKQ0KLXsNCi0gICAgcmV0dXJuIEZYX05FVyBDUERGX1N0YW5kYXJkU2VjdXJpdHlIYW5kbGVyOw0KLX0NCi12b2lkIENQREZfU3RhbmRhcmRTZWN1cml0eUhhbmRsZXI6Ok9uQ3JlYXRlKENQREZfRGljdGlvbmFyeSogcEVuY3J5cHREaWN0LCBDUERGX0FycmF5KiBwSWRBcnJheSwNCi0gICAgICAgIEZYX0xQQ0JZVEUgdXNlcl9wYXNzLCBGWF9EV09SRCB1c2VyX3NpemUsDQotICAgICAgICBGWF9MUENCWVRFIG93bmVyX3Bhc3MsIEZYX0RXT1JEIG93bmVyX3NpemUsIEZYX0JPT0wgYkRlZmF1bHQsIEZYX0RXT1JEIHR5cGUpDQotew0KLSAgICBpbnQgY2lwaGVyID0gMCwga2V5X2xlbiA9IDA7DQotICAgIGlmICghTG9hZERpY3QocEVuY3J5cHREaWN0LCB0eXBlLCBjaXBoZXIsIGtleV9sZW4pKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKGJEZWZhdWx0ICYmIChvd25lcl9wYXNzID09IE5VTEwgfHwgb3duZXJfc2l6ZSA9PSAwKSkgew0KLSAgICAgICAgb3duZXJfcGFzcyA9IHVzZXJfcGFzczsNCi0gICAgICAgIG93bmVyX3NpemUgPSB1c2VyX3NpemU7DQotICAgIH0NCi0gICAgaWYgKG1fUmV2aXNpb24gPj0gNSkgew0KLSAgICAgICAgaW50IHQgPSAoaW50KXRpbWUoTlVMTCk7DQotICAgICAgICBGWF9CWVRFIHNoYVsxMjhdOw0KLSAgICAgICAgQ1JZUFRfU0hBMjU2U3RhcnQoc2hhKTsNCi0gICAgICAgIENSWVBUX1NIQTI1NlVwZGF0ZShzaGEsIChGWF9CWVRFKikmdCwgc2l6ZW9mIHQpOw0KLSAgICAgICAgQ1JZUFRfU0hBMjU2VXBkYXRlKHNoYSwgbV9FbmNyeXB0S2V5LCAzMik7DQotICAgICAgICBDUllQVF9TSEEyNTZVcGRhdGUoc2hhLCAoRlhfQllURSopInRoZXJlIiwgNSk7DQotICAgICAgICBDUllQVF9TSEEyNTZGaW5pc2goc2hhLCBtX0VuY3J5cHRLZXkpOw0KLSAgICAgICAgQUVTMjU2X1NldFBhc3N3b3JkKHBFbmNyeXB0RGljdCwgdXNlcl9wYXNzLCB1c2VyX3NpemUsIEZBTFNFLCBtX0VuY3J5cHRLZXkpOw0KLSAgICAgICAgaWYgKGJEZWZhdWx0KSB7DQotICAgICAgICAgICAgQUVTMjU2X1NldFBhc3N3b3JkKHBFbmNyeXB0RGljdCwgb3duZXJfcGFzcywgb3duZXJfc2l6ZSwgVFJVRSwgbV9FbmNyeXB0S2V5KTsNCi0gICAgICAgICAgICBBRVMyNTZfU2V0UGVybXMocEVuY3J5cHREaWN0LCBtX1Blcm1pc3Npb25zLCBwRW5jcnlwdERpY3QtPkdldEJvb2xlYW4oRlhfQlNUUkMoIkVuY3J5cHRNZXRhZGF0YSIpLCBUUlVFKSwgbV9FbmNyeXB0S2V5KTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAoYkRlZmF1bHQpIHsNCi0gICAgICAgIEZYX0JZVEUgcGFzc2NvZGVbMzJdOw0KLSAgICAgICAgRlhfRFdPUkQgaTsNCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzMjsgaSArKykgew0KLSAgICAgICAgICAgIHBhc3Njb2RlW2ldID0gaSA8IG93bmVyX3NpemUgPyBvd25lcl9wYXNzW2ldIDogZGVmcGFzc2NvZGVbaSAtIG93bmVyX3NpemVdOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfQllURSBkaWdlc3RbMTZdOw0KLSAgICAgICAgQ1JZUFRfTUQ1R2VuZXJhdGUocGFzc2NvZGUsIDMyLCBkaWdlc3QpOw0KLSAgICAgICAgaWYgKG1fUmV2aXNpb24gPj0gMykgew0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTA7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgQ1JZUFRfTUQ1R2VuZXJhdGUoZGlnZXN0LCAxNiwgZGlnZXN0KTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBGWF9CWVRFIGVuY2tleVszMl07DQotICAgICAgICBGWFNZU19tZW1jcHkzMihlbmNrZXksIGRpZ2VzdCwga2V5X2xlbik7DQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkgKyspIHsNCi0gICAgICAgICAgICBwYXNzY29kZVtpXSA9IGkgPCB1c2VyX3NpemUgPyB1c2VyX3Bhc3NbaV0gOiBkZWZwYXNzY29kZVtpIC0gdXNlcl9zaXplXTsNCi0gICAgICAgIH0NCi0gICAgICAgIENSWVBUX0FyY0ZvdXJDcnlwdEJsb2NrKHBhc3Njb2RlLCAzMiwgZW5ja2V5LCBrZXlfbGVuKTsNCi0gICAgICAgIEZYX0JZVEUgdGVtcGtleVszMl07DQotICAgICAgICBpZiAobV9SZXZpc2lvbiA+PSAzKSB7DQotICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8PSAxOTsgaSArKykgew0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGtleV9sZW47IGogKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIHRlbXBrZXlbal0gPSBlbmNrZXlbal0gXiAoRlhfQllURSlpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIENSWVBUX0FyY0ZvdXJDcnlwdEJsb2NrKHBhc3Njb2RlLCAzMiwgdGVtcGtleSwga2V5X2xlbik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcEVuY3J5cHREaWN0LT5TZXRBdFN0cmluZyhGWF9CU1RSQygiTyIpLCBDRlhfQnl0ZVN0cmluZyhwYXNzY29kZSwgMzIpKTsNCi0gICAgfQ0KLSAgICBDYWxjRW5jcnlwdEtleShtX3BFbmNyeXB0RGljdCwgKEZYX0xQQllURSl1c2VyX3Bhc3MsIHVzZXJfc2l6ZSwgbV9FbmNyeXB0S2V5LCBrZXlfbGVuLCBGQUxTRSwgcElkQXJyYXkpOw0KLSAgICBpZiAobV9SZXZpc2lvbiA8IDMpIHsNCi0gICAgICAgIEZYX0JZVEUgdGVtcGJ1ZlszMl07DQotICAgICAgICBGWFNZU19tZW1jcHkzMih0ZW1wYnVmLCBkZWZwYXNzY29kZSwgMzIpOw0KLSAgICAgICAgQ1JZUFRfQXJjRm91ckNyeXB0QmxvY2sodGVtcGJ1ZiwgMzIsIG1fRW5jcnlwdEtleSwga2V5X2xlbik7DQotICAgICAgICBwRW5jcnlwdERpY3QtPlNldEF0U3RyaW5nKEZYX0JTVFJDKCJVIiksIENGWF9CeXRlU3RyaW5nKHRlbXBidWYsIDMyKSk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBGWF9CWVRFIG1kNVsxMDBdOw0KLSAgICAgICAgQ1JZUFRfTUQ1U3RhcnQobWQ1KTsNCi0gICAgICAgIENSWVBUX01ENVVwZGF0ZShtZDUsIGRlZnBhc3Njb2RlLCAzMik7DQotICAgICAgICBpZiAocElkQXJyYXkpIHsNCi0gICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBpZCA9IHBJZEFycmF5LT5HZXRTdHJpbmcoMCk7DQotICAgICAgICAgICAgQ1JZUFRfTUQ1VXBkYXRlKG1kNSwgKEZYX0xQQllURSkoRlhfTFBDU1RSKWlkLCBpZC5HZXRMZW5ndGgoKSk7DQotICAgICAgICB9DQotICAgICAgICBGWF9CWVRFIGRpZ2VzdFszMl07DQotICAgICAgICBDUllQVF9NRDVGaW5pc2gobWQ1LCBkaWdlc3QpOw0KLSAgICAgICAgQ1JZUFRfQXJjRm91ckNyeXB0QmxvY2soZGlnZXN0LCAxNiwgbV9FbmNyeXB0S2V5LCBrZXlfbGVuKTsNCi0gICAgICAgIEZYX0JZVEUgdGVtcGtleVszMl07DQotICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSAxOTsgaSArKykgew0KLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwga2V5X2xlbjsgaiArKykgew0KLSAgICAgICAgICAgICAgICB0ZW1wa2V5W2pdID0gbV9FbmNyeXB0S2V5W2pdIF4gKEZYX0JZVEUpaTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgQ1JZUFRfQXJjRm91ckNyeXB0QmxvY2soZGlnZXN0LCAxNiwgdGVtcGtleSwga2V5X2xlbik7DQotICAgICAgICB9DQotICAgICAgICBDUllQVF9NRDVHZW5lcmF0ZShkaWdlc3QsIDE2LCBkaWdlc3QgKyAxNik7DQotICAgICAgICBwRW5jcnlwdERpY3QtPlNldEF0U3RyaW5nKEZYX0JTVFJDKCJVIiksIENGWF9CeXRlU3RyaW5nKGRpZ2VzdCwgMzIpKTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfU3RhbmRhcmRTZWN1cml0eUhhbmRsZXI6Ok9uQ3JlYXRlKENQREZfRGljdGlvbmFyeSogcEVuY3J5cHREaWN0LCBDUERGX0FycmF5KiBwSWRBcnJheSwNCi0gICAgICAgIEZYX0xQQ0JZVEUgdXNlcl9wYXNzLCBGWF9EV09SRCB1c2VyX3NpemUsDQotICAgICAgICBGWF9MUENCWVRFIG93bmVyX3Bhc3MsIEZYX0RXT1JEIG93bmVyX3NpemUsIEZYX0RXT1JEIHR5cGUpDQotew0KLSAgICBPbkNyZWF0ZShwRW5jcnlwdERpY3QsIHBJZEFycmF5LCB1c2VyX3Bhc3MsIHVzZXJfc2l6ZSwgb3duZXJfcGFzcywgb3duZXJfc2l6ZSwgVFJVRSwgdHlwZSk7DQotfQ0KLXZvaWQgQ1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcjo6T25DcmVhdGUoQ1BERl9EaWN0aW9uYXJ5KiBwRW5jcnlwdERpY3QsIENQREZfQXJyYXkqIHBJZEFycmF5LCBGWF9MUENCWVRFIHVzZXJfcGFzcywgRlhfRFdPUkQgdXNlcl9zaXplLCBGWF9EV09SRCB0eXBlKQ0KLXsNCi0gICAgT25DcmVhdGUocEVuY3J5cHREaWN0LCBwSWRBcnJheSwgdXNlcl9wYXNzLCB1c2VyX3NpemUsIE5VTEwsIDAsIEZBTFNFLCB0eXBlKTsNCi19DQotdm9pZCBDUERGX1N0YW5kYXJkU2VjdXJpdHlIYW5kbGVyOjpBRVMyNTZfU2V0UGFzc3dvcmQoQ1BERl9EaWN0aW9uYXJ5KiBwRW5jcnlwdERpY3QsIEZYX0xQQ0JZVEUgcGFzc3dvcmQsIEZYX0RXT1JEIHNpemUsIEZYX0JPT0wgYk93bmVyLCBGWF9MUENCWVRFIGtleSkNCi17DQotICAgIEZYX0JZVEUgc2hhWzEyOF07DQotICAgIENSWVBUX1NIQTFTdGFydChzaGEpOw0KLSAgICBDUllQVF9TSEExVXBkYXRlKHNoYSwga2V5LCAzMik7DQotICAgIENSWVBUX1NIQTFVcGRhdGUoc2hhLCAoRlhfQllURSopImhlbGxvIiwgNSk7DQotICAgIEZYX0JZVEUgZGlnZXN0WzIwXTsNCi0gICAgQ1JZUFRfU0hBMUZpbmlzaChzaGEsIGRpZ2VzdCk7DQotICAgIENGWF9CeXRlU3RyaW5nIHVrZXkgPSBwRW5jcnlwdERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiVSIpKTsNCi0gICAgRlhfQllURSBkaWdlc3QxWzQ4XTsNCi0gICAgaWYgKG1fUmV2aXNpb24gPj0gNikgew0KLSAgICAgICAgUmV2aXNpb242X0hhc2gocGFzc3dvcmQsIHNpemUsIGRpZ2VzdCwgKGJPd25lciA/IChGWF9MUENCWVRFKXVrZXkgOiBOVUxMKSwgZGlnZXN0MSk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBDUllQVF9TSEEyNTZTdGFydChzaGEpOw0KLSAgICAgICAgQ1JZUFRfU0hBMjU2VXBkYXRlKHNoYSwgcGFzc3dvcmQsIHNpemUpOw0KLSAgICAgICAgQ1JZUFRfU0hBMjU2VXBkYXRlKHNoYSwgZGlnZXN0LCA4KTsNCi0gICAgICAgIGlmIChiT3duZXIpIHsNCi0gICAgICAgICAgICBDUllQVF9TSEEyNTZVcGRhdGUoc2hhLCB1a2V5LCB1a2V5LkdldExlbmd0aCgpKTsNCi0gICAgICAgIH0NCi0gICAgICAgIENSWVBUX1NIQTI1NkZpbmlzaChzaGEsIGRpZ2VzdDEpOw0KLSAgICB9DQotICAgIEZYU1lTX21lbWNweTMyKGRpZ2VzdDEgKyAzMiwgZGlnZXN0LCAxNik7DQotICAgIHBFbmNyeXB0RGljdC0+U2V0QXRTdHJpbmcoYk93bmVyID8gRlhfQlNUUkMoIk8iKSA6IEZYX0JTVFJDKCJVIiksIENGWF9CeXRlU3RyaW5nKGRpZ2VzdDEsIDQ4KSk7DQotICAgIGlmIChtX1JldmlzaW9uID49IDYpIHsNCi0gICAgICAgIFJldmlzaW9uNl9IYXNoKHBhc3N3b3JkLCBzaXplLCBkaWdlc3QgKyA4LCAoYk93bmVyID8gKEZYX0xQQ0JZVEUpdWtleSA6IE5VTEwpLCBkaWdlc3QxKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIENSWVBUX1NIQTI1NlN0YXJ0KHNoYSk7DQotICAgICAgICBDUllQVF9TSEEyNTZVcGRhdGUoc2hhLCBwYXNzd29yZCwgc2l6ZSk7DQotICAgICAgICBDUllQVF9TSEEyNTZVcGRhdGUoc2hhLCBkaWdlc3QgKyA4LCA4KTsNCi0gICAgICAgIGlmIChiT3duZXIpIHsNCi0gICAgICAgICAgICBDUllQVF9TSEEyNTZVcGRhdGUoc2hhLCB1a2V5LCB1a2V5LkdldExlbmd0aCgpKTsNCi0gICAgICAgIH0NCi0gICAgICAgIENSWVBUX1NIQTI1NkZpbmlzaChzaGEsIGRpZ2VzdDEpOw0KLSAgICB9DQotICAgIEZYX0JZVEUqIGFlcyA9IEZYX0FsbG9jKEZYX0JZVEUsIDIwNDgpOw0KLSAgICBDUllQVF9BRVNTZXRLZXkoYWVzLCAxNiwgZGlnZXN0MSwgMzIsIFRSVUUpOw0KLSAgICBGWF9CWVRFIGl2WzE2XTsNCi0gICAgRlhTWVNfbWVtc2V0MzIoaXYsIDAsIDE2KTsNCi0gICAgQ1JZUFRfQUVTU2V0SVYoYWVzLCBpdik7DQotICAgIENSWVBUX0FFU0VuY3J5cHQoYWVzLCBkaWdlc3QxLCBrZXksIDMyKTsNCi0gICAgRlhfRnJlZShhZXMpOw0KLSAgICBwRW5jcnlwdERpY3QtPlNldEF0U3RyaW5nKGJPd25lciA/IEZYX0JTVFJDKCJPRSIpIDogRlhfQlNUUkMoIlVFIiksIENGWF9CeXRlU3RyaW5nKGRpZ2VzdDEsIDMyKSk7DQotfQ0KLXZvaWQgQ1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcjo6QUVTMjU2X1NldFBlcm1zKENQREZfRGljdGlvbmFyeSogcEVuY3J5cHREaWN0LCBGWF9EV09SRCBwZXJtaXNzaW9ucywNCi0gICAgICAgIEZYX0JPT0wgYkVuY3J5cHRNZXRhZGF0YSwgRlhfTFBDQllURSBrZXkpDQotew0KLSAgICBGWF9CWVRFIGJ1ZlsxNl07DQotICAgIGJ1ZlswXSA9IChGWF9CWVRFKXBlcm1pc3Npb25zOw0KLSAgICBidWZbMV0gPSAoRlhfQllURSkocGVybWlzc2lvbnMgPj4gOCk7DQotICAgIGJ1ZlsyXSA9IChGWF9CWVRFKShwZXJtaXNzaW9ucyA+PiAxNik7DQotICAgIGJ1ZlszXSA9IChGWF9CWVRFKShwZXJtaXNzaW9ucyA+PiAyNCk7DQotICAgIGJ1Zls0XSA9IDB4ZmY7DQotICAgIGJ1Zls1XSA9IDB4ZmY7DQotICAgIGJ1Zls2XSA9IDB4ZmY7DQotICAgIGJ1Zls3XSA9IDB4ZmY7DQotICAgIGJ1Zls4XSA9IGJFbmNyeXB0TWV0YWRhdGEgPyAnVCcgOiAnRic7DQotICAgIGJ1Zls5XSA9ICdhJzsNCi0gICAgYnVmWzEwXSA9ICdkJzsNCi0gICAgYnVmWzExXSA9ICdiJzsNCi0gICAgRlhfQllURSogYWVzID0gRlhfQWxsb2MoRlhfQllURSwgMjA0OCk7DQotICAgIENSWVBUX0FFU1NldEtleShhZXMsIDE2LCBrZXksIDMyLCBUUlVFKTsNCi0gICAgRlhfQllURSBpdlsxNl0sIGJ1ZjFbMTZdOw0KLSAgICBGWFNZU19tZW1zZXQzMihpdiwgMCwgMTYpOw0KLSAgICBDUllQVF9BRVNTZXRJVihhZXMsIGl2KTsNCi0gICAgQ1JZUFRfQUVTRW5jcnlwdChhZXMsIGJ1ZjEsIGJ1ZiwgMTYpOw0KLSAgICBGWF9GcmVlKGFlcyk7DQotICAgIHBFbmNyeXB0RGljdC0+U2V0QXRTdHJpbmcoRlhfQlNUUkMoIlBlcm1zIiksIENGWF9CeXRlU3RyaW5nKGJ1ZjEsIDE2KSk7DQotfQ0KLXZvaWQgQ1BERl9TdGFuZGFyZENyeXB0b0hhbmRsZXI6OkNyeXB0QmxvY2soRlhfQk9PTCBiRW5jcnlwdCwgRlhfRFdPUkQgb2JqbnVtLCBGWF9EV09SRCBnZW5udW0sIEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsDQotICAgICAgICBGWF9MUEJZVEUgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpDQotew0KLSAgICBpZiAobV9DaXBoZXIgPT0gRlhDSVBIRVJfTk9ORSkgew0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIoZGVzdF9idWYsIHNyY19idWYsIHNyY19zaXplKTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9CWVRFIHJlYWxrZXlbMTZdOw0KLSAgICBpbnQgcmVhbGtleWxlbiA9IDE2Ow0KLSAgICBpZiAobV9DaXBoZXIgIT0gRlhDSVBIRVJfQUVTIHx8IG1fS2V5TGVuICE9IDMyKSB7DQotICAgICAgICBGWF9CWVRFIGtleTFbMzJdOw0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIoa2V5MSwgbV9FbmNyeXB0S2V5LCBtX0tleUxlbik7DQotICAgICAgICBrZXkxW21fS2V5TGVuICsgMF0gPSAoRlhfQllURSlvYmpudW07DQotICAgICAgICBrZXkxW21fS2V5TGVuICsgMV0gPSAoRlhfQllURSkob2JqbnVtID4+IDgpOw0KLSAgICAgICAga2V5MVttX0tleUxlbiArIDJdID0gKEZYX0JZVEUpKG9iam51bSA+PiAxNik7DQotICAgICAgICBrZXkxW21fS2V5TGVuICsgM10gPSAoRlhfQllURSlnZW5udW07DQotICAgICAgICBrZXkxW21fS2V5TGVuICsgNF0gPSAoRlhfQllURSkoZ2VubnVtID4+IDgpOw0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIoa2V5MSArIG1fS2V5TGVuLCAmb2JqbnVtLCAzKTsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKGtleTEgKyBtX0tleUxlbiArIDMsICZnZW5udW0sIDIpOw0KLSAgICAgICAgaWYgKG1fQ2lwaGVyID09IEZYQ0lQSEVSX0FFUykgew0KLSAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKGtleTEgKyBtX0tleUxlbiArIDUsICJzQWxUIiwgNCk7DQotICAgICAgICB9DQotICAgICAgICBDUllQVF9NRDVHZW5lcmF0ZShrZXkxLCBtX0NpcGhlciA9PSBGWENJUEhFUl9BRVMgPyBtX0tleUxlbiArIDkgOiBtX0tleUxlbiArIDUsIHJlYWxrZXkpOw0KLSAgICAgICAgcmVhbGtleWxlbiA9IG1fS2V5TGVuICsgNTsNCi0gICAgICAgIGlmIChyZWFsa2V5bGVuID4gMTYpIHsNCi0gICAgICAgICAgICByZWFsa2V5bGVuID0gMTY7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKG1fQ2lwaGVyID09IEZYQ0lQSEVSX0FFUykgew0KLSAgICAgICAgQ1JZUFRfQUVTU2V0S2V5KG1fcEFFU0NvbnRleHQsIDE2LCBtX0tleUxlbiA9PSAzMiA/IG1fRW5jcnlwdEtleSA6IHJlYWxrZXksIG1fS2V5TGVuLCBiRW5jcnlwdCk7DQotICAgICAgICBpZiAoYkVuY3J5cHQpIHsNCi0gICAgICAgICAgICBGWF9CWVRFIGl2WzE2XTsNCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpICsrKSB7DQotICAgICAgICAgICAgICAgIGl2W2ldID0gKEZYX0JZVEUpcmFuZCgpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBDUllQVF9BRVNTZXRJVihtX3BBRVNDb250ZXh0LCBpdik7DQotICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIoZGVzdF9idWYsIGl2LCAxNik7DQotICAgICAgICAgICAgaW50IG5ibG9ja3MgPSBzcmNfc2l6ZSAvIDE2Ow0KLSAgICAgICAgICAgIENSWVBUX0FFU0VuY3J5cHQobV9wQUVTQ29udGV4dCwgZGVzdF9idWYgKyAxNiwgc3JjX2J1ZiwgbmJsb2NrcyAqIDE2KTsNCi0gICAgICAgICAgICBGWF9CWVRFIHBhZGRpbmdbMTZdOw0KLSAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKHBhZGRpbmcsIHNyY19idWYgKyBuYmxvY2tzICogMTYsIHNyY19zaXplICUgMTYpOw0KLSAgICAgICAgICAgIEZYU1lTX21lbXNldDgocGFkZGluZyArIHNyY19zaXplICUgMTYsIDE2IC0gc3JjX3NpemUgJSAxNiwgMTYgLSBzcmNfc2l6ZSAlIDE2KTsNCi0gICAgICAgICAgICBDUllQVF9BRVNFbmNyeXB0KG1fcEFFU0NvbnRleHQsIGRlc3RfYnVmICsgbmJsb2NrcyAqIDE2ICsgMTYsIHBhZGRpbmcsIDE2KTsNCi0gICAgICAgICAgICBkZXN0X3NpemUgPSAzMiArIG5ibG9ja3MgKiAxNjsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgQ1JZUFRfQUVTU2V0SVYobV9wQUVTQ29udGV4dCwgc3JjX2J1Zik7DQotICAgICAgICAgICAgQ1JZUFRfQUVTRGVjcnlwdChtX3BBRVNDb250ZXh0LCBkZXN0X2J1Ziwgc3JjX2J1ZiArIDE2LCBzcmNfc2l6ZSAtIDE2KTsNCi0gICAgICAgICAgICBkZXN0X3NpemUgPSBzcmNfc2l6ZSAtIDE2Ow0KLSAgICAgICAgICAgIGRlc3Rfc2l6ZSAtPSBkZXN0X2J1ZltkZXN0X3NpemUgLSAxXTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEFTU0VSVChkZXN0X3NpemUgPT0gc3JjX3NpemUpOw0KLSAgICAgICAgaWYgKGRlc3RfYnVmICE9IHNyY19idWYpIHsNCi0gICAgICAgICAgICBGWFNZU19tZW1jcHkzMihkZXN0X2J1Ziwgc3JjX2J1Ziwgc3JjX3NpemUpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1JZUFRfQXJjRm91ckNyeXB0QmxvY2soZGVzdF9idWYsIGRlc3Rfc2l6ZSwgcmVhbGtleSwgcmVhbGtleWxlbik7DQotICAgIH0NCi19DQotdHlwZWRlZiBzdHJ1Y3QgX0FFU0NyeXB0Q29udGV4dCB7DQotICAgIEZYX0JZVEUJCW1fQ29udGV4dFsyMDQ4XTsNCi0gICAgRlhfQk9PTAkJbV9iSVY7DQotICAgIEZYX0JZVEUJCW1fQmxvY2tbMTZdOw0KLSAgICBGWF9EV09SRAltX0Jsb2NrT2Zmc2V0Ow0KLX0gQUVTQ3J5cHRDb250ZXh0Ow0KLUZYX0xQVk9JRCBDUERGX1N0YW5kYXJkQ3J5cHRvSGFuZGxlcjo6Q3J5cHRTdGFydChGWF9EV09SRCBvYmpudW0sIEZYX0RXT1JEIGdlbm51bSwgRlhfQk9PTCBiRW5jcnlwdCkNCi17DQotICAgIGlmIChtX0NpcGhlciA9PSBGWENJUEhFUl9OT05FKSB7DQotICAgICAgICByZXR1cm4gdGhpczsNCi0gICAgfQ0KLSAgICBpZiAobV9DaXBoZXIgPT0gRlhDSVBIRVJfQUVTICYmIG1fS2V5TGVuID09IDMyKSB7DQotICAgICAgICBBRVNDcnlwdENvbnRleHQqIHBDb250ZXh0ID0gRlhfQWxsb2MoQUVTQ3J5cHRDb250ZXh0LCAxKTsNCi0gICAgICAgIHBDb250ZXh0LT5tX2JJViA9IFRSVUU7DQotICAgICAgICBwQ29udGV4dC0+bV9CbG9ja09mZnNldCA9IDA7DQotICAgICAgICBDUllQVF9BRVNTZXRLZXkocENvbnRleHQtPm1fQ29udGV4dCwgMTYsIG1fRW5jcnlwdEtleSwgMzIsIGJFbmNyeXB0KTsNCi0gICAgICAgIGlmIChiRW5jcnlwdCkgew0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgcENvbnRleHQtPm1fQmxvY2tbaV0gPSAoRlhfQllURSlyYW5kKCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIENSWVBUX0FFU1NldElWKHBDb250ZXh0LT5tX0NvbnRleHQsIHBDb250ZXh0LT5tX0Jsb2NrKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBwQ29udGV4dDsNCi0gICAgfQ0KLSAgICBGWF9CWVRFIGtleTFbNDhdOw0KLSAgICBGWFNZU19tZW1jcHkzMihrZXkxLCBtX0VuY3J5cHRLZXksIG1fS2V5TGVuKTsNCi0gICAgRlhTWVNfbWVtY3B5MzIoa2V5MSArIG1fS2V5TGVuLCAmb2JqbnVtLCAzKTsNCi0gICAgRlhTWVNfbWVtY3B5MzIoa2V5MSArIG1fS2V5TGVuICsgMywgJmdlbm51bSwgMik7DQotICAgIGlmIChtX0NpcGhlciA9PSBGWENJUEhFUl9BRVMpIHsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKGtleTEgKyBtX0tleUxlbiArIDUsICJzQWxUIiwgNCk7DQotICAgIH0NCi0gICAgRlhfQllURSByZWFsa2V5WzE2XTsNCi0gICAgQ1JZUFRfTUQ1R2VuZXJhdGUoa2V5MSwgbV9DaXBoZXIgPT0gRlhDSVBIRVJfQUVTID8gbV9LZXlMZW4gKyA5IDogbV9LZXlMZW4gKyA1LCByZWFsa2V5KTsNCi0gICAgaW50IHJlYWxrZXlsZW4gPSBtX0tleUxlbiArIDU7DQotICAgIGlmIChyZWFsa2V5bGVuID4gMTYpIHsNCi0gICAgICAgIHJlYWxrZXlsZW4gPSAxNjsNCi0gICAgfQ0KLSAgICBpZiAobV9DaXBoZXIgPT0gRlhDSVBIRVJfQUVTKSB7DQotICAgICAgICBBRVNDcnlwdENvbnRleHQqIHBDb250ZXh0ID0gRlhfQWxsb2MoQUVTQ3J5cHRDb250ZXh0LCAxKTsNCi0gICAgICAgIHBDb250ZXh0LT5tX2JJViA9IFRSVUU7DQotICAgICAgICBwQ29udGV4dC0+bV9CbG9ja09mZnNldCA9IDA7DQotICAgICAgICBDUllQVF9BRVNTZXRLZXkocENvbnRleHQtPm1fQ29udGV4dCwgMTYsIHJlYWxrZXksIDE2LCBiRW5jcnlwdCk7DQotICAgICAgICBpZiAoYkVuY3J5cHQpIHsNCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpICsrKSB7DQotICAgICAgICAgICAgICAgIHBDb250ZXh0LT5tX0Jsb2NrW2ldID0gKEZYX0JZVEUpcmFuZCgpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBDUllQVF9BRVNTZXRJVihwQ29udGV4dC0+bV9Db250ZXh0LCBwQ29udGV4dC0+bV9CbG9jayk7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gcENvbnRleHQ7DQotICAgIH0NCi0gICAgdm9pZCogcENvbnRleHQgPSBGWF9BbGxvYyhGWF9CWVRFLCAxMDQwKTsNCi0gICAgQ1JZUFRfQXJjRm91clNldHVwKHBDb250ZXh0LCByZWFsa2V5LCByZWFsa2V5bGVuKTsNCi0gICAgcmV0dXJuIHBDb250ZXh0Ow0KLX0NCi1GWF9CT09MIENQREZfU3RhbmRhcmRDcnlwdG9IYW5kbGVyOjpDcnlwdFN0cmVhbShGWF9MUFZPSUQgY29udGV4dCwgRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYsIEZYX0JPT0wgYkVuY3J5cHQpDQotew0KLSAgICBpZiAoIWNvbnRleHQpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAobV9DaXBoZXIgPT0gRlhDSVBIRVJfTk9ORSkgew0KLSAgICAgICAgZGVzdF9idWYuQXBwZW5kQmxvY2soc3JjX2J1Ziwgc3JjX3NpemUpOw0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgaWYgKG1fQ2lwaGVyID09IEZYQ0lQSEVSX1JDNCkgew0KLSAgICAgICAgaW50IG9sZF9zaXplID0gZGVzdF9idWYuR2V0U2l6ZSgpOw0KLSAgICAgICAgZGVzdF9idWYuQXBwZW5kQmxvY2soc3JjX2J1Ziwgc3JjX3NpemUpOw0KLSAgICAgICAgQ1JZUFRfQXJjRm91ckNyeXB0KGNvbnRleHQsIGRlc3RfYnVmLkdldEJ1ZmZlcigpICsgb2xkX3NpemUsIHNyY19zaXplKTsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIEFFU0NyeXB0Q29udGV4dCogcENvbnRleHQgPSAoQUVTQ3J5cHRDb250ZXh0Kiljb250ZXh0Ow0KLSAgICBpZiAocENvbnRleHQtPm1fYklWICYmIGJFbmNyeXB0KSB7DQotICAgICAgICBkZXN0X2J1Zi5BcHBlbmRCbG9jayhwQ29udGV4dC0+bV9CbG9jaywgMTYpOw0KLSAgICAgICAgcENvbnRleHQtPm1fYklWID0gRkFMU0U7DQotICAgIH0NCi0gICAgRlhfRFdPUkQgc3JjX29mZiA9IDA7DQotICAgIEZYX0RXT1JEIHNyY19sZWZ0ID0gc3JjX3NpemU7DQotICAgIHdoaWxlICgxKSB7DQotICAgICAgICBGWF9EV09SRCBjb3B5X3NpemUgPSAxNiAtIHBDb250ZXh0LT5tX0Jsb2NrT2Zmc2V0Ow0KLSAgICAgICAgaWYgKGNvcHlfc2l6ZSA+IHNyY19sZWZ0KSB7DQotICAgICAgICAgICAgY29weV9zaXplID0gc3JjX2xlZnQ7DQotICAgICAgICB9DQotICAgICAgICBGWFNZU19tZW1jcHkzMihwQ29udGV4dC0+bV9CbG9jayArIHBDb250ZXh0LT5tX0Jsb2NrT2Zmc2V0LCBzcmNfYnVmICsgc3JjX29mZiwgY29weV9zaXplKTsNCi0gICAgICAgIHNyY19vZmYgKz0gY29weV9zaXplOw0KLSAgICAgICAgc3JjX2xlZnQgLT0gY29weV9zaXplOw0KLSAgICAgICAgcENvbnRleHQtPm1fQmxvY2tPZmZzZXQgKz0gY29weV9zaXplOw0KLSAgICAgICAgaWYgKHBDb250ZXh0LT5tX0Jsb2NrT2Zmc2V0ID09IDE2KSB7DQotICAgICAgICAgICAgaWYgKCFiRW5jcnlwdCAmJiBwQ29udGV4dC0+bV9iSVYpIHsNCi0gICAgICAgICAgICAgICAgQ1JZUFRfQUVTU2V0SVYocENvbnRleHQtPm1fQ29udGV4dCwgcENvbnRleHQtPm1fQmxvY2spOw0KLSAgICAgICAgICAgICAgICBwQ29udGV4dC0+bV9iSVYgPSBGQUxTRTsNCi0gICAgICAgICAgICAgICAgcENvbnRleHQtPm1fQmxvY2tPZmZzZXQgPSAwOw0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3JjX29mZiA8IHNyY19zaXplKSB7DQotICAgICAgICAgICAgICAgIEZYX0JZVEUgYmxvY2tfYnVmWzE2XTsNCi0gICAgICAgICAgICAgICAgaWYgKGJFbmNyeXB0KSB7DQotICAgICAgICAgICAgICAgICAgICBDUllQVF9BRVNFbmNyeXB0KHBDb250ZXh0LT5tX0NvbnRleHQsIGJsb2NrX2J1ZiwgcENvbnRleHQtPm1fQmxvY2ssIDE2KTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIENSWVBUX0FFU0RlY3J5cHQocENvbnRleHQtPm1fQ29udGV4dCwgYmxvY2tfYnVmLCBwQ29udGV4dC0+bV9CbG9jaywgMTYpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGRlc3RfYnVmLkFwcGVuZEJsb2NrKGJsb2NrX2J1ZiwgMTYpOw0KLSAgICAgICAgICAgICAgICBwQ29udGV4dC0+bV9CbG9ja09mZnNldCA9IDA7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCFzcmNfbGVmdCkgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENQREZfU3RhbmRhcmRDcnlwdG9IYW5kbGVyOjpDcnlwdEZpbmlzaChGWF9MUFZPSUQgY29udGV4dCwgQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYsIEZYX0JPT0wgYkVuY3J5cHQpDQotew0KLSAgICBpZiAoIWNvbnRleHQpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAobV9DaXBoZXIgPT0gRlhDSVBIRVJfTk9ORSkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgaWYgKG1fQ2lwaGVyID09IEZYQ0lQSEVSX1JDNCkgew0KLSAgICAgICAgRlhfRnJlZShjb250ZXh0KTsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIEFFU0NyeXB0Q29udGV4dCogcENvbnRleHQgPSAoQUVTQ3J5cHRDb250ZXh0Kiljb250ZXh0Ow0KLSAgICBpZiAoYkVuY3J5cHQpIHsNCi0gICAgICAgIEZYX0JZVEUgYmxvY2tfYnVmWzE2XTsNCi0gICAgICAgIGlmIChwQ29udGV4dC0+bV9CbG9ja09mZnNldCA9PSAxNikgew0KLSAgICAgICAgICAgIENSWVBUX0FFU0VuY3J5cHQocENvbnRleHQtPm1fQ29udGV4dCwgYmxvY2tfYnVmLCBwQ29udGV4dC0+bV9CbG9jaywgMTYpOw0KLSAgICAgICAgICAgIGRlc3RfYnVmLkFwcGVuZEJsb2NrKGJsb2NrX2J1ZiwgMTYpOw0KLSAgICAgICAgICAgIHBDb250ZXh0LT5tX0Jsb2NrT2Zmc2V0ID0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYU1lTX21lbXNldDgocENvbnRleHQtPm1fQmxvY2sgKyBwQ29udGV4dC0+bV9CbG9ja09mZnNldCwgKEZYX0JZVEUpKDE2IC0gcENvbnRleHQtPm1fQmxvY2tPZmZzZXQpLCAxNiAtIHBDb250ZXh0LT5tX0Jsb2NrT2Zmc2V0KTsNCi0gICAgICAgIENSWVBUX0FFU0VuY3J5cHQocENvbnRleHQtPm1fQ29udGV4dCwgYmxvY2tfYnVmLCBwQ29udGV4dC0+bV9CbG9jaywgMTYpOw0KLSAgICAgICAgZGVzdF9idWYuQXBwZW5kQmxvY2soYmxvY2tfYnVmLCAxNik7DQotICAgIH0gZWxzZSBpZiAocENvbnRleHQtPm1fQmxvY2tPZmZzZXQgPT0gMTYpIHsNCi0gICAgICAgIEZYX0JZVEUgYmxvY2tfYnVmWzE2XTsNCi0gICAgICAgIENSWVBUX0FFU0RlY3J5cHQocENvbnRleHQtPm1fQ29udGV4dCwgYmxvY2tfYnVmLCBwQ29udGV4dC0+bV9CbG9jaywgMTYpOw0KLSAgICAgICAgaWYgKGJsb2NrX2J1ZlsxNV0gPD0gMTYpIHsNCi0gICAgICAgICAgICBkZXN0X2J1Zi5BcHBlbmRCbG9jayhibG9ja19idWYsIDE2IC0gYmxvY2tfYnVmWzE1XSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhfRnJlZShwQ29udGV4dCk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9MUFZPSUQgQ1BERl9TdGFuZGFyZENyeXB0b0hhbmRsZXI6OkRlY3J5cHRTdGFydChGWF9EV09SRCBvYmpudW0sIEZYX0RXT1JEIGdlbm51bSkNCi17DQotICAgIHJldHVybiBDcnlwdFN0YXJ0KG9iam51bSwgZ2VubnVtLCBGQUxTRSk7DQotfQ0KLUZYX0RXT1JEIENQREZfU3RhbmRhcmRDcnlwdG9IYW5kbGVyOjpEZWNyeXB0R2V0U2l6ZShGWF9EV09SRCBzcmNfc2l6ZSkNCi17DQotICAgIHJldHVybiBtX0NpcGhlciA9PSBGWENJUEhFUl9BRVMgPyBzcmNfc2l6ZSAtIDE2IDogc3JjX3NpemU7DQotfQ0KLUZYX0JPT0wgQ1BERl9TdGFuZGFyZENyeXB0b0hhbmRsZXI6OkluaXQoQ1BERl9EaWN0aW9uYXJ5KiBwRW5jcnlwdERpY3QsIENQREZfU2VjdXJpdHlIYW5kbGVyKiBwU2VjdXJpdHlIYW5kbGVyKQ0KLXsNCi0gICAgRlhfTFBDQllURSBrZXk7DQotICAgIGlmICghcFNlY3VyaXR5SGFuZGxlci0+R2V0Q3J5cHRJbmZvKG1fQ2lwaGVyLCBrZXksIG1fS2V5TGVuKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChtX0tleUxlbiA+IDMyIHx8IG1fS2V5TGVuIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChtX0NpcGhlciAhPSBGWENJUEhFUl9OT05FKSB7DQotICAgICAgICBGWFNZU19tZW1jcHkzMihtX0VuY3J5cHRLZXksIGtleSwgbV9LZXlMZW4pOw0KLSAgICB9DQotICAgIGlmIChtX0NpcGhlciA9PSBGWENJUEhFUl9BRVMpIHsNCi0gICAgICAgIG1fcEFFU0NvbnRleHQgPSBGWF9BbGxvYyhGWF9CWVRFLCAyMDQ4KTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDUERGX1N0YW5kYXJkQ3J5cHRvSGFuZGxlcjo6SW5pdChpbnQgY2lwaGVyLCBGWF9MUENCWVRFIGtleSwgaW50IGtleWxlbikNCi17DQotICAgIGlmIChjaXBoZXIgPT0gRlhDSVBIRVJfQUVTKSB7DQotICAgICAgICBzd2l0Y2goa2V5bGVuKSB7DQotICAgICAgICAgICAgY2FzZSAxNjoNCi0gICAgICAgICAgICBjYXNlIDI0Og0KLSAgICAgICAgICAgIGNhc2UgMzI6DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIGlmIChjaXBoZXIgPT0gRlhDSVBIRVJfQUVTMikgew0KLSAgICAgICAgaWYgKGtleWxlbiAhPSAzMikgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIGlmIChjaXBoZXIgPT0gRlhDSVBIRVJfUkM0KSB7DQotICAgICAgICBpZiAoa2V5bGVuIDwgNSB8fCBrZXlsZW4gPiAxNikgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGlmIChrZXlsZW4gPiAzMikgew0KLSAgICAgICAgICAgIGtleWxlbiA9IDMyOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fQ2lwaGVyID0gY2lwaGVyOw0KLSAgICBtX0tleUxlbiA9IGtleWxlbjsNCi0gICAgRlhTWVNfbWVtY3B5MzIobV9FbmNyeXB0S2V5LCBrZXksIGtleWxlbik7DQotICAgIGlmIChtX0NpcGhlciA9PSBGWENJUEhFUl9BRVMpIHsNCi0gICAgICAgIG1fcEFFU0NvbnRleHQgPSBGWF9BbGxvYyhGWF9CWVRFLCAyMDQ4KTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDUERGX1N0YW5kYXJkQ3J5cHRvSGFuZGxlcjo6RGVjcnlwdFN0cmVhbShGWF9MUFZPSUQgY29udGV4dCwgRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwNCi0gICAgICAgIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKQ0KLXsNCi0gICAgcmV0dXJuIENyeXB0U3RyZWFtKGNvbnRleHQsIHNyY19idWYsIHNyY19zaXplLCBkZXN0X2J1ZiwgRkFMU0UpOw0KLX0NCi1GWF9CT09MIENQREZfU3RhbmRhcmRDcnlwdG9IYW5kbGVyOjpEZWNyeXB0RmluaXNoKEZYX0xQVk9JRCBjb250ZXh0LCBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1ZikNCi17DQotICAgIHJldHVybiBDcnlwdEZpbmlzaChjb250ZXh0LCBkZXN0X2J1ZiwgRkFMU0UpOw0KLX0NCi1GWF9EV09SRCBDUERGX1N0YW5kYXJkQ3J5cHRvSGFuZGxlcjo6RW5jcnlwdEdldFNpemUoRlhfRFdPUkQgb2JqbnVtLCBGWF9EV09SRCB2ZXJzaW9uLCBGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplKQ0KLXsNCi0gICAgaWYgKG1fQ2lwaGVyID09IEZYQ0lQSEVSX0FFUykgew0KLSAgICAgICAgcmV0dXJuIHNyY19zaXplICsgMzI7DQotICAgIH0NCi0gICAgcmV0dXJuIHNyY19zaXplOw0KLX0NCi1GWF9CT09MIENQREZfU3RhbmRhcmRDcnlwdG9IYW5kbGVyOjpFbmNyeXB0Q29udGVudChGWF9EV09SRCBvYmpudW0sIEZYX0RXT1JEIGdlbm51bSwgRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwNCi0gICAgICAgIEZYX0xQQllURSBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkNCi17DQotICAgIENyeXB0QmxvY2soVFJVRSwgb2JqbnVtLCBnZW5udW0sIHNyY19idWYsIHNyY19zaXplLCBkZXN0X2J1ZiwgZGVzdF9zaXplKTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ1BERl9DcnlwdG9IYW5kbGVyOjpEZWNyeXB0KEZYX0RXT1JEIG9iam51bSwgRlhfRFdPUkQgZ2VubnVtLCBDRlhfQnl0ZVN0cmluZyYgc3RyKQ0KLXsNCi0gICAgQ0ZYX0JpbmFyeUJ1ZiBkZXN0X2J1ZjsNCi0gICAgRlhfTFBWT0lEIGNvbnRleHQgPSBEZWNyeXB0U3RhcnQob2JqbnVtLCBnZW5udW0pOw0KLSAgICBEZWNyeXB0U3RyZWFtKGNvbnRleHQsIChGWF9MUENCWVRFKXN0ciwgc3RyLkdldExlbmd0aCgpLCBkZXN0X2J1Zik7DQotICAgIERlY3J5cHRGaW5pc2goY29udGV4dCwgZGVzdF9idWYpOw0KLSAgICBzdHIgPSBkZXN0X2J1ZjsNCi19DQotQ1BERl9TdGFuZGFyZENyeXB0b0hhbmRsZXI6OkNQREZfU3RhbmRhcmRDcnlwdG9IYW5kbGVyKCkNCi17DQotICAgIG1fcEFFU0NvbnRleHQgPSBOVUxMOw0KLSAgICBtX0NpcGhlciA9IEZYQ0lQSEVSX05PTkU7DQotICAgIG1fS2V5TGVuID0gMDsNCi19DQotQ1BERl9TdGFuZGFyZENyeXB0b0hhbmRsZXI6On5DUERGX1N0YW5kYXJkQ3J5cHRvSGFuZGxlcigpDQotew0KLSAgICBpZiAobV9wQUVTQ29udGV4dCkgew0KLSAgICAgICAgRlhfRnJlZShtX3BBRVNDb250ZXh0KTsNCi0gICAgfQ0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhcnNlci5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZmRybS9meF9jcnlwdC5oIgorY29uc3QgRlhfQllURSBkZWZwYXNzY29kZVszMl0gPSB7CisgICAgMHgyOCwgMHhiZiwgMHg0ZSwgMHg1ZSwgMHg0ZSwgMHg3NSwgMHg4YSwgMHg0MSwKKyAgICAweDY0LCAweDAwLCAweDRlLCAweDU2LCAweGZmLCAweGZhLCAweDAxLCAweDA4LAorICAgIDB4MmUsIDB4MmUsIDB4MDAsIDB4YjYsIDB4ZDAsIDB4NjgsIDB4M2UsIDB4ODAsCisgICAgMHgyZiwgMHgwYywgMHhhOSwgMHhmZSwgMHg2NCwgMHg1MywgMHg2OSwgMHg3YQorfTsKK3ZvaWQgQ2FsY0VuY3J5cHRLZXkoQ1BERl9EaWN0aW9uYXJ5KiBwRW5jcnlwdCwgRlhfTFBDQllURSBwYXNzd29yZCwgRlhfRFdPUkQgcGFzc19zaXplLAorICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUga2V5LCBpbnQga2V5bGVuLCBGWF9CT09MIGJJZ25vcmVNZXRhLCBDUERGX0FycmF5KiBwSWRBcnJheSkKK3sKKyAgICBpbnQgcmV2aXNpb24gPSBwRW5jcnlwdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiUiIpKTsKKyAgICBGWF9CWVRFIHBhc3Njb2RlWzMyXTsKKyAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgMzI7IGkgKyspIHsKKyAgICAgICAgcGFzc2NvZGVbaV0gPSBpIDwgcGFzc19zaXplID8gcGFzc3dvcmRbaV0gOiBkZWZwYXNzY29kZVtpIC0gcGFzc19zaXplXTsKKyAgICB9CisgICAgRlhfQllURSBtZDVbMTAwXTsKKyAgICBDUllQVF9NRDVTdGFydChtZDUpOworICAgIENSWVBUX01ENVVwZGF0ZShtZDUsIHBhc3Njb2RlLCAzMik7CisgICAgQ0ZYX0J5dGVTdHJpbmcgb2tleSA9IHBFbmNyeXB0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIk8iKSk7CisgICAgQ1JZUFRfTUQ1VXBkYXRlKG1kNSwgKEZYX0xQQllURSkoRlhfTFBDU1RSKW9rZXksIG9rZXkuR2V0TGVuZ3RoKCkpOworICAgIEZYX0RXT1JEIHBlcm0gPSBwRW5jcnlwdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiUCIpKTsKKyAgICBDUllQVF9NRDVVcGRhdGUobWQ1LCAoRlhfTFBCWVRFKSZwZXJtLCA0KTsKKyAgICBpZiAocElkQXJyYXkpIHsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgaWQgPSBwSWRBcnJheS0+R2V0U3RyaW5nKDApOworICAgICAgICBDUllQVF9NRDVVcGRhdGUobWQ1LCAoRlhfTFBCWVRFKShGWF9MUENTVFIpaWQsIGlkLkdldExlbmd0aCgpKTsKKyAgICB9CisgICAgaWYgKCFiSWdub3JlTWV0YSAmJiByZXZpc2lvbiA+PSAzICYmICFwRW5jcnlwdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiRW5jcnlwdE1ldGFkYXRhIiksIDEpKSB7CisgICAgICAgIEZYX0RXT1JEIHRhZyA9IChGWF9EV09SRCkgLSAxOworICAgICAgICBDUllQVF9NRDVVcGRhdGUobWQ1LCAoRlhfTFBCWVRFKSZ0YWcsIDQpOworICAgIH0KKyAgICBGWF9CWVRFIGRpZ2VzdFsxNl07CisgICAgQ1JZUFRfTUQ1RmluaXNoKG1kNSwgZGlnZXN0KTsKKyAgICBGWF9EV09SRCBjb3B5X2xlbiA9IGtleWxlbjsKKyAgICBpZiAoY29weV9sZW4gPiBzaXplb2YoZGlnZXN0KSkgeworICAgICAgICBjb3B5X2xlbiA9IHNpemVvZihkaWdlc3QpOworICAgIH0KKyAgICBpZiAocmV2aXNpb24gPj0gMykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDUwOyBpICsrKSB7CisgICAgICAgICAgICBDUllQVF9NRDVHZW5lcmF0ZShkaWdlc3QsIGNvcHlfbGVuLCBkaWdlc3QpOworICAgICAgICB9CisgICAgfQorICAgIEZYU1lTX21lbXNldDMyKGtleSwgMCwga2V5bGVuKTsKKyAgICBGWFNZU19tZW1jcHkzMihrZXksIGRpZ2VzdCwgY29weV9sZW4pOworfQorQ1BERl9DcnlwdG9IYW5kbGVyKiBDUERGX1N0YW5kYXJkU2VjdXJpdHlIYW5kbGVyOjpDcmVhdGVDcnlwdG9IYW5kbGVyKCkKK3sKKyAgICByZXR1cm4gRlhfTkVXIENQREZfU3RhbmRhcmRDcnlwdG9IYW5kbGVyOworfQordHlwZWRlZiBzdHJ1Y3QgX1BERl9DUllQVE9JVEVNIDogcHVibGljIENGWF9PYmplY3QgeworICAgIEZYX0lOVDMyCW1fQ2lwaGVyOworICAgIEZYX0lOVDMyCW1fS2V5TGVuOworICAgIEZYX0JPT0wJCW1fYkNoZWNrZWQ7CisgICAgQ1BERl9TdGFuZGFyZENyeXB0b0hhbmRsZXIqCW1fcENyeXB0b0hhbmRsZXI7Cit9IFBERl9DUllQVE9JVEVNOworQ1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcjo6Q1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcigpCit7CisgICAgbV9WZXJzaW9uID0gMDsKKyAgICBtX1JldmlzaW9uID0gMDsKKyAgICBtX3BQYXJzZXIgPSBOVUxMOworICAgIG1fcEVuY3J5cHREaWN0ID0gTlVMTDsKKyAgICBtX2JPd25lciA9IEZBTFNFOworICAgIG1fUGVybWlzc2lvbnMgPSAwOworICAgIG1fQ2lwaGVyID0gRlhDSVBIRVJfTk9ORTsKKyAgICBtX0tleUxlbiA9IDA7Cit9CitDUERGX1N0YW5kYXJkU2VjdXJpdHlIYW5kbGVyOjp+Q1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcigpCit7Cit9CitGWF9CT09MIENQREZfU3RhbmRhcmRTZWN1cml0eUhhbmRsZXI6Ok9uSW5pdChDUERGX1BhcnNlciogcFBhcnNlciwgQ1BERl9EaWN0aW9uYXJ5KiBwRW5jcnlwdERpY3QpCit7CisgICAgbV9wUGFyc2VyID0gcFBhcnNlcjsKKyAgICBpZiAoIUxvYWREaWN0KHBFbmNyeXB0RGljdCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAobV9DaXBoZXIgPT0gRlhDSVBIRVJfTk9ORSkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIENoZWNrU2VjdXJpdHkobV9LZXlMZW4pOworfQorRlhfQk9PTCBDUERGX1N0YW5kYXJkU2VjdXJpdHlIYW5kbGVyOjpDaGVja1NlY3VyaXR5KEZYX0lOVDMyIGtleV9sZW4pCit7CisgICAgQ0ZYX0J5dGVTdHJpbmcgcGFzc3dvcmQgPSBtX3BQYXJzZXItPkdldFBhc3N3b3JkKCk7CisgICAgaWYgKENoZWNrUGFzc3dvcmQocGFzc3dvcmQsIHBhc3N3b3JkLkdldExlbmd0aCgpLCBUUlVFLCBtX0VuY3J5cHRLZXksIGtleV9sZW4pKSB7CisgICAgICAgIGlmIChwYXNzd29yZC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmICghQ2hlY2tQYXNzd29yZChwYXNzd29yZCwgcGFzc3dvcmQuR2V0TGVuZ3RoKCksIEZBTFNFLCBtX0VuY3J5cHRLZXksIGtleV9sZW4pKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fYk93bmVyID0gVFJVRTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBDaGVja1Bhc3N3b3JkKHBhc3N3b3JkLCBwYXNzd29yZC5HZXRMZW5ndGgoKSwgRkFMU0UsIG1fRW5jcnlwdEtleSwga2V5X2xlbik7Cit9CitGWF9EV09SRCBDUERGX1N0YW5kYXJkU2VjdXJpdHlIYW5kbGVyOjpHZXRQZXJtaXNzaW9ucygpCit7CisgICAgcmV0dXJuIG1fUGVybWlzc2lvbnM7Cit9CitzdGF0aWMgRlhfQk9PTCBfTG9hZENyeXB0SW5mbyhDUERGX0RpY3Rpb25hcnkqIHBFbmNyeXB0RGljdCwgRlhfQlNUUiBuYW1lLCBpbnQmIGNpcGhlciwgaW50JiBrZXlsZW4pCit7CisgICAgaW50IFZlcnNpb24gPSBwRW5jcnlwdERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIlYiKSk7CisgICAgaW50IFJldmlzaW9uID0gcEVuY3J5cHREaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJSIikpOworICAgIGNpcGhlciA9IEZYQ0lQSEVSX1JDNDsKKyAgICBrZXlsZW4gPSAwOworICAgIGlmIChWZXJzaW9uID49IDQpIHsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwQ3J5cHRGaWx0ZXJzID0gcEVuY3J5cHREaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJDRiIpKTsKKyAgICAgICAgaWYgKHBDcnlwdEZpbHRlcnMgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmIChuYW1lID09IEZYX0JTVFJDKCJJZGVudGl0eSIpKSB7CisgICAgICAgICAgICBjaXBoZXIgPSBGWENJUEhFUl9OT05FOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGVmRmlsdGVyID0gcENyeXB0RmlsdGVycy0+R2V0RGljdChuYW1lKTsKKyAgICAgICAgICAgIGlmIChwRGVmRmlsdGVyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgbktleUJpdHMgPSAwOworICAgICAgICAgICAgaWYgKFZlcnNpb24gPT0gNCkgeworICAgICAgICAgICAgICAgIG5LZXlCaXRzID0gcERlZkZpbHRlci0+R2V0SW50ZWdlcihGWF9CU1RSQygiTGVuZ3RoIiksIDApOworICAgICAgICAgICAgICAgIGlmIChuS2V5Qml0cyA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIG5LZXlCaXRzID0gcEVuY3J5cHREaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJMZW5ndGgiKSwgMTI4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG5LZXlCaXRzID0gcEVuY3J5cHREaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJMZW5ndGgiKSwgMjU2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuS2V5Qml0cyA8IDQwKSB7CisgICAgICAgICAgICAgICAgbktleUJpdHMgKj0gODsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGtleWxlbiA9IG5LZXlCaXRzIC8gODsKKyAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGNpcGhlcl9uYW1lID0gcERlZkZpbHRlci0+R2V0U3RyaW5nKEZYX0JTVFJDKCJDRk0iKSk7CisgICAgICAgICAgICBpZiAoY2lwaGVyX25hbWUgPT0gRlhfQlNUUkMoIkFFU1YyIikgfHwgY2lwaGVyX25hbWUgPT0gRlhfQlNUUkMoIkFFU1YzIikpIHsKKyAgICAgICAgICAgICAgICBjaXBoZXIgPSBGWENJUEhFUl9BRVM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBrZXlsZW4gPSBWZXJzaW9uID4gMSA/IHBFbmNyeXB0RGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiTGVuZ3RoIiksIDQwKSAvIDggOiA1OworICAgIH0KKyAgICBpZiAoa2V5bGVuID4gMzIgfHwga2V5bGVuIDwgMCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDUERGX1N0YW5kYXJkU2VjdXJpdHlIYW5kbGVyOjpMb2FkRGljdChDUERGX0RpY3Rpb25hcnkqIHBFbmNyeXB0RGljdCkKK3sKKyAgICBtX3BFbmNyeXB0RGljdCA9IHBFbmNyeXB0RGljdDsKKyAgICBtX2JPd25lciA9IEZBTFNFOworICAgIG1fVmVyc2lvbiA9IHBFbmNyeXB0RGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiViIpKTsKKyAgICBtX1JldmlzaW9uID0gcEVuY3J5cHREaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJSIikpOworICAgIG1fUGVybWlzc2lvbnMgPSBwRW5jcnlwdERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIlAiKSwgLTEpOworICAgIGlmIChtX1ZlcnNpb24gPCA0KSB7CisgICAgICAgIHJldHVybiBfTG9hZENyeXB0SW5mbyhwRW5jcnlwdERpY3QsIENGWF9CeXRlU3RyaW5nKCksIG1fQ2lwaGVyLCBtX0tleUxlbik7CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIHN0bWZfbmFtZSA9IHBFbmNyeXB0RGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJTdG1GIikpOworICAgIENGWF9CeXRlU3RyaW5nIHN0cmZfbmFtZSA9IHBFbmNyeXB0RGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJTdHJGIikpOworICAgIGlmIChzdG1mX25hbWUgIT0gc3RyZl9uYW1lKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKCFfTG9hZENyeXB0SW5mbyhwRW5jcnlwdERpY3QsIHN0cmZfbmFtZSwgbV9DaXBoZXIsIG1fS2V5TGVuKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDUERGX1N0YW5kYXJkU2VjdXJpdHlIYW5kbGVyOjpMb2FkRGljdChDUERGX0RpY3Rpb25hcnkqIHBFbmNyeXB0RGljdCwgRlhfRFdPUkQgdHlwZSwgaW50JiBjaXBoZXIsIGludCYga2V5X2xlbikKK3sKKyAgICBtX3BFbmNyeXB0RGljdCA9IHBFbmNyeXB0RGljdDsKKyAgICBtX2JPd25lciA9IEZBTFNFOworICAgIG1fVmVyc2lvbiA9IHBFbmNyeXB0RGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiViIpKTsKKyAgICBtX1JldmlzaW9uID0gcEVuY3J5cHREaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJSIikpOworICAgIG1fUGVybWlzc2lvbnMgPSBwRW5jcnlwdERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIlAiKSwgLTEpOworICAgIENGWF9CeXRlU3RyaW5nIHN0cmZfbmFtZSwgc3RtZl9uYW1lOworICAgIGlmIChtX1ZlcnNpb24gPj0gNCkgeworICAgICAgICBzdG1mX25hbWUgPSBwRW5jcnlwdERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiU3RtRiIpKTsKKyAgICAgICAgc3RyZl9uYW1lID0gcEVuY3J5cHREaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIlN0ckYiKSk7CisgICAgICAgIGlmIChzdG1mX25hbWUgIT0gc3RyZl9uYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFfTG9hZENyeXB0SW5mbyhwRW5jcnlwdERpY3QsIHN0cmZfbmFtZSwgY2lwaGVyLCBrZXlfbGVuKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fQ2lwaGVyID0gY2lwaGVyOworICAgIG1fS2V5TGVuID0ga2V5X2xlbjsKKyAgICByZXR1cm4gVFJVRTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcjo6R2V0Q3J5cHRJbmZvKGludCYgY2lwaGVyLCBGWF9MUENCWVRFJiBidWZmZXIsIGludCYga2V5bGVuKQoreworICAgIGNpcGhlciA9IG1fQ2lwaGVyOworICAgIGJ1ZmZlciA9IG1fRW5jcnlwdEtleTsKKyAgICBrZXlsZW4gPSBtX0tleUxlbjsKKyAgICByZXR1cm4gVFJVRTsKK30KKyNkZWZpbmUgRlhfR0VUXzMyV09SRChuLGIsaSkJCQkJCQkJCVwKKyAgICB7CQkJCQkJCQkJCQkJCQlcCisgICAgICAgIChuKSA9IChGWF9EV09SRCkoKCAoRlhfVUlOVDY0KSAoYilbKGkpXSA8PCAyNCApCQkJXAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCAoRlhfVUlOVDY0KSAoYilbKGkpICsgMV0gPDwgMTYgKQkJCQkJXAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCAoRlhfVUlOVDY0KSAoYilbKGkpICsgMl0gPDwgIDggKQkJCQkJXAorICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCAoRlhfVUlOVDY0KSAoYilbKGkpICsgM10gICAgICAgKSk7CQkJCQlcCisgICAgfQoraW50IEJpZ09yZGVyNjRCaXRzTW9kMyhGWF9MUEJZVEUgZGF0YSkKK3sKKyAgICBGWF9VSU5UNjQgcmV0ID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7ICsraSkgeworICAgICAgICBGWF9EV09SRCB2YWx1ZTsKKyAgICAgICAgRlhfR0VUXzMyV09SRCh2YWx1ZSwgZGF0YSwgNCAqIGkpOworICAgICAgICByZXQgPDw9IDMyOworICAgICAgICByZXQgfD0gdmFsdWU7CisgICAgICAgIHJldCAlPSAzOworICAgIH0KKyAgICByZXR1cm4gKGludClyZXQ7Cit9Cit2b2lkIFJldmlzaW9uNl9IYXNoKEZYX0xQQ0JZVEUgcGFzc3dvcmQsIEZYX0RXT1JEIHNpemUsIEZYX0xQQ0JZVEUgc2FsdCwgRlhfTFBDQllURSB2ZWN0b3IsIEZYX0xQQllURSBoYXNoKQoreworICAgIGludCBpQmxvY2tTaXplID0gMzI7CisgICAgRlhfQllURSBzaGFbMTI4XTsKKyAgICBDUllQVF9TSEEyNTZTdGFydChzaGEpOworICAgIENSWVBUX1NIQTI1NlVwZGF0ZShzaGEsIHBhc3N3b3JkLCBzaXplKTsKKyAgICBDUllQVF9TSEEyNTZVcGRhdGUoc2hhLCBzYWx0LCA4KTsKKyAgICBpZiAodmVjdG9yKSB7CisgICAgICAgIENSWVBUX1NIQTI1NlVwZGF0ZShzaGEsIHZlY3RvciwgNDgpOworICAgIH0KKyAgICBGWF9CWVRFIGRpZ2VzdFszMl07CisgICAgQ1JZUFRfU0hBMjU2RmluaXNoKHNoYSwgZGlnZXN0KTsKKyAgICBDRlhfQnl0ZVRleHRCdWYgYnVmOworICAgIEZYX0xQQllURSBpbnB1dCA9IGRpZ2VzdDsKKyAgICBGWF9MUEJZVEUga2V5ID0gaW5wdXQ7CisgICAgRlhfTFBCWVRFIGl2ID0gaW5wdXQgKyAxNjsKKyAgICBGWF9MUEJZVEUgRSA9IGJ1Zi5HZXRCdWZmZXIoKTsKKyAgICBpbnQgaUJ1ZkxlbiA9IGJ1Zi5HZXRMZW5ndGgoKTsKKyAgICBDRlhfQnl0ZVRleHRCdWYgaW50ZXJEaWdlc3Q7CisgICAgaW50IGkgPSAwOworICAgIEZYX0xQQllURSBhZXMgPSBGWF9BbGxvYyhGWF9CWVRFLCAyMDQ4KTsKKyAgICB3aGlsZSAoaSA8IDY0IHx8IGkgPCBFW2lCdWZMZW4gLSAxXSAgKyAzMikgeworICAgICAgICBpbnQgaVJvdW5kU2l6ZSA9IHNpemUgKyBpQmxvY2tTaXplOworICAgICAgICBpZiAodmVjdG9yKSB7CisgICAgICAgICAgICBpUm91bmRTaXplICs9IDQ4OworICAgICAgICB9CisgICAgICAgIGlCdWZMZW4gPSBpUm91bmRTaXplICogNjQ7CisgICAgICAgIGJ1Zi5Fc3RpbWF0ZVNpemUoaUJ1Zkxlbik7CisgICAgICAgIEUgPSBidWYuR2V0QnVmZmVyKCk7CisgICAgICAgIENGWF9CeXRlVGV4dEJ1ZiBjb250ZW50OworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDY0OyArK2opIHsKKyAgICAgICAgICAgIGNvbnRlbnQuQXBwZW5kQmxvY2socGFzc3dvcmQsIHNpemUpOworICAgICAgICAgICAgY29udGVudC5BcHBlbmRCbG9jayhpbnB1dCwgaUJsb2NrU2l6ZSk7CisgICAgICAgICAgICBpZiAodmVjdG9yKSB7CisgICAgICAgICAgICAgICAgY29udGVudC5BcHBlbmRCbG9jayh2ZWN0b3IsIDQ4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBDUllQVF9BRVNTZXRLZXkoYWVzLCAxNiwga2V5LCAxNiwgVFJVRSk7CisgICAgICAgIENSWVBUX0FFU1NldElWKGFlcywgaXYpOworICAgICAgICBDUllQVF9BRVNFbmNyeXB0KGFlcywgRSwgY29udGVudC5HZXRCdWZmZXIoKSwgaUJ1Zkxlbik7CisgICAgICAgIGludCBpSGFzaCA9IDA7CisgICAgICAgIHN3aXRjaCAoQmlnT3JkZXI2NEJpdHNNb2QzKEUpKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgaUhhc2ggPSAwOworICAgICAgICAgICAgICAgIGlCbG9ja1NpemUgPSAzMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBpSGFzaCA9IDE7CisgICAgICAgICAgICAgICAgaUJsb2NrU2l6ZSA9IDQ4OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpSGFzaCA9IDI7CisgICAgICAgICAgICAgICAgaUJsb2NrU2l6ZSA9IDY0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGludGVyRGlnZXN0LkVzdGltYXRlU2l6ZShpQmxvY2tTaXplKTsKKyAgICAgICAgaW5wdXQgPSBpbnRlckRpZ2VzdC5HZXRCdWZmZXIoKTsKKyAgICAgICAgaWYgKGlIYXNoID09IDApIHsKKyAgICAgICAgICAgIENSWVBUX1NIQTI1NkdlbmVyYXRlKEUsIGlCdWZMZW4sIGlucHV0KTsKKyAgICAgICAgfSBlbHNlIGlmIChpSGFzaCA9PSAxKSB7CisgICAgICAgICAgICBDUllQVF9TSEEzODRHZW5lcmF0ZShFLCBpQnVmTGVuLCBpbnB1dCk7CisgICAgICAgIH0gZWxzZSBpZiAoaUhhc2ggPT0gMikgeworICAgICAgICAgICAgQ1JZUFRfU0hBNTEyR2VuZXJhdGUoRSwgaUJ1ZkxlbiwgaW5wdXQpOworICAgICAgICB9CisgICAgICAgIGtleSA9IGlucHV0OworICAgICAgICBpdiA9IGlucHV0ICsgMTY7CisgICAgICAgICsraTsKKyAgICB9CisgICAgRlhfRnJlZShhZXMpOworICAgIGlmIChoYXNoKSB7CisgICAgICAgIEZYU1lTX21lbWNweTMyKGhhc2gsIGlucHV0LCAzMik7CisgICAgfQorfQorRlhfQk9PTCBDUERGX1N0YW5kYXJkU2VjdXJpdHlIYW5kbGVyOjpBRVMyNTZfQ2hlY2tQYXNzd29yZChGWF9MUENCWVRFIHBhc3N3b3JkLCBGWF9EV09SRCBzaXplLAorICAgICAgICBGWF9CT09MIGJPd25lciwgRlhfTFBCWVRFIGtleSkKK3sKKyAgICBDRlhfQnl0ZVN0cmluZyBva2V5ID0gbV9wRW5jcnlwdERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiTyIpKTsKKyAgICBpZiAob2tleS5HZXRMZW5ndGgoKSA8IDQ4KSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgdWtleSA9IG1fcEVuY3J5cHREaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIlUiKSk7CisgICAgaWYgKHVrZXkuR2V0TGVuZ3RoKCkgPCA0OCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEZYX0xQQ0JZVEUgcGtleSA9IGJPd25lciA/IChGWF9MUENCWVRFKW9rZXkgOiAoRlhfTFBDQllURSl1a2V5OworICAgIEZYX0JZVEUgc2hhWzEyOF07CisgICAgRlhfQllURSBkaWdlc3RbMzJdOworICAgIGlmIChtX1JldmlzaW9uID49IDYpIHsKKyAgICAgICAgUmV2aXNpb242X0hhc2gocGFzc3dvcmQsIHNpemUsIChGWF9MUENCWVRFKXBrZXkgKyAzMiwgKGJPd25lciA/IChGWF9MUENCWVRFKXVrZXkgOiBOVUxMKSwgZGlnZXN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBDUllQVF9TSEEyNTZTdGFydChzaGEpOworICAgICAgICBDUllQVF9TSEEyNTZVcGRhdGUoc2hhLCBwYXNzd29yZCwgc2l6ZSk7CisgICAgICAgIENSWVBUX1NIQTI1NlVwZGF0ZShzaGEsIHBrZXkgKyAzMiwgOCk7CisgICAgICAgIGlmIChiT3duZXIpIHsKKyAgICAgICAgICAgIENSWVBUX1NIQTI1NlVwZGF0ZShzaGEsIHVrZXksIDQ4KTsKKyAgICAgICAgfQorICAgICAgICBDUllQVF9TSEEyNTZGaW5pc2goc2hhLCBkaWdlc3QpOworICAgIH0KKyAgICBpZiAoRlhTWVNfbWVtY21wMzIoZGlnZXN0LCBwa2V5LCAzMikgIT0gMCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChrZXkgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgaWYgKG1fUmV2aXNpb24gPj0gNikgeworICAgICAgICBSZXZpc2lvbjZfSGFzaChwYXNzd29yZCwgc2l6ZSwgKEZYX0xQQ0JZVEUpcGtleSArIDQwLCAoYk93bmVyID8gKEZYX0xQQ0JZVEUpdWtleSA6IE5VTEwpLCBkaWdlc3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIENSWVBUX1NIQTI1NlN0YXJ0KHNoYSk7CisgICAgICAgIENSWVBUX1NIQTI1NlVwZGF0ZShzaGEsIHBhc3N3b3JkLCBzaXplKTsKKyAgICAgICAgQ1JZUFRfU0hBMjU2VXBkYXRlKHNoYSwgcGtleSArIDQwLCA4KTsKKyAgICAgICAgaWYgKGJPd25lcikgeworICAgICAgICAgICAgQ1JZUFRfU0hBMjU2VXBkYXRlKHNoYSwgdWtleSwgNDgpOworICAgICAgICB9CisgICAgICAgIENSWVBUX1NIQTI1NkZpbmlzaChzaGEsIGRpZ2VzdCk7CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIGVrZXkgPSBtX3BFbmNyeXB0RGljdC0+R2V0U3RyaW5nKGJPd25lciA/IEZYX0JTVFJDKCJPRSIpIDogRlhfQlNUUkMoIlVFIikpOworICAgIGlmIChla2V5LkdldExlbmd0aCgpIDwgMzIpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWF9CWVRFKiBhZXMgPSBGWF9BbGxvYyhGWF9CWVRFLCAyMDQ4KTsKKyAgICBDUllQVF9BRVNTZXRLZXkoYWVzLCAxNiwgZGlnZXN0LCAzMiwgRkFMU0UpOworICAgIEZYX0JZVEUgaXZbMTZdOworICAgIEZYU1lTX21lbXNldDMyKGl2LCAwLCAxNik7CisgICAgQ1JZUFRfQUVTU2V0SVYoYWVzLCBpdik7CisgICAgQ1JZUFRfQUVTRGVjcnlwdChhZXMsIGtleSwgZWtleSwgMzIpOworICAgIENSWVBUX0FFU1NldEtleShhZXMsIDE2LCBrZXksIDMyLCBGQUxTRSk7CisgICAgQ1JZUFRfQUVTU2V0SVYoYWVzLCBpdik7CisgICAgQ0ZYX0J5dGVTdHJpbmcgcGVybXMgPSBtX3BFbmNyeXB0RGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJQZXJtcyIpKTsKKyAgICBpZiAocGVybXMuSXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgRlhfQllURSBwZXJtc19idWZbMTZdOworICAgIEZYU1lTX21lbXNldDMyKHBlcm1zX2J1ZiwgMCwgc2l6ZW9mKHBlcm1zX2J1ZikpOworICAgIEZYX0RXT1JEIGNvcHlfbGVuID0gc2l6ZW9mKHBlcm1zX2J1Zik7CisgICAgaWYgKGNvcHlfbGVuID4gKEZYX0RXT1JEKXBlcm1zLkdldExlbmd0aCgpKSB7CisgICAgICAgIGNvcHlfbGVuID0gcGVybXMuR2V0TGVuZ3RoKCk7CisgICAgfQorICAgIEZYU1lTX21lbWNweTMyKHBlcm1zX2J1ZiwgKEZYX0xQQ0JZVEUpcGVybXMsIGNvcHlfbGVuKTsKKyAgICBGWF9CWVRFIGJ1ZlsxNl07CisgICAgQ1JZUFRfQUVTRGVjcnlwdChhZXMsIGJ1ZiwgcGVybXNfYnVmLCAxNik7CisgICAgRlhfRnJlZShhZXMpOworICAgIGlmIChidWZbOV0gIT0gJ2EnIHx8IGJ1ZlsxMF0gIT0gJ2QnIHx8IGJ1ZlsxMV0gIT0gJ2InKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKEZYRFdPUkRfR0VUX0xTQkZJUlNUKGJ1ZikgIT0gbV9QZXJtaXNzaW9ucykgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmICgoYnVmWzhdID09ICdUJyAmJiAhSXNNZXRhZGF0YUVuY3J5cHRlZCgpKSB8fCAoYnVmWzhdID09ICdGJyAmJiBJc01ldGFkYXRhRW5jcnlwdGVkKCkpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitpbnQgQ1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcjo6Q2hlY2tQYXNzd29yZChGWF9MUENCWVRFIHBhc3N3b3JkLCBGWF9EV09SRCBwYXNzX3NpemUsIEZYX0JPT0wgYk93bmVyLCBGWF9MUEJZVEUga2V5KQoreworICAgIHJldHVybiBDaGVja1Bhc3N3b3JkKHBhc3N3b3JkLCBwYXNzX3NpemUsIGJPd25lciwga2V5LCBtX0tleUxlbik7Cit9CitpbnQgQ1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcjo6Q2hlY2tQYXNzd29yZChGWF9MUENCWVRFIHBhc3N3b3JkLCBGWF9EV09SRCBzaXplLCBGWF9CT09MIGJPd25lciwgRlhfTFBCWVRFIGtleSwgRlhfSU5UMzIga2V5X2xlbikKK3sKKyAgICBpZiAobV9SZXZpc2lvbiA+PSA1KSB7CisgICAgICAgIHJldHVybiBBRVMyNTZfQ2hlY2tQYXNzd29yZChwYXNzd29yZCwgc2l6ZSwgYk93bmVyLCBrZXkpOworICAgIH0KKyAgICBGWF9CWVRFIGtleWJ1ZlszMl07CisgICAgaWYgKGtleSA9PSBOVUxMKSB7CisgICAgICAgIGtleSA9IGtleWJ1ZjsKKyAgICB9CisgICAgaWYgKGJPd25lcikgeworICAgICAgICByZXR1cm4gQ2hlY2tPd25lclBhc3N3b3JkKHBhc3N3b3JkLCBzaXplLCBrZXksIGtleV9sZW4pOworICAgIH0KKyAgICByZXR1cm4gQ2hlY2tVc2VyUGFzc3dvcmQocGFzc3dvcmQsIHNpemUsIEZBTFNFLCBrZXksIGtleV9sZW4pIHx8IENoZWNrVXNlclBhc3N3b3JkKHBhc3N3b3JkLCBzaXplLCBUUlVFLCBrZXksIGtleV9sZW4pOworfQorRlhfQk9PTCBDUERGX1N0YW5kYXJkU2VjdXJpdHlIYW5kbGVyOjpDaGVja1VzZXJQYXNzd29yZChGWF9MUENCWVRFIHBhc3N3b3JkLCBGWF9EV09SRCBwYXNzX3NpemUsCisgICAgICAgIEZYX0JPT0wgYklnbm9yZUVuY3J5cHRNZXRhLCBGWF9MUEJZVEUga2V5LCBGWF9JTlQzMiBrZXlfbGVuKQoreworICAgIENhbGNFbmNyeXB0S2V5KG1fcEVuY3J5cHREaWN0LCBwYXNzd29yZCwgcGFzc19zaXplLCBrZXksIGtleV9sZW4sIGJJZ25vcmVFbmNyeXB0TWV0YSwKKyAgICAgICAgICAgICAgICAgICBtX3BQYXJzZXItPkdldElEQXJyYXkoKSk7CisgICAgQ0ZYX0J5dGVTdHJpbmcgdWtleSA9IG1fcEVuY3J5cHREaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIlUiKSk7CisgICAgaWYgKHVrZXkuR2V0TGVuZ3RoKCkgPCAxNikgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEZYX0JZVEUgdWtleWJ1ZlszMl07CisgICAgaWYgKG1fUmV2aXNpb24gPT0gMikgeworICAgICAgICBGWFNZU19tZW1jcHkzMih1a2V5YnVmLCBkZWZwYXNzY29kZSwgMzIpOworICAgICAgICBDUllQVF9BcmNGb3VyQ3J5cHRCbG9jayh1a2V5YnVmLCAzMiwga2V5LCBrZXlfbGVuKTsKKyAgICB9IGVsc2UgeworICAgICAgICBGWF9CWVRFIHRlc3RbMzJdLCB0bXBrZXlbMzJdOworICAgICAgICBGWF9EV09SRCBjb3B5X2xlbiA9IHNpemVvZih0ZXN0KTsKKyAgICAgICAgaWYgKGNvcHlfbGVuID4gKEZYX0RXT1JEKXVrZXkuR2V0TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGNvcHlfbGVuID0gdWtleS5HZXRMZW5ndGgoKTsKKyAgICAgICAgfQorICAgICAgICBGWFNZU19tZW1zZXQzMih0ZXN0LCAwLCBzaXplb2YodGVzdCkpOworICAgICAgICBGWFNZU19tZW1jcHkzMih0ZXN0LCAoRlhfTFBDU1RSKXVrZXksIGNvcHlfbGVuKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDE5OyBpID49IDA7IGkgLS0pIHsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwga2V5X2xlbjsgaiArKykgeworICAgICAgICAgICAgICAgIHRtcGtleVtqXSA9IGtleVtqXSBeIGk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDUllQVF9BcmNGb3VyQ3J5cHRCbG9jayh0ZXN0LCAzMiwgdG1wa2V5LCBrZXlfbGVuKTsKKyAgICAgICAgfQorICAgICAgICBGWF9CWVRFIG1kNVsxMDBdOworICAgICAgICBDUllQVF9NRDVTdGFydChtZDUpOworICAgICAgICBDUllQVF9NRDVVcGRhdGUobWQ1LCBkZWZwYXNzY29kZSwgMzIpOworICAgICAgICBDUERGX0FycmF5KiBwSWRBcnJheSA9IG1fcFBhcnNlci0+R2V0SURBcnJheSgpOworICAgICAgICBpZiAocElkQXJyYXkpIHsKKyAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGlkID0gcElkQXJyYXktPkdldFN0cmluZygwKTsKKyAgICAgICAgICAgIENSWVBUX01ENVVwZGF0ZShtZDUsIChGWF9MUEJZVEUpKEZYX0xQQ1NUUilpZCwgaWQuR2V0TGVuZ3RoKCkpOworICAgICAgICB9CisgICAgICAgIENSWVBUX01ENUZpbmlzaChtZDUsIHVrZXlidWYpOworICAgICAgICByZXR1cm4gRlhTWVNfbWVtY21wMzIodGVzdCwgdWtleWJ1ZiwgMTYpID09IDA7CisgICAgfQorICAgIGlmIChGWFNZU19tZW1jbXAzMigoRlhfTFBWT0lEKShGWF9MUENTVFIpdWtleSwgdWtleWJ1ZiwgMTYpID09IDApIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK0NGWF9CeXRlU3RyaW5nIENQREZfU3RhbmRhcmRTZWN1cml0eUhhbmRsZXI6OkdldFVzZXJQYXNzd29yZChGWF9MUENCWVRFIG93bmVyX3Bhc3MsIEZYX0RXT1JEIHBhc3Nfc2l6ZSkKK3sKKyAgICByZXR1cm4gR2V0VXNlclBhc3N3b3JkKG93bmVyX3Bhc3MsIHBhc3Nfc2l6ZSwgbV9LZXlMZW4pOworfQorQ0ZYX0J5dGVTdHJpbmcgQ1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcjo6R2V0VXNlclBhc3N3b3JkKEZYX0xQQ0JZVEUgb3duZXJfcGFzcywgRlhfRFdPUkQgcGFzc19zaXplLCBGWF9JTlQzMiBrZXlfbGVuKQoreworICAgIENGWF9CeXRlU3RyaW5nIG9rZXkgPSBtX3BFbmNyeXB0RGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJPIikpOworICAgIEZYX0JZVEUgcGFzc2NvZGVbMzJdOworICAgIEZYX0RXT1JEIGk7CisgICAgZm9yIChpID0gMDsgaSA8IDMyOyBpICsrKSB7CisgICAgICAgIHBhc3Njb2RlW2ldID0gaSA8IHBhc3Nfc2l6ZSA/IG93bmVyX3Bhc3NbaV0gOiBkZWZwYXNzY29kZVtpIC0gcGFzc19zaXplXTsKKyAgICB9CisgICAgRlhfQllURSBkaWdlc3RbMTZdOworICAgIENSWVBUX01ENUdlbmVyYXRlKHBhc3Njb2RlLCAzMiwgZGlnZXN0KTsKKyAgICBpZiAobV9SZXZpc2lvbiA+PSAzKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTA7IGkgKyspIHsKKyAgICAgICAgICAgIENSWVBUX01ENUdlbmVyYXRlKGRpZ2VzdCwgMTYsIGRpZ2VzdCk7CisgICAgICAgIH0KKyAgICB9CisgICAgRlhfQllURSBlbmNrZXlbMzJdOworICAgIEZYU1lTX21lbXNldDMyKGVuY2tleSwgMCwgc2l6ZW9mKGVuY2tleSkpOworICAgIEZYX0RXT1JEIGNvcHlfbGVuID0ga2V5X2xlbjsKKyAgICBpZiAoY29weV9sZW4gPiBzaXplb2YoZGlnZXN0KSkgeworICAgICAgICBjb3B5X2xlbiA9IHNpemVvZihkaWdlc3QpOworICAgIH0KKyAgICBGWFNZU19tZW1jcHkzMihlbmNrZXksIGRpZ2VzdCwgY29weV9sZW4pOworICAgIGludCBva2V5bGVuID0gb2tleS5HZXRMZW5ndGgoKTsKKyAgICBpZiAob2tleWxlbiA+IDMyKSB7CisgICAgICAgIG9rZXlsZW4gPSAzMjsKKyAgICB9CisgICAgRlhfQllURSBva2V5YnVmWzY0XTsKKyAgICBGWFNZU19tZW1jcHkzMihva2V5YnVmLCAoRlhfTFBDU1RSKW9rZXksIG9rZXlsZW4pOworICAgIGlmIChtX1JldmlzaW9uID09IDIpIHsKKyAgICAgICAgQ1JZUFRfQXJjRm91ckNyeXB0QmxvY2sob2tleWJ1Ziwgb2tleWxlbiwgZW5ja2V5LCBrZXlfbGVuKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGludCBpID0gMTk7IGkgPj0gMDsgaSAtLSkgeworICAgICAgICAgICAgRlhfQllURSB0ZW1wa2V5WzMyXTsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbV9LZXlMZW47IGogKyspIHsKKyAgICAgICAgICAgICAgICB0ZW1wa2V5W2pdID0gZW5ja2V5W2pdIF4gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIENSWVBUX0FyY0ZvdXJDcnlwdEJsb2NrKG9rZXlidWYsIG9rZXlsZW4sIHRlbXBrZXksIGtleV9sZW4pOworICAgICAgICB9CisgICAgfQorICAgIGludCBsZW4gPSAzMjsKKyAgICB3aGlsZSAobGVuICYmIGRlZnBhc3Njb2RlW2xlbiAtIDFdID09IG9rZXlidWZbbGVuIC0gMV0pIHsKKyAgICAgICAgbGVuIC0tOworICAgIH0KKyAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcob2tleWJ1ZiwgbGVuKTsKK30KK0ZYX0JPT0wgQ1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcjo6Q2hlY2tPd25lclBhc3N3b3JkKEZYX0xQQ0JZVEUgcGFzc3dvcmQsIEZYX0RXT1JEIHBhc3Nfc2l6ZSwKKyAgICAgICAgRlhfTFBCWVRFIGtleSwgRlhfSU5UMzIga2V5X2xlbikKK3sKKyAgICBDRlhfQnl0ZVN0cmluZyB1c2VyX3Bhc3MgPSBHZXRVc2VyUGFzc3dvcmQocGFzc3dvcmQsIHBhc3Nfc2l6ZSwga2V5X2xlbik7CisgICAgaWYgKENoZWNrVXNlclBhc3N3b3JkKHVzZXJfcGFzcywgdXNlcl9wYXNzLkdldExlbmd0aCgpLCBGQUxTRSwga2V5LCBrZXlfbGVuKSkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIENoZWNrVXNlclBhc3N3b3JkKHVzZXJfcGFzcywgdXNlcl9wYXNzLkdldExlbmd0aCgpLCBUUlVFLCBrZXksIGtleV9sZW4pOworfQorRlhfQk9PTCBDUERGX1N0YW5kYXJkU2VjdXJpdHlIYW5kbGVyOjpJc01ldGFkYXRhRW5jcnlwdGVkKCkKK3sKKyAgICByZXR1cm4gbV9wRW5jcnlwdERpY3QtPkdldEJvb2xlYW4oRlhfQlNUUkMoIkVuY3J5cHRNZXRhZGF0YSIpLCBUUlVFKTsKK30KK0NQREZfU2VjdXJpdHlIYW5kbGVyKiBGUERGX0NyZWF0ZVN0YW5kYXJkU2VjdXJpdHlIYW5kbGVyKCkKK3sKKyAgICByZXR1cm4gRlhfTkVXIENQREZfU3RhbmRhcmRTZWN1cml0eUhhbmRsZXI7Cit9Cit2b2lkIENQREZfU3RhbmRhcmRTZWN1cml0eUhhbmRsZXI6Ok9uQ3JlYXRlKENQREZfRGljdGlvbmFyeSogcEVuY3J5cHREaWN0LCBDUERGX0FycmF5KiBwSWRBcnJheSwKKyAgICAgICAgRlhfTFBDQllURSB1c2VyX3Bhc3MsIEZYX0RXT1JEIHVzZXJfc2l6ZSwKKyAgICAgICAgRlhfTFBDQllURSBvd25lcl9wYXNzLCBGWF9EV09SRCBvd25lcl9zaXplLCBGWF9CT09MIGJEZWZhdWx0LCBGWF9EV09SRCB0eXBlKQoreworICAgIGludCBjaXBoZXIgPSAwLCBrZXlfbGVuID0gMDsKKyAgICBpZiAoIUxvYWREaWN0KHBFbmNyeXB0RGljdCwgdHlwZSwgY2lwaGVyLCBrZXlfbGVuKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChiRGVmYXVsdCAmJiAob3duZXJfcGFzcyA9PSBOVUxMIHx8IG93bmVyX3NpemUgPT0gMCkpIHsKKyAgICAgICAgb3duZXJfcGFzcyA9IHVzZXJfcGFzczsKKyAgICAgICAgb3duZXJfc2l6ZSA9IHVzZXJfc2l6ZTsKKyAgICB9CisgICAgaWYgKG1fUmV2aXNpb24gPj0gNSkgeworICAgICAgICBpbnQgdCA9IChpbnQpdGltZShOVUxMKTsKKyAgICAgICAgRlhfQllURSBzaGFbMTI4XTsKKyAgICAgICAgQ1JZUFRfU0hBMjU2U3RhcnQoc2hhKTsKKyAgICAgICAgQ1JZUFRfU0hBMjU2VXBkYXRlKHNoYSwgKEZYX0JZVEUqKSZ0LCBzaXplb2YgdCk7CisgICAgICAgIENSWVBUX1NIQTI1NlVwZGF0ZShzaGEsIG1fRW5jcnlwdEtleSwgMzIpOworICAgICAgICBDUllQVF9TSEEyNTZVcGRhdGUoc2hhLCAoRlhfQllURSopInRoZXJlIiwgNSk7CisgICAgICAgIENSWVBUX1NIQTI1NkZpbmlzaChzaGEsIG1fRW5jcnlwdEtleSk7CisgICAgICAgIEFFUzI1Nl9TZXRQYXNzd29yZChwRW5jcnlwdERpY3QsIHVzZXJfcGFzcywgdXNlcl9zaXplLCBGQUxTRSwgbV9FbmNyeXB0S2V5KTsKKyAgICAgICAgaWYgKGJEZWZhdWx0KSB7CisgICAgICAgICAgICBBRVMyNTZfU2V0UGFzc3dvcmQocEVuY3J5cHREaWN0LCBvd25lcl9wYXNzLCBvd25lcl9zaXplLCBUUlVFLCBtX0VuY3J5cHRLZXkpOworICAgICAgICAgICAgQUVTMjU2X1NldFBlcm1zKHBFbmNyeXB0RGljdCwgbV9QZXJtaXNzaW9ucywgcEVuY3J5cHREaWN0LT5HZXRCb29sZWFuKEZYX0JTVFJDKCJFbmNyeXB0TWV0YWRhdGEiKSwgVFJVRSksIG1fRW5jcnlwdEtleSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYkRlZmF1bHQpIHsKKyAgICAgICAgRlhfQllURSBwYXNzY29kZVszMl07CisgICAgICAgIEZYX0RXT1JEIGk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAzMjsgaSArKykgeworICAgICAgICAgICAgcGFzc2NvZGVbaV0gPSBpIDwgb3duZXJfc2l6ZSA/IG93bmVyX3Bhc3NbaV0gOiBkZWZwYXNzY29kZVtpIC0gb3duZXJfc2l6ZV07CisgICAgICAgIH0KKyAgICAgICAgRlhfQllURSBkaWdlc3RbMTZdOworICAgICAgICBDUllQVF9NRDVHZW5lcmF0ZShwYXNzY29kZSwgMzIsIGRpZ2VzdCk7CisgICAgICAgIGlmIChtX1JldmlzaW9uID49IDMpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTA7IGkgKyspIHsKKyAgICAgICAgICAgICAgICBDUllQVF9NRDVHZW5lcmF0ZShkaWdlc3QsIDE2LCBkaWdlc3QpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEZYX0JZVEUgZW5ja2V5WzMyXTsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIoZW5ja2V5LCBkaWdlc3QsIGtleV9sZW4pOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkgKyspIHsKKyAgICAgICAgICAgIHBhc3Njb2RlW2ldID0gaSA8IHVzZXJfc2l6ZSA/IHVzZXJfcGFzc1tpXSA6IGRlZnBhc3Njb2RlW2kgLSB1c2VyX3NpemVdOworICAgICAgICB9CisgICAgICAgIENSWVBUX0FyY0ZvdXJDcnlwdEJsb2NrKHBhc3Njb2RlLCAzMiwgZW5ja2V5LCBrZXlfbGVuKTsKKyAgICAgICAgRlhfQllURSB0ZW1wa2V5WzMyXTsKKyAgICAgICAgaWYgKG1fUmV2aXNpb24gPj0gMykgeworICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8PSAxOTsgaSArKykgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwga2V5X2xlbjsgaiArKykgeworICAgICAgICAgICAgICAgICAgICB0ZW1wa2V5W2pdID0gZW5ja2V5W2pdIF4gKEZYX0JZVEUpaTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ1JZUFRfQXJjRm91ckNyeXB0QmxvY2socGFzc2NvZGUsIDMyLCB0ZW1wa2V5LCBrZXlfbGVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwRW5jcnlwdERpY3QtPlNldEF0U3RyaW5nKEZYX0JTVFJDKCJPIiksIENGWF9CeXRlU3RyaW5nKHBhc3Njb2RlLCAzMikpOworICAgIH0KKyAgICBDYWxjRW5jcnlwdEtleShtX3BFbmNyeXB0RGljdCwgKEZYX0xQQllURSl1c2VyX3Bhc3MsIHVzZXJfc2l6ZSwgbV9FbmNyeXB0S2V5LCBrZXlfbGVuLCBGQUxTRSwgcElkQXJyYXkpOworICAgIGlmIChtX1JldmlzaW9uIDwgMykgeworICAgICAgICBGWF9CWVRFIHRlbXBidWZbMzJdOworICAgICAgICBGWFNZU19tZW1jcHkzMih0ZW1wYnVmLCBkZWZwYXNzY29kZSwgMzIpOworICAgICAgICBDUllQVF9BcmNGb3VyQ3J5cHRCbG9jayh0ZW1wYnVmLCAzMiwgbV9FbmNyeXB0S2V5LCBrZXlfbGVuKTsKKyAgICAgICAgcEVuY3J5cHREaWN0LT5TZXRBdFN0cmluZyhGWF9CU1RSQygiVSIpLCBDRlhfQnl0ZVN0cmluZyh0ZW1wYnVmLCAzMikpOworICAgIH0gZWxzZSB7CisgICAgICAgIEZYX0JZVEUgbWQ1WzEwMF07CisgICAgICAgIENSWVBUX01ENVN0YXJ0KG1kNSk7CisgICAgICAgIENSWVBUX01ENVVwZGF0ZShtZDUsIGRlZnBhc3Njb2RlLCAzMik7CisgICAgICAgIGlmIChwSWRBcnJheSkgeworICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgaWQgPSBwSWRBcnJheS0+R2V0U3RyaW5nKDApOworICAgICAgICAgICAgQ1JZUFRfTUQ1VXBkYXRlKG1kNSwgKEZYX0xQQllURSkoRlhfTFBDU1RSKWlkLCBpZC5HZXRMZW5ndGgoKSk7CisgICAgICAgIH0KKyAgICAgICAgRlhfQllURSBkaWdlc3RbMzJdOworICAgICAgICBDUllQVF9NRDVGaW5pc2gobWQ1LCBkaWdlc3QpOworICAgICAgICBDUllQVF9BcmNGb3VyQ3J5cHRCbG9jayhkaWdlc3QsIDE2LCBtX0VuY3J5cHRLZXksIGtleV9sZW4pOworICAgICAgICBGWF9CWVRFIHRlbXBrZXlbMzJdOworICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSAxOTsgaSArKykgeworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBrZXlfbGVuOyBqICsrKSB7CisgICAgICAgICAgICAgICAgdGVtcGtleVtqXSA9IG1fRW5jcnlwdEtleVtqXSBeIChGWF9CWVRFKWk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDUllQVF9BcmNGb3VyQ3J5cHRCbG9jayhkaWdlc3QsIDE2LCB0ZW1wa2V5LCBrZXlfbGVuKTsKKyAgICAgICAgfQorICAgICAgICBDUllQVF9NRDVHZW5lcmF0ZShkaWdlc3QsIDE2LCBkaWdlc3QgKyAxNik7CisgICAgICAgIHBFbmNyeXB0RGljdC0+U2V0QXRTdHJpbmcoRlhfQlNUUkMoIlUiKSwgQ0ZYX0J5dGVTdHJpbmcoZGlnZXN0LCAzMikpOworICAgIH0KK30KK3ZvaWQgQ1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcjo6T25DcmVhdGUoQ1BERl9EaWN0aW9uYXJ5KiBwRW5jcnlwdERpY3QsIENQREZfQXJyYXkqIHBJZEFycmF5LAorICAgICAgICBGWF9MUENCWVRFIHVzZXJfcGFzcywgRlhfRFdPUkQgdXNlcl9zaXplLAorICAgICAgICBGWF9MUENCWVRFIG93bmVyX3Bhc3MsIEZYX0RXT1JEIG93bmVyX3NpemUsIEZYX0RXT1JEIHR5cGUpCit7CisgICAgT25DcmVhdGUocEVuY3J5cHREaWN0LCBwSWRBcnJheSwgdXNlcl9wYXNzLCB1c2VyX3NpemUsIG93bmVyX3Bhc3MsIG93bmVyX3NpemUsIFRSVUUsIHR5cGUpOworfQordm9pZCBDUERGX1N0YW5kYXJkU2VjdXJpdHlIYW5kbGVyOjpPbkNyZWF0ZShDUERGX0RpY3Rpb25hcnkqIHBFbmNyeXB0RGljdCwgQ1BERl9BcnJheSogcElkQXJyYXksIEZYX0xQQ0JZVEUgdXNlcl9wYXNzLCBGWF9EV09SRCB1c2VyX3NpemUsIEZYX0RXT1JEIHR5cGUpCit7CisgICAgT25DcmVhdGUocEVuY3J5cHREaWN0LCBwSWRBcnJheSwgdXNlcl9wYXNzLCB1c2VyX3NpemUsIE5VTEwsIDAsIEZBTFNFLCB0eXBlKTsKK30KK3ZvaWQgQ1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcjo6QUVTMjU2X1NldFBhc3N3b3JkKENQREZfRGljdGlvbmFyeSogcEVuY3J5cHREaWN0LCBGWF9MUENCWVRFIHBhc3N3b3JkLCBGWF9EV09SRCBzaXplLCBGWF9CT09MIGJPd25lciwgRlhfTFBDQllURSBrZXkpCit7CisgICAgRlhfQllURSBzaGFbMTI4XTsKKyAgICBDUllQVF9TSEExU3RhcnQoc2hhKTsKKyAgICBDUllQVF9TSEExVXBkYXRlKHNoYSwga2V5LCAzMik7CisgICAgQ1JZUFRfU0hBMVVwZGF0ZShzaGEsIChGWF9CWVRFKikiaGVsbG8iLCA1KTsKKyAgICBGWF9CWVRFIGRpZ2VzdFsyMF07CisgICAgQ1JZUFRfU0hBMUZpbmlzaChzaGEsIGRpZ2VzdCk7CisgICAgQ0ZYX0J5dGVTdHJpbmcgdWtleSA9IHBFbmNyeXB0RGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJVIikpOworICAgIEZYX0JZVEUgZGlnZXN0MVs0OF07CisgICAgaWYgKG1fUmV2aXNpb24gPj0gNikgeworICAgICAgICBSZXZpc2lvbjZfSGFzaChwYXNzd29yZCwgc2l6ZSwgZGlnZXN0LCAoYk93bmVyID8gKEZYX0xQQ0JZVEUpdWtleSA6IE5VTEwpLCBkaWdlc3QxKTsKKyAgICB9IGVsc2UgeworICAgICAgICBDUllQVF9TSEEyNTZTdGFydChzaGEpOworICAgICAgICBDUllQVF9TSEEyNTZVcGRhdGUoc2hhLCBwYXNzd29yZCwgc2l6ZSk7CisgICAgICAgIENSWVBUX1NIQTI1NlVwZGF0ZShzaGEsIGRpZ2VzdCwgOCk7CisgICAgICAgIGlmIChiT3duZXIpIHsKKyAgICAgICAgICAgIENSWVBUX1NIQTI1NlVwZGF0ZShzaGEsIHVrZXksIHVrZXkuR2V0TGVuZ3RoKCkpOworICAgICAgICB9CisgICAgICAgIENSWVBUX1NIQTI1NkZpbmlzaChzaGEsIGRpZ2VzdDEpOworICAgIH0KKyAgICBGWFNZU19tZW1jcHkzMihkaWdlc3QxICsgMzIsIGRpZ2VzdCwgMTYpOworICAgIHBFbmNyeXB0RGljdC0+U2V0QXRTdHJpbmcoYk93bmVyID8gRlhfQlNUUkMoIk8iKSA6IEZYX0JTVFJDKCJVIiksIENGWF9CeXRlU3RyaW5nKGRpZ2VzdDEsIDQ4KSk7CisgICAgaWYgKG1fUmV2aXNpb24gPj0gNikgeworICAgICAgICBSZXZpc2lvbjZfSGFzaChwYXNzd29yZCwgc2l6ZSwgZGlnZXN0ICsgOCwgKGJPd25lciA/IChGWF9MUENCWVRFKXVrZXkgOiBOVUxMKSwgZGlnZXN0MSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQ1JZUFRfU0hBMjU2U3RhcnQoc2hhKTsKKyAgICAgICAgQ1JZUFRfU0hBMjU2VXBkYXRlKHNoYSwgcGFzc3dvcmQsIHNpemUpOworICAgICAgICBDUllQVF9TSEEyNTZVcGRhdGUoc2hhLCBkaWdlc3QgKyA4LCA4KTsKKyAgICAgICAgaWYgKGJPd25lcikgeworICAgICAgICAgICAgQ1JZUFRfU0hBMjU2VXBkYXRlKHNoYSwgdWtleSwgdWtleS5HZXRMZW5ndGgoKSk7CisgICAgICAgIH0KKyAgICAgICAgQ1JZUFRfU0hBMjU2RmluaXNoKHNoYSwgZGlnZXN0MSk7CisgICAgfQorICAgIEZYX0JZVEUqIGFlcyA9IEZYX0FsbG9jKEZYX0JZVEUsIDIwNDgpOworICAgIENSWVBUX0FFU1NldEtleShhZXMsIDE2LCBkaWdlc3QxLCAzMiwgVFJVRSk7CisgICAgRlhfQllURSBpdlsxNl07CisgICAgRlhTWVNfbWVtc2V0MzIoaXYsIDAsIDE2KTsKKyAgICBDUllQVF9BRVNTZXRJVihhZXMsIGl2KTsKKyAgICBDUllQVF9BRVNFbmNyeXB0KGFlcywgZGlnZXN0MSwga2V5LCAzMik7CisgICAgRlhfRnJlZShhZXMpOworICAgIHBFbmNyeXB0RGljdC0+U2V0QXRTdHJpbmcoYk93bmVyID8gRlhfQlNUUkMoIk9FIikgOiBGWF9CU1RSQygiVUUiKSwgQ0ZYX0J5dGVTdHJpbmcoZGlnZXN0MSwgMzIpKTsKK30KK3ZvaWQgQ1BERl9TdGFuZGFyZFNlY3VyaXR5SGFuZGxlcjo6QUVTMjU2X1NldFBlcm1zKENQREZfRGljdGlvbmFyeSogcEVuY3J5cHREaWN0LCBGWF9EV09SRCBwZXJtaXNzaW9ucywKKyAgICAgICAgRlhfQk9PTCBiRW5jcnlwdE1ldGFkYXRhLCBGWF9MUENCWVRFIGtleSkKK3sKKyAgICBGWF9CWVRFIGJ1ZlsxNl07CisgICAgYnVmWzBdID0gKEZYX0JZVEUpcGVybWlzc2lvbnM7CisgICAgYnVmWzFdID0gKEZYX0JZVEUpKHBlcm1pc3Npb25zID4+IDgpOworICAgIGJ1ZlsyXSA9IChGWF9CWVRFKShwZXJtaXNzaW9ucyA+PiAxNik7CisgICAgYnVmWzNdID0gKEZYX0JZVEUpKHBlcm1pc3Npb25zID4+IDI0KTsKKyAgICBidWZbNF0gPSAweGZmOworICAgIGJ1Zls1XSA9IDB4ZmY7CisgICAgYnVmWzZdID0gMHhmZjsKKyAgICBidWZbN10gPSAweGZmOworICAgIGJ1Zls4XSA9IGJFbmNyeXB0TWV0YWRhdGEgPyAnVCcgOiAnRic7CisgICAgYnVmWzldID0gJ2EnOworICAgIGJ1ZlsxMF0gPSAnZCc7CisgICAgYnVmWzExXSA9ICdiJzsKKyAgICBGWF9CWVRFKiBhZXMgPSBGWF9BbGxvYyhGWF9CWVRFLCAyMDQ4KTsKKyAgICBDUllQVF9BRVNTZXRLZXkoYWVzLCAxNiwga2V5LCAzMiwgVFJVRSk7CisgICAgRlhfQllURSBpdlsxNl0sIGJ1ZjFbMTZdOworICAgIEZYU1lTX21lbXNldDMyKGl2LCAwLCAxNik7CisgICAgQ1JZUFRfQUVTU2V0SVYoYWVzLCBpdik7CisgICAgQ1JZUFRfQUVTRW5jcnlwdChhZXMsIGJ1ZjEsIGJ1ZiwgMTYpOworICAgIEZYX0ZyZWUoYWVzKTsKKyAgICBwRW5jcnlwdERpY3QtPlNldEF0U3RyaW5nKEZYX0JTVFJDKCJQZXJtcyIpLCBDRlhfQnl0ZVN0cmluZyhidWYxLCAxNikpOworfQordm9pZCBDUERGX1N0YW5kYXJkQ3J5cHRvSGFuZGxlcjo6Q3J5cHRCbG9jayhGWF9CT09MIGJFbmNyeXB0LCBGWF9EV09SRCBvYmpudW0sIEZYX0RXT1JEIGdlbm51bSwgRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwKKyAgICAgICAgRlhfTFBCWVRFIGRlc3RfYnVmLCBGWF9EV09SRCYgZGVzdF9zaXplKQoreworICAgIGlmIChtX0NpcGhlciA9PSBGWENJUEhFUl9OT05FKSB7CisgICAgICAgIEZYU1lTX21lbWNweTMyKGRlc3RfYnVmLCBzcmNfYnVmLCBzcmNfc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfQllURSByZWFsa2V5WzE2XTsKKyAgICBpbnQgcmVhbGtleWxlbiA9IDE2OworICAgIGlmIChtX0NpcGhlciAhPSBGWENJUEhFUl9BRVMgfHwgbV9LZXlMZW4gIT0gMzIpIHsKKyAgICAgICAgRlhfQllURSBrZXkxWzMyXTsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIoa2V5MSwgbV9FbmNyeXB0S2V5LCBtX0tleUxlbik7CisgICAgICAgIGtleTFbbV9LZXlMZW4gKyAwXSA9IChGWF9CWVRFKW9iam51bTsKKyAgICAgICAga2V5MVttX0tleUxlbiArIDFdID0gKEZYX0JZVEUpKG9iam51bSA+PiA4KTsKKyAgICAgICAga2V5MVttX0tleUxlbiArIDJdID0gKEZYX0JZVEUpKG9iam51bSA+PiAxNik7CisgICAgICAgIGtleTFbbV9LZXlMZW4gKyAzXSA9IChGWF9CWVRFKWdlbm51bTsKKyAgICAgICAga2V5MVttX0tleUxlbiArIDRdID0gKEZYX0JZVEUpKGdlbm51bSA+PiA4KTsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIoa2V5MSArIG1fS2V5TGVuLCAmb2JqbnVtLCAzKTsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIoa2V5MSArIG1fS2V5TGVuICsgMywgJmdlbm51bSwgMik7CisgICAgICAgIGlmIChtX0NpcGhlciA9PSBGWENJUEhFUl9BRVMpIHsKKyAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKGtleTEgKyBtX0tleUxlbiArIDUsICJzQWxUIiwgNCk7CisgICAgICAgIH0KKyAgICAgICAgQ1JZUFRfTUQ1R2VuZXJhdGUoa2V5MSwgbV9DaXBoZXIgPT0gRlhDSVBIRVJfQUVTID8gbV9LZXlMZW4gKyA5IDogbV9LZXlMZW4gKyA1LCByZWFsa2V5KTsKKyAgICAgICAgcmVhbGtleWxlbiA9IG1fS2V5TGVuICsgNTsKKyAgICAgICAgaWYgKHJlYWxrZXlsZW4gPiAxNikgeworICAgICAgICAgICAgcmVhbGtleWxlbiA9IDE2OworICAgICAgICB9CisgICAgfQorICAgIGlmIChtX0NpcGhlciA9PSBGWENJUEhFUl9BRVMpIHsKKyAgICAgICAgQ1JZUFRfQUVTU2V0S2V5KG1fcEFFU0NvbnRleHQsIDE2LCBtX0tleUxlbiA9PSAzMiA/IG1fRW5jcnlwdEtleSA6IHJlYWxrZXksIG1fS2V5TGVuLCBiRW5jcnlwdCk7CisgICAgICAgIGlmIChiRW5jcnlwdCkgeworICAgICAgICAgICAgRlhfQllURSBpdlsxNl07CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpICsrKSB7CisgICAgICAgICAgICAgICAgaXZbaV0gPSAoRlhfQllURSlyYW5kKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDUllQVF9BRVNTZXRJVihtX3BBRVNDb250ZXh0LCBpdik7CisgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihkZXN0X2J1ZiwgaXYsIDE2KTsKKyAgICAgICAgICAgIGludCBuYmxvY2tzID0gc3JjX3NpemUgLyAxNjsKKyAgICAgICAgICAgIENSWVBUX0FFU0VuY3J5cHQobV9wQUVTQ29udGV4dCwgZGVzdF9idWYgKyAxNiwgc3JjX2J1ZiwgbmJsb2NrcyAqIDE2KTsKKyAgICAgICAgICAgIEZYX0JZVEUgcGFkZGluZ1sxNl07CisgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihwYWRkaW5nLCBzcmNfYnVmICsgbmJsb2NrcyAqIDE2LCBzcmNfc2l6ZSAlIDE2KTsKKyAgICAgICAgICAgIEZYU1lTX21lbXNldDgocGFkZGluZyArIHNyY19zaXplICUgMTYsIDE2IC0gc3JjX3NpemUgJSAxNiwgMTYgLSBzcmNfc2l6ZSAlIDE2KTsKKyAgICAgICAgICAgIENSWVBUX0FFU0VuY3J5cHQobV9wQUVTQ29udGV4dCwgZGVzdF9idWYgKyBuYmxvY2tzICogMTYgKyAxNiwgcGFkZGluZywgMTYpOworICAgICAgICAgICAgZGVzdF9zaXplID0gMzIgKyBuYmxvY2tzICogMTY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBDUllQVF9BRVNTZXRJVihtX3BBRVNDb250ZXh0LCBzcmNfYnVmKTsKKyAgICAgICAgICAgIENSWVBUX0FFU0RlY3J5cHQobV9wQUVTQ29udGV4dCwgZGVzdF9idWYsIHNyY19idWYgKyAxNiwgc3JjX3NpemUgLSAxNik7CisgICAgICAgICAgICBkZXN0X3NpemUgPSBzcmNfc2l6ZSAtIDE2OworICAgICAgICAgICAgZGVzdF9zaXplIC09IGRlc3RfYnVmW2Rlc3Rfc2l6ZSAtIDFdOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGRlc3Rfc2l6ZSA9PSBzcmNfc2l6ZSk7CisgICAgICAgIGlmIChkZXN0X2J1ZiAhPSBzcmNfYnVmKSB7CisgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihkZXN0X2J1Ziwgc3JjX2J1Ziwgc3JjX3NpemUpOworICAgICAgICB9CisgICAgICAgIENSWVBUX0FyY0ZvdXJDcnlwdEJsb2NrKGRlc3RfYnVmLCBkZXN0X3NpemUsIHJlYWxrZXksIHJlYWxrZXlsZW4pOworICAgIH0KK30KK3R5cGVkZWYgc3RydWN0IF9BRVNDcnlwdENvbnRleHQgeworICAgIEZYX0JZVEUJCW1fQ29udGV4dFsyMDQ4XTsKKyAgICBGWF9CT09MCQltX2JJVjsKKyAgICBGWF9CWVRFCQltX0Jsb2NrWzE2XTsKKyAgICBGWF9EV09SRAltX0Jsb2NrT2Zmc2V0OworfSBBRVNDcnlwdENvbnRleHQ7CitGWF9MUFZPSUQgQ1BERl9TdGFuZGFyZENyeXB0b0hhbmRsZXI6OkNyeXB0U3RhcnQoRlhfRFdPUkQgb2JqbnVtLCBGWF9EV09SRCBnZW5udW0sIEZYX0JPT0wgYkVuY3J5cHQpCit7CisgICAgaWYgKG1fQ2lwaGVyID09IEZYQ0lQSEVSX05PTkUpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorICAgIGlmIChtX0NpcGhlciA9PSBGWENJUEhFUl9BRVMgJiYgbV9LZXlMZW4gPT0gMzIpIHsKKyAgICAgICAgQUVTQ3J5cHRDb250ZXh0KiBwQ29udGV4dCA9IEZYX0FsbG9jKEFFU0NyeXB0Q29udGV4dCwgMSk7CisgICAgICAgIHBDb250ZXh0LT5tX2JJViA9IFRSVUU7CisgICAgICAgIHBDb250ZXh0LT5tX0Jsb2NrT2Zmc2V0ID0gMDsKKyAgICAgICAgQ1JZUFRfQUVTU2V0S2V5KHBDb250ZXh0LT5tX0NvbnRleHQsIDE2LCBtX0VuY3J5cHRLZXksIDMyLCBiRW5jcnlwdCk7CisgICAgICAgIGlmIChiRW5jcnlwdCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSArKykgeworICAgICAgICAgICAgICAgIHBDb250ZXh0LT5tX0Jsb2NrW2ldID0gKEZYX0JZVEUpcmFuZCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQ1JZUFRfQUVTU2V0SVYocENvbnRleHQtPm1fQ29udGV4dCwgcENvbnRleHQtPm1fQmxvY2spOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwQ29udGV4dDsKKyAgICB9CisgICAgRlhfQllURSBrZXkxWzQ4XTsKKyAgICBGWFNZU19tZW1jcHkzMihrZXkxLCBtX0VuY3J5cHRLZXksIG1fS2V5TGVuKTsKKyAgICBGWFNZU19tZW1jcHkzMihrZXkxICsgbV9LZXlMZW4sICZvYmpudW0sIDMpOworICAgIEZYU1lTX21lbWNweTMyKGtleTEgKyBtX0tleUxlbiArIDMsICZnZW5udW0sIDIpOworICAgIGlmIChtX0NpcGhlciA9PSBGWENJUEhFUl9BRVMpIHsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIoa2V5MSArIG1fS2V5TGVuICsgNSwgInNBbFQiLCA0KTsKKyAgICB9CisgICAgRlhfQllURSByZWFsa2V5WzE2XTsKKyAgICBDUllQVF9NRDVHZW5lcmF0ZShrZXkxLCBtX0NpcGhlciA9PSBGWENJUEhFUl9BRVMgPyBtX0tleUxlbiArIDkgOiBtX0tleUxlbiArIDUsIHJlYWxrZXkpOworICAgIGludCByZWFsa2V5bGVuID0gbV9LZXlMZW4gKyA1OworICAgIGlmIChyZWFsa2V5bGVuID4gMTYpIHsKKyAgICAgICAgcmVhbGtleWxlbiA9IDE2OworICAgIH0KKyAgICBpZiAobV9DaXBoZXIgPT0gRlhDSVBIRVJfQUVTKSB7CisgICAgICAgIEFFU0NyeXB0Q29udGV4dCogcENvbnRleHQgPSBGWF9BbGxvYyhBRVNDcnlwdENvbnRleHQsIDEpOworICAgICAgICBwQ29udGV4dC0+bV9iSVYgPSBUUlVFOworICAgICAgICBwQ29udGV4dC0+bV9CbG9ja09mZnNldCA9IDA7CisgICAgICAgIENSWVBUX0FFU1NldEtleShwQ29udGV4dC0+bV9Db250ZXh0LCAxNiwgcmVhbGtleSwgMTYsIGJFbmNyeXB0KTsKKyAgICAgICAgaWYgKGJFbmNyeXB0KSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyBpICsrKSB7CisgICAgICAgICAgICAgICAgcENvbnRleHQtPm1fQmxvY2tbaV0gPSAoRlhfQllURSlyYW5kKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDUllQVF9BRVNTZXRJVihwQ29udGV4dC0+bV9Db250ZXh0LCBwQ29udGV4dC0+bV9CbG9jayk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBDb250ZXh0OworICAgIH0KKyAgICB2b2lkKiBwQ29udGV4dCA9IEZYX0FsbG9jKEZYX0JZVEUsIDEwNDApOworICAgIENSWVBUX0FyY0ZvdXJTZXR1cChwQ29udGV4dCwgcmVhbGtleSwgcmVhbGtleWxlbik7CisgICAgcmV0dXJuIHBDb250ZXh0OworfQorRlhfQk9PTCBDUERGX1N0YW5kYXJkQ3J5cHRvSGFuZGxlcjo6Q3J5cHRTdHJlYW0oRlhfTFBWT0lEIGNvbnRleHQsIEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmLCBGWF9CT09MIGJFbmNyeXB0KQoreworICAgIGlmICghY29udGV4dCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChtX0NpcGhlciA9PSBGWENJUEhFUl9OT05FKSB7CisgICAgICAgIGRlc3RfYnVmLkFwcGVuZEJsb2NrKHNyY19idWYsIHNyY19zaXplKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGlmIChtX0NpcGhlciA9PSBGWENJUEhFUl9SQzQpIHsKKyAgICAgICAgaW50IG9sZF9zaXplID0gZGVzdF9idWYuR2V0U2l6ZSgpOworICAgICAgICBkZXN0X2J1Zi5BcHBlbmRCbG9jayhzcmNfYnVmLCBzcmNfc2l6ZSk7CisgICAgICAgIENSWVBUX0FyY0ZvdXJDcnlwdChjb250ZXh0LCBkZXN0X2J1Zi5HZXRCdWZmZXIoKSArIG9sZF9zaXplLCBzcmNfc2l6ZSk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBBRVNDcnlwdENvbnRleHQqIHBDb250ZXh0ID0gKEFFU0NyeXB0Q29udGV4dCopY29udGV4dDsKKyAgICBpZiAocENvbnRleHQtPm1fYklWICYmIGJFbmNyeXB0KSB7CisgICAgICAgIGRlc3RfYnVmLkFwcGVuZEJsb2NrKHBDb250ZXh0LT5tX0Jsb2NrLCAxNik7CisgICAgICAgIHBDb250ZXh0LT5tX2JJViA9IEZBTFNFOworICAgIH0KKyAgICBGWF9EV09SRCBzcmNfb2ZmID0gMDsKKyAgICBGWF9EV09SRCBzcmNfbGVmdCA9IHNyY19zaXplOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIEZYX0RXT1JEIGNvcHlfc2l6ZSA9IDE2IC0gcENvbnRleHQtPm1fQmxvY2tPZmZzZXQ7CisgICAgICAgIGlmIChjb3B5X3NpemUgPiBzcmNfbGVmdCkgeworICAgICAgICAgICAgY29weV9zaXplID0gc3JjX2xlZnQ7CisgICAgICAgIH0KKyAgICAgICAgRlhTWVNfbWVtY3B5MzIocENvbnRleHQtPm1fQmxvY2sgKyBwQ29udGV4dC0+bV9CbG9ja09mZnNldCwgc3JjX2J1ZiArIHNyY19vZmYsIGNvcHlfc2l6ZSk7CisgICAgICAgIHNyY19vZmYgKz0gY29weV9zaXplOworICAgICAgICBzcmNfbGVmdCAtPSBjb3B5X3NpemU7CisgICAgICAgIHBDb250ZXh0LT5tX0Jsb2NrT2Zmc2V0ICs9IGNvcHlfc2l6ZTsKKyAgICAgICAgaWYgKHBDb250ZXh0LT5tX0Jsb2NrT2Zmc2V0ID09IDE2KSB7CisgICAgICAgICAgICBpZiAoIWJFbmNyeXB0ICYmIHBDb250ZXh0LT5tX2JJVikgeworICAgICAgICAgICAgICAgIENSWVBUX0FFU1NldElWKHBDb250ZXh0LT5tX0NvbnRleHQsIHBDb250ZXh0LT5tX0Jsb2NrKTsKKyAgICAgICAgICAgICAgICBwQ29udGV4dC0+bV9iSVYgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBwQ29udGV4dC0+bV9CbG9ja09mZnNldCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNyY19vZmYgPCBzcmNfc2l6ZSkgeworICAgICAgICAgICAgICAgIEZYX0JZVEUgYmxvY2tfYnVmWzE2XTsKKyAgICAgICAgICAgICAgICBpZiAoYkVuY3J5cHQpIHsKKyAgICAgICAgICAgICAgICAgICAgQ1JZUFRfQUVTRW5jcnlwdChwQ29udGV4dC0+bV9Db250ZXh0LCBibG9ja19idWYsIHBDb250ZXh0LT5tX0Jsb2NrLCAxNik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQ1JZUFRfQUVTRGVjcnlwdChwQ29udGV4dC0+bV9Db250ZXh0LCBibG9ja19idWYsIHBDb250ZXh0LT5tX0Jsb2NrLCAxNik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlc3RfYnVmLkFwcGVuZEJsb2NrKGJsb2NrX2J1ZiwgMTYpOworICAgICAgICAgICAgICAgIHBDb250ZXh0LT5tX0Jsb2NrT2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIXNyY19sZWZ0KSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ1BERl9TdGFuZGFyZENyeXB0b0hhbmRsZXI6OkNyeXB0RmluaXNoKEZYX0xQVk9JRCBjb250ZXh0LCBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1ZiwgRlhfQk9PTCBiRW5jcnlwdCkKK3sKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAobV9DaXBoZXIgPT0gRlhDSVBIRVJfTk9ORSkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgaWYgKG1fQ2lwaGVyID09IEZYQ0lQSEVSX1JDNCkgeworICAgICAgICBGWF9GcmVlKGNvbnRleHQpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgQUVTQ3J5cHRDb250ZXh0KiBwQ29udGV4dCA9IChBRVNDcnlwdENvbnRleHQqKWNvbnRleHQ7CisgICAgaWYgKGJFbmNyeXB0KSB7CisgICAgICAgIEZYX0JZVEUgYmxvY2tfYnVmWzE2XTsKKyAgICAgICAgaWYgKHBDb250ZXh0LT5tX0Jsb2NrT2Zmc2V0ID09IDE2KSB7CisgICAgICAgICAgICBDUllQVF9BRVNFbmNyeXB0KHBDb250ZXh0LT5tX0NvbnRleHQsIGJsb2NrX2J1ZiwgcENvbnRleHQtPm1fQmxvY2ssIDE2KTsKKyAgICAgICAgICAgIGRlc3RfYnVmLkFwcGVuZEJsb2NrKGJsb2NrX2J1ZiwgMTYpOworICAgICAgICAgICAgcENvbnRleHQtPm1fQmxvY2tPZmZzZXQgPSAwOworICAgICAgICB9CisgICAgICAgIEZYU1lTX21lbXNldDgocENvbnRleHQtPm1fQmxvY2sgKyBwQ29udGV4dC0+bV9CbG9ja09mZnNldCwgKEZYX0JZVEUpKDE2IC0gcENvbnRleHQtPm1fQmxvY2tPZmZzZXQpLCAxNiAtIHBDb250ZXh0LT5tX0Jsb2NrT2Zmc2V0KTsKKyAgICAgICAgQ1JZUFRfQUVTRW5jcnlwdChwQ29udGV4dC0+bV9Db250ZXh0LCBibG9ja19idWYsIHBDb250ZXh0LT5tX0Jsb2NrLCAxNik7CisgICAgICAgIGRlc3RfYnVmLkFwcGVuZEJsb2NrKGJsb2NrX2J1ZiwgMTYpOworICAgIH0gZWxzZSBpZiAocENvbnRleHQtPm1fQmxvY2tPZmZzZXQgPT0gMTYpIHsKKyAgICAgICAgRlhfQllURSBibG9ja19idWZbMTZdOworICAgICAgICBDUllQVF9BRVNEZWNyeXB0KHBDb250ZXh0LT5tX0NvbnRleHQsIGJsb2NrX2J1ZiwgcENvbnRleHQtPm1fQmxvY2ssIDE2KTsKKyAgICAgICAgaWYgKGJsb2NrX2J1ZlsxNV0gPD0gMTYpIHsKKyAgICAgICAgICAgIGRlc3RfYnVmLkFwcGVuZEJsb2NrKGJsb2NrX2J1ZiwgMTYgLSBibG9ja19idWZbMTVdKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBGWF9GcmVlKHBDb250ZXh0KTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0xQVk9JRCBDUERGX1N0YW5kYXJkQ3J5cHRvSGFuZGxlcjo6RGVjcnlwdFN0YXJ0KEZYX0RXT1JEIG9iam51bSwgRlhfRFdPUkQgZ2VubnVtKQoreworICAgIHJldHVybiBDcnlwdFN0YXJ0KG9iam51bSwgZ2VubnVtLCBGQUxTRSk7Cit9CitGWF9EV09SRCBDUERGX1N0YW5kYXJkQ3J5cHRvSGFuZGxlcjo6RGVjcnlwdEdldFNpemUoRlhfRFdPUkQgc3JjX3NpemUpCit7CisgICAgcmV0dXJuIG1fQ2lwaGVyID09IEZYQ0lQSEVSX0FFUyA/IHNyY19zaXplIC0gMTYgOiBzcmNfc2l6ZTsKK30KK0ZYX0JPT0wgQ1BERl9TdGFuZGFyZENyeXB0b0hhbmRsZXI6OkluaXQoQ1BERl9EaWN0aW9uYXJ5KiBwRW5jcnlwdERpY3QsIENQREZfU2VjdXJpdHlIYW5kbGVyKiBwU2VjdXJpdHlIYW5kbGVyKQoreworICAgIEZYX0xQQ0JZVEUga2V5OworICAgIGlmICghcFNlY3VyaXR5SGFuZGxlci0+R2V0Q3J5cHRJbmZvKG1fQ2lwaGVyLCBrZXksIG1fS2V5TGVuKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChtX0tleUxlbiA+IDMyIHx8IG1fS2V5TGVuIDwgMCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChtX0NpcGhlciAhPSBGWENJUEhFUl9OT05FKSB7CisgICAgICAgIEZYU1lTX21lbWNweTMyKG1fRW5jcnlwdEtleSwga2V5LCBtX0tleUxlbik7CisgICAgfQorICAgIGlmIChtX0NpcGhlciA9PSBGWENJUEhFUl9BRVMpIHsKKyAgICAgICAgbV9wQUVTQ29udGV4dCA9IEZYX0FsbG9jKEZYX0JZVEUsIDIwNDgpOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ1BERl9TdGFuZGFyZENyeXB0b0hhbmRsZXI6OkluaXQoaW50IGNpcGhlciwgRlhfTFBDQllURSBrZXksIGludCBrZXlsZW4pCit7CisgICAgaWYgKGNpcGhlciA9PSBGWENJUEhFUl9BRVMpIHsKKyAgICAgICAgc3dpdGNoKGtleWxlbikgeworICAgICAgICAgICAgY2FzZSAxNjoKKyAgICAgICAgICAgIGNhc2UgMjQ6CisgICAgICAgICAgICBjYXNlIDMyOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGNpcGhlciA9PSBGWENJUEhFUl9BRVMyKSB7CisgICAgICAgIGlmIChrZXlsZW4gIT0gMzIpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoY2lwaGVyID09IEZYQ0lQSEVSX1JDNCkgeworICAgICAgICBpZiAoa2V5bGVuIDwgNSB8fCBrZXlsZW4gPiAxNikgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGtleWxlbiA+IDMyKSB7CisgICAgICAgICAgICBrZXlsZW4gPSAzMjsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX0NpcGhlciA9IGNpcGhlcjsKKyAgICBtX0tleUxlbiA9IGtleWxlbjsKKyAgICBGWFNZU19tZW1jcHkzMihtX0VuY3J5cHRLZXksIGtleSwga2V5bGVuKTsKKyAgICBpZiAobV9DaXBoZXIgPT0gRlhDSVBIRVJfQUVTKSB7CisgICAgICAgIG1fcEFFU0NvbnRleHQgPSBGWF9BbGxvYyhGWF9CWVRFLCAyMDQ4KTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENQREZfU3RhbmRhcmRDcnlwdG9IYW5kbGVyOjpEZWNyeXB0U3RyZWFtKEZYX0xQVk9JRCBjb250ZXh0LCBGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLAorICAgICAgICBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1ZikKK3sKKyAgICByZXR1cm4gQ3J5cHRTdHJlYW0oY29udGV4dCwgc3JjX2J1Ziwgc3JjX3NpemUsIGRlc3RfYnVmLCBGQUxTRSk7Cit9CitGWF9CT09MIENQREZfU3RhbmRhcmRDcnlwdG9IYW5kbGVyOjpEZWNyeXB0RmluaXNoKEZYX0xQVk9JRCBjb250ZXh0LCBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1ZikKK3sKKyAgICByZXR1cm4gQ3J5cHRGaW5pc2goY29udGV4dCwgZGVzdF9idWYsIEZBTFNFKTsKK30KK0ZYX0RXT1JEIENQREZfU3RhbmRhcmRDcnlwdG9IYW5kbGVyOjpFbmNyeXB0R2V0U2l6ZShGWF9EV09SRCBvYmpudW0sIEZYX0RXT1JEIHZlcnNpb24sIEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUpCit7CisgICAgaWYgKG1fQ2lwaGVyID09IEZYQ0lQSEVSX0FFUykgeworICAgICAgICByZXR1cm4gc3JjX3NpemUgKyAzMjsKKyAgICB9CisgICAgcmV0dXJuIHNyY19zaXplOworfQorRlhfQk9PTCBDUERGX1N0YW5kYXJkQ3J5cHRvSGFuZGxlcjo6RW5jcnlwdENvbnRlbnQoRlhfRFdPUkQgb2JqbnVtLCBGWF9EV09SRCBnZW5udW0sIEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsCisgICAgICAgIEZYX0xQQllURSBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkKK3sKKyAgICBDcnlwdEJsb2NrKFRSVUUsIG9iam51bSwgZ2VubnVtLCBzcmNfYnVmLCBzcmNfc2l6ZSwgZGVzdF9idWYsIGRlc3Rfc2l6ZSk7CisgICAgcmV0dXJuIFRSVUU7Cit9Cit2b2lkIENQREZfQ3J5cHRvSGFuZGxlcjo6RGVjcnlwdChGWF9EV09SRCBvYmpudW0sIEZYX0RXT1JEIGdlbm51bSwgQ0ZYX0J5dGVTdHJpbmcmIHN0cikKK3sKKyAgICBDRlhfQmluYXJ5QnVmIGRlc3RfYnVmOworICAgIEZYX0xQVk9JRCBjb250ZXh0ID0gRGVjcnlwdFN0YXJ0KG9iam51bSwgZ2VubnVtKTsKKyAgICBEZWNyeXB0U3RyZWFtKGNvbnRleHQsIChGWF9MUENCWVRFKXN0ciwgc3RyLkdldExlbmd0aCgpLCBkZXN0X2J1Zik7CisgICAgRGVjcnlwdEZpbmlzaChjb250ZXh0LCBkZXN0X2J1Zik7CisgICAgc3RyID0gZGVzdF9idWY7Cit9CitDUERGX1N0YW5kYXJkQ3J5cHRvSGFuZGxlcjo6Q1BERl9TdGFuZGFyZENyeXB0b0hhbmRsZXIoKQoreworICAgIG1fcEFFU0NvbnRleHQgPSBOVUxMOworICAgIG1fQ2lwaGVyID0gRlhDSVBIRVJfTk9ORTsKKyAgICBtX0tleUxlbiA9IDA7Cit9CitDUERGX1N0YW5kYXJkQ3J5cHRvSGFuZGxlcjo6fkNQREZfU3RhbmRhcmRDcnlwdG9IYW5kbGVyKCkKK3sKKyAgICBpZiAobV9wQUVTQ29udGV4dCkgeworICAgICAgICBGWF9GcmVlKG1fcEFFU0NvbnRleHQpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYXJzZXIvZnBkZl9wYXJzZXJfZmRmLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYXJzZXIvZnBkZl9wYXJzZXJfZmRmLmNwcAppbmRleCAyMmY5YWE3Li4zNmNjOWRiIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFyc2VyL2ZwZGZfcGFyc2VyX2ZkZi5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhcnNlci9mcGRmX3BhcnNlcl9mZGYuY3BwCkBAIC0xLDIyNCArMSwyMjQgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9zZXJpYWwuaCINCi1DRkRGX0RvY3VtZW50OjpDRkRGX0RvY3VtZW50KCkgOiBDUERGX0luZGlyZWN0T2JqZWN0cyhOVUxMKQ0KLXsNCi0gICAgbV9wUm9vdERpY3QgPSBOVUxMOw0KLSAgICBtX3BGaWxlID0gTlVMTDsNCi0gICAgbV9iT3duRmlsZSA9IEZBTFNFOw0KLX0NCi1DRkRGX0RvY3VtZW50Ojp+Q0ZERl9Eb2N1bWVudCgpDQotew0KLSAgICBpZiAobV9iT3duRmlsZSAmJiBtX3BGaWxlKSB7DQotICAgICAgICBtX3BGaWxlLT5SZWxlYXNlKCk7DQotICAgIH0NCi19DQotQ0ZERl9Eb2N1bWVudCogQ0ZERl9Eb2N1bWVudDo6Q3JlYXRlTmV3RG9jKCkNCi17DQotICAgIENGREZfRG9jdW1lbnQqIHBEb2MgPSBGWF9ORVcgQ0ZERl9Eb2N1bWVudDsNCi0gICAgcERvYy0+bV9wUm9vdERpY3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5Ow0KLSAgICBwRG9jLT5BZGRJbmRpcmVjdE9iamVjdChwRG9jLT5tX3BSb290RGljdCk7DQotICAgIENQREZfRGljdGlvbmFyeSogcEZERkRpY3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5Ow0KLSAgICBwRG9jLT5tX3BSb290RGljdC0+U2V0QXQoRlhfQlNUUkMoIkZERiIpLCBwRkRGRGljdCk7DQotICAgIHJldHVybiBwRG9jOw0KLX0NCi1DRkRGX0RvY3VtZW50KiBDRkRGX0RvY3VtZW50OjpQYXJzZUZpbGUoRlhfTFBDU1RSIGZpbGVfcGF0aCkNCi17DQotICAgIHJldHVybiBDRkRGX0RvY3VtZW50OjpQYXJzZUZpbGUoRlhfQ3JlYXRlRmlsZVJlYWQoZmlsZV9wYXRoKSwgVFJVRSk7DQotfQ0KLUNGREZfRG9jdW1lbnQqIENGREZfRG9jdW1lbnQ6OlBhcnNlRmlsZShGWF9MUENXU1RSIGZpbGVfcGF0aCkNCi17DQotICAgIHJldHVybiBDRkRGX0RvY3VtZW50OjpQYXJzZUZpbGUoRlhfQ3JlYXRlRmlsZVJlYWQoZmlsZV9wYXRoKSwgVFJVRSk7DQotfQ0KLUNGREZfRG9jdW1lbnQqIENGREZfRG9jdW1lbnQ6OlBhcnNlRmlsZShJRlhfRmlsZVJlYWQgKnBGaWxlLCBGWF9CT09MIGJPd25GaWxlKQ0KLXsNCi0gICAgaWYgKCFwRmlsZSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ0ZERl9Eb2N1bWVudCogcERvYyA9IEZYX05FVyBDRkRGX0RvY3VtZW50Ow0KLSAgICBwRG9jLT5QYXJzZVN0cmVhbShwRmlsZSwgYk93bkZpbGUpOw0KLSAgICBpZiAocERvYy0+bV9wUm9vdERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgZGVsZXRlIHBEb2M7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gcERvYzsNCi19DQotQ0ZERl9Eb2N1bWVudCogQ0ZERl9Eb2N1bWVudDo6UGFyc2VNZW1vcnkoRlhfTFBDQllURSBwRGF0YSwgRlhfRFdPUkQgc2l6ZSkNCi17DQotICAgIHJldHVybiBDRkRGX0RvY3VtZW50OjpQYXJzZUZpbGUoRlhfQ3JlYXRlTWVtb3J5U3RyZWFtKChGWF9MUEJZVEUpcERhdGEsIHNpemUpLCBUUlVFKTsNCi19DQotdm9pZCBDRkRGX0RvY3VtZW50OjpQYXJzZVN0cmVhbShJRlhfRmlsZVJlYWQgKnBGaWxlLCBGWF9CT09MIGJPd25GaWxlKQ0KLXsNCi0gICAgbV9wRmlsZSA9IHBGaWxlOw0KLSAgICBtX2JPd25GaWxlID0gYk93bkZpbGU7DQotICAgIENQREZfU3ludGF4UGFyc2VyIHBhcnNlcjsNCi0gICAgcGFyc2VyLkluaXRQYXJzZXIobV9wRmlsZSwgMCk7DQotICAgIHdoaWxlICgxKSB7DQotICAgICAgICBGWF9CT09MIGJOdW1iZXI7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyB3b3JkID0gcGFyc2VyLkdldE5leHRXb3JkKGJOdW1iZXIpOw0KLSAgICAgICAgaWYgKGJOdW1iZXIpIHsNCi0gICAgICAgICAgICBGWF9EV09SRCBvYmpudW0gPSBGWFNZU19hdG9pKHdvcmQpOw0KLSAgICAgICAgICAgIHdvcmQgPSBwYXJzZXIuR2V0TmV4dFdvcmQoYk51bWJlcik7DQotICAgICAgICAgICAgaWYgKCFiTnVtYmVyKSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB3b3JkID0gcGFyc2VyLkdldE5leHRXb3JkKGJOdW1iZXIpOw0KLSAgICAgICAgICAgIGlmICh3b3JkICE9IEZYX0JTVFJDKCJvYmoiKSkgew0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBPYmogPSBwYXJzZXIuR2V0T2JqZWN0KHRoaXMsIG9iam51bSwgMCwgRkFMU0UpOw0KLSAgICAgICAgICAgIGlmIChwT2JqID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIEluc2VydEluZGlyZWN0T2JqZWN0KG9iam51bSwgcE9iaik7DQotICAgICAgICAgICAgd29yZCA9IHBhcnNlci5HZXROZXh0V29yZChiTnVtYmVyKTsNCi0gICAgICAgICAgICBpZiAod29yZCAhPSBGWF9CU1RSQygiZW5kb2JqIikpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAod29yZCAhPSBGWF9CU1RSQygidHJhaWxlciIpKSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBNYWluRGljdCA9IChDUERGX0RpY3Rpb25hcnkqKXBhcnNlci5HZXRPYmplY3QodGhpcywgMCwgMCwgMCk7DQotICAgICAgICAgICAgaWYgKHBNYWluRGljdCA9PSBOVUxMIHx8IHBNYWluRGljdC0+R2V0VHlwZSgpICE9IFBERk9CSl9ESUNUSU9OQVJZKSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBtX3BSb290RGljdCA9IHBNYWluRGljdC0+R2V0RGljdChGWF9CU1RSQygiUm9vdCIpKTsNCi0gICAgICAgICAgICBwTWFpbkRpY3QtPlJlbGVhc2UoKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1GWF9CT09MIENGREZfRG9jdW1lbnQ6OldyaXRlQnVmKENGWF9CeXRlVGV4dEJ1ZiYgYnVmKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fcFJvb3REaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBidWYgPDwgRlhfQlNUUkMoIiVGREYtMS4yXHJcbiIpOw0KLSAgICBGWF9QT1NJVElPTiBwb3MgPSBtX0luZGlyZWN0T2Jqcy5HZXRTdGFydFBvc2l0aW9uKCk7DQotICAgIHdoaWxlKHBvcykgew0KLSAgICAgICAgc2l6ZV90IG9iam51bTsNCi0gICAgICAgIENQREZfT2JqZWN0KiBwT2JqOw0KLSAgICAgICAgbV9JbmRpcmVjdE9ianMuR2V0TmV4dEFzc29jKHBvcywgKEZYX0xQVk9JRCYpb2JqbnVtLCAoRlhfTFBWT0lEJilwT2JqKTsNCi0gICAgICAgIGJ1ZiA8PCAoRlhfRFdPUkQpb2JqbnVtIDw8IEZYX0JTVFJDKCIgMCBvYmpcclxuIikgPDwgcE9iaiA8PCBGWF9CU1RSQygiXHJcbmVuZG9ialxyXG5cclxuIik7DQotICAgIH0NCi0gICAgYnVmIDw8IEZYX0JTVFJDKCJ0cmFpbGVyXHJcbjw8L1Jvb3QgIikgPDwgbV9wUm9vdERpY3QtPkdldE9iak51bSgpIDw8IEZYX0JTVFJDKCIgMCBSPj5cclxuJSVFT0ZcclxuIik7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1DRlhfV2lkZVN0cmluZyBDRkRGX0RvY3VtZW50OjpHZXRXaW4zMlBhdGgoKSBjb25zdA0KLXsNCi0gICAgQ1BERl9PYmplY3QqIHBGaWxlU3BlYyA9IG1fcFJvb3REaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJGREYiKSktPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiRiIpKTsNCi0gICAgaWYgKHBGaWxlU3BlYyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsNCi0gICAgfQ0KLSAgICBpZiAocEZpbGVTcGVjLT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUklORykgew0KLSAgICAgICAgcmV0dXJuIEZQREZfRmlsZVNwZWNfR2V0V2luMzJQYXRoKG1fcFJvb3REaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJGREYiKSkpOw0KLSAgICB9DQotICAgIHJldHVybiBGUERGX0ZpbGVTcGVjX0dldFdpbjMyUGF0aChwRmlsZVNwZWMpOw0KLX0NCi1GWF9CT09MIENGREZfRG9jdW1lbnQ6OldyaXRlRmlsZShGWF9MUENTVFIgZmlsZV9wYXRoKSBjb25zdA0KLXsNCi0gICAgSUZYX0ZpbGVXcml0ZSAqcEZpbGUgPSBGWF9DcmVhdGVGaWxlV3JpdGUoZmlsZV9wYXRoKTsNCi0gICAgaWYgKCFwRmlsZSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYX0JPT0wgYlJldCA9IFdyaXRlRmlsZShwRmlsZSk7DQotICAgIHBGaWxlLT5SZWxlYXNlKCk7DQotICAgIHJldHVybiBiUmV0Ow0KLX0NCi1GWF9CT09MIENGREZfRG9jdW1lbnQ6OldyaXRlRmlsZShGWF9MUENXU1RSIGZpbGVfcGF0aCkgY29uc3QNCi17DQotICAgIElGWF9GaWxlV3JpdGUgKnBGaWxlID0gRlhfQ3JlYXRlRmlsZVdyaXRlKGZpbGVfcGF0aCk7DQotICAgIGlmICghcEZpbGUpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWF9CT09MIGJSZXQgPSBXcml0ZUZpbGUocEZpbGUpOw0KLSAgICBwRmlsZS0+UmVsZWFzZSgpOw0KLSAgICByZXR1cm4gYlJldDsNCi19DQotRlhfQk9PTCBDRkRGX0RvY3VtZW50OjpXcml0ZUZpbGUoSUZYX0ZpbGVXcml0ZSAqcEZpbGUpIGNvbnN0DQotew0KLSAgICBDRlhfQnl0ZVRleHRCdWYgYnVmOw0KLSAgICBXcml0ZUJ1ZihidWYpOw0KLSAgICBGWF9CT09MIGJSZXQgPSBwRmlsZS0+V3JpdGVCbG9jayhidWYuR2V0QnVmZmVyKCksIGJ1Zi5HZXRTaXplKCkpOw0KLSAgICBpZiAoYlJldCkgew0KLSAgICAgICAgcEZpbGUtPkZsdXNoKCk7DQotICAgIH0NCi0gICAgcmV0dXJuIGJSZXQ7DQotfQ0KLXN0YXRpYyBDRlhfV2lkZVN0cmluZyBDaGFuZ2VTbGFzaChGWF9MUENXU1RSIHN0cikNCi17DQotICAgIENGWF9XaWRlU3RyaW5nIHJlc3VsdDsNCi0gICAgd2hpbGUgKCpzdHIpIHsNCi0gICAgICAgIGlmICgqc3RyID09ICdcXCcpIHsNCi0gICAgICAgICAgICByZXN1bHQgKz0gJy8nOw0KLSAgICAgICAgfSBlbHNlIGlmICgqc3RyID09ICcvJykgew0KLSAgICAgICAgICAgIHJlc3VsdCArPSAnXFwnOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICByZXN1bHQgKz0gKnN0cjsNCi0gICAgICAgIH0NCi0gICAgICAgIHN0ciArKzsNCi0gICAgfQ0KLSAgICByZXR1cm4gcmVzdWx0Ow0KLX0NCi12b2lkIEZQREZfRmlsZVNwZWNfU2V0V2luMzJQYXRoKENQREZfT2JqZWN0KiBwRmlsZVNwZWMsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBmaWxlcGF0aCkNCi17DQotICAgIENGWF9XaWRlU3RyaW5nIHJlc3VsdDsNCi0gICAgaWYgKGZpbGVwYXRoLkdldExlbmd0aCgpID4gMSAmJiBmaWxlcGF0aFsxXSA9PSAnOicpIHsNCi0gICAgICAgIHJlc3VsdCA9IEwiLyI7DQotICAgICAgICByZXN1bHQgKz0gZmlsZXBhdGhbMF07DQotICAgICAgICBpZiAoZmlsZXBhdGhbMl0gIT0gJ1xcJykgew0KLSAgICAgICAgICAgIHJlc3VsdCArPSAnLyc7DQotICAgICAgICB9DQotICAgICAgICByZXN1bHQgKz0gQ2hhbmdlU2xhc2goKEZYX0xQQ1dTVFIpZmlsZXBhdGggKyAyKTsNCi0gICAgfSBlbHNlIGlmIChmaWxlcGF0aC5HZXRMZW5ndGgoKSA+IDEgJiYgZmlsZXBhdGhbMF0gPT0gJ1xcJyAmJiBmaWxlcGF0aFsxXSA9PSAnXFwnKSB7DQotICAgICAgICByZXN1bHQgPSBDaGFuZ2VTbGFzaCgoRlhfTFBDV1NUUilmaWxlcGF0aCArIDEpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmVzdWx0ID0gQ2hhbmdlU2xhc2goZmlsZXBhdGgpOw0KLSAgICB9DQotICAgIGlmIChwRmlsZVNwZWMtPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSSU5HKSB7DQotICAgICAgICBwRmlsZVNwZWMtPlNldFN0cmluZyhDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUocmVzdWx0KSk7DQotICAgIH0gZWxzZSBpZiAocEZpbGVTcGVjLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpIHsNCi0gICAgICAgICgoQ1BERl9EaWN0aW9uYXJ5KilwRmlsZVNwZWMpLT5TZXRBdFN0cmluZyhGWF9CU1RSQygiRiIpLCBDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUocmVzdWx0KSk7DQotICAgICAgICAoKENQREZfRGljdGlvbmFyeSopcEZpbGVTcGVjKS0+U2V0QXRTdHJpbmcoRlhfQlNUUkMoIlVGIiksIFBERl9FbmNvZGVUZXh0KHJlc3VsdCkpOw0KLSAgICAgICAgKChDUERGX0RpY3Rpb25hcnkqKXBGaWxlU3BlYyktPlJlbW92ZUF0KEZYX0JTVFJDKCJGUyIpKTsNCi0gICAgfQ0KLX0NCi1DRlhfV2lkZVN0cmluZwlGUERGX0ZpbGVTcGVjX0dldFdpbjMyUGF0aChjb25zdCBDUERGX09iamVjdCogcEZpbGVTcGVjKQ0KLXsNCi0gICAgQ0ZYX1dpZGVTdHJpbmcgd3NGaWxlTmFtZTsNCi0gICAgaWYgKHBGaWxlU3BlYy0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gKENQREZfRGljdGlvbmFyeSopcEZpbGVTcGVjOw0KLSAgICAgICAgd3NGaWxlTmFtZSA9IHBEaWN0LT5HZXRVbmljb2RlVGV4dChGWF9CU1RSQygiVUYiKSk7DQotICAgICAgICBpZiAod3NGaWxlTmFtZS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICB3c0ZpbGVOYW1lID0gQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChwRGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJGIikpKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwRGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJGUyIpKSA9PSBGWF9CU1RSQygiVVJMIikpIHsNCi0gICAgICAgICAgICByZXR1cm4gd3NGaWxlTmFtZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICh3c0ZpbGVOYW1lLklzRW1wdHkoKSAmJiBwRGljdC0+S2V5RXhpc3QoRlhfQlNUUkMoIkRPUyIpKSkgew0KLSAgICAgICAgICAgIHdzRmlsZU5hbWUgPSBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKHBEaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIkRPUyIpKSk7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICB3c0ZpbGVOYW1lID0gQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChwRmlsZVNwZWMtPkdldFN0cmluZygpKTsNCi0gICAgfQ0KLSAgICBpZiAod3NGaWxlTmFtZVswXSAhPSAnLycpIHsNCi0gICAgICAgIHJldHVybiBDaGFuZ2VTbGFzaCh3c0ZpbGVOYW1lKTsNCi0gICAgfQ0KLSAgICBpZiAod3NGaWxlTmFtZVsyXSA9PSAnLycpIHsNCi0gICAgICAgIENGWF9XaWRlU3RyaW5nIHJlc3VsdDsNCi0gICAgICAgIHJlc3VsdCArPSB3c0ZpbGVOYW1lWzFdOw0KLSAgICAgICAgcmVzdWx0ICs9ICc6JzsNCi0gICAgICAgIHJlc3VsdCArPSBDaGFuZ2VTbGFzaCgoKEZYX0xQQ1dTVFIpd3NGaWxlTmFtZSkgKyAyKTsNCi0gICAgICAgIHJldHVybiByZXN1bHQ7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBDRlhfV2lkZVN0cmluZyByZXN1bHQ7DQotICAgICAgICByZXN1bHQgKz0gJ1xcJzsNCi0gICAgICAgIHJlc3VsdCArPSBDaGFuZ2VTbGFzaCh3c0ZpbGVOYW1lKTsNCi0gICAgICAgIHJldHVybiByZXN1bHQ7DQotICAgIH0NCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3NlcmlhbC5oIgorQ0ZERl9Eb2N1bWVudDo6Q0ZERl9Eb2N1bWVudCgpIDogQ1BERl9JbmRpcmVjdE9iamVjdHMoTlVMTCkKK3sKKyAgICBtX3BSb290RGljdCA9IE5VTEw7CisgICAgbV9wRmlsZSA9IE5VTEw7CisgICAgbV9iT3duRmlsZSA9IEZBTFNFOworfQorQ0ZERl9Eb2N1bWVudDo6fkNGREZfRG9jdW1lbnQoKQoreworICAgIGlmIChtX2JPd25GaWxlICYmIG1fcEZpbGUpIHsKKyAgICAgICAgbV9wRmlsZS0+UmVsZWFzZSgpOworICAgIH0KK30KK0NGREZfRG9jdW1lbnQqIENGREZfRG9jdW1lbnQ6OkNyZWF0ZU5ld0RvYygpCit7CisgICAgQ0ZERl9Eb2N1bWVudCogcERvYyA9IEZYX05FVyBDRkRGX0RvY3VtZW50OworICAgIHBEb2MtPm1fcFJvb3REaWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsKKyAgICBwRG9jLT5BZGRJbmRpcmVjdE9iamVjdChwRG9jLT5tX3BSb290RGljdCk7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRkRGRGljdCA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7CisgICAgcERvYy0+bV9wUm9vdERpY3QtPlNldEF0KEZYX0JTVFJDKCJGREYiKSwgcEZERkRpY3QpOworICAgIHJldHVybiBwRG9jOworfQorQ0ZERl9Eb2N1bWVudCogQ0ZERl9Eb2N1bWVudDo6UGFyc2VGaWxlKEZYX0xQQ1NUUiBmaWxlX3BhdGgpCit7CisgICAgcmV0dXJuIENGREZfRG9jdW1lbnQ6OlBhcnNlRmlsZShGWF9DcmVhdGVGaWxlUmVhZChmaWxlX3BhdGgpLCBUUlVFKTsKK30KK0NGREZfRG9jdW1lbnQqIENGREZfRG9jdW1lbnQ6OlBhcnNlRmlsZShGWF9MUENXU1RSIGZpbGVfcGF0aCkKK3sKKyAgICByZXR1cm4gQ0ZERl9Eb2N1bWVudDo6UGFyc2VGaWxlKEZYX0NyZWF0ZUZpbGVSZWFkKGZpbGVfcGF0aCksIFRSVUUpOworfQorQ0ZERl9Eb2N1bWVudCogQ0ZERl9Eb2N1bWVudDo6UGFyc2VGaWxlKElGWF9GaWxlUmVhZCAqcEZpbGUsIEZYX0JPT0wgYk93bkZpbGUpCit7CisgICAgaWYgKCFwRmlsZSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0ZERl9Eb2N1bWVudCogcERvYyA9IEZYX05FVyBDRkRGX0RvY3VtZW50OworICAgIHBEb2MtPlBhcnNlU3RyZWFtKHBGaWxlLCBiT3duRmlsZSk7CisgICAgaWYgKHBEb2MtPm1fcFJvb3REaWN0ID09IE5VTEwpIHsKKyAgICAgICAgZGVsZXRlIHBEb2M7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcERvYzsKK30KK0NGREZfRG9jdW1lbnQqIENGREZfRG9jdW1lbnQ6OlBhcnNlTWVtb3J5KEZYX0xQQ0JZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUpCit7CisgICAgcmV0dXJuIENGREZfRG9jdW1lbnQ6OlBhcnNlRmlsZShGWF9DcmVhdGVNZW1vcnlTdHJlYW0oKEZYX0xQQllURSlwRGF0YSwgc2l6ZSksIFRSVUUpOworfQordm9pZCBDRkRGX0RvY3VtZW50OjpQYXJzZVN0cmVhbShJRlhfRmlsZVJlYWQgKnBGaWxlLCBGWF9CT09MIGJPd25GaWxlKQoreworICAgIG1fcEZpbGUgPSBwRmlsZTsKKyAgICBtX2JPd25GaWxlID0gYk93bkZpbGU7CisgICAgQ1BERl9TeW50YXhQYXJzZXIgcGFyc2VyOworICAgIHBhcnNlci5Jbml0UGFyc2VyKG1fcEZpbGUsIDApOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIEZYX0JPT0wgYk51bWJlcjsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgd29yZCA9IHBhcnNlci5HZXROZXh0V29yZChiTnVtYmVyKTsKKyAgICAgICAgaWYgKGJOdW1iZXIpIHsKKyAgICAgICAgICAgIEZYX0RXT1JEIG9iam51bSA9IEZYU1lTX2F0b2kod29yZCk7CisgICAgICAgICAgICB3b3JkID0gcGFyc2VyLkdldE5leHRXb3JkKGJOdW1iZXIpOworICAgICAgICAgICAgaWYgKCFiTnVtYmVyKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3b3JkID0gcGFyc2VyLkdldE5leHRXb3JkKGJOdW1iZXIpOworICAgICAgICAgICAgaWYgKHdvcmQgIT0gRlhfQlNUUkMoIm9iaiIpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDUERGX09iamVjdCogcE9iaiA9IHBhcnNlci5HZXRPYmplY3QodGhpcywgb2JqbnVtLCAwLCBGQUxTRSk7CisgICAgICAgICAgICBpZiAocE9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBJbnNlcnRJbmRpcmVjdE9iamVjdChvYmpudW0sIHBPYmopOworICAgICAgICAgICAgd29yZCA9IHBhcnNlci5HZXROZXh0V29yZChiTnVtYmVyKTsKKyAgICAgICAgICAgIGlmICh3b3JkICE9IEZYX0JTVFJDKCJlbmRvYmoiKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHdvcmQgIT0gRlhfQlNUUkMoInRyYWlsZXIiKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwTWFpbkRpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KilwYXJzZXIuR2V0T2JqZWN0KHRoaXMsIDAsIDAsIDApOworICAgICAgICAgICAgaWYgKHBNYWluRGljdCA9PSBOVUxMIHx8IHBNYWluRGljdC0+R2V0VHlwZSgpICE9IFBERk9CSl9ESUNUSU9OQVJZKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3BSb290RGljdCA9IHBNYWluRGljdC0+R2V0RGljdChGWF9CU1RSQygiUm9vdCIpKTsKKyAgICAgICAgICAgIHBNYWluRGljdC0+UmVsZWFzZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CitGWF9CT09MIENGREZfRG9jdW1lbnQ6OldyaXRlQnVmKENGWF9CeXRlVGV4dEJ1ZiYgYnVmKSBjb25zdAoreworICAgIGlmIChtX3BSb290RGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgYnVmIDw8IEZYX0JTVFJDKCIlRkRGLTEuMlxyXG4iKTsKKyAgICBGWF9QT1NJVElPTiBwb3MgPSBtX0luZGlyZWN0T2Jqcy5HZXRTdGFydFBvc2l0aW9uKCk7CisgICAgd2hpbGUocG9zKSB7CisgICAgICAgIHNpemVfdCBvYmpudW07CisgICAgICAgIENQREZfT2JqZWN0KiBwT2JqOworICAgICAgICBtX0luZGlyZWN0T2Jqcy5HZXROZXh0QXNzb2MocG9zLCAoRlhfTFBWT0lEJilvYmpudW0sIChGWF9MUFZPSUQmKXBPYmopOworICAgICAgICBidWYgPDwgKEZYX0RXT1JEKW9iam51bSA8PCBGWF9CU1RSQygiIDAgb2JqXHJcbiIpIDw8IHBPYmogPDwgRlhfQlNUUkMoIlxyXG5lbmRvYmpcclxuXHJcbiIpOworICAgIH0KKyAgICBidWYgPDwgRlhfQlNUUkMoInRyYWlsZXJcclxuPDwvUm9vdCAiKSA8PCBtX3BSb290RGljdC0+R2V0T2JqTnVtKCkgPDwgRlhfQlNUUkMoIiAwIFI+PlxyXG4lJUVPRlxyXG4iKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0NGWF9XaWRlU3RyaW5nIENGREZfRG9jdW1lbnQ6OkdldFdpbjMyUGF0aCgpIGNvbnN0Cit7CisgICAgQ1BERl9PYmplY3QqIHBGaWxlU3BlYyA9IG1fcFJvb3REaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJGREYiKSktPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiRiIpKTsKKyAgICBpZiAocEZpbGVTcGVjID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7CisgICAgfQorICAgIGlmIChwRmlsZVNwZWMtPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSSU5HKSB7CisgICAgICAgIHJldHVybiBGUERGX0ZpbGVTcGVjX0dldFdpbjMyUGF0aChtX3BSb290RGljdC0+R2V0RGljdChGWF9CU1RSQygiRkRGIikpKTsKKyAgICB9CisgICAgcmV0dXJuIEZQREZfRmlsZVNwZWNfR2V0V2luMzJQYXRoKHBGaWxlU3BlYyk7Cit9CitGWF9CT09MIENGREZfRG9jdW1lbnQ6OldyaXRlRmlsZShGWF9MUENTVFIgZmlsZV9wYXRoKSBjb25zdAoreworICAgIElGWF9GaWxlV3JpdGUgKnBGaWxlID0gRlhfQ3JlYXRlRmlsZVdyaXRlKGZpbGVfcGF0aCk7CisgICAgaWYgKCFwRmlsZSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEZYX0JPT0wgYlJldCA9IFdyaXRlRmlsZShwRmlsZSk7CisgICAgcEZpbGUtPlJlbGVhc2UoKTsKKyAgICByZXR1cm4gYlJldDsKK30KK0ZYX0JPT0wgQ0ZERl9Eb2N1bWVudDo6V3JpdGVGaWxlKEZYX0xQQ1dTVFIgZmlsZV9wYXRoKSBjb25zdAoreworICAgIElGWF9GaWxlV3JpdGUgKnBGaWxlID0gRlhfQ3JlYXRlRmlsZVdyaXRlKGZpbGVfcGF0aCk7CisgICAgaWYgKCFwRmlsZSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEZYX0JPT0wgYlJldCA9IFdyaXRlRmlsZShwRmlsZSk7CisgICAgcEZpbGUtPlJlbGVhc2UoKTsKKyAgICByZXR1cm4gYlJldDsKK30KK0ZYX0JPT0wgQ0ZERl9Eb2N1bWVudDo6V3JpdGVGaWxlKElGWF9GaWxlV3JpdGUgKnBGaWxlKSBjb25zdAoreworICAgIENGWF9CeXRlVGV4dEJ1ZiBidWY7CisgICAgV3JpdGVCdWYoYnVmKTsKKyAgICBGWF9CT09MIGJSZXQgPSBwRmlsZS0+V3JpdGVCbG9jayhidWYuR2V0QnVmZmVyKCksIGJ1Zi5HZXRTaXplKCkpOworICAgIGlmIChiUmV0KSB7CisgICAgICAgIHBGaWxlLT5GbHVzaCgpOworICAgIH0KKyAgICByZXR1cm4gYlJldDsKK30KK3N0YXRpYyBDRlhfV2lkZVN0cmluZyBDaGFuZ2VTbGFzaChGWF9MUENXU1RSIHN0cikKK3sKKyAgICBDRlhfV2lkZVN0cmluZyByZXN1bHQ7CisgICAgd2hpbGUgKCpzdHIpIHsKKyAgICAgICAgaWYgKCpzdHIgPT0gJ1xcJykgeworICAgICAgICAgICAgcmVzdWx0ICs9ICcvJzsKKyAgICAgICAgfSBlbHNlIGlmICgqc3RyID09ICcvJykgeworICAgICAgICAgICAgcmVzdWx0ICs9ICdcXCc7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXN1bHQgKz0gKnN0cjsKKyAgICAgICAgfQorICAgICAgICBzdHIgKys7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9Cit2b2lkIEZQREZfRmlsZVNwZWNfU2V0V2luMzJQYXRoKENQREZfT2JqZWN0KiBwRmlsZVNwZWMsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBmaWxlcGF0aCkKK3sKKyAgICBDRlhfV2lkZVN0cmluZyByZXN1bHQ7CisgICAgaWYgKGZpbGVwYXRoLkdldExlbmd0aCgpID4gMSAmJiBmaWxlcGF0aFsxXSA9PSAnOicpIHsKKyAgICAgICAgcmVzdWx0ID0gTCIvIjsKKyAgICAgICAgcmVzdWx0ICs9IGZpbGVwYXRoWzBdOworICAgICAgICBpZiAoZmlsZXBhdGhbMl0gIT0gJ1xcJykgeworICAgICAgICAgICAgcmVzdWx0ICs9ICcvJzsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQgKz0gQ2hhbmdlU2xhc2goKEZYX0xQQ1dTVFIpZmlsZXBhdGggKyAyKTsKKyAgICB9IGVsc2UgaWYgKGZpbGVwYXRoLkdldExlbmd0aCgpID4gMSAmJiBmaWxlcGF0aFswXSA9PSAnXFwnICYmIGZpbGVwYXRoWzFdID09ICdcXCcpIHsKKyAgICAgICAgcmVzdWx0ID0gQ2hhbmdlU2xhc2goKEZYX0xQQ1dTVFIpZmlsZXBhdGggKyAxKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXN1bHQgPSBDaGFuZ2VTbGFzaChmaWxlcGF0aCk7CisgICAgfQorICAgIGlmIChwRmlsZVNwZWMtPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSSU5HKSB7CisgICAgICAgIHBGaWxlU3BlYy0+U2V0U3RyaW5nKENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShyZXN1bHQpKTsKKyAgICB9IGVsc2UgaWYgKHBGaWxlU3BlYy0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKSB7CisgICAgICAgICgoQ1BERl9EaWN0aW9uYXJ5KilwRmlsZVNwZWMpLT5TZXRBdFN0cmluZyhGWF9CU1RSQygiRiIpLCBDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUocmVzdWx0KSk7CisgICAgICAgICgoQ1BERl9EaWN0aW9uYXJ5KilwRmlsZVNwZWMpLT5TZXRBdFN0cmluZyhGWF9CU1RSQygiVUYiKSwgUERGX0VuY29kZVRleHQocmVzdWx0KSk7CisgICAgICAgICgoQ1BERl9EaWN0aW9uYXJ5KilwRmlsZVNwZWMpLT5SZW1vdmVBdChGWF9CU1RSQygiRlMiKSk7CisgICAgfQorfQorQ0ZYX1dpZGVTdHJpbmcJRlBERl9GaWxlU3BlY19HZXRXaW4zMlBhdGgoY29uc3QgQ1BERl9PYmplY3QqIHBGaWxlU3BlYykKK3sKKyAgICBDRlhfV2lkZVN0cmluZyB3c0ZpbGVOYW1lOworICAgIGlmIChwRmlsZVNwZWMtPkdldFR5cGUoKSA9PSBQREZPQkpfRElDVElPTkFSWSkgeworICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gKENQREZfRGljdGlvbmFyeSopcEZpbGVTcGVjOworICAgICAgICB3c0ZpbGVOYW1lID0gcERpY3QtPkdldFVuaWNvZGVUZXh0KEZYX0JTVFJDKCJVRiIpKTsKKyAgICAgICAgaWYgKHdzRmlsZU5hbWUuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICB3c0ZpbGVOYW1lID0gQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChwRGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJGIikpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiRlMiKSkgPT0gRlhfQlNUUkMoIlVSTCIpKSB7CisgICAgICAgICAgICByZXR1cm4gd3NGaWxlTmFtZTsKKyAgICAgICAgfQorICAgICAgICBpZiAod3NGaWxlTmFtZS5Jc0VtcHR5KCkgJiYgcERpY3QtPktleUV4aXN0KEZYX0JTVFJDKCJET1MiKSkpIHsKKyAgICAgICAgICAgIHdzRmlsZU5hbWUgPSBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKHBEaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIkRPUyIpKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICB3c0ZpbGVOYW1lID0gQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChwRmlsZVNwZWMtPkdldFN0cmluZygpKTsKKyAgICB9CisgICAgaWYgKHdzRmlsZU5hbWVbMF0gIT0gJy8nKSB7CisgICAgICAgIHJldHVybiBDaGFuZ2VTbGFzaCh3c0ZpbGVOYW1lKTsKKyAgICB9CisgICAgaWYgKHdzRmlsZU5hbWVbMl0gPT0gJy8nKSB7CisgICAgICAgIENGWF9XaWRlU3RyaW5nIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0ICs9IHdzRmlsZU5hbWVbMV07CisgICAgICAgIHJlc3VsdCArPSAnOic7CisgICAgICAgIHJlc3VsdCArPSBDaGFuZ2VTbGFzaCgoKEZYX0xQQ1dTVFIpd3NGaWxlTmFtZSkgKyAyKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9IGVsc2UgeworICAgICAgICBDRlhfV2lkZVN0cmluZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdCArPSAnXFwnOworICAgICAgICByZXN1bHQgKz0gQ2hhbmdlU2xhc2god3NGaWxlTmFtZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhcnNlci9mcGRmX3BhcnNlcl9maWx0ZXJzLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYXJzZXIvZnBkZl9wYXJzZXJfZmlsdGVycy5jcHAKaW5kZXggNzZhNzlmNi4uMWU0ZTE1NyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhcnNlci9mcGRmX3BhcnNlcl9maWx0ZXJzLmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFyc2VyL2ZwZGZfcGFyc2VyX2ZpbHRlcnMuY3BwCkBAIC0xLDkwOSArMSw5MDkgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9meF96bGliLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhcnNlci5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfbW9kdWxlLmgiDQotI2luY2x1ZGUgImZpbHRlcnNfaW50LmgiDQotQ0ZYX0RhdGFGaWx0ZXI6OkNGWF9EYXRhRmlsdGVyKCkNCi17DQotICAgIG1fYkVPRiA9IEZBTFNFOw0KLSAgICBtX3BEZXN0RmlsdGVyID0gTlVMTDsNCi0gICAgbV9TcmNQb3MgPSAwOw0KLX0NCi1DRlhfRGF0YUZpbHRlcjo6fkNGWF9EYXRhRmlsdGVyKCkNCi17DQotICAgIGlmIChtX3BEZXN0RmlsdGVyKSB7DQotICAgICAgICBkZWxldGUgbV9wRGVzdEZpbHRlcjsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9EYXRhRmlsdGVyOjpTZXREZXN0RmlsdGVyKENGWF9EYXRhRmlsdGVyKiBwRmlsdGVyKQ0KLXsNCi0gICAgaWYgKG1fcERlc3RGaWx0ZXIpIHsNCi0gICAgICAgIG1fcERlc3RGaWx0ZXItPlNldERlc3RGaWx0ZXIocEZpbHRlcik7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX3BEZXN0RmlsdGVyID0gcEZpbHRlcjsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9EYXRhRmlsdGVyOjpGaWx0ZXJJbihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1ZikNCi17DQotICAgIGlmIChtX2JFT0YpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX1NyY1BvcyArPSBzcmNfc2l6ZTsNCi0gICAgaWYgKG1fcERlc3RGaWx0ZXIpIHsNCi0gICAgICAgIENGWF9CaW5hcnlCdWYgdGVtcF9idWY7DQotICAgICAgICB0ZW1wX2J1Zi5Fc3RpbWF0ZVNpemUoRlBERl9GSUxURVJfQlVGRkVSX1NJWkUsIEZQREZfRklMVEVSX0JVRkZFUl9TSVpFKTsNCi0gICAgICAgIHZfRmlsdGVySW4oc3JjX2J1Ziwgc3JjX3NpemUsIHRlbXBfYnVmKTsNCi0gICAgICAgIG1fcERlc3RGaWx0ZXItPkZpbHRlckluKHRlbXBfYnVmLkdldEJ1ZmZlcigpLCB0ZW1wX2J1Zi5HZXRTaXplKCksIGRlc3RfYnVmKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHZfRmlsdGVySW4oc3JjX2J1Ziwgc3JjX3NpemUsIGRlc3RfYnVmKTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9EYXRhRmlsdGVyOjpGaWx0ZXJGaW5pc2goQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpDQotew0KLSAgICBpZiAobV9wRGVzdEZpbHRlcikgew0KLSAgICAgICAgQ0ZYX0JpbmFyeUJ1ZiB0ZW1wX2J1ZjsNCi0gICAgICAgIHZfRmlsdGVyRmluaXNoKHRlbXBfYnVmKTsNCi0gICAgICAgIGlmICh0ZW1wX2J1Zi5HZXRTaXplKCkpIHsNCi0gICAgICAgICAgICBtX3BEZXN0RmlsdGVyLT5GaWx0ZXJJbih0ZW1wX2J1Zi5HZXRCdWZmZXIoKSwgdGVtcF9idWYuR2V0U2l6ZSgpLCBkZXN0X2J1Zik7DQotICAgICAgICB9DQotICAgICAgICBtX3BEZXN0RmlsdGVyLT5GaWx0ZXJGaW5pc2goZGVzdF9idWYpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgdl9GaWx0ZXJGaW5pc2goZGVzdF9idWYpOw0KLSAgICB9DQotICAgIG1fYkVPRiA9IFRSVUU7DQotfQ0KLXZvaWQgQ0ZYX0RhdGFGaWx0ZXI6OlJlcG9ydEVPRihGWF9EV09SRCBsZWZ0X2lucHV0KQ0KLXsNCi0gICAgaWYgKG1fYkVPRikgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fYkVPRiA9IFRSVUU7DQotICAgIG1fU3JjUG9zIC09IGxlZnRfaW5wdXQ7DQotfQ0KLUNGWF9EYXRhRmlsdGVyKiBGUERGX0NyZWF0ZUZpbHRlcihGWF9CU1RSIG5hbWUsIGNvbnN0IENQREZfRGljdGlvbmFyeSogcFBhcmFtLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpDQotew0KLSAgICBGWF9EV09SRCBpZCA9IG5hbWUuR2V0SUQoKTsNCi0gICAgc3dpdGNoIChpZCkgew0KLSAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0YnLCAnbCcsICdhJywgJ3QnKToNCi0gICAgICAgIGNhc2UgRlhCU1RSX0lEKCdGJywgJ2wnLCAwLCAwKToNCi0gICAgICAgIGNhc2UgRlhCU1RSX0lEKCdMJywgJ1onLCAnVycsICdEJyk6DQotICAgICAgICBjYXNlIEZYQlNUUl9JRCgnTCcsICdaJywgJ1cnLCAwKTogew0KLSAgICAgICAgICAgICAgICBDRlhfRGF0YUZpbHRlciogcEZpbHRlcjsNCi0gICAgICAgICAgICAgICAgaWYgKGlkID09IEZYQlNUUl9JRCgnTCcsICdaJywgJ1cnLCAnRCcpIHx8IGlkID09IEZYQlNUUl9JRCgnTCcsICdaJywgJ1cnLCAwKSkgew0KLSAgICAgICAgICAgICAgICAgICAgcEZpbHRlciA9IEZYX05FVyBDUERGX0x6d0ZpbHRlcihwUGFyYW0tPkdldEludGVnZXIoIkVhcmx5Q2hhbmdlIiwgMSkpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgcEZpbHRlciA9IEZYX05FVyBDUERGX0ZsYXRlRmlsdGVyOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChwUGFyYW0tPkdldEludGVnZXIoIlByZWRpY3RvciIsIDEpID4gMSkgew0KLSAgICAgICAgICAgICAgICAgICAgQ0ZYX0RhdGFGaWx0ZXIqIHBQcmVkaWN0b3IgPSBGWF9ORVcgQ1BERl9QcmVkaWN0b3JGaWx0ZXIocFBhcmFtLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJQcmVkaWN0b3IiKSwgMSksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBQYXJhbS0+R2V0SW50ZWdlcihGWF9CU1RSQygiQ29sb3JzIiksIDEpLCBwUGFyYW0tPkdldEludGVnZXIoRlhfQlNUUkMoIkJpdHNQZXJDb21wb25lbnQiKSwgOCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBQYXJhbS0+R2V0SW50ZWdlcihGWF9CU1RSQygiQ29sdW1ucyIpLCAxKSk7DQotICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5TZXREZXN0RmlsdGVyKHBQcmVkaWN0b3IpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHJldHVybiBwRmlsdGVyOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgRlhCU1RSX0lEKCdBJywgJ1MnLCAnQycsICdJJyk6DQotICAgICAgICAgICAgaWYgKG5hbWUgPT0gIkFTQ0lJSGV4RGVjb2RlIikgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfQXNjaWlIZXhGaWx0ZXI7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybiBGWF9ORVcgQ1BERl9Bc2NpaTg1RmlsdGVyOw0KLSAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0EnLCAnSCcsICd4JywgMCk6DQotICAgICAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX0FzY2lpSGV4RmlsdGVyOw0KLSAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0EnLCAnOCcsICc1JywgMCk6DQotICAgICAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX0FzY2lpODVGaWx0ZXI7DQotICAgICAgICBjYXNlIEZYQlNUUl9JRCgnUicsICd1JywgJ24nLCAnTCcpOg0KLSAgICAgICAgICAgIHJldHVybiBGWF9ORVcgQ1BERl9SdW5MZW5GaWx0ZXI7DQotICAgICAgICBjYXNlIEZYQlNUUl9JRCgnQycsICdDJywgJ0knLCAnVCcpOiB7DQotICAgICAgICAgICAgICAgIGludCBFbmNvZGluZyA9IDA7DQotICAgICAgICAgICAgICAgIGludCBiRW5kT2ZMaW5lID0gRkFMU0U7DQotICAgICAgICAgICAgICAgIGludCBiQnl0ZUFsaWduID0gRkFMU0U7DQotICAgICAgICAgICAgICAgIGludCBiQmxhY2sgPSBGQUxTRTsNCi0gICAgICAgICAgICAgICAgaW50IG5Sb3dzID0gMDsNCi0gICAgICAgICAgICAgICAgaW50IG5Db2x1bW5zID0gMTcyODsNCi0gICAgICAgICAgICAgICAgaWYgKHBQYXJhbSkgew0KLSAgICAgICAgICAgICAgICAgICAgRW5jb2RpbmcgPSBwUGFyYW0tPkdldEludGVnZXIoRlhfQlNUUkMoIksiKSk7DQotICAgICAgICAgICAgICAgICAgICBiRW5kT2ZMaW5lID0gcFBhcmFtLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJFbmRPZkxpbmUiKSk7DQotICAgICAgICAgICAgICAgICAgICBiQnl0ZUFsaWduID0gcFBhcmFtLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJFbmNvZGVkQnl0ZUFsaWduIikpOw0KLSAgICAgICAgICAgICAgICAgICAgYkJsYWNrID0gcFBhcmFtLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJCbGFja0lzMSIpKTsNCi0gICAgICAgICAgICAgICAgICAgIG5Db2x1bW5zID0gcFBhcmFtLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJDb2x1bW5zIiksIDE3MjgpOw0KLSAgICAgICAgICAgICAgICAgICAgblJvd3MgPSBwUGFyYW0tPkdldEludGVnZXIoRlhfQlNUUkMoIlJvd3MiKSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKG5Db2x1bW5zID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIG5Db2x1bW5zID0gd2lkdGg7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKG5Sb3dzID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIG5Sb3dzID0gaGVpZ2h0Ow0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIENQREZfRmF4RmlsdGVyKiBwRmlsdGVyID0gRlhfTkVXIENQREZfRmF4RmlsdGVyKCk7DQotICAgICAgICAgICAgICAgIHBGaWx0ZXItPkluaXRpYWxpemUoRW5jb2RpbmcsIGJFbmRPZkxpbmUsIGJCeXRlQWxpZ24sIGJCbGFjaywgblJvd3MsIG5Db2x1bW5zKTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBGaWx0ZXI7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0QnLCAnQycsICdUJywgJ0QnKToNCi0gICAgICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfSnBlZ0ZpbHRlcjsNCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi19DQotQ0ZYX0RhdGFGaWx0ZXIqIF9GUERGX0NyZWF0ZUZpbHRlckZyb21EaWN0KENQREZfRGljdGlvbmFyeSogcERpY3QpDQotew0KLSAgICBDUERGX09iamVjdCogcERlY29kZXIgPSBwRGljdC0+R2V0RWxlbWVudFZhbHVlKCJGaWx0ZXIiKTsNCi0gICAgaWYgKHBEZWNvZGVyID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENGWF9EYXRhRmlsdGVyKiBwRmlyc3RGaWx0ZXIgPSBOVUxMOw0KLSAgICBpbnQgd2lkdGggPSBwRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiV2lkdGgiKSksIGhlaWdodCA9IHBEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJIZWlnaHQiKSk7DQotICAgIENQREZfT2JqZWN0KiBwUGFyYW1zID0gcERpY3QtPkdldEVsZW1lbnRWYWx1ZSgiRGVjb2RlUGFybXMiKTsNCi0gICAgaWYgKHBEZWNvZGVyLT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICBpZiAocFBhcmFtcyAmJiBwUGFyYW1zLT5HZXRUeXBlKCkgIT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICAgICAgcFBhcmFtcyA9IE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgKChDUERGX0FycmF5KilwRGVjb2RlciktPkdldENvdW50KCk7IGkgKyspIHsNCi0gICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBuYW1lID0gKChDUERGX0FycmF5KilwRGVjb2RlciktPkdldFN0cmluZyhpKTsNCi0gICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBQYXJhbSA9IE5VTEw7DQotICAgICAgICAgICAgaWYgKHBQYXJhbXMpIHsNCi0gICAgICAgICAgICAgICAgcFBhcmFtID0gKChDUERGX0FycmF5KilwUGFyYW1zKS0+R2V0RGljdChpKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgQ0ZYX0RhdGFGaWx0ZXIqIHBEZXN0RmlsdGVyID0gRlBERl9DcmVhdGVGaWx0ZXIobmFtZSwgcFBhcmFtLCB3aWR0aCwgaGVpZ2h0KTsNCi0gICAgICAgICAgICBpZiAocERlc3RGaWx0ZXIpIHsNCi0gICAgICAgICAgICAgICAgaWYgKHBGaXJzdEZpbHRlciA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICBwRmlyc3RGaWx0ZXIgPSBwRGVzdEZpbHRlcjsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIHBGaXJzdEZpbHRlci0+U2V0RGVzdEZpbHRlcihwRGVzdEZpbHRlcik7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZiAocFBhcmFtcyAmJiBwUGFyYW1zLT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIHsNCi0gICAgICAgICAgICBwUGFyYW1zID0gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIHBGaXJzdEZpbHRlciA9IEZQREZfQ3JlYXRlRmlsdGVyKHBEZWNvZGVyLT5HZXRTdHJpbmcoKSwgKENQREZfRGljdGlvbmFyeSopcFBhcmFtcywgd2lkdGgsIGhlaWdodCk7DQotICAgIH0NCi0gICAgcmV0dXJuIHBGaXJzdEZpbHRlcjsNCi19DQotQ1BERl9TdHJlYW1GaWx0ZXIqIENQREZfU3RyZWFtOjpHZXRTdHJlYW1GaWx0ZXIoRlhfQk9PTCBiUmF3KSBjb25zdA0KLXsNCi0gICAgQ0ZYX0RhdGFGaWx0ZXIqIHBGaXJzdEZpbHRlciA9IE5VTEw7DQotICAgIGlmIChtX3BDcnlwdG9IYW5kbGVyKSB7DQotICAgICAgICBwRmlyc3RGaWx0ZXIgPSBGWF9ORVcgQ1BERl9EZWNyeXB0RmlsdGVyKG1fcENyeXB0b0hhbmRsZXIsIG1fT2JqTnVtLCBtX0dlbk51bSk7DQotICAgIH0NCi0gICAgaWYgKCFiUmF3KSB7DQotICAgICAgICBDRlhfRGF0YUZpbHRlciogcEZpbHRlciA9IF9GUERGX0NyZWF0ZUZpbHRlckZyb21EaWN0KG1fcERpY3QpOw0KLSAgICAgICAgaWYgKHBGaWx0ZXIpIHsNCi0gICAgICAgICAgICBpZiAocEZpcnN0RmlsdGVyID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgcEZpcnN0RmlsdGVyID0gcEZpbHRlcjsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBwRmlyc3RGaWx0ZXItPlNldERlc3RGaWx0ZXIocEZpbHRlcik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIENQREZfU3RyZWFtRmlsdGVyKiBwU3RyZWFtRmlsdGVyID0gRlhfTkVXIENQREZfU3RyZWFtRmlsdGVyOw0KLSAgICBwU3RyZWFtRmlsdGVyLT5tX3BTdHJlYW0gPSB0aGlzOw0KLSAgICBwU3RyZWFtRmlsdGVyLT5tX3BGaWx0ZXIgPSBwRmlyc3RGaWx0ZXI7DQotICAgIHBTdHJlYW1GaWx0ZXItPm1fcEJ1ZmZlciA9IE5VTEw7DQotICAgIHBTdHJlYW1GaWx0ZXItPm1fU3JjT2Zmc2V0ID0gMDsNCi0gICAgcmV0dXJuIHBTdHJlYW1GaWx0ZXI7DQotfQ0KLUNQREZfU3RyZWFtRmlsdGVyOjp+Q1BERl9TdHJlYW1GaWx0ZXIoKQ0KLXsNCi0gICAgaWYgKG1fcEZpbHRlcikgew0KLSAgICAgICAgZGVsZXRlIG1fcEZpbHRlcjsNCi0gICAgfQ0KLSAgICBpZiAobV9wQnVmZmVyKSB7DQotICAgICAgICBkZWxldGUgbV9wQnVmZmVyOw0KLSAgICB9DQotfQ0KLSNkZWZpbmUgRlBERl9GSUxURVJfQlVGRkVSX0lOX1NJWkUJRlBERl9GSUxURVJfQlVGRkVSX1NJWkUNCi1GWF9EV09SRCBDUERGX1N0cmVhbUZpbHRlcjo6UmVhZEJsb2NrKEZYX0xQQllURSBidWZmZXIsIEZYX0RXT1JEIGJ1Zl9zaXplKQ0KLXsNCi0gICAgaWYgKG1fcEZpbHRlciA9PSBOVUxMKSB7DQotICAgICAgICBGWF9EV09SRCByZWFkX3NpemUgPSBtX3BTdHJlYW0tPkdldFJhd1NpemUoKSAtIG1fU3JjT2Zmc2V0Ow0KLSAgICAgICAgaWYgKHJlYWRfc2l6ZSA9PSAwKSB7DQotICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICB9DQotICAgICAgICBpZiAocmVhZF9zaXplID4gYnVmX3NpemUpIHsNCi0gICAgICAgICAgICByZWFkX3NpemUgPSBidWZfc2l6ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fcFN0cmVhbS0+UmVhZFJhd0RhdGEobV9TcmNPZmZzZXQsIGJ1ZmZlciwgcmVhZF9zaXplKTsNCi0gICAgICAgIG1fU3JjT2Zmc2V0ICs9IHJlYWRfc2l6ZTsNCi0gICAgICAgIHJldHVybiByZWFkX3NpemU7DQotICAgIH0NCi0gICAgRlhfRFdPUkQgcmVhZF9zaXplID0gMDsNCi0gICAgaWYgKG1fcEJ1ZmZlcikgew0KLSAgICAgICAgcmVhZF9zaXplID0gUmVhZExlZnRPdmVyKGJ1ZmZlciwgYnVmX3NpemUpOw0KLSAgICAgICAgaWYgKHJlYWRfc2l6ZSA9PSBidWZfc2l6ZSkgew0KLSAgICAgICAgICAgIHJldHVybiByZWFkX3NpemU7DQotICAgICAgICB9DQotICAgICAgICBidWZmZXIgKz0gcmVhZF9zaXplOw0KLSAgICAgICAgYnVmX3NpemUgLT0gcmVhZF9zaXplOw0KLSAgICB9DQotICAgIEFTU0VSVChtX3BCdWZmZXIgPT0gTlVMTCk7DQotICAgIGlmIChtX3BGaWx0ZXItPklzRU9GKCkpIHsNCi0gICAgICAgIHJldHVybiByZWFkX3NpemU7DQotICAgIH0NCi0gICAgbV9wQnVmZmVyID0gRlhfTkVXIENGWF9CaW5hcnlCdWY7DQotICAgIG1fcEJ1ZmZlci0+RXN0aW1hdGVTaXplKEZQREZfRklMVEVSX0JVRkZFUl9TSVpFLCBGUERGX0ZJTFRFUl9CVUZGRVJfU0laRSk7DQotICAgIG1fQnVmT2Zmc2V0ID0gMDsNCi0gICAgd2hpbGUgKDEpIHsNCi0gICAgICAgIGludCBzcmNfc2l6ZSA9IG1fcFN0cmVhbS0+R2V0UmF3U2l6ZSgpIC0gbV9TcmNPZmZzZXQ7DQotICAgICAgICBpZiAoc3JjX3NpemUgPT0gMCkgew0KLSAgICAgICAgICAgIG1fcEZpbHRlci0+RmlsdGVyRmluaXNoKCptX3BCdWZmZXIpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHNyY19zaXplID4gRlBERl9GSUxURVJfQlVGRkVSX0lOX1NJWkUpIHsNCi0gICAgICAgICAgICBzcmNfc2l6ZSA9IEZQREZfRklMVEVSX0JVRkZFUl9JTl9TSVpFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCFtX3BTdHJlYW0tPlJlYWRSYXdEYXRhKG1fU3JjT2Zmc2V0LCBtX1NyY0J1ZmZlciwgc3JjX3NpemUpKSB7DQotICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICB9DQotICAgICAgICBtX1NyY09mZnNldCArPSBzcmNfc2l6ZTsNCi0gICAgICAgIG1fcEZpbHRlci0+RmlsdGVySW4obV9TcmNCdWZmZXIsIHNyY19zaXplLCAqbV9wQnVmZmVyKTsNCi0gICAgICAgIGlmIChtX3BCdWZmZXItPkdldFNpemUoKSA+PSAoaW50KWJ1Zl9zaXplKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIHJlYWRfc2l6ZSArIFJlYWRMZWZ0T3ZlcihidWZmZXIsIGJ1Zl9zaXplKTsNCi19DQotRlhfRFdPUkQgQ1BERl9TdHJlYW1GaWx0ZXI6OlJlYWRMZWZ0T3ZlcihGWF9MUEJZVEUgYnVmZmVyLCBGWF9EV09SRCBidWZfc2l6ZSkNCi17DQotICAgIEZYX0RXT1JEIHJlYWRfc2l6ZSA9IG1fcEJ1ZmZlci0+R2V0U2l6ZSgpIC0gbV9CdWZPZmZzZXQ7DQotICAgIGlmIChyZWFkX3NpemUgPiBidWZfc2l6ZSkgew0KLSAgICAgICAgcmVhZF9zaXplID0gYnVmX3NpemU7DQotICAgIH0NCi0gICAgRlhTWVNfbWVtY3B5MzIoYnVmZmVyLCBtX3BCdWZmZXItPkdldEJ1ZmZlcigpICsgbV9CdWZPZmZzZXQsIHJlYWRfc2l6ZSk7DQotICAgIG1fQnVmT2Zmc2V0ICs9IHJlYWRfc2l6ZTsNCi0gICAgaWYgKG1fQnVmT2Zmc2V0ID09IChGWF9EV09SRCltX3BCdWZmZXItPkdldFNpemUoKSkgew0KLSAgICAgICAgZGVsZXRlIG1fcEJ1ZmZlcjsNCi0gICAgICAgIG1fcEJ1ZmZlciA9IE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIHJlYWRfc2l6ZTsNCi19DQotQ1BERl9EZWNyeXB0RmlsdGVyOjpDUERGX0RlY3J5cHRGaWx0ZXIoQ1BERl9DcnlwdG9IYW5kbGVyKiBwQ3J5cHRvSGFuZGxlciwgRlhfRFdPUkQgb2JqbnVtLCBGWF9EV09SRCBnZW5udW0pDQotew0KLSAgICBtX3BDcnlwdG9IYW5kbGVyID0gcENyeXB0b0hhbmRsZXI7DQotICAgIG1fcENvbnRleHQgPSBOVUxMOw0KLSAgICBtX09iak51bSA9IG9iam51bTsNCi0gICAgbV9HZW5OdW0gPSBnZW5udW07DQotfQ0KLUNQREZfRGVjcnlwdEZpbHRlcjo6fkNQREZfRGVjcnlwdEZpbHRlcigpDQotew0KLSAgICBDRlhfQmluYXJ5QnVmIGJ1ZjsNCi0gICAgaWYgKG1fcENvbnRleHQpIHsNCi0gICAgICAgIG1fcENyeXB0b0hhbmRsZXItPkRlY3J5cHRGaW5pc2gobV9wQ29udGV4dCwgYnVmKTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfRGVjcnlwdEZpbHRlcjo6dl9GaWx0ZXJJbihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1ZikNCi17DQotICAgIGlmIChtX3BDb250ZXh0ID09IE5VTEwpIHsNCi0gICAgICAgIG1fcENvbnRleHQgPSBtX3BDcnlwdG9IYW5kbGVyLT5EZWNyeXB0U3RhcnQobV9PYmpOdW0sIG1fR2VuTnVtKTsNCi0gICAgfQ0KLSAgICBtX3BDcnlwdG9IYW5kbGVyLT5EZWNyeXB0U3RyZWFtKG1fcENvbnRleHQsIHNyY19idWYsIHNyY19zaXplLCBkZXN0X2J1Zik7DQotfQ0KLXZvaWQgQ1BERl9EZWNyeXB0RmlsdGVyOjp2X0ZpbHRlckZpbmlzaChDRlhfQmluYXJ5QnVmJiBkZXN0X2J1ZikNCi17DQotICAgIG1fYkVPRiA9IFRSVUU7DQotICAgIGlmIChtX3BDb250ZXh0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX3BDcnlwdG9IYW5kbGVyLT5EZWNyeXB0RmluaXNoKG1fcENvbnRleHQsIGRlc3RfYnVmKTsNCi0gICAgbV9wQ29udGV4dCA9IE5VTEw7DQotfQ0KLWV4dGVybiAiQyIgew0KLSAgICBzdGF0aWMgdm9pZCogbXlfYWxsb2NfZnVuYyAodm9pZCogb3BhcXVlLCB1bnNpZ25lZCBpbnQgaXRlbXMsIHVuc2lnbmVkIGludCBzaXplKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRlhfQWxsb2MoRlhfQllURSwgaXRlbXMgKiBzaXplKTsNCi0gICAgfQ0KLSAgICBzdGF0aWMgdm9pZCAgIG15X2ZyZWVfZnVuYyAgKHZvaWQqIG9wYXF1ZSwgdm9pZCogYWRkcmVzcykNCi0gICAgew0KLSAgICAgICAgRlhfRnJlZShhZGRyZXNzKTsNCi0gICAgfQ0KLSAgICB2b2lkKiBGUERGQVBJX0ZsYXRlSW5pdCh2b2lkKiAoKmFsbG9jX2Z1bmMpKHZvaWQqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpmcmVlX2Z1bmMpKHZvaWQqLCB2b2lkKikpOw0KLSAgICB2b2lkIEZQREZBUElfRmxhdGVJbnB1dCh2b2lkKiBjb250ZXh0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmNfYnVmLCB1bnNpZ25lZCBpbnQgc3JjX3NpemUpOw0KLSAgICBpbnQgRlBERkFQSV9GbGF0ZU91dHB1dCh2b2lkKiBjb250ZXh0LCB1bnNpZ25lZCBjaGFyKiBkZXN0X2J1ZiwgdW5zaWduZWQgaW50IGRlc3Rfc2l6ZSk7DQotICAgIGludCBGUERGQVBJX0ZsYXRlR2V0QXZhaWxJbih2b2lkKiBjb250ZXh0KTsNCi0gICAgaW50IEZQREZBUElfRmxhdGVHZXRBdmFpbE91dCh2b2lkKiBjb250ZXh0KTsNCi0gICAgdm9pZCBGUERGQVBJX0ZsYXRlRW5kKHZvaWQqIGNvbnRleHQpOw0KLX0NCi1DUERGX0ZsYXRlRmlsdGVyOjpDUERGX0ZsYXRlRmlsdGVyKCkNCi17DQotICAgIG1fcENvbnRleHQgPSBOVUxMOw0KLX0NCi1DUERGX0ZsYXRlRmlsdGVyOjp+Q1BERl9GbGF0ZUZpbHRlcigpDQotew0KLSAgICBpZiAobV9wQ29udGV4dCkgew0KLSAgICAgICAgRlBERkFQSV9GbGF0ZUVuZChtX3BDb250ZXh0KTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfRmxhdGVGaWx0ZXI6OnZfRmlsdGVySW4oRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpDQotew0KLSAgICBpZiAobV9wQ29udGV4dCA9PSBOVUxMKSB7DQotICAgICAgICBtX3BDb250ZXh0ID0gRlBERkFQSV9GbGF0ZUluaXQobXlfYWxsb2NfZnVuYywgbXlfZnJlZV9mdW5jKTsNCi0gICAgfQ0KLSAgICBGUERGQVBJX0ZsYXRlSW5wdXQobV9wQ29udGV4dCwgc3JjX2J1Ziwgc3JjX3NpemUpOw0KLSAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgaW50IHJldCA9IEZQREZBUElfRmxhdGVPdXRwdXQobV9wQ29udGV4dCwgbV9EZXN0QnVmZmVyLCBGUERGX0ZJTFRFUl9CVUZGRVJfU0laRSk7DQotICAgICAgICBpbnQgb3V0X3NpemUgPSBGUERGX0ZJTFRFUl9CVUZGRVJfU0laRSAtIEZQREZBUElfRmxhdGVHZXRBdmFpbE91dChtX3BDb250ZXh0KTsNCi0gICAgICAgIGRlc3RfYnVmLkFwcGVuZEJsb2NrKG1fRGVzdEJ1ZmZlciwgb3V0X3NpemUpOw0KLSAgICAgICAgaWYgKHJldCA9PSBaX0JVRl9FUlJPUikgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHJldCAhPSBaX09LKSB7DQotICAgICAgICAgICAgUmVwb3J0RU9GKEZQREZBUElfRmxhdGVHZXRBdmFpbEluKG1fcENvbnRleHQpKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1DUERGX0x6d0ZpbHRlcjo6Q1BERl9MendGaWx0ZXIoRlhfQk9PTCBiRWFybHlDaGFuZ2UpDQotew0KLSAgICBtX2JFYXJseUNoYW5nZSA9IGJFYXJseUNoYW5nZSA/IDEgOiAwOw0KLSAgICBtX0NvZGVMZW4gPSA5Ow0KLSAgICBtX25Db2RlcyA9IDA7DQotICAgIG1fbkxlZnRCaXRzID0gMDsNCi0gICAgbV9MZWZ0Qml0cyA9IDA7DQotICAgIG1fT2xkQ29kZSA9IChGWF9EV09SRCkgLSAxOw0KLX0NCi12b2lkIENQREZfTHp3RmlsdGVyOjp2X0ZpbHRlckluKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKQ0KLXsNCi0gICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHNyY19zaXplOyBpICsrKSB7DQotICAgICAgICBpZiAobV9uTGVmdEJpdHMgKyA4IDwgbV9Db2RlTGVuKSB7DQotICAgICAgICAgICAgbV9uTGVmdEJpdHMgKz0gODsNCi0gICAgICAgICAgICBtX0xlZnRCaXRzID0gKG1fTGVmdEJpdHMgPDwgOCkgfCBzcmNfYnVmW2ldOw0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfRFdPUkQgbmV3X2JpdHMgPSBtX0NvZGVMZW4gLSBtX25MZWZ0Qml0czsNCi0gICAgICAgIEZYX0RXT1JEIGNvZGUgPSAobV9MZWZ0Qml0cyA8PCBuZXdfYml0cykgfCAoc3JjX2J1ZltpXSA+PiAoOCAtIG5ld19iaXRzKSk7DQotICAgICAgICBtX25MZWZ0Qml0cyA9IDggLSBuZXdfYml0czsNCi0gICAgICAgIG1fTGVmdEJpdHMgPSBzcmNfYnVmW2ldICUgKDEgPDwgbV9uTGVmdEJpdHMpOw0KLSAgICAgICAgaWYgKGNvZGUgPCAyNTYpIHsNCi0gICAgICAgICAgICBkZXN0X2J1Zi5BcHBlbmRCeXRlKChGWF9CWVRFKWNvZGUpOw0KLSAgICAgICAgICAgIG1fTGFzdENoYXIgPSAoRlhfQllURSljb2RlOw0KLSAgICAgICAgICAgIGlmIChtX09sZENvZGUgIT0gLTEpIHsNCi0gICAgICAgICAgICAgICAgQWRkQ29kZShtX09sZENvZGUsIG1fTGFzdENoYXIpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBtX09sZENvZGUgPSBjb2RlOw0KLSAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IDI1Nikgew0KLSAgICAgICAgICAgIG1fQ29kZUxlbiA9IDk7DQotICAgICAgICAgICAgbV9uQ29kZXMgPSAwOw0KLSAgICAgICAgICAgIG1fT2xkQ29kZSA9IChGWF9EV09SRCkgLSAxOw0KLSAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IDI1Nykgew0KLSAgICAgICAgICAgIFJlcG9ydEVPRihzcmNfc2l6ZSAtIGkgLSAxKTsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlmIChtX09sZENvZGUgPT0gLTEpIHsNCi0gICAgICAgICAgICAgICAgUmVwb3J0RU9GKHNyY19zaXplIC0gaSAtIDEpOw0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fU3RhY2tMZW4gPSAwOw0KLSAgICAgICAgICAgIGlmIChjb2RlID49IG1fbkNvZGVzICsgMjU4KSB7DQotICAgICAgICAgICAgICAgIGlmIChtX1N0YWNrTGVuIDwgc2l6ZW9mKG1fRGVjb2RlU3RhY2spKSB7DQotICAgICAgICAgICAgICAgICAgICBtX0RlY29kZVN0YWNrW21fU3RhY2tMZW4rK10gPSBtX0xhc3RDaGFyOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIERlY29kZVN0cmluZyhtX09sZENvZGUpOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIERlY29kZVN0cmluZyhjb2RlKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZGVzdF9idWYuQXBwZW5kQmxvY2soTlVMTCwgbV9TdGFja0xlbik7DQotICAgICAgICAgICAgRlhfTFBCWVRFIHBPdXRwdXQgPSBkZXN0X2J1Zi5HZXRCdWZmZXIoKSArIGRlc3RfYnVmLkdldFNpemUoKSAtIG1fU3RhY2tMZW47DQotICAgICAgICAgICAgZm9yIChGWF9EV09SRCBjYyA9IDA7IGNjIDwgbV9TdGFja0xlbjsgY2MgKyspIHsNCi0gICAgICAgICAgICAgICAgcE91dHB1dFtjY10gPSBtX0RlY29kZVN0YWNrW21fU3RhY2tMZW4gLSBjYyAtIDFdOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBtX0xhc3RDaGFyID0gbV9EZWNvZGVTdGFja1ttX1N0YWNrTGVuIC0gMV07DQotICAgICAgICAgICAgaWYgKG1fT2xkQ29kZSA8IDI1Nikgew0KLSAgICAgICAgICAgICAgICBBZGRDb2RlKG1fT2xkQ29kZSwgbV9MYXN0Q2hhcik7DQotICAgICAgICAgICAgfSBlbHNlIGlmIChtX09sZENvZGUgLSAyNTggPj0gbV9uQ29kZXMpIHsNCi0gICAgICAgICAgICAgICAgUmVwb3J0RU9GKHNyY19zaXplIC0gaSAtIDEpOw0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgQWRkQ29kZShtX09sZENvZGUsIG1fTGFzdENoYXIpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBtX09sZENvZGUgPSBjb2RlOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9MendGaWx0ZXI6OkFkZENvZGUoRlhfRFdPUkQgcHJlZml4X2NvZGUsIEZYX0JZVEUgYXBwZW5kX2NoYXIpDQotew0KLSAgICBpZiAobV9uQ29kZXMgKyBtX2JFYXJseUNoYW5nZSA9PSA0MDk0KSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbV9Db2RlQXJyYXlbbV9uQ29kZXMgKytdID0gKHByZWZpeF9jb2RlIDw8IDE2KSB8IGFwcGVuZF9jaGFyOw0KLSAgICBpZiAobV9uQ29kZXMgKyBtX2JFYXJseUNoYW5nZSA9PSA1MTIgLSAyNTgpIHsNCi0gICAgICAgIG1fQ29kZUxlbiA9IDEwOw0KLSAgICB9IGVsc2UgaWYgKG1fbkNvZGVzICsgbV9iRWFybHlDaGFuZ2UgPT0gMTAyNCAtIDI1OCkgew0KLSAgICAgICAgbV9Db2RlTGVuID0gMTE7DQotICAgIH0gZWxzZSBpZiAobV9uQ29kZXMgKyBtX2JFYXJseUNoYW5nZSA9PSAyMDQ4IC0gMjU4KSB7DQotICAgICAgICBtX0NvZGVMZW4gPSAxMjsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfTHp3RmlsdGVyOjpEZWNvZGVTdHJpbmcoRlhfRFdPUkQgY29kZSkNCi17DQotICAgIHdoaWxlICgxKSB7DQotICAgICAgICBpbnQgaW5kZXggPSBjb2RlIC0gMjU4Ow0KLSAgICAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSAoaW50KW1fbkNvZGVzKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBGWF9EV09SRCBkYXRhID0gbV9Db2RlQXJyYXlbaW5kZXhdOw0KLSAgICAgICAgaWYgKG1fU3RhY2tMZW4gPj0gc2l6ZW9mKG1fRGVjb2RlU3RhY2spKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9EZWNvZGVTdGFja1ttX1N0YWNrTGVuKytdID0gKEZYX0JZVEUpZGF0YTsNCi0gICAgICAgIGNvZGUgPSBkYXRhID4+IDE2Ow0KLSAgICB9DQotICAgIGlmIChtX1N0YWNrTGVuID49IHNpemVvZihtX0RlY29kZVN0YWNrKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fRGVjb2RlU3RhY2tbbV9TdGFja0xlbisrXSA9IChGWF9CWVRFKWNvZGU7DQotfQ0KLUNQREZfUHJlZGljdG9yRmlsdGVyOjpDUERGX1ByZWRpY3RvckZpbHRlcihpbnQgcHJlZGljdG9yLCBpbnQgY29sb3JzLCBpbnQgYnBjLCBpbnQgY29scykNCi17DQotICAgIG1fYlRpZmYgPSBwcmVkaWN0b3IgPCAxMDsNCi0gICAgbV9wUmVmTGluZSA9IE5VTEw7DQotICAgIG1fcEN1ckxpbmUgPSBOVUxMOw0KLSAgICBtX2lMaW5lID0gMDsNCi0gICAgbV9MaW5lSW5TaXplID0gMDsNCi0gICAgbV9CcHAgPSAoY29sb3JzICogYnBjICsgNykgLyA4Ow0KLSAgICBtX1BpdGNoID0gKGNvbG9ycyAqIGJwYyAqIGNvbHMgKyA3KSAvIDg7DQotICAgIGlmICghbV9iVGlmZikgew0KLSAgICAgICAgbV9QaXRjaCArKzsNCi0gICAgfQ0KLX0NCi1DUERGX1ByZWRpY3RvckZpbHRlcjo6fkNQREZfUHJlZGljdG9yRmlsdGVyKCkNCi17DQotICAgIGlmIChtX3BDdXJMaW5lKSB7DQotICAgICAgICBGWF9GcmVlKG1fcEN1ckxpbmUpOw0KLSAgICB9DQotICAgIGlmIChtX3BSZWZMaW5lKSB7DQotICAgICAgICBGWF9GcmVlKG1fcFJlZkxpbmUpOw0KLSAgICB9DQotfQ0KLXN0YXRpYyBGWF9CWVRFIFBhZXRoUHJlZGljdG9yKGludCBhLCBpbnQgYiwgaW50IGMpDQotew0KLSAgICBpbnQgcCA9IGEgKyBiIC0gYzsNCi0gICAgaW50IHBhID0gRlhTWVNfYWJzKHAgLSBhKTsNCi0gICAgaW50IHBiID0gRlhTWVNfYWJzKHAgLSBiKTsNCi0gICAgaW50IHBjID0gRlhTWVNfYWJzKHAgLSBjKTsNCi0gICAgaWYgKHBhIDw9IHBiICYmIHBhIDw9IHBjKSB7DQotICAgICAgICByZXR1cm4gKEZYX0JZVEUpYTsNCi0gICAgfQ0KLSAgICBpZiAocGIgPD0gcGMpIHsNCi0gICAgICAgIHJldHVybiAoRlhfQllURSliOw0KLSAgICB9DQotICAgIHJldHVybiAoRlhfQllURSljOw0KLX0NCi1zdGF0aWMgdm9pZCBQTkdfUHJlZGljdG9yTGluZShGWF9MUEJZVEUgY3VyX2J1ZiwgRlhfTFBCWVRFIHJlZl9idWYsIGludCBwaXRjaCwgaW50IEJwcCkNCi17DQotICAgIEZYX0JZVEUgdGFnID0gY3VyX2J1ZlswXTsNCi0gICAgaWYgKHRhZyA9PSAwKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgY3VyX2J1ZiArKzsNCi0gICAgaWYgKHJlZl9idWYpIHsNCi0gICAgICAgIHJlZl9idWYgKys7DQotICAgIH0NCi0gICAgZm9yIChpbnQgYnl0ZSA9IDA7IGJ5dGUgPCBwaXRjaDsgYnl0ZSArKykgew0KLSAgICAgICAgRlhfQllURSByYXdfYnl0ZSA9IGN1cl9idWZbYnl0ZV07DQotICAgICAgICBzd2l0Y2ggKHRhZykgew0KLSAgICAgICAgICAgIGNhc2UgMToJew0KLSAgICAgICAgICAgICAgICAgICAgRlhfQllURSBsZWZ0ID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChieXRlID49IEJwcCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBjdXJfYnVmW2J5dGUgLSBCcHBdOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgY3VyX2J1ZltieXRlXSA9IHJhd19ieXRlICsgbGVmdDsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgY2FzZSAyOiB7DQotICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHVwID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChyZWZfYnVmKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgdXAgPSByZWZfYnVmW2J5dGVdOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgY3VyX2J1ZltieXRlXSA9IHJhd19ieXRlICsgdXA7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNhc2UgMzogew0KLSAgICAgICAgICAgICAgICAgICAgRlhfQllURSBsZWZ0ID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChieXRlID49IEJwcCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBjdXJfYnVmW2J5dGUgLSBCcHBdOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgRlhfQllURSB1cCA9IDA7DQotICAgICAgICAgICAgICAgICAgICBpZiAocmVmX2J1Zikgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHVwID0gcmVmX2J1ZltieXRlXTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGN1cl9idWZbYnl0ZV0gPSByYXdfYnl0ZSArICh1cCArIGxlZnQpIC8gMjsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgY2FzZSA0OiB7DQotICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIGxlZnQgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGUgPj0gQnBwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGN1cl9idWZbYnl0ZSAtIEJwcF07DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHVwID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChyZWZfYnVmKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgdXAgPSByZWZfYnVmW2J5dGVdOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgRlhfQllURSB1cHBlcl9sZWZ0ID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChieXRlID49IEJwcCAmJiByZWZfYnVmKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJfbGVmdCA9IHJlZl9idWZbYnl0ZSAtIEJwcF07DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBjdXJfYnVmW2J5dGVdID0gcmF3X2J5dGUgKyBQYWV0aFByZWRpY3RvcihsZWZ0LCB1cCwgdXBwZXJfbGVmdCk7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9QcmVkaWN0b3JGaWx0ZXI6OnZfRmlsdGVySW4oRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpDQotew0KLSAgICBpZiAobV9wQ3VyTGluZSA9PSBOVUxMKSB7DQotICAgICAgICBtX3BDdXJMaW5lID0gRlhfQWxsb2MoRlhfQllURSwgbV9QaXRjaCk7DQotICAgICAgICBpZiAoIW1fYlRpZmYpIHsNCi0gICAgICAgICAgICBtX3BSZWZMaW5lID0gRlhfQWxsb2MoRlhfQllURSwgbV9QaXRjaCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgd2hpbGUgKDEpIHsNCi0gICAgICAgIEZYX0RXT1JEIHJlYWRfc2l6ZSA9IG1fUGl0Y2ggLSBtX0xpbmVJblNpemU7DQotICAgICAgICBpZiAocmVhZF9zaXplID4gc3JjX3NpemUpIHsNCi0gICAgICAgICAgICByZWFkX3NpemUgPSBzcmNfc2l6ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYU1lTX21lbWNweTMyKG1fcEN1ckxpbmUgKyBtX0xpbmVJblNpemUsIHNyY19idWYsIHJlYWRfc2l6ZSk7DQotICAgICAgICBtX0xpbmVJblNpemUgKz0gcmVhZF9zaXplOw0KLSAgICAgICAgaWYgKG1fTGluZUluU2l6ZSA8IG1fUGl0Y2gpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIHNyY19idWYgKz0gcmVhZF9zaXplOw0KLSAgICAgICAgc3JjX3NpemUgLT0gcmVhZF9zaXplOw0KLSAgICAgICAgaWYgKG1fYlRpZmYpIHsNCi0gICAgICAgICAgICBmb3IgKEZYX0RXT1JEIGJ5dGUgPSBtX0JwcDsgYnl0ZSA8IG1fUGl0Y2g7IGJ5dGUgKyspIHsNCi0gICAgICAgICAgICAgICAgbV9wQ3VyTGluZVtieXRlXSArPSBtX3BDdXJMaW5lW2J5dGUgLSBtX0JwcF07DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGRlc3RfYnVmLkFwcGVuZEJsb2NrKG1fcEN1ckxpbmUsIG1fUGl0Y2gpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBQTkdfUHJlZGljdG9yTGluZShtX3BDdXJMaW5lLCBtX2lMaW5lID8gbV9wUmVmTGluZSA6IE5VTEwsIG1fUGl0Y2ggLSAxLCBtX0JwcCk7DQotICAgICAgICAgICAgZGVzdF9idWYuQXBwZW5kQmxvY2sobV9wQ3VyTGluZSArIDEsIG1fUGl0Y2ggLSAxKTsNCi0gICAgICAgICAgICBtX2lMaW5lICsrOw0KLSAgICAgICAgICAgIEZYX0xQQllURSB0ZW1wID0gbV9wQ3VyTGluZTsNCi0gICAgICAgICAgICBtX3BDdXJMaW5lID0gbV9wUmVmTGluZTsNCi0gICAgICAgICAgICBtX3BSZWZMaW5lID0gdGVtcDsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fTGluZUluU2l6ZSA9IDA7DQotICAgIH0NCi19DQotQ1BERl9Bc2NpaTg1RmlsdGVyOjpDUERGX0FzY2lpODVGaWx0ZXIoKQ0KLXsNCi0gICAgbV9TdGF0ZSA9IDA7DQotICAgIG1fQ2hhckNvdW50ID0gMDsNCi19DQotZXh0ZXJuIGNvbnN0IEZYX0xQQ1NUUiBfUERGX0NoYXJUeXBlOw0KLXZvaWQgQ1BERl9Bc2NpaTg1RmlsdGVyOjp2X0ZpbHRlckluKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKQ0KLXsNCi0gICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHNyY19zaXplOyBpICsrKSB7DQotICAgICAgICBGWF9CWVRFIGJ5dGUgPSBzcmNfYnVmW2ldOw0KLSAgICAgICAgaWYgKF9QREZfQ2hhclR5cGVbYnl0ZV0gPT0gJ1cnKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBzd2l0Y2ggKG1fU3RhdGUpIHsNCi0gICAgICAgICAgICBjYXNlIDA6DQotICAgICAgICAgICAgICAgIGlmIChieXRlID49ICchJyAmJiBieXRlIDw9ICd1Jykgew0KLSAgICAgICAgICAgICAgICAgICAgaW50IGRpZ2l0ID0gYnl0ZSAtICchJzsNCi0gICAgICAgICAgICAgICAgICAgIG1fQ3VyRFdvcmQgPSBkaWdpdDsNCi0gICAgICAgICAgICAgICAgICAgIG1fQ2hhckNvdW50ID0gMTsNCi0gICAgICAgICAgICAgICAgICAgIG1fU3RhdGUgPSAxOw0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGUgPT0gJ3onKSB7DQotICAgICAgICAgICAgICAgICAgICBpbnQgemVybyA9IDA7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X2J1Zi5BcHBlbmRCbG9jaygmemVybywgNCk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA9PSAnficpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fU3RhdGUgPSAyOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgMTogew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGUgPj0gJyEnICYmIGJ5dGUgPD0gJ3UnKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRpZ2l0ID0gYnl0ZSAtICchJzsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX0N1ckRXb3JkID0gbV9DdXJEV29yZCAqIDg1ICsgZGlnaXQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9DaGFyQ291bnQgKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fQ2hhckNvdW50ID09IDUpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2J1Zi5BcHBlbmRCeXRlKChGWF9CWVRFKShtX0N1ckRXb3JkID4+ICgzIC0gaSkgKiA4KSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdGF0ZSA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChieXRlID09ICd+Jykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0NoYXJDb3VudCA+IDEpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IG1fQ2hhckNvdW50OyBpIDwgNTsgaSArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9DdXJEV29yZCA9IG1fQ3VyRFdvcmQgKiA4NSArIDg0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtX0NoYXJDb3VudCAtIDE7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYnVmLkFwcGVuZEJ5dGUoKEZYX0JZVEUpKG1fQ3VyRFdvcmQgPj4gKDMgLSBpKSAqIDgpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBtX1N0YXRlID0gMjsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgY2FzZSAyOg0KLSAgICAgICAgICAgICAgICBpZiAoYnl0ZSA9PSAnPicpIHsNCi0gICAgICAgICAgICAgICAgICAgIFJlcG9ydEVPRihzcmNfc2l6ZSAtIGkgLSAxKTsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1DUERGX0FzY2lpSGV4RmlsdGVyOjpDUERGX0FzY2lpSGV4RmlsdGVyKCkNCi17DQotICAgIG1fU3RhdGUgPSAwOw0KLX0NCi12b2lkIENQREZfQXNjaWlIZXhGaWx0ZXI6OnZfRmlsdGVySW4oRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpDQotew0KLSAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgc3JjX3NpemU7IGkgKyspIHsNCi0gICAgICAgIEZYX0JZVEUgYnl0ZSA9IHNyY19idWZbaV07DQotICAgICAgICBpZiAoX1BERl9DaGFyVHlwZVtieXRlXSA9PSAnVycpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBkaWdpdDsNCi0gICAgICAgIGlmIChieXRlID49ICcwJyAmJiBieXRlIDw9ICc5Jykgew0KLSAgICAgICAgICAgIGRpZ2l0ID0gYnl0ZSAtICcwJzsNCi0gICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA+PSAnYScgJiYgYnl0ZSA8PSAnZicpIHsNCi0gICAgICAgICAgICBkaWdpdCA9IGJ5dGUgLSAnYScgKyAxMDsNCi0gICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA+PSAnQScgJiYgYnl0ZSA8PSAnRicpIHsNCi0gICAgICAgICAgICBkaWdpdCA9IGJ5dGUgLSAnQScgKyAxMDsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYgKG1fU3RhdGUpIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9idWYuQXBwZW5kQnl0ZShtX0ZpcnN0RGlnaXQgKiAxNik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIFJlcG9ydEVPRihzcmNfc2l6ZSAtIGkgLSAxKTsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9TdGF0ZSA9PSAwKSB7DQotICAgICAgICAgICAgbV9GaXJzdERpZ2l0ID0gZGlnaXQ7DQotICAgICAgICAgICAgbV9TdGF0ZSArKzsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgZGVzdF9idWYuQXBwZW5kQnl0ZShtX0ZpcnN0RGlnaXQgKiAxNiArIGRpZ2l0KTsNCi0gICAgICAgICAgICBtX1N0YXRlIC0tOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLUNQREZfUnVuTGVuRmlsdGVyOjpDUERGX1J1bkxlbkZpbHRlcigpDQotew0KLSAgICBtX1N0YXRlID0gMDsNCi0gICAgbV9Db3VudCA9IDA7DQotfQ0KLXZvaWQgQ1BERl9SdW5MZW5GaWx0ZXI6OnZfRmlsdGVySW4oRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpDQotew0KLSAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgc3JjX3NpemU7IGkgKyspIHsNCi0gICAgICAgIEZYX0JZVEUgYnl0ZSA9IHNyY19idWZbaV07DQotICAgICAgICBzd2l0Y2ggKG1fU3RhdGUpIHsNCi0gICAgICAgICAgICBjYXNlIDA6DQotICAgICAgICAgICAgICAgIGlmIChieXRlIDwgMTI4KSB7DQotICAgICAgICAgICAgICAgICAgICBtX1N0YXRlID0gMTsNCi0gICAgICAgICAgICAgICAgICAgIG1fQ291bnQgPSBieXRlICsgMTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChieXRlID09IDEyOCkgew0KLSAgICAgICAgICAgICAgICAgICAgUmVwb3J0RU9GKHNyY19zaXplIC0gaSAtIDEpOw0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgbV9TdGF0ZSA9IDI7DQotICAgICAgICAgICAgICAgICAgICBtX0NvdW50ID0gMjU3IC0gYnl0ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDE6DQotICAgICAgICAgICAgICAgIGRlc3RfYnVmLkFwcGVuZEJ5dGUoYnl0ZSk7DQotICAgICAgICAgICAgICAgIG1fQ291bnQgLS07DQotICAgICAgICAgICAgICAgIGlmIChtX0NvdW50ID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fU3RhdGUgPSAwOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgMjoJew0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9idWYuQXBwZW5kQmxvY2soTlVMTCwgbV9Db3VudCk7DQotICAgICAgICAgICAgICAgICAgICBGWFNZU19tZW1zZXQ4KGRlc3RfYnVmLkdldEJ1ZmZlcigpICsgZGVzdF9idWYuR2V0U2l6ZSgpIC0gbV9Db3VudCwgYnl0ZSwgbV9Db3VudCk7DQotICAgICAgICAgICAgICAgICAgICBtX1N0YXRlID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi19DQotQ1BERl9KcGVnRmlsdGVyOjpDUERGX0pwZWdGaWx0ZXIoKQ0KLXsNCi0gICAgbV9wQ29udGV4dCA9IE5VTEw7DQotICAgIG1fYkdvdEhlYWRlciA9IEZBTFNFOw0KLSAgICBtX3BTY2FubGluZSA9IE5VTEw7DQotICAgIG1faUxpbmUgPSAwOw0KLX0NCi1DUERGX0pwZWdGaWx0ZXI6On5DUERGX0pwZWdGaWx0ZXIoKQ0KLXsNCi0gICAgaWYgKG1fcFNjYW5saW5lKSB7DQotICAgICAgICBGWF9GcmVlKG1fcFNjYW5saW5lKTsNCi0gICAgfQ0KLSAgICBpZiAobV9wQ29udGV4dCkgew0KLSAgICAgICAgQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRKcGVnTW9kdWxlKCktPkZpbmlzaChtX3BDb250ZXh0KTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfSnBlZ0ZpbHRlcjo6dl9GaWx0ZXJJbihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1ZikNCi17DQotICAgIGlmIChtX3BDb250ZXh0ID09IE5VTEwpIHsNCi0gICAgICAgIG1fcENvbnRleHQgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldEpwZWdNb2R1bGUoKS0+U3RhcnQoKTsNCi0gICAgfQ0KLSAgICBGWF9MUENCWVRFIGpwZWdfc3JjX2J1ZjsNCi0gICAgRlhfRFdPUkQganBlZ19zcmNfc2l6ZTsNCi0gICAgQ0ZYX0JpbmFyeUJ1ZiB0ZW1wX2J1ZjsNCi0gICAgaWYgKG1fSW5wdXRCdWYuR2V0U2l6ZSgpKSB7DQotICAgICAgICB0ZW1wX2J1Zi5Fc3RpbWF0ZVNpemUobV9JbnB1dEJ1Zi5HZXRTaXplKCkgKyBzcmNfc2l6ZSk7DQotICAgICAgICB0ZW1wX2J1Zi5BcHBlbmRCbG9jayhtX0lucHV0QnVmLkdldEJ1ZmZlcigpLCBtX0lucHV0QnVmLkdldFNpemUoKSk7DQotICAgICAgICBtX0lucHV0QnVmLkNsZWFyKCk7DQotICAgICAgICB0ZW1wX2J1Zi5BcHBlbmRCbG9jayhzcmNfYnVmLCBzcmNfc2l6ZSk7DQotICAgICAgICBqcGVnX3NyY19idWYgPSB0ZW1wX2J1Zi5HZXRCdWZmZXIoKTsNCi0gICAgICAgIGpwZWdfc3JjX3NpemUgPSB0ZW1wX2J1Zi5HZXRTaXplKCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBqcGVnX3NyY19idWYgPSBzcmNfYnVmOw0KLSAgICAgICAganBlZ19zcmNfc2l6ZSA9IHNyY19zaXplOw0KLSAgICB9DQotICAgIENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0SnBlZ01vZHVsZSgpLT5JbnB1dChtX3BDb250ZXh0LCBqcGVnX3NyY19idWYsIGpwZWdfc3JjX3NpemUpOw0KLSAgICBpZiAoIW1fYkdvdEhlYWRlcikgew0KLSAgICAgICAgaW50IHJldCA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0SnBlZ01vZHVsZSgpLT5SZWFkSGVhZGVyKG1fcENvbnRleHQsICZtX1dpZHRoLCAmbV9IZWlnaHQsICZtX25Db21wcyk7DQotICAgICAgICBpbnQgbGVmdF9zaXplID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRKcGVnTW9kdWxlKCktPkdldEF2YWlsSW5wdXQobV9wQ29udGV4dCk7DQotICAgICAgICBpZiAocmV0ID09IDEpIHsNCi0gICAgICAgICAgICBSZXBvcnRFT0YobGVmdF9zaXplKTsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBpZiAocmV0ID09IDIpIHsNCi0gICAgICAgICAgICBtX0lucHV0QnVmLkFwcGVuZEJsb2NrKGpwZWdfc3JjX2J1ZiArIGpwZWdfc3JjX3NpemUgLSBsZWZ0X3NpemUsIGxlZnRfc2l6ZSk7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRKcGVnTW9kdWxlKCktPlN0YXJ0U2NhbmxpbmUobV9wQ29udGV4dCwgMSk7DQotICAgICAgICBtX2JHb3RIZWFkZXIgPSBUUlVFOw0KLSAgICAgICAgbV9QaXRjaCA9IG1fV2lkdGggKiBtX25Db21wczsNCi0gICAgfQ0KLSAgICBpZiAobV9wU2NhbmxpbmUgPT0gTlVMTCkgew0KLSAgICAgICAgbV9wU2NhbmxpbmUgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1BpdGNoICsgNCk7DQotICAgIH0NCi0gICAgd2hpbGUgKDEpIHsNCi0gICAgICAgIGlmICghQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRKcGVnTW9kdWxlKCktPlJlYWRTY2FubGluZShtX3BDb250ZXh0LCBtX3BTY2FubGluZSkpIHsNCi0gICAgICAgICAgICBpbnQgbGVmdF9zaXplID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRKcGVnTW9kdWxlKCktPkdldEF2YWlsSW5wdXQobV9wQ29udGV4dCk7DQotICAgICAgICAgICAgbV9JbnB1dEJ1Zi5BcHBlbmRCbG9jayhqcGVnX3NyY19idWYgKyBqcGVnX3NyY19zaXplIC0gbGVmdF9zaXplLCBsZWZ0X3NpemUpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdF9idWYuQXBwZW5kQmxvY2sobV9wU2NhbmxpbmUsIG1fUGl0Y2gpOw0KLSAgICAgICAgbV9pTGluZSArKzsNCi0gICAgICAgIGlmIChtX2lMaW5lID09IG1fSGVpZ2h0KSB7DQotICAgICAgICAgICAgUmVwb3J0RU9GKENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0SnBlZ01vZHVsZSgpLT5HZXRBdmFpbElucHV0KG1fcENvbnRleHQpKTsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgIH0NCi19DQotQ1BERl9GYXhGaWx0ZXI6OkNQREZfRmF4RmlsdGVyKCkNCi17DQotICAgIG1fRW5jb2RpbmcgPSAwOw0KLSAgICBtX2JFbmRPZkxpbmUgPSBGQUxTRTsNCi0gICAgbV9iQnl0ZUFsaWduID0gRkFMU0U7DQotICAgIG1fYkJsYWNrID0gRkFMU0U7DQotICAgIG1fblJvd3MgPSAwOw0KLSAgICBtX25Db2x1bW5zID0gMDsNCi0gICAgbV9QaXRjaCA9IDA7DQotICAgIG1fcFNjYW5saW5lQnVmID0gTlVMTDsNCi0gICAgbV9wUmVmQnVmID0gTlVMTDsNCi0gICAgbV9pUm93ID0gMDsNCi0gICAgbV9JbnB1dEJpdFBvcyA9IDA7DQotfQ0KLUNQREZfRmF4RmlsdGVyOjp+Q1BERl9GYXhGaWx0ZXIoKQ0KLXsNCi0gICAgaWYgKG1fcFNjYW5saW5lQnVmKSB7DQotICAgICAgICBGWF9GcmVlKG1fcFNjYW5saW5lQnVmKTsNCi0gICAgfQ0KLSAgICBpZiAobV9wUmVmQnVmKSB7DQotICAgICAgICBGWF9GcmVlKG1fcFJlZkJ1Zik7DQotICAgIH0NCi19DQotRlhfQk9PTCBDUERGX0ZheEZpbHRlcjo6SW5pdGlhbGl6ZShpbnQgRW5jb2RpbmcsIGludCBiRW5kT2ZMaW5lLCBpbnQgYkJ5dGVBbGlnbiwgaW50IGJCbGFjaywgaW50IG5Sb3dzLCBpbnQgbkNvbHVtbnMpDQotew0KLSAgICBtX0VuY29kaW5nID0gRW5jb2Rpbmc7DQotICAgIG1fYkVuZE9mTGluZSA9IGJFbmRPZkxpbmU7DQotICAgIG1fYkJ5dGVBbGlnbiA9IGJCeXRlQWxpZ247DQotICAgIG1fYkJsYWNrID0gYkJsYWNrOw0KLSAgICBtX25Sb3dzID0gblJvd3M7DQotICAgIG1fbkNvbHVtbnMgPSBuQ29sdW1uczsNCi0gICAgbV9QaXRjaCA9IChtX25Db2x1bW5zICsgNykgLyA4Ow0KLSAgICBtX3BTY2FubGluZUJ1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIG1fUGl0Y2gpOw0KLSAgICBtX3BSZWZCdWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1BpdGNoKTsNCi0gICAgRlhTWVNfbWVtc2V0OChtX3BTY2FubGluZUJ1ZiwgMHhmZiwgbV9QaXRjaCk7DQotICAgIEZYU1lTX21lbXNldDgobV9wUmVmQnVmLCAweGZmLCBtX1BpdGNoKTsNCi0gICAgbV9pUm93ID0gMDsNCi0gICAgbV9JbnB1dEJpdFBvcyA9IDA7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi12b2lkIENQREZfRmF4RmlsdGVyOjp2X0ZpbHRlckluKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKQ0KLXsNCi0gICAgRlhfTFBDQllURSBmYXhfc3JjX2J1ZjsNCi0gICAgRlhfRFdPUkQgZmF4X3NyY19zaXplOw0KLSAgICBDRlhfQmluYXJ5QnVmIHRlbXBfYnVmOw0KLSAgICBpbnQgYml0cG9zOw0KLSAgICBpZiAobV9JbnB1dEJ1Zi5HZXRTaXplKCkpIHsNCi0gICAgICAgIHRlbXBfYnVmLkVzdGltYXRlU2l6ZShtX0lucHV0QnVmLkdldFNpemUoKSArIHNyY19zaXplKTsNCi0gICAgICAgIHRlbXBfYnVmLkFwcGVuZEJsb2NrKG1fSW5wdXRCdWYuR2V0QnVmZmVyKCksIG1fSW5wdXRCdWYuR2V0U2l6ZSgpKTsNCi0gICAgICAgIG1fSW5wdXRCdWYuQ2xlYXIoKTsNCi0gICAgICAgIHRlbXBfYnVmLkFwcGVuZEJsb2NrKHNyY19idWYsIHNyY19zaXplKTsNCi0gICAgICAgIGZheF9zcmNfYnVmID0gdGVtcF9idWYuR2V0QnVmZmVyKCk7DQotICAgICAgICBmYXhfc3JjX3NpemUgPSB0ZW1wX2J1Zi5HZXRTaXplKCk7DQotICAgICAgICBiaXRwb3MgPSBtX0lucHV0Qml0UG9zOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZmF4X3NyY19idWYgPSBzcmNfYnVmOw0KLSAgICAgICAgZmF4X3NyY19zaXplID0gc3JjX3NpemU7DQotICAgICAgICBiaXRwb3MgPSAwOw0KLSAgICB9DQotICAgIFByb2Nlc3NEYXRhKGZheF9zcmNfYnVmLCBmYXhfc3JjX3NpemUsIGJpdHBvcywgRkFMU0UsIGRlc3RfYnVmKTsNCi0gICAgaW50IGxlZnRfYml0cyA9IGZheF9zcmNfc2l6ZSAqIDggLSBiaXRwb3M7DQotICAgIG1fSW5wdXRCdWYuQXBwZW5kQmxvY2soZmF4X3NyY19idWYgKyBiaXRwb3MgLyA4LCAobGVmdF9iaXRzICsgNykgLyA4KTsNCi0gICAgbV9JbnB1dEJpdFBvcyA9IGJpdHBvcyAlIDg7DQotfQ0KLXZvaWQgQ1BERl9GYXhGaWx0ZXI6OnZfRmlsdGVyRmluaXNoKENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKQ0KLXsNCi0gICAgUHJvY2Vzc0RhdGEobV9JbnB1dEJ1Zi5HZXRCdWZmZXIoKSwgbV9JbnB1dEJ1Zi5HZXRTaXplKCksIG1fSW5wdXRCaXRQb3MsIFRSVUUsIGRlc3RfYnVmKTsNCi19DQotRlhfQk9PTCBfRmF4U2tpcEVPTChjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBpbnQgYml0c2l6ZSwgaW50JiBiaXRwb3MpOw0KLUZYX0JPT0wgX0ZheEc0R2V0Um93KGNvbnN0IEZYX0JZVEUqIHNyY19idWYsIGludCBiaXRzaXplLCBpbnQmIGJpdHBvcywgRlhfTFBCWVRFIGRlc3RfYnVmLCBjb25zdCBGWF9CWVRFKiByZWZfYnVmLCBpbnQgY29sdW1ucyk7DQotRlhfQk9PTCBfRmF4R2V0MURMaW5lKGNvbnN0IEZYX0JZVEUqIHNyY19idWYsIGludCBiaXRzaXplLCBpbnQmIGJpdHBvcywgRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQgY29sdW1ucyk7DQotdm9pZCBDUERGX0ZheEZpbHRlcjo6UHJvY2Vzc0RhdGEoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50JiBiaXRwb3MsIEZYX0JPT0wgYkZpbmlzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1ZikNCi17DQotICAgIGludCBiaXRzaXplID0gc3JjX3NpemUgKiA4Ow0KLSAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgaWYgKChiaXRzaXplIDwgYml0cG9zICsgMjU2KSAmJiAhYkZpbmlzaCkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBzdGFydF9iaXRwb3MgPSBiaXRwb3M7DQotICAgICAgICBGWFNZU19tZW1zZXQ4KG1fcFNjYW5saW5lQnVmLCAweGZmLCBtX1BpdGNoKTsNCi0gICAgICAgIGlmICghUmVhZExpbmUoc3JjX2J1ZiwgYml0c2l6ZSwgYml0cG9zKSkgew0KLSAgICAgICAgICAgIGJpdHBvcyA9IHN0YXJ0X2JpdHBvczsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9FbmNvZGluZykgew0KLSAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcFJlZkJ1ZiwgbV9wU2NhbmxpbmVCdWYsIG1fUGl0Y2gpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fYkJsYWNrKSB7DQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX1BpdGNoOyBpICsrKSB7DQotICAgICAgICAgICAgICAgIG1fcFNjYW5saW5lQnVmW2ldID0gfm1fcFNjYW5saW5lQnVmW2ldOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGRlc3RfYnVmLkFwcGVuZEJsb2NrKG1fcFNjYW5saW5lQnVmLCBtX1BpdGNoKTsNCi0gICAgICAgIG1faVJvdyArKzsNCi0gICAgICAgIGlmIChtX2lSb3cgPT0gbV9uUm93cykgew0KLSAgICAgICAgICAgIFJlcG9ydEVPRihzcmNfc2l6ZSAtIChiaXRwb3MgKyA3KSAvIDgpOw0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1GWF9CT09MIENQREZfRmF4RmlsdGVyOjpSZWFkTGluZShGWF9MUENCWVRFIHNyY19idWYsIGludCBiaXRzaXplLCBpbnQmIGJpdHBvcykNCi17DQotICAgIGlmICghX0ZheFNraXBFT0woc3JjX2J1ZiwgYml0c2l6ZSwgYml0cG9zKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYX0JPT0wgcmV0Ow0KLSAgICBpZiAobV9FbmNvZGluZyA8IDApIHsNCi0gICAgICAgIHJldCA9IF9GYXhHNEdldFJvdyhzcmNfYnVmLCBiaXRzaXplLCBiaXRwb3MsIG1fcFNjYW5saW5lQnVmLCBtX3BSZWZCdWYsIG1fbkNvbHVtbnMpOw0KLSAgICB9IGVsc2UgaWYgKG1fRW5jb2RpbmcgPT0gMCkgew0KLSAgICAgICAgcmV0ID0gX0ZheEdldDFETGluZShzcmNfYnVmLCBiaXRzaXplLCBiaXRwb3MsIG1fcFNjYW5saW5lQnVmLCBtX25Db2x1bW5zKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGlmIChiaXRwb3MgPT0gYml0c2l6ZSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0JPT0wgYk5leHQxRCA9IHNyY19idWZbYml0cG9zIC8gOF0gJiAoMSA8PCAoNyAtIGJpdHBvcyAlIDgpKTsNCi0gICAgICAgIGJpdHBvcyArKzsNCi0gICAgICAgIGlmIChiTmV4dDFEKSB7DQotICAgICAgICAgICAgcmV0ID0gX0ZheEdldDFETGluZShzcmNfYnVmLCBiaXRzaXplLCBiaXRwb3MsIG1fcFNjYW5saW5lQnVmLCBtX25Db2x1bW5zKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcmV0ID0gX0ZheEc0R2V0Um93KHNyY19idWYsIGJpdHNpemUsIGJpdHBvcywgbV9wU2NhbmxpbmVCdWYsIG1fcFJlZkJ1ZiwgbV9uQ29sdW1ucyk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKCFyZXQpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAobV9iRW5kT2ZMaW5lKQ0KLSAgICAgICAgaWYgKCFfRmF4U2tpcEVPTChzcmNfYnVmLCBiaXRzaXplLCBiaXRwb3MpKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICBpZiAobV9iQnl0ZUFsaWduKSB7DQotICAgICAgICBiaXRwb3MgPSAoYml0cG9zICsgNykgLyA4ICogODsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2Z4X3psaWIuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYXJzZXIuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCIKKyNpbmNsdWRlICJmaWx0ZXJzX2ludC5oIgorQ0ZYX0RhdGFGaWx0ZXI6OkNGWF9EYXRhRmlsdGVyKCkKK3sKKyAgICBtX2JFT0YgPSBGQUxTRTsKKyAgICBtX3BEZXN0RmlsdGVyID0gTlVMTDsKKyAgICBtX1NyY1BvcyA9IDA7Cit9CitDRlhfRGF0YUZpbHRlcjo6fkNGWF9EYXRhRmlsdGVyKCkKK3sKKyAgICBpZiAobV9wRGVzdEZpbHRlcikgeworICAgICAgICBkZWxldGUgbV9wRGVzdEZpbHRlcjsKKyAgICB9Cit9Cit2b2lkIENGWF9EYXRhRmlsdGVyOjpTZXREZXN0RmlsdGVyKENGWF9EYXRhRmlsdGVyKiBwRmlsdGVyKQoreworICAgIGlmIChtX3BEZXN0RmlsdGVyKSB7CisgICAgICAgIG1fcERlc3RGaWx0ZXItPlNldERlc3RGaWx0ZXIocEZpbHRlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wRGVzdEZpbHRlciA9IHBGaWx0ZXI7CisgICAgfQorfQordm9pZCBDRlhfRGF0YUZpbHRlcjo6RmlsdGVySW4oRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpCit7CisgICAgaWYgKG1fYkVPRikgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fU3JjUG9zICs9IHNyY19zaXplOworICAgIGlmIChtX3BEZXN0RmlsdGVyKSB7CisgICAgICAgIENGWF9CaW5hcnlCdWYgdGVtcF9idWY7CisgICAgICAgIHRlbXBfYnVmLkVzdGltYXRlU2l6ZShGUERGX0ZJTFRFUl9CVUZGRVJfU0laRSwgRlBERl9GSUxURVJfQlVGRkVSX1NJWkUpOworICAgICAgICB2X0ZpbHRlckluKHNyY19idWYsIHNyY19zaXplLCB0ZW1wX2J1Zik7CisgICAgICAgIG1fcERlc3RGaWx0ZXItPkZpbHRlckluKHRlbXBfYnVmLkdldEJ1ZmZlcigpLCB0ZW1wX2J1Zi5HZXRTaXplKCksIGRlc3RfYnVmKTsKKyAgICB9IGVsc2UgeworICAgICAgICB2X0ZpbHRlckluKHNyY19idWYsIHNyY19zaXplLCBkZXN0X2J1Zik7CisgICAgfQorfQordm9pZCBDRlhfRGF0YUZpbHRlcjo6RmlsdGVyRmluaXNoKENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKQoreworICAgIGlmIChtX3BEZXN0RmlsdGVyKSB7CisgICAgICAgIENGWF9CaW5hcnlCdWYgdGVtcF9idWY7CisgICAgICAgIHZfRmlsdGVyRmluaXNoKHRlbXBfYnVmKTsKKyAgICAgICAgaWYgKHRlbXBfYnVmLkdldFNpemUoKSkgeworICAgICAgICAgICAgbV9wRGVzdEZpbHRlci0+RmlsdGVySW4odGVtcF9idWYuR2V0QnVmZmVyKCksIHRlbXBfYnVmLkdldFNpemUoKSwgZGVzdF9idWYpOworICAgICAgICB9CisgICAgICAgIG1fcERlc3RGaWx0ZXItPkZpbHRlckZpbmlzaChkZXN0X2J1Zik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdl9GaWx0ZXJGaW5pc2goZGVzdF9idWYpOworICAgIH0KKyAgICBtX2JFT0YgPSBUUlVFOworfQordm9pZCBDRlhfRGF0YUZpbHRlcjo6UmVwb3J0RU9GKEZYX0RXT1JEIGxlZnRfaW5wdXQpCit7CisgICAgaWYgKG1fYkVPRikgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fYkVPRiA9IFRSVUU7CisgICAgbV9TcmNQb3MgLT0gbGVmdF9pbnB1dDsKK30KK0NGWF9EYXRhRmlsdGVyKiBGUERGX0NyZWF0ZUZpbHRlcihGWF9CU1RSIG5hbWUsIGNvbnN0IENQREZfRGljdGlvbmFyeSogcFBhcmFtLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgRlhfRFdPUkQgaWQgPSBuYW1lLkdldElEKCk7CisgICAgc3dpdGNoIChpZCkgeworICAgICAgICBjYXNlIEZYQlNUUl9JRCgnRicsICdsJywgJ2EnLCAndCcpOgorICAgICAgICBjYXNlIEZYQlNUUl9JRCgnRicsICdsJywgMCwgMCk6CisgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdMJywgJ1onLCAnVycsICdEJyk6CisgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdMJywgJ1onLCAnVycsIDApOiB7CisgICAgICAgICAgICAgICAgQ0ZYX0RhdGFGaWx0ZXIqIHBGaWx0ZXI7CisgICAgICAgICAgICAgICAgaWYgKGlkID09IEZYQlNUUl9JRCgnTCcsICdaJywgJ1cnLCAnRCcpIHx8IGlkID09IEZYQlNUUl9JRCgnTCcsICdaJywgJ1cnLCAwKSkgeworICAgICAgICAgICAgICAgICAgICBwRmlsdGVyID0gRlhfTkVXIENQREZfTHp3RmlsdGVyKHBQYXJhbS0+R2V0SW50ZWdlcigiRWFybHlDaGFuZ2UiLCAxKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcEZpbHRlciA9IEZYX05FVyBDUERGX0ZsYXRlRmlsdGVyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocFBhcmFtLT5HZXRJbnRlZ2VyKCJQcmVkaWN0b3IiLCAxKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgQ0ZYX0RhdGFGaWx0ZXIqIHBQcmVkaWN0b3IgPSBGWF9ORVcgQ1BERl9QcmVkaWN0b3JGaWx0ZXIocFBhcmFtLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJQcmVkaWN0b3IiKSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFBhcmFtLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJDb2xvcnMiKSwgMSksIHBQYXJhbS0+R2V0SW50ZWdlcihGWF9CU1RSQygiQml0c1BlckNvbXBvbmVudCIpLCA4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUGFyYW0tPkdldEludGVnZXIoRlhfQlNUUkMoIkNvbHVtbnMiKSwgMSkpOworICAgICAgICAgICAgICAgICAgICBwRmlsdGVyLT5TZXREZXN0RmlsdGVyKHBQcmVkaWN0b3IpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcEZpbHRlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0EnLCAnUycsICdDJywgJ0knKToKKyAgICAgICAgICAgIGlmIChuYW1lID09ICJBU0NJSUhleERlY29kZSIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfQXNjaWlIZXhGaWx0ZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfQXNjaWk4NUZpbHRlcjsKKyAgICAgICAgY2FzZSBGWEJTVFJfSUQoJ0EnLCAnSCcsICd4JywgMCk6CisgICAgICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfQXNjaWlIZXhGaWx0ZXI7CisgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdBJywgJzgnLCAnNScsIDApOgorICAgICAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX0FzY2lpODVGaWx0ZXI7CisgICAgICAgIGNhc2UgRlhCU1RSX0lEKCdSJywgJ3UnLCAnbicsICdMJyk6CisgICAgICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfUnVuTGVuRmlsdGVyOworICAgICAgICBjYXNlIEZYQlNUUl9JRCgnQycsICdDJywgJ0knLCAnVCcpOiB7CisgICAgICAgICAgICAgICAgaW50IEVuY29kaW5nID0gMDsKKyAgICAgICAgICAgICAgICBpbnQgYkVuZE9mTGluZSA9IEZBTFNFOworICAgICAgICAgICAgICAgIGludCBiQnl0ZUFsaWduID0gRkFMU0U7CisgICAgICAgICAgICAgICAgaW50IGJCbGFjayA9IEZBTFNFOworICAgICAgICAgICAgICAgIGludCBuUm93cyA9IDA7CisgICAgICAgICAgICAgICAgaW50IG5Db2x1bW5zID0gMTcyODsKKyAgICAgICAgICAgICAgICBpZiAocFBhcmFtKSB7CisgICAgICAgICAgICAgICAgICAgIEVuY29kaW5nID0gcFBhcmFtLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJLIikpOworICAgICAgICAgICAgICAgICAgICBiRW5kT2ZMaW5lID0gcFBhcmFtLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJFbmRPZkxpbmUiKSk7CisgICAgICAgICAgICAgICAgICAgIGJCeXRlQWxpZ24gPSBwUGFyYW0tPkdldEludGVnZXIoRlhfQlNUUkMoIkVuY29kZWRCeXRlQWxpZ24iKSk7CisgICAgICAgICAgICAgICAgICAgIGJCbGFjayA9IHBQYXJhbS0+R2V0SW50ZWdlcihGWF9CU1RSQygiQmxhY2tJczEiKSk7CisgICAgICAgICAgICAgICAgICAgIG5Db2x1bW5zID0gcFBhcmFtLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJDb2x1bW5zIiksIDE3MjgpOworICAgICAgICAgICAgICAgICAgICBuUm93cyA9IHBQYXJhbS0+R2V0SW50ZWdlcihGWF9CU1RSQygiUm93cyIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG5Db2x1bW5zID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbkNvbHVtbnMgPSB3aWR0aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG5Sb3dzID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgblJvd3MgPSBoZWlnaHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIENQREZfRmF4RmlsdGVyKiBwRmlsdGVyID0gRlhfTkVXIENQREZfRmF4RmlsdGVyKCk7CisgICAgICAgICAgICAgICAgcEZpbHRlci0+SW5pdGlhbGl6ZShFbmNvZGluZywgYkVuZE9mTGluZSwgYkJ5dGVBbGlnbiwgYkJsYWNrLCBuUm93cywgbkNvbHVtbnMpOworICAgICAgICAgICAgICAgIHJldHVybiBwRmlsdGVyOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIEZYQlNUUl9JRCgnRCcsICdDJywgJ1QnLCAnRCcpOgorICAgICAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX0pwZWdGaWx0ZXI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CitDRlhfRGF0YUZpbHRlciogX0ZQREZfQ3JlYXRlRmlsdGVyRnJvbURpY3QoQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCkKK3sKKyAgICBDUERGX09iamVjdCogcERlY29kZXIgPSBwRGljdC0+R2V0RWxlbWVudFZhbHVlKCJGaWx0ZXIiKTsKKyAgICBpZiAocERlY29kZXIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0ZYX0RhdGFGaWx0ZXIqIHBGaXJzdEZpbHRlciA9IE5VTEw7CisgICAgaW50IHdpZHRoID0gcERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIldpZHRoIikpLCBoZWlnaHQgPSBwRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiSGVpZ2h0IikpOworICAgIENQREZfT2JqZWN0KiBwUGFyYW1zID0gcERpY3QtPkdldEVsZW1lbnRWYWx1ZSgiRGVjb2RlUGFybXMiKTsKKyAgICBpZiAocERlY29kZXItPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsKKyAgICAgICAgaWYgKHBQYXJhbXMgJiYgcFBhcmFtcy0+R2V0VHlwZSgpICE9IFBERk9CSl9BUlJBWSkgeworICAgICAgICAgICAgcFBhcmFtcyA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8ICgoQ1BERl9BcnJheSopcERlY29kZXIpLT5HZXRDb3VudCgpOyBpICsrKSB7CisgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBuYW1lID0gKChDUERGX0FycmF5KilwRGVjb2RlciktPkdldFN0cmluZyhpKTsKKyAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcFBhcmFtID0gTlVMTDsKKyAgICAgICAgICAgIGlmIChwUGFyYW1zKSB7CisgICAgICAgICAgICAgICAgcFBhcmFtID0gKChDUERGX0FycmF5KilwUGFyYW1zKS0+R2V0RGljdChpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIENGWF9EYXRhRmlsdGVyKiBwRGVzdEZpbHRlciA9IEZQREZfQ3JlYXRlRmlsdGVyKG5hbWUsIHBQYXJhbSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBpZiAocERlc3RGaWx0ZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAocEZpcnN0RmlsdGVyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgcEZpcnN0RmlsdGVyID0gcERlc3RGaWx0ZXI7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcEZpcnN0RmlsdGVyLT5TZXREZXN0RmlsdGVyKHBEZXN0RmlsdGVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocFBhcmFtcyAmJiBwUGFyYW1zLT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgICAgIHBQYXJhbXMgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIHBGaXJzdEZpbHRlciA9IEZQREZfQ3JlYXRlRmlsdGVyKHBEZWNvZGVyLT5HZXRTdHJpbmcoKSwgKENQREZfRGljdGlvbmFyeSopcFBhcmFtcywgd2lkdGgsIGhlaWdodCk7CisgICAgfQorICAgIHJldHVybiBwRmlyc3RGaWx0ZXI7Cit9CitDUERGX1N0cmVhbUZpbHRlciogQ1BERl9TdHJlYW06OkdldFN0cmVhbUZpbHRlcihGWF9CT09MIGJSYXcpIGNvbnN0Cit7CisgICAgQ0ZYX0RhdGFGaWx0ZXIqIHBGaXJzdEZpbHRlciA9IE5VTEw7CisgICAgaWYgKG1fcENyeXB0b0hhbmRsZXIpIHsKKyAgICAgICAgcEZpcnN0RmlsdGVyID0gRlhfTkVXIENQREZfRGVjcnlwdEZpbHRlcihtX3BDcnlwdG9IYW5kbGVyLCBtX09iak51bSwgbV9HZW5OdW0pOworICAgIH0KKyAgICBpZiAoIWJSYXcpIHsKKyAgICAgICAgQ0ZYX0RhdGFGaWx0ZXIqIHBGaWx0ZXIgPSBfRlBERl9DcmVhdGVGaWx0ZXJGcm9tRGljdChtX3BEaWN0KTsKKyAgICAgICAgaWYgKHBGaWx0ZXIpIHsKKyAgICAgICAgICAgIGlmIChwRmlyc3RGaWx0ZXIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHBGaXJzdEZpbHRlciA9IHBGaWx0ZXI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBGaXJzdEZpbHRlci0+U2V0RGVzdEZpbHRlcihwRmlsdGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBDUERGX1N0cmVhbUZpbHRlciogcFN0cmVhbUZpbHRlciA9IEZYX05FVyBDUERGX1N0cmVhbUZpbHRlcjsKKyAgICBwU3RyZWFtRmlsdGVyLT5tX3BTdHJlYW0gPSB0aGlzOworICAgIHBTdHJlYW1GaWx0ZXItPm1fcEZpbHRlciA9IHBGaXJzdEZpbHRlcjsKKyAgICBwU3RyZWFtRmlsdGVyLT5tX3BCdWZmZXIgPSBOVUxMOworICAgIHBTdHJlYW1GaWx0ZXItPm1fU3JjT2Zmc2V0ID0gMDsKKyAgICByZXR1cm4gcFN0cmVhbUZpbHRlcjsKK30KK0NQREZfU3RyZWFtRmlsdGVyOjp+Q1BERl9TdHJlYW1GaWx0ZXIoKQoreworICAgIGlmIChtX3BGaWx0ZXIpIHsKKyAgICAgICAgZGVsZXRlIG1fcEZpbHRlcjsKKyAgICB9CisgICAgaWYgKG1fcEJ1ZmZlcikgeworICAgICAgICBkZWxldGUgbV9wQnVmZmVyOworICAgIH0KK30KKyNkZWZpbmUgRlBERl9GSUxURVJfQlVGRkVSX0lOX1NJWkUJRlBERl9GSUxURVJfQlVGRkVSX1NJWkUKK0ZYX0RXT1JEIENQREZfU3RyZWFtRmlsdGVyOjpSZWFkQmxvY2soRlhfTFBCWVRFIGJ1ZmZlciwgRlhfRFdPUkQgYnVmX3NpemUpCit7CisgICAgaWYgKG1fcEZpbHRlciA9PSBOVUxMKSB7CisgICAgICAgIEZYX0RXT1JEIHJlYWRfc2l6ZSA9IG1fcFN0cmVhbS0+R2V0UmF3U2l6ZSgpIC0gbV9TcmNPZmZzZXQ7CisgICAgICAgIGlmIChyZWFkX3NpemUgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlYWRfc2l6ZSA+IGJ1Zl9zaXplKSB7CisgICAgICAgICAgICByZWFkX3NpemUgPSBidWZfc2l6ZTsKKyAgICAgICAgfQorICAgICAgICBtX3BTdHJlYW0tPlJlYWRSYXdEYXRhKG1fU3JjT2Zmc2V0LCBidWZmZXIsIHJlYWRfc2l6ZSk7CisgICAgICAgIG1fU3JjT2Zmc2V0ICs9IHJlYWRfc2l6ZTsKKyAgICAgICAgcmV0dXJuIHJlYWRfc2l6ZTsKKyAgICB9CisgICAgRlhfRFdPUkQgcmVhZF9zaXplID0gMDsKKyAgICBpZiAobV9wQnVmZmVyKSB7CisgICAgICAgIHJlYWRfc2l6ZSA9IFJlYWRMZWZ0T3ZlcihidWZmZXIsIGJ1Zl9zaXplKTsKKyAgICAgICAgaWYgKHJlYWRfc2l6ZSA9PSBidWZfc2l6ZSkgeworICAgICAgICAgICAgcmV0dXJuIHJlYWRfc2l6ZTsKKyAgICAgICAgfQorICAgICAgICBidWZmZXIgKz0gcmVhZF9zaXplOworICAgICAgICBidWZfc2l6ZSAtPSByZWFkX3NpemU7CisgICAgfQorICAgIEFTU0VSVChtX3BCdWZmZXIgPT0gTlVMTCk7CisgICAgaWYgKG1fcEZpbHRlci0+SXNFT0YoKSkgeworICAgICAgICByZXR1cm4gcmVhZF9zaXplOworICAgIH0KKyAgICBtX3BCdWZmZXIgPSBGWF9ORVcgQ0ZYX0JpbmFyeUJ1ZjsKKyAgICBtX3BCdWZmZXItPkVzdGltYXRlU2l6ZShGUERGX0ZJTFRFUl9CVUZGRVJfU0laRSwgRlBERl9GSUxURVJfQlVGRkVSX1NJWkUpOworICAgIG1fQnVmT2Zmc2V0ID0gMDsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpbnQgc3JjX3NpemUgPSBtX3BTdHJlYW0tPkdldFJhd1NpemUoKSAtIG1fU3JjT2Zmc2V0OworICAgICAgICBpZiAoc3JjX3NpemUgPT0gMCkgeworICAgICAgICAgICAgbV9wRmlsdGVyLT5GaWx0ZXJGaW5pc2goKm1fcEJ1ZmZlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3JjX3NpemUgPiBGUERGX0ZJTFRFUl9CVUZGRVJfSU5fU0laRSkgeworICAgICAgICAgICAgc3JjX3NpemUgPSBGUERGX0ZJTFRFUl9CVUZGRVJfSU5fU0laRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1fcFN0cmVhbS0+UmVhZFJhd0RhdGEobV9TcmNPZmZzZXQsIG1fU3JjQnVmZmVyLCBzcmNfc2l6ZSkpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIG1fU3JjT2Zmc2V0ICs9IHNyY19zaXplOworICAgICAgICBtX3BGaWx0ZXItPkZpbHRlckluKG1fU3JjQnVmZmVyLCBzcmNfc2l6ZSwgKm1fcEJ1ZmZlcik7CisgICAgICAgIGlmIChtX3BCdWZmZXItPkdldFNpemUoKSA+PSAoaW50KWJ1Zl9zaXplKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVhZF9zaXplICsgUmVhZExlZnRPdmVyKGJ1ZmZlciwgYnVmX3NpemUpOworfQorRlhfRFdPUkQgQ1BERl9TdHJlYW1GaWx0ZXI6OlJlYWRMZWZ0T3ZlcihGWF9MUEJZVEUgYnVmZmVyLCBGWF9EV09SRCBidWZfc2l6ZSkKK3sKKyAgICBGWF9EV09SRCByZWFkX3NpemUgPSBtX3BCdWZmZXItPkdldFNpemUoKSAtIG1fQnVmT2Zmc2V0OworICAgIGlmIChyZWFkX3NpemUgPiBidWZfc2l6ZSkgeworICAgICAgICByZWFkX3NpemUgPSBidWZfc2l6ZTsKKyAgICB9CisgICAgRlhTWVNfbWVtY3B5MzIoYnVmZmVyLCBtX3BCdWZmZXItPkdldEJ1ZmZlcigpICsgbV9CdWZPZmZzZXQsIHJlYWRfc2l6ZSk7CisgICAgbV9CdWZPZmZzZXQgKz0gcmVhZF9zaXplOworICAgIGlmIChtX0J1Zk9mZnNldCA9PSAoRlhfRFdPUkQpbV9wQnVmZmVyLT5HZXRTaXplKCkpIHsKKyAgICAgICAgZGVsZXRlIG1fcEJ1ZmZlcjsKKyAgICAgICAgbV9wQnVmZmVyID0gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHJlYWRfc2l6ZTsKK30KK0NQREZfRGVjcnlwdEZpbHRlcjo6Q1BERl9EZWNyeXB0RmlsdGVyKENQREZfQ3J5cHRvSGFuZGxlciogcENyeXB0b0hhbmRsZXIsIEZYX0RXT1JEIG9iam51bSwgRlhfRFdPUkQgZ2VubnVtKQoreworICAgIG1fcENyeXB0b0hhbmRsZXIgPSBwQ3J5cHRvSGFuZGxlcjsKKyAgICBtX3BDb250ZXh0ID0gTlVMTDsKKyAgICBtX09iak51bSA9IG9iam51bTsKKyAgICBtX0dlbk51bSA9IGdlbm51bTsKK30KK0NQREZfRGVjcnlwdEZpbHRlcjo6fkNQREZfRGVjcnlwdEZpbHRlcigpCit7CisgICAgQ0ZYX0JpbmFyeUJ1ZiBidWY7CisgICAgaWYgKG1fcENvbnRleHQpIHsKKyAgICAgICAgbV9wQ3J5cHRvSGFuZGxlci0+RGVjcnlwdEZpbmlzaChtX3BDb250ZXh0LCBidWYpOworICAgIH0KK30KK3ZvaWQgQ1BERl9EZWNyeXB0RmlsdGVyOjp2X0ZpbHRlckluKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKQoreworICAgIGlmIChtX3BDb250ZXh0ID09IE5VTEwpIHsKKyAgICAgICAgbV9wQ29udGV4dCA9IG1fcENyeXB0b0hhbmRsZXItPkRlY3J5cHRTdGFydChtX09iak51bSwgbV9HZW5OdW0pOworICAgIH0KKyAgICBtX3BDcnlwdG9IYW5kbGVyLT5EZWNyeXB0U3RyZWFtKG1fcENvbnRleHQsIHNyY19idWYsIHNyY19zaXplLCBkZXN0X2J1Zik7Cit9Cit2b2lkIENQREZfRGVjcnlwdEZpbHRlcjo6dl9GaWx0ZXJGaW5pc2goQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpCit7CisgICAgbV9iRU9GID0gVFJVRTsKKyAgICBpZiAobV9wQ29udGV4dCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wQ3J5cHRvSGFuZGxlci0+RGVjcnlwdEZpbmlzaChtX3BDb250ZXh0LCBkZXN0X2J1Zik7CisgICAgbV9wQ29udGV4dCA9IE5VTEw7Cit9CitleHRlcm4gIkMiIHsKKyAgICBzdGF0aWMgdm9pZCogbXlfYWxsb2NfZnVuYyAodm9pZCogb3BhcXVlLCB1bnNpZ25lZCBpbnQgaXRlbXMsIHVuc2lnbmVkIGludCBzaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZYX0FsbG9jKEZYX0JZVEUsIGl0ZW1zICogc2l6ZSk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkICAgbXlfZnJlZV9mdW5jICAodm9pZCogb3BhcXVlLCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgRlhfRnJlZShhZGRyZXNzKTsKKyAgICB9CisgICAgdm9pZCogRlBERkFQSV9GbGF0ZUluaXQodm9pZCogKCphbGxvY19mdW5jKSh2b2lkKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpmcmVlX2Z1bmMpKHZvaWQqLCB2b2lkKikpOworICAgIHZvaWQgRlBERkFQSV9GbGF0ZUlucHV0KHZvaWQqIGNvbnRleHQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyY19idWYsIHVuc2lnbmVkIGludCBzcmNfc2l6ZSk7CisgICAgaW50IEZQREZBUElfRmxhdGVPdXRwdXQodm9pZCogY29udGV4dCwgdW5zaWduZWQgY2hhciogZGVzdF9idWYsIHVuc2lnbmVkIGludCBkZXN0X3NpemUpOworICAgIGludCBGUERGQVBJX0ZsYXRlR2V0QXZhaWxJbih2b2lkKiBjb250ZXh0KTsKKyAgICBpbnQgRlBERkFQSV9GbGF0ZUdldEF2YWlsT3V0KHZvaWQqIGNvbnRleHQpOworICAgIHZvaWQgRlBERkFQSV9GbGF0ZUVuZCh2b2lkKiBjb250ZXh0KTsKK30KK0NQREZfRmxhdGVGaWx0ZXI6OkNQREZfRmxhdGVGaWx0ZXIoKQoreworICAgIG1fcENvbnRleHQgPSBOVUxMOworfQorQ1BERl9GbGF0ZUZpbHRlcjo6fkNQREZfRmxhdGVGaWx0ZXIoKQoreworICAgIGlmIChtX3BDb250ZXh0KSB7CisgICAgICAgIEZQREZBUElfRmxhdGVFbmQobV9wQ29udGV4dCk7CisgICAgfQorfQordm9pZCBDUERGX0ZsYXRlRmlsdGVyOjp2X0ZpbHRlckluKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKQoreworICAgIGlmIChtX3BDb250ZXh0ID09IE5VTEwpIHsKKyAgICAgICAgbV9wQ29udGV4dCA9IEZQREZBUElfRmxhdGVJbml0KG15X2FsbG9jX2Z1bmMsIG15X2ZyZWVfZnVuYyk7CisgICAgfQorICAgIEZQREZBUElfRmxhdGVJbnB1dChtX3BDb250ZXh0LCBzcmNfYnVmLCBzcmNfc2l6ZSk7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaW50IHJldCA9IEZQREZBUElfRmxhdGVPdXRwdXQobV9wQ29udGV4dCwgbV9EZXN0QnVmZmVyLCBGUERGX0ZJTFRFUl9CVUZGRVJfU0laRSk7CisgICAgICAgIGludCBvdXRfc2l6ZSA9IEZQREZfRklMVEVSX0JVRkZFUl9TSVpFIC0gRlBERkFQSV9GbGF0ZUdldEF2YWlsT3V0KG1fcENvbnRleHQpOworICAgICAgICBkZXN0X2J1Zi5BcHBlbmRCbG9jayhtX0Rlc3RCdWZmZXIsIG91dF9zaXplKTsKKyAgICAgICAgaWYgKHJldCA9PSBaX0JVRl9FUlJPUikgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJldCAhPSBaX09LKSB7CisgICAgICAgICAgICBSZXBvcnRFT0YoRlBERkFQSV9GbGF0ZUdldEF2YWlsSW4obV9wQ29udGV4dCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CitDUERGX0x6d0ZpbHRlcjo6Q1BERl9MendGaWx0ZXIoRlhfQk9PTCBiRWFybHlDaGFuZ2UpCit7CisgICAgbV9iRWFybHlDaGFuZ2UgPSBiRWFybHlDaGFuZ2UgPyAxIDogMDsKKyAgICBtX0NvZGVMZW4gPSA5OworICAgIG1fbkNvZGVzID0gMDsKKyAgICBtX25MZWZ0Qml0cyA9IDA7CisgICAgbV9MZWZ0Qml0cyA9IDA7CisgICAgbV9PbGRDb2RlID0gKEZYX0RXT1JEKSAtIDE7Cit9Cit2b2lkIENQREZfTHp3RmlsdGVyOjp2X0ZpbHRlckluKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKQoreworICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBzcmNfc2l6ZTsgaSArKykgeworICAgICAgICBpZiAobV9uTGVmdEJpdHMgKyA4IDwgbV9Db2RlTGVuKSB7CisgICAgICAgICAgICBtX25MZWZ0Qml0cyArPSA4OworICAgICAgICAgICAgbV9MZWZ0Qml0cyA9IChtX0xlZnRCaXRzIDw8IDgpIHwgc3JjX2J1ZltpXTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEZYX0RXT1JEIG5ld19iaXRzID0gbV9Db2RlTGVuIC0gbV9uTGVmdEJpdHM7CisgICAgICAgIEZYX0RXT1JEIGNvZGUgPSAobV9MZWZ0Qml0cyA8PCBuZXdfYml0cykgfCAoc3JjX2J1ZltpXSA+PiAoOCAtIG5ld19iaXRzKSk7CisgICAgICAgIG1fbkxlZnRCaXRzID0gOCAtIG5ld19iaXRzOworICAgICAgICBtX0xlZnRCaXRzID0gc3JjX2J1ZltpXSAlICgxIDw8IG1fbkxlZnRCaXRzKTsKKyAgICAgICAgaWYgKGNvZGUgPCAyNTYpIHsKKyAgICAgICAgICAgIGRlc3RfYnVmLkFwcGVuZEJ5dGUoKEZYX0JZVEUpY29kZSk7CisgICAgICAgICAgICBtX0xhc3RDaGFyID0gKEZYX0JZVEUpY29kZTsKKyAgICAgICAgICAgIGlmIChtX09sZENvZGUgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICBBZGRDb2RlKG1fT2xkQ29kZSwgbV9MYXN0Q2hhcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX09sZENvZGUgPSBjb2RlOworICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gMjU2KSB7CisgICAgICAgICAgICBtX0NvZGVMZW4gPSA5OworICAgICAgICAgICAgbV9uQ29kZXMgPSAwOworICAgICAgICAgICAgbV9PbGRDb2RlID0gKEZYX0RXT1JEKSAtIDE7CisgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSAyNTcpIHsKKyAgICAgICAgICAgIFJlcG9ydEVPRihzcmNfc2l6ZSAtIGkgLSAxKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX09sZENvZGUgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBSZXBvcnRFT0Yoc3JjX3NpemUgLSBpIC0gMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9TdGFja0xlbiA9IDA7CisgICAgICAgICAgICBpZiAoY29kZSA+PSBtX25Db2RlcyArIDI1OCkgeworICAgICAgICAgICAgICAgIGlmIChtX1N0YWNrTGVuIDwgc2l6ZW9mKG1fRGVjb2RlU3RhY2spKSB7CisgICAgICAgICAgICAgICAgICAgIG1fRGVjb2RlU3RhY2tbbV9TdGFja0xlbisrXSA9IG1fTGFzdENoYXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIERlY29kZVN0cmluZyhtX09sZENvZGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBEZWNvZGVTdHJpbmcoY29kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXN0X2J1Zi5BcHBlbmRCbG9jayhOVUxMLCBtX1N0YWNrTGVuKTsKKyAgICAgICAgICAgIEZYX0xQQllURSBwT3V0cHV0ID0gZGVzdF9idWYuR2V0QnVmZmVyKCkgKyBkZXN0X2J1Zi5HZXRTaXplKCkgLSBtX1N0YWNrTGVuOworICAgICAgICAgICAgZm9yIChGWF9EV09SRCBjYyA9IDA7IGNjIDwgbV9TdGFja0xlbjsgY2MgKyspIHsKKyAgICAgICAgICAgICAgICBwT3V0cHV0W2NjXSA9IG1fRGVjb2RlU3RhY2tbbV9TdGFja0xlbiAtIGNjIC0gMV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX0xhc3RDaGFyID0gbV9EZWNvZGVTdGFja1ttX1N0YWNrTGVuIC0gMV07CisgICAgICAgICAgICBpZiAobV9PbGRDb2RlIDwgMjU2KSB7CisgICAgICAgICAgICAgICAgQWRkQ29kZShtX09sZENvZGUsIG1fTGFzdENoYXIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX09sZENvZGUgLSAyNTggPj0gbV9uQ29kZXMpIHsKKyAgICAgICAgICAgICAgICBSZXBvcnRFT0Yoc3JjX3NpemUgLSBpIC0gMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBZGRDb2RlKG1fT2xkQ29kZSwgbV9MYXN0Q2hhcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX09sZENvZGUgPSBjb2RlOworICAgICAgICB9CisgICAgfQorfQordm9pZCBDUERGX0x6d0ZpbHRlcjo6QWRkQ29kZShGWF9EV09SRCBwcmVmaXhfY29kZSwgRlhfQllURSBhcHBlbmRfY2hhcikKK3sKKyAgICBpZiAobV9uQ29kZXMgKyBtX2JFYXJseUNoYW5nZSA9PSA0MDk0KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9Db2RlQXJyYXlbbV9uQ29kZXMgKytdID0gKHByZWZpeF9jb2RlIDw8IDE2KSB8IGFwcGVuZF9jaGFyOworICAgIGlmIChtX25Db2RlcyArIG1fYkVhcmx5Q2hhbmdlID09IDUxMiAtIDI1OCkgeworICAgICAgICBtX0NvZGVMZW4gPSAxMDsKKyAgICB9IGVsc2UgaWYgKG1fbkNvZGVzICsgbV9iRWFybHlDaGFuZ2UgPT0gMTAyNCAtIDI1OCkgeworICAgICAgICBtX0NvZGVMZW4gPSAxMTsKKyAgICB9IGVsc2UgaWYgKG1fbkNvZGVzICsgbV9iRWFybHlDaGFuZ2UgPT0gMjA0OCAtIDI1OCkgeworICAgICAgICBtX0NvZGVMZW4gPSAxMjsKKyAgICB9Cit9Cit2b2lkIENQREZfTHp3RmlsdGVyOjpEZWNvZGVTdHJpbmcoRlhfRFdPUkQgY29kZSkKK3sKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpbnQgaW5kZXggPSBjb2RlIC0gMjU4OworICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IChpbnQpbV9uQ29kZXMpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIEZYX0RXT1JEIGRhdGEgPSBtX0NvZGVBcnJheVtpbmRleF07CisgICAgICAgIGlmIChtX1N0YWNrTGVuID49IHNpemVvZihtX0RlY29kZVN0YWNrKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fRGVjb2RlU3RhY2tbbV9TdGFja0xlbisrXSA9IChGWF9CWVRFKWRhdGE7CisgICAgICAgIGNvZGUgPSBkYXRhID4+IDE2OworICAgIH0KKyAgICBpZiAobV9TdGFja0xlbiA+PSBzaXplb2YobV9EZWNvZGVTdGFjaykpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX0RlY29kZVN0YWNrW21fU3RhY2tMZW4rK10gPSAoRlhfQllURSljb2RlOworfQorQ1BERl9QcmVkaWN0b3JGaWx0ZXI6OkNQREZfUHJlZGljdG9yRmlsdGVyKGludCBwcmVkaWN0b3IsIGludCBjb2xvcnMsIGludCBicGMsIGludCBjb2xzKQoreworICAgIG1fYlRpZmYgPSBwcmVkaWN0b3IgPCAxMDsKKyAgICBtX3BSZWZMaW5lID0gTlVMTDsKKyAgICBtX3BDdXJMaW5lID0gTlVMTDsKKyAgICBtX2lMaW5lID0gMDsKKyAgICBtX0xpbmVJblNpemUgPSAwOworICAgIG1fQnBwID0gKGNvbG9ycyAqIGJwYyArIDcpIC8gODsKKyAgICBtX1BpdGNoID0gKGNvbG9ycyAqIGJwYyAqIGNvbHMgKyA3KSAvIDg7CisgICAgaWYgKCFtX2JUaWZmKSB7CisgICAgICAgIG1fUGl0Y2ggKys7CisgICAgfQorfQorQ1BERl9QcmVkaWN0b3JGaWx0ZXI6On5DUERGX1ByZWRpY3RvckZpbHRlcigpCit7CisgICAgaWYgKG1fcEN1ckxpbmUpIHsKKyAgICAgICAgRlhfRnJlZShtX3BDdXJMaW5lKTsKKyAgICB9CisgICAgaWYgKG1fcFJlZkxpbmUpIHsKKyAgICAgICAgRlhfRnJlZShtX3BSZWZMaW5lKTsKKyAgICB9Cit9CitzdGF0aWMgRlhfQllURSBQYWV0aFByZWRpY3RvcihpbnQgYSwgaW50IGIsIGludCBjKQoreworICAgIGludCBwID0gYSArIGIgLSBjOworICAgIGludCBwYSA9IEZYU1lTX2FicyhwIC0gYSk7CisgICAgaW50IHBiID0gRlhTWVNfYWJzKHAgLSBiKTsKKyAgICBpbnQgcGMgPSBGWFNZU19hYnMocCAtIGMpOworICAgIGlmIChwYSA8PSBwYiAmJiBwYSA8PSBwYykgeworICAgICAgICByZXR1cm4gKEZYX0JZVEUpYTsKKyAgICB9CisgICAgaWYgKHBiIDw9IHBjKSB7CisgICAgICAgIHJldHVybiAoRlhfQllURSliOworICAgIH0KKyAgICByZXR1cm4gKEZYX0JZVEUpYzsKK30KK3N0YXRpYyB2b2lkIFBOR19QcmVkaWN0b3JMaW5lKEZYX0xQQllURSBjdXJfYnVmLCBGWF9MUEJZVEUgcmVmX2J1ZiwgaW50IHBpdGNoLCBpbnQgQnBwKQoreworICAgIEZYX0JZVEUgdGFnID0gY3VyX2J1ZlswXTsKKyAgICBpZiAodGFnID09IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjdXJfYnVmICsrOworICAgIGlmIChyZWZfYnVmKSB7CisgICAgICAgIHJlZl9idWYgKys7CisgICAgfQorICAgIGZvciAoaW50IGJ5dGUgPSAwOyBieXRlIDwgcGl0Y2g7IGJ5dGUgKyspIHsKKyAgICAgICAgRlhfQllURSByYXdfYnl0ZSA9IGN1cl9idWZbYnl0ZV07CisgICAgICAgIHN3aXRjaCAodGFnKSB7CisgICAgICAgICAgICBjYXNlIDE6CXsKKyAgICAgICAgICAgICAgICAgICAgRlhfQllURSBsZWZ0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGUgPj0gQnBwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gY3VyX2J1ZltieXRlIC0gQnBwXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjdXJfYnVmW2J5dGVdID0gcmF3X2J5dGUgKyBsZWZ0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIDI6IHsKKyAgICAgICAgICAgICAgICAgICAgRlhfQllURSB1cCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWZfYnVmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCA9IHJlZl9idWZbYnl0ZV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY3VyX2J1ZltieXRlXSA9IHJhd19ieXRlICsgdXA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgMzogeworICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIGxlZnQgPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZSA+PSBCcHApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBjdXJfYnVmW2J5dGUgLSBCcHBdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgdXAgPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAocmVmX2J1ZikgeworICAgICAgICAgICAgICAgICAgICAgICAgdXAgPSByZWZfYnVmW2J5dGVdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGN1cl9idWZbYnl0ZV0gPSByYXdfYnl0ZSArICh1cCArIGxlZnQpIC8gMjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSA0OiB7CisgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgbGVmdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChieXRlID49IEJwcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGN1cl9idWZbYnl0ZSAtIEJwcF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgRlhfQllURSB1cCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWZfYnVmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCA9IHJlZl9idWZbYnl0ZV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgRlhfQllURSB1cHBlcl9sZWZ0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGUgPj0gQnBwICYmIHJlZl9idWYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyX2xlZnQgPSByZWZfYnVmW2J5dGUgLSBCcHBdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGN1cl9idWZbYnl0ZV0gPSByYXdfYnl0ZSArIFBhZXRoUHJlZGljdG9yKGxlZnQsIHVwLCB1cHBlcl9sZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQordm9pZCBDUERGX1ByZWRpY3RvckZpbHRlcjo6dl9GaWx0ZXJJbihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1ZikKK3sKKyAgICBpZiAobV9wQ3VyTGluZSA9PSBOVUxMKSB7CisgICAgICAgIG1fcEN1ckxpbmUgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1BpdGNoKTsKKyAgICAgICAgaWYgKCFtX2JUaWZmKSB7CisgICAgICAgICAgICBtX3BSZWZMaW5lID0gRlhfQWxsb2MoRlhfQllURSwgbV9QaXRjaCk7CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgRlhfRFdPUkQgcmVhZF9zaXplID0gbV9QaXRjaCAtIG1fTGluZUluU2l6ZTsKKyAgICAgICAgaWYgKHJlYWRfc2l6ZSA+IHNyY19zaXplKSB7CisgICAgICAgICAgICByZWFkX3NpemUgPSBzcmNfc2l6ZTsKKyAgICAgICAgfQorICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BDdXJMaW5lICsgbV9MaW5lSW5TaXplLCBzcmNfYnVmLCByZWFkX3NpemUpOworICAgICAgICBtX0xpbmVJblNpemUgKz0gcmVhZF9zaXplOworICAgICAgICBpZiAobV9MaW5lSW5TaXplIDwgbV9QaXRjaCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc3JjX2J1ZiArPSByZWFkX3NpemU7CisgICAgICAgIHNyY19zaXplIC09IHJlYWRfc2l6ZTsKKyAgICAgICAgaWYgKG1fYlRpZmYpIHsKKyAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgYnl0ZSA9IG1fQnBwOyBieXRlIDwgbV9QaXRjaDsgYnl0ZSArKykgeworICAgICAgICAgICAgICAgIG1fcEN1ckxpbmVbYnl0ZV0gKz0gbV9wQ3VyTGluZVtieXRlIC0gbV9CcHBdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVzdF9idWYuQXBwZW5kQmxvY2sobV9wQ3VyTGluZSwgbV9QaXRjaCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBQTkdfUHJlZGljdG9yTGluZShtX3BDdXJMaW5lLCBtX2lMaW5lID8gbV9wUmVmTGluZSA6IE5VTEwsIG1fUGl0Y2ggLSAxLCBtX0JwcCk7CisgICAgICAgICAgICBkZXN0X2J1Zi5BcHBlbmRCbG9jayhtX3BDdXJMaW5lICsgMSwgbV9QaXRjaCAtIDEpOworICAgICAgICAgICAgbV9pTGluZSArKzsKKyAgICAgICAgICAgIEZYX0xQQllURSB0ZW1wID0gbV9wQ3VyTGluZTsKKyAgICAgICAgICAgIG1fcEN1ckxpbmUgPSBtX3BSZWZMaW5lOworICAgICAgICAgICAgbV9wUmVmTGluZSA9IHRlbXA7CisgICAgICAgIH0KKyAgICAgICAgbV9MaW5lSW5TaXplID0gMDsKKyAgICB9Cit9CitDUERGX0FzY2lpODVGaWx0ZXI6OkNQREZfQXNjaWk4NUZpbHRlcigpCit7CisgICAgbV9TdGF0ZSA9IDA7CisgICAgbV9DaGFyQ291bnQgPSAwOworfQorZXh0ZXJuIGNvbnN0IEZYX0xQQ1NUUiBfUERGX0NoYXJUeXBlOwordm9pZCBDUERGX0FzY2lpODVGaWx0ZXI6OnZfRmlsdGVySW4oRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpCit7CisgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHNyY19zaXplOyBpICsrKSB7CisgICAgICAgIEZYX0JZVEUgYnl0ZSA9IHNyY19idWZbaV07CisgICAgICAgIGlmIChfUERGX0NoYXJUeXBlW2J5dGVdID09ICdXJykgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChtX1N0YXRlKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgaWYgKGJ5dGUgPj0gJyEnICYmIGJ5dGUgPD0gJ3UnKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBkaWdpdCA9IGJ5dGUgLSAnISc7CisgICAgICAgICAgICAgICAgICAgIG1fQ3VyRFdvcmQgPSBkaWdpdDsKKyAgICAgICAgICAgICAgICAgICAgbV9DaGFyQ291bnQgPSAxOworICAgICAgICAgICAgICAgICAgICBtX1N0YXRlID0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGUgPT0gJ3onKSB7CisgICAgICAgICAgICAgICAgICAgIGludCB6ZXJvID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9idWYuQXBwZW5kQmxvY2soJnplcm8sIDQpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA9PSAnficpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9TdGF0ZSA9IDI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOiB7CisgICAgICAgICAgICAgICAgICAgIGlmIChieXRlID49ICchJyAmJiBieXRlIDw9ICd1JykgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRpZ2l0ID0gYnl0ZSAtICchJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fQ3VyRFdvcmQgPSBtX0N1ckRXb3JkICogODUgKyBkaWdpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fQ2hhckNvdW50ICsrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fQ2hhckNvdW50ID09IDUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9idWYuQXBwZW5kQnl0ZSgoRlhfQllURSkobV9DdXJEV29yZCA+PiAoMyAtIGkpICogOCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0YXRlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChieXRlID09ICd+JykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fQ2hhckNvdW50ID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IG1fQ2hhckNvdW50OyBpIDwgNTsgaSArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0N1ckRXb3JkID0gbV9DdXJEV29yZCAqIDg1ICsgODQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtX0NoYXJDb3VudCAtIDE7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9idWYuQXBwZW5kQnl0ZSgoRlhfQllURSkobV9DdXJEV29yZCA+PiAoMyAtIGkpICogOCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RhdGUgPSAyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICBpZiAoYnl0ZSA9PSAnPicpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVwb3J0RU9GKHNyY19zaXplIC0gaSAtIDEpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorQ1BERl9Bc2NpaUhleEZpbHRlcjo6Q1BERl9Bc2NpaUhleEZpbHRlcigpCit7CisgICAgbV9TdGF0ZSA9IDA7Cit9Cit2b2lkIENQREZfQXNjaWlIZXhGaWx0ZXI6OnZfRmlsdGVySW4oRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgQ0ZYX0JpbmFyeUJ1ZiYgZGVzdF9idWYpCit7CisgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHNyY19zaXplOyBpICsrKSB7CisgICAgICAgIEZYX0JZVEUgYnl0ZSA9IHNyY19idWZbaV07CisgICAgICAgIGlmIChfUERGX0NoYXJUeXBlW2J5dGVdID09ICdXJykgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaW50IGRpZ2l0OworICAgICAgICBpZiAoYnl0ZSA+PSAnMCcgJiYgYnl0ZSA8PSAnOScpIHsKKyAgICAgICAgICAgIGRpZ2l0ID0gYnl0ZSAtICcwJzsKKyAgICAgICAgfSBlbHNlIGlmIChieXRlID49ICdhJyAmJiBieXRlIDw9ICdmJykgeworICAgICAgICAgICAgZGlnaXQgPSBieXRlIC0gJ2EnICsgMTA7CisgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA+PSAnQScgJiYgYnl0ZSA8PSAnRicpIHsKKyAgICAgICAgICAgIGRpZ2l0ID0gYnl0ZSAtICdBJyArIDEwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fU3RhdGUpIHsKKyAgICAgICAgICAgICAgICBkZXN0X2J1Zi5BcHBlbmRCeXRlKG1fRmlyc3REaWdpdCAqIDE2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJlcG9ydEVPRihzcmNfc2l6ZSAtIGkgLSAxKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9TdGF0ZSA9PSAwKSB7CisgICAgICAgICAgICBtX0ZpcnN0RGlnaXQgPSBkaWdpdDsKKyAgICAgICAgICAgIG1fU3RhdGUgKys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZXN0X2J1Zi5BcHBlbmRCeXRlKG1fRmlyc3REaWdpdCAqIDE2ICsgZGlnaXQpOworICAgICAgICAgICAgbV9TdGF0ZSAtLTsKKyAgICAgICAgfQorICAgIH0KK30KK0NQREZfUnVuTGVuRmlsdGVyOjpDUERGX1J1bkxlbkZpbHRlcigpCit7CisgICAgbV9TdGF0ZSA9IDA7CisgICAgbV9Db3VudCA9IDA7Cit9Cit2b2lkIENQREZfUnVuTGVuRmlsdGVyOjp2X0ZpbHRlckluKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKQoreworICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBzcmNfc2l6ZTsgaSArKykgeworICAgICAgICBGWF9CWVRFIGJ5dGUgPSBzcmNfYnVmW2ldOworICAgICAgICBzd2l0Y2ggKG1fU3RhdGUpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBpZiAoYnl0ZSA8IDEyOCkgeworICAgICAgICAgICAgICAgICAgICBtX1N0YXRlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgbV9Db3VudCA9IGJ5dGUgKyAxOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA9PSAxMjgpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVwb3J0RU9GKHNyY19zaXplIC0gaSAtIDEpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbV9TdGF0ZSA9IDI7CisgICAgICAgICAgICAgICAgICAgIG1fQ291bnQgPSAyNTcgLSBieXRlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBkZXN0X2J1Zi5BcHBlbmRCeXRlKGJ5dGUpOworICAgICAgICAgICAgICAgIG1fQ291bnQgLS07CisgICAgICAgICAgICAgICAgaWYgKG1fQ291bnQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBtX1N0YXRlID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CXsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9idWYuQXBwZW5kQmxvY2soTlVMTCwgbV9Db3VudCk7CisgICAgICAgICAgICAgICAgICAgIEZYU1lTX21lbXNldDgoZGVzdF9idWYuR2V0QnVmZmVyKCkgKyBkZXN0X2J1Zi5HZXRTaXplKCkgLSBtX0NvdW50LCBieXRlLCBtX0NvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgbV9TdGF0ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KK0NQREZfSnBlZ0ZpbHRlcjo6Q1BERl9KcGVnRmlsdGVyKCkKK3sKKyAgICBtX3BDb250ZXh0ID0gTlVMTDsKKyAgICBtX2JHb3RIZWFkZXIgPSBGQUxTRTsKKyAgICBtX3BTY2FubGluZSA9IE5VTEw7CisgICAgbV9pTGluZSA9IDA7Cit9CitDUERGX0pwZWdGaWx0ZXI6On5DUERGX0pwZWdGaWx0ZXIoKQoreworICAgIGlmIChtX3BTY2FubGluZSkgeworICAgICAgICBGWF9GcmVlKG1fcFNjYW5saW5lKTsKKyAgICB9CisgICAgaWYgKG1fcENvbnRleHQpIHsKKyAgICAgICAgQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRKcGVnTW9kdWxlKCktPkZpbmlzaChtX3BDb250ZXh0KTsKKyAgICB9Cit9Cit2b2lkIENQREZfSnBlZ0ZpbHRlcjo6dl9GaWx0ZXJJbihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1ZikKK3sKKyAgICBpZiAobV9wQ29udGV4dCA9PSBOVUxMKSB7CisgICAgICAgIG1fcENvbnRleHQgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldEpwZWdNb2R1bGUoKS0+U3RhcnQoKTsKKyAgICB9CisgICAgRlhfTFBDQllURSBqcGVnX3NyY19idWY7CisgICAgRlhfRFdPUkQganBlZ19zcmNfc2l6ZTsKKyAgICBDRlhfQmluYXJ5QnVmIHRlbXBfYnVmOworICAgIGlmIChtX0lucHV0QnVmLkdldFNpemUoKSkgeworICAgICAgICB0ZW1wX2J1Zi5Fc3RpbWF0ZVNpemUobV9JbnB1dEJ1Zi5HZXRTaXplKCkgKyBzcmNfc2l6ZSk7CisgICAgICAgIHRlbXBfYnVmLkFwcGVuZEJsb2NrKG1fSW5wdXRCdWYuR2V0QnVmZmVyKCksIG1fSW5wdXRCdWYuR2V0U2l6ZSgpKTsKKyAgICAgICAgbV9JbnB1dEJ1Zi5DbGVhcigpOworICAgICAgICB0ZW1wX2J1Zi5BcHBlbmRCbG9jayhzcmNfYnVmLCBzcmNfc2l6ZSk7CisgICAgICAgIGpwZWdfc3JjX2J1ZiA9IHRlbXBfYnVmLkdldEJ1ZmZlcigpOworICAgICAgICBqcGVnX3NyY19zaXplID0gdGVtcF9idWYuR2V0U2l6ZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGpwZWdfc3JjX2J1ZiA9IHNyY19idWY7CisgICAgICAgIGpwZWdfc3JjX3NpemUgPSBzcmNfc2l6ZTsKKyAgICB9CisgICAgQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRKcGVnTW9kdWxlKCktPklucHV0KG1fcENvbnRleHQsIGpwZWdfc3JjX2J1ZiwganBlZ19zcmNfc2l6ZSk7CisgICAgaWYgKCFtX2JHb3RIZWFkZXIpIHsKKyAgICAgICAgaW50IHJldCA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0SnBlZ01vZHVsZSgpLT5SZWFkSGVhZGVyKG1fcENvbnRleHQsICZtX1dpZHRoLCAmbV9IZWlnaHQsICZtX25Db21wcyk7CisgICAgICAgIGludCBsZWZ0X3NpemUgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldEpwZWdNb2R1bGUoKS0+R2V0QXZhaWxJbnB1dChtX3BDb250ZXh0KTsKKyAgICAgICAgaWYgKHJldCA9PSAxKSB7CisgICAgICAgICAgICBSZXBvcnRFT0YobGVmdF9zaXplKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAocmV0ID09IDIpIHsKKyAgICAgICAgICAgIG1fSW5wdXRCdWYuQXBwZW5kQmxvY2soanBlZ19zcmNfYnVmICsganBlZ19zcmNfc2l6ZSAtIGxlZnRfc2l6ZSwgbGVmdF9zaXplKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldEpwZWdNb2R1bGUoKS0+U3RhcnRTY2FubGluZShtX3BDb250ZXh0LCAxKTsKKyAgICAgICAgbV9iR290SGVhZGVyID0gVFJVRTsKKyAgICAgICAgbV9QaXRjaCA9IG1fV2lkdGggKiBtX25Db21wczsKKyAgICB9CisgICAgaWYgKG1fcFNjYW5saW5lID09IE5VTEwpIHsKKyAgICAgICAgbV9wU2NhbmxpbmUgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1BpdGNoICsgNCk7CisgICAgfQorICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmICghQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRKcGVnTW9kdWxlKCktPlJlYWRTY2FubGluZShtX3BDb250ZXh0LCBtX3BTY2FubGluZSkpIHsKKyAgICAgICAgICAgIGludCBsZWZ0X3NpemUgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldEpwZWdNb2R1bGUoKS0+R2V0QXZhaWxJbnB1dChtX3BDb250ZXh0KTsKKyAgICAgICAgICAgIG1fSW5wdXRCdWYuQXBwZW5kQmxvY2soanBlZ19zcmNfYnVmICsganBlZ19zcmNfc2l6ZSAtIGxlZnRfc2l6ZSwgbGVmdF9zaXplKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlc3RfYnVmLkFwcGVuZEJsb2NrKG1fcFNjYW5saW5lLCBtX1BpdGNoKTsKKyAgICAgICAgbV9pTGluZSArKzsKKyAgICAgICAgaWYgKG1faUxpbmUgPT0gbV9IZWlnaHQpIHsKKyAgICAgICAgICAgIFJlcG9ydEVPRihDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldEpwZWdNb2R1bGUoKS0+R2V0QXZhaWxJbnB1dChtX3BDb250ZXh0KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CitDUERGX0ZheEZpbHRlcjo6Q1BERl9GYXhGaWx0ZXIoKQoreworICAgIG1fRW5jb2RpbmcgPSAwOworICAgIG1fYkVuZE9mTGluZSA9IEZBTFNFOworICAgIG1fYkJ5dGVBbGlnbiA9IEZBTFNFOworICAgIG1fYkJsYWNrID0gRkFMU0U7CisgICAgbV9uUm93cyA9IDA7CisgICAgbV9uQ29sdW1ucyA9IDA7CisgICAgbV9QaXRjaCA9IDA7CisgICAgbV9wU2NhbmxpbmVCdWYgPSBOVUxMOworICAgIG1fcFJlZkJ1ZiA9IE5VTEw7CisgICAgbV9pUm93ID0gMDsKKyAgICBtX0lucHV0Qml0UG9zID0gMDsKK30KK0NQREZfRmF4RmlsdGVyOjp+Q1BERl9GYXhGaWx0ZXIoKQoreworICAgIGlmIChtX3BTY2FubGluZUJ1ZikgeworICAgICAgICBGWF9GcmVlKG1fcFNjYW5saW5lQnVmKTsKKyAgICB9CisgICAgaWYgKG1fcFJlZkJ1ZikgeworICAgICAgICBGWF9GcmVlKG1fcFJlZkJ1Zik7CisgICAgfQorfQorRlhfQk9PTCBDUERGX0ZheEZpbHRlcjo6SW5pdGlhbGl6ZShpbnQgRW5jb2RpbmcsIGludCBiRW5kT2ZMaW5lLCBpbnQgYkJ5dGVBbGlnbiwgaW50IGJCbGFjaywgaW50IG5Sb3dzLCBpbnQgbkNvbHVtbnMpCit7CisgICAgbV9FbmNvZGluZyA9IEVuY29kaW5nOworICAgIG1fYkVuZE9mTGluZSA9IGJFbmRPZkxpbmU7CisgICAgbV9iQnl0ZUFsaWduID0gYkJ5dGVBbGlnbjsKKyAgICBtX2JCbGFjayA9IGJCbGFjazsKKyAgICBtX25Sb3dzID0gblJvd3M7CisgICAgbV9uQ29sdW1ucyA9IG5Db2x1bW5zOworICAgIG1fUGl0Y2ggPSAobV9uQ29sdW1ucyArIDcpIC8gODsKKyAgICBtX3BTY2FubGluZUJ1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIG1fUGl0Y2gpOworICAgIG1fcFJlZkJ1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIG1fUGl0Y2gpOworICAgIEZYU1lTX21lbXNldDgobV9wU2NhbmxpbmVCdWYsIDB4ZmYsIG1fUGl0Y2gpOworICAgIEZYU1lTX21lbXNldDgobV9wUmVmQnVmLCAweGZmLCBtX1BpdGNoKTsKKyAgICBtX2lSb3cgPSAwOworICAgIG1fSW5wdXRCaXRQb3MgPSAwOworICAgIHJldHVybiBUUlVFOworfQordm9pZCBDUERGX0ZheEZpbHRlcjo6dl9GaWx0ZXJJbihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBDRlhfQmluYXJ5QnVmJiBkZXN0X2J1ZikKK3sKKyAgICBGWF9MUENCWVRFIGZheF9zcmNfYnVmOworICAgIEZYX0RXT1JEIGZheF9zcmNfc2l6ZTsKKyAgICBDRlhfQmluYXJ5QnVmIHRlbXBfYnVmOworICAgIGludCBiaXRwb3M7CisgICAgaWYgKG1fSW5wdXRCdWYuR2V0U2l6ZSgpKSB7CisgICAgICAgIHRlbXBfYnVmLkVzdGltYXRlU2l6ZShtX0lucHV0QnVmLkdldFNpemUoKSArIHNyY19zaXplKTsKKyAgICAgICAgdGVtcF9idWYuQXBwZW5kQmxvY2sobV9JbnB1dEJ1Zi5HZXRCdWZmZXIoKSwgbV9JbnB1dEJ1Zi5HZXRTaXplKCkpOworICAgICAgICBtX0lucHV0QnVmLkNsZWFyKCk7CisgICAgICAgIHRlbXBfYnVmLkFwcGVuZEJsb2NrKHNyY19idWYsIHNyY19zaXplKTsKKyAgICAgICAgZmF4X3NyY19idWYgPSB0ZW1wX2J1Zi5HZXRCdWZmZXIoKTsKKyAgICAgICAgZmF4X3NyY19zaXplID0gdGVtcF9idWYuR2V0U2l6ZSgpOworICAgICAgICBiaXRwb3MgPSBtX0lucHV0Qml0UG9zOworICAgIH0gZWxzZSB7CisgICAgICAgIGZheF9zcmNfYnVmID0gc3JjX2J1ZjsKKyAgICAgICAgZmF4X3NyY19zaXplID0gc3JjX3NpemU7CisgICAgICAgIGJpdHBvcyA9IDA7CisgICAgfQorICAgIFByb2Nlc3NEYXRhKGZheF9zcmNfYnVmLCBmYXhfc3JjX3NpemUsIGJpdHBvcywgRkFMU0UsIGRlc3RfYnVmKTsKKyAgICBpbnQgbGVmdF9iaXRzID0gZmF4X3NyY19zaXplICogOCAtIGJpdHBvczsKKyAgICBtX0lucHV0QnVmLkFwcGVuZEJsb2NrKGZheF9zcmNfYnVmICsgYml0cG9zIC8gOCwgKGxlZnRfYml0cyArIDcpIC8gOCk7CisgICAgbV9JbnB1dEJpdFBvcyA9IGJpdHBvcyAlIDg7Cit9Cit2b2lkIENQREZfRmF4RmlsdGVyOjp2X0ZpbHRlckZpbmlzaChDRlhfQmluYXJ5QnVmJiBkZXN0X2J1ZikKK3sKKyAgICBQcm9jZXNzRGF0YShtX0lucHV0QnVmLkdldEJ1ZmZlcigpLCBtX0lucHV0QnVmLkdldFNpemUoKSwgbV9JbnB1dEJpdFBvcywgVFJVRSwgZGVzdF9idWYpOworfQorRlhfQk9PTCBfRmF4U2tpcEVPTChjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBpbnQgYml0c2l6ZSwgaW50JiBiaXRwb3MpOworRlhfQk9PTCBfRmF4RzRHZXRSb3coY29uc3QgRlhfQllURSogc3JjX2J1ZiwgaW50IGJpdHNpemUsIGludCYgYml0cG9zLCBGWF9MUEJZVEUgZGVzdF9idWYsIGNvbnN0IEZYX0JZVEUqIHJlZl9idWYsIGludCBjb2x1bW5zKTsKK0ZYX0JPT0wgX0ZheEdldDFETGluZShjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBpbnQgYml0c2l6ZSwgaW50JiBiaXRwb3MsIEZYX0xQQllURSBkZXN0X2J1ZiwgaW50IGNvbHVtbnMpOwordm9pZCBDUERGX0ZheEZpbHRlcjo6UHJvY2Vzc0RhdGEoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50JiBiaXRwb3MsIEZYX0JPT0wgYkZpbmlzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9CaW5hcnlCdWYmIGRlc3RfYnVmKQoreworICAgIGludCBiaXRzaXplID0gc3JjX3NpemUgKiA4OworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmICgoYml0c2l6ZSA8IGJpdHBvcyArIDI1NikgJiYgIWJGaW5pc2gpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpbnQgc3RhcnRfYml0cG9zID0gYml0cG9zOworICAgICAgICBGWFNZU19tZW1zZXQ4KG1fcFNjYW5saW5lQnVmLCAweGZmLCBtX1BpdGNoKTsKKyAgICAgICAgaWYgKCFSZWFkTGluZShzcmNfYnVmLCBiaXRzaXplLCBiaXRwb3MpKSB7CisgICAgICAgICAgICBiaXRwb3MgPSBzdGFydF9iaXRwb3M7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fRW5jb2RpbmcpIHsKKyAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcFJlZkJ1ZiwgbV9wU2NhbmxpbmVCdWYsIG1fUGl0Y2gpOworICAgICAgICB9CisgICAgICAgIGlmIChtX2JCbGFjaykgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX1BpdGNoOyBpICsrKSB7CisgICAgICAgICAgICAgICAgbV9wU2NhbmxpbmVCdWZbaV0gPSB+bV9wU2NhbmxpbmVCdWZbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGVzdF9idWYuQXBwZW5kQmxvY2sobV9wU2NhbmxpbmVCdWYsIG1fUGl0Y2gpOworICAgICAgICBtX2lSb3cgKys7CisgICAgICAgIGlmIChtX2lSb3cgPT0gbV9uUm93cykgeworICAgICAgICAgICAgUmVwb3J0RU9GKHNyY19zaXplIC0gKGJpdHBvcyArIDcpIC8gOCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CitGWF9CT09MIENQREZfRmF4RmlsdGVyOjpSZWFkTGluZShGWF9MUENCWVRFIHNyY19idWYsIGludCBiaXRzaXplLCBpbnQmIGJpdHBvcykKK3sKKyAgICBpZiAoIV9GYXhTa2lwRU9MKHNyY19idWYsIGJpdHNpemUsIGJpdHBvcykpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWF9CT09MIHJldDsKKyAgICBpZiAobV9FbmNvZGluZyA8IDApIHsKKyAgICAgICAgcmV0ID0gX0ZheEc0R2V0Um93KHNyY19idWYsIGJpdHNpemUsIGJpdHBvcywgbV9wU2NhbmxpbmVCdWYsIG1fcFJlZkJ1ZiwgbV9uQ29sdW1ucyk7CisgICAgfSBlbHNlIGlmIChtX0VuY29kaW5nID09IDApIHsKKyAgICAgICAgcmV0ID0gX0ZheEdldDFETGluZShzcmNfYnVmLCBiaXRzaXplLCBiaXRwb3MsIG1fcFNjYW5saW5lQnVmLCBtX25Db2x1bW5zKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoYml0cG9zID09IGJpdHNpemUpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBGWF9CT09MIGJOZXh0MUQgPSBzcmNfYnVmW2JpdHBvcyAvIDhdICYgKDEgPDwgKDcgLSBiaXRwb3MgJSA4KSk7CisgICAgICAgIGJpdHBvcyArKzsKKyAgICAgICAgaWYgKGJOZXh0MUQpIHsKKyAgICAgICAgICAgIHJldCA9IF9GYXhHZXQxRExpbmUoc3JjX2J1ZiwgYml0c2l6ZSwgYml0cG9zLCBtX3BTY2FubGluZUJ1ZiwgbV9uQ29sdW1ucyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXQgPSBfRmF4RzRHZXRSb3coc3JjX2J1ZiwgYml0c2l6ZSwgYml0cG9zLCBtX3BTY2FubGluZUJ1ZiwgbV9wUmVmQnVmLCBtX25Db2x1bW5zKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIXJldCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChtX2JFbmRPZkxpbmUpCisgICAgICAgIGlmICghX0ZheFNraXBFT0woc3JjX2J1ZiwgYml0c2l6ZSwgYml0cG9zKSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgaWYgKG1fYkJ5dGVBbGlnbikgeworICAgICAgICBiaXRwb3MgPSAoYml0cG9zICsgNykgLyA4ICogODsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFyc2VyL2ZwZGZfcGFyc2VyX29iamVjdHMuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhcnNlci9mcGRmX3BhcnNlcl9vYmplY3RzLmNwcAppbmRleCA1M2NmODkyLi5iZDhiMTU3IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFyc2VyL2ZwZGZfcGFyc2VyX29iamVjdHMuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYXJzZXIvZnBkZl9wYXJzZXJfb2JqZWN0cy5jcHAKQEAgLTEsMTM0NCArMSwxMzQ0IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFyc2VyLmgiDQotdm9pZCBDUERGX09iamVjdDo6UmVsZWFzZSgpDQotew0KLSAgICBpZiAodGhpcyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKG1fT2JqTnVtKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRGVzdHJveSgpOw0KLX0NCi12b2lkIENQREZfT2JqZWN0OjpEZXN0cm95KCkNCi17DQotICAgIHN3aXRjaCAobV9UeXBlKSB7DQotICAgICAgICBjYXNlIFBERk9CSl9TVFJJTkc6DQotICAgICAgICAgICAgZGVsZXRlIChDUERGX1N0cmluZyopdGhpczsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgUERGT0JKX05BTUU6DQotICAgICAgICAgICAgZGVsZXRlIChDUERGX05hbWUqKXRoaXM7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIFBERk9CSl9BUlJBWToNCi0gICAgICAgICAgICBkZWxldGUgKENQREZfQXJyYXkqKXRoaXM7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIFBERk9CSl9ESUNUSU9OQVJZOg0KLSAgICAgICAgICAgIGRlbGV0ZSAoQ1BERl9EaWN0aW9uYXJ5Kil0aGlzOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBQREZPQkpfU1RSRUFNOg0KLSAgICAgICAgICAgIGRlbGV0ZSAoQ1BERl9TdHJlYW0qKXRoaXM7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBkZWZhdWx0Og0KLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzOw0KLSAgICB9DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENQREZfT2JqZWN0OjpHZXRTdHJpbmcoKSBjb25zdA0KLXsNCi0gICAgaWYgKHRoaXMgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKCk7DQotICAgIH0NCi0gICAgc3dpdGNoIChtX1R5cGUpIHsNCi0gICAgICAgIGNhc2UgUERGT0JKX0JPT0xFQU46DQotICAgICAgICAgICAgcmV0dXJuICgoQ1BERl9Cb29sZWFuKil0aGlzKS0+bV9iVmFsdWUgPyAidHJ1ZSIgOiAiZmFsc2UiOw0KLSAgICAgICAgY2FzZSBQREZPQkpfTlVNQkVSOg0KLSAgICAgICAgICAgIHJldHVybiAoKENQREZfTnVtYmVyKil0aGlzKS0+R2V0U3RyaW5nKCk7DQotICAgICAgICBjYXNlIFBERk9CSl9TVFJJTkc6DQotICAgICAgICAgICAgcmV0dXJuICgoQ1BERl9TdHJpbmcqKXRoaXMpLT5tX1N0cmluZzsNCi0gICAgICAgIGNhc2UgUERGT0JKX05BTUU6DQotICAgICAgICAgICAgcmV0dXJuICgoQ1BERl9OYW1lKil0aGlzKS0+bV9OYW1lOw0KLSAgICAgICAgY2FzZSBQREZPQkpfUkVGRVJFTkNFOiB7DQotICAgICAgICAgICAgICAgIENQREZfUmVmZXJlbmNlKiBwUmVmID0gKENQREZfUmVmZXJlbmNlKikoRlhfTFBWT0lEKXRoaXM7DQotICAgICAgICAgICAgICAgIGlmIChwUmVmLT5tX3BPYmpMaXN0ID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gcFJlZi0+bV9wT2JqTGlzdC0+R2V0SW5kaXJlY3RPYmplY3QocFJlZi0+bV9SZWZPYmpOdW0pOw0KLSAgICAgICAgICAgICAgICBpZiAocE9iaiA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICByZXR1cm4gcE9iai0+R2V0U3RyaW5nKCk7DQotICAgICAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZygpOw0KLX0NCi1DRlhfQnl0ZVN0cmluZ0MgQ1BERl9PYmplY3Q6OkdldENvbnN0U3RyaW5nKCkgY29uc3QNCi17DQotICAgIGlmICh0aGlzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0MoKTsNCi0gICAgfQ0KLSAgICBzd2l0Y2ggKG1fVHlwZSkgew0KLSAgICAgICAgY2FzZSBQREZPQkpfU1RSSU5HOg0KLSAgICAgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0MoKEZYX0xQQ0JZVEUpKChDUERGX1N0cmluZyopdGhpcyktPm1fU3RyaW5nLCAoKENQREZfU3RyaW5nKil0aGlzKS0+bV9TdHJpbmcuR2V0TGVuZ3RoKCkpOw0KLSAgICAgICAgY2FzZSBQREZPQkpfTkFNRToNCi0gICAgICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmdDKChGWF9MUENCWVRFKSgoQ1BERl9OYW1lKil0aGlzKS0+bV9OYW1lLCAoKENQREZfTmFtZSopdGhpcyktPm1fTmFtZS5HZXRMZW5ndGgoKSk7DQotICAgICAgICBjYXNlIFBERk9CSl9SRUZFUkVOQ0U6IHsNCi0gICAgICAgICAgICAgICAgQ1BERl9SZWZlcmVuY2UqIHBSZWYgPSAoQ1BERl9SZWZlcmVuY2UqKShGWF9MUFZPSUQpdGhpczsNCi0gICAgICAgICAgICAgICAgaWYgKHBSZWYtPm1fcE9iakxpc3QgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBPYmogPSBwUmVmLT5tX3BPYmpMaXN0LT5HZXRJbmRpcmVjdE9iamVjdChwUmVmLT5tX1JlZk9iak51bSk7DQotICAgICAgICAgICAgICAgIGlmIChwT2JqID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0MoKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICByZXR1cm4gcE9iai0+R2V0Q29uc3RTdHJpbmcoKTsNCi0gICAgICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nQygpOw0KLX0NCi1GWF9GTE9BVCBDUERGX09iamVjdDo6R2V0TnVtYmVyKCkgY29uc3QNCi17DQotICAgIGlmICh0aGlzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIHN3aXRjaCAobV9UeXBlKSB7DQotICAgICAgICBjYXNlIFBERk9CSl9OVU1CRVI6DQotICAgICAgICAgICAgcmV0dXJuICgoQ1BERl9OdW1iZXIqKXRoaXMpLT5HZXROdW1iZXIoKTsNCi0gICAgICAgIGNhc2UgUERGT0JKX1JFRkVSRU5DRTogew0KLSAgICAgICAgICAgICAgICBDUERGX1JlZmVyZW5jZSogcFJlZiA9IChDUERGX1JlZmVyZW5jZSopKEZYX0xQVk9JRCl0aGlzOw0KLSAgICAgICAgICAgICAgICBpZiAocFJlZi0+bV9wT2JqTGlzdCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBDUERGX09iamVjdCogcE9iaiA9IHBSZWYtPm1fcE9iakxpc3QtPkdldEluZGlyZWN0T2JqZWN0KHBSZWYtPm1fUmVmT2JqTnVtKTsNCi0gICAgICAgICAgICAgICAgaWYgKHBPYmogPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBPYmotPkdldE51bWJlcigpOw0KLSAgICAgICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gMDsNCi19DQotRlhfRkxPQVQgQ1BERl9PYmplY3Q6OkdldE51bWJlcjE2KCkgY29uc3QNCi17DQotICAgIHJldHVybiBHZXROdW1iZXIoKTsNCi19DQotaW50IENQREZfT2JqZWN0OjpHZXRJbnRlZ2VyKCkgY29uc3QNCi17DQotICAgIGlmICh0aGlzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIHN3aXRjaCAobV9UeXBlKSB7DQotICAgICAgICBjYXNlIFBERk9CSl9CT09MRUFOOg0KLSAgICAgICAgICAgIHJldHVybiAoKENQREZfQm9vbGVhbiopdGhpcyktPm1fYlZhbHVlOw0KLSAgICAgICAgY2FzZSBQREZPQkpfTlVNQkVSOg0KLSAgICAgICAgICAgIHJldHVybiAoKENQREZfTnVtYmVyKil0aGlzKS0+R2V0SW50ZWdlcigpOw0KLSAgICAgICAgY2FzZSBQREZPQkpfUkVGRVJFTkNFOiB7DQotICAgICAgICAgICAgICAgIENQREZfUmVmZXJlbmNlKiBwUmVmID0gKENQREZfUmVmZXJlbmNlKikoRlhfTFBWT0lEKXRoaXM7DQotICAgICAgICAgICAgICAgIFBBUlNFX0NPTlRFWFQgY29udGV4dDsNCi0gICAgICAgICAgICAgICAgRlhTWVNfbWVtc2V0MzIoJmNvbnRleHQsIDAsIHNpemVvZihQQVJTRV9DT05URVhUKSk7DQotICAgICAgICAgICAgICAgIGlmIChwUmVmLT5tX3BPYmpMaXN0ID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gcFJlZi0+bV9wT2JqTGlzdC0+R2V0SW5kaXJlY3RPYmplY3QocFJlZi0+bV9SZWZPYmpOdW0sICZjb250ZXh0KTsNCi0gICAgICAgICAgICAgICAgaWYgKHBPYmogPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBPYmotPkdldEludGVnZXIoKTsNCi0gICAgICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIDA7DQotfQ0KLUNQREZfRGljdGlvbmFyeSogQ1BERl9PYmplY3Q6OkdldERpY3QoKSBjb25zdA0KLXsNCi0gICAgaWYgKHRoaXMgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgc3dpdGNoIChtX1R5cGUpIHsNCi0gICAgICAgIGNhc2UgUERGT0JKX0RJQ1RJT05BUlk6DQotICAgICAgICAgICAgcmV0dXJuIChDUERGX0RpY3Rpb25hcnkqKXRoaXM7DQotICAgICAgICBjYXNlIFBERk9CSl9TVFJFQU06DQotICAgICAgICAgICAgcmV0dXJuICgoQ1BERl9TdHJlYW0qKXRoaXMpLT5HZXREaWN0KCk7DQotICAgICAgICBjYXNlIFBERk9CSl9SRUZFUkVOQ0U6IHsNCi0gICAgICAgICAgICAgICAgQ1BERl9SZWZlcmVuY2UqIHBSZWYgPSAoQ1BERl9SZWZlcmVuY2UqKXRoaXM7DQotICAgICAgICAgICAgICAgIGlmIChwUmVmLT5tX3BPYmpMaXN0ID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gcFJlZi0+bV9wT2JqTGlzdC0+R2V0SW5kaXJlY3RPYmplY3QocFJlZi0+bV9SZWZPYmpOdW0pOw0KLSAgICAgICAgICAgICAgICBpZiAocE9iaiA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICByZXR1cm4gcE9iai0+R2V0RGljdCgpOw0KLSAgICAgICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotQ1BERl9BcnJheSogQ1BERl9PYmplY3Q6OkdldEFycmF5KCkgY29uc3QNCi17DQotICAgIGlmICh0aGlzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmIChtX1R5cGUgPT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICByZXR1cm4gKENQREZfQXJyYXkqKXRoaXM7DQotICAgIH0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLXZvaWQgQ1BERl9PYmplY3Q6OlNldFN0cmluZyhjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyKQ0KLXsNCi0gICAgQVNTRVJUKHRoaXMgIT0gTlVMTCk7DQotICAgIHN3aXRjaCAobV9UeXBlKSB7DQotICAgICAgICBjYXNlIFBERk9CSl9CT09MRUFOOg0KLSAgICAgICAgICAgICgoQ1BERl9Cb29sZWFuKil0aGlzKS0+bV9iVmFsdWUgPSBzdHIgPT0gRlhfQlNUUkMoInRydWUiKSA/IDEgOiAwOw0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIGNhc2UgUERGT0JKX05VTUJFUjoNCi0gICAgICAgICAgICAoKENQREZfTnVtYmVyKil0aGlzKS0+U2V0U3RyaW5nKHN0cik7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgY2FzZSBQREZPQkpfU1RSSU5HOg0KLSAgICAgICAgICAgICgoQ1BERl9TdHJpbmcqKXRoaXMpLT5tX1N0cmluZyA9IHN0cjsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICBjYXNlIFBERk9CSl9OQU1FOg0KLSAgICAgICAgICAgICgoQ1BERl9OYW1lKil0aGlzKS0+bV9OYW1lID0gc3RyOw0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBBU1NFUlQoRkFMU0UpOw0KLX0NCi1pbnQgQ1BERl9PYmplY3Q6OkdldERpcmVjdFR5cGUoKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fVHlwZSAhPSBQREZPQkpfUkVGRVJFTkNFKSB7DQotICAgICAgICByZXR1cm4gbV9UeXBlOw0KLSAgICB9DQotICAgIENQREZfUmVmZXJlbmNlKiBwUmVmID0gKENQREZfUmVmZXJlbmNlKil0aGlzOw0KLSAgICByZXR1cm4gcFJlZi0+bV9wT2JqTGlzdC0+R2V0SW5kaXJlY3RUeXBlKHBSZWYtPm1fUmVmT2JqTnVtKTsNCi19DQotRlhfQk9PTCBDUERGX09iamVjdDo6SXNJZGVudGljYWwoQ1BERl9PYmplY3QqIHBPdGhlcikgY29uc3QNCi17DQotICAgIGlmICh0aGlzID09IHBPdGhlcikgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgaWYgKHRoaXMgPT0gTlVMTCB8fCBwT3RoZXIgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChwT3RoZXItPm1fVHlwZSAhPSBtX1R5cGUpIHsNCi0gICAgICAgIGlmIChtX1R5cGUgPT0gUERGT0JKX1JFRkVSRU5DRSkgew0KLSAgICAgICAgICAgIHJldHVybiBHZXREaXJlY3QoKS0+SXNJZGVudGljYWwocE90aGVyKTsNCi0gICAgICAgIH0gZWxzZSBpZiAocE90aGVyLT5tX1R5cGUgPT0gUERGT0JKX1JFRkVSRU5DRSkgew0KLSAgICAgICAgICAgIHJldHVybiBJc0lkZW50aWNhbChwT3RoZXItPkdldERpcmVjdCgpKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBzd2l0Y2ggKG1fVHlwZSkgew0KLSAgICAgICAgY2FzZSBQREZPQkpfQk9PTEVBTjoNCi0gICAgICAgICAgICByZXR1cm4gKCgoQ1BERl9Cb29sZWFuKil0aGlzKS0+SWRlbnRpY2FsKChDUERGX0Jvb2xlYW4qKXBPdGhlcikpOw0KLSAgICAgICAgY2FzZSBQREZPQkpfTlVNQkVSOg0KLSAgICAgICAgICAgIHJldHVybiAoKChDUERGX051bWJlciopdGhpcyktPklkZW50aWNhbCgoQ1BERl9OdW1iZXIqKXBPdGhlcikpOw0KLSAgICAgICAgY2FzZSBQREZPQkpfU1RSSU5HOg0KLSAgICAgICAgICAgIHJldHVybiAoKChDUERGX1N0cmluZyopdGhpcyktPklkZW50aWNhbCgoQ1BERl9TdHJpbmcqKXBPdGhlcikpOw0KLSAgICAgICAgY2FzZSBQREZPQkpfTkFNRToNCi0gICAgICAgICAgICByZXR1cm4gKCgoQ1BERl9OYW1lKil0aGlzKS0+SWRlbnRpY2FsKChDUERGX05hbWUqKXBPdGhlcikpOw0KLSAgICAgICAgY2FzZSBQREZPQkpfQVJSQVk6DQotICAgICAgICAgICAgcmV0dXJuICgoKENQREZfQXJyYXkqKXRoaXMpLT5JZGVudGljYWwoKENQREZfQXJyYXkqKXBPdGhlcikpOw0KLSAgICAgICAgY2FzZSBQREZPQkpfRElDVElPTkFSWToNCi0gICAgICAgICAgICByZXR1cm4gKCgoQ1BERl9EaWN0aW9uYXJ5Kil0aGlzKS0+SWRlbnRpY2FsKChDUERGX0RpY3Rpb25hcnkqKXBPdGhlcikpOw0KLSAgICAgICAgY2FzZSBQREZPQkpfTlVMTDoNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIGNhc2UgUERGT0JKX1NUUkVBTToNCi0gICAgICAgICAgICByZXR1cm4gKCgoQ1BERl9TdHJlYW0qKXRoaXMpLT5JZGVudGljYWwoKENQREZfU3RyZWFtKilwT3RoZXIpKTsNCi0gICAgICAgIGNhc2UgUERGT0JKX1JFRkVSRU5DRToNCi0gICAgICAgICAgICByZXR1cm4gKCgoQ1BERl9SZWZlcmVuY2UqKXRoaXMpLT5JZGVudGljYWwoKENQREZfUmVmZXJlbmNlKilwT3RoZXIpKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUNQREZfT2JqZWN0KiBDUERGX09iamVjdDo6R2V0RGlyZWN0KCkgY29uc3QNCi17DQotICAgIGlmICh0aGlzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmIChtX1R5cGUgIT0gUERGT0JKX1JFRkVSRU5DRSkgew0KLSAgICAgICAgcmV0dXJuIChDUERGX09iamVjdCopdGhpczsNCi0gICAgfQ0KLSAgICBDUERGX1JlZmVyZW5jZSogcFJlZiA9IChDUERGX1JlZmVyZW5jZSopKEZYX0xQVk9JRCl0aGlzOw0KLSAgICBpZiAocFJlZi0+bV9wT2JqTGlzdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gcFJlZi0+bV9wT2JqTGlzdC0+R2V0SW5kaXJlY3RPYmplY3QocFJlZi0+bV9SZWZPYmpOdW0pOw0KLX0NCi1DUERGX09iamVjdCogQ1BERl9PYmplY3Q6OkNsb25lKEZYX0JPT0wgYkRpcmVjdCkgY29uc3QNCi17DQotICAgIENGWF9NYXBQdHJUb1B0ciB2aXNpdGVkOw0KLSAgICByZXR1cm4gQ2xvbmVJbnRlcm5hbChiRGlyZWN0LCAmdmlzaXRlZCk7DQotfQ0KLUNQREZfT2JqZWN0KiBDUERGX09iamVjdDo6Q2xvbmVJbnRlcm5hbChGWF9CT09MIGJEaXJlY3QsIENGWF9NYXBQdHJUb1B0ciogdmlzaXRlZCkgY29uc3QNCi17DQotICAgIGlmICh0aGlzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHN3aXRjaCAobV9UeXBlKSB7DQotICAgICAgICBjYXNlIFBERk9CSl9CT09MRUFOOg0KLSAgICAgICAgICAgIHJldHVybiBGWF9ORVcgQ1BERl9Cb29sZWFuKCgoQ1BERl9Cb29sZWFuKil0aGlzKS0+bV9iVmFsdWUpOw0KLSAgICAgICAgY2FzZSBQREZPQkpfTlVNQkVSOg0KLSAgICAgICAgICAgIHJldHVybiBGWF9ORVcgQ1BERl9OdW1iZXIoKChDUERGX051bWJlciopdGhpcyktPm1fYkludGVnZXIsICYoKENQREZfTnVtYmVyKil0aGlzKS0+bV9JbnRlZ2VyKTsNCi0gICAgICAgIGNhc2UgUERGT0JKX1NUUklORzoNCi0gICAgICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfU3RyaW5nKCgoQ1BERl9TdHJpbmcqKXRoaXMpLT5tX1N0cmluZywgKChDUERGX1N0cmluZyopdGhpcyktPklzSGV4KCkpOw0KLSAgICAgICAgY2FzZSBQREZPQkpfTkFNRToNCi0gICAgICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfTmFtZSgoKENQREZfTmFtZSopdGhpcyktPm1fTmFtZSk7DQotICAgICAgICBjYXNlIFBERk9CSl9BUlJBWTogew0KLSAgICAgICAgICAgICAgICBDUERGX0FycmF5KiBwQ29weSA9IEZYX05FVyBDUERGX0FycmF5KCk7DQotICAgICAgICAgICAgICAgIENQREZfQXJyYXkqIHBUaGlzID0gKENQREZfQXJyYXkqKXRoaXM7DQotICAgICAgICAgICAgICAgIGludCBuID0gcFRoaXMtPkdldENvdW50KCk7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSArKykgew0KLSAgICAgICAgICAgICAgICAgICAgQ1BERl9PYmplY3QqIHZhbHVlID0gKENQREZfT2JqZWN0KilwVGhpcy0+bV9PYmplY3RzLkdldEF0KGkpOw0KLSAgICAgICAgICAgICAgICAgICAgcENvcHktPm1fT2JqZWN0cy5BZGQodmFsdWUtPkNsb25lSW50ZXJuYWwoYkRpcmVjdCwgdmlzaXRlZCkpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHJldHVybiBwQ29weTsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIFBERk9CSl9ESUNUSU9OQVJZOiB7DQotICAgICAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcENvcHkgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5KCk7DQotICAgICAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcFRoaXMgPSAoQ1BERl9EaWN0aW9uYXJ5Kil0aGlzOw0KLSAgICAgICAgICAgICAgICBGWF9QT1NJVElPTiBwb3MgPSBwVGhpcy0+bV9NYXAuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICAgICAgICAgICAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBrZXk7DQotICAgICAgICAgICAgICAgICAgICBDUERGX09iamVjdCogdmFsdWU7DQotICAgICAgICAgICAgICAgICAgICBwVGhpcy0+bV9NYXAuR2V0TmV4dEFzc29jKHBvcywga2V5LCAodm9pZComKXZhbHVlKTsNCi0gICAgICAgICAgICAgICAgICAgIHBDb3B5LT5tX01hcC5TZXRBdChrZXksIHZhbHVlLT5DbG9uZUludGVybmFsKGJEaXJlY3QsIHZpc2l0ZWQpKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICByZXR1cm4gcENvcHk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgY2FzZSBQREZPQkpfTlVMTDogew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfTnVsbDsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIFBERk9CSl9TVFJFQU06IHsNCi0gICAgICAgICAgICAgICAgQ1BERl9TdHJlYW0qIHBUaGlzID0gKENQREZfU3RyZWFtKil0aGlzOw0KLSAgICAgICAgICAgICAgICBDUERGX1N0cmVhbUFjYyBhY2M7DQotICAgICAgICAgICAgICAgIGFjYy5Mb2FkQWxsRGF0YShwVGhpcywgVFJVRSk7DQotICAgICAgICAgICAgICAgIEZYX0RXT1JEIHN0cmVhbVNpemUgPSBhY2MuR2V0U2l6ZSgpOw0KLSAgICAgICAgICAgICAgICBDUERGX1N0cmVhbSogcE9iaiA9IEZYX05FVyBDUERGX1N0cmVhbShhY2MuRGV0YWNoRGF0YSgpLCBzdHJlYW1TaXplLCAoQ1BERl9EaWN0aW9uYXJ5KikoKENQREZfT2JqZWN0KilwVGhpcy0+R2V0RGljdCgpKS0+Q2xvbmVJbnRlcm5hbChiRGlyZWN0LCB2aXNpdGVkKSk7DQotICAgICAgICAgICAgICAgIHJldHVybiBwT2JqOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgUERGT0JKX1JFRkVSRU5DRTogew0KLSAgICAgICAgICAgICAgICBDUERGX1JlZmVyZW5jZSogcFJlZiA9IChDUERGX1JlZmVyZW5jZSopdGhpczsNCi0gICAgICAgICAgICAgICAgRlhfRFdPUkQgb2JqX251bSA9IHBSZWYtPm1fUmVmT2JqTnVtOw0KLSAgICAgICAgICAgICAgICBpZiAoYkRpcmVjdCAmJiAhdmlzaXRlZC0+R2V0VmFsdWVBdCgodm9pZCopKEZYX1VJTlRQVFIpb2JqX251bSkpIHsNCi0gICAgICAgICAgICAgICAgICAgIHZpc2l0ZWQtPlNldEF0KCh2b2lkKikoRlhfVUlOVFBUUilvYmpfbnVtLCAodm9pZCopMSk7DQotICAgICAgICAgICAgICAgICAgICBDUERGX09iamVjdCogcmV0ID0gcFJlZi0+R2V0RGlyZWN0KCktPkNsb25lSW50ZXJuYWwoVFJVRSwgdmlzaXRlZCk7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX1JlZmVyZW5jZShwUmVmLT5tX3BPYmpMaXN0LCBvYmpfbnVtKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotQ1BERl9PYmplY3QqIENQREZfT2JqZWN0OjpDbG9uZVJlZihDUERGX0luZGlyZWN0T2JqZWN0cyogcERvYykgY29uc3QNCi17DQotICAgIGlmICh0aGlzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmIChtX09iak51bSkgew0KLSAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX1JlZmVyZW5jZShwRG9jLCBtX09iak51bSk7DQotICAgIH0NCi0gICAgcmV0dXJuIENsb25lKCk7DQotfQ0KLUNGWF9XaWRlU3RyaW5nIENQREZfT2JqZWN0OjpHZXRVbmljb2RlVGV4dChDRlhfQ2hhck1hcCogcENoYXJNYXApIGNvbnN0DQotew0KLSAgICBpZiAodGhpcyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsNCi0gICAgfQ0KLSAgICBpZiAobV9UeXBlID09IFBERk9CSl9TVFJJTkcpIHsNCi0gICAgICAgIHJldHVybiBQREZfRGVjb2RlVGV4dCgoKENQREZfU3RyaW5nKil0aGlzKS0+bV9TdHJpbmcsIHBDaGFyTWFwKTsNCi0gICAgfSBlbHNlIGlmIChtX1R5cGUgPT0gUERGT0JKX1NUUkVBTSkgew0KLSAgICAgICAgQ1BERl9TdHJlYW1BY2Mgc3RyZWFtOw0KLSAgICAgICAgc3RyZWFtLkxvYWRBbGxEYXRhKChDUERGX1N0cmVhbSopdGhpcywgRkFMU0UpOw0KLSAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgcmVzdWx0ID0gUERGX0RlY29kZVRleHQoc3RyZWFtLkdldERhdGEoKSwgc3RyZWFtLkdldFNpemUoKSwgcENoYXJNYXApOw0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsNCi0gICAgfSBlbHNlIGlmIChtX1R5cGUgPT0gUERGT0JKX05BTUUpIHsNCi0gICAgICAgIHJldHVybiBQREZfRGVjb2RlVGV4dCgoKENQREZfTmFtZSopdGhpcyktPm1fTmFtZSwgcENoYXJNYXApOw0KLSAgICB9DQotICAgIHJldHVybiBDRlhfV2lkZVN0cmluZygpOw0KLX0NCi12b2lkIENQREZfT2JqZWN0OjpTZXRVbmljb2RlVGV4dChGWF9MUENXU1RSIHBVbmljb2RlcywgaW50IGxlbikNCi17DQotICAgIGlmICh0aGlzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAobV9UeXBlID09IFBERk9CSl9TVFJJTkcpIHsNCi0gICAgICAgICgoQ1BERl9TdHJpbmcqKXRoaXMpLT5tX1N0cmluZyA9IFBERl9FbmNvZGVUZXh0KHBVbmljb2RlcywgbGVuKTsNCi0gICAgfSBlbHNlIGlmIChtX1R5cGUgPT0gUERGT0JKX1NUUkVBTSkgew0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgcmVzdWx0ID0gUERGX0VuY29kZVRleHQocFVuaWNvZGVzLCBsZW4pOw0KLSAgICAgICAgKChDUERGX1N0cmVhbSopdGhpcyktPlNldERhdGEoKEZYX0xQQllURSkoRlhfTFBDU1RSKXJlc3VsdCwgcmVzdWx0LkdldExlbmd0aCgpLCBGQUxTRSwgRkFMU0UpOw0KLSAgICB9DQotfQ0KLUNQREZfTnVtYmVyOjpDUERGX051bWJlcihpbnQgdmFsdWUpDQotew0KLSAgICBtX1R5cGUgPSBQREZPQkpfTlVNQkVSOw0KLSAgICBtX2JJbnRlZ2VyID0gVFJVRTsNCi0gICAgbV9JbnRlZ2VyID0gdmFsdWU7DQotfQ0KLUNQREZfTnVtYmVyOjpDUERGX051bWJlcihGWF9GTE9BVCB2YWx1ZSkNCi17DQotICAgIG1fVHlwZSA9IFBERk9CSl9OVU1CRVI7DQotICAgIG1fYkludGVnZXIgPSBGQUxTRTsNCi0gICAgbV9GbG9hdCA9IHZhbHVlOw0KLX0NCi1DUERGX051bWJlcjo6Q1BERl9OdW1iZXIoRlhfQk9PTCBiSW50ZWdlciwgdm9pZCogcERhdGEpDQotew0KLSAgICBtX1R5cGUgPSBQREZPQkpfTlVNQkVSOw0KLSAgICBtX2JJbnRlZ2VyID0gYkludGVnZXI7DQotICAgIG1fSW50ZWdlciA9ICooaW50KilwRGF0YTsNCi19DQotZXh0ZXJuIHZvaWQgRlhfYXRvbnVtKEZYX0JTVFIsIEZYX0JPT0wmLCB2b2lkKik7DQotQ1BERl9OdW1iZXI6OkNQREZfTnVtYmVyKEZYX0JTVFIgc3RyKQ0KLXsNCi0gICAgbV9UeXBlID0gUERGT0JKX05VTUJFUjsNCi0gICAgRlhfYXRvbnVtKHN0ciwgbV9iSW50ZWdlciwgJm1fSW50ZWdlcik7DQotfQ0KLXZvaWQgQ1BERl9OdW1iZXI6OlNldFN0cmluZyhGWF9CU1RSIHN0cikNCi17DQotICAgIEZYX2F0b251bShzdHIsIG1fYkludGVnZXIsICZtX0ludGVnZXIpOw0KLX0NCi1GWF9CT09MIENQREZfTnVtYmVyOjpJZGVudGljYWwoQ1BERl9OdW1iZXIqIHBPdGhlcikgY29uc3QNCi17DQotICAgIHJldHVybiBtX2JJbnRlZ2VyID09IHBPdGhlci0+bV9iSW50ZWdlciAmJiBtX0ludGVnZXIgPT0gcE90aGVyLT5tX0ludGVnZXI7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENQREZfTnVtYmVyOjpHZXRTdHJpbmcoKSBjb25zdA0KLXsNCi0gICAgcmV0dXJuIG1fYkludGVnZXIgPyBDRlhfQnl0ZVN0cmluZzo6Rm9ybWF0SW50ZWdlcihtX0ludGVnZXIsIEZYRk9STUFUX1NJR05FRCkgOiBDRlhfQnl0ZVN0cmluZzo6Rm9ybWF0RmxvYXQobV9GbG9hdCk7DQotfQ0KLXZvaWQgQ1BERl9OdW1iZXI6OlNldE51bWJlcihGWF9GTE9BVCB2YWx1ZSkNCi17DQotICAgIG1fYkludGVnZXIgPSBGQUxTRTsNCi0gICAgbV9GbG9hdCA9IHZhbHVlOw0KLX0NCi1DUERGX1N0cmluZzo6Q1BERl9TdHJpbmcoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cikNCi17DQotICAgIG1fVHlwZSA9IFBERk9CSl9TVFJJTkc7DQotICAgIG1fU3RyaW5nID0gUERGX0VuY29kZVRleHQoc3RyLCBzdHIuR2V0TGVuZ3RoKCkpOw0KLSAgICBtX2JIZXggPSBGQUxTRTsNCi19DQotQ1BERl9BcnJheTo6fkNQREZfQXJyYXkoKQ0KLXsNCi0gICAgaW50IHNpemUgPSBtX09iamVjdHMuR2V0U2l6ZSgpOw0KLSAgICBDUERGX09iamVjdCoqIHBMaXN0ID0gKENQREZfT2JqZWN0KiopbV9PYmplY3RzLkdldERhdGEoKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKSB7DQotICAgICAgICBwTGlzdFtpXS0+UmVsZWFzZSgpOw0KLSAgICB9DQotfQ0KLUNGWF9GbG9hdFJlY3QgQ1BERl9BcnJheTo6R2V0UmVjdCgpDQotew0KLSAgICBDRlhfRmxvYXRSZWN0IHJlY3Q7DQotICAgIGlmICh0aGlzID09IE5VTEwgfHwgbV9UeXBlICE9IFBERk9CSl9BUlJBWSB8fCBtX09iamVjdHMuR2V0U2l6ZSgpICE9IDQpIHsNCi0gICAgICAgIHJldHVybiByZWN0Ow0KLSAgICB9DQotICAgIHJlY3QubGVmdCA9IEdldE51bWJlcigwKTsNCi0gICAgcmVjdC5ib3R0b20gPSBHZXROdW1iZXIoMSk7DQotICAgIHJlY3QucmlnaHQgPSBHZXROdW1iZXIoMik7DQotICAgIHJlY3QudG9wID0gR2V0TnVtYmVyKDMpOw0KLSAgICByZXR1cm4gcmVjdDsNCi19DQotQ0ZYX0FmZmluZU1hdHJpeCBDUERGX0FycmF5OjpHZXRNYXRyaXgoKQ0KLXsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXg7DQotICAgIGlmICh0aGlzID09IE5VTEwgfHwgbV9UeXBlICE9IFBERk9CSl9BUlJBWSB8fCBtX09iamVjdHMuR2V0U2l6ZSgpICE9IDYpIHsNCi0gICAgICAgIHJldHVybiBtYXRyaXg7DQotICAgIH0NCi0gICAgbWF0cml4LlNldChHZXROdW1iZXIoMCksIEdldE51bWJlcigxKSwgR2V0TnVtYmVyKDIpLCBHZXROdW1iZXIoMyksIEdldE51bWJlcig0KSwgR2V0TnVtYmVyKDUpKTsNCi0gICAgcmV0dXJuIG1hdHJpeDsNCi19DQotQ1BERl9PYmplY3QqIENQREZfQXJyYXk6OkdldEVsZW1lbnQoRlhfRFdPUkQgaSkgY29uc3QNCi17DQotICAgIGlmICh0aGlzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmIChpID49IChGWF9EV09SRCltX09iamVjdHMuR2V0U2l6ZSgpKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gKENQREZfT2JqZWN0KiltX09iamVjdHMuR2V0QXQoaSk7DQotfQ0KLUNQREZfT2JqZWN0KiBDUERGX0FycmF5OjpHZXRFbGVtZW50VmFsdWUoRlhfRFdPUkQgaSkgY29uc3QNCi17DQotICAgIGlmICh0aGlzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmIChpID49IChGWF9EV09SRCltX09iamVjdHMuR2V0U2l6ZSgpKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gKChDUERGX09iamVjdCopbV9PYmplY3RzLkdldEF0KGkpKS0+R2V0RGlyZWN0KCk7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENQREZfQXJyYXk6OkdldFN0cmluZyhGWF9EV09SRCBpKSBjb25zdA0KLXsNCi0gICAgaWYgKHRoaXMgJiYgaSA8IChGWF9EV09SRCltX09iamVjdHMuR2V0U2l6ZSgpKSB7DQotICAgICAgICBDUERGX09iamVjdCogcCA9IChDUERGX09iamVjdCopbV9PYmplY3RzLkdldEF0KGkpOw0KLSAgICAgICAgcmV0dXJuIHAtPkdldFN0cmluZygpOw0KLSAgICB9DQotICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZygpOw0KLX0NCi1DRlhfQnl0ZVN0cmluZ0MgQ1BERl9BcnJheTo6R2V0Q29uc3RTdHJpbmcoRlhfRFdPUkQgaSkgY29uc3QNCi17DQotICAgIGlmICh0aGlzICYmIGkgPCAoRlhfRFdPUkQpbV9PYmplY3RzLkdldFNpemUoKSkgew0KLSAgICAgICAgQ1BERl9PYmplY3QqIHAgPSAoQ1BERl9PYmplY3QqKW1fT2JqZWN0cy5HZXRBdChpKTsNCi0gICAgICAgIHJldHVybiBwLT5HZXRDb25zdFN0cmluZygpOw0KLSAgICB9DQotICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0MoKTsNCi19DQotaW50IENQREZfQXJyYXk6OkdldEludGVnZXIoRlhfRFdPUkQgaSkgY29uc3QNCi17DQotICAgIGlmICh0aGlzID09IE5VTEwgfHwgaSA+PSAoRlhfRFdPUkQpbV9PYmplY3RzLkdldFNpemUoKSkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QqIHAgPSAoQ1BERl9PYmplY3QqKW1fT2JqZWN0cy5HZXRBdChpKTsNCi0gICAgcmV0dXJuIHAtPkdldEludGVnZXIoKTsNCi19DQotRlhfRkxPQVQgQ1BERl9BcnJheTo6R2V0TnVtYmVyKEZYX0RXT1JEIGkpIGNvbnN0DQotew0KLSAgICBpZiAodGhpcyA9PSBOVUxMIHx8IGkgPj0gKEZYX0RXT1JEKW1fT2JqZWN0cy5HZXRTaXplKCkpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIENQREZfT2JqZWN0KiBwID0gKENQREZfT2JqZWN0KiltX09iamVjdHMuR2V0QXQoaSk7DQotICAgIHJldHVybiBwLT5HZXROdW1iZXIoKTsNCi19DQotQ1BERl9EaWN0aW9uYXJ5KiBDUERGX0FycmF5OjpHZXREaWN0KEZYX0RXT1JEIGkpIGNvbnN0DQotew0KLSAgICBDUERGX09iamVjdCogcCA9IEdldEVsZW1lbnRWYWx1ZShpKTsNCi0gICAgaWYgKHAgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0gZWxzZSBpZiAocC0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKSB7DQotICAgICAgICByZXR1cm4gKENQREZfRGljdGlvbmFyeSopcDsNCi0gICAgfSBlbHNlIGlmIChwLT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUkVBTSkgew0KLSAgICAgICAgcmV0dXJuICgoQ1BERl9TdHJlYW0qKXApLT5HZXREaWN0KCk7DQotICAgIH0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLUNQREZfU3RyZWFtKiBDUERGX0FycmF5OjpHZXRTdHJlYW0oRlhfRFdPUkQgaSkgY29uc3QNCi17DQotICAgIENQREZfT2JqZWN0KiBwID0gR2V0RWxlbWVudFZhbHVlKGkpOw0KLSAgICBpZiAocCA9PSBOVUxMIHx8IHAtPkdldFR5cGUoKSAhPSBQREZPQkpfU1RSRUFNKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gKENQREZfU3RyZWFtKilwOw0KLX0NCi1DUERGX0FycmF5KiBDUERGX0FycmF5OjpHZXRBcnJheShGWF9EV09SRCBpKSBjb25zdA0KLXsNCi0gICAgQ1BERl9PYmplY3QqIHAgPSBHZXRFbGVtZW50VmFsdWUoaSk7DQotICAgIGlmIChwID09IE5VTEwgfHwgcC0+R2V0VHlwZSgpICE9IFBERk9CSl9BUlJBWSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIChDUERGX0FycmF5KilwOw0KLX0NCi12b2lkIENQREZfQXJyYXk6OlJlbW92ZUF0KEZYX0RXT1JEIGkpDQotew0KLSAgICBBU1NFUlQodGhpcyAhPSBOVUxMICYmIG1fVHlwZSA9PSBQREZPQkpfQVJSQVkpOw0KLSAgICBpZiAoaSA+PSAoRlhfRFdPUkQpbV9PYmplY3RzLkdldFNpemUoKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfT2JqZWN0KiBwID0gKENQREZfT2JqZWN0KiltX09iamVjdHMuR2V0QXQoaSk7DQotICAgIHAtPlJlbGVhc2UoKTsNCi0gICAgbV9PYmplY3RzLlJlbW92ZUF0KGkpOw0KLX0NCi12b2lkIENQREZfQXJyYXk6OlNldEF0KEZYX0RXT1JEIGksIENQREZfT2JqZWN0KiBwT2JqLCBDUERGX0luZGlyZWN0T2JqZWN0cyogcE9ianMpDQotew0KLSAgICBBU1NFUlQodGhpcyAhPSBOVUxMICYmIG1fVHlwZSA9PSBQREZPQkpfQVJSQVkpOw0KLSAgICBBU1NFUlQoaSA8IChGWF9EV09SRCltX09iamVjdHMuR2V0U2l6ZSgpKTsNCi0gICAgaWYgKGkgPj0gKEZYX0RXT1JEKW1fT2JqZWN0cy5HZXRTaXplKCkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDUERGX09iamVjdCogcE9sZCA9IChDUERGX09iamVjdCopbV9PYmplY3RzLkdldEF0KGkpOw0KLSAgICBwT2xkLT5SZWxlYXNlKCk7DQotICAgIGlmIChwT2JqLT5HZXRPYmpOdW0oKSkgew0KLSAgICAgICAgQVNTRVJUKHBPYmpzICE9IE5VTEwpOw0KLSAgICAgICAgcE9iaiA9IENQREZfUmVmZXJlbmNlOjpDcmVhdGUocE9ianMsIHBPYmotPkdldE9iak51bSgpKTsNCi0gICAgfQ0KLSAgICBtX09iamVjdHMuU2V0QXQoaSwgcE9iaik7DQotfQ0KLXZvaWQgQ1BERl9BcnJheTo6SW5zZXJ0QXQoRlhfRFdPUkQgaW5kZXgsIENQREZfT2JqZWN0KiBwT2JqLCBDUERGX0luZGlyZWN0T2JqZWN0cyogcE9ianMpDQotew0KLSAgICBBU1NFUlQocE9iaiAhPSBOVUxMKTsNCi0gICAgaWYgKHBPYmotPkdldE9iak51bSgpKSB7DQotICAgICAgICBBU1NFUlQocE9ianMgIT0gTlVMTCk7DQotICAgICAgICBwT2JqID0gQ1BERl9SZWZlcmVuY2U6OkNyZWF0ZShwT2JqcywgcE9iai0+R2V0T2JqTnVtKCkpOw0KLSAgICB9DQotICAgIG1fT2JqZWN0cy5JbnNlcnRBdChpbmRleCwgcE9iaik7DQotfQ0KLXZvaWQgQ1BERl9BcnJheTo6QWRkKENQREZfT2JqZWN0KiBwT2JqLCBDUERGX0luZGlyZWN0T2JqZWN0cyogcE9ianMpDQotew0KLSAgICBBU1NFUlQocE9iaiAhPSBOVUxMKTsNCi0gICAgaWYgKHBPYmotPkdldE9iak51bSgpKSB7DQotICAgICAgICBBU1NFUlQocE9ianMgIT0gTlVMTCk7DQotICAgICAgICBwT2JqID0gQ1BERl9SZWZlcmVuY2U6OkNyZWF0ZShwT2JqcywgcE9iai0+R2V0T2JqTnVtKCkpOw0KLSAgICB9DQotICAgIG1fT2JqZWN0cy5BZGQocE9iaik7DQotfQ0KLXZvaWQgQ1BERl9BcnJheTo6QWRkTmFtZShjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyKQ0KLXsNCi0gICAgQVNTRVJUKHRoaXMgIT0gTlVMTCAmJiBtX1R5cGUgPT0gUERGT0JKX0FSUkFZKTsNCi0gICAgQWRkKEZYX05FVyBDUERGX05hbWUoc3RyKSk7DQotfQ0KLXZvaWQgQ1BERl9BcnJheTo6QWRkU3RyaW5nKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIpDQotew0KLSAgICBBU1NFUlQodGhpcyAhPSBOVUxMICYmIG1fVHlwZSA9PSBQREZPQkpfQVJSQVkpOw0KLSAgICBBZGQoRlhfTkVXIENQREZfU3RyaW5nKHN0cikpOw0KLX0NCi12b2lkIENQREZfQXJyYXk6OkFkZEludGVnZXIoaW50IGkpDQotew0KLSAgICBBU1NFUlQodGhpcyAhPSBOVUxMICYmIG1fVHlwZSA9PSBQREZPQkpfQVJSQVkpOw0KLSAgICBBZGQoRlhfTkVXIENQREZfTnVtYmVyKGkpKTsNCi19DQotdm9pZCBDUERGX0FycmF5OjpBZGROdW1iZXIoRlhfRkxPQVQgZikNCi17DQotICAgIEFTU0VSVCh0aGlzICE9IE5VTEwgJiYgbV9UeXBlID09IFBERk9CSl9BUlJBWSk7DQotICAgIENQREZfTnVtYmVyKiBwTnVtYmVyID0gRlhfTkVXIENQREZfTnVtYmVyOw0KLSAgICBwTnVtYmVyLT5TZXROdW1iZXIoZik7DQotICAgIEFkZChwTnVtYmVyKTsNCi19DQotdm9pZCBDUERGX0FycmF5OjpBZGRSZWZlcmVuY2UoQ1BERl9JbmRpcmVjdE9iamVjdHMqIHBEb2MsIEZYX0RXT1JEIG9iam51bSkNCi17DQotICAgIEFTU0VSVCh0aGlzICE9IE5VTEwgJiYgbV9UeXBlID09IFBERk9CSl9BUlJBWSk7DQotICAgIEFkZChGWF9ORVcgQ1BERl9SZWZlcmVuY2UocERvYywgb2JqbnVtKSk7DQotfQ0KLUZYX0JPT0wgQ1BERl9BcnJheTo6SWRlbnRpY2FsKENQREZfQXJyYXkqIHBPdGhlcikgY29uc3QNCi17DQotICAgIGlmIChtX09iamVjdHMuR2V0U2l6ZSgpICE9IHBPdGhlci0+bV9PYmplY3RzLkdldFNpemUoKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9PYmplY3RzLkdldFNpemUoKTsgaSArKykNCi0gICAgICAgIGlmICghKChDUERGX09iamVjdCopbV9PYmplY3RzW2ldKS0+SXNJZGVudGljYWwoKENQREZfT2JqZWN0KilwT3RoZXItPm1fT2JqZWN0c1tpXSkpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1DUERGX0RpY3Rpb25hcnk6On5DUERGX0RpY3Rpb25hcnkoKQ0KLXsNCi0gICAgRlhfUE9TSVRJT04gcG9zID0gbV9NYXAuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICBGWF9MUFZPSUQgdmFsdWUgPSBtX01hcC5HZXROZXh0VmFsdWUocG9zKTsNCi0gICAgICAgICgoQ1BERl9PYmplY3QqKXZhbHVlKS0+UmVsZWFzZSgpOw0KLSAgICB9DQotfQ0KLUZYX1BPU0lUSU9OIENQREZfRGljdGlvbmFyeTo6R2V0U3RhcnRQb3MoKSBjb25zdA0KLXsNCi0gICAgcmV0dXJuIG1fTWFwLkdldFN0YXJ0UG9zaXRpb24oKTsNCi19DQotQ1BERl9PYmplY3QqIENQREZfRGljdGlvbmFyeTo6R2V0TmV4dEVsZW1lbnQoRlhfUE9TSVRJT04mIHBvcywgQ0ZYX0J5dGVTdHJpbmcmIGtleSkgY29uc3QNCi17DQotICAgIGlmIChwb3MgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QqIHA7DQotICAgIG1fTWFwLkdldE5leHRBc3NvYyhwb3MsIGtleSwgKEZYX0xQVk9JRCYpcCk7DQotICAgIHJldHVybiBwOw0KLX0NCi1DUERGX09iamVjdCogQ1BERl9EaWN0aW9uYXJ5OjpHZXRFbGVtZW50KEZYX0JTVFIga2V5KSBjb25zdA0KLXsNCi0gICAgaWYgKHRoaXMgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QqIHAgPSBOVUxMOw0KLSAgICBtX01hcC5Mb29rdXAoa2V5LCAodm9pZComKXApOw0KLSAgICByZXR1cm4gcDsNCi19DQotQ1BERl9PYmplY3QqIENQREZfRGljdGlvbmFyeTo6R2V0RWxlbWVudFZhbHVlKEZYX0JTVFIga2V5KSBjb25zdA0KLXsNCi0gICAgaWYgKHRoaXMgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QqIHAgPSBOVUxMOw0KLSAgICBtX01hcC5Mb29rdXAoa2V5LCAodm9pZComKXApOw0KLSAgICByZXR1cm4gcC0+R2V0RGlyZWN0KCk7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENQREZfRGljdGlvbmFyeTo6R2V0U3RyaW5nKEZYX0JTVFIga2V5KSBjb25zdA0KLXsNCi0gICAgaWYgKHRoaXMpIHsNCi0gICAgICAgIENQREZfT2JqZWN0KiBwID0gTlVMTDsNCi0gICAgICAgIG1fTWFwLkxvb2t1cChrZXksICh2b2lkKiYpcCk7DQotICAgICAgICBpZiAocCkgew0KLSAgICAgICAgICAgIHJldHVybiBwLT5HZXRTdHJpbmcoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsNCi19DQotQ0ZYX0J5dGVTdHJpbmdDIENQREZfRGljdGlvbmFyeTo6R2V0Q29uc3RTdHJpbmcoRlhfQlNUUiBrZXkpIGNvbnN0DQotew0KLSAgICBpZiAodGhpcykgew0KLSAgICAgICAgQ1BERl9PYmplY3QqIHAgPSBOVUxMOw0KLSAgICAgICAgbV9NYXAuTG9va3VwKGtleSwgKHZvaWQqJilwKTsNCi0gICAgICAgIGlmIChwKSB7DQotICAgICAgICAgICAgcmV0dXJuIHAtPkdldENvbnN0U3RyaW5nKCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nQygpOw0KLX0NCi1DRlhfV2lkZVN0cmluZyBDUERGX0RpY3Rpb25hcnk6OkdldFVuaWNvZGVUZXh0KEZYX0JTVFIga2V5LCBDRlhfQ2hhck1hcCogcENoYXJNYXApIGNvbnN0DQotew0KLSAgICBpZiAodGhpcykgew0KLSAgICAgICAgQ1BERl9PYmplY3QqIHAgPSBOVUxMOw0KLSAgICAgICAgbV9NYXAuTG9va3VwKGtleSwgKHZvaWQqJilwKTsNCi0gICAgICAgIGlmIChwKSB7DQotICAgICAgICAgICAgaWYocC0+R2V0VHlwZSgpID09IFBERk9CSl9SRUZFUkVOQ0UpIHsNCi0gICAgICAgICAgICAgICAgcCA9ICgoQ1BERl9SZWZlcmVuY2UqKXApLT5HZXREaXJlY3QoKTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHAtPkdldFVuaWNvZGVUZXh0KHBDaGFyTWFwKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICByZXR1cm4gcC0+R2V0VW5pY29kZVRleHQocENoYXJNYXApOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsNCi19DQotQ0ZYX0J5dGVTdHJpbmcgQ1BERl9EaWN0aW9uYXJ5OjpHZXRTdHJpbmcoRlhfQlNUUiBrZXksIEZYX0JTVFIgZGVmKSBjb25zdA0KLXsNCi0gICAgaWYgKHRoaXMpIHsNCi0gICAgICAgIENQREZfT2JqZWN0KiBwID0gTlVMTDsNCi0gICAgICAgIG1fTWFwLkxvb2t1cChrZXksICh2b2lkKiYpcCk7DQotICAgICAgICBpZiAocCkgew0KLSAgICAgICAgICAgIHJldHVybiBwLT5HZXRTdHJpbmcoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoZGVmKTsNCi19DQotQ0ZYX0J5dGVTdHJpbmdDIENQREZfRGljdGlvbmFyeTo6R2V0Q29uc3RTdHJpbmcoRlhfQlNUUiBrZXksIEZYX0JTVFIgZGVmKSBjb25zdA0KLXsNCi0gICAgaWYgKHRoaXMpIHsNCi0gICAgICAgIENQREZfT2JqZWN0KiBwID0gTlVMTDsNCi0gICAgICAgIG1fTWFwLkxvb2t1cChrZXksICh2b2lkKiYpcCk7DQotICAgICAgICBpZiAocCkgew0KLSAgICAgICAgICAgIHJldHVybiBwLT5HZXRDb25zdFN0cmluZygpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0MoZGVmKTsNCi19DQotaW50IENQREZfRGljdGlvbmFyeTo6R2V0SW50ZWdlcihGWF9CU1RSIGtleSkgY29uc3QNCi17DQotICAgIGlmICh0aGlzKSB7DQotICAgICAgICBDUERGX09iamVjdCogcCA9IE5VTEw7DQotICAgICAgICBtX01hcC5Mb29rdXAoa2V5LCAodm9pZComKXApOw0KLSAgICAgICAgaWYgKHApIHsNCi0gICAgICAgICAgICByZXR1cm4gcC0+R2V0SW50ZWdlcigpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiAwOw0KLX0NCi1pbnQgQ1BERl9EaWN0aW9uYXJ5OjpHZXRJbnRlZ2VyKEZYX0JTVFIga2V5LCBpbnQgZGVmKSBjb25zdA0KLXsNCi0gICAgaWYgKHRoaXMpIHsNCi0gICAgICAgIENQREZfT2JqZWN0KiBwID0gTlVMTDsNCi0gICAgICAgIG1fTWFwLkxvb2t1cChrZXksICh2b2lkKiYpcCk7DQotICAgICAgICBpZiAocCkgew0KLSAgICAgICAgICAgIHJldHVybiBwLT5HZXRJbnRlZ2VyKCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIGRlZjsNCi19DQotRlhfRkxPQVQgQ1BERl9EaWN0aW9uYXJ5OjpHZXROdW1iZXIoRlhfQlNUUiBrZXkpIGNvbnN0DQotew0KLSAgICBpZiAodGhpcykgew0KLSAgICAgICAgQ1BERl9PYmplY3QqIHAgPSBOVUxMOw0KLSAgICAgICAgbV9NYXAuTG9va3VwKGtleSwgKHZvaWQqJilwKTsNCi0gICAgICAgIGlmIChwKSB7DQotICAgICAgICAgICAgcmV0dXJuIHAtPkdldE51bWJlcigpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiAwOw0KLX0NCi1GWF9CT09MIENQREZfRGljdGlvbmFyeTo6R2V0Qm9vbGVhbihGWF9CU1RSIGtleSwgRlhfQk9PTCBiRGVmYXVsdCkgY29uc3QNCi17DQotICAgIGlmICh0aGlzKSB7DQotICAgICAgICBDUERGX09iamVjdCogcCA9IE5VTEw7DQotICAgICAgICBtX01hcC5Mb29rdXAoa2V5LCAodm9pZComKXApOw0KLSAgICAgICAgaWYgKHAgJiYgcC0+R2V0VHlwZSgpID09IFBERk9CSl9CT09MRUFOKSB7DQotICAgICAgICAgICAgcmV0dXJuIHAtPkdldEludGVnZXIoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gYkRlZmF1bHQ7DQotfQ0KLUNQREZfRGljdGlvbmFyeSogQ1BERl9EaWN0aW9uYXJ5OjpHZXREaWN0KEZYX0JTVFIga2V5KSBjb25zdA0KLXsNCi0gICAgQ1BERl9PYmplY3QqIHAgPSBHZXRFbGVtZW50VmFsdWUoa2V5KTsNCi0gICAgaWYgKHAgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0gZWxzZSBpZiAocC0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKSB7DQotICAgICAgICByZXR1cm4gKENQREZfRGljdGlvbmFyeSopcDsNCi0gICAgfSBlbHNlIGlmIChwLT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUkVBTSkgew0KLSAgICAgICAgcmV0dXJuICgoQ1BERl9TdHJlYW0qKXApLT5HZXREaWN0KCk7DQotICAgIH0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLUNQREZfQXJyYXkqIENQREZfRGljdGlvbmFyeTo6R2V0QXJyYXkoRlhfQlNUUiBrZXkpIGNvbnN0DQotew0KLSAgICBDUERGX09iamVjdCogcCA9IEdldEVsZW1lbnRWYWx1ZShrZXkpOw0KLSAgICBpZiAocCA9PSBOVUxMIHx8IHAtPkdldFR5cGUoKSAhPSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiAoQ1BERl9BcnJheSopcDsNCi19DQotQ1BERl9TdHJlYW0qIENQREZfRGljdGlvbmFyeTo6R2V0U3RyZWFtKEZYX0JTVFIga2V5KSBjb25zdA0KLXsNCi0gICAgQ1BERl9PYmplY3QqIHAgPSBHZXRFbGVtZW50VmFsdWUoa2V5KTsNCi0gICAgaWYgKHAgPT0gTlVMTCB8fCBwLT5HZXRUeXBlKCkgIT0gUERGT0JKX1NUUkVBTSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIChDUERGX1N0cmVhbSopcDsNCi19DQotQ0ZYX0Zsb2F0UmVjdCBDUERGX0RpY3Rpb25hcnk6OkdldFJlY3QoRlhfQlNUUiBrZXkpIGNvbnN0DQotew0KLSAgICBDRlhfRmxvYXRSZWN0IHJlY3Q7DQotICAgIENQREZfQXJyYXkqIHBBcnJheSA9IEdldEFycmF5KGtleSk7DQotICAgIGlmIChwQXJyYXkpIHsNCi0gICAgICAgIHJlY3QgPSBwQXJyYXktPkdldFJlY3QoKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gcmVjdDsNCi19DQotQ0ZYX0FmZmluZU1hdHJpeCBDUERGX0RpY3Rpb25hcnk6OkdldE1hdHJpeChGWF9CU1RSIGtleSkgY29uc3QNCi17DQotICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4Ow0KLSAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBHZXRBcnJheShrZXkpOw0KLSAgICBpZiAocEFycmF5KSB7DQotICAgICAgICBtYXRyaXggPSBwQXJyYXktPkdldE1hdHJpeCgpOw0KLSAgICB9DQotICAgIHJldHVybiBtYXRyaXg7DQotfQ0KLUZYX0JPT0wgQ1BERl9EaWN0aW9uYXJ5OjpLZXlFeGlzdChGWF9CU1RSIGtleSkgY29uc3QNCi17DQotICAgIGlmICh0aGlzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWF9MUFZPSUQgdmFsdWU7DQotICAgIHJldHVybiBtX01hcC5Mb29rdXAoa2V5LCB2YWx1ZSk7DQotfQ0KLXZvaWQgQ1BERl9EaWN0aW9uYXJ5OjpTZXRBdChGWF9CU1RSIGtleSwgQ1BERl9PYmplY3QqIHBPYmosIENQREZfSW5kaXJlY3RPYmplY3RzKiBwT2JqcykNCi17DQotICAgIEFTU0VSVCh0aGlzICE9IE5VTEwgJiYgbV9UeXBlID09IFBERk9CSl9ESUNUSU9OQVJZKTsNCi0gICAgQ1BERl9PYmplY3QqIHAgPSBOVUxMOw0KLSAgICBtX01hcC5Mb29rdXAoa2V5LCAodm9pZComKXApOw0KLSAgICBpZiAocCA9PSBwT2JqKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKHApIHsNCi0gICAgICAgIHAtPlJlbGVhc2UoKTsNCi0gICAgfQ0KLSAgICBpZiAocE9iaikgew0KLSAgICAgICAgaWYgKHBPYmotPkdldE9iak51bSgpKSB7DQotICAgICAgICAgICAgQVNTRVJUKHBPYmpzICE9IE5VTEwpOw0KLSAgICAgICAgICAgIHBPYmogPSBDUERGX1JlZmVyZW5jZTo6Q3JlYXRlKHBPYmpzLCBwT2JqLT5HZXRPYmpOdW0oKSk7DQotICAgICAgICB9DQotICAgICAgICBtX01hcC5TZXRBdChrZXksIHBPYmopOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9NYXAuUmVtb3ZlS2V5KGtleSk7DQotICAgIH0NCi19DQotdm9pZCBDUERGX0RpY3Rpb25hcnk6OkFkZFZhbHVlKEZYX0JTVFIga2V5LCBDUERGX09iamVjdCogcE9iaikNCi17DQotICAgIEFTU0VSVCh0aGlzICE9IE5VTEwgJiYgbV9UeXBlID09IFBERk9CSl9ESUNUSU9OQVJZKTsNCi0gICAgbV9NYXAuQWRkVmFsdWUoa2V5LCBwT2JqKTsNCi19DQotdm9pZCBDUERGX0RpY3Rpb25hcnk6OlJlbW92ZUF0KEZYX0JTVFIga2V5KQ0KLXsNCi0gICAgQVNTRVJUKHRoaXMgIT0gTlVMTCAmJiBtX1R5cGUgPT0gUERGT0JKX0RJQ1RJT05BUlkpOw0KLSAgICBDUERGX09iamVjdCogcCA9IE5VTEw7DQotICAgIG1fTWFwLkxvb2t1cChrZXksICh2b2lkKiYpcCk7DQotICAgIGlmIChwID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBwLT5SZWxlYXNlKCk7DQotICAgIG1fTWFwLlJlbW92ZUtleShrZXkpOw0KLX0NCi12b2lkIENQREZfRGljdGlvbmFyeTo6UmVwbGFjZUtleShGWF9CU1RSIG9sZGtleSwgRlhfQlNUUiBuZXdrZXkpDQotew0KLSAgICBBU1NFUlQodGhpcyAhPSBOVUxMICYmIG1fVHlwZSA9PSBQREZPQkpfRElDVElPTkFSWSk7DQotICAgIENQREZfT2JqZWN0KiBwID0gTlVMTDsNCi0gICAgbV9NYXAuTG9va3VwKG9sZGtleSwgKHZvaWQqJilwKTsNCi0gICAgaWYgKHAgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fTWFwLlJlbW92ZUtleShvbGRrZXkpOw0KLSAgICBtX01hcC5TZXRBdChuZXdrZXksIHApOw0KLX0NCi1GWF9CT09MIENQREZfRGljdGlvbmFyeTo6SWRlbnRpY2FsKENQREZfRGljdGlvbmFyeSogcE90aGVyKSBjb25zdA0KLXsNCi0gICAgaWYgKHRoaXMgPT0gTlVMTCkgew0KLSAgICAgICAgaWYgKHBPdGhlciA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKHBPdGhlciA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKG1fTWFwLkdldENvdW50KCkgIT0gcE90aGVyLT5tX01hcC5HZXRDb3VudCgpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgRlhfUE9TSVRJT04gcG9zID0gbV9NYXAuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyBrZXk7DQotICAgICAgICBGWF9MUFZPSUQgdmFsdWU7DQotICAgICAgICBtX01hcC5HZXROZXh0QXNzb2MocG9zLCBrZXksIHZhbHVlKTsNCi0gICAgICAgIGlmICghKChDUERGX09iamVjdCopdmFsdWUpLT5Jc0lkZW50aWNhbChwT3RoZXItPkdldEVsZW1lbnQoa2V5KSkpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ1BERl9EaWN0aW9uYXJ5OjpTZXRBdEludGVnZXIoRlhfQlNUUiBrZXksIGludCBpKQ0KLXsNCi0gICAgU2V0QXQoa2V5LCBGWF9ORVcgQ1BERl9OdW1iZXIoaSkpOw0KLX0NCi12b2lkIENQREZfRGljdGlvbmFyeTo6U2V0QXROYW1lKEZYX0JTVFIga2V5LCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgbmFtZSkNCi17DQotICAgIFNldEF0KGtleSwgRlhfTkVXIENQREZfTmFtZShuYW1lKSk7DQotfQ0KLXZvaWQgQ1BERl9EaWN0aW9uYXJ5OjpTZXRBdFN0cmluZyhGWF9CU1RSIGtleSwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cikNCi17DQotICAgIFNldEF0KGtleSwgRlhfTkVXIENQREZfU3RyaW5nKHN0cikpOw0KLX0NCi12b2lkIENQREZfRGljdGlvbmFyeTo6U2V0QXRSZWZlcmVuY2UoRlhfQlNUUiBrZXksIENQREZfSW5kaXJlY3RPYmplY3RzKiBwRG9jLCBGWF9EV09SRCBvYmpudW0pDQotew0KLSAgICBTZXRBdChrZXksIEZYX05FVyBDUERGX1JlZmVyZW5jZShwRG9jLCBvYmpudW0pKTsNCi19DQotdm9pZCBDUERGX0RpY3Rpb25hcnk6OkFkZFJlZmVyZW5jZShGWF9CU1RSIGtleSwgQ1BERl9JbmRpcmVjdE9iamVjdHMqIHBEb2MsIEZYX0RXT1JEIG9iam51bSkNCi17DQotICAgIEFkZFZhbHVlKGtleSwgRlhfTkVXIENQREZfUmVmZXJlbmNlKHBEb2MsIG9iam51bSkpOw0KLX0NCi12b2lkIENQREZfRGljdGlvbmFyeTo6U2V0QXROdW1iZXIoRlhfQlNUUiBrZXksIEZYX0ZMT0FUIGYpDQotew0KLSAgICBDUERGX051bWJlciogcE51bWJlciA9IEZYX05FVyBDUERGX051bWJlcjsNCi0gICAgcE51bWJlci0+U2V0TnVtYmVyKGYpOw0KLSAgICBTZXRBdChrZXksIHBOdW1iZXIpOw0KLX0NCi12b2lkIENQREZfRGljdGlvbmFyeTo6U2V0QXRCb29sZWFuKEZYX0JTVFIga2V5LCBGWF9CT09MIGJWYWx1ZSkNCi17DQotICAgIFNldEF0KGtleSwgRlhfTkVXIENQREZfQm9vbGVhbihiVmFsdWUpKTsNCi19DQotdm9pZCBDUERGX0RpY3Rpb25hcnk6OlNldEF0UmVjdChGWF9CU1RSIGtleSwgY29uc3QgQ0ZYX0Zsb2F0UmVjdCYgcmVjdCkNCi17DQotICAgIENQREZfQXJyYXkqIHBBcnJheSA9IEZYX05FVyBDUERGX0FycmF5Ow0KLSAgICBwQXJyYXktPkFkZE51bWJlcihyZWN0LmxlZnQpOw0KLSAgICBwQXJyYXktPkFkZE51bWJlcihyZWN0LmJvdHRvbSk7DQotICAgIHBBcnJheS0+QWRkTnVtYmVyKHJlY3QucmlnaHQpOw0KLSAgICBwQXJyYXktPkFkZE51bWJlcihyZWN0LnRvcCk7DQotICAgIFNldEF0KGtleSwgcEFycmF5KTsNCi19DQotdm9pZCBDUERGX0RpY3Rpb25hcnk6OlNldEF0TWF0cml4KEZYX0JTVFIga2V5LCBjb25zdCBDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpDQotew0KLSAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBGWF9ORVcgQ1BERl9BcnJheTsNCi0gICAgcEFycmF5LT5BZGROdW1iZXIxNihtYXRyaXguYSk7DQotICAgIHBBcnJheS0+QWRkTnVtYmVyMTYobWF0cml4LmIpOw0KLSAgICBwQXJyYXktPkFkZE51bWJlcjE2KG1hdHJpeC5jKTsNCi0gICAgcEFycmF5LT5BZGROdW1iZXIxNihtYXRyaXguZCk7DQotICAgIHBBcnJheS0+QWRkTnVtYmVyKG1hdHJpeC5lKTsNCi0gICAgcEFycmF5LT5BZGROdW1iZXIobWF0cml4LmYpOw0KLSAgICBTZXRBdChrZXksIHBBcnJheSk7DQotfQ0KLUNQREZfU3RyZWFtOjpDUERGX1N0cmVhbShGWF9MUEJZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUsIENQREZfRGljdGlvbmFyeSogcERpY3QpDQotew0KLSAgICBtX1R5cGUgPSBQREZPQkpfU1RSRUFNOw0KLSAgICBtX3BEaWN0ID0gcERpY3Q7DQotICAgIG1fZHdTaXplID0gc2l6ZTsNCi0gICAgbV9HZW5OdW0gPSAoRlhfRFdPUkQpIC0gMTsNCi0gICAgbV9wRGF0YUJ1ZiA9IHBEYXRhOw0KLSAgICBtX3BDcnlwdG9IYW5kbGVyID0gTlVMTDsNCi19DQotQ1BERl9TdHJlYW06On5DUERGX1N0cmVhbSgpDQotew0KLSAgICBpZiAobV9HZW5OdW0gPT0gKEZYX0RXT1JEKSAtIDEgJiYgbV9wRGF0YUJ1ZiAhPSBOVUxMKSB7DQotICAgICAgICBGWF9GcmVlKG1fcERhdGFCdWYpOw0KLSAgICB9DQotICAgIGlmIChtX3BEaWN0KSB7DQotICAgICAgICBtX3BEaWN0LT5SZWxlYXNlKCk7DQotICAgIH0NCi19DQotdm9pZCBDUERGX1N0cmVhbTo6SW5pdFN0cmVhbShDUERGX0RpY3Rpb25hcnkqIHBEaWN0KQ0KLXsNCi0gICAgaWYgKHBEaWN0KSB7DQotICAgICAgICBpZiAobV9wRGljdCkgew0KLSAgICAgICAgICAgIG1fcERpY3QtPlJlbGVhc2UoKTsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fcERpY3QgPSBwRGljdDsNCi0gICAgfQ0KLSAgICBpZiAobV9HZW5OdW0gPT0gKEZYX0RXT1JEKSAtIDEpIHsNCi0gICAgICAgIGlmIChtX3BEYXRhQnVmKSB7DQotICAgICAgICAgICAgRlhfRnJlZShtX3BEYXRhQnVmKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX0dlbk51bSA9IDA7DQotICAgIG1fcEZpbGUgPSBOVUxMOw0KLSAgICBtX3BDcnlwdG9IYW5kbGVyID0gTlVMTDsNCi0gICAgbV9GaWxlT2Zmc2V0ID0gMDsNCi19DQotdm9pZCBDUERGX1N0cmVhbTo6SW5pdFN0cmVhbShGWF9MUEJZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUsIENQREZfRGljdGlvbmFyeSogcERpY3QpDQotew0KLSAgICBJbml0U3RyZWFtKHBEaWN0KTsNCi0gICAgbV9HZW5OdW0gPSAoRlhfRFdPUkQpIC0gMTsNCi0gICAgbV9wRGF0YUJ1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIHNpemUpOw0KLSAgICBpZiAocERhdGEpIHsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKG1fcERhdGFCdWYsIHBEYXRhLCBzaXplKTsNCi0gICAgfQ0KLSAgICBtX2R3U2l6ZSA9IHNpemU7DQotICAgIGlmIChtX3BEaWN0KSB7DQotICAgICAgICBtX3BEaWN0LT5TZXRBdEludGVnZXIoRlhfQlNUUkMoIkxlbmd0aCIpLCBzaXplKTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfU3RyZWFtOjpTZXREYXRhKEZYX0xQQ0JZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUsIEZYX0JPT0wgYkNvbXByZXNzZWQsIEZYX0JPT0wgYktlZXBCdWYpDQotew0KLSAgICBpZiAobV9HZW5OdW0gPT0gKEZYX0RXT1JEKSAtIDEpIHsNCi0gICAgICAgIGlmIChtX3BEYXRhQnVmKSB7DQotICAgICAgICAgICAgRlhfRnJlZShtX3BEYXRhQnVmKTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1fR2VuTnVtID0gKEZYX0RXT1JEKSAtIDE7DQotICAgICAgICBtX3BDcnlwdG9IYW5kbGVyID0gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAoYktlZXBCdWYpIHsNCi0gICAgICAgIG1fcERhdGFCdWYgPSAoRlhfTFBCWVRFKXBEYXRhOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wRGF0YUJ1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIHNpemUpOw0KLSAgICAgICAgaWYgKHBEYXRhKSB7DQotICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wRGF0YUJ1ZiwgcERhdGEsIHNpemUpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fZHdTaXplID0gc2l6ZTsNCi0gICAgaWYgKG1fcERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgbV9wRGljdCA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7DQotICAgIH0NCi0gICAgbV9wRGljdC0+U2V0QXRJbnRlZ2VyKEZYX0JTVFJDKCJMZW5ndGgiKSwgc2l6ZSk7DQotICAgIGlmICghYkNvbXByZXNzZWQpIHsNCi0gICAgICAgIG1fcERpY3QtPlJlbW92ZUF0KEZYX0JTVFJDKCJGaWx0ZXIiKSk7DQotICAgICAgICBtX3BEaWN0LT5SZW1vdmVBdChGWF9CU1RSQygiRGVjb2RlUGFybXMiKSk7DQotICAgIH0NCi19DQotRlhfQk9PTCBDUERGX1N0cmVhbTo6UmVhZFJhd0RhdGEoRlhfRklMRVNJWkUgb2Zmc2V0LCBGWF9MUEJZVEUgYnVmLCBGWF9EV09SRCBzaXplKSBjb25zdA0KLXsNCi0gICAgaWYgKChtX0dlbk51bSAhPSAoRlhfRFdPUkQpIC0gMSkgJiYgbV9wRmlsZSkgew0KLSAgICAgICAgcmV0dXJuIG1fcEZpbGUtPlJlYWRCbG9jayhidWYsIG1fRmlsZU9mZnNldCArIG9mZnNldCwgc2l6ZSk7DQotICAgIH0NCi0gICAgaWYgKG1fcERhdGFCdWYpIHsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKGJ1ZiwgbV9wRGF0YUJ1ZiArIG9mZnNldCwgc2l6ZSk7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ1BERl9TdHJlYW06OkluaXRTdHJlYW0oSUZYX0ZpbGVSZWFkICpwRmlsZSwgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCkNCi17DQotICAgIEluaXRTdHJlYW0ocERpY3QpOw0KLSAgICBtX3BGaWxlID0gcEZpbGU7DQotICAgIG1fZHdTaXplID0gKEZYX0RXT1JEKXBGaWxlLT5HZXRTaXplKCk7DQotICAgIGlmIChtX3BEaWN0KSB7DQotICAgICAgICBtX3BEaWN0LT5TZXRBdEludGVnZXIoRlhfQlNUUkMoIkxlbmd0aCIpLCBtX2R3U2l6ZSk7DQotICAgIH0NCi19DQotRlhfQk9PTCBDUERGX1N0cmVhbTo6SWRlbnRpY2FsKENQREZfU3RyZWFtKiBwT3RoZXIpIGNvbnN0DQotew0KLSAgICBpZiAoIW1fcERpY3QtPklkZW50aWNhbChwT3RoZXItPm1fcERpY3QpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKG1fZHdTaXplICE9IHBPdGhlci0+bV9kd1NpemUpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAobV9HZW5OdW0gIT0gKEZYX0RXT1JEKSAtIDEgJiYgcE90aGVyLT5tX0dlbk51bSAhPSAoRlhfRFdPUkQpIC0gMSkgew0KLSAgICAgICAgaWYgKG1fcEZpbGUgPT0gcE90aGVyLT5tX3BGaWxlICYmIG1fcEZpbGUgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCFtX3BGaWxlIHx8ICFwT3RoZXItPm1fcEZpbGUpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBGWF9CWVRFIHNyY0J1ZlsxMDI0XTsNCi0gICAgICAgIEZYX0JZVEUgZGVzdEJ1ZlsxMDI0XTsNCi0gICAgICAgIEZYX0RXT1JEIHNpemUgPSBtX2R3U2l6ZTsNCi0gICAgICAgIEZYX0RXT1JEIHNyY09mZnNldCA9IG1fRmlsZU9mZnNldDsNCi0gICAgICAgIEZYX0RXT1JEIGRlc3RPZmZzZXQgPSBwT3RoZXItPm1fRmlsZU9mZnNldDsNCi0gICAgICAgIGlmIChtX3BGaWxlID09IHBPdGhlci0+bV9wRmlsZSAmJiBzcmNPZmZzZXQgPT0gZGVzdE9mZnNldCkgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgd2hpbGUgKHNpemUgPiAwKSB7DQotICAgICAgICAgICAgRlhfRFdPUkQgYWN0dWFsU2l6ZSA9IHNpemUgPiAxMDI0ID8gMTAyNCA6IHNpemU7DQotICAgICAgICAgICAgbV9wRmlsZS0+UmVhZEJsb2NrKHNyY0J1Ziwgc3JjT2Zmc2V0LCBhY3R1YWxTaXplKTsNCi0gICAgICAgICAgICBwT3RoZXItPm1fcEZpbGUtPlJlYWRCbG9jayhkZXN0QnVmLCBkZXN0T2Zmc2V0LCBhY3R1YWxTaXplKTsNCi0gICAgICAgICAgICBpZiAoRlhTWVNfbWVtY21wMzIoc3JjQnVmLCBkZXN0QnVmLCBhY3R1YWxTaXplKSAhPSAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgc2l6ZSAtPSBhY3R1YWxTaXplOw0KLSAgICAgICAgICAgIHNyY09mZnNldCArPSBhY3R1YWxTaXplOw0KLSAgICAgICAgICAgIGRlc3RPZmZzZXQgKz0gYWN0dWFsU2l6ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIGlmIChtX0dlbk51bSAhPSAoRlhfRFdPUkQpIC0gMSB8fCBwT3RoZXItPm1fR2VuTnVtICE9IChGWF9EV09SRCkgLSAxKSB7DQotICAgICAgICBJRlhfRmlsZVJlYWQqIHBGaWxlID0gTlVMTDsNCi0gICAgICAgIEZYX0xQQllURSBwQnVmID0gTlVMTDsNCi0gICAgICAgIEZYX0RXT1JEIG9mZnNldCA9IDA7DQotICAgICAgICBpZiAobV9HZW5OdW0gIT0gKEZYX0RXT1JEKSAtIDEpIHsNCi0gICAgICAgICAgICBwRmlsZSA9IG1fcEZpbGU7DQotICAgICAgICAgICAgcEJ1ZiA9IHBPdGhlci0+bV9wRGF0YUJ1ZjsNCi0gICAgICAgICAgICBvZmZzZXQgPSBtX0ZpbGVPZmZzZXQ7DQotICAgICAgICB9DQotICAgICAgICBpZiAocE90aGVyLT5tX0dlbk51bSAhPSAoRlhfRFdPUkQpIC0gMSkgew0KLSAgICAgICAgICAgIHBGaWxlID0gcE90aGVyLT5tX3BGaWxlOw0KLSAgICAgICAgICAgIHBCdWYgPSBtX3BEYXRhQnVmOw0KLSAgICAgICAgICAgIG9mZnNldCA9IHBPdGhlci0+bV9GaWxlT2Zmc2V0Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKE5VTEwgPT0gcEJ1Zikgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0JZVEUgc3JjQnVmWzEwMjRdOw0KLSAgICAgICAgRlhfRFdPUkQgc2l6ZSA9IG1fZHdTaXplOw0KLSAgICAgICAgd2hpbGUgKHNpemUgPiAwKSB7DQotICAgICAgICAgICAgRlhfRFdPUkQgYWN0dWFsU2l6ZSA9IHNpemUgPiAxMDI0ID8gMTAyNCA6IHNpemU7DQotICAgICAgICAgICAgbV9wRmlsZS0+UmVhZEJsb2NrKHNyY0J1Ziwgb2Zmc2V0LCBhY3R1YWxTaXplKTsNCi0gICAgICAgICAgICBpZiAoRlhTWVNfbWVtY21wMzIoc3JjQnVmLCBwQnVmLCBhY3R1YWxTaXplKSAhPSAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcEJ1ZiArPSBhY3R1YWxTaXplOw0KLSAgICAgICAgICAgIHNpemUgLT0gYWN0dWFsU2l6ZTsNCi0gICAgICAgICAgICBvZmZzZXQgKz0gYWN0dWFsU2l6ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIHJldHVybiBGWFNZU19tZW1jbXAzMihtX3BEYXRhQnVmLCBwT3RoZXItPm1fcERhdGFCdWYsIG1fZHdTaXplKSA9PSAwOw0KLX0NCi1DUERGX1N0cmVhbSogQ1BERl9TdHJlYW06OkNsb25lKEZYX0JPT0wgYkRpcmVjdCwgRlBERl9MUEZDbG9uZVN0cmVhbUNhbGxiYWNrIGxwZkNhbGxiYWNrLCBGWF9MUFZPSUQgcFVzZXJEYXRhKSBjb25zdA0KLXsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5ICpwQ2xvbmVEaWN0ID0gKENQREZfRGljdGlvbmFyeSopbV9wRGljdC0+Q2xvbmUoYkRpcmVjdCk7DQotICAgIElGWF9GaWxlU3RyZWFtICpwRlMgPSBOVUxMOw0KLSAgICBpZiAobHBmQ2FsbGJhY2spIHsNCi0gICAgICAgIHBGUyA9IGxwZkNhbGxiYWNrKChDUERGX1N0cmVhbSopdGhpcywgcFVzZXJEYXRhKTsNCi0gICAgfQ0KLSAgICBpZiAoIXBGUykgew0KLSAgICAgICAgQ1BERl9TdHJlYW1BY2MgYWNjOw0KLSAgICAgICAgYWNjLkxvYWRBbGxEYXRhKHRoaXMsIFRSVUUpOw0KLSAgICAgICAgRlhfRFdPUkQgc3RyZWFtU2l6ZSA9IGFjYy5HZXRTaXplKCk7DQotICAgICAgICBDUERGX1N0cmVhbSogcE9iaiA9IEZYX05FVyBDUERGX1N0cmVhbShhY2MuRGV0YWNoRGF0YSgpLCBzdHJlYW1TaXplLCBwQ2xvbmVEaWN0KTsNCi0gICAgICAgIHJldHVybiBwT2JqOw0KLSAgICB9DQotICAgIENQREZfU3RyZWFtKiBwT2JqID0gRlhfTkVXIENQREZfU3RyZWFtKE5VTEwsIDAsIE5VTEwpOw0KLSAgICBDUERGX1N0cmVhbUZpbHRlciAqcFNGID0gR2V0U3RyZWFtRmlsdGVyKFRSVUUpOw0KLSAgICBpZiAocFNGKSB7DQotICAgICAgICBGWF9MUEJZVEUgcEJ1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIDQwOTYpOw0KLSAgICAgICAgRlhfRFdPUkQgZHdSZWFkOw0KLSAgICAgICAgZG8gew0KLSAgICAgICAgICAgIGR3UmVhZCA9IHBTRi0+UmVhZEJsb2NrKHBCdWYsIDQwOTYpOw0KLSAgICAgICAgICAgIGlmIChkd1JlYWQpIHsNCi0gICAgICAgICAgICAgICAgcEZTLT5Xcml0ZUJsb2NrKHBCdWYsIGR3UmVhZCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSB3aGlsZSAoZHdSZWFkID09IDQwOTYpOw0KLSAgICAgICAgcEZTLT5GbHVzaCgpOw0KLSAgICAgICAgRlhfRnJlZShwQnVmKTsNCi0gICAgICAgIGRlbGV0ZSBwU0Y7DQotICAgIH0NCi0gICAgcE9iai0+SW5pdFN0cmVhbSgoSUZYX0ZpbGVSZWFkKilwRlMsIHBDbG9uZURpY3QpOw0KLSAgICByZXR1cm4gcE9iajsNCi19DQotZXh0ZXJuIEZYX0JPT0wgUERGX0RhdGFEZWNvZGUoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgY29uc3QgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUmIGRlc3RfYnVmLCBGWF9EV09SRCYgZGVzdF9zaXplLCBDRlhfQnl0ZVN0cmluZyYgSW1hZ2VFbmNvZGluZywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqJiBwSW1hZ2VQYXJtcywgRlhfRFdPUkQgZXN0aW1hdGVkX3NpemUsIEZYX0JPT0wgYkltYWdlQWNjKTsNCi1DUERGX1N0cmVhbUFjYzo6Q1BERl9TdHJlYW1BY2MoKQ0KLXsNCi0gICAgbV9iTmV3QnVmID0gRkFMU0U7DQotICAgIG1fcERhdGEgPSBOVUxMOw0KLSAgICBtX2R3U2l6ZSA9IDA7DQotICAgIG1fcEltYWdlUGFyYW0gPSBOVUxMOw0KLSAgICBtX3BTdHJlYW0gPSBOVUxMOw0KLSAgICBtX3BTcmNEYXRhID0gTlVMTDsNCi19DQotdm9pZCBDUERGX1N0cmVhbUFjYzo6TG9hZEFsbERhdGEoY29uc3QgQ1BERl9TdHJlYW0qIHBTdHJlYW0sIEZYX0JPT0wgYlJhd0FjY2VzcywgRlhfRFdPUkQgZXN0aW1hdGVkX3NpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiSW1hZ2VBY2MpDQotew0KLSAgICBpZiAocFN0cmVhbSA9PSBOVUxMIHx8IHBTdHJlYW0tPkdldFR5cGUoKSAhPSBQREZPQkpfU1RSRUFNKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbV9wU3RyZWFtID0gcFN0cmVhbTsNCi0gICAgaWYgKHBTdHJlYW0tPklzTWVtb3J5QmFzZWQoKSAmJg0KLSAgICAgICAgICAgICghcFN0cmVhbS0+R2V0RGljdCgpLT5LZXlFeGlzdChGWF9CU1RSQygiRmlsdGVyIikpIHx8IGJSYXdBY2Nlc3MpKSB7DQotICAgICAgICBtX2R3U2l6ZSA9IHBTdHJlYW0tPm1fZHdTaXplOw0KLSAgICAgICAgbV9wRGF0YSA9IChGWF9MUEJZVEUpcFN0cmVhbS0+bV9wRGF0YUJ1ZjsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9MUEJZVEUgcFNyY0RhdGE7DQotICAgIEZYX0RXT1JEIGR3U3JjU2l6ZSA9IHBTdHJlYW0tPm1fZHdTaXplOw0KLSAgICBpZiAoZHdTcmNTaXplID09IDApIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAoIXBTdHJlYW0tPklzTWVtb3J5QmFzZWQoKSkgew0KLSAgICAgICAgcFNyY0RhdGEgPSBtX3BTcmNEYXRhID0gRlhfQWxsb2MoRlhfQllURSwgZHdTcmNTaXplKTsNCi0gICAgICAgIGlmICghcFNyY0RhdGEgfHwgIXBTdHJlYW0tPlJlYWRSYXdEYXRhKDAsIHBTcmNEYXRhLCBkd1NyY1NpemUpKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcFNyY0RhdGEgPSBwU3RyZWFtLT5tX3BEYXRhQnVmOw0KLSAgICB9DQotICAgIEZYX0xQQllURSBwRGVjcnlwdGVkRGF0YTsNCi0gICAgRlhfRFdPUkQgZHdEZWNyeXB0ZWRTaXplOw0KLSAgICBpZiAocFN0cmVhbS0+bV9wQ3J5cHRvSGFuZGxlcikgew0KLSAgICAgICAgQ0ZYX0JpbmFyeUJ1ZiBkZXN0X2J1ZjsNCi0gICAgICAgIGRlc3RfYnVmLkVzdGltYXRlU2l6ZShwU3RyZWFtLT5tX3BDcnlwdG9IYW5kbGVyLT5EZWNyeXB0R2V0U2l6ZShkd1NyY1NpemUpKTsNCi0gICAgICAgIEZYX0xQVk9JRCBjb250ZXh0ID0gcFN0cmVhbS0+bV9wQ3J5cHRvSGFuZGxlci0+RGVjcnlwdFN0YXJ0KHBTdHJlYW0tPkdldE9iak51bSgpLCBwU3RyZWFtLT5tX0dlbk51bSk7DQotICAgICAgICBwU3RyZWFtLT5tX3BDcnlwdG9IYW5kbGVyLT5EZWNyeXB0U3RyZWFtKGNvbnRleHQsIHBTcmNEYXRhLCBkd1NyY1NpemUsIGRlc3RfYnVmKTsNCi0gICAgICAgIHBTdHJlYW0tPm1fcENyeXB0b0hhbmRsZXItPkRlY3J5cHRGaW5pc2goY29udGV4dCwgZGVzdF9idWYpOw0KLSAgICAgICAgcERlY3J5cHRlZERhdGEgPSBkZXN0X2J1Zi5HZXRCdWZmZXIoKTsNCi0gICAgICAgIGR3RGVjcnlwdGVkU2l6ZSA9IGRlc3RfYnVmLkdldFNpemUoKTsNCi0gICAgICAgIGRlc3RfYnVmLkRldGFjaEJ1ZmZlcigpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcERlY3J5cHRlZERhdGEgPSBwU3JjRGF0YTsNCi0gICAgICAgIGR3RGVjcnlwdGVkU2l6ZSA9IGR3U3JjU2l6ZTsNCi0gICAgfQ0KLSAgICBpZiAoIXBTdHJlYW0tPkdldERpY3QoKS0+S2V5RXhpc3QoRlhfQlNUUkMoIkZpbHRlciIpKSB8fCBiUmF3QWNjZXNzKSB7DQotICAgICAgICBtX3BEYXRhID0gcERlY3J5cHRlZERhdGE7DQotICAgICAgICBtX2R3U2l6ZSA9IGR3RGVjcnlwdGVkU2l6ZTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEZYX0JPT0wgYlJldCA9IFBERl9EYXRhRGVjb2RlKHBEZWNyeXB0ZWREYXRhLCBkd0RlY3J5cHRlZFNpemUsIG1fcFN0cmVhbS0+R2V0RGljdCgpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wRGF0YSwgbV9kd1NpemUsIG1fSW1hZ2VEZWNvZGVyLCBtX3BJbWFnZVBhcmFtLCBlc3RpbWF0ZWRfc2l6ZSwgYkltYWdlQWNjKTsNCi0gICAgICAgIGlmICghYlJldCkgew0KLSAgICAgICAgICAgIG1fcERhdGEgPSBwRGVjcnlwdGVkRGF0YTsNCi0gICAgICAgICAgICBtX2R3U2l6ZSA9IGR3RGVjcnlwdGVkU2l6ZTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAocFNyY0RhdGEgIT0gcFN0cmVhbS0+bV9wRGF0YUJ1ZiAmJiBwU3JjRGF0YSAhPSBtX3BEYXRhKSB7DQotICAgICAgICBGWF9GcmVlKHBTcmNEYXRhKTsNCi0gICAgfQ0KLSAgICBpZiAocERlY3J5cHRlZERhdGEgIT0gcFNyY0RhdGEgJiYgcERlY3J5cHRlZERhdGEgIT0gbV9wRGF0YSkgew0KLSAgICAgICAgRlhfRnJlZShwRGVjcnlwdGVkRGF0YSk7DQotICAgIH0NCi0gICAgbV9wU3JjRGF0YSA9IE5VTEw7DQotICAgIG1fYk5ld0J1ZiA9IG1fcERhdGEgIT0gcFN0cmVhbS0+bV9wRGF0YUJ1ZjsNCi19DQotQ1BERl9TdHJlYW1BY2M6On5DUERGX1N0cmVhbUFjYygpDQotew0KLSAgICBpZiAobV9iTmV3QnVmICYmIG1fcERhdGEpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wRGF0YSk7DQotICAgIH0NCi0gICAgaWYgKG1fcFNyY0RhdGEpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wU3JjRGF0YSk7DQotICAgIH0NCi19DQotRlhfTFBDQllURSBDUERGX1N0cmVhbUFjYzo6R2V0RGF0YSgpIGNvbnN0DQotew0KLSAgICBpZiAobV9iTmV3QnVmKSB7DQotICAgICAgICByZXR1cm4gbV9wRGF0YTsNCi0gICAgfQ0KLSAgICBpZiAoIW1fcFN0cmVhbSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIG1fcFN0cmVhbS0+bV9wRGF0YUJ1ZjsNCi19DQotRlhfRFdPUkQgQ1BERl9TdHJlYW1BY2M6OkdldFNpemUoKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fYk5ld0J1Zikgew0KLSAgICAgICAgcmV0dXJuIG1fZHdTaXplOw0KLSAgICB9DQotICAgIGlmICghbV9wU3RyZWFtKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wU3RyZWFtLT5tX2R3U2l6ZTsNCi19DQotRlhfTFBCWVRFIENQREZfU3RyZWFtQWNjOjpEZXRhY2hEYXRhKCkNCi17DQotICAgIGlmIChtX2JOZXdCdWYpIHsNCi0gICAgICAgIEZYX0xQQllURSBwID0gbV9wRGF0YTsNCi0gICAgICAgIG1fcERhdGEgPSBOVUxMOw0KLSAgICAgICAgbV9kd1NpemUgPSAwOw0KLSAgICAgICAgcmV0dXJuIHA7DQotICAgIH0NCi0gICAgRlhfTFBCWVRFIHAgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX2R3U2l6ZSk7DQotICAgIGlmIChwID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIEZYU1lTX21lbWNweTMyKHAsIG1fcERhdGEsIG1fZHdTaXplKTsNCi0gICAgcmV0dXJuIHA7DQotfQ0KLXZvaWQgQ1BERl9SZWZlcmVuY2U6OlNldFJlZihDUERGX0luZGlyZWN0T2JqZWN0cyogcERvYywgRlhfRFdPUkQgb2JqbnVtKQ0KLXsNCi0gICAgbV9wT2JqTGlzdCA9IHBEb2M7DQotICAgIG1fUmVmT2JqTnVtID0gb2JqbnVtOw0KLX0NCi1DUERGX0luZGlyZWN0T2JqZWN0czo6Q1BERl9JbmRpcmVjdE9iamVjdHMoSVBERl9Eb2NQYXJzZXIqIHBQYXJzZXIpDQotew0KLSAgICBtX3BQYXJzZXIgPSBwUGFyc2VyOw0KLSAgICBtX0luZGlyZWN0T2Jqcy5Jbml0SGFzaFRhYmxlKDEwMTMpOw0KLSAgICBpZiAocFBhcnNlcikgew0KLSAgICAgICAgbV9MYXN0T2JqTnVtID0gbV9wUGFyc2VyLT5HZXRMYXN0T2JqTnVtKCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX0xhc3RPYmpOdW0gPSAwOw0KLSAgICB9DQotfQ0KLUNQREZfSW5kaXJlY3RPYmplY3RzOjp+Q1BERl9JbmRpcmVjdE9iamVjdHMoKQ0KLXsNCi0gICAgRlhfUE9TSVRJT04gcG9zID0gbV9JbmRpcmVjdE9ianMuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICBGWF9MUFZPSUQga2V5LCB2YWx1ZTsNCi0gICAgICAgIG1fSW5kaXJlY3RPYmpzLkdldE5leHRBc3NvYyhwb3MsIGtleSwgdmFsdWUpOw0KLSAgICAgICAgKChDUERGX09iamVjdCopdmFsdWUpLT5EZXN0cm95KCk7DQotICAgIH0NCi19DQotQ1BERl9PYmplY3QqIENQREZfSW5kaXJlY3RPYmplY3RzOjpHZXRJbmRpcmVjdE9iamVjdChGWF9EV09SRCBvYmpudW0sIHN0cnVjdCBQQVJTRV9DT05URVhUKiBwQ29udGV4dCkNCi17DQotICAgIGlmIChvYmpudW0gPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgRlhfTFBWT0lEIHZhbHVlOw0KLSAgICB7DQotICAgICAgICBpZiAobV9JbmRpcmVjdE9ianMuTG9va3VwKChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpb2JqbnVtLCB2YWx1ZSkpIHsNCi0gICAgICAgICAgICBpZiAoKChDUERGX09iamVjdCopdmFsdWUpLT5HZXRPYmpOdW0oKSA9PSAtMSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuIChDUERGX09iamVjdCopdmFsdWU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QqIHBPYmogPSBOVUxMOw0KLSAgICBpZiAobV9wUGFyc2VyKSB7DQotICAgICAgICBwT2JqID0gbV9wUGFyc2VyLT5QYXJzZUluZGlyZWN0T2JqZWN0KHRoaXMsIG9iam51bSwgcENvbnRleHQpOw0KLSAgICB9DQotICAgIGlmIChwT2JqID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHBPYmotPm1fT2JqTnVtID0gb2JqbnVtOw0KLSAgICBpZiAobV9MYXN0T2JqTnVtIDwgb2JqbnVtKSB7DQotICAgICAgICBtX0xhc3RPYmpOdW0gPSBvYmpudW07DQotICAgIH0NCi0gICAgaWYgKG1fSW5kaXJlY3RPYmpzLkxvb2t1cCgoRlhfTFBWT0lEKShGWF9VSU5UUFRSKW9iam51bSwgdmFsdWUpKSB7DQotICAgICAgICBpZiAodmFsdWUpIHsNCi0gICAgICAgICAgICAoKENQREZfT2JqZWN0ICopdmFsdWUpLT5EZXN0cm95KCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9JbmRpcmVjdE9ianMuU2V0QXQoKEZYX0xQVk9JRCkoRlhfVUlOVFBUUilvYmpudW0sIHBPYmopOw0KLSAgICByZXR1cm4gcE9iajsNCi19DQotaW50IENQREZfSW5kaXJlY3RPYmplY3RzOjpHZXRJbmRpcmVjdFR5cGUoRlhfRFdPUkQgb2JqbnVtKQ0KLXsNCi0gICAgRlhfTFBWT0lEIHZhbHVlOw0KLSAgICBpZiAobV9JbmRpcmVjdE9ianMuTG9va3VwKChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpb2JqbnVtLCB2YWx1ZSkpIHsNCi0gICAgICAgIHJldHVybiAoKENQREZfT2JqZWN0Kil2YWx1ZSktPkdldFR5cGUoKTsNCi0gICAgfQ0KLSAgICBpZiAobV9wUGFyc2VyKSB7DQotICAgICAgICBQQVJTRV9DT05URVhUIGNvbnRleHQ7DQotICAgICAgICBGWFNZU19tZW1zZXQzMigmY29udGV4dCwgMCwgc2l6ZW9mKFBBUlNFX0NPTlRFWFQpKTsNCi0gICAgICAgIGNvbnRleHQubV9GbGFncyA9IFBERlBBUlNFX1RZUEVPTkxZOw0KLSAgICAgICAgcmV0dXJuIChpbnQpKEZYX1VJTlRQVFIpbV9wUGFyc2VyLT5QYXJzZUluZGlyZWN0T2JqZWN0KHRoaXMsIG9iam51bSwgJmNvbnRleHQpOw0KLSAgICB9DQotICAgIHJldHVybiAwOw0KLX0NCi1GWF9EV09SRCBDUERGX0luZGlyZWN0T2JqZWN0czo6QWRkSW5kaXJlY3RPYmplY3QoQ1BERl9PYmplY3QqIHBPYmopDQotew0KLSAgICBpZiAocE9iai0+bV9PYmpOdW0pIHsNCi0gICAgICAgIHJldHVybiBwT2JqLT5tX09iak51bTsNCi0gICAgfQ0KLSAgICBtX0xhc3RPYmpOdW0gKys7DQotICAgIG1fSW5kaXJlY3RPYmpzLlNldEF0KChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpbV9MYXN0T2JqTnVtLCBwT2JqKTsNCi0gICAgcE9iai0+bV9PYmpOdW0gPSBtX0xhc3RPYmpOdW07DQotICAgIHJldHVybiBtX0xhc3RPYmpOdW07DQotfQ0KLXZvaWQgQ1BERl9JbmRpcmVjdE9iamVjdHM6OlJlbGVhc2VJbmRpcmVjdE9iamVjdChGWF9EV09SRCBvYmpudW0pDQotew0KLSAgICBGWF9MUFZPSUQgdmFsdWU7DQotICAgIGlmICghbV9JbmRpcmVjdE9ianMuTG9va3VwKChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpb2JqbnVtLCB2YWx1ZSkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAoKChDUERGX09iamVjdCopdmFsdWUpLT5HZXRPYmpOdW0oKSA9PSAtMSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgICgoQ1BERl9PYmplY3QqKXZhbHVlKS0+RGVzdHJveSgpOw0KLSAgICBtX0luZGlyZWN0T2Jqcy5SZW1vdmVLZXkoKEZYX0xQVk9JRCkoRlhfVUlOVFBUUilvYmpudW0pOw0KLX0NCi12b2lkIENQREZfSW5kaXJlY3RPYmplY3RzOjpJbnNlcnRJbmRpcmVjdE9iamVjdChGWF9EV09SRCBvYmpudW0sIENQREZfT2JqZWN0KiBwT2JqKQ0KLXsNCi0gICAgaWYgKG9iam51bSA9PSAwIHx8IHBPYmogPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX0xQVk9JRCB2YWx1ZTsNCi0gICAgaWYgKG1fSW5kaXJlY3RPYmpzLkxvb2t1cCgoRlhfTFBWT0lEKShGWF9VSU5UUFRSKW9iam51bSwgdmFsdWUpKSB7DQotICAgICAgICAoKENQREZfT2JqZWN0Kil2YWx1ZSktPkRlc3Ryb3koKTsNCi0gICAgfQ0KLSAgICBwT2JqLT5tX09iak51bSA9IG9iam51bTsNCi0gICAgbV9JbmRpcmVjdE9ianMuU2V0QXQoKEZYX0xQVk9JRCkoRlhfVUlOVFBUUilvYmpudW0sIHBPYmopOw0KLSAgICBpZiAobV9MYXN0T2JqTnVtIDwgb2JqbnVtKSB7DQotICAgICAgICBtX0xhc3RPYmpOdW0gPSBvYmpudW07DQotICAgIH0NCi19DQotRlhfRFdPUkQgQ1BERl9JbmRpcmVjdE9iamVjdHM6OkdldExhc3RPYmpOdW0oKSBjb25zdA0KLXsNCi0gICAgcmV0dXJuIG1fTGFzdE9iak51bTsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhcnNlci5oIgordm9pZCBDUERGX09iamVjdDo6UmVsZWFzZSgpCit7CisgICAgaWYgKHRoaXMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX09iak51bSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIERlc3Ryb3koKTsKK30KK3ZvaWQgQ1BERl9PYmplY3Q6OkRlc3Ryb3koKQoreworICAgIHN3aXRjaCAobV9UeXBlKSB7CisgICAgICAgIGNhc2UgUERGT0JKX1NUUklORzoKKyAgICAgICAgICAgIGRlbGV0ZSAoQ1BERl9TdHJpbmcqKXRoaXM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQREZPQkpfTkFNRToKKyAgICAgICAgICAgIGRlbGV0ZSAoQ1BERl9OYW1lKil0aGlzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUERGT0JKX0FSUkFZOgorICAgICAgICAgICAgZGVsZXRlIChDUERGX0FycmF5Kil0aGlzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUERGT0JKX0RJQ1RJT05BUlk6CisgICAgICAgICAgICBkZWxldGUgKENQREZfRGljdGlvbmFyeSopdGhpczsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBERk9CSl9TVFJFQU06CisgICAgICAgICAgICBkZWxldGUgKENQREZfU3RyZWFtKil0aGlzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBkZWxldGUgdGhpczsKKyAgICB9Cit9CitDRlhfQnl0ZVN0cmluZyBDUERGX09iamVjdDo6R2V0U3RyaW5nKCkgY29uc3QKK3sKKyAgICBpZiAodGhpcyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZygpOworICAgIH0KKyAgICBzd2l0Y2ggKG1fVHlwZSkgeworICAgICAgICBjYXNlIFBERk9CSl9CT09MRUFOOgorICAgICAgICAgICAgcmV0dXJuICgoQ1BERl9Cb29sZWFuKil0aGlzKS0+bV9iVmFsdWUgPyAidHJ1ZSIgOiAiZmFsc2UiOworICAgICAgICBjYXNlIFBERk9CSl9OVU1CRVI6CisgICAgICAgICAgICByZXR1cm4gKChDUERGX051bWJlciopdGhpcyktPkdldFN0cmluZygpOworICAgICAgICBjYXNlIFBERk9CSl9TVFJJTkc6CisgICAgICAgICAgICByZXR1cm4gKChDUERGX1N0cmluZyopdGhpcyktPm1fU3RyaW5nOworICAgICAgICBjYXNlIFBERk9CSl9OQU1FOgorICAgICAgICAgICAgcmV0dXJuICgoQ1BERl9OYW1lKil0aGlzKS0+bV9OYW1lOworICAgICAgICBjYXNlIFBERk9CSl9SRUZFUkVOQ0U6IHsKKyAgICAgICAgICAgICAgICBDUERGX1JlZmVyZW5jZSogcFJlZiA9IChDUERGX1JlZmVyZW5jZSopKEZYX0xQVk9JRCl0aGlzOworICAgICAgICAgICAgICAgIGlmIChwUmVmLT5tX3BPYmpMaXN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gcFJlZi0+bV9wT2JqTGlzdC0+R2V0SW5kaXJlY3RPYmplY3QocFJlZi0+bV9SZWZPYmpOdW0pOworICAgICAgICAgICAgICAgIGlmIChwT2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBwT2JqLT5HZXRTdHJpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKCk7Cit9CitDRlhfQnl0ZVN0cmluZ0MgQ1BERl9PYmplY3Q6OkdldENvbnN0U3RyaW5nKCkgY29uc3QKK3sKKyAgICBpZiAodGhpcyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0MoKTsKKyAgICB9CisgICAgc3dpdGNoIChtX1R5cGUpIHsKKyAgICAgICAgY2FzZSBQREZPQkpfU1RSSU5HOgorICAgICAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nQygoRlhfTFBDQllURSkoKENQREZfU3RyaW5nKil0aGlzKS0+bV9TdHJpbmcsICgoQ1BERl9TdHJpbmcqKXRoaXMpLT5tX1N0cmluZy5HZXRMZW5ndGgoKSk7CisgICAgICAgIGNhc2UgUERGT0JKX05BTUU6CisgICAgICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmdDKChGWF9MUENCWVRFKSgoQ1BERl9OYW1lKil0aGlzKS0+bV9OYW1lLCAoKENQREZfTmFtZSopdGhpcyktPm1fTmFtZS5HZXRMZW5ndGgoKSk7CisgICAgICAgIGNhc2UgUERGT0JKX1JFRkVSRU5DRTogeworICAgICAgICAgICAgICAgIENQREZfUmVmZXJlbmNlKiBwUmVmID0gKENQREZfUmVmZXJlbmNlKikoRlhfTFBWT0lEKXRoaXM7CisgICAgICAgICAgICAgICAgaWYgKHBSZWYtPm1fcE9iakxpc3QgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBPYmogPSBwUmVmLT5tX3BPYmpMaXN0LT5HZXRJbmRpcmVjdE9iamVjdChwUmVmLT5tX1JlZk9iak51bSk7CisgICAgICAgICAgICAgICAgaWYgKHBPYmogPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmdDKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBwT2JqLT5HZXRDb25zdFN0cmluZygpOworICAgICAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmdDKCk7Cit9CitGWF9GTE9BVCBDUERGX09iamVjdDo6R2V0TnVtYmVyKCkgY29uc3QKK3sKKyAgICBpZiAodGhpcyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBzd2l0Y2ggKG1fVHlwZSkgeworICAgICAgICBjYXNlIFBERk9CSl9OVU1CRVI6CisgICAgICAgICAgICByZXR1cm4gKChDUERGX051bWJlciopdGhpcyktPkdldE51bWJlcigpOworICAgICAgICBjYXNlIFBERk9CSl9SRUZFUkVOQ0U6IHsKKyAgICAgICAgICAgICAgICBDUERGX1JlZmVyZW5jZSogcFJlZiA9IChDUERGX1JlZmVyZW5jZSopKEZYX0xQVk9JRCl0aGlzOworICAgICAgICAgICAgICAgIGlmIChwUmVmLT5tX3BPYmpMaXN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gcFJlZi0+bV9wT2JqTGlzdC0+R2V0SW5kaXJlY3RPYmplY3QocFJlZi0+bV9SZWZPYmpOdW0pOworICAgICAgICAgICAgICAgIGlmIChwT2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBwT2JqLT5HZXROdW1iZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CitGWF9GTE9BVCBDUERGX09iamVjdDo6R2V0TnVtYmVyMTYoKSBjb25zdAoreworICAgIHJldHVybiBHZXROdW1iZXIoKTsKK30KK2ludCBDUERGX09iamVjdDo6R2V0SW50ZWdlcigpIGNvbnN0Cit7CisgICAgaWYgKHRoaXMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgc3dpdGNoIChtX1R5cGUpIHsKKyAgICAgICAgY2FzZSBQREZPQkpfQk9PTEVBTjoKKyAgICAgICAgICAgIHJldHVybiAoKENQREZfQm9vbGVhbiopdGhpcyktPm1fYlZhbHVlOworICAgICAgICBjYXNlIFBERk9CSl9OVU1CRVI6CisgICAgICAgICAgICByZXR1cm4gKChDUERGX051bWJlciopdGhpcyktPkdldEludGVnZXIoKTsKKyAgICAgICAgY2FzZSBQREZPQkpfUkVGRVJFTkNFOiB7CisgICAgICAgICAgICAgICAgQ1BERl9SZWZlcmVuY2UqIHBSZWYgPSAoQ1BERl9SZWZlcmVuY2UqKShGWF9MUFZPSUQpdGhpczsKKyAgICAgICAgICAgICAgICBQQVJTRV9DT05URVhUIGNvbnRleHQ7CisgICAgICAgICAgICAgICAgRlhTWVNfbWVtc2V0MzIoJmNvbnRleHQsIDAsIHNpemVvZihQQVJTRV9DT05URVhUKSk7CisgICAgICAgICAgICAgICAgaWYgKHBSZWYtPm1fcE9iakxpc3QgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBPYmogPSBwUmVmLT5tX3BPYmpMaXN0LT5HZXRJbmRpcmVjdE9iamVjdChwUmVmLT5tX1JlZk9iak51bSwgJmNvbnRleHQpOworICAgICAgICAgICAgICAgIGlmIChwT2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBwT2JqLT5HZXRJbnRlZ2VyKCk7CisgICAgICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorQ1BERl9EaWN0aW9uYXJ5KiBDUERGX09iamVjdDo6R2V0RGljdCgpIGNvbnN0Cit7CisgICAgaWYgKHRoaXMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc3dpdGNoIChtX1R5cGUpIHsKKyAgICAgICAgY2FzZSBQREZPQkpfRElDVElPTkFSWToKKyAgICAgICAgICAgIHJldHVybiAoQ1BERl9EaWN0aW9uYXJ5Kil0aGlzOworICAgICAgICBjYXNlIFBERk9CSl9TVFJFQU06CisgICAgICAgICAgICByZXR1cm4gKChDUERGX1N0cmVhbSopdGhpcyktPkdldERpY3QoKTsKKyAgICAgICAgY2FzZSBQREZPQkpfUkVGRVJFTkNFOiB7CisgICAgICAgICAgICAgICAgQ1BERl9SZWZlcmVuY2UqIHBSZWYgPSAoQ1BERl9SZWZlcmVuY2UqKXRoaXM7CisgICAgICAgICAgICAgICAgaWYgKHBSZWYtPm1fcE9iakxpc3QgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBPYmogPSBwUmVmLT5tX3BPYmpMaXN0LT5HZXRJbmRpcmVjdE9iamVjdChwUmVmLT5tX1JlZk9iak51bSk7CisgICAgICAgICAgICAgICAgaWYgKHBPYmogPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHBPYmotPkdldERpY3QoKTsKKyAgICAgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CitDUERGX0FycmF5KiBDUERGX09iamVjdDo6R2V0QXJyYXkoKSBjb25zdAoreworICAgIGlmICh0aGlzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChtX1R5cGUgPT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgIHJldHVybiAoQ1BERl9BcnJheSopdGhpczsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9Cit2b2lkIENQREZfT2JqZWN0OjpTZXRTdHJpbmcoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cikKK3sKKyAgICBBU1NFUlQodGhpcyAhPSBOVUxMKTsKKyAgICBzd2l0Y2ggKG1fVHlwZSkgeworICAgICAgICBjYXNlIFBERk9CSl9CT09MRUFOOgorICAgICAgICAgICAgKChDUERGX0Jvb2xlYW4qKXRoaXMpLT5tX2JWYWx1ZSA9IHN0ciA9PSBGWF9CU1RSQygidHJ1ZSIpID8gMSA6IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgUERGT0JKX05VTUJFUjoKKyAgICAgICAgICAgICgoQ1BERl9OdW1iZXIqKXRoaXMpLT5TZXRTdHJpbmcoc3RyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBQREZPQkpfU1RSSU5HOgorICAgICAgICAgICAgKChDUERGX1N0cmluZyopdGhpcyktPm1fU3RyaW5nID0gc3RyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFBERk9CSl9OQU1FOgorICAgICAgICAgICAgKChDUERGX05hbWUqKXRoaXMpLT5tX05hbWUgPSBzdHI7CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChGQUxTRSk7Cit9CitpbnQgQ1BERl9PYmplY3Q6OkdldERpcmVjdFR5cGUoKSBjb25zdAoreworICAgIGlmIChtX1R5cGUgIT0gUERGT0JKX1JFRkVSRU5DRSkgeworICAgICAgICByZXR1cm4gbV9UeXBlOworICAgIH0KKyAgICBDUERGX1JlZmVyZW5jZSogcFJlZiA9IChDUERGX1JlZmVyZW5jZSopdGhpczsKKyAgICByZXR1cm4gcFJlZi0+bV9wT2JqTGlzdC0+R2V0SW5kaXJlY3RUeXBlKHBSZWYtPm1fUmVmT2JqTnVtKTsKK30KK0ZYX0JPT0wgQ1BERl9PYmplY3Q6OklzSWRlbnRpY2FsKENQREZfT2JqZWN0KiBwT3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKHRoaXMgPT0gcE90aGVyKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBpZiAodGhpcyA9PSBOVUxMIHx8IHBPdGhlciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKHBPdGhlci0+bV9UeXBlICE9IG1fVHlwZSkgeworICAgICAgICBpZiAobV9UeXBlID09IFBERk9CSl9SRUZFUkVOQ0UpIHsKKyAgICAgICAgICAgIHJldHVybiBHZXREaXJlY3QoKS0+SXNJZGVudGljYWwocE90aGVyKTsKKyAgICAgICAgfSBlbHNlIGlmIChwT3RoZXItPm1fVHlwZSA9PSBQREZPQkpfUkVGRVJFTkNFKSB7CisgICAgICAgICAgICByZXR1cm4gSXNJZGVudGljYWwocE90aGVyLT5HZXREaXJlY3QoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBzd2l0Y2ggKG1fVHlwZSkgeworICAgICAgICBjYXNlIFBERk9CSl9CT09MRUFOOgorICAgICAgICAgICAgcmV0dXJuICgoKENQREZfQm9vbGVhbiopdGhpcyktPklkZW50aWNhbCgoQ1BERl9Cb29sZWFuKilwT3RoZXIpKTsKKyAgICAgICAgY2FzZSBQREZPQkpfTlVNQkVSOgorICAgICAgICAgICAgcmV0dXJuICgoKENQREZfTnVtYmVyKil0aGlzKS0+SWRlbnRpY2FsKChDUERGX051bWJlciopcE90aGVyKSk7CisgICAgICAgIGNhc2UgUERGT0JKX1NUUklORzoKKyAgICAgICAgICAgIHJldHVybiAoKChDUERGX1N0cmluZyopdGhpcyktPklkZW50aWNhbCgoQ1BERl9TdHJpbmcqKXBPdGhlcikpOworICAgICAgICBjYXNlIFBERk9CSl9OQU1FOgorICAgICAgICAgICAgcmV0dXJuICgoKENQREZfTmFtZSopdGhpcyktPklkZW50aWNhbCgoQ1BERl9OYW1lKilwT3RoZXIpKTsKKyAgICAgICAgY2FzZSBQREZPQkpfQVJSQVk6CisgICAgICAgICAgICByZXR1cm4gKCgoQ1BERl9BcnJheSopdGhpcyktPklkZW50aWNhbCgoQ1BERl9BcnJheSopcE90aGVyKSk7CisgICAgICAgIGNhc2UgUERGT0JKX0RJQ1RJT05BUlk6CisgICAgICAgICAgICByZXR1cm4gKCgoQ1BERl9EaWN0aW9uYXJ5Kil0aGlzKS0+SWRlbnRpY2FsKChDUERGX0RpY3Rpb25hcnkqKXBPdGhlcikpOworICAgICAgICBjYXNlIFBERk9CSl9OVUxMOgorICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIGNhc2UgUERGT0JKX1NUUkVBTToKKyAgICAgICAgICAgIHJldHVybiAoKChDUERGX1N0cmVhbSopdGhpcyktPklkZW50aWNhbCgoQ1BERl9TdHJlYW0qKXBPdGhlcikpOworICAgICAgICBjYXNlIFBERk9CSl9SRUZFUkVOQ0U6CisgICAgICAgICAgICByZXR1cm4gKCgoQ1BERl9SZWZlcmVuY2UqKXRoaXMpLT5JZGVudGljYWwoKENQREZfUmVmZXJlbmNlKilwT3RoZXIpKTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorQ1BERl9PYmplY3QqIENQREZfT2JqZWN0OjpHZXREaXJlY3QoKSBjb25zdAoreworICAgIGlmICh0aGlzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChtX1R5cGUgIT0gUERGT0JKX1JFRkVSRU5DRSkgeworICAgICAgICByZXR1cm4gKENQREZfT2JqZWN0Kil0aGlzOworICAgIH0KKyAgICBDUERGX1JlZmVyZW5jZSogcFJlZiA9IChDUERGX1JlZmVyZW5jZSopKEZYX0xQVk9JRCl0aGlzOworICAgIGlmIChwUmVmLT5tX3BPYmpMaXN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBwUmVmLT5tX3BPYmpMaXN0LT5HZXRJbmRpcmVjdE9iamVjdChwUmVmLT5tX1JlZk9iak51bSk7Cit9CitDUERGX09iamVjdCogQ1BERl9PYmplY3Q6OkNsb25lKEZYX0JPT0wgYkRpcmVjdCkgY29uc3QKK3sKKyAgICBDRlhfTWFwUHRyVG9QdHIgdmlzaXRlZDsKKyAgICByZXR1cm4gQ2xvbmVJbnRlcm5hbChiRGlyZWN0LCAmdmlzaXRlZCk7Cit9CitDUERGX09iamVjdCogQ1BERl9PYmplY3Q6OkNsb25lSW50ZXJuYWwoRlhfQk9PTCBiRGlyZWN0LCBDRlhfTWFwUHRyVG9QdHIqIHZpc2l0ZWQpIGNvbnN0Cit7CisgICAgaWYgKHRoaXMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc3dpdGNoIChtX1R5cGUpIHsKKyAgICAgICAgY2FzZSBQREZPQkpfQk9PTEVBTjoKKyAgICAgICAgICAgIHJldHVybiBGWF9ORVcgQ1BERl9Cb29sZWFuKCgoQ1BERl9Cb29sZWFuKil0aGlzKS0+bV9iVmFsdWUpOworICAgICAgICBjYXNlIFBERk9CSl9OVU1CRVI6CisgICAgICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfTnVtYmVyKCgoQ1BERl9OdW1iZXIqKXRoaXMpLT5tX2JJbnRlZ2VyLCAmKChDUERGX051bWJlciopdGhpcyktPm1fSW50ZWdlcik7CisgICAgICAgIGNhc2UgUERGT0JKX1NUUklORzoKKyAgICAgICAgICAgIHJldHVybiBGWF9ORVcgQ1BERl9TdHJpbmcoKChDUERGX1N0cmluZyopdGhpcyktPm1fU3RyaW5nLCAoKENQREZfU3RyaW5nKil0aGlzKS0+SXNIZXgoKSk7CisgICAgICAgIGNhc2UgUERGT0JKX05BTUU6CisgICAgICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfTmFtZSgoKENQREZfTmFtZSopdGhpcyktPm1fTmFtZSk7CisgICAgICAgIGNhc2UgUERGT0JKX0FSUkFZOiB7CisgICAgICAgICAgICAgICAgQ1BERl9BcnJheSogcENvcHkgPSBGWF9ORVcgQ1BERl9BcnJheSgpOworICAgICAgICAgICAgICAgIENQREZfQXJyYXkqIHBUaGlzID0gKENQREZfQXJyYXkqKXRoaXM7CisgICAgICAgICAgICAgICAgaW50IG4gPSBwVGhpcy0+R2V0Q291bnQoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQ1BERl9PYmplY3QqIHZhbHVlID0gKENQREZfT2JqZWN0KilwVGhpcy0+bV9PYmplY3RzLkdldEF0KGkpOworICAgICAgICAgICAgICAgICAgICBwQ29weS0+bV9PYmplY3RzLkFkZCh2YWx1ZS0+Q2xvbmVJbnRlcm5hbChiRGlyZWN0LCB2aXNpdGVkKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBwQ29weTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBQREZPQkpfRElDVElPTkFSWTogeworICAgICAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcENvcHkgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5KCk7CisgICAgICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwVGhpcyA9IChDUERGX0RpY3Rpb25hcnkqKXRoaXM7CisgICAgICAgICAgICAgICAgRlhfUE9TSVRJT04gcG9zID0gcFRoaXMtPm1fTWFwLkdldFN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAocG9zKSB7CisgICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGtleTsKKyAgICAgICAgICAgICAgICAgICAgQ1BERl9PYmplY3QqIHZhbHVlOworICAgICAgICAgICAgICAgICAgICBwVGhpcy0+bV9NYXAuR2V0TmV4dEFzc29jKHBvcywga2V5LCAodm9pZComKXZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcENvcHktPm1fTWFwLlNldEF0KGtleSwgdmFsdWUtPkNsb25lSW50ZXJuYWwoYkRpcmVjdCwgdmlzaXRlZCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcENvcHk7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgUERGT0JKX05VTEw6IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfTnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBQREZPQkpfU1RSRUFNOiB7CisgICAgICAgICAgICAgICAgQ1BERl9TdHJlYW0qIHBUaGlzID0gKENQREZfU3RyZWFtKil0aGlzOworICAgICAgICAgICAgICAgIENQREZfU3RyZWFtQWNjIGFjYzsKKyAgICAgICAgICAgICAgICBhY2MuTG9hZEFsbERhdGEocFRoaXMsIFRSVUUpOworICAgICAgICAgICAgICAgIEZYX0RXT1JEIHN0cmVhbVNpemUgPSBhY2MuR2V0U2l6ZSgpOworICAgICAgICAgICAgICAgIENQREZfU3RyZWFtKiBwT2JqID0gRlhfTkVXIENQREZfU3RyZWFtKGFjYy5EZXRhY2hEYXRhKCksIHN0cmVhbVNpemUsIChDUERGX0RpY3Rpb25hcnkqKSgoQ1BERl9PYmplY3QqKXBUaGlzLT5HZXREaWN0KCkpLT5DbG9uZUludGVybmFsKGJEaXJlY3QsIHZpc2l0ZWQpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcE9iajsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBQREZPQkpfUkVGRVJFTkNFOiB7CisgICAgICAgICAgICAgICAgQ1BERl9SZWZlcmVuY2UqIHBSZWYgPSAoQ1BERl9SZWZlcmVuY2UqKXRoaXM7CisgICAgICAgICAgICAgICAgRlhfRFdPUkQgb2JqX251bSA9IHBSZWYtPm1fUmVmT2JqTnVtOworICAgICAgICAgICAgICAgIGlmIChiRGlyZWN0ICYmICF2aXNpdGVkLT5HZXRWYWx1ZUF0KCh2b2lkKikoRlhfVUlOVFBUUilvYmpfbnVtKSkgeworICAgICAgICAgICAgICAgICAgICB2aXNpdGVkLT5TZXRBdCgodm9pZCopKEZYX1VJTlRQVFIpb2JqX251bSwgKHZvaWQqKTEpOworICAgICAgICAgICAgICAgICAgICBDUERGX09iamVjdCogcmV0ID0gcFJlZi0+R2V0RGlyZWN0KCktPkNsb25lSW50ZXJuYWwoVFJVRSwgdmlzaXRlZCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX1JlZmVyZW5jZShwUmVmLT5tX3BPYmpMaXN0LCBvYmpfbnVtKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorQ1BERl9PYmplY3QqIENQREZfT2JqZWN0OjpDbG9uZVJlZihDUERGX0luZGlyZWN0T2JqZWN0cyogcERvYykgY29uc3QKK3sKKyAgICBpZiAodGhpcyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAobV9PYmpOdW0pIHsKKyAgICAgICAgcmV0dXJuIEZYX05FVyBDUERGX1JlZmVyZW5jZShwRG9jLCBtX09iak51bSk7CisgICAgfQorICAgIHJldHVybiBDbG9uZSgpOworfQorQ0ZYX1dpZGVTdHJpbmcgQ1BERl9PYmplY3Q6OkdldFVuaWNvZGVUZXh0KENGWF9DaGFyTWFwKiBwQ2hhck1hcCkgY29uc3QKK3sKKyAgICBpZiAodGhpcyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZygpOworICAgIH0KKyAgICBpZiAobV9UeXBlID09IFBERk9CSl9TVFJJTkcpIHsKKyAgICAgICAgcmV0dXJuIFBERl9EZWNvZGVUZXh0KCgoQ1BERl9TdHJpbmcqKXRoaXMpLT5tX1N0cmluZywgcENoYXJNYXApOworICAgIH0gZWxzZSBpZiAobV9UeXBlID09IFBERk9CSl9TVFJFQU0pIHsKKyAgICAgICAgQ1BERl9TdHJlYW1BY2Mgc3RyZWFtOworICAgICAgICBzdHJlYW0uTG9hZEFsbERhdGEoKENQREZfU3RyZWFtKil0aGlzLCBGQUxTRSk7CisgICAgICAgIENGWF9XaWRlU3RyaW5nIHJlc3VsdCA9IFBERl9EZWNvZGVUZXh0KHN0cmVhbS5HZXREYXRhKCksIHN0cmVhbS5HZXRTaXplKCksIHBDaGFyTWFwKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9IGVsc2UgaWYgKG1fVHlwZSA9PSBQREZPQkpfTkFNRSkgeworICAgICAgICByZXR1cm4gUERGX0RlY29kZVRleHQoKChDUERGX05hbWUqKXRoaXMpLT5tX05hbWUsIHBDaGFyTWFwKTsKKyAgICB9CisgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7Cit9Cit2b2lkIENQREZfT2JqZWN0OjpTZXRVbmljb2RlVGV4dChGWF9MUENXU1RSIHBVbmljb2RlcywgaW50IGxlbikKK3sKKyAgICBpZiAodGhpcyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fVHlwZSA9PSBQREZPQkpfU1RSSU5HKSB7CisgICAgICAgICgoQ1BERl9TdHJpbmcqKXRoaXMpLT5tX1N0cmluZyA9IFBERl9FbmNvZGVUZXh0KHBVbmljb2RlcywgbGVuKTsKKyAgICB9IGVsc2UgaWYgKG1fVHlwZSA9PSBQREZPQkpfU1RSRUFNKSB7CisgICAgICAgIENGWF9CeXRlU3RyaW5nIHJlc3VsdCA9IFBERl9FbmNvZGVUZXh0KHBVbmljb2RlcywgbGVuKTsKKyAgICAgICAgKChDUERGX1N0cmVhbSopdGhpcyktPlNldERhdGEoKEZYX0xQQllURSkoRlhfTFBDU1RSKXJlc3VsdCwgcmVzdWx0LkdldExlbmd0aCgpLCBGQUxTRSwgRkFMU0UpOworICAgIH0KK30KK0NQREZfTnVtYmVyOjpDUERGX051bWJlcihpbnQgdmFsdWUpCit7CisgICAgbV9UeXBlID0gUERGT0JKX05VTUJFUjsKKyAgICBtX2JJbnRlZ2VyID0gVFJVRTsKKyAgICBtX0ludGVnZXIgPSB2YWx1ZTsKK30KK0NQREZfTnVtYmVyOjpDUERGX051bWJlcihGWF9GTE9BVCB2YWx1ZSkKK3sKKyAgICBtX1R5cGUgPSBQREZPQkpfTlVNQkVSOworICAgIG1fYkludGVnZXIgPSBGQUxTRTsKKyAgICBtX0Zsb2F0ID0gdmFsdWU7Cit9CitDUERGX051bWJlcjo6Q1BERl9OdW1iZXIoRlhfQk9PTCBiSW50ZWdlciwgdm9pZCogcERhdGEpCit7CisgICAgbV9UeXBlID0gUERGT0JKX05VTUJFUjsKKyAgICBtX2JJbnRlZ2VyID0gYkludGVnZXI7CisgICAgbV9JbnRlZ2VyID0gKihpbnQqKXBEYXRhOworfQorZXh0ZXJuIHZvaWQgRlhfYXRvbnVtKEZYX0JTVFIsIEZYX0JPT0wmLCB2b2lkKik7CitDUERGX051bWJlcjo6Q1BERl9OdW1iZXIoRlhfQlNUUiBzdHIpCit7CisgICAgbV9UeXBlID0gUERGT0JKX05VTUJFUjsKKyAgICBGWF9hdG9udW0oc3RyLCBtX2JJbnRlZ2VyLCAmbV9JbnRlZ2VyKTsKK30KK3ZvaWQgQ1BERl9OdW1iZXI6OlNldFN0cmluZyhGWF9CU1RSIHN0cikKK3sKKyAgICBGWF9hdG9udW0oc3RyLCBtX2JJbnRlZ2VyLCAmbV9JbnRlZ2VyKTsKK30KK0ZYX0JPT0wgQ1BERl9OdW1iZXI6OklkZW50aWNhbChDUERGX051bWJlciogcE90aGVyKSBjb25zdAoreworICAgIHJldHVybiBtX2JJbnRlZ2VyID09IHBPdGhlci0+bV9iSW50ZWdlciAmJiBtX0ludGVnZXIgPT0gcE90aGVyLT5tX0ludGVnZXI7Cit9CitDRlhfQnl0ZVN0cmluZyBDUERGX051bWJlcjo6R2V0U3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iSW50ZWdlciA/IENGWF9CeXRlU3RyaW5nOjpGb3JtYXRJbnRlZ2VyKG1fSW50ZWdlciwgRlhGT1JNQVRfU0lHTkVEKSA6IENGWF9CeXRlU3RyaW5nOjpGb3JtYXRGbG9hdChtX0Zsb2F0KTsKK30KK3ZvaWQgQ1BERl9OdW1iZXI6OlNldE51bWJlcihGWF9GTE9BVCB2YWx1ZSkKK3sKKyAgICBtX2JJbnRlZ2VyID0gRkFMU0U7CisgICAgbV9GbG9hdCA9IHZhbHVlOworfQorQ1BERl9TdHJpbmc6OkNQREZfU3RyaW5nKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHIpCit7CisgICAgbV9UeXBlID0gUERGT0JKX1NUUklORzsKKyAgICBtX1N0cmluZyA9IFBERl9FbmNvZGVUZXh0KHN0ciwgc3RyLkdldExlbmd0aCgpKTsKKyAgICBtX2JIZXggPSBGQUxTRTsKK30KK0NQREZfQXJyYXk6On5DUERGX0FycmF5KCkKK3sKKyAgICBpbnQgc2l6ZSA9IG1fT2JqZWN0cy5HZXRTaXplKCk7CisgICAgQ1BERl9PYmplY3QqKiBwTGlzdCA9IChDUERGX09iamVjdCoqKW1fT2JqZWN0cy5HZXREYXRhKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKSB7CisgICAgICAgIHBMaXN0W2ldLT5SZWxlYXNlKCk7CisgICAgfQorfQorQ0ZYX0Zsb2F0UmVjdCBDUERGX0FycmF5OjpHZXRSZWN0KCkKK3sKKyAgICBDRlhfRmxvYXRSZWN0IHJlY3Q7CisgICAgaWYgKHRoaXMgPT0gTlVMTCB8fCBtX1R5cGUgIT0gUERGT0JKX0FSUkFZIHx8IG1fT2JqZWN0cy5HZXRTaXplKCkgIT0gNCkgeworICAgICAgICByZXR1cm4gcmVjdDsKKyAgICB9CisgICAgcmVjdC5sZWZ0ID0gR2V0TnVtYmVyKDApOworICAgIHJlY3QuYm90dG9tID0gR2V0TnVtYmVyKDEpOworICAgIHJlY3QucmlnaHQgPSBHZXROdW1iZXIoMik7CisgICAgcmVjdC50b3AgPSBHZXROdW1iZXIoMyk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CitDRlhfQWZmaW5lTWF0cml4IENQREZfQXJyYXk6OkdldE1hdHJpeCgpCit7CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXg7CisgICAgaWYgKHRoaXMgPT0gTlVMTCB8fCBtX1R5cGUgIT0gUERGT0JKX0FSUkFZIHx8IG1fT2JqZWN0cy5HZXRTaXplKCkgIT0gNikgeworICAgICAgICByZXR1cm4gbWF0cml4OworICAgIH0KKyAgICBtYXRyaXguU2V0KEdldE51bWJlcigwKSwgR2V0TnVtYmVyKDEpLCBHZXROdW1iZXIoMiksIEdldE51bWJlcigzKSwgR2V0TnVtYmVyKDQpLCBHZXROdW1iZXIoNSkpOworICAgIHJldHVybiBtYXRyaXg7Cit9CitDUERGX09iamVjdCogQ1BERl9BcnJheTo6R2V0RWxlbWVudChGWF9EV09SRCBpKSBjb25zdAoreworICAgIGlmICh0aGlzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChpID49IChGWF9EV09SRCltX09iamVjdHMuR2V0U2l6ZSgpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gKENQREZfT2JqZWN0KiltX09iamVjdHMuR2V0QXQoaSk7Cit9CitDUERGX09iamVjdCogQ1BERl9BcnJheTo6R2V0RWxlbWVudFZhbHVlKEZYX0RXT1JEIGkpIGNvbnN0Cit7CisgICAgaWYgKHRoaXMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGkgPj0gKEZYX0RXT1JEKW1fT2JqZWN0cy5HZXRTaXplKCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiAoKENQREZfT2JqZWN0KiltX09iamVjdHMuR2V0QXQoaSkpLT5HZXREaXJlY3QoKTsKK30KK0NGWF9CeXRlU3RyaW5nIENQREZfQXJyYXk6OkdldFN0cmluZyhGWF9EV09SRCBpKSBjb25zdAoreworICAgIGlmICh0aGlzICYmIGkgPCAoRlhfRFdPUkQpbV9PYmplY3RzLkdldFNpemUoKSkgeworICAgICAgICBDUERGX09iamVjdCogcCA9IChDUERGX09iamVjdCopbV9PYmplY3RzLkdldEF0KGkpOworICAgICAgICByZXR1cm4gcC0+R2V0U3RyaW5nKCk7CisgICAgfQorICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZygpOworfQorQ0ZYX0J5dGVTdHJpbmdDIENQREZfQXJyYXk6OkdldENvbnN0U3RyaW5nKEZYX0RXT1JEIGkpIGNvbnN0Cit7CisgICAgaWYgKHRoaXMgJiYgaSA8IChGWF9EV09SRCltX09iamVjdHMuR2V0U2l6ZSgpKSB7CisgICAgICAgIENQREZfT2JqZWN0KiBwID0gKENQREZfT2JqZWN0KiltX09iamVjdHMuR2V0QXQoaSk7CisgICAgICAgIHJldHVybiBwLT5HZXRDb25zdFN0cmluZygpOworICAgIH0KKyAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmdDKCk7Cit9CitpbnQgQ1BERl9BcnJheTo6R2V0SW50ZWdlcihGWF9EV09SRCBpKSBjb25zdAoreworICAgIGlmICh0aGlzID09IE5VTEwgfHwgaSA+PSAoRlhfRFdPUkQpbV9PYmplY3RzLkdldFNpemUoKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQ1BERl9PYmplY3QqIHAgPSAoQ1BERl9PYmplY3QqKW1fT2JqZWN0cy5HZXRBdChpKTsKKyAgICByZXR1cm4gcC0+R2V0SW50ZWdlcigpOworfQorRlhfRkxPQVQgQ1BERl9BcnJheTo6R2V0TnVtYmVyKEZYX0RXT1JEIGkpIGNvbnN0Cit7CisgICAgaWYgKHRoaXMgPT0gTlVMTCB8fCBpID49IChGWF9EV09SRCltX09iamVjdHMuR2V0U2l6ZSgpKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBDUERGX09iamVjdCogcCA9IChDUERGX09iamVjdCopbV9PYmplY3RzLkdldEF0KGkpOworICAgIHJldHVybiBwLT5HZXROdW1iZXIoKTsKK30KK0NQREZfRGljdGlvbmFyeSogQ1BERl9BcnJheTo6R2V0RGljdChGWF9EV09SRCBpKSBjb25zdAoreworICAgIENQREZfT2JqZWN0KiBwID0gR2V0RWxlbWVudFZhbHVlKGkpOworICAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfSBlbHNlIGlmIChwLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgcmV0dXJuIChDUERGX0RpY3Rpb25hcnkqKXA7CisgICAgfSBlbHNlIGlmIChwLT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUkVBTSkgeworICAgICAgICByZXR1cm4gKChDUERGX1N0cmVhbSopcCktPkdldERpY3QoKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CitDUERGX1N0cmVhbSogQ1BERl9BcnJheTo6R2V0U3RyZWFtKEZYX0RXT1JEIGkpIGNvbnN0Cit7CisgICAgQ1BERl9PYmplY3QqIHAgPSBHZXRFbGVtZW50VmFsdWUoaSk7CisgICAgaWYgKHAgPT0gTlVMTCB8fCBwLT5HZXRUeXBlKCkgIT0gUERGT0JKX1NUUkVBTSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIChDUERGX1N0cmVhbSopcDsKK30KK0NQREZfQXJyYXkqIENQREZfQXJyYXk6OkdldEFycmF5KEZYX0RXT1JEIGkpIGNvbnN0Cit7CisgICAgQ1BERl9PYmplY3QqIHAgPSBHZXRFbGVtZW50VmFsdWUoaSk7CisgICAgaWYgKHAgPT0gTlVMTCB8fCBwLT5HZXRUeXBlKCkgIT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gKENQREZfQXJyYXkqKXA7Cit9Cit2b2lkIENQREZfQXJyYXk6OlJlbW92ZUF0KEZYX0RXT1JEIGkpCit7CisgICAgQVNTRVJUKHRoaXMgIT0gTlVMTCAmJiBtX1R5cGUgPT0gUERGT0JKX0FSUkFZKTsKKyAgICBpZiAoaSA+PSAoRlhfRFdPUkQpbV9PYmplY3RzLkdldFNpemUoKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfT2JqZWN0KiBwID0gKENQREZfT2JqZWN0KiltX09iamVjdHMuR2V0QXQoaSk7CisgICAgcC0+UmVsZWFzZSgpOworICAgIG1fT2JqZWN0cy5SZW1vdmVBdChpKTsKK30KK3ZvaWQgQ1BERl9BcnJheTo6U2V0QXQoRlhfRFdPUkQgaSwgQ1BERl9PYmplY3QqIHBPYmosIENQREZfSW5kaXJlY3RPYmplY3RzKiBwT2JqcykKK3sKKyAgICBBU1NFUlQodGhpcyAhPSBOVUxMICYmIG1fVHlwZSA9PSBQREZPQkpfQVJSQVkpOworICAgIEFTU0VSVChpIDwgKEZYX0RXT1JEKW1fT2JqZWN0cy5HZXRTaXplKCkpOworICAgIGlmIChpID49IChGWF9EV09SRCltX09iamVjdHMuR2V0U2l6ZSgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1BERl9PYmplY3QqIHBPbGQgPSAoQ1BERl9PYmplY3QqKW1fT2JqZWN0cy5HZXRBdChpKTsKKyAgICBwT2xkLT5SZWxlYXNlKCk7CisgICAgaWYgKHBPYmotPkdldE9iak51bSgpKSB7CisgICAgICAgIEFTU0VSVChwT2JqcyAhPSBOVUxMKTsKKyAgICAgICAgcE9iaiA9IENQREZfUmVmZXJlbmNlOjpDcmVhdGUocE9ianMsIHBPYmotPkdldE9iak51bSgpKTsKKyAgICB9CisgICAgbV9PYmplY3RzLlNldEF0KGksIHBPYmopOworfQordm9pZCBDUERGX0FycmF5OjpJbnNlcnRBdChGWF9EV09SRCBpbmRleCwgQ1BERl9PYmplY3QqIHBPYmosIENQREZfSW5kaXJlY3RPYmplY3RzKiBwT2JqcykKK3sKKyAgICBBU1NFUlQocE9iaiAhPSBOVUxMKTsKKyAgICBpZiAocE9iai0+R2V0T2JqTnVtKCkpIHsKKyAgICAgICAgQVNTRVJUKHBPYmpzICE9IE5VTEwpOworICAgICAgICBwT2JqID0gQ1BERl9SZWZlcmVuY2U6OkNyZWF0ZShwT2JqcywgcE9iai0+R2V0T2JqTnVtKCkpOworICAgIH0KKyAgICBtX09iamVjdHMuSW5zZXJ0QXQoaW5kZXgsIHBPYmopOworfQordm9pZCBDUERGX0FycmF5OjpBZGQoQ1BERl9PYmplY3QqIHBPYmosIENQREZfSW5kaXJlY3RPYmplY3RzKiBwT2JqcykKK3sKKyAgICBBU1NFUlQocE9iaiAhPSBOVUxMKTsKKyAgICBpZiAocE9iai0+R2V0T2JqTnVtKCkpIHsKKyAgICAgICAgQVNTRVJUKHBPYmpzICE9IE5VTEwpOworICAgICAgICBwT2JqID0gQ1BERl9SZWZlcmVuY2U6OkNyZWF0ZShwT2JqcywgcE9iai0+R2V0T2JqTnVtKCkpOworICAgIH0KKyAgICBtX09iamVjdHMuQWRkKHBPYmopOworfQordm9pZCBDUERGX0FycmF5OjpBZGROYW1lKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIpCit7CisgICAgQVNTRVJUKHRoaXMgIT0gTlVMTCAmJiBtX1R5cGUgPT0gUERGT0JKX0FSUkFZKTsKKyAgICBBZGQoRlhfTkVXIENQREZfTmFtZShzdHIpKTsKK30KK3ZvaWQgQ1BERl9BcnJheTo6QWRkU3RyaW5nKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIpCit7CisgICAgQVNTRVJUKHRoaXMgIT0gTlVMTCAmJiBtX1R5cGUgPT0gUERGT0JKX0FSUkFZKTsKKyAgICBBZGQoRlhfTkVXIENQREZfU3RyaW5nKHN0cikpOworfQordm9pZCBDUERGX0FycmF5OjpBZGRJbnRlZ2VyKGludCBpKQoreworICAgIEFTU0VSVCh0aGlzICE9IE5VTEwgJiYgbV9UeXBlID09IFBERk9CSl9BUlJBWSk7CisgICAgQWRkKEZYX05FVyBDUERGX051bWJlcihpKSk7Cit9Cit2b2lkIENQREZfQXJyYXk6OkFkZE51bWJlcihGWF9GTE9BVCBmKQoreworICAgIEFTU0VSVCh0aGlzICE9IE5VTEwgJiYgbV9UeXBlID09IFBERk9CSl9BUlJBWSk7CisgICAgQ1BERl9OdW1iZXIqIHBOdW1iZXIgPSBGWF9ORVcgQ1BERl9OdW1iZXI7CisgICAgcE51bWJlci0+U2V0TnVtYmVyKGYpOworICAgIEFkZChwTnVtYmVyKTsKK30KK3ZvaWQgQ1BERl9BcnJheTo6QWRkUmVmZXJlbmNlKENQREZfSW5kaXJlY3RPYmplY3RzKiBwRG9jLCBGWF9EV09SRCBvYmpudW0pCit7CisgICAgQVNTRVJUKHRoaXMgIT0gTlVMTCAmJiBtX1R5cGUgPT0gUERGT0JKX0FSUkFZKTsKKyAgICBBZGQoRlhfTkVXIENQREZfUmVmZXJlbmNlKHBEb2MsIG9iam51bSkpOworfQorRlhfQk9PTCBDUERGX0FycmF5OjpJZGVudGljYWwoQ1BERl9BcnJheSogcE90aGVyKSBjb25zdAoreworICAgIGlmIChtX09iamVjdHMuR2V0U2l6ZSgpICE9IHBPdGhlci0+bV9PYmplY3RzLkdldFNpemUoKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9PYmplY3RzLkdldFNpemUoKTsgaSArKykKKyAgICAgICAgaWYgKCEoKENQREZfT2JqZWN0KiltX09iamVjdHNbaV0pLT5Jc0lkZW50aWNhbCgoQ1BERl9PYmplY3QqKXBPdGhlci0+bV9PYmplY3RzW2ldKSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitDUERGX0RpY3Rpb25hcnk6On5DUERGX0RpY3Rpb25hcnkoKQoreworICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fTWFwLkdldFN0YXJ0UG9zaXRpb24oKTsKKyAgICB3aGlsZSAocG9zKSB7CisgICAgICAgIEZYX0xQVk9JRCB2YWx1ZSA9IG1fTWFwLkdldE5leHRWYWx1ZShwb3MpOworICAgICAgICAoKENQREZfT2JqZWN0Kil2YWx1ZSktPlJlbGVhc2UoKTsKKyAgICB9Cit9CitGWF9QT1NJVElPTiBDUERGX0RpY3Rpb25hcnk6OkdldFN0YXJ0UG9zKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9NYXAuR2V0U3RhcnRQb3NpdGlvbigpOworfQorQ1BERl9PYmplY3QqIENQREZfRGljdGlvbmFyeTo6R2V0TmV4dEVsZW1lbnQoRlhfUE9TSVRJT04mIHBvcywgQ0ZYX0J5dGVTdHJpbmcmIGtleSkgY29uc3QKK3sKKyAgICBpZiAocG9zID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfT2JqZWN0KiBwOworICAgIG1fTWFwLkdldE5leHRBc3NvYyhwb3MsIGtleSwgKEZYX0xQVk9JRCYpcCk7CisgICAgcmV0dXJuIHA7Cit9CitDUERGX09iamVjdCogQ1BERl9EaWN0aW9uYXJ5OjpHZXRFbGVtZW50KEZYX0JTVFIga2V5KSBjb25zdAoreworICAgIGlmICh0aGlzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfT2JqZWN0KiBwID0gTlVMTDsKKyAgICBtX01hcC5Mb29rdXAoa2V5LCAodm9pZComKXApOworICAgIHJldHVybiBwOworfQorQ1BERl9PYmplY3QqIENQREZfRGljdGlvbmFyeTo6R2V0RWxlbWVudFZhbHVlKEZYX0JTVFIga2V5KSBjb25zdAoreworICAgIGlmICh0aGlzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfT2JqZWN0KiBwID0gTlVMTDsKKyAgICBtX01hcC5Mb29rdXAoa2V5LCAodm9pZComKXApOworICAgIHJldHVybiBwLT5HZXREaXJlY3QoKTsKK30KK0NGWF9CeXRlU3RyaW5nIENQREZfRGljdGlvbmFyeTo6R2V0U3RyaW5nKEZYX0JTVFIga2V5KSBjb25zdAoreworICAgIGlmICh0aGlzKSB7CisgICAgICAgIENQREZfT2JqZWN0KiBwID0gTlVMTDsKKyAgICAgICAgbV9NYXAuTG9va3VwKGtleSwgKHZvaWQqJilwKTsKKyAgICAgICAgaWYgKHApIHsKKyAgICAgICAgICAgIHJldHVybiBwLT5HZXRTdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsKK30KK0NGWF9CeXRlU3RyaW5nQyBDUERGX0RpY3Rpb25hcnk6OkdldENvbnN0U3RyaW5nKEZYX0JTVFIga2V5KSBjb25zdAoreworICAgIGlmICh0aGlzKSB7CisgICAgICAgIENQREZfT2JqZWN0KiBwID0gTlVMTDsKKyAgICAgICAgbV9NYXAuTG9va3VwKGtleSwgKHZvaWQqJilwKTsKKyAgICAgICAgaWYgKHApIHsKKyAgICAgICAgICAgIHJldHVybiBwLT5HZXRDb25zdFN0cmluZygpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0MoKTsKK30KK0NGWF9XaWRlU3RyaW5nIENQREZfRGljdGlvbmFyeTo6R2V0VW5pY29kZVRleHQoRlhfQlNUUiBrZXksIENGWF9DaGFyTWFwKiBwQ2hhck1hcCkgY29uc3QKK3sKKyAgICBpZiAodGhpcykgeworICAgICAgICBDUERGX09iamVjdCogcCA9IE5VTEw7CisgICAgICAgIG1fTWFwLkxvb2t1cChrZXksICh2b2lkKiYpcCk7CisgICAgICAgIGlmIChwKSB7CisgICAgICAgICAgICBpZihwLT5HZXRUeXBlKCkgPT0gUERGT0JKX1JFRkVSRU5DRSkgeworICAgICAgICAgICAgICAgIHAgPSAoKENQREZfUmVmZXJlbmNlKilwKS0+R2V0RGlyZWN0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHAtPkdldFVuaWNvZGVUZXh0KHBDaGFyTWFwKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHAtPkdldFVuaWNvZGVUZXh0KHBDaGFyTWFwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsKK30KK0NGWF9CeXRlU3RyaW5nIENQREZfRGljdGlvbmFyeTo6R2V0U3RyaW5nKEZYX0JTVFIga2V5LCBGWF9CU1RSIGRlZikgY29uc3QKK3sKKyAgICBpZiAodGhpcykgeworICAgICAgICBDUERGX09iamVjdCogcCA9IE5VTEw7CisgICAgICAgIG1fTWFwLkxvb2t1cChrZXksICh2b2lkKiYpcCk7CisgICAgICAgIGlmIChwKSB7CisgICAgICAgICAgICByZXR1cm4gcC0+R2V0U3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKGRlZik7Cit9CitDRlhfQnl0ZVN0cmluZ0MgQ1BERl9EaWN0aW9uYXJ5OjpHZXRDb25zdFN0cmluZyhGWF9CU1RSIGtleSwgRlhfQlNUUiBkZWYpIGNvbnN0Cit7CisgICAgaWYgKHRoaXMpIHsKKyAgICAgICAgQ1BERl9PYmplY3QqIHAgPSBOVUxMOworICAgICAgICBtX01hcC5Mb29rdXAoa2V5LCAodm9pZComKXApOworICAgICAgICBpZiAocCkgeworICAgICAgICAgICAgcmV0dXJuIHAtPkdldENvbnN0U3RyaW5nKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nQyhkZWYpOworfQoraW50IENQREZfRGljdGlvbmFyeTo6R2V0SW50ZWdlcihGWF9CU1RSIGtleSkgY29uc3QKK3sKKyAgICBpZiAodGhpcykgeworICAgICAgICBDUERGX09iamVjdCogcCA9IE5VTEw7CisgICAgICAgIG1fTWFwLkxvb2t1cChrZXksICh2b2lkKiYpcCk7CisgICAgICAgIGlmIChwKSB7CisgICAgICAgICAgICByZXR1cm4gcC0+R2V0SW50ZWdlcigpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQoraW50IENQREZfRGljdGlvbmFyeTo6R2V0SW50ZWdlcihGWF9CU1RSIGtleSwgaW50IGRlZikgY29uc3QKK3sKKyAgICBpZiAodGhpcykgeworICAgICAgICBDUERGX09iamVjdCogcCA9IE5VTEw7CisgICAgICAgIG1fTWFwLkxvb2t1cChrZXksICh2b2lkKiYpcCk7CisgICAgICAgIGlmIChwKSB7CisgICAgICAgICAgICByZXR1cm4gcC0+R2V0SW50ZWdlcigpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBkZWY7Cit9CitGWF9GTE9BVCBDUERGX0RpY3Rpb25hcnk6OkdldE51bWJlcihGWF9CU1RSIGtleSkgY29uc3QKK3sKKyAgICBpZiAodGhpcykgeworICAgICAgICBDUERGX09iamVjdCogcCA9IE5VTEw7CisgICAgICAgIG1fTWFwLkxvb2t1cChrZXksICh2b2lkKiYpcCk7CisgICAgICAgIGlmIChwKSB7CisgICAgICAgICAgICByZXR1cm4gcC0+R2V0TnVtYmVyKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CitGWF9CT09MIENQREZfRGljdGlvbmFyeTo6R2V0Qm9vbGVhbihGWF9CU1RSIGtleSwgRlhfQk9PTCBiRGVmYXVsdCkgY29uc3QKK3sKKyAgICBpZiAodGhpcykgeworICAgICAgICBDUERGX09iamVjdCogcCA9IE5VTEw7CisgICAgICAgIG1fTWFwLkxvb2t1cChrZXksICh2b2lkKiYpcCk7CisgICAgICAgIGlmIChwICYmIHAtPkdldFR5cGUoKSA9PSBQREZPQkpfQk9PTEVBTikgeworICAgICAgICAgICAgcmV0dXJuIHAtPkdldEludGVnZXIoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYkRlZmF1bHQ7Cit9CitDUERGX0RpY3Rpb25hcnkqIENQREZfRGljdGlvbmFyeTo6R2V0RGljdChGWF9CU1RSIGtleSkgY29uc3QKK3sKKyAgICBDUERGX09iamVjdCogcCA9IEdldEVsZW1lbnRWYWx1ZShrZXkpOworICAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfSBlbHNlIGlmIChwLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgcmV0dXJuIChDUERGX0RpY3Rpb25hcnkqKXA7CisgICAgfSBlbHNlIGlmIChwLT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUkVBTSkgeworICAgICAgICByZXR1cm4gKChDUERGX1N0cmVhbSopcCktPkdldERpY3QoKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CitDUERGX0FycmF5KiBDUERGX0RpY3Rpb25hcnk6OkdldEFycmF5KEZYX0JTVFIga2V5KSBjb25zdAoreworICAgIENQREZfT2JqZWN0KiBwID0gR2V0RWxlbWVudFZhbHVlKGtleSk7CisgICAgaWYgKHAgPT0gTlVMTCB8fCBwLT5HZXRUeXBlKCkgIT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gKENQREZfQXJyYXkqKXA7Cit9CitDUERGX1N0cmVhbSogQ1BERl9EaWN0aW9uYXJ5OjpHZXRTdHJlYW0oRlhfQlNUUiBrZXkpIGNvbnN0Cit7CisgICAgQ1BERl9PYmplY3QqIHAgPSBHZXRFbGVtZW50VmFsdWUoa2V5KTsKKyAgICBpZiAocCA9PSBOVUxMIHx8IHAtPkdldFR5cGUoKSAhPSBQREZPQkpfU1RSRUFNKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gKENQREZfU3RyZWFtKilwOworfQorQ0ZYX0Zsb2F0UmVjdCBDUERGX0RpY3Rpb25hcnk6OkdldFJlY3QoRlhfQlNUUiBrZXkpIGNvbnN0Cit7CisgICAgQ0ZYX0Zsb2F0UmVjdCByZWN0OworICAgIENQREZfQXJyYXkqIHBBcnJheSA9IEdldEFycmF5KGtleSk7CisgICAgaWYgKHBBcnJheSkgeworICAgICAgICByZWN0ID0gcEFycmF5LT5HZXRSZWN0KCk7CisgICAgfQorICAgIHJldHVybiByZWN0OworfQorQ0ZYX0FmZmluZU1hdHJpeCBDUERGX0RpY3Rpb25hcnk6OkdldE1hdHJpeChGWF9CU1RSIGtleSkgY29uc3QKK3sKKyAgICBDRlhfQWZmaW5lTWF0cml4IG1hdHJpeDsKKyAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBHZXRBcnJheShrZXkpOworICAgIGlmIChwQXJyYXkpIHsKKyAgICAgICAgbWF0cml4ID0gcEFycmF5LT5HZXRNYXRyaXgoKTsKKyAgICB9CisgICAgcmV0dXJuIG1hdHJpeDsKK30KK0ZYX0JPT0wgQ1BERl9EaWN0aW9uYXJ5OjpLZXlFeGlzdChGWF9CU1RSIGtleSkgY29uc3QKK3sKKyAgICBpZiAodGhpcyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgRlhfTFBWT0lEIHZhbHVlOworICAgIHJldHVybiBtX01hcC5Mb29rdXAoa2V5LCB2YWx1ZSk7Cit9Cit2b2lkIENQREZfRGljdGlvbmFyeTo6U2V0QXQoRlhfQlNUUiBrZXksIENQREZfT2JqZWN0KiBwT2JqLCBDUERGX0luZGlyZWN0T2JqZWN0cyogcE9ianMpCit7CisgICAgQVNTRVJUKHRoaXMgIT0gTlVMTCAmJiBtX1R5cGUgPT0gUERGT0JKX0RJQ1RJT05BUlkpOworICAgIENQREZfT2JqZWN0KiBwID0gTlVMTDsKKyAgICBtX01hcC5Mb29rdXAoa2V5LCAodm9pZComKXApOworICAgIGlmIChwID09IHBPYmopIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocCkgeworICAgICAgICBwLT5SZWxlYXNlKCk7CisgICAgfQorICAgIGlmIChwT2JqKSB7CisgICAgICAgIGlmIChwT2JqLT5HZXRPYmpOdW0oKSkgeworICAgICAgICAgICAgQVNTRVJUKHBPYmpzICE9IE5VTEwpOworICAgICAgICAgICAgcE9iaiA9IENQREZfUmVmZXJlbmNlOjpDcmVhdGUocE9ianMsIHBPYmotPkdldE9iak51bSgpKTsKKyAgICAgICAgfQorICAgICAgICBtX01hcC5TZXRBdChrZXksIHBPYmopOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fTWFwLlJlbW92ZUtleShrZXkpOworICAgIH0KK30KK3ZvaWQgQ1BERl9EaWN0aW9uYXJ5OjpBZGRWYWx1ZShGWF9CU1RSIGtleSwgQ1BERl9PYmplY3QqIHBPYmopCit7CisgICAgQVNTRVJUKHRoaXMgIT0gTlVMTCAmJiBtX1R5cGUgPT0gUERGT0JKX0RJQ1RJT05BUlkpOworICAgIG1fTWFwLkFkZFZhbHVlKGtleSwgcE9iaik7Cit9Cit2b2lkIENQREZfRGljdGlvbmFyeTo6UmVtb3ZlQXQoRlhfQlNUUiBrZXkpCit7CisgICAgQVNTRVJUKHRoaXMgIT0gTlVMTCAmJiBtX1R5cGUgPT0gUERGT0JKX0RJQ1RJT05BUlkpOworICAgIENQREZfT2JqZWN0KiBwID0gTlVMTDsKKyAgICBtX01hcC5Mb29rdXAoa2V5LCAodm9pZComKXApOworICAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwLT5SZWxlYXNlKCk7CisgICAgbV9NYXAuUmVtb3ZlS2V5KGtleSk7Cit9Cit2b2lkIENQREZfRGljdGlvbmFyeTo6UmVwbGFjZUtleShGWF9CU1RSIG9sZGtleSwgRlhfQlNUUiBuZXdrZXkpCit7CisgICAgQVNTRVJUKHRoaXMgIT0gTlVMTCAmJiBtX1R5cGUgPT0gUERGT0JKX0RJQ1RJT05BUlkpOworICAgIENQREZfT2JqZWN0KiBwID0gTlVMTDsKKyAgICBtX01hcC5Mb29rdXAob2xka2V5LCAodm9pZComKXApOworICAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX01hcC5SZW1vdmVLZXkob2xka2V5KTsKKyAgICBtX01hcC5TZXRBdChuZXdrZXksIHApOworfQorRlhfQk9PTCBDUERGX0RpY3Rpb25hcnk6OklkZW50aWNhbChDUERGX0RpY3Rpb25hcnkqIHBPdGhlcikgY29uc3QKK3sKKyAgICBpZiAodGhpcyA9PSBOVUxMKSB7CisgICAgICAgIGlmIChwT3RoZXIgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAocE90aGVyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAobV9NYXAuR2V0Q291bnQoKSAhPSBwT3RoZXItPm1fTWFwLkdldENvdW50KCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWF9QT1NJVElPTiBwb3MgPSBtX01hcC5HZXRTdGFydFBvc2l0aW9uKCk7CisgICAgd2hpbGUgKHBvcykgeworICAgICAgICBDRlhfQnl0ZVN0cmluZyBrZXk7CisgICAgICAgIEZYX0xQVk9JRCB2YWx1ZTsKKyAgICAgICAgbV9NYXAuR2V0TmV4dEFzc29jKHBvcywga2V5LCB2YWx1ZSk7CisgICAgICAgIGlmICghKChDUERGX09iamVjdCopdmFsdWUpLT5Jc0lkZW50aWNhbChwT3RoZXItPkdldEVsZW1lbnQoa2V5KSkpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK3ZvaWQgQ1BERl9EaWN0aW9uYXJ5OjpTZXRBdEludGVnZXIoRlhfQlNUUiBrZXksIGludCBpKQoreworICAgIFNldEF0KGtleSwgRlhfTkVXIENQREZfTnVtYmVyKGkpKTsKK30KK3ZvaWQgQ1BERl9EaWN0aW9uYXJ5OjpTZXRBdE5hbWUoRlhfQlNUUiBrZXksIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lKQoreworICAgIFNldEF0KGtleSwgRlhfTkVXIENQREZfTmFtZShuYW1lKSk7Cit9Cit2b2lkIENQREZfRGljdGlvbmFyeTo6U2V0QXRTdHJpbmcoRlhfQlNUUiBrZXksIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIpCit7CisgICAgU2V0QXQoa2V5LCBGWF9ORVcgQ1BERl9TdHJpbmcoc3RyKSk7Cit9Cit2b2lkIENQREZfRGljdGlvbmFyeTo6U2V0QXRSZWZlcmVuY2UoRlhfQlNUUiBrZXksIENQREZfSW5kaXJlY3RPYmplY3RzKiBwRG9jLCBGWF9EV09SRCBvYmpudW0pCit7CisgICAgU2V0QXQoa2V5LCBGWF9ORVcgQ1BERl9SZWZlcmVuY2UocERvYywgb2JqbnVtKSk7Cit9Cit2b2lkIENQREZfRGljdGlvbmFyeTo6QWRkUmVmZXJlbmNlKEZYX0JTVFIga2V5LCBDUERGX0luZGlyZWN0T2JqZWN0cyogcERvYywgRlhfRFdPUkQgb2JqbnVtKQoreworICAgIEFkZFZhbHVlKGtleSwgRlhfTkVXIENQREZfUmVmZXJlbmNlKHBEb2MsIG9iam51bSkpOworfQordm9pZCBDUERGX0RpY3Rpb25hcnk6OlNldEF0TnVtYmVyKEZYX0JTVFIga2V5LCBGWF9GTE9BVCBmKQoreworICAgIENQREZfTnVtYmVyKiBwTnVtYmVyID0gRlhfTkVXIENQREZfTnVtYmVyOworICAgIHBOdW1iZXItPlNldE51bWJlcihmKTsKKyAgICBTZXRBdChrZXksIHBOdW1iZXIpOworfQordm9pZCBDUERGX0RpY3Rpb25hcnk6OlNldEF0Qm9vbGVhbihGWF9CU1RSIGtleSwgRlhfQk9PTCBiVmFsdWUpCit7CisgICAgU2V0QXQoa2V5LCBGWF9ORVcgQ1BERl9Cb29sZWFuKGJWYWx1ZSkpOworfQordm9pZCBDUERGX0RpY3Rpb25hcnk6OlNldEF0UmVjdChGWF9CU1RSIGtleSwgY29uc3QgQ0ZYX0Zsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBGWF9ORVcgQ1BERl9BcnJheTsKKyAgICBwQXJyYXktPkFkZE51bWJlcihyZWN0LmxlZnQpOworICAgIHBBcnJheS0+QWRkTnVtYmVyKHJlY3QuYm90dG9tKTsKKyAgICBwQXJyYXktPkFkZE51bWJlcihyZWN0LnJpZ2h0KTsKKyAgICBwQXJyYXktPkFkZE51bWJlcihyZWN0LnRvcCk7CisgICAgU2V0QXQoa2V5LCBwQXJyYXkpOworfQordm9pZCBDUERGX0RpY3Rpb25hcnk6OlNldEF0TWF0cml4KEZYX0JTVFIga2V5LCBjb25zdCBDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpCit7CisgICAgQ1BERl9BcnJheSogcEFycmF5ID0gRlhfTkVXIENQREZfQXJyYXk7CisgICAgcEFycmF5LT5BZGROdW1iZXIxNihtYXRyaXguYSk7CisgICAgcEFycmF5LT5BZGROdW1iZXIxNihtYXRyaXguYik7CisgICAgcEFycmF5LT5BZGROdW1iZXIxNihtYXRyaXguYyk7CisgICAgcEFycmF5LT5BZGROdW1iZXIxNihtYXRyaXguZCk7CisgICAgcEFycmF5LT5BZGROdW1iZXIobWF0cml4LmUpOworICAgIHBBcnJheS0+QWRkTnVtYmVyKG1hdHJpeC5mKTsKKyAgICBTZXRBdChrZXksIHBBcnJheSk7Cit9CitDUERGX1N0cmVhbTo6Q1BERl9TdHJlYW0oRlhfTFBCWVRFIHBEYXRhLCBGWF9EV09SRCBzaXplLCBDUERGX0RpY3Rpb25hcnkqIHBEaWN0KQoreworICAgIG1fVHlwZSA9IFBERk9CSl9TVFJFQU07CisgICAgbV9wRGljdCA9IHBEaWN0OworICAgIG1fZHdTaXplID0gc2l6ZTsKKyAgICBtX0dlbk51bSA9IChGWF9EV09SRCkgLSAxOworICAgIG1fcERhdGFCdWYgPSBwRGF0YTsKKyAgICBtX3BDcnlwdG9IYW5kbGVyID0gTlVMTDsKK30KK0NQREZfU3RyZWFtOjp+Q1BERl9TdHJlYW0oKQoreworICAgIGlmIChtX0dlbk51bSA9PSAoRlhfRFdPUkQpIC0gMSAmJiBtX3BEYXRhQnVmICE9IE5VTEwpIHsKKyAgICAgICAgRlhfRnJlZShtX3BEYXRhQnVmKTsKKyAgICB9CisgICAgaWYgKG1fcERpY3QpIHsKKyAgICAgICAgbV9wRGljdC0+UmVsZWFzZSgpOworICAgIH0KK30KK3ZvaWQgQ1BERl9TdHJlYW06OkluaXRTdHJlYW0oQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCkKK3sKKyAgICBpZiAocERpY3QpIHsKKyAgICAgICAgaWYgKG1fcERpY3QpIHsKKyAgICAgICAgICAgIG1fcERpY3QtPlJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgICAgICBtX3BEaWN0ID0gcERpY3Q7CisgICAgfQorICAgIGlmIChtX0dlbk51bSA9PSAoRlhfRFdPUkQpIC0gMSkgeworICAgICAgICBpZiAobV9wRGF0YUJ1ZikgeworICAgICAgICAgICAgRlhfRnJlZShtX3BEYXRhQnVmKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX0dlbk51bSA9IDA7CisgICAgbV9wRmlsZSA9IE5VTEw7CisgICAgbV9wQ3J5cHRvSGFuZGxlciA9IE5VTEw7CisgICAgbV9GaWxlT2Zmc2V0ID0gMDsKK30KK3ZvaWQgQ1BERl9TdHJlYW06OkluaXRTdHJlYW0oRlhfTFBCWVRFIHBEYXRhLCBGWF9EV09SRCBzaXplLCBDUERGX0RpY3Rpb25hcnkqIHBEaWN0KQoreworICAgIEluaXRTdHJlYW0ocERpY3QpOworICAgIG1fR2VuTnVtID0gKEZYX0RXT1JEKSAtIDE7CisgICAgbV9wRGF0YUJ1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIHNpemUpOworICAgIGlmIChwRGF0YSkgeworICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhQnVmLCBwRGF0YSwgc2l6ZSk7CisgICAgfQorICAgIG1fZHdTaXplID0gc2l6ZTsKKyAgICBpZiAobV9wRGljdCkgeworICAgICAgICBtX3BEaWN0LT5TZXRBdEludGVnZXIoRlhfQlNUUkMoIkxlbmd0aCIpLCBzaXplKTsKKyAgICB9Cit9Cit2b2lkIENQREZfU3RyZWFtOjpTZXREYXRhKEZYX0xQQ0JZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUsIEZYX0JPT0wgYkNvbXByZXNzZWQsIEZYX0JPT0wgYktlZXBCdWYpCit7CisgICAgaWYgKG1fR2VuTnVtID09IChGWF9EV09SRCkgLSAxKSB7CisgICAgICAgIGlmIChtX3BEYXRhQnVmKSB7CisgICAgICAgICAgICBGWF9GcmVlKG1fcERhdGFCdWYpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9HZW5OdW0gPSAoRlhfRFdPUkQpIC0gMTsKKyAgICAgICAgbV9wQ3J5cHRvSGFuZGxlciA9IE5VTEw7CisgICAgfQorICAgIGlmIChiS2VlcEJ1ZikgeworICAgICAgICBtX3BEYXRhQnVmID0gKEZYX0xQQllURSlwRGF0YTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3BEYXRhQnVmID0gRlhfQWxsb2MoRlhfQllURSwgc2l6ZSk7CisgICAgICAgIGlmIChwRGF0YSkgeworICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wRGF0YUJ1ZiwgcERhdGEsIHNpemUpOworICAgICAgICB9CisgICAgfQorICAgIG1fZHdTaXplID0gc2l6ZTsKKyAgICBpZiAobV9wRGljdCA9PSBOVUxMKSB7CisgICAgICAgIG1fcERpY3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5OworICAgIH0KKyAgICBtX3BEaWN0LT5TZXRBdEludGVnZXIoRlhfQlNUUkMoIkxlbmd0aCIpLCBzaXplKTsKKyAgICBpZiAoIWJDb21wcmVzc2VkKSB7CisgICAgICAgIG1fcERpY3QtPlJlbW92ZUF0KEZYX0JTVFJDKCJGaWx0ZXIiKSk7CisgICAgICAgIG1fcERpY3QtPlJlbW92ZUF0KEZYX0JTVFJDKCJEZWNvZGVQYXJtcyIpKTsKKyAgICB9Cit9CitGWF9CT09MIENQREZfU3RyZWFtOjpSZWFkUmF3RGF0YShGWF9GSUxFU0laRSBvZmZzZXQsIEZYX0xQQllURSBidWYsIEZYX0RXT1JEIHNpemUpIGNvbnN0Cit7CisgICAgaWYgKChtX0dlbk51bSAhPSAoRlhfRFdPUkQpIC0gMSkgJiYgbV9wRmlsZSkgeworICAgICAgICByZXR1cm4gbV9wRmlsZS0+UmVhZEJsb2NrKGJ1ZiwgbV9GaWxlT2Zmc2V0ICsgb2Zmc2V0LCBzaXplKTsKKyAgICB9CisgICAgaWYgKG1fcERhdGFCdWYpIHsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIoYnVmLCBtX3BEYXRhQnVmICsgb2Zmc2V0LCBzaXplKTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9Cit2b2lkIENQREZfU3RyZWFtOjpJbml0U3RyZWFtKElGWF9GaWxlUmVhZCAqcEZpbGUsIENQREZfRGljdGlvbmFyeSogcERpY3QpCit7CisgICAgSW5pdFN0cmVhbShwRGljdCk7CisgICAgbV9wRmlsZSA9IHBGaWxlOworICAgIG1fZHdTaXplID0gKEZYX0RXT1JEKXBGaWxlLT5HZXRTaXplKCk7CisgICAgaWYgKG1fcERpY3QpIHsKKyAgICAgICAgbV9wRGljdC0+U2V0QXRJbnRlZ2VyKEZYX0JTVFJDKCJMZW5ndGgiKSwgbV9kd1NpemUpOworICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9TdHJlYW06OklkZW50aWNhbChDUERGX1N0cmVhbSogcE90aGVyKSBjb25zdAoreworICAgIGlmICghbV9wRGljdC0+SWRlbnRpY2FsKHBPdGhlci0+bV9wRGljdCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAobV9kd1NpemUgIT0gcE90aGVyLT5tX2R3U2l6ZSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChtX0dlbk51bSAhPSAoRlhfRFdPUkQpIC0gMSAmJiBwT3RoZXItPm1fR2VuTnVtICE9IChGWF9EV09SRCkgLSAxKSB7CisgICAgICAgIGlmIChtX3BGaWxlID09IHBPdGhlci0+bV9wRmlsZSAmJiBtX3BGaWxlID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIGlmICghbV9wRmlsZSB8fCAhcE90aGVyLT5tX3BGaWxlKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgRlhfQllURSBzcmNCdWZbMTAyNF07CisgICAgICAgIEZYX0JZVEUgZGVzdEJ1ZlsxMDI0XTsKKyAgICAgICAgRlhfRFdPUkQgc2l6ZSA9IG1fZHdTaXplOworICAgICAgICBGWF9EV09SRCBzcmNPZmZzZXQgPSBtX0ZpbGVPZmZzZXQ7CisgICAgICAgIEZYX0RXT1JEIGRlc3RPZmZzZXQgPSBwT3RoZXItPm1fRmlsZU9mZnNldDsKKyAgICAgICAgaWYgKG1fcEZpbGUgPT0gcE90aGVyLT5tX3BGaWxlICYmIHNyY09mZnNldCA9PSBkZXN0T2Zmc2V0KSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoc2l6ZSA+IDApIHsKKyAgICAgICAgICAgIEZYX0RXT1JEIGFjdHVhbFNpemUgPSBzaXplID4gMTAyNCA/IDEwMjQgOiBzaXplOworICAgICAgICAgICAgbV9wRmlsZS0+UmVhZEJsb2NrKHNyY0J1Ziwgc3JjT2Zmc2V0LCBhY3R1YWxTaXplKTsKKyAgICAgICAgICAgIHBPdGhlci0+bV9wRmlsZS0+UmVhZEJsb2NrKGRlc3RCdWYsIGRlc3RPZmZzZXQsIGFjdHVhbFNpemUpOworICAgICAgICAgICAgaWYgKEZYU1lTX21lbWNtcDMyKHNyY0J1ZiwgZGVzdEJ1ZiwgYWN0dWFsU2l6ZSkgIT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNpemUgLT0gYWN0dWFsU2l6ZTsKKyAgICAgICAgICAgIHNyY09mZnNldCArPSBhY3R1YWxTaXplOworICAgICAgICAgICAgZGVzdE9mZnNldCArPSBhY3R1YWxTaXplOworICAgICAgICB9CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBpZiAobV9HZW5OdW0gIT0gKEZYX0RXT1JEKSAtIDEgfHwgcE90aGVyLT5tX0dlbk51bSAhPSAoRlhfRFdPUkQpIC0gMSkgeworICAgICAgICBJRlhfRmlsZVJlYWQqIHBGaWxlID0gTlVMTDsKKyAgICAgICAgRlhfTFBCWVRFIHBCdWYgPSBOVUxMOworICAgICAgICBGWF9EV09SRCBvZmZzZXQgPSAwOworICAgICAgICBpZiAobV9HZW5OdW0gIT0gKEZYX0RXT1JEKSAtIDEpIHsKKyAgICAgICAgICAgIHBGaWxlID0gbV9wRmlsZTsKKyAgICAgICAgICAgIHBCdWYgPSBwT3RoZXItPm1fcERhdGFCdWY7CisgICAgICAgICAgICBvZmZzZXQgPSBtX0ZpbGVPZmZzZXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBPdGhlci0+bV9HZW5OdW0gIT0gKEZYX0RXT1JEKSAtIDEpIHsKKyAgICAgICAgICAgIHBGaWxlID0gcE90aGVyLT5tX3BGaWxlOworICAgICAgICAgICAgcEJ1ZiA9IG1fcERhdGFCdWY7CisgICAgICAgICAgICBvZmZzZXQgPSBwT3RoZXItPm1fRmlsZU9mZnNldDsKKyAgICAgICAgfQorICAgICAgICBpZiAoTlVMTCA9PSBwQnVmKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgRlhfQllURSBzcmNCdWZbMTAyNF07CisgICAgICAgIEZYX0RXT1JEIHNpemUgPSBtX2R3U2l6ZTsKKyAgICAgICAgd2hpbGUgKHNpemUgPiAwKSB7CisgICAgICAgICAgICBGWF9EV09SRCBhY3R1YWxTaXplID0gc2l6ZSA+IDEwMjQgPyAxMDI0IDogc2l6ZTsKKyAgICAgICAgICAgIG1fcEZpbGUtPlJlYWRCbG9jayhzcmNCdWYsIG9mZnNldCwgYWN0dWFsU2l6ZSk7CisgICAgICAgICAgICBpZiAoRlhTWVNfbWVtY21wMzIoc3JjQnVmLCBwQnVmLCBhY3R1YWxTaXplKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcEJ1ZiArPSBhY3R1YWxTaXplOworICAgICAgICAgICAgc2l6ZSAtPSBhY3R1YWxTaXplOworICAgICAgICAgICAgb2Zmc2V0ICs9IGFjdHVhbFNpemU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGWFNZU19tZW1jbXAzMihtX3BEYXRhQnVmLCBwT3RoZXItPm1fcERhdGFCdWYsIG1fZHdTaXplKSA9PSAwOworfQorQ1BERl9TdHJlYW0qIENQREZfU3RyZWFtOjpDbG9uZShGWF9CT09MIGJEaXJlY3QsIEZQREZfTFBGQ2xvbmVTdHJlYW1DYWxsYmFjayBscGZDYWxsYmFjaywgRlhfTFBWT0lEIHBVc2VyRGF0YSkgY29uc3QKK3sKKyAgICBDUERGX0RpY3Rpb25hcnkgKnBDbG9uZURpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KiltX3BEaWN0LT5DbG9uZShiRGlyZWN0KTsKKyAgICBJRlhfRmlsZVN0cmVhbSAqcEZTID0gTlVMTDsKKyAgICBpZiAobHBmQ2FsbGJhY2spIHsKKyAgICAgICAgcEZTID0gbHBmQ2FsbGJhY2soKENQREZfU3RyZWFtKil0aGlzLCBwVXNlckRhdGEpOworICAgIH0KKyAgICBpZiAoIXBGUykgeworICAgICAgICBDUERGX1N0cmVhbUFjYyBhY2M7CisgICAgICAgIGFjYy5Mb2FkQWxsRGF0YSh0aGlzLCBUUlVFKTsKKyAgICAgICAgRlhfRFdPUkQgc3RyZWFtU2l6ZSA9IGFjYy5HZXRTaXplKCk7CisgICAgICAgIENQREZfU3RyZWFtKiBwT2JqID0gRlhfTkVXIENQREZfU3RyZWFtKGFjYy5EZXRhY2hEYXRhKCksIHN0cmVhbVNpemUsIHBDbG9uZURpY3QpOworICAgICAgICByZXR1cm4gcE9iajsKKyAgICB9CisgICAgQ1BERl9TdHJlYW0qIHBPYmogPSBGWF9ORVcgQ1BERl9TdHJlYW0oTlVMTCwgMCwgTlVMTCk7CisgICAgQ1BERl9TdHJlYW1GaWx0ZXIgKnBTRiA9IEdldFN0cmVhbUZpbHRlcihUUlVFKTsKKyAgICBpZiAocFNGKSB7CisgICAgICAgIEZYX0xQQllURSBwQnVmID0gRlhfQWxsb2MoRlhfQllURSwgNDA5Nik7CisgICAgICAgIEZYX0RXT1JEIGR3UmVhZDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgZHdSZWFkID0gcFNGLT5SZWFkQmxvY2socEJ1ZiwgNDA5Nik7CisgICAgICAgICAgICBpZiAoZHdSZWFkKSB7CisgICAgICAgICAgICAgICAgcEZTLT5Xcml0ZUJsb2NrKHBCdWYsIGR3UmVhZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKGR3UmVhZCA9PSA0MDk2KTsKKyAgICAgICAgcEZTLT5GbHVzaCgpOworICAgICAgICBGWF9GcmVlKHBCdWYpOworICAgICAgICBkZWxldGUgcFNGOworICAgIH0KKyAgICBwT2JqLT5Jbml0U3RyZWFtKChJRlhfRmlsZVJlYWQqKXBGUywgcENsb25lRGljdCk7CisgICAgcmV0dXJuIHBPYmo7Cit9CitleHRlcm4gRlhfQk9PTCBQREZfRGF0YURlY29kZShGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBjb25zdCBDUERGX0RpY3Rpb25hcnkqIHBEaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSwgQ0ZYX0J5dGVTdHJpbmcmIEltYWdlRW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqJiBwSW1hZ2VQYXJtcywgRlhfRFdPUkQgZXN0aW1hdGVkX3NpemUsIEZYX0JPT0wgYkltYWdlQWNjKTsKK0NQREZfU3RyZWFtQWNjOjpDUERGX1N0cmVhbUFjYygpCit7CisgICAgbV9iTmV3QnVmID0gRkFMU0U7CisgICAgbV9wRGF0YSA9IE5VTEw7CisgICAgbV9kd1NpemUgPSAwOworICAgIG1fcEltYWdlUGFyYW0gPSBOVUxMOworICAgIG1fcFN0cmVhbSA9IE5VTEw7CisgICAgbV9wU3JjRGF0YSA9IE5VTEw7Cit9Cit2b2lkIENQREZfU3RyZWFtQWNjOjpMb2FkQWxsRGF0YShjb25zdCBDUERGX1N0cmVhbSogcFN0cmVhbSwgRlhfQk9PTCBiUmF3QWNjZXNzLCBGWF9EV09SRCBlc3RpbWF0ZWRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYkltYWdlQWNjKQoreworICAgIGlmIChwU3RyZWFtID09IE5VTEwgfHwgcFN0cmVhbS0+R2V0VHlwZSgpICE9IFBERk9CSl9TVFJFQU0pIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3BTdHJlYW0gPSBwU3RyZWFtOworICAgIGlmIChwU3RyZWFtLT5Jc01lbW9yeUJhc2VkKCkgJiYKKyAgICAgICAgICAgICghcFN0cmVhbS0+R2V0RGljdCgpLT5LZXlFeGlzdChGWF9CU1RSQygiRmlsdGVyIikpIHx8IGJSYXdBY2Nlc3MpKSB7CisgICAgICAgIG1fZHdTaXplID0gcFN0cmVhbS0+bV9kd1NpemU7CisgICAgICAgIG1fcERhdGEgPSAoRlhfTFBCWVRFKXBTdHJlYW0tPm1fcERhdGFCdWY7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfTFBCWVRFIHBTcmNEYXRhOworICAgIEZYX0RXT1JEIGR3U3JjU2l6ZSA9IHBTdHJlYW0tPm1fZHdTaXplOworICAgIGlmIChkd1NyY1NpemUgPT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghcFN0cmVhbS0+SXNNZW1vcnlCYXNlZCgpKSB7CisgICAgICAgIHBTcmNEYXRhID0gbV9wU3JjRGF0YSA9IEZYX0FsbG9jKEZYX0JZVEUsIGR3U3JjU2l6ZSk7CisgICAgICAgIGlmICghcFNyY0RhdGEgfHwgIXBTdHJlYW0tPlJlYWRSYXdEYXRhKDAsIHBTcmNEYXRhLCBkd1NyY1NpemUpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBwU3JjRGF0YSA9IHBTdHJlYW0tPm1fcERhdGFCdWY7CisgICAgfQorICAgIEZYX0xQQllURSBwRGVjcnlwdGVkRGF0YTsKKyAgICBGWF9EV09SRCBkd0RlY3J5cHRlZFNpemU7CisgICAgaWYgKHBTdHJlYW0tPm1fcENyeXB0b0hhbmRsZXIpIHsKKyAgICAgICAgQ0ZYX0JpbmFyeUJ1ZiBkZXN0X2J1ZjsKKyAgICAgICAgZGVzdF9idWYuRXN0aW1hdGVTaXplKHBTdHJlYW0tPm1fcENyeXB0b0hhbmRsZXItPkRlY3J5cHRHZXRTaXplKGR3U3JjU2l6ZSkpOworICAgICAgICBGWF9MUFZPSUQgY29udGV4dCA9IHBTdHJlYW0tPm1fcENyeXB0b0hhbmRsZXItPkRlY3J5cHRTdGFydChwU3RyZWFtLT5HZXRPYmpOdW0oKSwgcFN0cmVhbS0+bV9HZW5OdW0pOworICAgICAgICBwU3RyZWFtLT5tX3BDcnlwdG9IYW5kbGVyLT5EZWNyeXB0U3RyZWFtKGNvbnRleHQsIHBTcmNEYXRhLCBkd1NyY1NpemUsIGRlc3RfYnVmKTsKKyAgICAgICAgcFN0cmVhbS0+bV9wQ3J5cHRvSGFuZGxlci0+RGVjcnlwdEZpbmlzaChjb250ZXh0LCBkZXN0X2J1Zik7CisgICAgICAgIHBEZWNyeXB0ZWREYXRhID0gZGVzdF9idWYuR2V0QnVmZmVyKCk7CisgICAgICAgIGR3RGVjcnlwdGVkU2l6ZSA9IGRlc3RfYnVmLkdldFNpemUoKTsKKyAgICAgICAgZGVzdF9idWYuRGV0YWNoQnVmZmVyKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcERlY3J5cHRlZERhdGEgPSBwU3JjRGF0YTsKKyAgICAgICAgZHdEZWNyeXB0ZWRTaXplID0gZHdTcmNTaXplOworICAgIH0KKyAgICBpZiAoIXBTdHJlYW0tPkdldERpY3QoKS0+S2V5RXhpc3QoRlhfQlNUUkMoIkZpbHRlciIpKSB8fCBiUmF3QWNjZXNzKSB7CisgICAgICAgIG1fcERhdGEgPSBwRGVjcnlwdGVkRGF0YTsKKyAgICAgICAgbV9kd1NpemUgPSBkd0RlY3J5cHRlZFNpemU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgRlhfQk9PTCBiUmV0ID0gUERGX0RhdGFEZWNvZGUocERlY3J5cHRlZERhdGEsIGR3RGVjcnlwdGVkU2l6ZSwgbV9wU3RyZWFtLT5HZXREaWN0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcERhdGEsIG1fZHdTaXplLCBtX0ltYWdlRGVjb2RlciwgbV9wSW1hZ2VQYXJhbSwgZXN0aW1hdGVkX3NpemUsIGJJbWFnZUFjYyk7CisgICAgICAgIGlmICghYlJldCkgeworICAgICAgICAgICAgbV9wRGF0YSA9IHBEZWNyeXB0ZWREYXRhOworICAgICAgICAgICAgbV9kd1NpemUgPSBkd0RlY3J5cHRlZFNpemU7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHBTcmNEYXRhICE9IHBTdHJlYW0tPm1fcERhdGFCdWYgJiYgcFNyY0RhdGEgIT0gbV9wRGF0YSkgeworICAgICAgICBGWF9GcmVlKHBTcmNEYXRhKTsKKyAgICB9CisgICAgaWYgKHBEZWNyeXB0ZWREYXRhICE9IHBTcmNEYXRhICYmIHBEZWNyeXB0ZWREYXRhICE9IG1fcERhdGEpIHsKKyAgICAgICAgRlhfRnJlZShwRGVjcnlwdGVkRGF0YSk7CisgICAgfQorICAgIG1fcFNyY0RhdGEgPSBOVUxMOworICAgIG1fYk5ld0J1ZiA9IG1fcERhdGEgIT0gcFN0cmVhbS0+bV9wRGF0YUJ1ZjsKK30KK0NQREZfU3RyZWFtQWNjOjp+Q1BERl9TdHJlYW1BY2MoKQoreworICAgIGlmIChtX2JOZXdCdWYgJiYgbV9wRGF0YSkgeworICAgICAgICBGWF9GcmVlKG1fcERhdGEpOworICAgIH0KKyAgICBpZiAobV9wU3JjRGF0YSkgeworICAgICAgICBGWF9GcmVlKG1fcFNyY0RhdGEpOworICAgIH0KK30KK0ZYX0xQQ0JZVEUgQ1BERl9TdHJlYW1BY2M6OkdldERhdGEoKSBjb25zdAoreworICAgIGlmIChtX2JOZXdCdWYpIHsKKyAgICAgICAgcmV0dXJuIG1fcERhdGE7CisgICAgfQorICAgIGlmICghbV9wU3RyZWFtKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gbV9wU3RyZWFtLT5tX3BEYXRhQnVmOworfQorRlhfRFdPUkQgQ1BERl9TdHJlYW1BY2M6OkdldFNpemUoKSBjb25zdAoreworICAgIGlmIChtX2JOZXdCdWYpIHsKKyAgICAgICAgcmV0dXJuIG1fZHdTaXplOworICAgIH0KKyAgICBpZiAoIW1fcFN0cmVhbSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG1fcFN0cmVhbS0+bV9kd1NpemU7Cit9CitGWF9MUEJZVEUgQ1BERl9TdHJlYW1BY2M6OkRldGFjaERhdGEoKQoreworICAgIGlmIChtX2JOZXdCdWYpIHsKKyAgICAgICAgRlhfTFBCWVRFIHAgPSBtX3BEYXRhOworICAgICAgICBtX3BEYXRhID0gTlVMTDsKKyAgICAgICAgbV9kd1NpemUgPSAwOworICAgICAgICByZXR1cm4gcDsKKyAgICB9CisgICAgRlhfTFBCWVRFIHAgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX2R3U2l6ZSk7CisgICAgaWYgKHAgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRlhTWVNfbWVtY3B5MzIocCwgbV9wRGF0YSwgbV9kd1NpemUpOworICAgIHJldHVybiBwOworfQordm9pZCBDUERGX1JlZmVyZW5jZTo6U2V0UmVmKENQREZfSW5kaXJlY3RPYmplY3RzKiBwRG9jLCBGWF9EV09SRCBvYmpudW0pCit7CisgICAgbV9wT2JqTGlzdCA9IHBEb2M7CisgICAgbV9SZWZPYmpOdW0gPSBvYmpudW07Cit9CitDUERGX0luZGlyZWN0T2JqZWN0czo6Q1BERl9JbmRpcmVjdE9iamVjdHMoSVBERl9Eb2NQYXJzZXIqIHBQYXJzZXIpCit7CisgICAgbV9wUGFyc2VyID0gcFBhcnNlcjsKKyAgICBtX0luZGlyZWN0T2Jqcy5Jbml0SGFzaFRhYmxlKDEwMTMpOworICAgIGlmIChwUGFyc2VyKSB7CisgICAgICAgIG1fTGFzdE9iak51bSA9IG1fcFBhcnNlci0+R2V0TGFzdE9iak51bSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fTGFzdE9iak51bSA9IDA7CisgICAgfQorfQorQ1BERl9JbmRpcmVjdE9iamVjdHM6On5DUERGX0luZGlyZWN0T2JqZWN0cygpCit7CisgICAgRlhfUE9TSVRJT04gcG9zID0gbV9JbmRpcmVjdE9ianMuR2V0U3RhcnRQb3NpdGlvbigpOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgRlhfTFBWT0lEIGtleSwgdmFsdWU7CisgICAgICAgIG1fSW5kaXJlY3RPYmpzLkdldE5leHRBc3NvYyhwb3MsIGtleSwgdmFsdWUpOworICAgICAgICAoKENQREZfT2JqZWN0Kil2YWx1ZSktPkRlc3Ryb3koKTsKKyAgICB9Cit9CitDUERGX09iamVjdCogQ1BERl9JbmRpcmVjdE9iamVjdHM6OkdldEluZGlyZWN0T2JqZWN0KEZYX0RXT1JEIG9iam51bSwgc3RydWN0IFBBUlNFX0NPTlRFWFQqIHBDb250ZXh0KQoreworICAgIGlmIChvYmpudW0gPT0gMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRlhfTFBWT0lEIHZhbHVlOworICAgIHsKKyAgICAgICAgaWYgKG1fSW5kaXJlY3RPYmpzLkxvb2t1cCgoRlhfTFBWT0lEKShGWF9VSU5UUFRSKW9iam51bSwgdmFsdWUpKSB7CisgICAgICAgICAgICBpZiAoKChDUERGX09iamVjdCopdmFsdWUpLT5HZXRPYmpOdW0oKSA9PSAtMSkgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIChDUERGX09iamVjdCopdmFsdWU7CisgICAgICAgIH0KKyAgICB9CisgICAgQ1BERl9PYmplY3QqIHBPYmogPSBOVUxMOworICAgIGlmIChtX3BQYXJzZXIpIHsKKyAgICAgICAgcE9iaiA9IG1fcFBhcnNlci0+UGFyc2VJbmRpcmVjdE9iamVjdCh0aGlzLCBvYmpudW0sIHBDb250ZXh0KTsKKyAgICB9CisgICAgaWYgKHBPYmogPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcE9iai0+bV9PYmpOdW0gPSBvYmpudW07CisgICAgaWYgKG1fTGFzdE9iak51bSA8IG9iam51bSkgeworICAgICAgICBtX0xhc3RPYmpOdW0gPSBvYmpudW07CisgICAgfQorICAgIGlmIChtX0luZGlyZWN0T2Jqcy5Mb29rdXAoKEZYX0xQVk9JRCkoRlhfVUlOVFBUUilvYmpudW0sIHZhbHVlKSkgeworICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICgoQ1BERl9PYmplY3QgKil2YWx1ZSktPkRlc3Ryb3koKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX0luZGlyZWN0T2Jqcy5TZXRBdCgoRlhfTFBWT0lEKShGWF9VSU5UUFRSKW9iam51bSwgcE9iaik7CisgICAgcmV0dXJuIHBPYmo7Cit9CitpbnQgQ1BERl9JbmRpcmVjdE9iamVjdHM6OkdldEluZGlyZWN0VHlwZShGWF9EV09SRCBvYmpudW0pCit7CisgICAgRlhfTFBWT0lEIHZhbHVlOworICAgIGlmIChtX0luZGlyZWN0T2Jqcy5Mb29rdXAoKEZYX0xQVk9JRCkoRlhfVUlOVFBUUilvYmpudW0sIHZhbHVlKSkgeworICAgICAgICByZXR1cm4gKChDUERGX09iamVjdCopdmFsdWUpLT5HZXRUeXBlKCk7CisgICAgfQorICAgIGlmIChtX3BQYXJzZXIpIHsKKyAgICAgICAgUEFSU0VfQ09OVEVYVCBjb250ZXh0OworICAgICAgICBGWFNZU19tZW1zZXQzMigmY29udGV4dCwgMCwgc2l6ZW9mKFBBUlNFX0NPTlRFWFQpKTsKKyAgICAgICAgY29udGV4dC5tX0ZsYWdzID0gUERGUEFSU0VfVFlQRU9OTFk7CisgICAgICAgIHJldHVybiAoaW50KShGWF9VSU5UUFRSKW1fcFBhcnNlci0+UGFyc2VJbmRpcmVjdE9iamVjdCh0aGlzLCBvYmpudW0sICZjb250ZXh0KTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CitGWF9EV09SRCBDUERGX0luZGlyZWN0T2JqZWN0czo6QWRkSW5kaXJlY3RPYmplY3QoQ1BERl9PYmplY3QqIHBPYmopCit7CisgICAgaWYgKHBPYmotPm1fT2JqTnVtKSB7CisgICAgICAgIHJldHVybiBwT2JqLT5tX09iak51bTsKKyAgICB9CisgICAgbV9MYXN0T2JqTnVtICsrOworICAgIG1fSW5kaXJlY3RPYmpzLlNldEF0KChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpbV9MYXN0T2JqTnVtLCBwT2JqKTsKKyAgICBwT2JqLT5tX09iak51bSA9IG1fTGFzdE9iak51bTsKKyAgICByZXR1cm4gbV9MYXN0T2JqTnVtOworfQordm9pZCBDUERGX0luZGlyZWN0T2JqZWN0czo6UmVsZWFzZUluZGlyZWN0T2JqZWN0KEZYX0RXT1JEIG9iam51bSkKK3sKKyAgICBGWF9MUFZPSUQgdmFsdWU7CisgICAgaWYgKCFtX0luZGlyZWN0T2Jqcy5Mb29rdXAoKEZYX0xQVk9JRCkoRlhfVUlOVFBUUilvYmpudW0sIHZhbHVlKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICgoKENQREZfT2JqZWN0Kil2YWx1ZSktPkdldE9iak51bSgpID09IC0xKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgKChDUERGX09iamVjdCopdmFsdWUpLT5EZXN0cm95KCk7CisgICAgbV9JbmRpcmVjdE9ianMuUmVtb3ZlS2V5KChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpb2JqbnVtKTsKK30KK3ZvaWQgQ1BERl9JbmRpcmVjdE9iamVjdHM6Okluc2VydEluZGlyZWN0T2JqZWN0KEZYX0RXT1JEIG9iam51bSwgQ1BERl9PYmplY3QqIHBPYmopCit7CisgICAgaWYgKG9iam51bSA9PSAwIHx8IHBPYmogPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX0xQVk9JRCB2YWx1ZTsKKyAgICBpZiAobV9JbmRpcmVjdE9ianMuTG9va3VwKChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpb2JqbnVtLCB2YWx1ZSkpIHsKKyAgICAgICAgKChDUERGX09iamVjdCopdmFsdWUpLT5EZXN0cm95KCk7CisgICAgfQorICAgIHBPYmotPm1fT2JqTnVtID0gb2JqbnVtOworICAgIG1fSW5kaXJlY3RPYmpzLlNldEF0KChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpb2JqbnVtLCBwT2JqKTsKKyAgICBpZiAobV9MYXN0T2JqTnVtIDwgb2JqbnVtKSB7CisgICAgICAgIG1fTGFzdE9iak51bSA9IG9iam51bTsKKyAgICB9Cit9CitGWF9EV09SRCBDUERGX0luZGlyZWN0T2JqZWN0czo6R2V0TGFzdE9iak51bSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fTGFzdE9iak51bTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYXJzZXIvZnBkZl9wYXJzZXJfdXRpbGl0eS5jcHAgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcGFyc2VyL2ZwZGZfcGFyc2VyX3V0aWxpdHkuY3BwCmluZGV4IGNjM2QyOWMuLjc1NTliY2UgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9wYXJzZXIvZnBkZl9wYXJzZXJfdXRpbGl0eS5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3BhcnNlci9mcGRmX3BhcnNlcl91dGlsaXR5LmNwcApAQCAtMSw0NTMgKzEsNDUzIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFyc2VyLmgiDQotZXh0ZXJuIGNvbnN0IEZYX0xQQ1NUUiBfUERGX0NoYXJUeXBlID0NCi0gICAgIldSUlJSUlJSUldXUldXUlJSUlJSUlJSUlJSUlJSUlJSIg0KLSAgICAiV1JSUlJEUlJERFJOUk5ORE5OTk5OTk5OTk5SUkRSRFIiDQotICAgICJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJEUkRSUiINCi0gICAgIlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUkRSRFJSIg0KLSAgICAiV1JSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlIiDQotICAgICJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUiINCi0gICAgIlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSIg0KLSAgICAiUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlciOw0KLSNpZm5kZWYgTUFYX1BBVEgNCi0jZGVmaW5lIE1BWF9QQVRIIDQwOTYNCi0jZW5kaWYNCi1DUERGX1NpbXBsZVBhcnNlcjo6Q1BERl9TaW1wbGVQYXJzZXIoRlhfTFBDQllURSBwRGF0YSwgRlhfRFdPUkQgZHdTaXplKQ0KLXsNCi0gICAgbV9wRGF0YSA9IHBEYXRhOw0KLSAgICBtX2R3U2l6ZSA9IGR3U2l6ZTsNCi0gICAgbV9kd0N1clBvcyA9IDA7DQotfQ0KLUNQREZfU2ltcGxlUGFyc2VyOjpDUERGX1NpbXBsZVBhcnNlcihGWF9CU1RSIHN0cikNCi17DQotICAgIG1fcERhdGEgPSBzdHI7DQotICAgIG1fZHdTaXplID0gc3RyLkdldExlbmd0aCgpOw0KLSAgICBtX2R3Q3VyUG9zID0gMDsNCi19DQotdm9pZCBDUERGX1NpbXBsZVBhcnNlcjo6UGFyc2VXb3JkKEZYX0xQQ0JZVEUmIHBTdGFydCwgRlhfRFdPUkQmIGR3U2l6ZSwgaW50JiB0eXBlKQ0KLXsNCi0gICAgcFN0YXJ0ID0gTlVMTDsNCi0gICAgZHdTaXplID0gMDsNCi0gICAgdHlwZSA9IFBERldPUkRfRU9GOw0KLSAgICBGWF9CWVRFIGNoOw0KLSAgICBjaGFyIGNoYXJ0eXBlOw0KLSAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgaWYgKG1fZHdTaXplIDw9IG1fZHdDdXJQb3MpIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBjaCA9IG1fcERhdGFbbV9kd0N1clBvcysrXTsNCi0gICAgICAgIGNoYXJ0eXBlID0gX1BERl9DaGFyVHlwZVtjaF07DQotICAgICAgICB3aGlsZSAoY2hhcnR5cGUgPT0gJ1cnKSB7DQotICAgICAgICAgICAgaWYgKG1fZHdTaXplIDw9IG1fZHdDdXJQb3MpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjaCA9IG1fcERhdGFbbV9kd0N1clBvcysrXTsNCi0gICAgICAgICAgICBjaGFydHlwZSA9IF9QREZfQ2hhclR5cGVbY2hdOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGNoICE9ICclJykgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgd2hpbGUgKDEpIHsNCi0gICAgICAgICAgICBpZiAobV9kd1NpemUgPD0gbV9kd0N1clBvcykgew0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNoID0gbV9wRGF0YVttX2R3Q3VyUG9zKytdOw0KLSAgICAgICAgICAgIGlmIChjaCA9PSAnXHInIHx8IGNoID09ICdcbicpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgY2hhcnR5cGUgPSBfUERGX0NoYXJUeXBlW2NoXTsNCi0gICAgfQ0KLSAgICBGWF9EV09SRCBzdGFydF9wb3MgPSBtX2R3Q3VyUG9zIC0gMTsNCi0gICAgcFN0YXJ0ID0gbV9wRGF0YSArIHN0YXJ0X3BvczsNCi0gICAgaWYgKGNoYXJ0eXBlID09ICdEJykgew0KLSAgICAgICAgaWYgKGNoID09ICcvJykgew0KLSAgICAgICAgICAgIHdoaWxlICgxKSB7DQotICAgICAgICAgICAgICAgIGlmIChtX2R3U2l6ZSA8PSBtX2R3Q3VyUG9zKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgY2ggPSBtX3BEYXRhW21fZHdDdXJQb3MrK107DQotICAgICAgICAgICAgICAgIGNoYXJ0eXBlID0gX1BERl9DaGFyVHlwZVtjaF07DQotICAgICAgICAgICAgICAgIGlmIChjaGFydHlwZSAhPSAnUicgJiYgY2hhcnR5cGUgIT0gJ04nKSB7DQotICAgICAgICAgICAgICAgICAgICBtX2R3Q3VyUG9zIC0tOw0KLSAgICAgICAgICAgICAgICAgICAgZHdTaXplID0gbV9kd0N1clBvcyAtIHN0YXJ0X3BvczsNCi0gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBQREZXT1JEX05BTUU7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHR5cGUgPSBQREZXT1JEX0RFTElNSVRFUjsNCi0gICAgICAgICAgICBkd1NpemUgPSAxOw0KLSAgICAgICAgICAgIGlmIChjaCA9PSAnPCcpIHsNCi0gICAgICAgICAgICAgICAgaWYgKG1fZHdTaXplIDw9IG1fZHdDdXJQb3MpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBjaCA9IG1fcERhdGFbbV9kd0N1clBvcysrXTsNCi0gICAgICAgICAgICAgICAgaWYgKGNoID09ICc8Jykgew0KLSAgICAgICAgICAgICAgICAgICAgZHdTaXplID0gMjsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fZHdDdXJQb3MgLS07DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc+Jykgew0KLSAgICAgICAgICAgICAgICBpZiAobV9kd1NpemUgPD0gbV9kd0N1clBvcykgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGNoID0gbV9wRGF0YVttX2R3Q3VyUG9zKytdOw0KLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz4nKSB7DQotICAgICAgICAgICAgICAgICAgICBkd1NpemUgPSAyOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgbV9kd0N1clBvcyAtLTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICB0eXBlID0gUERGV09SRF9OVU1CRVI7DQotICAgIGR3U2l6ZSA9IDE7DQotICAgIHdoaWxlICgxKSB7DQotICAgICAgICBpZiAoY2hhcnR5cGUgIT0gJ04nKSB7DQotICAgICAgICAgICAgdHlwZSA9IFBERldPUkRfVEVYVDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX2R3U2l6ZSA8PSBtX2R3Q3VyUG9zKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgY2ggPSBtX3BEYXRhW21fZHdDdXJQb3MrK107DQotICAgICAgICBjaGFydHlwZSA9IF9QREZfQ2hhclR5cGVbY2hdOw0KLSAgICAgICAgaWYgKGNoYXJ0eXBlID09ICdEJyB8fCBjaGFydHlwZSA9PSAnVycpIHsNCi0gICAgICAgICAgICBtX2R3Q3VyUG9zIC0tOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZHdTaXplICsrOw0KLSAgICB9DQotfQ0KLUNGWF9CeXRlU3RyaW5nQyBDUERGX1NpbXBsZVBhcnNlcjo6R2V0V29yZCgpDQotew0KLSAgICBGWF9MUENCWVRFIHBTdGFydDsNCi0gICAgRlhfRFdPUkQgZHdTaXplOw0KLSAgICBpbnQgdHlwZTsNCi0gICAgUGFyc2VXb3JkKHBTdGFydCwgZHdTaXplLCB0eXBlKTsNCi0gICAgaWYgKGR3U2l6ZSA9PSAxICYmIHBTdGFydFswXSA9PSAnPCcpIHsNCi0gICAgICAgIHdoaWxlIChtX2R3Q3VyUG9zIDwgbV9kd1NpemUgJiYgbV9wRGF0YVttX2R3Q3VyUG9zXSAhPSAnPicpIHsNCi0gICAgICAgICAgICBtX2R3Q3VyUG9zICsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fZHdDdXJQb3MgPCBtX2R3U2l6ZSkgew0KLSAgICAgICAgICAgIG1fZHdDdXJQb3MgKys7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmdDKHBTdGFydCwgKEZYX1NUUlNJWkUpKG1fZHdDdXJQb3MgLSAocFN0YXJ0IC0gbV9wRGF0YSkpKTsNCi0gICAgfSBlbHNlIGlmIChkd1NpemUgPT0gMSAmJiBwU3RhcnRbMF0gPT0gJygnKSB7DQotICAgICAgICBpbnQgbGV2ZWwgPSAxOw0KLSAgICAgICAgd2hpbGUgKG1fZHdDdXJQb3MgPCBtX2R3U2l6ZSkgew0KLSAgICAgICAgICAgIGlmIChtX3BEYXRhW21fZHdDdXJQb3NdID09ICcpJykgew0KLSAgICAgICAgICAgICAgICBsZXZlbCAtLTsNCi0gICAgICAgICAgICAgICAgaWYgKGxldmVsID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChtX3BEYXRhW21fZHdDdXJQb3NdID09ICdcXCcpIHsNCi0gICAgICAgICAgICAgICAgaWYgKG1fZHdTaXplIDw9IG1fZHdDdXJQb3MpIHsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG1fZHdDdXJQb3MgKys7DQotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3BEYXRhW21fZHdDdXJQb3NdID09ICcoJykgew0KLSAgICAgICAgICAgICAgICBsZXZlbCArKzsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKG1fZHdTaXplIDw9IG1fZHdDdXJQb3MpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fZHdDdXJQb3MgKys7DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9kd0N1clBvcyA8IG1fZHdTaXplKSB7DQotICAgICAgICAgICAgbV9kd0N1clBvcyArKzsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0MocFN0YXJ0LCAoRlhfU1RSU0laRSkobV9kd0N1clBvcyAtIChwU3RhcnQgLSBtX3BEYXRhKSkpOw0KLSAgICB9DQotICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0MocFN0YXJ0LCBkd1NpemUpOw0KLX0NCi1GWF9CT09MIENQREZfU2ltcGxlUGFyc2VyOjpTZWFyY2hUb2tlbihGWF9CU1RSIHRva2VuKQ0KLXsNCi0gICAgaW50IHRva2VuX2xlbiA9IHRva2VuLkdldExlbmd0aCgpOw0KLSAgICB3aGlsZSAobV9kd0N1clBvcyA8IG1fZHdTaXplIC0gdG9rZW5fbGVuKSB7DQotICAgICAgICBpZiAoRlhTWVNfbWVtY21wMzIobV9wRGF0YSArIG1fZHdDdXJQb3MsIHRva2VuLCB0b2tlbl9sZW4pID09IDApIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fZHdDdXJQb3MgKys7DQotICAgIH0NCi0gICAgaWYgKG1fZHdDdXJQb3MgPT0gbV9kd1NpemUgLSB0b2tlbl9sZW4pIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBtX2R3Q3VyUG9zICs9IHRva2VuX2xlbjsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ1BERl9TaW1wbGVQYXJzZXI6OlNraXBXb3JkKEZYX0JTVFIgdG9rZW4pDQotew0KLSAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmdDIHdvcmQgPSBHZXRXb3JkKCk7DQotICAgICAgICBpZiAod29yZC5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBpZiAod29yZCA9PSB0b2tlbikgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotRlhfQk9PTCBDUERGX1NpbXBsZVBhcnNlcjo6RmluZFRhZ1BhaXIoRlhfQlNUUiBzdGFydF90b2tlbiwgRlhfQlNUUiBlbmRfdG9rZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQmIHN0YXJ0X3BvcywgRlhfRFdPUkQmIGVuZF9wb3MpDQotew0KLSAgICBpZiAoIXN0YXJ0X3Rva2VuLklzRW1wdHkoKSkgew0KLSAgICAgICAgaWYgKCFTa2lwV29yZChzdGFydF90b2tlbikpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBzdGFydF9wb3MgPSBtX2R3Q3VyUG9zOw0KLSAgICB9DQotICAgIHdoaWxlICgxKSB7DQotICAgICAgICBlbmRfcG9zID0gbV9kd0N1clBvczsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nQyB3b3JkID0gR2V0V29yZCgpOw0KLSAgICAgICAgaWYgKHdvcmQuSXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHdvcmQgPT0gZW5kX3Rva2VuKSB7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1GWF9CT09MIENQREZfU2ltcGxlUGFyc2VyOjpGaW5kVGFnUGFyYW0oRlhfQlNUUiB0b2tlbiwgaW50IG5QYXJhbXMpDQotew0KLSAgICBuUGFyYW1zICsrOw0KLSAgICBGWF9EV09SRCogcEJ1ZiA9IEZYX0FsbG9jKEZYX0RXT1JELCBuUGFyYW1zKTsNCi0gICAgaW50IGJ1Zl9pbmRleCA9IDA7DQotICAgIGludCBidWZfY291bnQgPSAwOw0KLSAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgcEJ1ZltidWZfaW5kZXgrK10gPSBtX2R3Q3VyUG9zOw0KLSAgICAgICAgaWYgKGJ1Zl9pbmRleCA9PSBuUGFyYW1zKSB7DQotICAgICAgICAgICAgYnVmX2luZGV4ID0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIGJ1Zl9jb3VudCArKzsNCi0gICAgICAgIGlmIChidWZfY291bnQgPiBuUGFyYW1zKSB7DQotICAgICAgICAgICAgYnVmX2NvdW50ID0gblBhcmFtczsNCi0gICAgICAgIH0NCi0gICAgICAgIENGWF9CeXRlU3RyaW5nQyB3b3JkID0gR2V0V29yZCgpOw0KLSAgICAgICAgaWYgKHdvcmQuSXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgRlhfRnJlZShwQnVmKTsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBpZiAod29yZCA9PSB0b2tlbikgew0KLSAgICAgICAgICAgIGlmIChidWZfY291bnQgPCBuUGFyYW1zKSB7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBtX2R3Q3VyUG9zID0gcEJ1ZltidWZfaW5kZXhdOw0KLSAgICAgICAgICAgIEZYX0ZyZWUocEJ1Zik7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1zdGF0aWMgaW50IF9oZXgyZGVjKGNoYXIgY2gpDQotew0KLSAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykgew0KLSAgICAgICAgcmV0dXJuIGNoIC0gJzAnOw0KLSAgICB9DQotICAgIGlmIChjaCA+PSAnYScgJiYgY2ggPD0gJ2YnKSB7DQotICAgICAgICByZXR1cm4gY2ggLSAnYScgKyAxMDsNCi0gICAgfQ0KLSAgICBpZiAoY2ggPj0gJ0EnICYmIGNoIDw9ICdGJykgew0KLSAgICAgICAgcmV0dXJuIGNoIC0gJ0EnICsgMTA7DQotICAgIH0NCi0gICAgcmV0dXJuIDA7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIFBERl9OYW1lRGVjb2RlKEZYX0JTVFIgYnN0cikNCi17DQotICAgIGludCBzaXplID0gYnN0ci5HZXRMZW5ndGgoKTsNCi0gICAgRlhfTFBDU1RSIHBTcmMgPSBic3RyLkdldENTdHIoKTsNCi0gICAgaWYgKEZYU1lTX21lbWNocihwU3JjLCAnIycsIHNpemUpID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBic3RyOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIHJlc3VsdDsNCi0gICAgRlhfTFBTVFIgcERlc3RTdGFydCA9IHJlc3VsdC5HZXRCdWZmZXIoc2l6ZSk7DQotICAgIEZYX0xQU1RSIHBEZXN0ID0gcERlc3RTdGFydDsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKSB7DQotICAgICAgICBpZiAocFNyY1tpXSA9PSAnIycgJiYgaSA8IHNpemUgLSAyKSB7DQotICAgICAgICAgICAgKnBEZXN0ICsrID0gX2hleDJkZWMocFNyY1tpICsgMV0pICogMTYgKyBfaGV4MmRlYyhwU3JjW2kgKyAyXSk7DQotICAgICAgICAgICAgaSArPSAyOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAqcERlc3QgKysgPSBwU3JjW2ldOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJlc3VsdC5SZWxlYXNlQnVmZmVyKChGWF9TVFJTSVpFKShwRGVzdCAtIHBEZXN0U3RhcnQpKTsNCi0gICAgcmV0dXJuIHJlc3VsdDsNCi19DQotQ0ZYX0J5dGVTdHJpbmcgUERGX05hbWVEZWNvZGUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG9yaWcpDQotew0KLSAgICBpZiAoRlhTWVNfbWVtY2hyKChGWF9MUENTVFIpb3JpZywgJyMnLCBvcmlnLkdldExlbmd0aCgpKSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gb3JpZzsNCi0gICAgfQ0KLSAgICByZXR1cm4gUERGX05hbWVEZWNvZGUoQ0ZYX0J5dGVTdHJpbmdDKG9yaWcpKTsNCi19DQotQ0ZYX0J5dGVTdHJpbmcgUERGX05hbWVFbmNvZGUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG9yaWcpDQotew0KLSAgICBGWF9MUEJZVEUgc3JjX2J1ZiA9IChGWF9MUEJZVEUpKEZYX0xQQ1NUUilvcmlnOw0KLSAgICBpbnQgc3JjX2xlbiA9IG9yaWcuR2V0TGVuZ3RoKCk7DQotICAgIGludCBkZXN0X2xlbiA9IDA7DQotICAgIGludCBpOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc3JjX2xlbjsgaSArKykgew0KLSAgICAgICAgRlhfQllURSBjaCA9IHNyY19idWZbaV07DQotICAgICAgICBpZiAoY2ggPj0gMHg4MCB8fCBfUERGX0NoYXJUeXBlW2NoXSA9PSAnVycgfHwgY2ggPT0gJyMnIHx8DQotICAgICAgICAgICAgICAgIF9QREZfQ2hhclR5cGVbY2hdID09ICdEJykgew0KLSAgICAgICAgICAgIGRlc3RfbGVuICs9IDM7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGRlc3RfbGVuICsrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChkZXN0X2xlbiA9PSBzcmNfbGVuKSB7DQotICAgICAgICByZXR1cm4gb3JpZzsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVN0cmluZyByZXM7DQotICAgIEZYX0xQU1RSIGRlc3RfYnVmID0gcmVzLkdldEJ1ZmZlcihkZXN0X2xlbik7DQotICAgIGRlc3RfbGVuID0gMDsNCi0gICAgZm9yIChpID0gMDsgaSA8IHNyY19sZW47IGkgKyspIHsNCi0gICAgICAgIEZYX0JZVEUgY2ggPSBzcmNfYnVmW2ldOw0KLSAgICAgICAgaWYgKGNoID49IDB4ODAgfHwgX1BERl9DaGFyVHlwZVtjaF0gPT0gJ1cnIHx8IGNoID09ICcjJyB8fA0KLSAgICAgICAgICAgICAgICBfUERGX0NoYXJUeXBlW2NoXSA9PSAnRCcpIHsNCi0gICAgICAgICAgICBkZXN0X2J1ZltkZXN0X2xlbisrXSA9ICcjJzsNCi0gICAgICAgICAgICBkZXN0X2J1ZltkZXN0X2xlbisrXSA9ICIwMTIzNDU2Nzg5QUJDREVGIltjaCAvIDE2XTsNCi0gICAgICAgICAgICBkZXN0X2J1ZltkZXN0X2xlbisrXSA9ICIwMTIzNDU2Nzg5QUJDREVGIltjaCAlIDE2XTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgZGVzdF9idWZbZGVzdF9sZW4rK10gPSBjaDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBkZXN0X2J1ZltkZXN0X2xlbl0gPSAwOw0KLSAgICByZXMuUmVsZWFzZUJ1ZmZlcigpOw0KLSAgICByZXR1cm4gcmVzOw0KLX0NCi1DRlhfQnl0ZVRleHRCdWYmIG9wZXJhdG9yIDw8IChDRlhfQnl0ZVRleHRCdWYmIGJ1ZiwgY29uc3QgQ1BERl9PYmplY3QqIHBPYmopDQotew0KLSAgICBpZiAocE9iaiA9PSBOVUxMKSB7DQotICAgICAgICBidWYgPDwgRlhfQlNUUkMoIiBudWxsIik7DQotICAgICAgICByZXR1cm4gYnVmOw0KLSAgICB9DQotICAgIHN3aXRjaCAocE9iai0+R2V0VHlwZSgpKSB7DQotICAgICAgICBjYXNlIFBERk9CSl9OVUxMOg0KLSAgICAgICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiIG51bGwiKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgUERGT0JKX0JPT0xFQU46DQotICAgICAgICBjYXNlIFBERk9CSl9OVU1CRVI6DQotICAgICAgICAgICAgYnVmIDw8ICIgIiA8PCBwT2JqLT5HZXRTdHJpbmcoKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgUERGT0JKX1NUUklORzogew0KLSAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBzdHIgPSBwT2JqLT5HZXRTdHJpbmcoKTsNCi0gICAgICAgICAgICAgICAgRlhfQk9PTCBiSGV4ID0gKChDUERGX1N0cmluZyopcE9iaiktPklzSGV4KCk7DQotICAgICAgICAgICAgICAgIGJ1ZiA8PCBQREZfRW5jb2RlU3RyaW5nKHN0ciwgYkhleCk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgUERGT0JKX05BTUU6IHsNCi0gICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc3RyID0gcE9iai0+R2V0U3RyaW5nKCk7DQotICAgICAgICAgICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiLyIpIDw8IFBERl9OYW1lRW5jb2RlKHN0cik7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgUERGT0JKX1JFRkVSRU5DRTogew0KLSAgICAgICAgICAgICAgICBDUERGX1JlZmVyZW5jZSogcCA9IChDUERGX1JlZmVyZW5jZSopcE9iajsNCi0gICAgICAgICAgICAgICAgYnVmIDw8ICIgIiA8PCBwLT5HZXRSZWZPYmpOdW0oKSA8PCBGWF9CU1RSQygiIDAgUiAiKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgY2FzZSBQREZPQkpfQVJSQVk6IHsNCi0gICAgICAgICAgICAgICAgQ1BERl9BcnJheSogcCA9IChDUERGX0FycmF5KilwT2JqOw0KLSAgICAgICAgICAgICAgICBidWYgPDwgRlhfQlNUUkMoIlsiKTsNCi0gICAgICAgICAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHAtPkdldENvdW50KCk7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIENQREZfT2JqZWN0KiBwRWxlbWVudCA9IHAtPkdldEVsZW1lbnQoaSk7DQotICAgICAgICAgICAgICAgICAgICBpZiAocEVsZW1lbnQtPkdldE9iak51bSgpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnVmIDw8ICIgIiA8PCBwRWxlbWVudC0+R2V0T2JqTnVtKCkgPDwgRlhfQlNUUkMoIiAwIFIiKTsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnVmIDw8IHBFbGVtZW50Ow0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiXSIpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIFBERk9CSl9ESUNUSU9OQVJZOiB7DQotICAgICAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcCA9IChDUERGX0RpY3Rpb25hcnkqKXBPYmo7DQotICAgICAgICAgICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiPDwiKTsNCi0gICAgICAgICAgICAgICAgRlhfUE9TSVRJT04gcG9zID0gcC0+R2V0U3RhcnRQb3MoKTsNCi0gICAgICAgICAgICAgICAgd2hpbGUgKHBvcykgew0KLSAgICAgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcga2V5Ow0KLSAgICAgICAgICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBWYWx1ZSA9IHAtPkdldE5leHRFbGVtZW50KHBvcywga2V5KTsNCi0gICAgICAgICAgICAgICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiLyIpIDw8IFBERl9OYW1lRW5jb2RlKGtleSk7DQotICAgICAgICAgICAgICAgICAgICBpZiAocFZhbHVlLT5HZXRPYmpOdW0oKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA8PCAiICIgPDwgcFZhbHVlLT5HZXRPYmpOdW0oKSA8PCBGWF9CU1RSQygiIDAgUiAiKTsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnVmIDw8IHBWYWx1ZTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBidWYgPDwgRlhfQlNUUkMoIj4+Iik7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgUERGT0JKX1NUUkVBTTogew0KLSAgICAgICAgICAgICAgICBDUERGX1N0cmVhbSogcCA9IChDUERGX1N0cmVhbSopcE9iajsNCi0gICAgICAgICAgICAgICAgYnVmIDw8IHAtPkdldERpY3QoKSA8PCBGWF9CU1RSQygic3RyZWFtXHJcbiIpOw0KLSAgICAgICAgICAgICAgICBDUERGX1N0cmVhbUFjYyBhY2M7DQotICAgICAgICAgICAgICAgIGFjYy5Mb2FkQWxsRGF0YShwLCBUUlVFKTsNCi0gICAgICAgICAgICAgICAgYnVmLkFwcGVuZEJsb2NrKGFjYy5HZXREYXRhKCksIGFjYy5HZXRTaXplKCkpOw0KLSAgICAgICAgICAgICAgICBidWYgPDwgRlhfQlNUUkMoIlxyXG5lbmRzdHJlYW0iKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgZGVmYXVsdDoNCi0gICAgICAgICAgICBBU1NFUlQoRkFMU0UpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICB9DQotICAgIHJldHVybiBidWY7DQotfQ0KLUZYX0ZMT0FUIFBERl9DbGlwRmxvYXQoRlhfRkxPQVQgZikNCi17DQotICAgIGlmIChmIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgaWYgKGYgPiAxLjBmKSB7DQotICAgICAgICByZXR1cm4gMS4wZjsNCi0gICAgfQ0KLSAgICByZXR1cm4gZjsNCi19DQotc3RhdGljIENQREZfT2JqZWN0KiBTZWFyY2hOdW1iZXJOb2RlKENQREZfRGljdGlvbmFyeSogcE5vZGUsIGludCBudW0pDQotew0KLSAgICBDUERGX0FycmF5KiBwTGltaXRzID0gcE5vZGUtPkdldEFycmF5KCJMaW1pdHMiKTsNCi0gICAgaWYgKHBMaW1pdHMgJiYgKG51bSA8IHBMaW1pdHMtPkdldEludGVnZXIoMCkgfHwgbnVtID4gcExpbWl0cy0+R2V0SW50ZWdlcigxKSkpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfQXJyYXkqIHBOdW1iZXJzID0gcE5vZGUtPkdldEFycmF5KCJOdW1zIik7DQotICAgIGlmIChwTnVtYmVycykgew0KLSAgICAgICAgRlhfRFdPUkQgZHdDb3VudCA9IHBOdW1iZXJzLT5HZXRDb3VudCgpIC8gMjsNCi0gICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBkd0NvdW50OyBpICsrKSB7DQotICAgICAgICAgICAgaW50IGluZGV4ID0gcE51bWJlcnMtPkdldEludGVnZXIoaSAqIDIpOw0KLSAgICAgICAgICAgIGlmIChudW0gPT0gaW5kZXgpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBOdW1iZXJzLT5HZXRFbGVtZW50VmFsdWUoaSAqIDIgKyAxKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGluZGV4ID4gbnVtKSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfQXJyYXkqIHBLaWRzID0gcE5vZGUtPkdldEFycmF5KCJLaWRzIik7DQotICAgIGlmIChwS2lkcyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcEtpZHMtPkdldENvdW50KCk7IGkgKyspIHsNCi0gICAgICAgIENQREZfRGljdGlvbmFyeSogcEtpZCA9IHBLaWRzLT5HZXREaWN0KGkpOw0KLSAgICAgICAgaWYgKHBLaWQgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1BERl9PYmplY3QqIHBGb3VuZCA9IFNlYXJjaE51bWJlck5vZGUocEtpZCwgbnVtKTsNCi0gICAgICAgIGlmIChwRm91bmQpIHsNCi0gICAgICAgICAgICByZXR1cm4gcEZvdW5kOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1DUERGX09iamVjdCogQ1BERl9OdW1iZXJUcmVlOjpMb29rdXBWYWx1ZShpbnQgbnVtKQ0KLXsNCi0gICAgcmV0dXJuIFNlYXJjaE51bWJlck5vZGUobV9wUm9vdCwgbnVtKTsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhcnNlci5oIgorZXh0ZXJuIGNvbnN0IEZYX0xQQ1NUUiBfUERGX0NoYXJUeXBlID0KKyAgICAiV1JSUlJSUlJSV1dSV1dSUlJSUlJSUlJSUlJSUlJSUlIiCisgICAgIldSUlJSRFJSRERSTlJOTkROTk5OTk5OTk5OUlJEUkRSIgorICAgICJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJEUkRSUiIKKyAgICAiUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSRFJEUlIiCisgICAgIldSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSIgorICAgICJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUiIKKyAgICAiUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlIiCisgICAgIlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJXIjsKKyNpZm5kZWYgTUFYX1BBVEgKKyNkZWZpbmUgTUFYX1BBVEggNDA5NgorI2VuZGlmCitDUERGX1NpbXBsZVBhcnNlcjo6Q1BERl9TaW1wbGVQYXJzZXIoRlhfTFBDQllURSBwRGF0YSwgRlhfRFdPUkQgZHdTaXplKQoreworICAgIG1fcERhdGEgPSBwRGF0YTsKKyAgICBtX2R3U2l6ZSA9IGR3U2l6ZTsKKyAgICBtX2R3Q3VyUG9zID0gMDsKK30KK0NQREZfU2ltcGxlUGFyc2VyOjpDUERGX1NpbXBsZVBhcnNlcihGWF9CU1RSIHN0cikKK3sKKyAgICBtX3BEYXRhID0gc3RyOworICAgIG1fZHdTaXplID0gc3RyLkdldExlbmd0aCgpOworICAgIG1fZHdDdXJQb3MgPSAwOworfQordm9pZCBDUERGX1NpbXBsZVBhcnNlcjo6UGFyc2VXb3JkKEZYX0xQQ0JZVEUmIHBTdGFydCwgRlhfRFdPUkQmIGR3U2l6ZSwgaW50JiB0eXBlKQoreworICAgIHBTdGFydCA9IE5VTEw7CisgICAgZHdTaXplID0gMDsKKyAgICB0eXBlID0gUERGV09SRF9FT0Y7CisgICAgRlhfQllURSBjaDsKKyAgICBjaGFyIGNoYXJ0eXBlOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmIChtX2R3U2l6ZSA8PSBtX2R3Q3VyUG9zKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2ggPSBtX3BEYXRhW21fZHdDdXJQb3MrK107CisgICAgICAgIGNoYXJ0eXBlID0gX1BERl9DaGFyVHlwZVtjaF07CisgICAgICAgIHdoaWxlIChjaGFydHlwZSA9PSAnVycpIHsKKyAgICAgICAgICAgIGlmIChtX2R3U2l6ZSA8PSBtX2R3Q3VyUG9zKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2ggPSBtX3BEYXRhW21fZHdDdXJQb3MrK107CisgICAgICAgICAgICBjaGFydHlwZSA9IF9QREZfQ2hhclR5cGVbY2hdOworICAgICAgICB9CisgICAgICAgIGlmIChjaCAhPSAnJScpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBpZiAobV9kd1NpemUgPD0gbV9kd0N1clBvcykgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoID0gbV9wRGF0YVttX2R3Q3VyUG9zKytdOworICAgICAgICAgICAgaWYgKGNoID09ICdccicgfHwgY2ggPT0gJ1xuJykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNoYXJ0eXBlID0gX1BERl9DaGFyVHlwZVtjaF07CisgICAgfQorICAgIEZYX0RXT1JEIHN0YXJ0X3BvcyA9IG1fZHdDdXJQb3MgLSAxOworICAgIHBTdGFydCA9IG1fcERhdGEgKyBzdGFydF9wb3M7CisgICAgaWYgKGNoYXJ0eXBlID09ICdEJykgeworICAgICAgICBpZiAoY2ggPT0gJy8nKSB7CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIGlmIChtX2R3U2l6ZSA8PSBtX2R3Q3VyUG9zKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2ggPSBtX3BEYXRhW21fZHdDdXJQb3MrK107CisgICAgICAgICAgICAgICAgY2hhcnR5cGUgPSBfUERGX0NoYXJUeXBlW2NoXTsKKyAgICAgICAgICAgICAgICBpZiAoY2hhcnR5cGUgIT0gJ1InICYmIGNoYXJ0eXBlICE9ICdOJykgeworICAgICAgICAgICAgICAgICAgICBtX2R3Q3VyUG9zIC0tOworICAgICAgICAgICAgICAgICAgICBkd1NpemUgPSBtX2R3Q3VyUG9zIC0gc3RhcnRfcG9zOworICAgICAgICAgICAgICAgICAgICB0eXBlID0gUERGV09SRF9OQU1FOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdHlwZSA9IFBERldPUkRfREVMSU1JVEVSOworICAgICAgICAgICAgZHdTaXplID0gMTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnPCcpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9kd1NpemUgPD0gbV9kd0N1clBvcykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNoID0gbV9wRGF0YVttX2R3Q3VyUG9zKytdOworICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnPCcpIHsKKyAgICAgICAgICAgICAgICAgICAgZHdTaXplID0gMjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX2R3Q3VyUG9zIC0tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZHdTaXplIDw9IG1fZHdDdXJQb3MpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjaCA9IG1fcERhdGFbbV9kd0N1clBvcysrXTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz4nKSB7CisgICAgICAgICAgICAgICAgICAgIGR3U2l6ZSA9IDI7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbV9kd0N1clBvcyAtLTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0eXBlID0gUERGV09SRF9OVU1CRVI7CisgICAgZHdTaXplID0gMTsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoY2hhcnR5cGUgIT0gJ04nKSB7CisgICAgICAgICAgICB0eXBlID0gUERGV09SRF9URVhUOworICAgICAgICB9CisgICAgICAgIGlmIChtX2R3U2l6ZSA8PSBtX2R3Q3VyUG9zKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2ggPSBtX3BEYXRhW21fZHdDdXJQb3MrK107CisgICAgICAgIGNoYXJ0eXBlID0gX1BERl9DaGFyVHlwZVtjaF07CisgICAgICAgIGlmIChjaGFydHlwZSA9PSAnRCcgfHwgY2hhcnR5cGUgPT0gJ1cnKSB7CisgICAgICAgICAgICBtX2R3Q3VyUG9zIC0tOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZHdTaXplICsrOworICAgIH0KK30KK0NGWF9CeXRlU3RyaW5nQyBDUERGX1NpbXBsZVBhcnNlcjo6R2V0V29yZCgpCit7CisgICAgRlhfTFBDQllURSBwU3RhcnQ7CisgICAgRlhfRFdPUkQgZHdTaXplOworICAgIGludCB0eXBlOworICAgIFBhcnNlV29yZChwU3RhcnQsIGR3U2l6ZSwgdHlwZSk7CisgICAgaWYgKGR3U2l6ZSA9PSAxICYmIHBTdGFydFswXSA9PSAnPCcpIHsKKyAgICAgICAgd2hpbGUgKG1fZHdDdXJQb3MgPCBtX2R3U2l6ZSAmJiBtX3BEYXRhW21fZHdDdXJQb3NdICE9ICc+JykgeworICAgICAgICAgICAgbV9kd0N1clBvcyArKzsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9kd0N1clBvcyA8IG1fZHdTaXplKSB7CisgICAgICAgICAgICBtX2R3Q3VyUG9zICsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0MocFN0YXJ0LCAoRlhfU1RSU0laRSkobV9kd0N1clBvcyAtIChwU3RhcnQgLSBtX3BEYXRhKSkpOworICAgIH0gZWxzZSBpZiAoZHdTaXplID09IDEgJiYgcFN0YXJ0WzBdID09ICcoJykgeworICAgICAgICBpbnQgbGV2ZWwgPSAxOworICAgICAgICB3aGlsZSAobV9kd0N1clBvcyA8IG1fZHdTaXplKSB7CisgICAgICAgICAgICBpZiAobV9wRGF0YVttX2R3Q3VyUG9zXSA9PSAnKScpIHsKKyAgICAgICAgICAgICAgICBsZXZlbCAtLTsKKyAgICAgICAgICAgICAgICBpZiAobGV2ZWwgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9wRGF0YVttX2R3Q3VyUG9zXSA9PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZHdTaXplIDw9IG1fZHdDdXJQb3MpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fZHdDdXJQb3MgKys7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fcERhdGFbbV9kd0N1clBvc10gPT0gJygnKSB7CisgICAgICAgICAgICAgICAgbGV2ZWwgKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9kd1NpemUgPD0gbV9kd0N1clBvcykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9kd0N1clBvcyArKzsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9kd0N1clBvcyA8IG1fZHdTaXplKSB7CisgICAgICAgICAgICBtX2R3Q3VyUG9zICsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0MocFN0YXJ0LCAoRlhfU1RSU0laRSkobV9kd0N1clBvcyAtIChwU3RhcnQgLSBtX3BEYXRhKSkpOworICAgIH0KKyAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmdDKHBTdGFydCwgZHdTaXplKTsKK30KK0ZYX0JPT0wgQ1BERl9TaW1wbGVQYXJzZXI6OlNlYXJjaFRva2VuKEZYX0JTVFIgdG9rZW4pCit7CisgICAgaW50IHRva2VuX2xlbiA9IHRva2VuLkdldExlbmd0aCgpOworICAgIHdoaWxlIChtX2R3Q3VyUG9zIDwgbV9kd1NpemUgLSB0b2tlbl9sZW4pIHsKKyAgICAgICAgaWYgKEZYU1lTX21lbWNtcDMyKG1fcERhdGEgKyBtX2R3Q3VyUG9zLCB0b2tlbiwgdG9rZW5fbGVuKSA9PSAwKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBtX2R3Q3VyUG9zICsrOworICAgIH0KKyAgICBpZiAobV9kd0N1clBvcyA9PSBtX2R3U2l6ZSAtIHRva2VuX2xlbikgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fZHdDdXJQb3MgKz0gdG9rZW5fbGVuOworICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDUERGX1NpbXBsZVBhcnNlcjo6U2tpcFdvcmQoRlhfQlNUUiB0b2tlbikKK3sKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBDRlhfQnl0ZVN0cmluZ0Mgd29yZCA9IEdldFdvcmQoKTsKKyAgICAgICAgaWYgKHdvcmQuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdvcmQgPT0gdG9rZW4pIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK0ZYX0JPT0wgQ1BERl9TaW1wbGVQYXJzZXI6OkZpbmRUYWdQYWlyKEZYX0JTVFIgc3RhcnRfdG9rZW4sIEZYX0JTVFIgZW5kX3Rva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQmIHN0YXJ0X3BvcywgRlhfRFdPUkQmIGVuZF9wb3MpCit7CisgICAgaWYgKCFzdGFydF90b2tlbi5Jc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKCFTa2lwV29yZChzdGFydF90b2tlbikpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBzdGFydF9wb3MgPSBtX2R3Q3VyUG9zOworICAgIH0KKyAgICB3aGlsZSAoMSkgeworICAgICAgICBlbmRfcG9zID0gbV9kd0N1clBvczsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmdDIHdvcmQgPSBHZXRXb3JkKCk7CisgICAgICAgIGlmICh3b3JkLklzRW1wdHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmICh3b3JkID09IGVuZF90b2tlbikgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorRlhfQk9PTCBDUERGX1NpbXBsZVBhcnNlcjo6RmluZFRhZ1BhcmFtKEZYX0JTVFIgdG9rZW4sIGludCBuUGFyYW1zKQoreworICAgIG5QYXJhbXMgKys7CisgICAgRlhfRFdPUkQqIHBCdWYgPSBGWF9BbGxvYyhGWF9EV09SRCwgblBhcmFtcyk7CisgICAgaW50IGJ1Zl9pbmRleCA9IDA7CisgICAgaW50IGJ1Zl9jb3VudCA9IDA7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgcEJ1ZltidWZfaW5kZXgrK10gPSBtX2R3Q3VyUG9zOworICAgICAgICBpZiAoYnVmX2luZGV4ID09IG5QYXJhbXMpIHsKKyAgICAgICAgICAgIGJ1Zl9pbmRleCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgYnVmX2NvdW50ICsrOworICAgICAgICBpZiAoYnVmX2NvdW50ID4gblBhcmFtcykgeworICAgICAgICAgICAgYnVmX2NvdW50ID0gblBhcmFtczsKKyAgICAgICAgfQorICAgICAgICBDRlhfQnl0ZVN0cmluZ0Mgd29yZCA9IEdldFdvcmQoKTsKKyAgICAgICAgaWYgKHdvcmQuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICBGWF9GcmVlKHBCdWYpOworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmICh3b3JkID09IHRva2VuKSB7CisgICAgICAgICAgICBpZiAoYnVmX2NvdW50IDwgblBhcmFtcykgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9kd0N1clBvcyA9IHBCdWZbYnVmX2luZGV4XTsKKyAgICAgICAgICAgIEZYX0ZyZWUocEJ1Zik7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitzdGF0aWMgaW50IF9oZXgyZGVjKGNoYXIgY2gpCit7CisgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsKKyAgICAgICAgcmV0dXJuIGNoIC0gJzAnOworICAgIH0KKyAgICBpZiAoY2ggPj0gJ2EnICYmIGNoIDw9ICdmJykgeworICAgICAgICByZXR1cm4gY2ggLSAnYScgKyAxMDsKKyAgICB9CisgICAgaWYgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHsKKyAgICAgICAgcmV0dXJuIGNoIC0gJ0EnICsgMTA7CisgICAgfQorICAgIHJldHVybiAwOworfQorQ0ZYX0J5dGVTdHJpbmcgUERGX05hbWVEZWNvZGUoRlhfQlNUUiBic3RyKQoreworICAgIGludCBzaXplID0gYnN0ci5HZXRMZW5ndGgoKTsKKyAgICBGWF9MUENTVFIgcFNyYyA9IGJzdHIuR2V0Q1N0cigpOworICAgIGlmIChGWFNZU19tZW1jaHIocFNyYywgJyMnLCBzaXplKSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBic3RyOworICAgIH0KKyAgICBDRlhfQnl0ZVN0cmluZyByZXN1bHQ7CisgICAgRlhfTFBTVFIgcERlc3RTdGFydCA9IHJlc3VsdC5HZXRCdWZmZXIoc2l6ZSk7CisgICAgRlhfTFBTVFIgcERlc3QgPSBwRGVzdFN0YXJ0OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgeworICAgICAgICBpZiAocFNyY1tpXSA9PSAnIycgJiYgaSA8IHNpemUgLSAyKSB7CisgICAgICAgICAgICAqcERlc3QgKysgPSBfaGV4MmRlYyhwU3JjW2kgKyAxXSkgKiAxNiArIF9oZXgyZGVjKHBTcmNbaSArIDJdKTsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICpwRGVzdCArKyA9IHBTcmNbaV07CisgICAgICAgIH0KKyAgICB9CisgICAgcmVzdWx0LlJlbGVhc2VCdWZmZXIoKEZYX1NUUlNJWkUpKHBEZXN0IC0gcERlc3RTdGFydCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CitDRlhfQnl0ZVN0cmluZyBQREZfTmFtZURlY29kZShjb25zdCBDRlhfQnl0ZVN0cmluZyYgb3JpZykKK3sKKyAgICBpZiAoRlhTWVNfbWVtY2hyKChGWF9MUENTVFIpb3JpZywgJyMnLCBvcmlnLkdldExlbmd0aCgpKSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBvcmlnOworICAgIH0KKyAgICByZXR1cm4gUERGX05hbWVEZWNvZGUoQ0ZYX0J5dGVTdHJpbmdDKG9yaWcpKTsKK30KK0NGWF9CeXRlU3RyaW5nIFBERl9OYW1lRW5jb2RlKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBvcmlnKQoreworICAgIEZYX0xQQllURSBzcmNfYnVmID0gKEZYX0xQQllURSkoRlhfTFBDU1RSKW9yaWc7CisgICAgaW50IHNyY19sZW4gPSBvcmlnLkdldExlbmd0aCgpOworICAgIGludCBkZXN0X2xlbiA9IDA7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IHNyY19sZW47IGkgKyspIHsKKyAgICAgICAgRlhfQllURSBjaCA9IHNyY19idWZbaV07CisgICAgICAgIGlmIChjaCA+PSAweDgwIHx8IF9QREZfQ2hhclR5cGVbY2hdID09ICdXJyB8fCBjaCA9PSAnIycgfHwKKyAgICAgICAgICAgICAgICBfUERGX0NoYXJUeXBlW2NoXSA9PSAnRCcpIHsKKyAgICAgICAgICAgIGRlc3RfbGVuICs9IDM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZXN0X2xlbiArKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZGVzdF9sZW4gPT0gc3JjX2xlbikgeworICAgICAgICByZXR1cm4gb3JpZzsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgcmVzOworICAgIEZYX0xQU1RSIGRlc3RfYnVmID0gcmVzLkdldEJ1ZmZlcihkZXN0X2xlbik7CisgICAgZGVzdF9sZW4gPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBzcmNfbGVuOyBpICsrKSB7CisgICAgICAgIEZYX0JZVEUgY2ggPSBzcmNfYnVmW2ldOworICAgICAgICBpZiAoY2ggPj0gMHg4MCB8fCBfUERGX0NoYXJUeXBlW2NoXSA9PSAnVycgfHwgY2ggPT0gJyMnIHx8CisgICAgICAgICAgICAgICAgX1BERl9DaGFyVHlwZVtjaF0gPT0gJ0QnKSB7CisgICAgICAgICAgICBkZXN0X2J1ZltkZXN0X2xlbisrXSA9ICcjJzsKKyAgICAgICAgICAgIGRlc3RfYnVmW2Rlc3RfbGVuKytdID0gIjAxMjM0NTY3ODlBQkNERUYiW2NoIC8gMTZdOworICAgICAgICAgICAgZGVzdF9idWZbZGVzdF9sZW4rK10gPSAiMDEyMzQ1Njc4OUFCQ0RFRiJbY2ggJSAxNl07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZXN0X2J1ZltkZXN0X2xlbisrXSA9IGNoOworICAgICAgICB9CisgICAgfQorICAgIGRlc3RfYnVmW2Rlc3RfbGVuXSA9IDA7CisgICAgcmVzLlJlbGVhc2VCdWZmZXIoKTsKKyAgICByZXR1cm4gcmVzOworfQorQ0ZYX0J5dGVUZXh0QnVmJiBvcGVyYXRvciA8PCAoQ0ZYX0J5dGVUZXh0QnVmJiBidWYsIGNvbnN0IENQREZfT2JqZWN0KiBwT2JqKQoreworICAgIGlmIChwT2JqID09IE5VTEwpIHsKKyAgICAgICAgYnVmIDw8IEZYX0JTVFJDKCIgbnVsbCIpOworICAgICAgICByZXR1cm4gYnVmOworICAgIH0KKyAgICBzd2l0Y2ggKHBPYmotPkdldFR5cGUoKSkgeworICAgICAgICBjYXNlIFBERk9CSl9OVUxMOgorICAgICAgICAgICAgYnVmIDw8IEZYX0JTVFJDKCIgbnVsbCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUERGT0JKX0JPT0xFQU46CisgICAgICAgIGNhc2UgUERGT0JKX05VTUJFUjoKKyAgICAgICAgICAgIGJ1ZiA8PCAiICIgPDwgcE9iai0+R2V0U3RyaW5nKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQREZPQkpfU1RSSU5HOiB7CisgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc3RyID0gcE9iai0+R2V0U3RyaW5nKCk7CisgICAgICAgICAgICAgICAgRlhfQk9PTCBiSGV4ID0gKChDUERGX1N0cmluZyopcE9iaiktPklzSGV4KCk7CisgICAgICAgICAgICAgICAgYnVmIDw8IFBERl9FbmNvZGVTdHJpbmcoc3RyLCBiSGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBQREZPQkpfTkFNRTogeworICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIHN0ciA9IHBPYmotPkdldFN0cmluZygpOworICAgICAgICAgICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiLyIpIDw8IFBERl9OYW1lRW5jb2RlKHN0cik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgUERGT0JKX1JFRkVSRU5DRTogeworICAgICAgICAgICAgICAgIENQREZfUmVmZXJlbmNlKiBwID0gKENQREZfUmVmZXJlbmNlKilwT2JqOworICAgICAgICAgICAgICAgIGJ1ZiA8PCAiICIgPDwgcC0+R2V0UmVmT2JqTnVtKCkgPDwgRlhfQlNUUkMoIiAwIFIgIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgUERGT0JKX0FSUkFZOiB7CisgICAgICAgICAgICAgICAgQ1BERl9BcnJheSogcCA9IChDUERGX0FycmF5KilwT2JqOworICAgICAgICAgICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiWyIpOworICAgICAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwLT5HZXRDb3VudCgpOyBpICsrKSB7CisgICAgICAgICAgICAgICAgICAgIENQREZfT2JqZWN0KiBwRWxlbWVudCA9IHAtPkdldEVsZW1lbnQoaSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwRWxlbWVudC0+R2V0T2JqTnVtKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA8PCAiICIgPDwgcEVsZW1lbnQtPkdldE9iak51bSgpIDw8IEZYX0JTVFJDKCIgMCBSIik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBidWYgPDwgcEVsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnVmIDw8IEZYX0JTVFJDKCJdIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgUERGT0JKX0RJQ1RJT05BUlk6IHsKKyAgICAgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHAgPSAoQ1BERl9EaWN0aW9uYXJ5KilwT2JqOworICAgICAgICAgICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiPDwiKTsKKyAgICAgICAgICAgICAgICBGWF9QT1NJVElPTiBwb3MgPSBwLT5HZXRTdGFydFBvcygpOworICAgICAgICAgICAgICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcga2V5OworICAgICAgICAgICAgICAgICAgICBDUERGX09iamVjdCogcFZhbHVlID0gcC0+R2V0TmV4dEVsZW1lbnQocG9zLCBrZXkpOworICAgICAgICAgICAgICAgICAgICBidWYgPDwgRlhfQlNUUkMoIi8iKSA8PCBQREZfTmFtZUVuY29kZShrZXkpOworICAgICAgICAgICAgICAgICAgICBpZiAocFZhbHVlLT5HZXRPYmpOdW0oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnVmIDw8ICIgIiA8PCBwVmFsdWUtPkdldE9iak51bSgpIDw8IEZYX0JTVFJDKCIgMCBSICIpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYnVmIDw8IHBWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBidWYgPDwgRlhfQlNUUkMoIj4+Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgUERGT0JKX1NUUkVBTTogeworICAgICAgICAgICAgICAgIENQREZfU3RyZWFtKiBwID0gKENQREZfU3RyZWFtKilwT2JqOworICAgICAgICAgICAgICAgIGJ1ZiA8PCBwLT5HZXREaWN0KCkgPDwgRlhfQlNUUkMoInN0cmVhbVxyXG4iKTsKKyAgICAgICAgICAgICAgICBDUERGX1N0cmVhbUFjYyBhY2M7CisgICAgICAgICAgICAgICAgYWNjLkxvYWRBbGxEYXRhKHAsIFRSVUUpOworICAgICAgICAgICAgICAgIGJ1Zi5BcHBlbmRCbG9jayhhY2MuR2V0RGF0YSgpLCBhY2MuR2V0U2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBidWYgPDwgRlhfQlNUUkMoIlxyXG5lbmRzdHJlYW0iKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChGQUxTRSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGJ1ZjsKK30KK0ZYX0ZMT0FUIFBERl9DbGlwRmxvYXQoRlhfRkxPQVQgZikKK3sKKyAgICBpZiAoZiA8IDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChmID4gMS4wZikgeworICAgICAgICByZXR1cm4gMS4wZjsKKyAgICB9CisgICAgcmV0dXJuIGY7Cit9CitzdGF0aWMgQ1BERl9PYmplY3QqIFNlYXJjaE51bWJlck5vZGUoQ1BERl9EaWN0aW9uYXJ5KiBwTm9kZSwgaW50IG51bSkKK3sKKyAgICBDUERGX0FycmF5KiBwTGltaXRzID0gcE5vZGUtPkdldEFycmF5KCJMaW1pdHMiKTsKKyAgICBpZiAocExpbWl0cyAmJiAobnVtIDwgcExpbWl0cy0+R2V0SW50ZWdlcigwKSB8fCBudW0gPiBwTGltaXRzLT5HZXRJbnRlZ2VyKDEpKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcE51bWJlcnMgPSBwTm9kZS0+R2V0QXJyYXkoIk51bXMiKTsKKyAgICBpZiAocE51bWJlcnMpIHsKKyAgICAgICAgRlhfRFdPUkQgZHdDb3VudCA9IHBOdW1iZXJzLT5HZXRDb3VudCgpIC8gMjsKKyAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IGR3Q291bnQ7IGkgKyspIHsKKyAgICAgICAgICAgIGludCBpbmRleCA9IHBOdW1iZXJzLT5HZXRJbnRlZ2VyKGkgKiAyKTsKKyAgICAgICAgICAgIGlmIChudW0gPT0gaW5kZXgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcE51bWJlcnMtPkdldEVsZW1lbnRWYWx1ZShpICogMiArIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGluZGV4ID4gbnVtKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfQXJyYXkqIHBLaWRzID0gcE5vZGUtPkdldEFycmF5KCJLaWRzIik7CisgICAgaWYgKHBLaWRzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwS2lkcy0+R2V0Q291bnQoKTsgaSArKykgeworICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBLaWQgPSBwS2lkcy0+R2V0RGljdChpKTsKKyAgICAgICAgaWYgKHBLaWQgPT0gTlVMTCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQ1BERl9PYmplY3QqIHBGb3VuZCA9IFNlYXJjaE51bWJlck5vZGUocEtpZCwgbnVtKTsKKyAgICAgICAgaWYgKHBGb3VuZCkgeworICAgICAgICAgICAgcmV0dXJuIHBGb3VuZDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK0NQREZfT2JqZWN0KiBDUERGX051bWJlclRyZWU6Okxvb2t1cFZhbHVlKGludCBudW0pCit7CisgICAgcmV0dXJuIFNlYXJjaE51bWJlck5vZGUobV9wUm9vdCwgbnVtKTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9yZW5kZXIvZnBkZl9yZW5kZXIuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3JlbmRlci9mcGRmX3JlbmRlci5jcHAKaW5kZXggZmJhNjk4Yy4uMTk2MjQzMiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3JlbmRlci9mcGRmX3JlbmRlci5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3JlbmRlci9mcGRmX3JlbmRlci5jcHAKQEAgLTEsMTQ4OCArMSwxNDg4IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcmVuZGVyLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX21vZHVsZS5oIg0KLSNpbmNsdWRlICIuLi9mcGRmX3BhZ2UvcGFnZWludC5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2UuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgiDQotI2luY2x1ZGUgInJlbmRlcl9pbnQuaCINCi1DUERGX0RvY1JlbmRlckRhdGE6OkNQREZfRG9jUmVuZGVyRGF0YShDUERGX0RvY3VtZW50KiBwUERGRG9jKQ0KLSAgICA6IG1fcFBERkRvYyhwUERGRG9jKQ0KLSAgICAsIG1fcEZvbnRDYWNoZShOVUxMKQ0KLXsNCi19DQotQ1BERl9Eb2NSZW5kZXJEYXRhOjp+Q1BERl9Eb2NSZW5kZXJEYXRhKCkNCi17DQotICAgIENsZWFyKFRSVUUpOw0KLX0NCi12b2lkIENQREZfRG9jUmVuZGVyRGF0YTo6Q2xlYXIoRlhfQk9PTCBiUmVsZWFzZSkNCi17DQotICAgIEZYX1BPU0lUSU9OIHBvczsNCi0gICAgew0KLSAgICAgICAgcG9zID0gbV9UeXBlM0ZhY2VNYXAuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICAgICAgd2hpbGUgKHBvcykgew0KLSAgICAgICAgICAgIENQREZfRm9udCogcEZvbnQ7DQotICAgICAgICAgICAgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfVHlwZTNDYWNoZSo+KiBjYWNoZTsNCi0gICAgICAgICAgICBtX1R5cGUzRmFjZU1hcC5HZXROZXh0QXNzb2MocG9zLCBwRm9udCwgY2FjaGUpOw0KLSAgICAgICAgICAgIGlmIChiUmVsZWFzZSB8fCBjYWNoZS0+bV9uQ291bnQgPCAyKSB7DQotICAgICAgICAgICAgICAgIGRlbGV0ZSBjYWNoZS0+bV9PYmo7DQotICAgICAgICAgICAgICAgIGRlbGV0ZSBjYWNoZTsNCi0gICAgICAgICAgICAgICAgbV9UeXBlM0ZhY2VNYXAuUmVtb3ZlS2V5KHBGb250KTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0jaWZuZGVmIF9GUERGQVBJX01JTklfDQotICAgIHsNCi0gICAgICAgIHBvcyA9IG1fVHJhbnNmZXJGdW5jTWFwLkdldFN0YXJ0UG9zaXRpb24oKTsNCi0gICAgICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgICAgICBDUERGX09iamVjdCoga2V5Ow0KLSAgICAgICAgICAgIENQREZfQ291bnRlZE9iamVjdDxDUERGX1RyYW5zZmVyRnVuYyo+KiB2YWx1ZTsNCi0gICAgICAgICAgICBtX1RyYW5zZmVyRnVuY01hcC5HZXROZXh0QXNzb2MocG9zLCBrZXksIHZhbHVlKTsNCi0gICAgICAgICAgICBpZiAoYlJlbGVhc2UgfHwgdmFsdWUtPm1fbkNvdW50IDwgMikgew0KLSAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWUtPm1fT2JqOw0KLSAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWU7DQotICAgICAgICAgICAgICAgIG1fVHJhbnNmZXJGdW5jTWFwLlJlbW92ZUtleShrZXkpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSNlbmRpZg0KLSAgICBpZiAobV9wRm9udENhY2hlKSB7DQotICAgICAgICBpZiAoYlJlbGVhc2UpIHsNCi0gICAgICAgICAgICBkZWxldGUgbV9wRm9udENhY2hlOw0KLSAgICAgICAgICAgIG1fcEZvbnRDYWNoZSA9IE5VTEw7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIG1fcEZvbnRDYWNoZS0+RnJlZUNhY2hlKEZBTFNFKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1GWF9CT09MIENQREZfRG9jUmVuZGVyRGF0YTo6SW5pdGlhbGl6ZSgpDQotew0KLSAgICBtX3BGb250Q2FjaGUgPSBGWF9ORVcgQ0ZYX0ZvbnRDYWNoZTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUNQREZfVHlwZTNDYWNoZSogQ1BERl9Eb2NSZW5kZXJEYXRhOjpHZXRDYWNoZWRUeXBlMyhDUERGX1R5cGUzRm9udCogcEZvbnQpDQotew0KLSAgICBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9UeXBlM0NhY2hlKj4qIHBDYWNoZTsNCi0gICAgaWYgKCFtX1R5cGUzRmFjZU1hcC5Mb29rdXAocEZvbnQsIHBDYWNoZSkpIHsNCi0gICAgICAgIENQREZfVHlwZTNDYWNoZSogcFR5cGUzID0gRlhfTkVXIENQREZfVHlwZTNDYWNoZShwRm9udCk7DQotICAgICAgICBwQ2FjaGUgPSBGWF9ORVcgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfVHlwZTNDYWNoZSo+Ow0KLSAgICAgICAgcENhY2hlLT5tX09iaiA9IHBUeXBlMzsNCi0gICAgICAgIHBDYWNoZS0+bV9uQ291bnQgPSAxOw0KLSAgICAgICAgbV9UeXBlM0ZhY2VNYXAuU2V0QXQocEZvbnQsIHBDYWNoZSk7DQotICAgIH0NCi0gICAgcENhY2hlLT5tX25Db3VudCsrOw0KLSAgICByZXR1cm4gcENhY2hlLT5tX09iajsNCi19DQotdm9pZCBDUERGX0RvY1JlbmRlckRhdGE6OlJlbGVhc2VDYWNoZWRUeXBlMyhDUERGX1R5cGUzRm9udCogcEZvbnQpDQotew0KLSAgICBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9UeXBlM0NhY2hlKj4qIHBDYWNoZTsNCi0gICAgaWYgKCFtX1R5cGUzRmFjZU1hcC5Mb29rdXAocEZvbnQsIHBDYWNoZSkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBwQ2FjaGUtPm1fbkNvdW50LS07DQotfQ0KLWNsYXNzIENQREZfUmVuZGVyTW9kdWxlIDogcHVibGljIENQREZfUmVuZGVyTW9kdWxlRGVmDQotew0KLXB1YmxpYzoNCi0gICAgdmlydHVhbCB+Q1BERl9SZW5kZXJNb2R1bGUoKSB7fQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJSW5zdGFsbGVkKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgdmlydHVhbCBDUERGX0RvY1JlbmRlckRhdGEqCUNyZWF0ZURvY0RhdGEoQ1BERl9Eb2N1bWVudCogcERvYyk7DQotICAgIHZpcnR1YWwgdm9pZAlEZXN0cm95RG9jRGF0YShDUERGX0RvY1JlbmRlckRhdGEqIHApOw0KLSAgICB2aXJ0dWFsIHZvaWQJQ2xlYXJEb2NEYXRhKENQREZfRG9jUmVuZGVyRGF0YSogcCk7DQotICAgIHZpcnR1YWwgQ1BERl9Eb2NSZW5kZXJEYXRhKiBHZXRSZW5kZXJEYXRhKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuICZtX1JlbmRlckRhdGE7DQotICAgIH0NCi0gICAgdmlydHVhbCBDUERGX1BhZ2VSZW5kZXJDYWNoZSoJQ3JlYXRlUGFnZUNhY2hlKENQREZfUGFnZSogcFBhZ2UpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBGWF9ORVcgQ1BERl9QYWdlUmVuZGVyQ2FjaGUocFBhZ2UpOw0KLSAgICB9DQotICAgIHZpcnR1YWwgdm9pZAlEZXN0cm95UGFnZUNhY2hlKENQREZfUGFnZVJlbmRlckNhY2hlKiBwQ2FjaGUpOw0KLSAgICB2aXJ0dWFsIENQREZfUmVuZGVyQ29uZmlnKglHZXRDb25maWcoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gJm1fUmVuZGVyQ29uZmlnOw0KLSAgICB9DQotcHJpdmF0ZToNCi0gICAgQ1BERl9Eb2NSZW5kZXJEYXRhCW1fUmVuZGVyRGF0YTsNCi0gICAgQ1BERl9SZW5kZXJDb25maWcJbV9SZW5kZXJDb25maWc7DQotfTsNCi1DUERGX0RvY1JlbmRlckRhdGEqCUNQREZfUmVuZGVyTW9kdWxlOjpDcmVhdGVEb2NEYXRhKENQREZfRG9jdW1lbnQqIHBEb2MpDQotew0KLSAgICBDUERGX0RvY1JlbmRlckRhdGEqIHBEYXRhID0gRlhfTkVXIENQREZfRG9jUmVuZGVyRGF0YShwRG9jKTsNCi0gICAgcERhdGEtPkluaXRpYWxpemUoKTsNCi0gICAgcmV0dXJuIHBEYXRhOw0KLX0NCi12b2lkIENQREZfUmVuZGVyTW9kdWxlOjpEZXN0cm95RG9jRGF0YShDUERGX0RvY1JlbmRlckRhdGEqIHBEb2NEYXRhKQ0KLXsNCi0gICAgZGVsZXRlIHBEb2NEYXRhOw0KLX0NCi12b2lkIENQREZfUmVuZGVyTW9kdWxlOjpDbGVhckRvY0RhdGEoQ1BERl9Eb2NSZW5kZXJEYXRhKiBwKQ0KLXsNCi0gICAgaWYgKHApIHsNCi0gICAgICAgIHAtPkNsZWFyKEZBTFNFKTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfUmVuZGVyTW9kdWxlOjpEZXN0cm95UGFnZUNhY2hlKENQREZfUGFnZVJlbmRlckNhY2hlKiBwQ2FjaGUpDQotew0KLSAgICBkZWxldGUgcENhY2hlOw0KLX0NCi12b2lkIENQREZfTW9kdWxlTWdyOjpJbml0UmVuZGVyTW9kdWxlKCkNCi17DQotICAgIGlmIChtX3BSZW5kZXJNb2R1bGUpIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BSZW5kZXJNb2R1bGU7DQotICAgIH0NCi0gICAgbV9wUmVuZGVyTW9kdWxlID0gRlhfTkVXIENQREZfUmVuZGVyTW9kdWxlOw0KLX0NCi1DUERGX1JlbmRlck9wdGlvbnM6OkNQREZfUmVuZGVyT3B0aW9ucygpDQotICAgIDogbV9Db2xvck1vZGUoUkVOREVSX0NPTE9SX05PUk1BTCkNCi0gICAgLCBtX0ZsYWdzKFJFTkRFUl9DTEVBUlRZUEUpDQotICAgICwgbV9JbnRlcnBvbGF0aW9uKDApDQotICAgICwgbV9BZGRGbGFncygwKQ0KLSAgICAsIG1fcE9DQ29udGV4dChOVUxMKQ0KLSAgICAsIG1fZHdMaW1pdENhY2hlU2l6ZSgxMDI0ICogMTAyNCAqIDEwMCkNCi0gICAgLCBtX0hhbGZ0b25lTGltaXQoLTEpDQotew0KLSNpZiBkZWZpbmVkKF9GUERGQVBJX01JTklfKQ0KLSAgICBtX0ZsYWdzIHw9IFJFTkRFUl9MSU1JVEVESU1BR0VDQUNIRTsNCi0jZW5kaWYNCi19DQotRlhfQVJHQiBDUERGX1JlbmRlck9wdGlvbnM6OlRyYW5zbGF0ZUNvbG9yKEZYX0FSR0IgYXJnYikgY29uc3QNCi17DQotICAgIGlmIChtX0NvbG9yTW9kZSA9PSBSRU5ERVJfQ09MT1JfTk9STUFMKSB7DQotICAgICAgICByZXR1cm4gYXJnYjsNCi0gICAgfQ0KLSAgICBpZiAobV9Db2xvck1vZGUgPT0gUkVOREVSX0NPTE9SX0FMUEhBKSB7DQotICAgICAgICByZXR1cm4gYXJnYjsNCi0gICAgfQ0KLSAgICBpbnQgYSwgciwgZywgYjsNCi0gICAgQXJnYkRlY29kZShhcmdiLCBhLCByLCBnLCBiKTsNCi0gICAgaW50IGdyYXkgPSBGWFJHQjJHUkFZKHIsIGcsIGIpOw0KLSAgICBpZiAobV9Db2xvck1vZGUgPT0gUkVOREVSX0NPTE9SX1RXT0NPTE9SKSB7DQotICAgICAgICBpbnQgY29sb3IgPSAociAtIGdyYXkpICogKHIgLSBncmF5KSArIChnIC0gZ3JheSkgKiAoZyAtIGdyYXkpICsgKGIgLSBncmF5KSAqIChiIC0gZ3JheSk7DQotICAgICAgICBpZiAoZ3JheSA8IDM1ICYmIGNvbG9yIDwgMjApIHsNCi0gICAgICAgICAgICByZXR1cm4gQXJnYkVuY29kZShhLCBtX0ZvcmVDb2xvcik7DQotICAgICAgICB9DQotICAgICAgICBpZiAoZ3JheSA+IDIyMSAmJiBjb2xvciA8IDIwKSB7DQotICAgICAgICAgICAgcmV0dXJuIEFyZ2JFbmNvZGUoYSwgbV9CYWNrQ29sb3IpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIGFyZ2I7DQotICAgIH0NCi0gICAgaW50IGZyID0gRlhTWVNfR2V0UlZhbHVlKG1fRm9yZUNvbG9yKTsNCi0gICAgaW50IGZnID0gRlhTWVNfR2V0R1ZhbHVlKG1fRm9yZUNvbG9yKTsNCi0gICAgaW50IGZiID0gRlhTWVNfR2V0QlZhbHVlKG1fRm9yZUNvbG9yKTsNCi0gICAgaW50IGJyID0gRlhTWVNfR2V0UlZhbHVlKG1fQmFja0NvbG9yKTsNCi0gICAgaW50IGJnID0gRlhTWVNfR2V0R1ZhbHVlKG1fQmFja0NvbG9yKTsNCi0gICAgaW50IGJiID0gRlhTWVNfR2V0QlZhbHVlKG1fQmFja0NvbG9yKTsNCi0gICAgciA9IChiciAtIGZyKSAqIGdyYXkgLyAyNTUgKyBmcjsNCi0gICAgZyA9IChiZyAtIGZnKSAqIGdyYXkgLyAyNTUgKyBmZzsNCi0gICAgYiA9IChiYiAtIGZiKSAqIGdyYXkgLyAyNTUgKyBmYjsNCi0gICAgcmV0dXJuIEFyZ2JFbmNvZGUoYSwgciwgZywgYik7DQotfQ0KLUNQREZfUmVuZGVyU3RhdHVzOjpDUERGX1JlbmRlclN0YXR1cygpDQotew0KLSAgICBtX3BDb250ZXh0ID0gTlVMTDsNCi0gICAgbV9iU3RvcHBlZCA9IEZBTFNFOw0KLSAgICBtX0xldmVsID0gMDsNCi0gICAgbV9wRGV2aWNlID0gTlVMTDsNCi0gICAgbV9wQ3VyT2JqID0gTlVMTDsNCi0gICAgbV9wU3RvcE9iaiA9IE5VTEw7DQotICAgIG1fSGFsZnRvbmVMaW1pdCA9IDA7DQotICAgIG1fcE9iamVjdFJlbmRlcmVyID0gTlVMTDsNCi0gICAgbV9iUHJpbnQgPSBGQUxTRTsNCi0gICAgbV9UcmFuc3BhcmVuY3kgPSAwOw0KLSAgICBtX0RpdGhlckJpdHMgPSAwOw0KLSAgICBtX2JEcm9wT2JqZWN0cyA9IEZBTFNFOw0KLSAgICBtX2JTdGRDUyA9IEZBTFNFOw0KLSAgICBtX0dyb3VwRmFtaWx5ID0gMDsNCi0gICAgbV9iTG9hZE1hc2sgPSBGQUxTRTsNCi0gICAgbV9wVHlwZTNDaGFyID0gTlVMTDsNCi0gICAgbV9UM0ZpbGxDb2xvciA9IDA7DQotICAgIG1fcEZvcm1SZXNvdXJjZSA9IE5VTEw7DQotICAgIG1fcFBhZ2VSZXNvdXJjZSA9IE5VTEw7DQotICAgIG1fY3VyQmxlbmQgPSBGWERJQl9CTEVORF9OT1JNQUw7DQotfQ0KLUNQREZfUmVuZGVyU3RhdHVzOjp+Q1BERl9SZW5kZXJTdGF0dXMoKQ0KLXsNCi0gICAgaWYgKG1fcE9iamVjdFJlbmRlcmVyKSB7DQotICAgICAgICBkZWxldGUgbV9wT2JqZWN0UmVuZGVyZXI7DQotICAgIH0NCi19DQotRlhfQk9PTCBDUERGX1JlbmRlclN0YXR1czo6SW5pdGlhbGl6ZShpbnQgbGV2ZWwsIENQREZfUmVuZGVyQ29udGV4dCogcENvbnRleHQsIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwRGV2aWNlTWF0cml4LCBjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBTdG9wT2JqLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ1BERl9SZW5kZXJTdGF0dXMqIHBQYXJlbnRTdGF0ZSwgY29uc3QgQ1BERl9HcmFwaGljU3RhdGVzKiBwSW5pdGlhbFN0YXRlcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMsIGludCB0cmFuc3BhcmVuY3ksIEZYX0JPT0wgYkRyb3BPYmplY3RzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybVJlc291cmNlLCBGWF9CT09MIGJTdGRDUywgQ1BERl9UeXBlM0NoYXIqIHBUeXBlM0NoYXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9BUkdCIGZpbGxfY29sb3IsIEZYX0RXT1JEIEdyb3VwRmFtaWx5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiTG9hZE1hc2spDQotew0KLSAgICBtX0xldmVsID0gbGV2ZWw7DQotICAgIG1fcENvbnRleHQgPSBwQ29udGV4dDsNCi0gICAgbV9wRGV2aWNlID0gcERldmljZTsNCi0gICAgbV9EaXRoZXJCaXRzID0gcERldmljZS0+R2V0RGV2aWNlQ2FwcyhGWERDX0RJVEhFUl9CSVRTKTsNCi0gICAgbV9iUHJpbnQgPSBtX3BEZXZpY2UtPkdldERldmljZUNsYXNzKCkgIT0gRlhEQ19ESVNQTEFZOw0KLSAgICBpZiAocERldmljZU1hdHJpeCkgew0KLSAgICAgICAgbV9EZXZpY2VNYXRyaXggPSAqcERldmljZU1hdHJpeDsNCi0gICAgfQ0KLSAgICBtX3BTdG9wT2JqID0gcFN0b3BPYmo7DQotICAgIGlmIChwT3B0aW9ucykgew0KLSAgICAgICAgbV9PcHRpb25zID0gKnBPcHRpb25zOw0KLSAgICB9DQotICAgIG1fYkRyb3BPYmplY3RzID0gYkRyb3BPYmplY3RzOw0KLSAgICBtX2JTdGRDUyA9IGJTdGRDUzsNCi0gICAgbV9UM0ZpbGxDb2xvciA9IGZpbGxfY29sb3I7DQotICAgIG1fcFR5cGUzQ2hhciA9IHBUeXBlM0NoYXI7DQotICAgIG1fR3JvdXBGYW1pbHkgPSBHcm91cEZhbWlseTsNCi0gICAgbV9iTG9hZE1hc2sgPSBiTG9hZE1hc2s7DQotICAgIG1fcEZvcm1SZXNvdXJjZSA9IHBGb3JtUmVzb3VyY2U7DQotICAgIG1fcFBhZ2VSZXNvdXJjZSA9IG1fcENvbnRleHQtPm1fcFBhZ2VSZXNvdXJjZXM7DQotICAgIGlmIChwSW5pdGlhbFN0YXRlcyAmJiAhbV9wVHlwZTNDaGFyKSB7DQotICAgICAgICBtX0luaXRpYWxTdGF0ZXMuQ29weVN0YXRlcygqcEluaXRpYWxTdGF0ZXMpOw0KLSAgICAgICAgaWYgKHBQYXJlbnRTdGF0ZSkgew0KLSAgICAgICAgICAgIENQREZfQ29sb3JTdGF0ZURhdGEqIHBDb2xvckRhdGEgPSAoQ1BERl9Db2xvclN0YXRlRGF0YSopKGNvbnN0IENQREZfQ29sb3JTdGF0ZURhdGEqKW1fSW5pdGlhbFN0YXRlcy5tX0NvbG9yU3RhdGU7DQotICAgICAgICAgICAgQ1BERl9Db2xvclN0YXRlRGF0YSogcFBhcmVudERhdGEgPSAoQ1BERl9Db2xvclN0YXRlRGF0YSopKGNvbnN0IENQREZfQ29sb3JTdGF0ZURhdGEqKXBQYXJlbnRTdGF0ZS0+bV9Jbml0aWFsU3RhdGVzLm1fQ29sb3JTdGF0ZTsNCi0gICAgICAgICAgICBpZiAoIXBDb2xvckRhdGEgfHwgcENvbG9yRGF0YS0+bV9GaWxsQ29sb3IuSXNOdWxsKCkpIHsNCi0gICAgICAgICAgICAgICAgQ1BERl9Db2xvclN0YXRlRGF0YSogcERhdGEgPSBtX0luaXRpYWxTdGF0ZXMubV9Db2xvclN0YXRlLkdldE1vZGlmeSgpOw0KLSAgICAgICAgICAgICAgICBwRGF0YS0+bV9GaWxsUkdCID0gcFBhcmVudERhdGEtPm1fRmlsbFJHQjsNCi0gICAgICAgICAgICAgICAgcERhdGEtPm1fRmlsbENvbG9yLkNvcHkoJnBQYXJlbnREYXRhLT5tX0ZpbGxDb2xvcik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmICghcENvbG9yRGF0YSB8fCBwQ29sb3JEYXRhLT5tX1N0cm9rZUNvbG9yLklzTnVsbCgpKSB7DQotICAgICAgICAgICAgICAgIENQREZfQ29sb3JTdGF0ZURhdGEqIHBEYXRhID0gbV9Jbml0aWFsU3RhdGVzLm1fQ29sb3JTdGF0ZS5HZXRNb2RpZnkoKTsNCi0gICAgICAgICAgICAgICAgcERhdGEtPm1fU3Ryb2tlUkdCID0gcFBhcmVudERhdGEtPm1fRmlsbFJHQjsNCi0gICAgICAgICAgICAgICAgcERhdGEtPm1fU3Ryb2tlQ29sb3IuQ29weSgmcFBhcmVudERhdGEtPm1fU3Ryb2tlQ29sb3IpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1fSW5pdGlhbFN0YXRlcy5EZWZhdWx0U3RhdGVzKCk7DQotICAgIH0NCi0jaWYgZGVmaW5lZChfRlBERkFQSV9NSU5JXyl8fGRlZmluZWQoX0ZYQ09SRV9MSU1JVEVEX0NQVV8pDQotICAgIG1fSGFsZnRvbmVMaW1pdCA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UmVuZGVyTW9kdWxlKCktPkdldENvbmZpZygpLT5tX0hhbGZ0b25lTGltaXQ7DQotICAgIGlmIChwT3B0aW9ucyAmJiBwT3B0aW9ucy0+bV9IYWxmdG9uZUxpbWl0ID49IDApIHsNCi0gICAgICAgIG1fSGFsZnRvbmVMaW1pdCA9IHBPcHRpb25zLT5tX0hhbGZ0b25lTGltaXQ7DQotICAgIH0NCi0jZW5kaWYNCi0gICAgbV9wT2JqZWN0UmVuZGVyZXIgPSBOVUxMOw0KLSAgICBtX1RyYW5zcGFyZW5jeSA9IHRyYW5zcGFyZW5jeTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ1BERl9SZW5kZXJTdGF0dXM6OlJlbmRlck9iamVjdExpc3QoY29uc3QgQ1BERl9QYWdlT2JqZWN0cyogcE9ianMsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKQ0KLXsNCi0gICAgaWYgKG1fTGV2ZWwgPiAzMikgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENGWF9GbG9hdFJlY3QgY2xpcF9yZWN0ID0gbV9wRGV2aWNlLT5HZXRDbGlwQm94KCk7DQotICAgIENGWF9BZmZpbmVNYXRyaXggZGV2aWNlMm9iamVjdDsNCi0gICAgZGV2aWNlMm9iamVjdC5TZXRSZXZlcnNlKCpwT2JqMkRldmljZSk7DQotICAgIGRldmljZTJvYmplY3QuVHJhbnNmb3JtUmVjdChjbGlwX3JlY3QpOw0KLSAgICBpbnQgaW5kZXggPSAwOw0KLSAgICBGWF9QT1NJVElPTiBwb3MgPSBwT2Jqcy0+R2V0Rmlyc3RPYmplY3RQb3NpdGlvbigpOw0KLSAgICB3aGlsZShwb3MpIHsNCi0gICAgICAgIGluZGV4ICsrOw0KLSAgICAgICAgQ1BERl9QYWdlT2JqZWN0KiBwQ3VyT2JqID0gcE9ianMtPkdldE5leHRPYmplY3QocG9zKTsNCi0gICAgICAgIGlmIChwQ3VyT2JqID09IG1fcFN0b3BPYmopIHsNCi0gICAgICAgICAgICBtX2JTdG9wcGVkID0gVFJVRTsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBpZiAoIXBDdXJPYmopIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKHBDdXJPYmogPT0gTlVMTCB8fCBwQ3VyT2JqLT5tX0xlZnQgPiBjbGlwX3JlY3QucmlnaHQgfHwgcEN1ck9iai0+bV9SaWdodCA8IGNsaXBfcmVjdC5sZWZ0IHx8DQotICAgICAgICAgICAgICAgIHBDdXJPYmotPm1fQm90dG9tID4gY2xpcF9yZWN0LnRvcCB8fCBwQ3VyT2JqLT5tX1RvcCA8IGNsaXBfcmVjdC5ib3R0b20pIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIFJlbmRlclNpbmdsZU9iamVjdChwQ3VyT2JqLCBwT2JqMkRldmljZSk7DQotICAgICAgICBpZiAobV9iU3RvcHBlZCkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi12b2lkIENQREZfUmVuZGVyU3RhdHVzOjpSZW5kZXJTaW5nbGVPYmplY3QoY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSkNCi17DQotICAgIGlmIChtX0xldmVsID4gMzIpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX3BDdXJPYmogPSBwT2JqOw0KLSAgICBpZiAobV9PcHRpb25zLm1fcE9DQ29udGV4dCAmJiBwT2JqLT5tX0NvbnRlbnRNYXJrLk5vdE51bGwoKSkNCi0gICAgICAgIGlmICghbV9PcHRpb25zLm1fcE9DQ29udGV4dC0+Q2hlY2tPYmplY3RWaXNpYmxlKHBPYmopKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICBQcm9jZXNzQ2xpcFBhdGgocE9iai0+bV9DbGlwUGF0aCwgcE9iajJEZXZpY2UpOw0KLSAgICBpZiAoUHJvY2Vzc1RyYW5zcGFyZW5jeShwT2JqLCBwT2JqMkRldmljZSkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBQcm9jZXNzT2JqZWN0Tm9DbGlwKHBPYmosIHBPYmoyRGV2aWNlKTsNCi19DQotRlhfQk9PTCBDUERGX1JlbmRlclN0YXR1czo6Q29udGludWVTaW5nbGVPYmplY3QoY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSwgSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBpZiAobV9wT2JqZWN0UmVuZGVyZXIpIHsNCi0gICAgICAgIGlmIChtX3BPYmplY3RSZW5kZXJlci0+Q29udGludWUocFBhdXNlKSkgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCFtX3BPYmplY3RSZW5kZXJlci0+bV9SZXN1bHQpIHsNCi0gICAgICAgICAgICBEcmF3T2JqV2l0aEJhY2tncm91bmQocE9iaiwgcE9iajJEZXZpY2UpOw0KLSAgICAgICAgfQ0KLSNpZmRlZiBfRlBERkFQSV9NSU5JXw0KLSAgICAgICAgaWYgKG1fRGl0aGVyQml0cykgew0KLSAgICAgICAgICAgIERpdGhlck9iamVjdEFyZWEocE9iaiwgcE9iajJEZXZpY2UpOw0KLSAgICAgICAgfQ0KLSNlbmRpZg0KLSAgICAgICAgZGVsZXRlIG1fcE9iamVjdFJlbmRlcmVyOw0KLSAgICAgICAgbV9wT2JqZWN0UmVuZGVyZXIgPSBOVUxMOw0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fcEN1ck9iaiA9IHBPYmo7DQotICAgIGlmIChtX09wdGlvbnMubV9wT0NDb250ZXh0ICYmIHBPYmotPm1fQ29udGVudE1hcmsuTm90TnVsbCgpKQ0KLSAgICAgICAgaWYgKCFtX09wdGlvbnMubV9wT0NDb250ZXh0LT5DaGVja09iamVjdFZpc2libGUocE9iaikpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIFByb2Nlc3NDbGlwUGF0aChwT2JqLT5tX0NsaXBQYXRoLCBwT2JqMkRldmljZSk7DQotICAgIGlmIChQcm9jZXNzVHJhbnNwYXJlbmN5KHBPYmosIHBPYmoyRGV2aWNlKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChwT2JqLT5tX1R5cGUgPT0gUERGUEFHRV9JTUFHRSkgew0KLSAgICAgICAgbV9wT2JqZWN0UmVuZGVyZXIgPSBJUERGX09iamVjdFJlbmRlcmVyOjpDcmVhdGUocE9iai0+bV9UeXBlKTsNCi0gICAgICAgIGlmICghbV9wT2JqZWN0UmVuZGVyZXItPlN0YXJ0KHRoaXMsIHBPYmosIHBPYmoyRGV2aWNlLCBGQUxTRSkpIHsNCi0gICAgICAgICAgICBpZiAoIW1fcE9iamVjdFJlbmRlcmVyLT5tX1Jlc3VsdCkgew0KLSAgICAgICAgICAgICAgICBEcmF3T2JqV2l0aEJhY2tncm91bmQocE9iaiwgcE9iajJEZXZpY2UpOw0KLSAgICAgICAgICAgIH0NCi0jaWZkZWYgX0ZQREZBUElfTUlOSV8NCi0gICAgICAgICAgICBpZiAobV9EaXRoZXJCaXRzKSB7DQotICAgICAgICAgICAgICAgIERpdGhlck9iamVjdEFyZWEocE9iaiwgcE9iajJEZXZpY2UpOw0KLSAgICAgICAgICAgIH0NCi0jZW5kaWYNCi0gICAgICAgICAgICBkZWxldGUgbV9wT2JqZWN0UmVuZGVyZXI7DQotICAgICAgICAgICAgbV9wT2JqZWN0UmVuZGVyZXIgPSBOVUxMOw0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBDb250aW51ZVNpbmdsZU9iamVjdChwT2JqLCBwT2JqMkRldmljZSwgcFBhdXNlKTsNCi0gICAgfQ0KLSAgICBQcm9jZXNzT2JqZWN0Tm9DbGlwKHBPYmosIHBPYmoyRGV2aWNlKTsNCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1JUERGX09iamVjdFJlbmRlcmVyKiBJUERGX09iamVjdFJlbmRlcmVyOjpDcmVhdGUoaW50IHR5cGUpDQotew0KLSAgICBJUERGX09iamVjdFJlbmRlcmVyKiBwUmVuZGVyZXIgPSBOVUxMOw0KLSAgICBpZiAodHlwZSA9PSBQREZQQUdFX0lNQUdFKSB7DQotICAgICAgICBwUmVuZGVyZXIgPSBGWF9ORVcgQ1BERl9JbWFnZVJlbmRlcmVyOw0KLSAgICB9DQotICAgIHJldHVybiBwUmVuZGVyZXI7DQotfQ0KLUZYX0JPT0wgQ1BERl9SZW5kZXJTdGF0dXM6OkdldE9iamVjdENsaXBwZWRSZWN0KGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UsIEZYX0JPT0wgYkxvZ2ljYWwsIEZYX1JFQ1QgJnJlY3QpIGNvbnN0DQotew0KLSAgICByZWN0ID0gcE9iai0+R2V0QkJveChwT2JqMkRldmljZSk7DQotICAgIEZYX1JFQ1QgcnRDbGlwID0gbV9wRGV2aWNlLT5HZXRDbGlwQm94KCk7DQotICAgIGlmICghYkxvZ2ljYWwpIHsNCi0gICAgICAgIENGWF9NYXRyaXggZENUTSA9IG1fcERldmljZS0+R2V0Q1RNKCk7DQotICAgICAgICBGWF9GTE9BVCBhID0gRlhTWVNfZmFicyhkQ1RNLmEpOw0KLSAgICAgICAgRlhfRkxPQVQgZCA9IEZYU1lTX2ZhYnMoZENUTS5kKTsNCi0gICAgICAgIGlmIChhICE9IDEuMGYgfHwgZCAhPSAxLjBmKSB7DQotICAgICAgICAgICAgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIChGWF9JTlQzMilGWFNZU19jZWlsKChGWF9GTE9BVClyZWN0LldpZHRoKCkgKiBhKTsNCi0gICAgICAgICAgICByZWN0LmJvdHRvbSA9IHJlY3QudG9wICsgKEZYX0lOVDMyKUZYU1lTX2NlaWwoKEZYX0ZMT0FUKXJlY3QuSGVpZ2h0KCkgKiBkKTsNCi0gICAgICAgICAgICBydENsaXAucmlnaHQgPSBydENsaXAubGVmdCArIChGWF9JTlQzMilGWFNZU19jZWlsKChGWF9GTE9BVClydENsaXAuV2lkdGgoKSAqIGEpOw0KLSAgICAgICAgICAgIHJ0Q2xpcC5ib3R0b20gPSBydENsaXAudG9wICsgKEZYX0lOVDMyKUZYU1lTX2NlaWwoKEZYX0ZMT0FUKXJ0Q2xpcC5IZWlnaHQoKSAqIGQpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJlY3QuSW50ZXJzZWN0KHJ0Q2xpcCk7DQotICAgIHJldHVybiByZWN0LklzRW1wdHkoKTsNCi19DQotdm9pZCBDUERGX1JlbmRlclN0YXR1czo6RGl0aGVyT2JqZWN0QXJlYShjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKQ0KLXsNCi0gICAgQ0ZYX0RJQml0bWFwKiBwQml0bWFwID0gbV9wRGV2aWNlLT5HZXRCaXRtYXAoKTsNCi0gICAgaWYgKHBCaXRtYXAgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX1JFQ1QgcmVjdDsNCi0gICAgaWYgKEdldE9iamVjdENsaXBwZWRSZWN0KHBPYmosIHBPYmoyRGV2aWNlLCBGQUxTRSwgcmVjdCkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAobV9EaXRoZXJCaXRzID09IDIpIHsNCi0gICAgICAgIHN0YXRpYyBGWF9BUkdCIHBhbFs0XSA9IHswLCA4NSwgMTcwLCAyNTV9Ow0KLSAgICAgICAgcEJpdG1hcC0+RGl0aGVyRlMocGFsLCA0LCAmcmVjdCk7DQotICAgIH0gZWxzZSBpZiAobV9EaXRoZXJCaXRzID09IDMpIHsNCi0gICAgICAgIHN0YXRpYyBGWF9BUkdCIHBhbFs4XSA9IHswLCAzNiwgNzMsIDEwOSwgMTQ2LCAxODIsIDIxOSwgMjU1fTsNCi0gICAgICAgIHBCaXRtYXAtPkRpdGhlckZTKHBhbCwgOCwgJnJlY3QpOw0KLSAgICB9IGVsc2UgaWYgKG1fRGl0aGVyQml0cyA9PSA0KSB7DQotICAgICAgICBzdGF0aWMgRlhfQVJHQiBwYWxbMTZdID0gezAsIDE3LCAzNCwgNTEsIDY4LCA4NSwgMTAyLCAxMTksIDEzNiwgMTUzLCAxNzAsIDE4NywgMjA0LCAyMjEsIDIzOCwgMjU1fTsNCi0gICAgICAgIHBCaXRtYXAtPkRpdGhlckZTKHBhbCwgMTYsICZyZWN0KTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfUmVuZGVyU3RhdHVzOjpQcm9jZXNzT2JqZWN0Tm9DbGlwKGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpDQotew0KLSAgICBGWF9CT09MIGJSZXQgPSBGQUxTRTsNCi0gICAgc3dpdGNoIChwT2JqLT5tX1R5cGUpIHsNCi0gICAgICAgIGNhc2UgUERGUEFHRV9URVhUOg0KLSAgICAgICAgICAgIGJSZXQgPSBQcm9jZXNzVGV4dCgoQ1BERl9UZXh0T2JqZWN0KilwT2JqLCBwT2JqMkRldmljZSwgTlVMTCk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIFBERlBBR0VfUEFUSDoNCi0gICAgICAgICAgICBiUmV0ID0gUHJvY2Vzc1BhdGgoKENQREZfUGF0aE9iamVjdCopcE9iaiwgcE9iajJEZXZpY2UpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBQREZQQUdFX0lNQUdFOg0KLSAgICAgICAgICAgIGJSZXQgPSBQcm9jZXNzSW1hZ2UoKENQREZfSW1hZ2VPYmplY3QqKXBPYmosIHBPYmoyRGV2aWNlKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgUERGUEFHRV9TSEFESU5HOg0KLSAgICAgICAgICAgIGJSZXQgPSBQcm9jZXNzU2hhZGluZygoQ1BERl9TaGFkaW5nT2JqZWN0KilwT2JqLCBwT2JqMkRldmljZSk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIFBERlBBR0VfRk9STToNCi0gICAgICAgICAgICBiUmV0ID0gUHJvY2Vzc0Zvcm0oKENQREZfRm9ybU9iamVjdCopcE9iaiwgcE9iajJEZXZpY2UpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSNpZiBkZWZpbmVkKF9GUERGQVBJX01JTklfKQ0KLSAgICAgICAgY2FzZSBQREZQQUdFX0lOTElORVM6DQotICAgICAgICAgICAgYlJldCA9IFByb2Nlc3NJbmxpbmVzKChDUERGX0lubGluZUltYWdlcyopcE9iaiwgcE9iajJEZXZpY2UpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSNlbmRpZg0KLSAgICB9DQotICAgIGlmICghYlJldCkgew0KLSAgICAgICAgRHJhd09ialdpdGhCYWNrZ3JvdW5kKHBPYmosIHBPYmoyRGV2aWNlKTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENQREZfUmVuZGVyU3RhdHVzOjpEcmF3T2JqV2l0aEJsZW5kKGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpDQotew0KLSAgICBGWF9CT09MIGJSZXQgPSBGQUxTRTsNCi0gICAgc3dpdGNoIChwT2JqLT5tX1R5cGUpIHsNCi0gICAgICAgIGNhc2UgUERGUEFHRV9QQVRIOg0KLSAgICAgICAgICAgIGJSZXQgPSBQcm9jZXNzUGF0aCgoQ1BERl9QYXRoT2JqZWN0KilwT2JqLCBwT2JqMkRldmljZSk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIFBERlBBR0VfSU1BR0U6DQotICAgICAgICAgICAgYlJldCA9IFByb2Nlc3NJbWFnZSgoQ1BERl9JbWFnZU9iamVjdCAqKXBPYmosIHBPYmoyRGV2aWNlKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgUERGUEFHRV9GT1JNOg0KLSAgICAgICAgICAgIGJSZXQgPSBQcm9jZXNzRm9ybSgoQ1BERl9Gb3JtT2JqZWN0KilwT2JqLCBwT2JqMkRldmljZSk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgIH0NCi0gICAgcmV0dXJuIGJSZXQ7DQotfQ0KLXZvaWQgQ1BERl9SZW5kZXJTdGF0dXM6OkdldFNjYWxlZE1hdHJpeChDRlhfTWF0cml4ICZtYXRyaXgpIGNvbnN0DQotew0KLSAgICBDRlhfTWF0cml4IGRDVE0gPSBtX3BEZXZpY2UtPkdldENUTSgpOw0KLSAgICBtYXRyaXguYSAqPSBGWFNZU19mYWJzKGRDVE0uYSk7DQotICAgIG1hdHJpeC5kICo9IEZYU1lTX2ZhYnMoZENUTS5kKTsNCi19DQotdm9pZCBDUERGX1JlbmRlclN0YXR1czo6RHJhd09ialdpdGhCYWNrZ3JvdW5kKGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpDQotew0KLSNpZiAhZGVmaW5lZChfRlBERkFQSV9NSU5JXykgfHwgZGVmaW5lZChfRlhDT1JFX0ZFQVRVUkVfQUxMXykNCi0gICAgRlhfUkVDVCByZWN0Ow0KLSAgICBpZiAoR2V0T2JqZWN0Q2xpcHBlZFJlY3QocE9iaiwgcE9iajJEZXZpY2UsIEZBTFNFLCByZWN0KSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGludCByZXMgPSAzMDA7DQotICAgIGlmIChwT2JqLT5tX1R5cGUgPT0gUERGUEFHRV9JTUFHRSAmJiBtX3BEZXZpY2UtPkdldERldmljZUNhcHMoRlhEQ19ERVZJQ0VfQ0xBU1MpID09IEZYRENfUFJJTlRFUikgew0KLSAgICAgICAgcmVzID0gMDsNCi0gICAgfQ0KLSAgICBDUERGX1NjYWxlZFJlbmRlckJ1ZmZlciBidWZmZXI7DQotICAgIGlmICghYnVmZmVyLkluaXRpYWxpemUobV9wQ29udGV4dCwgbV9wRGV2aWNlLCAmcmVjdCwgcE9iaiwgJm1fT3B0aW9ucywgcmVzKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4ID0gKnBPYmoyRGV2aWNlOw0KLSAgICBtYXRyaXguQ29uY2F0KCpidWZmZXIuR2V0TWF0cml4KCkpOw0KLSAgICBHZXRTY2FsZWRNYXRyaXgobWF0cml4KTsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybVJlc291cmNlID0gTlVMTDsNCi0gICAgaWYgKHBPYmotPm1fVHlwZSA9PSBQREZQQUdFX0ZPUk0pIHsNCi0gICAgICAgIENQREZfRm9ybU9iamVjdCogcEZvcm1PYmogPSAoQ1BERl9Gb3JtT2JqZWN0KilwT2JqOw0KLSAgICAgICAgaWYgKHBGb3JtT2JqLT5tX3BGb3JtICYmIHBGb3JtT2JqLT5tX3BGb3JtLT5tX3BGb3JtRGljdCkgew0KLSAgICAgICAgICAgIHBGb3JtUmVzb3VyY2UgPSBwRm9ybU9iai0+bV9wRm9ybS0+bV9wRm9ybURpY3QtPkdldERpY3QoRlhfQlNUUkMoIlJlc291cmNlcyIpKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDUERGX1JlbmRlclN0YXR1cyBzdGF0dXM7DQotICAgIHN0YXR1cy5Jbml0aWFsaXplKG1fTGV2ZWwgKyAxLCBtX3BDb250ZXh0LCBidWZmZXIuR2V0RGV2aWNlKCksIGJ1ZmZlci5HZXRNYXRyaXgoKSwgTlVMTCwgTlVMTCwgTlVMTCwgJm1fT3B0aW9ucywgbV9UcmFuc3BhcmVuY3ksIG1fYkRyb3BPYmplY3RzLCBwRm9ybVJlc291cmNlKTsNCi0gICAgc3RhdHVzLlJlbmRlclNpbmdsZU9iamVjdChwT2JqLCAmbWF0cml4KTsNCi0gICAgYnVmZmVyLk91dHB1dFRvRGV2aWNlKCk7DQotI2VuZGlmDQotfQ0KLUZYX0JPT0wgQ1BERl9SZW5kZXJTdGF0dXM6OlByb2Nlc3NGb3JtKENQREZfRm9ybU9iamVjdCogcEZvcm1PYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKQ0KLXsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwT0MgPSBwRm9ybU9iai0+bV9wRm9ybS0+bV9wRm9ybURpY3QtPkdldERpY3QoRlhfQlNUUkMoIk9DIikpOw0KLSAgICBpZiAocE9DICYmIG1fT3B0aW9ucy5tX3BPQ0NvbnRleHQgJiYgIW1fT3B0aW9ucy5tX3BPQ0NvbnRleHQtPkNoZWNrT0NHVmlzaWJsZShwT0MpKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBDRlhfQWZmaW5lTWF0cml4IG1hdHJpeCA9IHBGb3JtT2JqLT5tX0Zvcm1NYXRyaXg7DQotICAgIG1hdHJpeC5Db25jYXQoKnBPYmoyRGV2aWNlKTsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwUmVzb3VyY2VzID0gTlVMTDsNCi0gICAgaWYgKHBGb3JtT2JqLT5tX3BGb3JtICYmIHBGb3JtT2JqLT5tX3BGb3JtLT5tX3BGb3JtRGljdCkgew0KLSAgICAgICAgcFJlc291cmNlcyA9IHBGb3JtT2JqLT5tX3BGb3JtLT5tX3BGb3JtRGljdC0+R2V0RGljdChGWF9CU1RSQygiUmVzb3VyY2VzIikpOw0KLSAgICB9DQotICAgIENQREZfUmVuZGVyU3RhdHVzIHN0YXR1czsNCi0gICAgc3RhdHVzLkluaXRpYWxpemUobV9MZXZlbCArIDEsIG1fcENvbnRleHQsIG1fcERldmljZSwgTlVMTCwgbV9wU3RvcE9iaiwNCi0gICAgICAgICAgICAgICAgICAgICAgdGhpcywgcEZvcm1PYmosICZtX09wdGlvbnMsIG1fVHJhbnNwYXJlbmN5LCBtX2JEcm9wT2JqZWN0cywgcFJlc291cmNlcywgVFJVRSk7DQotICAgIHN0YXR1cy5tX2N1ckJsZW5kID0gbV9jdXJCbGVuZDsNCi0gICAgbV9wRGV2aWNlLT5TYXZlU3RhdGUoKTsNCi0gICAgc3RhdHVzLlJlbmRlck9iamVjdExpc3QocEZvcm1PYmotPm1fcEZvcm0sICZtYXRyaXgpOw0KLSAgICBtX2JTdG9wcGVkID0gc3RhdHVzLm1fYlN0b3BwZWQ7DQotICAgIG1fcERldmljZS0+UmVzdG9yZVN0YXRlKCk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIElzQXZhaWxhYmxlTWF0cml4KGNvbnN0IENGWF9BZmZpbmVNYXRyaXgmIG1hdHJpeCkNCi17DQotICAgIGlmIChtYXRyaXguYSA9PSAwIHx8IG1hdHJpeC5kID09IDApIHsNCi0gICAgICAgIHJldHVybiBtYXRyaXguYiAhPSAwICYmIG1hdHJpeC5jICE9IDA7DQotICAgIH0NCi0gICAgaWYgKG1hdHJpeC5iID09IDAgfHwgbWF0cml4LmMgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIG1hdHJpeC5hICE9IDAgJiYgbWF0cml4LmQgIT0gMDsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDUERGX1JlbmRlclN0YXR1czo6UHJvY2Vzc1BhdGgoQ1BERl9QYXRoT2JqZWN0KiBwUGF0aE9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpDQotew0KLSAgICBpbnQgRmlsbFR5cGUgPSBwUGF0aE9iai0+bV9GaWxsVHlwZTsNCi0gICAgRlhfQk9PTCBiU3Ryb2tlID0gcFBhdGhPYmotPm1fYlN0cm9rZTsNCi0gICAgUHJvY2Vzc1BhdGhQYXR0ZXJuKHBQYXRoT2JqLCBwT2JqMkRldmljZSwgRmlsbFR5cGUsIGJTdHJva2UpOw0KLSAgICBpZiAoRmlsbFR5cGUgPT0gMCAmJiAhYlN0cm9rZSkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgRlhfRFdPUkQgZmlsbF9hcmdiID0gMDsNCi0gICAgaWYgKEZpbGxUeXBlKSB7DQotICAgICAgICBmaWxsX2FyZ2IgPSBHZXRGaWxsQXJnYihwUGF0aE9iaik7DQotICAgIH0NCi0gICAgRlhfRFdPUkQgc3Ryb2tlX2FyZ2IgPSAwOw0KLSAgICBpZiAoYlN0cm9rZSkgew0KLSAgICAgICAgc3Ryb2tlX2FyZ2IgPSBHZXRTdHJva2VBcmdiKHBQYXRoT2JqKTsNCi0gICAgfQ0KLSAgICBDRlhfQWZmaW5lTWF0cml4IHBhdGhfbWF0cml4ID0gcFBhdGhPYmotPm1fTWF0cml4Ow0KLSAgICBwYXRoX21hdHJpeC5Db25jYXQoKnBPYmoyRGV2aWNlKTsNCi0gICAgaWYgKCFJc0F2YWlsYWJsZU1hdHJpeChwYXRoX21hdHJpeCkpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIGlmIChGaWxsVHlwZSAmJiAobV9PcHRpb25zLm1fRmxhZ3MgJiBSRU5ERVJfUkVDVF9BQSkpIHsNCi0gICAgICAgIEZpbGxUeXBlIHw9IEZYRklMTF9SRUNUX0FBOw0KLSAgICB9DQotICAgIGlmIChtX09wdGlvbnMubV9GbGFncyAmIFJFTkRFUl9GSUxMX0ZVTExDT1ZFUikgew0KLSAgICAgICAgRmlsbFR5cGUgfD0gRlhGSUxMX0ZVTExDT1ZFUjsNCi0gICAgfQ0KLSAgICBpZiAobV9PcHRpb25zLm1fRmxhZ3MgJiBSRU5ERVJfTk9QQVRIU01PT1RIKSB7DQotICAgICAgICBGaWxsVHlwZSB8PSBGWEZJTExfTk9QQVRIU01PT1RIOw0KLSAgICB9DQotICAgIGlmIChiU3Ryb2tlKSB7DQotICAgICAgICBGaWxsVHlwZSB8PSBGWF9GSUxMX1NUUk9LRTsNCi0gICAgfQ0KLSNpZiAhZGVmaW5lZChfRlBERkFQSV9NSU5JXykgfHwgZGVmaW5lZChfRlhDT1JFX0ZFQVRVUkVfQUxMXykNCi0gICAgY29uc3QgQ1BERl9HZW5lcmFsU3RhdGVEYXRhKiBwR2VuZXJhbERhdGEgPSAoKENQREZfUGFnZU9iamVjdCopcFBhdGhPYmopLT5tX0dlbmVyYWxTdGF0ZTsNCi0gICAgaWYgKHBHZW5lcmFsRGF0YSAmJiBwR2VuZXJhbERhdGEtPm1fU3Ryb2tlQWRqdXN0KSB7DQotICAgICAgICBGaWxsVHlwZSB8PSBGWF9TVFJPS0VfQURKVVNUOw0KLSAgICB9DQotI2VuZGlmDQotICAgIGlmIChtX3BUeXBlM0NoYXIpIHsNCi0gICAgICAgIEZpbGxUeXBlIHw9IEZYX0ZJTExfVEVYVF9NT0RFOw0KLSAgICB9DQotICAgIENGWF9HcmFwaFN0YXRlRGF0YSBncmFwaFN0YXRlKCpwUGF0aE9iai0+bV9HcmFwaFN0YXRlKTsNCi0gICAgaWYgKG1fT3B0aW9ucy5tX0ZsYWdzICYgUkVOREVSX1RISU5MSU5FKSB7DQotICAgICAgICBncmFwaFN0YXRlLm1fTGluZVdpZHRoID0gMDsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wRGV2aWNlLT5EcmF3UGF0aChwUGF0aE9iai0+bV9QYXRoLCAmcGF0aF9tYXRyaXgsICZncmFwaFN0YXRlLCBmaWxsX2FyZ2IsIHN0cm9rZV9hcmdiLCBGaWxsVHlwZSwgMCwgTlVMTCwgbV9jdXJCbGVuZCk7DQotfQ0KLUNQREZfVHJhbnNmZXJGdW5jKiBDUERGX1JlbmRlclN0YXR1czo6R2V0VHJhbnNmZXJGdW5jKENQREZfT2JqZWN0KiBwT2JqKSBjb25zdA0KLXsNCi0gICAgQVNTRVJUKHBPYmogIT0gTlVMTCk7DQotICAgIENQREZfRG9jUmVuZGVyRGF0YSogcERvY0NhY2hlID0gbV9wQ29udGV4dC0+bV9wRG9jdW1lbnQtPkdldFJlbmRlckRhdGEoKTsNCi0gICAgaWYgKCFwRG9jQ2FjaGUpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiBwRG9jQ2FjaGUtPkdldFRyYW5zZmVyRnVuYyhwT2JqKTsNCi19DQotRlhfQVJHQiBDUERGX1JlbmRlclN0YXR1czo6R2V0RmlsbEFyZ2IoY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwT2JqLCBGWF9CT09MIGJUeXBlMykgY29uc3QNCi17DQotICAgIENQREZfQ29sb3JTdGF0ZURhdGEqIHBDb2xvckRhdGEgPSAoQ1BERl9Db2xvclN0YXRlRGF0YSopKGNvbnN0IENQREZfQ29sb3JTdGF0ZURhdGEqKXBPYmotPm1fQ29sb3JTdGF0ZTsNCi0gICAgaWYgKG1fcFR5cGUzQ2hhciAmJiAhYlR5cGUzICYmICghbV9wVHlwZTNDaGFyLT5tX2JDb2xvcmVkIHx8IChtX3BUeXBlM0NoYXItPm1fYkNvbG9yZWQgJiYgKCFwQ29sb3JEYXRhIHx8IHBDb2xvckRhdGEtPm1fRmlsbENvbG9yLklzTnVsbCgpKSkpKSB7DQotICAgICAgICByZXR1cm4gbV9UM0ZpbGxDb2xvcjsNCi0gICAgfSBlbHNlIGlmICghcENvbG9yRGF0YSB8fCBwQ29sb3JEYXRhLT5tX0ZpbGxDb2xvci5Jc051bGwoKSkgew0KLSAgICAgICAgcENvbG9yRGF0YSA9IChDUERGX0NvbG9yU3RhdGVEYXRhKikoY29uc3QgQ1BERl9Db2xvclN0YXRlRGF0YSopbV9Jbml0aWFsU3RhdGVzLm1fQ29sb3JTdGF0ZTsNCi0gICAgfQ0KLSAgICBGWF9DT0xPUlJFRiByZ2IgPSBwQ29sb3JEYXRhLT5tX0ZpbGxSR0I7DQotICAgIGlmIChyZ2IgPT0gKEZYX0RXT1JEKSAtIDEpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGNvbnN0IENQREZfR2VuZXJhbFN0YXRlRGF0YSogcEdlbmVyYWxEYXRhID0gcE9iai0+bV9HZW5lcmFsU3RhdGU7DQotICAgIGludCBhbHBoYTsNCi0gICAgaWYgKHBHZW5lcmFsRGF0YSkgew0KLSAgICAgICAgYWxwaGEgPSAoRlhfSU5UMzIpKHBHZW5lcmFsRGF0YS0+bV9GaWxsQWxwaGEgKiAyNTUpOw0KLSNpZm5kZWYgX0ZQREZBUElfTUlOSV8NCi0gICAgICAgIGlmIChwR2VuZXJhbERhdGEtPm1fcFRSKSB7DQotICAgICAgICAgICAgaWYgKCFwR2VuZXJhbERhdGEtPm1fcFRyYW5zZmVyRnVuYykgew0KLSAgICAgICAgICAgICAgICAoKENQREZfR2VuZXJhbFN0YXRlRGF0YSopcEdlbmVyYWxEYXRhKS0+bV9wVHJhbnNmZXJGdW5jID0gR2V0VHJhbnNmZXJGdW5jKHBHZW5lcmFsRGF0YS0+bV9wVFIpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAocEdlbmVyYWxEYXRhLT5tX3BUcmFuc2ZlckZ1bmMpIHsNCi0gICAgICAgICAgICAgICAgcmdiID0gcEdlbmVyYWxEYXRhLT5tX3BUcmFuc2ZlckZ1bmMtPlRyYW5zbGF0ZUNvbG9yKHJnYik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSNlbmRpZg0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgYWxwaGEgPSAyNTU7DQotICAgIH0NCi0gICAgcmV0dXJuIG1fT3B0aW9ucy5UcmFuc2xhdGVDb2xvcihBcmdiRW5jb2RlKGFscGhhLCByZ2IpKTsNCi19DQotRlhfQVJHQiBDUERGX1JlbmRlclN0YXR1czo6R2V0U3Ryb2tlQXJnYihjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmopIGNvbnN0DQotew0KLSAgICBDUERGX0NvbG9yU3RhdGVEYXRhKiBwQ29sb3JEYXRhID0gKENQREZfQ29sb3JTdGF0ZURhdGEqKShjb25zdCBDUERGX0NvbG9yU3RhdGVEYXRhKilwT2JqLT5tX0NvbG9yU3RhdGU7DQotICAgIGlmIChtX3BUeXBlM0NoYXIgJiYgKCFtX3BUeXBlM0NoYXItPm1fYkNvbG9yZWQgfHwgKG1fcFR5cGUzQ2hhci0+bV9iQ29sb3JlZCAmJiAoIXBDb2xvckRhdGEgfHwgcENvbG9yRGF0YS0+bV9TdHJva2VDb2xvci5Jc051bGwoKSkpKSkgew0KLSAgICAgICAgcmV0dXJuIG1fVDNGaWxsQ29sb3I7DQotICAgIH0gZWxzZSBpZiAoIXBDb2xvckRhdGEgfHwgcENvbG9yRGF0YS0+bV9TdHJva2VDb2xvci5Jc051bGwoKSkgew0KLSAgICAgICAgcENvbG9yRGF0YSA9IChDUERGX0NvbG9yU3RhdGVEYXRhKikoY29uc3QgQ1BERl9Db2xvclN0YXRlRGF0YSopbV9Jbml0aWFsU3RhdGVzLm1fQ29sb3JTdGF0ZTsNCi0gICAgfQ0KLSAgICBGWF9DT0xPUlJFRiByZ2IgPSBwQ29sb3JEYXRhLT5tX1N0cm9rZVJHQjsNCi0gICAgaWYgKHJnYiA9PSAoRlhfRFdPUkQpIC0gMSkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgY29uc3QgQ1BERl9HZW5lcmFsU3RhdGVEYXRhKiBwR2VuZXJhbERhdGEgPSBwT2JqLT5tX0dlbmVyYWxTdGF0ZTsNCi0gICAgaW50IGFscGhhOw0KLSAgICBpZiAocEdlbmVyYWxEYXRhKSB7DQotICAgICAgICBhbHBoYSA9IChGWF9JTlQzMikocEdlbmVyYWxEYXRhLT5tX1N0cm9rZUFscGhhICogMjU1KTsNCi0jaWZuZGVmIF9GUERGQVBJX01JTklfDQotICAgICAgICBpZiAocEdlbmVyYWxEYXRhLT5tX3BUUikgew0KLSAgICAgICAgICAgIGlmICghcEdlbmVyYWxEYXRhLT5tX3BUcmFuc2ZlckZ1bmMpIHsNCi0gICAgICAgICAgICAgICAgKChDUERGX0dlbmVyYWxTdGF0ZURhdGEqKXBHZW5lcmFsRGF0YSktPm1fcFRyYW5zZmVyRnVuYyA9IEdldFRyYW5zZmVyRnVuYyhwR2VuZXJhbERhdGEtPm1fcFRSKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKHBHZW5lcmFsRGF0YS0+bV9wVHJhbnNmZXJGdW5jKSB7DQotICAgICAgICAgICAgICAgIHJnYiA9IHBHZW5lcmFsRGF0YS0+bV9wVHJhbnNmZXJGdW5jLT5UcmFuc2xhdGVDb2xvcihyZ2IpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0jZW5kaWYNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGFscGhhID0gMjU1Ow0KLSAgICB9DQotICAgIHJldHVybiBtX09wdGlvbnMuVHJhbnNsYXRlQ29sb3IoQXJnYkVuY29kZShhbHBoYSwgcmdiKSk7DQotfQ0KLXZvaWQgQ1BERl9SZW5kZXJTdGF0dXM6OlByb2Nlc3NDbGlwUGF0aChDUERGX0NsaXBQYXRoIENsaXBQYXRoLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSkNCi17DQotICAgIGlmIChDbGlwUGF0aC5Jc051bGwoKSkgew0KLSAgICAgICAgaWYgKG1fTGFzdENsaXBQYXRoLklzTnVsbCgpKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wRGV2aWNlLT5SZXN0b3JlU3RhdGUoVFJVRSk7DQotICAgICAgICBtX0xhc3RDbGlwUGF0aC5TZXROdWxsKCk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKG1fTGFzdENsaXBQYXRoID09IENsaXBQYXRoKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbV9MYXN0Q2xpcFBhdGggPSBDbGlwUGF0aDsNCi0gICAgbV9wRGV2aWNlLT5SZXN0b3JlU3RhdGUoVFJVRSk7DQotICAgIGludCBuQ2xpcFBhdGggPSBDbGlwUGF0aC5HZXRQYXRoQ291bnQoKTsNCi0gICAgaW50IGk7DQotICAgIGZvciAoaSA9IDA7IGkgPCBuQ2xpcFBhdGg7IGkrKykgew0KLSAgICAgICAgY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEgPSBDbGlwUGF0aC5HZXRQYXRoKGkpOw0KLSAgICAgICAgaWYgKHBQYXRoRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAocFBhdGhEYXRhLT5HZXRQb2ludENvdW50KCkgPT0gMCkgew0KLSAgICAgICAgICAgIENGWF9QYXRoRGF0YSBFbXB0eVBhdGg7DQotICAgICAgICAgICAgRW1wdHlQYXRoLkFwcGVuZFJlY3QoLTEsIC0xLCAwLCAwKTsNCi0gICAgICAgICAgICBpbnQgZmlsbF9tb2RlID0gRlhGSUxMX1dJTkRJTkc7DQotICAgICAgICAgICAgbV9wRGV2aWNlLT5TZXRDbGlwX1BhdGhGaWxsKCZFbXB0eVBhdGgsIE5VTEwsIGZpbGxfbW9kZSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGludCBDbGlwVHlwZSA9IENsaXBQYXRoLkdldENsaXBUeXBlKGkpOw0KLSAgICAgICAgICAgIG1fcERldmljZS0+U2V0Q2xpcF9QYXRoRmlsbChwUGF0aERhdGEsIHBPYmoyRGV2aWNlLCBDbGlwVHlwZSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaW50IHRleHRjb3VudCA9IENsaXBQYXRoLkdldFRleHRDb3VudCgpOw0KLSAgICBpZiAodGV4dGNvdW50ID09IDApIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAobV9wRGV2aWNlLT5HZXREZXZpY2VDbGFzcygpID09IEZYRENfRElTUExBWSAmJiAhKG1fcERldmljZS0+R2V0RGV2aWNlQ2FwcyhGWERDX1JFTkRFUl9DQVBTKSAmIEZYUkNfU09GVF9DTElQKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENGWF9QYXRoRGF0YSogcFRleHRDbGlwcGluZ1BhdGggPSBOVUxMOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgdGV4dGNvdW50OyBpICsrKSB7DQotICAgICAgICBDUERGX1RleHRPYmplY3QqIHBUZXh0ID0gQ2xpcFBhdGguR2V0VGV4dChpKTsNCi0gICAgICAgIGlmIChwVGV4dCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgaWYgKHBUZXh0Q2xpcHBpbmdQYXRoKSB7DQotICAgICAgICAgICAgICAgIGludCBmaWxsX21vZGUgPSBGWEZJTExfV0lORElORzsNCi0gICAgICAgICAgICAgICAgaWYgKG1fT3B0aW9ucy5tX0ZsYWdzICYgUkVOREVSX05PVEVYVFNNT09USCkgew0KLSAgICAgICAgICAgICAgICAgICAgZmlsbF9tb2RlIHw9IEZYRklMTF9OT1BBVEhTTU9PVEg7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbV9wRGV2aWNlLT5TZXRDbGlwX1BhdGhGaWxsKHBUZXh0Q2xpcHBpbmdQYXRoLCBOVUxMLCBmaWxsX21vZGUpOw0KLSAgICAgICAgICAgICAgICBkZWxldGUgcFRleHRDbGlwcGluZ1BhdGg7DQotICAgICAgICAgICAgICAgIHBUZXh0Q2xpcHBpbmdQYXRoID0gTlVMTDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlmIChwVGV4dENsaXBwaW5nUGF0aCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIHBUZXh0Q2xpcHBpbmdQYXRoID0gRlhfTkVXIENGWF9QYXRoRGF0YTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgUHJvY2Vzc1RleHQocFRleHQsIHBPYmoyRGV2aWNlLCBwVGV4dENsaXBwaW5nUGF0aCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKHBUZXh0Q2xpcHBpbmdQYXRoKSB7DQotICAgICAgICBkZWxldGUgcFRleHRDbGlwcGluZ1BhdGg7DQotICAgIH0NCi19DQotdm9pZCBDUERGX1JlbmRlclN0YXR1czo6RHJhd0NsaXBQYXRoKENQREZfQ2xpcFBhdGggQ2xpcFBhdGgsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKQ0KLXsNCi0gICAgaWYgKENsaXBQYXRoLklzTnVsbCgpKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaW50IGZpbGxfbW9kZSA9IDA7DQotICAgIGlmIChtX09wdGlvbnMubV9GbGFncyAmIFJFTkRFUl9OT1BBVEhTTU9PVEgpIHsNCi0gICAgICAgIGZpbGxfbW9kZSB8PSBGWEZJTExfTk9QQVRIU01PT1RIOw0KLSAgICB9DQotICAgIGludCBuQ2xpcFBhdGggPSBDbGlwUGF0aC5HZXRQYXRoQ291bnQoKTsNCi0gICAgaW50IGk7DQotICAgIGZvciAoaSA9IDA7IGkgPCBuQ2xpcFBhdGg7IGkrKykgew0KLSAgICAgICAgY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEgPSBDbGlwUGF0aC5HZXRQYXRoKGkpOw0KLSAgICAgICAgaWYgKHBQYXRoRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBDRlhfR3JhcGhTdGF0ZURhdGEgc3Ryb2tlX3N0YXRlOw0KLSAgICAgICAgaWYgKG1fT3B0aW9ucy5tX0ZsYWdzICYgUkVOREVSX1RISU5MSU5FKSB7DQotICAgICAgICAgICAgc3Ryb2tlX3N0YXRlLm1fTGluZVdpZHRoID0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fcERldmljZS0+RHJhd1BhdGgocFBhdGhEYXRhLCBwT2JqMkRldmljZSwgJnN0cm9rZV9zdGF0ZSwgMCwgMHhmZmZmMDAwMCwgZmlsbF9tb2RlKTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENQREZfUmVuZGVyU3RhdHVzOjpTZWxlY3RDbGlwUGF0aChDUERGX1BhdGhPYmplY3QqIHBQYXRoT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSwgRlhfQk9PTCBiU3Ryb2tlKQ0KLXsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBwYXRoX21hdHJpeCA9IHBQYXRoT2JqLT5tX01hdHJpeDsNCi0gICAgcGF0aF9tYXRyaXguQ29uY2F0KCpwT2JqMkRldmljZSk7DQotICAgIGlmIChiU3Ryb2tlKSB7DQotICAgICAgICBDRlhfR3JhcGhTdGF0ZURhdGEgZ3JhcGhTdGF0ZSgqcFBhdGhPYmotPm1fR3JhcGhTdGF0ZSk7DQotICAgICAgICBpZiAobV9PcHRpb25zLm1fRmxhZ3MgJiBSRU5ERVJfVEhJTkxJTkUpIHsNCi0gICAgICAgICAgICBncmFwaFN0YXRlLm1fTGluZVdpZHRoID0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBtX3BEZXZpY2UtPlNldENsaXBfUGF0aFN0cm9rZShwUGF0aE9iai0+bV9QYXRoLCAmcGF0aF9tYXRyaXgsICZncmFwaFN0YXRlKTsNCi0gICAgfQ0KLSAgICBpbnQgZmlsbF9tb2RlID0gcFBhdGhPYmotPm1fRmlsbFR5cGU7DQotICAgIGlmIChtX09wdGlvbnMubV9GbGFncyAmIFJFTkRFUl9OT1BBVEhTTU9PVEgpIHsNCi0gICAgICAgIGZpbGxfbW9kZSB8PSBGWEZJTExfTk9QQVRIU01PT1RIOw0KLSAgICB9DQotICAgIHJldHVybiBtX3BEZXZpY2UtPlNldENsaXBfUGF0aEZpbGwocFBhdGhPYmotPm1fUGF0aCwgJnBhdGhfbWF0cml4LCBmaWxsX21vZGUpOw0KLX0NCi1GWF9CT09MIENQREZfUmVuZGVyU3RhdHVzOjpQcm9jZXNzVHJhbnNwYXJlbmN5KGNvbnN0IENQREZfUGFnZU9iamVjdCogcFBhZ2VPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKQ0KLXsNCi0gICAgY29uc3QgQ1BERl9HZW5lcmFsU3RhdGVEYXRhKiBwR2VuZXJhbFN0YXRlID0gcFBhZ2VPYmotPm1fR2VuZXJhbFN0YXRlOw0KLSAgICBpbnQgYmxlbmRfdHlwZSA9IHBHZW5lcmFsU3RhdGUgPyBwR2VuZXJhbFN0YXRlLT5tX0JsZW5kVHlwZSA6IEZYRElCX0JMRU5EX05PUk1BTDsNCi0gICAgaWYgKGJsZW5kX3R5cGUgPT0gRlhESUJfQkxFTkRfVU5TVVBQT1JURUQpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcFNNYXNrRGljdCA9IHBHZW5lcmFsU3RhdGUgPyAoQ1BERl9EaWN0aW9uYXJ5KilwR2VuZXJhbFN0YXRlLT5tX3BTb2Z0TWFzayA6IE5VTEw7DQotICAgIGlmIChwU01hc2tEaWN0KSB7DQotICAgICAgICBpZiAocFBhZ2VPYmotPm1fVHlwZSA9PSBQREZQQUdFX0lNQUdFICYmDQotICAgICAgICAgICAgICAgICgoQ1BERl9JbWFnZU9iamVjdCopcFBhZ2VPYmopLT5tX3BJbWFnZS0+R2V0RGljdCgpLT5LZXlFeGlzdChGWF9CU1RSQygiU01hc2siKSkpIHsNCi0gICAgICAgICAgICBwU01hc2tEaWN0ID0gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBGb3JtUmVzb3VyY2UgPSBOVUxMOw0KLSAgICBGWF9GTE9BVCBncm91cF9hbHBoYSA9IDEuMGY7DQotICAgIGludCBUcmFuc3BhcmVuY3kgPSBtX1RyYW5zcGFyZW5jeTsNCi0gICAgRlhfQk9PTCBiR3JvdXBUcmFuc3BhcmVudCA9IEZBTFNFOw0KLSAgICBpZiAocFBhZ2VPYmotPm1fVHlwZSA9PSBQREZQQUdFX0ZPUk0pIHsNCi0gICAgICAgIENQREZfRm9ybU9iamVjdCogcEZvcm1PYmogPSAoQ1BERl9Gb3JtT2JqZWN0KilwUGFnZU9iajsNCi0gICAgICAgIGNvbnN0IENQREZfR2VuZXJhbFN0YXRlRGF0YSAqcFN0YXRlRGF0YSA9IHBGb3JtT2JqLT5tX0dlbmVyYWxTdGF0ZS5HZXRPYmplY3QoKTsNCi0gICAgICAgIGlmIChwU3RhdGVEYXRhKSB7DQotICAgICAgICAgICAgZ3JvdXBfYWxwaGEgPSBwU3RhdGVEYXRhLT5tX0ZpbGxBbHBoYTsNCi0gICAgICAgIH0NCi0gICAgICAgIFRyYW5zcGFyZW5jeSA9IHBGb3JtT2JqLT5tX3BGb3JtLT5tX1RyYW5zcGFyZW5jeTsNCi0gICAgICAgIGJHcm91cFRyYW5zcGFyZW50ID0gVHJhbnNwYXJlbmN5ICYgUERGVFJBTlNfSVNPTEFURUQgPyBUUlVFIDogRkFMU0U7DQotICAgICAgICBpZiAocEZvcm1PYmotPm1fcEZvcm0tPm1fcEZvcm1EaWN0KSB7DQotICAgICAgICAgICAgcEZvcm1SZXNvdXJjZSA9IHBGb3JtT2JqLT5tX3BGb3JtLT5tX3BGb3JtRGljdC0+R2V0RGljdCgiUmVzb3VyY2VzIik7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhfQk9PTCBiVGV4dENsaXAgPSBGQUxTRTsNCi0gICAgaWYgKHBQYWdlT2JqLT5tX0NsaXBQYXRoLk5vdE51bGwoKSAmJiBwUGFnZU9iai0+bV9DbGlwUGF0aC5HZXRUZXh0Q291bnQoKSAmJg0KLSAgICAgICAgICAgIG1fcERldmljZS0+R2V0RGV2aWNlQ2xhc3MoKSA9PSBGWERDX0RJU1BMQVkgJiYgIShtX3BEZXZpY2UtPkdldERldmljZUNhcHMoRlhEQ19SRU5ERVJfQ0FQUykgJiBGWFJDX1NPRlRfQ0xJUCkpIHsNCi0gICAgICAgIGJUZXh0Q2xpcCA9IFRSVUU7DQotICAgIH0NCi0gICAgaWYgKChtX09wdGlvbnMubV9GbGFncyAmIFJFTkRFUl9PVkVSUFJJTlQpICYmIHBQYWdlT2JqLT5tX1R5cGUgPT0gUERGUEFHRV9JTUFHRSAmJiBwR2VuZXJhbFN0YXRlICYmIHBHZW5lcmFsU3RhdGUtPm1fRmlsbE9QICYmIHBHZW5lcmFsU3RhdGUtPm1fU3Ryb2tlT1ApIHsNCi0gICAgICAgIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCA9IE5VTEw7DQotICAgICAgICBDUERGX1BhZ2UqIHBQYWdlID0gTlVMTDsNCi0gICAgICAgIGlmIChtX3BDb250ZXh0LT5tX3BQYWdlQ2FjaGUpIHsNCi0gICAgICAgICAgICBwUGFnZSA9IG1fcENvbnRleHQtPm1fcFBhZ2VDYWNoZS0+R2V0UGFnZSgpOw0KLSAgICAgICAgICAgIHBEb2N1bWVudCA9IHBQYWdlLT5tX3BEb2N1bWVudDsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcERvY3VtZW50ID0gKChDUERGX0ltYWdlT2JqZWN0KilwUGFnZU9iaiktPm1fcEltYWdlLT5HZXREb2N1bWVudCgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZVJlc291cmNlcyA9IHBQYWdlID8gcFBhZ2UtPm1fcFBhZ2VSZXNvdXJjZXMgOiBOVUxMOw0KLSAgICAgICAgQ1BERl9PYmplY3QqIHBDU09iaiA9ICgoQ1BERl9JbWFnZU9iamVjdCopcFBhZ2VPYmopLT5tX3BJbWFnZS0+R2V0U3RyZWFtKCktPkdldERpY3QoKS0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJDb2xvclNwYWNlIikpOw0KLSAgICAgICAgQ1BERl9Db2xvclNwYWNlKiBwQ29sb3JTcGFjZSA9IHBEb2N1bWVudC0+TG9hZENvbG9yU3BhY2UocENTT2JqLCBwUGFnZVJlc291cmNlcyk7DQotICAgICAgICBpZiAocENvbG9yU3BhY2UpIHsNCi0gICAgICAgICAgICBpbnQgZm9ybWF0ID0gcENvbG9yU3BhY2UtPkdldEZhbWlseSgpOw0KLSAgICAgICAgICAgIGlmIChmb3JtYXQgPT0gUERGQ1NfREVWSUNFQ01ZSyB8fCBmb3JtYXQgPT0gUERGQ1NfU0VQQVJBVElPTiB8fCBmb3JtYXQgPT0gUERGQ1NfREVWSUNFTikgew0KLSAgICAgICAgICAgICAgICBibGVuZF90eXBlID0gRlhESUJfQkxFTkRfREFSS0VOOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwRG9jdW1lbnQtPkdldFBhZ2VEYXRhKCktPlJlbGVhc2VDb2xvclNwYWNlKHBDU09iaik7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKHBTTWFza0RpY3QgPT0gTlVMTCAmJiBncm91cF9hbHBoYSA9PSAxLjBmICYmIGJsZW5kX3R5cGUgPT0gRlhESUJfQkxFTkRfTk9STUFMICYmICFiVGV4dENsaXAgJiYgIWJHcm91cFRyYW5zcGFyZW50KSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgRlhfQk9PTCBpc29sYXRlZCA9IFRyYW5zcGFyZW5jeSAmIFBERlRSQU5TX0lTT0xBVEVEOw0KLSAgICBpZiAobV9iUHJpbnQpIHsNCi0gICAgICAgIEZYX0JPT0wgYlJldCA9IEZBTFNFOw0KLSAgICAgICAgaW50IHJlbmRDYXBzID0gbV9wRGV2aWNlLT5HZXRSZW5kZXJDYXBzKCk7DQotICAgICAgICBpZiAoISgoVHJhbnNwYXJlbmN5ICYgUERGVFJBTlNfSVNPTEFURUQpIHx8IHBTTWFza0RpY3QgfHwgYlRleHRDbGlwKSAmJiAocmVuZENhcHMgJiBGWFJDX0JMRU5EX01PREUpKSB7DQotICAgICAgICAgICAgaW50IG9sZEJsZW5kID0gbV9jdXJCbGVuZDsNCi0gICAgICAgICAgICBtX2N1ckJsZW5kID0gYmxlbmRfdHlwZTsNCi0gICAgICAgICAgICBiUmV0ID0gRHJhd09ialdpdGhCbGVuZChwUGFnZU9iaiwgcE9iajJEZXZpY2UpOw0KLSAgICAgICAgICAgIG1fY3VyQmxlbmQgPSBvbGRCbGVuZDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICghYlJldCkgew0KLSAgICAgICAgICAgIERyYXdPYmpXaXRoQmFja2dyb3VuZChwUGFnZU9iaiwgcE9iajJEZXZpY2UpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgRlhfUkVDVCByZWN0ID0gcFBhZ2VPYmotPkdldEJCb3gocE9iajJEZXZpY2UpOw0KLSAgICByZWN0LkludGVyc2VjdChtX3BEZXZpY2UtPkdldENsaXBCb3goKSk7DQotICAgIGlmIChyZWN0LklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgQ0ZYX01hdHJpeCBkZXZpY2VDVE0gPSBtX3BEZXZpY2UtPkdldENUTSgpOw0KLSAgICBGWF9GTE9BVCBzY2FsZVggPSBGWFNZU19mYWJzKGRldmljZUNUTS5hKTsNCi0gICAgRlhfRkxPQVQgc2NhbGVZID0gRlhTWVNfZmFicyhkZXZpY2VDVE0uZCk7DQotICAgIGludCB3aWR0aCA9IEZYU1lTX3JvdW5kKChGWF9GTE9BVClyZWN0LldpZHRoKCkgKiBzY2FsZVgpOw0KLSAgICBpbnQgaGVpZ2h0ID0gRlhTWVNfcm91bmQoKEZYX0ZMT0FUKXJlY3QuSGVpZ2h0KCkgKiBzY2FsZVkpOw0KLSAgICBDRlhfRnhnZURldmljZSBiaXRtYXBfZGV2aWNlOw0KLSAgICBDRlhfRElCaXRtYXAqIG9yaURldmljZSA9IE5VTEw7DQotICAgIGlmICghaXNvbGF0ZWQgJiYgKG1fcERldmljZS0+R2V0UmVuZGVyQ2FwcygpICYgRlhSQ19HRVRfQklUUykpIHsNCi0gICAgICAgIG9yaURldmljZSA9IEZYX05FVyBDRlhfRElCaXRtYXA7DQotICAgICAgICBpZiAoIW1fcERldmljZS0+Q3JlYXRlQ29tcGF0aWJsZUJpdG1hcChvcmlEZXZpY2UsIHdpZHRoLCBoZWlnaHQpKSB7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgICAgICBtX3BEZXZpY2UtPkdldERJQml0cyhvcmlEZXZpY2UsIHJlY3QubGVmdCwgcmVjdC50b3ApOw0KLSAgICB9DQotICAgIGlmICghYml0bWFwX2RldmljZS5DcmVhdGUod2lkdGgsIGhlaWdodCwgRlhESUJfQXJnYiwgMCwgb3JpRGV2aWNlKSkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgQ0ZYX0RJQml0bWFwKiBiaXRtYXAgPSBiaXRtYXBfZGV2aWNlLkdldEJpdG1hcCgpOw0KLSAgICBiaXRtYXAtPkNsZWFyKDApOw0KLSAgICBDRlhfQWZmaW5lTWF0cml4IG5ld19tYXRyaXggPSAqcE9iajJEZXZpY2U7DQotICAgIG5ld19tYXRyaXguVHJhbnNsYXRlSSgtcmVjdC5sZWZ0LCAtcmVjdC50b3ApOw0KLSAgICBuZXdfbWF0cml4LlNjYWxlKHNjYWxlWCwgc2NhbGVZKTsNCi0gICAgQ0ZYX0RJQml0bWFwKiBwVGV4dE1hc2sgPSBOVUxMOw0KLSAgICBpZiAoYlRleHRDbGlwKSB7DQotICAgICAgICBwVGV4dE1hc2sgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOw0KLSAgICAgICAgaWYgKCFwVGV4dE1hc2stPkNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCBGWERJQl84YnBwTWFzaykpIHsNCi0gICAgICAgICAgICBkZWxldGUgcFRleHRNYXNrOw0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcFRleHRNYXNrLT5DbGVhcigwKTsNCi0gICAgICAgIENGWF9GeGdlRGV2aWNlIHRleHRfZGV2aWNlOw0KLSAgICAgICAgdGV4dF9kZXZpY2UuQXR0YWNoKHBUZXh0TWFzayk7DQotICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcFBhZ2VPYmotPm1fQ2xpcFBhdGguR2V0VGV4dENvdW50KCk7IGkgKyspIHsNCi0gICAgICAgICAgICBDUERGX1RleHRPYmplY3QqIHRleHRvYmogPSBwUGFnZU9iai0+bV9DbGlwUGF0aC5HZXRUZXh0KGkpOw0KLSAgICAgICAgICAgIGlmICh0ZXh0b2JqID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIENGWF9BZmZpbmVNYXRyaXggdGV4dF9tYXRyaXg7DQotICAgICAgICAgICAgdGV4dG9iai0+R2V0VGV4dE1hdHJpeCgmdGV4dF9tYXRyaXgpOw0KLSAgICAgICAgICAgIENQREZfVGV4dFJlbmRlcmVyOjpEcmF3VGV4dFBhdGgoJnRleHRfZGV2aWNlLCB0ZXh0b2JqLT5tX25DaGFycywgdGV4dG9iai0+bV9wQ2hhckNvZGVzLCB0ZXh0b2JqLT5tX3BDaGFyUG9zLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dG9iai0+bV9UZXh0U3RhdGUuR2V0Rm9udCgpLCB0ZXh0b2JqLT5tX1RleHRTdGF0ZS5HZXRGb250U2l6ZSgpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRleHRfbWF0cml4LCAmbmV3X21hdHJpeCwgdGV4dG9iai0+bV9HcmFwaFN0YXRlLCAoRlhfQVJHQikgLSAxLCAwLCBOVUxMKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDUERGX1JlbmRlclN0YXR1cyBiaXRtYXBfcmVuZGVyOw0KLSAgICBiaXRtYXBfcmVuZGVyLkluaXRpYWxpemUobV9MZXZlbCArIDEsIG1fcENvbnRleHQsICZiaXRtYXBfZGV2aWNlLCBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wU3RvcE9iaiwgTlVMTCwgTlVMTCwgJm1fT3B0aW9ucywgMCwgbV9iRHJvcE9iamVjdHMsIHBGb3JtUmVzb3VyY2UsIFRSVUUpOw0KLSAgICBiaXRtYXBfcmVuZGVyLlByb2Nlc3NPYmplY3ROb0NsaXAocFBhZ2VPYmosICZuZXdfbWF0cml4KTsNCi0gICAgbV9iU3RvcHBlZCA9IGJpdG1hcF9yZW5kZXIubV9iU3RvcHBlZDsNCi0gICAgaWYgKHBTTWFza0RpY3QpIHsNCi0gICAgICAgIENGWF9BZmZpbmVNYXRyaXggc21hc2tfbWF0cml4Ow0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIoJnNtYXNrX21hdHJpeCwgcEdlbmVyYWxTdGF0ZS0+bV9TTWFza01hdHJpeCwgc2l6ZW9mIHNtYXNrX21hdHJpeCk7DQotICAgICAgICBzbWFza19tYXRyaXguQ29uY2F0KCpwT2JqMkRldmljZSk7DQotICAgICAgICBDRlhfRElCU291cmNlKiBwU01hc2tTb3VyY2UgPSBMb2FkU01hc2socFNNYXNrRGljdCwgJnJlY3QsICZzbWFza19tYXRyaXgpOw0KLSAgICAgICAgaWYgKHBTTWFza1NvdXJjZSkgew0KLSAgICAgICAgICAgIGJpdG1hcC0+TXVsdGlwbHlBbHBoYShwU01hc2tTb3VyY2UpOw0KLSAgICAgICAgICAgIGRlbGV0ZSBwU01hc2tTb3VyY2U7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKHBUZXh0TWFzaykgew0KLSAgICAgICAgYml0bWFwLT5NdWx0aXBseUFscGhhKHBUZXh0TWFzayk7DQotICAgICAgICBkZWxldGUgcFRleHRNYXNrOw0KLSAgICAgICAgcFRleHRNYXNrID0gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAoVHJhbnNwYXJlbmN5ICYgUERGVFJBTlNfR1JPVVAgJiYgZ3JvdXBfYWxwaGEgIT0gMS4wZikgew0KLSAgICAgICAgYml0bWFwLT5NdWx0aXBseUFscGhhKChGWF9JTlQzMikoZ3JvdXBfYWxwaGEgKiAyNTUpKTsNCi0gICAgfQ0KLSAgICBUcmFuc3BhcmVuY3kgPSBtX1RyYW5zcGFyZW5jeTsNCi0gICAgaWYgKHBQYWdlT2JqLT5tX1R5cGUgPT0gUERGUEFHRV9GT1JNKSB7DQotICAgICAgICBUcmFuc3BhcmVuY3kgfD0gUERGVFJBTlNfR1JPVVA7DQotICAgIH0NCi0gICAgQ29tcG9zaXRlRElCaXRtYXAoYml0bWFwLCByZWN0LmxlZnQsIHJlY3QudG9wLCAwLCAyNTUsIGJsZW5kX3R5cGUsIFRyYW5zcGFyZW5jeSk7DQotICAgIGlmIChvcmlEZXZpY2UpIHsNCi0gICAgICAgIGRlbGV0ZSBvcmlEZXZpY2U7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUNGWF9ESUJpdG1hcCogQ1BERl9SZW5kZXJTdGF0dXM6OkdldEJhY2tkcm9wKGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaiwgY29uc3QgRlhfUkVDVCYgcmVjdCwgaW50JiBsZWZ0LCBpbnQmIHRvcCwNCi0gICAgICAgIEZYX0JPT0wgYkJhY2tBbHBoYVJlcXVpcmVkKQ0KLXsNCi0gICAgRlhfUkVDVCBiYm94ID0gcmVjdDsNCi0gICAgYmJveC5JbnRlcnNlY3QobV9wRGV2aWNlLT5HZXRDbGlwQm94KCkpOw0KLSAgICBsZWZ0ID0gYmJveC5sZWZ0Ow0KLSAgICB0b3AgPSBiYm94LnRvcDsNCi0gICAgQ0ZYX01hdHJpeCBkZXZpY2VDVE0gPSBtX3BEZXZpY2UtPkdldENUTSgpOw0KLSAgICBGWF9GTE9BVCBzY2FsZVggPSBGWFNZU19mYWJzKGRldmljZUNUTS5hKTsNCi0gICAgRlhfRkxPQVQgc2NhbGVZID0gRlhTWVNfZmFicyhkZXZpY2VDVE0uZCk7DQotICAgIGludCB3aWR0aCA9IEZYU1lTX3JvdW5kKGJib3guV2lkdGgoKSAqIHNjYWxlWCk7DQotICAgIGludCBoZWlnaHQgPSBGWFNZU19yb3VuZChiYm94LkhlaWdodCgpICogc2NhbGVZKTsNCi0gICAgQ0ZYX0RJQml0bWFwKiBwQmFja2Ryb3AgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOw0KLSAgICBpZiAoYkJhY2tBbHBoYVJlcXVpcmVkICYmICFtX2JEcm9wT2JqZWN0cykgew0KLSAgICAgICAgcEJhY2tkcm9wLT5DcmVhdGUod2lkdGgsIGhlaWdodCwgRlhESUJfQXJnYik7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX3BEZXZpY2UtPkNyZWF0ZUNvbXBhdGlibGVCaXRtYXAocEJhY2tkcm9wLCB3aWR0aCwgaGVpZ2h0KTsNCi0gICAgfQ0KLSAgICBpZiAocEJhY2tkcm9wLT5HZXRCdWZmZXIoKSA9PSBOVUxMKSB7DQotICAgICAgICBkZWxldGUgcEJhY2tkcm9wOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgRlhfQk9PTCBiTmVlZERyYXc7DQotICAgIGlmIChwQmFja2Ryb3AtPkhhc0FscGhhKCkpIHsNCi0gICAgICAgIGJOZWVkRHJhdyA9ICEobV9wRGV2aWNlLT5HZXRSZW5kZXJDYXBzKCkgJiBGWFJDX0FMUEhBX09VVFBVVCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBiTmVlZERyYXcgPSAhKG1fcERldmljZS0+R2V0UmVuZGVyQ2FwcygpICYgRlhSQ19HRVRfQklUUyk7DQotICAgIH0NCi0gICAgaWYgKCFiTmVlZERyYXcpIHsNCi0gICAgICAgIG1fcERldmljZS0+R2V0RElCaXRzKHBCYWNrZHJvcCwgbGVmdCwgdG9wKTsNCi0gICAgICAgIHJldHVybiBwQmFja2Ryb3A7DQotICAgIH0NCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBGaW5hbE1hdHJpeCA9IG1fRGV2aWNlTWF0cml4Ow0KLSAgICBGaW5hbE1hdHJpeC5UcmFuc2xhdGVJKC1sZWZ0LCAtdG9wKTsNCi0gICAgRmluYWxNYXRyaXguU2NhbGUoc2NhbGVYLCBzY2FsZVkpOw0KLSAgICBwQmFja2Ryb3AtPkNsZWFyKHBCYWNrZHJvcC0+SGFzQWxwaGEoKSA/IDAgOiAweGZmZmZmZmZmKTsNCi0gICAgQ0ZYX0Z4Z2VEZXZpY2UgZGV2aWNlOw0KLSAgICBkZXZpY2UuQXR0YWNoKHBCYWNrZHJvcCk7DQotICAgIG1fcENvbnRleHQtPlJlbmRlcigmZGV2aWNlLCBwT2JqLCAmbV9PcHRpb25zLCAmRmluYWxNYXRyaXgpOw0KLSAgICByZXR1cm4gcEJhY2tkcm9wOw0KLX0NCi12b2lkIENQREZfUmVuZGVyQ29udGV4dDo6R2V0QmFja2dyb3VuZChDRlhfRElCaXRtYXAqIHBCdWZmZXIsIGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zLCBDRlhfQWZmaW5lTWF0cml4KiBwRmluYWxNYXRyaXgpDQotew0KLSAgICBDRlhfRnhnZURldmljZSBkZXZpY2U7DQotICAgIGRldmljZS5BdHRhY2gocEJ1ZmZlcik7DQotICAgIGlmIChtX3BCYWNrZ3JvdW5kRHJhdykgew0KLSAgICAgICAgbV9wQmFja2dyb3VuZERyYXctPk9uRHJhd0JhY2tncm91bmQoJmRldmljZSwgcEZpbmFsTWF0cml4KTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEZYX1JFQ1QgcmVjdCgwLCAwLCBkZXZpY2UuR2V0V2lkdGgoKSwgZGV2aWNlLkdldEhlaWdodCgpKTsNCi0gICAgICAgIGRldmljZS5GaWxsUmVjdCgmcmVjdCwgMHhmZmZmZmZmZik7DQotICAgIH0NCi0gICAgUmVuZGVyKCZkZXZpY2UsIHBPYmosIHBPcHRpb25zLCBwRmluYWxNYXRyaXgpOw0KLX0NCi1DUERGX0dyYXBoaWNTdGF0ZXMqIENQREZfUmVuZGVyU3RhdHVzOjpDbG9uZU9ialN0YXRlcyhjb25zdCBDUERGX0dyYXBoaWNTdGF0ZXMqIHBTcmNTdGF0ZXMsIEZYX0JPT0wgYlN0cm9rZSkNCi17DQotICAgIGlmICghcFNyY1N0YXRlcykgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9HcmFwaGljU3RhdGVzKiBwU3RhdGVzID0gRlhfTkVXIENQREZfR3JhcGhpY1N0YXRlczsNCi0gICAgaWYgKCFwU3RhdGVzKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBwU3RhdGVzLT5Db3B5U3RhdGVzKCpwU3JjU3RhdGVzKTsNCi0gICAgQ1BERl9Db2xvciogcE9iakNvbG9yID0gYlN0cm9rZSA/IHBTcmNTdGF0ZXMtPm1fQ29sb3JTdGF0ZS5HZXRTdHJva2VDb2xvcigpIDoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcFNyY1N0YXRlcy0+bV9Db2xvclN0YXRlLkdldEZpbGxDb2xvcigpOw0KLSAgICBpZiAoIXBPYmpDb2xvci0+SXNOdWxsKCkpIHsNCi0gICAgICAgIENQREZfQ29sb3JTdGF0ZURhdGEqIHBDb2xvckRhdGEgPSBwU3RhdGVzLT5tX0NvbG9yU3RhdGUuR2V0TW9kaWZ5KCk7DQotICAgICAgICBwQ29sb3JEYXRhLT5tX0ZpbGxSR0IgPSBiU3Ryb2tlID8gcFNyY1N0YXRlcy0+bV9Db2xvclN0YXRlLkdldE9iamVjdCgpLT5tX1N0cm9rZVJHQiA6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU3JjU3RhdGVzLT5tX0NvbG9yU3RhdGUuR2V0T2JqZWN0KCktPm1fRmlsbFJHQjsNCi0gICAgICAgIHBDb2xvckRhdGEtPm1fU3Ryb2tlUkdCID0gcENvbG9yRGF0YS0+bV9GaWxsUkdCOw0KLSAgICB9DQotICAgIHJldHVybiBwU3RhdGVzOw0KLX0NCi1DUERGX1JlbmRlckNvbnRleHQ6OkNQREZfUmVuZGVyQ29udGV4dCgpDQotew0KLX0NCi12b2lkIENQREZfUmVuZGVyQ29udGV4dDo6Q3JlYXRlKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfUGFnZVJlbmRlckNhY2hlKiBwUGFnZUNhY2hlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZVJlc291cmNlcywgRlhfQk9PTCBiRmlyc3RMYXllcikNCi17DQotICAgIG1fcEJhY2tncm91bmREcmF3ID0gTlVMTDsNCi0gICAgbV9wRG9jdW1lbnQgPSBwRG9jOw0KLSAgICBtX3BQYWdlUmVzb3VyY2VzID0gcFBhZ2VSZXNvdXJjZXM7DQotICAgIG1fcFBhZ2VDYWNoZSA9IHBQYWdlQ2FjaGU7DQotICAgIG1fYkZpcnN0TGF5ZXIgPSBiRmlyc3RMYXllcjsNCi19DQotdm9pZCBDUERGX1JlbmRlckNvbnRleHQ6OkNyZWF0ZShDUERGX1BhZ2UqIHBQYWdlLCBGWF9CT09MIGJGaXJzdExheWVyKQ0KLXsNCi0gICAgbV9wQmFja2dyb3VuZERyYXcgPSBOVUxMOw0KLSAgICBtX3BEb2N1bWVudCA9IHBQYWdlLT5tX3BEb2N1bWVudDsNCi0gICAgbV9wUGFnZVJlc291cmNlcyA9IHBQYWdlLT5tX3BQYWdlUmVzb3VyY2VzOw0KLSAgICBtX3BQYWdlQ2FjaGUgPSBwUGFnZS0+R2V0UmVuZGVyQ2FjaGUoKTsNCi0gICAgbV9iRmlyc3RMYXllciA9IGJGaXJzdExheWVyOw0KLX0NCi1DUERGX1JlbmRlckNvbnRleHQ6On5DUERGX1JlbmRlckNvbnRleHQoKQ0KLXsNCi19DQotdm9pZCBDUERGX1JlbmRlckNvbnRleHQ6OkNsZWFyKCkNCi17DQotICAgIG1fcERvY3VtZW50ID0gTlVMTDsNCi0gICAgbV9wUGFnZVJlc291cmNlcyA9IE5VTEw7DQotICAgIG1fcFBhZ2VDYWNoZSA9IE5VTEw7DQotICAgIG1fcEJhY2tncm91bmREcmF3ID0gTlVMTDsNCi0gICAgbV9iRmlyc3RMYXllciA9IFRSVUU7DQotICAgIG1fQ29udGVudExpc3QuUmVtb3ZlQWxsKCk7DQotfQ0KLXZvaWQgQ1BERl9SZW5kZXJDb250ZXh0OjpBcHBlbmRPYmplY3RMaXN0KENQREZfUGFnZU9iamVjdHMqIHBPYmpzLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkRldmljZSkNCi17DQotICAgIF9QREZfUmVuZGVySXRlbSogcEl0ZW0gPSBtX0NvbnRlbnRMaXN0LkFkZFNwYWNlKCk7DQotICAgIHBJdGVtLT5tX3BPYmplY3RMaXN0ID0gcE9ianM7DQotICAgIGlmIChwT2JqZWN0MkRldmljZSkgew0KLSAgICAgICAgcEl0ZW0tPm1fTWF0cml4ID0gKnBPYmplY3QyRGV2aWNlOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcEl0ZW0tPm1fTWF0cml4LlNldElkZW50aXR5KCk7DQotICAgIH0NCi19DQotdm9pZCBDUERGX1JlbmRlckNvbnRleHQ6OlJlbmRlcihDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcExhc3RNYXRyaXgpDQotew0KLSAgICBSZW5kZXIocERldmljZSwgTlVMTCwgcE9wdGlvbnMsIHBMYXN0TWF0cml4KTsNCi19DQotdm9pZCBDUERGX1JlbmRlckNvbnRleHQ6OlJlbmRlcihDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBTdG9wT2JqLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucywgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcExhc3RNYXRyaXgpDQotew0KLSAgICBpbnQgY291bnQgPSBtX0NvbnRlbnRMaXN0LkdldFNpemUoKTsNCi0gICAgZm9yIChpbnQgaiA9IDA7IGogPCBjb3VudDsgaiArKykgew0KLSAgICAgICAgcERldmljZS0+U2F2ZVN0YXRlKCk7DQotICAgICAgICBfUERGX1JlbmRlckl0ZW0qIHBJdGVtID0gbV9Db250ZW50TGlzdC5HZXREYXRhUHRyKGopOw0KLSAgICAgICAgaWYgKHBMYXN0TWF0cml4KSB7DQotICAgICAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCBGaW5hbE1hdHJpeCA9IHBJdGVtLT5tX01hdHJpeDsNCi0gICAgICAgICAgICBGaW5hbE1hdHJpeC5Db25jYXQoKnBMYXN0TWF0cml4KTsNCi0gICAgICAgICAgICBDUERGX1JlbmRlclN0YXR1cyBzdGF0dXM7DQotICAgICAgICAgICAgc3RhdHVzLkluaXRpYWxpemUoMCwgdGhpcywgcERldmljZSwgcExhc3RNYXRyaXgsIHBTdG9wT2JqLCBOVUxMLCBOVUxMLCBwT3B0aW9ucywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwSXRlbS0+bV9wT2JqZWN0TGlzdC0+bV9UcmFuc3BhcmVuY3ksIEZBTFNFLCBOVUxMKTsNCi0gICAgICAgICAgICBzdGF0dXMuUmVuZGVyT2JqZWN0TGlzdChwSXRlbS0+bV9wT2JqZWN0TGlzdCwgJkZpbmFsTWF0cml4KTsNCi0jaWYgIWRlZmluZWQoX0ZQREZBUElfTUlOSV8pDQotICAgICAgICAgICAgaWYgKHN0YXR1cy5tX09wdGlvbnMubV9GbGFncyAmIFJFTkRFUl9MSU1JVEVESU1BR0VDQUNIRSkgew0KLSAgICAgICAgICAgICAgICBtX3BQYWdlQ2FjaGUtPkNhY2hlT3B0aW1pemF0aW9uKHN0YXR1cy5tX09wdGlvbnMubV9kd0xpbWl0Q2FjaGVTaXplKTsNCi0gICAgICAgICAgICB9DQotI2VuZGlmDQotICAgICAgICAgICAgaWYgKHN0YXR1cy5tX2JTdG9wcGVkKSB7DQotICAgICAgICAgICAgICAgIHBEZXZpY2UtPlJlc3RvcmVTdGF0ZSgpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIENQREZfUmVuZGVyU3RhdHVzIHN0YXR1czsNCi0gICAgICAgICAgICBzdGF0dXMuSW5pdGlhbGl6ZSgwLCB0aGlzLCBwRGV2aWNlLCBOVUxMLCBwU3RvcE9iaiwgTlVMTCwgTlVMTCwgcE9wdGlvbnMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEl0ZW0tPm1fcE9iamVjdExpc3QtPm1fVHJhbnNwYXJlbmN5LCBGQUxTRSwgTlVMTCk7DQotICAgICAgICAgICAgc3RhdHVzLlJlbmRlck9iamVjdExpc3QocEl0ZW0tPm1fcE9iamVjdExpc3QsICZwSXRlbS0+bV9NYXRyaXgpOw0KLSNpZiAhZGVmaW5lZChfRlBERkFQSV9NSU5JXykNCi0gICAgICAgICAgICBpZiAoc3RhdHVzLm1fT3B0aW9ucy5tX0ZsYWdzICYgUkVOREVSX0xJTUlURURJTUFHRUNBQ0hFKSB7DQotICAgICAgICAgICAgICAgIG1fcFBhZ2VDYWNoZS0+Q2FjaGVPcHRpbWl6YXRpb24oc3RhdHVzLm1fT3B0aW9ucy5tX2R3TGltaXRDYWNoZVNpemUpOw0KLSAgICAgICAgICAgIH0NCi0jZW5kaWYNCi0gICAgICAgICAgICBpZiAoc3RhdHVzLm1fYlN0b3BwZWQpIHsNCi0gICAgICAgICAgICAgICAgcERldmljZS0+UmVzdG9yZVN0YXRlKCk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHBEZXZpY2UtPlJlc3RvcmVTdGF0ZSgpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9SZW5kZXJDb250ZXh0OjpEcmF3T2JqZWN0TGlzdChDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX1BhZ2VPYmplY3RzKiBwT2JqcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMpDQotew0KLSAgICBBcHBlbmRPYmplY3RMaXN0KHBPYmpzLCBwT2JqZWN0MkRldmljZSk7DQotICAgIFJlbmRlcihwRGV2aWNlLCBwT3B0aW9ucyk7DQotfQ0KLUNQREZfUHJvZ3Jlc3NpdmVSZW5kZXJlcjo6Q1BERl9Qcm9ncmVzc2l2ZVJlbmRlcmVyKCkNCi17DQotICAgIG1fcFJlbmRlcmVyID0gTlVMTDsNCi0gICAgbV9wQ29udGV4dCA9IE5VTEw7DQotICAgIG1fcERldmljZSA9IE5VTEw7DQotICAgIG1fU3RhdHVzID0gUmVhZHk7DQotfQ0KLUNQREZfUHJvZ3Jlc3NpdmVSZW5kZXJlcjo6fkNQREZfUHJvZ3Jlc3NpdmVSZW5kZXJlcigpDQotew0KLSAgICBDbGVhcigpOw0KLX0NCi12b2lkIENQREZfUHJvZ3Jlc3NpdmVSZW5kZXJlcjo6Q2xlYXIoKQ0KLXsNCi0gICAgaWYgKG1fcFJlbmRlcmVyKSB7DQotICAgICAgICBkZWxldGUgbV9wUmVuZGVyZXI7DQotICAgICAgICBtX3BEZXZpY2UtPlJlc3RvcmVTdGF0ZSgpOw0KLSAgICAgICAgbV9wUmVuZGVyZXIgPSBOVUxMOw0KLSAgICB9DQotICAgIG1fU3RhdHVzID0gUmVhZHk7DQotfQ0KLXZvaWQgQ1BERl9Qcm9ncmVzc2l2ZVJlbmRlcmVyOjpTdGFydChDUERGX1JlbmRlckNvbnRleHQqIHBDb250ZXh0LCBDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zLCBJRlhfUGF1c2UqIHBQYXVzZSwgRlhfQk9PTCBiRHJvcE9iamVjdHMpDQotew0KLSAgICBpZiAobV9TdGF0dXMgIT0gUmVhZHkpIHsNCi0gICAgICAgIG1fU3RhdHVzID0gRmFpbGVkOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fcENvbnRleHQgPSBwQ29udGV4dDsNCi0gICAgbV9wRGV2aWNlID0gcERldmljZTsNCi0gICAgbV9wT3B0aW9ucyA9IHBPcHRpb25zOw0KLSAgICBtX2JEcm9wT2JqZWN0cyA9IGJEcm9wT2JqZWN0czsNCi0gICAgaWYgKHBDb250ZXh0ID09IE5VTEwgfHwgcERldmljZSA9PSBOVUxMKSB7DQotICAgICAgICBtX1N0YXR1cyA9IEZhaWxlZDsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX1N0YXR1cyA9IFRvQmVDb250aW51ZWQ7DQotICAgIG1fT2JqZWN0UG9zID0gTlVMTDsNCi0gICAgbV9MYXllckluZGV4ID0gMDsNCi0gICAgbV9PYmplY3RJbmRleCA9IDA7DQotICAgIG1fUHJldkxhc3RQb3MgPSBOVUxMOw0KLSAgICBDb250aW51ZShwUGF1c2UpOw0KLX0NCi0jaWZkZWYgX0ZQREZBUElfTUlOSV8NCi0jZGVmaW5lIFJFTkRFUl9TVEVQX0xJTUlUIDIwDQotI2Vsc2UNCi0jZGVmaW5lIFJFTkRFUl9TVEVQX0xJTUlUIDEwMA0KLSNlbmRpZg0KLXZvaWQgQ1BERl9Qcm9ncmVzc2l2ZVJlbmRlcmVyOjpDb250aW51ZShJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIGlmIChtX1N0YXR1cyAhPSBUb0JlQ29udGludWVkKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhfRFdPUkQgbkxheWVycyA9IG1fcENvbnRleHQtPm1fQ29udGVudExpc3QuR2V0U2l6ZSgpOw0KLSAgICBmb3IgKDsgbV9MYXllckluZGV4IDwgbkxheWVyczsgbV9MYXllckluZGV4ICsrKSB7DQotICAgICAgICBfUERGX1JlbmRlckl0ZW0qIHBJdGVtID0gbV9wQ29udGV4dC0+bV9Db250ZW50TGlzdC5HZXREYXRhUHRyKG1fTGF5ZXJJbmRleCk7DQotICAgICAgICBGWF9QT1NJVElPTiBMYXN0UG9zID0gcEl0ZW0tPm1fcE9iamVjdExpc3QtPkdldExhc3RPYmplY3RQb3NpdGlvbigpOw0KLSAgICAgICAgaWYgKG1fT2JqZWN0UG9zID09IE5VTEwpIHsNCi0gICAgICAgICAgICBpZiAoTGFzdFBvcyA9PSBtX1ByZXZMYXN0UG9zKSB7DQotICAgICAgICAgICAgICAgIGlmICghcEl0ZW0tPm1fcE9iamVjdExpc3QtPklzUGFyc2VkKCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIHBJdGVtLT5tX3BPYmplY3RMaXN0LT5Db250aW51ZVBhcnNlKHBQYXVzZSk7DQotICAgICAgICAgICAgICAgICAgICBpZiAoIXBJdGVtLT5tX3BPYmplY3RMaXN0LT5Jc1BhcnNlZCgpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgTGFzdFBvcyA9IHBJdGVtLT5tX3BPYmplY3RMaXN0LT5HZXRMYXN0T2JqZWN0UG9zaXRpb24oKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoTGFzdFBvcyA9PSBtX1ByZXZMYXN0UG9zKSB7DQotICAgICAgICAgICAgICAgIGlmIChtX3BSZW5kZXJlcikgew0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG1fcFJlbmRlcmVyOw0KLSAgICAgICAgICAgICAgICAgICAgbV9wUmVuZGVyZXIgPSBOVUxMOw0KLSAgICAgICAgICAgICAgICAgICAgbV9wRGV2aWNlLT5SZXN0b3JlU3RhdGUoKTsNCi0gICAgICAgICAgICAgICAgICAgIG1fT2JqZWN0UG9zID0gTlVMTDsNCi0gICAgICAgICAgICAgICAgICAgIG1fUHJldkxhc3RQb3MgPSBOVUxMOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobV9QcmV2TGFzdFBvcykgew0KLSAgICAgICAgICAgICAgICBtX09iamVjdFBvcyA9IG1fUHJldkxhc3RQb3M7DQotICAgICAgICAgICAgICAgIHBJdGVtLT5tX3BPYmplY3RMaXN0LT5HZXROZXh0T2JqZWN0KG1fT2JqZWN0UG9zKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBtX09iamVjdFBvcyA9IHBJdGVtLT5tX3BPYmplY3RMaXN0LT5HZXRGaXJzdE9iamVjdFBvc2l0aW9uKCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fUHJldkxhc3RQb3MgPSBMYXN0UG9zOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fcFJlbmRlcmVyID09IE5VTEwpIHsNCi0gICAgICAgICAgICBtX09iamVjdFBvcyA9IHBJdGVtLT5tX3BPYmplY3RMaXN0LT5HZXRGaXJzdE9iamVjdFBvc2l0aW9uKCk7DQotICAgICAgICAgICAgbV9PYmplY3RJbmRleCA9IDA7DQotICAgICAgICAgICAgbV9wUmVuZGVyZXIgPSBGWF9ORVcgQ1BERl9SZW5kZXJTdGF0dXMoKTsNCi0gICAgICAgICAgICBtX3BSZW5kZXJlci0+SW5pdGlhbGl6ZSgwLCBtX3BDb250ZXh0LCBtX3BEZXZpY2UsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wT3B0aW9ucywgcEl0ZW0tPm1fcE9iamVjdExpc3QtPm1fVHJhbnNwYXJlbmN5LCBtX2JEcm9wT2JqZWN0cywgTlVMTCk7DQotICAgICAgICAgICAgbV9wRGV2aWNlLT5TYXZlU3RhdGUoKTsNCi0gICAgICAgICAgICBtX0NsaXBSZWN0ID0gbV9wRGV2aWNlLT5HZXRDbGlwQm94KCk7DQotICAgICAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCBkZXZpY2Uyb2JqZWN0Ow0KLSAgICAgICAgICAgIGRldmljZTJvYmplY3QuU2V0UmV2ZXJzZShwSXRlbS0+bV9NYXRyaXgpOw0KLSAgICAgICAgICAgIGRldmljZTJvYmplY3QuVHJhbnNmb3JtUmVjdChtX0NsaXBSZWN0KTsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBvYmpzX3RvX2dvID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRSZW5kZXJNb2R1bGUoKS0+R2V0Q29uZmlnKCktPm1fUmVuZGVyU3RlcExpbWl0Ow0KLSAgICAgICAgd2hpbGUgKG1fT2JqZWN0UG9zKSB7DQotICAgICAgICAgICAgQ1BERl9QYWdlT2JqZWN0KiBwQ3VyT2JqID0gcEl0ZW0tPm1fcE9iamVjdExpc3QtPkdldE9iamVjdEF0KG1fT2JqZWN0UG9zKTsNCi0gICAgICAgICAgICBpZiAocEN1ck9iaiAmJiBwQ3VyT2JqLT5tX0xlZnQgPD0gbV9DbGlwUmVjdC5yaWdodCAmJiBwQ3VyT2JqLT5tX1JpZ2h0ID49IG1fQ2xpcFJlY3QubGVmdCAmJg0KLSAgICAgICAgICAgICAgICAgICAgcEN1ck9iai0+bV9Cb3R0b20gPD0gbV9DbGlwUmVjdC50b3AgJiYgcEN1ck9iai0+bV9Ub3AgPj0gbV9DbGlwUmVjdC5ib3R0b20pIHsNCi0gICAgICAgICAgICAgICAgaWYgKG1fcFJlbmRlcmVyLT5Db250aW51ZVNpbmdsZU9iamVjdChwQ3VyT2JqLCAmcEl0ZW0tPm1fTWF0cml4LCBwUGF1c2UpKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgICAgIH0NCi0jaWYgIWRlZmluZWQoX0ZQREZBUElfTUlOSV8pDQotICAgICAgICAgICAgICAgIGlmIChwQ3VyT2JqLT5tX1R5cGUgPT0gUERGUEFHRV9JTUFHRSAmJiBtX3BSZW5kZXJlci0+bV9PcHRpb25zLm1fRmxhZ3MgJiBSRU5ERVJfTElNSVRFRElNQUdFQ0FDSEUpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fcENvbnRleHQtPkdldFBhZ2VDYWNoZSgpLT5DYWNoZU9wdGltaXphdGlvbihtX3BSZW5kZXJlci0+bV9PcHRpb25zLm1fZHdMaW1pdENhY2hlU2l6ZSk7DQotICAgICAgICAgICAgICAgIH0NCi0jZW5kaWYNCi0gICAgICAgICAgICAgICAgaWYgKHBDdXJPYmotPm1fVHlwZSA9PSBQREZQQUdFX0ZPUk0gfHwgcEN1ck9iai0+bV9UeXBlID09IFBERlBBR0VfU0hBRElORykgew0KLSAgICAgICAgICAgICAgICAgICAgb2Jqc190b19nbyA9IDA7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBvYmpzX3RvX2dvIC0tOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fT2JqZWN0SW5kZXggKys7DQotICAgICAgICAgICAgcEl0ZW0tPm1fcE9iamVjdExpc3QtPkdldE5leHRPYmplY3QobV9PYmplY3RQb3MpOw0KLSAgICAgICAgICAgIGlmIChvYmpzX3RvX2dvID09IDApIHsNCi0gICAgICAgICAgICAgICAgaWYgKHBQYXVzZSAmJiBwUGF1c2UtPk5lZWRUb1BhdXNlTm93KCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBvYmpzX3RvX2dvID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRSZW5kZXJNb2R1bGUoKS0+R2V0Q29uZmlnKCktPm1fUmVuZGVyU3RlcExpbWl0Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmICghcEl0ZW0tPm1fcE9iamVjdExpc3QtPklzUGFyc2VkKCkpIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBkZWxldGUgbV9wUmVuZGVyZXI7DQotICAgICAgICBtX3BSZW5kZXJlciA9IE5VTEw7DQotICAgICAgICBtX3BEZXZpY2UtPlJlc3RvcmVTdGF0ZSgpOw0KLSAgICAgICAgbV9PYmplY3RQb3MgPSBOVUxMOw0KLSAgICAgICAgbV9QcmV2TGFzdFBvcyA9IE5VTEw7DQotICAgICAgICBpZiAocFBhdXNlICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgew0KLSAgICAgICAgICAgIG1fTGF5ZXJJbmRleCsrOw0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX1N0YXR1cyA9IERvbmU7DQotfQ0KLWludCBDUERGX1Byb2dyZXNzaXZlUmVuZGVyZXI6OkVzdGltYXRlUHJvZ3Jlc3MoKQ0KLXsNCi0gICAgaWYgKCFtX3BDb250ZXh0KSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBGWF9EV09SRCBuTGF5ZXJzID0gbV9wQ29udGV4dC0+bV9Db250ZW50TGlzdC5HZXRTaXplKCk7DQotICAgIGludCBuVG90YWwgPSAwLCBuUmVuZGVyZWQgPSAwOw0KLSAgICBmb3IgKEZYX0RXT1JEIGxheWVyID0gMDsgbGF5ZXIgPCBuTGF5ZXJzOyBsYXllciArKykgew0KLSAgICAgICAgX1BERl9SZW5kZXJJdGVtKiBwSXRlbSA9IG1fcENvbnRleHQtPm1fQ29udGVudExpc3QuR2V0RGF0YVB0cihsYXllcik7DQotICAgICAgICBpbnQgbk9ianMgPSBwSXRlbS0+bV9wT2JqZWN0TGlzdC0+Q291bnRPYmplY3RzKCk7DQotICAgICAgICBpZiAobGF5ZXIgPT0gbV9MYXllckluZGV4KSB7DQotICAgICAgICAgICAgblJlbmRlcmVkICs9IG1fT2JqZWN0SW5kZXg7DQotICAgICAgICB9IGVsc2UgaWYgKGxheWVyIDwgbV9MYXllckluZGV4KSB7DQotICAgICAgICAgICAgblJlbmRlcmVkICs9IG5PYmpzOw0KLSAgICAgICAgfQ0KLSAgICAgICAgblRvdGFsICs9IG5PYmpzOw0KLSAgICB9DQotICAgIGlmIChuVG90YWwgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgcmV0dXJuIDEwMCAqIG5SZW5kZXJlZCAvIG5Ub3RhbDsNCi19DQotQ1BERl9UcmFuc2ZlckZ1bmMqIENQREZfRG9jUmVuZGVyRGF0YTo6R2V0VHJhbnNmZXJGdW5jKENQREZfT2JqZWN0KiBwT2JqKQ0KLXsNCi0gICAgaWYgKHBPYmogPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfVHJhbnNmZXJGdW5jKj4qIHBUcmFuc2ZlckNvdW50ZXI7DQotICAgIGlmICghbV9UcmFuc2ZlckZ1bmNNYXAuTG9va3VwKHBPYmosIHBUcmFuc2ZlckNvdW50ZXIpKSB7DQotICAgICAgICBDUERGX1RyYW5zZmVyRnVuYyogcFRyYW5zZmVyID0gTlVMTDsNCi0gICAgICAgIENQREZfRnVuY3Rpb24qIHBGdW5jc1szXSA9IHtOVUxMLCBOVUxMLCBOVUxMfTsNCi0gICAgICAgIEZYX0JPT0wgYlVuaVRyYW5zZmVyID0gVFJVRTsNCi0gICAgICAgIGludCBpOw0KLSAgICAgICAgRlhfQk9PTCBiSWRlbnRpdHkgPSBUUlVFOw0KLSAgICAgICAgaWYgKHBPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgICAgICBiVW5pVHJhbnNmZXIgPSBGQUxTRTsNCi0gICAgICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSAoQ1BERl9BcnJheSopcE9iajsNCi0gICAgICAgICAgICBpZiAocEFycmF5LT5HZXRDb3VudCgpIDwgMykgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IDM7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgcEZ1bmNzWzIgLSBpXSA9IENQREZfRnVuY3Rpb246OkxvYWQocEFycmF5LT5HZXRFbGVtZW50VmFsdWUoaSkpOw0KLSAgICAgICAgICAgICAgICBpZiAocEZ1bmNzWzIgLSBpXSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcEZ1bmNzWzBdID0gQ1BERl9GdW5jdGlvbjo6TG9hZChwT2JqKTsNCi0gICAgICAgICAgICBpZiAocEZ1bmNzWzBdID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcFRyYW5zZmVyID0gRlhfTkVXIENQREZfVHJhbnNmZXJGdW5jOw0KLSAgICAgICAgcFRyYW5zZmVyLT5tX3BQREZEb2MgPSBtX3BQREZEb2M7DQotICAgICAgICBwVHJhbnNmZXJDb3VudGVyID0gRlhfTkVXIENQREZfQ291bnRlZE9iamVjdDxDUERGX1RyYW5zZmVyRnVuYyo+Ow0KLSAgICAgICAgcFRyYW5zZmVyQ291bnRlci0+bV9uQ291bnQgPSAxOw0KLSAgICAgICAgcFRyYW5zZmVyQ291bnRlci0+bV9PYmogPSBwVHJhbnNmZXI7DQotICAgICAgICBtX1RyYW5zZmVyRnVuY01hcC5TZXRBdChwT2JqLCBwVHJhbnNmZXJDb3VudGVyKTsNCi0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQga01heE91dHB1dHMgPSAxNjsNCi0gICAgICAgIEZYX0ZMT0FUIG91dHB1dFtrTWF4T3V0cHV0c107DQotICAgICAgICBGWFNZU19tZW1zZXQzMihvdXRwdXQsIDAsIHNpemVvZihvdXRwdXQpKTsNCi0gICAgICAgIEZYX0ZMT0FUIGlucHV0Ow0KLSAgICAgICAgaW50IG5vdXRwdXQ7DQotICAgICAgICBmb3IgKGludCB2ID0gMDsgdiA8IDI1NjsgdiArKykgew0KLSAgICAgICAgICAgIGlucHV0ID0gKEZYX0ZMT0FUKXYgLyAyNTUuMGY7DQotICAgICAgICAgICAgaWYgKGJVbmlUcmFuc2Zlcikgew0KLSAgICAgICAgICAgICAgICBpZiAocEZ1bmNzWzBdICYmIHBGdW5jc1swXS0+Q291bnRPdXRwdXRzKCkgPD0ga01heE91dHB1dHMpIHsNCi0gICAgICAgICAgICAgICAgICAgIHBGdW5jc1swXS0+Q2FsbCgmaW5wdXQsIDEsIG91dHB1dCwgbm91dHB1dCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaW50IG8gPSBGWFNZU19yb3VuZChvdXRwdXRbMF0gKiAyNTUpOw0KLSAgICAgICAgICAgICAgICBpZiAobyAhPSB2KSB7DQotICAgICAgICAgICAgICAgICAgICBiSWRlbnRpdHkgPSBGQUxTRTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSArKykgew0KLSAgICAgICAgICAgICAgICAgICAgcFRyYW5zZmVyLT5tX1NhbXBsZXNbaSAqIDI1NiArIHZdID0gbzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZQ0KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSArKykgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBGdW5jc1tpXSAmJiBwRnVuY3NbaV0tPkNvdW50T3V0cHV0cygpIDw9IGtNYXhPdXRwdXRzKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcEZ1bmNzW2ldLT5DYWxsKCZpbnB1dCwgMSwgb3V0cHV0LCBub3V0cHV0KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbyA9IEZYU1lTX3JvdW5kKG91dHB1dFswXSAqIDI1NSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gIT0gdikgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiSWRlbnRpdHkgPSBGQUxTRTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgcFRyYW5zZmVyLT5tX1NhbXBsZXNbaSAqIDI1NiArIHZdID0gbzsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcFRyYW5zZmVyLT5tX1NhbXBsZXNbaSAqIDI1NiArIHZdID0gdjsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkgKyspDQotICAgICAgICAgICAgaWYgKHBGdW5jc1tpXSkgew0KLSAgICAgICAgICAgICAgICBkZWxldGUgcEZ1bmNzW2ldOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIHBUcmFuc2Zlci0+bV9iSWRlbnRpdHkgPSBiSWRlbnRpdHk7DQotICAgIH0NCi0gICAgcFRyYW5zZmVyQ291bnRlci0+bV9uQ291bnQrKzsNCi0gICAgcmV0dXJuIHBUcmFuc2ZlckNvdW50ZXItPm1fT2JqOw0KLX0NCi12b2lkIENQREZfRG9jUmVuZGVyRGF0YTo6UmVsZWFzZVRyYW5zZmVyRnVuYyhDUERGX09iamVjdCogcE9iaikNCi17DQotICAgIENQREZfQ291bnRlZE9iamVjdDxDUERGX1RyYW5zZmVyRnVuYyo+KiBwVHJhbnNmZXJDb3VudGVyOw0KLSAgICBpZiAoIW1fVHJhbnNmZXJGdW5jTWFwLkxvb2t1cChwT2JqLCBwVHJhbnNmZXJDb3VudGVyKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHBUcmFuc2ZlckNvdW50ZXItPm1fbkNvdW50LS07DQotfQ0KLUNQREZfUmVuZGVyQ29uZmlnOjpDUERGX1JlbmRlckNvbmZpZygpDQotew0KLSAgICBtX0hhbGZ0b25lTGltaXQgPSAwOw0KLSNpZmRlZiBfRlBERkFQSV9NSU5JXw0KLSAgICBtX1JlbmRlclN0ZXBMaW1pdCA9IDIwOw0KLSNlbHNlDQotICAgIG1fUmVuZGVyU3RlcExpbWl0ID0gMTAwOw0KLSNlbmRpZg0KLX0NCi1DUERGX1JlbmRlckNvbmZpZzo6fkNQREZfUmVuZGVyQ29uZmlnKCkNCi17DQotfQ0KLUNQREZfRGV2aWNlQnVmZmVyOjpDUERGX0RldmljZUJ1ZmZlcigpDQotew0KLSAgICBtX3BCaXRtYXAgPSBOVUxMOw0KLSAgICBtX3BEZXZpY2UgPSBOVUxMOw0KLSAgICBtX3BDb250ZXh0ID0gTlVMTDsNCi0gICAgbV9wT2JqZWN0ID0gTlVMTDsNCi19DQotQ1BERl9EZXZpY2VCdWZmZXI6On5DUERGX0RldmljZUJ1ZmZlcigpDQotew0KLSAgICBpZiAobV9wQml0bWFwKSB7DQotICAgICAgICBkZWxldGUgbV9wQml0bWFwOw0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BERl9EZXZpY2VCdWZmZXI6OkluaXRpYWxpemUoQ1BERl9SZW5kZXJDb250ZXh0KiBwQ29udGV4dCwgQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgRlhfUkVDVCogcFJlY3QsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmosIGludCBtYXhfZHBpKQ0KLXsNCi0gICAgbV9wRGV2aWNlID0gcERldmljZTsNCi0gICAgbV9wQ29udGV4dCA9IHBDb250ZXh0Ow0KLSAgICBtX1JlY3QgPSAqcFJlY3Q7DQotICAgIG1fcE9iamVjdCA9IHBPYmo7DQotICAgIG1fTWF0cml4LlRyYW5zbGF0ZUkoLXBSZWN0LT5sZWZ0LCAtcFJlY3QtPnRvcCk7DQotI2lmIF9GWE1fUExBVEZPUk1fICE9IF9GWE1fUExBVEZPUk1fQVBQTEVfDQotICAgIGludCBob3J6X3NpemUgPSBwRGV2aWNlLT5HZXREZXZpY2VDYXBzKEZYRENfSE9SWl9TSVpFKTsNCi0gICAgaW50IHZlcnRfc2l6ZSA9IHBEZXZpY2UtPkdldERldmljZUNhcHMoRlhEQ19WRVJUX1NJWkUpOw0KLSAgICBpZiAoaG9yel9zaXplICYmIHZlcnRfc2l6ZSAmJiBtYXhfZHBpKSB7DQotICAgICAgICBpbnQgZHBpaCA9IHBEZXZpY2UtPkdldERldmljZUNhcHMoRlhEQ19QSVhFTF9XSURUSCkgKiAyNTQgLyAoaG9yel9zaXplICogMTApOw0KLSAgICAgICAgaW50IGRwaXYgPSBwRGV2aWNlLT5HZXREZXZpY2VDYXBzKEZYRENfUElYRUxfSEVJR0hUKSAqIDI1NCAvICh2ZXJ0X3NpemUgKiAxMCk7DQotICAgICAgICBpZiAoZHBpaCA+IG1heF9kcGkpIHsNCi0gICAgICAgICAgICBtX01hdHJpeC5TY2FsZSgoRlhfRkxPQVQpKG1heF9kcGkpIC8gZHBpaCwgMS4wZik7DQotICAgICAgICB9DQotICAgICAgICBpZiAoZHBpdiA+IG1heF9kcGkpIHsNCi0gICAgICAgICAgICBtX01hdHJpeC5TY2FsZSgxLjBmLCAoRlhfRkxPQVQpKG1heF9kcGkpIC8gKEZYX0ZMT0FUKWRwaXYpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotI2lmZGVmIF9GUERGQVBJX01JTklfDQotICAgIG1fTWF0cml4LlNjYWxlKDAuNWYsIDAuNWYpOw0KLSNlbmRpZg0KLSNlbmRpZg0KLSAgICBDRlhfTWF0cml4IGN0bSA9IG1fcERldmljZS0+R2V0Q1RNKCk7DQotICAgIEZYX0ZMT0FUIGZTY2FsZVggPSBGWFNZU19mYWJzKGN0bS5hKTsNCi0gICAgRlhfRkxPQVQgZlNjYWxlWSA9IEZYU1lTX2ZhYnMoY3RtLmQpOw0KLSAgICBtX01hdHJpeC5Db25jYXQoZlNjYWxlWCwgMCwgMCwgZlNjYWxlWSwgMCwgMCk7DQotICAgIENGWF9GbG9hdFJlY3QgcmVjdCgqcFJlY3QpOw0KLSAgICBtX01hdHJpeC5UcmFuc2Zvcm1SZWN0KHJlY3QpOw0KLSAgICBGWF9SRUNUIGJpdG1hcF9yZWN0ID0gcmVjdC5HZXRPdXR0ZXJSZWN0KCk7DQotICAgIG1fcEJpdG1hcCA9IEZYX05FVyBDRlhfRElCaXRtYXA7DQotICAgIG1fcEJpdG1hcC0+Q3JlYXRlKGJpdG1hcF9yZWN0LldpZHRoKCksIGJpdG1hcF9yZWN0LkhlaWdodCgpLCBGWERJQl9BcmdiKTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ1BERl9EZXZpY2VCdWZmZXI6Ok91dHB1dFRvRGV2aWNlKCkNCi17DQotICAgIGlmIChtX3BEZXZpY2UtPkdldERldmljZUNhcHMoRlhEQ19SRU5ERVJfQ0FQUykgJiBGWFJDX0dFVF9CSVRTKSB7DQotICAgICAgICBpZiAobV9NYXRyaXguYSA9PSAxLjBmICYmIG1fTWF0cml4LmQgPT0gMS4wZikgew0KLSAgICAgICAgICAgIG1fcERldmljZS0+U2V0RElCaXRzKG1fcEJpdG1hcCwgbV9SZWN0LmxlZnQsIG1fUmVjdC50b3ApOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBtX3BEZXZpY2UtPlN0cmV0Y2hESUJpdHMobV9wQml0bWFwLCBtX1JlY3QubGVmdCwgbV9SZWN0LnRvcCwgbV9SZWN0LldpZHRoKCksIG1fUmVjdC5IZWlnaHQoKSk7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotI2lmICFkZWZpbmVkKF9GUERGQVBJX01JTklfKSB8fCBkZWZpbmVkKF9GWENPUkVfRkVBVFVSRV9BTExfKQ0KLSAgICAgICAgQ0ZYX0RJQml0bWFwIGJ1ZmZlcjsNCi0gICAgICAgIG1fcERldmljZS0+Q3JlYXRlQ29tcGF0aWJsZUJpdG1hcCgmYnVmZmVyLCBtX3BCaXRtYXAtPkdldFdpZHRoKCksIG1fcEJpdG1hcC0+R2V0SGVpZ2h0KCkpOw0KLSAgICAgICAgbV9wQ29udGV4dC0+R2V0QmFja2dyb3VuZCgmYnVmZmVyLCBtX3BPYmplY3QsIE5VTEwsICZtX01hdHJpeCk7DQotICAgICAgICBidWZmZXIuQ29tcG9zaXRlQml0bWFwKDAsIDAsIGJ1ZmZlci5HZXRXaWR0aCgpLCBidWZmZXIuR2V0SGVpZ2h0KCksIG1fcEJpdG1hcCwgMCwgMCk7DQotICAgICAgICBtX3BEZXZpY2UtPlN0cmV0Y2hESUJpdHMoJmJ1ZmZlciwgbV9SZWN0LmxlZnQsIG1fUmVjdC50b3AsIG1fUmVjdC5XaWR0aCgpLCBtX1JlY3QuSGVpZ2h0KCkpOw0KLSNlbmRpZg0KLSAgICB9DQotfQ0KLUNQREZfU2NhbGVkUmVuZGVyQnVmZmVyOjpDUERGX1NjYWxlZFJlbmRlckJ1ZmZlcigpDQotew0KLSAgICBtX3BCaXRtYXBEZXZpY2UgPSBOVUxMOw0KLX0NCi1DUERGX1NjYWxlZFJlbmRlckJ1ZmZlcjo6fkNQREZfU2NhbGVkUmVuZGVyQnVmZmVyKCkNCi17DQotICAgIGlmIChtX3BCaXRtYXBEZXZpY2UpIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BCaXRtYXBEZXZpY2U7DQotICAgIH0NCi19DQotI2lmbmRlZiBfRlBERkFQSV9NSU5JXw0KLSNkZWZpbmUgX0ZQREZBUElfSU1BR0VTSVpFX0xJTUlUXwkoMzAgKiAxMDI0ICogMTAyNCkNCi0jZWxzZQ0KLSNkZWZpbmUgX0ZQREZBUElfSU1BR0VTSVpFX0xJTUlUXwkoMTAgKiAxMDI0ICogMTAyNCkNCi0jZW5kaWYNCi1GWF9CT09MIENQREZfU2NhbGVkUmVuZGVyQnVmZmVyOjpJbml0aWFsaXplKENQREZfUmVuZGVyQ29udGV4dCogcENvbnRleHQsIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIEZYX1JFQ1QqIHBSZWN0LA0KLSAgICAgICAgY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwT2JqLCBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMgKnBPcHRpb25zLCBpbnQgbWF4X2RwaSkNCi17DQotICAgIEZYU1lTX2Fzc2VydChwUmVjdCAhPSBOVUxMKTsNCi0gICAgbV9wRGV2aWNlID0gcERldmljZTsNCi0gICAgaWYgKG1fcERldmljZS0+R2V0RGV2aWNlQ2FwcyhGWERDX1JFTkRFUl9DQVBTKSAmIEZYUkNfR0VUX0JJVFMpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIG1fcENvbnRleHQgPSBwQ29udGV4dDsNCi0gICAgbV9SZWN0ID0gKnBSZWN0Ow0KLSAgICBtX3BPYmplY3QgPSBwT2JqOw0KLSAgICBtX01hdHJpeC5UcmFuc2xhdGVJKC1wUmVjdC0+bGVmdCwgLXBSZWN0LT50b3ApOw0KLSAgICBpbnQgaG9yel9zaXplID0gcERldmljZS0+R2V0RGV2aWNlQ2FwcyhGWERDX0hPUlpfU0laRSk7DQotICAgIGludCB2ZXJ0X3NpemUgPSBwRGV2aWNlLT5HZXREZXZpY2VDYXBzKEZYRENfVkVSVF9TSVpFKTsNCi0gICAgaWYgKGhvcnpfc2l6ZSAmJiB2ZXJ0X3NpemUgJiYgbWF4X2RwaSkgew0KLSAgICAgICAgaW50IGRwaWggPSBwRGV2aWNlLT5HZXREZXZpY2VDYXBzKEZYRENfUElYRUxfV0lEVEgpICogMjU0IC8gKGhvcnpfc2l6ZSAqIDEwKTsNCi0gICAgICAgIGludCBkcGl2ID0gcERldmljZS0+R2V0RGV2aWNlQ2FwcyhGWERDX1BJWEVMX0hFSUdIVCkgKiAyNTQgLyAodmVydF9zaXplICogMTApOw0KLSAgICAgICAgaWYgKGRwaWggPiBtYXhfZHBpKSB7DQotICAgICAgICAgICAgbV9NYXRyaXguU2NhbGUoKEZYX0ZMT0FUKShtYXhfZHBpKSAvIGRwaWgsIDEuMGYpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGRwaXYgPiBtYXhfZHBpKSB7DQotICAgICAgICAgICAgbV9NYXRyaXguU2NhbGUoMS4wZiwgKEZYX0ZMT0FUKShtYXhfZHBpKSAvIChGWF9GTE9BVClkcGl2KTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX3BCaXRtYXBEZXZpY2UgPSBGWF9ORVcgQ0ZYX0Z4Z2VEZXZpY2U7DQotICAgIEZYRElCX0Zvcm1hdCBkaWJGb3JtYXQgPSBGWERJQl9SZ2I7DQotICAgIEZYX0lOVDMyIGJwcCA9IDI0Ow0KLSAgICBpZiAobV9wRGV2aWNlLT5HZXREZXZpY2VDYXBzKEZYRENfUkVOREVSX0NBUFMpICYgRlhSQ19BTFBIQV9PVVRQVVQpIHsNCi0gICAgICAgIGRpYkZvcm1hdCA9IEZYRElCX0FyZ2I7DQotICAgICAgICBicHAgPSAzMjsNCi0gICAgfQ0KLSAgICBDRlhfRmxvYXRSZWN0IHJlY3Q7DQotICAgIEZYX0lOVDMyIGlXaWR0aCwgaUhlaWdodCwgaVBpdGNoOw0KLSAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgcmVjdCA9ICpwUmVjdDsNCi0gICAgICAgIG1fTWF0cml4LlRyYW5zZm9ybVJlY3QocmVjdCk7DQotICAgICAgICBGWF9SRUNUIGJpdG1hcF9yZWN0ID0gcmVjdC5HZXRPdXR0ZXJSZWN0KCk7DQotICAgICAgICBpV2lkdGggPSBiaXRtYXBfcmVjdC5XaWR0aCgpOw0KLSAgICAgICAgaUhlaWdodCA9IGJpdG1hcF9yZWN0LkhlaWdodCgpOw0KLSAgICAgICAgaVBpdGNoID0gKGlXaWR0aCAqIGJwcCArIDMxKSAvIDMyICogNDsNCi0gICAgICAgIGlmIChpV2lkdGggKiBpSGVpZ2h0IDwgMSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChpUGl0Y2ggKiBpSGVpZ2h0IDw9IF9GUERGQVBJX0lNQUdFU0laRV9MSU1JVF8gJiYNCi0gICAgICAgICAgICAgICAgbV9wQml0bWFwRGV2aWNlLT5DcmVhdGUoaVdpZHRoLCBpSGVpZ2h0LCBkaWJGb3JtYXQpKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBtX01hdHJpeC5TY2FsZSgwLjVmLCAwLjVmKTsNCi0gICAgfQ0KLSNpZiAgIWRlZmluZWQoX0ZQREZBUElfTUlOSV8pIHx8IGRlZmluZWQoX0ZYQ09SRV9GRUFUVVJFX0FMTF8pDQotICAgIG1fcENvbnRleHQtPkdldEJhY2tncm91bmQobV9wQml0bWFwRGV2aWNlLT5HZXRCaXRtYXAoKSwgbV9wT2JqZWN0LCBwT3B0aW9ucywgJm1fTWF0cml4KTsNCi0jZW5kaWYNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ1BERl9TY2FsZWRSZW5kZXJCdWZmZXI6Ok91dHB1dFRvRGV2aWNlKCkNCi17DQotICAgIGlmIChtX3BCaXRtYXBEZXZpY2UpIHsNCi0gICAgICAgIG1fcERldmljZS0+U3RyZXRjaERJQml0cyhtX3BCaXRtYXBEZXZpY2UtPkdldEJpdG1hcCgpLCBtX1JlY3QubGVmdCwgbV9SZWN0LnRvcCwgbV9SZWN0LldpZHRoKCksIG1fUmVjdC5IZWlnaHQoKSk7DQotICAgIH0NCi19DQotRlhfQk9PTCBJUERGX09DQ29udGV4dDo6Q2hlY2tPYmplY3RWaXNpYmxlKGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaikNCi17DQotICAgIGNvbnN0IENQREZfQ29udGVudE1hcmtEYXRhKiBwRGF0YSA9IHBPYmotPm1fQ29udGVudE1hcms7DQotICAgIGludCBuSXRlbXMgPSBwRGF0YS0+Q291bnRJdGVtcygpOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5JdGVtczsgaSArKykgew0KLSAgICAgICAgQ1BERl9Db250ZW50TWFya0l0ZW0mIGl0ZW0gPSBwRGF0YS0+R2V0SXRlbShpKTsNCi0gICAgICAgIGlmIChpdGVtLkdldE5hbWUoKSA9PSBGWF9CU1RSQygiT0MiKSAmJiBpdGVtLkdldFBhcmFtVHlwZSgpID09IENQREZfQ29udGVudE1hcmtJdGVtOjpQcm9wZXJ0aWVzRGljdCkgew0KLSAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcE9DRyA9IChDUERGX0RpY3Rpb25hcnkqKWl0ZW0uR2V0UGFyYW0oKTsNCi0gICAgICAgICAgICBpZiAoIUNoZWNrT0NHVmlzaWJsZShwT0NHKSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcmVuZGVyLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfbW9kdWxlLmgiCisjaW5jbHVkZSAiLi4vZnBkZl9wYWdlL3BhZ2VpbnQuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2UuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaCIKKyNpbmNsdWRlICJyZW5kZXJfaW50LmgiCitDUERGX0RvY1JlbmRlckRhdGE6OkNQREZfRG9jUmVuZGVyRGF0YShDUERGX0RvY3VtZW50KiBwUERGRG9jKQorICAgIDogbV9wUERGRG9jKHBQREZEb2MpCisgICAgLCBtX3BGb250Q2FjaGUoTlVMTCkKK3sKK30KK0NQREZfRG9jUmVuZGVyRGF0YTo6fkNQREZfRG9jUmVuZGVyRGF0YSgpCit7CisgICAgQ2xlYXIoVFJVRSk7Cit9Cit2b2lkIENQREZfRG9jUmVuZGVyRGF0YTo6Q2xlYXIoRlhfQk9PTCBiUmVsZWFzZSkKK3sKKyAgICBGWF9QT1NJVElPTiBwb3M7CisgICAgeworICAgICAgICBwb3MgPSBtX1R5cGUzRmFjZU1hcC5HZXRTdGFydFBvc2l0aW9uKCk7CisgICAgICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgICAgIENQREZfRm9udCogcEZvbnQ7CisgICAgICAgICAgICBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9UeXBlM0NhY2hlKj4qIGNhY2hlOworICAgICAgICAgICAgbV9UeXBlM0ZhY2VNYXAuR2V0TmV4dEFzc29jKHBvcywgcEZvbnQsIGNhY2hlKTsKKyAgICAgICAgICAgIGlmIChiUmVsZWFzZSB8fCBjYWNoZS0+bV9uQ291bnQgPCAyKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hlLT5tX09iajsKKyAgICAgICAgICAgICAgICBkZWxldGUgY2FjaGU7CisgICAgICAgICAgICAgICAgbV9UeXBlM0ZhY2VNYXAuUmVtb3ZlS2V5KHBGb250KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNpZm5kZWYgX0ZQREZBUElfTUlOSV8KKyAgICB7CisgICAgICAgIHBvcyA9IG1fVHJhbnNmZXJGdW5jTWFwLkdldFN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgd2hpbGUgKHBvcykgeworICAgICAgICAgICAgQ1BERl9PYmplY3QqIGtleTsKKyAgICAgICAgICAgIENQREZfQ291bnRlZE9iamVjdDxDUERGX1RyYW5zZmVyRnVuYyo+KiB2YWx1ZTsKKyAgICAgICAgICAgIG1fVHJhbnNmZXJGdW5jTWFwLkdldE5leHRBc3NvYyhwb3MsIGtleSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKGJSZWxlYXNlIHx8IHZhbHVlLT5tX25Db3VudCA8IDIpIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWUtPm1fT2JqOworICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZTsKKyAgICAgICAgICAgICAgICBtX1RyYW5zZmVyRnVuY01hcC5SZW1vdmVLZXkoa2V5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIGlmIChtX3BGb250Q2FjaGUpIHsKKyAgICAgICAgaWYgKGJSZWxlYXNlKSB7CisgICAgICAgICAgICBkZWxldGUgbV9wRm9udENhY2hlOworICAgICAgICAgICAgbV9wRm9udENhY2hlID0gTlVMTDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fcEZvbnRDYWNoZS0+RnJlZUNhY2hlKEZBTFNFKTsKKyAgICAgICAgfQorICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9Eb2NSZW5kZXJEYXRhOjpJbml0aWFsaXplKCkKK3sKKyAgICBtX3BGb250Q2FjaGUgPSBGWF9ORVcgQ0ZYX0ZvbnRDYWNoZTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0NQREZfVHlwZTNDYWNoZSogQ1BERl9Eb2NSZW5kZXJEYXRhOjpHZXRDYWNoZWRUeXBlMyhDUERGX1R5cGUzRm9udCogcEZvbnQpCit7CisgICAgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfVHlwZTNDYWNoZSo+KiBwQ2FjaGU7CisgICAgaWYgKCFtX1R5cGUzRmFjZU1hcC5Mb29rdXAocEZvbnQsIHBDYWNoZSkpIHsKKyAgICAgICAgQ1BERl9UeXBlM0NhY2hlKiBwVHlwZTMgPSBGWF9ORVcgQ1BERl9UeXBlM0NhY2hlKHBGb250KTsKKyAgICAgICAgcENhY2hlID0gRlhfTkVXIENQREZfQ291bnRlZE9iamVjdDxDUERGX1R5cGUzQ2FjaGUqPjsKKyAgICAgICAgcENhY2hlLT5tX09iaiA9IHBUeXBlMzsKKyAgICAgICAgcENhY2hlLT5tX25Db3VudCA9IDE7CisgICAgICAgIG1fVHlwZTNGYWNlTWFwLlNldEF0KHBGb250LCBwQ2FjaGUpOworICAgIH0KKyAgICBwQ2FjaGUtPm1fbkNvdW50Kys7CisgICAgcmV0dXJuIHBDYWNoZS0+bV9PYmo7Cit9Cit2b2lkIENQREZfRG9jUmVuZGVyRGF0YTo6UmVsZWFzZUNhY2hlZFR5cGUzKENQREZfVHlwZTNGb250KiBwRm9udCkKK3sKKyAgICBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9UeXBlM0NhY2hlKj4qIHBDYWNoZTsKKyAgICBpZiAoIW1fVHlwZTNGYWNlTWFwLkxvb2t1cChwRm9udCwgcENhY2hlKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHBDYWNoZS0+bV9uQ291bnQtLTsKK30KK2NsYXNzIENQREZfUmVuZGVyTW9kdWxlIDogcHVibGljIENQREZfUmVuZGVyTW9kdWxlRGVmCit7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q1BERl9SZW5kZXJNb2R1bGUoKSB7fQorICAgIHZpcnR1YWwgRlhfQk9PTAlJbnN0YWxsZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHZpcnR1YWwgQ1BERl9Eb2NSZW5kZXJEYXRhKglDcmVhdGVEb2NEYXRhKENQREZfRG9jdW1lbnQqIHBEb2MpOworICAgIHZpcnR1YWwgdm9pZAlEZXN0cm95RG9jRGF0YShDUERGX0RvY1JlbmRlckRhdGEqIHApOworICAgIHZpcnR1YWwgdm9pZAlDbGVhckRvY0RhdGEoQ1BERl9Eb2NSZW5kZXJEYXRhKiBwKTsKKyAgICB2aXJ0dWFsIENQREZfRG9jUmVuZGVyRGF0YSogR2V0UmVuZGVyRGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gJm1fUmVuZGVyRGF0YTsKKyAgICB9CisgICAgdmlydHVhbCBDUERGX1BhZ2VSZW5kZXJDYWNoZSoJQ3JlYXRlUGFnZUNhY2hlKENQREZfUGFnZSogcFBhZ2UpCisgICAgeworICAgICAgICByZXR1cm4gRlhfTkVXIENQREZfUGFnZVJlbmRlckNhY2hlKHBQYWdlKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkCURlc3Ryb3lQYWdlQ2FjaGUoQ1BERl9QYWdlUmVuZGVyQ2FjaGUqIHBDYWNoZSk7CisgICAgdmlydHVhbCBDUERGX1JlbmRlckNvbmZpZyoJR2V0Q29uZmlnKCkKKyAgICB7CisgICAgICAgIHJldHVybiAmbV9SZW5kZXJDb25maWc7CisgICAgfQorcHJpdmF0ZToKKyAgICBDUERGX0RvY1JlbmRlckRhdGEJbV9SZW5kZXJEYXRhOworICAgIENQREZfUmVuZGVyQ29uZmlnCW1fUmVuZGVyQ29uZmlnOworfTsKK0NQREZfRG9jUmVuZGVyRGF0YSoJQ1BERl9SZW5kZXJNb2R1bGU6OkNyZWF0ZURvY0RhdGEoQ1BERl9Eb2N1bWVudCogcERvYykKK3sKKyAgICBDUERGX0RvY1JlbmRlckRhdGEqIHBEYXRhID0gRlhfTkVXIENQREZfRG9jUmVuZGVyRGF0YShwRG9jKTsKKyAgICBwRGF0YS0+SW5pdGlhbGl6ZSgpOworICAgIHJldHVybiBwRGF0YTsKK30KK3ZvaWQgQ1BERl9SZW5kZXJNb2R1bGU6OkRlc3Ryb3lEb2NEYXRhKENQREZfRG9jUmVuZGVyRGF0YSogcERvY0RhdGEpCit7CisgICAgZGVsZXRlIHBEb2NEYXRhOworfQordm9pZCBDUERGX1JlbmRlck1vZHVsZTo6Q2xlYXJEb2NEYXRhKENQREZfRG9jUmVuZGVyRGF0YSogcCkKK3sKKyAgICBpZiAocCkgeworICAgICAgICBwLT5DbGVhcihGQUxTRSk7CisgICAgfQorfQordm9pZCBDUERGX1JlbmRlck1vZHVsZTo6RGVzdHJveVBhZ2VDYWNoZShDUERGX1BhZ2VSZW5kZXJDYWNoZSogcENhY2hlKQoreworICAgIGRlbGV0ZSBwQ2FjaGU7Cit9Cit2b2lkIENQREZfTW9kdWxlTWdyOjpJbml0UmVuZGVyTW9kdWxlKCkKK3sKKyAgICBpZiAobV9wUmVuZGVyTW9kdWxlKSB7CisgICAgICAgIGRlbGV0ZSBtX3BSZW5kZXJNb2R1bGU7CisgICAgfQorICAgIG1fcFJlbmRlck1vZHVsZSA9IEZYX05FVyBDUERGX1JlbmRlck1vZHVsZTsKK30KK0NQREZfUmVuZGVyT3B0aW9uczo6Q1BERl9SZW5kZXJPcHRpb25zKCkKKyAgICA6IG1fQ29sb3JNb2RlKFJFTkRFUl9DT0xPUl9OT1JNQUwpCisgICAgLCBtX0ZsYWdzKFJFTkRFUl9DTEVBUlRZUEUpCisgICAgLCBtX0ludGVycG9sYXRpb24oMCkKKyAgICAsIG1fQWRkRmxhZ3MoMCkKKyAgICAsIG1fcE9DQ29udGV4dChOVUxMKQorICAgICwgbV9kd0xpbWl0Q2FjaGVTaXplKDEwMjQgKiAxMDI0ICogMTAwKQorICAgICwgbV9IYWxmdG9uZUxpbWl0KC0xKQoreworI2lmIGRlZmluZWQoX0ZQREZBUElfTUlOSV8pCisgICAgbV9GbGFncyB8PSBSRU5ERVJfTElNSVRFRElNQUdFQ0FDSEU7CisjZW5kaWYKK30KK0ZYX0FSR0IgQ1BERl9SZW5kZXJPcHRpb25zOjpUcmFuc2xhdGVDb2xvcihGWF9BUkdCIGFyZ2IpIGNvbnN0Cit7CisgICAgaWYgKG1fQ29sb3JNb2RlID09IFJFTkRFUl9DT0xPUl9OT1JNQUwpIHsKKyAgICAgICAgcmV0dXJuIGFyZ2I7CisgICAgfQorICAgIGlmIChtX0NvbG9yTW9kZSA9PSBSRU5ERVJfQ09MT1JfQUxQSEEpIHsKKyAgICAgICAgcmV0dXJuIGFyZ2I7CisgICAgfQorICAgIGludCBhLCByLCBnLCBiOworICAgIEFyZ2JEZWNvZGUoYXJnYiwgYSwgciwgZywgYik7CisgICAgaW50IGdyYXkgPSBGWFJHQjJHUkFZKHIsIGcsIGIpOworICAgIGlmIChtX0NvbG9yTW9kZSA9PSBSRU5ERVJfQ09MT1JfVFdPQ09MT1IpIHsKKyAgICAgICAgaW50IGNvbG9yID0gKHIgLSBncmF5KSAqIChyIC0gZ3JheSkgKyAoZyAtIGdyYXkpICogKGcgLSBncmF5KSArIChiIC0gZ3JheSkgKiAoYiAtIGdyYXkpOworICAgICAgICBpZiAoZ3JheSA8IDM1ICYmIGNvbG9yIDwgMjApIHsKKyAgICAgICAgICAgIHJldHVybiBBcmdiRW5jb2RlKGEsIG1fRm9yZUNvbG9yKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZ3JheSA+IDIyMSAmJiBjb2xvciA8IDIwKSB7CisgICAgICAgICAgICByZXR1cm4gQXJnYkVuY29kZShhLCBtX0JhY2tDb2xvcik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFyZ2I7CisgICAgfQorICAgIGludCBmciA9IEZYU1lTX0dldFJWYWx1ZShtX0ZvcmVDb2xvcik7CisgICAgaW50IGZnID0gRlhTWVNfR2V0R1ZhbHVlKG1fRm9yZUNvbG9yKTsKKyAgICBpbnQgZmIgPSBGWFNZU19HZXRCVmFsdWUobV9Gb3JlQ29sb3IpOworICAgIGludCBiciA9IEZYU1lTX0dldFJWYWx1ZShtX0JhY2tDb2xvcik7CisgICAgaW50IGJnID0gRlhTWVNfR2V0R1ZhbHVlKG1fQmFja0NvbG9yKTsKKyAgICBpbnQgYmIgPSBGWFNZU19HZXRCVmFsdWUobV9CYWNrQ29sb3IpOworICAgIHIgPSAoYnIgLSBmcikgKiBncmF5IC8gMjU1ICsgZnI7CisgICAgZyA9IChiZyAtIGZnKSAqIGdyYXkgLyAyNTUgKyBmZzsKKyAgICBiID0gKGJiIC0gZmIpICogZ3JheSAvIDI1NSArIGZiOworICAgIHJldHVybiBBcmdiRW5jb2RlKGEsIHIsIGcsIGIpOworfQorQ1BERl9SZW5kZXJTdGF0dXM6OkNQREZfUmVuZGVyU3RhdHVzKCkKK3sKKyAgICBtX3BDb250ZXh0ID0gTlVMTDsKKyAgICBtX2JTdG9wcGVkID0gRkFMU0U7CisgICAgbV9MZXZlbCA9IDA7CisgICAgbV9wRGV2aWNlID0gTlVMTDsKKyAgICBtX3BDdXJPYmogPSBOVUxMOworICAgIG1fcFN0b3BPYmogPSBOVUxMOworICAgIG1fSGFsZnRvbmVMaW1pdCA9IDA7CisgICAgbV9wT2JqZWN0UmVuZGVyZXIgPSBOVUxMOworICAgIG1fYlByaW50ID0gRkFMU0U7CisgICAgbV9UcmFuc3BhcmVuY3kgPSAwOworICAgIG1fRGl0aGVyQml0cyA9IDA7CisgICAgbV9iRHJvcE9iamVjdHMgPSBGQUxTRTsKKyAgICBtX2JTdGRDUyA9IEZBTFNFOworICAgIG1fR3JvdXBGYW1pbHkgPSAwOworICAgIG1fYkxvYWRNYXNrID0gRkFMU0U7CisgICAgbV9wVHlwZTNDaGFyID0gTlVMTDsKKyAgICBtX1QzRmlsbENvbG9yID0gMDsKKyAgICBtX3BGb3JtUmVzb3VyY2UgPSBOVUxMOworICAgIG1fcFBhZ2VSZXNvdXJjZSA9IE5VTEw7CisgICAgbV9jdXJCbGVuZCA9IEZYRElCX0JMRU5EX05PUk1BTDsKK30KK0NQREZfUmVuZGVyU3RhdHVzOjp+Q1BERl9SZW5kZXJTdGF0dXMoKQoreworICAgIGlmIChtX3BPYmplY3RSZW5kZXJlcikgeworICAgICAgICBkZWxldGUgbV9wT2JqZWN0UmVuZGVyZXI7CisgICAgfQorfQorRlhfQk9PTCBDUERGX1JlbmRlclN0YXR1czo6SW5pdGlhbGl6ZShpbnQgbGV2ZWwsIENQREZfUmVuZGVyQ29udGV4dCogcENvbnRleHQsIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBEZXZpY2VNYXRyaXgsIGNvbnN0IENQREZfUGFnZU9iamVjdCogcFN0b3BPYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENQREZfUmVuZGVyU3RhdHVzKiBwUGFyZW50U3RhdGUsIGNvbnN0IENQREZfR3JhcGhpY1N0YXRlcyogcEluaXRpYWxTdGF0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMsIGludCB0cmFuc3BhcmVuY3ksIEZYX0JPT0wgYkRyb3BPYmplY3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBGb3JtUmVzb3VyY2UsIEZYX0JPT0wgYlN0ZENTLCBDUERGX1R5cGUzQ2hhciogcFR5cGUzQ2hhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQVJHQiBmaWxsX2NvbG9yLCBGWF9EV09SRCBHcm91cEZhbWlseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiTG9hZE1hc2spCit7CisgICAgbV9MZXZlbCA9IGxldmVsOworICAgIG1fcENvbnRleHQgPSBwQ29udGV4dDsKKyAgICBtX3BEZXZpY2UgPSBwRGV2aWNlOworICAgIG1fRGl0aGVyQml0cyA9IHBEZXZpY2UtPkdldERldmljZUNhcHMoRlhEQ19ESVRIRVJfQklUUyk7CisgICAgbV9iUHJpbnQgPSBtX3BEZXZpY2UtPkdldERldmljZUNsYXNzKCkgIT0gRlhEQ19ESVNQTEFZOworICAgIGlmIChwRGV2aWNlTWF0cml4KSB7CisgICAgICAgIG1fRGV2aWNlTWF0cml4ID0gKnBEZXZpY2VNYXRyaXg7CisgICAgfQorICAgIG1fcFN0b3BPYmogPSBwU3RvcE9iajsKKyAgICBpZiAocE9wdGlvbnMpIHsKKyAgICAgICAgbV9PcHRpb25zID0gKnBPcHRpb25zOworICAgIH0KKyAgICBtX2JEcm9wT2JqZWN0cyA9IGJEcm9wT2JqZWN0czsKKyAgICBtX2JTdGRDUyA9IGJTdGRDUzsKKyAgICBtX1QzRmlsbENvbG9yID0gZmlsbF9jb2xvcjsKKyAgICBtX3BUeXBlM0NoYXIgPSBwVHlwZTNDaGFyOworICAgIG1fR3JvdXBGYW1pbHkgPSBHcm91cEZhbWlseTsKKyAgICBtX2JMb2FkTWFzayA9IGJMb2FkTWFzazsKKyAgICBtX3BGb3JtUmVzb3VyY2UgPSBwRm9ybVJlc291cmNlOworICAgIG1fcFBhZ2VSZXNvdXJjZSA9IG1fcENvbnRleHQtPm1fcFBhZ2VSZXNvdXJjZXM7CisgICAgaWYgKHBJbml0aWFsU3RhdGVzICYmICFtX3BUeXBlM0NoYXIpIHsKKyAgICAgICAgbV9Jbml0aWFsU3RhdGVzLkNvcHlTdGF0ZXMoKnBJbml0aWFsU3RhdGVzKTsKKyAgICAgICAgaWYgKHBQYXJlbnRTdGF0ZSkgeworICAgICAgICAgICAgQ1BERl9Db2xvclN0YXRlRGF0YSogcENvbG9yRGF0YSA9IChDUERGX0NvbG9yU3RhdGVEYXRhKikoY29uc3QgQ1BERl9Db2xvclN0YXRlRGF0YSopbV9Jbml0aWFsU3RhdGVzLm1fQ29sb3JTdGF0ZTsKKyAgICAgICAgICAgIENQREZfQ29sb3JTdGF0ZURhdGEqIHBQYXJlbnREYXRhID0gKENQREZfQ29sb3JTdGF0ZURhdGEqKShjb25zdCBDUERGX0NvbG9yU3RhdGVEYXRhKilwUGFyZW50U3RhdGUtPm1fSW5pdGlhbFN0YXRlcy5tX0NvbG9yU3RhdGU7CisgICAgICAgICAgICBpZiAoIXBDb2xvckRhdGEgfHwgcENvbG9yRGF0YS0+bV9GaWxsQ29sb3IuSXNOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICBDUERGX0NvbG9yU3RhdGVEYXRhKiBwRGF0YSA9IG1fSW5pdGlhbFN0YXRlcy5tX0NvbG9yU3RhdGUuR2V0TW9kaWZ5KCk7CisgICAgICAgICAgICAgICAgcERhdGEtPm1fRmlsbFJHQiA9IHBQYXJlbnREYXRhLT5tX0ZpbGxSR0I7CisgICAgICAgICAgICAgICAgcERhdGEtPm1fRmlsbENvbG9yLkNvcHkoJnBQYXJlbnREYXRhLT5tX0ZpbGxDb2xvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXBDb2xvckRhdGEgfHwgcENvbG9yRGF0YS0+bV9TdHJva2VDb2xvci5Jc051bGwoKSkgeworICAgICAgICAgICAgICAgIENQREZfQ29sb3JTdGF0ZURhdGEqIHBEYXRhID0gbV9Jbml0aWFsU3RhdGVzLm1fQ29sb3JTdGF0ZS5HZXRNb2RpZnkoKTsKKyAgICAgICAgICAgICAgICBwRGF0YS0+bV9TdHJva2VSR0IgPSBwUGFyZW50RGF0YS0+bV9GaWxsUkdCOworICAgICAgICAgICAgICAgIHBEYXRhLT5tX1N0cm9rZUNvbG9yLkNvcHkoJnBQYXJlbnREYXRhLT5tX1N0cm9rZUNvbG9yKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG1fSW5pdGlhbFN0YXRlcy5EZWZhdWx0U3RhdGVzKCk7CisgICAgfQorI2lmIGRlZmluZWQoX0ZQREZBUElfTUlOSV8pfHxkZWZpbmVkKF9GWENPUkVfTElNSVRFRF9DUFVfKQorICAgIG1fSGFsZnRvbmVMaW1pdCA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UmVuZGVyTW9kdWxlKCktPkdldENvbmZpZygpLT5tX0hhbGZ0b25lTGltaXQ7CisgICAgaWYgKHBPcHRpb25zICYmIHBPcHRpb25zLT5tX0hhbGZ0b25lTGltaXQgPj0gMCkgeworICAgICAgICBtX0hhbGZ0b25lTGltaXQgPSBwT3B0aW9ucy0+bV9IYWxmdG9uZUxpbWl0OworICAgIH0KKyNlbmRpZgorICAgIG1fcE9iamVjdFJlbmRlcmVyID0gTlVMTDsKKyAgICBtX1RyYW5zcGFyZW5jeSA9IHRyYW5zcGFyZW5jeTsKKyAgICByZXR1cm4gVFJVRTsKK30KK3ZvaWQgQ1BERl9SZW5kZXJTdGF0dXM6OlJlbmRlck9iamVjdExpc3QoY29uc3QgQ1BERl9QYWdlT2JqZWN0cyogcE9ianMsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKQoreworICAgIGlmIChtX0xldmVsID4gMzIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDRlhfRmxvYXRSZWN0IGNsaXBfcmVjdCA9IG1fcERldmljZS0+R2V0Q2xpcEJveCgpOworICAgIENGWF9BZmZpbmVNYXRyaXggZGV2aWNlMm9iamVjdDsKKyAgICBkZXZpY2Uyb2JqZWN0LlNldFJldmVyc2UoKnBPYmoyRGV2aWNlKTsKKyAgICBkZXZpY2Uyb2JqZWN0LlRyYW5zZm9ybVJlY3QoY2xpcF9yZWN0KTsKKyAgICBpbnQgaW5kZXggPSAwOworICAgIEZYX1BPU0lUSU9OIHBvcyA9IHBPYmpzLT5HZXRGaXJzdE9iamVjdFBvc2l0aW9uKCk7CisgICAgd2hpbGUocG9zKSB7CisgICAgICAgIGluZGV4ICsrOworICAgICAgICBDUERGX1BhZ2VPYmplY3QqIHBDdXJPYmogPSBwT2Jqcy0+R2V0TmV4dE9iamVjdChwb3MpOworICAgICAgICBpZiAocEN1ck9iaiA9PSBtX3BTdG9wT2JqKSB7CisgICAgICAgICAgICBtX2JTdG9wcGVkID0gVFJVRTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXBDdXJPYmopIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmKHBDdXJPYmogPT0gTlVMTCB8fCBwQ3VyT2JqLT5tX0xlZnQgPiBjbGlwX3JlY3QucmlnaHQgfHwgcEN1ck9iai0+bV9SaWdodCA8IGNsaXBfcmVjdC5sZWZ0IHx8CisgICAgICAgICAgICAgICAgcEN1ck9iai0+bV9Cb3R0b20gPiBjbGlwX3JlY3QudG9wIHx8IHBDdXJPYmotPm1fVG9wIDwgY2xpcF9yZWN0LmJvdHRvbSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgUmVuZGVyU2luZ2xlT2JqZWN0KHBDdXJPYmosIHBPYmoyRGV2aWNlKTsKKyAgICAgICAgaWYgKG1fYlN0b3BwZWQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KK3ZvaWQgQ1BERl9SZW5kZXJTdGF0dXM6OlJlbmRlclNpbmdsZU9iamVjdChjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKQoreworICAgIGlmIChtX0xldmVsID4gMzIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3BDdXJPYmogPSBwT2JqOworICAgIGlmIChtX09wdGlvbnMubV9wT0NDb250ZXh0ICYmIHBPYmotPm1fQ29udGVudE1hcmsuTm90TnVsbCgpKQorICAgICAgICBpZiAoIW1fT3B0aW9ucy5tX3BPQ0NvbnRleHQtPkNoZWNrT2JqZWN0VmlzaWJsZShwT2JqKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgUHJvY2Vzc0NsaXBQYXRoKHBPYmotPm1fQ2xpcFBhdGgsIHBPYmoyRGV2aWNlKTsKKyAgICBpZiAoUHJvY2Vzc1RyYW5zcGFyZW5jeShwT2JqLCBwT2JqMkRldmljZSkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBQcm9jZXNzT2JqZWN0Tm9DbGlwKHBPYmosIHBPYmoyRGV2aWNlKTsKK30KK0ZYX0JPT0wgQ1BERl9SZW5kZXJTdGF0dXM6OkNvbnRpbnVlU2luZ2xlT2JqZWN0KGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UsIElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIGlmIChtX3BPYmplY3RSZW5kZXJlcikgeworICAgICAgICBpZiAobV9wT2JqZWN0UmVuZGVyZXItPkNvbnRpbnVlKHBQYXVzZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIGlmICghbV9wT2JqZWN0UmVuZGVyZXItPm1fUmVzdWx0KSB7CisgICAgICAgICAgICBEcmF3T2JqV2l0aEJhY2tncm91bmQocE9iaiwgcE9iajJEZXZpY2UpOworICAgICAgICB9CisjaWZkZWYgX0ZQREZBUElfTUlOSV8KKyAgICAgICAgaWYgKG1fRGl0aGVyQml0cykgeworICAgICAgICAgICAgRGl0aGVyT2JqZWN0QXJlYShwT2JqLCBwT2JqMkRldmljZSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBkZWxldGUgbV9wT2JqZWN0UmVuZGVyZXI7CisgICAgICAgIG1fcE9iamVjdFJlbmRlcmVyID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBtX3BDdXJPYmogPSBwT2JqOworICAgIGlmIChtX09wdGlvbnMubV9wT0NDb250ZXh0ICYmIHBPYmotPm1fQ29udGVudE1hcmsuTm90TnVsbCgpKQorICAgICAgICBpZiAoIW1fT3B0aW9ucy5tX3BPQ0NvbnRleHQtPkNoZWNrT2JqZWN0VmlzaWJsZShwT2JqKSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgUHJvY2Vzc0NsaXBQYXRoKHBPYmotPm1fQ2xpcFBhdGgsIHBPYmoyRGV2aWNlKTsKKyAgICBpZiAoUHJvY2Vzc1RyYW5zcGFyZW5jeShwT2JqLCBwT2JqMkRldmljZSkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAocE9iai0+bV9UeXBlID09IFBERlBBR0VfSU1BR0UpIHsKKyAgICAgICAgbV9wT2JqZWN0UmVuZGVyZXIgPSBJUERGX09iamVjdFJlbmRlcmVyOjpDcmVhdGUocE9iai0+bV9UeXBlKTsKKyAgICAgICAgaWYgKCFtX3BPYmplY3RSZW5kZXJlci0+U3RhcnQodGhpcywgcE9iaiwgcE9iajJEZXZpY2UsIEZBTFNFKSkgeworICAgICAgICAgICAgaWYgKCFtX3BPYmplY3RSZW5kZXJlci0+bV9SZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBEcmF3T2JqV2l0aEJhY2tncm91bmQocE9iaiwgcE9iajJEZXZpY2UpOworICAgICAgICAgICAgfQorI2lmZGVmIF9GUERGQVBJX01JTklfCisgICAgICAgICAgICBpZiAobV9EaXRoZXJCaXRzKSB7CisgICAgICAgICAgICAgICAgRGl0aGVyT2JqZWN0QXJlYShwT2JqLCBwT2JqMkRldmljZSk7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIGRlbGV0ZSBtX3BPYmplY3RSZW5kZXJlcjsKKyAgICAgICAgICAgIG1fcE9iamVjdFJlbmRlcmVyID0gTlVMTDsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQ29udGludWVTaW5nbGVPYmplY3QocE9iaiwgcE9iajJEZXZpY2UsIHBQYXVzZSk7CisgICAgfQorICAgIFByb2Nlc3NPYmplY3ROb0NsaXAocE9iaiwgcE9iajJEZXZpY2UpOworICAgIHJldHVybiBGQUxTRTsKK30KK0lQREZfT2JqZWN0UmVuZGVyZXIqIElQREZfT2JqZWN0UmVuZGVyZXI6OkNyZWF0ZShpbnQgdHlwZSkKK3sKKyAgICBJUERGX09iamVjdFJlbmRlcmVyKiBwUmVuZGVyZXIgPSBOVUxMOworICAgIGlmICh0eXBlID09IFBERlBBR0VfSU1BR0UpIHsKKyAgICAgICAgcFJlbmRlcmVyID0gRlhfTkVXIENQREZfSW1hZ2VSZW5kZXJlcjsKKyAgICB9CisgICAgcmV0dXJuIHBSZW5kZXJlcjsKK30KK0ZYX0JPT0wgQ1BERl9SZW5kZXJTdGF0dXM6OkdldE9iamVjdENsaXBwZWRSZWN0KGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UsIEZYX0JPT0wgYkxvZ2ljYWwsIEZYX1JFQ1QgJnJlY3QpIGNvbnN0Cit7CisgICAgcmVjdCA9IHBPYmotPkdldEJCb3gocE9iajJEZXZpY2UpOworICAgIEZYX1JFQ1QgcnRDbGlwID0gbV9wRGV2aWNlLT5HZXRDbGlwQm94KCk7CisgICAgaWYgKCFiTG9naWNhbCkgeworICAgICAgICBDRlhfTWF0cml4IGRDVE0gPSBtX3BEZXZpY2UtPkdldENUTSgpOworICAgICAgICBGWF9GTE9BVCBhID0gRlhTWVNfZmFicyhkQ1RNLmEpOworICAgICAgICBGWF9GTE9BVCBkID0gRlhTWVNfZmFicyhkQ1RNLmQpOworICAgICAgICBpZiAoYSAhPSAxLjBmIHx8IGQgIT0gMS4wZikgeworICAgICAgICAgICAgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIChGWF9JTlQzMilGWFNZU19jZWlsKChGWF9GTE9BVClyZWN0LldpZHRoKCkgKiBhKTsKKyAgICAgICAgICAgIHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyAoRlhfSU5UMzIpRlhTWVNfY2VpbCgoRlhfRkxPQVQpcmVjdC5IZWlnaHQoKSAqIGQpOworICAgICAgICAgICAgcnRDbGlwLnJpZ2h0ID0gcnRDbGlwLmxlZnQgKyAoRlhfSU5UMzIpRlhTWVNfY2VpbCgoRlhfRkxPQVQpcnRDbGlwLldpZHRoKCkgKiBhKTsKKyAgICAgICAgICAgIHJ0Q2xpcC5ib3R0b20gPSBydENsaXAudG9wICsgKEZYX0lOVDMyKUZYU1lTX2NlaWwoKEZYX0ZMT0FUKXJ0Q2xpcC5IZWlnaHQoKSAqIGQpOworICAgICAgICB9CisgICAgfQorICAgIHJlY3QuSW50ZXJzZWN0KHJ0Q2xpcCk7CisgICAgcmV0dXJuIHJlY3QuSXNFbXB0eSgpOworfQordm9pZCBDUERGX1JlbmRlclN0YXR1czo6RGl0aGVyT2JqZWN0QXJlYShjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKQoreworICAgIENGWF9ESUJpdG1hcCogcEJpdG1hcCA9IG1fcERldmljZS0+R2V0Qml0bWFwKCk7CisgICAgaWYgKHBCaXRtYXAgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX1JFQ1QgcmVjdDsKKyAgICBpZiAoR2V0T2JqZWN0Q2xpcHBlZFJlY3QocE9iaiwgcE9iajJEZXZpY2UsIEZBTFNFLCByZWN0KSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX0RpdGhlckJpdHMgPT0gMikgeworICAgICAgICBzdGF0aWMgRlhfQVJHQiBwYWxbNF0gPSB7MCwgODUsIDE3MCwgMjU1fTsKKyAgICAgICAgcEJpdG1hcC0+RGl0aGVyRlMocGFsLCA0LCAmcmVjdCk7CisgICAgfSBlbHNlIGlmIChtX0RpdGhlckJpdHMgPT0gMykgeworICAgICAgICBzdGF0aWMgRlhfQVJHQiBwYWxbOF0gPSB7MCwgMzYsIDczLCAxMDksIDE0NiwgMTgyLCAyMTksIDI1NX07CisgICAgICAgIHBCaXRtYXAtPkRpdGhlckZTKHBhbCwgOCwgJnJlY3QpOworICAgIH0gZWxzZSBpZiAobV9EaXRoZXJCaXRzID09IDQpIHsKKyAgICAgICAgc3RhdGljIEZYX0FSR0IgcGFsWzE2XSA9IHswLCAxNywgMzQsIDUxLCA2OCwgODUsIDEwMiwgMTE5LCAxMzYsIDE1MywgMTcwLCAxODcsIDIwNCwgMjIxLCAyMzgsIDI1NX07CisgICAgICAgIHBCaXRtYXAtPkRpdGhlckZTKHBhbCwgMTYsICZyZWN0KTsKKyAgICB9Cit9Cit2b2lkIENQREZfUmVuZGVyU3RhdHVzOjpQcm9jZXNzT2JqZWN0Tm9DbGlwKGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpCit7CisgICAgRlhfQk9PTCBiUmV0ID0gRkFMU0U7CisgICAgc3dpdGNoIChwT2JqLT5tX1R5cGUpIHsKKyAgICAgICAgY2FzZSBQREZQQUdFX1RFWFQ6CisgICAgICAgICAgICBiUmV0ID0gUHJvY2Vzc1RleHQoKENQREZfVGV4dE9iamVjdCopcE9iaiwgcE9iajJEZXZpY2UsIE5VTEwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUERGUEFHRV9QQVRIOgorICAgICAgICAgICAgYlJldCA9IFByb2Nlc3NQYXRoKChDUERGX1BhdGhPYmplY3QqKXBPYmosIHBPYmoyRGV2aWNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBERlBBR0VfSU1BR0U6CisgICAgICAgICAgICBiUmV0ID0gUHJvY2Vzc0ltYWdlKChDUERGX0ltYWdlT2JqZWN0KilwT2JqLCBwT2JqMkRldmljZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQREZQQUdFX1NIQURJTkc6CisgICAgICAgICAgICBiUmV0ID0gUHJvY2Vzc1NoYWRpbmcoKENQREZfU2hhZGluZ09iamVjdCopcE9iaiwgcE9iajJEZXZpY2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUERGUEFHRV9GT1JNOgorICAgICAgICAgICAgYlJldCA9IFByb2Nlc3NGb3JtKChDUERGX0Zvcm1PYmplY3QqKXBPYmosIHBPYmoyRGV2aWNlKTsKKyAgICAgICAgICAgIGJyZWFrOworI2lmIGRlZmluZWQoX0ZQREZBUElfTUlOSV8pCisgICAgICAgIGNhc2UgUERGUEFHRV9JTkxJTkVTOgorICAgICAgICAgICAgYlJldCA9IFByb2Nlc3NJbmxpbmVzKChDUERGX0lubGluZUltYWdlcyopcE9iaiwgcE9iajJEZXZpY2UpOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICB9CisgICAgaWYgKCFiUmV0KSB7CisgICAgICAgIERyYXdPYmpXaXRoQmFja2dyb3VuZChwT2JqLCBwT2JqMkRldmljZSk7CisgICAgfQorfQorRlhfQk9PTCBDUERGX1JlbmRlclN0YXR1czo6RHJhd09ialdpdGhCbGVuZChjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKQoreworICAgIEZYX0JPT0wgYlJldCA9IEZBTFNFOworICAgIHN3aXRjaCAocE9iai0+bV9UeXBlKSB7CisgICAgICAgIGNhc2UgUERGUEFHRV9QQVRIOgorICAgICAgICAgICAgYlJldCA9IFByb2Nlc3NQYXRoKChDUERGX1BhdGhPYmplY3QqKXBPYmosIHBPYmoyRGV2aWNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBERlBBR0VfSU1BR0U6CisgICAgICAgICAgICBiUmV0ID0gUHJvY2Vzc0ltYWdlKChDUERGX0ltYWdlT2JqZWN0ICopcE9iaiwgcE9iajJEZXZpY2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUERGUEFHRV9GT1JNOgorICAgICAgICAgICAgYlJldCA9IFByb2Nlc3NGb3JtKChDUERGX0Zvcm1PYmplY3QqKXBPYmosIHBPYmoyRGV2aWNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gYlJldDsKK30KK3ZvaWQgQ1BERl9SZW5kZXJTdGF0dXM6OkdldFNjYWxlZE1hdHJpeChDRlhfTWF0cml4ICZtYXRyaXgpIGNvbnN0Cit7CisgICAgQ0ZYX01hdHJpeCBkQ1RNID0gbV9wRGV2aWNlLT5HZXRDVE0oKTsKKyAgICBtYXRyaXguYSAqPSBGWFNZU19mYWJzKGRDVE0uYSk7CisgICAgbWF0cml4LmQgKj0gRlhTWVNfZmFicyhkQ1RNLmQpOworfQordm9pZCBDUERGX1JlbmRlclN0YXR1czo6RHJhd09ialdpdGhCYWNrZ3JvdW5kKGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpCit7CisjaWYgIWRlZmluZWQoX0ZQREZBUElfTUlOSV8pIHx8IGRlZmluZWQoX0ZYQ09SRV9GRUFUVVJFX0FMTF8pCisgICAgRlhfUkVDVCByZWN0OworICAgIGlmIChHZXRPYmplY3RDbGlwcGVkUmVjdChwT2JqLCBwT2JqMkRldmljZSwgRkFMU0UsIHJlY3QpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IHJlcyA9IDMwMDsKKyAgICBpZiAocE9iai0+bV9UeXBlID09IFBERlBBR0VfSU1BR0UgJiYgbV9wRGV2aWNlLT5HZXREZXZpY2VDYXBzKEZYRENfREVWSUNFX0NMQVNTKSA9PSBGWERDX1BSSU5URVIpIHsKKyAgICAgICAgcmVzID0gMDsKKyAgICB9CisgICAgQ1BERl9TY2FsZWRSZW5kZXJCdWZmZXIgYnVmZmVyOworICAgIGlmICghYnVmZmVyLkluaXRpYWxpemUobV9wQ29udGV4dCwgbV9wRGV2aWNlLCAmcmVjdCwgcE9iaiwgJm1fT3B0aW9ucywgcmVzKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4ID0gKnBPYmoyRGV2aWNlOworICAgIG1hdHJpeC5Db25jYXQoKmJ1ZmZlci5HZXRNYXRyaXgoKSk7CisgICAgR2V0U2NhbGVkTWF0cml4KG1hdHJpeCk7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybVJlc291cmNlID0gTlVMTDsKKyAgICBpZiAocE9iai0+bV9UeXBlID09IFBERlBBR0VfRk9STSkgeworICAgICAgICBDUERGX0Zvcm1PYmplY3QqIHBGb3JtT2JqID0gKENQREZfRm9ybU9iamVjdCopcE9iajsKKyAgICAgICAgaWYgKHBGb3JtT2JqLT5tX3BGb3JtICYmIHBGb3JtT2JqLT5tX3BGb3JtLT5tX3BGb3JtRGljdCkgeworICAgICAgICAgICAgcEZvcm1SZXNvdXJjZSA9IHBGb3JtT2JqLT5tX3BGb3JtLT5tX3BGb3JtRGljdC0+R2V0RGljdChGWF9CU1RSQygiUmVzb3VyY2VzIikpOworICAgICAgICB9CisgICAgfQorICAgIENQREZfUmVuZGVyU3RhdHVzIHN0YXR1czsKKyAgICBzdGF0dXMuSW5pdGlhbGl6ZShtX0xldmVsICsgMSwgbV9wQ29udGV4dCwgYnVmZmVyLkdldERldmljZSgpLCBidWZmZXIuR2V0TWF0cml4KCksIE5VTEwsIE5VTEwsIE5VTEwsICZtX09wdGlvbnMsIG1fVHJhbnNwYXJlbmN5LCBtX2JEcm9wT2JqZWN0cywgcEZvcm1SZXNvdXJjZSk7CisgICAgc3RhdHVzLlJlbmRlclNpbmdsZU9iamVjdChwT2JqLCAmbWF0cml4KTsKKyAgICBidWZmZXIuT3V0cHV0VG9EZXZpY2UoKTsKKyNlbmRpZgorfQorRlhfQk9PTCBDUERGX1JlbmRlclN0YXR1czo6UHJvY2Vzc0Zvcm0oQ1BERl9Gb3JtT2JqZWN0KiBwRm9ybU9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpCit7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwT0MgPSBwRm9ybU9iai0+bV9wRm9ybS0+bV9wRm9ybURpY3QtPkdldERpY3QoRlhfQlNUUkMoIk9DIikpOworICAgIGlmIChwT0MgJiYgbV9PcHRpb25zLm1fcE9DQ29udGV4dCAmJiAhbV9PcHRpb25zLm1fcE9DQ29udGV4dC0+Q2hlY2tPQ0dWaXNpYmxlKHBPQykpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4ID0gcEZvcm1PYmotPm1fRm9ybU1hdHJpeDsKKyAgICBtYXRyaXguQ29uY2F0KCpwT2JqMkRldmljZSk7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUmVzb3VyY2VzID0gTlVMTDsKKyAgICBpZiAocEZvcm1PYmotPm1fcEZvcm0gJiYgcEZvcm1PYmotPm1fcEZvcm0tPm1fcEZvcm1EaWN0KSB7CisgICAgICAgIHBSZXNvdXJjZXMgPSBwRm9ybU9iai0+bV9wRm9ybS0+bV9wRm9ybURpY3QtPkdldERpY3QoRlhfQlNUUkMoIlJlc291cmNlcyIpKTsKKyAgICB9CisgICAgQ1BERl9SZW5kZXJTdGF0dXMgc3RhdHVzOworICAgIHN0YXR1cy5Jbml0aWFsaXplKG1fTGV2ZWwgKyAxLCBtX3BDb250ZXh0LCBtX3BEZXZpY2UsIE5VTEwsIG1fcFN0b3BPYmosCisgICAgICAgICAgICAgICAgICAgICAgdGhpcywgcEZvcm1PYmosICZtX09wdGlvbnMsIG1fVHJhbnNwYXJlbmN5LCBtX2JEcm9wT2JqZWN0cywgcFJlc291cmNlcywgVFJVRSk7CisgICAgc3RhdHVzLm1fY3VyQmxlbmQgPSBtX2N1ckJsZW5kOworICAgIG1fcERldmljZS0+U2F2ZVN0YXRlKCk7CisgICAgc3RhdHVzLlJlbmRlck9iamVjdExpc3QocEZvcm1PYmotPm1fcEZvcm0sICZtYXRyaXgpOworICAgIG1fYlN0b3BwZWQgPSBzdGF0dXMubV9iU3RvcHBlZDsKKyAgICBtX3BEZXZpY2UtPlJlc3RvcmVTdGF0ZSgpOworICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBJc0F2YWlsYWJsZU1hdHJpeChjb25zdCBDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpCit7CisgICAgaWYgKG1hdHJpeC5hID09IDAgfHwgbWF0cml4LmQgPT0gMCkgeworICAgICAgICByZXR1cm4gbWF0cml4LmIgIT0gMCAmJiBtYXRyaXguYyAhPSAwOworICAgIH0KKyAgICBpZiAobWF0cml4LmIgPT0gMCB8fCBtYXRyaXguYyA9PSAwKSB7CisgICAgICAgIHJldHVybiBtYXRyaXguYSAhPSAwICYmIG1hdHJpeC5kICE9IDA7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDUERGX1JlbmRlclN0YXR1czo6UHJvY2Vzc1BhdGgoQ1BERl9QYXRoT2JqZWN0KiBwUGF0aE9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpCit7CisgICAgaW50IEZpbGxUeXBlID0gcFBhdGhPYmotPm1fRmlsbFR5cGU7CisgICAgRlhfQk9PTCBiU3Ryb2tlID0gcFBhdGhPYmotPm1fYlN0cm9rZTsKKyAgICBQcm9jZXNzUGF0aFBhdHRlcm4ocFBhdGhPYmosIHBPYmoyRGV2aWNlLCBGaWxsVHlwZSwgYlN0cm9rZSk7CisgICAgaWYgKEZpbGxUeXBlID09IDAgJiYgIWJTdHJva2UpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIEZYX0RXT1JEIGZpbGxfYXJnYiA9IDA7CisgICAgaWYgKEZpbGxUeXBlKSB7CisgICAgICAgIGZpbGxfYXJnYiA9IEdldEZpbGxBcmdiKHBQYXRoT2JqKTsKKyAgICB9CisgICAgRlhfRFdPUkQgc3Ryb2tlX2FyZ2IgPSAwOworICAgIGlmIChiU3Ryb2tlKSB7CisgICAgICAgIHN0cm9rZV9hcmdiID0gR2V0U3Ryb2tlQXJnYihwUGF0aE9iaik7CisgICAgfQorICAgIENGWF9BZmZpbmVNYXRyaXggcGF0aF9tYXRyaXggPSBwUGF0aE9iai0+bV9NYXRyaXg7CisgICAgcGF0aF9tYXRyaXguQ29uY2F0KCpwT2JqMkRldmljZSk7CisgICAgaWYgKCFJc0F2YWlsYWJsZU1hdHJpeChwYXRoX21hdHJpeCkpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGlmIChGaWxsVHlwZSAmJiAobV9PcHRpb25zLm1fRmxhZ3MgJiBSRU5ERVJfUkVDVF9BQSkpIHsKKyAgICAgICAgRmlsbFR5cGUgfD0gRlhGSUxMX1JFQ1RfQUE7CisgICAgfQorICAgIGlmIChtX09wdGlvbnMubV9GbGFncyAmIFJFTkRFUl9GSUxMX0ZVTExDT1ZFUikgeworICAgICAgICBGaWxsVHlwZSB8PSBGWEZJTExfRlVMTENPVkVSOworICAgIH0KKyAgICBpZiAobV9PcHRpb25zLm1fRmxhZ3MgJiBSRU5ERVJfTk9QQVRIU01PT1RIKSB7CisgICAgICAgIEZpbGxUeXBlIHw9IEZYRklMTF9OT1BBVEhTTU9PVEg7CisgICAgfQorICAgIGlmIChiU3Ryb2tlKSB7CisgICAgICAgIEZpbGxUeXBlIHw9IEZYX0ZJTExfU1RST0tFOworICAgIH0KKyNpZiAhZGVmaW5lZChfRlBERkFQSV9NSU5JXykgfHwgZGVmaW5lZChfRlhDT1JFX0ZFQVRVUkVfQUxMXykKKyAgICBjb25zdCBDUERGX0dlbmVyYWxTdGF0ZURhdGEqIHBHZW5lcmFsRGF0YSA9ICgoQ1BERl9QYWdlT2JqZWN0KilwUGF0aE9iaiktPm1fR2VuZXJhbFN0YXRlOworICAgIGlmIChwR2VuZXJhbERhdGEgJiYgcEdlbmVyYWxEYXRhLT5tX1N0cm9rZUFkanVzdCkgeworICAgICAgICBGaWxsVHlwZSB8PSBGWF9TVFJPS0VfQURKVVNUOworICAgIH0KKyNlbmRpZgorICAgIGlmIChtX3BUeXBlM0NoYXIpIHsKKyAgICAgICAgRmlsbFR5cGUgfD0gRlhfRklMTF9URVhUX01PREU7CisgICAgfQorICAgIENGWF9HcmFwaFN0YXRlRGF0YSBncmFwaFN0YXRlKCpwUGF0aE9iai0+bV9HcmFwaFN0YXRlKTsKKyAgICBpZiAobV9PcHRpb25zLm1fRmxhZ3MgJiBSRU5ERVJfVEhJTkxJTkUpIHsKKyAgICAgICAgZ3JhcGhTdGF0ZS5tX0xpbmVXaWR0aCA9IDA7CisgICAgfQorICAgIHJldHVybiBtX3BEZXZpY2UtPkRyYXdQYXRoKHBQYXRoT2JqLT5tX1BhdGgsICZwYXRoX21hdHJpeCwgJmdyYXBoU3RhdGUsIGZpbGxfYXJnYiwgc3Ryb2tlX2FyZ2IsIEZpbGxUeXBlLCAwLCBOVUxMLCBtX2N1ckJsZW5kKTsKK30KK0NQREZfVHJhbnNmZXJGdW5jKiBDUERGX1JlbmRlclN0YXR1czo6R2V0VHJhbnNmZXJGdW5jKENQREZfT2JqZWN0KiBwT2JqKSBjb25zdAoreworICAgIEFTU0VSVChwT2JqICE9IE5VTEwpOworICAgIENQREZfRG9jUmVuZGVyRGF0YSogcERvY0NhY2hlID0gbV9wQ29udGV4dC0+bV9wRG9jdW1lbnQtPkdldFJlbmRlckRhdGEoKTsKKyAgICBpZiAoIXBEb2NDYWNoZSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHBEb2NDYWNoZS0+R2V0VHJhbnNmZXJGdW5jKHBPYmopOworfQorRlhfQVJHQiBDUERGX1JlbmRlclN0YXR1czo6R2V0RmlsbEFyZ2IoY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwT2JqLCBGWF9CT09MIGJUeXBlMykgY29uc3QKK3sKKyAgICBDUERGX0NvbG9yU3RhdGVEYXRhKiBwQ29sb3JEYXRhID0gKENQREZfQ29sb3JTdGF0ZURhdGEqKShjb25zdCBDUERGX0NvbG9yU3RhdGVEYXRhKilwT2JqLT5tX0NvbG9yU3RhdGU7CisgICAgaWYgKG1fcFR5cGUzQ2hhciAmJiAhYlR5cGUzICYmICghbV9wVHlwZTNDaGFyLT5tX2JDb2xvcmVkIHx8IChtX3BUeXBlM0NoYXItPm1fYkNvbG9yZWQgJiYgKCFwQ29sb3JEYXRhIHx8IHBDb2xvckRhdGEtPm1fRmlsbENvbG9yLklzTnVsbCgpKSkpKSB7CisgICAgICAgIHJldHVybiBtX1QzRmlsbENvbG9yOworICAgIH0gZWxzZSBpZiAoIXBDb2xvckRhdGEgfHwgcENvbG9yRGF0YS0+bV9GaWxsQ29sb3IuSXNOdWxsKCkpIHsKKyAgICAgICAgcENvbG9yRGF0YSA9IChDUERGX0NvbG9yU3RhdGVEYXRhKikoY29uc3QgQ1BERl9Db2xvclN0YXRlRGF0YSopbV9Jbml0aWFsU3RhdGVzLm1fQ29sb3JTdGF0ZTsKKyAgICB9CisgICAgRlhfQ09MT1JSRUYgcmdiID0gcENvbG9yRGF0YS0+bV9GaWxsUkdCOworICAgIGlmIChyZ2IgPT0gKEZYX0RXT1JEKSAtIDEpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGNvbnN0IENQREZfR2VuZXJhbFN0YXRlRGF0YSogcEdlbmVyYWxEYXRhID0gcE9iai0+bV9HZW5lcmFsU3RhdGU7CisgICAgaW50IGFscGhhOworICAgIGlmIChwR2VuZXJhbERhdGEpIHsKKyAgICAgICAgYWxwaGEgPSAoRlhfSU5UMzIpKHBHZW5lcmFsRGF0YS0+bV9GaWxsQWxwaGEgKiAyNTUpOworI2lmbmRlZiBfRlBERkFQSV9NSU5JXworICAgICAgICBpZiAocEdlbmVyYWxEYXRhLT5tX3BUUikgeworICAgICAgICAgICAgaWYgKCFwR2VuZXJhbERhdGEtPm1fcFRyYW5zZmVyRnVuYykgeworICAgICAgICAgICAgICAgICgoQ1BERl9HZW5lcmFsU3RhdGVEYXRhKilwR2VuZXJhbERhdGEpLT5tX3BUcmFuc2ZlckZ1bmMgPSBHZXRUcmFuc2ZlckZ1bmMocEdlbmVyYWxEYXRhLT5tX3BUUik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocEdlbmVyYWxEYXRhLT5tX3BUcmFuc2ZlckZ1bmMpIHsKKyAgICAgICAgICAgICAgICByZ2IgPSBwR2VuZXJhbERhdGEtPm1fcFRyYW5zZmVyRnVuYy0+VHJhbnNsYXRlQ29sb3IocmdiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgYWxwaGEgPSAyNTU7CisgICAgfQorICAgIHJldHVybiBtX09wdGlvbnMuVHJhbnNsYXRlQ29sb3IoQXJnYkVuY29kZShhbHBoYSwgcmdiKSk7Cit9CitGWF9BUkdCIENQREZfUmVuZGVyU3RhdHVzOjpHZXRTdHJva2VBcmdiKGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaikgY29uc3QKK3sKKyAgICBDUERGX0NvbG9yU3RhdGVEYXRhKiBwQ29sb3JEYXRhID0gKENQREZfQ29sb3JTdGF0ZURhdGEqKShjb25zdCBDUERGX0NvbG9yU3RhdGVEYXRhKilwT2JqLT5tX0NvbG9yU3RhdGU7CisgICAgaWYgKG1fcFR5cGUzQ2hhciAmJiAoIW1fcFR5cGUzQ2hhci0+bV9iQ29sb3JlZCB8fCAobV9wVHlwZTNDaGFyLT5tX2JDb2xvcmVkICYmICghcENvbG9yRGF0YSB8fCBwQ29sb3JEYXRhLT5tX1N0cm9rZUNvbG9yLklzTnVsbCgpKSkpKSB7CisgICAgICAgIHJldHVybiBtX1QzRmlsbENvbG9yOworICAgIH0gZWxzZSBpZiAoIXBDb2xvckRhdGEgfHwgcENvbG9yRGF0YS0+bV9TdHJva2VDb2xvci5Jc051bGwoKSkgeworICAgICAgICBwQ29sb3JEYXRhID0gKENQREZfQ29sb3JTdGF0ZURhdGEqKShjb25zdCBDUERGX0NvbG9yU3RhdGVEYXRhKiltX0luaXRpYWxTdGF0ZXMubV9Db2xvclN0YXRlOworICAgIH0KKyAgICBGWF9DT0xPUlJFRiByZ2IgPSBwQ29sb3JEYXRhLT5tX1N0cm9rZVJHQjsKKyAgICBpZiAocmdiID09IChGWF9EV09SRCkgLSAxKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBjb25zdCBDUERGX0dlbmVyYWxTdGF0ZURhdGEqIHBHZW5lcmFsRGF0YSA9IHBPYmotPm1fR2VuZXJhbFN0YXRlOworICAgIGludCBhbHBoYTsKKyAgICBpZiAocEdlbmVyYWxEYXRhKSB7CisgICAgICAgIGFscGhhID0gKEZYX0lOVDMyKShwR2VuZXJhbERhdGEtPm1fU3Ryb2tlQWxwaGEgKiAyNTUpOworI2lmbmRlZiBfRlBERkFQSV9NSU5JXworICAgICAgICBpZiAocEdlbmVyYWxEYXRhLT5tX3BUUikgeworICAgICAgICAgICAgaWYgKCFwR2VuZXJhbERhdGEtPm1fcFRyYW5zZmVyRnVuYykgeworICAgICAgICAgICAgICAgICgoQ1BERl9HZW5lcmFsU3RhdGVEYXRhKilwR2VuZXJhbERhdGEpLT5tX3BUcmFuc2ZlckZ1bmMgPSBHZXRUcmFuc2ZlckZ1bmMocEdlbmVyYWxEYXRhLT5tX3BUUik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocEdlbmVyYWxEYXRhLT5tX3BUcmFuc2ZlckZ1bmMpIHsKKyAgICAgICAgICAgICAgICByZ2IgPSBwR2VuZXJhbERhdGEtPm1fcFRyYW5zZmVyRnVuYy0+VHJhbnNsYXRlQ29sb3IocmdiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgYWxwaGEgPSAyNTU7CisgICAgfQorICAgIHJldHVybiBtX09wdGlvbnMuVHJhbnNsYXRlQ29sb3IoQXJnYkVuY29kZShhbHBoYSwgcmdiKSk7Cit9Cit2b2lkIENQREZfUmVuZGVyU3RhdHVzOjpQcm9jZXNzQ2xpcFBhdGgoQ1BERl9DbGlwUGF0aCBDbGlwUGF0aCwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpCit7CisgICAgaWYgKENsaXBQYXRoLklzTnVsbCgpKSB7CisgICAgICAgIGlmIChtX0xhc3RDbGlwUGF0aC5Jc051bGwoKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fcERldmljZS0+UmVzdG9yZVN0YXRlKFRSVUUpOworICAgICAgICBtX0xhc3RDbGlwUGF0aC5TZXROdWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fTGFzdENsaXBQYXRoID09IENsaXBQYXRoKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9MYXN0Q2xpcFBhdGggPSBDbGlwUGF0aDsKKyAgICBtX3BEZXZpY2UtPlJlc3RvcmVTdGF0ZShUUlVFKTsKKyAgICBpbnQgbkNsaXBQYXRoID0gQ2xpcFBhdGguR2V0UGF0aENvdW50KCk7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IG5DbGlwUGF0aDsgaSsrKSB7CisgICAgICAgIGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhID0gQ2xpcFBhdGguR2V0UGF0aChpKTsKKyAgICAgICAgaWYgKHBQYXRoRGF0YSA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocFBhdGhEYXRhLT5HZXRQb2ludENvdW50KCkgPT0gMCkgeworICAgICAgICAgICAgQ0ZYX1BhdGhEYXRhIEVtcHR5UGF0aDsKKyAgICAgICAgICAgIEVtcHR5UGF0aC5BcHBlbmRSZWN0KC0xLCAtMSwgMCwgMCk7CisgICAgICAgICAgICBpbnQgZmlsbF9tb2RlID0gRlhGSUxMX1dJTkRJTkc7CisgICAgICAgICAgICBtX3BEZXZpY2UtPlNldENsaXBfUGF0aEZpbGwoJkVtcHR5UGF0aCwgTlVMTCwgZmlsbF9tb2RlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBDbGlwVHlwZSA9IENsaXBQYXRoLkdldENsaXBUeXBlKGkpOworICAgICAgICAgICAgbV9wRGV2aWNlLT5TZXRDbGlwX1BhdGhGaWxsKHBQYXRoRGF0YSwgcE9iajJEZXZpY2UsIENsaXBUeXBlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpbnQgdGV4dGNvdW50ID0gQ2xpcFBhdGguR2V0VGV4dENvdW50KCk7CisgICAgaWYgKHRleHRjb3VudCA9PSAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fcERldmljZS0+R2V0RGV2aWNlQ2xhc3MoKSA9PSBGWERDX0RJU1BMQVkgJiYgIShtX3BEZXZpY2UtPkdldERldmljZUNhcHMoRlhEQ19SRU5ERVJfQ0FQUykgJiBGWFJDX1NPRlRfQ0xJUCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDRlhfUGF0aERhdGEqIHBUZXh0Q2xpcHBpbmdQYXRoID0gTlVMTDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdGV4dGNvdW50OyBpICsrKSB7CisgICAgICAgIENQREZfVGV4dE9iamVjdCogcFRleHQgPSBDbGlwUGF0aC5HZXRUZXh0KGkpOworICAgICAgICBpZiAocFRleHQgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKHBUZXh0Q2xpcHBpbmdQYXRoKSB7CisgICAgICAgICAgICAgICAgaW50IGZpbGxfbW9kZSA9IEZYRklMTF9XSU5ESU5HOworICAgICAgICAgICAgICAgIGlmIChtX09wdGlvbnMubV9GbGFncyAmIFJFTkRFUl9OT1RFWFRTTU9PVEgpIHsKKyAgICAgICAgICAgICAgICAgICAgZmlsbF9tb2RlIHw9IEZYRklMTF9OT1BBVEhTTU9PVEg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fcERldmljZS0+U2V0Q2xpcF9QYXRoRmlsbChwVGV4dENsaXBwaW5nUGF0aCwgTlVMTCwgZmlsbF9tb2RlKTsKKyAgICAgICAgICAgICAgICBkZWxldGUgcFRleHRDbGlwcGluZ1BhdGg7CisgICAgICAgICAgICAgICAgcFRleHRDbGlwcGluZ1BhdGggPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHBUZXh0Q2xpcHBpbmdQYXRoID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBwVGV4dENsaXBwaW5nUGF0aCA9IEZYX05FVyBDRlhfUGF0aERhdGE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQcm9jZXNzVGV4dChwVGV4dCwgcE9iajJEZXZpY2UsIHBUZXh0Q2xpcHBpbmdQYXRoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocFRleHRDbGlwcGluZ1BhdGgpIHsKKyAgICAgICAgZGVsZXRlIHBUZXh0Q2xpcHBpbmdQYXRoOworICAgIH0KK30KK3ZvaWQgQ1BERl9SZW5kZXJTdGF0dXM6OkRyYXdDbGlwUGF0aChDUERGX0NsaXBQYXRoIENsaXBQYXRoLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSkKK3sKKyAgICBpZiAoQ2xpcFBhdGguSXNOdWxsKCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgZmlsbF9tb2RlID0gMDsKKyAgICBpZiAobV9PcHRpb25zLm1fRmxhZ3MgJiBSRU5ERVJfTk9QQVRIU01PT1RIKSB7CisgICAgICAgIGZpbGxfbW9kZSB8PSBGWEZJTExfTk9QQVRIU01PT1RIOworICAgIH0KKyAgICBpbnQgbkNsaXBQYXRoID0gQ2xpcFBhdGguR2V0UGF0aENvdW50KCk7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IG5DbGlwUGF0aDsgaSsrKSB7CisgICAgICAgIGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhID0gQ2xpcFBhdGguR2V0UGF0aChpKTsKKyAgICAgICAgaWYgKHBQYXRoRGF0YSA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBDRlhfR3JhcGhTdGF0ZURhdGEgc3Ryb2tlX3N0YXRlOworICAgICAgICBpZiAobV9PcHRpb25zLm1fRmxhZ3MgJiBSRU5ERVJfVEhJTkxJTkUpIHsKKyAgICAgICAgICAgIHN0cm9rZV9zdGF0ZS5tX0xpbmVXaWR0aCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgbV9wRGV2aWNlLT5EcmF3UGF0aChwUGF0aERhdGEsIHBPYmoyRGV2aWNlLCAmc3Ryb2tlX3N0YXRlLCAwLCAweGZmZmYwMDAwLCBmaWxsX21vZGUpOworICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9SZW5kZXJTdGF0dXM6OlNlbGVjdENsaXBQYXRoKENQREZfUGF0aE9iamVjdCogcFBhdGhPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlLCBGWF9CT09MIGJTdHJva2UpCit7CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBwYXRoX21hdHJpeCA9IHBQYXRoT2JqLT5tX01hdHJpeDsKKyAgICBwYXRoX21hdHJpeC5Db25jYXQoKnBPYmoyRGV2aWNlKTsKKyAgICBpZiAoYlN0cm9rZSkgeworICAgICAgICBDRlhfR3JhcGhTdGF0ZURhdGEgZ3JhcGhTdGF0ZSgqcFBhdGhPYmotPm1fR3JhcGhTdGF0ZSk7CisgICAgICAgIGlmIChtX09wdGlvbnMubV9GbGFncyAmIFJFTkRFUl9USElOTElORSkgeworICAgICAgICAgICAgZ3JhcGhTdGF0ZS5tX0xpbmVXaWR0aCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fcERldmljZS0+U2V0Q2xpcF9QYXRoU3Ryb2tlKHBQYXRoT2JqLT5tX1BhdGgsICZwYXRoX21hdHJpeCwgJmdyYXBoU3RhdGUpOworICAgIH0KKyAgICBpbnQgZmlsbF9tb2RlID0gcFBhdGhPYmotPm1fRmlsbFR5cGU7CisgICAgaWYgKG1fT3B0aW9ucy5tX0ZsYWdzICYgUkVOREVSX05PUEFUSFNNT09USCkgeworICAgICAgICBmaWxsX21vZGUgfD0gRlhGSUxMX05PUEFUSFNNT09USDsKKyAgICB9CisgICAgcmV0dXJuIG1fcERldmljZS0+U2V0Q2xpcF9QYXRoRmlsbChwUGF0aE9iai0+bV9QYXRoLCAmcGF0aF9tYXRyaXgsIGZpbGxfbW9kZSk7Cit9CitGWF9CT09MIENQREZfUmVuZGVyU3RhdHVzOjpQcm9jZXNzVHJhbnNwYXJlbmN5KGNvbnN0IENQREZfUGFnZU9iamVjdCogcFBhZ2VPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKQoreworICAgIGNvbnN0IENQREZfR2VuZXJhbFN0YXRlRGF0YSogcEdlbmVyYWxTdGF0ZSA9IHBQYWdlT2JqLT5tX0dlbmVyYWxTdGF0ZTsKKyAgICBpbnQgYmxlbmRfdHlwZSA9IHBHZW5lcmFsU3RhdGUgPyBwR2VuZXJhbFN0YXRlLT5tX0JsZW5kVHlwZSA6IEZYRElCX0JMRU5EX05PUk1BTDsKKyAgICBpZiAoYmxlbmRfdHlwZSA9PSBGWERJQl9CTEVORF9VTlNVUFBPUlRFRCkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwU01hc2tEaWN0ID0gcEdlbmVyYWxTdGF0ZSA/IChDUERGX0RpY3Rpb25hcnkqKXBHZW5lcmFsU3RhdGUtPm1fcFNvZnRNYXNrIDogTlVMTDsKKyAgICBpZiAocFNNYXNrRGljdCkgeworICAgICAgICBpZiAocFBhZ2VPYmotPm1fVHlwZSA9PSBQREZQQUdFX0lNQUdFICYmCisgICAgICAgICAgICAgICAgKChDUERGX0ltYWdlT2JqZWN0KilwUGFnZU9iaiktPm1fcEltYWdlLT5HZXREaWN0KCktPktleUV4aXN0KEZYX0JTVFJDKCJTTWFzayIpKSkgeworICAgICAgICAgICAgcFNNYXNrRGljdCA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybVJlc291cmNlID0gTlVMTDsKKyAgICBGWF9GTE9BVCBncm91cF9hbHBoYSA9IDEuMGY7CisgICAgaW50IFRyYW5zcGFyZW5jeSA9IG1fVHJhbnNwYXJlbmN5OworICAgIEZYX0JPT0wgYkdyb3VwVHJhbnNwYXJlbnQgPSBGQUxTRTsKKyAgICBpZiAocFBhZ2VPYmotPm1fVHlwZSA9PSBQREZQQUdFX0ZPUk0pIHsKKyAgICAgICAgQ1BERl9Gb3JtT2JqZWN0KiBwRm9ybU9iaiA9IChDUERGX0Zvcm1PYmplY3QqKXBQYWdlT2JqOworICAgICAgICBjb25zdCBDUERGX0dlbmVyYWxTdGF0ZURhdGEgKnBTdGF0ZURhdGEgPSBwRm9ybU9iai0+bV9HZW5lcmFsU3RhdGUuR2V0T2JqZWN0KCk7CisgICAgICAgIGlmIChwU3RhdGVEYXRhKSB7CisgICAgICAgICAgICBncm91cF9hbHBoYSA9IHBTdGF0ZURhdGEtPm1fRmlsbEFscGhhOworICAgICAgICB9CisgICAgICAgIFRyYW5zcGFyZW5jeSA9IHBGb3JtT2JqLT5tX3BGb3JtLT5tX1RyYW5zcGFyZW5jeTsKKyAgICAgICAgYkdyb3VwVHJhbnNwYXJlbnQgPSBUcmFuc3BhcmVuY3kgJiBQREZUUkFOU19JU09MQVRFRCA/IFRSVUUgOiBGQUxTRTsKKyAgICAgICAgaWYgKHBGb3JtT2JqLT5tX3BGb3JtLT5tX3BGb3JtRGljdCkgeworICAgICAgICAgICAgcEZvcm1SZXNvdXJjZSA9IHBGb3JtT2JqLT5tX3BGb3JtLT5tX3BGb3JtRGljdC0+R2V0RGljdCgiUmVzb3VyY2VzIik7CisgICAgICAgIH0KKyAgICB9CisgICAgRlhfQk9PTCBiVGV4dENsaXAgPSBGQUxTRTsKKyAgICBpZiAocFBhZ2VPYmotPm1fQ2xpcFBhdGguTm90TnVsbCgpICYmIHBQYWdlT2JqLT5tX0NsaXBQYXRoLkdldFRleHRDb3VudCgpICYmCisgICAgICAgICAgICBtX3BEZXZpY2UtPkdldERldmljZUNsYXNzKCkgPT0gRlhEQ19ESVNQTEFZICYmICEobV9wRGV2aWNlLT5HZXREZXZpY2VDYXBzKEZYRENfUkVOREVSX0NBUFMpICYgRlhSQ19TT0ZUX0NMSVApKSB7CisgICAgICAgIGJUZXh0Q2xpcCA9IFRSVUU7CisgICAgfQorICAgIGlmICgobV9PcHRpb25zLm1fRmxhZ3MgJiBSRU5ERVJfT1ZFUlBSSU5UKSAmJiBwUGFnZU9iai0+bV9UeXBlID09IFBERlBBR0VfSU1BR0UgJiYgcEdlbmVyYWxTdGF0ZSAmJiBwR2VuZXJhbFN0YXRlLT5tX0ZpbGxPUCAmJiBwR2VuZXJhbFN0YXRlLT5tX1N0cm9rZU9QKSB7CisgICAgICAgIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCA9IE5VTEw7CisgICAgICAgIENQREZfUGFnZSogcFBhZ2UgPSBOVUxMOworICAgICAgICBpZiAobV9wQ29udGV4dC0+bV9wUGFnZUNhY2hlKSB7CisgICAgICAgICAgICBwUGFnZSA9IG1fcENvbnRleHQtPm1fcFBhZ2VDYWNoZS0+R2V0UGFnZSgpOworICAgICAgICAgICAgcERvY3VtZW50ID0gcFBhZ2UtPm1fcERvY3VtZW50OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcERvY3VtZW50ID0gKChDUERGX0ltYWdlT2JqZWN0KilwUGFnZU9iaiktPm1fcEltYWdlLT5HZXREb2N1bWVudCgpOworICAgICAgICB9CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcFBhZ2VSZXNvdXJjZXMgPSBwUGFnZSA/IHBQYWdlLT5tX3BQYWdlUmVzb3VyY2VzIDogTlVMTDsKKyAgICAgICAgQ1BERl9PYmplY3QqIHBDU09iaiA9ICgoQ1BERl9JbWFnZU9iamVjdCopcFBhZ2VPYmopLT5tX3BJbWFnZS0+R2V0U3RyZWFtKCktPkdldERpY3QoKS0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJDb2xvclNwYWNlIikpOworICAgICAgICBDUERGX0NvbG9yU3BhY2UqIHBDb2xvclNwYWNlID0gcERvY3VtZW50LT5Mb2FkQ29sb3JTcGFjZShwQ1NPYmosIHBQYWdlUmVzb3VyY2VzKTsKKyAgICAgICAgaWYgKHBDb2xvclNwYWNlKSB7CisgICAgICAgICAgICBpbnQgZm9ybWF0ID0gcENvbG9yU3BhY2UtPkdldEZhbWlseSgpOworICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBQREZDU19ERVZJQ0VDTVlLIHx8IGZvcm1hdCA9PSBQREZDU19TRVBBUkFUSU9OIHx8IGZvcm1hdCA9PSBQREZDU19ERVZJQ0VOKSB7CisgICAgICAgICAgICAgICAgYmxlbmRfdHlwZSA9IEZYRElCX0JMRU5EX0RBUktFTjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBEb2N1bWVudC0+R2V0UGFnZURhdGEoKS0+UmVsZWFzZUNvbG9yU3BhY2UocENTT2JqKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocFNNYXNrRGljdCA9PSBOVUxMICYmIGdyb3VwX2FscGhhID09IDEuMGYgJiYgYmxlbmRfdHlwZSA9PSBGWERJQl9CTEVORF9OT1JNQUwgJiYgIWJUZXh0Q2xpcCAmJiAhYkdyb3VwVHJhbnNwYXJlbnQpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWF9CT09MIGlzb2xhdGVkID0gVHJhbnNwYXJlbmN5ICYgUERGVFJBTlNfSVNPTEFURUQ7CisgICAgaWYgKG1fYlByaW50KSB7CisgICAgICAgIEZYX0JPT0wgYlJldCA9IEZBTFNFOworICAgICAgICBpbnQgcmVuZENhcHMgPSBtX3BEZXZpY2UtPkdldFJlbmRlckNhcHMoKTsKKyAgICAgICAgaWYgKCEoKFRyYW5zcGFyZW5jeSAmIFBERlRSQU5TX0lTT0xBVEVEKSB8fCBwU01hc2tEaWN0IHx8IGJUZXh0Q2xpcCkgJiYgKHJlbmRDYXBzICYgRlhSQ19CTEVORF9NT0RFKSkgeworICAgICAgICAgICAgaW50IG9sZEJsZW5kID0gbV9jdXJCbGVuZDsKKyAgICAgICAgICAgIG1fY3VyQmxlbmQgPSBibGVuZF90eXBlOworICAgICAgICAgICAgYlJldCA9IERyYXdPYmpXaXRoQmxlbmQocFBhZ2VPYmosIHBPYmoyRGV2aWNlKTsKKyAgICAgICAgICAgIG1fY3VyQmxlbmQgPSBvbGRCbGVuZDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWJSZXQpIHsKKyAgICAgICAgICAgIERyYXdPYmpXaXRoQmFja2dyb3VuZChwUGFnZU9iaiwgcE9iajJEZXZpY2UpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBGWF9SRUNUIHJlY3QgPSBwUGFnZU9iai0+R2V0QkJveChwT2JqMkRldmljZSk7CisgICAgcmVjdC5JbnRlcnNlY3QobV9wRGV2aWNlLT5HZXRDbGlwQm94KCkpOworICAgIGlmIChyZWN0LklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgQ0ZYX01hdHJpeCBkZXZpY2VDVE0gPSBtX3BEZXZpY2UtPkdldENUTSgpOworICAgIEZYX0ZMT0FUIHNjYWxlWCA9IEZYU1lTX2ZhYnMoZGV2aWNlQ1RNLmEpOworICAgIEZYX0ZMT0FUIHNjYWxlWSA9IEZYU1lTX2ZhYnMoZGV2aWNlQ1RNLmQpOworICAgIGludCB3aWR0aCA9IEZYU1lTX3JvdW5kKChGWF9GTE9BVClyZWN0LldpZHRoKCkgKiBzY2FsZVgpOworICAgIGludCBoZWlnaHQgPSBGWFNZU19yb3VuZCgoRlhfRkxPQVQpcmVjdC5IZWlnaHQoKSAqIHNjYWxlWSk7CisgICAgQ0ZYX0Z4Z2VEZXZpY2UgYml0bWFwX2RldmljZTsKKyAgICBDRlhfRElCaXRtYXAqIG9yaURldmljZSA9IE5VTEw7CisgICAgaWYgKCFpc29sYXRlZCAmJiAobV9wRGV2aWNlLT5HZXRSZW5kZXJDYXBzKCkgJiBGWFJDX0dFVF9CSVRTKSkgeworICAgICAgICBvcmlEZXZpY2UgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOworICAgICAgICBpZiAoIW1fcERldmljZS0+Q3JlYXRlQ29tcGF0aWJsZUJpdG1hcChvcmlEZXZpY2UsIHdpZHRoLCBoZWlnaHQpKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBtX3BEZXZpY2UtPkdldERJQml0cyhvcmlEZXZpY2UsIHJlY3QubGVmdCwgcmVjdC50b3ApOworICAgIH0KKyAgICBpZiAoIWJpdG1hcF9kZXZpY2UuQ3JlYXRlKHdpZHRoLCBoZWlnaHQsIEZYRElCX0FyZ2IsIDAsIG9yaURldmljZSkpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIENGWF9ESUJpdG1hcCogYml0bWFwID0gYml0bWFwX2RldmljZS5HZXRCaXRtYXAoKTsKKyAgICBiaXRtYXAtPkNsZWFyKDApOworICAgIENGWF9BZmZpbmVNYXRyaXggbmV3X21hdHJpeCA9ICpwT2JqMkRldmljZTsKKyAgICBuZXdfbWF0cml4LlRyYW5zbGF0ZUkoLXJlY3QubGVmdCwgLXJlY3QudG9wKTsKKyAgICBuZXdfbWF0cml4LlNjYWxlKHNjYWxlWCwgc2NhbGVZKTsKKyAgICBDRlhfRElCaXRtYXAqIHBUZXh0TWFzayA9IE5VTEw7CisgICAgaWYgKGJUZXh0Q2xpcCkgeworICAgICAgICBwVGV4dE1hc2sgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOworICAgICAgICBpZiAoIXBUZXh0TWFzay0+Q3JlYXRlKHdpZHRoLCBoZWlnaHQsIEZYRElCXzhicHBNYXNrKSkgeworICAgICAgICAgICAgZGVsZXRlIHBUZXh0TWFzazsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIHBUZXh0TWFzay0+Q2xlYXIoMCk7CisgICAgICAgIENGWF9GeGdlRGV2aWNlIHRleHRfZGV2aWNlOworICAgICAgICB0ZXh0X2RldmljZS5BdHRhY2gocFRleHRNYXNrKTsKKyAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHBQYWdlT2JqLT5tX0NsaXBQYXRoLkdldFRleHRDb3VudCgpOyBpICsrKSB7CisgICAgICAgICAgICBDUERGX1RleHRPYmplY3QqIHRleHRvYmogPSBwUGFnZU9iai0+bV9DbGlwUGF0aC5HZXRUZXh0KGkpOworICAgICAgICAgICAgaWYgKHRleHRvYmogPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCB0ZXh0X21hdHJpeDsKKyAgICAgICAgICAgIHRleHRvYmotPkdldFRleHRNYXRyaXgoJnRleHRfbWF0cml4KTsKKyAgICAgICAgICAgIENQREZfVGV4dFJlbmRlcmVyOjpEcmF3VGV4dFBhdGgoJnRleHRfZGV2aWNlLCB0ZXh0b2JqLT5tX25DaGFycywgdGV4dG9iai0+bV9wQ2hhckNvZGVzLCB0ZXh0b2JqLT5tX3BDaGFyUG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0b2JqLT5tX1RleHRTdGF0ZS5HZXRGb250KCksIHRleHRvYmotPm1fVGV4dFN0YXRlLkdldEZvbnRTaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0ZXh0X21hdHJpeCwgJm5ld19tYXRyaXgsIHRleHRvYmotPm1fR3JhcGhTdGF0ZSwgKEZYX0FSR0IpIC0gMSwgMCwgTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisgICAgQ1BERl9SZW5kZXJTdGF0dXMgYml0bWFwX3JlbmRlcjsKKyAgICBiaXRtYXBfcmVuZGVyLkluaXRpYWxpemUobV9MZXZlbCArIDEsIG1fcENvbnRleHQsICZiaXRtYXBfZGV2aWNlLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BTdG9wT2JqLCBOVUxMLCBOVUxMLCAmbV9PcHRpb25zLCAwLCBtX2JEcm9wT2JqZWN0cywgcEZvcm1SZXNvdXJjZSwgVFJVRSk7CisgICAgYml0bWFwX3JlbmRlci5Qcm9jZXNzT2JqZWN0Tm9DbGlwKHBQYWdlT2JqLCAmbmV3X21hdHJpeCk7CisgICAgbV9iU3RvcHBlZCA9IGJpdG1hcF9yZW5kZXIubV9iU3RvcHBlZDsKKyAgICBpZiAocFNNYXNrRGljdCkgeworICAgICAgICBDRlhfQWZmaW5lTWF0cml4IHNtYXNrX21hdHJpeDsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIoJnNtYXNrX21hdHJpeCwgcEdlbmVyYWxTdGF0ZS0+bV9TTWFza01hdHJpeCwgc2l6ZW9mIHNtYXNrX21hdHJpeCk7CisgICAgICAgIHNtYXNrX21hdHJpeC5Db25jYXQoKnBPYmoyRGV2aWNlKTsKKyAgICAgICAgQ0ZYX0RJQlNvdXJjZSogcFNNYXNrU291cmNlID0gTG9hZFNNYXNrKHBTTWFza0RpY3QsICZyZWN0LCAmc21hc2tfbWF0cml4KTsKKyAgICAgICAgaWYgKHBTTWFza1NvdXJjZSkgeworICAgICAgICAgICAgYml0bWFwLT5NdWx0aXBseUFscGhhKHBTTWFza1NvdXJjZSk7CisgICAgICAgICAgICBkZWxldGUgcFNNYXNrU291cmNlOworICAgICAgICB9CisgICAgfQorICAgIGlmIChwVGV4dE1hc2spIHsKKyAgICAgICAgYml0bWFwLT5NdWx0aXBseUFscGhhKHBUZXh0TWFzayk7CisgICAgICAgIGRlbGV0ZSBwVGV4dE1hc2s7CisgICAgICAgIHBUZXh0TWFzayA9IE5VTEw7CisgICAgfQorICAgIGlmIChUcmFuc3BhcmVuY3kgJiBQREZUUkFOU19HUk9VUCAmJiBncm91cF9hbHBoYSAhPSAxLjBmKSB7CisgICAgICAgIGJpdG1hcC0+TXVsdGlwbHlBbHBoYSgoRlhfSU5UMzIpKGdyb3VwX2FscGhhICogMjU1KSk7CisgICAgfQorICAgIFRyYW5zcGFyZW5jeSA9IG1fVHJhbnNwYXJlbmN5OworICAgIGlmIChwUGFnZU9iai0+bV9UeXBlID09IFBERlBBR0VfRk9STSkgeworICAgICAgICBUcmFuc3BhcmVuY3kgfD0gUERGVFJBTlNfR1JPVVA7CisgICAgfQorICAgIENvbXBvc2l0ZURJQml0bWFwKGJpdG1hcCwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgMCwgMjU1LCBibGVuZF90eXBlLCBUcmFuc3BhcmVuY3kpOworICAgIGlmIChvcmlEZXZpY2UpIHsKKyAgICAgICAgZGVsZXRlIG9yaURldmljZTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitDRlhfRElCaXRtYXAqIENQREZfUmVuZGVyU3RhdHVzOjpHZXRCYWNrZHJvcChjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmosIGNvbnN0IEZYX1JFQ1QmIHJlY3QsIGludCYgbGVmdCwgaW50JiB0b3AsCisgICAgICAgIEZYX0JPT0wgYkJhY2tBbHBoYVJlcXVpcmVkKQoreworICAgIEZYX1JFQ1QgYmJveCA9IHJlY3Q7CisgICAgYmJveC5JbnRlcnNlY3QobV9wRGV2aWNlLT5HZXRDbGlwQm94KCkpOworICAgIGxlZnQgPSBiYm94LmxlZnQ7CisgICAgdG9wID0gYmJveC50b3A7CisgICAgQ0ZYX01hdHJpeCBkZXZpY2VDVE0gPSBtX3BEZXZpY2UtPkdldENUTSgpOworICAgIEZYX0ZMT0FUIHNjYWxlWCA9IEZYU1lTX2ZhYnMoZGV2aWNlQ1RNLmEpOworICAgIEZYX0ZMT0FUIHNjYWxlWSA9IEZYU1lTX2ZhYnMoZGV2aWNlQ1RNLmQpOworICAgIGludCB3aWR0aCA9IEZYU1lTX3JvdW5kKGJib3guV2lkdGgoKSAqIHNjYWxlWCk7CisgICAgaW50IGhlaWdodCA9IEZYU1lTX3JvdW5kKGJib3guSGVpZ2h0KCkgKiBzY2FsZVkpOworICAgIENGWF9ESUJpdG1hcCogcEJhY2tkcm9wID0gRlhfTkVXIENGWF9ESUJpdG1hcDsKKyAgICBpZiAoYkJhY2tBbHBoYVJlcXVpcmVkICYmICFtX2JEcm9wT2JqZWN0cykgeworICAgICAgICBwQmFja2Ryb3AtPkNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCBGWERJQl9BcmdiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3BEZXZpY2UtPkNyZWF0ZUNvbXBhdGlibGVCaXRtYXAocEJhY2tkcm9wLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB9CisgICAgaWYgKHBCYWNrZHJvcC0+R2V0QnVmZmVyKCkgPT0gTlVMTCkgeworICAgICAgICBkZWxldGUgcEJhY2tkcm9wOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRlhfQk9PTCBiTmVlZERyYXc7CisgICAgaWYgKHBCYWNrZHJvcC0+SGFzQWxwaGEoKSkgeworICAgICAgICBiTmVlZERyYXcgPSAhKG1fcERldmljZS0+R2V0UmVuZGVyQ2FwcygpICYgRlhSQ19BTFBIQV9PVVRQVVQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJOZWVkRHJhdyA9ICEobV9wRGV2aWNlLT5HZXRSZW5kZXJDYXBzKCkgJiBGWFJDX0dFVF9CSVRTKTsKKyAgICB9CisgICAgaWYgKCFiTmVlZERyYXcpIHsKKyAgICAgICAgbV9wRGV2aWNlLT5HZXRESUJpdHMocEJhY2tkcm9wLCBsZWZ0LCB0b3ApOworICAgICAgICByZXR1cm4gcEJhY2tkcm9wOworICAgIH0KKyAgICBDRlhfQWZmaW5lTWF0cml4IEZpbmFsTWF0cml4ID0gbV9EZXZpY2VNYXRyaXg7CisgICAgRmluYWxNYXRyaXguVHJhbnNsYXRlSSgtbGVmdCwgLXRvcCk7CisgICAgRmluYWxNYXRyaXguU2NhbGUoc2NhbGVYLCBzY2FsZVkpOworICAgIHBCYWNrZHJvcC0+Q2xlYXIocEJhY2tkcm9wLT5IYXNBbHBoYSgpID8gMCA6IDB4ZmZmZmZmZmYpOworICAgIENGWF9GeGdlRGV2aWNlIGRldmljZTsKKyAgICBkZXZpY2UuQXR0YWNoKHBCYWNrZHJvcCk7CisgICAgbV9wQ29udGV4dC0+UmVuZGVyKCZkZXZpY2UsIHBPYmosICZtX09wdGlvbnMsICZGaW5hbE1hdHJpeCk7CisgICAgcmV0dXJuIHBCYWNrZHJvcDsKK30KK3ZvaWQgQ1BERl9SZW5kZXJDb250ZXh0OjpHZXRCYWNrZ3JvdW5kKENGWF9ESUJpdG1hcCogcEJ1ZmZlciwgY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwT2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucywgQ0ZYX0FmZmluZU1hdHJpeCogcEZpbmFsTWF0cml4KQoreworICAgIENGWF9GeGdlRGV2aWNlIGRldmljZTsKKyAgICBkZXZpY2UuQXR0YWNoKHBCdWZmZXIpOworICAgIGlmIChtX3BCYWNrZ3JvdW5kRHJhdykgeworICAgICAgICBtX3BCYWNrZ3JvdW5kRHJhdy0+T25EcmF3QmFja2dyb3VuZCgmZGV2aWNlLCBwRmluYWxNYXRyaXgpOworICAgIH0gZWxzZSB7CisgICAgICAgIEZYX1JFQ1QgcmVjdCgwLCAwLCBkZXZpY2UuR2V0V2lkdGgoKSwgZGV2aWNlLkdldEhlaWdodCgpKTsKKyAgICAgICAgZGV2aWNlLkZpbGxSZWN0KCZyZWN0LCAweGZmZmZmZmZmKTsKKyAgICB9CisgICAgUmVuZGVyKCZkZXZpY2UsIHBPYmosIHBPcHRpb25zLCBwRmluYWxNYXRyaXgpOworfQorQ1BERl9HcmFwaGljU3RhdGVzKiBDUERGX1JlbmRlclN0YXR1czo6Q2xvbmVPYmpTdGF0ZXMoY29uc3QgQ1BERl9HcmFwaGljU3RhdGVzKiBwU3JjU3RhdGVzLCBGWF9CT09MIGJTdHJva2UpCit7CisgICAgaWYgKCFwU3JjU3RhdGVzKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX0dyYXBoaWNTdGF0ZXMqIHBTdGF0ZXMgPSBGWF9ORVcgQ1BERl9HcmFwaGljU3RhdGVzOworICAgIGlmICghcFN0YXRlcykgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcFN0YXRlcy0+Q29weVN0YXRlcygqcFNyY1N0YXRlcyk7CisgICAgQ1BERl9Db2xvciogcE9iakNvbG9yID0gYlN0cm9rZSA/IHBTcmNTdGF0ZXMtPm1fQ29sb3JTdGF0ZS5HZXRTdHJva2VDb2xvcigpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU3JjU3RhdGVzLT5tX0NvbG9yU3RhdGUuR2V0RmlsbENvbG9yKCk7CisgICAgaWYgKCFwT2JqQ29sb3ItPklzTnVsbCgpKSB7CisgICAgICAgIENQREZfQ29sb3JTdGF0ZURhdGEqIHBDb2xvckRhdGEgPSBwU3RhdGVzLT5tX0NvbG9yU3RhdGUuR2V0TW9kaWZ5KCk7CisgICAgICAgIHBDb2xvckRhdGEtPm1fRmlsbFJHQiA9IGJTdHJva2UgPyBwU3JjU3RhdGVzLT5tX0NvbG9yU3RhdGUuR2V0T2JqZWN0KCktPm1fU3Ryb2tlUkdCIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFNyY1N0YXRlcy0+bV9Db2xvclN0YXRlLkdldE9iamVjdCgpLT5tX0ZpbGxSR0I7CisgICAgICAgIHBDb2xvckRhdGEtPm1fU3Ryb2tlUkdCID0gcENvbG9yRGF0YS0+bV9GaWxsUkdCOworICAgIH0KKyAgICByZXR1cm4gcFN0YXRlczsKK30KK0NQREZfUmVuZGVyQ29udGV4dDo6Q1BERl9SZW5kZXJDb250ZXh0KCkKK3sKK30KK3ZvaWQgQ1BERl9SZW5kZXJDb250ZXh0OjpDcmVhdGUoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9QYWdlUmVuZGVyQ2FjaGUqIHBQYWdlQ2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcFBhZ2VSZXNvdXJjZXMsIEZYX0JPT0wgYkZpcnN0TGF5ZXIpCit7CisgICAgbV9wQmFja2dyb3VuZERyYXcgPSBOVUxMOworICAgIG1fcERvY3VtZW50ID0gcERvYzsKKyAgICBtX3BQYWdlUmVzb3VyY2VzID0gcFBhZ2VSZXNvdXJjZXM7CisgICAgbV9wUGFnZUNhY2hlID0gcFBhZ2VDYWNoZTsKKyAgICBtX2JGaXJzdExheWVyID0gYkZpcnN0TGF5ZXI7Cit9Cit2b2lkIENQREZfUmVuZGVyQ29udGV4dDo6Q3JlYXRlKENQREZfUGFnZSogcFBhZ2UsIEZYX0JPT0wgYkZpcnN0TGF5ZXIpCit7CisgICAgbV9wQmFja2dyb3VuZERyYXcgPSBOVUxMOworICAgIG1fcERvY3VtZW50ID0gcFBhZ2UtPm1fcERvY3VtZW50OworICAgIG1fcFBhZ2VSZXNvdXJjZXMgPSBwUGFnZS0+bV9wUGFnZVJlc291cmNlczsKKyAgICBtX3BQYWdlQ2FjaGUgPSBwUGFnZS0+R2V0UmVuZGVyQ2FjaGUoKTsKKyAgICBtX2JGaXJzdExheWVyID0gYkZpcnN0TGF5ZXI7Cit9CitDUERGX1JlbmRlckNvbnRleHQ6On5DUERGX1JlbmRlckNvbnRleHQoKQoreworfQordm9pZCBDUERGX1JlbmRlckNvbnRleHQ6OkNsZWFyKCkKK3sKKyAgICBtX3BEb2N1bWVudCA9IE5VTEw7CisgICAgbV9wUGFnZVJlc291cmNlcyA9IE5VTEw7CisgICAgbV9wUGFnZUNhY2hlID0gTlVMTDsKKyAgICBtX3BCYWNrZ3JvdW5kRHJhdyA9IE5VTEw7CisgICAgbV9iRmlyc3RMYXllciA9IFRSVUU7CisgICAgbV9Db250ZW50TGlzdC5SZW1vdmVBbGwoKTsKK30KK3ZvaWQgQ1BERl9SZW5kZXJDb250ZXh0OjpBcHBlbmRPYmplY3RMaXN0KENQREZfUGFnZU9iamVjdHMqIHBPYmpzLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkRldmljZSkKK3sKKyAgICBfUERGX1JlbmRlckl0ZW0qIHBJdGVtID0gbV9Db250ZW50TGlzdC5BZGRTcGFjZSgpOworICAgIHBJdGVtLT5tX3BPYmplY3RMaXN0ID0gcE9ianM7CisgICAgaWYgKHBPYmplY3QyRGV2aWNlKSB7CisgICAgICAgIHBJdGVtLT5tX01hdHJpeCA9ICpwT2JqZWN0MkRldmljZTsKKyAgICB9IGVsc2UgeworICAgICAgICBwSXRlbS0+bV9NYXRyaXguU2V0SWRlbnRpdHkoKTsKKyAgICB9Cit9Cit2b2lkIENQREZfUmVuZGVyQ29udGV4dDo6UmVuZGVyKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBMYXN0TWF0cml4KQoreworICAgIFJlbmRlcihwRGV2aWNlLCBOVUxMLCBwT3B0aW9ucywgcExhc3RNYXRyaXgpOworfQordm9pZCBDUERGX1JlbmRlckNvbnRleHQ6OlJlbmRlcihDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBTdG9wT2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTGFzdE1hdHJpeCkKK3sKKyAgICBpbnQgY291bnQgPSBtX0NvbnRlbnRMaXN0LkdldFNpemUoKTsKKyAgICBmb3IgKGludCBqID0gMDsgaiA8IGNvdW50OyBqICsrKSB7CisgICAgICAgIHBEZXZpY2UtPlNhdmVTdGF0ZSgpOworICAgICAgICBfUERGX1JlbmRlckl0ZW0qIHBJdGVtID0gbV9Db250ZW50TGlzdC5HZXREYXRhUHRyKGopOworICAgICAgICBpZiAocExhc3RNYXRyaXgpIHsKKyAgICAgICAgICAgIENGWF9BZmZpbmVNYXRyaXggRmluYWxNYXRyaXggPSBwSXRlbS0+bV9NYXRyaXg7CisgICAgICAgICAgICBGaW5hbE1hdHJpeC5Db25jYXQoKnBMYXN0TWF0cml4KTsKKyAgICAgICAgICAgIENQREZfUmVuZGVyU3RhdHVzIHN0YXR1czsKKyAgICAgICAgICAgIHN0YXR1cy5Jbml0aWFsaXplKDAsIHRoaXMsIHBEZXZpY2UsIHBMYXN0TWF0cml4LCBwU3RvcE9iaiwgTlVMTCwgTlVMTCwgcE9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwSXRlbS0+bV9wT2JqZWN0TGlzdC0+bV9UcmFuc3BhcmVuY3ksIEZBTFNFLCBOVUxMKTsKKyAgICAgICAgICAgIHN0YXR1cy5SZW5kZXJPYmplY3RMaXN0KHBJdGVtLT5tX3BPYmplY3RMaXN0LCAmRmluYWxNYXRyaXgpOworI2lmICFkZWZpbmVkKF9GUERGQVBJX01JTklfKQorICAgICAgICAgICAgaWYgKHN0YXR1cy5tX09wdGlvbnMubV9GbGFncyAmIFJFTkRFUl9MSU1JVEVESU1BR0VDQUNIRSkgeworICAgICAgICAgICAgICAgIG1fcFBhZ2VDYWNoZS0+Q2FjaGVPcHRpbWl6YXRpb24oc3RhdHVzLm1fT3B0aW9ucy5tX2R3TGltaXRDYWNoZVNpemUpOworICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICBpZiAoc3RhdHVzLm1fYlN0b3BwZWQpIHsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5SZXN0b3JlU3RhdGUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIENQREZfUmVuZGVyU3RhdHVzIHN0YXR1czsKKyAgICAgICAgICAgIHN0YXR1cy5Jbml0aWFsaXplKDAsIHRoaXMsIHBEZXZpY2UsIE5VTEwsIHBTdG9wT2JqLCBOVUxMLCBOVUxMLCBwT3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJdGVtLT5tX3BPYmplY3RMaXN0LT5tX1RyYW5zcGFyZW5jeSwgRkFMU0UsIE5VTEwpOworICAgICAgICAgICAgc3RhdHVzLlJlbmRlck9iamVjdExpc3QocEl0ZW0tPm1fcE9iamVjdExpc3QsICZwSXRlbS0+bV9NYXRyaXgpOworI2lmICFkZWZpbmVkKF9GUERGQVBJX01JTklfKQorICAgICAgICAgICAgaWYgKHN0YXR1cy5tX09wdGlvbnMubV9GbGFncyAmIFJFTkRFUl9MSU1JVEVESU1BR0VDQUNIRSkgeworICAgICAgICAgICAgICAgIG1fcFBhZ2VDYWNoZS0+Q2FjaGVPcHRpbWl6YXRpb24oc3RhdHVzLm1fT3B0aW9ucy5tX2R3TGltaXRDYWNoZVNpemUpOworICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICBpZiAoc3RhdHVzLm1fYlN0b3BwZWQpIHsKKyAgICAgICAgICAgICAgICBwRGV2aWNlLT5SZXN0b3JlU3RhdGUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwRGV2aWNlLT5SZXN0b3JlU3RhdGUoKTsKKyAgICB9Cit9Cit2b2lkIENQREZfUmVuZGVyQ29udGV4dDo6RHJhd09iamVjdExpc3QoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9QYWdlT2JqZWN0cyogcE9ianMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMpCit7CisgICAgQXBwZW5kT2JqZWN0TGlzdChwT2JqcywgcE9iamVjdDJEZXZpY2UpOworICAgIFJlbmRlcihwRGV2aWNlLCBwT3B0aW9ucyk7Cit9CitDUERGX1Byb2dyZXNzaXZlUmVuZGVyZXI6OkNQREZfUHJvZ3Jlc3NpdmVSZW5kZXJlcigpCit7CisgICAgbV9wUmVuZGVyZXIgPSBOVUxMOworICAgIG1fcENvbnRleHQgPSBOVUxMOworICAgIG1fcERldmljZSA9IE5VTEw7CisgICAgbV9TdGF0dXMgPSBSZWFkeTsKK30KK0NQREZfUHJvZ3Jlc3NpdmVSZW5kZXJlcjo6fkNQREZfUHJvZ3Jlc3NpdmVSZW5kZXJlcigpCit7CisgICAgQ2xlYXIoKTsKK30KK3ZvaWQgQ1BERl9Qcm9ncmVzc2l2ZVJlbmRlcmVyOjpDbGVhcigpCit7CisgICAgaWYgKG1fcFJlbmRlcmVyKSB7CisgICAgICAgIGRlbGV0ZSBtX3BSZW5kZXJlcjsKKyAgICAgICAgbV9wRGV2aWNlLT5SZXN0b3JlU3RhdGUoKTsKKyAgICAgICAgbV9wUmVuZGVyZXIgPSBOVUxMOworICAgIH0KKyAgICBtX1N0YXR1cyA9IFJlYWR5OworfQordm9pZCBDUERGX1Byb2dyZXNzaXZlUmVuZGVyZXI6OlN0YXJ0KENQREZfUmVuZGVyQ29udGV4dCogcENvbnRleHQsIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucywgSUZYX1BhdXNlKiBwUGF1c2UsIEZYX0JPT0wgYkRyb3BPYmplY3RzKQoreworICAgIGlmIChtX1N0YXR1cyAhPSBSZWFkeSkgeworICAgICAgICBtX1N0YXR1cyA9IEZhaWxlZDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3BDb250ZXh0ID0gcENvbnRleHQ7CisgICAgbV9wRGV2aWNlID0gcERldmljZTsKKyAgICBtX3BPcHRpb25zID0gcE9wdGlvbnM7CisgICAgbV9iRHJvcE9iamVjdHMgPSBiRHJvcE9iamVjdHM7CisgICAgaWYgKHBDb250ZXh0ID09IE5VTEwgfHwgcERldmljZSA9PSBOVUxMKSB7CisgICAgICAgIG1fU3RhdHVzID0gRmFpbGVkOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fU3RhdHVzID0gVG9CZUNvbnRpbnVlZDsKKyAgICBtX09iamVjdFBvcyA9IE5VTEw7CisgICAgbV9MYXllckluZGV4ID0gMDsKKyAgICBtX09iamVjdEluZGV4ID0gMDsKKyAgICBtX1ByZXZMYXN0UG9zID0gTlVMTDsKKyAgICBDb250aW51ZShwUGF1c2UpOworfQorI2lmZGVmIF9GUERGQVBJX01JTklfCisjZGVmaW5lIFJFTkRFUl9TVEVQX0xJTUlUIDIwCisjZWxzZQorI2RlZmluZSBSRU5ERVJfU1RFUF9MSU1JVCAxMDAKKyNlbmRpZgordm9pZCBDUERGX1Byb2dyZXNzaXZlUmVuZGVyZXI6OkNvbnRpbnVlKElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIGlmIChtX1N0YXR1cyAhPSBUb0JlQ29udGludWVkKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfRFdPUkQgbkxheWVycyA9IG1fcENvbnRleHQtPm1fQ29udGVudExpc3QuR2V0U2l6ZSgpOworICAgIGZvciAoOyBtX0xheWVySW5kZXggPCBuTGF5ZXJzOyBtX0xheWVySW5kZXggKyspIHsKKyAgICAgICAgX1BERl9SZW5kZXJJdGVtKiBwSXRlbSA9IG1fcENvbnRleHQtPm1fQ29udGVudExpc3QuR2V0RGF0YVB0cihtX0xheWVySW5kZXgpOworICAgICAgICBGWF9QT1NJVElPTiBMYXN0UG9zID0gcEl0ZW0tPm1fcE9iamVjdExpc3QtPkdldExhc3RPYmplY3RQb3NpdGlvbigpOworICAgICAgICBpZiAobV9PYmplY3RQb3MgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKExhc3RQb3MgPT0gbV9QcmV2TGFzdFBvcykgeworICAgICAgICAgICAgICAgIGlmICghcEl0ZW0tPm1fcE9iamVjdExpc3QtPklzUGFyc2VkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcEl0ZW0tPm1fcE9iamVjdExpc3QtPkNvbnRpbnVlUGFyc2UocFBhdXNlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwSXRlbS0+bV9wT2JqZWN0TGlzdC0+SXNQYXJzZWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIExhc3RQb3MgPSBwSXRlbS0+bV9wT2JqZWN0TGlzdC0+R2V0TGFzdE9iamVjdFBvc2l0aW9uKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKExhc3RQb3MgPT0gbV9QcmV2TGFzdFBvcykgeworICAgICAgICAgICAgICAgIGlmIChtX3BSZW5kZXJlcikgeworICAgICAgICAgICAgICAgICAgICBkZWxldGUgbV9wUmVuZGVyZXI7CisgICAgICAgICAgICAgICAgICAgIG1fcFJlbmRlcmVyID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgbV9wRGV2aWNlLT5SZXN0b3JlU3RhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9PYmplY3RQb3MgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBtX1ByZXZMYXN0UG9zID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9QcmV2TGFzdFBvcykgeworICAgICAgICAgICAgICAgIG1fT2JqZWN0UG9zID0gbV9QcmV2TGFzdFBvczsKKyAgICAgICAgICAgICAgICBwSXRlbS0+bV9wT2JqZWN0TGlzdC0+R2V0TmV4dE9iamVjdChtX09iamVjdFBvcyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fT2JqZWN0UG9zID0gcEl0ZW0tPm1fcE9iamVjdExpc3QtPkdldEZpcnN0T2JqZWN0UG9zaXRpb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fUHJldkxhc3RQb3MgPSBMYXN0UG9zOworICAgICAgICB9CisgICAgICAgIGlmIChtX3BSZW5kZXJlciA9PSBOVUxMKSB7CisgICAgICAgICAgICBtX09iamVjdFBvcyA9IHBJdGVtLT5tX3BPYmplY3RMaXN0LT5HZXRGaXJzdE9iamVjdFBvc2l0aW9uKCk7CisgICAgICAgICAgICBtX09iamVjdEluZGV4ID0gMDsKKyAgICAgICAgICAgIG1fcFJlbmRlcmVyID0gRlhfTkVXIENQREZfUmVuZGVyU3RhdHVzKCk7CisgICAgICAgICAgICBtX3BSZW5kZXJlci0+SW5pdGlhbGl6ZSgwLCBtX3BDb250ZXh0LCBtX3BEZXZpY2UsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BPcHRpb25zLCBwSXRlbS0+bV9wT2JqZWN0TGlzdC0+bV9UcmFuc3BhcmVuY3ksIG1fYkRyb3BPYmplY3RzLCBOVUxMKTsKKyAgICAgICAgICAgIG1fcERldmljZS0+U2F2ZVN0YXRlKCk7CisgICAgICAgICAgICBtX0NsaXBSZWN0ID0gbV9wRGV2aWNlLT5HZXRDbGlwQm94KCk7CisgICAgICAgICAgICBDRlhfQWZmaW5lTWF0cml4IGRldmljZTJvYmplY3Q7CisgICAgICAgICAgICBkZXZpY2Uyb2JqZWN0LlNldFJldmVyc2UocEl0ZW0tPm1fTWF0cml4KTsKKyAgICAgICAgICAgIGRldmljZTJvYmplY3QuVHJhbnNmb3JtUmVjdChtX0NsaXBSZWN0KTsKKyAgICAgICAgfQorICAgICAgICBpbnQgb2Jqc190b19nbyA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UmVuZGVyTW9kdWxlKCktPkdldENvbmZpZygpLT5tX1JlbmRlclN0ZXBMaW1pdDsKKyAgICAgICAgd2hpbGUgKG1fT2JqZWN0UG9zKSB7CisgICAgICAgICAgICBDUERGX1BhZ2VPYmplY3QqIHBDdXJPYmogPSBwSXRlbS0+bV9wT2JqZWN0TGlzdC0+R2V0T2JqZWN0QXQobV9PYmplY3RQb3MpOworICAgICAgICAgICAgaWYgKHBDdXJPYmogJiYgcEN1ck9iai0+bV9MZWZ0IDw9IG1fQ2xpcFJlY3QucmlnaHQgJiYgcEN1ck9iai0+bV9SaWdodCA+PSBtX0NsaXBSZWN0LmxlZnQgJiYKKyAgICAgICAgICAgICAgICAgICAgcEN1ck9iai0+bV9Cb3R0b20gPD0gbV9DbGlwUmVjdC50b3AgJiYgcEN1ck9iai0+bV9Ub3AgPj0gbV9DbGlwUmVjdC5ib3R0b20pIHsKKyAgICAgICAgICAgICAgICBpZiAobV9wUmVuZGVyZXItPkNvbnRpbnVlU2luZ2xlT2JqZWN0KHBDdXJPYmosICZwSXRlbS0+bV9NYXRyaXgsIHBQYXVzZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyNpZiAhZGVmaW5lZChfRlBERkFQSV9NSU5JXykKKyAgICAgICAgICAgICAgICBpZiAocEN1ck9iai0+bV9UeXBlID09IFBERlBBR0VfSU1BR0UgJiYgbV9wUmVuZGVyZXItPm1fT3B0aW9ucy5tX0ZsYWdzICYgUkVOREVSX0xJTUlURURJTUFHRUNBQ0hFKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcENvbnRleHQtPkdldFBhZ2VDYWNoZSgpLT5DYWNoZU9wdGltaXphdGlvbihtX3BSZW5kZXJlci0+bV9PcHRpb25zLm1fZHdMaW1pdENhY2hlU2l6ZSk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKHBDdXJPYmotPm1fVHlwZSA9PSBQREZQQUdFX0ZPUk0gfHwgcEN1ck9iai0+bV9UeXBlID09IFBERlBBR0VfU0hBRElORykgeworICAgICAgICAgICAgICAgICAgICBvYmpzX3RvX2dvID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBvYmpzX3RvX2dvIC0tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fT2JqZWN0SW5kZXggKys7CisgICAgICAgICAgICBwSXRlbS0+bV9wT2JqZWN0TGlzdC0+R2V0TmV4dE9iamVjdChtX09iamVjdFBvcyk7CisgICAgICAgICAgICBpZiAob2Jqc190b19nbyA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHBQYXVzZSAmJiBwUGF1c2UtPk5lZWRUb1BhdXNlTm93KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvYmpzX3RvX2dvID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRSZW5kZXJNb2R1bGUoKS0+R2V0Q29uZmlnKCktPm1fUmVuZGVyU3RlcExpbWl0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghcEl0ZW0tPm1fcE9iamVjdExpc3QtPklzUGFyc2VkKCkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBkZWxldGUgbV9wUmVuZGVyZXI7CisgICAgICAgIG1fcFJlbmRlcmVyID0gTlVMTDsKKyAgICAgICAgbV9wRGV2aWNlLT5SZXN0b3JlU3RhdGUoKTsKKyAgICAgICAgbV9PYmplY3RQb3MgPSBOVUxMOworICAgICAgICBtX1ByZXZMYXN0UG9zID0gTlVMTDsKKyAgICAgICAgaWYgKHBQYXVzZSAmJiBwUGF1c2UtPk5lZWRUb1BhdXNlTm93KCkpIHsKKyAgICAgICAgICAgIG1fTGF5ZXJJbmRleCsrOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIG1fU3RhdHVzID0gRG9uZTsKK30KK2ludCBDUERGX1Byb2dyZXNzaXZlUmVuZGVyZXI6OkVzdGltYXRlUHJvZ3Jlc3MoKQoreworICAgIGlmICghbV9wQ29udGV4dCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgRlhfRFdPUkQgbkxheWVycyA9IG1fcENvbnRleHQtPm1fQ29udGVudExpc3QuR2V0U2l6ZSgpOworICAgIGludCBuVG90YWwgPSAwLCBuUmVuZGVyZWQgPSAwOworICAgIGZvciAoRlhfRFdPUkQgbGF5ZXIgPSAwOyBsYXllciA8IG5MYXllcnM7IGxheWVyICsrKSB7CisgICAgICAgIF9QREZfUmVuZGVySXRlbSogcEl0ZW0gPSBtX3BDb250ZXh0LT5tX0NvbnRlbnRMaXN0LkdldERhdGFQdHIobGF5ZXIpOworICAgICAgICBpbnQgbk9ianMgPSBwSXRlbS0+bV9wT2JqZWN0TGlzdC0+Q291bnRPYmplY3RzKCk7CisgICAgICAgIGlmIChsYXllciA9PSBtX0xheWVySW5kZXgpIHsKKyAgICAgICAgICAgIG5SZW5kZXJlZCArPSBtX09iamVjdEluZGV4OworICAgICAgICB9IGVsc2UgaWYgKGxheWVyIDwgbV9MYXllckluZGV4KSB7CisgICAgICAgICAgICBuUmVuZGVyZWQgKz0gbk9ianM7CisgICAgICAgIH0KKyAgICAgICAgblRvdGFsICs9IG5PYmpzOworICAgIH0KKyAgICBpZiAoblRvdGFsID09IDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiAxMDAgKiBuUmVuZGVyZWQgLyBuVG90YWw7Cit9CitDUERGX1RyYW5zZmVyRnVuYyogQ1BERl9Eb2NSZW5kZXJEYXRhOjpHZXRUcmFuc2ZlckZ1bmMoQ1BERl9PYmplY3QqIHBPYmopCit7CisgICAgaWYgKHBPYmogPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9Db3VudGVkT2JqZWN0PENQREZfVHJhbnNmZXJGdW5jKj4qIHBUcmFuc2ZlckNvdW50ZXI7CisgICAgaWYgKCFtX1RyYW5zZmVyRnVuY01hcC5Mb29rdXAocE9iaiwgcFRyYW5zZmVyQ291bnRlcikpIHsKKyAgICAgICAgQ1BERl9UcmFuc2ZlckZ1bmMqIHBUcmFuc2ZlciA9IE5VTEw7CisgICAgICAgIENQREZfRnVuY3Rpb24qIHBGdW5jc1szXSA9IHtOVUxMLCBOVUxMLCBOVUxMfTsKKyAgICAgICAgRlhfQk9PTCBiVW5pVHJhbnNmZXIgPSBUUlVFOworICAgICAgICBpbnQgaTsKKyAgICAgICAgRlhfQk9PTCBiSWRlbnRpdHkgPSBUUlVFOworICAgICAgICBpZiAocE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgeworICAgICAgICAgICAgYlVuaVRyYW5zZmVyID0gRkFMU0U7CisgICAgICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSAoQ1BERl9BcnJheSopcE9iajsKKyAgICAgICAgICAgIGlmIChwQXJyYXktPkdldENvdW50KCkgPCAzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgMzsgaSArKykgeworICAgICAgICAgICAgICAgIHBGdW5jc1syIC0gaV0gPSBDUERGX0Z1bmN0aW9uOjpMb2FkKHBBcnJheS0+R2V0RWxlbWVudFZhbHVlKGkpKTsKKyAgICAgICAgICAgICAgICBpZiAocEZ1bmNzWzIgLSBpXSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBGdW5jc1swXSA9IENQREZfRnVuY3Rpb246OkxvYWQocE9iaik7CisgICAgICAgICAgICBpZiAocEZ1bmNzWzBdID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwVHJhbnNmZXIgPSBGWF9ORVcgQ1BERl9UcmFuc2ZlckZ1bmM7CisgICAgICAgIHBUcmFuc2Zlci0+bV9wUERGRG9jID0gbV9wUERGRG9jOworICAgICAgICBwVHJhbnNmZXJDb3VudGVyID0gRlhfTkVXIENQREZfQ291bnRlZE9iamVjdDxDUERGX1RyYW5zZmVyRnVuYyo+OworICAgICAgICBwVHJhbnNmZXJDb3VudGVyLT5tX25Db3VudCA9IDE7CisgICAgICAgIHBUcmFuc2ZlckNvdW50ZXItPm1fT2JqID0gcFRyYW5zZmVyOworICAgICAgICBtX1RyYW5zZmVyRnVuY01hcC5TZXRBdChwT2JqLCBwVHJhbnNmZXJDb3VudGVyKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBrTWF4T3V0cHV0cyA9IDE2OworICAgICAgICBGWF9GTE9BVCBvdXRwdXRba01heE91dHB1dHNdOworICAgICAgICBGWFNZU19tZW1zZXQzMihvdXRwdXQsIDAsIHNpemVvZihvdXRwdXQpKTsKKyAgICAgICAgRlhfRkxPQVQgaW5wdXQ7CisgICAgICAgIGludCBub3V0cHV0OworICAgICAgICBmb3IgKGludCB2ID0gMDsgdiA8IDI1NjsgdiArKykgeworICAgICAgICAgICAgaW5wdXQgPSAoRlhfRkxPQVQpdiAvIDI1NS4wZjsKKyAgICAgICAgICAgIGlmIChiVW5pVHJhbnNmZXIpIHsKKyAgICAgICAgICAgICAgICBpZiAocEZ1bmNzWzBdICYmIHBGdW5jc1swXS0+Q291bnRPdXRwdXRzKCkgPD0ga01heE91dHB1dHMpIHsKKyAgICAgICAgICAgICAgICAgICAgcEZ1bmNzWzBdLT5DYWxsKCZpbnB1dCwgMSwgb3V0cHV0LCBub3V0cHV0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW50IG8gPSBGWFNZU19yb3VuZChvdXRwdXRbMF0gKiAyNTUpOworICAgICAgICAgICAgICAgIGlmIChvICE9IHYpIHsKKyAgICAgICAgICAgICAgICAgICAgYklkZW50aXR5ID0gRkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpICsrKSB7CisgICAgICAgICAgICAgICAgICAgIHBUcmFuc2Zlci0+bV9TYW1wbGVzW2kgKiAyNTYgKyB2XSA9IG87CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBGdW5jc1tpXSAmJiBwRnVuY3NbaV0tPkNvdW50T3V0cHV0cygpIDw9IGtNYXhPdXRwdXRzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwRnVuY3NbaV0tPkNhbGwoJmlucHV0LCAxLCBvdXRwdXQsIG5vdXRwdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IG8gPSBGWFNZU19yb3VuZChvdXRwdXRbMF0gKiAyNTUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gIT0gdikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJJZGVudGl0eSA9IEZBTFNFOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcFRyYW5zZmVyLT5tX1NhbXBsZXNbaSAqIDI1NiArIHZdID0gbzsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBUcmFuc2Zlci0+bV9TYW1wbGVzW2kgKiAyNTYgKyB2XSA9IHY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkgKyspCisgICAgICAgICAgICBpZiAocEZ1bmNzW2ldKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIHBGdW5jc1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcFRyYW5zZmVyLT5tX2JJZGVudGl0eSA9IGJJZGVudGl0eTsKKyAgICB9CisgICAgcFRyYW5zZmVyQ291bnRlci0+bV9uQ291bnQrKzsKKyAgICByZXR1cm4gcFRyYW5zZmVyQ291bnRlci0+bV9PYmo7Cit9Cit2b2lkIENQREZfRG9jUmVuZGVyRGF0YTo6UmVsZWFzZVRyYW5zZmVyRnVuYyhDUERGX09iamVjdCogcE9iaikKK3sKKyAgICBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9UcmFuc2ZlckZ1bmMqPiogcFRyYW5zZmVyQ291bnRlcjsKKyAgICBpZiAoIW1fVHJhbnNmZXJGdW5jTWFwLkxvb2t1cChwT2JqLCBwVHJhbnNmZXJDb3VudGVyKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHBUcmFuc2ZlckNvdW50ZXItPm1fbkNvdW50LS07Cit9CitDUERGX1JlbmRlckNvbmZpZzo6Q1BERl9SZW5kZXJDb25maWcoKQoreworICAgIG1fSGFsZnRvbmVMaW1pdCA9IDA7CisjaWZkZWYgX0ZQREZBUElfTUlOSV8KKyAgICBtX1JlbmRlclN0ZXBMaW1pdCA9IDIwOworI2Vsc2UKKyAgICBtX1JlbmRlclN0ZXBMaW1pdCA9IDEwMDsKKyNlbmRpZgorfQorQ1BERl9SZW5kZXJDb25maWc6On5DUERGX1JlbmRlckNvbmZpZygpCit7Cit9CitDUERGX0RldmljZUJ1ZmZlcjo6Q1BERl9EZXZpY2VCdWZmZXIoKQoreworICAgIG1fcEJpdG1hcCA9IE5VTEw7CisgICAgbV9wRGV2aWNlID0gTlVMTDsKKyAgICBtX3BDb250ZXh0ID0gTlVMTDsKKyAgICBtX3BPYmplY3QgPSBOVUxMOworfQorQ1BERl9EZXZpY2VCdWZmZXI6On5DUERGX0RldmljZUJ1ZmZlcigpCit7CisgICAgaWYgKG1fcEJpdG1hcCkgeworICAgICAgICBkZWxldGUgbV9wQml0bWFwOworICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9EZXZpY2VCdWZmZXI6OkluaXRpYWxpemUoQ1BERl9SZW5kZXJDb250ZXh0KiBwQ29udGV4dCwgQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgRlhfUkVDVCogcFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaiwgaW50IG1heF9kcGkpCit7CisgICAgbV9wRGV2aWNlID0gcERldmljZTsKKyAgICBtX3BDb250ZXh0ID0gcENvbnRleHQ7CisgICAgbV9SZWN0ID0gKnBSZWN0OworICAgIG1fcE9iamVjdCA9IHBPYmo7CisgICAgbV9NYXRyaXguVHJhbnNsYXRlSSgtcFJlY3QtPmxlZnQsIC1wUmVjdC0+dG9wKTsKKyNpZiBfRlhNX1BMQVRGT1JNXyAhPSBfRlhNX1BMQVRGT1JNX0FQUExFXworICAgIGludCBob3J6X3NpemUgPSBwRGV2aWNlLT5HZXREZXZpY2VDYXBzKEZYRENfSE9SWl9TSVpFKTsKKyAgICBpbnQgdmVydF9zaXplID0gcERldmljZS0+R2V0RGV2aWNlQ2FwcyhGWERDX1ZFUlRfU0laRSk7CisgICAgaWYgKGhvcnpfc2l6ZSAmJiB2ZXJ0X3NpemUgJiYgbWF4X2RwaSkgeworICAgICAgICBpbnQgZHBpaCA9IHBEZXZpY2UtPkdldERldmljZUNhcHMoRlhEQ19QSVhFTF9XSURUSCkgKiAyNTQgLyAoaG9yel9zaXplICogMTApOworICAgICAgICBpbnQgZHBpdiA9IHBEZXZpY2UtPkdldERldmljZUNhcHMoRlhEQ19QSVhFTF9IRUlHSFQpICogMjU0IC8gKHZlcnRfc2l6ZSAqIDEwKTsKKyAgICAgICAgaWYgKGRwaWggPiBtYXhfZHBpKSB7CisgICAgICAgICAgICBtX01hdHJpeC5TY2FsZSgoRlhfRkxPQVQpKG1heF9kcGkpIC8gZHBpaCwgMS4wZik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRwaXYgPiBtYXhfZHBpKSB7CisgICAgICAgICAgICBtX01hdHJpeC5TY2FsZSgxLjBmLCAoRlhfRkxPQVQpKG1heF9kcGkpIC8gKEZYX0ZMT0FUKWRwaXYpOworICAgICAgICB9CisgICAgfQorI2lmZGVmIF9GUERGQVBJX01JTklfCisgICAgbV9NYXRyaXguU2NhbGUoMC41ZiwgMC41Zik7CisjZW5kaWYKKyNlbmRpZgorICAgIENGWF9NYXRyaXggY3RtID0gbV9wRGV2aWNlLT5HZXRDVE0oKTsKKyAgICBGWF9GTE9BVCBmU2NhbGVYID0gRlhTWVNfZmFicyhjdG0uYSk7CisgICAgRlhfRkxPQVQgZlNjYWxlWSA9IEZYU1lTX2ZhYnMoY3RtLmQpOworICAgIG1fTWF0cml4LkNvbmNhdChmU2NhbGVYLCAwLCAwLCBmU2NhbGVZLCAwLCAwKTsKKyAgICBDRlhfRmxvYXRSZWN0IHJlY3QoKnBSZWN0KTsKKyAgICBtX01hdHJpeC5UcmFuc2Zvcm1SZWN0KHJlY3QpOworICAgIEZYX1JFQ1QgYml0bWFwX3JlY3QgPSByZWN0LkdldE91dHRlclJlY3QoKTsKKyAgICBtX3BCaXRtYXAgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOworICAgIG1fcEJpdG1hcC0+Q3JlYXRlKGJpdG1hcF9yZWN0LldpZHRoKCksIGJpdG1hcF9yZWN0LkhlaWdodCgpLCBGWERJQl9BcmdiKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK3ZvaWQgQ1BERl9EZXZpY2VCdWZmZXI6Ok91dHB1dFRvRGV2aWNlKCkKK3sKKyAgICBpZiAobV9wRGV2aWNlLT5HZXREZXZpY2VDYXBzKEZYRENfUkVOREVSX0NBUFMpICYgRlhSQ19HRVRfQklUUykgeworICAgICAgICBpZiAobV9NYXRyaXguYSA9PSAxLjBmICYmIG1fTWF0cml4LmQgPT0gMS4wZikgeworICAgICAgICAgICAgbV9wRGV2aWNlLT5TZXRESUJpdHMobV9wQml0bWFwLCBtX1JlY3QubGVmdCwgbV9SZWN0LnRvcCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3BEZXZpY2UtPlN0cmV0Y2hESUJpdHMobV9wQml0bWFwLCBtX1JlY3QubGVmdCwgbV9SZWN0LnRvcCwgbV9SZWN0LldpZHRoKCksIG1fUmVjdC5IZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworI2lmICFkZWZpbmVkKF9GUERGQVBJX01JTklfKSB8fCBkZWZpbmVkKF9GWENPUkVfRkVBVFVSRV9BTExfKQorICAgICAgICBDRlhfRElCaXRtYXAgYnVmZmVyOworICAgICAgICBtX3BEZXZpY2UtPkNyZWF0ZUNvbXBhdGlibGVCaXRtYXAoJmJ1ZmZlciwgbV9wQml0bWFwLT5HZXRXaWR0aCgpLCBtX3BCaXRtYXAtPkdldEhlaWdodCgpKTsKKyAgICAgICAgbV9wQ29udGV4dC0+R2V0QmFja2dyb3VuZCgmYnVmZmVyLCBtX3BPYmplY3QsIE5VTEwsICZtX01hdHJpeCk7CisgICAgICAgIGJ1ZmZlci5Db21wb3NpdGVCaXRtYXAoMCwgMCwgYnVmZmVyLkdldFdpZHRoKCksIGJ1ZmZlci5HZXRIZWlnaHQoKSwgbV9wQml0bWFwLCAwLCAwKTsKKyAgICAgICAgbV9wRGV2aWNlLT5TdHJldGNoRElCaXRzKCZidWZmZXIsIG1fUmVjdC5sZWZ0LCBtX1JlY3QudG9wLCBtX1JlY3QuV2lkdGgoKSwgbV9SZWN0LkhlaWdodCgpKTsKKyNlbmRpZgorICAgIH0KK30KK0NQREZfU2NhbGVkUmVuZGVyQnVmZmVyOjpDUERGX1NjYWxlZFJlbmRlckJ1ZmZlcigpCit7CisgICAgbV9wQml0bWFwRGV2aWNlID0gTlVMTDsKK30KK0NQREZfU2NhbGVkUmVuZGVyQnVmZmVyOjp+Q1BERl9TY2FsZWRSZW5kZXJCdWZmZXIoKQoreworICAgIGlmIChtX3BCaXRtYXBEZXZpY2UpIHsKKyAgICAgICAgZGVsZXRlIG1fcEJpdG1hcERldmljZTsKKyAgICB9Cit9CisjaWZuZGVmIF9GUERGQVBJX01JTklfCisjZGVmaW5lIF9GUERGQVBJX0lNQUdFU0laRV9MSU1JVF8JKDMwICogMTAyNCAqIDEwMjQpCisjZWxzZQorI2RlZmluZSBfRlBERkFQSV9JTUFHRVNJWkVfTElNSVRfCSgxMCAqIDEwMjQgKiAxMDI0KQorI2VuZGlmCitGWF9CT09MIENQREZfU2NhbGVkUmVuZGVyQnVmZmVyOjpJbml0aWFsaXplKENQREZfUmVuZGVyQ29udGV4dCogcENvbnRleHQsIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIEZYX1JFQ1QqIHBSZWN0LAorICAgICAgICBjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmosIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyAqcE9wdGlvbnMsIGludCBtYXhfZHBpKQoreworICAgIEZYU1lTX2Fzc2VydChwUmVjdCAhPSBOVUxMKTsKKyAgICBtX3BEZXZpY2UgPSBwRGV2aWNlOworICAgIGlmIChtX3BEZXZpY2UtPkdldERldmljZUNhcHMoRlhEQ19SRU5ERVJfQ0FQUykgJiBGWFJDX0dFVF9CSVRTKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBtX3BDb250ZXh0ID0gcENvbnRleHQ7CisgICAgbV9SZWN0ID0gKnBSZWN0OworICAgIG1fcE9iamVjdCA9IHBPYmo7CisgICAgbV9NYXRyaXguVHJhbnNsYXRlSSgtcFJlY3QtPmxlZnQsIC1wUmVjdC0+dG9wKTsKKyAgICBpbnQgaG9yel9zaXplID0gcERldmljZS0+R2V0RGV2aWNlQ2FwcyhGWERDX0hPUlpfU0laRSk7CisgICAgaW50IHZlcnRfc2l6ZSA9IHBEZXZpY2UtPkdldERldmljZUNhcHMoRlhEQ19WRVJUX1NJWkUpOworICAgIGlmIChob3J6X3NpemUgJiYgdmVydF9zaXplICYmIG1heF9kcGkpIHsKKyAgICAgICAgaW50IGRwaWggPSBwRGV2aWNlLT5HZXREZXZpY2VDYXBzKEZYRENfUElYRUxfV0lEVEgpICogMjU0IC8gKGhvcnpfc2l6ZSAqIDEwKTsKKyAgICAgICAgaW50IGRwaXYgPSBwRGV2aWNlLT5HZXREZXZpY2VDYXBzKEZYRENfUElYRUxfSEVJR0hUKSAqIDI1NCAvICh2ZXJ0X3NpemUgKiAxMCk7CisgICAgICAgIGlmIChkcGloID4gbWF4X2RwaSkgeworICAgICAgICAgICAgbV9NYXRyaXguU2NhbGUoKEZYX0ZMT0FUKShtYXhfZHBpKSAvIGRwaWgsIDEuMGYpOworICAgICAgICB9CisgICAgICAgIGlmIChkcGl2ID4gbWF4X2RwaSkgeworICAgICAgICAgICAgbV9NYXRyaXguU2NhbGUoMS4wZiwgKEZYX0ZMT0FUKShtYXhfZHBpKSAvIChGWF9GTE9BVClkcGl2KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX3BCaXRtYXBEZXZpY2UgPSBGWF9ORVcgQ0ZYX0Z4Z2VEZXZpY2U7CisgICAgRlhESUJfRm9ybWF0IGRpYkZvcm1hdCA9IEZYRElCX1JnYjsKKyAgICBGWF9JTlQzMiBicHAgPSAyNDsKKyAgICBpZiAobV9wRGV2aWNlLT5HZXREZXZpY2VDYXBzKEZYRENfUkVOREVSX0NBUFMpICYgRlhSQ19BTFBIQV9PVVRQVVQpIHsKKyAgICAgICAgZGliRm9ybWF0ID0gRlhESUJfQXJnYjsKKyAgICAgICAgYnBwID0gMzI7CisgICAgfQorICAgIENGWF9GbG9hdFJlY3QgcmVjdDsKKyAgICBGWF9JTlQzMiBpV2lkdGgsIGlIZWlnaHQsIGlQaXRjaDsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICByZWN0ID0gKnBSZWN0OworICAgICAgICBtX01hdHJpeC5UcmFuc2Zvcm1SZWN0KHJlY3QpOworICAgICAgICBGWF9SRUNUIGJpdG1hcF9yZWN0ID0gcmVjdC5HZXRPdXR0ZXJSZWN0KCk7CisgICAgICAgIGlXaWR0aCA9IGJpdG1hcF9yZWN0LldpZHRoKCk7CisgICAgICAgIGlIZWlnaHQgPSBiaXRtYXBfcmVjdC5IZWlnaHQoKTsKKyAgICAgICAgaVBpdGNoID0gKGlXaWR0aCAqIGJwcCArIDMxKSAvIDMyICogNDsKKyAgICAgICAgaWYgKGlXaWR0aCAqIGlIZWlnaHQgPCAxKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlQaXRjaCAqIGlIZWlnaHQgPD0gX0ZQREZBUElfSU1BR0VTSVpFX0xJTUlUXyAmJgorICAgICAgICAgICAgICAgIG1fcEJpdG1hcERldmljZS0+Q3JlYXRlKGlXaWR0aCwgaUhlaWdodCwgZGliRm9ybWF0KSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbV9NYXRyaXguU2NhbGUoMC41ZiwgMC41Zik7CisgICAgfQorI2lmICAhZGVmaW5lZChfRlBERkFQSV9NSU5JXykgfHwgZGVmaW5lZChfRlhDT1JFX0ZFQVRVUkVfQUxMXykKKyAgICBtX3BDb250ZXh0LT5HZXRCYWNrZ3JvdW5kKG1fcEJpdG1hcERldmljZS0+R2V0Qml0bWFwKCksIG1fcE9iamVjdCwgcE9wdGlvbnMsICZtX01hdHJpeCk7CisjZW5kaWYKKyAgICByZXR1cm4gVFJVRTsKK30KK3ZvaWQgQ1BERl9TY2FsZWRSZW5kZXJCdWZmZXI6Ok91dHB1dFRvRGV2aWNlKCkKK3sKKyAgICBpZiAobV9wQml0bWFwRGV2aWNlKSB7CisgICAgICAgIG1fcERldmljZS0+U3RyZXRjaERJQml0cyhtX3BCaXRtYXBEZXZpY2UtPkdldEJpdG1hcCgpLCBtX1JlY3QubGVmdCwgbV9SZWN0LnRvcCwgbV9SZWN0LldpZHRoKCksIG1fUmVjdC5IZWlnaHQoKSk7CisgICAgfQorfQorRlhfQk9PTCBJUERGX09DQ29udGV4dDo6Q2hlY2tPYmplY3RWaXNpYmxlKGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaikKK3sKKyAgICBjb25zdCBDUERGX0NvbnRlbnRNYXJrRGF0YSogcERhdGEgPSBwT2JqLT5tX0NvbnRlbnRNYXJrOworICAgIGludCBuSXRlbXMgPSBwRGF0YS0+Q291bnRJdGVtcygpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkl0ZW1zOyBpICsrKSB7CisgICAgICAgIENQREZfQ29udGVudE1hcmtJdGVtJiBpdGVtID0gcERhdGEtPkdldEl0ZW0oaSk7CisgICAgICAgIGlmIChpdGVtLkdldE5hbWUoKSA9PSBGWF9CU1RSQygiT0MiKSAmJiBpdGVtLkdldFBhcmFtVHlwZSgpID09IENQREZfQ29udGVudE1hcmtJdGVtOjpQcm9wZXJ0aWVzRGljdCkgeworICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwT0NHID0gKENQREZfRGljdGlvbmFyeSopaXRlbS5HZXRQYXJhbSgpOworICAgICAgICAgICAgaWYgKCFDaGVja09DR1Zpc2libGUocE9DRykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcmVuZGVyL2ZwZGZfcmVuZGVyX2NhY2hlLmNwcCBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9yZW5kZXIvZnBkZl9yZW5kZXJfY2FjaGUuY3BwCmluZGV4IGM1YmUzMzkuLmViMDhiY2EgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9yZW5kZXIvZnBkZl9yZW5kZXJfY2FjaGUuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9yZW5kZXIvZnBkZl9yZW5kZXJfY2FjaGUuY3BwCkBAIC0xLDM4OSArMSwzODkgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9yZW5kZXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZW9iai5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2UuaCINCi0jaW5jbHVkZSAiLi4vZnBkZl9wYWdlL3BhZ2VpbnQuaCINCi0jaW5jbHVkZSAicmVuZGVyX2ludC5oIg0KLXN0cnVjdCBDQUNIRUlORk8gew0KLSAgICBGWF9EV09SRCB0aW1lOw0KLSAgICBDUERGX1N0cmVhbSogcFN0cmVhbTsNCi19Ow0KLWV4dGVybiAiQyIgew0KLSAgICBzdGF0aWMgaW50IGNvbXBhcmUoY29uc3Qgdm9pZCogZGF0YTEsIGNvbnN0IHZvaWQqIGRhdGEyKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gKChDQUNIRUlORk8qKWRhdGExKS0+dGltZSAtICgoQ0FDSEVJTkZPKilkYXRhMiktPnRpbWU7DQotICAgIH0NCi19Ow0KLXZvaWQgQ1BERl9QYWdlOjpDbGVhclJlbmRlckNhY2hlKCkNCi17DQotICAgIGlmIChtX3BQYWdlUmVuZGVyKSB7DQotICAgICAgICBtX3BQYWdlUmVuZGVyLT5DbGVhckFsbCgpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9QYWdlUmVuZGVyQ2FjaGU6OkNsZWFyQWxsKCkNCi17DQotICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fSW1hZ2VDYWNoZXMuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICBGWF9MUFZPSUQga2V5LCB2YWx1ZTsNCi0gICAgICAgIG1fSW1hZ2VDYWNoZXMuR2V0TmV4dEFzc29jKHBvcywga2V5LCB2YWx1ZSk7DQotICAgICAgICBkZWxldGUgKENQREZfSW1hZ2VDYWNoZSopdmFsdWU7DQotICAgIH0NCi0gICAgbV9JbWFnZUNhY2hlcy5SZW1vdmVBbGwoKTsNCi0gICAgbV9uQ2FjaGVTaXplID0gMDsNCi0gICAgbV9uVGltZUNvdW50ID0gMDsNCi19DQotdm9pZCBDUERGX1BhZ2VSZW5kZXJDYWNoZTo6Q2FjaGVPcHRpbWl6YXRpb24oRlhfSU5UMzIgZHdMaW1pdENhY2hlU2l6ZSkNCi17DQotICAgIGlmIChtX25DYWNoZVNpemUgPD0gKEZYX0RXT1JEKWR3TGltaXRDYWNoZVNpemUpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpbnQgbkNvdW50ID0gbV9JbWFnZUNhY2hlcy5HZXRDb3VudCgpOw0KLSAgICBDQUNIRUlORk8qIHBDQUNIRUlORk8gPSAoQ0FDSEVJTkZPKilGWF9BbGxvYyhGWF9CWVRFLCAoc2l6ZW9mIChDQUNIRUlORk8pKSAqIG5Db3VudCk7DQotICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fSW1hZ2VDYWNoZXMuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICBpbnQgaSA9IDA7DQotICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgIEZYX0xQVk9JRCBrZXksIHZhbHVlOw0KLSAgICAgICAgbV9JbWFnZUNhY2hlcy5HZXROZXh0QXNzb2MocG9zLCBrZXksIHZhbHVlKTsNCi0gICAgICAgIHBDQUNIRUlORk9baV0udGltZSA9ICgoQ1BERl9JbWFnZUNhY2hlKil2YWx1ZSktPkdldFRpbWVDb3VudCgpOw0KLSAgICAgICAgcENBQ0hFSU5GT1tpKytdLnBTdHJlYW0gPSAoKENQREZfSW1hZ2VDYWNoZSopdmFsdWUpLT5HZXRTdHJlYW0oKTsNCi0gICAgfQ0KLSAgICBGWFNZU19xc29ydChwQ0FDSEVJTkZPLCBuQ291bnQsIHNpemVvZiAoQ0FDSEVJTkZPKSwgY29tcGFyZSk7DQotICAgIEZYX0RXT1JEIG5UaW1lQ291bnQgPSBtX25UaW1lQ291bnQ7DQotICAgIGlmIChuVGltZUNvdW50ICsgMSA8IG5UaW1lQ291bnQpIHsNCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBuQ291bnQ7IGkgKyspIHsNCi0gICAgICAgICAgICAoKENQREZfSW1hZ2VDYWNoZSopKG1fSW1hZ2VDYWNoZXNbcENBQ0hFSU5GT1tpXS5wU3RyZWFtXSkpLT5tX2R3VGltZUNvdW50ID0gaTsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fblRpbWVDb3VudCA9IG5Db3VudDsNCi0gICAgfQ0KLSAgICBpID0gMDsNCi0gICAgd2hpbGUobkNvdW50ID4gMTUpIHsNCi0gICAgICAgIENsZWFySW1hZ2VDYWNoZShwQ0FDSEVJTkZPW2krK10ucFN0cmVhbSk7DQotICAgICAgICBuQ291bnQtLTsNCi0gICAgfQ0KLSAgICB3aGlsZSAobV9uQ2FjaGVTaXplID4gKEZYX0RXT1JEKWR3TGltaXRDYWNoZVNpemUpIHsNCi0gICAgICAgIENsZWFySW1hZ2VDYWNoZShwQ0FDSEVJTkZPW2krK10ucFN0cmVhbSk7DQotICAgIH0NCi0gICAgRlhfRnJlZShwQ0FDSEVJTkZPKTsNCi19DQotdm9pZCBDUERGX1BhZ2VSZW5kZXJDYWNoZTo6Q2xlYXJJbWFnZUNhY2hlKENQREZfU3RyZWFtKiBwU3RyZWFtKQ0KLXsNCi0gICAgRlhfTFBWT0lEIHZhbHVlID0gbV9JbWFnZUNhY2hlcy5HZXRWYWx1ZUF0KHBTdHJlYW0pOw0KLSAgICBpZiAodmFsdWUgPT0gTlVMTCkJew0KLSAgICAgICAgbV9JbWFnZUNhY2hlcy5SZW1vdmVLZXkocFN0cmVhbSk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbV9uQ2FjaGVTaXplIC09ICgoQ1BERl9JbWFnZUNhY2hlKil2YWx1ZSktPkVzdGltYXRlU2l6ZSgpOw0KLSAgICBkZWxldGUgKENQREZfSW1hZ2VDYWNoZSopdmFsdWU7DQotICAgIG1fSW1hZ2VDYWNoZXMuUmVtb3ZlS2V5KHBTdHJlYW0pOw0KLX0NCi1GWF9EV09SRCBDUERGX1BhZ2VSZW5kZXJDYWNoZTo6RXN0aW1hdGVTaXplKCkNCi17DQotICAgIEZYX0RXT1JEIGR3U2l6ZSA9IDA7DQotICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fSW1hZ2VDYWNoZXMuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICBGWF9MUFZPSUQga2V5LCB2YWx1ZTsNCi0gICAgICAgIG1fSW1hZ2VDYWNoZXMuR2V0TmV4dEFzc29jKHBvcywga2V5LCB2YWx1ZSk7DQotICAgICAgICBkd1NpemUgKz0gKChDUERGX0ltYWdlQ2FjaGUqKXZhbHVlKS0+RXN0aW1hdGVTaXplKCk7DQotICAgIH0NCi0gICAgbV9uQ2FjaGVTaXplID0gZHdTaXplOw0KLSAgICByZXR1cm4gZHdTaXplOw0KLX0NCi1GWF9EV09SRCBDUERGX1BhZ2VSZW5kZXJDYWNoZTo6R2V0Q2FjaGVkU2l6ZShDUERGX1N0cmVhbSogcFN0cmVhbSkgY29uc3QNCi17DQotICAgIGlmIChwU3RyZWFtID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBtX25DYWNoZVNpemU7DQotICAgIH0NCi0gICAgQ1BERl9JbWFnZUNhY2hlKiBwSW1hZ2VDYWNoZTsNCi0gICAgaWYgKCFtX0ltYWdlQ2FjaGVzLkxvb2t1cChwU3RyZWFtLCAoRlhfTFBWT0lEJilwSW1hZ2VDYWNoZSkpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIHJldHVybiBwSW1hZ2VDYWNoZS0+RXN0aW1hdGVTaXplKCk7DQotfQ0KLXZvaWQgQ1BERl9QYWdlUmVuZGVyQ2FjaGU6OkdldENhY2hlZEJpdG1hcChDUERGX1N0cmVhbSogcFN0cmVhbSwgQ0ZYX0RJQlNvdXJjZSomIHBCaXRtYXAsIENGWF9ESUJTb3VyY2UqJiBwTWFzaywgRlhfRFdPUkQmIE1hdHRlQ29sb3IsDQotICAgICAgICBGWF9CT09MIGJTdGRDUywgRlhfRFdPUkQgR3JvdXBGYW1pbHksIEZYX0JPT0wgYkxvYWRNYXNrLCBDUERGX1JlbmRlclN0YXR1cyogcFJlbmRlclN0YXR1cywNCi0gICAgICAgIEZYX0lOVDMyIGRvd25zYW1wbGVXaWR0aCwgRlhfSU5UMzIgZG93bnNhbXBsZUhlaWdodCkNCi17DQotICAgIENQREZfSW1hZ2VDYWNoZSogcEltYWdlQ2FjaGU7DQotICAgIEZYX0JPT0wgYkZpbmQgPSBtX0ltYWdlQ2FjaGVzLkxvb2t1cChwU3RyZWFtLCAoRlhfTFBWT0lEJilwSW1hZ2VDYWNoZSk7DQotICAgIGlmICghYkZpbmQpIHsNCi0gICAgICAgIHBJbWFnZUNhY2hlID0gRlhfTkVXIENQREZfSW1hZ2VDYWNoZShtX3BQYWdlLT5tX3BEb2N1bWVudCwgcFN0cmVhbSk7DQotICAgIH0NCi0gICAgbV9uVGltZUNvdW50ICsrOw0KLSAgICBGWF9CT09MIGJDYWNoZWQgPSBwSW1hZ2VDYWNoZS0+R2V0Q2FjaGVkQml0bWFwKHBCaXRtYXAsIHBNYXNrLCBNYXR0ZUNvbG9yLCBtX3BQYWdlLT5tX3BQYWdlUmVzb3VyY2VzLCBiU3RkQ1MsIEdyb3VwRmFtaWx5LCBiTG9hZE1hc2ssIHBSZW5kZXJTdGF0dXMsIGRvd25zYW1wbGVXaWR0aCwgZG93bnNhbXBsZUhlaWdodCk7DQotICAgIGlmICghYkZpbmQpIHsNCi0gICAgICAgIG1fSW1hZ2VDYWNoZXMuU2V0QXQocFN0cmVhbSwgcEltYWdlQ2FjaGUpOw0KLSAgICB9DQotICAgIGlmICghYkNhY2hlZCkgew0KLSAgICAgICAgbV9uQ2FjaGVTaXplICs9IHBJbWFnZUNhY2hlLT5Fc3RpbWF0ZVNpemUoKTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MCUNQREZfUGFnZVJlbmRlckNhY2hlOjpTdGFydEdldENhY2hlZEJpdG1hcChDUERGX1N0cmVhbSogcFN0cmVhbSwgRlhfQk9PTCBiU3RkQ1MsIEZYX0RXT1JEIEdyb3VwRmFtaWx5LCBGWF9CT09MIGJMb2FkTWFzaywgQ1BERl9SZW5kZXJTdGF0dXMqIHBSZW5kZXJTdGF0dXMsIEZYX0lOVDMyIGRvd25zYW1wbGVXaWR0aCwgRlhfSU5UMzIgZG93bnNhbXBsZUhlaWdodCkNCi17DQotICAgIG1fYkN1ckZpbmRDYWNoZSA9IG1fSW1hZ2VDYWNoZXMuTG9va3VwKHBTdHJlYW0sIChGWF9MUFZPSUQmKW1fcEN1ckltYWdlQ2FjaGUpOw0KLSAgICBpZiAoIW1fYkN1ckZpbmRDYWNoZSkgew0KLSAgICAgICAgbV9wQ3VySW1hZ2VDYWNoZSA9IEZYX05FVyBDUERGX0ltYWdlQ2FjaGUobV9wUGFnZS0+bV9wRG9jdW1lbnQsIHBTdHJlYW0pOw0KLSAgICB9DQotICAgIGludCByZXQgPSBtX3BDdXJJbWFnZUNhY2hlLT5TdGFydEdldENhY2hlZEJpdG1hcChwUmVuZGVyU3RhdHVzLT5tX3BGb3JtUmVzb3VyY2UsIG1fcFBhZ2UtPm1fcFBhZ2VSZXNvdXJjZXMsIGJTdGRDUywgR3JvdXBGYW1pbHksIGJMb2FkTWFzaywgcFJlbmRlclN0YXR1cywgZG93bnNhbXBsZVdpZHRoLCBkb3duc2FtcGxlSGVpZ2h0KTsNCi0gICAgaWYgKHJldCA9PSAyKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBtX25UaW1lQ291bnQgKys7DQotICAgIGlmICghbV9iQ3VyRmluZENhY2hlKSB7DQotICAgICAgICBtX0ltYWdlQ2FjaGVzLlNldEF0KHBTdHJlYW0sIG1fcEN1ckltYWdlQ2FjaGUpOw0KLSAgICB9DQotICAgIGlmICghcmV0KSB7DQotICAgICAgICBtX25DYWNoZVNpemUgKz0gbV9wQ3VySW1hZ2VDYWNoZS0+RXN0aW1hdGVTaXplKCk7DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1GWF9CT09MCUNQREZfUGFnZVJlbmRlckNhY2hlOjpDb250aW51ZShJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIGludCByZXQgPSBtX3BDdXJJbWFnZUNhY2hlLT5Db250aW51ZShwUGF1c2UpOw0KLSAgICBpZiAocmV0ID09IDIpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIG1fblRpbWVDb3VudCArKzsNCi0gICAgaWYgKCFtX2JDdXJGaW5kQ2FjaGUpIHsNCi0gICAgICAgIG1fSW1hZ2VDYWNoZXMuU2V0QXQobV9wQ3VySW1hZ2VDYWNoZS0+R2V0U3RyZWFtKCksIG1fcEN1ckltYWdlQ2FjaGUpOw0KLSAgICB9DQotICAgIGlmICghcmV0KSB7DQotICAgICAgICBtX25DYWNoZVNpemUgKz0gbV9wQ3VySW1hZ2VDYWNoZS0+RXN0aW1hdGVTaXplKCk7DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi12b2lkIENQREZfUGFnZVJlbmRlckNhY2hlOjpSZXNldEJpdG1hcChDUERGX1N0cmVhbSogcFN0cmVhbSwgY29uc3QgQ0ZYX0RJQml0bWFwKiBwQml0bWFwKQ0KLXsNCi0gICAgQ1BERl9JbWFnZUNhY2hlKiBwSW1hZ2VDYWNoZTsNCi0gICAgaWYgKCFtX0ltYWdlQ2FjaGVzLkxvb2t1cChwU3RyZWFtLCAoRlhfTFBWT0lEJilwSW1hZ2VDYWNoZSkpIHsNCi0gICAgICAgIGlmIChwQml0bWFwID09IE5VTEwpIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBwSW1hZ2VDYWNoZSA9IEZYX05FVyBDUERGX0ltYWdlQ2FjaGUobV9wUGFnZS0+bV9wRG9jdW1lbnQsIHBTdHJlYW0pOw0KLSAgICAgICAgbV9JbWFnZUNhY2hlcy5TZXRBdChwU3RyZWFtLCBwSW1hZ2VDYWNoZSk7DQotICAgIH0NCi0gICAgaW50IG9sZHNpemUgPSBwSW1hZ2VDYWNoZS0+RXN0aW1hdGVTaXplKCk7DQotICAgIHBJbWFnZUNhY2hlLT5SZXNldChwQml0bWFwKTsNCi0gICAgbV9uQ2FjaGVTaXplID0gcEltYWdlQ2FjaGUtPkVzdGltYXRlU2l6ZSgpIC0gb2xkc2l6ZTsNCi19DQotQ1BERl9JbWFnZUNhY2hlOjpDUERGX0ltYWdlQ2FjaGUoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9TdHJlYW0qIHBTdHJlYW0pDQotICAgIDogbV9wRG9jdW1lbnQocERvYykNCi0gICAgLCBtX3BTdHJlYW0ocFN0cmVhbSkNCi0gICAgLCBtX3BDYWNoZWRCaXRtYXAoTlVMTCkNCi0gICAgLCBtX3BDYWNoZWRNYXNrKE5VTEwpDQotICAgICwgbV9kd0NhY2hlU2l6ZSgwKQ0KLSAgICAsIG1fZHdUaW1lQ291bnQoMCkNCi0gICAgLCBtX3BDdXJCaXRtYXAoTlVMTCkNCi0gICAgLCBtX3BDdXJNYXNrKE5VTEwpDQotICAgICwgbV9NYXR0ZUNvbG9yKDApDQotICAgICwgbV9wUmVuZGVyU3RhdHVzKE5VTEwpDQotew0KLX0NCi1DUERGX0ltYWdlQ2FjaGU6On5DUERGX0ltYWdlQ2FjaGUoKQ0KLXsNCi0gICAgaWYgKG1fcENhY2hlZEJpdG1hcCkgew0KLSAgICAgICAgZGVsZXRlIG1fcENhY2hlZEJpdG1hcDsNCi0gICAgICAgIG1fcENhY2hlZEJpdG1hcCA9IE5VTEw7DQotICAgIH0NCi0gICAgaWYgKG1fcENhY2hlZE1hc2spIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BDYWNoZWRNYXNrOw0KLSAgICAgICAgbV9wQ2FjaGVkTWFzayA9IE5VTEw7DQotICAgIH0NCi19DQotdm9pZCBDUERGX0ltYWdlQ2FjaGU6OlJlc2V0KGNvbnN0IENGWF9ESUJpdG1hcCogcEJpdG1hcCkNCi17DQotICAgIGlmIChtX3BDYWNoZWRCaXRtYXApIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BDYWNoZWRCaXRtYXA7DQotICAgIH0NCi0gICAgbV9wQ2FjaGVkQml0bWFwID0gTlVMTDsNCi0gICAgaWYgKHBCaXRtYXApIHsNCi0gICAgICAgIG1fcENhY2hlZEJpdG1hcCA9IHBCaXRtYXAtPkNsb25lKCk7DQotICAgIH0NCi0gICAgQ2FsY1NpemUoKTsNCi19DQotdm9pZCBDUERGX1BhZ2VSZW5kZXJDYWNoZTo6Q2xlYXJJbWFnZURhdGEoKQ0KLXsNCi0gICAgRlhfUE9TSVRJT04gcG9zID0gbV9JbWFnZUNhY2hlcy5HZXRTdGFydFBvc2l0aW9uKCk7DQotICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgIEZYX0xQVk9JRCBrZXksIHZhbHVlOw0KLSAgICAgICAgbV9JbWFnZUNhY2hlcy5HZXROZXh0QXNzb2MocG9zLCBrZXksIHZhbHVlKTsNCi0gICAgICAgICgoQ1BERl9JbWFnZUNhY2hlKil2YWx1ZSktPkNsZWFySW1hZ2VEYXRhKCk7DQotICAgIH0NCi19DQotdm9pZCBDUERGX0ltYWdlQ2FjaGU6OkNsZWFySW1hZ2VEYXRhKCkNCi17DQotICAgIGlmIChtX3BDYWNoZWRCaXRtYXAgJiYgbV9wQ2FjaGVkQml0bWFwLT5HZXRCdWZmZXIoKSA9PSBOVUxMKSB7DQotICAgICAgICAoKENQREZfRElCU291cmNlKiltX3BDYWNoZWRCaXRtYXApLT5DbGVhckltYWdlRGF0YSgpOw0KLSAgICB9DQotfQ0KLXN0YXRpYyBGWF9EV09SRCBGUERGX0ltYWdlQ2FjaGVfRXN0aW1hdGVJbWFnZVNpemUoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcERJQikNCi17DQotICAgIHJldHVybiBwRElCICYmIHBESUItPkdldEJ1ZmZlcigpID8gKEZYX0RXT1JEKXBESUItPkdldEhlaWdodCgpICogcERJQi0+R2V0UGl0Y2goKSArIChGWF9EV09SRClwRElCLT5HZXRQYWxldHRlU2l6ZSgpICogNCA6IDA7DQotfQ0KLUZYX0JPT0wgQ1BERl9JbWFnZUNhY2hlOjpHZXRDYWNoZWRCaXRtYXAoQ0ZYX0RJQlNvdXJjZSomIHBCaXRtYXAsIENGWF9ESUJTb3VyY2UqJiBwTWFzaywgRlhfRFdPUkQmIE1hdHRlQ29sb3IsIENQREZfRGljdGlvbmFyeSogcFBhZ2VSZXNvdXJjZXMsDQotICAgICAgICBGWF9CT09MIGJTdGRDUywgRlhfRFdPUkQgR3JvdXBGYW1pbHksIEZYX0JPT0wgYkxvYWRNYXNrLCBDUERGX1JlbmRlclN0YXR1cyogcFJlbmRlclN0YXR1cywNCi0gICAgICAgIEZYX0lOVDMyIGRvd25zYW1wbGVXaWR0aCwgRlhfSU5UMzIgZG93bnNhbXBsZUhlaWdodCkNCi17DQotICAgIGlmIChtX3BDYWNoZWRCaXRtYXApIHsNCi0gICAgICAgIHBCaXRtYXAgPSBtX3BDYWNoZWRCaXRtYXA7DQotICAgICAgICBwTWFzayA9IG1fcENhY2hlZE1hc2s7DQotICAgICAgICBNYXR0ZUNvbG9yID0gbV9NYXR0ZUNvbG9yOw0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgaWYgKCFwUmVuZGVyU3RhdHVzKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ1BERl9SZW5kZXJDb250ZXh0KnBDb250ZXh0ID0gcFJlbmRlclN0YXR1cy0+R2V0Q29udGV4dCgpOw0KLSAgICBDUERGX1BhZ2VSZW5kZXJDYWNoZSogcFBhZ2VSZW5kZXJDYWNoZSA9IHBDb250ZXh0LT5tX3BQYWdlQ2FjaGU7DQotICAgIG1fZHdUaW1lQ291bnQgPSBwUGFnZVJlbmRlckNhY2hlLT5HZXRUaW1lQ291bnQoKTsNCi0gICAgQ1BERl9ESUJTb3VyY2UqIHBTcmMgPSBGWF9ORVcgQ1BERl9ESUJTb3VyY2U7DQotICAgIENQREZfRElCU291cmNlKiBwTWFza1NyYyA9IE5VTEw7DQotICAgIGlmICghcFNyYy0+TG9hZChtX3BEb2N1bWVudCwgbV9wU3RyZWFtLCAmcE1hc2tTcmMsICZNYXR0ZUNvbG9yLCBwUmVuZGVyU3RhdHVzLT5tX3BGb3JtUmVzb3VyY2UsIHBQYWdlUmVzb3VyY2VzLCBiU3RkQ1MsIEdyb3VwRmFtaWx5LCBiTG9hZE1hc2spKSB7DQotICAgICAgICBkZWxldGUgcFNyYzsNCi0gICAgICAgIHBCaXRtYXAgPSBOVUxMOw0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fTWF0dGVDb2xvciA9IE1hdHRlQ29sb3I7DQotI2lmICFkZWZpbmVkKF9GUERGQVBJX01JTklfKQ0KLSAgICBpZiAocFNyYy0+R2V0UGl0Y2goKSAqIHBTcmMtPkdldEhlaWdodCgpIDwgRlBERl9IVUdFX0lNQUdFX1NJWkUpIHsNCi0gICAgICAgIG1fcENhY2hlZEJpdG1hcCA9IHBTcmMtPkNsb25lKCk7DQotICAgICAgICBkZWxldGUgcFNyYzsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1fcENhY2hlZEJpdG1hcCA9IHBTcmM7DQotICAgIH0NCi0gICAgaWYgKHBNYXNrU3JjKSB7DQotICAgICAgICBtX3BDYWNoZWRNYXNrID0gcE1hc2tTcmMtPkNsb25lKCk7DQotICAgICAgICBkZWxldGUgcE1hc2tTcmM7DQotICAgIH0NCi0jZWxzZQ0KLSAgICBpZiAocFNyYy0+R2V0Rm9ybWF0KCkgPT0gRlhESUJfOGJwcFJnYiAmJiBwU3JjLT5HZXRQYWxldHRlKCkgJiYNCi0gICAgICAgICAgICBwU3JjLT5HZXRIZWlnaHQoKSAqIHBTcmMtPkdldFdpZHRoKCkgKiAzIDwgMTAyNCkgew0KLSNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8NCi0gICAgICAgIG1fcENhY2hlZEJpdG1hcCA9IHBTcmMtPkNsb25lQ29udmVydChGWERJQl9SZ2IzMik7DQotI2Vsc2UNCi0gICAgICAgIG1fcENhY2hlZEJpdG1hcCA9IHBTcmMtPkNsb25lQ29udmVydChGWERJQl9SZ2IpOw0KLSNlbmRpZg0KLSAgICAgICAgZGVsZXRlIHBTcmM7DQotICAgIH0gZWxzZSBpZiAocFNyYy0+R2V0UGl0Y2goKSAqIHBTcmMtPkdldEhlaWdodCgpIDwgMTAyNDAwKSB7DQotICAgICAgICBtX3BDYWNoZWRCaXRtYXAgPSBwU3JjLT5DbG9uZSgpOw0KLSAgICAgICAgZGVsZXRlIHBTcmM7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX3BDYWNoZWRCaXRtYXAgPSBwU3JjOw0KLSAgICB9DQotICAgIG1fcENhY2hlZE1hc2sgPSBwTWFza1NyYzsNCi0jZW5kaWYNCi0gICAgcEJpdG1hcCA9IG1fcENhY2hlZEJpdG1hcDsNCi0gICAgcE1hc2sgPSBtX3BDYWNoZWRNYXNrOw0KLSAgICBDYWxjU2l6ZSgpOw0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUNGWF9ESUJTb3VyY2UqIENQREZfSW1hZ2VDYWNoZTo6RGV0YWNoQml0bWFwKCkNCi17DQotICAgIENGWF9ESUJTb3VyY2UqIHBESUJTb3VyY2UgPSBtX3BDdXJCaXRtYXA7DQotICAgIG1fcEN1ckJpdG1hcCA9IE5VTEw7DQotICAgIHJldHVybiBwRElCU291cmNlOw0KLX0NCi1DRlhfRElCU291cmNlKiBDUERGX0ltYWdlQ2FjaGU6OkRldGFjaE1hc2soKQ0KLXsNCi0gICAgQ0ZYX0RJQlNvdXJjZSogcERJQlNvdXJjZSA9IG1fcEN1ck1hc2s7DQotICAgIG1fcEN1ck1hc2sgPSBOVUxMOw0KLSAgICByZXR1cm4gcERJQlNvdXJjZTsNCi19DQotaW50CUNQREZfSW1hZ2VDYWNoZTo6U3RhcnRHZXRDYWNoZWRCaXRtYXAoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybVJlc291cmNlcywgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZVJlc291cmNlcywgRlhfQk9PTCBiU3RkQ1MsDQotICAgICAgICBGWF9EV09SRCBHcm91cEZhbWlseSwgRlhfQk9PTCBiTG9hZE1hc2ssIENQREZfUmVuZGVyU3RhdHVzKiBwUmVuZGVyU3RhdHVzLA0KLSAgICAgICAgRlhfSU5UMzIgZG93bnNhbXBsZVdpZHRoLCBGWF9JTlQzMiBkb3duc2FtcGxlSGVpZ2h0KQ0KLXsNCi0gICAgaWYgKG1fcENhY2hlZEJpdG1hcCkgew0KLSAgICAgICAgbV9wQ3VyQml0bWFwID0gbV9wQ2FjaGVkQml0bWFwOw0KLSAgICAgICAgbV9wQ3VyTWFzayA9IG1fcENhY2hlZE1hc2s7DQotICAgICAgICByZXR1cm4gMTsNCi0gICAgfQ0KLSAgICBpZiAoIXBSZW5kZXJTdGF0dXMpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIG1fcFJlbmRlclN0YXR1cyA9IHBSZW5kZXJTdGF0dXM7DQotICAgIG1fcEN1ckJpdG1hcCA9IEZYX05FVyBDUERGX0RJQlNvdXJjZTsNCi0gICAgaW50IHJldCA9ICgoQ1BERl9ESUJTb3VyY2UqKW1fcEN1ckJpdG1hcCktPlN0YXJ0TG9hZERJQlNvdXJjZShtX3BEb2N1bWVudCwgbV9wU3RyZWFtLCBUUlVFLCBwRm9ybVJlc291cmNlcywgcFBhZ2VSZXNvdXJjZXMsIGJTdGRDUywgR3JvdXBGYW1pbHksIGJMb2FkTWFzayk7DQotICAgIGlmIChyZXQgPT0gMikgew0KLSAgICAgICAgcmV0dXJuIHJldDsNCi0gICAgfQ0KLSAgICBpZiAoIXJldCkgew0KLSAgICAgICAgZGVsZXRlIG1fcEN1ckJpdG1hcDsNCi0gICAgICAgIG1fcEN1ckJpdG1hcCA9IE5VTEw7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBDb250aW51ZUdldENhY2hlZEJpdG1hcCgpOw0KLSAgICByZXR1cm4gMDsNCi19DQotaW50IENQREZfSW1hZ2VDYWNoZTo6Q29udGludWVHZXRDYWNoZWRCaXRtYXAoKQ0KLXsNCi0gICAgbV9NYXR0ZUNvbG9yID0gKChDUERGX0RJQlNvdXJjZSopbV9wQ3VyQml0bWFwKS0+bV9NYXR0ZUNvbG9yOw0KLSAgICBtX3BDdXJNYXNrID0gKChDUERGX0RJQlNvdXJjZSopbV9wQ3VyQml0bWFwKS0+RGV0YWNoTWFzaygpOw0KLSAgICBDUERGX1JlbmRlckNvbnRleHQqcENvbnRleHQgPSBtX3BSZW5kZXJTdGF0dXMtPkdldENvbnRleHQoKTsNCi0gICAgQ1BERl9QYWdlUmVuZGVyQ2FjaGUqIHBQYWdlUmVuZGVyQ2FjaGUgPSBwQ29udGV4dC0+bV9wUGFnZUNhY2hlOw0KLSAgICBtX2R3VGltZUNvdW50ID0gcFBhZ2VSZW5kZXJDYWNoZS0+R2V0VGltZUNvdW50KCk7DQotI2lmICFkZWZpbmVkKF9GUERGQVBJX01JTklfKQ0KLSAgICBpZiAobV9wQ3VyQml0bWFwLT5HZXRQaXRjaCgpICogbV9wQ3VyQml0bWFwLT5HZXRIZWlnaHQoKSA8IEZQREZfSFVHRV9JTUFHRV9TSVpFKSB7DQotICAgICAgICBtX3BDYWNoZWRCaXRtYXAgPSBtX3BDdXJCaXRtYXAtPkNsb25lKCk7DQotICAgICAgICBkZWxldGUgbV9wQ3VyQml0bWFwOw0KLSAgICAgICAgbV9wQ3VyQml0bWFwID0gTlVMTDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1fcENhY2hlZEJpdG1hcCA9IG1fcEN1ckJpdG1hcDsNCi0gICAgfQ0KLSAgICBpZiAobV9wQ3VyTWFzaykgew0KLSAgICAgICAgbV9wQ2FjaGVkTWFzayA9IG1fcEN1ck1hc2stPkNsb25lKCk7DQotICAgICAgICBkZWxldGUgbV9wQ3VyTWFzazsNCi0gICAgICAgIG1fcEN1ck1hc2sgPSBOVUxMOw0KLSAgICB9DQotI2Vsc2UNCi0gICAgaWYgKG1fcEN1ckJpdG1hcC0+R2V0Rm9ybWF0KCkgPT0gRlhESUJfOGJwcFJnYiAmJiBtX3BDdXJCaXRtYXAtPkdldFBhbGV0dGUoKSAmJg0KLSAgICAgICAgICAgIG1fcEN1ckJpdG1hcC0+R2V0SGVpZ2h0KCkgKiBtX3BDdXJCaXRtYXAtPkdldFdpZHRoKCkgKiAzIDwgMTAyNCkgew0KLSAgICAgICAgbV9wQ2FjaGVkQml0bWFwID0gbV9wQ3VyQml0bWFwLT5DbG9uZUNvbnZlcnQoRlhESUJfUmdiMzIpOw0KLSAgICAgICAgbV9wQ2FjaGVkQml0bWFwID0gbV9wQ3VyQml0bWFwLT5DbG9uZUNvbnZlcnQoRlhESUJfUmdiKTsNCi0gICAgICAgIGRlbGV0ZSBtX3BDdXJCaXRtYXA7DQotICAgICAgICBtX3BDdXJCaXRtYXAgPSBOVUxMOw0KLSAgICB9IGVsc2UgaWYgKG1fcEN1ckJpdG1hcC0+R2V0UGl0Y2goKSAqIG1fcEN1ckJpdG1hcC0+R2V0SGVpZ2h0KCkgPCAxMDI0MDApIHsNCi0gICAgICAgIG1fcENhY2hlZEJpdG1hcCA9IG1fcEN1ckJpdG1hcC0+Q2xvbmUoKTsNCi0gICAgICAgIGRlbGV0ZSBtX3BDdXJCaXRtYXA7DQotICAgICAgICBtX3BDdXJCaXRtYXAgPSBOVUxMOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wQ2FjaGVkQml0bWFwID0gbV9wQ3VyQml0bWFwOw0KLSAgICB9DQotICAgIG1fcENhY2hlZE1hc2sgPSBtX3BDdXJNYXNrOw0KLSNlbmRpZg0KLSAgICBtX3BDdXJCaXRtYXAgPSBtX3BDYWNoZWRCaXRtYXA7DQotICAgIG1fcEN1ck1hc2sgPSBtX3BDYWNoZWRNYXNrOw0KLSAgICBDYWxjU2l6ZSgpOw0KLSAgICByZXR1cm4gMDsNCi19DQotaW50CUNQREZfSW1hZ2VDYWNoZTo6Q29udGludWUoSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBpbnQgcmV0ID0gKChDUERGX0RJQlNvdXJjZSopbV9wQ3VyQml0bWFwKS0+Q29udGludWVMb2FkRElCU291cmNlKHBQYXVzZSk7DQotICAgIGlmIChyZXQgPT0gMikgew0KLSAgICAgICAgcmV0dXJuIHJldDsNCi0gICAgfQ0KLSAgICBpZiAoIXJldCkgew0KLSAgICAgICAgZGVsZXRlIG1fcEN1ckJpdG1hcDsNCi0gICAgICAgIG1fcEN1ckJpdG1hcCA9IE5VTEw7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBDb250aW51ZUdldENhY2hlZEJpdG1hcCgpOw0KLSAgICByZXR1cm4gMDsNCi19DQotdm9pZCBDUERGX0ltYWdlQ2FjaGU6OkNhbGNTaXplKCkNCi17DQotICAgIG1fZHdDYWNoZVNpemUgPSBGUERGX0ltYWdlQ2FjaGVfRXN0aW1hdGVJbWFnZVNpemUobV9wQ2FjaGVkQml0bWFwKSArIEZQREZfSW1hZ2VDYWNoZV9Fc3RpbWF0ZUltYWdlU2l6ZShtX3BDYWNoZWRNYXNrKTsNCi19DQotdm9pZCBDUERGX0RvY3VtZW50OjpDbGVhclJlbmRlckZvbnQoKQ0KLXsNCi0gICAgaWYgKG1fcERvY1JlbmRlcikgew0KLSAgICAgICAgQ0ZYX0ZvbnRDYWNoZSogcENhY2hlID0gbV9wRG9jUmVuZGVyLT5HZXRGb250Q2FjaGUoKTsNCi0gICAgICAgIGlmIChwQ2FjaGUpIHsNCi0gICAgICAgICAgICBwQ2FjaGUtPkZyZWVDYWNoZShGQUxTRSk7DQotICAgICAgICB9DQotICAgIH0NCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3JlbmRlci5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2VvYmouaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2UuaCIKKyNpbmNsdWRlICIuLi9mcGRmX3BhZ2UvcGFnZWludC5oIgorI2luY2x1ZGUgInJlbmRlcl9pbnQuaCIKK3N0cnVjdCBDQUNIRUlORk8geworICAgIEZYX0RXT1JEIHRpbWU7CisgICAgQ1BERl9TdHJlYW0qIHBTdHJlYW07Cit9OworZXh0ZXJuICJDIiB7CisgICAgc3RhdGljIGludCBjb21wYXJlKGNvbnN0IHZvaWQqIGRhdGExLCBjb25zdCB2b2lkKiBkYXRhMikKKyAgICB7CisgICAgICAgIHJldHVybiAoKENBQ0hFSU5GTyopZGF0YTEpLT50aW1lIC0gKChDQUNIRUlORk8qKWRhdGEyKS0+dGltZTsKKyAgICB9Cit9Owordm9pZCBDUERGX1BhZ2U6OkNsZWFyUmVuZGVyQ2FjaGUoKQoreworICAgIGlmIChtX3BQYWdlUmVuZGVyKSB7CisgICAgICAgIG1fcFBhZ2VSZW5kZXItPkNsZWFyQWxsKCk7CisgICAgfQorfQordm9pZCBDUERGX1BhZ2VSZW5kZXJDYWNoZTo6Q2xlYXJBbGwoKQoreworICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fSW1hZ2VDYWNoZXMuR2V0U3RhcnRQb3NpdGlvbigpOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgRlhfTFBWT0lEIGtleSwgdmFsdWU7CisgICAgICAgIG1fSW1hZ2VDYWNoZXMuR2V0TmV4dEFzc29jKHBvcywga2V5LCB2YWx1ZSk7CisgICAgICAgIGRlbGV0ZSAoQ1BERl9JbWFnZUNhY2hlKil2YWx1ZTsKKyAgICB9CisgICAgbV9JbWFnZUNhY2hlcy5SZW1vdmVBbGwoKTsKKyAgICBtX25DYWNoZVNpemUgPSAwOworICAgIG1fblRpbWVDb3VudCA9IDA7Cit9Cit2b2lkIENQREZfUGFnZVJlbmRlckNhY2hlOjpDYWNoZU9wdGltaXphdGlvbihGWF9JTlQzMiBkd0xpbWl0Q2FjaGVTaXplKQoreworICAgIGlmIChtX25DYWNoZVNpemUgPD0gKEZYX0RXT1JEKWR3TGltaXRDYWNoZVNpemUpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgbkNvdW50ID0gbV9JbWFnZUNhY2hlcy5HZXRDb3VudCgpOworICAgIENBQ0hFSU5GTyogcENBQ0hFSU5GTyA9IChDQUNIRUlORk8qKUZYX0FsbG9jKEZYX0JZVEUsIChzaXplb2YgKENBQ0hFSU5GTykpICogbkNvdW50KTsKKyAgICBGWF9QT1NJVElPTiBwb3MgPSBtX0ltYWdlQ2FjaGVzLkdldFN0YXJ0UG9zaXRpb24oKTsKKyAgICBpbnQgaSA9IDA7CisgICAgd2hpbGUgKHBvcykgeworICAgICAgICBGWF9MUFZPSUQga2V5LCB2YWx1ZTsKKyAgICAgICAgbV9JbWFnZUNhY2hlcy5HZXROZXh0QXNzb2MocG9zLCBrZXksIHZhbHVlKTsKKyAgICAgICAgcENBQ0hFSU5GT1tpXS50aW1lID0gKChDUERGX0ltYWdlQ2FjaGUqKXZhbHVlKS0+R2V0VGltZUNvdW50KCk7CisgICAgICAgIHBDQUNIRUlORk9baSsrXS5wU3RyZWFtID0gKChDUERGX0ltYWdlQ2FjaGUqKXZhbHVlKS0+R2V0U3RyZWFtKCk7CisgICAgfQorICAgIEZYU1lTX3Fzb3J0KHBDQUNIRUlORk8sIG5Db3VudCwgc2l6ZW9mIChDQUNIRUlORk8pLCBjb21wYXJlKTsKKyAgICBGWF9EV09SRCBuVGltZUNvdW50ID0gbV9uVGltZUNvdW50OworICAgIGlmIChuVGltZUNvdW50ICsgMSA8IG5UaW1lQ291bnQpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5Db3VudDsgaSArKykgeworICAgICAgICAgICAgKChDUERGX0ltYWdlQ2FjaGUqKShtX0ltYWdlQ2FjaGVzW3BDQUNIRUlORk9baV0ucFN0cmVhbV0pKS0+bV9kd1RpbWVDb3VudCA9IGk7CisgICAgICAgIH0KKyAgICAgICAgbV9uVGltZUNvdW50ID0gbkNvdW50OworICAgIH0KKyAgICBpID0gMDsKKyAgICB3aGlsZShuQ291bnQgPiAxNSkgeworICAgICAgICBDbGVhckltYWdlQ2FjaGUocENBQ0hFSU5GT1tpKytdLnBTdHJlYW0pOworICAgICAgICBuQ291bnQtLTsKKyAgICB9CisgICAgd2hpbGUgKG1fbkNhY2hlU2l6ZSA+IChGWF9EV09SRClkd0xpbWl0Q2FjaGVTaXplKSB7CisgICAgICAgIENsZWFySW1hZ2VDYWNoZShwQ0FDSEVJTkZPW2krK10ucFN0cmVhbSk7CisgICAgfQorICAgIEZYX0ZyZWUocENBQ0hFSU5GTyk7Cit9Cit2b2lkIENQREZfUGFnZVJlbmRlckNhY2hlOjpDbGVhckltYWdlQ2FjaGUoQ1BERl9TdHJlYW0qIHBTdHJlYW0pCit7CisgICAgRlhfTFBWT0lEIHZhbHVlID0gbV9JbWFnZUNhY2hlcy5HZXRWYWx1ZUF0KHBTdHJlYW0pOworICAgIGlmICh2YWx1ZSA9PSBOVUxMKQl7CisgICAgICAgIG1fSW1hZ2VDYWNoZXMuUmVtb3ZlS2V5KHBTdHJlYW0pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fbkNhY2hlU2l6ZSAtPSAoKENQREZfSW1hZ2VDYWNoZSopdmFsdWUpLT5Fc3RpbWF0ZVNpemUoKTsKKyAgICBkZWxldGUgKENQREZfSW1hZ2VDYWNoZSopdmFsdWU7CisgICAgbV9JbWFnZUNhY2hlcy5SZW1vdmVLZXkocFN0cmVhbSk7Cit9CitGWF9EV09SRCBDUERGX1BhZ2VSZW5kZXJDYWNoZTo6RXN0aW1hdGVTaXplKCkKK3sKKyAgICBGWF9EV09SRCBkd1NpemUgPSAwOworICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fSW1hZ2VDYWNoZXMuR2V0U3RhcnRQb3NpdGlvbigpOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgRlhfTFBWT0lEIGtleSwgdmFsdWU7CisgICAgICAgIG1fSW1hZ2VDYWNoZXMuR2V0TmV4dEFzc29jKHBvcywga2V5LCB2YWx1ZSk7CisgICAgICAgIGR3U2l6ZSArPSAoKENQREZfSW1hZ2VDYWNoZSopdmFsdWUpLT5Fc3RpbWF0ZVNpemUoKTsKKyAgICB9CisgICAgbV9uQ2FjaGVTaXplID0gZHdTaXplOworICAgIHJldHVybiBkd1NpemU7Cit9CitGWF9EV09SRCBDUERGX1BhZ2VSZW5kZXJDYWNoZTo6R2V0Q2FjaGVkU2l6ZShDUERGX1N0cmVhbSogcFN0cmVhbSkgY29uc3QKK3sKKyAgICBpZiAocFN0cmVhbSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBtX25DYWNoZVNpemU7CisgICAgfQorICAgIENQREZfSW1hZ2VDYWNoZSogcEltYWdlQ2FjaGU7CisgICAgaWYgKCFtX0ltYWdlQ2FjaGVzLkxvb2t1cChwU3RyZWFtLCAoRlhfTFBWT0lEJilwSW1hZ2VDYWNoZSkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBwSW1hZ2VDYWNoZS0+RXN0aW1hdGVTaXplKCk7Cit9Cit2b2lkIENQREZfUGFnZVJlbmRlckNhY2hlOjpHZXRDYWNoZWRCaXRtYXAoQ1BERl9TdHJlYW0qIHBTdHJlYW0sIENGWF9ESUJTb3VyY2UqJiBwQml0bWFwLCBDRlhfRElCU291cmNlKiYgcE1hc2ssIEZYX0RXT1JEJiBNYXR0ZUNvbG9yLAorICAgICAgICBGWF9CT09MIGJTdGRDUywgRlhfRFdPUkQgR3JvdXBGYW1pbHksIEZYX0JPT0wgYkxvYWRNYXNrLCBDUERGX1JlbmRlclN0YXR1cyogcFJlbmRlclN0YXR1cywKKyAgICAgICAgRlhfSU5UMzIgZG93bnNhbXBsZVdpZHRoLCBGWF9JTlQzMiBkb3duc2FtcGxlSGVpZ2h0KQoreworICAgIENQREZfSW1hZ2VDYWNoZSogcEltYWdlQ2FjaGU7CisgICAgRlhfQk9PTCBiRmluZCA9IG1fSW1hZ2VDYWNoZXMuTG9va3VwKHBTdHJlYW0sIChGWF9MUFZPSUQmKXBJbWFnZUNhY2hlKTsKKyAgICBpZiAoIWJGaW5kKSB7CisgICAgICAgIHBJbWFnZUNhY2hlID0gRlhfTkVXIENQREZfSW1hZ2VDYWNoZShtX3BQYWdlLT5tX3BEb2N1bWVudCwgcFN0cmVhbSk7CisgICAgfQorICAgIG1fblRpbWVDb3VudCArKzsKKyAgICBGWF9CT09MIGJDYWNoZWQgPSBwSW1hZ2VDYWNoZS0+R2V0Q2FjaGVkQml0bWFwKHBCaXRtYXAsIHBNYXNrLCBNYXR0ZUNvbG9yLCBtX3BQYWdlLT5tX3BQYWdlUmVzb3VyY2VzLCBiU3RkQ1MsIEdyb3VwRmFtaWx5LCBiTG9hZE1hc2ssIHBSZW5kZXJTdGF0dXMsIGRvd25zYW1wbGVXaWR0aCwgZG93bnNhbXBsZUhlaWdodCk7CisgICAgaWYgKCFiRmluZCkgeworICAgICAgICBtX0ltYWdlQ2FjaGVzLlNldEF0KHBTdHJlYW0sIHBJbWFnZUNhY2hlKTsKKyAgICB9CisgICAgaWYgKCFiQ2FjaGVkKSB7CisgICAgICAgIG1fbkNhY2hlU2l6ZSArPSBwSW1hZ2VDYWNoZS0+RXN0aW1hdGVTaXplKCk7CisgICAgfQorfQorRlhfQk9PTAlDUERGX1BhZ2VSZW5kZXJDYWNoZTo6U3RhcnRHZXRDYWNoZWRCaXRtYXAoQ1BERl9TdHJlYW0qIHBTdHJlYW0sIEZYX0JPT0wgYlN0ZENTLCBGWF9EV09SRCBHcm91cEZhbWlseSwgRlhfQk9PTCBiTG9hZE1hc2ssIENQREZfUmVuZGVyU3RhdHVzKiBwUmVuZGVyU3RhdHVzLCBGWF9JTlQzMiBkb3duc2FtcGxlV2lkdGgsIEZYX0lOVDMyIGRvd25zYW1wbGVIZWlnaHQpCit7CisgICAgbV9iQ3VyRmluZENhY2hlID0gbV9JbWFnZUNhY2hlcy5Mb29rdXAocFN0cmVhbSwgKEZYX0xQVk9JRCYpbV9wQ3VySW1hZ2VDYWNoZSk7CisgICAgaWYgKCFtX2JDdXJGaW5kQ2FjaGUpIHsKKyAgICAgICAgbV9wQ3VySW1hZ2VDYWNoZSA9IEZYX05FVyBDUERGX0ltYWdlQ2FjaGUobV9wUGFnZS0+bV9wRG9jdW1lbnQsIHBTdHJlYW0pOworICAgIH0KKyAgICBpbnQgcmV0ID0gbV9wQ3VySW1hZ2VDYWNoZS0+U3RhcnRHZXRDYWNoZWRCaXRtYXAocFJlbmRlclN0YXR1cy0+bV9wRm9ybVJlc291cmNlLCBtX3BQYWdlLT5tX3BQYWdlUmVzb3VyY2VzLCBiU3RkQ1MsIEdyb3VwRmFtaWx5LCBiTG9hZE1hc2ssIHBSZW5kZXJTdGF0dXMsIGRvd25zYW1wbGVXaWR0aCwgZG93bnNhbXBsZUhlaWdodCk7CisgICAgaWYgKHJldCA9PSAyKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBtX25UaW1lQ291bnQgKys7CisgICAgaWYgKCFtX2JDdXJGaW5kQ2FjaGUpIHsKKyAgICAgICAgbV9JbWFnZUNhY2hlcy5TZXRBdChwU3RyZWFtLCBtX3BDdXJJbWFnZUNhY2hlKTsKKyAgICB9CisgICAgaWYgKCFyZXQpIHsKKyAgICAgICAgbV9uQ2FjaGVTaXplICs9IG1fcEN1ckltYWdlQ2FjaGUtPkVzdGltYXRlU2l6ZSgpOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitGWF9CT09MCUNQREZfUGFnZVJlbmRlckNhY2hlOjpDb250aW51ZShJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBpbnQgcmV0ID0gbV9wQ3VySW1hZ2VDYWNoZS0+Q29udGludWUocFBhdXNlKTsKKyAgICBpZiAocmV0ID09IDIpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIG1fblRpbWVDb3VudCArKzsKKyAgICBpZiAoIW1fYkN1ckZpbmRDYWNoZSkgeworICAgICAgICBtX0ltYWdlQ2FjaGVzLlNldEF0KG1fcEN1ckltYWdlQ2FjaGUtPkdldFN0cmVhbSgpLCBtX3BDdXJJbWFnZUNhY2hlKTsKKyAgICB9CisgICAgaWYgKCFyZXQpIHsKKyAgICAgICAgbV9uQ2FjaGVTaXplICs9IG1fcEN1ckltYWdlQ2FjaGUtPkVzdGltYXRlU2l6ZSgpOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9Cit2b2lkIENQREZfUGFnZVJlbmRlckNhY2hlOjpSZXNldEJpdG1hcChDUERGX1N0cmVhbSogcFN0cmVhbSwgY29uc3QgQ0ZYX0RJQml0bWFwKiBwQml0bWFwKQoreworICAgIENQREZfSW1hZ2VDYWNoZSogcEltYWdlQ2FjaGU7CisgICAgaWYgKCFtX0ltYWdlQ2FjaGVzLkxvb2t1cChwU3RyZWFtLCAoRlhfTFBWT0lEJilwSW1hZ2VDYWNoZSkpIHsKKyAgICAgICAgaWYgKHBCaXRtYXAgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHBJbWFnZUNhY2hlID0gRlhfTkVXIENQREZfSW1hZ2VDYWNoZShtX3BQYWdlLT5tX3BEb2N1bWVudCwgcFN0cmVhbSk7CisgICAgICAgIG1fSW1hZ2VDYWNoZXMuU2V0QXQocFN0cmVhbSwgcEltYWdlQ2FjaGUpOworICAgIH0KKyAgICBpbnQgb2xkc2l6ZSA9IHBJbWFnZUNhY2hlLT5Fc3RpbWF0ZVNpemUoKTsKKyAgICBwSW1hZ2VDYWNoZS0+UmVzZXQocEJpdG1hcCk7CisgICAgbV9uQ2FjaGVTaXplID0gcEltYWdlQ2FjaGUtPkVzdGltYXRlU2l6ZSgpIC0gb2xkc2l6ZTsKK30KK0NQREZfSW1hZ2VDYWNoZTo6Q1BERl9JbWFnZUNhY2hlKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfU3RyZWFtKiBwU3RyZWFtKQorICAgIDogbV9wRG9jdW1lbnQocERvYykKKyAgICAsIG1fcFN0cmVhbShwU3RyZWFtKQorICAgICwgbV9wQ2FjaGVkQml0bWFwKE5VTEwpCisgICAgLCBtX3BDYWNoZWRNYXNrKE5VTEwpCisgICAgLCBtX2R3Q2FjaGVTaXplKDApCisgICAgLCBtX2R3VGltZUNvdW50KDApCisgICAgLCBtX3BDdXJCaXRtYXAoTlVMTCkKKyAgICAsIG1fcEN1ck1hc2soTlVMTCkKKyAgICAsIG1fTWF0dGVDb2xvcigwKQorICAgICwgbV9wUmVuZGVyU3RhdHVzKE5VTEwpCit7Cit9CitDUERGX0ltYWdlQ2FjaGU6On5DUERGX0ltYWdlQ2FjaGUoKQoreworICAgIGlmIChtX3BDYWNoZWRCaXRtYXApIHsKKyAgICAgICAgZGVsZXRlIG1fcENhY2hlZEJpdG1hcDsKKyAgICAgICAgbV9wQ2FjaGVkQml0bWFwID0gTlVMTDsKKyAgICB9CisgICAgaWYgKG1fcENhY2hlZE1hc2spIHsKKyAgICAgICAgZGVsZXRlIG1fcENhY2hlZE1hc2s7CisgICAgICAgIG1fcENhY2hlZE1hc2sgPSBOVUxMOworICAgIH0KK30KK3ZvaWQgQ1BERl9JbWFnZUNhY2hlOjpSZXNldChjb25zdCBDRlhfRElCaXRtYXAqIHBCaXRtYXApCit7CisgICAgaWYgKG1fcENhY2hlZEJpdG1hcCkgeworICAgICAgICBkZWxldGUgbV9wQ2FjaGVkQml0bWFwOworICAgIH0KKyAgICBtX3BDYWNoZWRCaXRtYXAgPSBOVUxMOworICAgIGlmIChwQml0bWFwKSB7CisgICAgICAgIG1fcENhY2hlZEJpdG1hcCA9IHBCaXRtYXAtPkNsb25lKCk7CisgICAgfQorICAgIENhbGNTaXplKCk7Cit9Cit2b2lkIENQREZfUGFnZVJlbmRlckNhY2hlOjpDbGVhckltYWdlRGF0YSgpCit7CisgICAgRlhfUE9TSVRJT04gcG9zID0gbV9JbWFnZUNhY2hlcy5HZXRTdGFydFBvc2l0aW9uKCk7CisgICAgd2hpbGUgKHBvcykgeworICAgICAgICBGWF9MUFZPSUQga2V5LCB2YWx1ZTsKKyAgICAgICAgbV9JbWFnZUNhY2hlcy5HZXROZXh0QXNzb2MocG9zLCBrZXksIHZhbHVlKTsKKyAgICAgICAgKChDUERGX0ltYWdlQ2FjaGUqKXZhbHVlKS0+Q2xlYXJJbWFnZURhdGEoKTsKKyAgICB9Cit9Cit2b2lkIENQREZfSW1hZ2VDYWNoZTo6Q2xlYXJJbWFnZURhdGEoKQoreworICAgIGlmIChtX3BDYWNoZWRCaXRtYXAgJiYgbV9wQ2FjaGVkQml0bWFwLT5HZXRCdWZmZXIoKSA9PSBOVUxMKSB7CisgICAgICAgICgoQ1BERl9ESUJTb3VyY2UqKW1fcENhY2hlZEJpdG1hcCktPkNsZWFySW1hZ2VEYXRhKCk7CisgICAgfQorfQorc3RhdGljIEZYX0RXT1JEIEZQREZfSW1hZ2VDYWNoZV9Fc3RpbWF0ZUltYWdlU2l6ZShjb25zdCBDRlhfRElCU291cmNlKiBwRElCKQoreworICAgIHJldHVybiBwRElCICYmIHBESUItPkdldEJ1ZmZlcigpID8gKEZYX0RXT1JEKXBESUItPkdldEhlaWdodCgpICogcERJQi0+R2V0UGl0Y2goKSArIChGWF9EV09SRClwRElCLT5HZXRQYWxldHRlU2l6ZSgpICogNCA6IDA7Cit9CitGWF9CT09MIENQREZfSW1hZ2VDYWNoZTo6R2V0Q2FjaGVkQml0bWFwKENGWF9ESUJTb3VyY2UqJiBwQml0bWFwLCBDRlhfRElCU291cmNlKiYgcE1hc2ssIEZYX0RXT1JEJiBNYXR0ZUNvbG9yLCBDUERGX0RpY3Rpb25hcnkqIHBQYWdlUmVzb3VyY2VzLAorICAgICAgICBGWF9CT09MIGJTdGRDUywgRlhfRFdPUkQgR3JvdXBGYW1pbHksIEZYX0JPT0wgYkxvYWRNYXNrLCBDUERGX1JlbmRlclN0YXR1cyogcFJlbmRlclN0YXR1cywKKyAgICAgICAgRlhfSU5UMzIgZG93bnNhbXBsZVdpZHRoLCBGWF9JTlQzMiBkb3duc2FtcGxlSGVpZ2h0KQoreworICAgIGlmIChtX3BDYWNoZWRCaXRtYXApIHsKKyAgICAgICAgcEJpdG1hcCA9IG1fcENhY2hlZEJpdG1hcDsKKyAgICAgICAgcE1hc2sgPSBtX3BDYWNoZWRNYXNrOworICAgICAgICBNYXR0ZUNvbG9yID0gbV9NYXR0ZUNvbG9yOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgaWYgKCFwUmVuZGVyU3RhdHVzKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgQ1BERl9SZW5kZXJDb250ZXh0KnBDb250ZXh0ID0gcFJlbmRlclN0YXR1cy0+R2V0Q29udGV4dCgpOworICAgIENQREZfUGFnZVJlbmRlckNhY2hlKiBwUGFnZVJlbmRlckNhY2hlID0gcENvbnRleHQtPm1fcFBhZ2VDYWNoZTsKKyAgICBtX2R3VGltZUNvdW50ID0gcFBhZ2VSZW5kZXJDYWNoZS0+R2V0VGltZUNvdW50KCk7CisgICAgQ1BERl9ESUJTb3VyY2UqIHBTcmMgPSBGWF9ORVcgQ1BERl9ESUJTb3VyY2U7CisgICAgQ1BERl9ESUJTb3VyY2UqIHBNYXNrU3JjID0gTlVMTDsKKyAgICBpZiAoIXBTcmMtPkxvYWQobV9wRG9jdW1lbnQsIG1fcFN0cmVhbSwgJnBNYXNrU3JjLCAmTWF0dGVDb2xvciwgcFJlbmRlclN0YXR1cy0+bV9wRm9ybVJlc291cmNlLCBwUGFnZVJlc291cmNlcywgYlN0ZENTLCBHcm91cEZhbWlseSwgYkxvYWRNYXNrKSkgeworICAgICAgICBkZWxldGUgcFNyYzsKKyAgICAgICAgcEJpdG1hcCA9IE5VTEw7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9NYXR0ZUNvbG9yID0gTWF0dGVDb2xvcjsKKyNpZiAhZGVmaW5lZChfRlBERkFQSV9NSU5JXykKKyAgICBpZiAocFNyYy0+R2V0UGl0Y2goKSAqIHBTcmMtPkdldEhlaWdodCgpIDwgRlBERl9IVUdFX0lNQUdFX1NJWkUpIHsKKyAgICAgICAgbV9wQ2FjaGVkQml0bWFwID0gcFNyYy0+Q2xvbmUoKTsKKyAgICAgICAgZGVsZXRlIHBTcmM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wQ2FjaGVkQml0bWFwID0gcFNyYzsKKyAgICB9CisgICAgaWYgKHBNYXNrU3JjKSB7CisgICAgICAgIG1fcENhY2hlZE1hc2sgPSBwTWFza1NyYy0+Q2xvbmUoKTsKKyAgICAgICAgZGVsZXRlIHBNYXNrU3JjOworICAgIH0KKyNlbHNlCisgICAgaWYgKHBTcmMtPkdldEZvcm1hdCgpID09IEZYRElCXzhicHBSZ2IgJiYgcFNyYy0+R2V0UGFsZXR0ZSgpICYmCisgICAgICAgICAgICBwU3JjLT5HZXRIZWlnaHQoKSAqIHBTcmMtPkdldFdpZHRoKCkgKiAzIDwgMTAyNCkgeworI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXworICAgICAgICBtX3BDYWNoZWRCaXRtYXAgPSBwU3JjLT5DbG9uZUNvbnZlcnQoRlhESUJfUmdiMzIpOworI2Vsc2UKKyAgICAgICAgbV9wQ2FjaGVkQml0bWFwID0gcFNyYy0+Q2xvbmVDb252ZXJ0KEZYRElCX1JnYik7CisjZW5kaWYKKyAgICAgICAgZGVsZXRlIHBTcmM7CisgICAgfSBlbHNlIGlmIChwU3JjLT5HZXRQaXRjaCgpICogcFNyYy0+R2V0SGVpZ2h0KCkgPCAxMDI0MDApIHsKKyAgICAgICAgbV9wQ2FjaGVkQml0bWFwID0gcFNyYy0+Q2xvbmUoKTsKKyAgICAgICAgZGVsZXRlIHBTcmM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wQ2FjaGVkQml0bWFwID0gcFNyYzsKKyAgICB9CisgICAgbV9wQ2FjaGVkTWFzayA9IHBNYXNrU3JjOworI2VuZGlmCisgICAgcEJpdG1hcCA9IG1fcENhY2hlZEJpdG1hcDsKKyAgICBwTWFzayA9IG1fcENhY2hlZE1hc2s7CisgICAgQ2FsY1NpemUoKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CitDRlhfRElCU291cmNlKiBDUERGX0ltYWdlQ2FjaGU6OkRldGFjaEJpdG1hcCgpCit7CisgICAgQ0ZYX0RJQlNvdXJjZSogcERJQlNvdXJjZSA9IG1fcEN1ckJpdG1hcDsKKyAgICBtX3BDdXJCaXRtYXAgPSBOVUxMOworICAgIHJldHVybiBwRElCU291cmNlOworfQorQ0ZYX0RJQlNvdXJjZSogQ1BERl9JbWFnZUNhY2hlOjpEZXRhY2hNYXNrKCkKK3sKKyAgICBDRlhfRElCU291cmNlKiBwRElCU291cmNlID0gbV9wQ3VyTWFzazsKKyAgICBtX3BDdXJNYXNrID0gTlVMTDsKKyAgICByZXR1cm4gcERJQlNvdXJjZTsKK30KK2ludAlDUERGX0ltYWdlQ2FjaGU6OlN0YXJ0R2V0Q2FjaGVkQml0bWFwKENQREZfRGljdGlvbmFyeSogcEZvcm1SZXNvdXJjZXMsIENQREZfRGljdGlvbmFyeSogcFBhZ2VSZXNvdXJjZXMsIEZYX0JPT0wgYlN0ZENTLAorICAgICAgICBGWF9EV09SRCBHcm91cEZhbWlseSwgRlhfQk9PTCBiTG9hZE1hc2ssIENQREZfUmVuZGVyU3RhdHVzKiBwUmVuZGVyU3RhdHVzLAorICAgICAgICBGWF9JTlQzMiBkb3duc2FtcGxlV2lkdGgsIEZYX0lOVDMyIGRvd25zYW1wbGVIZWlnaHQpCit7CisgICAgaWYgKG1fcENhY2hlZEJpdG1hcCkgeworICAgICAgICBtX3BDdXJCaXRtYXAgPSBtX3BDYWNoZWRCaXRtYXA7CisgICAgICAgIG1fcEN1ck1hc2sgPSBtX3BDYWNoZWRNYXNrOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgaWYgKCFwUmVuZGVyU3RhdHVzKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBtX3BSZW5kZXJTdGF0dXMgPSBwUmVuZGVyU3RhdHVzOworICAgIG1fcEN1ckJpdG1hcCA9IEZYX05FVyBDUERGX0RJQlNvdXJjZTsKKyAgICBpbnQgcmV0ID0gKChDUERGX0RJQlNvdXJjZSopbV9wQ3VyQml0bWFwKS0+U3RhcnRMb2FkRElCU291cmNlKG1fcERvY3VtZW50LCBtX3BTdHJlYW0sIFRSVUUsIHBGb3JtUmVzb3VyY2VzLCBwUGFnZVJlc291cmNlcywgYlN0ZENTLCBHcm91cEZhbWlseSwgYkxvYWRNYXNrKTsKKyAgICBpZiAocmV0ID09IDIpIHsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisgICAgaWYgKCFyZXQpIHsKKyAgICAgICAgZGVsZXRlIG1fcEN1ckJpdG1hcDsKKyAgICAgICAgbV9wQ3VyQml0bWFwID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIENvbnRpbnVlR2V0Q2FjaGVkQml0bWFwKCk7CisgICAgcmV0dXJuIDA7Cit9CitpbnQgQ1BERl9JbWFnZUNhY2hlOjpDb250aW51ZUdldENhY2hlZEJpdG1hcCgpCit7CisgICAgbV9NYXR0ZUNvbG9yID0gKChDUERGX0RJQlNvdXJjZSopbV9wQ3VyQml0bWFwKS0+bV9NYXR0ZUNvbG9yOworICAgIG1fcEN1ck1hc2sgPSAoKENQREZfRElCU291cmNlKiltX3BDdXJCaXRtYXApLT5EZXRhY2hNYXNrKCk7CisgICAgQ1BERl9SZW5kZXJDb250ZXh0KnBDb250ZXh0ID0gbV9wUmVuZGVyU3RhdHVzLT5HZXRDb250ZXh0KCk7CisgICAgQ1BERl9QYWdlUmVuZGVyQ2FjaGUqIHBQYWdlUmVuZGVyQ2FjaGUgPSBwQ29udGV4dC0+bV9wUGFnZUNhY2hlOworICAgIG1fZHdUaW1lQ291bnQgPSBwUGFnZVJlbmRlckNhY2hlLT5HZXRUaW1lQ291bnQoKTsKKyNpZiAhZGVmaW5lZChfRlBERkFQSV9NSU5JXykKKyAgICBpZiAobV9wQ3VyQml0bWFwLT5HZXRQaXRjaCgpICogbV9wQ3VyQml0bWFwLT5HZXRIZWlnaHQoKSA8IEZQREZfSFVHRV9JTUFHRV9TSVpFKSB7CisgICAgICAgIG1fcENhY2hlZEJpdG1hcCA9IG1fcEN1ckJpdG1hcC0+Q2xvbmUoKTsKKyAgICAgICAgZGVsZXRlIG1fcEN1ckJpdG1hcDsKKyAgICAgICAgbV9wQ3VyQml0bWFwID0gTlVMTDsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3BDYWNoZWRCaXRtYXAgPSBtX3BDdXJCaXRtYXA7CisgICAgfQorICAgIGlmIChtX3BDdXJNYXNrKSB7CisgICAgICAgIG1fcENhY2hlZE1hc2sgPSBtX3BDdXJNYXNrLT5DbG9uZSgpOworICAgICAgICBkZWxldGUgbV9wQ3VyTWFzazsKKyAgICAgICAgbV9wQ3VyTWFzayA9IE5VTEw7CisgICAgfQorI2Vsc2UKKyAgICBpZiAobV9wQ3VyQml0bWFwLT5HZXRGb3JtYXQoKSA9PSBGWERJQl84YnBwUmdiICYmIG1fcEN1ckJpdG1hcC0+R2V0UGFsZXR0ZSgpICYmCisgICAgICAgICAgICBtX3BDdXJCaXRtYXAtPkdldEhlaWdodCgpICogbV9wQ3VyQml0bWFwLT5HZXRXaWR0aCgpICogMyA8IDEwMjQpIHsKKyAgICAgICAgbV9wQ2FjaGVkQml0bWFwID0gbV9wQ3VyQml0bWFwLT5DbG9uZUNvbnZlcnQoRlhESUJfUmdiMzIpOworICAgICAgICBtX3BDYWNoZWRCaXRtYXAgPSBtX3BDdXJCaXRtYXAtPkNsb25lQ29udmVydChGWERJQl9SZ2IpOworICAgICAgICBkZWxldGUgbV9wQ3VyQml0bWFwOworICAgICAgICBtX3BDdXJCaXRtYXAgPSBOVUxMOworICAgIH0gZWxzZSBpZiAobV9wQ3VyQml0bWFwLT5HZXRQaXRjaCgpICogbV9wQ3VyQml0bWFwLT5HZXRIZWlnaHQoKSA8IDEwMjQwMCkgeworICAgICAgICBtX3BDYWNoZWRCaXRtYXAgPSBtX3BDdXJCaXRtYXAtPkNsb25lKCk7CisgICAgICAgIGRlbGV0ZSBtX3BDdXJCaXRtYXA7CisgICAgICAgIG1fcEN1ckJpdG1hcCA9IE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wQ2FjaGVkQml0bWFwID0gbV9wQ3VyQml0bWFwOworICAgIH0KKyAgICBtX3BDYWNoZWRNYXNrID0gbV9wQ3VyTWFzazsKKyNlbmRpZgorICAgIG1fcEN1ckJpdG1hcCA9IG1fcENhY2hlZEJpdG1hcDsKKyAgICBtX3BDdXJNYXNrID0gbV9wQ2FjaGVkTWFzazsKKyAgICBDYWxjU2l6ZSgpOworICAgIHJldHVybiAwOworfQoraW50CUNQREZfSW1hZ2VDYWNoZTo6Q29udGludWUoSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgaW50IHJldCA9ICgoQ1BERl9ESUJTb3VyY2UqKW1fcEN1ckJpdG1hcCktPkNvbnRpbnVlTG9hZERJQlNvdXJjZShwUGF1c2UpOworICAgIGlmIChyZXQgPT0gMikgeworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICBpZiAoIXJldCkgeworICAgICAgICBkZWxldGUgbV9wQ3VyQml0bWFwOworICAgICAgICBtX3BDdXJCaXRtYXAgPSBOVUxMOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQ29udGludWVHZXRDYWNoZWRCaXRtYXAoKTsKKyAgICByZXR1cm4gMDsKK30KK3ZvaWQgQ1BERl9JbWFnZUNhY2hlOjpDYWxjU2l6ZSgpCit7CisgICAgbV9kd0NhY2hlU2l6ZSA9IEZQREZfSW1hZ2VDYWNoZV9Fc3RpbWF0ZUltYWdlU2l6ZShtX3BDYWNoZWRCaXRtYXApICsgRlBERl9JbWFnZUNhY2hlX0VzdGltYXRlSW1hZ2VTaXplKG1fcENhY2hlZE1hc2spOworfQordm9pZCBDUERGX0RvY3VtZW50OjpDbGVhclJlbmRlckZvbnQoKQoreworICAgIGlmIChtX3BEb2NSZW5kZXIpIHsKKyAgICAgICAgQ0ZYX0ZvbnRDYWNoZSogcENhY2hlID0gbV9wRG9jUmVuZGVyLT5HZXRGb250Q2FjaGUoKTsKKyAgICAgICAgaWYgKHBDYWNoZSkgeworICAgICAgICAgICAgcENhY2hlLT5GcmVlQ2FjaGUoRkFMU0UpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3JlbmRlci9mcGRmX3JlbmRlcl9pbWFnZS5jcHAgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcmVuZGVyL2ZwZGZfcmVuZGVyX2ltYWdlLmNwcAppbmRleCBjMmE3MzkzLi4zOTI0MWUxIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcmVuZGVyL2ZwZGZfcmVuZGVyX2ltYWdlLmNwcAorKysgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcmVuZGVyL2ZwZGZfcmVuZGVyX2ltYWdlLmNwcApAQCAtMSwxMTY1ICsxLDExNjUgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2UuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX21vZHVsZS5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9yZW5kZXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZW9iai5oIg0KLSNpbmNsdWRlICIuLi9mcGRmX3BhZ2UvcGFnZWludC5oIg0KLSNpbmNsdWRlICJyZW5kZXJfaW50LmgiDQotRlhfQk9PTCBDUERGX1JlbmRlclN0YXR1czo6UHJvY2Vzc0ltYWdlKENQREZfSW1hZ2VPYmplY3QqIHBJbWFnZU9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpDQotew0KLSAgICBDUERGX0ltYWdlUmVuZGVyZXIgcmVuZGVyOw0KLSAgICBpZiAocmVuZGVyLlN0YXJ0KHRoaXMsIHBJbWFnZU9iaiwgcE9iajJEZXZpY2UsIG1fYlN0ZENTLCBtX2N1ckJsZW5kKSkgew0KLSAgICAgICAgcmVuZGVyLkNvbnRpbnVlKE5VTEwpOw0KLSAgICB9DQotI2lmZGVmIF9GUERGQVBJX01JTklfDQotICAgIGlmIChtX0RpdGhlckJpdHMpIHsNCi0gICAgICAgIERpdGhlck9iamVjdEFyZWEocEltYWdlT2JqLCBwT2JqMkRldmljZSk7DQotICAgIH0NCi0jZW5kaWYNCi0gICAgcmV0dXJuIHJlbmRlci5tX1Jlc3VsdDsNCi19DQotI2lmIGRlZmluZWQoX0ZQREZBUElfTUlOSV8pDQotRlhfQk9PTCBDUERGX1JlbmRlclN0YXR1czo6UHJvY2Vzc0lubGluZXMoQ1BERl9JbmxpbmVJbWFnZXMqIHBJbmxpbmVzLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSkNCi17DQotICAgIGludCBiaXRtYXBfYWxwaGEgPSAyNTU7DQotICAgIGlmICghcElubGluZXMtPm1fR2VuZXJhbFN0YXRlLklzTnVsbCgpKSB7DQotICAgICAgICBiaXRtYXBfYWxwaGEgPSBGWFNZU19yb3VuZChwSW5saW5lcy0+bV9HZW5lcmFsU3RhdGUuR2V0T2JqZWN0KCktPm1fRmlsbEFscGhhICogMjU1KTsNCi0gICAgfQ0KLSAgICBpZiAocElubGluZXMtPm1fcFN0cmVhbSkgew0KLSAgICAgICAgQ1BERl9ESUJTb3VyY2UgZGlic3JjOw0KLSAgICAgICAgaWYgKCFkaWJzcmMuTG9hZChtX3BDb250ZXh0LT5tX3BEb2N1bWVudCwgcElubGluZXMtPm1fcFN0cmVhbSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCkpIHsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgICAgIHBJbmxpbmVzLT5tX3BCaXRtYXAgPSBkaWJzcmMuQ2xvbmUoKTsNCi0gICAgICAgIHBJbmxpbmVzLT5tX3BTdHJlYW0tPlJlbGVhc2UoKTsNCi0gICAgICAgIHBJbmxpbmVzLT5tX3BTdHJlYW0gPSBOVUxMOw0KLSAgICB9DQotICAgIGlmIChwSW5saW5lcy0+bV9wQml0bWFwID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIEZYX0FSR0IgZmlsbF9hcmdiID0gMDsNCi0gICAgaWYgKHBJbmxpbmVzLT5tX3BCaXRtYXAtPklzQWxwaGFNYXNrKCkpIHsNCi0gICAgICAgIGZpbGxfYXJnYiA9IEdldEZpbGxBcmdiKHBJbmxpbmVzKTsNCi0gICAgfQ0KLSAgICBpbnQgZmxhZ3MgPSAwOw0KLSAgICBpZiAobV9PcHRpb25zLm1fRmxhZ3MgJiBSRU5ERVJfRk9SQ0VfRE9XTlNBTVBMRSkgew0KLSAgICAgICAgZmxhZ3MgfD0gUkVOREVSX0ZPUkNFX0RPV05TQU1QTEU7DQotICAgIH0gZWxzZSBpZiAobV9PcHRpb25zLm1fRmxhZ3MgJiBSRU5ERVJfRk9SQ0VfSEFMRlRPTkUpIHsNCi0gICAgICAgIGZsYWdzID0gMDsNCi0gICAgfQ0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBJbmxpbmVzLT5tX01hdHJpY2VzLkdldFNpemUoKTsgaSArKykgew0KLSAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCBpbWFnZV9tYXRyaXggPSBwSW5saW5lcy0+bV9NYXRyaWNlcy5HZXRBdChpKTsNCi0gICAgICAgIGltYWdlX21hdHJpeC5Db25jYXQoKnBPYmoyRGV2aWNlKTsNCi0gICAgICAgIENQREZfSW1hZ2VSZW5kZXJlciByZW5kZXJlcjsNCi0gICAgICAgIGlmIChyZW5kZXJlci5TdGFydCh0aGlzLCBwSW5saW5lcy0+bV9wQml0bWFwLCBmaWxsX2FyZ2IsIGJpdG1hcF9hbHBoYSwgJmltYWdlX21hdHJpeCwgZmxhZ3MsIEZBTFNFLCBtX2N1ckJsZW5kKSkgew0KLSAgICAgICAgICAgIHJlbmRlcmVyLkNvbnRpbnVlKE5VTEwpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi0jZW5kaWYNCi12b2lkIENQREZfUmVuZGVyU3RhdHVzOjpDb21wb3NpdGVESUJpdG1hcChDRlhfRElCaXRtYXAqIHBESUJpdG1hcCwgaW50IGxlZnQsIGludCB0b3AsIEZYX0FSR0IgbWFza19hcmdiLA0KLSAgICAgICAgaW50IGJpdG1hcF9hbHBoYSwgaW50IGJsZW5kX21vZGUsIGludCBUcmFuc3BhcmVuY3kpDQotew0KLSAgICBpZiAocERJQml0bWFwID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9CT09MIGJJc29sYXRlZCA9IFRyYW5zcGFyZW5jeSAmIFBERlRSQU5TX0lTT0xBVEVEOw0KLSAgICBGWF9CT09MIGJHcm91cCA9IFRyYW5zcGFyZW5jeSAmIFBERlRSQU5TX0dST1VQOw0KLSAgICBpZiAoYmxlbmRfbW9kZSA9PSBGWERJQl9CTEVORF9OT1JNQUwpIHsNCi0gICAgICAgIGlmICghcERJQml0bWFwLT5Jc0FscGhhTWFzaygpKSB7DQotICAgICAgICAgICAgaWYgKGJpdG1hcF9hbHBoYSA8IDI1NSkgew0KLSAgICAgICAgICAgICAgICBwRElCaXRtYXAtPk11bHRpcGx5QWxwaGEoYml0bWFwX2FscGhhKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKG1fcERldmljZS0+U2V0RElCaXRzKHBESUJpdG1hcCwgbGVmdCwgdG9wKSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBGWF9EV09SRCBmaWxsX2FyZ2IgPSBtX09wdGlvbnMuVHJhbnNsYXRlQ29sb3IobWFza19hcmdiKTsNCi0gICAgICAgICAgICBpZiAoYml0bWFwX2FscGhhIDwgMjU1KSB7DQotICAgICAgICAgICAgICAgICgoRlhfQllURSopJmZpbGxfYXJnYilbM10gPSAoKEZYX0JZVEUqKSZmaWxsX2FyZ2IpWzNdICogYml0bWFwX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobV9wRGV2aWNlLT5TZXRCaXRNYXNrKHBESUJpdG1hcCwgbGVmdCwgdG9wLCBmaWxsX2FyZ2IpKSB7DQotICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhfQk9PTCBiQmFja0FscGhhUmVxdWlyZWQgPSBibGVuZF9tb2RlICYmIGJJc29sYXRlZCAmJiAhbV9iRHJvcE9iamVjdHM7DQotICAgIEZYX0JPT0wgYkdldEJhY2tHcm91bmQgPSAoKG1fcERldmljZS0+R2V0UmVuZGVyQ2FwcygpICYgRlhSQ19BTFBIQV9PVVRQVVQpKSB8fA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCEobV9wRGV2aWNlLT5HZXRSZW5kZXJDYXBzKCkgJiBGWFJDX0FMUEhBX09VVFBVVCkgJiYgKG1fcERldmljZS0+R2V0UmVuZGVyQ2FwcygpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgRlhSQ19HRVRfQklUUykgJiYgIWJCYWNrQWxwaGFSZXF1aXJlZCk7DQotICAgIGlmIChiR2V0QmFja0dyb3VuZCkgew0KLSAgICAgICAgaWYgKGJJc29sYXRlZCB8fCAhYkdyb3VwKSB7DQotICAgICAgICAgICAgaWYgKHBESUJpdG1hcC0+SXNBbHBoYU1hc2soKSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fcERldmljZS0+U2V0RElCaXRzKHBESUJpdG1hcCwgbGVmdCwgdG9wLCBibGVuZF9tb2RlKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgRlhfUkVDVCByZWN0KGxlZnQsIHRvcCwgbGVmdCArIHBESUJpdG1hcC0+R2V0V2lkdGgoKSwgdG9wICsgcERJQml0bWFwLT5HZXRIZWlnaHQoKSk7DQotICAgICAgICAgICAgcmVjdC5JbnRlcnNlY3QobV9wRGV2aWNlLT5HZXRDbGlwQm94KCkpOw0KLSAgICAgICAgICAgIENGWF9ESUJpdG1hcCogcENsb25lID0gTlVMTDsNCi0gICAgICAgICAgICBGWF9CT09MIGJDbG9uZSA9IEZBTFNFOw0KLSAgICAgICAgICAgIGlmIChtX3BEZXZpY2UtPkdldEJhY2tEcm9wKCkgJiYgbV9wRGV2aWNlLT5HZXRCaXRtYXAoKSkgew0KLSAgICAgICAgICAgICAgICBiQ2xvbmUgPSBUUlVFOw0KLSAgICAgICAgICAgICAgICBwQ2xvbmUgPSBtX3BEZXZpY2UtPkdldEJhY2tEcm9wKCktPkNsb25lKCZyZWN0KTsNCi0gICAgICAgICAgICAgICAgQ0ZYX0RJQml0bWFwICpwRm9yZUJpdG1hcCA9IG1fcERldmljZS0+R2V0Qml0bWFwKCk7DQotICAgICAgICAgICAgICAgIHBDbG9uZS0+Q29tcG9zaXRlQml0bWFwKDAsIDAsIHBDbG9uZS0+R2V0V2lkdGgoKSwgcENsb25lLT5HZXRIZWlnaHQoKSwgcEZvcmVCaXRtYXAsIHJlY3QubGVmdCwgcmVjdC50b3ApOw0KLSAgICAgICAgICAgICAgICBsZWZ0ID0gbGVmdCA+PSAwID8gMCA6IGxlZnQ7DQotICAgICAgICAgICAgICAgIHRvcCA9IHRvcCA+PSAwID8gMCA6IHRvcDsNCi0gICAgICAgICAgICAgICAgaWYgKCFwRElCaXRtYXAtPklzQWxwaGFNYXNrKCkpDQotICAgICAgICAgICAgICAgICAgICBwQ2xvbmUtPkNvbXBvc2l0ZUJpdG1hcCgwLCAwLCBwQ2xvbmUtPkdldFdpZHRoKCksIHBDbG9uZS0+R2V0SGVpZ2h0KCksIHBESUJpdG1hcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQsIHRvcCwgYmxlbmRfbW9kZSk7DQotICAgICAgICAgICAgICAgIGVsc2UNCi0gICAgICAgICAgICAgICAgICAgIHBDbG9uZS0+Q29tcG9zaXRlTWFzaygwLCAwLCBwQ2xvbmUtPkdldFdpZHRoKCksIHBDbG9uZS0+R2V0SGVpZ2h0KCksIHBESUJpdG1hcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrX2FyZ2IsIGxlZnQsIHRvcCwgYmxlbmRfbW9kZSk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgcENsb25lID0gcERJQml0bWFwOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobV9wRGV2aWNlLT5HZXRCYWNrRHJvcCgpKSB7DQotICAgICAgICAgICAgICAgIG1fcERldmljZS0+U2V0RElCaXRzKHBDbG9uZSwgcmVjdC5sZWZ0LCByZWN0LnRvcCk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgaWYgKHBESUJpdG1hcC0+SXNBbHBoYU1hc2soKSkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG1fcERldmljZS0+U2V0RElCaXRzKHBESUJpdG1hcCwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgYmxlbmRfbW9kZSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChiQ2xvbmUpIHsNCi0gICAgICAgICAgICAgICAgZGVsZXRlIHBDbG9uZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaW50IGJhY2tfbGVmdCwgYmFja190b3A7DQotICAgIEZYX1JFQ1QgcmVjdChsZWZ0LCB0b3AsIGxlZnQgKyBwRElCaXRtYXAtPkdldFdpZHRoKCksIHRvcCArIHBESUJpdG1hcC0+R2V0SGVpZ2h0KCkpOw0KLSAgICBDRlhfRElCaXRtYXAqIHBCYWNrZHJvcCA9IEdldEJhY2tkcm9wKG1fcEN1ck9iaiwgcmVjdCwgYmFja19sZWZ0LCBiYWNrX3RvcCwgYmxlbmRfbW9kZSA+IEZYRElCX0JMRU5EX05PUk1BTCAmJiBiSXNvbGF0ZWQpOw0KLSAgICBpZiAoIXBCYWNrZHJvcCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmICghcERJQml0bWFwLT5Jc0FscGhhTWFzaygpKQ0KLSAgICAgICAgcEJhY2tkcm9wLT5Db21wb3NpdGVCaXRtYXAobGVmdCAtIGJhY2tfbGVmdCwgdG9wIC0gYmFja190b3AsIHBESUJpdG1hcC0+R2V0V2lkdGgoKSwgcERJQml0bWFwLT5HZXRIZWlnaHQoKSwgcERJQml0bWFwLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgYmxlbmRfbW9kZSk7DQotICAgIGVsc2UNCi0gICAgICAgIHBCYWNrZHJvcC0+Q29tcG9zaXRlTWFzayhsZWZ0IC0gYmFja19sZWZ0LCB0b3AgLSBiYWNrX3RvcCwgcERJQml0bWFwLT5HZXRXaWR0aCgpLCBwRElCaXRtYXAtPkdldEhlaWdodCgpLCBwRElCaXRtYXAsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza19hcmdiLCAwLCAwLCBibGVuZF9tb2RlKTsNCi0gICAgQ0ZYX0RJQml0bWFwKiBwQmFja2Ryb3AxID0gRlhfTkVXIENGWF9ESUJpdG1hcDsNCi0gICAgcEJhY2tkcm9wMS0+Q3JlYXRlKHBCYWNrZHJvcC0+R2V0V2lkdGgoKSwgcEJhY2tkcm9wLT5HZXRIZWlnaHQoKSwgRlhESUJfUmdiMzIpOw0KLSAgICBwQmFja2Ryb3AxLT5DbGVhcigoRlhfRFdPUkQpIC0gMSk7DQotICAgIHBCYWNrZHJvcDEtPkNvbXBvc2l0ZUJpdG1hcCgwLCAwLCBwQmFja2Ryb3AtPkdldFdpZHRoKCksIHBCYWNrZHJvcC0+R2V0SGVpZ2h0KCksIHBCYWNrZHJvcCwgMCwgMCk7DQotICAgIGRlbGV0ZSBwQmFja2Ryb3A7DQotICAgIHBCYWNrZHJvcCA9IHBCYWNrZHJvcDE7DQotICAgIG1fcERldmljZS0+U2V0RElCaXRzKHBCYWNrZHJvcCwgYmFja19sZWZ0LCBiYWNrX3RvcCk7DQotICAgIGRlbGV0ZSBwQmFja2Ryb3A7DQotfQ0KLUZYX0NPTE9SUkVGIENQREZfVHJhbnNmZXJGdW5jOjpUcmFuc2xhdGVDb2xvcihGWF9DT0xPUlJFRiByZ2IpDQotew0KLSAgICByZXR1cm4gRlhTWVNfUkdCKG1fU2FtcGxlc1tGWFNZU19HZXRSVmFsdWUocmdiKV0sIG1fU2FtcGxlc1syNTYgKyBGWFNZU19HZXRHVmFsdWUocmdiKV0sDQotICAgICAgICAgICAgICAgICAgICAgbV9TYW1wbGVzWzUxMiArIEZYU1lTX0dldEJWYWx1ZShyZ2IpXSk7DQotfQ0KLUNGWF9ESUJTb3VyY2UqIENQREZfVHJhbnNmZXJGdW5jOjpUcmFuc2xhdGVJbWFnZShjb25zdCBDRlhfRElCU291cmNlKiBwU3JjLCBGWF9CT09MIGJBdXRvRHJvcFNyYykNCi17DQotICAgIENQREZfRElCVHJhbnNmZXJGdW5jKiBwRGVzdCA9IEZYX05FVyBDUERGX0RJQlRyYW5zZmVyRnVuYyh0aGlzKTsNCi0gICAgcERlc3QtPkxvYWRTcmMocFNyYywgYkF1dG9Ecm9wU3JjKTsNCi0gICAgcmV0dXJuIHBEZXN0Ow0KLX0NCi1GWERJQl9Gb3JtYXQgQ1BERl9ESUJUcmFuc2ZlckZ1bmM6OkdldERlc3RGb3JtYXQoKQ0KLXsNCi0gICAgaWYgKG1fcFNyYy0+SXNBbHBoYU1hc2soKSkgew0KLSAgICAgICAgcmV0dXJuIEZYRElCXzhicHBNYXNrOw0KLSAgICB9DQotI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXw0KLSAgICByZXR1cm4gKG1fcFNyYy0+SGFzQWxwaGEoKSkgPyBGWERJQl9BcmdiIDogRlhESUJfUmdiMzI7DQotI2Vsc2UNCi0gICAgcmV0dXJuIChtX3BTcmMtPkhhc0FscGhhKCkpID8gRlhESUJfQXJnYiA6IEZYRElCX1JnYjsNCi0jZW5kaWYNCi19DQotQ1BERl9ESUJUcmFuc2ZlckZ1bmM6OkNQREZfRElCVHJhbnNmZXJGdW5jKGNvbnN0IENQREZfVHJhbnNmZXJGdW5jKiBwVHJhbnNmZXJGdW5jKQ0KLXsNCi0gICAgbV9SYW1wUiA9IHBUcmFuc2ZlckZ1bmMtPm1fU2FtcGxlczsNCi0gICAgbV9SYW1wRyA9ICZwVHJhbnNmZXJGdW5jLT5tX1NhbXBsZXNbMjU2XTsNCi0gICAgbV9SYW1wQiA9ICZwVHJhbnNmZXJGdW5jLT5tX1NhbXBsZXNbNTEyXTsNCi19DQotdm9pZCBDUERGX0RJQlRyYW5zZmVyRnVuYzo6VHJhbnNsYXRlU2NhbmxpbmUoRlhfTFBCWVRFIGRlc3RfYnVmLCBGWF9MUENCWVRFIHNyY19idWYpIGNvbnN0DQotew0KLSAgICBpbnQgaTsNCi0gICAgRlhfQk9PTCBiU2tpcCA9IEZBTFNFOw0KLSAgICBzd2l0Y2ggKG1fcFNyYy0+R2V0Rm9ybWF0KCkpIHsNCi0gICAgICAgIGNhc2UgRlhESUJfMWJwcFJnYjogew0KLSAgICAgICAgICAgICAgICBpbnQgcjAgPSBtX1JhbXBSWzBdLCBnMCA9IG1fUmFtcEdbMF0sIGIwID0gbV9SYW1wQlswXTsNCi0gICAgICAgICAgICAgICAgaW50IHIxID0gbV9SYW1wUlsyNTVdLCBnMSA9IG1fUmFtcEdbMjU1XSwgYjEgPSBtX1JhbXBCWzI1NV07DQotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtX1dpZHRoOyBpICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2J1ZltpIC8gOF0gJiAoMSA8PCAoNyAtIGkgJSA4KSkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9idWYrKyA9IGIxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X2J1ZisrID0gZzE7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSByMTsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBiMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9idWYrKyA9IGcwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X2J1ZisrID0gcjA7DQotICAgICAgICAgICAgICAgICAgICB9DQotI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXw0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9idWYrKzsNCi0jZW5kaWYNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIEZYRElCXzFicHBNYXNrOiB7DQotICAgICAgICAgICAgICAgIGludCBtMCA9IG1fUmFtcFJbMF0sIG0xID0gbV9SYW1wUlsyNTVdOw0KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9XaWR0aDsgaSArKykgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19idWZbaSAvIDhdICYgKDEgPDwgKDcgLSBpICUgOCkpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBtMTsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBtMDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIEZYRElCXzhicHBSZ2I6IHsNCi0gICAgICAgICAgICAgICAgRlhfQVJHQiogcFBhbCA9IG1fcFNyYy0+R2V0UGFsZXR0ZSgpOw0KLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9XaWR0aDsgaSArKykgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBQYWwpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBGWF9BUkdCIHNyY19hcmdiID0gcFBhbFsqc3JjX2J1Zl07DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBtX1JhbXBCW0ZYQVJHQl9SKHNyY19hcmdiKV07DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBtX1JhbXBHW0ZYQVJHQl9HKHNyY19hcmdiKV07DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBtX1JhbXBSW0ZYQVJHQl9CKHNyY19hcmdiKV07DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIHNyY19ieXRlID0gKnNyY19idWY7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBtX1JhbXBCW3NyY19ieXRlXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9idWYrKyA9IG1fUmFtcEdbc3JjX2J5dGVdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X2J1ZisrID0gbV9SYW1wUltzcmNfYnl0ZV07DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBzcmNfYnVmICsrOw0KLSNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8NCi0gICAgICAgICAgICAgICAgICAgIGRlc3RfYnVmKys7DQotI2VuZGlmDQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgY2FzZSBGWERJQl84YnBwTWFzazoNCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9XaWR0aDsgaSArKykgew0KLSAgICAgICAgICAgICAgICAqZGVzdF9idWYrKyA9IG1fUmFtcFJbKihzcmNfYnVmKyspXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIEZYRElCX1JnYjoNCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9XaWR0aDsgaSArKykgew0KLSAgICAgICAgICAgICAgICAqZGVzdF9idWYrKyA9IG1fUmFtcEJbKihzcmNfYnVmKyspXTsNCi0gICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBtX1JhbXBHWyooc3JjX2J1ZisrKV07DQotICAgICAgICAgICAgICAgICpkZXN0X2J1ZisrID0gbV9SYW1wUlsqKHNyY19idWYrKyldOw0KLSNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8NCi0gICAgICAgICAgICAgICAgZGVzdF9idWYrKzsNCi0jZW5kaWYNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIEZYRElCX1JnYjMyOg0KLSAgICAgICAgICAgIGJTa2lwID0gVFJVRTsNCi0gICAgICAgIGNhc2UgRlhESUJfQXJnYjoNCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9XaWR0aDsgaSArKykgew0KLSAgICAgICAgICAgICAgICAqZGVzdF9idWYrKyA9IG1fUmFtcEJbKihzcmNfYnVmKyspXTsNCi0gICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBtX1JhbXBHWyooc3JjX2J1ZisrKV07DQotICAgICAgICAgICAgICAgICpkZXN0X2J1ZisrID0gbV9SYW1wUlsqKHNyY19idWYrKyldOw0KLSAgICAgICAgICAgICAgICBpZiAoIWJTa2lwKSB7DQotICAgICAgICAgICAgICAgICAgICAqZGVzdF9idWYrKyA9ICpzcmNfYnVmOw0KLSAgICAgICAgICAgICAgICB9DQotI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXw0KLSAgICAgICAgICAgICAgICBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3RfYnVmKys7DQotICAgICAgICAgICAgICAgIH0NCi0jZW5kaWYNCi0gICAgICAgICAgICAgICAgc3JjX2J1ZiArKzsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBkZWZhdWx0Og0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9ESUJUcmFuc2ZlckZ1bmM6OlRyYW5zbGF0ZURvd25TYW1wbGVzKEZYX0xQQllURSBkZXN0X2J1ZiwgRlhfTFBDQllURSBzcmNfYnVmLCBpbnQgcGl4ZWxzLCBpbnQgQnBwKSBjb25zdA0KLXsNCi0gICAgaWYgKEJwcCA9PSA4KSB7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBpeGVsczsgaSArKykgew0KLSAgICAgICAgICAgICpkZXN0X2J1ZisrID0gbV9SYW1wUlsqKHNyY19idWYrKyldOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2UgaWYgKEJwcCA9PSAyNCkgew0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaXhlbHM7IGkgKyspIHsNCi0gICAgICAgICAgICAqZGVzdF9idWYrKyA9IG1fUmFtcEJbKihzcmNfYnVmKyspXTsNCi0gICAgICAgICAgICAqZGVzdF9idWYrKyA9IG1fUmFtcEdbKihzcmNfYnVmKyspXTsNCi0gICAgICAgICAgICAqZGVzdF9idWYrKyA9IG1fUmFtcFJbKihzcmNfYnVmKyspXTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0jaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfDQotICAgICAgICBpZiAoIW1fcFNyYy0+SGFzQWxwaGEoKSkgew0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGl4ZWxzOyBpICsrKSB7DQotICAgICAgICAgICAgICAgICpkZXN0X2J1ZisrID0gbV9SYW1wQlsqKHNyY19idWYrKyldOw0KLSAgICAgICAgICAgICAgICAqZGVzdF9idWYrKyA9IG1fUmFtcEdbKihzcmNfYnVmKyspXTsNCi0gICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBtX1JhbXBSWyooc3JjX2J1ZisrKV07DQotICAgICAgICAgICAgICAgIGRlc3RfYnVmKys7DQotICAgICAgICAgICAgICAgIHNyY19idWYrKzsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2UNCi0jZW5kaWYNCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBpeGVsczsgaSArKykgew0KLSAgICAgICAgICAgICAgICAqZGVzdF9idWYrKyA9IG1fUmFtcEJbKihzcmNfYnVmKyspXTsNCi0gICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBtX1JhbXBHWyooc3JjX2J1ZisrKV07DQotICAgICAgICAgICAgICAgICpkZXN0X2J1ZisrID0gbV9SYW1wUlsqKHNyY19idWYrKyldOw0KLSAgICAgICAgICAgICAgICAqZGVzdF9idWYrKyA9ICooc3JjX2J1ZisrKTsNCi0gICAgICAgICAgICB9DQotICAgIH0NCi19DQotc3RhdGljIEZYX0JPT0wgX0lzU3VwcG9ydGVkKENQREZfQ29sb3JTcGFjZSogcENTKQ0KLXsNCi0gICAgaWYgKHBDUy0+R2V0RmFtaWx5KCkgPT0gUERGQ1NfREVWSUNFUkdCIHx8IHBDUy0+R2V0RmFtaWx5KCkgPT0gUERGQ1NfREVWSUNFR1JBWSB8fA0KLSAgICAgICAgICAgIHBDUy0+R2V0RmFtaWx5KCkgPT0gUERGQ1NfREVWSUNFQ01ZSyB8fCBwQ1MtPkdldEZhbWlseSgpID09IFBERkNTX0NBTEdSQVkgfHwNCi0gICAgICAgICAgICBwQ1MtPkdldEZhbWlseSgpID09IFBERkNTX0NBTFJHQikgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgaWYgKHBDUy0+R2V0RmFtaWx5KCkgPT0gUERGQ1NfSU5ERVhFRCAmJiBfSXNTdXBwb3J0ZWQocENTLT5HZXRCYXNlQ1MoKSkpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotQ1BERl9JbWFnZVJlbmRlcmVyOjpDUERGX0ltYWdlUmVuZGVyZXIoKQ0KLXsNCi0gICAgbV9wUmVuZGVyU3RhdHVzID0gTlVMTDsNCi0gICAgbV9wSW1hZ2VPYmplY3QgPSBOVUxMOw0KLSAgICBtX1Jlc3VsdCA9IFRSVUU7DQotICAgIG1fU3RhdHVzID0gMDsNCi0gICAgbV9wUXVpY2tTdHJldGNoZXIgPSBOVUxMOw0KLSAgICBtX3BUcmFuc2Zvcm1lciA9IE5VTEw7DQotICAgIG1fRGV2aWNlSGFuZGxlID0gTlVMTDsNCi0gICAgbV9Mb2FkSGFuZGxlID0gTlVMTDsNCi0gICAgbV9wQ2xvbmUgPSBOVUxMOw0KLSAgICBtX2JTdGRDUyA9IEZBTFNFOw0KLSAgICBtX2JQYXR0ZXJuQ29sb3IgPSBGQUxTRTsNCi0gICAgbV9CbGVuZFR5cGUgPSBGWERJQl9CTEVORF9OT1JNQUw7DQotICAgIG1fcFBhdHRlcm4gPSBOVUxMOw0KLSAgICBtX3BPYmoyRGV2aWNlID0gTlVMTDsNCi19DQotQ1BERl9JbWFnZVJlbmRlcmVyOjp+Q1BERl9JbWFnZVJlbmRlcmVyKCkNCi17DQotICAgIGlmIChtX3BRdWlja1N0cmV0Y2hlcikgew0KLSAgICAgICAgZGVsZXRlIG1fcFF1aWNrU3RyZXRjaGVyOw0KLSAgICB9DQotICAgIGlmIChtX3BUcmFuc2Zvcm1lcikgew0KLSAgICAgICAgZGVsZXRlIG1fcFRyYW5zZm9ybWVyOw0KLSAgICB9DQotICAgIGlmIChtX0RldmljZUhhbmRsZSkgew0KLSAgICAgICAgbV9wUmVuZGVyU3RhdHVzLT5tX3BEZXZpY2UtPkNhbmNlbERJQml0cyhtX0RldmljZUhhbmRsZSk7DQotICAgIH0NCi0gICAgaWYgKG1fTG9hZEhhbmRsZSkgew0KLSAgICAgICAgZGVsZXRlIChDUERGX1Byb2dyZXNzaXZlSW1hZ2VMb2FkZXJIYW5kbGUqKW1fTG9hZEhhbmRsZTsNCi0gICAgfQ0KLSAgICBpZiAobV9wQ2xvbmUpIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BDbG9uZTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENQREZfSW1hZ2VSZW5kZXJlcjo6U3RhcnRMb2FkRElCU291cmNlKCkNCi17DQotICAgIENGWF9GbG9hdFJlY3QgaW1hZ2VfcmVjdF9mID0gbV9JbWFnZU1hdHJpeC5HZXRVbml0UmVjdCgpOw0KLSAgICBGWF9SRUNUIGltYWdlX3JlY3QgPSBpbWFnZV9yZWN0X2YuR2V0T3V0dGVyUmVjdCgpOw0KLSAgICBpbnQgZGVzdF93aWR0aCA9IGltYWdlX3JlY3QuV2lkdGgoKTsNCi0gICAgaW50IGRlc3RfaGVpZ2h0ID0gaW1hZ2VfcmVjdC5IZWlnaHQoKTsNCi0gICAgaWYgKG1fSW1hZ2VNYXRyaXguYSA8IDApIHsNCi0gICAgICAgIGRlc3Rfd2lkdGggPSAtZGVzdF93aWR0aDsNCi0gICAgfQ0KLSAgICBpZiAobV9JbWFnZU1hdHJpeC5kID4gMCkgew0KLSAgICAgICAgZGVzdF9oZWlnaHQgPSAtZGVzdF9oZWlnaHQ7DQotICAgIH0NCi0gICAgaWYgKG1fTG9hZGVyLlN0YXJ0TG9hZEltYWdlKG1fcEltYWdlT2JqZWN0LCBtX3BSZW5kZXJTdGF0dXMtPm1fcENvbnRleHQtPm1fcFBhZ2VDYWNoZSwgbV9Mb2FkSGFuZGxlLCBtX2JTdGRDUywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcFJlbmRlclN0YXR1cy0+bV9Hcm91cEZhbWlseSwgbV9wUmVuZGVyU3RhdHVzLT5tX2JMb2FkTWFzaywgbV9wUmVuZGVyU3RhdHVzLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCkpIHsNCi0gICAgICAgIGlmIChtX0xvYWRIYW5kbGUgIT0gTlVMTCkgew0KLSAgICAgICAgICAgIG1fU3RhdHVzID0gNDsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUZYX0JPT0wgQ1BERl9JbWFnZVJlbmRlcmVyOjpTdGFydFJlbmRlckRJQlNvdXJjZSgpDQotew0KLSAgICBpZiAobV9Mb2FkZXIubV9wQml0bWFwID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBtX0JpdG1hcEFscGhhID0gMjU1Ow0KLSAgICBjb25zdCBDUERGX0dlbmVyYWxTdGF0ZURhdGEqIHBHZW5lcmFsU3RhdGUgPSBtX3BJbWFnZU9iamVjdC0+bV9HZW5lcmFsU3RhdGU7DQotICAgIGlmIChwR2VuZXJhbFN0YXRlKSB7DQotICAgICAgICBtX0JpdG1hcEFscGhhID0gRlhTWVNfcm91bmQocEdlbmVyYWxTdGF0ZS0+bV9GaWxsQWxwaGEgKiAyNTUpOw0KLSAgICB9DQotICAgIG1fcERJQlNvdXJjZSA9IG1fTG9hZGVyLm1fcEJpdG1hcDsNCi0gICAgaWYgKG1fcFJlbmRlclN0YXR1cy0+bV9PcHRpb25zLm1fQ29sb3JNb2RlID09IFJFTkRFUl9DT0xPUl9BTFBIQSAmJiBtX0xvYWRlci5tX3BNYXNrID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBTdGFydEJpdG1hcEFscGhhKCk7DQotICAgIH0NCi0jaWZuZGVmIF9GUERGQVBJX01JTklfDQotICAgIGlmIChwR2VuZXJhbFN0YXRlICYmIHBHZW5lcmFsU3RhdGUtPm1fcFRSKSB7DQotICAgICAgICBpZiAoIXBHZW5lcmFsU3RhdGUtPm1fcFRyYW5zZmVyRnVuYykgew0KLSAgICAgICAgICAgICgoQ1BERl9HZW5lcmFsU3RhdGVEYXRhKilwR2VuZXJhbFN0YXRlKS0+bV9wVHJhbnNmZXJGdW5jID0gbV9wUmVuZGVyU3RhdHVzLT5HZXRUcmFuc2ZlckZ1bmMocEdlbmVyYWxTdGF0ZS0+bV9wVFIpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBHZW5lcmFsU3RhdGUtPm1fcFRyYW5zZmVyRnVuYyAmJiAhcEdlbmVyYWxTdGF0ZS0+bV9wVHJhbnNmZXJGdW5jLT5tX2JJZGVudGl0eSkgew0KLSAgICAgICAgICAgIG1fcERJQlNvdXJjZSA9IG1fTG9hZGVyLm1fcEJpdG1hcCA9IHBHZW5lcmFsU3RhdGUtPm1fcFRyYW5zZmVyRnVuYy0+VHJhbnNsYXRlSW1hZ2UobV9Mb2FkZXIubV9wQml0bWFwLCAhbV9Mb2FkZXIubV9iQ2FjaGVkKTsNCi0gICAgICAgICAgICBpZiAobV9Mb2FkZXIubV9iQ2FjaGVkICYmIG1fTG9hZGVyLm1fcE1hc2spIHsNCi0gICAgICAgICAgICAgICAgbV9Mb2FkZXIubV9wTWFzayA9IG1fTG9hZGVyLm1fcE1hc2stPkNsb25lKCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fTG9hZGVyLm1fYkNhY2hlZCA9IEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotI2VuZGlmDQotICAgIG1fRmlsbEFyZ2IgPSAwOw0KLSAgICBtX2JQYXR0ZXJuQ29sb3IgPSBGQUxTRTsNCi0gICAgbV9wUGF0dGVybiA9IE5VTEw7DQotICAgIGlmIChtX3BESUJTb3VyY2UtPklzQWxwaGFNYXNrKCkpIHsNCi0gICAgICAgIENQREZfQ29sb3IqIHBDb2xvciA9IG1fcEltYWdlT2JqZWN0LT5tX0NvbG9yU3RhdGUuR2V0RmlsbENvbG9yKCk7DQotICAgICAgICBpZiAocENvbG9yICYmIHBDb2xvci0+SXNQYXR0ZXJuKCkpIHsNCi0gICAgICAgICAgICBtX3BQYXR0ZXJuID0gcENvbG9yLT5HZXRQYXR0ZXJuKCk7DQotICAgICAgICAgICAgaWYgKG1fcFBhdHRlcm4gIT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICBtX2JQYXR0ZXJuQ29sb3IgPSBUUlVFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIG1fRmlsbEFyZ2IgPSBtX3BSZW5kZXJTdGF0dXMtPkdldEZpbGxBcmdiKG1fcEltYWdlT2JqZWN0KTsNCi0gICAgfSBlbHNlIGlmIChtX3BSZW5kZXJTdGF0dXMtPm1fT3B0aW9ucy5tX0NvbG9yTW9kZSA9PSBSRU5ERVJfQ09MT1JfR1JBWSkgew0KLSAgICAgICAgbV9wQ2xvbmUgPSBtX3BESUJTb3VyY2UtPkNsb25lKCk7DQotICAgICAgICBtX3BDbG9uZS0+Q29udmVydENvbG9yU2NhbGUobV9wUmVuZGVyU3RhdHVzLT5tX09wdGlvbnMubV9CYWNrQ29sb3IsIG1fcFJlbmRlclN0YXR1cy0+bV9PcHRpb25zLm1fRm9yZUNvbG9yKTsNCi0gICAgICAgIG1fcERJQlNvdXJjZSA9IG1fcENsb25lOw0KLSAgICB9DQotICAgIG1fRmxhZ3MgPSAwOw0KLSNpZiAhZGVmaW5lZChfRlBERkFQSV9NSU5JXykNCi0gICAgaWYgKG1fcFJlbmRlclN0YXR1cy0+bV9PcHRpb25zLm1fRmxhZ3MgJiBSRU5ERVJfRk9SQ0VfRE9XTlNBTVBMRSkgew0KLSAgICAgICAgbV9GbGFncyB8PSBSRU5ERVJfRk9SQ0VfRE9XTlNBTVBMRTsNCi0gICAgfSBlbHNlIGlmIChtX3BSZW5kZXJTdGF0dXMtPm1fT3B0aW9ucy5tX0ZsYWdzICYgUkVOREVSX0ZPUkNFX0hBTEZUT05FKSB7DQotICAgICAgICBtX0ZsYWdzIHw9IFJFTkRFUl9GT1JDRV9IQUxGVE9ORTsNCi0gICAgfQ0KLSNlbHNlDQotICAgIGlmICghKG1fcFJlbmRlclN0YXR1cy0+bV9PcHRpb25zLm1fRmxhZ3MgJiBSRU5ERVJfRk9SQ0VfSEFMRlRPTkUpKSB7DQotICAgICAgICBpZiAobV9wUmVuZGVyU3RhdHVzLT5tX0hhbGZ0b25lTGltaXQpIHsNCi0gICAgICAgICAgICBDRlhfRmxvYXRSZWN0IGltYWdlX3JlY3RfZiA9IG1fSW1hZ2VNYXRyaXguR2V0VW5pdFJlY3QoKTsNCi0gICAgICAgICAgICBGWF9SRUNUIGltYWdlX3JlY3QgPSBpbWFnZV9yZWN0X2YuR2V0T3V0dGVyUmVjdCgpOw0KLSAgICAgICAgICAgIEZYX1JFQ1QgaW1hZ2VfY2xpcCA9IGltYWdlX3JlY3Q7DQotICAgICAgICAgICAgaW1hZ2VfcmVjdC5JbnRlcnNlY3QobV9wUmVuZGVyU3RhdHVzLT5tX3BEZXZpY2UtPkdldENsaXBCb3goKSk7DQotICAgICAgICAgICAgaWYgKGltYWdlX3JlY3QuV2lkdGgoKSAmJiBpbWFnZV9yZWN0LkhlaWdodCgpKSB7DQotICAgICAgICAgICAgICAgIGlmICgoaW1hZ2VfY2xpcC5XaWR0aCgpICogbV9wRElCU291cmNlLT5HZXRXaWR0aCgpIC8gaW1hZ2VfcmVjdC5XaWR0aCgpKSAqDQotICAgICAgICAgICAgICAgICAgICAgICAgKGltYWdlX2NsaXAuSGVpZ2h0KCkgKiBtX3BESUJTb3VyY2UtPkdldEhlaWdodCgpIC8gaW1hZ2VfcmVjdC5IZWlnaHQoKSkgPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcFJlbmRlclN0YXR1cy0+bV9IYWxmdG9uZUxpbWl0KSB7DQotICAgICAgICAgICAgICAgICAgICBtX0ZsYWdzIHw9IFJFTkRFUl9GT1JDRV9ET1dOU0FNUExFOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBtX0ZsYWdzIHw9IFJFTkRFUl9GT1JDRV9ET1dOU0FNUExFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotI2VuZGlmDQotI2lmbmRlZiBfRlBERkFQSV9NSU5JXw0KLSAgICBpZiAobV9wUmVuZGVyU3RhdHVzLT5tX3BEZXZpY2UtPkdldERldmljZUNsYXNzKCkgIT0gRlhEQ19ESVNQTEFZKSB7DQotICAgICAgICBDUERGX09iamVjdCogcEZpbHRlcnMgPSBtX3BJbWFnZU9iamVjdC0+bV9wSW1hZ2UtPkdldFN0cmVhbSgpLT5HZXREaWN0KCktPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiRmlsdGVyIikpOw0KLSAgICAgICAgaWYgKHBGaWx0ZXJzKSB7DQotICAgICAgICAgICAgaWYgKHBGaWx0ZXJzLT5HZXRUeXBlKCkgPT0gUERGT0JKX05BTUUpIHsNCi0gICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmdDIGJzRGVjb2RlVHlwZSA9IHBGaWx0ZXJzLT5HZXRDb25zdFN0cmluZygpOw0KLSAgICAgICAgICAgICAgICBpZiAoYnNEZWNvZGVUeXBlID09IEZYX0JTVFJDKCJEQ1REZWNvZGUiKSB8fCBic0RlY29kZVR5cGUgPT0gRlhfQlNUUkMoIkpQWERlY29kZSIpKSB7DQotICAgICAgICAgICAgICAgICAgICBtX0ZsYWdzIHw9IEZYUkVOREVSX0lNQUdFX0xPU1NZOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIGlmIChwRmlsdGVycy0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgew0KLSAgICAgICAgICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSAoQ1BERl9BcnJheSopcEZpbHRlcnM7DQotICAgICAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwQXJyYXktPkdldENvdW50KCk7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nQyBic0RlY29kZVR5cGUgPSBwQXJyYXktPkdldENvbnN0U3RyaW5nKGkpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJzRGVjb2RlVHlwZSA9PSBGWF9CU1RSQygiRENURGVjb2RlIikgfHwgYnNEZWNvZGVUeXBlID09IEZYX0JTVFJDKCJKUFhEZWNvZGUiKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fRmxhZ3MgfD0gRlhSRU5ERVJfSU1BR0VfTE9TU1k7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKG1fcFJlbmRlclN0YXR1cy0+bV9PcHRpb25zLm1fRmxhZ3MgJiBSRU5ERVJfTk9JTUFHRVNNT09USCkgew0KLSAgICAgICAgbV9GbGFncyB8PSBGWERJQl9OT1NNT09USDsNCi0gICAgfSBlbHNlIGlmIChtX3BJbWFnZU9iamVjdC0+bV9wSW1hZ2UtPklzSW50ZXJwb2woKSkgew0KLSAgICAgICAgbV9GbGFncyB8PSBGWERJQl9JTlRFUlBPTDsNCi0gICAgfQ0KLSNlbmRpZg0KLSAgICBpZiAobV9Mb2FkZXIubV9wTWFzaykgew0KLSAgICAgICAgcmV0dXJuIERyYXdNYXNrZWRJbWFnZSgpOw0KLSAgICB9DQotICAgIGlmIChtX2JQYXR0ZXJuQ29sb3IpIHsNCi0gICAgICAgIHJldHVybiBEcmF3UGF0dGVybkltYWdlKG1fcE9iajJEZXZpY2UpOw0KLSAgICB9DQotI2lmICFkZWZpbmVkKF9GUERGQVBJX01JTklfKSB8fCBkZWZpbmVkKF9GWENPUkVfRkVBVFVSRV9BTExfKQ0KLSAgICBpZiAobV9CaXRtYXBBbHBoYSA9PSAyNTUgJiYgcEdlbmVyYWxTdGF0ZSAmJiBwR2VuZXJhbFN0YXRlLT5tX0ZpbGxPUCAmJg0KLSAgICAgICAgICAgIHBHZW5lcmFsU3RhdGUtPm1fT1BNb2RlID09IDAgJiYgcEdlbmVyYWxTdGF0ZS0+bV9CbGVuZFR5cGUgPT0gRlhESUJfQkxFTkRfTk9STUFMICYmIHBHZW5lcmFsU3RhdGUtPm1fU3Ryb2tlQWxwaGEgPT0gMSAmJiBwR2VuZXJhbFN0YXRlLT5tX0ZpbGxBbHBoYSA9PSAxKSB7DQotICAgICAgICBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQgPSBOVUxMOw0KLSAgICAgICAgQ1BERl9QYWdlKiBwUGFnZSA9IE5VTEw7DQotICAgICAgICBpZiAobV9wUmVuZGVyU3RhdHVzLT5tX3BDb250ZXh0LT5tX3BQYWdlQ2FjaGUpIHsNCi0gICAgICAgICAgICBwUGFnZSA9IG1fcFJlbmRlclN0YXR1cy0+bV9wQ29udGV4dC0+bV9wUGFnZUNhY2hlLT5HZXRQYWdlKCk7DQotICAgICAgICAgICAgcERvY3VtZW50ID0gcFBhZ2UtPm1fcERvY3VtZW50Ow0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBwRG9jdW1lbnQgPSBtX3BJbWFnZU9iamVjdC0+bV9wSW1hZ2UtPkdldERvY3VtZW50KCk7DQotICAgICAgICB9DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBQYWdlUmVzb3VyY2VzID0gcFBhZ2UgPyBwUGFnZS0+bV9wUGFnZVJlc291cmNlcyA6IE5VTEw7DQotICAgICAgICBDUERGX09iamVjdCogcENTT2JqID0gbV9wSW1hZ2VPYmplY3QtPm1fcEltYWdlLT5HZXRTdHJlYW0oKS0+R2V0RGljdCgpLT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkNvbG9yU3BhY2UiKSk7DQotICAgICAgICBDUERGX0NvbG9yU3BhY2UqIHBDb2xvclNwYWNlID0gcERvY3VtZW50LT5Mb2FkQ29sb3JTcGFjZShwQ1NPYmosIHBQYWdlUmVzb3VyY2VzKTsNCi0gICAgICAgIGlmIChwQ29sb3JTcGFjZSkgew0KLSAgICAgICAgICAgIGludCBmb3JtYXQgPSBwQ29sb3JTcGFjZS0+R2V0RmFtaWx5KCk7DQotICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBQREZDU19ERVZJQ0VDTVlLIHx8IGZvcm1hdCA9PSBQREZDU19TRVBBUkFUSU9OIHx8IGZvcm1hdCA9PSBQREZDU19ERVZJQ0VOKSB7DQotICAgICAgICAgICAgICAgIG1fQmxlbmRUeXBlID0gRlhESUJfQkxFTkRfREFSS0VOOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwRG9jdW1lbnQtPkdldFBhZ2VEYXRhKCktPlJlbGVhc2VDb2xvclNwYWNlKHBDU09iaik7DQotICAgICAgICB9DQotICAgIH0NCi0jZW5kaWYNCi0gICAgcmV0dXJuIFN0YXJ0RElCU291cmNlKCk7DQotfQ0KLUZYX0JPT0wgQ1BERl9JbWFnZVJlbmRlcmVyOjpTdGFydChDUERGX1JlbmRlclN0YXR1cyogcFN0YXR1cywgY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSwgRlhfQk9PTCBiU3RkQ1MsIGludCBibGVuZFR5cGUpDQotew0KLSAgICBtX3BSZW5kZXJTdGF0dXMgPSBwU3RhdHVzOw0KLSAgICBtX2JTdGRDUyA9IGJTdGRDUzsNCi0gICAgbV9wSW1hZ2VPYmplY3QgPSAoQ1BERl9JbWFnZU9iamVjdCopcE9iajsNCi0gICAgbV9CbGVuZFR5cGUgPSBibGVuZFR5cGU7DQotICAgIG1fcE9iajJEZXZpY2UgPSBwT2JqMkRldmljZTsNCi0jaWZuZGVmIF9GUERGQVBJX01JTklfDQotICAgIENQREZfRGljdGlvbmFyeSogcE9DID0gbV9wSW1hZ2VPYmplY3QtPm1fcEltYWdlLT5HZXRPQygpOw0KLSAgICBpZiAocE9DICYmIG1fcFJlbmRlclN0YXR1cy0+bV9PcHRpb25zLm1fcE9DQ29udGV4dCAmJiAhbV9wUmVuZGVyU3RhdHVzLT5tX09wdGlvbnMubV9wT0NDb250ZXh0LT5DaGVja09DR1Zpc2libGUocE9DKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotI2VuZGlmDQotICAgIG1fSW1hZ2VNYXRyaXggPSBtX3BJbWFnZU9iamVjdC0+bV9NYXRyaXg7DQotICAgIG1fSW1hZ2VNYXRyaXguQ29uY2F0KCpwT2JqMkRldmljZSk7DQotICAgIGlmIChTdGFydExvYWRESUJTb3VyY2UoKSkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgcmV0dXJuIFN0YXJ0UmVuZGVyRElCU291cmNlKCk7DQotfQ0KLUZYX0JPT0wgQ1BERl9JbWFnZVJlbmRlcmVyOjpTdGFydChDUERGX1JlbmRlclN0YXR1cyogcFN0YXR1cywgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcERJQlNvdXJjZSwgRlhfQVJHQiBiaXRtYXBfYXJnYiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJpdG1hcF9hbHBoYSwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcEltYWdlMkRldmljZSwgRlhfRFdPUkQgZmxhZ3MsIEZYX0JPT0wgYlN0ZENTLCBpbnQgYmxlbmRUeXBlKQ0KLXsNCi0gICAgbV9wUmVuZGVyU3RhdHVzID0gcFN0YXR1czsNCi0gICAgbV9wRElCU291cmNlID0gcERJQlNvdXJjZTsNCi0gICAgbV9GaWxsQXJnYiA9IGJpdG1hcF9hcmdiOw0KLSAgICBtX0JpdG1hcEFscGhhID0gYml0bWFwX2FscGhhOw0KLSAgICBtX0ltYWdlTWF0cml4ID0gKnBJbWFnZTJEZXZpY2U7DQotICAgIG1fRmxhZ3MgPSBmbGFnczsNCi0gICAgbV9iU3RkQ1MgPSBiU3RkQ1M7DQotICAgIG1fQmxlbmRUeXBlID0gYmxlbmRUeXBlOw0KLSAgICByZXR1cm4gU3RhcnRESUJTb3VyY2UoKTsNCi19DQotRlhfQk9PTAlDUERGX0ltYWdlUmVuZGVyZXI6OkRyYXdQYXR0ZXJuSW1hZ2UoY29uc3QgQ0ZYX01hdHJpeCogcE9iajJEZXZpY2UpDQotew0KLSAgICBpZiAobV9wUmVuZGVyU3RhdHVzLT5tX2JQcmludCAmJiAhKG1fcFJlbmRlclN0YXR1cy0+bV9wRGV2aWNlLT5HZXRSZW5kZXJDYXBzKCkgJiBGWFJDX0JMRU5EX01PREUpKSB7DQotICAgICAgICBtX1Jlc3VsdCA9IEZBTFNFOw0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYX1JFQ1QgcmVjdCA9IG1fSW1hZ2VNYXRyaXguR2V0VW5pdFJlY3QoKS5HZXRPdXR0ZXJSZWN0KCk7DQotICAgIHJlY3QuSW50ZXJzZWN0KG1fcFJlbmRlclN0YXR1cy0+bV9wRGV2aWNlLT5HZXRDbGlwQm94KCkpOw0KLSAgICBpZiAocmVjdC5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDRlhfQWZmaW5lTWF0cml4IG5ld19tYXRyaXggPSBtX0ltYWdlTWF0cml4Ow0KLSAgICBuZXdfbWF0cml4LlRyYW5zbGF0ZUkoLXJlY3QubGVmdCwgLXJlY3QudG9wKTsNCi0gICAgaW50IHdpZHRoID0gcmVjdC5XaWR0aCgpOw0KLSAgICBpbnQgaGVpZ2h0ID0gcmVjdC5IZWlnaHQoKTsNCi0gICAgQ0ZYX0Z4Z2VEZXZpY2UgYml0bWFwX2RldmljZTE7DQotICAgIGlmICghYml0bWFwX2RldmljZTEuQ3JlYXRlKHJlY3QuV2lkdGgoKSwgcmVjdC5IZWlnaHQoKSwgRlhESUJfUmdiMzIpKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBiaXRtYXBfZGV2aWNlMS5HZXRCaXRtYXAoKS0+Q2xlYXIoMHhmZmZmZmYpOw0KLSAgICB7DQotICAgICAgICBDUERGX1JlbmRlclN0YXR1cyBiaXRtYXBfcmVuZGVyOw0KLSAgICAgICAgYml0bWFwX3JlbmRlci5Jbml0aWFsaXplKG1fcFJlbmRlclN0YXR1cy0+bV9MZXZlbCArIDEsIG1fcFJlbmRlclN0YXR1cy0+bV9wQ29udGV4dCwgJmJpdG1hcF9kZXZpY2UxLCBOVUxMLCBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsICZtX3BSZW5kZXJTdGF0dXMtPm1fT3B0aW9ucywgMCwgbV9wUmVuZGVyU3RhdHVzLT5tX2JEcm9wT2JqZWN0cywgTlVMTCwgVFJVRSk7DQotICAgICAgICBDRlhfTWF0cml4IHBhdHRlcm5EZXZpY2UgPSAqcE9iajJEZXZpY2U7DQotICAgICAgICBwYXR0ZXJuRGV2aWNlLlRyYW5zbGF0ZSgoRlhfRkxPQVQpIC0gcmVjdC5sZWZ0LCAoRlhfRkxPQVQpIC0gcmVjdC50b3ApOw0KLSAgICAgICAgaWYobV9wUGF0dGVybi0+bV9QYXR0ZXJuVHlwZSA9PSBQQVRURVJOX1RJTElORykgew0KLSAgICAgICAgICAgIGJpdG1hcF9yZW5kZXIuRHJhd1RpbGluZ1BhdHRlcm4oKENQREZfVGlsaW5nUGF0dGVybiopbV9wUGF0dGVybiwgbV9wSW1hZ2VPYmplY3QsICZwYXR0ZXJuRGV2aWNlLCBGQUxTRSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGJpdG1hcF9yZW5kZXIuRHJhd1NoYWRpbmdQYXR0ZXJuKChDUERGX1NoYWRpbmdQYXR0ZXJuKiltX3BQYXR0ZXJuLCBtX3BJbWFnZU9iamVjdCwgJnBhdHRlcm5EZXZpY2UsIEZBTFNFKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICB7DQotICAgICAgICBDRlhfRnhnZURldmljZSBiaXRtYXBfZGV2aWNlMjsNCi0gICAgICAgIGlmICghYml0bWFwX2RldmljZTIuQ3JlYXRlKHJlY3QuV2lkdGgoKSwgcmVjdC5IZWlnaHQoKSwgRlhESUJfOGJwcFJnYikpIHsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGJpdG1hcF9kZXZpY2UyLkdldEJpdG1hcCgpLT5DbGVhcigwKTsNCi0gICAgICAgIENQREZfUmVuZGVyU3RhdHVzIGJpdG1hcF9yZW5kZXI7DQotICAgICAgICBiaXRtYXBfcmVuZGVyLkluaXRpYWxpemUobV9wUmVuZGVyU3RhdHVzLT5tX0xldmVsICsgMSwgbV9wUmVuZGVyU3RhdHVzLT5tX3BDb250ZXh0LCAmYml0bWFwX2RldmljZTIsIE5VTEwsIE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgMCwgbV9wUmVuZGVyU3RhdHVzLT5tX2JEcm9wT2JqZWN0cywgTlVMTCwgVFJVRSk7DQotICAgICAgICBDUERGX0ltYWdlUmVuZGVyZXIgaW1hZ2VfcmVuZGVyOw0KLSAgICAgICAgaWYgKGltYWdlX3JlbmRlci5TdGFydCgmYml0bWFwX3JlbmRlciwgbV9wRElCU291cmNlLCAweGZmZmZmZmZmLCAyNTUsICZuZXdfbWF0cml4LCBtX0ZsYWdzLCBUUlVFKSkgew0KLSAgICAgICAgICAgIGltYWdlX3JlbmRlci5Db250aW51ZShOVUxMKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX0xvYWRlci5tX01hdHRlQ29sb3IgIT0gMHhmZmZmZmZmZikgew0KLSAgICAgICAgICAgIGludCBtYXR0ZV9yID0gRlhBUkdCX1IobV9Mb2FkZXIubV9NYXR0ZUNvbG9yKTsNCi0gICAgICAgICAgICBpbnQgbWF0dGVfZyA9IEZYQVJHQl9HKG1fTG9hZGVyLm1fTWF0dGVDb2xvcik7DQotICAgICAgICAgICAgaW50IG1hdHRlX2IgPSBGWEFSR0JfQihtX0xvYWRlci5tX01hdHRlQ29sb3IpOw0KLSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7DQotICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSAoRlhfTFBCWVRFKWJpdG1hcF9kZXZpY2UxLkdldEJpdG1hcCgpLT5HZXRTY2FubGluZShyb3cpOw0KLSAgICAgICAgICAgICAgICBGWF9MUENCWVRFIG1hc2tfc2NhbiA9IGJpdG1hcF9kZXZpY2UyLkdldEJpdG1hcCgpLT5HZXRTY2FubGluZShyb3cpOw0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGEgPSAqbWFza19zY2FuICsrOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9yaWcgPSAoKmRlc3Rfc2NhbiAtIG1hdHRlX2IpICogMjU1IC8gYWxwaGEgKyBtYXR0ZV9iOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9yaWcgPiAyNTUpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZyA9IDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gb3JpZzsNCi0gICAgICAgICAgICAgICAgICAgICAgICBvcmlnID0gKCpkZXN0X3NjYW4gLSBtYXR0ZV9nKSAqIDI1NSAvIGFscGhhICsgbWF0dGVfZzsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JpZyA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZyA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcmlnID4gMjU1KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWcgPSAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IG9yaWc7DQotICAgICAgICAgICAgICAgICAgICAgICAgb3JpZyA9ICgqZGVzdF9zY2FuIC0gbWF0dGVfcikgKiAyNTUgLyBhbHBoYSArIG1hdHRlX3I7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWcgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWcgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3JpZyA+IDI1NSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnID0gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSBvcmlnOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBiaXRtYXBfZGV2aWNlMi5HZXRCaXRtYXAoKS0+Q29udmVydEZvcm1hdChGWERJQl84YnBwTWFzayk7DQotICAgICAgICBiaXRtYXBfZGV2aWNlMS5HZXRCaXRtYXAoKS0+TXVsdGlwbHlBbHBoYShiaXRtYXBfZGV2aWNlMi5HZXRCaXRtYXAoKSk7DQotICAgICAgICBiaXRtYXBfZGV2aWNlMS5HZXRCaXRtYXAoKS0+TXVsdGlwbHlBbHBoYSgyNTUpOw0KLSAgICB9DQotICAgIG1fcFJlbmRlclN0YXR1cy0+bV9wRGV2aWNlLT5TZXRESUJpdHMoYml0bWFwX2RldmljZTEuR2V0Qml0bWFwKCksIHJlY3QubGVmdCwgcmVjdC50b3AsIG1fQmxlbmRUeXBlKTsNCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1GWF9CT09MIENQREZfSW1hZ2VSZW5kZXJlcjo6RHJhd01hc2tlZEltYWdlKCkNCi17DQotICAgIGlmIChtX3BSZW5kZXJTdGF0dXMtPm1fYlByaW50ICYmICEobV9wUmVuZGVyU3RhdHVzLT5tX3BEZXZpY2UtPkdldFJlbmRlckNhcHMoKSAmIEZYUkNfQkxFTkRfTU9ERSkpIHsNCi0gICAgICAgIG1fUmVzdWx0ID0gRkFMU0U7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgRlhfUkVDVCByZWN0ID0gbV9JbWFnZU1hdHJpeC5HZXRVbml0UmVjdCgpLkdldE91dHRlclJlY3QoKTsNCi0gICAgcmVjdC5JbnRlcnNlY3QobV9wUmVuZGVyU3RhdHVzLT5tX3BEZXZpY2UtPkdldENsaXBCb3goKSk7DQotICAgIGlmIChyZWN0LklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIENGWF9BZmZpbmVNYXRyaXggbmV3X21hdHJpeCA9IG1fSW1hZ2VNYXRyaXg7DQotICAgIG5ld19tYXRyaXguVHJhbnNsYXRlSSgtcmVjdC5sZWZ0LCAtcmVjdC50b3ApOw0KLSAgICBpbnQgd2lkdGggPSByZWN0LldpZHRoKCk7DQotICAgIGludCBoZWlnaHQgPSByZWN0LkhlaWdodCgpOw0KLSAgICBDRlhfRnhnZURldmljZSBiaXRtYXBfZGV2aWNlMTsNCi0gICAgaWYgKCFiaXRtYXBfZGV2aWNlMS5DcmVhdGUod2lkdGgsIGhlaWdodCwgRlhESUJfUmdiMzIpKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBiaXRtYXBfZGV2aWNlMS5HZXRCaXRtYXAoKS0+Q2xlYXIoMHhmZmZmZmYpOw0KLSAgICB7DQotICAgICAgICBDUERGX1JlbmRlclN0YXR1cyBiaXRtYXBfcmVuZGVyOw0KLSAgICAgICAgYml0bWFwX3JlbmRlci5Jbml0aWFsaXplKG1fcFJlbmRlclN0YXR1cy0+bV9MZXZlbCArIDEsIG1fcFJlbmRlclN0YXR1cy0+bV9wQ29udGV4dCwgJmJpdG1hcF9kZXZpY2UxLCBOVUxMLCBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIDAsIG1fcFJlbmRlclN0YXR1cy0+bV9iRHJvcE9iamVjdHMsIE5VTEwsIFRSVUUpOw0KLSAgICAgICAgQ1BERl9JbWFnZVJlbmRlcmVyIGltYWdlX3JlbmRlcjsNCi0gICAgICAgIGlmIChpbWFnZV9yZW5kZXIuU3RhcnQoJmJpdG1hcF9yZW5kZXIsIG1fcERJQlNvdXJjZSwgMCwgMjU1LCAmbmV3X21hdHJpeCwgbV9GbGFncywgVFJVRSkpIHsNCi0gICAgICAgICAgICBpbWFnZV9yZW5kZXIuQ29udGludWUoTlVMTCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgew0KLSAgICAgICAgQ0ZYX0Z4Z2VEZXZpY2UgYml0bWFwX2RldmljZTI7DQotICAgICAgICBpZiAoIWJpdG1hcF9kZXZpY2UyLkNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCBGWERJQl84YnBwUmdiKSkgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgYml0bWFwX2RldmljZTIuR2V0Qml0bWFwKCktPkNsZWFyKDApOw0KLSAgICAgICAgQ1BERl9SZW5kZXJTdGF0dXMgYml0bWFwX3JlbmRlcjsNCi0gICAgICAgIGJpdG1hcF9yZW5kZXIuSW5pdGlhbGl6ZShtX3BSZW5kZXJTdGF0dXMtPm1fTGV2ZWwgKyAxLCBtX3BSZW5kZXJTdGF0dXMtPm1fcENvbnRleHQsICZiaXRtYXBfZGV2aWNlMiwgTlVMTCwgTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCAwLCBtX3BSZW5kZXJTdGF0dXMtPm1fYkRyb3BPYmplY3RzLCBOVUxMLCBUUlVFKTsNCi0gICAgICAgIENQREZfSW1hZ2VSZW5kZXJlciBpbWFnZV9yZW5kZXI7DQotICAgICAgICBpZiAoaW1hZ2VfcmVuZGVyLlN0YXJ0KCZiaXRtYXBfcmVuZGVyLCBtX0xvYWRlci5tX3BNYXNrLCAweGZmZmZmZmZmLCAyNTUsICZuZXdfbWF0cml4LCBtX0ZsYWdzLCBUUlVFKSkgew0KLSAgICAgICAgICAgIGltYWdlX3JlbmRlci5Db250aW51ZShOVUxMKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX0xvYWRlci5tX01hdHRlQ29sb3IgIT0gMHhmZmZmZmZmZikgew0KLSAgICAgICAgICAgIGludCBtYXR0ZV9yID0gRlhBUkdCX1IobV9Mb2FkZXIubV9NYXR0ZUNvbG9yKTsNCi0gICAgICAgICAgICBpbnQgbWF0dGVfZyA9IEZYQVJHQl9HKG1fTG9hZGVyLm1fTWF0dGVDb2xvcik7DQotICAgICAgICAgICAgaW50IG1hdHRlX2IgPSBGWEFSR0JfQihtX0xvYWRlci5tX01hdHRlQ29sb3IpOw0KLSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7DQotICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSAoRlhfTFBCWVRFKWJpdG1hcF9kZXZpY2UxLkdldEJpdG1hcCgpLT5HZXRTY2FubGluZShyb3cpOw0KLSAgICAgICAgICAgICAgICBGWF9MUENCWVRFIG1hc2tfc2NhbiA9IGJpdG1hcF9kZXZpY2UyLkdldEJpdG1hcCgpLT5HZXRTY2FubGluZShyb3cpOw0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGEgPSAqbWFza19zY2FuICsrOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9yaWcgPSAoKmRlc3Rfc2NhbiAtIG1hdHRlX2IpICogMjU1IC8gYWxwaGEgKyBtYXR0ZV9iOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9yaWcgPiAyNTUpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZyA9IDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gb3JpZzsNCi0gICAgICAgICAgICAgICAgICAgICAgICBvcmlnID0gKCpkZXN0X3NjYW4gLSBtYXR0ZV9nKSAqIDI1NSAvIGFscGhhICsgbWF0dGVfZzsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JpZyA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZyA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcmlnID4gMjU1KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWcgPSAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IG9yaWc7DQotICAgICAgICAgICAgICAgICAgICAgICAgb3JpZyA9ICgqZGVzdF9zY2FuIC0gbWF0dGVfcikgKiAyNTUgLyBhbHBoYSArIG1hdHRlX3I7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9yaWcgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWcgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3JpZyA+IDI1NSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnID0gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSBvcmlnOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBiaXRtYXBfZGV2aWNlMi5HZXRCaXRtYXAoKS0+Q29udmVydEZvcm1hdChGWERJQl84YnBwTWFzayk7DQotICAgICAgICBiaXRtYXBfZGV2aWNlMS5HZXRCaXRtYXAoKS0+TXVsdGlwbHlBbHBoYShiaXRtYXBfZGV2aWNlMi5HZXRCaXRtYXAoKSk7DQotICAgICAgICBpZiAobV9CaXRtYXBBbHBoYSA8IDI1NSkgew0KLSAgICAgICAgICAgIGJpdG1hcF9kZXZpY2UxLkdldEJpdG1hcCgpLT5NdWx0aXBseUFscGhhKG1fQml0bWFwQWxwaGEpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fcFJlbmRlclN0YXR1cy0+bV9wRGV2aWNlLT5TZXRESUJpdHMoYml0bWFwX2RldmljZTEuR2V0Qml0bWFwKCksIHJlY3QubGVmdCwgcmVjdC50b3AsIG1fQmxlbmRUeXBlKTsNCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1GWF9CT09MIENQREZfSW1hZ2VSZW5kZXJlcjo6U3RhcnRESUJTb3VyY2UoKQ0KLXsNCi0jaWYgIWRlZmluZWQoX0ZQREZBUElfTUlOSV8pDQotICAgIGlmICghKG1fRmxhZ3MgJiBSRU5ERVJfRk9SQ0VfRE9XTlNBTVBMRSkgJiYgbV9wRElCU291cmNlLT5HZXRCUFAoKSA+IDEpIHsNCi0gICAgICAgIGludCBpbWFnZV9zaXplID0gbV9wRElCU291cmNlLT5HZXRCUFAoKSAvIDggKiBtX3BESUJTb3VyY2UtPkdldFdpZHRoKCkgKiBtX3BESUJTb3VyY2UtPkdldEhlaWdodCgpOw0KLSAgICAgICAgaWYgKGltYWdlX3NpemUgPiBGUERGX0hVR0VfSU1BR0VfU0laRSAmJiAhKG1fRmxhZ3MgJiBSRU5ERVJfRk9SQ0VfSEFMRlRPTkUpKSB7DQotICAgICAgICAgICAgbV9GbGFncyB8PSBSRU5ERVJfRk9SQ0VfRE9XTlNBTVBMRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSNlbmRpZg0KLSAgICBpZiAobV9wUmVuZGVyU3RhdHVzLT5tX3BEZXZpY2UtPlN0YXJ0RElCaXRzKG1fcERJQlNvdXJjZSwgbV9CaXRtYXBBbHBoYSwgbV9GaWxsQXJnYiwNCi0gICAgICAgICAgICAmbV9JbWFnZU1hdHJpeCwgbV9GbGFncywgbV9EZXZpY2VIYW5kbGUsIDAsIE5VTEwsIG1fQmxlbmRUeXBlKSkgew0KLSAgICAgICAgaWYgKG1fRGV2aWNlSGFuZGxlICE9IE5VTEwpIHsNCi0gICAgICAgICAgICBtX1N0YXR1cyA9IDM7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0jaWYgIWRlZmluZWQoX0ZQREZBUElfTUlOSV8pIHx8IGRlZmluZWQoX0ZYQ09SRV9GRUFUVVJFX0FMTF8pDQotICAgIENGWF9GbG9hdFJlY3QgaW1hZ2VfcmVjdF9mID0gbV9JbWFnZU1hdHJpeC5HZXRVbml0UmVjdCgpOw0KLSAgICBGWF9SRUNUIGltYWdlX3JlY3QgPSBpbWFnZV9yZWN0X2YuR2V0T3V0dGVyUmVjdCgpOw0KLSAgICBpbnQgZGVzdF93aWR0aCA9IGltYWdlX3JlY3QuV2lkdGgoKTsNCi0gICAgaW50IGRlc3RfaGVpZ2h0ID0gaW1hZ2VfcmVjdC5IZWlnaHQoKTsNCi0gICAgaWYgKChGWFNZU19mYWJzKG1fSW1hZ2VNYXRyaXguYikgPj0gMC41ZiB8fCBtX0ltYWdlTWF0cml4LmEgPT0gMCkgfHwNCi0gICAgICAgICAgICAoRlhTWVNfZmFicyhtX0ltYWdlTWF0cml4LmMpID49IDAuNWYgfHwgbV9JbWFnZU1hdHJpeC5kID09IDApICkgew0KLSAgICAgICAgaWYgKG1fcFJlbmRlclN0YXR1cy0+bV9iUHJpbnQgJiYgIShtX3BSZW5kZXJTdGF0dXMtPm1fcERldmljZS0+R2V0UmVuZGVyQ2FwcygpICYgRlhSQ19CTEVORF9NT0RFKSkgew0KLSAgICAgICAgICAgIG1fUmVzdWx0ID0gRkFMU0U7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfUkVDVCBjbGlwX2JveCA9IG1fcFJlbmRlclN0YXR1cy0+bV9wRGV2aWNlLT5HZXRDbGlwQm94KCk7DQotICAgICAgICBjbGlwX2JveC5JbnRlcnNlY3QoaW1hZ2VfcmVjdCk7DQotICAgICAgICBtX1N0YXR1cyA9IDI7DQotICAgICAgICBtX3BUcmFuc2Zvcm1lciA9IEZYX05FVyBDRlhfSW1hZ2VUcmFuc2Zvcm1lcjsNCi0gICAgICAgIG1fcFRyYW5zZm9ybWVyLT5TdGFydChtX3BESUJTb3VyY2UsICZtX0ltYWdlTWF0cml4LCBtX0ZsYWdzLCAmY2xpcF9ib3gpOw0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgaWYgKG1fSW1hZ2VNYXRyaXguYSA8IDApIHsNCi0gICAgICAgIGRlc3Rfd2lkdGggPSAtZGVzdF93aWR0aDsNCi0gICAgfQ0KLSAgICBpZiAobV9JbWFnZU1hdHJpeC5kID4gMCkgew0KLSAgICAgICAgZGVzdF9oZWlnaHQgPSAtZGVzdF9oZWlnaHQ7DQotICAgIH0NCi0gICAgaW50IGRlc3RfbGVmdCwgZGVzdF90b3A7DQotICAgIGRlc3RfbGVmdCA9IGRlc3Rfd2lkdGggPiAwID8gaW1hZ2VfcmVjdC5sZWZ0IDogaW1hZ2VfcmVjdC5yaWdodDsNCi0gICAgZGVzdF90b3AgPSBkZXN0X2hlaWdodCA+IDAgPyBpbWFnZV9yZWN0LnRvcCA6IGltYWdlX3JlY3QuYm90dG9tOw0KLSAgICBpZiAobV9wRElCU291cmNlLT5Jc09wYXF1ZUltYWdlKCkgJiYgbV9CaXRtYXBBbHBoYSA9PSAyNTUpIHsNCi0gICAgICAgIGlmIChtX3BSZW5kZXJTdGF0dXMtPm1fcERldmljZS0+U3RyZXRjaERJQml0cyhtX3BESUJTb3VyY2UsIGRlc3RfbGVmdCwgZGVzdF90b3AsDQotICAgICAgICAgICAgICAgIGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0LCBtX0ZsYWdzLCBOVUxMLCBtX0JsZW5kVHlwZSkpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKG1fcERJQlNvdXJjZS0+SXNBbHBoYU1hc2soKSkgew0KLSAgICAgICAgaWYgKG1fQml0bWFwQWxwaGEgIT0gMjU1KSB7DQotICAgICAgICAgICAgbV9GaWxsQXJnYiA9IEZYQVJHQl9NVUxfQUxQSEEobV9GaWxsQXJnYiwgbV9CaXRtYXBBbHBoYSk7DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9wUmVuZGVyU3RhdHVzLT5tX3BEZXZpY2UtPlN0cmV0Y2hCaXRNYXNrKG1fcERJQlNvdXJjZSwgZGVzdF9sZWZ0LCBkZXN0X3RvcCwgZGVzdF93aWR0aCwgZGVzdF9oZWlnaHQsIG1fRmlsbEFyZ2IsIG1fRmxhZ3MpKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChtX3BSZW5kZXJTdGF0dXMtPm1fYlByaW50ICYmICEobV9wUmVuZGVyU3RhdHVzLT5tX3BEZXZpY2UtPkdldFJlbmRlckNhcHMoKSAmIEZYUkNfQkxFTkRfTU9ERSkpIHsNCi0gICAgICAgIG1fUmVzdWx0ID0gRkFMU0U7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBGWF9SRUNUIGNsaXBfYm94ID0gbV9wUmVuZGVyU3RhdHVzLT5tX3BEZXZpY2UtPkdldENsaXBCb3goKTsNCi0gICAgRlhfUkVDVCBkZXN0X3JlY3QgPSBjbGlwX2JveDsNCi0gICAgZGVzdF9yZWN0LkludGVyc2VjdChpbWFnZV9yZWN0KTsNCi0gICAgRlhfUkVDVCBkZXN0X2NsaXAoZGVzdF9yZWN0LmxlZnQgLSBpbWFnZV9yZWN0LmxlZnQsIGRlc3RfcmVjdC50b3AgLSBpbWFnZV9yZWN0LnRvcCwNCi0gICAgICAgICAgICAgICAgICAgICAgZGVzdF9yZWN0LnJpZ2h0IC0gaW1hZ2VfcmVjdC5sZWZ0LCBkZXN0X3JlY3QuYm90dG9tIC0gaW1hZ2VfcmVjdC50b3ApOw0KLSAgICBDRlhfRElCaXRtYXAqIHBTdHJldGNoZWQgPSBtX3BESUJTb3VyY2UtPlN0cmV0Y2hUbyhkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgbV9GbGFncywgJmRlc3RfY2xpcCk7DQotICAgIGlmIChwU3RyZXRjaGVkKSB7DQotICAgICAgICBtX3BSZW5kZXJTdGF0dXMtPkNvbXBvc2l0ZURJQml0bWFwKHBTdHJldGNoZWQsIGRlc3RfcmVjdC5sZWZ0LCBkZXN0X3JlY3QudG9wLCBtX0ZpbGxBcmdiLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX0JpdG1hcEFscGhhLCBtX0JsZW5kVHlwZSwgRkFMU0UpOw0KLSAgICAgICAgZGVsZXRlIHBTdHJldGNoZWQ7DQotICAgICAgICBwU3RyZXRjaGVkID0gTlVMTDsNCi0gICAgfQ0KLSNlbmRpZg0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUZYX0JPT0wgQ1BERl9JbWFnZVJlbmRlcmVyOjpTdGFydEJpdG1hcEFscGhhKCkNCi17DQotI2lmbmRlZiBfRlBERkFQSV9NSU5JXw0KLSAgICBpZiAobV9wRElCU291cmNlLT5Jc09wYXF1ZUltYWdlKCkpIHsNCi0gICAgICAgIENGWF9QYXRoRGF0YSBwYXRoOw0KLSAgICAgICAgcGF0aC5BcHBlbmRSZWN0KDAsIDAsIDEsIDEpOw0KLSAgICAgICAgcGF0aC5UcmFuc2Zvcm0oJm1fSW1hZ2VNYXRyaXgpOw0KLSAgICAgICAgRlhfRFdPUkQgZmlsbF9jb2xvciA9IEFyZ2JFbmNvZGUoMHhmZiwgbV9CaXRtYXBBbHBoYSwgbV9CaXRtYXBBbHBoYSwgbV9CaXRtYXBBbHBoYSk7DQotICAgICAgICBtX3BSZW5kZXJTdGF0dXMtPm1fcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIE5VTEwsIE5VTEwsIGZpbGxfY29sb3IsIDAsIEZYRklMTF9XSU5ESU5HKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBBbHBoYU1hc2sgPSBtX3BESUJTb3VyY2UtPklzQWxwaGFNYXNrKCkgPyBtX3BESUJTb3VyY2UgOiBtX3BESUJTb3VyY2UtPkdldEFscGhhTWFzaygpOw0KLSAgICAgICAgaWYgKEZYU1lTX2ZhYnMobV9JbWFnZU1hdHJpeC5iKSA+PSAwLjVmIHx8IEZYU1lTX2ZhYnMobV9JbWFnZU1hdHJpeC5jKSA+PSAwLjVmKSB7DQotICAgICAgICAgICAgaW50IGxlZnQsIHRvcDsNCi0gICAgICAgICAgICBDRlhfRElCaXRtYXAqIHBUcmFuc2Zvcm1lZCA9IHBBbHBoYU1hc2stPlRyYW5zZm9ybVRvKCZtX0ltYWdlTWF0cml4LCBsZWZ0LCB0b3ApOw0KLSAgICAgICAgICAgIGlmIChwVHJhbnNmb3JtZWQgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9wUmVuZGVyU3RhdHVzLT5tX3BEZXZpY2UtPlNldEJpdE1hc2socFRyYW5zZm9ybWVkLCBsZWZ0LCB0b3AsIEFyZ2JFbmNvZGUoMHhmZiwgbV9CaXRtYXBBbHBoYSwgbV9CaXRtYXBBbHBoYSwgbV9CaXRtYXBBbHBoYSkpOw0KLSAgICAgICAgICAgIGRlbGV0ZSBwVHJhbnNmb3JtZWQ7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIENGWF9GbG9hdFJlY3QgaW1hZ2VfcmVjdF9mID0gbV9JbWFnZU1hdHJpeC5HZXRVbml0UmVjdCgpOw0KLSAgICAgICAgICAgIEZYX1JFQ1QgaW1hZ2VfcmVjdCA9IGltYWdlX3JlY3RfZi5HZXRPdXR0ZXJSZWN0KCk7DQotICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGggPSBtX0ltYWdlTWF0cml4LmEgPiAwID8gaW1hZ2VfcmVjdC5XaWR0aCgpIDogLWltYWdlX3JlY3QuV2lkdGgoKTsNCi0gICAgICAgICAgICBpbnQgZGVzdF9oZWlnaHQgPSBtX0ltYWdlTWF0cml4LmQgPiAwID8gLWltYWdlX3JlY3QuSGVpZ2h0KCkgOiBpbWFnZV9yZWN0LkhlaWdodCgpOw0KLSAgICAgICAgICAgIGludCBsZWZ0ID0gZGVzdF93aWR0aCA+IDAgPyBpbWFnZV9yZWN0LmxlZnQgOiBpbWFnZV9yZWN0LnJpZ2h0Ow0KLSAgICAgICAgICAgIGludCB0b3AgPSBkZXN0X2hlaWdodCA+IDAgPyBpbWFnZV9yZWN0LnRvcCA6IGltYWdlX3JlY3QuYm90dG9tOw0KLSAgICAgICAgICAgIG1fcFJlbmRlclN0YXR1cy0+bV9wRGV2aWNlLT5TdHJldGNoQml0TWFzayhwQWxwaGFNYXNrLCBsZWZ0LCB0b3AsIGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgQXJnYkVuY29kZSgweGZmLCBtX0JpdG1hcEFscGhhLCBtX0JpdG1hcEFscGhhLCBtX0JpdG1hcEFscGhhKSk7DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9wRElCU291cmNlICE9IHBBbHBoYU1hc2spIHsNCi0gICAgICAgICAgICBkZWxldGUgcEFscGhhTWFzazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSNlbmRpZg0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUZYX0JPT0wgQ1BERl9JbWFnZVJlbmRlcmVyOjpDb250aW51ZShJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIGlmIChtX1N0YXR1cyA9PSAxKSB7DQotI2lmbmRlZiBfRlBERkFQSV9NSU5JXw0KLSAgICAgICAgaWYgKG1fcFF1aWNrU3RyZXRjaGVyLT5Db250aW51ZShwUGF1c2UpKSB7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9wUXVpY2tTdHJldGNoZXItPm1fcEJpdG1hcC0+SXNBbHBoYU1hc2soKSkNCi0gICAgICAgICAgICBtX3BSZW5kZXJTdGF0dXMtPm1fcERldmljZS0+U2V0Qml0TWFzayhtX3BRdWlja1N0cmV0Y2hlci0+bV9wQml0bWFwLCBtX3BRdWlja1N0cmV0Y2hlci0+bV9SZXN1bHRMZWZ0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcFF1aWNrU3RyZXRjaGVyLT5tX1Jlc3VsdFRvcCwgbV9GaWxsQXJnYik7DQotICAgICAgICBlbHNlDQotICAgICAgICAgICAgbV9wUmVuZGVyU3RhdHVzLT5tX3BEZXZpY2UtPlNldERJQml0cyhtX3BRdWlja1N0cmV0Y2hlci0+bV9wQml0bWFwLCBtX3BRdWlja1N0cmV0Y2hlci0+bV9SZXN1bHRMZWZ0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wUXVpY2tTdHJldGNoZXItPm1fUmVzdWx0VG9wLCBtX0JsZW5kVHlwZSk7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotI2VuZGlmDQotICAgIH0gZWxzZSBpZiAobV9TdGF0dXMgPT0gMikgew0KLSNpZiAhZGVmaW5lZChfRlBERkFQSV9NSU5JXykgfHwgZGVmaW5lZChfRlhDT1JFX0ZFQVRVUkVfQUxMXykNCi0gICAgICAgIGlmIChtX3BUcmFuc2Zvcm1lci0+Q29udGludWUocFBhdXNlKSkgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ0ZYX0RJQml0bWFwKiBwQml0bWFwID0gbV9wVHJhbnNmb3JtZXItPm1fU3RvcmVyLkRldGFjaCgpOw0KLSAgICAgICAgaWYgKHBCaXRtYXAgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwQml0bWFwLT5Jc0FscGhhTWFzaygpKSB7DQotICAgICAgICAgICAgaWYgKG1fQml0bWFwQWxwaGEgIT0gMjU1KSB7DQotICAgICAgICAgICAgICAgIG1fRmlsbEFyZ2IgPSBGWEFSR0JfTVVMX0FMUEhBKG1fRmlsbEFyZ2IsIG1fQml0bWFwQWxwaGEpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBtX1Jlc3VsdCA9IG1fcFJlbmRlclN0YXR1cy0+bV9wRGV2aWNlLT5TZXRCaXRNYXNrKHBCaXRtYXAsDQotICAgICAgICAgICAgICAgICAgICAgICBtX3BUcmFuc2Zvcm1lci0+bV9SZXN1bHRMZWZ0LCBtX3BUcmFuc2Zvcm1lci0+bV9SZXN1bHRUb3AsIG1fRmlsbEFyZ2IpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAobV9CaXRtYXBBbHBoYSAhPSAyNTUpIHsNCi0gICAgICAgICAgICAgICAgcEJpdG1hcC0+TXVsdGlwbHlBbHBoYShtX0JpdG1hcEFscGhhKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9SZXN1bHQgPSBtX3BSZW5kZXJTdGF0dXMtPm1fcERldmljZS0+U2V0RElCaXRzKHBCaXRtYXAsDQotICAgICAgICAgICAgICAgICAgICAgICBtX3BUcmFuc2Zvcm1lci0+bV9SZXN1bHRMZWZ0LCBtX3BUcmFuc2Zvcm1lci0+bV9SZXN1bHRUb3AsIG1fQmxlbmRUeXBlKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGRlbGV0ZSBwQml0bWFwOw0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSNlbmRpZg0KLSAgICB9IGVsc2UgaWYgKG1fU3RhdHVzID09IDMpIHsNCi0gICAgICAgIHJldHVybiBtX3BSZW5kZXJTdGF0dXMtPm1fcERldmljZS0+Q29udGludWVESUJpdHMobV9EZXZpY2VIYW5kbGUsIHBQYXVzZSk7DQotICAgIH0gZWxzZSBpZiAobV9TdGF0dXMgPT0gNCkgew0KLSAgICAgICAgaWYgKG1fTG9hZGVyLkNvbnRpbnVlKG1fTG9hZEhhbmRsZSwgcFBhdXNlKSkgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKFN0YXJ0UmVuZGVyRElCU291cmNlKCkpIHsNCi0gICAgICAgICAgICByZXR1cm4gQ29udGludWUocFBhdXNlKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUNQREZfUXVpY2tTdHJldGNoZXI6OkNQREZfUXVpY2tTdHJldGNoZXIoKQ0KLXsNCi0gICAgbV9wQml0bWFwID0gTlVMTDsNCi0gICAgbV9wRGVjb2RlciA9IE5VTEw7DQotICAgIG1fcENTID0gTlVMTDsNCi19DQotQ1BERl9RdWlja1N0cmV0Y2hlcjo6fkNQREZfUXVpY2tTdHJldGNoZXIoKQ0KLXsNCi0gICAgaWYgKG1fcEJpdG1hcCkgew0KLSAgICAgICAgZGVsZXRlIG1fcEJpdG1hcDsNCi0gICAgfQ0KLSAgICBpZiAobV9wQ1MpIHsNCi0gICAgICAgIG1fcENTLT5SZWxlYXNlQ1MoKTsNCi0gICAgfQ0KLSAgICBpZiAobV9wRGVjb2Rlcikgew0KLSAgICAgICAgZGVsZXRlIG1fcERlY29kZXI7DQotICAgIH0NCi19DQotSUNvZGVjX1NjYW5saW5lRGVjb2RlciogRlBERkFQSV9DcmVhdGVGbGF0ZURlY29kZXIoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KLSAgICAgICAgaW50IG5Db21wcywgaW50IGJwYywgY29uc3QgQ1BERl9EaWN0aW9uYXJ5KiBwUGFyYW1zKTsNCi1GWF9CT09MIENQREZfUXVpY2tTdHJldGNoZXI6OlN0YXJ0KENQREZfSW1hZ2VPYmplY3QqIHBJbWFnZU9iaiwgQ0ZYX0FmZmluZU1hdHJpeCogcEltYWdlMkRldmljZSwgY29uc3QgRlhfUkVDVCogcENsaXBCb3gpDQotew0KLSAgICBpZiAoRlhTWVNfZmFicyhwSW1hZ2UyRGV2aWNlLT5hKSA8IEZYU1lTX2ZhYnMocEltYWdlMkRldmljZS0+YikgKiAxMCAmJiBGWFNZU19mYWJzKHBJbWFnZTJEZXZpY2UtPmQpIDwgRlhTWVNfZmFicyhwSW1hZ2UyRGV2aWNlLT5jKSAqIDEwKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ0ZYX0Zsb2F0UmVjdCBpbWFnZV9yZWN0X2YgPSBwSW1hZ2UyRGV2aWNlLT5HZXRVbml0UmVjdCgpOw0KLSAgICBGWF9SRUNUIGltYWdlX3JlY3QgPSBpbWFnZV9yZWN0X2YuR2V0T3V0dGVyUmVjdCgpOw0KLSAgICBtX0Rlc3RXaWR0aCA9IGltYWdlX3JlY3QuV2lkdGgoKTsNCi0gICAgbV9EZXN0SGVpZ2h0ID0gaW1hZ2VfcmVjdC5IZWlnaHQoKTsNCi0gICAgbV9iRmxpcFggPSBwSW1hZ2UyRGV2aWNlLT5hIDwgMDsNCi0gICAgbV9iRmxpcFkgPSBwSW1hZ2UyRGV2aWNlLT5kID4gMDsNCi0gICAgRlhfUkVDVCByZXN1bHRfcmVjdCA9ICpwQ2xpcEJveDsNCi0gICAgcmVzdWx0X3JlY3QuSW50ZXJzZWN0KGltYWdlX3JlY3QpOw0KLSAgICBpZiAocmVzdWx0X3JlY3QuSXNFbXB0eSgpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbV9SZXN1bHRXaWR0aCA9IHJlc3VsdF9yZWN0LldpZHRoKCk7DQotICAgIG1fUmVzdWx0SGVpZ2h0ID0gcmVzdWx0X3JlY3QuSGVpZ2h0KCk7DQotICAgIG1fUmVzdWx0TGVmdCA9IHJlc3VsdF9yZWN0LmxlZnQ7DQotICAgIG1fUmVzdWx0VG9wID0gcmVzdWx0X3JlY3QudG9wOw0KLSAgICBtX0NsaXBMZWZ0ID0gcmVzdWx0X3JlY3QubGVmdCAtIGltYWdlX3JlY3QubGVmdDsNCi0gICAgbV9DbGlwVG9wID0gcmVzdWx0X3JlY3QudG9wIC0gaW1hZ2VfcmVjdC50b3A7DQotICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSBwSW1hZ2VPYmotPm1fcEltYWdlLT5HZXREaWN0KCk7DQotICAgIGlmIChwRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiQml0c1BlckNvbXBvbmVudCIpKSAhPSA4KSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKHBEaWN0LT5LZXlFeGlzdChGWF9CU1RSQygiU01hc2siKSkgfHwgcERpY3QtPktleUV4aXN0KEZYX0JTVFJDKCJNYXNrIikpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbV9TcmNXaWR0aCA9IHBEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJXaWR0aCIpKTsNCi0gICAgbV9TcmNIZWlnaHQgPSBwRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiSGVpZ2h0IikpOw0KLSAgICBtX3BDUyA9IE5VTEw7DQotICAgIG1fQnBwID0gMzsNCi0gICAgQ1BERl9PYmplY3QqIHBDU09iaiA9IHBEaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkNvbG9yU3BhY2UiKSk7DQotICAgIGlmIChwQ1NPYmogPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fcENTID0gQ1BERl9Db2xvclNwYWNlOjpMb2FkKHBJbWFnZU9iai0+bV9wSW1hZ2UtPkdldERvY3VtZW50KCksIHBDU09iaik7DQotICAgIGlmIChtX3BDUyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKCFfSXNTdXBwb3J0ZWQobV9wQ1MpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbV9CcHAgPSBtX3BDUy0+Q291bnRDb21wb25lbnRzKCk7DQotICAgIGlmIChtX3BDUy0+c1JHQigpKSB7DQotICAgICAgICBtX3BDUy0+UmVsZWFzZUNTKCk7DQotICAgICAgICBtX3BDUyA9IE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9TdHJlYW0qIHBTdHJlYW0gPSBwSW1hZ2VPYmotPm1fcEltYWdlLT5HZXRTdHJlYW0oKTsNCi0gICAgbV9TdHJlYW1BY2MuTG9hZEFsbERhdGEocFN0cmVhbSwgRkFMU0UsIG1fU3JjV2lkdGggKiBtX1NyY0hlaWdodCAqIG1fQnBwLCBUUlVFKTsNCi0gICAgbV9wRGVjb2RlciA9IE5VTEw7DQotICAgIGlmICghbV9TdHJlYW1BY2MuR2V0SW1hZ2VEZWNvZGVyKCkuSXNFbXB0eSgpKSB7DQotICAgICAgICBpZiAobV9TdHJlYW1BY2MuR2V0SW1hZ2VEZWNvZGVyKCkgPT0gRlhfQlNUUkMoIkRDVERlY29kZSIpKSB7DQotICAgICAgICAgICAgY29uc3QgQ1BERl9EaWN0aW9uYXJ5KiBwUGFyYW0gPSBtX1N0cmVhbUFjYy5HZXRJbWFnZVBhcmFtKCk7DQotICAgICAgICAgICAgbV9wRGVjb2RlciA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0SnBlZ01vZHVsZSgpLT5DcmVhdGVEZWNvZGVyKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJlYW1BY2MuR2V0RGF0YSgpLCBtX1N0cmVhbUFjYy5HZXRTaXplKCksIG1fU3JjV2lkdGgsIG1fU3JjSGVpZ2h0LCBtX0JwcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBQYXJhbSA/IHBQYXJhbS0+R2V0SW50ZWdlcihGWF9CU1RSQygiQ29sb3JUcmFuc2Zvcm0iKSwgMSkgOiAxKTsNCi0gICAgICAgIH0gZWxzZSBpZiAobV9TdHJlYW1BY2MuR2V0SW1hZ2VEZWNvZGVyKCkgPT0gRlhfQlNUUkMoIkZsYXRlRGVjb2RlIikpIHsNCi0gICAgICAgICAgICBtX3BEZWNvZGVyID0gRlBERkFQSV9DcmVhdGVGbGF0ZURlY29kZXIoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX1N0cmVhbUFjYy5HZXREYXRhKCksIG1fU3RyZWFtQWNjLkdldFNpemUoKSwgbV9TcmNXaWR0aCwgbV9TcmNIZWlnaHQsIG1fQnBwLCA4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJlYW1BY2MuR2V0SW1hZ2VQYXJhbSgpKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wRGVjb2Rlci0+RG93blNjYWxlKG1fRGVzdFdpZHRoLCBtX0Rlc3RIZWlnaHQpOw0KLSAgICB9DQotICAgIG1fcEJpdG1hcCA9IEZYX05FVyBDRlhfRElCaXRtYXA7DQotI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXw0KLSAgICBtX3BCaXRtYXAtPkNyZWF0ZShtX1Jlc3VsdFdpZHRoLCBtX1Jlc3VsdEhlaWdodCwgRlhESUJfUmdiMzIpOw0KLSNlbHNlDQotICAgIG1fcEJpdG1hcC0+Q3JlYXRlKG1fUmVzdWx0V2lkdGgsIG1fUmVzdWx0SGVpZ2h0LCBGWERJQl9SZ2IpOw0KLSNlbmRpZg0KLSAgICBtX0xpbmVJbmRleCA9IDA7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENQREZfUXVpY2tTdHJldGNoZXI6OkNvbnRpbnVlKElGWF9QYXVzZSogcFBhdXNlKQ0KLXsNCi0gICAgRlhfTFBCWVRFIHJlc3VsdF9idWYgPSBtX3BCaXRtYXAtPkdldEJ1ZmZlcigpOw0KLSAgICBpbnQgc3JjX3dpZHRoID0gbV9wRGVjb2RlciA/IG1fcERlY29kZXItPkdldFdpZHRoKCkgOiBtX1NyY1dpZHRoOw0KLSAgICBpbnQgc3JjX2hlaWdodCA9IG1fcERlY29kZXIgPyBtX3BEZWNvZGVyLT5HZXRIZWlnaHQoKSA6IG1fU3JjSGVpZ2h0Ow0KLSAgICBpbnQgc3JjX3BpdGNoID0gc3JjX3dpZHRoICogbV9CcHA7DQotICAgIHdoaWxlIChtX0xpbmVJbmRleCA8IG1fUmVzdWx0SGVpZ2h0KSB7DQotICAgICAgICBpbnQgZGVzdF95LCBzcmNfeTsNCi0gICAgICAgIGlmIChtX2JGbGlwWSkgew0KLSAgICAgICAgICAgIGRlc3RfeSA9IG1fUmVzdWx0SGVpZ2h0IC0gbV9MaW5lSW5kZXggLSAxOw0KLSAgICAgICAgICAgIHNyY195ID0gKG1fRGVzdEhlaWdodCAtIChkZXN0X3kgKyBtX0NsaXBUb3ApIC0gMSkgKiBzcmNfaGVpZ2h0IC8gbV9EZXN0SGVpZ2h0Ow0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBkZXN0X3kgPSBtX0xpbmVJbmRleDsNCi0gICAgICAgICAgICBzcmNfeSA9IChkZXN0X3kgKyBtX0NsaXBUb3ApICogc3JjX2hlaWdodCAvIG1fRGVzdEhlaWdodDsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW47DQotICAgICAgICBpZiAobV9wRGVjb2Rlcikgew0KLSAgICAgICAgICAgIHNyY19zY2FuID0gbV9wRGVjb2Rlci0+R2V0U2NhbmxpbmUoc3JjX3kpOw0KLSAgICAgICAgICAgIGlmIChzcmNfc2NhbiA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc3JjX3NjYW4gPSBtX1N0cmVhbUFjYy5HZXREYXRhKCk7DQotICAgICAgICAgICAgaWYgKHNyY19zY2FuID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY195ICogc3JjX3BpdGNoOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfTFBCWVRFIHJlc3VsdF9zY2FuID0gcmVzdWx0X2J1ZiArIGRlc3RfeSAqIG1fcEJpdG1hcC0+R2V0UGl0Y2goKTsNCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9SZXN1bHRXaWR0aDsgeCArKykgew0KLSAgICAgICAgICAgIGludCBkZXN0X3ggPSBtX0NsaXBMZWZ0ICsgeDsNCi0gICAgICAgICAgICBpbnQgc3JjX3ggPSAobV9iRmxpcFggPyAobV9EZXN0V2lkdGggLSBkZXN0X3ggLSAxKSA6IGRlc3RfeCkgKiBzcmNfd2lkdGggLyBtX0Rlc3RXaWR0aDsNCi0gICAgICAgICAgICBGWF9MUENCWVRFIHNyY19waXhlbCA9IHNyY19zY2FuICsgc3JjX3ggKiBtX0JwcDsNCi0gICAgICAgICAgICBpZiAobV9wQ1MgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAqcmVzdWx0X3NjYW4gPSBzcmNfcGl4ZWxbMl07DQotICAgICAgICAgICAgICAgIHJlc3VsdF9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICAqcmVzdWx0X3NjYW4gPSBzcmNfcGl4ZWxbMV07DQotICAgICAgICAgICAgICAgIHJlc3VsdF9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICAqcmVzdWx0X3NjYW4gPSBzcmNfcGl4ZWxbMF07DQotICAgICAgICAgICAgICAgIHJlc3VsdF9zY2FuICsrOw0KLSNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8NCi0gICAgICAgICAgICAgICAgcmVzdWx0X3NjYW4gKys7DQotI2VuZGlmDQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgbV9wQ1MtPlRyYW5zbGF0ZUltYWdlTGluZShyZXN1bHRfc2Nhbiwgc3JjX3BpeGVsLCAxLCAwLCAwKTsNCi0jaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfDQotICAgICAgICAgICAgICAgIHJlc3VsdF9zY2FuICs9IDQ7DQotI2Vsc2UNCi0gICAgICAgICAgICAgICAgcmVzdWx0X3NjYW4gKz0gMzsNCi0jZW5kaWYNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBtX0xpbmVJbmRleCArKzsNCi0gICAgICAgIGlmIChwUGF1c2UgJiYgcFBhdXNlLT5OZWVkVG9QYXVzZU5vdygpKSB7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1DRlhfRElCaXRtYXAqIENQREZfUmVuZGVyU3RhdHVzOjpMb2FkU01hc2soQ1BERl9EaWN0aW9uYXJ5KiBwU01hc2tEaWN0LA0KLSAgICAgICAgRlhfUkVDVCogcENsaXBSZWN0LCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4KQ0KLXsNCi0gICAgaWYgKHBTTWFza0RpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ0ZYX0RJQml0bWFwKiBwTWFzayA9IE5VTEw7DQotICAgIGludCB3aWR0aCA9IHBDbGlwUmVjdC0+cmlnaHQgLSBwQ2xpcFJlY3QtPmxlZnQ7DQotICAgIGludCBoZWlnaHQgPSBwQ2xpcFJlY3QtPmJvdHRvbSAtIHBDbGlwUmVjdC0+dG9wOw0KLSAgICBGWF9CT09MIGJMdW1pbm9zaXR5ID0gRkFMU0U7DQotICAgIGJMdW1pbm9zaXR5ID0gcFNNYXNrRGljdC0+R2V0Q29uc3RTdHJpbmcoRlhfQlNUUkMoIlMiKSkgIT0gRlhfQlNUUkMoIkFscGhhIik7DQotICAgIENQREZfU3RyZWFtKiBwR3JvdXAgPSBwU01hc2tEaWN0LT5HZXRTdHJlYW0oRlhfQlNUUkMoIkciKSk7DQotICAgIGlmIChwR3JvdXAgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9GdW5jdGlvbiogcEZ1bmMgPSBOVUxMOw0KLSAgICBDUERGX09iamVjdCogcEZ1bmNPYmogPSBwU01hc2tEaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIlRSIikpOw0KLSAgICBpZiAocEZ1bmNPYmogJiYgKHBGdW5jT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkgfHwgcEZ1bmNPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSRUFNKSkgew0KLSAgICAgICAgcEZ1bmMgPSBDUERGX0Z1bmN0aW9uOjpMb2FkKHBGdW5jT2JqKTsNCi0gICAgfQ0KLSAgICBDRlhfQWZmaW5lTWF0cml4IG1hdHJpeCA9ICpwTWF0cml4Ow0KLSAgICBtYXRyaXguVHJhbnNsYXRlSSgtcENsaXBSZWN0LT5sZWZ0LCAtcENsaXBSZWN0LT50b3ApOw0KLSAgICBDUERGX0Zvcm0gZm9ybShtX3BDb250ZXh0LT5tX3BEb2N1bWVudCwgbV9wQ29udGV4dC0+bV9wUGFnZVJlc291cmNlcywgcEdyb3VwKTsNCi0gICAgZm9ybS5QYXJzZUNvbnRlbnQoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7DQotICAgIENGWF9GeGdlRGV2aWNlIGJpdG1hcF9kZXZpY2U7DQotI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXw0KLSAgICBpZiAoIWJpdG1hcF9kZXZpY2UuQ3JlYXRlKHdpZHRoLCBoZWlnaHQsIGJMdW1pbm9zaXR5ID8gRlhESUJfUmdiMzIgOiBGWERJQl84YnBwTWFzaykpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotI2Vsc2UNCi0gICAgaWYgKCFiaXRtYXBfZGV2aWNlLkNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCBiTHVtaW5vc2l0eSA/IEZYRElCX1JnYiA6IEZYRElCXzhicHBNYXNrKSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0jZW5kaWYNCi0gICAgQ0ZYX0RJQml0bWFwJiBiaXRtYXAgPSAqYml0bWFwX2RldmljZS5HZXRCaXRtYXAoKTsNCi0gICAgQ1BERl9PYmplY3QqIHBDU09iaiA9IE5VTEw7DQotICAgIENQREZfQ29sb3JTcGFjZSogcENTID0gTlVMTDsNCi0gICAgaWYgKGJMdW1pbm9zaXR5KSB7DQotICAgICAgICBDUERGX0FycmF5KiBwQkMgPSBwU01hc2tEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiQkMiKSk7DQotICAgICAgICBGWF9BUkdCIGJhY2tfY29sb3IgPSAweGZmMDAwMDAwOw0KLSAgICAgICAgaWYgKHBCQykgew0KLSAgICAgICAgICAgIHBDU09iaiA9IHBHcm91cC0+R2V0RGljdCgpLT5HZXREaWN0KEZYX0JTVFJDKCJHcm91cCIpKS0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJDUyIpKTsNCi0gICAgICAgICAgICBwQ1MgPSBtX3BDb250ZXh0LT5tX3BEb2N1bWVudC0+TG9hZENvbG9yU3BhY2UocENTT2JqKTsNCi0gICAgICAgICAgICBpZiAocENTKSB7DQotICAgICAgICAgICAgICAgIEZYX0ZMT0FUIFIsIEcsIEI7DQotICAgICAgICAgICAgICAgIEZYX0RXT1JEIG51bV9mbG9hdHMgPSA4Ow0KLSAgICAgICAgICAgICAgICBpZiAocENTLT5Db3VudENvbXBvbmVudHMoKSA+IChGWF9JTlQzMiludW1fZmxvYXRzKSB7DQotICAgICAgICAgICAgICAgICAgICBudW1fZmxvYXRzID0gKEZYX0RXT1JEKXBDUy0+Q291bnRDb21wb25lbnRzKCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgQ0ZYX0ZpeGVkQnVmR3JvdzxGWF9GTE9BVCwgOD4gZmxvYXRfYXJyYXkobnVtX2Zsb2F0cyk7DQotICAgICAgICAgICAgICAgIEZYX0ZMT0FUKiBwRmxvYXRzID0gZmxvYXRfYXJyYXk7DQotICAgICAgICAgICAgICAgIEZYU1lTX21lbXNldDMyKHBGbG9hdHMsIDAsIG51bV9mbG9hdHMgKiBzaXplb2YoRlhfRkxPQVQpKTsNCi0gICAgICAgICAgICAgICAgaW50IGNvdW50ID0gcEJDLT5HZXRDb3VudCgpID4gOCA/IDggOiBwQkMtPkdldENvdW50KCk7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIHBGbG9hdHNbaV0gPSBwQkMtPkdldE51bWJlcihpKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBwQ1MtPkdldFJHQihwRmxvYXRzLCBSLCBHLCBCKTsNCi0gICAgICAgICAgICAgICAgYmFja19jb2xvciA9IDB4ZmYwMDAwMDAgfCAoKEZYX0lOVDMyKShSICogMjU1KSA8PCAxNikgfCAoKEZYX0lOVDMyKShHICogMjU1KSA8PCA4KSB8IChGWF9JTlQzMikoQiAqIDI1NSk7DQotICAgICAgICAgICAgICAgIG1fcENvbnRleHQtPm1fcERvY3VtZW50LT5HZXRQYWdlRGF0YSgpLT5SZWxlYXNlQ29sb3JTcGFjZShwQ1NPYmopOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGJpdG1hcC5DbGVhcihiYWNrX2NvbG9yKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGJpdG1hcC5DbGVhcigwKTsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBGb3JtUmVzb3VyY2UgPSBOVUxMOw0KLSAgICBpZiAoZm9ybS5tX3BGb3JtRGljdCkgew0KLSAgICAgICAgcEZvcm1SZXNvdXJjZSA9IGZvcm0ubV9wRm9ybURpY3QtPkdldERpY3QoRlhfQlNUUkMoIlJlc291cmNlcyIpKTsNCi0gICAgfQ0KLSAgICBDUERGX1JlbmRlck9wdGlvbnMgb3B0aW9uczsNCi0gICAgb3B0aW9ucy5tX0NvbG9yTW9kZSA9IGJMdW1pbm9zaXR5ID8gUkVOREVSX0NPTE9SX05PUk1BTCA6IFJFTkRFUl9DT0xPUl9BTFBIQTsNCi0gICAgQ1BERl9SZW5kZXJTdGF0dXMgc3RhdHVzOw0KLSAgICBzdGF0dXMuSW5pdGlhbGl6ZShtX0xldmVsICsgMSwgbV9wQ29udGV4dCwgJmJpdG1hcF9kZXZpY2UsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICZvcHRpb25zLCAwLCBtX2JEcm9wT2JqZWN0cywgcEZvcm1SZXNvdXJjZSwgVFJVRSwgTlVMTCwgMCwgcENTID8gcENTLT5HZXRGYW1pbHkoKSA6IDAsIGJMdW1pbm9zaXR5KTsNCi0gICAgc3RhdHVzLlJlbmRlck9iamVjdExpc3QoJmZvcm0sICZtYXRyaXgpOw0KLSAgICBwTWFzayA9IEZYX05FVyBDRlhfRElCaXRtYXA7DQotICAgIGlmICghcE1hc2stPkNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCBGWERJQl84YnBwTWFzaykpIHsNCi0gICAgICAgIGRlbGV0ZSBwTWFzazsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIEZYX0xQQllURSBkZXN0X2J1ZiA9IHBNYXNrLT5HZXRCdWZmZXIoKTsNCi0gICAgaW50IGRlc3RfcGl0Y2ggPSBwTWFzay0+R2V0UGl0Y2goKTsNCi0gICAgRlhfTFBCWVRFIHNyY19idWYgPSBiaXRtYXAuR2V0QnVmZmVyKCk7DQotICAgIGludCBzcmNfcGl0Y2ggPSBiaXRtYXAuR2V0UGl0Y2goKTsNCi0gICAgRlhfTFBCWVRFIHBUcmFuc2ZlciA9IEZYX0FsbG9jKEZYX0JZVEUsIDI1Nik7DQotICAgIGlmIChwRnVuYykgew0KLSAgICAgICAgQ0ZYX0ZpeGVkQnVmR3JvdzxGWF9GTE9BVCwgMTY+IHJlc3VsdHMocEZ1bmMtPkNvdW50T3V0cHV0cygpKTsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7DQotICAgICAgICAgICAgRlhfRkxPQVQgaW5wdXQgPSAoRlhfRkxPQVQpaSAvIDI1NS4wZjsNCi0gICAgICAgICAgICBpbnQgbnJlc3VsdDsNCi0gICAgICAgICAgICBwRnVuYy0+Q2FsbCgmaW5wdXQsIDEsIHJlc3VsdHMsIG5yZXN1bHQpOw0KLSAgICAgICAgICAgIHBUcmFuc2ZlcltpXSA9IEZYU1lTX3JvdW5kKHJlc3VsdHNbMF0gKiAyNTUpOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsNCi0gICAgICAgICAgICBwVHJhbnNmZXJbaV0gPSBpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChiTHVtaW5vc2l0eSkgew0KLSAgICAgICAgaW50IEJwcCA9IGJpdG1hcC5HZXRCUFAoKSAvIDg7DQotICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3BvcyA9IGRlc3RfYnVmICsgcm93ICogZGVzdF9waXRjaDsNCi0gICAgICAgICAgICBGWF9MUEJZVEUgc3JjX3BvcyA9IHNyY19idWYgKyByb3cgKiBzcmNfcGl0Y2g7DQotICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAqZGVzdF9wb3MgKysgPSBwVHJhbnNmZXJbRlhSR0IyR1JBWShzcmNfcG9zWzJdLCBzcmNfcG9zWzFdLCAqc3JjX3BvcyldOw0KLSAgICAgICAgICAgICAgICBzcmNfcG9zICs9IEJwcDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZiAocEZ1bmMpIHsNCi0gICAgICAgIGludCBzaXplID0gZGVzdF9waXRjaCAqIGhlaWdodDsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgew0KLSAgICAgICAgICAgIGRlc3RfYnVmW2ldID0gcFRyYW5zZmVyW3NyY19idWZbaV1dOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIoZGVzdF9idWYsIHNyY19idWYsIGRlc3RfcGl0Y2ggKiBoZWlnaHQpOw0KLSAgICB9DQotICAgIGlmIChwRnVuYykgew0KLSAgICAgICAgZGVsZXRlIHBGdW5jOw0KLSAgICB9DQotICAgIEZYX0ZyZWUocFRyYW5zZmVyKTsNCi0gICAgcmV0dXJuIHBNYXNrOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfbW9kdWxlLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcmVuZGVyLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZW9iai5oIgorI2luY2x1ZGUgIi4uL2ZwZGZfcGFnZS9wYWdlaW50LmgiCisjaW5jbHVkZSAicmVuZGVyX2ludC5oIgorRlhfQk9PTCBDUERGX1JlbmRlclN0YXR1czo6UHJvY2Vzc0ltYWdlKENQREZfSW1hZ2VPYmplY3QqIHBJbWFnZU9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpCit7CisgICAgQ1BERl9JbWFnZVJlbmRlcmVyIHJlbmRlcjsKKyAgICBpZiAocmVuZGVyLlN0YXJ0KHRoaXMsIHBJbWFnZU9iaiwgcE9iajJEZXZpY2UsIG1fYlN0ZENTLCBtX2N1ckJsZW5kKSkgeworICAgICAgICByZW5kZXIuQ29udGludWUoTlVMTCk7CisgICAgfQorI2lmZGVmIF9GUERGQVBJX01JTklfCisgICAgaWYgKG1fRGl0aGVyQml0cykgeworICAgICAgICBEaXRoZXJPYmplY3RBcmVhKHBJbWFnZU9iaiwgcE9iajJEZXZpY2UpOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiByZW5kZXIubV9SZXN1bHQ7Cit9CisjaWYgZGVmaW5lZChfRlBERkFQSV9NSU5JXykKK0ZYX0JPT0wgQ1BERl9SZW5kZXJTdGF0dXM6OlByb2Nlc3NJbmxpbmVzKENQREZfSW5saW5lSW1hZ2VzKiBwSW5saW5lcywgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpCit7CisgICAgaW50IGJpdG1hcF9hbHBoYSA9IDI1NTsKKyAgICBpZiAoIXBJbmxpbmVzLT5tX0dlbmVyYWxTdGF0ZS5Jc051bGwoKSkgeworICAgICAgICBiaXRtYXBfYWxwaGEgPSBGWFNZU19yb3VuZChwSW5saW5lcy0+bV9HZW5lcmFsU3RhdGUuR2V0T2JqZWN0KCktPm1fRmlsbEFscGhhICogMjU1KTsKKyAgICB9CisgICAgaWYgKHBJbmxpbmVzLT5tX3BTdHJlYW0pIHsKKyAgICAgICAgQ1BERl9ESUJTb3VyY2UgZGlic3JjOworICAgICAgICBpZiAoIWRpYnNyYy5Mb2FkKG1fcENvbnRleHQtPm1fcERvY3VtZW50LCBwSW5saW5lcy0+bV9wU3RyZWFtLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSkgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgcElubGluZXMtPm1fcEJpdG1hcCA9IGRpYnNyYy5DbG9uZSgpOworICAgICAgICBwSW5saW5lcy0+bV9wU3RyZWFtLT5SZWxlYXNlKCk7CisgICAgICAgIHBJbmxpbmVzLT5tX3BTdHJlYW0gPSBOVUxMOworICAgIH0KKyAgICBpZiAocElubGluZXMtPm1fcEJpdG1hcCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBGWF9BUkdCIGZpbGxfYXJnYiA9IDA7CisgICAgaWYgKHBJbmxpbmVzLT5tX3BCaXRtYXAtPklzQWxwaGFNYXNrKCkpIHsKKyAgICAgICAgZmlsbF9hcmdiID0gR2V0RmlsbEFyZ2IocElubGluZXMpOworICAgIH0KKyAgICBpbnQgZmxhZ3MgPSAwOworICAgIGlmIChtX09wdGlvbnMubV9GbGFncyAmIFJFTkRFUl9GT1JDRV9ET1dOU0FNUExFKSB7CisgICAgICAgIGZsYWdzIHw9IFJFTkRFUl9GT1JDRV9ET1dOU0FNUExFOworICAgIH0gZWxzZSBpZiAobV9PcHRpb25zLm1fRmxhZ3MgJiBSRU5ERVJfRk9SQ0VfSEFMRlRPTkUpIHsKKyAgICAgICAgZmxhZ3MgPSAwOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBJbmxpbmVzLT5tX01hdHJpY2VzLkdldFNpemUoKTsgaSArKykgeworICAgICAgICBDRlhfQWZmaW5lTWF0cml4IGltYWdlX21hdHJpeCA9IHBJbmxpbmVzLT5tX01hdHJpY2VzLkdldEF0KGkpOworICAgICAgICBpbWFnZV9tYXRyaXguQ29uY2F0KCpwT2JqMkRldmljZSk7CisgICAgICAgIENQREZfSW1hZ2VSZW5kZXJlciByZW5kZXJlcjsKKyAgICAgICAgaWYgKHJlbmRlcmVyLlN0YXJ0KHRoaXMsIHBJbmxpbmVzLT5tX3BCaXRtYXAsIGZpbGxfYXJnYiwgYml0bWFwX2FscGhhLCAmaW1hZ2VfbWF0cml4LCBmbGFncywgRkFMU0UsIG1fY3VyQmxlbmQpKSB7CisgICAgICAgICAgICByZW5kZXJlci5Db250aW51ZShOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKyNlbmRpZgordm9pZCBDUERGX1JlbmRlclN0YXR1czo6Q29tcG9zaXRlRElCaXRtYXAoQ0ZYX0RJQml0bWFwKiBwRElCaXRtYXAsIGludCBsZWZ0LCBpbnQgdG9wLCBGWF9BUkdCIG1hc2tfYXJnYiwKKyAgICAgICAgaW50IGJpdG1hcF9hbHBoYSwgaW50IGJsZW5kX21vZGUsIGludCBUcmFuc3BhcmVuY3kpCit7CisgICAgaWYgKHBESUJpdG1hcCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfQk9PTCBiSXNvbGF0ZWQgPSBUcmFuc3BhcmVuY3kgJiBQREZUUkFOU19JU09MQVRFRDsKKyAgICBGWF9CT09MIGJHcm91cCA9IFRyYW5zcGFyZW5jeSAmIFBERlRSQU5TX0dST1VQOworICAgIGlmIChibGVuZF9tb2RlID09IEZYRElCX0JMRU5EX05PUk1BTCkgeworICAgICAgICBpZiAoIXBESUJpdG1hcC0+SXNBbHBoYU1hc2soKSkgeworICAgICAgICAgICAgaWYgKGJpdG1hcF9hbHBoYSA8IDI1NSkgeworICAgICAgICAgICAgICAgIHBESUJpdG1hcC0+TXVsdGlwbHlBbHBoYShiaXRtYXBfYWxwaGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fcERldmljZS0+U2V0RElCaXRzKHBESUJpdG1hcCwgbGVmdCwgdG9wKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEZYX0RXT1JEIGZpbGxfYXJnYiA9IG1fT3B0aW9ucy5UcmFuc2xhdGVDb2xvcihtYXNrX2FyZ2IpOworICAgICAgICAgICAgaWYgKGJpdG1hcF9hbHBoYSA8IDI1NSkgeworICAgICAgICAgICAgICAgICgoRlhfQllURSopJmZpbGxfYXJnYilbM10gPSAoKEZYX0JZVEUqKSZmaWxsX2FyZ2IpWzNdICogYml0bWFwX2FscGhhIC8gMjU1OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fcERldmljZS0+U2V0Qml0TWFzayhwRElCaXRtYXAsIGxlZnQsIHRvcCwgZmlsbF9hcmdiKSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBGWF9CT09MIGJCYWNrQWxwaGFSZXF1aXJlZCA9IGJsZW5kX21vZGUgJiYgYklzb2xhdGVkICYmICFtX2JEcm9wT2JqZWN0czsKKyAgICBGWF9CT09MIGJHZXRCYWNrR3JvdW5kID0gKChtX3BEZXZpY2UtPkdldFJlbmRlckNhcHMoKSAmIEZYUkNfQUxQSEFfT1VUUFVUKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCEobV9wRGV2aWNlLT5HZXRSZW5kZXJDYXBzKCkgJiBGWFJDX0FMUEhBX09VVFBVVCkgJiYgKG1fcERldmljZS0+R2V0UmVuZGVyQ2FwcygpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBGWFJDX0dFVF9CSVRTKSAmJiAhYkJhY2tBbHBoYVJlcXVpcmVkKTsKKyAgICBpZiAoYkdldEJhY2tHcm91bmQpIHsKKyAgICAgICAgaWYgKGJJc29sYXRlZCB8fCAhYkdyb3VwKSB7CisgICAgICAgICAgICBpZiAocERJQml0bWFwLT5Jc0FscGhhTWFzaygpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9wRGV2aWNlLT5TZXRESUJpdHMocERJQml0bWFwLCBsZWZ0LCB0b3AsIGJsZW5kX21vZGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRlhfUkVDVCByZWN0KGxlZnQsIHRvcCwgbGVmdCArIHBESUJpdG1hcC0+R2V0V2lkdGgoKSwgdG9wICsgcERJQml0bWFwLT5HZXRIZWlnaHQoKSk7CisgICAgICAgICAgICByZWN0LkludGVyc2VjdChtX3BEZXZpY2UtPkdldENsaXBCb3goKSk7CisgICAgICAgICAgICBDRlhfRElCaXRtYXAqIHBDbG9uZSA9IE5VTEw7CisgICAgICAgICAgICBGWF9CT09MIGJDbG9uZSA9IEZBTFNFOworICAgICAgICAgICAgaWYgKG1fcERldmljZS0+R2V0QmFja0Ryb3AoKSAmJiBtX3BEZXZpY2UtPkdldEJpdG1hcCgpKSB7CisgICAgICAgICAgICAgICAgYkNsb25lID0gVFJVRTsKKyAgICAgICAgICAgICAgICBwQ2xvbmUgPSBtX3BEZXZpY2UtPkdldEJhY2tEcm9wKCktPkNsb25lKCZyZWN0KTsKKyAgICAgICAgICAgICAgICBDRlhfRElCaXRtYXAgKnBGb3JlQml0bWFwID0gbV9wRGV2aWNlLT5HZXRCaXRtYXAoKTsKKyAgICAgICAgICAgICAgICBwQ2xvbmUtPkNvbXBvc2l0ZUJpdG1hcCgwLCAwLCBwQ2xvbmUtPkdldFdpZHRoKCksIHBDbG9uZS0+R2V0SGVpZ2h0KCksIHBGb3JlQml0bWFwLCByZWN0LmxlZnQsIHJlY3QudG9wKTsKKyAgICAgICAgICAgICAgICBsZWZ0ID0gbGVmdCA+PSAwID8gMCA6IGxlZnQ7CisgICAgICAgICAgICAgICAgdG9wID0gdG9wID49IDAgPyAwIDogdG9wOworICAgICAgICAgICAgICAgIGlmICghcERJQml0bWFwLT5Jc0FscGhhTWFzaygpKQorICAgICAgICAgICAgICAgICAgICBwQ2xvbmUtPkNvbXBvc2l0ZUJpdG1hcCgwLCAwLCBwQ2xvbmUtPkdldFdpZHRoKCksIHBDbG9uZS0+R2V0SGVpZ2h0KCksIHBESUJpdG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCwgdG9wLCBibGVuZF9tb2RlKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHBDbG9uZS0+Q29tcG9zaXRlTWFzaygwLCAwLCBwQ2xvbmUtPkdldFdpZHRoKCksIHBDbG9uZS0+R2V0SGVpZ2h0KCksIHBESUJpdG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tfYXJnYiwgbGVmdCwgdG9wLCBibGVuZF9tb2RlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcENsb25lID0gcERJQml0bWFwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fcERldmljZS0+R2V0QmFja0Ryb3AoKSkgeworICAgICAgICAgICAgICAgIG1fcERldmljZS0+U2V0RElCaXRzKHBDbG9uZSwgcmVjdC5sZWZ0LCByZWN0LnRvcCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChwRElCaXRtYXAtPklzQWxwaGFNYXNrKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX3BEZXZpY2UtPlNldERJQml0cyhwRElCaXRtYXAsIHJlY3QubGVmdCwgcmVjdC50b3AsIGJsZW5kX21vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJDbG9uZSkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBwQ2xvbmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgYmFja19sZWZ0LCBiYWNrX3RvcDsKKyAgICBGWF9SRUNUIHJlY3QobGVmdCwgdG9wLCBsZWZ0ICsgcERJQml0bWFwLT5HZXRXaWR0aCgpLCB0b3AgKyBwRElCaXRtYXAtPkdldEhlaWdodCgpKTsKKyAgICBDRlhfRElCaXRtYXAqIHBCYWNrZHJvcCA9IEdldEJhY2tkcm9wKG1fcEN1ck9iaiwgcmVjdCwgYmFja19sZWZ0LCBiYWNrX3RvcCwgYmxlbmRfbW9kZSA+IEZYRElCX0JMRU5EX05PUk1BTCAmJiBiSXNvbGF0ZWQpOworICAgIGlmICghcEJhY2tkcm9wKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFwRElCaXRtYXAtPklzQWxwaGFNYXNrKCkpCisgICAgICAgIHBCYWNrZHJvcC0+Q29tcG9zaXRlQml0bWFwKGxlZnQgLSBiYWNrX2xlZnQsIHRvcCAtIGJhY2tfdG9wLCBwRElCaXRtYXAtPkdldFdpZHRoKCksIHBESUJpdG1hcC0+R2V0SGVpZ2h0KCksIHBESUJpdG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgYmxlbmRfbW9kZSk7CisgICAgZWxzZQorICAgICAgICBwQmFja2Ryb3AtPkNvbXBvc2l0ZU1hc2sobGVmdCAtIGJhY2tfbGVmdCwgdG9wIC0gYmFja190b3AsIHBESUJpdG1hcC0+R2V0V2lkdGgoKSwgcERJQml0bWFwLT5HZXRIZWlnaHQoKSwgcERJQml0bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza19hcmdiLCAwLCAwLCBibGVuZF9tb2RlKTsKKyAgICBDRlhfRElCaXRtYXAqIHBCYWNrZHJvcDEgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOworICAgIHBCYWNrZHJvcDEtPkNyZWF0ZShwQmFja2Ryb3AtPkdldFdpZHRoKCksIHBCYWNrZHJvcC0+R2V0SGVpZ2h0KCksIEZYRElCX1JnYjMyKTsKKyAgICBwQmFja2Ryb3AxLT5DbGVhcigoRlhfRFdPUkQpIC0gMSk7CisgICAgcEJhY2tkcm9wMS0+Q29tcG9zaXRlQml0bWFwKDAsIDAsIHBCYWNrZHJvcC0+R2V0V2lkdGgoKSwgcEJhY2tkcm9wLT5HZXRIZWlnaHQoKSwgcEJhY2tkcm9wLCAwLCAwKTsKKyAgICBkZWxldGUgcEJhY2tkcm9wOworICAgIHBCYWNrZHJvcCA9IHBCYWNrZHJvcDE7CisgICAgbV9wRGV2aWNlLT5TZXRESUJpdHMocEJhY2tkcm9wLCBiYWNrX2xlZnQsIGJhY2tfdG9wKTsKKyAgICBkZWxldGUgcEJhY2tkcm9wOworfQorRlhfQ09MT1JSRUYgQ1BERl9UcmFuc2ZlckZ1bmM6OlRyYW5zbGF0ZUNvbG9yKEZYX0NPTE9SUkVGIHJnYikKK3sKKyAgICByZXR1cm4gRlhTWVNfUkdCKG1fU2FtcGxlc1tGWFNZU19HZXRSVmFsdWUocmdiKV0sIG1fU2FtcGxlc1syNTYgKyBGWFNZU19HZXRHVmFsdWUocmdiKV0sCisgICAgICAgICAgICAgICAgICAgICBtX1NhbXBsZXNbNTEyICsgRlhTWVNfR2V0QlZhbHVlKHJnYildKTsKK30KK0NGWF9ESUJTb3VyY2UqIENQREZfVHJhbnNmZXJGdW5jOjpUcmFuc2xhdGVJbWFnZShjb25zdCBDRlhfRElCU291cmNlKiBwU3JjLCBGWF9CT09MIGJBdXRvRHJvcFNyYykKK3sKKyAgICBDUERGX0RJQlRyYW5zZmVyRnVuYyogcERlc3QgPSBGWF9ORVcgQ1BERl9ESUJUcmFuc2ZlckZ1bmModGhpcyk7CisgICAgcERlc3QtPkxvYWRTcmMocFNyYywgYkF1dG9Ecm9wU3JjKTsKKyAgICByZXR1cm4gcERlc3Q7Cit9CitGWERJQl9Gb3JtYXQgQ1BERl9ESUJUcmFuc2ZlckZ1bmM6OkdldERlc3RGb3JtYXQoKQoreworICAgIGlmIChtX3BTcmMtPklzQWxwaGFNYXNrKCkpIHsKKyAgICAgICAgcmV0dXJuIEZYRElCXzhicHBNYXNrOworICAgIH0KKyNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8KKyAgICByZXR1cm4gKG1fcFNyYy0+SGFzQWxwaGEoKSkgPyBGWERJQl9BcmdiIDogRlhESUJfUmdiMzI7CisjZWxzZQorICAgIHJldHVybiAobV9wU3JjLT5IYXNBbHBoYSgpKSA/IEZYRElCX0FyZ2IgOiBGWERJQl9SZ2I7CisjZW5kaWYKK30KK0NQREZfRElCVHJhbnNmZXJGdW5jOjpDUERGX0RJQlRyYW5zZmVyRnVuYyhjb25zdCBDUERGX1RyYW5zZmVyRnVuYyogcFRyYW5zZmVyRnVuYykKK3sKKyAgICBtX1JhbXBSID0gcFRyYW5zZmVyRnVuYy0+bV9TYW1wbGVzOworICAgIG1fUmFtcEcgPSAmcFRyYW5zZmVyRnVuYy0+bV9TYW1wbGVzWzI1Nl07CisgICAgbV9SYW1wQiA9ICZwVHJhbnNmZXJGdW5jLT5tX1NhbXBsZXNbNTEyXTsKK30KK3ZvaWQgQ1BERl9ESUJUcmFuc2ZlckZ1bmM6OlRyYW5zbGF0ZVNjYW5saW5lKEZYX0xQQllURSBkZXN0X2J1ZiwgRlhfTFBDQllURSBzcmNfYnVmKSBjb25zdAoreworICAgIGludCBpOworICAgIEZYX0JPT0wgYlNraXAgPSBGQUxTRTsKKyAgICBzd2l0Y2ggKG1fcFNyYy0+R2V0Rm9ybWF0KCkpIHsKKyAgICAgICAgY2FzZSBGWERJQl8xYnBwUmdiOiB7CisgICAgICAgICAgICAgICAgaW50IHIwID0gbV9SYW1wUlswXSwgZzAgPSBtX1JhbXBHWzBdLCBiMCA9IG1fUmFtcEJbMF07CisgICAgICAgICAgICAgICAgaW50IHIxID0gbV9SYW1wUlsyNTVdLCBnMSA9IG1fUmFtcEdbMjU1XSwgYjEgPSBtX1JhbXBCWzI1NV07CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1fV2lkdGg7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19idWZbaSAvIDhdICYgKDEgPDwgKDcgLSBpICUgOCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9idWYrKyA9IGIxOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBnMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X2J1ZisrID0gcjE7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9idWYrKyA9IGIwOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBnMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X2J1ZisrID0gcjA7CisgICAgICAgICAgICAgICAgICAgIH0KKyNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8KKyAgICAgICAgICAgICAgICAgICAgZGVzdF9idWYrKzsKKyNlbmRpZgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBGWERJQl8xYnBwTWFzazogeworICAgICAgICAgICAgICAgIGludCBtMCA9IG1fUmFtcFJbMF0sIG0xID0gbV9SYW1wUlsyNTVdOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtX1dpZHRoOyBpICsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfYnVmW2kgLyA4XSAmICgxIDw8ICg3IC0gaSAlIDgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBtMTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X2J1ZisrID0gbTA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgRlhESUJfOGJwcFJnYjogeworICAgICAgICAgICAgICAgIEZYX0FSR0IqIHBQYWwgPSBtX3BTcmMtPkdldFBhbGV0dGUoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9XaWR0aDsgaSArKykgeworICAgICAgICAgICAgICAgICAgICBpZiAocFBhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgRlhfQVJHQiBzcmNfYXJnYiA9IHBQYWxbKnNyY19idWZdOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBtX1JhbXBCW0ZYQVJHQl9SKHNyY19hcmdiKV07CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9idWYrKyA9IG1fUmFtcEdbRlhBUkdCX0coc3JjX2FyZ2IpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X2J1ZisrID0gbV9SYW1wUltGWEFSR0JfQihzcmNfYXJnYildOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgc3JjX2J5dGUgPSAqc3JjX2J1ZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X2J1ZisrID0gbV9SYW1wQltzcmNfYnl0ZV07CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9idWYrKyA9IG1fUmFtcEdbc3JjX2J5dGVdOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBtX1JhbXBSW3NyY19ieXRlXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzcmNfYnVmICsrOworI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXworICAgICAgICAgICAgICAgICAgICBkZXN0X2J1ZisrOworI2VuZGlmCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIEZYRElCXzhicHBNYXNrOgorICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1fV2lkdGg7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAqZGVzdF9idWYrKyA9IG1fUmFtcFJbKihzcmNfYnVmKyspXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZYRElCX1JnYjoKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtX1dpZHRoOyBpICsrKSB7CisgICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBtX1JhbXBCWyooc3JjX2J1ZisrKV07CisgICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBtX1JhbXBHWyooc3JjX2J1ZisrKV07CisgICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBtX1JhbXBSWyooc3JjX2J1ZisrKV07CisjaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfCisgICAgICAgICAgICAgICAgZGVzdF9idWYrKzsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRlhESUJfUmdiMzI6CisgICAgICAgICAgICBiU2tpcCA9IFRSVUU7CisgICAgICAgIGNhc2UgRlhESUJfQXJnYjoKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtX1dpZHRoOyBpICsrKSB7CisgICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBtX1JhbXBCWyooc3JjX2J1ZisrKV07CisgICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBtX1JhbXBHWyooc3JjX2J1ZisrKV07CisgICAgICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBtX1JhbXBSWyooc3JjX2J1ZisrKV07CisgICAgICAgICAgICAgICAgaWYgKCFiU2tpcCkgeworICAgICAgICAgICAgICAgICAgICAqZGVzdF9idWYrKyA9ICpzcmNfYnVmOworICAgICAgICAgICAgICAgIH0KKyNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9idWYrKzsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICBzcmNfYnVmICsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9Cit2b2lkIENQREZfRElCVHJhbnNmZXJGdW5jOjpUcmFuc2xhdGVEb3duU2FtcGxlcyhGWF9MUEJZVEUgZGVzdF9idWYsIEZYX0xQQ0JZVEUgc3JjX2J1ZiwgaW50IHBpeGVscywgaW50IEJwcCkgY29uc3QKK3sKKyAgICBpZiAoQnBwID09IDgpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaXhlbHM7IGkgKyspIHsKKyAgICAgICAgICAgICpkZXN0X2J1ZisrID0gbV9SYW1wUlsqKHNyY19idWYrKyldOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChCcHAgPT0gMjQpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaXhlbHM7IGkgKyspIHsKKyAgICAgICAgICAgICpkZXN0X2J1ZisrID0gbV9SYW1wQlsqKHNyY19idWYrKyldOworICAgICAgICAgICAgKmRlc3RfYnVmKysgPSBtX1JhbXBHWyooc3JjX2J1ZisrKV07CisgICAgICAgICAgICAqZGVzdF9idWYrKyA9IG1fUmFtcFJbKihzcmNfYnVmKyspXTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisjaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfCisgICAgICAgIGlmICghbV9wU3JjLT5IYXNBbHBoYSgpKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBpeGVsczsgaSArKykgeworICAgICAgICAgICAgICAgICpkZXN0X2J1ZisrID0gbV9SYW1wQlsqKHNyY19idWYrKyldOworICAgICAgICAgICAgICAgICpkZXN0X2J1ZisrID0gbV9SYW1wR1sqKHNyY19idWYrKyldOworICAgICAgICAgICAgICAgICpkZXN0X2J1ZisrID0gbV9SYW1wUlsqKHNyY19idWYrKyldOworICAgICAgICAgICAgICAgIGRlc3RfYnVmKys7CisgICAgICAgICAgICAgICAgc3JjX2J1ZisrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaXhlbHM7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAqZGVzdF9idWYrKyA9IG1fUmFtcEJbKihzcmNfYnVmKyspXTsKKyAgICAgICAgICAgICAgICAqZGVzdF9idWYrKyA9IG1fUmFtcEdbKihzcmNfYnVmKyspXTsKKyAgICAgICAgICAgICAgICAqZGVzdF9idWYrKyA9IG1fUmFtcFJbKihzcmNfYnVmKyspXTsKKyAgICAgICAgICAgICAgICAqZGVzdF9idWYrKyA9ICooc3JjX2J1ZisrKTsKKyAgICAgICAgICAgIH0KKyAgICB9Cit9CitzdGF0aWMgRlhfQk9PTCBfSXNTdXBwb3J0ZWQoQ1BERl9Db2xvclNwYWNlKiBwQ1MpCit7CisgICAgaWYgKHBDUy0+R2V0RmFtaWx5KCkgPT0gUERGQ1NfREVWSUNFUkdCIHx8IHBDUy0+R2V0RmFtaWx5KCkgPT0gUERGQ1NfREVWSUNFR1JBWSB8fAorICAgICAgICAgICAgcENTLT5HZXRGYW1pbHkoKSA9PSBQREZDU19ERVZJQ0VDTVlLIHx8IHBDUy0+R2V0RmFtaWx5KCkgPT0gUERGQ1NfQ0FMR1JBWSB8fAorICAgICAgICAgICAgcENTLT5HZXRGYW1pbHkoKSA9PSBQREZDU19DQUxSR0IpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGlmIChwQ1MtPkdldEZhbWlseSgpID09IFBERkNTX0lOREVYRUQgJiYgX0lzU3VwcG9ydGVkKHBDUy0+R2V0QmFzZUNTKCkpKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitDUERGX0ltYWdlUmVuZGVyZXI6OkNQREZfSW1hZ2VSZW5kZXJlcigpCit7CisgICAgbV9wUmVuZGVyU3RhdHVzID0gTlVMTDsKKyAgICBtX3BJbWFnZU9iamVjdCA9IE5VTEw7CisgICAgbV9SZXN1bHQgPSBUUlVFOworICAgIG1fU3RhdHVzID0gMDsKKyAgICBtX3BRdWlja1N0cmV0Y2hlciA9IE5VTEw7CisgICAgbV9wVHJhbnNmb3JtZXIgPSBOVUxMOworICAgIG1fRGV2aWNlSGFuZGxlID0gTlVMTDsKKyAgICBtX0xvYWRIYW5kbGUgPSBOVUxMOworICAgIG1fcENsb25lID0gTlVMTDsKKyAgICBtX2JTdGRDUyA9IEZBTFNFOworICAgIG1fYlBhdHRlcm5Db2xvciA9IEZBTFNFOworICAgIG1fQmxlbmRUeXBlID0gRlhESUJfQkxFTkRfTk9STUFMOworICAgIG1fcFBhdHRlcm4gPSBOVUxMOworICAgIG1fcE9iajJEZXZpY2UgPSBOVUxMOworfQorQ1BERl9JbWFnZVJlbmRlcmVyOjp+Q1BERl9JbWFnZVJlbmRlcmVyKCkKK3sKKyAgICBpZiAobV9wUXVpY2tTdHJldGNoZXIpIHsKKyAgICAgICAgZGVsZXRlIG1fcFF1aWNrU3RyZXRjaGVyOworICAgIH0KKyAgICBpZiAobV9wVHJhbnNmb3JtZXIpIHsKKyAgICAgICAgZGVsZXRlIG1fcFRyYW5zZm9ybWVyOworICAgIH0KKyAgICBpZiAobV9EZXZpY2VIYW5kbGUpIHsKKyAgICAgICAgbV9wUmVuZGVyU3RhdHVzLT5tX3BEZXZpY2UtPkNhbmNlbERJQml0cyhtX0RldmljZUhhbmRsZSk7CisgICAgfQorICAgIGlmIChtX0xvYWRIYW5kbGUpIHsKKyAgICAgICAgZGVsZXRlIChDUERGX1Byb2dyZXNzaXZlSW1hZ2VMb2FkZXJIYW5kbGUqKW1fTG9hZEhhbmRsZTsKKyAgICB9CisgICAgaWYgKG1fcENsb25lKSB7CisgICAgICAgIGRlbGV0ZSBtX3BDbG9uZTsKKyAgICB9Cit9CitGWF9CT09MIENQREZfSW1hZ2VSZW5kZXJlcjo6U3RhcnRMb2FkRElCU291cmNlKCkKK3sKKyAgICBDRlhfRmxvYXRSZWN0IGltYWdlX3JlY3RfZiA9IG1fSW1hZ2VNYXRyaXguR2V0VW5pdFJlY3QoKTsKKyAgICBGWF9SRUNUIGltYWdlX3JlY3QgPSBpbWFnZV9yZWN0X2YuR2V0T3V0dGVyUmVjdCgpOworICAgIGludCBkZXN0X3dpZHRoID0gaW1hZ2VfcmVjdC5XaWR0aCgpOworICAgIGludCBkZXN0X2hlaWdodCA9IGltYWdlX3JlY3QuSGVpZ2h0KCk7CisgICAgaWYgKG1fSW1hZ2VNYXRyaXguYSA8IDApIHsKKyAgICAgICAgZGVzdF93aWR0aCA9IC1kZXN0X3dpZHRoOworICAgIH0KKyAgICBpZiAobV9JbWFnZU1hdHJpeC5kID4gMCkgeworICAgICAgICBkZXN0X2hlaWdodCA9IC1kZXN0X2hlaWdodDsKKyAgICB9CisgICAgaWYgKG1fTG9hZGVyLlN0YXJ0TG9hZEltYWdlKG1fcEltYWdlT2JqZWN0LCBtX3BSZW5kZXJTdGF0dXMtPm1fcENvbnRleHQtPm1fcFBhZ2VDYWNoZSwgbV9Mb2FkSGFuZGxlLCBtX2JTdGRDUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wUmVuZGVyU3RhdHVzLT5tX0dyb3VwRmFtaWx5LCBtX3BSZW5kZXJTdGF0dXMtPm1fYkxvYWRNYXNrLCBtX3BSZW5kZXJTdGF0dXMsIGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0KSkgeworICAgICAgICBpZiAobV9Mb2FkSGFuZGxlICE9IE5VTEwpIHsKKyAgICAgICAgICAgIG1fU3RhdHVzID0gNDsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorRlhfQk9PTCBDUERGX0ltYWdlUmVuZGVyZXI6OlN0YXJ0UmVuZGVyRElCU291cmNlKCkKK3sKKyAgICBpZiAobV9Mb2FkZXIubV9wQml0bWFwID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBtX0JpdG1hcEFscGhhID0gMjU1OworICAgIGNvbnN0IENQREZfR2VuZXJhbFN0YXRlRGF0YSogcEdlbmVyYWxTdGF0ZSA9IG1fcEltYWdlT2JqZWN0LT5tX0dlbmVyYWxTdGF0ZTsKKyAgICBpZiAocEdlbmVyYWxTdGF0ZSkgeworICAgICAgICBtX0JpdG1hcEFscGhhID0gRlhTWVNfcm91bmQocEdlbmVyYWxTdGF0ZS0+bV9GaWxsQWxwaGEgKiAyNTUpOworICAgIH0KKyAgICBtX3BESUJTb3VyY2UgPSBtX0xvYWRlci5tX3BCaXRtYXA7CisgICAgaWYgKG1fcFJlbmRlclN0YXR1cy0+bV9PcHRpb25zLm1fQ29sb3JNb2RlID09IFJFTkRFUl9DT0xPUl9BTFBIQSAmJiBtX0xvYWRlci5tX3BNYXNrID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIFN0YXJ0Qml0bWFwQWxwaGEoKTsKKyAgICB9CisjaWZuZGVmIF9GUERGQVBJX01JTklfCisgICAgaWYgKHBHZW5lcmFsU3RhdGUgJiYgcEdlbmVyYWxTdGF0ZS0+bV9wVFIpIHsKKyAgICAgICAgaWYgKCFwR2VuZXJhbFN0YXRlLT5tX3BUcmFuc2ZlckZ1bmMpIHsKKyAgICAgICAgICAgICgoQ1BERl9HZW5lcmFsU3RhdGVEYXRhKilwR2VuZXJhbFN0YXRlKS0+bV9wVHJhbnNmZXJGdW5jID0gbV9wUmVuZGVyU3RhdHVzLT5HZXRUcmFuc2ZlckZ1bmMocEdlbmVyYWxTdGF0ZS0+bV9wVFIpOworICAgICAgICB9CisgICAgICAgIGlmIChwR2VuZXJhbFN0YXRlLT5tX3BUcmFuc2ZlckZ1bmMgJiYgIXBHZW5lcmFsU3RhdGUtPm1fcFRyYW5zZmVyRnVuYy0+bV9iSWRlbnRpdHkpIHsKKyAgICAgICAgICAgIG1fcERJQlNvdXJjZSA9IG1fTG9hZGVyLm1fcEJpdG1hcCA9IHBHZW5lcmFsU3RhdGUtPm1fcFRyYW5zZmVyRnVuYy0+VHJhbnNsYXRlSW1hZ2UobV9Mb2FkZXIubV9wQml0bWFwLCAhbV9Mb2FkZXIubV9iQ2FjaGVkKTsKKyAgICAgICAgICAgIGlmIChtX0xvYWRlci5tX2JDYWNoZWQgJiYgbV9Mb2FkZXIubV9wTWFzaykgeworICAgICAgICAgICAgICAgIG1fTG9hZGVyLm1fcE1hc2sgPSBtX0xvYWRlci5tX3BNYXNrLT5DbG9uZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9Mb2FkZXIubV9iQ2FjaGVkID0gRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAgICBtX0ZpbGxBcmdiID0gMDsKKyAgICBtX2JQYXR0ZXJuQ29sb3IgPSBGQUxTRTsKKyAgICBtX3BQYXR0ZXJuID0gTlVMTDsKKyAgICBpZiAobV9wRElCU291cmNlLT5Jc0FscGhhTWFzaygpKSB7CisgICAgICAgIENQREZfQ29sb3IqIHBDb2xvciA9IG1fcEltYWdlT2JqZWN0LT5tX0NvbG9yU3RhdGUuR2V0RmlsbENvbG9yKCk7CisgICAgICAgIGlmIChwQ29sb3IgJiYgcENvbG9yLT5Jc1BhdHRlcm4oKSkgeworICAgICAgICAgICAgbV9wUGF0dGVybiA9IHBDb2xvci0+R2V0UGF0dGVybigpOworICAgICAgICAgICAgaWYgKG1fcFBhdHRlcm4gIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIG1fYlBhdHRlcm5Db2xvciA9IFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9GaWxsQXJnYiA9IG1fcFJlbmRlclN0YXR1cy0+R2V0RmlsbEFyZ2IobV9wSW1hZ2VPYmplY3QpOworICAgIH0gZWxzZSBpZiAobV9wUmVuZGVyU3RhdHVzLT5tX09wdGlvbnMubV9Db2xvck1vZGUgPT0gUkVOREVSX0NPTE9SX0dSQVkpIHsKKyAgICAgICAgbV9wQ2xvbmUgPSBtX3BESUJTb3VyY2UtPkNsb25lKCk7CisgICAgICAgIG1fcENsb25lLT5Db252ZXJ0Q29sb3JTY2FsZShtX3BSZW5kZXJTdGF0dXMtPm1fT3B0aW9ucy5tX0JhY2tDb2xvciwgbV9wUmVuZGVyU3RhdHVzLT5tX09wdGlvbnMubV9Gb3JlQ29sb3IpOworICAgICAgICBtX3BESUJTb3VyY2UgPSBtX3BDbG9uZTsKKyAgICB9CisgICAgbV9GbGFncyA9IDA7CisjaWYgIWRlZmluZWQoX0ZQREZBUElfTUlOSV8pCisgICAgaWYgKG1fcFJlbmRlclN0YXR1cy0+bV9PcHRpb25zLm1fRmxhZ3MgJiBSRU5ERVJfRk9SQ0VfRE9XTlNBTVBMRSkgeworICAgICAgICBtX0ZsYWdzIHw9IFJFTkRFUl9GT1JDRV9ET1dOU0FNUExFOworICAgIH0gZWxzZSBpZiAobV9wUmVuZGVyU3RhdHVzLT5tX09wdGlvbnMubV9GbGFncyAmIFJFTkRFUl9GT1JDRV9IQUxGVE9ORSkgeworICAgICAgICBtX0ZsYWdzIHw9IFJFTkRFUl9GT1JDRV9IQUxGVE9ORTsKKyAgICB9CisjZWxzZQorICAgIGlmICghKG1fcFJlbmRlclN0YXR1cy0+bV9PcHRpb25zLm1fRmxhZ3MgJiBSRU5ERVJfRk9SQ0VfSEFMRlRPTkUpKSB7CisgICAgICAgIGlmIChtX3BSZW5kZXJTdGF0dXMtPm1fSGFsZnRvbmVMaW1pdCkgeworICAgICAgICAgICAgQ0ZYX0Zsb2F0UmVjdCBpbWFnZV9yZWN0X2YgPSBtX0ltYWdlTWF0cml4LkdldFVuaXRSZWN0KCk7CisgICAgICAgICAgICBGWF9SRUNUIGltYWdlX3JlY3QgPSBpbWFnZV9yZWN0X2YuR2V0T3V0dGVyUmVjdCgpOworICAgICAgICAgICAgRlhfUkVDVCBpbWFnZV9jbGlwID0gaW1hZ2VfcmVjdDsKKyAgICAgICAgICAgIGltYWdlX3JlY3QuSW50ZXJzZWN0KG1fcFJlbmRlclN0YXR1cy0+bV9wRGV2aWNlLT5HZXRDbGlwQm94KCkpOworICAgICAgICAgICAgaWYgKGltYWdlX3JlY3QuV2lkdGgoKSAmJiBpbWFnZV9yZWN0LkhlaWdodCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKChpbWFnZV9jbGlwLldpZHRoKCkgKiBtX3BESUJTb3VyY2UtPkdldFdpZHRoKCkgLyBpbWFnZV9yZWN0LldpZHRoKCkpICoKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbWFnZV9jbGlwLkhlaWdodCgpICogbV9wRElCU291cmNlLT5HZXRIZWlnaHQoKSAvIGltYWdlX3JlY3QuSGVpZ2h0KCkpID4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcFJlbmRlclN0YXR1cy0+bV9IYWxmdG9uZUxpbWl0KSB7CisgICAgICAgICAgICAgICAgICAgIG1fRmxhZ3MgfD0gUkVOREVSX0ZPUkNFX0RPV05TQU1QTEU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9GbGFncyB8PSBSRU5ERVJfRk9SQ0VfRE9XTlNBTVBMRTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorI2lmbmRlZiBfRlBERkFQSV9NSU5JXworICAgIGlmIChtX3BSZW5kZXJTdGF0dXMtPm1fcERldmljZS0+R2V0RGV2aWNlQ2xhc3MoKSAhPSBGWERDX0RJU1BMQVkpIHsKKyAgICAgICAgQ1BERl9PYmplY3QqIHBGaWx0ZXJzID0gbV9wSW1hZ2VPYmplY3QtPm1fcEltYWdlLT5HZXRTdHJlYW0oKS0+R2V0RGljdCgpLT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkZpbHRlciIpKTsKKyAgICAgICAgaWYgKHBGaWx0ZXJzKSB7CisgICAgICAgICAgICBpZiAocEZpbHRlcnMtPkdldFR5cGUoKSA9PSBQREZPQkpfTkFNRSkgeworICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nQyBic0RlY29kZVR5cGUgPSBwRmlsdGVycy0+R2V0Q29uc3RTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAoYnNEZWNvZGVUeXBlID09IEZYX0JTVFJDKCJEQ1REZWNvZGUiKSB8fCBic0RlY29kZVR5cGUgPT0gRlhfQlNUUkMoIkpQWERlY29kZSIpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fRmxhZ3MgfD0gRlhSRU5ERVJfSU1BR0VfTE9TU1k7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChwRmlsdGVycy0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgeworICAgICAgICAgICAgICAgIENQREZfQXJyYXkqIHBBcnJheSA9IChDUERGX0FycmF5KilwRmlsdGVyczsKKyAgICAgICAgICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcEFycmF5LT5HZXRDb3VudCgpOyBpICsrKSB7CisgICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nQyBic0RlY29kZVR5cGUgPSBwQXJyYXktPkdldENvbnN0U3RyaW5nKGkpOworICAgICAgICAgICAgICAgICAgICBpZiAoYnNEZWNvZGVUeXBlID09IEZYX0JTVFJDKCJEQ1REZWNvZGUiKSB8fCBic0RlY29kZVR5cGUgPT0gRlhfQlNUUkMoIkpQWERlY29kZSIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX0ZsYWdzIHw9IEZYUkVOREVSX0lNQUdFX0xPU1NZOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1fcFJlbmRlclN0YXR1cy0+bV9PcHRpb25zLm1fRmxhZ3MgJiBSRU5ERVJfTk9JTUFHRVNNT09USCkgeworICAgICAgICBtX0ZsYWdzIHw9IEZYRElCX05PU01PT1RIOworICAgIH0gZWxzZSBpZiAobV9wSW1hZ2VPYmplY3QtPm1fcEltYWdlLT5Jc0ludGVycG9sKCkpIHsKKyAgICAgICAgbV9GbGFncyB8PSBGWERJQl9JTlRFUlBPTDsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAobV9Mb2FkZXIubV9wTWFzaykgeworICAgICAgICByZXR1cm4gRHJhd01hc2tlZEltYWdlKCk7CisgICAgfQorICAgIGlmIChtX2JQYXR0ZXJuQ29sb3IpIHsKKyAgICAgICAgcmV0dXJuIERyYXdQYXR0ZXJuSW1hZ2UobV9wT2JqMkRldmljZSk7CisgICAgfQorI2lmICFkZWZpbmVkKF9GUERGQVBJX01JTklfKSB8fCBkZWZpbmVkKF9GWENPUkVfRkVBVFVSRV9BTExfKQorICAgIGlmIChtX0JpdG1hcEFscGhhID09IDI1NSAmJiBwR2VuZXJhbFN0YXRlICYmIHBHZW5lcmFsU3RhdGUtPm1fRmlsbE9QICYmCisgICAgICAgICAgICBwR2VuZXJhbFN0YXRlLT5tX09QTW9kZSA9PSAwICYmIHBHZW5lcmFsU3RhdGUtPm1fQmxlbmRUeXBlID09IEZYRElCX0JMRU5EX05PUk1BTCAmJiBwR2VuZXJhbFN0YXRlLT5tX1N0cm9rZUFscGhhID09IDEgJiYgcEdlbmVyYWxTdGF0ZS0+bV9GaWxsQWxwaGEgPT0gMSkgeworICAgICAgICBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQgPSBOVUxMOworICAgICAgICBDUERGX1BhZ2UqIHBQYWdlID0gTlVMTDsKKyAgICAgICAgaWYgKG1fcFJlbmRlclN0YXR1cy0+bV9wQ29udGV4dC0+bV9wUGFnZUNhY2hlKSB7CisgICAgICAgICAgICBwUGFnZSA9IG1fcFJlbmRlclN0YXR1cy0+bV9wQ29udGV4dC0+bV9wUGFnZUNhY2hlLT5HZXRQYWdlKCk7CisgICAgICAgICAgICBwRG9jdW1lbnQgPSBwUGFnZS0+bV9wRG9jdW1lbnQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwRG9jdW1lbnQgPSBtX3BJbWFnZU9iamVjdC0+bV9wSW1hZ2UtPkdldERvY3VtZW50KCk7CisgICAgICAgIH0KKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZVJlc291cmNlcyA9IHBQYWdlID8gcFBhZ2UtPm1fcFBhZ2VSZXNvdXJjZXMgOiBOVUxMOworICAgICAgICBDUERGX09iamVjdCogcENTT2JqID0gbV9wSW1hZ2VPYmplY3QtPm1fcEltYWdlLT5HZXRTdHJlYW0oKS0+R2V0RGljdCgpLT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkNvbG9yU3BhY2UiKSk7CisgICAgICAgIENQREZfQ29sb3JTcGFjZSogcENvbG9yU3BhY2UgPSBwRG9jdW1lbnQtPkxvYWRDb2xvclNwYWNlKHBDU09iaiwgcFBhZ2VSZXNvdXJjZXMpOworICAgICAgICBpZiAocENvbG9yU3BhY2UpIHsKKyAgICAgICAgICAgIGludCBmb3JtYXQgPSBwQ29sb3JTcGFjZS0+R2V0RmFtaWx5KCk7CisgICAgICAgICAgICBpZiAoZm9ybWF0ID09IFBERkNTX0RFVklDRUNNWUsgfHwgZm9ybWF0ID09IFBERkNTX1NFUEFSQVRJT04gfHwgZm9ybWF0ID09IFBERkNTX0RFVklDRU4pIHsKKyAgICAgICAgICAgICAgICBtX0JsZW5kVHlwZSA9IEZYRElCX0JMRU5EX0RBUktFTjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBEb2N1bWVudC0+R2V0UGFnZURhdGEoKS0+UmVsZWFzZUNvbG9yU3BhY2UocENTT2JqKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBTdGFydERJQlNvdXJjZSgpOworfQorRlhfQk9PTCBDUERGX0ltYWdlUmVuZGVyZXI6OlN0YXJ0KENQREZfUmVuZGVyU3RhdHVzKiBwU3RhdHVzLCBjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlLCBGWF9CT09MIGJTdGRDUywgaW50IGJsZW5kVHlwZSkKK3sKKyAgICBtX3BSZW5kZXJTdGF0dXMgPSBwU3RhdHVzOworICAgIG1fYlN0ZENTID0gYlN0ZENTOworICAgIG1fcEltYWdlT2JqZWN0ID0gKENQREZfSW1hZ2VPYmplY3QqKXBPYmo7CisgICAgbV9CbGVuZFR5cGUgPSBibGVuZFR5cGU7CisgICAgbV9wT2JqMkRldmljZSA9IHBPYmoyRGV2aWNlOworI2lmbmRlZiBfRlBERkFQSV9NSU5JXworICAgIENQREZfRGljdGlvbmFyeSogcE9DID0gbV9wSW1hZ2VPYmplY3QtPm1fcEltYWdlLT5HZXRPQygpOworICAgIGlmIChwT0MgJiYgbV9wUmVuZGVyU3RhdHVzLT5tX09wdGlvbnMubV9wT0NDb250ZXh0ICYmICFtX3BSZW5kZXJTdGF0dXMtPm1fT3B0aW9ucy5tX3BPQ0NvbnRleHQtPkNoZWNrT0NHVmlzaWJsZShwT0MpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisjZW5kaWYKKyAgICBtX0ltYWdlTWF0cml4ID0gbV9wSW1hZ2VPYmplY3QtPm1fTWF0cml4OworICAgIG1fSW1hZ2VNYXRyaXguQ29uY2F0KCpwT2JqMkRldmljZSk7CisgICAgaWYgKFN0YXJ0TG9hZERJQlNvdXJjZSgpKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gU3RhcnRSZW5kZXJESUJTb3VyY2UoKTsKK30KK0ZYX0JPT0wgQ1BERl9JbWFnZVJlbmRlcmVyOjpTdGFydChDUERGX1JlbmRlclN0YXR1cyogcFN0YXR1cywgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcERJQlNvdXJjZSwgRlhfQVJHQiBiaXRtYXBfYXJnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYml0bWFwX2FscGhhLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwSW1hZ2UyRGV2aWNlLCBGWF9EV09SRCBmbGFncywgRlhfQk9PTCBiU3RkQ1MsIGludCBibGVuZFR5cGUpCit7CisgICAgbV9wUmVuZGVyU3RhdHVzID0gcFN0YXR1czsKKyAgICBtX3BESUJTb3VyY2UgPSBwRElCU291cmNlOworICAgIG1fRmlsbEFyZ2IgPSBiaXRtYXBfYXJnYjsKKyAgICBtX0JpdG1hcEFscGhhID0gYml0bWFwX2FscGhhOworICAgIG1fSW1hZ2VNYXRyaXggPSAqcEltYWdlMkRldmljZTsKKyAgICBtX0ZsYWdzID0gZmxhZ3M7CisgICAgbV9iU3RkQ1MgPSBiU3RkQ1M7CisgICAgbV9CbGVuZFR5cGUgPSBibGVuZFR5cGU7CisgICAgcmV0dXJuIFN0YXJ0RElCU291cmNlKCk7Cit9CitGWF9CT09MCUNQREZfSW1hZ2VSZW5kZXJlcjo6RHJhd1BhdHRlcm5JbWFnZShjb25zdCBDRlhfTWF0cml4KiBwT2JqMkRldmljZSkKK3sKKyAgICBpZiAobV9wUmVuZGVyU3RhdHVzLT5tX2JQcmludCAmJiAhKG1fcFJlbmRlclN0YXR1cy0+bV9wRGV2aWNlLT5HZXRSZW5kZXJDYXBzKCkgJiBGWFJDX0JMRU5EX01PREUpKSB7CisgICAgICAgIG1fUmVzdWx0ID0gRkFMU0U7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgRlhfUkVDVCByZWN0ID0gbV9JbWFnZU1hdHJpeC5HZXRVbml0UmVjdCgpLkdldE91dHRlclJlY3QoKTsKKyAgICByZWN0LkludGVyc2VjdChtX3BSZW5kZXJTdGF0dXMtPm1fcERldmljZS0+R2V0Q2xpcEJveCgpKTsKKyAgICBpZiAocmVjdC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDRlhfQWZmaW5lTWF0cml4IG5ld19tYXRyaXggPSBtX0ltYWdlTWF0cml4OworICAgIG5ld19tYXRyaXguVHJhbnNsYXRlSSgtcmVjdC5sZWZ0LCAtcmVjdC50b3ApOworICAgIGludCB3aWR0aCA9IHJlY3QuV2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gcmVjdC5IZWlnaHQoKTsKKyAgICBDRlhfRnhnZURldmljZSBiaXRtYXBfZGV2aWNlMTsKKyAgICBpZiAoIWJpdG1hcF9kZXZpY2UxLkNyZWF0ZShyZWN0LldpZHRoKCksIHJlY3QuSGVpZ2h0KCksIEZYRElCX1JnYjMyKSkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgYml0bWFwX2RldmljZTEuR2V0Qml0bWFwKCktPkNsZWFyKDB4ZmZmZmZmKTsKKyAgICB7CisgICAgICAgIENQREZfUmVuZGVyU3RhdHVzIGJpdG1hcF9yZW5kZXI7CisgICAgICAgIGJpdG1hcF9yZW5kZXIuSW5pdGlhbGl6ZShtX3BSZW5kZXJTdGF0dXMtPm1fTGV2ZWwgKyAxLCBtX3BSZW5kZXJTdGF0dXMtPm1fcENvbnRleHQsICZiaXRtYXBfZGV2aWNlMSwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsICZtX3BSZW5kZXJTdGF0dXMtPm1fT3B0aW9ucywgMCwgbV9wUmVuZGVyU3RhdHVzLT5tX2JEcm9wT2JqZWN0cywgTlVMTCwgVFJVRSk7CisgICAgICAgIENGWF9NYXRyaXggcGF0dGVybkRldmljZSA9ICpwT2JqMkRldmljZTsKKyAgICAgICAgcGF0dGVybkRldmljZS5UcmFuc2xhdGUoKEZYX0ZMT0FUKSAtIHJlY3QubGVmdCwgKEZYX0ZMT0FUKSAtIHJlY3QudG9wKTsKKyAgICAgICAgaWYobV9wUGF0dGVybi0+bV9QYXR0ZXJuVHlwZSA9PSBQQVRURVJOX1RJTElORykgeworICAgICAgICAgICAgYml0bWFwX3JlbmRlci5EcmF3VGlsaW5nUGF0dGVybigoQ1BERl9UaWxpbmdQYXR0ZXJuKiltX3BQYXR0ZXJuLCBtX3BJbWFnZU9iamVjdCwgJnBhdHRlcm5EZXZpY2UsIEZBTFNFKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJpdG1hcF9yZW5kZXIuRHJhd1NoYWRpbmdQYXR0ZXJuKChDUERGX1NoYWRpbmdQYXR0ZXJuKiltX3BQYXR0ZXJuLCBtX3BJbWFnZU9iamVjdCwgJnBhdHRlcm5EZXZpY2UsIEZBTFNFKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB7CisgICAgICAgIENGWF9GeGdlRGV2aWNlIGJpdG1hcF9kZXZpY2UyOworICAgICAgICBpZiAoIWJpdG1hcF9kZXZpY2UyLkNyZWF0ZShyZWN0LldpZHRoKCksIHJlY3QuSGVpZ2h0KCksIEZYRElCXzhicHBSZ2IpKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBiaXRtYXBfZGV2aWNlMi5HZXRCaXRtYXAoKS0+Q2xlYXIoMCk7CisgICAgICAgIENQREZfUmVuZGVyU3RhdHVzIGJpdG1hcF9yZW5kZXI7CisgICAgICAgIGJpdG1hcF9yZW5kZXIuSW5pdGlhbGl6ZShtX3BSZW5kZXJTdGF0dXMtPm1fTGV2ZWwgKyAxLCBtX3BSZW5kZXJTdGF0dXMtPm1fcENvbnRleHQsICZiaXRtYXBfZGV2aWNlMiwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIDAsIG1fcFJlbmRlclN0YXR1cy0+bV9iRHJvcE9iamVjdHMsIE5VTEwsIFRSVUUpOworICAgICAgICBDUERGX0ltYWdlUmVuZGVyZXIgaW1hZ2VfcmVuZGVyOworICAgICAgICBpZiAoaW1hZ2VfcmVuZGVyLlN0YXJ0KCZiaXRtYXBfcmVuZGVyLCBtX3BESUJTb3VyY2UsIDB4ZmZmZmZmZmYsIDI1NSwgJm5ld19tYXRyaXgsIG1fRmxhZ3MsIFRSVUUpKSB7CisgICAgICAgICAgICBpbWFnZV9yZW5kZXIuQ29udGludWUoTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fTG9hZGVyLm1fTWF0dGVDb2xvciAhPSAweGZmZmZmZmZmKSB7CisgICAgICAgICAgICBpbnQgbWF0dGVfciA9IEZYQVJHQl9SKG1fTG9hZGVyLm1fTWF0dGVDb2xvcik7CisgICAgICAgICAgICBpbnQgbWF0dGVfZyA9IEZYQVJHQl9HKG1fTG9hZGVyLm1fTWF0dGVDb2xvcik7CisgICAgICAgICAgICBpbnQgbWF0dGVfYiA9IEZYQVJHQl9CKG1fTG9hZGVyLm1fTWF0dGVDb2xvcik7CisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSAoRlhfTFBCWVRFKWJpdG1hcF9kZXZpY2UxLkdldEJpdG1hcCgpLT5HZXRTY2FubGluZShyb3cpOworICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgbWFza19zY2FuID0gYml0bWFwX2RldmljZTIuR2V0Qml0bWFwKCktPkdldFNjYW5saW5lKHJvdyk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGEgPSAqbWFza19zY2FuICsrOworICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcmlnID0gKCpkZXN0X3NjYW4gLSBtYXR0ZV9iKSAqIDI1NSAvIGFscGhhICsgbWF0dGVfYjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWcgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcmlnID4gMjU1KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZyA9IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IG9yaWc7CisgICAgICAgICAgICAgICAgICAgICAgICBvcmlnID0gKCpkZXN0X3NjYW4gLSBtYXR0ZV9nKSAqIDI1NSAvIGFscGhhICsgbWF0dGVfZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWcgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcmlnID4gMjU1KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZyA9IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IG9yaWc7CisgICAgICAgICAgICAgICAgICAgICAgICBvcmlnID0gKCpkZXN0X3NjYW4gLSBtYXR0ZV9yKSAqIDI1NSAvIGFscGhhICsgbWF0dGVfcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWcgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcmlnID4gMjU1KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZyA9IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IG9yaWc7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBiaXRtYXBfZGV2aWNlMi5HZXRCaXRtYXAoKS0+Q29udmVydEZvcm1hdChGWERJQl84YnBwTWFzayk7CisgICAgICAgIGJpdG1hcF9kZXZpY2UxLkdldEJpdG1hcCgpLT5NdWx0aXBseUFscGhhKGJpdG1hcF9kZXZpY2UyLkdldEJpdG1hcCgpKTsKKyAgICAgICAgYml0bWFwX2RldmljZTEuR2V0Qml0bWFwKCktPk11bHRpcGx5QWxwaGEoMjU1KTsKKyAgICB9CisgICAgbV9wUmVuZGVyU3RhdHVzLT5tX3BEZXZpY2UtPlNldERJQml0cyhiaXRtYXBfZGV2aWNlMS5HZXRCaXRtYXAoKSwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgbV9CbGVuZFR5cGUpOworICAgIHJldHVybiBGQUxTRTsKK30KK0ZYX0JPT0wgQ1BERl9JbWFnZVJlbmRlcmVyOjpEcmF3TWFza2VkSW1hZ2UoKQoreworICAgIGlmIChtX3BSZW5kZXJTdGF0dXMtPm1fYlByaW50ICYmICEobV9wUmVuZGVyU3RhdHVzLT5tX3BEZXZpY2UtPkdldFJlbmRlckNhcHMoKSAmIEZYUkNfQkxFTkRfTU9ERSkpIHsKKyAgICAgICAgbV9SZXN1bHQgPSBGQUxTRTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWF9SRUNUIHJlY3QgPSBtX0ltYWdlTWF0cml4LkdldFVuaXRSZWN0KCkuR2V0T3V0dGVyUmVjdCgpOworICAgIHJlY3QuSW50ZXJzZWN0KG1fcFJlbmRlclN0YXR1cy0+bV9wRGV2aWNlLT5HZXRDbGlwQm94KCkpOworICAgIGlmIChyZWN0LklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIENGWF9BZmZpbmVNYXRyaXggbmV3X21hdHJpeCA9IG1fSW1hZ2VNYXRyaXg7CisgICAgbmV3X21hdHJpeC5UcmFuc2xhdGVJKC1yZWN0LmxlZnQsIC1yZWN0LnRvcCk7CisgICAgaW50IHdpZHRoID0gcmVjdC5XaWR0aCgpOworICAgIGludCBoZWlnaHQgPSByZWN0LkhlaWdodCgpOworICAgIENGWF9GeGdlRGV2aWNlIGJpdG1hcF9kZXZpY2UxOworICAgIGlmICghYml0bWFwX2RldmljZTEuQ3JlYXRlKHdpZHRoLCBoZWlnaHQsIEZYRElCX1JnYjMyKSkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgYml0bWFwX2RldmljZTEuR2V0Qml0bWFwKCktPkNsZWFyKDB4ZmZmZmZmKTsKKyAgICB7CisgICAgICAgIENQREZfUmVuZGVyU3RhdHVzIGJpdG1hcF9yZW5kZXI7CisgICAgICAgIGJpdG1hcF9yZW5kZXIuSW5pdGlhbGl6ZShtX3BSZW5kZXJTdGF0dXMtPm1fTGV2ZWwgKyAxLCBtX3BSZW5kZXJTdGF0dXMtPm1fcENvbnRleHQsICZiaXRtYXBfZGV2aWNlMSwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIDAsIG1fcFJlbmRlclN0YXR1cy0+bV9iRHJvcE9iamVjdHMsIE5VTEwsIFRSVUUpOworICAgICAgICBDUERGX0ltYWdlUmVuZGVyZXIgaW1hZ2VfcmVuZGVyOworICAgICAgICBpZiAoaW1hZ2VfcmVuZGVyLlN0YXJ0KCZiaXRtYXBfcmVuZGVyLCBtX3BESUJTb3VyY2UsIDAsIDI1NSwgJm5ld19tYXRyaXgsIG1fRmxhZ3MsIFRSVUUpKSB7CisgICAgICAgICAgICBpbWFnZV9yZW5kZXIuQ29udGludWUoTlVMTCk7CisgICAgICAgIH0KKyAgICB9CisgICAgeworICAgICAgICBDRlhfRnhnZURldmljZSBiaXRtYXBfZGV2aWNlMjsKKyAgICAgICAgaWYgKCFiaXRtYXBfZGV2aWNlMi5DcmVhdGUod2lkdGgsIGhlaWdodCwgRlhESUJfOGJwcFJnYikpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIGJpdG1hcF9kZXZpY2UyLkdldEJpdG1hcCgpLT5DbGVhcigwKTsKKyAgICAgICAgQ1BERl9SZW5kZXJTdGF0dXMgYml0bWFwX3JlbmRlcjsKKyAgICAgICAgYml0bWFwX3JlbmRlci5Jbml0aWFsaXplKG1fcFJlbmRlclN0YXR1cy0+bV9MZXZlbCArIDEsIG1fcFJlbmRlclN0YXR1cy0+bV9wQ29udGV4dCwgJmJpdG1hcF9kZXZpY2UyLCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgMCwgbV9wUmVuZGVyU3RhdHVzLT5tX2JEcm9wT2JqZWN0cywgTlVMTCwgVFJVRSk7CisgICAgICAgIENQREZfSW1hZ2VSZW5kZXJlciBpbWFnZV9yZW5kZXI7CisgICAgICAgIGlmIChpbWFnZV9yZW5kZXIuU3RhcnQoJmJpdG1hcF9yZW5kZXIsIG1fTG9hZGVyLm1fcE1hc2ssIDB4ZmZmZmZmZmYsIDI1NSwgJm5ld19tYXRyaXgsIG1fRmxhZ3MsIFRSVUUpKSB7CisgICAgICAgICAgICBpbWFnZV9yZW5kZXIuQ29udGludWUoTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fTG9hZGVyLm1fTWF0dGVDb2xvciAhPSAweGZmZmZmZmZmKSB7CisgICAgICAgICAgICBpbnQgbWF0dGVfciA9IEZYQVJHQl9SKG1fTG9hZGVyLm1fTWF0dGVDb2xvcik7CisgICAgICAgICAgICBpbnQgbWF0dGVfZyA9IEZYQVJHQl9HKG1fTG9hZGVyLm1fTWF0dGVDb2xvcik7CisgICAgICAgICAgICBpbnQgbWF0dGVfYiA9IEZYQVJHQl9CKG1fTG9hZGVyLm1fTWF0dGVDb2xvcik7CisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSAoRlhfTFBCWVRFKWJpdG1hcF9kZXZpY2UxLkdldEJpdG1hcCgpLT5HZXRTY2FubGluZShyb3cpOworICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgbWFza19zY2FuID0gYml0bWFwX2RldmljZTIuR2V0Qml0bWFwKCktPkdldFNjYW5saW5lKHJvdyk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGEgPSAqbWFza19zY2FuICsrOworICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcmlnID0gKCpkZXN0X3NjYW4gLSBtYXR0ZV9iKSAqIDI1NSAvIGFscGhhICsgbWF0dGVfYjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWcgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcmlnID4gMjU1KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZyA9IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IG9yaWc7CisgICAgICAgICAgICAgICAgICAgICAgICBvcmlnID0gKCpkZXN0X3NjYW4gLSBtYXR0ZV9nKSAqIDI1NSAvIGFscGhhICsgbWF0dGVfZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWcgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcmlnID4gMjU1KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZyA9IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IG9yaWc7CisgICAgICAgICAgICAgICAgICAgICAgICBvcmlnID0gKCpkZXN0X3NjYW4gLSBtYXR0ZV9yKSAqIDI1NSAvIGFscGhhICsgbWF0dGVfcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmlnIDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWcgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcmlnID4gMjU1KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZyA9IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IG9yaWc7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBiaXRtYXBfZGV2aWNlMi5HZXRCaXRtYXAoKS0+Q29udmVydEZvcm1hdChGWERJQl84YnBwTWFzayk7CisgICAgICAgIGJpdG1hcF9kZXZpY2UxLkdldEJpdG1hcCgpLT5NdWx0aXBseUFscGhhKGJpdG1hcF9kZXZpY2UyLkdldEJpdG1hcCgpKTsKKyAgICAgICAgaWYgKG1fQml0bWFwQWxwaGEgPCAyNTUpIHsKKyAgICAgICAgICAgIGJpdG1hcF9kZXZpY2UxLkdldEJpdG1hcCgpLT5NdWx0aXBseUFscGhhKG1fQml0bWFwQWxwaGEpOworICAgICAgICB9CisgICAgfQorICAgIG1fcFJlbmRlclN0YXR1cy0+bV9wRGV2aWNlLT5TZXRESUJpdHMoYml0bWFwX2RldmljZTEuR2V0Qml0bWFwKCksIHJlY3QubGVmdCwgcmVjdC50b3AsIG1fQmxlbmRUeXBlKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CitGWF9CT09MIENQREZfSW1hZ2VSZW5kZXJlcjo6U3RhcnRESUJTb3VyY2UoKQoreworI2lmICFkZWZpbmVkKF9GUERGQVBJX01JTklfKQorICAgIGlmICghKG1fRmxhZ3MgJiBSRU5ERVJfRk9SQ0VfRE9XTlNBTVBMRSkgJiYgbV9wRElCU291cmNlLT5HZXRCUFAoKSA+IDEpIHsKKyAgICAgICAgaW50IGltYWdlX3NpemUgPSBtX3BESUJTb3VyY2UtPkdldEJQUCgpIC8gOCAqIG1fcERJQlNvdXJjZS0+R2V0V2lkdGgoKSAqIG1fcERJQlNvdXJjZS0+R2V0SGVpZ2h0KCk7CisgICAgICAgIGlmIChpbWFnZV9zaXplID4gRlBERl9IVUdFX0lNQUdFX1NJWkUgJiYgIShtX0ZsYWdzICYgUkVOREVSX0ZPUkNFX0hBTEZUT05FKSkgeworICAgICAgICAgICAgbV9GbGFncyB8PSBSRU5ERVJfRk9SQ0VfRE9XTlNBTVBMRTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIGlmIChtX3BSZW5kZXJTdGF0dXMtPm1fcERldmljZS0+U3RhcnRESUJpdHMobV9wRElCU291cmNlLCBtX0JpdG1hcEFscGhhLCBtX0ZpbGxBcmdiLAorICAgICAgICAgICAgJm1fSW1hZ2VNYXRyaXgsIG1fRmxhZ3MsIG1fRGV2aWNlSGFuZGxlLCAwLCBOVUxMLCBtX0JsZW5kVHlwZSkpIHsKKyAgICAgICAgaWYgKG1fRGV2aWNlSGFuZGxlICE9IE5VTEwpIHsKKyAgICAgICAgICAgIG1fU3RhdHVzID0gMzsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisjaWYgIWRlZmluZWQoX0ZQREZBUElfTUlOSV8pIHx8IGRlZmluZWQoX0ZYQ09SRV9GRUFUVVJFX0FMTF8pCisgICAgQ0ZYX0Zsb2F0UmVjdCBpbWFnZV9yZWN0X2YgPSBtX0ltYWdlTWF0cml4LkdldFVuaXRSZWN0KCk7CisgICAgRlhfUkVDVCBpbWFnZV9yZWN0ID0gaW1hZ2VfcmVjdF9mLkdldE91dHRlclJlY3QoKTsKKyAgICBpbnQgZGVzdF93aWR0aCA9IGltYWdlX3JlY3QuV2lkdGgoKTsKKyAgICBpbnQgZGVzdF9oZWlnaHQgPSBpbWFnZV9yZWN0LkhlaWdodCgpOworICAgIGlmICgoRlhTWVNfZmFicyhtX0ltYWdlTWF0cml4LmIpID49IDAuNWYgfHwgbV9JbWFnZU1hdHJpeC5hID09IDApIHx8CisgICAgICAgICAgICAoRlhTWVNfZmFicyhtX0ltYWdlTWF0cml4LmMpID49IDAuNWYgfHwgbV9JbWFnZU1hdHJpeC5kID09IDApICkgeworICAgICAgICBpZiAobV9wUmVuZGVyU3RhdHVzLT5tX2JQcmludCAmJiAhKG1fcFJlbmRlclN0YXR1cy0+bV9wRGV2aWNlLT5HZXRSZW5kZXJDYXBzKCkgJiBGWFJDX0JMRU5EX01PREUpKSB7CisgICAgICAgICAgICBtX1Jlc3VsdCA9IEZBTFNFOworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIEZYX1JFQ1QgY2xpcF9ib3ggPSBtX3BSZW5kZXJTdGF0dXMtPm1fcERldmljZS0+R2V0Q2xpcEJveCgpOworICAgICAgICBjbGlwX2JveC5JbnRlcnNlY3QoaW1hZ2VfcmVjdCk7CisgICAgICAgIG1fU3RhdHVzID0gMjsKKyAgICAgICAgbV9wVHJhbnNmb3JtZXIgPSBGWF9ORVcgQ0ZYX0ltYWdlVHJhbnNmb3JtZXI7CisgICAgICAgIG1fcFRyYW5zZm9ybWVyLT5TdGFydChtX3BESUJTb3VyY2UsICZtX0ltYWdlTWF0cml4LCBtX0ZsYWdzLCAmY2xpcF9ib3gpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgaWYgKG1fSW1hZ2VNYXRyaXguYSA8IDApIHsKKyAgICAgICAgZGVzdF93aWR0aCA9IC1kZXN0X3dpZHRoOworICAgIH0KKyAgICBpZiAobV9JbWFnZU1hdHJpeC5kID4gMCkgeworICAgICAgICBkZXN0X2hlaWdodCA9IC1kZXN0X2hlaWdodDsKKyAgICB9CisgICAgaW50IGRlc3RfbGVmdCwgZGVzdF90b3A7CisgICAgZGVzdF9sZWZ0ID0gZGVzdF93aWR0aCA+IDAgPyBpbWFnZV9yZWN0LmxlZnQgOiBpbWFnZV9yZWN0LnJpZ2h0OworICAgIGRlc3RfdG9wID0gZGVzdF9oZWlnaHQgPiAwID8gaW1hZ2VfcmVjdC50b3AgOiBpbWFnZV9yZWN0LmJvdHRvbTsKKyAgICBpZiAobV9wRElCU291cmNlLT5Jc09wYXF1ZUltYWdlKCkgJiYgbV9CaXRtYXBBbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgaWYgKG1fcFJlbmRlclN0YXR1cy0+bV9wRGV2aWNlLT5TdHJldGNoRElCaXRzKG1fcERJQlNvdXJjZSwgZGVzdF9sZWZ0LCBkZXN0X3RvcCwKKyAgICAgICAgICAgICAgICBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgbV9GbGFncywgTlVMTCwgbV9CbGVuZFR5cGUpKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1fcERJQlNvdXJjZS0+SXNBbHBoYU1hc2soKSkgeworICAgICAgICBpZiAobV9CaXRtYXBBbHBoYSAhPSAyNTUpIHsKKyAgICAgICAgICAgIG1fRmlsbEFyZ2IgPSBGWEFSR0JfTVVMX0FMUEhBKG1fRmlsbEFyZ2IsIG1fQml0bWFwQWxwaGEpOworICAgICAgICB9CisgICAgICAgIGlmIChtX3BSZW5kZXJTdGF0dXMtPm1fcERldmljZS0+U3RyZXRjaEJpdE1hc2sobV9wRElCU291cmNlLCBkZXN0X2xlZnQsIGRlc3RfdG9wLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgbV9GaWxsQXJnYiwgbV9GbGFncykpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9wUmVuZGVyU3RhdHVzLT5tX2JQcmludCAmJiAhKG1fcFJlbmRlclN0YXR1cy0+bV9wRGV2aWNlLT5HZXRSZW5kZXJDYXBzKCkgJiBGWFJDX0JMRU5EX01PREUpKSB7CisgICAgICAgIG1fUmVzdWx0ID0gRkFMU0U7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBGWF9SRUNUIGNsaXBfYm94ID0gbV9wUmVuZGVyU3RhdHVzLT5tX3BEZXZpY2UtPkdldENsaXBCb3goKTsKKyAgICBGWF9SRUNUIGRlc3RfcmVjdCA9IGNsaXBfYm94OworICAgIGRlc3RfcmVjdC5JbnRlcnNlY3QoaW1hZ2VfcmVjdCk7CisgICAgRlhfUkVDVCBkZXN0X2NsaXAoZGVzdF9yZWN0LmxlZnQgLSBpbWFnZV9yZWN0LmxlZnQsIGRlc3RfcmVjdC50b3AgLSBpbWFnZV9yZWN0LnRvcCwKKyAgICAgICAgICAgICAgICAgICAgICBkZXN0X3JlY3QucmlnaHQgLSBpbWFnZV9yZWN0LmxlZnQsIGRlc3RfcmVjdC5ib3R0b20gLSBpbWFnZV9yZWN0LnRvcCk7CisgICAgQ0ZYX0RJQml0bWFwKiBwU3RyZXRjaGVkID0gbV9wRElCU291cmNlLT5TdHJldGNoVG8oZGVzdF93aWR0aCwgZGVzdF9oZWlnaHQsIG1fRmxhZ3MsICZkZXN0X2NsaXApOworICAgIGlmIChwU3RyZXRjaGVkKSB7CisgICAgICAgIG1fcFJlbmRlclN0YXR1cy0+Q29tcG9zaXRlRElCaXRtYXAocFN0cmV0Y2hlZCwgZGVzdF9yZWN0LmxlZnQsIGRlc3RfcmVjdC50b3AsIG1fRmlsbEFyZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9CaXRtYXBBbHBoYSwgbV9CbGVuZFR5cGUsIEZBTFNFKTsKKyAgICAgICAgZGVsZXRlIHBTdHJldGNoZWQ7CisgICAgICAgIHBTdHJldGNoZWQgPSBOVUxMOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBGQUxTRTsKK30KK0ZYX0JPT0wgQ1BERl9JbWFnZVJlbmRlcmVyOjpTdGFydEJpdG1hcEFscGhhKCkKK3sKKyNpZm5kZWYgX0ZQREZBUElfTUlOSV8KKyAgICBpZiAobV9wRElCU291cmNlLT5Jc09wYXF1ZUltYWdlKCkpIHsKKyAgICAgICAgQ0ZYX1BhdGhEYXRhIHBhdGg7CisgICAgICAgIHBhdGguQXBwZW5kUmVjdCgwLCAwLCAxLCAxKTsKKyAgICAgICAgcGF0aC5UcmFuc2Zvcm0oJm1fSW1hZ2VNYXRyaXgpOworICAgICAgICBGWF9EV09SRCBmaWxsX2NvbG9yID0gQXJnYkVuY29kZSgweGZmLCBtX0JpdG1hcEFscGhhLCBtX0JpdG1hcEFscGhhLCBtX0JpdG1hcEFscGhhKTsKKyAgICAgICAgbV9wUmVuZGVyU3RhdHVzLT5tX3BEZXZpY2UtPkRyYXdQYXRoKCZwYXRoLCBOVUxMLCBOVUxMLCBmaWxsX2NvbG9yLCAwLCBGWEZJTExfV0lORElORyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEFscGhhTWFzayA9IG1fcERJQlNvdXJjZS0+SXNBbHBoYU1hc2soKSA/IG1fcERJQlNvdXJjZSA6IG1fcERJQlNvdXJjZS0+R2V0QWxwaGFNYXNrKCk7CisgICAgICAgIGlmIChGWFNZU19mYWJzKG1fSW1hZ2VNYXRyaXguYikgPj0gMC41ZiB8fCBGWFNZU19mYWJzKG1fSW1hZ2VNYXRyaXguYykgPj0gMC41ZikgeworICAgICAgICAgICAgaW50IGxlZnQsIHRvcDsKKyAgICAgICAgICAgIENGWF9ESUJpdG1hcCogcFRyYW5zZm9ybWVkID0gcEFscGhhTWFzay0+VHJhbnNmb3JtVG8oJm1fSW1hZ2VNYXRyaXgsIGxlZnQsIHRvcCk7CisgICAgICAgICAgICBpZiAocFRyYW5zZm9ybWVkID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcFJlbmRlclN0YXR1cy0+bV9wRGV2aWNlLT5TZXRCaXRNYXNrKHBUcmFuc2Zvcm1lZCwgbGVmdCwgdG9wLCBBcmdiRW5jb2RlKDB4ZmYsIG1fQml0bWFwQWxwaGEsIG1fQml0bWFwQWxwaGEsIG1fQml0bWFwQWxwaGEpKTsKKyAgICAgICAgICAgIGRlbGV0ZSBwVHJhbnNmb3JtZWQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBDRlhfRmxvYXRSZWN0IGltYWdlX3JlY3RfZiA9IG1fSW1hZ2VNYXRyaXguR2V0VW5pdFJlY3QoKTsKKyAgICAgICAgICAgIEZYX1JFQ1QgaW1hZ2VfcmVjdCA9IGltYWdlX3JlY3RfZi5HZXRPdXR0ZXJSZWN0KCk7CisgICAgICAgICAgICBpbnQgZGVzdF93aWR0aCA9IG1fSW1hZ2VNYXRyaXguYSA+IDAgPyBpbWFnZV9yZWN0LldpZHRoKCkgOiAtaW1hZ2VfcmVjdC5XaWR0aCgpOworICAgICAgICAgICAgaW50IGRlc3RfaGVpZ2h0ID0gbV9JbWFnZU1hdHJpeC5kID4gMCA/IC1pbWFnZV9yZWN0LkhlaWdodCgpIDogaW1hZ2VfcmVjdC5IZWlnaHQoKTsKKyAgICAgICAgICAgIGludCBsZWZ0ID0gZGVzdF93aWR0aCA+IDAgPyBpbWFnZV9yZWN0LmxlZnQgOiBpbWFnZV9yZWN0LnJpZ2h0OworICAgICAgICAgICAgaW50IHRvcCA9IGRlc3RfaGVpZ2h0ID4gMCA/IGltYWdlX3JlY3QudG9wIDogaW1hZ2VfcmVjdC5ib3R0b207CisgICAgICAgICAgICBtX3BSZW5kZXJTdGF0dXMtPm1fcERldmljZS0+U3RyZXRjaEJpdE1hc2socEFscGhhTWFzaywgbGVmdCwgdG9wLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgQXJnYkVuY29kZSgweGZmLCBtX0JpdG1hcEFscGhhLCBtX0JpdG1hcEFscGhhLCBtX0JpdG1hcEFscGhhKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fcERJQlNvdXJjZSAhPSBwQWxwaGFNYXNrKSB7CisgICAgICAgICAgICBkZWxldGUgcEFscGhhTWFzazsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBGQUxTRTsKK30KK0ZYX0JPT0wgQ1BERl9JbWFnZVJlbmRlcmVyOjpDb250aW51ZShJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBpZiAobV9TdGF0dXMgPT0gMSkgeworI2lmbmRlZiBfRlBERkFQSV9NSU5JXworICAgICAgICBpZiAobV9wUXVpY2tTdHJldGNoZXItPkNvbnRpbnVlKHBQYXVzZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIGlmIChtX3BRdWlja1N0cmV0Y2hlci0+bV9wQml0bWFwLT5Jc0FscGhhTWFzaygpKQorICAgICAgICAgICAgbV9wUmVuZGVyU3RhdHVzLT5tX3BEZXZpY2UtPlNldEJpdE1hc2sobV9wUXVpY2tTdHJldGNoZXItPm1fcEJpdG1hcCwgbV9wUXVpY2tTdHJldGNoZXItPm1fUmVzdWx0TGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcFF1aWNrU3RyZXRjaGVyLT5tX1Jlc3VsdFRvcCwgbV9GaWxsQXJnYik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcFJlbmRlclN0YXR1cy0+bV9wRGV2aWNlLT5TZXRESUJpdHMobV9wUXVpY2tTdHJldGNoZXItPm1fcEJpdG1hcCwgbV9wUXVpY2tTdHJldGNoZXItPm1fUmVzdWx0TGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wUXVpY2tTdHJldGNoZXItPm1fUmVzdWx0VG9wLCBtX0JsZW5kVHlwZSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyNlbmRpZgorICAgIH0gZWxzZSBpZiAobV9TdGF0dXMgPT0gMikgeworI2lmICFkZWZpbmVkKF9GUERGQVBJX01JTklfKSB8fCBkZWZpbmVkKF9GWENPUkVfRkVBVFVSRV9BTExfKQorICAgICAgICBpZiAobV9wVHJhbnNmb3JtZXItPkNvbnRpbnVlKHBQYXVzZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIENGWF9ESUJpdG1hcCogcEJpdG1hcCA9IG1fcFRyYW5zZm9ybWVyLT5tX1N0b3Jlci5EZXRhY2goKTsKKyAgICAgICAgaWYgKHBCaXRtYXAgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmIChwQml0bWFwLT5Jc0FscGhhTWFzaygpKSB7CisgICAgICAgICAgICBpZiAobV9CaXRtYXBBbHBoYSAhPSAyNTUpIHsKKyAgICAgICAgICAgICAgICBtX0ZpbGxBcmdiID0gRlhBUkdCX01VTF9BTFBIQShtX0ZpbGxBcmdiLCBtX0JpdG1hcEFscGhhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fUmVzdWx0ID0gbV9wUmVuZGVyU3RhdHVzLT5tX3BEZXZpY2UtPlNldEJpdE1hc2socEJpdG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgbV9wVHJhbnNmb3JtZXItPm1fUmVzdWx0TGVmdCwgbV9wVHJhbnNmb3JtZXItPm1fUmVzdWx0VG9wLCBtX0ZpbGxBcmdiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX0JpdG1hcEFscGhhICE9IDI1NSkgeworICAgICAgICAgICAgICAgIHBCaXRtYXAtPk11bHRpcGx5QWxwaGEobV9CaXRtYXBBbHBoYSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX1Jlc3VsdCA9IG1fcFJlbmRlclN0YXR1cy0+bV9wRGV2aWNlLT5TZXRESUJpdHMocEJpdG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgbV9wVHJhbnNmb3JtZXItPm1fUmVzdWx0TGVmdCwgbV9wVHJhbnNmb3JtZXItPm1fUmVzdWx0VG9wLCBtX0JsZW5kVHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIHBCaXRtYXA7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyNlbmRpZgorICAgIH0gZWxzZSBpZiAobV9TdGF0dXMgPT0gMykgeworICAgICAgICByZXR1cm4gbV9wUmVuZGVyU3RhdHVzLT5tX3BEZXZpY2UtPkNvbnRpbnVlRElCaXRzKG1fRGV2aWNlSGFuZGxlLCBwUGF1c2UpOworICAgIH0gZWxzZSBpZiAobV9TdGF0dXMgPT0gNCkgeworICAgICAgICBpZiAobV9Mb2FkZXIuQ29udGludWUobV9Mb2FkSGFuZGxlLCBwUGF1c2UpKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoU3RhcnRSZW5kZXJESUJTb3VyY2UoKSkgeworICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlKHBQYXVzZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitDUERGX1F1aWNrU3RyZXRjaGVyOjpDUERGX1F1aWNrU3RyZXRjaGVyKCkKK3sKKyAgICBtX3BCaXRtYXAgPSBOVUxMOworICAgIG1fcERlY29kZXIgPSBOVUxMOworICAgIG1fcENTID0gTlVMTDsKK30KK0NQREZfUXVpY2tTdHJldGNoZXI6On5DUERGX1F1aWNrU3RyZXRjaGVyKCkKK3sKKyAgICBpZiAobV9wQml0bWFwKSB7CisgICAgICAgIGRlbGV0ZSBtX3BCaXRtYXA7CisgICAgfQorICAgIGlmIChtX3BDUykgeworICAgICAgICBtX3BDUy0+UmVsZWFzZUNTKCk7CisgICAgfQorICAgIGlmIChtX3BEZWNvZGVyKSB7CisgICAgICAgIGRlbGV0ZSBtX3BEZWNvZGVyOworICAgIH0KK30KK0lDb2RlY19TY2FubGluZURlY29kZXIqIEZQREZBUElfQ3JlYXRlRmxhdGVEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgaW50IG5Db21wcywgaW50IGJwYywgY29uc3QgQ1BERl9EaWN0aW9uYXJ5KiBwUGFyYW1zKTsKK0ZYX0JPT0wgQ1BERl9RdWlja1N0cmV0Y2hlcjo6U3RhcnQoQ1BERl9JbWFnZU9iamVjdCogcEltYWdlT2JqLCBDRlhfQWZmaW5lTWF0cml4KiBwSW1hZ2UyRGV2aWNlLCBjb25zdCBGWF9SRUNUKiBwQ2xpcEJveCkKK3sKKyAgICBpZiAoRlhTWVNfZmFicyhwSW1hZ2UyRGV2aWNlLT5hKSA8IEZYU1lTX2ZhYnMocEltYWdlMkRldmljZS0+YikgKiAxMCAmJiBGWFNZU19mYWJzKHBJbWFnZTJEZXZpY2UtPmQpIDwgRlhTWVNfZmFicyhwSW1hZ2UyRGV2aWNlLT5jKSAqIDEwKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgQ0ZYX0Zsb2F0UmVjdCBpbWFnZV9yZWN0X2YgPSBwSW1hZ2UyRGV2aWNlLT5HZXRVbml0UmVjdCgpOworICAgIEZYX1JFQ1QgaW1hZ2VfcmVjdCA9IGltYWdlX3JlY3RfZi5HZXRPdXR0ZXJSZWN0KCk7CisgICAgbV9EZXN0V2lkdGggPSBpbWFnZV9yZWN0LldpZHRoKCk7CisgICAgbV9EZXN0SGVpZ2h0ID0gaW1hZ2VfcmVjdC5IZWlnaHQoKTsKKyAgICBtX2JGbGlwWCA9IHBJbWFnZTJEZXZpY2UtPmEgPCAwOworICAgIG1fYkZsaXBZID0gcEltYWdlMkRldmljZS0+ZCA+IDA7CisgICAgRlhfUkVDVCByZXN1bHRfcmVjdCA9ICpwQ2xpcEJveDsKKyAgICByZXN1bHRfcmVjdC5JbnRlcnNlY3QoaW1hZ2VfcmVjdCk7CisgICAgaWYgKHJlc3VsdF9yZWN0LklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fUmVzdWx0V2lkdGggPSByZXN1bHRfcmVjdC5XaWR0aCgpOworICAgIG1fUmVzdWx0SGVpZ2h0ID0gcmVzdWx0X3JlY3QuSGVpZ2h0KCk7CisgICAgbV9SZXN1bHRMZWZ0ID0gcmVzdWx0X3JlY3QubGVmdDsKKyAgICBtX1Jlc3VsdFRvcCA9IHJlc3VsdF9yZWN0LnRvcDsKKyAgICBtX0NsaXBMZWZ0ID0gcmVzdWx0X3JlY3QubGVmdCAtIGltYWdlX3JlY3QubGVmdDsKKyAgICBtX0NsaXBUb3AgPSByZXN1bHRfcmVjdC50b3AgLSBpbWFnZV9yZWN0LnRvcDsKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gcEltYWdlT2JqLT5tX3BJbWFnZS0+R2V0RGljdCgpOworICAgIGlmIChwRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiQml0c1BlckNvbXBvbmVudCIpKSAhPSA4KSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKHBEaWN0LT5LZXlFeGlzdChGWF9CU1RSQygiU01hc2siKSkgfHwgcERpY3QtPktleUV4aXN0KEZYX0JTVFJDKCJNYXNrIikpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9TcmNXaWR0aCA9IHBEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJXaWR0aCIpKTsKKyAgICBtX1NyY0hlaWdodCA9IHBEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJIZWlnaHQiKSk7CisgICAgbV9wQ1MgPSBOVUxMOworICAgIG1fQnBwID0gMzsKKyAgICBDUERGX09iamVjdCogcENTT2JqID0gcERpY3QtPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiQ29sb3JTcGFjZSIpKTsKKyAgICBpZiAocENTT2JqID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBtX3BDUyA9IENQREZfQ29sb3JTcGFjZTo6TG9hZChwSW1hZ2VPYmotPm1fcEltYWdlLT5HZXREb2N1bWVudCgpLCBwQ1NPYmopOworICAgIGlmIChtX3BDUyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKCFfSXNTdXBwb3J0ZWQobV9wQ1MpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9CcHAgPSBtX3BDUy0+Q291bnRDb21wb25lbnRzKCk7CisgICAgaWYgKG1fcENTLT5zUkdCKCkpIHsKKyAgICAgICAgbV9wQ1MtPlJlbGVhc2VDUygpOworICAgICAgICBtX3BDUyA9IE5VTEw7CisgICAgfQorICAgIENQREZfU3RyZWFtKiBwU3RyZWFtID0gcEltYWdlT2JqLT5tX3BJbWFnZS0+R2V0U3RyZWFtKCk7CisgICAgbV9TdHJlYW1BY2MuTG9hZEFsbERhdGEocFN0cmVhbSwgRkFMU0UsIG1fU3JjV2lkdGggKiBtX1NyY0hlaWdodCAqIG1fQnBwLCBUUlVFKTsKKyAgICBtX3BEZWNvZGVyID0gTlVMTDsKKyAgICBpZiAoIW1fU3RyZWFtQWNjLkdldEltYWdlRGVjb2RlcigpLklzRW1wdHkoKSkgeworICAgICAgICBpZiAobV9TdHJlYW1BY2MuR2V0SW1hZ2VEZWNvZGVyKCkgPT0gRlhfQlNUUkMoIkRDVERlY29kZSIpKSB7CisgICAgICAgICAgICBjb25zdCBDUERGX0RpY3Rpb25hcnkqIHBQYXJhbSA9IG1fU3RyZWFtQWNjLkdldEltYWdlUGFyYW0oKTsKKyAgICAgICAgICAgIG1fcERlY29kZXIgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldEpwZWdNb2R1bGUoKS0+Q3JlYXRlRGVjb2RlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9TdHJlYW1BY2MuR2V0RGF0YSgpLCBtX1N0cmVhbUFjYy5HZXRTaXplKCksIG1fU3JjV2lkdGgsIG1fU3JjSGVpZ2h0LCBtX0JwcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFBhcmFtID8gcFBhcmFtLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJDb2xvclRyYW5zZm9ybSIpLCAxKSA6IDEpOworICAgICAgICB9IGVsc2UgaWYgKG1fU3RyZWFtQWNjLkdldEltYWdlRGVjb2RlcigpID09IEZYX0JTVFJDKCJGbGF0ZURlY29kZSIpKSB7CisgICAgICAgICAgICBtX3BEZWNvZGVyID0gRlBERkFQSV9DcmVhdGVGbGF0ZURlY29kZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RyZWFtQWNjLkdldERhdGEoKSwgbV9TdHJlYW1BY2MuR2V0U2l6ZSgpLCBtX1NyY1dpZHRoLCBtX1NyY0hlaWdodCwgbV9CcHAsIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fU3RyZWFtQWNjLkdldEltYWdlUGFyYW0oKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgbV9wRGVjb2Rlci0+RG93blNjYWxlKG1fRGVzdFdpZHRoLCBtX0Rlc3RIZWlnaHQpOworICAgIH0KKyAgICBtX3BCaXRtYXAgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOworI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXworICAgIG1fcEJpdG1hcC0+Q3JlYXRlKG1fUmVzdWx0V2lkdGgsIG1fUmVzdWx0SGVpZ2h0LCBGWERJQl9SZ2IzMik7CisjZWxzZQorICAgIG1fcEJpdG1hcC0+Q3JlYXRlKG1fUmVzdWx0V2lkdGgsIG1fUmVzdWx0SGVpZ2h0LCBGWERJQl9SZ2IpOworI2VuZGlmCisgICAgbV9MaW5lSW5kZXggPSAwOworICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDUERGX1F1aWNrU3RyZXRjaGVyOjpDb250aW51ZShJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBGWF9MUEJZVEUgcmVzdWx0X2J1ZiA9IG1fcEJpdG1hcC0+R2V0QnVmZmVyKCk7CisgICAgaW50IHNyY193aWR0aCA9IG1fcERlY29kZXIgPyBtX3BEZWNvZGVyLT5HZXRXaWR0aCgpIDogbV9TcmNXaWR0aDsKKyAgICBpbnQgc3JjX2hlaWdodCA9IG1fcERlY29kZXIgPyBtX3BEZWNvZGVyLT5HZXRIZWlnaHQoKSA6IG1fU3JjSGVpZ2h0OworICAgIGludCBzcmNfcGl0Y2ggPSBzcmNfd2lkdGggKiBtX0JwcDsKKyAgICB3aGlsZSAobV9MaW5lSW5kZXggPCBtX1Jlc3VsdEhlaWdodCkgeworICAgICAgICBpbnQgZGVzdF95LCBzcmNfeTsKKyAgICAgICAgaWYgKG1fYkZsaXBZKSB7CisgICAgICAgICAgICBkZXN0X3kgPSBtX1Jlc3VsdEhlaWdodCAtIG1fTGluZUluZGV4IC0gMTsKKyAgICAgICAgICAgIHNyY195ID0gKG1fRGVzdEhlaWdodCAtIChkZXN0X3kgKyBtX0NsaXBUb3ApIC0gMSkgKiBzcmNfaGVpZ2h0IC8gbV9EZXN0SGVpZ2h0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVzdF95ID0gbV9MaW5lSW5kZXg7CisgICAgICAgICAgICBzcmNfeSA9IChkZXN0X3kgKyBtX0NsaXBUb3ApICogc3JjX2hlaWdodCAvIG1fRGVzdEhlaWdodDsKKyAgICAgICAgfQorICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuOworICAgICAgICBpZiAobV9wRGVjb2RlcikgeworICAgICAgICAgICAgc3JjX3NjYW4gPSBtX3BEZWNvZGVyLT5HZXRTY2FubGluZShzcmNfeSk7CisgICAgICAgICAgICBpZiAoc3JjX3NjYW4gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3JjX3NjYW4gPSBtX1N0cmVhbUFjYy5HZXREYXRhKCk7CisgICAgICAgICAgICBpZiAoc3JjX3NjYW4gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX3kgKiBzcmNfcGl0Y2g7CisgICAgICAgIH0KKyAgICAgICAgRlhfTFBCWVRFIHJlc3VsdF9zY2FuID0gcmVzdWx0X2J1ZiArIGRlc3RfeSAqIG1fcEJpdG1hcC0+R2V0UGl0Y2goKTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtX1Jlc3VsdFdpZHRoOyB4ICsrKSB7CisgICAgICAgICAgICBpbnQgZGVzdF94ID0gbV9DbGlwTGVmdCArIHg7CisgICAgICAgICAgICBpbnQgc3JjX3ggPSAobV9iRmxpcFggPyAobV9EZXN0V2lkdGggLSBkZXN0X3ggLSAxKSA6IGRlc3RfeCkgKiBzcmNfd2lkdGggLyBtX0Rlc3RXaWR0aDsKKyAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3BpeGVsID0gc3JjX3NjYW4gKyBzcmNfeCAqIG1fQnBwOworICAgICAgICAgICAgaWYgKG1fcENTID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAqcmVzdWx0X3NjYW4gPSBzcmNfcGl4ZWxbMl07CisgICAgICAgICAgICAgICAgcmVzdWx0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgKnJlc3VsdF9zY2FuID0gc3JjX3BpeGVsWzFdOworICAgICAgICAgICAgICAgIHJlc3VsdF9zY2FuICsrOworICAgICAgICAgICAgICAgICpyZXN1bHRfc2NhbiA9IHNyY19waXhlbFswXTsKKyAgICAgICAgICAgICAgICByZXN1bHRfc2NhbiArKzsKKyNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8KKyAgICAgICAgICAgICAgICByZXN1bHRfc2NhbiArKzsKKyNlbmRpZgorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX3BDUy0+VHJhbnNsYXRlSW1hZ2VMaW5lKHJlc3VsdF9zY2FuLCBzcmNfcGl4ZWwsIDEsIDAsIDApOworI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXworICAgICAgICAgICAgICAgIHJlc3VsdF9zY2FuICs9IDQ7CisjZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdF9zY2FuICs9IDM7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX0xpbmVJbmRleCArKzsKKyAgICAgICAgaWYgKHBQYXVzZSAmJiBwUGF1c2UtPk5lZWRUb1BhdXNlTm93KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK0NGWF9ESUJpdG1hcCogQ1BERl9SZW5kZXJTdGF0dXM6OkxvYWRTTWFzayhDUERGX0RpY3Rpb25hcnkqIHBTTWFza0RpY3QsCisgICAgICAgIEZYX1JFQ1QqIHBDbGlwUmVjdCwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCkKK3sKKyAgICBpZiAocFNNYXNrRGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDRlhfRElCaXRtYXAqIHBNYXNrID0gTlVMTDsKKyAgICBpbnQgd2lkdGggPSBwQ2xpcFJlY3QtPnJpZ2h0IC0gcENsaXBSZWN0LT5sZWZ0OworICAgIGludCBoZWlnaHQgPSBwQ2xpcFJlY3QtPmJvdHRvbSAtIHBDbGlwUmVjdC0+dG9wOworICAgIEZYX0JPT0wgYkx1bWlub3NpdHkgPSBGQUxTRTsKKyAgICBiTHVtaW5vc2l0eSA9IHBTTWFza0RpY3QtPkdldENvbnN0U3RyaW5nKEZYX0JTVFJDKCJTIikpICE9IEZYX0JTVFJDKCJBbHBoYSIpOworICAgIENQREZfU3RyZWFtKiBwR3JvdXAgPSBwU01hc2tEaWN0LT5HZXRTdHJlYW0oRlhfQlNUUkMoIkciKSk7CisgICAgaWYgKHBHcm91cCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX0Z1bmN0aW9uKiBwRnVuYyA9IE5VTEw7CisgICAgQ1BERl9PYmplY3QqIHBGdW5jT2JqID0gcFNNYXNrRGljdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJUUiIpKTsKKyAgICBpZiAocEZ1bmNPYmogJiYgKHBGdW5jT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkgfHwgcEZ1bmNPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSRUFNKSkgeworICAgICAgICBwRnVuYyA9IENQREZfRnVuY3Rpb246OkxvYWQocEZ1bmNPYmopOworICAgIH0KKyAgICBDRlhfQWZmaW5lTWF0cml4IG1hdHJpeCA9ICpwTWF0cml4OworICAgIG1hdHJpeC5UcmFuc2xhdGVJKC1wQ2xpcFJlY3QtPmxlZnQsIC1wQ2xpcFJlY3QtPnRvcCk7CisgICAgQ1BERl9Gb3JtIGZvcm0obV9wQ29udGV4dC0+bV9wRG9jdW1lbnQsIG1fcENvbnRleHQtPm1fcFBhZ2VSZXNvdXJjZXMsIHBHcm91cCk7CisgICAgZm9ybS5QYXJzZUNvbnRlbnQoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgQ0ZYX0Z4Z2VEZXZpY2UgYml0bWFwX2RldmljZTsKKyNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8KKyAgICBpZiAoIWJpdG1hcF9kZXZpY2UuQ3JlYXRlKHdpZHRoLCBoZWlnaHQsIGJMdW1pbm9zaXR5ID8gRlhESUJfUmdiMzIgOiBGWERJQl84YnBwTWFzaykpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorI2Vsc2UKKyAgICBpZiAoIWJpdG1hcF9kZXZpY2UuQ3JlYXRlKHdpZHRoLCBoZWlnaHQsIGJMdW1pbm9zaXR5ID8gRlhESUJfUmdiIDogRlhESUJfOGJwcE1hc2spKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyNlbmRpZgorICAgIENGWF9ESUJpdG1hcCYgYml0bWFwID0gKmJpdG1hcF9kZXZpY2UuR2V0Qml0bWFwKCk7CisgICAgQ1BERl9PYmplY3QqIHBDU09iaiA9IE5VTEw7CisgICAgQ1BERl9Db2xvclNwYWNlKiBwQ1MgPSBOVUxMOworICAgIGlmIChiTHVtaW5vc2l0eSkgeworICAgICAgICBDUERGX0FycmF5KiBwQkMgPSBwU01hc2tEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiQkMiKSk7CisgICAgICAgIEZYX0FSR0IgYmFja19jb2xvciA9IDB4ZmYwMDAwMDA7CisgICAgICAgIGlmIChwQkMpIHsKKyAgICAgICAgICAgIHBDU09iaiA9IHBHcm91cC0+R2V0RGljdCgpLT5HZXREaWN0KEZYX0JTVFJDKCJHcm91cCIpKS0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJDUyIpKTsKKyAgICAgICAgICAgIHBDUyA9IG1fcENvbnRleHQtPm1fcERvY3VtZW50LT5Mb2FkQ29sb3JTcGFjZShwQ1NPYmopOworICAgICAgICAgICAgaWYgKHBDUykgeworICAgICAgICAgICAgICAgIEZYX0ZMT0FUIFIsIEcsIEI7CisgICAgICAgICAgICAgICAgRlhfRFdPUkQgbnVtX2Zsb2F0cyA9IDg7CisgICAgICAgICAgICAgICAgaWYgKHBDUy0+Q291bnRDb21wb25lbnRzKCkgPiAoRlhfSU5UMzIpbnVtX2Zsb2F0cykgeworICAgICAgICAgICAgICAgICAgICBudW1fZmxvYXRzID0gKEZYX0RXT1JEKXBDUy0+Q291bnRDb21wb25lbnRzKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIENGWF9GaXhlZEJ1Zkdyb3c8RlhfRkxPQVQsIDg+IGZsb2F0X2FycmF5KG51bV9mbG9hdHMpOworICAgICAgICAgICAgICAgIEZYX0ZMT0FUKiBwRmxvYXRzID0gZmxvYXRfYXJyYXk7CisgICAgICAgICAgICAgICAgRlhTWVNfbWVtc2V0MzIocEZsb2F0cywgMCwgbnVtX2Zsb2F0cyAqIHNpemVvZihGWF9GTE9BVCkpOworICAgICAgICAgICAgICAgIGludCBjb3VudCA9IHBCQy0+R2V0Q291bnQoKSA+IDggPyA4IDogcEJDLT5HZXRDb3VudCgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcEZsb2F0c1tpXSA9IHBCQy0+R2V0TnVtYmVyKGkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwQ1MtPkdldFJHQihwRmxvYXRzLCBSLCBHLCBCKTsKKyAgICAgICAgICAgICAgICBiYWNrX2NvbG9yID0gMHhmZjAwMDAwMCB8ICgoRlhfSU5UMzIpKFIgKiAyNTUpIDw8IDE2KSB8ICgoRlhfSU5UMzIpKEcgKiAyNTUpIDw8IDgpIHwgKEZYX0lOVDMyKShCICogMjU1KTsKKyAgICAgICAgICAgICAgICBtX3BDb250ZXh0LT5tX3BEb2N1bWVudC0+R2V0UGFnZURhdGEoKS0+UmVsZWFzZUNvbG9yU3BhY2UocENTT2JqKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBiaXRtYXAuQ2xlYXIoYmFja19jb2xvcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYml0bWFwLkNsZWFyKDApOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBGb3JtUmVzb3VyY2UgPSBOVUxMOworICAgIGlmIChmb3JtLm1fcEZvcm1EaWN0KSB7CisgICAgICAgIHBGb3JtUmVzb3VyY2UgPSBmb3JtLm1fcEZvcm1EaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJSZXNvdXJjZXMiKSk7CisgICAgfQorICAgIENQREZfUmVuZGVyT3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlvbnMubV9Db2xvck1vZGUgPSBiTHVtaW5vc2l0eSA/IFJFTkRFUl9DT0xPUl9OT1JNQUwgOiBSRU5ERVJfQ09MT1JfQUxQSEE7CisgICAgQ1BERl9SZW5kZXJTdGF0dXMgc3RhdHVzOworICAgIHN0YXR1cy5Jbml0aWFsaXplKG1fTGV2ZWwgKyAxLCBtX3BDb250ZXh0LCAmYml0bWFwX2RldmljZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAmb3B0aW9ucywgMCwgbV9iRHJvcE9iamVjdHMsIHBGb3JtUmVzb3VyY2UsIFRSVUUsIE5VTEwsIDAsIHBDUyA/IHBDUy0+R2V0RmFtaWx5KCkgOiAwLCBiTHVtaW5vc2l0eSk7CisgICAgc3RhdHVzLlJlbmRlck9iamVjdExpc3QoJmZvcm0sICZtYXRyaXgpOworICAgIHBNYXNrID0gRlhfTkVXIENGWF9ESUJpdG1hcDsKKyAgICBpZiAoIXBNYXNrLT5DcmVhdGUod2lkdGgsIGhlaWdodCwgRlhESUJfOGJwcE1hc2spKSB7CisgICAgICAgIGRlbGV0ZSBwTWFzazsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIEZYX0xQQllURSBkZXN0X2J1ZiA9IHBNYXNrLT5HZXRCdWZmZXIoKTsKKyAgICBpbnQgZGVzdF9waXRjaCA9IHBNYXNrLT5HZXRQaXRjaCgpOworICAgIEZYX0xQQllURSBzcmNfYnVmID0gYml0bWFwLkdldEJ1ZmZlcigpOworICAgIGludCBzcmNfcGl0Y2ggPSBiaXRtYXAuR2V0UGl0Y2goKTsKKyAgICBGWF9MUEJZVEUgcFRyYW5zZmVyID0gRlhfQWxsb2MoRlhfQllURSwgMjU2KTsKKyAgICBpZiAocEZ1bmMpIHsKKyAgICAgICAgQ0ZYX0ZpeGVkQnVmR3JvdzxGWF9GTE9BVCwgMTY+IHJlc3VsdHMocEZ1bmMtPkNvdW50T3V0cHV0cygpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsKKyAgICAgICAgICAgIEZYX0ZMT0FUIGlucHV0ID0gKEZYX0ZMT0FUKWkgLyAyNTUuMGY7CisgICAgICAgICAgICBpbnQgbnJlc3VsdDsKKyAgICAgICAgICAgIHBGdW5jLT5DYWxsKCZpbnB1dCwgMSwgcmVzdWx0cywgbnJlc3VsdCk7CisgICAgICAgICAgICBwVHJhbnNmZXJbaV0gPSBGWFNZU19yb3VuZChyZXN1bHRzWzBdICogMjU1KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7CisgICAgICAgICAgICBwVHJhbnNmZXJbaV0gPSBpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChiTHVtaW5vc2l0eSkgeworICAgICAgICBpbnQgQnBwID0gYml0bWFwLkdldEJQUCgpIC8gODsKKyAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3BvcyA9IGRlc3RfYnVmICsgcm93ICogZGVzdF9waXRjaDsKKyAgICAgICAgICAgIEZYX0xQQllURSBzcmNfcG9zID0gc3JjX2J1ZiArIHJvdyAqIHNyY19waXRjaDsKKyAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAqZGVzdF9wb3MgKysgPSBwVHJhbnNmZXJbRlhSR0IyR1JBWShzcmNfcG9zWzJdLCBzcmNfcG9zWzFdLCAqc3JjX3BvcyldOworICAgICAgICAgICAgICAgIHNyY19wb3MgKz0gQnBwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIGlmIChwRnVuYykgeworICAgICAgICBpbnQgc2l6ZSA9IGRlc3RfcGl0Y2ggKiBoZWlnaHQ7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgeworICAgICAgICAgICAgZGVzdF9idWZbaV0gPSBwVHJhbnNmZXJbc3JjX2J1ZltpXV07CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBGWFNZU19tZW1jcHkzMihkZXN0X2J1Ziwgc3JjX2J1ZiwgZGVzdF9waXRjaCAqIGhlaWdodCk7CisgICAgfQorICAgIGlmIChwRnVuYykgeworICAgICAgICBkZWxldGUgcEZ1bmM7CisgICAgfQorICAgIEZYX0ZyZWUocFRyYW5zZmVyKTsKKyAgICByZXR1cm4gcE1hc2s7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcmVuZGVyL2ZwZGZfcmVuZGVyX2xvYWRpbWFnZS5jcHAgYi9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcmVuZGVyL2ZwZGZfcmVuZGVyX2xvYWRpbWFnZS5jcHAKaW5kZXggZmNiNTI3MS4uZTY3YjQ2YyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3JlbmRlci9mcGRmX3JlbmRlcl9sb2FkaW1hZ2UuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9yZW5kZXIvZnBkZl9yZW5kZXJfbG9hZGltYWdlLmNwcApAQCAtMSwxNTI0ICsxLDE1MjQgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2UuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX21vZHVsZS5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9yZW5kZXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZW9iai5oIg0KLSNpbmNsdWRlICIuLi9mcGRmX3BhZ2UvcGFnZWludC5oIg0KLSNpbmNsdWRlICJyZW5kZXJfaW50LmgiDQotI2luY2x1ZGUgPGxpbWl0cy5oPg0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgX0dldEJpdHM4KEZYX0xQQ0JZVEUgcERhdGEsIGludCBiaXRwb3MsIGludCBuYml0cykNCi17DQotICAgIHVuc2lnbmVkIGludCBieXRlID0gcERhdGFbYml0cG9zIC8gOF07DQotICAgIGlmIChuYml0cyA9PSA4KSB7DQotICAgICAgICByZXR1cm4gYnl0ZTsNCi0gICAgfSBlbHNlIGlmIChuYml0cyA9PSA0KSB7DQotICAgICAgICByZXR1cm4gKGJpdHBvcyAlIDgpID8gKGJ5dGUgJiAweDBmKSA6IChieXRlID4+IDQpOw0KLSAgICB9IGVsc2UgaWYgKG5iaXRzID09IDIpIHsNCi0gICAgICAgIHJldHVybiAoYnl0ZSA+PiAoNiAtIGJpdHBvcyAlIDgpKSAmIDB4MDM7DQotICAgIH0gZWxzZSBpZiAobmJpdHMgPT0gMSkgew0KLSAgICAgICAgcmV0dXJuIChieXRlID4+ICg3IC0gYml0cG9zICUgOCkpICYgMHgwMTsNCi0gICAgfSBlbHNlIGlmIChuYml0cyA9PSAxNikgew0KLSAgICAgICAgcmV0dXJuIGJ5dGUgKiAyNTYgKyBwRGF0YVtiaXRwb3MgLyA4ICsgMV07DQotICAgIH0NCi0gICAgcmV0dXJuIDA7DQotfQ0KLUNGWF9ESUJTb3VyY2UqIENQREZfSW1hZ2U6OkxvYWRESUJTb3VyY2UoQ0ZYX0RJQlNvdXJjZSoqIHBwTWFzaywgRlhfRFdPUkQqIHBNYXR0ZUNvbG9yLCBGWF9CT09MIGJTdGRDUywgRlhfRFdPUkQgR3JvdXBGYW1pbHksIEZYX0JPT0wgYkxvYWRNYXNrKSBjb25zdA0KLXsNCi0gICAgQ1BERl9ESUJTb3VyY2UqIHBTb3VyY2UgPSBGWF9ORVcgQ1BERl9ESUJTb3VyY2U7DQotICAgIGlmIChwU291cmNlLT5Mb2FkKG1fcERvY3VtZW50LCBtX3BTdHJlYW0sIChDUERGX0RJQlNvdXJjZSoqKXBwTWFzaywgcE1hdHRlQ29sb3IsIE5VTEwsIE5VTEwsIGJTdGRDUywgR3JvdXBGYW1pbHksIGJMb2FkTWFzaykpIHsNCi0gICAgICAgIHJldHVybiBwU291cmNlOw0KLSAgICB9DQotICAgIGRlbGV0ZSBwU291cmNlOw0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotQ0ZYX0RJQlNvdXJjZSogQ1BERl9JbWFnZTo6RGV0YWNoQml0bWFwKCkNCi17DQotICAgIENGWF9ESUJTb3VyY2UqIHBCaXRtYXAgPSBtX3BESUJTb3VyY2U7DQotICAgIG1fcERJQlNvdXJjZSA9IE5VTEw7DQotICAgIHJldHVybiBwQml0bWFwOw0KLX0NCi1DRlhfRElCU291cmNlKiBDUERGX0ltYWdlOjpEZXRhY2hNYXNrKCkNCi17DQotICAgIENGWF9ESUJTb3VyY2UqIHBCaXRtYXAgPSBtX3BNYXNrOw0KLSAgICBtX3BNYXNrID0gTlVMTDsNCi0gICAgcmV0dXJuIHBCaXRtYXA7DQotfQ0KLUZYX0JPT0wgQ1BERl9JbWFnZTo6U3RhcnRMb2FkRElCU291cmNlKENQREZfRGljdGlvbmFyeSogcEZvcm1SZXNvdXJjZSwgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZVJlc291cmNlLCBGWF9CT09MIGJTdGRDUywgRlhfRFdPUkQgR3JvdXBGYW1pbHksIEZYX0JPT0wgYkxvYWRNYXNrKQ0KLXsNCi0gICAgbV9wRElCU291cmNlID0gRlhfTkVXIENQREZfRElCU291cmNlOw0KLSAgICBpbnQgcmV0ID0gKChDUERGX0RJQlNvdXJjZSopbV9wRElCU291cmNlKS0+U3RhcnRMb2FkRElCU291cmNlKG1fcERvY3VtZW50LCBtX3BTdHJlYW0sIFRSVUUsIHBGb3JtUmVzb3VyY2UsIHBQYWdlUmVzb3VyY2UsIGJTdGRDUywgR3JvdXBGYW1pbHksIGJMb2FkTWFzayk7DQotICAgIGlmIChyZXQgPT0gMikgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgaWYgKCFyZXQpIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BESUJTb3VyY2U7DQotICAgICAgICBtX3BESUJTb3VyY2UgPSBOVUxMOw0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fcE1hc2sgPSAoKENQREZfRElCU291cmNlKiltX3BESUJTb3VyY2UpLT5EZXRhY2hNYXNrKCk7DQotICAgIG1fTWF0dGVDb2xvciA9ICgoQ1BERl9ESUJTb3VyY2UqKW1fcERJQlNvdXJjZSktPm1fTWF0dGVDb2xvcjsNCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1GWF9CT09MIENQREZfSW1hZ2U6OkNvbnRpbnVlKElGWF9QYXVzZSogcFBhdXNlKQ0KLXsNCi0gICAgaW50IHJldCA9ICgoQ1BERl9ESUJTb3VyY2UqKW1fcERJQlNvdXJjZSktPkNvbnRpbnVlTG9hZERJQlNvdXJjZShwUGF1c2UpOw0KLSAgICBpZiAocmV0ID09IDIpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIGlmICghcmV0KSB7DQotICAgICAgICBkZWxldGUgbV9wRElCU291cmNlOw0KLSAgICAgICAgbV9wRElCU291cmNlID0gTlVMTDsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBtX3BNYXNrID0gKChDUERGX0RJQlNvdXJjZSopbV9wRElCU291cmNlKS0+RGV0YWNoTWFzaygpOw0KLSAgICBtX01hdHRlQ29sb3IgPSAoKENQREZfRElCU291cmNlKiltX3BESUJTb3VyY2UpLT5tX01hdHRlQ29sb3I7DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotQ1BERl9ESUJTb3VyY2U6OkNQREZfRElCU291cmNlKCkNCi17DQotICAgIG1fcERvY3VtZW50ID0gTlVMTDsNCi0gICAgbV9wU3RyZWFtQWNjID0gTlVMTDsNCi0gICAgbV9wRGljdCA9IE5VTEw7DQotICAgIG1fYnBwID0gMDsNCi0gICAgbV9XaWR0aCA9IG1fSGVpZ2h0ID0gMDsNCi0gICAgbV9wQ29sb3JTcGFjZSA9IE5VTEw7DQotICAgIG1fYkRlZmF1bHREZWNvZGUgPSBUUlVFOw0KLSAgICBtX2JJbWFnZU1hc2sgPSBGQUxTRTsNCi0gICAgbV9wUGFsZXR0ZSA9IE5VTEw7DQotICAgIG1fcENvbXBEYXRhID0gTlVMTDsNCi0gICAgbV9iQ29sb3JLZXkgPSBGQUxTRTsNCi0gICAgbV9wTWFza2VkTGluZSA9IG1fcExpbmVCdWYgPSBOVUxMOw0KLSAgICBtX3BDYWNoZWRCaXRtYXAgPSBOVUxMOw0KLSAgICBtX3BEZWNvZGVyID0gTlVMTDsNCi0gICAgbV9uQ29tcG9uZW50cyA9IDA7DQotICAgIG1fYnBjID0gMDsNCi0gICAgbV9iTG9hZE1hc2sgPSBGQUxTRTsNCi0gICAgbV9GYW1pbHkgPSAwOw0KLSAgICBtX3BNYXNrID0gTlVMTDsNCi0gICAgbV9NYXR0ZUNvbG9yID0gMDsNCi0gICAgbV9wSmJpZzJDb250ZXh0ID0gTlVMTDsNCi0gICAgbV9wR2xvYmFsU3RyZWFtID0gTlVMTDsNCi0gICAgbV9iU3RkQ1MgPSBGQUxTRTsNCi0gICAgbV9wTWFza1N0cmVhbSA9IE5VTEw7DQotICAgIG1fU3RhdHVzID0gMDsNCi0gICAgbV9iSGFzTWFzayA9IEZBTFNFOw0KLX0NCi1DUERGX0RJQlNvdXJjZTo6fkNQREZfRElCU291cmNlKCkNCi17DQotICAgIGlmIChtX3BTdHJlYW1BY2MpIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BTdHJlYW1BY2M7DQotICAgIH0NCi0gICAgaWYgKG1fcE1hc2tlZExpbmUpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wTWFza2VkTGluZSk7DQotICAgIH0NCi0gICAgaWYgKG1fcExpbmVCdWYpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wTGluZUJ1Zik7DQotICAgIH0NCi0gICAgaWYgKG1fcENhY2hlZEJpdG1hcCkgew0KLSAgICAgICAgZGVsZXRlIG1fcENhY2hlZEJpdG1hcDsNCi0gICAgfQ0KLSAgICBpZiAobV9wRGVjb2Rlcikgew0KLSAgICAgICAgZGVsZXRlIG1fcERlY29kZXI7DQotICAgIH0NCi0gICAgaWYgKG1fcENvbXBEYXRhKSB7DQotICAgICAgICBGWF9GcmVlKG1fcENvbXBEYXRhKTsNCi0gICAgfQ0KLSAgICBDUERGX0NvbG9yU3BhY2UqIHBDUyA9IG1fcENvbG9yU3BhY2U7DQotICAgIGlmIChwQ1MgJiYgbV9wRG9jdW1lbnQpIHsNCi0gICAgICAgIG1fcERvY3VtZW50LT5HZXRQYWdlRGF0YSgpLT5SZWxlYXNlQ29sb3JTcGFjZShwQ1MtPkdldEFycmF5KCkpOw0KLSAgICB9DQotICAgIGlmIChtX3BKYmlnMkNvbnRleHQpIHsNCi0gICAgICAgIElDb2RlY19KYmlnMk1vZHVsZSogcEpiaWcyTW91ZGxlID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRKYmlnMk1vZHVsZSgpOw0KLSAgICAgICAgcEpiaWcyTW91ZGxlLT5EZXN0cm95SmJpZzJDb250ZXh0KG1fcEpiaWcyQ29udGV4dCk7DQotICAgICAgICBtX3BKYmlnMkNvbnRleHQgPSBOVUxMOw0KLSAgICB9DQotICAgIGlmIChtX3BHbG9iYWxTdHJlYW0pIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BHbG9iYWxTdHJlYW07DQotICAgIH0NCi0gICAgbV9wR2xvYmFsU3RyZWFtID0gTlVMTDsNCi19DQotQ0ZYX0RJQml0bWFwKiBDUERGX0RJQlNvdXJjZTo6R2V0Qml0bWFwKCkgY29uc3QNCi17DQotICAgIGlmIChtX3BDYWNoZWRCaXRtYXApIHsNCi0gICAgICAgIHJldHVybiBtX3BDYWNoZWRCaXRtYXA7DQotICAgIH0NCi0gICAgcmV0dXJuIENsb25lKCk7DQotfQ0KLXZvaWQgQ1BERl9ESUJTb3VyY2U6OlJlbGVhc2VCaXRtYXAoQ0ZYX0RJQml0bWFwKiBwQml0bWFwKSBjb25zdA0KLXsNCi0gICAgaWYgKHBCaXRtYXAgJiYgcEJpdG1hcCAhPSBtX3BDYWNoZWRCaXRtYXApIHsNCi0gICAgICAgIGRlbGV0ZSBwQml0bWFwOw0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BERl9ESUJTb3VyY2U6OkxvYWQoQ1BERl9Eb2N1bWVudCogcERvYywgY29uc3QgQ1BERl9TdHJlYW0qIHBTdHJlYW0sIENQREZfRElCU291cmNlKiogcHBNYXNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQqIHBNYXR0ZUNvbG9yLCBDUERGX0RpY3Rpb25hcnkqIHBGb3JtUmVzb3VyY2VzLCBDUERGX0RpY3Rpb25hcnkqIHBQYWdlUmVzb3VyY2VzLCBGWF9CT09MIGJTdGRDUywgRlhfRFdPUkQgR3JvdXBGYW1pbHksIEZYX0JPT0wgYkxvYWRNYXNrKQ0KLXsNCi0gICAgaWYgKHBTdHJlYW0gPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fcERvY3VtZW50ID0gcERvYzsNCi0gICAgbV9wRGljdCA9IHBTdHJlYW0tPkdldERpY3QoKTsNCi0gICAgbV9wU3RyZWFtID0gcFN0cmVhbTsNCi0gICAgbV9XaWR0aCA9IG1fcERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIldpZHRoIikpOw0KLSAgICBtX0hlaWdodCA9IG1fcERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIkhlaWdodCIpKTsNCi0gICAgaWYgKG1fV2lkdGggPD0gMCB8fCBtX0hlaWdodCA8PSAwIHx8IG1fV2lkdGggPiAweDAxZmZmZiB8fCBtX0hlaWdodCA+IDB4MDFmZmZmKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbV9Hcm91cEZhbWlseSA9IEdyb3VwRmFtaWx5Ow0KLSAgICBtX2JMb2FkTWFzayA9IGJMb2FkTWFzazsNCi0gICAgaWYgKCFMb2FkQ29sb3JJbmZvKG1fcFN0cmVhbS0+R2V0T2JqTnVtKCkgIT0gMCA/IE5VTEwgOiBwRm9ybVJlc291cmNlcywgcFBhZ2VSZXNvdXJjZXMpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgRlhfRFdPUkQgc3JjX3BpdGNoID0gbV9icGM7DQotICAgIGlmIChtX2JwYyAhPSAwICYmIG1fbkNvbXBvbmVudHMgIT0gMCkgew0KLSAgICAgICAgaWYgKHNyY19waXRjaCA+IDAgJiYgbV9uQ29tcG9uZW50cyA+ICh1bnNpZ25lZClJTlRfTUFYIC8gc3JjX3BpdGNoKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgc3JjX3BpdGNoICo9IG1fbkNvbXBvbmVudHM7DQotICAgICAgICBpZiAoc3JjX3BpdGNoID4gMCAmJiAoRlhfRFdPUkQpbV9XaWR0aCA+ICh1bnNpZ25lZClJTlRfTUFYIC8gc3JjX3BpdGNoKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgc3JjX3BpdGNoICo9IG1fV2lkdGg7DQotICAgICAgICBpZiAoc3JjX3BpdGNoICsgNyA8IHNyY19waXRjaCkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIHNyY19waXRjaCArPSA3Ow0KLSAgICAgICAgc3JjX3BpdGNoIC89IDg7DQotICAgICAgICBpZiAoc3JjX3BpdGNoID4gMCAmJiAoRlhfRFdPUkQpbV9IZWlnaHQgPiAodW5zaWduZWQpSU5UX01BWCAvIHNyY19waXRjaCkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX3BTdHJlYW1BY2MgPSBGWF9ORVcgQ1BERl9TdHJlYW1BY2M7DQotICAgIG1fcFN0cmVhbUFjYy0+TG9hZEFsbERhdGEocFN0cmVhbSwgRkFMU0UsIG1fSGVpZ2h0ICogc3JjX3BpdGNoLCBUUlVFKTsNCi0gICAgaWYgKG1fcFN0cmVhbUFjYy0+R2V0U2l6ZSgpID09IDAgfHwgbV9wU3RyZWFtQWNjLT5HZXREYXRhKCkgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBkZWNvZGVyID0gbV9wU3RyZWFtQWNjLT5HZXRJbWFnZURlY29kZXIoKTsNCi0gICAgaWYgKCFkZWNvZGVyLklzRW1wdHkoKSAmJiBkZWNvZGVyID09IEZYX0JTVFJDKCJDQ0lUVEZheERlY29kZSIpKSB7DQotICAgICAgICBtX2JwYyA9IDE7DQotICAgIH0NCi0gICAgaWYgKCFDcmVhdGVEZWNvZGVyKCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAobV9iSW1hZ2VNYXNrKSB7DQotICAgICAgICBtX2JwcCA9IDE7DQotICAgICAgICBtX2JwYyA9IDE7DQotICAgICAgICBtX25Db21wb25lbnRzID0gMTsNCi0gICAgICAgIG1fQWxwaGFGbGFnID0gMTsNCi0gICAgfSBlbHNlIGlmIChtX2JwYyAqIG1fbkNvbXBvbmVudHMgPT0gMSkgew0KLSAgICAgICAgbV9icHAgPSAxOw0KLSAgICB9IGVsc2UgaWYgKG1fYnBjICogbV9uQ29tcG9uZW50cyA8PSA4KSB7DQotICAgICAgICBtX2JwcCA9IDg7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX2JwcCA9IDI0Ow0KLSAgICB9DQotICAgIGlmICghbV9icGMgfHwgIW1fbkNvbXBvbmVudHMpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBtX1BpdGNoID0gbV9XaWR0aDsNCi0gICAgaWYgKChGWF9EV09SRCltX2JwcCA+ICh1bnNpZ25lZClJTlRfTUFYIC8gbV9QaXRjaCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fUGl0Y2ggKj0gbV9icHA7DQotICAgIGlmIChtX1BpdGNoICsgMzEgPCBtX1BpdGNoKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbV9QaXRjaCArPSAzMTsNCi0gICAgbV9QaXRjaCA9IG1fUGl0Y2ggLyAzMiAqIDQ7DQotICAgIG1fcExpbmVCdWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1BpdGNoKTsNCi0gICAgaWYgKG1fcENvbG9yU3BhY2UgJiYgYlN0ZENTKSB7DQotICAgICAgICBtX3BDb2xvclNwYWNlLT5FbmFibGVTdGRDb252ZXJzaW9uKFRSVUUpOw0KLSAgICB9DQotICAgIExvYWRQYWxldHRlKCk7DQotICAgIGlmIChtX2JDb2xvcktleSkgew0KLSAgICAgICAgbV9icHAgPSAzMjsNCi0gICAgICAgIG1fQWxwaGFGbGFnID0gMjsNCi0gICAgICAgIG1fUGl0Y2ggPSBtX1dpZHRoOw0KLSAgICAgICAgaWYgKChGWF9EV09SRCltX2JwcCA+ICh1bnNpZ25lZClJTlRfTUFYIC8gbV9QaXRjaCkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fUGl0Y2ggKj0gbV9icHA7DQotICAgICAgICBpZiAobV9QaXRjaCArIDMxIDwgbV9QaXRjaCkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fUGl0Y2ggKz0gMzE7DQotICAgICAgICBtX1BpdGNoID0gbV9QaXRjaCAvIDMyICogNDsNCi0gICAgICAgIG1fcE1hc2tlZExpbmUgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1BpdGNoKTsNCi0gICAgfQ0KLSAgICBpZiAocHBNYXNrKSB7DQotICAgICAgICAqcHBNYXNrID0gTG9hZE1hc2soKnBNYXR0ZUNvbG9yKTsNCi0gICAgfQ0KLSAgICBpZiAobV9wQ29sb3JTcGFjZSAmJiBiU3RkQ1MpIHsNCi0gICAgICAgIG1fcENvbG9yU3BhY2UtPkVuYWJsZVN0ZENvbnZlcnNpb24oRkFMU0UpOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1pbnQJQ1BERl9ESUJTb3VyY2U6OkNvbnRpbnVlVG9Mb2FkTWFzaygpDQotew0KLSAgICBpZiAobV9iSW1hZ2VNYXNrKSB7DQotICAgICAgICBtX2JwcCA9IDE7DQotICAgICAgICBtX2JwYyA9IDE7DQotICAgICAgICBtX25Db21wb25lbnRzID0gMTsNCi0gICAgICAgIG1fQWxwaGFGbGFnID0gMTsNCi0gICAgfSBlbHNlIGlmIChtX2JwYyAqIG1fbkNvbXBvbmVudHMgPT0gMSkgew0KLSAgICAgICAgbV9icHAgPSAxOw0KLSAgICB9IGVsc2UgaWYgKG1fYnBjICogbV9uQ29tcG9uZW50cyA8PSA4KSB7DQotICAgICAgICBtX2JwcCA9IDg7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX2JwcCA9IDI0Ow0KLSAgICB9DQotICAgIGlmICghbV9icGMgfHwgIW1fbkNvbXBvbmVudHMpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIG1fUGl0Y2ggPSBtX1dpZHRoOw0KLSAgICBpZiAoKEZYX0RXT1JEKW1fYnBwID4gKHVuc2lnbmVkKUlOVF9NQVggLyBtX1BpdGNoKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBtX1BpdGNoICo9IG1fYnBwOw0KLSAgICBpZiAobV9QaXRjaCArIDMxIDwgbV9QaXRjaCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgbV9QaXRjaCArPSAzMTsNCi0gICAgbV9QaXRjaCA9IG1fUGl0Y2ggLyAzMiAqIDQ7DQotICAgIG1fcExpbmVCdWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1BpdGNoKTsNCi0gICAgaWYgKG1fcENvbG9yU3BhY2UgJiYgbV9iU3RkQ1MpIHsNCi0gICAgICAgIG1fcENvbG9yU3BhY2UtPkVuYWJsZVN0ZENvbnZlcnNpb24oVFJVRSk7DQotICAgIH0NCi0gICAgTG9hZFBhbGV0dGUoKTsNCi0gICAgaWYgKG1fYkNvbG9yS2V5KSB7DQotICAgICAgICBtX2JwcCA9IDMyOw0KLSAgICAgICAgbV9BbHBoYUZsYWcgPSAyOw0KLSAgICAgICAgbV9QaXRjaCA9IG1fV2lkdGg7DQotICAgICAgICBpZiAoKEZYX0RXT1JEKW1fYnBwID4gKHVuc2lnbmVkKUlOVF9NQVggLyBtX1BpdGNoKSB7DQotICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICB9DQotICAgICAgICBtX1BpdGNoICo9IG1fYnBwOw0KLSAgICAgICAgaWYgKG1fUGl0Y2ggKyAzMSA8IG1fUGl0Y2gpIHsNCi0gICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fUGl0Y2ggKz0gMzE7DQotICAgICAgICBtX1BpdGNoID0gbV9QaXRjaCAvIDMyICogNDsNCi0gICAgICAgIG1fcE1hc2tlZExpbmUgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1BpdGNoKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gMTsNCi19DQotaW50CUNQREZfRElCU291cmNlOjpTdGFydExvYWRESUJTb3VyY2UoQ1BERl9Eb2N1bWVudCogcERvYywgY29uc3QgQ1BERl9TdHJlYW0qIHBTdHJlYW0sIEZYX0JPT0wgYkhhc01hc2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybVJlc291cmNlcywgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZVJlc291cmNlcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9CT09MIGJTdGRDUywgRlhfRFdPUkQgR3JvdXBGYW1pbHksIEZYX0JPT0wgYkxvYWRNYXNrKQ0KLXsNCi0gICAgaWYgKHBTdHJlYW0gPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgbV9wRG9jdW1lbnQgPSBwRG9jOw0KLSAgICBtX3BEaWN0ID0gcFN0cmVhbS0+R2V0RGljdCgpOw0KLSAgICBtX3BTdHJlYW0gPSBwU3RyZWFtOw0KLSAgICBtX2JTdGRDUyA9IGJTdGRDUzsNCi0gICAgbV9iSGFzTWFzayA9IGJIYXNNYXNrOw0KLSAgICBtX1dpZHRoID0gbV9wRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiV2lkdGgiKSk7DQotICAgIG1fSGVpZ2h0ID0gbV9wRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiSGVpZ2h0IikpOw0KLSAgICBpZiAobV9XaWR0aCA8PSAwIHx8IG1fSGVpZ2h0IDw9IDAgfHwgbV9XaWR0aCA+IDB4MDFmZmZmIHx8IG1fSGVpZ2h0ID4gMHgwMWZmZmYpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIG1fR3JvdXBGYW1pbHkgPSBHcm91cEZhbWlseTsNCi0gICAgbV9iTG9hZE1hc2sgPSBiTG9hZE1hc2s7DQotICAgIGlmICghTG9hZENvbG9ySW5mbyhtX3BTdHJlYW0tPkdldE9iak51bSgpICE9IDAgPyBOVUxMIDogcEZvcm1SZXNvdXJjZXMsIHBQYWdlUmVzb3VyY2VzKSkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgRlhfRFdPUkQgc3JjX3BpdGNoID0gbV9icGM7DQotICAgIGlmIChtX2JwYyAhPSAwICYmIG1fbkNvbXBvbmVudHMgIT0gMCkgew0KLSAgICAgICAgaWYgKHNyY19waXRjaCA+IDAgJiYgbV9uQ29tcG9uZW50cyA+ICh1bnNpZ25lZClJTlRfTUFYIC8gc3JjX3BpdGNoKSB7DQotICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICB9DQotICAgICAgICBzcmNfcGl0Y2ggKj0gbV9uQ29tcG9uZW50czsNCi0gICAgICAgIGlmIChzcmNfcGl0Y2ggPiAwICYmIChGWF9EV09SRCltX1dpZHRoID4gKHVuc2lnbmVkKUlOVF9NQVggLyBzcmNfcGl0Y2gpIHsNCi0gICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIHNyY19waXRjaCAqPSBtX1dpZHRoOw0KLSAgICAgICAgaWYgKHNyY19waXRjaCArIDcgPCBzcmNfcGl0Y2gpIHsNCi0gICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIHNyY19waXRjaCArPSA3Ow0KLSAgICAgICAgc3JjX3BpdGNoIC89IDg7DQotICAgICAgICBpZiAoc3JjX3BpdGNoID4gMCAmJiAoRlhfRFdPUkQpbV9IZWlnaHQgPiAodW5zaWduZWQpSU5UX01BWCAvIHNyY19waXRjaCkgew0KLSAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fcFN0cmVhbUFjYyA9IEZYX05FVyBDUERGX1N0cmVhbUFjYzsNCi0gICAgbV9wU3RyZWFtQWNjLT5Mb2FkQWxsRGF0YShwU3RyZWFtLCBGQUxTRSwgbV9IZWlnaHQgKiBzcmNfcGl0Y2gsIFRSVUUpOw0KLSAgICBpZiAobV9wU3RyZWFtQWNjLT5HZXRTaXplKCkgPT0gMCB8fCBtX3BTdHJlYW1BY2MtPkdldERhdGEoKSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBjb25zdCBDRlhfQnl0ZVN0cmluZyYgZGVjb2RlciA9IG1fcFN0cmVhbUFjYy0+R2V0SW1hZ2VEZWNvZGVyKCk7DQotICAgIGlmICghZGVjb2Rlci5Jc0VtcHR5KCkgJiYgZGVjb2RlciA9PSBGWF9CU1RSQygiQ0NJVFRGYXhEZWNvZGUiKSkgew0KLSAgICAgICAgbV9icGMgPSAxOw0KLSAgICB9DQotICAgIGludCByZXQgPSBDcmVhdGVEZWNvZGVyKCk7DQotICAgIGlmIChyZXQgIT0gMSkgew0KLSAgICAgICAgaWYgKCFyZXQpIHsNCi0gICAgICAgICAgICByZXR1cm4gcmV0Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCFDb250aW51ZVRvTG9hZE1hc2soKSkgew0KLSAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fYkhhc01hc2spIHsNCi0gICAgICAgICAgICBTdHJhdExvYWRNYXNrKCk7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gcmV0Ow0KLSAgICB9DQotICAgIGlmICghQ29udGludWVUb0xvYWRNYXNrKCkpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGlmIChtX2JIYXNNYXNrKSB7DQotICAgICAgICByZXQgPSBTdHJhdExvYWRNYXNrKCk7DQotICAgIH0NCi0gICAgaWYgKHJldCA9PSAyKSB7DQotICAgICAgICByZXR1cm4gcmV0Ow0KLSAgICB9DQotICAgIGlmIChtX3BDb2xvclNwYWNlICYmIG1fYlN0ZENTKSB7DQotICAgICAgICBtX3BDb2xvclNwYWNlLT5FbmFibGVTdGRDb252ZXJzaW9uKEZBTFNFKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gcmV0Ow0KLX0NCi1pbnQJQ1BERl9ESUJTb3VyY2U6OkNvbnRpbnVlTG9hZERJQlNvdXJjZShJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIEZYQ09ERUNfU1RBVFVTIHJldDsNCi0gICAgaWYgKG1fU3RhdHVzID09IDEpIHsNCi0gICAgICAgIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBkZWNvZGVyID0gbV9wU3RyZWFtQWNjLT5HZXRJbWFnZURlY29kZXIoKTsNCi0gICAgICAgIGlmIChkZWNvZGVyID09IEZYX0JTVFJDKCJKUFhEZWNvZGUiKSkgew0KLSAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgSUNvZGVjX0piaWcyTW9kdWxlKiBwSmJpZzJNb3VkbGUgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldEpiaWcyTW9kdWxlKCk7DQotICAgICAgICBpZiAobV9wSmJpZzJDb250ZXh0ID09IE5VTEwpIHsNCi0gICAgICAgICAgICBtX3BKYmlnMkNvbnRleHQgPSBwSmJpZzJNb3VkbGUtPkNyZWF0ZUpiaWcyQ29udGV4dCgpOw0KLSAgICAgICAgICAgIGlmIChtX3BTdHJlYW1BY2MtPkdldEltYWdlUGFyYW0oKSkgew0KLSAgICAgICAgICAgICAgICBDUERGX1N0cmVhbSogcEdsb2JhbHMgPSBtX3BTdHJlYW1BY2MtPkdldEltYWdlUGFyYW0oKS0+R2V0U3RyZWFtKEZYX0JTVFJDKCJKQklHMkdsb2JhbHMiKSk7DQotICAgICAgICAgICAgICAgIGlmIChwR2xvYmFscykgew0KLSAgICAgICAgICAgICAgICAgICAgbV9wR2xvYmFsU3RyZWFtID0gRlhfTkVXIENQREZfU3RyZWFtQWNjOw0KLSAgICAgICAgICAgICAgICAgICAgbV9wR2xvYmFsU3RyZWFtLT5Mb2FkQWxsRGF0YShwR2xvYmFscywgRkFMU0UpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldCA9IHBKYmlnMk1vdWRsZS0+U3RhcnREZWNvZGUobV9wSmJpZzJDb250ZXh0LCBtX1dpZHRoLCBtX0hlaWdodCwgbV9wU3RyZWFtQWNjLT5HZXREYXRhKCksIG1fcFN0cmVhbUFjYy0+R2V0U2l6ZSgpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wR2xvYmFsU3RyZWFtID8gbV9wR2xvYmFsU3RyZWFtLT5HZXREYXRhKCkgOiBOVUxMLCBtX3BHbG9iYWxTdHJlYW0gPyBtX3BHbG9iYWxTdHJlYW0tPkdldFNpemUoKSA6IDAsIG1fcENhY2hlZEJpdG1hcC0+R2V0QnVmZmVyKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BDYWNoZWRCaXRtYXAtPkdldFBpdGNoKCksIHBQYXVzZSk7DQotICAgICAgICAgICAgaWYgKHJldCA8IDApIHsNCi0gICAgICAgICAgICAgICAgZGVsZXRlIG1fcENhY2hlZEJpdG1hcDsNCi0gICAgICAgICAgICAgICAgbV9wQ2FjaGVkQml0bWFwID0gTlVMTDsNCi0gICAgICAgICAgICAgICAgaWYgKG1fcEdsb2JhbFN0cmVhbSkgew0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG1fcEdsb2JhbFN0cmVhbTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBtX3BHbG9iYWxTdHJlYW0gPSBOVUxMOw0KLSAgICAgICAgICAgICAgICBwSmJpZzJNb3VkbGUtPkRlc3Ryb3lKYmlnMkNvbnRleHQobV9wSmJpZzJDb250ZXh0KTsNCi0gICAgICAgICAgICAgICAgbV9wSmJpZzJDb250ZXh0ID0gTlVMTDsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChyZXQgPT0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gMjsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaW50IHJldDEgPSAxOw0KLSAgICAgICAgICAgIGlmIChtX2JIYXNNYXNrKSB7DQotICAgICAgICAgICAgICAgIHJldDEgPSBDb250aW51ZUxvYWRNYXNrRElCKHBQYXVzZSk7DQotICAgICAgICAgICAgICAgIG1fU3RhdHVzID0gMjsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKHJldDEgPT0gMikgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmV0MTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKG1fcENvbG9yU3BhY2UgJiYgbV9iU3RkQ1MpIHsNCi0gICAgICAgICAgICAgICAgbV9wQ29sb3JTcGFjZS0+RW5hYmxlU3RkQ29udmVyc2lvbihGQUxTRSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybiByZXQxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhDT0RFQ19TVEFUVVMgcmV0ID0gcEpiaWcyTW91ZGxlLT5Db250aW51ZURlY29kZShtX3BKYmlnMkNvbnRleHQsIHBQYXVzZSk7DQotICAgICAgICBpZiAocmV0IDwgMCkgew0KLSAgICAgICAgICAgIGRlbGV0ZSBtX3BDYWNoZWRCaXRtYXA7DQotICAgICAgICAgICAgbV9wQ2FjaGVkQml0bWFwID0gTlVMTDsNCi0gICAgICAgICAgICBpZiAobV9wR2xvYmFsU3RyZWFtKSB7DQotICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3BHbG9iYWxTdHJlYW07DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fcEdsb2JhbFN0cmVhbSA9IE5VTEw7DQotICAgICAgICAgICAgcEpiaWcyTW91ZGxlLT5EZXN0cm95SmJpZzJDb250ZXh0KG1fcEpiaWcyQ29udGV4dCk7DQotICAgICAgICAgICAgbV9wSmJpZzJDb250ZXh0ID0gTlVMTDsNCi0gICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChyZXQgPT0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRSkgew0KLSAgICAgICAgICAgIHJldHVybiAyOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW50IHJldDEgPSAxOw0KLSAgICAgICAgaWYgKG1fYkhhc01hc2spIHsNCi0gICAgICAgICAgICByZXQxID0gQ29udGludWVMb2FkTWFza0RJQihwUGF1c2UpOw0KLSAgICAgICAgICAgIG1fU3RhdHVzID0gMjsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChyZXQxID09IDIpIHsNCi0gICAgICAgICAgICByZXR1cm4gcmV0MTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX3BDb2xvclNwYWNlICYmIG1fYlN0ZENTKSB7DQotICAgICAgICAgICAgbV9wQ29sb3JTcGFjZS0+RW5hYmxlU3RkQ29udmVyc2lvbihGQUxTRSk7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gcmV0MTsNCi0gICAgfSBlbHNlIGlmIChtX1N0YXR1cyA9PSAyKSB7DQotICAgICAgICByZXR1cm4gQ29udGludWVMb2FkTWFza0RJQihwUGF1c2UpOw0KLSAgICB9DQotICAgIHJldHVybiAwOw0KLX0NCi1GWF9CT09MIENQREZfRElCU291cmNlOjpMb2FkQ29sb3JJbmZvKENQREZfRGljdGlvbmFyeSogcEZvcm1SZXNvdXJjZXMsIENQREZfRGljdGlvbmFyeSogcFBhZ2VSZXNvdXJjZXMpDQotew0KLSAgICBpZiAobV9wRGljdC0+R2V0SW50ZWdlcigiSW1hZ2VNYXNrIikpIHsNCi0gICAgICAgIG1fYkltYWdlTWFzayA9IFRSVUU7DQotICAgIH0NCi0gICAgaWYgKG1fYkltYWdlTWFzayB8fCAhbV9wRGljdC0+S2V5RXhpc3QoRlhfQlNUUkMoIkNvbG9yU3BhY2UiKSkpIHsNCi0gICAgICAgIGlmICghbV9iSW1hZ2VNYXNrKSB7DQotICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBGaWx0ZXIgPSBtX3BEaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkZpbHRlciIpKTsNCi0gICAgICAgICAgICBpZiAocEZpbHRlcikgew0KLSAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBmaWx0ZXI7DQotICAgICAgICAgICAgICAgIGlmIChwRmlsdGVyLT5HZXRUeXBlKCkgPT0gUERGT0JKX05BTUUpIHsNCi0gICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IHBGaWx0ZXItPkdldFN0cmluZygpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PSBGWF9CU1RSQygiSlBYRGVjb2RlIikpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwRmlsdGVyLT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICAgICAgICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSAoQ1BERl9BcnJheSopcEZpbHRlcjsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwQXJyYXktPkdldFN0cmluZyhwQXJyYXktPkdldENvdW50KCkgLSAxKSA9PSBGWF9CU1RSQygiSlBYRGVjb2RlIikpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIG1fYkltYWdlTWFzayA9IFRSVUU7DQotICAgICAgICBtX2JwYyA9IG1fbkNvbXBvbmVudHMgPSAxOw0KLSAgICAgICAgQ1BERl9BcnJheSogcERlY29kZSA9IG1fcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJEZWNvZGUiKSk7DQotICAgICAgICBtX2JEZWZhdWx0RGVjb2RlID0gcERlY29kZSA9PSBOVUxMIHx8IHBEZWNvZGUtPkdldEludGVnZXIoMCkgPT0gMDsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIENQREZfT2JqZWN0KiBwQ1NPYmogPSBtX3BEaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkNvbG9yU3BhY2UiKSk7DQotICAgIGlmIChwQ1NPYmogPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIENQREZfRG9jUGFnZURhdGEqIHBEb2NQYWdlRGF0YSA9IG1fcERvY3VtZW50LT5HZXRQYWdlRGF0YSgpOw0KLSAgICBpZiAocEZvcm1SZXNvdXJjZXMpIHsNCi0gICAgICAgIG1fcENvbG9yU3BhY2UgPSBwRG9jUGFnZURhdGEtPkdldENvbG9yU3BhY2UocENTT2JqLCBwRm9ybVJlc291cmNlcyk7DQotICAgIH0NCi0gICAgaWYgKG1fcENvbG9yU3BhY2UgPT0gTlVMTCkgew0KLSAgICAgICAgbV9wQ29sb3JTcGFjZSA9IHBEb2NQYWdlRGF0YS0+R2V0Q29sb3JTcGFjZShwQ1NPYmosIHBQYWdlUmVzb3VyY2VzKTsNCi0gICAgfQ0KLSAgICBpZiAobV9wQ29sb3JTcGFjZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbV9icGMgPSBtX3BEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJCaXRzUGVyQ29tcG9uZW50IikpOw0KLSAgICBtX0ZhbWlseSA9IG1fcENvbG9yU3BhY2UtPkdldEZhbWlseSgpOw0KLSAgICBtX25Db21wb25lbnRzID0gbV9wQ29sb3JTcGFjZS0+Q291bnRDb21wb25lbnRzKCk7DQotICAgIGlmIChtX0ZhbWlseSA9PSBQREZDU19JQ0NCQVNFRCAmJiBwQ1NPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfTkFNRSkgew0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3MgPSBwQ1NPYmotPkdldFN0cmluZygpOw0KLSAgICAgICAgaWYgKGNzID09IEZYX0JTVFJDKCJEZXZpY2VHcmF5IikpIHsNCi0gICAgICAgICAgICBtX25Db21wb25lbnRzID0gMTsNCi0gICAgICAgIH0gZWxzZSBpZiAoY3MgPT0gRlhfQlNUUkMoIkRldmljZVJHQiIpKSB7DQotICAgICAgICAgICAgbV9uQ29tcG9uZW50cyA9IDM7DQotICAgICAgICB9IGVsc2UgaWYgKGNzID09IEZYX0JTVFJDKCJEZXZpY2VDTVlLIikpIHsNCi0gICAgICAgICAgICBtX25Db21wb25lbnRzID0gNDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX3BDb21wRGF0YSA9IEZYX0FsbG9jKERJQl9DT01QX0RBVEEsIG1fbkNvbXBvbmVudHMpOw0KLSAgICBpZiAobV9icGMgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgaW50IG1heF9kYXRhID0gKDEgPDwgbV9icGMpIC0gMTsNCi0gICAgQ1BERl9BcnJheSogcERlY29kZSA9IG1fcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJEZWNvZGUiKSk7DQotICAgIGlmIChwRGVjb2RlKSB7DQotICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgbV9uQ29tcG9uZW50czsgaSArKykgew0KLSAgICAgICAgICAgIG1fcENvbXBEYXRhW2ldLm1fRGVjb2RlTWluID0gcERlY29kZS0+R2V0TnVtYmVyKGkgKiAyKTsNCi0gICAgICAgICAgICBGWF9GTE9BVCBtYXggPSBwRGVjb2RlLT5HZXROdW1iZXIoaSAqIDIgKyAxKTsNCi0gICAgICAgICAgICBtX3BDb21wRGF0YVtpXS5tX0RlY29kZVN0ZXAgPSAobWF4IC0gbV9wQ29tcERhdGFbaV0ubV9EZWNvZGVNaW4pIC8gbWF4X2RhdGE7DQotICAgICAgICAgICAgRlhfRkxPQVQgZGVmX3ZhbHVlLCBkZWZfbWluLCBkZWZfbWF4Ow0KLSAgICAgICAgICAgIG1fcENvbG9yU3BhY2UtPkdldERlZmF1bHRWYWx1ZShpLCBkZWZfdmFsdWUsIGRlZl9taW4sIGRlZl9tYXgpOw0KLSAgICAgICAgICAgIGlmIChtX0ZhbWlseSA9PSBQREZDU19JTkRFWEVEKSB7DQotICAgICAgICAgICAgICAgIGRlZl9tYXggPSAoRlhfRkxPQVQpbWF4X2RhdGE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChkZWZfbWluICE9IG1fcENvbXBEYXRhW2ldLm1fRGVjb2RlTWluIHx8IGRlZl9tYXggIT0gbWF4KSB7DQotICAgICAgICAgICAgICAgIG1fYkRlZmF1bHREZWNvZGUgPSBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgbV9uQ29tcG9uZW50czsgaSArKykgew0KLSAgICAgICAgICAgIEZYX0ZMT0FUIGRlZl92YWx1ZTsNCi0gICAgICAgICAgICBtX3BDb2xvclNwYWNlLT5HZXREZWZhdWx0VmFsdWUoaSwgZGVmX3ZhbHVlLCBtX3BDb21wRGF0YVtpXS5tX0RlY29kZU1pbiwgbV9wQ29tcERhdGFbaV0ubV9EZWNvZGVTdGVwKTsNCi0gICAgICAgICAgICBpZiAobV9GYW1pbHkgPT0gUERGQ1NfSU5ERVhFRCkgew0KLSAgICAgICAgICAgICAgICBtX3BDb21wRGF0YVtpXS5tX0RlY29kZVN0ZXAgPSAoRlhfRkxPQVQpbWF4X2RhdGE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fcENvbXBEYXRhW2ldLm1fRGVjb2RlU3RlcCA9IChtX3BDb21wRGF0YVtpXS5tX0RlY29kZVN0ZXAgLSBtX3BDb21wRGF0YVtpXS5tX0RlY29kZU1pbikgLyBtYXhfZGF0YTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoIW1fcERpY3QtPktleUV4aXN0KEZYX0JTVFJDKCJTTWFzayIpKSkgew0KLSAgICAgICAgQ1BERl9PYmplY3QqIHBNYXNrID0gbV9wRGljdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJNYXNrIikpOw0KLSAgICAgICAgaWYgKHBNYXNrID09IE5VTEwpIHsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwTWFzay0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgew0KLSAgICAgICAgICAgIENQREZfQXJyYXkqIHBBcnJheSA9IChDUERGX0FycmF5KilwTWFzazsNCi0gICAgICAgICAgICBpZiAocEFycmF5LT5HZXRDb3VudCgpID49IG1fbkNvbXBvbmVudHMgKiAyKQ0KLSAgICAgICAgICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgbV9uQ29tcG9uZW50cyAqIDI7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChpICUgMikgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcENvbXBEYXRhW2kgLyAyXS5tX0NvbG9yS2V5TWF4ID0gcEFycmF5LT5HZXRJbnRlZ2VyKGkpOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3BDb21wRGF0YVtpIC8gMl0ubV9Db2xvcktleU1pbiA9IHBBcnJheS0+R2V0SW50ZWdlcihpKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fYkNvbG9yS2V5ID0gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotSUNvZGVjX1NjYW5saW5lRGVjb2RlciogRlBERkFQSV9DcmVhdGVGYXhEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwNCi0gICAgICAgIGNvbnN0IENQREZfRGljdGlvbmFyeSogcFBhcmFtcyk7DQotSUNvZGVjX1NjYW5saW5lRGVjb2RlciogRlBERkFQSV9DcmVhdGVGbGF0ZURlY29kZXIoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KLSAgICAgICAgaW50IG5Db21wcywgaW50IGJwYywgY29uc3QgQ1BERl9EaWN0aW9uYXJ5KiBwUGFyYW1zKTsNCi1pbnQgQ1BERl9ESUJTb3VyY2U6OkNyZWF0ZURlY29kZXIoKQ0KLXsNCi0gICAgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGRlY29kZXIgPSBtX3BTdHJlYW1BY2MtPkdldEltYWdlRGVjb2RlcigpOw0KLSAgICBpZiAoZGVjb2Rlci5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotICAgIEZYX0xQQ0JZVEUgc3JjX2RhdGEgPSBtX3BTdHJlYW1BY2MtPkdldERhdGEoKTsNCi0gICAgRlhfRFdPUkQgc3JjX3NpemUgPSBtX3BTdHJlYW1BY2MtPkdldFNpemUoKTsNCi0gICAgY29uc3QgQ1BERl9EaWN0aW9uYXJ5KiBwUGFyYW1zID0gbV9wU3RyZWFtQWNjLT5HZXRJbWFnZVBhcmFtKCk7DQotICAgIGlmIChkZWNvZGVyID09IEZYX0JTVFJDKCJDQ0lUVEZheERlY29kZSIpKSB7DQotICAgICAgICBtX3BEZWNvZGVyID0gRlBERkFQSV9DcmVhdGVGYXhEZWNvZGVyKHNyY19kYXRhLCBzcmNfc2l6ZSwgbV9XaWR0aCwgbV9IZWlnaHQsIHBQYXJhbXMpOw0KLSAgICB9IGVsc2UgaWYgKGRlY29kZXIgPT0gRlhfQlNUUkMoIkRDVERlY29kZSIpKSB7DQotICAgICAgICBtX3BEZWNvZGVyID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRKcGVnTW9kdWxlKCktPkNyZWF0ZURlY29kZXIoc3JjX2RhdGEsIHNyY19zaXplLCBtX1dpZHRoLCBtX0hlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICBtX25Db21wb25lbnRzLCBwUGFyYW1zID8gcFBhcmFtcy0+R2V0SW50ZWdlcihGWF9CU1RSKCJDb2xvclRyYW5zZm9ybSIpLCAxKSA6IDEpOw0KLSAgICAgICAgaWYgKE5VTEwgPT0gbV9wRGVjb2Rlcikgew0KLSAgICAgICAgICAgIEZYX0JPT0wgYlRyYW5zZm9ybSA9IEZBTFNFOw0KLSAgICAgICAgICAgIGludCBjb21wcywgYnBjOw0KLSAgICAgICAgICAgIElDb2RlY19KcGVnTW9kdWxlKiBwSnBlZ01vZHVsZSA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0SnBlZ01vZHVsZSgpOw0KLSAgICAgICAgICAgIGlmIChwSnBlZ01vZHVsZS0+TG9hZEluZm8oc3JjX2RhdGEsIHNyY19zaXplLCBtX1dpZHRoLCBtX0hlaWdodCwgY29tcHMsIGJwYywgYlRyYW5zZm9ybSkpIHsNCi0gICAgICAgICAgICAgICAgbV9uQ29tcG9uZW50cyA9IGNvbXBzOw0KLSAgICAgICAgICAgICAgICBtX2JwYyA9IGJwYzsNCi0gICAgICAgICAgICAgICAgbV9wRGVjb2RlciA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0SnBlZ01vZHVsZSgpLT5DcmVhdGVEZWNvZGVyKHNyY19kYXRhLCBzcmNfc2l6ZSwgbV9XaWR0aCwgbV9IZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX25Db21wb25lbnRzLCBiVHJhbnNmb3JtKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZiAoZGVjb2RlciA9PSBGWF9CU1RSQygiRmxhdGVEZWNvZGUiKSkgew0KLSAgICAgICAgbV9wRGVjb2RlciA9IEZQREZBUElfQ3JlYXRlRmxhdGVEZWNvZGVyKHNyY19kYXRhLCBzcmNfc2l6ZSwgbV9XaWR0aCwgbV9IZWlnaHQsIG1fbkNvbXBvbmVudHMsIG1fYnBjLCBwUGFyYW1zKTsNCi0gICAgfSBlbHNlIGlmIChkZWNvZGVyID09IEZYX0JTVFJDKCJKUFhEZWNvZGUiKSkgew0KLSAgICAgICAgTG9hZEpweEJpdG1hcCgpOw0KLSAgICAgICAgcmV0dXJuIG1fcENhY2hlZEJpdG1hcCAhPSBOVUxMID8gMSA6IDA7DQotICAgIH0gZWxzZSBpZiAoZGVjb2RlciA9PSBGWF9CU1RSQygiSkJJRzJEZWNvZGUiKSkgew0KLSAgICAgICAgbV9wQ2FjaGVkQml0bWFwID0gRlhfTkVXIENGWF9ESUJpdG1hcDsNCi0gICAgICAgIGlmICghbV9wQ2FjaGVkQml0bWFwLT5DcmVhdGUobV9XaWR0aCwgbV9IZWlnaHQsIG1fYkltYWdlTWFzayA/IEZYRElCXzFicHBNYXNrIDogRlhESUJfMWJwcFJnYikpIHsNCi0gICAgICAgICAgICBkZWxldGUgbV9wQ2FjaGVkQml0bWFwOw0KLSAgICAgICAgICAgIG1fcENhY2hlZEJpdG1hcCA9IE5VTEw7DQotICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICB9DQotICAgICAgICBtX1N0YXR1cyA9IDE7DQotICAgICAgICByZXR1cm4gMjsNCi0gICAgfSBlbHNlIGlmIChkZWNvZGVyID09IEZYX0JTVFJDKCJSdW5MZW5ndGhEZWNvZGUiKSkgew0KLSAgICAgICAgbV9wRGVjb2RlciA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0QmFzaWNNb2R1bGUoKS0+Q3JlYXRlUnVuTGVuZ3RoRGVjb2RlcihzcmNfZGF0YSwgc3JjX3NpemUsIG1fV2lkdGgsIG1fSGVpZ2h0LCBtX25Db21wb25lbnRzLCBtX2JwYyk7DQotICAgIH0NCi0gICAgaWYgKG1fcERlY29kZXIpIHsNCi0gICAgICAgIGludCByZXF1ZXN0ZWRfcGl0Y2ggPSAobV9XaWR0aCAqIG1fbkNvbXBvbmVudHMgKiBtX2JwYyArIDcpIC8gODsNCi0gICAgICAgIGludCBwcm92aWRlZF9waXRjaCA9IChtX3BEZWNvZGVyLT5HZXRXaWR0aCgpICogbV9wRGVjb2Rlci0+Q291bnRDb21wcygpICogbV9wRGVjb2Rlci0+R2V0QlBDKCkgKyA3KSAvIDg7DQotICAgICAgICBpZiAocHJvdmlkZWRfcGl0Y2ggPCByZXF1ZXN0ZWRfcGl0Y2gpIHsNCi0gICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotICAgIHJldHVybiAwOw0KLX0NCi12b2lkIENQREZfRElCU291cmNlOjpMb2FkSnB4Qml0bWFwKCkNCi17DQotICAgIElDb2RlY19KcHhNb2R1bGUqIHBKcHhNb2R1bGUgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldEpweE1vZHVsZSgpOw0KLSAgICBpZiAocEpweE1vZHVsZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhfTFBWT0lEIGN0eCA9IHBKcHhNb2R1bGUtPkNyZWF0ZURlY29kZXIobV9wU3RyZWFtQWNjLT5HZXREYXRhKCksIG1fcFN0cmVhbUFjYy0+R2V0U2l6ZSgpLCBtX3BDb2xvclNwYWNlICE9IE5VTEwpOw0KLSAgICBpZiAoY3R4ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9EV09SRCB3aWR0aCA9IDAsIGhlaWdodCA9IDAsIGNvZGVzdHJlYW1fbkNvbXBzID0gMCwgaW1hZ2VfbkNvbXBzID0gMDsNCi0gICAgcEpweE1vZHVsZS0+R2V0SW1hZ2VJbmZvKGN0eCwgd2lkdGgsIGhlaWdodCwgY29kZXN0cmVhbV9uQ29tcHMsIGltYWdlX25Db21wcyk7DQotICAgIGlmICgoaW50KXdpZHRoIDwgbV9XaWR0aCB8fCAoaW50KWhlaWdodCA8IG1fSGVpZ2h0KSB7DQotICAgICAgICBwSnB4TW9kdWxlLT5EZXN0cm95RGVjb2RlcihjdHgpOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGludCBvdXRwdXRfbkNvbXBzOw0KLSAgICBGWF9CT09MIGJUcmFuc2xhdGVDb2xvciwgYlN3YXBSR0IgPSBGQUxTRTsNCi0gICAgaWYgKG1fcENvbG9yU3BhY2UpIHsNCi0gICAgICAgIGlmIChjb2Rlc3RyZWFtX25Db21wcyAhPSAoRlhfRFdPUkQpbV9wQ29sb3JTcGFjZS0+Q291bnRDb21wb25lbnRzKCkpIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBvdXRwdXRfbkNvbXBzID0gY29kZXN0cmVhbV9uQ29tcHM7DQotICAgICAgICBiVHJhbnNsYXRlQ29sb3IgPSBGQUxTRTsNCi0gICAgICAgIGlmIChtX3BDb2xvclNwYWNlID09IENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19ERVZJQ0VSR0IpKSB7DQotICAgICAgICAgICAgYlN3YXBSR0IgPSBUUlVFOw0KLSAgICAgICAgICAgIG1fcENvbG9yU3BhY2UgPSBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgYlRyYW5zbGF0ZUNvbG9yID0gVFJVRTsNCi0gICAgICAgIGlmIChpbWFnZV9uQ29tcHMpIHsNCi0gICAgICAgICAgICBvdXRwdXRfbkNvbXBzID0gaW1hZ2VfbkNvbXBzOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBvdXRwdXRfbkNvbXBzID0gY29kZXN0cmVhbV9uQ29tcHM7DQotICAgICAgICB9DQotICAgICAgICBpZiAob3V0cHV0X25Db21wcyA9PSAzKSB7DQotICAgICAgICAgICAgYlN3YXBSR0IgPSBUUlVFOw0KLSAgICAgICAgfSBlbHNlIGlmIChvdXRwdXRfbkNvbXBzID09IDQpIHsNCi0gICAgICAgICAgICBtX3BDb2xvclNwYWNlID0gQ1BERl9Db2xvclNwYWNlOjpHZXRTdG9ja0NTKFBERkNTX0RFVklDRUNNWUspOw0KLSAgICAgICAgICAgIGJUcmFuc2xhdGVDb2xvciA9IEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9uQ29tcG9uZW50cyA9IG91dHB1dF9uQ29tcHM7DQotICAgIH0NCi0gICAgRlhESUJfRm9ybWF0IGZvcm1hdDsNCi0gICAgaWYgKG91dHB1dF9uQ29tcHMgPT0gMSkgew0KLSAgICAgICAgZm9ybWF0ID0gRlhESUJfOGJwcFJnYjsNCi0gICAgfSBlbHNlIGlmIChvdXRwdXRfbkNvbXBzIDw9IDMpIHsNCi0gICAgICAgIGZvcm1hdCA9IEZYRElCX1JnYjsNCi0gICAgfSBlbHNlIGlmIChvdXRwdXRfbkNvbXBzID09IDQpIHsNCi0gICAgICAgIGZvcm1hdCA9IEZYRElCX1JnYjMyOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgd2lkdGggPSAod2lkdGggKiBvdXRwdXRfbkNvbXBzICsgMikgLyAzOw0KLSAgICAgICAgZm9ybWF0ID0gRlhESUJfUmdiOw0KLSAgICB9DQotICAgIG1fcENhY2hlZEJpdG1hcCA9IEZYX05FVyBDRlhfRElCaXRtYXA7DQotICAgIGlmICghbV9wQ2FjaGVkQml0bWFwLT5DcmVhdGUod2lkdGgsIGhlaWdodCwgZm9ybWF0KSkgew0KLSAgICAgICAgZGVsZXRlIG1fcENhY2hlZEJpdG1hcDsNCi0gICAgICAgIG1fcENhY2hlZEJpdG1hcCA9IE5VTEw7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbV9wQ2FjaGVkQml0bWFwLT5DbGVhcigweEZGRkZGRkZGKTsNCi0gICAgRlhfTFBCWVRFIG91dHB1dF9vZmZzZXRzID0gRlhfQWxsb2MoRlhfQllURSwgb3V0cHV0X25Db21wcyk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3V0cHV0X25Db21wczsgaSArKykgew0KLSAgICAgICAgb3V0cHV0X29mZnNldHNbaV0gPSBpOw0KLSAgICB9DQotICAgIGlmIChiU3dhcFJHQikgew0KLSAgICAgICAgb3V0cHV0X29mZnNldHNbMF0gPSAyOw0KLSAgICAgICAgb3V0cHV0X29mZnNldHNbMl0gPSAwOw0KLSAgICB9DQotICAgIGlmICghcEpweE1vZHVsZS0+RGVjb2RlKGN0eCwgbV9wQ2FjaGVkQml0bWFwLT5HZXRCdWZmZXIoKSwgbV9wQ2FjaGVkQml0bWFwLT5HZXRQaXRjaCgpLCBiVHJhbnNsYXRlQ29sb3IsIG91dHB1dF9vZmZzZXRzKSkgew0KLSAgICAgICAgZGVsZXRlIG1fcENhY2hlZEJpdG1hcDsNCi0gICAgICAgIG1fcENhY2hlZEJpdG1hcCA9IE5VTEw7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhfRnJlZShvdXRwdXRfb2Zmc2V0cyk7DQotICAgIHBKcHhNb2R1bGUtPkRlc3Ryb3lEZWNvZGVyKGN0eCk7DQotICAgIGlmIChtX3BDb2xvclNwYWNlICYmIG1fcENvbG9yU3BhY2UtPkdldEZhbWlseSgpID09IFBERkNTX0lOREVYRUQgJiYgbV9icGMgPCA4KSB7DQotICAgICAgICBpbnQgc2NhbGUgPSA4IC0gbV9icGM7DQotICAgICAgICBmb3IgKEZYX0RXT1JEIHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7DQotICAgICAgICAgICAgRlhfTFBCWVRFIHNjYW5saW5lID0gKEZYX0xQQllURSltX3BDYWNoZWRCaXRtYXAtPkdldFNjYW5saW5lKHJvdyk7DQotICAgICAgICAgICAgZm9yIChGWF9EV09SRCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICpzY2FubGluZSA9ICgqc2NhbmxpbmUpID4+IHNjYWxlOw0KLSAgICAgICAgICAgICAgICBzY2FubGluZSsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX2JwYyA9IDg7DQotfQ0KLXZvaWQgQ1BERl9ESUJTb3VyY2U6OkxvYWRKYmlnMkJpdG1hcCgpDQotew0KLSAgICBJQ29kZWNfSmJpZzJNb2R1bGUqIHBKYmlnMk1vZHVsZSA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0SmJpZzJNb2R1bGUoKTsNCi0gICAgaWYgKHBKYmlnMk1vZHVsZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9TdHJlYW1BY2MqIHBHbG9iYWxTdHJlYW0gPSBOVUxMOw0KLSAgICBpZiAobV9wU3RyZWFtQWNjLT5HZXRJbWFnZVBhcmFtKCkpIHsNCi0gICAgICAgIENQREZfU3RyZWFtKiBwR2xvYmFscyA9IG1fcFN0cmVhbUFjYy0+R2V0SW1hZ2VQYXJhbSgpLT5HZXRTdHJlYW0oRlhfQlNUUkMoIkpCSUcyR2xvYmFscyIpKTsNCi0gICAgICAgIGlmIChwR2xvYmFscykgew0KLSAgICAgICAgICAgIHBHbG9iYWxTdHJlYW0gPSBGWF9ORVcgQ1BERl9TdHJlYW1BY2M7DQotICAgICAgICAgICAgcEdsb2JhbFN0cmVhbS0+TG9hZEFsbERhdGEocEdsb2JhbHMsIEZBTFNFKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX3BDYWNoZWRCaXRtYXAgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOw0KLSAgICBpZiAoIW1fcENhY2hlZEJpdG1hcC0+Q3JlYXRlKG1fV2lkdGgsIG1fSGVpZ2h0LCBtX2JJbWFnZU1hc2sgPyBGWERJQl8xYnBwTWFzayA6IEZYRElCXzFicHBSZ2IpKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaW50IHJldCA9IHBKYmlnMk1vZHVsZS0+RGVjb2RlKG1fV2lkdGgsIG1fSGVpZ2h0LCBtX3BTdHJlYW1BY2MtPkdldERhdGEoKSwgbV9wU3RyZWFtQWNjLT5HZXRTaXplKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwR2xvYmFsU3RyZWFtID8gcEdsb2JhbFN0cmVhbS0+R2V0RGF0YSgpIDogTlVMTCwgcEdsb2JhbFN0cmVhbSA/IHBHbG9iYWxTdHJlYW0tPkdldFNpemUoKSA6IDAsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BDYWNoZWRCaXRtYXAtPkdldEJ1ZmZlcigpLCBtX3BDYWNoZWRCaXRtYXAtPkdldFBpdGNoKCkpOw0KLSAgICBpZiAocmV0IDwgMCkgew0KLSAgICAgICAgZGVsZXRlIG1fcENhY2hlZEJpdG1hcDsNCi0gICAgICAgIG1fcENhY2hlZEJpdG1hcCA9IE5VTEw7DQotICAgIH0NCi0gICAgaWYgKHBHbG9iYWxTdHJlYW0pIHsNCi0gICAgICAgIGRlbGV0ZSBwR2xvYmFsU3RyZWFtOw0KLSAgICB9DQotICAgIG1fYnBjID0gMTsNCi0gICAgbV9uQ29tcG9uZW50cyA9IDE7DQotfQ0KLUNQREZfRElCU291cmNlKiBDUERGX0RJQlNvdXJjZTo6TG9hZE1hc2soRlhfRFdPUkQmIE1hdHRlQ29sb3IpDQotew0KLSAgICBNYXR0ZUNvbG9yID0gMHhmZmZmZmZmZjsNCi0gICAgQ1BERl9TdHJlYW0qIHBTb2Z0TWFzayA9IG1fcERpY3QtPkdldFN0cmVhbShGWF9CU1RSQygiU01hc2siKSk7DQotICAgIGlmIChwU29mdE1hc2spIHsNCi0gICAgICAgIENQREZfQXJyYXkqIHBNYXR0ZSA9IHBTb2Z0TWFzay0+R2V0RGljdCgpLT5HZXRBcnJheShGWF9CU1RSQygiTWF0dGUiKSk7DQotICAgICAgICBpZiAocE1hdHRlICE9IE5VTEwgJiYgbV9wQ29sb3JTcGFjZSAmJiAoRlhfRFdPUkQpbV9wQ29sb3JTcGFjZS0+Q291bnRDb21wb25lbnRzKCkgPD0gbV9uQ29tcG9uZW50cykgew0KLSAgICAgICAgICAgIEZYX0ZMT0FUKiBwQ29sb3IgPSBGWF9BbGxvYyhGWF9GTE9BVCwgbV9uQ29tcG9uZW50cyk7DQotICAgICAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IG1fbkNvbXBvbmVudHM7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgcENvbG9yW2ldID0gcE1hdHRlLT5HZXRGbG9hdChpKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgRlhfRkxPQVQgUiwgRywgQjsNCi0gICAgICAgICAgICBtX3BDb2xvclNwYWNlLT5HZXRSR0IocENvbG9yLCBSLCBHLCBCKTsNCi0gICAgICAgICAgICBGWF9GcmVlKHBDb2xvcik7DQotICAgICAgICAgICAgTWF0dGVDb2xvciA9IEZYQVJHQl9NQUtFKDAsIEZYU1lTX3JvdW5kKFIgKiAyNTUpLCBGWFNZU19yb3VuZChHICogMjU1KSwgRlhTWVNfcm91bmQoQiAqIDI1NSkpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIExvYWRNYXNrRElCKHBTb2Z0TWFzayk7DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QqIHBNYXNrID0gbV9wRGljdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJNYXNrIikpOw0KLSAgICBpZiAocE1hc2sgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKHBNYXNrLT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUkVBTSkgew0KLSAgICAgICAgcmV0dXJuIExvYWRNYXNrRElCKChDUERGX1N0cmVhbSopcE1hc2spOw0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1pbnQJQ1BERl9ESUJTb3VyY2U6OlN0cmF0TG9hZE1hc2soKQ0KLXsNCi0gICAgbV9NYXR0ZUNvbG9yID0gMHhmZmZmZmZmZjsNCi0gICAgbV9wTWFza1N0cmVhbSA9IG1fcERpY3QtPkdldFN0cmVhbShGWF9CU1RSQygiU01hc2siKSk7DQotICAgIGlmIChtX3BNYXNrU3RyZWFtKSB7DQotICAgICAgICBDUERGX0FycmF5KiBwTWF0dGUgPSBtX3BNYXNrU3RyZWFtLT5HZXREaWN0KCktPkdldEFycmF5KEZYX0JTVFJDKCJNYXR0ZSIpKTsNCi0gICAgICAgIGlmIChwTWF0dGUgIT0gTlVMTCAmJiBtX3BDb2xvclNwYWNlICYmIChGWF9EV09SRCltX3BDb2xvclNwYWNlLT5Db3VudENvbXBvbmVudHMoKSA8PSBtX25Db21wb25lbnRzKSB7DQotICAgICAgICAgICAgRlhfRkxPQVQgUiwgRywgQjsNCi0gICAgICAgICAgICBGWF9GTE9BVCogcENvbG9yID0gRlhfQWxsb2MoRlhfRkxPQVQsIG1fbkNvbXBvbmVudHMpOw0KLSAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBtX25Db21wb25lbnRzOyBpICsrKSB7DQotICAgICAgICAgICAgICAgIHBDb2xvcltpXSA9IHBNYXR0ZS0+R2V0RmxvYXQoaSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fcENvbG9yU3BhY2UtPkdldFJHQihwQ29sb3IsIFIsIEcsIEIpOw0KLSAgICAgICAgICAgIEZYX0ZyZWUocENvbG9yKTsNCi0gICAgICAgICAgICBtX01hdHRlQ29sb3IgPSBGWEFSR0JfTUFLRSgwLCBGWFNZU19yb3VuZChSICogMjU1KSwgRlhTWVNfcm91bmQoRyAqIDI1NSksIEZYU1lTX3JvdW5kKEIgKiAyNTUpKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBTdGFydExvYWRNYXNrRElCKCk7DQotICAgIH0NCi0gICAgbV9wTWFza1N0cmVhbSA9IG1fcERpY3QtPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiTWFzayIpKTsNCi0gICAgaWYgKG1fcE1hc2tTdHJlYW0gPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIDE7DQotICAgIH0NCi0gICAgaWYgKG1fcE1hc2tTdHJlYW0tPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSRUFNKSB7DQotICAgICAgICByZXR1cm4gU3RhcnRMb2FkTWFza0RJQigpOw0KLSAgICB9DQotICAgIHJldHVybiAxOw0KLX0NCi1pbnQJQ1BERl9ESUJTb3VyY2U6OkNvbnRpbnVlTG9hZE1hc2tESUIoSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBpZiAobV9wTWFzayA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMTsNCi0gICAgfQ0KLSAgICBpbnQgcmV0ID0gbV9wTWFzay0+Q29udGludWVMb2FkRElCU291cmNlKHBQYXVzZSk7DQotICAgIGlmIChyZXQgPT0gMikgew0KLSAgICAgICAgcmV0dXJuIHJldDsNCi0gICAgfQ0KLSAgICBpZiAobV9wQ29sb3JTcGFjZSAmJiBtX2JTdGRDUykgew0KLSAgICAgICAgbV9wQ29sb3JTcGFjZS0+RW5hYmxlU3RkQ29udmVyc2lvbihGQUxTRSk7DQotICAgIH0NCi0gICAgaWYgKCFyZXQpIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BNYXNrOw0KLSAgICAgICAgbV9wTWFzayA9IE5VTEw7DQotICAgICAgICByZXR1cm4gcmV0Ow0KLSAgICB9DQotICAgIHJldHVybiAxOw0KLX0NCi1DUERGX0RJQlNvdXJjZSoJQ1BERl9ESUJTb3VyY2U6OkRldGFjaE1hc2soKQ0KLXsNCi0gICAgQ1BERl9ESUJTb3VyY2UqIHBESUJTb3VyY2UgPSBtX3BNYXNrOw0KLSAgICBtX3BNYXNrID0gTlVMTDsNCi0gICAgcmV0dXJuIHBESUJTb3VyY2U7DQotfQ0KLUNQREZfRElCU291cmNlKiBDUERGX0RJQlNvdXJjZTo6TG9hZE1hc2tESUIoQ1BERl9TdHJlYW0qIHBNYXNrKQ0KLXsNCi0gICAgQ1BERl9ESUJTb3VyY2UqIHBNYXNrU291cmNlID0gRlhfTkVXIENQREZfRElCU291cmNlOw0KLSAgICBpZiAoIXBNYXNrU291cmNlLT5Mb2FkKG1fcERvY3VtZW50LCBwTWFzaywgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgVFJVRSkpIHsNCi0gICAgICAgIGRlbGV0ZSBwTWFza1NvdXJjZTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiBwTWFza1NvdXJjZTsNCi19DQotaW50IENQREZfRElCU291cmNlOjpTdGFydExvYWRNYXNrRElCKCkNCi17DQotICAgIG1fcE1hc2sgPSBGWF9ORVcgQ1BERl9ESUJTb3VyY2U7DQotICAgIGludCByZXQgPSBtX3BNYXNrLT5TdGFydExvYWRESUJTb3VyY2UobV9wRG9jdW1lbnQsIChDUERGX1N0cmVhbSopbV9wTWFza1N0cmVhbSwgRkFMU0UsIE5VTEwsIE5VTEwsIFRSVUUpOw0KLSAgICBpZiAocmV0ID09IDIpIHsNCi0gICAgICAgIGlmIChtX1N0YXR1cyA9PSAwKSB7DQotICAgICAgICAgICAgbV9TdGF0dXMgPSAyOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIDI7DQotICAgIH0NCi0gICAgaWYgKCFyZXQpIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BNYXNrOw0KLSAgICAgICAgbV9wTWFzayA9IE5VTEw7DQotICAgICAgICByZXR1cm4gMTsNCi0gICAgfQ0KLSAgICByZXR1cm4gMTsNCi19DQotdm9pZCBDUERGX0RJQlNvdXJjZTo6TG9hZFBhbGV0dGUoKQ0KLXsNCi0gICAgaWYgKG1fYnBjICogbV9uQ29tcG9uZW50cyA+IDgpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAobV9wQ29sb3JTcGFjZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKG1fYnBjICogbV9uQ29tcG9uZW50cyA9PSAxKSB7DQotICAgICAgICBpZiAobV9iRGVmYXVsdERlY29kZSAmJiAobV9GYW1pbHkgPT0gUERGQ1NfREVWSUNFR1JBWSB8fCBtX0ZhbWlseSA9PSBQREZDU19ERVZJQ0VSR0IpKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fcENvbG9yU3BhY2UtPkNvdW50Q29tcG9uZW50cygpID4gMykgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0ZMT0FUIGNvbG9yX3ZhbHVlc1szXTsNCi0gICAgICAgIGNvbG9yX3ZhbHVlc1swXSA9IG1fcENvbXBEYXRhWzBdLm1fRGVjb2RlTWluOw0KLSAgICAgICAgY29sb3JfdmFsdWVzWzFdID0gY29sb3JfdmFsdWVzWzJdID0gY29sb3JfdmFsdWVzWzBdOw0KLSAgICAgICAgRlhfRkxPQVQgUiwgRywgQjsNCi0gICAgICAgIG1fcENvbG9yU3BhY2UtPkdldFJHQihjb2xvcl92YWx1ZXMsIFIsIEcsIEIpOw0KLSAgICAgICAgRlhfQVJHQiBhcmdiMCA9IEFyZ2JFbmNvZGUoMjU1LCBGWFNZU19yb3VuZChSICogMjU1KSwgRlhTWVNfcm91bmQoRyAqIDI1NSksIEZYU1lTX3JvdW5kKEIgKiAyNTUpKTsNCi0gICAgICAgIGNvbG9yX3ZhbHVlc1swXSArPSBtX3BDb21wRGF0YVswXS5tX0RlY29kZVN0ZXA7DQotICAgICAgICBjb2xvcl92YWx1ZXNbMV0gKz0gbV9wQ29tcERhdGFbMF0ubV9EZWNvZGVTdGVwOw0KLSAgICAgICAgY29sb3JfdmFsdWVzWzJdICs9IG1fcENvbXBEYXRhWzBdLm1fRGVjb2RlU3RlcDsNCi0gICAgICAgIG1fcENvbG9yU3BhY2UtPkdldFJHQihjb2xvcl92YWx1ZXMsIFIsIEcsIEIpOw0KLSAgICAgICAgRlhfQVJHQiBhcmdiMSA9IEFyZ2JFbmNvZGUoMjU1LCBGWFNZU19yb3VuZChSICogMjU1KSwgRlhTWVNfcm91bmQoRyAqIDI1NSksIEZYU1lTX3JvdW5kKEIgKiAyNTUpKTsNCi0gICAgICAgIGlmIChhcmdiMCAhPSAweEZGMDAwMDAwIHx8IGFyZ2IxICE9IDB4RkZGRkZGRkYpIHsNCi0gICAgICAgICAgICBTZXRQYWxldHRlQXJnYigwLCBhcmdiMCk7DQotICAgICAgICAgICAgU2V0UGFsZXR0ZUFyZ2IoMSwgYXJnYjEpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChtX3BDb2xvclNwYWNlID09IENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19ERVZJQ0VHUkFZKSAmJiBtX2JwYyA9PSA4ICYmIG1fYkRlZmF1bHREZWNvZGUpIHsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGludCBwYWxldHRlX2NvdW50ID0gMSA8PCAobV9icGMgKiBtX25Db21wb25lbnRzKTsNCi0gICAgICAgIENGWF9GaXhlZEJ1Zkdyb3c8RlhfRkxPQVQsIDE2PiBjb2xvcl92YWx1ZXMobV9uQ29tcG9uZW50cyk7DQotICAgICAgICBGWF9GTE9BVCogY29sb3JfdmFsdWUgPSBjb2xvcl92YWx1ZXM7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhbGV0dGVfY291bnQ7IGkgKyspIHsNCi0gICAgICAgICAgICBpbnQgY29sb3JfZGF0YSA9IGk7DQotICAgICAgICAgICAgZm9yIChGWF9EV09SRCBqID0gMDsgaiA8IG1fbkNvbXBvbmVudHM7IGogKyspIHsNCi0gICAgICAgICAgICAgICAgaW50IGVuY29kZWRfY29tcG9uZW50ID0gY29sb3JfZGF0YSAlICgxIDw8IG1fYnBjKTsNCi0gICAgICAgICAgICAgICAgY29sb3JfZGF0YSAvPSAxIDw8IG1fYnBjOw0KLSAgICAgICAgICAgICAgICBjb2xvcl92YWx1ZVtqXSA9IG1fcENvbXBEYXRhW2pdLm1fRGVjb2RlTWluICsgbV9wQ29tcERhdGFbal0ubV9EZWNvZGVTdGVwICogZW5jb2RlZF9jb21wb25lbnQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIEZYX0ZMT0FUIFIgPSAwLCBHID0gMCwgQiA9IDA7DQotICAgICAgICAgICAgaWYgKG1fbkNvbXBvbmVudHMgPT0gMSAmJiBtX0ZhbWlseSA9PSBQREZDU19JQ0NCQVNFRCAmJiBtX3BDb2xvclNwYWNlLT5Db3VudENvbXBvbmVudHMoKSA+IDEpIHsNCi0gICAgICAgICAgICAgICAgaW50IG5Db21wb25lbnRzID0gbV9wQ29sb3JTcGFjZS0+Q291bnRDb21wb25lbnRzKCk7DQotICAgICAgICAgICAgICAgIEZYX0ZMT0FUKiB0ZW1wX2J1ZiA9IEZYX0FsbG9jKEZYX0ZMT0FULCBuQ29tcG9uZW50cyk7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkNvbXBvbmVudHM7IGkrKykgew0KLSAgICAgICAgICAgICAgICAgICAgdGVtcF9idWZbaV0gPSAqY29sb3JfdmFsdWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbV9wQ29sb3JTcGFjZS0+R2V0UkdCKHRlbXBfYnVmLCBSLCBHLCBCKTsNCi0gICAgICAgICAgICAgICAgRlhfRnJlZSh0ZW1wX2J1Zik7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgbV9wQ29sb3JTcGFjZS0+R2V0UkdCKGNvbG9yX3ZhbHVlLCBSLCBHLCBCKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgU2V0UGFsZXR0ZUFyZ2IoaSwgQXJnYkVuY29kZSgyNTUsIEZYU1lTX3JvdW5kKFIgKiAyNTUpLCBGWFNZU19yb3VuZChHICogMjU1KSwgRlhTWVNfcm91bmQoQiAqIDI1NSkpKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi0NCi1GWF9EV09SRCBDUERGX0RJQlNvdXJjZTo6R2V0VmFsaWRCcHAoKSBjb25zdA0KLXsNCi0gICAgRlhfRFdPUkQgYnBjID0gbV9icGM7DQotICAgIENQREZfT2JqZWN0ICogcEZpbHRlciA9IG1fcERpY3QtPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiRmlsdGVyIikpOw0KLSAgICBpZihwRmlsdGVyKQ0KLSAgICB7DQotICAgICAgICBpZihwRmlsdGVyLT5HZXRUeXBlKCkgPT0gUERGT0JKX05BTUUpDQotICAgICAgICB7DQotICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgZmlsdGVyID0gcEZpbHRlci0+R2V0U3RyaW5nKCk7DQotICAgICAgICAgICAgaWYoZmlsdGVyID09IEZYX0JTVFJDKCJDQ0lUVEZheERlY29kZSIpIHx8IGZpbHRlciA9PSBGWF9CU1RSQygiSkJJRzJEZWNvZGUiKSApDQotICAgICAgICAgICAgICAgIGJwYyA9IDE7DQotICAgICAgICAgICAgaWYoZmlsdGVyID09IEZYX0JTVFJDKCJSdW5MZW5ndGhEZWNvZGUiKSB8fCBmaWx0ZXIgPT0gRlhfQlNUUkMoIkRDVERlY29kZSIpICkNCi0gICAgICAgICAgICAgICAgYnBjID0gODsNCi0gICAgICAgIH0NCi0gICAgICAgIGVsc2UgaWYgKHBGaWx0ZXItPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpDQotICAgICAgICB7DQotICAgICAgICAgICAgIENQREZfQXJyYXkgKnBBcnJheSA9IChDUERGX0FycmF5ICopIHBGaWx0ZXI7DQotICAgICAgICAgICAgIGlmKCBwQXJyYXktPkdldFN0cmluZyhwQXJyYXktPkdldENvdW50KCkgLTEpID09IEZYX0JTVFJDKCJDQ0lUVEZhY0RlY29kZSIpIHx8DQotICAgICAgICAgICAgICAgICBwQXJyYXktPkdldFN0cmluZyhwQXJyYXktPkdldENvdW50KCkgLTEpID09IEZYX0JTVFJDKCJKQklHMkRlY29kZSIpICkNCi0gICAgICAgICAgICAgICAgIGJwYyA9IDE7DQotDQotICAgICAgICAgICAgICBpZiggcEFycmF5LT5HZXRTdHJpbmcocEFycmF5LT5HZXRDb3VudCgpIC0xKSA9PSBGWF9CU1RSQygiUnVuTGVuZ3RoRGVjb2RlIikgfHwNCi0gICAgICAgICAgICAgICAgIHBBcnJheS0+R2V0U3RyaW5nKHBBcnJheS0+R2V0Q291bnQoKSAtMSkgPT0gRlhfQlNUUkMoIkRDVERlY29kZSIpICkNCi0gICAgICAgICAgICAgICAgIGJwYyA9IDg7DQotICAgICAgICAgfQ0KLSAgICAgfQ0KLQ0KLSAgICByZXR1cm4gYnBjOw0KLX0NCi0NCi0jZGVmaW5lIE5PUk1BTENPTE9SX01BWChjb2xvciwgbWF4KSAoY29sb3IpID4gKG1heCkgPyAobWF4KSA6IChjb2xvcikgPCAwID8gMCA6IChjb2xvcik7DQotdm9pZCBDUERGX0RJQlNvdXJjZTo6VHJhbnNsYXRlU2NhbmxpbmUyNGJwcChGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuKSBjb25zdA0KLXsNCi0gICAgaW50IG1heF9kYXRhID0gKDEgPDwgbV9icGMpIC0gMTsNCi0gICAgaWYgKG1fYkRlZmF1bHREZWNvZGUpIHsNCi0gICAgICAgIGlmIChtX0ZhbWlseSA9PSBQREZDU19ERVZJQ0VSR0IgfHwgbV9GYW1pbHkgPT0gUERGQ1NfQ0FMUkdCKSB7DQotICAgICAgICAgICAgaWYgKG1fYnBjID09IDE2KSB7DQotICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3BvcyA9IGRlc3Rfc2NhbjsNCi0gICAgICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfcG9zID0gc3JjX3NjYW47DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gc3JjX3Bvc1s0XTsNCi0gICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19wb3NbMl07DQotICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3BvczsNCi0gICAgICAgICAgICAgICAgICAgIHNyY19wb3MgKz0gNjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobV9icGMgPT0gOCkgew0KLSAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9wb3MgPSBkZXN0X3NjYW47DQotICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3BvcyA9IHNyY19zY2FuOw0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBtX1dpZHRoOyBjb2x1bW4gKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19wb3NbMl07DQotICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSBzcmNfcG9zWzFdOw0KLSAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19wb3M7DQotICAgICAgICAgICAgICAgICAgICBzcmNfcG9zICs9IDM7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBpbnQgc3JjX2JpdF9wb3MgPSAwOw0KLSAgICAgICAgICAgICAgICBpbnQgZGVzdF9ieXRlX3BvcyA9IDA7DQotDQotICAgICAgICAgICAgICAgIEZYX0RXT1JEIGJwYyA9IEdldFZhbGlkQnBwKCk7DQotDQotICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IG1fV2lkdGg7IGNvbHVtbiArKykgew0KLSAgICAgICAgICAgICAgICAgICAgaW50IFIgPSBfR2V0Qml0czgoc3JjX3NjYW4sIHNyY19iaXRfcG9zLCBicGMpOw0KLSAgICAgICAgICAgICAgICAgICAgc3JjX2JpdF9wb3MgKz0gYnBjOw0KLSAgICAgICAgICAgICAgICAgICAgaW50IEcgPSBfR2V0Qml0czgoc3JjX3NjYW4sIHNyY19iaXRfcG9zLCBicGMpOw0KLSAgICAgICAgICAgICAgICAgICAgc3JjX2JpdF9wb3MgKz0gYnBjOw0KLSAgICAgICAgICAgICAgICAgICAgaW50IEIgPSBfR2V0Qml0czgoc3JjX3NjYW4sIHNyY19iaXRfcG9zLCBicGMpOw0KLSAgICAgICAgICAgICAgICAgICAgc3JjX2JpdF9wb3MgKz0gYnBjOw0KLSAgICAgICAgICAgICAgICAgICAgUiA9IE5PUk1BTENPTE9SX01BWChSLCBtYXhfZGF0YSk7DQotICAgICAgICAgICAgICAgICAgICBHID0gTk9STUFMQ09MT1JfTUFYKEcsIG1heF9kYXRhKTsNCi0gICAgICAgICAgICAgICAgICAgIEIgPSBOT1JNQUxDT0xPUl9NQVgoQiwgbWF4X2RhdGEpOw0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfYnl0ZV9wb3NdID0gQiAqIDI1NSAvIG1heF9kYXRhOw0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfYnl0ZV9wb3MgKyAxXSA9IEcgKiAyNTUgLyBtYXhfZGF0YTsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X2J5dGVfcG9zICsgMl0gPSBSICogMjU1IC8gbWF4X2RhdGE7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X2J5dGVfcG9zICs9IDM7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfSBlbHNlIGlmIChtX2JwYyA9PSA4KSB7DQotCQkJaWYgKG1fbkNvbXBvbmVudHMgPT0gbV9wQ29sb3JTcGFjZS0+Q291bnRDb21wb25lbnRzKCkpDQotCQkJCW1fcENvbG9yU3BhY2UtPlRyYW5zbGF0ZUltYWdlTGluZShkZXN0X3NjYW4sIHNyY19zY2FuLCBtX1dpZHRoLCBtX1dpZHRoLCBtX0hlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9iTG9hZE1hc2sgJiYgbV9Hcm91cEZhbWlseSA9PSBQREZDU19ERVZJQ0VDTVlLICYmIG1fRmFtaWx5ID09IFBERkNTX0RFVklDRUNNWUspOw0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDRlhfRml4ZWRCdWZHcm93PEZYX0ZMT0FULCAxNj4gY29sb3JfdmFsdWVzMShtX25Db21wb25lbnRzKTsNCi0gICAgRlhfRkxPQVQqIGNvbG9yX3ZhbHVlcyA9IGNvbG9yX3ZhbHVlczE7DQotICAgIEZYX0ZMT0FUIFIsIEcsIEI7DQotICAgIGlmIChtX2JwYyA9PSA4KSB7DQotICAgICAgICBpbnQgc3JjX2J5dGVfcG9zID0gMDsNCi0gICAgICAgIGludCBkZXN0X2J5dGVfcG9zID0gMDsNCi0gICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IG1fV2lkdGg7IGNvbHVtbiArKykgew0KLSAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgY29sb3IgPSAwOyBjb2xvciA8IG1fbkNvbXBvbmVudHM7IGNvbG9yICsrKSB7DQotICAgICAgICAgICAgICAgIGludCBkYXRhID0gc3JjX3NjYW5bc3JjX2J5dGVfcG9zICsrXTsNCi0gICAgICAgICAgICAgICAgY29sb3JfdmFsdWVzW2NvbG9yXSA9IG1fcENvbXBEYXRhW2NvbG9yXS5tX0RlY29kZU1pbiArDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BDb21wRGF0YVtjb2xvcl0ubV9EZWNvZGVTdGVwICogZGF0YTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKG1fYkxvYWRNYXNrICYmIG1fR3JvdXBGYW1pbHkgPT0gUERGQ1NfREVWSUNFQ01ZSyAmJiBtX0ZhbWlseSA9PSBQREZDU19ERVZJQ0VDTVlLKSB7DQotICAgICAgICAgICAgICAgIEZYX0ZMT0FUIGsgPSAxLjBmIC0gY29sb3JfdmFsdWVzWzNdOw0KLSAgICAgICAgICAgICAgICBSID0gKDEuMGYgLSBjb2xvcl92YWx1ZXNbMF0pICogazsNCi0gICAgICAgICAgICAgICAgRyA9ICgxLjBmIC0gY29sb3JfdmFsdWVzWzFdKSAqIGs7DQotICAgICAgICAgICAgICAgIEIgPSAoMS4wZiAtIGNvbG9yX3ZhbHVlc1syXSkgKiBrOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIG1fcENvbG9yU3BhY2UtPkdldFJHQihjb2xvcl92YWx1ZXMsIFIsIEcsIEIpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBSID0gTk9STUFMQ09MT1JfTUFYKFIsIDEpOw0KLSAgICAgICAgICAgIEcgPSBOT1JNQUxDT0xPUl9NQVgoRywgMSk7DQotICAgICAgICAgICAgQiA9IE5PUk1BTENPTE9SX01BWChCLCAxKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bZGVzdF9ieXRlX3Bvc10gPSAoRlhfSU5UMzIpKEIgKiAyNTUpOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X2J5dGVfcG9zICsgMV0gPSAoRlhfSU5UMzIpKEcgKiAyNTUpOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X2J5dGVfcG9zICsgMl0gPSAoRlhfSU5UMzIpKFIgKiAyNTUpOw0KLSAgICAgICAgICAgIGRlc3RfYnl0ZV9wb3MgKz0gMzsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGludCBzcmNfYml0X3BvcyA9IDA7DQotICAgICAgICBpbnQgZGVzdF9ieXRlX3BvcyA9IDA7DQotICAgICAgICANCi0gICAgICAgIEZYX0RXT1JEIGJwYyA9IEdldFZhbGlkQnBwKCk7DQotDQotICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBtX1dpZHRoOyBjb2x1bW4gKyspIHsNCi0gICAgICAgICAgICBmb3IgKEZYX0RXT1JEIGNvbG9yID0gMDsgY29sb3IgPCBtX25Db21wb25lbnRzOyBjb2xvciArKykgew0KLSAgICAgICAgICAgICAgICBpbnQgZGF0YSA9IF9HZXRCaXRzOChzcmNfc2Nhbiwgc3JjX2JpdF9wb3MsIGJwYyk7DQotICAgICAgICAgICAgICAgIGNvbG9yX3ZhbHVlc1tjb2xvcl0gPSBtX3BDb21wRGF0YVtjb2xvcl0ubV9EZWNvZGVNaW4gKw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wQ29tcERhdGFbY29sb3JdLm1fRGVjb2RlU3RlcCAqIGRhdGE7DQotICAgICAgICAgICAgICAgIHNyY19iaXRfcG9zICs9IGJwYzsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKG1fYkxvYWRNYXNrICYmIG1fR3JvdXBGYW1pbHkgPT0gUERGQ1NfREVWSUNFQ01ZSyAmJiBtX0ZhbWlseSA9PSBQREZDU19ERVZJQ0VDTVlLKSB7DQotICAgICAgICAgICAgICAgIEZYX0ZMT0FUIGsgPSAxLjBmIC0gY29sb3JfdmFsdWVzWzNdOw0KLSAgICAgICAgICAgICAgICBSID0gKDEuMGYgLSBjb2xvcl92YWx1ZXNbMF0pICogazsNCi0gICAgICAgICAgICAgICAgRyA9ICgxLjBmIC0gY29sb3JfdmFsdWVzWzFdKSAqIGs7DQotICAgICAgICAgICAgICAgIEIgPSAoMS4wZiAtIGNvbG9yX3ZhbHVlc1syXSkgKiBrOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIG1fcENvbG9yU3BhY2UtPkdldFJHQihjb2xvcl92YWx1ZXMsIFIsIEcsIEIpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBSID0gTk9STUFMQ09MT1JfTUFYKFIsIDEpOw0KLSAgICAgICAgICAgIEcgPSBOT1JNQUxDT0xPUl9NQVgoRywgMSk7DQotICAgICAgICAgICAgQiA9IE5PUk1BTENPTE9SX01BWChCLCAxKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bZGVzdF9ieXRlX3Bvc10gPSAoRlhfSU5UMzIpKEIgKiAyNTUpOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X2J5dGVfcG9zICsgMV0gPSAoRlhfSU5UMzIpKEcgKiAyNTUpOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X2J5dGVfcG9zICsgMl0gPSAoRlhfSU5UMzIpKFIgKiAyNTUpOw0KLSAgICAgICAgICAgIGRlc3RfYnl0ZV9wb3MgKz0gMzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1GWF9MUEJZVEUgQ1BERl9ESUJTb3VyY2U6OkdldEJ1ZmZlcigpIGNvbnN0DQotew0KLSAgICBpZiAobV9wQ2FjaGVkQml0bWFwKSB7DQotICAgICAgICByZXR1cm4gbV9wQ2FjaGVkQml0bWFwLT5HZXRCdWZmZXIoKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotRlhfTFBDQllURSBDUERGX0RJQlNvdXJjZTo6R2V0U2NhbmxpbmUoaW50IGxpbmUpIGNvbnN0DQotew0KLSAgICBGWF9EV09SRCBzcmNfcGl0Y2ggPSAobV9XaWR0aCAqIG1fYnBjICogbV9uQ29tcG9uZW50cyArIDcpIC8gODsNCi0gICAgRlhfTFBDQllURSBwU3JjTGluZSA9IE5VTEw7DQotICAgIGlmIChtX3BDYWNoZWRCaXRtYXApIHsNCi0gICAgICAgIGlmIChsaW5lID49IG1fcENhY2hlZEJpdG1hcC0+R2V0SGVpZ2h0KCkpIHsNCi0gICAgICAgICAgICBsaW5lID0gbV9wQ2FjaGVkQml0bWFwLT5HZXRIZWlnaHQoKSAtIDE7DQotICAgICAgICB9DQotICAgICAgICBwU3JjTGluZSA9IG1fcENhY2hlZEJpdG1hcC0+R2V0U2NhbmxpbmUobGluZSk7DQotICAgIH0gZWxzZSBpZiAobV9wRGVjb2Rlcikgew0KLSAgICAgICAgcFNyY0xpbmUgPSBtX3BEZWNvZGVyLT5HZXRTY2FubGluZShsaW5lKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGlmIChtX3BTdHJlYW1BY2MtPkdldFNpemUoKSA+PSAobGluZSArIDEpICogc3JjX3BpdGNoKSB7DQotICAgICAgICAgICAgcFNyY0xpbmUgPSBtX3BTdHJlYW1BY2MtPkdldERhdGEoKSArIGxpbmUgKiBzcmNfcGl0Y2g7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKHBTcmNMaW5lID09IE5VTEwpIHsNCi0gICAgICAgIEZYX0xQQllURSBwTGluZUJ1ZiA9IG1fcE1hc2tlZExpbmUgPyBtX3BNYXNrZWRMaW5lIDogbV9wTGluZUJ1ZjsNCi0gICAgICAgIEZYU1lTX21lbXNldDgocExpbmVCdWYsIDB4ZmYsIG1fUGl0Y2gpOw0KLSAgICAgICAgcmV0dXJuIHBMaW5lQnVmOw0KLSAgICB9DQotICAgIGlmIChtX2JwYyAqIG1fbkNvbXBvbmVudHMgPT0gMSkgew0KLSAgICAgICAgaWYgKG1fYkltYWdlTWFzayAmJiBtX2JEZWZhdWx0RGVjb2RlKSB7DQotICAgICAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHNyY19waXRjaDsgaSArKykgew0KLSAgICAgICAgICAgICAgICBtX3BMaW5lQnVmW2ldID0gfnBTcmNMaW5lW2ldOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSBpZiAobV9iQ29sb3JLZXkpIHsNCi0gICAgICAgICAgICBGWF9EV09SRCByZXNldF9hcmdiLCBzZXRfYXJnYjsNCi0gICAgICAgICAgICByZXNldF9hcmdiID0gbV9wUGFsZXR0ZSA/IG1fcFBhbGV0dGVbMF0gOiAweGZmMDAwMDAwOw0KLSAgICAgICAgICAgIHNldF9hcmdiID0gbV9wUGFsZXR0ZSA/IG1fcFBhbGV0dGVbMV0gOiAweGZmZmZmZmZmOw0KLSAgICAgICAgICAgIGlmIChtX3BDb21wRGF0YVswXS5tX0NvbG9yS2V5TWluID09IDApIHsNCi0gICAgICAgICAgICAgICAgcmVzZXRfYXJnYiA9IDA7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChtX3BDb21wRGF0YVswXS5tX0NvbG9yS2V5TWF4ID09IDEpIHsNCi0gICAgICAgICAgICAgICAgc2V0X2FyZ2IgPSAwOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBzZXRfYXJnYiA9IEZYQVJHQl9UT0RJQihzZXRfYXJnYik7DQotICAgICAgICAgICAgcmVzZXRfYXJnYiA9IEZYQVJHQl9UT0RJQihyZXNldF9hcmdiKTsNCi0gICAgICAgICAgICBGWF9EV09SRCogZGVzdF9zY2FuID0gKEZYX0RXT1JEKiltX3BNYXNrZWRMaW5lOw0KLSAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICBpZiAocFNyY0xpbmVbY29sIC8gOF0gJiAoMSA8PCAoNyAtIGNvbCAlIDgpKSkgew0KLSAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IHNldF9hcmdiOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IHJlc2V0X2FyZ2I7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gbV9wTWFza2VkTGluZTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wTGluZUJ1ZiwgcFNyY0xpbmUsIHNyY19waXRjaCk7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gbV9wTGluZUJ1ZjsNCi0gICAgfQ0KLSAgICBpZiAobV9icGMgKiBtX25Db21wb25lbnRzIDw9IDgpIHsNCi0gICAgICAgIGlmIChtX2JwYyA9PSA4KSB7DQotICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wTGluZUJ1ZiwgcFNyY0xpbmUsIHNyY19waXRjaCk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGludCBzcmNfYml0X3BvcyA9IDA7DQotICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbV9XaWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgIGludCBjb2xvcl9pbmRleCA9IDA7DQotICAgICAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgY29sb3IgPSAwOyBjb2xvciA8IG1fbkNvbXBvbmVudHM7IGNvbG9yICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBpbnQgZGF0YSA9IF9HZXRCaXRzOChwU3JjTGluZSwgc3JjX2JpdF9wb3MsIG1fYnBjKTsNCi0gICAgICAgICAgICAgICAgICAgIGNvbG9yX2luZGV4IHw9IGRhdGEgPDwgKGNvbG9yICogbV9icGMpOw0KLSAgICAgICAgICAgICAgICAgICAgc3JjX2JpdF9wb3MgKz0gbV9icGM7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbV9wTGluZUJ1Zltjb2xdID0gY29sb3JfaW5kZXg7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fYkNvbG9yS2V5KSB7DQotICAgICAgICAgICAgRlhfTFBCWVRFIHBEZXN0UGl4ZWwgPSBtX3BNYXNrZWRMaW5lOw0KLSAgICAgICAgICAgIEZYX0xQQ0JZVEUgcFNyY1BpeGVsID0gbV9wTGluZUJ1ZjsNCi0gICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1dpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgRlhfQllURSBpbmRleCA9ICpwU3JjUGl4ZWwrKzsNCi0gICAgICAgICAgICAgICAgaWYgKG1fcFBhbGV0dGUpIHsNCi0gICAgICAgICAgICAgICAgICAgICpwRGVzdFBpeGVsKysgPSBGWEFSR0JfQihtX3BQYWxldHRlW2luZGV4XSk7DQotICAgICAgICAgICAgICAgICAgICAqcERlc3RQaXhlbCsrID0gRlhBUkdCX0cobV9wUGFsZXR0ZVtpbmRleF0pOw0KLSAgICAgICAgICAgICAgICAgICAgKnBEZXN0UGl4ZWwrKyA9IEZYQVJHQl9SKG1fcFBhbGV0dGVbaW5kZXhdKTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICpwRGVzdFBpeGVsKysgPSBpbmRleDsNCi0gICAgICAgICAgICAgICAgICAgICpwRGVzdFBpeGVsKysgPSBpbmRleDsNCi0gICAgICAgICAgICAgICAgICAgICpwRGVzdFBpeGVsKysgPSBpbmRleDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAqcERlc3RQaXhlbCA9IChpbmRleCA8IG1fcENvbXBEYXRhWzBdLm1fQ29sb3JLZXlNaW4gfHwgaW5kZXggPiBtX3BDb21wRGF0YVswXS5tX0NvbG9yS2V5TWF4KSA/IDB4ZmYgOiAwOw0KLSAgICAgICAgICAgICAgICBwRGVzdFBpeGVsICsrIDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuIG1fcE1hc2tlZExpbmU7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gbV9wTGluZUJ1ZjsNCi0gICAgfQ0KLSAgICBpZiAobV9iQ29sb3JLZXkpIHsNCi0gICAgICAgIGlmIChtX25Db21wb25lbnRzID09IDMgJiYgbV9icGMgPT0gOCkgew0KLSAgICAgICAgICAgIEZYX0xQQllURSBhbHBoYV9jaGFubmVsID0gbV9wTWFza2VkTGluZSArIDM7DQotICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbV9XaWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgcFBpeGVsID0gcFNyY0xpbmUgKyBjb2wgKiAzOw0KLSAgICAgICAgICAgICAgICBhbHBoYV9jaGFubmVsW2NvbCAqIDRdID0gKHBQaXhlbFswXSA8IG1fcENvbXBEYXRhWzBdLm1fQ29sb3JLZXlNaW4gfHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUGl4ZWxbMF0gPiBtX3BDb21wRGF0YVswXS5tX0NvbG9yS2V5TWF4IHx8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFBpeGVsWzFdIDwgbV9wQ29tcERhdGFbMV0ubV9Db2xvcktleU1pbiB8fCBwUGl4ZWxbMV0gPiBtX3BDb21wRGF0YVsxXS5tX0NvbG9yS2V5TWF4IHx8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFBpeGVsWzJdIDwgbV9wQ29tcERhdGFbMl0ubV9Db2xvcktleU1pbiB8fCBwUGl4ZWxbMl0gPiBtX3BDb21wRGF0YVsyXS5tX0NvbG9yS2V5TWF4KSA/IDB4ZmYgOiAwOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgRlhTWVNfbWVtc2V0OChtX3BNYXNrZWRMaW5lLCAweGZmLCBtX1BpdGNoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAobV9wQ29sb3JTcGFjZSkgew0KLSAgICAgICAgVHJhbnNsYXRlU2NhbmxpbmUyNGJwcChtX3BMaW5lQnVmLCBwU3JjTGluZSk7DQotICAgICAgICBwU3JjTGluZSA9IG1fcExpbmVCdWY7DQotICAgIH0NCi0gICAgaWYgKG1fYkNvbG9yS2V5KSB7DQotICAgICAgICBGWF9MUENCWVRFIHBTcmNQaXhlbCA9IHBTcmNMaW5lOw0KLSAgICAgICAgRlhfTFBCWVRFIHBEZXN0UGl4ZWwgPSBtX3BNYXNrZWRMaW5lOw0KLSAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbV9XaWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgKnBEZXN0UGl4ZWwrKyA9ICpwU3JjUGl4ZWwrKzsNCi0gICAgICAgICAgICAqcERlc3RQaXhlbCsrID0gKnBTcmNQaXhlbCsrOw0KLSAgICAgICAgICAgICpwRGVzdFBpeGVsKysgPSAqcFNyY1BpeGVsKys7DQotICAgICAgICAgICAgcERlc3RQaXhlbCArKzsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBtX3BNYXNrZWRMaW5lOw0KLSAgICB9DQotICAgIHJldHVybiBwU3JjTGluZTsNCi19DQotRlhfQk9PTCBDUERGX0RJQlNvdXJjZTo6U2tpcFRvU2NhbmxpbmUoaW50IGxpbmUsIElGWF9QYXVzZSogcFBhdXNlKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fcERlY29kZXIpIHsNCi0gICAgICAgIHJldHVybiBtX3BEZWNvZGVyLT5Ta2lwVG9TY2FubGluZShsaW5lLCBwUGF1c2UpOw0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotdm9pZCBDUERGX0RJQlNvdXJjZTo6RG93blNhbXBsZVNjYW5saW5lKGludCBsaW5lLCBGWF9MUEJZVEUgZGVzdF9zY2FuLCBpbnQgZGVzdF9icHAsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3dpZHRoLCBGWF9CT09MIGJGbGlwWCwgaW50IGNsaXBfbGVmdCwgaW50IGNsaXBfd2lkdGgpIGNvbnN0DQotew0KLSAgICBGWF9EV09SRCBzcmNfd2lkdGggPSBtX1dpZHRoOw0KLSAgICBGWF9EV09SRCBzcmNfcGl0Y2ggPSAoc3JjX3dpZHRoICogbV9icGMgKiBtX25Db21wb25lbnRzICsgNykgLyA4Ow0KLSAgICBGWF9MUENCWVRFIHBTcmNMaW5lID0gTlVMTDsNCi0gICAgaWYgKG1fcENhY2hlZEJpdG1hcCkgew0KLSAgICAgICAgcFNyY0xpbmUgPSBtX3BDYWNoZWRCaXRtYXAtPkdldFNjYW5saW5lKGxpbmUpOw0KLSAgICB9IGVsc2UgaWYgKG1fcERlY29kZXIpIHsNCi0gICAgICAgIHBTcmNMaW5lID0gbV9wRGVjb2Rlci0+R2V0U2NhbmxpbmUobGluZSk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZiAobV9wU3RyZWFtQWNjLT5HZXRTaXplKCkgPj0gKGxpbmUgKyAxKSAqIHNyY19waXRjaCkgew0KLSAgICAgICAgICAgIHBTcmNMaW5lID0gbV9wU3RyZWFtQWNjLT5HZXREYXRhKCkgKyBsaW5lICogc3JjX3BpdGNoOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGludCBvcmlnX0JwcCA9IG1fYnBjICogbV9uQ29tcG9uZW50cyAvIDg7DQotICAgIGludCBkZXN0X0JwcCA9IGRlc3RfYnBwIC8gODsNCi0gICAgaWYgKHBTcmNMaW5lID09IE5VTEwpIHsNCi0gICAgICAgIEZYU1lTX21lbXNldDMyKGRlc3Rfc2NhbiwgMHhmZiwgZGVzdF9CcHAgKiBjbGlwX3dpZHRoKTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDRlhfRml4ZWRCdWZHcm93PEZYX0JZVEUsIDEyOD4gdGVtcChvcmlnX0JwcCk7DQotICAgIGlmIChtX2JwYyAqIG1fbkNvbXBvbmVudHMgPT0gMSkgew0KLSAgICAgICAgRlhfRFdPUkQgc2V0X2FyZ2IgPSAoRlhfRFdPUkQpIC0gMSwgcmVzZXRfYXJnYiA9IDA7DQotICAgICAgICBpZiAobV9iSW1hZ2VNYXNrKSB7DQotICAgICAgICAgICAgaWYgKG1fYkRlZmF1bHREZWNvZGUpIHsNCi0gICAgICAgICAgICAgICAgc2V0X2FyZ2IgPSAwOw0KLSAgICAgICAgICAgICAgICByZXNldF9hcmdiID0gKEZYX0RXT1JEKSAtIDE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIGlmIChtX2JDb2xvcktleSkgew0KLSAgICAgICAgICAgIHJlc2V0X2FyZ2IgPSBtX3BQYWxldHRlID8gbV9wUGFsZXR0ZVswXSA6IDB4ZmYwMDAwMDA7DQotICAgICAgICAgICAgc2V0X2FyZ2IgPSBtX3BQYWxldHRlID8gbV9wUGFsZXR0ZVsxXSA6IDB4ZmZmZmZmZmY7DQotICAgICAgICAgICAgaWYgKG1fcENvbXBEYXRhWzBdLm1fQ29sb3JLZXlNaW4gPT0gMCkgew0KLSAgICAgICAgICAgICAgICByZXNldF9hcmdiID0gMDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKG1fcENvbXBEYXRhWzBdLm1fQ29sb3JLZXlNYXggPT0gMSkgew0KLSAgICAgICAgICAgICAgICBzZXRfYXJnYiA9IDA7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHNldF9hcmdiID0gRlhBUkdCX1RPRElCKHNldF9hcmdiKTsNCi0gICAgICAgICAgICByZXNldF9hcmdiID0gRlhBUkdCX1RPRElCKHJlc2V0X2FyZ2IpOw0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xpcF93aWR0aDsgaSArKykgew0KLSAgICAgICAgICAgICAgICBGWF9EV09SRCBzcmNfeCA9IChjbGlwX2xlZnQgKyBpKSAqIHNyY193aWR0aCAvIGRlc3Rfd2lkdGg7DQotICAgICAgICAgICAgICAgIGlmIChiRmxpcFgpIHsNCi0gICAgICAgICAgICAgICAgICAgIHNyY194ID0gc3JjX3dpZHRoIC0gc3JjX3ggLSAxOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHNyY194ICU9IHNyY193aWR0aDsNCi0gICAgICAgICAgICAgICAgaWYgKHBTcmNMaW5lW3NyY194IC8gOF0gJiAoMSA8PCAoNyAtIHNyY194ICUgOCkpKSB7DQotICAgICAgICAgICAgICAgICAgICAoKEZYX0RXT1JEKilkZXN0X3NjYW4pW2ldID0gc2V0X2FyZ2I7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAoKEZYX0RXT1JEKilkZXN0X3NjYW4pW2ldID0gcmVzZXRfYXJnYjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlmIChkZXN0X0JwcCA9PSAxKSB7DQotICAgICAgICAgICAgfSBlbHNlIGlmIChtX3BQYWxldHRlKSB7DQotICAgICAgICAgICAgICAgIHJlc2V0X2FyZ2IgPSBtX3BQYWxldHRlWzBdOw0KLSAgICAgICAgICAgICAgICBzZXRfYXJnYiA9IG1fcFBhbGV0dGVbMV07DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbGlwX3dpZHRoOyBpICsrKSB7DQotICAgICAgICAgICAgRlhfRFdPUkQgc3JjX3ggPSAoY2xpcF9sZWZ0ICsgaSkgKiBzcmNfd2lkdGggLyBkZXN0X3dpZHRoOw0KLSAgICAgICAgICAgIGlmIChiRmxpcFgpIHsNCi0gICAgICAgICAgICAgICAgc3JjX3ggPSBzcmNfd2lkdGggLSBzcmNfeCAtIDE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHNyY194ICU9IHNyY193aWR0aDsNCi0gICAgICAgICAgICBpbnQgZGVzdF9wb3MgPSBpICogZGVzdF9CcHA7DQotICAgICAgICAgICAgaWYgKHBTcmNMaW5lW3NyY194IC8gOF0gJiAoMSA8PCAoNyAtIHNyY194ICUgOCkpKSB7DQotICAgICAgICAgICAgICAgIGlmIChkZXN0X0JwcCA9PSAxKSB7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bZGVzdF9wb3NdID0gKEZYX0JZVEUpc2V0X2FyZ2I7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVzdF9CcHAgPT0gMykgew0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfcG9zXSA9IEZYQVJHQl9CKHNldF9hcmdiKTsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X3BvcyArIDFdID0gRlhBUkdCX0coc2V0X2FyZ2IpOw0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfcG9zICsgMl0gPSBGWEFSR0JfUihzZXRfYXJnYik7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAqKEZYX0RXT1JEKikoZGVzdF9zY2FuICsgZGVzdF9wb3MpID0gc2V0X2FyZ2I7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBpZiAoZGVzdF9CcHAgPT0gMSkgew0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfcG9zXSA9IChGWF9CWVRFKXJlc2V0X2FyZ2I7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVzdF9CcHAgPT0gMykgew0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfcG9zXSA9IEZYQVJHQl9CKHJlc2V0X2FyZ2IpOw0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfcG9zICsgMV0gPSBGWEFSR0JfRyhyZXNldF9hcmdiKTsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X3BvcyArIDJdID0gRlhBUkdCX1IocmVzZXRfYXJnYik7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAqKEZYX0RXT1JEKikoZGVzdF9zY2FuICsgZGVzdF9wb3MpID0gcmVzZXRfYXJnYjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybjsNCi0gICAgfSBlbHNlIGlmIChtX2JwYyAqIG1fbkNvbXBvbmVudHMgPD0gOCkgew0KLSAgICAgICAgaWYgKG1fYnBjIDwgOCkgew0KLSAgICAgICAgICAgIGludCBzcmNfYml0X3BvcyA9IDA7DQotICAgICAgICAgICAgZm9yIChGWF9EV09SRCBjb2wgPSAwOyBjb2wgPCBzcmNfd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICBpbnQgY29sb3JfaW5kZXggPSAwOw0KLSAgICAgICAgICAgICAgICBmb3IgKEZYX0RXT1JEIGNvbG9yID0gMDsgY29sb3IgPCBtX25Db21wb25lbnRzOyBjb2xvciArKykgew0KLSAgICAgICAgICAgICAgICAgICAgaW50IGRhdGEgPSBfR2V0Qml0czgocFNyY0xpbmUsIHNyY19iaXRfcG9zLCBtX2JwYyk7DQotICAgICAgICAgICAgICAgICAgICBjb2xvcl9pbmRleCB8PSBkYXRhIDw8IChjb2xvciAqIG1fYnBjKTsNCi0gICAgICAgICAgICAgICAgICAgIHNyY19iaXRfcG9zICs9IG1fYnBjOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG1fcExpbmVCdWZbY29sXSA9IGNvbG9yX2luZGV4Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwU3JjTGluZSA9IG1fcExpbmVCdWY7DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9iQ29sb3JLZXkpIHsNCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsaXBfd2lkdGg7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgRlhfRFdPUkQgc3JjX3ggPSAoY2xpcF9sZWZ0ICsgaSkgKiBzcmNfd2lkdGggLyBkZXN0X3dpZHRoOw0KLSAgICAgICAgICAgICAgICBpZiAoYkZsaXBYKSB7DQotICAgICAgICAgICAgICAgICAgICBzcmNfeCA9IHNyY193aWR0aCAtIHNyY194IC0gMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBzcmNfeCAlPSBzcmNfd2lkdGg7DQotICAgICAgICAgICAgICAgIEZYX0xQQllURSBwRGVzdFBpeGVsID0gZGVzdF9zY2FuICsgaSAqIDQ7DQotICAgICAgICAgICAgICAgIEZYX0JZVEUgaW5kZXggPSBwU3JjTGluZVtzcmNfeF07DQotICAgICAgICAgICAgICAgIGlmIChtX3BQYWxldHRlKSB7DQotICAgICAgICAgICAgICAgICAgICAqcERlc3RQaXhlbCsrID0gRlhBUkdCX0IobV9wUGFsZXR0ZVtpbmRleF0pOw0KLSAgICAgICAgICAgICAgICAgICAgKnBEZXN0UGl4ZWwrKyA9IEZYQVJHQl9HKG1fcFBhbGV0dGVbaW5kZXhdKTsNCi0gICAgICAgICAgICAgICAgICAgICpwRGVzdFBpeGVsKysgPSBGWEFSR0JfUihtX3BQYWxldHRlW2luZGV4XSk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAqcERlc3RQaXhlbCsrID0gaW5kZXg7DQotICAgICAgICAgICAgICAgICAgICAqcERlc3RQaXhlbCsrID0gaW5kZXg7DQotICAgICAgICAgICAgICAgICAgICAqcERlc3RQaXhlbCsrID0gaW5kZXg7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgKnBEZXN0UGl4ZWwgPSAoaW5kZXggPCBtX3BDb21wRGF0YVswXS5tX0NvbG9yS2V5TWluIHx8IGluZGV4ID4gbV9wQ29tcERhdGFbMF0ubV9Db2xvcktleU1heCkgPyAweGZmIDogMDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbGlwX3dpZHRoOyBpICsrKSB7DQotICAgICAgICAgICAgRlhfRFdPUkQgc3JjX3ggPSAoY2xpcF9sZWZ0ICsgaSkgKiBzcmNfd2lkdGggLyBkZXN0X3dpZHRoOw0KLSAgICAgICAgICAgIGlmIChiRmxpcFgpIHsNCi0gICAgICAgICAgICAgICAgc3JjX3ggPSBzcmNfd2lkdGggLSBzcmNfeCAtIDE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHNyY194ICU9IHNyY193aWR0aDsNCi0gICAgICAgICAgICBGWF9CWVRFIGluZGV4ID0gcFNyY0xpbmVbc3JjX3hdOw0KLSAgICAgICAgICAgIGlmIChkZXN0X0JwcCA9PSAxKSB7DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbltpXSA9IGluZGV4Ow0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGludCBkZXN0X3BvcyA9IGkgKiBkZXN0X0JwcDsNCi0gICAgICAgICAgICAgICAgRlhfQVJHQiBhcmdiID0gbV9wUGFsZXR0ZVtpbmRleF07DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X3Bvc10gPSBGWEFSR0JfQihhcmdiKTsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfcG9zICsgMV0gPSBGWEFSR0JfRyhhcmdiKTsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfcG9zICsgMl0gPSBGWEFSR0JfUihhcmdiKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm47DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpbnQgbGFzdF9zcmNfeCA9IC0xOw0KLSAgICAgICAgRlhfQVJHQiBsYXN0X2FyZ2I7DQotICAgICAgICBGWF9GTE9BVCBvcmlnX05vdDhCcHAgPSAoRlhfRkxPQVQpbV9icGMgKiAoRlhfRkxPQVQpbV9uQ29tcG9uZW50cyAvIDguMGY7DQotICAgICAgICBGWF9GTE9BVCB1bml0X1RvOEJwYyA9IDI1NS4wZiAvICgoMSA8PCBtX2JwYykgLSAxKTsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xpcF93aWR0aDsgaSArKykgew0KLSAgICAgICAgICAgIGludCBkZXN0X3ggPSBjbGlwX2xlZnQgKyBpOw0KLSAgICAgICAgICAgIEZYX0RXT1JEIHNyY194ID0gKGJGbGlwWCA/IChkZXN0X3dpZHRoIC0gZGVzdF94IC0gMSkgOiBkZXN0X3gpICogKEZYX0lOVDY0KXNyY193aWR0aCAvIGRlc3Rfd2lkdGg7DQotICAgICAgICAgICAgc3JjX3ggJT0gc3JjX3dpZHRoOw0KLSAgICAgICAgICAgIEZYX0xQQ0JZVEUgcFNyY1BpeGVsID0gTlVMTDsNCi0gICAgICAgICAgICBpZiAobV9icGMgJSA4ID09IDApIHsNCi0gICAgICAgICAgICAgICAgcFNyY1BpeGVsID0gcFNyY0xpbmUgKyBzcmNfeCAqIG9yaWdfQnBwOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHBTcmNQaXhlbCA9IHBTcmNMaW5lICsgKGludCkoc3JjX3ggKiBvcmlnX05vdDhCcHApOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9MUEJZVEUgcERlc3RQaXhlbCA9IGRlc3Rfc2NhbiArIGkgKiBkZXN0X0JwcDsNCi0gICAgICAgICAgICBGWF9BUkdCIGFyZ2I7DQotICAgICAgICAgICAgaWYgKHNyY194ID09IGxhc3Rfc3JjX3gpIHsNCi0gICAgICAgICAgICAgICAgYXJnYiA9IGxhc3RfYXJnYjsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBpZiAobV9wQ29sb3JTcGFjZSkgew0KLSAgICAgICAgICAgICAgICAgICAgRlhfQllURSBjb2xvcls0XTsNCi0gICAgICAgICAgICAgICAgICAgIGlmICghbV9iRGVmYXVsdERlY29kZSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3JpZ19CcHA7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbG9yX3ZhbHVlID0gKGludCkoKG1fcENvbXBEYXRhW2ldLm1fRGVjb2RlTWluICsgbV9wQ29tcERhdGFbaV0ubV9EZWNvZGVTdGVwICogKEZYX0ZMT0FUKXBTcmNQaXhlbFtpXSkgKiAyNTUuMGYgKyAwLjVmKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFtpXSA9IGNvbG9yX3ZhbHVlID4gMjU1ID8gMjU1IDogKGNvbG9yX3ZhbHVlIDwgMCA/IDAgOiBjb2xvcl92YWx1ZSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcENvbG9yU3BhY2UtPlRyYW5zbGF0ZUltYWdlTGluZShjb2xvciwgdGVtcCwgMSwgMCwgMCwgbV9iTG9hZE1hc2sgJiYgbV9Hcm91cEZhbWlseSA9PSBQREZDU19ERVZJQ0VDTVlLICYmIG1fRmFtaWx5ID09IFBERkNTX0RFVklDRUNNWUspOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9icGMgPCA4KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYml0X3BvcyA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfeCAlIDIpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19iaXRfcG9zID0gNDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUgPSAoMSA8PCBtX2JwYykgIC0gMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IG1fbkNvbXBvbmVudHM7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBbaV0gPSAoRlhfQllURSkoX0dldEJpdHM4KHBTcmNQaXhlbCwgc3JjX2JpdF9wb3MsIG1fYnBjKSAqIHVuaXRfVG84QnBjKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19iaXRfcG9zICs9IG1fYnBjOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcENvbG9yU3BhY2UtPlRyYW5zbGF0ZUltYWdlTGluZShjb2xvciwgdGVtcCwgMSwgMCwgMCwgbV9iTG9hZE1hc2sgJiYgbV9Hcm91cEZhbWlseSA9PSBQREZDU19ERVZJQ0VDTVlLICYmIG1fRmFtaWx5ID09IFBERkNTX0RFVklDRUNNWUspOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcENvbG9yU3BhY2UtPlRyYW5zbGF0ZUltYWdlTGluZShjb2xvciwgcFNyY1BpeGVsLCAxLCAwLCAwLCBtX2JMb2FkTWFzayAmJiBtX0dyb3VwRmFtaWx5ID09IFBERkNTX0RFVklDRUNNWUsgJiYgbV9GYW1pbHkgPT0gUERGQ1NfREVWSUNFQ01ZSyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYXJnYiA9IEZYQVJHQl9NQUtFKDB4ZmYsIGNvbG9yWzJdLCBjb2xvclsxXSwgY29sb3JbMF0pOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgYXJnYiA9IEZYQVJHQl9NQUtFKDB4ZmYsIHBTcmNQaXhlbFsyXSwgcFNyY1BpeGVsWzFdLCBwU3JjUGl4ZWxbMF0pOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChtX2JDb2xvcktleSkgew0KLSAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhID0gMHhmZjsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX25Db21wb25lbnRzID09IDMgJiYgbV9icGMgPT0gOCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhID0gKHBTcmNQaXhlbFswXSA8IG1fcENvbXBEYXRhWzBdLm1fQ29sb3JLZXlNaW4gfHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU3JjUGl4ZWxbMF0gPiBtX3BDb21wRGF0YVswXS5tX0NvbG9yS2V5TWF4IHx8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFNyY1BpeGVsWzFdIDwgbV9wQ29tcERhdGFbMV0ubV9Db2xvcktleU1pbiB8fA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBTcmNQaXhlbFsxXSA+IG1fcENvbXBEYXRhWzFdLm1fQ29sb3JLZXlNYXggfHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU3JjUGl4ZWxbMl0gPCBtX3BDb21wRGF0YVsyXS5tX0NvbG9yS2V5TWluIHx8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFNyY1BpeGVsWzJdID4gbV9wQ29tcERhdGFbMl0ubV9Db2xvcktleU1heCkgPyAweGZmIDogMDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGFyZ2IgJj0gMHhmZmZmZmY7DQotICAgICAgICAgICAgICAgICAgICBhcmdiIHw9IGFscGhhIDw8IDI0Ow0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGxhc3Rfc3JjX3ggPSBzcmNfeDsNCi0gICAgICAgICAgICAgICAgbGFzdF9hcmdiID0gYXJnYjsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGRlc3RfQnBwID09IDQpIHsNCi0gICAgICAgICAgICAgICAgKihGWF9EV09SRCopcERlc3RQaXhlbCA9IEZYQVJHQl9UT0RJQihhcmdiKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAqcERlc3RQaXhlbCsrID0gRlhBUkdCX0IoYXJnYik7DQotICAgICAgICAgICAgICAgICpwRGVzdFBpeGVsKysgPSBGWEFSR0JfRyhhcmdiKTsNCi0gICAgICAgICAgICAgICAgKnBEZXN0UGl4ZWwgPSBGWEFSR0JfUihhcmdiKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi19DQotdm9pZCBDUERGX0RJQlNvdXJjZTo6U2V0RG93blNhbXBsZVNpemUoaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCkgY29uc3QNCi17DQotICAgIGlmIChtX3BEZWNvZGVyKSB7DQotICAgICAgICBtX3BEZWNvZGVyLT5Eb3duU2NhbGUoZGVzdF93aWR0aCwgZGVzdF9oZWlnaHQpOw0KLSAgICAgICAgKChDUERGX0RJQlNvdXJjZSopdGhpcyktPm1fV2lkdGggPSBtX3BEZWNvZGVyLT5HZXRXaWR0aCgpOw0KLSAgICAgICAgKChDUERGX0RJQlNvdXJjZSopdGhpcyktPm1fSGVpZ2h0ID0gbV9wRGVjb2Rlci0+R2V0SGVpZ2h0KCk7DQotICAgIH0NCi19DQotdm9pZCBDUERGX0RJQlNvdXJjZTo6Q2xlYXJJbWFnZURhdGEoKQ0KLXsNCi0gICAgaWYgKG1fcERlY29kZXIpIHsNCi0gICAgICAgIG1fcERlY29kZXItPkNsZWFySW1hZ2VEYXRhKCk7DQotICAgIH0NCi19DQotQ1BERl9Qcm9ncmVzc2l2ZUltYWdlTG9hZGVySGFuZGxlOjpDUERGX1Byb2dyZXNzaXZlSW1hZ2VMb2FkZXJIYW5kbGUoKQ0KLXsNCi0gICAgbV9wSW1hZ2VMb2FkZXIgPSBOVUxMOw0KLSAgICBtX3BDYWNoZSA9IE5VTEw7DQotICAgIG1fcEltYWdlID0gTlVMTDsNCi19DQotQ1BERl9Qcm9ncmVzc2l2ZUltYWdlTG9hZGVySGFuZGxlOjp+Q1BERl9Qcm9ncmVzc2l2ZUltYWdlTG9hZGVySGFuZGxlKCkNCi17DQotICAgIG1fcEltYWdlTG9hZGVyID0gTlVMTDsNCi0gICAgbV9wQ2FjaGUgPSBOVUxMOw0KLSAgICBtX3BJbWFnZSA9IE5VTEw7DQotfQ0KLUZYX0JPT0wgQ1BERl9Qcm9ncmVzc2l2ZUltYWdlTG9hZGVySGFuZGxlOjpTdGFydChDUERGX0ltYWdlTG9hZGVyKiBwSW1hZ2VMb2FkZXIsIGNvbnN0IENQREZfSW1hZ2VPYmplY3QqIHBJbWFnZSwgQ1BERl9QYWdlUmVuZGVyQ2FjaGUqIHBDYWNoZSwgRlhfQk9PTCBiU3RkQ1MsIEZYX0RXT1JEIEdyb3VwRmFtaWx5LCBGWF9CT09MIGJMb2FkTWFzaywgQ1BERl9SZW5kZXJTdGF0dXMqIHBSZW5kZXJTdGF0dXMsIEZYX0lOVDMyIG5Eb3duc2FtcGxlV2lkdGgsIEZYX0lOVDMyIG5Eb3duc2FtcGxlSGVpZ2h0KQ0KLXsNCi0gICAgbV9wSW1hZ2VMb2FkZXIgPSBwSW1hZ2VMb2FkZXI7DQotICAgIG1fcENhY2hlID0gcENhY2hlOw0KLSAgICBtX3BJbWFnZSA9IChDUERGX0ltYWdlT2JqZWN0KilwSW1hZ2U7DQotICAgIG1fbkRvd25zYW1wbGVXaWR0aCA9IG5Eb3duc2FtcGxlV2lkdGg7DQotICAgIG1fbkRvd25zYW1wbGVIZWlnaHQgPSBuRG93bnNhbXBsZUhlaWdodDsNCi0gICAgRlhfQk9PTCByZXQ7DQotICAgIGlmIChwQ2FjaGUpIHsNCi0gICAgICAgIHJldCA9IHBDYWNoZS0+U3RhcnRHZXRDYWNoZWRCaXRtYXAocEltYWdlLT5tX3BJbWFnZS0+R2V0U3RyZWFtKCksIGJTdGRDUywgR3JvdXBGYW1pbHksIGJMb2FkTWFzaywgcFJlbmRlclN0YXR1cywgbV9uRG93bnNhbXBsZVdpZHRoLCBtX25Eb3duc2FtcGxlSGVpZ2h0KTsNCi0gICAgICAgIGlmIChyZXQgPT0gRkFMU0UpIHsNCi0gICAgICAgICAgICBtX3BJbWFnZUxvYWRlci0+bV9iQ2FjaGVkID0gVFJVRTsNCi0gICAgICAgICAgICBtX3BJbWFnZUxvYWRlci0+bV9wQml0bWFwID0gcENhY2hlLT5tX3BDdXJJbWFnZUNhY2hlLT5EZXRhY2hCaXRtYXAoKTsNCi0gICAgICAgICAgICBtX3BJbWFnZUxvYWRlci0+bV9wTWFzayA9IHBDYWNoZS0+bV9wQ3VySW1hZ2VDYWNoZS0+RGV0YWNoTWFzaygpOw0KLSAgICAgICAgICAgIG1fcEltYWdlTG9hZGVyLT5tX01hdHRlQ29sb3IgPSBwQ2FjaGUtPm1fcEN1ckltYWdlQ2FjaGUtPm1fTWF0dGVDb2xvcjsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHJldCA9IHBJbWFnZS0+bV9wSW1hZ2UtPlN0YXJ0TG9hZERJQlNvdXJjZShwUmVuZGVyU3RhdHVzLT5tX3BGb3JtUmVzb3VyY2UsIHBSZW5kZXJTdGF0dXMtPm1fcFBhZ2VSZXNvdXJjZSwgYlN0ZENTLCBHcm91cEZhbWlseSwgYkxvYWRNYXNrKTsNCi0gICAgICAgIGlmIChyZXQgPT0gRkFMU0UpIHsNCi0gICAgICAgICAgICBtX3BJbWFnZUxvYWRlci0+bV9iQ2FjaGVkID0gRkFMU0U7DQotICAgICAgICAgICAgbV9wSW1hZ2VMb2FkZXItPm1fcEJpdG1hcCA9IG1fcEltYWdlLT5tX3BJbWFnZS0+RGV0YWNoQml0bWFwKCk7DQotICAgICAgICAgICAgbV9wSW1hZ2VMb2FkZXItPm1fcE1hc2sgPSBtX3BJbWFnZS0+bV9wSW1hZ2UtPkRldGFjaE1hc2soKTsNCi0gICAgICAgICAgICBtX3BJbWFnZUxvYWRlci0+bV9NYXR0ZUNvbG9yID0gbV9wSW1hZ2UtPm1fcEltYWdlLT5tX01hdHRlQ29sb3I7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIHJldDsNCi19DQotRlhfQk9PTCBDUERGX1Byb2dyZXNzaXZlSW1hZ2VMb2FkZXJIYW5kbGU6OkNvbnRpbnVlKElGWF9QYXVzZSogcFBhdXNlKQ0KLXsNCi0gICAgRlhfQk9PTCByZXQ7DQotICAgIGlmIChtX3BDYWNoZSkgew0KLSAgICAgICAgcmV0ID0gbV9wQ2FjaGUtPkNvbnRpbnVlKHBQYXVzZSk7DQotICAgICAgICBpZiAocmV0ID09IEZBTFNFKSB7DQotICAgICAgICAgICAgbV9wSW1hZ2VMb2FkZXItPm1fYkNhY2hlZCA9IFRSVUU7DQotICAgICAgICAgICAgbV9wSW1hZ2VMb2FkZXItPm1fcEJpdG1hcCA9IG1fcENhY2hlLT5tX3BDdXJJbWFnZUNhY2hlLT5EZXRhY2hCaXRtYXAoKTsNCi0gICAgICAgICAgICBtX3BJbWFnZUxvYWRlci0+bV9wTWFzayA9IG1fcENhY2hlLT5tX3BDdXJJbWFnZUNhY2hlLT5EZXRhY2hNYXNrKCk7DQotICAgICAgICAgICAgbV9wSW1hZ2VMb2FkZXItPm1fTWF0dGVDb2xvciA9IG1fcENhY2hlLT5tX3BDdXJJbWFnZUNhY2hlLT5tX01hdHRlQ29sb3I7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICByZXQgPSBtX3BJbWFnZS0+bV9wSW1hZ2UtPkNvbnRpbnVlKHBQYXVzZSk7DQotICAgICAgICBpZiAocmV0ID09IEZBTFNFKSB7DQotICAgICAgICAgICAgbV9wSW1hZ2VMb2FkZXItPm1fYkNhY2hlZCA9IEZBTFNFOw0KLSAgICAgICAgICAgIG1fcEltYWdlTG9hZGVyLT5tX3BCaXRtYXAgPSBtX3BJbWFnZS0+bV9wSW1hZ2UtPkRldGFjaEJpdG1hcCgpOw0KLSAgICAgICAgICAgIG1fcEltYWdlTG9hZGVyLT5tX3BNYXNrID0gbV9wSW1hZ2UtPm1fcEltYWdlLT5EZXRhY2hNYXNrKCk7DQotICAgICAgICAgICAgbV9wSW1hZ2VMb2FkZXItPm1fTWF0dGVDb2xvciA9IG1fcEltYWdlLT5tX3BJbWFnZS0+bV9NYXR0ZUNvbG9yOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiByZXQ7DQotfQ0KLUZYX0JPT0wgQ1BERl9JbWFnZUxvYWRlcjo6TG9hZChjb25zdCBDUERGX0ltYWdlT2JqZWN0KiBwSW1hZ2UsIENQREZfUGFnZVJlbmRlckNhY2hlKiBwQ2FjaGUsIEZYX0JPT0wgYlN0ZENTLCBGWF9EV09SRCBHcm91cEZhbWlseSwgRlhfQk9PTCBiTG9hZE1hc2ssIENQREZfUmVuZGVyU3RhdHVzKiBwUmVuZGVyU3RhdHVzKQ0KLXsNCi0gICAgaWYgKHBJbWFnZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKHBDYWNoZSkgew0KLSAgICAgICAgcENhY2hlLT5HZXRDYWNoZWRCaXRtYXAocEltYWdlLT5tX3BJbWFnZS0+R2V0U3RyZWFtKCksIG1fcEJpdG1hcCwgbV9wTWFzaywgbV9NYXR0ZUNvbG9yLCBiU3RkQ1MsIEdyb3VwRmFtaWx5LCBiTG9hZE1hc2ssIHBSZW5kZXJTdGF0dXMsIG1fbkRvd25zYW1wbGVXaWR0aCwgbV9uRG93bnNhbXBsZUhlaWdodCk7DQotICAgICAgICBtX2JDYWNoZWQgPSBUUlVFOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wQml0bWFwID0gcEltYWdlLT5tX3BJbWFnZS0+TG9hZERJQlNvdXJjZSgmbV9wTWFzaywgJm1fTWF0dGVDb2xvciwgYlN0ZENTLCBHcm91cEZhbWlseSwgYkxvYWRNYXNrKTsNCi0gICAgICAgIG1fYkNhY2hlZCA9IEZBTFNFOw0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotRlhfQk9PTCBDUERGX0ltYWdlTG9hZGVyOjpTdGFydExvYWRJbWFnZShjb25zdCBDUERGX0ltYWdlT2JqZWN0KiBwSW1hZ2UsIENQREZfUGFnZVJlbmRlckNhY2hlKiBwQ2FjaGUsIEZYX0xQVk9JRCYgTG9hZEhhbmRsZSwgRlhfQk9PTCBiU3RkQ1MsIEZYX0RXT1JEIEdyb3VwRmFtaWx5LCBGWF9CT09MIGJMb2FkTWFzaywgQ1BERl9SZW5kZXJTdGF0dXMqIHBSZW5kZXJTdGF0dXMsIEZYX0lOVDMyIG5Eb3duc2FtcGxlV2lkdGgsIEZYX0lOVDMyIG5Eb3duc2FtcGxlSGVpZ2h0KQ0KLXsNCi0gICAgbV9uRG93bnNhbXBsZVdpZHRoID0gbkRvd25zYW1wbGVXaWR0aDsNCi0gICAgbV9uRG93bnNhbXBsZUhlaWdodCA9IG5Eb3duc2FtcGxlSGVpZ2h0Ow0KLSAgICBDUERGX1Byb2dyZXNzaXZlSW1hZ2VMb2FkZXJIYW5kbGUqIHBMb2FkZXJIYW5kbGUgPSBOVUxMOw0KLSAgICBwTG9hZGVySGFuZGxlID0JRlhfTkVXIENQREZfUHJvZ3Jlc3NpdmVJbWFnZUxvYWRlckhhbmRsZTsNCi0gICAgRlhfQk9PTCByZXQgPSBwTG9hZGVySGFuZGxlLT5TdGFydCh0aGlzLCBwSW1hZ2UsIHBDYWNoZSwgYlN0ZENTLCBHcm91cEZhbWlseSwgYkxvYWRNYXNrLCBwUmVuZGVyU3RhdHVzLCBtX25Eb3duc2FtcGxlV2lkdGgsIG1fbkRvd25zYW1wbGVIZWlnaHQpOw0KLSAgICBMb2FkSGFuZGxlID0gcExvYWRlckhhbmRsZTsNCi0gICAgcmV0dXJuIHJldDsNCi19DQotRlhfQk9PTAlDUERGX0ltYWdlTG9hZGVyOjpDb250aW51ZShGWF9MUFZPSUQgTG9hZEhhbmRsZSwgSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICByZXR1cm4gKChDUERGX1Byb2dyZXNzaXZlSW1hZ2VMb2FkZXJIYW5kbGUqKUxvYWRIYW5kbGUpLT5Db250aW51ZShwUGF1c2UpOw0KLX0NCi1DUERGX0ltYWdlTG9hZGVyOjp+Q1BERl9JbWFnZUxvYWRlcigpDQotew0KLSAgICBpZiAoIW1fYkNhY2hlZCkgew0KLSAgICAgICAgaWYgKG1fcEJpdG1hcCkgew0KLSAgICAgICAgICAgIGRlbGV0ZSBtX3BCaXRtYXA7DQotICAgICAgICAgICAgbV9wQml0bWFwID0gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX3BNYXNrKSB7DQotICAgICAgICAgICAgZGVsZXRlIG1fcE1hc2s7DQotICAgICAgICB9DQotICAgIH0NCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZS5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjb2RlYy9meF9jb2RlYy5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX21vZHVsZS5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3JlbmRlci5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2VvYmouaCIKKyNpbmNsdWRlICIuLi9mcGRmX3BhZ2UvcGFnZWludC5oIgorI2luY2x1ZGUgInJlbmRlcl9pbnQuaCIKKyNpbmNsdWRlIDxsaW1pdHMuaD4KK3N0YXRpYyB1bnNpZ25lZCBpbnQgX0dldEJpdHM4KEZYX0xQQ0JZVEUgcERhdGEsIGludCBiaXRwb3MsIGludCBuYml0cykKK3sKKyAgICB1bnNpZ25lZCBpbnQgYnl0ZSA9IHBEYXRhW2JpdHBvcyAvIDhdOworICAgIGlmIChuYml0cyA9PSA4KSB7CisgICAgICAgIHJldHVybiBieXRlOworICAgIH0gZWxzZSBpZiAobmJpdHMgPT0gNCkgeworICAgICAgICByZXR1cm4gKGJpdHBvcyAlIDgpID8gKGJ5dGUgJiAweDBmKSA6IChieXRlID4+IDQpOworICAgIH0gZWxzZSBpZiAobmJpdHMgPT0gMikgeworICAgICAgICByZXR1cm4gKGJ5dGUgPj4gKDYgLSBiaXRwb3MgJSA4KSkgJiAweDAzOworICAgIH0gZWxzZSBpZiAobmJpdHMgPT0gMSkgeworICAgICAgICByZXR1cm4gKGJ5dGUgPj4gKDcgLSBiaXRwb3MgJSA4KSkgJiAweDAxOworICAgIH0gZWxzZSBpZiAobmJpdHMgPT0gMTYpIHsKKyAgICAgICAgcmV0dXJuIGJ5dGUgKiAyNTYgKyBwRGF0YVtiaXRwb3MgLyA4ICsgMV07CisgICAgfQorICAgIHJldHVybiAwOworfQorQ0ZYX0RJQlNvdXJjZSogQ1BERl9JbWFnZTo6TG9hZERJQlNvdXJjZShDRlhfRElCU291cmNlKiogcHBNYXNrLCBGWF9EV09SRCogcE1hdHRlQ29sb3IsIEZYX0JPT0wgYlN0ZENTLCBGWF9EV09SRCBHcm91cEZhbWlseSwgRlhfQk9PTCBiTG9hZE1hc2spIGNvbnN0Cit7CisgICAgQ1BERl9ESUJTb3VyY2UqIHBTb3VyY2UgPSBGWF9ORVcgQ1BERl9ESUJTb3VyY2U7CisgICAgaWYgKHBTb3VyY2UtPkxvYWQobV9wRG9jdW1lbnQsIG1fcFN0cmVhbSwgKENQREZfRElCU291cmNlKiopcHBNYXNrLCBwTWF0dGVDb2xvciwgTlVMTCwgTlVMTCwgYlN0ZENTLCBHcm91cEZhbWlseSwgYkxvYWRNYXNrKSkgeworICAgICAgICByZXR1cm4gcFNvdXJjZTsKKyAgICB9CisgICAgZGVsZXRlIHBTb3VyY2U7CisgICAgcmV0dXJuIE5VTEw7Cit9CitDRlhfRElCU291cmNlKiBDUERGX0ltYWdlOjpEZXRhY2hCaXRtYXAoKQoreworICAgIENGWF9ESUJTb3VyY2UqIHBCaXRtYXAgPSBtX3BESUJTb3VyY2U7CisgICAgbV9wRElCU291cmNlID0gTlVMTDsKKyAgICByZXR1cm4gcEJpdG1hcDsKK30KK0NGWF9ESUJTb3VyY2UqIENQREZfSW1hZ2U6OkRldGFjaE1hc2soKQoreworICAgIENGWF9ESUJTb3VyY2UqIHBCaXRtYXAgPSBtX3BNYXNrOworICAgIG1fcE1hc2sgPSBOVUxMOworICAgIHJldHVybiBwQml0bWFwOworfQorRlhfQk9PTCBDUERGX0ltYWdlOjpTdGFydExvYWRESUJTb3VyY2UoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybVJlc291cmNlLCBDUERGX0RpY3Rpb25hcnkqIHBQYWdlUmVzb3VyY2UsIEZYX0JPT0wgYlN0ZENTLCBGWF9EV09SRCBHcm91cEZhbWlseSwgRlhfQk9PTCBiTG9hZE1hc2spCit7CisgICAgbV9wRElCU291cmNlID0gRlhfTkVXIENQREZfRElCU291cmNlOworICAgIGludCByZXQgPSAoKENQREZfRElCU291cmNlKiltX3BESUJTb3VyY2UpLT5TdGFydExvYWRESUJTb3VyY2UobV9wRG9jdW1lbnQsIG1fcFN0cmVhbSwgVFJVRSwgcEZvcm1SZXNvdXJjZSwgcFBhZ2VSZXNvdXJjZSwgYlN0ZENTLCBHcm91cEZhbWlseSwgYkxvYWRNYXNrKTsKKyAgICBpZiAocmV0ID09IDIpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGlmICghcmV0KSB7CisgICAgICAgIGRlbGV0ZSBtX3BESUJTb3VyY2U7CisgICAgICAgIG1fcERJQlNvdXJjZSA9IE5VTEw7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9wTWFzayA9ICgoQ1BERl9ESUJTb3VyY2UqKW1fcERJQlNvdXJjZSktPkRldGFjaE1hc2soKTsKKyAgICBtX01hdHRlQ29sb3IgPSAoKENQREZfRElCU291cmNlKiltX3BESUJTb3VyY2UpLT5tX01hdHRlQ29sb3I7CisgICAgcmV0dXJuIEZBTFNFOworfQorRlhfQk9PTCBDUERGX0ltYWdlOjpDb250aW51ZShJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBpbnQgcmV0ID0gKChDUERGX0RJQlNvdXJjZSopbV9wRElCU291cmNlKS0+Q29udGludWVMb2FkRElCU291cmNlKHBQYXVzZSk7CisgICAgaWYgKHJldCA9PSAyKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBpZiAoIXJldCkgeworICAgICAgICBkZWxldGUgbV9wRElCU291cmNlOworICAgICAgICBtX3BESUJTb3VyY2UgPSBOVUxMOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fcE1hc2sgPSAoKENQREZfRElCU291cmNlKiltX3BESUJTb3VyY2UpLT5EZXRhY2hNYXNrKCk7CisgICAgbV9NYXR0ZUNvbG9yID0gKChDUERGX0RJQlNvdXJjZSopbV9wRElCU291cmNlKS0+bV9NYXR0ZUNvbG9yOworICAgIHJldHVybiBGQUxTRTsKK30KK0NQREZfRElCU291cmNlOjpDUERGX0RJQlNvdXJjZSgpCit7CisgICAgbV9wRG9jdW1lbnQgPSBOVUxMOworICAgIG1fcFN0cmVhbUFjYyA9IE5VTEw7CisgICAgbV9wRGljdCA9IE5VTEw7CisgICAgbV9icHAgPSAwOworICAgIG1fV2lkdGggPSBtX0hlaWdodCA9IDA7CisgICAgbV9wQ29sb3JTcGFjZSA9IE5VTEw7CisgICAgbV9iRGVmYXVsdERlY29kZSA9IFRSVUU7CisgICAgbV9iSW1hZ2VNYXNrID0gRkFMU0U7CisgICAgbV9wUGFsZXR0ZSA9IE5VTEw7CisgICAgbV9wQ29tcERhdGEgPSBOVUxMOworICAgIG1fYkNvbG9yS2V5ID0gRkFMU0U7CisgICAgbV9wTWFza2VkTGluZSA9IG1fcExpbmVCdWYgPSBOVUxMOworICAgIG1fcENhY2hlZEJpdG1hcCA9IE5VTEw7CisgICAgbV9wRGVjb2RlciA9IE5VTEw7CisgICAgbV9uQ29tcG9uZW50cyA9IDA7CisgICAgbV9icGMgPSAwOworICAgIG1fYkxvYWRNYXNrID0gRkFMU0U7CisgICAgbV9GYW1pbHkgPSAwOworICAgIG1fcE1hc2sgPSBOVUxMOworICAgIG1fTWF0dGVDb2xvciA9IDA7CisgICAgbV9wSmJpZzJDb250ZXh0ID0gTlVMTDsKKyAgICBtX3BHbG9iYWxTdHJlYW0gPSBOVUxMOworICAgIG1fYlN0ZENTID0gRkFMU0U7CisgICAgbV9wTWFza1N0cmVhbSA9IE5VTEw7CisgICAgbV9TdGF0dXMgPSAwOworICAgIG1fYkhhc01hc2sgPSBGQUxTRTsKK30KK0NQREZfRElCU291cmNlOjp+Q1BERl9ESUJTb3VyY2UoKQoreworICAgIGlmIChtX3BTdHJlYW1BY2MpIHsKKyAgICAgICAgZGVsZXRlIG1fcFN0cmVhbUFjYzsKKyAgICB9CisgICAgaWYgKG1fcE1hc2tlZExpbmUpIHsKKyAgICAgICAgRlhfRnJlZShtX3BNYXNrZWRMaW5lKTsKKyAgICB9CisgICAgaWYgKG1fcExpbmVCdWYpIHsKKyAgICAgICAgRlhfRnJlZShtX3BMaW5lQnVmKTsKKyAgICB9CisgICAgaWYgKG1fcENhY2hlZEJpdG1hcCkgeworICAgICAgICBkZWxldGUgbV9wQ2FjaGVkQml0bWFwOworICAgIH0KKyAgICBpZiAobV9wRGVjb2RlcikgeworICAgICAgICBkZWxldGUgbV9wRGVjb2RlcjsKKyAgICB9CisgICAgaWYgKG1fcENvbXBEYXRhKSB7CisgICAgICAgIEZYX0ZyZWUobV9wQ29tcERhdGEpOworICAgIH0KKyAgICBDUERGX0NvbG9yU3BhY2UqIHBDUyA9IG1fcENvbG9yU3BhY2U7CisgICAgaWYgKHBDUyAmJiBtX3BEb2N1bWVudCkgeworICAgICAgICBtX3BEb2N1bWVudC0+R2V0UGFnZURhdGEoKS0+UmVsZWFzZUNvbG9yU3BhY2UocENTLT5HZXRBcnJheSgpKTsKKyAgICB9CisgICAgaWYgKG1fcEpiaWcyQ29udGV4dCkgeworICAgICAgICBJQ29kZWNfSmJpZzJNb2R1bGUqIHBKYmlnMk1vdWRsZSA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0SmJpZzJNb2R1bGUoKTsKKyAgICAgICAgcEpiaWcyTW91ZGxlLT5EZXN0cm95SmJpZzJDb250ZXh0KG1fcEpiaWcyQ29udGV4dCk7CisgICAgICAgIG1fcEpiaWcyQ29udGV4dCA9IE5VTEw7CisgICAgfQorICAgIGlmIChtX3BHbG9iYWxTdHJlYW0pIHsKKyAgICAgICAgZGVsZXRlIG1fcEdsb2JhbFN0cmVhbTsKKyAgICB9CisgICAgbV9wR2xvYmFsU3RyZWFtID0gTlVMTDsKK30KK0NGWF9ESUJpdG1hcCogQ1BERl9ESUJTb3VyY2U6OkdldEJpdG1hcCgpIGNvbnN0Cit7CisgICAgaWYgKG1fcENhY2hlZEJpdG1hcCkgeworICAgICAgICByZXR1cm4gbV9wQ2FjaGVkQml0bWFwOworICAgIH0KKyAgICByZXR1cm4gQ2xvbmUoKTsKK30KK3ZvaWQgQ1BERl9ESUJTb3VyY2U6OlJlbGVhc2VCaXRtYXAoQ0ZYX0RJQml0bWFwKiBwQml0bWFwKSBjb25zdAoreworICAgIGlmIChwQml0bWFwICYmIHBCaXRtYXAgIT0gbV9wQ2FjaGVkQml0bWFwKSB7CisgICAgICAgIGRlbGV0ZSBwQml0bWFwOworICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9ESUJTb3VyY2U6OkxvYWQoQ1BERl9Eb2N1bWVudCogcERvYywgY29uc3QgQ1BERl9TdHJlYW0qIHBTdHJlYW0sIENQREZfRElCU291cmNlKiogcHBNYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCogcE1hdHRlQ29sb3IsIENQREZfRGljdGlvbmFyeSogcEZvcm1SZXNvdXJjZXMsIENQREZfRGljdGlvbmFyeSogcFBhZ2VSZXNvdXJjZXMsIEZYX0JPT0wgYlN0ZENTLCBGWF9EV09SRCBHcm91cEZhbWlseSwgRlhfQk9PTCBiTG9hZE1hc2spCit7CisgICAgaWYgKHBTdHJlYW0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fcERvY3VtZW50ID0gcERvYzsKKyAgICBtX3BEaWN0ID0gcFN0cmVhbS0+R2V0RGljdCgpOworICAgIG1fcFN0cmVhbSA9IHBTdHJlYW07CisgICAgbV9XaWR0aCA9IG1fcERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIldpZHRoIikpOworICAgIG1fSGVpZ2h0ID0gbV9wRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiSGVpZ2h0IikpOworICAgIGlmIChtX1dpZHRoIDw9IDAgfHwgbV9IZWlnaHQgPD0gMCB8fCBtX1dpZHRoID4gMHgwMWZmZmYgfHwgbV9IZWlnaHQgPiAweDAxZmZmZikgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fR3JvdXBGYW1pbHkgPSBHcm91cEZhbWlseTsKKyAgICBtX2JMb2FkTWFzayA9IGJMb2FkTWFzazsKKyAgICBpZiAoIUxvYWRDb2xvckluZm8obV9wU3RyZWFtLT5HZXRPYmpOdW0oKSAhPSAwID8gTlVMTCA6IHBGb3JtUmVzb3VyY2VzLCBwUGFnZVJlc291cmNlcykpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWF9EV09SRCBzcmNfcGl0Y2ggPSBtX2JwYzsKKyAgICBpZiAobV9icGMgIT0gMCAmJiBtX25Db21wb25lbnRzICE9IDApIHsKKyAgICAgICAgaWYgKHNyY19waXRjaCA+IDAgJiYgbV9uQ29tcG9uZW50cyA+ICh1bnNpZ25lZClJTlRfTUFYIC8gc3JjX3BpdGNoKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgc3JjX3BpdGNoICo9IG1fbkNvbXBvbmVudHM7CisgICAgICAgIGlmIChzcmNfcGl0Y2ggPiAwICYmIChGWF9EV09SRCltX1dpZHRoID4gKHVuc2lnbmVkKUlOVF9NQVggLyBzcmNfcGl0Y2gpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBzcmNfcGl0Y2ggKj0gbV9XaWR0aDsKKyAgICAgICAgaWYgKHNyY19waXRjaCArIDcgPCBzcmNfcGl0Y2gpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBzcmNfcGl0Y2ggKz0gNzsKKyAgICAgICAgc3JjX3BpdGNoIC89IDg7CisgICAgICAgIGlmIChzcmNfcGl0Y2ggPiAwICYmIChGWF9EV09SRCltX0hlaWdodCA+ICh1bnNpZ25lZClJTlRfTUFYIC8gc3JjX3BpdGNoKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9wU3RyZWFtQWNjID0gRlhfTkVXIENQREZfU3RyZWFtQWNjOworICAgIG1fcFN0cmVhbUFjYy0+TG9hZEFsbERhdGEocFN0cmVhbSwgRkFMU0UsIG1fSGVpZ2h0ICogc3JjX3BpdGNoLCBUUlVFKTsKKyAgICBpZiAobV9wU3RyZWFtQWNjLT5HZXRTaXplKCkgPT0gMCB8fCBtX3BTdHJlYW1BY2MtPkdldERhdGEoKSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGRlY29kZXIgPSBtX3BTdHJlYW1BY2MtPkdldEltYWdlRGVjb2RlcigpOworICAgIGlmICghZGVjb2Rlci5Jc0VtcHR5KCkgJiYgZGVjb2RlciA9PSBGWF9CU1RSQygiQ0NJVFRGYXhEZWNvZGUiKSkgeworICAgICAgICBtX2JwYyA9IDE7CisgICAgfQorICAgIGlmICghQ3JlYXRlRGVjb2RlcigpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKG1fYkltYWdlTWFzaykgeworICAgICAgICBtX2JwcCA9IDE7CisgICAgICAgIG1fYnBjID0gMTsKKyAgICAgICAgbV9uQ29tcG9uZW50cyA9IDE7CisgICAgICAgIG1fQWxwaGFGbGFnID0gMTsKKyAgICB9IGVsc2UgaWYgKG1fYnBjICogbV9uQ29tcG9uZW50cyA9PSAxKSB7CisgICAgICAgIG1fYnBwID0gMTsKKyAgICB9IGVsc2UgaWYgKG1fYnBjICogbV9uQ29tcG9uZW50cyA8PSA4KSB7CisgICAgICAgIG1fYnBwID0gODsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2JwcCA9IDI0OworICAgIH0KKyAgICBpZiAoIW1fYnBjIHx8ICFtX25Db21wb25lbnRzKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9QaXRjaCA9IG1fV2lkdGg7CisgICAgaWYgKChGWF9EV09SRCltX2JwcCA+ICh1bnNpZ25lZClJTlRfTUFYIC8gbV9QaXRjaCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fUGl0Y2ggKj0gbV9icHA7CisgICAgaWYgKG1fUGl0Y2ggKyAzMSA8IG1fUGl0Y2gpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBtX1BpdGNoICs9IDMxOworICAgIG1fUGl0Y2ggPSBtX1BpdGNoIC8gMzIgKiA0OworICAgIG1fcExpbmVCdWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1BpdGNoKTsKKyAgICBpZiAobV9wQ29sb3JTcGFjZSAmJiBiU3RkQ1MpIHsKKyAgICAgICAgbV9wQ29sb3JTcGFjZS0+RW5hYmxlU3RkQ29udmVyc2lvbihUUlVFKTsKKyAgICB9CisgICAgTG9hZFBhbGV0dGUoKTsKKyAgICBpZiAobV9iQ29sb3JLZXkpIHsKKyAgICAgICAgbV9icHAgPSAzMjsKKyAgICAgICAgbV9BbHBoYUZsYWcgPSAyOworICAgICAgICBtX1BpdGNoID0gbV9XaWR0aDsKKyAgICAgICAgaWYgKChGWF9EV09SRCltX2JwcCA+ICh1bnNpZ25lZClJTlRfTUFYIC8gbV9QaXRjaCkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIG1fUGl0Y2ggKj0gbV9icHA7CisgICAgICAgIGlmIChtX1BpdGNoICsgMzEgPCBtX1BpdGNoKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgbV9QaXRjaCArPSAzMTsKKyAgICAgICAgbV9QaXRjaCA9IG1fUGl0Y2ggLyAzMiAqIDQ7CisgICAgICAgIG1fcE1hc2tlZExpbmUgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1BpdGNoKTsKKyAgICB9CisgICAgaWYgKHBwTWFzaykgeworICAgICAgICAqcHBNYXNrID0gTG9hZE1hc2soKnBNYXR0ZUNvbG9yKTsKKyAgICB9CisgICAgaWYgKG1fcENvbG9yU3BhY2UgJiYgYlN0ZENTKSB7CisgICAgICAgIG1fcENvbG9yU3BhY2UtPkVuYWJsZVN0ZENvbnZlcnNpb24oRkFMU0UpOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK2ludAlDUERGX0RJQlNvdXJjZTo6Q29udGludWVUb0xvYWRNYXNrKCkKK3sKKyAgICBpZiAobV9iSW1hZ2VNYXNrKSB7CisgICAgICAgIG1fYnBwID0gMTsKKyAgICAgICAgbV9icGMgPSAxOworICAgICAgICBtX25Db21wb25lbnRzID0gMTsKKyAgICAgICAgbV9BbHBoYUZsYWcgPSAxOworICAgIH0gZWxzZSBpZiAobV9icGMgKiBtX25Db21wb25lbnRzID09IDEpIHsKKyAgICAgICAgbV9icHAgPSAxOworICAgIH0gZWxzZSBpZiAobV9icGMgKiBtX25Db21wb25lbnRzIDw9IDgpIHsKKyAgICAgICAgbV9icHAgPSA4OworICAgIH0gZWxzZSB7CisgICAgICAgIG1fYnBwID0gMjQ7CisgICAgfQorICAgIGlmICghbV9icGMgfHwgIW1fbkNvbXBvbmVudHMpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIG1fUGl0Y2ggPSBtX1dpZHRoOworICAgIGlmICgoRlhfRFdPUkQpbV9icHAgPiAodW5zaWduZWQpSU5UX01BWCAvIG1fUGl0Y2gpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIG1fUGl0Y2ggKj0gbV9icHA7CisgICAgaWYgKG1fUGl0Y2ggKyAzMSA8IG1fUGl0Y2gpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIG1fUGl0Y2ggKz0gMzE7CisgICAgbV9QaXRjaCA9IG1fUGl0Y2ggLyAzMiAqIDQ7CisgICAgbV9wTGluZUJ1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIG1fUGl0Y2gpOworICAgIGlmIChtX3BDb2xvclNwYWNlICYmIG1fYlN0ZENTKSB7CisgICAgICAgIG1fcENvbG9yU3BhY2UtPkVuYWJsZVN0ZENvbnZlcnNpb24oVFJVRSk7CisgICAgfQorICAgIExvYWRQYWxldHRlKCk7CisgICAgaWYgKG1fYkNvbG9yS2V5KSB7CisgICAgICAgIG1fYnBwID0gMzI7CisgICAgICAgIG1fQWxwaGFGbGFnID0gMjsKKyAgICAgICAgbV9QaXRjaCA9IG1fV2lkdGg7CisgICAgICAgIGlmICgoRlhfRFdPUkQpbV9icHAgPiAodW5zaWduZWQpSU5UX01BWCAvIG1fUGl0Y2gpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIG1fUGl0Y2ggKj0gbV9icHA7CisgICAgICAgIGlmIChtX1BpdGNoICsgMzEgPCBtX1BpdGNoKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBtX1BpdGNoICs9IDMxOworICAgICAgICBtX1BpdGNoID0gbV9QaXRjaCAvIDMyICogNDsKKyAgICAgICAgbV9wTWFza2VkTGluZSA9IEZYX0FsbG9jKEZYX0JZVEUsIG1fUGl0Y2gpOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KK2ludAlDUERGX0RJQlNvdXJjZTo6U3RhcnRMb2FkRElCU291cmNlKENQREZfRG9jdW1lbnQqIHBEb2MsIGNvbnN0IENQREZfU3RyZWFtKiBwU3RyZWFtLCBGWF9CT09MIGJIYXNNYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybVJlc291cmNlcywgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZVJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYlN0ZENTLCBGWF9EV09SRCBHcm91cEZhbWlseSwgRlhfQk9PTCBiTG9hZE1hc2spCit7CisgICAgaWYgKHBTdHJlYW0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgbV9wRG9jdW1lbnQgPSBwRG9jOworICAgIG1fcERpY3QgPSBwU3RyZWFtLT5HZXREaWN0KCk7CisgICAgbV9wU3RyZWFtID0gcFN0cmVhbTsKKyAgICBtX2JTdGRDUyA9IGJTdGRDUzsKKyAgICBtX2JIYXNNYXNrID0gYkhhc01hc2s7CisgICAgbV9XaWR0aCA9IG1fcERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIldpZHRoIikpOworICAgIG1fSGVpZ2h0ID0gbV9wRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiSGVpZ2h0IikpOworICAgIGlmIChtX1dpZHRoIDw9IDAgfHwgbV9IZWlnaHQgPD0gMCB8fCBtX1dpZHRoID4gMHgwMWZmZmYgfHwgbV9IZWlnaHQgPiAweDAxZmZmZikgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgbV9Hcm91cEZhbWlseSA9IEdyb3VwRmFtaWx5OworICAgIG1fYkxvYWRNYXNrID0gYkxvYWRNYXNrOworICAgIGlmICghTG9hZENvbG9ySW5mbyhtX3BTdHJlYW0tPkdldE9iak51bSgpICE9IDAgPyBOVUxMIDogcEZvcm1SZXNvdXJjZXMsIHBQYWdlUmVzb3VyY2VzKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgRlhfRFdPUkQgc3JjX3BpdGNoID0gbV9icGM7CisgICAgaWYgKG1fYnBjICE9IDAgJiYgbV9uQ29tcG9uZW50cyAhPSAwKSB7CisgICAgICAgIGlmIChzcmNfcGl0Y2ggPiAwICYmIG1fbkNvbXBvbmVudHMgPiAodW5zaWduZWQpSU5UX01BWCAvIHNyY19waXRjaCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgc3JjX3BpdGNoICo9IG1fbkNvbXBvbmVudHM7CisgICAgICAgIGlmIChzcmNfcGl0Y2ggPiAwICYmIChGWF9EV09SRCltX1dpZHRoID4gKHVuc2lnbmVkKUlOVF9NQVggLyBzcmNfcGl0Y2gpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHNyY19waXRjaCAqPSBtX1dpZHRoOworICAgICAgICBpZiAoc3JjX3BpdGNoICsgNyA8IHNyY19waXRjaCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgc3JjX3BpdGNoICs9IDc7CisgICAgICAgIHNyY19waXRjaCAvPSA4OworICAgICAgICBpZiAoc3JjX3BpdGNoID4gMCAmJiAoRlhfRFdPUkQpbV9IZWlnaHQgPiAodW5zaWduZWQpSU5UX01BWCAvIHNyY19waXRjaCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9wU3RyZWFtQWNjID0gRlhfTkVXIENQREZfU3RyZWFtQWNjOworICAgIG1fcFN0cmVhbUFjYy0+TG9hZEFsbERhdGEocFN0cmVhbSwgRkFMU0UsIG1fSGVpZ2h0ICogc3JjX3BpdGNoLCBUUlVFKTsKKyAgICBpZiAobV9wU3RyZWFtQWNjLT5HZXRTaXplKCkgPT0gMCB8fCBtX3BTdHJlYW1BY2MtPkdldERhdGEoKSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBjb25zdCBDRlhfQnl0ZVN0cmluZyYgZGVjb2RlciA9IG1fcFN0cmVhbUFjYy0+R2V0SW1hZ2VEZWNvZGVyKCk7CisgICAgaWYgKCFkZWNvZGVyLklzRW1wdHkoKSAmJiBkZWNvZGVyID09IEZYX0JTVFJDKCJDQ0lUVEZheERlY29kZSIpKSB7CisgICAgICAgIG1fYnBjID0gMTsKKyAgICB9CisgICAgaW50IHJldCA9IENyZWF0ZURlY29kZXIoKTsKKyAgICBpZiAocmV0ICE9IDEpIHsKKyAgICAgICAgaWYgKCFyZXQpIHsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFDb250aW51ZVRvTG9hZE1hc2soKSkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fYkhhc01hc2spIHsKKyAgICAgICAgICAgIFN0cmF0TG9hZE1hc2soKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICBpZiAoIUNvbnRpbnVlVG9Mb2FkTWFzaygpKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAobV9iSGFzTWFzaykgeworICAgICAgICByZXQgPSBTdHJhdExvYWRNYXNrKCk7CisgICAgfQorICAgIGlmIChyZXQgPT0gMikgeworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICBpZiAobV9wQ29sb3JTcGFjZSAmJiBtX2JTdGRDUykgeworICAgICAgICBtX3BDb2xvclNwYWNlLT5FbmFibGVTdGRDb252ZXJzaW9uKEZBTFNFKTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KK2ludAlDUERGX0RJQlNvdXJjZTo6Q29udGludWVMb2FkRElCU291cmNlKElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIEZYQ09ERUNfU1RBVFVTIHJldDsKKyAgICBpZiAobV9TdGF0dXMgPT0gMSkgeworICAgICAgICBjb25zdCBDRlhfQnl0ZVN0cmluZyYgZGVjb2RlciA9IG1fcFN0cmVhbUFjYy0+R2V0SW1hZ2VEZWNvZGVyKCk7CisgICAgICAgIGlmIChkZWNvZGVyID09IEZYX0JTVFJDKCJKUFhEZWNvZGUiKSkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgSUNvZGVjX0piaWcyTW9kdWxlKiBwSmJpZzJNb3VkbGUgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldEpiaWcyTW9kdWxlKCk7CisgICAgICAgIGlmIChtX3BKYmlnMkNvbnRleHQgPT0gTlVMTCkgeworICAgICAgICAgICAgbV9wSmJpZzJDb250ZXh0ID0gcEpiaWcyTW91ZGxlLT5DcmVhdGVKYmlnMkNvbnRleHQoKTsKKyAgICAgICAgICAgIGlmIChtX3BTdHJlYW1BY2MtPkdldEltYWdlUGFyYW0oKSkgeworICAgICAgICAgICAgICAgIENQREZfU3RyZWFtKiBwR2xvYmFscyA9IG1fcFN0cmVhbUFjYy0+R2V0SW1hZ2VQYXJhbSgpLT5HZXRTdHJlYW0oRlhfQlNUUkMoIkpCSUcyR2xvYmFscyIpKTsKKyAgICAgICAgICAgICAgICBpZiAocEdsb2JhbHMpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wR2xvYmFsU3RyZWFtID0gRlhfTkVXIENQREZfU3RyZWFtQWNjOworICAgICAgICAgICAgICAgICAgICBtX3BHbG9iYWxTdHJlYW0tPkxvYWRBbGxEYXRhKHBHbG9iYWxzLCBGQUxTRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0ID0gcEpiaWcyTW91ZGxlLT5TdGFydERlY29kZShtX3BKYmlnMkNvbnRleHQsIG1fV2lkdGgsIG1fSGVpZ2h0LCBtX3BTdHJlYW1BY2MtPkdldERhdGEoKSwgbV9wU3RyZWFtQWNjLT5HZXRTaXplKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcEdsb2JhbFN0cmVhbSA/IG1fcEdsb2JhbFN0cmVhbS0+R2V0RGF0YSgpIDogTlVMTCwgbV9wR2xvYmFsU3RyZWFtID8gbV9wR2xvYmFsU3RyZWFtLT5HZXRTaXplKCkgOiAwLCBtX3BDYWNoZWRCaXRtYXAtPkdldEJ1ZmZlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BDYWNoZWRCaXRtYXAtPkdldFBpdGNoKCksIHBQYXVzZSk7CisgICAgICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3BDYWNoZWRCaXRtYXA7CisgICAgICAgICAgICAgICAgbV9wQ2FjaGVkQml0bWFwID0gTlVMTDsKKyAgICAgICAgICAgICAgICBpZiAobV9wR2xvYmFsU3RyZWFtKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3BHbG9iYWxTdHJlYW07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fcEdsb2JhbFN0cmVhbSA9IE5VTEw7CisgICAgICAgICAgICAgICAgcEpiaWcyTW91ZGxlLT5EZXN0cm95SmJpZzJDb250ZXh0KG1fcEpiaWcyQ29udGV4dCk7CisgICAgICAgICAgICAgICAgbV9wSmJpZzJDb250ZXh0ID0gTlVMTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZXQgPT0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRSkgeworICAgICAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IHJldDEgPSAxOworICAgICAgICAgICAgaWYgKG1fYkhhc01hc2spIHsKKyAgICAgICAgICAgICAgICByZXQxID0gQ29udGludWVMb2FkTWFza0RJQihwUGF1c2UpOworICAgICAgICAgICAgICAgIG1fU3RhdHVzID0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZXQxID09IDIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0MTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX3BDb2xvclNwYWNlICYmIG1fYlN0ZENTKSB7CisgICAgICAgICAgICAgICAgbV9wQ29sb3JTcGFjZS0+RW5hYmxlU3RkQ29udmVyc2lvbihGQUxTRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmV0MTsKKyAgICAgICAgfQorICAgICAgICBGWENPREVDX1NUQVRVUyByZXQgPSBwSmJpZzJNb3VkbGUtPkNvbnRpbnVlRGVjb2RlKG1fcEpiaWcyQ29udGV4dCwgcFBhdXNlKTsKKyAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgIGRlbGV0ZSBtX3BDYWNoZWRCaXRtYXA7CisgICAgICAgICAgICBtX3BDYWNoZWRCaXRtYXAgPSBOVUxMOworICAgICAgICAgICAgaWYgKG1fcEdsb2JhbFN0cmVhbSkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3BHbG9iYWxTdHJlYW07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3BHbG9iYWxTdHJlYW0gPSBOVUxMOworICAgICAgICAgICAgcEpiaWcyTW91ZGxlLT5EZXN0cm95SmJpZzJDb250ZXh0KG1fcEpiaWcyQ29udGV4dCk7CisgICAgICAgICAgICBtX3BKYmlnMkNvbnRleHQgPSBOVUxMOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJldCA9PSBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFKSB7CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgfQorICAgICAgICBpbnQgcmV0MSA9IDE7CisgICAgICAgIGlmIChtX2JIYXNNYXNrKSB7CisgICAgICAgICAgICByZXQxID0gQ29udGludWVMb2FkTWFza0RJQihwUGF1c2UpOworICAgICAgICAgICAgbV9TdGF0dXMgPSAyOworICAgICAgICB9CisgICAgICAgIGlmIChyZXQxID09IDIpIHsKKyAgICAgICAgICAgIHJldHVybiByZXQxOworICAgICAgICB9CisgICAgICAgIGlmIChtX3BDb2xvclNwYWNlICYmIG1fYlN0ZENTKSB7CisgICAgICAgICAgICBtX3BDb2xvclNwYWNlLT5FbmFibGVTdGRDb252ZXJzaW9uKEZBTFNFKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0MTsKKyAgICB9IGVsc2UgaWYgKG1fU3RhdHVzID09IDIpIHsKKyAgICAgICAgcmV0dXJuIENvbnRpbnVlTG9hZE1hc2tESUIocFBhdXNlKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CitGWF9CT09MIENQREZfRElCU291cmNlOjpMb2FkQ29sb3JJbmZvKENQREZfRGljdGlvbmFyeSogcEZvcm1SZXNvdXJjZXMsIENQREZfRGljdGlvbmFyeSogcFBhZ2VSZXNvdXJjZXMpCit7CisgICAgaWYgKG1fcERpY3QtPkdldEludGVnZXIoIkltYWdlTWFzayIpKSB7CisgICAgICAgIG1fYkltYWdlTWFzayA9IFRSVUU7CisgICAgfQorICAgIGlmIChtX2JJbWFnZU1hc2sgfHwgIW1fcERpY3QtPktleUV4aXN0KEZYX0JTVFJDKCJDb2xvclNwYWNlIikpKSB7CisgICAgICAgIGlmICghbV9iSW1hZ2VNYXNrKSB7CisgICAgICAgICAgICBDUERGX09iamVjdCogcEZpbHRlciA9IG1fcERpY3QtPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiRmlsdGVyIikpOworICAgICAgICAgICAgaWYgKHBGaWx0ZXIpIHsKKyAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBmaWx0ZXI7CisgICAgICAgICAgICAgICAgaWYgKHBGaWx0ZXItPkdldFR5cGUoKSA9PSBQREZPQkpfTkFNRSkgeworICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBwRmlsdGVyLT5HZXRTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PSBGWF9CU1RSQygiSlBYRGVjb2RlIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwRmlsdGVyLT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgICAgICAgICAgICAgIENQREZfQXJyYXkqIHBBcnJheSA9IChDUERGX0FycmF5KilwRmlsdGVyOworICAgICAgICAgICAgICAgICAgICBpZiAocEFycmF5LT5HZXRTdHJpbmcocEFycmF5LT5HZXRDb3VudCgpIC0gMSkgPT0gRlhfQlNUUkMoIkpQWERlY29kZSIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX2JJbWFnZU1hc2sgPSBUUlVFOworICAgICAgICBtX2JwYyA9IG1fbkNvbXBvbmVudHMgPSAxOworICAgICAgICBDUERGX0FycmF5KiBwRGVjb2RlID0gbV9wRGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIkRlY29kZSIpKTsKKyAgICAgICAgbV9iRGVmYXVsdERlY29kZSA9IHBEZWNvZGUgPT0gTlVMTCB8fCBwRGVjb2RlLT5HZXRJbnRlZ2VyKDApID09IDA7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBDUERGX09iamVjdCogcENTT2JqID0gbV9wRGljdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJDb2xvclNwYWNlIikpOworICAgIGlmIChwQ1NPYmogPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIENQREZfRG9jUGFnZURhdGEqIHBEb2NQYWdlRGF0YSA9IG1fcERvY3VtZW50LT5HZXRQYWdlRGF0YSgpOworICAgIGlmIChwRm9ybVJlc291cmNlcykgeworICAgICAgICBtX3BDb2xvclNwYWNlID0gcERvY1BhZ2VEYXRhLT5HZXRDb2xvclNwYWNlKHBDU09iaiwgcEZvcm1SZXNvdXJjZXMpOworICAgIH0KKyAgICBpZiAobV9wQ29sb3JTcGFjZSA9PSBOVUxMKSB7CisgICAgICAgIG1fcENvbG9yU3BhY2UgPSBwRG9jUGFnZURhdGEtPkdldENvbG9yU3BhY2UocENTT2JqLCBwUGFnZVJlc291cmNlcyk7CisgICAgfQorICAgIGlmIChtX3BDb2xvclNwYWNlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBtX2JwYyA9IG1fcERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIkJpdHNQZXJDb21wb25lbnQiKSk7CisgICAgbV9GYW1pbHkgPSBtX3BDb2xvclNwYWNlLT5HZXRGYW1pbHkoKTsKKyAgICBtX25Db21wb25lbnRzID0gbV9wQ29sb3JTcGFjZS0+Q291bnRDb21wb25lbnRzKCk7CisgICAgaWYgKG1fRmFtaWx5ID09IFBERkNTX0lDQ0JBU0VEICYmIHBDU09iai0+R2V0VHlwZSgpID09IFBERk9CSl9OQU1FKSB7CisgICAgICAgIENGWF9CeXRlU3RyaW5nIGNzID0gcENTT2JqLT5HZXRTdHJpbmcoKTsKKyAgICAgICAgaWYgKGNzID09IEZYX0JTVFJDKCJEZXZpY2VHcmF5IikpIHsKKyAgICAgICAgICAgIG1fbkNvbXBvbmVudHMgPSAxOworICAgICAgICB9IGVsc2UgaWYgKGNzID09IEZYX0JTVFJDKCJEZXZpY2VSR0IiKSkgeworICAgICAgICAgICAgbV9uQ29tcG9uZW50cyA9IDM7CisgICAgICAgIH0gZWxzZSBpZiAoY3MgPT0gRlhfQlNUUkMoIkRldmljZUNNWUsiKSkgeworICAgICAgICAgICAgbV9uQ29tcG9uZW50cyA9IDQ7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9wQ29tcERhdGEgPSBGWF9BbGxvYyhESUJfQ09NUF9EQVRBLCBtX25Db21wb25lbnRzKTsKKyAgICBpZiAobV9icGMgPT0gMCkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgaW50IG1heF9kYXRhID0gKDEgPDwgbV9icGMpIC0gMTsKKyAgICBDUERGX0FycmF5KiBwRGVjb2RlID0gbV9wRGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIkRlY29kZSIpKTsKKyAgICBpZiAocERlY29kZSkgeworICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgbV9uQ29tcG9uZW50czsgaSArKykgeworICAgICAgICAgICAgbV9wQ29tcERhdGFbaV0ubV9EZWNvZGVNaW4gPSBwRGVjb2RlLT5HZXROdW1iZXIoaSAqIDIpOworICAgICAgICAgICAgRlhfRkxPQVQgbWF4ID0gcERlY29kZS0+R2V0TnVtYmVyKGkgKiAyICsgMSk7CisgICAgICAgICAgICBtX3BDb21wRGF0YVtpXS5tX0RlY29kZVN0ZXAgPSAobWF4IC0gbV9wQ29tcERhdGFbaV0ubV9EZWNvZGVNaW4pIC8gbWF4X2RhdGE7CisgICAgICAgICAgICBGWF9GTE9BVCBkZWZfdmFsdWUsIGRlZl9taW4sIGRlZl9tYXg7CisgICAgICAgICAgICBtX3BDb2xvclNwYWNlLT5HZXREZWZhdWx0VmFsdWUoaSwgZGVmX3ZhbHVlLCBkZWZfbWluLCBkZWZfbWF4KTsKKyAgICAgICAgICAgIGlmIChtX0ZhbWlseSA9PSBQREZDU19JTkRFWEVEKSB7CisgICAgICAgICAgICAgICAgZGVmX21heCA9IChGWF9GTE9BVCltYXhfZGF0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWZfbWluICE9IG1fcENvbXBEYXRhW2ldLm1fRGVjb2RlTWluIHx8IGRlZl9tYXggIT0gbWF4KSB7CisgICAgICAgICAgICAgICAgbV9iRGVmYXVsdERlY29kZSA9IEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IG1fbkNvbXBvbmVudHM7IGkgKyspIHsKKyAgICAgICAgICAgIEZYX0ZMT0FUIGRlZl92YWx1ZTsKKyAgICAgICAgICAgIG1fcENvbG9yU3BhY2UtPkdldERlZmF1bHRWYWx1ZShpLCBkZWZfdmFsdWUsIG1fcENvbXBEYXRhW2ldLm1fRGVjb2RlTWluLCBtX3BDb21wRGF0YVtpXS5tX0RlY29kZVN0ZXApOworICAgICAgICAgICAgaWYgKG1fRmFtaWx5ID09IFBERkNTX0lOREVYRUQpIHsKKyAgICAgICAgICAgICAgICBtX3BDb21wRGF0YVtpXS5tX0RlY29kZVN0ZXAgPSAoRlhfRkxPQVQpbWF4X2RhdGE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3BDb21wRGF0YVtpXS5tX0RlY29kZVN0ZXAgPSAobV9wQ29tcERhdGFbaV0ubV9EZWNvZGVTdGVwIC0gbV9wQ29tcERhdGFbaV0ubV9EZWNvZGVNaW4pIC8gbWF4X2RhdGE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFtX3BEaWN0LT5LZXlFeGlzdChGWF9CU1RSQygiU01hc2siKSkpIHsKKyAgICAgICAgQ1BERl9PYmplY3QqIHBNYXNrID0gbV9wRGljdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJNYXNrIikpOworICAgICAgICBpZiAocE1hc2sgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBNYXNrLT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSAoQ1BERl9BcnJheSopcE1hc2s7CisgICAgICAgICAgICBpZiAocEFycmF5LT5HZXRDb3VudCgpID49IG1fbkNvbXBvbmVudHMgKiAyKQorICAgICAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBtX25Db21wb25lbnRzICogMjsgaSArKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoaSAlIDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcENvbXBEYXRhW2kgLyAyXS5tX0NvbG9yS2V5TWF4ID0gcEFycmF5LT5HZXRJbnRlZ2VyKGkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9wQ29tcERhdGFbaSAvIDJdLm1fQ29sb3JLZXlNaW4gPSBwQXJyYXktPkdldEludGVnZXIoaSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2JDb2xvcktleSA9IFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitJQ29kZWNfU2NhbmxpbmVEZWNvZGVyKiBGUERGQVBJX0NyZWF0ZUZheERlY29kZXIoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorICAgICAgICBjb25zdCBDUERGX0RpY3Rpb25hcnkqIHBQYXJhbXMpOworSUNvZGVjX1NjYW5saW5lRGVjb2RlciogRlBERkFQSV9DcmVhdGVGbGF0ZURlY29kZXIoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorICAgICAgICBpbnQgbkNvbXBzLCBpbnQgYnBjLCBjb25zdCBDUERGX0RpY3Rpb25hcnkqIHBQYXJhbXMpOworaW50IENQREZfRElCU291cmNlOjpDcmVhdGVEZWNvZGVyKCkKK3sKKyAgICBjb25zdCBDRlhfQnl0ZVN0cmluZyYgZGVjb2RlciA9IG1fcFN0cmVhbUFjYy0+R2V0SW1hZ2VEZWNvZGVyKCk7CisgICAgaWYgKGRlY29kZXIuSXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBGWF9MUENCWVRFIHNyY19kYXRhID0gbV9wU3RyZWFtQWNjLT5HZXREYXRhKCk7CisgICAgRlhfRFdPUkQgc3JjX3NpemUgPSBtX3BTdHJlYW1BY2MtPkdldFNpemUoKTsKKyAgICBjb25zdCBDUERGX0RpY3Rpb25hcnkqIHBQYXJhbXMgPSBtX3BTdHJlYW1BY2MtPkdldEltYWdlUGFyYW0oKTsKKyAgICBpZiAoZGVjb2RlciA9PSBGWF9CU1RSQygiQ0NJVFRGYXhEZWNvZGUiKSkgeworICAgICAgICBtX3BEZWNvZGVyID0gRlBERkFQSV9DcmVhdGVGYXhEZWNvZGVyKHNyY19kYXRhLCBzcmNfc2l6ZSwgbV9XaWR0aCwgbV9IZWlnaHQsIHBQYXJhbXMpOworICAgIH0gZWxzZSBpZiAoZGVjb2RlciA9PSBGWF9CU1RSQygiRENURGVjb2RlIikpIHsKKyAgICAgICAgbV9wRGVjb2RlciA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0SnBlZ01vZHVsZSgpLT5DcmVhdGVEZWNvZGVyKHNyY19kYXRhLCBzcmNfc2l6ZSwgbV9XaWR0aCwgbV9IZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICBtX25Db21wb25lbnRzLCBwUGFyYW1zID8gcFBhcmFtcy0+R2V0SW50ZWdlcihGWF9CU1RSKCJDb2xvclRyYW5zZm9ybSIpLCAxKSA6IDEpOworICAgICAgICBpZiAoTlVMTCA9PSBtX3BEZWNvZGVyKSB7CisgICAgICAgICAgICBGWF9CT09MIGJUcmFuc2Zvcm0gPSBGQUxTRTsKKyAgICAgICAgICAgIGludCBjb21wcywgYnBjOworICAgICAgICAgICAgSUNvZGVjX0pwZWdNb2R1bGUqIHBKcGVnTW9kdWxlID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRKcGVnTW9kdWxlKCk7CisgICAgICAgICAgICBpZiAocEpwZWdNb2R1bGUtPkxvYWRJbmZvKHNyY19kYXRhLCBzcmNfc2l6ZSwgbV9XaWR0aCwgbV9IZWlnaHQsIGNvbXBzLCBicGMsIGJUcmFuc2Zvcm0pKSB7CisgICAgICAgICAgICAgICAgbV9uQ29tcG9uZW50cyA9IGNvbXBzOworICAgICAgICAgICAgICAgIG1fYnBjID0gYnBjOworICAgICAgICAgICAgICAgIG1fcERlY29kZXIgPSBDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldEpwZWdNb2R1bGUoKS0+Q3JlYXRlRGVjb2RlcihzcmNfZGF0YSwgc3JjX3NpemUsIG1fV2lkdGgsIG1fSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX25Db21wb25lbnRzLCBiVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZGVjb2RlciA9PSBGWF9CU1RSQygiRmxhdGVEZWNvZGUiKSkgeworICAgICAgICBtX3BEZWNvZGVyID0gRlBERkFQSV9DcmVhdGVGbGF0ZURlY29kZXIoc3JjX2RhdGEsIHNyY19zaXplLCBtX1dpZHRoLCBtX0hlaWdodCwgbV9uQ29tcG9uZW50cywgbV9icGMsIHBQYXJhbXMpOworICAgIH0gZWxzZSBpZiAoZGVjb2RlciA9PSBGWF9CU1RSQygiSlBYRGVjb2RlIikpIHsKKyAgICAgICAgTG9hZEpweEJpdG1hcCgpOworICAgICAgICByZXR1cm4gbV9wQ2FjaGVkQml0bWFwICE9IE5VTEwgPyAxIDogMDsKKyAgICB9IGVsc2UgaWYgKGRlY29kZXIgPT0gRlhfQlNUUkMoIkpCSUcyRGVjb2RlIikpIHsKKyAgICAgICAgbV9wQ2FjaGVkQml0bWFwID0gRlhfTkVXIENGWF9ESUJpdG1hcDsKKyAgICAgICAgaWYgKCFtX3BDYWNoZWRCaXRtYXAtPkNyZWF0ZShtX1dpZHRoLCBtX0hlaWdodCwgbV9iSW1hZ2VNYXNrID8gRlhESUJfMWJwcE1hc2sgOiBGWERJQl8xYnBwUmdiKSkgeworICAgICAgICAgICAgZGVsZXRlIG1fcENhY2hlZEJpdG1hcDsKKyAgICAgICAgICAgIG1fcENhY2hlZEJpdG1hcCA9IE5VTEw7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBtX1N0YXR1cyA9IDE7CisgICAgICAgIHJldHVybiAyOworICAgIH0gZWxzZSBpZiAoZGVjb2RlciA9PSBGWF9CU1RSQygiUnVuTGVuZ3RoRGVjb2RlIikpIHsKKyAgICAgICAgbV9wRGVjb2RlciA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0QmFzaWNNb2R1bGUoKS0+Q3JlYXRlUnVuTGVuZ3RoRGVjb2RlcihzcmNfZGF0YSwgc3JjX3NpemUsIG1fV2lkdGgsIG1fSGVpZ2h0LCBtX25Db21wb25lbnRzLCBtX2JwYyk7CisgICAgfQorICAgIGlmIChtX3BEZWNvZGVyKSB7CisgICAgICAgIGludCByZXF1ZXN0ZWRfcGl0Y2ggPSAobV9XaWR0aCAqIG1fbkNvbXBvbmVudHMgKiBtX2JwYyArIDcpIC8gODsKKyAgICAgICAgaW50IHByb3ZpZGVkX3BpdGNoID0gKG1fcERlY29kZXItPkdldFdpZHRoKCkgKiBtX3BEZWNvZGVyLT5Db3VudENvbXBzKCkgKiBtX3BEZWNvZGVyLT5HZXRCUEMoKSArIDcpIC8gODsKKyAgICAgICAgaWYgKHByb3ZpZGVkX3BpdGNoIDwgcmVxdWVzdGVkX3BpdGNoKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9Cit2b2lkIENQREZfRElCU291cmNlOjpMb2FkSnB4Qml0bWFwKCkKK3sKKyAgICBJQ29kZWNfSnB4TW9kdWxlKiBwSnB4TW9kdWxlID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5HZXRKcHhNb2R1bGUoKTsKKyAgICBpZiAocEpweE1vZHVsZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfTFBWT0lEIGN0eCA9IHBKcHhNb2R1bGUtPkNyZWF0ZURlY29kZXIobV9wU3RyZWFtQWNjLT5HZXREYXRhKCksIG1fcFN0cmVhbUFjYy0+R2V0U2l6ZSgpLCBtX3BDb2xvclNwYWNlICE9IE5VTEwpOworICAgIGlmIChjdHggPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX0RXT1JEIHdpZHRoID0gMCwgaGVpZ2h0ID0gMCwgY29kZXN0cmVhbV9uQ29tcHMgPSAwLCBpbWFnZV9uQ29tcHMgPSAwOworICAgIHBKcHhNb2R1bGUtPkdldEltYWdlSW5mbyhjdHgsIHdpZHRoLCBoZWlnaHQsIGNvZGVzdHJlYW1fbkNvbXBzLCBpbWFnZV9uQ29tcHMpOworICAgIGlmICgoaW50KXdpZHRoIDwgbV9XaWR0aCB8fCAoaW50KWhlaWdodCA8IG1fSGVpZ2h0KSB7CisgICAgICAgIHBKcHhNb2R1bGUtPkRlc3Ryb3lEZWNvZGVyKGN0eCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IG91dHB1dF9uQ29tcHM7CisgICAgRlhfQk9PTCBiVHJhbnNsYXRlQ29sb3IsIGJTd2FwUkdCID0gRkFMU0U7CisgICAgaWYgKG1fcENvbG9yU3BhY2UpIHsKKyAgICAgICAgaWYgKGNvZGVzdHJlYW1fbkNvbXBzICE9IChGWF9EV09SRCltX3BDb2xvclNwYWNlLT5Db3VudENvbXBvbmVudHMoKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG91dHB1dF9uQ29tcHMgPSBjb2Rlc3RyZWFtX25Db21wczsKKyAgICAgICAgYlRyYW5zbGF0ZUNvbG9yID0gRkFMU0U7CisgICAgICAgIGlmIChtX3BDb2xvclNwYWNlID09IENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19ERVZJQ0VSR0IpKSB7CisgICAgICAgICAgICBiU3dhcFJHQiA9IFRSVUU7CisgICAgICAgICAgICBtX3BDb2xvclNwYWNlID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGJUcmFuc2xhdGVDb2xvciA9IFRSVUU7CisgICAgICAgIGlmIChpbWFnZV9uQ29tcHMpIHsKKyAgICAgICAgICAgIG91dHB1dF9uQ29tcHMgPSBpbWFnZV9uQ29tcHM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvdXRwdXRfbkNvbXBzID0gY29kZXN0cmVhbV9uQ29tcHM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG91dHB1dF9uQ29tcHMgPT0gMykgeworICAgICAgICAgICAgYlN3YXBSR0IgPSBUUlVFOworICAgICAgICB9IGVsc2UgaWYgKG91dHB1dF9uQ29tcHMgPT0gNCkgeworICAgICAgICAgICAgbV9wQ29sb3JTcGFjZSA9IENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19ERVZJQ0VDTVlLKTsKKyAgICAgICAgICAgIGJUcmFuc2xhdGVDb2xvciA9IEZBTFNFOworICAgICAgICB9CisgICAgICAgIG1fbkNvbXBvbmVudHMgPSBvdXRwdXRfbkNvbXBzOworICAgIH0KKyAgICBGWERJQl9Gb3JtYXQgZm9ybWF0OworICAgIGlmIChvdXRwdXRfbkNvbXBzID09IDEpIHsKKyAgICAgICAgZm9ybWF0ID0gRlhESUJfOGJwcFJnYjsKKyAgICB9IGVsc2UgaWYgKG91dHB1dF9uQ29tcHMgPD0gMykgeworICAgICAgICBmb3JtYXQgPSBGWERJQl9SZ2I7CisgICAgfSBlbHNlIGlmIChvdXRwdXRfbkNvbXBzID09IDQpIHsKKyAgICAgICAgZm9ybWF0ID0gRlhESUJfUmdiMzI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgd2lkdGggPSAod2lkdGggKiBvdXRwdXRfbkNvbXBzICsgMikgLyAzOworICAgICAgICBmb3JtYXQgPSBGWERJQl9SZ2I7CisgICAgfQorICAgIG1fcENhY2hlZEJpdG1hcCA9IEZYX05FVyBDRlhfRElCaXRtYXA7CisgICAgaWYgKCFtX3BDYWNoZWRCaXRtYXAtPkNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpKSB7CisgICAgICAgIGRlbGV0ZSBtX3BDYWNoZWRCaXRtYXA7CisgICAgICAgIG1fcENhY2hlZEJpdG1hcCA9IE5VTEw7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wQ2FjaGVkQml0bWFwLT5DbGVhcigweEZGRkZGRkZGKTsKKyAgICBGWF9MUEJZVEUgb3V0cHV0X29mZnNldHMgPSBGWF9BbGxvYyhGWF9CWVRFLCBvdXRwdXRfbkNvbXBzKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG91dHB1dF9uQ29tcHM7IGkgKyspIHsKKyAgICAgICAgb3V0cHV0X29mZnNldHNbaV0gPSBpOworICAgIH0KKyAgICBpZiAoYlN3YXBSR0IpIHsKKyAgICAgICAgb3V0cHV0X29mZnNldHNbMF0gPSAyOworICAgICAgICBvdXRwdXRfb2Zmc2V0c1syXSA9IDA7CisgICAgfQorICAgIGlmICghcEpweE1vZHVsZS0+RGVjb2RlKGN0eCwgbV9wQ2FjaGVkQml0bWFwLT5HZXRCdWZmZXIoKSwgbV9wQ2FjaGVkQml0bWFwLT5HZXRQaXRjaCgpLCBiVHJhbnNsYXRlQ29sb3IsIG91dHB1dF9vZmZzZXRzKSkgeworICAgICAgICBkZWxldGUgbV9wQ2FjaGVkQml0bWFwOworICAgICAgICBtX3BDYWNoZWRCaXRtYXAgPSBOVUxMOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX0ZyZWUob3V0cHV0X29mZnNldHMpOworICAgIHBKcHhNb2R1bGUtPkRlc3Ryb3lEZWNvZGVyKGN0eCk7CisgICAgaWYgKG1fcENvbG9yU3BhY2UgJiYgbV9wQ29sb3JTcGFjZS0+R2V0RmFtaWx5KCkgPT0gUERGQ1NfSU5ERVhFRCAmJiBtX2JwYyA8IDgpIHsKKyAgICAgICAgaW50IHNjYWxlID0gOCAtIG1fYnBjOworICAgICAgICBmb3IgKEZYX0RXT1JEIHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7CisgICAgICAgICAgICBGWF9MUEJZVEUgc2NhbmxpbmUgPSAoRlhfTFBCWVRFKW1fcENhY2hlZEJpdG1hcC0+R2V0U2NhbmxpbmUocm93KTsKKyAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgICpzY2FubGluZSA9ICgqc2NhbmxpbmUpID4+IHNjYWxlOworICAgICAgICAgICAgICAgIHNjYW5saW5lKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgbV9icGMgPSA4OworfQordm9pZCBDUERGX0RJQlNvdXJjZTo6TG9hZEpiaWcyQml0bWFwKCkKK3sKKyAgICBJQ29kZWNfSmJpZzJNb2R1bGUqIHBKYmlnMk1vZHVsZSA9IENQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0SmJpZzJNb2R1bGUoKTsKKyAgICBpZiAocEpiaWcyTW9kdWxlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX1N0cmVhbUFjYyogcEdsb2JhbFN0cmVhbSA9IE5VTEw7CisgICAgaWYgKG1fcFN0cmVhbUFjYy0+R2V0SW1hZ2VQYXJhbSgpKSB7CisgICAgICAgIENQREZfU3RyZWFtKiBwR2xvYmFscyA9IG1fcFN0cmVhbUFjYy0+R2V0SW1hZ2VQYXJhbSgpLT5HZXRTdHJlYW0oRlhfQlNUUkMoIkpCSUcyR2xvYmFscyIpKTsKKyAgICAgICAgaWYgKHBHbG9iYWxzKSB7CisgICAgICAgICAgICBwR2xvYmFsU3RyZWFtID0gRlhfTkVXIENQREZfU3RyZWFtQWNjOworICAgICAgICAgICAgcEdsb2JhbFN0cmVhbS0+TG9hZEFsbERhdGEocEdsb2JhbHMsIEZBTFNFKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX3BDYWNoZWRCaXRtYXAgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOworICAgIGlmICghbV9wQ2FjaGVkQml0bWFwLT5DcmVhdGUobV9XaWR0aCwgbV9IZWlnaHQsIG1fYkltYWdlTWFzayA/IEZYRElCXzFicHBNYXNrIDogRlhESUJfMWJwcFJnYikpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgcmV0ID0gcEpiaWcyTW9kdWxlLT5EZWNvZGUobV9XaWR0aCwgbV9IZWlnaHQsIG1fcFN0cmVhbUFjYy0+R2V0RGF0YSgpLCBtX3BTdHJlYW1BY2MtPkdldFNpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEdsb2JhbFN0cmVhbSA/IHBHbG9iYWxTdHJlYW0tPkdldERhdGEoKSA6IE5VTEwsIHBHbG9iYWxTdHJlYW0gPyBwR2xvYmFsU3RyZWFtLT5HZXRTaXplKCkgOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BDYWNoZWRCaXRtYXAtPkdldEJ1ZmZlcigpLCBtX3BDYWNoZWRCaXRtYXAtPkdldFBpdGNoKCkpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGRlbGV0ZSBtX3BDYWNoZWRCaXRtYXA7CisgICAgICAgIG1fcENhY2hlZEJpdG1hcCA9IE5VTEw7CisgICAgfQorICAgIGlmIChwR2xvYmFsU3RyZWFtKSB7CisgICAgICAgIGRlbGV0ZSBwR2xvYmFsU3RyZWFtOworICAgIH0KKyAgICBtX2JwYyA9IDE7CisgICAgbV9uQ29tcG9uZW50cyA9IDE7Cit9CitDUERGX0RJQlNvdXJjZSogQ1BERl9ESUJTb3VyY2U6OkxvYWRNYXNrKEZYX0RXT1JEJiBNYXR0ZUNvbG9yKQoreworICAgIE1hdHRlQ29sb3IgPSAweGZmZmZmZmZmOworICAgIENQREZfU3RyZWFtKiBwU29mdE1hc2sgPSBtX3BEaWN0LT5HZXRTdHJlYW0oRlhfQlNUUkMoIlNNYXNrIikpOworICAgIGlmIChwU29mdE1hc2spIHsKKyAgICAgICAgQ1BERl9BcnJheSogcE1hdHRlID0gcFNvZnRNYXNrLT5HZXREaWN0KCktPkdldEFycmF5KEZYX0JTVFJDKCJNYXR0ZSIpKTsKKyAgICAgICAgaWYgKHBNYXR0ZSAhPSBOVUxMICYmIG1fcENvbG9yU3BhY2UgJiYgKEZYX0RXT1JEKW1fcENvbG9yU3BhY2UtPkNvdW50Q29tcG9uZW50cygpIDw9IG1fbkNvbXBvbmVudHMpIHsKKyAgICAgICAgICAgIEZYX0ZMT0FUKiBwQ29sb3IgPSBGWF9BbGxvYyhGWF9GTE9BVCwgbV9uQ29tcG9uZW50cyk7CisgICAgICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgbV9uQ29tcG9uZW50czsgaSArKykgeworICAgICAgICAgICAgICAgIHBDb2xvcltpXSA9IHBNYXR0ZS0+R2V0RmxvYXQoaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9GTE9BVCBSLCBHLCBCOworICAgICAgICAgICAgbV9wQ29sb3JTcGFjZS0+R2V0UkdCKHBDb2xvciwgUiwgRywgQik7CisgICAgICAgICAgICBGWF9GcmVlKHBDb2xvcik7CisgICAgICAgICAgICBNYXR0ZUNvbG9yID0gRlhBUkdCX01BS0UoMCwgRlhTWVNfcm91bmQoUiAqIDI1NSksIEZYU1lTX3JvdW5kKEcgKiAyNTUpLCBGWFNZU19yb3VuZChCICogMjU1KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIExvYWRNYXNrRElCKHBTb2Z0TWFzayk7CisgICAgfQorICAgIENQREZfT2JqZWN0KiBwTWFzayA9IG1fcERpY3QtPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiTWFzayIpKTsKKyAgICBpZiAocE1hc2sgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHBNYXNrLT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUkVBTSkgeworICAgICAgICByZXR1cm4gTG9hZE1hc2tESUIoKENQREZfU3RyZWFtKilwTWFzayk7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQoraW50CUNQREZfRElCU291cmNlOjpTdHJhdExvYWRNYXNrKCkKK3sKKyAgICBtX01hdHRlQ29sb3IgPSAweGZmZmZmZmZmOworICAgIG1fcE1hc2tTdHJlYW0gPSBtX3BEaWN0LT5HZXRTdHJlYW0oRlhfQlNUUkMoIlNNYXNrIikpOworICAgIGlmIChtX3BNYXNrU3RyZWFtKSB7CisgICAgICAgIENQREZfQXJyYXkqIHBNYXR0ZSA9IG1fcE1hc2tTdHJlYW0tPkdldERpY3QoKS0+R2V0QXJyYXkoRlhfQlNUUkMoIk1hdHRlIikpOworICAgICAgICBpZiAocE1hdHRlICE9IE5VTEwgJiYgbV9wQ29sb3JTcGFjZSAmJiAoRlhfRFdPUkQpbV9wQ29sb3JTcGFjZS0+Q291bnRDb21wb25lbnRzKCkgPD0gbV9uQ29tcG9uZW50cykgeworICAgICAgICAgICAgRlhfRkxPQVQgUiwgRywgQjsKKyAgICAgICAgICAgIEZYX0ZMT0FUKiBwQ29sb3IgPSBGWF9BbGxvYyhGWF9GTE9BVCwgbV9uQ29tcG9uZW50cyk7CisgICAgICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgbV9uQ29tcG9uZW50czsgaSArKykgeworICAgICAgICAgICAgICAgIHBDb2xvcltpXSA9IHBNYXR0ZS0+R2V0RmxvYXQoaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3BDb2xvclNwYWNlLT5HZXRSR0IocENvbG9yLCBSLCBHLCBCKTsKKyAgICAgICAgICAgIEZYX0ZyZWUocENvbG9yKTsKKyAgICAgICAgICAgIG1fTWF0dGVDb2xvciA9IEZYQVJHQl9NQUtFKDAsIEZYU1lTX3JvdW5kKFIgKiAyNTUpLCBGWFNZU19yb3VuZChHICogMjU1KSwgRlhTWVNfcm91bmQoQiAqIDI1NSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTdGFydExvYWRNYXNrRElCKCk7CisgICAgfQorICAgIG1fcE1hc2tTdHJlYW0gPSBtX3BEaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIk1hc2siKSk7CisgICAgaWYgKG1fcE1hc2tTdHJlYW0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgaWYgKG1fcE1hc2tTdHJlYW0tPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSRUFNKSB7CisgICAgICAgIHJldHVybiBTdGFydExvYWRNYXNrRElCKCk7CisgICAgfQorICAgIHJldHVybiAxOworfQoraW50CUNQREZfRElCU291cmNlOjpDb250aW51ZUxvYWRNYXNrRElCKElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIGlmIChtX3BNYXNrID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGludCByZXQgPSBtX3BNYXNrLT5Db250aW51ZUxvYWRESUJTb3VyY2UocFBhdXNlKTsKKyAgICBpZiAocmV0ID09IDIpIHsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisgICAgaWYgKG1fcENvbG9yU3BhY2UgJiYgbV9iU3RkQ1MpIHsKKyAgICAgICAgbV9wQ29sb3JTcGFjZS0+RW5hYmxlU3RkQ29udmVyc2lvbihGQUxTRSk7CisgICAgfQorICAgIGlmICghcmV0KSB7CisgICAgICAgIGRlbGV0ZSBtX3BNYXNrOworICAgICAgICBtX3BNYXNrID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CitDUERGX0RJQlNvdXJjZSoJQ1BERl9ESUJTb3VyY2U6OkRldGFjaE1hc2soKQoreworICAgIENQREZfRElCU291cmNlKiBwRElCU291cmNlID0gbV9wTWFzazsKKyAgICBtX3BNYXNrID0gTlVMTDsKKyAgICByZXR1cm4gcERJQlNvdXJjZTsKK30KK0NQREZfRElCU291cmNlKiBDUERGX0RJQlNvdXJjZTo6TG9hZE1hc2tESUIoQ1BERl9TdHJlYW0qIHBNYXNrKQoreworICAgIENQREZfRElCU291cmNlKiBwTWFza1NvdXJjZSA9IEZYX05FVyBDUERGX0RJQlNvdXJjZTsKKyAgICBpZiAoIXBNYXNrU291cmNlLT5Mb2FkKG1fcERvY3VtZW50LCBwTWFzaywgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgVFJVRSkpIHsKKyAgICAgICAgZGVsZXRlIHBNYXNrU291cmNlOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHBNYXNrU291cmNlOworfQoraW50IENQREZfRElCU291cmNlOjpTdGFydExvYWRNYXNrRElCKCkKK3sKKyAgICBtX3BNYXNrID0gRlhfTkVXIENQREZfRElCU291cmNlOworICAgIGludCByZXQgPSBtX3BNYXNrLT5TdGFydExvYWRESUJTb3VyY2UobV9wRG9jdW1lbnQsIChDUERGX1N0cmVhbSopbV9wTWFza1N0cmVhbSwgRkFMU0UsIE5VTEwsIE5VTEwsIFRSVUUpOworICAgIGlmIChyZXQgPT0gMikgeworICAgICAgICBpZiAobV9TdGF0dXMgPT0gMCkgeworICAgICAgICAgICAgbV9TdGF0dXMgPSAyOworICAgICAgICB9CisgICAgICAgIHJldHVybiAyOworICAgIH0KKyAgICBpZiAoIXJldCkgeworICAgICAgICBkZWxldGUgbV9wTWFzazsKKyAgICAgICAgbV9wTWFzayA9IE5VTEw7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KK3ZvaWQgQ1BERl9ESUJTb3VyY2U6OkxvYWRQYWxldHRlKCkKK3sKKyAgICBpZiAobV9icGMgKiBtX25Db21wb25lbnRzID4gOCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX3BDb2xvclNwYWNlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9icGMgKiBtX25Db21wb25lbnRzID09IDEpIHsKKyAgICAgICAgaWYgKG1fYkRlZmF1bHREZWNvZGUgJiYgKG1fRmFtaWx5ID09IFBERkNTX0RFVklDRUdSQVkgfHwgbV9GYW1pbHkgPT0gUERGQ1NfREVWSUNFUkdCKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtX3BDb2xvclNwYWNlLT5Db3VudENvbXBvbmVudHMoKSA+IDMpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBGWF9GTE9BVCBjb2xvcl92YWx1ZXNbM107CisgICAgICAgIGNvbG9yX3ZhbHVlc1swXSA9IG1fcENvbXBEYXRhWzBdLm1fRGVjb2RlTWluOworICAgICAgICBjb2xvcl92YWx1ZXNbMV0gPSBjb2xvcl92YWx1ZXNbMl0gPSBjb2xvcl92YWx1ZXNbMF07CisgICAgICAgIEZYX0ZMT0FUIFIsIEcsIEI7CisgICAgICAgIG1fcENvbG9yU3BhY2UtPkdldFJHQihjb2xvcl92YWx1ZXMsIFIsIEcsIEIpOworICAgICAgICBGWF9BUkdCIGFyZ2IwID0gQXJnYkVuY29kZSgyNTUsIEZYU1lTX3JvdW5kKFIgKiAyNTUpLCBGWFNZU19yb3VuZChHICogMjU1KSwgRlhTWVNfcm91bmQoQiAqIDI1NSkpOworICAgICAgICBjb2xvcl92YWx1ZXNbMF0gKz0gbV9wQ29tcERhdGFbMF0ubV9EZWNvZGVTdGVwOworICAgICAgICBjb2xvcl92YWx1ZXNbMV0gKz0gbV9wQ29tcERhdGFbMF0ubV9EZWNvZGVTdGVwOworICAgICAgICBjb2xvcl92YWx1ZXNbMl0gKz0gbV9wQ29tcERhdGFbMF0ubV9EZWNvZGVTdGVwOworICAgICAgICBtX3BDb2xvclNwYWNlLT5HZXRSR0IoY29sb3JfdmFsdWVzLCBSLCBHLCBCKTsKKyAgICAgICAgRlhfQVJHQiBhcmdiMSA9IEFyZ2JFbmNvZGUoMjU1LCBGWFNZU19yb3VuZChSICogMjU1KSwgRlhTWVNfcm91bmQoRyAqIDI1NSksIEZYU1lTX3JvdW5kKEIgKiAyNTUpKTsKKyAgICAgICAgaWYgKGFyZ2IwICE9IDB4RkYwMDAwMDAgfHwgYXJnYjEgIT0gMHhGRkZGRkZGRikgeworICAgICAgICAgICAgU2V0UGFsZXR0ZUFyZ2IoMCwgYXJnYjApOworICAgICAgICAgICAgU2V0UGFsZXR0ZUFyZ2IoMSwgYXJnYjEpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fcENvbG9yU3BhY2UgPT0gQ1BERl9Db2xvclNwYWNlOjpHZXRTdG9ja0NTKFBERkNTX0RFVklDRUdSQVkpICYmIG1fYnBjID09IDggJiYgbV9iRGVmYXVsdERlY29kZSkgeworICAgIH0gZWxzZSB7CisgICAgICAgIGludCBwYWxldHRlX2NvdW50ID0gMSA8PCAobV9icGMgKiBtX25Db21wb25lbnRzKTsKKyAgICAgICAgQ0ZYX0ZpeGVkQnVmR3JvdzxGWF9GTE9BVCwgMTY+IGNvbG9yX3ZhbHVlcyhtX25Db21wb25lbnRzKTsKKyAgICAgICAgRlhfRkxPQVQqIGNvbG9yX3ZhbHVlID0gY29sb3JfdmFsdWVzOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhbGV0dGVfY291bnQ7IGkgKyspIHsKKyAgICAgICAgICAgIGludCBjb2xvcl9kYXRhID0gaTsKKyAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgaiA9IDA7IGogPCBtX25Db21wb25lbnRzOyBqICsrKSB7CisgICAgICAgICAgICAgICAgaW50IGVuY29kZWRfY29tcG9uZW50ID0gY29sb3JfZGF0YSAlICgxIDw8IG1fYnBjKTsKKyAgICAgICAgICAgICAgICBjb2xvcl9kYXRhIC89IDEgPDwgbV9icGM7CisgICAgICAgICAgICAgICAgY29sb3JfdmFsdWVbal0gPSBtX3BDb21wRGF0YVtqXS5tX0RlY29kZU1pbiArIG1fcENvbXBEYXRhW2pdLm1fRGVjb2RlU3RlcCAqIGVuY29kZWRfY29tcG9uZW50OworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfRkxPQVQgUiA9IDAsIEcgPSAwLCBCID0gMDsKKyAgICAgICAgICAgIGlmIChtX25Db21wb25lbnRzID09IDEgJiYgbV9GYW1pbHkgPT0gUERGQ1NfSUNDQkFTRUQgJiYgbV9wQ29sb3JTcGFjZS0+Q291bnRDb21wb25lbnRzKCkgPiAxKSB7CisgICAgICAgICAgICAgICAgaW50IG5Db21wb25lbnRzID0gbV9wQ29sb3JTcGFjZS0+Q291bnRDb21wb25lbnRzKCk7CisgICAgICAgICAgICAgICAgRlhfRkxPQVQqIHRlbXBfYnVmID0gRlhfQWxsb2MoRlhfRkxPQVQsIG5Db21wb25lbnRzKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5Db21wb25lbnRzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgdGVtcF9idWZbaV0gPSAqY29sb3JfdmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fcENvbG9yU3BhY2UtPkdldFJHQih0ZW1wX2J1ZiwgUiwgRywgQik7CisgICAgICAgICAgICAgICAgRlhfRnJlZSh0ZW1wX2J1Zik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fcENvbG9yU3BhY2UtPkdldFJHQihjb2xvcl92YWx1ZSwgUiwgRywgQik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTZXRQYWxldHRlQXJnYihpLCBBcmdiRW5jb2RlKDI1NSwgRlhTWVNfcm91bmQoUiAqIDI1NSksIEZYU1lTX3JvdW5kKEcgKiAyNTUpLCBGWFNZU19yb3VuZChCICogMjU1KSkpOworICAgICAgICB9CisgICAgfQorfQorCitGWF9EV09SRCBDUERGX0RJQlNvdXJjZTo6R2V0VmFsaWRCcHAoKSBjb25zdAoreworICAgIEZYX0RXT1JEIGJwYyA9IG1fYnBjOworICAgIENQREZfT2JqZWN0ICogcEZpbHRlciA9IG1fcERpY3QtPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiRmlsdGVyIikpOworICAgIGlmKHBGaWx0ZXIpCisgICAgeworICAgICAgICBpZihwRmlsdGVyLT5HZXRUeXBlKCkgPT0gUERGT0JKX05BTUUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGZpbHRlciA9IHBGaWx0ZXItPkdldFN0cmluZygpOworICAgICAgICAgICAgaWYoZmlsdGVyID09IEZYX0JTVFJDKCJDQ0lUVEZheERlY29kZSIpIHx8IGZpbHRlciA9PSBGWF9CU1RSQygiSkJJRzJEZWNvZGUiKSApCisgICAgICAgICAgICAgICAgYnBjID0gMTsKKyAgICAgICAgICAgIGlmKGZpbHRlciA9PSBGWF9CU1RSQygiUnVuTGVuZ3RoRGVjb2RlIikgfHwgZmlsdGVyID09IEZYX0JTVFJDKCJEQ1REZWNvZGUiKSApCisgICAgICAgICAgICAgICAgYnBjID0gODsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChwRmlsdGVyLT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKQorICAgICAgICB7CisgICAgICAgICAgICAgQ1BERl9BcnJheSAqcEFycmF5ID0gKENQREZfQXJyYXkgKikgcEZpbHRlcjsKKyAgICAgICAgICAgICBpZiggcEFycmF5LT5HZXRTdHJpbmcocEFycmF5LT5HZXRDb3VudCgpIC0xKSA9PSBGWF9CU1RSQygiQ0NJVFRGYWNEZWNvZGUiKSB8fAorICAgICAgICAgICAgICAgICBwQXJyYXktPkdldFN0cmluZyhwQXJyYXktPkdldENvdW50KCkgLTEpID09IEZYX0JTVFJDKCJKQklHMkRlY29kZSIpICkKKyAgICAgICAgICAgICAgICAgYnBjID0gMTsKKworICAgICAgICAgICAgICBpZiggcEFycmF5LT5HZXRTdHJpbmcocEFycmF5LT5HZXRDb3VudCgpIC0xKSA9PSBGWF9CU1RSQygiUnVuTGVuZ3RoRGVjb2RlIikgfHwKKyAgICAgICAgICAgICAgICAgcEFycmF5LT5HZXRTdHJpbmcocEFycmF5LT5HZXRDb3VudCgpIC0xKSA9PSBGWF9CU1RSQygiRENURGVjb2RlIikgKQorICAgICAgICAgICAgICAgICBicGMgPSA4OworICAgICAgICAgfQorICAgICB9CisKKyAgICByZXR1cm4gYnBjOworfQorCisjZGVmaW5lIE5PUk1BTENPTE9SX01BWChjb2xvciwgbWF4KSAoY29sb3IpID4gKG1heCkgPyAobWF4KSA6IChjb2xvcikgPCAwID8gMCA6IChjb2xvcik7Cit2b2lkIENQREZfRElCU291cmNlOjpUcmFuc2xhdGVTY2FubGluZTI0YnBwKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4pIGNvbnN0Cit7CisgICAgaW50IG1heF9kYXRhID0gKDEgPDwgbV9icGMpIC0gMTsKKyAgICBpZiAobV9iRGVmYXVsdERlY29kZSkgeworICAgICAgICBpZiAobV9GYW1pbHkgPT0gUERGQ1NfREVWSUNFUkdCIHx8IG1fRmFtaWx5ID09IFBERkNTX0NBTFJHQikgeworICAgICAgICAgICAgaWYgKG1fYnBjID09IDE2KSB7CisgICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3RfcG9zID0gZGVzdF9zY2FuOworICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3BvcyA9IHNyY19zY2FuOworICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSBzcmNfcG9zWzRdOworICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSBzcmNfcG9zWzJdOworICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3BvczsKKyAgICAgICAgICAgICAgICAgICAgc3JjX3BvcyArPSA2OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9icGMgPT0gOCkgeworICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3BvcyA9IGRlc3Rfc2NhbjsKKyAgICAgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19wb3MgPSBzcmNfc2NhbjsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCBtX1dpZHRoOyBjb2x1bW4gKyspIHsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gc3JjX3Bvc1syXTsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gc3JjX3Bvc1sxXTsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19wb3M7CisgICAgICAgICAgICAgICAgICAgIHNyY19wb3MgKz0gMzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGludCBzcmNfYml0X3BvcyA9IDA7CisgICAgICAgICAgICAgICAgaW50IGRlc3RfYnl0ZV9wb3MgPSAwOworCisgICAgICAgICAgICAgICAgRlhfRFdPUkQgYnBjID0gR2V0VmFsaWRCcHAoKTsKKworICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IG1fV2lkdGg7IGNvbHVtbiArKykgeworICAgICAgICAgICAgICAgICAgICBpbnQgUiA9IF9HZXRCaXRzOChzcmNfc2Nhbiwgc3JjX2JpdF9wb3MsIGJwYyk7CisgICAgICAgICAgICAgICAgICAgIHNyY19iaXRfcG9zICs9IGJwYzsKKyAgICAgICAgICAgICAgICAgICAgaW50IEcgPSBfR2V0Qml0czgoc3JjX3NjYW4sIHNyY19iaXRfcG9zLCBicGMpOworICAgICAgICAgICAgICAgICAgICBzcmNfYml0X3BvcyArPSBicGM7CisgICAgICAgICAgICAgICAgICAgIGludCBCID0gX0dldEJpdHM4KHNyY19zY2FuLCBzcmNfYml0X3BvcywgYnBjKTsKKyAgICAgICAgICAgICAgICAgICAgc3JjX2JpdF9wb3MgKz0gYnBjOworICAgICAgICAgICAgICAgICAgICBSID0gTk9STUFMQ09MT1JfTUFYKFIsIG1heF9kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgRyA9IE5PUk1BTENPTE9SX01BWChHLCBtYXhfZGF0YSk7CisgICAgICAgICAgICAgICAgICAgIEIgPSBOT1JNQUxDT0xPUl9NQVgoQiwgbWF4X2RhdGEpOworICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bZGVzdF9ieXRlX3Bvc10gPSBCICogMjU1IC8gbWF4X2RhdGE7CisgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X2J5dGVfcG9zICsgMV0gPSBHICogMjU1IC8gbWF4X2RhdGE7CisgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X2J5dGVfcG9zICsgMl0gPSBSICogMjU1IC8gbWF4X2RhdGE7CisgICAgICAgICAgICAgICAgICAgIGRlc3RfYnl0ZV9wb3MgKz0gMzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAobV9icGMgPT0gOCkgeworCQkJaWYgKG1fbkNvbXBvbmVudHMgPT0gbV9wQ29sb3JTcGFjZS0+Q291bnRDb21wb25lbnRzKCkpCisJCQkJbV9wQ29sb3JTcGFjZS0+VHJhbnNsYXRlSW1hZ2VMaW5lKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIG1fV2lkdGgsIG1fV2lkdGgsIG1fSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYkxvYWRNYXNrICYmIG1fR3JvdXBGYW1pbHkgPT0gUERGQ1NfREVWSUNFQ01ZSyAmJiBtX0ZhbWlseSA9PSBQREZDU19ERVZJQ0VDTVlLKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBDRlhfRml4ZWRCdWZHcm93PEZYX0ZMT0FULCAxNj4gY29sb3JfdmFsdWVzMShtX25Db21wb25lbnRzKTsKKyAgICBGWF9GTE9BVCogY29sb3JfdmFsdWVzID0gY29sb3JfdmFsdWVzMTsKKyAgICBGWF9GTE9BVCBSLCBHLCBCOworICAgIGlmIChtX2JwYyA9PSA4KSB7CisgICAgICAgIGludCBzcmNfYnl0ZV9wb3MgPSAwOworICAgICAgICBpbnQgZGVzdF9ieXRlX3BvcyA9IDA7CisgICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IG1fV2lkdGg7IGNvbHVtbiArKykgeworICAgICAgICAgICAgZm9yIChGWF9EV09SRCBjb2xvciA9IDA7IGNvbG9yIDwgbV9uQ29tcG9uZW50czsgY29sb3IgKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgZGF0YSA9IHNyY19zY2FuW3NyY19ieXRlX3BvcyArK107CisgICAgICAgICAgICAgICAgY29sb3JfdmFsdWVzW2NvbG9yXSA9IG1fcENvbXBEYXRhW2NvbG9yXS5tX0RlY29kZU1pbiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcENvbXBEYXRhW2NvbG9yXS5tX0RlY29kZVN0ZXAgKiBkYXRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fYkxvYWRNYXNrICYmIG1fR3JvdXBGYW1pbHkgPT0gUERGQ1NfREVWSUNFQ01ZSyAmJiBtX0ZhbWlseSA9PSBQREZDU19ERVZJQ0VDTVlLKSB7CisgICAgICAgICAgICAgICAgRlhfRkxPQVQgayA9IDEuMGYgLSBjb2xvcl92YWx1ZXNbM107CisgICAgICAgICAgICAgICAgUiA9ICgxLjBmIC0gY29sb3JfdmFsdWVzWzBdKSAqIGs7CisgICAgICAgICAgICAgICAgRyA9ICgxLjBmIC0gY29sb3JfdmFsdWVzWzFdKSAqIGs7CisgICAgICAgICAgICAgICAgQiA9ICgxLjBmIC0gY29sb3JfdmFsdWVzWzJdKSAqIGs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fcENvbG9yU3BhY2UtPkdldFJHQihjb2xvcl92YWx1ZXMsIFIsIEcsIEIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUiA9IE5PUk1BTENPTE9SX01BWChSLCAxKTsKKyAgICAgICAgICAgIEcgPSBOT1JNQUxDT0xPUl9NQVgoRywgMSk7CisgICAgICAgICAgICBCID0gTk9STUFMQ09MT1JfTUFYKEIsIDEpOworICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfYnl0ZV9wb3NdID0gKEZYX0lOVDMyKShCICogMjU1KTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X2J5dGVfcG9zICsgMV0gPSAoRlhfSU5UMzIpKEcgKiAyNTUpOworICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfYnl0ZV9wb3MgKyAyXSA9IChGWF9JTlQzMikoUiAqIDI1NSk7CisgICAgICAgICAgICBkZXN0X2J5dGVfcG9zICs9IDM7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgc3JjX2JpdF9wb3MgPSAwOworICAgICAgICBpbnQgZGVzdF9ieXRlX3BvcyA9IDA7CisgICAgICAgIAorICAgICAgICBGWF9EV09SRCBicGMgPSBHZXRWYWxpZEJwcCgpOworCisgICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IG1fV2lkdGg7IGNvbHVtbiArKykgeworICAgICAgICAgICAgZm9yIChGWF9EV09SRCBjb2xvciA9IDA7IGNvbG9yIDwgbV9uQ29tcG9uZW50czsgY29sb3IgKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgZGF0YSA9IF9HZXRCaXRzOChzcmNfc2Nhbiwgc3JjX2JpdF9wb3MsIGJwYyk7CisgICAgICAgICAgICAgICAgY29sb3JfdmFsdWVzW2NvbG9yXSA9IG1fcENvbXBEYXRhW2NvbG9yXS5tX0RlY29kZU1pbiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcENvbXBEYXRhW2NvbG9yXS5tX0RlY29kZVN0ZXAgKiBkYXRhOworICAgICAgICAgICAgICAgIHNyY19iaXRfcG9zICs9IGJwYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX2JMb2FkTWFzayAmJiBtX0dyb3VwRmFtaWx5ID09IFBERkNTX0RFVklDRUNNWUsgJiYgbV9GYW1pbHkgPT0gUERGQ1NfREVWSUNFQ01ZSykgeworICAgICAgICAgICAgICAgIEZYX0ZMT0FUIGsgPSAxLjBmIC0gY29sb3JfdmFsdWVzWzNdOworICAgICAgICAgICAgICAgIFIgPSAoMS4wZiAtIGNvbG9yX3ZhbHVlc1swXSkgKiBrOworICAgICAgICAgICAgICAgIEcgPSAoMS4wZiAtIGNvbG9yX3ZhbHVlc1sxXSkgKiBrOworICAgICAgICAgICAgICAgIEIgPSAoMS4wZiAtIGNvbG9yX3ZhbHVlc1syXSkgKiBrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX3BDb2xvclNwYWNlLT5HZXRSR0IoY29sb3JfdmFsdWVzLCBSLCBHLCBCKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFIgPSBOT1JNQUxDT0xPUl9NQVgoUiwgMSk7CisgICAgICAgICAgICBHID0gTk9STUFMQ09MT1JfTUFYKEcsIDEpOworICAgICAgICAgICAgQiA9IE5PUk1BTENPTE9SX01BWChCLCAxKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X2J5dGVfcG9zXSA9IChGWF9JTlQzMikoQiAqIDI1NSk7CisgICAgICAgICAgICBkZXN0X3NjYW5bZGVzdF9ieXRlX3BvcyArIDFdID0gKEZYX0lOVDMyKShHICogMjU1KTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X2J5dGVfcG9zICsgMl0gPSAoRlhfSU5UMzIpKFIgKiAyNTUpOworICAgICAgICAgICAgZGVzdF9ieXRlX3BvcyArPSAzOworICAgICAgICB9CisgICAgfQorfQorRlhfTFBCWVRFIENQREZfRElCU291cmNlOjpHZXRCdWZmZXIoKSBjb25zdAoreworICAgIGlmIChtX3BDYWNoZWRCaXRtYXApIHsKKyAgICAgICAgcmV0dXJuIG1fcENhY2hlZEJpdG1hcC0+R2V0QnVmZmVyKCk7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorRlhfTFBDQllURSBDUERGX0RJQlNvdXJjZTo6R2V0U2NhbmxpbmUoaW50IGxpbmUpIGNvbnN0Cit7CisgICAgRlhfRFdPUkQgc3JjX3BpdGNoID0gKG1fV2lkdGggKiBtX2JwYyAqIG1fbkNvbXBvbmVudHMgKyA3KSAvIDg7CisgICAgRlhfTFBDQllURSBwU3JjTGluZSA9IE5VTEw7CisgICAgaWYgKG1fcENhY2hlZEJpdG1hcCkgeworICAgICAgICBpZiAobGluZSA+PSBtX3BDYWNoZWRCaXRtYXAtPkdldEhlaWdodCgpKSB7CisgICAgICAgICAgICBsaW5lID0gbV9wQ2FjaGVkQml0bWFwLT5HZXRIZWlnaHQoKSAtIDE7CisgICAgICAgIH0KKyAgICAgICAgcFNyY0xpbmUgPSBtX3BDYWNoZWRCaXRtYXAtPkdldFNjYW5saW5lKGxpbmUpOworICAgIH0gZWxzZSBpZiAobV9wRGVjb2RlcikgeworICAgICAgICBwU3JjTGluZSA9IG1fcERlY29kZXItPkdldFNjYW5saW5lKGxpbmUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3BTdHJlYW1BY2MtPkdldFNpemUoKSA+PSAobGluZSArIDEpICogc3JjX3BpdGNoKSB7CisgICAgICAgICAgICBwU3JjTGluZSA9IG1fcFN0cmVhbUFjYy0+R2V0RGF0YSgpICsgbGluZSAqIHNyY19waXRjaDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocFNyY0xpbmUgPT0gTlVMTCkgeworICAgICAgICBGWF9MUEJZVEUgcExpbmVCdWYgPSBtX3BNYXNrZWRMaW5lID8gbV9wTWFza2VkTGluZSA6IG1fcExpbmVCdWY7CisgICAgICAgIEZYU1lTX21lbXNldDgocExpbmVCdWYsIDB4ZmYsIG1fUGl0Y2gpOworICAgICAgICByZXR1cm4gcExpbmVCdWY7CisgICAgfQorICAgIGlmIChtX2JwYyAqIG1fbkNvbXBvbmVudHMgPT0gMSkgeworICAgICAgICBpZiAobV9iSW1hZ2VNYXNrICYmIG1fYkRlZmF1bHREZWNvZGUpIHsKKyAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBzcmNfcGl0Y2g7IGkgKyspIHsKKyAgICAgICAgICAgICAgICBtX3BMaW5lQnVmW2ldID0gfnBTcmNMaW5lW2ldOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG1fYkNvbG9yS2V5KSB7CisgICAgICAgICAgICBGWF9EV09SRCByZXNldF9hcmdiLCBzZXRfYXJnYjsKKyAgICAgICAgICAgIHJlc2V0X2FyZ2IgPSBtX3BQYWxldHRlID8gbV9wUGFsZXR0ZVswXSA6IDB4ZmYwMDAwMDA7CisgICAgICAgICAgICBzZXRfYXJnYiA9IG1fcFBhbGV0dGUgPyBtX3BQYWxldHRlWzFdIDogMHhmZmZmZmZmZjsKKyAgICAgICAgICAgIGlmIChtX3BDb21wRGF0YVswXS5tX0NvbG9yS2V5TWluID09IDApIHsKKyAgICAgICAgICAgICAgICByZXNldF9hcmdiID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX3BDb21wRGF0YVswXS5tX0NvbG9yS2V5TWF4ID09IDEpIHsKKyAgICAgICAgICAgICAgICBzZXRfYXJnYiA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXRfYXJnYiA9IEZYQVJHQl9UT0RJQihzZXRfYXJnYik7CisgICAgICAgICAgICByZXNldF9hcmdiID0gRlhBUkdCX1RPRElCKHJlc2V0X2FyZ2IpOworICAgICAgICAgICAgRlhfRFdPUkQqIGRlc3Rfc2NhbiA9IChGWF9EV09SRCopbV9wTWFza2VkTGluZTsKKyAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgIGlmIChwU3JjTGluZVtjb2wgLyA4XSAmICgxIDw8ICg3IC0gY29sICUgOCkpKSB7CisgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBzZXRfYXJnYjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gcmVzZXRfYXJnYjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1fcE1hc2tlZExpbmU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BMaW5lQnVmLCBwU3JjTGluZSwgc3JjX3BpdGNoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9wTGluZUJ1ZjsKKyAgICB9CisgICAgaWYgKG1fYnBjICogbV9uQ29tcG9uZW50cyA8PSA4KSB7CisgICAgICAgIGlmIChtX2JwYyA9PSA4KSB7CisgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BMaW5lQnVmLCBwU3JjTGluZSwgc3JjX3BpdGNoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBzcmNfYml0X3BvcyA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1dpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgY29sb3JfaW5kZXggPSAwOworICAgICAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgY29sb3IgPSAwOyBjb2xvciA8IG1fbkNvbXBvbmVudHM7IGNvbG9yICsrKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBkYXRhID0gX0dldEJpdHM4KHBTcmNMaW5lLCBzcmNfYml0X3BvcywgbV9icGMpOworICAgICAgICAgICAgICAgICAgICBjb2xvcl9pbmRleCB8PSBkYXRhIDw8IChjb2xvciAqIG1fYnBjKTsKKyAgICAgICAgICAgICAgICAgICAgc3JjX2JpdF9wb3MgKz0gbV9icGM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fcExpbmVCdWZbY29sXSA9IGNvbG9yX2luZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChtX2JDb2xvcktleSkgeworICAgICAgICAgICAgRlhfTFBCWVRFIHBEZXN0UGl4ZWwgPSBtX3BNYXNrZWRMaW5lOworICAgICAgICAgICAgRlhfTFBDQllURSBwU3JjUGl4ZWwgPSBtX3BMaW5lQnVmOworICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbV9XaWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgRlhfQllURSBpbmRleCA9ICpwU3JjUGl4ZWwrKzsKKyAgICAgICAgICAgICAgICBpZiAobV9wUGFsZXR0ZSkgeworICAgICAgICAgICAgICAgICAgICAqcERlc3RQaXhlbCsrID0gRlhBUkdCX0IobV9wUGFsZXR0ZVtpbmRleF0pOworICAgICAgICAgICAgICAgICAgICAqcERlc3RQaXhlbCsrID0gRlhBUkdCX0cobV9wUGFsZXR0ZVtpbmRleF0pOworICAgICAgICAgICAgICAgICAgICAqcERlc3RQaXhlbCsrID0gRlhBUkdCX1IobV9wUGFsZXR0ZVtpbmRleF0pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICpwRGVzdFBpeGVsKysgPSBpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgKnBEZXN0UGl4ZWwrKyA9IGluZGV4OworICAgICAgICAgICAgICAgICAgICAqcERlc3RQaXhlbCsrID0gaW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwRGVzdFBpeGVsID0gKGluZGV4IDwgbV9wQ29tcERhdGFbMF0ubV9Db2xvcktleU1pbiB8fCBpbmRleCA+IG1fcENvbXBEYXRhWzBdLm1fQ29sb3JLZXlNYXgpID8gMHhmZiA6IDA7CisgICAgICAgICAgICAgICAgcERlc3RQaXhlbCArKyA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbV9wTWFza2VkTGluZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9wTGluZUJ1ZjsKKyAgICB9CisgICAgaWYgKG1fYkNvbG9yS2V5KSB7CisgICAgICAgIGlmIChtX25Db21wb25lbnRzID09IDMgJiYgbV9icGMgPT0gOCkgeworICAgICAgICAgICAgRlhfTFBCWVRFIGFscGhhX2NoYW5uZWwgPSBtX3BNYXNrZWRMaW5lICsgMzsKKyAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgcFBpeGVsID0gcFNyY0xpbmUgKyBjb2wgKiAzOworICAgICAgICAgICAgICAgIGFscGhhX2NoYW5uZWxbY29sICogNF0gPSAocFBpeGVsWzBdIDwgbV9wQ29tcERhdGFbMF0ubV9Db2xvcktleU1pbiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFBpeGVsWzBdID4gbV9wQ29tcERhdGFbMF0ubV9Db2xvcktleU1heCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFBpeGVsWzFdIDwgbV9wQ29tcERhdGFbMV0ubV9Db2xvcktleU1pbiB8fCBwUGl4ZWxbMV0gPiBtX3BDb21wRGF0YVsxXS5tX0NvbG9yS2V5TWF4IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUGl4ZWxbMl0gPCBtX3BDb21wRGF0YVsyXS5tX0NvbG9yS2V5TWluIHx8IHBQaXhlbFsyXSA+IG1fcENvbXBEYXRhWzJdLm1fQ29sb3JLZXlNYXgpID8gMHhmZiA6IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBGWFNZU19tZW1zZXQ4KG1fcE1hc2tlZExpbmUsIDB4ZmYsIG1fUGl0Y2gpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChtX3BDb2xvclNwYWNlKSB7CisgICAgICAgIFRyYW5zbGF0ZVNjYW5saW5lMjRicHAobV9wTGluZUJ1ZiwgcFNyY0xpbmUpOworICAgICAgICBwU3JjTGluZSA9IG1fcExpbmVCdWY7CisgICAgfQorICAgIGlmIChtX2JDb2xvcktleSkgeworICAgICAgICBGWF9MUENCWVRFIHBTcmNQaXhlbCA9IHBTcmNMaW5lOworICAgICAgICBGWF9MUEJZVEUgcERlc3RQaXhlbCA9IG1fcE1hc2tlZExpbmU7CisgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgKnBEZXN0UGl4ZWwrKyA9ICpwU3JjUGl4ZWwrKzsKKyAgICAgICAgICAgICpwRGVzdFBpeGVsKysgPSAqcFNyY1BpeGVsKys7CisgICAgICAgICAgICAqcERlc3RQaXhlbCsrID0gKnBTcmNQaXhlbCsrOworICAgICAgICAgICAgcERlc3RQaXhlbCArKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9wTWFza2VkTGluZTsKKyAgICB9CisgICAgcmV0dXJuIHBTcmNMaW5lOworfQorRlhfQk9PTCBDUERGX0RJQlNvdXJjZTo6U2tpcFRvU2NhbmxpbmUoaW50IGxpbmUsIElGWF9QYXVzZSogcFBhdXNlKSBjb25zdAoreworICAgIGlmIChtX3BEZWNvZGVyKSB7CisgICAgICAgIHJldHVybiBtX3BEZWNvZGVyLT5Ta2lwVG9TY2FubGluZShsaW5lLCBwUGF1c2UpOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9Cit2b2lkIENQREZfRElCU291cmNlOjpEb3duU2FtcGxlU2NhbmxpbmUoaW50IGxpbmUsIEZYX0xQQllURSBkZXN0X3NjYW4sIGludCBkZXN0X2JwcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF93aWR0aCwgRlhfQk9PTCBiRmxpcFgsIGludCBjbGlwX2xlZnQsIGludCBjbGlwX3dpZHRoKSBjb25zdAoreworICAgIEZYX0RXT1JEIHNyY193aWR0aCA9IG1fV2lkdGg7CisgICAgRlhfRFdPUkQgc3JjX3BpdGNoID0gKHNyY193aWR0aCAqIG1fYnBjICogbV9uQ29tcG9uZW50cyArIDcpIC8gODsKKyAgICBGWF9MUENCWVRFIHBTcmNMaW5lID0gTlVMTDsKKyAgICBpZiAobV9wQ2FjaGVkQml0bWFwKSB7CisgICAgICAgIHBTcmNMaW5lID0gbV9wQ2FjaGVkQml0bWFwLT5HZXRTY2FubGluZShsaW5lKTsKKyAgICB9IGVsc2UgaWYgKG1fcERlY29kZXIpIHsKKyAgICAgICAgcFNyY0xpbmUgPSBtX3BEZWNvZGVyLT5HZXRTY2FubGluZShsaW5lKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9wU3RyZWFtQWNjLT5HZXRTaXplKCkgPj0gKGxpbmUgKyAxKSAqIHNyY19waXRjaCkgeworICAgICAgICAgICAgcFNyY0xpbmUgPSBtX3BTdHJlYW1BY2MtPkdldERhdGEoKSArIGxpbmUgKiBzcmNfcGl0Y2g7CisgICAgICAgIH0KKyAgICB9CisgICAgaW50IG9yaWdfQnBwID0gbV9icGMgKiBtX25Db21wb25lbnRzIC8gODsKKyAgICBpbnQgZGVzdF9CcHAgPSBkZXN0X2JwcCAvIDg7CisgICAgaWYgKHBTcmNMaW5lID09IE5VTEwpIHsKKyAgICAgICAgRlhTWVNfbWVtc2V0MzIoZGVzdF9zY2FuLCAweGZmLCBkZXN0X0JwcCAqIGNsaXBfd2lkdGgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENGWF9GaXhlZEJ1Zkdyb3c8RlhfQllURSwgMTI4PiB0ZW1wKG9yaWdfQnBwKTsKKyAgICBpZiAobV9icGMgKiBtX25Db21wb25lbnRzID09IDEpIHsKKyAgICAgICAgRlhfRFdPUkQgc2V0X2FyZ2IgPSAoRlhfRFdPUkQpIC0gMSwgcmVzZXRfYXJnYiA9IDA7CisgICAgICAgIGlmIChtX2JJbWFnZU1hc2spIHsKKyAgICAgICAgICAgIGlmIChtX2JEZWZhdWx0RGVjb2RlKSB7CisgICAgICAgICAgICAgICAgc2V0X2FyZ2IgPSAwOworICAgICAgICAgICAgICAgIHJlc2V0X2FyZ2IgPSAoRlhfRFdPUkQpIC0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChtX2JDb2xvcktleSkgeworICAgICAgICAgICAgcmVzZXRfYXJnYiA9IG1fcFBhbGV0dGUgPyBtX3BQYWxldHRlWzBdIDogMHhmZjAwMDAwMDsKKyAgICAgICAgICAgIHNldF9hcmdiID0gbV9wUGFsZXR0ZSA/IG1fcFBhbGV0dGVbMV0gOiAweGZmZmZmZmZmOworICAgICAgICAgICAgaWYgKG1fcENvbXBEYXRhWzBdLm1fQ29sb3JLZXlNaW4gPT0gMCkgeworICAgICAgICAgICAgICAgIHJlc2V0X2FyZ2IgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fcENvbXBEYXRhWzBdLm1fQ29sb3JLZXlNYXggPT0gMSkgeworICAgICAgICAgICAgICAgIHNldF9hcmdiID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldF9hcmdiID0gRlhBUkdCX1RPRElCKHNldF9hcmdiKTsKKyAgICAgICAgICAgIHJlc2V0X2FyZ2IgPSBGWEFSR0JfVE9ESUIocmVzZXRfYXJnYik7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsaXBfd2lkdGg7IGkgKyspIHsKKyAgICAgICAgICAgICAgICBGWF9EV09SRCBzcmNfeCA9IChjbGlwX2xlZnQgKyBpKSAqIHNyY193aWR0aCAvIGRlc3Rfd2lkdGg7CisgICAgICAgICAgICAgICAgaWYgKGJGbGlwWCkgeworICAgICAgICAgICAgICAgICAgICBzcmNfeCA9IHNyY193aWR0aCAtIHNyY194IC0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3JjX3ggJT0gc3JjX3dpZHRoOworICAgICAgICAgICAgICAgIGlmIChwU3JjTGluZVtzcmNfeCAvIDhdICYgKDEgPDwgKDcgLSBzcmNfeCAlIDgpKSkgeworICAgICAgICAgICAgICAgICAgICAoKEZYX0RXT1JEKilkZXN0X3NjYW4pW2ldID0gc2V0X2FyZ2I7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgKChGWF9EV09SRCopZGVzdF9zY2FuKVtpXSA9IHJlc2V0X2FyZ2I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGRlc3RfQnBwID09IDEpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9wUGFsZXR0ZSkgeworICAgICAgICAgICAgICAgIHJlc2V0X2FyZ2IgPSBtX3BQYWxldHRlWzBdOworICAgICAgICAgICAgICAgIHNldF9hcmdiID0gbV9wUGFsZXR0ZVsxXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsaXBfd2lkdGg7IGkgKyspIHsKKyAgICAgICAgICAgIEZYX0RXT1JEIHNyY194ID0gKGNsaXBfbGVmdCArIGkpICogc3JjX3dpZHRoIC8gZGVzdF93aWR0aDsKKyAgICAgICAgICAgIGlmIChiRmxpcFgpIHsKKyAgICAgICAgICAgICAgICBzcmNfeCA9IHNyY193aWR0aCAtIHNyY194IC0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNyY194ICU9IHNyY193aWR0aDsKKyAgICAgICAgICAgIGludCBkZXN0X3BvcyA9IGkgKiBkZXN0X0JwcDsKKyAgICAgICAgICAgIGlmIChwU3JjTGluZVtzcmNfeCAvIDhdICYgKDEgPDwgKDcgLSBzcmNfeCAlIDgpKSkgeworICAgICAgICAgICAgICAgIGlmIChkZXN0X0JwcCA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X3Bvc10gPSAoRlhfQllURSlzZXRfYXJnYjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRlc3RfQnBwID09IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfcG9zXSA9IEZYQVJHQl9CKHNldF9hcmdiKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfcG9zICsgMV0gPSBGWEFSR0JfRyhzZXRfYXJnYik7CisgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X3BvcyArIDJdID0gRlhBUkdCX1Ioc2V0X2FyZ2IpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICooRlhfRFdPUkQqKShkZXN0X3NjYW4gKyBkZXN0X3BvcykgPSBzZXRfYXJnYjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChkZXN0X0JwcCA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X3Bvc10gPSAoRlhfQllURSlyZXNldF9hcmdiOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVzdF9CcHAgPT0gMykgeworICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bZGVzdF9wb3NdID0gRlhBUkdCX0IocmVzZXRfYXJnYik7CisgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X3BvcyArIDFdID0gRlhBUkdCX0cocmVzZXRfYXJnYik7CisgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X3BvcyArIDJdID0gRlhBUkdCX1IocmVzZXRfYXJnYik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgKihGWF9EV09SRCopKGRlc3Rfc2NhbiArIGRlc3RfcG9zKSA9IHJlc2V0X2FyZ2I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYgKG1fYnBjICogbV9uQ29tcG9uZW50cyA8PSA4KSB7CisgICAgICAgIGlmIChtX2JwYyA8IDgpIHsKKyAgICAgICAgICAgIGludCBzcmNfYml0X3BvcyA9IDA7CisgICAgICAgICAgICBmb3IgKEZYX0RXT1JEIGNvbCA9IDA7IGNvbCA8IHNyY193aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgaW50IGNvbG9yX2luZGV4ID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKEZYX0RXT1JEIGNvbG9yID0gMDsgY29sb3IgPCBtX25Db21wb25lbnRzOyBjb2xvciArKykgeworICAgICAgICAgICAgICAgICAgICBpbnQgZGF0YSA9IF9HZXRCaXRzOChwU3JjTGluZSwgc3JjX2JpdF9wb3MsIG1fYnBjKTsKKyAgICAgICAgICAgICAgICAgICAgY29sb3JfaW5kZXggfD0gZGF0YSA8PCAoY29sb3IgKiBtX2JwYyk7CisgICAgICAgICAgICAgICAgICAgIHNyY19iaXRfcG9zICs9IG1fYnBjOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX3BMaW5lQnVmW2NvbF0gPSBjb2xvcl9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBTcmNMaW5lID0gbV9wTGluZUJ1ZjsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9iQ29sb3JLZXkpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xpcF93aWR0aDsgaSArKykgeworICAgICAgICAgICAgICAgIEZYX0RXT1JEIHNyY194ID0gKGNsaXBfbGVmdCArIGkpICogc3JjX3dpZHRoIC8gZGVzdF93aWR0aDsKKyAgICAgICAgICAgICAgICBpZiAoYkZsaXBYKSB7CisgICAgICAgICAgICAgICAgICAgIHNyY194ID0gc3JjX3dpZHRoIC0gc3JjX3ggLSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzcmNfeCAlPSBzcmNfd2lkdGg7CisgICAgICAgICAgICAgICAgRlhfTFBCWVRFIHBEZXN0UGl4ZWwgPSBkZXN0X3NjYW4gKyBpICogNDsKKyAgICAgICAgICAgICAgICBGWF9CWVRFIGluZGV4ID0gcFNyY0xpbmVbc3JjX3hdOworICAgICAgICAgICAgICAgIGlmIChtX3BQYWxldHRlKSB7CisgICAgICAgICAgICAgICAgICAgICpwRGVzdFBpeGVsKysgPSBGWEFSR0JfQihtX3BQYWxldHRlW2luZGV4XSk7CisgICAgICAgICAgICAgICAgICAgICpwRGVzdFBpeGVsKysgPSBGWEFSR0JfRyhtX3BQYWxldHRlW2luZGV4XSk7CisgICAgICAgICAgICAgICAgICAgICpwRGVzdFBpeGVsKysgPSBGWEFSR0JfUihtX3BQYWxldHRlW2luZGV4XSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgKnBEZXN0UGl4ZWwrKyA9IGluZGV4OworICAgICAgICAgICAgICAgICAgICAqcERlc3RQaXhlbCsrID0gaW5kZXg7CisgICAgICAgICAgICAgICAgICAgICpwRGVzdFBpeGVsKysgPSBpbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKnBEZXN0UGl4ZWwgPSAoaW5kZXggPCBtX3BDb21wRGF0YVswXS5tX0NvbG9yS2V5TWluIHx8IGluZGV4ID4gbV9wQ29tcERhdGFbMF0ubV9Db2xvcktleU1heCkgPyAweGZmIDogMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsaXBfd2lkdGg7IGkgKyspIHsKKyAgICAgICAgICAgIEZYX0RXT1JEIHNyY194ID0gKGNsaXBfbGVmdCArIGkpICogc3JjX3dpZHRoIC8gZGVzdF93aWR0aDsKKyAgICAgICAgICAgIGlmIChiRmxpcFgpIHsKKyAgICAgICAgICAgICAgICBzcmNfeCA9IHNyY193aWR0aCAtIHNyY194IC0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNyY194ICU9IHNyY193aWR0aDsKKyAgICAgICAgICAgIEZYX0JZVEUgaW5kZXggPSBwU3JjTGluZVtzcmNfeF07CisgICAgICAgICAgICBpZiAoZGVzdF9CcHAgPT0gMSkgeworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbltpXSA9IGluZGV4OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgZGVzdF9wb3MgPSBpICogZGVzdF9CcHA7CisgICAgICAgICAgICAgICAgRlhfQVJHQiBhcmdiID0gbV9wUGFsZXR0ZVtpbmRleF07CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfcG9zXSA9IEZYQVJHQl9CKGFyZ2IpOworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X3BvcyArIDFdID0gRlhBUkdCX0coYXJnYik7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfcG9zICsgMl0gPSBGWEFSR0JfUihhcmdiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IGxhc3Rfc3JjX3ggPSAtMTsKKyAgICAgICAgRlhfQVJHQiBsYXN0X2FyZ2I7CisgICAgICAgIEZYX0ZMT0FUIG9yaWdfTm90OEJwcCA9IChGWF9GTE9BVCltX2JwYyAqIChGWF9GTE9BVCltX25Db21wb25lbnRzIC8gOC4wZjsKKyAgICAgICAgRlhfRkxPQVQgdW5pdF9UbzhCcGMgPSAyNTUuMGYgLyAoKDEgPDwgbV9icGMpIC0gMSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xpcF93aWR0aDsgaSArKykgeworICAgICAgICAgICAgaW50IGRlc3RfeCA9IGNsaXBfbGVmdCArIGk7CisgICAgICAgICAgICBGWF9EV09SRCBzcmNfeCA9IChiRmxpcFggPyAoZGVzdF93aWR0aCAtIGRlc3RfeCAtIDEpIDogZGVzdF94KSAqIChGWF9JTlQ2NClzcmNfd2lkdGggLyBkZXN0X3dpZHRoOworICAgICAgICAgICAgc3JjX3ggJT0gc3JjX3dpZHRoOworICAgICAgICAgICAgRlhfTFBDQllURSBwU3JjUGl4ZWwgPSBOVUxMOworICAgICAgICAgICAgaWYgKG1fYnBjICUgOCA9PSAwKSB7CisgICAgICAgICAgICAgICAgcFNyY1BpeGVsID0gcFNyY0xpbmUgKyBzcmNfeCAqIG9yaWdfQnBwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwU3JjUGl4ZWwgPSBwU3JjTGluZSArIChpbnQpKHNyY194ICogb3JpZ19Ob3Q4QnBwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZYX0xQQllURSBwRGVzdFBpeGVsID0gZGVzdF9zY2FuICsgaSAqIGRlc3RfQnBwOworICAgICAgICAgICAgRlhfQVJHQiBhcmdiOworICAgICAgICAgICAgaWYgKHNyY194ID09IGxhc3Rfc3JjX3gpIHsKKyAgICAgICAgICAgICAgICBhcmdiID0gbGFzdF9hcmdiOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobV9wQ29sb3JTcGFjZSkgeworICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIGNvbG9yWzRdOworICAgICAgICAgICAgICAgICAgICBpZiAoIW1fYkRlZmF1bHREZWNvZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3JpZ19CcHA7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sb3JfdmFsdWUgPSAoaW50KSgobV9wQ29tcERhdGFbaV0ubV9EZWNvZGVNaW4gKyBtX3BDb21wRGF0YVtpXS5tX0RlY29kZVN0ZXAgKiAoRlhfRkxPQVQpcFNyY1BpeGVsW2ldKSAqIDI1NS4wZiArIDAuNWYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBbaV0gPSBjb2xvcl92YWx1ZSA+IDI1NSA/IDI1NSA6IChjb2xvcl92YWx1ZSA8IDAgPyAwIDogY29sb3JfdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbV9wQ29sb3JTcGFjZS0+VHJhbnNsYXRlSW1hZ2VMaW5lKGNvbG9yLCB0ZW1wLCAxLCAwLCAwLCBtX2JMb2FkTWFzayAmJiBtX0dyb3VwRmFtaWx5ID09IFBERkNTX0RFVklDRUNNWUsgJiYgbV9GYW1pbHkgPT0gUERGQ1NfREVWSUNFQ01ZSyk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9icGMgPCA4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19iaXRfcG9zID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX3ggJSAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19iaXRfcG9zID0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlID0gKDEgPDwgbV9icGMpICAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IG1fbkNvbXBvbmVudHM7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFtpXSA9IChGWF9CWVRFKShfR2V0Qml0czgocFNyY1BpeGVsLCBzcmNfYml0X3BvcywgbV9icGMpICogdW5pdF9UbzhCcGMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYml0X3BvcyArPSBtX2JwYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wQ29sb3JTcGFjZS0+VHJhbnNsYXRlSW1hZ2VMaW5lKGNvbG9yLCB0ZW1wLCAxLCAwLCAwLCBtX2JMb2FkTWFzayAmJiBtX0dyb3VwRmFtaWx5ID09IFBERkNTX0RFVklDRUNNWUsgJiYgbV9GYW1pbHkgPT0gUERGQ1NfREVWSUNFQ01ZSyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcENvbG9yU3BhY2UtPlRyYW5zbGF0ZUltYWdlTGluZShjb2xvciwgcFNyY1BpeGVsLCAxLCAwLCAwLCBtX2JMb2FkTWFzayAmJiBtX0dyb3VwRmFtaWx5ID09IFBERkNTX0RFVklDRUNNWUsgJiYgbV9GYW1pbHkgPT0gUERGQ1NfREVWSUNFQ01ZSyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYXJnYiA9IEZYQVJHQl9NQUtFKDB4ZmYsIGNvbG9yWzJdLCBjb2xvclsxXSwgY29sb3JbMF0pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFyZ2IgPSBGWEFSR0JfTUFLRSgweGZmLCBwU3JjUGl4ZWxbMl0sIHBTcmNQaXhlbFsxXSwgcFNyY1BpeGVsWzBdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1fYkNvbG9yS2V5KSB7CisgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYSA9IDB4ZmY7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX25Db21wb25lbnRzID09IDMgJiYgbV9icGMgPT0gOCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGEgPSAocFNyY1BpeGVsWzBdIDwgbV9wQ29tcERhdGFbMF0ubV9Db2xvcktleU1pbiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFNyY1BpeGVsWzBdID4gbV9wQ29tcERhdGFbMF0ubV9Db2xvcktleU1heCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFNyY1BpeGVsWzFdIDwgbV9wQ29tcERhdGFbMV0ubV9Db2xvcktleU1pbiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFNyY1BpeGVsWzFdID4gbV9wQ29tcERhdGFbMV0ubV9Db2xvcktleU1heCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFNyY1BpeGVsWzJdIDwgbV9wQ29tcERhdGFbMl0ubV9Db2xvcktleU1pbiB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFNyY1BpeGVsWzJdID4gbV9wQ29tcERhdGFbMl0ubV9Db2xvcktleU1heCkgPyAweGZmIDogMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhcmdiICY9IDB4ZmZmZmZmOworICAgICAgICAgICAgICAgICAgICBhcmdiIHw9IGFscGhhIDw8IDI0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsYXN0X3NyY194ID0gc3JjX3g7CisgICAgICAgICAgICAgICAgbGFzdF9hcmdiID0gYXJnYjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZXN0X0JwcCA9PSA0KSB7CisgICAgICAgICAgICAgICAgKihGWF9EV09SRCopcERlc3RQaXhlbCA9IEZYQVJHQl9UT0RJQihhcmdiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgKnBEZXN0UGl4ZWwrKyA9IEZYQVJHQl9CKGFyZ2IpOworICAgICAgICAgICAgICAgICpwRGVzdFBpeGVsKysgPSBGWEFSR0JfRyhhcmdiKTsKKyAgICAgICAgICAgICAgICAqcERlc3RQaXhlbCA9IEZYQVJHQl9SKGFyZ2IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQordm9pZCBDUERGX0RJQlNvdXJjZTo6U2V0RG93blNhbXBsZVNpemUoaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCkgY29uc3QKK3sKKyAgICBpZiAobV9wRGVjb2RlcikgeworICAgICAgICBtX3BEZWNvZGVyLT5Eb3duU2NhbGUoZGVzdF93aWR0aCwgZGVzdF9oZWlnaHQpOworICAgICAgICAoKENQREZfRElCU291cmNlKil0aGlzKS0+bV9XaWR0aCA9IG1fcERlY29kZXItPkdldFdpZHRoKCk7CisgICAgICAgICgoQ1BERl9ESUJTb3VyY2UqKXRoaXMpLT5tX0hlaWdodCA9IG1fcERlY29kZXItPkdldEhlaWdodCgpOworICAgIH0KK30KK3ZvaWQgQ1BERl9ESUJTb3VyY2U6OkNsZWFySW1hZ2VEYXRhKCkKK3sKKyAgICBpZiAobV9wRGVjb2RlcikgeworICAgICAgICBtX3BEZWNvZGVyLT5DbGVhckltYWdlRGF0YSgpOworICAgIH0KK30KK0NQREZfUHJvZ3Jlc3NpdmVJbWFnZUxvYWRlckhhbmRsZTo6Q1BERl9Qcm9ncmVzc2l2ZUltYWdlTG9hZGVySGFuZGxlKCkKK3sKKyAgICBtX3BJbWFnZUxvYWRlciA9IE5VTEw7CisgICAgbV9wQ2FjaGUgPSBOVUxMOworICAgIG1fcEltYWdlID0gTlVMTDsKK30KK0NQREZfUHJvZ3Jlc3NpdmVJbWFnZUxvYWRlckhhbmRsZTo6fkNQREZfUHJvZ3Jlc3NpdmVJbWFnZUxvYWRlckhhbmRsZSgpCit7CisgICAgbV9wSW1hZ2VMb2FkZXIgPSBOVUxMOworICAgIG1fcENhY2hlID0gTlVMTDsKKyAgICBtX3BJbWFnZSA9IE5VTEw7Cit9CitGWF9CT09MIENQREZfUHJvZ3Jlc3NpdmVJbWFnZUxvYWRlckhhbmRsZTo6U3RhcnQoQ1BERl9JbWFnZUxvYWRlciogcEltYWdlTG9hZGVyLCBjb25zdCBDUERGX0ltYWdlT2JqZWN0KiBwSW1hZ2UsIENQREZfUGFnZVJlbmRlckNhY2hlKiBwQ2FjaGUsIEZYX0JPT0wgYlN0ZENTLCBGWF9EV09SRCBHcm91cEZhbWlseSwgRlhfQk9PTCBiTG9hZE1hc2ssIENQREZfUmVuZGVyU3RhdHVzKiBwUmVuZGVyU3RhdHVzLCBGWF9JTlQzMiBuRG93bnNhbXBsZVdpZHRoLCBGWF9JTlQzMiBuRG93bnNhbXBsZUhlaWdodCkKK3sKKyAgICBtX3BJbWFnZUxvYWRlciA9IHBJbWFnZUxvYWRlcjsKKyAgICBtX3BDYWNoZSA9IHBDYWNoZTsKKyAgICBtX3BJbWFnZSA9IChDUERGX0ltYWdlT2JqZWN0KilwSW1hZ2U7CisgICAgbV9uRG93bnNhbXBsZVdpZHRoID0gbkRvd25zYW1wbGVXaWR0aDsKKyAgICBtX25Eb3duc2FtcGxlSGVpZ2h0ID0gbkRvd25zYW1wbGVIZWlnaHQ7CisgICAgRlhfQk9PTCByZXQ7CisgICAgaWYgKHBDYWNoZSkgeworICAgICAgICByZXQgPSBwQ2FjaGUtPlN0YXJ0R2V0Q2FjaGVkQml0bWFwKHBJbWFnZS0+bV9wSW1hZ2UtPkdldFN0cmVhbSgpLCBiU3RkQ1MsIEdyb3VwRmFtaWx5LCBiTG9hZE1hc2ssIHBSZW5kZXJTdGF0dXMsIG1fbkRvd25zYW1wbGVXaWR0aCwgbV9uRG93bnNhbXBsZUhlaWdodCk7CisgICAgICAgIGlmIChyZXQgPT0gRkFMU0UpIHsKKyAgICAgICAgICAgIG1fcEltYWdlTG9hZGVyLT5tX2JDYWNoZWQgPSBUUlVFOworICAgICAgICAgICAgbV9wSW1hZ2VMb2FkZXItPm1fcEJpdG1hcCA9IHBDYWNoZS0+bV9wQ3VySW1hZ2VDYWNoZS0+RGV0YWNoQml0bWFwKCk7CisgICAgICAgICAgICBtX3BJbWFnZUxvYWRlci0+bV9wTWFzayA9IHBDYWNoZS0+bV9wQ3VySW1hZ2VDYWNoZS0+RGV0YWNoTWFzaygpOworICAgICAgICAgICAgbV9wSW1hZ2VMb2FkZXItPm1fTWF0dGVDb2xvciA9IHBDYWNoZS0+bV9wQ3VySW1hZ2VDYWNoZS0+bV9NYXR0ZUNvbG9yOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0ID0gcEltYWdlLT5tX3BJbWFnZS0+U3RhcnRMb2FkRElCU291cmNlKHBSZW5kZXJTdGF0dXMtPm1fcEZvcm1SZXNvdXJjZSwgcFJlbmRlclN0YXR1cy0+bV9wUGFnZVJlc291cmNlLCBiU3RkQ1MsIEdyb3VwRmFtaWx5LCBiTG9hZE1hc2spOworICAgICAgICBpZiAocmV0ID09IEZBTFNFKSB7CisgICAgICAgICAgICBtX3BJbWFnZUxvYWRlci0+bV9iQ2FjaGVkID0gRkFMU0U7CisgICAgICAgICAgICBtX3BJbWFnZUxvYWRlci0+bV9wQml0bWFwID0gbV9wSW1hZ2UtPm1fcEltYWdlLT5EZXRhY2hCaXRtYXAoKTsKKyAgICAgICAgICAgIG1fcEltYWdlTG9hZGVyLT5tX3BNYXNrID0gbV9wSW1hZ2UtPm1fcEltYWdlLT5EZXRhY2hNYXNrKCk7CisgICAgICAgICAgICBtX3BJbWFnZUxvYWRlci0+bV9NYXR0ZUNvbG9yID0gbV9wSW1hZ2UtPm1fcEltYWdlLT5tX01hdHRlQ29sb3I7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KK0ZYX0JPT0wgQ1BERl9Qcm9ncmVzc2l2ZUltYWdlTG9hZGVySGFuZGxlOjpDb250aW51ZShJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBGWF9CT09MIHJldDsKKyAgICBpZiAobV9wQ2FjaGUpIHsKKyAgICAgICAgcmV0ID0gbV9wQ2FjaGUtPkNvbnRpbnVlKHBQYXVzZSk7CisgICAgICAgIGlmIChyZXQgPT0gRkFMU0UpIHsKKyAgICAgICAgICAgIG1fcEltYWdlTG9hZGVyLT5tX2JDYWNoZWQgPSBUUlVFOworICAgICAgICAgICAgbV9wSW1hZ2VMb2FkZXItPm1fcEJpdG1hcCA9IG1fcENhY2hlLT5tX3BDdXJJbWFnZUNhY2hlLT5EZXRhY2hCaXRtYXAoKTsKKyAgICAgICAgICAgIG1fcEltYWdlTG9hZGVyLT5tX3BNYXNrID0gbV9wQ2FjaGUtPm1fcEN1ckltYWdlQ2FjaGUtPkRldGFjaE1hc2soKTsKKyAgICAgICAgICAgIG1fcEltYWdlTG9hZGVyLT5tX01hdHRlQ29sb3IgPSBtX3BDYWNoZS0+bV9wQ3VySW1hZ2VDYWNoZS0+bV9NYXR0ZUNvbG9yOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0ID0gbV9wSW1hZ2UtPm1fcEltYWdlLT5Db250aW51ZShwUGF1c2UpOworICAgICAgICBpZiAocmV0ID09IEZBTFNFKSB7CisgICAgICAgICAgICBtX3BJbWFnZUxvYWRlci0+bV9iQ2FjaGVkID0gRkFMU0U7CisgICAgICAgICAgICBtX3BJbWFnZUxvYWRlci0+bV9wQml0bWFwID0gbV9wSW1hZ2UtPm1fcEltYWdlLT5EZXRhY2hCaXRtYXAoKTsKKyAgICAgICAgICAgIG1fcEltYWdlTG9hZGVyLT5tX3BNYXNrID0gbV9wSW1hZ2UtPm1fcEltYWdlLT5EZXRhY2hNYXNrKCk7CisgICAgICAgICAgICBtX3BJbWFnZUxvYWRlci0+bV9NYXR0ZUNvbG9yID0gbV9wSW1hZ2UtPm1fcEltYWdlLT5tX01hdHRlQ29sb3I7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KK0ZYX0JPT0wgQ1BERl9JbWFnZUxvYWRlcjo6TG9hZChjb25zdCBDUERGX0ltYWdlT2JqZWN0KiBwSW1hZ2UsIENQREZfUGFnZVJlbmRlckNhY2hlKiBwQ2FjaGUsIEZYX0JPT0wgYlN0ZENTLCBGWF9EV09SRCBHcm91cEZhbWlseSwgRlhfQk9PTCBiTG9hZE1hc2ssIENQREZfUmVuZGVyU3RhdHVzKiBwUmVuZGVyU3RhdHVzKQoreworICAgIGlmIChwSW1hZ2UgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChwQ2FjaGUpIHsKKyAgICAgICAgcENhY2hlLT5HZXRDYWNoZWRCaXRtYXAocEltYWdlLT5tX3BJbWFnZS0+R2V0U3RyZWFtKCksIG1fcEJpdG1hcCwgbV9wTWFzaywgbV9NYXR0ZUNvbG9yLCBiU3RkQ1MsIEdyb3VwRmFtaWx5LCBiTG9hZE1hc2ssIHBSZW5kZXJTdGF0dXMsIG1fbkRvd25zYW1wbGVXaWR0aCwgbV9uRG93bnNhbXBsZUhlaWdodCk7CisgICAgICAgIG1fYkNhY2hlZCA9IFRSVUU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wQml0bWFwID0gcEltYWdlLT5tX3BJbWFnZS0+TG9hZERJQlNvdXJjZSgmbV9wTWFzaywgJm1fTWF0dGVDb2xvciwgYlN0ZENTLCBHcm91cEZhbWlseSwgYkxvYWRNYXNrKTsKKyAgICAgICAgbV9iQ2FjaGVkID0gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK0ZYX0JPT0wgQ1BERl9JbWFnZUxvYWRlcjo6U3RhcnRMb2FkSW1hZ2UoY29uc3QgQ1BERl9JbWFnZU9iamVjdCogcEltYWdlLCBDUERGX1BhZ2VSZW5kZXJDYWNoZSogcENhY2hlLCBGWF9MUFZPSUQmIExvYWRIYW5kbGUsIEZYX0JPT0wgYlN0ZENTLCBGWF9EV09SRCBHcm91cEZhbWlseSwgRlhfQk9PTCBiTG9hZE1hc2ssIENQREZfUmVuZGVyU3RhdHVzKiBwUmVuZGVyU3RhdHVzLCBGWF9JTlQzMiBuRG93bnNhbXBsZVdpZHRoLCBGWF9JTlQzMiBuRG93bnNhbXBsZUhlaWdodCkKK3sKKyAgICBtX25Eb3duc2FtcGxlV2lkdGggPSBuRG93bnNhbXBsZVdpZHRoOworICAgIG1fbkRvd25zYW1wbGVIZWlnaHQgPSBuRG93bnNhbXBsZUhlaWdodDsKKyAgICBDUERGX1Byb2dyZXNzaXZlSW1hZ2VMb2FkZXJIYW5kbGUqIHBMb2FkZXJIYW5kbGUgPSBOVUxMOworICAgIHBMb2FkZXJIYW5kbGUgPQlGWF9ORVcgQ1BERl9Qcm9ncmVzc2l2ZUltYWdlTG9hZGVySGFuZGxlOworICAgIEZYX0JPT0wgcmV0ID0gcExvYWRlckhhbmRsZS0+U3RhcnQodGhpcywgcEltYWdlLCBwQ2FjaGUsIGJTdGRDUywgR3JvdXBGYW1pbHksIGJMb2FkTWFzaywgcFJlbmRlclN0YXR1cywgbV9uRG93bnNhbXBsZVdpZHRoLCBtX25Eb3duc2FtcGxlSGVpZ2h0KTsKKyAgICBMb2FkSGFuZGxlID0gcExvYWRlckhhbmRsZTsKKyAgICByZXR1cm4gcmV0OworfQorRlhfQk9PTAlDUERGX0ltYWdlTG9hZGVyOjpDb250aW51ZShGWF9MUFZPSUQgTG9hZEhhbmRsZSwgSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgcmV0dXJuICgoQ1BERl9Qcm9ncmVzc2l2ZUltYWdlTG9hZGVySGFuZGxlKilMb2FkSGFuZGxlKS0+Q29udGludWUocFBhdXNlKTsKK30KK0NQREZfSW1hZ2VMb2FkZXI6On5DUERGX0ltYWdlTG9hZGVyKCkKK3sKKyAgICBpZiAoIW1fYkNhY2hlZCkgeworICAgICAgICBpZiAobV9wQml0bWFwKSB7CisgICAgICAgICAgICBkZWxldGUgbV9wQml0bWFwOworICAgICAgICAgICAgbV9wQml0bWFwID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9wTWFzaykgeworICAgICAgICAgICAgZGVsZXRlIG1fcE1hc2s7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcmVuZGVyL2ZwZGZfcmVuZGVyX3BhdHRlcm4uY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3JlbmRlci9mcGRmX3JlbmRlcl9wYXR0ZXJuLmNwcAppbmRleCA4Y2MzMGE3Li40YjRmOTI5IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcmVuZGVyL2ZwZGZfcmVuZGVyX3BhdHRlcm4uY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9yZW5kZXIvZnBkZl9yZW5kZXJfcGF0dGVybi5jcHAKQEAgLTEsMTA5MyArMSwxMDkzIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcmVuZGVyLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2VvYmouaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiDQotI2luY2x1ZGUgIi4uL2ZwZGZfcGFnZS9wYWdlaW50LmgiDQotI2luY2x1ZGUgInJlbmRlcl9pbnQuaCINCi0jZGVmaW5lIFNIQURJTkdfU1RFUFMgMjU2DQotc3RhdGljIHZvaWQgX0RyYXdBeGlhbFNoYWRpbmcoQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkJpdG1hcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0LCBDUERGX0Z1bmN0aW9uKiogcEZ1bmNzLCBpbnQgbkZ1bmNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfQ29sb3JTcGFjZSogcENTLCBpbnQgYWxwaGEpDQotew0KLSAgICBBU1NFUlQocEJpdG1hcC0+R2V0Rm9ybWF0KCkgPT0gRlhESUJfQXJnYik7DQotICAgIENQREZfQXJyYXkqIHBDb29yZHMgPSBwRGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIkNvb3JkcyIpKTsNCi0gICAgaWYgKHBDb29yZHMgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX0ZMT0FUIHN0YXJ0X3ggPSBwQ29vcmRzLT5HZXROdW1iZXIoMCk7DQotICAgIEZYX0ZMT0FUIHN0YXJ0X3kgPSBwQ29vcmRzLT5HZXROdW1iZXIoMSk7DQotICAgIEZYX0ZMT0FUIGVuZF94ID0gcENvb3Jkcy0+R2V0TnVtYmVyKDIpOw0KLSAgICBGWF9GTE9BVCBlbmRfeSA9IHBDb29yZHMtPkdldE51bWJlcigzKTsNCi0gICAgRlhfRkxPQVQgdF9taW4gPSAwLCB0X21heCA9IDEuMGY7DQotICAgIENQREZfQXJyYXkqIHBBcnJheSA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiRG9tYWluIikpOw0KLSAgICBpZiAocEFycmF5KSB7DQotICAgICAgICB0X21pbiA9IHBBcnJheS0+R2V0TnVtYmVyKDApOw0KLSAgICAgICAgdF9tYXggPSBwQXJyYXktPkdldE51bWJlcigxKTsNCi0gICAgfQ0KLSAgICBGWF9CT09MIGJTdGFydEV4dGVuZCA9IEZBTFNFLCBiRW5kRXh0ZW5kID0gRkFMU0U7DQotICAgIHBBcnJheSA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiRXh0ZW5kIikpOw0KLSAgICBpZiAocEFycmF5KSB7DQotICAgICAgICBiU3RhcnRFeHRlbmQgPSBwQXJyYXktPkdldEludGVnZXIoMCk7DQotICAgICAgICBiRW5kRXh0ZW5kID0gcEFycmF5LT5HZXRJbnRlZ2VyKDEpOw0KLSAgICB9DQotICAgIGludCB3aWR0aCA9IHBCaXRtYXAtPkdldFdpZHRoKCk7DQotICAgIGludCBoZWlnaHQgPSBwQml0bWFwLT5HZXRIZWlnaHQoKTsNCi0gICAgRlhfRkxPQVQgeF9zcGFuID0gZW5kX3ggLSBzdGFydF94Ow0KLSAgICBGWF9GTE9BVCB5X3NwYW4gPSBlbmRfeSAtIHN0YXJ0X3k7DQotICAgIEZYX0ZMT0FUIGF4aXNfbGVuX3NxdWFyZSA9IEZYU1lTX011bCh4X3NwYW4sIHhfc3BhbikgKyBGWFNZU19NdWwoeV9zcGFuLCB5X3NwYW4pOw0KLSAgICBDRlhfQWZmaW5lTWF0cml4IG1hdHJpeDsNCi0gICAgbWF0cml4LlNldFJldmVyc2UoKnBPYmplY3QyQml0bWFwKTsNCi0gICAgaW50IHRvdGFsX3Jlc3VsdHMgPSAwOw0KLSAgICBmb3IgKGludCBqID0gMDsgaiA8IG5GdW5jczsgaiArKykgew0KLSAgICAgICAgaWYgKHBGdW5jc1tqXSkgew0KLSAgICAgICAgICAgIHRvdGFsX3Jlc3VsdHMgKz0gcEZ1bmNzW2pdLT5Db3VudE91dHB1dHMoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAocENTLT5Db3VudENvbXBvbmVudHMoKSA+IHRvdGFsX3Jlc3VsdHMpIHsNCi0gICAgICAgIHRvdGFsX3Jlc3VsdHMgPSBwQ1MtPkNvdW50Q29tcG9uZW50cygpOw0KLSAgICB9DQotICAgIENGWF9GaXhlZEJ1Zkdyb3c8RlhfRkxPQVQsIDE2PiByZXN1bHRfYXJyYXkodG90YWxfcmVzdWx0cyk7DQotICAgIEZYX0ZMT0FUKiBwUmVzdWx0cyA9IHJlc3VsdF9hcnJheTsNCi0gICAgRlhTWVNfbWVtc2V0MzIocFJlc3VsdHMsIDAsIHRvdGFsX3Jlc3VsdHMgKiBzaXplb2YoRlhfRkxPQVQpKTsNCi0gICAgRlhfRFdPUkQgcmdiX2FycmF5W1NIQURJTkdfU1RFUFNdOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFNIQURJTkdfU1RFUFM7IGkgKyspIHsNCi0gICAgICAgIEZYX0ZMT0FUIGlucHV0ID0gKHRfbWF4IC0gdF9taW4pICogaSAvIFNIQURJTkdfU1RFUFMgKyB0X21pbjsNCi0gICAgICAgIGludCBvZmZzZXQgPSAwOw0KLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuRnVuY3M7IGogKyspIHsNCi0gICAgICAgICAgICBpZiAocEZ1bmNzW2pdKSB7DQotICAgICAgICAgICAgICAgIGludCBucmVzdWx0cyA9IDA7DQotICAgICAgICAgICAgICAgIGlmIChwRnVuY3Nbal0tPkNhbGwoJmlucHV0LCAxLCBwUmVzdWx0cyArIG9mZnNldCwgbnJlc3VsdHMpKSB7DQotICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbnJlc3VsdHM7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBGWF9GTE9BVCBSLCBHLCBCOw0KLSAgICAgICAgcENTLT5HZXRSR0IocFJlc3VsdHMsIFIsIEcsIEIpOw0KLSAgICAgICAgcmdiX2FycmF5W2ldID0gRlhBUkdCX1RPRElCKEZYQVJHQl9NQUtFKGFscGhhLCBGWFNZU19yb3VuZChSICogMjU1KSwgRlhTWVNfcm91bmQoRyAqIDI1NSksIEZYU1lTX3JvdW5kKEIgKiAyNTUpKSk7DQotICAgIH0NCi0gICAgaW50IHBpdGNoID0gcEJpdG1hcC0+R2V0UGl0Y2goKTsNCi0gICAgaW50IEJwcCA9IHBCaXRtYXAtPkdldEJQUCgpIC8gODsNCi0gICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgIEZYX0RXT1JEKiBkaWJfYnVmID0gKEZYX0RXT1JEKikocEJpdG1hcC0+R2V0QnVmZmVyKCkgKyByb3cgKiBwaXRjaCk7DQotICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB3aWR0aDsgY29sdW1uICsrKSB7DQotICAgICAgICAgICAgRlhfRkxPQVQgeCA9IChGWF9GTE9BVCljb2x1bW4sIHkgPSAoRlhfRkxPQVQpcm93Ow0KLSAgICAgICAgICAgIG1hdHJpeC5UcmFuc2Zvcm0oeCwgeSk7DQotICAgICAgICAgICAgRlhfRkxPQVQgc2NhbGUgPSBGWFNZU19EaXYoRlhTWVNfTXVsKHggLSBzdGFydF94LCB4X3NwYW4pICsgRlhTWVNfTXVsKHkgLSBzdGFydF95LCB5X3NwYW4pLCBheGlzX2xlbl9zcXVhcmUpOw0KLSAgICAgICAgICAgIGludCBpbmRleCA9IChGWF9JTlQzMikoc2NhbGUgKiAoU0hBRElOR19TVEVQUyAtIDEpKTsNCi0gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7DQotICAgICAgICAgICAgICAgIGlmICghYlN0YXJ0RXh0ZW5kKSB7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpbmRleCA9IDA7DQotICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA+PSBTSEFESU5HX1NURVBTKSB7DQotICAgICAgICAgICAgICAgIGlmICghYkVuZEV4dGVuZCkgew0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaW5kZXggPSBTSEFESU5HX1NURVBTIC0gMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZGliX2J1Zltjb2x1bW5dID0gcmdiX2FycmF5W2luZGV4XTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1zdGF0aWMgdm9pZCBfRHJhd1JhZGlhbFNoYWRpbmcoQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkJpdG1hcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCwgQ1BERl9GdW5jdGlvbioqIHBGdW5jcywgaW50IG5GdW5jcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9Db2xvclNwYWNlKiBwQ1MsIGludCBhbHBoYSkNCi17DQotICAgIEFTU0VSVChwQml0bWFwLT5HZXRGb3JtYXQoKSA9PSBGWERJQl9BcmdiKTsNCi0gICAgQ1BERl9BcnJheSogcENvb3JkcyA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiQ29vcmRzIikpOw0KLSAgICBpZiAocENvb3JkcyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhfRkxPQVQgc3RhcnRfeCA9IHBDb29yZHMtPkdldE51bWJlcigwKTsNCi0gICAgRlhfRkxPQVQgc3RhcnRfeSA9IHBDb29yZHMtPkdldE51bWJlcigxKTsNCi0gICAgRlhfRkxPQVQgc3RhcnRfciA9IHBDb29yZHMtPkdldE51bWJlcigyKTsNCi0gICAgRlhfRkxPQVQgZW5kX3ggPSBwQ29vcmRzLT5HZXROdW1iZXIoMyk7DQotICAgIEZYX0ZMT0FUIGVuZF95ID0gcENvb3Jkcy0+R2V0TnVtYmVyKDQpOw0KLSAgICBGWF9GTE9BVCBlbmRfciA9IHBDb29yZHMtPkdldE51bWJlcig1KTsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXg7DQotICAgIG1hdHJpeC5TZXRSZXZlcnNlKCpwT2JqZWN0MkJpdG1hcCk7DQotICAgIEZYX0ZMT0FUIHRfbWluID0gMCwgdF9tYXggPSAxLjBmOw0KLSAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBwRGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIkRvbWFpbiIpKTsNCi0gICAgaWYgKHBBcnJheSkgew0KLSAgICAgICAgdF9taW4gPSBwQXJyYXktPkdldE51bWJlcigwKTsNCi0gICAgICAgIHRfbWF4ID0gcEFycmF5LT5HZXROdW1iZXIoMSk7DQotICAgIH0NCi0gICAgRlhfQk9PTCBiU3RhcnRFeHRlbmQgPSBGQUxTRSwgYkVuZEV4dGVuZCA9IEZBTFNFOw0KLSAgICBwQXJyYXkgPSBwRGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIkV4dGVuZCIpKTsNCi0gICAgaWYgKHBBcnJheSkgew0KLSAgICAgICAgYlN0YXJ0RXh0ZW5kID0gcEFycmF5LT5HZXRJbnRlZ2VyKDApOw0KLSAgICAgICAgYkVuZEV4dGVuZCA9IHBBcnJheS0+R2V0SW50ZWdlcigxKTsNCi0gICAgfQ0KLSAgICBpbnQgdG90YWxfcmVzdWx0cyA9IDA7DQotICAgIGZvciAoaW50IGogPSAwOyBqIDwgbkZ1bmNzOyBqICsrKSB7DQotICAgICAgICBpZiAocEZ1bmNzW2pdKSB7DQotICAgICAgICAgICAgdG90YWxfcmVzdWx0cyArPSBwRnVuY3Nbal0tPkNvdW50T3V0cHV0cygpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChwQ1MtPkNvdW50Q29tcG9uZW50cygpID4gdG90YWxfcmVzdWx0cykgew0KLSAgICAgICAgdG90YWxfcmVzdWx0cyA9IHBDUy0+Q291bnRDb21wb25lbnRzKCk7DQotICAgIH0NCi0gICAgQ0ZYX0ZpeGVkQnVmR3JvdzxGWF9GTE9BVCwgMTY+IHJlc3VsdF9hcnJheSh0b3RhbF9yZXN1bHRzKTsNCi0gICAgRlhfRkxPQVQqIHBSZXN1bHRzID0gcmVzdWx0X2FycmF5Ow0KLSAgICBGWFNZU19tZW1zZXQzMihwUmVzdWx0cywgMCwgdG90YWxfcmVzdWx0cyAqIHNpemVvZihGWF9GTE9BVCkpOw0KLSAgICBGWF9EV09SRCByZ2JfYXJyYXlbU0hBRElOR19TVEVQU107DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU0hBRElOR19TVEVQUzsgaSArKykgew0KLSAgICAgICAgRlhfRkxPQVQgaW5wdXQgPSAodF9tYXggLSB0X21pbikgKiBpIC8gU0hBRElOR19TVEVQUyArIHRfbWluOw0KLSAgICAgICAgaW50IG9mZnNldCA9IDA7DQotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG5GdW5jczsgaiArKykgew0KLSAgICAgICAgICAgIGlmIChwRnVuY3Nbal0pIHsNCi0gICAgICAgICAgICAgICAgaW50IG5yZXN1bHRzOw0KLSAgICAgICAgICAgICAgICBpZiAocEZ1bmNzW2pdLT5DYWxsKCZpbnB1dCwgMSwgcFJlc3VsdHMgKyBvZmZzZXQsIG5yZXN1bHRzKSkgew0KLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IG5yZXN1bHRzOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfRkxPQVQgUiwgRywgQjsNCi0gICAgICAgIHBDUy0+R2V0UkdCKHBSZXN1bHRzLCBSLCBHLCBCKTsNCi0gICAgICAgIHJnYl9hcnJheVtpXSA9IEZYQVJHQl9UT0RJQihGWEFSR0JfTUFLRShhbHBoYSwgRlhTWVNfcm91bmQoUiAqIDI1NSksIEZYU1lTX3JvdW5kKEcgKiAyNTUpLCBGWFNZU19yb3VuZChCICogMjU1KSkpOw0KLSAgICB9DQotICAgIEZYX0ZMT0FUIGEgPSBGWFNZU19NdWwoc3RhcnRfeCAtIGVuZF94LCBzdGFydF94IC0gZW5kX3gpICsNCi0gICAgICAgICAgICAgICAgIEZYU1lTX011bChzdGFydF95IC0gZW5kX3ksIHN0YXJ0X3kgLSBlbmRfeSkgLSBGWFNZU19NdWwoc3RhcnRfciAtIGVuZF9yLCBzdGFydF9yIC0gZW5kX3IpOw0KLSAgICBpbnQgd2lkdGggPSBwQml0bWFwLT5HZXRXaWR0aCgpOw0KLSAgICBpbnQgaGVpZ2h0ID0gcEJpdG1hcC0+R2V0SGVpZ2h0KCk7DQotICAgIGludCBwaXRjaCA9IHBCaXRtYXAtPkdldFBpdGNoKCk7DQotICAgIGludCBCcHAgPSBwQml0bWFwLT5HZXRCUFAoKSAvIDg7DQotICAgIEZYX0JPT0wgYkRlY3JlYXNpbmcgPSBGQUxTRTsNCi0gICAgaWYgKHN0YXJ0X3IgPiBlbmRfcikgew0KLSAgICAgICAgaW50IGxlbmd0aCA9IChpbnQpRlhTWVNfc3FydCgoRlhTWVNfTXVsKHN0YXJ0X3ggLSBlbmRfeCwgc3RhcnRfeCAtIGVuZF94KSArIEZYU1lTX011bChzdGFydF95IC0gZW5kX3ksIHN0YXJ0X3kgLSBlbmRfeSkpKTsNCi0gICAgICAgIGlmIChsZW5ndGggPCBzdGFydF9yIC0gZW5kX3IpIHsNCi0gICAgICAgICAgICBiRGVjcmVhc2luZyA9IFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgIEZYX0RXT1JEKiBkaWJfYnVmID0gKEZYX0RXT1JEKikocEJpdG1hcC0+R2V0QnVmZmVyKCkgKyByb3cgKiBwaXRjaCk7DQotICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB3aWR0aDsgY29sdW1uICsrKSB7DQotICAgICAgICAgICAgRlhfRkxPQVQgeCA9IChGWF9GTE9BVCljb2x1bW4sIHkgPSAoRlhfRkxPQVQpcm93Ow0KLSAgICAgICAgICAgIG1hdHJpeC5UcmFuc2Zvcm0oeCwgeSk7DQotICAgICAgICAgICAgRlhfRkxPQVQgYiA9IC0yICogKEZYU1lTX011bCh4IC0gc3RhcnRfeCwgZW5kX3ggLSBzdGFydF94KSArIEZYU1lTX011bCh5IC0gc3RhcnRfeSwgZW5kX3kgLSBzdGFydF95KSArDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYU1lTX011bChzdGFydF9yLCBlbmRfciAtIHN0YXJ0X3IpKTsNCi0gICAgICAgICAgICBGWF9GTE9BVCBjID0gRlhTWVNfTXVsKHggLSBzdGFydF94LCB4IC0gc3RhcnRfeCkgKyBGWFNZU19NdWwoeSAtIHN0YXJ0X3ksIHkgLSBzdGFydF95KSAtDQotICAgICAgICAgICAgICAgICAgICAgICAgIEZYU1lTX011bChzdGFydF9yLCBzdGFydF9yKTsNCi0gICAgICAgICAgICBGWF9GTE9BVCBzOw0KLSAgICAgICAgICAgIGlmIChhID09IDApIHsNCi0gICAgICAgICAgICAgICAgcyA9IEZYU1lTX0RpdigtYywgYik7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgRlhfRkxPQVQgYjJfNGFjID0gRlhTWVNfTXVsKGIsIGIpIC0gNCAqIEZYU1lTX011bChhLCBjKTsNCi0gICAgICAgICAgICAgICAgaWYgKGIyXzRhYyA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIEZYX0ZMT0FUIHJvb3QgPSBGWFNZU19zcXJ0KGIyXzRhYyk7DQotICAgICAgICAgICAgICAgIEZYX0ZMT0FUIHMxLCBzMjsNCi0gICAgICAgICAgICAgICAgaWYgKGEgPiAwKSB7DQotICAgICAgICAgICAgICAgICAgICBzMSA9IEZYU1lTX0RpdigtYiAtIHJvb3QsIDIgKiBhKTsNCi0gICAgICAgICAgICAgICAgICAgIHMyID0gRlhTWVNfRGl2KC1iICsgcm9vdCwgMiAqIGEpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgczIgPSBGWFNZU19EaXYoLWIgLSByb290LCAyICogYSk7DQotICAgICAgICAgICAgICAgICAgICBzMSA9IEZYU1lTX0RpdigtYiArIHJvb3QsIDIgKiBhKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoYkRlY3JlYXNpbmcpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChzMSA+PSAwIHx8IGJTdGFydEV4dGVuZCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBzMTsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHMyOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHMyIDw9IDEuMGYgfHwgYkVuZEV4dGVuZCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBzMjsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHMxOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmICgoc3RhcnRfciArIHMgKiAoZW5kX3IgLSBzdGFydF9yKSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpbnQgaW5kZXggPSAoRlhfSU5UMzIpKHMgKiAoU0hBRElOR19TVEVQUyAtIDEpKTsNCi0gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7DQotICAgICAgICAgICAgICAgIGlmICghYlN0YXJ0RXh0ZW5kKSB7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpbmRleCA9IDA7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChpbmRleCA+PSBTSEFESU5HX1NURVBTKSB7DQotICAgICAgICAgICAgICAgIGlmICghYkVuZEV4dGVuZCkgew0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaW5kZXggPSBTSEFESU5HX1NURVBTIC0gMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZGliX2J1Zltjb2x1bW5dID0gcmdiX2FycmF5W2luZGV4XTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1zdGF0aWMgdm9pZCBfRHJhd0Z1bmNTaGFkaW5nKENGWF9ESUJpdG1hcCogcEJpdG1hcCwgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJCaXRtYXAsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0LCBDUERGX0Z1bmN0aW9uKiogcEZ1bmNzLCBpbnQgbkZ1bmNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9Db2xvclNwYWNlKiBwQ1MsIGludCBhbHBoYSkNCi17DQotICAgIEFTU0VSVChwQml0bWFwLT5HZXRGb3JtYXQoKSA9PSBGWERJQl9BcmdiKTsNCi0gICAgQ1BERl9BcnJheSogcERvbWFpbiA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiRG9tYWluIikpOw0KLSAgICBGWF9GTE9BVCB4bWluID0gMCwgeW1pbiA9IDAsIHhtYXggPSAxLjBmLCB5bWF4ID0gMS4wZjsNCi0gICAgaWYgKHBEb21haW4pIHsNCi0gICAgICAgIHhtaW4gPSBwRG9tYWluLT5HZXROdW1iZXIoMCk7DQotICAgICAgICB4bWF4ID0gcERvbWFpbi0+R2V0TnVtYmVyKDEpOw0KLSAgICAgICAgeW1pbiA9IHBEb21haW4tPkdldE51bWJlcigyKTsNCi0gICAgICAgIHltYXggPSBwRG9tYWluLT5HZXROdW1iZXIoMyk7DQotICAgIH0NCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBtdERvbWFpbjJUYXJnZXQgPSBwRGljdC0+R2V0TWF0cml4KEZYX0JTVFJDKCJNYXRyaXgiKSk7DQotICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4LCByZXZlcnNlX21hdHJpeDsNCi0gICAgbWF0cml4LlNldFJldmVyc2UoKnBPYmplY3QyQml0bWFwKTsNCi0gICAgcmV2ZXJzZV9tYXRyaXguU2V0UmV2ZXJzZShtdERvbWFpbjJUYXJnZXQpOw0KLSAgICBtYXRyaXguQ29uY2F0KHJldmVyc2VfbWF0cml4KTsNCi0gICAgaW50IHdpZHRoID0gcEJpdG1hcC0+R2V0V2lkdGgoKTsNCi0gICAgaW50IGhlaWdodCA9IHBCaXRtYXAtPkdldEhlaWdodCgpOw0KLSAgICBpbnQgcGl0Y2ggPSBwQml0bWFwLT5HZXRQaXRjaCgpOw0KLSAgICBpbnQgQnBwID0gcEJpdG1hcC0+R2V0QlBQKCkgLyA4Ow0KLSAgICBpbnQgdG90YWxfcmVzdWx0cyA9IDA7DQotICAgIGZvciAoaW50IGogPSAwOyBqIDwgbkZ1bmNzOyBqICsrKSB7DQotICAgICAgICBpZiAocEZ1bmNzW2pdKSB7DQotICAgICAgICAgICAgdG90YWxfcmVzdWx0cyArPSBwRnVuY3Nbal0tPkNvdW50T3V0cHV0cygpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChwQ1MtPkNvdW50Q29tcG9uZW50cygpID4gdG90YWxfcmVzdWx0cykgew0KLSAgICAgICAgdG90YWxfcmVzdWx0cyA9IHBDUy0+Q291bnRDb21wb25lbnRzKCk7DQotICAgIH0NCi0gICAgQ0ZYX0ZpeGVkQnVmR3JvdzxGWF9GTE9BVCwgMTY+IHJlc3VsdF9hcnJheSh0b3RhbF9yZXN1bHRzKTsNCi0gICAgRlhfRkxPQVQqIHBSZXN1bHRzID0gcmVzdWx0X2FycmF5Ow0KLSAgICBGWFNZU19tZW1zZXQzMihwUmVzdWx0cywgMCwgdG90YWxfcmVzdWx0cyAqIHNpemVvZihGWF9GTE9BVCkpOw0KLSAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgRlhfRFdPUkQqIGRpYl9idWYgPSAoRlhfRFdPUkQqKShwQml0bWFwLT5HZXRCdWZmZXIoKSArIHJvdyAqIHBpdGNoKTsNCi0gICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IHdpZHRoOyBjb2x1bW4gKyspIHsNCi0gICAgICAgICAgICBGWF9GTE9BVCB4ID0gKEZYX0ZMT0FUKWNvbHVtbiwgeSA9IChGWF9GTE9BVClyb3c7DQotICAgICAgICAgICAgbWF0cml4LlRyYW5zZm9ybSh4LCB5KTsNCi0gICAgICAgICAgICBpZiAoeCA8IHhtaW4gfHwgeCA+IHhtYXggfHwgeSA8IHltaW4gfHwgeSA+IHltYXgpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIEZYX0ZMT0FUIGlucHV0WzJdOw0KLSAgICAgICAgICAgIGludCBvZmZzZXQgPSAwOw0KLSAgICAgICAgICAgIGlucHV0WzBdID0geDsNCi0gICAgICAgICAgICBpbnB1dFsxXSA9IHk7DQotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuRnVuY3M7IGogKyspIHsNCi0gICAgICAgICAgICAgICAgaWYgKHBGdW5jc1tqXSkgew0KLSAgICAgICAgICAgICAgICAgICAgaW50IG5yZXN1bHRzOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBGdW5jc1tqXS0+Q2FsbChpbnB1dCwgMiwgcFJlc3VsdHMgKyBvZmZzZXQsIG5yZXN1bHRzKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBucmVzdWx0czsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9GTE9BVCBSLCBHLCBCOw0KLSAgICAgICAgICAgIHBDUy0+R2V0UkdCKHBSZXN1bHRzLCBSLCBHLCBCKTsNCi0gICAgICAgICAgICBkaWJfYnVmW2NvbHVtbl0gPSBGWEFSR0JfVE9ESUIoRlhBUkdCX01BS0UoYWxwaGEsIChGWF9JTlQzMikoUiAqIDI1NSksIChGWF9JTlQzMikoRyAqIDI1NSksIChGWF9JTlQzMikoQiAqIDI1NSkpKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1GWF9CT09MIF9HZXRTY2FubGluZUludGVyc2VjdChpbnQgeSwgRlhfRkxPQVQgeDEsIEZYX0ZMT0FUIHkxLCBGWF9GTE9BVCB4MiwgRlhfRkxPQVQgeTIsIEZYX0ZMT0FUJiB4KQ0KLXsNCi0gICAgaWYgKHkxID09IHkyKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKHkxIDwgeTIpIHsNCi0gICAgICAgIGlmICh5IDwgeTEgfHwgeSA+IHkyKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYgKHkgPCB5MiB8fCB5ID4geTEpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgeCA9IHgxICsgRlhTWVNfTXVsRGl2KHgyIC0geDEsIHkgLSB5MSwgeTIgLSB5MSk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1zdGF0aWMgdm9pZCBfRHJhd0dvdXJhdWQoQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCBpbnQgYWxwaGEsIENQREZfTWVzaFZlcnRleCB0cmlhbmdsZVszXSkNCi17DQotICAgIEZYX0ZMT0FUIG1pbl95ID0gdHJpYW5nbGVbMF0ueSwgbWF4X3kgPSB0cmlhbmdsZVswXS55Ow0KLSAgICBmb3IgKGludCBpID0gMTsgaSA8IDM7IGkgKyspIHsNCi0gICAgICAgIGlmIChtaW5feSA+IHRyaWFuZ2xlW2ldLnkpIHsNCi0gICAgICAgICAgICBtaW5feSA9IHRyaWFuZ2xlW2ldLnk7DQotICAgICAgICB9DQotICAgICAgICBpZiAobWF4X3kgPCB0cmlhbmdsZVtpXS55KSB7DQotICAgICAgICAgICAgbWF4X3kgPSB0cmlhbmdsZVtpXS55Ow0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChtaW5feSA9PSBtYXhfeSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGludCBtaW5feWkgPSAoaW50KUZYU1lTX2Zsb29yKG1pbl95KSwgbWF4X3lpID0gKGludClGWFNZU19jZWlsKG1heF95KTsNCi0gICAgaWYgKG1pbl95aSA8IDApIHsNCi0gICAgICAgIG1pbl95aSA9IDA7DQotICAgIH0NCi0gICAgaWYgKG1heF95aSA+PSBwQml0bWFwLT5HZXRIZWlnaHQoKSkgew0KLSAgICAgICAgbWF4X3lpID0gcEJpdG1hcC0+R2V0SGVpZ2h0KCkgLSAxOw0KLSAgICB9DQotICAgIGZvciAoaW50IHkgPSBtaW5feWk7IHkgPD0gbWF4X3lpOyB5ICsrKSB7DQotICAgICAgICBpbnQgbkludGVyc2VjdHMgPSAwOw0KLSAgICAgICAgRlhfRkxPQVQgaW50ZXJfeFszXSwgclszXSwgZ1szXSwgYlszXTsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSArKykgew0KLSAgICAgICAgICAgIENQREZfTWVzaFZlcnRleCYgdmVydGV4MSA9IHRyaWFuZ2xlW2ldOw0KLSAgICAgICAgICAgIENQREZfTWVzaFZlcnRleCYgdmVydGV4MiA9IHRyaWFuZ2xlWyhpICsgMSkgJSAzXTsNCi0gICAgICAgICAgICBGWF9CT09MIGJJbnRlcnNlY3QgPSBfR2V0U2NhbmxpbmVJbnRlcnNlY3QoeSwgdmVydGV4MS54LCB2ZXJ0ZXgxLnksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4Mi54LCB2ZXJ0ZXgyLnksIGludGVyX3hbbkludGVyc2VjdHNdKTsNCi0gICAgICAgICAgICBpZiAoIWJJbnRlcnNlY3QpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJbbkludGVyc2VjdHNdID0gdmVydGV4MS5yICsgRlhTWVNfTXVsRGl2KHZlcnRleDIuciAtIHZlcnRleDEuciwgeSAtIHZlcnRleDEueSwgdmVydGV4Mi55IC0gdmVydGV4MS55KTsNCi0gICAgICAgICAgICBnW25JbnRlcnNlY3RzXSA9IHZlcnRleDEuZyArIEZYU1lTX011bERpdih2ZXJ0ZXgyLmcgLSB2ZXJ0ZXgxLmcsIHkgLSB2ZXJ0ZXgxLnksIHZlcnRleDIueSAtIHZlcnRleDEueSk7DQotICAgICAgICAgICAgYltuSW50ZXJzZWN0c10gPSB2ZXJ0ZXgxLmIgKyBGWFNZU19NdWxEaXYodmVydGV4Mi5iIC0gdmVydGV4MS5iLCB5IC0gdmVydGV4MS55LCB2ZXJ0ZXgyLnkgLSB2ZXJ0ZXgxLnkpOw0KLSAgICAgICAgICAgIG5JbnRlcnNlY3RzICsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG5JbnRlcnNlY3RzICE9IDIpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBtaW5feCwgbWF4X3gsIHN0YXJ0X2luZGV4LCBlbmRfaW5kZXg7DQotICAgICAgICBpZiAoaW50ZXJfeFswXSA8IGludGVyX3hbMV0pIHsNCi0gICAgICAgICAgICBtaW5feCA9IChpbnQpRlhTWVNfZmxvb3IoaW50ZXJfeFswXSk7DQotICAgICAgICAgICAgbWF4X3ggPSAoaW50KUZYU1lTX2NlaWwoaW50ZXJfeFsxXSk7DQotICAgICAgICAgICAgc3RhcnRfaW5kZXggPSAwOw0KLSAgICAgICAgICAgIGVuZF9pbmRleCA9IDE7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIG1pbl94ID0gKGludClGWFNZU19mbG9vcihpbnRlcl94WzFdKTsNCi0gICAgICAgICAgICBtYXhfeCA9IChpbnQpRlhTWVNfY2VpbChpbnRlcl94WzBdKTsNCi0gICAgICAgICAgICBzdGFydF9pbmRleCA9IDE7DQotICAgICAgICAgICAgZW5kX2luZGV4ID0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBzdGFydF94ID0gbWluX3gsIGVuZF94ID0gbWF4X3g7DQotICAgICAgICBpZiAoc3RhcnRfeCA8IDApIHsNCi0gICAgICAgICAgICBzdGFydF94ID0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChlbmRfeCA+IHBCaXRtYXAtPkdldFdpZHRoKCkpIHsNCi0gICAgICAgICAgICBlbmRfeCA9IHBCaXRtYXAtPkdldFdpZHRoKCk7DQotICAgICAgICB9DQotICAgICAgICBGWF9MUEJZVEUgZGliX2J1ZiA9IHBCaXRtYXAtPkdldEJ1ZmZlcigpICsgeSAqIHBCaXRtYXAtPkdldFBpdGNoKCkgKyBzdGFydF94ICogNDsNCi0gICAgICAgIEZYX0ZMT0FUIHJfdW5pdCA9IChyW2VuZF9pbmRleF0gLSByW3N0YXJ0X2luZGV4XSkgLyAobWF4X3ggLSBtaW5feCk7DQotICAgICAgICBGWF9GTE9BVCBnX3VuaXQgPSAoZ1tlbmRfaW5kZXhdIC0gZ1tzdGFydF9pbmRleF0pIC8gKG1heF94IC0gbWluX3gpOw0KLSAgICAgICAgRlhfRkxPQVQgYl91bml0ID0gKGJbZW5kX2luZGV4XSAtIGJbc3RhcnRfaW5kZXhdKSAvIChtYXhfeCAtIG1pbl94KTsNCi0gICAgICAgIEZYX0ZMT0FUIFIgPSByW3N0YXJ0X2luZGV4XSArIChzdGFydF94IC0gbWluX3gpICogcl91bml0Ow0KLSAgICAgICAgRlhfRkxPQVQgRyA9IGdbc3RhcnRfaW5kZXhdICsgKHN0YXJ0X3ggLSBtaW5feCkgKiBnX3VuaXQ7DQotICAgICAgICBGWF9GTE9BVCBCID0gYltzdGFydF9pbmRleF0gKyAoc3RhcnRfeCAtIG1pbl94KSAqIGJfdW5pdDsNCi0gICAgICAgIGZvciAoaW50IHggPSBzdGFydF94OyB4IDwgZW5kX3g7IHggKyspIHsNCi0gICAgICAgICAgICBSICs9IHJfdW5pdDsNCi0gICAgICAgICAgICBHICs9IGdfdW5pdDsNCi0gICAgICAgICAgICBCICs9IGJfdW5pdDsNCi0gICAgICAgICAgICBGWEFSR0JfU0VURElCKGRpYl9idWYsIEZYQVJHQl9NQUtFKGFscGhhLCAoRlhfSU5UMzIpKFIgKiAyNTUpLCAoRlhfSU5UMzIpKEcgKiAyNTUpLCAoRlhfSU5UMzIpKEIgKiAyNTUpKSk7DQotICAgICAgICAgICAgZGliX2J1ZiArPSA0Ow0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLXN0YXRpYyB2b2lkIF9EcmF3RnJlZUdvdXJhdWRTaGFkaW5nKENGWF9ESUJpdG1hcCogcEJpdG1hcCwgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJCaXRtYXAsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9TdHJlYW0qIHBTaGFkaW5nU3RyZWFtLCBDUERGX0Z1bmN0aW9uKiogcEZ1bmNzLCBpbnQgbkZ1bmNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfQ29sb3JTcGFjZSogcENTLCBpbnQgYWxwaGEpDQotew0KLSAgICBBU1NFUlQocEJpdG1hcC0+R2V0Rm9ybWF0KCkgPT0gRlhESUJfQXJnYik7DQotICAgIGlmIChwU2hhZGluZ1N0cmVhbS0+R2V0VHlwZSgpICE9IFBERk9CSl9TVFJFQU0pIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDUERGX01lc2hTdHJlYW0gc3RyZWFtOw0KLSAgICBpZiAoIXN0cmVhbS5Mb2FkKHBTaGFkaW5nU3RyZWFtLCBwRnVuY3MsIG5GdW5jcywgcENTKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfTWVzaFZlcnRleCB0cmlhbmdsZVszXTsNCi0gICAgd2hpbGUgKCFzdHJlYW0ubV9CaXRTdHJlYW0uSXNFT0YoKSkgew0KLSAgICAgICAgQ1BERl9NZXNoVmVydGV4IHZlcnRleDsNCi0gICAgICAgIEZYX0RXT1JEIGZsYWcgPSBzdHJlYW0uR2V0VmVydGV4KHZlcnRleCwgcE9iamVjdDJCaXRtYXApOw0KLSAgICAgICAgaWYgKGZsYWcgPT0gMCkgew0KLSAgICAgICAgICAgIHRyaWFuZ2xlWzBdID0gdmVydGV4Ow0KLSAgICAgICAgICAgIGZvciAoaW50IGogPSAxOyBqIDwgMzsgaiArKykgew0KLSAgICAgICAgICAgICAgICBzdHJlYW0uR2V0VmVydGV4KHRyaWFuZ2xlW2pdLCBwT2JqZWN0MkJpdG1hcCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAoZmxhZyA9PSAxKSB7DQotICAgICAgICAgICAgICAgIHRyaWFuZ2xlWzBdID0gdHJpYW5nbGVbMV07DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHRyaWFuZ2xlWzFdID0gdHJpYW5nbGVbMl07DQotICAgICAgICAgICAgdHJpYW5nbGVbMl0gPSB2ZXJ0ZXg7DQotICAgICAgICB9DQotICAgICAgICBfRHJhd0dvdXJhdWQocEJpdG1hcCwgYWxwaGEsIHRyaWFuZ2xlKTsNCi0gICAgfQ0KLX0NCi1zdGF0aWMgdm9pZCBfRHJhd0xhdHRpY2VHb3VyYXVkU2hhZGluZyhDRlhfRElCaXRtYXAqIHBCaXRtYXAsIENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyQml0bWFwLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfU3RyZWFtKiBwU2hhZGluZ1N0cmVhbSwgQ1BERl9GdW5jdGlvbioqIHBGdW5jcywgaW50IG5GdW5jcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0NvbG9yU3BhY2UqIHBDUywgaW50IGFscGhhKQ0KLXsNCi0gICAgQVNTRVJUKHBCaXRtYXAtPkdldEZvcm1hdCgpID09IEZYRElCX0FyZ2IpOw0KLSAgICBpZiAocFNoYWRpbmdTdHJlYW0tPkdldFR5cGUoKSAhPSBQREZPQkpfU1RSRUFNKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaW50IHJvd192ZXJ0cyA9IHBTaGFkaW5nU3RyZWFtLT5HZXREaWN0KCktPkdldEludGVnZXIoIlZlcnRpY2VzUGVyUm93Iik7DQotICAgIGlmIChyb3dfdmVydHMgPCAyKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9NZXNoU3RyZWFtIHN0cmVhbTsNCi0gICAgaWYgKCFzdHJlYW0uTG9hZChwU2hhZGluZ1N0cmVhbSwgcEZ1bmNzLCBuRnVuY3MsIHBDUykpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDUERGX01lc2hWZXJ0ZXgqIHZlcnRleCA9IEZYX0FsbG9jKENQREZfTWVzaFZlcnRleCwgcm93X3ZlcnRzICogMik7DQotICAgIGlmICghc3RyZWFtLkdldFZlcnRleFJvdyh2ZXJ0ZXgsIHJvd192ZXJ0cywgcE9iamVjdDJCaXRtYXApKSB7DQotICAgICAgICBGWF9GcmVlKHZlcnRleCk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaW50IGxhc3RfaW5kZXggPSAwOw0KLSAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgQ1BERl9NZXNoVmVydGV4KiBsYXN0X3JvdyA9IHZlcnRleCArIGxhc3RfaW5kZXggKiByb3dfdmVydHM7DQotICAgICAgICBDUERGX01lc2hWZXJ0ZXgqIHRoaXNfcm93ID0gdmVydGV4ICsgKDEgLSBsYXN0X2luZGV4KSAqIHJvd192ZXJ0czsNCi0gICAgICAgIGlmICghc3RyZWFtLkdldFZlcnRleFJvdyh0aGlzX3Jvdywgcm93X3ZlcnRzLCBwT2JqZWN0MkJpdG1hcCkpIHsNCi0gICAgICAgICAgICBGWF9GcmVlKHZlcnRleCk7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1BERl9NZXNoVmVydGV4IHRyaWFuZ2xlWzNdOw0KLSAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCByb3dfdmVydHM7IGkgKyspIHsNCi0gICAgICAgICAgICB0cmlhbmdsZVswXSA9IGxhc3Rfcm93W2ldOw0KLSAgICAgICAgICAgIHRyaWFuZ2xlWzFdID0gdGhpc19yb3dbaSAtIDFdOw0KLSAgICAgICAgICAgIHRyaWFuZ2xlWzJdID0gbGFzdF9yb3dbaSAtIDFdOw0KLSAgICAgICAgICAgIF9EcmF3R291cmF1ZChwQml0bWFwLCBhbHBoYSwgdHJpYW5nbGUpOw0KLSAgICAgICAgICAgIHRyaWFuZ2xlWzJdID0gdGhpc19yb3dbaV07DQotICAgICAgICAgICAgX0RyYXdHb3VyYXVkKHBCaXRtYXAsIGFscGhhLCB0cmlhbmdsZSk7DQotICAgICAgICB9DQotICAgICAgICBsYXN0X2luZGV4ID0gMSAtIGxhc3RfaW5kZXg7DQotICAgIH0NCi0gICAgRlhfRnJlZSh2ZXJ0ZXgpOw0KLX0NCi1zdHJ1Y3QgQ29vbl9CZXppZXJDb2VmZiB7DQotICAgIGZsb2F0IGEsIGIsIGMsIGQ7DQotICAgIHZvaWQgRnJvbVBvaW50cyhmbG9hdCBwMCwgZmxvYXQgcDEsIGZsb2F0IHAyLCBmbG9hdCBwMykNCi0gICAgew0KLSAgICAgICAgYSA9IC1wMCArIDMgKiBwMSAtIDMgKiBwMiArIHAzOw0KLSAgICAgICAgYiA9IDMgKiBwMCAtIDYgKiBwMSArIDMgKiBwMjsNCi0gICAgICAgIGMgPSAtMyAqIHAwICsgMyAqIHAxOw0KLSAgICAgICAgZCA9IHAwOw0KLSAgICB9DQotICAgIENvb25fQmV6aWVyQ29lZmYgZmlyc3RfaGFsZigpDQotICAgIHsNCi0gICAgICAgIENvb25fQmV6aWVyQ29lZmYgcmVzdWx0Ow0KLSAgICAgICAgcmVzdWx0LmEgPSBhIC8gODsNCi0gICAgICAgIHJlc3VsdC5iID0gYiAvIDQ7DQotICAgICAgICByZXN1bHQuYyA9IGMgLyAyOw0KLSAgICAgICAgcmVzdWx0LmQgPSBkOw0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsNCi0gICAgfQ0KLSAgICBDb29uX0JlemllckNvZWZmIHNlY29uZF9oYWxmKCkNCi0gICAgew0KLSAgICAgICAgQ29vbl9CZXppZXJDb2VmZiByZXN1bHQ7DQotICAgICAgICByZXN1bHQuYSA9IGEgLyA4Ow0KLSAgICAgICAgcmVzdWx0LmIgPSAzICogYSAvIDggKyBiIC8gNDsNCi0gICAgICAgIHJlc3VsdC5jID0gMyAqIGEgLyA4ICsgYiAvIDIgKyBjIC8gMjsNCi0gICAgICAgIHJlc3VsdC5kID0gYSAvIDggKyBiIC8gNCArIGMgLyAyICsgZDsNCi0gICAgICAgIHJldHVybiByZXN1bHQ7DQotICAgIH0NCi0gICAgdm9pZCBHZXRQb2ludHMoZmxvYXQgcFs0XSkNCi0gICAgew0KLSAgICAgICAgcFswXSA9IGQ7DQotICAgICAgICBwWzFdID0gYyAvIDMgKyBwWzBdOw0KLSAgICAgICAgcFsyXSA9IGIgLyAzIC0gcFswXSArIDIgKiBwWzFdOw0KLSAgICAgICAgcFszXSA9IGEgKyBwWzBdIC0gMyAqIHBbMV0gKyAzICogcFsyXTsNCi0gICAgfQ0KLSAgICB2b2lkIEdldFBvaW50c1JldmVyc2UoZmxvYXQgcFs0XSkNCi0gICAgew0KLSAgICAgICAgcFszXSA9IGQ7DQotICAgICAgICBwWzJdID0gYyAvIDMgKyBwWzNdOw0KLSAgICAgICAgcFsxXSA9IGIgLyAzIC0gcFszXSArIDIgKiBwWzJdOw0KLSAgICAgICAgcFswXSA9IGEgKyBwWzNdIC0gMyAqIHBbMl0gKyAzICogcFsxXTsNCi0gICAgfQ0KLSAgICB2b2lkIEJlemllckludGVycG9sKENvb25fQmV6aWVyQ29lZmYmIEMxLCBDb29uX0JlemllckNvZWZmJiBDMiwgQ29vbl9CZXppZXJDb2VmZiYgRDEsIENvb25fQmV6aWVyQ29lZmYmIEQyKQ0KLSAgICB7DQotICAgICAgICBhID0gKEQxLmEgKyBEMi5hKSAvIDI7DQotICAgICAgICBiID0gKEQxLmIgKyBEMi5iKSAvIDI7DQotICAgICAgICBjID0gKEQxLmMgKyBEMi5jKSAvIDIgLSAoQzEuYSAvIDggKyBDMS5iIC8gNCArIEMxLmMgLyAyKSArIChDMi5hIC8gOCArIEMyLmIgLyA0KSArICgtQzEuZCArIEQyLmQpIC8gMiAtIChDMi5hICsgQzIuYikgLyAyOw0KLSAgICAgICAgZCA9IEMxLmEgLyA4ICsgQzEuYiAvIDQgKyBDMS5jIC8gMiArIEMxLmQ7DQotICAgIH0NCi0gICAgZmxvYXQgRGlzdGFuY2UoKQ0KLSAgICB7DQotICAgICAgICBmbG9hdCBkaXMgPSBhICsgYiArIGM7DQotICAgICAgICByZXR1cm4gZGlzIDwgMCA/IC1kaXMgOiBkaXM7DQotICAgIH0NCi19Ow0KLXN0cnVjdCBDb29uX0JlemllciB7DQotICAgIENvb25fQmV6aWVyQ29lZmYgeCwgeTsNCi0gICAgdm9pZCBGcm9tUG9pbnRzKGZsb2F0IHgwLCBmbG9hdCB5MCwgZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9hdCB4MiwgZmxvYXQgeTIsIGZsb2F0IHgzLCBmbG9hdCB5MykNCi0gICAgew0KLSAgICAgICAgeC5Gcm9tUG9pbnRzKHgwLCB4MSwgeDIsIHgzKTsNCi0gICAgICAgIHkuRnJvbVBvaW50cyh5MCwgeTEsIHkyLCB5Myk7DQotICAgIH0NCi0gICAgQ29vbl9CZXppZXIgZmlyc3RfaGFsZigpDQotICAgIHsNCi0gICAgICAgIENvb25fQmV6aWVyIHJlc3VsdDsNCi0gICAgICAgIHJlc3VsdC54ID0geC5maXJzdF9oYWxmKCk7DQotICAgICAgICByZXN1bHQueSA9IHkuZmlyc3RfaGFsZigpOw0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsNCi0gICAgfQ0KLSAgICBDb29uX0JlemllciBzZWNvbmRfaGFsZigpDQotICAgIHsNCi0gICAgICAgIENvb25fQmV6aWVyIHJlc3VsdDsNCi0gICAgICAgIHJlc3VsdC54ID0geC5zZWNvbmRfaGFsZigpOw0KLSAgICAgICAgcmVzdWx0LnkgPSB5LnNlY29uZF9oYWxmKCk7DQotICAgICAgICByZXR1cm4gcmVzdWx0Ow0KLSAgICB9DQotICAgIHZvaWQgQmV6aWVySW50ZXJwb2woQ29vbl9CZXppZXImIEMxLCBDb29uX0JlemllciYgQzIsIENvb25fQmV6aWVyJiBEMSwgQ29vbl9CZXppZXImIEQyKQ0KLSAgICB7DQotICAgICAgICB4LkJlemllckludGVycG9sKEMxLngsIEMyLngsIEQxLngsIEQyLngpOw0KLSAgICAgICAgeS5CZXppZXJJbnRlcnBvbChDMS55LCBDMi55LCBEMS55LCBEMi55KTsNCi0gICAgfQ0KLSAgICB2b2lkIEdldFBvaW50cyhGWF9QQVRIUE9JTlQqIHBQb2ludHMpDQotICAgIHsNCi0gICAgICAgIGZsb2F0IHBbNF07DQotICAgICAgICBpbnQgaTsNCi0gICAgICAgIHguR2V0UG9pbnRzKHApOw0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKyspIHsNCi0gICAgICAgICAgICBwUG9pbnRzW2ldLm1fUG9pbnRYID0gcFtpXTsNCi0gICAgICAgIH0NCi0gICAgICAgIHkuR2V0UG9pbnRzKHApOw0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKyspIHsNCi0gICAgICAgICAgICBwUG9pbnRzW2ldLm1fUG9pbnRZID0gcFtpXTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICB2b2lkIEdldFBvaW50c1JldmVyc2UoRlhfUEFUSFBPSU5UKiBwUG9pbnRzKQ0KLSAgICB7DQotICAgICAgICBmbG9hdCBwWzRdOw0KLSAgICAgICAgaW50IGk7DQotICAgICAgICB4LkdldFBvaW50c1JldmVyc2UocCk7DQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSArKykgew0KLSAgICAgICAgICAgIHBQb2ludHNbaV0ubV9Qb2ludFggPSBwW2ldOw0KLSAgICAgICAgfQ0KLSAgICAgICAgeS5HZXRQb2ludHNSZXZlcnNlKHApOw0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKyspIHsNCi0gICAgICAgICAgICBwUG9pbnRzW2ldLm1fUG9pbnRZID0gcFtpXTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBmbG9hdCBEaXN0YW5jZSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiB4LkRpc3RhbmNlKCkgKyB5LkRpc3RhbmNlKCk7DQotICAgIH0NCi19Ow0KLXN0YXRpYyBpbnQgX0JpSW50ZXJwb2woaW50IGMwLCBpbnQgYzEsIGludCBjMiwgaW50IGMzLCBpbnQgeCwgaW50IHksIGludCB4X3NjYWxlLCBpbnQgeV9zY2FsZSkNCi17DQotICAgIGludCB4MSA9IGMwICsgKGMzIC0gYzApICogeCAvIHhfc2NhbGU7DQotICAgIGludCB4MiA9IGMxICsgKGMyIC0gYzEpICogeCAvIHhfc2NhbGU7DQotICAgIHJldHVybiB4MSArICh4MiAtIHgxKSAqIHkgLyB5X3NjYWxlOw0KLX0NCi1zdHJ1Y3QgQ29vbl9Db2xvciB7DQotICAgIENvb25fQ29sb3IoKQ0KLSAgICB7DQotICAgICAgICBGWFNZU19tZW1zZXQzMihjb21wLCAwLCBzaXplb2YoaW50KSAqIDMpOw0KLSAgICB9DQotICAgIGludAkJY29tcFszXTsNCi0gICAgdm9pZAlCaUludGVycG9sKENvb25fQ29sb3IgY29sb3JzWzRdLCBpbnQgeCwgaW50IHksIGludCB4X3NjYWxlLCBpbnQgeV9zY2FsZSkNCi0gICAgew0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpICsrKQ0KLSAgICAgICAgICAgIGNvbXBbaV0gPSBfQmlJbnRlcnBvbChjb2xvcnNbMF0uY29tcFtpXSwgY29sb3JzWzFdLmNvbXBbaV0sIGNvbG9yc1syXS5jb21wW2ldLCBjb2xvcnNbM10uY29tcFtpXSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgeSwgeF9zY2FsZSwgeV9zY2FsZSk7DQotICAgIH0NCi0gICAgaW50CQlEaXN0YW5jZShDb29uX0NvbG9yJiBvKQ0KLSAgICB7DQotICAgICAgICBpbnQgbWF4LCBkaWZmOw0KLSAgICAgICAgbWF4ID0gRlhTWVNfYWJzKGNvbXBbMF0gLSBvLmNvbXBbMF0pOw0KLSAgICAgICAgZGlmZiA9IEZYU1lTX2Ficyhjb21wWzFdIC0gby5jb21wWzFdKTsNCi0gICAgICAgIGlmIChtYXggPCBkaWZmKSB7DQotICAgICAgICAgICAgbWF4ID0gZGlmZjsNCi0gICAgICAgIH0NCi0gICAgICAgIGRpZmYgPSBGWFNZU19hYnMoY29tcFsyXSAtIG8uY29tcFsyXSk7DQotICAgICAgICBpZiAobWF4IDwgZGlmZikgew0KLSAgICAgICAgICAgIG1heCA9IGRpZmY7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gbWF4Ow0KLSAgICB9DQotfTsNCi1zdHJ1Y3QgQ1BERl9QYXRjaERyYXdlciB7DQotICAgIENvb25fQ29sb3IJCQlwYXRjaF9jb2xvcnNbNF07DQotICAgIGludAkJCQkJbWF4X2RlbHRhOw0KLSAgICBDRlhfUGF0aERhdGEJCXBhdGg7DQotICAgIENGWF9SZW5kZXJEZXZpY2UqCXBEZXZpY2U7DQotICAgIGludAkJCQkJZmlsbF9tb2RlOw0KLSAgICBpbnQJCQkJCWFscGhhOw0KLSAgICB2b2lkIERyYXcoaW50IHhfc2NhbGUsIGludCB5X3NjYWxlLCBpbnQgbGVmdCwgaW50IGJvdHRvbSwgQ29vbl9CZXppZXIgQzEsIENvb25fQmV6aWVyIEMyLCBDb29uX0JlemllciBEMSwgQ29vbl9CZXppZXIgRDIpDQotICAgIHsNCi0gICAgICAgIEZYX0JPT0wgYlNtYWxsID0gQzEuRGlzdGFuY2UoKSA8IDIgJiYgQzIuRGlzdGFuY2UoKSA8IDIgJiYgRDEuRGlzdGFuY2UoKSA8IDIgJiYgRDIuRGlzdGFuY2UoKSA8IDI7DQotICAgICAgICBDb29uX0NvbG9yIGRpdl9jb2xvcnNbNF07DQotICAgICAgICBpbnQgZF9ib3R0b20sIGRfbGVmdCwgZF90b3AsIGRfcmlnaHQ7DQotICAgICAgICBkaXZfY29sb3JzWzBdLkJpSW50ZXJwb2wocGF0Y2hfY29sb3JzLCBsZWZ0LCBib3R0b20sIHhfc2NhbGUsIHlfc2NhbGUpOw0KLSAgICAgICAgaWYgKCFiU21hbGwpIHsNCi0gICAgICAgICAgICBkaXZfY29sb3JzWzFdLkJpSW50ZXJwb2wocGF0Y2hfY29sb3JzLCBsZWZ0LCBib3R0b20gKyAxLCB4X3NjYWxlLCB5X3NjYWxlKTsNCi0gICAgICAgICAgICBkaXZfY29sb3JzWzJdLkJpSW50ZXJwb2wocGF0Y2hfY29sb3JzLCBsZWZ0ICsgMSwgYm90dG9tICsgMSwgeF9zY2FsZSwgeV9zY2FsZSk7DQotICAgICAgICAgICAgZGl2X2NvbG9yc1szXS5CaUludGVycG9sKHBhdGNoX2NvbG9ycywgbGVmdCArIDEsIGJvdHRvbSwgeF9zY2FsZSwgeV9zY2FsZSk7DQotICAgICAgICAgICAgZF9ib3R0b20gPSBkaXZfY29sb3JzWzNdLkRpc3RhbmNlKGRpdl9jb2xvcnNbMF0pOw0KLSAgICAgICAgICAgIGRfbGVmdCA9IGRpdl9jb2xvcnNbMV0uRGlzdGFuY2UoZGl2X2NvbG9yc1swXSk7DQotICAgICAgICAgICAgZF90b3AgPSBkaXZfY29sb3JzWzFdLkRpc3RhbmNlKGRpdl9jb2xvcnNbMl0pOw0KLSAgICAgICAgICAgIGRfcmlnaHQgPSBkaXZfY29sb3JzWzJdLkRpc3RhbmNlKGRpdl9jb2xvcnNbM10pOw0KLSAgICAgICAgfQ0KLSNkZWZpbmUgQ09PTkNPTE9SX1RIUkVTSE9MRCA0DQotICAgICAgICBpZiAoYlNtYWxsIHx8IChkX2JvdHRvbSA8IENPT05DT0xPUl9USFJFU0hPTEQgJiYgZF9sZWZ0IDwgQ09PTkNPTE9SX1RIUkVTSE9MRCAmJg0KLSAgICAgICAgICAgICAgICAgICAgICAgZF90b3AgPCBDT09OQ09MT1JfVEhSRVNIT0xEICYmIGRfcmlnaHQgPCBDT09OQ09MT1JfVEhSRVNIT0xEKSkgew0KLSAgICAgICAgICAgIEZYX1BBVEhQT0lOVCogcFBvaW50cyA9IHBhdGguR2V0UG9pbnRzKCk7DQotICAgICAgICAgICAgQzEuR2V0UG9pbnRzKHBQb2ludHMpOw0KLSAgICAgICAgICAgIEQyLkdldFBvaW50cyhwUG9pbnRzICsgMyk7DQotICAgICAgICAgICAgQzIuR2V0UG9pbnRzUmV2ZXJzZShwUG9pbnRzICsgNik7DQotICAgICAgICAgICAgRDEuR2V0UG9pbnRzUmV2ZXJzZShwUG9pbnRzICsgOSk7DQotICAgICAgICAgICAgaW50IGZpbGxGbGFncyA9IEZYRklMTF9XSU5ESU5HIHwgRlhGSUxMX0ZVTExDT1ZFUjsNCi0gICAgICAgICAgICBpZiAoZmlsbF9tb2RlICYgUkVOREVSX05PUEFUSFNNT09USCkgew0KLSAgICAgICAgICAgICAgICBmaWxsRmxhZ3MgfD0gRlhGSUxMX05PUEFUSFNNT09USDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIE5VTEwsIE5VTEwsIEZYQVJHQl9NQUtFKGFscGhhLCBkaXZfY29sb3JzWzBdLmNvbXBbMF0sIGRpdl9jb2xvcnNbMF0uY29tcFsxXSwgZGl2X2NvbG9yc1swXS5jb21wWzJdKSwgMCwgZmlsbEZsYWdzKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYgKGRfYm90dG9tIDwgQ09PTkNPTE9SX1RIUkVTSE9MRCAmJiBkX3RvcCA8IENPT05DT0xPUl9USFJFU0hPTEQpIHsNCi0gICAgICAgICAgICAgICAgQ29vbl9CZXppZXIgbTE7DQotICAgICAgICAgICAgICAgIG0xLkJlemllckludGVycG9sKEQxLCBEMiwgQzEsIEMyKTsNCi0gICAgICAgICAgICAgICAgeV9zY2FsZSAqPSAyOw0KLSAgICAgICAgICAgICAgICBib3R0b20gKj0gMjsNCi0gICAgICAgICAgICAgICAgRHJhdyh4X3NjYWxlLCB5X3NjYWxlLCBsZWZ0LCBib3R0b20sIEMxLCBtMSwgRDEuZmlyc3RfaGFsZigpLCBEMi5maXJzdF9oYWxmKCkpOw0KLSAgICAgICAgICAgICAgICBEcmF3KHhfc2NhbGUsIHlfc2NhbGUsIGxlZnQsIGJvdHRvbSArIDEsIG0xLCBDMiwgRDEuc2Vjb25kX2hhbGYoKSwgRDIuc2Vjb25kX2hhbGYoKSk7DQotICAgICAgICAgICAgfSBlbHNlIGlmIChkX2xlZnQgPCBDT09OQ09MT1JfVEhSRVNIT0xEICYmIGRfcmlnaHQgPCBDT09OQ09MT1JfVEhSRVNIT0xEKSB7DQotICAgICAgICAgICAgICAgIENvb25fQmV6aWVyIG0yOw0KLSAgICAgICAgICAgICAgICBtMi5CZXppZXJJbnRlcnBvbChDMSwgQzIsIEQxLCBEMik7DQotICAgICAgICAgICAgICAgIHhfc2NhbGUgKj0gMjsNCi0gICAgICAgICAgICAgICAgbGVmdCAqPSAyOw0KLSAgICAgICAgICAgICAgICBEcmF3KHhfc2NhbGUsIHlfc2NhbGUsIGxlZnQsIGJvdHRvbSwgQzEuZmlyc3RfaGFsZigpLCBDMi5maXJzdF9oYWxmKCksIEQxLCBtMik7DQotICAgICAgICAgICAgICAgIERyYXcoeF9zY2FsZSwgeV9zY2FsZSwgbGVmdCArIDEsIGJvdHRvbSwgQzEuc2Vjb25kX2hhbGYoKSwgQzIuc2Vjb25kX2hhbGYoKSwgbTIsIEQyKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBDb29uX0JlemllciBtMSwgbTI7DQotICAgICAgICAgICAgICAgIG0xLkJlemllckludGVycG9sKEQxLCBEMiwgQzEsIEMyKTsNCi0gICAgICAgICAgICAgICAgbTIuQmV6aWVySW50ZXJwb2woQzEsIEMyLCBEMSwgRDIpOw0KLSAgICAgICAgICAgICAgICBDb29uX0JlemllciBtMWYgPSBtMS5maXJzdF9oYWxmKCk7DQotICAgICAgICAgICAgICAgIENvb25fQmV6aWVyIG0xcyA9IG0xLnNlY29uZF9oYWxmKCk7DQotICAgICAgICAgICAgICAgIENvb25fQmV6aWVyIG0yZiA9IG0yLmZpcnN0X2hhbGYoKTsNCi0gICAgICAgICAgICAgICAgQ29vbl9CZXppZXIgbTJzID0gbTIuc2Vjb25kX2hhbGYoKTsNCi0gICAgICAgICAgICAgICAgeF9zY2FsZSAqPSAyOw0KLSAgICAgICAgICAgICAgICB5X3NjYWxlICo9IDI7DQotICAgICAgICAgICAgICAgIGxlZnQgKj0gMjsNCi0gICAgICAgICAgICAgICAgYm90dG9tICo9IDI7DQotICAgICAgICAgICAgICAgIERyYXcoeF9zY2FsZSwgeV9zY2FsZSwgbGVmdCwgYm90dG9tLCBDMS5maXJzdF9oYWxmKCksIG0xZiwgRDEuZmlyc3RfaGFsZigpLCBtMmYpOw0KLSAgICAgICAgICAgICAgICBEcmF3KHhfc2NhbGUsIHlfc2NhbGUsIGxlZnQsIGJvdHRvbSArIDEsIG0xZiwgQzIuZmlyc3RfaGFsZigpLCBEMS5zZWNvbmRfaGFsZigpLCBtMnMpOw0KLSAgICAgICAgICAgICAgICBEcmF3KHhfc2NhbGUsIHlfc2NhbGUsIGxlZnQgKyAxLCBib3R0b20sIEMxLnNlY29uZF9oYWxmKCksIG0xcywgbTJmLCBEMi5maXJzdF9oYWxmKCkpOw0KLSAgICAgICAgICAgICAgICBEcmF3KHhfc2NhbGUsIHlfc2NhbGUsIGxlZnQgKyAxLCBib3R0b20gKyAxLCBtMXMsIEMyLnNlY29uZF9oYWxmKCksIG0ycywgRDIuc2Vjb25kX2hhbGYoKSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotfTsNCi1zdGF0aWMgdm9pZCBfRHJhd0Nvb25QYXRjaE1lc2hlcyhGWF9CT09MIGJUZW5zb3IsIENGWF9ESUJpdG1hcCogcEJpdG1hcCwgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJCaXRtYXAsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9TdHJlYW0qIHBTaGFkaW5nU3RyZWFtLCBDUERGX0Z1bmN0aW9uKiogcEZ1bmNzLCBpbnQgbkZ1bmNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfQ29sb3JTcGFjZSogcENTLCBpbnQgZmlsbF9tb2RlLCBpbnQgYWxwaGEpDQotew0KLSAgICBBU1NFUlQocEJpdG1hcC0+R2V0Rm9ybWF0KCkgPT0gRlhESUJfQXJnYik7DQotICAgIGlmIChwU2hhZGluZ1N0cmVhbS0+R2V0VHlwZSgpICE9IFBERk9CSl9TVFJFQU0pIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDRlhfRnhnZURldmljZSBkZXZpY2U7DQotICAgIGRldmljZS5BdHRhY2gocEJpdG1hcCk7DQotICAgIENQREZfTWVzaFN0cmVhbSBzdHJlYW07DQotICAgIGlmICghc3RyZWFtLkxvYWQocFNoYWRpbmdTdHJlYW0sIHBGdW5jcywgbkZ1bmNzLCBwQ1MpKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9QYXRjaERyYXdlciBwYXRjaDsNCi0gICAgcGF0Y2guYWxwaGEgPSBhbHBoYTsNCi0gICAgcGF0Y2gucERldmljZSA9ICZkZXZpY2U7DQotICAgIHBhdGNoLmZpbGxfbW9kZSA9IGZpbGxfbW9kZTsNCi0gICAgcGF0Y2gucGF0aC5TZXRQb2ludENvdW50KDEzKTsNCi0gICAgRlhfUEFUSFBPSU5UKiBwUG9pbnRzID0gcGF0Y2gucGF0aC5HZXRQb2ludHMoKTsNCi0gICAgcFBvaW50c1swXS5tX0ZsYWcgPSBGWFBUX01PVkVUTzsNCi0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCAxMzsgaSArKykgew0KLSAgICAgICAgcFBvaW50c1tpXS5tX0ZsYWcgPSBGWFBUX0JFWklFUlRPOw0KLSAgICB9DQotICAgIENGWF9GbG9hdFBvaW50IGNvb3Jkc1sxNl07DQotICAgIGludCBwb2ludF9jb3VudCA9IGJUZW5zb3IgPyAxNiA6IDEyOw0KLSAgICB3aGlsZSAoIXN0cmVhbS5tX0JpdFN0cmVhbS5Jc0VPRigpKSB7DQotICAgICAgICBGWF9EV09SRCBmbGFnID0gc3RyZWFtLkdldEZsYWcoKTsNCi0gICAgICAgIGludCBpU3RhcnRQb2ludCA9IDAsIGlTdGFydENvbG9yID0gMCwgaTsNCi0gICAgICAgIGlmIChmbGFnKSB7DQotICAgICAgICAgICAgaVN0YXJ0UG9pbnQgPSA0Ow0KLSAgICAgICAgICAgIGlTdGFydENvbG9yID0gMjsNCi0gICAgICAgICAgICBDRlhfRmxvYXRQb2ludCB0ZW1wQ29vcmRzWzRdOw0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSArKykgew0KLSAgICAgICAgICAgICAgICB0ZW1wQ29vcmRzW2ldID0gY29vcmRzWyhmbGFnICogMyArIGkpICUgMTJdOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWFNZU19tZW1jcHkzMihjb29yZHMsIHRlbXBDb29yZHMsIHNpemVvZihDRlhfRmxvYXRQb2ludCkgKiA0KTsNCi0gICAgICAgICAgICBDb29uX0NvbG9yIHRlbXBDb2xvcnNbMl07DQotICAgICAgICAgICAgdGVtcENvbG9yc1swXSA9IHBhdGNoLnBhdGNoX2NvbG9yc1tmbGFnXTsNCi0gICAgICAgICAgICB0ZW1wQ29sb3JzWzFdID0gcGF0Y2gucGF0Y2hfY29sb3JzWyhmbGFnICsgMSkgJSA0XTsNCi0gICAgICAgICAgICBGWFNZU19tZW1jcHkzMihwYXRjaC5wYXRjaF9jb2xvcnMsIHRlbXBDb2xvcnMsIHNpemVvZihDb29uX0NvbG9yKSAqIDIpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yIChpID0gaVN0YXJ0UG9pbnQ7IGkgPCBwb2ludF9jb3VudDsgaSArKykgew0KLSAgICAgICAgICAgIHN0cmVhbS5HZXRDb29yZHMoY29vcmRzW2ldLngsIGNvb3Jkc1tpXS55KTsNCi0gICAgICAgICAgICBwT2JqZWN0MkJpdG1hcC0+VHJhbnNmb3JtKGNvb3Jkc1tpXS54LCBjb29yZHNbaV0ueSk7DQotICAgICAgICB9DQotICAgICAgICBmb3IgKGkgPSBpU3RhcnRDb2xvcjsgaSA8IDQ7IGkgKyspIHsNCi0gICAgICAgICAgICBGWF9GTE9BVCByLCBnLCBiOw0KLSAgICAgICAgICAgIHN0cmVhbS5HZXRDb2xvcihyLCBnLCBiKTsNCi0gICAgICAgICAgICBwYXRjaC5wYXRjaF9jb2xvcnNbaV0uY29tcFswXSA9IChGWF9JTlQzMikociAqIDI1NSk7DQotICAgICAgICAgICAgcGF0Y2gucGF0Y2hfY29sb3JzW2ldLmNvbXBbMV0gPSAoRlhfSU5UMzIpKGcgKiAyNTUpOw0KLSAgICAgICAgICAgIHBhdGNoLnBhdGNoX2NvbG9yc1tpXS5jb21wWzJdID0gKEZYX0lOVDMyKShiICogMjU1KTsNCi0gICAgICAgIH0NCi0gICAgICAgIENGWF9GbG9hdFJlY3QgYmJveCA9IENGWF9GbG9hdFJlY3Q6OkdldEJCb3goY29vcmRzLCBwb2ludF9jb3VudCk7DQotICAgICAgICBpZiAoYmJveC5yaWdodCA8PSAwIHx8IGJib3gubGVmdCA+PSAoRlhfRkxPQVQpcEJpdG1hcC0+R2V0V2lkdGgoKSB8fCBiYm94LnRvcCA8PSAwIHx8DQotICAgICAgICAgICAgICAgIGJib3guYm90dG9tID49IChGWF9GTE9BVClwQml0bWFwLT5HZXRIZWlnaHQoKSkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ29vbl9CZXppZXIgQzEsIEMyLCBEMSwgRDI7DQotICAgICAgICBDMS5Gcm9tUG9pbnRzKGNvb3Jkc1swXS54LCBjb29yZHNbMF0ueSwgY29vcmRzWzExXS54LCBjb29yZHNbMTFdLnksIGNvb3Jkc1sxMF0ueCwgY29vcmRzWzEwXS55LA0KLSAgICAgICAgICAgICAgICAgICAgICBjb29yZHNbOV0ueCwgY29vcmRzWzldLnkpOw0KLSAgICAgICAgQzIuRnJvbVBvaW50cyhjb29yZHNbM10ueCwgY29vcmRzWzNdLnksIGNvb3Jkc1s0XS54LCBjb29yZHNbNF0ueSwgY29vcmRzWzVdLngsIGNvb3Jkc1s1XS55LA0KLSAgICAgICAgICAgICAgICAgICAgICBjb29yZHNbNl0ueCwgY29vcmRzWzZdLnkpOw0KLSAgICAgICAgRDEuRnJvbVBvaW50cyhjb29yZHNbMF0ueCwgY29vcmRzWzBdLnksIGNvb3Jkc1sxXS54LCBjb29yZHNbMV0ueSwgY29vcmRzWzJdLngsIGNvb3Jkc1syXS55LA0KLSAgICAgICAgICAgICAgICAgICAgICBjb29yZHNbM10ueCwgY29vcmRzWzNdLnkpOw0KLSAgICAgICAgRDIuRnJvbVBvaW50cyhjb29yZHNbOV0ueCwgY29vcmRzWzldLnksIGNvb3Jkc1s4XS54LCBjb29yZHNbOF0ueSwgY29vcmRzWzddLngsIGNvb3Jkc1s3XS55LA0KLSAgICAgICAgICAgICAgICAgICAgICBjb29yZHNbNl0ueCwgY29vcmRzWzZdLnkpOw0KLSAgICAgICAgcGF0Y2guRHJhdygxLCAxLCAwLCAwLCBDMSwgQzIsIEQxLCBEMik7DQotICAgIH0NCi19DQotdm9pZCBDUERGX1JlbmRlclN0YXR1czo6RHJhd1NoYWRpbmcoQ1BERl9TaGFkaW5nUGF0dGVybiogcFBhdHRlcm4sIENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfUkVDVCYgY2xpcF9yZWN0LCBpbnQgYWxwaGEsIEZYX0JPT0wgYkFscGhhTW9kZSkNCi17DQotICAgIGludCB3aWR0aCA9IGNsaXBfcmVjdC5XaWR0aCgpOw0KLSAgICBpbnQgaGVpZ2h0ID0gY2xpcF9yZWN0LkhlaWdodCgpOw0KLSAgICBDUERGX0Z1bmN0aW9uKiogcEZ1bmNzID0gcFBhdHRlcm4tPm1fcEZ1bmN0aW9uczsNCi0gICAgaW50IG5GdW5jcyA9IHBQYXR0ZXJuLT5tX25GdW5jczsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IHBQYXR0ZXJuLT5tX3BTaGFkaW5nT2JqLT5HZXREaWN0KCk7DQotICAgIENQREZfQ29sb3JTcGFjZSogcENvbG9yU3BhY2UgPSBwUGF0dGVybi0+bV9wQ1M7DQotICAgIGlmIChwQ29sb3JTcGFjZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhfQVJHQiBiYWNrZ3JvdW5kID0gMDsNCi0gICAgaWYgKCFwUGF0dGVybi0+bV9iU2hhZGluZ09iaiAmJiBwUGF0dGVybi0+bV9wU2hhZGluZ09iai0+R2V0RGljdCgpLT5LZXlFeGlzdChGWF9CU1RSQygiQmFja2dyb3VuZCIpKSkgew0KLSAgICAgICAgQ1BERl9BcnJheSogcEJhY2tDb2xvciA9IHBQYXR0ZXJuLT5tX3BTaGFkaW5nT2JqLT5HZXREaWN0KCktPkdldEFycmF5KEZYX0JTVFJDKCJCYWNrZ3JvdW5kIikpOw0KLSAgICAgICAgaWYgKHBCYWNrQ29sb3IgJiYgcEJhY2tDb2xvci0+R2V0Q291bnQoKSA+PSAoRlhfRFdPUkQpcENvbG9yU3BhY2UtPkNvdW50Q29tcG9uZW50cygpKSB7DQotICAgICAgICAgICAgQ0ZYX0ZpeGVkQnVmR3JvdzxGWF9GTE9BVCwgMTY+IGNvbXBzKHBDb2xvclNwYWNlLT5Db3VudENvbXBvbmVudHMoKSk7DQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwQ29sb3JTcGFjZS0+Q291bnRDb21wb25lbnRzKCk7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgY29tcHNbaV0gPSBwQmFja0NvbG9yLT5HZXROdW1iZXIoaSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIEZYX0ZMT0FUIFIsIEcsIEI7DQotICAgICAgICAgICAgcENvbG9yU3BhY2UtPkdldFJHQihjb21wcywgUiwgRywgQik7DQotICAgICAgICAgICAgYmFja2dyb3VuZCA9IEFyZ2JFbmNvZGUoMjU1LCAoRlhfSU5UMzIpKFIgKiAyNTUpLCAoRlhfSU5UMzIpKEcgKiAyNTUpLCAoRlhfSU5UMzIpKEIgKiAyNTUpKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAocERpY3QtPktleUV4aXN0KEZYX0JTVFJDKCJCQm94IikpKSB7DQotICAgICAgICBDRlhfRmxvYXRSZWN0IHJlY3QgPSBwRGljdC0+R2V0UmVjdChGWF9CU1RSQygiQkJveCIpKTsNCi0gICAgICAgIHJlY3QuVHJhbnNmb3JtKHBNYXRyaXgpOw0KLSAgICAgICAgY2xpcF9yZWN0LkludGVyc2VjdChyZWN0LkdldE91dHRlclJlY3QoKSk7DQotICAgIH0NCi0gICAgQ1BERl9EZXZpY2VCdWZmZXIgYnVmZmVyOw0KLSAgICBidWZmZXIuSW5pdGlhbGl6ZShtX3BDb250ZXh0LCBtX3BEZXZpY2UsICZjbGlwX3JlY3QsIG1fcEN1ck9iaiwgMTUwKTsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBGaW5hbE1hdHJpeCA9ICpwTWF0cml4Ow0KLSAgICBGaW5hbE1hdHJpeC5Db25jYXQoKmJ1ZmZlci5HZXRNYXRyaXgoKSk7DQotICAgIENGWF9ESUJpdG1hcCogcEJpdG1hcCA9IGJ1ZmZlci5HZXRCaXRtYXAoKTsNCi0gICAgaWYgKHBCaXRtYXAtPkdldEJ1ZmZlcigpID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBwQml0bWFwLT5DbGVhcihiYWNrZ3JvdW5kKTsNCi0gICAgaW50IGZpbGxfbW9kZSA9IG1fT3B0aW9ucy5tX0ZsYWdzOw0KLSAgICBzd2l0Y2ggKHBQYXR0ZXJuLT5tX1NoYWRpbmdUeXBlKSB7DQotICAgICAgICBjYXNlIDE6DQotICAgICAgICAgICAgX0RyYXdGdW5jU2hhZGluZyhwQml0bWFwLCAmRmluYWxNYXRyaXgsIHBEaWN0LCBwRnVuY3MsIG5GdW5jcywgcENvbG9yU3BhY2UsIGFscGhhKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgMjoNCi0gICAgICAgICAgICBfRHJhd0F4aWFsU2hhZGluZyhwQml0bWFwLCAmRmluYWxNYXRyaXgsIHBEaWN0LCBwRnVuY3MsIG5GdW5jcywgcENvbG9yU3BhY2UsIGFscGhhKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgMzoNCi0gICAgICAgICAgICBfRHJhd1JhZGlhbFNoYWRpbmcocEJpdG1hcCwgJkZpbmFsTWF0cml4LCBwRGljdCwgcEZ1bmNzLCBuRnVuY3MsIHBDb2xvclNwYWNlLCBhbHBoYSk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIDQ6IHsNCi0gICAgICAgICAgICAgICAgX0RyYXdGcmVlR291cmF1ZFNoYWRpbmcocEJpdG1hcCwgJkZpbmFsTWF0cml4LCAoQ1BERl9TdHJlYW0qKXBQYXR0ZXJuLT5tX3BTaGFkaW5nT2JqLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRnVuY3MsIG5GdW5jcywgcENvbG9yU3BhY2UsIGFscGhhKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIDU6IHsNCi0gICAgICAgICAgICAgICAgX0RyYXdMYXR0aWNlR291cmF1ZFNoYWRpbmcocEJpdG1hcCwgJkZpbmFsTWF0cml4LCAoQ1BERl9TdHJlYW0qKXBQYXR0ZXJuLT5tX3BTaGFkaW5nT2JqLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRnVuY3MsIG5GdW5jcywgcENvbG9yU3BhY2UsIGFscGhhKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIDY6DQotICAgICAgICBjYXNlIDc6IHsNCi0gICAgICAgICAgICAgICAgX0RyYXdDb29uUGF0Y2hNZXNoZXMocFBhdHRlcm4tPm1fU2hhZGluZ1R5cGUgLSA2LCBwQml0bWFwLCAmRmluYWxNYXRyaXgsIChDUERGX1N0cmVhbSopcFBhdHRlcm4tPm1fcFNoYWRpbmdPYmosDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBGdW5jcywgbkZ1bmNzLCBwQ29sb3JTcGFjZSwgZmlsbF9tb2RlLCBhbHBoYSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICB9DQotICAgIGlmIChiQWxwaGFNb2RlKSB7DQotICAgICAgICBwQml0bWFwLT5Mb2FkQ2hhbm5lbChGWERJQl9SZWQsIHBCaXRtYXAsIEZYRElCX0FscGhhKTsNCi0gICAgfQ0KLSAgICBpZiAobV9PcHRpb25zLm1fQ29sb3JNb2RlID09IFJFTkRFUl9DT0xPUl9HUkFZKSB7DQotICAgICAgICBwQml0bWFwLT5Db252ZXJ0Q29sb3JTY2FsZShtX09wdGlvbnMubV9Gb3JlQ29sb3IsIG1fT3B0aW9ucy5tX0JhY2tDb2xvcik7DQotICAgIH0NCi0gICAgYnVmZmVyLk91dHB1dFRvRGV2aWNlKCk7DQotfQ0KLXZvaWQgQ1BERl9SZW5kZXJTdGF0dXM6OkRyYXdTaGFkaW5nUGF0dGVybihDUERGX1NoYWRpbmdQYXR0ZXJuKiBwYXR0ZXJuLCBDUERGX1BhZ2VPYmplY3QqIHBQYWdlT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSwgRlhfQk9PTCBiU3Ryb2tlKQ0KLXsNCi0gICAgaWYgKCFwYXR0ZXJuLT5Mb2FkKCkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX3BEZXZpY2UtPlNhdmVTdGF0ZSgpOw0KLSAgICBpZiAocFBhZ2VPYmotPm1fVHlwZSA9PSBQREZQQUdFX1BBVEgpIHsNCi0gICAgICAgIGlmICghU2VsZWN0Q2xpcFBhdGgoKENQREZfUGF0aE9iamVjdCopcFBhZ2VPYmosIHBPYmoyRGV2aWNlLCBiU3Ryb2tlKSkgew0KLSAgICAgICAgICAgIG1fcERldmljZS0+UmVzdG9yZVN0YXRlKCk7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2UgaWYgKHBQYWdlT2JqLT5tX1R5cGUgPT0gUERGUEFHRV9JTUFHRSkgew0KLSAgICAgICAgRlhfUkVDVCByZWN0ID0gcFBhZ2VPYmotPkdldEJCb3gocE9iajJEZXZpY2UpOw0KLSAgICAgICAgbV9wRGV2aWNlLT5TZXRDbGlwX1JlY3QoJnJlY3QpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX1JFQ1QgcmVjdDsNCi0gICAgaWYgKEdldE9iamVjdENsaXBwZWRSZWN0KHBQYWdlT2JqLCBwT2JqMkRldmljZSwgRkFMU0UsIHJlY3QpKSB7DQotICAgICAgICBtX3BEZXZpY2UtPlJlc3RvcmVTdGF0ZSgpOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4ID0gcGF0dGVybi0+bV9QYXR0ZXJuMkZvcm07DQotICAgIG1hdHJpeC5Db25jYXQoKnBPYmoyRGV2aWNlKTsNCi0gICAgR2V0U2NhbGVkTWF0cml4KG1hdHJpeCk7DQotICAgIGludCBhbHBoYSA9IHBQYWdlT2JqLT5tX0dlbmVyYWxTdGF0ZS5HZXRBbHBoYShiU3Ryb2tlKTsNCi0gICAgRHJhd1NoYWRpbmcocGF0dGVybiwgJm1hdHJpeCwgcmVjdCwgYWxwaGEsIG1fT3B0aW9ucy5tX0NvbG9yTW9kZSA9PSBSRU5ERVJfQ09MT1JfQUxQSEEpOw0KLSAgICBtX3BEZXZpY2UtPlJlc3RvcmVTdGF0ZSgpOw0KLX0NCi1GWF9CT09MIENQREZfUmVuZGVyU3RhdHVzOjpQcm9jZXNzU2hhZGluZyhDUERGX1NoYWRpbmdPYmplY3QqIHBTaGFkaW5nT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSkNCi17DQotICAgIEZYX1JFQ1QgcmVjdCA9IHBTaGFkaW5nT2JqLT5HZXRCQm94KHBPYmoyRGV2aWNlKTsNCi0gICAgRlhfUkVDVCBjbGlwX2JveCA9IG1fcERldmljZS0+R2V0Q2xpcEJveCgpOw0KLSAgICByZWN0LkludGVyc2VjdChjbGlwX2JveCk7DQotICAgIGlmIChyZWN0LklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXggPSBwU2hhZGluZ09iai0+bV9NYXRyaXg7DQotICAgIG1hdHJpeC5Db25jYXQoKnBPYmoyRGV2aWNlKTsNCi0gICAgRHJhd1NoYWRpbmcocFNoYWRpbmdPYmotPm1fcFNoYWRpbmcsICZtYXRyaXgsIHJlY3QsIHBTaGFkaW5nT2JqLT5tX0dlbmVyYWxTdGF0ZS5HZXRBbHBoYShGQUxTRSksDQotICAgICAgICAgICAgICAgIG1fT3B0aW9ucy5tX0NvbG9yTW9kZSA9PSBSRU5ERVJfQ09MT1JfQUxQSEEpOw0KLSNpZmRlZiBfRlBERkFQSV9NSU5JXw0KLSAgICBpZiAobV9EaXRoZXJCaXRzKSB7DQotICAgICAgICBEaXRoZXJPYmplY3RBcmVhKHBTaGFkaW5nT2JqLCBwT2JqMkRldmljZSk7DQotICAgIH0NCi0jZW5kaWYNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXN0YXRpYyBDRlhfRElCaXRtYXAqIERyYXdQYXR0ZXJuQml0bWFwKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfUGFnZVJlbmRlckNhY2hlKiBwQ2FjaGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9UaWxpbmdQYXR0ZXJuKiBwUGF0dGVybiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZmxhZ3MpDQotew0KLSAgICBDRlhfRElCaXRtYXAqIHBCaXRtYXAgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOw0KLSAgICBpZiAoIXBCaXRtYXAtPkNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCBwUGF0dGVybi0+bV9iQ29sb3JlZCA/IEZYRElCX0FyZ2IgOiBGWERJQl84YnBwTWFzaykpIHsNCi0gICAgICAgIGRlbGV0ZSBwQml0bWFwOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ0ZYX0Z4Z2VEZXZpY2UgYml0bWFwX2RldmljZTsNCi0gICAgYml0bWFwX2RldmljZS5BdHRhY2gocEJpdG1hcCk7DQotICAgIHBCaXRtYXAtPkNsZWFyKDApOw0KLSAgICBDRlhfRmxvYXRSZWN0IGNlbGxfYmJveCA9IHBQYXR0ZXJuLT5tX0JCb3g7DQotICAgIHBQYXR0ZXJuLT5tX1BhdHRlcm4yRm9ybS5UcmFuc2Zvcm1SZWN0KGNlbGxfYmJveCk7DQotICAgIHBPYmplY3QyRGV2aWNlLT5UcmFuc2Zvcm1SZWN0KGNlbGxfYmJveCk7DQotICAgIENGWF9GbG9hdFJlY3QgYml0bWFwX3JlY3QoMC4wZiwgMC4wZiwgKEZYX0ZMT0FUKXdpZHRoLCAoRlhfRkxPQVQpaGVpZ2h0KTsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBtdEFkanVzdDsNCi0gICAgbXRBZGp1c3QuTWF0Y2hSZWN0KGJpdG1hcF9yZWN0LCBjZWxsX2Jib3gpOw0KLSAgICBDRlhfQWZmaW5lTWF0cml4IG10UGF0dGVybjJCaXRtYXAgPSAqcE9iamVjdDJEZXZpY2U7DQotICAgIG10UGF0dGVybjJCaXRtYXAuQ29uY2F0KG10QWRqdXN0KTsNCi0gICAgQ1BERl9SZW5kZXJPcHRpb25zIG9wdGlvbnM7DQotICAgIGlmICghcFBhdHRlcm4tPm1fYkNvbG9yZWQpIHsNCi0gICAgICAgIG9wdGlvbnMubV9Db2xvck1vZGUgPSBSRU5ERVJfQ09MT1JfQUxQSEE7DQotICAgIH0NCi0gICAgZmxhZ3MgfD0gUkVOREVSX0ZPUkNFX0hBTEZUT05FOw0KLSAgICBvcHRpb25zLm1fRmxhZ3MgPSBmbGFnczsNCi0gICAgQ1BERl9SZW5kZXJDb250ZXh0IGNvbnRleHQ7DQotICAgIGNvbnRleHQuQ3JlYXRlKHBEb2MsIHBDYWNoZSwgTlVMTCk7DQotICAgIGNvbnRleHQuRHJhd09iamVjdExpc3QoJmJpdG1hcF9kZXZpY2UsIHBQYXR0ZXJuLT5tX3BGb3JtLCAmbXRQYXR0ZXJuMkJpdG1hcCwgJm9wdGlvbnMpOw0KLSAgICByZXR1cm4gcEJpdG1hcDsNCi19DQotdm9pZCBDUERGX1JlbmRlclN0YXR1czo6RHJhd1RpbGluZ1BhdHRlcm4oQ1BERl9UaWxpbmdQYXR0ZXJuKiBwUGF0dGVybiwgQ1BERl9QYWdlT2JqZWN0KiBwUGFnZU9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UsIEZYX0JPT0wgYlN0cm9rZSkNCi17DQotICAgIGlmICghcFBhdHRlcm4tPkxvYWQoKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fcERldmljZS0+U2F2ZVN0YXRlKCk7DQotICAgIGlmIChwUGFnZU9iai0+bV9UeXBlID09IFBERlBBR0VfUEFUSCkgew0KLSAgICAgICAgaWYgKCFTZWxlY3RDbGlwUGF0aCgoQ1BERl9QYXRoT2JqZWN0KilwUGFnZU9iaiwgcE9iajJEZXZpY2UsIGJTdHJva2UpKSB7DQotICAgICAgICAgICAgbV9wRGV2aWNlLT5SZXN0b3JlU3RhdGUoKTsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZiAocFBhZ2VPYmotPm1fVHlwZSA9PSBQREZQQUdFX0lNQUdFKSB7DQotICAgICAgICBGWF9SRUNUIHJlY3QgPSBwUGFnZU9iai0+R2V0QkJveChwT2JqMkRldmljZSk7DQotICAgICAgICBtX3BEZXZpY2UtPlNldENsaXBfUmVjdCgmcmVjdCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhfUkVDVCBjbGlwX2JveCA9IG1fcERldmljZS0+R2V0Q2xpcEJveCgpOw0KLSAgICBpZiAoY2xpcF9ib3guSXNFbXB0eSgpKSB7DQotICAgICAgICBtX3BEZXZpY2UtPlJlc3RvcmVTdGF0ZSgpOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENGWF9NYXRyaXggZENUTSA9IG1fcERldmljZS0+R2V0Q1RNKCk7DQotICAgIEZYX0ZMT0FUIHNhID0gRlhTWVNfZmFicyhkQ1RNLmEpOw0KLSAgICBGWF9GTE9BVCBzZCA9IEZYU1lTX2ZhYnMoZENUTS5kKTsNCi0gICAgY2xpcF9ib3gucmlnaHQgPSBjbGlwX2JveC5sZWZ0ICsgKEZYX0lOVDMyKUZYU1lTX2NlaWwoY2xpcF9ib3guV2lkdGgoKSAqIHNhKTsNCi0gICAgY2xpcF9ib3guYm90dG9tID0gY2xpcF9ib3gudG9wICsgKEZYX0lOVDMyKUZYU1lTX2NlaWwoY2xpcF9ib3guSGVpZ2h0KCkgKiBzZCk7DQotICAgIENGWF9BZmZpbmVNYXRyaXggbXRQYXR0ZXJuMkRldmljZSA9IHBQYXR0ZXJuLT5tX1BhdHRlcm4yRm9ybTsNCi0gICAgbXRQYXR0ZXJuMkRldmljZS5Db25jYXQoKnBPYmoyRGV2aWNlKTsNCi0gICAgR2V0U2NhbGVkTWF0cml4KG10UGF0dGVybjJEZXZpY2UpOw0KLSAgICBGWF9CT09MIGJBbGlnbmVkID0gRkFMU0U7DQotICAgIGlmIChwUGF0dGVybi0+bV9CQm94LmxlZnQgPT0gMCAmJiBwUGF0dGVybi0+bV9CQm94LmJvdHRvbSA9PSAwICYmDQotICAgICAgICAgICAgcFBhdHRlcm4tPm1fQkJveC5yaWdodCA9PSBwUGF0dGVybi0+bV9YU3RlcCAmJiBwUGF0dGVybi0+bV9CQm94LnRvcCA9PSBwUGF0dGVybi0+bV9ZU3RlcCAmJg0KLSAgICAgICAgICAgIChtdFBhdHRlcm4yRGV2aWNlLklzU2NhbGVkKCkgfHwgbXRQYXR0ZXJuMkRldmljZS5JczkwUm90YXRlZCgpKSkgew0KLSAgICAgICAgYkFsaWduZWQgPSBUUlVFOw0KLSAgICB9DQotICAgIENGWF9GbG9hdFJlY3QgY2VsbF9iYm94ID0gcFBhdHRlcm4tPm1fQkJveDsNCi0gICAgbXRQYXR0ZXJuMkRldmljZS5UcmFuc2Zvcm1SZWN0KGNlbGxfYmJveCk7DQotICAgIGludCB3aWR0aCA9IChpbnQpRlhTWVNfY2VpbChjZWxsX2Jib3guV2lkdGgoKSk7DQotICAgIGludCBoZWlnaHQgPSAoaW50KUZYU1lTX2NlaWwoY2VsbF9iYm94LkhlaWdodCgpKTsNCi0gICAgaWYgKHdpZHRoID09IDApIHsNCi0gICAgICAgIHdpZHRoID0gMTsNCi0gICAgfQ0KLSAgICBpZiAoaGVpZ2h0ID09IDApIHsNCi0gICAgICAgIGhlaWdodCA9IDE7DQotICAgIH0NCi0gICAgaW50IG1pbl9jb2wsIG1heF9jb2wsIG1pbl9yb3csIG1heF9yb3c7DQotICAgIENGWF9BZmZpbmVNYXRyaXggbXREZXZpY2UyUGF0dGVybjsNCi0gICAgbXREZXZpY2UyUGF0dGVybi5TZXRSZXZlcnNlKG10UGF0dGVybjJEZXZpY2UpOw0KLSAgICBDRlhfRmxvYXRSZWN0IGNsaXBfYm94X3AoY2xpcF9ib3gpOw0KLSAgICBjbGlwX2JveF9wLlRyYW5zZm9ybSgmbXREZXZpY2UyUGF0dGVybik7DQotICAgIG1pbl9jb2wgPSAoaW50KUZYU1lTX2NlaWwoRlhTWVNfRGl2KGNsaXBfYm94X3AubGVmdCAtIHBQYXR0ZXJuLT5tX0JCb3gucmlnaHQsIHBQYXR0ZXJuLT5tX1hTdGVwKSk7DQotICAgIG1heF9jb2wgPSAoaW50KUZYU1lTX2Zsb29yKEZYU1lTX0RpdihjbGlwX2JveF9wLnJpZ2h0IC0gcFBhdHRlcm4tPm1fQkJveC5sZWZ0LCBwUGF0dGVybi0+bV9YU3RlcCkpOw0KLSAgICBtaW5fcm93ID0gKGludClGWFNZU19jZWlsKEZYU1lTX0RpdihjbGlwX2JveF9wLmJvdHRvbSAtIHBQYXR0ZXJuLT5tX0JCb3gudG9wLCBwUGF0dGVybi0+bV9ZU3RlcCkpOw0KLSAgICBtYXhfcm93ID0gKGludClGWFNZU19mbG9vcihGWFNZU19EaXYoY2xpcF9ib3hfcC50b3AgLSBwUGF0dGVybi0+bV9CQm94LmJvdHRvbSwgcFBhdHRlcm4tPm1fWVN0ZXApKTsNCi0gICAgaWYgKHdpZHRoID4gY2xpcF9ib3guV2lkdGgoKSB8fCBoZWlnaHQgPiBjbGlwX2JveC5IZWlnaHQoKSB8fCB3aWR0aCAqIGhlaWdodCA+IGNsaXBfYm94LldpZHRoKCkgKiBjbGlwX2JveC5IZWlnaHQoKSkgew0KLSAgICAgICAgQ1BERl9HcmFwaGljU3RhdGVzKiBwU3RhdGVzID0gTlVMTDsNCi0gICAgICAgIGlmICghcFBhdHRlcm4tPm1fYkNvbG9yZWQpIHsNCi0gICAgICAgICAgICBwU3RhdGVzID0gQ2xvbmVPYmpTdGF0ZXMocFBhZ2VPYmosIGJTdHJva2UpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybVJlc291cmNlID0gTlVMTDsNCi0gICAgICAgIGlmIChwUGF0dGVybi0+bV9wRm9ybS0+bV9wRm9ybURpY3QpIHsNCi0gICAgICAgICAgICBwRm9ybVJlc291cmNlID0gcFBhdHRlcm4tPm1fcEZvcm0tPm1fcEZvcm1EaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJSZXNvdXJjZXMiKSk7DQotICAgICAgICB9DQotICAgICAgICBmb3IgKGludCBjb2wgPSBtaW5fY29sOyBjb2wgPD0gbWF4X2NvbDsgY29sICsrKQ0KLSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IG1pbl9yb3c7IHJvdyA8PSBtYXhfcm93OyByb3cgKyspIHsNCi0gICAgICAgICAgICAgICAgRlhfRkxPQVQgb3JpZ194LCBvcmlnX3k7DQotICAgICAgICAgICAgICAgIG9yaWdfeCA9IGNvbCAqIHBQYXR0ZXJuLT5tX1hTdGVwOw0KLSAgICAgICAgICAgICAgICBvcmlnX3kgPSByb3cgKiBwUGF0dGVybi0+bV9ZU3RlcDsNCi0gICAgICAgICAgICAgICAgbXRQYXR0ZXJuMkRldmljZS5UcmFuc2Zvcm0ob3JpZ194LCBvcmlnX3kpOw0KLSAgICAgICAgICAgICAgICBDRlhfQWZmaW5lTWF0cml4IG1hdHJpeCA9ICpwT2JqMkRldmljZTsNCi0gICAgICAgICAgICAgICAgbWF0cml4LlRyYW5zbGF0ZShvcmlnX3ggLSBtdFBhdHRlcm4yRGV2aWNlLmUsIG9yaWdfeSAtIG10UGF0dGVybjJEZXZpY2UuZik7DQotICAgICAgICAgICAgICAgIG1fcERldmljZS0+U2F2ZVN0YXRlKCk7DQotICAgICAgICAgICAgICAgIENQREZfUmVuZGVyU3RhdHVzIHN0YXR1czsNCi0gICAgICAgICAgICAgICAgc3RhdHVzLkluaXRpYWxpemUobV9MZXZlbCArIDEsIG1fcENvbnRleHQsIG1fcERldmljZSwgTlVMTCwgTlVMTCwgdGhpcywgcFN0YXRlcywgJm1fT3B0aW9ucywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFBhdHRlcm4tPm1fcEZvcm0tPm1fVHJhbnNwYXJlbmN5LCBtX2JEcm9wT2JqZWN0cywgcEZvcm1SZXNvdXJjZSk7DQotICAgICAgICAgICAgICAgIHN0YXR1cy5SZW5kZXJPYmplY3RMaXN0KHBQYXR0ZXJuLT5tX3BGb3JtLCAmbWF0cml4KTsNCi0gICAgICAgICAgICAgICAgbV9wRGV2aWNlLT5SZXN0b3JlU3RhdGUoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICBtX3BEZXZpY2UtPlJlc3RvcmVTdGF0ZSgpOw0KLSAgICAgICAgaWYgKHBTdGF0ZXMpIHsNCi0gICAgICAgICAgICBkZWxldGUgcFN0YXRlczsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAoYkFsaWduZWQpIHsNCi0gICAgICAgIGludCBvcmlnX3ggPSBGWFNZU19yb3VuZChtdFBhdHRlcm4yRGV2aWNlLmUpOw0KLSAgICAgICAgaW50IG9yaWdfeSA9IEZYU1lTX3JvdW5kKG10UGF0dGVybjJEZXZpY2UuZik7DQotICAgICAgICBtaW5fY29sID0gKGNsaXBfYm94LmxlZnQgLSBvcmlnX3gpIC8gd2lkdGg7DQotICAgICAgICBpZiAoY2xpcF9ib3gubGVmdCA8IG9yaWdfeCkgew0KLSAgICAgICAgICAgIG1pbl9jb2wgLS07DQotICAgICAgICB9DQotICAgICAgICBtYXhfY29sID0gKGNsaXBfYm94LnJpZ2h0IC0gb3JpZ194KSAvIHdpZHRoOw0KLSAgICAgICAgaWYgKGNsaXBfYm94LnJpZ2h0IDw9IG9yaWdfeCkgew0KLSAgICAgICAgICAgIG1heF9jb2wgLS07DQotICAgICAgICB9DQotICAgICAgICBtaW5fcm93ID0gKGNsaXBfYm94LnRvcCAtIG9yaWdfeSkgLyBoZWlnaHQ7DQotICAgICAgICBpZiAoY2xpcF9ib3gudG9wIDwgb3JpZ195KSB7DQotICAgICAgICAgICAgbWluX3JvdyAtLTsNCi0gICAgICAgIH0NCi0gICAgICAgIG1heF9yb3cgPSAoY2xpcF9ib3guYm90dG9tIC0gb3JpZ195KSAvIGhlaWdodDsNCi0gICAgICAgIGlmIChjbGlwX2JveC5ib3R0b20gPD0gb3JpZ195KSB7DQotICAgICAgICAgICAgbWF4X3JvdyAtLTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBGWF9GTE9BVCBsZWZ0X29mZnNldCA9IGNlbGxfYmJveC5sZWZ0IC0gbXRQYXR0ZXJuMkRldmljZS5lOw0KLSAgICBGWF9GTE9BVCB0b3Bfb2Zmc2V0ID0gY2VsbF9iYm94LmJvdHRvbSAtIG10UGF0dGVybjJEZXZpY2UuZjsNCi0gICAgQ0ZYX0RJQml0bWFwKiBwUGF0dGVybkJpdG1hcCA9IE5VTEw7DQotICAgIGlmICh3aWR0aCAqIGhlaWdodCA8IDE2KSB7DQotICAgICAgICBDRlhfRElCaXRtYXAqIHBFbmxhcmdlZEJpdG1hcCA9IERyYXdQYXR0ZXJuQml0bWFwKG1fcENvbnRleHQtPm1fcERvY3VtZW50LCBtX3BDb250ZXh0LT5tX3BQYWdlQ2FjaGUsIHBQYXR0ZXJuLCBwT2JqMkRldmljZSwgOCwgOCwgbV9PcHRpb25zLm1fRmxhZ3MpOw0KLSAgICAgICAgcFBhdHRlcm5CaXRtYXAgPSBwRW5sYXJnZWRCaXRtYXAtPlN0cmV0Y2hUbyh3aWR0aCwgaGVpZ2h0KTsNCi0gICAgICAgIGRlbGV0ZSBwRW5sYXJnZWRCaXRtYXA7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBwUGF0dGVybkJpdG1hcCA9IERyYXdQYXR0ZXJuQml0bWFwKG1fcENvbnRleHQtPm1fcERvY3VtZW50LCBtX3BDb250ZXh0LT5tX3BQYWdlQ2FjaGUsIHBQYXR0ZXJuLCBwT2JqMkRldmljZSwgd2lkdGgsIGhlaWdodCwgbV9PcHRpb25zLm1fRmxhZ3MpOw0KLSAgICB9DQotICAgIGlmIChwUGF0dGVybkJpdG1hcCA9PSBOVUxMKSB7DQotICAgICAgICBtX3BEZXZpY2UtPlJlc3RvcmVTdGF0ZSgpOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChtX09wdGlvbnMubV9Db2xvck1vZGUgPT0gUkVOREVSX0NPTE9SX0dSQVkpIHsNCi0gICAgICAgIHBQYXR0ZXJuQml0bWFwLT5Db252ZXJ0Q29sb3JTY2FsZShtX09wdGlvbnMubV9Gb3JlQ29sb3IsIG1fT3B0aW9ucy5tX0JhY2tDb2xvcik7DQotICAgIH0NCi0gICAgRlhfQVJHQiBmaWxsX2FyZ2IgPSBHZXRGaWxsQXJnYihwUGFnZU9iaik7DQotICAgIGludCBjbGlwX3dpZHRoID0gY2xpcF9ib3gucmlnaHQgLSBjbGlwX2JveC5sZWZ0Ow0KLSAgICBpbnQgY2xpcF9oZWlnaHQgPSBjbGlwX2JveC5ib3R0b20gLSBjbGlwX2JveC50b3A7DQotICAgIENGWF9ESUJpdG1hcCBzY3JlZW47DQotICAgIGlmICghc2NyZWVuLkNyZWF0ZShjbGlwX3dpZHRoLCBjbGlwX2hlaWdodCwgRlhESUJfQXJnYikpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBzY3JlZW4uQ2xlYXIoMCk7DQotICAgIEZYX0RXT1JEKiBzcmNfYnVmID0gKEZYX0RXT1JEKilwUGF0dGVybkJpdG1hcC0+R2V0QnVmZmVyKCk7DQotICAgIGZvciAoaW50IGNvbCA9IG1pbl9jb2w7IGNvbCA8PSBtYXhfY29sOyBjb2wgKyspIHsNCi0gICAgICAgIGZvciAoaW50IHJvdyA9IG1pbl9yb3c7IHJvdyA8PSBtYXhfcm93OyByb3cgKyspIHsNCi0gICAgICAgICAgICBpbnQgc3RhcnRfeCwgc3RhcnRfeTsNCi0gICAgICAgICAgICBpZiAoYkFsaWduZWQpIHsNCi0gICAgICAgICAgICAgICAgc3RhcnRfeCA9IEZYU1lTX3JvdW5kKG10UGF0dGVybjJEZXZpY2UuZSkgKyBjb2wgKiB3aWR0aCAtIGNsaXBfYm94LmxlZnQ7DQotICAgICAgICAgICAgICAgIHN0YXJ0X3kgPSBGWFNZU19yb3VuZChtdFBhdHRlcm4yRGV2aWNlLmYpICsgcm93ICogaGVpZ2h0IC0gY2xpcF9ib3gudG9wOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIEZYX0ZMT0FUIG9yaWdfeCA9IGNvbCAqIHBQYXR0ZXJuLT5tX1hTdGVwOw0KLSAgICAgICAgICAgICAgICBGWF9GTE9BVCBvcmlnX3kgPSByb3cgKiBwUGF0dGVybi0+bV9ZU3RlcDsNCi0gICAgICAgICAgICAgICAgbXRQYXR0ZXJuMkRldmljZS5UcmFuc2Zvcm0ob3JpZ194LCBvcmlnX3kpOw0KLSAgICAgICAgICAgICAgICBzdGFydF94ID0gRlhTWVNfcm91bmQob3JpZ194ICsgbGVmdF9vZmZzZXQpIC0gY2xpcF9ib3gubGVmdDsNCi0gICAgICAgICAgICAgICAgc3RhcnRfeSA9IEZYU1lTX3JvdW5kKG9yaWdfeSArIHRvcF9vZmZzZXQpIC0gY2xpcF9ib3gudG9wOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAod2lkdGggPT0gMSAmJiBoZWlnaHQgPT0gMSkgew0KLSAgICAgICAgICAgICAgICBpZiAoc3RhcnRfeCA8IDAgfHwgc3RhcnRfeCA+PSBjbGlwX2JveC5XaWR0aCgpIHx8IHN0YXJ0X3kgPCAwIHx8IHN0YXJ0X3kgPj0gY2xpcF9ib3guSGVpZ2h0KCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIEZYX0RXT1JEKiBkZXN0X2J1ZiA9IChGWF9EV09SRCopKHNjcmVlbi5HZXRCdWZmZXIoKSArIHNjcmVlbi5HZXRQaXRjaCgpICogc3RhcnRfeSArIHN0YXJ0X3ggKiA0KTsNCi0gICAgICAgICAgICAgICAgaWYgKHBQYXR0ZXJuLT5tX2JDb2xvcmVkKSB7DQotICAgICAgICAgICAgICAgICAgICAqZGVzdF9idWYgPSAqc3JjX2J1ZjsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICpkZXN0X2J1ZiA9ICgqKEZYX0xQQllURSlzcmNfYnVmIDw8IDI0KSB8IChmaWxsX2FyZ2IgJiAweGZmZmZmZik7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBpZiAocFBhdHRlcm4tPm1fYkNvbG9yZWQpIHsNCi0gICAgICAgICAgICAgICAgICAgIHNjcmVlbi5Db21wb3NpdGVCaXRtYXAoc3RhcnRfeCwgc3RhcnRfeSwgd2lkdGgsIGhlaWdodCwgcFBhdHRlcm5CaXRtYXAsIDAsIDApOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgc2NyZWVuLkNvbXBvc2l0ZU1hc2soc3RhcnRfeCwgc3RhcnRfeSwgd2lkdGgsIGhlaWdodCwgcFBhdHRlcm5CaXRtYXAsIGZpbGxfYXJnYiwgMCwgMCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgQ29tcG9zaXRlRElCaXRtYXAoJnNjcmVlbiwgY2xpcF9ib3gubGVmdCwgY2xpcF9ib3gudG9wLCAwLCAyNTUsIEZYRElCX0JMRU5EX05PUk1BTCwgRkFMU0UpOw0KLSAgICBtX3BEZXZpY2UtPlJlc3RvcmVTdGF0ZSgpOw0KLSAgICBkZWxldGUgcFBhdHRlcm5CaXRtYXA7DQotfQ0KLXZvaWQgQ1BERl9SZW5kZXJTdGF0dXM6OkRyYXdQYXRoV2l0aFBhdHRlcm4oQ1BERl9QYXRoT2JqZWN0KiBwUGF0aE9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UsIENQREZfQ29sb3IqIHBDb2xvciwgRlhfQk9PTCBiU3Ryb2tlKQ0KLXsNCi0gICAgQ1BERl9QYXR0ZXJuKiBwYXR0ZXJuID0gcENvbG9yLT5HZXRQYXR0ZXJuKCk7DQotICAgIGlmIChwYXR0ZXJuID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZihwYXR0ZXJuLT5tX1BhdHRlcm5UeXBlID09IFBBVFRFUk5fVElMSU5HKSB7DQotICAgICAgICBEcmF3VGlsaW5nUGF0dGVybigoQ1BERl9UaWxpbmdQYXR0ZXJuKilwYXR0ZXJuLCBwUGF0aE9iaiwgcE9iajJEZXZpY2UsIGJTdHJva2UpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgRHJhd1NoYWRpbmdQYXR0ZXJuKChDUERGX1NoYWRpbmdQYXR0ZXJuKilwYXR0ZXJuLCBwUGF0aE9iaiwgcE9iajJEZXZpY2UsIGJTdHJva2UpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9SZW5kZXJTdGF0dXM6OlByb2Nlc3NQYXRoUGF0dGVybihDUERGX1BhdGhPYmplY3QqIHBQYXRoT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSwgaW50JiBmaWxsdHlwZSwgRlhfQk9PTCYgYlN0cm9rZSkNCi17DQotICAgIEZYX0JPT0wgYlBhdHRlcm4gPSBGQUxTRTsNCi0gICAgaWYoZmlsbHR5cGUpIHsNCi0gICAgICAgIENQREZfQ29sb3ImIEZpbGxDb2xvciA9ICpwUGF0aE9iai0+bV9Db2xvclN0YXRlLkdldEZpbGxDb2xvcigpOw0KLSAgICAgICAgaWYoRmlsbENvbG9yLm1fcENTICYmIEZpbGxDb2xvci5tX3BDUy0+R2V0RmFtaWx5KCkgPT0gUERGQ1NfUEFUVEVSTikgew0KLSAgICAgICAgICAgIERyYXdQYXRoV2l0aFBhdHRlcm4ocFBhdGhPYmosIHBPYmoyRGV2aWNlLCAmRmlsbENvbG9yLCBGQUxTRSk7DQotICAgICAgICAgICAgZmlsbHR5cGUgPSAwOw0KLSAgICAgICAgICAgIGJQYXR0ZXJuID0gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZihiU3Ryb2tlKSB7DQotICAgICAgICBDUERGX0NvbG9yJiBTdHJva2VDb2xvciA9ICpwUGF0aE9iai0+bV9Db2xvclN0YXRlLkdldFN0cm9rZUNvbG9yKCk7DQotICAgICAgICBpZihTdHJva2VDb2xvci5tX3BDUyAmJiBTdHJva2VDb2xvci5tX3BDUy0+R2V0RmFtaWx5KCkgPT0gUERGQ1NfUEFUVEVSTikgew0KLSAgICAgICAgICAgIERyYXdQYXRoV2l0aFBhdHRlcm4ocFBhdGhPYmosIHBPYmoyRGV2aWNlLCAmU3Ryb2tlQ29sb3IsIFRSVUUpOw0KLSAgICAgICAgICAgIGJTdHJva2UgPSBGQUxTRTsNCi0gICAgICAgICAgICBiUGF0dGVybiA9IFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi0jaWZkZWYgX0ZQREZBUElfTUlOSV8NCi0gICAgaWYgKGJQYXR0ZXJuICYmIG1fRGl0aGVyQml0cykgew0KLSAgICAgICAgRGl0aGVyT2JqZWN0QXJlYShwUGF0aE9iaiwgcE9iajJEZXZpY2UpOw0KLSAgICB9DQotI2VuZGlmDQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9yZW5kZXIuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlb2JqLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiCisjaW5jbHVkZSAiLi4vZnBkZl9wYWdlL3BhZ2VpbnQuaCIKKyNpbmNsdWRlICJyZW5kZXJfaW50LmgiCisjZGVmaW5lIFNIQURJTkdfU1RFUFMgMjU2CitzdGF0aWMgdm9pZCBfRHJhd0F4aWFsU2hhZGluZyhDRlhfRElCaXRtYXAqIHBCaXRtYXAsIENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyQml0bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCwgQ1BERl9GdW5jdGlvbioqIHBGdW5jcywgaW50IG5GdW5jcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfQ29sb3JTcGFjZSogcENTLCBpbnQgYWxwaGEpCit7CisgICAgQVNTRVJUKHBCaXRtYXAtPkdldEZvcm1hdCgpID09IEZYRElCX0FyZ2IpOworICAgIENQREZfQXJyYXkqIHBDb29yZHMgPSBwRGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIkNvb3JkcyIpKTsKKyAgICBpZiAocENvb3JkcyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfRkxPQVQgc3RhcnRfeCA9IHBDb29yZHMtPkdldE51bWJlcigwKTsKKyAgICBGWF9GTE9BVCBzdGFydF95ID0gcENvb3Jkcy0+R2V0TnVtYmVyKDEpOworICAgIEZYX0ZMT0FUIGVuZF94ID0gcENvb3Jkcy0+R2V0TnVtYmVyKDIpOworICAgIEZYX0ZMT0FUIGVuZF95ID0gcENvb3Jkcy0+R2V0TnVtYmVyKDMpOworICAgIEZYX0ZMT0FUIHRfbWluID0gMCwgdF9tYXggPSAxLjBmOworICAgIENQREZfQXJyYXkqIHBBcnJheSA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiRG9tYWluIikpOworICAgIGlmIChwQXJyYXkpIHsKKyAgICAgICAgdF9taW4gPSBwQXJyYXktPkdldE51bWJlcigwKTsKKyAgICAgICAgdF9tYXggPSBwQXJyYXktPkdldE51bWJlcigxKTsKKyAgICB9CisgICAgRlhfQk9PTCBiU3RhcnRFeHRlbmQgPSBGQUxTRSwgYkVuZEV4dGVuZCA9IEZBTFNFOworICAgIHBBcnJheSA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiRXh0ZW5kIikpOworICAgIGlmIChwQXJyYXkpIHsKKyAgICAgICAgYlN0YXJ0RXh0ZW5kID0gcEFycmF5LT5HZXRJbnRlZ2VyKDApOworICAgICAgICBiRW5kRXh0ZW5kID0gcEFycmF5LT5HZXRJbnRlZ2VyKDEpOworICAgIH0KKyAgICBpbnQgd2lkdGggPSBwQml0bWFwLT5HZXRXaWR0aCgpOworICAgIGludCBoZWlnaHQgPSBwQml0bWFwLT5HZXRIZWlnaHQoKTsKKyAgICBGWF9GTE9BVCB4X3NwYW4gPSBlbmRfeCAtIHN0YXJ0X3g7CisgICAgRlhfRkxPQVQgeV9zcGFuID0gZW5kX3kgLSBzdGFydF95OworICAgIEZYX0ZMT0FUIGF4aXNfbGVuX3NxdWFyZSA9IEZYU1lTX011bCh4X3NwYW4sIHhfc3BhbikgKyBGWFNZU19NdWwoeV9zcGFuLCB5X3NwYW4pOworICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4OworICAgIG1hdHJpeC5TZXRSZXZlcnNlKCpwT2JqZWN0MkJpdG1hcCk7CisgICAgaW50IHRvdGFsX3Jlc3VsdHMgPSAwOworICAgIGZvciAoaW50IGogPSAwOyBqIDwgbkZ1bmNzOyBqICsrKSB7CisgICAgICAgIGlmIChwRnVuY3Nbal0pIHsKKyAgICAgICAgICAgIHRvdGFsX3Jlc3VsdHMgKz0gcEZ1bmNzW2pdLT5Db3VudE91dHB1dHMoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocENTLT5Db3VudENvbXBvbmVudHMoKSA+IHRvdGFsX3Jlc3VsdHMpIHsKKyAgICAgICAgdG90YWxfcmVzdWx0cyA9IHBDUy0+Q291bnRDb21wb25lbnRzKCk7CisgICAgfQorICAgIENGWF9GaXhlZEJ1Zkdyb3c8RlhfRkxPQVQsIDE2PiByZXN1bHRfYXJyYXkodG90YWxfcmVzdWx0cyk7CisgICAgRlhfRkxPQVQqIHBSZXN1bHRzID0gcmVzdWx0X2FycmF5OworICAgIEZYU1lTX21lbXNldDMyKHBSZXN1bHRzLCAwLCB0b3RhbF9yZXN1bHRzICogc2l6ZW9mKEZYX0ZMT0FUKSk7CisgICAgRlhfRFdPUkQgcmdiX2FycmF5W1NIQURJTkdfU1RFUFNdOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU0hBRElOR19TVEVQUzsgaSArKykgeworICAgICAgICBGWF9GTE9BVCBpbnB1dCA9ICh0X21heCAtIHRfbWluKSAqIGkgLyBTSEFESU5HX1NURVBTICsgdF9taW47CisgICAgICAgIGludCBvZmZzZXQgPSAwOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG5GdW5jczsgaiArKykgeworICAgICAgICAgICAgaWYgKHBGdW5jc1tqXSkgeworICAgICAgICAgICAgICAgIGludCBucmVzdWx0cyA9IDA7CisgICAgICAgICAgICAgICAgaWYgKHBGdW5jc1tqXS0+Q2FsbCgmaW5wdXQsIDEsIHBSZXN1bHRzICsgb2Zmc2V0LCBucmVzdWx0cykpIHsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IG5yZXN1bHRzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBGWF9GTE9BVCBSLCBHLCBCOworICAgICAgICBwQ1MtPkdldFJHQihwUmVzdWx0cywgUiwgRywgQik7CisgICAgICAgIHJnYl9hcnJheVtpXSA9IEZYQVJHQl9UT0RJQihGWEFSR0JfTUFLRShhbHBoYSwgRlhTWVNfcm91bmQoUiAqIDI1NSksIEZYU1lTX3JvdW5kKEcgKiAyNTUpLCBGWFNZU19yb3VuZChCICogMjU1KSkpOworICAgIH0KKyAgICBpbnQgcGl0Y2ggPSBwQml0bWFwLT5HZXRQaXRjaCgpOworICAgIGludCBCcHAgPSBwQml0bWFwLT5HZXRCUFAoKSAvIDg7CisgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgRlhfRFdPUkQqIGRpYl9idWYgPSAoRlhfRFdPUkQqKShwQml0bWFwLT5HZXRCdWZmZXIoKSArIHJvdyAqIHBpdGNoKTsKKyAgICAgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgd2lkdGg7IGNvbHVtbiArKykgeworICAgICAgICAgICAgRlhfRkxPQVQgeCA9IChGWF9GTE9BVCljb2x1bW4sIHkgPSAoRlhfRkxPQVQpcm93OworICAgICAgICAgICAgbWF0cml4LlRyYW5zZm9ybSh4LCB5KTsKKyAgICAgICAgICAgIEZYX0ZMT0FUIHNjYWxlID0gRlhTWVNfRGl2KEZYU1lTX011bCh4IC0gc3RhcnRfeCwgeF9zcGFuKSArIEZYU1lTX011bCh5IC0gc3RhcnRfeSwgeV9zcGFuKSwgYXhpc19sZW5fc3F1YXJlKTsKKyAgICAgICAgICAgIGludCBpbmRleCA9IChGWF9JTlQzMikoc2NhbGUgKiAoU0hBRElOR19TVEVQUyAtIDEpKTsKKyAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoIWJTdGFydEV4dGVuZCkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA+PSBTSEFESU5HX1NURVBTKSB7CisgICAgICAgICAgICAgICAgaWYgKCFiRW5kRXh0ZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbmRleCA9IFNIQURJTkdfU1RFUFMgLSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGliX2J1Zltjb2x1bW5dID0gcmdiX2FycmF5W2luZGV4XTsKKyAgICAgICAgfQorICAgIH0KK30KK3N0YXRpYyB2b2lkIF9EcmF3UmFkaWFsU2hhZGluZyhDRlhfRElCaXRtYXAqIHBCaXRtYXAsIENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyQml0bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcERpY3QsIENQREZfRnVuY3Rpb24qKiBwRnVuY3MsIGludCBuRnVuY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9Db2xvclNwYWNlKiBwQ1MsIGludCBhbHBoYSkKK3sKKyAgICBBU1NFUlQocEJpdG1hcC0+R2V0Rm9ybWF0KCkgPT0gRlhESUJfQXJnYik7CisgICAgQ1BERl9BcnJheSogcENvb3JkcyA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiQ29vcmRzIikpOworICAgIGlmIChwQ29vcmRzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGWF9GTE9BVCBzdGFydF94ID0gcENvb3Jkcy0+R2V0TnVtYmVyKDApOworICAgIEZYX0ZMT0FUIHN0YXJ0X3kgPSBwQ29vcmRzLT5HZXROdW1iZXIoMSk7CisgICAgRlhfRkxPQVQgc3RhcnRfciA9IHBDb29yZHMtPkdldE51bWJlcigyKTsKKyAgICBGWF9GTE9BVCBlbmRfeCA9IHBDb29yZHMtPkdldE51bWJlcigzKTsKKyAgICBGWF9GTE9BVCBlbmRfeSA9IHBDb29yZHMtPkdldE51bWJlcig0KTsKKyAgICBGWF9GTE9BVCBlbmRfciA9IHBDb29yZHMtPkdldE51bWJlcig1KTsKKyAgICBDRlhfQWZmaW5lTWF0cml4IG1hdHJpeDsKKyAgICBtYXRyaXguU2V0UmV2ZXJzZSgqcE9iamVjdDJCaXRtYXApOworICAgIEZYX0ZMT0FUIHRfbWluID0gMCwgdF9tYXggPSAxLjBmOworICAgIENQREZfQXJyYXkqIHBBcnJheSA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiRG9tYWluIikpOworICAgIGlmIChwQXJyYXkpIHsKKyAgICAgICAgdF9taW4gPSBwQXJyYXktPkdldE51bWJlcigwKTsKKyAgICAgICAgdF9tYXggPSBwQXJyYXktPkdldE51bWJlcigxKTsKKyAgICB9CisgICAgRlhfQk9PTCBiU3RhcnRFeHRlbmQgPSBGQUxTRSwgYkVuZEV4dGVuZCA9IEZBTFNFOworICAgIHBBcnJheSA9IHBEaWN0LT5HZXRBcnJheShGWF9CU1RSQygiRXh0ZW5kIikpOworICAgIGlmIChwQXJyYXkpIHsKKyAgICAgICAgYlN0YXJ0RXh0ZW5kID0gcEFycmF5LT5HZXRJbnRlZ2VyKDApOworICAgICAgICBiRW5kRXh0ZW5kID0gcEFycmF5LT5HZXRJbnRlZ2VyKDEpOworICAgIH0KKyAgICBpbnQgdG90YWxfcmVzdWx0cyA9IDA7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuRnVuY3M7IGogKyspIHsKKyAgICAgICAgaWYgKHBGdW5jc1tqXSkgeworICAgICAgICAgICAgdG90YWxfcmVzdWx0cyArPSBwRnVuY3Nbal0tPkNvdW50T3V0cHV0cygpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChwQ1MtPkNvdW50Q29tcG9uZW50cygpID4gdG90YWxfcmVzdWx0cykgeworICAgICAgICB0b3RhbF9yZXN1bHRzID0gcENTLT5Db3VudENvbXBvbmVudHMoKTsKKyAgICB9CisgICAgQ0ZYX0ZpeGVkQnVmR3JvdzxGWF9GTE9BVCwgMTY+IHJlc3VsdF9hcnJheSh0b3RhbF9yZXN1bHRzKTsKKyAgICBGWF9GTE9BVCogcFJlc3VsdHMgPSByZXN1bHRfYXJyYXk7CisgICAgRlhTWVNfbWVtc2V0MzIocFJlc3VsdHMsIDAsIHRvdGFsX3Jlc3VsdHMgKiBzaXplb2YoRlhfRkxPQVQpKTsKKyAgICBGWF9EV09SRCByZ2JfYXJyYXlbU0hBRElOR19TVEVQU107CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTSEFESU5HX1NURVBTOyBpICsrKSB7CisgICAgICAgIEZYX0ZMT0FUIGlucHV0ID0gKHRfbWF4IC0gdF9taW4pICogaSAvIFNIQURJTkdfU1RFUFMgKyB0X21pbjsKKyAgICAgICAgaW50IG9mZnNldCA9IDA7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbkZ1bmNzOyBqICsrKSB7CisgICAgICAgICAgICBpZiAocEZ1bmNzW2pdKSB7CisgICAgICAgICAgICAgICAgaW50IG5yZXN1bHRzOworICAgICAgICAgICAgICAgIGlmIChwRnVuY3Nbal0tPkNhbGwoJmlucHV0LCAxLCBwUmVzdWx0cyArIG9mZnNldCwgbnJlc3VsdHMpKSB7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBucmVzdWx0czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgRlhfRkxPQVQgUiwgRywgQjsKKyAgICAgICAgcENTLT5HZXRSR0IocFJlc3VsdHMsIFIsIEcsIEIpOworICAgICAgICByZ2JfYXJyYXlbaV0gPSBGWEFSR0JfVE9ESUIoRlhBUkdCX01BS0UoYWxwaGEsIEZYU1lTX3JvdW5kKFIgKiAyNTUpLCBGWFNZU19yb3VuZChHICogMjU1KSwgRlhTWVNfcm91bmQoQiAqIDI1NSkpKTsKKyAgICB9CisgICAgRlhfRkxPQVQgYSA9IEZYU1lTX011bChzdGFydF94IC0gZW5kX3gsIHN0YXJ0X3ggLSBlbmRfeCkgKworICAgICAgICAgICAgICAgICBGWFNZU19NdWwoc3RhcnRfeSAtIGVuZF95LCBzdGFydF95IC0gZW5kX3kpIC0gRlhTWVNfTXVsKHN0YXJ0X3IgLSBlbmRfciwgc3RhcnRfciAtIGVuZF9yKTsKKyAgICBpbnQgd2lkdGggPSBwQml0bWFwLT5HZXRXaWR0aCgpOworICAgIGludCBoZWlnaHQgPSBwQml0bWFwLT5HZXRIZWlnaHQoKTsKKyAgICBpbnQgcGl0Y2ggPSBwQml0bWFwLT5HZXRQaXRjaCgpOworICAgIGludCBCcHAgPSBwQml0bWFwLT5HZXRCUFAoKSAvIDg7CisgICAgRlhfQk9PTCBiRGVjcmVhc2luZyA9IEZBTFNFOworICAgIGlmIChzdGFydF9yID4gZW5kX3IpIHsKKyAgICAgICAgaW50IGxlbmd0aCA9IChpbnQpRlhTWVNfc3FydCgoRlhTWVNfTXVsKHN0YXJ0X3ggLSBlbmRfeCwgc3RhcnRfeCAtIGVuZF94KSArIEZYU1lTX011bChzdGFydF95IC0gZW5kX3ksIHN0YXJ0X3kgLSBlbmRfeSkpKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IHN0YXJ0X3IgLSBlbmRfcikgeworICAgICAgICAgICAgYkRlY3JlYXNpbmcgPSBUUlVFOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7CisgICAgICAgIEZYX0RXT1JEKiBkaWJfYnVmID0gKEZYX0RXT1JEKikocEJpdG1hcC0+R2V0QnVmZmVyKCkgKyByb3cgKiBwaXRjaCk7CisgICAgICAgIGZvciAoaW50IGNvbHVtbiA9IDA7IGNvbHVtbiA8IHdpZHRoOyBjb2x1bW4gKyspIHsKKyAgICAgICAgICAgIEZYX0ZMT0FUIHggPSAoRlhfRkxPQVQpY29sdW1uLCB5ID0gKEZYX0ZMT0FUKXJvdzsKKyAgICAgICAgICAgIG1hdHJpeC5UcmFuc2Zvcm0oeCwgeSk7CisgICAgICAgICAgICBGWF9GTE9BVCBiID0gLTIgKiAoRlhTWVNfTXVsKHggLSBzdGFydF94LCBlbmRfeCAtIHN0YXJ0X3gpICsgRlhTWVNfTXVsKHkgLSBzdGFydF95LCBlbmRfeSAtIHN0YXJ0X3kpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWFNZU19NdWwoc3RhcnRfciwgZW5kX3IgLSBzdGFydF9yKSk7CisgICAgICAgICAgICBGWF9GTE9BVCBjID0gRlhTWVNfTXVsKHggLSBzdGFydF94LCB4IC0gc3RhcnRfeCkgKyBGWFNZU19NdWwoeSAtIHN0YXJ0X3ksIHkgLSBzdGFydF95KSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgRlhTWVNfTXVsKHN0YXJ0X3IsIHN0YXJ0X3IpOworICAgICAgICAgICAgRlhfRkxPQVQgczsKKyAgICAgICAgICAgIGlmIChhID09IDApIHsKKyAgICAgICAgICAgICAgICBzID0gRlhTWVNfRGl2KC1jLCBiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgRlhfRkxPQVQgYjJfNGFjID0gRlhTWVNfTXVsKGIsIGIpIC0gNCAqIEZYU1lTX011bChhLCBjKTsKKyAgICAgICAgICAgICAgICBpZiAoYjJfNGFjIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRlhfRkxPQVQgcm9vdCA9IEZYU1lTX3NxcnQoYjJfNGFjKTsKKyAgICAgICAgICAgICAgICBGWF9GTE9BVCBzMSwgczI7CisgICAgICAgICAgICAgICAgaWYgKGEgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHMxID0gRlhTWVNfRGl2KC1iIC0gcm9vdCwgMiAqIGEpOworICAgICAgICAgICAgICAgICAgICBzMiA9IEZYU1lTX0RpdigtYiArIHJvb3QsIDIgKiBhKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzMiA9IEZYU1lTX0RpdigtYiAtIHJvb3QsIDIgKiBhKTsKKyAgICAgICAgICAgICAgICAgICAgczEgPSBGWFNZU19EaXYoLWIgKyByb290LCAyICogYSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChiRGVjcmVhc2luZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoczEgPj0gMCB8fCBiU3RhcnRFeHRlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBzMTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBzMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzMiA8PSAxLjBmIHx8IGJFbmRFeHRlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBzMjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBzMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKHN0YXJ0X3IgKyBzICogKGVuZF9yIC0gc3RhcnRfcikpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgaW5kZXggPSAoRlhfSU5UMzIpKHMgKiAoU0hBRElOR19TVEVQUyAtIDEpKTsKKyAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoIWJTdGFydEV4dGVuZCkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5kZXggPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGluZGV4ID49IFNIQURJTkdfU1RFUFMpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWJFbmRFeHRlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGluZGV4ID0gU0hBRElOR19TVEVQUyAtIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkaWJfYnVmW2NvbHVtbl0gPSByZ2JfYXJyYXlbaW5kZXhdOworICAgICAgICB9CisgICAgfQorfQorc3RhdGljIHZvaWQgX0RyYXdGdW5jU2hhZGluZyhDRlhfRElCaXRtYXAqIHBCaXRtYXAsIENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyQml0bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0LCBDUERGX0Z1bmN0aW9uKiogcEZ1bmNzLCBpbnQgbkZ1bmNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0NvbG9yU3BhY2UqIHBDUywgaW50IGFscGhhKQoreworICAgIEFTU0VSVChwQml0bWFwLT5HZXRGb3JtYXQoKSA9PSBGWERJQl9BcmdiKTsKKyAgICBDUERGX0FycmF5KiBwRG9tYWluID0gcERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJEb21haW4iKSk7CisgICAgRlhfRkxPQVQgeG1pbiA9IDAsIHltaW4gPSAwLCB4bWF4ID0gMS4wZiwgeW1heCA9IDEuMGY7CisgICAgaWYgKHBEb21haW4pIHsKKyAgICAgICAgeG1pbiA9IHBEb21haW4tPkdldE51bWJlcigwKTsKKyAgICAgICAgeG1heCA9IHBEb21haW4tPkdldE51bWJlcigxKTsKKyAgICAgICAgeW1pbiA9IHBEb21haW4tPkdldE51bWJlcigyKTsKKyAgICAgICAgeW1heCA9IHBEb21haW4tPkdldE51bWJlcigzKTsKKyAgICB9CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBtdERvbWFpbjJUYXJnZXQgPSBwRGljdC0+R2V0TWF0cml4KEZYX0JTVFJDKCJNYXRyaXgiKSk7CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXgsIHJldmVyc2VfbWF0cml4OworICAgIG1hdHJpeC5TZXRSZXZlcnNlKCpwT2JqZWN0MkJpdG1hcCk7CisgICAgcmV2ZXJzZV9tYXRyaXguU2V0UmV2ZXJzZShtdERvbWFpbjJUYXJnZXQpOworICAgIG1hdHJpeC5Db25jYXQocmV2ZXJzZV9tYXRyaXgpOworICAgIGludCB3aWR0aCA9IHBCaXRtYXAtPkdldFdpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IHBCaXRtYXAtPkdldEhlaWdodCgpOworICAgIGludCBwaXRjaCA9IHBCaXRtYXAtPkdldFBpdGNoKCk7CisgICAgaW50IEJwcCA9IHBCaXRtYXAtPkdldEJQUCgpIC8gODsKKyAgICBpbnQgdG90YWxfcmVzdWx0cyA9IDA7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuRnVuY3M7IGogKyspIHsKKyAgICAgICAgaWYgKHBGdW5jc1tqXSkgeworICAgICAgICAgICAgdG90YWxfcmVzdWx0cyArPSBwRnVuY3Nbal0tPkNvdW50T3V0cHV0cygpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChwQ1MtPkNvdW50Q29tcG9uZW50cygpID4gdG90YWxfcmVzdWx0cykgeworICAgICAgICB0b3RhbF9yZXN1bHRzID0gcENTLT5Db3VudENvbXBvbmVudHMoKTsKKyAgICB9CisgICAgQ0ZYX0ZpeGVkQnVmR3JvdzxGWF9GTE9BVCwgMTY+IHJlc3VsdF9hcnJheSh0b3RhbF9yZXN1bHRzKTsKKyAgICBGWF9GTE9BVCogcFJlc3VsdHMgPSByZXN1bHRfYXJyYXk7CisgICAgRlhTWVNfbWVtc2V0MzIocFJlc3VsdHMsIDAsIHRvdGFsX3Jlc3VsdHMgKiBzaXplb2YoRlhfRkxPQVQpKTsKKyAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgeworICAgICAgICBGWF9EV09SRCogZGliX2J1ZiA9IChGWF9EV09SRCopKHBCaXRtYXAtPkdldEJ1ZmZlcigpICsgcm93ICogcGl0Y2gpOworICAgICAgICBmb3IgKGludCBjb2x1bW4gPSAwOyBjb2x1bW4gPCB3aWR0aDsgY29sdW1uICsrKSB7CisgICAgICAgICAgICBGWF9GTE9BVCB4ID0gKEZYX0ZMT0FUKWNvbHVtbiwgeSA9IChGWF9GTE9BVClyb3c7CisgICAgICAgICAgICBtYXRyaXguVHJhbnNmb3JtKHgsIHkpOworICAgICAgICAgICAgaWYgKHggPCB4bWluIHx8IHggPiB4bWF4IHx8IHkgPCB5bWluIHx8IHkgPiB5bWF4KSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9GTE9BVCBpbnB1dFsyXTsKKyAgICAgICAgICAgIGludCBvZmZzZXQgPSAwOworICAgICAgICAgICAgaW5wdXRbMF0gPSB4OworICAgICAgICAgICAgaW5wdXRbMV0gPSB5OworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuRnVuY3M7IGogKyspIHsKKyAgICAgICAgICAgICAgICBpZiAocEZ1bmNzW2pdKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBucmVzdWx0czsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBGdW5jc1tqXS0+Q2FsbChpbnB1dCwgMiwgcFJlc3VsdHMgKyBvZmZzZXQsIG5yZXN1bHRzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IG5yZXN1bHRzOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfRkxPQVQgUiwgRywgQjsKKyAgICAgICAgICAgIHBDUy0+R2V0UkdCKHBSZXN1bHRzLCBSLCBHLCBCKTsKKyAgICAgICAgICAgIGRpYl9idWZbY29sdW1uXSA9IEZYQVJHQl9UT0RJQihGWEFSR0JfTUFLRShhbHBoYSwgKEZYX0lOVDMyKShSICogMjU1KSwgKEZYX0lOVDMyKShHICogMjU1KSwgKEZYX0lOVDMyKShCICogMjU1KSkpOworICAgICAgICB9CisgICAgfQorfQorRlhfQk9PTCBfR2V0U2NhbmxpbmVJbnRlcnNlY3QoaW50IHksIEZYX0ZMT0FUIHgxLCBGWF9GTE9BVCB5MSwgRlhfRkxPQVQgeDIsIEZYX0ZMT0FUIHkyLCBGWF9GTE9BVCYgeCkKK3sKKyAgICBpZiAoeTEgPT0geTIpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoeTEgPCB5MikgeworICAgICAgICBpZiAoeSA8IHkxIHx8IHkgPiB5MikgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHkgPCB5MiB8fCB5ID4geTEpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICB4ID0geDEgKyBGWFNZU19NdWxEaXYoeDIgLSB4MSwgeSAtIHkxLCB5MiAtIHkxKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK3N0YXRpYyB2b2lkIF9EcmF3R291cmF1ZChDRlhfRElCaXRtYXAqIHBCaXRtYXAsIGludCBhbHBoYSwgQ1BERl9NZXNoVmVydGV4IHRyaWFuZ2xlWzNdKQoreworICAgIEZYX0ZMT0FUIG1pbl95ID0gdHJpYW5nbGVbMF0ueSwgbWF4X3kgPSB0cmlhbmdsZVswXS55OworICAgIGZvciAoaW50IGkgPSAxOyBpIDwgMzsgaSArKykgeworICAgICAgICBpZiAobWluX3kgPiB0cmlhbmdsZVtpXS55KSB7CisgICAgICAgICAgICBtaW5feSA9IHRyaWFuZ2xlW2ldLnk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1heF95IDwgdHJpYW5nbGVbaV0ueSkgeworICAgICAgICAgICAgbWF4X3kgPSB0cmlhbmdsZVtpXS55OworICAgICAgICB9CisgICAgfQorICAgIGlmIChtaW5feSA9PSBtYXhfeSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludCBtaW5feWkgPSAoaW50KUZYU1lTX2Zsb29yKG1pbl95KSwgbWF4X3lpID0gKGludClGWFNZU19jZWlsKG1heF95KTsKKyAgICBpZiAobWluX3lpIDwgMCkgeworICAgICAgICBtaW5feWkgPSAwOworICAgIH0KKyAgICBpZiAobWF4X3lpID49IHBCaXRtYXAtPkdldEhlaWdodCgpKSB7CisgICAgICAgIG1heF95aSA9IHBCaXRtYXAtPkdldEhlaWdodCgpIC0gMTsKKyAgICB9CisgICAgZm9yIChpbnQgeSA9IG1pbl95aTsgeSA8PSBtYXhfeWk7IHkgKyspIHsKKyAgICAgICAgaW50IG5JbnRlcnNlY3RzID0gMDsKKyAgICAgICAgRlhfRkxPQVQgaW50ZXJfeFszXSwgclszXSwgZ1szXSwgYlszXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpICsrKSB7CisgICAgICAgICAgICBDUERGX01lc2hWZXJ0ZXgmIHZlcnRleDEgPSB0cmlhbmdsZVtpXTsKKyAgICAgICAgICAgIENQREZfTWVzaFZlcnRleCYgdmVydGV4MiA9IHRyaWFuZ2xlWyhpICsgMSkgJSAzXTsKKyAgICAgICAgICAgIEZYX0JPT0wgYkludGVyc2VjdCA9IF9HZXRTY2FubGluZUludGVyc2VjdCh5LCB2ZXJ0ZXgxLngsIHZlcnRleDEueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRleDIueCwgdmVydGV4Mi55LCBpbnRlcl94W25JbnRlcnNlY3RzXSk7CisgICAgICAgICAgICBpZiAoIWJJbnRlcnNlY3QpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJbbkludGVyc2VjdHNdID0gdmVydGV4MS5yICsgRlhTWVNfTXVsRGl2KHZlcnRleDIuciAtIHZlcnRleDEuciwgeSAtIHZlcnRleDEueSwgdmVydGV4Mi55IC0gdmVydGV4MS55KTsKKyAgICAgICAgICAgIGdbbkludGVyc2VjdHNdID0gdmVydGV4MS5nICsgRlhTWVNfTXVsRGl2KHZlcnRleDIuZyAtIHZlcnRleDEuZywgeSAtIHZlcnRleDEueSwgdmVydGV4Mi55IC0gdmVydGV4MS55KTsKKyAgICAgICAgICAgIGJbbkludGVyc2VjdHNdID0gdmVydGV4MS5iICsgRlhTWVNfTXVsRGl2KHZlcnRleDIuYiAtIHZlcnRleDEuYiwgeSAtIHZlcnRleDEueSwgdmVydGV4Mi55IC0gdmVydGV4MS55KTsKKyAgICAgICAgICAgIG5JbnRlcnNlY3RzICsrOworICAgICAgICB9CisgICAgICAgIGlmIChuSW50ZXJzZWN0cyAhPSAyKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpbnQgbWluX3gsIG1heF94LCBzdGFydF9pbmRleCwgZW5kX2luZGV4OworICAgICAgICBpZiAoaW50ZXJfeFswXSA8IGludGVyX3hbMV0pIHsKKyAgICAgICAgICAgIG1pbl94ID0gKGludClGWFNZU19mbG9vcihpbnRlcl94WzBdKTsKKyAgICAgICAgICAgIG1heF94ID0gKGludClGWFNZU19jZWlsKGludGVyX3hbMV0pOworICAgICAgICAgICAgc3RhcnRfaW5kZXggPSAwOworICAgICAgICAgICAgZW5kX2luZGV4ID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1pbl94ID0gKGludClGWFNZU19mbG9vcihpbnRlcl94WzFdKTsKKyAgICAgICAgICAgIG1heF94ID0gKGludClGWFNZU19jZWlsKGludGVyX3hbMF0pOworICAgICAgICAgICAgc3RhcnRfaW5kZXggPSAxOworICAgICAgICAgICAgZW5kX2luZGV4ID0gMDsKKyAgICAgICAgfQorICAgICAgICBpbnQgc3RhcnRfeCA9IG1pbl94LCBlbmRfeCA9IG1heF94OworICAgICAgICBpZiAoc3RhcnRfeCA8IDApIHsKKyAgICAgICAgICAgIHN0YXJ0X3ggPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChlbmRfeCA+IHBCaXRtYXAtPkdldFdpZHRoKCkpIHsKKyAgICAgICAgICAgIGVuZF94ID0gcEJpdG1hcC0+R2V0V2lkdGgoKTsKKyAgICAgICAgfQorICAgICAgICBGWF9MUEJZVEUgZGliX2J1ZiA9IHBCaXRtYXAtPkdldEJ1ZmZlcigpICsgeSAqIHBCaXRtYXAtPkdldFBpdGNoKCkgKyBzdGFydF94ICogNDsKKyAgICAgICAgRlhfRkxPQVQgcl91bml0ID0gKHJbZW5kX2luZGV4XSAtIHJbc3RhcnRfaW5kZXhdKSAvIChtYXhfeCAtIG1pbl94KTsKKyAgICAgICAgRlhfRkxPQVQgZ191bml0ID0gKGdbZW5kX2luZGV4XSAtIGdbc3RhcnRfaW5kZXhdKSAvIChtYXhfeCAtIG1pbl94KTsKKyAgICAgICAgRlhfRkxPQVQgYl91bml0ID0gKGJbZW5kX2luZGV4XSAtIGJbc3RhcnRfaW5kZXhdKSAvIChtYXhfeCAtIG1pbl94KTsKKyAgICAgICAgRlhfRkxPQVQgUiA9IHJbc3RhcnRfaW5kZXhdICsgKHN0YXJ0X3ggLSBtaW5feCkgKiByX3VuaXQ7CisgICAgICAgIEZYX0ZMT0FUIEcgPSBnW3N0YXJ0X2luZGV4XSArIChzdGFydF94IC0gbWluX3gpICogZ191bml0OworICAgICAgICBGWF9GTE9BVCBCID0gYltzdGFydF9pbmRleF0gKyAoc3RhcnRfeCAtIG1pbl94KSAqIGJfdW5pdDsKKyAgICAgICAgZm9yIChpbnQgeCA9IHN0YXJ0X3g7IHggPCBlbmRfeDsgeCArKykgeworICAgICAgICAgICAgUiArPSByX3VuaXQ7CisgICAgICAgICAgICBHICs9IGdfdW5pdDsKKyAgICAgICAgICAgIEIgKz0gYl91bml0OworICAgICAgICAgICAgRlhBUkdCX1NFVERJQihkaWJfYnVmLCBGWEFSR0JfTUFLRShhbHBoYSwgKEZYX0lOVDMyKShSICogMjU1KSwgKEZYX0lOVDMyKShHICogMjU1KSwgKEZYX0lOVDMyKShCICogMjU1KSkpOworICAgICAgICAgICAgZGliX2J1ZiArPSA0OworICAgICAgICB9CisgICAgfQorfQorc3RhdGljIHZvaWQgX0RyYXdGcmVlR291cmF1ZFNoYWRpbmcoQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkJpdG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfU3RyZWFtKiBwU2hhZGluZ1N0cmVhbSwgQ1BERl9GdW5jdGlvbioqIHBGdW5jcywgaW50IG5GdW5jcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfQ29sb3JTcGFjZSogcENTLCBpbnQgYWxwaGEpCit7CisgICAgQVNTRVJUKHBCaXRtYXAtPkdldEZvcm1hdCgpID09IEZYRElCX0FyZ2IpOworICAgIGlmIChwU2hhZGluZ1N0cmVhbS0+R2V0VHlwZSgpICE9IFBERk9CSl9TVFJFQU0pIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX01lc2hTdHJlYW0gc3RyZWFtOworICAgIGlmICghc3RyZWFtLkxvYWQocFNoYWRpbmdTdHJlYW0sIHBGdW5jcywgbkZ1bmNzLCBwQ1MpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1BERl9NZXNoVmVydGV4IHRyaWFuZ2xlWzNdOworICAgIHdoaWxlICghc3RyZWFtLm1fQml0U3RyZWFtLklzRU9GKCkpIHsKKyAgICAgICAgQ1BERl9NZXNoVmVydGV4IHZlcnRleDsKKyAgICAgICAgRlhfRFdPUkQgZmxhZyA9IHN0cmVhbS5HZXRWZXJ0ZXgodmVydGV4LCBwT2JqZWN0MkJpdG1hcCk7CisgICAgICAgIGlmIChmbGFnID09IDApIHsKKyAgICAgICAgICAgIHRyaWFuZ2xlWzBdID0gdmVydGV4OworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPCAzOyBqICsrKSB7CisgICAgICAgICAgICAgICAgc3RyZWFtLkdldFZlcnRleCh0cmlhbmdsZVtqXSwgcE9iamVjdDJCaXRtYXApOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGZsYWcgPT0gMSkgeworICAgICAgICAgICAgICAgIHRyaWFuZ2xlWzBdID0gdHJpYW5nbGVbMV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cmlhbmdsZVsxXSA9IHRyaWFuZ2xlWzJdOworICAgICAgICAgICAgdHJpYW5nbGVbMl0gPSB2ZXJ0ZXg7CisgICAgICAgIH0KKyAgICAgICAgX0RyYXdHb3VyYXVkKHBCaXRtYXAsIGFscGhhLCB0cmlhbmdsZSk7CisgICAgfQorfQorc3RhdGljIHZvaWQgX0RyYXdMYXR0aWNlR291cmF1ZFNoYWRpbmcoQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkJpdG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfU3RyZWFtKiBwU2hhZGluZ1N0cmVhbSwgQ1BERl9GdW5jdGlvbioqIHBGdW5jcywgaW50IG5GdW5jcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfQ29sb3JTcGFjZSogcENTLCBpbnQgYWxwaGEpCit7CisgICAgQVNTRVJUKHBCaXRtYXAtPkdldEZvcm1hdCgpID09IEZYRElCX0FyZ2IpOworICAgIGlmIChwU2hhZGluZ1N0cmVhbS0+R2V0VHlwZSgpICE9IFBERk9CSl9TVFJFQU0pIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgcm93X3ZlcnRzID0gcFNoYWRpbmdTdHJlYW0tPkdldERpY3QoKS0+R2V0SW50ZWdlcigiVmVydGljZXNQZXJSb3ciKTsKKyAgICBpZiAocm93X3ZlcnRzIDwgMikgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfTWVzaFN0cmVhbSBzdHJlYW07CisgICAgaWYgKCFzdHJlYW0uTG9hZChwU2hhZGluZ1N0cmVhbSwgcEZ1bmNzLCBuRnVuY3MsIHBDUykpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX01lc2hWZXJ0ZXgqIHZlcnRleCA9IEZYX0FsbG9jKENQREZfTWVzaFZlcnRleCwgcm93X3ZlcnRzICogMik7CisgICAgaWYgKCFzdHJlYW0uR2V0VmVydGV4Um93KHZlcnRleCwgcm93X3ZlcnRzLCBwT2JqZWN0MkJpdG1hcCkpIHsKKyAgICAgICAgRlhfRnJlZSh2ZXJ0ZXgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludCBsYXN0X2luZGV4ID0gMDsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBDUERGX01lc2hWZXJ0ZXgqIGxhc3Rfcm93ID0gdmVydGV4ICsgbGFzdF9pbmRleCAqIHJvd192ZXJ0czsKKyAgICAgICAgQ1BERl9NZXNoVmVydGV4KiB0aGlzX3JvdyA9IHZlcnRleCArICgxIC0gbGFzdF9pbmRleCkgKiByb3dfdmVydHM7CisgICAgICAgIGlmICghc3RyZWFtLkdldFZlcnRleFJvdyh0aGlzX3Jvdywgcm93X3ZlcnRzLCBwT2JqZWN0MkJpdG1hcCkpIHsKKyAgICAgICAgICAgIEZYX0ZyZWUodmVydGV4KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBDUERGX01lc2hWZXJ0ZXggdHJpYW5nbGVbM107CisgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcm93X3ZlcnRzOyBpICsrKSB7CisgICAgICAgICAgICB0cmlhbmdsZVswXSA9IGxhc3Rfcm93W2ldOworICAgICAgICAgICAgdHJpYW5nbGVbMV0gPSB0aGlzX3Jvd1tpIC0gMV07CisgICAgICAgICAgICB0cmlhbmdsZVsyXSA9IGxhc3Rfcm93W2kgLSAxXTsKKyAgICAgICAgICAgIF9EcmF3R291cmF1ZChwQml0bWFwLCBhbHBoYSwgdHJpYW5nbGUpOworICAgICAgICAgICAgdHJpYW5nbGVbMl0gPSB0aGlzX3Jvd1tpXTsKKyAgICAgICAgICAgIF9EcmF3R291cmF1ZChwQml0bWFwLCBhbHBoYSwgdHJpYW5nbGUpOworICAgICAgICB9CisgICAgICAgIGxhc3RfaW5kZXggPSAxIC0gbGFzdF9pbmRleDsKKyAgICB9CisgICAgRlhfRnJlZSh2ZXJ0ZXgpOworfQorc3RydWN0IENvb25fQmV6aWVyQ29lZmYgeworICAgIGZsb2F0IGEsIGIsIGMsIGQ7CisgICAgdm9pZCBGcm9tUG9pbnRzKGZsb2F0IHAwLCBmbG9hdCBwMSwgZmxvYXQgcDIsIGZsb2F0IHAzKQorICAgIHsKKyAgICAgICAgYSA9IC1wMCArIDMgKiBwMSAtIDMgKiBwMiArIHAzOworICAgICAgICBiID0gMyAqIHAwIC0gNiAqIHAxICsgMyAqIHAyOworICAgICAgICBjID0gLTMgKiBwMCArIDMgKiBwMTsKKyAgICAgICAgZCA9IHAwOworICAgIH0KKyAgICBDb29uX0JlemllckNvZWZmIGZpcnN0X2hhbGYoKQorICAgIHsKKyAgICAgICAgQ29vbl9CZXppZXJDb2VmZiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5hID0gYSAvIDg7CisgICAgICAgIHJlc3VsdC5iID0gYiAvIDQ7CisgICAgICAgIHJlc3VsdC5jID0gYyAvIDI7CisgICAgICAgIHJlc3VsdC5kID0gZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgQ29vbl9CZXppZXJDb2VmZiBzZWNvbmRfaGFsZigpCisgICAgeworICAgICAgICBDb29uX0JlemllckNvZWZmIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LmEgPSBhIC8gODsKKyAgICAgICAgcmVzdWx0LmIgPSAzICogYSAvIDggKyBiIC8gNDsKKyAgICAgICAgcmVzdWx0LmMgPSAzICogYSAvIDggKyBiIC8gMiArIGMgLyAyOworICAgICAgICByZXN1bHQuZCA9IGEgLyA4ICsgYiAvIDQgKyBjIC8gMiArIGQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHZvaWQgR2V0UG9pbnRzKGZsb2F0IHBbNF0pCisgICAgeworICAgICAgICBwWzBdID0gZDsKKyAgICAgICAgcFsxXSA9IGMgLyAzICsgcFswXTsKKyAgICAgICAgcFsyXSA9IGIgLyAzIC0gcFswXSArIDIgKiBwWzFdOworICAgICAgICBwWzNdID0gYSArIHBbMF0gLSAzICogcFsxXSArIDMgKiBwWzJdOworICAgIH0KKyAgICB2b2lkIEdldFBvaW50c1JldmVyc2UoZmxvYXQgcFs0XSkKKyAgICB7CisgICAgICAgIHBbM10gPSBkOworICAgICAgICBwWzJdID0gYyAvIDMgKyBwWzNdOworICAgICAgICBwWzFdID0gYiAvIDMgLSBwWzNdICsgMiAqIHBbMl07CisgICAgICAgIHBbMF0gPSBhICsgcFszXSAtIDMgKiBwWzJdICsgMyAqIHBbMV07CisgICAgfQorICAgIHZvaWQgQmV6aWVySW50ZXJwb2woQ29vbl9CZXppZXJDb2VmZiYgQzEsIENvb25fQmV6aWVyQ29lZmYmIEMyLCBDb29uX0JlemllckNvZWZmJiBEMSwgQ29vbl9CZXppZXJDb2VmZiYgRDIpCisgICAgeworICAgICAgICBhID0gKEQxLmEgKyBEMi5hKSAvIDI7CisgICAgICAgIGIgPSAoRDEuYiArIEQyLmIpIC8gMjsKKyAgICAgICAgYyA9IChEMS5jICsgRDIuYykgLyAyIC0gKEMxLmEgLyA4ICsgQzEuYiAvIDQgKyBDMS5jIC8gMikgKyAoQzIuYSAvIDggKyBDMi5iIC8gNCkgKyAoLUMxLmQgKyBEMi5kKSAvIDIgLSAoQzIuYSArIEMyLmIpIC8gMjsKKyAgICAgICAgZCA9IEMxLmEgLyA4ICsgQzEuYiAvIDQgKyBDMS5jIC8gMiArIEMxLmQ7CisgICAgfQorICAgIGZsb2F0IERpc3RhbmNlKCkKKyAgICB7CisgICAgICAgIGZsb2F0IGRpcyA9IGEgKyBiICsgYzsKKyAgICAgICAgcmV0dXJuIGRpcyA8IDAgPyAtZGlzIDogZGlzOworICAgIH0KK307CitzdHJ1Y3QgQ29vbl9CZXppZXIgeworICAgIENvb25fQmV6aWVyQ29lZmYgeCwgeTsKKyAgICB2b2lkIEZyb21Qb2ludHMoZmxvYXQgeDAsIGZsb2F0IHkwLCBmbG9hdCB4MSwgZmxvYXQgeTEsIGZsb2F0IHgyLCBmbG9hdCB5MiwgZmxvYXQgeDMsIGZsb2F0IHkzKQorICAgIHsKKyAgICAgICAgeC5Gcm9tUG9pbnRzKHgwLCB4MSwgeDIsIHgzKTsKKyAgICAgICAgeS5Gcm9tUG9pbnRzKHkwLCB5MSwgeTIsIHkzKTsKKyAgICB9CisgICAgQ29vbl9CZXppZXIgZmlyc3RfaGFsZigpCisgICAgeworICAgICAgICBDb29uX0JlemllciByZXN1bHQ7CisgICAgICAgIHJlc3VsdC54ID0geC5maXJzdF9oYWxmKCk7CisgICAgICAgIHJlc3VsdC55ID0geS5maXJzdF9oYWxmKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIENvb25fQmV6aWVyIHNlY29uZF9oYWxmKCkKKyAgICB7CisgICAgICAgIENvb25fQmV6aWVyIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LnggPSB4LnNlY29uZF9oYWxmKCk7CisgICAgICAgIHJlc3VsdC55ID0geS5zZWNvbmRfaGFsZigpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICB2b2lkIEJlemllckludGVycG9sKENvb25fQmV6aWVyJiBDMSwgQ29vbl9CZXppZXImIEMyLCBDb29uX0JlemllciYgRDEsIENvb25fQmV6aWVyJiBEMikKKyAgICB7CisgICAgICAgIHguQmV6aWVySW50ZXJwb2woQzEueCwgQzIueCwgRDEueCwgRDIueCk7CisgICAgICAgIHkuQmV6aWVySW50ZXJwb2woQzEueSwgQzIueSwgRDEueSwgRDIueSk7CisgICAgfQorICAgIHZvaWQgR2V0UG9pbnRzKEZYX1BBVEhQT0lOVCogcFBvaW50cykKKyAgICB7CisgICAgICAgIGZsb2F0IHBbNF07CisgICAgICAgIGludCBpOworICAgICAgICB4LkdldFBvaW50cyhwKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKyspIHsKKyAgICAgICAgICAgIHBQb2ludHNbaV0ubV9Qb2ludFggPSBwW2ldOworICAgICAgICB9CisgICAgICAgIHkuR2V0UG9pbnRzKHApOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSArKykgeworICAgICAgICAgICAgcFBvaW50c1tpXS5tX1BvaW50WSA9IHBbaV07CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBHZXRQb2ludHNSZXZlcnNlKEZYX1BBVEhQT0lOVCogcFBvaW50cykKKyAgICB7CisgICAgICAgIGZsb2F0IHBbNF07CisgICAgICAgIGludCBpOworICAgICAgICB4LkdldFBvaW50c1JldmVyc2UocCk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpICsrKSB7CisgICAgICAgICAgICBwUG9pbnRzW2ldLm1fUG9pbnRYID0gcFtpXTsKKyAgICAgICAgfQorICAgICAgICB5LkdldFBvaW50c1JldmVyc2UocCk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpICsrKSB7CisgICAgICAgICAgICBwUG9pbnRzW2ldLm1fUG9pbnRZID0gcFtpXTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmbG9hdCBEaXN0YW5jZSgpCisgICAgeworICAgICAgICByZXR1cm4geC5EaXN0YW5jZSgpICsgeS5EaXN0YW5jZSgpOworICAgIH0KK307CitzdGF0aWMgaW50IF9CaUludGVycG9sKGludCBjMCwgaW50IGMxLCBpbnQgYzIsIGludCBjMywgaW50IHgsIGludCB5LCBpbnQgeF9zY2FsZSwgaW50IHlfc2NhbGUpCit7CisgICAgaW50IHgxID0gYzAgKyAoYzMgLSBjMCkgKiB4IC8geF9zY2FsZTsKKyAgICBpbnQgeDIgPSBjMSArIChjMiAtIGMxKSAqIHggLyB4X3NjYWxlOworICAgIHJldHVybiB4MSArICh4MiAtIHgxKSAqIHkgLyB5X3NjYWxlOworfQorc3RydWN0IENvb25fQ29sb3IgeworICAgIENvb25fQ29sb3IoKQorICAgIHsKKyAgICAgICAgRlhTWVNfbWVtc2V0MzIoY29tcCwgMCwgc2l6ZW9mKGludCkgKiAzKTsKKyAgICB9CisgICAgaW50CQljb21wWzNdOworICAgIHZvaWQJQmlJbnRlcnBvbChDb29uX0NvbG9yIGNvbG9yc1s0XSwgaW50IHgsIGludCB5LCBpbnQgeF9zY2FsZSwgaW50IHlfc2NhbGUpCisgICAgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkgKyspCisgICAgICAgICAgICBjb21wW2ldID0gX0JpSW50ZXJwb2woY29sb3JzWzBdLmNvbXBbaV0sIGNvbG9yc1sxXS5jb21wW2ldLCBjb2xvcnNbMl0uY29tcFtpXSwgY29sb3JzWzNdLmNvbXBbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgeSwgeF9zY2FsZSwgeV9zY2FsZSk7CisgICAgfQorICAgIGludAkJRGlzdGFuY2UoQ29vbl9Db2xvciYgbykKKyAgICB7CisgICAgICAgIGludCBtYXgsIGRpZmY7CisgICAgICAgIG1heCA9IEZYU1lTX2Ficyhjb21wWzBdIC0gby5jb21wWzBdKTsKKyAgICAgICAgZGlmZiA9IEZYU1lTX2Ficyhjb21wWzFdIC0gby5jb21wWzFdKTsKKyAgICAgICAgaWYgKG1heCA8IGRpZmYpIHsKKyAgICAgICAgICAgIG1heCA9IGRpZmY7CisgICAgICAgIH0KKyAgICAgICAgZGlmZiA9IEZYU1lTX2Ficyhjb21wWzJdIC0gby5jb21wWzJdKTsKKyAgICAgICAgaWYgKG1heCA8IGRpZmYpIHsKKyAgICAgICAgICAgIG1heCA9IGRpZmY7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1heDsKKyAgICB9Cit9Oworc3RydWN0IENQREZfUGF0Y2hEcmF3ZXIgeworICAgIENvb25fQ29sb3IJCQlwYXRjaF9jb2xvcnNbNF07CisgICAgaW50CQkJCQltYXhfZGVsdGE7CisgICAgQ0ZYX1BhdGhEYXRhCQlwYXRoOworICAgIENGWF9SZW5kZXJEZXZpY2UqCXBEZXZpY2U7CisgICAgaW50CQkJCQlmaWxsX21vZGU7CisgICAgaW50CQkJCQlhbHBoYTsKKyAgICB2b2lkIERyYXcoaW50IHhfc2NhbGUsIGludCB5X3NjYWxlLCBpbnQgbGVmdCwgaW50IGJvdHRvbSwgQ29vbl9CZXppZXIgQzEsIENvb25fQmV6aWVyIEMyLCBDb29uX0JlemllciBEMSwgQ29vbl9CZXppZXIgRDIpCisgICAgeworICAgICAgICBGWF9CT09MIGJTbWFsbCA9IEMxLkRpc3RhbmNlKCkgPCAyICYmIEMyLkRpc3RhbmNlKCkgPCAyICYmIEQxLkRpc3RhbmNlKCkgPCAyICYmIEQyLkRpc3RhbmNlKCkgPCAyOworICAgICAgICBDb29uX0NvbG9yIGRpdl9jb2xvcnNbNF07CisgICAgICAgIGludCBkX2JvdHRvbSwgZF9sZWZ0LCBkX3RvcCwgZF9yaWdodDsKKyAgICAgICAgZGl2X2NvbG9yc1swXS5CaUludGVycG9sKHBhdGNoX2NvbG9ycywgbGVmdCwgYm90dG9tLCB4X3NjYWxlLCB5X3NjYWxlKTsKKyAgICAgICAgaWYgKCFiU21hbGwpIHsKKyAgICAgICAgICAgIGRpdl9jb2xvcnNbMV0uQmlJbnRlcnBvbChwYXRjaF9jb2xvcnMsIGxlZnQsIGJvdHRvbSArIDEsIHhfc2NhbGUsIHlfc2NhbGUpOworICAgICAgICAgICAgZGl2X2NvbG9yc1syXS5CaUludGVycG9sKHBhdGNoX2NvbG9ycywgbGVmdCArIDEsIGJvdHRvbSArIDEsIHhfc2NhbGUsIHlfc2NhbGUpOworICAgICAgICAgICAgZGl2X2NvbG9yc1szXS5CaUludGVycG9sKHBhdGNoX2NvbG9ycywgbGVmdCArIDEsIGJvdHRvbSwgeF9zY2FsZSwgeV9zY2FsZSk7CisgICAgICAgICAgICBkX2JvdHRvbSA9IGRpdl9jb2xvcnNbM10uRGlzdGFuY2UoZGl2X2NvbG9yc1swXSk7CisgICAgICAgICAgICBkX2xlZnQgPSBkaXZfY29sb3JzWzFdLkRpc3RhbmNlKGRpdl9jb2xvcnNbMF0pOworICAgICAgICAgICAgZF90b3AgPSBkaXZfY29sb3JzWzFdLkRpc3RhbmNlKGRpdl9jb2xvcnNbMl0pOworICAgICAgICAgICAgZF9yaWdodCA9IGRpdl9jb2xvcnNbMl0uRGlzdGFuY2UoZGl2X2NvbG9yc1szXSk7CisgICAgICAgIH0KKyNkZWZpbmUgQ09PTkNPTE9SX1RIUkVTSE9MRCA0CisgICAgICAgIGlmIChiU21hbGwgfHwgKGRfYm90dG9tIDwgQ09PTkNPTE9SX1RIUkVTSE9MRCAmJiBkX2xlZnQgPCBDT09OQ09MT1JfVEhSRVNIT0xEICYmCisgICAgICAgICAgICAgICAgICAgICAgIGRfdG9wIDwgQ09PTkNPTE9SX1RIUkVTSE9MRCAmJiBkX3JpZ2h0IDwgQ09PTkNPTE9SX1RIUkVTSE9MRCkpIHsKKyAgICAgICAgICAgIEZYX1BBVEhQT0lOVCogcFBvaW50cyA9IHBhdGguR2V0UG9pbnRzKCk7CisgICAgICAgICAgICBDMS5HZXRQb2ludHMocFBvaW50cyk7CisgICAgICAgICAgICBEMi5HZXRQb2ludHMocFBvaW50cyArIDMpOworICAgICAgICAgICAgQzIuR2V0UG9pbnRzUmV2ZXJzZShwUG9pbnRzICsgNik7CisgICAgICAgICAgICBEMS5HZXRQb2ludHNSZXZlcnNlKHBQb2ludHMgKyA5KTsKKyAgICAgICAgICAgIGludCBmaWxsRmxhZ3MgPSBGWEZJTExfV0lORElORyB8IEZYRklMTF9GVUxMQ09WRVI7CisgICAgICAgICAgICBpZiAoZmlsbF9tb2RlICYgUkVOREVSX05PUEFUSFNNT09USCkgeworICAgICAgICAgICAgICAgIGZpbGxGbGFncyB8PSBGWEZJTExfTk9QQVRIU01PT1RIOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIE5VTEwsIE5VTEwsIEZYQVJHQl9NQUtFKGFscGhhLCBkaXZfY29sb3JzWzBdLmNvbXBbMF0sIGRpdl9jb2xvcnNbMF0uY29tcFsxXSwgZGl2X2NvbG9yc1swXS5jb21wWzJdKSwgMCwgZmlsbEZsYWdzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChkX2JvdHRvbSA8IENPT05DT0xPUl9USFJFU0hPTEQgJiYgZF90b3AgPCBDT09OQ09MT1JfVEhSRVNIT0xEKSB7CisgICAgICAgICAgICAgICAgQ29vbl9CZXppZXIgbTE7CisgICAgICAgICAgICAgICAgbTEuQmV6aWVySW50ZXJwb2woRDEsIEQyLCBDMSwgQzIpOworICAgICAgICAgICAgICAgIHlfc2NhbGUgKj0gMjsKKyAgICAgICAgICAgICAgICBib3R0b20gKj0gMjsKKyAgICAgICAgICAgICAgICBEcmF3KHhfc2NhbGUsIHlfc2NhbGUsIGxlZnQsIGJvdHRvbSwgQzEsIG0xLCBEMS5maXJzdF9oYWxmKCksIEQyLmZpcnN0X2hhbGYoKSk7CisgICAgICAgICAgICAgICAgRHJhdyh4X3NjYWxlLCB5X3NjYWxlLCBsZWZ0LCBib3R0b20gKyAxLCBtMSwgQzIsIEQxLnNlY29uZF9oYWxmKCksIEQyLnNlY29uZF9oYWxmKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChkX2xlZnQgPCBDT09OQ09MT1JfVEhSRVNIT0xEICYmIGRfcmlnaHQgPCBDT09OQ09MT1JfVEhSRVNIT0xEKSB7CisgICAgICAgICAgICAgICAgQ29vbl9CZXppZXIgbTI7CisgICAgICAgICAgICAgICAgbTIuQmV6aWVySW50ZXJwb2woQzEsIEMyLCBEMSwgRDIpOworICAgICAgICAgICAgICAgIHhfc2NhbGUgKj0gMjsKKyAgICAgICAgICAgICAgICBsZWZ0ICo9IDI7CisgICAgICAgICAgICAgICAgRHJhdyh4X3NjYWxlLCB5X3NjYWxlLCBsZWZ0LCBib3R0b20sIEMxLmZpcnN0X2hhbGYoKSwgQzIuZmlyc3RfaGFsZigpLCBEMSwgbTIpOworICAgICAgICAgICAgICAgIERyYXcoeF9zY2FsZSwgeV9zY2FsZSwgbGVmdCArIDEsIGJvdHRvbSwgQzEuc2Vjb25kX2hhbGYoKSwgQzIuc2Vjb25kX2hhbGYoKSwgbTIsIEQyKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQ29vbl9CZXppZXIgbTEsIG0yOworICAgICAgICAgICAgICAgIG0xLkJlemllckludGVycG9sKEQxLCBEMiwgQzEsIEMyKTsKKyAgICAgICAgICAgICAgICBtMi5CZXppZXJJbnRlcnBvbChDMSwgQzIsIEQxLCBEMik7CisgICAgICAgICAgICAgICAgQ29vbl9CZXppZXIgbTFmID0gbTEuZmlyc3RfaGFsZigpOworICAgICAgICAgICAgICAgIENvb25fQmV6aWVyIG0xcyA9IG0xLnNlY29uZF9oYWxmKCk7CisgICAgICAgICAgICAgICAgQ29vbl9CZXppZXIgbTJmID0gbTIuZmlyc3RfaGFsZigpOworICAgICAgICAgICAgICAgIENvb25fQmV6aWVyIG0ycyA9IG0yLnNlY29uZF9oYWxmKCk7CisgICAgICAgICAgICAgICAgeF9zY2FsZSAqPSAyOworICAgICAgICAgICAgICAgIHlfc2NhbGUgKj0gMjsKKyAgICAgICAgICAgICAgICBsZWZ0ICo9IDI7CisgICAgICAgICAgICAgICAgYm90dG9tICo9IDI7CisgICAgICAgICAgICAgICAgRHJhdyh4X3NjYWxlLCB5X3NjYWxlLCBsZWZ0LCBib3R0b20sIEMxLmZpcnN0X2hhbGYoKSwgbTFmLCBEMS5maXJzdF9oYWxmKCksIG0yZik7CisgICAgICAgICAgICAgICAgRHJhdyh4X3NjYWxlLCB5X3NjYWxlLCBsZWZ0LCBib3R0b20gKyAxLCBtMWYsIEMyLmZpcnN0X2hhbGYoKSwgRDEuc2Vjb25kX2hhbGYoKSwgbTJzKTsKKyAgICAgICAgICAgICAgICBEcmF3KHhfc2NhbGUsIHlfc2NhbGUsIGxlZnQgKyAxLCBib3R0b20sIEMxLnNlY29uZF9oYWxmKCksIG0xcywgbTJmLCBEMi5maXJzdF9oYWxmKCkpOworICAgICAgICAgICAgICAgIERyYXcoeF9zY2FsZSwgeV9zY2FsZSwgbGVmdCArIDEsIGJvdHRvbSArIDEsIG0xcywgQzIuc2Vjb25kX2hhbGYoKSwgbTJzLCBEMi5zZWNvbmRfaGFsZigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK307CitzdGF0aWMgdm9pZCBfRHJhd0Nvb25QYXRjaE1lc2hlcyhGWF9CT09MIGJUZW5zb3IsIENGWF9ESUJpdG1hcCogcEJpdG1hcCwgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJCaXRtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX1N0cmVhbSogcFNoYWRpbmdTdHJlYW0sIENQREZfRnVuY3Rpb24qKiBwRnVuY3MsIGludCBuRnVuY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0NvbG9yU3BhY2UqIHBDUywgaW50IGZpbGxfbW9kZSwgaW50IGFscGhhKQoreworICAgIEFTU0VSVChwQml0bWFwLT5HZXRGb3JtYXQoKSA9PSBGWERJQl9BcmdiKTsKKyAgICBpZiAocFNoYWRpbmdTdHJlYW0tPkdldFR5cGUoKSAhPSBQREZPQkpfU1RSRUFNKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZYX0Z4Z2VEZXZpY2UgZGV2aWNlOworICAgIGRldmljZS5BdHRhY2gocEJpdG1hcCk7CisgICAgQ1BERl9NZXNoU3RyZWFtIHN0cmVhbTsKKyAgICBpZiAoIXN0cmVhbS5Mb2FkKHBTaGFkaW5nU3RyZWFtLCBwRnVuY3MsIG5GdW5jcywgcENTKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfUGF0Y2hEcmF3ZXIgcGF0Y2g7CisgICAgcGF0Y2guYWxwaGEgPSBhbHBoYTsKKyAgICBwYXRjaC5wRGV2aWNlID0gJmRldmljZTsKKyAgICBwYXRjaC5maWxsX21vZGUgPSBmaWxsX21vZGU7CisgICAgcGF0Y2gucGF0aC5TZXRQb2ludENvdW50KDEzKTsKKyAgICBGWF9QQVRIUE9JTlQqIHBQb2ludHMgPSBwYXRjaC5wYXRoLkdldFBvaW50cygpOworICAgIHBQb2ludHNbMF0ubV9GbGFnID0gRlhQVF9NT1ZFVE87CisgICAgZm9yIChpbnQgaSA9IDE7IGkgPCAxMzsgaSArKykgeworICAgICAgICBwUG9pbnRzW2ldLm1fRmxhZyA9IEZYUFRfQkVaSUVSVE87CisgICAgfQorICAgIENGWF9GbG9hdFBvaW50IGNvb3Jkc1sxNl07CisgICAgaW50IHBvaW50X2NvdW50ID0gYlRlbnNvciA/IDE2IDogMTI7CisgICAgd2hpbGUgKCFzdHJlYW0ubV9CaXRTdHJlYW0uSXNFT0YoKSkgeworICAgICAgICBGWF9EV09SRCBmbGFnID0gc3RyZWFtLkdldEZsYWcoKTsKKyAgICAgICAgaW50IGlTdGFydFBvaW50ID0gMCwgaVN0YXJ0Q29sb3IgPSAwLCBpOworICAgICAgICBpZiAoZmxhZykgeworICAgICAgICAgICAgaVN0YXJ0UG9pbnQgPSA0OworICAgICAgICAgICAgaVN0YXJ0Q29sb3IgPSAyOworICAgICAgICAgICAgQ0ZYX0Zsb2F0UG9pbnQgdGVtcENvb3Jkc1s0XTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSArKykgeworICAgICAgICAgICAgICAgIHRlbXBDb29yZHNbaV0gPSBjb29yZHNbKGZsYWcgKiAzICsgaSkgJSAxMl07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihjb29yZHMsIHRlbXBDb29yZHMsIHNpemVvZihDRlhfRmxvYXRQb2ludCkgKiA0KTsKKyAgICAgICAgICAgIENvb25fQ29sb3IgdGVtcENvbG9yc1syXTsKKyAgICAgICAgICAgIHRlbXBDb2xvcnNbMF0gPSBwYXRjaC5wYXRjaF9jb2xvcnNbZmxhZ107CisgICAgICAgICAgICB0ZW1wQ29sb3JzWzFdID0gcGF0Y2gucGF0Y2hfY29sb3JzWyhmbGFnICsgMSkgJSA0XTsKKyAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKHBhdGNoLnBhdGNoX2NvbG9ycywgdGVtcENvbG9ycywgc2l6ZW9mKENvb25fQ29sb3IpICogMik7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gaVN0YXJ0UG9pbnQ7IGkgPCBwb2ludF9jb3VudDsgaSArKykgeworICAgICAgICAgICAgc3RyZWFtLkdldENvb3Jkcyhjb29yZHNbaV0ueCwgY29vcmRzW2ldLnkpOworICAgICAgICAgICAgcE9iamVjdDJCaXRtYXAtPlRyYW5zZm9ybShjb29yZHNbaV0ueCwgY29vcmRzW2ldLnkpOworICAgICAgICB9CisgICAgICAgIGZvciAoaSA9IGlTdGFydENvbG9yOyBpIDwgNDsgaSArKykgeworICAgICAgICAgICAgRlhfRkxPQVQgciwgZywgYjsKKyAgICAgICAgICAgIHN0cmVhbS5HZXRDb2xvcihyLCBnLCBiKTsKKyAgICAgICAgICAgIHBhdGNoLnBhdGNoX2NvbG9yc1tpXS5jb21wWzBdID0gKEZYX0lOVDMyKShyICogMjU1KTsKKyAgICAgICAgICAgIHBhdGNoLnBhdGNoX2NvbG9yc1tpXS5jb21wWzFdID0gKEZYX0lOVDMyKShnICogMjU1KTsKKyAgICAgICAgICAgIHBhdGNoLnBhdGNoX2NvbG9yc1tpXS5jb21wWzJdID0gKEZYX0lOVDMyKShiICogMjU1KTsKKyAgICAgICAgfQorICAgICAgICBDRlhfRmxvYXRSZWN0IGJib3ggPSBDRlhfRmxvYXRSZWN0OjpHZXRCQm94KGNvb3JkcywgcG9pbnRfY291bnQpOworICAgICAgICBpZiAoYmJveC5yaWdodCA8PSAwIHx8IGJib3gubGVmdCA+PSAoRlhfRkxPQVQpcEJpdG1hcC0+R2V0V2lkdGgoKSB8fCBiYm94LnRvcCA8PSAwIHx8CisgICAgICAgICAgICAgICAgYmJveC5ib3R0b20gPj0gKEZYX0ZMT0FUKXBCaXRtYXAtPkdldEhlaWdodCgpKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBDb29uX0JlemllciBDMSwgQzIsIEQxLCBEMjsKKyAgICAgICAgQzEuRnJvbVBvaW50cyhjb29yZHNbMF0ueCwgY29vcmRzWzBdLnksIGNvb3Jkc1sxMV0ueCwgY29vcmRzWzExXS55LCBjb29yZHNbMTBdLngsIGNvb3Jkc1sxMF0ueSwKKyAgICAgICAgICAgICAgICAgICAgICBjb29yZHNbOV0ueCwgY29vcmRzWzldLnkpOworICAgICAgICBDMi5Gcm9tUG9pbnRzKGNvb3Jkc1szXS54LCBjb29yZHNbM10ueSwgY29vcmRzWzRdLngsIGNvb3Jkc1s0XS55LCBjb29yZHNbNV0ueCwgY29vcmRzWzVdLnksCisgICAgICAgICAgICAgICAgICAgICAgY29vcmRzWzZdLngsIGNvb3Jkc1s2XS55KTsKKyAgICAgICAgRDEuRnJvbVBvaW50cyhjb29yZHNbMF0ueCwgY29vcmRzWzBdLnksIGNvb3Jkc1sxXS54LCBjb29yZHNbMV0ueSwgY29vcmRzWzJdLngsIGNvb3Jkc1syXS55LAorICAgICAgICAgICAgICAgICAgICAgIGNvb3Jkc1szXS54LCBjb29yZHNbM10ueSk7CisgICAgICAgIEQyLkZyb21Qb2ludHMoY29vcmRzWzldLngsIGNvb3Jkc1s5XS55LCBjb29yZHNbOF0ueCwgY29vcmRzWzhdLnksIGNvb3Jkc1s3XS54LCBjb29yZHNbN10ueSwKKyAgICAgICAgICAgICAgICAgICAgICBjb29yZHNbNl0ueCwgY29vcmRzWzZdLnkpOworICAgICAgICBwYXRjaC5EcmF3KDEsIDEsIDAsIDAsIEMxLCBDMiwgRDEsIEQyKTsKKyAgICB9Cit9Cit2b2lkIENQREZfUmVuZGVyU3RhdHVzOjpEcmF3U2hhZGluZyhDUERGX1NoYWRpbmdQYXR0ZXJuKiBwUGF0dGVybiwgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX1JFQ1QmIGNsaXBfcmVjdCwgaW50IGFscGhhLCBGWF9CT09MIGJBbHBoYU1vZGUpCit7CisgICAgaW50IHdpZHRoID0gY2xpcF9yZWN0LldpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IGNsaXBfcmVjdC5IZWlnaHQoKTsKKyAgICBDUERGX0Z1bmN0aW9uKiogcEZ1bmNzID0gcFBhdHRlcm4tPm1fcEZ1bmN0aW9uczsKKyAgICBpbnQgbkZ1bmNzID0gcFBhdHRlcm4tPm1fbkZ1bmNzOworICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSBwUGF0dGVybi0+bV9wU2hhZGluZ09iai0+R2V0RGljdCgpOworICAgIENQREZfQ29sb3JTcGFjZSogcENvbG9yU3BhY2UgPSBwUGF0dGVybi0+bV9wQ1M7CisgICAgaWYgKHBDb2xvclNwYWNlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGWF9BUkdCIGJhY2tncm91bmQgPSAwOworICAgIGlmICghcFBhdHRlcm4tPm1fYlNoYWRpbmdPYmogJiYgcFBhdHRlcm4tPm1fcFNoYWRpbmdPYmotPkdldERpY3QoKS0+S2V5RXhpc3QoRlhfQlNUUkMoIkJhY2tncm91bmQiKSkpIHsKKyAgICAgICAgQ1BERl9BcnJheSogcEJhY2tDb2xvciA9IHBQYXR0ZXJuLT5tX3BTaGFkaW5nT2JqLT5HZXREaWN0KCktPkdldEFycmF5KEZYX0JTVFJDKCJCYWNrZ3JvdW5kIikpOworICAgICAgICBpZiAocEJhY2tDb2xvciAmJiBwQmFja0NvbG9yLT5HZXRDb3VudCgpID49IChGWF9EV09SRClwQ29sb3JTcGFjZS0+Q291bnRDb21wb25lbnRzKCkpIHsKKyAgICAgICAgICAgIENGWF9GaXhlZEJ1Zkdyb3c8RlhfRkxPQVQsIDE2PiBjb21wcyhwQ29sb3JTcGFjZS0+Q291bnRDb21wb25lbnRzKCkpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwQ29sb3JTcGFjZS0+Q291bnRDb21wb25lbnRzKCk7IGkgKyspIHsKKyAgICAgICAgICAgICAgICBjb21wc1tpXSA9IHBCYWNrQ29sb3ItPkdldE51bWJlcihpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZYX0ZMT0FUIFIsIEcsIEI7CisgICAgICAgICAgICBwQ29sb3JTcGFjZS0+R2V0UkdCKGNvbXBzLCBSLCBHLCBCKTsKKyAgICAgICAgICAgIGJhY2tncm91bmQgPSBBcmdiRW5jb2RlKDI1NSwgKEZYX0lOVDMyKShSICogMjU1KSwgKEZYX0lOVDMyKShHICogMjU1KSwgKEZYX0lOVDMyKShCICogMjU1KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHBEaWN0LT5LZXlFeGlzdChGWF9CU1RSQygiQkJveCIpKSkgeworICAgICAgICBDRlhfRmxvYXRSZWN0IHJlY3QgPSBwRGljdC0+R2V0UmVjdChGWF9CU1RSQygiQkJveCIpKTsKKyAgICAgICAgcmVjdC5UcmFuc2Zvcm0ocE1hdHJpeCk7CisgICAgICAgIGNsaXBfcmVjdC5JbnRlcnNlY3QocmVjdC5HZXRPdXR0ZXJSZWN0KCkpOworICAgIH0KKyAgICBDUERGX0RldmljZUJ1ZmZlciBidWZmZXI7CisgICAgYnVmZmVyLkluaXRpYWxpemUobV9wQ29udGV4dCwgbV9wRGV2aWNlLCAmY2xpcF9yZWN0LCBtX3BDdXJPYmosIDE1MCk7CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBGaW5hbE1hdHJpeCA9ICpwTWF0cml4OworICAgIEZpbmFsTWF0cml4LkNvbmNhdCgqYnVmZmVyLkdldE1hdHJpeCgpKTsKKyAgICBDRlhfRElCaXRtYXAqIHBCaXRtYXAgPSBidWZmZXIuR2V0Qml0bWFwKCk7CisgICAgaWYgKHBCaXRtYXAtPkdldEJ1ZmZlcigpID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwQml0bWFwLT5DbGVhcihiYWNrZ3JvdW5kKTsKKyAgICBpbnQgZmlsbF9tb2RlID0gbV9PcHRpb25zLm1fRmxhZ3M7CisgICAgc3dpdGNoIChwUGF0dGVybi0+bV9TaGFkaW5nVHlwZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBfRHJhd0Z1bmNTaGFkaW5nKHBCaXRtYXAsICZGaW5hbE1hdHJpeCwgcERpY3QsIHBGdW5jcywgbkZ1bmNzLCBwQ29sb3JTcGFjZSwgYWxwaGEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIF9EcmF3QXhpYWxTaGFkaW5nKHBCaXRtYXAsICZGaW5hbE1hdHJpeCwgcERpY3QsIHBGdW5jcywgbkZ1bmNzLCBwQ29sb3JTcGFjZSwgYWxwaGEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIF9EcmF3UmFkaWFsU2hhZGluZyhwQml0bWFwLCAmRmluYWxNYXRyaXgsIHBEaWN0LCBwRnVuY3MsIG5GdW5jcywgcENvbG9yU3BhY2UsIGFscGhhKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6IHsKKyAgICAgICAgICAgICAgICBfRHJhd0ZyZWVHb3VyYXVkU2hhZGluZyhwQml0bWFwLCAmRmluYWxNYXRyaXgsIChDUERGX1N0cmVhbSopcFBhdHRlcm4tPm1fcFNoYWRpbmdPYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEZ1bmNzLCBuRnVuY3MsIHBDb2xvclNwYWNlLCBhbHBoYSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA1OiB7CisgICAgICAgICAgICAgICAgX0RyYXdMYXR0aWNlR291cmF1ZFNoYWRpbmcocEJpdG1hcCwgJkZpbmFsTWF0cml4LCAoQ1BERl9TdHJlYW0qKXBQYXR0ZXJuLT5tX3BTaGFkaW5nT2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBGdW5jcywgbkZ1bmNzLCBwQ29sb3JTcGFjZSwgYWxwaGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNjoKKyAgICAgICAgY2FzZSA3OiB7CisgICAgICAgICAgICAgICAgX0RyYXdDb29uUGF0Y2hNZXNoZXMocFBhdHRlcm4tPm1fU2hhZGluZ1R5cGUgLSA2LCBwQml0bWFwLCAmRmluYWxNYXRyaXgsIChDUERGX1N0cmVhbSopcFBhdHRlcm4tPm1fcFNoYWRpbmdPYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEZ1bmNzLCBuRnVuY3MsIHBDb2xvclNwYWNlLCBmaWxsX21vZGUsIGFscGhhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoYkFscGhhTW9kZSkgeworICAgICAgICBwQml0bWFwLT5Mb2FkQ2hhbm5lbChGWERJQl9SZWQsIHBCaXRtYXAsIEZYRElCX0FscGhhKTsKKyAgICB9CisgICAgaWYgKG1fT3B0aW9ucy5tX0NvbG9yTW9kZSA9PSBSRU5ERVJfQ09MT1JfR1JBWSkgeworICAgICAgICBwQml0bWFwLT5Db252ZXJ0Q29sb3JTY2FsZShtX09wdGlvbnMubV9Gb3JlQ29sb3IsIG1fT3B0aW9ucy5tX0JhY2tDb2xvcik7CisgICAgfQorICAgIGJ1ZmZlci5PdXRwdXRUb0RldmljZSgpOworfQordm9pZCBDUERGX1JlbmRlclN0YXR1czo6RHJhd1NoYWRpbmdQYXR0ZXJuKENQREZfU2hhZGluZ1BhdHRlcm4qIHBhdHRlcm4sIENQREZfUGFnZU9iamVjdCogcFBhZ2VPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlLCBGWF9CT09MIGJTdHJva2UpCit7CisgICAgaWYgKCFwYXR0ZXJuLT5Mb2FkKCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3BEZXZpY2UtPlNhdmVTdGF0ZSgpOworICAgIGlmIChwUGFnZU9iai0+bV9UeXBlID09IFBERlBBR0VfUEFUSCkgeworICAgICAgICBpZiAoIVNlbGVjdENsaXBQYXRoKChDUERGX1BhdGhPYmplY3QqKXBQYWdlT2JqLCBwT2JqMkRldmljZSwgYlN0cm9rZSkpIHsKKyAgICAgICAgICAgIG1fcERldmljZS0+UmVzdG9yZVN0YXRlKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHBQYWdlT2JqLT5tX1R5cGUgPT0gUERGUEFHRV9JTUFHRSkgeworICAgICAgICBGWF9SRUNUIHJlY3QgPSBwUGFnZU9iai0+R2V0QkJveChwT2JqMkRldmljZSk7CisgICAgICAgIG1fcERldmljZS0+U2V0Q2xpcF9SZWN0KCZyZWN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX1JFQ1QgcmVjdDsKKyAgICBpZiAoR2V0T2JqZWN0Q2xpcHBlZFJlY3QocFBhZ2VPYmosIHBPYmoyRGV2aWNlLCBGQUxTRSwgcmVjdCkpIHsKKyAgICAgICAgbV9wRGV2aWNlLT5SZXN0b3JlU3RhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDRlhfQWZmaW5lTWF0cml4IG1hdHJpeCA9IHBhdHRlcm4tPm1fUGF0dGVybjJGb3JtOworICAgIG1hdHJpeC5Db25jYXQoKnBPYmoyRGV2aWNlKTsKKyAgICBHZXRTY2FsZWRNYXRyaXgobWF0cml4KTsKKyAgICBpbnQgYWxwaGEgPSBwUGFnZU9iai0+bV9HZW5lcmFsU3RhdGUuR2V0QWxwaGEoYlN0cm9rZSk7CisgICAgRHJhd1NoYWRpbmcocGF0dGVybiwgJm1hdHJpeCwgcmVjdCwgYWxwaGEsIG1fT3B0aW9ucy5tX0NvbG9yTW9kZSA9PSBSRU5ERVJfQ09MT1JfQUxQSEEpOworICAgIG1fcERldmljZS0+UmVzdG9yZVN0YXRlKCk7Cit9CitGWF9CT09MIENQREZfUmVuZGVyU3RhdHVzOjpQcm9jZXNzU2hhZGluZyhDUERGX1NoYWRpbmdPYmplY3QqIHBTaGFkaW5nT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSkKK3sKKyAgICBGWF9SRUNUIHJlY3QgPSBwU2hhZGluZ09iai0+R2V0QkJveChwT2JqMkRldmljZSk7CisgICAgRlhfUkVDVCBjbGlwX2JveCA9IG1fcERldmljZS0+R2V0Q2xpcEJveCgpOworICAgIHJlY3QuSW50ZXJzZWN0KGNsaXBfYm94KTsKKyAgICBpZiAocmVjdC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4ID0gcFNoYWRpbmdPYmotPm1fTWF0cml4OworICAgIG1hdHJpeC5Db25jYXQoKnBPYmoyRGV2aWNlKTsKKyAgICBEcmF3U2hhZGluZyhwU2hhZGluZ09iai0+bV9wU2hhZGluZywgJm1hdHJpeCwgcmVjdCwgcFNoYWRpbmdPYmotPm1fR2VuZXJhbFN0YXRlLkdldEFscGhhKEZBTFNFKSwKKyAgICAgICAgICAgICAgICBtX09wdGlvbnMubV9Db2xvck1vZGUgPT0gUkVOREVSX0NPTE9SX0FMUEhBKTsKKyNpZmRlZiBfRlBERkFQSV9NSU5JXworICAgIGlmIChtX0RpdGhlckJpdHMpIHsKKyAgICAgICAgRGl0aGVyT2JqZWN0QXJlYShwU2hhZGluZ09iaiwgcE9iajJEZXZpY2UpOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBUUlVFOworfQorc3RhdGljIENGWF9ESUJpdG1hcCogRHJhd1BhdHRlcm5CaXRtYXAoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9QYWdlUmVuZGVyQ2FjaGUqIHBDYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfVGlsaW5nUGF0dGVybiogcFBhdHRlcm4sIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZmxhZ3MpCit7CisgICAgQ0ZYX0RJQml0bWFwKiBwQml0bWFwID0gRlhfTkVXIENGWF9ESUJpdG1hcDsKKyAgICBpZiAoIXBCaXRtYXAtPkNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCBwUGF0dGVybi0+bV9iQ29sb3JlZCA/IEZYRElCX0FyZ2IgOiBGWERJQl84YnBwTWFzaykpIHsKKyAgICAgICAgZGVsZXRlIHBCaXRtYXA7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDRlhfRnhnZURldmljZSBiaXRtYXBfZGV2aWNlOworICAgIGJpdG1hcF9kZXZpY2UuQXR0YWNoKHBCaXRtYXApOworICAgIHBCaXRtYXAtPkNsZWFyKDApOworICAgIENGWF9GbG9hdFJlY3QgY2VsbF9iYm94ID0gcFBhdHRlcm4tPm1fQkJveDsKKyAgICBwUGF0dGVybi0+bV9QYXR0ZXJuMkZvcm0uVHJhbnNmb3JtUmVjdChjZWxsX2Jib3gpOworICAgIHBPYmplY3QyRGV2aWNlLT5UcmFuc2Zvcm1SZWN0KGNlbGxfYmJveCk7CisgICAgQ0ZYX0Zsb2F0UmVjdCBiaXRtYXBfcmVjdCgwLjBmLCAwLjBmLCAoRlhfRkxPQVQpd2lkdGgsIChGWF9GTE9BVCloZWlnaHQpOworICAgIENGWF9BZmZpbmVNYXRyaXggbXRBZGp1c3Q7CisgICAgbXRBZGp1c3QuTWF0Y2hSZWN0KGJpdG1hcF9yZWN0LCBjZWxsX2Jib3gpOworICAgIENGWF9BZmZpbmVNYXRyaXggbXRQYXR0ZXJuMkJpdG1hcCA9ICpwT2JqZWN0MkRldmljZTsKKyAgICBtdFBhdHRlcm4yQml0bWFwLkNvbmNhdChtdEFkanVzdCk7CisgICAgQ1BERl9SZW5kZXJPcHRpb25zIG9wdGlvbnM7CisgICAgaWYgKCFwUGF0dGVybi0+bV9iQ29sb3JlZCkgeworICAgICAgICBvcHRpb25zLm1fQ29sb3JNb2RlID0gUkVOREVSX0NPTE9SX0FMUEhBOworICAgIH0KKyAgICBmbGFncyB8PSBSRU5ERVJfRk9SQ0VfSEFMRlRPTkU7CisgICAgb3B0aW9ucy5tX0ZsYWdzID0gZmxhZ3M7CisgICAgQ1BERl9SZW5kZXJDb250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5DcmVhdGUocERvYywgcENhY2hlLCBOVUxMKTsKKyAgICBjb250ZXh0LkRyYXdPYmplY3RMaXN0KCZiaXRtYXBfZGV2aWNlLCBwUGF0dGVybi0+bV9wRm9ybSwgJm10UGF0dGVybjJCaXRtYXAsICZvcHRpb25zKTsKKyAgICByZXR1cm4gcEJpdG1hcDsKK30KK3ZvaWQgQ1BERl9SZW5kZXJTdGF0dXM6OkRyYXdUaWxpbmdQYXR0ZXJuKENQREZfVGlsaW5nUGF0dGVybiogcFBhdHRlcm4sIENQREZfUGFnZU9iamVjdCogcFBhZ2VPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlLCBGWF9CT09MIGJTdHJva2UpCit7CisgICAgaWYgKCFwUGF0dGVybi0+TG9hZCgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wRGV2aWNlLT5TYXZlU3RhdGUoKTsKKyAgICBpZiAocFBhZ2VPYmotPm1fVHlwZSA9PSBQREZQQUdFX1BBVEgpIHsKKyAgICAgICAgaWYgKCFTZWxlY3RDbGlwUGF0aCgoQ1BERl9QYXRoT2JqZWN0KilwUGFnZU9iaiwgcE9iajJEZXZpY2UsIGJTdHJva2UpKSB7CisgICAgICAgICAgICBtX3BEZXZpY2UtPlJlc3RvcmVTdGF0ZSgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChwUGFnZU9iai0+bV9UeXBlID09IFBERlBBR0VfSU1BR0UpIHsKKyAgICAgICAgRlhfUkVDVCByZWN0ID0gcFBhZ2VPYmotPkdldEJCb3gocE9iajJEZXZpY2UpOworICAgICAgICBtX3BEZXZpY2UtPlNldENsaXBfUmVjdCgmcmVjdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGWF9SRUNUIGNsaXBfYm94ID0gbV9wRGV2aWNlLT5HZXRDbGlwQm94KCk7CisgICAgaWYgKGNsaXBfYm94LklzRW1wdHkoKSkgeworICAgICAgICBtX3BEZXZpY2UtPlJlc3RvcmVTdGF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENGWF9NYXRyaXggZENUTSA9IG1fcERldmljZS0+R2V0Q1RNKCk7CisgICAgRlhfRkxPQVQgc2EgPSBGWFNZU19mYWJzKGRDVE0uYSk7CisgICAgRlhfRkxPQVQgc2QgPSBGWFNZU19mYWJzKGRDVE0uZCk7CisgICAgY2xpcF9ib3gucmlnaHQgPSBjbGlwX2JveC5sZWZ0ICsgKEZYX0lOVDMyKUZYU1lTX2NlaWwoY2xpcF9ib3guV2lkdGgoKSAqIHNhKTsKKyAgICBjbGlwX2JveC5ib3R0b20gPSBjbGlwX2JveC50b3AgKyAoRlhfSU5UMzIpRlhTWVNfY2VpbChjbGlwX2JveC5IZWlnaHQoKSAqIHNkKTsKKyAgICBDRlhfQWZmaW5lTWF0cml4IG10UGF0dGVybjJEZXZpY2UgPSBwUGF0dGVybi0+bV9QYXR0ZXJuMkZvcm07CisgICAgbXRQYXR0ZXJuMkRldmljZS5Db25jYXQoKnBPYmoyRGV2aWNlKTsKKyAgICBHZXRTY2FsZWRNYXRyaXgobXRQYXR0ZXJuMkRldmljZSk7CisgICAgRlhfQk9PTCBiQWxpZ25lZCA9IEZBTFNFOworICAgIGlmIChwUGF0dGVybi0+bV9CQm94LmxlZnQgPT0gMCAmJiBwUGF0dGVybi0+bV9CQm94LmJvdHRvbSA9PSAwICYmCisgICAgICAgICAgICBwUGF0dGVybi0+bV9CQm94LnJpZ2h0ID09IHBQYXR0ZXJuLT5tX1hTdGVwICYmIHBQYXR0ZXJuLT5tX0JCb3gudG9wID09IHBQYXR0ZXJuLT5tX1lTdGVwICYmCisgICAgICAgICAgICAobXRQYXR0ZXJuMkRldmljZS5Jc1NjYWxlZCgpIHx8IG10UGF0dGVybjJEZXZpY2UuSXM5MFJvdGF0ZWQoKSkpIHsKKyAgICAgICAgYkFsaWduZWQgPSBUUlVFOworICAgIH0KKyAgICBDRlhfRmxvYXRSZWN0IGNlbGxfYmJveCA9IHBQYXR0ZXJuLT5tX0JCb3g7CisgICAgbXRQYXR0ZXJuMkRldmljZS5UcmFuc2Zvcm1SZWN0KGNlbGxfYmJveCk7CisgICAgaW50IHdpZHRoID0gKGludClGWFNZU19jZWlsKGNlbGxfYmJveC5XaWR0aCgpKTsKKyAgICBpbnQgaGVpZ2h0ID0gKGludClGWFNZU19jZWlsKGNlbGxfYmJveC5IZWlnaHQoKSk7CisgICAgaWYgKHdpZHRoID09IDApIHsKKyAgICAgICAgd2lkdGggPSAxOworICAgIH0KKyAgICBpZiAoaGVpZ2h0ID09IDApIHsKKyAgICAgICAgaGVpZ2h0ID0gMTsKKyAgICB9CisgICAgaW50IG1pbl9jb2wsIG1heF9jb2wsIG1pbl9yb3csIG1heF9yb3c7CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBtdERldmljZTJQYXR0ZXJuOworICAgIG10RGV2aWNlMlBhdHRlcm4uU2V0UmV2ZXJzZShtdFBhdHRlcm4yRGV2aWNlKTsKKyAgICBDRlhfRmxvYXRSZWN0IGNsaXBfYm94X3AoY2xpcF9ib3gpOworICAgIGNsaXBfYm94X3AuVHJhbnNmb3JtKCZtdERldmljZTJQYXR0ZXJuKTsKKyAgICBtaW5fY29sID0gKGludClGWFNZU19jZWlsKEZYU1lTX0RpdihjbGlwX2JveF9wLmxlZnQgLSBwUGF0dGVybi0+bV9CQm94LnJpZ2h0LCBwUGF0dGVybi0+bV9YU3RlcCkpOworICAgIG1heF9jb2wgPSAoaW50KUZYU1lTX2Zsb29yKEZYU1lTX0RpdihjbGlwX2JveF9wLnJpZ2h0IC0gcFBhdHRlcm4tPm1fQkJveC5sZWZ0LCBwUGF0dGVybi0+bV9YU3RlcCkpOworICAgIG1pbl9yb3cgPSAoaW50KUZYU1lTX2NlaWwoRlhTWVNfRGl2KGNsaXBfYm94X3AuYm90dG9tIC0gcFBhdHRlcm4tPm1fQkJveC50b3AsIHBQYXR0ZXJuLT5tX1lTdGVwKSk7CisgICAgbWF4X3JvdyA9IChpbnQpRlhTWVNfZmxvb3IoRlhTWVNfRGl2KGNsaXBfYm94X3AudG9wIC0gcFBhdHRlcm4tPm1fQkJveC5ib3R0b20sIHBQYXR0ZXJuLT5tX1lTdGVwKSk7CisgICAgaWYgKHdpZHRoID4gY2xpcF9ib3guV2lkdGgoKSB8fCBoZWlnaHQgPiBjbGlwX2JveC5IZWlnaHQoKSB8fCB3aWR0aCAqIGhlaWdodCA+IGNsaXBfYm94LldpZHRoKCkgKiBjbGlwX2JveC5IZWlnaHQoKSkgeworICAgICAgICBDUERGX0dyYXBoaWNTdGF0ZXMqIHBTdGF0ZXMgPSBOVUxMOworICAgICAgICBpZiAoIXBQYXR0ZXJuLT5tX2JDb2xvcmVkKSB7CisgICAgICAgICAgICBwU3RhdGVzID0gQ2xvbmVPYmpTdGF0ZXMocFBhZ2VPYmosIGJTdHJva2UpOworICAgICAgICB9CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcEZvcm1SZXNvdXJjZSA9IE5VTEw7CisgICAgICAgIGlmIChwUGF0dGVybi0+bV9wRm9ybS0+bV9wRm9ybURpY3QpIHsKKyAgICAgICAgICAgIHBGb3JtUmVzb3VyY2UgPSBwUGF0dGVybi0+bV9wRm9ybS0+bV9wRm9ybURpY3QtPkdldERpY3QoRlhfQlNUUkMoIlJlc291cmNlcyIpKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBjb2wgPSBtaW5fY29sOyBjb2wgPD0gbWF4X2NvbDsgY29sICsrKQorICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gbWluX3Jvdzsgcm93IDw9IG1heF9yb3c7IHJvdyArKykgeworICAgICAgICAgICAgICAgIEZYX0ZMT0FUIG9yaWdfeCwgb3JpZ195OworICAgICAgICAgICAgICAgIG9yaWdfeCA9IGNvbCAqIHBQYXR0ZXJuLT5tX1hTdGVwOworICAgICAgICAgICAgICAgIG9yaWdfeSA9IHJvdyAqIHBQYXR0ZXJuLT5tX1lTdGVwOworICAgICAgICAgICAgICAgIG10UGF0dGVybjJEZXZpY2UuVHJhbnNmb3JtKG9yaWdfeCwgb3JpZ195KTsKKyAgICAgICAgICAgICAgICBDRlhfQWZmaW5lTWF0cml4IG1hdHJpeCA9ICpwT2JqMkRldmljZTsKKyAgICAgICAgICAgICAgICBtYXRyaXguVHJhbnNsYXRlKG9yaWdfeCAtIG10UGF0dGVybjJEZXZpY2UuZSwgb3JpZ195IC0gbXRQYXR0ZXJuMkRldmljZS5mKTsKKyAgICAgICAgICAgICAgICBtX3BEZXZpY2UtPlNhdmVTdGF0ZSgpOworICAgICAgICAgICAgICAgIENQREZfUmVuZGVyU3RhdHVzIHN0YXR1czsKKyAgICAgICAgICAgICAgICBzdGF0dXMuSW5pdGlhbGl6ZShtX0xldmVsICsgMSwgbV9wQ29udGV4dCwgbV9wRGV2aWNlLCBOVUxMLCBOVUxMLCB0aGlzLCBwU3RhdGVzLCAmbV9PcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBQYXR0ZXJuLT5tX3BGb3JtLT5tX1RyYW5zcGFyZW5jeSwgbV9iRHJvcE9iamVjdHMsIHBGb3JtUmVzb3VyY2UpOworICAgICAgICAgICAgICAgIHN0YXR1cy5SZW5kZXJPYmplY3RMaXN0KHBQYXR0ZXJuLT5tX3BGb3JtLCAmbWF0cml4KTsKKyAgICAgICAgICAgICAgICBtX3BEZXZpY2UtPlJlc3RvcmVTdGF0ZSgpOworICAgICAgICAgICAgfQorICAgICAgICBtX3BEZXZpY2UtPlJlc3RvcmVTdGF0ZSgpOworICAgICAgICBpZiAocFN0YXRlcykgeworICAgICAgICAgICAgZGVsZXRlIHBTdGF0ZXM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYkFsaWduZWQpIHsKKyAgICAgICAgaW50IG9yaWdfeCA9IEZYU1lTX3JvdW5kKG10UGF0dGVybjJEZXZpY2UuZSk7CisgICAgICAgIGludCBvcmlnX3kgPSBGWFNZU19yb3VuZChtdFBhdHRlcm4yRGV2aWNlLmYpOworICAgICAgICBtaW5fY29sID0gKGNsaXBfYm94LmxlZnQgLSBvcmlnX3gpIC8gd2lkdGg7CisgICAgICAgIGlmIChjbGlwX2JveC5sZWZ0IDwgb3JpZ194KSB7CisgICAgICAgICAgICBtaW5fY29sIC0tOworICAgICAgICB9CisgICAgICAgIG1heF9jb2wgPSAoY2xpcF9ib3gucmlnaHQgLSBvcmlnX3gpIC8gd2lkdGg7CisgICAgICAgIGlmIChjbGlwX2JveC5yaWdodCA8PSBvcmlnX3gpIHsKKyAgICAgICAgICAgIG1heF9jb2wgLS07CisgICAgICAgIH0KKyAgICAgICAgbWluX3JvdyA9IChjbGlwX2JveC50b3AgLSBvcmlnX3kpIC8gaGVpZ2h0OworICAgICAgICBpZiAoY2xpcF9ib3gudG9wIDwgb3JpZ195KSB7CisgICAgICAgICAgICBtaW5fcm93IC0tOworICAgICAgICB9CisgICAgICAgIG1heF9yb3cgPSAoY2xpcF9ib3guYm90dG9tIC0gb3JpZ195KSAvIGhlaWdodDsKKyAgICAgICAgaWYgKGNsaXBfYm94LmJvdHRvbSA8PSBvcmlnX3kpIHsKKyAgICAgICAgICAgIG1heF9yb3cgLS07CisgICAgICAgIH0KKyAgICB9CisgICAgRlhfRkxPQVQgbGVmdF9vZmZzZXQgPSBjZWxsX2Jib3gubGVmdCAtIG10UGF0dGVybjJEZXZpY2UuZTsKKyAgICBGWF9GTE9BVCB0b3Bfb2Zmc2V0ID0gY2VsbF9iYm94LmJvdHRvbSAtIG10UGF0dGVybjJEZXZpY2UuZjsKKyAgICBDRlhfRElCaXRtYXAqIHBQYXR0ZXJuQml0bWFwID0gTlVMTDsKKyAgICBpZiAod2lkdGggKiBoZWlnaHQgPCAxNikgeworICAgICAgICBDRlhfRElCaXRtYXAqIHBFbmxhcmdlZEJpdG1hcCA9IERyYXdQYXR0ZXJuQml0bWFwKG1fcENvbnRleHQtPm1fcERvY3VtZW50LCBtX3BDb250ZXh0LT5tX3BQYWdlQ2FjaGUsIHBQYXR0ZXJuLCBwT2JqMkRldmljZSwgOCwgOCwgbV9PcHRpb25zLm1fRmxhZ3MpOworICAgICAgICBwUGF0dGVybkJpdG1hcCA9IHBFbmxhcmdlZEJpdG1hcC0+U3RyZXRjaFRvKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBkZWxldGUgcEVubGFyZ2VkQml0bWFwOworICAgIH0gZWxzZSB7CisgICAgICAgIHBQYXR0ZXJuQml0bWFwID0gRHJhd1BhdHRlcm5CaXRtYXAobV9wQ29udGV4dC0+bV9wRG9jdW1lbnQsIG1fcENvbnRleHQtPm1fcFBhZ2VDYWNoZSwgcFBhdHRlcm4sIHBPYmoyRGV2aWNlLCB3aWR0aCwgaGVpZ2h0LCBtX09wdGlvbnMubV9GbGFncyk7CisgICAgfQorICAgIGlmIChwUGF0dGVybkJpdG1hcCA9PSBOVUxMKSB7CisgICAgICAgIG1fcERldmljZS0+UmVzdG9yZVN0YXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fT3B0aW9ucy5tX0NvbG9yTW9kZSA9PSBSRU5ERVJfQ09MT1JfR1JBWSkgeworICAgICAgICBwUGF0dGVybkJpdG1hcC0+Q29udmVydENvbG9yU2NhbGUobV9PcHRpb25zLm1fRm9yZUNvbG9yLCBtX09wdGlvbnMubV9CYWNrQ29sb3IpOworICAgIH0KKyAgICBGWF9BUkdCIGZpbGxfYXJnYiA9IEdldEZpbGxBcmdiKHBQYWdlT2JqKTsKKyAgICBpbnQgY2xpcF93aWR0aCA9IGNsaXBfYm94LnJpZ2h0IC0gY2xpcF9ib3gubGVmdDsKKyAgICBpbnQgY2xpcF9oZWlnaHQgPSBjbGlwX2JveC5ib3R0b20gLSBjbGlwX2JveC50b3A7CisgICAgQ0ZYX0RJQml0bWFwIHNjcmVlbjsKKyAgICBpZiAoIXNjcmVlbi5DcmVhdGUoY2xpcF93aWR0aCwgY2xpcF9oZWlnaHQsIEZYRElCX0FyZ2IpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2NyZWVuLkNsZWFyKDApOworICAgIEZYX0RXT1JEKiBzcmNfYnVmID0gKEZYX0RXT1JEKilwUGF0dGVybkJpdG1hcC0+R2V0QnVmZmVyKCk7CisgICAgZm9yIChpbnQgY29sID0gbWluX2NvbDsgY29sIDw9IG1heF9jb2w7IGNvbCArKykgeworICAgICAgICBmb3IgKGludCByb3cgPSBtaW5fcm93OyByb3cgPD0gbWF4X3Jvdzsgcm93ICsrKSB7CisgICAgICAgICAgICBpbnQgc3RhcnRfeCwgc3RhcnRfeTsKKyAgICAgICAgICAgIGlmIChiQWxpZ25lZCkgeworICAgICAgICAgICAgICAgIHN0YXJ0X3ggPSBGWFNZU19yb3VuZChtdFBhdHRlcm4yRGV2aWNlLmUpICsgY29sICogd2lkdGggLSBjbGlwX2JveC5sZWZ0OworICAgICAgICAgICAgICAgIHN0YXJ0X3kgPSBGWFNZU19yb3VuZChtdFBhdHRlcm4yRGV2aWNlLmYpICsgcm93ICogaGVpZ2h0IC0gY2xpcF9ib3gudG9wOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBGWF9GTE9BVCBvcmlnX3ggPSBjb2wgKiBwUGF0dGVybi0+bV9YU3RlcDsKKyAgICAgICAgICAgICAgICBGWF9GTE9BVCBvcmlnX3kgPSByb3cgKiBwUGF0dGVybi0+bV9ZU3RlcDsKKyAgICAgICAgICAgICAgICBtdFBhdHRlcm4yRGV2aWNlLlRyYW5zZm9ybShvcmlnX3gsIG9yaWdfeSk7CisgICAgICAgICAgICAgICAgc3RhcnRfeCA9IEZYU1lTX3JvdW5kKG9yaWdfeCArIGxlZnRfb2Zmc2V0KSAtIGNsaXBfYm94LmxlZnQ7CisgICAgICAgICAgICAgICAgc3RhcnRfeSA9IEZYU1lTX3JvdW5kKG9yaWdfeSArIHRvcF9vZmZzZXQpIC0gY2xpcF9ib3gudG9wOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHdpZHRoID09IDEgJiYgaGVpZ2h0ID09IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnRfeCA8IDAgfHwgc3RhcnRfeCA+PSBjbGlwX2JveC5XaWR0aCgpIHx8IHN0YXJ0X3kgPCAwIHx8IHN0YXJ0X3kgPj0gY2xpcF9ib3guSGVpZ2h0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEZYX0RXT1JEKiBkZXN0X2J1ZiA9IChGWF9EV09SRCopKHNjcmVlbi5HZXRCdWZmZXIoKSArIHNjcmVlbi5HZXRQaXRjaCgpICogc3RhcnRfeSArIHN0YXJ0X3ggKiA0KTsKKyAgICAgICAgICAgICAgICBpZiAocFBhdHRlcm4tPm1fYkNvbG9yZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3RfYnVmID0gKnNyY19idWY7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3RfYnVmID0gKCooRlhfTFBCWVRFKXNyY19idWYgPDwgMjQpIHwgKGZpbGxfYXJnYiAmIDB4ZmZmZmZmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChwUGF0dGVybi0+bV9iQ29sb3JlZCkgeworICAgICAgICAgICAgICAgICAgICBzY3JlZW4uQ29tcG9zaXRlQml0bWFwKHN0YXJ0X3gsIHN0YXJ0X3ksIHdpZHRoLCBoZWlnaHQsIHBQYXR0ZXJuQml0bWFwLCAwLCAwKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzY3JlZW4uQ29tcG9zaXRlTWFzayhzdGFydF94LCBzdGFydF95LCB3aWR0aCwgaGVpZ2h0LCBwUGF0dGVybkJpdG1hcCwgZmlsbF9hcmdiLCAwLCAwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQ29tcG9zaXRlRElCaXRtYXAoJnNjcmVlbiwgY2xpcF9ib3gubGVmdCwgY2xpcF9ib3gudG9wLCAwLCAyNTUsIEZYRElCX0JMRU5EX05PUk1BTCwgRkFMU0UpOworICAgIG1fcERldmljZS0+UmVzdG9yZVN0YXRlKCk7CisgICAgZGVsZXRlIHBQYXR0ZXJuQml0bWFwOworfQordm9pZCBDUERGX1JlbmRlclN0YXR1czo6RHJhd1BhdGhXaXRoUGF0dGVybihDUERGX1BhdGhPYmplY3QqIHBQYXRoT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSwgQ1BERl9Db2xvciogcENvbG9yLCBGWF9CT09MIGJTdHJva2UpCit7CisgICAgQ1BERl9QYXR0ZXJuKiBwYXR0ZXJuID0gcENvbG9yLT5HZXRQYXR0ZXJuKCk7CisgICAgaWYgKHBhdHRlcm4gPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmKHBhdHRlcm4tPm1fUGF0dGVyblR5cGUgPT0gUEFUVEVSTl9USUxJTkcpIHsKKyAgICAgICAgRHJhd1RpbGluZ1BhdHRlcm4oKENQREZfVGlsaW5nUGF0dGVybiopcGF0dGVybiwgcFBhdGhPYmosIHBPYmoyRGV2aWNlLCBiU3Ryb2tlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBEcmF3U2hhZGluZ1BhdHRlcm4oKENQREZfU2hhZGluZ1BhdHRlcm4qKXBhdHRlcm4sIHBQYXRoT2JqLCBwT2JqMkRldmljZSwgYlN0cm9rZSk7CisgICAgfQorfQordm9pZCBDUERGX1JlbmRlclN0YXR1czo6UHJvY2Vzc1BhdGhQYXR0ZXJuKENQREZfUGF0aE9iamVjdCogcFBhdGhPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlLCBpbnQmIGZpbGx0eXBlLCBGWF9CT09MJiBiU3Ryb2tlKQoreworICAgIEZYX0JPT0wgYlBhdHRlcm4gPSBGQUxTRTsKKyAgICBpZihmaWxsdHlwZSkgeworICAgICAgICBDUERGX0NvbG9yJiBGaWxsQ29sb3IgPSAqcFBhdGhPYmotPm1fQ29sb3JTdGF0ZS5HZXRGaWxsQ29sb3IoKTsKKyAgICAgICAgaWYoRmlsbENvbG9yLm1fcENTICYmIEZpbGxDb2xvci5tX3BDUy0+R2V0RmFtaWx5KCkgPT0gUERGQ1NfUEFUVEVSTikgeworICAgICAgICAgICAgRHJhd1BhdGhXaXRoUGF0dGVybihwUGF0aE9iaiwgcE9iajJEZXZpY2UsICZGaWxsQ29sb3IsIEZBTFNFKTsKKyAgICAgICAgICAgIGZpbGx0eXBlID0gMDsKKyAgICAgICAgICAgIGJQYXR0ZXJuID0gVFJVRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZihiU3Ryb2tlKSB7CisgICAgICAgIENQREZfQ29sb3ImIFN0cm9rZUNvbG9yID0gKnBQYXRoT2JqLT5tX0NvbG9yU3RhdGUuR2V0U3Ryb2tlQ29sb3IoKTsKKyAgICAgICAgaWYoU3Ryb2tlQ29sb3IubV9wQ1MgJiYgU3Ryb2tlQ29sb3IubV9wQ1MtPkdldEZhbWlseSgpID09IFBERkNTX1BBVFRFUk4pIHsKKyAgICAgICAgICAgIERyYXdQYXRoV2l0aFBhdHRlcm4ocFBhdGhPYmosIHBPYmoyRGV2aWNlLCAmU3Ryb2tlQ29sb3IsIFRSVUUpOworICAgICAgICAgICAgYlN0cm9rZSA9IEZBTFNFOworICAgICAgICAgICAgYlBhdHRlcm4gPSBUUlVFOworICAgICAgICB9CisgICAgfQorI2lmZGVmIF9GUERGQVBJX01JTklfCisgICAgaWYgKGJQYXR0ZXJuICYmIG1fRGl0aGVyQml0cykgeworICAgICAgICBEaXRoZXJPYmplY3RBcmVhKHBQYXRoT2JqLCBwT2JqMkRldmljZSk7CisgICAgfQorI2VuZGlmCit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcmVuZGVyL2ZwZGZfcmVuZGVyX3RleHQuY3BwIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3JlbmRlci9mcGRmX3JlbmRlcl90ZXh0LmNwcAppbmRleCA5MWZmOTgyLi5hMjZkNjE5IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmYXBpL2ZwZGZfcmVuZGVyL2ZwZGZfcmVuZGVyX3RleHQuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9yZW5kZXIvZnBkZl9yZW5kZXJfdGV4dC5jcHAKQEAgLTEsNzYwICsxLDc2MCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZS5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9yZW5kZXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZW9iai5oIg0KLSNpbmNsdWRlICIuLi9mcGRmX3BhZ2UvcGFnZWludC5oIg0KLSNpbmNsdWRlICJyZW5kZXJfaW50LmgiDQotZXh0ZXJuIEZYX0JPT0wgSXNBdmFpbGFibGVNYXRyaXgoY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCYgbWF0cml4KTsNCi1DUERGX1R5cGUzQ2FjaGU6On5DUERGX1R5cGUzQ2FjaGUoKQ0KLXsNCi0gICAgRlhfUE9TSVRJT04gcG9zID0gbV9TaXplTWFwLkdldFN0YXJ0UG9zaXRpb24oKTsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgS2V5Ow0KLSAgICBDUERGX1R5cGUzR2x5cGhzKiBwU2l6ZUNhY2hlID0gTlVMTDsNCi0gICAgd2hpbGUocG9zKSB7DQotICAgICAgICBwU2l6ZUNhY2hlID0gKENQREZfVHlwZTNHbHlwaHMqKW1fU2l6ZU1hcC5HZXROZXh0VmFsdWUocG9zKTsNCi0gICAgICAgIGRlbGV0ZSBwU2l6ZUNhY2hlOw0KLSAgICB9DQotICAgIG1fU2l6ZU1hcC5SZW1vdmVBbGwoKTsNCi19DQotQ0ZYX0dseXBoQml0bWFwKiBDUERGX1R5cGUzQ2FjaGU6OkxvYWRHbHlwaChGWF9EV09SRCBjaGFyY29kZSwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgRlhfRkxPQVQgcmV0aW5hU2NhbGVYLCBGWF9GTE9BVCByZXRpbmFTY2FsZVkpDQotew0KLSAgICBfQ1BERl9VbmlxdWVLZXlHZW4ga2V5Z2VuOw0KLSAgICBrZXlnZW4uR2VuZXJhdGUoNCwgRlhTWVNfcm91bmQocE1hdHJpeC0+YSAqIDEwMDAwKSwgRlhTWVNfcm91bmQocE1hdHJpeC0+YiAqIDEwMDAwKSwNCi0gICAgICAgICAgICAgICAgICAgIEZYU1lTX3JvdW5kKHBNYXRyaXgtPmMgKiAxMDAwMCksIEZYU1lTX3JvdW5kKHBNYXRyaXgtPmQgKiAxMDAwMCkpOw0KLSAgICBDRlhfQnl0ZVN0cmluZ0MgRmFjZUdseXBoc0tleShrZXlnZW4ubV9LZXksIGtleWdlbi5tX0tleUxlbik7DQotICAgIENQREZfVHlwZTNHbHlwaHMqIHBTaXplQ2FjaGUgPSBOVUxMOw0KLSAgICBpZighbV9TaXplTWFwLkxvb2t1cChGYWNlR2x5cGhzS2V5LCAodm9pZComKXBTaXplQ2FjaGUpKSB7DQotICAgICAgICBwU2l6ZUNhY2hlID0gRlhfTkVXIENQREZfVHlwZTNHbHlwaHM7DQotICAgICAgICBtX1NpemVNYXAuU2V0QXQoRmFjZUdseXBoc0tleSwgcFNpemVDYWNoZSk7DQotICAgIH0NCi0gICAgQ0ZYX0dseXBoQml0bWFwKiBwR2x5cGhCaXRtYXA7DQotICAgIGlmKHBTaXplQ2FjaGUtPm1fR2x5cGhNYXAuTG9va3VwKChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpY2hhcmNvZGUsICh2b2lkKiYpcEdseXBoQml0bWFwKSkgew0KLSAgICAgICAgcmV0dXJuIHBHbHlwaEJpdG1hcDsNCi0gICAgfQ0KLSAgICBwR2x5cGhCaXRtYXAgPSBSZW5kZXJHbHlwaChwU2l6ZUNhY2hlLCBjaGFyY29kZSwgcE1hdHJpeCwgcmV0aW5hU2NhbGVYLCByZXRpbmFTY2FsZVkpOw0KLSAgICBwU2l6ZUNhY2hlLT5tX0dseXBoTWFwLlNldEF0KChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpY2hhcmNvZGUsIHBHbHlwaEJpdG1hcCk7DQotICAgIHJldHVybiBwR2x5cGhCaXRtYXA7DQotfQ0KLUNQREZfVHlwZTNHbHlwaHM6On5DUERGX1R5cGUzR2x5cGhzKCkNCi17DQotICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fR2x5cGhNYXAuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICBGWF9MUFZPSUQgS2V5Ow0KLSAgICBDRlhfR2x5cGhCaXRtYXAqIHBHbHlwaEJpdG1hcDsNCi0gICAgd2hpbGUocG9zKSB7DQotICAgICAgICBtX0dseXBoTWFwLkdldE5leHRBc3NvYyhwb3MsIEtleSwgKHZvaWQqJilwR2x5cGhCaXRtYXApOw0KLSAgICAgICAgZGVsZXRlIHBHbHlwaEJpdG1hcDsNCi0gICAgfQ0KLX0NCi1zdGF0aWMgaW50IF9BZGp1c3RCbHVlKEZYX0ZMT0FUIHBvcywgaW50JiBjb3VudCwgaW50IGJsdWVzW10pDQotew0KLSAgICBGWF9GTE9BVCBtaW5fZGlzdGFuY2UgPSAxMDAwMDAwLjBmICogMS4wZjsNCi0gICAgaW50IGNsb3Nlc3RfcG9zID0gLTE7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkgKyspIHsNCi0gICAgICAgIEZYX0ZMT0FUIGRpc3RhbmNlID0gKEZYX0ZMT0FUKUZYU1lTX2ZhYnMocG9zIC0gKEZYX0ZMT0FUKWJsdWVzW2ldKTsNCi0gICAgICAgIGlmIChkaXN0YW5jZSA8IDEuMGYgKiA4MC4wZiAvIDEwMC4wZiAmJiBkaXN0YW5jZSA8IG1pbl9kaXN0YW5jZSkgew0KLSAgICAgICAgICAgIG1pbl9kaXN0YW5jZSA9IGRpc3RhbmNlOw0KLSAgICAgICAgICAgIGNsb3Nlc3RfcG9zID0gaTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoY2xvc2VzdF9wb3MgPj0gMCkgew0KLSAgICAgICAgcmV0dXJuIGJsdWVzW2Nsb3Nlc3RfcG9zXTsNCi0gICAgfQ0KLSAgICBpbnQgbmV3X3BvcyA9IEZYU1lTX3JvdW5kKHBvcyk7DQotICAgIGlmIChjb3VudCA9PSBUWVBFM19NQVhfQkxVRVMpIHsNCi0gICAgICAgIHJldHVybiBuZXdfcG9zOw0KLSAgICB9DQotICAgIGJsdWVzW2NvdW50KytdID0gbmV3X3BvczsNCi0gICAgcmV0dXJuIG5ld19wb3M7DQotfQ0KLXZvaWQgQ1BERl9UeXBlM0dseXBoczo6QWRqdXN0Qmx1ZShGWF9GTE9BVCB0b3AsIEZYX0ZMT0FUIGJvdHRvbSwgaW50JiB0b3BfbGluZSwgaW50JiBib3R0b21fbGluZSkNCi17DQotICAgIHRvcF9saW5lID0gX0FkanVzdEJsdWUodG9wLCBtX1RvcEJsdWVDb3VudCwgbV9Ub3BCbHVlKTsNCi0gICAgYm90dG9tX2xpbmUgPSBfQWRqdXN0Qmx1ZShib3R0b20sIG1fQm90dG9tQmx1ZUNvdW50LCBtX0JvdHRvbUJsdWUpOw0KLX0NCi1zdGF0aWMgRlhfQk9PTCBfSXNTY2FuTGluZTFicHAoRlhfTFBCWVRFIHBCdWYsIGludCB3aWR0aCkNCi17DQotICAgIGludCBzaXplID0gd2lkdGggLyA4Ow0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkgKyspDQotICAgICAgICBpZiAocEJ1ZltpXSkgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICBpZiAod2lkdGggJSA4KQ0KLSAgICAgICAgaWYgKHBCdWZbd2lkdGggLyA4XSAmICgweGZmIDw8ICg4IC0gd2lkdGggJSA4KSkpIHsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1zdGF0aWMgRlhfQk9PTCBfSXNTY2FuTGluZThicHAoRlhfTFBCWVRFIHBCdWYsIGludCB3aWR0aCkNCi17DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd2lkdGg7IGkgKyspDQotICAgICAgICBpZiAocEJ1ZltpXSA+IDB4NDApIHsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1zdGF0aWMgaW50IF9EZXRlY3RGaXJzdExhc3RTY2FuKGNvbnN0IENGWF9ESUJpdG1hcCogcEJpdG1hcCwgRlhfQk9PTCBiRmlyc3QpDQotew0KLSAgICBpbnQgaGVpZ2h0ID0gcEJpdG1hcC0+R2V0SGVpZ2h0KCksIHBpdGNoID0gcEJpdG1hcC0+R2V0UGl0Y2goKSwgd2lkdGggPSBwQml0bWFwLT5HZXRXaWR0aCgpOw0KLSAgICBpbnQgYnBwID0gcEJpdG1hcC0+R2V0QlBQKCk7DQotICAgIGlmIChicHAgPiA4KSB7DQotICAgICAgICB3aWR0aCAqPSBicHAgLyA4Ow0KLSAgICB9DQotICAgIEZYX0xQQllURSBwQnVmID0gcEJpdG1hcC0+R2V0QnVmZmVyKCk7DQotICAgIGludCBsaW5lID0gYkZpcnN0ID8gMCA6IGhlaWdodCAtIDE7DQotICAgIGludCBsaW5lX3N0ZXAgPSBiRmlyc3QgPyAxIDogLTE7DQotICAgIGludCBsaW5lX2VuZCA9IGJGaXJzdCA/IGhlaWdodCA6IC0xOw0KLSAgICB3aGlsZSAobGluZSAhPSBsaW5lX2VuZCkgew0KLSAgICAgICAgaWYgKGJwcCA9PSAxKSB7DQotICAgICAgICAgICAgaWYgKF9Jc1NjYW5MaW5lMWJwcChwQnVmICsgbGluZSAqIHBpdGNoLCB3aWR0aCkpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAoX0lzU2NhbkxpbmU4YnBwKHBCdWYgKyBsaW5lICogcGl0Y2gsIHdpZHRoKSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gbGluZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBsaW5lICs9IGxpbmVfc3RlcDsNCi0gICAgfQ0KLSAgICByZXR1cm4gLTE7DQotfQ0KLUNGWF9HbHlwaEJpdG1hcCogQ1BERl9UeXBlM0NhY2hlOjpSZW5kZXJHbHlwaChDUERGX1R5cGUzR2x5cGhzKiBwU2l6ZSwgRlhfRFdPUkQgY2hhcmNvZGUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIEZYX0ZMT0FUIHJldGluYVNjYWxlWCwgRlhfRkxPQVQgcmV0aW5hU2NhbGVZKQ0KLXsNCi0gICAgQ1BERl9UeXBlM0NoYXIqIHBDaGFyID0gbV9wRm9udC0+TG9hZENoYXIoY2hhcmNvZGUpOw0KLSAgICBpZiAocENoYXIgPT0gTlVMTCB8fCBwQ2hhci0+bV9wQml0bWFwID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENGWF9ESUJpdG1hcCogcEJpdG1hcCA9IHBDaGFyLT5tX3BCaXRtYXA7DQotICAgIENGWF9BZmZpbmVNYXRyaXggaW1hZ2VfbWF0cml4LCB0ZXh0X21hdHJpeDsNCi0gICAgaW1hZ2VfbWF0cml4ID0gcENoYXItPm1fSW1hZ2VNYXRyaXg7DQotICAgIHRleHRfbWF0cml4LlNldChwTWF0cml4LT5hLCBwTWF0cml4LT5iLCBwTWF0cml4LT5jLCBwTWF0cml4LT5kLCAwLCAwKTsNCi0gICAgaW1hZ2VfbWF0cml4LkNvbmNhdCh0ZXh0X21hdHJpeCk7DQotICAgIENGWF9ESUJpdG1hcCogcFJlc0JpdG1hcCA9IE5VTEw7DQotICAgIGludCBsZWZ0LCB0b3A7DQotICAgIGlmIChGWFNZU19mYWJzKGltYWdlX21hdHJpeC5iKSA8IEZYU1lTX2ZhYnMoaW1hZ2VfbWF0cml4LmEpIC8gMTAwICYmIEZYU1lTX2ZhYnMoaW1hZ2VfbWF0cml4LmMpIDwgRlhTWVNfZmFicyhpbWFnZV9tYXRyaXguZCkgLyAxMDApIHsNCi0gICAgICAgIGludCB0b3BfbGluZSwgYm90dG9tX2xpbmU7DQotICAgICAgICB0b3BfbGluZSA9IF9EZXRlY3RGaXJzdExhc3RTY2FuKHBCaXRtYXAsIFRSVUUpOw0KLSAgICAgICAgYm90dG9tX2xpbmUgPSBfRGV0ZWN0Rmlyc3RMYXN0U2NhbihwQml0bWFwLCBGQUxTRSk7DQotICAgICAgICBpZiAodG9wX2xpbmUgPT0gMCAmJiBib3R0b21fbGluZSA9PSBwQml0bWFwLT5HZXRIZWlnaHQoKSAtIDEpIHsNCi0gICAgICAgICAgICBGWF9GTE9BVCB0b3BfeSA9IGltYWdlX21hdHJpeC5kICsgaW1hZ2VfbWF0cml4LmY7DQotICAgICAgICAgICAgRlhfRkxPQVQgYm90dG9tX3kgPSBpbWFnZV9tYXRyaXguZjsNCi0gICAgICAgICAgICBGWF9CT09MIGJGbGlwcGVkID0gdG9wX3kgPiBib3R0b21feTsNCi0gICAgICAgICAgICBpZiAoYkZsaXBwZWQpIHsNCi0gICAgICAgICAgICAgICAgRlhfRkxPQVQgdGVtcCA9IHRvcF95Ow0KLSAgICAgICAgICAgICAgICB0b3BfeSA9IGJvdHRvbV95Ow0KLSAgICAgICAgICAgICAgICBib3R0b21feSA9IHRlbXA7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHBTaXplLT5BZGp1c3RCbHVlKHRvcF95LCBib3R0b21feSwgdG9wX2xpbmUsIGJvdHRvbV9saW5lKTsNCi0gICAgICAgICAgICBwUmVzQml0bWFwID0gcEJpdG1hcC0+U3RyZXRjaFRvKChpbnQpKEZYU1lTX3JvdW5kKGltYWdlX21hdHJpeC5hKSAqIHJldGluYVNjYWxlWCksIChpbnQpKChiRmxpcHBlZCA/IHRvcF9saW5lIC0gYm90dG9tX2xpbmUgOiBib3R0b21fbGluZSAtIHRvcF9saW5lKSAqIHJldGluYVNjYWxlWSkpOw0KLSAgICAgICAgICAgIHRvcCA9IHRvcF9saW5lOw0KLSAgICAgICAgICAgIGlmIChpbWFnZV9tYXRyaXguYSA8IDApIHsNCi0gICAgICAgICAgICAgICAgaW1hZ2VfbWF0cml4LlNjYWxlKHJldGluYVNjYWxlWCwgcmV0aW5hU2NhbGVZKTsNCi0gICAgICAgICAgICAgICAgbGVmdCA9IEZYU1lTX3JvdW5kKGltYWdlX21hdHJpeC5lICsgaW1hZ2VfbWF0cml4LmEpOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGxlZnQgPSBGWFNZU19yb3VuZChpbWFnZV9tYXRyaXguZSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAocFJlc0JpdG1hcCA9PSBOVUxMKSB7DQotICAgICAgICBpbWFnZV9tYXRyaXguU2NhbGUocmV0aW5hU2NhbGVYLCByZXRpbmFTY2FsZVkpOw0KLSAgICAgICAgcFJlc0JpdG1hcCA9IHBCaXRtYXAtPlRyYW5zZm9ybVRvKCZpbWFnZV9tYXRyaXgsIGxlZnQsIHRvcCk7DQotICAgIH0NCi0gICAgaWYgKHBSZXNCaXRtYXAgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ0ZYX0dseXBoQml0bWFwKiBwR2x5cGggPSBGWF9ORVcgQ0ZYX0dseXBoQml0bWFwOw0KLSAgICBwR2x5cGgtPm1fTGVmdCA9IGxlZnQ7DQotICAgIHBHbHlwaC0+bV9Ub3AgPSAtdG9wOw0KLSAgICBwR2x5cGgtPm1fQml0bWFwLlRha2VPdmVyKHBSZXNCaXRtYXApOw0KLSAgICBkZWxldGUgcFJlc0JpdG1hcDsNCi0gICAgcmV0dXJuIHBHbHlwaDsNCi19DQotdm9pZCBfQ1BERl9VbmlxdWVLZXlHZW46OkdlbmVyYXRlKGludCBjb3VudCwgLi4uKQ0KLXsNCi0gICAgdmFfbGlzdCBhcmdMaXN0Ow0KLSAgICB2YV9zdGFydChhcmdMaXN0LCBjb3VudCk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkgKyspIHsNCi0gICAgICAgIGludCBwID0gdmFfYXJnKGFyZ0xpc3QsIGludCk7DQotICAgICAgICAoKEZYX0RXT1JEKiltX0tleSlbaV0gPSBwOw0KLSAgICB9DQotICAgIHZhX2VuZChhcmdMaXN0KTsNCi0gICAgbV9LZXlMZW4gPSBjb3VudCAqIHNpemVvZihGWF9EV09SRCk7DQotfQ0KLUZYX0JPT0wgQ1BERl9SZW5kZXJTdGF0dXM6OlByb2Nlc3NUZXh0KGNvbnN0IENQREZfVGV4dE9iamVjdCogdGV4dG9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UsIENGWF9QYXRoRGF0YSogcENsaXBwaW5nUGF0aCkNCi17DQotICAgIGlmKHRleHRvYmotPm1fbkNoYXJzID09IDApIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIGludCB0ZXh0X3JlbmRlcl9tb2RlID0gdGV4dG9iai0+bV9UZXh0U3RhdGUuR2V0T2JqZWN0KCktPm1fVGV4dE1vZGU7DQotICAgIGlmICh0ZXh0X3JlbmRlcl9tb2RlID09IDMpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIENQREZfRm9udCogcEZvbnQgPSB0ZXh0b2JqLT5tX1RleHRTdGF0ZS5HZXRGb250KCk7DQotICAgIGlmIChwRm9udC0+R2V0Rm9udFR5cGUoKSA9PSBQREZGT05UX1RZUEUzKSB7DQotICAgICAgICByZXR1cm4gUHJvY2Vzc1R5cGUzVGV4dCh0ZXh0b2JqLCBwT2JqMkRldmljZSk7DQotICAgIH0NCi0gICAgRlhfQk9PTCBiRmlsbCA9IEZBTFNFLCBiU3Ryb2tlID0gRkFMU0UsIGJDbGlwID0gRkFMU0U7DQotICAgIGlmIChwQ2xpcHBpbmdQYXRoKSB7DQotICAgICAgICBiQ2xpcCA9IFRSVUU7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBzd2l0Y2ggKHRleHRfcmVuZGVyX21vZGUpIHsNCi0gICAgICAgICAgICBjYXNlIDA6DQotICAgICAgICAgICAgY2FzZSA0Og0KLSAgICAgICAgICAgICAgICBiRmlsbCA9IFRSVUU7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgMToNCi0gICAgICAgICAgICBjYXNlIDU6DQotICAgICAgICAgICAgICAgIGlmIChwRm9udC0+R2V0RmFjZSgpID09IE5VTEwgJiYgIShwRm9udC0+R2V0U3Vic3RGb250KCktPm1fU3Vic3RGbGFncyAmIEZYRk9OVF9TVUJTVF9HTFlQSFBBVEgpKSB7DQotICAgICAgICAgICAgICAgICAgICBiRmlsbCA9IFRSVUU7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBiU3Ryb2tlID0gVFJVRTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDI6DQotICAgICAgICAgICAgY2FzZSA2Og0KLSAgICAgICAgICAgICAgICBpZiAocEZvbnQtPkdldEZhY2UoKSA9PSBOVUxMICYmICEocEZvbnQtPkdldFN1YnN0Rm9udCgpLT5tX1N1YnN0RmxhZ3MgJiBGWEZPTlRfU1VCU1RfR0xZUEhQQVRIKSkgew0KLSAgICAgICAgICAgICAgICAgICAgYkZpbGwgPSBUUlVFOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgYkZpbGwgPSBiU3Ryb2tlID0gVFJVRTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDM6DQotICAgICAgICAgICAgY2FzZSA3Og0KLSAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgICAgICBkZWZhdWx0Og0KLSAgICAgICAgICAgICAgICBiRmlsbCA9IFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhfQVJHQiBzdHJva2VfYXJnYiA9IDAsIGZpbGxfYXJnYiA9IDA7DQotICAgIEZYX0JPT0wgYlBhdHRlcm4gPSBGQUxTRTsNCi0gICAgaWYgKGJTdHJva2UpIHsNCi0gICAgICAgIGlmICh0ZXh0b2JqLT5tX0NvbG9yU3RhdGUuR2V0U3Ryb2tlQ29sb3IoKS0+SXNQYXR0ZXJuKCkpIHsNCi0gICAgICAgICAgICBiUGF0dGVybiA9IFRSVUU7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHN0cm9rZV9hcmdiID0gR2V0U3Ryb2tlQXJnYih0ZXh0b2JqKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoYkZpbGwpIHsNCi0gICAgICAgIGlmICh0ZXh0b2JqLT5tX0NvbG9yU3RhdGUuR2V0RmlsbENvbG9yKCktPklzUGF0dGVybigpKSB7DQotICAgICAgICAgICAgYlBhdHRlcm4gPSBUUlVFOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBmaWxsX2FyZ2IgPSBHZXRGaWxsQXJnYih0ZXh0b2JqKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDRlhfQWZmaW5lTWF0cml4IHRleHRfbWF0cml4Ow0KLSAgICB0ZXh0b2JqLT5HZXRUZXh0TWF0cml4KCZ0ZXh0X21hdHJpeCk7DQotICAgIGlmKElzQXZhaWxhYmxlTWF0cml4KHRleHRfbWF0cml4KSA9PSBGQUxTRSkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgRlhfRkxPQVQgZm9udF9zaXplID0gdGV4dG9iai0+bV9UZXh0U3RhdGUuR2V0Rm9udFNpemUoKTsNCi0gICAgaWYgKGJQYXR0ZXJuKSB7DQotICAgICAgICBEcmF3VGV4dFBhdGhXaXRoUGF0dGVybih0ZXh0b2JqLCBwT2JqMkRldmljZSwgcEZvbnQsIGZvbnRfc2l6ZSwgJnRleHRfbWF0cml4LCBiRmlsbCwgYlN0cm9rZSk7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSNpZiBkZWZpbmVkKF9GUERGQVBJX01JTklfKQ0KLSAgICBpZiAoYkZpbGwpIHsNCi0gICAgICAgIGJTdHJva2UgPSBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoYlN0cm9rZSkgew0KLSAgICAgICAgaWYgKGZvbnRfc2l6ZSAqIHRleHRfbWF0cml4LkdldFhVbml0KCkgKiBwT2JqMkRldmljZS0+R2V0WFVuaXQoKSA8IDYpIHsNCi0gICAgICAgICAgICBiU3Ryb2tlID0gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0jZW5kaWYNCi0gICAgaWYgKGJDbGlwIHx8IGJTdHJva2UpIHsNCi0gICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBEZXZpY2VNYXRyaXggPSBwT2JqMkRldmljZTsNCi0gICAgICAgIENGWF9BZmZpbmVNYXRyaXggZGV2aWNlX21hdHJpeDsNCi0gICAgICAgIGlmIChiU3Ryb2tlKSB7DQotICAgICAgICAgICAgY29uc3QgRlhfRkxPQVQqIHBDVE0gPSB0ZXh0b2JqLT5tX1RleHRTdGF0ZS5HZXRPYmplY3QoKS0+bV9DVE07DQotICAgICAgICAgICAgaWYgKHBDVE1bMF0gIT0gMS4wZiB8fCBwQ1RNWzNdICE9IDEuMGYpIHsNCi0gICAgICAgICAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCBjdG0ocENUTVswXSwgcENUTVsxXSwgcENUTVsyXSwgcENUTVszXSwgMCwgMCk7DQotICAgICAgICAgICAgICAgIHRleHRfbWF0cml4LkNvbmNhdEludmVyc2UoY3RtKTsNCi0gICAgICAgICAgICAgICAgZGV2aWNlX21hdHJpeC5Db3B5KGN0bSk7DQotICAgICAgICAgICAgICAgIGRldmljZV9tYXRyaXguQ29uY2F0KCpwT2JqMkRldmljZSk7DQotICAgICAgICAgICAgICAgIHBEZXZpY2VNYXRyaXggPSAmZGV2aWNlX21hdHJpeDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpbnQgZmxhZyA9IDA7DQotICAgICAgICBpZiAoYlN0cm9rZSAmJiBiRmlsbCkgew0KLSAgICAgICAgICAgIGZsYWcgfD0gRlhfRklMTF9TVFJPS0U7DQotICAgICAgICAgICAgZmxhZyB8PSBGWF9TVFJPS0VfVEVYVF9NT0RFOw0KLSAgICAgICAgfQ0KLSNpZiAhZGVmaW5lZChfRlBERkFQSV9NSU5JXykgfHwgZGVmaW5lZChfRlhDT1JFX0ZFQVRVUkVfQUxMXykNCi0gICAgICAgIGNvbnN0IENQREZfR2VuZXJhbFN0YXRlRGF0YSogcEdlbmVyYWxEYXRhID0gKChDUERGX1BhZ2VPYmplY3QqKXRleHRvYmopLT5tX0dlbmVyYWxTdGF0ZTsNCi0gICAgICAgIGlmIChwR2VuZXJhbERhdGEgJiYgcEdlbmVyYWxEYXRhLT5tX1N0cm9rZUFkanVzdCkgew0KLSAgICAgICAgICAgIGZsYWcgfD0gRlhfU1RST0tFX0FESlVTVDsNCi0gICAgICAgIH0NCi0jZW5kaWYNCi0gICAgICAgIGlmIChtX09wdGlvbnMubV9GbGFncyAmIFJFTkRFUl9OT1RFWFRTTU9PVEgpIHsNCi0gICAgICAgICAgICBmbGFnIHw9IEZYRklMTF9OT1BBVEhTTU9PVEg7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gQ1BERl9UZXh0UmVuZGVyZXI6OkRyYXdUZXh0UGF0aChtX3BEZXZpY2UsIHRleHRvYmotPm1fbkNoYXJzLCB0ZXh0b2JqLT5tX3BDaGFyQ29kZXMsIHRleHRvYmotPm1fcENoYXJQb3MsIHBGb250LCBmb250X3NpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGV4dF9tYXRyaXgsIHBEZXZpY2VNYXRyaXgsIHRleHRvYmotPm1fR3JhcGhTdGF0ZSwgZmlsbF9hcmdiLCBzdHJva2VfYXJnYiwgcENsaXBwaW5nUGF0aCwgZmxhZyk7DQotICAgIH0NCi0gICAgdGV4dF9tYXRyaXguQ29uY2F0KCpwT2JqMkRldmljZSk7DQotICAgIHJldHVybiBDUERGX1RleHRSZW5kZXJlcjo6RHJhd05vcm1hbFRleHQobV9wRGV2aWNlLCB0ZXh0b2JqLT5tX25DaGFycywgdGV4dG9iai0+bV9wQ2hhckNvZGVzLCB0ZXh0b2JqLT5tX3BDaGFyUG9zLCBwRm9udCwgZm9udF9zaXplLA0KLSAgICAgICAgICAgICZ0ZXh0X21hdHJpeCwgZmlsbF9hcmdiLCAmbV9PcHRpb25zKTsNCi19DQotQ1BERl9UeXBlM0NhY2hlKiBDUERGX1JlbmRlclN0YXR1czo6R2V0Q2FjaGVkVHlwZTMoQ1BERl9UeXBlM0ZvbnQqIHBGb250KQ0KLXsNCi0gICAgaWYgKHBGb250LT5tX3BEb2N1bWVudCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBwRm9udC0+bV9wRG9jdW1lbnQtPkdldFBhZ2VEYXRhKCktPkdldEZvbnQocEZvbnQtPkdldEZvbnREaWN0KCksIEZBTFNFKTsNCi0gICAgcmV0dXJuIHBGb250LT5tX3BEb2N1bWVudC0+R2V0UmVuZGVyRGF0YSgpLT5HZXRDYWNoZWRUeXBlMyhwRm9udCk7DQotfQ0KLXN0YXRpYyB2b2lkIFJlbGVhc2VDYWNoZWRUeXBlMyhDUERGX1R5cGUzRm9udCogcEZvbnQpDQotew0KLSAgICBpZiAocEZvbnQtPm1fcERvY3VtZW50ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBwRm9udC0+bV9wRG9jdW1lbnQtPkdldFJlbmRlckRhdGEoKS0+UmVsZWFzZUNhY2hlZFR5cGUzKHBGb250KTsNCi0gICAgcEZvbnQtPm1fcERvY3VtZW50LT5HZXRQYWdlRGF0YSgpLT5SZWxlYXNlRm9udChwRm9udC0+R2V0Rm9udERpY3QoKSk7DQotfQ0KLUZYX0JPT0wgQ1BERl9UeXBlM0NoYXI6OkxvYWRCaXRtYXAoQ1BERl9SZW5kZXJDb250ZXh0KiBwQ29udGV4dCkNCi17DQotICAgIGlmIChtX3BCaXRtYXAgIT0gTlVMTCB8fCBtX3BGb3JtID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIGlmIChtX3BGb3JtLT5Db3VudE9iamVjdHMoKSA9PSAxICYmICFtX2JDb2xvcmVkKSB7DQotICAgICAgICBDUERGX1BhZ2VPYmplY3QgKnBQYWdlT2JqID0gbV9wRm9ybS0+R2V0T2JqZWN0QXQobV9wRm9ybS0+R2V0Rmlyc3RPYmplY3RQb3NpdGlvbigpKTsNCi0gICAgICAgIGlmIChwUGFnZU9iai0+bV9UeXBlID09IFBERlBBR0VfSU1BR0UpIHsNCi0gICAgICAgICAgICBDUERGX0ltYWdlT2JqZWN0KiBwSW1hZ2UgPSAoQ1BERl9JbWFnZU9iamVjdCopcFBhZ2VPYmo7DQotICAgICAgICAgICAgbV9JbWFnZU1hdHJpeCA9IHBJbWFnZS0+bV9NYXRyaXg7DQotICAgICAgICAgICAgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNvdXJjZSA9IHBJbWFnZS0+bV9wSW1hZ2UtPkxvYWRESUJTb3VyY2UoKTsNCi0gICAgICAgICAgICBpZiAocFNvdXJjZSkgew0KLSAgICAgICAgICAgICAgICBtX3BCaXRtYXAgPSBwU291cmNlLT5DbG9uZSgpOw0KLSAgICAgICAgICAgICAgICBkZWxldGUgcFNvdXJjZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZGVsZXRlIG1fcEZvcm07DQotICAgICAgICAgICAgbV9wRm9ybSA9IE5VTEw7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgICAgICBpZiAocFBhZ2VPYmotPm1fVHlwZSA9PSBQREZQQUdFX0lOTElORVMpIHsNCi0gICAgICAgICAgICBDUERGX0lubGluZUltYWdlcyAqcElubGluZXMgPSAoQ1BERl9JbmxpbmVJbWFnZXMgKilwUGFnZU9iajsNCi0gICAgICAgICAgICBpZiAocElubGluZXMtPm1fcFN0cmVhbSkgew0KLSAgICAgICAgICAgICAgICBtX0ltYWdlTWF0cml4ID0gcElubGluZXMtPm1fTWF0cmljZXNbMF07DQotICAgICAgICAgICAgICAgIENQREZfRElCU291cmNlIGRpYnNyYzsNCi0gICAgICAgICAgICAgICAgaWYgKCFkaWJzcmMuTG9hZChwQ29udGV4dC0+bV9wRG9jdW1lbnQsIHBJbmxpbmVzLT5tX3BTdHJlYW0sIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbV9wQml0bWFwID0gZGlic3JjLkNsb25lKCk7DQotICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3BGb3JtOw0KLSAgICAgICAgICAgICAgICBtX3BGb3JtID0gTlVMTDsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotY2xhc3MgQ1BERl9SZWZUeXBlM0NhY2hlDQotew0KLXB1YmxpYzoNCi0gICAgQ1BERl9SZWZUeXBlM0NhY2hlKENQREZfVHlwZTNGb250KiBwVHlwZTNGb250KQ0KLSAgICB7DQotICAgICAgICBtX2R3Q291bnQgPSAwOw0KLSAgICAgICAgbV9wVHlwZTNGb250ID0gcFR5cGUzRm9udDsNCi0gICAgfQ0KLSAgICB+Q1BERl9SZWZUeXBlM0NhY2hlKCkNCi0gICAgew0KLSAgICAgICAgd2hpbGUobV9kd0NvdW50LS0pIHsNCi0gICAgICAgICAgICBSZWxlYXNlQ2FjaGVkVHlwZTMobV9wVHlwZTNGb250KTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBGWF9EV09SRCBtX2R3Q291bnQ7DQotICAgIENQREZfVHlwZTNGb250KiBtX3BUeXBlM0ZvbnQ7DQotfTsNCi1GWF9CT09MIENQREZfUmVuZGVyU3RhdHVzOjpQcm9jZXNzVHlwZTNUZXh0KGNvbnN0IENQREZfVGV4dE9iamVjdCogdGV4dG9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpDQotew0KLSAgICBDUERGX1R5cGUzRm9udCogcFR5cGUzRm9udCA9IHRleHRvYmotPm1fVGV4dFN0YXRlLkdldEZvbnQoKS0+R2V0VHlwZTNGb250KCk7DQotICAgIGZvciAoaW50IGogPSAwOyBqIDwgbV9UeXBlM0ZvbnRDYWNoZS5HZXRTaXplKCk7IGorKykNCi0gICAgICAgIGlmICgoQ1BERl9UeXBlM0ZvbnQqKW1fVHlwZTNGb250Q2FjaGUuR2V0QXQoaikgPT0gcFR5cGUzRm9udCkgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICBDRlhfTWF0cml4IGRDVE0gPSBtX3BEZXZpY2UtPkdldENUTSgpOw0KLSAgICBGWF9GTE9BVCBzYSA9IEZYU1lTX2ZhYnMoZENUTS5hKTsNCi0gICAgRlhfRkxPQVQgc2QgPSBGWFNZU19mYWJzKGRDVE0uZCk7DQotICAgIENGWF9BZmZpbmVNYXRyaXggdGV4dF9tYXRyaXg7DQotICAgIHRleHRvYmotPkdldFRleHRNYXRyaXgoJnRleHRfbWF0cml4KTsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBjaGFyX21hdHJpeCA9IHBUeXBlM0ZvbnQtPkdldEZvbnRNYXRyaXgoKTsNCi0gICAgRlhfRkxPQVQgZm9udF9zaXplID0gdGV4dG9iai0+bV9UZXh0U3RhdGUuR2V0Rm9udFNpemUoKTsNCi0gICAgY2hhcl9tYXRyaXguU2NhbGUoZm9udF9zaXplLCBmb250X3NpemUpOw0KLSAgICBGWF9BUkdCIGZpbGxfYXJnYiA9IEdldEZpbGxBcmdiKHRleHRvYmosIFRSVUUpOw0KLSAgICBpbnQgZmlsbF9hbHBoYSA9IEZYQVJHQl9BKGZpbGxfYXJnYik7DQotICAgIGludCBkZXZpY2VfY2xhc3MgPSBtX3BEZXZpY2UtPkdldERldmljZUNsYXNzKCk7DQotICAgIEZYVEVYVF9HTFlQSFBPUyogcEdseXBoQW5kUG9zID0gTlVMTDsNCi0gICAgaWYgKGRldmljZV9jbGFzcyA9PSBGWERDX0RJU1BMQVkpIHsNCi0gICAgICAgIHBHbHlwaEFuZFBvcyA9IEZYX0FsbG9jKEZYVEVYVF9HTFlQSFBPUywgdGV4dG9iai0+bV9uQ2hhcnMpOw0KLSAgICAgICAgRlhTWVNfbWVtc2V0MzIocEdseXBoQW5kUG9zLCAwLCBzaXplb2YoRlhURVhUX0dMWVBIUE9TKSAqIHRleHRvYmotPm1fbkNoYXJzKTsNCi0gICAgfSBlbHNlIGlmIChmaWxsX2FscGhhIDwgMjU1KSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ1BERl9SZWZUeXBlM0NhY2hlIHJlZlR5cGVDYWNoZShwVHlwZTNGb250KTsNCi0gICAgRlhfRFdPUkQgKnBDaGFycyA9IHRleHRvYmotPm1fcENoYXJDb2RlczsNCi0gICAgaWYgKHRleHRvYmotPm1fbkNoYXJzID09IDEpIHsNCi0gICAgICAgIHBDaGFycyA9IChGWF9EV09SRCopKCZ0ZXh0b2JqLT5tX3BDaGFyQ29kZXMpOw0KLSAgICB9DQotICAgIGZvciAoaW50IGlDaGFyID0gMDsgaUNoYXIgPCB0ZXh0b2JqLT5tX25DaGFyczsgaUNoYXIgKyspIHsNCi0gICAgICAgIEZYX0RXT1JEIGNoYXJjb2RlID0gcENoYXJzW2lDaGFyXTsNCi0gICAgICAgIGlmIChjaGFyY29kZSA9PSAoRlhfRFdPUkQpIC0gMSkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1BERl9UeXBlM0NoYXIqIHBUeXBlM0NoYXIgPSBwVHlwZTNGb250LT5Mb2FkQ2hhcihjaGFyY29kZSk7DQotICAgICAgICBpZiAocFR5cGUzQ2hhciA9PSBOVUxMKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBDRlhfQWZmaW5lTWF0cml4IG1hdHJpeCA9IGNoYXJfbWF0cml4Ow0KLSAgICAgICAgbWF0cml4LmUgKz0gaUNoYXIgPyB0ZXh0b2JqLT5tX3BDaGFyUG9zW2lDaGFyIC0gMV0gOiAwOw0KLSAgICAgICAgbWF0cml4LkNvbmNhdCh0ZXh0X21hdHJpeCk7DQotICAgICAgICBtYXRyaXguQ29uY2F0KCpwT2JqMkRldmljZSk7DQotICAgICAgICBpZiAoIXBUeXBlM0NoYXItPkxvYWRCaXRtYXAobV9wQ29udGV4dCkpIHsNCi0gICAgICAgICAgICBpZiAocEdseXBoQW5kUG9zKSB7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaUNoYXI7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYVEVYVF9HTFlQSFBPUyYgZ2x5cGggPSBwR2x5cGhBbmRQb3NbaV07DQotICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGgubV9wR2x5cGggPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgbV9wRGV2aWNlLT5TZXRCaXRNYXNrKCZnbHlwaC5tX3BHbHlwaC0+bV9CaXRtYXAsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGgubV9PcmlnaW5YICsgZ2x5cGgubV9wR2x5cGgtPm1fTGVmdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaC5tX09yaWdpblkgLSBnbHlwaC5tX3BHbHlwaC0+bV9Ub3AsIGZpbGxfYXJnYik7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgRlhfRnJlZShwR2x5cGhBbmRQb3MpOw0KLSAgICAgICAgICAgICAgICBwR2x5cGhBbmRQb3MgPSBOVUxMOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBDUERGX0dyYXBoaWNTdGF0ZXMqIHBTdGF0ZXMgPSBDbG9uZU9ialN0YXRlcyh0ZXh0b2JqLCBGQUxTRSk7DQotICAgICAgICAgICAgQ1BERl9SZW5kZXJPcHRpb25zIE9wdGlvbnMgPSBtX09wdGlvbnM7DQotICAgICAgICAgICAgT3B0aW9ucy5tX0ZsYWdzIHw9IFJFTkRFUl9GT1JDRV9IQUxGVE9ORSB8IFJFTkRFUl9SRUNUX0FBOw0KLSAgICAgICAgICAgIE9wdGlvbnMubV9GbGFncyAmPSB+UkVOREVSX0ZPUkNFX0RPV05TQU1QTEU7DQotICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybVJlc291cmNlID0gTlVMTDsNCi0gICAgICAgICAgICBpZiAocFR5cGUzQ2hhci0+bV9wRm9ybSAmJiBwVHlwZTNDaGFyLT5tX3BGb3JtLT5tX3BGb3JtRGljdCkgew0KLSAgICAgICAgICAgICAgICBwRm9ybVJlc291cmNlID0gcFR5cGUzQ2hhci0+bV9wRm9ybS0+bV9wRm9ybURpY3QtPkdldERpY3QoRlhfQlNUUkMoIlJlc291cmNlcyIpKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGZpbGxfYWxwaGEgPT0gMjU1KSB7DQotICAgICAgICAgICAgICAgIENQREZfUmVuZGVyU3RhdHVzIHN0YXR1czsNCi0gICAgICAgICAgICAgICAgc3RhdHVzLkluaXRpYWxpemUobV9MZXZlbCArIDEsIG1fcENvbnRleHQsIG1fcERldmljZSwgTlVMTCwgTlVMTCwgdGhpcywgcFN0YXRlcywgJk9wdGlvbnMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBUeXBlM0NoYXItPm1fcEZvcm0tPm1fVHJhbnNwYXJlbmN5LCBtX2JEcm9wT2JqZWN0cywgcEZvcm1SZXNvdXJjZSwgRkFMU0UsIHBUeXBlM0NoYXIsIGZpbGxfYXJnYik7DQotICAgICAgICAgICAgICAgIHN0YXR1cy5tX1R5cGUzRm9udENhY2hlLkFwcGVuZChtX1R5cGUzRm9udENhY2hlKTsNCi0gICAgICAgICAgICAgICAgc3RhdHVzLm1fVHlwZTNGb250Q2FjaGUuQWRkKHBUeXBlM0ZvbnQpOw0KLSAgICAgICAgICAgICAgICBtX3BEZXZpY2UtPlNhdmVTdGF0ZSgpOw0KLSAgICAgICAgICAgICAgICBzdGF0dXMuUmVuZGVyT2JqZWN0TGlzdChwVHlwZTNDaGFyLT5tX3BGb3JtLCAmbWF0cml4KTsNCi0gICAgICAgICAgICAgICAgbV9wRGV2aWNlLT5SZXN0b3JlU3RhdGUoKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBDRlhfRmxvYXRSZWN0IHJlY3RfZiA9IHBUeXBlM0NoYXItPm1fcEZvcm0tPkNhbGNCb3VuZGluZ0JveCgpOw0KLSAgICAgICAgICAgICAgICByZWN0X2YuVHJhbnNmb3JtKCZtYXRyaXgpOw0KLSAgICAgICAgICAgICAgICBGWF9SRUNUIHJlY3QgPSByZWN0X2YuR2V0T3V0dGVyUmVjdCgpOw0KLSAgICAgICAgICAgICAgICBDRlhfRnhnZURldmljZSBiaXRtYXBfZGV2aWNlOw0KLSAgICAgICAgICAgICAgICBpZiAoIWJpdG1hcF9kZXZpY2UuQ3JlYXRlKChpbnQpKHJlY3QuV2lkdGgoKSAqIHNhKSwgKGludCkocmVjdC5IZWlnaHQoKSAqIHNkKSwgRlhESUJfQXJnYikpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJpdG1hcF9kZXZpY2UuR2V0Qml0bWFwKCktPkNsZWFyKDApOw0KLSAgICAgICAgICAgICAgICBDUERGX1JlbmRlclN0YXR1cyBzdGF0dXM7DQotICAgICAgICAgICAgICAgIHN0YXR1cy5Jbml0aWFsaXplKG1fTGV2ZWwgKyAxLCBtX3BDb250ZXh0LCAmYml0bWFwX2RldmljZSwgTlVMTCwgTlVMTCwgdGhpcywgcFN0YXRlcywgJk9wdGlvbnMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBUeXBlM0NoYXItPm1fcEZvcm0tPm1fVHJhbnNwYXJlbmN5LCBtX2JEcm9wT2JqZWN0cywgcEZvcm1SZXNvdXJjZSwgRkFMU0UsIHBUeXBlM0NoYXIsIGZpbGxfYXJnYik7DQotICAgICAgICAgICAgICAgIHN0YXR1cy5tX1R5cGUzRm9udENhY2hlLkFwcGVuZChtX1R5cGUzRm9udENhY2hlKTsNCi0gICAgICAgICAgICAgICAgc3RhdHVzLm1fVHlwZTNGb250Q2FjaGUuQWRkKHBUeXBlM0ZvbnQpOw0KLSAgICAgICAgICAgICAgICBtYXRyaXguVHJhbnNsYXRlSSgtcmVjdC5sZWZ0LCAtcmVjdC50b3ApOw0KLSAgICAgICAgICAgICAgICBtYXRyaXguU2NhbGUoc2EsIHNkKTsNCi0gICAgICAgICAgICAgICAgc3RhdHVzLlJlbmRlck9iamVjdExpc3QocFR5cGUzQ2hhci0+bV9wRm9ybSwgJm1hdHJpeCk7DQotICAgICAgICAgICAgICAgIG1fcERldmljZS0+U2V0RElCaXRzKGJpdG1hcF9kZXZpY2UuR2V0Qml0bWFwKCksIHJlY3QubGVmdCwgcmVjdC50b3ApOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBkZWxldGUgcFN0YXRlczsNCi0gICAgICAgIH0gZWxzZSBpZiAocFR5cGUzQ2hhci0+bV9wQml0bWFwKSB7DQotICAgICAgICAgICAgaWYgKGRldmljZV9jbGFzcyA9PSBGWERDX0RJU1BMQVkpIHsNCi0gICAgICAgICAgICAgICAgQ1BERl9UeXBlM0NhY2hlKiBwQ2FjaGUgPSBHZXRDYWNoZWRUeXBlMyhwVHlwZTNGb250KTsNCi0gICAgICAgICAgICAgICAgcmVmVHlwZUNhY2hlLm1fZHdDb3VudCsrOw0KLSAgICAgICAgICAgICAgICBDRlhfR2x5cGhCaXRtYXAqIHBCaXRtYXAgPSBwQ2FjaGUtPkxvYWRHbHlwaChjaGFyY29kZSwgJm1hdHJpeCwgc2EsIHNkKTsNCi0gICAgICAgICAgICAgICAgaWYgKHBCaXRtYXAgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaW50IG9yaWdpbl94ID0gRlhTWVNfcm91bmQobWF0cml4LmUpOw0KLSAgICAgICAgICAgICAgICBpbnQgb3JpZ2luX3kgPSBGWFNZU19yb3VuZChtYXRyaXguZik7DQotICAgICAgICAgICAgICAgIGlmIChwR2x5cGhBbmRQb3MpIHsNCi0gICAgICAgICAgICAgICAgICAgIHBHbHlwaEFuZFBvc1tpQ2hhcl0ubV9wR2x5cGggPSBwQml0bWFwOw0KLSAgICAgICAgICAgICAgICAgICAgcEdseXBoQW5kUG9zW2lDaGFyXS5tX09yaWdpblggPSBvcmlnaW5feDsNCi0gICAgICAgICAgICAgICAgICAgIHBHbHlwaEFuZFBvc1tpQ2hhcl0ubV9PcmlnaW5ZID0gb3JpZ2luX3k7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBtX3BEZXZpY2UtPlNldEJpdE1hc2soJnBCaXRtYXAtPm1fQml0bWFwLCBvcmlnaW5feCArIHBCaXRtYXAtPm1fTGVmdCwgb3JpZ2luX3kgLSBwQml0bWFwLT5tX1RvcCwgZmlsbF9hcmdiKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIENGWF9BZmZpbmVNYXRyaXggaW1hZ2VfbWF0cml4ID0gcFR5cGUzQ2hhci0+bV9JbWFnZU1hdHJpeDsNCi0gICAgICAgICAgICAgICAgaW1hZ2VfbWF0cml4LkNvbmNhdChtYXRyaXgpOw0KLSAgICAgICAgICAgICAgICBDUERGX0ltYWdlUmVuZGVyZXIgcmVuZGVyZXI7DQotICAgICAgICAgICAgICAgIGlmIChyZW5kZXJlci5TdGFydCh0aGlzLCBwVHlwZTNDaGFyLT5tX3BCaXRtYXAsIGZpbGxfYXJnYiwgMjU1LCAmaW1hZ2VfbWF0cml4LCAwLCBGQUxTRSkpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLkNvbnRpbnVlKE5VTEwpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmICghcmVuZGVyZXIubV9SZXN1bHQpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAocEdseXBoQW5kUG9zKSB7DQotICAgICAgICBGWF9SRUNUIHJlY3QgPSBGWEdFX0dldEdseXBoc0JCb3gocEdseXBoQW5kUG9zLCB0ZXh0b2JqLT5tX25DaGFycywgMCwgc2EsIHNkKTsNCi0gICAgICAgIENGWF9ESUJpdG1hcCBiaXRtYXA7DQotICAgICAgICBpZiAoIWJpdG1hcC5DcmVhdGUoKGludCkocmVjdC5XaWR0aCgpICogc2EpLCAoaW50KShyZWN0LkhlaWdodCgpICogc2QpLCBGWERJQl84YnBwTWFzaykpIHsNCi0gICAgICAgICAgICBGWF9GcmVlKHBHbHlwaEFuZFBvcyk7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgICAgICBiaXRtYXAuQ2xlYXIoMCk7DQotICAgICAgICBmb3IgKGludCBpQ2hhciA9IDA7IGlDaGFyIDwgdGV4dG9iai0+bV9uQ2hhcnM7IGlDaGFyICsrKSB7DQotICAgICAgICAgICAgRlhURVhUX0dMWVBIUE9TJiBnbHlwaCA9IHBHbHlwaEFuZFBvc1tpQ2hhcl07DQotICAgICAgICAgICAgaWYgKGdseXBoLm1fcEdseXBoID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGJpdG1hcC5UcmFuc2ZlckJpdG1hcCgoaW50KSgoZ2x5cGgubV9PcmlnaW5YICsgZ2x5cGgubV9wR2x5cGgtPm1fTGVmdCAtIHJlY3QubGVmdCkgKiBzYSksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKChnbHlwaC5tX09yaWdpblkgLSBnbHlwaC5tX3BHbHlwaC0+bV9Ub3AgLSByZWN0LnRvcCkgKiBzZCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoLm1fcEdseXBoLT5tX0JpdG1hcC5HZXRXaWR0aCgpLCBnbHlwaC5tX3BHbHlwaC0+bV9CaXRtYXAuR2V0SGVpZ2h0KCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnbHlwaC5tX3BHbHlwaC0+bV9CaXRtYXAsIDAsIDApOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wRGV2aWNlLT5TZXRCaXRNYXNrKCZiaXRtYXAsIHJlY3QubGVmdCwgcmVjdC50b3AsIGZpbGxfYXJnYik7DQotICAgICAgICBGWF9GcmVlKHBHbHlwaEFuZFBvcyk7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLWNsYXNzIENQREZfQ2hhclBvc0xpc3QNCi17DQotcHVibGljOg0KLSAgICBDUERGX0NoYXJQb3NMaXN0KCk7DQotICAgIH5DUERGX0NoYXJQb3NMaXN0KCk7DQotICAgIHZvaWQJCQkJTG9hZChpbnQgbkNoYXJzLCBGWF9EV09SRCogcENoYXJDb2RlcywgRlhfRkxPQVQqIHBDaGFyUG9zLCBDUERGX0ZvbnQqIHBGb250LCBGWF9GTE9BVCBmb250X3NpemUpOw0KLSAgICBGWFRFWFRfQ0hBUlBPUyoJCW1fcENoYXJQb3M7DQotICAgIEZYX0RXT1JECQkJbV9uQ2hhcnM7DQotfTsNCi1GWF9GTE9BVCBfQ0lEVHJhbnNmb3JtVG9GbG9hdChGWF9CWVRFIGNoKTsNCi1DUERGX0NoYXJQb3NMaXN0OjpDUERGX0NoYXJQb3NMaXN0KCkNCi17DQotICAgIG1fcENoYXJQb3MgPSBOVUxMOw0KLX0NCi1DUERGX0NoYXJQb3NMaXN0Ojp+Q1BERl9DaGFyUG9zTGlzdCgpDQotew0KLSAgICBpZiAobV9wQ2hhclBvcykgew0KLSAgICAgICAgRlhfRnJlZShtX3BDaGFyUG9zKTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfQ2hhclBvc0xpc3Q6OkxvYWQoaW50IG5DaGFycywgRlhfRFdPUkQqIHBDaGFyQ29kZXMsIEZYX0ZMT0FUKiBwQ2hhclBvcywgQ1BERl9Gb250KiBwRm9udCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQgRm9udFNpemUpDQotew0KLSAgICBtX3BDaGFyUG9zID0gRlhfQWxsb2MoRlhURVhUX0NIQVJQT1MsIG5DaGFycyk7DQotICAgIEZYU1lTX21lbXNldDMyKG1fcENoYXJQb3MsIDAsIHNpemVvZihGWFRFWFRfQ0hBUlBPUykgKiBuQ2hhcnMpOw0KLSAgICBtX25DaGFycyA9IDA7DQotICAgIENQREZfQ0lERm9udCogcENJREZvbnQgPSBwRm9udC0+R2V0Q0lERm9udCgpOw0KLSAgICBGWF9CT09MIGJWZXJ0V3JpdGluZyA9IHBDSURGb250ICYmIHBDSURGb250LT5Jc1ZlcnRXcml0aW5nKCk7DQotICAgIGZvciAoaW50IGlDaGFyID0gMDsgaUNoYXIgPCBuQ2hhcnM7IGlDaGFyICsrKSB7DQotICAgICAgICBGWF9EV09SRCBDaGFyQ29kZSA9IG5DaGFycyA9PSAxID8gKEZYX0RXT1JEKShGWF9VSU5UUFRSKXBDaGFyQ29kZXMgOiBwQ2hhckNvZGVzW2lDaGFyXTsNCi0gICAgICAgIGlmIChDaGFyQ29kZSA9PSAoRlhfRFdPUkQpIC0gMSkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfQk9PTCBiVmVydCA9IEZBTFNFOw0KLSAgICAgICAgRlhURVhUX0NIQVJQT1MmIGNoYXJwb3MgPSBtX3BDaGFyUG9zW21fbkNoYXJzKytdOw0KLSAgICAgICAgaWYgKHBDSURGb250KSB7DQotICAgICAgICAgICAgY2hhcnBvcy5tX2JGb250U3R5bGUgPSBwQ0lERm9udC0+SXNGb250U3R5bGVGcm9tQ2hhckNvZGUoQ2hhckNvZGUpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgY2hhcnBvcy5tX0dseXBoSW5kZXggPSBwRm9udC0+R2x5cGhGcm9tQ2hhckNvZGUoQ2hhckNvZGUsICZiVmVydCk7DQotI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXw0KLSAgICAgICAgY2hhcnBvcy5tX0V4dEdJRCA9IHBGb250LT5HbHlwaEZyb21DaGFyQ29kZUV4dChDaGFyQ29kZSk7DQotI2VuZGlmDQotICAgICAgICBpZiAoIXBGb250LT5Jc0VtYmVkZGVkKCkgJiYgcEZvbnQtPkdldEZvbnRUeXBlKCkgIT0gUERGRk9OVF9DSURGT05UKSB7DQotICAgICAgICAgICAgY2hhcnBvcy5tX0ZvbnRDaGFyV2lkdGggPSBwRm9udC0+R2V0Q2hhcldpZHRoRihDaGFyQ29kZSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGNoYXJwb3MubV9Gb250Q2hhcldpZHRoID0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIGNoYXJwb3MubV9PcmlnaW5YID0gaUNoYXIgPyBwQ2hhclBvc1tpQ2hhciAtIDFdIDogMDsNCi0gICAgICAgIGNoYXJwb3MubV9PcmlnaW5ZID0gMDsNCi0gICAgICAgIGNoYXJwb3MubV9iR2x5cGhBZGp1c3QgPSBGQUxTRTsNCi0gICAgICAgIGlmIChwQ0lERm9udCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBGWF9XT1JEIENJRCA9IHBDSURGb250LT5DSURGcm9tQ2hhckNvZGUoQ2hhckNvZGUpOw0KLSAgICAgICAgaWYgKGJWZXJ0V3JpdGluZykgew0KLSAgICAgICAgICAgIGNoYXJwb3MubV9PcmlnaW5ZID0gY2hhcnBvcy5tX09yaWdpblg7DQotICAgICAgICAgICAgY2hhcnBvcy5tX09yaWdpblggPSAwOw0KLSAgICAgICAgICAgIHNob3J0IHZ4LCB2eTsNCi0gICAgICAgICAgICBwQ0lERm9udC0+R2V0VmVydE9yaWdpbihDSUQsIHZ4LCB2eSk7DQotICAgICAgICAgICAgY2hhcnBvcy5tX09yaWdpblggLT0gRm9udFNpemUgKiB2eCAvIDEwMDA7DQotICAgICAgICAgICAgY2hhcnBvcy5tX09yaWdpblkgLT0gRm9udFNpemUgKiB2eSAvIDEwMDA7DQotICAgICAgICB9DQotICAgICAgICBGWF9MUENCWVRFIHBUcmFuc2Zvcm0gPSBwQ0lERm9udC0+R2V0Q0lEVHJhbnNmb3JtKENJRCk7DQotICAgICAgICBpZiAocFRyYW5zZm9ybSAmJiAhYlZlcnQpIHsNCi0gICAgICAgICAgICBjaGFycG9zLm1fQWRqdXN0TWF0cml4WzBdID0gX0NJRFRyYW5zZm9ybVRvRmxvYXQocFRyYW5zZm9ybVswXSk7DQotICAgICAgICAgICAgY2hhcnBvcy5tX0FkanVzdE1hdHJpeFsyXSA9IF9DSURUcmFuc2Zvcm1Ub0Zsb2F0KHBUcmFuc2Zvcm1bMl0pOw0KLSAgICAgICAgICAgIGNoYXJwb3MubV9BZGp1c3RNYXRyaXhbMV0gPSBfQ0lEVHJhbnNmb3JtVG9GbG9hdChwVHJhbnNmb3JtWzFdKTsNCi0gICAgICAgICAgICBjaGFycG9zLm1fQWRqdXN0TWF0cml4WzNdID0gX0NJRFRyYW5zZm9ybVRvRmxvYXQocFRyYW5zZm9ybVszXSk7DQotICAgICAgICAgICAgY2hhcnBvcy5tX09yaWdpblggKz0gX0NJRFRyYW5zZm9ybVRvRmxvYXQocFRyYW5zZm9ybVs0XSkgKiBGb250U2l6ZTsNCi0gICAgICAgICAgICBjaGFycG9zLm1fT3JpZ2luWSArPSBfQ0lEVHJhbnNmb3JtVG9GbG9hdChwVHJhbnNmb3JtWzVdKSAqIEZvbnRTaXplOw0KLSAgICAgICAgICAgIGNoYXJwb3MubV9iR2x5cGhBZGp1c3QgPSBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BERl9UZXh0UmVuZGVyZXI6OkRyYXdUZXh0UGF0aChDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBpbnQgbkNoYXJzLCBGWF9EV09SRCogcENoYXJDb2RlcywgRlhfRkxPQVQqIHBDaGFyUG9zLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0ZvbnQqIHBGb250LCBGWF9GTE9BVCBmb250X3NpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBUZXh0MlVzZXIsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBVc2VyMkRldmljZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQVJHQiBmaWxsX2FyZ2IsIEZYX0FSR0Igc3Ryb2tlX2FyZ2IsIENGWF9QYXRoRGF0YSogcENsaXBwaW5nUGF0aCwgaW50IG5GbGFnKQ0KLXsNCi0gICAgQ0ZYX0ZvbnRDYWNoZSogcENhY2hlID0gcEZvbnQtPm1fcERvY3VtZW50ID8gcEZvbnQtPm1fcERvY3VtZW50LT5HZXRSZW5kZXJEYXRhKCktPkdldEZvbnRDYWNoZSgpIDogTlVMTDsNCi0gICAgQ1BERl9DaGFyUG9zTGlzdCBDaGFyUG9zTGlzdDsNCi0gICAgQ2hhclBvc0xpc3QuTG9hZChuQ2hhcnMsIHBDaGFyQ29kZXMsIHBDaGFyUG9zLCBwRm9udCwgZm9udF9zaXplKTsNCi0gICAgcmV0dXJuIHBEZXZpY2UtPkRyYXdUZXh0UGF0aChDaGFyUG9zTGlzdC5tX25DaGFycywgQ2hhclBvc0xpc3QubV9wQ2hhclBvcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcEZvbnQtPm1fRm9udCwgcENhY2hlLCBmb250X3NpemUsIHBUZXh0MlVzZXIsIHBVc2VyMkRldmljZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwR3JhcGhTdGF0ZSwgZmlsbF9hcmdiLCBzdHJva2VfYXJnYiwgcENsaXBwaW5nUGF0aCwgbkZsYWcpOw0KLX0NCi12b2lkIENQREZfVGV4dFJlbmRlcmVyOjpEcmF3VGV4dFN0cmluZyhDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBpbnQgbGVmdCwgaW50IHRvcCwgQ1BERl9Gb250KiBwRm9udCwgaW50IGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyLCBGWF9BUkdCIGFyZ2IpDQotew0KLSAgICBGWF9SRUNUIGZvbnRfYmJveDsNCi0gICAgcEZvbnQtPkdldEZvbnRCQm94KGZvbnRfYmJveCk7DQotICAgIEZYX0ZMT0FUIGZvbnRfc2l6ZSA9IChGWF9GTE9BVCloZWlnaHQgKiAxMDAwLjBmIC8gKEZYX0ZMT0FUKShmb250X2Jib3gudG9wIC0gZm9udF9iYm94LmJvdHRvbSk7DQotICAgIEZYX0ZMT0FUIG9yaWdpbl94ID0gKEZYX0ZMT0FUKWxlZnQ7DQotICAgIEZYX0ZMT0FUIG9yaWdpbl95ID0gKEZYX0ZMT0FUKXRvcCArIGZvbnRfc2l6ZSAqIChGWF9GTE9BVClmb250X2Jib3gudG9wIC8gMTAwMC4wZjsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXgoMS4wZiwgMCwgMCwgLTEuMGYsIDAsIDApOw0KLSAgICBEcmF3VGV4dFN0cmluZyhwRGV2aWNlLCBvcmlnaW5feCwgb3JpZ2luX3ksIHBGb250LCBmb250X3NpemUsICZtYXRyaXgsIHN0ciwgYXJnYik7DQotfQ0KLXZvaWQgQ1BERl9UZXh0UmVuZGVyZXI6OkRyYXdUZXh0U3RyaW5nKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIEZYX0ZMT0FUIG9yaWdpbl94LCBGWF9GTE9BVCBvcmlnaW5feSwgQ1BERl9Gb250KiBwRm9udCwgRlhfRkxPQVQgZm9udF9zaXplLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIsIEZYX0FSR0IgZmlsbF9hcmdiLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0FSR0Igc3Ryb2tlX2FyZ2IsIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUsIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMpDQotew0KLSAgICBpbnQgbkNoYXJzID0gcEZvbnQtPkNvdW50Q2hhcihzdHIsIHN0ci5HZXRMZW5ndGgoKSk7DQotICAgIGlmIChuQ2hhcnMgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX0RXT1JEIGNoYXJjb2RlOw0KLSAgICBpbnQgb2Zmc2V0ID0gMDsNCi0gICAgRlhfRFdPUkQqIHBDaGFyQ29kZXM7DQotICAgIEZYX0ZMT0FUKiBwQ2hhclBvczsNCi0gICAgaWYgKG5DaGFycyA9PSAxKSB7DQotICAgICAgICBjaGFyY29kZSA9IHBGb250LT5HZXROZXh0Q2hhcihzdHIsIG9mZnNldCk7DQotICAgICAgICBwQ2hhckNvZGVzID0gKEZYX0RXT1JEKikoRlhfVUlOVFBUUiljaGFyY29kZTsNCi0gICAgICAgIHBDaGFyUG9zID0gTlVMTDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHBDaGFyQ29kZXMgPSBGWF9BbGxvYyhGWF9EV09SRCwgbkNoYXJzKTsNCi0gICAgICAgIHBDaGFyUG9zID0gRlhfQWxsb2MoRlhfRkxPQVQsIG5DaGFycyAtIDEpOw0KLSAgICAgICAgRlhfRkxPQVQgY3VyX3BvcyA9IDA7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5DaGFyczsgaSArKykgew0KLSAgICAgICAgICAgIHBDaGFyQ29kZXNbaV0gPSBwRm9udC0+R2V0TmV4dENoYXIoc3RyLCBvZmZzZXQpOw0KLSAgICAgICAgICAgIGlmIChpKSB7DQotICAgICAgICAgICAgICAgIHBDaGFyUG9zW2kgLSAxXSA9IGN1cl9wb3M7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGN1cl9wb3MgKz0gcEZvbnQtPkdldENoYXJXaWR0aEYocENoYXJDb2Rlc1tpXSkgKiBmb250X3NpemUgLyAxMDAwOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4Ow0KLSAgICBpZiAocE1hdHJpeCkgew0KLSAgICAgICAgbWF0cml4ID0gKnBNYXRyaXg7DQotICAgIH0NCi0gICAgbWF0cml4LmUgPSBvcmlnaW5feDsNCi0gICAgbWF0cml4LmYgPSBvcmlnaW5feTsNCi0gICAgaWYgKHBGb250LT5HZXRGb250VHlwZSgpID09IFBERkZPTlRfVFlQRTMpDQotICAgICAgICA7DQotICAgIGVsc2UgaWYgKHN0cm9rZV9hcmdiID09IDApIHsNCi0gICAgICAgIERyYXdOb3JtYWxUZXh0KHBEZXZpY2UsIG5DaGFycywgcENoYXJDb2RlcywgcENoYXJQb3MsIHBGb250LCBmb250X3NpemUsICZtYXRyaXgsIGZpbGxfYXJnYiwgcE9wdGlvbnMpOw0KLSAgICB9IGVsc2UNCi0gICAgICAgIERyYXdUZXh0UGF0aChwRGV2aWNlLCBuQ2hhcnMsIHBDaGFyQ29kZXMsIHBDaGFyUG9zLCBwRm9udCwgZm9udF9zaXplLCAmbWF0cml4LCBOVUxMLCBwR3JhcGhTdGF0ZSwNCi0gICAgICAgICAgICAgICAgICAgICBmaWxsX2FyZ2IsIHN0cm9rZV9hcmdiLCBOVUxMKTsNCi0gICAgaWYgKG5DaGFycyA+IDEpIHsNCi0gICAgICAgIEZYX0ZyZWUocENoYXJDb2Rlcyk7DQotICAgICAgICBGWF9GcmVlKHBDaGFyUG9zKTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENQREZfVGV4dFJlbmRlcmVyOjpEcmF3Tm9ybWFsVGV4dChDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBpbnQgbkNoYXJzLCBGWF9EV09SRCogcENoYXJDb2RlcywgRlhfRkxPQVQqIHBDaGFyUG9zLA0KLSAgICAgICAgQ1BERl9Gb250KiBwRm9udCwgRlhfRkxPQVQgZm9udF9zaXplLA0KLSAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcFRleHQyRGV2aWNlLA0KLSAgICAgICAgRlhfQVJHQiBmaWxsX2FyZ2IsIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMpDQotew0KLSAgICBDRlhfRm9udENhY2hlKiBwQ2FjaGUgPSBwRm9udC0+bV9wRG9jdW1lbnQgPyBwRm9udC0+bV9wRG9jdW1lbnQtPkdldFJlbmRlckRhdGEoKS0+R2V0Rm9udENhY2hlKCkgOiBOVUxMOw0KLSAgICBDUERGX0NoYXJQb3NMaXN0IENoYXJQb3NMaXN0Ow0KLSAgICBDaGFyUG9zTGlzdC5Mb2FkKG5DaGFycywgcENoYXJDb2RlcywgcENoYXJQb3MsIHBGb250LCBmb250X3NpemUpOw0KLSAgICBpbnQgRlhHRV9mbGFncyA9IDA7DQotICAgIGlmIChwT3B0aW9ucykgew0KLSAgICAgICAgRlhfRFdPUkQgZHdGbGFncyA9IHBPcHRpb25zLT5tX0ZsYWdzOw0KLSAgICAgICAgaWYgKGR3RmxhZ3MgJiBSRU5ERVJfQ0xFQVJUWVBFKSB7DQotICAgICAgICAgICAgRlhHRV9mbGFncyB8PSBGWFRFWFRfQ0xFQVJUWVBFOw0KLSAgICAgICAgICAgIGlmIChkd0ZsYWdzICYgUkVOREVSX0JHUl9TVFJJUEUpIHsNCi0gICAgICAgICAgICAgICAgRlhHRV9mbGFncyB8PSBGWFRFWFRfQkdSX1NUUklQRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAoZHdGbGFncyAmIFJFTkRFUl9OT1RFWFRTTU9PVEgpIHsNCi0gICAgICAgICAgICBGWEdFX2ZsYWdzIHw9IEZYVEVYVF9OT1NNT09USDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChkd0ZsYWdzICYgUkVOREVSX1BSSU5UR1JBUEhJQ1RFWFQpIHsNCi0gICAgICAgICAgICBGWEdFX2ZsYWdzIHw9IEZYVEVYVF9QUklOVEdSQVBISUNURVhUOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGR3RmxhZ3MgJiBSRU5ERVJfTk9fTkFUSVZFVEVYVCkgew0KLSAgICAgICAgICAgIEZYR0VfZmxhZ3MgfD0gRlhURVhUX05PX05BVElWRVRFWFQ7DQotICAgICAgICB9DQotICAgICAgICBpZiAoZHdGbGFncyAmIFJFTkRFUl9QUklOVElNQUdFVEVYVCkgew0KLSAgICAgICAgICAgIEZYR0VfZmxhZ3MgfD0gRlhURVhUX1BSSU5USU1BR0VURVhUOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgRlhHRV9mbGFncyA9IEZYVEVYVF9DTEVBUlRZUEU7DQotICAgIH0NCi0gICAgaWYgKHBGb250LT5HZXRGb250VHlwZSgpICYgUERGRk9OVF9DSURGT05UKSB7DQotICAgICAgICBGWEdFX2ZsYWdzIHw9IEZYRk9OVF9DSURGT05UOw0KLSAgICB9DQotICAgIHJldHVybiBwRGV2aWNlLT5EcmF3Tm9ybWFsVGV4dChDaGFyUG9zTGlzdC5tX25DaGFycywgQ2hhclBvc0xpc3QubV9wQ2hhclBvcywgJnBGb250LT5tX0ZvbnQsIHBDYWNoZSwgZm9udF9zaXplLCBwVGV4dDJEZXZpY2UsIGZpbGxfYXJnYiwgRlhHRV9mbGFncyk7DQotfQ0KLXZvaWQgQ1BERl9SZW5kZXJTdGF0dXM6OkRyYXdUZXh0UGF0aFdpdGhQYXR0ZXJuKGNvbnN0IENQREZfVGV4dE9iamVjdCogdGV4dG9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UsDQotICAgICAgICBDUERGX0ZvbnQqIHBGb250LCBGWF9GTE9BVCBmb250X3NpemUsDQotICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwVGV4dE1hdHJpeCwgRlhfQk9PTCBiRmlsbCwgRlhfQk9PTCBiU3Ryb2tlKQ0KLXsNCi0gICAgaWYgKCFiU3Ryb2tlKSB7DQotICAgICAgICBDUERGX1BhdGhPYmplY3QgcGF0aDsNCi0gICAgICAgIENQREZfVGV4dE9iamVjdCogcENvcHkgPSBGWF9ORVcgQ1BERl9UZXh0T2JqZWN0Ow0KLSAgICAgICAgcENvcHktPkNvcHkodGV4dG9iaik7DQotICAgICAgICBwYXRoLm1fYlN0cm9rZSA9IEZBTFNFOw0KLSAgICAgICAgcGF0aC5tX0ZpbGxUeXBlID0gRlhGSUxMX1dJTkRJTkc7DQotICAgICAgICBwYXRoLm1fQ2xpcFBhdGguQXBwZW5kVGV4dHMoJnBDb3B5LCAxKTsNCi0gICAgICAgIHBhdGgubV9Db2xvclN0YXRlID0gdGV4dG9iai0+bV9Db2xvclN0YXRlOw0KLSAgICAgICAgcGF0aC5tX1BhdGguTmV3KCktPkFwcGVuZFJlY3QodGV4dG9iai0+bV9MZWZ0LCB0ZXh0b2JqLT5tX0JvdHRvbSwgdGV4dG9iai0+bV9SaWdodCwgdGV4dG9iai0+bV9Ub3ApOw0KLSAgICAgICAgcGF0aC5tX0xlZnQgPSB0ZXh0b2JqLT5tX0xlZnQ7DQotICAgICAgICBwYXRoLm1fQm90dG9tID0gdGV4dG9iai0+bV9Cb3R0b207DQotICAgICAgICBwYXRoLm1fUmlnaHQgPSB0ZXh0b2JqLT5tX1JpZ2h0Ow0KLSAgICAgICAgcGF0aC5tX1RvcCA9IHRleHRvYmotPm1fVG9wOw0KLSAgICAgICAgUmVuZGVyU2luZ2xlT2JqZWN0KCZwYXRoLCBwT2JqMkRldmljZSk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ0ZYX0ZvbnRDYWNoZSogcENhY2hlOw0KLSAgICBpZiAocEZvbnQtPm1fcERvY3VtZW50KSB7DQotICAgICAgICBwQ2FjaGUgPSBwRm9udC0+bV9wRG9jdW1lbnQtPkdldFJlbmRlckRhdGEoKS0+R2V0Rm9udENhY2hlKCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBwQ2FjaGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRGb250Q2FjaGUoKTsNCi0gICAgfQ0KLSAgICBDRlhfRmFjZUNhY2hlKiBwRmFjZUNhY2hlID0gcENhY2hlLT5HZXRDYWNoZWRGYWNlKCZwRm9udC0+bV9Gb250KTsNCi0gICAgRlhfRk9OVENBQ0hFX0RFRklORShwQ2FjaGUsICZwRm9udC0+bV9Gb250KTsNCi0gICAgQ1BERl9DaGFyUG9zTGlzdCBDaGFyUG9zTGlzdDsNCi0gICAgQ2hhclBvc0xpc3QuTG9hZCh0ZXh0b2JqLT5tX25DaGFycywgdGV4dG9iai0+bV9wQ2hhckNvZGVzLCB0ZXh0b2JqLT5tX3BDaGFyUG9zLCBwRm9udCwgZm9udF9zaXplKTsNCi0gICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IENoYXJQb3NMaXN0Lm1fbkNoYXJzOyBpICsrKSB7DQotICAgICAgICBGWFRFWFRfQ0hBUlBPUyYgY2hhcnBvcyA9IENoYXJQb3NMaXN0Lm1fcENoYXJQb3NbaV07DQotICAgICAgICBjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoID0gcEZhY2VDYWNoZS0+TG9hZEdseXBoUGF0aCgmcEZvbnQtPm1fRm9udCwgY2hhcnBvcy5tX0dseXBoSW5kZXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnBvcy5tX0ZvbnRDaGFyV2lkdGgpOw0KLSAgICAgICAgaWYgKHBQYXRoID09IE5VTEwpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIENQREZfUGF0aE9iamVjdCBwYXRoOw0KLSAgICAgICAgcGF0aC5tX0dyYXBoU3RhdGUgPSB0ZXh0b2JqLT5tX0dyYXBoU3RhdGU7DQotICAgICAgICBwYXRoLm1fQ29sb3JTdGF0ZSA9IHRleHRvYmotPm1fQ29sb3JTdGF0ZTsNCi0gICAgICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4Ow0KLSAgICAgICAgaWYgKGNoYXJwb3MubV9iR2x5cGhBZGp1c3QpDQotICAgICAgICAgICAgbWF0cml4LlNldChjaGFycG9zLm1fQWRqdXN0TWF0cml4WzBdLCBjaGFycG9zLm1fQWRqdXN0TWF0cml4WzFdLA0KLSAgICAgICAgICAgICAgICAgICAgICAgY2hhcnBvcy5tX0FkanVzdE1hdHJpeFsyXSwgY2hhcnBvcy5tX0FkanVzdE1hdHJpeFszXSwgMCwgMCk7DQotICAgICAgICBtYXRyaXguQ29uY2F0KGZvbnRfc2l6ZSwgMCwgMCwgZm9udF9zaXplLCBjaGFycG9zLm1fT3JpZ2luWCwgY2hhcnBvcy5tX09yaWdpblkpOw0KLSAgICAgICAgcGF0aC5tX1BhdGguTmV3KCktPkFwcGVuZChwUGF0aCwgJm1hdHJpeCk7DQotICAgICAgICBwYXRoLm1fTWF0cml4ID0gKnBUZXh0TWF0cml4Ow0KLSAgICAgICAgcGF0aC5tX2JTdHJva2UgPSBiU3Ryb2tlOw0KLSAgICAgICAgcGF0aC5tX0ZpbGxUeXBlID0gYkZpbGwgPyBGWEZJTExfV0lORElORyA6IDA7DQotICAgICAgICBwYXRoLkNhbGNCb3VuZGluZ0JveCgpOw0KLSAgICAgICAgUHJvY2Vzc1BhdGgoJnBhdGgsIHBPYmoyRGV2aWNlKTsNCi0gICAgfQ0KLX0NCi1DRlhfUGF0aERhdGEqIENQREZfRm9udDo6TG9hZEdseXBoUGF0aChGWF9EV09SRCBjaGFyY29kZSwgaW50IGRlc3Rfd2lkdGgpDQotew0KLSAgICBpbnQgZ2x5cGhfaW5kZXggPSBHbHlwaEZyb21DaGFyQ29kZShjaGFyY29kZSk7DQotICAgIGlmIChtX0ZvbnQubV9GYWNlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiBtX0ZvbnQuTG9hZEdseXBoUGF0aChnbHlwaF9pbmRleCwgZGVzdF93aWR0aCk7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2UuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9yZW5kZXIuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlb2JqLmgiCisjaW5jbHVkZSAiLi4vZnBkZl9wYWdlL3BhZ2VpbnQuaCIKKyNpbmNsdWRlICJyZW5kZXJfaW50LmgiCitleHRlcm4gRlhfQk9PTCBJc0F2YWlsYWJsZU1hdHJpeChjb25zdCBDRlhfQWZmaW5lTWF0cml4JiBtYXRyaXgpOworQ1BERl9UeXBlM0NhY2hlOjp+Q1BERl9UeXBlM0NhY2hlKCkKK3sKKyAgICBGWF9QT1NJVElPTiBwb3MgPSBtX1NpemVNYXAuR2V0U3RhcnRQb3NpdGlvbigpOworICAgIENGWF9CeXRlU3RyaW5nIEtleTsKKyAgICBDUERGX1R5cGUzR2x5cGhzKiBwU2l6ZUNhY2hlID0gTlVMTDsKKyAgICB3aGlsZShwb3MpIHsKKyAgICAgICAgcFNpemVDYWNoZSA9IChDUERGX1R5cGUzR2x5cGhzKiltX1NpemVNYXAuR2V0TmV4dFZhbHVlKHBvcyk7CisgICAgICAgIGRlbGV0ZSBwU2l6ZUNhY2hlOworICAgIH0KKyAgICBtX1NpemVNYXAuUmVtb3ZlQWxsKCk7Cit9CitDRlhfR2x5cGhCaXRtYXAqIENQREZfVHlwZTNDYWNoZTo6TG9hZEdseXBoKEZYX0RXT1JEIGNoYXJjb2RlLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LCBGWF9GTE9BVCByZXRpbmFTY2FsZVgsIEZYX0ZMT0FUIHJldGluYVNjYWxlWSkKK3sKKyAgICBfQ1BERl9VbmlxdWVLZXlHZW4ga2V5Z2VuOworICAgIGtleWdlbi5HZW5lcmF0ZSg0LCBGWFNZU19yb3VuZChwTWF0cml4LT5hICogMTAwMDApLCBGWFNZU19yb3VuZChwTWF0cml4LT5iICogMTAwMDApLAorICAgICAgICAgICAgICAgICAgICBGWFNZU19yb3VuZChwTWF0cml4LT5jICogMTAwMDApLCBGWFNZU19yb3VuZChwTWF0cml4LT5kICogMTAwMDApKTsKKyAgICBDRlhfQnl0ZVN0cmluZ0MgRmFjZUdseXBoc0tleShrZXlnZW4ubV9LZXksIGtleWdlbi5tX0tleUxlbik7CisgICAgQ1BERl9UeXBlM0dseXBocyogcFNpemVDYWNoZSA9IE5VTEw7CisgICAgaWYoIW1fU2l6ZU1hcC5Mb29rdXAoRmFjZUdseXBoc0tleSwgKHZvaWQqJilwU2l6ZUNhY2hlKSkgeworICAgICAgICBwU2l6ZUNhY2hlID0gRlhfTkVXIENQREZfVHlwZTNHbHlwaHM7CisgICAgICAgIG1fU2l6ZU1hcC5TZXRBdChGYWNlR2x5cGhzS2V5LCBwU2l6ZUNhY2hlKTsKKyAgICB9CisgICAgQ0ZYX0dseXBoQml0bWFwKiBwR2x5cGhCaXRtYXA7CisgICAgaWYocFNpemVDYWNoZS0+bV9HbHlwaE1hcC5Mb29rdXAoKEZYX0xQVk9JRCkoRlhfVUlOVFBUUiljaGFyY29kZSwgKHZvaWQqJilwR2x5cGhCaXRtYXApKSB7CisgICAgICAgIHJldHVybiBwR2x5cGhCaXRtYXA7CisgICAgfQorICAgIHBHbHlwaEJpdG1hcCA9IFJlbmRlckdseXBoKHBTaXplQ2FjaGUsIGNoYXJjb2RlLCBwTWF0cml4LCByZXRpbmFTY2FsZVgsIHJldGluYVNjYWxlWSk7CisgICAgcFNpemVDYWNoZS0+bV9HbHlwaE1hcC5TZXRBdCgoRlhfTFBWT0lEKShGWF9VSU5UUFRSKWNoYXJjb2RlLCBwR2x5cGhCaXRtYXApOworICAgIHJldHVybiBwR2x5cGhCaXRtYXA7Cit9CitDUERGX1R5cGUzR2x5cGhzOjp+Q1BERl9UeXBlM0dseXBocygpCit7CisgICAgRlhfUE9TSVRJT04gcG9zID0gbV9HbHlwaE1hcC5HZXRTdGFydFBvc2l0aW9uKCk7CisgICAgRlhfTFBWT0lEIEtleTsKKyAgICBDRlhfR2x5cGhCaXRtYXAqIHBHbHlwaEJpdG1hcDsKKyAgICB3aGlsZShwb3MpIHsKKyAgICAgICAgbV9HbHlwaE1hcC5HZXROZXh0QXNzb2MocG9zLCBLZXksICh2b2lkKiYpcEdseXBoQml0bWFwKTsKKyAgICAgICAgZGVsZXRlIHBHbHlwaEJpdG1hcDsKKyAgICB9Cit9CitzdGF0aWMgaW50IF9BZGp1c3RCbHVlKEZYX0ZMT0FUIHBvcywgaW50JiBjb3VudCwgaW50IGJsdWVzW10pCit7CisgICAgRlhfRkxPQVQgbWluX2Rpc3RhbmNlID0gMTAwMDAwMC4wZiAqIDEuMGY7CisgICAgaW50IGNsb3Nlc3RfcG9zID0gLTE7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSArKykgeworICAgICAgICBGWF9GTE9BVCBkaXN0YW5jZSA9IChGWF9GTE9BVClGWFNZU19mYWJzKHBvcyAtIChGWF9GTE9BVClibHVlc1tpXSk7CisgICAgICAgIGlmIChkaXN0YW5jZSA8IDEuMGYgKiA4MC4wZiAvIDEwMC4wZiAmJiBkaXN0YW5jZSA8IG1pbl9kaXN0YW5jZSkgeworICAgICAgICAgICAgbWluX2Rpc3RhbmNlID0gZGlzdGFuY2U7CisgICAgICAgICAgICBjbG9zZXN0X3BvcyA9IGk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGNsb3Nlc3RfcG9zID49IDApIHsKKyAgICAgICAgcmV0dXJuIGJsdWVzW2Nsb3Nlc3RfcG9zXTsKKyAgICB9CisgICAgaW50IG5ld19wb3MgPSBGWFNZU19yb3VuZChwb3MpOworICAgIGlmIChjb3VudCA9PSBUWVBFM19NQVhfQkxVRVMpIHsKKyAgICAgICAgcmV0dXJuIG5ld19wb3M7CisgICAgfQorICAgIGJsdWVzW2NvdW50KytdID0gbmV3X3BvczsKKyAgICByZXR1cm4gbmV3X3BvczsKK30KK3ZvaWQgQ1BERl9UeXBlM0dseXBoczo6QWRqdXN0Qmx1ZShGWF9GTE9BVCB0b3AsIEZYX0ZMT0FUIGJvdHRvbSwgaW50JiB0b3BfbGluZSwgaW50JiBib3R0b21fbGluZSkKK3sKKyAgICB0b3BfbGluZSA9IF9BZGp1c3RCbHVlKHRvcCwgbV9Ub3BCbHVlQ291bnQsIG1fVG9wQmx1ZSk7CisgICAgYm90dG9tX2xpbmUgPSBfQWRqdXN0Qmx1ZShib3R0b20sIG1fQm90dG9tQmx1ZUNvdW50LCBtX0JvdHRvbUJsdWUpOworfQorc3RhdGljIEZYX0JPT0wgX0lzU2NhbkxpbmUxYnBwKEZYX0xQQllURSBwQnVmLCBpbnQgd2lkdGgpCit7CisgICAgaW50IHNpemUgPSB3aWR0aCAvIDg7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKQorICAgICAgICBpZiAocEJ1ZltpXSkgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICBpZiAod2lkdGggJSA4KQorICAgICAgICBpZiAocEJ1Zlt3aWR0aCAvIDhdICYgKDB4ZmYgPDwgKDggLSB3aWR0aCAlIDgpKSkgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitzdGF0aWMgRlhfQk9PTCBfSXNTY2FuTGluZThicHAoRlhfTFBCWVRFIHBCdWYsIGludCB3aWR0aCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHdpZHRoOyBpICsrKQorICAgICAgICBpZiAocEJ1ZltpXSA+IDB4NDApIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorc3RhdGljIGludCBfRGV0ZWN0Rmlyc3RMYXN0U2Nhbihjb25zdCBDRlhfRElCaXRtYXAqIHBCaXRtYXAsIEZYX0JPT0wgYkZpcnN0KQoreworICAgIGludCBoZWlnaHQgPSBwQml0bWFwLT5HZXRIZWlnaHQoKSwgcGl0Y2ggPSBwQml0bWFwLT5HZXRQaXRjaCgpLCB3aWR0aCA9IHBCaXRtYXAtPkdldFdpZHRoKCk7CisgICAgaW50IGJwcCA9IHBCaXRtYXAtPkdldEJQUCgpOworICAgIGlmIChicHAgPiA4KSB7CisgICAgICAgIHdpZHRoICo9IGJwcCAvIDg7CisgICAgfQorICAgIEZYX0xQQllURSBwQnVmID0gcEJpdG1hcC0+R2V0QnVmZmVyKCk7CisgICAgaW50IGxpbmUgPSBiRmlyc3QgPyAwIDogaGVpZ2h0IC0gMTsKKyAgICBpbnQgbGluZV9zdGVwID0gYkZpcnN0ID8gMSA6IC0xOworICAgIGludCBsaW5lX2VuZCA9IGJGaXJzdCA/IGhlaWdodCA6IC0xOworICAgIHdoaWxlIChsaW5lICE9IGxpbmVfZW5kKSB7CisgICAgICAgIGlmIChicHAgPT0gMSkgeworICAgICAgICAgICAgaWYgKF9Jc1NjYW5MaW5lMWJwcChwQnVmICsgbGluZSAqIHBpdGNoLCB3aWR0aCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbGluZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChfSXNTY2FuTGluZThicHAocEJ1ZiArIGxpbmUgKiBwaXRjaCwgd2lkdGgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbGluZSArPSBsaW5lX3N0ZXA7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KK0NGWF9HbHlwaEJpdG1hcCogQ1BERl9UeXBlM0NhY2hlOjpSZW5kZXJHbHlwaChDUERGX1R5cGUzR2x5cGhzKiBwU2l6ZSwgRlhfRFdPUkQgY2hhcmNvZGUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIEZYX0ZMT0FUIHJldGluYVNjYWxlWCwgRlhfRkxPQVQgcmV0aW5hU2NhbGVZKQoreworICAgIENQREZfVHlwZTNDaGFyKiBwQ2hhciA9IG1fcEZvbnQtPkxvYWRDaGFyKGNoYXJjb2RlKTsKKyAgICBpZiAocENoYXIgPT0gTlVMTCB8fCBwQ2hhci0+bV9wQml0bWFwID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENGWF9ESUJpdG1hcCogcEJpdG1hcCA9IHBDaGFyLT5tX3BCaXRtYXA7CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBpbWFnZV9tYXRyaXgsIHRleHRfbWF0cml4OworICAgIGltYWdlX21hdHJpeCA9IHBDaGFyLT5tX0ltYWdlTWF0cml4OworICAgIHRleHRfbWF0cml4LlNldChwTWF0cml4LT5hLCBwTWF0cml4LT5iLCBwTWF0cml4LT5jLCBwTWF0cml4LT5kLCAwLCAwKTsKKyAgICBpbWFnZV9tYXRyaXguQ29uY2F0KHRleHRfbWF0cml4KTsKKyAgICBDRlhfRElCaXRtYXAqIHBSZXNCaXRtYXAgPSBOVUxMOworICAgIGludCBsZWZ0LCB0b3A7CisgICAgaWYgKEZYU1lTX2ZhYnMoaW1hZ2VfbWF0cml4LmIpIDwgRlhTWVNfZmFicyhpbWFnZV9tYXRyaXguYSkgLyAxMDAgJiYgRlhTWVNfZmFicyhpbWFnZV9tYXRyaXguYykgPCBGWFNZU19mYWJzKGltYWdlX21hdHJpeC5kKSAvIDEwMCkgeworICAgICAgICBpbnQgdG9wX2xpbmUsIGJvdHRvbV9saW5lOworICAgICAgICB0b3BfbGluZSA9IF9EZXRlY3RGaXJzdExhc3RTY2FuKHBCaXRtYXAsIFRSVUUpOworICAgICAgICBib3R0b21fbGluZSA9IF9EZXRlY3RGaXJzdExhc3RTY2FuKHBCaXRtYXAsIEZBTFNFKTsKKyAgICAgICAgaWYgKHRvcF9saW5lID09IDAgJiYgYm90dG9tX2xpbmUgPT0gcEJpdG1hcC0+R2V0SGVpZ2h0KCkgLSAxKSB7CisgICAgICAgICAgICBGWF9GTE9BVCB0b3BfeSA9IGltYWdlX21hdHJpeC5kICsgaW1hZ2VfbWF0cml4LmY7CisgICAgICAgICAgICBGWF9GTE9BVCBib3R0b21feSA9IGltYWdlX21hdHJpeC5mOworICAgICAgICAgICAgRlhfQk9PTCBiRmxpcHBlZCA9IHRvcF95ID4gYm90dG9tX3k7CisgICAgICAgICAgICBpZiAoYkZsaXBwZWQpIHsKKyAgICAgICAgICAgICAgICBGWF9GTE9BVCB0ZW1wID0gdG9wX3k7CisgICAgICAgICAgICAgICAgdG9wX3kgPSBib3R0b21feTsKKyAgICAgICAgICAgICAgICBib3R0b21feSA9IHRlbXA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwU2l6ZS0+QWRqdXN0Qmx1ZSh0b3BfeSwgYm90dG9tX3ksIHRvcF9saW5lLCBib3R0b21fbGluZSk7CisgICAgICAgICAgICBwUmVzQml0bWFwID0gcEJpdG1hcC0+U3RyZXRjaFRvKChpbnQpKEZYU1lTX3JvdW5kKGltYWdlX21hdHJpeC5hKSAqIHJldGluYVNjYWxlWCksIChpbnQpKChiRmxpcHBlZCA/IHRvcF9saW5lIC0gYm90dG9tX2xpbmUgOiBib3R0b21fbGluZSAtIHRvcF9saW5lKSAqIHJldGluYVNjYWxlWSkpOworICAgICAgICAgICAgdG9wID0gdG9wX2xpbmU7CisgICAgICAgICAgICBpZiAoaW1hZ2VfbWF0cml4LmEgPCAwKSB7CisgICAgICAgICAgICAgICAgaW1hZ2VfbWF0cml4LlNjYWxlKHJldGluYVNjYWxlWCwgcmV0aW5hU2NhbGVZKTsKKyAgICAgICAgICAgICAgICBsZWZ0ID0gRlhTWVNfcm91bmQoaW1hZ2VfbWF0cml4LmUgKyBpbWFnZV9tYXRyaXguYSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGxlZnQgPSBGWFNZU19yb3VuZChpbWFnZV9tYXRyaXguZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHBSZXNCaXRtYXAgPT0gTlVMTCkgeworICAgICAgICBpbWFnZV9tYXRyaXguU2NhbGUocmV0aW5hU2NhbGVYLCByZXRpbmFTY2FsZVkpOworICAgICAgICBwUmVzQml0bWFwID0gcEJpdG1hcC0+VHJhbnNmb3JtVG8oJmltYWdlX21hdHJpeCwgbGVmdCwgdG9wKTsKKyAgICB9CisgICAgaWYgKHBSZXNCaXRtYXAgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0ZYX0dseXBoQml0bWFwKiBwR2x5cGggPSBGWF9ORVcgQ0ZYX0dseXBoQml0bWFwOworICAgIHBHbHlwaC0+bV9MZWZ0ID0gbGVmdDsKKyAgICBwR2x5cGgtPm1fVG9wID0gLXRvcDsKKyAgICBwR2x5cGgtPm1fQml0bWFwLlRha2VPdmVyKHBSZXNCaXRtYXApOworICAgIGRlbGV0ZSBwUmVzQml0bWFwOworICAgIHJldHVybiBwR2x5cGg7Cit9Cit2b2lkIF9DUERGX1VuaXF1ZUtleUdlbjo6R2VuZXJhdGUoaW50IGNvdW50LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdMaXN0OworICAgIHZhX3N0YXJ0KGFyZ0xpc3QsIGNvdW50KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpICsrKSB7CisgICAgICAgIGludCBwID0gdmFfYXJnKGFyZ0xpc3QsIGludCk7CisgICAgICAgICgoRlhfRFdPUkQqKW1fS2V5KVtpXSA9IHA7CisgICAgfQorICAgIHZhX2VuZChhcmdMaXN0KTsKKyAgICBtX0tleUxlbiA9IGNvdW50ICogc2l6ZW9mKEZYX0RXT1JEKTsKK30KK0ZYX0JPT0wgQ1BERl9SZW5kZXJTdGF0dXM6OlByb2Nlc3NUZXh0KGNvbnN0IENQREZfVGV4dE9iamVjdCogdGV4dG9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UsIENGWF9QYXRoRGF0YSogcENsaXBwaW5nUGF0aCkKK3sKKyAgICBpZih0ZXh0b2JqLT5tX25DaGFycyA9PSAwKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBpbnQgdGV4dF9yZW5kZXJfbW9kZSA9IHRleHRvYmotPm1fVGV4dFN0YXRlLkdldE9iamVjdCgpLT5tX1RleHRNb2RlOworICAgIGlmICh0ZXh0X3JlbmRlcl9tb2RlID09IDMpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIENQREZfRm9udCogcEZvbnQgPSB0ZXh0b2JqLT5tX1RleHRTdGF0ZS5HZXRGb250KCk7CisgICAgaWYgKHBGb250LT5HZXRGb250VHlwZSgpID09IFBERkZPTlRfVFlQRTMpIHsKKyAgICAgICAgcmV0dXJuIFByb2Nlc3NUeXBlM1RleHQodGV4dG9iaiwgcE9iajJEZXZpY2UpOworICAgIH0KKyAgICBGWF9CT09MIGJGaWxsID0gRkFMU0UsIGJTdHJva2UgPSBGQUxTRSwgYkNsaXAgPSBGQUxTRTsKKyAgICBpZiAocENsaXBwaW5nUGF0aCkgeworICAgICAgICBiQ2xpcCA9IFRSVUU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNoICh0ZXh0X3JlbmRlcl9tb2RlKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgYkZpbGwgPSBUUlVFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAgIGlmIChwRm9udC0+R2V0RmFjZSgpID09IE5VTEwgJiYgIShwRm9udC0+R2V0U3Vic3RGb250KCktPm1fU3Vic3RGbGFncyAmIEZYRk9OVF9TVUJTVF9HTFlQSFBBVEgpKSB7CisgICAgICAgICAgICAgICAgICAgIGJGaWxsID0gVFJVRTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBiU3Ryb2tlID0gVFJVRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgICAgaWYgKHBGb250LT5HZXRGYWNlKCkgPT0gTlVMTCAmJiAhKHBGb250LT5HZXRTdWJzdEZvbnQoKS0+bV9TdWJzdEZsYWdzICYgRlhGT05UX1NVQlNUX0dMWVBIUEFUSCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYkZpbGwgPSBUUlVFOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJGaWxsID0gYlN0cm9rZSA9IFRSVUU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgY2FzZSA3OgorICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBiRmlsbCA9IFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgRlhfQVJHQiBzdHJva2VfYXJnYiA9IDAsIGZpbGxfYXJnYiA9IDA7CisgICAgRlhfQk9PTCBiUGF0dGVybiA9IEZBTFNFOworICAgIGlmIChiU3Ryb2tlKSB7CisgICAgICAgIGlmICh0ZXh0b2JqLT5tX0NvbG9yU3RhdGUuR2V0U3Ryb2tlQ29sb3IoKS0+SXNQYXR0ZXJuKCkpIHsKKyAgICAgICAgICAgIGJQYXR0ZXJuID0gVFJVRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0cm9rZV9hcmdiID0gR2V0U3Ryb2tlQXJnYih0ZXh0b2JqKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYkZpbGwpIHsKKyAgICAgICAgaWYgKHRleHRvYmotPm1fQ29sb3JTdGF0ZS5HZXRGaWxsQ29sb3IoKS0+SXNQYXR0ZXJuKCkpIHsKKyAgICAgICAgICAgIGJQYXR0ZXJuID0gVFJVRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZpbGxfYXJnYiA9IEdldEZpbGxBcmdiKHRleHRvYmopOworICAgICAgICB9CisgICAgfQorICAgIENGWF9BZmZpbmVNYXRyaXggdGV4dF9tYXRyaXg7CisgICAgdGV4dG9iai0+R2V0VGV4dE1hdHJpeCgmdGV4dF9tYXRyaXgpOworICAgIGlmKElzQXZhaWxhYmxlTWF0cml4KHRleHRfbWF0cml4KSA9PSBGQUxTRSkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgRlhfRkxPQVQgZm9udF9zaXplID0gdGV4dG9iai0+bV9UZXh0U3RhdGUuR2V0Rm9udFNpemUoKTsKKyAgICBpZiAoYlBhdHRlcm4pIHsKKyAgICAgICAgRHJhd1RleHRQYXRoV2l0aFBhdHRlcm4odGV4dG9iaiwgcE9iajJEZXZpY2UsIHBGb250LCBmb250X3NpemUsICZ0ZXh0X21hdHJpeCwgYkZpbGwsIGJTdHJva2UpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisjaWYgZGVmaW5lZChfRlBERkFQSV9NSU5JXykKKyAgICBpZiAoYkZpbGwpIHsKKyAgICAgICAgYlN0cm9rZSA9IEZBTFNFOworICAgIH0KKyAgICBpZiAoYlN0cm9rZSkgeworICAgICAgICBpZiAoZm9udF9zaXplICogdGV4dF9tYXRyaXguR2V0WFVuaXQoKSAqIHBPYmoyRGV2aWNlLT5HZXRYVW5pdCgpIDwgNikgeworICAgICAgICAgICAgYlN0cm9rZSA9IEZBTFNFOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgaWYgKGJDbGlwIHx8IGJTdHJva2UpIHsKKyAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcERldmljZU1hdHJpeCA9IHBPYmoyRGV2aWNlOworICAgICAgICBDRlhfQWZmaW5lTWF0cml4IGRldmljZV9tYXRyaXg7CisgICAgICAgIGlmIChiU3Ryb2tlKSB7CisgICAgICAgICAgICBjb25zdCBGWF9GTE9BVCogcENUTSA9IHRleHRvYmotPm1fVGV4dFN0YXRlLkdldE9iamVjdCgpLT5tX0NUTTsKKyAgICAgICAgICAgIGlmIChwQ1RNWzBdICE9IDEuMGYgfHwgcENUTVszXSAhPSAxLjBmKSB7CisgICAgICAgICAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCBjdG0ocENUTVswXSwgcENUTVsxXSwgcENUTVsyXSwgcENUTVszXSwgMCwgMCk7CisgICAgICAgICAgICAgICAgdGV4dF9tYXRyaXguQ29uY2F0SW52ZXJzZShjdG0pOworICAgICAgICAgICAgICAgIGRldmljZV9tYXRyaXguQ29weShjdG0pOworICAgICAgICAgICAgICAgIGRldmljZV9tYXRyaXguQ29uY2F0KCpwT2JqMkRldmljZSk7CisgICAgICAgICAgICAgICAgcERldmljZU1hdHJpeCA9ICZkZXZpY2VfbWF0cml4OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGludCBmbGFnID0gMDsKKyAgICAgICAgaWYgKGJTdHJva2UgJiYgYkZpbGwpIHsKKyAgICAgICAgICAgIGZsYWcgfD0gRlhfRklMTF9TVFJPS0U7CisgICAgICAgICAgICBmbGFnIHw9IEZYX1NUUk9LRV9URVhUX01PREU7CisgICAgICAgIH0KKyNpZiAhZGVmaW5lZChfRlBERkFQSV9NSU5JXykgfHwgZGVmaW5lZChfRlhDT1JFX0ZFQVRVUkVfQUxMXykKKyAgICAgICAgY29uc3QgQ1BERl9HZW5lcmFsU3RhdGVEYXRhKiBwR2VuZXJhbERhdGEgPSAoKENQREZfUGFnZU9iamVjdCopdGV4dG9iaiktPm1fR2VuZXJhbFN0YXRlOworICAgICAgICBpZiAocEdlbmVyYWxEYXRhICYmIHBHZW5lcmFsRGF0YS0+bV9TdHJva2VBZGp1c3QpIHsKKyAgICAgICAgICAgIGZsYWcgfD0gRlhfU1RST0tFX0FESlVTVDsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmIChtX09wdGlvbnMubV9GbGFncyAmIFJFTkRFUl9OT1RFWFRTTU9PVEgpIHsKKyAgICAgICAgICAgIGZsYWcgfD0gRlhGSUxMX05PUEFUSFNNT09USDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQ1BERl9UZXh0UmVuZGVyZXI6OkRyYXdUZXh0UGF0aChtX3BEZXZpY2UsIHRleHRvYmotPm1fbkNoYXJzLCB0ZXh0b2JqLT5tX3BDaGFyQ29kZXMsIHRleHRvYmotPm1fcENoYXJQb3MsIHBGb250LCBmb250X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0ZXh0X21hdHJpeCwgcERldmljZU1hdHJpeCwgdGV4dG9iai0+bV9HcmFwaFN0YXRlLCBmaWxsX2FyZ2IsIHN0cm9rZV9hcmdiLCBwQ2xpcHBpbmdQYXRoLCBmbGFnKTsKKyAgICB9CisgICAgdGV4dF9tYXRyaXguQ29uY2F0KCpwT2JqMkRldmljZSk7CisgICAgcmV0dXJuIENQREZfVGV4dFJlbmRlcmVyOjpEcmF3Tm9ybWFsVGV4dChtX3BEZXZpY2UsIHRleHRvYmotPm1fbkNoYXJzLCB0ZXh0b2JqLT5tX3BDaGFyQ29kZXMsIHRleHRvYmotPm1fcENoYXJQb3MsIHBGb250LCBmb250X3NpemUsCisgICAgICAgICAgICAmdGV4dF9tYXRyaXgsIGZpbGxfYXJnYiwgJm1fT3B0aW9ucyk7Cit9CitDUERGX1R5cGUzQ2FjaGUqIENQREZfUmVuZGVyU3RhdHVzOjpHZXRDYWNoZWRUeXBlMyhDUERGX1R5cGUzRm9udCogcEZvbnQpCit7CisgICAgaWYgKHBGb250LT5tX3BEb2N1bWVudCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwRm9udC0+bV9wRG9jdW1lbnQtPkdldFBhZ2VEYXRhKCktPkdldEZvbnQocEZvbnQtPkdldEZvbnREaWN0KCksIEZBTFNFKTsKKyAgICByZXR1cm4gcEZvbnQtPm1fcERvY3VtZW50LT5HZXRSZW5kZXJEYXRhKCktPkdldENhY2hlZFR5cGUzKHBGb250KTsKK30KK3N0YXRpYyB2b2lkIFJlbGVhc2VDYWNoZWRUeXBlMyhDUERGX1R5cGUzRm9udCogcEZvbnQpCit7CisgICAgaWYgKHBGb250LT5tX3BEb2N1bWVudCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcEZvbnQtPm1fcERvY3VtZW50LT5HZXRSZW5kZXJEYXRhKCktPlJlbGVhc2VDYWNoZWRUeXBlMyhwRm9udCk7CisgICAgcEZvbnQtPm1fcERvY3VtZW50LT5HZXRQYWdlRGF0YSgpLT5SZWxlYXNlRm9udChwRm9udC0+R2V0Rm9udERpY3QoKSk7Cit9CitGWF9CT09MIENQREZfVHlwZTNDaGFyOjpMb2FkQml0bWFwKENQREZfUmVuZGVyQ29udGV4dCogcENvbnRleHQpCit7CisgICAgaWYgKG1fcEJpdG1hcCAhPSBOVUxMIHx8IG1fcEZvcm0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgaWYgKG1fcEZvcm0tPkNvdW50T2JqZWN0cygpID09IDEgJiYgIW1fYkNvbG9yZWQpIHsKKyAgICAgICAgQ1BERl9QYWdlT2JqZWN0ICpwUGFnZU9iaiA9IG1fcEZvcm0tPkdldE9iamVjdEF0KG1fcEZvcm0tPkdldEZpcnN0T2JqZWN0UG9zaXRpb24oKSk7CisgICAgICAgIGlmIChwUGFnZU9iai0+bV9UeXBlID09IFBERlBBR0VfSU1BR0UpIHsKKyAgICAgICAgICAgIENQREZfSW1hZ2VPYmplY3QqIHBJbWFnZSA9IChDUERGX0ltYWdlT2JqZWN0KilwUGFnZU9iajsKKyAgICAgICAgICAgIG1fSW1hZ2VNYXRyaXggPSBwSW1hZ2UtPm1fTWF0cml4OworICAgICAgICAgICAgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNvdXJjZSA9IHBJbWFnZS0+bV9wSW1hZ2UtPkxvYWRESUJTb3VyY2UoKTsKKyAgICAgICAgICAgIGlmIChwU291cmNlKSB7CisgICAgICAgICAgICAgICAgbV9wQml0bWFwID0gcFNvdXJjZS0+Q2xvbmUoKTsKKyAgICAgICAgICAgICAgICBkZWxldGUgcFNvdXJjZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGV0ZSBtX3BGb3JtOworICAgICAgICAgICAgbV9wRm9ybSA9IE5VTEw7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBpZiAocFBhZ2VPYmotPm1fVHlwZSA9PSBQREZQQUdFX0lOTElORVMpIHsKKyAgICAgICAgICAgIENQREZfSW5saW5lSW1hZ2VzICpwSW5saW5lcyA9IChDUERGX0lubGluZUltYWdlcyAqKXBQYWdlT2JqOworICAgICAgICAgICAgaWYgKHBJbmxpbmVzLT5tX3BTdHJlYW0pIHsKKyAgICAgICAgICAgICAgICBtX0ltYWdlTWF0cml4ID0gcElubGluZXMtPm1fTWF0cmljZXNbMF07CisgICAgICAgICAgICAgICAgQ1BERl9ESUJTb3VyY2UgZGlic3JjOworICAgICAgICAgICAgICAgIGlmICghZGlic3JjLkxvYWQocENvbnRleHQtPm1fcERvY3VtZW50LCBwSW5saW5lcy0+bV9wU3RyZWFtLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fcEJpdG1hcCA9IGRpYnNyYy5DbG9uZSgpOworICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3BGb3JtOworICAgICAgICAgICAgICAgIG1fcEZvcm0gPSBOVUxMOworICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK2NsYXNzIENQREZfUmVmVHlwZTNDYWNoZQoreworcHVibGljOgorICAgIENQREZfUmVmVHlwZTNDYWNoZShDUERGX1R5cGUzRm9udCogcFR5cGUzRm9udCkKKyAgICB7CisgICAgICAgIG1fZHdDb3VudCA9IDA7CisgICAgICAgIG1fcFR5cGUzRm9udCA9IHBUeXBlM0ZvbnQ7CisgICAgfQorICAgIH5DUERGX1JlZlR5cGUzQ2FjaGUoKQorICAgIHsKKyAgICAgICAgd2hpbGUobV9kd0NvdW50LS0pIHsKKyAgICAgICAgICAgIFJlbGVhc2VDYWNoZWRUeXBlMyhtX3BUeXBlM0ZvbnQpOworICAgICAgICB9CisgICAgfQorICAgIEZYX0RXT1JEIG1fZHdDb3VudDsKKyAgICBDUERGX1R5cGUzRm9udCogbV9wVHlwZTNGb250OworfTsKK0ZYX0JPT0wgQ1BERl9SZW5kZXJTdGF0dXM6OlByb2Nlc3NUeXBlM1RleHQoY29uc3QgQ1BERl9UZXh0T2JqZWN0KiB0ZXh0b2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSkKK3sKKyAgICBDUERGX1R5cGUzRm9udCogcFR5cGUzRm9udCA9IHRleHRvYmotPm1fVGV4dFN0YXRlLkdldEZvbnQoKS0+R2V0VHlwZTNGb250KCk7CisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBtX1R5cGUzRm9udENhY2hlLkdldFNpemUoKTsgaisrKQorICAgICAgICBpZiAoKENQREZfVHlwZTNGb250KiltX1R5cGUzRm9udENhY2hlLkdldEF0KGopID09IHBUeXBlM0ZvbnQpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgQ0ZYX01hdHJpeCBkQ1RNID0gbV9wRGV2aWNlLT5HZXRDVE0oKTsKKyAgICBGWF9GTE9BVCBzYSA9IEZYU1lTX2ZhYnMoZENUTS5hKTsKKyAgICBGWF9GTE9BVCBzZCA9IEZYU1lTX2ZhYnMoZENUTS5kKTsKKyAgICBDRlhfQWZmaW5lTWF0cml4IHRleHRfbWF0cml4OworICAgIHRleHRvYmotPkdldFRleHRNYXRyaXgoJnRleHRfbWF0cml4KTsKKyAgICBDRlhfQWZmaW5lTWF0cml4IGNoYXJfbWF0cml4ID0gcFR5cGUzRm9udC0+R2V0Rm9udE1hdHJpeCgpOworICAgIEZYX0ZMT0FUIGZvbnRfc2l6ZSA9IHRleHRvYmotPm1fVGV4dFN0YXRlLkdldEZvbnRTaXplKCk7CisgICAgY2hhcl9tYXRyaXguU2NhbGUoZm9udF9zaXplLCBmb250X3NpemUpOworICAgIEZYX0FSR0IgZmlsbF9hcmdiID0gR2V0RmlsbEFyZ2IodGV4dG9iaiwgVFJVRSk7CisgICAgaW50IGZpbGxfYWxwaGEgPSBGWEFSR0JfQShmaWxsX2FyZ2IpOworICAgIGludCBkZXZpY2VfY2xhc3MgPSBtX3BEZXZpY2UtPkdldERldmljZUNsYXNzKCk7CisgICAgRlhURVhUX0dMWVBIUE9TKiBwR2x5cGhBbmRQb3MgPSBOVUxMOworICAgIGlmIChkZXZpY2VfY2xhc3MgPT0gRlhEQ19ESVNQTEFZKSB7CisgICAgICAgIHBHbHlwaEFuZFBvcyA9IEZYX0FsbG9jKEZYVEVYVF9HTFlQSFBPUywgdGV4dG9iai0+bV9uQ2hhcnMpOworICAgICAgICBGWFNZU19tZW1zZXQzMihwR2x5cGhBbmRQb3MsIDAsIHNpemVvZihGWFRFWFRfR0xZUEhQT1MpICogdGV4dG9iai0+bV9uQ2hhcnMpOworICAgIH0gZWxzZSBpZiAoZmlsbF9hbHBoYSA8IDI1NSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIENQREZfUmVmVHlwZTNDYWNoZSByZWZUeXBlQ2FjaGUocFR5cGUzRm9udCk7CisgICAgRlhfRFdPUkQgKnBDaGFycyA9IHRleHRvYmotPm1fcENoYXJDb2RlczsKKyAgICBpZiAodGV4dG9iai0+bV9uQ2hhcnMgPT0gMSkgeworICAgICAgICBwQ2hhcnMgPSAoRlhfRFdPUkQqKSgmdGV4dG9iai0+bV9wQ2hhckNvZGVzKTsKKyAgICB9CisgICAgZm9yIChpbnQgaUNoYXIgPSAwOyBpQ2hhciA8IHRleHRvYmotPm1fbkNoYXJzOyBpQ2hhciArKykgeworICAgICAgICBGWF9EV09SRCBjaGFyY29kZSA9IHBDaGFyc1tpQ2hhcl07CisgICAgICAgIGlmIChjaGFyY29kZSA9PSAoRlhfRFdPUkQpIC0gMSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQ1BERl9UeXBlM0NoYXIqIHBUeXBlM0NoYXIgPSBwVHlwZTNGb250LT5Mb2FkQ2hhcihjaGFyY29kZSk7CisgICAgICAgIGlmIChwVHlwZTNDaGFyID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4ID0gY2hhcl9tYXRyaXg7CisgICAgICAgIG1hdHJpeC5lICs9IGlDaGFyID8gdGV4dG9iai0+bV9wQ2hhclBvc1tpQ2hhciAtIDFdIDogMDsKKyAgICAgICAgbWF0cml4LkNvbmNhdCh0ZXh0X21hdHJpeCk7CisgICAgICAgIG1hdHJpeC5Db25jYXQoKnBPYmoyRGV2aWNlKTsKKyAgICAgICAgaWYgKCFwVHlwZTNDaGFyLT5Mb2FkQml0bWFwKG1fcENvbnRleHQpKSB7CisgICAgICAgICAgICBpZiAocEdseXBoQW5kUG9zKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpQ2hhcjsgaSArKykgeworICAgICAgICAgICAgICAgICAgICBGWFRFWFRfR0xZUEhQT1MmIGdseXBoID0gcEdseXBoQW5kUG9zW2ldOworICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGgubV9wR2x5cGggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbV9wRGV2aWNlLT5TZXRCaXRNYXNrKCZnbHlwaC5tX3BHbHlwaC0+bV9CaXRtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaC5tX09yaWdpblggKyBnbHlwaC5tX3BHbHlwaC0+bV9MZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGgubV9PcmlnaW5ZIC0gZ2x5cGgubV9wR2x5cGgtPm1fVG9wLCBmaWxsX2FyZ2IpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBGWF9GcmVlKHBHbHlwaEFuZFBvcyk7CisgICAgICAgICAgICAgICAgcEdseXBoQW5kUG9zID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIENQREZfR3JhcGhpY1N0YXRlcyogcFN0YXRlcyA9IENsb25lT2JqU3RhdGVzKHRleHRvYmosIEZBTFNFKTsKKyAgICAgICAgICAgIENQREZfUmVuZGVyT3B0aW9ucyBPcHRpb25zID0gbV9PcHRpb25zOworICAgICAgICAgICAgT3B0aW9ucy5tX0ZsYWdzIHw9IFJFTkRFUl9GT1JDRV9IQUxGVE9ORSB8IFJFTkRFUl9SRUNUX0FBOworICAgICAgICAgICAgT3B0aW9ucy5tX0ZsYWdzICY9IH5SRU5ERVJfRk9SQ0VfRE9XTlNBTVBMRTsKKyAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcEZvcm1SZXNvdXJjZSA9IE5VTEw7CisgICAgICAgICAgICBpZiAocFR5cGUzQ2hhci0+bV9wRm9ybSAmJiBwVHlwZTNDaGFyLT5tX3BGb3JtLT5tX3BGb3JtRGljdCkgeworICAgICAgICAgICAgICAgIHBGb3JtUmVzb3VyY2UgPSBwVHlwZTNDaGFyLT5tX3BGb3JtLT5tX3BGb3JtRGljdC0+R2V0RGljdChGWF9CU1RSQygiUmVzb3VyY2VzIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZpbGxfYWxwaGEgPT0gMjU1KSB7CisgICAgICAgICAgICAgICAgQ1BERl9SZW5kZXJTdGF0dXMgc3RhdHVzOworICAgICAgICAgICAgICAgIHN0YXR1cy5Jbml0aWFsaXplKG1fTGV2ZWwgKyAxLCBtX3BDb250ZXh0LCBtX3BEZXZpY2UsIE5VTEwsIE5VTEwsIHRoaXMsIHBTdGF0ZXMsICZPcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBUeXBlM0NoYXItPm1fcEZvcm0tPm1fVHJhbnNwYXJlbmN5LCBtX2JEcm9wT2JqZWN0cywgcEZvcm1SZXNvdXJjZSwgRkFMU0UsIHBUeXBlM0NoYXIsIGZpbGxfYXJnYik7CisgICAgICAgICAgICAgICAgc3RhdHVzLm1fVHlwZTNGb250Q2FjaGUuQXBwZW5kKG1fVHlwZTNGb250Q2FjaGUpOworICAgICAgICAgICAgICAgIHN0YXR1cy5tX1R5cGUzRm9udENhY2hlLkFkZChwVHlwZTNGb250KTsKKyAgICAgICAgICAgICAgICBtX3BEZXZpY2UtPlNhdmVTdGF0ZSgpOworICAgICAgICAgICAgICAgIHN0YXR1cy5SZW5kZXJPYmplY3RMaXN0KHBUeXBlM0NoYXItPm1fcEZvcm0sICZtYXRyaXgpOworICAgICAgICAgICAgICAgIG1fcERldmljZS0+UmVzdG9yZVN0YXRlKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIENGWF9GbG9hdFJlY3QgcmVjdF9mID0gcFR5cGUzQ2hhci0+bV9wRm9ybS0+Q2FsY0JvdW5kaW5nQm94KCk7CisgICAgICAgICAgICAgICAgcmVjdF9mLlRyYW5zZm9ybSgmbWF0cml4KTsKKyAgICAgICAgICAgICAgICBGWF9SRUNUIHJlY3QgPSByZWN0X2YuR2V0T3V0dGVyUmVjdCgpOworICAgICAgICAgICAgICAgIENGWF9GeGdlRGV2aWNlIGJpdG1hcF9kZXZpY2U7CisgICAgICAgICAgICAgICAgaWYgKCFiaXRtYXBfZGV2aWNlLkNyZWF0ZSgoaW50KShyZWN0LldpZHRoKCkgKiBzYSksIChpbnQpKHJlY3QuSGVpZ2h0KCkgKiBzZCksIEZYRElCX0FyZ2IpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBiaXRtYXBfZGV2aWNlLkdldEJpdG1hcCgpLT5DbGVhcigwKTsKKyAgICAgICAgICAgICAgICBDUERGX1JlbmRlclN0YXR1cyBzdGF0dXM7CisgICAgICAgICAgICAgICAgc3RhdHVzLkluaXRpYWxpemUobV9MZXZlbCArIDEsIG1fcENvbnRleHQsICZiaXRtYXBfZGV2aWNlLCBOVUxMLCBOVUxMLCB0aGlzLCBwU3RhdGVzLCAmT3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwVHlwZTNDaGFyLT5tX3BGb3JtLT5tX1RyYW5zcGFyZW5jeSwgbV9iRHJvcE9iamVjdHMsIHBGb3JtUmVzb3VyY2UsIEZBTFNFLCBwVHlwZTNDaGFyLCBmaWxsX2FyZ2IpOworICAgICAgICAgICAgICAgIHN0YXR1cy5tX1R5cGUzRm9udENhY2hlLkFwcGVuZChtX1R5cGUzRm9udENhY2hlKTsKKyAgICAgICAgICAgICAgICBzdGF0dXMubV9UeXBlM0ZvbnRDYWNoZS5BZGQocFR5cGUzRm9udCk7CisgICAgICAgICAgICAgICAgbWF0cml4LlRyYW5zbGF0ZUkoLXJlY3QubGVmdCwgLXJlY3QudG9wKTsKKyAgICAgICAgICAgICAgICBtYXRyaXguU2NhbGUoc2EsIHNkKTsKKyAgICAgICAgICAgICAgICBzdGF0dXMuUmVuZGVyT2JqZWN0TGlzdChwVHlwZTNDaGFyLT5tX3BGb3JtLCAmbWF0cml4KTsKKyAgICAgICAgICAgICAgICBtX3BEZXZpY2UtPlNldERJQml0cyhiaXRtYXBfZGV2aWNlLkdldEJpdG1hcCgpLCByZWN0LmxlZnQsIHJlY3QudG9wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGV0ZSBwU3RhdGVzOworICAgICAgICB9IGVsc2UgaWYgKHBUeXBlM0NoYXItPm1fcEJpdG1hcCkgeworICAgICAgICAgICAgaWYgKGRldmljZV9jbGFzcyA9PSBGWERDX0RJU1BMQVkpIHsKKyAgICAgICAgICAgICAgICBDUERGX1R5cGUzQ2FjaGUqIHBDYWNoZSA9IEdldENhY2hlZFR5cGUzKHBUeXBlM0ZvbnQpOworICAgICAgICAgICAgICAgIHJlZlR5cGVDYWNoZS5tX2R3Q291bnQrKzsKKyAgICAgICAgICAgICAgICBDRlhfR2x5cGhCaXRtYXAqIHBCaXRtYXAgPSBwQ2FjaGUtPkxvYWRHbHlwaChjaGFyY29kZSwgJm1hdHJpeCwgc2EsIHNkKTsKKyAgICAgICAgICAgICAgICBpZiAocEJpdG1hcCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnQgb3JpZ2luX3ggPSBGWFNZU19yb3VuZChtYXRyaXguZSk7CisgICAgICAgICAgICAgICAgaW50IG9yaWdpbl95ID0gRlhTWVNfcm91bmQobWF0cml4LmYpOworICAgICAgICAgICAgICAgIGlmIChwR2x5cGhBbmRQb3MpIHsKKyAgICAgICAgICAgICAgICAgICAgcEdseXBoQW5kUG9zW2lDaGFyXS5tX3BHbHlwaCA9IHBCaXRtYXA7CisgICAgICAgICAgICAgICAgICAgIHBHbHlwaEFuZFBvc1tpQ2hhcl0ubV9PcmlnaW5YID0gb3JpZ2luX3g7CisgICAgICAgICAgICAgICAgICAgIHBHbHlwaEFuZFBvc1tpQ2hhcl0ubV9PcmlnaW5ZID0gb3JpZ2luX3k7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wRGV2aWNlLT5TZXRCaXRNYXNrKCZwQml0bWFwLT5tX0JpdG1hcCwgb3JpZ2luX3ggKyBwQml0bWFwLT5tX0xlZnQsIG9yaWdpbl95IC0gcEJpdG1hcC0+bV9Ub3AsIGZpbGxfYXJnYik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBDRlhfQWZmaW5lTWF0cml4IGltYWdlX21hdHJpeCA9IHBUeXBlM0NoYXItPm1fSW1hZ2VNYXRyaXg7CisgICAgICAgICAgICAgICAgaW1hZ2VfbWF0cml4LkNvbmNhdChtYXRyaXgpOworICAgICAgICAgICAgICAgIENQREZfSW1hZ2VSZW5kZXJlciByZW5kZXJlcjsKKyAgICAgICAgICAgICAgICBpZiAocmVuZGVyZXIuU3RhcnQodGhpcywgcFR5cGUzQ2hhci0+bV9wQml0bWFwLCBmaWxsX2FyZ2IsIDI1NSwgJmltYWdlX21hdHJpeCwgMCwgRkFMU0UpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyLkNvbnRpbnVlKE5VTEwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyLm1fUmVzdWx0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHBHbHlwaEFuZFBvcykgeworICAgICAgICBGWF9SRUNUIHJlY3QgPSBGWEdFX0dldEdseXBoc0JCb3gocEdseXBoQW5kUG9zLCB0ZXh0b2JqLT5tX25DaGFycywgMCwgc2EsIHNkKTsKKyAgICAgICAgQ0ZYX0RJQml0bWFwIGJpdG1hcDsKKyAgICAgICAgaWYgKCFiaXRtYXAuQ3JlYXRlKChpbnQpKHJlY3QuV2lkdGgoKSAqIHNhKSwgKGludCkocmVjdC5IZWlnaHQoKSAqIHNkKSwgRlhESUJfOGJwcE1hc2spKSB7CisgICAgICAgICAgICBGWF9GcmVlKHBHbHlwaEFuZFBvcyk7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBiaXRtYXAuQ2xlYXIoMCk7CisgICAgICAgIGZvciAoaW50IGlDaGFyID0gMDsgaUNoYXIgPCB0ZXh0b2JqLT5tX25DaGFyczsgaUNoYXIgKyspIHsKKyAgICAgICAgICAgIEZYVEVYVF9HTFlQSFBPUyYgZ2x5cGggPSBwR2x5cGhBbmRQb3NbaUNoYXJdOworICAgICAgICAgICAgaWYgKGdseXBoLm1fcEdseXBoID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJpdG1hcC5UcmFuc2ZlckJpdG1hcCgoaW50KSgoZ2x5cGgubV9PcmlnaW5YICsgZ2x5cGgubV9wR2x5cGgtPm1fTGVmdCAtIHJlY3QubGVmdCkgKiBzYSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoKGdseXBoLm1fT3JpZ2luWSAtIGdseXBoLm1fcEdseXBoLT5tX1RvcCAtIHJlY3QudG9wKSAqIHNkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaC5tX3BHbHlwaC0+bV9CaXRtYXAuR2V0V2lkdGgoKSwgZ2x5cGgubV9wR2x5cGgtPm1fQml0bWFwLkdldEhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnbHlwaC5tX3BHbHlwaC0+bV9CaXRtYXAsIDAsIDApOworICAgICAgICB9CisgICAgICAgIG1fcERldmljZS0+U2V0Qml0TWFzaygmYml0bWFwLCByZWN0LmxlZnQsIHJlY3QudG9wLCBmaWxsX2FyZ2IpOworICAgICAgICBGWF9GcmVlKHBHbHlwaEFuZFBvcyk7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorY2xhc3MgQ1BERl9DaGFyUG9zTGlzdAoreworcHVibGljOgorICAgIENQREZfQ2hhclBvc0xpc3QoKTsKKyAgICB+Q1BERl9DaGFyUG9zTGlzdCgpOworICAgIHZvaWQJCQkJTG9hZChpbnQgbkNoYXJzLCBGWF9EV09SRCogcENoYXJDb2RlcywgRlhfRkxPQVQqIHBDaGFyUG9zLCBDUERGX0ZvbnQqIHBGb250LCBGWF9GTE9BVCBmb250X3NpemUpOworICAgIEZYVEVYVF9DSEFSUE9TKgkJbV9wQ2hhclBvczsKKyAgICBGWF9EV09SRAkJCW1fbkNoYXJzOworfTsKK0ZYX0ZMT0FUIF9DSURUcmFuc2Zvcm1Ub0Zsb2F0KEZYX0JZVEUgY2gpOworQ1BERl9DaGFyUG9zTGlzdDo6Q1BERl9DaGFyUG9zTGlzdCgpCit7CisgICAgbV9wQ2hhclBvcyA9IE5VTEw7Cit9CitDUERGX0NoYXJQb3NMaXN0Ojp+Q1BERl9DaGFyUG9zTGlzdCgpCit7CisgICAgaWYgKG1fcENoYXJQb3MpIHsKKyAgICAgICAgRlhfRnJlZShtX3BDaGFyUG9zKTsKKyAgICB9Cit9Cit2b2lkIENQREZfQ2hhclBvc0xpc3Q6OkxvYWQoaW50IG5DaGFycywgRlhfRFdPUkQqIHBDaGFyQ29kZXMsIEZYX0ZMT0FUKiBwQ2hhclBvcywgQ1BERl9Gb250KiBwRm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCBGb250U2l6ZSkKK3sKKyAgICBtX3BDaGFyUG9zID0gRlhfQWxsb2MoRlhURVhUX0NIQVJQT1MsIG5DaGFycyk7CisgICAgRlhTWVNfbWVtc2V0MzIobV9wQ2hhclBvcywgMCwgc2l6ZW9mKEZYVEVYVF9DSEFSUE9TKSAqIG5DaGFycyk7CisgICAgbV9uQ2hhcnMgPSAwOworICAgIENQREZfQ0lERm9udCogcENJREZvbnQgPSBwRm9udC0+R2V0Q0lERm9udCgpOworICAgIEZYX0JPT0wgYlZlcnRXcml0aW5nID0gcENJREZvbnQgJiYgcENJREZvbnQtPklzVmVydFdyaXRpbmcoKTsKKyAgICBmb3IgKGludCBpQ2hhciA9IDA7IGlDaGFyIDwgbkNoYXJzOyBpQ2hhciArKykgeworICAgICAgICBGWF9EV09SRCBDaGFyQ29kZSA9IG5DaGFycyA9PSAxID8gKEZYX0RXT1JEKShGWF9VSU5UUFRSKXBDaGFyQ29kZXMgOiBwQ2hhckNvZGVzW2lDaGFyXTsKKyAgICAgICAgaWYgKENoYXJDb2RlID09IChGWF9EV09SRCkgLSAxKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBGWF9CT09MIGJWZXJ0ID0gRkFMU0U7CisgICAgICAgIEZYVEVYVF9DSEFSUE9TJiBjaGFycG9zID0gbV9wQ2hhclBvc1ttX25DaGFycysrXTsKKyAgICAgICAgaWYgKHBDSURGb250KSB7CisgICAgICAgICAgICBjaGFycG9zLm1fYkZvbnRTdHlsZSA9IHBDSURGb250LT5Jc0ZvbnRTdHlsZUZyb21DaGFyQ29kZShDaGFyQ29kZSk7CisgICAgICAgIH0KKyAgICAgICAgY2hhcnBvcy5tX0dseXBoSW5kZXggPSBwRm9udC0+R2x5cGhGcm9tQ2hhckNvZGUoQ2hhckNvZGUsICZiVmVydCk7CisjaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfCisgICAgICAgIGNoYXJwb3MubV9FeHRHSUQgPSBwRm9udC0+R2x5cGhGcm9tQ2hhckNvZGVFeHQoQ2hhckNvZGUpOworI2VuZGlmCisgICAgICAgIGlmICghcEZvbnQtPklzRW1iZWRkZWQoKSAmJiBwRm9udC0+R2V0Rm9udFR5cGUoKSAhPSBQREZGT05UX0NJREZPTlQpIHsKKyAgICAgICAgICAgIGNoYXJwb3MubV9Gb250Q2hhcldpZHRoID0gcEZvbnQtPkdldENoYXJXaWR0aEYoQ2hhckNvZGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2hhcnBvcy5tX0ZvbnRDaGFyV2lkdGggPSAwOworICAgICAgICB9CisgICAgICAgIGNoYXJwb3MubV9PcmlnaW5YID0gaUNoYXIgPyBwQ2hhclBvc1tpQ2hhciAtIDFdIDogMDsKKyAgICAgICAgY2hhcnBvcy5tX09yaWdpblkgPSAwOworICAgICAgICBjaGFycG9zLm1fYkdseXBoQWRqdXN0ID0gRkFMU0U7CisgICAgICAgIGlmIChwQ0lERm9udCA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBGWF9XT1JEIENJRCA9IHBDSURGb250LT5DSURGcm9tQ2hhckNvZGUoQ2hhckNvZGUpOworICAgICAgICBpZiAoYlZlcnRXcml0aW5nKSB7CisgICAgICAgICAgICBjaGFycG9zLm1fT3JpZ2luWSA9IGNoYXJwb3MubV9PcmlnaW5YOworICAgICAgICAgICAgY2hhcnBvcy5tX09yaWdpblggPSAwOworICAgICAgICAgICAgc2hvcnQgdngsIHZ5OworICAgICAgICAgICAgcENJREZvbnQtPkdldFZlcnRPcmlnaW4oQ0lELCB2eCwgdnkpOworICAgICAgICAgICAgY2hhcnBvcy5tX09yaWdpblggLT0gRm9udFNpemUgKiB2eCAvIDEwMDA7CisgICAgICAgICAgICBjaGFycG9zLm1fT3JpZ2luWSAtPSBGb250U2l6ZSAqIHZ5IC8gMTAwMDsKKyAgICAgICAgfQorICAgICAgICBGWF9MUENCWVRFIHBUcmFuc2Zvcm0gPSBwQ0lERm9udC0+R2V0Q0lEVHJhbnNmb3JtKENJRCk7CisgICAgICAgIGlmIChwVHJhbnNmb3JtICYmICFiVmVydCkgeworICAgICAgICAgICAgY2hhcnBvcy5tX0FkanVzdE1hdHJpeFswXSA9IF9DSURUcmFuc2Zvcm1Ub0Zsb2F0KHBUcmFuc2Zvcm1bMF0pOworICAgICAgICAgICAgY2hhcnBvcy5tX0FkanVzdE1hdHJpeFsyXSA9IF9DSURUcmFuc2Zvcm1Ub0Zsb2F0KHBUcmFuc2Zvcm1bMl0pOworICAgICAgICAgICAgY2hhcnBvcy5tX0FkanVzdE1hdHJpeFsxXSA9IF9DSURUcmFuc2Zvcm1Ub0Zsb2F0KHBUcmFuc2Zvcm1bMV0pOworICAgICAgICAgICAgY2hhcnBvcy5tX0FkanVzdE1hdHJpeFszXSA9IF9DSURUcmFuc2Zvcm1Ub0Zsb2F0KHBUcmFuc2Zvcm1bM10pOworICAgICAgICAgICAgY2hhcnBvcy5tX09yaWdpblggKz0gX0NJRFRyYW5zZm9ybVRvRmxvYXQocFRyYW5zZm9ybVs0XSkgKiBGb250U2l6ZTsKKyAgICAgICAgICAgIGNoYXJwb3MubV9PcmlnaW5ZICs9IF9DSURUcmFuc2Zvcm1Ub0Zsb2F0KHBUcmFuc2Zvcm1bNV0pICogRm9udFNpemU7CisgICAgICAgICAgICBjaGFycG9zLm1fYkdseXBoQWRqdXN0ID0gVFJVRTsKKyAgICAgICAgfQorICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9UZXh0UmVuZGVyZXI6OkRyYXdUZXh0UGF0aChDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBpbnQgbkNoYXJzLCBGWF9EV09SRCogcENoYXJDb2RlcywgRlhfRkxPQVQqIHBDaGFyUG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfRm9udCogcEZvbnQsIEZYX0ZMT0FUIGZvbnRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwVGV4dDJVc2VyLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwVXNlcjJEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9BUkdCIGZpbGxfYXJnYiwgRlhfQVJHQiBzdHJva2VfYXJnYiwgQ0ZYX1BhdGhEYXRhKiBwQ2xpcHBpbmdQYXRoLCBpbnQgbkZsYWcpCit7CisgICAgQ0ZYX0ZvbnRDYWNoZSogcENhY2hlID0gcEZvbnQtPm1fcERvY3VtZW50ID8gcEZvbnQtPm1fcERvY3VtZW50LT5HZXRSZW5kZXJEYXRhKCktPkdldEZvbnRDYWNoZSgpIDogTlVMTDsKKyAgICBDUERGX0NoYXJQb3NMaXN0IENoYXJQb3NMaXN0OworICAgIENoYXJQb3NMaXN0LkxvYWQobkNoYXJzLCBwQ2hhckNvZGVzLCBwQ2hhclBvcywgcEZvbnQsIGZvbnRfc2l6ZSk7CisgICAgcmV0dXJuIHBEZXZpY2UtPkRyYXdUZXh0UGF0aChDaGFyUG9zTGlzdC5tX25DaGFycywgQ2hhclBvc0xpc3QubV9wQ2hhclBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwRm9udC0+bV9Gb250LCBwQ2FjaGUsIGZvbnRfc2l6ZSwgcFRleHQyVXNlciwgcFVzZXIyRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEdyYXBoU3RhdGUsIGZpbGxfYXJnYiwgc3Ryb2tlX2FyZ2IsIHBDbGlwcGluZ1BhdGgsIG5GbGFnKTsKK30KK3ZvaWQgQ1BERl9UZXh0UmVuZGVyZXI6OkRyYXdUZXh0U3RyaW5nKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIGludCBsZWZ0LCBpbnQgdG9wLCBDUERGX0ZvbnQqIHBGb250LCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0ciwgRlhfQVJHQiBhcmdiKQoreworICAgIEZYX1JFQ1QgZm9udF9iYm94OworICAgIHBGb250LT5HZXRGb250QkJveChmb250X2Jib3gpOworICAgIEZYX0ZMT0FUIGZvbnRfc2l6ZSA9IChGWF9GTE9BVCloZWlnaHQgKiAxMDAwLjBmIC8gKEZYX0ZMT0FUKShmb250X2Jib3gudG9wIC0gZm9udF9iYm94LmJvdHRvbSk7CisgICAgRlhfRkxPQVQgb3JpZ2luX3ggPSAoRlhfRkxPQVQpbGVmdDsKKyAgICBGWF9GTE9BVCBvcmlnaW5feSA9IChGWF9GTE9BVCl0b3AgKyBmb250X3NpemUgKiAoRlhfRkxPQVQpZm9udF9iYm94LnRvcCAvIDEwMDAuMGY7CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXgoMS4wZiwgMCwgMCwgLTEuMGYsIDAsIDApOworICAgIERyYXdUZXh0U3RyaW5nKHBEZXZpY2UsIG9yaWdpbl94LCBvcmlnaW5feSwgcEZvbnQsIGZvbnRfc2l6ZSwgJm1hdHJpeCwgc3RyLCBhcmdiKTsKK30KK3ZvaWQgQ1BERl9UZXh0UmVuZGVyZXI6OkRyYXdUZXh0U3RyaW5nKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIEZYX0ZMT0FUIG9yaWdpbl94LCBGWF9GTE9BVCBvcmlnaW5feSwgQ1BERl9Gb250KiBwRm9udCwgRlhfRkxPQVQgZm9udF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0ciwgRlhfQVJHQiBmaWxsX2FyZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9BUkdCIHN0cm9rZV9hcmdiLCBjb25zdCBDRlhfR3JhcGhTdGF0ZURhdGEqIHBHcmFwaFN0YXRlLCBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zKQoreworICAgIGludCBuQ2hhcnMgPSBwRm9udC0+Q291bnRDaGFyKHN0ciwgc3RyLkdldExlbmd0aCgpKTsKKyAgICBpZiAobkNoYXJzID09IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGWF9EV09SRCBjaGFyY29kZTsKKyAgICBpbnQgb2Zmc2V0ID0gMDsKKyAgICBGWF9EV09SRCogcENoYXJDb2RlczsKKyAgICBGWF9GTE9BVCogcENoYXJQb3M7CisgICAgaWYgKG5DaGFycyA9PSAxKSB7CisgICAgICAgIGNoYXJjb2RlID0gcEZvbnQtPkdldE5leHRDaGFyKHN0ciwgb2Zmc2V0KTsKKyAgICAgICAgcENoYXJDb2RlcyA9IChGWF9EV09SRCopKEZYX1VJTlRQVFIpY2hhcmNvZGU7CisgICAgICAgIHBDaGFyUG9zID0gTlVMTDsKKyAgICB9IGVsc2UgeworICAgICAgICBwQ2hhckNvZGVzID0gRlhfQWxsb2MoRlhfRFdPUkQsIG5DaGFycyk7CisgICAgICAgIHBDaGFyUG9zID0gRlhfQWxsb2MoRlhfRkxPQVQsIG5DaGFycyAtIDEpOworICAgICAgICBGWF9GTE9BVCBjdXJfcG9zID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuQ2hhcnM7IGkgKyspIHsKKyAgICAgICAgICAgIHBDaGFyQ29kZXNbaV0gPSBwRm9udC0+R2V0TmV4dENoYXIoc3RyLCBvZmZzZXQpOworICAgICAgICAgICAgaWYgKGkpIHsKKyAgICAgICAgICAgICAgICBwQ2hhclBvc1tpIC0gMV0gPSBjdXJfcG9zOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3VyX3BvcyArPSBwRm9udC0+R2V0Q2hhcldpZHRoRihwQ2hhckNvZGVzW2ldKSAqIGZvbnRfc2l6ZSAvIDEwMDA7CisgICAgICAgIH0KKyAgICB9CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXg7CisgICAgaWYgKHBNYXRyaXgpIHsKKyAgICAgICAgbWF0cml4ID0gKnBNYXRyaXg7CisgICAgfQorICAgIG1hdHJpeC5lID0gb3JpZ2luX3g7CisgICAgbWF0cml4LmYgPSBvcmlnaW5feTsKKyAgICBpZiAocEZvbnQtPkdldEZvbnRUeXBlKCkgPT0gUERGRk9OVF9UWVBFMykKKyAgICAgICAgOworICAgIGVsc2UgaWYgKHN0cm9rZV9hcmdiID09IDApIHsKKyAgICAgICAgRHJhd05vcm1hbFRleHQocERldmljZSwgbkNoYXJzLCBwQ2hhckNvZGVzLCBwQ2hhclBvcywgcEZvbnQsIGZvbnRfc2l6ZSwgJm1hdHJpeCwgZmlsbF9hcmdiLCBwT3B0aW9ucyk7CisgICAgfSBlbHNlCisgICAgICAgIERyYXdUZXh0UGF0aChwRGV2aWNlLCBuQ2hhcnMsIHBDaGFyQ29kZXMsIHBDaGFyUG9zLCBwRm9udCwgZm9udF9zaXplLCAmbWF0cml4LCBOVUxMLCBwR3JhcGhTdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgIGZpbGxfYXJnYiwgc3Ryb2tlX2FyZ2IsIE5VTEwpOworICAgIGlmIChuQ2hhcnMgPiAxKSB7CisgICAgICAgIEZYX0ZyZWUocENoYXJDb2Rlcyk7CisgICAgICAgIEZYX0ZyZWUocENoYXJQb3MpOworICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9UZXh0UmVuZGVyZXI6OkRyYXdOb3JtYWxUZXh0KENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIGludCBuQ2hhcnMsIEZYX0RXT1JEKiBwQ2hhckNvZGVzLCBGWF9GTE9BVCogcENoYXJQb3MsCisgICAgICAgIENQREZfRm9udCogcEZvbnQsIEZYX0ZMT0FUIGZvbnRfc2l6ZSwKKyAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcFRleHQyRGV2aWNlLAorICAgICAgICBGWF9BUkdCIGZpbGxfYXJnYiwgY29uc3QgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucykKK3sKKyAgICBDRlhfRm9udENhY2hlKiBwQ2FjaGUgPSBwRm9udC0+bV9wRG9jdW1lbnQgPyBwRm9udC0+bV9wRG9jdW1lbnQtPkdldFJlbmRlckRhdGEoKS0+R2V0Rm9udENhY2hlKCkgOiBOVUxMOworICAgIENQREZfQ2hhclBvc0xpc3QgQ2hhclBvc0xpc3Q7CisgICAgQ2hhclBvc0xpc3QuTG9hZChuQ2hhcnMsIHBDaGFyQ29kZXMsIHBDaGFyUG9zLCBwRm9udCwgZm9udF9zaXplKTsKKyAgICBpbnQgRlhHRV9mbGFncyA9IDA7CisgICAgaWYgKHBPcHRpb25zKSB7CisgICAgICAgIEZYX0RXT1JEIGR3RmxhZ3MgPSBwT3B0aW9ucy0+bV9GbGFnczsKKyAgICAgICAgaWYgKGR3RmxhZ3MgJiBSRU5ERVJfQ0xFQVJUWVBFKSB7CisgICAgICAgICAgICBGWEdFX2ZsYWdzIHw9IEZYVEVYVF9DTEVBUlRZUEU7CisgICAgICAgICAgICBpZiAoZHdGbGFncyAmIFJFTkRFUl9CR1JfU1RSSVBFKSB7CisgICAgICAgICAgICAgICAgRlhHRV9mbGFncyB8PSBGWFRFWFRfQkdSX1NUUklQRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZHdGbGFncyAmIFJFTkRFUl9OT1RFWFRTTU9PVEgpIHsKKyAgICAgICAgICAgIEZYR0VfZmxhZ3MgfD0gRlhURVhUX05PU01PT1RIOworICAgICAgICB9CisgICAgICAgIGlmIChkd0ZsYWdzICYgUkVOREVSX1BSSU5UR1JBUEhJQ1RFWFQpIHsKKyAgICAgICAgICAgIEZYR0VfZmxhZ3MgfD0gRlhURVhUX1BSSU5UR1JBUEhJQ1RFWFQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGR3RmxhZ3MgJiBSRU5ERVJfTk9fTkFUSVZFVEVYVCkgeworICAgICAgICAgICAgRlhHRV9mbGFncyB8PSBGWFRFWFRfTk9fTkFUSVZFVEVYVDsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHdGbGFncyAmIFJFTkRFUl9QUklOVElNQUdFVEVYVCkgeworICAgICAgICAgICAgRlhHRV9mbGFncyB8PSBGWFRFWFRfUFJJTlRJTUFHRVRFWFQ7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBGWEdFX2ZsYWdzID0gRlhURVhUX0NMRUFSVFlQRTsKKyAgICB9CisgICAgaWYgKHBGb250LT5HZXRGb250VHlwZSgpICYgUERGRk9OVF9DSURGT05UKSB7CisgICAgICAgIEZYR0VfZmxhZ3MgfD0gRlhGT05UX0NJREZPTlQ7CisgICAgfQorICAgIHJldHVybiBwRGV2aWNlLT5EcmF3Tm9ybWFsVGV4dChDaGFyUG9zTGlzdC5tX25DaGFycywgQ2hhclBvc0xpc3QubV9wQ2hhclBvcywgJnBGb250LT5tX0ZvbnQsIHBDYWNoZSwgZm9udF9zaXplLCBwVGV4dDJEZXZpY2UsIGZpbGxfYXJnYiwgRlhHRV9mbGFncyk7Cit9Cit2b2lkIENQREZfUmVuZGVyU3RhdHVzOjpEcmF3VGV4dFBhdGhXaXRoUGF0dGVybihjb25zdCBDUERGX1RleHRPYmplY3QqIHRleHRvYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlLAorICAgICAgICBDUERGX0ZvbnQqIHBGb250LCBGWF9GTE9BVCBmb250X3NpemUsCisgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBUZXh0TWF0cml4LCBGWF9CT09MIGJGaWxsLCBGWF9CT09MIGJTdHJva2UpCit7CisgICAgaWYgKCFiU3Ryb2tlKSB7CisgICAgICAgIENQREZfUGF0aE9iamVjdCBwYXRoOworICAgICAgICBDUERGX1RleHRPYmplY3QqIHBDb3B5ID0gRlhfTkVXIENQREZfVGV4dE9iamVjdDsKKyAgICAgICAgcENvcHktPkNvcHkodGV4dG9iaik7CisgICAgICAgIHBhdGgubV9iU3Ryb2tlID0gRkFMU0U7CisgICAgICAgIHBhdGgubV9GaWxsVHlwZSA9IEZYRklMTF9XSU5ESU5HOworICAgICAgICBwYXRoLm1fQ2xpcFBhdGguQXBwZW5kVGV4dHMoJnBDb3B5LCAxKTsKKyAgICAgICAgcGF0aC5tX0NvbG9yU3RhdGUgPSB0ZXh0b2JqLT5tX0NvbG9yU3RhdGU7CisgICAgICAgIHBhdGgubV9QYXRoLk5ldygpLT5BcHBlbmRSZWN0KHRleHRvYmotPm1fTGVmdCwgdGV4dG9iai0+bV9Cb3R0b20sIHRleHRvYmotPm1fUmlnaHQsIHRleHRvYmotPm1fVG9wKTsKKyAgICAgICAgcGF0aC5tX0xlZnQgPSB0ZXh0b2JqLT5tX0xlZnQ7CisgICAgICAgIHBhdGgubV9Cb3R0b20gPSB0ZXh0b2JqLT5tX0JvdHRvbTsKKyAgICAgICAgcGF0aC5tX1JpZ2h0ID0gdGV4dG9iai0+bV9SaWdodDsKKyAgICAgICAgcGF0aC5tX1RvcCA9IHRleHRvYmotPm1fVG9wOworICAgICAgICBSZW5kZXJTaW5nbGVPYmplY3QoJnBhdGgsIHBPYmoyRGV2aWNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDRlhfRm9udENhY2hlKiBwQ2FjaGU7CisgICAgaWYgKHBGb250LT5tX3BEb2N1bWVudCkgeworICAgICAgICBwQ2FjaGUgPSBwRm9udC0+bV9wRG9jdW1lbnQtPkdldFJlbmRlckRhdGEoKS0+R2V0Rm9udENhY2hlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcENhY2hlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Rm9udENhY2hlKCk7CisgICAgfQorICAgIENGWF9GYWNlQ2FjaGUqIHBGYWNlQ2FjaGUgPSBwQ2FjaGUtPkdldENhY2hlZEZhY2UoJnBGb250LT5tX0ZvbnQpOworICAgIEZYX0ZPTlRDQUNIRV9ERUZJTkUocENhY2hlLCAmcEZvbnQtPm1fRm9udCk7CisgICAgQ1BERl9DaGFyUG9zTGlzdCBDaGFyUG9zTGlzdDsKKyAgICBDaGFyUG9zTGlzdC5Mb2FkKHRleHRvYmotPm1fbkNoYXJzLCB0ZXh0b2JqLT5tX3BDaGFyQ29kZXMsIHRleHRvYmotPm1fcENoYXJQb3MsIHBGb250LCBmb250X3NpemUpOworICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBDaGFyUG9zTGlzdC5tX25DaGFyczsgaSArKykgeworICAgICAgICBGWFRFWFRfQ0hBUlBPUyYgY2hhcnBvcyA9IENoYXJQb3NMaXN0Lm1fcENoYXJQb3NbaV07CisgICAgICAgIGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGggPSBwRmFjZUNhY2hlLT5Mb2FkR2x5cGhQYXRoKCZwRm9udC0+bV9Gb250LCBjaGFycG9zLm1fR2x5cGhJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJwb3MubV9Gb250Q2hhcldpZHRoKTsKKyAgICAgICAgaWYgKHBQYXRoID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIENQREZfUGF0aE9iamVjdCBwYXRoOworICAgICAgICBwYXRoLm1fR3JhcGhTdGF0ZSA9IHRleHRvYmotPm1fR3JhcGhTdGF0ZTsKKyAgICAgICAgcGF0aC5tX0NvbG9yU3RhdGUgPSB0ZXh0b2JqLT5tX0NvbG9yU3RhdGU7CisgICAgICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4OworICAgICAgICBpZiAoY2hhcnBvcy5tX2JHbHlwaEFkanVzdCkKKyAgICAgICAgICAgIG1hdHJpeC5TZXQoY2hhcnBvcy5tX0FkanVzdE1hdHJpeFswXSwgY2hhcnBvcy5tX0FkanVzdE1hdHJpeFsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhcnBvcy5tX0FkanVzdE1hdHJpeFsyXSwgY2hhcnBvcy5tX0FkanVzdE1hdHJpeFszXSwgMCwgMCk7CisgICAgICAgIG1hdHJpeC5Db25jYXQoZm9udF9zaXplLCAwLCAwLCBmb250X3NpemUsIGNoYXJwb3MubV9PcmlnaW5YLCBjaGFycG9zLm1fT3JpZ2luWSk7CisgICAgICAgIHBhdGgubV9QYXRoLk5ldygpLT5BcHBlbmQocFBhdGgsICZtYXRyaXgpOworICAgICAgICBwYXRoLm1fTWF0cml4ID0gKnBUZXh0TWF0cml4OworICAgICAgICBwYXRoLm1fYlN0cm9rZSA9IGJTdHJva2U7CisgICAgICAgIHBhdGgubV9GaWxsVHlwZSA9IGJGaWxsID8gRlhGSUxMX1dJTkRJTkcgOiAwOworICAgICAgICBwYXRoLkNhbGNCb3VuZGluZ0JveCgpOworICAgICAgICBQcm9jZXNzUGF0aCgmcGF0aCwgcE9iajJEZXZpY2UpOworICAgIH0KK30KK0NGWF9QYXRoRGF0YSogQ1BERl9Gb250OjpMb2FkR2x5cGhQYXRoKEZYX0RXT1JEIGNoYXJjb2RlLCBpbnQgZGVzdF93aWR0aCkKK3sKKyAgICBpbnQgZ2x5cGhfaW5kZXggPSBHbHlwaEZyb21DaGFyQ29kZShjaGFyY29kZSk7CisgICAgaWYgKG1fRm9udC5tX0ZhY2UgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIG1fRm9udC5Mb2FkR2x5cGhQYXRoKGdseXBoX2luZGV4LCBkZXN0X3dpZHRoKTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZhcGkvZnBkZl9yZW5kZXIvcmVuZGVyX2ludC5oIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3JlbmRlci9yZW5kZXJfaW50LmgKaW5kZXggM2FjZGUwZS4uOWJkZTRiZSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3JlbmRlci9yZW5kZXJfaW50LmgKKysrIGIvY29yZS9zcmMvZnBkZmFwaS9mcGRmX3JlbmRlci9yZW5kZXJfaW50LmgKQEAgLTEsNDYyICsxLDQ2MiBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlBERl9QQUdFT0JKX0hfDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2VvYmouaCINCi0jZW5kaWYNCi1jbGFzcyBDUERGX1F1aWNrU3RyZXRjaGVyOw0KLSNkZWZpbmUgVFlQRTNfTUFYX0JMVUVTCQkxNg0KLWNsYXNzIENQREZfVHlwZTNHbHlwaHMgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfVHlwZTNHbHlwaHMoKQ0KLSAgICB7DQotICAgICAgICBtX0dseXBoTWFwLkluaXRIYXNoVGFibGUoMjUzKTsNCi0gICAgICAgIG1fVG9wQmx1ZUNvdW50ID0gbV9Cb3R0b21CbHVlQ291bnQgPSAwOw0KLSAgICB9DQotICAgIH5DUERGX1R5cGUzR2x5cGhzKCk7DQotICAgIENGWF9NYXBQdHJUb1B0cgkJCW1fR2x5cGhNYXA7DQotICAgIHZvaWQJCQkJCUFkanVzdEJsdWUoRlhfRkxPQVQgdG9wLCBGWF9GTE9BVCBib3R0b20sIGludCYgdG9wX2xpbmUsIGludCYgYm90dG9tX2xpbmUpOw0KLQ0KLSAgICBpbnQJCQkJCQltX1RvcEJsdWVbVFlQRTNfTUFYX0JMVUVTXSwgbV9Cb3R0b21CbHVlW1RZUEUzX01BWF9CTFVFU107DQotICAgIGludAkJCQkJCW1fVG9wQmx1ZUNvdW50LCBtX0JvdHRvbUJsdWVDb3VudDsNCi19Ow0KLWNsYXNzIENGWF9HbHlwaEJpdG1hcDsNCi1jbGFzcyBDUERGX1R5cGUzQ2FjaGUgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfVHlwZTNDYWNoZShDUERGX1R5cGUzRm9udCogcEZvbnQpDQotICAgIHsNCi0gICAgICAgIG1fcEZvbnQgPSBwRm9udDsNCi0gICAgfQ0KLSAgICB+Q1BERl9UeXBlM0NhY2hlKCk7DQotICAgIENGWF9HbHlwaEJpdG1hcCoJCUxvYWRHbHlwaChGWF9EV09SRCBjaGFyY29kZSwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgRlhfRkxPQVQgcmV0aW5hU2NhbGVYID0gMS4wZiwgRlhfRkxPQVQgcmV0aW5hU2NhbGVZID0gMS4wZik7DQotcHJvdGVjdGVkOg0KLSAgICBDRlhfR2x5cGhCaXRtYXAqCQlSZW5kZXJHbHlwaChDUERGX1R5cGUzR2x5cGhzKiBwU2l6ZSwgRlhfRFdPUkQgY2hhcmNvZGUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIEZYX0ZMT0FUIHJldGluYVNjYWxlWCA9IDEuMGYsIEZYX0ZMT0FUIHJldGluYVNjYWxlWSA9IDEuMGYpOw0KLSAgICBDUERGX1R5cGUzRm9udCoJCQltX3BGb250Ow0KLSAgICBDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyCW1fU2l6ZU1hcDsNCi19Ow0KLWNsYXNzIENQREZfVHJhbnNmZXJGdW5jIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDUERGX0RvY3VtZW50KgltX3BQREZEb2M7DQotICAgIEZYX0JZVEUJCQltX1NhbXBsZXNbMjU2ICogM107DQotICAgIEZYX0JPT0wJCQltX2JJZGVudGl0eTsNCi0NCi0gICAgQ0ZYX0RJQlNvdXJjZSoJVHJhbnNsYXRlSW1hZ2UoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyYywgRlhfQk9PTCBiQXV0b0Ryb3BTcmMpOw0KLSAgICBGWF9DT0xPUlJFRgkJVHJhbnNsYXRlQ29sb3IoRlhfQ09MT1JSRUYgc3JjKTsNCi19Ow0KLXR5cGVkZWYgQ0ZYX01hcFB0clRlbXBsYXRlPENQREZfRm9udCosIENQREZfQ291bnRlZE9iamVjdDxDUERGX1R5cGUzQ2FjaGUqPio+IENQREZfVHlwZTNDYWNoZU1hcDsNCi10eXBlZGVmIENGWF9NYXBQdHJUZW1wbGF0ZTxDUERGX09iamVjdCosIENQREZfQ291bnRlZE9iamVjdDxDUERGX1RyYW5zZmVyRnVuYyo+Kj4gQ1BERl9UcmFuc2ZlckZ1bmNNYXA7DQotY2xhc3MgQ1BERl9Eb2NSZW5kZXJEYXRhIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDUERGX0RvY1JlbmRlckRhdGEoQ1BERl9Eb2N1bWVudCogcFBERkRvYyA9IE5VTEwpOw0KLSAgICB+Q1BERl9Eb2NSZW5kZXJEYXRhKCk7DQotICAgIEZYX0JPT0wJCQkJSW5pdGlhbGl6ZSgpOw0KLSAgICBDUERGX1R5cGUzQ2FjaGUqCUdldENhY2hlZFR5cGUzKENQREZfVHlwZTNGb250KiBwRm9udCk7DQotICAgIENQREZfVHJhbnNmZXJGdW5jKglHZXRUcmFuc2ZlckZ1bmMoQ1BERl9PYmplY3QqIHBPYmopOw0KLSAgICBDRlhfRm9udENhY2hlKgkJR2V0Rm9udENhY2hlKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcEZvbnRDYWNoZTsNCi0gICAgfQ0KLSAgICB2b2lkCQkJCUNsZWFyKEZYX0JPT0wgYlJlbGVhc2UgPSBGQUxTRSk7DQotICAgIHZvaWQJCQkJUmVsZWFzZUNhY2hlZFR5cGUzKENQREZfVHlwZTNGb250KiBwRm9udCk7DQotICAgIHZvaWQJCQkJUmVsZWFzZVRyYW5zZmVyRnVuYyhDUERGX09iamVjdCogcE9iaik7DQotcHJpdmF0ZToNCi0gICAgQ1BERl9Eb2N1bWVudCoJCW1fcFBERkRvYzsNCi0gICAgQ0ZYX0ZvbnRDYWNoZSoJCW1fcEZvbnRDYWNoZTsNCi0gICAgQ1BERl9UeXBlM0NhY2hlTWFwCW1fVHlwZTNGYWNlTWFwOw0KLSAgICBDUERGX1RyYW5zZmVyRnVuY01hcAltX1RyYW5zZmVyRnVuY01hcDsNCi19Ow0KLXN0cnVjdCBfUERGX1JlbmRlckl0ZW0gew0KLXB1YmxpYzoNCi0gICAgQ1BERl9QYWdlT2JqZWN0cyoJCQltX3BPYmplY3RMaXN0Ow0KLSAgICBDRlhfQWZmaW5lTWF0cml4CQkJbV9NYXRyaXg7DQotfTsNCi10eXBlZGVmIENGWF9BcnJheVRlbXBsYXRlPF9QREZfUmVuZGVySXRlbT4JQ1BERl9SZW5kZXJMYXllcjsNCi1jbGFzcyBJUERGX09iamVjdFJlbmRlcmVyIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBzdGF0aWMgSVBERl9PYmplY3RSZW5kZXJlciogQ3JlYXRlKGludCB0eXBlKTsNCi0gICAgdmlydHVhbCB+SVBERl9PYmplY3RSZW5kZXJlcigpIHt9DQotICAgIHZpcnR1YWwgRlhfQk9PTCBTdGFydChDUERGX1JlbmRlclN0YXR1cyogcFJlbmRlclN0YXR1cywgY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSwgRlhfQk9PTCBiU3RkQ1MsIGludCBibGVuZFR5cGUgPSBGWERJQl9CTEVORF9OT1JNQUwpID0gMDsNCi0gICAgdmlydHVhbCBGWF9CT09MIENvbnRpbnVlKElGWF9QYXVzZSogcFBhdXNlKSA9IDA7DQotICAgIEZYX0JPT0wJCW1fUmVzdWx0Ow0KLX07DQotY2xhc3MgQ1BERl9SZW5kZXJTdGF0dXMgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfUmVuZGVyU3RhdHVzKCk7DQotICAgIH5DUERGX1JlbmRlclN0YXR1cygpOw0KLSAgICBGWF9CT09MCQkJSW5pdGlhbGl6ZShpbnQgbGV2ZWwsIGNsYXNzIENQREZfUmVuZGVyQ29udGV4dCogcENvbnRleHQsIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBEZXZpY2VNYXRyaXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENQREZfUGFnZU9iamVjdCogcFN0b3BPYmosIGNvbnN0IENQREZfUmVuZGVyU3RhdHVzKiBwUGFyZW50U3RhdHVzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDUERGX0dyYXBoaWNTdGF0ZXMqIHBJbml0aWFsU3RhdGVzLCBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHJhbnNwYXJlbmN5LCBGWF9CT09MIGJEcm9wT2JqZWN0cywgQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybVJlc291cmNlID0gTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiU3RkQ1MgPSBGQUxTRSwJQ1BERl9UeXBlM0NoYXIqIHBUeXBlM0NoYXIgPSBOVUxMLCBGWF9BUkdCIGZpbGxfY29sb3IgPSAwLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBHcm91cEZhbWlseSA9IDAsIEZYX0JPT0wgYkxvYWRNYXNrID0gRkFMU0UpOw0KLSAgICB2b2lkCQkJUmVuZGVyT2JqZWN0TGlzdChjb25zdCBDUERGX1BhZ2VPYmplY3RzKiBwT2JqcywgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpOw0KLSAgICB2b2lkCQkJUmVuZGVyU2luZ2xlT2JqZWN0KGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpOw0KLSAgICBGWF9CT09MCQkJQ29udGludWVTaW5nbGVPYmplY3QoY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSwgSUZYX1BhdXNlKiBwUGF1c2UpOw0KLSAgICBDUERGX1JlbmRlck9wdGlvbnMJbV9PcHRpb25zOw0KLSAgICBDUERGX0RpY3Rpb25hcnkqICAgIG1fcEZvcm1SZXNvdXJjZTsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiAgICBtX3BQYWdlUmVzb3VyY2U7DQotICAgIENGWF9QdHJBcnJheQkJbV9UeXBlM0ZvbnRDYWNoZTsNCi0gICAgQ1BERl9SZW5kZXJDb250ZXh0KiBHZXRDb250ZXh0KCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcENvbnRleHQ7DQotICAgIH0NCi1wcm90ZWN0ZWQ6DQotICAgIGZyaWVuZCBjbGFzcwlDUERGX0ltYWdlUmVuZGVyZXI7DQotICAgIGZyaWVuZCBjbGFzcwlDUERGX1JlbmRlckNvbnRleHQ7DQotICAgIHZvaWQJCQlQcm9jZXNzQ2xpcFBhdGgoQ1BERl9DbGlwUGF0aCBDbGlwUGF0aCwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpOw0KLSAgICB2b2lkCQkJRHJhd0NsaXBQYXRoKENQREZfQ2xpcFBhdGggQ2xpcFBhdGgsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKTsNCi0gICAgRlhfQk9PTAkJCVByb2Nlc3NUcmFuc3BhcmVuY3koY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBQYWdlT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSk7DQotICAgIHZvaWQJCQlQcm9jZXNzT2JqZWN0Tm9DbGlwKGNvbnN0IENQREZfUGFnZU9iamVjdCogUGFnZU9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpOw0KLSAgICB2b2lkCQkJRHJhd09ialdpdGhCYWNrZ3JvdW5kKGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpOw0KLSAgICBGWF9CT09MICAgICAgICAgRHJhd09ialdpdGhCbGVuZChjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKTsNCi0gICAgRlhfQk9PTAkJCVByb2Nlc3NQYXRoKENQREZfUGF0aE9iamVjdCogcFBhdGhPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKTsNCi0gICAgdm9pZAkJCVByb2Nlc3NQYXRoUGF0dGVybihDUERGX1BhdGhPYmplY3QqIHBQYXRoT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSwgaW50JiBmaWxsdHlwZSwgRlhfQk9PTCYgYlN0cm9rZSk7DQotICAgIHZvaWQJCQlEcmF3UGF0aFdpdGhQYXR0ZXJuKENQREZfUGF0aE9iamVjdCogcFBhdGhPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlLCBDUERGX0NvbG9yKiBwQ29sb3IsIEZYX0JPT0wgYlN0cm9rZSk7DQotICAgIHZvaWQJCQlEcmF3VGlsaW5nUGF0dGVybihDUERGX1RpbGluZ1BhdHRlcm4qIHBQYXR0ZXJuLCBDUERGX1BhZ2VPYmplY3QqIHBQYWdlT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSwgRlhfQk9PTCBiU3Ryb2tlKTsNCi0gICAgdm9pZAkJCURyYXdTaGFkaW5nUGF0dGVybihDUERGX1NoYWRpbmdQYXR0ZXJuKiBwUGF0dGVybiwgQ1BERl9QYWdlT2JqZWN0KiBwUGFnZU9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UsIEZYX0JPT0wgYlN0cm9rZSk7DQotICAgIEZYX0JPT0wJCQlTZWxlY3RDbGlwUGF0aChDUERGX1BhdGhPYmplY3QqIHBQYXRoT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSwgRlhfQk9PTCBiU3Ryb2tlKTsNCi0gICAgRlhfQk9PTAkJCVByb2Nlc3NJbWFnZShDUERGX0ltYWdlT2JqZWN0KiBwSW1hZ2VPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKTsNCi0gICAgRlhfQk9PTAkJCU91dHB1dEJpdG1hcEFscGhhKENQREZfSW1hZ2VPYmplY3QqIHBJbWFnZU9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcEltYWdlMkRldmljZSk7DQotICAgIEZYX0JPT0wJCQlPdXRwdXRJbWFnZShDUERGX0ltYWdlT2JqZWN0KiBwSW1hZ2VPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBJbWFnZTJEZXZpY2UpOw0KLSAgICBGWF9CT09MCQkJT3V0cHV0RElCU291cmNlKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBPdXRwdXRCaXRtYXAsIEZYX0FSR0IgZmlsbF9hcmdiLCBpbnQgYml0bWFwX2FscGhhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBJbWFnZTJEZXZpY2UsIENQREZfSW1hZ2VDYWNoZSogcEltYWdlQ2FjaGUsIEZYX0RXT1JEIGZsYWdzKTsNCi0gICAgdm9pZAkJCUNvbXBvc2l0ZURJQml0bWFwKENGWF9ESUJpdG1hcCogcERJQml0bWFwLCBpbnQgbGVmdCwgaW50IHRvcCwgRlhfQVJHQiBtYXNrX2FyZ2IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYml0bWFwX2FscGhhLCBpbnQgYmxlbmRfbW9kZSwgaW50IGJJc29sYXRlZCk7DQotICAgIEZYX0JPT0wJCQlQcm9jZXNzSW5saW5lcyhDUERGX0lubGluZUltYWdlcyogcElubGluZXMsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKTsNCi0gICAgRlhfQk9PTAkJCVByb2Nlc3NTaGFkaW5nKENQREZfU2hhZGluZ09iamVjdCogcFNoYWRpbmdPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKTsNCi0gICAgdm9pZAkJCURyYXdTaGFkaW5nKENQREZfU2hhZGluZ1BhdHRlcm4qIHBQYXR0ZXJuLCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LCBGWF9SRUNUJiBjbGlwX3JlY3QsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGEsIEZYX0JPT0wgYkFscGhhTW9kZSk7DQotICAgIEZYX0JPT0wJCQlQcm9jZXNzVHlwZTNUZXh0KGNvbnN0IENQREZfVGV4dE9iamVjdCogdGV4dG9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpOw0KLSAgICBGWF9CT09MCQkJUHJvY2Vzc1RleHQoY29uc3QgQ1BERl9UZXh0T2JqZWN0KiB0ZXh0b2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSwgQ0ZYX1BhdGhEYXRhKiBwQ2xpcHBpbmdQYXRoKTsNCi0gICAgdm9pZAkJCURyYXdUZXh0UGF0aFdpdGhQYXR0ZXJuKGNvbnN0IENQREZfVGV4dE9iamVjdCogdGV4dG9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0ZvbnQqIHBGb250LCBGWF9GTE9BVCBmb250X3NpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwVGV4dE1hdHJpeCwgRlhfQk9PTCBiRmlsbCwgRlhfQk9PTCBiU3Ryb2tlKTsNCi0gICAgRlhfQk9PTAkJCVByb2Nlc3NGb3JtKENQREZfRm9ybU9iamVjdCogcEZvcm1PYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKTsNCi0gICAgQ0ZYX0RJQml0bWFwKglHZXRCYWNrZHJvcChjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmosIGNvbnN0IEZYX1JFQ1QmIHJlY3QsIGludCYgbGVmdCwgaW50JiB0b3AsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9CT09MIGJCYWNrQWxwaGFSZXF1aXJlZCk7DQotICAgIENGWF9ESUJpdG1hcCoJTG9hZFNNYXNrKENQREZfRGljdGlvbmFyeSogcFNNYXNrRGljdCwgRlhfUkVDVCogcENsaXBSZWN0LCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4KTsNCi0gICAgdm9pZAkJCUluaXQoQ1BERl9SZW5kZXJDb250ZXh0KiBwUGFyZW50KTsNCi0gICAgc3RhdGljIGNsYXNzIENQREZfVHlwZTNDYWNoZSoJR2V0Q2FjaGVkVHlwZTMoQ1BERl9UeXBlM0ZvbnQqIHBGb250KTsNCi0gICAgc3RhdGljIENQREZfR3JhcGhpY1N0YXRlcyogQ2xvbmVPYmpTdGF0ZXMoY29uc3QgQ1BERl9HcmFwaGljU3RhdGVzKiBwUGF0aE9iaiwgRlhfQk9PTCBiU3Ryb2tlKTsNCi0gICAgQ1BERl9UcmFuc2ZlckZ1bmMqCUdldFRyYW5zZmVyRnVuYyhDUERGX09iamVjdCogcE9iamVjdCkgY29uc3Q7DQotICAgIEZYX0FSR0IJCQlHZXRGaWxsQXJnYihjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmosIEZYX0JPT0wgYlR5cGUzID0gRkFMU0UpIGNvbnN0Ow0KLSAgICBGWF9BUkdCCQkJR2V0U3Ryb2tlQXJnYihjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmopIGNvbnN0Ow0KLSAgICBDUERGX1JlbmRlckNvbnRleHQqCQltX3BDb250ZXh0Ow0KLSAgICBGWF9CT09MCQkJCQltX2JTdG9wcGVkOw0KLSAgICB2b2lkCQkJRGl0aGVyT2JqZWN0QXJlYShjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKTsNCi0gICAgRlhfQk9PTAkJCUdldE9iamVjdENsaXBwZWRSZWN0KGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UsIEZYX0JPT0wgYkxvZ2ljYWwsIEZYX1JFQ1QgJnJlY3QpIGNvbnN0Ow0KLSAgICB2b2lkCQkJR2V0U2NhbGVkTWF0cml4KENGWF9NYXRyaXggJm1hdHJpeCkgY29uc3Q7DQotcHJvdGVjdGVkOg0KLSAgICBpbnQJCQkJCQltX0xldmVsOw0KLSAgICBDRlhfUmVuZGVyRGV2aWNlKgkJbV9wRGV2aWNlOw0KLSAgICBDRlhfQWZmaW5lTWF0cml4CQltX0RldmljZU1hdHJpeDsNCi0gICAgQ1BERl9DbGlwUGF0aAkJCW1fTGFzdENsaXBQYXRoOw0KLSAgICBjb25zdCBDUERGX1BhZ2VPYmplY3QqCW1fcEN1ck9iajsNCi0gICAgY29uc3QgQ1BERl9QYWdlT2JqZWN0KgltX3BTdG9wT2JqOw0KLSAgICBDUERGX0dyYXBoaWNTdGF0ZXMJCW1fSW5pdGlhbFN0YXRlczsNCi0gICAgaW50CQkJCQkJbV9IYWxmdG9uZUxpbWl0Ow0KLSAgICBJUERGX09iamVjdFJlbmRlcmVyKgltX3BPYmplY3RSZW5kZXJlcjsNCi0gICAgRlhfQk9PTAkJCQkJbV9iUHJpbnQ7DQotICAgIGludAkJCQkJCW1fVHJhbnNwYXJlbmN5Ow0KLSAgICBpbnQJCQkJCQltX0RpdGhlckJpdHM7DQotICAgIEZYX0JPT0wJCQkJCW1fYkRyb3BPYmplY3RzOw0KLSAgICBGWF9CT09MCQkJCQltX2JTdGRDUzsNCi0gICAgRlhfRFdPUkQgICAgICAgICAgICAgICAgbV9Hcm91cEZhbWlseTsNCi0gICAgRlhfQk9PTCAgICAgICAgICAgICAgICAgbV9iTG9hZE1hc2s7DQotICAgIENQREZfVHlwZTNDaGFyICogICAgICAgIG1fcFR5cGUzQ2hhcjsNCi0gICAgRlhfQVJHQgkJCQkJbV9UM0ZpbGxDb2xvcjsNCi0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgbV9jdXJCbGVuZDsNCi19Ow0KLWNsYXNzIENQREZfSW1hZ2VMb2FkZXIgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfSW1hZ2VMb2FkZXIoKQ0KLSAgICB7DQotICAgICAgICBtX3BCaXRtYXAgPSBOVUxMOw0KLSAgICAgICAgbV9wTWFzayA9IE5VTEw7DQotICAgICAgICBtX01hdHRlQ29sb3IgPSAwOw0KLSAgICAgICAgbV9iQ2FjaGVkID0gRkFMU0U7DQotICAgICAgICBtX25Eb3duc2FtcGxlV2lkdGggPSAwOw0KLSAgICAgICAgbV9uRG93bnNhbXBsZUhlaWdodCA9IDA7DQotICAgIH0NCi0NCi0gICAgRlhfQk9PTAkJCQkJTG9hZChjb25zdCBDUERGX0ltYWdlT2JqZWN0KiBwSW1hZ2UsIENQREZfUGFnZVJlbmRlckNhY2hlKiBwQ2FjaGUsIEZYX0JPT0wgYlN0ZENTID0gRkFMU0UsIEZYX0RXT1JEIEdyb3VwRmFtaWx5ID0gMCwgRlhfQk9PTCBiTG9hZE1hc2sgPSBGQUxTRSwgQ1BERl9SZW5kZXJTdGF0dXMqIHBSZW5kZXJTdGF0dXMgPSBOVUxMKTsNCi0NCi0gICAgRlhfQk9PTAkJCQkJU3RhcnRMb2FkSW1hZ2UoY29uc3QgQ1BERl9JbWFnZU9iamVjdCogcEltYWdlLCBDUERGX1BhZ2VSZW5kZXJDYWNoZSogcENhY2hlLCBGWF9MUFZPSUQmIExvYWRIYW5kbGUsIEZYX0JPT0wgYlN0ZENTID0gRkFMU0UsIEZYX0RXT1JEIEdyb3VwRmFtaWx5ID0gMCwgRlhfQk9PTCBiTG9hZE1hc2sgPSBGQUxTRSwgQ1BERl9SZW5kZXJTdGF0dXMqIHBSZW5kZXJTdGF0dXMgPSBOVUxMLCBGWF9JTlQzMiBuRG93bnNhbXBsZVdpZHRoID0gMCwgRlhfSU5UMzIgbkRvd25zYW1wbGVIZWlnaHQgPSAwKTsNCi0gICAgRlhfQk9PTAkJCQkJQ29udGludWUoRlhfTFBWT0lEIExvYWRIYW5kbGUsIElGWF9QYXVzZSogcFBhdXNlKTsNCi0gICAgfkNQREZfSW1hZ2VMb2FkZXIoKTsNCi0gICAgQ0ZYX0RJQlNvdXJjZSoJCQltX3BCaXRtYXA7DQotICAgIENGWF9ESUJTb3VyY2UqCQkJbV9wTWFzazsNCi0gICAgRlhfRFdPUkQJCQkJbV9NYXR0ZUNvbG9yOw0KLSAgICBGWF9CT09MCQkJCQltX2JDYWNoZWQ7DQotcHJvdGVjdGVkOg0KLSAgICBGWF9JTlQzMiAgICAgICAgICAgICAgICBtX25Eb3duc2FtcGxlV2lkdGg7DQotICAgIEZYX0lOVDMyICAgICAgICAgICAgICAgIG1fbkRvd25zYW1wbGVIZWlnaHQ7DQotfTsNCi1jbGFzcyBDUERGX1Byb2dyZXNzaXZlSW1hZ2VMb2FkZXJIYW5kbGUgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfUHJvZ3Jlc3NpdmVJbWFnZUxvYWRlckhhbmRsZSgpOw0KLSAgICB+Q1BERl9Qcm9ncmVzc2l2ZUltYWdlTG9hZGVySGFuZGxlKCk7DQotDQotICAgIEZYX0JPT0wJCQlTdGFydChDUERGX0ltYWdlTG9hZGVyKiBwSW1hZ2VMb2FkZXIsIGNvbnN0IENQREZfSW1hZ2VPYmplY3QqIHBJbWFnZSwgQ1BERl9QYWdlUmVuZGVyQ2FjaGUqIHBDYWNoZSwgRlhfQk9PTCBiU3RkQ1MgPSBGQUxTRSwgRlhfRFdPUkQgR3JvdXBGYW1pbHkgPSAwLCBGWF9CT09MIGJMb2FkTWFzayA9IEZBTFNFLCBDUERGX1JlbmRlclN0YXR1cyogcFJlbmRlclN0YXR1cyA9IE5VTEwsIEZYX0lOVDMyIG5Eb3duc2FtcGxlV2lkdGggPSAwLCBGWF9JTlQzMiBuRG93bnNhbXBsZUhlaWdodCA9IDApOw0KLSAgICBGWF9CT09MCQkJQ29udGludWUoSUZYX1BhdXNlKiBwUGF1c2UpOw0KLXByb3RlY3RlZDoNCi0gICAgQ1BERl9JbWFnZUxvYWRlcioJbV9wSW1hZ2VMb2FkZXI7DQotICAgIENQREZfUGFnZVJlbmRlckNhY2hlKiBtX3BDYWNoZTsNCi0gICAgQ1BERl9JbWFnZU9iamVjdCogbV9wSW1hZ2U7DQotICAgIEZYX0lOVDMyICAgICAgICAgICAgbV9uRG93bnNhbXBsZVdpZHRoOw0KLSAgICBGWF9JTlQzMiAgICAgICAgICAgIG1fbkRvd25zYW1wbGVIZWlnaHQ7DQotfTsNCi1jbGFzcyBDRlhfSW1hZ2VUcmFuc2Zvcm1lcjsNCi1jbGFzcyBDUERGX0ltYWdlUmVuZGVyZXIgOiBwdWJsaWMgSVBERl9PYmplY3RSZW5kZXJlcg0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfSW1hZ2VSZW5kZXJlcigpOw0KLSAgICB+Q1BERl9JbWFnZVJlbmRlcmVyKCk7DQotICAgIEZYX0JPT0wJCVN0YXJ0KENQREZfUmVuZGVyU3RhdHVzKiBwU3RhdHVzLCBjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlLCBGWF9CT09MIGJTdGRDUywgaW50IGJsZW5kVHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTCk7DQotICAgIEZYX0JPT0wJCVN0YXJ0KENQREZfUmVuZGVyU3RhdHVzKiBwU3RhdHVzLCBjb25zdCBDRlhfRElCU291cmNlKiBwRElCU291cmNlLCBGWF9BUkdCIGJpdG1hcF9hcmdiLA0KLSAgICAgICAgICAgICAgICAgICAgICBpbnQgYml0bWFwX2FscGhhLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwSW1hZ2UyRGV2aWNlLCBGWF9EV09SRCBmbGFncywgRlhfQk9PTCBiU3RkQ1MsIGludCBibGVuZFR5cGUgPSBGWERJQl9CTEVORF9OT1JNQUwpOw0KLSAgICBGWF9CT09MCQlDb250aW51ZShJRlhfUGF1c2UqIHBQYXVzZSk7DQotcHJvdGVjdGVkOg0KLSAgICBDUERGX1JlbmRlclN0YXR1cyoJbV9wUmVuZGVyU3RhdHVzOw0KLSAgICBDUERGX0ltYWdlT2JqZWN0KgltX3BJbWFnZU9iamVjdDsNCi0gICAgaW50CQkJCQltX1N0YXR1czsNCi0gICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogbV9wT2JqMkRldmljZTsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeAltX0ltYWdlTWF0cml4Ow0KLSAgICBDUERGX0ltYWdlTG9hZGVyCW1fTG9hZGVyOw0KLSAgICBjb25zdCBDRlhfRElCU291cmNlKgkJbV9wRElCU291cmNlOw0KLSAgICBDRlhfRElCaXRtYXAqCQltX3BDbG9uZTsNCi0gICAgaW50CQkJCQltX0JpdG1hcEFscGhhOw0KLSAgICBGWF9CT09MCQkJCW1fYlBhdHRlcm5Db2xvcjsNCi0gICAgQ1BERl9QYXR0ZXJuKgkJbV9wUGF0dGVybjsNCi0gICAgRlhfQVJHQgkJCQltX0ZpbGxBcmdiOw0KLSAgICBGWF9EV09SRAkJCW1fRmxhZ3M7DQotICAgIENQREZfUXVpY2tTdHJldGNoZXIqCW1fcFF1aWNrU3RyZXRjaGVyOw0KLSAgICBDRlhfSW1hZ2VUcmFuc2Zvcm1lcioJbV9wVHJhbnNmb3JtZXI7DQotICAgIENQREZfSW1hZ2VSZW5kZXJlcioJbV9wUmVuZGVyZXIyOw0KLSAgICBGWF9MUFZPSUQJCQltX0RldmljZUhhbmRsZTsNCi0gICAgRlhfTFBWT0lEICAgICAgICAgICBtX0xvYWRIYW5kbGU7DQotICAgIEZYX0JPT0wJCQkJbV9iU3RkQ1M7DQotICAgIGludAkJCQkJbV9CbGVuZFR5cGU7DQotICAgIEZYX0JPT0wJCQkJU3RhcnRCaXRtYXBBbHBoYSgpOw0KLSAgICBGWF9CT09MCQkJCVN0YXJ0RElCU291cmNlKCk7DQotICAgIEZYX0JPT0wJCQkJU3RhcnRSZW5kZXJESUJTb3VyY2UoKTsNCi0gICAgRlhfQk9PTAkJCQlTdGFydExvYWRESUJTb3VyY2UoKTsNCi0gICAgRlhfQk9PTAkJCQlEcmF3TWFza2VkSW1hZ2UoKTsNCi0gICAgRlhfQk9PTAkJCQlEcmF3UGF0dGVybkltYWdlKGNvbnN0IENGWF9NYXRyaXgqIHBPYmoyRGV2aWNlKTsNCi19Ow0KLWNsYXNzIENQREZfU2NhbGVkUmVuZGVyQnVmZmVyIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDUERGX1NjYWxlZFJlbmRlckJ1ZmZlcigpOw0KLSAgICB+Q1BERl9TY2FsZWRSZW5kZXJCdWZmZXIoKTsNCi0gICAgRlhfQk9PTAkJCQlJbml0aWFsaXplKENQREZfUmVuZGVyQ29udGV4dCogcENvbnRleHQsIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIEZYX1JFQ1QqIHBSZWN0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwT2JqLCBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMgKnBPcHRpb25zID0gTlVMTCwgaW50IG1heF9kcGkgPSAwKTsNCi0gICAgQ0ZYX1JlbmRlckRldmljZSoJR2V0RGV2aWNlKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcEJpdG1hcERldmljZSA/IG1fcEJpdG1hcERldmljZSA6IG1fcERldmljZTsNCi0gICAgfQ0KLSAgICBDRlhfQWZmaW5lTWF0cml4KglHZXRNYXRyaXgoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gJm1fTWF0cml4Ow0KLSAgICB9DQotICAgIHZvaWQJCQkJT3V0cHV0VG9EZXZpY2UoKTsNCi1wcml2YXRlOg0KLSAgICBDRlhfUmVuZGVyRGV2aWNlKgltX3BEZXZpY2U7DQotICAgIENQREZfUmVuZGVyQ29udGV4dCoJbV9wQ29udGV4dDsNCi0gICAgRlhfUkVDVAkJCQltX1JlY3Q7DQotICAgIGNvbnN0IENQREZfUGFnZU9iamVjdCogbV9wT2JqZWN0Ow0KLSAgICBDRlhfRnhnZURldmljZSoJbV9wQml0bWFwRGV2aWNlOw0KLSAgICBDRlhfQWZmaW5lTWF0cml4CW1fTWF0cml4Ow0KLX07DQotY2xhc3MgSUNvZGVjX1NjYW5saW5lRGVjb2RlcjsNCi1jbGFzcyBDUERGX1F1aWNrU3RyZXRjaGVyIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDUERGX1F1aWNrU3RyZXRjaGVyKCk7DQotICAgIH5DUERGX1F1aWNrU3RyZXRjaGVyKCk7DQotICAgIEZYX0JPT0wJCVN0YXJ0KENQREZfSW1hZ2VPYmplY3QqIHBJbWFnZU9iaiwgQ0ZYX0FmZmluZU1hdHJpeCogcEltYWdlMkRldmljZSwgY29uc3QgRlhfUkVDVCogcENsaXBCb3gpOw0KLSAgICBGWF9CT09MCQlDb250aW51ZShJRlhfUGF1c2UqIHBQYXVzZSk7DQotICAgIENGWF9ESUJpdG1hcCoJbV9wQml0bWFwOw0KLSAgICBpbnQJCQltX1Jlc3VsdExlZnQsIG1fUmVzdWx0VG9wLCBtX0NsaXBMZWZ0LCBtX0NsaXBUb3A7DQotICAgIGludAkJCW1fRGVzdFdpZHRoLCBtX0Rlc3RIZWlnaHQsIG1fUmVzdWx0V2lkdGgsIG1fUmVzdWx0SGVpZ2h0Ow0KLSAgICBpbnQJCQltX0JwcCwgbV9TcmNXaWR0aCwgbV9TcmNIZWlnaHQ7DQotICAgIEZYX0JPT0wJCW1fYkZsaXBYLCBtX2JGbGlwWTsNCi0gICAgQ1BERl9Db2xvclNwYWNlKgltX3BDUzsNCi0gICAgSUNvZGVjX1NjYW5saW5lRGVjb2RlcioJbV9wRGVjb2RlcjsNCi0gICAgQ1BERl9TdHJlYW1BY2MgbV9TdHJlYW1BY2M7DQotICAgIGludAkJCW1fTGluZUluZGV4Ow0KLX07DQotY2xhc3MgQ1BERl9EZXZpY2VCdWZmZXIgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfRGV2aWNlQnVmZmVyKCk7DQotICAgIH5DUERGX0RldmljZUJ1ZmZlcigpOw0KLSAgICBGWF9CT09MCQkJCUluaXRpYWxpemUoQ1BERl9SZW5kZXJDb250ZXh0KiBwQ29udGV4dCwgQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgRlhfUkVDVCogcFJlY3QsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmosIGludCBtYXhfZHBpID0gMCk7DQotICAgIHZvaWQJCQkJT3V0cHV0VG9EZXZpY2UoKTsNCi0gICAgQ0ZYX0RJQml0bWFwKgkJR2V0Qml0bWFwKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcEJpdG1hcDsNCi0gICAgfQ0KLSAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KglHZXRNYXRyaXgoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gJm1fTWF0cml4Ow0KLSAgICB9DQotcHJpdmF0ZToNCi0gICAgQ0ZYX1JlbmRlckRldmljZSoJbV9wRGV2aWNlOw0KLSAgICBDUERGX1JlbmRlckNvbnRleHQqCW1fcENvbnRleHQ7DQotICAgIEZYX1JFQ1QJCQkJbV9SZWN0Ow0KLSAgICBjb25zdCBDUERGX1BhZ2VPYmplY3QqIG1fcE9iamVjdDsNCi0gICAgQ0ZYX0RJQml0bWFwKgkJbV9wQml0bWFwOw0KLSAgICBDRlhfQWZmaW5lTWF0cml4CW1fTWF0cml4Ow0KLX07DQotY2xhc3MgQ1BERl9JbWFnZUNhY2hlIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDUERGX0ltYWdlQ2FjaGUoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9TdHJlYW0qIHBTdHJlYW0pOw0KLSAgICB+Q1BERl9JbWFnZUNhY2hlKCk7DQotICAgIHZvaWQJCQkJQ2xlYXJJbWFnZURhdGEoKTsNCi0gICAgdm9pZAkJCQlSZXNldChjb25zdCBDRlhfRElCaXRtYXAqIHBCaXRtYXApOw0KLSAgICBGWF9CT09MCQkJCUdldENhY2hlZEJpdG1hcChDRlhfRElCU291cmNlKiYgcEJpdG1hcCwgQ0ZYX0RJQlNvdXJjZSomIHBNYXNrLCBGWF9EV09SRCYgTWF0dGVDb2xvciwgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZVJlc291cmNlcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiU3RkQ1MgPSBGQUxTRSwgRlhfRFdPUkQgR3JvdXBGYW1pbHkgPSAwLCBGWF9CT09MIGJMb2FkTWFzayA9IEZBTFNFLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX1JlbmRlclN0YXR1cyogcFJlbmRlclN0YXR1cyA9IE5VTEwsIEZYX0lOVDMyIGRvd25zYW1wbGVXaWR0aCA9IDAsIEZYX0lOVDMyIGRvd25zYW1wbGVIZWlnaHQgPSAwKTsNCi0gICAgRlhfRFdPUkQJCQlFc3RpbWF0ZVNpemUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9kd0NhY2hlU2l6ZTsNCi0gICAgfQ0KLSAgICBGWF9EV09SRAkJCUdldFRpbWVDb3VudCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX2R3VGltZUNvdW50Ow0KLSAgICB9DQotICAgIENQREZfU3RyZWFtKgkJR2V0U3RyZWFtKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcFN0cmVhbTsNCi0gICAgfQ0KLSAgICB2b2lkCQkJCVNldFRpbWVDb3VudChGWF9EV09SRCBkd1RpbWVDb3VudCkNCi0gICAgew0KLSAgICAgICAgbV9kd1RpbWVDb3VudCA9IGR3VGltZUNvdW50Ow0KLSAgICB9DQotICAgIGludAkJCQkJbV9kd1RpbWVDb3VudDsNCi1wdWJsaWM6DQotICAgIGludAkJCQkJU3RhcnRHZXRDYWNoZWRCaXRtYXAoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybVJlc291cmNlcywgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZVJlc291cmNlcywNCi0gICAgICAgICAgICBGWF9CT09MIGJTdGRDUyA9IEZBTFNFLCBGWF9EV09SRCBHcm91cEZhbWlseSA9IDAsDQotICAgICAgICAgICAgRlhfQk9PTCBiTG9hZE1hc2sgPSBGQUxTRSwgQ1BERl9SZW5kZXJTdGF0dXMqIHBSZW5kZXJTdGF0dXMgPSBOVUxMLCBGWF9JTlQzMiBkb3duc2FtcGxlV2lkdGggPSAwLCBGWF9JTlQzMiBkb3duc2FtcGxlSGVpZ2h0ID0gMCk7DQotICAgIGludAkJCQkJQ29udGludWUoSUZYX1BhdXNlKiBwUGF1c2UpOw0KLSAgICBpbnQgCQkJCUNvbnRpbnVlR2V0Q2FjaGVkQml0bWFwKCk7DQotICAgIENGWF9ESUJTb3VyY2UqCQlEZXRhY2hCaXRtYXAoKTsNCi0gICAgQ0ZYX0RJQlNvdXJjZSoJCURldGFjaE1hc2soKTsNCi0gICAgQ0ZYX0RJQlNvdXJjZSoJCW1fcEN1ckJpdG1hcDsNCi0gICAgQ0ZYX0RJQlNvdXJjZSoJCW1fcEN1ck1hc2s7DQotICAgIEZYX0RXT1JECQkJbV9NYXR0ZUNvbG9yOw0KLSAgICBDUERGX1JlbmRlclN0YXR1cyogIG1fcFJlbmRlclN0YXR1czsNCi1wcm90ZWN0ZWQ6DQotICAgIENQREZfRG9jdW1lbnQqCQltX3BEb2N1bWVudDsNCi0gICAgQ1BERl9TdHJlYW0qCQltX3BTdHJlYW07DQotICAgIENGWF9ESUJTb3VyY2UqCQltX3BDYWNoZWRCaXRtYXA7DQotICAgIENGWF9ESUJTb3VyY2UqCQltX3BDYWNoZWRNYXNrOw0KLSAgICBGWF9EV09SRAkJCW1fZHdDYWNoZVNpemU7DQotICAgIHZvaWQJQ2FsY1NpemUoKTsNCi19Ow0KLXR5cGVkZWYgc3RydWN0IHsNCi0gICAgRlhfRkxPQVQJCQltX0RlY29kZU1pbjsNCi0gICAgRlhfRkxPQVQJCQltX0RlY29kZVN0ZXA7DQotICAgIGludAkJCQkJbV9Db2xvcktleU1pbjsNCi0gICAgaW50CQkJCQltX0NvbG9yS2V5TWF4Ow0KLX0gRElCX0NPTVBfREFUQTsNCi1jbGFzcyBDUERGX0RJQlNvdXJjZSA6IHB1YmxpYyBDRlhfRElCU291cmNlDQotew0KLXB1YmxpYzoNCi0gICAgQ1BERl9ESUJTb3VyY2UoKTsNCi0gICAgdmlydHVhbCB+Q1BERl9ESUJTb3VyY2UoKTsNCi0gICAgRlhfQk9PTAkJCQlMb2FkKENQREZfRG9jdW1lbnQqIHBEb2MsIGNvbnN0IENQREZfU3RyZWFtKiBwU3RyZWFtLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9ESUJTb3VyY2UqKiBwcE1hc2ssIEZYX0RXT1JEKiBwTWF0dGVDb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcEZvcm1SZXNvdXJjZXMsIENQREZfRGljdGlvbmFyeSogcFBhZ2VSZXNvdXJjZXMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9CT09MIGJTdGRDUyA9IEZBTFNFLCBGWF9EV09SRCBHcm91cEZhbWlseSA9IDAsIEZYX0JPT0wgYkxvYWRNYXNrID0gRkFMU0UpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCVNraXBUb1NjYW5saW5lKGludCBsaW5lLCBJRlhfUGF1c2UqIHBQYXVzZSkgY29uc3Q7DQotICAgIHZpcnR1YWwJRlhfTFBCWVRFCUdldEJ1ZmZlcigpIGNvbnN0Ow0KLSAgICB2aXJ0dWFsIEZYX0xQQ0JZVEUJR2V0U2NhbmxpbmUoaW50IGxpbmUpIGNvbnN0Ow0KLSAgICB2aXJ0dWFsIHZvaWQJCURvd25TYW1wbGVTY2FubGluZShpbnQgbGluZSwgRlhfTFBCWVRFIGRlc3Rfc2NhbiwgaW50IGRlc3RfYnBwLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF93aWR0aCwgRlhfQk9PTCBiRmxpcFgsIGludCBjbGlwX2xlZnQsIGludCBjbGlwX3dpZHRoKSBjb25zdDsNCi0gICAgdmlydHVhbCB2b2lkCQlTZXREb3duU2FtcGxlU2l6ZShpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0KSBjb25zdDsNCi0gICAgQ0ZYX0RJQml0bWFwKgkJR2V0Qml0bWFwKCkgY29uc3Q7DQotICAgIHZvaWQJCQkJUmVsZWFzZUJpdG1hcChDRlhfRElCaXRtYXAqKSBjb25zdDsNCi0gICAgdm9pZAkJCQlDbGVhckltYWdlRGF0YSgpOw0KLXB1YmxpYzoNCi0gICAgaW50CQkJCQlTdGFydExvYWRESUJTb3VyY2UoQ1BERl9Eb2N1bWVudCogcERvYywgY29uc3QgQ1BERl9TdHJlYW0qIHBTdHJlYW0sIEZYX0JPT0wgYkhhc01hc2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcEZvcm1SZXNvdXJjZXMsIENQREZfRGljdGlvbmFyeSogcFBhZ2VSZXNvdXJjZXMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYlN0ZENTID0gRkFMU0UsIEZYX0RXT1JEIEdyb3VwRmFtaWx5ID0gMCwgRlhfQk9PTCBiTG9hZE1hc2sgPSBGQUxTRSk7DQotICAgIGludAkJCQkJQ29udGludWVMb2FkRElCU291cmNlKElGWF9QYXVzZSogcFBhdXNlKTsNCi0gICAgaW50CQkJCQlTdHJhdExvYWRNYXNrKCk7DQotICAgIGludAkJCQkJU3RhcnRMb2FkTWFza0RJQigpOw0KLSAgICBpbnQJCQkJCUNvbnRpbnVlTG9hZE1hc2tESUIoSUZYX1BhdXNlKiBwUGF1c2UpOw0KLSAgICBpbnQJCQkJCUNvbnRpbnVlVG9Mb2FkTWFzaygpOw0KLSAgICBDUERGX0RJQlNvdXJjZSoJCURldGFjaE1hc2soKTsNCi0gICAgQ1BERl9ESUJTb3VyY2UqCQltX3BNYXNrOw0KLSAgICBGWF9EV09SRAkJCW1fTWF0dGVDb2xvcjsNCi0gICAgRlhfTFBWT0lECQkJbV9wSmJpZzJDb250ZXh0Ow0KLSAgICBDUERGX1N0cmVhbUFjYyoJCW1fcEdsb2JhbFN0cmVhbTsNCi0gICAgRlhfQk9PTAkJCQltX2JTdGRDUzsNCi0gICAgaW50CQkJCQltX1N0YXR1czsNCi0gICAgQ1BERl9PYmplY3QqCQltX3BNYXNrU3RyZWFtOw0KLSAgICBGWF9CT09MCQkJCW1fYkhhc01hc2s7DQotcHJvdGVjdGVkOg0KLSAgICBGWF9CT09MCQkJCUxvYWRDb2xvckluZm8oQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybVJlc291cmNlcywgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZVJlc291cmNlcyk7DQotICAgIENQREZfRElCU291cmNlKgkJTG9hZE1hc2soRlhfRFdPUkQmIE1hdHRlQ29sb3IpOw0KLSAgICBDUERGX0RJQlNvdXJjZSoJCUxvYWRNYXNrRElCKENQREZfU3RyZWFtKiBwTWFzayk7DQotICAgIHZvaWQJCQkJTG9hZEpweEJpdG1hcCgpOw0KLSAgICB2b2lkCQkJCUxvYWRKYmlnMkJpdG1hcCgpOw0KLSAgICB2b2lkCQkJCUxvYWRQYWxldHRlKCk7DQotICAgIEZYX0JPT0wJCQkJQ3JlYXRlRGVjb2RlcigpOw0KLSAgICB2b2lkCQkJCVRyYW5zbGF0ZVNjYW5saW5lMjRicHAoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbikgY29uc3Q7DQotCUZYX0RXT1JEICAgICAgICAgICAgR2V0VmFsaWRCcHAoKSBjb25zdDsNCi0NCi0gICAgQ1BERl9Eb2N1bWVudCoJCW1fcERvY3VtZW50Ow0KLSAgICBjb25zdCBDUERGX1N0cmVhbSoJbV9wU3RyZWFtOw0KLSAgICBDUERGX1N0cmVhbUFjYyoJCW1fcFN0cmVhbUFjYzsNCi0gICAgY29uc3QgQ1BERl9EaWN0aW9uYXJ5KgltX3BEaWN0Ow0KLSAgICBDUERGX0NvbG9yU3BhY2UqCW1fcENvbG9yU3BhY2U7DQotICAgIEZYX0RXT1JECQkJbV9GYW1pbHksIG1fYnBjLCBtX25Db21wb25lbnRzLCBtX0dyb3VwRmFtaWx5Ow0KLSAgICBGWF9CT09MCQkJCW1fYkxvYWRNYXNrOw0KLSAgICBGWF9CT09MCQkJCW1fYkRlZmF1bHREZWNvZGUsIG1fYkltYWdlTWFzaywgbV9iQ29sb3JLZXk7DQotICAgIERJQl9DT01QX0RBVEEqCQltX3BDb21wRGF0YTsNCi0gICAgRlhfTFBCWVRFCQkJbV9wTGluZUJ1ZjsNCi0gICAgRlhfTFBCWVRFCQkJbV9wTWFza2VkTGluZTsNCi0gICAgQ0ZYX0RJQml0bWFwKgkJbV9wQ2FjaGVkQml0bWFwOw0KLSAgICBJQ29kZWNfU2NhbmxpbmVEZWNvZGVyKgltX3BEZWNvZGVyOw0KLX07DQotI2lmZGVmIF9GUERGQVBJX01JTklfDQotI2RlZmluZSBGUERGX0hVR0VfSU1BR0VfU0laRQkzMDAwMDAwDQotI2Vsc2UNCi0jZGVmaW5lIEZQREZfSFVHRV9JTUFHRV9TSVpFCTYwMDAwMDAwDQotI2VuZGlmDQotY2xhc3MgQ1BERl9ESUJUcmFuc2ZlckZ1bmMgOiBwdWJsaWMgQ0ZYX0ZpbHRlcmVkRElCDQotew0KLXB1YmxpYzoNCi0gICAgQ1BERl9ESUJUcmFuc2ZlckZ1bmMoY29uc3QgQ1BERl9UcmFuc2ZlckZ1bmMqIHBUcmFuc2ZlckZ1bmMpOw0KLSAgICB2aXJ0dWFsIEZYRElCX0Zvcm1hdAlHZXREZXN0Rm9ybWF0KCk7DQotICAgIHZpcnR1YWwgRlhfQVJHQioJCUdldERlc3RQYWxldHRlKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgdmlydHVhbCB2b2lkCQkJVHJhbnNsYXRlU2NhbmxpbmUoRlhfTFBCWVRFIGRlc3RfYnVmLCBGWF9MUENCWVRFIHNyY19idWYpIGNvbnN0Ow0KLSAgICB2aXJ0dWFsIHZvaWQJCQlUcmFuc2xhdGVEb3duU2FtcGxlcyhGWF9MUEJZVEUgZGVzdF9idWYsIEZYX0xQQ0JZVEUgc3JjX2J1ZiwgaW50IHBpeGVscywgaW50IEJwcCkgY29uc3Q7DQotICAgIEZYX0xQQ0JZVEUJCQkJbV9SYW1wUjsNCi0gICAgRlhfTFBDQllURQkJCQltX1JhbXBHOw0KLSAgICBGWF9MUENCWVRFCQkJCW1fUmFtcEI7DQotfTsNCi1zdHJ1Y3QgX0NQREZfVW5pcXVlS2V5R2VuIHsNCi0gICAgdm9pZAkJR2VuZXJhdGUoaW50IGNvdW50LCAuLi4pOw0KLSAgICBGWF9DSEFSCQltX0tleVsxMjhdOw0KLSAgICBpbnQJCQltX0tleUxlbjsNCi19Ow0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZQREZfUEFHRU9CSl9IXworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2VvYmouaCIKKyNlbmRpZgorY2xhc3MgQ1BERl9RdWlja1N0cmV0Y2hlcjsKKyNkZWZpbmUgVFlQRTNfTUFYX0JMVUVTCQkxNgorY2xhc3MgQ1BERl9UeXBlM0dseXBocyA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ1BERl9UeXBlM0dseXBocygpCisgICAgeworICAgICAgICBtX0dseXBoTWFwLkluaXRIYXNoVGFibGUoMjUzKTsKKyAgICAgICAgbV9Ub3BCbHVlQ291bnQgPSBtX0JvdHRvbUJsdWVDb3VudCA9IDA7CisgICAgfQorICAgIH5DUERGX1R5cGUzR2x5cGhzKCk7CisgICAgQ0ZYX01hcFB0clRvUHRyCQkJbV9HbHlwaE1hcDsKKyAgICB2b2lkCQkJCQlBZGp1c3RCbHVlKEZYX0ZMT0FUIHRvcCwgRlhfRkxPQVQgYm90dG9tLCBpbnQmIHRvcF9saW5lLCBpbnQmIGJvdHRvbV9saW5lKTsKKworICAgIGludAkJCQkJCW1fVG9wQmx1ZVtUWVBFM19NQVhfQkxVRVNdLCBtX0JvdHRvbUJsdWVbVFlQRTNfTUFYX0JMVUVTXTsKKyAgICBpbnQJCQkJCQltX1RvcEJsdWVDb3VudCwgbV9Cb3R0b21CbHVlQ291bnQ7Cit9OworY2xhc3MgQ0ZYX0dseXBoQml0bWFwOworY2xhc3MgQ1BERl9UeXBlM0NhY2hlIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBDUERGX1R5cGUzQ2FjaGUoQ1BERl9UeXBlM0ZvbnQqIHBGb250KQorICAgIHsKKyAgICAgICAgbV9wRm9udCA9IHBGb250OworICAgIH0KKyAgICB+Q1BERl9UeXBlM0NhY2hlKCk7CisgICAgQ0ZYX0dseXBoQml0bWFwKgkJTG9hZEdseXBoKEZYX0RXT1JEIGNoYXJjb2RlLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LCBGWF9GTE9BVCByZXRpbmFTY2FsZVggPSAxLjBmLCBGWF9GTE9BVCByZXRpbmFTY2FsZVkgPSAxLjBmKTsKK3Byb3RlY3RlZDoKKyAgICBDRlhfR2x5cGhCaXRtYXAqCQlSZW5kZXJHbHlwaChDUERGX1R5cGUzR2x5cGhzKiBwU2l6ZSwgRlhfRFdPUkQgY2hhcmNvZGUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIEZYX0ZMT0FUIHJldGluYVNjYWxlWCA9IDEuMGYsIEZYX0ZMT0FUIHJldGluYVNjYWxlWSA9IDEuMGYpOworICAgIENQREZfVHlwZTNGb250KgkJCW1fcEZvbnQ7CisgICAgQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0cgltX1NpemVNYXA7Cit9OworY2xhc3MgQ1BERl9UcmFuc2ZlckZ1bmMgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENQREZfRG9jdW1lbnQqCW1fcFBERkRvYzsKKyAgICBGWF9CWVRFCQkJbV9TYW1wbGVzWzI1NiAqIDNdOworICAgIEZYX0JPT0wJCQltX2JJZGVudGl0eTsKKworICAgIENGWF9ESUJTb3VyY2UqCVRyYW5zbGF0ZUltYWdlKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmMsIEZYX0JPT0wgYkF1dG9Ecm9wU3JjKTsKKyAgICBGWF9DT0xPUlJFRgkJVHJhbnNsYXRlQ29sb3IoRlhfQ09MT1JSRUYgc3JjKTsKK307Cit0eXBlZGVmIENGWF9NYXBQdHJUZW1wbGF0ZTxDUERGX0ZvbnQqLCBDUERGX0NvdW50ZWRPYmplY3Q8Q1BERl9UeXBlM0NhY2hlKj4qPiBDUERGX1R5cGUzQ2FjaGVNYXA7Cit0eXBlZGVmIENGWF9NYXBQdHJUZW1wbGF0ZTxDUERGX09iamVjdCosIENQREZfQ291bnRlZE9iamVjdDxDUERGX1RyYW5zZmVyRnVuYyo+Kj4gQ1BERl9UcmFuc2ZlckZ1bmNNYXA7CitjbGFzcyBDUERGX0RvY1JlbmRlckRhdGEgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENQREZfRG9jUmVuZGVyRGF0YShDUERGX0RvY3VtZW50KiBwUERGRG9jID0gTlVMTCk7CisgICAgfkNQREZfRG9jUmVuZGVyRGF0YSgpOworICAgIEZYX0JPT0wJCQkJSW5pdGlhbGl6ZSgpOworICAgIENQREZfVHlwZTNDYWNoZSoJR2V0Q2FjaGVkVHlwZTMoQ1BERl9UeXBlM0ZvbnQqIHBGb250KTsKKyAgICBDUERGX1RyYW5zZmVyRnVuYyoJR2V0VHJhbnNmZXJGdW5jKENQREZfT2JqZWN0KiBwT2JqKTsKKyAgICBDRlhfRm9udENhY2hlKgkJR2V0Rm9udENhY2hlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BGb250Q2FjaGU7CisgICAgfQorICAgIHZvaWQJCQkJQ2xlYXIoRlhfQk9PTCBiUmVsZWFzZSA9IEZBTFNFKTsKKyAgICB2b2lkCQkJCVJlbGVhc2VDYWNoZWRUeXBlMyhDUERGX1R5cGUzRm9udCogcEZvbnQpOworICAgIHZvaWQJCQkJUmVsZWFzZVRyYW5zZmVyRnVuYyhDUERGX09iamVjdCogcE9iaik7Citwcml2YXRlOgorICAgIENQREZfRG9jdW1lbnQqCQltX3BQREZEb2M7CisgICAgQ0ZYX0ZvbnRDYWNoZSoJCW1fcEZvbnRDYWNoZTsKKyAgICBDUERGX1R5cGUzQ2FjaGVNYXAJbV9UeXBlM0ZhY2VNYXA7CisgICAgQ1BERl9UcmFuc2ZlckZ1bmNNYXAJbV9UcmFuc2ZlckZ1bmNNYXA7Cit9Oworc3RydWN0IF9QREZfUmVuZGVySXRlbSB7CitwdWJsaWM6CisgICAgQ1BERl9QYWdlT2JqZWN0cyoJCQltX3BPYmplY3RMaXN0OworICAgIENGWF9BZmZpbmVNYXRyaXgJCQltX01hdHJpeDsKK307Cit0eXBlZGVmIENGWF9BcnJheVRlbXBsYXRlPF9QREZfUmVuZGVySXRlbT4JQ1BERl9SZW5kZXJMYXllcjsKK2NsYXNzIElQREZfT2JqZWN0UmVuZGVyZXIgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIHN0YXRpYyBJUERGX09iamVjdFJlbmRlcmVyKiBDcmVhdGUoaW50IHR5cGUpOworICAgIHZpcnR1YWwgfklQREZfT2JqZWN0UmVuZGVyZXIoKSB7fQorICAgIHZpcnR1YWwgRlhfQk9PTCBTdGFydChDUERGX1JlbmRlclN0YXR1cyogcFJlbmRlclN0YXR1cywgY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSwgRlhfQk9PTCBiU3RkQ1MsIGludCBibGVuZFR5cGUgPSBGWERJQl9CTEVORF9OT1JNQUwpID0gMDsKKyAgICB2aXJ0dWFsIEZYX0JPT0wgQ29udGludWUoSUZYX1BhdXNlKiBwUGF1c2UpID0gMDsKKyAgICBGWF9CT09MCQltX1Jlc3VsdDsKK307CitjbGFzcyBDUERGX1JlbmRlclN0YXR1cyA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ1BERl9SZW5kZXJTdGF0dXMoKTsKKyAgICB+Q1BERl9SZW5kZXJTdGF0dXMoKTsKKyAgICBGWF9CT09MCQkJSW5pdGlhbGl6ZShpbnQgbGV2ZWwsIGNsYXNzIENQREZfUmVuZGVyQ29udGV4dCogcENvbnRleHQsIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBEZXZpY2VNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwU3RvcE9iaiwgY29uc3QgQ1BERl9SZW5kZXJTdGF0dXMqIHBQYXJlbnRTdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ1BERl9HcmFwaGljU3RhdGVzKiBwSW5pdGlhbFN0YXRlcywgY29uc3QgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHJhbnNwYXJlbmN5LCBGWF9CT09MIGJEcm9wT2JqZWN0cywgQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybVJlc291cmNlID0gTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9CT09MIGJTdGRDUyA9IEZBTFNFLAlDUERGX1R5cGUzQ2hhciogcFR5cGUzQ2hhciA9IE5VTEwsIEZYX0FSR0IgZmlsbF9jb2xvciA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgR3JvdXBGYW1pbHkgPSAwLCBGWF9CT09MIGJMb2FkTWFzayA9IEZBTFNFKTsKKyAgICB2b2lkCQkJUmVuZGVyT2JqZWN0TGlzdChjb25zdCBDUERGX1BhZ2VPYmplY3RzKiBwT2JqcywgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpOworICAgIHZvaWQJCQlSZW5kZXJTaW5nbGVPYmplY3QoY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSk7CisgICAgRlhfQk9PTAkJCUNvbnRpbnVlU2luZ2xlT2JqZWN0KGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UsIElGWF9QYXVzZSogcFBhdXNlKTsKKyAgICBDUERGX1JlbmRlck9wdGlvbnMJbV9PcHRpb25zOworICAgIENQREZfRGljdGlvbmFyeSogICAgbV9wRm9ybVJlc291cmNlOworICAgIENQREZfRGljdGlvbmFyeSogICAgbV9wUGFnZVJlc291cmNlOworICAgIENGWF9QdHJBcnJheQkJbV9UeXBlM0ZvbnRDYWNoZTsKKyAgICBDUERGX1JlbmRlckNvbnRleHQqIEdldENvbnRleHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcENvbnRleHQ7CisgICAgfQorcHJvdGVjdGVkOgorICAgIGZyaWVuZCBjbGFzcwlDUERGX0ltYWdlUmVuZGVyZXI7CisgICAgZnJpZW5kIGNsYXNzCUNQREZfUmVuZGVyQ29udGV4dDsKKyAgICB2b2lkCQkJUHJvY2Vzc0NsaXBQYXRoKENQREZfQ2xpcFBhdGggQ2xpcFBhdGgsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKTsKKyAgICB2b2lkCQkJRHJhd0NsaXBQYXRoKENQREZfQ2xpcFBhdGggQ2xpcFBhdGgsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKTsKKyAgICBGWF9CT09MCQkJUHJvY2Vzc1RyYW5zcGFyZW5jeShjb25zdCBDUERGX1BhZ2VPYmplY3QqIFBhZ2VPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKTsKKyAgICB2b2lkCQkJUHJvY2Vzc09iamVjdE5vQ2xpcChjb25zdCBDUERGX1BhZ2VPYmplY3QqIFBhZ2VPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKTsKKyAgICB2b2lkCQkJRHJhd09ialdpdGhCYWNrZ3JvdW5kKGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpOworICAgIEZYX0JPT0wgICAgICAgICBEcmF3T2JqV2l0aEJsZW5kKGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpOworICAgIEZYX0JPT0wJCQlQcm9jZXNzUGF0aChDUERGX1BhdGhPYmplY3QqIHBQYXRoT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSk7CisgICAgdm9pZAkJCVByb2Nlc3NQYXRoUGF0dGVybihDUERGX1BhdGhPYmplY3QqIHBQYXRoT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSwgaW50JiBmaWxsdHlwZSwgRlhfQk9PTCYgYlN0cm9rZSk7CisgICAgdm9pZAkJCURyYXdQYXRoV2l0aFBhdHRlcm4oQ1BERl9QYXRoT2JqZWN0KiBwUGF0aE9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UsIENQREZfQ29sb3IqIHBDb2xvciwgRlhfQk9PTCBiU3Ryb2tlKTsKKyAgICB2b2lkCQkJRHJhd1RpbGluZ1BhdHRlcm4oQ1BERl9UaWxpbmdQYXR0ZXJuKiBwUGF0dGVybiwgQ1BERl9QYWdlT2JqZWN0KiBwUGFnZU9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UsIEZYX0JPT0wgYlN0cm9rZSk7CisgICAgdm9pZAkJCURyYXdTaGFkaW5nUGF0dGVybihDUERGX1NoYWRpbmdQYXR0ZXJuKiBwUGF0dGVybiwgQ1BERl9QYWdlT2JqZWN0KiBwUGFnZU9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UsIEZYX0JPT0wgYlN0cm9rZSk7CisgICAgRlhfQk9PTAkJCVNlbGVjdENsaXBQYXRoKENQREZfUGF0aE9iamVjdCogcFBhdGhPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlLCBGWF9CT09MIGJTdHJva2UpOworICAgIEZYX0JPT0wJCQlQcm9jZXNzSW1hZ2UoQ1BERl9JbWFnZU9iamVjdCogcEltYWdlT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSk7CisgICAgRlhfQk9PTAkJCU91dHB1dEJpdG1hcEFscGhhKENQREZfSW1hZ2VPYmplY3QqIHBJbWFnZU9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcEltYWdlMkRldmljZSk7CisgICAgRlhfQk9PTAkJCU91dHB1dEltYWdlKENQREZfSW1hZ2VPYmplY3QqIHBJbWFnZU9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcEltYWdlMkRldmljZSk7CisgICAgRlhfQk9PTAkJCU91dHB1dERJQlNvdXJjZShjb25zdCBDRlhfRElCU291cmNlKiBwT3V0cHV0Qml0bWFwLCBGWF9BUkdCIGZpbGxfYXJnYiwgaW50IGJpdG1hcF9hbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBJbWFnZTJEZXZpY2UsIENQREZfSW1hZ2VDYWNoZSogcEltYWdlQ2FjaGUsIEZYX0RXT1JEIGZsYWdzKTsKKyAgICB2b2lkCQkJQ29tcG9zaXRlRElCaXRtYXAoQ0ZYX0RJQml0bWFwKiBwRElCaXRtYXAsIGludCBsZWZ0LCBpbnQgdG9wLCBGWF9BUkdCIG1hc2tfYXJnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJpdG1hcF9hbHBoYSwgaW50IGJsZW5kX21vZGUsIGludCBiSXNvbGF0ZWQpOworICAgIEZYX0JPT0wJCQlQcm9jZXNzSW5saW5lcyhDUERGX0lubGluZUltYWdlcyogcElubGluZXMsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKTsKKyAgICBGWF9CT09MCQkJUHJvY2Vzc1NoYWRpbmcoQ1BERl9TaGFkaW5nT2JqZWN0KiBwU2hhZGluZ09iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UpOworICAgIHZvaWQJCQlEcmF3U2hhZGluZyhDUERGX1NoYWRpbmdQYXR0ZXJuKiBwUGF0dGVybiwgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgRlhfUkVDVCYgY2xpcF9yZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGEsIEZYX0JPT0wgYkFscGhhTW9kZSk7CisgICAgRlhfQk9PTAkJCVByb2Nlc3NUeXBlM1RleHQoY29uc3QgQ1BERl9UZXh0T2JqZWN0KiB0ZXh0b2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSk7CisgICAgRlhfQk9PTAkJCVByb2Nlc3NUZXh0KGNvbnN0IENQREZfVGV4dE9iamVjdCogdGV4dG9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UsIENGWF9QYXRoRGF0YSogcENsaXBwaW5nUGF0aCk7CisgICAgdm9pZAkJCURyYXdUZXh0UGF0aFdpdGhQYXR0ZXJuKGNvbnN0IENQREZfVGV4dE9iamVjdCogdGV4dG9iaiwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iajJEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfRm9udCogcEZvbnQsIEZYX0ZMT0FUIGZvbnRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcFRleHRNYXRyaXgsIEZYX0JPT0wgYkZpbGwsIEZYX0JPT0wgYlN0cm9rZSk7CisgICAgRlhfQk9PTAkJCVByb2Nlc3NGb3JtKENQREZfRm9ybU9iamVjdCogcEZvcm1PYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKTsKKyAgICBDRlhfRElCaXRtYXAqCUdldEJhY2tkcm9wKGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaiwgY29uc3QgRlhfUkVDVCYgcmVjdCwgaW50JiBsZWZ0LCBpbnQmIHRvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiQmFja0FscGhhUmVxdWlyZWQpOworICAgIENGWF9ESUJpdG1hcCoJTG9hZFNNYXNrKENQREZfRGljdGlvbmFyeSogcFNNYXNrRGljdCwgRlhfUkVDVCogcENsaXBSZWN0LCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4KTsKKyAgICB2b2lkCQkJSW5pdChDUERGX1JlbmRlckNvbnRleHQqIHBQYXJlbnQpOworICAgIHN0YXRpYyBjbGFzcyBDUERGX1R5cGUzQ2FjaGUqCUdldENhY2hlZFR5cGUzKENQREZfVHlwZTNGb250KiBwRm9udCk7CisgICAgc3RhdGljIENQREZfR3JhcGhpY1N0YXRlcyogQ2xvbmVPYmpTdGF0ZXMoY29uc3QgQ1BERl9HcmFwaGljU3RhdGVzKiBwUGF0aE9iaiwgRlhfQk9PTCBiU3Ryb2tlKTsKKyAgICBDUERGX1RyYW5zZmVyRnVuYyoJR2V0VHJhbnNmZXJGdW5jKENQREZfT2JqZWN0KiBwT2JqZWN0KSBjb25zdDsKKyAgICBGWF9BUkdCCQkJR2V0RmlsbEFyZ2IoY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwT2JqLCBGWF9CT09MIGJUeXBlMyA9IEZBTFNFKSBjb25zdDsKKyAgICBGWF9BUkdCCQkJR2V0U3Ryb2tlQXJnYihjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmopIGNvbnN0OworICAgIENQREZfUmVuZGVyQ29udGV4dCoJCW1fcENvbnRleHQ7CisgICAgRlhfQk9PTAkJCQkJbV9iU3RvcHBlZDsKKyAgICB2b2lkCQkJRGl0aGVyT2JqZWN0QXJlYShjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmosIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmoyRGV2aWNlKTsKKyAgICBGWF9CT09MCQkJR2V0T2JqZWN0Q2xpcHBlZFJlY3QoY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSwgRlhfQk9PTCBiTG9naWNhbCwgRlhfUkVDVCAmcmVjdCkgY29uc3Q7CisgICAgdm9pZAkJCUdldFNjYWxlZE1hdHJpeChDRlhfTWF0cml4ICZtYXRyaXgpIGNvbnN0OworcHJvdGVjdGVkOgorICAgIGludAkJCQkJCW1fTGV2ZWw7CisgICAgQ0ZYX1JlbmRlckRldmljZSoJCW1fcERldmljZTsKKyAgICBDRlhfQWZmaW5lTWF0cml4CQltX0RldmljZU1hdHJpeDsKKyAgICBDUERGX0NsaXBQYXRoCQkJbV9MYXN0Q2xpcFBhdGg7CisgICAgY29uc3QgQ1BERl9QYWdlT2JqZWN0KgltX3BDdXJPYmo7CisgICAgY29uc3QgQ1BERl9QYWdlT2JqZWN0KgltX3BTdG9wT2JqOworICAgIENQREZfR3JhcGhpY1N0YXRlcwkJbV9Jbml0aWFsU3RhdGVzOworICAgIGludAkJCQkJCW1fSGFsZnRvbmVMaW1pdDsKKyAgICBJUERGX09iamVjdFJlbmRlcmVyKgltX3BPYmplY3RSZW5kZXJlcjsKKyAgICBGWF9CT09MCQkJCQltX2JQcmludDsKKyAgICBpbnQJCQkJCQltX1RyYW5zcGFyZW5jeTsKKyAgICBpbnQJCQkJCQltX0RpdGhlckJpdHM7CisgICAgRlhfQk9PTAkJCQkJbV9iRHJvcE9iamVjdHM7CisgICAgRlhfQk9PTAkJCQkJbV9iU3RkQ1M7CisgICAgRlhfRFdPUkQgICAgICAgICAgICAgICAgbV9Hcm91cEZhbWlseTsKKyAgICBGWF9CT09MICAgICAgICAgICAgICAgICBtX2JMb2FkTWFzazsKKyAgICBDUERGX1R5cGUzQ2hhciAqICAgICAgICBtX3BUeXBlM0NoYXI7CisgICAgRlhfQVJHQgkJCQkJbV9UM0ZpbGxDb2xvcjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICBtX2N1ckJsZW5kOworfTsKK2NsYXNzIENQREZfSW1hZ2VMb2FkZXIgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENQREZfSW1hZ2VMb2FkZXIoKQorICAgIHsKKyAgICAgICAgbV9wQml0bWFwID0gTlVMTDsKKyAgICAgICAgbV9wTWFzayA9IE5VTEw7CisgICAgICAgIG1fTWF0dGVDb2xvciA9IDA7CisgICAgICAgIG1fYkNhY2hlZCA9IEZBTFNFOworICAgICAgICBtX25Eb3duc2FtcGxlV2lkdGggPSAwOworICAgICAgICBtX25Eb3duc2FtcGxlSGVpZ2h0ID0gMDsKKyAgICB9CisKKyAgICBGWF9CT09MCQkJCQlMb2FkKGNvbnN0IENQREZfSW1hZ2VPYmplY3QqIHBJbWFnZSwgQ1BERl9QYWdlUmVuZGVyQ2FjaGUqIHBDYWNoZSwgRlhfQk9PTCBiU3RkQ1MgPSBGQUxTRSwgRlhfRFdPUkQgR3JvdXBGYW1pbHkgPSAwLCBGWF9CT09MIGJMb2FkTWFzayA9IEZBTFNFLCBDUERGX1JlbmRlclN0YXR1cyogcFJlbmRlclN0YXR1cyA9IE5VTEwpOworCisgICAgRlhfQk9PTAkJCQkJU3RhcnRMb2FkSW1hZ2UoY29uc3QgQ1BERl9JbWFnZU9iamVjdCogcEltYWdlLCBDUERGX1BhZ2VSZW5kZXJDYWNoZSogcENhY2hlLCBGWF9MUFZPSUQmIExvYWRIYW5kbGUsIEZYX0JPT0wgYlN0ZENTID0gRkFMU0UsIEZYX0RXT1JEIEdyb3VwRmFtaWx5ID0gMCwgRlhfQk9PTCBiTG9hZE1hc2sgPSBGQUxTRSwgQ1BERl9SZW5kZXJTdGF0dXMqIHBSZW5kZXJTdGF0dXMgPSBOVUxMLCBGWF9JTlQzMiBuRG93bnNhbXBsZVdpZHRoID0gMCwgRlhfSU5UMzIgbkRvd25zYW1wbGVIZWlnaHQgPSAwKTsKKyAgICBGWF9CT09MCQkJCQlDb250aW51ZShGWF9MUFZPSUQgTG9hZEhhbmRsZSwgSUZYX1BhdXNlKiBwUGF1c2UpOworICAgIH5DUERGX0ltYWdlTG9hZGVyKCk7CisgICAgQ0ZYX0RJQlNvdXJjZSoJCQltX3BCaXRtYXA7CisgICAgQ0ZYX0RJQlNvdXJjZSoJCQltX3BNYXNrOworICAgIEZYX0RXT1JECQkJCW1fTWF0dGVDb2xvcjsKKyAgICBGWF9CT09MCQkJCQltX2JDYWNoZWQ7Citwcm90ZWN0ZWQ6CisgICAgRlhfSU5UMzIgICAgICAgICAgICAgICAgbV9uRG93bnNhbXBsZVdpZHRoOworICAgIEZYX0lOVDMyICAgICAgICAgICAgICAgIG1fbkRvd25zYW1wbGVIZWlnaHQ7Cit9OworY2xhc3MgQ1BERl9Qcm9ncmVzc2l2ZUltYWdlTG9hZGVySGFuZGxlIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBDUERGX1Byb2dyZXNzaXZlSW1hZ2VMb2FkZXJIYW5kbGUoKTsKKyAgICB+Q1BERl9Qcm9ncmVzc2l2ZUltYWdlTG9hZGVySGFuZGxlKCk7CisKKyAgICBGWF9CT09MCQkJU3RhcnQoQ1BERl9JbWFnZUxvYWRlciogcEltYWdlTG9hZGVyLCBjb25zdCBDUERGX0ltYWdlT2JqZWN0KiBwSW1hZ2UsIENQREZfUGFnZVJlbmRlckNhY2hlKiBwQ2FjaGUsIEZYX0JPT0wgYlN0ZENTID0gRkFMU0UsIEZYX0RXT1JEIEdyb3VwRmFtaWx5ID0gMCwgRlhfQk9PTCBiTG9hZE1hc2sgPSBGQUxTRSwgQ1BERl9SZW5kZXJTdGF0dXMqIHBSZW5kZXJTdGF0dXMgPSBOVUxMLCBGWF9JTlQzMiBuRG93bnNhbXBsZVdpZHRoID0gMCwgRlhfSU5UMzIgbkRvd25zYW1wbGVIZWlnaHQgPSAwKTsKKyAgICBGWF9CT09MCQkJQ29udGludWUoSUZYX1BhdXNlKiBwUGF1c2UpOworcHJvdGVjdGVkOgorICAgIENQREZfSW1hZ2VMb2FkZXIqCW1fcEltYWdlTG9hZGVyOworICAgIENQREZfUGFnZVJlbmRlckNhY2hlKiBtX3BDYWNoZTsKKyAgICBDUERGX0ltYWdlT2JqZWN0KiBtX3BJbWFnZTsKKyAgICBGWF9JTlQzMiAgICAgICAgICAgIG1fbkRvd25zYW1wbGVXaWR0aDsKKyAgICBGWF9JTlQzMiAgICAgICAgICAgIG1fbkRvd25zYW1wbGVIZWlnaHQ7Cit9OworY2xhc3MgQ0ZYX0ltYWdlVHJhbnNmb3JtZXI7CitjbGFzcyBDUERGX0ltYWdlUmVuZGVyZXIgOiBwdWJsaWMgSVBERl9PYmplY3RSZW5kZXJlcgoreworcHVibGljOgorICAgIENQREZfSW1hZ2VSZW5kZXJlcigpOworICAgIH5DUERGX0ltYWdlUmVuZGVyZXIoKTsKKyAgICBGWF9CT09MCQlTdGFydChDUERGX1JlbmRlclN0YXR1cyogcFN0YXR1cywgY29uc3QgQ1BERl9QYWdlT2JqZWN0KiBwT2JqLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqMkRldmljZSwgRlhfQk9PTCBiU3RkQ1MsIGludCBibGVuZFR5cGUgPSBGWERJQl9CTEVORF9OT1JNQUwpOworICAgIEZYX0JPT0wJCVN0YXJ0KENQREZfUmVuZGVyU3RhdHVzKiBwU3RhdHVzLCBjb25zdCBDRlhfRElCU291cmNlKiBwRElCU291cmNlLCBGWF9BUkdCIGJpdG1hcF9hcmdiLAorICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRtYXBfYWxwaGEsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBJbWFnZTJEZXZpY2UsIEZYX0RXT1JEIGZsYWdzLCBGWF9CT09MIGJTdGRDUywgaW50IGJsZW5kVHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTCk7CisgICAgRlhfQk9PTAkJQ29udGludWUoSUZYX1BhdXNlKiBwUGF1c2UpOworcHJvdGVjdGVkOgorICAgIENQREZfUmVuZGVyU3RhdHVzKgltX3BSZW5kZXJTdGF0dXM7CisgICAgQ1BERl9JbWFnZU9iamVjdCoJbV9wSW1hZ2VPYmplY3Q7CisgICAgaW50CQkJCQltX1N0YXR1czsKKyAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBtX3BPYmoyRGV2aWNlOworICAgIENGWF9BZmZpbmVNYXRyaXgJbV9JbWFnZU1hdHJpeDsKKyAgICBDUERGX0ltYWdlTG9hZGVyCW1fTG9hZGVyOworICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqCQltX3BESUJTb3VyY2U7CisgICAgQ0ZYX0RJQml0bWFwKgkJbV9wQ2xvbmU7CisgICAgaW50CQkJCQltX0JpdG1hcEFscGhhOworICAgIEZYX0JPT0wJCQkJbV9iUGF0dGVybkNvbG9yOworICAgIENQREZfUGF0dGVybioJCW1fcFBhdHRlcm47CisgICAgRlhfQVJHQgkJCQltX0ZpbGxBcmdiOworICAgIEZYX0RXT1JECQkJbV9GbGFnczsKKyAgICBDUERGX1F1aWNrU3RyZXRjaGVyKgltX3BRdWlja1N0cmV0Y2hlcjsKKyAgICBDRlhfSW1hZ2VUcmFuc2Zvcm1lcioJbV9wVHJhbnNmb3JtZXI7CisgICAgQ1BERl9JbWFnZVJlbmRlcmVyKgltX3BSZW5kZXJlcjI7CisgICAgRlhfTFBWT0lECQkJbV9EZXZpY2VIYW5kbGU7CisgICAgRlhfTFBWT0lEICAgICAgICAgICBtX0xvYWRIYW5kbGU7CisgICAgRlhfQk9PTAkJCQltX2JTdGRDUzsKKyAgICBpbnQJCQkJCW1fQmxlbmRUeXBlOworICAgIEZYX0JPT0wJCQkJU3RhcnRCaXRtYXBBbHBoYSgpOworICAgIEZYX0JPT0wJCQkJU3RhcnRESUJTb3VyY2UoKTsKKyAgICBGWF9CT09MCQkJCVN0YXJ0UmVuZGVyRElCU291cmNlKCk7CisgICAgRlhfQk9PTAkJCQlTdGFydExvYWRESUJTb3VyY2UoKTsKKyAgICBGWF9CT09MCQkJCURyYXdNYXNrZWRJbWFnZSgpOworICAgIEZYX0JPT0wJCQkJRHJhd1BhdHRlcm5JbWFnZShjb25zdCBDRlhfTWF0cml4KiBwT2JqMkRldmljZSk7Cit9OworY2xhc3MgQ1BERl9TY2FsZWRSZW5kZXJCdWZmZXIgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENQREZfU2NhbGVkUmVuZGVyQnVmZmVyKCk7CisgICAgfkNQREZfU2NhbGVkUmVuZGVyQnVmZmVyKCk7CisgICAgRlhfQk9PTAkJCQlJbml0aWFsaXplKENQREZfUmVuZGVyQ29udGV4dCogcENvbnRleHQsIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIEZYX1JFQ1QqIHBSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDUERGX1BhZ2VPYmplY3QqIHBPYmosIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyAqcE9wdGlvbnMgPSBOVUxMLCBpbnQgbWF4X2RwaSA9IDApOworICAgIENGWF9SZW5kZXJEZXZpY2UqCUdldERldmljZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9wQml0bWFwRGV2aWNlID8gbV9wQml0bWFwRGV2aWNlIDogbV9wRGV2aWNlOworICAgIH0KKyAgICBDRlhfQWZmaW5lTWF0cml4KglHZXRNYXRyaXgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZtX01hdHJpeDsKKyAgICB9CisgICAgdm9pZAkJCQlPdXRwdXRUb0RldmljZSgpOworcHJpdmF0ZToKKyAgICBDRlhfUmVuZGVyRGV2aWNlKgltX3BEZXZpY2U7CisgICAgQ1BERl9SZW5kZXJDb250ZXh0KgltX3BDb250ZXh0OworICAgIEZYX1JFQ1QJCQkJbV9SZWN0OworICAgIGNvbnN0IENQREZfUGFnZU9iamVjdCogbV9wT2JqZWN0OworICAgIENGWF9GeGdlRGV2aWNlKgltX3BCaXRtYXBEZXZpY2U7CisgICAgQ0ZYX0FmZmluZU1hdHJpeAltX01hdHJpeDsKK307CitjbGFzcyBJQ29kZWNfU2NhbmxpbmVEZWNvZGVyOworY2xhc3MgQ1BERl9RdWlja1N0cmV0Y2hlciA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ1BERl9RdWlja1N0cmV0Y2hlcigpOworICAgIH5DUERGX1F1aWNrU3RyZXRjaGVyKCk7CisgICAgRlhfQk9PTAkJU3RhcnQoQ1BERl9JbWFnZU9iamVjdCogcEltYWdlT2JqLCBDRlhfQWZmaW5lTWF0cml4KiBwSW1hZ2UyRGV2aWNlLCBjb25zdCBGWF9SRUNUKiBwQ2xpcEJveCk7CisgICAgRlhfQk9PTAkJQ29udGludWUoSUZYX1BhdXNlKiBwUGF1c2UpOworICAgIENGWF9ESUJpdG1hcCoJbV9wQml0bWFwOworICAgIGludAkJCW1fUmVzdWx0TGVmdCwgbV9SZXN1bHRUb3AsIG1fQ2xpcExlZnQsIG1fQ2xpcFRvcDsKKyAgICBpbnQJCQltX0Rlc3RXaWR0aCwgbV9EZXN0SGVpZ2h0LCBtX1Jlc3VsdFdpZHRoLCBtX1Jlc3VsdEhlaWdodDsKKyAgICBpbnQJCQltX0JwcCwgbV9TcmNXaWR0aCwgbV9TcmNIZWlnaHQ7CisgICAgRlhfQk9PTAkJbV9iRmxpcFgsIG1fYkZsaXBZOworICAgIENQREZfQ29sb3JTcGFjZSoJbV9wQ1M7CisgICAgSUNvZGVjX1NjYW5saW5lRGVjb2RlcioJbV9wRGVjb2RlcjsKKyAgICBDUERGX1N0cmVhbUFjYyBtX1N0cmVhbUFjYzsKKyAgICBpbnQJCQltX0xpbmVJbmRleDsKK307CitjbGFzcyBDUERGX0RldmljZUJ1ZmZlciA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ1BERl9EZXZpY2VCdWZmZXIoKTsKKyAgICB+Q1BERl9EZXZpY2VCdWZmZXIoKTsKKyAgICBGWF9CT09MCQkJCUluaXRpYWxpemUoQ1BERl9SZW5kZXJDb250ZXh0KiBwQ29udGV4dCwgQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgRlhfUkVDVCogcFJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENQREZfUGFnZU9iamVjdCogcE9iaiwgaW50IG1heF9kcGkgPSAwKTsKKyAgICB2b2lkCQkJCU91dHB1dFRvRGV2aWNlKCk7CisgICAgQ0ZYX0RJQml0bWFwKgkJR2V0Qml0bWFwKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BCaXRtYXA7CisgICAgfQorICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqCUdldE1hdHJpeCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gJm1fTWF0cml4OworICAgIH0KK3ByaXZhdGU6CisgICAgQ0ZYX1JlbmRlckRldmljZSoJbV9wRGV2aWNlOworICAgIENQREZfUmVuZGVyQ29udGV4dCoJbV9wQ29udGV4dDsKKyAgICBGWF9SRUNUCQkJCW1fUmVjdDsKKyAgICBjb25zdCBDUERGX1BhZ2VPYmplY3QqIG1fcE9iamVjdDsKKyAgICBDRlhfRElCaXRtYXAqCQltX3BCaXRtYXA7CisgICAgQ0ZYX0FmZmluZU1hdHJpeAltX01hdHJpeDsKK307CitjbGFzcyBDUERGX0ltYWdlQ2FjaGUgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENQREZfSW1hZ2VDYWNoZShDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX1N0cmVhbSogcFN0cmVhbSk7CisgICAgfkNQREZfSW1hZ2VDYWNoZSgpOworICAgIHZvaWQJCQkJQ2xlYXJJbWFnZURhdGEoKTsKKyAgICB2b2lkCQkJCVJlc2V0KGNvbnN0IENGWF9ESUJpdG1hcCogcEJpdG1hcCk7CisgICAgRlhfQk9PTAkJCQlHZXRDYWNoZWRCaXRtYXAoQ0ZYX0RJQlNvdXJjZSomIHBCaXRtYXAsIENGWF9ESUJTb3VyY2UqJiBwTWFzaywgRlhfRFdPUkQmIE1hdHRlQ29sb3IsIENQREZfRGljdGlvbmFyeSogcFBhZ2VSZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiU3RkQ1MgPSBGQUxTRSwgRlhfRFdPUkQgR3JvdXBGYW1pbHkgPSAwLCBGWF9CT09MIGJMb2FkTWFzayA9IEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfUmVuZGVyU3RhdHVzKiBwUmVuZGVyU3RhdHVzID0gTlVMTCwgRlhfSU5UMzIgZG93bnNhbXBsZVdpZHRoID0gMCwgRlhfSU5UMzIgZG93bnNhbXBsZUhlaWdodCA9IDApOworICAgIEZYX0RXT1JECQkJRXN0aW1hdGVTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2R3Q2FjaGVTaXplOworICAgIH0KKyAgICBGWF9EV09SRAkJCUdldFRpbWVDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9kd1RpbWVDb3VudDsKKyAgICB9CisgICAgQ1BERl9TdHJlYW0qCQlHZXRTdHJlYW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcFN0cmVhbTsKKyAgICB9CisgICAgdm9pZAkJCQlTZXRUaW1lQ291bnQoRlhfRFdPUkQgZHdUaW1lQ291bnQpCisgICAgeworICAgICAgICBtX2R3VGltZUNvdW50ID0gZHdUaW1lQ291bnQ7CisgICAgfQorICAgIGludAkJCQkJbV9kd1RpbWVDb3VudDsKK3B1YmxpYzoKKyAgICBpbnQJCQkJCVN0YXJ0R2V0Q2FjaGVkQml0bWFwKENQREZfRGljdGlvbmFyeSogcEZvcm1SZXNvdXJjZXMsIENQREZfRGljdGlvbmFyeSogcFBhZ2VSZXNvdXJjZXMsCisgICAgICAgICAgICBGWF9CT09MIGJTdGRDUyA9IEZBTFNFLCBGWF9EV09SRCBHcm91cEZhbWlseSA9IDAsCisgICAgICAgICAgICBGWF9CT09MIGJMb2FkTWFzayA9IEZBTFNFLCBDUERGX1JlbmRlclN0YXR1cyogcFJlbmRlclN0YXR1cyA9IE5VTEwsIEZYX0lOVDMyIGRvd25zYW1wbGVXaWR0aCA9IDAsIEZYX0lOVDMyIGRvd25zYW1wbGVIZWlnaHQgPSAwKTsKKyAgICBpbnQJCQkJCUNvbnRpbnVlKElGWF9QYXVzZSogcFBhdXNlKTsKKyAgICBpbnQgCQkJCUNvbnRpbnVlR2V0Q2FjaGVkQml0bWFwKCk7CisgICAgQ0ZYX0RJQlNvdXJjZSoJCURldGFjaEJpdG1hcCgpOworICAgIENGWF9ESUJTb3VyY2UqCQlEZXRhY2hNYXNrKCk7CisgICAgQ0ZYX0RJQlNvdXJjZSoJCW1fcEN1ckJpdG1hcDsKKyAgICBDRlhfRElCU291cmNlKgkJbV9wQ3VyTWFzazsKKyAgICBGWF9EV09SRAkJCW1fTWF0dGVDb2xvcjsKKyAgICBDUERGX1JlbmRlclN0YXR1cyogIG1fcFJlbmRlclN0YXR1czsKK3Byb3RlY3RlZDoKKyAgICBDUERGX0RvY3VtZW50KgkJbV9wRG9jdW1lbnQ7CisgICAgQ1BERl9TdHJlYW0qCQltX3BTdHJlYW07CisgICAgQ0ZYX0RJQlNvdXJjZSoJCW1fcENhY2hlZEJpdG1hcDsKKyAgICBDRlhfRElCU291cmNlKgkJbV9wQ2FjaGVkTWFzazsKKyAgICBGWF9EV09SRAkJCW1fZHdDYWNoZVNpemU7CisgICAgdm9pZAlDYWxjU2l6ZSgpOworfTsKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBGWF9GTE9BVAkJCW1fRGVjb2RlTWluOworICAgIEZYX0ZMT0FUCQkJbV9EZWNvZGVTdGVwOworICAgIGludAkJCQkJbV9Db2xvcktleU1pbjsKKyAgICBpbnQJCQkJCW1fQ29sb3JLZXlNYXg7Cit9IERJQl9DT01QX0RBVEE7CitjbGFzcyBDUERGX0RJQlNvdXJjZSA6IHB1YmxpYyBDRlhfRElCU291cmNlCit7CitwdWJsaWM6CisgICAgQ1BERl9ESUJTb3VyY2UoKTsKKyAgICB2aXJ0dWFsIH5DUERGX0RJQlNvdXJjZSgpOworICAgIEZYX0JPT0wJCQkJTG9hZChDUERGX0RvY3VtZW50KiBwRG9jLCBjb25zdCBDUERGX1N0cmVhbSogcFN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9ESUJTb3VyY2UqKiBwcE1hc2ssIEZYX0RXT1JEKiBwTWF0dGVDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybVJlc291cmNlcywgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZVJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiU3RkQ1MgPSBGQUxTRSwgRlhfRFdPUkQgR3JvdXBGYW1pbHkgPSAwLCBGWF9CT09MIGJMb2FkTWFzayA9IEZBTFNFKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCVNraXBUb1NjYW5saW5lKGludCBsaW5lLCBJRlhfUGF1c2UqIHBQYXVzZSkgY29uc3Q7CisgICAgdmlydHVhbAlGWF9MUEJZVEUJR2V0QnVmZmVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBGWF9MUENCWVRFCUdldFNjYW5saW5lKGludCBsaW5lKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQJCURvd25TYW1wbGVTY2FubGluZShpbnQgbGluZSwgRlhfTFBCWVRFIGRlc3Rfc2NhbiwgaW50IGRlc3RfYnBwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3dpZHRoLCBGWF9CT09MIGJGbGlwWCwgaW50IGNsaXBfbGVmdCwgaW50IGNsaXBfd2lkdGgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZAkJU2V0RG93blNhbXBsZVNpemUoaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCkgY29uc3Q7CisgICAgQ0ZYX0RJQml0bWFwKgkJR2V0Qml0bWFwKCkgY29uc3Q7CisgICAgdm9pZAkJCQlSZWxlYXNlQml0bWFwKENGWF9ESUJpdG1hcCopIGNvbnN0OworICAgIHZvaWQJCQkJQ2xlYXJJbWFnZURhdGEoKTsKK3B1YmxpYzoKKyAgICBpbnQJCQkJCVN0YXJ0TG9hZERJQlNvdXJjZShDUERGX0RvY3VtZW50KiBwRG9jLCBjb25zdCBDUERGX1N0cmVhbSogcFN0cmVhbSwgRlhfQk9PTCBiSGFzTWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBGb3JtUmVzb3VyY2VzLCBDUERGX0RpY3Rpb25hcnkqIHBQYWdlUmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYlN0ZENTID0gRkFMU0UsIEZYX0RXT1JEIEdyb3VwRmFtaWx5ID0gMCwgRlhfQk9PTCBiTG9hZE1hc2sgPSBGQUxTRSk7CisgICAgaW50CQkJCQlDb250aW51ZUxvYWRESUJTb3VyY2UoSUZYX1BhdXNlKiBwUGF1c2UpOworICAgIGludAkJCQkJU3RyYXRMb2FkTWFzaygpOworICAgIGludAkJCQkJU3RhcnRMb2FkTWFza0RJQigpOworICAgIGludAkJCQkJQ29udGludWVMb2FkTWFza0RJQihJRlhfUGF1c2UqIHBQYXVzZSk7CisgICAgaW50CQkJCQlDb250aW51ZVRvTG9hZE1hc2soKTsKKyAgICBDUERGX0RJQlNvdXJjZSoJCURldGFjaE1hc2soKTsKKyAgICBDUERGX0RJQlNvdXJjZSoJCW1fcE1hc2s7CisgICAgRlhfRFdPUkQJCQltX01hdHRlQ29sb3I7CisgICAgRlhfTFBWT0lECQkJbV9wSmJpZzJDb250ZXh0OworICAgIENQREZfU3RyZWFtQWNjKgkJbV9wR2xvYmFsU3RyZWFtOworICAgIEZYX0JPT0wJCQkJbV9iU3RkQ1M7CisgICAgaW50CQkJCQltX1N0YXR1czsKKyAgICBDUERGX09iamVjdCoJCW1fcE1hc2tTdHJlYW07CisgICAgRlhfQk9PTAkJCQltX2JIYXNNYXNrOworcHJvdGVjdGVkOgorICAgIEZYX0JPT0wJCQkJTG9hZENvbG9ySW5mbyhDUERGX0RpY3Rpb25hcnkqIHBGb3JtUmVzb3VyY2VzLCBDUERGX0RpY3Rpb25hcnkqIHBQYWdlUmVzb3VyY2VzKTsKKyAgICBDUERGX0RJQlNvdXJjZSoJCUxvYWRNYXNrKEZYX0RXT1JEJiBNYXR0ZUNvbG9yKTsKKyAgICBDUERGX0RJQlNvdXJjZSoJCUxvYWRNYXNrRElCKENQREZfU3RyZWFtKiBwTWFzayk7CisgICAgdm9pZAkJCQlMb2FkSnB4Qml0bWFwKCk7CisgICAgdm9pZAkJCQlMb2FkSmJpZzJCaXRtYXAoKTsKKyAgICB2b2lkCQkJCUxvYWRQYWxldHRlKCk7CisgICAgRlhfQk9PTAkJCQlDcmVhdGVEZWNvZGVyKCk7CisgICAgdm9pZAkJCQlUcmFuc2xhdGVTY2FubGluZTI0YnBwKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4pIGNvbnN0OworCUZYX0RXT1JEICAgICAgICAgICAgR2V0VmFsaWRCcHAoKSBjb25zdDsKKworICAgIENQREZfRG9jdW1lbnQqCQltX3BEb2N1bWVudDsKKyAgICBjb25zdCBDUERGX1N0cmVhbSoJbV9wU3RyZWFtOworICAgIENQREZfU3RyZWFtQWNjKgkJbV9wU3RyZWFtQWNjOworICAgIGNvbnN0IENQREZfRGljdGlvbmFyeSoJbV9wRGljdDsKKyAgICBDUERGX0NvbG9yU3BhY2UqCW1fcENvbG9yU3BhY2U7CisgICAgRlhfRFdPUkQJCQltX0ZhbWlseSwgbV9icGMsIG1fbkNvbXBvbmVudHMsIG1fR3JvdXBGYW1pbHk7CisgICAgRlhfQk9PTAkJCQltX2JMb2FkTWFzazsKKyAgICBGWF9CT09MCQkJCW1fYkRlZmF1bHREZWNvZGUsIG1fYkltYWdlTWFzaywgbV9iQ29sb3JLZXk7CisgICAgRElCX0NPTVBfREFUQSoJCW1fcENvbXBEYXRhOworICAgIEZYX0xQQllURQkJCW1fcExpbmVCdWY7CisgICAgRlhfTFBCWVRFCQkJbV9wTWFza2VkTGluZTsKKyAgICBDRlhfRElCaXRtYXAqCQltX3BDYWNoZWRCaXRtYXA7CisgICAgSUNvZGVjX1NjYW5saW5lRGVjb2RlcioJbV9wRGVjb2RlcjsKK307CisjaWZkZWYgX0ZQREZBUElfTUlOSV8KKyNkZWZpbmUgRlBERl9IVUdFX0lNQUdFX1NJWkUJMzAwMDAwMAorI2Vsc2UKKyNkZWZpbmUgRlBERl9IVUdFX0lNQUdFX1NJWkUJNjAwMDAwMDAKKyNlbmRpZgorY2xhc3MgQ1BERl9ESUJUcmFuc2ZlckZ1bmMgOiBwdWJsaWMgQ0ZYX0ZpbHRlcmVkRElCCit7CitwdWJsaWM6CisgICAgQ1BERl9ESUJUcmFuc2ZlckZ1bmMoY29uc3QgQ1BERl9UcmFuc2ZlckZ1bmMqIHBUcmFuc2ZlckZ1bmMpOworICAgIHZpcnR1YWwgRlhESUJfRm9ybWF0CUdldERlc3RGb3JtYXQoKTsKKyAgICB2aXJ0dWFsIEZYX0FSR0IqCQlHZXREZXN0UGFsZXR0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkCQkJVHJhbnNsYXRlU2NhbmxpbmUoRlhfTFBCWVRFIGRlc3RfYnVmLCBGWF9MUENCWVRFIHNyY19idWYpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZAkJCVRyYW5zbGF0ZURvd25TYW1wbGVzKEZYX0xQQllURSBkZXN0X2J1ZiwgRlhfTFBDQllURSBzcmNfYnVmLCBpbnQgcGl4ZWxzLCBpbnQgQnBwKSBjb25zdDsKKyAgICBGWF9MUENCWVRFCQkJCW1fUmFtcFI7CisgICAgRlhfTFBDQllURQkJCQltX1JhbXBHOworICAgIEZYX0xQQ0JZVEUJCQkJbV9SYW1wQjsKK307CitzdHJ1Y3QgX0NQREZfVW5pcXVlS2V5R2VuIHsKKyAgICB2b2lkCQlHZW5lcmF0ZShpbnQgY291bnQsIC4uLik7CisgICAgRlhfQ0hBUgkJbV9LZXlbMTI4XTsKKyAgICBpbnQJCQltX0tleUxlbjsKK307CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmZG9jL2RvY19hY3Rpb24uY3BwIGIvY29yZS9zcmMvZnBkZmRvYy9kb2NfYWN0aW9uLmNwcAppbmRleCBmMTNiZDI3Li44MDFjNjlmIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmZG9jL2RvY19hY3Rpb24uY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX2FjdGlvbi5jcHAKQEAgLTEsMzYyICsxLDM2MiBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmRvYy9mcGRmX2RvYy5oIg0KLUNQREZfRGVzdCBDUERGX0FjdGlvbjo6R2V0RGVzdChDUERGX0RvY3VtZW50KiBwRG9jKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fcERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgdHlwZSA9IG1fcERpY3QtPkdldFN0cmluZygiUyIpOw0KLSAgICBpZiAodHlwZSAhPSAiR29UbyIgJiYgdHlwZSAhPSAiR29Ub1IiKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDUERGX09iamVjdCogcERlc3QgPSBtX3BEaWN0LT5HZXRFbGVtZW50VmFsdWUoIkQiKTsNCi0gICAgaWYgKHBEZXN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmIChwRGVzdC0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJJTkcgfHwgcERlc3QtPkdldFR5cGUoKSA9PSBQREZPQkpfTkFNRSkgew0KLSAgICAgICAgQ1BERl9OYW1lVHJlZSBuYW1lX3RyZWUocERvYywgRlhfQlNUUkMoIkRlc3RzIikpOw0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmdDIG5hbWUgPSBwRGVzdC0+R2V0U3RyaW5nKCk7DQotICAgICAgICByZXR1cm4gbmFtZV90cmVlLkxvb2t1cE5hbWVkRGVzdChwRG9jLCBuYW1lKTsNCi0gICAgfSBlbHNlIGlmIChwRGVzdC0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgew0KLSAgICAgICAgcmV0dXJuIChDUERGX0FycmF5KilwRGVzdDsNCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotY29uc3QgRlhfQ0hBUiogZ19zQVR5cGVzW10gPSB7IlVua25vd24iLCAiR29UbyIsICJHb1RvUiIsICJHb1RvRSIsICJMYXVuY2giLCAiVGhyZWFkIiwgIlVSSSIsICJTb3VuZCIsICJNb3ZpZSIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhpZGUiLAkiTmFtZWQiLCAiU3VibWl0Rm9ybSIsICJSZXNldEZvcm0iLCAiSW1wb3J0RGF0YSIsICJKYXZhU2NyaXB0IiwgIlNldE9DR1N0YXRlIiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVuZGl0aW9uIiwgIlRyYW5zIiwgIkdvVG8zRFZpZXciLCAiIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsNCi1DUERGX0FjdGlvbjo6QWN0aW9uVHlwZSBDUERGX0FjdGlvbjo6R2V0VHlwZSgpIGNvbnN0DQotew0KLSAgICBBY3Rpb25UeXBlIGVUeXBlID0gVW5rbm93bjsNCi0gICAgaWYgKG1fcERpY3QgIT0gTlVMTCkgew0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3NUeXBlID0gbV9wRGljdC0+R2V0U3RyaW5nKCJTIik7DQotICAgICAgICBpZiAoIWNzVHlwZS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICBpbnQgaSA9IDA7DQotICAgICAgICAgICAgd2hpbGUgKGdfc0FUeXBlc1tpXVswXSAhPSAnXDAnKSB7DQotICAgICAgICAgICAgICAgIGlmIChjc1R5cGUgPT0gZ19zQVR5cGVzW2ldKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEFjdGlvblR5cGUpaTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpICsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gZVR5cGU7DQotfQ0KLUNGWF9XaWRlU3RyaW5nIENQREZfQWN0aW9uOjpHZXRGaWxlUGF0aCgpIGNvbnN0DQotew0KLSAgICBDRlhfQnl0ZVN0cmluZyB0eXBlID0gbV9wRGljdC0+R2V0U3RyaW5nKCJTIik7DQotICAgIGlmICh0eXBlICE9ICJHb1RvUiIgJiYgdHlwZSAhPSAiTGF1bmNoIiAmJg0KLSAgICAgICAgICAgIHR5cGUgIT0gIlN1Ym1pdEZvcm0iICYmIHR5cGUgIT0gIkltcG9ydERhdGEiKSB7DQotICAgICAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsNCi0gICAgfQ0KLSAgICBDUERGX09iamVjdCogcEZpbGUgPSBtX3BEaWN0LT5HZXRFbGVtZW50VmFsdWUoIkYiKTsNCi0gICAgQ0ZYX1dpZGVTdHJpbmcgcGF0aDsNCi0gICAgaWYgKHBGaWxlID09IE5VTEwpIHsNCi0gICAgICAgIGlmICh0eXBlID09ICJMYXVuY2giKSB7DQotICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwV2luRGljdCA9IG1fcERpY3QtPkdldERpY3QoRlhfQlNUUkMoIldpbiIpKTsNCi0gICAgICAgICAgICBpZiAocFdpbkRpY3QpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwocFdpbkRpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiRiIpKSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHBhdGg7DQotICAgIH0NCi0gICAgQ1BERl9GaWxlU3BlYyBmaWxlc3BlYyhwRmlsZSk7DQotICAgIGZpbGVzcGVjLkdldEZpbGVOYW1lKHBhdGgpOw0KLSAgICByZXR1cm4gcGF0aDsNCi19DQotQ0ZYX0J5dGVTdHJpbmcgQ1BERl9BY3Rpb246OkdldFVSSShDUERGX0RvY3VtZW50KiBwRG9jKSBjb25zdA0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgY3NVUkk7DQotICAgIGlmIChtX3BEaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBjc1VSSTsNCi0gICAgfQ0KLSAgICBpZiAobV9wRGljdC0+R2V0U3RyaW5nKCJTIikgIT0gIlVSSSIpIHsNCi0gICAgICAgIHJldHVybiBjc1VSSTsNCi0gICAgfQ0KLSAgICBjc1VSSSA9IG1fcERpY3QtPkdldFN0cmluZygiVVJJIik7DQotICAgIENQREZfRGljdGlvbmFyeSogcFJvb3QgPSBwRG9jLT5HZXRSb290KCk7DQotICAgIENQREZfRGljdGlvbmFyeSogcFVSSSA9IHBSb290LT5HZXREaWN0KCJVUkkiKTsNCi0gICAgaWYgKHBVUkkgIT0gTlVMTCkgew0KLSAgICAgICAgaWYgKGNzVVJJLkZpbmQoRlhfQlNUUkMoIjoiKSwgMCkgPCAxKSB7DQotICAgICAgICAgICAgY3NVUkkgPSBwVVJJLT5HZXRTdHJpbmcoIkJhc2UiKSArIGNzVVJJOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBjc1VSSTsNCi19DQotRlhfRFdPUkQgQ1BERl9BY3Rpb25GaWVsZHM6OkdldEZpZWxkc0NvdW50KCkgY29uc3QNCi17DQotICAgIGlmIChtX3BBY3Rpb24gPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IChDUERGX0RpY3Rpb25hcnkqKSgqbV9wQWN0aW9uKTsNCi0gICAgaWYgKHBEaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIGNzVHlwZSA9IHBEaWN0LT5HZXRTdHJpbmcoIlMiKTsNCi0gICAgQ1BERl9PYmplY3QqIHBGaWVsZHMgPSBOVUxMOw0KLSAgICBpZiAoY3NUeXBlID09ICJIaWRlIikgew0KLSAgICAgICAgcEZpZWxkcyA9IHBEaWN0LT5HZXRFbGVtZW50VmFsdWUoIlQiKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHBGaWVsZHMgPSBwRGljdC0+R2V0QXJyYXkoIkZpZWxkcyIpOw0KLSAgICB9DQotICAgIGlmIChwRmllbGRzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGludCBpVHlwZSA9IHBGaWVsZHMtPkdldFR5cGUoKTsNCi0gICAgaWYgKGlUeXBlID09IFBERk9CSl9ESUNUSU9OQVJZKSB7DQotICAgICAgICByZXR1cm4gMTsNCi0gICAgfSBlbHNlIGlmIChpVHlwZSA9PSBQREZPQkpfU1RSSU5HKSB7DQotICAgICAgICByZXR1cm4gMTsNCi0gICAgfSBlbHNlIGlmIChpVHlwZSA9PSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgIHJldHVybiAoKENQREZfQXJyYXkqKXBGaWVsZHMpLT5HZXRDb3VudCgpOw0KLSAgICB9DQotICAgIHJldHVybiAwOw0KLX0NCi12b2lkIENQREZfQWN0aW9uRmllbGRzOjpHZXRBbGxGaWVsZHMoQ0ZYX1B0ckFycmF5JiBmaWVsZE9iamVjdHMpIGNvbnN0DQotew0KLSAgICBmaWVsZE9iamVjdHMuUmVtb3ZlQWxsKCk7DQotICAgIGlmIChtX3BBY3Rpb24gPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KikoKm1fcEFjdGlvbik7DQotICAgIGlmIChwRGljdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgY3NUeXBlID0gcERpY3QtPkdldFN0cmluZygiUyIpOw0KLSAgICBDUERGX09iamVjdCogcEZpZWxkcyA9IE5VTEw7DQotICAgIGlmIChjc1R5cGUgPT0gIkhpZGUiKSB7DQotICAgICAgICBwRmllbGRzID0gcERpY3QtPkdldEVsZW1lbnRWYWx1ZSgiVCIpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcEZpZWxkcyA9IHBEaWN0LT5HZXRBcnJheSgiRmllbGRzIik7DQotICAgIH0NCi0gICAgaWYgKHBGaWVsZHMgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGludCBpVHlwZSA9IHBGaWVsZHMtPkdldFR5cGUoKTsNCi0gICAgaWYgKGlUeXBlID09IFBERk9CSl9ESUNUSU9OQVJZIHx8IGlUeXBlID09IFBERk9CSl9TVFJJTkcpIHsNCi0gICAgICAgIGZpZWxkT2JqZWN0cy5BZGQocEZpZWxkcyk7DQotICAgIH0gZWxzZSBpZiAoaVR5cGUgPT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSAoQ1BERl9BcnJheSopcEZpZWxkczsNCi0gICAgICAgIEZYX0RXT1JEIGlDb3VudCA9IHBBcnJheS0+R2V0Q291bnQoKTsNCi0gICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspIHsNCi0gICAgICAgICAgICBDUERGX09iamVjdCogcE9iaiA9IHBBcnJheS0+R2V0RWxlbWVudFZhbHVlKGkpOw0KLSAgICAgICAgICAgIGlmIChwT2JqICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgZmllbGRPYmplY3RzLkFkZChwT2JqKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi19DQotQ1BERl9PYmplY3QqIENQREZfQWN0aW9uRmllbGRzOjpHZXRGaWVsZChGWF9EV09SRCBpSW5kZXgpIGNvbnN0DQotew0KLSAgICBpZiAobV9wQWN0aW9uID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KikoKm1fcEFjdGlvbik7DQotICAgIGlmIChwRGljdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVN0cmluZyBjc1R5cGUgPSBwRGljdC0+R2V0U3RyaW5nKCJTIik7DQotICAgIENQREZfT2JqZWN0KiBwRmllbGRzID0gTlVMTDsNCi0gICAgaWYgKGNzVHlwZSA9PSAiSGlkZSIpIHsNCi0gICAgICAgIHBGaWVsZHMgPSBwRGljdC0+R2V0RWxlbWVudFZhbHVlKCJUIik7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBwRmllbGRzID0gcERpY3QtPkdldEFycmF5KCJGaWVsZHMiKTsNCi0gICAgfQ0KLSAgICBpZiAocEZpZWxkcyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDUERGX09iamVjdCogcEZpbmRPYmogPSBOVUxMOw0KLSAgICBpbnQgaVR5cGUgPSBwRmllbGRzLT5HZXRUeXBlKCk7DQotICAgIGlmIChpVHlwZSA9PSBQREZPQkpfRElDVElPTkFSWSB8fCBpVHlwZSA9PSBQREZPQkpfU1RSSU5HKSB7DQotICAgICAgICBpZiAoaUluZGV4ID09IDApIHsNCi0gICAgICAgICAgICBwRmluZE9iaiA9IHBGaWVsZHM7DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZiAoaVR5cGUgPT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICBwRmluZE9iaiA9ICgoQ1BERl9BcnJheSopcEZpZWxkcyktPkdldEVsZW1lbnRWYWx1ZShpSW5kZXgpOw0KLSAgICB9DQotICAgIHJldHVybiBwRmluZE9iajsNCi19DQotQ1BERl9MV2luUGFyYW0gQ1BERl9BY3Rpb246OkdldFdpblBhcmFtKCkgY29uc3QNCi17DQotICAgIGlmIChtX3BEaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmIChtX3BEaWN0LT5HZXRTdHJpbmcoIlMiKSAhPSAiTGF1bmNoIikgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIG1fcERpY3QtPkdldERpY3QoIldpbiIpOw0KLX0NCi1DRlhfV2lkZVN0cmluZyBDUERGX0FjdGlvbjo6R2V0SmF2YVNjcmlwdCgpIGNvbnN0DQotew0KLSAgICBDRlhfV2lkZVN0cmluZyBjc0pTOw0KLSAgICBpZiAobV9wRGljdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gY3NKUzsNCi0gICAgfQ0KLSAgICBDUERGX09iamVjdCogcEpTID0gbV9wRGljdC0+R2V0RWxlbWVudFZhbHVlKCJKUyIpOw0KLSAgICBpZiAocEpTICE9IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBwSlMtPkdldFVuaWNvZGVUZXh0KCk7DQotICAgIH0NCi0gICAgcmV0dXJuIGNzSlM7DQotfQ0KLUNQREZfRGljdGlvbmFyeSogQ1BERl9BY3Rpb246OkdldEFubm90KCkgY29uc3QNCi17DQotICAgIGlmIChtX3BEaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIGNzVHlwZSA9IG1fcERpY3QtPkdldFN0cmluZygiUyIpOw0KLSAgICBpZiAoY3NUeXBlID09IEZYX0JTVFJDKCJSZW5kaXRpb24iKSkgew0KLSAgICAgICAgcmV0dXJuIG1fcERpY3QtPkdldERpY3QoIkFOIik7DQotICAgIH0gZWxzZSBpZiAoY3NUeXBlID09IEZYX0JTVFJDKCJNb3ZpZSIpKSB7DQotICAgICAgICByZXR1cm4gbV9wRGljdC0+R2V0RGljdCgiQW5ub3RhdGlvbiIpOw0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1GWF9JTlQzMiBDUERGX0FjdGlvbjo6R2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0DQotew0KLSAgICBpZiAobV9wRGljdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVN0cmluZyBjc1R5cGUgPSBtX3BEaWN0LT5HZXRTdHJpbmcoIlMiKTsNCi0gICAgaWYgKGNzVHlwZSA9PSBGWF9CU1RSQygiUmVuZGl0aW9uIikpIHsNCi0gICAgICAgIHJldHVybiBtX3BEaWN0LT5HZXRJbnRlZ2VyKCJPUCIpOw0KLSAgICB9IGVsc2UgaWYgKGNzVHlwZSA9PSBGWF9CU1RSQygiTW92aWUiKSkgew0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3NPUCA9IG1fcERpY3QtPkdldFN0cmluZygiT3BlcmF0aW9uIik7DQotICAgICAgICBpZiAoY3NPUCA9PSBGWF9CU1RSQygiUGxheSIpKSB7DQotICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICB9IGVsc2UgaWYgKGNzT1AgPT0gRlhfQlNUUkMoIlN0b3AiKSkgew0KLSAgICAgICAgICAgIHJldHVybiAxOw0KLSAgICAgICAgfSBlbHNlIGlmIChjc09QID09IEZYX0JTVFJDKCJQYXVzZSIpKSB7DQotICAgICAgICAgICAgcmV0dXJuIDI7DQotICAgICAgICB9IGVsc2UgaWYgKGNzT1AgPT0gRlhfQlNUUkMoIlJlc3VtZSIpKSB7DQotICAgICAgICAgICAgcmV0dXJuIDM7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIDA7DQotfQ0KLUZYX0RXT1JEIENQREZfQWN0aW9uOjpHZXRTdWJBY3Rpb25zQ291bnQoKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fcERpY3QgPT0gTlVMTCB8fCAhbV9wRGljdC0+S2V5RXhpc3QoIk5leHQiKSkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QqIHBOZXh0ID0gbV9wRGljdC0+R2V0RWxlbWVudFZhbHVlKCJOZXh0Iik7DQotICAgIGlmICghcE5leHQpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGludCBpT2JqVHlwZSA9IHBOZXh0LT5HZXRUeXBlKCk7DQotICAgIGlmIChpT2JqVHlwZSA9PSBQREZPQkpfRElDVElPTkFSWSkgew0KLSAgICAgICAgcmV0dXJuIDE7DQotICAgIH0NCi0gICAgaWYgKGlPYmpUeXBlID09IFBERk9CSl9BUlJBWSkgew0KLSAgICAgICAgcmV0dXJuICgoQ1BERl9BcnJheSopcE5leHQpLT5HZXRDb3VudCgpOw0KLSAgICB9DQotICAgIHJldHVybiAwOw0KLX0NCi1DUERGX0FjdGlvbiBDUERGX0FjdGlvbjo6R2V0U3ViQWN0aW9uKEZYX0RXT1JEIGlJbmRleCkgY29uc3QNCi17DQotICAgIGlmIChtX3BEaWN0ID09IE5VTEwgfHwgIW1fcERpY3QtPktleUV4aXN0KCJOZXh0IikpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfT2JqZWN0KiBwTmV4dCA9IG1fcERpY3QtPkdldEVsZW1lbnRWYWx1ZSgiTmV4dCIpOw0KLSAgICBpbnQgaU9ialR5cGUgPSBwTmV4dC0+R2V0VHlwZSgpOw0KLSAgICBpZiAoaU9ialR5cGUgPT0gUERGT0JKX0RJQ1RJT05BUlkpIHsNCi0gICAgICAgIGlmIChpSW5kZXggPT0gMCkgew0KLSAgICAgICAgICAgIHJldHVybiAoQ1BERl9EaWN0aW9uYXJ5KilwTmV4dDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoaU9ialR5cGUgPT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICByZXR1cm4gKChDUERGX0FycmF5KilwTmV4dCktPkdldERpY3QoaUluZGV4KTsNCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotY29uc3QgRlhfQ0hBUiogZ19zQUFUeXBlc1tdID0geyJFIiwgIlgiLCAiRCIsICJVIiwgIkZvIiwgIkJsIiwgIlBPIiwgIlBDIiwgIlBWIiwgIlBJIiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk8iLCAiQyIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLIiwgIkYiLCAiViIsICJDIiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldDIiwgIldTIiwgIkRTIiwgIldQIiwgIkRQIiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ow0KLUZYX0JPT0wgQ1BERl9BQWN0aW9uOjpBY3Rpb25FeGlzdChBQWN0aW9uVHlwZSBlVHlwZSkgY29uc3QNCi17DQotICAgIGlmIChtX3BEaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wRGljdC0+S2V5RXhpc3QoZ19zQUFUeXBlc1soaW50KWVUeXBlXSk7DQotfQ0KLUNQREZfQWN0aW9uIENQREZfQUFjdGlvbjo6R2V0QWN0aW9uKEFBY3Rpb25UeXBlIGVUeXBlKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fcERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIG1fcERpY3QtPkdldERpY3QoZ19zQUFUeXBlc1soaW50KWVUeXBlXSk7DQotfQ0KLUZYX1BPU0lUSU9OIENQREZfQUFjdGlvbjo6R2V0U3RhcnRQb3MoKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fcERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIG1fcERpY3QtPkdldFN0YXJ0UG9zKCk7DQotfQ0KLUNQREZfQWN0aW9uIENQREZfQUFjdGlvbjo6R2V0TmV4dEFjdGlvbihGWF9QT1NJVElPTiYgcG9zLCBBQWN0aW9uVHlwZSYgZVR5cGUpIGNvbnN0DQotew0KLSAgICBpZiAobV9wRGljdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVN0cmluZyBjc0tleTsNCi0gICAgQ1BERl9PYmplY3QqIHBPYmogPSBtX3BEaWN0LT5HZXROZXh0RWxlbWVudChwb3MsIGNzS2V5KTsNCi0gICAgaWYgKHBPYmogIT0gTlVMTCkgew0KLSAgICAgICAgQ1BERl9PYmplY3QqIHBEaXJlY3QgPSBwT2JqLT5HZXREaXJlY3QoKTsNCi0gICAgICAgIGlmIChwRGlyZWN0ICE9IE5VTEwgJiYgcERpcmVjdC0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKSB7DQotICAgICAgICAgICAgaW50IGkgPSAwOw0KLSAgICAgICAgICAgIHdoaWxlIChnX3NBQVR5cGVzW2ldWzBdICE9ICdcMCcpIHsNCi0gICAgICAgICAgICAgICAgaWYgKGNzS2V5ID09IGdfc0FBVHlwZXNbaV0pIHsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGkgKys7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGVUeXBlID0gKEFBY3Rpb25UeXBlKWk7DQotICAgICAgICAgICAgcmV0dXJuIChDUERGX0RpY3Rpb25hcnkqKXBEaXJlY3Q7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLUNQREZfRG9jSlNBY3Rpb25zOjpDUERGX0RvY0pTQWN0aW9ucyhDUERGX0RvY3VtZW50KiBwRG9jKQ0KLXsNCi0gICAgbV9wRG9jdW1lbnQgPSBwRG9jOw0KLX0NCi1pbnQgQ1BERl9Eb2NKU0FjdGlvbnM6OkNvdW50SlNBY3Rpb25zKCkgY29uc3QNCi17DQotICAgIEFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0gICAgQ1BERl9OYW1lVHJlZSBuYW1lX3RyZWUobV9wRG9jdW1lbnQsIEZYX0JTVFJDKCJKYXZhU2NyaXB0IikpOw0KLSAgICByZXR1cm4gbmFtZV90cmVlLkdldENvdW50KCk7DQotfQ0KLUNQREZfQWN0aW9uIENQREZfRG9jSlNBY3Rpb25zOjpHZXRKU0FjdGlvbihpbnQgaW5kZXgsIENGWF9CeXRlU3RyaW5nJiBjc05hbWUpIGNvbnN0DQotew0KLSAgICBBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotICAgIENQREZfTmFtZVRyZWUgbmFtZV90cmVlKG1fcERvY3VtZW50LCBGWF9CU1RSQygiSmF2YVNjcmlwdCIpKTsNCi0gICAgQ1BERl9PYmplY3QgKnBBY3Rpb24gPSBuYW1lX3RyZWUuTG9va3VwVmFsdWUoaW5kZXgsIGNzTmFtZSk7DQotICAgIGlmIChwQWN0aW9uID09IE5VTEwgfHwgcEFjdGlvbi0+R2V0VHlwZSgpICE9IFBERk9CSl9ESUNUSU9OQVJZKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gcEFjdGlvbi0+R2V0RGljdCgpOw0KLX0NCi1DUERGX0FjdGlvbiBDUERGX0RvY0pTQWN0aW9uczo6R2V0SlNBY3Rpb24oY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZSkgY29uc3QNCi17DQotICAgIEFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0gICAgQ1BERl9OYW1lVHJlZSBuYW1lX3RyZWUobV9wRG9jdW1lbnQsIEZYX0JTVFJDKCJKYXZhU2NyaXB0IikpOw0KLSAgICBDUERGX09iamVjdCAqcEFjdGlvbiA9IG5hbWVfdHJlZS5Mb29rdXBWYWx1ZShjc05hbWUpOw0KLSAgICBpZiAocEFjdGlvbiA9PSBOVUxMIHx8IHBBY3Rpb24tPkdldFR5cGUoKSAhPSBQREZPQkpfRElDVElPTkFSWSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIHBBY3Rpb24tPkdldERpY3QoKTsNCi19DQotaW50IENQREZfRG9jSlNBY3Rpb25zOjpGaW5kSlNBY3Rpb24oY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZSkgY29uc3QNCi17DQotICAgIEFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0gICAgQ1BERl9OYW1lVHJlZSBuYW1lX3RyZWUobV9wRG9jdW1lbnQsIEZYX0JTVFJDKCJKYXZhU2NyaXB0IikpOw0KLSAgICByZXR1cm4gbmFtZV90cmVlLkdldEluZGV4KGNzTmFtZSk7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZkb2MvZnBkZl9kb2MuaCIKK0NQREZfRGVzdCBDUERGX0FjdGlvbjo6R2V0RGVzdChDUERGX0RvY3VtZW50KiBwRG9jKSBjb25zdAoreworICAgIGlmIChtX3BEaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIHR5cGUgPSBtX3BEaWN0LT5HZXRTdHJpbmcoIlMiKTsKKyAgICBpZiAodHlwZSAhPSAiR29UbyIgJiYgdHlwZSAhPSAiR29Ub1IiKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX09iamVjdCogcERlc3QgPSBtX3BEaWN0LT5HZXRFbGVtZW50VmFsdWUoIkQiKTsKKyAgICBpZiAocERlc3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHBEZXN0LT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUklORyB8fCBwRGVzdC0+R2V0VHlwZSgpID09IFBERk9CSl9OQU1FKSB7CisgICAgICAgIENQREZfTmFtZVRyZWUgbmFtZV90cmVlKHBEb2MsIEZYX0JTVFJDKCJEZXN0cyIpKTsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmdDIG5hbWUgPSBwRGVzdC0+R2V0U3RyaW5nKCk7CisgICAgICAgIHJldHVybiBuYW1lX3RyZWUuTG9va3VwTmFtZWREZXN0KHBEb2MsIG5hbWUpOworICAgIH0gZWxzZSBpZiAocERlc3QtPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsKKyAgICAgICAgcmV0dXJuIChDUERGX0FycmF5KilwRGVzdDsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9Citjb25zdCBGWF9DSEFSKiBnX3NBVHlwZXNbXSA9IHsiVW5rbm93biIsICJHb1RvIiwgIkdvVG9SIiwgIkdvVG9FIiwgIkxhdW5jaCIsICJUaHJlYWQiLCAiVVJJIiwgIlNvdW5kIiwgIk1vdmllIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIaWRlIiwJIk5hbWVkIiwgIlN1Ym1pdEZvcm0iLCAiUmVzZXRGb3JtIiwgIkltcG9ydERhdGEiLCAiSmF2YVNjcmlwdCIsICJTZXRPQ0dTdGF0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVuZGl0aW9uIiwgIlRyYW5zIiwgIkdvVG8zRFZpZXciLCAiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworQ1BERl9BY3Rpb246OkFjdGlvblR5cGUgQ1BERl9BY3Rpb246OkdldFR5cGUoKSBjb25zdAoreworICAgIEFjdGlvblR5cGUgZVR5cGUgPSBVbmtub3duOworICAgIGlmIChtX3BEaWN0ICE9IE5VTEwpIHsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3NUeXBlID0gbV9wRGljdC0+R2V0U3RyaW5nKCJTIik7CisgICAgICAgIGlmICghY3NUeXBlLklzRW1wdHkoKSkgeworICAgICAgICAgICAgaW50IGkgPSAwOworICAgICAgICAgICAgd2hpbGUgKGdfc0FUeXBlc1tpXVswXSAhPSAnXDAnKSB7CisgICAgICAgICAgICAgICAgaWYgKGNzVHlwZSA9PSBnX3NBVHlwZXNbaV0pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChBY3Rpb25UeXBlKWk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGkgKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGVUeXBlOworfQorQ0ZYX1dpZGVTdHJpbmcgQ1BERl9BY3Rpb246OkdldEZpbGVQYXRoKCkgY29uc3QKK3sKKyAgICBDRlhfQnl0ZVN0cmluZyB0eXBlID0gbV9wRGljdC0+R2V0U3RyaW5nKCJTIik7CisgICAgaWYgKHR5cGUgIT0gIkdvVG9SIiAmJiB0eXBlICE9ICJMYXVuY2giICYmCisgICAgICAgICAgICB0eXBlICE9ICJTdWJtaXRGb3JtIiAmJiB0eXBlICE9ICJJbXBvcnREYXRhIikgeworICAgICAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsKKyAgICB9CisgICAgQ1BERl9PYmplY3QqIHBGaWxlID0gbV9wRGljdC0+R2V0RWxlbWVudFZhbHVlKCJGIik7CisgICAgQ0ZYX1dpZGVTdHJpbmcgcGF0aDsKKyAgICBpZiAocEZpbGUgPT0gTlVMTCkgeworICAgICAgICBpZiAodHlwZSA9PSAiTGF1bmNoIikgeworICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwV2luRGljdCA9IG1fcERpY3QtPkdldERpY3QoRlhfQlNUUkMoIldpbiIpKTsKKyAgICAgICAgICAgIGlmIChwV2luRGljdCkgeworICAgICAgICAgICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKHBXaW5EaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIkYiKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBwYXRoOworICAgIH0KKyAgICBDUERGX0ZpbGVTcGVjIGZpbGVzcGVjKHBGaWxlKTsKKyAgICBmaWxlc3BlYy5HZXRGaWxlTmFtZShwYXRoKTsKKyAgICByZXR1cm4gcGF0aDsKK30KK0NGWF9CeXRlU3RyaW5nIENQREZfQWN0aW9uOjpHZXRVUkkoQ1BERl9Eb2N1bWVudCogcERvYykgY29uc3QKK3sKKyAgICBDRlhfQnl0ZVN0cmluZyBjc1VSSTsKKyAgICBpZiAobV9wRGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBjc1VSSTsKKyAgICB9CisgICAgaWYgKG1fcERpY3QtPkdldFN0cmluZygiUyIpICE9ICJVUkkiKSB7CisgICAgICAgIHJldHVybiBjc1VSSTsKKyAgICB9CisgICAgY3NVUkkgPSBtX3BEaWN0LT5HZXRTdHJpbmcoIlVSSSIpOworICAgIENQREZfRGljdGlvbmFyeSogcFJvb3QgPSBwRG9jLT5HZXRSb290KCk7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwVVJJID0gcFJvb3QtPkdldERpY3QoIlVSSSIpOworICAgIGlmIChwVVJJICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKGNzVVJJLkZpbmQoRlhfQlNUUkMoIjoiKSwgMCkgPCAxKSB7CisgICAgICAgICAgICBjc1VSSSA9IHBVUkktPkdldFN0cmluZygiQmFzZSIpICsgY3NVUkk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNzVVJJOworfQorRlhfRFdPUkQgQ1BERl9BY3Rpb25GaWVsZHM6OkdldEZpZWxkc0NvdW50KCkgY29uc3QKK3sKKyAgICBpZiAobV9wQWN0aW9uID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KikoKm1fcEFjdGlvbik7CisgICAgaWYgKHBEaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIGNzVHlwZSA9IHBEaWN0LT5HZXRTdHJpbmcoIlMiKTsKKyAgICBDUERGX09iamVjdCogcEZpZWxkcyA9IE5VTEw7CisgICAgaWYgKGNzVHlwZSA9PSAiSGlkZSIpIHsKKyAgICAgICAgcEZpZWxkcyA9IHBEaWN0LT5HZXRFbGVtZW50VmFsdWUoIlQiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwRmllbGRzID0gcERpY3QtPkdldEFycmF5KCJGaWVsZHMiKTsKKyAgICB9CisgICAgaWYgKHBGaWVsZHMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaW50IGlUeXBlID0gcEZpZWxkcy0+R2V0VHlwZSgpOworICAgIGlmIChpVHlwZSA9PSBQREZPQkpfRElDVElPTkFSWSkgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9IGVsc2UgaWYgKGlUeXBlID09IFBERk9CSl9TVFJJTkcpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIGlmIChpVHlwZSA9PSBQREZPQkpfQVJSQVkpIHsKKyAgICAgICAgcmV0dXJuICgoQ1BERl9BcnJheSopcEZpZWxkcyktPkdldENvdW50KCk7CisgICAgfQorICAgIHJldHVybiAwOworfQordm9pZCBDUERGX0FjdGlvbkZpZWxkczo6R2V0QWxsRmllbGRzKENGWF9QdHJBcnJheSYgZmllbGRPYmplY3RzKSBjb25zdAoreworICAgIGZpZWxkT2JqZWN0cy5SZW1vdmVBbGwoKTsKKyAgICBpZiAobV9wQWN0aW9uID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gKENQREZfRGljdGlvbmFyeSopKCptX3BBY3Rpb24pOworICAgIGlmIChwRGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgY3NUeXBlID0gcERpY3QtPkdldFN0cmluZygiUyIpOworICAgIENQREZfT2JqZWN0KiBwRmllbGRzID0gTlVMTDsKKyAgICBpZiAoY3NUeXBlID09ICJIaWRlIikgeworICAgICAgICBwRmllbGRzID0gcERpY3QtPkdldEVsZW1lbnRWYWx1ZSgiVCIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHBGaWVsZHMgPSBwRGljdC0+R2V0QXJyYXkoIkZpZWxkcyIpOworICAgIH0KKyAgICBpZiAocEZpZWxkcyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IGlUeXBlID0gcEZpZWxkcy0+R2V0VHlwZSgpOworICAgIGlmIChpVHlwZSA9PSBQREZPQkpfRElDVElPTkFSWSB8fCBpVHlwZSA9PSBQREZPQkpfU1RSSU5HKSB7CisgICAgICAgIGZpZWxkT2JqZWN0cy5BZGQocEZpZWxkcyk7CisgICAgfSBlbHNlIGlmIChpVHlwZSA9PSBQREZPQkpfQVJSQVkpIHsKKyAgICAgICAgQ1BERl9BcnJheSogcEFycmF5ID0gKENQREZfQXJyYXkqKXBGaWVsZHM7CisgICAgICAgIEZYX0RXT1JEIGlDb3VudCA9IHBBcnJheS0+R2V0Q291bnQoKTsKKyAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IGlDb3VudDsgaSArKykgeworICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBPYmogPSBwQXJyYXktPkdldEVsZW1lbnRWYWx1ZShpKTsKKyAgICAgICAgICAgIGlmIChwT2JqICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBmaWVsZE9iamVjdHMuQWRkKHBPYmopOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorQ1BERl9PYmplY3QqIENQREZfQWN0aW9uRmllbGRzOjpHZXRGaWVsZChGWF9EV09SRCBpSW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKG1fcEFjdGlvbiA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gKENQREZfRGljdGlvbmFyeSopKCptX3BBY3Rpb24pOworICAgIGlmIChwRGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDRlhfQnl0ZVN0cmluZyBjc1R5cGUgPSBwRGljdC0+R2V0U3RyaW5nKCJTIik7CisgICAgQ1BERl9PYmplY3QqIHBGaWVsZHMgPSBOVUxMOworICAgIGlmIChjc1R5cGUgPT0gIkhpZGUiKSB7CisgICAgICAgIHBGaWVsZHMgPSBwRGljdC0+R2V0RWxlbWVudFZhbHVlKCJUIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcEZpZWxkcyA9IHBEaWN0LT5HZXRBcnJheSgiRmllbGRzIik7CisgICAgfQorICAgIGlmIChwRmllbGRzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfT2JqZWN0KiBwRmluZE9iaiA9IE5VTEw7CisgICAgaW50IGlUeXBlID0gcEZpZWxkcy0+R2V0VHlwZSgpOworICAgIGlmIChpVHlwZSA9PSBQREZPQkpfRElDVElPTkFSWSB8fCBpVHlwZSA9PSBQREZPQkpfU1RSSU5HKSB7CisgICAgICAgIGlmIChpSW5kZXggPT0gMCkgeworICAgICAgICAgICAgcEZpbmRPYmogPSBwRmllbGRzOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChpVHlwZSA9PSBQREZPQkpfQVJSQVkpIHsKKyAgICAgICAgcEZpbmRPYmogPSAoKENQREZfQXJyYXkqKXBGaWVsZHMpLT5HZXRFbGVtZW50VmFsdWUoaUluZGV4KTsKKyAgICB9CisgICAgcmV0dXJuIHBGaW5kT2JqOworfQorQ1BERl9MV2luUGFyYW0gQ1BERl9BY3Rpb246OkdldFdpblBhcmFtKCkgY29uc3QKK3sKKyAgICBpZiAobV9wRGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAobV9wRGljdC0+R2V0U3RyaW5nKCJTIikgIT0gIkxhdW5jaCIpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBtX3BEaWN0LT5HZXREaWN0KCJXaW4iKTsKK30KK0NGWF9XaWRlU3RyaW5nIENQREZfQWN0aW9uOjpHZXRKYXZhU2NyaXB0KCkgY29uc3QKK3sKKyAgICBDRlhfV2lkZVN0cmluZyBjc0pTOworICAgIGlmIChtX3BEaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIGNzSlM7CisgICAgfQorICAgIENQREZfT2JqZWN0KiBwSlMgPSBtX3BEaWN0LT5HZXRFbGVtZW50VmFsdWUoIkpTIik7CisgICAgaWYgKHBKUyAhPSBOVUxMKSB7CisgICAgICAgIHJldHVybiBwSlMtPkdldFVuaWNvZGVUZXh0KCk7CisgICAgfQorICAgIHJldHVybiBjc0pTOworfQorQ1BERl9EaWN0aW9uYXJ5KiBDUERGX0FjdGlvbjo6R2V0QW5ub3QoKSBjb25zdAoreworICAgIGlmIChtX3BEaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIGNzVHlwZSA9IG1fcERpY3QtPkdldFN0cmluZygiUyIpOworICAgIGlmIChjc1R5cGUgPT0gRlhfQlNUUkMoIlJlbmRpdGlvbiIpKSB7CisgICAgICAgIHJldHVybiBtX3BEaWN0LT5HZXREaWN0KCJBTiIpOworICAgIH0gZWxzZSBpZiAoY3NUeXBlID09IEZYX0JTVFJDKCJNb3ZpZSIpKSB7CisgICAgICAgIHJldHVybiBtX3BEaWN0LT5HZXREaWN0KCJBbm5vdGF0aW9uIik7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorRlhfSU5UMzIgQ1BERl9BY3Rpb246OkdldE9wZXJhdGlvblR5cGUoKSBjb25zdAoreworICAgIGlmIChtX3BEaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIGNzVHlwZSA9IG1fcERpY3QtPkdldFN0cmluZygiUyIpOworICAgIGlmIChjc1R5cGUgPT0gRlhfQlNUUkMoIlJlbmRpdGlvbiIpKSB7CisgICAgICAgIHJldHVybiBtX3BEaWN0LT5HZXRJbnRlZ2VyKCJPUCIpOworICAgIH0gZWxzZSBpZiAoY3NUeXBlID09IEZYX0JTVFJDKCJNb3ZpZSIpKSB7CisgICAgICAgIENGWF9CeXRlU3RyaW5nIGNzT1AgPSBtX3BEaWN0LT5HZXRTdHJpbmcoIk9wZXJhdGlvbiIpOworICAgICAgICBpZiAoY3NPUCA9PSBGWF9CU1RSQygiUGxheSIpKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBlbHNlIGlmIChjc09QID09IEZYX0JTVFJDKCJTdG9wIikpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9IGVsc2UgaWYgKGNzT1AgPT0gRlhfQlNUUkMoIlBhdXNlIikpIHsKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICB9IGVsc2UgaWYgKGNzT1AgPT0gRlhfQlNUUkMoIlJlc3VtZSIpKSB7CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KK0ZYX0RXT1JEIENQREZfQWN0aW9uOjpHZXRTdWJBY3Rpb25zQ291bnQoKSBjb25zdAoreworICAgIGlmIChtX3BEaWN0ID09IE5VTEwgfHwgIW1fcERpY3QtPktleUV4aXN0KCJOZXh0IikpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIENQREZfT2JqZWN0KiBwTmV4dCA9IG1fcERpY3QtPkdldEVsZW1lbnRWYWx1ZSgiTmV4dCIpOworICAgIGlmICghcE5leHQpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGludCBpT2JqVHlwZSA9IHBOZXh0LT5HZXRUeXBlKCk7CisgICAgaWYgKGlPYmpUeXBlID09IFBERk9CSl9ESUNUSU9OQVJZKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBpZiAoaU9ialR5cGUgPT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgIHJldHVybiAoKENQREZfQXJyYXkqKXBOZXh0KS0+R2V0Q291bnQoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CitDUERGX0FjdGlvbiBDUERGX0FjdGlvbjo6R2V0U3ViQWN0aW9uKEZYX0RXT1JEIGlJbmRleCkgY29uc3QKK3sKKyAgICBpZiAobV9wRGljdCA9PSBOVUxMIHx8ICFtX3BEaWN0LT5LZXlFeGlzdCgiTmV4dCIpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX09iamVjdCogcE5leHQgPSBtX3BEaWN0LT5HZXRFbGVtZW50VmFsdWUoIk5leHQiKTsKKyAgICBpbnQgaU9ialR5cGUgPSBwTmV4dC0+R2V0VHlwZSgpOworICAgIGlmIChpT2JqVHlwZSA9PSBQREZPQkpfRElDVElPTkFSWSkgeworICAgICAgICBpZiAoaUluZGV4ID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiAoQ1BERl9EaWN0aW9uYXJ5KilwTmV4dDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaU9ialR5cGUgPT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgIHJldHVybiAoKENQREZfQXJyYXkqKXBOZXh0KS0+R2V0RGljdChpSW5kZXgpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK2NvbnN0IEZYX0NIQVIqIGdfc0FBVHlwZXNbXSA9IHsiRSIsICJYIiwgIkQiLCAiVSIsICJGbyIsICJCbCIsICJQTyIsICJQQyIsICJQViIsICJQSSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk8iLCAiQyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIksiLCAiRiIsICJWIiwgIkMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXQyIsICJXUyIsICJEUyIsICJXUCIsICJEUCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CitGWF9CT09MIENQREZfQUFjdGlvbjo6QWN0aW9uRXhpc3QoQUFjdGlvblR5cGUgZVR5cGUpIGNvbnN0Cit7CisgICAgaWYgKG1fcERpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBtX3BEaWN0LT5LZXlFeGlzdChnX3NBQVR5cGVzWyhpbnQpZVR5cGVdKTsKK30KK0NQREZfQWN0aW9uIENQREZfQUFjdGlvbjo6R2V0QWN0aW9uKEFBY3Rpb25UeXBlIGVUeXBlKSBjb25zdAoreworICAgIGlmIChtX3BEaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBtX3BEaWN0LT5HZXREaWN0KGdfc0FBVHlwZXNbKGludCllVHlwZV0pOworfQorRlhfUE9TSVRJT04gQ1BERl9BQWN0aW9uOjpHZXRTdGFydFBvcygpIGNvbnN0Cit7CisgICAgaWYgKG1fcERpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIG1fcERpY3QtPkdldFN0YXJ0UG9zKCk7Cit9CitDUERGX0FjdGlvbiBDUERGX0FBY3Rpb246OkdldE5leHRBY3Rpb24oRlhfUE9TSVRJT04mIHBvcywgQUFjdGlvblR5cGUmIGVUeXBlKSBjb25zdAoreworICAgIGlmIChtX3BEaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIGNzS2V5OworICAgIENQREZfT2JqZWN0KiBwT2JqID0gbV9wRGljdC0+R2V0TmV4dEVsZW1lbnQocG9zLCBjc0tleSk7CisgICAgaWYgKHBPYmogIT0gTlVMTCkgeworICAgICAgICBDUERGX09iamVjdCogcERpcmVjdCA9IHBPYmotPkdldERpcmVjdCgpOworICAgICAgICBpZiAocERpcmVjdCAhPSBOVUxMICYmIHBEaXJlY3QtPkdldFR5cGUoKSA9PSBQREZPQkpfRElDVElPTkFSWSkgeworICAgICAgICAgICAgaW50IGkgPSAwOworICAgICAgICAgICAgd2hpbGUgKGdfc0FBVHlwZXNbaV1bMF0gIT0gJ1wwJykgeworICAgICAgICAgICAgICAgIGlmIChjc0tleSA9PSBnX3NBQVR5cGVzW2ldKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpICsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZVR5cGUgPSAoQUFjdGlvblR5cGUpaTsKKyAgICAgICAgICAgIHJldHVybiAoQ1BERl9EaWN0aW9uYXJ5KilwRGlyZWN0OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorQ1BERl9Eb2NKU0FjdGlvbnM6OkNQREZfRG9jSlNBY3Rpb25zKENQREZfRG9jdW1lbnQqIHBEb2MpCit7CisgICAgbV9wRG9jdW1lbnQgPSBwRG9jOworfQoraW50IENQREZfRG9jSlNBY3Rpb25zOjpDb3VudEpTQWN0aW9ucygpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworICAgIENQREZfTmFtZVRyZWUgbmFtZV90cmVlKG1fcERvY3VtZW50LCBGWF9CU1RSQygiSmF2YVNjcmlwdCIpKTsKKyAgICByZXR1cm4gbmFtZV90cmVlLkdldENvdW50KCk7Cit9CitDUERGX0FjdGlvbiBDUERGX0RvY0pTQWN0aW9uczo6R2V0SlNBY3Rpb24oaW50IGluZGV4LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lKSBjb25zdAoreworICAgIEFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKyAgICBDUERGX05hbWVUcmVlIG5hbWVfdHJlZShtX3BEb2N1bWVudCwgRlhfQlNUUkMoIkphdmFTY3JpcHQiKSk7CisgICAgQ1BERl9PYmplY3QgKnBBY3Rpb24gPSBuYW1lX3RyZWUuTG9va3VwVmFsdWUoaW5kZXgsIGNzTmFtZSk7CisgICAgaWYgKHBBY3Rpb24gPT0gTlVMTCB8fCBwQWN0aW9uLT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBwQWN0aW9uLT5HZXREaWN0KCk7Cit9CitDUERGX0FjdGlvbiBDUERGX0RvY0pTQWN0aW9uczo6R2V0SlNBY3Rpb24oY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZSkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisgICAgQ1BERl9OYW1lVHJlZSBuYW1lX3RyZWUobV9wRG9jdW1lbnQsIEZYX0JTVFJDKCJKYXZhU2NyaXB0IikpOworICAgIENQREZfT2JqZWN0ICpwQWN0aW9uID0gbmFtZV90cmVlLkxvb2t1cFZhbHVlKGNzTmFtZSk7CisgICAgaWYgKHBBY3Rpb24gPT0gTlVMTCB8fCBwQWN0aW9uLT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBwQWN0aW9uLT5HZXREaWN0KCk7Cit9CitpbnQgQ1BERl9Eb2NKU0FjdGlvbnM6OkZpbmRKU0FjdGlvbihjb25zdCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lKSBjb25zdAoreworICAgIEFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKyAgICBDUERGX05hbWVUcmVlIG5hbWVfdHJlZShtX3BEb2N1bWVudCwgRlhfQlNUUkMoIkphdmFTY3JpcHQiKSk7CisgICAgcmV0dXJuIG5hbWVfdHJlZS5HZXRJbmRleChjc05hbWUpOworfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmRvYy9kb2NfYW5ub3QuY3BwIGIvY29yZS9zcmMvZnBkZmRvYy9kb2NfYW5ub3QuY3BwCmluZGV4IGRhMzA0ODUuLjIyNzU3OGEgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX2Fubm90LmNwcAorKysgYi9jb3JlL3NyYy9mcGRmZG9jL2RvY19hbm5vdC5jcHAKQEAgLTEsNTE5ICsxLDUxOSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmRvYy9mcGRmX2RvYy5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlb2JqLmgiDQotQ1BERl9Bbm5vdExpc3Q6OkNQREZfQW5ub3RMaXN0KENQREZfUGFnZSogcFBhZ2UpDQotew0KLSAgICBBU1NFUlQocFBhZ2UgIT0gTlVMTCk7DQotICAgIG1fcFBhZ2VEaWN0ID0gcFBhZ2UtPm1fcEZvcm1EaWN0Ow0KLSAgICBpZiAobV9wUGFnZURpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fcERvY3VtZW50ID0gcFBhZ2UtPm1fcERvY3VtZW50Ow0KLSAgICBDUERGX0FycmF5KiBwQW5ub3RzID0gbV9wUGFnZURpY3QtPkdldEFycmF5KCJBbm5vdHMiKTsNCi0gICAgaWYgKHBBbm5vdHMgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcFJvb3QgPSBtX3BEb2N1bWVudC0+R2V0Um9vdCgpOw0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBBY3JvRm9ybSA9IHBSb290LT5HZXREaWN0KCJBY3JvRm9ybSIpOw0KLSAgICBGWF9CT09MIGJSZWdlbmVyYXRlQVAgPSBwQWNyb0Zvcm0gJiYgcEFjcm9Gb3JtLT5HZXRCb29sZWFuKCJOZWVkQXBwZWFyYW5jZXMiKTsNCi0gICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHBBbm5vdHMtPkdldENvdW50KCk7IGkgKyspIHsNCi0gICAgICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KilwQW5ub3RzLT5HZXRFbGVtZW50VmFsdWUoaSk7DQotICAgICAgICBpZiAocERpY3QgPT0gTlVMTCB8fCBwRGljdC0+R2V0VHlwZSgpICE9IFBERk9CSl9ESUNUSU9OQVJZKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBGWF9EV09SRCBkd09iak51bSA9IHBEaWN0LT5HZXRPYmpOdW0oKTsNCi0gICAgICAgIGlmIChkd09iak51bSA9PSAwKSB7DQotICAgICAgICAgICAgZHdPYmpOdW0gPSBtX3BEb2N1bWVudC0+QWRkSW5kaXJlY3RPYmplY3QocERpY3QpOw0KLSAgICAgICAgICAgIENQREZfUmVmZXJlbmNlKiBwQWN0aW9uID0gQ1BERl9SZWZlcmVuY2U6OkNyZWF0ZShtX3BEb2N1bWVudCwgZHdPYmpOdW0pOw0KLSAgICAgICAgICAgIGlmIChwQWN0aW9uID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHBBbm5vdHMtPkluc2VydEF0KGksIHBBY3Rpb24pOw0KLSAgICAgICAgICAgIHBBbm5vdHMtPlJlbW92ZUF0KGkgKyAxKTsNCi0gICAgICAgICAgICBwRGljdCA9IHBBbm5vdHMtPkdldERpY3QoaSk7DQotICAgICAgICB9DQotICAgICAgICBDUERGX0Fubm90KiBwQW5ub3QgPSBGWF9ORVcgQ1BERl9Bbm5vdChwRGljdCk7DQotICAgICAgICBpZiAocEFubm90ID09IE5VTEwpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIHBBbm5vdC0+bV9wTGlzdCA9IHRoaXM7DQotICAgICAgICBtX0Fubm90TGlzdC5BZGQocEFubm90KTsNCi0gICAgICAgIGlmIChiUmVnZW5lcmF0ZUFQICYmIHBEaWN0LT5HZXRDb25zdFN0cmluZyhGWF9CU1RSQygiU3VidHlwZSIpKSA9PSBGWF9CU1RSQygiV2lkZ2V0IikpDQotICAgICAgICAgICAgaWYgKENQREZfSW50ZXJGb3JtOjpVcGRhdGluZ0FQRW5hYmxlZCgpKSB7DQotICAgICAgICAgICAgICAgIEZQREZfR2VuZXJhdGVBUChtX3BEb2N1bWVudCwgcERpY3QpOw0KLSAgICAgICAgICAgIH0NCi0gICAgfQ0KLX0NCi1DUERGX0Fubm90TGlzdDo6fkNQREZfQW5ub3RMaXN0KCkNCi17DQotICAgIGludCBpID0gMDsNCi0gICAgZm9yIChpID0gMDsgaSA8IG1fQW5ub3RMaXN0LkdldFNpemUoKTsgaSArKykgew0KLSAgICAgICAgZGVsZXRlIChDUERGX0Fubm90KiltX0Fubm90TGlzdFtpXTsNCi0gICAgfQ0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbV9Cb3JkZXJzLkdldFNpemUoKTsgKytpKSB7DQotICAgICAgICBkZWxldGUgKENQREZfUGFnZU9iamVjdHMqKW1fQm9yZGVyc1tpXTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfQW5ub3RMaXN0OjpEaXNwbGF5UGFzcyhjb25zdCBDUERGX1BhZ2UqIHBQYWdlLCBDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfUmVuZGVyQ29udGV4dCogcENvbnRleHQsIEZYX0JPT0wgYlByaW50aW5nLCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYldpZGdldFBhc3MsIENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMsIEZYX1JFQ1QqIGNsaXBfcmVjdCkNCi17DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9Bbm5vdExpc3QuR2V0U2l6ZSgpOyBpICsrKSB7DQotICAgICAgICBDUERGX0Fubm90KiBwQW5ub3QgPSAoQ1BERl9Bbm5vdCopbV9Bbm5vdExpc3RbaV07DQotICAgICAgICBGWF9CT09MIGJXaWRnZXQgPSBwQW5ub3QtPkdldFN1YlR5cGUoKSA9PSAiV2lkZ2V0IjsNCi0gICAgICAgIGlmICgoYldpZGdldFBhc3MgJiYgIWJXaWRnZXQpIHx8ICghYldpZGdldFBhc3MgJiYgYldpZGdldCkpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0RXT1JEIGFubm90X2ZsYWdzID0gcEFubm90LT5HZXRGbGFncygpOw0KLSAgICAgICAgaWYgKGFubm90X2ZsYWdzICYgQU5OT1RGTEFHX0hJRERFTikgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGJQcmludGluZyAmJiAoYW5ub3RfZmxhZ3MgJiBBTk5PVEZMQUdfUFJJTlQpID09IDApIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICghYlByaW50aW5nICYmIChhbm5vdF9mbGFncyAmIEFOTk9URkxBR19OT1ZJRVcpKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAocE9wdGlvbnMgIT0gTlVMTCkgew0KLSAgICAgICAgICAgIElQREZfT0NDb250ZXh0KiBwT0NDb250ZXh0ID0gcE9wdGlvbnMtPm1fcE9DQ29udGV4dDsNCi0gICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpY3QgPSBwQW5ub3QtPm1fcEFubm90RGljdDsNCi0gICAgICAgICAgICBpZiAocE9DQ29udGV4dCAhPSBOVUxMICYmIHBBbm5vdERpY3QgIT0gTlVMTCAmJg0KLSAgICAgICAgICAgICAgICAgICAgIXBPQ0NvbnRleHQtPkNoZWNrT0NHVmlzaWJsZShwQW5ub3REaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJPQyIpKSkpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1BERl9SZWN0IGFubm90X3JlY3RfZjsNCi0gICAgICAgIHBBbm5vdC0+R2V0UmVjdChhbm5vdF9yZWN0X2YpOw0KLSAgICAgICAgQ0ZYX01hdHJpeCBtYXRyaXg7DQotICAgICAgICBtYXRyaXggPSAqcE1hdHJpeDsNCi0gICAgICAgIGlmIChjbGlwX3JlY3QpIHsNCi0gICAgICAgICAgICBhbm5vdF9yZWN0X2YuVHJhbnNmb3JtKCZtYXRyaXgpOw0KLSAgICAgICAgICAgIEZYX1JFQ1QgYW5ub3RfcmVjdCA9IGFubm90X3JlY3RfZi5HZXRPdXR0ZXJSZWN0KCk7DQotICAgICAgICAgICAgYW5ub3RfcmVjdC5JbnRlcnNlY3QoKmNsaXBfcmVjdCk7DQotICAgICAgICAgICAgaWYgKGFubm90X3JlY3QuSXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwQ29udGV4dCkgew0KLSAgICAgICAgICAgIHBBbm5vdC0+RHJhd0luQ29udGV4dChwUGFnZSwgcENvbnRleHQsICZtYXRyaXgsIENQREZfQW5ub3Q6Ok5vcm1hbCk7DQotICAgICAgICB9IGVsc2UgaWYgKCFwQW5ub3QtPkRyYXdBcHBlYXJhbmNlKHBQYWdlLCBwRGV2aWNlLCAmbWF0cml4LCBDUERGX0Fubm90OjpOb3JtYWwsIHBPcHRpb25zKSkgew0KLSAgICAgICAgICAgIHBBbm5vdC0+RHJhd0JvcmRlcihwRGV2aWNlLCAmbWF0cml4LCBwT3B0aW9ucyk7DQotICAgICAgICB9DQotICAgIH0NCi19DQotdm9pZCBDUERGX0Fubm90TGlzdDo6RGlzcGxheUFubm90cyhjb25zdCBDUERGX1BhZ2UqIHBQYWdlLCBDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCogcFVzZXIyRGV2aWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiU2hvd1dpZGdldCwgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucykNCi17DQotICAgIEZYX1JFQ1QgY2xpcF9yZWN0Ow0KLSAgICBpZiAocERldmljZSkgew0KLSAgICAgICAgY2xpcF9yZWN0ID0gcERldmljZS0+R2V0Q2xpcEJveCgpOw0KLSAgICB9DQotICAgIEZYX0JPT0wgYlByaW50aW5nID0gcERldmljZS0+R2V0RGV2aWNlQ2xhc3MoKSA9PSBGWERDX1BSSU5URVIgfHwgKHBPcHRpb25zICYmIChwT3B0aW9ucy0+bV9GbGFncyAmIFJFTkRFUl9QUklOVFBSRVZJRVcpKTsNCi0gICAgRGlzcGxheUFubm90cyhwUGFnZSwgcERldmljZSwgTlVMTCwgYlByaW50aW5nLCBwVXNlcjJEZXZpY2UsIGJTaG93V2lkZ2V0ID8gMyA6IDEsIHBPcHRpb25zLCAmY2xpcF9yZWN0KTsNCi19DQotdm9pZCBDUERGX0Fubm90TGlzdDo6RGlzcGxheUFubm90cyhjb25zdCBDUERGX1BhZ2UqIHBQYWdlLCBDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX1JlbmRlckNvbnRleHQqIHBDb250ZXh0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiUHJpbnRpbmcsIENGWF9BZmZpbmVNYXRyaXgqIHBVc2VyMkRldmljZSwgRlhfRFdPUkQgZHdBbm5vdEZsYWdzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucywgRlhfUkVDVCogcENsaXBSZWN0KQ0KLXsNCi0gICAgaWYgKGR3QW5ub3RGbGFncyAmIDB4MDEpIHsNCi0gICAgICAgIERpc3BsYXlQYXNzKHBQYWdlLCBwRGV2aWNlLCBwQ29udGV4dCwgYlByaW50aW5nLCBwVXNlcjJEZXZpY2UsIEZBTFNFLCBwT3B0aW9ucywgcENsaXBSZWN0KTsNCi0gICAgfQ0KLSAgICBpZiAoZHdBbm5vdEZsYWdzICYgMHgwMikgew0KLSAgICAgICAgRGlzcGxheVBhc3MocFBhZ2UsIHBEZXZpY2UsIHBDb250ZXh0LCBiUHJpbnRpbmcsIHBVc2VyMkRldmljZSwgVFJVRSwgcE9wdGlvbnMsIHBDbGlwUmVjdCk7DQotICAgIH0NCi19DQotaW50IENQREZfQW5ub3RMaXN0OjpHZXRJbmRleChDUERGX0Fubm90KiBwQW5ub3QpDQotew0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fQW5ub3RMaXN0LkdldFNpemUoKTsgaSArKykNCi0gICAgICAgIGlmIChtX0Fubm90TGlzdFtpXSA9PSAoRlhfTFBWT0lEKXBBbm5vdCkgew0KLSAgICAgICAgICAgIHJldHVybiBpOw0KLSAgICAgICAgfQ0KLSAgICByZXR1cm4gLTE7DQotfQ0KLUNQREZfQW5ub3Q6OkNQREZfQW5ub3QoQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCkNCi17DQotICAgIG1fcExpc3QgPSBOVUxMOw0KLSAgICBtX3BBbm5vdERpY3QgPSBwRGljdDsNCi19DQotQ1BERl9Bbm5vdDo6fkNQREZfQW5ub3QoKQ0KLXsNCi0gICAgQ2xlYXJDYWNoZWRBUCgpOw0KLX0NCi1DUERGX1JlZmVyZW5jZSogQ1BERl9Bbm5vdDo6TmV3QW5ub3RSZWYoKQ0KLXsNCi0gICAgaWYgKG1fcEFubm90RGljdC0+R2V0T2JqTnVtKCkgPT0gMCkgew0KLSAgICAgICAgbV9wTGlzdC0+bV9wRG9jdW1lbnQtPkFkZEluZGlyZWN0T2JqZWN0KG1fcEFubm90RGljdCk7DQotICAgIH0NCi0gICAgcmV0dXJuIENQREZfUmVmZXJlbmNlOjpDcmVhdGUobV9wTGlzdC0+bV9wRG9jdW1lbnQsIG1fcEFubm90RGljdC0+R2V0T2JqTnVtKCkpOw0KLX0NCi12b2lkIENQREZfQW5ub3Q6OkNsZWFyQ2FjaGVkQVAoKQ0KLXsNCi0gICAgRlhfUE9TSVRJT04gcG9zID0gbV9BUE1hcC5HZXRTdGFydFBvc2l0aW9uKCk7DQotICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgIHZvaWQqIHBGb3JtOw0KLSAgICAgICAgdm9pZCogcE9iamVjdHM7DQotICAgICAgICBtX0FQTWFwLkdldE5leHRBc3NvYyhwb3MsIHBGb3JtLCBwT2JqZWN0cyk7DQotICAgICAgICBkZWxldGUgKENQREZfUGFnZU9iamVjdHMqKXBPYmplY3RzOw0KLSAgICB9DQotICAgIG1fQVBNYXAuUmVtb3ZlQWxsKCk7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENQREZfQW5ub3Q6OkdldFN1YlR5cGUoKSBjb25zdA0KLXsNCi0gICAgcmV0dXJuIG1fcEFubm90RGljdC0+R2V0Q29uc3RTdHJpbmcoRlhfQlNUUkMoIlN1YnR5cGUiKSk7DQotfQ0KLXZvaWQgQ1BERl9Bbm5vdDo6R2V0UmVjdChDUERGX1JlY3QmIHJlY3QpIGNvbnN0DQotew0KLSAgICBpZiAobV9wQW5ub3REaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICByZWN0ID0gbV9wQW5ub3REaWN0LT5HZXRSZWN0KCJSZWN0Iik7DQotICAgIHJlY3QuTm9ybWFsaXplKCk7DQotfQ0KLUNQREZfU3RyZWFtKiBGUERGRE9DX0dldEFubm90QVAoQ1BERl9EaWN0aW9uYXJ5KiBwQW5ub3REaWN0LCBDUERGX0Fubm90OjpBcHBlYXJhbmNlTW9kZSBtb2RlKQ0KLXsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwQVAgPSBwQW5ub3REaWN0LT5HZXREaWN0KCJBUCIpOw0KLSAgICBpZiAocEFQID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGNvbnN0IEZYX0NIQVIqIGFwX2VudHJ5ID0gIk4iOw0KLSAgICBpZiAobW9kZSA9PSBDUERGX0Fubm90OjpEb3duKSB7DQotICAgICAgICBhcF9lbnRyeSA9ICJEIjsNCi0gICAgfSBlbHNlIGlmIChtb2RlID09IENQREZfQW5ub3Q6OlJvbGxvdmVyKSB7DQotICAgICAgICBhcF9lbnRyeSA9ICJSIjsNCi0gICAgfQ0KLSAgICBpZiAoIXBBUC0+S2V5RXhpc3QoYXBfZW50cnkpKSB7DQotICAgICAgICBhcF9lbnRyeSA9ICJOIjsNCi0gICAgfQ0KLSAgICBDUERGX09iamVjdCogcHN1YiA9IHBBUC0+R2V0RWxlbWVudFZhbHVlKGFwX2VudHJ5KTsNCi0gICAgaWYgKHBzdWIgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9TdHJlYW0qIHBTdHJlYW0gPSBOVUxMOw0KLSAgICBpZiAocHN1Yi0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJFQU0pIHsNCi0gICAgICAgIHBTdHJlYW0gPSAoQ1BERl9TdHJlYW0qKXBzdWI7DQotICAgIH0gZWxzZSBpZiAocHN1Yi0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKSB7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyBhcyA9IHBBbm5vdERpY3QtPkdldFN0cmluZygiQVMiKTsNCi0gICAgICAgIGlmIChhcy5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyB2YWx1ZSA9IHBBbm5vdERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiViIpKTsNCi0gICAgICAgICAgICBpZiAodmFsdWUuSXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgICAgIHZhbHVlID0gcEFubm90RGljdC0+R2V0RGljdChGWF9CU1RSQygiUGFyZW50IikpLT5HZXRTdHJpbmcoRlhfQlNUUkMoIlYiKSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmICh2YWx1ZS5Jc0VtcHR5KCkgfHwgISgoQ1BERl9EaWN0aW9uYXJ5Kilwc3ViKS0+S2V5RXhpc3QodmFsdWUpKSB7DQotICAgICAgICAgICAgICAgIGFzID0gRlhfQlNUUkMoIk9mZiIpOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGFzID0gdmFsdWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcFN0cmVhbSA9ICgoQ1BERl9EaWN0aW9uYXJ5Kilwc3ViKS0+R2V0U3RyZWFtKGFzKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gcFN0cmVhbTsNCi19DQotQ1BERl9Gb3JtKiBDUERGX0Fubm90OjpHZXRBUEZvcm0oY29uc3QgQ1BERl9QYWdlKiBwUGFnZSwgQXBwZWFyYW5jZU1vZGUgbW9kZSkNCi17DQotICAgIENQREZfU3RyZWFtKiBwU3RyZWFtID0gRlBERkRPQ19HZXRBbm5vdEFQKG1fcEFubm90RGljdCwgbW9kZSk7DQotICAgIGlmIChwU3RyZWFtID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfRm9ybSogcEZvcm07DQotICAgIGlmIChtX0FQTWFwLkxvb2t1cChwU3RyZWFtLCAodm9pZComKXBGb3JtKSkgew0KLSAgICAgICAgcmV0dXJuIHBGb3JtOw0KLSAgICB9DQotICAgIHBGb3JtID0gRlhfTkVXIENQREZfRm9ybShtX3BMaXN0LT5tX3BEb2N1bWVudCwgcFBhZ2UtPm1fcFJlc291cmNlcywgcFN0cmVhbSk7DQotICAgIGlmIChwRm9ybSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBwRm9ybS0+UGFyc2VDb250ZW50KE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOw0KLSAgICBtX0FQTWFwLlNldEF0KHBTdHJlYW0sIHBGb3JtKTsNCi0gICAgcmV0dXJuIHBGb3JtOw0KLX0NCi1zdGF0aWMgQ1BERl9Gb3JtKiBGUERGRE9DX0Fubm90X0dldE1hdHJpeChjb25zdCBDUERGX1BhZ2UqIHBQYWdlLCBDUERGX0Fubm90KiBwQW5ub3QsIENQREZfQW5ub3Q6OkFwcGVhcmFuY2VNb2RlIG1vZGUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBVc2VyMkRldmljZSwgQ0ZYX01hdHJpeCAmbWF0cml4KQ0KLXsNCi0gICAgQ1BERl9Gb3JtKiBwRm9ybSA9IHBBbm5vdC0+R2V0QVBGb3JtKHBQYWdlLCBtb2RlKTsNCi0gICAgaWYgKCFwRm9ybSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ0ZYX0Zsb2F0UmVjdCBmb3JtX2Jib3ggPSBwRm9ybS0+bV9wRm9ybURpY3QtPkdldFJlY3QoRlhfQlNUUkMoIkJCb3giKSk7DQotICAgIENGWF9NYXRyaXggZm9ybV9tYXRyaXggPSBwRm9ybS0+bV9wRm9ybURpY3QtPkdldE1hdHJpeChGWF9CU1RSQygiTWF0cml4IikpOw0KLSAgICBmb3JtX21hdHJpeC5UcmFuc2Zvcm1SZWN0KGZvcm1fYmJveCk7DQotICAgIENQREZfUmVjdCBhcmVjdDsNCi0gICAgcEFubm90LT5HZXRSZWN0KGFyZWN0KTsNCi0gICAgbWF0cml4Lk1hdGNoUmVjdChhcmVjdCwgZm9ybV9iYm94KTsNCi0gICAgbWF0cml4LkNvbmNhdCgqcFVzZXIyRGV2aWNlKTsNCi0gICAgcmV0dXJuIHBGb3JtOw0KLX0NCi1GWF9CT09MIENQREZfQW5ub3Q6OkRyYXdBcHBlYXJhbmNlKGNvbnN0IENQREZfUGFnZSogcFBhZ2UsIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBVc2VyMkRldmljZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGVhcmFuY2VNb2RlIG1vZGUsIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMpDQotew0KLSAgICBDRlhfTWF0cml4IG1hdHJpeDsNCi0gICAgQ1BERl9Gb3JtKiBwRm9ybSA9IEZQREZET0NfQW5ub3RfR2V0TWF0cml4KHBQYWdlLCB0aGlzLCBtb2RlLCBwVXNlcjJEZXZpY2UsIG1hdHJpeCk7DQotICAgIGlmICghcEZvcm0pIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDUERGX1JlbmRlckNvbnRleHQgY29udGV4dDsNCi0gICAgY29udGV4dC5DcmVhdGUoKENQREZfUGFnZSopcFBhZ2UpOw0KLSAgICBjb250ZXh0LkRyYXdPYmplY3RMaXN0KHBEZXZpY2UsIHBGb3JtLCAmbWF0cml4LCBwT3B0aW9ucyk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENQREZfQW5ub3Q6OkRyYXdJbkNvbnRleHQoY29uc3QgQ1BERl9QYWdlKiBwUGFnZSwgY29uc3QgQ1BERl9SZW5kZXJDb250ZXh0KiBwQ29udGV4dCwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcFVzZXIyRGV2aWNlLCBBcHBlYXJhbmNlTW9kZSBtb2RlKQ0KLXsNCi0gICAgQ0ZYX01hdHJpeCBtYXRyaXg7DQotICAgIENQREZfRm9ybSogcEZvcm0gPSBGUERGRE9DX0Fubm90X0dldE1hdHJpeChwUGFnZSwgdGhpcywgbW9kZSwgcFVzZXIyRGV2aWNlLCBtYXRyaXgpOw0KLSAgICBpZiAoIXBGb3JtKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgKChDUERGX1JlbmRlckNvbnRleHQqKXBDb250ZXh0KS0+QXBwZW5kT2JqZWN0TGlzdChwRm9ybSwgJm1hdHJpeCk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1DUERGX1BhZ2VPYmplY3QqIENQREZfQW5ub3Q6OkdldEJvcmRlcihGWF9CT09MIGJQcmludCwgY29uc3QgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucykNCi17DQotICAgIGlmIChHZXRTdWJUeXBlKCkgPT0gIlBvcHVwIikgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgRlhfRFdPUkQgYW5ub3RfZmxhZ3MgPSBHZXRGbGFncygpOw0KLSAgICBpZiAoYW5ub3RfZmxhZ3MgJiBBTk5PVEZMQUdfSElEREVOKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBGWF9CT09MIGJQcmludGluZyA9IGJQcmludCB8fCAocE9wdGlvbnMgJiYgKHBPcHRpb25zLT5tX0ZsYWdzICYgUkVOREVSX1BSSU5UUFJFVklFVykpOw0KLSAgICBpZiAoYlByaW50aW5nICYmIChhbm5vdF9mbGFncyAmIEFOTk9URkxBR19QUklOVCkgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKCFiUHJpbnRpbmcgJiYgKGFubm90X2ZsYWdzICYgQU5OT1RGTEFHX05PVklFVykpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcEJTID0gbV9wQW5ub3REaWN0LT5HZXREaWN0KCJCUyIpOw0KLSAgICBjaGFyIHN0eWxlX2NoYXI7DQotICAgIEZYX0ZMT0FUIHdpZHRoOw0KLSAgICBDUERGX0FycmF5KiBwRGFzaEFycmF5ID0gTlVMTDsNCi0gICAgaWYgKHBCUyA9PSBOVUxMKSB7DQotICAgICAgICBDUERGX0FycmF5KiBwQm9yZGVyQXJyYXkgPSBtX3BBbm5vdERpY3QtPkdldEFycmF5KCJCb3JkZXIiKTsNCi0gICAgICAgIHN0eWxlX2NoYXIgPSAnUyc7DQotICAgICAgICBpZiAocEJvcmRlckFycmF5KSB7DQotICAgICAgICAgICAgd2lkdGggPSBwQm9yZGVyQXJyYXktPkdldE51bWJlcigyKTsNCi0gICAgICAgICAgICBpZiAocEJvcmRlckFycmF5LT5HZXRDb3VudCgpID09IDQpIHsNCi0gICAgICAgICAgICAgICAgcERhc2hBcnJheSA9IHBCb3JkZXJBcnJheS0+R2V0QXJyYXkoMyk7DQotICAgICAgICAgICAgICAgIGlmIChwRGFzaEFycmF5ID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHN0eWxlX2NoYXIgPSAnRCc7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICB3aWR0aCA9IDE7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyBzdHlsZSA9IHBCUy0+R2V0U3RyaW5nKCJTIik7DQotICAgICAgICBwRGFzaEFycmF5ID0gcEJTLT5HZXRBcnJheSgiRCIpOw0KLSAgICAgICAgc3R5bGVfY2hhciA9IHN0eWxlWzFdOw0KLSAgICAgICAgd2lkdGggPSBwQlMtPkdldE51bWJlcigiVyIpOw0KLSAgICB9DQotICAgIGlmICh3aWR0aCA8PSAwKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDUERGX0FycmF5KiBwQ29sb3IgPSBtX3BBbm5vdERpY3QtPkdldEFycmF5KCJDIik7DQotICAgIEZYX0RXT1JEIGFyZ2IgPSAweGZmMDAwMDAwOw0KLSAgICBpZiAocENvbG9yICE9IE5VTEwpIHsNCi0gICAgICAgIGludCBSID0gKEZYX0lOVDMyKShwQ29sb3ItPkdldE51bWJlcigwKSAqIDI1NSk7DQotICAgICAgICBpbnQgRyA9IChGWF9JTlQzMikocENvbG9yLT5HZXROdW1iZXIoMSkgKiAyNTUpOw0KLSAgICAgICAgaW50IEIgPSAoRlhfSU5UMzIpKHBDb2xvci0+R2V0TnVtYmVyKDIpICogMjU1KTsNCi0gICAgICAgIGFyZ2IgPSBBcmdiRW5jb2RlKDB4ZmYsIFIsIEcsIEIpOw0KLSAgICB9DQotICAgIENQREZfUGF0aE9iamVjdCAqcFBhdGhPYmplY3QgPSBGWF9ORVcgQ1BERl9QYXRoT2JqZWN0KCk7DQotICAgIGlmICghcFBhdGhPYmplY3QpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfR3JhcGhTdGF0ZURhdGEgKnBHcmFwaFN0YXRlID0gcFBhdGhPYmplY3QtPm1fR3JhcGhTdGF0ZS5HZXRNb2RpZnkoKTsNCi0gICAgaWYgKCFwR3JhcGhTdGF0ZSkgew0KLSAgICAgICAgcFBhdGhPYmplY3QtPlJlbGVhc2UoKTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHBHcmFwaFN0YXRlLT5tX0xpbmVXaWR0aCA9IHdpZHRoOw0KLSAgICBDUERGX0NvbG9yU3RhdGVEYXRhICpwQ29sb3JEYXRhID0gcFBhdGhPYmplY3QtPm1fQ29sb3JTdGF0ZS5HZXRNb2RpZnkoKTsNCi0gICAgaWYgKCFwQ29sb3JEYXRhKSB7DQotICAgICAgICBwUGF0aE9iamVjdC0+UmVsZWFzZSgpOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcENvbG9yRGF0YS0+bV9TdHJva2VSR0IgPSBhcmdiOw0KLSAgICBwUGF0aE9iamVjdC0+bV9iU3Ryb2tlID0gVFJVRTsNCi0gICAgcFBhdGhPYmplY3QtPm1fRmlsbFR5cGUgPSAwOw0KLSAgICBpZiAoc3R5bGVfY2hhciA9PSAnRCcpIHsNCi0gICAgICAgIGlmIChwRGFzaEFycmF5KSB7DQotICAgICAgICAgICAgRlhfRFdPUkQgZGFzaF9jb3VudCA9IHBEYXNoQXJyYXktPkdldENvdW50KCk7DQotICAgICAgICAgICAgaWYgKGRhc2hfY291bnQgJSAyKSB7DQotICAgICAgICAgICAgICAgIGRhc2hfY291bnQgKys7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHBHcmFwaFN0YXRlLT5tX0Rhc2hBcnJheSA9IEZYX0FsbG9jKEZYX0ZMT0FULCBkYXNoX2NvdW50KTsNCi0gICAgICAgICAgICBpZiAocEdyYXBoU3RhdGUtPm1fRGFzaEFycmF5ID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgcFBhdGhPYmplY3QtPlJlbGVhc2UoKTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHBHcmFwaFN0YXRlLT5tX0Rhc2hDb3VudCA9IGRhc2hfY291bnQ7DQotICAgICAgICAgICAgRlhfRFdPUkQgaTsNCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcERhc2hBcnJheS0+R2V0Q291bnQoKTsgaSArKykgew0KLSAgICAgICAgICAgICAgICBwR3JhcGhTdGF0ZS0+bV9EYXNoQXJyYXlbaV0gPSBwRGFzaEFycmF5LT5HZXROdW1iZXIoaSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChpIDwgZGFzaF9jb3VudCkgew0KLSAgICAgICAgICAgICAgICBwR3JhcGhTdGF0ZS0+bV9EYXNoQXJyYXlbaV0gPSBwR3JhcGhTdGF0ZS0+bV9EYXNoQXJyYXlbaSAtIDFdOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcEdyYXBoU3RhdGUtPm1fRGFzaEFycmF5ID0gRlhfQWxsb2MoRlhfRkxPQVQsIDIpOw0KLSAgICAgICAgICAgIGlmIChwR3JhcGhTdGF0ZS0+bV9EYXNoQXJyYXkgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICBwUGF0aE9iamVjdC0+UmVsZWFzZSgpOw0KLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcEdyYXBoU3RhdGUtPm1fRGFzaENvdW50ID0gMjsNCi0gICAgICAgICAgICBwR3JhcGhTdGF0ZS0+bV9EYXNoQXJyYXlbMF0gPSBwR3JhcGhTdGF0ZS0+bV9EYXNoQXJyYXlbMV0gPSAzICogMS4wZjsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDRlhfRmxvYXRSZWN0IHJlY3Q7DQotICAgIEdldFJlY3QocmVjdCk7DQotICAgIHdpZHRoIC89IDI7DQotICAgIENQREZfUGF0aERhdGEgKnBQYXRoRGF0YSA9IHBQYXRoT2JqZWN0LT5tX1BhdGguR2V0TW9kaWZ5KCk7DQotICAgIGlmIChwUGF0aERhdGEpIHsNCi0gICAgICAgIHBQYXRoRGF0YS0+QXBwZW5kUmVjdChyZWN0LmxlZnQgKyB3aWR0aCwgcmVjdC5ib3R0b20gKyB3aWR0aCwgcmVjdC5yaWdodCAtIHdpZHRoLCByZWN0LnRvcCAtIHdpZHRoKTsNCi0gICAgfQ0KLSAgICBwUGF0aE9iamVjdC0+Q2FsY0JvdW5kaW5nQm94KCk7DQotICAgIHJldHVybiBwUGF0aE9iamVjdDsNCi19DQotdm9pZCBDUERGX0Fubm90OjpEcmF3Qm9yZGVyKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBVc2VyMkRldmljZSwgY29uc3QgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucykNCi17DQotICAgIGlmIChHZXRTdWJUeXBlKCkgPT0gIlBvcHVwIikgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX0RXT1JEIGFubm90X2ZsYWdzID0gR2V0RmxhZ3MoKTsNCi0gICAgaWYgKGFubm90X2ZsYWdzICYgQU5OT1RGTEFHX0hJRERFTikgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX0JPT0wgYlByaW50aW5nID0gcERldmljZS0+R2V0RGV2aWNlQ2xhc3MoKSA9PSBGWERDX1BSSU5URVIgfHwgKHBPcHRpb25zICYmIChwT3B0aW9ucy0+bV9GbGFncyAmIFJFTkRFUl9QUklOVFBSRVZJRVcpKTsNCi0gICAgaWYgKGJQcmludGluZyAmJiAoYW5ub3RfZmxhZ3MgJiBBTk5PVEZMQUdfUFJJTlQpID09IDApIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAoIWJQcmludGluZyAmJiAoYW5ub3RfZmxhZ3MgJiBBTk5PVEZMQUdfTk9WSUVXKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcEJTID0gbV9wQW5ub3REaWN0LT5HZXREaWN0KCJCUyIpOw0KLSAgICBjaGFyIHN0eWxlX2NoYXI7DQotICAgIEZYX0ZMT0FUIHdpZHRoOw0KLSAgICBDUERGX0FycmF5KiBwRGFzaEFycmF5ID0gTlVMTDsNCi0gICAgaWYgKHBCUyA9PSBOVUxMKSB7DQotICAgICAgICBDUERGX0FycmF5KiBwQm9yZGVyQXJyYXkgPSBtX3BBbm5vdERpY3QtPkdldEFycmF5KCJCb3JkZXIiKTsNCi0gICAgICAgIHN0eWxlX2NoYXIgPSAnUyc7DQotICAgICAgICBpZiAocEJvcmRlckFycmF5KSB7DQotICAgICAgICAgICAgd2lkdGggPSBwQm9yZGVyQXJyYXktPkdldE51bWJlcigyKTsNCi0gICAgICAgICAgICBpZiAocEJvcmRlckFycmF5LT5HZXRDb3VudCgpID09IDQpIHsNCi0gICAgICAgICAgICAgICAgcERhc2hBcnJheSA9IHBCb3JkZXJBcnJheS0+R2V0QXJyYXkoMyk7DQotICAgICAgICAgICAgICAgIGlmIChwRGFzaEFycmF5ID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpbnQgbkxlbiA9IHBEYXNoQXJyYXktPkdldENvdW50KCk7DQotICAgICAgICAgICAgICAgIGludCBpID0gMDsNCi0gICAgICAgICAgICAgICAgZm9yICg7IGkgPCBuTGVuOyArK2kpIHsNCi0gICAgICAgICAgICAgICAgICAgIENQREZfT2JqZWN0KnBPYmogPSBwRGFzaEFycmF5LT5HZXRFbGVtZW50VmFsdWUoaSk7DQotICAgICAgICAgICAgICAgICAgICBpZiAocE9iaiAmJiBwT2JqLT5HZXRJbnRlZ2VyKCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoaSA9PSBuTGVuKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgc3R5bGVfY2hhciA9ICdEJzsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHdpZHRoID0gMTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIHN0eWxlID0gcEJTLT5HZXRTdHJpbmcoIlMiKTsNCi0gICAgICAgIHBEYXNoQXJyYXkgPSBwQlMtPkdldEFycmF5KCJEIik7DQotICAgICAgICBzdHlsZV9jaGFyID0gc3R5bGVbMV07DQotICAgICAgICB3aWR0aCA9IHBCUy0+R2V0TnVtYmVyKCJXIik7DQotICAgIH0NCi0gICAgaWYgKHdpZHRoIDw9IDApIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDUERGX0FycmF5KiBwQ29sb3IgPSBtX3BBbm5vdERpY3QtPkdldEFycmF5KCJDIik7DQotICAgIEZYX0RXT1JEIGFyZ2IgPSAweGZmMDAwMDAwOw0KLSAgICBpZiAocENvbG9yICE9IE5VTEwpIHsNCi0gICAgICAgIGludCBSID0gKEZYX0lOVDMyKShwQ29sb3ItPkdldE51bWJlcigwKSAqIDI1NSk7DQotICAgICAgICBpbnQgRyA9IChGWF9JTlQzMikocENvbG9yLT5HZXROdW1iZXIoMSkgKiAyNTUpOw0KLSAgICAgICAgaW50IEIgPSAoRlhfSU5UMzIpKHBDb2xvci0+R2V0TnVtYmVyKDIpICogMjU1KTsNCi0gICAgICAgIGFyZ2IgPSBBcmdiRW5jb2RlKDB4ZmYsIFIsIEcsIEIpOw0KLSAgICB9DQotICAgIENQREZfR3JhcGhTdGF0ZURhdGEgZ3JhcGhfc3RhdGU7DQotICAgIGdyYXBoX3N0YXRlLm1fTGluZVdpZHRoID0gd2lkdGg7DQotICAgIGlmIChzdHlsZV9jaGFyID09ICdEJykgew0KLSAgICAgICAgaWYgKHBEYXNoQXJyYXkpIHsNCi0gICAgICAgICAgICBGWF9EV09SRCBkYXNoX2NvdW50ID0gcERhc2hBcnJheS0+R2V0Q291bnQoKTsNCi0gICAgICAgICAgICBpZiAoZGFzaF9jb3VudCAlIDIpIHsNCi0gICAgICAgICAgICAgICAgZGFzaF9jb3VudCArKzsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZ3JhcGhfc3RhdGUubV9EYXNoQXJyYXkgPSBGWF9BbGxvYyhGWF9GTE9BVCwgZGFzaF9jb3VudCk7DQotICAgICAgICAgICAgaWYgKGdyYXBoX3N0YXRlLm1fRGFzaEFycmF5ID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZ3JhcGhfc3RhdGUubV9EYXNoQ291bnQgPSBkYXNoX2NvdW50Ow0KLSAgICAgICAgICAgIEZYX0RXT1JEIGk7DQotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBEYXNoQXJyYXktPkdldENvdW50KCk7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgZ3JhcGhfc3RhdGUubV9EYXNoQXJyYXlbaV0gPSBwRGFzaEFycmF5LT5HZXROdW1iZXIoaSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChpIDwgZGFzaF9jb3VudCkgew0KLSAgICAgICAgICAgICAgICBncmFwaF9zdGF0ZS5tX0Rhc2hBcnJheVtpXSA9IGdyYXBoX3N0YXRlLm1fRGFzaEFycmF5W2kgLSAxXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGdyYXBoX3N0YXRlLm1fRGFzaEFycmF5ID0gRlhfQWxsb2MoRlhfRkxPQVQsIDIpOw0KLSAgICAgICAgICAgIGlmIChncmFwaF9zdGF0ZS5tX0Rhc2hBcnJheSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiA7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGdyYXBoX3N0YXRlLm1fRGFzaENvdW50ID0gMjsNCi0gICAgICAgICAgICBncmFwaF9zdGF0ZS5tX0Rhc2hBcnJheVswXSA9IGdyYXBoX3N0YXRlLm1fRGFzaEFycmF5WzFdID0gMyAqIDEuMGY7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgQ0ZYX0Zsb2F0UmVjdCByZWN0Ow0KLSAgICBHZXRSZWN0KHJlY3QpOw0KLSAgICBDUERGX1BhdGhEYXRhIHBhdGg7DQotICAgIHdpZHRoIC89IDI7DQotICAgIHBhdGguQXBwZW5kUmVjdChyZWN0LmxlZnQgKyB3aWR0aCwgcmVjdC5ib3R0b20gKyB3aWR0aCwgcmVjdC5yaWdodCAtIHdpZHRoLCByZWN0LnRvcCAtIHdpZHRoKTsNCi0gICAgaW50IGZpbGxfdHlwZSA9IDA7DQotICAgIGlmIChwT3B0aW9ucyAmJiAocE9wdGlvbnMtPm1fRmxhZ3MgJiBSRU5ERVJfTk9QQVRIU01PT1RIKSkgew0KLSAgICAgICAgZmlsbF90eXBlIHw9IEZYRklMTF9OT1BBVEhTTU9PVEg7DQotICAgIH0NCi0gICAgcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgJmdyYXBoX3N0YXRlLCBhcmdiLCBhcmdiLCBmaWxsX3R5cGUpOw0KLX0NCi1pbnQgQ1BERl9Bbm5vdDo6Q291bnRJUlROb3RlcygpDQotew0KLSAgICBpbnQgY291bnQgPSAwOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fcExpc3QtPkNvdW50KCk7IGkgKyspIHsNCi0gICAgICAgIENQREZfQW5ub3QqIHBBbm5vdCA9IG1fcExpc3QtPkdldEF0KGkpOw0KLSAgICAgICAgaWYgKHBBbm5vdCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBJUlQgPSBwQW5ub3QtPm1fcEFubm90RGljdC0+R2V0RGljdCgiSVJUIik7DQotICAgICAgICBpZiAocElSVCAhPSBtX3BBbm5vdERpY3QpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGNvdW50ICsrOw0KLSAgICB9DQotICAgIHJldHVybiBjb3VudDsNCi19DQotQ1BERl9Bbm5vdCogQ1BERl9Bbm5vdDo6R2V0SVJUTm90ZShpbnQgaW5kZXgpDQotew0KLSAgICBpbnQgY291bnQgPSAwOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fcExpc3QtPkNvdW50KCk7IGkgKyspIHsNCi0gICAgICAgIENQREZfQW5ub3QqIHBBbm5vdCA9IG1fcExpc3QtPkdldEF0KGkpOw0KLSAgICAgICAgaWYgKHBBbm5vdCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBJUlQgPSBwQW5ub3QtPm1fcEFubm90RGljdC0+R2V0RGljdCgiSVJUIik7DQotICAgICAgICBpZiAocElSVCAhPSBtX3BBbm5vdERpY3QpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChjb3VudCA9PSBpbmRleCkgew0KLSAgICAgICAgICAgIHJldHVybiBwQW5ub3Q7DQotICAgICAgICB9DQotICAgICAgICBjb3VudCArKzsNCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmRvYy9mcGRmX2RvYy5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2VvYmouaCIKK0NQREZfQW5ub3RMaXN0OjpDUERGX0Fubm90TGlzdChDUERGX1BhZ2UqIHBQYWdlKQoreworICAgIEFTU0VSVChwUGFnZSAhPSBOVUxMKTsKKyAgICBtX3BQYWdlRGljdCA9IHBQYWdlLT5tX3BGb3JtRGljdDsKKyAgICBpZiAobV9wUGFnZURpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcERvY3VtZW50ID0gcFBhZ2UtPm1fcERvY3VtZW50OworICAgIENQREZfQXJyYXkqIHBBbm5vdHMgPSBtX3BQYWdlRGljdC0+R2V0QXJyYXkoIkFubm90cyIpOworICAgIGlmIChwQW5ub3RzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBSb290ID0gbV9wRG9jdW1lbnQtPkdldFJvb3QoKTsKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBBY3JvRm9ybSA9IHBSb290LT5HZXREaWN0KCJBY3JvRm9ybSIpOworICAgIEZYX0JPT0wgYlJlZ2VuZXJhdGVBUCA9IHBBY3JvRm9ybSAmJiBwQWNyb0Zvcm0tPkdldEJvb2xlYW4oIk5lZWRBcHBlYXJhbmNlcyIpOworICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwQW5ub3RzLT5HZXRDb3VudCgpOyBpICsrKSB7CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KilwQW5ub3RzLT5HZXRFbGVtZW50VmFsdWUoaSk7CisgICAgICAgIGlmIChwRGljdCA9PSBOVUxMIHx8IHBEaWN0LT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEZYX0RXT1JEIGR3T2JqTnVtID0gcERpY3QtPkdldE9iak51bSgpOworICAgICAgICBpZiAoZHdPYmpOdW0gPT0gMCkgeworICAgICAgICAgICAgZHdPYmpOdW0gPSBtX3BEb2N1bWVudC0+QWRkSW5kaXJlY3RPYmplY3QocERpY3QpOworICAgICAgICAgICAgQ1BERl9SZWZlcmVuY2UqIHBBY3Rpb24gPSBDUERGX1JlZmVyZW5jZTo6Q3JlYXRlKG1fcERvY3VtZW50LCBkd09iak51bSk7CisgICAgICAgICAgICBpZiAocEFjdGlvbiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwQW5ub3RzLT5JbnNlcnRBdChpLCBwQWN0aW9uKTsKKyAgICAgICAgICAgIHBBbm5vdHMtPlJlbW92ZUF0KGkgKyAxKTsKKyAgICAgICAgICAgIHBEaWN0ID0gcEFubm90cy0+R2V0RGljdChpKTsKKyAgICAgICAgfQorICAgICAgICBDUERGX0Fubm90KiBwQW5ub3QgPSBGWF9ORVcgQ1BERl9Bbm5vdChwRGljdCk7CisgICAgICAgIGlmIChwQW5ub3QgPT0gTlVMTCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcEFubm90LT5tX3BMaXN0ID0gdGhpczsKKyAgICAgICAgbV9Bbm5vdExpc3QuQWRkKHBBbm5vdCk7CisgICAgICAgIGlmIChiUmVnZW5lcmF0ZUFQICYmIHBEaWN0LT5HZXRDb25zdFN0cmluZyhGWF9CU1RSQygiU3VidHlwZSIpKSA9PSBGWF9CU1RSQygiV2lkZ2V0IikpCisgICAgICAgICAgICBpZiAoQ1BERl9JbnRlckZvcm06OlVwZGF0aW5nQVBFbmFibGVkKCkpIHsKKyAgICAgICAgICAgICAgICBGUERGX0dlbmVyYXRlQVAobV9wRG9jdW1lbnQsIHBEaWN0KTsKKyAgICAgICAgICAgIH0KKyAgICB9Cit9CitDUERGX0Fubm90TGlzdDo6fkNQREZfQW5ub3RMaXN0KCkKK3sKKyAgICBpbnQgaSA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IG1fQW5ub3RMaXN0LkdldFNpemUoKTsgaSArKykgeworICAgICAgICBkZWxldGUgKENQREZfQW5ub3QqKW1fQW5ub3RMaXN0W2ldOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgbV9Cb3JkZXJzLkdldFNpemUoKTsgKytpKSB7CisgICAgICAgIGRlbGV0ZSAoQ1BERl9QYWdlT2JqZWN0cyopbV9Cb3JkZXJzW2ldOworICAgIH0KK30KK3ZvaWQgQ1BERl9Bbm5vdExpc3Q6OkRpc3BsYXlQYXNzKGNvbnN0IENQREZfUGFnZSogcFBhZ2UsIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX1JlbmRlckNvbnRleHQqIHBDb250ZXh0LCBGWF9CT09MIGJQcmludGluZywgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYldpZGdldFBhc3MsIENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMsIEZYX1JFQ1QqIGNsaXBfcmVjdCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fQW5ub3RMaXN0LkdldFNpemUoKTsgaSArKykgeworICAgICAgICBDUERGX0Fubm90KiBwQW5ub3QgPSAoQ1BERl9Bbm5vdCopbV9Bbm5vdExpc3RbaV07CisgICAgICAgIEZYX0JPT0wgYldpZGdldCA9IHBBbm5vdC0+R2V0U3ViVHlwZSgpID09ICJXaWRnZXQiOworICAgICAgICBpZiAoKGJXaWRnZXRQYXNzICYmICFiV2lkZ2V0KSB8fCAoIWJXaWRnZXRQYXNzICYmIGJXaWRnZXQpKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBGWF9EV09SRCBhbm5vdF9mbGFncyA9IHBBbm5vdC0+R2V0RmxhZ3MoKTsKKyAgICAgICAgaWYgKGFubm90X2ZsYWdzICYgQU5OT1RGTEFHX0hJRERFTikgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJQcmludGluZyAmJiAoYW5ub3RfZmxhZ3MgJiBBTk5PVEZMQUdfUFJJTlQpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmICghYlByaW50aW5nICYmIChhbm5vdF9mbGFncyAmIEFOTk9URkxBR19OT1ZJRVcpKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocE9wdGlvbnMgIT0gTlVMTCkgeworICAgICAgICAgICAgSVBERl9PQ0NvbnRleHQqIHBPQ0NvbnRleHQgPSBwT3B0aW9ucy0+bV9wT0NDb250ZXh0OworICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwQW5ub3REaWN0ID0gcEFubm90LT5tX3BBbm5vdERpY3Q7CisgICAgICAgICAgICBpZiAocE9DQ29udGV4dCAhPSBOVUxMICYmIHBBbm5vdERpY3QgIT0gTlVMTCAmJgorICAgICAgICAgICAgICAgICAgICAhcE9DQ29udGV4dC0+Q2hlY2tPQ0dWaXNpYmxlKHBBbm5vdERpY3QtPkdldERpY3QoRlhfQlNUUkMoIk9DIikpKSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIENQREZfUmVjdCBhbm5vdF9yZWN0X2Y7CisgICAgICAgIHBBbm5vdC0+R2V0UmVjdChhbm5vdF9yZWN0X2YpOworICAgICAgICBDRlhfTWF0cml4IG1hdHJpeDsKKyAgICAgICAgbWF0cml4ID0gKnBNYXRyaXg7CisgICAgICAgIGlmIChjbGlwX3JlY3QpIHsKKyAgICAgICAgICAgIGFubm90X3JlY3RfZi5UcmFuc2Zvcm0oJm1hdHJpeCk7CisgICAgICAgICAgICBGWF9SRUNUIGFubm90X3JlY3QgPSBhbm5vdF9yZWN0X2YuR2V0T3V0dGVyUmVjdCgpOworICAgICAgICAgICAgYW5ub3RfcmVjdC5JbnRlcnNlY3QoKmNsaXBfcmVjdCk7CisgICAgICAgICAgICBpZiAoYW5ub3RfcmVjdC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocENvbnRleHQpIHsKKyAgICAgICAgICAgIHBBbm5vdC0+RHJhd0luQ29udGV4dChwUGFnZSwgcENvbnRleHQsICZtYXRyaXgsIENQREZfQW5ub3Q6Ok5vcm1hbCk7CisgICAgICAgIH0gZWxzZSBpZiAoIXBBbm5vdC0+RHJhd0FwcGVhcmFuY2UocFBhZ2UsIHBEZXZpY2UsICZtYXRyaXgsIENQREZfQW5ub3Q6Ok5vcm1hbCwgcE9wdGlvbnMpKSB7CisgICAgICAgICAgICBwQW5ub3QtPkRyYXdCb3JkZXIocERldmljZSwgJm1hdHJpeCwgcE9wdGlvbnMpOworICAgICAgICB9CisgICAgfQorfQordm9pZCBDUERGX0Fubm90TGlzdDo6RGlzcGxheUFubm90cyhjb25zdCBDUERGX1BhZ2UqIHBQYWdlLCBDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlhfQWZmaW5lTWF0cml4KiBwVXNlcjJEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYlNob3dXaWRnZXQsIENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMpCit7CisgICAgRlhfUkVDVCBjbGlwX3JlY3Q7CisgICAgaWYgKHBEZXZpY2UpIHsKKyAgICAgICAgY2xpcF9yZWN0ID0gcERldmljZS0+R2V0Q2xpcEJveCgpOworICAgIH0KKyAgICBGWF9CT09MIGJQcmludGluZyA9IHBEZXZpY2UtPkdldERldmljZUNsYXNzKCkgPT0gRlhEQ19QUklOVEVSIHx8IChwT3B0aW9ucyAmJiAocE9wdGlvbnMtPm1fRmxhZ3MgJiBSRU5ERVJfUFJJTlRQUkVWSUVXKSk7CisgICAgRGlzcGxheUFubm90cyhwUGFnZSwgcERldmljZSwgTlVMTCwgYlByaW50aW5nLCBwVXNlcjJEZXZpY2UsIGJTaG93V2lkZ2V0ID8gMyA6IDEsIHBPcHRpb25zLCAmY2xpcF9yZWN0KTsKK30KK3ZvaWQgQ1BERl9Bbm5vdExpc3Q6OkRpc3BsYXlBbm5vdHMoY29uc3QgQ1BERl9QYWdlKiBwUGFnZSwgQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9SZW5kZXJDb250ZXh0KiBwQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiUHJpbnRpbmcsIENGWF9BZmZpbmVNYXRyaXgqIHBVc2VyMkRldmljZSwgRlhfRFdPUkQgZHdBbm5vdEZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zLCBGWF9SRUNUKiBwQ2xpcFJlY3QpCit7CisgICAgaWYgKGR3QW5ub3RGbGFncyAmIDB4MDEpIHsKKyAgICAgICAgRGlzcGxheVBhc3MocFBhZ2UsIHBEZXZpY2UsIHBDb250ZXh0LCBiUHJpbnRpbmcsIHBVc2VyMkRldmljZSwgRkFMU0UsIHBPcHRpb25zLCBwQ2xpcFJlY3QpOworICAgIH0KKyAgICBpZiAoZHdBbm5vdEZsYWdzICYgMHgwMikgeworICAgICAgICBEaXNwbGF5UGFzcyhwUGFnZSwgcERldmljZSwgcENvbnRleHQsIGJQcmludGluZywgcFVzZXIyRGV2aWNlLCBUUlVFLCBwT3B0aW9ucywgcENsaXBSZWN0KTsKKyAgICB9Cit9CitpbnQgQ1BERl9Bbm5vdExpc3Q6OkdldEluZGV4KENQREZfQW5ub3QqIHBBbm5vdCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fQW5ub3RMaXN0LkdldFNpemUoKTsgaSArKykKKyAgICAgICAgaWYgKG1fQW5ub3RMaXN0W2ldID09IChGWF9MUFZPSUQpcEFubm90KSB7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIHJldHVybiAtMTsKK30KK0NQREZfQW5ub3Q6OkNQREZfQW5ub3QoQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCkKK3sKKyAgICBtX3BMaXN0ID0gTlVMTDsKKyAgICBtX3BBbm5vdERpY3QgPSBwRGljdDsKK30KK0NQREZfQW5ub3Q6On5DUERGX0Fubm90KCkKK3sKKyAgICBDbGVhckNhY2hlZEFQKCk7Cit9CitDUERGX1JlZmVyZW5jZSogQ1BERl9Bbm5vdDo6TmV3QW5ub3RSZWYoKQoreworICAgIGlmIChtX3BBbm5vdERpY3QtPkdldE9iak51bSgpID09IDApIHsKKyAgICAgICAgbV9wTGlzdC0+bV9wRG9jdW1lbnQtPkFkZEluZGlyZWN0T2JqZWN0KG1fcEFubm90RGljdCk7CisgICAgfQorICAgIHJldHVybiBDUERGX1JlZmVyZW5jZTo6Q3JlYXRlKG1fcExpc3QtPm1fcERvY3VtZW50LCBtX3BBbm5vdERpY3QtPkdldE9iak51bSgpKTsKK30KK3ZvaWQgQ1BERl9Bbm5vdDo6Q2xlYXJDYWNoZWRBUCgpCit7CisgICAgRlhfUE9TSVRJT04gcG9zID0gbV9BUE1hcC5HZXRTdGFydFBvc2l0aW9uKCk7CisgICAgd2hpbGUgKHBvcykgeworICAgICAgICB2b2lkKiBwRm9ybTsKKyAgICAgICAgdm9pZCogcE9iamVjdHM7CisgICAgICAgIG1fQVBNYXAuR2V0TmV4dEFzc29jKHBvcywgcEZvcm0sIHBPYmplY3RzKTsKKyAgICAgICAgZGVsZXRlIChDUERGX1BhZ2VPYmplY3RzKilwT2JqZWN0czsKKyAgICB9CisgICAgbV9BUE1hcC5SZW1vdmVBbGwoKTsKK30KK0NGWF9CeXRlU3RyaW5nIENQREZfQW5ub3Q6OkdldFN1YlR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3BBbm5vdERpY3QtPkdldENvbnN0U3RyaW5nKEZYX0JTVFJDKCJTdWJ0eXBlIikpOworfQordm9pZCBDUERGX0Fubm90OjpHZXRSZWN0KENQREZfUmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBpZiAobV9wQW5ub3REaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICByZWN0ID0gbV9wQW5ub3REaWN0LT5HZXRSZWN0KCJSZWN0Iik7CisgICAgcmVjdC5Ob3JtYWxpemUoKTsKK30KK0NQREZfU3RyZWFtKiBGUERGRE9DX0dldEFubm90QVAoQ1BERl9EaWN0aW9uYXJ5KiBwQW5ub3REaWN0LCBDUERGX0Fubm90OjpBcHBlYXJhbmNlTW9kZSBtb2RlKQoreworICAgIENQREZfRGljdGlvbmFyeSogcEFQID0gcEFubm90RGljdC0+R2V0RGljdCgiQVAiKTsKKyAgICBpZiAocEFQID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGNvbnN0IEZYX0NIQVIqIGFwX2VudHJ5ID0gIk4iOworICAgIGlmIChtb2RlID09IENQREZfQW5ub3Q6OkRvd24pIHsKKyAgICAgICAgYXBfZW50cnkgPSAiRCI7CisgICAgfSBlbHNlIGlmIChtb2RlID09IENQREZfQW5ub3Q6OlJvbGxvdmVyKSB7CisgICAgICAgIGFwX2VudHJ5ID0gIlIiOworICAgIH0KKyAgICBpZiAoIXBBUC0+S2V5RXhpc3QoYXBfZW50cnkpKSB7CisgICAgICAgIGFwX2VudHJ5ID0gIk4iOworICAgIH0KKyAgICBDUERGX09iamVjdCogcHN1YiA9IHBBUC0+R2V0RWxlbWVudFZhbHVlKGFwX2VudHJ5KTsKKyAgICBpZiAocHN1YiA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX1N0cmVhbSogcFN0cmVhbSA9IE5VTEw7CisgICAgaWYgKHBzdWItPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSRUFNKSB7CisgICAgICAgIHBTdHJlYW0gPSAoQ1BERl9TdHJlYW0qKXBzdWI7CisgICAgfSBlbHNlIGlmIChwc3ViLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgYXMgPSBwQW5ub3REaWN0LT5HZXRTdHJpbmcoIkFTIik7CisgICAgICAgIGlmIChhcy5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIHZhbHVlID0gcEFubm90RGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJWIikpOworICAgICAgICAgICAgaWYgKHZhbHVlLklzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gcEFubm90RGljdC0+R2V0RGljdChGWF9CU1RSQygiUGFyZW50IikpLT5HZXRTdHJpbmcoRlhfQlNUUkMoIlYiKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFsdWUuSXNFbXB0eSgpIHx8ICEoKENQREZfRGljdGlvbmFyeSopcHN1YiktPktleUV4aXN0KHZhbHVlKSkgeworICAgICAgICAgICAgICAgIGFzID0gRlhfQlNUUkMoIk9mZiIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBhcyA9IHZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBTdHJlYW0gPSAoKENQREZfRGljdGlvbmFyeSopcHN1YiktPkdldFN0cmVhbShhcyk7CisgICAgfQorICAgIHJldHVybiBwU3RyZWFtOworfQorQ1BERl9Gb3JtKiBDUERGX0Fubm90OjpHZXRBUEZvcm0oY29uc3QgQ1BERl9QYWdlKiBwUGFnZSwgQXBwZWFyYW5jZU1vZGUgbW9kZSkKK3sKKyAgICBDUERGX1N0cmVhbSogcFN0cmVhbSA9IEZQREZET0NfR2V0QW5ub3RBUChtX3BBbm5vdERpY3QsIG1vZGUpOworICAgIGlmIChwU3RyZWFtID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfRm9ybSogcEZvcm07CisgICAgaWYgKG1fQVBNYXAuTG9va3VwKHBTdHJlYW0sICh2b2lkKiYpcEZvcm0pKSB7CisgICAgICAgIHJldHVybiBwRm9ybTsKKyAgICB9CisgICAgcEZvcm0gPSBGWF9ORVcgQ1BERl9Gb3JtKG1fcExpc3QtPm1fcERvY3VtZW50LCBwUGFnZS0+bV9wUmVzb3VyY2VzLCBwU3RyZWFtKTsKKyAgICBpZiAocEZvcm0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcEZvcm0tPlBhcnNlQ29udGVudChOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBtX0FQTWFwLlNldEF0KHBTdHJlYW0sIHBGb3JtKTsKKyAgICByZXR1cm4gcEZvcm07Cit9CitzdGF0aWMgQ1BERl9Gb3JtKiBGUERGRE9DX0Fubm90X0dldE1hdHJpeChjb25zdCBDUERGX1BhZ2UqIHBQYWdlLCBDUERGX0Fubm90KiBwQW5ub3QsIENQREZfQW5ub3Q6OkFwcGVhcmFuY2VNb2RlIG1vZGUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBVc2VyMkRldmljZSwgQ0ZYX01hdHJpeCAmbWF0cml4KQoreworICAgIENQREZfRm9ybSogcEZvcm0gPSBwQW5ub3QtPkdldEFQRm9ybShwUGFnZSwgbW9kZSk7CisgICAgaWYgKCFwRm9ybSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0ZYX0Zsb2F0UmVjdCBmb3JtX2Jib3ggPSBwRm9ybS0+bV9wRm9ybURpY3QtPkdldFJlY3QoRlhfQlNUUkMoIkJCb3giKSk7CisgICAgQ0ZYX01hdHJpeCBmb3JtX21hdHJpeCA9IHBGb3JtLT5tX3BGb3JtRGljdC0+R2V0TWF0cml4KEZYX0JTVFJDKCJNYXRyaXgiKSk7CisgICAgZm9ybV9tYXRyaXguVHJhbnNmb3JtUmVjdChmb3JtX2Jib3gpOworICAgIENQREZfUmVjdCBhcmVjdDsKKyAgICBwQW5ub3QtPkdldFJlY3QoYXJlY3QpOworICAgIG1hdHJpeC5NYXRjaFJlY3QoYXJlY3QsIGZvcm1fYmJveCk7CisgICAgbWF0cml4LkNvbmNhdCgqcFVzZXIyRGV2aWNlKTsKKyAgICByZXR1cm4gcEZvcm07Cit9CitGWF9CT09MIENQREZfQW5ub3Q6OkRyYXdBcHBlYXJhbmNlKGNvbnN0IENQREZfUGFnZSogcFBhZ2UsIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBVc2VyMkRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwZWFyYW5jZU1vZGUgbW9kZSwgY29uc3QgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucykKK3sKKyAgICBDRlhfTWF0cml4IG1hdHJpeDsKKyAgICBDUERGX0Zvcm0qIHBGb3JtID0gRlBERkRPQ19Bbm5vdF9HZXRNYXRyaXgocFBhZ2UsIHRoaXMsIG1vZGUsIHBVc2VyMkRldmljZSwgbWF0cml4KTsKKyAgICBpZiAoIXBGb3JtKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgQ1BERl9SZW5kZXJDb250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5DcmVhdGUoKENQREZfUGFnZSopcFBhZ2UpOworICAgIGNvbnRleHQuRHJhd09iamVjdExpc3QocERldmljZSwgcEZvcm0sICZtYXRyaXgsIHBPcHRpb25zKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ1BERl9Bbm5vdDo6RHJhd0luQ29udGV4dChjb25zdCBDUERGX1BhZ2UqIHBQYWdlLCBjb25zdCBDUERGX1JlbmRlckNvbnRleHQqIHBDb250ZXh0LCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwVXNlcjJEZXZpY2UsIEFwcGVhcmFuY2VNb2RlIG1vZGUpCit7CisgICAgQ0ZYX01hdHJpeCBtYXRyaXg7CisgICAgQ1BERl9Gb3JtKiBwRm9ybSA9IEZQREZET0NfQW5ub3RfR2V0TWF0cml4KHBQYWdlLCB0aGlzLCBtb2RlLCBwVXNlcjJEZXZpY2UsIG1hdHJpeCk7CisgICAgaWYgKCFwRm9ybSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgICgoQ1BERl9SZW5kZXJDb250ZXh0KilwQ29udGV4dCktPkFwcGVuZE9iamVjdExpc3QocEZvcm0sICZtYXRyaXgpOworICAgIHJldHVybiBUUlVFOworfQorQ1BERl9QYWdlT2JqZWN0KiBDUERGX0Fubm90OjpHZXRCb3JkZXIoRlhfQk9PTCBiUHJpbnQsIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMpCit7CisgICAgaWYgKEdldFN1YlR5cGUoKSA9PSAiUG9wdXAiKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBGWF9EV09SRCBhbm5vdF9mbGFncyA9IEdldEZsYWdzKCk7CisgICAgaWYgKGFubm90X2ZsYWdzICYgQU5OT1RGTEFHX0hJRERFTikgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRlhfQk9PTCBiUHJpbnRpbmcgPSBiUHJpbnQgfHwgKHBPcHRpb25zICYmIChwT3B0aW9ucy0+bV9GbGFncyAmIFJFTkRFUl9QUklOVFBSRVZJRVcpKTsKKyAgICBpZiAoYlByaW50aW5nICYmIChhbm5vdF9mbGFncyAmIEFOTk9URkxBR19QUklOVCkgPT0gMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKCFiUHJpbnRpbmcgJiYgKGFubm90X2ZsYWdzICYgQU5OT1RGTEFHX05PVklFVykpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcEJTID0gbV9wQW5ub3REaWN0LT5HZXREaWN0KCJCUyIpOworICAgIGNoYXIgc3R5bGVfY2hhcjsKKyAgICBGWF9GTE9BVCB3aWR0aDsKKyAgICBDUERGX0FycmF5KiBwRGFzaEFycmF5ID0gTlVMTDsKKyAgICBpZiAocEJTID09IE5VTEwpIHsKKyAgICAgICAgQ1BERl9BcnJheSogcEJvcmRlckFycmF5ID0gbV9wQW5ub3REaWN0LT5HZXRBcnJheSgiQm9yZGVyIik7CisgICAgICAgIHN0eWxlX2NoYXIgPSAnUyc7CisgICAgICAgIGlmIChwQm9yZGVyQXJyYXkpIHsKKyAgICAgICAgICAgIHdpZHRoID0gcEJvcmRlckFycmF5LT5HZXROdW1iZXIoMik7CisgICAgICAgICAgICBpZiAocEJvcmRlckFycmF5LT5HZXRDb3VudCgpID09IDQpIHsKKyAgICAgICAgICAgICAgICBwRGFzaEFycmF5ID0gcEJvcmRlckFycmF5LT5HZXRBcnJheSgzKTsKKyAgICAgICAgICAgICAgICBpZiAocERhc2hBcnJheSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdHlsZV9jaGFyID0gJ0QnOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgd2lkdGggPSAxOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc3R5bGUgPSBwQlMtPkdldFN0cmluZygiUyIpOworICAgICAgICBwRGFzaEFycmF5ID0gcEJTLT5HZXRBcnJheSgiRCIpOworICAgICAgICBzdHlsZV9jaGFyID0gc3R5bGVbMV07CisgICAgICAgIHdpZHRoID0gcEJTLT5HZXROdW1iZXIoIlciKTsKKyAgICB9CisgICAgaWYgKHdpZHRoIDw9IDApIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfQXJyYXkqIHBDb2xvciA9IG1fcEFubm90RGljdC0+R2V0QXJyYXkoIkMiKTsKKyAgICBGWF9EV09SRCBhcmdiID0gMHhmZjAwMDAwMDsKKyAgICBpZiAocENvbG9yICE9IE5VTEwpIHsKKyAgICAgICAgaW50IFIgPSAoRlhfSU5UMzIpKHBDb2xvci0+R2V0TnVtYmVyKDApICogMjU1KTsKKyAgICAgICAgaW50IEcgPSAoRlhfSU5UMzIpKHBDb2xvci0+R2V0TnVtYmVyKDEpICogMjU1KTsKKyAgICAgICAgaW50IEIgPSAoRlhfSU5UMzIpKHBDb2xvci0+R2V0TnVtYmVyKDIpICogMjU1KTsKKyAgICAgICAgYXJnYiA9IEFyZ2JFbmNvZGUoMHhmZiwgUiwgRywgQik7CisgICAgfQorICAgIENQREZfUGF0aE9iamVjdCAqcFBhdGhPYmplY3QgPSBGWF9ORVcgQ1BERl9QYXRoT2JqZWN0KCk7CisgICAgaWYgKCFwUGF0aE9iamVjdCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9HcmFwaFN0YXRlRGF0YSAqcEdyYXBoU3RhdGUgPSBwUGF0aE9iamVjdC0+bV9HcmFwaFN0YXRlLkdldE1vZGlmeSgpOworICAgIGlmICghcEdyYXBoU3RhdGUpIHsKKyAgICAgICAgcFBhdGhPYmplY3QtPlJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBHcmFwaFN0YXRlLT5tX0xpbmVXaWR0aCA9IHdpZHRoOworICAgIENQREZfQ29sb3JTdGF0ZURhdGEgKnBDb2xvckRhdGEgPSBwUGF0aE9iamVjdC0+bV9Db2xvclN0YXRlLkdldE1vZGlmeSgpOworICAgIGlmICghcENvbG9yRGF0YSkgeworICAgICAgICBwUGF0aE9iamVjdC0+UmVsZWFzZSgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcENvbG9yRGF0YS0+bV9TdHJva2VSR0IgPSBhcmdiOworICAgIHBQYXRoT2JqZWN0LT5tX2JTdHJva2UgPSBUUlVFOworICAgIHBQYXRoT2JqZWN0LT5tX0ZpbGxUeXBlID0gMDsKKyAgICBpZiAoc3R5bGVfY2hhciA9PSAnRCcpIHsKKyAgICAgICAgaWYgKHBEYXNoQXJyYXkpIHsKKyAgICAgICAgICAgIEZYX0RXT1JEIGRhc2hfY291bnQgPSBwRGFzaEFycmF5LT5HZXRDb3VudCgpOworICAgICAgICAgICAgaWYgKGRhc2hfY291bnQgJSAyKSB7CisgICAgICAgICAgICAgICAgZGFzaF9jb3VudCArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBHcmFwaFN0YXRlLT5tX0Rhc2hBcnJheSA9IEZYX0FsbG9jKEZYX0ZMT0FULCBkYXNoX2NvdW50KTsKKyAgICAgICAgICAgIGlmIChwR3JhcGhTdGF0ZS0+bV9EYXNoQXJyYXkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHBQYXRoT2JqZWN0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwR3JhcGhTdGF0ZS0+bV9EYXNoQ291bnQgPSBkYXNoX2NvdW50OworICAgICAgICAgICAgRlhfRFdPUkQgaTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwRGFzaEFycmF5LT5HZXRDb3VudCgpOyBpICsrKSB7CisgICAgICAgICAgICAgICAgcEdyYXBoU3RhdGUtPm1fRGFzaEFycmF5W2ldID0gcERhc2hBcnJheS0+R2V0TnVtYmVyKGkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGkgPCBkYXNoX2NvdW50KSB7CisgICAgICAgICAgICAgICAgcEdyYXBoU3RhdGUtPm1fRGFzaEFycmF5W2ldID0gcEdyYXBoU3RhdGUtPm1fRGFzaEFycmF5W2kgLSAxXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBHcmFwaFN0YXRlLT5tX0Rhc2hBcnJheSA9IEZYX0FsbG9jKEZYX0ZMT0FULCAyKTsKKyAgICAgICAgICAgIGlmIChwR3JhcGhTdGF0ZS0+bV9EYXNoQXJyYXkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHBQYXRoT2JqZWN0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwR3JhcGhTdGF0ZS0+bV9EYXNoQ291bnQgPSAyOworICAgICAgICAgICAgcEdyYXBoU3RhdGUtPm1fRGFzaEFycmF5WzBdID0gcEdyYXBoU3RhdGUtPm1fRGFzaEFycmF5WzFdID0gMyAqIDEuMGY7CisgICAgICAgIH0KKyAgICB9CisgICAgQ0ZYX0Zsb2F0UmVjdCByZWN0OworICAgIEdldFJlY3QocmVjdCk7CisgICAgd2lkdGggLz0gMjsKKyAgICBDUERGX1BhdGhEYXRhICpwUGF0aERhdGEgPSBwUGF0aE9iamVjdC0+bV9QYXRoLkdldE1vZGlmeSgpOworICAgIGlmIChwUGF0aERhdGEpIHsKKyAgICAgICAgcFBhdGhEYXRhLT5BcHBlbmRSZWN0KHJlY3QubGVmdCArIHdpZHRoLCByZWN0LmJvdHRvbSArIHdpZHRoLCByZWN0LnJpZ2h0IC0gd2lkdGgsIHJlY3QudG9wIC0gd2lkdGgpOworICAgIH0KKyAgICBwUGF0aE9iamVjdC0+Q2FsY0JvdW5kaW5nQm94KCk7CisgICAgcmV0dXJuIHBQYXRoT2JqZWN0OworfQordm9pZCBDUERGX0Fubm90OjpEcmF3Qm9yZGVyKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBVc2VyMkRldmljZSwgY29uc3QgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucykKK3sKKyAgICBpZiAoR2V0U3ViVHlwZSgpID09ICJQb3B1cCIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGWF9EV09SRCBhbm5vdF9mbGFncyA9IEdldEZsYWdzKCk7CisgICAgaWYgKGFubm90X2ZsYWdzICYgQU5OT1RGTEFHX0hJRERFTikgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX0JPT0wgYlByaW50aW5nID0gcERldmljZS0+R2V0RGV2aWNlQ2xhc3MoKSA9PSBGWERDX1BSSU5URVIgfHwgKHBPcHRpb25zICYmIChwT3B0aW9ucy0+bV9GbGFncyAmIFJFTkRFUl9QUklOVFBSRVZJRVcpKTsKKyAgICBpZiAoYlByaW50aW5nICYmIChhbm5vdF9mbGFncyAmIEFOTk9URkxBR19QUklOVCkgPT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghYlByaW50aW5nICYmIChhbm5vdF9mbGFncyAmIEFOTk9URkxBR19OT1ZJRVcpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwQlMgPSBtX3BBbm5vdERpY3QtPkdldERpY3QoIkJTIik7CisgICAgY2hhciBzdHlsZV9jaGFyOworICAgIEZYX0ZMT0FUIHdpZHRoOworICAgIENQREZfQXJyYXkqIHBEYXNoQXJyYXkgPSBOVUxMOworICAgIGlmIChwQlMgPT0gTlVMTCkgeworICAgICAgICBDUERGX0FycmF5KiBwQm9yZGVyQXJyYXkgPSBtX3BBbm5vdERpY3QtPkdldEFycmF5KCJCb3JkZXIiKTsKKyAgICAgICAgc3R5bGVfY2hhciA9ICdTJzsKKyAgICAgICAgaWYgKHBCb3JkZXJBcnJheSkgeworICAgICAgICAgICAgd2lkdGggPSBwQm9yZGVyQXJyYXktPkdldE51bWJlcigyKTsKKyAgICAgICAgICAgIGlmIChwQm9yZGVyQXJyYXktPkdldENvdW50KCkgPT0gNCkgeworICAgICAgICAgICAgICAgIHBEYXNoQXJyYXkgPSBwQm9yZGVyQXJyYXktPkdldEFycmF5KDMpOworICAgICAgICAgICAgICAgIGlmIChwRGFzaEFycmF5ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnQgbkxlbiA9IHBEYXNoQXJyYXktPkdldENvdW50KCk7CisgICAgICAgICAgICAgICAgaW50IGkgPSAwOworICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgbkxlbjsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIENQREZfT2JqZWN0KnBPYmogPSBwRGFzaEFycmF5LT5HZXRFbGVtZW50VmFsdWUoaSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwT2JqICYmIHBPYmotPkdldEludGVnZXIoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGkgPT0gbkxlbikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0eWxlX2NoYXIgPSAnRCc7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB3aWR0aCA9IDE7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBDRlhfQnl0ZVN0cmluZyBzdHlsZSA9IHBCUy0+R2V0U3RyaW5nKCJTIik7CisgICAgICAgIHBEYXNoQXJyYXkgPSBwQlMtPkdldEFycmF5KCJEIik7CisgICAgICAgIHN0eWxlX2NoYXIgPSBzdHlsZVsxXTsKKyAgICAgICAgd2lkdGggPSBwQlMtPkdldE51bWJlcigiVyIpOworICAgIH0KKyAgICBpZiAod2lkdGggPD0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfQXJyYXkqIHBDb2xvciA9IG1fcEFubm90RGljdC0+R2V0QXJyYXkoIkMiKTsKKyAgICBGWF9EV09SRCBhcmdiID0gMHhmZjAwMDAwMDsKKyAgICBpZiAocENvbG9yICE9IE5VTEwpIHsKKyAgICAgICAgaW50IFIgPSAoRlhfSU5UMzIpKHBDb2xvci0+R2V0TnVtYmVyKDApICogMjU1KTsKKyAgICAgICAgaW50IEcgPSAoRlhfSU5UMzIpKHBDb2xvci0+R2V0TnVtYmVyKDEpICogMjU1KTsKKyAgICAgICAgaW50IEIgPSAoRlhfSU5UMzIpKHBDb2xvci0+R2V0TnVtYmVyKDIpICogMjU1KTsKKyAgICAgICAgYXJnYiA9IEFyZ2JFbmNvZGUoMHhmZiwgUiwgRywgQik7CisgICAgfQorICAgIENQREZfR3JhcGhTdGF0ZURhdGEgZ3JhcGhfc3RhdGU7CisgICAgZ3JhcGhfc3RhdGUubV9MaW5lV2lkdGggPSB3aWR0aDsKKyAgICBpZiAoc3R5bGVfY2hhciA9PSAnRCcpIHsKKyAgICAgICAgaWYgKHBEYXNoQXJyYXkpIHsKKyAgICAgICAgICAgIEZYX0RXT1JEIGRhc2hfY291bnQgPSBwRGFzaEFycmF5LT5HZXRDb3VudCgpOworICAgICAgICAgICAgaWYgKGRhc2hfY291bnQgJSAyKSB7CisgICAgICAgICAgICAgICAgZGFzaF9jb3VudCArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdyYXBoX3N0YXRlLm1fRGFzaEFycmF5ID0gRlhfQWxsb2MoRlhfRkxPQVQsIGRhc2hfY291bnQpOworICAgICAgICAgICAgaWYgKGdyYXBoX3N0YXRlLm1fRGFzaEFycmF5ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ3JhcGhfc3RhdGUubV9EYXNoQ291bnQgPSBkYXNoX2NvdW50OworICAgICAgICAgICAgRlhfRFdPUkQgaTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwRGFzaEFycmF5LT5HZXRDb3VudCgpOyBpICsrKSB7CisgICAgICAgICAgICAgICAgZ3JhcGhfc3RhdGUubV9EYXNoQXJyYXlbaV0gPSBwRGFzaEFycmF5LT5HZXROdW1iZXIoaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaSA8IGRhc2hfY291bnQpIHsKKyAgICAgICAgICAgICAgICBncmFwaF9zdGF0ZS5tX0Rhc2hBcnJheVtpXSA9IGdyYXBoX3N0YXRlLm1fRGFzaEFycmF5W2kgLSAxXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdyYXBoX3N0YXRlLm1fRGFzaEFycmF5ID0gRlhfQWxsb2MoRlhfRkxPQVQsIDIpOworICAgICAgICAgICAgaWYgKGdyYXBoX3N0YXRlLm1fRGFzaEFycmF5ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ3JhcGhfc3RhdGUubV9EYXNoQ291bnQgPSAyOworICAgICAgICAgICAgZ3JhcGhfc3RhdGUubV9EYXNoQXJyYXlbMF0gPSBncmFwaF9zdGF0ZS5tX0Rhc2hBcnJheVsxXSA9IDMgKiAxLjBmOworICAgICAgICB9CisgICAgfQorICAgIENGWF9GbG9hdFJlY3QgcmVjdDsKKyAgICBHZXRSZWN0KHJlY3QpOworICAgIENQREZfUGF0aERhdGEgcGF0aDsKKyAgICB3aWR0aCAvPSAyOworICAgIHBhdGguQXBwZW5kUmVjdChyZWN0LmxlZnQgKyB3aWR0aCwgcmVjdC5ib3R0b20gKyB3aWR0aCwgcmVjdC5yaWdodCAtIHdpZHRoLCByZWN0LnRvcCAtIHdpZHRoKTsKKyAgICBpbnQgZmlsbF90eXBlID0gMDsKKyAgICBpZiAocE9wdGlvbnMgJiYgKHBPcHRpb25zLT5tX0ZsYWdzICYgUkVOREVSX05PUEFUSFNNT09USCkpIHsKKyAgICAgICAgZmlsbF90eXBlIHw9IEZYRklMTF9OT1BBVEhTTU9PVEg7CisgICAgfQorICAgIHBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoLCBwVXNlcjJEZXZpY2UsICZncmFwaF9zdGF0ZSwgYXJnYiwgYXJnYiwgZmlsbF90eXBlKTsKK30KK2ludCBDUERGX0Fubm90OjpDb3VudElSVE5vdGVzKCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9wTGlzdC0+Q291bnQoKTsgaSArKykgeworICAgICAgICBDUERGX0Fubm90KiBwQW5ub3QgPSBtX3BMaXN0LT5HZXRBdChpKTsKKyAgICAgICAgaWYgKHBBbm5vdCA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBJUlQgPSBwQW5ub3QtPm1fcEFubm90RGljdC0+R2V0RGljdCgiSVJUIik7CisgICAgICAgIGlmIChwSVJUICE9IG1fcEFubm90RGljdCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgY291bnQgKys7CisgICAgfQorICAgIHJldHVybiBjb3VudDsKK30KK0NQREZfQW5ub3QqIENQREZfQW5ub3Q6OkdldElSVE5vdGUoaW50IGluZGV4KQoreworICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3BMaXN0LT5Db3VudCgpOyBpICsrKSB7CisgICAgICAgIENQREZfQW5ub3QqIHBBbm5vdCA9IG1fcExpc3QtPkdldEF0KGkpOworICAgICAgICBpZiAocEFubm90ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcElSVCA9IHBBbm5vdC0+bV9wQW5ub3REaWN0LT5HZXREaWN0KCJJUlQiKTsKKyAgICAgICAgaWYgKHBJUlQgIT0gbV9wQW5ub3REaWN0KSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY291bnQgPT0gaW5kZXgpIHsKKyAgICAgICAgICAgIHJldHVybiBwQW5ub3Q7CisgICAgICAgIH0KKyAgICAgICAgY291bnQgKys7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmRvYy9kb2NfYXAuY3BwIGIvY29yZS9zcmMvZnBkZmRvYy9kb2NfYXAuY3BwCmluZGV4IDBhZmU3MTguLjc4NGQ4OWQgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX2FwLmNwcAorKysgYi9jb3JlL3NyYy9mcGRmZG9jL2RvY19hcC5jcHAKQEAgLTEsODA4ICsxLDgwOCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmRvYy9mcGRmX2RvYy5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZkb2MvZnBkZl92dC5oIg0KLSNpbmNsdWRlICJwZGZfdnQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mcGRmZG9jL2ZwZGZfYXAuaCINCi1GWF9CT09MIEZQREZfR2VuZXJhdGVBUChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpY3QpDQotew0KLSAgICBpZiAocEFubm90RGljdC0+R2V0Q29uc3RTdHJpbmcoIlN1YnR5cGUiKSAhPSBGWF9CU1RSQygiV2lkZ2V0IikpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVN0cmluZyBmaWVsZF90eXBlID0gRlBERl9HZXRGaWVsZEF0dHIocEFubm90RGljdCwgIkZUIiktPkdldFN0cmluZygpOw0KLSAgICBGWF9EV09SRCBmbGFncyA9IEZQREZfR2V0RmllbGRBdHRyKHBBbm5vdERpY3QsICJGZiIpLT5HZXRJbnRlZ2VyKCk7DQotICAgIGlmIChmaWVsZF90eXBlID09ICJUeCIpIHsNCi0gICAgICAgIHJldHVybiBDUFZUX0dlbmVyYXRlQVA6OkdlbmVyYXRlVGV4dEZpZWxkQVAocERvYywgcEFubm90RGljdCk7DQotICAgIH0gZWxzZSBpZiAoZmllbGRfdHlwZSA9PSAiQ2giKSB7DQotICAgICAgICBpZiAoZmxhZ3MgJiAoMSA8PCAxNykpIHsNCi0gICAgICAgICAgICByZXR1cm4gQ1BWVF9HZW5lcmF0ZUFQOjpHZW5lcmF0ZUNvbWJvQm94QVAocERvYywgcEFubm90RGljdCk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHJldHVybiBDUFZUX0dlbmVyYXRlQVA6OkdlbmVyYXRlTGlzdEJveEFQKHBEb2MsIHBBbm5vdERpY3QpOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2UgaWYgKGZpZWxkX3R5cGUgPT0gIkJ0biIpIHsNCi0gICAgICAgIGlmICghKGZsYWdzICYgKDEgPDwgMTYpKSkgew0KLSAgICAgICAgICAgIGlmICghcEFubm90RGljdC0+S2V5RXhpc3QoIkFTIikpIHsNCi0gICAgICAgICAgICAgICAgaWYgKENQREZfRGljdGlvbmFyeSogcFBhcmVudERpY3QgPSBwQW5ub3REaWN0LT5HZXREaWN0KCJQYXJlbnQiKSkgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBQYXJlbnREaWN0LT5LZXlFeGlzdCgiQVMiKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBBbm5vdERpY3QtPlNldEF0U3RyaW5nKCJBUyIsIHBQYXJlbnREaWN0LT5HZXRTdHJpbmcoIkFTIikpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotY2xhc3MgQ1BWVF9Gb250TWFwIDogcHVibGljIElQVlRfRm9udE1hcA0KLXsNCi1wdWJsaWM6DQotICAgIENQVlRfRm9udE1hcChDUERGX0RvY3VtZW50ICogcERvYywgQ1BERl9EaWN0aW9uYXJ5ICogcFJlc0RpY3QsIENQREZfRm9udCAqIHBEZWZGb250LA0KLSAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0J5dGVTdHJpbmcgJiBzRGVmRm9udEFsaWFzKTsNCi0gICAgdmlydHVhbCB+Q1BWVF9Gb250TWFwKCk7DQotICAgIENQREZfRm9udCoJCQkJCQlHZXRQREZGb250KEZYX0lOVDMyIG5Gb250SW5kZXgpOw0KLSAgICBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0UERGRm9udEFsaWFzKEZYX0lOVDMyIG5Gb250SW5kZXgpOw0KLSAgICBzdGF0aWMgdm9pZAkJCQkJCUdldEFubm90U3lzUERGRm9udChDUERGX0RvY3VtZW50ICogcERvYywgQ1BERl9EaWN0aW9uYXJ5ICogcFJlc0RpY3QsDQotICAgICAgICAgICAgQ1BERl9Gb250ICogJiBwU3lzRm9udCwgQ0ZYX0J5dGVTdHJpbmcgJiBzU3lzRm9udEFsaWFzKTsNCi1wcml2YXRlOg0KLSAgICBDUERGX0RvY3VtZW50KgkJCQkJbV9wRG9jdW1lbnQ7DQotICAgIENQREZfRGljdGlvbmFyeSoJCQkJbV9wUmVzRGljdDsNCi0gICAgQ1BERl9Gb250KgkJCQkJCW1fcERlZkZvbnQ7DQotICAgIENGWF9CeXRlU3RyaW5nCQkJCQltX3NEZWZGb250QWxpYXM7DQotICAgIENQREZfRm9udCoJCQkJCQltX3BTeXNGb250Ow0KLSAgICBDRlhfQnl0ZVN0cmluZwkJCQkJbV9zU3lzRm9udEFsaWFzOw0KLX07DQotQ1BWVF9Gb250TWFwOjpDUFZUX0ZvbnRNYXAoQ1BERl9Eb2N1bWVudCAqIHBEb2MsIENQREZfRGljdGlvbmFyeSAqIHBSZXNEaWN0LCBDUERGX0ZvbnQgKiBwRGVmRm9udCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQnl0ZVN0cmluZyAmIHNEZWZGb250QWxpYXMpIDoNCi0gICAgbV9wRG9jdW1lbnQocERvYyksDQotICAgIG1fcFJlc0RpY3QocFJlc0RpY3QpLA0KLSAgICBtX3BEZWZGb250KHBEZWZGb250KSwNCi0gICAgbV9zRGVmRm9udEFsaWFzKHNEZWZGb250QWxpYXMpLA0KLSAgICBtX3BTeXNGb250KE5VTEwpLA0KLSAgICBtX3NTeXNGb250QWxpYXMoKQ0KLXsNCi19DQotQ1BWVF9Gb250TWFwOjp+Q1BWVF9Gb250TWFwKCkNCi17DQotfQ0KLWV4dGVybiBDUERGX0ZvbnQqCQlBZGROYXRpdmVJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSomIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKTsNCi12b2lkIENQVlRfRm9udE1hcDo6R2V0QW5ub3RTeXNQREZGb250KENQREZfRG9jdW1lbnQgKiBwRG9jLCBDUERGX0RpY3Rpb25hcnkgKiBwUmVzRGljdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfRm9udCAqICYgcFN5c0ZvbnQsIENGWF9CeXRlU3RyaW5nICYgc1N5c0ZvbnRBbGlhcykNCi17DQotICAgIGlmIChwRG9jICYmIHBSZXNEaWN0KSB7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyBzRm9udEFsaWFzOw0KLSAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QgPSBwRG9jLT5HZXRSb290KCktPkdldERpY3QoIkFjcm9Gb3JtIik7DQotICAgICAgICBpZiAoQ1BERl9Gb250ICogcFBERkZvbnQgPSBBZGROYXRpdmVJbnRlckZvcm1Gb250KHBGb3JtRGljdCwgcERvYywgc1N5c0ZvbnRBbGlhcykpIHsNCi0gICAgICAgICAgICBpZiAoQ1BERl9EaWN0aW9uYXJ5ICogcEZvbnRMaXN0ID0gcFJlc0RpY3QtPkdldERpY3QoIkZvbnQiKSkgew0KLSAgICAgICAgICAgICAgICBpZiAoIXBGb250TGlzdC0+S2V5RXhpc3Qoc1N5c0ZvbnRBbGlhcykpIHsNCi0gICAgICAgICAgICAgICAgICAgIHBGb250TGlzdC0+U2V0QXRSZWZlcmVuY2Uoc1N5c0ZvbnRBbGlhcywgcERvYywgcFBERkZvbnQtPkdldEZvbnREaWN0KCkpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHBTeXNGb250ID0gcFBERkZvbnQ7DQotICAgICAgICB9DQotICAgIH0NCi19DQotQ1BERl9Gb250KiBDUFZUX0ZvbnRNYXA6OkdldFBERkZvbnQoRlhfSU5UMzIgbkZvbnRJbmRleCkNCi17DQotICAgIHN3aXRjaCAobkZvbnRJbmRleCkgew0KLSAgICAgICAgY2FzZSAwOg0KLSAgICAgICAgICAgIHJldHVybiBtX3BEZWZGb250Ow0KLSAgICAgICAgY2FzZSAxOg0KLSAgICAgICAgICAgIGlmICghbV9wU3lzRm9udCkgew0KLSAgICAgICAgICAgICAgICBHZXRBbm5vdFN5c1BERkZvbnQobV9wRG9jdW1lbnQsIG1fcFJlc0RpY3QsIG1fcFN5c0ZvbnQsIG1fc1N5c0ZvbnRBbGlhcyk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybiBtX3BTeXNGb250Ow0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1DRlhfQnl0ZVN0cmluZyBDUFZUX0ZvbnRNYXA6OkdldFBERkZvbnRBbGlhcyhGWF9JTlQzMiBuRm9udEluZGV4KQ0KLXsNCi0gICAgc3dpdGNoIChuRm9udEluZGV4KSB7DQotICAgICAgICBjYXNlIDA6DQotICAgICAgICAgICAgcmV0dXJuIG1fc0RlZkZvbnRBbGlhczsNCi0gICAgICAgIGNhc2UgMToNCi0gICAgICAgICAgICBpZiAoIW1fcFN5c0ZvbnQpIHsNCi0gICAgICAgICAgICAgICAgR2V0QW5ub3RTeXNQREZGb250KG1fcERvY3VtZW50LCBtX3BSZXNEaWN0LCBtX3BTeXNGb250LCBtX3NTeXNGb250QWxpYXMpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gbV9zU3lzRm9udEFsaWFzOw0KLSAgICB9DQotICAgIHJldHVybiAiIjsNCi19DQotQ1BWVF9Qcm92aWRlcjo6Q1BWVF9Qcm92aWRlcihJUFZUX0ZvbnRNYXAgKiBwRm9udE1hcCkgOiBtX3BGb250TWFwKHBGb250TWFwKQ0KLXsNCi0gICAgQVNTRVJUIChtX3BGb250TWFwICE9IE5VTEwpOw0KLX0NCi1DUFZUX1Byb3ZpZGVyOjp+Q1BWVF9Qcm92aWRlcigpDQotew0KLX0NCi1GWF9JTlQzMiBDUFZUX1Byb3ZpZGVyOjpHZXRDaGFyV2lkdGgoRlhfSU5UMzIgbkZvbnRJbmRleCwgRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBuV29yZFN0eWxlKQ0KLXsNCi0gICAgaWYgKENQREZfRm9udCogcFBERkZvbnQgPSBtX3BGb250TWFwLT5HZXRQREZGb250KG5Gb250SW5kZXgpKSB7DQotICAgICAgICBGWF9EV09SRCBjaGFyY29kZSA9IHBQREZGb250LT5DaGFyQ29kZUZyb21Vbmljb2RlKHdvcmQpOw0KLSAgICAgICAgaWYgKGNoYXJjb2RlICE9IC0xKSB7DQotICAgICAgICAgICAgcmV0dXJuIHBQREZGb250LT5HZXRDaGFyV2lkdGhGKGNoYXJjb2RlKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gMDsNCi19DQotRlhfSU5UMzIgQ1BWVF9Qcm92aWRlcjo6R2V0VHlwZUFzY2VudChGWF9JTlQzMiBuRm9udEluZGV4KQ0KLXsNCi0gICAgaWYgKENQREZfRm9udCogcFBERkZvbnQgPSBtX3BGb250TWFwLT5HZXRQREZGb250KG5Gb250SW5kZXgpKSB7DQotICAgICAgICByZXR1cm4gcFBERkZvbnQtPkdldFR5cGVBc2NlbnQoKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gMDsNCi19DQotRlhfSU5UMzIgQ1BWVF9Qcm92aWRlcjo6R2V0VHlwZURlc2NlbnQoRlhfSU5UMzIgbkZvbnRJbmRleCkNCi17DQotICAgIGlmIChDUERGX0ZvbnQqIHBQREZGb250ID0gbV9wRm9udE1hcC0+R2V0UERGRm9udChuRm9udEluZGV4KSkgew0KLSAgICAgICAgcmV0dXJuIHBQREZGb250LT5HZXRUeXBlRGVzY2VudCgpOw0KLSAgICB9DQotICAgIHJldHVybiAwOw0KLX0NCi1GWF9JTlQzMiBDUFZUX1Byb3ZpZGVyOjpHZXRXb3JkRm9udEluZGV4KEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCwgRlhfSU5UMzIgbkZvbnRJbmRleCkNCi17DQotICAgIGlmIChDUERGX0ZvbnQqIHBEZWZGb250ID0gbV9wRm9udE1hcC0+R2V0UERGRm9udCgwKSkgew0KLSAgICAgICAgaWYgKHBEZWZGb250LT5DaGFyQ29kZUZyb21Vbmljb2RlKHdvcmQpICE9IC0xKSB7DQotICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKENQREZfRm9udCogcFN5c0ZvbnQgPSBtX3BGb250TWFwLT5HZXRQREZGb250KDEpKQ0KLSAgICAgICAgaWYgKHBTeXNGb250LT5DaGFyQ29kZUZyb21Vbmljb2RlKHdvcmQpICE9IC0xKSB7DQotICAgICAgICAgICAgcmV0dXJuIDE7DQotICAgICAgICB9DQotICAgIHJldHVybiAtMTsNCi19DQotRlhfQk9PTCBDUFZUX1Byb3ZpZGVyOjpJc0xhdGluV29yZChGWF9XT1JEIHdvcmQpDQotew0KLSAgICBpZiAoKHdvcmQgPj0gMHg2MSAmJiB3b3JkIDw9IDB4N0EpIHx8ICh3b3JkID49IDB4NDEgJiYgd29yZCA8PSAweDVBKSB8fCB3b3JkID09IDB4MkQgfHwgd29yZCA9PSAweDI3KSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUZYX0lOVDMyIENQVlRfUHJvdmlkZXI6OkdldERlZmF1bHRGb250SW5kZXgoKQ0KLXsNCi0gICAgcmV0dXJuIDA7DQotfQ0KLXN0YXRpYyBDRlhfQnl0ZVN0cmluZyBHZXRQREZXb3JkU3RyaW5nKElQVlRfRm9udE1hcCAqIHBGb250TWFwLCBGWF9JTlQzMiBuRm9udEluZGV4LCBGWF9XT1JEIFdvcmQsIEZYX1dPUkQgU3ViV29yZCkNCi17DQotICAgIENGWF9CeXRlU3RyaW5nIHNXb3JkOw0KLSAgICBpZiAoU3ViV29yZCA+IDApIHsNCi0gICAgICAgIHNXb3JkLkZvcm1hdCgiJWMiLCBTdWJXb3JkKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGlmIChwRm9udE1hcCkgew0KLSAgICAgICAgICAgIGlmIChDUERGX0ZvbnQgKiBwUERGRm9udCA9IHBGb250TWFwLT5HZXRQREZGb250KG5Gb250SW5kZXgpKSB7DQotICAgICAgICAgICAgICAgIGlmIChwUERGRm9udC0+R2V0QmFzZUZvbnQoKS5Db21wYXJlKCJTeW1ib2wiKSA9PSAwIHx8IHBQREZGb250LT5HZXRCYXNlRm9udCgpLkNvbXBhcmUoIlphcGZEaW5nYmF0cyIpID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHNXb3JkLkZvcm1hdCgiJWMiLCBXb3JkKTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGR3Q2hhckNvZGUgPSBwUERGRm9udC0+Q2hhckNvZGVGcm9tVW5pY29kZShXb3JkKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChkd0NoYXJDb2RlICE9IC0xKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcFBERkZvbnQtPkFwcGVuZENoYXIoc1dvcmQsIGR3Q2hhckNvZGUpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBzV29yZDsNCi19DQotc3RhdGljIENGWF9CeXRlU3RyaW5nIEdldFdvcmRSZW5kZXJTdHJpbmcoY29uc3QgQ0ZYX0J5dGVTdHJpbmcgJiBzdHJXb3JkcykNCi17DQotICAgIGlmIChzdHJXb3Jkcy5HZXRMZW5ndGgoKSA+IDApIHsNCi0gICAgICAgIHJldHVybiBQREZfRW5jb2RlU3RyaW5nKHN0cldvcmRzKSArICIgVGpcbiI7DQotICAgIH0NCi0gICAgcmV0dXJuICIiOw0KLX0NCi1zdGF0aWMgQ0ZYX0J5dGVTdHJpbmcgR2V0Rm9udFNldFN0cmluZyhJUFZUX0ZvbnRNYXAgKiBwRm9udE1hcCwgRlhfSU5UMzIgbkZvbnRJbmRleCwgRlhfRkxPQVQgZkZvbnRTaXplKQ0KLXsNCi0gICAgQ0ZYX0J5dGVUZXh0QnVmIHNSZXQ7DQotICAgIGlmIChwRm9udE1hcCkgew0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc0ZvbnRBbGlhcyA9IHBGb250TWFwLT5HZXRQREZGb250QWxpYXMobkZvbnRJbmRleCk7DQotICAgICAgICBpZiAoc0ZvbnRBbGlhcy5HZXRMZW5ndGgoKSA+IDAgJiYgZkZvbnRTaXplID4gMCApIHsNCi0gICAgICAgICAgICBzUmV0IDw8ICIvIiA8PCBzRm9udEFsaWFzIDw8ICIgIiA8PCBmRm9udFNpemUgPDwgIiBUZlxuIjsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gc1JldC5HZXRCeXRlU3RyaW5nKCk7DQotfQ0KLXN0YXRpYyBDUFZUX0NvbG9yIFBhcnNlQ29sb3IoY29uc3QgQ0ZYX0J5dGVTdHJpbmcgJiBzdHIpDQotew0KLSAgICBDUERGX1NpbXBsZVBhcnNlciBzeW50YXgoc3RyKTsNCi0gICAgc3ludGF4LlNldFBvcygwKTsNCi0gICAgaWYgKHN5bnRheC5GaW5kVGFnUGFyYW0oImciLCAxKSkgew0KLSAgICAgICAgcmV0dXJuIENQVlRfQ29sb3IoQ1RfR1JBWSwgRlhfYXRvZihzeW50YXguR2V0V29yZCgpKSk7DQotICAgIH0NCi0gICAgc3ludGF4LlNldFBvcygwKTsNCi0gICAgaWYgKHN5bnRheC5GaW5kVGFnUGFyYW0oInJnIiwgMykpIHsNCi0gICAgICAgIEZYX0ZMT0FUIGYxID0gRlhfYXRvZihzeW50YXguR2V0V29yZCgpKTsNCi0gICAgICAgIEZYX0ZMT0FUIGYyID0gRlhfYXRvZihzeW50YXguR2V0V29yZCgpKTsNCi0gICAgICAgIEZYX0ZMT0FUIGYzID0gRlhfYXRvZihzeW50YXguR2V0V29yZCgpKTsNCi0gICAgICAgIHJldHVybiBDUFZUX0NvbG9yKENUX1JHQiwgZjEsIGYyLCBmMyk7DQotICAgIH0NCi0gICAgc3ludGF4LlNldFBvcygwKTsNCi0gICAgaWYgKHN5bnRheC5GaW5kVGFnUGFyYW0oImsiLCA0KSkgew0KLSAgICAgICAgRlhfRkxPQVQgZjEgPSBGWF9hdG9mKHN5bnRheC5HZXRXb3JkKCkpOw0KLSAgICAgICAgRlhfRkxPQVQgZjIgPSBGWF9hdG9mKHN5bnRheC5HZXRXb3JkKCkpOw0KLSAgICAgICAgRlhfRkxPQVQgZjMgPSBGWF9hdG9mKHN5bnRheC5HZXRXb3JkKCkpOw0KLSAgICAgICAgRlhfRkxPQVQgZjQgPSBGWF9hdG9mKHN5bnRheC5HZXRXb3JkKCkpOw0KLSAgICAgICAgcmV0dXJuIENQVlRfQ29sb3IoQ1RfQ01ZSywgZjEsIGYyLCBmMywgZjQpOw0KLSAgICB9DQotICAgIHJldHVybiBDUFZUX0NvbG9yKENUX1RSQU5TUEFSRU5UKTsNCi19DQotc3RhdGljIENQVlRfQ29sb3IgUGFyc2VDb2xvcihjb25zdCBDUERGX0FycmF5ICYgYXJyYXkpDQotew0KLSAgICBDUFZUX0NvbG9yIHJ0Ow0KLSAgICBzd2l0Y2ggKGFycmF5LkdldENvdW50KCkpIHsNCi0gICAgICAgIGNhc2UgMToNCi0gICAgICAgICAgICBydCA9IENQVlRfQ29sb3IoQ1RfR1JBWSwgYXJyYXkuR2V0RmxvYXQoMCkpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSAzOg0KLSAgICAgICAgICAgIHJ0ID0gQ1BWVF9Db2xvcihDVF9SR0IsIGFycmF5LkdldEZsb2F0KDApLCBhcnJheS5HZXRGbG9hdCgxKSwgYXJyYXkuR2V0RmxvYXQoMikpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSA0Og0KLSAgICAgICAgICAgIHJ0ID0gQ1BWVF9Db2xvcihDVF9DTVlLLCBhcnJheS5HZXRGbG9hdCgwKSwgYXJyYXkuR2V0RmxvYXQoMSksIGFycmF5LkdldEZsb2F0KDIpLCBhcnJheS5HZXRGbG9hdCgzKSk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgIH0NCi0gICAgcmV0dXJuIHJ0Ow0KLX0NCi1zdGF0aWMgRlhfQk9PTCBHZW5lcmF0ZVdpZGdldEFQKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfRGljdGlvbmFyeSogcEFubm90RGljdCwgY29uc3QgRlhfSU5UMzIgJiBuV2lkZ2V0VHlwZSkNCi17DQotICAgIENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0ID0gTlVMTDsNCi0gICAgaWYgKENQREZfRGljdGlvbmFyeSAqIHBSb290RGljdCA9IHBEb2MtPkdldFJvb3QoKSkgew0KLSAgICAgICAgcEZvcm1EaWN0ID0gcFJvb3REaWN0LT5HZXREaWN0KCJBY3JvRm9ybSIpOw0KLSAgICB9DQotICAgIGlmICghcEZvcm1EaWN0KSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgREEgPSBGUERGX0dldEZpZWxkQXR0cihwQW5ub3REaWN0LCAiREEiKS0+R2V0U3RyaW5nKCk7DQotICAgIGlmIChEQS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIERBID0gcEZvcm1EaWN0LT5HZXRTdHJpbmcoIkRBIik7DQotICAgIH0NCi0gICAgaWYgKERBLklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIENQREZfU2ltcGxlUGFyc2VyIHN5bnRheChEQSk7DQotICAgIHN5bnRheC5GaW5kVGFnUGFyYW0oIlRmIiwgMik7DQotICAgIENGWF9CeXRlU3RyaW5nIHNGb250TmFtZSA9IHN5bnRheC5HZXRXb3JkKCk7DQotICAgIHNGb250TmFtZSA9IFBERl9OYW1lRGVjb2RlKHNGb250TmFtZSk7DQotICAgIGlmIChzRm9udE5hbWUuSXNFbXB0eSgpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgRlhfRkxPQVQgZkZvbnRTaXplID0gRlhfYXRvZihzeW50YXguR2V0V29yZCgpKTsNCi0gICAgQ1BWVF9Db2xvciBjclRleHQgPSBQYXJzZUNvbG9yKERBKTsNCi0gICAgRlhfQk9PTCBiVXNlRm9ybVJlcyA9IEZBTFNFOw0KLSAgICBDUERGX0RpY3Rpb25hcnkgKiBwRm9udERpY3QgPSBOVUxMOw0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBEUkRpY3QgPSBwQW5ub3REaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJEUiIpKTsNCi0gICAgaWYgKHBEUkRpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcERSRGljdCA9IHBGb3JtRGljdC0+R2V0RGljdChGWF9CU1RSQygiRFIiKSk7DQotICAgICAgICBiVXNlRm9ybVJlcyA9IFRSVUU7DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5ICogcERSRm9udERpY3QgPSBOVUxMOw0KLSAgICBpZiAoKHBEUkZvbnREaWN0ID0gcERSRGljdC0+R2V0RGljdCgiRm9udCIpKSkgew0KLSAgICAgICAgcEZvbnREaWN0ID0gcERSRm9udERpY3QtPkdldERpY3Qoc0ZvbnROYW1lLk1pZCgxKSk7DQotICAgICAgICBpZiAoIXBGb250RGljdCAmJiAhYlVzZUZvcm1SZXMpIHsNCi0gICAgICAgICAgICBwRFJEaWN0ID0gcEZvcm1EaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJEUiIpKTsNCi0gICAgICAgICAgICBwRFJGb250RGljdCA9IHBEUkRpY3QtPkdldERpY3QoIkZvbnQiKTsNCi0gICAgICAgICAgICBpZiAocERSRm9udERpY3QpIHsNCi0gICAgICAgICAgICAgICAgcEZvbnREaWN0ID0gcERSRm9udERpY3QtPkdldERpY3Qoc0ZvbnROYW1lLk1pZCgxKSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmICghcERSRm9udERpY3QpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoIXBGb250RGljdCkgew0KLSAgICAgICAgcEZvbnREaWN0ID0gQ1BERl9EaWN0aW9uYXJ5OjpDcmVhdGUoKTsNCi0gICAgICAgIGlmIChwRm9udERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIHBGb250RGljdC0+U2V0QXROYW1lKEZYX0JTVFJDKCJUeXBlIiksICJGb250Iik7DQotICAgICAgICBwRm9udERpY3QtPlNldEF0TmFtZShGWF9CU1RSQygiU3VidHlwZSIpLCAiVHlwZTEiKTsNCi0gICAgICAgIHBGb250RGljdC0+U2V0QXROYW1lKEZYX0JTVFJDKCJCYXNlRm9udCIpLCAiSGVsdmV0aWNhIik7DQotICAgICAgICBwRm9udERpY3QtPlNldEF0TmFtZShGWF9CU1RSQygiRW5jb2RpbmciKSwgIldpbkFuc2lFbmNvZGluZyIpOw0KLSAgICAgICAgcERvYy0+QWRkSW5kaXJlY3RPYmplY3QocEZvbnREaWN0KTsNCi0gICAgICAgIHBEUkZvbnREaWN0LT5TZXRBdFJlZmVyZW5jZShzRm9udE5hbWUuTWlkKDEpLCBwRG9jLCBwRm9udERpY3QpOw0KLSAgICB9DQotICAgIENQREZfRm9udCogcERlZkZvbnQgPSBwRG9jLT5Mb2FkRm9udChwRm9udERpY3QpOw0KLSAgICBpZiAoIXBEZWZGb250KSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ0ZYX0NoYXJNYXAqIHBDaGFyTWFwID0gcERlZkZvbnQtPkdldENoYXJNYXAoKTsNCi0gICAgQ1BERl9SZWN0IHJjQW5ub3QgPSBwQW5ub3REaWN0LT5HZXRSZWN0KCJSZWN0Iik7DQotICAgIEZYX0lOVDMyIG5Sb3RhdGUgPSAwOw0KLSAgICBpZiAoQ1BERl9EaWN0aW9uYXJ5ICogcE1LRGljdCA9IHBBbm5vdERpY3QtPkdldERpY3QoIk1LIikpIHsNCi0gICAgICAgIG5Sb3RhdGUgPSBwTUtEaWN0LT5HZXRJbnRlZ2VyKCJSIik7DQotICAgIH0NCi0gICAgQ1BERl9SZWN0IHJjQkJveDsNCi0gICAgQ1BERl9NYXRyaXggbWF0cml4Ow0KLSAgICBzd2l0Y2ggKG5Sb3RhdGUgJSAzNjApIHsNCi0gICAgICAgIGNhc2UgMDoNCi0gICAgICAgICAgICByY0JCb3ggPSBDUERGX1JlY3QoMCwgMCwgcmNBbm5vdC5yaWdodCAtIHJjQW5ub3QubGVmdCwgcmNBbm5vdC50b3AgLSByY0Fubm90LmJvdHRvbSk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIDkwOg0KLSAgICAgICAgICAgIG1hdHJpeCA9IENQREZfTWF0cml4KDAsIDEsIC0xLCAwLCByY0Fubm90LnJpZ2h0IC0gcmNBbm5vdC5sZWZ0LCAwKTsNCi0gICAgICAgICAgICByY0JCb3ggPSBDUERGX1JlY3QoMCwgMCwgcmNBbm5vdC50b3AgLSByY0Fubm90LmJvdHRvbSwgcmNBbm5vdC5yaWdodCAtIHJjQW5ub3QubGVmdCk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIDE4MDoNCi0gICAgICAgICAgICBtYXRyaXggPSBDUERGX01hdHJpeCgtMSwgMCwgMCwgLTEsIHJjQW5ub3QucmlnaHQgLSByY0Fubm90LmxlZnQsIHJjQW5ub3QudG9wIC0gcmNBbm5vdC5ib3R0b20pOw0KLSAgICAgICAgICAgIHJjQkJveCA9IENQREZfUmVjdCgwLCAwLCByY0Fubm90LnJpZ2h0IC0gcmNBbm5vdC5sZWZ0LCByY0Fubm90LnRvcCAtIHJjQW5ub3QuYm90dG9tKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgMjcwOg0KLSAgICAgICAgICAgIG1hdHJpeCA9IENQREZfTWF0cml4KDAsIC0xLCAxLCAwLCAwLCByY0Fubm90LnRvcCAtIHJjQW5ub3QuYm90dG9tKTsNCi0gICAgICAgICAgICByY0JCb3ggPSBDUERGX1JlY3QoMCwgMCwgcmNBbm5vdC50b3AgLSByY0Fubm90LmJvdHRvbSwgcmNBbm5vdC5yaWdodCAtIHJjQW5ub3QubGVmdCk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgIH0NCi0gICAgRlhfSU5UMzIgbkJvcmRlclN0eWxlID0gUEJTX1NPTElEOw0KLSAgICBGWF9GTE9BVCBmQm9yZGVyV2lkdGggPSAxOw0KLSAgICBDUFZUX0Rhc2ggZHNCb3JkZXIoMywgMCwgMCk7DQotICAgIENQVlRfQ29sb3IgY3JMZWZ0VG9wLCBjclJpZ2h0Qm90dG9tOw0KLSAgICBpZiAoQ1BERl9EaWN0aW9uYXJ5ICogcEJTRGljdCA9IHBBbm5vdERpY3QtPkdldERpY3QoIkJTIikpIHsNCi0gICAgICAgIGlmIChwQlNEaWN0LT5LZXlFeGlzdCgiVyIpKSB7DQotICAgICAgICAgICAgZkJvcmRlcldpZHRoID0gcEJTRGljdC0+R2V0TnVtYmVyKCJXIik7DQotICAgICAgICB9DQotICAgICAgICBpZiAoQ1BERl9BcnJheSAqIHBBcnJheSA9IHBCU0RpY3QtPkdldEFycmF5KCJEIikpIHsNCi0gICAgICAgICAgICBkc0JvcmRlciA9IENQVlRfRGFzaChwQXJyYXktPkdldEludGVnZXIoMCksIHBBcnJheS0+R2V0SW50ZWdlcigxKSwgcEFycmF5LT5HZXRJbnRlZ2VyKDIpKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHN3aXRjaCAocEJTRGljdC0+R2V0U3RyaW5nKCJTIikuR2V0QXQoMCkpIHsNCi0gICAgICAgICAgICBjYXNlICdTJzoNCi0gICAgICAgICAgICAgICAgbkJvcmRlclN0eWxlID0gUEJTX1NPTElEOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlICdEJzoNCi0gICAgICAgICAgICAgICAgbkJvcmRlclN0eWxlID0gUEJTX0RBU0g7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgJ0InOg0KLSAgICAgICAgICAgICAgICBuQm9yZGVyU3R5bGUgPSBQQlNfQkVWRUxFRDsNCi0gICAgICAgICAgICAgICAgZkJvcmRlcldpZHRoICo9IDI7DQotICAgICAgICAgICAgICAgIGNyTGVmdFRvcCA9IENQVlRfQ29sb3IoQ1RfR1JBWSwgMSk7DQotICAgICAgICAgICAgICAgIGNyUmlnaHRCb3R0b20gPSBDUFZUX0NvbG9yKENUX0dSQVksIDAuNSk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgJ0knOg0KLSAgICAgICAgICAgICAgICBuQm9yZGVyU3R5bGUgPSBQQlNfSU5TRVQ7DQotICAgICAgICAgICAgICAgIGZCb3JkZXJXaWR0aCAqPSAyOw0KLSAgICAgICAgICAgICAgICBjckxlZnRUb3AgPSBDUFZUX0NvbG9yKENUX0dSQVksIDAuNSk7DQotICAgICAgICAgICAgICAgIGNyUmlnaHRCb3R0b20gPSBDUFZUX0NvbG9yKENUX0dSQVksIDAuNzUpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlICdVJzoNCi0gICAgICAgICAgICAgICAgbkJvcmRlclN0eWxlID0gUEJTX1VOREVSTElORUQ7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIENQVlRfQ29sb3IgY3JCb3JkZXIsIGNyQkc7DQotICAgIGlmIChDUERGX0RpY3Rpb25hcnkgKiBwTUtEaWN0ID0gcEFubm90RGljdC0+R2V0RGljdCgiTUsiKSkgew0KLSAgICAgICAgaWYgKENQREZfQXJyYXkgKiBwQXJyYXkgPSBwTUtEaWN0LT5HZXRBcnJheSgiQkMiKSkgew0KLSAgICAgICAgICAgIGNyQm9yZGVyID0gUGFyc2VDb2xvcigqcEFycmF5KTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChDUERGX0FycmF5ICogcEFycmF5ID0gcE1LRGljdC0+R2V0QXJyYXkoIkJHIikpIHsNCi0gICAgICAgICAgICBjckJHID0gUGFyc2VDb2xvcigqcEFycmF5KTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVRleHRCdWYgc0FwcFN0cmVhbTsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgc0JHID0gQ1BWVF9HZW5lcmF0ZUFQOjpHZW5lcmF0ZUNvbG9yQVAoY3JCRywgVFJVRSk7DQotICAgIGlmIChzQkcuR2V0TGVuZ3RoKCkgPiAwKSB7DQotICAgICAgICBzQXBwU3RyZWFtIDw8ICJxXG4iIDw8IHNCRyA8PCByY0JCb3gubGVmdCA8PCAiICIgPDwgcmNCQm94LmJvdHRvbSA8PCAiICINCi0gICAgICAgICAgICAgICAgICAgPDwgcmNCQm94LldpZHRoKCkgPDwgIiAiIDw8IHJjQkJveC5IZWlnaHQoKSA8PCAiIHJlIGZcbiIgPDwgIlFcbiI7DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgc0JvcmRlclN0cmVhbSA9IENQVlRfR2VuZXJhdGVBUDo6R2VuZXJhdGVCb3JkZXJBUChyY0JCb3gsIGZCb3JkZXJXaWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyQm9yZGVyLCBjckxlZnRUb3AsIGNyUmlnaHRCb3R0b20sIG5Cb3JkZXJTdHlsZSwgZHNCb3JkZXIpOw0KLSAgICBpZiAoc0JvcmRlclN0cmVhbS5HZXRMZW5ndGgoKSA+IDApIHsNCi0gICAgICAgIHNBcHBTdHJlYW0gPDwgInFcbiIgPDwgc0JvcmRlclN0cmVhbSA8PCAiUVxuIjsNCi0gICAgfQ0KLSAgICBDUERGX1JlY3QgcmNCb2R5ID0gQ1BERl9SZWN0KHJjQkJveC5sZWZ0ICsgZkJvcmRlcldpZHRoLCByY0JCb3guYm90dG9tICsgZkJvcmRlcldpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjQkJveC5yaWdodCAtIGZCb3JkZXJXaWR0aCwgcmNCQm94LnRvcCAtIGZCb3JkZXJXaWR0aCk7DQotICAgIHJjQm9keS5Ob3JtYWxpemUoKTsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwQVBEaWN0ID0gcEFubm90RGljdC0+R2V0RGljdCgiQVAiKTsNCi0gICAgaWYgKHBBUERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcEFQRGljdCA9IENQREZfRGljdGlvbmFyeTo6Q3JlYXRlKCk7DQotICAgICAgICBpZiAocEFQRGljdCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcEFubm90RGljdC0+U2V0QXQoIkFQIiwgcEFQRGljdCk7DQotICAgIH0NCi0gICAgQ1BERl9TdHJlYW0qIHBOb3JtYWxTdHJlYW0gPSBwQVBEaWN0LT5HZXRTdHJlYW0oIk4iKTsNCi0gICAgaWYgKHBOb3JtYWxTdHJlYW0gPT0gTlVMTCkgew0KLSAgICAgICAgcE5vcm1hbFN0cmVhbSA9IENQREZfU3RyZWFtOjpDcmVhdGUoTlVMTCwgMCwgTlVMTCk7DQotICAgICAgICBpZiAocE5vcm1hbFN0cmVhbSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfSU5UMzIgb2JqbnVtID0gcERvYy0+QWRkSW5kaXJlY3RPYmplY3QocE5vcm1hbFN0cmVhbSk7DQotICAgICAgICBwQW5ub3REaWN0LT5HZXREaWN0KCJBUCIpLT5TZXRBdFJlZmVyZW5jZSgiTiIsIHBEb2MsIG9iam51bSk7DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5ICogcFN0cmVhbURpY3QgPSBwTm9ybWFsU3RyZWFtLT5HZXREaWN0KCk7DQotICAgIGlmIChwU3RyZWFtRGljdCkgew0KLSAgICAgICAgcFN0cmVhbURpY3QtPlNldEF0TWF0cml4KCJNYXRyaXgiLCBtYXRyaXgpOw0KLSAgICAgICAgcFN0cmVhbURpY3QtPlNldEF0UmVjdCgiQkJveCIsIHJjQkJveCk7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBTdHJlYW1SZXNMaXN0ID0gcFN0cmVhbURpY3QtPkdldERpY3QoIlJlc291cmNlcyIpOw0KLSAgICAgICAgaWYgKHBTdHJlYW1SZXNMaXN0KSB7DQotICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwU3RyZWFtUmVzRm9udExpc3QgPSBwU3RyZWFtUmVzTGlzdC0+R2V0RGljdCgiRm9udCIpOw0KLSAgICAgICAgICAgIGlmICghcFN0cmVhbVJlc0ZvbnRMaXN0KSB7DQotICAgICAgICAgICAgICAgIHBTdHJlYW1SZXNGb250TGlzdCA9IENQREZfRGljdGlvbmFyeTo6Q3JlYXRlKCk7DQotICAgICAgICAgICAgICAgIGlmIChwU3RyZWFtUmVzRm9udExpc3QgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHBTdHJlYW1SZXNMaXN0LT5TZXRBdCgiRm9udCIsIHBTdHJlYW1SZXNGb250TGlzdCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmICghcFN0cmVhbVJlc0ZvbnRMaXN0LT5LZXlFeGlzdChzRm9udE5hbWUpKSB7DQotICAgICAgICAgICAgICAgIHBTdHJlYW1SZXNGb250TGlzdC0+U2V0QXRSZWZlcmVuY2Uoc0ZvbnROYW1lLCBwRG9jLCBwRm9udERpY3QpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcFN0cmVhbURpY3QtPlNldEF0KCJSZXNvdXJjZXMiLCBwRm9ybURpY3QtPkdldERpY3QoIkRSIiktPkNsb25lKCkpOw0KLSAgICAgICAgICAgIHBTdHJlYW1SZXNMaXN0ID0gcFN0cmVhbURpY3QtPkdldERpY3QoIlJlc291cmNlcyIpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHN3aXRjaCAobldpZGdldFR5cGUpIHsNCi0gICAgICAgIGNhc2UgMDogew0KLSAgICAgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyBzd1ZhbHVlID0gRlBERl9HZXRGaWVsZEF0dHIocEFubm90RGljdCwgIlYiKS0+R2V0VW5pY29kZVRleHQoKTsNCi0gICAgICAgICAgICAgICAgRlhfSU5UMzIgbkFsaWduID0gRlBERl9HZXRGaWVsZEF0dHIocEFubm90RGljdCwgIlEiKS0+R2V0SW50ZWdlcigpOw0KLSAgICAgICAgICAgICAgICBGWF9EV09SRCBkd0ZsYWdzID0gRlBERl9HZXRGaWVsZEF0dHIocEFubm90RGljdCwgIkZmIiktPkdldEludGVnZXIoKTsNCi0gICAgICAgICAgICAgICAgRlhfRFdPUkQgZHdNYXhMZW4gPSBGUERGX0dldEZpZWxkQXR0cihwQW5ub3REaWN0LCAiTWF4TGVuIiktPkdldEludGVnZXIoKTsNCi0gICAgICAgICAgICAgICAgQ1BWVF9Gb250TWFwIG1hcChwRG9jLCBwU3RyZWFtRGljdC0+R2V0RGljdCgiUmVzb3VyY2VzIiksIHBEZWZGb250LCBzRm9udE5hbWUuUmlnaHQoc0ZvbnROYW1lLkdldExlbmd0aCgpIC0gMSkpOw0KLSAgICAgICAgICAgICAgICBDUFZUX1Byb3ZpZGVyIHByZCgmbWFwKTsNCi0gICAgICAgICAgICAgICAgQ1BERl9WYXJpYWJsZVRleHQgdnQ7DQotICAgICAgICAgICAgICAgIHZ0LlNldFByb3ZpZGVyKCZwcmQpOw0KLSAgICAgICAgICAgICAgICB2dC5TZXRQbGF0ZVJlY3QocmNCb2R5KTsNCi0gICAgICAgICAgICAgICAgdnQuU2V0QWxpZ25tZW50KG5BbGlnbik7DQotICAgICAgICAgICAgICAgIGlmIChJc0Zsb2F0WmVybyhmRm9udFNpemUpKSB7DQotICAgICAgICAgICAgICAgICAgICB2dC5TZXRBdXRvRm9udFNpemUoVFJVRSk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICB2dC5TZXRGb250U2l6ZShmRm9udFNpemUpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIEZYX0JPT0wgYk11bHRpTGluZSA9IChkd0ZsYWdzID4+IDEyKSAmIDE7DQotICAgICAgICAgICAgICAgIGlmIChiTXVsdGlMaW5lKSB7DQotICAgICAgICAgICAgICAgICAgICB2dC5TZXRNdWx0aUxpbmUoVFJVRSk7DQotICAgICAgICAgICAgICAgICAgICB2dC5TZXRBdXRvUmV0dXJuKFRSVUUpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIEZYX1dPUkQgc3ViV29yZCA9IDA7DQotICAgICAgICAgICAgICAgIGlmICgoZHdGbGFncyA+PiAxMykgJiAxKSB7DQotICAgICAgICAgICAgICAgICAgICBzdWJXb3JkID0gJyonOw0KLSAgICAgICAgICAgICAgICAgICAgdnQuU2V0UGFzc3dvcmRDaGFyKHN1YldvcmQpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIEZYX0JPT0wgYkNoYXJBcnJheSA9IChkd0ZsYWdzID4+IDI0KSAmIDE7DQotICAgICAgICAgICAgICAgIGlmIChiQ2hhckFycmF5KSB7DQotICAgICAgICAgICAgICAgICAgICB2dC5TZXRDaGFyQXJyYXkoZHdNYXhMZW4pOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgdnQuU2V0TGltaXRDaGFyKGR3TWF4TGVuKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB2dC5Jbml0aWFsaXplKCk7DQotICAgICAgICAgICAgICAgIHZ0LlNldFRleHQoc3dWYWx1ZSk7DQotICAgICAgICAgICAgICAgIHZ0LlJlYXJyYW5nZUFsbCgpOw0KLSAgICAgICAgICAgICAgICBDUERGX1JlY3QgcmNDb250ZW50ID0gdnQuR2V0Q29udGVudFJlY3QoKTsNCi0gICAgICAgICAgICAgICAgQ1BERl9Qb2ludCBwdE9mZnNldCgwLjBmLCAwLjBmKTsNCi0gICAgICAgICAgICAgICAgaWYgKCFiTXVsdGlMaW5lKSB7DQotICAgICAgICAgICAgICAgICAgICBwdE9mZnNldCA9IENQREZfUG9pbnQoMC4wZiwgKHJjQ29udGVudC5IZWlnaHQoKSAtIHJjQm9keS5IZWlnaHQoKSkgLyAyLjBmKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBzQm9keSA9IENQVlRfR2VuZXJhdGVBUDo6R2VuZXJhdGVFZGl0QVAoJm1hcCwgdnQuR2V0SXRlcmF0b3IoKSwgcHRPZmZzZXQsICFiQ2hhckFycmF5LCBzdWJXb3JkKTsNCi0gICAgICAgICAgICAgICAgaWYgKHNCb2R5LkdldExlbmd0aCgpID4gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCAiL1R4IEJNQ1xuIiA8PCAicVxuIjsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChyY0NvbnRlbnQuV2lkdGgoKSA+IHJjQm9keS5XaWR0aCgpIHx8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjQ29udGVudC5IZWlnaHQoKSA+IHJjQm9keS5IZWlnaHQoKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgcmNCb2R5LmxlZnQgPDwgIiAiIDw8IHJjQm9keS5ib3R0b20gPDwgIiAiDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCByY0JvZHkuV2lkdGgoKSA8PCAiICIgPDwgcmNCb2R5LkhlaWdodCgpIDw8ICIgcmVcbldcbm5cbiI7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8ICJCVFxuIiA8PCBDUFZUX0dlbmVyYXRlQVA6OkdlbmVyYXRlQ29sb3JBUChjclRleHQsIFRSVUUpIDw8IHNCb2R5IDw8ICJFVFxuIiA8PCAiUVxuRU1DXG4iOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSAxOiB7DQotICAgICAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIHN3VmFsdWUgPSBGUERGX0dldEZpZWxkQXR0cihwQW5ub3REaWN0LCAiViIpLT5HZXRVbmljb2RlVGV4dCgpOw0KLSAgICAgICAgICAgICAgICBDUFZUX0ZvbnRNYXAgbWFwKHBEb2MsIHBTdHJlYW1EaWN0LT5HZXREaWN0KCJSZXNvdXJjZXMiKSwgcERlZkZvbnQsIHNGb250TmFtZS5SaWdodChzRm9udE5hbWUuR2V0TGVuZ3RoKCkgLSAxKSk7DQotICAgICAgICAgICAgICAgIENQVlRfUHJvdmlkZXIgcHJkKCZtYXApOw0KLSAgICAgICAgICAgICAgICBDUERGX1ZhcmlhYmxlVGV4dCB2dDsNCi0gICAgICAgICAgICAgICAgdnQuU2V0UHJvdmlkZXIoJnByZCk7DQotICAgICAgICAgICAgICAgIENQREZfUmVjdCByY0J1dHRvbiA9IHJjQm9keTsNCi0gICAgICAgICAgICAgICAgcmNCdXR0b24ubGVmdCA9IHJjQnV0dG9uLnJpZ2h0IC0gMTM7DQotICAgICAgICAgICAgICAgIHJjQnV0dG9uLk5vcm1hbGl6ZSgpOw0KLSAgICAgICAgICAgICAgICBDUERGX1JlY3QgcmNFZGl0ID0gcmNCb2R5Ow0KLSAgICAgICAgICAgICAgICByY0VkaXQucmlnaHQgPSByY0J1dHRvbi5sZWZ0Ow0KLSAgICAgICAgICAgICAgICByY0VkaXQuTm9ybWFsaXplKCk7DQotICAgICAgICAgICAgICAgIHZ0LlNldFBsYXRlUmVjdChyY0VkaXQpOw0KLSAgICAgICAgICAgICAgICBpZiAoSXNGbG9hdFplcm8oZkZvbnRTaXplKSkgew0KLSAgICAgICAgICAgICAgICAgICAgdnQuU2V0QXV0b0ZvbnRTaXplKFRSVUUpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgdnQuU2V0Rm9udFNpemUoZkZvbnRTaXplKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB2dC5Jbml0aWFsaXplKCk7DQotICAgICAgICAgICAgICAgIHZ0LlNldFRleHQoc3dWYWx1ZSk7DQotICAgICAgICAgICAgICAgIHZ0LlJlYXJyYW5nZUFsbCgpOw0KLSAgICAgICAgICAgICAgICBDUERGX1JlY3QgcmNDb250ZW50ID0gdnQuR2V0Q29udGVudFJlY3QoKTsNCi0gICAgICAgICAgICAgICAgQ1BERl9Qb2ludCBwdE9mZnNldCA9IENQREZfUG9pbnQoMC4wZiwgKHJjQ29udGVudC5IZWlnaHQoKSAtIHJjRWRpdC5IZWlnaHQoKSkgLyAyLjBmKTsNCi0gICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc0VkaXQgPSBDUFZUX0dlbmVyYXRlQVA6OkdlbmVyYXRlRWRpdEFQKCZtYXAsIHZ0LkdldEl0ZXJhdG9yKCksIHB0T2Zmc2V0LCBUUlVFLCAwKTsNCi0gICAgICAgICAgICAgICAgaWYgKHNFZGl0LkdldExlbmd0aCgpID4gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCAiL1R4IEJNQ1xuIiA8PCAicVxuIjsNCi0gICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgcmNFZGl0LmxlZnQgPDwgIiAiIDw8IHJjRWRpdC5ib3R0b20gPDwgIiAiDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHJjRWRpdC5XaWR0aCgpIDw8ICIgIiA8PCByY0VkaXQuSGVpZ2h0KCkgPDwgIiByZVxuV1xublxuIjsNCi0gICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgIkJUXG4iIDw8IENQVlRfR2VuZXJhdGVBUDo6R2VuZXJhdGVDb2xvckFQKGNyVGV4dCwgVFJVRSkgPDwgc0VkaXQgPDwgIkVUXG4iIDw8ICJRXG5FTUNcbiI7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc0J1dHRvbiA9IENQVlRfR2VuZXJhdGVBUDo6R2VuZXJhdGVDb2xvckFQKENQVlRfQ29sb3IoQ1RfUkdCLCAyMjAuMGYgLyAyNTUuMGYsIDIyMC4wZiAvIDI1NS4wZiwgMjIwLjBmIC8gMjU1LjBmKSwgVFJVRSk7DQotICAgICAgICAgICAgICAgIGlmIChzQnV0dG9uLkdldExlbmd0aCgpID4gMCAmJiAhcmNCdXR0b24uSXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8ICJxXG4iIDw8IHNCdXR0b247DQotICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IHJjQnV0dG9uLmxlZnQgPDwgIiAiIDw8IHJjQnV0dG9uLmJvdHRvbSA8PCAiICINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgcmNCdXR0b24uV2lkdGgoKSA8PCAiICIgPDwgcmNCdXR0b24uSGVpZ2h0KCkgPDwgIiByZSBmXG4iOw0KLSAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCAiUVxuIjsNCi0gICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIHNCdXR0b25Cb3JkZXIgPSBDUFZUX0dlbmVyYXRlQVA6OkdlbmVyYXRlQm9yZGVyQVAocmNCdXR0b24sIDIsIENQVlRfQ29sb3IoQ1RfR1JBWSwgMCksIENQVlRfQ29sb3IoQ1RfR1JBWSwgMSksIENQVlRfQ29sb3IoQ1RfR1JBWSwgMC41KSwgUEJTX0JFVkVMRUQsIENQVlRfRGFzaCgzLCAwLCAwKSk7DQotICAgICAgICAgICAgICAgICAgICBpZiAoc0J1dHRvbkJvcmRlci5HZXRMZW5ndGgoKSA+IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8ICJxXG4iIDw8IHNCdXR0b25Cb3JkZXIgPDwgIlFcbiI7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBDUERGX1BvaW50IHB0Q2VudGVyID0gQ1BERl9Qb2ludCgocmNCdXR0b24ubGVmdCArIHJjQnV0dG9uLnJpZ2h0KSAvIDIsIChyY0J1dHRvbi50b3AgKyByY0J1dHRvbi5ib3R0b20pIC8gMik7DQotICAgICAgICAgICAgICAgICAgICBpZiAoSXNGbG9hdEJpZ2dlcihyY0J1dHRvbi5XaWR0aCgpLCA2KSAmJiBJc0Zsb2F0QmlnZ2VyKHJjQnV0dG9uLkhlaWdodCgpLCA2KSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgInFcbiIgPDwgIiAwIGdcbiI7DQotICAgICAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBwdENlbnRlci54IC0gMyA8PCAiICIgPDwgcHRDZW50ZXIueSArIDEuNWYgPDwgIiBtXG4iOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgcHRDZW50ZXIueCArIDMgPDwgIiAiIDw8IHB0Q2VudGVyLnkgKyAxLjVmIDw8ICIgbFxuIjsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IHB0Q2VudGVyLnggPDwgIiAiIDw8IHB0Q2VudGVyLnkgLSAxLjVmIDw8ICIgbFxuIjsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IHB0Q2VudGVyLnggLSAzIDw8ICIgIiA8PCBwdENlbnRlci55ICsgMS41ZiA8PCAiIGwgZlxuIjsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IHNCdXR0b24gPDwgIlFcbiI7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIDI6IHsNCi0gICAgICAgICAgICAgICAgQ1BWVF9Gb250TWFwIG1hcChwRG9jLCBwU3RyZWFtRGljdC0+R2V0RGljdCgiUmVzb3VyY2VzIiksIHBEZWZGb250LCBzRm9udE5hbWUuUmlnaHQoc0ZvbnROYW1lLkdldExlbmd0aCgpIC0gMSkpOw0KLSAgICAgICAgICAgICAgICBDUFZUX1Byb3ZpZGVyIHByZCgmbWFwKTsNCi0gICAgICAgICAgICAgICAgQ1BERl9BcnJheSAqIHBPcHRzID0gRlBERl9HZXRGaWVsZEF0dHIocEFubm90RGljdCwgIk9wdCIpLT5HZXRBcnJheSgpOw0KLSAgICAgICAgICAgICAgICBDUERGX0FycmF5ICogcFNlbHMgPSBGUERGX0dldEZpZWxkQXR0cihwQW5ub3REaWN0LCAiSSIpLT5HZXRBcnJheSgpOw0KLSAgICAgICAgICAgICAgICBGWF9JTlQzMiBuVG9wID0gRlBERl9HZXRGaWVsZEF0dHIocEFubm90RGljdCwgIlRJIiktPkdldEludGVnZXIoKTsNCi0gICAgICAgICAgICAgICAgQ0ZYX0J5dGVUZXh0QnVmIHNCb2R5Ow0KLSAgICAgICAgICAgICAgICBpZiAocE9wdHMpIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIGZ5ID0gcmNCb2R5LnRvcDsNCi0gICAgICAgICAgICAgICAgICAgIGZvciAoRlhfSU5UMzIgaSA9IG5Ub3AsIHN6ID0gcE9wdHMtPkdldENvdW50KCk7IGkgPCBzejsgaSsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzRmxvYXRTbWFsbGVyKGZ5LCByY0JvZHkuYm90dG9tKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKENQREZfT2JqZWN0KiBwT3B0ID0gcE9wdHMtPkdldEVsZW1lbnRWYWx1ZShpKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyBzd0l0ZW07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwT3B0LT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUklORykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dJdGVtID0gcE9wdC0+R2V0VW5pY29kZVRleHQoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwT3B0LT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd0l0ZW0gPSAoKENQREZfQXJyYXkqKXBPcHQpLT5HZXRFbGVtZW50VmFsdWUoMSktPkdldFVuaWNvZGVUZXh0KCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiU2VsZWN0ZWQgPSBGQUxTRTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBTZWxzKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEZYX0RXT1JEIHMgPSAwLCBzc3ogPSBwU2Vscy0+R2V0Q291bnQoKTsgcyA8IHNzejsgcysrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gcFNlbHMtPkdldEludGVnZXIocykpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYlNlbGVjdGVkID0gVFJVRTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfVmFyaWFibGVUZXh0IHZ0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dC5TZXRQcm92aWRlcigmcHJkKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdnQuU2V0UGxhdGVSZWN0KENQREZfUmVjdChyY0JvZHkubGVmdCwgMC4wZiwgcmNCb2R5LnJpZ2h0LCAwLjBmKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc0Zsb2F0WmVybyhmRm9udFNpemUpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dC5TZXRGb250U2l6ZSgxMi4wZik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dC5TZXRGb250U2l6ZShmRm9udFNpemUpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0LkluaXRpYWxpemUoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdnQuU2V0VGV4dChzd0l0ZW0pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dC5SZWFycmFuZ2VBbGwoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQgZkl0ZW1IZWlnaHQgPSB2dC5HZXRDb250ZW50UmVjdCgpLkhlaWdodCgpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYlNlbGVjdGVkKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX1JlY3QgcmNJdGVtID0gQ1BERl9SZWN0KHJjQm9keS5sZWZ0LCBmeSAtIGZJdGVtSGVpZ2h0LCByY0JvZHkucmlnaHQsIGZ5KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNCb2R5IDw8ICJxXG4iIDw8IENQVlRfR2VuZXJhdGVBUDo6R2VuZXJhdGVDb2xvckFQKENQVlRfQ29sb3IoQ1RfUkdCLCAwLCA1MS4wZiAvIDI1NS4wZiwgMTEzLjBmIC8gMjU1LjBmKSwgVFJVRSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHJjSXRlbS5sZWZ0IDw8ICIgIiA8PCByY0l0ZW0uYm90dG9tIDw8ICIgIiA8PCByY0l0ZW0uV2lkdGgoKSA8PCAiICIgPDwgcmNJdGVtLkhlaWdodCgpIDw8ICIgcmUgZlxuIiA8PCAiUVxuIjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNCb2R5IDw8ICJCVFxuIiA8PCBDUFZUX0dlbmVyYXRlQVA6OkdlbmVyYXRlQ29sb3JBUChDUFZUX0NvbG9yKENUX0dSQVksIDEpLCBUUlVFKSA8PCBDUFZUX0dlbmVyYXRlQVA6OkdlbmVyYXRlRWRpdEFQKCZtYXAsIHZ0LkdldEl0ZXJhdG9yKCksIENQREZfUG9pbnQoMC4wZiwgZnkpLCBUUlVFLCAwKSA8PCAiRVRcbiI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzQm9keSA8PCAiQlRcbiIgPDwgQ1BWVF9HZW5lcmF0ZUFQOjpHZW5lcmF0ZUNvbG9yQVAoY3JUZXh0LCBUUlVFKSA8PCBDUFZUX0dlbmVyYXRlQVA6OkdlbmVyYXRlRWRpdEFQKCZtYXAsIHZ0LkdldEl0ZXJhdG9yKCksIENQREZfUG9pbnQoMC4wZiwgZnkpLCBUUlVFLCAwKSA8PCAiRVRcbiI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnkgLT0gZkl0ZW1IZWlnaHQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChzQm9keS5HZXRTaXplKCkgPiAwKSB7DQotICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8ICIvVHggQk1DXG4iIDw8ICJxXG4iOw0KLSAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCByY0JvZHkubGVmdCA8PCAiICIgPDwgcmNCb2R5LmJvdHRvbSA8PCAiICINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgcmNCb2R5LldpZHRoKCkgPDwgIiAiIDw8IHJjQm9keS5IZWlnaHQoKSA8PCAiIHJlXG5XXG5uXG4iOw0KLSAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBzQm9keS5HZXRCeXRlU3RyaW5nKCkgPDwgIlFcbkVNQ1xuIjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBicmVhazsNCi0gICAgfQ0KLSAgICBpZiAocE5vcm1hbFN0cmVhbSkgew0KLSAgICAgICAgcE5vcm1hbFN0cmVhbS0+U2V0RGF0YSgoRlhfQllURSopc0FwcFN0cmVhbS5HZXRCdWZmZXIoKSwgc0FwcFN0cmVhbS5HZXRTaXplKCksIEZBTFNFLCBGQUxTRSk7DQotICAgICAgICBwU3RyZWFtRGljdCA9IHBOb3JtYWxTdHJlYW0tPkdldERpY3QoKTsNCi0gICAgICAgIGlmIChwU3RyZWFtRGljdCkgew0KLSAgICAgICAgICAgIHBTdHJlYW1EaWN0LT5TZXRBdE1hdHJpeCgiTWF0cml4IiwgbWF0cml4KTsNCi0gICAgICAgICAgICBwU3RyZWFtRGljdC0+U2V0QXRSZWN0KCJCQm94IiwgcmNCQm94KTsNCi0gICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBTdHJlYW1SZXNMaXN0ID0gcFN0cmVhbURpY3QtPkdldERpY3QoIlJlc291cmNlcyIpOw0KLSAgICAgICAgICAgIGlmIChwU3RyZWFtUmVzTGlzdCkgew0KLSAgICAgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBTdHJlYW1SZXNGb250TGlzdCA9IHBTdHJlYW1SZXNMaXN0LT5HZXREaWN0KCJGb250Iik7DQotICAgICAgICAgICAgICAgIGlmICghcFN0cmVhbVJlc0ZvbnRMaXN0KSB7DQotICAgICAgICAgICAgICAgICAgICBwU3RyZWFtUmVzRm9udExpc3QgPSBDUERGX0RpY3Rpb25hcnk6OkNyZWF0ZSgpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBTdHJlYW1SZXNGb250TGlzdCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgcFN0cmVhbVJlc0xpc3QtPlNldEF0KCJGb250IiwgcFN0cmVhbVJlc0ZvbnRMaXN0KTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoIXBTdHJlYW1SZXNGb250TGlzdC0+S2V5RXhpc3Qoc0ZvbnROYW1lKSkgew0KLSAgICAgICAgICAgICAgICAgICAgcFN0cmVhbVJlc0ZvbnRMaXN0LT5TZXRBdFJlZmVyZW5jZShzRm9udE5hbWUsIHBEb2MsIHBGb250RGljdCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBwU3RyZWFtRGljdC0+U2V0QXQoIlJlc291cmNlcyIsIHBGb3JtRGljdC0+R2V0RGljdCgiRFIiKS0+Q2xvbmUoKSk7DQotICAgICAgICAgICAgICAgIHBTdHJlYW1SZXNMaXN0ID0gcFN0cmVhbURpY3QtPkdldERpY3QoIlJlc291cmNlcyIpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDUFZUX0dlbmVyYXRlQVA6OkdlbmVyYXRlVGV4dEZpZWxkQVAoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9EaWN0aW9uYXJ5KiBwQW5ub3REaWN0KQ0KLXsNCi0gICAgcmV0dXJuIEdlbmVyYXRlV2lkZ2V0QVAocERvYywgcEFubm90RGljdCwgMCk7DQotfQ0KLUZYX0JPT0wgQ1BWVF9HZW5lcmF0ZUFQOjpHZW5lcmF0ZUNvbWJvQm94QVAoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9EaWN0aW9uYXJ5KiBwQW5ub3REaWN0KQ0KLXsNCi0gICAgcmV0dXJuIEdlbmVyYXRlV2lkZ2V0QVAocERvYywgcEFubm90RGljdCwgMSk7DQotfQ0KLUZYX0JPT0wgQ1BWVF9HZW5lcmF0ZUFQOjpHZW5lcmF0ZUxpc3RCb3hBUChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpY3QpDQotew0KLSAgICByZXR1cm4gR2VuZXJhdGVXaWRnZXRBUChwRG9jLCBwQW5ub3REaWN0LCAyKTsNCi19DQotQ0ZYX0J5dGVTdHJpbmcgQ1BWVF9HZW5lcmF0ZUFQOjpHZW5lcmF0ZUVkaXRBUChJUFZUX0ZvbnRNYXAgKiBwRm9udE1hcCwgSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IqIHBJdGVyYXRvciwgY29uc3QgQ1BERl9Qb2ludCAmIHB0T2Zmc2V0LCBGWF9CT09MIGJDb250aW51b3VzLCBGWF9XT1JEIFN1YldvcmQsIGNvbnN0IENQVlRfV29yZFJhbmdlICogcFZpc2libGUpDQotew0KLSAgICBDRlhfQnl0ZVRleHRCdWYgc0VkaXRTdHJlYW0sIHNMaW5lU3RyZWFtLCBzV29yZHM7DQotICAgIENQREZfUG9pbnQgcHRPbGQoMC4wZiwgMC4wZiksIHB0TmV3KDAuMGYsIDAuMGYpOw0KLSAgICBGWF9JTlQzMiBuQ3VyRm9udEluZGV4ID0gLTE7DQotICAgIGlmIChwSXRlcmF0b3IpIHsNCi0gICAgICAgIGlmIChwVmlzaWJsZSkgew0KLSAgICAgICAgICAgIHBJdGVyYXRvci0+U2V0QXQocFZpc2libGUtPkJlZ2luUG9zKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcEl0ZXJhdG9yLT5TZXRBdCgwKTsNCi0gICAgICAgIH0NCi0gICAgICAgIENQVlRfV29yZFBsYWNlIG9sZHBsYWNlOw0KLSAgICAgICAgd2hpbGUgKHBJdGVyYXRvci0+TmV4dFdvcmQoKSkgew0KLSAgICAgICAgICAgIENQVlRfV29yZFBsYWNlIHBsYWNlID0gcEl0ZXJhdG9yLT5HZXRBdCgpOw0KLSAgICAgICAgICAgIGlmIChwVmlzaWJsZSAmJiBwbGFjZS5Xb3JkQ21wKHBWaXNpYmxlLT5FbmRQb3MpID4gMCkgew0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGJDb250aW51b3VzKSB7DQotICAgICAgICAgICAgICAgIGlmIChwbGFjZS5MaW5lQ21wKG9sZHBsYWNlKSAhPSAwKSB7DQotICAgICAgICAgICAgICAgICAgICBpZiAoc1dvcmRzLkdldFNpemUoKSA+IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzTGluZVN0cmVhbSA8PCBHZXRXb3JkUmVuZGVyU3RyaW5nKHNXb3Jkcy5HZXRCeXRlU3RyaW5nKCkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNFZGl0U3RyZWFtIDw8IHNMaW5lU3RyZWFtOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNMaW5lU3RyZWFtLkNsZWFyKCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgc1dvcmRzLkNsZWFyKCk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBDUFZUX1dvcmQgd29yZDsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBwdE5ldyA9IENQREZfUG9pbnQod29yZC5wdFdvcmQueCArIHB0T2Zmc2V0LngsIHdvcmQucHRXb3JkLnkgKyBwdE9mZnNldC55KTsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ1BWVF9MaW5lIGxpbmU7DQotICAgICAgICAgICAgICAgICAgICAgICAgcEl0ZXJhdG9yLT5HZXRMaW5lKGxpbmUpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHB0TmV3ID0gQ1BERl9Qb2ludChsaW5lLnB0TGluZS54ICsgcHRPZmZzZXQueCwgbGluZS5wdExpbmUueSArIHB0T2Zmc2V0LnkpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHB0TmV3LnggIT0gcHRPbGQueCB8fCBwdE5ldy55ICE9IHB0T2xkLnkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzTGluZVN0cmVhbSA8PCBwdE5ldy54IC0gcHRPbGQueCA8PCAiICIgPDwgcHROZXcueSAtIHB0T2xkLnkgPDwgIiBUZFxuIjsNCi0gICAgICAgICAgICAgICAgICAgICAgICBwdE9sZCA9IHB0TmV3Ow0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIENQVlRfV29yZCB3b3JkOw0KLSAgICAgICAgICAgICAgICBpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmQpKSB7DQotICAgICAgICAgICAgICAgICAgICBpZiAod29yZC5uRm9udEluZGV4ICE9IG5DdXJGb250SW5kZXgpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc1dvcmRzLkdldFNpemUoKSA+IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc0xpbmVTdHJlYW0gPDwgR2V0V29yZFJlbmRlclN0cmluZyhzV29yZHMuR2V0Qnl0ZVN0cmluZygpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc1dvcmRzLkNsZWFyKCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNMaW5lU3RyZWFtIDw8IEdldEZvbnRTZXRTdHJpbmcocEZvbnRNYXAsIHdvcmQubkZvbnRJbmRleCwgd29yZC5mRm9udFNpemUpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5DdXJGb250SW5kZXggPSB3b3JkLm5Gb250SW5kZXg7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBzV29yZHMgPDwgR2V0UERGV29yZFN0cmluZyhwRm9udE1hcCwgbkN1ckZvbnRJbmRleCwgd29yZC5Xb3JkLCBTdWJXb3JkKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBvbGRwbGFjZSA9IHBsYWNlOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIENQVlRfV29yZCB3b3JkOw0KLSAgICAgICAgICAgICAgICBpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmQpKSB7DQotICAgICAgICAgICAgICAgICAgICBwdE5ldyA9IENQREZfUG9pbnQod29yZC5wdFdvcmQueCArIHB0T2Zmc2V0LngsIHdvcmQucHRXb3JkLnkgKyBwdE9mZnNldC55KTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwdE5ldy54ICE9IHB0T2xkLnggfHwgcHROZXcueSAhPSBwdE9sZC55KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgc0VkaXRTdHJlYW0gPDwgcHROZXcueCAtIHB0T2xkLnggPDwgIiAiIDw8IHB0TmV3LnkgLSBwdE9sZC55IDw8ICIgVGRcbiI7DQotICAgICAgICAgICAgICAgICAgICAgICAgcHRPbGQgPSBwdE5ldzsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGlmICh3b3JkLm5Gb250SW5kZXggIT0gbkN1ckZvbnRJbmRleCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNFZGl0U3RyZWFtIDw8IEdldEZvbnRTZXRTdHJpbmcocEZvbnRNYXAsIHdvcmQubkZvbnRJbmRleCwgd29yZC5mRm9udFNpemUpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5DdXJGb250SW5kZXggPSB3b3JkLm5Gb250SW5kZXg7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBzRWRpdFN0cmVhbSA8PCBHZXRXb3JkUmVuZGVyU3RyaW5nKEdldFBERldvcmRTdHJpbmcocEZvbnRNYXAsIG5DdXJGb250SW5kZXgsIHdvcmQuV29yZCwgU3ViV29yZCkpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHNXb3Jkcy5HZXRTaXplKCkgPiAwKSB7DQotICAgICAgICAgICAgc0xpbmVTdHJlYW0gPDwgR2V0V29yZFJlbmRlclN0cmluZyhzV29yZHMuR2V0Qnl0ZVN0cmluZygpKTsNCi0gICAgICAgICAgICBzRWRpdFN0cmVhbSA8PCBzTGluZVN0cmVhbTsNCi0gICAgICAgICAgICBzV29yZHMuQ2xlYXIoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gc0VkaXRTdHJlYW0uR2V0Qnl0ZVN0cmluZygpOw0KLX0NCi1DRlhfQnl0ZVN0cmluZyBDUFZUX0dlbmVyYXRlQVA6OkdlbmVyYXRlQm9yZGVyQVAoY29uc3QgQ1BERl9SZWN0ICYgcmVjdCwgRlhfRkxPQVQgZldpZHRoLA0KLSAgICAgICAgY29uc3QgQ1BWVF9Db2xvciAmIGNvbG9yLCBjb25zdCBDUFZUX0NvbG9yICYgY3JMZWZ0VG9wLCBjb25zdCBDUFZUX0NvbG9yICYgY3JSaWdodEJvdHRvbSwNCi0gICAgICAgIEZYX0lOVDMyIG5TdHlsZSwgY29uc3QgQ1BWVF9EYXNoICYgZGFzaCkNCi17DQotICAgIENGWF9CeXRlVGV4dEJ1ZiBzQXBwU3RyZWFtOw0KLSAgICBDRlhfQnl0ZVN0cmluZyBzQ29sb3I7DQotICAgIEZYX0ZMT0FUIGZMZWZ0ID0gcmVjdC5sZWZ0Ow0KLSAgICBGWF9GTE9BVCBmUmlnaHQgPSByZWN0LnJpZ2h0Ow0KLSAgICBGWF9GTE9BVCBmVG9wID0gcmVjdC50b3A7DQotICAgIEZYX0ZMT0FUIGZCb3R0b20gPSByZWN0LmJvdHRvbTsNCi0gICAgaWYgKGZXaWR0aCA+IDAuMGYpIHsNCi0gICAgICAgIEZYX0ZMT0FUIGZIYWxmV2lkdGggPSBmV2lkdGggLyAyLjBmOw0KLSAgICAgICAgc3dpdGNoIChuU3R5bGUpIHsNCi0gICAgICAgICAgICBkZWZhdWx0Og0KLSAgICAgICAgICAgIGNhc2UgUEJTX1NPTElEOg0KLSAgICAgICAgICAgICAgICBzQ29sb3IgPSBHZW5lcmF0ZUNvbG9yQVAoY29sb3IsIFRSVUUpOw0KLSAgICAgICAgICAgICAgICBpZiAoc0NvbG9yLkdldExlbmd0aCgpID4gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBzQ29sb3I7DQotICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IGZMZWZ0IDw8ICIgIiA8PCBmQm90dG9tIDw8ICIgIiA8PCBmUmlnaHQgLSBmTGVmdCA8PCAiICIgPDwgZlRvcCAtIGZCb3R0b20gPDwgIiByZVxuIjsNCi0gICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgZkxlZnQgKyBmV2lkdGggPDwgIiAiIDw8IGZCb3R0b20gKyBmV2lkdGggPDwgIiAiDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZSaWdodCAtIGZMZWZ0IC0gZldpZHRoICogMiA8PCAiICIgPDwgZlRvcCAtIGZCb3R0b20gLSBmV2lkdGggKiAyIDw8ICIgcmVcbiI7DQotICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8ICJmKlxuIjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIFBCU19EQVNIOg0KLSAgICAgICAgICAgICAgICBzQ29sb3IgPSBHZW5lcmF0ZUNvbG9yQVAoY29sb3IsIEZBTFNFKTsNCi0gICAgICAgICAgICAgICAgaWYgKHNDb2xvci5HZXRMZW5ndGgoKSA+IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgc0NvbG9yOw0KLSAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBmV2lkdGggPDwgIiB3IiA8PCAiIFsiIDw8IGRhc2gubkRhc2ggPDwgIiAiIDw8IGRhc2gubkdhcCA8PCAiXSAiIDw8IGRhc2gublBoYXNlIDw8ICIgZFxuIjsNCi0gICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgZkxlZnQgKyBmV2lkdGggLyAyIDw8ICIgIiA8PCBmQm90dG9tICsgZldpZHRoIC8gMiA8PCAiIG1cbiI7DQotICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IGZMZWZ0ICsgZldpZHRoIC8gMiA8PCAiICIgPDwgZlRvcCAtIGZXaWR0aCAvIDIgPDwgIiBsXG4iOw0KLSAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBmUmlnaHQgLSBmV2lkdGggLyAyIDw8ICIgIiA8PCBmVG9wIC0gZldpZHRoIC8gMiA8PCAiIGxcbiI7DQotICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IGZSaWdodCAtIGZXaWR0aCAvIDIgPDwgIiAiIDw8IGZCb3R0b20gKyBmV2lkdGggLyAyIDw8ICIgbFxuIjsNCi0gICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgZkxlZnQgKyBmV2lkdGggLyAyIDw8ICIgIiA8PCBmQm90dG9tICsgZldpZHRoIC8gMiA8PCAiIGwgU1xuIjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIFBCU19CRVZFTEVEOg0KLSAgICAgICAgICAgIGNhc2UgUEJTX0lOU0VUOg0KLSAgICAgICAgICAgICAgICBzQ29sb3IgPSBHZW5lcmF0ZUNvbG9yQVAoY3JMZWZ0VG9wLCBUUlVFKTsNCi0gICAgICAgICAgICAgICAgaWYgKHNDb2xvci5HZXRMZW5ndGgoKSA+IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgc0NvbG9yOw0KLSAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBmTGVmdCArIGZIYWxmV2lkdGggPDwgIiAiIDw8IGZCb3R0b20gKyBmSGFsZldpZHRoIDw8ICIgbVxuIjsNCi0gICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgZkxlZnQgKyBmSGFsZldpZHRoIDw8ICIgIiA8PCBmVG9wIC0gZkhhbGZXaWR0aCA8PCAiIGxcbiI7DQotICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IGZSaWdodCAtIGZIYWxmV2lkdGggPDwgIiAiIDw8IGZUb3AgLSBmSGFsZldpZHRoIDw8ICIgbFxuIjsNCi0gICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgZlJpZ2h0IC0gZkhhbGZXaWR0aCAqIDIgPDwgIiAiIDw8IGZUb3AgLSBmSGFsZldpZHRoICogMiA8PCAiIGxcbiI7DQotICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IGZMZWZ0ICsgZkhhbGZXaWR0aCAqIDIgPDwgIiAiIDw8IGZUb3AgLSBmSGFsZldpZHRoICogMiA8PCAiIGxcbiI7DQotICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IGZMZWZ0ICsgZkhhbGZXaWR0aCAqIDIgPDwgIiAiIDw8IGZCb3R0b20gKyBmSGFsZldpZHRoICogMiA8PCAiIGwgZlxuIjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBzQ29sb3IgPSBHZW5lcmF0ZUNvbG9yQVAoY3JSaWdodEJvdHRvbSwgVFJVRSk7DQotICAgICAgICAgICAgICAgIGlmIChzQ29sb3IuR2V0TGVuZ3RoKCkgPiAwKSB7DQotICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IHNDb2xvcjsNCi0gICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgZlJpZ2h0IC0gZkhhbGZXaWR0aCA8PCAiICIgPDwJZlRvcCAtIGZIYWxmV2lkdGggPDwgIiBtXG4iOw0KLSAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBmUmlnaHQgLSBmSGFsZldpZHRoIDw8ICIgIiA8PAlmQm90dG9tICsgZkhhbGZXaWR0aCA8PCAiIGxcbiI7DQotICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IGZMZWZ0ICsgZkhhbGZXaWR0aCA8PCAiICIgPDwgCWZCb3R0b20gKyBmSGFsZldpZHRoIDw8ICIgbFxuIjsNCi0gICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgZkxlZnQgKyBmSGFsZldpZHRoICogMiA8PCAiICIgPDwgZkJvdHRvbSArIGZIYWxmV2lkdGggKiAyIDw8ICIgbFxuIjsNCi0gICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgZlJpZ2h0IC0gZkhhbGZXaWR0aCAqIDIgPDwgIiAiIDw8IGZCb3R0b20gKyBmSGFsZldpZHRoICogMiA8PCAiIGxcbiI7DQotICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IGZSaWdodCAtIGZIYWxmV2lkdGggKiAyIDw8ICIgIiA8PCBmVG9wIC0gZkhhbGZXaWR0aCAqIDIgPDwgIiBsIGZcbiI7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgc0NvbG9yID0gR2VuZXJhdGVDb2xvckFQKGNvbG9yLCBUUlVFKTsNCi0gICAgICAgICAgICAgICAgaWYgKHNDb2xvci5HZXRMZW5ndGgoKSA+IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgc0NvbG9yOw0KLSAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBmTGVmdCA8PCAiICIgPDwgZkJvdHRvbSA8PCAiICIgPDwJZlJpZ2h0IC0gZkxlZnQgPDwgIiAiIDw8IGZUb3AgLSBmQm90dG9tIDw8ICIgcmVcbiI7DQotICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IGZMZWZ0ICsgZkhhbGZXaWR0aCA8PCAiICIgPDwgZkJvdHRvbSArIGZIYWxmV2lkdGggPDwgIiAiDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZSaWdodCAtIGZMZWZ0IC0gZkhhbGZXaWR0aCAqIDIgPDwgIiAiIDw8IGZUb3AgLSBmQm90dG9tIC0gZkhhbGZXaWR0aCAqIDIgPDwgIiByZSBmKlxuIjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIFBCU19VTkRFUkxJTkVEOg0KLSAgICAgICAgICAgICAgICBzQ29sb3IgPSBHZW5lcmF0ZUNvbG9yQVAoY29sb3IsIEZBTFNFKTsNCi0gICAgICAgICAgICAgICAgaWYgKHNDb2xvci5HZXRMZW5ndGgoKSA+IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgc0NvbG9yOw0KLSAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBmV2lkdGggPDwgIiB3XG4iOw0KLSAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBmTGVmdCA8PCAiICIgPDwgZkJvdHRvbSArIGZXaWR0aCAvIDIgPDwgIiBtXG4iOw0KLSAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBmUmlnaHQgPDwgIiAiIDw8IGZCb3R0b20gKyBmV2lkdGggLyAyIDw8ICIgbCBTXG4iOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBzQXBwU3RyZWFtLkdldEJ5dGVTdHJpbmcoKTsNCi19DQotQ0ZYX0J5dGVTdHJpbmcgQ1BWVF9HZW5lcmF0ZUFQOjpHZW5lcmF0ZUNvbG9yQVAoY29uc3QgQ1BWVF9Db2xvciAmIGNvbG9yLCBjb25zdCBGWF9CT09MICYgYkZpbGxPclN0cm9rZSkNCi17DQotICAgIENGWF9CeXRlVGV4dEJ1ZiBzQ29sb3JTdHJlYW07DQotICAgIHN3aXRjaCAoY29sb3IubkNvbG9yVHlwZSkgew0KLSAgICAgICAgY2FzZSBDVF9SR0I6DQotICAgICAgICAgICAgc0NvbG9yU3RyZWFtIDw8IGNvbG9yLmZDb2xvcjEgPDwgIiAiIDw8IGNvbG9yLmZDb2xvcjIgPDwgIiAiIDw8IGNvbG9yLmZDb2xvcjMgPDwgIiAiDQotICAgICAgICAgICAgICAgICAgICAgICAgIDw8IChiRmlsbE9yU3Ryb2tlID8gInJnIiA6ICJSRyIpIDw8ICJcbiI7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIENUX0dSQVk6DQotICAgICAgICAgICAgc0NvbG9yU3RyZWFtIDw8IGNvbG9yLmZDb2xvcjEgPDwgIiAiIDw8IChiRmlsbE9yU3Ryb2tlID8gImciIDogIkciKSA8PCAiXG4iOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBDVF9DTVlLOg0KLSAgICAgICAgICAgIHNDb2xvclN0cmVhbSA8PCBjb2xvci5mQ29sb3IxIDw8ICIgIiA8PCBjb2xvci5mQ29sb3IyIDw8ICIgIiA8PCBjb2xvci5mQ29sb3IzIDw8ICIgIiA8PCBjb2xvci5mQ29sb3I0IDw8ICIgIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICA8PCAoYkZpbGxPclN0cm9rZSA/ICJrIiA6ICJLIikgPDwgIlxuIjsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgfQ0KLSAgICByZXR1cm4gc0NvbG9yU3RyZWFtLkdldEJ5dGVTdHJpbmcoKTsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmRvYy9mcGRmX2RvYy5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmRvYy9mcGRmX3Z0LmgiCisjaW5jbHVkZSAicGRmX3Z0LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mcGRmZG9jL2ZwZGZfYXAuaCIKK0ZYX0JPT0wgRlBERl9HZW5lcmF0ZUFQKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfRGljdGlvbmFyeSogcEFubm90RGljdCkKK3sKKyAgICBpZiAocEFubm90RGljdC0+R2V0Q29uc3RTdHJpbmcoIlN1YnR5cGUiKSAhPSBGWF9CU1RSQygiV2lkZ2V0IikpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDRlhfQnl0ZVN0cmluZyBmaWVsZF90eXBlID0gRlBERl9HZXRGaWVsZEF0dHIocEFubm90RGljdCwgIkZUIiktPkdldFN0cmluZygpOworICAgIEZYX0RXT1JEIGZsYWdzID0gRlBERl9HZXRGaWVsZEF0dHIocEFubm90RGljdCwgIkZmIiktPkdldEludGVnZXIoKTsKKyAgICBpZiAoZmllbGRfdHlwZSA9PSAiVHgiKSB7CisgICAgICAgIHJldHVybiBDUFZUX0dlbmVyYXRlQVA6OkdlbmVyYXRlVGV4dEZpZWxkQVAocERvYywgcEFubm90RGljdCk7CisgICAgfSBlbHNlIGlmIChmaWVsZF90eXBlID09ICJDaCIpIHsKKyAgICAgICAgaWYgKGZsYWdzICYgKDEgPDwgMTcpKSB7CisgICAgICAgICAgICByZXR1cm4gQ1BWVF9HZW5lcmF0ZUFQOjpHZW5lcmF0ZUNvbWJvQm94QVAocERvYywgcEFubm90RGljdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gQ1BWVF9HZW5lcmF0ZUFQOjpHZW5lcmF0ZUxpc3RCb3hBUChwRG9jLCBwQW5ub3REaWN0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZmllbGRfdHlwZSA9PSAiQnRuIikgeworICAgICAgICBpZiAoIShmbGFncyAmICgxIDw8IDE2KSkpIHsKKyAgICAgICAgICAgIGlmICghcEFubm90RGljdC0+S2V5RXhpc3QoIkFTIikpIHsKKyAgICAgICAgICAgICAgICBpZiAoQ1BERl9EaWN0aW9uYXJ5KiBwUGFyZW50RGljdCA9IHBBbm5vdERpY3QtPkdldERpY3QoIlBhcmVudCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwUGFyZW50RGljdC0+S2V5RXhpc3QoIkFTIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBBbm5vdERpY3QtPlNldEF0U3RyaW5nKCJBUyIsIHBQYXJlbnREaWN0LT5HZXRTdHJpbmcoIkFTIikpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK2NsYXNzIENQVlRfRm9udE1hcCA6IHB1YmxpYyBJUFZUX0ZvbnRNYXAKK3sKK3B1YmxpYzoKKyAgICBDUFZUX0ZvbnRNYXAoQ1BERl9Eb2N1bWVudCAqIHBEb2MsIENQREZfRGljdGlvbmFyeSAqIHBSZXNEaWN0LCBDUERGX0ZvbnQgKiBwRGVmRm9udCwKKyAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0J5dGVTdHJpbmcgJiBzRGVmRm9udEFsaWFzKTsKKyAgICB2aXJ0dWFsIH5DUFZUX0ZvbnRNYXAoKTsKKyAgICBDUERGX0ZvbnQqCQkJCQkJR2V0UERGRm9udChGWF9JTlQzMiBuRm9udEluZGV4KTsKKyAgICBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0UERGRm9udEFsaWFzKEZYX0lOVDMyIG5Gb250SW5kZXgpOworICAgIHN0YXRpYyB2b2lkCQkJCQkJR2V0QW5ub3RTeXNQREZGb250KENQREZfRG9jdW1lbnQgKiBwRG9jLCBDUERGX0RpY3Rpb25hcnkgKiBwUmVzRGljdCwKKyAgICAgICAgICAgIENQREZfRm9udCAqICYgcFN5c0ZvbnQsIENGWF9CeXRlU3RyaW5nICYgc1N5c0ZvbnRBbGlhcyk7Citwcml2YXRlOgorICAgIENQREZfRG9jdW1lbnQqCQkJCQltX3BEb2N1bWVudDsKKyAgICBDUERGX0RpY3Rpb25hcnkqCQkJCW1fcFJlc0RpY3Q7CisgICAgQ1BERl9Gb250KgkJCQkJCW1fcERlZkZvbnQ7CisgICAgQ0ZYX0J5dGVTdHJpbmcJCQkJCW1fc0RlZkZvbnRBbGlhczsKKyAgICBDUERGX0ZvbnQqCQkJCQkJbV9wU3lzRm9udDsKKyAgICBDRlhfQnl0ZVN0cmluZwkJCQkJbV9zU3lzRm9udEFsaWFzOworfTsKK0NQVlRfRm9udE1hcDo6Q1BWVF9Gb250TWFwKENQREZfRG9jdW1lbnQgKiBwRG9jLCBDUERGX0RpY3Rpb25hcnkgKiBwUmVzRGljdCwgQ1BERl9Gb250ICogcERlZkZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQnl0ZVN0cmluZyAmIHNEZWZGb250QWxpYXMpIDoKKyAgICBtX3BEb2N1bWVudChwRG9jKSwKKyAgICBtX3BSZXNEaWN0KHBSZXNEaWN0KSwKKyAgICBtX3BEZWZGb250KHBEZWZGb250KSwKKyAgICBtX3NEZWZGb250QWxpYXMoc0RlZkZvbnRBbGlhcyksCisgICAgbV9wU3lzRm9udChOVUxMKSwKKyAgICBtX3NTeXNGb250QWxpYXMoKQoreworfQorQ1BWVF9Gb250TWFwOjp+Q1BWVF9Gb250TWFwKCkKK3sKK30KK2V4dGVybiBDUERGX0ZvbnQqCQlBZGROYXRpdmVJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSomIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKTsKK3ZvaWQgQ1BWVF9Gb250TWFwOjpHZXRBbm5vdFN5c1BERkZvbnQoQ1BERl9Eb2N1bWVudCAqIHBEb2MsIENQREZfRGljdGlvbmFyeSAqIHBSZXNEaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0ZvbnQgKiAmIHBTeXNGb250LCBDRlhfQnl0ZVN0cmluZyAmIHNTeXNGb250QWxpYXMpCit7CisgICAgaWYgKHBEb2MgJiYgcFJlc0RpY3QpIHsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc0ZvbnRBbGlhczsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QgPSBwRG9jLT5HZXRSb290KCktPkdldERpY3QoIkFjcm9Gb3JtIik7CisgICAgICAgIGlmIChDUERGX0ZvbnQgKiBwUERGRm9udCA9IEFkZE5hdGl2ZUludGVyRm9ybUZvbnQocEZvcm1EaWN0LCBwRG9jLCBzU3lzRm9udEFsaWFzKSkgeworICAgICAgICAgICAgaWYgKENQREZfRGljdGlvbmFyeSAqIHBGb250TGlzdCA9IHBSZXNEaWN0LT5HZXREaWN0KCJGb250IikpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXBGb250TGlzdC0+S2V5RXhpc3Qoc1N5c0ZvbnRBbGlhcykpIHsKKyAgICAgICAgICAgICAgICAgICAgcEZvbnRMaXN0LT5TZXRBdFJlZmVyZW5jZShzU3lzRm9udEFsaWFzLCBwRG9jLCBwUERGRm9udC0+R2V0Rm9udERpY3QoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcFN5c0ZvbnQgPSBwUERGRm9udDsKKyAgICAgICAgfQorICAgIH0KK30KK0NQREZfRm9udCogQ1BWVF9Gb250TWFwOjpHZXRQREZGb250KEZYX0lOVDMyIG5Gb250SW5kZXgpCit7CisgICAgc3dpdGNoIChuRm9udEluZGV4KSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIHJldHVybiBtX3BEZWZGb250OworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBpZiAoIW1fcFN5c0ZvbnQpIHsKKyAgICAgICAgICAgICAgICBHZXRBbm5vdFN5c1BERkZvbnQobV9wRG9jdW1lbnQsIG1fcFJlc0RpY3QsIG1fcFN5c0ZvbnQsIG1fc1N5c0ZvbnRBbGlhcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbV9wU3lzRm9udDsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CitDRlhfQnl0ZVN0cmluZyBDUFZUX0ZvbnRNYXA6OkdldFBERkZvbnRBbGlhcyhGWF9JTlQzMiBuRm9udEluZGV4KQoreworICAgIHN3aXRjaCAobkZvbnRJbmRleCkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICByZXR1cm4gbV9zRGVmRm9udEFsaWFzOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBpZiAoIW1fcFN5c0ZvbnQpIHsKKyAgICAgICAgICAgICAgICBHZXRBbm5vdFN5c1BERkZvbnQobV9wRG9jdW1lbnQsIG1fcFJlc0RpY3QsIG1fcFN5c0ZvbnQsIG1fc1N5c0ZvbnRBbGlhcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbV9zU3lzRm9udEFsaWFzOworICAgIH0KKyAgICByZXR1cm4gIiI7Cit9CitDUFZUX1Byb3ZpZGVyOjpDUFZUX1Byb3ZpZGVyKElQVlRfRm9udE1hcCAqIHBGb250TWFwKSA6IG1fcEZvbnRNYXAocEZvbnRNYXApCit7CisgICAgQVNTRVJUIChtX3BGb250TWFwICE9IE5VTEwpOworfQorQ1BWVF9Qcm92aWRlcjo6fkNQVlRfUHJvdmlkZXIoKQoreworfQorRlhfSU5UMzIgQ1BWVF9Qcm92aWRlcjo6R2V0Q2hhcldpZHRoKEZYX0lOVDMyIG5Gb250SW5kZXgsIEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgbldvcmRTdHlsZSkKK3sKKyAgICBpZiAoQ1BERl9Gb250KiBwUERGRm9udCA9IG1fcEZvbnRNYXAtPkdldFBERkZvbnQobkZvbnRJbmRleCkpIHsKKyAgICAgICAgRlhfRFdPUkQgY2hhcmNvZGUgPSBwUERGRm9udC0+Q2hhckNvZGVGcm9tVW5pY29kZSh3b3JkKTsKKyAgICAgICAgaWYgKGNoYXJjb2RlICE9IC0xKSB7CisgICAgICAgICAgICByZXR1cm4gcFBERkZvbnQtPkdldENoYXJXaWR0aEYoY2hhcmNvZGUpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorRlhfSU5UMzIgQ1BWVF9Qcm92aWRlcjo6R2V0VHlwZUFzY2VudChGWF9JTlQzMiBuRm9udEluZGV4KQoreworICAgIGlmIChDUERGX0ZvbnQqIHBQREZGb250ID0gbV9wRm9udE1hcC0+R2V0UERGRm9udChuRm9udEluZGV4KSkgeworICAgICAgICByZXR1cm4gcFBERkZvbnQtPkdldFR5cGVBc2NlbnQoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CitGWF9JTlQzMiBDUFZUX1Byb3ZpZGVyOjpHZXRUeXBlRGVzY2VudChGWF9JTlQzMiBuRm9udEluZGV4KQoreworICAgIGlmIChDUERGX0ZvbnQqIHBQREZGb250ID0gbV9wRm9udE1hcC0+R2V0UERGRm9udChuRm9udEluZGV4KSkgeworICAgICAgICByZXR1cm4gcFBERkZvbnQtPkdldFR5cGVEZXNjZW50KCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorRlhfSU5UMzIgQ1BWVF9Qcm92aWRlcjo6R2V0V29yZEZvbnRJbmRleChGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIGNoYXJzZXQsIEZYX0lOVDMyIG5Gb250SW5kZXgpCit7CisgICAgaWYgKENQREZfRm9udCogcERlZkZvbnQgPSBtX3BGb250TWFwLT5HZXRQREZGb250KDApKSB7CisgICAgICAgIGlmIChwRGVmRm9udC0+Q2hhckNvZGVGcm9tVW5pY29kZSh3b3JkKSAhPSAtMSkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKENQREZfRm9udCogcFN5c0ZvbnQgPSBtX3BGb250TWFwLT5HZXRQREZGb250KDEpKQorICAgICAgICBpZiAocFN5c0ZvbnQtPkNoYXJDb2RlRnJvbVVuaWNvZGUod29yZCkgIT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgcmV0dXJuIC0xOworfQorRlhfQk9PTCBDUFZUX1Byb3ZpZGVyOjpJc0xhdGluV29yZChGWF9XT1JEIHdvcmQpCit7CisgICAgaWYgKCh3b3JkID49IDB4NjEgJiYgd29yZCA8PSAweDdBKSB8fCAod29yZCA+PSAweDQxICYmIHdvcmQgPD0gMHg1QSkgfHwgd29yZCA9PSAweDJEIHx8IHdvcmQgPT0gMHgyNykgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorRlhfSU5UMzIgQ1BWVF9Qcm92aWRlcjo6R2V0RGVmYXVsdEZvbnRJbmRleCgpCit7CisgICAgcmV0dXJuIDA7Cit9CitzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcgR2V0UERGV29yZFN0cmluZyhJUFZUX0ZvbnRNYXAgKiBwRm9udE1hcCwgRlhfSU5UMzIgbkZvbnRJbmRleCwgRlhfV09SRCBXb3JkLCBGWF9XT1JEIFN1YldvcmQpCit7CisgICAgQ0ZYX0J5dGVTdHJpbmcgc1dvcmQ7CisgICAgaWYgKFN1YldvcmQgPiAwKSB7CisgICAgICAgIHNXb3JkLkZvcm1hdCgiJWMiLCBTdWJXb3JkKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocEZvbnRNYXApIHsKKyAgICAgICAgICAgIGlmIChDUERGX0ZvbnQgKiBwUERGRm9udCA9IHBGb250TWFwLT5HZXRQREZGb250KG5Gb250SW5kZXgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHBQREZGb250LT5HZXRCYXNlRm9udCgpLkNvbXBhcmUoIlN5bWJvbCIpID09IDAgfHwgcFBERkZvbnQtPkdldEJhc2VGb250KCkuQ29tcGFyZSgiWmFwZkRpbmdiYXRzIikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBzV29yZC5Gb3JtYXQoIiVjIiwgV29yZCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgZHdDaGFyQ29kZSA9IHBQREZGb250LT5DaGFyQ29kZUZyb21Vbmljb2RlKFdvcmQpOworICAgICAgICAgICAgICAgICAgICBpZiAoZHdDaGFyQ29kZSAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcFBERkZvbnQtPkFwcGVuZENoYXIoc1dvcmQsIGR3Q2hhckNvZGUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzV29yZDsKK30KK3N0YXRpYyBDRlhfQnl0ZVN0cmluZyBHZXRXb3JkUmVuZGVyU3RyaW5nKGNvbnN0IENGWF9CeXRlU3RyaW5nICYgc3RyV29yZHMpCit7CisgICAgaWYgKHN0cldvcmRzLkdldExlbmd0aCgpID4gMCkgeworICAgICAgICByZXR1cm4gUERGX0VuY29kZVN0cmluZyhzdHJXb3JkcykgKyAiIFRqXG4iOworICAgIH0KKyAgICByZXR1cm4gIiI7Cit9CitzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcgR2V0Rm9udFNldFN0cmluZyhJUFZUX0ZvbnRNYXAgKiBwRm9udE1hcCwgRlhfSU5UMzIgbkZvbnRJbmRleCwgRlhfRkxPQVQgZkZvbnRTaXplKQoreworICAgIENGWF9CeXRlVGV4dEJ1ZiBzUmV0OworICAgIGlmIChwRm9udE1hcCkgeworICAgICAgICBDRlhfQnl0ZVN0cmluZyBzRm9udEFsaWFzID0gcEZvbnRNYXAtPkdldFBERkZvbnRBbGlhcyhuRm9udEluZGV4KTsKKyAgICAgICAgaWYgKHNGb250QWxpYXMuR2V0TGVuZ3RoKCkgPiAwICYmIGZGb250U2l6ZSA+IDAgKSB7CisgICAgICAgICAgICBzUmV0IDw8ICIvIiA8PCBzRm9udEFsaWFzIDw8ICIgIiA8PCBmRm9udFNpemUgPDwgIiBUZlxuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc1JldC5HZXRCeXRlU3RyaW5nKCk7Cit9CitzdGF0aWMgQ1BWVF9Db2xvciBQYXJzZUNvbG9yKGNvbnN0IENGWF9CeXRlU3RyaW5nICYgc3RyKQoreworICAgIENQREZfU2ltcGxlUGFyc2VyIHN5bnRheChzdHIpOworICAgIHN5bnRheC5TZXRQb3MoMCk7CisgICAgaWYgKHN5bnRheC5GaW5kVGFnUGFyYW0oImciLCAxKSkgeworICAgICAgICByZXR1cm4gQ1BWVF9Db2xvcihDVF9HUkFZLCBGWF9hdG9mKHN5bnRheC5HZXRXb3JkKCkpKTsKKyAgICB9CisgICAgc3ludGF4LlNldFBvcygwKTsKKyAgICBpZiAoc3ludGF4LkZpbmRUYWdQYXJhbSgicmciLCAzKSkgeworICAgICAgICBGWF9GTE9BVCBmMSA9IEZYX2F0b2Yoc3ludGF4LkdldFdvcmQoKSk7CisgICAgICAgIEZYX0ZMT0FUIGYyID0gRlhfYXRvZihzeW50YXguR2V0V29yZCgpKTsKKyAgICAgICAgRlhfRkxPQVQgZjMgPSBGWF9hdG9mKHN5bnRheC5HZXRXb3JkKCkpOworICAgICAgICByZXR1cm4gQ1BWVF9Db2xvcihDVF9SR0IsIGYxLCBmMiwgZjMpOworICAgIH0KKyAgICBzeW50YXguU2V0UG9zKDApOworICAgIGlmIChzeW50YXguRmluZFRhZ1BhcmFtKCJrIiwgNCkpIHsKKyAgICAgICAgRlhfRkxPQVQgZjEgPSBGWF9hdG9mKHN5bnRheC5HZXRXb3JkKCkpOworICAgICAgICBGWF9GTE9BVCBmMiA9IEZYX2F0b2Yoc3ludGF4LkdldFdvcmQoKSk7CisgICAgICAgIEZYX0ZMT0FUIGYzID0gRlhfYXRvZihzeW50YXguR2V0V29yZCgpKTsKKyAgICAgICAgRlhfRkxPQVQgZjQgPSBGWF9hdG9mKHN5bnRheC5HZXRXb3JkKCkpOworICAgICAgICByZXR1cm4gQ1BWVF9Db2xvcihDVF9DTVlLLCBmMSwgZjIsIGYzLCBmNCk7CisgICAgfQorICAgIHJldHVybiBDUFZUX0NvbG9yKENUX1RSQU5TUEFSRU5UKTsKK30KK3N0YXRpYyBDUFZUX0NvbG9yIFBhcnNlQ29sb3IoY29uc3QgQ1BERl9BcnJheSAmIGFycmF5KQoreworICAgIENQVlRfQ29sb3IgcnQ7CisgICAgc3dpdGNoIChhcnJheS5HZXRDb3VudCgpKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJ0ID0gQ1BWVF9Db2xvcihDVF9HUkFZLCBhcnJheS5HZXRGbG9hdCgwKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgcnQgPSBDUFZUX0NvbG9yKENUX1JHQiwgYXJyYXkuR2V0RmxvYXQoMCksIGFycmF5LkdldEZsb2F0KDEpLCBhcnJheS5HZXRGbG9hdCgyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgcnQgPSBDUFZUX0NvbG9yKENUX0NNWUssIGFycmF5LkdldEZsb2F0KDApLCBhcnJheS5HZXRGbG9hdCgxKSwgYXJyYXkuR2V0RmxvYXQoMiksIGFycmF5LkdldEZsb2F0KDMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcnQ7Cit9CitzdGF0aWMgRlhfQk9PTCBHZW5lcmF0ZVdpZGdldEFQKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfRGljdGlvbmFyeSogcEFubm90RGljdCwgY29uc3QgRlhfSU5UMzIgJiBuV2lkZ2V0VHlwZSkKK3sKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCA9IE5VTEw7CisgICAgaWYgKENQREZfRGljdGlvbmFyeSAqIHBSb290RGljdCA9IHBEb2MtPkdldFJvb3QoKSkgeworICAgICAgICBwRm9ybURpY3QgPSBwUm9vdERpY3QtPkdldERpY3QoIkFjcm9Gb3JtIik7CisgICAgfQorICAgIGlmICghcEZvcm1EaWN0KSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgREEgPSBGUERGX0dldEZpZWxkQXR0cihwQW5ub3REaWN0LCAiREEiKS0+R2V0U3RyaW5nKCk7CisgICAgaWYgKERBLklzRW1wdHkoKSkgeworICAgICAgICBEQSA9IHBGb3JtRGljdC0+R2V0U3RyaW5nKCJEQSIpOworICAgIH0KKyAgICBpZiAoREEuSXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgQ1BERl9TaW1wbGVQYXJzZXIgc3ludGF4KERBKTsKKyAgICBzeW50YXguRmluZFRhZ1BhcmFtKCJUZiIsIDIpOworICAgIENGWF9CeXRlU3RyaW5nIHNGb250TmFtZSA9IHN5bnRheC5HZXRXb3JkKCk7CisgICAgc0ZvbnROYW1lID0gUERGX05hbWVEZWNvZGUoc0ZvbnROYW1lKTsKKyAgICBpZiAoc0ZvbnROYW1lLklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEZYX0ZMT0FUIGZGb250U2l6ZSA9IEZYX2F0b2Yoc3ludGF4LkdldFdvcmQoKSk7CisgICAgQ1BWVF9Db2xvciBjclRleHQgPSBQYXJzZUNvbG9yKERBKTsKKyAgICBGWF9CT09MIGJVc2VGb3JtUmVzID0gRkFMU0U7CisgICAgQ1BERl9EaWN0aW9uYXJ5ICogcEZvbnREaWN0ID0gTlVMTDsKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBEUkRpY3QgPSBwQW5ub3REaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJEUiIpKTsKKyAgICBpZiAocERSRGljdCA9PSBOVUxMKSB7CisgICAgICAgIHBEUkRpY3QgPSBwRm9ybURpY3QtPkdldERpY3QoRlhfQlNUUkMoIkRSIikpOworICAgICAgICBiVXNlRm9ybVJlcyA9IFRSVUU7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSAqIHBEUkZvbnREaWN0ID0gTlVMTDsKKyAgICBpZiAoKHBEUkZvbnREaWN0ID0gcERSRGljdC0+R2V0RGljdCgiRm9udCIpKSkgeworICAgICAgICBwRm9udERpY3QgPSBwRFJGb250RGljdC0+R2V0RGljdChzRm9udE5hbWUuTWlkKDEpKTsKKyAgICAgICAgaWYgKCFwRm9udERpY3QgJiYgIWJVc2VGb3JtUmVzKSB7CisgICAgICAgICAgICBwRFJEaWN0ID0gcEZvcm1EaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJEUiIpKTsKKyAgICAgICAgICAgIHBEUkZvbnREaWN0ID0gcERSRGljdC0+R2V0RGljdCgiRm9udCIpOworICAgICAgICAgICAgaWYgKHBEUkZvbnREaWN0KSB7CisgICAgICAgICAgICAgICAgcEZvbnREaWN0ID0gcERSRm9udERpY3QtPkdldERpY3Qoc0ZvbnROYW1lLk1pZCgxKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFwRFJGb250RGljdCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmICghcEZvbnREaWN0KSB7CisgICAgICAgIHBGb250RGljdCA9IENQREZfRGljdGlvbmFyeTo6Q3JlYXRlKCk7CisgICAgICAgIGlmIChwRm9udERpY3QgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIHBGb250RGljdC0+U2V0QXROYW1lKEZYX0JTVFJDKCJUeXBlIiksICJGb250Iik7CisgICAgICAgIHBGb250RGljdC0+U2V0QXROYW1lKEZYX0JTVFJDKCJTdWJ0eXBlIiksICJUeXBlMSIpOworICAgICAgICBwRm9udERpY3QtPlNldEF0TmFtZShGWF9CU1RSQygiQmFzZUZvbnQiKSwgIkhlbHZldGljYSIpOworICAgICAgICBwRm9udERpY3QtPlNldEF0TmFtZShGWF9CU1RSQygiRW5jb2RpbmciKSwgIldpbkFuc2lFbmNvZGluZyIpOworICAgICAgICBwRG9jLT5BZGRJbmRpcmVjdE9iamVjdChwRm9udERpY3QpOworICAgICAgICBwRFJGb250RGljdC0+U2V0QXRSZWZlcmVuY2Uoc0ZvbnROYW1lLk1pZCgxKSwgcERvYywgcEZvbnREaWN0KTsKKyAgICB9CisgICAgQ1BERl9Gb250KiBwRGVmRm9udCA9IHBEb2MtPkxvYWRGb250KHBGb250RGljdCk7CisgICAgaWYgKCFwRGVmRm9udCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIENGWF9DaGFyTWFwKiBwQ2hhck1hcCA9IHBEZWZGb250LT5HZXRDaGFyTWFwKCk7CisgICAgQ1BERl9SZWN0IHJjQW5ub3QgPSBwQW5ub3REaWN0LT5HZXRSZWN0KCJSZWN0Iik7CisgICAgRlhfSU5UMzIgblJvdGF0ZSA9IDA7CisgICAgaWYgKENQREZfRGljdGlvbmFyeSAqIHBNS0RpY3QgPSBwQW5ub3REaWN0LT5HZXREaWN0KCJNSyIpKSB7CisgICAgICAgIG5Sb3RhdGUgPSBwTUtEaWN0LT5HZXRJbnRlZ2VyKCJSIik7CisgICAgfQorICAgIENQREZfUmVjdCByY0JCb3g7CisgICAgQ1BERl9NYXRyaXggbWF0cml4OworICAgIHN3aXRjaCAoblJvdGF0ZSAlIDM2MCkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICByY0JCb3ggPSBDUERGX1JlY3QoMCwgMCwgcmNBbm5vdC5yaWdodCAtIHJjQW5ub3QubGVmdCwgcmNBbm5vdC50b3AgLSByY0Fubm90LmJvdHRvbSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA5MDoKKyAgICAgICAgICAgIG1hdHJpeCA9IENQREZfTWF0cml4KDAsIDEsIC0xLCAwLCByY0Fubm90LnJpZ2h0IC0gcmNBbm5vdC5sZWZ0LCAwKTsKKyAgICAgICAgICAgIHJjQkJveCA9IENQREZfUmVjdCgwLCAwLCByY0Fubm90LnRvcCAtIHJjQW5ub3QuYm90dG9tLCByY0Fubm90LnJpZ2h0IC0gcmNBbm5vdC5sZWZ0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE4MDoKKyAgICAgICAgICAgIG1hdHJpeCA9IENQREZfTWF0cml4KC0xLCAwLCAwLCAtMSwgcmNBbm5vdC5yaWdodCAtIHJjQW5ub3QubGVmdCwgcmNBbm5vdC50b3AgLSByY0Fubm90LmJvdHRvbSk7CisgICAgICAgICAgICByY0JCb3ggPSBDUERGX1JlY3QoMCwgMCwgcmNBbm5vdC5yaWdodCAtIHJjQW5ub3QubGVmdCwgcmNBbm5vdC50b3AgLSByY0Fubm90LmJvdHRvbSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyNzA6CisgICAgICAgICAgICBtYXRyaXggPSBDUERGX01hdHJpeCgwLCAtMSwgMSwgMCwgMCwgcmNBbm5vdC50b3AgLSByY0Fubm90LmJvdHRvbSk7CisgICAgICAgICAgICByY0JCb3ggPSBDUERGX1JlY3QoMCwgMCwgcmNBbm5vdC50b3AgLSByY0Fubm90LmJvdHRvbSwgcmNBbm5vdC5yaWdodCAtIHJjQW5ub3QubGVmdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgRlhfSU5UMzIgbkJvcmRlclN0eWxlID0gUEJTX1NPTElEOworICAgIEZYX0ZMT0FUIGZCb3JkZXJXaWR0aCA9IDE7CisgICAgQ1BWVF9EYXNoIGRzQm9yZGVyKDMsIDAsIDApOworICAgIENQVlRfQ29sb3IgY3JMZWZ0VG9wLCBjclJpZ2h0Qm90dG9tOworICAgIGlmIChDUERGX0RpY3Rpb25hcnkgKiBwQlNEaWN0ID0gcEFubm90RGljdC0+R2V0RGljdCgiQlMiKSkgeworICAgICAgICBpZiAocEJTRGljdC0+S2V5RXhpc3QoIlciKSkgeworICAgICAgICAgICAgZkJvcmRlcldpZHRoID0gcEJTRGljdC0+R2V0TnVtYmVyKCJXIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKENQREZfQXJyYXkgKiBwQXJyYXkgPSBwQlNEaWN0LT5HZXRBcnJheSgiRCIpKSB7CisgICAgICAgICAgICBkc0JvcmRlciA9IENQVlRfRGFzaChwQXJyYXktPkdldEludGVnZXIoMCksIHBBcnJheS0+R2V0SW50ZWdlcigxKSwgcEFycmF5LT5HZXRJbnRlZ2VyKDIpKTsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKHBCU0RpY3QtPkdldFN0cmluZygiUyIpLkdldEF0KDApKSB7CisgICAgICAgICAgICBjYXNlICdTJzoKKyAgICAgICAgICAgICAgICBuQm9yZGVyU3R5bGUgPSBQQlNfU09MSUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdEJzoKKyAgICAgICAgICAgICAgICBuQm9yZGVyU3R5bGUgPSBQQlNfREFTSDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ0InOgorICAgICAgICAgICAgICAgIG5Cb3JkZXJTdHlsZSA9IFBCU19CRVZFTEVEOworICAgICAgICAgICAgICAgIGZCb3JkZXJXaWR0aCAqPSAyOworICAgICAgICAgICAgICAgIGNyTGVmdFRvcCA9IENQVlRfQ29sb3IoQ1RfR1JBWSwgMSk7CisgICAgICAgICAgICAgICAgY3JSaWdodEJvdHRvbSA9IENQVlRfQ29sb3IoQ1RfR1JBWSwgMC41KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ0knOgorICAgICAgICAgICAgICAgIG5Cb3JkZXJTdHlsZSA9IFBCU19JTlNFVDsKKyAgICAgICAgICAgICAgICBmQm9yZGVyV2lkdGggKj0gMjsKKyAgICAgICAgICAgICAgICBjckxlZnRUb3AgPSBDUFZUX0NvbG9yKENUX0dSQVksIDAuNSk7CisgICAgICAgICAgICAgICAgY3JSaWdodEJvdHRvbSA9IENQVlRfQ29sb3IoQ1RfR1JBWSwgMC43NSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdVJzoKKyAgICAgICAgICAgICAgICBuQm9yZGVyU3R5bGUgPSBQQlNfVU5ERVJMSU5FRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBDUFZUX0NvbG9yIGNyQm9yZGVyLCBjckJHOworICAgIGlmIChDUERGX0RpY3Rpb25hcnkgKiBwTUtEaWN0ID0gcEFubm90RGljdC0+R2V0RGljdCgiTUsiKSkgeworICAgICAgICBpZiAoQ1BERl9BcnJheSAqIHBBcnJheSA9IHBNS0RpY3QtPkdldEFycmF5KCJCQyIpKSB7CisgICAgICAgICAgICBjckJvcmRlciA9IFBhcnNlQ29sb3IoKnBBcnJheSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKENQREZfQXJyYXkgKiBwQXJyYXkgPSBwTUtEaWN0LT5HZXRBcnJheSgiQkciKSkgeworICAgICAgICAgICAgY3JCRyA9IFBhcnNlQ29sb3IoKnBBcnJheSk7CisgICAgICAgIH0KKyAgICB9CisgICAgQ0ZYX0J5dGVUZXh0QnVmIHNBcHBTdHJlYW07CisgICAgQ0ZYX0J5dGVTdHJpbmcgc0JHID0gQ1BWVF9HZW5lcmF0ZUFQOjpHZW5lcmF0ZUNvbG9yQVAoY3JCRywgVFJVRSk7CisgICAgaWYgKHNCRy5HZXRMZW5ndGgoKSA+IDApIHsKKyAgICAgICAgc0FwcFN0cmVhbSA8PCAicVxuIiA8PCBzQkcgPDwgcmNCQm94LmxlZnQgPDwgIiAiIDw8IHJjQkJveC5ib3R0b20gPDwgIiAiCisgICAgICAgICAgICAgICAgICAgPDwgcmNCQm94LldpZHRoKCkgPDwgIiAiIDw8IHJjQkJveC5IZWlnaHQoKSA8PCAiIHJlIGZcbiIgPDwgIlFcbiI7CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIHNCb3JkZXJTdHJlYW0gPSBDUFZUX0dlbmVyYXRlQVA6OkdlbmVyYXRlQm9yZGVyQVAocmNCQm94LCBmQm9yZGVyV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyQm9yZGVyLCBjckxlZnRUb3AsIGNyUmlnaHRCb3R0b20sIG5Cb3JkZXJTdHlsZSwgZHNCb3JkZXIpOworICAgIGlmIChzQm9yZGVyU3RyZWFtLkdldExlbmd0aCgpID4gMCkgeworICAgICAgICBzQXBwU3RyZWFtIDw8ICJxXG4iIDw8IHNCb3JkZXJTdHJlYW0gPDwgIlFcbiI7CisgICAgfQorICAgIENQREZfUmVjdCByY0JvZHkgPSBDUERGX1JlY3QocmNCQm94LmxlZnQgKyBmQm9yZGVyV2lkdGgsIHJjQkJveC5ib3R0b20gKyBmQm9yZGVyV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByY0JCb3gucmlnaHQgLSBmQm9yZGVyV2lkdGgsIHJjQkJveC50b3AgLSBmQm9yZGVyV2lkdGgpOworICAgIHJjQm9keS5Ob3JtYWxpemUoKTsKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBBUERpY3QgPSBwQW5ub3REaWN0LT5HZXREaWN0KCJBUCIpOworICAgIGlmIChwQVBEaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcEFQRGljdCA9IENQREZfRGljdGlvbmFyeTo6Q3JlYXRlKCk7CisgICAgICAgIGlmIChwQVBEaWN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBwQW5ub3REaWN0LT5TZXRBdCgiQVAiLCBwQVBEaWN0KTsKKyAgICB9CisgICAgQ1BERl9TdHJlYW0qIHBOb3JtYWxTdHJlYW0gPSBwQVBEaWN0LT5HZXRTdHJlYW0oIk4iKTsKKyAgICBpZiAocE5vcm1hbFN0cmVhbSA9PSBOVUxMKSB7CisgICAgICAgIHBOb3JtYWxTdHJlYW0gPSBDUERGX1N0cmVhbTo6Q3JlYXRlKE5VTEwsIDAsIE5VTEwpOworICAgICAgICBpZiAocE5vcm1hbFN0cmVhbSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgRlhfSU5UMzIgb2JqbnVtID0gcERvYy0+QWRkSW5kaXJlY3RPYmplY3QocE5vcm1hbFN0cmVhbSk7CisgICAgICAgIHBBbm5vdERpY3QtPkdldERpY3QoIkFQIiktPlNldEF0UmVmZXJlbmNlKCJOIiwgcERvYywgb2JqbnVtKTsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5ICogcFN0cmVhbURpY3QgPSBwTm9ybWFsU3RyZWFtLT5HZXREaWN0KCk7CisgICAgaWYgKHBTdHJlYW1EaWN0KSB7CisgICAgICAgIHBTdHJlYW1EaWN0LT5TZXRBdE1hdHJpeCgiTWF0cml4IiwgbWF0cml4KTsKKyAgICAgICAgcFN0cmVhbURpY3QtPlNldEF0UmVjdCgiQkJveCIsIHJjQkJveCk7CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcFN0cmVhbVJlc0xpc3QgPSBwU3RyZWFtRGljdC0+R2V0RGljdCgiUmVzb3VyY2VzIik7CisgICAgICAgIGlmIChwU3RyZWFtUmVzTGlzdCkgeworICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwU3RyZWFtUmVzRm9udExpc3QgPSBwU3RyZWFtUmVzTGlzdC0+R2V0RGljdCgiRm9udCIpOworICAgICAgICAgICAgaWYgKCFwU3RyZWFtUmVzRm9udExpc3QpIHsKKyAgICAgICAgICAgICAgICBwU3RyZWFtUmVzRm9udExpc3QgPSBDUERGX0RpY3Rpb25hcnk6OkNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGlmIChwU3RyZWFtUmVzRm9udExpc3QgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBTdHJlYW1SZXNMaXN0LT5TZXRBdCgiRm9udCIsIHBTdHJlYW1SZXNGb250TGlzdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXBTdHJlYW1SZXNGb250TGlzdC0+S2V5RXhpc3Qoc0ZvbnROYW1lKSkgeworICAgICAgICAgICAgICAgIHBTdHJlYW1SZXNGb250TGlzdC0+U2V0QXRSZWZlcmVuY2Uoc0ZvbnROYW1lLCBwRG9jLCBwRm9udERpY3QpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcFN0cmVhbURpY3QtPlNldEF0KCJSZXNvdXJjZXMiLCBwRm9ybURpY3QtPkdldERpY3QoIkRSIiktPkNsb25lKCkpOworICAgICAgICAgICAgcFN0cmVhbVJlc0xpc3QgPSBwU3RyZWFtRGljdC0+R2V0RGljdCgiUmVzb3VyY2VzIik7CisgICAgICAgIH0KKyAgICB9CisgICAgc3dpdGNoIChuV2lkZ2V0VHlwZSkgeworICAgICAgICBjYXNlIDA6IHsKKyAgICAgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyBzd1ZhbHVlID0gRlBERl9HZXRGaWVsZEF0dHIocEFubm90RGljdCwgIlYiKS0+R2V0VW5pY29kZVRleHQoKTsKKyAgICAgICAgICAgICAgICBGWF9JTlQzMiBuQWxpZ24gPSBGUERGX0dldEZpZWxkQXR0cihwQW5ub3REaWN0LCAiUSIpLT5HZXRJbnRlZ2VyKCk7CisgICAgICAgICAgICAgICAgRlhfRFdPUkQgZHdGbGFncyA9IEZQREZfR2V0RmllbGRBdHRyKHBBbm5vdERpY3QsICJGZiIpLT5HZXRJbnRlZ2VyKCk7CisgICAgICAgICAgICAgICAgRlhfRFdPUkQgZHdNYXhMZW4gPSBGUERGX0dldEZpZWxkQXR0cihwQW5ub3REaWN0LCAiTWF4TGVuIiktPkdldEludGVnZXIoKTsKKyAgICAgICAgICAgICAgICBDUFZUX0ZvbnRNYXAgbWFwKHBEb2MsIHBTdHJlYW1EaWN0LT5HZXREaWN0KCJSZXNvdXJjZXMiKSwgcERlZkZvbnQsIHNGb250TmFtZS5SaWdodChzRm9udE5hbWUuR2V0TGVuZ3RoKCkgLSAxKSk7CisgICAgICAgICAgICAgICAgQ1BWVF9Qcm92aWRlciBwcmQoJm1hcCk7CisgICAgICAgICAgICAgICAgQ1BERl9WYXJpYWJsZVRleHQgdnQ7CisgICAgICAgICAgICAgICAgdnQuU2V0UHJvdmlkZXIoJnByZCk7CisgICAgICAgICAgICAgICAgdnQuU2V0UGxhdGVSZWN0KHJjQm9keSk7CisgICAgICAgICAgICAgICAgdnQuU2V0QWxpZ25tZW50KG5BbGlnbik7CisgICAgICAgICAgICAgICAgaWYgKElzRmxvYXRaZXJvKGZGb250U2l6ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdnQuU2V0QXV0b0ZvbnRTaXplKFRSVUUpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZ0LlNldEZvbnRTaXplKGZGb250U2l6ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEZYX0JPT0wgYk11bHRpTGluZSA9IChkd0ZsYWdzID4+IDEyKSAmIDE7CisgICAgICAgICAgICAgICAgaWYgKGJNdWx0aUxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgdnQuU2V0TXVsdGlMaW5lKFRSVUUpOworICAgICAgICAgICAgICAgICAgICB2dC5TZXRBdXRvUmV0dXJuKFRSVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBGWF9XT1JEIHN1YldvcmQgPSAwOworICAgICAgICAgICAgICAgIGlmICgoZHdGbGFncyA+PiAxMykgJiAxKSB7CisgICAgICAgICAgICAgICAgICAgIHN1YldvcmQgPSAnKic7CisgICAgICAgICAgICAgICAgICAgIHZ0LlNldFBhc3N3b3JkQ2hhcihzdWJXb3JkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRlhfQk9PTCBiQ2hhckFycmF5ID0gKGR3RmxhZ3MgPj4gMjQpICYgMTsKKyAgICAgICAgICAgICAgICBpZiAoYkNoYXJBcnJheSkgeworICAgICAgICAgICAgICAgICAgICB2dC5TZXRDaGFyQXJyYXkoZHdNYXhMZW4pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZ0LlNldExpbWl0Q2hhcihkd01heExlbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZ0LkluaXRpYWxpemUoKTsKKyAgICAgICAgICAgICAgICB2dC5TZXRUZXh0KHN3VmFsdWUpOworICAgICAgICAgICAgICAgIHZ0LlJlYXJyYW5nZUFsbCgpOworICAgICAgICAgICAgICAgIENQREZfUmVjdCByY0NvbnRlbnQgPSB2dC5HZXRDb250ZW50UmVjdCgpOworICAgICAgICAgICAgICAgIENQREZfUG9pbnQgcHRPZmZzZXQoMC4wZiwgMC4wZik7CisgICAgICAgICAgICAgICAgaWYgKCFiTXVsdGlMaW5lKSB7CisgICAgICAgICAgICAgICAgICAgIHB0T2Zmc2V0ID0gQ1BERl9Qb2ludCgwLjBmLCAocmNDb250ZW50LkhlaWdodCgpIC0gcmNCb2R5LkhlaWdodCgpKSAvIDIuMGYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBzQm9keSA9IENQVlRfR2VuZXJhdGVBUDo6R2VuZXJhdGVFZGl0QVAoJm1hcCwgdnQuR2V0SXRlcmF0b3IoKSwgcHRPZmZzZXQsICFiQ2hhckFycmF5LCBzdWJXb3JkKTsKKyAgICAgICAgICAgICAgICBpZiAoc0JvZHkuR2V0TGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgIi9UeCBCTUNcbiIgPDwgInFcbiI7CisgICAgICAgICAgICAgICAgICAgIGlmIChyY0NvbnRlbnQuV2lkdGgoKSA+IHJjQm9keS5XaWR0aCgpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmNDb250ZW50LkhlaWdodCgpID4gcmNCb2R5LkhlaWdodCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IHJjQm9keS5sZWZ0IDw8ICIgIiA8PCByY0JvZHkuYm90dG9tIDw8ICIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCByY0JvZHkuV2lkdGgoKSA8PCAiICIgPDwgcmNCb2R5LkhlaWdodCgpIDw8ICIgcmVcbldcbm5cbiI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCAiQlRcbiIgPDwgQ1BWVF9HZW5lcmF0ZUFQOjpHZW5lcmF0ZUNvbG9yQVAoY3JUZXh0LCBUUlVFKSA8PCBzQm9keSA8PCAiRVRcbiIgPDwgIlFcbkVNQ1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOiB7CisgICAgICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgc3dWYWx1ZSA9IEZQREZfR2V0RmllbGRBdHRyKHBBbm5vdERpY3QsICJWIiktPkdldFVuaWNvZGVUZXh0KCk7CisgICAgICAgICAgICAgICAgQ1BWVF9Gb250TWFwIG1hcChwRG9jLCBwU3RyZWFtRGljdC0+R2V0RGljdCgiUmVzb3VyY2VzIiksIHBEZWZGb250LCBzRm9udE5hbWUuUmlnaHQoc0ZvbnROYW1lLkdldExlbmd0aCgpIC0gMSkpOworICAgICAgICAgICAgICAgIENQVlRfUHJvdmlkZXIgcHJkKCZtYXApOworICAgICAgICAgICAgICAgIENQREZfVmFyaWFibGVUZXh0IHZ0OworICAgICAgICAgICAgICAgIHZ0LlNldFByb3ZpZGVyKCZwcmQpOworICAgICAgICAgICAgICAgIENQREZfUmVjdCByY0J1dHRvbiA9IHJjQm9keTsKKyAgICAgICAgICAgICAgICByY0J1dHRvbi5sZWZ0ID0gcmNCdXR0b24ucmlnaHQgLSAxMzsKKyAgICAgICAgICAgICAgICByY0J1dHRvbi5Ob3JtYWxpemUoKTsKKyAgICAgICAgICAgICAgICBDUERGX1JlY3QgcmNFZGl0ID0gcmNCb2R5OworICAgICAgICAgICAgICAgIHJjRWRpdC5yaWdodCA9IHJjQnV0dG9uLmxlZnQ7CisgICAgICAgICAgICAgICAgcmNFZGl0Lk5vcm1hbGl6ZSgpOworICAgICAgICAgICAgICAgIHZ0LlNldFBsYXRlUmVjdChyY0VkaXQpOworICAgICAgICAgICAgICAgIGlmIChJc0Zsb2F0WmVybyhmRm9udFNpemUpKSB7CisgICAgICAgICAgICAgICAgICAgIHZ0LlNldEF1dG9Gb250U2l6ZShUUlVFKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2dC5TZXRGb250U2l6ZShmRm9udFNpemUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2dC5Jbml0aWFsaXplKCk7CisgICAgICAgICAgICAgICAgdnQuU2V0VGV4dChzd1ZhbHVlKTsKKyAgICAgICAgICAgICAgICB2dC5SZWFycmFuZ2VBbGwoKTsKKyAgICAgICAgICAgICAgICBDUERGX1JlY3QgcmNDb250ZW50ID0gdnQuR2V0Q29udGVudFJlY3QoKTsKKyAgICAgICAgICAgICAgICBDUERGX1BvaW50IHB0T2Zmc2V0ID0gQ1BERl9Qb2ludCgwLjBmLCAocmNDb250ZW50LkhlaWdodCgpIC0gcmNFZGl0LkhlaWdodCgpKSAvIDIuMGYpOworICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIHNFZGl0ID0gQ1BWVF9HZW5lcmF0ZUFQOjpHZW5lcmF0ZUVkaXRBUCgmbWFwLCB2dC5HZXRJdGVyYXRvcigpLCBwdE9mZnNldCwgVFJVRSwgMCk7CisgICAgICAgICAgICAgICAgaWYgKHNFZGl0LkdldExlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8ICIvVHggQk1DXG4iIDw8ICJxXG4iOworICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IHJjRWRpdC5sZWZ0IDw8ICIgIiA8PCByY0VkaXQuYm90dG9tIDw8ICIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHJjRWRpdC5XaWR0aCgpIDw8ICIgIiA8PCByY0VkaXQuSGVpZ2h0KCkgPDwgIiByZVxuV1xublxuIjsKKyAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCAiQlRcbiIgPDwgQ1BWVF9HZW5lcmF0ZUFQOjpHZW5lcmF0ZUNvbG9yQVAoY3JUZXh0LCBUUlVFKSA8PCBzRWRpdCA8PCAiRVRcbiIgPDwgIlFcbkVNQ1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc0J1dHRvbiA9IENQVlRfR2VuZXJhdGVBUDo6R2VuZXJhdGVDb2xvckFQKENQVlRfQ29sb3IoQ1RfUkdCLCAyMjAuMGYgLyAyNTUuMGYsIDIyMC4wZiAvIDI1NS4wZiwgMjIwLjBmIC8gMjU1LjBmKSwgVFJVRSk7CisgICAgICAgICAgICAgICAgaWYgKHNCdXR0b24uR2V0TGVuZ3RoKCkgPiAwICYmICFyY0J1dHRvbi5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCAicVxuIiA8PCBzQnV0dG9uOworICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IHJjQnV0dG9uLmxlZnQgPDwgIiAiIDw8IHJjQnV0dG9uLmJvdHRvbSA8PCAiICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCByY0J1dHRvbi5XaWR0aCgpIDw8ICIgIiA8PCByY0J1dHRvbi5IZWlnaHQoKSA8PCAiIHJlIGZcbiI7CisgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgIlFcbiI7CisgICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIHNCdXR0b25Cb3JkZXIgPSBDUFZUX0dlbmVyYXRlQVA6OkdlbmVyYXRlQm9yZGVyQVAocmNCdXR0b24sIDIsIENQVlRfQ29sb3IoQ1RfR1JBWSwgMCksIENQVlRfQ29sb3IoQ1RfR1JBWSwgMSksIENQVlRfQ29sb3IoQ1RfR1JBWSwgMC41KSwgUEJTX0JFVkVMRUQsIENQVlRfRGFzaCgzLCAwLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzQnV0dG9uQm9yZGVyLkdldExlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCAicVxuIiA8PCBzQnV0dG9uQm9yZGVyIDw8ICJRXG4iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIENQREZfUG9pbnQgcHRDZW50ZXIgPSBDUERGX1BvaW50KChyY0J1dHRvbi5sZWZ0ICsgcmNCdXR0b24ucmlnaHQpIC8gMiwgKHJjQnV0dG9uLnRvcCArIHJjQnV0dG9uLmJvdHRvbSkgLyAyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKElzRmxvYXRCaWdnZXIocmNCdXR0b24uV2lkdGgoKSwgNikgJiYgSXNGbG9hdEJpZ2dlcihyY0J1dHRvbi5IZWlnaHQoKSwgNikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgInFcbiIgPDwgIiAwIGdcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IHB0Q2VudGVyLnggLSAzIDw8ICIgIiA8PCBwdENlbnRlci55ICsgMS41ZiA8PCAiIG1cbiI7CisgICAgICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IHB0Q2VudGVyLnggKyAzIDw8ICIgIiA8PCBwdENlbnRlci55ICsgMS41ZiA8PCAiIGxcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IHB0Q2VudGVyLnggPDwgIiAiIDw8IHB0Q2VudGVyLnkgLSAxLjVmIDw8ICIgbFxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgcHRDZW50ZXIueCAtIDMgPDwgIiAiIDw8IHB0Q2VudGVyLnkgKyAxLjVmIDw8ICIgbCBmXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBzQnV0dG9uIDw8ICJRXG4iOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjogeworICAgICAgICAgICAgICAgIENQVlRfRm9udE1hcCBtYXAocERvYywgcFN0cmVhbURpY3QtPkdldERpY3QoIlJlc291cmNlcyIpLCBwRGVmRm9udCwgc0ZvbnROYW1lLlJpZ2h0KHNGb250TmFtZS5HZXRMZW5ndGgoKSAtIDEpKTsKKyAgICAgICAgICAgICAgICBDUFZUX1Byb3ZpZGVyIHByZCgmbWFwKTsKKyAgICAgICAgICAgICAgICBDUERGX0FycmF5ICogcE9wdHMgPSBGUERGX0dldEZpZWxkQXR0cihwQW5ub3REaWN0LCAiT3B0IiktPkdldEFycmF5KCk7CisgICAgICAgICAgICAgICAgQ1BERl9BcnJheSAqIHBTZWxzID0gRlBERl9HZXRGaWVsZEF0dHIocEFubm90RGljdCwgIkkiKS0+R2V0QXJyYXkoKTsKKyAgICAgICAgICAgICAgICBGWF9JTlQzMiBuVG9wID0gRlBERl9HZXRGaWVsZEF0dHIocEFubm90RGljdCwgIlRJIiktPkdldEludGVnZXIoKTsKKyAgICAgICAgICAgICAgICBDRlhfQnl0ZVRleHRCdWYgc0JvZHk7CisgICAgICAgICAgICAgICAgaWYgKHBPcHRzKSB7CisgICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIGZ5ID0gcmNCb2R5LnRvcDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChGWF9JTlQzMiBpID0gblRvcCwgc3ogPSBwT3B0cy0+R2V0Q291bnQoKTsgaSA8IHN6OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc0Zsb2F0U21hbGxlcihmeSwgcmNCb2R5LmJvdHRvbSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDUERGX09iamVjdCogcE9wdCA9IHBPcHRzLT5HZXRFbGVtZW50VmFsdWUoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyBzd0l0ZW07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBPcHQtPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSSU5HKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3SXRlbSA9IHBPcHQtPkdldFVuaWNvZGVUZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwT3B0LT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3SXRlbSA9ICgoQ1BERl9BcnJheSopcE9wdCktPkdldEVsZW1lbnRWYWx1ZSgxKS0+R2V0VW5pY29kZVRleHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiU2VsZWN0ZWQgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocFNlbHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChGWF9EV09SRCBzID0gMCwgc3N6ID0gcFNlbHMtPkdldENvdW50KCk7IHMgPCBzc3o7IHMrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT0gcFNlbHMtPkdldEludGVnZXIocykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiU2VsZWN0ZWQgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfVmFyaWFibGVUZXh0IHZ0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0LlNldFByb3ZpZGVyKCZwcmQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0LlNldFBsYXRlUmVjdChDUERGX1JlY3QocmNCb2R5LmxlZnQsIDAuMGYsIHJjQm9keS5yaWdodCwgMC4wZikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc0Zsb2F0WmVybyhmRm9udFNpemUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0LlNldEZvbnRTaXplKDEyLjBmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dC5TZXRGb250U2l6ZShmRm9udFNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dC5Jbml0aWFsaXplKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnQuU2V0VGV4dChzd0l0ZW0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0LlJlYXJyYW5nZUFsbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIGZJdGVtSGVpZ2h0ID0gdnQuR2V0Q29udGVudFJlY3QoKS5IZWlnaHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYlNlbGVjdGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfUmVjdCByY0l0ZW0gPSBDUERGX1JlY3QocmNCb2R5LmxlZnQsIGZ5IC0gZkl0ZW1IZWlnaHQsIHJjQm9keS5yaWdodCwgZnkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzQm9keSA8PCAicVxuIiA8PCBDUFZUX0dlbmVyYXRlQVA6OkdlbmVyYXRlQ29sb3JBUChDUFZUX0NvbG9yKENUX1JHQiwgMCwgNTEuMGYgLyAyNTUuMGYsIDExMy4wZiAvIDI1NS4wZiksIFRSVUUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHJjSXRlbS5sZWZ0IDw8ICIgIiA8PCByY0l0ZW0uYm90dG9tIDw8ICIgIiA8PCByY0l0ZW0uV2lkdGgoKSA8PCAiICIgPDwgcmNJdGVtLkhlaWdodCgpIDw8ICIgcmUgZlxuIiA8PCAiUVxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc0JvZHkgPDwgIkJUXG4iIDw8IENQVlRfR2VuZXJhdGVBUDo6R2VuZXJhdGVDb2xvckFQKENQVlRfQ29sb3IoQ1RfR1JBWSwgMSksIFRSVUUpIDw8IENQVlRfR2VuZXJhdGVBUDo6R2VuZXJhdGVFZGl0QVAoJm1hcCwgdnQuR2V0SXRlcmF0b3IoKSwgQ1BERl9Qb2ludCgwLjBmLCBmeSksIFRSVUUsIDApIDw8ICJFVFxuIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzQm9keSA8PCAiQlRcbiIgPDwgQ1BWVF9HZW5lcmF0ZUFQOjpHZW5lcmF0ZUNvbG9yQVAoY3JUZXh0LCBUUlVFKSA8PCBDUFZUX0dlbmVyYXRlQVA6OkdlbmVyYXRlRWRpdEFQKCZtYXAsIHZ0LkdldEl0ZXJhdG9yKCksIENQREZfUG9pbnQoMC4wZiwgZnkpLCBUUlVFLCAwKSA8PCAiRVRcbiI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ5IC09IGZJdGVtSGVpZ2h0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzQm9keS5HZXRTaXplKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgIi9UeCBCTUNcbiIgPDwgInFcbiI7CisgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgcmNCb2R5LmxlZnQgPDwgIiAiIDw8IHJjQm9keS5ib3R0b20gPDwgIiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgcmNCb2R5LldpZHRoKCkgPDwgIiAiIDw8IHJjQm9keS5IZWlnaHQoKSA8PCAiIHJlXG5XXG5uXG4iOworICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IHNCb2R5LkdldEJ5dGVTdHJpbmcoKSA8PCAiUVxuRU1DXG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAocE5vcm1hbFN0cmVhbSkgeworICAgICAgICBwTm9ybWFsU3RyZWFtLT5TZXREYXRhKChGWF9CWVRFKilzQXBwU3RyZWFtLkdldEJ1ZmZlcigpLCBzQXBwU3RyZWFtLkdldFNpemUoKSwgRkFMU0UsIEZBTFNFKTsKKyAgICAgICAgcFN0cmVhbURpY3QgPSBwTm9ybWFsU3RyZWFtLT5HZXREaWN0KCk7CisgICAgICAgIGlmIChwU3RyZWFtRGljdCkgeworICAgICAgICAgICAgcFN0cmVhbURpY3QtPlNldEF0TWF0cml4KCJNYXRyaXgiLCBtYXRyaXgpOworICAgICAgICAgICAgcFN0cmVhbURpY3QtPlNldEF0UmVjdCgiQkJveCIsIHJjQkJveCk7CisgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBTdHJlYW1SZXNMaXN0ID0gcFN0cmVhbURpY3QtPkdldERpY3QoIlJlc291cmNlcyIpOworICAgICAgICAgICAgaWYgKHBTdHJlYW1SZXNMaXN0KSB7CisgICAgICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwU3RyZWFtUmVzRm9udExpc3QgPSBwU3RyZWFtUmVzTGlzdC0+R2V0RGljdCgiRm9udCIpOworICAgICAgICAgICAgICAgIGlmICghcFN0cmVhbVJlc0ZvbnRMaXN0KSB7CisgICAgICAgICAgICAgICAgICAgIHBTdHJlYW1SZXNGb250TGlzdCA9IENQREZfRGljdGlvbmFyeTo6Q3JlYXRlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwU3RyZWFtUmVzRm9udExpc3QgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBTdHJlYW1SZXNMaXN0LT5TZXRBdCgiRm9udCIsIHBTdHJlYW1SZXNGb250TGlzdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghcFN0cmVhbVJlc0ZvbnRMaXN0LT5LZXlFeGlzdChzRm9udE5hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIHBTdHJlYW1SZXNGb250TGlzdC0+U2V0QXRSZWZlcmVuY2Uoc0ZvbnROYW1lLCBwRG9jLCBwRm9udERpY3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcFN0cmVhbURpY3QtPlNldEF0KCJSZXNvdXJjZXMiLCBwRm9ybURpY3QtPkdldERpY3QoIkRSIiktPkNsb25lKCkpOworICAgICAgICAgICAgICAgIHBTdHJlYW1SZXNMaXN0ID0gcFN0cmVhbURpY3QtPkdldERpY3QoIlJlc291cmNlcyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDUFZUX0dlbmVyYXRlQVA6OkdlbmVyYXRlVGV4dEZpZWxkQVAoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9EaWN0aW9uYXJ5KiBwQW5ub3REaWN0KQoreworICAgIHJldHVybiBHZW5lcmF0ZVdpZGdldEFQKHBEb2MsIHBBbm5vdERpY3QsIDApOworfQorRlhfQk9PTCBDUFZUX0dlbmVyYXRlQVA6OkdlbmVyYXRlQ29tYm9Cb3hBUChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpY3QpCit7CisgICAgcmV0dXJuIEdlbmVyYXRlV2lkZ2V0QVAocERvYywgcEFubm90RGljdCwgMSk7Cit9CitGWF9CT09MIENQVlRfR2VuZXJhdGVBUDo6R2VuZXJhdGVMaXN0Qm94QVAoQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9EaWN0aW9uYXJ5KiBwQW5ub3REaWN0KQoreworICAgIHJldHVybiBHZW5lcmF0ZVdpZGdldEFQKHBEb2MsIHBBbm5vdERpY3QsIDIpOworfQorQ0ZYX0J5dGVTdHJpbmcgQ1BWVF9HZW5lcmF0ZUFQOjpHZW5lcmF0ZUVkaXRBUChJUFZUX0ZvbnRNYXAgKiBwRm9udE1hcCwgSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IqIHBJdGVyYXRvciwgY29uc3QgQ1BERl9Qb2ludCAmIHB0T2Zmc2V0LCBGWF9CT09MIGJDb250aW51b3VzLCBGWF9XT1JEIFN1YldvcmQsIGNvbnN0IENQVlRfV29yZFJhbmdlICogcFZpc2libGUpCit7CisgICAgQ0ZYX0J5dGVUZXh0QnVmIHNFZGl0U3RyZWFtLCBzTGluZVN0cmVhbSwgc1dvcmRzOworICAgIENQREZfUG9pbnQgcHRPbGQoMC4wZiwgMC4wZiksIHB0TmV3KDAuMGYsIDAuMGYpOworICAgIEZYX0lOVDMyIG5DdXJGb250SW5kZXggPSAtMTsKKyAgICBpZiAocEl0ZXJhdG9yKSB7CisgICAgICAgIGlmIChwVmlzaWJsZSkgeworICAgICAgICAgICAgcEl0ZXJhdG9yLT5TZXRBdChwVmlzaWJsZS0+QmVnaW5Qb3MpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcEl0ZXJhdG9yLT5TZXRBdCgwKTsKKyAgICAgICAgfQorICAgICAgICBDUFZUX1dvcmRQbGFjZSBvbGRwbGFjZTsKKyAgICAgICAgd2hpbGUgKHBJdGVyYXRvci0+TmV4dFdvcmQoKSkgeworICAgICAgICAgICAgQ1BWVF9Xb3JkUGxhY2UgcGxhY2UgPSBwSXRlcmF0b3ItPkdldEF0KCk7CisgICAgICAgICAgICBpZiAocFZpc2libGUgJiYgcGxhY2UuV29yZENtcChwVmlzaWJsZS0+RW5kUG9zKSA+IDApIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChiQ29udGludW91cykgeworICAgICAgICAgICAgICAgIGlmIChwbGFjZS5MaW5lQ21wKG9sZHBsYWNlKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzV29yZHMuR2V0U2l6ZSgpID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc0xpbmVTdHJlYW0gPDwgR2V0V29yZFJlbmRlclN0cmluZyhzV29yZHMuR2V0Qnl0ZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNFZGl0U3RyZWFtIDw8IHNMaW5lU3RyZWFtOworICAgICAgICAgICAgICAgICAgICAgICAgc0xpbmVTdHJlYW0uQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNXb3Jkcy5DbGVhcigpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIENQVlRfV29yZCB3b3JkOworICAgICAgICAgICAgICAgICAgICBpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdE5ldyA9IENQREZfUG9pbnQod29yZC5wdFdvcmQueCArIHB0T2Zmc2V0LngsIHdvcmQucHRXb3JkLnkgKyBwdE9mZnNldC55KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENQVlRfTGluZSBsaW5lOworICAgICAgICAgICAgICAgICAgICAgICAgcEl0ZXJhdG9yLT5HZXRMaW5lKGxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgcHROZXcgPSBDUERGX1BvaW50KGxpbmUucHRMaW5lLnggKyBwdE9mZnNldC54LCBsaW5lLnB0TGluZS55ICsgcHRPZmZzZXQueSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHB0TmV3LnggIT0gcHRPbGQueCB8fCBwdE5ldy55ICE9IHB0T2xkLnkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNMaW5lU3RyZWFtIDw8IHB0TmV3LnggLSBwdE9sZC54IDw8ICIgIiA8PCBwdE5ldy55IC0gcHRPbGQueSA8PCAiIFRkXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgcHRPbGQgPSBwdE5ldzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBDUFZUX1dvcmQgd29yZDsKKyAgICAgICAgICAgICAgICBpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh3b3JkLm5Gb250SW5kZXggIT0gbkN1ckZvbnRJbmRleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNXb3Jkcy5HZXRTaXplKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc0xpbmVTdHJlYW0gPDwgR2V0V29yZFJlbmRlclN0cmluZyhzV29yZHMuR2V0Qnl0ZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzV29yZHMuQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNMaW5lU3RyZWFtIDw8IEdldEZvbnRTZXRTdHJpbmcocEZvbnRNYXAsIHdvcmQubkZvbnRJbmRleCwgd29yZC5mRm9udFNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgbkN1ckZvbnRJbmRleCA9IHdvcmQubkZvbnRJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzV29yZHMgPDwgR2V0UERGV29yZFN0cmluZyhwRm9udE1hcCwgbkN1ckZvbnRJbmRleCwgd29yZC5Xb3JkLCBTdWJXb3JkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb2xkcGxhY2UgPSBwbGFjZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQ1BWVF9Xb3JkIHdvcmQ7CisgICAgICAgICAgICAgICAgaWYgKHBJdGVyYXRvci0+R2V0V29yZCh3b3JkKSkgeworICAgICAgICAgICAgICAgICAgICBwdE5ldyA9IENQREZfUG9pbnQod29yZC5wdFdvcmQueCArIHB0T2Zmc2V0LngsIHdvcmQucHRXb3JkLnkgKyBwdE9mZnNldC55KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHB0TmV3LnggIT0gcHRPbGQueCB8fCBwdE5ldy55ICE9IHB0T2xkLnkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNFZGl0U3RyZWFtIDw8IHB0TmV3LnggLSBwdE9sZC54IDw8ICIgIiA8PCBwdE5ldy55IC0gcHRPbGQueSA8PCAiIFRkXG4iOworICAgICAgICAgICAgICAgICAgICAgICAgcHRPbGQgPSBwdE5ldzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAod29yZC5uRm9udEluZGV4ICE9IG5DdXJGb250SW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNFZGl0U3RyZWFtIDw8IEdldEZvbnRTZXRTdHJpbmcocEZvbnRNYXAsIHdvcmQubkZvbnRJbmRleCwgd29yZC5mRm9udFNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgbkN1ckZvbnRJbmRleCA9IHdvcmQubkZvbnRJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBzRWRpdFN0cmVhbSA8PCBHZXRXb3JkUmVuZGVyU3RyaW5nKEdldFBERldvcmRTdHJpbmcocEZvbnRNYXAsIG5DdXJGb250SW5kZXgsIHdvcmQuV29yZCwgU3ViV29yZCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoc1dvcmRzLkdldFNpemUoKSA+IDApIHsKKyAgICAgICAgICAgIHNMaW5lU3RyZWFtIDw8IEdldFdvcmRSZW5kZXJTdHJpbmcoc1dvcmRzLkdldEJ5dGVTdHJpbmcoKSk7CisgICAgICAgICAgICBzRWRpdFN0cmVhbSA8PCBzTGluZVN0cmVhbTsKKyAgICAgICAgICAgIHNXb3Jkcy5DbGVhcigpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzRWRpdFN0cmVhbS5HZXRCeXRlU3RyaW5nKCk7Cit9CitDRlhfQnl0ZVN0cmluZyBDUFZUX0dlbmVyYXRlQVA6OkdlbmVyYXRlQm9yZGVyQVAoY29uc3QgQ1BERl9SZWN0ICYgcmVjdCwgRlhfRkxPQVQgZldpZHRoLAorICAgICAgICBjb25zdCBDUFZUX0NvbG9yICYgY29sb3IsIGNvbnN0IENQVlRfQ29sb3IgJiBjckxlZnRUb3AsIGNvbnN0IENQVlRfQ29sb3IgJiBjclJpZ2h0Qm90dG9tLAorICAgICAgICBGWF9JTlQzMiBuU3R5bGUsIGNvbnN0IENQVlRfRGFzaCAmIGRhc2gpCit7CisgICAgQ0ZYX0J5dGVUZXh0QnVmIHNBcHBTdHJlYW07CisgICAgQ0ZYX0J5dGVTdHJpbmcgc0NvbG9yOworICAgIEZYX0ZMT0FUIGZMZWZ0ID0gcmVjdC5sZWZ0OworICAgIEZYX0ZMT0FUIGZSaWdodCA9IHJlY3QucmlnaHQ7CisgICAgRlhfRkxPQVQgZlRvcCA9IHJlY3QudG9wOworICAgIEZYX0ZMT0FUIGZCb3R0b20gPSByZWN0LmJvdHRvbTsKKyAgICBpZiAoZldpZHRoID4gMC4wZikgeworICAgICAgICBGWF9GTE9BVCBmSGFsZldpZHRoID0gZldpZHRoIC8gMi4wZjsKKyAgICAgICAgc3dpdGNoIChuU3R5bGUpIHsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBjYXNlIFBCU19TT0xJRDoKKyAgICAgICAgICAgICAgICBzQ29sb3IgPSBHZW5lcmF0ZUNvbG9yQVAoY29sb3IsIFRSVUUpOworICAgICAgICAgICAgICAgIGlmIChzQ29sb3IuR2V0TGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgc0NvbG9yOworICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IGZMZWZ0IDw8ICIgIiA8PCBmQm90dG9tIDw8ICIgIiA8PCBmUmlnaHQgLSBmTGVmdCA8PCAiICIgPDwgZlRvcCAtIGZCb3R0b20gPDwgIiByZVxuIjsKKyAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBmTGVmdCArIGZXaWR0aCA8PCAiICIgPDwgZkJvdHRvbSArIGZXaWR0aCA8PCAiICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBmUmlnaHQgLSBmTGVmdCAtIGZXaWR0aCAqIDIgPDwgIiAiIDw8IGZUb3AgLSBmQm90dG9tIC0gZldpZHRoICogMiA8PCAiIHJlXG4iOworICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8ICJmKlxuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFBCU19EQVNIOgorICAgICAgICAgICAgICAgIHNDb2xvciA9IEdlbmVyYXRlQ29sb3JBUChjb2xvciwgRkFMU0UpOworICAgICAgICAgICAgICAgIGlmIChzQ29sb3IuR2V0TGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgc0NvbG9yOworICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IGZXaWR0aCA8PCAiIHciIDw8ICIgWyIgPDwgZGFzaC5uRGFzaCA8PCAiICIgPDwgZGFzaC5uR2FwIDw8ICJdICIgPDwgZGFzaC5uUGhhc2UgPDwgIiBkXG4iOworICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IGZMZWZ0ICsgZldpZHRoIC8gMiA8PCAiICIgPDwgZkJvdHRvbSArIGZXaWR0aCAvIDIgPDwgIiBtXG4iOworICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IGZMZWZ0ICsgZldpZHRoIC8gMiA8PCAiICIgPDwgZlRvcCAtIGZXaWR0aCAvIDIgPDwgIiBsXG4iOworICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IGZSaWdodCAtIGZXaWR0aCAvIDIgPDwgIiAiIDw8IGZUb3AgLSBmV2lkdGggLyAyIDw8ICIgbFxuIjsKKyAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBmUmlnaHQgLSBmV2lkdGggLyAyIDw8ICIgIiA8PCBmQm90dG9tICsgZldpZHRoIC8gMiA8PCAiIGxcbiI7CisgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgZkxlZnQgKyBmV2lkdGggLyAyIDw8ICIgIiA8PCBmQm90dG9tICsgZldpZHRoIC8gMiA8PCAiIGwgU1xuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFBCU19CRVZFTEVEOgorICAgICAgICAgICAgY2FzZSBQQlNfSU5TRVQ6CisgICAgICAgICAgICAgICAgc0NvbG9yID0gR2VuZXJhdGVDb2xvckFQKGNyTGVmdFRvcCwgVFJVRSk7CisgICAgICAgICAgICAgICAgaWYgKHNDb2xvci5HZXRMZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBzQ29sb3I7CisgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgZkxlZnQgKyBmSGFsZldpZHRoIDw8ICIgIiA8PCBmQm90dG9tICsgZkhhbGZXaWR0aCA8PCAiIG1cbiI7CisgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgZkxlZnQgKyBmSGFsZldpZHRoIDw8ICIgIiA8PCBmVG9wIC0gZkhhbGZXaWR0aCA8PCAiIGxcbiI7CisgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgZlJpZ2h0IC0gZkhhbGZXaWR0aCA8PCAiICIgPDwgZlRvcCAtIGZIYWxmV2lkdGggPDwgIiBsXG4iOworICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IGZSaWdodCAtIGZIYWxmV2lkdGggKiAyIDw8ICIgIiA8PCBmVG9wIC0gZkhhbGZXaWR0aCAqIDIgPDwgIiBsXG4iOworICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IGZMZWZ0ICsgZkhhbGZXaWR0aCAqIDIgPDwgIiAiIDw8IGZUb3AgLSBmSGFsZldpZHRoICogMiA8PCAiIGxcbiI7CisgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgZkxlZnQgKyBmSGFsZldpZHRoICogMiA8PCAiICIgPDwgZkJvdHRvbSArIGZIYWxmV2lkdGggKiAyIDw8ICIgbCBmXG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzQ29sb3IgPSBHZW5lcmF0ZUNvbG9yQVAoY3JSaWdodEJvdHRvbSwgVFJVRSk7CisgICAgICAgICAgICAgICAgaWYgKHNDb2xvci5HZXRMZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBzQ29sb3I7CisgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgZlJpZ2h0IC0gZkhhbGZXaWR0aCA8PCAiICIgPDwJZlRvcCAtIGZIYWxmV2lkdGggPDwgIiBtXG4iOworICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IGZSaWdodCAtIGZIYWxmV2lkdGggPDwgIiAiIDw8CWZCb3R0b20gKyBmSGFsZldpZHRoIDw8ICIgbFxuIjsKKyAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBmTGVmdCArIGZIYWxmV2lkdGggPDwgIiAiIDw8IAlmQm90dG9tICsgZkhhbGZXaWR0aCA8PCAiIGxcbiI7CisgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgZkxlZnQgKyBmSGFsZldpZHRoICogMiA8PCAiICIgPDwgZkJvdHRvbSArIGZIYWxmV2lkdGggKiAyIDw8ICIgbFxuIjsKKyAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBmUmlnaHQgLSBmSGFsZldpZHRoICogMiA8PCAiICIgPDwgZkJvdHRvbSArIGZIYWxmV2lkdGggKiAyIDw8ICIgbFxuIjsKKyAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBmUmlnaHQgLSBmSGFsZldpZHRoICogMiA8PCAiICIgPDwgZlRvcCAtIGZIYWxmV2lkdGggKiAyIDw8ICIgbCBmXG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzQ29sb3IgPSBHZW5lcmF0ZUNvbG9yQVAoY29sb3IsIFRSVUUpOworICAgICAgICAgICAgICAgIGlmIChzQ29sb3IuR2V0TGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgc0NvbG9yOworICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IGZMZWZ0IDw8ICIgIiA8PCBmQm90dG9tIDw8ICIgIiA8PAlmUmlnaHQgLSBmTGVmdCA8PCAiICIgPDwgZlRvcCAtIGZCb3R0b20gPDwgIiByZVxuIjsKKyAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBmTGVmdCArIGZIYWxmV2lkdGggPDwgIiAiIDw8IGZCb3R0b20gKyBmSGFsZldpZHRoIDw8ICIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZSaWdodCAtIGZMZWZ0IC0gZkhhbGZXaWR0aCAqIDIgPDwgIiAiIDw8IGZUb3AgLSBmQm90dG9tIC0gZkhhbGZXaWR0aCAqIDIgPDwgIiByZSBmKlxuIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFBCU19VTkRFUkxJTkVEOgorICAgICAgICAgICAgICAgIHNDb2xvciA9IEdlbmVyYXRlQ29sb3JBUChjb2xvciwgRkFMU0UpOworICAgICAgICAgICAgICAgIGlmIChzQ29sb3IuR2V0TGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgc0NvbG9yOworICAgICAgICAgICAgICAgICAgICBzQXBwU3RyZWFtIDw8IGZXaWR0aCA8PCAiIHdcbiI7CisgICAgICAgICAgICAgICAgICAgIHNBcHBTdHJlYW0gPDwgZkxlZnQgPDwgIiAiIDw8IGZCb3R0b20gKyBmV2lkdGggLyAyIDw8ICIgbVxuIjsKKyAgICAgICAgICAgICAgICAgICAgc0FwcFN0cmVhbSA8PCBmUmlnaHQgPDwgIiAiIDw8IGZCb3R0b20gKyBmV2lkdGggLyAyIDw8ICIgbCBTXG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc0FwcFN0cmVhbS5HZXRCeXRlU3RyaW5nKCk7Cit9CitDRlhfQnl0ZVN0cmluZyBDUFZUX0dlbmVyYXRlQVA6OkdlbmVyYXRlQ29sb3JBUChjb25zdCBDUFZUX0NvbG9yICYgY29sb3IsIGNvbnN0IEZYX0JPT0wgJiBiRmlsbE9yU3Ryb2tlKQoreworICAgIENGWF9CeXRlVGV4dEJ1ZiBzQ29sb3JTdHJlYW07CisgICAgc3dpdGNoIChjb2xvci5uQ29sb3JUeXBlKSB7CisgICAgICAgIGNhc2UgQ1RfUkdCOgorICAgICAgICAgICAgc0NvbG9yU3RyZWFtIDw8IGNvbG9yLmZDb2xvcjEgPDwgIiAiIDw8IGNvbG9yLmZDb2xvcjIgPDwgIiAiIDw8IGNvbG9yLmZDb2xvcjMgPDwgIiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgPDwgKGJGaWxsT3JTdHJva2UgPyAicmciIDogIlJHIikgPDwgIlxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENUX0dSQVk6CisgICAgICAgICAgICBzQ29sb3JTdHJlYW0gPDwgY29sb3IuZkNvbG9yMSA8PCAiICIgPDwgKGJGaWxsT3JTdHJva2UgPyAiZyIgOiAiRyIpIDw8ICJcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDVF9DTVlLOgorICAgICAgICAgICAgc0NvbG9yU3RyZWFtIDw8IGNvbG9yLmZDb2xvcjEgPDwgIiAiIDw8IGNvbG9yLmZDb2xvcjIgPDwgIiAiIDw8IGNvbG9yLmZDb2xvcjMgPDwgIiAiIDw8IGNvbG9yLmZDb2xvcjQgPDwgIiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgPDwgKGJGaWxsT3JTdHJva2UgPyAiayIgOiAiSyIpIDw8ICJcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHNDb2xvclN0cmVhbS5HZXRCeXRlU3RyaW5nKCk7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmZG9jL2RvY19iYXNpYy5jcHAgYi9jb3JlL3NyYy9mcGRmZG9jL2RvY19iYXNpYy5jcHAKaW5kZXggNGVjOGZiNy4uMTk5YTlhNiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmRvYy9kb2NfYmFzaWMuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX2Jhc2ljLmNwcApAQCAtMSw1NjcgKzEsNTY3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mcGRmZG9jL2ZwZGZfZG9jLmgiDQotY29uc3QgaW50IG5NYXhSZWN1cnNpb24gPSAzMjsNCi1pbnQgQ1BERl9EZXN0OjpHZXRQYWdlSW5kZXgoQ1BERl9Eb2N1bWVudCogcERvYykNCi17DQotICAgIGlmIChtX3BPYmogPT0gTlVMTCB8fCBtX3BPYmotPkdldFR5cGUoKSAhPSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIENQREZfT2JqZWN0KiBwUGFnZSA9ICgoQ1BERl9BcnJheSopbV9wT2JqKS0+R2V0RWxlbWVudFZhbHVlKDApOw0KLSAgICBpZiAocFBhZ2UgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgaWYgKHBQYWdlLT5HZXRUeXBlKCkgPT0gUERGT0JKX05VTUJFUikgew0KLSAgICAgICAgcmV0dXJuIHBQYWdlLT5HZXRJbnRlZ2VyKCk7DQotICAgIH0NCi0gICAgaWYgKHBQYWdlLT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIHJldHVybiBwRG9jLT5HZXRQYWdlSW5kZXgocFBhZ2UtPkdldE9iak51bSgpKTsNCi19DQotRlhfRFdPUkQgQ1BERl9EZXN0OjpHZXRQYWdlT2JqTnVtKCkNCi17DQotICAgIGlmIChtX3BPYmogPT0gTlVMTCB8fCBtX3BPYmotPkdldFR5cGUoKSAhPSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIENQREZfT2JqZWN0KiBwUGFnZSA9ICgoQ1BERl9BcnJheSopbV9wT2JqKS0+R2V0RWxlbWVudFZhbHVlKDApOw0KLSAgICBpZiAocFBhZ2UgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgaWYgKHBQYWdlLT5HZXRUeXBlKCkgPT0gUERGT0JKX05VTUJFUikgew0KLSAgICAgICAgcmV0dXJuIHBQYWdlLT5HZXRJbnRlZ2VyKCk7DQotICAgIH0NCi0gICAgaWYgKHBQYWdlLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpIHsNCi0gICAgICAgIHJldHVybiBwUGFnZS0+R2V0T2JqTnVtKCk7DQotICAgIH0NCi0gICAgcmV0dXJuIDA7DQotfQ0KLWNvbnN0IEZYX0NIQVIqIGdfc1pvb21Nb2Rlc1tdID0geyJYWVoiLCAiRml0IiwgIkZpdEgiLCAiRml0ViIsICJGaXRSIiwgIkZpdEIiLCAiRml0QkgiLCAiRml0QlYiLCAiIn07DQotaW50IENQREZfRGVzdDo6R2V0Wm9vbU1vZGUoKQ0KLXsNCi0gICAgaWYgKG1fcE9iaiA9PSBOVUxMIHx8IG1fcE9iai0+R2V0VHlwZSgpICE9IFBERk9CSl9BUlJBWSkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgbW9kZSA9ICgoQ1BERl9BcnJheSopbV9wT2JqKS0+R2V0RWxlbWVudFZhbHVlKDEpLT5HZXRTdHJpbmcoKTsNCi0gICAgaW50IGkgPSAwOw0KLSAgICB3aGlsZSAoZ19zWm9vbU1vZGVzW2ldWzBdICE9ICdcMCcpIHsNCi0gICAgICAgIGlmIChtb2RlID09IGdfc1pvb21Nb2Rlc1tpXSkgew0KLSAgICAgICAgICAgIHJldHVybiBpICsgMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGkgKys7DQotICAgIH0NCi0gICAgcmV0dXJuIDA7DQotfQ0KLUZYX0ZMT0FUIENQREZfRGVzdDo6R2V0UGFyYW0oaW50IGluZGV4KQ0KLXsNCi0gICAgaWYgKG1fcE9iaiA9PSBOVUxMIHx8IG1fcE9iai0+R2V0VHlwZSgpICE9IFBERk9CSl9BUlJBWSkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgcmV0dXJuICgoQ1BERl9BcnJheSopbV9wT2JqKS0+R2V0TnVtYmVyKDIgKyBpbmRleCk7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENQREZfRGVzdDo6R2V0UmVtb3RlTmFtZSgpDQotew0KLSAgICBpZiAobV9wT2JqID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZygpOw0KLSAgICB9DQotICAgIHJldHVybiBtX3BPYmotPkdldFN0cmluZygpOw0KLX0NCi1DUERGX05hbWVUcmVlOjpDUERGX05hbWVUcmVlKENQREZfRG9jdW1lbnQqIHBEb2MsIEZYX0JTVFIgY2F0ZWdvcnkpDQotew0KLSAgICBtX3BSb290ID0gcERvYy0+R2V0Um9vdCgpLT5HZXREaWN0KEZYX0JTVFJDKCJOYW1lcyIpKS0+R2V0RGljdChjYXRlZ29yeSk7DQotfQ0KLXN0YXRpYyBDUERGX09iamVjdCogU2VhcmNoTmFtZU5vZGUoQ1BERl9EaWN0aW9uYXJ5KiBwTm9kZSwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbkluZGV4LCBDUERGX0FycmF5KiogcHBGaW5kLCBpbnQgbkxldmVsID0gMCkNCi17DQotICAgIGlmIChuTGV2ZWwgPiBuTWF4UmVjdXJzaW9uKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDUERGX0FycmF5KiBwTGltaXRzID0gcE5vZGUtPkdldEFycmF5KEZYX0JTVFJDKCJMaW1pdHMiKSk7DQotICAgIGlmIChwTGltaXRzICE9IE5VTEwpIHsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIGNzTGVmdCA9IHBMaW1pdHMtPkdldFN0cmluZygwKTsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIGNzUmlnaHQgPSBwTGltaXRzLT5HZXRTdHJpbmcoMSk7DQotICAgICAgICBpZiAoY3NMZWZ0LkNvbXBhcmUoY3NSaWdodCkgPiAwKSB7DQotICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3NUbXAgPSBjc1JpZ2h0Ow0KLSAgICAgICAgICAgIGNzUmlnaHQgPSBjc0xlZnQ7DQotICAgICAgICAgICAgY3NMZWZ0ID0gY3NUbXA7DQotICAgICAgICB9DQotICAgICAgICBpZiAoY3NOYW1lLkNvbXBhcmUoY3NMZWZ0KSA8IDAgfHwgY3NOYW1lLkNvbXBhcmUoY3NSaWdodCkgPiAwKSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgQ1BERl9BcnJheSogcE5hbWVzID0gcE5vZGUtPkdldEFycmF5KEZYX0JTVFJDKCJOYW1lcyIpKTsNCi0gICAgaWYgKHBOYW1lcykgew0KLSAgICAgICAgRlhfRFdPUkQgZHdDb3VudCA9IHBOYW1lcy0+R2V0Q291bnQoKSAvIDI7DQotICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgZHdDb3VudDsgaSArKykgew0KLSAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGNzVmFsdWUgPSBwTmFtZXMtPkdldFN0cmluZyhpICogMik7DQotICAgICAgICAgICAgRlhfSU5UMzIgaUNvbXBhcmUgPSBjc1ZhbHVlLkNvbXBhcmUoY3NOYW1lKTsNCi0gICAgICAgICAgICBpZiAoaUNvbXBhcmUgPD0gMCkgew0KLSAgICAgICAgICAgICAgICBpZiAocHBGaW5kICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgICpwcEZpbmQgPSBwTmFtZXM7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKGlDb21wYXJlIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbkluZGV4ICs9IGk7DQotICAgICAgICAgICAgcmV0dXJuIHBOYW1lcy0+R2V0RWxlbWVudFZhbHVlKGkgKiAyICsgMSk7DQotICAgICAgICB9DQotICAgICAgICBuSW5kZXggKz0gZHdDb3VudDsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfQXJyYXkqIHBLaWRzID0gcE5vZGUtPkdldEFycmF5KEZYX0JTVFJDKCJLaWRzIikpOw0KLSAgICBpZiAocEtpZHMgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHBLaWRzLT5HZXRDb3VudCgpOyBpICsrKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBLaWQgPSBwS2lkcy0+R2V0RGljdChpKTsNCi0gICAgICAgIGlmIChwS2lkID09IE5VTEwpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIENQREZfT2JqZWN0KiBwRm91bmQgPSBTZWFyY2hOYW1lTm9kZShwS2lkLCBjc05hbWUsIG5JbmRleCwgcHBGaW5kLCBuTGV2ZWwgKyAxKTsNCi0gICAgICAgIGlmIChwRm91bmQpIHsNCi0gICAgICAgICAgICByZXR1cm4gcEZvdW5kOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1zdGF0aWMgQ1BERl9PYmplY3QqIFNlYXJjaE5hbWVOb2RlKENQREZfRGljdGlvbmFyeSogcE5vZGUsIGludCBuSW5kZXgsIGludCYgbkN1ckluZGV4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZSwgQ1BERl9BcnJheSoqIHBwRmluZCwgaW50IG5MZXZlbCA9IDApDQotew0KLSAgICBpZiAobkxldmVsID4gbk1heFJlY3Vyc2lvbikgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9BcnJheSogcE5hbWVzID0gcE5vZGUtPkdldEFycmF5KEZYX0JTVFJDKCJOYW1lcyIpKTsNCi0gICAgaWYgKHBOYW1lcykgew0KLSAgICAgICAgaW50IG5Db3VudCA9IHBOYW1lcy0+R2V0Q291bnQoKSAvIDI7DQotICAgICAgICBpZiAobkluZGV4ID49IG5DdXJJbmRleCArIG5Db3VudCkgew0KLSAgICAgICAgICAgIG5DdXJJbmRleCArPSBuQ291bnQ7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlmIChwcEZpbmQgIT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAqcHBGaW5kID0gcE5hbWVzOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjc05hbWUgPSBwTmFtZXMtPkdldFN0cmluZygobkluZGV4IC0gbkN1ckluZGV4KSAqIDIpOw0KLSAgICAgICAgICAgIHJldHVybiBwTmFtZXMtPkdldEVsZW1lbnRWYWx1ZSgobkluZGV4IC0gbkN1ckluZGV4KSAqIDIgKyAxKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDUERGX0FycmF5KiBwS2lkcyA9IHBOb2RlLT5HZXRBcnJheShGWF9CU1RSQygiS2lkcyIpKTsNCi0gICAgaWYgKHBLaWRzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwS2lkcy0+R2V0Q291bnQoKTsgaSArKykgew0KLSAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwS2lkID0gcEtpZHMtPkdldERpY3QoaSk7DQotICAgICAgICBpZiAocEtpZCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBDUERGX09iamVjdCogcEZvdW5kID0gU2VhcmNoTmFtZU5vZGUocEtpZCwgbkluZGV4LCBuQ3VySW5kZXgsIGNzTmFtZSwgcHBGaW5kLCBuTGV2ZWwgKyAxKTsNCi0gICAgICAgIGlmIChwRm91bmQpIHsNCi0gICAgICAgICAgICByZXR1cm4gcEZvdW5kOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1zdGF0aWMgaW50IENvdW50TmFtZXMoQ1BERl9EaWN0aW9uYXJ5KiBwTm9kZSwgaW50IG5MZXZlbCA9IDApDQotew0KLSAgICBpZiAobkxldmVsID4gbk1heFJlY3Vyc2lvbikgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgQ1BERl9BcnJheSogcE5hbWVzID0gcE5vZGUtPkdldEFycmF5KEZYX0JTVFJDKCJOYW1lcyIpKTsNCi0gICAgaWYgKHBOYW1lcykgew0KLSAgICAgICAgcmV0dXJuIHBOYW1lcy0+R2V0Q291bnQoKSAvIDI7DQotICAgIH0NCi0gICAgQ1BERl9BcnJheSogcEtpZHMgPSBwTm9kZS0+R2V0QXJyYXkoRlhfQlNUUkMoIktpZHMiKSk7DQotICAgIGlmIChwS2lkcyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBpbnQgbkNvdW50ID0gMDsNCi0gICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHBLaWRzLT5HZXRDb3VudCgpOyBpICsrKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBLaWQgPSBwS2lkcy0+R2V0RGljdChpKTsNCi0gICAgICAgIGlmIChwS2lkID09IE5VTEwpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIG5Db3VudCArPSBDb3VudE5hbWVzKHBLaWQsIG5MZXZlbCArIDEpOw0KLSAgICB9DQotICAgIHJldHVybiBuQ291bnQ7DQotfQ0KLWludCBDUERGX05hbWVUcmVlOjpHZXRDb3VudCgpIGNvbnN0DQotew0KLSAgICBpZiAobV9wUm9vdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICByZXR1cm4gOjpDb3VudE5hbWVzKG1fcFJvb3QpOw0KLX0NCi1pbnQgQ1BERl9OYW1lVHJlZTo6R2V0SW5kZXgoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZSkgY29uc3QNCi17DQotICAgIGlmIChtX3BSb290ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBpbnQgbkluZGV4ID0gMDsNCi0gICAgaWYgKFNlYXJjaE5hbWVOb2RlKG1fcFJvb3QsIGNzTmFtZSwgbkluZGV4LCBOVUxMKSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgcmV0dXJuIG5JbmRleDsNCi19DQotQ1BERl9PYmplY3QqIENQREZfTmFtZVRyZWU6Okxvb2t1cFZhbHVlKGludCBuSW5kZXgsIENGWF9CeXRlU3RyaW5nJiBjc05hbWUpIGNvbnN0DQotew0KLSAgICBpZiAobV9wUm9vdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpbnQgbkN1ckluZGV4ID0gMDsNCi0gICAgcmV0dXJuIFNlYXJjaE5hbWVOb2RlKG1fcFJvb3QsIG5JbmRleCwgbkN1ckluZGV4LCBjc05hbWUsIE5VTEwpOw0KLX0NCi1DUERGX09iamVjdCogQ1BERl9OYW1lVHJlZTo6TG9va3VwVmFsdWUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZSkgY29uc3QNCi17DQotICAgIGlmIChtX3BSb290ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGludCBuSW5kZXggPSAwOw0KLSAgICByZXR1cm4gU2VhcmNoTmFtZU5vZGUobV9wUm9vdCwgY3NOYW1lLCBuSW5kZXgsIE5VTEwpOw0KLX0NCi1DUERGX0FycmF5KglDUERGX05hbWVUcmVlOjpMb29rdXBOYW1lZERlc3QoQ1BERl9Eb2N1bWVudCogcERvYywgRlhfQlNUUiBzTmFtZSkNCi17DQotICAgIENQREZfT2JqZWN0KiBwVmFsdWUgPSBMb29rdXBWYWx1ZShzTmFtZSk7DQotICAgIGlmIChwVmFsdWUgPT0gTlVMTCkgew0KLSAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGVzdHMgPSBwRG9jLT5HZXRSb290KCktPkdldERpY3QoRlhfQlNUUkMoIkRlc3RzIikpOw0KLSAgICAgICAgaWYgKHBEZXN0cyA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBwVmFsdWUgPSBwRGVzdHMtPkdldEVsZW1lbnRWYWx1ZShzTmFtZSk7DQotICAgIH0NCi0gICAgaWYgKHBWYWx1ZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAocFZhbHVlLT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICByZXR1cm4gKENQREZfQXJyYXkqKXBWYWx1ZTsNCi0gICAgfQ0KLSAgICBpZiAocFZhbHVlLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpIHsNCi0gICAgICAgIHJldHVybiAoKENQREZfRGljdGlvbmFyeSopcFZhbHVlKS0+R2V0QXJyYXkoRlhfQlNUUkMoIkQiKSk7DQotICAgIH0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLXN0YXRpYyBDRlhfV2lkZVN0cmluZyBDaGFuZ2VTbGFzaFRvUGxhdGZvcm0oRlhfTFBDV1NUUiBzdHIpDQotew0KLSAgICBDRlhfV2lkZVN0cmluZyByZXN1bHQ7DQotICAgIHdoaWxlICgqc3RyKSB7DQotICAgICAgICBpZiAoKnN0ciA9PSAnLycpIHsNCi0jaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfDQotICAgICAgICAgICAgcmVzdWx0ICs9ICc6JzsNCi0jZWxpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXw0KLSAgICAgICAgICAgIHJlc3VsdCArPSAnXFwnOw0KLSNlbHNlDQotICAgICAgICAgICAgcmVzdWx0ICs9ICpzdHI7DQotI2VuZGlmDQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHJlc3VsdCArPSAqc3RyOw0KLSAgICAgICAgfQ0KLSAgICAgICAgc3RyKys7DQotICAgIH0NCi0gICAgcmV0dXJuIHJlc3VsdDsNCi19DQotc3RhdGljIENGWF9XaWRlU3RyaW5nIEZJTEVTUEVDX0RlY29kZUZpbGVOYW1lKEZYX1dTVFIgZmlsZXBhdGgpDQotew0KLSAgICBpZiAoZmlsZXBhdGguR2V0TGVuZ3RoKCkgPD0gMSkgew0KLSAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7DQotICAgIH0NCi0jaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfDQotICAgIGlmIChmaWxlcGF0aC5MZWZ0KHNpemVvZigiL01hYyIpIC0gMSkgPT0gQ0ZYX1dpZGVTdHJpbmdDKEwiL01hYyIpKSB7DQotICAgICAgICByZXR1cm4gQ2hhbmdlU2xhc2hUb1BsYXRmb3JtKGZpbGVwYXRoLkdldFB0cigpICsgMSk7DQotICAgIH0NCi0gICAgcmV0dXJuIENoYW5nZVNsYXNoVG9QbGF0Zm9ybShmaWxlcGF0aC5HZXRQdHIoKSk7DQotI2VsaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18NCi0gICAgaWYgKGZpbGVwYXRoLkdldEF0KDApICE9ICcvJykgew0KLSAgICAgICAgcmV0dXJuIENoYW5nZVNsYXNoVG9QbGF0Zm9ybShmaWxlcGF0aC5HZXRQdHIoKSk7DQotICAgIH0NCi0gICAgaWYgKGZpbGVwYXRoLkdldEF0KDEpID09ICcvJykgew0KLSAgICAgICAgcmV0dXJuIENoYW5nZVNsYXNoVG9QbGF0Zm9ybShmaWxlcGF0aC5HZXRQdHIoKSArIDEpOw0KLSAgICB9DQotICAgIGlmIChmaWxlcGF0aC5HZXRBdCgyKSA9PSAnLycpIHsNCi0gICAgICAgIENGWF9XaWRlU3RyaW5nIHJlc3VsdDsNCi0gICAgICAgIHJlc3VsdCArPSBmaWxlcGF0aC5HZXRBdCgxKTsNCi0gICAgICAgIHJlc3VsdCArPSAnOic7DQotICAgICAgICByZXN1bHQgKz0gQ2hhbmdlU2xhc2hUb1BsYXRmb3JtKGZpbGVwYXRoLkdldFB0cigpICsgMik7DQotICAgICAgICByZXR1cm4gcmVzdWx0Ow0KLSAgICB9DQotICAgIENGWF9XaWRlU3RyaW5nIHJlc3VsdDsNCi0gICAgcmVzdWx0ICs9ICdcXCc7DQotICAgIHJlc3VsdCArPSBDaGFuZ2VTbGFzaFRvUGxhdGZvcm0oZmlsZXBhdGguR2V0UHRyKCkpOw0KLSAgICByZXR1cm4gcmVzdWx0Ow0KLSNlbHNlDQotICAgIHJldHVybiBmaWxlcGF0aDsNCi0jZW5kaWYNCi19DQotRlhfQk9PTCBDUERGX0ZpbGVTcGVjOjpHZXRGaWxlTmFtZShDRlhfV2lkZVN0cmluZyAmY3NGaWxlTmFtZSkgY29uc3QNCi17DQotICAgIGlmIChtX3BPYmogPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChtX3BPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfRElDVElPTkFSWSkgew0KLSAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IChDUERGX0RpY3Rpb25hcnkqKW1fcE9iajsNCi0gICAgICAgIGNzRmlsZU5hbWUgPSBwRGljdC0+R2V0VW5pY29kZVRleHQoRlhfQlNUUkMoIlVGIikpOw0KLSAgICAgICAgaWYgKGNzRmlsZU5hbWUuSXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgY3NGaWxlTmFtZSA9IENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwocERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiRiIpKSk7DQotICAgICAgICB9DQotICAgICAgICBpZiAocERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiRlMiKSkgPT0gRlhfQlNUUkMoIlVSTCIpKSB7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoY3NGaWxlTmFtZS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICBpZiAocERpY3QtPktleUV4aXN0KEZYX0JTVFJDKCJET1MiKSkpIHsNCi0gICAgICAgICAgICAgICAgY3NGaWxlTmFtZSA9IENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwocERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiRE9TIikpKTsNCi0gICAgICAgICAgICB9IGVsc2UgaWYgKHBEaWN0LT5LZXlFeGlzdChGWF9CU1RSQygiTWFjIikpKSB7DQotICAgICAgICAgICAgICAgIGNzRmlsZU5hbWUgPSBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKHBEaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIk1hYyIpKSk7DQotICAgICAgICAgICAgfSBlbHNlIGlmIChwRGljdC0+S2V5RXhpc3QoRlhfQlNUUkMoIlVuaXgiKSkpIHsNCi0gICAgICAgICAgICAgICAgY3NGaWxlTmFtZSA9IENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwocERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiVW5peCIpKSk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGNzRmlsZU5hbWUgPSBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKG1fcE9iai0+R2V0U3RyaW5nKCkpOw0KLSAgICB9DQotICAgIGNzRmlsZU5hbWUgPSBGSUxFU1BFQ19EZWNvZGVGaWxlTmFtZShjc0ZpbGVOYW1lKTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUNQREZfRmlsZVNwZWM6OkNQREZfRmlsZVNwZWMoKQ0KLXsNCi0gICAgbV9wT2JqID0gQ1BERl9EaWN0aW9uYXJ5OjpDcmVhdGUoKTsNCi0gICAgaWYgKG1fcE9iaiAhPSBOVUxMKSB7DQotICAgICAgICAoKENQREZfRGljdGlvbmFyeSopbV9wT2JqKS0+U2V0QXROYW1lKEZYX0JTVFJDKCJUeXBlIiksIEZYX0JTVFJDKCJGaWxlc3BlYyIpKTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENQREZfRmlsZVNwZWM6OklzVVJMKCkgY29uc3QNCi17DQotICAgIGlmIChtX3BPYmogPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChtX3BPYmotPkdldFR5cGUoKSAhPSBQREZPQkpfRElDVElPTkFSWSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHJldHVybiAoKENQREZfRGljdGlvbmFyeSopbV9wT2JqKS0+R2V0U3RyaW5nKEZYX0JTVFJDKCJGUyIpKSA9PSBGWF9CU1RSQygiVVJMIik7DQotfQ0KLXN0YXRpYyBDRlhfV2lkZVN0cmluZyBDaGFuZ2VTbGFzaFRvUERGKEZYX0xQQ1dTVFIgc3RyKQ0KLXsNCi0gICAgQ0ZYX1dpZGVTdHJpbmcgcmVzdWx0Ow0KLSAgICB3aGlsZSAoKnN0cikgew0KLSAgICAgICAgaWYgKCpzdHIgPT0gJ1xcJyB8fCAqc3RyID09ICc6Jykgew0KLSAgICAgICAgICAgIHJlc3VsdCArPSAnLyc7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHJlc3VsdCArPSAqc3RyOw0KLSAgICAgICAgfQ0KLSAgICAgICAgc3RyKys7DQotICAgIH0NCi0gICAgcmV0dXJuIHJlc3VsdDsNCi19DQotQ0ZYX1dpZGVTdHJpbmcgRklMRVNQRUNfRW5jb2RlRmlsZU5hbWUoRlhfV1NUUiBmaWxlcGF0aCkNCi17DQotICAgIGlmIChmaWxlcGF0aC5HZXRMZW5ndGgoKSA8PSAxKSB7DQotICAgICAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsNCi0gICAgfQ0KLSNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXw0KLSAgICBpZiAoZmlsZXBhdGguR2V0QXQoMSkgPT0gJzonKSB7DQotICAgICAgICBDRlhfV2lkZVN0cmluZyByZXN1bHQ7DQotICAgICAgICByZXN1bHQgPSAnLyc7DQotICAgICAgICByZXN1bHQgKz0gZmlsZXBhdGguR2V0QXQoMCk7DQotICAgICAgICBpZiAoZmlsZXBhdGguR2V0QXQoMikgIT0gJ1xcJykgew0KLSAgICAgICAgICAgIHJlc3VsdCArPSAnLyc7DQotICAgICAgICB9DQotICAgICAgICByZXN1bHQgKz0gQ2hhbmdlU2xhc2hUb1BERihmaWxlcGF0aC5HZXRQdHIoKSArIDIpOw0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsNCi0gICAgfQ0KLSAgICBpZiAoZmlsZXBhdGguR2V0QXQoMCkgPT0gJ1xcJyAmJiBmaWxlcGF0aC5HZXRBdCgxKSA9PSAnXFwnKSB7DQotICAgICAgICByZXR1cm4gQ2hhbmdlU2xhc2hUb1BERihmaWxlcGF0aC5HZXRQdHIoKSArIDEpOw0KLSAgICB9DQotICAgIGlmIChmaWxlcGF0aC5HZXRBdCgwKSA9PSAnXFwnKSB7DQotICAgICAgICBDRlhfV2lkZVN0cmluZyByZXN1bHQ7DQotICAgICAgICByZXN1bHQgPSAnLyc7DQotICAgICAgICByZXN1bHQgKz0gQ2hhbmdlU2xhc2hUb1BERihmaWxlcGF0aC5HZXRQdHIoKSk7DQotICAgICAgICByZXR1cm4gcmVzdWx0Ow0KLSAgICB9DQotICAgIHJldHVybiBDaGFuZ2VTbGFzaFRvUERGKGZpbGVwYXRoLkdldFB0cigpKTsNCi0jZWxpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8NCi0gICAgaWYgKGZpbGVwYXRoLkxlZnQoc2l6ZW9mKCJNYWMiKSAtIDEpID09IEZYX1dTVFJDKEwiTWFjIikpIHsNCi0gICAgICAgIENGWF9XaWRlU3RyaW5nIHJlc3VsdDsNCi0gICAgICAgIHJlc3VsdCA9ICcvJzsNCi0gICAgICAgIHJlc3VsdCArPSBDaGFuZ2VTbGFzaFRvUERGKGZpbGVwYXRoLkdldFB0cigpKTsNCi0gICAgICAgIHJldHVybiByZXN1bHQ7DQotICAgIH0NCi0gICAgcmV0dXJuIENoYW5nZVNsYXNoVG9QREYoZmlsZXBhdGguR2V0UHRyKCkpOw0KLSNlbHNlDQotICAgIHJldHVybiBmaWxlcGF0aDsNCi0jZW5kaWYNCi19DQotQ1BERl9TdHJlYW0qIENQREZfRmlsZVNwZWM6OkdldEZpbGVTdHJlYW0oKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fcE9iaiA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBGWF9JTlQzMiBpVHlwZSA9IG1fcE9iai0+R2V0VHlwZSgpOw0KLSAgICBpZiAoaVR5cGUgPT0gUERGT0JKX1NUUkVBTSkgew0KLSAgICAgICAgcmV0dXJuIChDUERGX1N0cmVhbSopbV9wT2JqOw0KLSAgICB9IGVsc2UgaWYgKGlUeXBlID09IFBERk9CSl9ESUNUSU9OQVJZKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkgKnBFRiA9ICgoQ1BERl9EaWN0aW9uYXJ5KiltX3BPYmopLT5HZXREaWN0KEZYX0JTVFJDKCJFRiIpKTsNCi0gICAgICAgIGlmIChwRUYgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHBFRi0+R2V0U3RyZWFtKEZYX0JTVFJDKCJGIikpOw0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1zdGF0aWMgdm9pZCBGUERGRE9DX0ZJTEVTUEVDX1NldEZpbGVOYW1lKENQREZfT2JqZWN0ICpwT2JqLCBGWF9XU1RSIHdzRmlsZU5hbWUsIEZYX0JPT0wgYlVSTCkNCi17DQotICAgIEFTU0VSVChwT2JqICE9IE5VTEwpOw0KLSAgICBDRlhfV2lkZVN0cmluZyB3c1N0cjsNCi0gICAgaWYgKGJVUkwpIHsNCi0gICAgICAgIHdzU3RyID0gd3NGaWxlTmFtZTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHdzU3RyID0gRklMRVNQRUNfRW5jb2RlRmlsZU5hbWUod3NGaWxlTmFtZSk7DQotICAgIH0NCi0gICAgRlhfSU5UMzIgaVR5cGUgPSBwT2JqLT5HZXRUeXBlKCk7DQotICAgIGlmIChpVHlwZSA9PSBQREZPQkpfU1RSSU5HKSB7DQotICAgICAgICBwT2JqLT5TZXRTdHJpbmcoQ0ZYX0J5dGVTdHJpbmc6OkZyb21Vbmljb2RlKHdzU3RyKSk7DQotICAgIH0gZWxzZSBpZiAoaVR5cGUgPT0gUERGT0JKX0RJQ1RJT05BUlkpIHsNCi0gICAgICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KilwT2JqOw0KLSAgICAgICAgcERpY3QtPlNldEF0U3RyaW5nKEZYX0JTVFJDKCJGIiksIENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZSh3c1N0cikpOw0KLSAgICAgICAgcERpY3QtPlNldEF0U3RyaW5nKEZYX0JTVFJDKCJVRiIpLCBQREZfRW5jb2RlVGV4dCh3c1N0cikpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9GaWxlU3BlYzo6U2V0RmlsZU5hbWUoRlhfV1NUUiB3c0ZpbGVOYW1lLCBGWF9CT09MIGJVUkwpDQotew0KLSAgICBBU1NFUlQobV9wT2JqICE9IE5VTEwpOw0KLSAgICBpZiAobV9wT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkgJiYgYlVSTCkgew0KLSAgICAgICAgKChDUERGX0RpY3Rpb25hcnkqKW1fcE9iaiktPlNldEF0TmFtZShGWF9CU1RSQygiRlMiKSwgIlVSTCIpOw0KLSAgICB9DQotICAgIEZQREZET0NfRklMRVNQRUNfU2V0RmlsZU5hbWUobV9wT2JqLCB3c0ZpbGVOYW1lLCBiVVJMKTsNCi19DQotc3RhdGljIENGWF9XaWRlU3RyaW5nIF9NYWtlUm9tYW4oaW50IG51bSkNCi17DQotICAgIGNvbnN0IGludCBhcmFiaWNbXSA9IHsNCi0gICAgICAgIDEwMDAsIDkwMCwgNTAwLCA0MDAsIDEwMCwgOTAsIDUwLCA0MCwgMTAsIDksIDUsIDQsIDENCi0gICAgfTsNCi0gICAgY29uc3QgQ0ZYX1dpZGVTdHJpbmcgcm9tYW5bXSA9IHsNCi0gICAgICAgIEwibSIsIEwiY20iLCBMImQiLCBMImNkIiwgTCJjIiwgTCJ4YyIsIEwibCIsIEwieGwiLCBMIngiLCBMIml4IiwgTCJ2IiwgTCJpdiIsIEwiaSINCi0gICAgfTsNCi0gICAgY29uc3QgaW50IG5NYXhOdW0gPSAxMDAwMDAwOw0KLSAgICBudW0gJT0gbk1heE51bTsNCi0gICAgaW50IGkgPSAwOw0KLSAgICBDRlhfV2lkZVN0cmluZyB3c1JvbWFuTnVtYmVyOw0KLSAgICB3aGlsZSAobnVtID4gMCkgew0KLSAgICAgICAgd2hpbGUgKG51bSA+PSBhcmFiaWNbaV0pIHsNCi0gICAgICAgICAgICBudW0gPSBudW0gLSBhcmFiaWNbaV07DQotICAgICAgICAgICAgd3NSb21hbk51bWJlciArPSByb21hbltpXTsNCi0gICAgICAgIH0NCi0gICAgICAgIGkgPSBpICsgMTsNCi0gICAgfQ0KLSAgICByZXR1cm4gd3NSb21hbk51bWJlcjsNCi19DQotc3RhdGljIENGWF9XaWRlU3RyaW5nIF9NYWtlTGV0dGVycyhpbnQgbnVtKQ0KLXsNCi0gICAgaWYgKG51bSA9PSAwKSB7DQotICAgICAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsNCi0gICAgfQ0KLSAgICBDRlhfV2lkZVN0cmluZyB3c0xldHRlcnM7DQotICAgIGNvbnN0IGludCBuTWF4Q291bnQgPSAxMDAwOw0KLSAgICBjb25zdCBpbnQgbkxldHRlckNvdW50ID0gMjY7DQotICAgIG51bSAtPSAxOw0KLSAgICBpbnQgY291bnQgPSBudW0gLyBuTGV0dGVyQ291bnQgKyAxOw0KLSAgICBjb3VudCAlPSBuTWF4Q291bnQ7DQotICAgIEZYX1dDSEFSIGNoID0gTCdhJyArIG51bSAlIG5MZXR0ZXJDb3VudDsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7DQotICAgICAgICB3c0xldHRlcnMgKz0gY2g7DQotICAgIH0NCi0gICAgcmV0dXJuIHdzTGV0dGVyczsNCi19DQotc3RhdGljIENGWF9XaWRlU3RyaW5nIF9HZXRMYWJlbE51bVBvcnRpb24oaW50IG51bSwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGJzU3R5bGUpDQotew0KLSAgICBDRlhfV2lkZVN0cmluZyB3c051bVBvcnRpb247DQotICAgIGlmCQkoYnNTdHlsZS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiB3c051bVBvcnRpb247DQotICAgIH0NCi0gICAgaWYgKGJzU3R5bGUgPT0gIkQiKSB7DQotICAgICAgICB3c051bVBvcnRpb24uRm9ybWF0KChGWF9MUENXU1RSKUwiJWQiLCBudW0pOw0KLSAgICB9IGVsc2UgaWYgKGJzU3R5bGUgPT0gIlIiKSB7DQotICAgICAgICB3c051bVBvcnRpb24gPSBfTWFrZVJvbWFuKG51bSk7DQotICAgICAgICB3c051bVBvcnRpb24uTWFrZVVwcGVyKCk7DQotICAgIH0gZWxzZSBpZiAoYnNTdHlsZSA9PSAiciIpIHsNCi0gICAgICAgIHdzTnVtUG9ydGlvbiA9IF9NYWtlUm9tYW4obnVtKTsNCi0gICAgfSBlbHNlIGlmIChic1N0eWxlID09ICJBIikgew0KLSAgICAgICAgd3NOdW1Qb3J0aW9uID0gX01ha2VMZXR0ZXJzKG51bSk7DQotICAgICAgICB3c051bVBvcnRpb24uTWFrZVVwcGVyKCk7DQotICAgIH0gZWxzZSBpZiAoYnNTdHlsZSA9PSAiYSIpIHsNCi0gICAgICAgIHdzTnVtUG9ydGlvbiA9IF9NYWtlTGV0dGVycyhudW0pOw0KLSAgICB9DQotICAgIHJldHVybiB3c051bVBvcnRpb247DQotfQ0KLUNGWF9XaWRlU3RyaW5nIENQREZfUGFnZUxhYmVsOjpHZXRMYWJlbChpbnQgblBhZ2UpIGNvbnN0DQotew0KLSAgICBDRlhfV2lkZVN0cmluZyB3c0xhYmVsOw0KLSAgICBpZiAobV9wRG9jdW1lbnQgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIHdzTGFiZWw7DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwUERGUm9vdCA9IG1fcERvY3VtZW50LT5HZXRSb290KCk7DQotICAgIGlmIChwUERGUm9vdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gd3NMYWJlbDsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBMYWJlbHMgPSBwUERGUm9vdC0+R2V0RGljdChGWF9CU1RSQygiUGFnZUxhYmVscyIpKTsNCi0gICAgQ1BERl9OdW1iZXJUcmVlIG51bWJlclRyZWUocExhYmVscyk7DQotICAgIENQREZfT2JqZWN0KiBwVmFsdWUgPSBOVUxMOw0KLSAgICBpbnQgbiA9IG5QYWdlOw0KLSAgICB3aGlsZSAobiA+PSAwKSB7DQotICAgICAgICBwVmFsdWUgPSBudW1iZXJUcmVlLkxvb2t1cFZhbHVlKG4pOw0KLSAgICAgICAgaWYgKHBWYWx1ZSAhPSBOVUxMKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBuLS07DQotICAgIH0NCi0gICAgaWYgKHBWYWx1ZSAhPSBOVUxMKSB7DQotICAgICAgICBwVmFsdWUgPSBwVmFsdWUtPkdldERpcmVjdCgpOw0KLSAgICAgICAgaWYgKHBWYWx1ZS0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKSB7DQotICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwTGFiZWwgPSAoQ1BERl9EaWN0aW9uYXJ5KilwVmFsdWU7DQotICAgICAgICAgICAgaWYgKHBMYWJlbC0+S2V5RXhpc3QoRlhfQlNUUkMoIlAiKSkpIHsNCi0gICAgICAgICAgICAgICAgd3NMYWJlbCArPSBwTGFiZWwtPkdldFVuaWNvZGVUZXh0KEZYX0JTVFJDKCJQIikpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBic051bWJlcmluZ1N0eWxlID0gcExhYmVsLT5HZXRTdHJpbmcoRlhfQlNUUkMoIlMiKSwgTlVMTCk7DQotICAgICAgICAgICAgaW50IG5MYWJlbE51bSA9IG5QYWdlIC0gbiArIHBMYWJlbC0+R2V0SW50ZWdlcihGWF9CU1RSQygiU3QiKSwgMSk7DQotICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgd3NOdW1Qb3J0aW9uID0gX0dldExhYmVsTnVtUG9ydGlvbihuTGFiZWxOdW0sIGJzTnVtYmVyaW5nU3R5bGUpOw0KLSAgICAgICAgICAgIHdzTGFiZWwgKz0gd3NOdW1Qb3J0aW9uOw0KLSAgICAgICAgICAgIHJldHVybiB3c0xhYmVsOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHdzTGFiZWwuRm9ybWF0KChGWF9MUENXU1RSKUwiJWQiLCBuUGFnZSArIDEpOw0KLSAgICByZXR1cm4gd3NMYWJlbDsNCi19DQotRlhfSU5UMzIgQ1BERl9QYWdlTGFiZWw6OkdldFBhZ2VCeUxhYmVsKEZYX0JTVFIgYnNMYWJlbCkgY29uc3QNCi17DQotICAgIGlmIChtX3BEb2N1bWVudCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwUERGUm9vdCA9IG1fcERvY3VtZW50LT5HZXRSb290KCk7DQotICAgIGlmIChwUERGUm9vdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgaW50IG5QYWdlcyA9IG1fcERvY3VtZW50LT5HZXRQYWdlQ291bnQoKTsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgYnNMYmw7DQotICAgIENGWF9CeXRlU3RyaW5nIGJzT3JpZyA9IGJzTGFiZWw7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgblBhZ2VzOyBpKyspIHsNCi0gICAgICAgIGJzTGJsID0gUERGX0VuY29kZVRleHQoR2V0TGFiZWwoaSkpOw0KLSAgICAgICAgaWYgKCFic0xibC5Db21wYXJlKGJzT3JpZykpIHsNCi0gICAgICAgICAgICByZXR1cm4gaTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBic0xibCA9IGJzT3JpZzsNCi0gICAgaW50IG5QYWdlID0gRlhTWVNfYXRvaShic0xibCk7DQotICAgIGlmIChuUGFnZSA+IDAgJiYgblBhZ2UgPD0gblBhZ2VzKSB7DQotICAgICAgICByZXR1cm4gblBhZ2U7DQotICAgIH0NCi0gICAgcmV0dXJuIC0xOw0KLX0NCi1GWF9JTlQzMiBDUERGX1BhZ2VMYWJlbDo6R2V0UGFnZUJ5TGFiZWwoRlhfV1NUUiB3c0xhYmVsKSBjb25zdA0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgYnNMYWJlbCA9IFBERl9FbmNvZGVUZXh0KChDRlhfV2lkZVN0cmluZyl3c0xhYmVsKTsNCi0gICAgcmV0dXJuIEdldFBhZ2VCeUxhYmVsKGJzTGFiZWwpOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mcGRmZG9jL2ZwZGZfZG9jLmgiCitjb25zdCBpbnQgbk1heFJlY3Vyc2lvbiA9IDMyOworaW50IENQREZfRGVzdDo6R2V0UGFnZUluZGV4KENQREZfRG9jdW1lbnQqIHBEb2MpCit7CisgICAgaWYgKG1fcE9iaiA9PSBOVUxMIHx8IG1fcE9iai0+R2V0VHlwZSgpICE9IFBERk9CSl9BUlJBWSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQ1BERl9PYmplY3QqIHBQYWdlID0gKChDUERGX0FycmF5KiltX3BPYmopLT5HZXRFbGVtZW50VmFsdWUoMCk7CisgICAgaWYgKHBQYWdlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChwUGFnZS0+R2V0VHlwZSgpID09IFBERk9CSl9OVU1CRVIpIHsKKyAgICAgICAgcmV0dXJuIHBQYWdlLT5HZXRJbnRlZ2VyKCk7CisgICAgfQorICAgIGlmIChwUGFnZS0+R2V0VHlwZSgpICE9IFBERk9CSl9ESUNUSU9OQVJZKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gcERvYy0+R2V0UGFnZUluZGV4KHBQYWdlLT5HZXRPYmpOdW0oKSk7Cit9CitGWF9EV09SRCBDUERGX0Rlc3Q6OkdldFBhZ2VPYmpOdW0oKQoreworICAgIGlmIChtX3BPYmogPT0gTlVMTCB8fCBtX3BPYmotPkdldFR5cGUoKSAhPSBQREZPQkpfQVJSQVkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIENQREZfT2JqZWN0KiBwUGFnZSA9ICgoQ1BERl9BcnJheSopbV9wT2JqKS0+R2V0RWxlbWVudFZhbHVlKDApOworICAgIGlmIChwUGFnZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAocFBhZ2UtPkdldFR5cGUoKSA9PSBQREZPQkpfTlVNQkVSKSB7CisgICAgICAgIHJldHVybiBwUGFnZS0+R2V0SW50ZWdlcigpOworICAgIH0KKyAgICBpZiAocFBhZ2UtPkdldFR5cGUoKSA9PSBQREZPQkpfRElDVElPTkFSWSkgeworICAgICAgICByZXR1cm4gcFBhZ2UtPkdldE9iak51bSgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KK2NvbnN0IEZYX0NIQVIqIGdfc1pvb21Nb2Rlc1tdID0geyJYWVoiLCAiRml0IiwgIkZpdEgiLCAiRml0ViIsICJGaXRSIiwgIkZpdEIiLCAiRml0QkgiLCAiRml0QlYiLCAiIn07CitpbnQgQ1BERl9EZXN0OjpHZXRab29tTW9kZSgpCit7CisgICAgaWYgKG1fcE9iaiA9PSBOVUxMIHx8IG1fcE9iai0+R2V0VHlwZSgpICE9IFBERk9CSl9BUlJBWSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgbW9kZSA9ICgoQ1BERl9BcnJheSopbV9wT2JqKS0+R2V0RWxlbWVudFZhbHVlKDEpLT5HZXRTdHJpbmcoKTsKKyAgICBpbnQgaSA9IDA7CisgICAgd2hpbGUgKGdfc1pvb21Nb2Rlc1tpXVswXSAhPSAnXDAnKSB7CisgICAgICAgIGlmIChtb2RlID09IGdfc1pvb21Nb2Rlc1tpXSkgeworICAgICAgICAgICAgcmV0dXJuIGkgKyAxOworICAgICAgICB9CisgICAgICAgIGkgKys7CisgICAgfQorICAgIHJldHVybiAwOworfQorRlhfRkxPQVQgQ1BERl9EZXN0OjpHZXRQYXJhbShpbnQgaW5kZXgpCit7CisgICAgaWYgKG1fcE9iaiA9PSBOVUxMIHx8IG1fcE9iai0+R2V0VHlwZSgpICE9IFBERk9CSl9BUlJBWSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuICgoQ1BERl9BcnJheSopbV9wT2JqKS0+R2V0TnVtYmVyKDIgKyBpbmRleCk7Cit9CitDRlhfQnl0ZVN0cmluZyBDUERGX0Rlc3Q6OkdldFJlbW90ZU5hbWUoKQoreworICAgIGlmIChtX3BPYmogPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fcE9iai0+R2V0U3RyaW5nKCk7Cit9CitDUERGX05hbWVUcmVlOjpDUERGX05hbWVUcmVlKENQREZfRG9jdW1lbnQqIHBEb2MsIEZYX0JTVFIgY2F0ZWdvcnkpCit7CisgICAgbV9wUm9vdCA9IHBEb2MtPkdldFJvb3QoKS0+R2V0RGljdChGWF9CU1RSQygiTmFtZXMiKSktPkdldERpY3QoY2F0ZWdvcnkpOworfQorc3RhdGljIENQREZfT2JqZWN0KiBTZWFyY2hOYW1lTm9kZShDUERGX0RpY3Rpb25hcnkqIHBOb2RlLCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIG5JbmRleCwgQ1BERl9BcnJheSoqIHBwRmluZCwgaW50IG5MZXZlbCA9IDApCit7CisgICAgaWYgKG5MZXZlbCA+IG5NYXhSZWN1cnNpb24pIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfQXJyYXkqIHBMaW1pdHMgPSBwTm9kZS0+R2V0QXJyYXkoRlhfQlNUUkMoIkxpbWl0cyIpKTsKKyAgICBpZiAocExpbWl0cyAhPSBOVUxMKSB7CisgICAgICAgIENGWF9CeXRlU3RyaW5nIGNzTGVmdCA9IHBMaW1pdHMtPkdldFN0cmluZygwKTsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3NSaWdodCA9IHBMaW1pdHMtPkdldFN0cmluZygxKTsKKyAgICAgICAgaWYgKGNzTGVmdC5Db21wYXJlKGNzUmlnaHQpID4gMCkgeworICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3NUbXAgPSBjc1JpZ2h0OworICAgICAgICAgICAgY3NSaWdodCA9IGNzTGVmdDsKKyAgICAgICAgICAgIGNzTGVmdCA9IGNzVG1wOworICAgICAgICB9CisgICAgICAgIGlmIChjc05hbWUuQ29tcGFyZShjc0xlZnQpIDwgMCB8fCBjc05hbWUuQ29tcGFyZShjc1JpZ2h0KSA+IDApIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIENQREZfQXJyYXkqIHBOYW1lcyA9IHBOb2RlLT5HZXRBcnJheShGWF9CU1RSQygiTmFtZXMiKSk7CisgICAgaWYgKHBOYW1lcykgeworICAgICAgICBGWF9EV09SRCBkd0NvdW50ID0gcE5hbWVzLT5HZXRDb3VudCgpIC8gMjsKKyAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IGR3Q291bnQ7IGkgKyspIHsKKyAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGNzVmFsdWUgPSBwTmFtZXMtPkdldFN0cmluZyhpICogMik7CisgICAgICAgICAgICBGWF9JTlQzMiBpQ29tcGFyZSA9IGNzVmFsdWUuQ29tcGFyZShjc05hbWUpOworICAgICAgICAgICAgaWYgKGlDb21wYXJlIDw9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAocHBGaW5kICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgKnBwRmluZCA9IHBOYW1lczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGlDb21wYXJlIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbkluZGV4ICs9IGk7CisgICAgICAgICAgICByZXR1cm4gcE5hbWVzLT5HZXRFbGVtZW50VmFsdWUoaSAqIDIgKyAxKTsKKyAgICAgICAgfQorICAgICAgICBuSW5kZXggKz0gZHdDb3VudDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfQXJyYXkqIHBLaWRzID0gcE5vZGUtPkdldEFycmF5KEZYX0JTVFJDKCJLaWRzIikpOworICAgIGlmIChwS2lkcyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcEtpZHMtPkdldENvdW50KCk7IGkgKyspIHsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwS2lkID0gcEtpZHMtPkdldERpY3QoaSk7CisgICAgICAgIGlmIChwS2lkID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIENQREZfT2JqZWN0KiBwRm91bmQgPSBTZWFyY2hOYW1lTm9kZShwS2lkLCBjc05hbWUsIG5JbmRleCwgcHBGaW5kLCBuTGV2ZWwgKyAxKTsKKyAgICAgICAgaWYgKHBGb3VuZCkgeworICAgICAgICAgICAgcmV0dXJuIHBGb3VuZDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK3N0YXRpYyBDUERGX09iamVjdCogU2VhcmNoTmFtZU5vZGUoQ1BERl9EaWN0aW9uYXJ5KiBwTm9kZSwgaW50IG5JbmRleCwgaW50JiBuQ3VySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nJiBjc05hbWUsIENQREZfQXJyYXkqKiBwcEZpbmQsIGludCBuTGV2ZWwgPSAwKQoreworICAgIGlmIChuTGV2ZWwgPiBuTWF4UmVjdXJzaW9uKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX0FycmF5KiBwTmFtZXMgPSBwTm9kZS0+R2V0QXJyYXkoRlhfQlNUUkMoIk5hbWVzIikpOworICAgIGlmIChwTmFtZXMpIHsKKyAgICAgICAgaW50IG5Db3VudCA9IHBOYW1lcy0+R2V0Q291bnQoKSAvIDI7CisgICAgICAgIGlmIChuSW5kZXggPj0gbkN1ckluZGV4ICsgbkNvdW50KSB7CisgICAgICAgICAgICBuQ3VySW5kZXggKz0gbkNvdW50OworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAocHBGaW5kICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAqcHBGaW5kID0gcE5hbWVzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3NOYW1lID0gcE5hbWVzLT5HZXRTdHJpbmcoKG5JbmRleCAtIG5DdXJJbmRleCkgKiAyKTsKKyAgICAgICAgICAgIHJldHVybiBwTmFtZXMtPkdldEVsZW1lbnRWYWx1ZSgobkluZGV4IC0gbkN1ckluZGV4KSAqIDIgKyAxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBDUERGX0FycmF5KiBwS2lkcyA9IHBOb2RlLT5HZXRBcnJheShGWF9CU1RSQygiS2lkcyIpKTsKKyAgICBpZiAocEtpZHMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHBLaWRzLT5HZXRDb3VudCgpOyBpICsrKSB7CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcEtpZCA9IHBLaWRzLT5HZXREaWN0KGkpOworICAgICAgICBpZiAocEtpZCA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBDUERGX09iamVjdCogcEZvdW5kID0gU2VhcmNoTmFtZU5vZGUocEtpZCwgbkluZGV4LCBuQ3VySW5kZXgsIGNzTmFtZSwgcHBGaW5kLCBuTGV2ZWwgKyAxKTsKKyAgICAgICAgaWYgKHBGb3VuZCkgeworICAgICAgICAgICAgcmV0dXJuIHBGb3VuZDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK3N0YXRpYyBpbnQgQ291bnROYW1lcyhDUERGX0RpY3Rpb25hcnkqIHBOb2RlLCBpbnQgbkxldmVsID0gMCkKK3sKKyAgICBpZiAobkxldmVsID4gbk1heFJlY3Vyc2lvbikgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcE5hbWVzID0gcE5vZGUtPkdldEFycmF5KEZYX0JTVFJDKCJOYW1lcyIpKTsKKyAgICBpZiAocE5hbWVzKSB7CisgICAgICAgIHJldHVybiBwTmFtZXMtPkdldENvdW50KCkgLyAyOworICAgIH0KKyAgICBDUERGX0FycmF5KiBwS2lkcyA9IHBOb2RlLT5HZXRBcnJheShGWF9CU1RSQygiS2lkcyIpKTsKKyAgICBpZiAocEtpZHMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaW50IG5Db3VudCA9IDA7CisgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHBLaWRzLT5HZXRDb3VudCgpOyBpICsrKSB7CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcEtpZCA9IHBLaWRzLT5HZXREaWN0KGkpOworICAgICAgICBpZiAocEtpZCA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBuQ291bnQgKz0gQ291bnROYW1lcyhwS2lkLCBuTGV2ZWwgKyAxKTsKKyAgICB9CisgICAgcmV0dXJuIG5Db3VudDsKK30KK2ludCBDUERGX05hbWVUcmVlOjpHZXRDb3VudCgpIGNvbnN0Cit7CisgICAgaWYgKG1fcFJvb3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIDo6Q291bnROYW1lcyhtX3BSb290KTsKK30KK2ludCBDUERGX05hbWVUcmVlOjpHZXRJbmRleChjb25zdCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lKSBjb25zdAoreworICAgIGlmIChtX3BSb290ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpbnQgbkluZGV4ID0gMDsKKyAgICBpZiAoU2VhcmNoTmFtZU5vZGUobV9wUm9vdCwgY3NOYW1lLCBuSW5kZXgsIE5VTEwpID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gbkluZGV4OworfQorQ1BERl9PYmplY3QqIENQREZfTmFtZVRyZWU6Okxvb2t1cFZhbHVlKGludCBuSW5kZXgsIENGWF9CeXRlU3RyaW5nJiBjc05hbWUpIGNvbnN0Cit7CisgICAgaWYgKG1fcFJvb3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaW50IG5DdXJJbmRleCA9IDA7CisgICAgcmV0dXJuIFNlYXJjaE5hbWVOb2RlKG1fcFJvb3QsIG5JbmRleCwgbkN1ckluZGV4LCBjc05hbWUsIE5VTEwpOworfQorQ1BERl9PYmplY3QqIENQREZfTmFtZVRyZWU6Okxvb2t1cFZhbHVlKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBjc05hbWUpIGNvbnN0Cit7CisgICAgaWYgKG1fcFJvb3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaW50IG5JbmRleCA9IDA7CisgICAgcmV0dXJuIFNlYXJjaE5hbWVOb2RlKG1fcFJvb3QsIGNzTmFtZSwgbkluZGV4LCBOVUxMKTsKK30KK0NQREZfQXJyYXkqCUNQREZfTmFtZVRyZWU6Okxvb2t1cE5hbWVkRGVzdChDUERGX0RvY3VtZW50KiBwRG9jLCBGWF9CU1RSIHNOYW1lKQoreworICAgIENQREZfT2JqZWN0KiBwVmFsdWUgPSBMb29rdXBWYWx1ZShzTmFtZSk7CisgICAgaWYgKHBWYWx1ZSA9PSBOVUxMKSB7CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcERlc3RzID0gcERvYy0+R2V0Um9vdCgpLT5HZXREaWN0KEZYX0JTVFJDKCJEZXN0cyIpKTsKKyAgICAgICAgaWYgKHBEZXN0cyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBwVmFsdWUgPSBwRGVzdHMtPkdldEVsZW1lbnRWYWx1ZShzTmFtZSk7CisgICAgfQorICAgIGlmIChwVmFsdWUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHBWYWx1ZS0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgeworICAgICAgICByZXR1cm4gKENQREZfQXJyYXkqKXBWYWx1ZTsKKyAgICB9CisgICAgaWYgKHBWYWx1ZS0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKSB7CisgICAgICAgIHJldHVybiAoKENQREZfRGljdGlvbmFyeSopcFZhbHVlKS0+R2V0QXJyYXkoRlhfQlNUUkMoIkQiKSk7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorc3RhdGljIENGWF9XaWRlU3RyaW5nIENoYW5nZVNsYXNoVG9QbGF0Zm9ybShGWF9MUENXU1RSIHN0cikKK3sKKyAgICBDRlhfV2lkZVN0cmluZyByZXN1bHQ7CisgICAgd2hpbGUgKCpzdHIpIHsKKyAgICAgICAgaWYgKCpzdHIgPT0gJy8nKSB7CisjaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfCisgICAgICAgICAgICByZXN1bHQgKz0gJzonOworI2VsaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18KKyAgICAgICAgICAgIHJlc3VsdCArPSAnXFwnOworI2Vsc2UKKyAgICAgICAgICAgIHJlc3VsdCArPSAqc3RyOworI2VuZGlmCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXN1bHQgKz0gKnN0cjsKKyAgICAgICAgfQorICAgICAgICBzdHIrKzsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KK3N0YXRpYyBDRlhfV2lkZVN0cmluZyBGSUxFU1BFQ19EZWNvZGVGaWxlTmFtZShGWF9XU1RSIGZpbGVwYXRoKQoreworICAgIGlmIChmaWxlcGF0aC5HZXRMZW5ndGgoKSA8PSAxKSB7CisgICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZygpOworICAgIH0KKyNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8KKyAgICBpZiAoZmlsZXBhdGguTGVmdChzaXplb2YoIi9NYWMiKSAtIDEpID09IENGWF9XaWRlU3RyaW5nQyhMIi9NYWMiKSkgeworICAgICAgICByZXR1cm4gQ2hhbmdlU2xhc2hUb1BsYXRmb3JtKGZpbGVwYXRoLkdldFB0cigpICsgMSk7CisgICAgfQorICAgIHJldHVybiBDaGFuZ2VTbGFzaFRvUGxhdGZvcm0oZmlsZXBhdGguR2V0UHRyKCkpOworI2VsaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18KKyAgICBpZiAoZmlsZXBhdGguR2V0QXQoMCkgIT0gJy8nKSB7CisgICAgICAgIHJldHVybiBDaGFuZ2VTbGFzaFRvUGxhdGZvcm0oZmlsZXBhdGguR2V0UHRyKCkpOworICAgIH0KKyAgICBpZiAoZmlsZXBhdGguR2V0QXQoMSkgPT0gJy8nKSB7CisgICAgICAgIHJldHVybiBDaGFuZ2VTbGFzaFRvUGxhdGZvcm0oZmlsZXBhdGguR2V0UHRyKCkgKyAxKTsKKyAgICB9CisgICAgaWYgKGZpbGVwYXRoLkdldEF0KDIpID09ICcvJykgeworICAgICAgICBDRlhfV2lkZVN0cmluZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdCArPSBmaWxlcGF0aC5HZXRBdCgxKTsKKyAgICAgICAgcmVzdWx0ICs9ICc6JzsKKyAgICAgICAgcmVzdWx0ICs9IENoYW5nZVNsYXNoVG9QbGF0Zm9ybShmaWxlcGF0aC5HZXRQdHIoKSArIDIpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBDRlhfV2lkZVN0cmluZyByZXN1bHQ7CisgICAgcmVzdWx0ICs9ICdcXCc7CisgICAgcmVzdWx0ICs9IENoYW5nZVNsYXNoVG9QbGF0Zm9ybShmaWxlcGF0aC5HZXRQdHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgcmV0dXJuIGZpbGVwYXRoOworI2VuZGlmCit9CitGWF9CT09MIENQREZfRmlsZVNwZWM6OkdldEZpbGVOYW1lKENGWF9XaWRlU3RyaW5nICZjc0ZpbGVOYW1lKSBjb25zdAoreworICAgIGlmIChtX3BPYmogPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChtX3BPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfRElDVElPTkFSWSkgeworICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gKENQREZfRGljdGlvbmFyeSopbV9wT2JqOworICAgICAgICBjc0ZpbGVOYW1lID0gcERpY3QtPkdldFVuaWNvZGVUZXh0KEZYX0JTVFJDKCJVRiIpKTsKKyAgICAgICAgaWYgKGNzRmlsZU5hbWUuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjc0ZpbGVOYW1lID0gQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChwRGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJGIikpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiRlMiKSkgPT0gRlhfQlNUUkMoIlVSTCIpKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY3NGaWxlTmFtZS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmIChwRGljdC0+S2V5RXhpc3QoRlhfQlNUUkMoIkRPUyIpKSkgeworICAgICAgICAgICAgICAgIGNzRmlsZU5hbWUgPSBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKHBEaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIkRPUyIpKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHBEaWN0LT5LZXlFeGlzdChGWF9CU1RSQygiTWFjIikpKSB7CisgICAgICAgICAgICAgICAgY3NGaWxlTmFtZSA9IENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwocERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiTWFjIikpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocERpY3QtPktleUV4aXN0KEZYX0JTVFJDKCJVbml4IikpKSB7CisgICAgICAgICAgICAgICAgY3NGaWxlTmFtZSA9IENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwocERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiVW5peCIpKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGNzRmlsZU5hbWUgPSBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKG1fcE9iai0+R2V0U3RyaW5nKCkpOworICAgIH0KKyAgICBjc0ZpbGVOYW1lID0gRklMRVNQRUNfRGVjb2RlRmlsZU5hbWUoY3NGaWxlTmFtZSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CitDUERGX0ZpbGVTcGVjOjpDUERGX0ZpbGVTcGVjKCkKK3sKKyAgICBtX3BPYmogPSBDUERGX0RpY3Rpb25hcnk6OkNyZWF0ZSgpOworICAgIGlmIChtX3BPYmogIT0gTlVMTCkgeworICAgICAgICAoKENQREZfRGljdGlvbmFyeSopbV9wT2JqKS0+U2V0QXROYW1lKEZYX0JTVFJDKCJUeXBlIiksIEZYX0JTVFJDKCJGaWxlc3BlYyIpKTsKKyAgICB9Cit9CitGWF9CT09MIENQREZfRmlsZVNwZWM6OklzVVJMKCkgY29uc3QKK3sKKyAgICBpZiAobV9wT2JqID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAobV9wT2JqLT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gKChDUERGX0RpY3Rpb25hcnkqKW1fcE9iaiktPkdldFN0cmluZyhGWF9CU1RSQygiRlMiKSkgPT0gRlhfQlNUUkMoIlVSTCIpOworfQorc3RhdGljIENGWF9XaWRlU3RyaW5nIENoYW5nZVNsYXNoVG9QREYoRlhfTFBDV1NUUiBzdHIpCit7CisgICAgQ0ZYX1dpZGVTdHJpbmcgcmVzdWx0OworICAgIHdoaWxlICgqc3RyKSB7CisgICAgICAgIGlmICgqc3RyID09ICdcXCcgfHwgKnN0ciA9PSAnOicpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSAnLyc7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXN1bHQgKz0gKnN0cjsKKyAgICAgICAgfQorICAgICAgICBzdHIrKzsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KK0NGWF9XaWRlU3RyaW5nIEZJTEVTUEVDX0VuY29kZUZpbGVOYW1lKEZYX1dTVFIgZmlsZXBhdGgpCit7CisgICAgaWYgKGZpbGVwYXRoLkdldExlbmd0aCgpIDw9IDEpIHsKKyAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7CisgICAgfQorI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfCisgICAgaWYgKGZpbGVwYXRoLkdldEF0KDEpID09ICc6JykgeworICAgICAgICBDRlhfV2lkZVN0cmluZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdCA9ICcvJzsKKyAgICAgICAgcmVzdWx0ICs9IGZpbGVwYXRoLkdldEF0KDApOworICAgICAgICBpZiAoZmlsZXBhdGguR2V0QXQoMikgIT0gJ1xcJykgeworICAgICAgICAgICAgcmVzdWx0ICs9ICcvJzsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQgKz0gQ2hhbmdlU2xhc2hUb1BERihmaWxlcGF0aC5HZXRQdHIoKSArIDIpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICBpZiAoZmlsZXBhdGguR2V0QXQoMCkgPT0gJ1xcJyAmJiBmaWxlcGF0aC5HZXRBdCgxKSA9PSAnXFwnKSB7CisgICAgICAgIHJldHVybiBDaGFuZ2VTbGFzaFRvUERGKGZpbGVwYXRoLkdldFB0cigpICsgMSk7CisgICAgfQorICAgIGlmIChmaWxlcGF0aC5HZXRBdCgwKSA9PSAnXFwnKSB7CisgICAgICAgIENGWF9XaWRlU3RyaW5nIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0ID0gJy8nOworICAgICAgICByZXN1bHQgKz0gQ2hhbmdlU2xhc2hUb1BERihmaWxlcGF0aC5HZXRQdHIoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiBDaGFuZ2VTbGFzaFRvUERGKGZpbGVwYXRoLkdldFB0cigpKTsKKyNlbGlmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXworICAgIGlmIChmaWxlcGF0aC5MZWZ0KHNpemVvZigiTWFjIikgLSAxKSA9PSBGWF9XU1RSQyhMIk1hYyIpKSB7CisgICAgICAgIENGWF9XaWRlU3RyaW5nIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0ID0gJy8nOworICAgICAgICByZXN1bHQgKz0gQ2hhbmdlU2xhc2hUb1BERihmaWxlcGF0aC5HZXRQdHIoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiBDaGFuZ2VTbGFzaFRvUERGKGZpbGVwYXRoLkdldFB0cigpKTsKKyNlbHNlCisgICAgcmV0dXJuIGZpbGVwYXRoOworI2VuZGlmCit9CitDUERGX1N0cmVhbSogQ1BERl9GaWxlU3BlYzo6R2V0RmlsZVN0cmVhbSgpIGNvbnN0Cit7CisgICAgaWYgKG1fcE9iaiA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBGWF9JTlQzMiBpVHlwZSA9IG1fcE9iai0+R2V0VHlwZSgpOworICAgIGlmIChpVHlwZSA9PSBQREZPQkpfU1RSRUFNKSB7CisgICAgICAgIHJldHVybiAoQ1BERl9TdHJlYW0qKW1fcE9iajsKKyAgICB9IGVsc2UgaWYgKGlUeXBlID09IFBERk9CSl9ESUNUSU9OQVJZKSB7CisgICAgICAgIENQREZfRGljdGlvbmFyeSAqcEVGID0gKChDUERGX0RpY3Rpb25hcnkqKW1fcE9iaiktPkdldERpY3QoRlhfQlNUUkMoIkVGIikpOworICAgICAgICBpZiAocEVGID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwRUYtPkdldFN0cmVhbShGWF9CU1RSQygiRiIpKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CitzdGF0aWMgdm9pZCBGUERGRE9DX0ZJTEVTUEVDX1NldEZpbGVOYW1lKENQREZfT2JqZWN0ICpwT2JqLCBGWF9XU1RSIHdzRmlsZU5hbWUsIEZYX0JPT0wgYlVSTCkKK3sKKyAgICBBU1NFUlQocE9iaiAhPSBOVUxMKTsKKyAgICBDRlhfV2lkZVN0cmluZyB3c1N0cjsKKyAgICBpZiAoYlVSTCkgeworICAgICAgICB3c1N0ciA9IHdzRmlsZU5hbWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgd3NTdHIgPSBGSUxFU1BFQ19FbmNvZGVGaWxlTmFtZSh3c0ZpbGVOYW1lKTsKKyAgICB9CisgICAgRlhfSU5UMzIgaVR5cGUgPSBwT2JqLT5HZXRUeXBlKCk7CisgICAgaWYgKGlUeXBlID09IFBERk9CSl9TVFJJTkcpIHsKKyAgICAgICAgcE9iai0+U2V0U3RyaW5nKENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZSh3c1N0cikpOworICAgIH0gZWxzZSBpZiAoaVR5cGUgPT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IChDUERGX0RpY3Rpb25hcnkqKXBPYmo7CisgICAgICAgIHBEaWN0LT5TZXRBdFN0cmluZyhGWF9CU1RSQygiRiIpLCBDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUod3NTdHIpKTsKKyAgICAgICAgcERpY3QtPlNldEF0U3RyaW5nKEZYX0JTVFJDKCJVRiIpLCBQREZfRW5jb2RlVGV4dCh3c1N0cikpOworICAgIH0KK30KK3ZvaWQgQ1BERl9GaWxlU3BlYzo6U2V0RmlsZU5hbWUoRlhfV1NUUiB3c0ZpbGVOYW1lLCBGWF9CT09MIGJVUkwpCit7CisgICAgQVNTRVJUKG1fcE9iaiAhPSBOVUxMKTsKKyAgICBpZiAobV9wT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkgJiYgYlVSTCkgeworICAgICAgICAoKENQREZfRGljdGlvbmFyeSopbV9wT2JqKS0+U2V0QXROYW1lKEZYX0JTVFJDKCJGUyIpLCAiVVJMIik7CisgICAgfQorICAgIEZQREZET0NfRklMRVNQRUNfU2V0RmlsZU5hbWUobV9wT2JqLCB3c0ZpbGVOYW1lLCBiVVJMKTsKK30KK3N0YXRpYyBDRlhfV2lkZVN0cmluZyBfTWFrZVJvbWFuKGludCBudW0pCit7CisgICAgY29uc3QgaW50IGFyYWJpY1tdID0geworICAgICAgICAxMDAwLCA5MDAsIDUwMCwgNDAwLCAxMDAsIDkwLCA1MCwgNDAsIDEwLCA5LCA1LCA0LCAxCisgICAgfTsKKyAgICBjb25zdCBDRlhfV2lkZVN0cmluZyByb21hbltdID0geworICAgICAgICBMIm0iLCBMImNtIiwgTCJkIiwgTCJjZCIsIEwiYyIsIEwieGMiLCBMImwiLCBMInhsIiwgTCJ4IiwgTCJpeCIsIEwidiIsIEwiaXYiLCBMImkiCisgICAgfTsKKyAgICBjb25zdCBpbnQgbk1heE51bSA9IDEwMDAwMDA7CisgICAgbnVtICU9IG5NYXhOdW07CisgICAgaW50IGkgPSAwOworICAgIENGWF9XaWRlU3RyaW5nIHdzUm9tYW5OdW1iZXI7CisgICAgd2hpbGUgKG51bSA+IDApIHsKKyAgICAgICAgd2hpbGUgKG51bSA+PSBhcmFiaWNbaV0pIHsKKyAgICAgICAgICAgIG51bSA9IG51bSAtIGFyYWJpY1tpXTsKKyAgICAgICAgICAgIHdzUm9tYW5OdW1iZXIgKz0gcm9tYW5baV07CisgICAgICAgIH0KKyAgICAgICAgaSA9IGkgKyAxOworICAgIH0KKyAgICByZXR1cm4gd3NSb21hbk51bWJlcjsKK30KK3N0YXRpYyBDRlhfV2lkZVN0cmluZyBfTWFrZUxldHRlcnMoaW50IG51bSkKK3sKKyAgICBpZiAobnVtID09IDApIHsKKyAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7CisgICAgfQorICAgIENGWF9XaWRlU3RyaW5nIHdzTGV0dGVyczsKKyAgICBjb25zdCBpbnQgbk1heENvdW50ID0gMTAwMDsKKyAgICBjb25zdCBpbnQgbkxldHRlckNvdW50ID0gMjY7CisgICAgbnVtIC09IDE7CisgICAgaW50IGNvdW50ID0gbnVtIC8gbkxldHRlckNvdW50ICsgMTsKKyAgICBjb3VudCAlPSBuTWF4Q291bnQ7CisgICAgRlhfV0NIQVIgY2ggPSBMJ2EnICsgbnVtICUgbkxldHRlckNvdW50OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICB3c0xldHRlcnMgKz0gY2g7CisgICAgfQorICAgIHJldHVybiB3c0xldHRlcnM7Cit9CitzdGF0aWMgQ0ZYX1dpZGVTdHJpbmcgX0dldExhYmVsTnVtUG9ydGlvbihpbnQgbnVtLCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgYnNTdHlsZSkKK3sKKyAgICBDRlhfV2lkZVN0cmluZyB3c051bVBvcnRpb247CisgICAgaWYJCShic1N0eWxlLklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gd3NOdW1Qb3J0aW9uOworICAgIH0KKyAgICBpZiAoYnNTdHlsZSA9PSAiRCIpIHsKKyAgICAgICAgd3NOdW1Qb3J0aW9uLkZvcm1hdCgoRlhfTFBDV1NUUilMIiVkIiwgbnVtKTsKKyAgICB9IGVsc2UgaWYgKGJzU3R5bGUgPT0gIlIiKSB7CisgICAgICAgIHdzTnVtUG9ydGlvbiA9IF9NYWtlUm9tYW4obnVtKTsKKyAgICAgICAgd3NOdW1Qb3J0aW9uLk1ha2VVcHBlcigpOworICAgIH0gZWxzZSBpZiAoYnNTdHlsZSA9PSAiciIpIHsKKyAgICAgICAgd3NOdW1Qb3J0aW9uID0gX01ha2VSb21hbihudW0pOworICAgIH0gZWxzZSBpZiAoYnNTdHlsZSA9PSAiQSIpIHsKKyAgICAgICAgd3NOdW1Qb3J0aW9uID0gX01ha2VMZXR0ZXJzKG51bSk7CisgICAgICAgIHdzTnVtUG9ydGlvbi5NYWtlVXBwZXIoKTsKKyAgICB9IGVsc2UgaWYgKGJzU3R5bGUgPT0gImEiKSB7CisgICAgICAgIHdzTnVtUG9ydGlvbiA9IF9NYWtlTGV0dGVycyhudW0pOworICAgIH0KKyAgICByZXR1cm4gd3NOdW1Qb3J0aW9uOworfQorQ0ZYX1dpZGVTdHJpbmcgQ1BERl9QYWdlTGFiZWw6OkdldExhYmVsKGludCBuUGFnZSkgY29uc3QKK3sKKyAgICBDRlhfV2lkZVN0cmluZyB3c0xhYmVsOworICAgIGlmIChtX3BEb2N1bWVudCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiB3c0xhYmVsOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBQREZSb290ID0gbV9wRG9jdW1lbnQtPkdldFJvb3QoKTsKKyAgICBpZiAocFBERlJvb3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gd3NMYWJlbDsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwTGFiZWxzID0gcFBERlJvb3QtPkdldERpY3QoRlhfQlNUUkMoIlBhZ2VMYWJlbHMiKSk7CisgICAgQ1BERl9OdW1iZXJUcmVlIG51bWJlclRyZWUocExhYmVscyk7CisgICAgQ1BERl9PYmplY3QqIHBWYWx1ZSA9IE5VTEw7CisgICAgaW50IG4gPSBuUGFnZTsKKyAgICB3aGlsZSAobiA+PSAwKSB7CisgICAgICAgIHBWYWx1ZSA9IG51bWJlclRyZWUuTG9va3VwVmFsdWUobik7CisgICAgICAgIGlmIChwVmFsdWUgIT0gTlVMTCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbi0tOworICAgIH0KKyAgICBpZiAocFZhbHVlICE9IE5VTEwpIHsKKyAgICAgICAgcFZhbHVlID0gcFZhbHVlLT5HZXREaXJlY3QoKTsKKyAgICAgICAgaWYgKHBWYWx1ZS0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKSB7CisgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBMYWJlbCA9IChDUERGX0RpY3Rpb25hcnkqKXBWYWx1ZTsKKyAgICAgICAgICAgIGlmIChwTGFiZWwtPktleUV4aXN0KEZYX0JTVFJDKCJQIikpKSB7CisgICAgICAgICAgICAgICAgd3NMYWJlbCArPSBwTGFiZWwtPkdldFVuaWNvZGVUZXh0KEZYX0JTVFJDKCJQIikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgYnNOdW1iZXJpbmdTdHlsZSA9IHBMYWJlbC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJTIiksIE5VTEwpOworICAgICAgICAgICAgaW50IG5MYWJlbE51bSA9IG5QYWdlIC0gbiArIHBMYWJlbC0+R2V0SW50ZWdlcihGWF9CU1RSQygiU3QiKSwgMSk7CisgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyB3c051bVBvcnRpb24gPSBfR2V0TGFiZWxOdW1Qb3J0aW9uKG5MYWJlbE51bSwgYnNOdW1iZXJpbmdTdHlsZSk7CisgICAgICAgICAgICB3c0xhYmVsICs9IHdzTnVtUG9ydGlvbjsKKyAgICAgICAgICAgIHJldHVybiB3c0xhYmVsOworICAgICAgICB9CisgICAgfQorICAgIHdzTGFiZWwuRm9ybWF0KChGWF9MUENXU1RSKUwiJWQiLCBuUGFnZSArIDEpOworICAgIHJldHVybiB3c0xhYmVsOworfQorRlhfSU5UMzIgQ1BERl9QYWdlTGFiZWw6OkdldFBhZ2VCeUxhYmVsKEZYX0JTVFIgYnNMYWJlbCkgY29uc3QKK3sKKyAgICBpZiAobV9wRG9jdW1lbnQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcFBERlJvb3QgPSBtX3BEb2N1bWVudC0+R2V0Um9vdCgpOworICAgIGlmIChwUERGUm9vdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaW50IG5QYWdlcyA9IG1fcERvY3VtZW50LT5HZXRQYWdlQ291bnQoKTsKKyAgICBDRlhfQnl0ZVN0cmluZyBic0xibDsKKyAgICBDRlhfQnl0ZVN0cmluZyBic09yaWcgPSBic0xhYmVsOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgblBhZ2VzOyBpKyspIHsKKyAgICAgICAgYnNMYmwgPSBQREZfRW5jb2RlVGV4dChHZXRMYWJlbChpKSk7CisgICAgICAgIGlmICghYnNMYmwuQ29tcGFyZShic09yaWcpKSB7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIH0KKyAgICBic0xibCA9IGJzT3JpZzsKKyAgICBpbnQgblBhZ2UgPSBGWFNZU19hdG9pKGJzTGJsKTsKKyAgICBpZiAoblBhZ2UgPiAwICYmIG5QYWdlIDw9IG5QYWdlcykgeworICAgICAgICByZXR1cm4gblBhZ2U7CisgICAgfQorICAgIHJldHVybiAtMTsKK30KK0ZYX0lOVDMyIENQREZfUGFnZUxhYmVsOjpHZXRQYWdlQnlMYWJlbChGWF9XU1RSIHdzTGFiZWwpIGNvbnN0Cit7CisgICAgQ0ZYX0J5dGVTdHJpbmcgYnNMYWJlbCA9IFBERl9FbmNvZGVUZXh0KChDRlhfV2lkZVN0cmluZyl3c0xhYmVsKTsKKyAgICByZXR1cm4gR2V0UGFnZUJ5TGFiZWwoYnNMYWJlbCk7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmZG9jL2RvY19ib29rbWFyay5jcHAgYi9jb3JlL3NyYy9mcGRmZG9jL2RvY19ib29rbWFyay5jcHAKaW5kZXggNmNjOTU0Yi4uMGFlNjQ5ZSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmRvYy9kb2NfYm9va21hcmsuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX2Jvb2ttYXJrLmNwcApAQCAtMSw5MSArMSw5MSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmRvYy9mcGRmX2RvYy5oIg0KLUNQREZfQm9va21hcmsgQ1BERl9Cb29rbWFya1RyZWU6OkdldEZpcnN0Q2hpbGQoQ1BERl9Cb29rbWFyayBQYXJlbnQpDQotew0KLSAgICBpZiAoUGFyZW50Lm1fcERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUm9vdCA9IG1fcERvY3VtZW50LT5HZXRSb290KCktPkdldERpY3QoIk91dGxpbmVzIik7DQotICAgICAgICBpZiAocFJvb3QgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHBSb290LT5HZXREaWN0KCJGaXJzdCIpOw0KLSAgICB9DQotICAgIHJldHVybiBQYXJlbnQubV9wRGljdC0+R2V0RGljdCgiRmlyc3QiKTsNCi19DQotQ1BERl9Cb29rbWFyayBDUERGX0Jvb2ttYXJrVHJlZTo6R2V0TmV4dFNpYmxpbmcoQ1BERl9Cb29rbWFyayBUaGlzKQ0KLXsNCi0gICAgaWYgKFRoaXMubV9wRGljdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkgKnBOZXh0ID0gVGhpcy5tX3BEaWN0LT5HZXREaWN0KCJOZXh0Iik7DQotICAgIHJldHVybiBwTmV4dCA9PSBUaGlzLm1fcERpY3QgPyBOVUxMIDogcE5leHQ7DQotfQ0KLUZYX0RXT1JEIENQREZfQm9va21hcms6OkdldENvbG9yUmVmKCkNCi17DQotICAgIGlmICghbV9wRGljdCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgQ1BERl9BcnJheSogcENvbG9yID0gbV9wRGljdC0+R2V0QXJyYXkoIkMiKTsNCi0gICAgaWYgKHBDb2xvciA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRlhTWVNfUkdCKDAsIDAsIDApOw0KLSAgICB9DQotICAgIGludCByID0gRlhTWVNfcm91bmQocENvbG9yLT5HZXROdW1iZXIoMCkgKiAyNTUpOw0KLSAgICBpbnQgZyA9IEZYU1lTX3JvdW5kKHBDb2xvci0+R2V0TnVtYmVyKDEpICogMjU1KTsNCi0gICAgaW50IGIgPSBGWFNZU19yb3VuZChwQ29sb3ItPkdldE51bWJlcigyKSAqIDI1NSk7DQotICAgIHJldHVybiBGWFNZU19SR0IociwgZywgYik7DQotfQ0KLUZYX0RXT1JEIENQREZfQm9va21hcms6OkdldEZvbnRTdHlsZSgpDQotew0KLSAgICBpZiAoIW1fcERpY3QpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIHJldHVybiBtX3BEaWN0LT5HZXRJbnRlZ2VyKCJGIik7DQotfQ0KLUNGWF9XaWRlU3RyaW5nIENQREZfQm9va21hcms6OkdldFRpdGxlKCkNCi17DQotICAgIGlmICghbV9wRGljdCkgew0KLSAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7DQotICAgIH0NCi0gICAgQ1BERl9TdHJpbmcqIHBTdHJpbmcgPSAoQ1BERl9TdHJpbmcqKW1fcERpY3QtPkdldEVsZW1lbnRWYWx1ZSgiVGl0bGUiKTsNCi0gICAgaWYgKHBTdHJpbmcgPT0gTlVMTCB8fCBwU3RyaW5nLT5HZXRUeXBlKCkgIT0gUERGT0JKX1NUUklORykgew0KLSAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7DQotICAgIH0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcgdGl0bGUgPSBwU3RyaW5nLT5HZXRVbmljb2RlVGV4dCgpOw0KLSAgICBGWF9MUFdTVFIgYnVmID0gdGl0bGUuTG9ja0J1ZmZlcigpOw0KLSAgICBpbnQgbGVuID0gdGl0bGUuR2V0TGVuZ3RoKCksIGk7DQotICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKyspDQotICAgICAgICBpZiAoYnVmW2ldIDwgMHgyMCkgew0KLSAgICAgICAgICAgIGJ1ZltpXSA9IDB4MjA7DQotICAgICAgICB9DQotICAgIHRpdGxlLlJlbGVhc2VCdWZmZXIobGVuKTsNCi0gICAgcmV0dXJuIHRpdGxlOw0KLX0NCi1DUERGX0Rlc3QgQ1BERl9Cb29rbWFyazo6R2V0RGVzdChDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQpDQotew0KLSAgICBpZiAoIW1fcERpY3QpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfT2JqZWN0KiBwRGVzdCA9IG1fcERpY3QtPkdldEVsZW1lbnRWYWx1ZSgiRGVzdCIpOw0KLSAgICBpZiAocERlc3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKHBEZXN0LT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUklORyB8fCBwRGVzdC0+R2V0VHlwZSgpID09IFBERk9CSl9OQU1FKSB7DQotICAgICAgICBDUERGX05hbWVUcmVlIG5hbWVfdHJlZShwRG9jdW1lbnQsIEZYX0JTVFJDKCJEZXN0cyIpKTsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nQyBuYW1lID0gcERlc3QtPkdldFN0cmluZygpOw0KLSAgICAgICAgcmV0dXJuIG5hbWVfdHJlZS5Mb29rdXBOYW1lZERlc3QocERvY3VtZW50LCBuYW1lKTsNCi0gICAgfSBlbHNlIGlmIChwRGVzdC0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgew0KLSAgICAgICAgcmV0dXJuIChDUERGX0FycmF5KilwRGVzdDsNCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotQ1BERl9BY3Rpb24gQ1BERl9Cb29rbWFyazo6R2V0QWN0aW9uKCkNCi17DQotICAgIGlmICghbV9wRGljdCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIG1fcERpY3QtPkdldERpY3QoIkEiKTsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmRvYy9mcGRmX2RvYy5oIgorQ1BERl9Cb29rbWFyayBDUERGX0Jvb2ttYXJrVHJlZTo6R2V0Rmlyc3RDaGlsZChDUERGX0Jvb2ttYXJrIFBhcmVudCkKK3sKKyAgICBpZiAoUGFyZW50Lm1fcERpY3QgPT0gTlVMTCkgeworICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBSb290ID0gbV9wRG9jdW1lbnQtPkdldFJvb3QoKS0+R2V0RGljdCgiT3V0bGluZXMiKTsKKyAgICAgICAgaWYgKHBSb290ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwUm9vdC0+R2V0RGljdCgiRmlyc3QiKTsKKyAgICB9CisgICAgcmV0dXJuIFBhcmVudC5tX3BEaWN0LT5HZXREaWN0KCJGaXJzdCIpOworfQorQ1BERl9Cb29rbWFyayBDUERGX0Jvb2ttYXJrVHJlZTo6R2V0TmV4dFNpYmxpbmcoQ1BERl9Cb29rbWFyayBUaGlzKQoreworICAgIGlmIChUaGlzLm1fcERpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5ICpwTmV4dCA9IFRoaXMubV9wRGljdC0+R2V0RGljdCgiTmV4dCIpOworICAgIHJldHVybiBwTmV4dCA9PSBUaGlzLm1fcERpY3QgPyBOVUxMIDogcE5leHQ7Cit9CitGWF9EV09SRCBDUERGX0Jvb2ttYXJrOjpHZXRDb2xvclJlZigpCit7CisgICAgaWYgKCFtX3BEaWN0KSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBDUERGX0FycmF5KiBwQ29sb3IgPSBtX3BEaWN0LT5HZXRBcnJheSgiQyIpOworICAgIGlmIChwQ29sb3IgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRlhTWVNfUkdCKDAsIDAsIDApOworICAgIH0KKyAgICBpbnQgciA9IEZYU1lTX3JvdW5kKHBDb2xvci0+R2V0TnVtYmVyKDApICogMjU1KTsKKyAgICBpbnQgZyA9IEZYU1lTX3JvdW5kKHBDb2xvci0+R2V0TnVtYmVyKDEpICogMjU1KTsKKyAgICBpbnQgYiA9IEZYU1lTX3JvdW5kKHBDb2xvci0+R2V0TnVtYmVyKDIpICogMjU1KTsKKyAgICByZXR1cm4gRlhTWVNfUkdCKHIsIGcsIGIpOworfQorRlhfRFdPUkQgQ1BERl9Cb29rbWFyazo6R2V0Rm9udFN0eWxlKCkKK3sKKyAgICBpZiAoIW1fcERpY3QpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBtX3BEaWN0LT5HZXRJbnRlZ2VyKCJGIik7Cit9CitDRlhfV2lkZVN0cmluZyBDUERGX0Jvb2ttYXJrOjpHZXRUaXRsZSgpCit7CisgICAgaWYgKCFtX3BEaWN0KSB7CisgICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZygpOworICAgIH0KKyAgICBDUERGX1N0cmluZyogcFN0cmluZyA9IChDUERGX1N0cmluZyopbV9wRGljdC0+R2V0RWxlbWVudFZhbHVlKCJUaXRsZSIpOworICAgIGlmIChwU3RyaW5nID09IE5VTEwgfHwgcFN0cmluZy0+R2V0VHlwZSgpICE9IFBERk9CSl9TVFJJTkcpIHsKKyAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7CisgICAgfQorICAgIENGWF9XaWRlU3RyaW5nIHRpdGxlID0gcFN0cmluZy0+R2V0VW5pY29kZVRleHQoKTsKKyAgICBGWF9MUFdTVFIgYnVmID0gdGl0bGUuTG9ja0J1ZmZlcigpOworICAgIGludCBsZW4gPSB0aXRsZS5HZXRMZW5ndGgoKSwgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICsrKQorICAgICAgICBpZiAoYnVmW2ldIDwgMHgyMCkgeworICAgICAgICAgICAgYnVmW2ldID0gMHgyMDsKKyAgICAgICAgfQorICAgIHRpdGxlLlJlbGVhc2VCdWZmZXIobGVuKTsKKyAgICByZXR1cm4gdGl0bGU7Cit9CitDUERGX0Rlc3QgQ1BERl9Cb29rbWFyazo6R2V0RGVzdChDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQpCit7CisgICAgaWYgKCFtX3BEaWN0KSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX09iamVjdCogcERlc3QgPSBtX3BEaWN0LT5HZXRFbGVtZW50VmFsdWUoIkRlc3QiKTsKKyAgICBpZiAocERlc3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHBEZXN0LT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUklORyB8fCBwRGVzdC0+R2V0VHlwZSgpID09IFBERk9CSl9OQU1FKSB7CisgICAgICAgIENQREZfTmFtZVRyZWUgbmFtZV90cmVlKHBEb2N1bWVudCwgRlhfQlNUUkMoIkRlc3RzIikpOworICAgICAgICBDRlhfQnl0ZVN0cmluZ0MgbmFtZSA9IHBEZXN0LT5HZXRTdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIG5hbWVfdHJlZS5Mb29rdXBOYW1lZERlc3QocERvY3VtZW50LCBuYW1lKTsKKyAgICB9IGVsc2UgaWYgKHBEZXN0LT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgIHJldHVybiAoQ1BERl9BcnJheSopcERlc3Q7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorQ1BERl9BY3Rpb24gQ1BERl9Cb29rbWFyazo6R2V0QWN0aW9uKCkKK3sKKyAgICBpZiAoIW1fcERpY3QpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBtX3BEaWN0LT5HZXREaWN0KCJBIik7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmZG9jL2RvY19mb3JtLmNwcCBiL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX2Zvcm0uY3BwCmluZGV4IDExMzkyMzMuLmMxZTQxNTIgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX2Zvcm0uY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX2Zvcm0uY3BwCkBAIC0xLDE2NjQgKzEsMTY2NCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmRvYy9mcGRmX2RvYy5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X3htbC5oIg0KLUNGWF9XaWRlU3RyaW5nCUdldEZ1bGxOYW1lKENQREZfRGljdGlvbmFyeSogcEZpZWxkRGljdCk7DQotdm9pZAkJCUluaXRJbnRlckZvcm1EaWN0KENQREZfRGljdGlvbmFyeSomIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50KTsNCi1GWF9EV09SRAkJQ291bnRJbnRlckZvcm1Gb250cyhDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCk7DQotQ1BERl9Gb250KgkJR2V0SW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBGWF9EV09SRCBpbmRleCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZyk7DQotQ1BERl9Gb250KgkJR2V0SW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDRlhfQnl0ZVN0cmluZyBjc05hbWVUYWcpOw0KLUNQREZfRm9udCoJCUdldEludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QsIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ0ZYX0J5dGVTdHJpbmcgY3NGb250TmFtZSwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZyk7DQotQ1BERl9Gb250KgkJR2V0TmF0aXZlSW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBGWF9CWVRFIGNoYXJTZXQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOw0KLUNQREZfRm9udCoJCUdldE5hdGl2ZUludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QsIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZyk7DQotRlhfQk9PTAkJCUZpbmRJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBjb25zdCBDUERGX0ZvbnQqIHBGb250LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKTsNCi1GWF9CT09MCQkJRmluZEludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QsIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ0ZYX0J5dGVTdHJpbmcgY3NGb250TmFtZSwgQ1BERl9Gb250KiYgcEZvbnQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOw0KLXZvaWQJCQlBZGRJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSomIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDUERGX0ZvbnQqIHBGb250LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKTsNCi1DUERGX0ZvbnQqCQlBZGROYXRpdmVJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSomIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBGWF9CWVRFIGNoYXJTZXQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOw0KLUNQREZfRm9udCoJCUFkZE5hdGl2ZUludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiYgcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOw0KLXZvaWQJCQlSZW1vdmVJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBjb25zdCBDUERGX0ZvbnQqIHBGb250KTsNCi12b2lkCQkJUmVtb3ZlSW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCwgQ0ZYX0J5dGVTdHJpbmcgY3NOYW1lVGFnKTsNCi1DUERGX0ZvbnQqCQlHZXREZWZhdWx0SW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50KTsNCi12b2lkCQkJU2V0RGVmYXVsdEludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiYgcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENQREZfRm9udCogcEZvbnQpOw0KLXZvaWQJCQlTYXZlQ2hlY2tlZEZpZWxkU3RhdHVzKENQREZfRm9ybUZpZWxkKiBwRmllbGQsIENGWF9CeXRlQXJyYXkmIHN0YXR1c0FycmF5KTsNCi1GWF9CT09MCQkJTmVlZFBERkVuY29kZUZvckZpZWxkRnVsbE5hbWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIGNzRmllbGROYW1lKTsNCi1GWF9CT09MCQkJTmVlZFBERkVuY29kZUZvckZpZWxkVHJlZShDUERGX0RpY3Rpb25hcnkqIHBGaWVsZERpY3QsIGludCBuTGV2ZWwgPSAwKTsNCi12b2lkCQkJRW5jb2RlRmllbGROYW1lKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBjc05hbWUsIENGWF9CeXRlU3RyaW5nJiBjc1QpOw0KLXZvaWQJCQlVcGRhdGVFbmNvZGVGaWVsZE5hbWUoQ1BERl9EaWN0aW9uYXJ5KiBwRmllbGREaWN0LCBpbnQgbkxldmVsID0gMCk7DQotY29uc3QgaW50IG5NYXhSZWN1cnNpb24gPSAzMjsNCi1jbGFzcyBfQ0ZpZWxkTmFtZUV4dHJhY3RvciA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgX0NGaWVsZE5hbWVFeHRyYWN0b3IoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIGZ1bGxfbmFtZSkNCi0gICAgew0KLSAgICAgICAgbV9wU3RhcnQgPSBmdWxsX25hbWU7DQotICAgICAgICBtX3BFbmQgPSBtX3BTdGFydCArIGZ1bGxfbmFtZS5HZXRMZW5ndGgoKTsNCi0gICAgICAgIG1fcEN1ciA9IG1fcFN0YXJ0Ow0KLSAgICB9DQotICAgIHZvaWQgR2V0TmV4dChGWF9MUENXU1RSICZwU3ViTmFtZSwgRlhfU1RSU0laRSYgc2l6ZSkNCi0gICAgew0KLSAgICAgICAgcFN1Yk5hbWUgPSBtX3BDdXI7DQotICAgICAgICB3aGlsZSAobV9wQ3VyIDwgbV9wRW5kICYmIG1fcEN1clswXSAhPSBMJy4nKSB7DQotICAgICAgICAgICAgbV9wQ3VyKys7DQotICAgICAgICB9DQotICAgICAgICBzaXplID0gKEZYX1NUUlNJWkUpKG1fcEN1ciAtIHBTdWJOYW1lKTsNCi0gICAgICAgIGlmIChtX3BDdXIgPCBtX3BFbmQgJiYgbV9wQ3VyWzBdID09IEwnLicpIHsNCi0gICAgICAgICAgICBtX3BDdXIrKzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLXByb3RlY3RlZDoNCi0gICAgRlhfTFBDV1NUUiBtX3BTdGFydDsNCi0gICAgRlhfTFBDV1NUUiBtX3BFbmQ7DQotICAgIEZYX0xQQ1dTVFIgbV9wQ3VyOw0KLX07DQotY2xhc3MgQ0ZpZWxkVHJlZSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgc3RydWN0IF9Ob2RlIDogcHVibGljIENGWF9PYmplY3Qgew0KLSAgICAgICAgX05vZGUgKnBhcmVudDsNCi0gICAgICAgIENGWF9QdHJBcnJheSBjaGlsZHJlbjsNCi0gICAgICAgIENGWF9XaWRlU3RyaW5nIHNob3J0X25hbWU7DQotICAgICAgICBDUERGX0Zvcm1GaWVsZCAqZmllbGRfcHRyOw0KLSAgICAgICAgaW50IENvdW50RmllbGRzKGludCBuTGV2ZWwgPSAwKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlmIChuTGV2ZWwgPiBuTWF4UmVjdXJzaW9uKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoZmllbGRfcHRyKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAxOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpbnQgY291bnQgPSAwOw0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4uR2V0U2l6ZSgpOyBpICsrKSB7DQotICAgICAgICAgICAgICAgIGNvdW50ICs9ICgoX05vZGUgKiljaGlsZHJlbi5HZXRBdChpKSktPkNvdW50RmllbGRzKG5MZXZlbCArIDEpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gY291bnQ7DQotICAgICAgICB9DQotICAgICAgICBDUERGX0Zvcm1GaWVsZCogR2V0RmllbGQoaW50KiBmaWVsZHNfdG9fZ28pDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYgKGZpZWxkX3B0cikgew0KLSAgICAgICAgICAgICAgICBpZiAoKmZpZWxkc190b19nbyA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmllbGRfcHRyOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIC0tKmZpZWxkc190b19nbzsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4uR2V0U2l6ZSgpOyBpKyspIHsNCi0gICAgICAgICAgICAgICAgX05vZGUgKnBOb2RlID0gKF9Ob2RlICopY2hpbGRyZW4uR2V0QXQoaSk7DQotICAgICAgICAgICAgICAgIENQREZfRm9ybUZpZWxkKiBwRmllbGQgPSBwTm9kZS0+R2V0RmllbGQoZmllbGRzX3RvX2dvKTsNCi0gICAgICAgICAgICAgICAgaWYgKHBGaWVsZCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBGaWVsZDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIENQREZfRm9ybUZpZWxkKiBHZXRGaWVsZChpbnQgaW5kZXgpDQotICAgICAgICB7DQotICAgICAgICAgICAgaW50IGZpZWxkc190b19nbyA9IGluZGV4Ow0KLSAgICAgICAgICAgIHJldHVybiBHZXRGaWVsZCgmZmllbGRzX3RvX2dvKTsNCi0gICAgICAgIH0NCi0gICAgfTsNCi0gICAgQ0ZpZWxkVHJlZSgpOw0KLSAgICB+Q0ZpZWxkVHJlZSgpOw0KLSAgICB2b2lkIFNldEZpZWxkKGNvbnN0IENGWF9XaWRlU3RyaW5nICZmdWxsX25hbWUsIENQREZfRm9ybUZpZWxkICpmaWVsZF9wdHIpOw0KLSAgICBDUERGX0Zvcm1GaWVsZCAqR2V0RmllbGQoY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJmZ1bGxfbmFtZSk7DQotICAgIENQREZfRm9ybUZpZWxkICpSZW1vdmVGaWVsZChjb25zdCBDRlhfV2lkZVN0cmluZyAmZnVsbF9uYW1lKTsNCi0gICAgdm9pZCBSZW1vdmVBbGwoKTsNCi0gICAgX05vZGUgKkZpbmROb2RlKGNvbnN0IENGWF9XaWRlU3RyaW5nICZmdWxsX25hbWUpOw0KLSAgICBfTm9kZSAqIEFkZENoaWxkKF9Ob2RlICpwUGFyZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyAmc2hvcnRfbmFtZSwgQ1BERl9Gb3JtRmllbGQgKmZpZWxkX3B0cik7DQotICAgIHZvaWQgUmVtb3ZlTm9kZShfTm9kZSAqcE5vZGUsIGludCBuTGV2ZWwgPSAwKTsNCi0gICAgX05vZGUgKl9Mb29rdXAoX05vZGUgKnBQYXJlbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nICZzaG9ydF9uYW1lKTsNCi0gICAgX05vZGUgbV9Sb290Ow0KLX07DQotQ0ZpZWxkVHJlZTo6Q0ZpZWxkVHJlZSgpDQotew0KLSAgICBtX1Jvb3QucGFyZW50ID0gTlVMTDsNCi0gICAgbV9Sb290LmZpZWxkX3B0ciA9IE5VTEw7DQotfQ0KLUNGaWVsZFRyZWU6On5DRmllbGRUcmVlKCkNCi17DQotICAgIFJlbW92ZUFsbCgpOw0KLX0NCi1DRmllbGRUcmVlOjpfTm9kZSAqQ0ZpZWxkVHJlZTo6QWRkQ2hpbGQoX05vZGUgKnBQYXJlbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nICZzaG9ydF9uYW1lLCBDUERGX0Zvcm1GaWVsZCAqZmllbGRfcHRyKQ0KLXsNCi0gICAgaWYgKHBQYXJlbnQgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgX05vZGUgKnBOb2RlID0gRlhfTkVXIF9Ob2RlOw0KLSAgICBpZiAocE5vZGUgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcE5vZGUtPnBhcmVudCA9IHBQYXJlbnQ7DQotICAgIHBOb2RlLT5zaG9ydF9uYW1lID0gc2hvcnRfbmFtZTsNCi0gICAgcE5vZGUtPmZpZWxkX3B0ciA9IGZpZWxkX3B0cjsNCi0gICAgcFBhcmVudC0+Y2hpbGRyZW4uQWRkKHBOb2RlKTsNCi0gICAgcmV0dXJuIHBOb2RlOw0KLX0NCi12b2lkIENGaWVsZFRyZWU6OlJlbW92ZU5vZGUoX05vZGUgKnBOb2RlLCBpbnQgbkxldmVsKQ0KLXsNCi0gICAgaWYgKHBOb2RlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiA7DQotICAgIH0NCi0gICAgaWYgKG5MZXZlbCA+IG5NYXhSZWN1cnNpb24pIHsNCi0gICAgICAgIGRlbGV0ZSBwTm9kZTsNCi0gICAgICAgIHJldHVybiA7DQotICAgIH0NCi0gICAgQ0ZYX1B0ckFycmF5JiBwdHJfYXJyYXkgPSBwTm9kZS0+Y2hpbGRyZW47DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHRyX2FycmF5LkdldFNpemUoKTsgaSArKykgew0KLSAgICAgICAgX05vZGUgKnBDaGlsZCA9IChfTm9kZSAqKXB0cl9hcnJheVtpXTsNCi0gICAgICAgIFJlbW92ZU5vZGUocENoaWxkLCBuTGV2ZWwgKyAxKTsNCi0gICAgfQ0KLSAgICBkZWxldGUgcE5vZGU7DQotfQ0KLUNGaWVsZFRyZWU6Ol9Ob2RlICpDRmllbGRUcmVlOjpfTG9va3VwKF9Ob2RlICpwUGFyZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyAmc2hvcnRfbmFtZSkNCi17DQotICAgIGlmIChwUGFyZW50ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENGWF9QdHJBcnJheSYgcHRyX2FycmF5ID0gcFBhcmVudC0+Y2hpbGRyZW47DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHRyX2FycmF5LkdldFNpemUoKTsgaSArKykgew0KLSAgICAgICAgX05vZGUgKnBOb2RlID0gKF9Ob2RlICopcHRyX2FycmF5W2ldOw0KLSAgICAgICAgaWYgKHBOb2RlLT5zaG9ydF9uYW1lLkdldExlbmd0aCgpID09IHNob3J0X25hbWUuR2V0TGVuZ3RoKCkgJiYNCi0gICAgICAgICAgICAgICAgRlhTWVNfbWVtY21wMzIoKEZYX0xQQ1dTVFIpcE5vZGUtPnNob3J0X25hbWUsIChGWF9MUENXU1RSKXNob3J0X25hbWUsIHNob3J0X25hbWUuR2V0TGVuZ3RoKCkqc2l6ZW9mKEZYX1dDSEFSKSkgPT0gMCkgew0KLSAgICAgICAgICAgIHJldHVybiBwTm9kZTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotdm9pZCBDRmllbGRUcmVlOjpSZW1vdmVBbGwoKQ0KLXsNCi0gICAgQ0ZYX1B0ckFycmF5JiBwdHJfYXJyYXkgPSBtX1Jvb3QuY2hpbGRyZW47DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHRyX2FycmF5LkdldFNpemUoKTsgaSArKykgew0KLSAgICAgICAgX05vZGUgKnBOb2RlID0gKF9Ob2RlICopcHRyX2FycmF5W2ldOw0KLSAgICAgICAgUmVtb3ZlTm9kZShwTm9kZSk7DQotICAgIH0NCi19DQotdm9pZCBDRmllbGRUcmVlOjpTZXRGaWVsZChjb25zdCBDRlhfV2lkZVN0cmluZyAmZnVsbF9uYW1lLCBDUERGX0Zvcm1GaWVsZCAqZmllbGRfcHRyKQ0KLXsNCi0gICAgaWYgKGZ1bGxfbmFtZSA9PSBMIiIpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBfQ0ZpZWxkTmFtZUV4dHJhY3RvciBuYW1lX2V4dHJhY3RvcihmdWxsX25hbWUpOw0KLSAgICBGWF9MUENXU1RSIHBOYW1lOw0KLSAgICBGWF9TVFJTSVpFIG5MZW5ndGg7DQotICAgIG5hbWVfZXh0cmFjdG9yLkdldE5leHQocE5hbWUsIG5MZW5ndGgpOw0KLSAgICBfTm9kZSAqcE5vZGUgPSAmbV9Sb290LCAqcExhc3QgPSBOVUxMOw0KLSAgICB3aGlsZSAobkxlbmd0aCA+IDApIHsNCi0gICAgICAgIHBMYXN0ID0gcE5vZGU7DQotICAgICAgICBDRlhfV2lkZVN0cmluZyBuYW1lID0gQ0ZYX1dpZGVTdHJpbmcocE5hbWUsIG5MZW5ndGgpOw0KLSAgICAgICAgcE5vZGUgPSBfTG9va3VwKHBMYXN0LCBuYW1lKTsNCi0gICAgICAgIGlmIChwTm9kZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcE5vZGUgPSBBZGRDaGlsZChwTGFzdCwgbmFtZSwgTlVMTCk7DQotICAgICAgICB9DQotICAgICAgICBuYW1lX2V4dHJhY3Rvci5HZXROZXh0KHBOYW1lLCBuTGVuZ3RoKTsNCi0gICAgfQ0KLSAgICBpZiAocE5vZGUgIT0gJm1fUm9vdCkgew0KLSAgICAgICAgcE5vZGUtPmZpZWxkX3B0ciA9IGZpZWxkX3B0cjsNCi0gICAgfQ0KLX0NCi1DUERGX0Zvcm1GaWVsZCAqQ0ZpZWxkVHJlZTo6R2V0RmllbGQoY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJmZ1bGxfbmFtZSkNCi17DQotICAgIGlmIChmdWxsX25hbWUgPT0gTCIiKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBfQ0ZpZWxkTmFtZUV4dHJhY3RvciBuYW1lX2V4dHJhY3RvcihmdWxsX25hbWUpOw0KLSAgICBGWF9MUENXU1RSIHBOYW1lOw0KLSAgICBGWF9TVFJTSVpFIG5MZW5ndGg7DQotICAgIG5hbWVfZXh0cmFjdG9yLkdldE5leHQocE5hbWUsIG5MZW5ndGgpOw0KLSAgICBfTm9kZSAqcE5vZGUgPSAmbV9Sb290LCAqcExhc3QgPSBOVUxMOw0KLSAgICB3aGlsZSAobkxlbmd0aCA+IDAgJiYgcE5vZGUpIHsNCi0gICAgICAgIHBMYXN0ID0gcE5vZGU7DQotICAgICAgICBDRlhfV2lkZVN0cmluZyBuYW1lID0gQ0ZYX1dpZGVTdHJpbmcocE5hbWUsIG5MZW5ndGgpOw0KLSAgICAgICAgcE5vZGUgPSBfTG9va3VwKHBMYXN0LCBuYW1lKTsNCi0gICAgICAgIG5hbWVfZXh0cmFjdG9yLkdldE5leHQocE5hbWUsIG5MZW5ndGgpOw0KLSAgICB9DQotICAgIHJldHVybiBwTm9kZSA/IHBOb2RlLT5maWVsZF9wdHIgOiBOVUxMOw0KLX0NCi1DUERGX0Zvcm1GaWVsZCAqQ0ZpZWxkVHJlZTo6UmVtb3ZlRmllbGQoY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJiBmdWxsX25hbWUpDQotew0KLSAgICBpZiAoZnVsbF9uYW1lID09IEwiIikgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgX0NGaWVsZE5hbWVFeHRyYWN0b3IgbmFtZV9leHRyYWN0b3IoZnVsbF9uYW1lKTsNCi0gICAgRlhfTFBDV1NUUiBwTmFtZTsNCi0gICAgRlhfU1RSU0laRSBuTGVuZ3RoOw0KLSAgICBuYW1lX2V4dHJhY3Rvci5HZXROZXh0KHBOYW1lLCBuTGVuZ3RoKTsNCi0gICAgX05vZGUgKnBOb2RlID0gJm1fUm9vdCwgKnBMYXN0ID0gTlVMTDsNCi0gICAgd2hpbGUgKG5MZW5ndGggPiAwICYmIHBOb2RlKSB7DQotICAgICAgICBwTGFzdCA9IHBOb2RlOw0KLSAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgbmFtZSA9IENGWF9XaWRlU3RyaW5nKHBOYW1lLCBuTGVuZ3RoKTsNCi0gICAgICAgIHBOb2RlID0gX0xvb2t1cChwTGFzdCwgbmFtZSk7DQotICAgICAgICBuYW1lX2V4dHJhY3Rvci5HZXROZXh0KHBOYW1lLCBuTGVuZ3RoKTsNCi0gICAgfQ0KLSAgICBpZiAocE5vZGUgJiYgcE5vZGUgIT0gJm1fUm9vdCkgew0KLSAgICAgICAgQ0ZYX1B0ckFycmF5JiBwdHJfYXJyYXkgPSBwTGFzdC0+Y2hpbGRyZW47DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHB0cl9hcnJheS5HZXRTaXplKCk7IGkgKyspIHsNCi0gICAgICAgICAgICBpZiAocE5vZGUgPT0gKF9Ob2RlICopcHRyX2FycmF5W2ldKSB7DQotICAgICAgICAgICAgICAgIHB0cl9hcnJheS5SZW1vdmVBdChpKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1BERl9Gb3JtRmllbGQgKnBGaWVsZCA9IHBOb2RlLT5maWVsZF9wdHI7DQotICAgICAgICBSZW1vdmVOb2RlKHBOb2RlKTsNCi0gICAgICAgIHJldHVybiBwRmllbGQ7DQotICAgIH0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLUNGaWVsZFRyZWU6Ol9Ob2RlICpDRmllbGRUcmVlOjpGaW5kTm9kZShjb25zdCBDRlhfV2lkZVN0cmluZyYgZnVsbF9uYW1lKQ0KLXsNCi0gICAgaWYgKGZ1bGxfbmFtZSA9PSBMIiIpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIF9DRmllbGROYW1lRXh0cmFjdG9yIG5hbWVfZXh0cmFjdG9yKGZ1bGxfbmFtZSk7DQotICAgIEZYX0xQQ1dTVFIgcE5hbWU7DQotICAgIEZYX1NUUlNJWkUgbkxlbmd0aDsNCi0gICAgbmFtZV9leHRyYWN0b3IuR2V0TmV4dChwTmFtZSwgbkxlbmd0aCk7DQotICAgIF9Ob2RlICpwTm9kZSA9ICZtX1Jvb3QsICpwTGFzdCA9IE5VTEw7DQotICAgIHdoaWxlIChuTGVuZ3RoID4gMCAmJiBwTm9kZSkgew0KLSAgICAgICAgcExhc3QgPSBwTm9kZTsNCi0gICAgICAgIENGWF9XaWRlU3RyaW5nIG5hbWUgPSBDRlhfV2lkZVN0cmluZyhwTmFtZSwgbkxlbmd0aCk7DQotICAgICAgICBwTm9kZSA9IF9Mb29rdXAocExhc3QsIG5hbWUpOw0KLSAgICAgICAgbmFtZV9leHRyYWN0b3IuR2V0TmV4dChwTmFtZSwgbkxlbmd0aCk7DQotICAgIH0NCi0gICAgcmV0dXJuIHBOb2RlOw0KLX0NCi1DUERGX0ludGVyRm9ybTo6Q1BERl9JbnRlckZvcm0oQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBGWF9CT09MIGJHZW5lcmF0ZUFQKSA6IENGWF9Qcml2YXRlRGF0YSgpDQotew0KLSAgICBtX3BEb2N1bWVudCA9IHBEb2N1bWVudDsNCi0gICAgbV9iR2VuZXJhdGVBUCA9IGJHZW5lcmF0ZUFQOw0KLSAgICBtX3BGb3JtTm90aWZ5ID0gTlVMTDsNCi0gICAgbV9iVXBkYXRlZCA9IEZBTFNFOw0KLSAgICBtX3BGaWVsZFRyZWUgPSBGWF9ORVcgQ0ZpZWxkVHJlZTsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwUm9vdCA9IG1fcERvY3VtZW50LT5HZXRSb290KCk7DQotICAgIG1fcEZvcm1EaWN0ID0gcFJvb3QtPkdldERpY3QoIkFjcm9Gb3JtIik7DQotICAgIGlmIChtX3BGb3JtRGljdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9BcnJheSogcEZpZWxkcyA9IG1fcEZvcm1EaWN0LT5HZXRBcnJheSgiRmllbGRzIik7DQotICAgIGlmIChwRmllbGRzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpbnQgY291bnQgPSBwRmllbGRzLT5HZXRDb3VudCgpOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpICsrKSB7DQotICAgICAgICBMb2FkRmllbGQocEZpZWxkcy0+R2V0RGljdChpKSk7DQotICAgIH0NCi19DQotQ1BERl9JbnRlckZvcm06On5DUERGX0ludGVyRm9ybSgpDQotew0KLSAgICBGWF9QT1NJVElPTiBwb3MgPSBtX0NvbnRyb2xNYXAuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICBGWF9MUFZPSUQga2V5LCB2YWx1ZTsNCi0gICAgICAgIG1fQ29udHJvbE1hcC5HZXROZXh0QXNzb2MocG9zLCBrZXksIHZhbHVlKTsNCi0gICAgICAgIGRlbGV0ZSAoQ1BERl9Gb3JtQ29udHJvbCopdmFsdWU7DQotICAgIH0NCi0gICAgaWYgKG1fcEZpZWxkVHJlZSAhPSBOVUxMKSB7DQotICAgICAgICBpbnQgbkNvdW50ID0gbV9wRmllbGRUcmVlLT5tX1Jvb3QuQ291bnRGaWVsZHMoKTsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkNvdW50OyBpKyspIHsNCi0gICAgICAgICAgICBDUERGX0Zvcm1GaWVsZCAqcEZpZWxkID0gbV9wRmllbGRUcmVlLT5tX1Jvb3QuR2V0RmllbGQoaSk7DQotICAgICAgICAgICAgZGVsZXRlIHBGaWVsZDsNCi0gICAgICAgIH0NCi0gICAgICAgIGRlbGV0ZSBtX3BGaWVsZFRyZWU7DQotICAgIH0NCi19DQotRlhfQk9PTAlDUERGX0ludGVyRm9ybTo6bV9iVXBkYXRlQVAgPSBUUlVFOw0KLUZYX0JPT0wgQ1BERl9JbnRlckZvcm06OlVwZGF0aW5nQVBFbmFibGVkKCkNCi17DQotICAgIHJldHVybiBtX2JVcGRhdGVBUDsNCi19DQotdm9pZCBDUERGX0ludGVyRm9ybTo6RW5hYmxlVXBkYXRlQVAoRlhfQk9PTCBiVXBkYXRlQVApDQotew0KLSAgICBtX2JVcGRhdGVBUCA9IGJVcGRhdGVBUDsNCi19DQotQ0ZYX0J5dGVTdHJpbmcgQ1BERl9JbnRlckZvcm06OkdlbmVyYXRlTmV3UmVzb3VyY2VOYW1lKGNvbnN0IENQREZfRGljdGlvbmFyeSogcFJlc0RpY3QsIEZYX0xQQ1NUUiBjc1R5cGUsIGludCBpTWluTGVuLCBGWF9MUENTVFIgY3NQcmVmaXgpDQotew0KLSAgICBDRlhfQnl0ZVN0cmluZyBjc1N0ciA9IGNzUHJlZml4Ow0KLSAgICBDRlhfQnl0ZVN0cmluZyBjc0JUeXBlID0gY3NUeXBlOw0KLSAgICBpZiAoY3NTdHIuSXNFbXB0eSgpKSB7DQotICAgICAgICBpZiAoY3NCVHlwZSA9PSAiRXh0R1N0YXRlIikgew0KLSAgICAgICAgICAgIGNzU3RyID0gIkdTIjsNCi0gICAgICAgIH0gZWxzZSBpZiAoY3NCVHlwZSA9PSAiQ29sb3JTcGFjZSIpIHsNCi0gICAgICAgICAgICBjc1N0ciA9ICJDUyI7DQotICAgICAgICB9IGVsc2UgaWYgKGNzQlR5cGUgPT0gIkZvbnQiKSB7DQotICAgICAgICAgICAgY3NTdHIgPSAiWmlUaSI7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGNzU3RyID0gIlJlcyI7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgY3NUbXAgPSBjc1N0cjsNCi0gICAgaW50IGlDb3VudCA9IGNzU3RyLkdldExlbmd0aCgpOw0KLSAgICBpbnQgbSA9IDA7DQotICAgIGlmIChpTWluTGVuID4gMCkgew0KLSAgICAgICAgY3NUbXAgPSAiIjsNCi0gICAgICAgIHdoaWxlIChtIDwgaU1pbkxlbiAmJiBtIDwgaUNvdW50KSB7DQotICAgICAgICAgICAgY3NUbXAgKz0gY3NTdHJbbSArK107DQotICAgICAgICB9DQotICAgICAgICB3aGlsZSAobSA8IGlNaW5MZW4pIHsNCi0gICAgICAgICAgICBjc1RtcCArPSAnMCcgKyBtICUgMTA7DQotICAgICAgICAgICAgbSArKzsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG0gPSBpQ291bnQ7DQotICAgIH0NCi0gICAgaWYgKHBSZXNEaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBjc1RtcDsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gcFJlc0RpY3QtPkdldERpY3QoY3NUeXBlKTsNCi0gICAgaWYgKHBEaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBjc1RtcDsNCi0gICAgfQ0KLSAgICBpbnQgbnVtID0gMDsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgYnNOdW07DQotICAgIHdoaWxlIChUUlVFKSB7DQotICAgICAgICBpZiAoIXBEaWN0LT5LZXlFeGlzdChjc1RtcCArIGJzTnVtKSkgew0KLSAgICAgICAgICAgIHJldHVybiBjc1RtcCArIGJzTnVtOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG0gPCBpQ291bnQpIHsNCi0gICAgICAgICAgICBjc1RtcCArPSBjc1N0clttICsrXTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgYnNOdW0uRm9ybWF0KCIlZCIsIG51bSsrKTsNCi0gICAgICAgIH0NCi0gICAgICAgIG0gKys7DQotICAgIH0NCi0gICAgcmV0dXJuIGNzVG1wOw0KLX0NCi0jaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXw0KLXR5cGVkZWYgc3RydWN0IF9QREZfRk9OVERBVEEgew0KLSAgICBGWF9CT09MCQliRmluZDsNCi0gICAgTE9HRk9OVEEJbGY7DQotfSBQREZfRk9OVERBVEEsIEZBUiogTFBERl9GT05UREFUQTsNCi1zdGF0aWMgaW50IENBTExCQUNLIEVudW1Gb250RmFtRXhQcm9jKAlFTlVNTE9HRk9OVEVYQSAqbHBlbGZlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVdURVhUTUVUUklDRVggKmxwbnRtZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgRm9udFR5cGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQQVJBTSBsUGFyYW0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KLXsNCi0gICAgaWYgKEZvbnRUeXBlICE9IDB4MDA0IHx8IHN0cmNocihscGVsZmUtPmVsZkxvZ0ZvbnQubGZGYWNlTmFtZSwgJ0AnKSAhPSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIExQREZfRk9OVERBVEEgcERhdGEgPSAoTFBERl9GT05UREFUQSlsUGFyYW07DQotICAgICAgICBtZW1jcHkoJnBEYXRhLT5sZiwgJmxwZWxmZS0+ZWxmTG9nRm9udCwgc2l6ZW9mKExPR0ZPTlRBKSk7DQotICAgICAgICBwRGF0YS0+YkZpbmQgPSBUUlVFOw0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi19DQotc3RhdGljIEZYX0JPT0wgUmV0cmlldmVTcGVjaWZpY0ZvbnQoTE9HRk9OVEEmIGxmKQ0KLXsNCi0gICAgUERGX0ZPTlREQVRBIGZkOw0KLSAgICBtZW1zZXQoJmZkLCAwLCBzaXplb2YoUERGX0ZPTlREQVRBKSk7DQotICAgIEhEQyBoREMgPSA6OkdldERDKE5VTEwpOw0KLSAgICBFbnVtRm9udEZhbWlsaWVzRXhBKGhEQywgJmxmLCAoRk9OVEVOVU1QUk9DQSlFbnVtRm9udEZhbUV4UHJvYywgKExQQVJBTSkmZmQsIDApOw0KLSAgICA6OlJlbGVhc2VEQyhOVUxMLCBoREMpOw0KLSAgICBpZiAoZmQuYkZpbmQpIHsNCi0gICAgICAgIG1lbWNweSgmbGYsICZmZC5sZiwgc2l6ZW9mKExPR0ZPTlRBKSk7DQotICAgIH0NCi0gICAgcmV0dXJuIGZkLmJGaW5kOw0KLX0NCi1zdGF0aWMgRlhfQk9PTCBSZXRyaWV2ZVNwZWNpZmljRm9udChGWF9CWVRFIGNoYXJTZXQsIEZYX0JZVEUgcGl0Y2hBbmRGYW1pbHksIExQQ1NUUiBwY3NGb250TmFtZSwgTE9HRk9OVEEmIGxmKQ0KLXsNCi0gICAgbWVtc2V0KCZsZiwgMCwgc2l6ZW9mKExPR0ZPTlRBKSk7DQotICAgIGxmLmxmQ2hhclNldCA9IGNoYXJTZXQ7DQotICAgIGxmLmxmUGl0Y2hBbmRGYW1pbHkgPSBwaXRjaEFuZEZhbWlseTsNCi0gICAgaWYgKHBjc0ZvbnROYW1lICE9IE5VTEwpIHsNCi0gICAgICAgIHN0cmNweShsZi5sZkZhY2VOYW1lLCBwY3NGb250TmFtZSk7DQotICAgIH0NCi0gICAgcmV0dXJuIFJldHJpZXZlU3BlY2lmaWNGb250KGxmKTsNCi19DQotc3RhdGljIEZYX0JPT0wgUmV0cmlldmVTdG9ja0ZvbnQoaW50IGlGb250T2JqZWN0LCBGWF9CWVRFIGNoYXJTZXQsIExPR0ZPTlRBJiBsZikNCi17DQotICAgIEhGT05UIGhGb250ID0gKEhGT05UKTo6R2V0U3RvY2tPYmplY3QoaUZvbnRPYmplY3QpOw0KLSAgICBpZiAoaEZvbnQgIT0gTlVMTCkgew0KLSAgICAgICAgbWVtc2V0KCZsZiwgMCwgc2l6ZW9mKExPR0ZPTlRBKSk7DQotICAgICAgICBpbnQgaVJldCA9IDo6R2V0T2JqZWN0KGhGb250LCBzaXplb2YoTE9HRk9OVEEpLCAmbGYpOw0KLSAgICAgICAgaWYgKGlSZXQgPiAwICYmIChsZi5sZkNoYXJTZXQgPT0gY2hhclNldCB8fCBjaGFyU2V0ID09IDI1NSkpIHsNCi0gICAgICAgICAgICByZXR1cm4gUmV0cmlldmVTcGVjaWZpY0ZvbnQobGYpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotI2VuZGlmDQotQ1BERl9Gb250KiBDUERGX0ludGVyRm9ybTo6QWRkU3lzdGVtRGVmYXVsdEZvbnQoY29uc3QgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50KQ0KLXsNCi0gICAgaWYgKHBEb2N1bWVudCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDUERGX0ZvbnQqIHBGb250ID0gTlVMTDsNCi0jaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXw0KLSAgICBMT0dGT05UQSBsZjsNCi0gICAgRlhfQk9PTCBiUmV0Ow0KLSAgICBiUmV0ID0gUmV0cmlldmVTdG9ja0ZvbnQoREVGQVVMVF9HVUlfRk9OVCwgMjU1LCBsZik7DQotICAgIGlmICghYlJldCkgew0KLSAgICAgICAgYlJldCA9IFJldHJpZXZlU3RvY2tGb250KFNZU1RFTV9GT05ULCAyNTUsIGxmKTsNCi0gICAgfQ0KLSAgICBpZiAoYlJldCkgew0KLSAgICAgICAgcEZvbnQgPSAoKENQREZfRG9jdW1lbnQqKXBEb2N1bWVudCktPkFkZFdpbmRvd3NGb250KCZsZiwgRkFMU0UsIFRSVUUpOw0KLSAgICB9DQotI2VuZGlmDQotICAgIHJldHVybiBwRm9udDsNCi19DQotQ1BERl9Gb250KiBDUERGX0ludGVyRm9ybTo6QWRkU3lzdGVtRm9udChjb25zdCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIENGWF9CeXRlU3RyaW5nIGNzRm9udE5hbWUsIEZYX0JZVEUgaUNoYXJTZXQpDQotew0KLSAgICBpZiAocERvY3VtZW50ID09IE5VTEwgfHwgY3NGb250TmFtZS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18NCi0gICAgaWYgKGlDaGFyU2V0ID09IDEpIHsNCi0gICAgICAgIGlDaGFyU2V0ID0gR2V0TmF0aXZlQ2hhclNldCgpOw0KLSAgICB9DQotICAgIEhGT05UIGhGb250ID0gOjpDcmVhdGVGb250QSgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCBpQ2hhclNldCwgT1VUX0RFRkFVTFRfUFJFQ0lTLCBDTElQX0RFRkFVTFRfUFJFQ0lTLCBERUZBVUxUX1FVQUxJVFksIERFRkFVTFRfUElUQ0ggfCBGRl9ET05UQ0FSRSwgKEZYX0xQQ1NUUiljc0ZvbnROYW1lKTsNCi0gICAgaWYgKGhGb250ICE9IE5VTEwpIHsNCi0gICAgICAgIExPR0ZPTlRBIGxmOw0KLSAgICAgICAgbWVtc2V0KCZsZiwgMCwgc2l6ZW9mKExPR0ZPTlRBKSk7DQotICAgICAgICA6OkdldE9iamVjdEEoaEZvbnQsIHNpemVvZihMT0dGT05UQSksICZsZik7DQotICAgICAgICA6OkRlbGV0ZU9iamVjdChoRm9udCk7DQotICAgICAgICBpZiAoc3RybGVuKGxmLmxmRmFjZU5hbWUpID4gMCkgew0KLSAgICAgICAgICAgIHJldHVybiAoKENQREZfRG9jdW1lbnQqKXBEb2N1bWVudCktPkFkZFdpbmRvd3NGb250KCZsZiwgRkFMU0UsIFRSVUUpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotI2VuZGlmDQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1DUERGX0ZvbnQqIENQREZfSW50ZXJGb3JtOjpBZGRTeXN0ZW1Gb250KGNvbnN0IENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ0ZYX1dpZGVTdHJpbmcgY3NGb250TmFtZSwgRlhfQllURSBpQ2hhclNldCkNCi17DQotICAgIGlmIChwRG9jdW1lbnQgPT0gTlVMTCB8fCBjc0ZvbnROYW1lLklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0jaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXw0KLSAgICBpZiAoaUNoYXJTZXQgPT0gMSkgew0KLSAgICAgICAgaUNoYXJTZXQgPSBHZXROYXRpdmVDaGFyU2V0KCk7DQotICAgIH0NCi0gICAgSEZPTlQgaEZvbnQgPSA6OkNyZWF0ZUZvbnRXKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIGlDaGFyU2V0LCBPVVRfREVGQVVMVF9QUkVDSVMsIENMSVBfREVGQVVMVF9QUkVDSVMsIERFRkFVTFRfUVVBTElUWSwgREVGQVVMVF9QSVRDSCB8IEZGX0RPTlRDQVJFLCBjc0ZvbnROYW1lKTsNCi0gICAgaWYgKGhGb250ICE9IE5VTEwpIHsNCi0gICAgICAgIExPR0ZPTlRBIGxmOw0KLSAgICAgICAgbWVtc2V0KCZsZiwgMCwgc2l6ZW9mKExPR0ZPTlRBKSk7DQotICAgICAgICA6OkdldE9iamVjdChoRm9udCwgc2l6ZW9mKExPR0ZPTlRBKSwgJmxmKTsNCi0gICAgICAgIDo6RGVsZXRlT2JqZWN0KGhGb250KTsNCi0gICAgICAgIGlmIChzdHJsZW4obGYubGZGYWNlTmFtZSkgPiAwKSB7DQotICAgICAgICAgICAgcmV0dXJuICgoQ1BERl9Eb2N1bWVudCopcERvY3VtZW50KS0+QWRkV2luZG93c0ZvbnQoJmxmLCBGQUxTRSwgVFJVRSk7DQotICAgICAgICB9DQotICAgIH0NCi0jZW5kaWYNCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLUNQREZfRm9udCogQ1BERl9JbnRlckZvcm06OkFkZFN0YW5kYXJkRm9udChjb25zdCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIENGWF9CeXRlU3RyaW5nIGNzRm9udE5hbWUpDQotew0KLSAgICBpZiAocERvY3VtZW50ID09IE5VTEwgfHwgY3NGb250TmFtZS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfRm9udCogcEZvbnQgPSBOVUxMOw0KLSAgICBpZiAoY3NGb250TmFtZSA9PSAiWmFwZkRpbmdiYXRzIikgew0KLSAgICAgICAgcEZvbnQgPSAoKENQREZfRG9jdW1lbnQqKXBEb2N1bWVudCktPkFkZFN0YW5kYXJkRm9udChjc0ZvbnROYW1lLCBOVUxMKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIENQREZfRm9udEVuY29kaW5nIGVuY29kaW5nKFBERkZPTlRfRU5DT0RJTkdfV0lOQU5TSSk7DQotICAgICAgICBwRm9udCA9ICgoQ1BERl9Eb2N1bWVudCopcERvY3VtZW50KS0+QWRkU3RhbmRhcmRGb250KGNzRm9udE5hbWUsICZlbmNvZGluZyk7DQotICAgIH0NCi0gICAgcmV0dXJuIHBGb250Ow0KLX0NCi1DRlhfQnl0ZVN0cmluZyBDUERGX0ludGVyRm9ybTo6R2V0TmF0aXZlRm9udChGWF9CWVRFIGNoYXJTZXQsIEZYX0xQVk9JRCBwTG9nRm9udCkNCi17DQotICAgIENGWF9CeXRlU3RyaW5nIGNzRm9udE5hbWU7DQotI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18NCi0gICAgTE9HRk9OVEEgbGY7DQotICAgIEZYX0JPT0wgYlJldDsNCi0gICAgaWYgKGNoYXJTZXQgPT0gQU5TSV9DSEFSU0VUKSB7DQotICAgICAgICBjc0ZvbnROYW1lID0gIkhlbHZldGljYSI7DQotICAgICAgICByZXR1cm4gY3NGb250TmFtZTsNCi0gICAgfQ0KLSAgICBiUmV0ID0gRkFMU0U7DQotICAgIGlmIChjaGFyU2V0ID09IFNISUZUSklTX0NIQVJTRVQpIHsNCi0gICAgICAgIGJSZXQgPSBSZXRyaWV2ZVNwZWNpZmljRm9udChjaGFyU2V0LCBERUZBVUxUX1BJVENIIHwgRkZfRE9OVENBUkUsICJNUyBNaW5jaG8iLCBsZik7DQotICAgIH0gZWxzZSBpZiAoY2hhclNldCA9PSBHQjIzMTJfQ0hBUlNFVCkgew0KLSAgICAgICAgYlJldCA9IFJldHJpZXZlU3BlY2lmaWNGb250KGNoYXJTZXQsIERFRkFVTFRfUElUQ0ggfCBGRl9ET05UQ0FSRSwgIlNpbVN1biIsIGxmKTsNCi0gICAgfSBlbHNlIGlmIChjaGFyU2V0ID09IENISU5FU0VCSUc1X0NIQVJTRVQpIHsNCi0gICAgICAgIGJSZXQgPSBSZXRyaWV2ZVNwZWNpZmljRm9udChjaGFyU2V0LCBERUZBVUxUX1BJVENIIHwgRkZfRE9OVENBUkUsICJNaW5nTGlVIiwgbGYpOw0KLSAgICB9DQotICAgIGlmICghYlJldCkgew0KLSAgICAgICAgYlJldCA9IFJldHJpZXZlU3BlY2lmaWNGb250KGNoYXJTZXQsIERFRkFVTFRfUElUQ0ggfCBGRl9ET05UQ0FSRSwgIkFyaWFsIFVuaWNvZGUgTVMiLCBsZik7DQotICAgIH0NCi0gICAgaWYgKCFiUmV0KSB7DQotICAgICAgICBiUmV0ID0gUmV0cmlldmVTcGVjaWZpY0ZvbnQoY2hhclNldCwgREVGQVVMVF9QSVRDSCB8IEZGX0RPTlRDQVJFLCAiTWljcm9zb2Z0IFNhbnMgU2VyaWYiLCBsZik7DQotICAgIH0NCi0gICAgaWYgKCFiUmV0KSB7DQotICAgICAgICBiUmV0ID0gUmV0cmlldmVTcGVjaWZpY0ZvbnQoY2hhclNldCwgREVGQVVMVF9QSVRDSCB8IEZGX0RPTlRDQVJFLCBOVUxMLCBsZik7DQotICAgIH0NCi0gICAgaWYgKGJSZXQpIHsNCi0gICAgICAgIGlmIChwTG9nRm9udCAhPSBOVUxMKSB7DQotICAgICAgICAgICAgbWVtY3B5KHBMb2dGb250LCAmbGYsIHNpemVvZihMT0dGT05UQSkpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgY3NGb250TmFtZSA9IGxmLmxmRmFjZU5hbWU7DQotICAgICAgICByZXR1cm4gY3NGb250TmFtZTsNCi0gICAgfQ0KLSNlbmRpZg0KLSAgICByZXR1cm4gY3NGb250TmFtZTsNCi19DQotQ0ZYX0J5dGVTdHJpbmcgQ1BERl9JbnRlckZvcm06OkdldE5hdGl2ZUZvbnQoRlhfTFBWT0lEIHBMb2dGb250KQ0KLXsNCi0jaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXw0KLSAgICBGWF9CWVRFIGNoYXJTZXQgPSBHZXROYXRpdmVDaGFyU2V0KCk7DQotICAgIHJldHVybiBHZXROYXRpdmVGb250KGNoYXJTZXQsIHBMb2dGb250KTsNCi0jZWxzZQ0KLSAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsNCi0jZW5kaWYNCi19DQotRlhfQllURSBDUERGX0ludGVyRm9ybTo6R2V0TmF0aXZlQ2hhclNldCgpDQotew0KLSNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfDQotICAgIEZYX0JZVEUgY2hhclNldCA9IEFOU0lfQ0hBUlNFVDsNCi0gICAgVUlOVCBpQ29kZVBhZ2UgPSA6OkdldEFDUCgpOw0KLSAgICBzd2l0Y2ggKGlDb2RlUGFnZSkgew0KLSAgICAgICAgY2FzZSA5MzI6DQotICAgICAgICAgICAgY2hhclNldCA9IFNISUZUSklTX0NIQVJTRVQ7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIDkzNjoNCi0gICAgICAgICAgICBjaGFyU2V0ID0gR0IyMzEyX0NIQVJTRVQ7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIDk1MDoNCi0gICAgICAgICAgICBjaGFyU2V0ID0gQ0hJTkVTRUJJRzVfQ0hBUlNFVDsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgMTI1MjoNCi0gICAgICAgICAgICBjaGFyU2V0ID0gQU5TSV9DSEFSU0VUOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSA4NzQ6DQotICAgICAgICAgICAgY2hhclNldCA9IFRIQUlfQ0hBUlNFVDsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgOTQ5Og0KLSAgICAgICAgICAgIGNoYXJTZXQgPSBIQU5HVUxfQ0hBUlNFVDsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgMTIwMDoNCi0gICAgICAgICAgICBjaGFyU2V0ID0gQU5TSV9DSEFSU0VUOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSAxMjUwOg0KLSAgICAgICAgICAgIGNoYXJTZXQgPSBFQVNURVVST1BFX0NIQVJTRVQ7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIDEyNTE6DQotICAgICAgICAgICAgY2hhclNldCA9IFJVU1NJQU5fQ0hBUlNFVDsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgMTI1MzoNCi0gICAgICAgICAgICBjaGFyU2V0ID0gR1JFRUtfQ0hBUlNFVDsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgMTI1NDoNCi0gICAgICAgICAgICBjaGFyU2V0ID0gVFVSS0lTSF9DSEFSU0VUOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSAxMjU1Og0KLSAgICAgICAgICAgIGNoYXJTZXQgPSBIRUJSRVdfQ0hBUlNFVDsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgMTI1NjoNCi0gICAgICAgICAgICBjaGFyU2V0ID0gQVJBQklDX0NIQVJTRVQ7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIDEyNTc6DQotICAgICAgICAgICAgY2hhclNldCA9IEJBTFRJQ19DSEFSU0VUOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSAxMjU4Og0KLSAgICAgICAgICAgIGNoYXJTZXQgPSBWSUVUTkFNRVNFX0NIQVJTRVQ7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIDEzNjE6DQotICAgICAgICAgICAgY2hhclNldCA9IEpPSEFCX0NIQVJTRVQ7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgIH0NCi0gICAgcmV0dXJuIGNoYXJTZXQ7DQotI2Vsc2UNCi0gICAgcmV0dXJuIDA7DQotI2VuZGlmDQotfQ0KLUNQREZfRm9udCogQ1BERl9JbnRlckZvcm06OkFkZE5hdGl2ZUZvbnQoRlhfQllURSBjaGFyU2V0LCBjb25zdCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQpDQotew0KLSAgICBpZiAocERvY3VtZW50ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfRm9udCogcEZvbnQgPSBOVUxMOw0KLSNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfDQotICAgIExPR0ZPTlRBIGxmOw0KLSAgICBDRlhfQnl0ZVN0cmluZyBjc0ZvbnROYW1lID0gR2V0TmF0aXZlRm9udChjaGFyU2V0LCAmbGYpOw0KLSAgICBpZiAoIWNzRm9udE5hbWUuSXNFbXB0eSgpKSB7DQotICAgICAgICBpZiAoY3NGb250TmFtZSA9PSAiSGVsdmV0aWNhIikgew0KLSAgICAgICAgICAgIHBGb250ID0gQWRkU3RhbmRhcmRGb250KHBEb2N1bWVudCwgY3NGb250TmFtZSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHBGb250ID0gKChDUERGX0RvY3VtZW50KilwRG9jdW1lbnQpLT5BZGRXaW5kb3dzRm9udCgmbGYsIEZBTFNFLCBUUlVFKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSNlbmRpZg0KLSAgICByZXR1cm4gcEZvbnQ7DQotfQ0KLUNQREZfRm9udCogQ1BERl9JbnRlckZvcm06OkFkZE5hdGl2ZUZvbnQoY29uc3QgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50KQ0KLXsNCi0gICAgaWYgKHBEb2N1bWVudCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDUERGX0ZvbnQqIHBGb250ID0gTlVMTDsNCi0gICAgRlhfQllURSBjaGFyU2V0ID0gR2V0TmF0aXZlQ2hhclNldCgpOw0KLSAgICBwRm9udCA9IEFkZE5hdGl2ZUZvbnQoY2hhclNldCwgcERvY3VtZW50KTsNCi0gICAgcmV0dXJuIHBGb250Ow0KLX0NCi1GWF9CT09MIENQREZfSW50ZXJGb3JtOjpWYWxpZGF0ZUZpZWxkTmFtZShDRlhfV2lkZVN0cmluZyYgY3NOZXdGaWVsZE5hbWUsIGludCBpVHlwZSwgY29uc3QgQ1BERl9Gb3JtRmllbGQqIHBFeGNsdWRlZEZpZWxkLCBjb25zdCBDUERGX0Zvcm1Db250cm9sKiBwRXhjbHVkZWRDb250cm9sKQ0KLXsNCi0gICAgaWYgKGNzTmV3RmllbGROYW1lLklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGludCBpUG9zID0gMDsNCi0gICAgaW50IGlMZW5ndGggPSBjc05ld0ZpZWxkTmFtZS5HZXRMZW5ndGgoKTsNCi0gICAgQ0ZYX1dpZGVTdHJpbmcgY3NTdWI7DQotICAgIHdoaWxlIChUUlVFKSB7DQotICAgICAgICB3aGlsZSAoaVBvcyA8IGlMZW5ndGggJiYgKGNzTmV3RmllbGROYW1lW2lQb3NdID09IEwnLicgfHwgY3NOZXdGaWVsZE5hbWVbaVBvc10gPT0gTCcgJykpIHsNCi0gICAgICAgICAgICBpUG9zICsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGlQb3MgPCBpTGVuZ3RoICYmICFjc1N1Yi5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICBjc1N1YiArPSBMJy4nOw0KLSAgICAgICAgfQ0KLSAgICAgICAgd2hpbGUgKGlQb3MgPCBpTGVuZ3RoICYmIGNzTmV3RmllbGROYW1lW2lQb3NdICE9IEwnLicpIHsNCi0gICAgICAgICAgICBjc1N1YiArPSBjc05ld0ZpZWxkTmFtZVtpUG9zICsrXTsNCi0gICAgICAgIH0NCi0gICAgICAgIGZvciAoaW50IGkgPSBjc1N1Yi5HZXRMZW5ndGgoKSAtIDE7IGkgPiAtMTsgaSAtLSkgew0KLSAgICAgICAgICAgIGlmIChjc1N1YltpXSA9PSBMJyAnIHx8IGNzU3ViW2ldID09IEwnLicpIHsNCi0gICAgICAgICAgICAgICAgY3NTdWIuU2V0QXQoaSwgTCdcMCcpOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0RXT1JEIGR3Q291bnQgPSBtX3BGaWVsZFRyZWUtPm1fUm9vdC5Db3VudEZpZWxkcygpOw0KLSAgICAgICAgZm9yIChGWF9EV09SRCBtID0gMDsgbSA8IGR3Q291bnQ7IG0gKyspIHsNCi0gICAgICAgICAgICBDUERGX0Zvcm1GaWVsZCogcEZpZWxkID0gbV9wRmllbGRUcmVlLT5tX1Jvb3QuR2V0RmllbGQobSk7DQotICAgICAgICAgICAgaWYgKHBGaWVsZCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAocEZpZWxkID09IHBFeGNsdWRlZEZpZWxkKSB7DQotICAgICAgICAgICAgICAgIGlmIChwRXhjbHVkZWRDb250cm9sICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwRmllbGQtPkNvdW50Q29udHJvbHMoKSA8IDIpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIGNzRnVsbE5hbWUgPSBwRmllbGQtPkdldEZ1bGxOYW1lKCk7DQotICAgICAgICAgICAgaW50IGlSZXQgPSBDb21wYXJlRmllbGROYW1lKGNzU3ViLCBjc0Z1bGxOYW1lKTsNCi0gICAgICAgICAgICBpZiAoaVJldCA9PSAxKSB7DQotICAgICAgICAgICAgICAgIGlmIChwRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IGlUeXBlKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGlSZXQgPT0gMiAmJiBjc1N1YiA9PSBjc05ld0ZpZWxkTmFtZSkgew0KLSAgICAgICAgICAgICAgICBpZiAoY3NGdWxsTmFtZVtpUG9zXSA9PSBMJy4nKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGlSZXQgPT0gMyAmJiBjc1N1YiA9PSBjc05ld0ZpZWxkTmFtZSkgew0KLSAgICAgICAgICAgICAgICBpZiAoY3NOZXdGaWVsZE5hbWVbY3NGdWxsTmFtZS5HZXRMZW5ndGgoKV0gPT0gTCcuJykgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGlQb3MgPj0gaUxlbmd0aCkgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChjc1N1Yi5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBjc05ld0ZpZWxkTmFtZSA9IGNzU3ViOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDUERGX0ludGVyRm9ybTo6VmFsaWRhdGVGaWVsZE5hbWUoQ0ZYX1dpZGVTdHJpbmcmIGNzTmV3RmllbGROYW1lLCBpbnQgaVR5cGUpDQotew0KLSAgICByZXR1cm4gVmFsaWRhdGVGaWVsZE5hbWUoY3NOZXdGaWVsZE5hbWUsIGlUeXBlLCBOVUxMLCBOVUxMKTsNCi19DQotRlhfQk9PTCBDUERGX0ludGVyRm9ybTo6VmFsaWRhdGVGaWVsZE5hbWUoY29uc3QgQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCwgQ0ZYX1dpZGVTdHJpbmcmIGNzTmV3RmllbGROYW1lKQ0KLXsNCi0gICAgaWYgKHBGaWVsZCA9PSBOVUxMIHx8IGNzTmV3RmllbGROYW1lLklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHJldHVybiBWYWxpZGF0ZUZpZWxkTmFtZShjc05ld0ZpZWxkTmFtZSwgKChDUERGX0Zvcm1GaWVsZCopcEZpZWxkKS0+R2V0RmllbGRUeXBlKCksIHBGaWVsZCwgTlVMTCk7DQotfQ0KLUZYX0JPT0wgQ1BERl9JbnRlckZvcm06OlZhbGlkYXRlRmllbGROYW1lKGNvbnN0IENQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sLCBDRlhfV2lkZVN0cmluZyYgY3NOZXdGaWVsZE5hbWUpDQotew0KLSAgICBpZiAocENvbnRyb2wgPT0gTlVMTCB8fCBjc05ld0ZpZWxkTmFtZS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDUERGX0Zvcm1GaWVsZCogcEZpZWxkID0gKChDUERGX0Zvcm1Db250cm9sKilwQ29udHJvbCktPkdldEZpZWxkKCk7DQotICAgIHJldHVybiBWYWxpZGF0ZUZpZWxkTmFtZShjc05ld0ZpZWxkTmFtZSwgcEZpZWxkLT5HZXRGaWVsZFR5cGUoKSwgcEZpZWxkLCBwQ29udHJvbCk7DQotfQ0KLWludCBDUERGX0ludGVyRm9ybTo6Q29tcGFyZUZpZWxkTmFtZShjb25zdCBDRlhfQnl0ZVN0cmluZyYgbmFtZTEsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lMikNCi17DQotICAgIEZYX0xQQ1NUUiBwdHIxID0gbmFtZTEsIHB0cjIgPSBuYW1lMjsNCi0gICAgaWYgKG5hbWUxLkdldExlbmd0aCgpICE9IG5hbWUyLkdldExlbmd0aCgpKSB7DQotICAgICAgICBpbnQgaSA9IDA7DQotICAgICAgICB3aGlsZSAocHRyMVtpXSA9PSBwdHIyW2ldKSB7DQotICAgICAgICAgICAgaSArKzsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChpID09IG5hbWUxLkdldExlbmd0aCgpKSB7DQotICAgICAgICAgICAgcmV0dXJuIDI7DQotICAgICAgICB9DQotICAgICAgICBpZiAoaSA9PSBuYW1lMi5HZXRMZW5ndGgoKSkgew0KLSAgICAgICAgICAgIHJldHVybiAzOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0gZWxzZSB7DQotICAgICAgICByZXR1cm4gbmFtZTEgPT0gbmFtZTIgPyAxIDogMDsNCi0gICAgfQ0KLX0NCi1pbnQgQ1BERl9JbnRlckZvcm06OkNvbXBhcmVGaWVsZE5hbWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIG5hbWUxLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgbmFtZTIpDQotew0KLSAgICBGWF9MUENXU1RSIHB0cjEgPSBuYW1lMSwgcHRyMiA9IG5hbWUyOw0KLSAgICBpZiAobmFtZTEuR2V0TGVuZ3RoKCkgIT0gbmFtZTIuR2V0TGVuZ3RoKCkpIHsNCi0gICAgICAgIGludCBpID0gMDsNCi0gICAgICAgIHdoaWxlIChwdHIxW2ldID09IHB0cjJbaV0pIHsNCi0gICAgICAgICAgICBpICsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGkgPT0gbmFtZTEuR2V0TGVuZ3RoKCkpIHsNCi0gICAgICAgICAgICByZXR1cm4gMjsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChpID09IG5hbWUyLkdldExlbmd0aCgpKSB7DQotICAgICAgICAgICAgcmV0dXJuIDM7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHJldHVybiBuYW1lMSA9PSBuYW1lMiA/IDEgOiAwOw0KLSAgICB9DQotfQ0KLUZYX0RXT1JEIENQREZfSW50ZXJGb3JtOjpDb3VudEZpZWxkcyhjb25zdCBDRlhfV2lkZVN0cmluZyAmY3NGaWVsZE5hbWUpDQotew0KLSAgICBpZiAoY3NGaWVsZE5hbWUuSXNFbXB0eSgpKSB7DQotICAgICAgICByZXR1cm4gKEZYX0RXT1JEKW1fcEZpZWxkVHJlZS0+bV9Sb290LkNvdW50RmllbGRzKCk7DQotICAgIH0NCi0gICAgQ0ZpZWxkVHJlZTo6X05vZGUgKnBOb2RlID0gbV9wRmllbGRUcmVlLT5GaW5kTm9kZShjc0ZpZWxkTmFtZSk7DQotICAgIGlmIChwTm9kZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICByZXR1cm4gcE5vZGUtPkNvdW50RmllbGRzKCk7DQotfQ0KLUNQREZfRm9ybUZpZWxkKiBDUERGX0ludGVyRm9ybTo6R2V0RmllbGQoRlhfRFdPUkQgaW5kZXgsIGNvbnN0IENGWF9XaWRlU3RyaW5nICZjc0ZpZWxkTmFtZSkNCi17DQotICAgIGlmIChjc0ZpZWxkTmFtZSA9PSBMIiIpIHsNCi0gICAgICAgIHJldHVybiBtX3BGaWVsZFRyZWUtPm1fUm9vdC5HZXRGaWVsZChpbmRleCk7DQotICAgIH0NCi0gICAgQ0ZpZWxkVHJlZTo6X05vZGUgKnBOb2RlID0gbV9wRmllbGRUcmVlLT5GaW5kTm9kZShjc0ZpZWxkTmFtZSk7DQotICAgIGlmIChwTm9kZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gcE5vZGUtPkdldEZpZWxkKGluZGV4KTsNCi19DQotdm9pZCBDUERGX0ludGVyRm9ybTo6R2V0QWxsRmllbGROYW1lcyhDRlhfV2lkZVN0cmluZ0FycmF5JiBhbGxGaWVsZE5hbWVzKQ0KLXsNCi0gICAgYWxsRmllbGROYW1lcy5SZW1vdmVBbGwoKTsNCi0gICAgaW50IG5Db3VudCA9IG1fcEZpZWxkVHJlZS0+bV9Sb290LkNvdW50RmllbGRzKCk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkNvdW50OyBpICsrKSB7DQotICAgICAgICBDUERGX0Zvcm1GaWVsZCAqcEZpZWxkID0gbV9wRmllbGRUcmVlLT5tX1Jvb3QuR2V0RmllbGQoaSk7DQotICAgICAgICBpZiAocEZpZWxkKSB7DQotICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgZnVsbF9uYW1lID0gR2V0RnVsbE5hbWUocEZpZWxkLT5HZXRGaWVsZERpY3QoKSk7DQotICAgICAgICAgICAgYWxsRmllbGROYW1lcy5BZGQoZnVsbF9uYW1lKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1GWF9CT09MIENQREZfSW50ZXJGb3JtOjpJc1ZhbGlkRm9ybUZpZWxkKGNvbnN0IHZvaWQqIHBGaWVsZCkNCi17DQotICAgIGlmIChwRmllbGQgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGludCBuQ291bnQgPSBtX3BGaWVsZFRyZWUtPm1fUm9vdC5Db3VudEZpZWxkcygpOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5Db3VudDsgaSsrKSB7DQotICAgICAgICBDUERGX0Zvcm1GaWVsZCAqcEZvcm1GaWVsZCA9IG1fcEZpZWxkVHJlZS0+bV9Sb290LkdldEZpZWxkKGkpOw0KLSAgICAgICAgaWYgKHBGaWVsZCA9PSBwRm9ybUZpZWxkKSB7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1DUERGX0Zvcm1GaWVsZCogQ1BERl9JbnRlckZvcm06OkdldEZpZWxkQnlEaWN0KENQREZfRGljdGlvbmFyeSogcEZpZWxkRGljdCkgY29uc3QNCi17DQotICAgIGlmIChwRmllbGREaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENGWF9XaWRlU3RyaW5nIGNzV05hbWUgPSBHZXRGdWxsTmFtZShwRmllbGREaWN0KTsNCi0gICAgcmV0dXJuIG1fcEZpZWxkVHJlZS0+R2V0RmllbGQoY3NXTmFtZSk7DQotfQ0KLUZYX0RXT1JEIENQREZfSW50ZXJGb3JtOjpDb3VudENvbnRyb2xzKENGWF9XaWRlU3RyaW5nIGNzRmllbGROYW1lKQ0KLXsNCi0gICAgaWYgKGNzRmllbGROYW1lLklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuIChGWF9EV09SRCltX0NvbnRyb2xNYXAuR2V0Q291bnQoKTsNCi0gICAgfQ0KLSAgICBDUERGX0Zvcm1GaWVsZCAqcEZpZWxkID0gbV9wRmllbGRUcmVlLT5HZXRGaWVsZChjc0ZpZWxkTmFtZSk7DQotICAgIGlmIChwRmllbGQgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgcmV0dXJuIHBGaWVsZC0+bV9Db250cm9sTGlzdC5HZXRTaXplKCk7DQotfQ0KLUNQREZfRm9ybUNvbnRyb2wqIENQREZfSW50ZXJGb3JtOjpHZXRDb250cm9sKEZYX0RXT1JEIGluZGV4LCBDRlhfV2lkZVN0cmluZyBjc0ZpZWxkTmFtZSkNCi17DQotICAgIENQREZfRm9ybUZpZWxkICpwRmllbGQgPSBtX3BGaWVsZFRyZWUtPkdldEZpZWxkKGNzRmllbGROYW1lKTsNCi0gICAgaWYgKHBGaWVsZCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAoaW5kZXggPCAoRlhfRFdPUkQpcEZpZWxkLT5tX0NvbnRyb2xMaXN0LkdldFNpemUoKSkgew0KLSAgICAgICAgcmV0dXJuIChDUERGX0Zvcm1Db250cm9sICopcEZpZWxkLT5tX0NvbnRyb2xMaXN0LkdldEF0KGluZGV4KTsNCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotRlhfQk9PTCBDUERGX0ludGVyRm9ybTo6SXNWYWxpZEZvcm1Db250cm9sKGNvbnN0IHZvaWQqIHBDb250cm9sKQ0KLXsNCi0gICAgaWYgKHBDb250cm9sID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWF9QT1NJVElPTiBwb3MgPSBtX0NvbnRyb2xNYXAuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBXaWRnZXREaWN0ID0gTlVMTDsNCi0gICAgICAgIHZvaWQqIHBGb3JtQ29udHJvbCA9IE5VTEw7DQotICAgICAgICBtX0NvbnRyb2xNYXAuR2V0TmV4dEFzc29jKHBvcywgKEZYX0xQVk9JRCYpcFdpZGdldERpY3QsIHBGb3JtQ29udHJvbCk7DQotICAgICAgICBpZiAocENvbnRyb2wgPT0gcEZvcm1Db250cm9sKSB7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1pbnQgQ1BERl9JbnRlckZvcm06OkNvdW50UGFnZUNvbnRyb2xzKENQREZfUGFnZSogcFBhZ2UpIGNvbnN0DQotew0KLSAgICBDUERGX0FycmF5KiBwQW5ub3RMaXN0ID0gcFBhZ2UtPm1fcEZvcm1EaWN0LT5HZXRBcnJheSgiQW5ub3RzIik7DQotICAgIGlmIChwQW5ub3RMaXN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGludCBjb3VudCA9IDA7DQotICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwQW5ub3RMaXN0LT5HZXRDb3VudCgpOyBpICsrKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdCA9IHBBbm5vdExpc3QtPkdldERpY3QoaSk7DQotICAgICAgICBpZiAocEFubm90ID09IE5VTEwpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIENQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sOw0KLSAgICAgICAgaWYgKCFtX0NvbnRyb2xNYXAuTG9va3VwKHBBbm5vdCwgKEZYX0xQVk9JRCYpcENvbnRyb2wpKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBjb3VudCArKzsNCi0gICAgfQ0KLSAgICByZXR1cm4gY291bnQ7DQotfQ0KLUNQREZfRm9ybUNvbnRyb2wqIENQREZfSW50ZXJGb3JtOjpHZXRQYWdlQ29udHJvbChDUERGX1BhZ2UqIHBQYWdlLCBpbnQgaW5kZXgpIGNvbnN0DQotew0KLSAgICBDUERGX0FycmF5KiBwQW5ub3RMaXN0ID0gcFBhZ2UtPm1fcEZvcm1EaWN0LT5HZXRBcnJheSgiQW5ub3RzIik7DQotICAgIGlmIChwQW5ub3RMaXN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGludCBjb3VudCA9IDA7DQotICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwQW5ub3RMaXN0LT5HZXRDb3VudCgpOyBpICsrKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdCA9IHBBbm5vdExpc3QtPkdldERpY3QoaSk7DQotICAgICAgICBpZiAocEFubm90ID09IE5VTEwpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIENQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sOw0KLSAgICAgICAgaWYgKCFtX0NvbnRyb2xNYXAuTG9va3VwKHBBbm5vdCwgKEZYX0xQVk9JRCYpcENvbnRyb2wpKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoaW5kZXggPT0gY291bnQpIHsNCi0gICAgICAgICAgICByZXR1cm4gcENvbnRyb2w7DQotICAgICAgICB9DQotICAgICAgICBjb3VudCArKzsNCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotQ1BERl9Gb3JtQ29udHJvbCogQ1BERl9JbnRlckZvcm06OkdldENvbnRyb2xBdFBvaW50KENQREZfUGFnZSogcFBhZ2UsIEZYX0ZMT0FUIHBkZl94LCBGWF9GTE9BVCBwZGZfeSkgY29uc3QNCi17DQotICAgIENQREZfQXJyYXkqIHBBbm5vdExpc3QgPSBwUGFnZS0+bV9wRm9ybURpY3QtPkdldEFycmF5KCJBbm5vdHMiKTsNCi0gICAgaWYgKHBBbm5vdExpc3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgZm9yIChGWF9EV09SRCBpID0gcEFubm90TGlzdC0+R2V0Q291bnQoKTsgaSA+IDA7IGkgLS0pIHsNCi0gICAgICAgIENQREZfRGljdGlvbmFyeSogcEFubm90ID0gcEFubm90TGlzdC0+R2V0RGljdChpIC0gMSk7DQotICAgICAgICBpZiAocEFubm90ID09IE5VTEwpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIENQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sOw0KLSAgICAgICAgaWYgKCFtX0NvbnRyb2xNYXAuTG9va3VwKHBBbm5vdCwgKEZYX0xQVk9JRCYpcENvbnRyb2wpKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBDRlhfRmxvYXRSZWN0IHJlY3QgPSBwQ29udHJvbC0+R2V0UmVjdCgpOw0KLSAgICAgICAgaWYgKHJlY3QuQ29udGFpbnMocGRmX3gsIHBkZl95KSkgew0KLSAgICAgICAgICAgIHJldHVybiBwQ29udHJvbDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotQ1BERl9Gb3JtQ29udHJvbCogQ1BERl9JbnRlckZvcm06OkdldENvbnRyb2xCeURpY3QoQ1BERl9EaWN0aW9uYXJ5KiBwV2lkZ2V0RGljdCkgY29uc3QNCi17DQotICAgIENQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sID0gTlVMTDsNCi0gICAgbV9Db250cm9sTWFwLkxvb2t1cChwV2lkZ2V0RGljdCwgKEZYX0xQVk9JRCYpcENvbnRyb2wpOw0KLSAgICByZXR1cm4gcENvbnRyb2w7DQotfQ0KLUZYX0RXT1JEIENQREZfSW50ZXJGb3JtOjpDb3VudEludGVybmFsRmllbGRzKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBjc0ZpZWxkTmFtZSkgY29uc3QNCi17DQotICAgIGlmIChtX3BGb3JtRGljdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBtX3BGb3JtRGljdC0+R2V0QXJyYXkoIkZpZWxkcyIpOw0KLSAgICBpZiAocEFycmF5ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGlmIChjc0ZpZWxkTmFtZS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiBwQXJyYXktPkdldENvdW50KCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpbnQgaUxlbmd0aCA9IGNzRmllbGROYW1lLkdldExlbmd0aCgpOw0KLSAgICAgICAgaW50IGlQb3MgPSAwOw0KLSAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IE5VTEw7DQotICAgICAgICB3aGlsZSAocEFycmF5ICE9IE5VTEwpIHsNCi0gICAgICAgICAgICBDRlhfV2lkZVN0cmluZyBjc1N1YjsNCi0gICAgICAgICAgICBpZiAoaVBvcyA8IGlMZW5ndGggJiYgY3NGaWVsZE5hbWVbaVBvc10gPT0gTCcuJykgew0KLSAgICAgICAgICAgICAgICBpUG9zICsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB3aGlsZSAoaVBvcyA8IGlMZW5ndGggJiYgY3NGaWVsZE5hbWVbaVBvc10gIT0gTCcuJykgew0KLSAgICAgICAgICAgICAgICBjc1N1YiArPSBjc0ZpZWxkTmFtZVtpUG9zICsrXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaW50IGlDb3VudCA9IHBBcnJheS0+R2V0Q291bnQoKTsNCi0gICAgICAgICAgICBGWF9CT09MIGJGaW5kID0gRkFMU0U7DQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgcERpY3QgPSBwQXJyYXktPkdldERpY3QoaSk7DQotICAgICAgICAgICAgICAgIGlmIChwRGljdCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyBjc1QgPSBwRGljdC0+R2V0VW5pY29kZVRleHQoIlQiKTsNCi0gICAgICAgICAgICAgICAgaWYgKGNzVCA9PSBjc1N1Yikgew0KLSAgICAgICAgICAgICAgICAgICAgYkZpbmQgPSBUUlVFOw0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKCFiRmluZCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGlQb3MgPj0gaUxlbmd0aCkgew0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcEFycmF5ID0gcERpY3QtPkdldEFycmF5KCJLaWRzIik7DQotICAgICAgICB9DQotICAgICAgICBpZiAocERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBwQXJyYXkgPSBwRGljdC0+R2V0QXJyYXkoIktpZHMiKTsNCi0gICAgICAgICAgICBpZiAocEFycmF5ID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIDE7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBBcnJheS0+R2V0Q291bnQoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi19DQotQ1BERl9EaWN0aW9uYXJ5KiBDUERGX0ludGVyRm9ybTo6R2V0SW50ZXJuYWxGaWVsZChGWF9EV09SRCBpbmRleCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIGNzRmllbGROYW1lKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fcEZvcm1EaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfQXJyYXkqIHBBcnJheSA9IG1fcEZvcm1EaWN0LT5HZXRBcnJheSgiRmllbGRzIik7DQotICAgIGlmIChwQXJyYXkgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgaWYgKGNzRmllbGROYW1lLklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuIHBBcnJheS0+R2V0RGljdChpbmRleCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpbnQgaUxlbmd0aCA9IGNzRmllbGROYW1lLkdldExlbmd0aCgpOw0KLSAgICAgICAgaW50IGlQb3MgPSAwOw0KLSAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IE5VTEw7DQotICAgICAgICB3aGlsZSAocEFycmF5ICE9IE5VTEwpIHsNCi0gICAgICAgICAgICBDRlhfV2lkZVN0cmluZyBjc1N1YjsNCi0gICAgICAgICAgICBpZiAoaVBvcyA8IGlMZW5ndGggJiYgY3NGaWVsZE5hbWVbaVBvc10gPT0gTCcuJykgew0KLSAgICAgICAgICAgICAgICBpUG9zICsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB3aGlsZSAoaVBvcyA8IGlMZW5ndGggJiYgY3NGaWVsZE5hbWVbaVBvc10gIT0gTCcuJykgew0KLSAgICAgICAgICAgICAgICBjc1N1YiArPSBjc0ZpZWxkTmFtZVtpUG9zICsrXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaW50IGlDb3VudCA9IHBBcnJheS0+R2V0Q291bnQoKTsNCi0gICAgICAgICAgICBGWF9CT09MIGJGaW5kID0gRkFMU0U7DQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgcERpY3QgPSBwQXJyYXktPkdldERpY3QoaSk7DQotICAgICAgICAgICAgICAgIGlmIChwRGljdCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyBjc1QgPSBwRGljdC0+R2V0VW5pY29kZVRleHQoIlQiKTsNCi0gICAgICAgICAgICAgICAgaWYgKGNzVCA9PSBjc1N1Yikgew0KLSAgICAgICAgICAgICAgICAgICAgYkZpbmQgPSBUUlVFOw0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKCFiRmluZCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGlQb3MgPj0gaUxlbmd0aCkgew0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcEFycmF5ID0gcERpY3QtPkdldEFycmF5KCJLaWRzIik7DQotICAgICAgICB9DQotICAgICAgICBpZiAocERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBwQXJyYXkgPSBwRGljdC0+R2V0QXJyYXkoIktpZHMiKTsNCi0gICAgICAgICAgICBpZiAocEFycmF5ID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBEaWN0Ow0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBwQXJyYXktPkdldERpY3QoaW5kZXgpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1GWF9CT09MIENQREZfSW50ZXJGb3JtOjpOZWVkQ29uc3RydWN0QVAoKQ0KLXsNCi0gICAgaWYgKG1fcEZvcm1EaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wRm9ybURpY3QtPkdldEJvb2xlYW4oIk5lZWRBcHBlYXJhbmNlcyIpOw0KLX0NCi12b2lkIENQREZfSW50ZXJGb3JtOjpOZWVkQ29uc3RydWN0QVAoRlhfQk9PTCBiTmVlZEFQKQ0KLXsNCi0gICAgaWYgKG1fcEZvcm1EaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIEluaXRJbnRlckZvcm1EaWN0KG1fcEZvcm1EaWN0LCBtX3BEb2N1bWVudCk7DQotICAgIH0NCi0gICAgbV9wRm9ybURpY3QtPlNldEF0Qm9vbGVhbigiTmVlZEFwcGVhcmFuY2VzIiwgYk5lZWRBUCk7DQotICAgIG1fYkdlbmVyYXRlQVAgPSBiTmVlZEFQOw0KLX0NCi1pbnQgQ1BERl9JbnRlckZvcm06OkNvdW50RmllbGRzSW5DYWxjdWxhdGlvbk9yZGVyKCkNCi17DQotICAgIGlmIChtX3BGb3JtRGljdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBtX3BGb3JtRGljdC0+R2V0QXJyYXkoIkNPIik7DQotICAgIGlmIChwQXJyYXkgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgcmV0dXJuIHBBcnJheS0+R2V0Q291bnQoKTsNCi19DQotQ1BERl9Gb3JtRmllbGQqIENQREZfSW50ZXJGb3JtOjpHZXRGaWVsZEluQ2FsY3VsYXRpb25PcmRlcihpbnQgaW5kZXgpDQotew0KLSAgICBpZiAobV9wRm9ybURpY3QgPT0gTlVMTCB8fCBpbmRleCA8IDApIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfQXJyYXkqIHBBcnJheSA9IG1fcEZvcm1EaWN0LT5HZXRBcnJheSgiQ08iKTsNCi0gICAgaWYgKHBBcnJheSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDUERGX09iamVjdCogcEVsZW1lbnQgPSBwQXJyYXktPkdldEVsZW1lbnRWYWx1ZShpbmRleCk7DQotICAgIGlmIChwRWxlbWVudCAhPSBOVUxMICYmIHBFbGVtZW50LT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpIHsNCi0gICAgICAgIHJldHVybiBHZXRGaWVsZEJ5RGljdCgoQ1BERl9EaWN0aW9uYXJ5KilwRWxlbWVudCk7DQotICAgIH0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLWludCBDUERGX0ludGVyRm9ybTo6RmluZEZpZWxkSW5DYWxjdWxhdGlvbk9yZGVyKGNvbnN0IENQREZfRm9ybUZpZWxkKiBwRmllbGQpDQotew0KLSAgICBpZiAobV9wRm9ybURpY3QgPT0gTlVMTCB8fCBwRmllbGQgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIENQREZfQXJyYXkqIHBBcnJheSA9IG1fcEZvcm1EaWN0LT5HZXRBcnJheSgiQ08iKTsNCi0gICAgaWYgKHBBcnJheSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHBBcnJheS0+R2V0Q291bnQoKTsgaSArKykgew0KLSAgICAgICAgQ1BERl9PYmplY3QqIHBFbGVtZW50ID0gcEFycmF5LT5HZXRFbGVtZW50VmFsdWUoaSk7DQotICAgICAgICBpZiAocEVsZW1lbnQgPT0gcEZpZWxkLT5tX3BEaWN0KSB7DQotICAgICAgICAgICAgcmV0dXJuIGk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIC0xOw0KLX0NCi1GWF9EV09SRCBDUERGX0ludGVyRm9ybTo6Q291bnRGb3JtRm9udHMoKQ0KLXsNCi0gICAgcmV0dXJuIENvdW50SW50ZXJGb3JtRm9udHMobV9wRm9ybURpY3QpOw0KLX0NCi1DUERGX0ZvbnQqIENQREZfSW50ZXJGb3JtOjpHZXRGb3JtRm9udChGWF9EV09SRCBpbmRleCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZykNCi17DQotICAgIHJldHVybiBHZXRJbnRlckZvcm1Gb250KG1fcEZvcm1EaWN0LCBtX3BEb2N1bWVudCwgaW5kZXgsIGNzTmFtZVRhZyk7DQotfQ0KLUNQREZfRm9udCogQ1BERl9JbnRlckZvcm06OkdldEZvcm1Gb250KENGWF9CeXRlU3RyaW5nIGNzTmFtZVRhZykNCi17DQotICAgIHJldHVybiBHZXRJbnRlckZvcm1Gb250KG1fcEZvcm1EaWN0LCBtX3BEb2N1bWVudCwgY3NOYW1lVGFnKTsNCi19DQotQ1BERl9Gb250KiBDUERGX0ludGVyRm9ybTo6R2V0Rm9ybUZvbnQoQ0ZYX0J5dGVTdHJpbmcgY3NGb250TmFtZSwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZykNCi17DQotICAgIHJldHVybiBHZXRJbnRlckZvcm1Gb250KG1fcEZvcm1EaWN0LCBtX3BEb2N1bWVudCwgY3NGb250TmFtZSwgY3NOYW1lVGFnKTsNCi19DQotQ1BERl9Gb250KiBDUERGX0ludGVyRm9ybTo6R2V0TmF0aXZlRm9ybUZvbnQoRlhfQllURSBjaGFyU2V0LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKQ0KLXsNCi0gICAgcmV0dXJuIEdldE5hdGl2ZUludGVyRm9ybUZvbnQobV9wRm9ybURpY3QsIG1fcERvY3VtZW50LCBjaGFyU2V0LCBjc05hbWVUYWcpOw0KLX0NCi1DUERGX0ZvbnQqIENQREZfSW50ZXJGb3JtOjpHZXROYXRpdmVGb3JtRm9udChDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKQ0KLXsNCi0gICAgcmV0dXJuIEdldE5hdGl2ZUludGVyRm9ybUZvbnQobV9wRm9ybURpY3QsIG1fcERvY3VtZW50LCBjc05hbWVUYWcpOw0KLX0NCi1GWF9CT09MIENQREZfSW50ZXJGb3JtOjpGaW5kRm9ybUZvbnQoY29uc3QgQ1BERl9Gb250KiBwRm9udCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZykNCi17DQotICAgIHJldHVybiBGaW5kSW50ZXJGb3JtRm9udChtX3BGb3JtRGljdCwgcEZvbnQsIGNzTmFtZVRhZyk7DQotfQ0KLUZYX0JPT0wgQ1BERl9JbnRlckZvcm06OkZpbmRGb3JtRm9udChDRlhfQnl0ZVN0cmluZyBjc0ZvbnROYW1lLCBDUERGX0ZvbnQqJiBwRm9udCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZykNCi17DQotICAgIHJldHVybiBGaW5kSW50ZXJGb3JtRm9udChtX3BGb3JtRGljdCwgbV9wRG9jdW1lbnQsIGNzRm9udE5hbWUsIHBGb250LCBjc05hbWVUYWcpOw0KLX0NCi12b2lkIENQREZfSW50ZXJGb3JtOjpBZGRGb3JtRm9udChjb25zdCBDUERGX0ZvbnQqIHBGb250LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKQ0KLXsNCi0gICAgQWRkSW50ZXJGb3JtRm9udChtX3BGb3JtRGljdCwgbV9wRG9jdW1lbnQsIHBGb250LCBjc05hbWVUYWcpOw0KLSAgICBtX2JVcGRhdGVkID0gVFJVRTsNCi19DQotQ1BERl9Gb250KiBDUERGX0ludGVyRm9ybTo6QWRkTmF0aXZlRm9ybUZvbnQoRlhfQllURSBjaGFyU2V0LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKQ0KLXsNCi0gICAgbV9iVXBkYXRlZCA9IFRSVUU7DQotICAgIHJldHVybiBBZGROYXRpdmVJbnRlckZvcm1Gb250KG1fcEZvcm1EaWN0LCBtX3BEb2N1bWVudCwgY2hhclNldCwgY3NOYW1lVGFnKTsNCi19DQotQ1BERl9Gb250KiBDUERGX0ludGVyRm9ybTo6QWRkTmF0aXZlRm9ybUZvbnQoQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZykNCi17DQotICAgIG1fYlVwZGF0ZWQgPSBUUlVFOw0KLSAgICByZXR1cm4gQWRkTmF0aXZlSW50ZXJGb3JtRm9udChtX3BGb3JtRGljdCwgbV9wRG9jdW1lbnQsIGNzTmFtZVRhZyk7DQotfQ0KLXZvaWQgQ1BERl9JbnRlckZvcm06OlJlbW92ZUZvcm1Gb250KGNvbnN0IENQREZfRm9udCogcEZvbnQpDQotew0KLSAgICBtX2JVcGRhdGVkID0gVFJVRTsNCi0gICAgUmVtb3ZlSW50ZXJGb3JtRm9udChtX3BGb3JtRGljdCwgcEZvbnQpOw0KLX0NCi12b2lkIENQREZfSW50ZXJGb3JtOjpSZW1vdmVGb3JtRm9udChDRlhfQnl0ZVN0cmluZyBjc05hbWVUYWcpDQotew0KLSAgICBtX2JVcGRhdGVkID0gVFJVRTsNCi0gICAgUmVtb3ZlSW50ZXJGb3JtRm9udChtX3BGb3JtRGljdCwgY3NOYW1lVGFnKTsNCi19DQotQ1BERl9EZWZhdWx0QXBwZWFyYW5jZSBDUERGX0ludGVyRm9ybTo6R2V0RGVmYXVsdEFwcGVhcmFuY2UoKQ0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgY3NEQTsNCi0gICAgaWYgKG1fcEZvcm1EaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBjc0RBOw0KLSAgICB9DQotICAgIGNzREEgPSBtX3BGb3JtRGljdC0+R2V0U3RyaW5nKCJEQSIpOw0KLSAgICByZXR1cm4gY3NEQTsNCi19DQotQ1BERl9Gb250KiBDUERGX0ludGVyRm9ybTo6R2V0RGVmYXVsdEZvcm1Gb250KCkNCi17DQotICAgIHJldHVybiBHZXREZWZhdWx0SW50ZXJGb3JtRm9udChtX3BGb3JtRGljdCwgbV9wRG9jdW1lbnQpOw0KLX0NCi1pbnQgQ1BERl9JbnRlckZvcm06OkdldEZvcm1BbGlnbm1lbnQoKQ0KLXsNCi0gICAgaWYgKG1fcEZvcm1EaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIHJldHVybiBtX3BGb3JtRGljdC0+R2V0SW50ZWdlcigiUSIsIDApOw0KLX0NCi1GWF9CT09MIENQREZfSW50ZXJGb3JtOjpSZXNldEZvcm0oY29uc3QgQ0ZYX1B0ckFycmF5JiBmaWVsZHMsIEZYX0JPT0wgYkluY2x1ZGVPckV4Y2x1ZGUsIEZYX0JPT0wgYk5vdGlmeSkNCi17DQotICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgew0KLSAgICAgICAgaW50IGlSZXQgPSBtX3BGb3JtTm90aWZ5LT5CZWZvcmVGb3JtUmVzZXQodGhpcyk7DQotICAgICAgICBpZiAoaVJldCA8IDApIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaW50IG5Db3VudCA9IG1fcEZpZWxkVHJlZS0+bV9Sb290LkNvdW50RmllbGRzKCk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkNvdW50OyBpKyspIHsNCi0gICAgICAgIENQREZfRm9ybUZpZWxkKiBwRmllbGQgPSBtX3BGaWVsZFRyZWUtPm1fUm9vdC5HZXRGaWVsZChpKTsNCi0gICAgICAgIGlmIChwRmllbGQgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfQk9PTCBiRmluZCA9IEZBTFNFOw0KLSAgICAgICAgaW50IGlDb3VudCA9IGZpZWxkcy5HZXRTaXplKCk7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlDb3VudDsgaSArKykgew0KLSAgICAgICAgICAgIGlmIChwRmllbGQgPT0gKENQREZfRm9ybUZpZWxkKilmaWVsZHNbaV0pIHsNCi0gICAgICAgICAgICAgICAgYkZpbmQgPSBUUlVFOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAoKGJJbmNsdWRlT3JFeGNsdWRlICYmIGJGaW5kKSB8fCAoIWJJbmNsdWRlT3JFeGNsdWRlICYmICFiRmluZCkpIHsNCi0gICAgICAgICAgICBwRmllbGQtPlJlc2V0RmllbGQoYk5vdGlmeSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7DQotICAgICAgICBtX3BGb3JtTm90aWZ5LT5BZnRlckZvcm1SZXNldCh0aGlzKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDUERGX0ludGVyRm9ybTo6UmVzZXRGb3JtKEZYX0JPT0wgYk5vdGlmeSkNCi17DQotICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgew0KLSAgICAgICAgaW50IGlSZXQgPSBtX3BGb3JtTm90aWZ5LT5CZWZvcmVGb3JtUmVzZXQodGhpcyk7DQotICAgICAgICBpZiAoaVJldCA8IDApIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaW50IG5Db3VudCA9IG1fcEZpZWxkVHJlZS0+bV9Sb290LkNvdW50RmllbGRzKCk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkNvdW50OyBpKyspIHsNCi0gICAgICAgIENQREZfRm9ybUZpZWxkKiBwRmllbGQgPSBtX3BGaWVsZFRyZWUtPm1fUm9vdC5HZXRGaWVsZChpKTsNCi0gICAgICAgIGlmIChwRmllbGQgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcEZpZWxkLT5SZXNldEZpZWxkKGJOb3RpZnkpOw0KLSAgICB9DQotICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgew0KLSAgICAgICAgbV9wRm9ybU5vdGlmeS0+QWZ0ZXJGb3JtUmVzZXQodGhpcyk7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ1BERl9JbnRlckZvcm06OlJlbG9hZEZvcm0oKQ0KLXsNCi0gICAgRlhfUE9TSVRJT04gcG9zID0gbV9Db250cm9sTWFwLkdldFN0YXJ0UG9zaXRpb24oKTsNCi0gICAgd2hpbGUgKHBvcykgew0KLSAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwV2lkZ2V0RGljdDsNCi0gICAgICAgIENQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sOw0KLSAgICAgICAgbV9Db250cm9sTWFwLkdldE5leHRBc3NvYyhwb3MsIChGWF9MUFZPSUQmKXBXaWRnZXREaWN0LCAoRlhfTFBWT0lEJilwQ29udHJvbCk7DQotICAgICAgICBkZWxldGUgcENvbnRyb2w7DQotICAgIH0NCi0gICAgbV9Db250cm9sTWFwLlJlbW92ZUFsbCgpOw0KLSAgICBpbnQgbkNvdW50ID0gbV9wRmllbGRUcmVlLT5tX1Jvb3QuQ291bnRGaWVsZHMoKTsNCi0gICAgZm9yIChpbnQgayA9IDA7IGsgPCBuQ291bnQ7IGsgKyspIHsNCi0gICAgICAgIENQREZfRm9ybUZpZWxkKiBwRmllbGQgPSBtX3BGaWVsZFRyZWUtPm1fUm9vdC5HZXRGaWVsZChrKTsNCi0gICAgICAgIGRlbGV0ZSBwRmllbGQ7DQotICAgIH0NCi0gICAgbV9wRmllbGRUcmVlLT5SZW1vdmVBbGwoKTsNCi0gICAgaWYgKG1fcEZvcm1EaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDUERGX0FycmF5KiBwRmllbGRzID0gbV9wRm9ybURpY3QtPkdldEFycmF5KCJGaWVsZHMiKTsNCi0gICAgaWYgKHBGaWVsZHMgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGludCBpQ291bnQgPSBwRmllbGRzLT5HZXRDb3VudCgpOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGlDb3VudDsgaSArKykgew0KLSAgICAgICAgTG9hZEZpZWxkKHBGaWVsZHMtPkdldERpY3QoaSkpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9JbnRlckZvcm06OkxvYWRGaWVsZChDUERGX0RpY3Rpb25hcnkqIHBGaWVsZERpY3QsIGludCBuTGV2ZWwpDQotew0KLSAgICBpZiAobkxldmVsID4gbk1heFJlY3Vyc2lvbikgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChwRmllbGREaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9EV09SRCBkd1BhcmVudE9iak51bSA9IHBGaWVsZERpY3QtPkdldE9iak51bSgpOw0KLSAgICBDUERGX0FycmF5KiBwS2lkcyA9IHBGaWVsZERpY3QtPkdldEFycmF5KCJLaWRzIik7DQotICAgIGlmICghcEtpZHMpIHsNCi0gICAgICAgIEFkZFRlcm1pbmFsRmllbGQocEZpZWxkRGljdCk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRmlyc3RLaWQgPSBwS2lkcy0+R2V0RGljdCgwKTsNCi0gICAgaWYgKHBGaXJzdEtpZCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKHBGaXJzdEtpZC0+S2V5RXhpc3QoIlQiKSB8fCBwRmlyc3RLaWQtPktleUV4aXN0KCJLaWRzIikpIHsNCi0gICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwS2lkcy0+R2V0Q291bnQoKTsgaSArKykgew0KLSAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSAqIHBDaGlsZERpY3QgPSBwS2lkcy0+R2V0RGljdChpKTsNCi0gICAgICAgICAgICBpZiAocENoaWxkRGljdCkgew0KLSAgICAgICAgICAgICAgICBpZiAocENoaWxkRGljdC0+R2V0T2JqTnVtKCkgIT0gZHdQYXJlbnRPYmpOdW0pIHsNCi0gICAgICAgICAgICAgICAgICAgIExvYWRGaWVsZChwQ2hpbGREaWN0LCBuTGV2ZWwgKyAxKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEFkZFRlcm1pbmFsRmllbGQocEZpZWxkRGljdCk7DQotICAgIH0NCi19DQotRlhfQk9PTCBDUERGX0ludGVyRm9ybTo6SGFzWEZBRm9ybSgpIGNvbnN0DQotew0KLSAgICByZXR1cm4gbV9wRm9ybURpY3QgJiYgbV9wRm9ybURpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJYRkEiKSkgIT0gTlVMTDsNCi19DQotdm9pZCBDUERGX0ludGVyRm9ybTo6Rml4UGFnZUZpZWxkcyhjb25zdCBDUERGX1BhZ2UqIHBQYWdlKQ0KLXsNCi0gICAgQVNTRVJUKHBQYWdlICE9IE5VTEwpOw0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBQYWdlRGljdCA9IHBQYWdlLT5tX3BGb3JtRGljdDsNCi0gICAgaWYgKHBQYWdlRGljdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9BcnJheSogcEFubm90cyA9IHBQYWdlRGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIkFubm90cyIpKTsNCi0gICAgaWYgKHBBbm5vdHMgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGludCBpQW5ub3RDb3VudCA9IHBBbm5vdHMtPkdldENvdW50KCk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaUFubm90Q291bnQ7IGkrKykgew0KLSAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwQW5ub3QgPSBwQW5ub3RzLT5HZXREaWN0KGkpOw0KLSAgICAgICAgaWYgKHBBbm5vdCAhPSBOVUxMICYmIHBBbm5vdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJTdWJ0eXBlIikpID09ICJXaWRnZXQiKSB7DQotICAgICAgICAgICAgTG9hZEZpZWxkKHBBbm5vdCk7DQotICAgICAgICB9DQotICAgIH0NCi19DQotQ1BERl9Gb3JtRmllbGQqIENQREZfSW50ZXJGb3JtOjpBZGRUZXJtaW5hbEZpZWxkKGNvbnN0IENQREZfRGljdGlvbmFyeSogcEZpZWxkRGljdCkNCi17DQotICAgIGlmICghcEZpZWxkRGljdC0+S2V5RXhpc3QoRlhfQlNUUkMoIlQiKSkpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KilwRmllbGREaWN0Ow0KLSAgICBDRlhfV2lkZVN0cmluZyBjc1dOYW1lID0gR2V0RnVsbE5hbWUocERpY3QpOw0KLSAgICBpZiAoY3NXTmFtZS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfRm9ybUZpZWxkKiBwRmllbGQgPSBOVUxMOw0KLSAgICBwRmllbGQgPSBtX3BGaWVsZFRyZWUtPkdldEZpZWxkKGNzV05hbWUpOw0KLSAgICBpZiAocEZpZWxkID09IE5VTEwpIHsNCi0gICAgICAgIENQREZfRGljdGlvbmFyeSAqcFBhcmVudCA9IChDUERGX0RpY3Rpb25hcnkqKXBGaWVsZERpY3Q7DQotICAgICAgICBpZiAoIXBGaWVsZERpY3QtPktleUV4aXN0KEZYX0JTVFIoIlQiKSkgJiYNCi0gICAgICAgICAgICAgICAgcEZpZWxkRGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJTdWJ0eXBlIikpID09IEZYX0JTVFJDKCJXaWRnZXQiKSkgew0KLSAgICAgICAgICAgIHBQYXJlbnQgPSBwRmllbGREaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJQYXJlbnQiKSk7DQotICAgICAgICAgICAgaWYgKCFwUGFyZW50KSB7DQotICAgICAgICAgICAgICAgIHBQYXJlbnQgPSAoQ1BERl9EaWN0aW9uYXJ5KilwRmllbGREaWN0Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwUGFyZW50ICYmIHBQYXJlbnQgIT0gcEZpZWxkRGljdCAmJiAhcFBhcmVudC0+S2V5RXhpc3QoRlhfQlNUUkMoIkZUIikpKSB7DQotICAgICAgICAgICAgaWYgKHBGaWVsZERpY3QtPktleUV4aXN0KEZYX0JTVFJDKCJGVCIpKSkgew0KLSAgICAgICAgICAgICAgICBDUERGX09iamVjdCAqcEZUVmFsdWUgPSBwRmllbGREaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkZUIikpOw0KLSAgICAgICAgICAgICAgICBpZiAocEZUVmFsdWUpIHsNCi0gICAgICAgICAgICAgICAgICAgIHBQYXJlbnQtPlNldEF0KEZYX0JTVFJDKCJGVCIpLCBwRlRWYWx1ZS0+Q2xvbmUoKSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKHBGaWVsZERpY3QtPktleUV4aXN0KEZYX0JTVFJDKCJGZiIpKSkgew0KLSAgICAgICAgICAgICAgICBDUERGX09iamVjdCAqcEZmVmFsdWUgPSBwRmllbGREaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkZmIikpOw0KLSAgICAgICAgICAgICAgICBpZiAocEZmVmFsdWUpIHsNCi0gICAgICAgICAgICAgICAgICAgIHBQYXJlbnQtPlNldEF0KEZYX0JTVFJDKCJGZiIpLCBwRmZWYWx1ZS0+Q2xvbmUoKSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBwRmllbGQgPSBGWF9ORVcgQ1BERl9Gb3JtRmllbGQodGhpcywgcFBhcmVudCk7DQotICAgICAgICBDUERGX09iamVjdCogcFRPYmogPSBwRGljdC0+R2V0RWxlbWVudCgiVCIpOw0KLSAgICAgICAgaWYgKHBUT2JqICYmIHBUT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX1JFRkVSRU5DRSkgew0KLSAgICAgICAgICAgIENQREZfT2JqZWN0KiBwQ2xvbmUgPSBwVE9iai0+Q2xvbmUoVFJVRSk7DQotICAgICAgICAgICAgaWYgKHBDbG9uZSkgew0KLSAgICAgICAgICAgICAgICBwRGljdC0+U2V0QXQoIlQiLCBwQ2xvbmUpOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHBEaWN0LT5TZXRBdE5hbWUoIlQiLCAiIik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wRmllbGRUcmVlLT5TZXRGaWVsZChjc1dOYW1lLCBwRmllbGQpOw0KLSAgICB9DQotICAgIENQREZfQXJyYXkqIHBLaWRzID0gcEZpZWxkRGljdC0+R2V0QXJyYXkoIktpZHMiKTsNCi0gICAgaWYgKHBLaWRzID09IE5VTEwpIHsNCi0gICAgICAgIGlmIChwRmllbGREaWN0LT5HZXRTdHJpbmcoIlN1YnR5cGUiKSA9PSAiV2lkZ2V0Iikgew0KLSAgICAgICAgICAgIEFkZENvbnRyb2wocEZpZWxkLCBwRmllbGREaWN0KTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwS2lkcy0+R2V0Q291bnQoKTsgaSArKykgew0KLSAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcEtpZCA9IHBLaWRzLT5HZXREaWN0KGkpOw0KLSAgICAgICAgICAgIGlmIChwS2lkID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChwS2lkLT5HZXRTdHJpbmcoIlN1YnR5cGUiKSAhPSAiV2lkZ2V0Iikgew0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgQWRkQ29udHJvbChwRmllbGQsIHBLaWQpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBwRmllbGQ7DQotfQ0KLUNQREZfRm9ybUNvbnRyb2wqIENQREZfSW50ZXJGb3JtOjpBZGRDb250cm9sKGNvbnN0IENQREZfRm9ybUZpZWxkKiBwRmllbGQsIGNvbnN0IENQREZfRGljdGlvbmFyeSogcFdpZGdldERpY3QpDQotew0KLSAgICB2b2lkICpyVmFsdWUgPSBOVUxMOw0KLSAgICBpZiAobV9Db250cm9sTWFwLkxvb2t1cCgoQ1BERl9EaWN0aW9uYXJ5KilwV2lkZ2V0RGljdCwgclZhbHVlKSkgew0KLSAgICAgICAgcmV0dXJuIChDUERGX0Zvcm1Db250cm9sKilyVmFsdWU7DQotICAgIH0NCi0gICAgQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2wgPSBGWF9ORVcgQ1BERl9Gb3JtQ29udHJvbCgoQ1BERl9Gb3JtRmllbGQqKXBGaWVsZCwgKENQREZfRGljdGlvbmFyeSopcFdpZGdldERpY3QpOw0KLSAgICBpZiAocENvbnRyb2wgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgbV9Db250cm9sTWFwLlNldEF0KChDUERGX0RpY3Rpb25hcnkqKXBXaWRnZXREaWN0LCBwQ29udHJvbCk7DQotICAgICgoQ1BERl9Gb3JtRmllbGQqKXBGaWVsZCktPm1fQ29udHJvbExpc3QuQWRkKHBDb250cm9sKTsNCi0gICAgcmV0dXJuIHBDb250cm9sOw0KLX0NCi1DUERGX0Zvcm1GaWVsZCogQ1BERl9JbnRlckZvcm06OkNoZWNrUmVxdWlyZWRGaWVsZHMoY29uc3QgQ0ZYX1B0ckFycmF5ICpmaWVsZHMsIEZYX0JPT0wgYkluY2x1ZGVPckV4Y2x1ZGUpIGNvbnN0DQotew0KLSAgICBpbnQgbkNvdW50ID0gbV9wRmllbGRUcmVlLT5tX1Jvb3QuQ291bnRGaWVsZHMoKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuQ291bnQ7IGkrKykgew0KLSAgICAgICAgQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCA9IG1fcEZpZWxkVHJlZS0+bV9Sb290LkdldEZpZWxkKGkpOw0KLSAgICAgICAgaWYgKHBGaWVsZCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBGWF9JTlQzMiBpVHlwZSA9IHBGaWVsZC0+R2V0VHlwZSgpOw0KLSAgICAgICAgaWYgKGlUeXBlID09IENQREZfRm9ybUZpZWxkOjpQdXNoQnV0dG9uIHx8IGlUeXBlID09IENQREZfRm9ybUZpZWxkOjpDaGVja0JveCB8fCBpVHlwZSA9PSBDUERGX0Zvcm1GaWVsZDo6TGlzdEJveCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfRFdPUkQgZHdGbGFncyA9IHBGaWVsZC0+R2V0RmllbGRGbGFncygpOw0KLSAgICAgICAgaWYgKGR3RmxhZ3MgJiAweDA0KSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBGWF9CT09MIGJGaW5kID0gVFJVRTsNCi0gICAgICAgIGlmIChmaWVsZHMgIT0gTlVMTCkgew0KLSAgICAgICAgICAgIGJGaW5kID0gZmllbGRzLT5GaW5kKHBGaWVsZCwgMCkgPj0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICgoYkluY2x1ZGVPckV4Y2x1ZGUgJiYgYkZpbmQpIHx8ICghYkluY2x1ZGVPckV4Y2x1ZGUgJiYgIWJGaW5kKSkgew0KLSAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSAqcEZpZWxkRGljdCA9IHBGaWVsZC0+bV9wRGljdDsNCi0gICAgICAgICAgICBpZiAoKGR3RmxhZ3MgJiAweDAyKSAhPSAwICYmIHBGaWVsZERpY3QtPkdldFN0cmluZygiViIpLklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gcEZpZWxkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotQ0ZERl9Eb2N1bWVudCogQ1BERl9JbnRlckZvcm06OkV4cG9ydFRvRkRGKEZYX1dTVFIgcGRmX3BhdGgsIEZYX0JPT0wgYlNpbXBsZUZpbGVTcGVjKSBjb25zdA0KLXsNCi0gICAgQ0ZYX1B0ckFycmF5IGZpZWxkczsNCi0gICAgaW50IG5Db3VudCA9IG1fcEZpZWxkVHJlZS0+bV9Sb290LkNvdW50RmllbGRzKCk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkNvdW50OyBpICsrKSB7DQotICAgICAgICBDUERGX0Zvcm1GaWVsZCogcEZpZWxkID0gbV9wRmllbGRUcmVlLT5tX1Jvb3QuR2V0RmllbGQoaSk7DQotICAgICAgICBmaWVsZHMuQWRkKHBGaWVsZCk7DQotICAgIH0NCi0gICAgcmV0dXJuIEV4cG9ydFRvRkRGKHBkZl9wYXRoLCBmaWVsZHMsIFRSVUUsIGJTaW1wbGVGaWxlU3BlYyk7DQotfQ0KLUNGWF9XaWRlU3RyaW5nIEZJTEVTUEVDX0VuY29kZUZpbGVOYW1lKEZYX1dTVFIgZmlsZXBhdGgpOw0KLUNGREZfRG9jdW1lbnQqIENQREZfSW50ZXJGb3JtOjpFeHBvcnRUb0ZERihGWF9XU1RSIHBkZl9wYXRoLCBDRlhfUHRyQXJyYXkmIGZpZWxkcywgRlhfQk9PTCBiSW5jbHVkZU9yRXhjbHVkZSwgRlhfQk9PTCBiU2ltcGxlRmlsZVNwZWMpIGNvbnN0DQotew0KLSAgICBDRkRGX0RvY3VtZW50KiBwRG9jID0gQ0ZERl9Eb2N1bWVudDo6Q3JlYXRlTmV3RG9jKCk7DQotICAgIGlmIChwRG9jID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcE1haW5EaWN0ID0gcERvYy0+R2V0Um9vdCgpLT5HZXREaWN0KCJGREYiKTsNCi0gICAgaWYgKCFwZGZfcGF0aC5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIGlmIChiU2ltcGxlRmlsZVNwZWMpIHsNCi0gICAgICAgICAgICBDRlhfV2lkZVN0cmluZyB3c0ZpbGVQYXRoID0gRklMRVNQRUNfRW5jb2RlRmlsZU5hbWUocGRmX3BhdGgpOw0KLSAgICAgICAgICAgIHBNYWluRGljdC0+U2V0QXRTdHJpbmcoRlhfQlNUUkMoIkYiKSwgQ0ZYX0J5dGVTdHJpbmc6OkZyb21Vbmljb2RlKHdzRmlsZVBhdGgpKTsNCi0gICAgICAgICAgICBwTWFpbkRpY3QtPlNldEF0U3RyaW5nKEZYX0JTVFJDKCJVRiIpLCBQREZfRW5jb2RlVGV4dCh3c0ZpbGVQYXRoKSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIENQREZfRmlsZVNwZWMgZmlsZXNwZWM7DQotICAgICAgICAgICAgZmlsZXNwZWMuU2V0RmlsZU5hbWUocGRmX3BhdGgpOw0KLSAgICAgICAgICAgIHBNYWluRGljdC0+U2V0QXQoIkYiLCAoQ1BERl9PYmplY3QqKWZpbGVzcGVjKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDUERGX0FycmF5KiBwRmllbGRzID0gQ1BERl9BcnJheTo6Q3JlYXRlKCk7DQotICAgIGlmIChwRmllbGRzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHBNYWluRGljdC0+U2V0QXQoIkZpZWxkcyIsIHBGaWVsZHMpOw0KLSAgICBpbnQgbkNvdW50ID0gbV9wRmllbGRUcmVlLT5tX1Jvb3QuQ291bnRGaWVsZHMoKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuQ291bnQ7IGkgKyspIHsNCi0gICAgICAgIENQREZfRm9ybUZpZWxkKiBwRmllbGQgPSBtX3BGaWVsZFRyZWUtPm1fUm9vdC5HZXRGaWVsZChpKTsNCi0gICAgICAgIGlmIChwRmllbGQgPT0gTlVMTCB8fCBwRmllbGQtPkdldFR5cGUoKSA9PSBDUERGX0Zvcm1GaWVsZDo6UHVzaEJ1dHRvbikgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfRFdPUkQgZHdGbGFncyA9IHBGaWVsZC0+R2V0RmllbGRGbGFncygpOw0KLSAgICAgICAgaWYgKGR3RmxhZ3MgJiAweDA0KSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBGWF9CT09MIGJGaW5kID0gZmllbGRzLkZpbmQocEZpZWxkLCAwKSA+PSAwOw0KLSAgICAgICAgaWYgKChiSW5jbHVkZU9yRXhjbHVkZSAmJiBiRmluZCkgfHwgKCFiSW5jbHVkZU9yRXhjbHVkZSAmJiAhYkZpbmQpKSB7DQotICAgICAgICAgICAgaWYgKChkd0ZsYWdzICYgMHgwMikgIT0gMCAmJiBwRmllbGQtPm1fcERpY3QtPkdldFN0cmluZygiViIpLklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgZnVsbG5hbWUgPSBHZXRGdWxsTmFtZShwRmllbGQtPkdldEZpZWxkRGljdCgpKTsNCi0gICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBGaWVsZERpY3QgPSBDUERGX0RpY3Rpb25hcnk6OkNyZWF0ZSgpOw0KLSAgICAgICAgICAgIGlmIChwRmllbGREaWN0ID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIENQREZfU3RyaW5nKiBwU3RyaW5nID0gQ1BERl9TdHJpbmc6OkNyZWF0ZShmdWxsbmFtZSk7DQotICAgICAgICAgICAgaWYgKHBTdHJpbmcgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICBwRmllbGREaWN0LT5SZWxlYXNlKCk7DQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwRmllbGREaWN0LT5TZXRBdCgiVCIsIHBTdHJpbmcpOw0KLSAgICAgICAgICAgIGlmIChwRmllbGQtPkdldFR5cGUoKSA9PSBDUERGX0Zvcm1GaWVsZDo6Q2hlY2tCb3ggfHwgcEZpZWxkLT5HZXRUeXBlKCkgPT0gQ1BERl9Gb3JtRmllbGQ6OlJhZGlvQnV0dG9uKSB7DQotICAgICAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIGNzRXhwb3J0ID0gcEZpZWxkLT5HZXRDaGVja1ZhbHVlKEZBTFNFKTsNCi0gICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3NCRXhwb3J0ID0gUERGX0VuY29kZVRleHQoY3NFeHBvcnQpOw0KLSAgICAgICAgICAgICAgICBDUERGX09iamVjdCogcE9wdCA9IEZQREZfR2V0RmllbGRBdHRyKHBGaWVsZC0+bV9wRGljdCwgIk9wdCIpOw0KLSAgICAgICAgICAgICAgICBpZiAocE9wdCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICBwRmllbGREaWN0LT5TZXRBdE5hbWUoIlYiLCBjc0JFeHBvcnQpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgcEZpZWxkRGljdC0+U2V0QXRTdHJpbmcoIlYiLCBjc0JFeHBvcnQpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBWID0gRlBERl9HZXRGaWVsZEF0dHIocEZpZWxkLT5tX3BEaWN0LCAiViIpOw0KLSAgICAgICAgICAgICAgICBpZiAocFYgIT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgcEZpZWxkRGljdC0+U2V0QXQoIlYiLCBwVi0+Q2xvbmUoVFJVRSkpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHBGaWVsZHMtPkFkZChwRmllbGREaWN0KTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gcERvYzsNCi19DQotY29uc3Qgc3RydWN0IF9TdXBwb3J0RmllbGRFbmNvZGluZyB7DQotICAgIEZYX0xQQ1NUUiBtX25hbWU7DQotICAgIEZYX0lOVDMyIG1fY29kZVBhZ2U7DQotfSBnX2ZpZWxkRW5jb2RpbmdbXSA9IHsNCi0gICAgIkJpZ0ZpdmUiLCA5NTAsDQotICAgICJHQksiLCA5MzYsDQotICAgICJTaGlmdC1KSVMiLCA5MzIsDQotICAgICJVSEMiLCA5NDksDQotfTsNCi1zdGF0aWMgdm9pZCBGUERGRE9DX0ZERl9HZXRGaWVsZFZhbHVlKENQREZfRGljdGlvbmFyeSAqcEZpZWxkRGljdCwgQ0ZYX1dpZGVTdHJpbmcgJmNzVmFsdWUsIENGWF9CeXRlU3RyaW5nICZic0VuY29kaW5nKQ0KLXsNCi0gICAgQVNTRVJUKHBGaWVsZERpY3QgIT0gTlVMTCk7DQotICAgIENGWF9CeXRlU3RyaW5nIGNzQlZhbHVlID0gcEZpZWxkRGljdC0+R2V0U3RyaW5nKCJWIik7DQotICAgIEZYX0lOVDMyIGlDb3VudCA9IHNpemVvZihnX2ZpZWxkRW5jb2RpbmcpIC8gc2l6ZW9mKGdfZmllbGRFbmNvZGluZ1swXSk7DQotICAgIEZYX0lOVDMyIGkgPSAwOw0KLSAgICBmb3IgKDsgaSA8IGlDb3VudDsgKytpKQ0KLSAgICAgICAgaWYgKGJzRW5jb2RpbmcgPT0gZ19maWVsZEVuY29kaW5nW2ldLm1fbmFtZSkgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICBpZiAoaSA8IGlDb3VudCkgew0KLSAgICAgICAgQ0ZYX0NoYXJNYXAgKnBDaGFyTWFwID0gQ0ZYX0NoYXJNYXA6OkdldERlZmF1bHRNYXBwZXIoZ19maWVsZEVuY29kaW5nW2ldLm1fY29kZVBhZ2UpOw0KLSAgICAgICAgRlhTWVNfYXNzZXJ0KHBDaGFyTWFwICE9IE5VTEwpOw0KLSAgICAgICAgY3NWYWx1ZS5Db252ZXJ0RnJvbShjc0JWYWx1ZSwgcENoYXJNYXApOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIGNzVGVtcCA9IGNzQlZhbHVlLkxlZnQoMik7DQotICAgIGlmIChjc1RlbXAgPT0gIlx4RkZceEZFIiB8fCBjc1RlbXAgPT0gIlx4RkVceEZGIikgew0KLSAgICAgICAgY3NWYWx1ZSA9IFBERl9EZWNvZGVUZXh0KGNzQlZhbHVlKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGNzVmFsdWUgPSBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKGNzQlZhbHVlKTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfSW50ZXJGb3JtOjpGREZfSW1wb3J0RmllbGQoQ1BERl9EaWN0aW9uYXJ5KiBwRmllbGREaWN0LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgcGFyZW50X25hbWUsIEZYX0JPT0wgYk5vdGlmeSwgaW50IG5MZXZlbCkNCi17DQotICAgIENGWF9XaWRlU3RyaW5nIG5hbWU7DQotICAgIGlmICghcGFyZW50X25hbWUuSXNFbXB0eSgpKSB7DQotICAgICAgICBuYW1lID0gcGFyZW50X25hbWUgKyBMIi4iOw0KLSAgICB9DQotICAgIG5hbWUgKz0gcEZpZWxkRGljdC0+R2V0VW5pY29kZVRleHQoIlQiKTsNCi0gICAgQ1BERl9BcnJheSogcEtpZHMgPSBwRmllbGREaWN0LT5HZXRBcnJheSgiS2lkcyIpOw0KLSAgICBpZiAocEtpZHMpIHsNCi0gICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwS2lkcy0+R2V0Q291bnQoKTsgaSArKykgew0KLSAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcEtpZCA9IHBLaWRzLT5HZXREaWN0KGkpOw0KLSAgICAgICAgICAgIGlmIChwS2lkID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChuTGV2ZWwgPD0gbk1heFJlY3Vyc2lvbikgew0KLSAgICAgICAgICAgICAgICBGREZfSW1wb3J0RmllbGQocEtpZCwgbmFtZSwgYk5vdGlmeSwgbkxldmVsICsgMSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmICghcEZpZWxkRGljdC0+S2V5RXhpc3QoIlYiKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfRm9ybUZpZWxkKiBwRmllbGQgPSBtX3BGaWVsZFRyZWUtPkdldEZpZWxkKG5hbWUpOw0KLSAgICBpZiAocEZpZWxkID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDRlhfV2lkZVN0cmluZyBjc1dWYWx1ZTsNCi0gICAgRlBERkRPQ19GREZfR2V0RmllbGRWYWx1ZShwRmllbGREaWN0LCBjc1dWYWx1ZSwgbV9ic0VuY29kaW5nKTsNCi0gICAgaW50IGlUeXBlID0gcEZpZWxkLT5HZXRGaWVsZFR5cGUoKTsNCi0gICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7DQotICAgICAgICBpbnQgaVJldCA9IDA7DQotICAgICAgICBpZiAoaVR5cGUgPT0gRklFTERUWVBFX0xJU1RCT1gpIHsNCi0gICAgICAgICAgICBpUmV0ID0gbV9wRm9ybU5vdGlmeS0+QmVmb3JlU2VsZWN0aW9uQ2hhbmdlKHBGaWVsZCwgY3NXVmFsdWUpOw0KLSAgICAgICAgfSBlbHNlIGlmIChpVHlwZSA9PSBGSUVMRFRZUEVfQ09NQk9CT1ggfHwgaVR5cGUgPT0gRklFTERUWVBFX1RFWFRGSUVMRCkgew0KLSAgICAgICAgICAgIGlSZXQgPSBtX3BGb3JtTm90aWZ5LT5CZWZvcmVWYWx1ZUNoYW5nZShwRmllbGQsIGNzV1ZhbHVlKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChpUmV0IDwgMCkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDRlhfQnl0ZUFycmF5IHN0YXR1c0FycmF5Ow0KLSAgICBpZiAoaVR5cGUgPT0gRklFTERUWVBFX0NIRUNLQk9YIHx8IGlUeXBlID09IEZJRUxEVFlQRV9SQURJT0JVVFRPTikgew0KLSAgICAgICAgU2F2ZUNoZWNrZWRGaWVsZFN0YXR1cyhwRmllbGQsIHN0YXR1c0FycmF5KTsNCi0gICAgfQ0KLSAgICBwRmllbGQtPlNldFZhbHVlKGNzV1ZhbHVlKTsNCi0gICAgQ1BERl9Gb3JtRmllbGQ6OlR5cGUgZVR5cGUgPSBwRmllbGQtPkdldFR5cGUoKTsNCi0gICAgaWYgKChlVHlwZSA9PSBDUERGX0Zvcm1GaWVsZDo6TGlzdEJveCB8fCBlVHlwZSA9PSBDUERGX0Zvcm1GaWVsZDo6Q29tYm9Cb3gpICYmIHBGaWVsZERpY3QtPktleUV4aXN0KCJPcHQiKSkgew0KLSAgICAgICAgcEZpZWxkLT5tX3BEaWN0LT5TZXRBdCgiT3B0IiwgcEZpZWxkRGljdC0+R2V0RWxlbWVudFZhbHVlKCJPcHQiKS0+Q2xvbmUoVFJVRSkpOw0KLSAgICB9DQotICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgew0KLSAgICAgICAgaWYgKGlUeXBlID09IEZJRUxEVFlQRV9DSEVDS0JPWCB8fCBpVHlwZSA9PSBGSUVMRFRZUEVfUkFESU9CVVRUT04pIHsNCi0gICAgICAgICAgICBtX3BGb3JtTm90aWZ5LT5BZnRlckNoZWNrZWRTdGF0dXNDaGFuZ2UocEZpZWxkLCBzdGF0dXNBcnJheSk7DQotICAgICAgICB9IGVsc2UgaWYgKGlUeXBlID09IEZJRUxEVFlQRV9MSVNUQk9YKSB7DQotICAgICAgICAgICAgbV9wRm9ybU5vdGlmeS0+QWZ0ZXJTZWxlY3Rpb25DaGFuZ2UocEZpZWxkKTsNCi0gICAgICAgIH0gZWxzZSBpZiAoaVR5cGUgPT0gRklFTERUWVBFX0NPTUJPQk9YIHx8IGlUeXBlID09IEZJRUxEVFlQRV9URVhURklFTEQpIHsNCi0gICAgICAgICAgICBtX3BGb3JtTm90aWZ5LT5BZnRlclZhbHVlQ2hhbmdlKHBGaWVsZCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKENQREZfSW50ZXJGb3JtOjptX2JVcGRhdGVBUCkgew0KLSAgICAgICAgcEZpZWxkLT5VcGRhdGVBUChOVUxMKTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENQREZfSW50ZXJGb3JtOjpJbXBvcnRGcm9tRkRGKGNvbnN0IENGREZfRG9jdW1lbnQqIHBGREYsIEZYX0JPT0wgYk5vdGlmeSkNCi17DQotICAgIGlmIChwRkRGID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBNYWluRGljdCA9IHBGREYtPkdldFJvb3QoKS0+R2V0RGljdCgiRkRGIik7DQotICAgIGlmIChwTWFpbkRpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIENQREZfQXJyYXkqIHBGaWVsZHMgPSBwTWFpbkRpY3QtPkdldEFycmF5KCJGaWVsZHMiKTsNCi0gICAgaWYgKHBGaWVsZHMgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fYnNFbmNvZGluZyA9IHBNYWluRGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJFbmNvZGluZyIpKTsNCi0gICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7DQotICAgICAgICBpbnQgaVJldCA9IG1fcEZvcm1Ob3RpZnktPkJlZm9yZUZvcm1JbXBvcnREYXRhKHRoaXMpOw0KLSAgICAgICAgaWYgKGlSZXQgPCAwKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwRmllbGRzLT5HZXRDb3VudCgpOyBpICsrKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBGaWVsZCA9IHBGaWVsZHMtPkdldERpY3QoaSk7DQotICAgICAgICBpZiAocEZpZWxkID09IE5VTEwpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZERl9JbXBvcnRGaWVsZChwRmllbGQsIEwiIiwgYk5vdGlmeSk7DQotICAgIH0NCi0gICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7DQotICAgICAgICBtX3BGb3JtTm90aWZ5LT5BZnRlckZvcm1JbXBvcnREYXRhKHRoaXMpOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi12b2lkIENQREZfSW50ZXJGb3JtOjpTZXRGb3JtTm90aWZ5KGNvbnN0IENQREZfRm9ybU5vdGlmeSogcE5vdGlmeSkNCi17DQotICAgIG1fcEZvcm1Ob3RpZnkgPSAoQ1BERl9Gb3JtTm90aWZ5KilwTm90aWZ5Ow0KLX0NCi1pbnQgQ1BERl9JbnRlckZvcm06OkdldFBhZ2VXaXRoV2lkZ2V0KGludCBpQ3VyUGFnZSwgRlhfQk9PTCBiTmV4dCkNCi17DQotICAgIGlmIChpQ3VyUGFnZSA8IDApIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBpbnQgaVBhZ2VDb3VudCA9IG1fcERvY3VtZW50LT5HZXRQYWdlQ291bnQoKTsNCi0gICAgaWYgKGlDdXJQYWdlID49IGlQYWdlQ291bnQpIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBpbnQgaU5ld1BhZ2UgPSBpQ3VyUGFnZTsNCi0gICAgZG8gew0KLSAgICAgICAgaU5ld1BhZ2UgKz0gYk5leHQgPyAxIDogLTE7DQotICAgICAgICBpZiAoaU5ld1BhZ2UgPj0gaVBhZ2VDb3VudCkgew0KLSAgICAgICAgICAgIGlOZXdQYWdlID0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChpTmV3UGFnZSA8IDApIHsNCi0gICAgICAgICAgICBpTmV3UGFnZSA9IGlQYWdlQ291bnQgLSAxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGlOZXdQYWdlID09IGlDdXJQYWdlKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBQYWdlRGljdCA9IG1fcERvY3VtZW50LT5HZXRQYWdlKGlOZXdQYWdlKTsNCi0gICAgICAgIGlmIChwUGFnZURpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1BERl9BcnJheSogcEFubm90cyA9IHBQYWdlRGljdC0+R2V0QXJyYXkoIkFubm90cyIpOw0KLSAgICAgICAgaWYgKHBBbm5vdHMgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfRFdPUkQgZHdDb3VudCA9IHBBbm5vdHMtPkdldENvdW50KCk7DQotICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgZHdDb3VudDsgaSArKykgew0KLSAgICAgICAgICAgIENQREZfT2JqZWN0KiBwQW5ub3REaWN0ID0gcEFubm90cy0+R2V0RWxlbWVudFZhbHVlKGkpOw0KLSAgICAgICAgICAgIGlmIChwQW5ub3REaWN0ID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIENQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sID0gTlVMTDsNCi0gICAgICAgICAgICBpZiAobV9Db250cm9sTWFwLkxvb2t1cChwQW5ub3REaWN0LCAodm9pZComKXBDb250cm9sKSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gaU5ld1BhZ2U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9IHdoaWxlIChUUlVFKTsNCi0gICAgcmV0dXJuIC0xOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mcGRmZG9jL2ZwZGZfZG9jLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGNydC9meF94bWwuaCIKK0NGWF9XaWRlU3RyaW5nCUdldEZ1bGxOYW1lKENQREZfRGljdGlvbmFyeSogcEZpZWxkRGljdCk7Cit2b2lkCQkJSW5pdEludGVyRm9ybURpY3QoQ1BERl9EaWN0aW9uYXJ5KiYgcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQpOworRlhfRFdPUkQJCUNvdW50SW50ZXJGb3JtRm9udHMoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QpOworQ1BERl9Gb250KgkJR2V0SW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBGWF9EV09SRCBpbmRleCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZyk7CitDUERGX0ZvbnQqCQlHZXRJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIENGWF9CeXRlU3RyaW5nIGNzTmFtZVRhZyk7CitDUERGX0ZvbnQqCQlHZXRJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIENGWF9CeXRlU3RyaW5nIGNzRm9udE5hbWUsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOworQ1BERl9Gb250KgkJR2V0TmF0aXZlSW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBGWF9CWVRFIGNoYXJTZXQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOworQ1BERl9Gb250KgkJR2V0TmF0aXZlSW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKTsKK0ZYX0JPT0wJCQlGaW5kSW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCwgY29uc3QgQ1BERl9Gb250KiBwRm9udCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZyk7CitGWF9CT09MCQkJRmluZEludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QsIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ0ZYX0J5dGVTdHJpbmcgY3NGb250TmFtZSwgQ1BERl9Gb250KiYgcEZvbnQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOwordm9pZAkJCUFkZEludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiYgcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENQREZfRm9udCogcEZvbnQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOworQ1BERl9Gb250KgkJQWRkTmF0aXZlSW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqJiBwRm9ybURpY3QsIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgRlhfQllURSBjaGFyU2V0LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKTsKK0NQREZfRm9udCoJCUFkZE5hdGl2ZUludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiYgcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOwordm9pZAkJCVJlbW92ZUludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QsIGNvbnN0IENQREZfRm9udCogcEZvbnQpOwordm9pZAkJCVJlbW92ZUludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QsIENGWF9CeXRlU3RyaW5nIGNzTmFtZVRhZyk7CitDUERGX0ZvbnQqCQlHZXREZWZhdWx0SW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50KTsKK3ZvaWQJCQlTZXREZWZhdWx0SW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqJiBwRm9ybURpY3QsIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ1BERl9Gb250KiBwRm9udCk7Cit2b2lkCQkJU2F2ZUNoZWNrZWRGaWVsZFN0YXR1cyhDUERGX0Zvcm1GaWVsZCogcEZpZWxkLCBDRlhfQnl0ZUFycmF5JiBzdGF0dXNBcnJheSk7CitGWF9CT09MCQkJTmVlZFBERkVuY29kZUZvckZpZWxkRnVsbE5hbWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIGNzRmllbGROYW1lKTsKK0ZYX0JPT0wJCQlOZWVkUERGRW5jb2RlRm9yRmllbGRUcmVlKENQREZfRGljdGlvbmFyeSogcEZpZWxkRGljdCwgaW50IG5MZXZlbCA9IDApOwordm9pZAkJCUVuY29kZUZpZWxkTmFtZShjb25zdCBDRlhfV2lkZVN0cmluZyYgY3NOYW1lLCBDRlhfQnl0ZVN0cmluZyYgY3NUKTsKK3ZvaWQJCQlVcGRhdGVFbmNvZGVGaWVsZE5hbWUoQ1BERl9EaWN0aW9uYXJ5KiBwRmllbGREaWN0LCBpbnQgbkxldmVsID0gMCk7Citjb25zdCBpbnQgbk1heFJlY3Vyc2lvbiA9IDMyOworY2xhc3MgX0NGaWVsZE5hbWVFeHRyYWN0b3IgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIF9DRmllbGROYW1lRXh0cmFjdG9yKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBmdWxsX25hbWUpCisgICAgeworICAgICAgICBtX3BTdGFydCA9IGZ1bGxfbmFtZTsKKyAgICAgICAgbV9wRW5kID0gbV9wU3RhcnQgKyBmdWxsX25hbWUuR2V0TGVuZ3RoKCk7CisgICAgICAgIG1fcEN1ciA9IG1fcFN0YXJ0OworICAgIH0KKyAgICB2b2lkIEdldE5leHQoRlhfTFBDV1NUUiAmcFN1Yk5hbWUsIEZYX1NUUlNJWkUmIHNpemUpCisgICAgeworICAgICAgICBwU3ViTmFtZSA9IG1fcEN1cjsKKyAgICAgICAgd2hpbGUgKG1fcEN1ciA8IG1fcEVuZCAmJiBtX3BDdXJbMF0gIT0gTCcuJykgeworICAgICAgICAgICAgbV9wQ3VyKys7CisgICAgICAgIH0KKyAgICAgICAgc2l6ZSA9IChGWF9TVFJTSVpFKShtX3BDdXIgLSBwU3ViTmFtZSk7CisgICAgICAgIGlmIChtX3BDdXIgPCBtX3BFbmQgJiYgbV9wQ3VyWzBdID09IEwnLicpIHsKKyAgICAgICAgICAgIG1fcEN1cisrOworICAgICAgICB9CisgICAgfQorcHJvdGVjdGVkOgorICAgIEZYX0xQQ1dTVFIgbV9wU3RhcnQ7CisgICAgRlhfTFBDV1NUUiBtX3BFbmQ7CisgICAgRlhfTFBDV1NUUiBtX3BDdXI7Cit9OworY2xhc3MgQ0ZpZWxkVHJlZSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgc3RydWN0IF9Ob2RlIDogcHVibGljIENGWF9PYmplY3QgeworICAgICAgICBfTm9kZSAqcGFyZW50OworICAgICAgICBDRlhfUHRyQXJyYXkgY2hpbGRyZW47CisgICAgICAgIENGWF9XaWRlU3RyaW5nIHNob3J0X25hbWU7CisgICAgICAgIENQREZfRm9ybUZpZWxkICpmaWVsZF9wdHI7CisgICAgICAgIGludCBDb3VudEZpZWxkcyhpbnQgbkxldmVsID0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5MZXZlbCA+IG5NYXhSZWN1cnNpb24pIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmaWVsZF9wdHIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLkdldFNpemUoKTsgaSArKykgeworICAgICAgICAgICAgICAgIGNvdW50ICs9ICgoX05vZGUgKiljaGlsZHJlbi5HZXRBdChpKSktPkNvdW50RmllbGRzKG5MZXZlbCArIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNvdW50OworICAgICAgICB9CisgICAgICAgIENQREZfRm9ybUZpZWxkKiBHZXRGaWVsZChpbnQqIGZpZWxkc190b19nbykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGZpZWxkX3B0cikgeworICAgICAgICAgICAgICAgIGlmICgqZmllbGRzX3RvX2dvID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkX3B0cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLS0qZmllbGRzX3RvX2dvOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjaGlsZHJlbi5HZXRTaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIF9Ob2RlICpwTm9kZSA9IChfTm9kZSAqKWNoaWxkcmVuLkdldEF0KGkpOworICAgICAgICAgICAgICAgIENQREZfRm9ybUZpZWxkKiBwRmllbGQgPSBwTm9kZS0+R2V0RmllbGQoZmllbGRzX3RvX2dvKTsKKyAgICAgICAgICAgICAgICBpZiAocEZpZWxkKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwRmllbGQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgQ1BERl9Gb3JtRmllbGQqIEdldEZpZWxkKGludCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGZpZWxkc190b19nbyA9IGluZGV4OworICAgICAgICAgICAgcmV0dXJuIEdldEZpZWxkKCZmaWVsZHNfdG9fZ28pOworICAgICAgICB9CisgICAgfTsKKyAgICBDRmllbGRUcmVlKCk7CisgICAgfkNGaWVsZFRyZWUoKTsKKyAgICB2b2lkIFNldEZpZWxkKGNvbnN0IENGWF9XaWRlU3RyaW5nICZmdWxsX25hbWUsIENQREZfRm9ybUZpZWxkICpmaWVsZF9wdHIpOworICAgIENQREZfRm9ybUZpZWxkICpHZXRGaWVsZChjb25zdCBDRlhfV2lkZVN0cmluZyAmZnVsbF9uYW1lKTsKKyAgICBDUERGX0Zvcm1GaWVsZCAqUmVtb3ZlRmllbGQoY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJmZ1bGxfbmFtZSk7CisgICAgdm9pZCBSZW1vdmVBbGwoKTsKKyAgICBfTm9kZSAqRmluZE5vZGUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJmZ1bGxfbmFtZSk7CisgICAgX05vZGUgKiBBZGRDaGlsZChfTm9kZSAqcFBhcmVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJnNob3J0X25hbWUsIENQREZfRm9ybUZpZWxkICpmaWVsZF9wdHIpOworICAgIHZvaWQgUmVtb3ZlTm9kZShfTm9kZSAqcE5vZGUsIGludCBuTGV2ZWwgPSAwKTsKKyAgICBfTm9kZSAqX0xvb2t1cChfTm9kZSAqcFBhcmVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJnNob3J0X25hbWUpOworICAgIF9Ob2RlIG1fUm9vdDsKK307CitDRmllbGRUcmVlOjpDRmllbGRUcmVlKCkKK3sKKyAgICBtX1Jvb3QucGFyZW50ID0gTlVMTDsKKyAgICBtX1Jvb3QuZmllbGRfcHRyID0gTlVMTDsKK30KK0NGaWVsZFRyZWU6On5DRmllbGRUcmVlKCkKK3sKKyAgICBSZW1vdmVBbGwoKTsKK30KK0NGaWVsZFRyZWU6Ol9Ob2RlICpDRmllbGRUcmVlOjpBZGRDaGlsZChfTm9kZSAqcFBhcmVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJnNob3J0X25hbWUsIENQREZfRm9ybUZpZWxkICpmaWVsZF9wdHIpCit7CisgICAgaWYgKHBQYXJlbnQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgX05vZGUgKnBOb2RlID0gRlhfTkVXIF9Ob2RlOworICAgIGlmIChwTm9kZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwTm9kZS0+cGFyZW50ID0gcFBhcmVudDsKKyAgICBwTm9kZS0+c2hvcnRfbmFtZSA9IHNob3J0X25hbWU7CisgICAgcE5vZGUtPmZpZWxkX3B0ciA9IGZpZWxkX3B0cjsKKyAgICBwUGFyZW50LT5jaGlsZHJlbi5BZGQocE5vZGUpOworICAgIHJldHVybiBwTm9kZTsKK30KK3ZvaWQgQ0ZpZWxkVHJlZTo6UmVtb3ZlTm9kZShfTm9kZSAqcE5vZGUsIGludCBuTGV2ZWwpCit7CisgICAgaWYgKHBOb2RlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDsKKyAgICB9CisgICAgaWYgKG5MZXZlbCA+IG5NYXhSZWN1cnNpb24pIHsKKyAgICAgICAgZGVsZXRlIHBOb2RlOworICAgICAgICByZXR1cm4gOworICAgIH0KKyAgICBDRlhfUHRyQXJyYXkmIHB0cl9hcnJheSA9IHBOb2RlLT5jaGlsZHJlbjsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHB0cl9hcnJheS5HZXRTaXplKCk7IGkgKyspIHsKKyAgICAgICAgX05vZGUgKnBDaGlsZCA9IChfTm9kZSAqKXB0cl9hcnJheVtpXTsKKyAgICAgICAgUmVtb3ZlTm9kZShwQ2hpbGQsIG5MZXZlbCArIDEpOworICAgIH0KKyAgICBkZWxldGUgcE5vZGU7Cit9CitDRmllbGRUcmVlOjpfTm9kZSAqQ0ZpZWxkVHJlZTo6X0xvb2t1cChfTm9kZSAqcFBhcmVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJnNob3J0X25hbWUpCit7CisgICAgaWYgKHBQYXJlbnQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0ZYX1B0ckFycmF5JiBwdHJfYXJyYXkgPSBwUGFyZW50LT5jaGlsZHJlbjsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHB0cl9hcnJheS5HZXRTaXplKCk7IGkgKyspIHsKKyAgICAgICAgX05vZGUgKnBOb2RlID0gKF9Ob2RlICopcHRyX2FycmF5W2ldOworICAgICAgICBpZiAocE5vZGUtPnNob3J0X25hbWUuR2V0TGVuZ3RoKCkgPT0gc2hvcnRfbmFtZS5HZXRMZW5ndGgoKSAmJgorICAgICAgICAgICAgICAgIEZYU1lTX21lbWNtcDMyKChGWF9MUENXU1RSKXBOb2RlLT5zaG9ydF9uYW1lLCAoRlhfTFBDV1NUUilzaG9ydF9uYW1lLCBzaG9ydF9uYW1lLkdldExlbmd0aCgpKnNpemVvZihGWF9XQ0hBUikpID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBwTm9kZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK3ZvaWQgQ0ZpZWxkVHJlZTo6UmVtb3ZlQWxsKCkKK3sKKyAgICBDRlhfUHRyQXJyYXkmIHB0cl9hcnJheSA9IG1fUm9vdC5jaGlsZHJlbjsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHB0cl9hcnJheS5HZXRTaXplKCk7IGkgKyspIHsKKyAgICAgICAgX05vZGUgKnBOb2RlID0gKF9Ob2RlICopcHRyX2FycmF5W2ldOworICAgICAgICBSZW1vdmVOb2RlKHBOb2RlKTsKKyAgICB9Cit9Cit2b2lkIENGaWVsZFRyZWU6OlNldEZpZWxkKGNvbnN0IENGWF9XaWRlU3RyaW5nICZmdWxsX25hbWUsIENQREZfRm9ybUZpZWxkICpmaWVsZF9wdHIpCit7CisgICAgaWYgKGZ1bGxfbmFtZSA9PSBMIiIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBfQ0ZpZWxkTmFtZUV4dHJhY3RvciBuYW1lX2V4dHJhY3RvcihmdWxsX25hbWUpOworICAgIEZYX0xQQ1dTVFIgcE5hbWU7CisgICAgRlhfU1RSU0laRSBuTGVuZ3RoOworICAgIG5hbWVfZXh0cmFjdG9yLkdldE5leHQocE5hbWUsIG5MZW5ndGgpOworICAgIF9Ob2RlICpwTm9kZSA9ICZtX1Jvb3QsICpwTGFzdCA9IE5VTEw7CisgICAgd2hpbGUgKG5MZW5ndGggPiAwKSB7CisgICAgICAgIHBMYXN0ID0gcE5vZGU7CisgICAgICAgIENGWF9XaWRlU3RyaW5nIG5hbWUgPSBDRlhfV2lkZVN0cmluZyhwTmFtZSwgbkxlbmd0aCk7CisgICAgICAgIHBOb2RlID0gX0xvb2t1cChwTGFzdCwgbmFtZSk7CisgICAgICAgIGlmIChwTm9kZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBwTm9kZSA9IEFkZENoaWxkKHBMYXN0LCBuYW1lLCBOVUxMKTsKKyAgICAgICAgfQorICAgICAgICBuYW1lX2V4dHJhY3Rvci5HZXROZXh0KHBOYW1lLCBuTGVuZ3RoKTsKKyAgICB9CisgICAgaWYgKHBOb2RlICE9ICZtX1Jvb3QpIHsKKyAgICAgICAgcE5vZGUtPmZpZWxkX3B0ciA9IGZpZWxkX3B0cjsKKyAgICB9Cit9CitDUERGX0Zvcm1GaWVsZCAqQ0ZpZWxkVHJlZTo6R2V0RmllbGQoY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJmZ1bGxfbmFtZSkKK3sKKyAgICBpZiAoZnVsbF9uYW1lID09IEwiIikgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgX0NGaWVsZE5hbWVFeHRyYWN0b3IgbmFtZV9leHRyYWN0b3IoZnVsbF9uYW1lKTsKKyAgICBGWF9MUENXU1RSIHBOYW1lOworICAgIEZYX1NUUlNJWkUgbkxlbmd0aDsKKyAgICBuYW1lX2V4dHJhY3Rvci5HZXROZXh0KHBOYW1lLCBuTGVuZ3RoKTsKKyAgICBfTm9kZSAqcE5vZGUgPSAmbV9Sb290LCAqcExhc3QgPSBOVUxMOworICAgIHdoaWxlIChuTGVuZ3RoID4gMCAmJiBwTm9kZSkgeworICAgICAgICBwTGFzdCA9IHBOb2RlOworICAgICAgICBDRlhfV2lkZVN0cmluZyBuYW1lID0gQ0ZYX1dpZGVTdHJpbmcocE5hbWUsIG5MZW5ndGgpOworICAgICAgICBwTm9kZSA9IF9Mb29rdXAocExhc3QsIG5hbWUpOworICAgICAgICBuYW1lX2V4dHJhY3Rvci5HZXROZXh0KHBOYW1lLCBuTGVuZ3RoKTsKKyAgICB9CisgICAgcmV0dXJuIHBOb2RlID8gcE5vZGUtPmZpZWxkX3B0ciA6IE5VTEw7Cit9CitDUERGX0Zvcm1GaWVsZCAqQ0ZpZWxkVHJlZTo6UmVtb3ZlRmllbGQoY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJiBmdWxsX25hbWUpCit7CisgICAgaWYgKGZ1bGxfbmFtZSA9PSBMIiIpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIF9DRmllbGROYW1lRXh0cmFjdG9yIG5hbWVfZXh0cmFjdG9yKGZ1bGxfbmFtZSk7CisgICAgRlhfTFBDV1NUUiBwTmFtZTsKKyAgICBGWF9TVFJTSVpFIG5MZW5ndGg7CisgICAgbmFtZV9leHRyYWN0b3IuR2V0TmV4dChwTmFtZSwgbkxlbmd0aCk7CisgICAgX05vZGUgKnBOb2RlID0gJm1fUm9vdCwgKnBMYXN0ID0gTlVMTDsKKyAgICB3aGlsZSAobkxlbmd0aCA+IDAgJiYgcE5vZGUpIHsKKyAgICAgICAgcExhc3QgPSBwTm9kZTsKKyAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgbmFtZSA9IENGWF9XaWRlU3RyaW5nKHBOYW1lLCBuTGVuZ3RoKTsKKyAgICAgICAgcE5vZGUgPSBfTG9va3VwKHBMYXN0LCBuYW1lKTsKKyAgICAgICAgbmFtZV9leHRyYWN0b3IuR2V0TmV4dChwTmFtZSwgbkxlbmd0aCk7CisgICAgfQorICAgIGlmIChwTm9kZSAmJiBwTm9kZSAhPSAmbV9Sb290KSB7CisgICAgICAgIENGWF9QdHJBcnJheSYgcHRyX2FycmF5ID0gcExhc3QtPmNoaWxkcmVuOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHB0cl9hcnJheS5HZXRTaXplKCk7IGkgKyspIHsKKyAgICAgICAgICAgIGlmIChwTm9kZSA9PSAoX05vZGUgKilwdHJfYXJyYXlbaV0pIHsKKyAgICAgICAgICAgICAgICBwdHJfYXJyYXkuUmVtb3ZlQXQoaSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQ1BERl9Gb3JtRmllbGQgKnBGaWVsZCA9IHBOb2RlLT5maWVsZF9wdHI7CisgICAgICAgIFJlbW92ZU5vZGUocE5vZGUpOworICAgICAgICByZXR1cm4gcEZpZWxkOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK0NGaWVsZFRyZWU6Ol9Ob2RlICpDRmllbGRUcmVlOjpGaW5kTm9kZShjb25zdCBDRlhfV2lkZVN0cmluZyYgZnVsbF9uYW1lKQoreworICAgIGlmIChmdWxsX25hbWUgPT0gTCIiKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBfQ0ZpZWxkTmFtZUV4dHJhY3RvciBuYW1lX2V4dHJhY3RvcihmdWxsX25hbWUpOworICAgIEZYX0xQQ1dTVFIgcE5hbWU7CisgICAgRlhfU1RSU0laRSBuTGVuZ3RoOworICAgIG5hbWVfZXh0cmFjdG9yLkdldE5leHQocE5hbWUsIG5MZW5ndGgpOworICAgIF9Ob2RlICpwTm9kZSA9ICZtX1Jvb3QsICpwTGFzdCA9IE5VTEw7CisgICAgd2hpbGUgKG5MZW5ndGggPiAwICYmIHBOb2RlKSB7CisgICAgICAgIHBMYXN0ID0gcE5vZGU7CisgICAgICAgIENGWF9XaWRlU3RyaW5nIG5hbWUgPSBDRlhfV2lkZVN0cmluZyhwTmFtZSwgbkxlbmd0aCk7CisgICAgICAgIHBOb2RlID0gX0xvb2t1cChwTGFzdCwgbmFtZSk7CisgICAgICAgIG5hbWVfZXh0cmFjdG9yLkdldE5leHQocE5hbWUsIG5MZW5ndGgpOworICAgIH0KKyAgICByZXR1cm4gcE5vZGU7Cit9CitDUERGX0ludGVyRm9ybTo6Q1BERl9JbnRlckZvcm0oQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBGWF9CT09MIGJHZW5lcmF0ZUFQKSA6IENGWF9Qcml2YXRlRGF0YSgpCit7CisgICAgbV9wRG9jdW1lbnQgPSBwRG9jdW1lbnQ7CisgICAgbV9iR2VuZXJhdGVBUCA9IGJHZW5lcmF0ZUFQOworICAgIG1fcEZvcm1Ob3RpZnkgPSBOVUxMOworICAgIG1fYlVwZGF0ZWQgPSBGQUxTRTsKKyAgICBtX3BGaWVsZFRyZWUgPSBGWF9ORVcgQ0ZpZWxkVHJlZTsKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBSb290ID0gbV9wRG9jdW1lbnQtPkdldFJvb3QoKTsKKyAgICBtX3BGb3JtRGljdCA9IHBSb290LT5HZXREaWN0KCJBY3JvRm9ybSIpOworICAgIGlmIChtX3BGb3JtRGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcEZpZWxkcyA9IG1fcEZvcm1EaWN0LT5HZXRBcnJheSgiRmllbGRzIik7CisgICAgaWYgKHBGaWVsZHMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludCBjb3VudCA9IHBGaWVsZHMtPkdldENvdW50KCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSArKykgeworICAgICAgICBMb2FkRmllbGQocEZpZWxkcy0+R2V0RGljdChpKSk7CisgICAgfQorfQorQ1BERl9JbnRlckZvcm06On5DUERGX0ludGVyRm9ybSgpCit7CisgICAgRlhfUE9TSVRJT04gcG9zID0gbV9Db250cm9sTWFwLkdldFN0YXJ0UG9zaXRpb24oKTsKKyAgICB3aGlsZSAocG9zKSB7CisgICAgICAgIEZYX0xQVk9JRCBrZXksIHZhbHVlOworICAgICAgICBtX0NvbnRyb2xNYXAuR2V0TmV4dEFzc29jKHBvcywga2V5LCB2YWx1ZSk7CisgICAgICAgIGRlbGV0ZSAoQ1BERl9Gb3JtQ29udHJvbCopdmFsdWU7CisgICAgfQorICAgIGlmIChtX3BGaWVsZFRyZWUgIT0gTlVMTCkgeworICAgICAgICBpbnQgbkNvdW50ID0gbV9wRmllbGRUcmVlLT5tX1Jvb3QuQ291bnRGaWVsZHMoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuQ291bnQ7IGkrKykgeworICAgICAgICAgICAgQ1BERl9Gb3JtRmllbGQgKnBGaWVsZCA9IG1fcEZpZWxkVHJlZS0+bV9Sb290LkdldEZpZWxkKGkpOworICAgICAgICAgICAgZGVsZXRlIHBGaWVsZDsKKyAgICAgICAgfQorICAgICAgICBkZWxldGUgbV9wRmllbGRUcmVlOworICAgIH0KK30KK0ZYX0JPT0wJQ1BERl9JbnRlckZvcm06Om1fYlVwZGF0ZUFQID0gVFJVRTsKK0ZYX0JPT0wgQ1BERl9JbnRlckZvcm06OlVwZGF0aW5nQVBFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gbV9iVXBkYXRlQVA7Cit9Cit2b2lkIENQREZfSW50ZXJGb3JtOjpFbmFibGVVcGRhdGVBUChGWF9CT09MIGJVcGRhdGVBUCkKK3sKKyAgICBtX2JVcGRhdGVBUCA9IGJVcGRhdGVBUDsKK30KK0NGWF9CeXRlU3RyaW5nIENQREZfSW50ZXJGb3JtOjpHZW5lcmF0ZU5ld1Jlc291cmNlTmFtZShjb25zdCBDUERGX0RpY3Rpb25hcnkqIHBSZXNEaWN0LCBGWF9MUENTVFIgY3NUeXBlLCBpbnQgaU1pbkxlbiwgRlhfTFBDU1RSIGNzUHJlZml4KQoreworICAgIENGWF9CeXRlU3RyaW5nIGNzU3RyID0gY3NQcmVmaXg7CisgICAgQ0ZYX0J5dGVTdHJpbmcgY3NCVHlwZSA9IGNzVHlwZTsKKyAgICBpZiAoY3NTdHIuSXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChjc0JUeXBlID09ICJFeHRHU3RhdGUiKSB7CisgICAgICAgICAgICBjc1N0ciA9ICJHUyI7CisgICAgICAgIH0gZWxzZSBpZiAoY3NCVHlwZSA9PSAiQ29sb3JTcGFjZSIpIHsKKyAgICAgICAgICAgIGNzU3RyID0gIkNTIjsKKyAgICAgICAgfSBlbHNlIGlmIChjc0JUeXBlID09ICJGb250IikgeworICAgICAgICAgICAgY3NTdHIgPSAiWmlUaSI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjc1N0ciA9ICJSZXMiOworICAgICAgICB9CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIGNzVG1wID0gY3NTdHI7CisgICAgaW50IGlDb3VudCA9IGNzU3RyLkdldExlbmd0aCgpOworICAgIGludCBtID0gMDsKKyAgICBpZiAoaU1pbkxlbiA+IDApIHsKKyAgICAgICAgY3NUbXAgPSAiIjsKKyAgICAgICAgd2hpbGUgKG0gPCBpTWluTGVuICYmIG0gPCBpQ291bnQpIHsKKyAgICAgICAgICAgIGNzVG1wICs9IGNzU3RyW20gKytdOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChtIDwgaU1pbkxlbikgeworICAgICAgICAgICAgY3NUbXAgKz0gJzAnICsgbSAlIDEwOworICAgICAgICAgICAgbSArKzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG0gPSBpQ291bnQ7CisgICAgfQorICAgIGlmIChwUmVzRGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBjc1RtcDsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IHBSZXNEaWN0LT5HZXREaWN0KGNzVHlwZSk7CisgICAgaWYgKHBEaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIGNzVG1wOworICAgIH0KKyAgICBpbnQgbnVtID0gMDsKKyAgICBDRlhfQnl0ZVN0cmluZyBic051bTsKKyAgICB3aGlsZSAoVFJVRSkgeworICAgICAgICBpZiAoIXBEaWN0LT5LZXlFeGlzdChjc1RtcCArIGJzTnVtKSkgeworICAgICAgICAgICAgcmV0dXJuIGNzVG1wICsgYnNOdW07CisgICAgICAgIH0KKyAgICAgICAgaWYgKG0gPCBpQ291bnQpIHsKKyAgICAgICAgICAgIGNzVG1wICs9IGNzU3RyW20gKytdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnNOdW0uRm9ybWF0KCIlZCIsIG51bSsrKTsKKyAgICAgICAgfQorICAgICAgICBtICsrOworICAgIH0KKyAgICByZXR1cm4gY3NUbXA7Cit9CisjaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXwordHlwZWRlZiBzdHJ1Y3QgX1BERl9GT05UREFUQSB7CisgICAgRlhfQk9PTAkJYkZpbmQ7CisgICAgTE9HRk9OVEEJbGY7Cit9IFBERl9GT05UREFUQSwgRkFSKiBMUERGX0ZPTlREQVRBOworc3RhdGljIGludCBDQUxMQkFDSyBFbnVtRm9udEZhbUV4UHJvYygJRU5VTUxPR0ZPTlRFWEEgKmxwZWxmZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVdURVhUTUVUUklDRVggKmxwbnRtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBGb250VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUEFSQU0gbFBhcmFtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQoreworICAgIGlmIChGb250VHlwZSAhPSAweDAwNCB8fCBzdHJjaHIobHBlbGZlLT5lbGZMb2dGb250LmxmRmFjZU5hbWUsICdAJykgIT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9IGVsc2UgeworICAgICAgICBMUERGX0ZPTlREQVRBIHBEYXRhID0gKExQREZfRk9OVERBVEEpbFBhcmFtOworICAgICAgICBtZW1jcHkoJnBEYXRhLT5sZiwgJmxwZWxmZS0+ZWxmTG9nRm9udCwgc2l6ZW9mKExPR0ZPTlRBKSk7CisgICAgICAgIHBEYXRhLT5iRmluZCA9IFRSVUU7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KK3N0YXRpYyBGWF9CT09MIFJldHJpZXZlU3BlY2lmaWNGb250KExPR0ZPTlRBJiBsZikKK3sKKyAgICBQREZfRk9OVERBVEEgZmQ7CisgICAgbWVtc2V0KCZmZCwgMCwgc2l6ZW9mKFBERl9GT05UREFUQSkpOworICAgIEhEQyBoREMgPSA6OkdldERDKE5VTEwpOworICAgIEVudW1Gb250RmFtaWxpZXNFeEEoaERDLCAmbGYsIChGT05URU5VTVBST0NBKUVudW1Gb250RmFtRXhQcm9jLCAoTFBBUkFNKSZmZCwgMCk7CisgICAgOjpSZWxlYXNlREMoTlVMTCwgaERDKTsKKyAgICBpZiAoZmQuYkZpbmQpIHsKKyAgICAgICAgbWVtY3B5KCZsZiwgJmZkLmxmLCBzaXplb2YoTE9HRk9OVEEpKTsKKyAgICB9CisgICAgcmV0dXJuIGZkLmJGaW5kOworfQorc3RhdGljIEZYX0JPT0wgUmV0cmlldmVTcGVjaWZpY0ZvbnQoRlhfQllURSBjaGFyU2V0LCBGWF9CWVRFIHBpdGNoQW5kRmFtaWx5LCBMUENTVFIgcGNzRm9udE5hbWUsIExPR0ZPTlRBJiBsZikKK3sKKyAgICBtZW1zZXQoJmxmLCAwLCBzaXplb2YoTE9HRk9OVEEpKTsKKyAgICBsZi5sZkNoYXJTZXQgPSBjaGFyU2V0OworICAgIGxmLmxmUGl0Y2hBbmRGYW1pbHkgPSBwaXRjaEFuZEZhbWlseTsKKyAgICBpZiAocGNzRm9udE5hbWUgIT0gTlVMTCkgeworICAgICAgICBzdHJjcHkobGYubGZGYWNlTmFtZSwgcGNzRm9udE5hbWUpOworICAgIH0KKyAgICByZXR1cm4gUmV0cmlldmVTcGVjaWZpY0ZvbnQobGYpOworfQorc3RhdGljIEZYX0JPT0wgUmV0cmlldmVTdG9ja0ZvbnQoaW50IGlGb250T2JqZWN0LCBGWF9CWVRFIGNoYXJTZXQsIExPR0ZPTlRBJiBsZikKK3sKKyAgICBIRk9OVCBoRm9udCA9IChIRk9OVCk6OkdldFN0b2NrT2JqZWN0KGlGb250T2JqZWN0KTsKKyAgICBpZiAoaEZvbnQgIT0gTlVMTCkgeworICAgICAgICBtZW1zZXQoJmxmLCAwLCBzaXplb2YoTE9HRk9OVEEpKTsKKyAgICAgICAgaW50IGlSZXQgPSA6OkdldE9iamVjdChoRm9udCwgc2l6ZW9mKExPR0ZPTlRBKSwgJmxmKTsKKyAgICAgICAgaWYgKGlSZXQgPiAwICYmIChsZi5sZkNoYXJTZXQgPT0gY2hhclNldCB8fCBjaGFyU2V0ID09IDI1NSkpIHsKKyAgICAgICAgICAgIHJldHVybiBSZXRyaWV2ZVNwZWNpZmljRm9udChsZik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorI2VuZGlmCitDUERGX0ZvbnQqIENQREZfSW50ZXJGb3JtOjpBZGRTeXN0ZW1EZWZhdWx0Rm9udChjb25zdCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQpCit7CisgICAgaWYgKHBEb2N1bWVudCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX0ZvbnQqIHBGb250ID0gTlVMTDsKKyNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfCisgICAgTE9HRk9OVEEgbGY7CisgICAgRlhfQk9PTCBiUmV0OworICAgIGJSZXQgPSBSZXRyaWV2ZVN0b2NrRm9udChERUZBVUxUX0dVSV9GT05ULCAyNTUsIGxmKTsKKyAgICBpZiAoIWJSZXQpIHsKKyAgICAgICAgYlJldCA9IFJldHJpZXZlU3RvY2tGb250KFNZU1RFTV9GT05ULCAyNTUsIGxmKTsKKyAgICB9CisgICAgaWYgKGJSZXQpIHsKKyAgICAgICAgcEZvbnQgPSAoKENQREZfRG9jdW1lbnQqKXBEb2N1bWVudCktPkFkZFdpbmRvd3NGb250KCZsZiwgRkFMU0UsIFRSVUUpOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBwRm9udDsKK30KK0NQREZfRm9udCogQ1BERl9JbnRlckZvcm06OkFkZFN5c3RlbUZvbnQoY29uc3QgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDRlhfQnl0ZVN0cmluZyBjc0ZvbnROYW1lLCBGWF9CWVRFIGlDaGFyU2V0KQoreworICAgIGlmIChwRG9jdW1lbnQgPT0gTlVMTCB8fCBjc0ZvbnROYW1lLklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisjaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXworICAgIGlmIChpQ2hhclNldCA9PSAxKSB7CisgICAgICAgIGlDaGFyU2V0ID0gR2V0TmF0aXZlQ2hhclNldCgpOworICAgIH0KKyAgICBIRk9OVCBoRm9udCA9IDo6Q3JlYXRlRm9udEEoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgaUNoYXJTZXQsIE9VVF9ERUZBVUxUX1BSRUNJUywgQ0xJUF9ERUZBVUxUX1BSRUNJUywgREVGQVVMVF9RVUFMSVRZLCBERUZBVUxUX1BJVENIIHwgRkZfRE9OVENBUkUsIChGWF9MUENTVFIpY3NGb250TmFtZSk7CisgICAgaWYgKGhGb250ICE9IE5VTEwpIHsKKyAgICAgICAgTE9HRk9OVEEgbGY7CisgICAgICAgIG1lbXNldCgmbGYsIDAsIHNpemVvZihMT0dGT05UQSkpOworICAgICAgICA6OkdldE9iamVjdEEoaEZvbnQsIHNpemVvZihMT0dGT05UQSksICZsZik7CisgICAgICAgIDo6RGVsZXRlT2JqZWN0KGhGb250KTsKKyAgICAgICAgaWYgKHN0cmxlbihsZi5sZkZhY2VOYW1lKSA+IDApIHsKKyAgICAgICAgICAgIHJldHVybiAoKENQREZfRG9jdW1lbnQqKXBEb2N1bWVudCktPkFkZFdpbmRvd3NGb250KCZsZiwgRkFMU0UsIFRSVUUpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIE5VTEw7Cit9CitDUERGX0ZvbnQqIENQREZfSW50ZXJGb3JtOjpBZGRTeXN0ZW1Gb250KGNvbnN0IENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ0ZYX1dpZGVTdHJpbmcgY3NGb250TmFtZSwgRlhfQllURSBpQ2hhclNldCkKK3sKKyAgICBpZiAocERvY3VtZW50ID09IE5VTEwgfHwgY3NGb250TmFtZS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18KKyAgICBpZiAoaUNoYXJTZXQgPT0gMSkgeworICAgICAgICBpQ2hhclNldCA9IEdldE5hdGl2ZUNoYXJTZXQoKTsKKyAgICB9CisgICAgSEZPTlQgaEZvbnQgPSA6OkNyZWF0ZUZvbnRXKDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIGlDaGFyU2V0LCBPVVRfREVGQVVMVF9QUkVDSVMsIENMSVBfREVGQVVMVF9QUkVDSVMsIERFRkFVTFRfUVVBTElUWSwgREVGQVVMVF9QSVRDSCB8IEZGX0RPTlRDQVJFLCBjc0ZvbnROYW1lKTsKKyAgICBpZiAoaEZvbnQgIT0gTlVMTCkgeworICAgICAgICBMT0dGT05UQSBsZjsKKyAgICAgICAgbWVtc2V0KCZsZiwgMCwgc2l6ZW9mKExPR0ZPTlRBKSk7CisgICAgICAgIDo6R2V0T2JqZWN0KGhGb250LCBzaXplb2YoTE9HRk9OVEEpLCAmbGYpOworICAgICAgICA6OkRlbGV0ZU9iamVjdChoRm9udCk7CisgICAgICAgIGlmIChzdHJsZW4obGYubGZGYWNlTmFtZSkgPiAwKSB7CisgICAgICAgICAgICByZXR1cm4gKChDUERGX0RvY3VtZW50KilwRG9jdW1lbnQpLT5BZGRXaW5kb3dzRm9udCgmbGYsIEZBTFNFLCBUUlVFKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBOVUxMOworfQorQ1BERl9Gb250KiBDUERGX0ludGVyRm9ybTo6QWRkU3RhbmRhcmRGb250KGNvbnN0IENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ0ZYX0J5dGVTdHJpbmcgY3NGb250TmFtZSkKK3sKKyAgICBpZiAocERvY3VtZW50ID09IE5VTEwgfHwgY3NGb250TmFtZS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfRm9udCogcEZvbnQgPSBOVUxMOworICAgIGlmIChjc0ZvbnROYW1lID09ICJaYXBmRGluZ2JhdHMiKSB7CisgICAgICAgIHBGb250ID0gKChDUERGX0RvY3VtZW50KilwRG9jdW1lbnQpLT5BZGRTdGFuZGFyZEZvbnQoY3NGb250TmFtZSwgTlVMTCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQ1BERl9Gb250RW5jb2RpbmcgZW5jb2RpbmcoUERGRk9OVF9FTkNPRElOR19XSU5BTlNJKTsKKyAgICAgICAgcEZvbnQgPSAoKENQREZfRG9jdW1lbnQqKXBEb2N1bWVudCktPkFkZFN0YW5kYXJkRm9udChjc0ZvbnROYW1lLCAmZW5jb2RpbmcpOworICAgIH0KKyAgICByZXR1cm4gcEZvbnQ7Cit9CitDRlhfQnl0ZVN0cmluZyBDUERGX0ludGVyRm9ybTo6R2V0TmF0aXZlRm9udChGWF9CWVRFIGNoYXJTZXQsIEZYX0xQVk9JRCBwTG9nRm9udCkKK3sKKyAgICBDRlhfQnl0ZVN0cmluZyBjc0ZvbnROYW1lOworI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18KKyAgICBMT0dGT05UQSBsZjsKKyAgICBGWF9CT09MIGJSZXQ7CisgICAgaWYgKGNoYXJTZXQgPT0gQU5TSV9DSEFSU0VUKSB7CisgICAgICAgIGNzRm9udE5hbWUgPSAiSGVsdmV0aWNhIjsKKyAgICAgICAgcmV0dXJuIGNzRm9udE5hbWU7CisgICAgfQorICAgIGJSZXQgPSBGQUxTRTsKKyAgICBpZiAoY2hhclNldCA9PSBTSElGVEpJU19DSEFSU0VUKSB7CisgICAgICAgIGJSZXQgPSBSZXRyaWV2ZVNwZWNpZmljRm9udChjaGFyU2V0LCBERUZBVUxUX1BJVENIIHwgRkZfRE9OVENBUkUsICJNUyBNaW5jaG8iLCBsZik7CisgICAgfSBlbHNlIGlmIChjaGFyU2V0ID09IEdCMjMxMl9DSEFSU0VUKSB7CisgICAgICAgIGJSZXQgPSBSZXRyaWV2ZVNwZWNpZmljRm9udChjaGFyU2V0LCBERUZBVUxUX1BJVENIIHwgRkZfRE9OVENBUkUsICJTaW1TdW4iLCBsZik7CisgICAgfSBlbHNlIGlmIChjaGFyU2V0ID09IENISU5FU0VCSUc1X0NIQVJTRVQpIHsKKyAgICAgICAgYlJldCA9IFJldHJpZXZlU3BlY2lmaWNGb250KGNoYXJTZXQsIERFRkFVTFRfUElUQ0ggfCBGRl9ET05UQ0FSRSwgIk1pbmdMaVUiLCBsZik7CisgICAgfQorICAgIGlmICghYlJldCkgeworICAgICAgICBiUmV0ID0gUmV0cmlldmVTcGVjaWZpY0ZvbnQoY2hhclNldCwgREVGQVVMVF9QSVRDSCB8IEZGX0RPTlRDQVJFLCAiQXJpYWwgVW5pY29kZSBNUyIsIGxmKTsKKyAgICB9CisgICAgaWYgKCFiUmV0KSB7CisgICAgICAgIGJSZXQgPSBSZXRyaWV2ZVNwZWNpZmljRm9udChjaGFyU2V0LCBERUZBVUxUX1BJVENIIHwgRkZfRE9OVENBUkUsICJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIGxmKTsKKyAgICB9CisgICAgaWYgKCFiUmV0KSB7CisgICAgICAgIGJSZXQgPSBSZXRyaWV2ZVNwZWNpZmljRm9udChjaGFyU2V0LCBERUZBVUxUX1BJVENIIHwgRkZfRE9OVENBUkUsIE5VTEwsIGxmKTsKKyAgICB9CisgICAgaWYgKGJSZXQpIHsKKyAgICAgICAgaWYgKHBMb2dGb250ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIG1lbWNweShwTG9nRm9udCwgJmxmLCBzaXplb2YoTE9HRk9OVEEpKTsKKyAgICAgICAgfQorICAgICAgICBjc0ZvbnROYW1lID0gbGYubGZGYWNlTmFtZTsKKyAgICAgICAgcmV0dXJuIGNzRm9udE5hbWU7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIGNzRm9udE5hbWU7Cit9CitDRlhfQnl0ZVN0cmluZyBDUERGX0ludGVyRm9ybTo6R2V0TmF0aXZlRm9udChGWF9MUFZPSUQgcExvZ0ZvbnQpCit7CisjaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXworICAgIEZYX0JZVEUgY2hhclNldCA9IEdldE5hdGl2ZUNoYXJTZXQoKTsKKyAgICByZXR1cm4gR2V0TmF0aXZlRm9udChjaGFyU2V0LCBwTG9nRm9udCk7CisjZWxzZQorICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZygpOworI2VuZGlmCit9CitGWF9CWVRFIENQREZfSW50ZXJGb3JtOjpHZXROYXRpdmVDaGFyU2V0KCkKK3sKKyNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfCisgICAgRlhfQllURSBjaGFyU2V0ID0gQU5TSV9DSEFSU0VUOworICAgIFVJTlQgaUNvZGVQYWdlID0gOjpHZXRBQ1AoKTsKKyAgICBzd2l0Y2ggKGlDb2RlUGFnZSkgeworICAgICAgICBjYXNlIDkzMjoKKyAgICAgICAgICAgIGNoYXJTZXQgPSBTSElGVEpJU19DSEFSU0VUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgOTM2OgorICAgICAgICAgICAgY2hhclNldCA9IEdCMjMxMl9DSEFSU0VUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgOTUwOgorICAgICAgICAgICAgY2hhclNldCA9IENISU5FU0VCSUc1X0NIQVJTRVQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMjUyOgorICAgICAgICAgICAgY2hhclNldCA9IEFOU0lfQ0hBUlNFVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDg3NDoKKyAgICAgICAgICAgIGNoYXJTZXQgPSBUSEFJX0NIQVJTRVQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA5NDk6CisgICAgICAgICAgICBjaGFyU2V0ID0gSEFOR1VMX0NIQVJTRVQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMjAwOgorICAgICAgICAgICAgY2hhclNldCA9IEFOU0lfQ0hBUlNFVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDEyNTA6CisgICAgICAgICAgICBjaGFyU2V0ID0gRUFTVEVVUk9QRV9DSEFSU0VUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTI1MToKKyAgICAgICAgICAgIGNoYXJTZXQgPSBSVVNTSUFOX0NIQVJTRVQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMjUzOgorICAgICAgICAgICAgY2hhclNldCA9IEdSRUVLX0NIQVJTRVQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMjU0OgorICAgICAgICAgICAgY2hhclNldCA9IFRVUktJU0hfQ0hBUlNFVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDEyNTU6CisgICAgICAgICAgICBjaGFyU2V0ID0gSEVCUkVXX0NIQVJTRVQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxMjU2OgorICAgICAgICAgICAgY2hhclNldCA9IEFSQUJJQ19DSEFSU0VUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTI1NzoKKyAgICAgICAgICAgIGNoYXJTZXQgPSBCQUxUSUNfQ0hBUlNFVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDEyNTg6CisgICAgICAgICAgICBjaGFyU2V0ID0gVklFVE5BTUVTRV9DSEFSU0VUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTM2MToKKyAgICAgICAgICAgIGNoYXJTZXQgPSBKT0hBQl9DSEFSU0VUOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBjaGFyU2V0OworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorQ1BERl9Gb250KiBDUERGX0ludGVyRm9ybTo6QWRkTmF0aXZlRm9udChGWF9CWVRFIGNoYXJTZXQsIGNvbnN0IENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCkKK3sKKyAgICBpZiAocERvY3VtZW50ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfRm9udCogcEZvbnQgPSBOVUxMOworI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18KKyAgICBMT0dGT05UQSBsZjsKKyAgICBDRlhfQnl0ZVN0cmluZyBjc0ZvbnROYW1lID0gR2V0TmF0aXZlRm9udChjaGFyU2V0LCAmbGYpOworICAgIGlmICghY3NGb250TmFtZS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGNzRm9udE5hbWUgPT0gIkhlbHZldGljYSIpIHsKKyAgICAgICAgICAgIHBGb250ID0gQWRkU3RhbmRhcmRGb250KHBEb2N1bWVudCwgY3NGb250TmFtZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwRm9udCA9ICgoQ1BERl9Eb2N1bWVudCopcERvY3VtZW50KS0+QWRkV2luZG93c0ZvbnQoJmxmLCBGQUxTRSwgVFJVRSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gcEZvbnQ7Cit9CitDUERGX0ZvbnQqIENQREZfSW50ZXJGb3JtOjpBZGROYXRpdmVGb250KGNvbnN0IENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCkKK3sKKyAgICBpZiAocERvY3VtZW50ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfRm9udCogcEZvbnQgPSBOVUxMOworICAgIEZYX0JZVEUgY2hhclNldCA9IEdldE5hdGl2ZUNoYXJTZXQoKTsKKyAgICBwRm9udCA9IEFkZE5hdGl2ZUZvbnQoY2hhclNldCwgcERvY3VtZW50KTsKKyAgICByZXR1cm4gcEZvbnQ7Cit9CitGWF9CT09MIENQREZfSW50ZXJGb3JtOjpWYWxpZGF0ZUZpZWxkTmFtZShDRlhfV2lkZVN0cmluZyYgY3NOZXdGaWVsZE5hbWUsIGludCBpVHlwZSwgY29uc3QgQ1BERl9Gb3JtRmllbGQqIHBFeGNsdWRlZEZpZWxkLCBjb25zdCBDUERGX0Zvcm1Db250cm9sKiBwRXhjbHVkZWRDb250cm9sKQoreworICAgIGlmIChjc05ld0ZpZWxkTmFtZS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpbnQgaVBvcyA9IDA7CisgICAgaW50IGlMZW5ndGggPSBjc05ld0ZpZWxkTmFtZS5HZXRMZW5ndGgoKTsKKyAgICBDRlhfV2lkZVN0cmluZyBjc1N1YjsKKyAgICB3aGlsZSAoVFJVRSkgeworICAgICAgICB3aGlsZSAoaVBvcyA8IGlMZW5ndGggJiYgKGNzTmV3RmllbGROYW1lW2lQb3NdID09IEwnLicgfHwgY3NOZXdGaWVsZE5hbWVbaVBvc10gPT0gTCcgJykpIHsKKyAgICAgICAgICAgIGlQb3MgKys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlQb3MgPCBpTGVuZ3RoICYmICFjc1N1Yi5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGNzU3ViICs9IEwnLic7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKGlQb3MgPCBpTGVuZ3RoICYmIGNzTmV3RmllbGROYW1lW2lQb3NdICE9IEwnLicpIHsKKyAgICAgICAgICAgIGNzU3ViICs9IGNzTmV3RmllbGROYW1lW2lQb3MgKytdOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkgPSBjc1N1Yi5HZXRMZW5ndGgoKSAtIDE7IGkgPiAtMTsgaSAtLSkgeworICAgICAgICAgICAgaWYgKGNzU3ViW2ldID09IEwnICcgfHwgY3NTdWJbaV0gPT0gTCcuJykgeworICAgICAgICAgICAgICAgIGNzU3ViLlNldEF0KGksIEwnXDAnKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgRlhfRFdPUkQgZHdDb3VudCA9IG1fcEZpZWxkVHJlZS0+bV9Sb290LkNvdW50RmllbGRzKCk7CisgICAgICAgIGZvciAoRlhfRFdPUkQgbSA9IDA7IG0gPCBkd0NvdW50OyBtICsrKSB7CisgICAgICAgICAgICBDUERGX0Zvcm1GaWVsZCogcEZpZWxkID0gbV9wRmllbGRUcmVlLT5tX1Jvb3QuR2V0RmllbGQobSk7CisgICAgICAgICAgICBpZiAocEZpZWxkID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwRmllbGQgPT0gcEV4Y2x1ZGVkRmllbGQpIHsKKyAgICAgICAgICAgICAgICBpZiAocEV4Y2x1ZGVkQ29udHJvbCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwRmllbGQtPkNvdW50Q29udHJvbHMoKSA8IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgY3NGdWxsTmFtZSA9IHBGaWVsZC0+R2V0RnVsbE5hbWUoKTsKKyAgICAgICAgICAgIGludCBpUmV0ID0gQ29tcGFyZUZpZWxkTmFtZShjc1N1YiwgY3NGdWxsTmFtZSk7CisgICAgICAgICAgICBpZiAoaVJldCA9PSAxKSB7CisgICAgICAgICAgICAgICAgaWYgKHBGaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gaVR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaVJldCA9PSAyICYmIGNzU3ViID09IGNzTmV3RmllbGROYW1lKSB7CisgICAgICAgICAgICAgICAgaWYgKGNzRnVsbE5hbWVbaVBvc10gPT0gTCcuJykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChpUmV0ID09IDMgJiYgY3NTdWIgPT0gY3NOZXdGaWVsZE5hbWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoY3NOZXdGaWVsZE5hbWVbY3NGdWxsTmFtZS5HZXRMZW5ndGgoKV0gPT0gTCcuJykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChpUG9zID49IGlMZW5ndGgpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmIChjc1N1Yi5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBjc05ld0ZpZWxkTmFtZSA9IGNzU3ViOworICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDUERGX0ludGVyRm9ybTo6VmFsaWRhdGVGaWVsZE5hbWUoQ0ZYX1dpZGVTdHJpbmcmIGNzTmV3RmllbGROYW1lLCBpbnQgaVR5cGUpCit7CisgICAgcmV0dXJuIFZhbGlkYXRlRmllbGROYW1lKGNzTmV3RmllbGROYW1lLCBpVHlwZSwgTlVMTCwgTlVMTCk7Cit9CitGWF9CT09MIENQREZfSW50ZXJGb3JtOjpWYWxpZGF0ZUZpZWxkTmFtZShjb25zdCBDUERGX0Zvcm1GaWVsZCogcEZpZWxkLCBDRlhfV2lkZVN0cmluZyYgY3NOZXdGaWVsZE5hbWUpCit7CisgICAgaWYgKHBGaWVsZCA9PSBOVUxMIHx8IGNzTmV3RmllbGROYW1lLklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBWYWxpZGF0ZUZpZWxkTmFtZShjc05ld0ZpZWxkTmFtZSwgKChDUERGX0Zvcm1GaWVsZCopcEZpZWxkKS0+R2V0RmllbGRUeXBlKCksIHBGaWVsZCwgTlVMTCk7Cit9CitGWF9CT09MIENQREZfSW50ZXJGb3JtOjpWYWxpZGF0ZUZpZWxkTmFtZShjb25zdCBDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCwgQ0ZYX1dpZGVTdHJpbmcmIGNzTmV3RmllbGROYW1lKQoreworICAgIGlmIChwQ29udHJvbCA9PSBOVUxMIHx8IGNzTmV3RmllbGROYW1lLklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIENQREZfRm9ybUZpZWxkKiBwRmllbGQgPSAoKENQREZfRm9ybUNvbnRyb2wqKXBDb250cm9sKS0+R2V0RmllbGQoKTsKKyAgICByZXR1cm4gVmFsaWRhdGVGaWVsZE5hbWUoY3NOZXdGaWVsZE5hbWUsIHBGaWVsZC0+R2V0RmllbGRUeXBlKCksIHBGaWVsZCwgcENvbnRyb2wpOworfQoraW50IENQREZfSW50ZXJGb3JtOjpDb21wYXJlRmllbGROYW1lKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lMSwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUyKQoreworICAgIEZYX0xQQ1NUUiBwdHIxID0gbmFtZTEsIHB0cjIgPSBuYW1lMjsKKyAgICBpZiAobmFtZTEuR2V0TGVuZ3RoKCkgIT0gbmFtZTIuR2V0TGVuZ3RoKCkpIHsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICB3aGlsZSAocHRyMVtpXSA9PSBwdHIyW2ldKSB7CisgICAgICAgICAgICBpICsrOworICAgICAgICB9CisgICAgICAgIGlmIChpID09IG5hbWUxLkdldExlbmd0aCgpKSB7CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgfQorICAgICAgICBpZiAoaSA9PSBuYW1lMi5HZXRMZW5ndGgoKSkgeworICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIG5hbWUxID09IG5hbWUyID8gMSA6IDA7CisgICAgfQorfQoraW50IENQREZfSW50ZXJGb3JtOjpDb21wYXJlRmllbGROYW1lKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBuYW1lMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIG5hbWUyKQoreworICAgIEZYX0xQQ1dTVFIgcHRyMSA9IG5hbWUxLCBwdHIyID0gbmFtZTI7CisgICAgaWYgKG5hbWUxLkdldExlbmd0aCgpICE9IG5hbWUyLkdldExlbmd0aCgpKSB7CisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgd2hpbGUgKHB0cjFbaV0gPT0gcHRyMltpXSkgeworICAgICAgICAgICAgaSArKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoaSA9PSBuYW1lMS5HZXRMZW5ndGgoKSkgeworICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGkgPT0gbmFtZTIuR2V0TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBuYW1lMSA9PSBuYW1lMiA/IDEgOiAwOworICAgIH0KK30KK0ZYX0RXT1JEIENQREZfSW50ZXJGb3JtOjpDb3VudEZpZWxkcyhjb25zdCBDRlhfV2lkZVN0cmluZyAmY3NGaWVsZE5hbWUpCit7CisgICAgaWYgKGNzRmllbGROYW1lLklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gKEZYX0RXT1JEKW1fcEZpZWxkVHJlZS0+bV9Sb290LkNvdW50RmllbGRzKCk7CisgICAgfQorICAgIENGaWVsZFRyZWU6Ol9Ob2RlICpwTm9kZSA9IG1fcEZpZWxkVHJlZS0+RmluZE5vZGUoY3NGaWVsZE5hbWUpOworICAgIGlmIChwTm9kZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gcE5vZGUtPkNvdW50RmllbGRzKCk7Cit9CitDUERGX0Zvcm1GaWVsZCogQ1BERl9JbnRlckZvcm06OkdldEZpZWxkKEZYX0RXT1JEIGluZGV4LCBjb25zdCBDRlhfV2lkZVN0cmluZyAmY3NGaWVsZE5hbWUpCit7CisgICAgaWYgKGNzRmllbGROYW1lID09IEwiIikgeworICAgICAgICByZXR1cm4gbV9wRmllbGRUcmVlLT5tX1Jvb3QuR2V0RmllbGQoaW5kZXgpOworICAgIH0KKyAgICBDRmllbGRUcmVlOjpfTm9kZSAqcE5vZGUgPSBtX3BGaWVsZFRyZWUtPkZpbmROb2RlKGNzRmllbGROYW1lKTsKKyAgICBpZiAocE5vZGUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHBOb2RlLT5HZXRGaWVsZChpbmRleCk7Cit9Cit2b2lkIENQREZfSW50ZXJGb3JtOjpHZXRBbGxGaWVsZE5hbWVzKENGWF9XaWRlU3RyaW5nQXJyYXkmIGFsbEZpZWxkTmFtZXMpCit7CisgICAgYWxsRmllbGROYW1lcy5SZW1vdmVBbGwoKTsKKyAgICBpbnQgbkNvdW50ID0gbV9wRmllbGRUcmVlLT5tX1Jvb3QuQ291bnRGaWVsZHMoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5Db3VudDsgaSArKykgeworICAgICAgICBDUERGX0Zvcm1GaWVsZCAqcEZpZWxkID0gbV9wRmllbGRUcmVlLT5tX1Jvb3QuR2V0RmllbGQoaSk7CisgICAgICAgIGlmIChwRmllbGQpIHsKKyAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIGZ1bGxfbmFtZSA9IEdldEZ1bGxOYW1lKHBGaWVsZC0+R2V0RmllbGREaWN0KCkpOworICAgICAgICAgICAgYWxsRmllbGROYW1lcy5BZGQoZnVsbF9uYW1lKTsKKyAgICAgICAgfQorICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9JbnRlckZvcm06OklzVmFsaWRGb3JtRmllbGQoY29uc3Qgdm9pZCogcEZpZWxkKQoreworICAgIGlmIChwRmllbGQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGludCBuQ291bnQgPSBtX3BGaWVsZFRyZWUtPm1fUm9vdC5Db3VudEZpZWxkcygpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkNvdW50OyBpKyspIHsKKyAgICAgICAgQ1BERl9Gb3JtRmllbGQgKnBGb3JtRmllbGQgPSBtX3BGaWVsZFRyZWUtPm1fUm9vdC5HZXRGaWVsZChpKTsKKyAgICAgICAgaWYgKHBGaWVsZCA9PSBwRm9ybUZpZWxkKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitDUERGX0Zvcm1GaWVsZCogQ1BERl9JbnRlckZvcm06OkdldEZpZWxkQnlEaWN0KENQREZfRGljdGlvbmFyeSogcEZpZWxkRGljdCkgY29uc3QKK3sKKyAgICBpZiAocEZpZWxkRGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDRlhfV2lkZVN0cmluZyBjc1dOYW1lID0gR2V0RnVsbE5hbWUocEZpZWxkRGljdCk7CisgICAgcmV0dXJuIG1fcEZpZWxkVHJlZS0+R2V0RmllbGQoY3NXTmFtZSk7Cit9CitGWF9EV09SRCBDUERGX0ludGVyRm9ybTo6Q291bnRDb250cm9scyhDRlhfV2lkZVN0cmluZyBjc0ZpZWxkTmFtZSkKK3sKKyAgICBpZiAoY3NGaWVsZE5hbWUuSXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybiAoRlhfRFdPUkQpbV9Db250cm9sTWFwLkdldENvdW50KCk7CisgICAgfQorICAgIENQREZfRm9ybUZpZWxkICpwRmllbGQgPSBtX3BGaWVsZFRyZWUtPkdldEZpZWxkKGNzRmllbGROYW1lKTsKKyAgICBpZiAocEZpZWxkID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBwRmllbGQtPm1fQ29udHJvbExpc3QuR2V0U2l6ZSgpOworfQorQ1BERl9Gb3JtQ29udHJvbCogQ1BERl9JbnRlckZvcm06OkdldENvbnRyb2woRlhfRFdPUkQgaW5kZXgsIENGWF9XaWRlU3RyaW5nIGNzRmllbGROYW1lKQoreworICAgIENQREZfRm9ybUZpZWxkICpwRmllbGQgPSBtX3BGaWVsZFRyZWUtPkdldEZpZWxkKGNzRmllbGROYW1lKTsKKyAgICBpZiAocEZpZWxkID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChpbmRleCA8IChGWF9EV09SRClwRmllbGQtPm1fQ29udHJvbExpc3QuR2V0U2l6ZSgpKSB7CisgICAgICAgIHJldHVybiAoQ1BERl9Gb3JtQ29udHJvbCAqKXBGaWVsZC0+bV9Db250cm9sTGlzdC5HZXRBdChpbmRleCk7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorRlhfQk9PTCBDUERGX0ludGVyRm9ybTo6SXNWYWxpZEZvcm1Db250cm9sKGNvbnN0IHZvaWQqIHBDb250cm9sKQoreworICAgIGlmIChwQ29udHJvbCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgRlhfUE9TSVRJT04gcG9zID0gbV9Db250cm9sTWFwLkdldFN0YXJ0UG9zaXRpb24oKTsKKyAgICB3aGlsZSAocG9zKSB7CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcFdpZGdldERpY3QgPSBOVUxMOworICAgICAgICB2b2lkKiBwRm9ybUNvbnRyb2wgPSBOVUxMOworICAgICAgICBtX0NvbnRyb2xNYXAuR2V0TmV4dEFzc29jKHBvcywgKEZYX0xQVk9JRCYpcFdpZGdldERpY3QsIHBGb3JtQ29udHJvbCk7CisgICAgICAgIGlmIChwQ29udHJvbCA9PSBwRm9ybUNvbnRyb2wpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK2ludCBDUERGX0ludGVyRm9ybTo6Q291bnRQYWdlQ29udHJvbHMoQ1BERl9QYWdlKiBwUGFnZSkgY29uc3QKK3sKKyAgICBDUERGX0FycmF5KiBwQW5ub3RMaXN0ID0gcFBhZ2UtPm1fcEZvcm1EaWN0LT5HZXRBcnJheSgiQW5ub3RzIik7CisgICAgaWYgKHBBbm5vdExpc3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcEFubm90TGlzdC0+R2V0Q291bnQoKTsgaSArKykgeworICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdCA9IHBBbm5vdExpc3QtPkdldERpY3QoaSk7CisgICAgICAgIGlmIChwQW5ub3QgPT0gTlVMTCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2w7CisgICAgICAgIGlmICghbV9Db250cm9sTWFwLkxvb2t1cChwQW5ub3QsIChGWF9MUFZPSUQmKXBDb250cm9sKSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgY291bnQgKys7CisgICAgfQorICAgIHJldHVybiBjb3VudDsKK30KK0NQREZfRm9ybUNvbnRyb2wqIENQREZfSW50ZXJGb3JtOjpHZXRQYWdlQ29udHJvbChDUERGX1BhZ2UqIHBQYWdlLCBpbnQgaW5kZXgpIGNvbnN0Cit7CisgICAgQ1BERl9BcnJheSogcEFubm90TGlzdCA9IHBQYWdlLT5tX3BGb3JtRGljdC0+R2V0QXJyYXkoIkFubm90cyIpOworICAgIGlmIChwQW5ub3RMaXN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHBBbm5vdExpc3QtPkdldENvdW50KCk7IGkgKyspIHsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwQW5ub3QgPSBwQW5ub3RMaXN0LT5HZXREaWN0KGkpOworICAgICAgICBpZiAocEFubm90ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIENQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sOworICAgICAgICBpZiAoIW1fQ29udHJvbE1hcC5Mb29rdXAocEFubm90LCAoRlhfTFBWT0lEJilwQ29udHJvbCkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpbmRleCA9PSBjb3VudCkgeworICAgICAgICAgICAgcmV0dXJuIHBDb250cm9sOworICAgICAgICB9CisgICAgICAgIGNvdW50ICsrOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK0NQREZfRm9ybUNvbnRyb2wqIENQREZfSW50ZXJGb3JtOjpHZXRDb250cm9sQXRQb2ludChDUERGX1BhZ2UqIHBQYWdlLCBGWF9GTE9BVCBwZGZfeCwgRlhfRkxPQVQgcGRmX3kpIGNvbnN0Cit7CisgICAgQ1BERl9BcnJheSogcEFubm90TGlzdCA9IHBQYWdlLT5tX3BGb3JtRGljdC0+R2V0QXJyYXkoIkFubm90cyIpOworICAgIGlmIChwQW5ub3RMaXN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGZvciAoRlhfRFdPUkQgaSA9IHBBbm5vdExpc3QtPkdldENvdW50KCk7IGkgPiAwOyBpIC0tKSB7CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcEFubm90ID0gcEFubm90TGlzdC0+R2V0RGljdChpIC0gMSk7CisgICAgICAgIGlmIChwQW5ub3QgPT0gTlVMTCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2w7CisgICAgICAgIGlmICghbV9Db250cm9sTWFwLkxvb2t1cChwQW5ub3QsIChGWF9MUFZPSUQmKXBDb250cm9sKSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQ0ZYX0Zsb2F0UmVjdCByZWN0ID0gcENvbnRyb2wtPkdldFJlY3QoKTsKKyAgICAgICAgaWYgKHJlY3QuQ29udGFpbnMocGRmX3gsIHBkZl95KSkgeworICAgICAgICAgICAgcmV0dXJuIHBDb250cm9sOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorQ1BERl9Gb3JtQ29udHJvbCogQ1BERl9JbnRlckZvcm06OkdldENvbnRyb2xCeURpY3QoQ1BERl9EaWN0aW9uYXJ5KiBwV2lkZ2V0RGljdCkgY29uc3QKK3sKKyAgICBDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCA9IE5VTEw7CisgICAgbV9Db250cm9sTWFwLkxvb2t1cChwV2lkZ2V0RGljdCwgKEZYX0xQVk9JRCYpcENvbnRyb2wpOworICAgIHJldHVybiBwQ29udHJvbDsKK30KK0ZYX0RXT1JEIENQREZfSW50ZXJGb3JtOjpDb3VudEludGVybmFsRmllbGRzKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBjc0ZpZWxkTmFtZSkgY29uc3QKK3sKKyAgICBpZiAobV9wRm9ybURpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcEFycmF5ID0gbV9wRm9ybURpY3QtPkdldEFycmF5KCJGaWVsZHMiKTsKKyAgICBpZiAocEFycmF5ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChjc0ZpZWxkTmFtZS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIHBBcnJheS0+R2V0Q291bnQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgaUxlbmd0aCA9IGNzRmllbGROYW1lLkdldExlbmd0aCgpOworICAgICAgICBpbnQgaVBvcyA9IDA7CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSBOVUxMOworICAgICAgICB3aGlsZSAocEFycmF5ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIGNzU3ViOworICAgICAgICAgICAgaWYgKGlQb3MgPCBpTGVuZ3RoICYmIGNzRmllbGROYW1lW2lQb3NdID09IEwnLicpIHsKKyAgICAgICAgICAgICAgICBpUG9zICsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKGlQb3MgPCBpTGVuZ3RoICYmIGNzRmllbGROYW1lW2lQb3NdICE9IEwnLicpIHsKKyAgICAgICAgICAgICAgICBjc1N1YiArPSBjc0ZpZWxkTmFtZVtpUG9zICsrXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBpQ291bnQgPSBwQXJyYXktPkdldENvdW50KCk7CisgICAgICAgICAgICBGWF9CT09MIGJGaW5kID0gRkFMU0U7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlDb3VudDsgaSArKykgeworICAgICAgICAgICAgICAgIHBEaWN0ID0gcEFycmF5LT5HZXREaWN0KGkpOworICAgICAgICAgICAgICAgIGlmIChwRGljdCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyBjc1QgPSBwRGljdC0+R2V0VW5pY29kZVRleHQoIlQiKTsKKyAgICAgICAgICAgICAgICBpZiAoY3NUID09IGNzU3ViKSB7CisgICAgICAgICAgICAgICAgICAgIGJGaW5kID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFiRmluZCkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlQb3MgPj0gaUxlbmd0aCkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcEFycmF5ID0gcERpY3QtPkdldEFycmF5KCJLaWRzIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBEaWN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcEFycmF5ID0gcERpY3QtPkdldEFycmF5KCJLaWRzIik7CisgICAgICAgICAgICBpZiAocEFycmF5ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBBcnJheS0+R2V0Q291bnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KK0NQREZfRGljdGlvbmFyeSogQ1BERl9JbnRlckZvcm06OkdldEludGVybmFsRmllbGQoRlhfRFdPUkQgaW5kZXgsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBjc0ZpZWxkTmFtZSkgY29uc3QKK3sKKyAgICBpZiAobV9wRm9ybURpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcEFycmF5ID0gbV9wRm9ybURpY3QtPkdldEFycmF5KCJGaWVsZHMiKTsKKyAgICBpZiAocEFycmF5ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChjc0ZpZWxkTmFtZS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIHBBcnJheS0+R2V0RGljdChpbmRleCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IGlMZW5ndGggPSBjc0ZpZWxkTmFtZS5HZXRMZW5ndGgoKTsKKyAgICAgICAgaW50IGlQb3MgPSAwOworICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gTlVMTDsKKyAgICAgICAgd2hpbGUgKHBBcnJheSAhPSBOVUxMKSB7CisgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyBjc1N1YjsKKyAgICAgICAgICAgIGlmIChpUG9zIDwgaUxlbmd0aCAmJiBjc0ZpZWxkTmFtZVtpUG9zXSA9PSBMJy4nKSB7CisgICAgICAgICAgICAgICAgaVBvcyArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdoaWxlIChpUG9zIDwgaUxlbmd0aCAmJiBjc0ZpZWxkTmFtZVtpUG9zXSAhPSBMJy4nKSB7CisgICAgICAgICAgICAgICAgY3NTdWIgKz0gY3NGaWVsZE5hbWVbaVBvcyArK107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgaUNvdW50ID0gcEFycmF5LT5HZXRDb3VudCgpOworICAgICAgICAgICAgRlhfQk9PTCBiRmluZCA9IEZBTFNFOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspIHsKKyAgICAgICAgICAgICAgICBwRGljdCA9IHBBcnJheS0+R2V0RGljdChpKTsKKyAgICAgICAgICAgICAgICBpZiAocERpY3QgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgY3NUID0gcERpY3QtPkdldFVuaWNvZGVUZXh0KCJUIik7CisgICAgICAgICAgICAgICAgaWYgKGNzVCA9PSBjc1N1YikgeworICAgICAgICAgICAgICAgICAgICBiRmluZCA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghYkZpbmQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpUG9zID49IGlMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBBcnJheSA9IHBEaWN0LT5HZXRBcnJheSgiS2lkcyIpOworICAgICAgICB9CisgICAgICAgIGlmIChwRGljdCA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBBcnJheSA9IHBEaWN0LT5HZXRBcnJheSgiS2lkcyIpOworICAgICAgICAgICAgaWYgKHBBcnJheSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBEaWN0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcEFycmF5LT5HZXREaWN0KGluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9JbnRlckZvcm06Ok5lZWRDb25zdHJ1Y3RBUCgpCit7CisgICAgaWYgKG1fcEZvcm1EaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gbV9wRm9ybURpY3QtPkdldEJvb2xlYW4oIk5lZWRBcHBlYXJhbmNlcyIpOworfQordm9pZCBDUERGX0ludGVyRm9ybTo6TmVlZENvbnN0cnVjdEFQKEZYX0JPT0wgYk5lZWRBUCkKK3sKKyAgICBpZiAobV9wRm9ybURpY3QgPT0gTlVMTCkgeworICAgICAgICBJbml0SW50ZXJGb3JtRGljdChtX3BGb3JtRGljdCwgbV9wRG9jdW1lbnQpOworICAgIH0KKyAgICBtX3BGb3JtRGljdC0+U2V0QXRCb29sZWFuKCJOZWVkQXBwZWFyYW5jZXMiLCBiTmVlZEFQKTsKKyAgICBtX2JHZW5lcmF0ZUFQID0gYk5lZWRBUDsKK30KK2ludCBDUERGX0ludGVyRm9ybTo6Q291bnRGaWVsZHNJbkNhbGN1bGF0aW9uT3JkZXIoKQoreworICAgIGlmIChtX3BGb3JtRGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBtX3BGb3JtRGljdC0+R2V0QXJyYXkoIkNPIik7CisgICAgaWYgKHBBcnJheSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gcEFycmF5LT5HZXRDb3VudCgpOworfQorQ1BERl9Gb3JtRmllbGQqIENQREZfSW50ZXJGb3JtOjpHZXRGaWVsZEluQ2FsY3VsYXRpb25PcmRlcihpbnQgaW5kZXgpCit7CisgICAgaWYgKG1fcEZvcm1EaWN0ID09IE5VTEwgfHwgaW5kZXggPCAwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBtX3BGb3JtRGljdC0+R2V0QXJyYXkoIkNPIik7CisgICAgaWYgKHBBcnJheSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX09iamVjdCogcEVsZW1lbnQgPSBwQXJyYXktPkdldEVsZW1lbnRWYWx1ZShpbmRleCk7CisgICAgaWYgKHBFbGVtZW50ICE9IE5VTEwgJiYgcEVsZW1lbnQtPkdldFR5cGUoKSA9PSBQREZPQkpfRElDVElPTkFSWSkgeworICAgICAgICByZXR1cm4gR2V0RmllbGRCeURpY3QoKENQREZfRGljdGlvbmFyeSopcEVsZW1lbnQpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK2ludCBDUERGX0ludGVyRm9ybTo6RmluZEZpZWxkSW5DYWxjdWxhdGlvbk9yZGVyKGNvbnN0IENQREZfRm9ybUZpZWxkKiBwRmllbGQpCit7CisgICAgaWYgKG1fcEZvcm1EaWN0ID09IE5VTEwgfHwgcEZpZWxkID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBtX3BGb3JtRGljdC0+R2V0QXJyYXkoIkNPIik7CisgICAgaWYgKHBBcnJheSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHBBcnJheS0+R2V0Q291bnQoKTsgaSArKykgeworICAgICAgICBDUERGX09iamVjdCogcEVsZW1lbnQgPSBwQXJyYXktPkdldEVsZW1lbnRWYWx1ZShpKTsKKyAgICAgICAgaWYgKHBFbGVtZW50ID09IHBGaWVsZC0+bV9wRGljdCkgeworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIC0xOworfQorRlhfRFdPUkQgQ1BERl9JbnRlckZvcm06OkNvdW50Rm9ybUZvbnRzKCkKK3sKKyAgICByZXR1cm4gQ291bnRJbnRlckZvcm1Gb250cyhtX3BGb3JtRGljdCk7Cit9CitDUERGX0ZvbnQqIENQREZfSW50ZXJGb3JtOjpHZXRGb3JtRm9udChGWF9EV09SRCBpbmRleCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZykKK3sKKyAgICByZXR1cm4gR2V0SW50ZXJGb3JtRm9udChtX3BGb3JtRGljdCwgbV9wRG9jdW1lbnQsIGluZGV4LCBjc05hbWVUYWcpOworfQorQ1BERl9Gb250KiBDUERGX0ludGVyRm9ybTo6R2V0Rm9ybUZvbnQoQ0ZYX0J5dGVTdHJpbmcgY3NOYW1lVGFnKQoreworICAgIHJldHVybiBHZXRJbnRlckZvcm1Gb250KG1fcEZvcm1EaWN0LCBtX3BEb2N1bWVudCwgY3NOYW1lVGFnKTsKK30KK0NQREZfRm9udCogQ1BERl9JbnRlckZvcm06OkdldEZvcm1Gb250KENGWF9CeXRlU3RyaW5nIGNzRm9udE5hbWUsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpCit7CisgICAgcmV0dXJuIEdldEludGVyRm9ybUZvbnQobV9wRm9ybURpY3QsIG1fcERvY3VtZW50LCBjc0ZvbnROYW1lLCBjc05hbWVUYWcpOworfQorQ1BERl9Gb250KiBDUERGX0ludGVyRm9ybTo6R2V0TmF0aXZlRm9ybUZvbnQoRlhfQllURSBjaGFyU2V0LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKQoreworICAgIHJldHVybiBHZXROYXRpdmVJbnRlckZvcm1Gb250KG1fcEZvcm1EaWN0LCBtX3BEb2N1bWVudCwgY2hhclNldCwgY3NOYW1lVGFnKTsKK30KK0NQREZfRm9udCogQ1BERl9JbnRlckZvcm06OkdldE5hdGl2ZUZvcm1Gb250KENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpCit7CisgICAgcmV0dXJuIEdldE5hdGl2ZUludGVyRm9ybUZvbnQobV9wRm9ybURpY3QsIG1fcERvY3VtZW50LCBjc05hbWVUYWcpOworfQorRlhfQk9PTCBDUERGX0ludGVyRm9ybTo6RmluZEZvcm1Gb250KGNvbnN0IENQREZfRm9udCogcEZvbnQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpCit7CisgICAgcmV0dXJuIEZpbmRJbnRlckZvcm1Gb250KG1fcEZvcm1EaWN0LCBwRm9udCwgY3NOYW1lVGFnKTsKK30KK0ZYX0JPT0wgQ1BERl9JbnRlckZvcm06OkZpbmRGb3JtRm9udChDRlhfQnl0ZVN0cmluZyBjc0ZvbnROYW1lLCBDUERGX0ZvbnQqJiBwRm9udCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZykKK3sKKyAgICByZXR1cm4gRmluZEludGVyRm9ybUZvbnQobV9wRm9ybURpY3QsIG1fcERvY3VtZW50LCBjc0ZvbnROYW1lLCBwRm9udCwgY3NOYW1lVGFnKTsKK30KK3ZvaWQgQ1BERl9JbnRlckZvcm06OkFkZEZvcm1Gb250KGNvbnN0IENQREZfRm9udCogcEZvbnQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpCit7CisgICAgQWRkSW50ZXJGb3JtRm9udChtX3BGb3JtRGljdCwgbV9wRG9jdW1lbnQsIHBGb250LCBjc05hbWVUYWcpOworICAgIG1fYlVwZGF0ZWQgPSBUUlVFOworfQorQ1BERl9Gb250KiBDUERGX0ludGVyRm9ybTo6QWRkTmF0aXZlRm9ybUZvbnQoRlhfQllURSBjaGFyU2V0LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKQoreworICAgIG1fYlVwZGF0ZWQgPSBUUlVFOworICAgIHJldHVybiBBZGROYXRpdmVJbnRlckZvcm1Gb250KG1fcEZvcm1EaWN0LCBtX3BEb2N1bWVudCwgY2hhclNldCwgY3NOYW1lVGFnKTsKK30KK0NQREZfRm9udCogQ1BERl9JbnRlckZvcm06OkFkZE5hdGl2ZUZvcm1Gb250KENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpCit7CisgICAgbV9iVXBkYXRlZCA9IFRSVUU7CisgICAgcmV0dXJuIEFkZE5hdGl2ZUludGVyRm9ybUZvbnQobV9wRm9ybURpY3QsIG1fcERvY3VtZW50LCBjc05hbWVUYWcpOworfQordm9pZCBDUERGX0ludGVyRm9ybTo6UmVtb3ZlRm9ybUZvbnQoY29uc3QgQ1BERl9Gb250KiBwRm9udCkKK3sKKyAgICBtX2JVcGRhdGVkID0gVFJVRTsKKyAgICBSZW1vdmVJbnRlckZvcm1Gb250KG1fcEZvcm1EaWN0LCBwRm9udCk7Cit9Cit2b2lkIENQREZfSW50ZXJGb3JtOjpSZW1vdmVGb3JtRm9udChDRlhfQnl0ZVN0cmluZyBjc05hbWVUYWcpCit7CisgICAgbV9iVXBkYXRlZCA9IFRSVUU7CisgICAgUmVtb3ZlSW50ZXJGb3JtRm9udChtX3BGb3JtRGljdCwgY3NOYW1lVGFnKTsKK30KK0NQREZfRGVmYXVsdEFwcGVhcmFuY2UgQ1BERl9JbnRlckZvcm06OkdldERlZmF1bHRBcHBlYXJhbmNlKCkKK3sKKyAgICBDRlhfQnl0ZVN0cmluZyBjc0RBOworICAgIGlmIChtX3BGb3JtRGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBjc0RBOworICAgIH0KKyAgICBjc0RBID0gbV9wRm9ybURpY3QtPkdldFN0cmluZygiREEiKTsKKyAgICByZXR1cm4gY3NEQTsKK30KK0NQREZfRm9udCogQ1BERl9JbnRlckZvcm06OkdldERlZmF1bHRGb3JtRm9udCgpCit7CisgICAgcmV0dXJuIEdldERlZmF1bHRJbnRlckZvcm1Gb250KG1fcEZvcm1EaWN0LCBtX3BEb2N1bWVudCk7Cit9CitpbnQgQ1BERl9JbnRlckZvcm06OkdldEZvcm1BbGlnbm1lbnQoKQoreworICAgIGlmIChtX3BGb3JtRGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gbV9wRm9ybURpY3QtPkdldEludGVnZXIoIlEiLCAwKTsKK30KK0ZYX0JPT0wgQ1BERl9JbnRlckZvcm06OlJlc2V0Rm9ybShjb25zdCBDRlhfUHRyQXJyYXkmIGZpZWxkcywgRlhfQk9PTCBiSW5jbHVkZU9yRXhjbHVkZSwgRlhfQk9PTCBiTm90aWZ5KQoreworICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgeworICAgICAgICBpbnQgaVJldCA9IG1fcEZvcm1Ob3RpZnktPkJlZm9yZUZvcm1SZXNldCh0aGlzKTsKKyAgICAgICAgaWYgKGlSZXQgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisgICAgaW50IG5Db3VudCA9IG1fcEZpZWxkVHJlZS0+bV9Sb290LkNvdW50RmllbGRzKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuQ291bnQ7IGkrKykgeworICAgICAgICBDUERGX0Zvcm1GaWVsZCogcEZpZWxkID0gbV9wRmllbGRUcmVlLT5tX1Jvb3QuR2V0RmllbGQoaSk7CisgICAgICAgIGlmIChwRmllbGQgPT0gTlVMTCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgRlhfQk9PTCBiRmluZCA9IEZBTFNFOworICAgICAgICBpbnQgaUNvdW50ID0gZmllbGRzLkdldFNpemUoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspIHsKKyAgICAgICAgICAgIGlmIChwRmllbGQgPT0gKENQREZfRm9ybUZpZWxkKilmaWVsZHNbaV0pIHsKKyAgICAgICAgICAgICAgICBiRmluZCA9IFRSVUU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKChiSW5jbHVkZU9yRXhjbHVkZSAmJiBiRmluZCkgfHwgKCFiSW5jbHVkZU9yRXhjbHVkZSAmJiAhYkZpbmQpKSB7CisgICAgICAgICAgICBwRmllbGQtPlJlc2V0RmllbGQoYk5vdGlmeSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7CisgICAgICAgIG1fcEZvcm1Ob3RpZnktPkFmdGVyRm9ybVJlc2V0KHRoaXMpOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ1BERl9JbnRlckZvcm06OlJlc2V0Rm9ybShGWF9CT09MIGJOb3RpZnkpCit7CisgICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7CisgICAgICAgIGludCBpUmV0ID0gbV9wRm9ybU5vdGlmeS0+QmVmb3JlRm9ybVJlc2V0KHRoaXMpOworICAgICAgICBpZiAoaVJldCA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpbnQgbkNvdW50ID0gbV9wRmllbGRUcmVlLT5tX1Jvb3QuQ291bnRGaWVsZHMoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5Db3VudDsgaSsrKSB7CisgICAgICAgIENQREZfRm9ybUZpZWxkKiBwRmllbGQgPSBtX3BGaWVsZFRyZWUtPm1fUm9vdC5HZXRGaWVsZChpKTsKKyAgICAgICAgaWYgKHBGaWVsZCA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBwRmllbGQtPlJlc2V0RmllbGQoYk5vdGlmeSk7CisgICAgfQorICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgeworICAgICAgICBtX3BGb3JtTm90aWZ5LT5BZnRlckZvcm1SZXNldCh0aGlzKTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9Cit2b2lkIENQREZfSW50ZXJGb3JtOjpSZWxvYWRGb3JtKCkKK3sKKyAgICBGWF9QT1NJVElPTiBwb3MgPSBtX0NvbnRyb2xNYXAuR2V0U3RhcnRQb3NpdGlvbigpOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwV2lkZ2V0RGljdDsKKyAgICAgICAgQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2w7CisgICAgICAgIG1fQ29udHJvbE1hcC5HZXROZXh0QXNzb2MocG9zLCAoRlhfTFBWT0lEJilwV2lkZ2V0RGljdCwgKEZYX0xQVk9JRCYpcENvbnRyb2wpOworICAgICAgICBkZWxldGUgcENvbnRyb2w7CisgICAgfQorICAgIG1fQ29udHJvbE1hcC5SZW1vdmVBbGwoKTsKKyAgICBpbnQgbkNvdW50ID0gbV9wRmllbGRUcmVlLT5tX1Jvb3QuQ291bnRGaWVsZHMoKTsKKyAgICBmb3IgKGludCBrID0gMDsgayA8IG5Db3VudDsgayArKykgeworICAgICAgICBDUERGX0Zvcm1GaWVsZCogcEZpZWxkID0gbV9wRmllbGRUcmVlLT5tX1Jvb3QuR2V0RmllbGQoayk7CisgICAgICAgIGRlbGV0ZSBwRmllbGQ7CisgICAgfQorICAgIG1fcEZpZWxkVHJlZS0+UmVtb3ZlQWxsKCk7CisgICAgaWYgKG1fcEZvcm1EaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX0FycmF5KiBwRmllbGRzID0gbV9wRm9ybURpY3QtPkdldEFycmF5KCJGaWVsZHMiKTsKKyAgICBpZiAocEZpZWxkcyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IGlDb3VudCA9IHBGaWVsZHMtPkdldENvdW50KCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspIHsKKyAgICAgICAgTG9hZEZpZWxkKHBGaWVsZHMtPkdldERpY3QoaSkpOworICAgIH0KK30KK3ZvaWQgQ1BERl9JbnRlckZvcm06OkxvYWRGaWVsZChDUERGX0RpY3Rpb25hcnkqIHBGaWVsZERpY3QsIGludCBuTGV2ZWwpCit7CisgICAgaWYgKG5MZXZlbCA+IG5NYXhSZWN1cnNpb24pIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocEZpZWxkRGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfRFdPUkQgZHdQYXJlbnRPYmpOdW0gPSBwRmllbGREaWN0LT5HZXRPYmpOdW0oKTsKKyAgICBDUERGX0FycmF5KiBwS2lkcyA9IHBGaWVsZERpY3QtPkdldEFycmF5KCJLaWRzIik7CisgICAgaWYgKCFwS2lkcykgeworICAgICAgICBBZGRUZXJtaW5hbEZpZWxkKHBGaWVsZERpY3QpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcEZpcnN0S2lkID0gcEtpZHMtPkdldERpY3QoMCk7CisgICAgaWYgKHBGaXJzdEtpZCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHBGaXJzdEtpZC0+S2V5RXhpc3QoIlQiKSB8fCBwRmlyc3RLaWQtPktleUV4aXN0KCJLaWRzIikpIHsKKyAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHBLaWRzLT5HZXRDb3VudCgpOyBpICsrKSB7CisgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkgKiBwQ2hpbGREaWN0ID0gcEtpZHMtPkdldERpY3QoaSk7CisgICAgICAgICAgICBpZiAocENoaWxkRGljdCkgeworICAgICAgICAgICAgICAgIGlmIChwQ2hpbGREaWN0LT5HZXRPYmpOdW0oKSAhPSBkd1BhcmVudE9iak51bSkgeworICAgICAgICAgICAgICAgICAgICBMb2FkRmllbGQocENoaWxkRGljdCwgbkxldmVsICsgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgQWRkVGVybWluYWxGaWVsZChwRmllbGREaWN0KTsKKyAgICB9Cit9CitGWF9CT09MIENQREZfSW50ZXJGb3JtOjpIYXNYRkFGb3JtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wRm9ybURpY3QgJiYgbV9wRm9ybURpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJYRkEiKSkgIT0gTlVMTDsKK30KK3ZvaWQgQ1BERl9JbnRlckZvcm06OkZpeFBhZ2VGaWVsZHMoY29uc3QgQ1BERl9QYWdlKiBwUGFnZSkKK3sKKyAgICBBU1NFUlQocFBhZ2UgIT0gTlVMTCk7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QgPSBwUGFnZS0+bV9wRm9ybURpY3Q7CisgICAgaWYgKHBQYWdlRGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcEFubm90cyA9IHBQYWdlRGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIkFubm90cyIpKTsKKyAgICBpZiAocEFubm90cyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IGlBbm5vdENvdW50ID0gcEFubm90cy0+R2V0Q291bnQoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGlBbm5vdENvdW50OyBpKyspIHsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwQW5ub3QgPSBwQW5ub3RzLT5HZXREaWN0KGkpOworICAgICAgICBpZiAocEFubm90ICE9IE5VTEwgJiYgcEFubm90LT5HZXRTdHJpbmcoRlhfQlNUUkMoIlN1YnR5cGUiKSkgPT0gIldpZGdldCIpIHsKKyAgICAgICAgICAgIExvYWRGaWVsZChwQW5ub3QpOworICAgICAgICB9CisgICAgfQorfQorQ1BERl9Gb3JtRmllbGQqIENQREZfSW50ZXJGb3JtOjpBZGRUZXJtaW5hbEZpZWxkKGNvbnN0IENQREZfRGljdGlvbmFyeSogcEZpZWxkRGljdCkKK3sKKyAgICBpZiAoIXBGaWVsZERpY3QtPktleUV4aXN0KEZYX0JTVFJDKCJUIikpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gKENQREZfRGljdGlvbmFyeSopcEZpZWxkRGljdDsKKyAgICBDRlhfV2lkZVN0cmluZyBjc1dOYW1lID0gR2V0RnVsbE5hbWUocERpY3QpOworICAgIGlmIChjc1dOYW1lLklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCA9IE5VTEw7CisgICAgcEZpZWxkID0gbV9wRmllbGRUcmVlLT5HZXRGaWVsZChjc1dOYW1lKTsKKyAgICBpZiAocEZpZWxkID09IE5VTEwpIHsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5ICpwUGFyZW50ID0gKENQREZfRGljdGlvbmFyeSopcEZpZWxkRGljdDsKKyAgICAgICAgaWYgKCFwRmllbGREaWN0LT5LZXlFeGlzdChGWF9CU1RSKCJUIikpICYmCisgICAgICAgICAgICAgICAgcEZpZWxkRGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJTdWJ0eXBlIikpID09IEZYX0JTVFJDKCJXaWRnZXQiKSkgeworICAgICAgICAgICAgcFBhcmVudCA9IHBGaWVsZERpY3QtPkdldERpY3QoRlhfQlNUUkMoIlBhcmVudCIpKTsKKyAgICAgICAgICAgIGlmICghcFBhcmVudCkgeworICAgICAgICAgICAgICAgIHBQYXJlbnQgPSAoQ1BERl9EaWN0aW9uYXJ5KilwRmllbGREaWN0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChwUGFyZW50ICYmIHBQYXJlbnQgIT0gcEZpZWxkRGljdCAmJiAhcFBhcmVudC0+S2V5RXhpc3QoRlhfQlNUUkMoIkZUIikpKSB7CisgICAgICAgICAgICBpZiAocEZpZWxkRGljdC0+S2V5RXhpc3QoRlhfQlNUUkMoIkZUIikpKSB7CisgICAgICAgICAgICAgICAgQ1BERl9PYmplY3QgKnBGVFZhbHVlID0gcEZpZWxkRGljdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJGVCIpKTsKKyAgICAgICAgICAgICAgICBpZiAocEZUVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgcFBhcmVudC0+U2V0QXQoRlhfQlNUUkMoIkZUIiksIHBGVFZhbHVlLT5DbG9uZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocEZpZWxkRGljdC0+S2V5RXhpc3QoRlhfQlNUUkMoIkZmIikpKSB7CisgICAgICAgICAgICAgICAgQ1BERl9PYmplY3QgKnBGZlZhbHVlID0gcEZpZWxkRGljdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJGZiIpKTsKKyAgICAgICAgICAgICAgICBpZiAocEZmVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgcFBhcmVudC0+U2V0QXQoRlhfQlNUUkMoIkZmIiksIHBGZlZhbHVlLT5DbG9uZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcEZpZWxkID0gRlhfTkVXIENQREZfRm9ybUZpZWxkKHRoaXMsIHBQYXJlbnQpOworICAgICAgICBDUERGX09iamVjdCogcFRPYmogPSBwRGljdC0+R2V0RWxlbWVudCgiVCIpOworICAgICAgICBpZiAocFRPYmogJiYgcFRPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfUkVGRVJFTkNFKSB7CisgICAgICAgICAgICBDUERGX09iamVjdCogcENsb25lID0gcFRPYmotPkNsb25lKFRSVUUpOworICAgICAgICAgICAgaWYgKHBDbG9uZSkgeworICAgICAgICAgICAgICAgIHBEaWN0LT5TZXRBdCgiVCIsIHBDbG9uZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBEaWN0LT5TZXRBdE5hbWUoIlQiLCAiIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9wRmllbGRUcmVlLT5TZXRGaWVsZChjc1dOYW1lLCBwRmllbGQpOworICAgIH0KKyAgICBDUERGX0FycmF5KiBwS2lkcyA9IHBGaWVsZERpY3QtPkdldEFycmF5KCJLaWRzIik7CisgICAgaWYgKHBLaWRzID09IE5VTEwpIHsKKyAgICAgICAgaWYgKHBGaWVsZERpY3QtPkdldFN0cmluZygiU3VidHlwZSIpID09ICJXaWRnZXQiKSB7CisgICAgICAgICAgICBBZGRDb250cm9sKHBGaWVsZCwgcEZpZWxkRGljdCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcEtpZHMtPkdldENvdW50KCk7IGkgKyspIHsKKyAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcEtpZCA9IHBLaWRzLT5HZXREaWN0KGkpOworICAgICAgICAgICAgaWYgKHBLaWQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBLaWQtPkdldFN0cmluZygiU3VidHlwZSIpICE9ICJXaWRnZXQiKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBZGRDb250cm9sKHBGaWVsZCwgcEtpZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBGaWVsZDsKK30KK0NQREZfRm9ybUNvbnRyb2wqIENQREZfSW50ZXJGb3JtOjpBZGRDb250cm9sKGNvbnN0IENQREZfRm9ybUZpZWxkKiBwRmllbGQsIGNvbnN0IENQREZfRGljdGlvbmFyeSogcFdpZGdldERpY3QpCit7CisgICAgdm9pZCAqclZhbHVlID0gTlVMTDsKKyAgICBpZiAobV9Db250cm9sTWFwLkxvb2t1cCgoQ1BERl9EaWN0aW9uYXJ5KilwV2lkZ2V0RGljdCwgclZhbHVlKSkgeworICAgICAgICByZXR1cm4gKENQREZfRm9ybUNvbnRyb2wqKXJWYWx1ZTsKKyAgICB9CisgICAgQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2wgPSBGWF9ORVcgQ1BERl9Gb3JtQ29udHJvbCgoQ1BERl9Gb3JtRmllbGQqKXBGaWVsZCwgKENQREZfRGljdGlvbmFyeSopcFdpZGdldERpY3QpOworICAgIGlmIChwQ29udHJvbCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBtX0NvbnRyb2xNYXAuU2V0QXQoKENQREZfRGljdGlvbmFyeSopcFdpZGdldERpY3QsIHBDb250cm9sKTsKKyAgICAoKENQREZfRm9ybUZpZWxkKilwRmllbGQpLT5tX0NvbnRyb2xMaXN0LkFkZChwQ29udHJvbCk7CisgICAgcmV0dXJuIHBDb250cm9sOworfQorQ1BERl9Gb3JtRmllbGQqIENQREZfSW50ZXJGb3JtOjpDaGVja1JlcXVpcmVkRmllbGRzKGNvbnN0IENGWF9QdHJBcnJheSAqZmllbGRzLCBGWF9CT09MIGJJbmNsdWRlT3JFeGNsdWRlKSBjb25zdAoreworICAgIGludCBuQ291bnQgPSBtX3BGaWVsZFRyZWUtPm1fUm9vdC5Db3VudEZpZWxkcygpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkNvdW50OyBpKyspIHsKKyAgICAgICAgQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCA9IG1fcEZpZWxkVHJlZS0+bV9Sb290LkdldEZpZWxkKGkpOworICAgICAgICBpZiAocEZpZWxkID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEZYX0lOVDMyIGlUeXBlID0gcEZpZWxkLT5HZXRUeXBlKCk7CisgICAgICAgIGlmIChpVHlwZSA9PSBDUERGX0Zvcm1GaWVsZDo6UHVzaEJ1dHRvbiB8fCBpVHlwZSA9PSBDUERGX0Zvcm1GaWVsZDo6Q2hlY2tCb3ggfHwgaVR5cGUgPT0gQ1BERl9Gb3JtRmllbGQ6Okxpc3RCb3gpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEZYX0RXT1JEIGR3RmxhZ3MgPSBwRmllbGQtPkdldEZpZWxkRmxhZ3MoKTsKKyAgICAgICAgaWYgKGR3RmxhZ3MgJiAweDA0KSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBGWF9CT09MIGJGaW5kID0gVFJVRTsKKyAgICAgICAgaWYgKGZpZWxkcyAhPSBOVUxMKSB7CisgICAgICAgICAgICBiRmluZCA9IGZpZWxkcy0+RmluZChwRmllbGQsIDApID49IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChiSW5jbHVkZU9yRXhjbHVkZSAmJiBiRmluZCkgfHwgKCFiSW5jbHVkZU9yRXhjbHVkZSAmJiAhYkZpbmQpKSB7CisgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkgKnBGaWVsZERpY3QgPSBwRmllbGQtPm1fcERpY3Q7CisgICAgICAgICAgICBpZiAoKGR3RmxhZ3MgJiAweDAyKSAhPSAwICYmIHBGaWVsZERpY3QtPkdldFN0cmluZygiViIpLklzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBwRmllbGQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CitDRkRGX0RvY3VtZW50KiBDUERGX0ludGVyRm9ybTo6RXhwb3J0VG9GREYoRlhfV1NUUiBwZGZfcGF0aCwgRlhfQk9PTCBiU2ltcGxlRmlsZVNwZWMpIGNvbnN0Cit7CisgICAgQ0ZYX1B0ckFycmF5IGZpZWxkczsKKyAgICBpbnQgbkNvdW50ID0gbV9wRmllbGRUcmVlLT5tX1Jvb3QuQ291bnRGaWVsZHMoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5Db3VudDsgaSArKykgeworICAgICAgICBDUERGX0Zvcm1GaWVsZCogcEZpZWxkID0gbV9wRmllbGRUcmVlLT5tX1Jvb3QuR2V0RmllbGQoaSk7CisgICAgICAgIGZpZWxkcy5BZGQocEZpZWxkKTsKKyAgICB9CisgICAgcmV0dXJuIEV4cG9ydFRvRkRGKHBkZl9wYXRoLCBmaWVsZHMsIFRSVUUsIGJTaW1wbGVGaWxlU3BlYyk7Cit9CitDRlhfV2lkZVN0cmluZyBGSUxFU1BFQ19FbmNvZGVGaWxlTmFtZShGWF9XU1RSIGZpbGVwYXRoKTsKK0NGREZfRG9jdW1lbnQqIENQREZfSW50ZXJGb3JtOjpFeHBvcnRUb0ZERihGWF9XU1RSIHBkZl9wYXRoLCBDRlhfUHRyQXJyYXkmIGZpZWxkcywgRlhfQk9PTCBiSW5jbHVkZU9yRXhjbHVkZSwgRlhfQk9PTCBiU2ltcGxlRmlsZVNwZWMpIGNvbnN0Cit7CisgICAgQ0ZERl9Eb2N1bWVudCogcERvYyA9IENGREZfRG9jdW1lbnQ6OkNyZWF0ZU5ld0RvYygpOworICAgIGlmIChwRG9jID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcE1haW5EaWN0ID0gcERvYy0+R2V0Um9vdCgpLT5HZXREaWN0KCJGREYiKTsKKyAgICBpZiAoIXBkZl9wYXRoLklzRW1wdHkoKSkgeworICAgICAgICBpZiAoYlNpbXBsZUZpbGVTcGVjKSB7CisgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyB3c0ZpbGVQYXRoID0gRklMRVNQRUNfRW5jb2RlRmlsZU5hbWUocGRmX3BhdGgpOworICAgICAgICAgICAgcE1haW5EaWN0LT5TZXRBdFN0cmluZyhGWF9CU1RSQygiRiIpLCBDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUod3NGaWxlUGF0aCkpOworICAgICAgICAgICAgcE1haW5EaWN0LT5TZXRBdFN0cmluZyhGWF9CU1RSQygiVUYiKSwgUERGX0VuY29kZVRleHQod3NGaWxlUGF0aCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQ1BERl9GaWxlU3BlYyBmaWxlc3BlYzsKKyAgICAgICAgICAgIGZpbGVzcGVjLlNldEZpbGVOYW1lKHBkZl9wYXRoKTsKKyAgICAgICAgICAgIHBNYWluRGljdC0+U2V0QXQoIkYiLCAoQ1BERl9PYmplY3QqKWZpbGVzcGVjKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBDUERGX0FycmF5KiBwRmllbGRzID0gQ1BERl9BcnJheTo6Q3JlYXRlKCk7CisgICAgaWYgKHBGaWVsZHMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcE1haW5EaWN0LT5TZXRBdCgiRmllbGRzIiwgcEZpZWxkcyk7CisgICAgaW50IG5Db3VudCA9IG1fcEZpZWxkVHJlZS0+bV9Sb290LkNvdW50RmllbGRzKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuQ291bnQ7IGkgKyspIHsKKyAgICAgICAgQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCA9IG1fcEZpZWxkVHJlZS0+bV9Sb290LkdldEZpZWxkKGkpOworICAgICAgICBpZiAocEZpZWxkID09IE5VTEwgfHwgcEZpZWxkLT5HZXRUeXBlKCkgPT0gQ1BERl9Gb3JtRmllbGQ6OlB1c2hCdXR0b24pIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEZYX0RXT1JEIGR3RmxhZ3MgPSBwRmllbGQtPkdldEZpZWxkRmxhZ3MoKTsKKyAgICAgICAgaWYgKGR3RmxhZ3MgJiAweDA0KSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBGWF9CT09MIGJGaW5kID0gZmllbGRzLkZpbmQocEZpZWxkLCAwKSA+PSAwOworICAgICAgICBpZiAoKGJJbmNsdWRlT3JFeGNsdWRlICYmIGJGaW5kKSB8fCAoIWJJbmNsdWRlT3JFeGNsdWRlICYmICFiRmluZCkpIHsKKyAgICAgICAgICAgIGlmICgoZHdGbGFncyAmIDB4MDIpICE9IDAgJiYgcEZpZWxkLT5tX3BEaWN0LT5HZXRTdHJpbmcoIlYiKS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIGZ1bGxuYW1lID0gR2V0RnVsbE5hbWUocEZpZWxkLT5HZXRGaWVsZERpY3QoKSk7CisgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBGaWVsZERpY3QgPSBDUERGX0RpY3Rpb25hcnk6OkNyZWF0ZSgpOworICAgICAgICAgICAgaWYgKHBGaWVsZERpY3QgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQ1BERl9TdHJpbmcqIHBTdHJpbmcgPSBDUERGX1N0cmluZzo6Q3JlYXRlKGZ1bGxuYW1lKTsKKyAgICAgICAgICAgIGlmIChwU3RyaW5nID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBwRmllbGREaWN0LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwRmllbGREaWN0LT5TZXRBdCgiVCIsIHBTdHJpbmcpOworICAgICAgICAgICAgaWYgKHBGaWVsZC0+R2V0VHlwZSgpID09IENQREZfRm9ybUZpZWxkOjpDaGVja0JveCB8fCBwRmllbGQtPkdldFR5cGUoKSA9PSBDUERGX0Zvcm1GaWVsZDo6UmFkaW9CdXR0b24pIHsKKyAgICAgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyBjc0V4cG9ydCA9IHBGaWVsZC0+R2V0Q2hlY2tWYWx1ZShGQUxTRSk7CisgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3NCRXhwb3J0ID0gUERGX0VuY29kZVRleHQoY3NFeHBvcnQpOworICAgICAgICAgICAgICAgIENQREZfT2JqZWN0KiBwT3B0ID0gRlBERl9HZXRGaWVsZEF0dHIocEZpZWxkLT5tX3BEaWN0LCAiT3B0Iik7CisgICAgICAgICAgICAgICAgaWYgKHBPcHQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBwRmllbGREaWN0LT5TZXRBdE5hbWUoIlYiLCBjc0JFeHBvcnQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBGaWVsZERpY3QtPlNldEF0U3RyaW5nKCJWIiwgY3NCRXhwb3J0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIENQREZfT2JqZWN0KiBwViA9IEZQREZfR2V0RmllbGRBdHRyKHBGaWVsZC0+bV9wRGljdCwgIlYiKTsKKyAgICAgICAgICAgICAgICBpZiAocFYgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBwRmllbGREaWN0LT5TZXRBdCgiViIsIHBWLT5DbG9uZShUUlVFKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcEZpZWxkcy0+QWRkKHBGaWVsZERpY3QpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwRG9jOworfQorY29uc3Qgc3RydWN0IF9TdXBwb3J0RmllbGRFbmNvZGluZyB7CisgICAgRlhfTFBDU1RSIG1fbmFtZTsKKyAgICBGWF9JTlQzMiBtX2NvZGVQYWdlOworfSBnX2ZpZWxkRW5jb2RpbmdbXSA9IHsKKyAgICAiQmlnRml2ZSIsIDk1MCwKKyAgICAiR0JLIiwgOTM2LAorICAgICJTaGlmdC1KSVMiLCA5MzIsCisgICAgIlVIQyIsIDk0OSwKK307CitzdGF0aWMgdm9pZCBGUERGRE9DX0ZERl9HZXRGaWVsZFZhbHVlKENQREZfRGljdGlvbmFyeSAqcEZpZWxkRGljdCwgQ0ZYX1dpZGVTdHJpbmcgJmNzVmFsdWUsIENGWF9CeXRlU3RyaW5nICZic0VuY29kaW5nKQoreworICAgIEFTU0VSVChwRmllbGREaWN0ICE9IE5VTEwpOworICAgIENGWF9CeXRlU3RyaW5nIGNzQlZhbHVlID0gcEZpZWxkRGljdC0+R2V0U3RyaW5nKCJWIik7CisgICAgRlhfSU5UMzIgaUNvdW50ID0gc2l6ZW9mKGdfZmllbGRFbmNvZGluZykgLyBzaXplb2YoZ19maWVsZEVuY29kaW5nWzBdKTsKKyAgICBGWF9JTlQzMiBpID0gMDsKKyAgICBmb3IgKDsgaSA8IGlDb3VudDsgKytpKQorICAgICAgICBpZiAoYnNFbmNvZGluZyA9PSBnX2ZpZWxkRW5jb2RpbmdbaV0ubV9uYW1lKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIGlmIChpIDwgaUNvdW50KSB7CisgICAgICAgIENGWF9DaGFyTWFwICpwQ2hhck1hcCA9IENGWF9DaGFyTWFwOjpHZXREZWZhdWx0TWFwcGVyKGdfZmllbGRFbmNvZGluZ1tpXS5tX2NvZGVQYWdlKTsKKyAgICAgICAgRlhTWVNfYXNzZXJ0KHBDaGFyTWFwICE9IE5VTEwpOworICAgICAgICBjc1ZhbHVlLkNvbnZlcnRGcm9tKGNzQlZhbHVlLCBwQ2hhck1hcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgY3NUZW1wID0gY3NCVmFsdWUuTGVmdCgyKTsKKyAgICBpZiAoY3NUZW1wID09ICJceEZGXHhGRSIgfHwgY3NUZW1wID09ICJceEZFXHhGRiIpIHsKKyAgICAgICAgY3NWYWx1ZSA9IFBERl9EZWNvZGVUZXh0KGNzQlZhbHVlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjc1ZhbHVlID0gQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChjc0JWYWx1ZSk7CisgICAgfQorfQordm9pZCBDUERGX0ludGVyRm9ybTo6RkRGX0ltcG9ydEZpZWxkKENQREZfRGljdGlvbmFyeSogcEZpZWxkRGljdCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHBhcmVudF9uYW1lLCBGWF9CT09MIGJOb3RpZnksIGludCBuTGV2ZWwpCit7CisgICAgQ0ZYX1dpZGVTdHJpbmcgbmFtZTsKKyAgICBpZiAoIXBhcmVudF9uYW1lLklzRW1wdHkoKSkgeworICAgICAgICBuYW1lID0gcGFyZW50X25hbWUgKyBMIi4iOworICAgIH0KKyAgICBuYW1lICs9IHBGaWVsZERpY3QtPkdldFVuaWNvZGVUZXh0KCJUIik7CisgICAgQ1BERl9BcnJheSogcEtpZHMgPSBwRmllbGREaWN0LT5HZXRBcnJheSgiS2lkcyIpOworICAgIGlmIChwS2lkcykgeworICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcEtpZHMtPkdldENvdW50KCk7IGkgKyspIHsKKyAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcEtpZCA9IHBLaWRzLT5HZXREaWN0KGkpOworICAgICAgICAgICAgaWYgKHBLaWQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5MZXZlbCA8PSBuTWF4UmVjdXJzaW9uKSB7CisgICAgICAgICAgICAgICAgRkRGX0ltcG9ydEZpZWxkKHBLaWQsIG5hbWUsIGJOb3RpZnksIG5MZXZlbCArIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFwRmllbGREaWN0LT5LZXlFeGlzdCgiViIpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCA9IG1fcEZpZWxkVHJlZS0+R2V0RmllbGQobmFtZSk7CisgICAgaWYgKHBGaWVsZCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZYX1dpZGVTdHJpbmcgY3NXVmFsdWU7CisgICAgRlBERkRPQ19GREZfR2V0RmllbGRWYWx1ZShwRmllbGREaWN0LCBjc1dWYWx1ZSwgbV9ic0VuY29kaW5nKTsKKyAgICBpbnQgaVR5cGUgPSBwRmllbGQtPkdldEZpZWxkVHlwZSgpOworICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgeworICAgICAgICBpbnQgaVJldCA9IDA7CisgICAgICAgIGlmIChpVHlwZSA9PSBGSUVMRFRZUEVfTElTVEJPWCkgeworICAgICAgICAgICAgaVJldCA9IG1fcEZvcm1Ob3RpZnktPkJlZm9yZVNlbGVjdGlvbkNoYW5nZShwRmllbGQsIGNzV1ZhbHVlKTsKKyAgICAgICAgfSBlbHNlIGlmIChpVHlwZSA9PSBGSUVMRFRZUEVfQ09NQk9CT1ggfHwgaVR5cGUgPT0gRklFTERUWVBFX1RFWFRGSUVMRCkgeworICAgICAgICAgICAgaVJldCA9IG1fcEZvcm1Ob3RpZnktPkJlZm9yZVZhbHVlQ2hhbmdlKHBGaWVsZCwgY3NXVmFsdWUpOworICAgICAgICB9CisgICAgICAgIGlmIChpUmV0IDwgMCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIENGWF9CeXRlQXJyYXkgc3RhdHVzQXJyYXk7CisgICAgaWYgKGlUeXBlID09IEZJRUxEVFlQRV9DSEVDS0JPWCB8fCBpVHlwZSA9PSBGSUVMRFRZUEVfUkFESU9CVVRUT04pIHsKKyAgICAgICAgU2F2ZUNoZWNrZWRGaWVsZFN0YXR1cyhwRmllbGQsIHN0YXR1c0FycmF5KTsKKyAgICB9CisgICAgcEZpZWxkLT5TZXRWYWx1ZShjc1dWYWx1ZSk7CisgICAgQ1BERl9Gb3JtRmllbGQ6OlR5cGUgZVR5cGUgPSBwRmllbGQtPkdldFR5cGUoKTsKKyAgICBpZiAoKGVUeXBlID09IENQREZfRm9ybUZpZWxkOjpMaXN0Qm94IHx8IGVUeXBlID09IENQREZfRm9ybUZpZWxkOjpDb21ib0JveCkgJiYgcEZpZWxkRGljdC0+S2V5RXhpc3QoIk9wdCIpKSB7CisgICAgICAgIHBGaWVsZC0+bV9wRGljdC0+U2V0QXQoIk9wdCIsIHBGaWVsZERpY3QtPkdldEVsZW1lbnRWYWx1ZSgiT3B0IiktPkNsb25lKFRSVUUpKTsKKyAgICB9CisgICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7CisgICAgICAgIGlmIChpVHlwZSA9PSBGSUVMRFRZUEVfQ0hFQ0tCT1ggfHwgaVR5cGUgPT0gRklFTERUWVBFX1JBRElPQlVUVE9OKSB7CisgICAgICAgICAgICBtX3BGb3JtTm90aWZ5LT5BZnRlckNoZWNrZWRTdGF0dXNDaGFuZ2UocEZpZWxkLCBzdGF0dXNBcnJheSk7CisgICAgICAgIH0gZWxzZSBpZiAoaVR5cGUgPT0gRklFTERUWVBFX0xJU1RCT1gpIHsKKyAgICAgICAgICAgIG1fcEZvcm1Ob3RpZnktPkFmdGVyU2VsZWN0aW9uQ2hhbmdlKHBGaWVsZCk7CisgICAgICAgIH0gZWxzZSBpZiAoaVR5cGUgPT0gRklFTERUWVBFX0NPTUJPQk9YIHx8IGlUeXBlID09IEZJRUxEVFlQRV9URVhURklFTEQpIHsKKyAgICAgICAgICAgIG1fcEZvcm1Ob3RpZnktPkFmdGVyVmFsdWVDaGFuZ2UocEZpZWxkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoQ1BERl9JbnRlckZvcm06Om1fYlVwZGF0ZUFQKSB7CisgICAgICAgIHBGaWVsZC0+VXBkYXRlQVAoTlVMTCk7CisgICAgfQorfQorRlhfQk9PTCBDUERGX0ludGVyRm9ybTo6SW1wb3J0RnJvbUZERihjb25zdCBDRkRGX0RvY3VtZW50KiBwRkRGLCBGWF9CT09MIGJOb3RpZnkpCit7CisgICAgaWYgKHBGREYgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcE1haW5EaWN0ID0gcEZERi0+R2V0Um9vdCgpLT5HZXREaWN0KCJGREYiKTsKKyAgICBpZiAocE1haW5EaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDUERGX0FycmF5KiBwRmllbGRzID0gcE1haW5EaWN0LT5HZXRBcnJheSgiRmllbGRzIik7CisgICAgaWYgKHBGaWVsZHMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fYnNFbmNvZGluZyA9IHBNYWluRGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJFbmNvZGluZyIpKTsKKyAgICBpZiAoYk5vdGlmeSAmJiBtX3BGb3JtTm90aWZ5ICE9IE5VTEwpIHsKKyAgICAgICAgaW50IGlSZXQgPSBtX3BGb3JtTm90aWZ5LT5CZWZvcmVGb3JtSW1wb3J0RGF0YSh0aGlzKTsKKyAgICAgICAgaWYgKGlSZXQgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHBGaWVsZHMtPkdldENvdW50KCk7IGkgKyspIHsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRmllbGQgPSBwRmllbGRzLT5HZXREaWN0KGkpOworICAgICAgICBpZiAocEZpZWxkID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEZERl9JbXBvcnRGaWVsZChwRmllbGQsIEwiIiwgYk5vdGlmeSk7CisgICAgfQorICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgeworICAgICAgICBtX3BGb3JtTm90aWZ5LT5BZnRlckZvcm1JbXBvcnREYXRhKHRoaXMpOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK3ZvaWQgQ1BERl9JbnRlckZvcm06OlNldEZvcm1Ob3RpZnkoY29uc3QgQ1BERl9Gb3JtTm90aWZ5KiBwTm90aWZ5KQoreworICAgIG1fcEZvcm1Ob3RpZnkgPSAoQ1BERl9Gb3JtTm90aWZ5KilwTm90aWZ5OworfQoraW50IENQREZfSW50ZXJGb3JtOjpHZXRQYWdlV2l0aFdpZGdldChpbnQgaUN1clBhZ2UsIEZYX0JPT0wgYk5leHQpCit7CisgICAgaWYgKGlDdXJQYWdlIDwgMCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGludCBpUGFnZUNvdW50ID0gbV9wRG9jdW1lbnQtPkdldFBhZ2VDb3VudCgpOworICAgIGlmIChpQ3VyUGFnZSA+PSBpUGFnZUNvdW50KSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaW50IGlOZXdQYWdlID0gaUN1clBhZ2U7CisgICAgZG8geworICAgICAgICBpTmV3UGFnZSArPSBiTmV4dCA/IDEgOiAtMTsKKyAgICAgICAgaWYgKGlOZXdQYWdlID49IGlQYWdlQ291bnQpIHsKKyAgICAgICAgICAgIGlOZXdQYWdlID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoaU5ld1BhZ2UgPCAwKSB7CisgICAgICAgICAgICBpTmV3UGFnZSA9IGlQYWdlQ291bnQgLSAxOworICAgICAgICB9CisgICAgICAgIGlmIChpTmV3UGFnZSA9PSBpQ3VyUGFnZSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QgPSBtX3BEb2N1bWVudC0+R2V0UGFnZShpTmV3UGFnZSk7CisgICAgICAgIGlmIChwUGFnZURpY3QgPT0gTlVMTCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQ1BERl9BcnJheSogcEFubm90cyA9IHBQYWdlRGljdC0+R2V0QXJyYXkoIkFubm90cyIpOworICAgICAgICBpZiAocEFubm90cyA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBGWF9EV09SRCBkd0NvdW50ID0gcEFubm90cy0+R2V0Q291bnQoKTsKKyAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IGR3Q291bnQ7IGkgKyspIHsKKyAgICAgICAgICAgIENQREZfT2JqZWN0KiBwQW5ub3REaWN0ID0gcEFubm90cy0+R2V0RWxlbWVudFZhbHVlKGkpOworICAgICAgICAgICAgaWYgKHBBbm5vdERpY3QgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2wgPSBOVUxMOworICAgICAgICAgICAgaWYgKG1fQ29udHJvbE1hcC5Mb29rdXAocEFubm90RGljdCwgKHZvaWQqJilwQ29udHJvbCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaU5ld1BhZ2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChUUlVFKTsKKyAgICByZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmZG9jL2RvY19mb3JtY29udHJvbC5jcHAgYi9jb3JlL3NyYy9mcGRmZG9jL2RvY19mb3JtY29udHJvbC5jcHAKaW5kZXggZjkyYjg3ZS4uNjFjZDk4MCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmRvYy9kb2NfZm9ybWNvbnRyb2wuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX2Zvcm1jb250cm9sLmNwcApAQCAtMSw0NjEgKzEsNDYxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mcGRmZG9jL2ZwZGZfZG9jLmgiDQotQ1BERl9Gb3JtQ29udHJvbDo6Q1BERl9Gb3JtQ29udHJvbChDUERGX0Zvcm1GaWVsZCogcEZpZWxkLCBDUERGX0RpY3Rpb25hcnkqIHBXaWRnZXREaWN0KQ0KLXsNCi0gICAgbV9wRmllbGQgPSBwRmllbGQ7DQotICAgIG1fcFdpZGdldERpY3QgPSBwV2lkZ2V0RGljdDsNCi0gICAgbV9wRm9ybSA9IG1fcEZpZWxkLT5tX3BGb3JtOw0KLX0NCi1DRlhfRmxvYXRSZWN0IENQREZfRm9ybUNvbnRyb2w6OkdldFJlY3QoKQ0KLXsNCi0gICAgcmV0dXJuIG1fcFdpZGdldERpY3QtPkdldFJlY3QoIlJlY3QiKTsNCi19DQotQ0ZYX0J5dGVTdHJpbmcgQ1BERl9Gb3JtQ29udHJvbDo6R2V0T25TdGF0ZU5hbWUoKQ0KLXsNCi0gICAgQVNTRVJUKEdldFR5cGUoKSA9PSBDUERGX0Zvcm1GaWVsZDo6Q2hlY2tCb3ggfHwgR2V0VHlwZSgpID09IENQREZfRm9ybUZpZWxkOjpSYWRpb0J1dHRvbik7DQotICAgIENGWF9CeXRlU3RyaW5nIGNzT247DQotICAgIENQREZfRGljdGlvbmFyeSogcEFQID0gbV9wV2lkZ2V0RGljdC0+R2V0RGljdCgiQVAiKTsNCi0gICAgaWYgKHBBUCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gY3NPbjsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBOID0gcEFQLT5HZXREaWN0KCJOIik7DQotICAgIGlmIChwTiA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gY3NPbjsNCi0gICAgfQ0KLSAgICBGWF9QT1NJVElPTiBwb3MgPSBwTi0+R2V0U3RhcnRQb3MoKTsNCi0gICAgd2hpbGUgKHBvcykgew0KLSAgICAgICAgcE4tPkdldE5leHRFbGVtZW50KHBvcywgY3NPbik7DQotICAgICAgICBpZiAoY3NPbiAhPSAiT2ZmIikgew0KLSAgICAgICAgICAgIHJldHVybiBjc09uOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZygpOw0KLX0NCi12b2lkIENQREZfRm9ybUNvbnRyb2w6OlNldE9uU3RhdGVOYW1lKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBjc09uKQ0KLXsNCi0gICAgQVNTRVJUKEdldFR5cGUoKSA9PSBDUERGX0Zvcm1GaWVsZDo6Q2hlY2tCb3ggfHwgR2V0VHlwZSgpID09IENQREZfRm9ybUZpZWxkOjpSYWRpb0J1dHRvbik7DQotICAgIENGWF9CeXRlU3RyaW5nIGNzVmFsdWUgPSBjc09uOw0KLSAgICBpZiAoY3NWYWx1ZS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIGNzVmFsdWUgPSAiWWVzIjsNCi0gICAgfQ0KLSAgICBpZiAoY3NWYWx1ZSA9PSAiT2ZmIikgew0KLSAgICAgICAgY3NWYWx1ZSA9ICJZZXMiOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIGNzQVMgPSBtX3BXaWRnZXREaWN0LT5HZXRTdHJpbmcoIkFTIiwgIk9mZiIpOw0KLSAgICBpZiAoY3NBUyAhPSAiT2ZmIikgew0KLSAgICAgICAgbV9wV2lkZ2V0RGljdC0+U2V0QXROYW1lKCJBUyIsIGNzVmFsdWUpOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcEFQID0gbV9wV2lkZ2V0RGljdC0+R2V0RGljdCgiQVAiKTsNCi0gICAgaWYgKHBBUCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhfUE9TSVRJT04gcG9zMSA9IHBBUC0+R2V0U3RhcnRQb3MoKTsNCi0gICAgd2hpbGUgKHBvczEpIHsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIGNzS2V5MTsNCi0gICAgICAgIENQREZfT2JqZWN0KiBwT2JqMSA9IHBBUC0+R2V0TmV4dEVsZW1lbnQocG9zMSwgY3NLZXkxKTsNCi0gICAgICAgIGlmIChwT2JqMSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBDUERGX09iamVjdCogcE9iakRpcmVjdDEgPSBwT2JqMS0+R2V0RGlyZWN0KCk7DQotICAgICAgICBpZiAocE9iakRpcmVjdDEtPkdldFR5cGUoKSAhPSBQREZPQkpfRElDVElPTkFSWSkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwU3ViRGljdCA9IChDUERGX0RpY3Rpb25hcnkqKXBPYmpEaXJlY3QxOw0KLSAgICAgICAgRlhfUE9TSVRJT04gcG9zMiA9IHBTdWJEaWN0LT5HZXRTdGFydFBvcygpOw0KLSAgICAgICAgd2hpbGUgKHBvczIpIHsNCi0gICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBjc0tleTI7DQotICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBPYmoyID0gcFN1YkRpY3QtPkdldE5leHRFbGVtZW50KHBvczIsIGNzS2V5Mik7DQotICAgICAgICAgICAgaWYgKHBPYmoyID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChjc0tleTIgIT0gIk9mZiIpIHsNCi0gICAgICAgICAgICAgICAgcFN1YkRpY3QtPlJlcGxhY2VLZXkoY3NLZXkyLCBjc1ZhbHVlKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENQREZfRm9ybUNvbnRyb2w6OkdldENoZWNrZWRBUFN0YXRlKCkNCi17DQotICAgIEFTU0VSVChHZXRUeXBlKCkgPT0gQ1BERl9Gb3JtRmllbGQ6OkNoZWNrQm94IHx8IEdldFR5cGUoKSA9PSBDUERGX0Zvcm1GaWVsZDo6UmFkaW9CdXR0b24pOw0KLSAgICBDRlhfQnl0ZVN0cmluZyBjc09uID0gR2V0T25TdGF0ZU5hbWUoKTsNCi0gICAgaWYgKEdldFR5cGUoKSA9PSBDUERGX0Zvcm1GaWVsZDo6UmFkaW9CdXR0b24gfHwgR2V0VHlwZSgpID09IENQREZfRm9ybUZpZWxkOjpDaGVja0JveCkgew0KLSAgICAgICAgQ1BERl9PYmplY3QqIHBPcHQgPSBGUERGX0dldEZpZWxkQXR0cihtX3BGaWVsZC0+bV9wRGljdCwgIk9wdCIpOw0KLSAgICAgICAgaWYgKHBPcHQgIT0gTlVMTCAmJiBwT3B0LT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICAgICAgaW50IGlJbmRleCA9IG1fcEZpZWxkLT5HZXRDb250cm9sSW5kZXgodGhpcyk7DQotICAgICAgICAgICAgY3NPbi5Gb3JtYXQoIiVkIiwgaUluZGV4KTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoY3NPbi5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIGNzT24gPSAiWWVzIjsNCi0gICAgfQ0KLSAgICByZXR1cm4gY3NPbjsNCi19DQotQ0ZYX1dpZGVTdHJpbmcgQ1BERl9Gb3JtQ29udHJvbDo6R2V0RXhwb3J0VmFsdWUoKQ0KLXsNCi0gICAgQVNTRVJUKEdldFR5cGUoKSA9PSBDUERGX0Zvcm1GaWVsZDo6Q2hlY2tCb3ggfHwgR2V0VHlwZSgpID09IENQREZfRm9ybUZpZWxkOjpSYWRpb0J1dHRvbik7DQotICAgIENGWF9CeXRlU3RyaW5nIGNzT24gPSBHZXRPblN0YXRlTmFtZSgpOw0KLSAgICBpZiAoR2V0VHlwZSgpID09IENQREZfRm9ybUZpZWxkOjpSYWRpb0J1dHRvbiB8fCBHZXRUeXBlKCkgPT0gQ1BERl9Gb3JtRmllbGQ6OkNoZWNrQm94KSB7DQotICAgICAgICBDUERGX09iamVjdCogcE9wdCA9IEZQREZfR2V0RmllbGRBdHRyKG1fcEZpZWxkLT5tX3BEaWN0LCAiT3B0Iik7DQotICAgICAgICBpZiAocE9wdCAhPSBOVUxMICYmIHBPcHQtPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgICAgICBpbnQgaUluZGV4ID0gbV9wRmllbGQtPkdldENvbnRyb2xJbmRleCh0aGlzKTsNCi0gICAgICAgICAgICBjc09uID0gKChDUERGX0FycmF5KilwT3B0KS0+R2V0U3RyaW5nKGlJbmRleCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKGNzT24uSXNFbXB0eSgpKSB7DQotICAgICAgICBjc09uID0gIlllcyI7DQotICAgIH0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcgY3NXT24gPSBQREZfRGVjb2RlVGV4dChjc09uKTsNCi0gICAgcmV0dXJuIGNzV09uOw0KLX0NCi1GWF9CT09MIENQREZfRm9ybUNvbnRyb2w6OklzQ2hlY2tlZCgpDQotew0KLSAgICBBU1NFUlQoR2V0VHlwZSgpID09IENQREZfRm9ybUZpZWxkOjpDaGVja0JveCB8fCBHZXRUeXBlKCkgPT0gQ1BERl9Gb3JtRmllbGQ6OlJhZGlvQnV0dG9uKTsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgY3NPbiA9IEdldE9uU3RhdGVOYW1lKCk7DQotICAgIENGWF9CeXRlU3RyaW5nIGNzQVMgPSBtX3BXaWRnZXREaWN0LT5HZXRTdHJpbmcoIkFTIik7DQotICAgIHJldHVybiBjc0FTID09IGNzT247DQotfQ0KLUZYX0JPT0wgQ1BERl9Gb3JtQ29udHJvbDo6SXNEZWZhdWx0Q2hlY2tlZCgpDQotew0KLSAgICBBU1NFUlQoR2V0VHlwZSgpID09IENQREZfRm9ybUZpZWxkOjpDaGVja0JveCB8fCBHZXRUeXBlKCkgPT0gQ1BERl9Gb3JtRmllbGQ6OlJhZGlvQnV0dG9uKTsNCi0gICAgQ1BERl9PYmplY3QqIHBEViA9IEZQREZfR2V0RmllbGRBdHRyKG1fcEZpZWxkLT5tX3BEaWN0LCAiRFYiKTsNCi0gICAgaWYgKHBEViA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgY3NEViA9IHBEVi0+R2V0U3RyaW5nKCk7DQotICAgIENGWF9CeXRlU3RyaW5nIGNzT24gPSBHZXRPblN0YXRlTmFtZSgpOw0KLSAgICByZXR1cm4gKGNzRFYgPT0gY3NPbik7DQotfQ0KLXZvaWQgQ1BERl9Gb3JtQ29udHJvbDo6Q2hlY2tDb250cm9sKEZYX0JPT0wgYkNoZWNrZWQpDQotew0KLSAgICBBU1NFUlQoR2V0VHlwZSgpID09IENQREZfRm9ybUZpZWxkOjpDaGVja0JveCB8fCBHZXRUeXBlKCkgPT0gQ1BERl9Gb3JtRmllbGQ6OlJhZGlvQnV0dG9uKTsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgY3NPbiA9IEdldE9uU3RhdGVOYW1lKCk7DQotICAgIENGWF9CeXRlU3RyaW5nIGNzT2xkQVMgPSBtX3BXaWRnZXREaWN0LT5HZXRTdHJpbmcoIkFTIiwgIk9mZiIpOw0KLSAgICBDRlhfQnl0ZVN0cmluZyBjc0FTID0gIk9mZiI7DQotICAgIGlmIChiQ2hlY2tlZCkgew0KLSAgICAgICAgY3NBUyA9IGNzT247DQotICAgIH0NCi0gICAgaWYgKGNzT2xkQVMgPT0gY3NBUykgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fcFdpZGdldERpY3QtPlNldEF0TmFtZSgiQVMiLCBjc0FTKTsNCi0gICAgbV9wRm9ybS0+bV9iVXBkYXRlZCA9IFRSVUU7DQotfQ0KLUNQREZfU3RyZWFtKiBGUERGRE9DX0dldEFubm90QVAoQ1BERl9EaWN0aW9uYXJ5KiBwQW5ub3REaWN0LCBDUERGX0Fubm90OjpBcHBlYXJhbmNlTW9kZSBtb2RlKTsNCi12b2lkIENQREZfRm9ybUNvbnRyb2w6OkRyYXdDb250cm9sKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIENQREZfUGFnZSogcFBhZ2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0Fubm90OjpBcHBlYXJhbmNlTW9kZSBtb2RlLCBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zKQ0KLXsNCi0gICAgaWYgKG1fcFdpZGdldERpY3QtPkdldEludGVnZXIoIkYiKSAmIEFOTk9URkxBR19ISURERU4pIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDUERGX1N0cmVhbSogcFN0cmVhbSA9IEZQREZET0NfR2V0QW5ub3RBUChtX3BXaWRnZXREaWN0LCBtb2RlKTsNCi0gICAgaWYgKHBTdHJlYW0gPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENGWF9GbG9hdFJlY3QgZm9ybV9iYm94ID0gcFN0cmVhbS0+R2V0RGljdCgpLT5HZXRSZWN0KCJCQm94Iik7DQotICAgIENGWF9BZmZpbmVNYXRyaXggZm9ybV9tYXRyaXggPSBwU3RyZWFtLT5HZXREaWN0KCktPkdldE1hdHJpeCgiTWF0cml4Iik7DQotICAgIGZvcm1fbWF0cml4LlRyYW5zZm9ybVJlY3QoZm9ybV9iYm94KTsNCi0gICAgQ0ZYX0Zsb2F0UmVjdCBhcmVjdCA9IG1fcFdpZGdldERpY3QtPkdldFJlY3QoIlJlY3QiKTsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXg7DQotICAgIG1hdHJpeC5NYXRjaFJlY3QoYXJlY3QsIGZvcm1fYmJveCk7DQotICAgIG1hdHJpeC5Db25jYXQoKnBNYXRyaXgpOw0KLSAgICBDUERGX0Zvcm0gZm9ybShtX3BGaWVsZC0+bV9wRm9ybS0+bV9wRG9jdW1lbnQsIG1fcEZpZWxkLT5tX3BGb3JtLT5tX3BGb3JtRGljdC0+R2V0RGljdCgiRFIiKSwgcFN0cmVhbSk7DQotICAgIGZvcm0uUGFyc2VDb250ZW50KE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOw0KLSAgICBDUERGX1JlbmRlckNvbnRleHQgY29udGV4dDsNCi0gICAgY29udGV4dC5DcmVhdGUocFBhZ2UpOw0KLSAgICBjb250ZXh0LkRyYXdPYmplY3RMaXN0KHBEZXZpY2UsICZmb3JtLCAmbWF0cml4LCBwT3B0aW9ucyk7DQotfQ0KLWNvbnN0IEZYX0NIQVIqIGdfc0hpZ2hsaWdodGluZ01vZGVbXSA9IHsiTiIsICJJIiwgIk8iLCAiUCIsICJUIiwgIiJ9Ow0KLUNQREZfRm9ybUNvbnRyb2w6OkhpZ2hsaWdodGluZ01vZGUgQ1BERl9Gb3JtQ29udHJvbDo6R2V0SGlnaGxpZ2h0aW5nTW9kZSgpDQotew0KLSAgICBpZiAobV9wV2lkZ2V0RGljdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gSW52ZXJ0Ow0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIGNzSCA9IG1fcFdpZGdldERpY3QtPkdldFN0cmluZygiSCIsICJJIik7DQotICAgIGludCBpID0gMDsNCi0gICAgd2hpbGUgKGdfc0hpZ2hsaWdodGluZ01vZGVbaV1bMF0gIT0gJ1wwJykgew0KLSAgICAgICAgaWYgKGNzSC5FcXVhbChnX3NIaWdobGlnaHRpbmdNb2RlW2ldKSkgew0KLSAgICAgICAgICAgIHJldHVybiAoSGlnaGxpZ2h0aW5nTW9kZSlpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaSArKzsNCi0gICAgfQ0KLSAgICByZXR1cm4gSW52ZXJ0Ow0KLX0NCi1DUERGX0FwU2V0dGluZ3MgQ1BERl9Gb3JtQ29udHJvbDo6R2V0TUsoRlhfQk9PTCBiQ3JlYXRlKQ0KLXsNCi0gICAgaWYgKCFtX3BXaWRnZXREaWN0KSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDUERGX0FwU2V0dGluZ3MgbWsgPSBtX3BXaWRnZXREaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJNSyIpKTsNCi0gICAgaWYgKCFtayAmJiBiQ3JlYXRlKSB7DQotICAgICAgICBtayA9IENQREZfRGljdGlvbmFyeTo6Q3JlYXRlKCk7DQotICAgICAgICBpZiAobWsgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wV2lkZ2V0RGljdC0+U2V0QXQoRlhfQlNUUkMoIk1LIiksIG1rKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbWs7DQotfQ0KLUZYX0JPT0wgQ1BERl9Gb3JtQ29udHJvbDo6SGFzTUtFbnRyeShDRlhfQnl0ZVN0cmluZyBjc0VudHJ5KQ0KLXsNCi0gICAgQ1BERl9BcFNldHRpbmdzIG1rID0gR2V0TUsoRkFMU0UpOw0KLSAgICByZXR1cm4gbWsuSGFzTUtFbnRyeShjc0VudHJ5KTsNCi19DQotaW50IENQREZfRm9ybUNvbnRyb2w6OkdldFJvdGF0aW9uKCkNCi17DQotICAgIENQREZfQXBTZXR0aW5ncyBtayA9IEdldE1LKEZBTFNFKTsNCi0gICAgcmV0dXJuIG1rLkdldFJvdGF0aW9uKCk7DQotfQ0KLUZYX0FSR0IgQ1BERl9Gb3JtQ29udHJvbDo6R2V0Q29sb3IoaW50JiBpQ29sb3JUeXBlLCBDRlhfQnl0ZVN0cmluZyBjc0VudHJ5KQ0KLXsNCi0gICAgQ1BERl9BcFNldHRpbmdzIG1rID0gR2V0TUsoRkFMU0UpOw0KLSAgICByZXR1cm4gbWsuR2V0Q29sb3IoaUNvbG9yVHlwZSwgY3NFbnRyeSk7DQotfQ0KLUZYX0ZMT0FUIENQREZfRm9ybUNvbnRyb2w6OkdldE9yaWdpbmFsQ29sb3IoaW50IGluZGV4LCBDRlhfQnl0ZVN0cmluZyBjc0VudHJ5KQ0KLXsNCi0gICAgQ1BERl9BcFNldHRpbmdzIG1rID0gR2V0TUsoRkFMU0UpOw0KLSAgICByZXR1cm4gbWsuR2V0T3JpZ2luYWxDb2xvcihpbmRleCwgY3NFbnRyeSk7DQotfQ0KLXZvaWQgQ1BERl9Gb3JtQ29udHJvbDo6R2V0T3JpZ2luYWxDb2xvcihpbnQmIGlDb2xvclR5cGUsIEZYX0ZMT0FUIGZjWzRdLCBDRlhfQnl0ZVN0cmluZyBjc0VudHJ5KQ0KLXsNCi0gICAgQ1BERl9BcFNldHRpbmdzIG1rID0gR2V0TUsoRkFMU0UpOw0KLSAgICBtay5HZXRPcmlnaW5hbENvbG9yKGlDb2xvclR5cGUsIGZjLCBjc0VudHJ5KTsNCi19DQotQ0ZYX1dpZGVTdHJpbmcgQ1BERl9Gb3JtQ29udHJvbDo6R2V0Q2FwdGlvbihDRlhfQnl0ZVN0cmluZyBjc0VudHJ5KQ0KLXsNCi0gICAgQ1BERl9BcFNldHRpbmdzIG1rID0gR2V0TUsoRkFMU0UpOw0KLSAgICByZXR1cm4gbWsuR2V0Q2FwdGlvbihjc0VudHJ5KTsNCi19DQotQ1BERl9TdHJlYW0qIENQREZfRm9ybUNvbnRyb2w6OkdldEljb24oQ0ZYX0J5dGVTdHJpbmcgY3NFbnRyeSkNCi17DQotICAgIENQREZfQXBTZXR0aW5ncyBtayA9IEdldE1LKEZBTFNFKTsNCi0gICAgcmV0dXJuIG1rLkdldEljb24oY3NFbnRyeSk7DQotfQ0KLUNQREZfSWNvbkZpdCBDUERGX0Zvcm1Db250cm9sOjpHZXRJY29uRml0KCkNCi17DQotICAgIENQREZfQXBTZXR0aW5ncyBtayA9IEdldE1LKEZBTFNFKTsNCi0gICAgcmV0dXJuIG1rLkdldEljb25GaXQoKTsNCi19DQotaW50IENQREZfRm9ybUNvbnRyb2w6OkdldFRleHRQb3NpdGlvbigpDQotew0KLSAgICBDUERGX0FwU2V0dGluZ3MgbWsgPSBHZXRNSyhGQUxTRSk7DQotICAgIHJldHVybiBtay5HZXRUZXh0UG9zaXRpb24oKTsNCi19DQotQ1BERl9BY3Rpb24gQ1BERl9Gb3JtQ29udHJvbDo6R2V0QWN0aW9uKCkNCi17DQotICAgIGlmIChtX3BXaWRnZXREaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmIChtX3BXaWRnZXREaWN0LT5LZXlFeGlzdCgiQSIpKSB7DQotICAgICAgICByZXR1cm4gbV9wV2lkZ2V0RGljdC0+R2V0RGljdCgiQSIpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgQ1BERl9PYmplY3QqIHBPYmogPSBGUERGX0dldEZpZWxkQXR0cihtX3BGaWVsZC0+bV9wRGljdCwgIkEiKTsNCi0gICAgICAgIGlmIChwT2JqID09IE5VTEwpIHsNCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBwT2JqLT5HZXREaWN0KCk7DQotICAgIH0NCi19DQotQ1BERl9BQWN0aW9uIENQREZfRm9ybUNvbnRyb2w6OkdldEFkZGl0aW9uYWxBY3Rpb24oKQ0KLXsNCi0gICAgaWYgKG1fcFdpZGdldERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKG1fcFdpZGdldERpY3QtPktleUV4aXN0KCJBQSIpKSB7DQotICAgICAgICByZXR1cm4gbV9wV2lkZ2V0RGljdC0+R2V0RGljdCgiQUEiKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHJldHVybiBtX3BGaWVsZC0+R2V0QWRkaXRpb25hbEFjdGlvbigpOw0KLSAgICB9DQotfQ0KLUNQREZfRGVmYXVsdEFwcGVhcmFuY2UgQ1BERl9Gb3JtQ29udHJvbDo6R2V0RGVmYXVsdEFwcGVhcmFuY2UoKQ0KLXsNCi0gICAgaWYgKG1fcFdpZGdldERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKCk7DQotICAgIH0NCi0gICAgaWYgKG1fcFdpZGdldERpY3QtPktleUV4aXN0KCJEQSIpKSB7DQotICAgICAgICByZXR1cm4gbV9wV2lkZ2V0RGljdC0+R2V0U3RyaW5nKCJEQSIpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgQ1BERl9PYmplY3QqIHBPYmogPSBGUERGX0dldEZpZWxkQXR0cihtX3BGaWVsZC0+bV9wRGljdCwgIkRBIik7DQotICAgICAgICBpZiAocE9iaiA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIG1fcEZpZWxkLT5tX3BGb3JtLT5HZXREZWZhdWx0QXBwZWFyYW5jZSgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHBPYmotPkdldFN0cmluZygpOw0KLSAgICB9DQotfQ0KLUNQREZfRm9udCogQ1BERl9Gb3JtQ29udHJvbDo6R2V0RGVmYXVsdENvbnRyb2xGb250KCkNCi17DQotICAgIENQREZfRGVmYXVsdEFwcGVhcmFuY2UgY0RBID0gR2V0RGVmYXVsdEFwcGVhcmFuY2UoKTsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgY3NGb250TmFtZVRhZzsNCi0gICAgRlhfRkxPQVQgZkZvbnRTaXplOw0KLSAgICBjREEuR2V0Rm9udChjc0ZvbnROYW1lVGFnLCBmRm9udFNpemUpOw0KLSAgICBpZiAoY3NGb250TmFtZVRhZy5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfT2JqZWN0KiBwT2JqID0gRlBERl9HZXRGaWVsZEF0dHIobV9wV2lkZ2V0RGljdCwgIkRSIik7DQotICAgIGlmIChwT2JqICE9IE5VTEwgJiYgcE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBGb250cyA9ICgoQ1BERl9EaWN0aW9uYXJ5KilwT2JqKS0+R2V0RGljdCgiRm9udCIpOw0KLSAgICAgICAgaWYgKHBGb250cyAhPSBOVUxMKSB7DQotICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5ICpwRWxlbWVudCA9IHBGb250cy0+R2V0RGljdChjc0ZvbnROYW1lVGFnKTsNCi0gICAgICAgICAgICBDUERGX0ZvbnQgKnBGb250ID0gbV9wRmllbGQtPm1fcEZvcm0tPm1fcERvY3VtZW50LT5Mb2FkRm9udChwRWxlbWVudCk7DQotICAgICAgICAgICAgaWYgKHBGb250ICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBGb250Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDUERGX0ZvbnQgKnBGb250ID0gbV9wRmllbGQtPm1fcEZvcm0tPkdldEZvcm1Gb250KGNzRm9udE5hbWVUYWcpOw0KLSAgICBpZiAocEZvbnQgIT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIHBGb250Ow0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSAqcFBhZ2VEaWN0ID0gbV9wV2lkZ2V0RGljdC0+R2V0RGljdCgiUCIpOw0KLSAgICBwT2JqID0gRlBERl9HZXRGaWVsZEF0dHIocFBhZ2VEaWN0LCAiUmVzb3VyY2VzIik7DQotICAgIGlmIChwT2JqICE9IE5VTEwgJiYgcE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBGb250cyA9ICgoQ1BERl9EaWN0aW9uYXJ5KilwT2JqKS0+R2V0RGljdCgiRm9udCIpOw0KLSAgICAgICAgaWYgKHBGb250cyAhPSBOVUxMKSB7DQotICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5ICpwRWxlbWVudCA9IHBGb250cy0+R2V0RGljdChjc0ZvbnROYW1lVGFnKTsNCi0gICAgICAgICAgICBDUERGX0ZvbnQgKnBGb250ID0gbV9wRmllbGQtPm1fcEZvcm0tPm1fcERvY3VtZW50LT5Mb2FkRm9udChwRWxlbWVudCk7DQotICAgICAgICAgICAgaWYgKHBGb250ICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBGb250Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotaW50IENQREZfRm9ybUNvbnRyb2w6OkdldENvbnRyb2xBbGlnbm1lbnQoKQ0KLXsNCi0gICAgaWYgKG1fcFdpZGdldERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgaWYgKG1fcFdpZGdldERpY3QtPktleUV4aXN0KCJRIikpIHsNCi0gICAgICAgIHJldHVybiBtX3BXaWRnZXREaWN0LT5HZXRJbnRlZ2VyKCJRIiwgMCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBDUERGX09iamVjdCogcE9iaiA9IEZQREZfR2V0RmllbGRBdHRyKG1fcEZpZWxkLT5tX3BEaWN0LCAiUSIpOw0KLSAgICAgICAgaWYgKHBPYmogPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiBtX3BGaWVsZC0+bV9wRm9ybS0+R2V0Rm9ybUFsaWdubWVudCgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHBPYmotPkdldEludGVnZXIoKTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENQREZfQXBTZXR0aW5nczo6SGFzTUtFbnRyeShGWF9CU1RSIGNzRW50cnkpDQotew0KLSAgICBpZiAobV9wRGljdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgcmV0dXJuIG1fcERpY3QtPktleUV4aXN0KGNzRW50cnkpOw0KLX0NCi1pbnQgQ1BERl9BcFNldHRpbmdzOjpHZXRSb3RhdGlvbigpDQotew0KLSAgICBpZiAobV9wRGljdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiUiIpKTsNCi19DQotRlhfQVJHQiBDUERGX0FwU2V0dGluZ3M6OkdldENvbG9yKGludCYgaUNvbG9yVHlwZSwgRlhfQlNUUiBjc0VudHJ5KQ0KLXsNCi0gICAgaUNvbG9yVHlwZSA9IENPTE9SVFlQRV9UUkFOU1BBUkVOVDsNCi0gICAgaWYgKG1fcERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgRlhfQVJHQiBjb2xvciA9IDA7DQotICAgIENQREZfQXJyYXkqIHBFbnRyeSA9IG1fcERpY3QtPkdldEFycmF5KGNzRW50cnkpOw0KLSAgICBpZiAocEVudHJ5ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBjb2xvcjsNCi0gICAgfQ0KLSAgICBGWF9EV09SRCBkd0NvdW50ID0gcEVudHJ5LT5HZXRDb3VudCgpOw0KLSAgICBpZiAoZHdDb3VudCA9PSAxKSB7DQotICAgICAgICBpQ29sb3JUeXBlID0gQ09MT1JUWVBFX0dSQVk7DQotICAgICAgICBGWF9GTE9BVCBnID0gcEVudHJ5LT5HZXROdW1iZXIoMCkgKiAyNTU7DQotICAgICAgICBjb2xvciA9IEFyZ2JFbmNvZGUoMjU1LCAoaW50KWcsIChpbnQpZywgKGludClnKTsNCi0gICAgfSBlbHNlIGlmIChkd0NvdW50ID09IDMpIHsNCi0gICAgICAgIGlDb2xvclR5cGUgPSBDT0xPUlRZUEVfUkdCOw0KLSAgICAgICAgRlhfRkxPQVQgciA9IHBFbnRyeS0+R2V0TnVtYmVyKDApICogMjU1Ow0KLSAgICAgICAgRlhfRkxPQVQgZyA9IHBFbnRyeS0+R2V0TnVtYmVyKDEpICogMjU1Ow0KLSAgICAgICAgRlhfRkxPQVQgYiA9IHBFbnRyeS0+R2V0TnVtYmVyKDIpICogMjU1Ow0KLSAgICAgICAgY29sb3IgPSBBcmdiRW5jb2RlKDI1NSwgKGludClyLCAoaW50KWcsIChpbnQpYik7DQotICAgIH0gZWxzZSBpZiAoZHdDb3VudCA9PSA0KSB7DQotICAgICAgICBpQ29sb3JUeXBlID0gQ09MT1JUWVBFX0NNWUs7DQotICAgICAgICBGWF9GTE9BVCBjID0gcEVudHJ5LT5HZXROdW1iZXIoMCk7DQotICAgICAgICBGWF9GTE9BVCBtID0gcEVudHJ5LT5HZXROdW1iZXIoMSk7DQotICAgICAgICBGWF9GTE9BVCB5ID0gcEVudHJ5LT5HZXROdW1iZXIoMik7DQotICAgICAgICBGWF9GTE9BVCBrID0gcEVudHJ5LT5HZXROdW1iZXIoMyk7DQotICAgICAgICBGWF9GTE9BVCByID0gMS4wZiAtIEZYX01JTigxLjBmLCBjICsgayk7DQotICAgICAgICBGWF9GTE9BVCBnID0gMS4wZiAtIEZYX01JTigxLjBmLCBtICsgayk7DQotICAgICAgICBGWF9GTE9BVCBiID0gMS4wZiAtIEZYX01JTigxLjBmLCB5ICsgayk7DQotICAgICAgICBjb2xvciA9IEFyZ2JFbmNvZGUoMjU1LCAoaW50KShyICogMjU1KSwgKGludCkoZyAqIDI1NSksIChpbnQpKGIgKiAyNTUpKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gY29sb3I7DQotfQ0KLUZYX0ZMT0FUIENQREZfQXBTZXR0aW5nczo6R2V0T3JpZ2luYWxDb2xvcihpbnQgaW5kZXgsIEZYX0JTVFIgY3NFbnRyeSkNCi17DQotICAgIGlmIChtX3BEaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIENQREZfQXJyYXkqIHBFbnRyeSA9IG1fcERpY3QtPkdldEFycmF5KGNzRW50cnkpOw0KLSAgICBpZiAocEVudHJ5ICE9IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBwRW50cnktPkdldE51bWJlcihpbmRleCk7DQotICAgIH0NCi0gICAgcmV0dXJuIDA7DQotfQ0KLXZvaWQgQ1BERl9BcFNldHRpbmdzOjpHZXRPcmlnaW5hbENvbG9yKGludCYgaUNvbG9yVHlwZSwgRlhfRkxPQVQgZmNbNF0sIEZYX0JTVFIgY3NFbnRyeSkNCi17DQotICAgIGlDb2xvclR5cGUgPSBDT0xPUlRZUEVfVFJBTlNQQVJFTlQ7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSArKykgew0KLSAgICAgICAgZmNbaV0gPSAwOw0KLSAgICB9DQotICAgIGlmIChtX3BEaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDUERGX0FycmF5KiBwRW50cnkgPSBtX3BEaWN0LT5HZXRBcnJheShjc0VudHJ5KTsNCi0gICAgaWYgKHBFbnRyeSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhfRFdPUkQgZHdDb3VudCA9IHBFbnRyeS0+R2V0Q291bnQoKTsNCi0gICAgaWYgKGR3Q291bnQgPT0gMSkgew0KLSAgICAgICAgaUNvbG9yVHlwZSA9IENPTE9SVFlQRV9HUkFZOw0KLSAgICAgICAgZmNbMF0gPSBwRW50cnktPkdldE51bWJlcigwKTsNCi0gICAgfSBlbHNlIGlmIChkd0NvdW50ID09IDMpIHsNCi0gICAgICAgIGlDb2xvclR5cGUgPSBDT0xPUlRZUEVfUkdCOw0KLSAgICAgICAgZmNbMF0gPSBwRW50cnktPkdldE51bWJlcigwKTsNCi0gICAgICAgIGZjWzFdID0gcEVudHJ5LT5HZXROdW1iZXIoMSk7DQotICAgICAgICBmY1syXSA9IHBFbnRyeS0+R2V0TnVtYmVyKDIpOw0KLSAgICB9IGVsc2UgaWYgKGR3Q291bnQgPT0gNCkgew0KLSAgICAgICAgaUNvbG9yVHlwZSA9IENPTE9SVFlQRV9DTVlLOw0KLSAgICAgICAgZmNbMF0gPSBwRW50cnktPkdldE51bWJlcigwKTsNCi0gICAgICAgIGZjWzFdID0gcEVudHJ5LT5HZXROdW1iZXIoMSk7DQotICAgICAgICBmY1syXSA9IHBFbnRyeS0+R2V0TnVtYmVyKDIpOw0KLSAgICAgICAgZmNbM10gPSBwRW50cnktPkdldE51bWJlcigzKTsNCi0gICAgfQ0KLX0NCi1DRlhfV2lkZVN0cmluZyBDUERGX0FwU2V0dGluZ3M6OkdldENhcHRpb24oRlhfQlNUUiBjc0VudHJ5KQ0KLXsNCi0gICAgQ0ZYX1dpZGVTdHJpbmcgY3NDYXB0aW9uOw0KLSAgICBpZiAobV9wRGljdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gY3NDYXB0aW9uOw0KLSAgICB9DQotICAgIHJldHVybiBtX3BEaWN0LT5HZXRVbmljb2RlVGV4dChjc0VudHJ5KTsNCi19DQotQ1BERl9TdHJlYW0qIENQREZfQXBTZXR0aW5nczo6R2V0SWNvbihGWF9CU1RSIGNzRW50cnkpDQotew0KLSAgICBpZiAobV9wRGljdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wRGljdC0+R2V0U3RyZWFtKGNzRW50cnkpOw0KLX0NCi1DUERGX0ljb25GaXQgQ1BERl9BcFNldHRpbmdzOjpHZXRJY29uRml0KCkNCi17DQotICAgIGlmIChtX3BEaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiBtX3BEaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJJRiIpKTsNCi19DQotaW50IENQREZfQXBTZXR0aW5nczo6R2V0VGV4dFBvc2l0aW9uKCkNCi17DQotICAgIGlmIChtX3BEaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBURVhUUE9TX0NBUFRJT047DQotICAgIH0NCi0gICAgcmV0dXJuIG1fcERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIlRQIiksIFRFWFRQT1NfQ0FQVElPTik7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZkb2MvZnBkZl9kb2MuaCIKK0NQREZfRm9ybUNvbnRyb2w6OkNQREZfRm9ybUNvbnRyb2woQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCwgQ1BERl9EaWN0aW9uYXJ5KiBwV2lkZ2V0RGljdCkKK3sKKyAgICBtX3BGaWVsZCA9IHBGaWVsZDsKKyAgICBtX3BXaWRnZXREaWN0ID0gcFdpZGdldERpY3Q7CisgICAgbV9wRm9ybSA9IG1fcEZpZWxkLT5tX3BGb3JtOworfQorQ0ZYX0Zsb2F0UmVjdCBDUERGX0Zvcm1Db250cm9sOjpHZXRSZWN0KCkKK3sKKyAgICByZXR1cm4gbV9wV2lkZ2V0RGljdC0+R2V0UmVjdCgiUmVjdCIpOworfQorQ0ZYX0J5dGVTdHJpbmcgQ1BERl9Gb3JtQ29udHJvbDo6R2V0T25TdGF0ZU5hbWUoKQoreworICAgIEFTU0VSVChHZXRUeXBlKCkgPT0gQ1BERl9Gb3JtRmllbGQ6OkNoZWNrQm94IHx8IEdldFR5cGUoKSA9PSBDUERGX0Zvcm1GaWVsZDo6UmFkaW9CdXR0b24pOworICAgIENGWF9CeXRlU3RyaW5nIGNzT247CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwQVAgPSBtX3BXaWRnZXREaWN0LT5HZXREaWN0KCJBUCIpOworICAgIGlmIChwQVAgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gY3NPbjsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwTiA9IHBBUC0+R2V0RGljdCgiTiIpOworICAgIGlmIChwTiA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBjc09uOworICAgIH0KKyAgICBGWF9QT1NJVElPTiBwb3MgPSBwTi0+R2V0U3RhcnRQb3MoKTsKKyAgICB3aGlsZSAocG9zKSB7CisgICAgICAgIHBOLT5HZXROZXh0RWxlbWVudChwb3MsIGNzT24pOworICAgICAgICBpZiAoY3NPbiAhPSAiT2ZmIikgeworICAgICAgICAgICAgcmV0dXJuIGNzT247CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKCk7Cit9Cit2b2lkIENQREZfRm9ybUNvbnRyb2w6OlNldE9uU3RhdGVOYW1lKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBjc09uKQoreworICAgIEFTU0VSVChHZXRUeXBlKCkgPT0gQ1BERl9Gb3JtRmllbGQ6OkNoZWNrQm94IHx8IEdldFR5cGUoKSA9PSBDUERGX0Zvcm1GaWVsZDo6UmFkaW9CdXR0b24pOworICAgIENGWF9CeXRlU3RyaW5nIGNzVmFsdWUgPSBjc09uOworICAgIGlmIChjc1ZhbHVlLklzRW1wdHkoKSkgeworICAgICAgICBjc1ZhbHVlID0gIlllcyI7CisgICAgfQorICAgIGlmIChjc1ZhbHVlID09ICJPZmYiKSB7CisgICAgICAgIGNzVmFsdWUgPSAiWWVzIjsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgY3NBUyA9IG1fcFdpZGdldERpY3QtPkdldFN0cmluZygiQVMiLCAiT2ZmIik7CisgICAgaWYgKGNzQVMgIT0gIk9mZiIpIHsKKyAgICAgICAgbV9wV2lkZ2V0RGljdC0+U2V0QXROYW1lKCJBUyIsIGNzVmFsdWUpOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBBUCA9IG1fcFdpZGdldERpY3QtPkdldERpY3QoIkFQIik7CisgICAgaWYgKHBBUCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfUE9TSVRJT04gcG9zMSA9IHBBUC0+R2V0U3RhcnRQb3MoKTsKKyAgICB3aGlsZSAocG9zMSkgeworICAgICAgICBDRlhfQnl0ZVN0cmluZyBjc0tleTE7CisgICAgICAgIENQREZfT2JqZWN0KiBwT2JqMSA9IHBBUC0+R2V0TmV4dEVsZW1lbnQocG9zMSwgY3NLZXkxKTsKKyAgICAgICAgaWYgKHBPYmoxID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIENQREZfT2JqZWN0KiBwT2JqRGlyZWN0MSA9IHBPYmoxLT5HZXREaXJlY3QoKTsKKyAgICAgICAgaWYgKHBPYmpEaXJlY3QxLT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcFN1YkRpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KilwT2JqRGlyZWN0MTsKKyAgICAgICAgRlhfUE9TSVRJT04gcG9zMiA9IHBTdWJEaWN0LT5HZXRTdGFydFBvcygpOworICAgICAgICB3aGlsZSAocG9zMikgeworICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3NLZXkyOworICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBPYmoyID0gcFN1YkRpY3QtPkdldE5leHRFbGVtZW50KHBvczIsIGNzS2V5Mik7CisgICAgICAgICAgICBpZiAocE9iajIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNzS2V5MiAhPSAiT2ZmIikgeworICAgICAgICAgICAgICAgIHBTdWJEaWN0LT5SZXBsYWNlS2V5KGNzS2V5MiwgY3NWYWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CitDRlhfQnl0ZVN0cmluZyBDUERGX0Zvcm1Db250cm9sOjpHZXRDaGVja2VkQVBTdGF0ZSgpCit7CisgICAgQVNTRVJUKEdldFR5cGUoKSA9PSBDUERGX0Zvcm1GaWVsZDo6Q2hlY2tCb3ggfHwgR2V0VHlwZSgpID09IENQREZfRm9ybUZpZWxkOjpSYWRpb0J1dHRvbik7CisgICAgQ0ZYX0J5dGVTdHJpbmcgY3NPbiA9IEdldE9uU3RhdGVOYW1lKCk7CisgICAgaWYgKEdldFR5cGUoKSA9PSBDUERGX0Zvcm1GaWVsZDo6UmFkaW9CdXR0b24gfHwgR2V0VHlwZSgpID09IENQREZfRm9ybUZpZWxkOjpDaGVja0JveCkgeworICAgICAgICBDUERGX09iamVjdCogcE9wdCA9IEZQREZfR2V0RmllbGRBdHRyKG1fcEZpZWxkLT5tX3BEaWN0LCAiT3B0Iik7CisgICAgICAgIGlmIChwT3B0ICE9IE5VTEwgJiYgcE9wdC0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgeworICAgICAgICAgICAgaW50IGlJbmRleCA9IG1fcEZpZWxkLT5HZXRDb250cm9sSW5kZXgodGhpcyk7CisgICAgICAgICAgICBjc09uLkZvcm1hdCgiJWQiLCBpSW5kZXgpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChjc09uLklzRW1wdHkoKSkgeworICAgICAgICBjc09uID0gIlllcyI7CisgICAgfQorICAgIHJldHVybiBjc09uOworfQorQ0ZYX1dpZGVTdHJpbmcgQ1BERl9Gb3JtQ29udHJvbDo6R2V0RXhwb3J0VmFsdWUoKQoreworICAgIEFTU0VSVChHZXRUeXBlKCkgPT0gQ1BERl9Gb3JtRmllbGQ6OkNoZWNrQm94IHx8IEdldFR5cGUoKSA9PSBDUERGX0Zvcm1GaWVsZDo6UmFkaW9CdXR0b24pOworICAgIENGWF9CeXRlU3RyaW5nIGNzT24gPSBHZXRPblN0YXRlTmFtZSgpOworICAgIGlmIChHZXRUeXBlKCkgPT0gQ1BERl9Gb3JtRmllbGQ6OlJhZGlvQnV0dG9uIHx8IEdldFR5cGUoKSA9PSBDUERGX0Zvcm1GaWVsZDo6Q2hlY2tCb3gpIHsKKyAgICAgICAgQ1BERl9PYmplY3QqIHBPcHQgPSBGUERGX0dldEZpZWxkQXR0cihtX3BGaWVsZC0+bV9wRGljdCwgIk9wdCIpOworICAgICAgICBpZiAocE9wdCAhPSBOVUxMICYmIHBPcHQtPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsKKyAgICAgICAgICAgIGludCBpSW5kZXggPSBtX3BGaWVsZC0+R2V0Q29udHJvbEluZGV4KHRoaXMpOworICAgICAgICAgICAgY3NPbiA9ICgoQ1BERl9BcnJheSopcE9wdCktPkdldFN0cmluZyhpSW5kZXgpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChjc09uLklzRW1wdHkoKSkgeworICAgICAgICBjc09uID0gIlllcyI7CisgICAgfQorICAgIENGWF9XaWRlU3RyaW5nIGNzV09uID0gUERGX0RlY29kZVRleHQoY3NPbik7CisgICAgcmV0dXJuIGNzV09uOworfQorRlhfQk9PTCBDUERGX0Zvcm1Db250cm9sOjpJc0NoZWNrZWQoKQoreworICAgIEFTU0VSVChHZXRUeXBlKCkgPT0gQ1BERl9Gb3JtRmllbGQ6OkNoZWNrQm94IHx8IEdldFR5cGUoKSA9PSBDUERGX0Zvcm1GaWVsZDo6UmFkaW9CdXR0b24pOworICAgIENGWF9CeXRlU3RyaW5nIGNzT24gPSBHZXRPblN0YXRlTmFtZSgpOworICAgIENGWF9CeXRlU3RyaW5nIGNzQVMgPSBtX3BXaWRnZXREaWN0LT5HZXRTdHJpbmcoIkFTIik7CisgICAgcmV0dXJuIGNzQVMgPT0gY3NPbjsKK30KK0ZYX0JPT0wgQ1BERl9Gb3JtQ29udHJvbDo6SXNEZWZhdWx0Q2hlY2tlZCgpCit7CisgICAgQVNTRVJUKEdldFR5cGUoKSA9PSBDUERGX0Zvcm1GaWVsZDo6Q2hlY2tCb3ggfHwgR2V0VHlwZSgpID09IENQREZfRm9ybUZpZWxkOjpSYWRpb0J1dHRvbik7CisgICAgQ1BERl9PYmplY3QqIHBEViA9IEZQREZfR2V0RmllbGRBdHRyKG1fcEZpZWxkLT5tX3BEaWN0LCAiRFYiKTsKKyAgICBpZiAocERWID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDRlhfQnl0ZVN0cmluZyBjc0RWID0gcERWLT5HZXRTdHJpbmcoKTsKKyAgICBDRlhfQnl0ZVN0cmluZyBjc09uID0gR2V0T25TdGF0ZU5hbWUoKTsKKyAgICByZXR1cm4gKGNzRFYgPT0gY3NPbik7Cit9Cit2b2lkIENQREZfRm9ybUNvbnRyb2w6OkNoZWNrQ29udHJvbChGWF9CT09MIGJDaGVja2VkKQoreworICAgIEFTU0VSVChHZXRUeXBlKCkgPT0gQ1BERl9Gb3JtRmllbGQ6OkNoZWNrQm94IHx8IEdldFR5cGUoKSA9PSBDUERGX0Zvcm1GaWVsZDo6UmFkaW9CdXR0b24pOworICAgIENGWF9CeXRlU3RyaW5nIGNzT24gPSBHZXRPblN0YXRlTmFtZSgpOworICAgIENGWF9CeXRlU3RyaW5nIGNzT2xkQVMgPSBtX3BXaWRnZXREaWN0LT5HZXRTdHJpbmcoIkFTIiwgIk9mZiIpOworICAgIENGWF9CeXRlU3RyaW5nIGNzQVMgPSAiT2ZmIjsKKyAgICBpZiAoYkNoZWNrZWQpIHsKKyAgICAgICAgY3NBUyA9IGNzT247CisgICAgfQorICAgIGlmIChjc09sZEFTID09IGNzQVMpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3BXaWRnZXREaWN0LT5TZXRBdE5hbWUoIkFTIiwgY3NBUyk7CisgICAgbV9wRm9ybS0+bV9iVXBkYXRlZCA9IFRSVUU7Cit9CitDUERGX1N0cmVhbSogRlBERkRPQ19HZXRBbm5vdEFQKENQREZfRGljdGlvbmFyeSogcEFubm90RGljdCwgQ1BERl9Bbm5vdDo6QXBwZWFyYW5jZU1vZGUgbW9kZSk7Cit2b2lkIENQREZfRm9ybUNvbnRyb2w6OkRyYXdDb250cm9sKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIENQREZfUGFnZSogcFBhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfQW5ub3Q6OkFwcGVhcmFuY2VNb2RlIG1vZGUsIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMpCit7CisgICAgaWYgKG1fcFdpZGdldERpY3QtPkdldEludGVnZXIoIkYiKSAmIEFOTk9URkxBR19ISURERU4pIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX1N0cmVhbSogcFN0cmVhbSA9IEZQREZET0NfR2V0QW5ub3RBUChtX3BXaWRnZXREaWN0LCBtb2RlKTsKKyAgICBpZiAocFN0cmVhbSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZYX0Zsb2F0UmVjdCBmb3JtX2Jib3ggPSBwU3RyZWFtLT5HZXREaWN0KCktPkdldFJlY3QoIkJCb3giKTsKKyAgICBDRlhfQWZmaW5lTWF0cml4IGZvcm1fbWF0cml4ID0gcFN0cmVhbS0+R2V0RGljdCgpLT5HZXRNYXRyaXgoIk1hdHJpeCIpOworICAgIGZvcm1fbWF0cml4LlRyYW5zZm9ybVJlY3QoZm9ybV9iYm94KTsKKyAgICBDRlhfRmxvYXRSZWN0IGFyZWN0ID0gbV9wV2lkZ2V0RGljdC0+R2V0UmVjdCgiUmVjdCIpOworICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4OworICAgIG1hdHJpeC5NYXRjaFJlY3QoYXJlY3QsIGZvcm1fYmJveCk7CisgICAgbWF0cml4LkNvbmNhdCgqcE1hdHJpeCk7CisgICAgQ1BERl9Gb3JtIGZvcm0obV9wRmllbGQtPm1fcEZvcm0tPm1fcERvY3VtZW50LCBtX3BGaWVsZC0+bV9wRm9ybS0+bV9wRm9ybURpY3QtPkdldERpY3QoIkRSIiksIHBTdHJlYW0pOworICAgIGZvcm0uUGFyc2VDb250ZW50KE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOworICAgIENQREZfUmVuZGVyQ29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQuQ3JlYXRlKHBQYWdlKTsKKyAgICBjb250ZXh0LkRyYXdPYmplY3RMaXN0KHBEZXZpY2UsICZmb3JtLCAmbWF0cml4LCBwT3B0aW9ucyk7Cit9Citjb25zdCBGWF9DSEFSKiBnX3NIaWdobGlnaHRpbmdNb2RlW10gPSB7Ik4iLCAiSSIsICJPIiwgIlAiLCAiVCIsICIifTsKK0NQREZfRm9ybUNvbnRyb2w6OkhpZ2hsaWdodGluZ01vZGUgQ1BERl9Gb3JtQ29udHJvbDo6R2V0SGlnaGxpZ2h0aW5nTW9kZSgpCit7CisgICAgaWYgKG1fcFdpZGdldERpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gSW52ZXJ0OworICAgIH0KKyAgICBDRlhfQnl0ZVN0cmluZyBjc0ggPSBtX3BXaWRnZXREaWN0LT5HZXRTdHJpbmcoIkgiLCAiSSIpOworICAgIGludCBpID0gMDsKKyAgICB3aGlsZSAoZ19zSGlnaGxpZ2h0aW5nTW9kZVtpXVswXSAhPSAnXDAnKSB7CisgICAgICAgIGlmIChjc0guRXF1YWwoZ19zSGlnaGxpZ2h0aW5nTW9kZVtpXSkpIHsKKyAgICAgICAgICAgIHJldHVybiAoSGlnaGxpZ2h0aW5nTW9kZSlpOworICAgICAgICB9CisgICAgICAgIGkgKys7CisgICAgfQorICAgIHJldHVybiBJbnZlcnQ7Cit9CitDUERGX0FwU2V0dGluZ3MgQ1BERl9Gb3JtQ29udHJvbDo6R2V0TUsoRlhfQk9PTCBiQ3JlYXRlKQoreworICAgIGlmICghbV9wV2lkZ2V0RGljdCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9BcFNldHRpbmdzIG1rID0gbV9wV2lkZ2V0RGljdC0+R2V0RGljdChGWF9CU1RSQygiTUsiKSk7CisgICAgaWYgKCFtayAmJiBiQ3JlYXRlKSB7CisgICAgICAgIG1rID0gQ1BERl9EaWN0aW9uYXJ5OjpDcmVhdGUoKTsKKyAgICAgICAgaWYgKG1rID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG1fcFdpZGdldERpY3QtPlNldEF0KEZYX0JTVFJDKCJNSyIpLCBtayk7CisgICAgfQorICAgIHJldHVybiBtazsKK30KK0ZYX0JPT0wgQ1BERl9Gb3JtQ29udHJvbDo6SGFzTUtFbnRyeShDRlhfQnl0ZVN0cmluZyBjc0VudHJ5KQoreworICAgIENQREZfQXBTZXR0aW5ncyBtayA9IEdldE1LKEZBTFNFKTsKKyAgICByZXR1cm4gbWsuSGFzTUtFbnRyeShjc0VudHJ5KTsKK30KK2ludCBDUERGX0Zvcm1Db250cm9sOjpHZXRSb3RhdGlvbigpCit7CisgICAgQ1BERl9BcFNldHRpbmdzIG1rID0gR2V0TUsoRkFMU0UpOworICAgIHJldHVybiBtay5HZXRSb3RhdGlvbigpOworfQorRlhfQVJHQiBDUERGX0Zvcm1Db250cm9sOjpHZXRDb2xvcihpbnQmIGlDb2xvclR5cGUsIENGWF9CeXRlU3RyaW5nIGNzRW50cnkpCit7CisgICAgQ1BERl9BcFNldHRpbmdzIG1rID0gR2V0TUsoRkFMU0UpOworICAgIHJldHVybiBtay5HZXRDb2xvcihpQ29sb3JUeXBlLCBjc0VudHJ5KTsKK30KK0ZYX0ZMT0FUIENQREZfRm9ybUNvbnRyb2w6OkdldE9yaWdpbmFsQ29sb3IoaW50IGluZGV4LCBDRlhfQnl0ZVN0cmluZyBjc0VudHJ5KQoreworICAgIENQREZfQXBTZXR0aW5ncyBtayA9IEdldE1LKEZBTFNFKTsKKyAgICByZXR1cm4gbWsuR2V0T3JpZ2luYWxDb2xvcihpbmRleCwgY3NFbnRyeSk7Cit9Cit2b2lkIENQREZfRm9ybUNvbnRyb2w6OkdldE9yaWdpbmFsQ29sb3IoaW50JiBpQ29sb3JUeXBlLCBGWF9GTE9BVCBmY1s0XSwgQ0ZYX0J5dGVTdHJpbmcgY3NFbnRyeSkKK3sKKyAgICBDUERGX0FwU2V0dGluZ3MgbWsgPSBHZXRNSyhGQUxTRSk7CisgICAgbWsuR2V0T3JpZ2luYWxDb2xvcihpQ29sb3JUeXBlLCBmYywgY3NFbnRyeSk7Cit9CitDRlhfV2lkZVN0cmluZyBDUERGX0Zvcm1Db250cm9sOjpHZXRDYXB0aW9uKENGWF9CeXRlU3RyaW5nIGNzRW50cnkpCit7CisgICAgQ1BERl9BcFNldHRpbmdzIG1rID0gR2V0TUsoRkFMU0UpOworICAgIHJldHVybiBtay5HZXRDYXB0aW9uKGNzRW50cnkpOworfQorQ1BERl9TdHJlYW0qIENQREZfRm9ybUNvbnRyb2w6OkdldEljb24oQ0ZYX0J5dGVTdHJpbmcgY3NFbnRyeSkKK3sKKyAgICBDUERGX0FwU2V0dGluZ3MgbWsgPSBHZXRNSyhGQUxTRSk7CisgICAgcmV0dXJuIG1rLkdldEljb24oY3NFbnRyeSk7Cit9CitDUERGX0ljb25GaXQgQ1BERl9Gb3JtQ29udHJvbDo6R2V0SWNvbkZpdCgpCit7CisgICAgQ1BERl9BcFNldHRpbmdzIG1rID0gR2V0TUsoRkFMU0UpOworICAgIHJldHVybiBtay5HZXRJY29uRml0KCk7Cit9CitpbnQgQ1BERl9Gb3JtQ29udHJvbDo6R2V0VGV4dFBvc2l0aW9uKCkKK3sKKyAgICBDUERGX0FwU2V0dGluZ3MgbWsgPSBHZXRNSyhGQUxTRSk7CisgICAgcmV0dXJuIG1rLkdldFRleHRQb3NpdGlvbigpOworfQorQ1BERl9BY3Rpb24gQ1BERl9Gb3JtQ29udHJvbDo6R2V0QWN0aW9uKCkKK3sKKyAgICBpZiAobV9wV2lkZ2V0RGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAobV9wV2lkZ2V0RGljdC0+S2V5RXhpc3QoIkEiKSkgeworICAgICAgICByZXR1cm4gbV9wV2lkZ2V0RGljdC0+R2V0RGljdCgiQSIpOworICAgIH0gZWxzZSB7CisgICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRmllbGQtPm1fcERpY3QsICJBIik7CisgICAgICAgIGlmIChwT2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwT2JqLT5HZXREaWN0KCk7CisgICAgfQorfQorQ1BERl9BQWN0aW9uIENQREZfRm9ybUNvbnRyb2w6OkdldEFkZGl0aW9uYWxBY3Rpb24oKQoreworICAgIGlmIChtX3BXaWRnZXREaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChtX3BXaWRnZXREaWN0LT5LZXlFeGlzdCgiQUEiKSkgeworICAgICAgICByZXR1cm4gbV9wV2lkZ2V0RGljdC0+R2V0RGljdCgiQUEiKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gbV9wRmllbGQtPkdldEFkZGl0aW9uYWxBY3Rpb24oKTsKKyAgICB9Cit9CitDUERGX0RlZmF1bHRBcHBlYXJhbmNlIENQREZfRm9ybUNvbnRyb2w6OkdldERlZmF1bHRBcHBlYXJhbmNlKCkKK3sKKyAgICBpZiAobV9wV2lkZ2V0RGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZygpOworICAgIH0KKyAgICBpZiAobV9wV2lkZ2V0RGljdC0+S2V5RXhpc3QoIkRBIikpIHsKKyAgICAgICAgcmV0dXJuIG1fcFdpZGdldERpY3QtPkdldFN0cmluZygiREEiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBDUERGX09iamVjdCogcE9iaiA9IEZQREZfR2V0RmllbGRBdHRyKG1fcEZpZWxkLT5tX3BEaWN0LCAiREEiKTsKKyAgICAgICAgaWYgKHBPYmogPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIG1fcEZpZWxkLT5tX3BGb3JtLT5HZXREZWZhdWx0QXBwZWFyYW5jZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwT2JqLT5HZXRTdHJpbmcoKTsKKyAgICB9Cit9CitDUERGX0ZvbnQqIENQREZfRm9ybUNvbnRyb2w6OkdldERlZmF1bHRDb250cm9sRm9udCgpCit7CisgICAgQ1BERl9EZWZhdWx0QXBwZWFyYW5jZSBjREEgPSBHZXREZWZhdWx0QXBwZWFyYW5jZSgpOworICAgIENGWF9CeXRlU3RyaW5nIGNzRm9udE5hbWVUYWc7CisgICAgRlhfRkxPQVQgZkZvbnRTaXplOworICAgIGNEQS5HZXRGb250KGNzRm9udE5hbWVUYWcsIGZGb250U2l6ZSk7CisgICAgaWYgKGNzRm9udE5hbWVUYWcuSXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX09iamVjdCogcE9iaiA9IEZQREZfR2V0RmllbGRBdHRyKG1fcFdpZGdldERpY3QsICJEUiIpOworICAgIGlmIChwT2JqICE9IE5VTEwgJiYgcE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKSB7CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcEZvbnRzID0gKChDUERGX0RpY3Rpb25hcnkqKXBPYmopLT5HZXREaWN0KCJGb250Iik7CisgICAgICAgIGlmIChwRm9udHMgIT0gTlVMTCkgeworICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5ICpwRWxlbWVudCA9IHBGb250cy0+R2V0RGljdChjc0ZvbnROYW1lVGFnKTsKKyAgICAgICAgICAgIENQREZfRm9udCAqcEZvbnQgPSBtX3BGaWVsZC0+bV9wRm9ybS0+bV9wRG9jdW1lbnQtPkxvYWRGb250KHBFbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChwRm9udCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBGb250OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIENQREZfRm9udCAqcEZvbnQgPSBtX3BGaWVsZC0+bV9wRm9ybS0+R2V0Rm9ybUZvbnQoY3NGb250TmFtZVRhZyk7CisgICAgaWYgKHBGb250ICE9IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIHBGb250OworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkgKnBQYWdlRGljdCA9IG1fcFdpZGdldERpY3QtPkdldERpY3QoIlAiKTsKKyAgICBwT2JqID0gRlBERl9HZXRGaWVsZEF0dHIocFBhZ2VEaWN0LCAiUmVzb3VyY2VzIik7CisgICAgaWYgKHBPYmogIT0gTlVMTCAmJiBwT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9udHMgPSAoKENQREZfRGljdGlvbmFyeSopcE9iaiktPkdldERpY3QoIkZvbnQiKTsKKyAgICAgICAgaWYgKHBGb250cyAhPSBOVUxMKSB7CisgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkgKnBFbGVtZW50ID0gcEZvbnRzLT5HZXREaWN0KGNzRm9udE5hbWVUYWcpOworICAgICAgICAgICAgQ1BERl9Gb250ICpwRm9udCA9IG1fcEZpZWxkLT5tX3BGb3JtLT5tX3BEb2N1bWVudC0+TG9hZEZvbnQocEVsZW1lbnQpOworICAgICAgICAgICAgaWYgKHBGb250ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcEZvbnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CitpbnQgQ1BERl9Gb3JtQ29udHJvbDo6R2V0Q29udHJvbEFsaWdubWVudCgpCit7CisgICAgaWYgKG1fcFdpZGdldERpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKG1fcFdpZGdldERpY3QtPktleUV4aXN0KCJRIikpIHsKKyAgICAgICAgcmV0dXJuIG1fcFdpZGdldERpY3QtPkdldEludGVnZXIoIlEiLCAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBDUERGX09iamVjdCogcE9iaiA9IEZQREZfR2V0RmllbGRBdHRyKG1fcEZpZWxkLT5tX3BEaWN0LCAiUSIpOworICAgICAgICBpZiAocE9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gbV9wRmllbGQtPm1fcEZvcm0tPkdldEZvcm1BbGlnbm1lbnQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcE9iai0+R2V0SW50ZWdlcigpOworICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9BcFNldHRpbmdzOjpIYXNNS0VudHJ5KEZYX0JTVFIgY3NFbnRyeSkKK3sKKyAgICBpZiAobV9wRGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIG1fcERpY3QtPktleUV4aXN0KGNzRW50cnkpOworfQoraW50IENQREZfQXBTZXR0aW5nczo6R2V0Um90YXRpb24oKQoreworICAgIGlmIChtX3BEaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBtX3BEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJSIikpOworfQorRlhfQVJHQiBDUERGX0FwU2V0dGluZ3M6OkdldENvbG9yKGludCYgaUNvbG9yVHlwZSwgRlhfQlNUUiBjc0VudHJ5KQoreworICAgIGlDb2xvclR5cGUgPSBDT0xPUlRZUEVfVFJBTlNQQVJFTlQ7CisgICAgaWYgKG1fcERpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgRlhfQVJHQiBjb2xvciA9IDA7CisgICAgQ1BERl9BcnJheSogcEVudHJ5ID0gbV9wRGljdC0+R2V0QXJyYXkoY3NFbnRyeSk7CisgICAgaWYgKHBFbnRyeSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBjb2xvcjsKKyAgICB9CisgICAgRlhfRFdPUkQgZHdDb3VudCA9IHBFbnRyeS0+R2V0Q291bnQoKTsKKyAgICBpZiAoZHdDb3VudCA9PSAxKSB7CisgICAgICAgIGlDb2xvclR5cGUgPSBDT0xPUlRZUEVfR1JBWTsKKyAgICAgICAgRlhfRkxPQVQgZyA9IHBFbnRyeS0+R2V0TnVtYmVyKDApICogMjU1OworICAgICAgICBjb2xvciA9IEFyZ2JFbmNvZGUoMjU1LCAoaW50KWcsIChpbnQpZywgKGludClnKTsKKyAgICB9IGVsc2UgaWYgKGR3Q291bnQgPT0gMykgeworICAgICAgICBpQ29sb3JUeXBlID0gQ09MT1JUWVBFX1JHQjsKKyAgICAgICAgRlhfRkxPQVQgciA9IHBFbnRyeS0+R2V0TnVtYmVyKDApICogMjU1OworICAgICAgICBGWF9GTE9BVCBnID0gcEVudHJ5LT5HZXROdW1iZXIoMSkgKiAyNTU7CisgICAgICAgIEZYX0ZMT0FUIGIgPSBwRW50cnktPkdldE51bWJlcigyKSAqIDI1NTsKKyAgICAgICAgY29sb3IgPSBBcmdiRW5jb2RlKDI1NSwgKGludClyLCAoaW50KWcsIChpbnQpYik7CisgICAgfSBlbHNlIGlmIChkd0NvdW50ID09IDQpIHsKKyAgICAgICAgaUNvbG9yVHlwZSA9IENPTE9SVFlQRV9DTVlLOworICAgICAgICBGWF9GTE9BVCBjID0gcEVudHJ5LT5HZXROdW1iZXIoMCk7CisgICAgICAgIEZYX0ZMT0FUIG0gPSBwRW50cnktPkdldE51bWJlcigxKTsKKyAgICAgICAgRlhfRkxPQVQgeSA9IHBFbnRyeS0+R2V0TnVtYmVyKDIpOworICAgICAgICBGWF9GTE9BVCBrID0gcEVudHJ5LT5HZXROdW1iZXIoMyk7CisgICAgICAgIEZYX0ZMT0FUIHIgPSAxLjBmIC0gRlhfTUlOKDEuMGYsIGMgKyBrKTsKKyAgICAgICAgRlhfRkxPQVQgZyA9IDEuMGYgLSBGWF9NSU4oMS4wZiwgbSArIGspOworICAgICAgICBGWF9GTE9BVCBiID0gMS4wZiAtIEZYX01JTigxLjBmLCB5ICsgayk7CisgICAgICAgIGNvbG9yID0gQXJnYkVuY29kZSgyNTUsIChpbnQpKHIgKiAyNTUpLCAoaW50KShnICogMjU1KSwgKGludCkoYiAqIDI1NSkpOworICAgIH0KKyAgICByZXR1cm4gY29sb3I7Cit9CitGWF9GTE9BVCBDUERGX0FwU2V0dGluZ3M6OkdldE9yaWdpbmFsQ29sb3IoaW50IGluZGV4LCBGWF9CU1RSIGNzRW50cnkpCit7CisgICAgaWYgKG1fcERpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcEVudHJ5ID0gbV9wRGljdC0+R2V0QXJyYXkoY3NFbnRyeSk7CisgICAgaWYgKHBFbnRyeSAhPSBOVUxMKSB7CisgICAgICAgIHJldHVybiBwRW50cnktPkdldE51bWJlcihpbmRleCk7CisgICAgfQorICAgIHJldHVybiAwOworfQordm9pZCBDUERGX0FwU2V0dGluZ3M6OkdldE9yaWdpbmFsQ29sb3IoaW50JiBpQ29sb3JUeXBlLCBGWF9GTE9BVCBmY1s0XSwgRlhfQlNUUiBjc0VudHJ5KQoreworICAgIGlDb2xvclR5cGUgPSBDT0xPUlRZUEVfVFJBTlNQQVJFTlQ7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpICsrKSB7CisgICAgICAgIGZjW2ldID0gMDsKKyAgICB9CisgICAgaWYgKG1fcERpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfQXJyYXkqIHBFbnRyeSA9IG1fcERpY3QtPkdldEFycmF5KGNzRW50cnkpOworICAgIGlmIChwRW50cnkgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX0RXT1JEIGR3Q291bnQgPSBwRW50cnktPkdldENvdW50KCk7CisgICAgaWYgKGR3Q291bnQgPT0gMSkgeworICAgICAgICBpQ29sb3JUeXBlID0gQ09MT1JUWVBFX0dSQVk7CisgICAgICAgIGZjWzBdID0gcEVudHJ5LT5HZXROdW1iZXIoMCk7CisgICAgfSBlbHNlIGlmIChkd0NvdW50ID09IDMpIHsKKyAgICAgICAgaUNvbG9yVHlwZSA9IENPTE9SVFlQRV9SR0I7CisgICAgICAgIGZjWzBdID0gcEVudHJ5LT5HZXROdW1iZXIoMCk7CisgICAgICAgIGZjWzFdID0gcEVudHJ5LT5HZXROdW1iZXIoMSk7CisgICAgICAgIGZjWzJdID0gcEVudHJ5LT5HZXROdW1iZXIoMik7CisgICAgfSBlbHNlIGlmIChkd0NvdW50ID09IDQpIHsKKyAgICAgICAgaUNvbG9yVHlwZSA9IENPTE9SVFlQRV9DTVlLOworICAgICAgICBmY1swXSA9IHBFbnRyeS0+R2V0TnVtYmVyKDApOworICAgICAgICBmY1sxXSA9IHBFbnRyeS0+R2V0TnVtYmVyKDEpOworICAgICAgICBmY1syXSA9IHBFbnRyeS0+R2V0TnVtYmVyKDIpOworICAgICAgICBmY1szXSA9IHBFbnRyeS0+R2V0TnVtYmVyKDMpOworICAgIH0KK30KK0NGWF9XaWRlU3RyaW5nIENQREZfQXBTZXR0aW5nczo6R2V0Q2FwdGlvbihGWF9CU1RSIGNzRW50cnkpCit7CisgICAgQ0ZYX1dpZGVTdHJpbmcgY3NDYXB0aW9uOworICAgIGlmIChtX3BEaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIGNzQ2FwdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIG1fcERpY3QtPkdldFVuaWNvZGVUZXh0KGNzRW50cnkpOworfQorQ1BERl9TdHJlYW0qIENQREZfQXBTZXR0aW5nczo6R2V0SWNvbihGWF9CU1RSIGNzRW50cnkpCit7CisgICAgaWYgKG1fcERpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIG1fcERpY3QtPkdldFN0cmVhbShjc0VudHJ5KTsKK30KK0NQREZfSWNvbkZpdCBDUERGX0FwU2V0dGluZ3M6OkdldEljb25GaXQoKQoreworICAgIGlmIChtX3BEaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBtX3BEaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJJRiIpKTsKK30KK2ludCBDUERGX0FwU2V0dGluZ3M6OkdldFRleHRQb3NpdGlvbigpCit7CisgICAgaWYgKG1fcERpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gVEVYVFBPU19DQVBUSU9OOworICAgIH0KKyAgICByZXR1cm4gbV9wRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiVFAiKSwgVEVYVFBPU19DQVBUSU9OKTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX2Zvcm1maWVsZC5jcHAgYi9jb3JlL3NyYy9mcGRmZG9jL2RvY19mb3JtZmllbGQuY3BwCmluZGV4IGQ4NGE2YjEuLjU0ODQ0ODYgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX2Zvcm1maWVsZC5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmRvYy9kb2NfZm9ybWZpZWxkLmNwcApAQCAtMSwxMDk1ICsxLDEwOTUgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZkb2MvZnBkZl9kb2MuaCINCi1DRlhfV2lkZVN0cmluZwkJR2V0RnVsbE5hbWUoQ1BERl9EaWN0aW9uYXJ5KiBwRmllbGREaWN0KTsNCi12b2lkCQkJCVNhdmVDaGVja2VkRmllbGRTdGF0dXMoQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCwgQ0ZYX0J5dGVBcnJheSYgc3RhdHVzQXJyYXkpOw0KLUZYX0JPT0wgUERGX0Zvcm1GaWVsZF9Jc1VuaXNvbihDUERGX0Zvcm1GaWVsZCAqcEZpZWxkKQ0KLXsNCi0gICAgRlhfQk9PTCBiVW5pc29uID0gRkFMU0U7DQotICAgIGlmIChwRmllbGQtPkdldFR5cGUoKSA9PSBDUERGX0Zvcm1GaWVsZDo6Q2hlY2tCb3gpIHsNCi0gICAgICAgIGJVbmlzb24gPSBUUlVFOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgRlhfRFdPUkQgZHdGbGFncyA9IHBGaWVsZC0+R2V0RmllbGRGbGFncygpOw0KLSAgICAgICAgYlVuaXNvbiA9ICgoZHdGbGFncyAmIDB4MjAwMDAwMCkgIT0gMCk7DQotICAgIH0NCi0gICAgcmV0dXJuIGJVbmlzb247DQotfQ0KLUNQREZfRm9ybUZpZWxkOjpDUERGX0Zvcm1GaWVsZChDUERGX0ludGVyRm9ybSogcEZvcm0sIENQREZfRGljdGlvbmFyeSogcERpY3QpDQotew0KLSAgICBtX3BEaWN0ID0gcERpY3Q7DQotICAgIG1fVHlwZSA9IFVua25vd247DQotICAgIG1fcEZvcm0gPSBwRm9ybTsNCi0gICAgbV9wRm9udCA9IE5VTEw7DQotICAgIG1fRm9udFNpemUgPSAwOw0KLSAgICBTeW5jRmllbGRGbGFncygpOw0KLX0NCi1DUERGX0Zvcm1GaWVsZDo6fkNQREZfRm9ybUZpZWxkKCkNCi17DQotfQ0KLXZvaWQgQ1BERl9Gb3JtRmllbGQ6OlN5bmNGaWVsZEZsYWdzKCkNCi17DQotICAgIENGWF9CeXRlU3RyaW5nIHR5cGVfbmFtZSA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJGVCIpLT5HZXRTdHJpbmcoKTsNCi0gICAgRlhfRFdPUkQgZmxhZ3MgPSBGUERGX0dldEZpZWxkQXR0cihtX3BEaWN0LCAiRmYiKS0+R2V0SW50ZWdlcigpOw0KLSAgICBtX0ZsYWdzID0gMDsNCi0gICAgaWYgKGZsYWdzICYgMSkgew0KLSAgICAgICAgbV9GbGFncyB8PSBGT1JNRklFTERfUkVBRE9OTFk7DQotICAgIH0NCi0gICAgaWYgKGZsYWdzICYgMikgew0KLSAgICAgICAgbV9GbGFncyB8PSBGT1JNRklFTERfUkVRVUlSRUQ7DQotICAgIH0NCi0gICAgaWYgKGZsYWdzICYgNCkgew0KLSAgICAgICAgbV9GbGFncyB8PSBGT1JNRklFTERfTk9FWFBPUlQ7DQotICAgIH0NCi0gICAgaWYgKHR5cGVfbmFtZSA9PSAiQnRuIikgew0KLSAgICAgICAgaWYgKGZsYWdzICYgMHg4MDAwKSB7DQotICAgICAgICAgICAgbV9UeXBlID0gUmFkaW9CdXR0b247DQotICAgICAgICAgICAgaWYgKGZsYWdzICYgMHg0MDAwKSB7DQotICAgICAgICAgICAgICAgIG1fRmxhZ3MgfD0gRk9STVJBRElPX05PVE9HR0xFT0ZGOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoZmxhZ3MgJiAweDIwMDAwMDApIHsNCi0gICAgICAgICAgICAgICAgbV9GbGFncyB8PSBGT1JNUkFESU9fVU5JU09OOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiAweDEwMDAwKSB7DQotICAgICAgICAgICAgbV9UeXBlID0gUHVzaEJ1dHRvbjsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbV9UeXBlID0gQ2hlY2tCb3g7DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZiAodHlwZV9uYW1lID09ICJUeCIpIHsNCi0gICAgICAgIGlmIChmbGFncyAmIDB4MTAwMDAwKSB7DQotICAgICAgICAgICAgbV9UeXBlID0gRmlsZTsNCi0gICAgICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiAweDIwMDAwMDApIHsNCi0gICAgICAgICAgICBtX1R5cGUgPSBSaWNoVGV4dDsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbV9UeXBlID0gVGV4dDsNCi0gICAgICAgICAgICBpZiAoZmxhZ3MgJiAweDEwMDApIHsNCi0gICAgICAgICAgICAgICAgbV9GbGFncyB8PSBGT1JNVEVYVF9NVUxUSUxJTkU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChmbGFncyAmIDB4MjAwMCkgew0KLSAgICAgICAgICAgICAgICBtX0ZsYWdzIHw9IEZPUk1URVhUX1BBU1NXT1JEOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoZmxhZ3MgJiAweDgwMDAwMCkgew0KLSAgICAgICAgICAgICAgICBtX0ZsYWdzIHw9IEZPUk1URVhUX05PU0NST0xMOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoZmxhZ3MgJiAweDEwMDAwMCkgew0KLSAgICAgICAgICAgICAgICBtX0ZsYWdzIHw9IEZPUk1URVhUX0NPTUI7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgTG9hZERBKCk7DQotICAgIH0gZWxzZSBpZiAodHlwZV9uYW1lID09ICJDaCIpIHsNCi0gICAgICAgIGlmIChmbGFncyAmIDB4MjAwMDApIHsNCi0gICAgICAgICAgICBtX1R5cGUgPSBDb21ib0JveDsNCi0gICAgICAgICAgICBpZiAoZmxhZ3MgJiAweDQwMDAwKSB7DQotICAgICAgICAgICAgICAgIG1fRmxhZ3MgfD0gRk9STUNPTUJPX0VESVQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBtX1R5cGUgPSBMaXN0Qm94Ow0KLSAgICAgICAgICAgIGlmIChmbGFncyAmIDB4MjAwMDAwKSB7DQotICAgICAgICAgICAgICAgIG1fRmxhZ3MgfD0gRk9STUxJU1RfTVVMVElTRUxFQ1Q7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgTG9hZERBKCk7DQotICAgIH0gZWxzZSBpZiAodHlwZV9uYW1lID09ICJTaWciKSB7DQotICAgICAgICBtX1R5cGUgPSBTaWduOw0KLSAgICB9DQotfQ0KLUNGWF9XaWRlU3RyaW5nIENQREZfRm9ybUZpZWxkOjpHZXRGdWxsTmFtZSgpDQotew0KLSAgICByZXR1cm4gOjpHZXRGdWxsTmFtZShtX3BEaWN0KTsNCi19DQotRlhfQk9PTCBDUERGX0Zvcm1GaWVsZDo6UmVzZXRGaWVsZChGWF9CT09MIGJOb3RpZnkpDQotew0KLSAgICBzd2l0Y2ggKG1fVHlwZSkgew0KLSAgICAgICAgY2FzZSBDUERGX0Zvcm1GaWVsZDo6Q2hlY2tCb3g6DQotICAgICAgICBjYXNlIENQREZfRm9ybUZpZWxkOjpSYWRpb0J1dHRvbjogew0KLSAgICAgICAgICAgICAgICBDRlhfQnl0ZUFycmF5IHN0YXR1c0FycmF5Ow0KLSAgICAgICAgICAgICAgICBpZiAoYk5vdGlmeSAmJiBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5ICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgIFNhdmVDaGVja2VkRmllbGRTdGF0dXModGhpcywgc3RhdHVzQXJyYXkpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGludCBpQ291bnQgPSBDb3VudENvbnRyb2xzKCk7DQotICAgICAgICAgICAgICAgIGlmIChpQ291bnQpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChQREZfRm9ybUZpZWxkX0lzVW5pc29uKHRoaXMpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGlDb3VudDsgaSsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrQ29udHJvbChpLCBHZXRDb250cm9sKGkpLT5Jc0RlZmF1bHRDaGVja2VkKCksIEZBTFNFKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaUNvdW50OyBpICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sID0gR2V0Q29udHJvbChpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiQ2hlY2tlZCA9IHBDb250cm9sLT5Jc0RlZmF1bHRDaGVja2VkKCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoZWNrQ29udHJvbChpLCBiQ2hlY2tlZCwgRkFMU0UpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoYk5vdGlmeSAmJiBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5ICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnktPkFmdGVyQ2hlY2tlZFN0YXR1c0NoYW5nZSh0aGlzLCBzdGF0dXNBcnJheSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIENQREZfRm9ybUZpZWxkOjpDb21ib0JveDogew0KLSAgICAgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyBjc1ZhbHVlOw0KLSAgICAgICAgICAgICAgICBDbGVhclNlbGVjdGlvbigpOw0KLSAgICAgICAgICAgICAgICBpbnQgaUluZGV4ID0gR2V0RGVmYXVsdFNlbGVjdGVkSXRlbSgpOw0KLSAgICAgICAgICAgICAgICBpZiAoaUluZGV4ID49IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIGNzVmFsdWUgPSBHZXRPcHRpb25MYWJlbChpSW5kZXgpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgaW50IGlSZXQgPSBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5CZWZvcmVWYWx1ZUNoYW5nZSh0aGlzLCBjc1ZhbHVlKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChpUmV0IDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBTZXRJdGVtU2VsZWN0aW9uKGlJbmRleCwgVFJVRSk7DQotICAgICAgICAgICAgICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QWZ0ZXJWYWx1ZUNoYW5nZSh0aGlzKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgQ1BERl9Gb3JtRmllbGQ6Okxpc3RCb3g6IHsNCi0gICAgICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgY3NWYWx1ZTsNCi0gICAgICAgICAgICAgICAgQ2xlYXJTZWxlY3Rpb24oKTsNCi0gICAgICAgICAgICAgICAgaW50IGlJbmRleCA9IEdldERlZmF1bHRTZWxlY3RlZEl0ZW0oKTsNCi0gICAgICAgICAgICAgICAgaWYgKGlJbmRleCA+PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICBjc1ZhbHVlID0gR2V0T3B0aW9uTGFiZWwoaUluZGV4KTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoYk5vdGlmeSAmJiBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5ICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgIGludCBpUmV0ID0gbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QmVmb3JlU2VsZWN0aW9uQ2hhbmdlKHRoaXMsIGNzVmFsdWUpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlSZXQgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIFNldEl0ZW1TZWxlY3Rpb24oaUluZGV4LCBUUlVFKTsNCi0gICAgICAgICAgICAgICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5BZnRlclNlbGVjdGlvbkNoYW5nZSh0aGlzKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgQ1BERl9Gb3JtRmllbGQ6OlRleHQ6DQotICAgICAgICBjYXNlIENQREZfRm9ybUZpZWxkOjpSaWNoVGV4dDoNCi0gICAgICAgIGNhc2UgQ1BERl9Gb3JtRmllbGQ6OkZpbGU6DQotICAgICAgICBkZWZhdWx0OiB7DQotICAgICAgICAgICAgICAgIENQREZfT2JqZWN0KiBwRFYgPSBGUERGX0dldEZpZWxkQXR0cihtX3BEaWN0LCAiRFYiKTsNCi0gICAgICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgY3NEVmFsdWU7DQotICAgICAgICAgICAgICAgIGlmIChwRFYgIT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgY3NEVmFsdWUgPSBwRFYtPkdldFVuaWNvZGVUZXh0KCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBWID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIlYiKTsNCi0gICAgICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgY3NWYWx1ZTsNCi0gICAgICAgICAgICAgICAgaWYgKHBWICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgIGNzVmFsdWUgPSBwVi0+R2V0VW5pY29kZVRleHQoKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBDUERGX09iamVjdCogcFJWID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIlJWIik7DQotICAgICAgICAgICAgICAgIGlmICghcFJWICYmIChjc0RWYWx1ZSA9PSBjc1ZhbHVlKSkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgaW50IGlSZXQgPSBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5CZWZvcmVWYWx1ZUNoYW5nZSh0aGlzLCBjc0RWYWx1ZSk7DQotICAgICAgICAgICAgICAgICAgICBpZiAoaVJldCA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKHBEViA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICBtX3BEaWN0LT5SZW1vdmVBdCgiViIpOw0KLSAgICAgICAgICAgICAgICAgICAgbV9wRGljdC0+UmVtb3ZlQXQoIlJWIik7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBDUERGX09iamVjdCogcENsb25lID0gcERWLT5DbG9uZSgpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBDbG9uZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgbV9wRGljdC0+U2V0QXQoIlYiLCBwQ2xvbmUpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYocFJWKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBDbG9uZVIgPSBwRFYtPkNsb25lKCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9wRGljdC0+U2V0QXQoIlJWIiwgcENsb25lUik7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5BZnRlclZhbHVlQ2hhbmdlKHRoaXMpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG1fcEZvcm0tPm1fYlVwZGF0ZWQgPSBUUlVFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBicmVhazsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotaW50IENQREZfRm9ybUZpZWxkOjpHZXRDb250cm9sSW5kZXgoY29uc3QgQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2wpDQotew0KLSAgICBpZiAocENvbnRyb2wgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIGludCBpQ291bnQgPSBtX0NvbnRyb2xMaXN0LkdldFNpemUoKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspIHsNCi0gICAgICAgIENQREZfRm9ybUNvbnRyb2wqIHBGaW5kID0gKENQREZfRm9ybUNvbnRyb2wqKW1fQ29udHJvbExpc3QuR2V0QXQoaSk7DQotICAgICAgICBpZiAocEZpbmQgPT0gcENvbnRyb2wpIHsNCi0gICAgICAgICAgICByZXR1cm4gaTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gLTE7DQotfQ0KLWludCBDUERGX0Zvcm1GaWVsZDo6R2V0RmllbGRUeXBlKCkNCi17DQotICAgIHN3aXRjaCAobV9UeXBlKSB7DQotICAgICAgICBjYXNlIFB1c2hCdXR0b246DQotICAgICAgICAgICAgcmV0dXJuIEZJRUxEVFlQRV9QVVNIQlVUVE9OOw0KLSAgICAgICAgY2FzZSBDaGVja0JveDoNCi0gICAgICAgICAgICByZXR1cm4gRklFTERUWVBFX0NIRUNLQk9YOw0KLSAgICAgICAgY2FzZSBSYWRpb0J1dHRvbjoNCi0gICAgICAgICAgICByZXR1cm4gRklFTERUWVBFX1JBRElPQlVUVE9OOw0KLSAgICAgICAgY2FzZSBDb21ib0JveDoNCi0gICAgICAgICAgICByZXR1cm4gRklFTERUWVBFX0NPTUJPQk9YOw0KLSAgICAgICAgY2FzZSBMaXN0Qm94Og0KLSAgICAgICAgICAgIHJldHVybiBGSUVMRFRZUEVfTElTVEJPWDsNCi0gICAgICAgIGNhc2UgVGV4dDoNCi0gICAgICAgIGNhc2UgUmljaFRleHQ6DQotICAgICAgICBjYXNlIEZpbGU6DQotICAgICAgICAgICAgcmV0dXJuIEZJRUxEVFlQRV9URVhURklFTEQ7DQotICAgICAgICBjYXNlIFNpZ246DQotICAgICAgICAgICAgcmV0dXJuIEZJRUxEVFlQRV9TSUdOQVRVUkU7DQotICAgICAgICBkZWZhdWx0Og0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICB9DQotICAgIHJldHVybiBGSUVMRFRZUEVfVU5LTk9XTjsNCi19DQotQ1BERl9BQWN0aW9uIENQREZfRm9ybUZpZWxkOjpHZXRBZGRpdGlvbmFsQWN0aW9uKCkNCi17DQotICAgIENQREZfT2JqZWN0KiBwT2JqID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIkFBIik7DQotICAgIGlmIChwT2JqID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiBwT2JqLT5HZXREaWN0KCk7DQotfQ0KLUNGWF9XaWRlU3RyaW5nIENQREZfRm9ybUZpZWxkOjpHZXRBbHRlcm5hdGVOYW1lKCkNCi17DQotICAgIENQREZfT2JqZWN0KiBwT2JqID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIlRVIik7DQotICAgIGlmIChwT2JqID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBMIiI7DQotICAgIH0NCi0gICAgcmV0dXJuIHBPYmotPkdldFVuaWNvZGVUZXh0KCk7DQotfQ0KLUNGWF9XaWRlU3RyaW5nIENQREZfRm9ybUZpZWxkOjpHZXRNYXBwaW5nTmFtZSgpDQotew0KLSAgICBDUERGX09iamVjdCogcE9iaiA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJUTSIpOw0KLSAgICBpZiAocE9iaiA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTCIiOw0KLSAgICB9DQotICAgIHJldHVybiBwT2JqLT5HZXRVbmljb2RlVGV4dCgpOw0KLX0NCi1GWF9EV09SRCBDUERGX0Zvcm1GaWVsZDo6R2V0RmllbGRGbGFncygpDQotew0KLSAgICBDUERGX09iamVjdCogcE9iaiA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJGZiIpOw0KLSAgICBpZiAocE9iaiA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICByZXR1cm4gcE9iai0+R2V0SW50ZWdlcigpOw0KLX0NCi1DRlhfQnl0ZVN0cmluZyBDUERGX0Zvcm1GaWVsZDo6R2V0RGVmYXVsdFN0eWxlKCkNCi17DQotICAgIENQREZfT2JqZWN0KiBwT2JqID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIkRTIik7DQotICAgIGlmIChwT2JqID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAiIjsNCi0gICAgfQ0KLSAgICByZXR1cm4gcE9iai0+R2V0U3RyaW5nKCk7DQotfQ0KLUNGWF9XaWRlU3RyaW5nIENQREZfRm9ybUZpZWxkOjpHZXRSaWNoVGV4dFN0cmluZygpDQotew0KLSAgICBDUERGX09iamVjdCogcE9iaiA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJSViIpOw0KLSAgICBpZiAocE9iaiA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTCIiOw0KLSAgICB9DQotICAgIHJldHVybiBwT2JqLT5HZXRVbmljb2RlVGV4dCgpOw0KLX0NCi1DRlhfV2lkZVN0cmluZyBDUERGX0Zvcm1GaWVsZDo6R2V0VmFsdWUoRlhfQk9PTCBiRGVmYXVsdCkNCi17DQotICAgIGlmIChHZXRUeXBlKCkgPT0gQ2hlY2tCb3ggfHwgR2V0VHlwZSgpID09IFJhZGlvQnV0dG9uKSB7DQotICAgICAgICByZXR1cm4gR2V0Q2hlY2tWYWx1ZShiRGVmYXVsdCk7DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QqIHBWYWx1ZSA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsIGJEZWZhdWx0ID8gIkRWIiA6ICJWIik7DQotICAgIGlmIChwVmFsdWUgPT0gTlVMTCkgew0KLSAgICAgICAgaWYgKCFiRGVmYXVsdCkgew0KLSAgICAgICAgICAgIGlmIChtX1R5cGUgPT0gUmljaFRleHQpIHsNCi0gICAgICAgICAgICAgICAgcFZhbHVlID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIlYiKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKHBWYWx1ZSA9PSBOVUxMICYmIG1fVHlwZSAhPSBUZXh0KSB7DQotICAgICAgICAgICAgICAgIHBWYWx1ZSA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJEViIpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwVmFsdWUgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZygpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHN3aXRjaCAocFZhbHVlLT5HZXRUeXBlKCkpIHsNCi0gICAgICAgIGNhc2UgUERGT0JKX1NUUklORzoNCi0gICAgICAgIGNhc2UgUERGT0JKX1NUUkVBTToNCi0gICAgICAgICAgICByZXR1cm4gcFZhbHVlLT5HZXRVbmljb2RlVGV4dCgpOw0KLSAgICAgICAgY2FzZSBQREZPQkpfQVJSQVk6DQotICAgICAgICAgICAgcFZhbHVlID0gKChDUERGX0FycmF5KilwVmFsdWUpLT5HZXRFbGVtZW50VmFsdWUoMCk7DQotICAgICAgICAgICAgcmV0dXJuIHBWYWx1ZS0+R2V0VW5pY29kZVRleHQoKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgfQ0KLSAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsNCi19DQotQ0ZYX1dpZGVTdHJpbmcgQ1BERl9Gb3JtRmllbGQ6OkdldFZhbHVlKCkNCi17DQotICAgIHJldHVybiBHZXRWYWx1ZShGQUxTRSk7DQotfQ0KLUNGWF9XaWRlU3RyaW5nIENQREZfRm9ybUZpZWxkOjpHZXREZWZhdWx0VmFsdWUoKQ0KLXsNCi0gICAgcmV0dXJuIEdldFZhbHVlKFRSVUUpOw0KLX0NCi1GWF9CT09MIENQREZfRm9ybUZpZWxkOjpTZXRWYWx1ZShjb25zdCBDRlhfV2lkZVN0cmluZyYgdmFsdWUsIEZYX0JPT0wgYkRlZmF1bHQsIEZYX0JPT0wgYk5vdGlmeSkNCi17DQotICAgIHN3aXRjaCAobV9UeXBlKSB7DQotICAgICAgICBjYXNlIENoZWNrQm94Og0KLSAgICAgICAgY2FzZSBSYWRpb0J1dHRvbjogew0KLSAgICAgICAgICAgICAgICBTZXRDaGVja1ZhbHVlKHZhbHVlLCBiRGVmYXVsdCwgYk5vdGlmeSk7DQotICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgRmlsZToNCi0gICAgICAgIGNhc2UgUmljaFRleHQ6DQotICAgICAgICBjYXNlIFRleHQ6DQotICAgICAgICBjYXNlIENvbWJvQm94OiB7DQotICAgICAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIGNzVmFsdWUgPSB2YWx1ZTsNCi0gICAgICAgICAgICAgICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICBpbnQgaVJldCA9IG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnktPkJlZm9yZVZhbHVlQ2hhbmdlKHRoaXMsIGNzVmFsdWUpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGlSZXQgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGludCBpSW5kZXggPSBGaW5kT3B0aW9uVmFsdWUoY3NWYWx1ZSk7DQotICAgICAgICAgICAgICAgIGlmIChpSW5kZXggPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBic0VuY29kZVRleHQgPSBQREZfRW5jb2RlVGV4dChjc1ZhbHVlKTsNCi0gICAgICAgICAgICAgICAgICAgIG1fcERpY3QtPlNldEF0U3RyaW5nKGJEZWZhdWx0ID8gIkRWIiA6ICJWIiwgYnNFbmNvZGVUZXh0KTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX1R5cGUgPT0gUmljaFRleHQgJiYgIWJEZWZhdWx0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9wRGljdC0+U2V0QXRTdHJpbmcoIlJWIiwgYnNFbmNvZGVUZXh0KTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIG1fcERpY3QtPlJlbW92ZUF0KCJJIik7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBtX3BEaWN0LT5TZXRBdFN0cmluZyhiRGVmYXVsdCA/ICJEViIgOiAiViIsIFBERl9FbmNvZGVUZXh0KGNzVmFsdWUpKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChiRGVmYXVsdCkgew0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBDbGVhclNlbGVjdGlvbigpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNldEl0ZW1TZWxlY3Rpb24oaUluZGV4LCBUUlVFKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoYk5vdGlmeSAmJiBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5ICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnktPkFmdGVyVmFsdWVDaGFuZ2UodGhpcyk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbV9wRm9ybS0+bV9iVXBkYXRlZCA9IFRSVUU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBMaXN0Qm94OiB7DQotICAgICAgICAgICAgICAgIGludCBpSW5kZXggPSBGaW5kT3B0aW9uVmFsdWUodmFsdWUpOw0KLSAgICAgICAgICAgICAgICBpZiAoaUluZGV4IDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChiRGVmYXVsdCAmJiBpSW5kZXggPT0gR2V0RGVmYXVsdFNlbGVjdGVkSXRlbSgpKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyBjc1ZhbHVlID0gdmFsdWU7DQotICAgICAgICAgICAgICAgICAgICBpbnQgaVJldCA9IG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnktPkJlZm9yZVNlbGVjdGlvbkNoYW5nZSh0aGlzLCBjc1ZhbHVlKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChpUmV0IDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoYkRlZmF1bHQpIHsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIENsZWFyU2VsZWN0aW9uKCk7DQotICAgICAgICAgICAgICAgICAgICBTZXRJdGVtU2VsZWN0aW9uKGlJbmRleCwgVFJVRSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5BZnRlclNlbGVjdGlvbkNoYW5nZSh0aGlzKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBtX3BGb3JtLT5tX2JVcGRhdGVkID0gVFJVRTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgZGVmYXVsdDoNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgfQ0KLSAgICBpZiAoQ1BERl9JbnRlckZvcm06Om1fYlVwZGF0ZUFQKSB7DQotICAgICAgICBVcGRhdGVBUChOVUxMKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDUERGX0Zvcm1GaWVsZDo6U2V0VmFsdWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHZhbHVlLCBGWF9CT09MIGJOb3RpZnkpDQotew0KLSAgICByZXR1cm4gU2V0VmFsdWUodmFsdWUsIEZBTFNFLCBiTm90aWZ5KTsNCi19DQotaW50IENQREZfRm9ybUZpZWxkOjpHZXRNYXhMZW4oKQ0KLXsNCi0gICAgQ1BERl9PYmplY3QqIHBPYmogPSBGUERGX0dldEZpZWxkQXR0cihtX3BEaWN0LCAiTWF4TGVuIik7DQotICAgIGlmIChwT2JqID09IE5VTEwpIHsNCi0gICAgICAgIGludCBpQ291bnQgPSBtX0NvbnRyb2xMaXN0LkdldFNpemUoKTsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaUNvdW50OyBpICsrKSB7DQotICAgICAgICAgICAgQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2wgPSAoQ1BERl9Gb3JtQ29udHJvbCopbV9Db250cm9sTGlzdC5HZXRBdChpKTsNCi0gICAgICAgICAgICBpZiAocENvbnRyb2wgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwV2lkZ2V0RGljdCA9IHBDb250cm9sLT5tX3BXaWRnZXREaWN0Ow0KLSAgICAgICAgICAgIGlmIChwV2lkZ2V0RGljdC0+S2V5RXhpc3QoIk1heExlbiIpKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBwV2lkZ2V0RGljdC0+R2V0SW50ZWdlcigiTWF4TGVuIik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgcmV0dXJuIHBPYmotPkdldEludGVnZXIoKTsNCi19DQotaW50IENQREZfRm9ybUZpZWxkOjpDb3VudFNlbGVjdGVkSXRlbXMoKQ0KLXsNCi0gICAgQ1BERl9PYmplY3QqIHBWYWx1ZSA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJWIik7DQotICAgIGlmIChwVmFsdWUgPT0gTlVMTCkgew0KLSAgICAgICAgcFZhbHVlID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIkkiKTsNCi0gICAgICAgIGlmIChwVmFsdWUgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChwVmFsdWUtPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSSU5HKSB7DQotICAgICAgICBpZiAocFZhbHVlLT5HZXRTdHJpbmcoKS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotICAgIGlmIChwVmFsdWUtPkdldFR5cGUoKSA9PSBQREZPQkpfTlVNQkVSKSB7DQotICAgICAgICBpZiAocFZhbHVlLT5HZXRTdHJpbmcoKS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotICAgIGlmIChwVmFsdWUtPkdldFR5cGUoKSAhPSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIHJldHVybiAoKENQREZfQXJyYXkqKXBWYWx1ZSktPkdldENvdW50KCk7DQotfQ0KLWludCBDUERGX0Zvcm1GaWVsZDo6R2V0U2VsZWN0ZWRJbmRleChpbnQgaW5kZXgpDQotew0KLSAgICBDUERGX09iamVjdCogcFZhbHVlID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIlYiKTsNCi0gICAgaWYgKHBWYWx1ZSA9PSBOVUxMKSB7DQotICAgICAgICBwVmFsdWUgPSBGUERGX0dldEZpZWxkQXR0cihtX3BEaWN0LCAiSSIpOw0KLSAgICAgICAgaWYgKHBWYWx1ZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIENGWF9XaWRlU3RyaW5nIHNlbF92YWx1ZTsNCi0gICAgaWYgKHBWYWx1ZS0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJJTkcpIHsNCi0gICAgICAgIGlmIChpbmRleCAhPSAwKSB7DQotICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgfQ0KLSAgICAgICAgc2VsX3ZhbHVlID0gcFZhbHVlLT5HZXRVbmljb2RlVGV4dCgpOw0KLSAgICB9IGVsc2UgaWYgKHBWYWx1ZS0+R2V0VHlwZSgpID09IFBERk9CSl9OVU1CRVIpIHsNCi0gICAgICAgIHJldHVybiBwVmFsdWUtPkdldEludGVnZXIoKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGlmIChwVmFsdWUtPkdldFR5cGUoKSAhPSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICB9DQotICAgICAgICBpZiAoaW5kZXggPCAwKSB7DQotICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgfQ0KLSAgICAgICAgc2VsX3ZhbHVlID0gKChDUERGX0FycmF5KilwVmFsdWUpLT5HZXRFbGVtZW50VmFsdWUoaW5kZXgpLT5HZXRVbmljb2RlVGV4dCgpOw0KLSAgICB9DQotICAgIGlmIChpbmRleCA8IENvdW50U2VsZWN0ZWRPcHRpb25zKCkpIHsNCi0gICAgICAgIGludCBpT3B0SW5kZXggPSBHZXRTZWxlY3RlZE9wdGlvbkluZGV4KGluZGV4KTsNCi0gICAgICAgIENGWF9XaWRlU3RyaW5nIGNzT3B0ID0gR2V0T3B0aW9uVmFsdWUoaU9wdEluZGV4KTsNCi0gICAgICAgIGlmIChjc09wdCA9PSBzZWxfdmFsdWUpIHsNCi0gICAgICAgICAgICByZXR1cm4gaU9wdEluZGV4Ow0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGludCBuT3B0cyA9IENvdW50T3B0aW9ucygpOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5PcHRzOyBpICsrKSB7DQotICAgICAgICBpZiAoc2VsX3ZhbHVlID09IEdldE9wdGlvblZhbHVlKGkpKSB7DQotICAgICAgICAgICAgcmV0dXJuIGk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIC0xOw0KLX0NCi1GWF9CT09MIENQREZfRm9ybUZpZWxkOjpDbGVhclNlbGVjdGlvbihGWF9CT09MIGJOb3RpZnkpDQotew0KLSAgICBpZiAoYk5vdGlmeSAmJiBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5ICE9IE5VTEwpIHsNCi0gICAgICAgIGludCBpUmV0ID0gMDsNCi0gICAgICAgIENGWF9XaWRlU3RyaW5nIGNzVmFsdWU7DQotICAgICAgICBpbnQgaUluZGV4ID0gR2V0U2VsZWN0ZWRJbmRleCgwKTsNCi0gICAgICAgIGlmIChpSW5kZXggPj0gMCkgew0KLSAgICAgICAgICAgIGNzVmFsdWUgPSBHZXRPcHRpb25MYWJlbChpSW5kZXgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKEdldFR5cGUoKSA9PSBMaXN0Qm94KSB7DQotICAgICAgICAgICAgaVJldCA9IG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnktPkJlZm9yZVNlbGVjdGlvbkNoYW5nZSh0aGlzLCBjc1ZhbHVlKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChHZXRUeXBlKCkgPT0gQ29tYm9Cb3gpIHsNCi0gICAgICAgICAgICBpUmV0ID0gbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QmVmb3JlVmFsdWVDaGFuZ2UodGhpcywgY3NWYWx1ZSk7DQotICAgICAgICB9DQotICAgICAgICBpZiAoaVJldCA8IDApIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9wRGljdC0+UmVtb3ZlQXQoIlYiKTsNCi0gICAgbV9wRGljdC0+UmVtb3ZlQXQoIkkiKTsNCi0gICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7DQotICAgICAgICBpZiAoR2V0VHlwZSgpID09IExpc3RCb3gpIHsNCi0gICAgICAgICAgICBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5BZnRlclNlbGVjdGlvbkNoYW5nZSh0aGlzKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChHZXRUeXBlKCkgPT0gQ29tYm9Cb3gpIHsNCi0gICAgICAgICAgICBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5BZnRlclZhbHVlQ2hhbmdlKHRoaXMpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChDUERGX0ludGVyRm9ybTo6bV9iVXBkYXRlQVApIHsNCi0gICAgICAgIFVwZGF0ZUFQKE5VTEwpOw0KLSAgICB9DQotICAgIG1fcEZvcm0tPm1fYlVwZGF0ZWQgPSBUUlVFOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDUERGX0Zvcm1GaWVsZDo6SXNJdGVtU2VsZWN0ZWQoaW50IGluZGV4KQ0KLXsNCi0gICAgQVNTRVJUKEdldFR5cGUoKSA9PSBDb21ib0JveCB8fCBHZXRUeXBlKCkgPT0gTGlzdEJveCk7DQotICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gQ291bnRPcHRpb25zKCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoSXNPcHRpb25TZWxlY3RlZChpbmRleCkpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIENGWF9XaWRlU3RyaW5nIG9wdF92YWx1ZSA9IEdldE9wdGlvblZhbHVlKGluZGV4KTsNCi0gICAgQ1BERl9PYmplY3QqIHBWYWx1ZSA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJWIik7DQotICAgIGlmIChwVmFsdWUgPT0gTlVMTCkgew0KLSAgICAgICAgcFZhbHVlID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIkkiKTsNCi0gICAgICAgIGlmIChwVmFsdWUgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAocFZhbHVlLT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUklORykgew0KLSAgICAgICAgaWYgKHBWYWx1ZS0+R2V0VW5pY29kZVRleHQoKSA9PSBvcHRfdmFsdWUpIHsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAocFZhbHVlLT5HZXRUeXBlKCkgPT0gUERGT0JKX05VTUJFUikgew0KLSAgICAgICAgaWYgKHBWYWx1ZS0+R2V0U3RyaW5nKCkuSXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBWYWx1ZS0+R2V0SW50ZWdlcigpID09IGluZGV4KSB7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKHBWYWx1ZS0+R2V0VHlwZSgpICE9IFBERk9CSl9BUlJBWSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIENQREZfQXJyYXkqIHBBcnJheSA9IChDUERGX0FycmF5KilwVmFsdWU7DQotICAgIGludCBpUG9zID0gLTE7DQotICAgIGZvciAoaW50IGogPSAwOyBqIDwgQ291bnRTZWxlY3RlZE9wdGlvbnMoKTsgaiArKykgew0KLSAgICAgICAgaWYgKEdldFNlbGVjdGVkT3B0aW9uSW5kZXgoaikgPT0gaW5kZXgpIHsNCi0gICAgICAgICAgICBpUG9zID0gajsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcEFycmF5LT5HZXRDb3VudCgpOyBpICsrKQ0KLSAgICAgICAgaWYgKHBBcnJheS0+R2V0RWxlbWVudFZhbHVlKGkpLT5HZXRVbmljb2RlVGV4dCgpID09IG9wdF92YWx1ZSAmJiAoaW50KWkgPT0gaVBvcykgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUZYX0JPT0wgQ1BERl9Gb3JtRmllbGQ6OlNldEl0ZW1TZWxlY3Rpb24oaW50IGluZGV4LCBGWF9CT09MIGJTZWxlY3RlZCwgRlhfQk9PTCBiTm90aWZ5KQ0KLXsNCi0gICAgQVNTRVJUKEdldFR5cGUoKSA9PSBDb21ib0JveCB8fCBHZXRUeXBlKCkgPT0gTGlzdEJveCk7DQotICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gQ291bnRPcHRpb25zKCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDRlhfV2lkZVN0cmluZyBvcHRfdmFsdWUgPSBHZXRPcHRpb25WYWx1ZShpbmRleCk7DQotICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgew0KLSAgICAgICAgaW50IGlSZXQgPSAwOw0KLSAgICAgICAgaWYgKEdldFR5cGUoKSA9PSBMaXN0Qm94KSB7DQotICAgICAgICAgICAgaVJldCA9IG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnktPkJlZm9yZVNlbGVjdGlvbkNoYW5nZSh0aGlzLCBvcHRfdmFsdWUpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKEdldFR5cGUoKSA9PSBDb21ib0JveCkgew0KLSAgICAgICAgICAgIGlSZXQgPSBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5CZWZvcmVWYWx1ZUNoYW5nZSh0aGlzLCBvcHRfdmFsdWUpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGlSZXQgPCAwKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmICghYlNlbGVjdGVkKSB7DQotICAgICAgICBDUERGX09iamVjdCogcFZhbHVlID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIlYiKTsNCi0gICAgICAgIGlmIChwVmFsdWUgIT0gTlVMTCkgew0KLSAgICAgICAgICAgIGlmIChtX1R5cGUgPT0gTGlzdEJveCkgew0KLSAgICAgICAgICAgICAgICBTZWxlY3RPcHRpb24oaW5kZXgsIEZBTFNFKTsNCi0gICAgICAgICAgICAgICAgaWYgKHBWYWx1ZS0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJJTkcpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwVmFsdWUtPkdldFVuaWNvZGVUZXh0KCkgPT0gb3B0X3ZhbHVlKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9wRGljdC0+UmVtb3ZlQXQoIlYiKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwVmFsdWUtPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgICAgICAgICAgICAgIENQREZfQXJyYXkqIHBBcnJheSA9IENQREZfQXJyYXk6OkNyZWF0ZSgpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBBcnJheSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaW50IGlDb3VudCA9IENvdW50T3B0aW9ucygpOw0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSBpbmRleCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNJdGVtU2VsZWN0ZWQoaSkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF92YWx1ZSA9IEdldE9wdGlvblZhbHVlKGkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFycmF5LT5BZGRTdHJpbmcoUERGX0VuY29kZVRleHQob3B0X3ZhbHVlKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBpZiAocEFycmF5LT5HZXRDb3VudCgpIDwgMSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBBcnJheS0+UmVsZWFzZSgpOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3BEaWN0LT5TZXRBdCgiViIsIHBBcnJheSk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fVHlwZSA9PSBDb21ib0JveCkgew0KLSAgICAgICAgICAgICAgICBtX3BEaWN0LT5SZW1vdmVBdCgiViIpOw0KLSAgICAgICAgICAgICAgICBtX3BEaWN0LT5SZW1vdmVBdCgiSSIpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGlmIChtX1R5cGUgPT0gTGlzdEJveCkgew0KLSAgICAgICAgICAgIFNlbGVjdE9wdGlvbihpbmRleCwgVFJVRSk7DQotICAgICAgICAgICAgaWYgKCEobV9GbGFncyAmIEZPUk1MSVNUX01VTFRJU0VMRUNUKSkgew0KLSAgICAgICAgICAgICAgICBtX3BEaWN0LT5TZXRBdFN0cmluZygiViIsIFBERl9FbmNvZGVUZXh0KG9wdF92YWx1ZSwgb3B0X3ZhbHVlLkdldExlbmd0aCgpKSk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgQ1BERl9BcnJheSogcEFycmF5ID0gQ1BERl9BcnJheTo6Q3JlYXRlKCk7DQotICAgICAgICAgICAgICAgIGlmIChwQXJyYXkgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIEZYX0JPT0wgYlNlbGVjdGVkOw0KLSAgICAgICAgICAgICAgICBpbnQgaUNvdW50ID0gQ291bnRPcHRpb25zKCk7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaUNvdW50OyBpICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSBpbmRleCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJTZWxlY3RlZCA9IElzSXRlbVNlbGVjdGVkKGkpOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBiU2VsZWN0ZWQgPSBUUlVFOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJTZWxlY3RlZCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdF92YWx1ZSA9IEdldE9wdGlvblZhbHVlKGkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBBcnJheS0+QWRkU3RyaW5nKFBERl9FbmNvZGVUZXh0KG9wdF92YWx1ZSkpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG1fcERpY3QtPlNldEF0KCJWIiwgcEFycmF5KTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2UgaWYgKG1fVHlwZSA9PSBDb21ib0JveCkgew0KLSAgICAgICAgICAgIG1fcERpY3QtPlNldEF0U3RyaW5nKCJWIiwgUERGX0VuY29kZVRleHQob3B0X3ZhbHVlLCBvcHRfdmFsdWUuR2V0TGVuZ3RoKCkpKTsNCi0gICAgICAgICAgICBDUERGX0FycmF5KiBwSSA9IENQREZfQXJyYXk6OkNyZWF0ZSgpOw0KLSAgICAgICAgICAgIGlmIChwSSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcEktPkFkZEludGVnZXIoaW5kZXgpOw0KLSAgICAgICAgICAgIG1fcERpY3QtPlNldEF0KCJJIiwgcEkpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgew0KLSAgICAgICAgaWYgKEdldFR5cGUoKSA9PSBMaXN0Qm94KSB7DQotICAgICAgICAgICAgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QWZ0ZXJTZWxlY3Rpb25DaGFuZ2UodGhpcyk7DQotICAgICAgICB9DQotICAgICAgICBpZiAoR2V0VHlwZSgpID09IENvbWJvQm94KSB7DQotICAgICAgICAgICAgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QWZ0ZXJWYWx1ZUNoYW5nZSh0aGlzKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoQ1BERl9JbnRlckZvcm06Om1fYlVwZGF0ZUFQKSB7DQotICAgICAgICBVcGRhdGVBUChOVUxMKTsNCi0gICAgfQ0KLSAgICBtX3BGb3JtLT5tX2JVcGRhdGVkID0gVFJVRTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ1BERl9Gb3JtRmllbGQ6OklzSXRlbURlZmF1bHRTZWxlY3RlZChpbnQgaW5kZXgpDQotew0KLSAgICBBU1NFUlQoR2V0VHlwZSgpID09IENvbWJvQm94IHx8IEdldFR5cGUoKSA9PSBMaXN0Qm94KTsNCi0gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBDb3VudE9wdGlvbnMoKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGludCBpRFZJbmRleCA9IEdldERlZmF1bHRTZWxlY3RlZEl0ZW0oKTsNCi0gICAgaWYgKGlEVkluZGV4IDwgMCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHJldHVybiAoaURWSW5kZXggPT0gaW5kZXgpOw0KLX0NCi1pbnQgQ1BERl9Gb3JtRmllbGQ6OkdldERlZmF1bHRTZWxlY3RlZEl0ZW0oKQ0KLXsNCi0gICAgQVNTRVJUKEdldFR5cGUoKSA9PSBDb21ib0JveCB8fCBHZXRUeXBlKCkgPT0gTGlzdEJveCk7DQotICAgIENQREZfT2JqZWN0KiBwVmFsdWUgPSBGUERGX0dldEZpZWxkQXR0cihtX3BEaWN0LCAiRFYiKTsNCi0gICAgaWYgKHBWYWx1ZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcgY3NEViA9IHBWYWx1ZS0+R2V0VW5pY29kZVRleHQoKTsNCi0gICAgaWYgKGNzRFYuSXNFbXB0eSgpKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgaW50IGlDb3VudCA9IENvdW50T3B0aW9ucygpOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGlDb3VudDsgaSArKykgew0KLSAgICAgICAgaWYgKGNzRFYgPT0gR2V0T3B0aW9uVmFsdWUoaSkpIHsNCi0gICAgICAgICAgICByZXR1cm4gaTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gLTE7DQotfQ0KLXZvaWQgQ1BERl9Gb3JtRmllbGQ6OlVwZGF0ZUFQKENQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sKQ0KLXsNCi0gICAgaWYgKG1fVHlwZSA9PSBQdXNoQnV0dG9uKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKG1fVHlwZSA9PSBSYWRpb0J1dHRvbiB8fCBtX1R5cGUgPT0gQ2hlY2tCb3gpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAoIW1fcEZvcm0tPm1fYkdlbmVyYXRlQVApIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IENvdW50Q29udHJvbHMoKTsgaSArKykgew0KLSAgICAgICAgQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2wgPSBHZXRDb250cm9sKGkpOw0KLSAgICAgICAgRlBERl9HZW5lcmF0ZUFQKG1fcEZvcm0tPm1fcERvY3VtZW50LCBwQ29udHJvbC0+bV9wV2lkZ2V0RGljdCk7DQotICAgIH0NCi19DQotaW50IENQREZfRm9ybUZpZWxkOjpDb3VudE9wdGlvbnMoKQ0KLXsNCi0gICAgQ1BERl9PYmplY3QqIHBWYWx1ZSA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJPcHQiKTsNCi0gICAgaWYgKHBWYWx1ZSA9PSBOVUxMIHx8IHBWYWx1ZS0+R2V0VHlwZSgpICE9IFBERk9CSl9BUlJBWSkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgcmV0dXJuICgoQ1BERl9BcnJheSopcFZhbHVlKS0+R2V0Q291bnQoKTsNCi19DQotQ0ZYX1dpZGVTdHJpbmcgQ1BERl9Gb3JtRmllbGQ6OkdldE9wdGlvblRleHQoaW50IGluZGV4LCBpbnQgc3ViX2luZGV4KQ0KLXsNCi0gICAgQ1BERl9PYmplY3QqIHBWYWx1ZSA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJPcHQiKTsNCi0gICAgaWYgKHBWYWx1ZSA9PSBOVUxMIHx8IHBWYWx1ZS0+R2V0VHlwZSgpICE9IFBERk9CSl9BUlJBWSkgew0KLSAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QqIHBPcHRpb24gPSAoKENQREZfQXJyYXkqKXBWYWx1ZSktPkdldEVsZW1lbnRWYWx1ZShpbmRleCk7DQotICAgIGlmIChwT3B0aW9uID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZygpOw0KLSAgICB9DQotICAgIGlmIChwT3B0aW9uLT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICBwT3B0aW9uID0gKChDUERGX0FycmF5KilwT3B0aW9uKS0+R2V0RWxlbWVudFZhbHVlKHN1Yl9pbmRleCk7DQotICAgIH0NCi0gICAgaWYgKHBPcHRpb24gPT0gTlVMTCB8fCBwT3B0aW9uLT5HZXRUeXBlKCkgIT0gUERGT0JKX1NUUklORykgew0KLSAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7DQotICAgIH0NCi0gICAgcmV0dXJuICgoQ1BERl9TdHJpbmcqKXBPcHRpb24pLT5HZXRVbmljb2RlVGV4dCgpOw0KLX0NCi1DRlhfV2lkZVN0cmluZyBDUERGX0Zvcm1GaWVsZDo6R2V0T3B0aW9uTGFiZWwoaW50IGluZGV4KQ0KLXsNCi0gICAgcmV0dXJuIEdldE9wdGlvblRleHQoaW5kZXgsIDEpOw0KLX0NCi1DRlhfV2lkZVN0cmluZyBDUERGX0Zvcm1GaWVsZDo6R2V0T3B0aW9uVmFsdWUoaW50IGluZGV4KQ0KLXsNCi0gICAgcmV0dXJuIEdldE9wdGlvblRleHQoaW5kZXgsIDApOw0KLX0NCi1pbnQgQ1BERl9Gb3JtRmllbGQ6OkZpbmRPcHRpb24oQ0ZYX1dpZGVTdHJpbmcgY3NPcHRMYWJlbCkNCi17DQotICAgIGludCBpQ291bnQgPSBDb3VudE9wdGlvbnMoKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspIHsNCi0gICAgICAgIENGWF9XaWRlU3RyaW5nIGNzVmFsdWUgPSBHZXRPcHRpb25WYWx1ZShpKTsNCi0gICAgICAgIGlmIChjc1ZhbHVlID09IGNzT3B0TGFiZWwpIHsNCi0gICAgICAgICAgICByZXR1cm4gaTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gLTE7DQotfQ0KLWludCBDUERGX0Zvcm1GaWVsZDo6RmluZE9wdGlvblZhbHVlKEZYX0xQQ1dTVFIgY3NPcHRWYWx1ZSwgaW50IGlTdGFydEluZGV4KQ0KLXsNCi0gICAgaWYgKGlTdGFydEluZGV4IDwgMCkgew0KLSAgICAgICAgaVN0YXJ0SW5kZXggPSAwOw0KLSAgICB9DQotICAgIGludCBpQ291bnQgPSBDb3VudE9wdGlvbnMoKTsNCi0gICAgZm9yICg7IGlTdGFydEluZGV4IDwgaUNvdW50OyBpU3RhcnRJbmRleCArKykgew0KLSAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgY3NWYWx1ZSA9IEdldE9wdGlvblZhbHVlKGlTdGFydEluZGV4KTsNCi0gICAgICAgIGlmIChjc1ZhbHVlID09IGNzT3B0VmFsdWUpIHsNCi0gICAgICAgICAgICByZXR1cm4gaVN0YXJ0SW5kZXg7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIC0xOw0KLX0NCi1GWF9CT09MIENQREZfRm9ybUZpZWxkOjpDaGVja0NvbnRyb2woaW50IGlDb250cm9sSW5kZXgsIEZYX0JPT0wgYkNoZWNrZWQsIEZYX0JPT0wgYk5vdGlmeSkNCi17DQotICAgIEFTU0VSVChHZXRUeXBlKCkgPT0gQ2hlY2tCb3ggfHwgR2V0VHlwZSgpID09IFJhZGlvQnV0dG9uKTsNCi0gICAgQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2wgPSBHZXRDb250cm9sKGlDb250cm9sSW5kZXgpOw0KLSAgICBpZiAocENvbnRyb2wgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmICghYkNoZWNrZWQgJiYgcENvbnRyb2wtPklzQ2hlY2tlZCgpID09IGJDaGVja2VkKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVBcnJheSBzdGF0dXNBcnJheTsNCi0gICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7DQotICAgICAgICBTYXZlQ2hlY2tlZEZpZWxkU3RhdHVzKHRoaXMsIHN0YXR1c0FycmF5KTsNCi0gICAgfQ0KLSAgICBDRlhfV2lkZVN0cmluZyBjc1dFeHBvcnQgPSAgcENvbnRyb2wtPkdldEV4cG9ydFZhbHVlKCk7DQotICAgIENGWF9CeXRlU3RyaW5nIGNzQkV4cG9ydCA9IFBERl9FbmNvZGVUZXh0KGNzV0V4cG9ydCk7DQotICAgIGludCBpQ291bnQgPSBDb3VudENvbnRyb2xzKCk7DQotICAgIEZYX0JPT0wgYlVuaXNvbiA9IFBERl9Gb3JtRmllbGRfSXNVbmlzb24odGhpcyk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaUNvdW50OyBpICsrKSB7DQotICAgICAgICBDUERGX0Zvcm1Db250cm9sKiBwQ3RybCA9IEdldENvbnRyb2woaSk7DQotICAgICAgICBpZiAoYlVuaXNvbikgew0KLSAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIGNzRVZhbHVlID0gcEN0cmwtPkdldEV4cG9ydFZhbHVlKCk7DQotICAgICAgICAgICAgaWYgKGNzRVZhbHVlID09IGNzV0V4cG9ydCkgew0KLSAgICAgICAgICAgICAgICBpZiAocEN0cmwtPkdldE9uU3RhdGVOYW1lKCkgPT0gcENvbnRyb2wtPkdldE9uU3RhdGVOYW1lKCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIHBDdHJsLT5DaGVja0NvbnRyb2woYkNoZWNrZWQpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJDaGVja2VkKSB7DQotICAgICAgICAgICAgICAgICAgICBwQ3RybC0+Q2hlY2tDb250cm9sKEZBTFNFKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYkNoZWNrZWQpIHsNCi0gICAgICAgICAgICAgICAgcEN0cmwtPkNoZWNrQ29udHJvbChGQUxTRSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAoaSA9PSBpQ29udHJvbEluZGV4KSB7DQotICAgICAgICAgICAgICAgIHBDdHJsLT5DaGVja0NvbnRyb2woYkNoZWNrZWQpOw0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYkNoZWNrZWQpIHsNCi0gICAgICAgICAgICAgICAgcEN0cmwtPkNoZWNrQ29udHJvbChGQUxTRSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIENQREZfT2JqZWN0KiBwT3B0ID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIk9wdCIpOw0KLSAgICBpZiAocE9wdCA9PSBOVUxMIHx8IHBPcHQtPkdldFR5cGUoKSAhPSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgIGlmIChiQ2hlY2tlZCkgew0KLSAgICAgICAgICAgIG1fcERpY3QtPlNldEF0TmFtZSgiViIsIGNzQkV4cG9ydCk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGNzVjsNCi0gICAgICAgICAgICBDUERGX09iamVjdCogcFYgPSBGUERGX0dldEZpZWxkQXR0cihtX3BEaWN0LCAiViIpOw0KLSAgICAgICAgICAgIGlmIChwViAhPSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIGNzViA9IHBWLT5HZXRTdHJpbmcoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGNzViA9PSBjc0JFeHBvcnQpIHsNCi0gICAgICAgICAgICAgICAgbV9wRGljdC0+U2V0QXROYW1lKCJWIiwgIk9mZiIpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIGlmIChiQ2hlY2tlZCkgew0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3NJbmRleDsNCi0gICAgICAgIGNzSW5kZXguRm9ybWF0KCIlZCIsIGlDb250cm9sSW5kZXgpOw0KLSAgICAgICAgbV9wRGljdC0+U2V0QXROYW1lKCJWIiwgY3NJbmRleCk7DQotICAgIH0NCi0gICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7DQotICAgICAgICBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5BZnRlckNoZWNrZWRTdGF0dXNDaGFuZ2UodGhpcywgc3RhdHVzQXJyYXkpOw0KLSAgICB9DQotICAgIG1fcEZvcm0tPm1fYlVwZGF0ZWQgPSBUUlVFOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotQ0ZYX1dpZGVTdHJpbmcgQ1BERl9Gb3JtRmllbGQ6OkdldENoZWNrVmFsdWUoRlhfQk9PTCBiRGVmYXVsdCkNCi17DQotICAgIEFTU0VSVChHZXRUeXBlKCkgPT0gQ2hlY2tCb3ggfHwgR2V0VHlwZSgpID09IFJhZGlvQnV0dG9uKTsNCi0gICAgQ0ZYX1dpZGVTdHJpbmcgY3NFeHBvcnQgPSBMIk9mZiI7DQotICAgIEZYX0JPT0wgYkNoZWNrZWQ7DQotICAgIGludCBpQ291bnQgPSBDb3VudENvbnRyb2xzKCk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaUNvdW50OyBpICsrKSB7DQotICAgICAgICBDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCA9IEdldENvbnRyb2woaSk7DQotICAgICAgICBpZiAoYkRlZmF1bHQpIHsNCi0gICAgICAgICAgICBiQ2hlY2tlZCA9IHBDb250cm9sLT5Jc0RlZmF1bHRDaGVja2VkKCk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGJDaGVja2VkID0gcENvbnRyb2wtPklzQ2hlY2tlZCgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGJDaGVja2VkKSB7DQotICAgICAgICAgICAgY3NFeHBvcnQgPSBwQ29udHJvbC0+R2V0RXhwb3J0VmFsdWUoKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gY3NFeHBvcnQ7DQotfQ0KLUZYX0JPT0wgQ1BERl9Gb3JtRmllbGQ6OlNldENoZWNrVmFsdWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHZhbHVlLCBGWF9CT09MIGJEZWZhdWx0LCBGWF9CT09MIGJOb3RpZnkpDQotew0KLSAgICBBU1NFUlQoR2V0VHlwZSgpID09IENoZWNrQm94IHx8IEdldFR5cGUoKSA9PSBSYWRpb0J1dHRvbik7DQotICAgIENGWF9CeXRlQXJyYXkgc3RhdHVzQXJyYXk7DQotICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgew0KLSAgICAgICAgU2F2ZUNoZWNrZWRGaWVsZFN0YXR1cyh0aGlzLCBzdGF0dXNBcnJheSk7DQotICAgIH0NCi0gICAgaW50IGlDb3VudCA9IENvdW50Q29udHJvbHMoKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspIHsNCi0gICAgICAgIENQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sID0gR2V0Q29udHJvbChpKTsNCi0gICAgICAgIENGWF9XaWRlU3RyaW5nIGNzRXhwb3J0ID0gcENvbnRyb2wtPkdldEV4cG9ydFZhbHVlKCk7DQotICAgICAgICBpZiAoY3NFeHBvcnQgPT0gdmFsdWUpIHsNCi0gICAgICAgICAgICBpZiAoYkRlZmF1bHQpIHsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBDaGVja0NvbnRyb2woR2V0Q29udHJvbEluZGV4KHBDb250cm9sKSwgVFJVRSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAoYkRlZmF1bHQpIHsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBDaGVja0NvbnRyb2woR2V0Q29udHJvbEluZGV4KHBDb250cm9sKSwgRkFMU0UpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoYk5vdGlmeSAmJiBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5ICE9IE5VTEwpIHsNCi0gICAgICAgIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnktPkFmdGVyQ2hlY2tlZFN0YXR1c0NoYW5nZSh0aGlzLCBzdGF0dXNBcnJheSk7DQotICAgIH0NCi0gICAgbV9wRm9ybS0+bV9iVXBkYXRlZCA9IFRSVUU7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1pbnQgQ1BERl9Gb3JtRmllbGQ6OkdldFRvcFZpc2libGVJbmRleCgpDQotew0KLSAgICBDUERGX09iamVjdCogcE9iaiA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJUSSIpOw0KLSAgICBpZiAocE9iaiA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICByZXR1cm4gcE9iai0+R2V0SW50ZWdlcigpOw0KLX0NCi1pbnQgQ1BERl9Gb3JtRmllbGQ6OkNvdW50U2VsZWN0ZWRPcHRpb25zKCkNCi17DQotICAgIENQREZfT2JqZWN0KiBwT2JqID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIkkiKTsNCi0gICAgaWYgKHBPYmogPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgQ1BERl9BcnJheSogcEFycmF5ID0gcE9iai0+R2V0QXJyYXkoKTsNCi0gICAgaWYgKHBBcnJheSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICByZXR1cm4gKGludClwQXJyYXktPkdldENvdW50KCk7DQotfQ0KLWludCBDUERGX0Zvcm1GaWVsZDo6R2V0U2VsZWN0ZWRPcHRpb25JbmRleChpbnQgaW5kZXgpDQotew0KLSAgICBDUERGX09iamVjdCogcE9iaiA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJJIik7DQotICAgIGlmIChwT2JqID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBwT2JqLT5HZXRBcnJheSgpOw0KLSAgICBpZiAocEFycmF5ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBpbnQgaUNvdW50ID0gKGludClwQXJyYXktPkdldENvdW50KCk7DQotICAgIGlmIChpQ291bnQgPiAwICYmIGluZGV4IDwgaUNvdW50KSB7DQotICAgICAgICByZXR1cm4gcEFycmF5LT5HZXRJbnRlZ2VyKGluZGV4KTsNCi0gICAgfQ0KLSAgICByZXR1cm4gLTE7DQotfQ0KLUZYX0JPT0wgQ1BERl9Gb3JtRmllbGQ6OklzT3B0aW9uU2VsZWN0ZWQoaW50IGlPcHRJbmRleCkNCi17DQotICAgIENQREZfT2JqZWN0KiBwT2JqID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIkkiKTsNCi0gICAgaWYgKHBPYmogPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIENQREZfQXJyYXkqIHBBcnJheSA9IHBPYmotPkdldEFycmF5KCk7DQotICAgIGlmIChwQXJyYXkgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGludCBpQ291bnQgPSAoaW50KXBBcnJheS0+R2V0Q291bnQoKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspIHsNCi0gICAgICAgIGlmIChwQXJyYXktPkdldEludGVnZXIoaSkgPT0gaU9wdEluZGV4KSB7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1GWF9CT09MIENQREZfRm9ybUZpZWxkOjpTZWxlY3RPcHRpb24oaW50IGlPcHRJbmRleCwgRlhfQk9PTCBiU2VsZWN0ZWQsIEZYX0JPT0wgYk5vdGlmeSkNCi17DQotICAgIENQREZfQXJyYXkqIHBBcnJheSA9IG1fcERpY3QtPkdldEFycmF5KCJJIik7DQotICAgIGlmIChwQXJyYXkgPT0gTlVMTCkgew0KLSAgICAgICAgaWYgKCFiU2VsZWN0ZWQpIHsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgICAgIHBBcnJheSA9IENQREZfQXJyYXk6OkNyZWF0ZSgpOw0KLSAgICAgICAgaWYgKHBBcnJheSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wRGljdC0+U2V0QXQoIkkiLCBwQXJyYXkpOw0KLSAgICB9DQotICAgIEZYX0JPT0wgYlJldHVybiA9IEZBTFNFOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IChpbnQpcEFycmF5LT5HZXRDb3VudCgpOyBpICsrKSB7DQotICAgICAgICBpbnQgaUZpbmQgPSBwQXJyYXktPkdldEludGVnZXIoaSk7DQotICAgICAgICBpZiAoaUZpbmQgPT0gaU9wdEluZGV4KSB7DQotICAgICAgICAgICAgaWYgKGJTZWxlY3RlZCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIGludCBpUmV0ID0gMDsNCi0gICAgICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgY3NWYWx1ZSA9IEdldE9wdGlvbkxhYmVsKGlPcHRJbmRleCk7DQotICAgICAgICAgICAgICAgIGlmIChHZXRUeXBlKCkgPT0gTGlzdEJveCkgew0KLSAgICAgICAgICAgICAgICAgICAgaVJldCA9IG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnktPkJlZm9yZVNlbGVjdGlvbkNoYW5nZSh0aGlzLCBjc1ZhbHVlKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoR2V0VHlwZSgpID09IENvbWJvQm94KSB7DQotICAgICAgICAgICAgICAgICAgICBpUmV0ID0gbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QmVmb3JlVmFsdWVDaGFuZ2UodGhpcywgY3NWYWx1ZSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKGlSZXQgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcEFycmF5LT5SZW1vdmVBdChpKTsNCi0gICAgICAgICAgICBiUmV0dXJuID0gVFJVRTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0gZWxzZSBpZiAoaUZpbmQgPiBpT3B0SW5kZXgpIHsNCi0gICAgICAgICAgICBpZiAoIWJTZWxlY3RlZCkgew0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIGludCBpUmV0ID0gMDsNCi0gICAgICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgY3NWYWx1ZSA9IEdldE9wdGlvbkxhYmVsKGlPcHRJbmRleCk7DQotICAgICAgICAgICAgICAgIGlmIChHZXRUeXBlKCkgPT0gTGlzdEJveCkgew0KLSAgICAgICAgICAgICAgICAgICAgaVJldCA9IG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnktPkJlZm9yZVNlbGVjdGlvbkNoYW5nZSh0aGlzLCBjc1ZhbHVlKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoR2V0VHlwZSgpID09IENvbWJvQm94KSB7DQotICAgICAgICAgICAgICAgICAgICBpUmV0ID0gbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QmVmb3JlVmFsdWVDaGFuZ2UodGhpcywgY3NWYWx1ZSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKGlSZXQgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgQ1BERl9OdW1iZXIqIHBOdW0gPSBDUERGX051bWJlcjo6Q3JlYXRlKGlPcHRJbmRleCk7DQotICAgICAgICAgICAgaWYgKHBOdW0gPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHBBcnJheS0+SW5zZXJ0QXQoaSwgcE51bSk7DQotICAgICAgICAgICAgYlJldHVybiA9IFRSVUU7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKCFiUmV0dXJuKSB7DQotICAgICAgICBpZiAoYlNlbGVjdGVkKSB7DQotICAgICAgICAgICAgcEFycmF5LT5BZGRJbnRlZ2VyKGlPcHRJbmRleCk7DQotICAgICAgICB9DQotICAgICAgICBpZiAocEFycmF5LT5HZXRDb3VudCgpID09IDApIHsNCi0gICAgICAgICAgICBtX3BEaWN0LT5SZW1vdmVBdCgiSSIpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgew0KLSAgICAgICAgaWYgKEdldFR5cGUoKSA9PSBMaXN0Qm94KSB7DQotICAgICAgICAgICAgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QWZ0ZXJTZWxlY3Rpb25DaGFuZ2UodGhpcyk7DQotICAgICAgICB9DQotICAgICAgICBpZiAoR2V0VHlwZSgpID09IENvbWJvQm94KSB7DQotICAgICAgICAgICAgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QWZ0ZXJWYWx1ZUNoYW5nZSh0aGlzKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX3BGb3JtLT5tX2JVcGRhdGVkID0gVFJVRTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ1BERl9Gb3JtRmllbGQ6OkNsZWFyU2VsZWN0ZWRPcHRpb25zKEZYX0JPT0wgYk5vdGlmeSkNCi17DQotICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgew0KLSAgICAgICAgaW50IGlSZXQgPSAwOw0KLSAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgY3NWYWx1ZTsNCi0gICAgICAgIGludCBpSW5kZXggPSBHZXRTZWxlY3RlZEluZGV4KDApOw0KLSAgICAgICAgaWYgKGlJbmRleCA+PSAwKSB7DQotICAgICAgICAgICAgY3NWYWx1ZSA9IEdldE9wdGlvbkxhYmVsKGlJbmRleCk7DQotICAgICAgICB9DQotICAgICAgICBpZiAoR2V0VHlwZSgpID09IExpc3RCb3gpIHsNCi0gICAgICAgICAgICBpUmV0ID0gbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QmVmb3JlU2VsZWN0aW9uQ2hhbmdlKHRoaXMsIGNzVmFsdWUpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKEdldFR5cGUoKSA9PSBDb21ib0JveCkgew0KLSAgICAgICAgICAgIGlSZXQgPSBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5CZWZvcmVWYWx1ZUNoYW5nZSh0aGlzLCBjc1ZhbHVlKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChpUmV0IDwgMCkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX3BEaWN0LT5SZW1vdmVBdCgiSSIpOw0KLSAgICBpZiAoYk5vdGlmeSAmJiBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5ICE9IE5VTEwpIHsNCi0gICAgICAgIGlmIChHZXRUeXBlKCkgPT0gTGlzdEJveCkgew0KLSAgICAgICAgICAgIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnktPkFmdGVyU2VsZWN0aW9uQ2hhbmdlKHRoaXMpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKEdldFR5cGUoKSA9PSBDb21ib0JveCkgew0KLSAgICAgICAgICAgIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnktPkFmdGVyVmFsdWVDaGFuZ2UodGhpcyk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9wRm9ybS0+bV9iVXBkYXRlZCA9IFRSVUU7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi12b2lkIENQREZfRm9ybUZpZWxkOjpMb2FkREEoKQ0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgREEgPSBGUERGX0dldEZpZWxkQXR0cihtX3BEaWN0LCAiREEiKS0+R2V0U3RyaW5nKCk7DQotICAgIGlmIChEQS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIERBID0gbV9wRm9ybS0+bV9wRm9ybURpY3QtPkdldFN0cmluZygiREEiKTsNCi0gICAgfQ0KLSAgICBpZiAoREEuSXNFbXB0eSgpKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9TaW1wbGVQYXJzZXIgc3ludGF4KERBKTsNCi0gICAgc3ludGF4LkZpbmRUYWdQYXJhbSgiVGYiLCAyKTsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgZm9udF9uYW1lID0gc3ludGF4LkdldFdvcmQoKTsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9udERpY3QgPSBtX3BGb3JtLT5tX3BGb3JtRGljdC0+R2V0RGljdCgiRFIiKS0+R2V0RGljdCgiRm9udCIpLT5HZXREaWN0KGZvbnRfbmFtZSk7DQotICAgIGlmIChwRm9udERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fcEZvbnQgPSBtX3BGb3JtLT5tX3BEb2N1bWVudC0+TG9hZEZvbnQocEZvbnREaWN0KTsNCi0gICAgbV9Gb250U2l6ZSA9IEZYX2F0b2Yoc3ludGF4LkdldFdvcmQoKSk7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZkb2MvZnBkZl9kb2MuaCIKK0NGWF9XaWRlU3RyaW5nCQlHZXRGdWxsTmFtZShDUERGX0RpY3Rpb25hcnkqIHBGaWVsZERpY3QpOwordm9pZAkJCQlTYXZlQ2hlY2tlZEZpZWxkU3RhdHVzKENQREZfRm9ybUZpZWxkKiBwRmllbGQsIENGWF9CeXRlQXJyYXkmIHN0YXR1c0FycmF5KTsKK0ZYX0JPT0wgUERGX0Zvcm1GaWVsZF9Jc1VuaXNvbihDUERGX0Zvcm1GaWVsZCAqcEZpZWxkKQoreworICAgIEZYX0JPT0wgYlVuaXNvbiA9IEZBTFNFOworICAgIGlmIChwRmllbGQtPkdldFR5cGUoKSA9PSBDUERGX0Zvcm1GaWVsZDo6Q2hlY2tCb3gpIHsKKyAgICAgICAgYlVuaXNvbiA9IFRSVUU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgRlhfRFdPUkQgZHdGbGFncyA9IHBGaWVsZC0+R2V0RmllbGRGbGFncygpOworICAgICAgICBiVW5pc29uID0gKChkd0ZsYWdzICYgMHgyMDAwMDAwKSAhPSAwKTsKKyAgICB9CisgICAgcmV0dXJuIGJVbmlzb247Cit9CitDUERGX0Zvcm1GaWVsZDo6Q1BERl9Gb3JtRmllbGQoQ1BERl9JbnRlckZvcm0qIHBGb3JtLCBDUERGX0RpY3Rpb25hcnkqIHBEaWN0KQoreworICAgIG1fcERpY3QgPSBwRGljdDsKKyAgICBtX1R5cGUgPSBVbmtub3duOworICAgIG1fcEZvcm0gPSBwRm9ybTsKKyAgICBtX3BGb250ID0gTlVMTDsKKyAgICBtX0ZvbnRTaXplID0gMDsKKyAgICBTeW5jRmllbGRGbGFncygpOworfQorQ1BERl9Gb3JtRmllbGQ6On5DUERGX0Zvcm1GaWVsZCgpCit7Cit9Cit2b2lkIENQREZfRm9ybUZpZWxkOjpTeW5jRmllbGRGbGFncygpCit7CisgICAgQ0ZYX0J5dGVTdHJpbmcgdHlwZV9uYW1lID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIkZUIiktPkdldFN0cmluZygpOworICAgIEZYX0RXT1JEIGZsYWdzID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIkZmIiktPkdldEludGVnZXIoKTsKKyAgICBtX0ZsYWdzID0gMDsKKyAgICBpZiAoZmxhZ3MgJiAxKSB7CisgICAgICAgIG1fRmxhZ3MgfD0gRk9STUZJRUxEX1JFQURPTkxZOworICAgIH0KKyAgICBpZiAoZmxhZ3MgJiAyKSB7CisgICAgICAgIG1fRmxhZ3MgfD0gRk9STUZJRUxEX1JFUVVJUkVEOworICAgIH0KKyAgICBpZiAoZmxhZ3MgJiA0KSB7CisgICAgICAgIG1fRmxhZ3MgfD0gRk9STUZJRUxEX05PRVhQT1JUOworICAgIH0KKyAgICBpZiAodHlwZV9uYW1lID09ICJCdG4iKSB7CisgICAgICAgIGlmIChmbGFncyAmIDB4ODAwMCkgeworICAgICAgICAgICAgbV9UeXBlID0gUmFkaW9CdXR0b247CisgICAgICAgICAgICBpZiAoZmxhZ3MgJiAweDQwMDApIHsKKyAgICAgICAgICAgICAgICBtX0ZsYWdzIHw9IEZPUk1SQURJT19OT1RPR0dMRU9GRjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmbGFncyAmIDB4MjAwMDAwMCkgeworICAgICAgICAgICAgICAgIG1fRmxhZ3MgfD0gRk9STVJBRElPX1VOSVNPTjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChmbGFncyAmIDB4MTAwMDApIHsKKyAgICAgICAgICAgIG1fVHlwZSA9IFB1c2hCdXR0b247CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX1R5cGUgPSBDaGVja0JveDsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAodHlwZV9uYW1lID09ICJUeCIpIHsKKyAgICAgICAgaWYgKGZsYWdzICYgMHgxMDAwMDApIHsKKyAgICAgICAgICAgIG1fVHlwZSA9IEZpbGU7CisgICAgICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiAweDIwMDAwMDApIHsKKyAgICAgICAgICAgIG1fVHlwZSA9IFJpY2hUZXh0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9UeXBlID0gVGV4dDsKKyAgICAgICAgICAgIGlmIChmbGFncyAmIDB4MTAwMCkgeworICAgICAgICAgICAgICAgIG1fRmxhZ3MgfD0gRk9STVRFWFRfTVVMVElMSU5FOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZsYWdzICYgMHgyMDAwKSB7CisgICAgICAgICAgICAgICAgbV9GbGFncyB8PSBGT1JNVEVYVF9QQVNTV09SRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmbGFncyAmIDB4ODAwMDAwKSB7CisgICAgICAgICAgICAgICAgbV9GbGFncyB8PSBGT1JNVEVYVF9OT1NDUk9MTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmbGFncyAmIDB4MTAwMDAwKSB7CisgICAgICAgICAgICAgICAgbV9GbGFncyB8PSBGT1JNVEVYVF9DT01COworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIExvYWREQSgpOworICAgIH0gZWxzZSBpZiAodHlwZV9uYW1lID09ICJDaCIpIHsKKyAgICAgICAgaWYgKGZsYWdzICYgMHgyMDAwMCkgeworICAgICAgICAgICAgbV9UeXBlID0gQ29tYm9Cb3g7CisgICAgICAgICAgICBpZiAoZmxhZ3MgJiAweDQwMDAwKSB7CisgICAgICAgICAgICAgICAgbV9GbGFncyB8PSBGT1JNQ09NQk9fRURJVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fVHlwZSA9IExpc3RCb3g7CisgICAgICAgICAgICBpZiAoZmxhZ3MgJiAweDIwMDAwMCkgeworICAgICAgICAgICAgICAgIG1fRmxhZ3MgfD0gRk9STUxJU1RfTVVMVElTRUxFQ1Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgTG9hZERBKCk7CisgICAgfSBlbHNlIGlmICh0eXBlX25hbWUgPT0gIlNpZyIpIHsKKyAgICAgICAgbV9UeXBlID0gU2lnbjsKKyAgICB9Cit9CitDRlhfV2lkZVN0cmluZyBDUERGX0Zvcm1GaWVsZDo6R2V0RnVsbE5hbWUoKQoreworICAgIHJldHVybiA6OkdldEZ1bGxOYW1lKG1fcERpY3QpOworfQorRlhfQk9PTCBDUERGX0Zvcm1GaWVsZDo6UmVzZXRGaWVsZChGWF9CT09MIGJOb3RpZnkpCit7CisgICAgc3dpdGNoIChtX1R5cGUpIHsKKyAgICAgICAgY2FzZSBDUERGX0Zvcm1GaWVsZDo6Q2hlY2tCb3g6CisgICAgICAgIGNhc2UgQ1BERl9Gb3JtRmllbGQ6OlJhZGlvQnV0dG9uOiB7CisgICAgICAgICAgICAgICAgQ0ZYX0J5dGVBcnJheSBzdGF0dXNBcnJheTsKKyAgICAgICAgICAgICAgICBpZiAoYk5vdGlmeSAmJiBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgU2F2ZUNoZWNrZWRGaWVsZFN0YXR1cyh0aGlzLCBzdGF0dXNBcnJheSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGludCBpQ291bnQgPSBDb3VudENvbnRyb2xzKCk7CisgICAgICAgICAgICAgICAgaWYgKGlDb3VudCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoUERGX0Zvcm1GaWVsZF9Jc1VuaXNvbih0aGlzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGlDb3VudDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tDb250cm9sKGksIEdldENvbnRyb2woaSktPklzRGVmYXVsdENoZWNrZWQoKSwgRkFMU0UpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCA9IEdldENvbnRyb2woaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiQ2hlY2tlZCA9IHBDb250cm9sLT5Jc0RlZmF1bHRDaGVja2VkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tDb250cm9sKGksIGJDaGVja2VkLCBGQUxTRSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnktPkFmdGVyQ2hlY2tlZFN0YXR1c0NoYW5nZSh0aGlzLCBzdGF0dXNBcnJheSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1BERl9Gb3JtRmllbGQ6OkNvbWJvQm94OiB7CisgICAgICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgY3NWYWx1ZTsKKyAgICAgICAgICAgICAgICBDbGVhclNlbGVjdGlvbigpOworICAgICAgICAgICAgICAgIGludCBpSW5kZXggPSBHZXREZWZhdWx0U2VsZWN0ZWRJdGVtKCk7CisgICAgICAgICAgICAgICAgaWYgKGlJbmRleCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNzVmFsdWUgPSBHZXRPcHRpb25MYWJlbChpSW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYk5vdGlmeSAmJiBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGlSZXQgPSBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5CZWZvcmVWYWx1ZUNoYW5nZSh0aGlzLCBjc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlSZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgU2V0SXRlbVNlbGVjdGlvbihpSW5kZXgsIFRSVUUpOworICAgICAgICAgICAgICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5BZnRlclZhbHVlQ2hhbmdlKHRoaXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENQREZfRm9ybUZpZWxkOjpMaXN0Qm94OiB7CisgICAgICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgY3NWYWx1ZTsKKyAgICAgICAgICAgICAgICBDbGVhclNlbGVjdGlvbigpOworICAgICAgICAgICAgICAgIGludCBpSW5kZXggPSBHZXREZWZhdWx0U2VsZWN0ZWRJdGVtKCk7CisgICAgICAgICAgICAgICAgaWYgKGlJbmRleCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNzVmFsdWUgPSBHZXRPcHRpb25MYWJlbChpSW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYk5vdGlmeSAmJiBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGlSZXQgPSBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5CZWZvcmVTZWxlY3Rpb25DaGFuZ2UodGhpcywgY3NWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpUmV0IDwgMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFNldEl0ZW1TZWxlY3Rpb24oaUluZGV4LCBUUlVFKTsKKyAgICAgICAgICAgICAgICBpZiAoYk5vdGlmeSAmJiBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QWZ0ZXJTZWxlY3Rpb25DaGFuZ2UodGhpcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1BERl9Gb3JtRmllbGQ6OlRleHQ6CisgICAgICAgIGNhc2UgQ1BERl9Gb3JtRmllbGQ6OlJpY2hUZXh0OgorICAgICAgICBjYXNlIENQREZfRm9ybUZpZWxkOjpGaWxlOgorICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBEViA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJEViIpOworICAgICAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIGNzRFZhbHVlOworICAgICAgICAgICAgICAgIGlmIChwRFYgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBjc0RWYWx1ZSA9IHBEVi0+R2V0VW5pY29kZVRleHQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBWID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIlYiKTsKKyAgICAgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyBjc1ZhbHVlOworICAgICAgICAgICAgICAgIGlmIChwViAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGNzVmFsdWUgPSBwVi0+R2V0VW5pY29kZVRleHQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBSViA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJSViIpOworICAgICAgICAgICAgICAgIGlmICghcFJWICYmIChjc0RWYWx1ZSA9PSBjc1ZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBpbnQgaVJldCA9IG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnktPkJlZm9yZVZhbHVlQ2hhbmdlKHRoaXMsIGNzRFZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlSZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBEViA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcERpY3QtPlJlbW92ZUF0KCJWIik7CisgICAgICAgICAgICAgICAgICAgIG1fcERpY3QtPlJlbW92ZUF0KCJSViIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIENQREZfT2JqZWN0KiBwQ2xvbmUgPSBwRFYtPkNsb25lKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwQ2xvbmUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1fcERpY3QtPlNldEF0KCJWIiwgcENsb25lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYocFJWKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDUERGX09iamVjdCogcENsb25lUiA9IHBEVi0+Q2xvbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcERpY3QtPlNldEF0KCJSViIsIHBDbG9uZVIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5BZnRlclZhbHVlQ2hhbmdlKHRoaXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX3BGb3JtLT5tX2JVcGRhdGVkID0gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK2ludCBDUERGX0Zvcm1GaWVsZDo6R2V0Q29udHJvbEluZGV4KGNvbnN0IENQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sKQoreworICAgIGlmIChwQ29udHJvbCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaW50IGlDb3VudCA9IG1fQ29udHJvbExpc3QuR2V0U2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaUNvdW50OyBpICsrKSB7CisgICAgICAgIENQREZfRm9ybUNvbnRyb2wqIHBGaW5kID0gKENQREZfRm9ybUNvbnRyb2wqKW1fQ29udHJvbExpc3QuR2V0QXQoaSk7CisgICAgICAgIGlmIChwRmluZCA9PSBwQ29udHJvbCkgeworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIC0xOworfQoraW50IENQREZfRm9ybUZpZWxkOjpHZXRGaWVsZFR5cGUoKQoreworICAgIHN3aXRjaCAobV9UeXBlKSB7CisgICAgICAgIGNhc2UgUHVzaEJ1dHRvbjoKKyAgICAgICAgICAgIHJldHVybiBGSUVMRFRZUEVfUFVTSEJVVFRPTjsKKyAgICAgICAgY2FzZSBDaGVja0JveDoKKyAgICAgICAgICAgIHJldHVybiBGSUVMRFRZUEVfQ0hFQ0tCT1g7CisgICAgICAgIGNhc2UgUmFkaW9CdXR0b246CisgICAgICAgICAgICByZXR1cm4gRklFTERUWVBFX1JBRElPQlVUVE9OOworICAgICAgICBjYXNlIENvbWJvQm94OgorICAgICAgICAgICAgcmV0dXJuIEZJRUxEVFlQRV9DT01CT0JPWDsKKyAgICAgICAgY2FzZSBMaXN0Qm94OgorICAgICAgICAgICAgcmV0dXJuIEZJRUxEVFlQRV9MSVNUQk9YOworICAgICAgICBjYXNlIFRleHQ6CisgICAgICAgIGNhc2UgUmljaFRleHQ6CisgICAgICAgIGNhc2UgRmlsZToKKyAgICAgICAgICAgIHJldHVybiBGSUVMRFRZUEVfVEVYVEZJRUxEOworICAgICAgICBjYXNlIFNpZ246CisgICAgICAgICAgICByZXR1cm4gRklFTERUWVBFX1NJR05BVFVSRTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gRklFTERUWVBFX1VOS05PV047Cit9CitDUERGX0FBY3Rpb24gQ1BERl9Gb3JtRmllbGQ6OkdldEFkZGl0aW9uYWxBY3Rpb24oKQoreworICAgIENQREZfT2JqZWN0KiBwT2JqID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIkFBIik7CisgICAgaWYgKHBPYmogPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHBPYmotPkdldERpY3QoKTsKK30KK0NGWF9XaWRlU3RyaW5nIENQREZfRm9ybUZpZWxkOjpHZXRBbHRlcm5hdGVOYW1lKCkKK3sKKyAgICBDUERGX09iamVjdCogcE9iaiA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJUVSIpOworICAgIGlmIChwT2JqID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEwiIjsKKyAgICB9CisgICAgcmV0dXJuIHBPYmotPkdldFVuaWNvZGVUZXh0KCk7Cit9CitDRlhfV2lkZVN0cmluZyBDUERGX0Zvcm1GaWVsZDo6R2V0TWFwcGluZ05hbWUoKQoreworICAgIENQREZfT2JqZWN0KiBwT2JqID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIlRNIik7CisgICAgaWYgKHBPYmogPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTCIiOworICAgIH0KKyAgICByZXR1cm4gcE9iai0+R2V0VW5pY29kZVRleHQoKTsKK30KK0ZYX0RXT1JEIENQREZfRm9ybUZpZWxkOjpHZXRGaWVsZEZsYWdzKCkKK3sKKyAgICBDUERGX09iamVjdCogcE9iaiA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJGZiIpOworICAgIGlmIChwT2JqID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBwT2JqLT5HZXRJbnRlZ2VyKCk7Cit9CitDRlhfQnl0ZVN0cmluZyBDUERGX0Zvcm1GaWVsZDo6R2V0RGVmYXVsdFN0eWxlKCkKK3sKKyAgICBDUERGX09iamVjdCogcE9iaiA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJEUyIpOworICAgIGlmIChwT2JqID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKyAgICByZXR1cm4gcE9iai0+R2V0U3RyaW5nKCk7Cit9CitDRlhfV2lkZVN0cmluZyBDUERGX0Zvcm1GaWVsZDo6R2V0UmljaFRleHRTdHJpbmcoKQoreworICAgIENQREZfT2JqZWN0KiBwT2JqID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIlJWIik7CisgICAgaWYgKHBPYmogPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTCIiOworICAgIH0KKyAgICByZXR1cm4gcE9iai0+R2V0VW5pY29kZVRleHQoKTsKK30KK0NGWF9XaWRlU3RyaW5nIENQREZfRm9ybUZpZWxkOjpHZXRWYWx1ZShGWF9CT09MIGJEZWZhdWx0KQoreworICAgIGlmIChHZXRUeXBlKCkgPT0gQ2hlY2tCb3ggfHwgR2V0VHlwZSgpID09IFJhZGlvQnV0dG9uKSB7CisgICAgICAgIHJldHVybiBHZXRDaGVja1ZhbHVlKGJEZWZhdWx0KTsKKyAgICB9CisgICAgQ1BERl9PYmplY3QqIHBWYWx1ZSA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsIGJEZWZhdWx0ID8gIkRWIiA6ICJWIik7CisgICAgaWYgKHBWYWx1ZSA9PSBOVUxMKSB7CisgICAgICAgIGlmICghYkRlZmF1bHQpIHsKKyAgICAgICAgICAgIGlmIChtX1R5cGUgPT0gUmljaFRleHQpIHsKKyAgICAgICAgICAgICAgICBwVmFsdWUgPSBGUERGX0dldEZpZWxkQXR0cihtX3BEaWN0LCAiViIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBWYWx1ZSA9PSBOVUxMICYmIG1fVHlwZSAhPSBUZXh0KSB7CisgICAgICAgICAgICAgICAgcFZhbHVlID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIkRWIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBWYWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBzd2l0Y2ggKHBWYWx1ZS0+R2V0VHlwZSgpKSB7CisgICAgICAgIGNhc2UgUERGT0JKX1NUUklORzoKKyAgICAgICAgY2FzZSBQREZPQkpfU1RSRUFNOgorICAgICAgICAgICAgcmV0dXJuIHBWYWx1ZS0+R2V0VW5pY29kZVRleHQoKTsKKyAgICAgICAgY2FzZSBQREZPQkpfQVJSQVk6CisgICAgICAgICAgICBwVmFsdWUgPSAoKENQREZfQXJyYXkqKXBWYWx1ZSktPkdldEVsZW1lbnRWYWx1ZSgwKTsKKyAgICAgICAgICAgIHJldHVybiBwVmFsdWUtPkdldFVuaWNvZGVUZXh0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7Cit9CitDRlhfV2lkZVN0cmluZyBDUERGX0Zvcm1GaWVsZDo6R2V0VmFsdWUoKQoreworICAgIHJldHVybiBHZXRWYWx1ZShGQUxTRSk7Cit9CitDRlhfV2lkZVN0cmluZyBDUERGX0Zvcm1GaWVsZDo6R2V0RGVmYXVsdFZhbHVlKCkKK3sKKyAgICByZXR1cm4gR2V0VmFsdWUoVFJVRSk7Cit9CitGWF9CT09MIENQREZfRm9ybUZpZWxkOjpTZXRWYWx1ZShjb25zdCBDRlhfV2lkZVN0cmluZyYgdmFsdWUsIEZYX0JPT0wgYkRlZmF1bHQsIEZYX0JPT0wgYk5vdGlmeSkKK3sKKyAgICBzd2l0Y2ggKG1fVHlwZSkgeworICAgICAgICBjYXNlIENoZWNrQm94OgorICAgICAgICBjYXNlIFJhZGlvQnV0dG9uOiB7CisgICAgICAgICAgICAgICAgU2V0Q2hlY2tWYWx1ZSh2YWx1ZSwgYkRlZmF1bHQsIGJOb3RpZnkpOworICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIEZpbGU6CisgICAgICAgIGNhc2UgUmljaFRleHQ6CisgICAgICAgIGNhc2UgVGV4dDoKKyAgICAgICAgY2FzZSBDb21ib0JveDogeworICAgICAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIGNzVmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoYk5vdGlmeSAmJiBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGlSZXQgPSBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5CZWZvcmVWYWx1ZUNoYW5nZSh0aGlzLCBjc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlSZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW50IGlJbmRleCA9IEZpbmRPcHRpb25WYWx1ZShjc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoaUluZGV4IDwgMCkgeworICAgICAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBic0VuY29kZVRleHQgPSBQREZfRW5jb2RlVGV4dChjc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9wRGljdC0+U2V0QXRTdHJpbmcoYkRlZmF1bHQgPyAiRFYiIDogIlYiLCBic0VuY29kZVRleHQpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9UeXBlID09IFJpY2hUZXh0ICYmICFiRGVmYXVsdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9wRGljdC0+U2V0QXRTdHJpbmcoIlJWIiwgYnNFbmNvZGVUZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtX3BEaWN0LT5SZW1vdmVBdCgiSSIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1fcERpY3QtPlNldEF0U3RyaW5nKGJEZWZhdWx0ID8gIkRWIiA6ICJWIiwgUERGX0VuY29kZVRleHQoY3NWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoYkRlZmF1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENsZWFyU2VsZWN0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTZXRJdGVtU2VsZWN0aW9uKGlJbmRleCwgVFJVRSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnktPkFmdGVyVmFsdWVDaGFuZ2UodGhpcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fcEZvcm0tPm1fYlVwZGF0ZWQgPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTGlzdEJveDogeworICAgICAgICAgICAgICAgIGludCBpSW5kZXggPSBGaW5kT3B0aW9uVmFsdWUodmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChpSW5kZXggPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGJEZWZhdWx0ICYmIGlJbmRleCA9PSBHZXREZWZhdWx0U2VsZWN0ZWRJdGVtKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYk5vdGlmeSAmJiBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgY3NWYWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICBpbnQgaVJldCA9IG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnktPkJlZm9yZVNlbGVjdGlvbkNoYW5nZSh0aGlzLCBjc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlSZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGJEZWZhdWx0KSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQ2xlYXJTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgU2V0SXRlbVNlbGVjdGlvbihpSW5kZXgsIFRSVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYk5vdGlmeSAmJiBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QWZ0ZXJTZWxlY3Rpb25DaGFuZ2UodGhpcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fcEZvcm0tPm1fYlVwZGF0ZWQgPSBUUlVFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChDUERGX0ludGVyRm9ybTo6bV9iVXBkYXRlQVApIHsKKyAgICAgICAgVXBkYXRlQVAoTlVMTCk7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDUERGX0Zvcm1GaWVsZDo6U2V0VmFsdWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHZhbHVlLCBGWF9CT09MIGJOb3RpZnkpCit7CisgICAgcmV0dXJuIFNldFZhbHVlKHZhbHVlLCBGQUxTRSwgYk5vdGlmeSk7Cit9CitpbnQgQ1BERl9Gb3JtRmllbGQ6OkdldE1heExlbigpCit7CisgICAgQ1BERl9PYmplY3QqIHBPYmogPSBGUERGX0dldEZpZWxkQXR0cihtX3BEaWN0LCAiTWF4TGVuIik7CisgICAgaWYgKHBPYmogPT0gTlVMTCkgeworICAgICAgICBpbnQgaUNvdW50ID0gbV9Db250cm9sTGlzdC5HZXRTaXplKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaUNvdW50OyBpICsrKSB7CisgICAgICAgICAgICBDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCA9IChDUERGX0Zvcm1Db250cm9sKiltX0NvbnRyb2xMaXN0LkdldEF0KGkpOworICAgICAgICAgICAgaWYgKHBDb250cm9sID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcFdpZGdldERpY3QgPSBwQ29udHJvbC0+bV9wV2lkZ2V0RGljdDsKKyAgICAgICAgICAgIGlmIChwV2lkZ2V0RGljdC0+S2V5RXhpc3QoIk1heExlbiIpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBXaWRnZXREaWN0LT5HZXRJbnRlZ2VyKCJNYXhMZW4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHBPYmotPkdldEludGVnZXIoKTsKK30KK2ludCBDUERGX0Zvcm1GaWVsZDo6Q291bnRTZWxlY3RlZEl0ZW1zKCkKK3sKKyAgICBDUERGX09iamVjdCogcFZhbHVlID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIlYiKTsKKyAgICBpZiAocFZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgcFZhbHVlID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIkkiKTsKKyAgICAgICAgaWYgKHBWYWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocFZhbHVlLT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUklORykgeworICAgICAgICBpZiAocFZhbHVlLT5HZXRTdHJpbmcoKS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBpZiAocFZhbHVlLT5HZXRUeXBlKCkgPT0gUERGT0JKX05VTUJFUikgeworICAgICAgICBpZiAocFZhbHVlLT5HZXRTdHJpbmcoKS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBpZiAocFZhbHVlLT5HZXRUeXBlKCkgIT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gKChDUERGX0FycmF5KilwVmFsdWUpLT5HZXRDb3VudCgpOworfQoraW50IENQREZfRm9ybUZpZWxkOjpHZXRTZWxlY3RlZEluZGV4KGludCBpbmRleCkKK3sKKyAgICBDUERGX09iamVjdCogcFZhbHVlID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIlYiKTsKKyAgICBpZiAocFZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgcFZhbHVlID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIkkiKTsKKyAgICAgICAgaWYgKHBWYWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgQ0ZYX1dpZGVTdHJpbmcgc2VsX3ZhbHVlOworICAgIGlmIChwVmFsdWUtPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSSU5HKSB7CisgICAgICAgIGlmIChpbmRleCAhPSAwKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgc2VsX3ZhbHVlID0gcFZhbHVlLT5HZXRVbmljb2RlVGV4dCgpOworICAgIH0gZWxzZSBpZiAocFZhbHVlLT5HZXRUeXBlKCkgPT0gUERGT0JKX05VTUJFUikgeworICAgICAgICByZXR1cm4gcFZhbHVlLT5HZXRJbnRlZ2VyKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHBWYWx1ZS0+R2V0VHlwZSgpICE9IFBERk9CSl9BUlJBWSkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmIChpbmRleCA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBzZWxfdmFsdWUgPSAoKENQREZfQXJyYXkqKXBWYWx1ZSktPkdldEVsZW1lbnRWYWx1ZShpbmRleCktPkdldFVuaWNvZGVUZXh0KCk7CisgICAgfQorICAgIGlmIChpbmRleCA8IENvdW50U2VsZWN0ZWRPcHRpb25zKCkpIHsKKyAgICAgICAgaW50IGlPcHRJbmRleCA9IEdldFNlbGVjdGVkT3B0aW9uSW5kZXgoaW5kZXgpOworICAgICAgICBDRlhfV2lkZVN0cmluZyBjc09wdCA9IEdldE9wdGlvblZhbHVlKGlPcHRJbmRleCk7CisgICAgICAgIGlmIChjc09wdCA9PSBzZWxfdmFsdWUpIHsKKyAgICAgICAgICAgIHJldHVybiBpT3B0SW5kZXg7CisgICAgICAgIH0KKyAgICB9CisgICAgaW50IG5PcHRzID0gQ291bnRPcHRpb25zKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuT3B0czsgaSArKykgeworICAgICAgICBpZiAoc2VsX3ZhbHVlID09IEdldE9wdGlvblZhbHVlKGkpKSB7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CitGWF9CT09MIENQREZfRm9ybUZpZWxkOjpDbGVhclNlbGVjdGlvbihGWF9CT09MIGJOb3RpZnkpCit7CisgICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7CisgICAgICAgIGludCBpUmV0ID0gMDsKKyAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgY3NWYWx1ZTsKKyAgICAgICAgaW50IGlJbmRleCA9IEdldFNlbGVjdGVkSW5kZXgoMCk7CisgICAgICAgIGlmIChpSW5kZXggPj0gMCkgeworICAgICAgICAgICAgY3NWYWx1ZSA9IEdldE9wdGlvbkxhYmVsKGlJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKEdldFR5cGUoKSA9PSBMaXN0Qm94KSB7CisgICAgICAgICAgICBpUmV0ID0gbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QmVmb3JlU2VsZWN0aW9uQ2hhbmdlKHRoaXMsIGNzVmFsdWUpOworICAgICAgICB9CisgICAgICAgIGlmIChHZXRUeXBlKCkgPT0gQ29tYm9Cb3gpIHsKKyAgICAgICAgICAgIGlSZXQgPSBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5CZWZvcmVWYWx1ZUNoYW5nZSh0aGlzLCBjc1ZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaVJldCA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX3BEaWN0LT5SZW1vdmVBdCgiViIpOworICAgIG1fcERpY3QtPlJlbW92ZUF0KCJJIik7CisgICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7CisgICAgICAgIGlmIChHZXRUeXBlKCkgPT0gTGlzdEJveCkgeworICAgICAgICAgICAgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QWZ0ZXJTZWxlY3Rpb25DaGFuZ2UodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKEdldFR5cGUoKSA9PSBDb21ib0JveCkgeworICAgICAgICAgICAgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QWZ0ZXJWYWx1ZUNoYW5nZSh0aGlzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoQ1BERl9JbnRlckZvcm06Om1fYlVwZGF0ZUFQKSB7CisgICAgICAgIFVwZGF0ZUFQKE5VTEwpOworICAgIH0KKyAgICBtX3BGb3JtLT5tX2JVcGRhdGVkID0gVFJVRTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ1BERl9Gb3JtRmllbGQ6OklzSXRlbVNlbGVjdGVkKGludCBpbmRleCkKK3sKKyAgICBBU1NFUlQoR2V0VHlwZSgpID09IENvbWJvQm94IHx8IEdldFR5cGUoKSA9PSBMaXN0Qm94KTsKKyAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IENvdW50T3B0aW9ucygpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKElzT3B0aW9uU2VsZWN0ZWQoaW5kZXgpKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBDRlhfV2lkZVN0cmluZyBvcHRfdmFsdWUgPSBHZXRPcHRpb25WYWx1ZShpbmRleCk7CisgICAgQ1BERl9PYmplY3QqIHBWYWx1ZSA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJWIik7CisgICAgaWYgKHBWYWx1ZSA9PSBOVUxMKSB7CisgICAgICAgIHBWYWx1ZSA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJJIik7CisgICAgICAgIGlmIChwVmFsdWUgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgfQorICAgIGlmIChwVmFsdWUtPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSSU5HKSB7CisgICAgICAgIGlmIChwVmFsdWUtPkdldFVuaWNvZGVUZXh0KCkgPT0gb3B0X3ZhbHVlKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChwVmFsdWUtPkdldFR5cGUoKSA9PSBQREZPQkpfTlVNQkVSKSB7CisgICAgICAgIGlmIChwVmFsdWUtPkdldFN0cmluZygpLklzRW1wdHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmIChwVmFsdWUtPkdldEludGVnZXIoKSA9PSBpbmRleCkgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAocFZhbHVlLT5HZXRUeXBlKCkgIT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcEFycmF5ID0gKENQREZfQXJyYXkqKXBWYWx1ZTsKKyAgICBpbnQgaVBvcyA9IC0xOworICAgIGZvciAoaW50IGogPSAwOyBqIDwgQ291bnRTZWxlY3RlZE9wdGlvbnMoKTsgaiArKykgeworICAgICAgICBpZiAoR2V0U2VsZWN0ZWRPcHRpb25JbmRleChqKSA9PSBpbmRleCkgeworICAgICAgICAgICAgaVBvcyA9IGo7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcEFycmF5LT5HZXRDb3VudCgpOyBpICsrKQorICAgICAgICBpZiAocEFycmF5LT5HZXRFbGVtZW50VmFsdWUoaSktPkdldFVuaWNvZGVUZXh0KCkgPT0gb3B0X3ZhbHVlICYmIChpbnQpaSA9PSBpUG9zKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK0ZYX0JPT0wgQ1BERl9Gb3JtRmllbGQ6OlNldEl0ZW1TZWxlY3Rpb24oaW50IGluZGV4LCBGWF9CT09MIGJTZWxlY3RlZCwgRlhfQk9PTCBiTm90aWZ5KQoreworICAgIEFTU0VSVChHZXRUeXBlKCkgPT0gQ29tYm9Cb3ggfHwgR2V0VHlwZSgpID09IExpc3RCb3gpOworICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gQ291bnRPcHRpb25zKCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDRlhfV2lkZVN0cmluZyBvcHRfdmFsdWUgPSBHZXRPcHRpb25WYWx1ZShpbmRleCk7CisgICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7CisgICAgICAgIGludCBpUmV0ID0gMDsKKyAgICAgICAgaWYgKEdldFR5cGUoKSA9PSBMaXN0Qm94KSB7CisgICAgICAgICAgICBpUmV0ID0gbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QmVmb3JlU2VsZWN0aW9uQ2hhbmdlKHRoaXMsIG9wdF92YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKEdldFR5cGUoKSA9PSBDb21ib0JveCkgeworICAgICAgICAgICAgaVJldCA9IG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnktPkJlZm9yZVZhbHVlQ2hhbmdlKHRoaXMsIG9wdF92YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlSZXQgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFiU2VsZWN0ZWQpIHsKKyAgICAgICAgQ1BERl9PYmplY3QqIHBWYWx1ZSA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJWIik7CisgICAgICAgIGlmIChwVmFsdWUgIT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKG1fVHlwZSA9PSBMaXN0Qm94KSB7CisgICAgICAgICAgICAgICAgU2VsZWN0T3B0aW9uKGluZGV4LCBGQUxTRSk7CisgICAgICAgICAgICAgICAgaWYgKHBWYWx1ZS0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJJTkcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBWYWx1ZS0+R2V0VW5pY29kZVRleHQoKSA9PSBvcHRfdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcERpY3QtPlJlbW92ZUF0KCJWIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBWYWx1ZS0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgeworICAgICAgICAgICAgICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBDUERGX0FycmF5OjpDcmVhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBBcnJheSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaW50IGlDb3VudCA9IENvdW50T3B0aW9ucygpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlDb3VudDsgaSArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNJdGVtU2VsZWN0ZWQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3ZhbHVlID0gR2V0T3B0aW9uVmFsdWUoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBcnJheS0+QWRkU3RyaW5nKFBERl9FbmNvZGVUZXh0KG9wdF92YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocEFycmF5LT5HZXRDb3VudCgpIDwgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcEFycmF5LT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BEaWN0LT5TZXRBdCgiViIsIHBBcnJheSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fVHlwZSA9PSBDb21ib0JveCkgeworICAgICAgICAgICAgICAgIG1fcERpY3QtPlJlbW92ZUF0KCJWIik7CisgICAgICAgICAgICAgICAgbV9wRGljdC0+UmVtb3ZlQXQoIkkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX1R5cGUgPT0gTGlzdEJveCkgeworICAgICAgICAgICAgU2VsZWN0T3B0aW9uKGluZGV4LCBUUlVFKTsKKyAgICAgICAgICAgIGlmICghKG1fRmxhZ3MgJiBGT1JNTElTVF9NVUxUSVNFTEVDVCkpIHsKKyAgICAgICAgICAgICAgICBtX3BEaWN0LT5TZXRBdFN0cmluZygiViIsIFBERl9FbmNvZGVUZXh0KG9wdF92YWx1ZSwgb3B0X3ZhbHVlLkdldExlbmd0aCgpKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIENQREZfQXJyYXkqIHBBcnJheSA9IENQREZfQXJyYXk6OkNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGlmIChwQXJyYXkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEZYX0JPT0wgYlNlbGVjdGVkOworICAgICAgICAgICAgICAgIGludCBpQ291bnQgPSBDb3VudE9wdGlvbnMoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlDb3VudDsgaSArKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSBpbmRleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYlNlbGVjdGVkID0gSXNJdGVtU2VsZWN0ZWQoaSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiU2VsZWN0ZWQgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChiU2VsZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF92YWx1ZSA9IEdldE9wdGlvblZhbHVlKGkpOworICAgICAgICAgICAgICAgICAgICAgICAgcEFycmF5LT5BZGRTdHJpbmcoUERGX0VuY29kZVRleHQob3B0X3ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9wRGljdC0+U2V0QXQoIlYiLCBwQXJyYXkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKG1fVHlwZSA9PSBDb21ib0JveCkgeworICAgICAgICAgICAgbV9wRGljdC0+U2V0QXRTdHJpbmcoIlYiLCBQREZfRW5jb2RlVGV4dChvcHRfdmFsdWUsIG9wdF92YWx1ZS5HZXRMZW5ndGgoKSkpOworICAgICAgICAgICAgQ1BERl9BcnJheSogcEkgPSBDUERGX0FycmF5OjpDcmVhdGUoKTsKKyAgICAgICAgICAgIGlmIChwSSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcEktPkFkZEludGVnZXIoaW5kZXgpOworICAgICAgICAgICAgbV9wRGljdC0+U2V0QXQoIkkiLCBwSSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7CisgICAgICAgIGlmIChHZXRUeXBlKCkgPT0gTGlzdEJveCkgeworICAgICAgICAgICAgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QWZ0ZXJTZWxlY3Rpb25DaGFuZ2UodGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKEdldFR5cGUoKSA9PSBDb21ib0JveCkgeworICAgICAgICAgICAgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QWZ0ZXJWYWx1ZUNoYW5nZSh0aGlzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoQ1BERl9JbnRlckZvcm06Om1fYlVwZGF0ZUFQKSB7CisgICAgICAgIFVwZGF0ZUFQKE5VTEwpOworICAgIH0KKyAgICBtX3BGb3JtLT5tX2JVcGRhdGVkID0gVFJVRTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ1BERl9Gb3JtRmllbGQ6OklzSXRlbURlZmF1bHRTZWxlY3RlZChpbnQgaW5kZXgpCit7CisgICAgQVNTRVJUKEdldFR5cGUoKSA9PSBDb21ib0JveCB8fCBHZXRUeXBlKCkgPT0gTGlzdEJveCk7CisgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBDb3VudE9wdGlvbnMoKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGludCBpRFZJbmRleCA9IEdldERlZmF1bHRTZWxlY3RlZEl0ZW0oKTsKKyAgICBpZiAoaURWSW5kZXggPCAwKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIChpRFZJbmRleCA9PSBpbmRleCk7Cit9CitpbnQgQ1BERl9Gb3JtRmllbGQ6OkdldERlZmF1bHRTZWxlY3RlZEl0ZW0oKQoreworICAgIEFTU0VSVChHZXRUeXBlKCkgPT0gQ29tYm9Cb3ggfHwgR2V0VHlwZSgpID09IExpc3RCb3gpOworICAgIENQREZfT2JqZWN0KiBwVmFsdWUgPSBGUERGX0dldEZpZWxkQXR0cihtX3BEaWN0LCAiRFYiKTsKKyAgICBpZiAocFZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBDRlhfV2lkZVN0cmluZyBjc0RWID0gcFZhbHVlLT5HZXRVbmljb2RlVGV4dCgpOworICAgIGlmIChjc0RWLklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGludCBpQ291bnQgPSBDb3VudE9wdGlvbnMoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGlDb3VudDsgaSArKykgeworICAgICAgICBpZiAoY3NEViA9PSBHZXRPcHRpb25WYWx1ZShpKSkgeworICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIC0xOworfQordm9pZCBDUERGX0Zvcm1GaWVsZDo6VXBkYXRlQVAoQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2wpCit7CisgICAgaWYgKG1fVHlwZSA9PSBQdXNoQnV0dG9uKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fVHlwZSA9PSBSYWRpb0J1dHRvbiB8fCBtX1R5cGUgPT0gQ2hlY2tCb3gpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fcEZvcm0tPm1fYkdlbmVyYXRlQVApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IENvdW50Q29udHJvbHMoKTsgaSArKykgeworICAgICAgICBDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCA9IEdldENvbnRyb2woaSk7CisgICAgICAgIEZQREZfR2VuZXJhdGVBUChtX3BGb3JtLT5tX3BEb2N1bWVudCwgcENvbnRyb2wtPm1fcFdpZGdldERpY3QpOworICAgIH0KK30KK2ludCBDUERGX0Zvcm1GaWVsZDo6Q291bnRPcHRpb25zKCkKK3sKKyAgICBDUERGX09iamVjdCogcFZhbHVlID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIk9wdCIpOworICAgIGlmIChwVmFsdWUgPT0gTlVMTCB8fCBwVmFsdWUtPkdldFR5cGUoKSAhPSBQREZPQkpfQVJSQVkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiAoKENQREZfQXJyYXkqKXBWYWx1ZSktPkdldENvdW50KCk7Cit9CitDRlhfV2lkZVN0cmluZyBDUERGX0Zvcm1GaWVsZDo6R2V0T3B0aW9uVGV4dChpbnQgaW5kZXgsIGludCBzdWJfaW5kZXgpCit7CisgICAgQ1BERl9PYmplY3QqIHBWYWx1ZSA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJPcHQiKTsKKyAgICBpZiAocFZhbHVlID09IE5VTEwgfHwgcFZhbHVlLT5HZXRUeXBlKCkgIT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZygpOworICAgIH0KKyAgICBDUERGX09iamVjdCogcE9wdGlvbiA9ICgoQ1BERl9BcnJheSopcFZhbHVlKS0+R2V0RWxlbWVudFZhbHVlKGluZGV4KTsKKyAgICBpZiAocE9wdGlvbiA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZygpOworICAgIH0KKyAgICBpZiAocE9wdGlvbi0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgeworICAgICAgICBwT3B0aW9uID0gKChDUERGX0FycmF5KilwT3B0aW9uKS0+R2V0RWxlbWVudFZhbHVlKHN1Yl9pbmRleCk7CisgICAgfQorICAgIGlmIChwT3B0aW9uID09IE5VTEwgfHwgcE9wdGlvbi0+R2V0VHlwZSgpICE9IFBERk9CSl9TVFJJTkcpIHsKKyAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7CisgICAgfQorICAgIHJldHVybiAoKENQREZfU3RyaW5nKilwT3B0aW9uKS0+R2V0VW5pY29kZVRleHQoKTsKK30KK0NGWF9XaWRlU3RyaW5nIENQREZfRm9ybUZpZWxkOjpHZXRPcHRpb25MYWJlbChpbnQgaW5kZXgpCit7CisgICAgcmV0dXJuIEdldE9wdGlvblRleHQoaW5kZXgsIDEpOworfQorQ0ZYX1dpZGVTdHJpbmcgQ1BERl9Gb3JtRmllbGQ6OkdldE9wdGlvblZhbHVlKGludCBpbmRleCkKK3sKKyAgICByZXR1cm4gR2V0T3B0aW9uVGV4dChpbmRleCwgMCk7Cit9CitpbnQgQ1BERl9Gb3JtRmllbGQ6OkZpbmRPcHRpb24oQ0ZYX1dpZGVTdHJpbmcgY3NPcHRMYWJlbCkKK3sKKyAgICBpbnQgaUNvdW50ID0gQ291bnRPcHRpb25zKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspIHsKKyAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgY3NWYWx1ZSA9IEdldE9wdGlvblZhbHVlKGkpOworICAgICAgICBpZiAoY3NWYWx1ZSA9PSBjc09wdExhYmVsKSB7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CitpbnQgQ1BERl9Gb3JtRmllbGQ6OkZpbmRPcHRpb25WYWx1ZShGWF9MUENXU1RSIGNzT3B0VmFsdWUsIGludCBpU3RhcnRJbmRleCkKK3sKKyAgICBpZiAoaVN0YXJ0SW5kZXggPCAwKSB7CisgICAgICAgIGlTdGFydEluZGV4ID0gMDsKKyAgICB9CisgICAgaW50IGlDb3VudCA9IENvdW50T3B0aW9ucygpOworICAgIGZvciAoOyBpU3RhcnRJbmRleCA8IGlDb3VudDsgaVN0YXJ0SW5kZXggKyspIHsKKyAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgY3NWYWx1ZSA9IEdldE9wdGlvblZhbHVlKGlTdGFydEluZGV4KTsKKyAgICAgICAgaWYgKGNzVmFsdWUgPT0gY3NPcHRWYWx1ZSkgeworICAgICAgICAgICAgcmV0dXJuIGlTdGFydEluZGV4OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAtMTsKK30KK0ZYX0JPT0wgQ1BERl9Gb3JtRmllbGQ6OkNoZWNrQ29udHJvbChpbnQgaUNvbnRyb2xJbmRleCwgRlhfQk9PTCBiQ2hlY2tlZCwgRlhfQk9PTCBiTm90aWZ5KQoreworICAgIEFTU0VSVChHZXRUeXBlKCkgPT0gQ2hlY2tCb3ggfHwgR2V0VHlwZSgpID09IFJhZGlvQnV0dG9uKTsKKyAgICBDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCA9IEdldENvbnRyb2woaUNvbnRyb2xJbmRleCk7CisgICAgaWYgKHBDb250cm9sID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoIWJDaGVja2VkICYmIHBDb250cm9sLT5Jc0NoZWNrZWQoKSA9PSBiQ2hlY2tlZCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIENGWF9CeXRlQXJyYXkgc3RhdHVzQXJyYXk7CisgICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7CisgICAgICAgIFNhdmVDaGVja2VkRmllbGRTdGF0dXModGhpcywgc3RhdHVzQXJyYXkpOworICAgIH0KKyAgICBDRlhfV2lkZVN0cmluZyBjc1dFeHBvcnQgPSAgcENvbnRyb2wtPkdldEV4cG9ydFZhbHVlKCk7CisgICAgQ0ZYX0J5dGVTdHJpbmcgY3NCRXhwb3J0ID0gUERGX0VuY29kZVRleHQoY3NXRXhwb3J0KTsKKyAgICBpbnQgaUNvdW50ID0gQ291bnRDb250cm9scygpOworICAgIEZYX0JPT0wgYlVuaXNvbiA9IFBERl9Gb3JtRmllbGRfSXNVbmlzb24odGhpcyk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspIHsKKyAgICAgICAgQ1BERl9Gb3JtQ29udHJvbCogcEN0cmwgPSBHZXRDb250cm9sKGkpOworICAgICAgICBpZiAoYlVuaXNvbikgeworICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgY3NFVmFsdWUgPSBwQ3RybC0+R2V0RXhwb3J0VmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChjc0VWYWx1ZSA9PSBjc1dFeHBvcnQpIHsKKyAgICAgICAgICAgICAgICBpZiAocEN0cmwtPkdldE9uU3RhdGVOYW1lKCkgPT0gcENvbnRyb2wtPkdldE9uU3RhdGVOYW1lKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcEN0cmwtPkNoZWNrQ29udHJvbChiQ2hlY2tlZCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiQ2hlY2tlZCkgeworICAgICAgICAgICAgICAgICAgICBwQ3RybC0+Q2hlY2tDb250cm9sKEZBTFNFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGJDaGVja2VkKSB7CisgICAgICAgICAgICAgICAgcEN0cmwtPkNoZWNrQ29udHJvbChGQUxTRSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaSA9PSBpQ29udHJvbEluZGV4KSB7CisgICAgICAgICAgICAgICAgcEN0cmwtPkNoZWNrQ29udHJvbChiQ2hlY2tlZCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGJDaGVja2VkKSB7CisgICAgICAgICAgICAgICAgcEN0cmwtPkNoZWNrQ29udHJvbChGQUxTRSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQ1BERl9PYmplY3QqIHBPcHQgPSBGUERGX0dldEZpZWxkQXR0cihtX3BEaWN0LCAiT3B0Iik7CisgICAgaWYgKHBPcHQgPT0gTlVMTCB8fCBwT3B0LT5HZXRUeXBlKCkgIT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgIGlmIChiQ2hlY2tlZCkgeworICAgICAgICAgICAgbV9wRGljdC0+U2V0QXROYW1lKCJWIiwgY3NCRXhwb3J0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGNzVjsKKyAgICAgICAgICAgIENQREZfT2JqZWN0KiBwViA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJWIik7CisgICAgICAgICAgICBpZiAocFYgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGNzViA9IHBWLT5HZXRTdHJpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjc1YgPT0gY3NCRXhwb3J0KSB7CisgICAgICAgICAgICAgICAgbV9wRGljdC0+U2V0QXROYW1lKCJWIiwgIk9mZiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIGlmIChiQ2hlY2tlZCkgeworICAgICAgICBDRlhfQnl0ZVN0cmluZyBjc0luZGV4OworICAgICAgICBjc0luZGV4LkZvcm1hdCgiJWQiLCBpQ29udHJvbEluZGV4KTsKKyAgICAgICAgbV9wRGljdC0+U2V0QXROYW1lKCJWIiwgY3NJbmRleCk7CisgICAgfQorICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgeworICAgICAgICBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5BZnRlckNoZWNrZWRTdGF0dXNDaGFuZ2UodGhpcywgc3RhdHVzQXJyYXkpOworICAgIH0KKyAgICBtX3BGb3JtLT5tX2JVcGRhdGVkID0gVFJVRTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0NGWF9XaWRlU3RyaW5nIENQREZfRm9ybUZpZWxkOjpHZXRDaGVja1ZhbHVlKEZYX0JPT0wgYkRlZmF1bHQpCit7CisgICAgQVNTRVJUKEdldFR5cGUoKSA9PSBDaGVja0JveCB8fCBHZXRUeXBlKCkgPT0gUmFkaW9CdXR0b24pOworICAgIENGWF9XaWRlU3RyaW5nIGNzRXhwb3J0ID0gTCJPZmYiOworICAgIEZYX0JPT0wgYkNoZWNrZWQ7CisgICAgaW50IGlDb3VudCA9IENvdW50Q29udHJvbHMoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGlDb3VudDsgaSArKykgeworICAgICAgICBDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCA9IEdldENvbnRyb2woaSk7CisgICAgICAgIGlmIChiRGVmYXVsdCkgeworICAgICAgICAgICAgYkNoZWNrZWQgPSBwQ29udHJvbC0+SXNEZWZhdWx0Q2hlY2tlZCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYkNoZWNrZWQgPSBwQ29udHJvbC0+SXNDaGVja2VkKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJDaGVja2VkKSB7CisgICAgICAgICAgICBjc0V4cG9ydCA9IHBDb250cm9sLT5HZXRFeHBvcnRWYWx1ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNzRXhwb3J0OworfQorRlhfQk9PTCBDUERGX0Zvcm1GaWVsZDo6U2V0Q2hlY2tWYWx1ZShjb25zdCBDRlhfV2lkZVN0cmluZyYgdmFsdWUsIEZYX0JPT0wgYkRlZmF1bHQsIEZYX0JPT0wgYk5vdGlmeSkKK3sKKyAgICBBU1NFUlQoR2V0VHlwZSgpID09IENoZWNrQm94IHx8IEdldFR5cGUoKSA9PSBSYWRpb0J1dHRvbik7CisgICAgQ0ZYX0J5dGVBcnJheSBzdGF0dXNBcnJheTsKKyAgICBpZiAoYk5vdGlmeSAmJiBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5ICE9IE5VTEwpIHsKKyAgICAgICAgU2F2ZUNoZWNrZWRGaWVsZFN0YXR1cyh0aGlzLCBzdGF0dXNBcnJheSk7CisgICAgfQorICAgIGludCBpQ291bnQgPSBDb3VudENvbnRyb2xzKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspIHsKKyAgICAgICAgQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2wgPSBHZXRDb250cm9sKGkpOworICAgICAgICBDRlhfV2lkZVN0cmluZyBjc0V4cG9ydCA9IHBDb250cm9sLT5HZXRFeHBvcnRWYWx1ZSgpOworICAgICAgICBpZiAoY3NFeHBvcnQgPT0gdmFsdWUpIHsKKyAgICAgICAgICAgIGlmIChiRGVmYXVsdCkgeworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBDaGVja0NvbnRyb2woR2V0Q29udHJvbEluZGV4KHBDb250cm9sKSwgVFJVRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChiRGVmYXVsdCkgeworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBDaGVja0NvbnRyb2woR2V0Q29udHJvbEluZGV4KHBDb250cm9sKSwgRkFMU0UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgeworICAgICAgICBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5BZnRlckNoZWNrZWRTdGF0dXNDaGFuZ2UodGhpcywgc3RhdHVzQXJyYXkpOworICAgIH0KKyAgICBtX3BGb3JtLT5tX2JVcGRhdGVkID0gVFJVRTsKKyAgICByZXR1cm4gVFJVRTsKK30KK2ludCBDUERGX0Zvcm1GaWVsZDo6R2V0VG9wVmlzaWJsZUluZGV4KCkKK3sKKyAgICBDUERGX09iamVjdCogcE9iaiA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJUSSIpOworICAgIGlmIChwT2JqID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBwT2JqLT5HZXRJbnRlZ2VyKCk7Cit9CitpbnQgQ1BERl9Gb3JtRmllbGQ6OkNvdW50U2VsZWN0ZWRPcHRpb25zKCkKK3sKKyAgICBDUERGX09iamVjdCogcE9iaiA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJJIik7CisgICAgaWYgKHBPYmogPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcEFycmF5ID0gcE9iai0+R2V0QXJyYXkoKTsKKyAgICBpZiAocEFycmF5ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiAoaW50KXBBcnJheS0+R2V0Q291bnQoKTsKK30KK2ludCBDUERGX0Zvcm1GaWVsZDo6R2V0U2VsZWN0ZWRPcHRpb25JbmRleChpbnQgaW5kZXgpCit7CisgICAgQ1BERl9PYmplY3QqIHBPYmogPSBGUERGX0dldEZpZWxkQXR0cihtX3BEaWN0LCAiSSIpOworICAgIGlmIChwT2JqID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBDUERGX0FycmF5KiBwQXJyYXkgPSBwT2JqLT5HZXRBcnJheSgpOworICAgIGlmIChwQXJyYXkgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGludCBpQ291bnQgPSAoaW50KXBBcnJheS0+R2V0Q291bnQoKTsKKyAgICBpZiAoaUNvdW50ID4gMCAmJiBpbmRleCA8IGlDb3VudCkgeworICAgICAgICByZXR1cm4gcEFycmF5LT5HZXRJbnRlZ2VyKGluZGV4KTsKKyAgICB9CisgICAgcmV0dXJuIC0xOworfQorRlhfQk9PTCBDUERGX0Zvcm1GaWVsZDo6SXNPcHRpb25TZWxlY3RlZChpbnQgaU9wdEluZGV4KQoreworICAgIENQREZfT2JqZWN0KiBwT2JqID0gRlBERl9HZXRGaWVsZEF0dHIobV9wRGljdCwgIkkiKTsKKyAgICBpZiAocE9iaiA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcEFycmF5ID0gcE9iai0+R2V0QXJyYXkoKTsKKyAgICBpZiAocEFycmF5ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpbnQgaUNvdW50ID0gKGludClwQXJyYXktPkdldENvdW50KCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspIHsKKyAgICAgICAgaWYgKHBBcnJheS0+R2V0SW50ZWdlcihpKSA9PSBpT3B0SW5kZXgpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK0ZYX0JPT0wgQ1BERl9Gb3JtRmllbGQ6OlNlbGVjdE9wdGlvbihpbnQgaU9wdEluZGV4LCBGWF9CT09MIGJTZWxlY3RlZCwgRlhfQk9PTCBiTm90aWZ5KQoreworICAgIENQREZfQXJyYXkqIHBBcnJheSA9IG1fcERpY3QtPkdldEFycmF5KCJJIik7CisgICAgaWYgKHBBcnJheSA9PSBOVUxMKSB7CisgICAgICAgIGlmICghYlNlbGVjdGVkKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBwQXJyYXkgPSBDUERGX0FycmF5OjpDcmVhdGUoKTsKKyAgICAgICAgaWYgKHBBcnJheSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgbV9wRGljdC0+U2V0QXQoIkkiLCBwQXJyYXkpOworICAgIH0KKyAgICBGWF9CT09MIGJSZXR1cm4gPSBGQUxTRTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IChpbnQpcEFycmF5LT5HZXRDb3VudCgpOyBpICsrKSB7CisgICAgICAgIGludCBpRmluZCA9IHBBcnJheS0+R2V0SW50ZWdlcihpKTsKKyAgICAgICAgaWYgKGlGaW5kID09IGlPcHRJbmRleCkgeworICAgICAgICAgICAgaWYgKGJTZWxlY3RlZCkgeworICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJOb3RpZnkgJiYgbV9wRm9ybS0+bV9wRm9ybU5vdGlmeSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaW50IGlSZXQgPSAwOworICAgICAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIGNzVmFsdWUgPSBHZXRPcHRpb25MYWJlbChpT3B0SW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChHZXRUeXBlKCkgPT0gTGlzdEJveCkgeworICAgICAgICAgICAgICAgICAgICBpUmV0ID0gbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QmVmb3JlU2VsZWN0aW9uQ2hhbmdlKHRoaXMsIGNzVmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoR2V0VHlwZSgpID09IENvbWJvQm94KSB7CisgICAgICAgICAgICAgICAgICAgIGlSZXQgPSBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5CZWZvcmVWYWx1ZUNoYW5nZSh0aGlzLCBjc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGlSZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwQXJyYXktPlJlbW92ZUF0KGkpOworICAgICAgICAgICAgYlJldHVybiA9IFRSVUU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIGlmIChpRmluZCA+IGlPcHRJbmRleCkgeworICAgICAgICAgICAgaWYgKCFiU2VsZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGludCBpUmV0ID0gMDsKKyAgICAgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyBjc1ZhbHVlID0gR2V0T3B0aW9uTGFiZWwoaU9wdEluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoR2V0VHlwZSgpID09IExpc3RCb3gpIHsKKyAgICAgICAgICAgICAgICAgICAgaVJldCA9IG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnktPkJlZm9yZVNlbGVjdGlvbkNoYW5nZSh0aGlzLCBjc1ZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKEdldFR5cGUoKSA9PSBDb21ib0JveCkgeworICAgICAgICAgICAgICAgICAgICBpUmV0ID0gbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QmVmb3JlVmFsdWVDaGFuZ2UodGhpcywgY3NWYWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpUmV0IDwgMCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgQ1BERl9OdW1iZXIqIHBOdW0gPSBDUERGX051bWJlcjo6Q3JlYXRlKGlPcHRJbmRleCk7CisgICAgICAgICAgICBpZiAocE51bSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcEFycmF5LT5JbnNlcnRBdChpLCBwTnVtKTsKKyAgICAgICAgICAgIGJSZXR1cm4gPSBUUlVFOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFiUmV0dXJuKSB7CisgICAgICAgIGlmIChiU2VsZWN0ZWQpIHsKKyAgICAgICAgICAgIHBBcnJheS0+QWRkSW50ZWdlcihpT3B0SW5kZXgpOworICAgICAgICB9CisgICAgICAgIGlmIChwQXJyYXktPkdldENvdW50KCkgPT0gMCkgeworICAgICAgICAgICAgbV9wRGljdC0+UmVtb3ZlQXQoIkkiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYk5vdGlmeSAmJiBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5ICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKEdldFR5cGUoKSA9PSBMaXN0Qm94KSB7CisgICAgICAgICAgICBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5BZnRlclNlbGVjdGlvbkNoYW5nZSh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoR2V0VHlwZSgpID09IENvbWJvQm94KSB7CisgICAgICAgICAgICBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5BZnRlclZhbHVlQ2hhbmdlKHRoaXMpOworICAgICAgICB9CisgICAgfQorICAgIG1fcEZvcm0tPm1fYlVwZGF0ZWQgPSBUUlVFOworICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDUERGX0Zvcm1GaWVsZDo6Q2xlYXJTZWxlY3RlZE9wdGlvbnMoRlhfQk9PTCBiTm90aWZ5KQoreworICAgIGlmIChiTm90aWZ5ICYmIG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnkgIT0gTlVMTCkgeworICAgICAgICBpbnQgaVJldCA9IDA7CisgICAgICAgIENGWF9XaWRlU3RyaW5nIGNzVmFsdWU7CisgICAgICAgIGludCBpSW5kZXggPSBHZXRTZWxlY3RlZEluZGV4KDApOworICAgICAgICBpZiAoaUluZGV4ID49IDApIHsKKyAgICAgICAgICAgIGNzVmFsdWUgPSBHZXRPcHRpb25MYWJlbChpSW5kZXgpOworICAgICAgICB9CisgICAgICAgIGlmIChHZXRUeXBlKCkgPT0gTGlzdEJveCkgeworICAgICAgICAgICAgaVJldCA9IG1fcEZvcm0tPm1fcEZvcm1Ob3RpZnktPkJlZm9yZVNlbGVjdGlvbkNoYW5nZSh0aGlzLCBjc1ZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoR2V0VHlwZSgpID09IENvbWJvQm94KSB7CisgICAgICAgICAgICBpUmV0ID0gbV9wRm9ybS0+bV9wRm9ybU5vdGlmeS0+QmVmb3JlVmFsdWVDaGFuZ2UodGhpcywgY3NWYWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlSZXQgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9wRGljdC0+UmVtb3ZlQXQoIkkiKTsKKyAgICBpZiAoYk5vdGlmeSAmJiBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5ICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKEdldFR5cGUoKSA9PSBMaXN0Qm94KSB7CisgICAgICAgICAgICBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5BZnRlclNlbGVjdGlvbkNoYW5nZSh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoR2V0VHlwZSgpID09IENvbWJvQm94KSB7CisgICAgICAgICAgICBtX3BGb3JtLT5tX3BGb3JtTm90aWZ5LT5BZnRlclZhbHVlQ2hhbmdlKHRoaXMpOworICAgICAgICB9CisgICAgfQorICAgIG1fcEZvcm0tPm1fYlVwZGF0ZWQgPSBUUlVFOworICAgIHJldHVybiBUUlVFOworfQordm9pZCBDUERGX0Zvcm1GaWVsZDo6TG9hZERBKCkKK3sKKyAgICBDRlhfQnl0ZVN0cmluZyBEQSA9IEZQREZfR2V0RmllbGRBdHRyKG1fcERpY3QsICJEQSIpLT5HZXRTdHJpbmcoKTsKKyAgICBpZiAoREEuSXNFbXB0eSgpKSB7CisgICAgICAgIERBID0gbV9wRm9ybS0+bV9wRm9ybURpY3QtPkdldFN0cmluZygiREEiKTsKKyAgICB9CisgICAgaWYgKERBLklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfU2ltcGxlUGFyc2VyIHN5bnRheChEQSk7CisgICAgc3ludGF4LkZpbmRUYWdQYXJhbSgiVGYiLCAyKTsKKyAgICBDRlhfQnl0ZVN0cmluZyBmb250X25hbWUgPSBzeW50YXguR2V0V29yZCgpOworICAgIENQREZfRGljdGlvbmFyeSogcEZvbnREaWN0ID0gbV9wRm9ybS0+bV9wRm9ybURpY3QtPkdldERpY3QoIkRSIiktPkdldERpY3QoIkZvbnQiKS0+R2V0RGljdChmb250X25hbWUpOworICAgIGlmIChwRm9udERpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcEZvbnQgPSBtX3BGb3JtLT5tX3BEb2N1bWVudC0+TG9hZEZvbnQocEZvbnREaWN0KTsKKyAgICBtX0ZvbnRTaXplID0gRlhfYXRvZihzeW50YXguR2V0V29yZCgpKTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX2xpbmsuY3BwIGIvY29yZS9zcmMvZnBkZmRvYy9kb2NfbGluay5jcHAKaW5kZXggNGM4ZmRhNy4uMGQxYjk4ZSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmRvYy9kb2NfbGluay5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmRvYy9kb2NfbGluay5jcHAKQEAgLTEsMTA1ICsxLDEwNSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmRvYy9mcGRmX2RvYy5oIg0KLUNQREZfTGlua0xpc3Q6On5DUERGX0xpbmtMaXN0KCkNCi17DQotICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fUGFnZU1hcC5HZXRTdGFydFBvc2l0aW9uKCk7DQotICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgIEZYX0xQVk9JRCBrZXksIHZhbHVlOw0KLSAgICAgICAgbV9QYWdlTWFwLkdldE5leHRBc3NvYyhwb3MsIGtleSwgdmFsdWUpOw0KLSAgICAgICAgZGVsZXRlIChDRlhfUHRyQXJyYXkqKXZhbHVlOw0KLSAgICB9DQotfQ0KLUNGWF9QdHJBcnJheSogQ1BERl9MaW5rTGlzdDo6R2V0UGFnZUxpbmtzKENQREZfUGFnZSogcFBhZ2UpDQotew0KLSAgICBGWF9EV09SRCBvYmpudW0gPSBwUGFnZS0+bV9wRm9ybURpY3QtPkdldE9iak51bSgpOw0KLSAgICBpZiAob2JqbnVtID09IDApIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENGWF9QdHJBcnJheSogcFBhZ2VMaW5rTGlzdCA9IE5VTEw7DQotICAgIGlmICghbV9QYWdlTWFwLkxvb2t1cCgoRlhfTFBWT0lEKShGWF9VSU5UUFRSKW9iam51bSwgKEZYX0xQVk9JRCYpcFBhZ2VMaW5rTGlzdCkpIHsNCi0gICAgICAgIHBQYWdlTGlua0xpc3QgPSBGWF9ORVcgQ0ZYX1B0ckFycmF5Ow0KLSAgICAgICAgaWYgKHBQYWdlTGlua0xpc3QgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9QYWdlTWFwLlNldEF0KChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpb2JqbnVtLCBwUGFnZUxpbmtMaXN0KTsNCi0gICAgICAgIExvYWRQYWdlTGlua3MocFBhZ2UsIHBQYWdlTGlua0xpc3QpOw0KLSAgICB9DQotICAgIHJldHVybiBwUGFnZUxpbmtMaXN0Ow0KLX0NCi1pbnQgQ1BERl9MaW5rTGlzdDo6Q291bnRMaW5rcyhDUERGX1BhZ2UqIHBQYWdlKQ0KLXsNCi0gICAgQ0ZYX1B0ckFycmF5KiBwUGFnZUxpbmtMaXN0ID0gR2V0UGFnZUxpbmtzKHBQYWdlKTsNCi0gICAgaWYgKHBQYWdlTGlua0xpc3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgcmV0dXJuIHBQYWdlTGlua0xpc3QtPkdldFNpemUoKTsNCi19DQotQ1BERl9MaW5rIENQREZfTGlua0xpc3Q6OkdldExpbmsoQ1BERl9QYWdlKiBwUGFnZSwgaW50IGluZGV4KQ0KLXsNCi0gICAgQ0ZYX1B0ckFycmF5KiBwUGFnZUxpbmtMaXN0ID0gR2V0UGFnZUxpbmtzKHBQYWdlKTsNCi0gICAgaWYgKHBQYWdlTGlua0xpc3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIChDUERGX0RpY3Rpb25hcnkqKXBQYWdlTGlua0xpc3QtPkdldEF0KGluZGV4KTsNCi19DQotQ1BERl9MaW5rIENQREZfTGlua0xpc3Q6OkdldExpbmtBdFBvaW50KENQREZfUGFnZSogcFBhZ2UsIEZYX0ZMT0FUIHBkZl94LCBGWF9GTE9BVCBwZGZfeSkNCi17DQotICAgIENGWF9QdHJBcnJheSogcFBhZ2VMaW5rTGlzdCA9IEdldFBhZ2VMaW5rcyhwUGFnZSk7DQotICAgIGlmIChwUGFnZUxpbmtMaXN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGludCBzaXplID0gcFBhZ2VMaW5rTGlzdC0+R2V0U2l6ZSgpOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkgKyspIHsNCi0gICAgICAgIENQREZfTGluayBMaW5rID0gKENQREZfRGljdGlvbmFyeSopcFBhZ2VMaW5rTGlzdC0+R2V0QXQoaSk7DQotICAgICAgICBDUERGX1JlY3QgcmVjdCA9IExpbmsuR2V0UmVjdCgpOw0KLSAgICAgICAgaWYgKHJlY3QuQ29udGFpbnMocGRmX3gsIHBkZl95KSkgew0KLSAgICAgICAgICAgIHJldHVybiBMaW5rOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi12b2lkIENQREZfTGlua0xpc3Q6OkxvYWRQYWdlTGlua3MoQ1BERl9QYWdlKiBwUGFnZSwgQ0ZYX1B0ckFycmF5KiBwTGlzdCkNCi17DQotICAgIENQREZfQXJyYXkqIHBBbm5vdExpc3QgPSBwUGFnZS0+bV9wRm9ybURpY3QtPkdldEFycmF5KCJBbm5vdHMiKTsNCi0gICAgaWYgKHBBbm5vdExpc3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwQW5ub3RMaXN0LT5HZXRDb3VudCgpOyBpICsrKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdCA9IHBBbm5vdExpc3QtPkdldERpY3QoaSk7DQotICAgICAgICBpZiAocEFubm90ID09IE5VTEwpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwQW5ub3QtPkdldFN0cmluZygiU3VidHlwZSIpICE9ICJMaW5rIikgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcExpc3QtPkFkZChwQW5ub3QpOw0KLSAgICB9DQotfQ0KLUNQREZfUmVjdCBDUERGX0xpbms6OkdldFJlY3QoKQ0KLXsNCi0gICAgcmV0dXJuIG1fcERpY3QtPkdldFJlY3QoIlJlY3QiKTsNCi19DQotQ1BERl9EZXN0IENQREZfTGluazo6R2V0RGVzdChDUERGX0RvY3VtZW50KiBwRG9jKQ0KLXsNCi0gICAgQ1BERl9PYmplY3QqIHBEZXN0ID0gbV9wRGljdC0+R2V0RWxlbWVudFZhbHVlKCJEZXN0Iik7DQotICAgIGlmIChwRGVzdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAocERlc3QtPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSSU5HIHx8IHBEZXN0LT5HZXRUeXBlKCkgPT0gUERGT0JKX05BTUUpIHsNCi0gICAgICAgIENQREZfTmFtZVRyZWUgbmFtZV90cmVlKHBEb2MsIEZYX0JTVFJDKCJEZXN0cyIpKTsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nQyBuYW1lID0gcERlc3QtPkdldFN0cmluZygpOw0KLSAgICAgICAgcmV0dXJuIG5hbWVfdHJlZS5Mb29rdXBOYW1lZERlc3QocERvYywgbmFtZSk7DQotICAgIH0gZWxzZSBpZiAocERlc3QtPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgIHJldHVybiAoQ1BERl9BcnJheSopcERlc3Q7DQotICAgIH0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLUNQREZfQWN0aW9uIENQREZfTGluazo6R2V0QWN0aW9uKCkNCi17DQotICAgIHJldHVybiBtX3BEaWN0LT5HZXREaWN0KCJBIik7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZkb2MvZnBkZl9kb2MuaCIKK0NQREZfTGlua0xpc3Q6On5DUERGX0xpbmtMaXN0KCkKK3sKKyAgICBGWF9QT1NJVElPTiBwb3MgPSBtX1BhZ2VNYXAuR2V0U3RhcnRQb3NpdGlvbigpOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgRlhfTFBWT0lEIGtleSwgdmFsdWU7CisgICAgICAgIG1fUGFnZU1hcC5HZXROZXh0QXNzb2MocG9zLCBrZXksIHZhbHVlKTsKKyAgICAgICAgZGVsZXRlIChDRlhfUHRyQXJyYXkqKXZhbHVlOworICAgIH0KK30KK0NGWF9QdHJBcnJheSogQ1BERl9MaW5rTGlzdDo6R2V0UGFnZUxpbmtzKENQREZfUGFnZSogcFBhZ2UpCit7CisgICAgRlhfRFdPUkQgb2JqbnVtID0gcFBhZ2UtPm1fcEZvcm1EaWN0LT5HZXRPYmpOdW0oKTsKKyAgICBpZiAob2JqbnVtID09IDApIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENGWF9QdHJBcnJheSogcFBhZ2VMaW5rTGlzdCA9IE5VTEw7CisgICAgaWYgKCFtX1BhZ2VNYXAuTG9va3VwKChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpb2JqbnVtLCAoRlhfTFBWT0lEJilwUGFnZUxpbmtMaXN0KSkgeworICAgICAgICBwUGFnZUxpbmtMaXN0ID0gRlhfTkVXIENGWF9QdHJBcnJheTsKKyAgICAgICAgaWYgKHBQYWdlTGlua0xpc3QgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbV9QYWdlTWFwLlNldEF0KChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpb2JqbnVtLCBwUGFnZUxpbmtMaXN0KTsKKyAgICAgICAgTG9hZFBhZ2VMaW5rcyhwUGFnZSwgcFBhZ2VMaW5rTGlzdCk7CisgICAgfQorICAgIHJldHVybiBwUGFnZUxpbmtMaXN0OworfQoraW50IENQREZfTGlua0xpc3Q6OkNvdW50TGlua3MoQ1BERl9QYWdlKiBwUGFnZSkKK3sKKyAgICBDRlhfUHRyQXJyYXkqIHBQYWdlTGlua0xpc3QgPSBHZXRQYWdlTGlua3MocFBhZ2UpOworICAgIGlmIChwUGFnZUxpbmtMaXN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBwUGFnZUxpbmtMaXN0LT5HZXRTaXplKCk7Cit9CitDUERGX0xpbmsgQ1BERl9MaW5rTGlzdDo6R2V0TGluayhDUERGX1BhZ2UqIHBQYWdlLCBpbnQgaW5kZXgpCit7CisgICAgQ0ZYX1B0ckFycmF5KiBwUGFnZUxpbmtMaXN0ID0gR2V0UGFnZUxpbmtzKHBQYWdlKTsKKyAgICBpZiAocFBhZ2VMaW5rTGlzdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gKENQREZfRGljdGlvbmFyeSopcFBhZ2VMaW5rTGlzdC0+R2V0QXQoaW5kZXgpOworfQorQ1BERl9MaW5rIENQREZfTGlua0xpc3Q6OkdldExpbmtBdFBvaW50KENQREZfUGFnZSogcFBhZ2UsIEZYX0ZMT0FUIHBkZl94LCBGWF9GTE9BVCBwZGZfeSkKK3sKKyAgICBDRlhfUHRyQXJyYXkqIHBQYWdlTGlua0xpc3QgPSBHZXRQYWdlTGlua3MocFBhZ2UpOworICAgIGlmIChwUGFnZUxpbmtMaXN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGludCBzaXplID0gcFBhZ2VMaW5rTGlzdC0+R2V0U2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgeworICAgICAgICBDUERGX0xpbmsgTGluayA9IChDUERGX0RpY3Rpb25hcnkqKXBQYWdlTGlua0xpc3QtPkdldEF0KGkpOworICAgICAgICBDUERGX1JlY3QgcmVjdCA9IExpbmsuR2V0UmVjdCgpOworICAgICAgICBpZiAocmVjdC5Db250YWlucyhwZGZfeCwgcGRmX3kpKSB7CisgICAgICAgICAgICByZXR1cm4gTGluazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK3ZvaWQgQ1BERl9MaW5rTGlzdDo6TG9hZFBhZ2VMaW5rcyhDUERGX1BhZ2UqIHBQYWdlLCBDRlhfUHRyQXJyYXkqIHBMaXN0KQoreworICAgIENQREZfQXJyYXkqIHBBbm5vdExpc3QgPSBwUGFnZS0+bV9wRm9ybURpY3QtPkdldEFycmF5KCJBbm5vdHMiKTsKKyAgICBpZiAocEFubm90TGlzdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHBBbm5vdExpc3QtPkdldENvdW50KCk7IGkgKyspIHsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwQW5ub3QgPSBwQW5ub3RMaXN0LT5HZXREaWN0KGkpOworICAgICAgICBpZiAocEFubm90ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChwQW5ub3QtPkdldFN0cmluZygiU3VidHlwZSIpICE9ICJMaW5rIikgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgcExpc3QtPkFkZChwQW5ub3QpOworICAgIH0KK30KK0NQREZfUmVjdCBDUERGX0xpbms6OkdldFJlY3QoKQoreworICAgIHJldHVybiBtX3BEaWN0LT5HZXRSZWN0KCJSZWN0Iik7Cit9CitDUERGX0Rlc3QgQ1BERl9MaW5rOjpHZXREZXN0KENQREZfRG9jdW1lbnQqIHBEb2MpCit7CisgICAgQ1BERl9PYmplY3QqIHBEZXN0ID0gbV9wRGljdC0+R2V0RWxlbWVudFZhbHVlKCJEZXN0Iik7CisgICAgaWYgKHBEZXN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChwRGVzdC0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJJTkcgfHwgcERlc3QtPkdldFR5cGUoKSA9PSBQREZPQkpfTkFNRSkgeworICAgICAgICBDUERGX05hbWVUcmVlIG5hbWVfdHJlZShwRG9jLCBGWF9CU1RSQygiRGVzdHMiKSk7CisgICAgICAgIENGWF9CeXRlU3RyaW5nQyBuYW1lID0gcERlc3QtPkdldFN0cmluZygpOworICAgICAgICByZXR1cm4gbmFtZV90cmVlLkxvb2t1cE5hbWVkRGVzdChwRG9jLCBuYW1lKTsKKyAgICB9IGVsc2UgaWYgKHBEZXN0LT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgIHJldHVybiAoQ1BERl9BcnJheSopcERlc3Q7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorQ1BERl9BY3Rpb24gQ1BERl9MaW5rOjpHZXRBY3Rpb24oKQoreworICAgIHJldHVybiBtX3BEaWN0LT5HZXREaWN0KCJBIik7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmZG9jL2RvY19tZXRhZGF0YS5jcHAgYi9jb3JlL3NyYy9mcGRmZG9jL2RvY19tZXRhZGF0YS5jcHAKaW5kZXggZTNhYzllMy4uOGMwMDE1NyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmRvYy9kb2NfbWV0YWRhdGEuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX21ldGFkYXRhLmNwcApAQCAtMSwxNTIgKzEsMTUyIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mcGRmZG9jL2ZwZGZfZG9jLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfeG1sLmgiDQotdHlwZWRlZiBzdHJ1Y3QgX1BERkRPQ19NRVRBREFUQSB7DQotICAgIENQREZfRG9jdW1lbnQgKm1fcERvYzsNCi0gICAgQ1hNTF9FbGVtZW50ICptX3BYbWxFbG1udDsNCi0gICAgQ1hNTF9FbGVtZW50ICptX3BFbG1udFJkZjsNCi0gICAgQ0ZYX0NNYXBCeXRlU3RyaW5nVG9QdHIgKm1fcFN0cmluZ01hcDsNCi19IFBERkRPQ19NRVRBREFUQSwgKiBQREZET0NfTFBNRVRBREFUQTsNCi10eXBlZGVmIFBERkRPQ19NRVRBREFUQSBjb25zdCAqIFBERkRPQ19MUENNRVRBREFUQTsNCi1jb25zdCBGWF9MUENTVFIgZ3NfRlBERkRPQ19NZXRhZGF0YV9UaXRsZXNbXSA9IHsNCi0gICAgIlRpdGxlIiwgInRpdGxlIiwNCi0gICAgIlN1YmplY3QiLCAiZGVzY3JpcHRpb24iLA0KLSAgICAiQXV0aG9yIiwgImNyZWF0b3IiLA0KLSAgICAiS2V5d29yZHMiLCAiS2V5d29yZHMiLA0KLSAgICAiUHJvZHVjZXIiLCAiUHJvZHVjZXIiLA0KLSAgICAiQ3JlYXRvciIsICJDcmVhdG9yVG9vbCIsDQotICAgICJDcmVhdGlvbkRhdGUiLCAiQ3JlYXRlRGF0ZSIsDQotICAgICJNb2REYXRlIiwgIk1vZGlmeURhdGUiLA0KLSAgICAiTWV0YWRhdGFEYXRlIiwgIk1ldGFkYXRhRGF0ZSINCi19Ow0KLUNQREZfTWV0YWRhdGE6OkNQREZfTWV0YWRhdGEoKQ0KLXsNCi0gICAgbV9wRGF0YSA9IEZYX0FsbG9jKFBERkRPQ19NRVRBREFUQSwgMSk7DQotICAgIEZYU1lTX21lbXNldDMyKG1fcERhdGEsIDAsIHNpemVvZihQREZET0NfTUVUQURBVEEpKTsNCi0gICAgQ0ZYX0NNYXBCeXRlU3RyaW5nVG9QdHIgKiZwU3RyaW5nTWFwID0gKChQREZET0NfTFBNRVRBREFUQSltX3BEYXRhKS0+bV9wU3RyaW5nTWFwOw0KLSAgICBwU3RyaW5nTWFwID0gRlhfTkVXKENGWF9DTWFwQnl0ZVN0cmluZ1RvUHRyKTsNCi0gICAgaWYgKHBTdHJpbmdNYXAgIT0gTlVMTCkgew0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgYnN0cjsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTg7IGkgKz0gMikgew0KLSAgICAgICAgICAgIGJzdHIgPSBnc19GUERGRE9DX01ldGFkYXRhX1RpdGxlc1tpXTsNCi0gICAgICAgICAgICBwU3RyaW5nTWFwLT5BZGRWYWx1ZShic3RyLCAodm9pZCopZ3NfRlBERkRPQ19NZXRhZGF0YV9UaXRsZXNbaSArIDFdKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1DUERGX01ldGFkYXRhOjp+Q1BERl9NZXRhZGF0YSgpDQotew0KLSAgICBGWFNZU19hc3NlcnQobV9wRGF0YSAhPSBOVUxMKTsNCi0gICAgQ1hNTF9FbGVtZW50IComcCA9ICgoUERGRE9DX0xQTUVUQURBVEEpbV9wRGF0YSktPm1fcFhtbEVsbW50Ow0KLSAgICBpZiAocCkgew0KLSAgICAgICAgZGVsZXRlIHA7DQotICAgIH0NCi0gICAgQ0ZYX0NNYXBCeXRlU3RyaW5nVG9QdHIgKnBTdHJpbmdNYXAgPSAoKFBERkRPQ19MUE1FVEFEQVRBKW1fcERhdGEpLT5tX3BTdHJpbmdNYXA7DQotICAgIGlmIChwU3RyaW5nTWFwKSB7DQotICAgICAgICBwU3RyaW5nTWFwLT5SZW1vdmVBbGwoKTsNCi0gICAgICAgIEZYX0ZyZWUocFN0cmluZ01hcCk7DQotICAgIH0NCi0gICAgRlhfRnJlZShtX3BEYXRhKTsNCi19DQotdm9pZCBDUERGX01ldGFkYXRhOjpMb2FkRG9jKENQREZfRG9jdW1lbnQgKnBEb2MpDQotew0KLSAgICBGWFNZU19hc3NlcnQocERvYyAhPSBOVUxMKTsNCi0gICAgKChQREZET0NfTFBNRVRBREFUQSltX3BEYXRhKS0+bV9wRG9jID0gcERvYzsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5ICpwUm9vdCA9IHBEb2MtPkdldFJvb3QoKTsNCi0gICAgQ1BERl9TdHJlYW0gKnBTdHJlYW0gPSBwUm9vdC0+R2V0U3RyZWFtKEZYX0JTVFJDKCJNZXRhZGF0YSIpKTsNCi0gICAgaWYgKCFwU3RyZWFtKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9TdHJlYW1BY2MgYWNjOw0KLSAgICBhY2MuTG9hZEFsbERhdGEocFN0cmVhbSwgRkFMU0UpOw0KLSAgICBpbnQgc2l6ZSA9IGFjYy5HZXRTaXplKCk7DQotICAgIEZYX0xQQ0JZVEUgcEJ1ZiA9IGFjYy5HZXREYXRhKCk7DQotICAgIENYTUxfRWxlbWVudCAqJnBYbWxFbG1udCA9ICgoUERGRE9DX0xQTUVUQURBVEEpbV9wRGF0YSktPm1fcFhtbEVsbW50Ow0KLSAgICBwWG1sRWxtbnQgPSBDWE1MX0VsZW1lbnQ6OlBhcnNlKHBCdWYsIHNpemUpOw0KLSAgICBpZiAoIXBYbWxFbG1udCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENYTUxfRWxlbWVudCAqJnBFbG1udFJkZiA9ICgoUERGRE9DX0xQTUVUQURBVEEpbV9wRGF0YSktPm1fcEVsbW50UmRmOw0KLSAgICBpZiAocFhtbEVsbW50LT5HZXRUYWdOYW1lKCkgPT0gRlhfQlNUUkMoIlJERiIpKSB7DQotICAgICAgICBwRWxtbnRSZGYgPSBwWG1sRWxtbnQ7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBwRWxtbnRSZGYgPSBwWG1sRWxtbnQtPkdldEVsZW1lbnQoTlVMTCwgRlhfQlNUUkMoIlJERiIpKTsNCi0gICAgfQ0KLX0NCi1GWF9JTlQzMiBDUERGX01ldGFkYXRhOjpHZXRTdHJpbmcoRlhfQlNUUiBic0l0ZW0sIENGWF9XaWRlU3RyaW5nICZ3c1N0cikNCi17DQotICAgIGlmICghKChQREZET0NfTFBNRVRBREFUQSltX3BEYXRhKS0+bV9wWG1sRWxtbnQpIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBpZiAoISgoUERGRE9DX0xQTUVUQURBVEEpbV9wRGF0YSktPm1fcFN0cmluZ01hcCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIHZvaWQgKnN6VGFnOw0KLSAgICBpZiAoISgoUERGRE9DX0xQTUVUQURBVEEpbV9wRGF0YSktPm1fcFN0cmluZ01hcC0+TG9va3VwKGJzSXRlbSwgc3pUYWcpKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgYnNUYWcgPSAoRlhfTFBDU1RSKXN6VGFnOw0KLSAgICB3c1N0ciA9IEwiIjsNCi0gICAgQ1hNTF9FbGVtZW50ICpwRWxtbnRSZGYgPSAoKFBERkRPQ19MUE1FVEFEQVRBKW1fcERhdGEpLT5tX3BFbG1udFJkZjsNCi0gICAgaWYgKCFwRWxtbnRSZGYpIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBpbnQgbkNoaWxkID0gcEVsbW50UmRmLT5Db3VudENoaWxkcmVuKCk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkNoaWxkOyBpKyspIHsNCi0gICAgICAgIENYTUxfRWxlbWVudCAqcFRhZyA9IHBFbG1udFJkZi0+R2V0RWxlbWVudChOVUxMLCBGWF9CU1RSQygiRGVzY3JpcHRpb24iKSwgaSk7DQotICAgICAgICBpZiAoIXBUYWcpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChic0l0ZW0gPT0gRlhfQlNUUkMoIlRpdGxlIikgfHwgYnNJdGVtID09IEZYX0JTVFJDKCJTdWJqZWN0IikpIHsNCi0gICAgICAgICAgICBDWE1MX0VsZW1lbnQgKnBFbG1udCA9IHBUYWctPkdldEVsZW1lbnQoTlVMTCwgYnNUYWcpOw0KLSAgICAgICAgICAgIGlmICghcEVsbW50KSB7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwRWxtbnQgPSBwRWxtbnQtPkdldEVsZW1lbnQoTlVMTCwgRlhfQlNUUkMoIkFsdCIpKTsNCi0gICAgICAgICAgICBpZiAoIXBFbG1udCkgew0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcEVsbW50ID0gcEVsbW50LT5HZXRFbGVtZW50KE5VTEwsIEZYX0JTVFJDKCJsaSIpKTsNCi0gICAgICAgICAgICBpZiAoIXBFbG1udCkgew0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgd3NTdHIgPSBwRWxtbnQtPkdldENvbnRlbnQoMCk7DQotICAgICAgICAgICAgcmV0dXJuIHdzU3RyLkdldExlbmd0aCgpOw0KLSAgICAgICAgfSBlbHNlIGlmIChic0l0ZW0gPT0gRlhfQlNUUkMoIkF1dGhvciIpKSB7DQotICAgICAgICAgICAgQ1hNTF9FbGVtZW50ICpwRWxtbnQgPSBwVGFnLT5HZXRFbGVtZW50KE5VTEwsIGJzVGFnKTsNCi0gICAgICAgICAgICBpZiAoIXBFbG1udCkgew0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcEVsbW50ID0gcEVsbW50LT5HZXRFbGVtZW50KE5VTEwsIEZYX0JTVFJDKCJTZXEiKSk7DQotICAgICAgICAgICAgaWYgKCFwRWxtbnQpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHBFbG1udCA9IHBFbG1udC0+R2V0RWxlbWVudChOVUxMLCBGWF9CU1RSQygibGkiKSk7DQotICAgICAgICAgICAgaWYgKCFwRWxtbnQpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHdzU3RyID0gcEVsbW50LT5HZXRDb250ZW50KDApOw0KLSAgICAgICAgICAgIHJldHVybiB3c1N0ci5HZXRMZW5ndGgoKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgQ1hNTF9FbGVtZW50ICpwRWxtbnQgPSBwVGFnLT5HZXRFbGVtZW50KE5VTEwsIGJzVGFnKTsNCi0gICAgICAgICAgICBpZiAoIXBFbG1udCkgew0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgd3NTdHIgPSBwRWxtbnQtPkdldENvbnRlbnQoMCk7DQotICAgICAgICAgICAgcmV0dXJuIHdzU3RyLkdldExlbmd0aCgpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiAtMTsNCi19DQotQ1hNTF9FbGVtZW50KiBDUERGX01ldGFkYXRhOjpHZXRSb290KCkgY29uc3QNCi17DQotICAgIHJldHVybiAoKFBERkRPQ19MUE1FVEFEQVRBKW1fcERhdGEpLT5tX3BYbWxFbG1udDsNCi19DQotQ1hNTF9FbGVtZW50KiBDUERGX01ldGFkYXRhOjpHZXRSREYoKSBjb25zdA0KLXsNCi0gICAgcmV0dXJuICgoUERGRE9DX0xQTUVUQURBVEEpbV9wRGF0YSktPm1fcEVsbW50UmRmOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mcGRmZG9jL2ZwZGZfZG9jLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGNydC9meF94bWwuaCIKK3R5cGVkZWYgc3RydWN0IF9QREZET0NfTUVUQURBVEEgeworICAgIENQREZfRG9jdW1lbnQgKm1fcERvYzsKKyAgICBDWE1MX0VsZW1lbnQgKm1fcFhtbEVsbW50OworICAgIENYTUxfRWxlbWVudCAqbV9wRWxtbnRSZGY7CisgICAgQ0ZYX0NNYXBCeXRlU3RyaW5nVG9QdHIgKm1fcFN0cmluZ01hcDsKK30gUERGRE9DX01FVEFEQVRBLCAqIFBERkRPQ19MUE1FVEFEQVRBOwordHlwZWRlZiBQREZET0NfTUVUQURBVEEgY29uc3QgKiBQREZET0NfTFBDTUVUQURBVEE7Citjb25zdCBGWF9MUENTVFIgZ3NfRlBERkRPQ19NZXRhZGF0YV9UaXRsZXNbXSA9IHsKKyAgICAiVGl0bGUiLCAidGl0bGUiLAorICAgICJTdWJqZWN0IiwgImRlc2NyaXB0aW9uIiwKKyAgICAiQXV0aG9yIiwgImNyZWF0b3IiLAorICAgICJLZXl3b3JkcyIsICJLZXl3b3JkcyIsCisgICAgIlByb2R1Y2VyIiwgIlByb2R1Y2VyIiwKKyAgICAiQ3JlYXRvciIsICJDcmVhdG9yVG9vbCIsCisgICAgIkNyZWF0aW9uRGF0ZSIsICJDcmVhdGVEYXRlIiwKKyAgICAiTW9kRGF0ZSIsICJNb2RpZnlEYXRlIiwKKyAgICAiTWV0YWRhdGFEYXRlIiwgIk1ldGFkYXRhRGF0ZSIKK307CitDUERGX01ldGFkYXRhOjpDUERGX01ldGFkYXRhKCkKK3sKKyAgICBtX3BEYXRhID0gRlhfQWxsb2MoUERGRE9DX01FVEFEQVRBLCAxKTsKKyAgICBGWFNZU19tZW1zZXQzMihtX3BEYXRhLCAwLCBzaXplb2YoUERGRE9DX01FVEFEQVRBKSk7CisgICAgQ0ZYX0NNYXBCeXRlU3RyaW5nVG9QdHIgKiZwU3RyaW5nTWFwID0gKChQREZET0NfTFBNRVRBREFUQSltX3BEYXRhKS0+bV9wU3RyaW5nTWFwOworICAgIHBTdHJpbmdNYXAgPSBGWF9ORVcoQ0ZYX0NNYXBCeXRlU3RyaW5nVG9QdHIpOworICAgIGlmIChwU3RyaW5nTWFwICE9IE5VTEwpIHsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgYnN0cjsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxODsgaSArPSAyKSB7CisgICAgICAgICAgICBic3RyID0gZ3NfRlBERkRPQ19NZXRhZGF0YV9UaXRsZXNbaV07CisgICAgICAgICAgICBwU3RyaW5nTWFwLT5BZGRWYWx1ZShic3RyLCAodm9pZCopZ3NfRlBERkRPQ19NZXRhZGF0YV9UaXRsZXNbaSArIDFdKTsKKyAgICAgICAgfQorICAgIH0KK30KK0NQREZfTWV0YWRhdGE6On5DUERGX01ldGFkYXRhKCkKK3sKKyAgICBGWFNZU19hc3NlcnQobV9wRGF0YSAhPSBOVUxMKTsKKyAgICBDWE1MX0VsZW1lbnQgKiZwID0gKChQREZET0NfTFBNRVRBREFUQSltX3BEYXRhKS0+bV9wWG1sRWxtbnQ7CisgICAgaWYgKHApIHsKKyAgICAgICAgZGVsZXRlIHA7CisgICAgfQorICAgIENGWF9DTWFwQnl0ZVN0cmluZ1RvUHRyICpwU3RyaW5nTWFwID0gKChQREZET0NfTFBNRVRBREFUQSltX3BEYXRhKS0+bV9wU3RyaW5nTWFwOworICAgIGlmIChwU3RyaW5nTWFwKSB7CisgICAgICAgIHBTdHJpbmdNYXAtPlJlbW92ZUFsbCgpOworICAgICAgICBGWF9GcmVlKHBTdHJpbmdNYXApOworICAgIH0KKyAgICBGWF9GcmVlKG1fcERhdGEpOworfQordm9pZCBDUERGX01ldGFkYXRhOjpMb2FkRG9jKENQREZfRG9jdW1lbnQgKnBEb2MpCit7CisgICAgRlhTWVNfYXNzZXJ0KHBEb2MgIT0gTlVMTCk7CisgICAgKChQREZET0NfTFBNRVRBREFUQSltX3BEYXRhKS0+bV9wRG9jID0gcERvYzsKKyAgICBDUERGX0RpY3Rpb25hcnkgKnBSb290ID0gcERvYy0+R2V0Um9vdCgpOworICAgIENQREZfU3RyZWFtICpwU3RyZWFtID0gcFJvb3QtPkdldFN0cmVhbShGWF9CU1RSQygiTWV0YWRhdGEiKSk7CisgICAgaWYgKCFwU3RyZWFtKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1BERl9TdHJlYW1BY2MgYWNjOworICAgIGFjYy5Mb2FkQWxsRGF0YShwU3RyZWFtLCBGQUxTRSk7CisgICAgaW50IHNpemUgPSBhY2MuR2V0U2l6ZSgpOworICAgIEZYX0xQQ0JZVEUgcEJ1ZiA9IGFjYy5HZXREYXRhKCk7CisgICAgQ1hNTF9FbGVtZW50IComcFhtbEVsbW50ID0gKChQREZET0NfTFBNRVRBREFUQSltX3BEYXRhKS0+bV9wWG1sRWxtbnQ7CisgICAgcFhtbEVsbW50ID0gQ1hNTF9FbGVtZW50OjpQYXJzZShwQnVmLCBzaXplKTsKKyAgICBpZiAoIXBYbWxFbG1udCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENYTUxfRWxlbWVudCAqJnBFbG1udFJkZiA9ICgoUERGRE9DX0xQTUVUQURBVEEpbV9wRGF0YSktPm1fcEVsbW50UmRmOworICAgIGlmIChwWG1sRWxtbnQtPkdldFRhZ05hbWUoKSA9PSBGWF9CU1RSQygiUkRGIikpIHsKKyAgICAgICAgcEVsbW50UmRmID0gcFhtbEVsbW50OworICAgIH0gZWxzZSB7CisgICAgICAgIHBFbG1udFJkZiA9IHBYbWxFbG1udC0+R2V0RWxlbWVudChOVUxMLCBGWF9CU1RSQygiUkRGIikpOworICAgIH0KK30KK0ZYX0lOVDMyIENQREZfTWV0YWRhdGE6OkdldFN0cmluZyhGWF9CU1RSIGJzSXRlbSwgQ0ZYX1dpZGVTdHJpbmcgJndzU3RyKQoreworICAgIGlmICghKChQREZET0NfTFBNRVRBREFUQSltX3BEYXRhKS0+bV9wWG1sRWxtbnQpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAoISgoUERGRE9DX0xQTUVUQURBVEEpbV9wRGF0YSktPm1fcFN0cmluZ01hcCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHZvaWQgKnN6VGFnOworICAgIGlmICghKChQREZET0NfTFBNRVRBREFUQSltX3BEYXRhKS0+bV9wU3RyaW5nTWFwLT5Mb29rdXAoYnNJdGVtLCBzelRhZykpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBDRlhfQnl0ZVN0cmluZyBic1RhZyA9IChGWF9MUENTVFIpc3pUYWc7CisgICAgd3NTdHIgPSBMIiI7CisgICAgQ1hNTF9FbGVtZW50ICpwRWxtbnRSZGYgPSAoKFBERkRPQ19MUE1FVEFEQVRBKW1fcERhdGEpLT5tX3BFbG1udFJkZjsKKyAgICBpZiAoIXBFbG1udFJkZikgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGludCBuQ2hpbGQgPSBwRWxtbnRSZGYtPkNvdW50Q2hpbGRyZW4oKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5DaGlsZDsgaSsrKSB7CisgICAgICAgIENYTUxfRWxlbWVudCAqcFRhZyA9IHBFbG1udFJkZi0+R2V0RWxlbWVudChOVUxMLCBGWF9CU1RSQygiRGVzY3JpcHRpb24iKSwgaSk7CisgICAgICAgIGlmICghcFRhZykgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJzSXRlbSA9PSBGWF9CU1RSQygiVGl0bGUiKSB8fCBic0l0ZW0gPT0gRlhfQlNUUkMoIlN1YmplY3QiKSkgeworICAgICAgICAgICAgQ1hNTF9FbGVtZW50ICpwRWxtbnQgPSBwVGFnLT5HZXRFbGVtZW50KE5VTEwsIGJzVGFnKTsKKyAgICAgICAgICAgIGlmICghcEVsbW50KSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwRWxtbnQgPSBwRWxtbnQtPkdldEVsZW1lbnQoTlVMTCwgRlhfQlNUUkMoIkFsdCIpKTsKKyAgICAgICAgICAgIGlmICghcEVsbW50KSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwRWxtbnQgPSBwRWxtbnQtPkdldEVsZW1lbnQoTlVMTCwgRlhfQlNUUkMoImxpIikpOworICAgICAgICAgICAgaWYgKCFwRWxtbnQpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdzU3RyID0gcEVsbW50LT5HZXRDb250ZW50KDApOworICAgICAgICAgICAgcmV0dXJuIHdzU3RyLkdldExlbmd0aCgpOworICAgICAgICB9IGVsc2UgaWYgKGJzSXRlbSA9PSBGWF9CU1RSQygiQXV0aG9yIikpIHsKKyAgICAgICAgICAgIENYTUxfRWxlbWVudCAqcEVsbW50ID0gcFRhZy0+R2V0RWxlbWVudChOVUxMLCBic1RhZyk7CisgICAgICAgICAgICBpZiAoIXBFbG1udCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcEVsbW50ID0gcEVsbW50LT5HZXRFbGVtZW50KE5VTEwsIEZYX0JTVFJDKCJTZXEiKSk7CisgICAgICAgICAgICBpZiAoIXBFbG1udCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcEVsbW50ID0gcEVsbW50LT5HZXRFbGVtZW50KE5VTEwsIEZYX0JTVFJDKCJsaSIpKTsKKyAgICAgICAgICAgIGlmICghcEVsbW50KSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3c1N0ciA9IHBFbG1udC0+R2V0Q29udGVudCgwKTsKKyAgICAgICAgICAgIHJldHVybiB3c1N0ci5HZXRMZW5ndGgoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIENYTUxfRWxlbWVudCAqcEVsbW50ID0gcFRhZy0+R2V0RWxlbWVudChOVUxMLCBic1RhZyk7CisgICAgICAgICAgICBpZiAoIXBFbG1udCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd3NTdHIgPSBwRWxtbnQtPkdldENvbnRlbnQoMCk7CisgICAgICAgICAgICByZXR1cm4gd3NTdHIuR2V0TGVuZ3RoKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIC0xOworfQorQ1hNTF9FbGVtZW50KiBDUERGX01ldGFkYXRhOjpHZXRSb290KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKChQREZET0NfTFBNRVRBREFUQSltX3BEYXRhKS0+bV9wWG1sRWxtbnQ7Cit9CitDWE1MX0VsZW1lbnQqIENQREZfTWV0YWRhdGE6OkdldFJERigpIGNvbnN0Cit7CisgICAgcmV0dXJuICgoUERGRE9DX0xQTUVUQURBVEEpbV9wRGF0YSktPm1fcEVsbW50UmRmOworfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZmRvYy9kb2Nfb2NnLmNwcCBiL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX29jZy5jcHAKaW5kZXggMzliOGUzNy4uMGNhOWZjMCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmRvYy9kb2Nfb2NnLmNwcAorKysgYi9jb3JlL3NyYy9mcGRmZG9jL2RvY19vY2cuY3BwCkBAIC0xLDMwMCArMSwzMDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZkb2MvZnBkZl9kb2MuaCINCi1zdGF0aWMgRlhfSU5UMzIgRlBERkRPQ19PQ0dfRmluZEdyb3VwKGNvbnN0IENQREZfT2JqZWN0ICpwT2JqZWN0LCBjb25zdCBDUERGX0RpY3Rpb25hcnkgKnBHcm91cERpY3QpDQotew0KLSAgICBpZiAocE9iamVjdCA9PSBOVUxMIHx8IHBHcm91cERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIEZYX0lOVDMyIGlUeXBlID0gcE9iamVjdC0+R2V0VHlwZSgpOw0KLSAgICBpZiAoaVR5cGUgPT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICBGWF9EV09SRCBkd0NvdW50ID0gKChDUERGX0FycmF5KilwT2JqZWN0KS0+R2V0Q291bnQoKTsNCi0gICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBkd0NvdW50OyBpKyspIHsNCi0gICAgICAgICAgICBpZiAoKChDUERGX0FycmF5KilwT2JqZWN0KS0+R2V0RGljdChpKSA9PSBwR3JvdXBEaWN0KSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBpZiAocE9iamVjdC0+R2V0RGljdCgpID09IHBHcm91cERpY3QpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIHJldHVybiAtMTsNCi19DQotc3RhdGljIEZYX0JPT0wgRlBERkRPQ19PQ0dfSGFzSW50ZW50KGNvbnN0IENQREZfRGljdGlvbmFyeSAqcERpY3QsIEZYX0JTVFIgY3NFbGVtZW50LCBGWF9CU1RSIGNzRGVmID0gRlhfQlNUUkMoIiIpKQ0KLXsNCi0gICAgRlhTWVNfYXNzZXJ0KHBEaWN0ICE9IE5VTEwpOw0KLSAgICBDUERGX09iamVjdCAqcEludGVudCA9IHBEaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIkludGVudCIpKTsNCi0gICAgaWYgKHBJbnRlbnQgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIGNzRWxlbWVudCA9PSBjc0RlZjsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVN0cmluZyBic0ludGVudDsNCi0gICAgaWYgKHBJbnRlbnQtPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgIEZYX0RXT1JEIGR3Q291bnQgPSAoKENQREZfQXJyYXkqKXBJbnRlbnQpLT5HZXRDb3VudCgpOw0KLSAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IGR3Q291bnQ7IGkrKykgew0KLSAgICAgICAgICAgIGJzSW50ZW50ID0gKChDUERGX0FycmF5KilwSW50ZW50KS0+R2V0U3RyaW5nKGkpOw0KLSAgICAgICAgICAgIGlmIChic0ludGVudCA9PSBGWF9CU1RSQygiQWxsIikgfHwgYnNJbnRlbnQgPT0gY3NFbGVtZW50KSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBic0ludGVudCA9IHBJbnRlbnQtPkdldFN0cmluZygpOw0KLSAgICByZXR1cm4gYnNJbnRlbnQgPT0gRlhfQlNUUkMoIkFsbCIpIHx8IGJzSW50ZW50ID09IGNzRWxlbWVudDsNCi19DQotc3RhdGljIENQREZfRGljdGlvbmFyeSogRlBERkRPQ19PQ0dfR2V0Q29uZmlnKENQREZfRG9jdW1lbnQgKnBEb2MsIGNvbnN0IENQREZfRGljdGlvbmFyeSAqcE9DR0RpY3QsIEZYX0JTVFIgYnNTdGF0ZSkNCi17DQotICAgIEZYU1lTX2Fzc2VydChwRG9jICYmIHBPQ0dEaWN0KTsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5ICpwT0NQcm9wZXJ0aWVzID0gcERvYy0+R2V0Um9vdCgpLT5HZXREaWN0KEZYX0JTVFJDKCJPQ1Byb3BlcnRpZXMiKSk7DQotICAgIGlmICghcE9DUHJvcGVydGllcykgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9BcnJheSAqcE9DR3MgPSBwT0NQcm9wZXJ0aWVzLT5HZXRBcnJheShGWF9CU1RSQygiT0NHcyIpKTsNCi0gICAgaWYgKCFwT0NHcykgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKEZQREZET0NfT0NHX0ZpbmRHcm91cChwT0NHcywgcE9DR0RpY3QpIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5ICpwQ29uZmlnID0gcE9DUHJvcGVydGllcy0+R2V0RGljdChGWF9CU1RSQygiRCIpKTsNCi0gICAgQ1BERl9BcnJheSAqcENvbmZpZ3MgPSBwT0NQcm9wZXJ0aWVzLT5HZXRBcnJheShGWF9CU1RSQygiQ29uZmlncyIpKTsNCi0gICAgaWYgKHBDb25maWdzKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkgKnBGaW5kOw0KLSAgICAgICAgRlhfSU5UMzIgaUNvdW50ID0gcENvbmZpZ3MtPkdldENvdW50KCk7DQotICAgICAgICBmb3IgKEZYX0lOVDMyIGkgPSAwOyBpIDwgaUNvdW50OyBpICsrKSB7DQotICAgICAgICAgICAgcEZpbmQgPSBwQ29uZmlncy0+R2V0RGljdChpKTsNCi0gICAgICAgICAgICBpZiAoIXBGaW5kKSB7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoIUZQREZET0NfT0NHX0hhc0ludGVudChwRmluZCwgRlhfQlNUUkMoIlZpZXciKSwgRlhfQlNUUkMoIlZpZXciKSkpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHBDb25maWcgPSBwRmluZDsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gcENvbmZpZzsNCi19DQotc3RhdGljIENGWF9CeXRlU3RyaW5nIEZQREZET0NfT0NHX0dldFVzYWdlVHlwZVN0cmluZyhDUERGX09DQ29udGV4dDo6VXNhZ2VUeXBlIGVUeXBlKQ0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgY3NTdGF0ZSA9IEZYX0JTVFJDKCJWaWV3Iik7DQotICAgIGlmIChlVHlwZSA9PSBDUERGX09DQ29udGV4dDo6RGVzaWduKSB7DQotICAgICAgICBjc1N0YXRlID0gRlhfQlNUUkMoIkRlc2lnbiIpOw0KLSAgICB9IGVsc2UgaWYgKGVUeXBlID09IENQREZfT0NDb250ZXh0OjpQcmludCkgew0KLSAgICAgICAgY3NTdGF0ZSA9IEZYX0JTVFJDKCJQcmludCIpOw0KLSAgICB9IGVsc2UgaWYgKGVUeXBlID09IENQREZfT0NDb250ZXh0OjpFeHBvcnQpIHsNCi0gICAgICAgIGNzU3RhdGUgPSBGWF9CU1RSQygiRXhwb3J0Iik7DQotICAgIH0NCi0gICAgcmV0dXJuIGNzU3RhdGU7DQotfQ0KLUNQREZfT0NDb250ZXh0OjpDUERGX09DQ29udGV4dChDUERGX0RvY3VtZW50ICpwRG9jLCBVc2FnZVR5cGUgZVVzYWdlVHlwZSkNCi17DQotICAgIEZYU1lTX2Fzc2VydChwRG9jICE9IE5VTEwpOw0KLSAgICBtX3BEb2N1bWVudCA9IHBEb2M7DQotICAgIG1fZVVzYWdlVHlwZSA9IGVVc2FnZVR5cGU7DQotfQ0KLUNQREZfT0NDb250ZXh0Ojp+Q1BERl9PQ0NvbnRleHQoKQ0KLXsNCi0gICAgbV9PQ0dTdGF0ZXMuUmVtb3ZlQWxsKCk7DQotfQ0KLUZYX0JPT0wgQ1BERl9PQ0NvbnRleHQ6OkxvYWRPQ0dTdGF0ZUZyb21Db25maWcoRlhfQlNUUiBjc0NvbmZpZywgY29uc3QgQ1BERl9EaWN0aW9uYXJ5ICpwT0NHRGljdCwgRlhfQk9PTCAmYlZhbGlkQ29uZmlnKSBjb25zdA0KLXsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5ICpwQ29uZmlnID0gRlBERkRPQ19PQ0dfR2V0Q29uZmlnKG1fcERvY3VtZW50LCBwT0NHRGljdCwgY3NDb25maWcpOw0KLSAgICBpZiAoIXBDb25maWcpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIGJWYWxpZENvbmZpZyA9IFRSVUU7DQotICAgIEZYX0JPT0wgYlN0YXRlID0gcENvbmZpZy0+R2V0U3RyaW5nKEZYX0JTVFJDKCJCYXNlU3RhdGUiKSwgRlhfQlNUUkMoIk9OIikpICE9IEZYX0JTVFJDKCJPRkYiKTsNCi0gICAgQ1BERl9BcnJheSAqcEFycmF5ID0gcENvbmZpZy0+R2V0QXJyYXkoRlhfQlNUUkMoIk9OIikpOw0KLSAgICBpZiAocEFycmF5KSB7DQotICAgICAgICBpZiAoRlBERkRPQ19PQ0dfRmluZEdyb3VwKHBBcnJheSwgcE9DR0RpY3QpID49IDApIHsNCi0gICAgICAgICAgICBiU3RhdGUgPSBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHBBcnJheSA9IHBDb25maWctPkdldEFycmF5KEZYX0JTVFJDKCJPRkYiKSk7DQotICAgIGlmIChwQXJyYXkpIHsNCi0gICAgICAgIGlmIChGUERGRE9DX09DR19GaW5kR3JvdXAocEFycmF5LCBwT0NHRGljdCkgPj0gMCkgew0KLSAgICAgICAgICAgIGJTdGF0ZSA9IEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHBBcnJheSA9IHBDb25maWctPkdldEFycmF5KEZYX0JTVFJDKCJBUyIpKTsNCi0gICAgaWYgKHBBcnJheSkgew0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3NGaW5kID0gY3NDb25maWcgKyBGWF9CU1RSQygiU3RhdGUiKTsNCi0gICAgICAgIEZYX0lOVDMyIGlDb3VudCA9IHBBcnJheS0+R2V0Q291bnQoKTsNCi0gICAgICAgIGZvciAoRlhfSU5UMzIgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspIHsNCi0gICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkgKnBVc2FnZSA9IHBBcnJheS0+R2V0RGljdChpKTsNCi0gICAgICAgICAgICBpZiAoIXBVc2FnZSkgew0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKHBVc2FnZS0+R2V0U3RyaW5nKEZYX0JTVFJDKCJFdmVudCIpLCBGWF9CU1RSQygiVmlldyIpKSAhPSBjc0NvbmZpZykgew0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgQ1BERl9BcnJheSAqcE9DR3MgPSBwVXNhZ2UtPkdldEFycmF5KEZYX0JTVFJDKCJPQ0dzIikpOw0KLSAgICAgICAgICAgIGlmICghcE9DR3MpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChGUERGRE9DX09DR19GaW5kR3JvdXAocE9DR3MsIHBPQ0dEaWN0KSA8IDApIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSAqcFN0YXRlID0gcFVzYWdlLT5HZXREaWN0KGNzQ29uZmlnKTsNCi0gICAgICAgICAgICBpZiAoIXBTdGF0ZSkgew0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgYlN0YXRlID0gcFN0YXRlLT5HZXRTdHJpbmcoY3NGaW5kKSAhPSBGWF9CU1RSQygiT0ZGIik7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIGJTdGF0ZTsNCi19DQotRlhfQk9PTCBDUERGX09DQ29udGV4dDo6TG9hZE9DR1N0YXRlKGNvbnN0IENQREZfRGljdGlvbmFyeSAqcE9DR0RpY3QpIGNvbnN0DQotew0KLSAgICBpZiAoIUZQREZET0NfT0NHX0hhc0ludGVudChwT0NHRGljdCwgRlhfQlNUUkMoIlZpZXciKSwgRlhfQlNUUkMoIlZpZXciKSkpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIGNzU3RhdGUgPSBGUERGRE9DX09DR19HZXRVc2FnZVR5cGVTdHJpbmcobV9lVXNhZ2VUeXBlKTsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5ICpwVXNhZ2UgPSBwT0NHRGljdC0+R2V0RGljdChGWF9CU1RSQygiVXNhZ2UiKSk7DQotICAgIGlmIChwVXNhZ2UpIHsNCi0gICAgICAgIENQREZfRGljdGlvbmFyeSAqcFN0YXRlID0gcFVzYWdlLT5HZXREaWN0KGNzU3RhdGUpOw0KLSAgICAgICAgaWYgKHBTdGF0ZSkgew0KLSAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGNzRmluZCA9IGNzU3RhdGUgKyBGWF9CU1RSQygiU3RhdGUiKTsNCi0gICAgICAgICAgICBpZiAocFN0YXRlLT5LZXlFeGlzdChjc0ZpbmQpKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBwU3RhdGUtPkdldFN0cmluZyhjc0ZpbmQpICE9IEZYX0JTVFJDKCJPRkYiKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAoY3NTdGF0ZSAhPSBGWF9CU1RSQygiVmlldyIpKSB7DQotICAgICAgICAgICAgcFN0YXRlID0gcFVzYWdlLT5HZXREaWN0KEZYX0JTVFJDKCJWaWV3IikpOw0KLSAgICAgICAgICAgIGlmIChwU3RhdGUgJiYgcFN0YXRlLT5LZXlFeGlzdChGWF9CU1RSQygiVmlld1N0YXRlIikpKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBwU3RhdGUtPkdldFN0cmluZyhGWF9CU1RSQygiVmlld1N0YXRlIikpICE9IEZYX0JTVFJDKCJPRkYiKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhfQk9PTCBiRGVmVmFsaWQgPSBGQUxTRTsNCi0gICAgcmV0dXJuIExvYWRPQ0dTdGF0ZUZyb21Db25maWcoY3NTdGF0ZSwgcE9DR0RpY3QsIGJEZWZWYWxpZCk7DQotfQ0KLUZYX0JPT0wgQ1BERl9PQ0NvbnRleHQ6OkdldE9DR1Zpc2libGUoY29uc3QgQ1BERl9EaWN0aW9uYXJ5ICpwT0NHRGljdCkNCi17DQotICAgIGlmICghcE9DR0RpY3QpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWF9MUFZPSUQgYlN0YXRlID0gTlVMTDsNCi0gICAgaWYgKG1fT0NHU3RhdGVzLkxvb2t1cChwT0NHRGljdCwgYlN0YXRlKSkgew0KLSAgICAgICAgcmV0dXJuIChGWF9VSU5UUFRSKWJTdGF0ZSAhPSAwOw0KLSAgICB9DQotICAgIGJTdGF0ZSA9IChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpTG9hZE9DR1N0YXRlKHBPQ0dEaWN0KTsNCi0gICAgbV9PQ0dTdGF0ZXMuU2V0QXQocE9DR0RpY3QsIGJTdGF0ZSk7DQotICAgIHJldHVybiAoRlhfVUlOVFBUUiliU3RhdGUgIT0gMDsNCi19DQotRlhfQk9PTCBDUERGX09DQ29udGV4dDo6R2V0T0NHVkUoQ1BERl9BcnJheSAqcEV4cHJlc3Npb24sIEZYX0JPT0wgYkZyb21Db25maWcsIGludCBuTGV2ZWwpDQotew0KLSAgICBpZiAobkxldmVsID4gMzIpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAocEV4cHJlc3Npb24gPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYX0lOVDMyIGlDb3VudCA9IHBFeHByZXNzaW9uLT5HZXRDb3VudCgpOw0KLSAgICBDUERGX09iamVjdCAqcE9DR09iajsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgY3NPcGVyYXRvciA9IHBFeHByZXNzaW9uLT5HZXRTdHJpbmcoMCk7DQotICAgIGlmIChjc09wZXJhdG9yID09IEZYX0JTVFJDKCJOb3QiKSkgew0KLSAgICAgICAgcE9DR09iaiA9IHBFeHByZXNzaW9uLT5HZXRFbGVtZW50VmFsdWUoMSk7DQotICAgICAgICBpZiAocE9DR09iaiA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBPQ0dPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfRElDVElPTkFSWSkgew0KLSAgICAgICAgICAgIHJldHVybiAhKGJGcm9tQ29uZmlnID8gTG9hZE9DR1N0YXRlKChDUERGX0RpY3Rpb25hcnkqKXBPQ0dPYmopIDogR2V0T0NHVmlzaWJsZSgoQ1BERl9EaWN0aW9uYXJ5KilwT0NHT2JqKSk7DQotICAgICAgICB9IGVsc2UgaWYgKHBPQ0dPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgICAgICByZXR1cm4gIUdldE9DR1ZFKChDUERGX0FycmF5KilwT0NHT2JqLCBiRnJvbUNvbmZpZywgbkxldmVsICsgMSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoY3NPcGVyYXRvciA9PSBGWF9CU1RSQygiT3IiKSB8fCBjc09wZXJhdG9yID09IEZYX0JTVFJDKCJBbmQiKSkgew0KLSAgICAgICAgRlhfQk9PTCBiVmFsdWUgPSBGQUxTRTsNCi0gICAgICAgIGZvciAoRlhfSU5UMzIgaSA9IDE7IGkgPCBpQ291bnQ7IGkgKyspIHsNCi0gICAgICAgICAgICBwT0NHT2JqID0gcEV4cHJlc3Npb24tPkdldEVsZW1lbnRWYWx1ZSgxKTsNCi0gICAgICAgICAgICBpZiAocE9DR09iaiA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9CT09MIGJJdGVtID0gRkFMU0U7DQotICAgICAgICAgICAgaWYgKHBPQ0dPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfRElDVElPTkFSWSkgew0KLSAgICAgICAgICAgICAgICBiSXRlbSA9IGJGcm9tQ29uZmlnID8gTG9hZE9DR1N0YXRlKChDUERGX0RpY3Rpb25hcnkqKXBPQ0dPYmopIDogR2V0T0NHVmlzaWJsZSgoQ1BERl9EaWN0aW9uYXJ5KilwT0NHT2JqKTsNCi0gICAgICAgICAgICB9IGVsc2UgaWYgKHBPQ0dPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgICAgICAgICAgYkl0ZW0gPSBHZXRPQ0dWRSgoQ1BERl9BcnJheSopcE9DR09iaiwgYkZyb21Db25maWcsIG5MZXZlbCArIDEpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoaSA9PSAxKSB7DQotICAgICAgICAgICAgICAgIGJWYWx1ZSA9IGJJdGVtOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGlmIChjc09wZXJhdG9yID09IEZYX0JTVFJDKCJPciIpKSB7DQotICAgICAgICAgICAgICAgICAgICBiVmFsdWUgPSBiVmFsdWUgfHwgYkl0ZW07DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBiVmFsdWUgPSBiVmFsdWUgJiYgYkl0ZW07DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gYlZhbHVlOw0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotRlhfQk9PTCBDUERGX09DQ29udGV4dDo6TG9hZE9DTURTdGF0ZShjb25zdCBDUERGX0RpY3Rpb25hcnkgKnBPQ01ERGljdCwgRlhfQk9PTCBiRnJvbUNvbmZpZykNCi17DQotICAgIEZYU1lTX2Fzc2VydChwT0NNRERpY3QgIT0gTlVMTCk7DQotICAgIENQREZfQXJyYXkgKnBWRSA9IHBPQ01ERGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIlZFIikpOw0KLSAgICBpZiAocFZFICE9IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBHZXRPQ0dWRShwVkUsIGJGcm9tQ29uZmlnKTsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVN0cmluZyBjc1AgPSBwT0NNRERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiUCIpLCBGWF9CU1RSQygiQW55T24iKSk7DQotICAgIENQREZfT2JqZWN0ICpwT0NHT2JqID0gcE9DTUREaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIk9DR3MiKSk7DQotICAgIGlmIChwT0NHT2JqID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIGlmIChwT0NHT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpIHsNCi0gICAgICAgIHJldHVybiBiRnJvbUNvbmZpZyA/IExvYWRPQ0dTdGF0ZSgoQ1BERl9EaWN0aW9uYXJ5KilwT0NHT2JqKSA6IEdldE9DR1Zpc2libGUoKENQREZfRGljdGlvbmFyeSopcE9DR09iaik7DQotICAgIH0NCi0gICAgaWYgKHBPQ0dPYmotPkdldFR5cGUoKSAhPSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIEZYX0JPT0wgYlN0YXRlID0gRkFMU0U7DQotICAgIGlmIChjc1AgPT0gRlhfQlNUUkMoIkFsbE9uIikgfHwgY3NQID09IEZYX0JTVFJDKCJBbGxPZmYiKSkgew0KLSAgICAgICAgYlN0YXRlID0gVFJVRTsNCi0gICAgfQ0KLSAgICBGWF9JTlQzMiBpQ291bnQgPSAoKENQREZfQXJyYXkqKXBPQ0dPYmopLT5HZXRDb3VudCgpOw0KLSAgICBmb3IgKEZYX0lOVDMyIGkgPSAwOyBpIDwgaUNvdW50OyBpICsrKSB7DQotICAgICAgICBGWF9CT09MIGJJdGVtID0gVFJVRTsNCi0gICAgICAgIENQREZfRGljdGlvbmFyeSogcEl0ZW1EaWN0ID0gKChDUERGX0FycmF5KilwT0NHT2JqKS0+R2V0RGljdChpKTsNCi0gICAgICAgIGlmIChwSXRlbURpY3QpIHsNCi0gICAgICAgICAgICBiSXRlbSA9IGJGcm9tQ29uZmlnID8gTG9hZE9DR1N0YXRlKHBJdGVtRGljdCkgOiBHZXRPQ0dWaXNpYmxlKHBJdGVtRGljdCk7DQotICAgICAgICB9DQotICAgICAgICBpZiAoY3NQID09IEZYX0JTVFJDKCJBbnlPbiIpICYmIGJJdGVtKSB7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoY3NQID09IEZYX0JTVFJDKCJBbnlPZmYiKSAmJiAhYkl0ZW0pIHsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChjc1AgPT0gRlhfQlNUUkMoIkFsbE9uIikgJiYgIWJJdGVtKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGNzUCA9PSBGWF9CU1RSQygiQWxsT2ZmIikgJiYgYkl0ZW0pIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIGJTdGF0ZTsNCi19DQotRlhfQk9PTCBDUERGX09DQ29udGV4dDo6Q2hlY2tPQ0dWaXNpYmxlKGNvbnN0IENQREZfRGljdGlvbmFyeSAqcE9DR0RpY3QpDQotew0KLSAgICBpZiAocE9DR0RpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgY3NUeXBlID0gcE9DR0RpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiVHlwZSIpLCBGWF9CU1RSQygiT0NHIikpOw0KLSAgICBpZiAoY3NUeXBlID09IEZYX0JTVFJDKCJPQ0ciKSkgew0KLSAgICAgICAgcmV0dXJuIEdldE9DR1Zpc2libGUocE9DR0RpY3QpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmV0dXJuIExvYWRPQ01EU3RhdGUocE9DR0RpY3QsIEZBTFNFKTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfT0NDb250ZXh0OjpSZXNldE9DQ29udGV4dCgpDQotew0KLSAgICBtX09DR1N0YXRlcy5SZW1vdmVBbGwoKTsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmRvYy9mcGRmX2RvYy5oIgorc3RhdGljIEZYX0lOVDMyIEZQREZET0NfT0NHX0ZpbmRHcm91cChjb25zdCBDUERGX09iamVjdCAqcE9iamVjdCwgY29uc3QgQ1BERl9EaWN0aW9uYXJ5ICpwR3JvdXBEaWN0KQoreworICAgIGlmIChwT2JqZWN0ID09IE5VTEwgfHwgcEdyb3VwRGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgRlhfSU5UMzIgaVR5cGUgPSBwT2JqZWN0LT5HZXRUeXBlKCk7CisgICAgaWYgKGlUeXBlID09IFBERk9CSl9BUlJBWSkgeworICAgICAgICBGWF9EV09SRCBkd0NvdW50ID0gKChDUERGX0FycmF5KilwT2JqZWN0KS0+R2V0Q291bnQoKTsKKyAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IGR3Q291bnQ7IGkrKykgeworICAgICAgICAgICAgaWYgKCgoQ1BERl9BcnJheSopcE9iamVjdCktPkdldERpY3QoaSkgPT0gcEdyb3VwRGljdCkgeworICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKHBPYmplY3QtPkdldERpY3QoKSA9PSBwR3JvdXBEaWN0KSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CitzdGF0aWMgRlhfQk9PTCBGUERGRE9DX09DR19IYXNJbnRlbnQoY29uc3QgQ1BERl9EaWN0aW9uYXJ5ICpwRGljdCwgRlhfQlNUUiBjc0VsZW1lbnQsIEZYX0JTVFIgY3NEZWYgPSBGWF9CU1RSQygiIikpCit7CisgICAgRlhTWVNfYXNzZXJ0KHBEaWN0ICE9IE5VTEwpOworICAgIENQREZfT2JqZWN0ICpwSW50ZW50ID0gcERpY3QtPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiSW50ZW50IikpOworICAgIGlmIChwSW50ZW50ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIGNzRWxlbWVudCA9PSBjc0RlZjsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgYnNJbnRlbnQ7CisgICAgaWYgKHBJbnRlbnQtPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsKKyAgICAgICAgRlhfRFdPUkQgZHdDb3VudCA9ICgoQ1BERl9BcnJheSopcEludGVudCktPkdldENvdW50KCk7CisgICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBkd0NvdW50OyBpKyspIHsKKyAgICAgICAgICAgIGJzSW50ZW50ID0gKChDUERGX0FycmF5KilwSW50ZW50KS0+R2V0U3RyaW5nKGkpOworICAgICAgICAgICAgaWYgKGJzSW50ZW50ID09IEZYX0JTVFJDKCJBbGwiKSB8fCBic0ludGVudCA9PSBjc0VsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGJzSW50ZW50ID0gcEludGVudC0+R2V0U3RyaW5nKCk7CisgICAgcmV0dXJuIGJzSW50ZW50ID09IEZYX0JTVFJDKCJBbGwiKSB8fCBic0ludGVudCA9PSBjc0VsZW1lbnQ7Cit9CitzdGF0aWMgQ1BERl9EaWN0aW9uYXJ5KiBGUERGRE9DX09DR19HZXRDb25maWcoQ1BERl9Eb2N1bWVudCAqcERvYywgY29uc3QgQ1BERl9EaWN0aW9uYXJ5ICpwT0NHRGljdCwgRlhfQlNUUiBic1N0YXRlKQoreworICAgIEZYU1lTX2Fzc2VydChwRG9jICYmIHBPQ0dEaWN0KTsKKyAgICBDUERGX0RpY3Rpb25hcnkgKnBPQ1Byb3BlcnRpZXMgPSBwRG9jLT5HZXRSb290KCktPkdldERpY3QoRlhfQlNUUkMoIk9DUHJvcGVydGllcyIpKTsKKyAgICBpZiAoIXBPQ1Byb3BlcnRpZXMpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfQXJyYXkgKnBPQ0dzID0gcE9DUHJvcGVydGllcy0+R2V0QXJyYXkoRlhfQlNUUkMoIk9DR3MiKSk7CisgICAgaWYgKCFwT0NHcykgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKEZQREZET0NfT0NHX0ZpbmRHcm91cChwT0NHcywgcE9DR0RpY3QpIDwgMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5ICpwQ29uZmlnID0gcE9DUHJvcGVydGllcy0+R2V0RGljdChGWF9CU1RSQygiRCIpKTsKKyAgICBDUERGX0FycmF5ICpwQ29uZmlncyA9IHBPQ1Byb3BlcnRpZXMtPkdldEFycmF5KEZYX0JTVFJDKCJDb25maWdzIikpOworICAgIGlmIChwQ29uZmlncykgeworICAgICAgICBDUERGX0RpY3Rpb25hcnkgKnBGaW5kOworICAgICAgICBGWF9JTlQzMiBpQ291bnQgPSBwQ29uZmlncy0+R2V0Q291bnQoKTsKKyAgICAgICAgZm9yIChGWF9JTlQzMiBpID0gMDsgaSA8IGlDb3VudDsgaSArKykgeworICAgICAgICAgICAgcEZpbmQgPSBwQ29uZmlncy0+R2V0RGljdChpKTsKKyAgICAgICAgICAgIGlmICghcEZpbmQpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghRlBERkRPQ19PQ0dfSGFzSW50ZW50KHBGaW5kLCBGWF9CU1RSQygiVmlldyIpLCBGWF9CU1RSQygiVmlldyIpKSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcENvbmZpZyA9IHBGaW5kOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBDb25maWc7Cit9CitzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcgRlBERkRPQ19PQ0dfR2V0VXNhZ2VUeXBlU3RyaW5nKENQREZfT0NDb250ZXh0OjpVc2FnZVR5cGUgZVR5cGUpCit7CisgICAgQ0ZYX0J5dGVTdHJpbmcgY3NTdGF0ZSA9IEZYX0JTVFJDKCJWaWV3Iik7CisgICAgaWYgKGVUeXBlID09IENQREZfT0NDb250ZXh0OjpEZXNpZ24pIHsKKyAgICAgICAgY3NTdGF0ZSA9IEZYX0JTVFJDKCJEZXNpZ24iKTsKKyAgICB9IGVsc2UgaWYgKGVUeXBlID09IENQREZfT0NDb250ZXh0OjpQcmludCkgeworICAgICAgICBjc1N0YXRlID0gRlhfQlNUUkMoIlByaW50Iik7CisgICAgfSBlbHNlIGlmIChlVHlwZSA9PSBDUERGX09DQ29udGV4dDo6RXhwb3J0KSB7CisgICAgICAgIGNzU3RhdGUgPSBGWF9CU1RSQygiRXhwb3J0Iik7CisgICAgfQorICAgIHJldHVybiBjc1N0YXRlOworfQorQ1BERl9PQ0NvbnRleHQ6OkNQREZfT0NDb250ZXh0KENQREZfRG9jdW1lbnQgKnBEb2MsIFVzYWdlVHlwZSBlVXNhZ2VUeXBlKQoreworICAgIEZYU1lTX2Fzc2VydChwRG9jICE9IE5VTEwpOworICAgIG1fcERvY3VtZW50ID0gcERvYzsKKyAgICBtX2VVc2FnZVR5cGUgPSBlVXNhZ2VUeXBlOworfQorQ1BERl9PQ0NvbnRleHQ6On5DUERGX09DQ29udGV4dCgpCit7CisgICAgbV9PQ0dTdGF0ZXMuUmVtb3ZlQWxsKCk7Cit9CitGWF9CT09MIENQREZfT0NDb250ZXh0OjpMb2FkT0NHU3RhdGVGcm9tQ29uZmlnKEZYX0JTVFIgY3NDb25maWcsIGNvbnN0IENQREZfRGljdGlvbmFyeSAqcE9DR0RpY3QsIEZYX0JPT0wgJmJWYWxpZENvbmZpZykgY29uc3QKK3sKKyAgICBDUERGX0RpY3Rpb25hcnkgKnBDb25maWcgPSBGUERGRE9DX09DR19HZXRDb25maWcobV9wRG9jdW1lbnQsIHBPQ0dEaWN0LCBjc0NvbmZpZyk7CisgICAgaWYgKCFwQ29uZmlnKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBiVmFsaWRDb25maWcgPSBUUlVFOworICAgIEZYX0JPT0wgYlN0YXRlID0gcENvbmZpZy0+R2V0U3RyaW5nKEZYX0JTVFJDKCJCYXNlU3RhdGUiKSwgRlhfQlNUUkMoIk9OIikpICE9IEZYX0JTVFJDKCJPRkYiKTsKKyAgICBDUERGX0FycmF5ICpwQXJyYXkgPSBwQ29uZmlnLT5HZXRBcnJheShGWF9CU1RSQygiT04iKSk7CisgICAgaWYgKHBBcnJheSkgeworICAgICAgICBpZiAoRlBERkRPQ19PQ0dfRmluZEdyb3VwKHBBcnJheSwgcE9DR0RpY3QpID49IDApIHsKKyAgICAgICAgICAgIGJTdGF0ZSA9IFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgcEFycmF5ID0gcENvbmZpZy0+R2V0QXJyYXkoRlhfQlNUUkMoIk9GRiIpKTsKKyAgICBpZiAocEFycmF5KSB7CisgICAgICAgIGlmIChGUERGRE9DX09DR19GaW5kR3JvdXAocEFycmF5LCBwT0NHRGljdCkgPj0gMCkgeworICAgICAgICAgICAgYlN0YXRlID0gRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisgICAgcEFycmF5ID0gcENvbmZpZy0+R2V0QXJyYXkoRlhfQlNUUkMoIkFTIikpOworICAgIGlmIChwQXJyYXkpIHsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3NGaW5kID0gY3NDb25maWcgKyBGWF9CU1RSQygiU3RhdGUiKTsKKyAgICAgICAgRlhfSU5UMzIgaUNvdW50ID0gcEFycmF5LT5HZXRDb3VudCgpOworICAgICAgICBmb3IgKEZYX0lOVDMyIGkgPSAwOyBpIDwgaUNvdW50OyBpICsrKSB7CisgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkgKnBVc2FnZSA9IHBBcnJheS0+R2V0RGljdChpKTsKKyAgICAgICAgICAgIGlmICghcFVzYWdlKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocFVzYWdlLT5HZXRTdHJpbmcoRlhfQlNUUkMoIkV2ZW50IiksIEZYX0JTVFJDKCJWaWV3IikpICE9IGNzQ29uZmlnKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDUERGX0FycmF5ICpwT0NHcyA9IHBVc2FnZS0+R2V0QXJyYXkoRlhfQlNUUkMoIk9DR3MiKSk7CisgICAgICAgICAgICBpZiAoIXBPQ0dzKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoRlBERkRPQ19PQ0dfRmluZEdyb3VwKHBPQ0dzLCBwT0NHRGljdCkgPCAwKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkgKnBTdGF0ZSA9IHBVc2FnZS0+R2V0RGljdChjc0NvbmZpZyk7CisgICAgICAgICAgICBpZiAoIXBTdGF0ZSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYlN0YXRlID0gcFN0YXRlLT5HZXRTdHJpbmcoY3NGaW5kKSAhPSBGWF9CU1RSQygiT0ZGIik7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGJTdGF0ZTsKK30KK0ZYX0JPT0wgQ1BERl9PQ0NvbnRleHQ6OkxvYWRPQ0dTdGF0ZShjb25zdCBDUERGX0RpY3Rpb25hcnkgKnBPQ0dEaWN0KSBjb25zdAoreworICAgIGlmICghRlBERkRPQ19PQ0dfSGFzSW50ZW50KHBPQ0dEaWN0LCBGWF9CU1RSQygiVmlldyIpLCBGWF9CU1RSQygiVmlldyIpKSkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgY3NTdGF0ZSA9IEZQREZET0NfT0NHX0dldFVzYWdlVHlwZVN0cmluZyhtX2VVc2FnZVR5cGUpOworICAgIENQREZfRGljdGlvbmFyeSAqcFVzYWdlID0gcE9DR0RpY3QtPkdldERpY3QoRlhfQlNUUkMoIlVzYWdlIikpOworICAgIGlmIChwVXNhZ2UpIHsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5ICpwU3RhdGUgPSBwVXNhZ2UtPkdldERpY3QoY3NTdGF0ZSk7CisgICAgICAgIGlmIChwU3RhdGUpIHsKKyAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGNzRmluZCA9IGNzU3RhdGUgKyBGWF9CU1RSQygiU3RhdGUiKTsKKyAgICAgICAgICAgIGlmIChwU3RhdGUtPktleUV4aXN0KGNzRmluZCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcFN0YXRlLT5HZXRTdHJpbmcoY3NGaW5kKSAhPSBGWF9CU1RSQygiT0ZGIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNzU3RhdGUgIT0gRlhfQlNUUkMoIlZpZXciKSkgeworICAgICAgICAgICAgcFN0YXRlID0gcFVzYWdlLT5HZXREaWN0KEZYX0JTVFJDKCJWaWV3IikpOworICAgICAgICAgICAgaWYgKHBTdGF0ZSAmJiBwU3RhdGUtPktleUV4aXN0KEZYX0JTVFJDKCJWaWV3U3RhdGUiKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcFN0YXRlLT5HZXRTdHJpbmcoRlhfQlNUUkMoIlZpZXdTdGF0ZSIpKSAhPSBGWF9CU1RSQygiT0ZGIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgRlhfQk9PTCBiRGVmVmFsaWQgPSBGQUxTRTsKKyAgICByZXR1cm4gTG9hZE9DR1N0YXRlRnJvbUNvbmZpZyhjc1N0YXRlLCBwT0NHRGljdCwgYkRlZlZhbGlkKTsKK30KK0ZYX0JPT0wgQ1BERl9PQ0NvbnRleHQ6OkdldE9DR1Zpc2libGUoY29uc3QgQ1BERl9EaWN0aW9uYXJ5ICpwT0NHRGljdCkKK3sKKyAgICBpZiAoIXBPQ0dEaWN0KSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgRlhfTFBWT0lEIGJTdGF0ZSA9IE5VTEw7CisgICAgaWYgKG1fT0NHU3RhdGVzLkxvb2t1cChwT0NHRGljdCwgYlN0YXRlKSkgeworICAgICAgICByZXR1cm4gKEZYX1VJTlRQVFIpYlN0YXRlICE9IDA7CisgICAgfQorICAgIGJTdGF0ZSA9IChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpTG9hZE9DR1N0YXRlKHBPQ0dEaWN0KTsKKyAgICBtX09DR1N0YXRlcy5TZXRBdChwT0NHRGljdCwgYlN0YXRlKTsKKyAgICByZXR1cm4gKEZYX1VJTlRQVFIpYlN0YXRlICE9IDA7Cit9CitGWF9CT09MIENQREZfT0NDb250ZXh0OjpHZXRPQ0dWRShDUERGX0FycmF5ICpwRXhwcmVzc2lvbiwgRlhfQk9PTCBiRnJvbUNvbmZpZywgaW50IG5MZXZlbCkKK3sKKyAgICBpZiAobkxldmVsID4gMzIpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAocEV4cHJlc3Npb24gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEZYX0lOVDMyIGlDb3VudCA9IHBFeHByZXNzaW9uLT5HZXRDb3VudCgpOworICAgIENQREZfT2JqZWN0ICpwT0NHT2JqOworICAgIENGWF9CeXRlU3RyaW5nIGNzT3BlcmF0b3IgPSBwRXhwcmVzc2lvbi0+R2V0U3RyaW5nKDApOworICAgIGlmIChjc09wZXJhdG9yID09IEZYX0JTVFJDKCJOb3QiKSkgeworICAgICAgICBwT0NHT2JqID0gcEV4cHJlc3Npb24tPkdldEVsZW1lbnRWYWx1ZSgxKTsKKyAgICAgICAgaWYgKHBPQ0dPYmogPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmIChwT0NHT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgICAgIHJldHVybiAhKGJGcm9tQ29uZmlnID8gTG9hZE9DR1N0YXRlKChDUERGX0RpY3Rpb25hcnkqKXBPQ0dPYmopIDogR2V0T0NHVmlzaWJsZSgoQ1BERl9EaWN0aW9uYXJ5KilwT0NHT2JqKSk7CisgICAgICAgIH0gZWxzZSBpZiAocE9DR09iai0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgeworICAgICAgICAgICAgcmV0dXJuICFHZXRPQ0dWRSgoQ1BERl9BcnJheSopcE9DR09iaiwgYkZyb21Db25maWcsIG5MZXZlbCArIDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgfQorICAgIGlmIChjc09wZXJhdG9yID09IEZYX0JTVFJDKCJPciIpIHx8IGNzT3BlcmF0b3IgPT0gRlhfQlNUUkMoIkFuZCIpKSB7CisgICAgICAgIEZYX0JPT0wgYlZhbHVlID0gRkFMU0U7CisgICAgICAgIGZvciAoRlhfSU5UMzIgaSA9IDE7IGkgPCBpQ291bnQ7IGkgKyspIHsKKyAgICAgICAgICAgIHBPQ0dPYmogPSBwRXhwcmVzc2lvbi0+R2V0RWxlbWVudFZhbHVlKDEpOworICAgICAgICAgICAgaWYgKHBPQ0dPYmogPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfQk9PTCBiSXRlbSA9IEZBTFNFOworICAgICAgICAgICAgaWYgKHBPQ0dPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfRElDVElPTkFSWSkgeworICAgICAgICAgICAgICAgIGJJdGVtID0gYkZyb21Db25maWcgPyBMb2FkT0NHU3RhdGUoKENQREZfRGljdGlvbmFyeSopcE9DR09iaikgOiBHZXRPQ0dWaXNpYmxlKChDUERGX0RpY3Rpb25hcnkqKXBPQ0dPYmopOworICAgICAgICAgICAgfSBlbHNlIGlmIChwT0NHT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgICAgICAgICAgYkl0ZW0gPSBHZXRPQ0dWRSgoQ1BERl9BcnJheSopcE9DR09iaiwgYkZyb21Db25maWcsIG5MZXZlbCArIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGkgPT0gMSkgeworICAgICAgICAgICAgICAgIGJWYWx1ZSA9IGJJdGVtOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoY3NPcGVyYXRvciA9PSBGWF9CU1RSQygiT3IiKSkgeworICAgICAgICAgICAgICAgICAgICBiVmFsdWUgPSBiVmFsdWUgfHwgYkl0ZW07CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYlZhbHVlID0gYlZhbHVlICYmIGJJdGVtOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYlZhbHVlOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitGWF9CT09MIENQREZfT0NDb250ZXh0OjpMb2FkT0NNRFN0YXRlKGNvbnN0IENQREZfRGljdGlvbmFyeSAqcE9DTUREaWN0LCBGWF9CT09MIGJGcm9tQ29uZmlnKQoreworICAgIEZYU1lTX2Fzc2VydChwT0NNRERpY3QgIT0gTlVMTCk7CisgICAgQ1BERl9BcnJheSAqcFZFID0gcE9DTUREaWN0LT5HZXRBcnJheShGWF9CU1RSQygiVkUiKSk7CisgICAgaWYgKHBWRSAhPSBOVUxMKSB7CisgICAgICAgIHJldHVybiBHZXRPQ0dWRShwVkUsIGJGcm9tQ29uZmlnKTsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgY3NQID0gcE9DTUREaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIlAiKSwgRlhfQlNUUkMoIkFueU9uIikpOworICAgIENQREZfT2JqZWN0ICpwT0NHT2JqID0gcE9DTUREaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIk9DR3MiKSk7CisgICAgaWYgKHBPQ0dPYmogPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgaWYgKHBPQ0dPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfRElDVElPTkFSWSkgeworICAgICAgICByZXR1cm4gYkZyb21Db25maWcgPyBMb2FkT0NHU3RhdGUoKENQREZfRGljdGlvbmFyeSopcE9DR09iaikgOiBHZXRPQ0dWaXNpYmxlKChDUERGX0RpY3Rpb25hcnkqKXBPQ0dPYmopOworICAgIH0KKyAgICBpZiAocE9DR09iai0+R2V0VHlwZSgpICE9IFBERk9CSl9BUlJBWSkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgRlhfQk9PTCBiU3RhdGUgPSBGQUxTRTsKKyAgICBpZiAoY3NQID09IEZYX0JTVFJDKCJBbGxPbiIpIHx8IGNzUCA9PSBGWF9CU1RSQygiQWxsT2ZmIikpIHsKKyAgICAgICAgYlN0YXRlID0gVFJVRTsKKyAgICB9CisgICAgRlhfSU5UMzIgaUNvdW50ID0gKChDUERGX0FycmF5KilwT0NHT2JqKS0+R2V0Q291bnQoKTsKKyAgICBmb3IgKEZYX0lOVDMyIGkgPSAwOyBpIDwgaUNvdW50OyBpICsrKSB7CisgICAgICAgIEZYX0JPT0wgYkl0ZW0gPSBUUlVFOworICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBJdGVtRGljdCA9ICgoQ1BERl9BcnJheSopcE9DR09iaiktPkdldERpY3QoaSk7CisgICAgICAgIGlmIChwSXRlbURpY3QpIHsKKyAgICAgICAgICAgIGJJdGVtID0gYkZyb21Db25maWcgPyBMb2FkT0NHU3RhdGUocEl0ZW1EaWN0KSA6IEdldE9DR1Zpc2libGUocEl0ZW1EaWN0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY3NQID09IEZYX0JTVFJDKCJBbnlPbiIpICYmIGJJdGVtKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY3NQID09IEZYX0JTVFJDKCJBbnlPZmYiKSAmJiAhYkl0ZW0pIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIGlmIChjc1AgPT0gRlhfQlNUUkMoIkFsbE9uIikgJiYgIWJJdGVtKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNzUCA9PSBGWF9CU1RSQygiQWxsT2ZmIikgJiYgYkl0ZW0pIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYlN0YXRlOworfQorRlhfQk9PTCBDUERGX09DQ29udGV4dDo6Q2hlY2tPQ0dWaXNpYmxlKGNvbnN0IENQREZfRGljdGlvbmFyeSAqcE9DR0RpY3QpCit7CisgICAgaWYgKHBPQ0dEaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIGNzVHlwZSA9IHBPQ0dEaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIlR5cGUiKSwgRlhfQlNUUkMoIk9DRyIpKTsKKyAgICBpZiAoY3NUeXBlID09IEZYX0JTVFJDKCJPQ0ciKSkgeworICAgICAgICByZXR1cm4gR2V0T0NHVmlzaWJsZShwT0NHRGljdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIExvYWRPQ01EU3RhdGUocE9DR0RpY3QsIEZBTFNFKTsKKyAgICB9Cit9Cit2b2lkIENQREZfT0NDb250ZXh0OjpSZXNldE9DQ29udGV4dCgpCit7CisgICAgbV9PQ0dTdGF0ZXMuUmVtb3ZlQWxsKCk7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmZG9jL2RvY190YWdnZWQuY3BwIGIvY29yZS9zcmMvZnBkZmRvYy9kb2NfdGFnZ2VkLmNwcAppbmRleCA5NWFlOGQ1Li41NTEwNDIwIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmZG9jL2RvY190YWdnZWQuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX3RhZ2dlZC5jcHAKQEAgLTEsNDQ4ICsxLDQ0OCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhcnNlci5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmRvYy9mcGRmX3RhZ2dlZC5oIg0KLSNpbmNsdWRlICJ0YWdnZWRfaW50LmgiDQotY29uc3QgaW50IG5NYXhSZWN1cnNpb24gPSAzMjsNCi1zdGF0aWMgRlhfQk9PTCBJc1RhZ2dlZChjb25zdCBDUERGX0RvY3VtZW50KiBwRG9jKQ0KLXsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwQ2F0YWxvZyA9IHBEb2MtPkdldFJvb3QoKTsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwTWFya0luZm8gPSBwQ2F0YWxvZy0+R2V0RGljdChGWF9CU1RSQygiTWFya0luZm8iKSk7DQotICAgIHJldHVybiBwTWFya0luZm8gIT0gTlVMTCAmJiBwTWFya0luZm8tPkdldEludGVnZXIoRlhfQlNUUkMoIk1hcmtlZCIpKTsNCi19DQotQ1BERl9TdHJ1Y3RUcmVlKiBDUERGX1N0cnVjdFRyZWU6OkxvYWRQYWdlKGNvbnN0IENQREZfRG9jdW1lbnQqIHBEb2MsIGNvbnN0IENQREZfRGljdGlvbmFyeSogcFBhZ2VEaWN0KQ0KLXsNCi0gICAgaWYgKCFJc1RhZ2dlZChwRG9jKSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9TdHJ1Y3RUcmVlSW1wbCogcFRyZWUgPSBGWF9ORVcgQ1BERl9TdHJ1Y3RUcmVlSW1wbChwRG9jKTsNCi0gICAgaWYgKHBUcmVlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHBUcmVlLT5Mb2FkUGFnZVRyZWUocFBhZ2VEaWN0KTsNCi0gICAgcmV0dXJuIHBUcmVlOw0KLX0NCi1DUERGX1N0cnVjdFRyZWUqIENQREZfU3RydWN0VHJlZTo6TG9hZERvYyhjb25zdCBDUERGX0RvY3VtZW50KiBwRG9jKQ0KLXsNCi0gICAgaWYgKCFJc1RhZ2dlZChwRG9jKSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9TdHJ1Y3RUcmVlSW1wbCogcFRyZWUgPSBGWF9ORVcgQ1BERl9TdHJ1Y3RUcmVlSW1wbChwRG9jKTsNCi0gICAgaWYgKHBUcmVlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHBUcmVlLT5Mb2FkRG9jVHJlZSgpOw0KLSAgICByZXR1cm4gcFRyZWU7DQotfQ0KLUNQREZfU3RydWN0VHJlZUltcGw6OkNQREZfU3RydWN0VHJlZUltcGwoY29uc3QgQ1BERl9Eb2N1bWVudCogcERvYykNCi17DQotICAgIENQREZfRGljdGlvbmFyeSogcENhdGFsb2cgPSBwRG9jLT5HZXRSb290KCk7DQotICAgIG1fcFRyZWVSb290ID0gcENhdGFsb2ctPkdldERpY3QoRlhfQlNUUkMoIlN0cnVjdFRyZWVSb290IikpOw0KLSAgICBpZiAobV9wVHJlZVJvb3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fcFJvbGVNYXAgPSBtX3BUcmVlUm9vdC0+R2V0RGljdChGWF9CU1RSQygiUm9sZU1hcCIpKTsNCi19DQotQ1BERl9TdHJ1Y3RUcmVlSW1wbDo6fkNQREZfU3RydWN0VHJlZUltcGwoKQ0KLXsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX0tpZHMuR2V0U2l6ZSgpOyBpICsrKQ0KLSAgICAgICAgaWYgKG1fS2lkc1tpXSkgew0KLSAgICAgICAgICAgIG1fS2lkc1tpXS0+UmVsZWFzZSgpOw0KLSAgICAgICAgfQ0KLX0NCi12b2lkIENQREZfU3RydWN0VHJlZUltcGw6OkxvYWREb2NUcmVlKCkNCi17DQotICAgIG1fcFBhZ2UgPSBOVUxMOw0KLSAgICBpZiAobV9wVHJlZVJvb3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfT2JqZWN0KiBwS2lkcyA9IG1fcFRyZWVSb290LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIksiKSk7DQotICAgIGlmIChwS2lkcyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKHBLaWRzLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpIHsNCi0gICAgICAgIENQREZfU3RydWN0RWxlbWVudEltcGwqIHBTdHJ1Y3RFbGVtZW50SW1wbCA9IEZYX05FVyBDUERGX1N0cnVjdEVsZW1lbnRJbXBsKHRoaXMsIE5VTEwsIChDUERGX0RpY3Rpb25hcnkqKXBLaWRzKTsNCi0gICAgICAgIGlmIChwU3RydWN0RWxlbWVudEltcGwgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fS2lkcy5BZGQocFN0cnVjdEVsZW1lbnRJbXBsKTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAocEtpZHMtPkdldFR5cGUoKSAhPSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDUERGX0FycmF5KiBwQXJyYXkgPSAoQ1BERl9BcnJheSopcEtpZHM7DQotICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwQXJyYXktPkdldENvdW50KCk7IGkgKyspIHsNCi0gICAgICAgIENQREZfRGljdGlvbmFyeSogcEtpZCA9IHBBcnJheS0+R2V0RGljdChpKTsNCi0gICAgICAgIENQREZfU3RydWN0RWxlbWVudEltcGwqIHBTdHJ1Y3RFbGVtZW50SW1wbCA9IEZYX05FVyBDUERGX1N0cnVjdEVsZW1lbnRJbXBsKHRoaXMsIE5VTEwsIHBLaWQpOw0KLSAgICAgICAgaWYgKHBTdHJ1Y3RFbGVtZW50SW1wbCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9LaWRzLkFkZChwU3RydWN0RWxlbWVudEltcGwpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9TdHJ1Y3RUcmVlSW1wbDo6TG9hZFBhZ2VUcmVlKGNvbnN0IENQREZfRGljdGlvbmFyeSogcFBhZ2VEaWN0KQ0KLXsNCi0gICAgbV9wUGFnZSA9IHBQYWdlRGljdDsNCi0gICAgaWYgKG1fcFRyZWVSb290ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDUERGX09iamVjdCogcEtpZHMgPSBtX3BUcmVlUm9vdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJLIikpOw0KLSAgICBpZiAocEtpZHMgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX0RXT1JEIGR3S2lkcyA9IDA7DQotICAgIGlmIChwS2lkcy0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKSB7DQotICAgICAgICBkd0tpZHMgPSAxOw0KLSAgICB9IGVsc2UgaWYgKHBLaWRzLT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICBkd0tpZHMgPSAoKENQREZfQXJyYXkqKXBLaWRzKS0+R2V0Q291bnQoKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9EV09SRCBpOw0KLSAgICBtX0tpZHMuU2V0U2l6ZShkd0tpZHMpOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgZHdLaWRzOyBpICsrKSB7DQotICAgICAgICBtX0tpZHNbaV0gPSBOVUxMOw0KLSAgICB9DQotICAgIENGWF9NYXBQdHJUb1B0ciBlbGVtZW50X21hcDsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwUGFyZW50VHJlZSA9IG1fcFRyZWVSb290LT5HZXREaWN0KEZYX0JTVFJDKCJQYXJlbnRUcmVlIikpOw0KLSAgICBpZiAocFBhcmVudFRyZWUgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfTnVtYmVyVHJlZSBwYXJlbnRfdHJlZShwUGFyZW50VHJlZSk7DQotICAgIGludCBwYXJlbnRzX2lkID0gcFBhZ2VEaWN0LT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJTdHJ1Y3RQYXJlbnRzIiksIC0xKTsNCi0gICAgaWYgKHBhcmVudHNfaWQgPj0gMCkgew0KLSAgICAgICAgQ1BERl9PYmplY3QqIHBQYXJlbnRzID0gcGFyZW50X3RyZWUuTG9va3VwVmFsdWUocGFyZW50c19pZCk7DQotICAgICAgICBpZiAocFBhcmVudHMgPT0gTlVMTCB8fCBwUGFyZW50cy0+R2V0VHlwZSgpICE9IFBERk9CSl9BUlJBWSkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIENQREZfQXJyYXkqIHBQYXJlbnRBcnJheSA9IChDUERGX0FycmF5KilwUGFyZW50czsNCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwUGFyZW50QXJyYXktPkdldENvdW50KCk7IGkgKyspIHsNCi0gICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBQYXJlbnQgPSBwUGFyZW50QXJyYXktPkdldERpY3QoaSk7DQotICAgICAgICAgICAgaWYgKHBQYXJlbnQgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgQWRkUGFnZU5vZGUocFBhcmVudCwgZWxlbWVudF9tYXApOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLUNQREZfU3RydWN0RWxlbWVudEltcGwqIENQREZfU3RydWN0VHJlZUltcGw6OkFkZFBhZ2VOb2RlKENQREZfRGljdGlvbmFyeSogcERpY3QsIENGWF9NYXBQdHJUb1B0ciYgbWFwLCBpbnQgbkxldmVsKQ0KLXsNCi0gICAgaWYgKG5MZXZlbCA+IG5NYXhSZWN1cnNpb24pIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfU3RydWN0RWxlbWVudEltcGwqIHBFbGVtZW50ID0gTlVMTDsNCi0gICAgaWYgKG1hcC5Mb29rdXAocERpY3QsIChGWF9MUFZPSUQmKXBFbGVtZW50KSkgew0KLSAgICAgICAgcmV0dXJuIHBFbGVtZW50Ow0KLSAgICB9DQotICAgIHBFbGVtZW50ID0gRlhfTkVXIENQREZfU3RydWN0RWxlbWVudEltcGwodGhpcywgTlVMTCwgcERpY3QpOw0KLSAgICBpZiAocEVsZW1lbnQgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgbWFwLlNldEF0KHBEaWN0LCBwRWxlbWVudCk7DQotICAgIENQREZfRGljdGlvbmFyeSogcFBhcmVudCA9IHBEaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJQIikpOw0KLSAgICBpZiAocFBhcmVudCA9PSBOVUxMIHx8IHBQYXJlbnQtPkdldFN0cmluZyhGWF9CU1RSQygiVHlwZSIpKSA9PSBGWF9CU1RSQygiU3RydWN0VHJlZVJvb3QiKSkgew0KLSAgICAgICAgaWYgKCFBZGRUb3BMZXZlbE5vZGUocERpY3QsIHBFbGVtZW50KSkgew0KLSAgICAgICAgICAgIHBFbGVtZW50LT5SZWxlYXNlKCk7DQotICAgICAgICAgICAgbWFwLlJlbW92ZUtleShwRGljdCk7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBDUERGX1N0cnVjdEVsZW1lbnRJbXBsKiBwUGFyZW50RWxlbWVudCA9IEFkZFBhZ2VOb2RlKHBQYXJlbnQsIG1hcCwgbkxldmVsICsgMSk7DQotICAgICAgICBGWF9CT09MIGJTYXZlID0gRkFMU0U7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBQYXJlbnRFbGVtZW50LT5tX0tpZHMuR2V0U2l6ZSgpOyBpICsrKSB7DQotICAgICAgICAgICAgaWYgKHBQYXJlbnRFbGVtZW50LT5tX0tpZHNbaV0ubV9UeXBlICE9IENQREZfU3RydWN0S2lkOjpFbGVtZW50KSB7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAocFBhcmVudEVsZW1lbnQtPm1fS2lkc1tpXS5tX0VsZW1lbnQubV9wRGljdCAhPSBwRGljdCkgew0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcFBhcmVudEVsZW1lbnQtPm1fS2lkc1tpXS5tX0VsZW1lbnQubV9wRWxlbWVudCA9IHBFbGVtZW50LT5SZXRhaW4oKTsNCi0gICAgICAgICAgICBiU2F2ZSA9IFRSVUU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoIWJTYXZlKSB7DQotICAgICAgICAgICAgcEVsZW1lbnQtPlJlbGVhc2UoKTsNCi0gICAgICAgICAgICBtYXAuUmVtb3ZlS2V5KHBEaWN0KTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gcEVsZW1lbnQ7DQotfQ0KLUZYX0JPT0wgQ1BERl9TdHJ1Y3RUcmVlSW1wbDo6QWRkVG9wTGV2ZWxOb2RlKENQREZfRGljdGlvbmFyeSogcERpY3QsIENQREZfU3RydWN0RWxlbWVudEltcGwqIHBFbGVtZW50KQ0KLXsNCi0gICAgQ1BERl9PYmplY3QgKnBPYmogPSBtX3BUcmVlUm9vdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJLIikpOw0KLSAgICBpZiAoIXBPYmopIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAocE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKSB7DQotICAgICAgICBpZiAocE9iai0+R2V0T2JqTnVtKCkgPT0gcERpY3QtPkdldE9iak51bSgpKSB7DQotICAgICAgICAgICAgaWYgKG1fS2lkc1swXSkgew0KLSAgICAgICAgICAgICAgICBtX0tpZHNbMF0tPlJlbGVhc2UoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9LaWRzWzBdID0gcEVsZW1lbnQtPlJldGFpbigpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKHBPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgIENQREZfQXJyYXkqIHBUb3BLaWRzID0gKENQREZfQXJyYXkqKXBPYmo7DQotICAgICAgICBGWF9EV09SRCBpOw0KLSAgICAgICAgRlhfQk9PTCBiU2F2ZSA9IEZBTFNFOw0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHBUb3BLaWRzLT5HZXRDb3VudCgpOyBpICsrKSB7DQotICAgICAgICAgICAgQ1BERl9SZWZlcmVuY2UqIHBLaWRSZWYgPSAoQ1BERl9SZWZlcmVuY2UqKXBUb3BLaWRzLT5HZXRFbGVtZW50KGkpOw0KLSAgICAgICAgICAgIGlmIChwS2lkUmVmLT5HZXRUeXBlKCkgIT0gUERGT0JKX1JFRkVSRU5DRSB8fCBwS2lkUmVmLT5HZXRSZWZPYmpOdW0oKSAhPSBwRGljdC0+R2V0T2JqTnVtKCkpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChtX0tpZHNbaV0pIHsNCi0gICAgICAgICAgICAgICAgbV9LaWRzW2ldLT5SZWxlYXNlKCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fS2lkc1tpXSA9IHBFbGVtZW50LT5SZXRhaW4oKTsNCi0gICAgICAgICAgICBiU2F2ZSA9IFRSVUU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoIWJTYXZlKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1DUERGX1N0cnVjdEVsZW1lbnRJbXBsOjpDUERGX1N0cnVjdEVsZW1lbnRJbXBsKENQREZfU3RydWN0VHJlZUltcGwqIHBUcmVlLCBDUERGX1N0cnVjdEVsZW1lbnRJbXBsKiBwUGFyZW50LCBDUERGX0RpY3Rpb25hcnkqIHBEaWN0KQ0KLSAgICA6IG1fUmVmQ291bnQoMCkNCi17DQotICAgIG1fcFRyZWUgPSBwVHJlZTsNCi0gICAgbV9wRGljdCA9IHBEaWN0Ow0KLSAgICBtX1R5cGUgPSBwRGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJTIikpOw0KLSAgICBDRlhfQnl0ZVN0cmluZyBtYXBwZWQgPSBwVHJlZS0+bV9wUm9sZU1hcC0+R2V0U3RyaW5nKG1fVHlwZSk7DQotICAgIGlmICghbWFwcGVkLklzRW1wdHkoKSkgew0KLSAgICAgICAgbV9UeXBlID0gbWFwcGVkOw0KLSAgICB9DQotICAgIG1fcFBhcmVudCA9IHBQYXJlbnQ7DQotICAgIExvYWRLaWRzKHBEaWN0KTsNCi19DQotQ1BERl9TdHJ1Y3RFbGVtZW50SW1wbDo6fkNQREZfU3RydWN0RWxlbWVudEltcGwoKQ0KLXsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX0tpZHMuR2V0U2l6ZSgpOyBpICsrKSB7DQotICAgICAgICBpZiAobV9LaWRzW2ldLm1fVHlwZSA9PSBDUERGX1N0cnVjdEtpZDo6RWxlbWVudCAmJiBtX0tpZHNbaV0ubV9FbGVtZW50Lm1fcEVsZW1lbnQpIHsNCi0gICAgICAgICAgICAoKENQREZfU3RydWN0RWxlbWVudEltcGwqKW1fS2lkc1tpXS5tX0VsZW1lbnQubV9wRWxlbWVudCktPlJlbGVhc2UoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1DUERGX1N0cnVjdEVsZW1lbnRJbXBsKiBDUERGX1N0cnVjdEVsZW1lbnRJbXBsOjpSZXRhaW4oKQ0KLXsNCi0gICAgbV9SZWZDb3VudCsrOw0KLSAgICByZXR1cm4gdGhpczsNCi19DQotdm9pZCBDUERGX1N0cnVjdEVsZW1lbnRJbXBsOjpSZWxlYXNlKCkNCi17DQotICAgIGlmKC0tbV9SZWZDb3VudCA8IDEpIHsNCi0gICAgICAgIGRlbGV0ZSB0aGlzOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9TdHJ1Y3RFbGVtZW50SW1wbDo6TG9hZEtpZHMoQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCkNCi17DQotICAgIENQREZfT2JqZWN0KiBwT2JqID0gcERpY3QtPkdldEVsZW1lbnQoRlhfQlNUUkMoIlBnIikpOw0KLSAgICBGWF9EV09SRCBQYWdlT2JqTnVtID0gMDsNCi0gICAgaWYgKHBPYmogJiYgcE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9SRUZFUkVOQ0UpIHsNCi0gICAgICAgIFBhZ2VPYmpOdW0gPSAoKENQREZfUmVmZXJlbmNlKilwT2JqKS0+R2V0UmVmT2JqTnVtKCk7DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QqIHBLaWRzID0gcERpY3QtPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiSyIpKTsNCi0gICAgaWYgKHBLaWRzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAocEtpZHMtPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgIENQREZfQXJyYXkqIHBBcnJheSA9IChDUERGX0FycmF5KilwS2lkczsNCi0gICAgICAgIG1fS2lkcy5TZXRTaXplKHBBcnJheS0+R2V0Q291bnQoKSk7DQotICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcEFycmF5LT5HZXRDb3VudCgpOyBpICsrKSB7DQotICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBLaWQgPSBwQXJyYXktPkdldEVsZW1lbnRWYWx1ZShpKTsNCi0gICAgICAgICAgICBMb2FkS2lkKFBhZ2VPYmpOdW0sIHBLaWQsICZtX0tpZHNbaV0pOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9LaWRzLlNldFNpemUoMSk7DQotICAgICAgICBMb2FkS2lkKFBhZ2VPYmpOdW0sIHBLaWRzLCAmbV9LaWRzWzBdKTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfU3RydWN0RWxlbWVudEltcGw6OkxvYWRLaWQoRlhfRFdPUkQgUGFnZU9iak51bSwgQ1BERl9PYmplY3QqIHBLaWRPYmosIENQREZfU3RydWN0S2lkKiBwS2lkKQ0KLXsNCi0gICAgcEtpZC0+bV9UeXBlID0gQ1BERl9TdHJ1Y3RLaWQ6OkludmFsaWQ7DQotICAgIGlmIChwS2lkT2JqID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAocEtpZE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9OVU1CRVIpIHsNCi0gICAgICAgIGlmIChtX3BUcmVlLT5tX3BQYWdlICYmIG1fcFRyZWUtPm1fcFBhZ2UtPkdldE9iak51bSgpICE9IFBhZ2VPYmpOdW0pIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBwS2lkLT5tX1R5cGUgPSBDUERGX1N0cnVjdEtpZDo6UGFnZUNvbnRlbnQ7DQotICAgICAgICBwS2lkLT5tX1BhZ2VDb250ZW50Lm1fQ29udGVudElkID0gcEtpZE9iai0+R2V0SW50ZWdlcigpOw0KLSAgICAgICAgcEtpZC0+bV9QYWdlQ29udGVudC5tX1BhZ2VPYmpOdW0gPSBQYWdlT2JqTnVtOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChwS2lkT2JqLT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBLaWREaWN0ID0gKENQREZfRGljdGlvbmFyeSopcEtpZE9iajsNCi0gICAgQ1BERl9PYmplY3QqIHBQYWdlT2JqID0gcEtpZERpY3QtPkdldEVsZW1lbnQoRlhfQlNUUkMoIlBnIikpOw0KLSAgICBpZiAocFBhZ2VPYmogJiYgcFBhZ2VPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfUkVGRVJFTkNFKSB7DQotICAgICAgICBQYWdlT2JqTnVtID0gKChDUERGX1JlZmVyZW5jZSopcFBhZ2VPYmopLT5HZXRSZWZPYmpOdW0oKTsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVN0cmluZyB0eXBlID0gcEtpZERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiVHlwZSIpKTsNCi0gICAgaWYgKHR5cGUgPT0gRlhfQlNUUkMoIk1DUiIpKSB7DQotICAgICAgICBpZiAobV9wVHJlZS0+bV9wUGFnZSAmJiBtX3BUcmVlLT5tX3BQYWdlLT5HZXRPYmpOdW0oKSAhPSBQYWdlT2JqTnVtKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcEtpZC0+bV9UeXBlID0gQ1BERl9TdHJ1Y3RLaWQ6OlN0cmVhbUNvbnRlbnQ7DQotICAgICAgICBDUERGX09iamVjdCogcFN0cmVhbU9iaiA9IHBLaWREaWN0LT5HZXRFbGVtZW50KEZYX0JTVFJDKCJTdG0iKSk7DQotICAgICAgICBpZiAocFN0cmVhbU9iaiAmJiBwU3RyZWFtT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX1JFRkVSRU5DRSkgew0KLSAgICAgICAgICAgIHBLaWQtPm1fU3RyZWFtQ29udGVudC5tX1JlZk9iak51bSA9ICgoQ1BERl9SZWZlcmVuY2UqKXBTdHJlYW1PYmopLT5HZXRSZWZPYmpOdW0oKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcEtpZC0+bV9TdHJlYW1Db250ZW50Lm1fUmVmT2JqTnVtID0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIHBLaWQtPm1fU3RyZWFtQ29udGVudC5tX1BhZ2VPYmpOdW0gPSBQYWdlT2JqTnVtOw0KLSAgICAgICAgcEtpZC0+bV9TdHJlYW1Db250ZW50Lm1fQ29udGVudElkID0gcEtpZERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIk1DSUQiKSk7DQotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBGWF9CU1RSQygiT0JKUiIpKSB7DQotICAgICAgICBpZiAobV9wVHJlZS0+bV9wUGFnZSAmJiBtX3BUcmVlLT5tX3BQYWdlLT5HZXRPYmpOdW0oKSAhPSBQYWdlT2JqTnVtKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcEtpZC0+bV9UeXBlID0gQ1BERl9TdHJ1Y3RLaWQ6Ok9iamVjdDsNCi0gICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gcEtpZERpY3QtPkdldEVsZW1lbnQoRlhfQlNUUkMoIk9iaiIpKTsNCi0gICAgICAgIGlmIChwT2JqICYmIHBPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfUkVGRVJFTkNFKSB7DQotICAgICAgICAgICAgcEtpZC0+bV9PYmplY3QubV9SZWZPYmpOdW0gPSAoKENQREZfUmVmZXJlbmNlKilwT2JqKS0+R2V0UmVmT2JqTnVtKCk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHBLaWQtPm1fT2JqZWN0Lm1fUmVmT2JqTnVtID0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIHBLaWQtPm1fT2JqZWN0Lm1fUGFnZU9iak51bSA9IFBhZ2VPYmpOdW07DQotICAgIH0gZWxzZSB7DQotICAgICAgICBwS2lkLT5tX1R5cGUgPSBDUERGX1N0cnVjdEtpZDo6RWxlbWVudDsNCi0gICAgICAgIHBLaWQtPm1fRWxlbWVudC5tX3BEaWN0ID0gcEtpZERpY3Q7DQotICAgICAgICBpZiAobV9wVHJlZS0+bV9wUGFnZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcEtpZC0+bV9FbGVtZW50Lm1fcEVsZW1lbnQgPSBGWF9ORVcgQ1BERl9TdHJ1Y3RFbGVtZW50SW1wbChtX3BUcmVlLCB0aGlzLCBwS2lkRGljdCk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHBLaWQtPm1fRWxlbWVudC5tX3BFbGVtZW50ID0gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1zdGF0aWMgQ1BERl9EaWN0aW9uYXJ5KiBGaW5kQXR0ckRpY3QoQ1BERl9PYmplY3QqIHBBdHRycywgRlhfQlNUUiBvd25lciwgRlhfRkxPQVQgbkxldmVsID0gMC4wRikNCi17DQotICAgIGlmIChuTGV2ZWwgPiBuTWF4UmVjdXJzaW9uKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAocEF0dHJzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSBOVUxMOw0KLSAgICBpZiAocEF0dHJzLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpIHsNCi0gICAgICAgIHBEaWN0ID0gKENQREZfRGljdGlvbmFyeSopcEF0dHJzOw0KLSAgICB9IGVsc2UgaWYgKHBBdHRycy0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJFQU0pIHsNCi0gICAgICAgIHBEaWN0ID0gKChDUERGX1N0cmVhbSopcEF0dHJzKS0+R2V0RGljdCgpOw0KLSAgICB9IGVsc2UgaWYgKHBBdHRycy0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgew0KLSAgICAgICAgQ1BERl9BcnJheSogcEFycmF5ID0gKENQREZfQXJyYXkqKXBBdHRyczsNCi0gICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwQXJyYXktPkdldENvdW50KCk7IGkgKyspIHsNCi0gICAgICAgICAgICBDUERGX09iamVjdCogcEVsZW1lbnQgPSBwQXJyYXktPkdldEVsZW1lbnRWYWx1ZShpKTsNCi0gICAgICAgICAgICBwRGljdCA9IEZpbmRBdHRyRGljdChwRWxlbWVudCwgb3duZXIsIG5MZXZlbCArIDEpOw0KLSAgICAgICAgICAgIGlmIChwRGljdCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gcERpY3Q7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChwRGljdCAmJiBwRGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJPIikpID09IG93bmVyKSB7DQotICAgICAgICByZXR1cm4gcERpY3Q7DQotICAgIH0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLUNQREZfT2JqZWN0KiBDUERGX1N0cnVjdEVsZW1lbnRJbXBsOjpHZXRBdHRyKEZYX0JTVFIgb3duZXIsIEZYX0JTVFIgbmFtZSwgRlhfQk9PTCBiSW5oZXJpdGFibGUsIEZYX0ZMT0FUIGZMZXZlbCkNCi17DQotICAgIGlmIChmTGV2ZWwgPiBuTWF4UmVjdXJzaW9uKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAoYkluaGVyaXRhYmxlKSB7DQotICAgICAgICBDUERGX09iamVjdCogcEF0dHIgPSBHZXRBdHRyKG93bmVyLCBuYW1lLCBGQUxTRSk7DQotICAgICAgICBpZiAocEF0dHIpIHsNCi0gICAgICAgICAgICByZXR1cm4gcEF0dHI7DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9wUGFyZW50ID09IE5VTEwpIHsNCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBtX3BQYXJlbnQtPkdldEF0dHIob3duZXIsIG5hbWUsIFRSVUUsIGZMZXZlbCArIDEpOw0KLSAgICB9DQotICAgIENQREZfT2JqZWN0KiBwQSA9IG1fcERpY3QtPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiQSIpKTsNCi0gICAgaWYgKHBBKSB7DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBBdHRyRGljdCA9IEZpbmRBdHRyRGljdChwQSwgb3duZXIpOw0KLSAgICAgICAgaWYgKHBBdHRyRGljdCkgew0KLSAgICAgICAgICAgIENQREZfT2JqZWN0KiBwQXR0ciA9IHBBdHRyRGljdC0+R2V0RWxlbWVudFZhbHVlKG5hbWUpOw0KLSAgICAgICAgICAgIGlmIChwQXR0cikgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gcEF0dHI7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIENQREZfT2JqZWN0KiBwQyA9IG1fcERpY3QtPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiQyIpKTsNCi0gICAgaWYgKHBDID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcENsYXNzTWFwID0gbV9wVHJlZS0+bV9wVHJlZVJvb3QtPkdldERpY3QoRlhfQlNUUkMoIkNsYXNzTWFwIikpOw0KLSAgICBpZiAocENsYXNzTWFwID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmIChwQy0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgew0KLSAgICAgICAgQ1BERl9BcnJheSogcEFycmF5ID0gKENQREZfQXJyYXkqKXBDOw0KLSAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHBBcnJheS0+R2V0Q291bnQoKTsgaSArKykgew0KLSAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGNsYXNzX25hbWUgPSBwQXJyYXktPkdldFN0cmluZyhpKTsNCi0gICAgICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBDbGFzc0RpY3QgPSBwQ2xhc3NNYXAtPkdldERpY3QoY2xhc3NfbmFtZSk7DQotICAgICAgICAgICAgaWYgKHBDbGFzc0RpY3QgJiYgcENsYXNzRGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJPIikpID09IG93bmVyKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBwQ2xhc3NEaWN0LT5HZXRFbGVtZW50VmFsdWUobmFtZSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgY2xhc3NfbmFtZSA9IHBDLT5HZXRTdHJpbmcoKTsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwQ2xhc3NEaWN0ID0gcENsYXNzTWFwLT5HZXREaWN0KGNsYXNzX25hbWUpOw0KLSAgICBpZiAocENsYXNzRGljdCAmJiBwQ2xhc3NEaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIk8iKSkgPT0gb3duZXIpIHsNCi0gICAgICAgIHJldHVybiBwQ2xhc3NEaWN0LT5HZXRFbGVtZW50VmFsdWUobmFtZSk7DQotICAgIH0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLUNQREZfT2JqZWN0KiBDUERGX1N0cnVjdEVsZW1lbnRJbXBsOjpHZXRBdHRyKEZYX0JTVFIgb3duZXIsIEZYX0JTVFIgbmFtZSwgRlhfQk9PTCBiSW5oZXJpdGFibGUsIGludCBzdWJpbmRleCkNCi17DQotICAgIENQREZfT2JqZWN0KiBwQXR0ciA9IEdldEF0dHIob3duZXIsIG5hbWUsIGJJbmhlcml0YWJsZSk7DQotICAgIGlmIChwQXR0ciA9PSBOVUxMIHx8IHN1YmluZGV4ID09IC0xIHx8IHBBdHRyLT5HZXRUeXBlKCkgIT0gUERGT0JKX0FSUkFZKSB7DQotICAgICAgICByZXR1cm4gcEF0dHI7DQotICAgIH0NCi0gICAgQ1BERl9BcnJheSogcEFycmF5ID0gKENQREZfQXJyYXkqKXBBdHRyOw0KLSAgICBpZiAoc3ViaW5kZXggPj0gKGludClwQXJyYXktPkdldENvdW50KCkpIHsNCi0gICAgICAgIHJldHVybiBwQXR0cjsNCi0gICAgfQ0KLSAgICByZXR1cm4gcEFycmF5LT5HZXRFbGVtZW50VmFsdWUoc3ViaW5kZXgpOw0KLX0NCi1DRlhfQnl0ZVN0cmluZyBDUERGX1N0cnVjdEVsZW1lbnRJbXBsOjpHZXROYW1lKEZYX0JTVFIgb3duZXIsIEZYX0JTVFIgbmFtZSwgRlhfQlNUUiBkZWZhdWx0X3ZhbHVlLCBGWF9CT09MIGJJbmhlcml0YWJsZSwgaW50IHN1YmluZGV4KQ0KLXsNCi0gICAgQ1BERl9PYmplY3QqIHBBdHRyID0gR2V0QXR0cihvd25lciwgbmFtZSwgYkluaGVyaXRhYmxlLCBzdWJpbmRleCk7DQotICAgIGlmIChwQXR0ciA9PSBOVUxMIHx8IHBBdHRyLT5HZXRUeXBlKCkgIT0gUERGT0JKX05BTUUpIHsNCi0gICAgICAgIHJldHVybiBkZWZhdWx0X3ZhbHVlOw0KLSAgICB9DQotICAgIHJldHVybiBwQXR0ci0+R2V0U3RyaW5nKCk7DQotfQ0KLUZYX0FSR0IJQ1BERl9TdHJ1Y3RFbGVtZW50SW1wbDo6R2V0Q29sb3IoRlhfQlNUUiBvd25lciwgRlhfQlNUUiBuYW1lLCBGWF9BUkdCIGRlZmF1bHRfdmFsdWUsIEZYX0JPT0wgYkluaGVyaXRhYmxlLCBpbnQgc3ViaW5kZXgpDQotew0KLSAgICBDUERGX09iamVjdCogcEF0dHIgPSBHZXRBdHRyKG93bmVyLCBuYW1lLCBiSW5oZXJpdGFibGUsIHN1YmluZGV4KTsNCi0gICAgaWYgKHBBdHRyID09IE5VTEwgfHwgcEF0dHItPkdldFR5cGUoKSAhPSBQREZPQkpfQVJSQVkpIHsNCi0gICAgICAgIHJldHVybiBkZWZhdWx0X3ZhbHVlOw0KLSAgICB9DQotICAgIENQREZfQXJyYXkqIHBBcnJheSA9IChDUERGX0FycmF5KilwQXR0cjsNCi0gICAgcmV0dXJuIDB4ZmYwMDAwMDAgfCAoKGludCkocEFycmF5LT5HZXROdW1iZXIoMCkgKiAyNTUpIDw8IDE2KSB8ICgoaW50KShwQXJyYXktPkdldE51bWJlcigxKSAqIDI1NSkgPDwgOCkgfCAoaW50KShwQXJyYXktPkdldE51bWJlcigyKSAqIDI1NSk7DQotfQ0KLUZYX0ZMT0FUIENQREZfU3RydWN0RWxlbWVudEltcGw6OkdldE51bWJlcihGWF9CU1RSIG93bmVyLCBGWF9CU1RSIG5hbWUsIEZYX0ZMT0FUIGRlZmF1bHRfdmFsdWUsIEZYX0JPT0wgYkluaGVyaXRhYmxlLCBpbnQgc3ViaW5kZXgpDQotew0KLSAgICBDUERGX09iamVjdCogcEF0dHIgPSBHZXRBdHRyKG93bmVyLCBuYW1lLCBiSW5oZXJpdGFibGUsIHN1YmluZGV4KTsNCi0gICAgaWYgKHBBdHRyID09IE5VTEwgfHwgcEF0dHItPkdldFR5cGUoKSAhPSBQREZPQkpfTlVNQkVSKSB7DQotICAgICAgICByZXR1cm4gZGVmYXVsdF92YWx1ZTsNCi0gICAgfQ0KLSAgICByZXR1cm4gcEF0dHItPkdldE51bWJlcigpOw0KLX0NCi1pbnQJQ1BERl9TdHJ1Y3RFbGVtZW50SW1wbDo6R2V0SW50ZWdlcihGWF9CU1RSIG93bmVyLCBGWF9CU1RSIG5hbWUsIGludCBkZWZhdWx0X3ZhbHVlLCBGWF9CT09MIGJJbmhlcml0YWJsZSwgaW50IHN1YmluZGV4KQ0KLXsNCi0gICAgQ1BERl9PYmplY3QqIHBBdHRyID0gR2V0QXR0cihvd25lciwgbmFtZSwgYkluaGVyaXRhYmxlLCBzdWJpbmRleCk7DQotICAgIGlmIChwQXR0ciA9PSBOVUxMIHx8IHBBdHRyLT5HZXRUeXBlKCkgIT0gUERGT0JKX05VTUJFUikgew0KLSAgICAgICAgcmV0dXJuIGRlZmF1bHRfdmFsdWU7DQotICAgIH0NCi0gICAgcmV0dXJuIHBBdHRyLT5HZXRJbnRlZ2VyKCk7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYXJzZXIuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mcGRmZG9jL2ZwZGZfdGFnZ2VkLmgiCisjaW5jbHVkZSAidGFnZ2VkX2ludC5oIgorY29uc3QgaW50IG5NYXhSZWN1cnNpb24gPSAzMjsKK3N0YXRpYyBGWF9CT09MIElzVGFnZ2VkKGNvbnN0IENQREZfRG9jdW1lbnQqIHBEb2MpCit7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwQ2F0YWxvZyA9IHBEb2MtPkdldFJvb3QoKTsKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBNYXJrSW5mbyA9IHBDYXRhbG9nLT5HZXREaWN0KEZYX0JTVFJDKCJNYXJrSW5mbyIpKTsKKyAgICByZXR1cm4gcE1hcmtJbmZvICE9IE5VTEwgJiYgcE1hcmtJbmZvLT5HZXRJbnRlZ2VyKEZYX0JTVFJDKCJNYXJrZWQiKSk7Cit9CitDUERGX1N0cnVjdFRyZWUqIENQREZfU3RydWN0VHJlZTo6TG9hZFBhZ2UoY29uc3QgQ1BERl9Eb2N1bWVudCogcERvYywgY29uc3QgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QpCit7CisgICAgaWYgKCFJc1RhZ2dlZChwRG9jKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9TdHJ1Y3RUcmVlSW1wbCogcFRyZWUgPSBGWF9ORVcgQ1BERl9TdHJ1Y3RUcmVlSW1wbChwRG9jKTsKKyAgICBpZiAocFRyZWUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcFRyZWUtPkxvYWRQYWdlVHJlZShwUGFnZURpY3QpOworICAgIHJldHVybiBwVHJlZTsKK30KK0NQREZfU3RydWN0VHJlZSogQ1BERl9TdHJ1Y3RUcmVlOjpMb2FkRG9jKGNvbnN0IENQREZfRG9jdW1lbnQqIHBEb2MpCit7CisgICAgaWYgKCFJc1RhZ2dlZChwRG9jKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9TdHJ1Y3RUcmVlSW1wbCogcFRyZWUgPSBGWF9ORVcgQ1BERl9TdHJ1Y3RUcmVlSW1wbChwRG9jKTsKKyAgICBpZiAocFRyZWUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcFRyZWUtPkxvYWREb2NUcmVlKCk7CisgICAgcmV0dXJuIHBUcmVlOworfQorQ1BERl9TdHJ1Y3RUcmVlSW1wbDo6Q1BERl9TdHJ1Y3RUcmVlSW1wbChjb25zdCBDUERGX0RvY3VtZW50KiBwRG9jKQoreworICAgIENQREZfRGljdGlvbmFyeSogcENhdGFsb2cgPSBwRG9jLT5HZXRSb290KCk7CisgICAgbV9wVHJlZVJvb3QgPSBwQ2F0YWxvZy0+R2V0RGljdChGWF9CU1RSQygiU3RydWN0VHJlZVJvb3QiKSk7CisgICAgaWYgKG1fcFRyZWVSb290ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3BSb2xlTWFwID0gbV9wVHJlZVJvb3QtPkdldERpY3QoRlhfQlNUUkMoIlJvbGVNYXAiKSk7Cit9CitDUERGX1N0cnVjdFRyZWVJbXBsOjp+Q1BERl9TdHJ1Y3RUcmVlSW1wbCgpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX0tpZHMuR2V0U2l6ZSgpOyBpICsrKQorICAgICAgICBpZiAobV9LaWRzW2ldKSB7CisgICAgICAgICAgICBtX0tpZHNbaV0tPlJlbGVhc2UoKTsKKyAgICAgICAgfQorfQordm9pZCBDUERGX1N0cnVjdFRyZWVJbXBsOjpMb2FkRG9jVHJlZSgpCit7CisgICAgbV9wUGFnZSA9IE5VTEw7CisgICAgaWYgKG1fcFRyZWVSb290ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX09iamVjdCogcEtpZHMgPSBtX3BUcmVlUm9vdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJLIikpOworICAgIGlmIChwS2lkcyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHBLaWRzLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgQ1BERl9TdHJ1Y3RFbGVtZW50SW1wbCogcFN0cnVjdEVsZW1lbnRJbXBsID0gRlhfTkVXIENQREZfU3RydWN0RWxlbWVudEltcGwodGhpcywgTlVMTCwgKENQREZfRGljdGlvbmFyeSopcEtpZHMpOworICAgICAgICBpZiAocFN0cnVjdEVsZW1lbnRJbXBsID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX0tpZHMuQWRkKHBTdHJ1Y3RFbGVtZW50SW1wbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHBLaWRzLT5HZXRUeXBlKCkgIT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcEFycmF5ID0gKENQREZfQXJyYXkqKXBLaWRzOworICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwQXJyYXktPkdldENvdW50KCk7IGkgKyspIHsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwS2lkID0gcEFycmF5LT5HZXREaWN0KGkpOworICAgICAgICBDUERGX1N0cnVjdEVsZW1lbnRJbXBsKiBwU3RydWN0RWxlbWVudEltcGwgPSBGWF9ORVcgQ1BERl9TdHJ1Y3RFbGVtZW50SW1wbCh0aGlzLCBOVUxMLCBwS2lkKTsKKyAgICAgICAgaWYgKHBTdHJ1Y3RFbGVtZW50SW1wbCA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9LaWRzLkFkZChwU3RydWN0RWxlbWVudEltcGwpOworICAgIH0KK30KK3ZvaWQgQ1BERl9TdHJ1Y3RUcmVlSW1wbDo6TG9hZFBhZ2VUcmVlKGNvbnN0IENQREZfRGljdGlvbmFyeSogcFBhZ2VEaWN0KQoreworICAgIG1fcFBhZ2UgPSBwUGFnZURpY3Q7CisgICAgaWYgKG1fcFRyZWVSb290ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX09iamVjdCogcEtpZHMgPSBtX3BUcmVlUm9vdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJLIikpOworICAgIGlmIChwS2lkcyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfRFdPUkQgZHdLaWRzID0gMDsKKyAgICBpZiAocEtpZHMtPkdldFR5cGUoKSA9PSBQREZPQkpfRElDVElPTkFSWSkgeworICAgICAgICBkd0tpZHMgPSAxOworICAgIH0gZWxzZSBpZiAocEtpZHMtPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsKKyAgICAgICAgZHdLaWRzID0gKChDUERGX0FycmF5KilwS2lkcyktPkdldENvdW50KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGWF9EV09SRCBpOworICAgIG1fS2lkcy5TZXRTaXplKGR3S2lkcyk7CisgICAgZm9yIChpID0gMDsgaSA8IGR3S2lkczsgaSArKykgeworICAgICAgICBtX0tpZHNbaV0gPSBOVUxMOworICAgIH0KKyAgICBDRlhfTWFwUHRyVG9QdHIgZWxlbWVudF9tYXA7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUGFyZW50VHJlZSA9IG1fcFRyZWVSb290LT5HZXREaWN0KEZYX0JTVFJDKCJQYXJlbnRUcmVlIikpOworICAgIGlmIChwUGFyZW50VHJlZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1BERl9OdW1iZXJUcmVlIHBhcmVudF90cmVlKHBQYXJlbnRUcmVlKTsKKyAgICBpbnQgcGFyZW50c19pZCA9IHBQYWdlRGljdC0+R2V0SW50ZWdlcihGWF9CU1RSQygiU3RydWN0UGFyZW50cyIpLCAtMSk7CisgICAgaWYgKHBhcmVudHNfaWQgPj0gMCkgeworICAgICAgICBDUERGX09iamVjdCogcFBhcmVudHMgPSBwYXJlbnRfdHJlZS5Mb29rdXBWYWx1ZShwYXJlbnRzX2lkKTsKKyAgICAgICAgaWYgKHBQYXJlbnRzID09IE5VTEwgfHwgcFBhcmVudHMtPkdldFR5cGUoKSAhPSBQREZPQkpfQVJSQVkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBDUERGX0FycmF5KiBwUGFyZW50QXJyYXkgPSAoQ1BERl9BcnJheSopcFBhcmVudHM7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwUGFyZW50QXJyYXktPkdldENvdW50KCk7IGkgKyspIHsKKyAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcFBhcmVudCA9IHBQYXJlbnRBcnJheS0+R2V0RGljdChpKTsKKyAgICAgICAgICAgIGlmIChwUGFyZW50ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFkZFBhZ2VOb2RlKHBQYXJlbnQsIGVsZW1lbnRfbWFwKTsKKyAgICAgICAgfQorICAgIH0KK30KK0NQREZfU3RydWN0RWxlbWVudEltcGwqIENQREZfU3RydWN0VHJlZUltcGw6OkFkZFBhZ2VOb2RlKENQREZfRGljdGlvbmFyeSogcERpY3QsIENGWF9NYXBQdHJUb1B0ciYgbWFwLCBpbnQgbkxldmVsKQoreworICAgIGlmIChuTGV2ZWwgPiBuTWF4UmVjdXJzaW9uKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX1N0cnVjdEVsZW1lbnRJbXBsKiBwRWxlbWVudCA9IE5VTEw7CisgICAgaWYgKG1hcC5Mb29rdXAocERpY3QsIChGWF9MUFZPSUQmKXBFbGVtZW50KSkgeworICAgICAgICByZXR1cm4gcEVsZW1lbnQ7CisgICAgfQorICAgIHBFbGVtZW50ID0gRlhfTkVXIENQREZfU3RydWN0RWxlbWVudEltcGwodGhpcywgTlVMTCwgcERpY3QpOworICAgIGlmIChwRWxlbWVudCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBtYXAuU2V0QXQocERpY3QsIHBFbGVtZW50KTsKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBQYXJlbnQgPSBwRGljdC0+R2V0RGljdChGWF9CU1RSQygiUCIpKTsKKyAgICBpZiAocFBhcmVudCA9PSBOVUxMIHx8IHBQYXJlbnQtPkdldFN0cmluZyhGWF9CU1RSQygiVHlwZSIpKSA9PSBGWF9CU1RSQygiU3RydWN0VHJlZVJvb3QiKSkgeworICAgICAgICBpZiAoIUFkZFRvcExldmVsTm9kZShwRGljdCwgcEVsZW1lbnQpKSB7CisgICAgICAgICAgICBwRWxlbWVudC0+UmVsZWFzZSgpOworICAgICAgICAgICAgbWFwLlJlbW92ZUtleShwRGljdCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBDUERGX1N0cnVjdEVsZW1lbnRJbXBsKiBwUGFyZW50RWxlbWVudCA9IEFkZFBhZ2VOb2RlKHBQYXJlbnQsIG1hcCwgbkxldmVsICsgMSk7CisgICAgICAgIEZYX0JPT0wgYlNhdmUgPSBGQUxTRTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwUGFyZW50RWxlbWVudC0+bV9LaWRzLkdldFNpemUoKTsgaSArKykgeworICAgICAgICAgICAgaWYgKHBQYXJlbnRFbGVtZW50LT5tX0tpZHNbaV0ubV9UeXBlICE9IENQREZfU3RydWN0S2lkOjpFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocFBhcmVudEVsZW1lbnQtPm1fS2lkc1tpXS5tX0VsZW1lbnQubV9wRGljdCAhPSBwRGljdCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcFBhcmVudEVsZW1lbnQtPm1fS2lkc1tpXS5tX0VsZW1lbnQubV9wRWxlbWVudCA9IHBFbGVtZW50LT5SZXRhaW4oKTsKKyAgICAgICAgICAgIGJTYXZlID0gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWJTYXZlKSB7CisgICAgICAgICAgICBwRWxlbWVudC0+UmVsZWFzZSgpOworICAgICAgICAgICAgbWFwLlJlbW92ZUtleShwRGljdCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBFbGVtZW50OworfQorRlhfQk9PTCBDUERGX1N0cnVjdFRyZWVJbXBsOjpBZGRUb3BMZXZlbE5vZGUoQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCwgQ1BERl9TdHJ1Y3RFbGVtZW50SW1wbCogcEVsZW1lbnQpCit7CisgICAgQ1BERl9PYmplY3QgKnBPYmogPSBtX3BUcmVlUm9vdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJLIikpOworICAgIGlmICghcE9iaikgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChwT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgaWYgKHBPYmotPkdldE9iak51bSgpID09IHBEaWN0LT5HZXRPYmpOdW0oKSkgeworICAgICAgICAgICAgaWYgKG1fS2lkc1swXSkgeworICAgICAgICAgICAgICAgIG1fS2lkc1swXS0+UmVsZWFzZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9LaWRzWzBdID0gcEVsZW1lbnQtPlJldGFpbigpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgfQorICAgIGlmIChwT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgIENQREZfQXJyYXkqIHBUb3BLaWRzID0gKENQREZfQXJyYXkqKXBPYmo7CisgICAgICAgIEZYX0RXT1JEIGk7CisgICAgICAgIEZYX0JPT0wgYlNhdmUgPSBGQUxTRTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHBUb3BLaWRzLT5HZXRDb3VudCgpOyBpICsrKSB7CisgICAgICAgICAgICBDUERGX1JlZmVyZW5jZSogcEtpZFJlZiA9IChDUERGX1JlZmVyZW5jZSopcFRvcEtpZHMtPkdldEVsZW1lbnQoaSk7CisgICAgICAgICAgICBpZiAocEtpZFJlZi0+R2V0VHlwZSgpICE9IFBERk9CSl9SRUZFUkVOQ0UgfHwgcEtpZFJlZi0+R2V0UmVmT2JqTnVtKCkgIT0gcERpY3QtPkdldE9iak51bSgpKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9LaWRzW2ldKSB7CisgICAgICAgICAgICAgICAgbV9LaWRzW2ldLT5SZWxlYXNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX0tpZHNbaV0gPSBwRWxlbWVudC0+UmV0YWluKCk7CisgICAgICAgICAgICBiU2F2ZSA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFiU2F2ZSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorQ1BERl9TdHJ1Y3RFbGVtZW50SW1wbDo6Q1BERl9TdHJ1Y3RFbGVtZW50SW1wbChDUERGX1N0cnVjdFRyZWVJbXBsKiBwVHJlZSwgQ1BERl9TdHJ1Y3RFbGVtZW50SW1wbCogcFBhcmVudCwgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCkKKyAgICA6IG1fUmVmQ291bnQoMCkKK3sKKyAgICBtX3BUcmVlID0gcFRyZWU7CisgICAgbV9wRGljdCA9IHBEaWN0OworICAgIG1fVHlwZSA9IHBEaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIlMiKSk7CisgICAgQ0ZYX0J5dGVTdHJpbmcgbWFwcGVkID0gcFRyZWUtPm1fcFJvbGVNYXAtPkdldFN0cmluZyhtX1R5cGUpOworICAgIGlmICghbWFwcGVkLklzRW1wdHkoKSkgeworICAgICAgICBtX1R5cGUgPSBtYXBwZWQ7CisgICAgfQorICAgIG1fcFBhcmVudCA9IHBQYXJlbnQ7CisgICAgTG9hZEtpZHMocERpY3QpOworfQorQ1BERl9TdHJ1Y3RFbGVtZW50SW1wbDo6fkNQREZfU3RydWN0RWxlbWVudEltcGwoKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9LaWRzLkdldFNpemUoKTsgaSArKykgeworICAgICAgICBpZiAobV9LaWRzW2ldLm1fVHlwZSA9PSBDUERGX1N0cnVjdEtpZDo6RWxlbWVudCAmJiBtX0tpZHNbaV0ubV9FbGVtZW50Lm1fcEVsZW1lbnQpIHsKKyAgICAgICAgICAgICgoQ1BERl9TdHJ1Y3RFbGVtZW50SW1wbCopbV9LaWRzW2ldLm1fRWxlbWVudC5tX3BFbGVtZW50KS0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgfQorfQorQ1BERl9TdHJ1Y3RFbGVtZW50SW1wbCogQ1BERl9TdHJ1Y3RFbGVtZW50SW1wbDo6UmV0YWluKCkKK3sKKyAgICBtX1JlZkNvdW50Kys7CisgICAgcmV0dXJuIHRoaXM7Cit9Cit2b2lkIENQREZfU3RydWN0RWxlbWVudEltcGw6OlJlbGVhc2UoKQoreworICAgIGlmKC0tbV9SZWZDb3VudCA8IDEpIHsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorfQordm9pZCBDUERGX1N0cnVjdEVsZW1lbnRJbXBsOjpMb2FkS2lkcyhDUERGX0RpY3Rpb25hcnkqIHBEaWN0KQoreworICAgIENQREZfT2JqZWN0KiBwT2JqID0gcERpY3QtPkdldEVsZW1lbnQoRlhfQlNUUkMoIlBnIikpOworICAgIEZYX0RXT1JEIFBhZ2VPYmpOdW0gPSAwOworICAgIGlmIChwT2JqICYmIHBPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfUkVGRVJFTkNFKSB7CisgICAgICAgIFBhZ2VPYmpOdW0gPSAoKENQREZfUmVmZXJlbmNlKilwT2JqKS0+R2V0UmVmT2JqTnVtKCk7CisgICAgfQorICAgIENQREZfT2JqZWN0KiBwS2lkcyA9IHBEaWN0LT5HZXRFbGVtZW50VmFsdWUoRlhfQlNUUkMoIksiKSk7CisgICAgaWYgKHBLaWRzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocEtpZHMtPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpIHsKKyAgICAgICAgQ1BERl9BcnJheSogcEFycmF5ID0gKENQREZfQXJyYXkqKXBLaWRzOworICAgICAgICBtX0tpZHMuU2V0U2l6ZShwQXJyYXktPkdldENvdW50KCkpOworICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcEFycmF5LT5HZXRDb3VudCgpOyBpICsrKSB7CisgICAgICAgICAgICBDUERGX09iamVjdCogcEtpZCA9IHBBcnJheS0+R2V0RWxlbWVudFZhbHVlKGkpOworICAgICAgICAgICAgTG9hZEtpZChQYWdlT2JqTnVtLCBwS2lkLCAmbV9LaWRzW2ldKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG1fS2lkcy5TZXRTaXplKDEpOworICAgICAgICBMb2FkS2lkKFBhZ2VPYmpOdW0sIHBLaWRzLCAmbV9LaWRzWzBdKTsKKyAgICB9Cit9Cit2b2lkIENQREZfU3RydWN0RWxlbWVudEltcGw6OkxvYWRLaWQoRlhfRFdPUkQgUGFnZU9iak51bSwgQ1BERl9PYmplY3QqIHBLaWRPYmosIENQREZfU3RydWN0S2lkKiBwS2lkKQoreworICAgIHBLaWQtPm1fVHlwZSA9IENQREZfU3RydWN0S2lkOjpJbnZhbGlkOworICAgIGlmIChwS2lkT2JqID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocEtpZE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9OVU1CRVIpIHsKKyAgICAgICAgaWYgKG1fcFRyZWUtPm1fcFBhZ2UgJiYgbV9wVHJlZS0+bV9wUGFnZS0+R2V0T2JqTnVtKCkgIT0gUGFnZU9iak51bSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHBLaWQtPm1fVHlwZSA9IENQREZfU3RydWN0S2lkOjpQYWdlQ29udGVudDsKKyAgICAgICAgcEtpZC0+bV9QYWdlQ29udGVudC5tX0NvbnRlbnRJZCA9IHBLaWRPYmotPkdldEludGVnZXIoKTsKKyAgICAgICAgcEtpZC0+bV9QYWdlQ29udGVudC5tX1BhZ2VPYmpOdW0gPSBQYWdlT2JqTnVtOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChwS2lkT2JqLT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBLaWREaWN0ID0gKENQREZfRGljdGlvbmFyeSopcEtpZE9iajsKKyAgICBDUERGX09iamVjdCogcFBhZ2VPYmogPSBwS2lkRGljdC0+R2V0RWxlbWVudChGWF9CU1RSQygiUGciKSk7CisgICAgaWYgKHBQYWdlT2JqICYmIHBQYWdlT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX1JFRkVSRU5DRSkgeworICAgICAgICBQYWdlT2JqTnVtID0gKChDUERGX1JlZmVyZW5jZSopcFBhZ2VPYmopLT5HZXRSZWZPYmpOdW0oKTsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgdHlwZSA9IHBLaWREaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIlR5cGUiKSk7CisgICAgaWYgKHR5cGUgPT0gRlhfQlNUUkMoIk1DUiIpKSB7CisgICAgICAgIGlmIChtX3BUcmVlLT5tX3BQYWdlICYmIG1fcFRyZWUtPm1fcFBhZ2UtPkdldE9iak51bSgpICE9IFBhZ2VPYmpOdW0pIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBwS2lkLT5tX1R5cGUgPSBDUERGX1N0cnVjdEtpZDo6U3RyZWFtQ29udGVudDsKKyAgICAgICAgQ1BERl9PYmplY3QqIHBTdHJlYW1PYmogPSBwS2lkRGljdC0+R2V0RWxlbWVudChGWF9CU1RSQygiU3RtIikpOworICAgICAgICBpZiAocFN0cmVhbU9iaiAmJiBwU3RyZWFtT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX1JFRkVSRU5DRSkgeworICAgICAgICAgICAgcEtpZC0+bV9TdHJlYW1Db250ZW50Lm1fUmVmT2JqTnVtID0gKChDUERGX1JlZmVyZW5jZSopcFN0cmVhbU9iaiktPkdldFJlZk9iak51bSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcEtpZC0+bV9TdHJlYW1Db250ZW50Lm1fUmVmT2JqTnVtID0gMDsKKyAgICAgICAgfQorICAgICAgICBwS2lkLT5tX1N0cmVhbUNvbnRlbnQubV9QYWdlT2JqTnVtID0gUGFnZU9iak51bTsKKyAgICAgICAgcEtpZC0+bV9TdHJlYW1Db250ZW50Lm1fQ29udGVudElkID0gcEtpZERpY3QtPkdldEludGVnZXIoRlhfQlNUUkMoIk1DSUQiKSk7CisgICAgfSBlbHNlIGlmICh0eXBlID09IEZYX0JTVFJDKCJPQkpSIikpIHsKKyAgICAgICAgaWYgKG1fcFRyZWUtPm1fcFBhZ2UgJiYgbV9wVHJlZS0+bV9wUGFnZS0+R2V0T2JqTnVtKCkgIT0gUGFnZU9iak51bSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHBLaWQtPm1fVHlwZSA9IENQREZfU3RydWN0S2lkOjpPYmplY3Q7CisgICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gcEtpZERpY3QtPkdldEVsZW1lbnQoRlhfQlNUUkMoIk9iaiIpKTsKKyAgICAgICAgaWYgKHBPYmogJiYgcE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9SRUZFUkVOQ0UpIHsKKyAgICAgICAgICAgIHBLaWQtPm1fT2JqZWN0Lm1fUmVmT2JqTnVtID0gKChDUERGX1JlZmVyZW5jZSopcE9iaiktPkdldFJlZk9iak51bSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcEtpZC0+bV9PYmplY3QubV9SZWZPYmpOdW0gPSAwOworICAgICAgICB9CisgICAgICAgIHBLaWQtPm1fT2JqZWN0Lm1fUGFnZU9iak51bSA9IFBhZ2VPYmpOdW07CisgICAgfSBlbHNlIHsKKyAgICAgICAgcEtpZC0+bV9UeXBlID0gQ1BERl9TdHJ1Y3RLaWQ6OkVsZW1lbnQ7CisgICAgICAgIHBLaWQtPm1fRWxlbWVudC5tX3BEaWN0ID0gcEtpZERpY3Q7CisgICAgICAgIGlmIChtX3BUcmVlLT5tX3BQYWdlID09IE5VTEwpIHsKKyAgICAgICAgICAgIHBLaWQtPm1fRWxlbWVudC5tX3BFbGVtZW50ID0gRlhfTkVXIENQREZfU3RydWN0RWxlbWVudEltcGwobV9wVHJlZSwgdGhpcywgcEtpZERpY3QpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcEtpZC0+bV9FbGVtZW50Lm1fcEVsZW1lbnQgPSBOVUxMOworICAgICAgICB9CisgICAgfQorfQorc3RhdGljIENQREZfRGljdGlvbmFyeSogRmluZEF0dHJEaWN0KENQREZfT2JqZWN0KiBwQXR0cnMsIEZYX0JTVFIgb3duZXIsIEZYX0ZMT0FUIG5MZXZlbCA9IDAuMEYpCit7CisgICAgaWYgKG5MZXZlbCA+IG5NYXhSZWN1cnNpb24pIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChwQXR0cnMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IE5VTEw7CisgICAgaWYgKHBBdHRycy0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKSB7CisgICAgICAgIHBEaWN0ID0gKENQREZfRGljdGlvbmFyeSopcEF0dHJzOworICAgIH0gZWxzZSBpZiAocEF0dHJzLT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUkVBTSkgeworICAgICAgICBwRGljdCA9ICgoQ1BERl9TdHJlYW0qKXBBdHRycyktPkdldERpY3QoKTsKKyAgICB9IGVsc2UgaWYgKHBBdHRycy0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgeworICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSAoQ1BERl9BcnJheSopcEF0dHJzOworICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcEFycmF5LT5HZXRDb3VudCgpOyBpICsrKSB7CisgICAgICAgICAgICBDUERGX09iamVjdCogcEVsZW1lbnQgPSBwQXJyYXktPkdldEVsZW1lbnRWYWx1ZShpKTsKKyAgICAgICAgICAgIHBEaWN0ID0gRmluZEF0dHJEaWN0KHBFbGVtZW50LCBvd25lciwgbkxldmVsICsgMSk7CisgICAgICAgICAgICBpZiAocERpY3QpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcERpY3Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHBEaWN0ICYmIHBEaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIk8iKSkgPT0gb3duZXIpIHsKKyAgICAgICAgcmV0dXJuIHBEaWN0OworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK0NQREZfT2JqZWN0KiBDUERGX1N0cnVjdEVsZW1lbnRJbXBsOjpHZXRBdHRyKEZYX0JTVFIgb3duZXIsIEZYX0JTVFIgbmFtZSwgRlhfQk9PTCBiSW5oZXJpdGFibGUsIEZYX0ZMT0FUIGZMZXZlbCkKK3sKKyAgICBpZiAoZkxldmVsID4gbk1heFJlY3Vyc2lvbikgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGJJbmhlcml0YWJsZSkgeworICAgICAgICBDUERGX09iamVjdCogcEF0dHIgPSBHZXRBdHRyKG93bmVyLCBuYW1lLCBGQUxTRSk7CisgICAgICAgIGlmIChwQXR0cikgeworICAgICAgICAgICAgcmV0dXJuIHBBdHRyOworICAgICAgICB9CisgICAgICAgIGlmIChtX3BQYXJlbnQgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fcFBhcmVudC0+R2V0QXR0cihvd25lciwgbmFtZSwgVFJVRSwgZkxldmVsICsgMSk7CisgICAgfQorICAgIENQREZfT2JqZWN0KiBwQSA9IG1fcERpY3QtPkdldEVsZW1lbnRWYWx1ZShGWF9CU1RSQygiQSIpKTsKKyAgICBpZiAocEEpIHsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwQXR0ckRpY3QgPSBGaW5kQXR0ckRpY3QocEEsIG93bmVyKTsKKyAgICAgICAgaWYgKHBBdHRyRGljdCkgeworICAgICAgICAgICAgQ1BERl9PYmplY3QqIHBBdHRyID0gcEF0dHJEaWN0LT5HZXRFbGVtZW50VmFsdWUobmFtZSk7CisgICAgICAgICAgICBpZiAocEF0dHIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcEF0dHI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQ1BERl9PYmplY3QqIHBDID0gbV9wRGljdC0+R2V0RWxlbWVudFZhbHVlKEZYX0JTVFJDKCJDIikpOworICAgIGlmIChwQyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBDbGFzc01hcCA9IG1fcFRyZWUtPm1fcFRyZWVSb290LT5HZXREaWN0KEZYX0JTVFJDKCJDbGFzc01hcCIpKTsKKyAgICBpZiAocENsYXNzTWFwID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChwQy0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkgeworICAgICAgICBDUERGX0FycmF5KiBwQXJyYXkgPSAoQ1BERl9BcnJheSopcEM7CisgICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwQXJyYXktPkdldENvdW50KCk7IGkgKyspIHsKKyAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGNsYXNzX25hbWUgPSBwQXJyYXktPkdldFN0cmluZyhpKTsKKyAgICAgICAgICAgIENQREZfRGljdGlvbmFyeSogcENsYXNzRGljdCA9IHBDbGFzc01hcC0+R2V0RGljdChjbGFzc19uYW1lKTsKKyAgICAgICAgICAgIGlmIChwQ2xhc3NEaWN0ICYmIHBDbGFzc0RpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiTyIpKSA9PSBvd25lcikgeworICAgICAgICAgICAgICAgIHJldHVybiBwQ2xhc3NEaWN0LT5HZXRFbGVtZW50VmFsdWUobmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIGNsYXNzX25hbWUgPSBwQy0+R2V0U3RyaW5nKCk7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwQ2xhc3NEaWN0ID0gcENsYXNzTWFwLT5HZXREaWN0KGNsYXNzX25hbWUpOworICAgIGlmIChwQ2xhc3NEaWN0ICYmIHBDbGFzc0RpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiTyIpKSA9PSBvd25lcikgeworICAgICAgICByZXR1cm4gcENsYXNzRGljdC0+R2V0RWxlbWVudFZhbHVlKG5hbWUpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK0NQREZfT2JqZWN0KiBDUERGX1N0cnVjdEVsZW1lbnRJbXBsOjpHZXRBdHRyKEZYX0JTVFIgb3duZXIsIEZYX0JTVFIgbmFtZSwgRlhfQk9PTCBiSW5oZXJpdGFibGUsIGludCBzdWJpbmRleCkKK3sKKyAgICBDUERGX09iamVjdCogcEF0dHIgPSBHZXRBdHRyKG93bmVyLCBuYW1lLCBiSW5oZXJpdGFibGUpOworICAgIGlmIChwQXR0ciA9PSBOVUxMIHx8IHN1YmluZGV4ID09IC0xIHx8IHBBdHRyLT5HZXRUeXBlKCkgIT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgIHJldHVybiBwQXR0cjsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcEFycmF5ID0gKENQREZfQXJyYXkqKXBBdHRyOworICAgIGlmIChzdWJpbmRleCA+PSAoaW50KXBBcnJheS0+R2V0Q291bnQoKSkgeworICAgICAgICByZXR1cm4gcEF0dHI7CisgICAgfQorICAgIHJldHVybiBwQXJyYXktPkdldEVsZW1lbnRWYWx1ZShzdWJpbmRleCk7Cit9CitDRlhfQnl0ZVN0cmluZyBDUERGX1N0cnVjdEVsZW1lbnRJbXBsOjpHZXROYW1lKEZYX0JTVFIgb3duZXIsIEZYX0JTVFIgbmFtZSwgRlhfQlNUUiBkZWZhdWx0X3ZhbHVlLCBGWF9CT09MIGJJbmhlcml0YWJsZSwgaW50IHN1YmluZGV4KQoreworICAgIENQREZfT2JqZWN0KiBwQXR0ciA9IEdldEF0dHIob3duZXIsIG5hbWUsIGJJbmhlcml0YWJsZSwgc3ViaW5kZXgpOworICAgIGlmIChwQXR0ciA9PSBOVUxMIHx8IHBBdHRyLT5HZXRUeXBlKCkgIT0gUERGT0JKX05BTUUpIHsKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRfdmFsdWU7CisgICAgfQorICAgIHJldHVybiBwQXR0ci0+R2V0U3RyaW5nKCk7Cit9CitGWF9BUkdCCUNQREZfU3RydWN0RWxlbWVudEltcGw6OkdldENvbG9yKEZYX0JTVFIgb3duZXIsIEZYX0JTVFIgbmFtZSwgRlhfQVJHQiBkZWZhdWx0X3ZhbHVlLCBGWF9CT09MIGJJbmhlcml0YWJsZSwgaW50IHN1YmluZGV4KQoreworICAgIENQREZfT2JqZWN0KiBwQXR0ciA9IEdldEF0dHIob3duZXIsIG5hbWUsIGJJbmhlcml0YWJsZSwgc3ViaW5kZXgpOworICAgIGlmIChwQXR0ciA9PSBOVUxMIHx8IHBBdHRyLT5HZXRUeXBlKCkgIT0gUERGT0JKX0FSUkFZKSB7CisgICAgICAgIHJldHVybiBkZWZhdWx0X3ZhbHVlOworICAgIH0KKyAgICBDUERGX0FycmF5KiBwQXJyYXkgPSAoQ1BERl9BcnJheSopcEF0dHI7CisgICAgcmV0dXJuIDB4ZmYwMDAwMDAgfCAoKGludCkocEFycmF5LT5HZXROdW1iZXIoMCkgKiAyNTUpIDw8IDE2KSB8ICgoaW50KShwQXJyYXktPkdldE51bWJlcigxKSAqIDI1NSkgPDwgOCkgfCAoaW50KShwQXJyYXktPkdldE51bWJlcigyKSAqIDI1NSk7Cit9CitGWF9GTE9BVCBDUERGX1N0cnVjdEVsZW1lbnRJbXBsOjpHZXROdW1iZXIoRlhfQlNUUiBvd25lciwgRlhfQlNUUiBuYW1lLCBGWF9GTE9BVCBkZWZhdWx0X3ZhbHVlLCBGWF9CT09MIGJJbmhlcml0YWJsZSwgaW50IHN1YmluZGV4KQoreworICAgIENQREZfT2JqZWN0KiBwQXR0ciA9IEdldEF0dHIob3duZXIsIG5hbWUsIGJJbmhlcml0YWJsZSwgc3ViaW5kZXgpOworICAgIGlmIChwQXR0ciA9PSBOVUxMIHx8IHBBdHRyLT5HZXRUeXBlKCkgIT0gUERGT0JKX05VTUJFUikgeworICAgICAgICByZXR1cm4gZGVmYXVsdF92YWx1ZTsKKyAgICB9CisgICAgcmV0dXJuIHBBdHRyLT5HZXROdW1iZXIoKTsKK30KK2ludAlDUERGX1N0cnVjdEVsZW1lbnRJbXBsOjpHZXRJbnRlZ2VyKEZYX0JTVFIgb3duZXIsIEZYX0JTVFIgbmFtZSwgaW50IGRlZmF1bHRfdmFsdWUsIEZYX0JPT0wgYkluaGVyaXRhYmxlLCBpbnQgc3ViaW5kZXgpCit7CisgICAgQ1BERl9PYmplY3QqIHBBdHRyID0gR2V0QXR0cihvd25lciwgbmFtZSwgYkluaGVyaXRhYmxlLCBzdWJpbmRleCk7CisgICAgaWYgKHBBdHRyID09IE5VTEwgfHwgcEF0dHItPkdldFR5cGUoKSAhPSBQREZPQkpfTlVNQkVSKSB7CisgICAgICAgIHJldHVybiBkZWZhdWx0X3ZhbHVlOworICAgIH0KKyAgICByZXR1cm4gcEF0dHItPkdldEludGVnZXIoKTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX3V0aWxzLmNwcCBiL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX3V0aWxzLmNwcAppbmRleCBkZDgxNTk0Li5hZDk1OGFkIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmZG9jL2RvY191dGlscy5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmRvYy9kb2NfdXRpbHMuY3BwCkBAIC0xLDc0OSArMSw3NDkgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZkb2MvZnBkZl9kb2MuaCINCi1zdGF0aWMgY29uc3QgaW50IEZQREZET0NfVVRJTFNfTUFYUkVDVVJTSU9OID0gMzI7DQotQ0ZYX1dpZGVTdHJpbmcJR2V0RnVsbE5hbWUoQ1BERl9EaWN0aW9uYXJ5KiBwRmllbGREaWN0KTsNCi12b2lkCQkJSW5pdEludGVyRm9ybURpY3QoQ1BERl9EaWN0aW9uYXJ5KiYgcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQpOw0KLUZYX0RXT1JECQlDb3VudEludGVyRm9ybUZvbnRzKENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0KTsNCi1DUERGX0ZvbnQqCQlHZXRJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIEZYX0RXT1JEIGluZGV4LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKTsNCi1DUERGX0ZvbnQqCQlHZXRJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIENGWF9CeXRlU3RyaW5nIGNzTmFtZVRhZyk7DQotQ1BERl9Gb250KgkJR2V0SW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDRlhfQnl0ZVN0cmluZyBjc0ZvbnROYW1lLCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKTsNCi1DUERGX0ZvbnQqCQlHZXROYXRpdmVJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIEZYX0JZVEUgY2hhclNldCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZyk7DQotQ1BERl9Gb250KgkJR2V0TmF0aXZlSW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKTsNCi1GWF9CT09MCQkJRmluZEludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QsIGNvbnN0IENQREZfRm9udCogcEZvbnQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOw0KLUZYX0JPT0wJCQlGaW5kSW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDRlhfQnl0ZVN0cmluZyBjc0ZvbnROYW1lLCBDUERGX0ZvbnQqJiBwRm9udCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZyk7DQotdm9pZAkJCUFkZEludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiYgcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENQREZfRm9udCogcEZvbnQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOw0KLUNQREZfRm9udCoJCUFkZE5hdGl2ZUludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiYgcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIEZYX0JZVEUgY2hhclNldCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZyk7DQotQ1BERl9Gb250KgkJQWRkTmF0aXZlSW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqJiBwRm9ybURpY3QsIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZyk7DQotdm9pZAkJCVJlbW92ZUludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QsIGNvbnN0IENQREZfRm9udCogcEZvbnQpOw0KLXZvaWQJCQlSZW1vdmVJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBDRlhfQnl0ZVN0cmluZyBjc05hbWVUYWcpOw0KLUNQREZfRm9udCoJCUdldERlZmF1bHRJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQpOw0KLXZvaWQJCQlTZXREZWZhdWx0SW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqJiBwRm9ybURpY3QsIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ1BERl9Gb250KiBwRm9udCk7DQotdm9pZAkJCVNhdmVDaGVja2VkRmllbGRTdGF0dXMoQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCwgQ0ZYX0J5dGVBcnJheSYgc3RhdHVzQXJyYXkpOw0KLUZYX0JPT0wJCQlOZWVkUERGRW5jb2RlRm9yRmllbGRGdWxsTmFtZShjb25zdCBDRlhfV2lkZVN0cmluZyYgY3NGaWVsZE5hbWUpOw0KLUZYX0JPT0wJCQlOZWVkUERGRW5jb2RlRm9yRmllbGRUcmVlKENQREZfRGljdGlvbmFyeSogcEZpZWxkRGljdCwgaW50IG5MZXZlbCA9IDApOw0KLXZvaWQJCQlFbmNvZGVGaWVsZE5hbWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIGNzTmFtZSwgQ0ZYX0J5dGVTdHJpbmcmIGNzVCk7DQotdm9pZAkJCVVwZGF0ZUVuY29kZUZpZWxkTmFtZShDUERGX0RpY3Rpb25hcnkqIHBGaWVsZERpY3QsIGludCBuTGV2ZWwgPSAwKTsNCi1DRlhfV2lkZVN0cmluZyBHZXRGdWxsTmFtZShDUERGX0RpY3Rpb25hcnkqIHBGaWVsZERpY3QpDQotew0KLSAgICBDRlhfV2lkZVN0cmluZyBmdWxsX25hbWU7DQotICAgIENQREZfRGljdGlvbmFyeSogcExldmVsID0gcEZpZWxkRGljdDsNCi0gICAgd2hpbGUgKHBMZXZlbCkgew0KLSAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgc2hvcnRfbmFtZSA9IHBMZXZlbC0+R2V0VW5pY29kZVRleHQoIlQiKTsNCi0gICAgICAgIGlmIChzaG9ydF9uYW1lICE9IEwiIikgew0KLSAgICAgICAgICAgIGlmIChmdWxsX25hbWUgPT0gTCIiKSB7DQotICAgICAgICAgICAgICAgIGZ1bGxfbmFtZSA9IHNob3J0X25hbWU7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgZnVsbF9uYW1lID0gc2hvcnRfbmFtZSArIEwiLiIgKyBmdWxsX25hbWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcExldmVsID0gcExldmVsLT5HZXREaWN0KCJQYXJlbnQiKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gZnVsbF9uYW1lOw0KLX0NCi1GWF9CT09MIENQREZfRGVmYXVsdEFwcGVhcmFuY2U6Okhhc0ZvbnQoKQ0KLXsNCi0gICAgaWYgKG1fY3NEQS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDUERGX1NpbXBsZVBhcnNlciBzeW50YXgobV9jc0RBKTsNCi0gICAgcmV0dXJuIHN5bnRheC5GaW5kVGFnUGFyYW0oIlRmIiwgMik7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENQREZfRGVmYXVsdEFwcGVhcmFuY2U6OkdldEZvbnRTdHJpbmcoKQ0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgY3NGb250Ow0KLSAgICBpZiAobV9jc0RBLklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuIGNzRm9udDsNCi0gICAgfQ0KLSAgICBDUERGX1NpbXBsZVBhcnNlciBzeW50YXgobV9jc0RBKTsNCi0gICAgaWYgKHN5bnRheC5GaW5kVGFnUGFyYW0oIlRmIiwgMikpIHsNCi0gICAgICAgIGNzRm9udCArPSAoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKTsNCi0gICAgICAgIGNzRm9udCArPSAiICI7DQotICAgICAgICBjc0ZvbnQgKz0gKENGWF9CeXRlU3RyaW5nKXN5bnRheC5HZXRXb3JkKCk7DQotICAgICAgICBjc0ZvbnQgKz0gIiAiOw0KLSAgICAgICAgY3NGb250ICs9IChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpOw0KLSAgICB9DQotICAgIHJldHVybiBjc0ZvbnQ7DQotfQ0KLXZvaWQgQ1BERl9EZWZhdWx0QXBwZWFyYW5jZTo6R2V0Rm9udChDRlhfQnl0ZVN0cmluZyYgY3NGb250TmFtZVRhZywgRlhfRkxPQVQmIGZGb250U2l6ZSkNCi17DQotICAgIGNzRm9udE5hbWVUYWcgPSAiIjsNCi0gICAgZkZvbnRTaXplID0gMDsNCi0gICAgaWYgKG1fY3NEQS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDUERGX1NpbXBsZVBhcnNlciBzeW50YXgobV9jc0RBKTsNCi0gICAgaWYgKHN5bnRheC5GaW5kVGFnUGFyYW0oIlRmIiwgMikpIHsNCi0gICAgICAgIGNzRm9udE5hbWVUYWcgPSAoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKTsNCi0gICAgICAgIGNzRm9udE5hbWVUYWcuRGVsZXRlKDAsIDEpOw0KLSAgICAgICAgZkZvbnRTaXplID0gRlhfYXRvZigoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKSk7DQotICAgIH0NCi0gICAgY3NGb250TmFtZVRhZyA9IFBERl9OYW1lRGVjb2RlKGNzRm9udE5hbWVUYWcpOw0KLX0NCi1GWF9CT09MIENQREZfRGVmYXVsdEFwcGVhcmFuY2U6Okhhc0NvbG9yKEZYX0JPT0wgYlN0cm9raW5nT3BlcmF0aW9uKQ0KLXsNCi0gICAgaWYgKG1fY3NEQS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDUERGX1NpbXBsZVBhcnNlciBzeW50YXgobV9jc0RBKTsNCi0gICAgaWYgKHN5bnRheC5GaW5kVGFnUGFyYW0oYlN0cm9raW5nT3BlcmF0aW9uID8gIkciIDogImciLCAxKSkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgc3ludGF4LlNldFBvcygwKTsNCi0gICAgaWYgKHN5bnRheC5GaW5kVGFnUGFyYW0oYlN0cm9raW5nT3BlcmF0aW9uID8gIlJHIiA6ICJyZyIsIDMpKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBzeW50YXguU2V0UG9zKDApOw0KLSAgICByZXR1cm4gc3ludGF4LkZpbmRUYWdQYXJhbShiU3Ryb2tpbmdPcGVyYXRpb24gPyAiSyIgOiAiayIsIDQpOw0KLX0NCi1DRlhfQnl0ZVN0cmluZyBDUERGX0RlZmF1bHRBcHBlYXJhbmNlOjpHZXRDb2xvclN0cmluZyhGWF9CT09MIGJTdHJva2luZ09wZXJhdGlvbikNCi17DQotICAgIENGWF9CeXRlU3RyaW5nIGNzQ29sb3I7DQotICAgIGlmIChtX2NzREEuSXNFbXB0eSgpKSB7DQotICAgICAgICByZXR1cm4gY3NDb2xvcjsNCi0gICAgfQ0KLSAgICBDUERGX1NpbXBsZVBhcnNlciBzeW50YXgobV9jc0RBKTsNCi0gICAgaWYgKHN5bnRheC5GaW5kVGFnUGFyYW0oYlN0cm9raW5nT3BlcmF0aW9uID8gIkciIDogImciLCAxKSkgew0KLSAgICAgICAgY3NDb2xvciArPSAoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKTsNCi0gICAgICAgIGNzQ29sb3IgKz0gIiAiOw0KLSAgICAgICAgY3NDb2xvciArPSAoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKTsNCi0gICAgICAgIHJldHVybiBjc0NvbG9yOw0KLSAgICB9DQotICAgIHN5bnRheC5TZXRQb3MoMCk7DQotICAgIGlmIChzeW50YXguRmluZFRhZ1BhcmFtKGJTdHJva2luZ09wZXJhdGlvbiA/ICJSRyIgOiAicmciLCAzKSkgew0KLSAgICAgICAgY3NDb2xvciArPSAoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKTsNCi0gICAgICAgIGNzQ29sb3IgKz0gIiAiOw0KLSAgICAgICAgY3NDb2xvciArPSAoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKTsNCi0gICAgICAgIGNzQ29sb3IgKz0gIiAiOw0KLSAgICAgICAgY3NDb2xvciArPSAoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKTsNCi0gICAgICAgIGNzQ29sb3IgKz0gIiAiOw0KLSAgICAgICAgY3NDb2xvciArPSAoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKTsNCi0gICAgICAgIHJldHVybiBjc0NvbG9yOw0KLSAgICB9DQotICAgIHN5bnRheC5TZXRQb3MoMCk7DQotICAgIGlmIChzeW50YXguRmluZFRhZ1BhcmFtKGJTdHJva2luZ09wZXJhdGlvbiA/ICJLIiA6ICJrIiwgNCkpIHsNCi0gICAgICAgIGNzQ29sb3IgKz0gKENGWF9CeXRlU3RyaW5nKXN5bnRheC5HZXRXb3JkKCk7DQotICAgICAgICBjc0NvbG9yICs9ICIgIjsNCi0gICAgICAgIGNzQ29sb3IgKz0gKENGWF9CeXRlU3RyaW5nKXN5bnRheC5HZXRXb3JkKCk7DQotICAgICAgICBjc0NvbG9yICs9ICIgIjsNCi0gICAgICAgIGNzQ29sb3IgKz0gKENGWF9CeXRlU3RyaW5nKXN5bnRheC5HZXRXb3JkKCk7DQotICAgICAgICBjc0NvbG9yICs9ICIgIjsNCi0gICAgICAgIGNzQ29sb3IgKz0gKENGWF9CeXRlU3RyaW5nKXN5bnRheC5HZXRXb3JkKCk7DQotICAgICAgICBjc0NvbG9yICs9ICIgIjsNCi0gICAgICAgIGNzQ29sb3IgKz0gKENGWF9CeXRlU3RyaW5nKXN5bnRheC5HZXRXb3JkKCk7DQotICAgIH0NCi0gICAgcmV0dXJuIGNzQ29sb3I7DQotfQ0KLXZvaWQgQ1BERl9EZWZhdWx0QXBwZWFyYW5jZTo6R2V0Q29sb3IoaW50JiBpQ29sb3JUeXBlLCBGWF9GTE9BVCBmY1s0XSwgRlhfQk9PTCBiU3Ryb2tpbmdPcGVyYXRpb24pDQotew0KLSAgICBpQ29sb3JUeXBlID0gQ09MT1JUWVBFX1RSQU5TUEFSRU5UOw0KLSAgICBmb3IgKGludCBjID0gMDsgYyA8IDQ7IGMgKyspIHsNCi0gICAgICAgIGZjW2NdID0gMDsNCi0gICAgfQ0KLSAgICBpZiAobV9jc0RBLklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfU2ltcGxlUGFyc2VyIHN5bnRheChtX2NzREEpOw0KLSAgICBpZiAoc3ludGF4LkZpbmRUYWdQYXJhbShiU3Ryb2tpbmdPcGVyYXRpb24gPyAiRyIgOiAiZyIsIDEpKSB7DQotICAgICAgICBpQ29sb3JUeXBlID0gQ09MT1JUWVBFX0dSQVk7DQotICAgICAgICBmY1swXSA9IEZYX2F0b2YoKENGWF9CeXRlU3RyaW5nKXN5bnRheC5HZXRXb3JkKCkpOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHN5bnRheC5TZXRQb3MoMCk7DQotICAgIGlmIChzeW50YXguRmluZFRhZ1BhcmFtKGJTdHJva2luZ09wZXJhdGlvbiA/ICJSRyIgOiAicmciLCAzKSkgew0KLSAgICAgICAgaUNvbG9yVHlwZSA9IENPTE9SVFlQRV9SR0I7DQotICAgICAgICBmY1swXSA9IEZYX2F0b2YoKENGWF9CeXRlU3RyaW5nKXN5bnRheC5HZXRXb3JkKCkpOw0KLSAgICAgICAgZmNbMV0gPSBGWF9hdG9mKChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpKTsNCi0gICAgICAgIGZjWzJdID0gRlhfYXRvZigoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKSk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgc3ludGF4LlNldFBvcygwKTsNCi0gICAgaWYgKHN5bnRheC5GaW5kVGFnUGFyYW0oYlN0cm9raW5nT3BlcmF0aW9uID8gIksiIDogImsiLCA0KSkgew0KLSAgICAgICAgaUNvbG9yVHlwZSA9IENPTE9SVFlQRV9DTVlLOw0KLSAgICAgICAgZmNbMF0gPSBGWF9hdG9mKChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpKTsNCi0gICAgICAgIGZjWzFdID0gRlhfYXRvZigoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKSk7DQotICAgICAgICBmY1syXSA9IEZYX2F0b2YoKENGWF9CeXRlU3RyaW5nKXN5bnRheC5HZXRXb3JkKCkpOw0KLSAgICAgICAgZmNbM10gPSBGWF9hdG9mKChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpKTsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfRGVmYXVsdEFwcGVhcmFuY2U6OkdldENvbG9yKEZYX0FSR0ImIGNvbG9yLCBpbnQmIGlDb2xvclR5cGUsIEZYX0JPT0wgYlN0cm9raW5nT3BlcmF0aW9uKQ0KLXsNCi0gICAgY29sb3IgPSAwOw0KLSAgICBpQ29sb3JUeXBlID0gQ09MT1JUWVBFX1RSQU5TUEFSRU5UOw0KLSAgICBpZiAobV9jc0RBLklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfU2ltcGxlUGFyc2VyIHN5bnRheChtX2NzREEpOw0KLSAgICBpZiAoc3ludGF4LkZpbmRUYWdQYXJhbShiU3Ryb2tpbmdPcGVyYXRpb24gPyAiRyIgOiAiZyIsIDEpKSB7DQotICAgICAgICBpQ29sb3JUeXBlID0gQ09MT1JUWVBFX0dSQVk7DQotICAgICAgICBGWF9GTE9BVCBnID0gRlhfYXRvZigoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKSkgKiAyNTUgKyAwLjVmOw0KLSAgICAgICAgY29sb3IgPSBBcmdiRW5jb2RlKDI1NSwgKGludClnLCAoaW50KWcsIChpbnQpZyk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgc3ludGF4LlNldFBvcygwKTsNCi0gICAgaWYgKHN5bnRheC5GaW5kVGFnUGFyYW0oYlN0cm9raW5nT3BlcmF0aW9uID8gIlJHIiA6ICJyZyIsIDMpKSB7DQotICAgICAgICBpQ29sb3JUeXBlID0gQ09MT1JUWVBFX1JHQjsNCi0gICAgICAgIEZYX0ZMT0FUIHIgPSBGWF9hdG9mKChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpKSAqIDI1NSArIDAuNWY7DQotICAgICAgICBGWF9GTE9BVCBnID0gRlhfYXRvZigoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKSkgKiAyNTUgKyAwLjVmOw0KLSAgICAgICAgRlhfRkxPQVQgYiA9IEZYX2F0b2YoKENGWF9CeXRlU3RyaW5nKXN5bnRheC5HZXRXb3JkKCkpICogMjU1ICsgMC41ZjsNCi0gICAgICAgIGNvbG9yID0gQXJnYkVuY29kZSgyNTUsIChpbnQpciwgKGludClnLCAoaW50KWIpOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHN5bnRheC5TZXRQb3MoMCk7DQotICAgIGlmIChzeW50YXguRmluZFRhZ1BhcmFtKGJTdHJva2luZ09wZXJhdGlvbiA/ICJLIiA6ICJrIiwgNCkpIHsNCi0gICAgICAgIGlDb2xvclR5cGUgPSBDT0xPUlRZUEVfQ01ZSzsNCi0gICAgICAgIEZYX0ZMT0FUIGMgPSBGWF9hdG9mKChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpKTsNCi0gICAgICAgIEZYX0ZMT0FUIG0gPSBGWF9hdG9mKChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpKTsNCi0gICAgICAgIEZYX0ZMT0FUIHkgPSBGWF9hdG9mKChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpKTsNCi0gICAgICAgIEZYX0ZMT0FUIGsgPSBGWF9hdG9mKChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpKTsNCi0gICAgICAgIEZYX0ZMT0FUIHIgPSAxLjBmIC0gRlhfTUlOKDEuMGYsIGMgKyBrKTsNCi0gICAgICAgIEZYX0ZMT0FUIGcgPSAxLjBmIC0gRlhfTUlOKDEuMGYsIG0gKyBrKTsNCi0gICAgICAgIEZYX0ZMT0FUIGIgPSAxLjBmIC0gRlhfTUlOKDEuMGYsIHkgKyBrKTsNCi0gICAgICAgIGNvbG9yID0gQXJnYkVuY29kZSgyNTUsIChpbnQpKHIgKiAyNTUgKyAwLjVmKSwgKGludCkoZyAqIDI1NSArIDAuNWYpLCAoaW50KShiICogMjU1ICsgMC41ZikpOw0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BERl9EZWZhdWx0QXBwZWFyYW5jZTo6SGFzVGV4dE1hdHJpeCgpDQotew0KLSAgICBpZiAobV9jc0RBLklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIENQREZfU2ltcGxlUGFyc2VyIHN5bnRheChtX2NzREEpOw0KLSAgICByZXR1cm4gc3ludGF4LkZpbmRUYWdQYXJhbSgiVG0iLCA2KTsNCi19DQotQ0ZYX0J5dGVTdHJpbmcgQ1BERl9EZWZhdWx0QXBwZWFyYW5jZTo6R2V0VGV4dE1hdHJpeFN0cmluZygpDQotew0KLSAgICBDRlhfQnl0ZVN0cmluZyBjc1RNOw0KLSAgICBpZiAobV9jc0RBLklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuIGNzVE07DQotICAgIH0NCi0gICAgQ1BERl9TaW1wbGVQYXJzZXIgc3ludGF4KG1fY3NEQSk7DQotICAgIGlmIChzeW50YXguRmluZFRhZ1BhcmFtKCJUbSIsIDYpKSB7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkgKyspIHsNCi0gICAgICAgICAgICBjc1RNICs9IChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpOw0KLSAgICAgICAgICAgIGNzVE0gKz0gIiAiOw0KLSAgICAgICAgfQ0KLSAgICAgICAgY3NUTSArPSAoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gY3NUTTsNCi19DQotQ0ZYX0FmZmluZU1hdHJpeCBDUERGX0RlZmF1bHRBcHBlYXJhbmNlOjpHZXRUZXh0TWF0cml4KCkNCi17DQotICAgIENGWF9BZmZpbmVNYXRyaXggdG07DQotICAgIGlmIChtX2NzREEuSXNFbXB0eSgpKSB7DQotICAgICAgICByZXR1cm4gdG07DQotICAgIH0NCi0gICAgQ1BERl9TaW1wbGVQYXJzZXIgc3ludGF4KG1fY3NEQSk7DQotICAgIGlmIChzeW50YXguRmluZFRhZ1BhcmFtKCJUbSIsIDYpKSB7DQotICAgICAgICBGWF9GTE9BVCBmWzZdOw0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpICsrKSB7DQotICAgICAgICAgICAgZltpXSA9IEZYX2F0b2YoKENGWF9CeXRlU3RyaW5nKXN5bnRheC5HZXRXb3JkKCkpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgdG0uU2V0KGZbMF0sIGZbMV0sIGZbMl0sIGZbM10sIGZbNF0sIGZbNV0pOw0KLSAgICB9DQotICAgIHJldHVybiB0bTsNCi19DQotdm9pZCBJbml0SW50ZXJGb3JtRGljdChDUERGX0RpY3Rpb25hcnkqJiBwRm9ybURpY3QsIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCkNCi17DQotICAgIGlmIChwRG9jdW1lbnQgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChwRm9ybURpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcEZvcm1EaWN0ID0gQ1BERl9EaWN0aW9uYXJ5OjpDcmVhdGUoKTsNCi0gICAgICAgIGlmIChwRm9ybURpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0RXT1JEIGR3T2JqTnVtID0gcERvY3VtZW50LT5BZGRJbmRpcmVjdE9iamVjdChwRm9ybURpY3QpOw0KLSAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUm9vdCA9IHBEb2N1bWVudC0+R2V0Um9vdCgpOw0KLSAgICAgICAgcFJvb3QtPlNldEF0UmVmZXJlbmNlKCJBY3JvRm9ybSIsIHBEb2N1bWVudCwgZHdPYmpOdW0pOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIGNzREE7DQotICAgIGlmICghcEZvcm1EaWN0LT5LZXlFeGlzdCgiRFIiKSkgew0KLSAgICAgICAgQ1BERl9Gb250KiBwRm9udCA9IE5VTEw7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyBjc0Jhc2VOYW1lLCBjc0RlZmF1bHQ7DQotICAgICAgICBGWF9CWVRFIGNoYXJTZXQgPSBDUERGX0ludGVyRm9ybTo6R2V0TmF0aXZlQ2hhclNldCgpOw0KLSAgICAgICAgcEZvbnQgPSBDUERGX0ludGVyRm9ybTo6QWRkU3RhbmRhcmRGb250KHBEb2N1bWVudCwgIkhlbHZldGljYSIpOw0KLSAgICAgICAgaWYgKHBGb250ICE9IE5VTEwpIHsNCi0gICAgICAgICAgICBBZGRJbnRlckZvcm1Gb250KHBGb3JtRGljdCwgcERvY3VtZW50LCBwRm9udCwgY3NCYXNlTmFtZSk7DQotICAgICAgICAgICAgY3NEZWZhdWx0ID0gY3NCYXNlTmFtZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChjaGFyU2V0ICE9IDApIHsNCi0gICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBjc0ZvbnROYW1lID0gQ1BERl9JbnRlckZvcm06OkdldE5hdGl2ZUZvbnQoY2hhclNldCwgTlVMTCk7DQotICAgICAgICAgICAgaWYgKHBGb250ID09IE5VTEwgfHwgY3NGb250TmFtZSAhPSAiSGVsdmV0aWNhIikgew0KLSAgICAgICAgICAgICAgICBwRm9udCA9IENQREZfSW50ZXJGb3JtOjpBZGROYXRpdmVGb250KHBEb2N1bWVudCk7DQotICAgICAgICAgICAgICAgIGlmIChwRm9udCAhPSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICBjc0Jhc2VOYW1lID0gIiI7DQotICAgICAgICAgICAgICAgICAgICBBZGRJbnRlckZvcm1Gb250KHBGb3JtRGljdCwgcERvY3VtZW50LCBwRm9udCwgY3NCYXNlTmFtZSk7DQotICAgICAgICAgICAgICAgICAgICBjc0RlZmF1bHQgPSBjc0Jhc2VOYW1lOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBGb250ICE9IE5VTEwpIHsNCi0gICAgICAgICAgICBjc0RBID0gIi8iICsgUERGX05hbWVFbmNvZGUoY3NEZWZhdWx0KSArICIgMCBUZiI7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKCFjc0RBLklzRW1wdHkoKSkgew0KLSAgICAgICAgY3NEQSArPSAiICI7DQotICAgIH0NCi0gICAgY3NEQSArPSAiMCBnIjsNCi0gICAgaWYgKCFwRm9ybURpY3QtPktleUV4aXN0KCJEQSIpKSB7DQotICAgICAgICBwRm9ybURpY3QtPlNldEF0U3RyaW5nKCJEQSIsIGNzREEpOw0KLSAgICB9DQotfQ0KLUZYX0RXT1JEIENvdW50SW50ZXJGb3JtRm9udHMoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QpDQotew0KLSAgICBpZiAocEZvcm1EaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcERSID0gcEZvcm1EaWN0LT5HZXREaWN0KCJEUiIpOw0KLSAgICBpZiAocERSID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcEZvbnRzID0gcERSLT5HZXREaWN0KCJGb250Iik7DQotICAgIGlmIChwRm9udHMgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgRlhfRFdPUkQgZHdDb3VudCA9IDA7DQotICAgIEZYX1BPU0lUSU9OIHBvcyA9IHBGb250cy0+R2V0U3RhcnRQb3MoKTsNCi0gICAgd2hpbGUgKHBvcykgew0KLSAgICAgICAgQ1BERl9PYmplY3QqIHBPYmogPSBOVUxMOw0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3NLZXk7DQotICAgICAgICBwT2JqID0gcEZvbnRzLT5HZXROZXh0RWxlbWVudChwb3MsIGNzS2V5KTsNCi0gICAgICAgIGlmIChwT2JqID09IE5VTEwpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIENQREZfT2JqZWN0KiBwRGlyZWN0ID0gcE9iai0+R2V0RGlyZWN0KCk7DQotICAgICAgICBpZiAocERpcmVjdCAhPSBOVUxMICYmIHBEaXJlY3QtPkdldFR5cGUoKSA9PSBQREZPQkpfRElDVElPTkFSWSkgew0KLSAgICAgICAgICAgIGlmICgoKENQREZfRGljdGlvbmFyeSopcERpcmVjdCktPkdldFN0cmluZygiVHlwZSIpID09ICJGb250Iikgew0KLSAgICAgICAgICAgICAgICBkd0NvdW50ICsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gZHdDb3VudDsNCi19DQotQ1BERl9Gb250KiBHZXRJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIEZYX0RXT1JEIGluZGV4LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKQ0KLXsNCi0gICAgaWYgKHBGb3JtRGljdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBEUiA9IHBGb3JtRGljdC0+R2V0RGljdCgiRFIiKTsNCi0gICAgaWYgKHBEUiA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBGb250cyA9IHBEUi0+R2V0RGljdCgiRm9udCIpOw0KLSAgICBpZiAocEZvbnRzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIEZYX0RXT1JEIGR3Q291bnQgPSAwOw0KLSAgICBGWF9QT1NJVElPTiBwb3MgPSBwRm9udHMtPkdldFN0YXJ0UG9zKCk7DQotICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gTlVMTDsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIGNzS2V5Ow0KLSAgICAgICAgcE9iaiA9IHBGb250cy0+R2V0TmV4dEVsZW1lbnQocG9zLCBjc0tleSk7DQotICAgICAgICBpZiAocE9iaiA9PSBOVUxMKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBDUERGX09iamVjdCogcERpcmVjdCA9IHBPYmotPkdldERpcmVjdCgpOw0KLSAgICAgICAgaWYgKHBEaXJlY3QgPT0gTlVMTCB8fCBwRGlyZWN0LT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIENQREZfRGljdGlvbmFyeSogcEVsZW1lbnQgPSAoQ1BERl9EaWN0aW9uYXJ5KilwRGlyZWN0Ow0KLSAgICAgICAgaWYgKHBFbGVtZW50LT5HZXRTdHJpbmcoIlR5cGUiKSAhPSAiRm9udCIpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChkd0NvdW50ID09IGluZGV4KSB7DQotICAgICAgICAgICAgY3NOYW1lVGFnID0gY3NLZXk7DQotICAgICAgICAgICAgcmV0dXJuIHBEb2N1bWVudC0+TG9hZEZvbnQocEVsZW1lbnQpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZHdDb3VudCArKzsNCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotQ1BERl9Gb250KiBHZXRJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIENGWF9CeXRlU3RyaW5nIGNzTmFtZVRhZykNCi17DQotICAgIENGWF9CeXRlU3RyaW5nIGNzQWxpYXMgPSBQREZfTmFtZURlY29kZShjc05hbWVUYWcpOw0KLSAgICBpZiAocEZvcm1EaWN0ID09IE5VTEwgfHwgY3NBbGlhcy5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcERSID0gcEZvcm1EaWN0LT5HZXREaWN0KCJEUiIpOw0KLSAgICBpZiAocERSID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcEZvbnRzID0gcERSLT5HZXREaWN0KCJGb250Iik7DQotICAgIGlmIChwRm9udHMgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRWxlbWVudCA9IHBGb250cy0+R2V0RGljdChjc0FsaWFzKTsNCi0gICAgaWYgKHBFbGVtZW50ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmIChwRWxlbWVudC0+R2V0U3RyaW5nKCJUeXBlIikgPT0gIkZvbnQiKSB7DQotICAgICAgICByZXR1cm4gcERvY3VtZW50LT5Mb2FkRm9udChwRWxlbWVudCk7DQotICAgIH0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLUNQREZfRm9udCogR2V0SW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDRlhfQnl0ZVN0cmluZyBjc0ZvbnROYW1lLCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKQ0KLXsNCi0gICAgaWYgKHBGb3JtRGljdCA9PSBOVUxMIHx8IGNzRm9udE5hbWUuSXNFbXB0eSgpKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBEUiA9IHBGb3JtRGljdC0+R2V0RGljdCgiRFIiKTsNCi0gICAgaWYgKHBEUiA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBGb250cyA9IHBEUi0+R2V0RGljdCgiRm9udCIpOw0KLSAgICBpZiAocEZvbnRzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIEZYX1BPU0lUSU9OIHBvcyA9IHBGb250cy0+R2V0U3RhcnRQb3MoKTsNCi0gICAgd2hpbGUgKHBvcykgew0KLSAgICAgICAgQ1BERl9PYmplY3QqIHBPYmogPSBOVUxMOw0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3NLZXk7DQotICAgICAgICBwT2JqID0gcEZvbnRzLT5HZXROZXh0RWxlbWVudChwb3MsIGNzS2V5KTsNCi0gICAgICAgIGlmIChwT2JqID09IE5VTEwpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIENQREZfT2JqZWN0KiBwRGlyZWN0ID0gcE9iai0+R2V0RGlyZWN0KCk7DQotICAgICAgICBpZiAocERpcmVjdCA9PSBOVUxMIHx8IHBEaXJlY3QtPkdldFR5cGUoKSAhPSBQREZPQkpfRElDVElPTkFSWSkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRWxlbWVudCA9IChDUERGX0RpY3Rpb25hcnkqKXBEaXJlY3Q7DQotICAgICAgICBpZiAocEVsZW1lbnQtPkdldFN0cmluZygiVHlwZSIpICE9ICJGb250Iikgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1BERl9Gb250KiBwRmluZCA9IHBEb2N1bWVudC0+TG9hZEZvbnQocEVsZW1lbnQpOw0KLSAgICAgICAgaWYgKHBGaW5kID09IE5VTEwpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIGNzQmFzZUZvbnQ7DQotICAgICAgICBjc0Jhc2VGb250ID0gcEZpbmQtPkdldEJhc2VGb250KCk7DQotICAgICAgICBjc0Jhc2VGb250LlJlbW92ZSgnICcpOw0KLSAgICAgICAgaWYgKGNzQmFzZUZvbnQgPT0gY3NGb250TmFtZSkgew0KLSAgICAgICAgICAgIGNzTmFtZVRhZyA9IGNzS2V5Ow0KLSAgICAgICAgICAgIHJldHVybiBwRmluZDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotQ1BERl9Gb250KiBHZXROYXRpdmVJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIEZYX0JZVEUgY2hhclNldCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZykNCi17DQotICAgIGlmIChwRm9ybURpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRFIgPSBwRm9ybURpY3QtPkdldERpY3QoIkRSIik7DQotICAgIGlmIChwRFIgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9udHMgPSBwRFItPkdldERpY3QoIkZvbnQiKTsNCi0gICAgaWYgKHBGb250cyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBGWF9QT1NJVElPTiBwb3MgPSBwRm9udHMtPkdldFN0YXJ0UG9zKCk7DQotICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gTlVMTDsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIGNzS2V5Ow0KLSAgICAgICAgcE9iaiA9IHBGb250cy0+R2V0TmV4dEVsZW1lbnQocG9zLCBjc0tleSk7DQotICAgICAgICBpZiAocE9iaiA9PSBOVUxMKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBDUERGX09iamVjdCogcERpcmVjdCA9IHBPYmotPkdldERpcmVjdCgpOw0KLSAgICAgICAgaWYgKHBEaXJlY3QgPT0gTlVMTCB8fCBwRGlyZWN0LT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIENQREZfRGljdGlvbmFyeSogcEVsZW1lbnQgPSAoQ1BERl9EaWN0aW9uYXJ5KilwRGlyZWN0Ow0KLSAgICAgICAgaWYgKHBFbGVtZW50LT5HZXRTdHJpbmcoIlR5cGUiKSAhPSAiRm9udCIpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIENQREZfRm9udCogcEZpbmQgPSBwRG9jdW1lbnQtPkxvYWRGb250KHBFbGVtZW50KTsNCi0gICAgICAgIGlmIChwRmluZCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBDRlhfU3Vic3RGb250KiBwU3Vic3QgPSAoQ0ZYX1N1YnN0Rm9udCopcEZpbmQtPkdldFN1YnN0Rm9udCgpOw0KLSAgICAgICAgaWYgKHBTdWJzdCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAocFN1YnN0LT5tX0NoYXJzZXQgPT0gKGludCljaGFyU2V0KSB7DQotICAgICAgICAgICAgY3NOYW1lVGFnID0gY3NLZXk7DQotICAgICAgICAgICAgcmV0dXJuIHBGaW5kOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1DUERGX0ZvbnQqIEdldE5hdGl2ZUludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QsIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZykNCi17DQotICAgIGNzTmFtZVRhZyA9ICIiOw0KLSAgICBGWF9CWVRFIGNoYXJTZXQgPSBDUERGX0ludGVyRm9ybTo6R2V0TmF0aXZlQ2hhclNldCgpOw0KLSAgICBDRlhfU3Vic3RGb250KiBwU3Vic3Q7DQotICAgIENQREZfRm9udCogcEZvbnQgPSBHZXREZWZhdWx0SW50ZXJGb3JtRm9udChwRm9ybURpY3QsIHBEb2N1bWVudCk7DQotICAgIGlmIChwRm9udCAhPSBOVUxMKSB7DQotICAgICAgICBwU3Vic3QgPSAoQ0ZYX1N1YnN0Rm9udCopcEZvbnQtPkdldFN1YnN0Rm9udCgpOw0KLSAgICAgICAgaWYgKHBTdWJzdCAhPSBOVUxMICYmIHBTdWJzdC0+bV9DaGFyc2V0ID09IChpbnQpY2hhclNldCkgew0KLSAgICAgICAgICAgIEZpbmRJbnRlckZvcm1Gb250KHBGb3JtRGljdCwgcEZvbnQsIGNzTmFtZVRhZyk7DQotICAgICAgICAgICAgcmV0dXJuIHBGb250Ow0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBHZXROYXRpdmVJbnRlckZvcm1Gb250KHBGb3JtRGljdCwgcERvY3VtZW50LCBjaGFyU2V0LCBjc05hbWVUYWcpOw0KLX0NCi1GWF9CT09MIEZpbmRJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBjb25zdCBDUERGX0ZvbnQqIHBGb250LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKQ0KLXsNCi0gICAgaWYgKHBGb3JtRGljdCA9PSBOVUxMIHx8IHBGb250ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBEUiA9IHBGb3JtRGljdC0+R2V0RGljdCgiRFIiKTsNCi0gICAgaWYgKHBEUiA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9udHMgPSBwRFItPkdldERpY3QoIkZvbnQiKTsNCi0gICAgaWYgKHBGb250cyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgRlhfUE9TSVRJT04gcG9zID0gcEZvbnRzLT5HZXRTdGFydFBvcygpOw0KLSAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICBDUERGX09iamVjdCogcE9iaiA9IE5VTEw7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyBjc0tleTsNCi0gICAgICAgIHBPYmogPSBwRm9udHMtPkdldE5leHRFbGVtZW50KHBvcywgY3NLZXkpOw0KLSAgICAgICAgaWYgKHBPYmogPT0gTlVMTCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1BERl9PYmplY3QqIHBEaXJlY3QgPSBwT2JqLT5HZXREaXJlY3QoKTsNCi0gICAgICAgIGlmIChwRGlyZWN0ID09IE5VTEwgfHwgcERpcmVjdC0+R2V0VHlwZSgpICE9IFBERk9CSl9ESUNUSU9OQVJZKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBFbGVtZW50ID0gKENQREZfRGljdGlvbmFyeSopcERpcmVjdDsNCi0gICAgICAgIGlmIChwRWxlbWVudC0+R2V0U3RyaW5nKCJUeXBlIikgIT0gIkZvbnQiKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAocEZvbnQtPkdldEZvbnREaWN0KCkgPT0gcEVsZW1lbnQpIHsNCi0gICAgICAgICAgICBjc05hbWVUYWcgPSBjc0tleTsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUZYX0JPT0wgRmluZEludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QsIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ0ZYX0J5dGVTdHJpbmcgY3NGb250TmFtZSwgQ1BERl9Gb250KiYgcEZvbnQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpDQotew0KLSAgICBpZiAocEZvcm1EaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBEUiA9IHBGb3JtRGljdC0+R2V0RGljdCgiRFIiKTsNCi0gICAgaWYgKHBEUiA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9udHMgPSBwRFItPkdldERpY3QoIkZvbnQiKTsNCi0gICAgaWYgKHBGb250cyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKGNzRm9udE5hbWUuR2V0TGVuZ3RoKCkgPiAwKSB7DQotICAgICAgICBjc0ZvbnROYW1lLlJlbW92ZSgnICcpOw0KLSAgICB9DQotICAgIEZYX1BPU0lUSU9OIHBvcyA9IHBGb250cy0+R2V0U3RhcnRQb3MoKTsNCi0gICAgd2hpbGUgKHBvcykgew0KLSAgICAgICAgQ1BERl9PYmplY3QqIHBPYmogPSBOVUxMOw0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3NLZXksIGNzVG1wOw0KLSAgICAgICAgcE9iaiA9IHBGb250cy0+R2V0TmV4dEVsZW1lbnQocG9zLCBjc0tleSk7DQotICAgICAgICBpZiAocE9iaiA9PSBOVUxMKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBDUERGX09iamVjdCogcERpcmVjdCA9IHBPYmotPkdldERpcmVjdCgpOw0KLSAgICAgICAgaWYgKHBEaXJlY3QgPT0gTlVMTCB8fCBwRGlyZWN0LT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIENQREZfRGljdGlvbmFyeSogcEVsZW1lbnQgPSAoQ1BERl9EaWN0aW9uYXJ5KilwRGlyZWN0Ow0KLSAgICAgICAgaWYgKHBFbGVtZW50LT5HZXRTdHJpbmcoIlR5cGUiKSAhPSAiRm9udCIpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIHBGb250ID0gcERvY3VtZW50LT5Mb2FkRm9udChwRWxlbWVudCk7DQotICAgICAgICBpZiAocEZvbnQgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3NCYXNlRm9udDsNCi0gICAgICAgIGNzQmFzZUZvbnQgPSBwRm9udC0+R2V0QmFzZUZvbnQoKTsNCi0gICAgICAgIGNzQmFzZUZvbnQuUmVtb3ZlKCcgJyk7DQotICAgICAgICBpZiAoY3NCYXNlRm9udCA9PSBjc0ZvbnROYW1lKSB7DQotICAgICAgICAgICAgY3NOYW1lVGFnID0gY3NLZXk7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi12b2lkIEFkZEludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiYgcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENQREZfRm9udCogcEZvbnQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpDQotew0KLSAgICBpZiAocEZvbnQgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChwRm9ybURpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgSW5pdEludGVyRm9ybURpY3QocEZvcm1EaWN0LCBwRG9jdW1lbnQpOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIGNzVGFnOw0KLSAgICBpZiAoRmluZEludGVyRm9ybUZvbnQocEZvcm1EaWN0LCBwRm9udCwgY3NUYWcpKSB7DQotICAgICAgICBjc05hbWVUYWcgPSBjc1RhZzsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAocEZvcm1EaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIEluaXRJbnRlckZvcm1EaWN0KHBGb3JtRGljdCwgcERvY3VtZW50KTsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBEUiA9IHBGb3JtRGljdC0+R2V0RGljdCgiRFIiKTsNCi0gICAgaWYgKHBEUiA9PSBOVUxMKSB7DQotICAgICAgICBwRFIgPSBDUERGX0RpY3Rpb25hcnk6OkNyZWF0ZSgpOw0KLSAgICAgICAgaWYgKHBEUiA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcEZvcm1EaWN0LT5TZXRBdCgiRFIiLCBwRFIpOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcEZvbnRzID0gcERSLT5HZXREaWN0KCJGb250Iik7DQotICAgIGlmIChwRm9udHMgPT0gTlVMTCkgew0KLSAgICAgICAgcEZvbnRzID0gQ1BERl9EaWN0aW9uYXJ5OjpDcmVhdGUoKTsNCi0gICAgICAgIHBEUi0+U2V0QXQoIkZvbnQiLCBwRm9udHMpOw0KLSAgICB9DQotICAgIGlmIChjc05hbWVUYWcuSXNFbXB0eSgpKSB7DQotICAgICAgICBjc05hbWVUYWcgPSBwRm9udC0+R2V0QmFzZUZvbnQoKTsNCi0gICAgfQ0KLSAgICBjc05hbWVUYWcuUmVtb3ZlKCcgJyk7DQotICAgIGNzTmFtZVRhZyA9IENQREZfSW50ZXJGb3JtOjpHZW5lcmF0ZU5ld1Jlc291cmNlTmFtZShwRFIsICJGb250IiwgNCwgY3NOYW1lVGFnKTsNCi0gICAgcEZvbnRzLT5TZXRBdFJlZmVyZW5jZShjc05hbWVUYWcsIHBEb2N1bWVudCwgcEZvbnQtPkdldEZvbnREaWN0KCkpOw0KLX0NCi1DUERGX0ZvbnQqIEFkZE5hdGl2ZUludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiYgcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIEZYX0JZVEUgY2hhclNldCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZykNCi17DQotICAgIGlmIChwRm9ybURpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgSW5pdEludGVyRm9ybURpY3QocEZvcm1EaWN0LCBwRG9jdW1lbnQpOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIGNzVGVtcDsNCi0gICAgQ1BERl9Gb250KiBwRm9udCA9IEdldE5hdGl2ZUludGVyRm9ybUZvbnQocEZvcm1EaWN0LCBwRG9jdW1lbnQsIGNoYXJTZXQsIGNzVGVtcCk7DQotICAgIGlmIChwRm9udCAhPSBOVUxMKSB7DQotICAgICAgICBjc05hbWVUYWcgPSBjc1RlbXA7DQotICAgICAgICByZXR1cm4gcEZvbnQ7DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgY3NGb250TmFtZSA9IENQREZfSW50ZXJGb3JtOjpHZXROYXRpdmVGb250KGNoYXJTZXQpOw0KLSAgICBpZiAoIWNzRm9udE5hbWUuSXNFbXB0eSgpKSB7DQotICAgICAgICBpZiAoRmluZEludGVyRm9ybUZvbnQocEZvcm1EaWN0LCBwRG9jdW1lbnQsIGNzRm9udE5hbWUsIHBGb250LCBjc05hbWVUYWcpKSB7DQotICAgICAgICAgICAgcmV0dXJuIHBGb250Ow0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHBGb250ID0gQ1BERl9JbnRlckZvcm06OkFkZE5hdGl2ZUZvbnQoY2hhclNldCwgcERvY3VtZW50KTsNCi0gICAgaWYgKHBGb250ICE9IE5VTEwpIHsNCi0gICAgICAgIEFkZEludGVyRm9ybUZvbnQocEZvcm1EaWN0LCBwRG9jdW1lbnQsIHBGb250LCBjc05hbWVUYWcpOw0KLSAgICB9DQotICAgIHJldHVybiBwRm9udDsNCi19DQotQ1BERl9Gb250KiBBZGROYXRpdmVJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSomIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKQ0KLXsNCi0gICAgRlhfQllURSBjaGFyU2V0ID0gQ1BERl9JbnRlckZvcm06OkdldE5hdGl2ZUNoYXJTZXQoKTsNCi0gICAgcmV0dXJuIEFkZE5hdGl2ZUludGVyRm9ybUZvbnQocEZvcm1EaWN0LCBwRG9jdW1lbnQsIGNoYXJTZXQsIGNzTmFtZVRhZyk7DQotfQ0KLXZvaWQgUmVtb3ZlSW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCwgY29uc3QgQ1BERl9Gb250KiBwRm9udCkNCi17DQotICAgIGlmIChwRm9ybURpY3QgPT0gTlVMTCB8fCBwRm9udCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgY3NUYWc7DQotICAgIGlmICghRmluZEludGVyRm9ybUZvbnQocEZvcm1EaWN0LCBwRm9udCwgY3NUYWcpKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRFIgPSBwRm9ybURpY3QtPkdldERpY3QoIkRSIik7DQotICAgIENQREZfRGljdGlvbmFyeSogcEZvbnRzID0gcERSLT5HZXREaWN0KCJGb250Iik7DQotICAgIHBGb250cy0+UmVtb3ZlQXQoY3NUYWcpOw0KLX0NCi12b2lkIFJlbW92ZUludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QsIENGWF9CeXRlU3RyaW5nIGNzTmFtZVRhZykNCi17DQotICAgIGlmIChwRm9ybURpY3QgPT0gTlVMTCB8fCBjc05hbWVUYWcuSXNFbXB0eSgpKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRFIgPSBwRm9ybURpY3QtPkdldERpY3QoIkRSIik7DQotICAgIGlmIChwRFIgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfRGljdGlvbmFyeSogcEZvbnRzID0gcERSLT5HZXREaWN0KCJGb250Iik7DQotICAgIGlmIChwRm9udHMgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHBGb250cy0+UmVtb3ZlQXQoY3NOYW1lVGFnKTsNCi19DQotQ1BERl9Gb250KiBHZXREZWZhdWx0SW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50KQ0KLXsNCi0gICAgaWYgKHBGb3JtRGljdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDUERGX0RlZmF1bHRBcHBlYXJhbmNlIGNEQSA9IHBGb3JtRGljdC0+R2V0U3RyaW5nKCJEQSIpOw0KLSAgICBDRlhfQnl0ZVN0cmluZyBjc0ZvbnROYW1lVGFnOw0KLSAgICBGWF9GTE9BVCBmRm9udFNpemU7DQotICAgIGNEQS5HZXRGb250KGNzRm9udE5hbWVUYWcsIGZGb250U2l6ZSk7DQotICAgIHJldHVybiBHZXRJbnRlckZvcm1Gb250KHBGb3JtRGljdCwgcERvY3VtZW50LCBjc0ZvbnROYW1lVGFnKTsNCi19DQotQ1BERl9JY29uRml0OjpTY2FsZU1ldGhvZCBDUERGX0ljb25GaXQ6OkdldFNjYWxlTWV0aG9kKCkNCi17DQotICAgIGlmIChtX3BEaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBBbHdheXM7DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgY3NTVyA9IG1fcERpY3QtPkdldFN0cmluZygiU1ciLCAiQSIpOw0KLSAgICBpZiAoY3NTVyA9PSAiQiIpIHsNCi0gICAgICAgIHJldHVybiBCaWdnZXI7DQotICAgIH0gZWxzZSBpZiAoY3NTVyA9PSAiUyIpIHsNCi0gICAgICAgIHJldHVybiBTbWFsbGVyOw0KLSAgICB9IGVsc2UgaWYgKGNzU1cgPT0gIk4iKSB7DQotICAgICAgICByZXR1cm4gTmV2ZXI7DQotICAgIH0NCi0gICAgcmV0dXJuIEFsd2F5czsNCi19DQotRlhfQk9PTCBDUERGX0ljb25GaXQ6OklzUHJvcG9ydGlvbmFsU2NhbGUoKQ0KLXsNCi0gICAgaWYgKG1fcERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgcmV0dXJuIG1fcERpY3QtPkdldFN0cmluZygiUyIsICJQIikgIT0gIkEiOw0KLX0NCi12b2lkIENQREZfSWNvbkZpdDo6R2V0SWNvblBvc2l0aW9uKEZYX0ZMT0FUJiBmTGVmdCwgRlhfRkxPQVQmIGZCb3R0b20pDQotew0KLSAgICBmTGVmdCA9IGZCb3R0b20gPSAwLjU7DQotICAgIGlmIChtX3BEaWN0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDUERGX0FycmF5KiBwQSA9IG1fcERpY3QtPkdldEFycmF5KCJBIik7DQotICAgIGlmIChwQSAhPSBOVUxMKSB7DQotICAgICAgICBGWF9EV09SRCBkd0NvdW50ID0gcEEtPkdldENvdW50KCk7DQotICAgICAgICBpZiAoZHdDb3VudCA+IDApIHsNCi0gICAgICAgICAgICBmTGVmdCA9IHBBLT5HZXROdW1iZXIoMCk7DQotICAgICAgICB9DQotICAgICAgICBpZiAoZHdDb3VudCA+IDEpIHsNCi0gICAgICAgICAgICBmQm90dG9tID0gcEEtPkdldE51bWJlcigxKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1GWF9CT09MIENQREZfSWNvbkZpdDo6R2V0Rml0dGluZ0JvdW5kcygpDQotew0KLSAgICBpZiAobV9wRGljdCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgcmV0dXJuIG1fcERpY3QtPkdldEJvb2xlYW4oIkZCIik7DQotfQ0KLXZvaWQgU2F2ZUNoZWNrZWRGaWVsZFN0YXR1cyhDUERGX0Zvcm1GaWVsZCogcEZpZWxkLCBDRlhfQnl0ZUFycmF5JiBzdGF0dXNBcnJheSkNCi17DQotICAgIGludCBpQ291bnQgPSBwRmllbGQtPkNvdW50Q29udHJvbHMoKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspIHsNCi0gICAgICAgIENQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sID0gcEZpZWxkLT5HZXRDb250cm9sKGkpOw0KLSAgICAgICAgaWYgKHBDb250cm9sID09IE5VTEwpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIHN0YXR1c0FycmF5LkFkZChwQ29udHJvbC0+SXNDaGVja2VkKCkgPyAxIDogMCk7DQotICAgIH0NCi19DQotQ1BERl9PYmplY3QqIEZQREZfR2V0RmllbGRBdHRyKENQREZfRGljdGlvbmFyeSogcEZpZWxkRGljdCwgY29uc3QgRlhfQ0hBUiogbmFtZSwgaW50IG5MZXZlbCkNCi17DQotICAgIGlmIChuTGV2ZWwgPiBGUERGRE9DX1VUSUxTX01BWFJFQ1VSU0lPTikgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKHBGaWVsZERpY3QgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ1BERl9PYmplY3QqIHBBdHRyID0gcEZpZWxkRGljdC0+R2V0RWxlbWVudFZhbHVlKG5hbWUpOw0KLSAgICBpZiAocEF0dHIpIHsNCi0gICAgICAgIHJldHVybiBwQXR0cjsNCi0gICAgfQ0KLSAgICBDUERGX0RpY3Rpb25hcnkqIHBQYXJlbnQgPSBwRmllbGREaWN0LT5HZXREaWN0KCJQYXJlbnQiKTsNCi0gICAgaWYgKHBQYXJlbnQgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIEZQREZfR2V0RmllbGRBdHRyKHBQYXJlbnQsIG5hbWUsIG5MZXZlbCArIDEpOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mcGRmZG9jL2ZwZGZfZG9jLmgiCitzdGF0aWMgY29uc3QgaW50IEZQREZET0NfVVRJTFNfTUFYUkVDVVJTSU9OID0gMzI7CitDRlhfV2lkZVN0cmluZwlHZXRGdWxsTmFtZShDUERGX0RpY3Rpb25hcnkqIHBGaWVsZERpY3QpOwordm9pZAkJCUluaXRJbnRlckZvcm1EaWN0KENQREZfRGljdGlvbmFyeSomIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50KTsKK0ZYX0RXT1JECQlDb3VudEludGVyRm9ybUZvbnRzKENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0KTsKK0NQREZfRm9udCoJCUdldEludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QsIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgRlhfRFdPUkQgaW5kZXgsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOworQ1BERl9Gb250KgkJR2V0SW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDRlhfQnl0ZVN0cmluZyBjc05hbWVUYWcpOworQ1BERl9Gb250KgkJR2V0SW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDRlhfQnl0ZVN0cmluZyBjc0ZvbnROYW1lLCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKTsKK0NQREZfRm9udCoJCUdldE5hdGl2ZUludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QsIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgRlhfQllURSBjaGFyU2V0LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKTsKK0NQREZfRm9udCoJCUdldE5hdGl2ZUludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QsIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZyk7CitGWF9CT09MCQkJRmluZEludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QsIGNvbnN0IENQREZfRm9udCogcEZvbnQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpOworRlhfQk9PTAkJCUZpbmRJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIENGWF9CeXRlU3RyaW5nIGNzRm9udE5hbWUsIENQREZfRm9udComIHBGb250LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKTsKK3ZvaWQJCQlBZGRJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSomIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDUERGX0ZvbnQqIHBGb250LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKTsKK0NQREZfRm9udCoJCUFkZE5hdGl2ZUludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiYgcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIEZYX0JZVEUgY2hhclNldCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZyk7CitDUERGX0ZvbnQqCQlBZGROYXRpdmVJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSomIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKTsKK3ZvaWQJCQlSZW1vdmVJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBjb25zdCBDUERGX0ZvbnQqIHBGb250KTsKK3ZvaWQJCQlSZW1vdmVJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBDRlhfQnl0ZVN0cmluZyBjc05hbWVUYWcpOworQ1BERl9Gb250KgkJR2V0RGVmYXVsdEludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QsIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCk7Cit2b2lkCQkJU2V0RGVmYXVsdEludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiYgcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENQREZfRm9udCogcEZvbnQpOwordm9pZAkJCVNhdmVDaGVja2VkRmllbGRTdGF0dXMoQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCwgQ0ZYX0J5dGVBcnJheSYgc3RhdHVzQXJyYXkpOworRlhfQk9PTAkJCU5lZWRQREZFbmNvZGVGb3JGaWVsZEZ1bGxOYW1lKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBjc0ZpZWxkTmFtZSk7CitGWF9CT09MCQkJTmVlZFBERkVuY29kZUZvckZpZWxkVHJlZShDUERGX0RpY3Rpb25hcnkqIHBGaWVsZERpY3QsIGludCBuTGV2ZWwgPSAwKTsKK3ZvaWQJCQlFbmNvZGVGaWVsZE5hbWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIGNzTmFtZSwgQ0ZYX0J5dGVTdHJpbmcmIGNzVCk7Cit2b2lkCQkJVXBkYXRlRW5jb2RlRmllbGROYW1lKENQREZfRGljdGlvbmFyeSogcEZpZWxkRGljdCwgaW50IG5MZXZlbCA9IDApOworQ0ZYX1dpZGVTdHJpbmcgR2V0RnVsbE5hbWUoQ1BERl9EaWN0aW9uYXJ5KiBwRmllbGREaWN0KQoreworICAgIENGWF9XaWRlU3RyaW5nIGZ1bGxfbmFtZTsKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBMZXZlbCA9IHBGaWVsZERpY3Q7CisgICAgd2hpbGUgKHBMZXZlbCkgeworICAgICAgICBDRlhfV2lkZVN0cmluZyBzaG9ydF9uYW1lID0gcExldmVsLT5HZXRVbmljb2RlVGV4dCgiVCIpOworICAgICAgICBpZiAoc2hvcnRfbmFtZSAhPSBMIiIpIHsKKyAgICAgICAgICAgIGlmIChmdWxsX25hbWUgPT0gTCIiKSB7CisgICAgICAgICAgICAgICAgZnVsbF9uYW1lID0gc2hvcnRfbmFtZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZnVsbF9uYW1lID0gc2hvcnRfbmFtZSArIEwiLiIgKyBmdWxsX25hbWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcExldmVsID0gcExldmVsLT5HZXREaWN0KCJQYXJlbnQiKTsKKyAgICB9CisgICAgcmV0dXJuIGZ1bGxfbmFtZTsKK30KK0ZYX0JPT0wgQ1BERl9EZWZhdWx0QXBwZWFyYW5jZTo6SGFzRm9udCgpCit7CisgICAgaWYgKG1fY3NEQS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDUERGX1NpbXBsZVBhcnNlciBzeW50YXgobV9jc0RBKTsKKyAgICByZXR1cm4gc3ludGF4LkZpbmRUYWdQYXJhbSgiVGYiLCAyKTsKK30KK0NGWF9CeXRlU3RyaW5nIENQREZfRGVmYXVsdEFwcGVhcmFuY2U6OkdldEZvbnRTdHJpbmcoKQoreworICAgIENGWF9CeXRlU3RyaW5nIGNzRm9udDsKKyAgICBpZiAobV9jc0RBLklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gY3NGb250OworICAgIH0KKyAgICBDUERGX1NpbXBsZVBhcnNlciBzeW50YXgobV9jc0RBKTsKKyAgICBpZiAoc3ludGF4LkZpbmRUYWdQYXJhbSgiVGYiLCAyKSkgeworICAgICAgICBjc0ZvbnQgKz0gKENGWF9CeXRlU3RyaW5nKXN5bnRheC5HZXRXb3JkKCk7CisgICAgICAgIGNzRm9udCArPSAiICI7CisgICAgICAgIGNzRm9udCArPSAoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKTsKKyAgICAgICAgY3NGb250ICs9ICIgIjsKKyAgICAgICAgY3NGb250ICs9IChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpOworICAgIH0KKyAgICByZXR1cm4gY3NGb250OworfQordm9pZCBDUERGX0RlZmF1bHRBcHBlYXJhbmNlOjpHZXRGb250KENGWF9CeXRlU3RyaW5nJiBjc0ZvbnROYW1lVGFnLCBGWF9GTE9BVCYgZkZvbnRTaXplKQoreworICAgIGNzRm9udE5hbWVUYWcgPSAiIjsKKyAgICBmRm9udFNpemUgPSAwOworICAgIGlmIChtX2NzREEuSXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1BERl9TaW1wbGVQYXJzZXIgc3ludGF4KG1fY3NEQSk7CisgICAgaWYgKHN5bnRheC5GaW5kVGFnUGFyYW0oIlRmIiwgMikpIHsKKyAgICAgICAgY3NGb250TmFtZVRhZyA9IChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpOworICAgICAgICBjc0ZvbnROYW1lVGFnLkRlbGV0ZSgwLCAxKTsKKyAgICAgICAgZkZvbnRTaXplID0gRlhfYXRvZigoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKSk7CisgICAgfQorICAgIGNzRm9udE5hbWVUYWcgPSBQREZfTmFtZURlY29kZShjc0ZvbnROYW1lVGFnKTsKK30KK0ZYX0JPT0wgQ1BERl9EZWZhdWx0QXBwZWFyYW5jZTo6SGFzQ29sb3IoRlhfQk9PTCBiU3Ryb2tpbmdPcGVyYXRpb24pCit7CisgICAgaWYgKG1fY3NEQS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDUERGX1NpbXBsZVBhcnNlciBzeW50YXgobV9jc0RBKTsKKyAgICBpZiAoc3ludGF4LkZpbmRUYWdQYXJhbShiU3Ryb2tpbmdPcGVyYXRpb24gPyAiRyIgOiAiZyIsIDEpKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBzeW50YXguU2V0UG9zKDApOworICAgIGlmIChzeW50YXguRmluZFRhZ1BhcmFtKGJTdHJva2luZ09wZXJhdGlvbiA/ICJSRyIgOiAicmciLCAzKSkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgc3ludGF4LlNldFBvcygwKTsKKyAgICByZXR1cm4gc3ludGF4LkZpbmRUYWdQYXJhbShiU3Ryb2tpbmdPcGVyYXRpb24gPyAiSyIgOiAiayIsIDQpOworfQorQ0ZYX0J5dGVTdHJpbmcgQ1BERl9EZWZhdWx0QXBwZWFyYW5jZTo6R2V0Q29sb3JTdHJpbmcoRlhfQk9PTCBiU3Ryb2tpbmdPcGVyYXRpb24pCit7CisgICAgQ0ZYX0J5dGVTdHJpbmcgY3NDb2xvcjsKKyAgICBpZiAobV9jc0RBLklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gY3NDb2xvcjsKKyAgICB9CisgICAgQ1BERl9TaW1wbGVQYXJzZXIgc3ludGF4KG1fY3NEQSk7CisgICAgaWYgKHN5bnRheC5GaW5kVGFnUGFyYW0oYlN0cm9raW5nT3BlcmF0aW9uID8gIkciIDogImciLCAxKSkgeworICAgICAgICBjc0NvbG9yICs9IChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpOworICAgICAgICBjc0NvbG9yICs9ICIgIjsKKyAgICAgICAgY3NDb2xvciArPSAoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKTsKKyAgICAgICAgcmV0dXJuIGNzQ29sb3I7CisgICAgfQorICAgIHN5bnRheC5TZXRQb3MoMCk7CisgICAgaWYgKHN5bnRheC5GaW5kVGFnUGFyYW0oYlN0cm9raW5nT3BlcmF0aW9uID8gIlJHIiA6ICJyZyIsIDMpKSB7CisgICAgICAgIGNzQ29sb3IgKz0gKENGWF9CeXRlU3RyaW5nKXN5bnRheC5HZXRXb3JkKCk7CisgICAgICAgIGNzQ29sb3IgKz0gIiAiOworICAgICAgICBjc0NvbG9yICs9IChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpOworICAgICAgICBjc0NvbG9yICs9ICIgIjsKKyAgICAgICAgY3NDb2xvciArPSAoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKTsKKyAgICAgICAgY3NDb2xvciArPSAiICI7CisgICAgICAgIGNzQ29sb3IgKz0gKENGWF9CeXRlU3RyaW5nKXN5bnRheC5HZXRXb3JkKCk7CisgICAgICAgIHJldHVybiBjc0NvbG9yOworICAgIH0KKyAgICBzeW50YXguU2V0UG9zKDApOworICAgIGlmIChzeW50YXguRmluZFRhZ1BhcmFtKGJTdHJva2luZ09wZXJhdGlvbiA/ICJLIiA6ICJrIiwgNCkpIHsKKyAgICAgICAgY3NDb2xvciArPSAoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKTsKKyAgICAgICAgY3NDb2xvciArPSAiICI7CisgICAgICAgIGNzQ29sb3IgKz0gKENGWF9CeXRlU3RyaW5nKXN5bnRheC5HZXRXb3JkKCk7CisgICAgICAgIGNzQ29sb3IgKz0gIiAiOworICAgICAgICBjc0NvbG9yICs9IChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpOworICAgICAgICBjc0NvbG9yICs9ICIgIjsKKyAgICAgICAgY3NDb2xvciArPSAoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKTsKKyAgICAgICAgY3NDb2xvciArPSAiICI7CisgICAgICAgIGNzQ29sb3IgKz0gKENGWF9CeXRlU3RyaW5nKXN5bnRheC5HZXRXb3JkKCk7CisgICAgfQorICAgIHJldHVybiBjc0NvbG9yOworfQordm9pZCBDUERGX0RlZmF1bHRBcHBlYXJhbmNlOjpHZXRDb2xvcihpbnQmIGlDb2xvclR5cGUsIEZYX0ZMT0FUIGZjWzRdLCBGWF9CT09MIGJTdHJva2luZ09wZXJhdGlvbikKK3sKKyAgICBpQ29sb3JUeXBlID0gQ09MT1JUWVBFX1RSQU5TUEFSRU5UOworICAgIGZvciAoaW50IGMgPSAwOyBjIDwgNDsgYyArKykgeworICAgICAgICBmY1tjXSA9IDA7CisgICAgfQorICAgIGlmIChtX2NzREEuSXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1BERl9TaW1wbGVQYXJzZXIgc3ludGF4KG1fY3NEQSk7CisgICAgaWYgKHN5bnRheC5GaW5kVGFnUGFyYW0oYlN0cm9raW5nT3BlcmF0aW9uID8gIkciIDogImciLCAxKSkgeworICAgICAgICBpQ29sb3JUeXBlID0gQ09MT1JUWVBFX0dSQVk7CisgICAgICAgIGZjWzBdID0gRlhfYXRvZigoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3ludGF4LlNldFBvcygwKTsKKyAgICBpZiAoc3ludGF4LkZpbmRUYWdQYXJhbShiU3Ryb2tpbmdPcGVyYXRpb24gPyAiUkciIDogInJnIiwgMykpIHsKKyAgICAgICAgaUNvbG9yVHlwZSA9IENPTE9SVFlQRV9SR0I7CisgICAgICAgIGZjWzBdID0gRlhfYXRvZigoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKSk7CisgICAgICAgIGZjWzFdID0gRlhfYXRvZigoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKSk7CisgICAgICAgIGZjWzJdID0gRlhfYXRvZigoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3ludGF4LlNldFBvcygwKTsKKyAgICBpZiAoc3ludGF4LkZpbmRUYWdQYXJhbShiU3Ryb2tpbmdPcGVyYXRpb24gPyAiSyIgOiAiayIsIDQpKSB7CisgICAgICAgIGlDb2xvclR5cGUgPSBDT0xPUlRZUEVfQ01ZSzsKKyAgICAgICAgZmNbMF0gPSBGWF9hdG9mKChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpKTsKKyAgICAgICAgZmNbMV0gPSBGWF9hdG9mKChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpKTsKKyAgICAgICAgZmNbMl0gPSBGWF9hdG9mKChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpKTsKKyAgICAgICAgZmNbM10gPSBGWF9hdG9mKChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpKTsKKyAgICB9Cit9Cit2b2lkIENQREZfRGVmYXVsdEFwcGVhcmFuY2U6OkdldENvbG9yKEZYX0FSR0ImIGNvbG9yLCBpbnQmIGlDb2xvclR5cGUsIEZYX0JPT0wgYlN0cm9raW5nT3BlcmF0aW9uKQoreworICAgIGNvbG9yID0gMDsKKyAgICBpQ29sb3JUeXBlID0gQ09MT1JUWVBFX1RSQU5TUEFSRU5UOworICAgIGlmIChtX2NzREEuSXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1BERl9TaW1wbGVQYXJzZXIgc3ludGF4KG1fY3NEQSk7CisgICAgaWYgKHN5bnRheC5GaW5kVGFnUGFyYW0oYlN0cm9raW5nT3BlcmF0aW9uID8gIkciIDogImciLCAxKSkgeworICAgICAgICBpQ29sb3JUeXBlID0gQ09MT1JUWVBFX0dSQVk7CisgICAgICAgIEZYX0ZMT0FUIGcgPSBGWF9hdG9mKChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpKSAqIDI1NSArIDAuNWY7CisgICAgICAgIGNvbG9yID0gQXJnYkVuY29kZSgyNTUsIChpbnQpZywgKGludClnLCAoaW50KWcpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHN5bnRheC5TZXRQb3MoMCk7CisgICAgaWYgKHN5bnRheC5GaW5kVGFnUGFyYW0oYlN0cm9raW5nT3BlcmF0aW9uID8gIlJHIiA6ICJyZyIsIDMpKSB7CisgICAgICAgIGlDb2xvclR5cGUgPSBDT0xPUlRZUEVfUkdCOworICAgICAgICBGWF9GTE9BVCByID0gRlhfYXRvZigoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKSkgKiAyNTUgKyAwLjVmOworICAgICAgICBGWF9GTE9BVCBnID0gRlhfYXRvZigoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKSkgKiAyNTUgKyAwLjVmOworICAgICAgICBGWF9GTE9BVCBiID0gRlhfYXRvZigoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKSkgKiAyNTUgKyAwLjVmOworICAgICAgICBjb2xvciA9IEFyZ2JFbmNvZGUoMjU1LCAoaW50KXIsIChpbnQpZywgKGludCliKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzeW50YXguU2V0UG9zKDApOworICAgIGlmIChzeW50YXguRmluZFRhZ1BhcmFtKGJTdHJva2luZ09wZXJhdGlvbiA/ICJLIiA6ICJrIiwgNCkpIHsKKyAgICAgICAgaUNvbG9yVHlwZSA9IENPTE9SVFlQRV9DTVlLOworICAgICAgICBGWF9GTE9BVCBjID0gRlhfYXRvZigoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKSk7CisgICAgICAgIEZYX0ZMT0FUIG0gPSBGWF9hdG9mKChDRlhfQnl0ZVN0cmluZylzeW50YXguR2V0V29yZCgpKTsKKyAgICAgICAgRlhfRkxPQVQgeSA9IEZYX2F0b2YoKENGWF9CeXRlU3RyaW5nKXN5bnRheC5HZXRXb3JkKCkpOworICAgICAgICBGWF9GTE9BVCBrID0gRlhfYXRvZigoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKSk7CisgICAgICAgIEZYX0ZMT0FUIHIgPSAxLjBmIC0gRlhfTUlOKDEuMGYsIGMgKyBrKTsKKyAgICAgICAgRlhfRkxPQVQgZyA9IDEuMGYgLSBGWF9NSU4oMS4wZiwgbSArIGspOworICAgICAgICBGWF9GTE9BVCBiID0gMS4wZiAtIEZYX01JTigxLjBmLCB5ICsgayk7CisgICAgICAgIGNvbG9yID0gQXJnYkVuY29kZSgyNTUsIChpbnQpKHIgKiAyNTUgKyAwLjVmKSwgKGludCkoZyAqIDI1NSArIDAuNWYpLCAoaW50KShiICogMjU1ICsgMC41ZikpOworICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9EZWZhdWx0QXBwZWFyYW5jZTo6SGFzVGV4dE1hdHJpeCgpCit7CisgICAgaWYgKG1fY3NEQS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDUERGX1NpbXBsZVBhcnNlciBzeW50YXgobV9jc0RBKTsKKyAgICByZXR1cm4gc3ludGF4LkZpbmRUYWdQYXJhbSgiVG0iLCA2KTsKK30KK0NGWF9CeXRlU3RyaW5nIENQREZfRGVmYXVsdEFwcGVhcmFuY2U6OkdldFRleHRNYXRyaXhTdHJpbmcoKQoreworICAgIENGWF9CeXRlU3RyaW5nIGNzVE07CisgICAgaWYgKG1fY3NEQS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIGNzVE07CisgICAgfQorICAgIENQREZfU2ltcGxlUGFyc2VyIHN5bnRheChtX2NzREEpOworICAgIGlmIChzeW50YXguRmluZFRhZ1BhcmFtKCJUbSIsIDYpKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSArKykgeworICAgICAgICAgICAgY3NUTSArPSAoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKTsKKyAgICAgICAgICAgIGNzVE0gKz0gIiAiOworICAgICAgICB9CisgICAgICAgIGNzVE0gKz0gKENGWF9CeXRlU3RyaW5nKXN5bnRheC5HZXRXb3JkKCk7CisgICAgfQorICAgIHJldHVybiBjc1RNOworfQorQ0ZYX0FmZmluZU1hdHJpeCBDUERGX0RlZmF1bHRBcHBlYXJhbmNlOjpHZXRUZXh0TWF0cml4KCkKK3sKKyAgICBDRlhfQWZmaW5lTWF0cml4IHRtOworICAgIGlmIChtX2NzREEuSXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybiB0bTsKKyAgICB9CisgICAgQ1BERl9TaW1wbGVQYXJzZXIgc3ludGF4KG1fY3NEQSk7CisgICAgaWYgKHN5bnRheC5GaW5kVGFnUGFyYW0oIlRtIiwgNikpIHsKKyAgICAgICAgRlhfRkxPQVQgZls2XTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpICsrKSB7CisgICAgICAgICAgICBmW2ldID0gRlhfYXRvZigoQ0ZYX0J5dGVTdHJpbmcpc3ludGF4LkdldFdvcmQoKSk7CisgICAgICAgIH0KKyAgICAgICAgdG0uU2V0KGZbMF0sIGZbMV0sIGZbMl0sIGZbM10sIGZbNF0sIGZbNV0pOworICAgIH0KKyAgICByZXR1cm4gdG07Cit9Cit2b2lkIEluaXRJbnRlckZvcm1EaWN0KENQREZfRGljdGlvbmFyeSomIHBGb3JtRGljdCwgQ1BERl9Eb2N1bWVudCogcERvY3VtZW50KQoreworICAgIGlmIChwRG9jdW1lbnQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChwRm9ybURpY3QgPT0gTlVMTCkgeworICAgICAgICBwRm9ybURpY3QgPSBDUERGX0RpY3Rpb25hcnk6OkNyZWF0ZSgpOworICAgICAgICBpZiAocEZvcm1EaWN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBGWF9EV09SRCBkd09iak51bSA9IHBEb2N1bWVudC0+QWRkSW5kaXJlY3RPYmplY3QocEZvcm1EaWN0KTsKKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwUm9vdCA9IHBEb2N1bWVudC0+R2V0Um9vdCgpOworICAgICAgICBwUm9vdC0+U2V0QXRSZWZlcmVuY2UoIkFjcm9Gb3JtIiwgcERvY3VtZW50LCBkd09iak51bSk7CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIGNzREE7CisgICAgaWYgKCFwRm9ybURpY3QtPktleUV4aXN0KCJEUiIpKSB7CisgICAgICAgIENQREZfRm9udCogcEZvbnQgPSBOVUxMOworICAgICAgICBDRlhfQnl0ZVN0cmluZyBjc0Jhc2VOYW1lLCBjc0RlZmF1bHQ7CisgICAgICAgIEZYX0JZVEUgY2hhclNldCA9IENQREZfSW50ZXJGb3JtOjpHZXROYXRpdmVDaGFyU2V0KCk7CisgICAgICAgIHBGb250ID0gQ1BERl9JbnRlckZvcm06OkFkZFN0YW5kYXJkRm9udChwRG9jdW1lbnQsICJIZWx2ZXRpY2EiKTsKKyAgICAgICAgaWYgKHBGb250ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIEFkZEludGVyRm9ybUZvbnQocEZvcm1EaWN0LCBwRG9jdW1lbnQsIHBGb250LCBjc0Jhc2VOYW1lKTsKKyAgICAgICAgICAgIGNzRGVmYXVsdCA9IGNzQmFzZU5hbWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNoYXJTZXQgIT0gMCkgeworICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3NGb250TmFtZSA9IENQREZfSW50ZXJGb3JtOjpHZXROYXRpdmVGb250KGNoYXJTZXQsIE5VTEwpOworICAgICAgICAgICAgaWYgKHBGb250ID09IE5VTEwgfHwgY3NGb250TmFtZSAhPSAiSGVsdmV0aWNhIikgeworICAgICAgICAgICAgICAgIHBGb250ID0gQ1BERl9JbnRlckZvcm06OkFkZE5hdGl2ZUZvbnQocERvY3VtZW50KTsKKyAgICAgICAgICAgICAgICBpZiAocEZvbnQgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBjc0Jhc2VOYW1lID0gIiI7CisgICAgICAgICAgICAgICAgICAgIEFkZEludGVyRm9ybUZvbnQocEZvcm1EaWN0LCBwRG9jdW1lbnQsIHBGb250LCBjc0Jhc2VOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgY3NEZWZhdWx0ID0gY3NCYXNlTmFtZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBGb250ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGNzREEgPSAiLyIgKyBQREZfTmFtZUVuY29kZShjc0RlZmF1bHQpICsgIiAwIFRmIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWNzREEuSXNFbXB0eSgpKSB7CisgICAgICAgIGNzREEgKz0gIiAiOworICAgIH0KKyAgICBjc0RBICs9ICIwIGciOworICAgIGlmICghcEZvcm1EaWN0LT5LZXlFeGlzdCgiREEiKSkgeworICAgICAgICBwRm9ybURpY3QtPlNldEF0U3RyaW5nKCJEQSIsIGNzREEpOworICAgIH0KK30KK0ZYX0RXT1JEIENvdW50SW50ZXJGb3JtRm9udHMoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QpCit7CisgICAgaWYgKHBGb3JtRGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBEUiA9IHBGb3JtRGljdC0+R2V0RGljdCgiRFIiKTsKKyAgICBpZiAocERSID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcEZvbnRzID0gcERSLT5HZXREaWN0KCJGb250Iik7CisgICAgaWYgKHBGb250cyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBGWF9EV09SRCBkd0NvdW50ID0gMDsKKyAgICBGWF9QT1NJVElPTiBwb3MgPSBwRm9udHMtPkdldFN0YXJ0UG9zKCk7CisgICAgd2hpbGUgKHBvcykgeworICAgICAgICBDUERGX09iamVjdCogcE9iaiA9IE5VTEw7CisgICAgICAgIENGWF9CeXRlU3RyaW5nIGNzS2V5OworICAgICAgICBwT2JqID0gcEZvbnRzLT5HZXROZXh0RWxlbWVudChwb3MsIGNzS2V5KTsKKyAgICAgICAgaWYgKHBPYmogPT0gTlVMTCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQ1BERl9PYmplY3QqIHBEaXJlY3QgPSBwT2JqLT5HZXREaXJlY3QoKTsKKyAgICAgICAgaWYgKHBEaXJlY3QgIT0gTlVMTCAmJiBwRGlyZWN0LT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgICAgIGlmICgoKENQREZfRGljdGlvbmFyeSopcERpcmVjdCktPkdldFN0cmluZygiVHlwZSIpID09ICJGb250IikgeworICAgICAgICAgICAgICAgIGR3Q291bnQgKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGR3Q291bnQ7Cit9CitDUERGX0ZvbnQqIEdldEludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QsIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgRlhfRFdPUkQgaW5kZXgsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpCit7CisgICAgaWYgKHBGb3JtRGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBEUiA9IHBGb3JtRGljdC0+R2V0RGljdCgiRFIiKTsKKyAgICBpZiAocERSID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcEZvbnRzID0gcERSLT5HZXREaWN0KCJGb250Iik7CisgICAgaWYgKHBGb250cyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBGWF9EV09SRCBkd0NvdW50ID0gMDsKKyAgICBGWF9QT1NJVElPTiBwb3MgPSBwRm9udHMtPkdldFN0YXJ0UG9zKCk7CisgICAgd2hpbGUgKHBvcykgeworICAgICAgICBDUERGX09iamVjdCogcE9iaiA9IE5VTEw7CisgICAgICAgIENGWF9CeXRlU3RyaW5nIGNzS2V5OworICAgICAgICBwT2JqID0gcEZvbnRzLT5HZXROZXh0RWxlbWVudChwb3MsIGNzS2V5KTsKKyAgICAgICAgaWYgKHBPYmogPT0gTlVMTCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQ1BERl9PYmplY3QqIHBEaXJlY3QgPSBwT2JqLT5HZXREaXJlY3QoKTsKKyAgICAgICAgaWYgKHBEaXJlY3QgPT0gTlVMTCB8fCBwRGlyZWN0LT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcEVsZW1lbnQgPSAoQ1BERl9EaWN0aW9uYXJ5KilwRGlyZWN0OworICAgICAgICBpZiAocEVsZW1lbnQtPkdldFN0cmluZygiVHlwZSIpICE9ICJGb250IikgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGR3Q291bnQgPT0gaW5kZXgpIHsKKyAgICAgICAgICAgIGNzTmFtZVRhZyA9IGNzS2V5OworICAgICAgICAgICAgcmV0dXJuIHBEb2N1bWVudC0+TG9hZEZvbnQocEVsZW1lbnQpOworICAgICAgICB9CisgICAgICAgIGR3Q291bnQgKys7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorQ1BERl9Gb250KiBHZXRJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIENGWF9CeXRlU3RyaW5nIGNzTmFtZVRhZykKK3sKKyAgICBDRlhfQnl0ZVN0cmluZyBjc0FsaWFzID0gUERGX05hbWVEZWNvZGUoY3NOYW1lVGFnKTsKKyAgICBpZiAocEZvcm1EaWN0ID09IE5VTEwgfHwgY3NBbGlhcy5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcERSID0gcEZvcm1EaWN0LT5HZXREaWN0KCJEUiIpOworICAgIGlmIChwRFIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9udHMgPSBwRFItPkdldERpY3QoIkZvbnQiKTsKKyAgICBpZiAocEZvbnRzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcEVsZW1lbnQgPSBwRm9udHMtPkdldERpY3QoY3NBbGlhcyk7CisgICAgaWYgKHBFbGVtZW50ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChwRWxlbWVudC0+R2V0U3RyaW5nKCJUeXBlIikgPT0gIkZvbnQiKSB7CisgICAgICAgIHJldHVybiBwRG9jdW1lbnQtPkxvYWRGb250KHBFbGVtZW50KTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CitDUERGX0ZvbnQqIEdldEludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QsIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ0ZYX0J5dGVTdHJpbmcgY3NGb250TmFtZSwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZykKK3sKKyAgICBpZiAocEZvcm1EaWN0ID09IE5VTEwgfHwgY3NGb250TmFtZS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcERSID0gcEZvcm1EaWN0LT5HZXREaWN0KCJEUiIpOworICAgIGlmIChwRFIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9udHMgPSBwRFItPkdldERpY3QoIkZvbnQiKTsKKyAgICBpZiAocEZvbnRzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIEZYX1BPU0lUSU9OIHBvcyA9IHBGb250cy0+R2V0U3RhcnRQb3MoKTsKKyAgICB3aGlsZSAocG9zKSB7CisgICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gTlVMTDsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3NLZXk7CisgICAgICAgIHBPYmogPSBwRm9udHMtPkdldE5leHRFbGVtZW50KHBvcywgY3NLZXkpOworICAgICAgICBpZiAocE9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBDUERGX09iamVjdCogcERpcmVjdCA9IHBPYmotPkdldERpcmVjdCgpOworICAgICAgICBpZiAocERpcmVjdCA9PSBOVUxMIHx8IHBEaXJlY3QtPkdldFR5cGUoKSAhPSBQREZPQkpfRElDVElPTkFSWSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRWxlbWVudCA9IChDUERGX0RpY3Rpb25hcnkqKXBEaXJlY3Q7CisgICAgICAgIGlmIChwRWxlbWVudC0+R2V0U3RyaW5nKCJUeXBlIikgIT0gIkZvbnQiKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBDUERGX0ZvbnQqIHBGaW5kID0gcERvY3VtZW50LT5Mb2FkRm9udChwRWxlbWVudCk7CisgICAgICAgIGlmIChwRmluZCA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBDRlhfQnl0ZVN0cmluZyBjc0Jhc2VGb250OworICAgICAgICBjc0Jhc2VGb250ID0gcEZpbmQtPkdldEJhc2VGb250KCk7CisgICAgICAgIGNzQmFzZUZvbnQuUmVtb3ZlKCcgJyk7CisgICAgICAgIGlmIChjc0Jhc2VGb250ID09IGNzRm9udE5hbWUpIHsKKyAgICAgICAgICAgIGNzTmFtZVRhZyA9IGNzS2V5OworICAgICAgICAgICAgcmV0dXJuIHBGaW5kOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorQ1BERl9Gb250KiBHZXROYXRpdmVJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIEZYX0JZVEUgY2hhclNldCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZykKK3sKKyAgICBpZiAocEZvcm1EaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcERSID0gcEZvcm1EaWN0LT5HZXREaWN0KCJEUiIpOworICAgIGlmIChwRFIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRm9udHMgPSBwRFItPkdldERpY3QoIkZvbnQiKTsKKyAgICBpZiAocEZvbnRzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIEZYX1BPU0lUSU9OIHBvcyA9IHBGb250cy0+R2V0U3RhcnRQb3MoKTsKKyAgICB3aGlsZSAocG9zKSB7CisgICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gTlVMTDsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3NLZXk7CisgICAgICAgIHBPYmogPSBwRm9udHMtPkdldE5leHRFbGVtZW50KHBvcywgY3NLZXkpOworICAgICAgICBpZiAocE9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBDUERGX09iamVjdCogcERpcmVjdCA9IHBPYmotPkdldERpcmVjdCgpOworICAgICAgICBpZiAocERpcmVjdCA9PSBOVUxMIHx8IHBEaXJlY3QtPkdldFR5cGUoKSAhPSBQREZPQkpfRElDVElPTkFSWSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRWxlbWVudCA9IChDUERGX0RpY3Rpb25hcnkqKXBEaXJlY3Q7CisgICAgICAgIGlmIChwRWxlbWVudC0+R2V0U3RyaW5nKCJUeXBlIikgIT0gIkZvbnQiKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBDUERGX0ZvbnQqIHBGaW5kID0gcERvY3VtZW50LT5Mb2FkRm9udChwRWxlbWVudCk7CisgICAgICAgIGlmIChwRmluZCA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBDRlhfU3Vic3RGb250KiBwU3Vic3QgPSAoQ0ZYX1N1YnN0Rm9udCopcEZpbmQtPkdldFN1YnN0Rm9udCgpOworICAgICAgICBpZiAocFN1YnN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChwU3Vic3QtPm1fQ2hhcnNldCA9PSAoaW50KWNoYXJTZXQpIHsKKyAgICAgICAgICAgIGNzTmFtZVRhZyA9IGNzS2V5OworICAgICAgICAgICAgcmV0dXJuIHBGaW5kOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorQ1BERl9Gb250KiBHZXROYXRpdmVJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpCit7CisgICAgY3NOYW1lVGFnID0gIiI7CisgICAgRlhfQllURSBjaGFyU2V0ID0gQ1BERl9JbnRlckZvcm06OkdldE5hdGl2ZUNoYXJTZXQoKTsKKyAgICBDRlhfU3Vic3RGb250KiBwU3Vic3Q7CisgICAgQ1BERl9Gb250KiBwRm9udCA9IEdldERlZmF1bHRJbnRlckZvcm1Gb250KHBGb3JtRGljdCwgcERvY3VtZW50KTsKKyAgICBpZiAocEZvbnQgIT0gTlVMTCkgeworICAgICAgICBwU3Vic3QgPSAoQ0ZYX1N1YnN0Rm9udCopcEZvbnQtPkdldFN1YnN0Rm9udCgpOworICAgICAgICBpZiAocFN1YnN0ICE9IE5VTEwgJiYgcFN1YnN0LT5tX0NoYXJzZXQgPT0gKGludCljaGFyU2V0KSB7CisgICAgICAgICAgICBGaW5kSW50ZXJGb3JtRm9udChwRm9ybURpY3QsIHBGb250LCBjc05hbWVUYWcpOworICAgICAgICAgICAgcmV0dXJuIHBGb250OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBHZXROYXRpdmVJbnRlckZvcm1Gb250KHBGb3JtRGljdCwgcERvY3VtZW50LCBjaGFyU2V0LCBjc05hbWVUYWcpOworfQorRlhfQk9PTCBGaW5kSW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqIHBGb3JtRGljdCwgY29uc3QgQ1BERl9Gb250KiBwRm9udCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZykKK3sKKyAgICBpZiAocEZvcm1EaWN0ID09IE5VTEwgfHwgcEZvbnQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcERSID0gcEZvcm1EaWN0LT5HZXREaWN0KCJEUiIpOworICAgIGlmIChwRFIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcEZvbnRzID0gcERSLT5HZXREaWN0KCJGb250Iik7CisgICAgaWYgKHBGb250cyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgRlhfUE9TSVRJT04gcG9zID0gcEZvbnRzLT5HZXRTdGFydFBvcygpOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgQ1BERl9PYmplY3QqIHBPYmogPSBOVUxMOworICAgICAgICBDRlhfQnl0ZVN0cmluZyBjc0tleTsKKyAgICAgICAgcE9iaiA9IHBGb250cy0+R2V0TmV4dEVsZW1lbnQocG9zLCBjc0tleSk7CisgICAgICAgIGlmIChwT2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIENQREZfT2JqZWN0KiBwRGlyZWN0ID0gcE9iai0+R2V0RGlyZWN0KCk7CisgICAgICAgIGlmIChwRGlyZWN0ID09IE5VTEwgfHwgcERpcmVjdC0+R2V0VHlwZSgpICE9IFBERk9CSl9ESUNUSU9OQVJZKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBDUERGX0RpY3Rpb25hcnkqIHBFbGVtZW50ID0gKENQREZfRGljdGlvbmFyeSopcERpcmVjdDsKKyAgICAgICAgaWYgKHBFbGVtZW50LT5HZXRTdHJpbmcoIlR5cGUiKSAhPSAiRm9udCIpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChwRm9udC0+R2V0Rm9udERpY3QoKSA9PSBwRWxlbWVudCkgeworICAgICAgICAgICAgY3NOYW1lVGFnID0gY3NLZXk7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitGWF9CT09MIEZpbmRJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIENGWF9CeXRlU3RyaW5nIGNzRm9udE5hbWUsIENQREZfRm9udComIHBGb250LCBDRlhfQnl0ZVN0cmluZyYgY3NOYW1lVGFnKQoreworICAgIGlmIChwRm9ybURpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcERSID0gcEZvcm1EaWN0LT5HZXREaWN0KCJEUiIpOworICAgIGlmIChwRFIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcEZvbnRzID0gcERSLT5HZXREaWN0KCJGb250Iik7CisgICAgaWYgKHBGb250cyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKGNzRm9udE5hbWUuR2V0TGVuZ3RoKCkgPiAwKSB7CisgICAgICAgIGNzRm9udE5hbWUuUmVtb3ZlKCcgJyk7CisgICAgfQorICAgIEZYX1BPU0lUSU9OIHBvcyA9IHBGb250cy0+R2V0U3RhcnRQb3MoKTsKKyAgICB3aGlsZSAocG9zKSB7CisgICAgICAgIENQREZfT2JqZWN0KiBwT2JqID0gTlVMTDsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgY3NLZXksIGNzVG1wOworICAgICAgICBwT2JqID0gcEZvbnRzLT5HZXROZXh0RWxlbWVudChwb3MsIGNzS2V5KTsKKyAgICAgICAgaWYgKHBPYmogPT0gTlVMTCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQ1BERl9PYmplY3QqIHBEaXJlY3QgPSBwT2JqLT5HZXREaXJlY3QoKTsKKyAgICAgICAgaWYgKHBEaXJlY3QgPT0gTlVMTCB8fCBwRGlyZWN0LT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIENQREZfRGljdGlvbmFyeSogcEVsZW1lbnQgPSAoQ1BERl9EaWN0aW9uYXJ5KilwRGlyZWN0OworICAgICAgICBpZiAocEVsZW1lbnQtPkdldFN0cmluZygiVHlwZSIpICE9ICJGb250IikgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgcEZvbnQgPSBwRG9jdW1lbnQtPkxvYWRGb250KHBFbGVtZW50KTsKKyAgICAgICAgaWYgKHBGb250ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIENGWF9CeXRlU3RyaW5nIGNzQmFzZUZvbnQ7CisgICAgICAgIGNzQmFzZUZvbnQgPSBwRm9udC0+R2V0QmFzZUZvbnQoKTsKKyAgICAgICAgY3NCYXNlRm9udC5SZW1vdmUoJyAnKTsKKyAgICAgICAgaWYgKGNzQmFzZUZvbnQgPT0gY3NGb250TmFtZSkgeworICAgICAgICAgICAgY3NOYW1lVGFnID0gY3NLZXk7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9Cit2b2lkIEFkZEludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiYgcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENQREZfRm9udCogcEZvbnQsIENGWF9CeXRlU3RyaW5nJiBjc05hbWVUYWcpCit7CisgICAgaWYgKHBGb250ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAocEZvcm1EaWN0ID09IE5VTEwpIHsKKyAgICAgICAgSW5pdEludGVyRm9ybURpY3QocEZvcm1EaWN0LCBwRG9jdW1lbnQpOworICAgIH0KKyAgICBDRlhfQnl0ZVN0cmluZyBjc1RhZzsKKyAgICBpZiAoRmluZEludGVyRm9ybUZvbnQocEZvcm1EaWN0LCBwRm9udCwgY3NUYWcpKSB7CisgICAgICAgIGNzTmFtZVRhZyA9IGNzVGFnOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChwRm9ybURpY3QgPT0gTlVMTCkgeworICAgICAgICBJbml0SW50ZXJGb3JtRGljdChwRm9ybURpY3QsIHBEb2N1bWVudCk7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcERSID0gcEZvcm1EaWN0LT5HZXREaWN0KCJEUiIpOworICAgIGlmIChwRFIgPT0gTlVMTCkgeworICAgICAgICBwRFIgPSBDUERGX0RpY3Rpb25hcnk6OkNyZWF0ZSgpOworICAgICAgICBpZiAocERSID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBwRm9ybURpY3QtPlNldEF0KCJEUiIsIHBEUik7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcEZvbnRzID0gcERSLT5HZXREaWN0KCJGb250Iik7CisgICAgaWYgKHBGb250cyA9PSBOVUxMKSB7CisgICAgICAgIHBGb250cyA9IENQREZfRGljdGlvbmFyeTo6Q3JlYXRlKCk7CisgICAgICAgIHBEUi0+U2V0QXQoIkZvbnQiLCBwRm9udHMpOworICAgIH0KKyAgICBpZiAoY3NOYW1lVGFnLklzRW1wdHkoKSkgeworICAgICAgICBjc05hbWVUYWcgPSBwRm9udC0+R2V0QmFzZUZvbnQoKTsKKyAgICB9CisgICAgY3NOYW1lVGFnLlJlbW92ZSgnICcpOworICAgIGNzTmFtZVRhZyA9IENQREZfSW50ZXJGb3JtOjpHZW5lcmF0ZU5ld1Jlc291cmNlTmFtZShwRFIsICJGb250IiwgNCwgY3NOYW1lVGFnKTsKKyAgICBwRm9udHMtPlNldEF0UmVmZXJlbmNlKGNzTmFtZVRhZywgcERvY3VtZW50LCBwRm9udC0+R2V0Rm9udERpY3QoKSk7Cit9CitDUERGX0ZvbnQqIEFkZE5hdGl2ZUludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiYgcEZvcm1EaWN0LCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIEZYX0JZVEUgY2hhclNldCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZykKK3sKKyAgICBpZiAocEZvcm1EaWN0ID09IE5VTEwpIHsKKyAgICAgICAgSW5pdEludGVyRm9ybURpY3QocEZvcm1EaWN0LCBwRG9jdW1lbnQpOworICAgIH0KKyAgICBDRlhfQnl0ZVN0cmluZyBjc1RlbXA7CisgICAgQ1BERl9Gb250KiBwRm9udCA9IEdldE5hdGl2ZUludGVyRm9ybUZvbnQocEZvcm1EaWN0LCBwRG9jdW1lbnQsIGNoYXJTZXQsIGNzVGVtcCk7CisgICAgaWYgKHBGb250ICE9IE5VTEwpIHsKKyAgICAgICAgY3NOYW1lVGFnID0gY3NUZW1wOworICAgICAgICByZXR1cm4gcEZvbnQ7CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIGNzRm9udE5hbWUgPSBDUERGX0ludGVyRm9ybTo6R2V0TmF0aXZlRm9udChjaGFyU2V0KTsKKyAgICBpZiAoIWNzRm9udE5hbWUuSXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChGaW5kSW50ZXJGb3JtRm9udChwRm9ybURpY3QsIHBEb2N1bWVudCwgY3NGb250TmFtZSwgcEZvbnQsIGNzTmFtZVRhZykpIHsKKyAgICAgICAgICAgIHJldHVybiBwRm9udDsKKyAgICAgICAgfQorICAgIH0KKyAgICBwRm9udCA9IENQREZfSW50ZXJGb3JtOjpBZGROYXRpdmVGb250KGNoYXJTZXQsIHBEb2N1bWVudCk7CisgICAgaWYgKHBGb250ICE9IE5VTEwpIHsKKyAgICAgICAgQWRkSW50ZXJGb3JtRm9udChwRm9ybURpY3QsIHBEb2N1bWVudCwgcEZvbnQsIGNzTmFtZVRhZyk7CisgICAgfQorICAgIHJldHVybiBwRm9udDsKK30KK0NQREZfRm9udCogQWRkTmF0aXZlSW50ZXJGb3JtRm9udChDUERGX0RpY3Rpb25hcnkqJiBwRm9ybURpY3QsIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ0ZYX0J5dGVTdHJpbmcmIGNzTmFtZVRhZykKK3sKKyAgICBGWF9CWVRFIGNoYXJTZXQgPSBDUERGX0ludGVyRm9ybTo6R2V0TmF0aXZlQ2hhclNldCgpOworICAgIHJldHVybiBBZGROYXRpdmVJbnRlckZvcm1Gb250KHBGb3JtRGljdCwgcERvY3VtZW50LCBjaGFyU2V0LCBjc05hbWVUYWcpOworfQordm9pZCBSZW1vdmVJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBjb25zdCBDUERGX0ZvbnQqIHBGb250KQoreworICAgIGlmIChwRm9ybURpY3QgPT0gTlVMTCB8fCBwRm9udCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgY3NUYWc7CisgICAgaWYgKCFGaW5kSW50ZXJGb3JtRm9udChwRm9ybURpY3QsIHBGb250LCBjc1RhZykpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBEUiA9IHBGb3JtRGljdC0+R2V0RGljdCgiRFIiKTsKKyAgICBDUERGX0RpY3Rpb25hcnkqIHBGb250cyA9IHBEUi0+R2V0RGljdCgiRm9udCIpOworICAgIHBGb250cy0+UmVtb3ZlQXQoY3NUYWcpOworfQordm9pZCBSZW1vdmVJbnRlckZvcm1Gb250KENQREZfRGljdGlvbmFyeSogcEZvcm1EaWN0LCBDRlhfQnl0ZVN0cmluZyBjc05hbWVUYWcpCit7CisgICAgaWYgKHBGb3JtRGljdCA9PSBOVUxMIHx8IGNzTmFtZVRhZy5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBEUiA9IHBGb3JtRGljdC0+R2V0RGljdCgiRFIiKTsKKyAgICBpZiAocERSID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkqIHBGb250cyA9IHBEUi0+R2V0RGljdCgiRm9udCIpOworICAgIGlmIChwRm9udHMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHBGb250cy0+UmVtb3ZlQXQoY3NOYW1lVGFnKTsKK30KK0NQREZfRm9udCogR2V0RGVmYXVsdEludGVyRm9ybUZvbnQoQ1BERl9EaWN0aW9uYXJ5KiBwRm9ybURpY3QsIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCkKK3sKKyAgICBpZiAocEZvcm1EaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENQREZfRGVmYXVsdEFwcGVhcmFuY2UgY0RBID0gcEZvcm1EaWN0LT5HZXRTdHJpbmcoIkRBIik7CisgICAgQ0ZYX0J5dGVTdHJpbmcgY3NGb250TmFtZVRhZzsKKyAgICBGWF9GTE9BVCBmRm9udFNpemU7CisgICAgY0RBLkdldEZvbnQoY3NGb250TmFtZVRhZywgZkZvbnRTaXplKTsKKyAgICByZXR1cm4gR2V0SW50ZXJGb3JtRm9udChwRm9ybURpY3QsIHBEb2N1bWVudCwgY3NGb250TmFtZVRhZyk7Cit9CitDUERGX0ljb25GaXQ6OlNjYWxlTWV0aG9kIENQREZfSWNvbkZpdDo6R2V0U2NhbGVNZXRob2QoKQoreworICAgIGlmIChtX3BEaWN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEFsd2F5czsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgY3NTVyA9IG1fcERpY3QtPkdldFN0cmluZygiU1ciLCAiQSIpOworICAgIGlmIChjc1NXID09ICJCIikgeworICAgICAgICByZXR1cm4gQmlnZ2VyOworICAgIH0gZWxzZSBpZiAoY3NTVyA9PSAiUyIpIHsKKyAgICAgICAgcmV0dXJuIFNtYWxsZXI7CisgICAgfSBlbHNlIGlmIChjc1NXID09ICJOIikgeworICAgICAgICByZXR1cm4gTmV2ZXI7CisgICAgfQorICAgIHJldHVybiBBbHdheXM7Cit9CitGWF9CT09MIENQREZfSWNvbkZpdDo6SXNQcm9wb3J0aW9uYWxTY2FsZSgpCit7CisgICAgaWYgKG1fcERpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIG1fcERpY3QtPkdldFN0cmluZygiUyIsICJQIikgIT0gIkEiOworfQordm9pZCBDUERGX0ljb25GaXQ6OkdldEljb25Qb3NpdGlvbihGWF9GTE9BVCYgZkxlZnQsIEZYX0ZMT0FUJiBmQm90dG9tKQoreworICAgIGZMZWZ0ID0gZkJvdHRvbSA9IDAuNTsKKyAgICBpZiAobV9wRGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1BERl9BcnJheSogcEEgPSBtX3BEaWN0LT5HZXRBcnJheSgiQSIpOworICAgIGlmIChwQSAhPSBOVUxMKSB7CisgICAgICAgIEZYX0RXT1JEIGR3Q291bnQgPSBwQS0+R2V0Q291bnQoKTsKKyAgICAgICAgaWYgKGR3Q291bnQgPiAwKSB7CisgICAgICAgICAgICBmTGVmdCA9IHBBLT5HZXROdW1iZXIoMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGR3Q291bnQgPiAxKSB7CisgICAgICAgICAgICBmQm90dG9tID0gcEEtPkdldE51bWJlcigxKTsKKyAgICAgICAgfQorICAgIH0KK30KK0ZYX0JPT0wgQ1BERl9JY29uRml0OjpHZXRGaXR0aW5nQm91bmRzKCkKK3sKKyAgICBpZiAobV9wRGljdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIG1fcERpY3QtPkdldEJvb2xlYW4oIkZCIik7Cit9Cit2b2lkIFNhdmVDaGVja2VkRmllbGRTdGF0dXMoQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCwgQ0ZYX0J5dGVBcnJheSYgc3RhdHVzQXJyYXkpCit7CisgICAgaW50IGlDb3VudCA9IHBGaWVsZC0+Q291bnRDb250cm9scygpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaUNvdW50OyBpICsrKSB7CisgICAgICAgIENQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sID0gcEZpZWxkLT5HZXRDb250cm9sKGkpOworICAgICAgICBpZiAocENvbnRyb2wgPT0gTlVMTCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgc3RhdHVzQXJyYXkuQWRkKHBDb250cm9sLT5Jc0NoZWNrZWQoKSA/IDEgOiAwKTsKKyAgICB9Cit9CitDUERGX09iamVjdCogRlBERl9HZXRGaWVsZEF0dHIoQ1BERl9EaWN0aW9uYXJ5KiBwRmllbGREaWN0LCBjb25zdCBGWF9DSEFSKiBuYW1lLCBpbnQgbkxldmVsKQoreworICAgIGlmIChuTGV2ZWwgPiBGUERGRE9DX1VUSUxTX01BWFJFQ1VSU0lPTikgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHBGaWVsZERpY3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1BERl9PYmplY3QqIHBBdHRyID0gcEZpZWxkRGljdC0+R2V0RWxlbWVudFZhbHVlKG5hbWUpOworICAgIGlmIChwQXR0cikgeworICAgICAgICByZXR1cm4gcEF0dHI7CisgICAgfQorICAgIENQREZfRGljdGlvbmFyeSogcFBhcmVudCA9IHBGaWVsZERpY3QtPkdldERpY3QoIlBhcmVudCIpOworICAgIGlmIChwUGFyZW50ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBGUERGX0dldEZpZWxkQXR0cihwUGFyZW50LCBuYW1lLCBuTGV2ZWwgKyAxKTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX3ZpZXdlclByZWZlcmVuY2VzLmNwcCBiL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX3ZpZXdlclByZWZlcmVuY2VzLmNwcAppbmRleCA4MGFmMGI1Li42MTc0ODVjIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmZG9jL2RvY192aWV3ZXJQcmVmZXJlbmNlcy5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmRvYy9kb2Nfdmlld2VyUHJlZmVyZW5jZXMuY3BwCkBAIC0xLDMxICsxLDMxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mcGRmZG9jL2ZwZGZfZG9jLmgiDQotQ1BERl9WaWV3ZXJQcmVmZXJlbmNlczo6Q1BERl9WaWV3ZXJQcmVmZXJlbmNlcyhDUERGX0RvY3VtZW50ICpwRG9jKTogbV9wRG9jKHBEb2MpDQotew0KLX0NCi1DUERGX1ZpZXdlclByZWZlcmVuY2VzOjp+Q1BERl9WaWV3ZXJQcmVmZXJlbmNlcygpDQotew0KLX0NCi1GWF9CT09MIENQREZfVmlld2VyUHJlZmVyZW5jZXM6OklzRGlyZWN0aW9uUjJMKCkgY29uc3QNCi17DQotICAgIENQREZfRGljdGlvbmFyeSAqcERpY3QgPSBtX3BEb2MtPkdldFJvb3QoKTsNCi0gICAgcERpY3QgPSBwRGljdC0+R2V0RGljdChGWF9CU1RSQygiVmlld2VyUHJlZmVyZW5jZXMiKSk7DQotICAgIGlmICghcERpY3QpCXsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRlhfQlNUUkMoIlIyTCIpID09IHBEaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIkRpcmVjdGlvbiIpKTsNCi19DQotRlhfQk9PTCBDUERGX1ZpZXdlclByZWZlcmVuY2VzOjpQcmludFNjYWxpbmcoKSBjb25zdA0KLXsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5ICpwRGljdCA9IG1fcERvYy0+R2V0Um9vdCgpOw0KLSAgICBwRGljdCA9IHBEaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJWaWV3ZXJQcmVmZXJlbmNlcyIpKTsNCi0gICAgaWYgKCFwRGljdCkJew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgcmV0dXJuIEZYX0JTVFJDKCJOb25lIikgIT0gcERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiUHJpbnRTY2FsaW5nIikpOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mcGRmZG9jL2ZwZGZfZG9jLmgiCitDUERGX1ZpZXdlclByZWZlcmVuY2VzOjpDUERGX1ZpZXdlclByZWZlcmVuY2VzKENQREZfRG9jdW1lbnQgKnBEb2MpOiBtX3BEb2MocERvYykKK3sKK30KK0NQREZfVmlld2VyUHJlZmVyZW5jZXM6On5DUERGX1ZpZXdlclByZWZlcmVuY2VzKCkKK3sKK30KK0ZYX0JPT0wgQ1BERl9WaWV3ZXJQcmVmZXJlbmNlczo6SXNEaXJlY3Rpb25SMkwoKSBjb25zdAoreworICAgIENQREZfRGljdGlvbmFyeSAqcERpY3QgPSBtX3BEb2MtPkdldFJvb3QoKTsKKyAgICBwRGljdCA9IHBEaWN0LT5HZXREaWN0KEZYX0JTVFJDKCJWaWV3ZXJQcmVmZXJlbmNlcyIpKTsKKyAgICBpZiAoIXBEaWN0KQl7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIEZYX0JTVFJDKCJSMkwiKSA9PSBwRGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJEaXJlY3Rpb24iKSk7Cit9CitGWF9CT09MIENQREZfVmlld2VyUHJlZmVyZW5jZXM6OlByaW50U2NhbGluZygpIGNvbnN0Cit7CisgICAgQ1BERl9EaWN0aW9uYXJ5ICpwRGljdCA9IG1fcERvYy0+R2V0Um9vdCgpOworICAgIHBEaWN0ID0gcERpY3QtPkdldERpY3QoRlhfQlNUUkMoIlZpZXdlclByZWZlcmVuY2VzIikpOworICAgIGlmICghcERpY3QpCXsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGWF9CU1RSQygiTm9uZSIpICE9IHBEaWN0LT5HZXRTdHJpbmcoRlhfQlNUUkMoIlByaW50U2NhbGluZyIpKTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX3Z0LmNwcCBiL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX3Z0LmNwcAppbmRleCAyNTExNzNkLi45ZGU5ZmZkIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmZG9jL2RvY192dC5jcHAKKysrIGIvY29yZS9zcmMvZnBkZmRvYy9kb2NfdnQuY3BwCkBAIC0xLDE4NjQgKzEsMTg2NCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmRvYy9mcGRmX2RvYy5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZkb2MvZnBkZl92dC5oIg0KLSNpbmNsdWRlICJwZGZfdnQuaCINCi1jb25zdCBGWF9CWVRFIGdGb250U2l6ZVN0ZXBzW10gPSB7CTQsIDYsIDgsIDksIDEwLAkxMiwgMTQsIDE4LCAyMCwgMjUsCTMwLCAzNSwgNDAsIDQ1LCA1MCwJNTUsIDYwLCA3MCwgODAsIDkwLAkxMDAsIDExMCwgMTIwLCAxMzAsIDE0NH07DQotI2RlZmluZSBQVlRfUkVUVVJOX0xFTkdUSAkJCQkJMQ0KLSNkZWZpbmUgUFZUX0RFRkFVTFRfRk9OVFNJWkUJCQkJMTguMGYNCi0jZGVmaW5lIFBWVFdPUkRfU0NSSVBUX05PUk1BTAkJCQkwDQotI2RlZmluZSBQVlRXT1JEX1NDUklQVF9TVVBFUgkJCQkxDQotI2RlZmluZSBQVlRXT1JEX1NDUklQVF9TVUIJCQkJCTINCi0jZGVmaW5lCVBWVF9GT05UU0NBTEUJCQkJCQkwLjAwMWYNCi0jZGVmaW5lIFBWVF9QRVJDRU5UCQkJCQkJCTAuMDFmDQotI2RlZmluZSBQVlRfSEFMRgkJCQkJCQkwLjVmDQotQ0xpbmU6OkNMaW5lKCkNCi17DQotfQ0KLUNMaW5lOjp+Q0xpbmUoKQ0KLXsNCi19DQotQ1BWVF9Xb3JkUGxhY2UgQ0xpbmU6OkdldEJlZ2luV29yZFBsYWNlKCkgY29uc3QNCi17DQotICAgIHJldHVybiBDUFZUX1dvcmRQbGFjZShMaW5lUGxhY2UublNlY0luZGV4LCBMaW5lUGxhY2UubkxpbmVJbmRleCwgLTEpOw0KLX0NCi1DUFZUX1dvcmRQbGFjZSBDTGluZTo6R2V0RW5kV29yZFBsYWNlKCkgY29uc3QNCi17DQotICAgIHJldHVybiBDUFZUX1dvcmRQbGFjZShMaW5lUGxhY2UublNlY0luZGV4LCBMaW5lUGxhY2UubkxpbmVJbmRleCwgbV9MaW5lSW5mby5uRW5kV29yZEluZGV4KTsNCi19DQotQ1BWVF9Xb3JkUGxhY2UgQ0xpbmU6OkdldFByZXZXb3JkUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3QNCi17DQotICAgIGlmIChwbGFjZS5uV29yZEluZGV4ID4gbV9MaW5lSW5mby5uRW5kV29yZEluZGV4KSB7DQotICAgICAgICByZXR1cm4gQ1BWVF9Xb3JkUGxhY2UocGxhY2UublNlY0luZGV4LCBwbGFjZS5uTGluZUluZGV4LCBtX0xpbmVJbmZvLm5FbmRXb3JkSW5kZXgpOw0KLSAgICB9DQotICAgIHJldHVybiBDUFZUX1dvcmRQbGFjZShwbGFjZS5uU2VjSW5kZXgsIHBsYWNlLm5MaW5lSW5kZXgsIHBsYWNlLm5Xb3JkSW5kZXggLSAxKTsNCi19DQotQ1BWVF9Xb3JkUGxhY2UgQ0xpbmU6OkdldE5leHRXb3JkUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3QNCi17DQotICAgIGlmIChwbGFjZS5uV29yZEluZGV4IDwgbV9MaW5lSW5mby5uQmVnaW5Xb3JkSW5kZXgpIHsNCi0gICAgICAgIHJldHVybiBDUFZUX1dvcmRQbGFjZShwbGFjZS5uU2VjSW5kZXgsIHBsYWNlLm5MaW5lSW5kZXgsIG1fTGluZUluZm8ubkJlZ2luV29yZEluZGV4KTsNCi0gICAgfQ0KLSAgICByZXR1cm4gQ1BWVF9Xb3JkUGxhY2UocGxhY2UublNlY0luZGV4LCBwbGFjZS5uTGluZUluZGV4LCBwbGFjZS5uV29yZEluZGV4ICsgMSk7DQotfQ0KLUNTZWN0aW9uOjpDU2VjdGlvbihDUERGX1ZhcmlhYmxlVGV4dCAqIHBWVCkgOiBtX3BWVChwVlQpDQotew0KLX0NCi1DU2VjdGlvbjo6fkNTZWN0aW9uKCkNCi17DQotICAgIFJlc2V0QWxsKCk7DQotfQ0KLXZvaWQgQ1NlY3Rpb246OlJlc2V0QWxsKCkNCi17DQotICAgIFJlc2V0V29yZEFycmF5KCk7DQotICAgIFJlc2V0TGluZUFycmF5KCk7DQotfQ0KLXZvaWQgQ1NlY3Rpb246OlJlc2V0TGluZUFycmF5KCkNCi17DQotICAgIG1fTGluZUFycmF5LlJlbW92ZUFsbCgpOw0KLX0NCi12b2lkIENTZWN0aW9uOjpSZXNldFdvcmRBcnJheSgpDQotew0KLSAgICBmb3IgKEZYX0lOVDMyIGkgPSAwLCBzeiA9IG1fV29yZEFycmF5LkdldFNpemUoKTsgaSA8IHN6OyBpKyspIHsNCi0gICAgICAgIGRlbGV0ZSBtX1dvcmRBcnJheS5HZXRBdChpKTsNCi0gICAgfQ0KLSAgICBtX1dvcmRBcnJheS5SZW1vdmVBbGwoKTsNCi19DQotdm9pZCBDU2VjdGlvbjo6UmVzZXRMaW5lUGxhY2UoKQ0KLXsNCi0gICAgZm9yIChGWF9JTlQzMiBpID0gMCwgc3ogPSBtX0xpbmVBcnJheS5HZXRTaXplKCk7IGkgPCBzejsgaSsrKSB7DQotICAgICAgICBpZiAoQ0xpbmUgKiBwTGluZSA9IG1fTGluZUFycmF5LkdldEF0KGkpKSB7DQotICAgICAgICAgICAgcExpbmUtPkxpbmVQbGFjZSA9IENQVlRfV29yZFBsYWNlKFNlY1BsYWNlLm5TZWNJbmRleCwgaSwgLTEpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLUNQVlRfV29yZFBsYWNlIENTZWN0aW9uOjpBZGRXb3JkKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIGNvbnN0IENQVlRfV29yZEluZm8gJiB3b3JkaW5mbykNCi17DQotICAgIGlmIChDUFZUX1dvcmRJbmZvICogcFdvcmQgPSBGWF9ORVcgQ1BWVF9Xb3JkSW5mbyh3b3JkaW5mbykpIHsNCi0gICAgICAgIEZYX0lOVDMyIG5Xb3JkSW5kZXggPSBGUERGX01BWChGUERGX01JTihwbGFjZS5uV29yZEluZGV4LCB0aGlzLT5tX1dvcmRBcnJheS5HZXRTaXplKCkpLCAwKTsNCi0gICAgICAgIGlmIChuV29yZEluZGV4ID09IG1fV29yZEFycmF5LkdldFNpemUoKSkgew0KLSAgICAgICAgICAgIG1fV29yZEFycmF5LkFkZChwV29yZCk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIG1fV29yZEFycmF5Lkluc2VydEF0KG5Xb3JkSW5kZXgsIHBXb3JkKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gcGxhY2U7DQotfQ0KLUNQVlRfV29yZFBsYWNlIENTZWN0aW9uOjpBZGRMaW5lKGNvbnN0IENQVlRfTGluZUluZm8gJiBsaW5laW5mbykNCi17DQotICAgIHJldHVybiBDUFZUX1dvcmRQbGFjZShTZWNQbGFjZS5uU2VjSW5kZXgsIG1fTGluZUFycmF5LkFkZChsaW5laW5mbyksIC0xKTsNCi19DQotQ1BWVF9GbG9hdFJlY3QgQ1NlY3Rpb246OlJlYXJyYW5nZSgpDQotew0KLSAgICBBU1NFUlQobV9wVlQgIT0gTlVMTCk7DQotICAgIGlmIChtX3BWVC0+bV9uQ2hhckFycmF5ID4gMCkgew0KLSAgICAgICAgcmV0dXJuIENUeXBlc2V0KHRoaXMpLkNoYXJBcnJheSgpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmV0dXJuIENUeXBlc2V0KHRoaXMpLlR5cGVzZXQoKTsNCi0gICAgfQ0KLX0NCi1DUFZUX1NpemUgQ1NlY3Rpb246OkdldFNlY3Rpb25TaXplKEZYX0ZMT0FUIGZGb250U2l6ZSkNCi17DQotICAgIHJldHVybiBDVHlwZXNldCh0aGlzKS5HZXRFZGl0U2l6ZShmRm9udFNpemUpOw0KLX0NCi1DUFZUX1dvcmRQbGFjZSBDU2VjdGlvbjo6R2V0QmVnaW5Xb3JkUGxhY2UoKSBjb25zdA0KLXsNCi0gICAgaWYgKENMaW5lICogcExpbmUgPSBtX0xpbmVBcnJheS5HZXRBdCgwKSkgew0KLSAgICAgICAgcmV0dXJuIHBMaW5lLT5HZXRCZWdpbldvcmRQbGFjZSgpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmV0dXJuIFNlY1BsYWNlOw0KLSAgICB9DQotfQ0KLUNQVlRfV29yZFBsYWNlIENTZWN0aW9uOjpHZXRFbmRXb3JkUGxhY2UoKSBjb25zdA0KLXsNCi0gICAgaWYgKENMaW5lICogcExpbmUgPSBtX0xpbmVBcnJheS5HZXRBdChtX0xpbmVBcnJheS5HZXRTaXplKCkgLSAxKSkgew0KLSAgICAgICAgcmV0dXJuIHBMaW5lLT5HZXRFbmRXb3JkUGxhY2UoKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHJldHVybiB0aGlzLT5TZWNQbGFjZTsNCi0gICAgfQ0KLX0NCi1DUFZUX1dvcmRQbGFjZSBDU2VjdGlvbjo6R2V0UHJldldvcmRQbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdA0KLXsNCi0gICAgaWYgKHBsYWNlLm5MaW5lSW5kZXggPCAwKSB7DQotICAgICAgICByZXR1cm4gR2V0QmVnaW5Xb3JkUGxhY2UoKTsNCi0gICAgfQ0KLSAgICBpZiAocGxhY2UubkxpbmVJbmRleCA+PSBtX0xpbmVBcnJheS5HZXRTaXplKCkpIHsNCi0gICAgICAgIHJldHVybiBHZXRFbmRXb3JkUGxhY2UoKTsNCi0gICAgfQ0KLSAgICBpZiAoQ0xpbmUgKiBwTGluZSA9IG1fTGluZUFycmF5LkdldEF0KHBsYWNlLm5MaW5lSW5kZXgpKSB7DQotICAgICAgICBpZiAocGxhY2UubldvcmRJbmRleCA9PSBwTGluZS0+bV9MaW5lSW5mby5uQmVnaW5Xb3JkSW5kZXgpIHsNCi0gICAgICAgICAgICByZXR1cm4gQ1BWVF9Xb3JkUGxhY2UocGxhY2UublNlY0luZGV4LCBwbGFjZS5uTGluZUluZGV4LCAtMSk7DQotICAgICAgICB9IGVsc2UgaWYgKHBsYWNlLm5Xb3JkSW5kZXggPCBwTGluZS0+bV9MaW5lSW5mby5uQmVnaW5Xb3JkSW5kZXgpIHsNCi0gICAgICAgICAgICBpZiAoQ0xpbmUgKiBwUHJldkxpbmUgPSBtX0xpbmVBcnJheS5HZXRBdChwbGFjZS5uTGluZUluZGV4IC0gMSkpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBQcmV2TGluZS0+R2V0RW5kV29yZFBsYWNlKCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICByZXR1cm4gcExpbmUtPkdldFByZXZXb3JkUGxhY2UocGxhY2UpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBwbGFjZTsNCi19DQotQ1BWVF9Xb3JkUGxhY2UgQ1NlY3Rpb246OkdldE5leHRXb3JkUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3QNCi17DQotICAgIGlmIChwbGFjZS5uTGluZUluZGV4IDwgMCkgew0KLSAgICAgICAgcmV0dXJuIEdldEJlZ2luV29yZFBsYWNlKCk7DQotICAgIH0NCi0gICAgaWYgKHBsYWNlLm5MaW5lSW5kZXggPj0gbV9MaW5lQXJyYXkuR2V0U2l6ZSgpKSB7DQotICAgICAgICByZXR1cm4gR2V0RW5kV29yZFBsYWNlKCk7DQotICAgIH0NCi0gICAgaWYgKENMaW5lICogcExpbmUgPSBtX0xpbmVBcnJheS5HZXRBdChwbGFjZS5uTGluZUluZGV4KSkgew0KLSAgICAgICAgaWYgKHBsYWNlLm5Xb3JkSW5kZXggPj0gcExpbmUtPm1fTGluZUluZm8ubkVuZFdvcmRJbmRleCkgew0KLSAgICAgICAgICAgIGlmIChDTGluZSAqIHBOZXh0TGluZSA9IG1fTGluZUFycmF5LkdldEF0KHBsYWNlLm5MaW5lSW5kZXggKyAxKSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gcE5leHRMaW5lLT5HZXRCZWdpbldvcmRQbGFjZSgpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcmV0dXJuIHBMaW5lLT5HZXROZXh0V29yZFBsYWNlKHBsYWNlKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gcGxhY2U7DQotfQ0KLXZvaWQgQ1NlY3Rpb246OlVwZGF0ZVdvcmRQbGFjZShDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdA0KLXsNCi0gICAgRlhfSU5UMzIgbkxlZnQgPSAwOw0KLSAgICBGWF9JTlQzMiBuUmlnaHQgPSBtX0xpbmVBcnJheS5HZXRTaXplKCkgLSAxOw0KLSAgICBGWF9JTlQzMiBuTWlkID0gKG5MZWZ0ICsgblJpZ2h0KSAvIDI7DQotICAgIHdoaWxlIChuTGVmdCA8PSBuUmlnaHQpIHsNCi0gICAgICAgIGlmIChDTGluZSAqIHBMaW5lID0gbV9MaW5lQXJyYXkuR2V0QXQobk1pZCkpIHsNCi0gICAgICAgICAgICBpZiAocGxhY2UubldvcmRJbmRleCA8IHBMaW5lLT5tX0xpbmVJbmZvLm5CZWdpbldvcmRJbmRleCkgew0KLSAgICAgICAgICAgICAgICBuUmlnaHQgPSBuTWlkIC0gMTsNCi0gICAgICAgICAgICAgICAgbk1pZCA9IChuTGVmdCArIG5SaWdodCkgLyAyOw0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAocGxhY2UubldvcmRJbmRleCA+IHBMaW5lLT5tX0xpbmVJbmZvLm5FbmRXb3JkSW5kZXgpIHsNCi0gICAgICAgICAgICAgICAgbkxlZnQgPSBuTWlkICsgMTsNCi0gICAgICAgICAgICAgICAgbk1pZCA9IChuTGVmdCArIG5SaWdodCkgLyAyOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHBsYWNlLm5MaW5lSW5kZXggPSBuTWlkOw0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1DUFZUX1dvcmRQbGFjZSBDU2VjdGlvbjo6U2VhcmNoV29yZFBsYWNlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3QNCi17DQotICAgIEFTU0VSVChtX3BWVCAhPSBOVUxMKTsNCi0gICAgQ1BWVF9Xb3JkUGxhY2UgcGxhY2UgPSBHZXRCZWdpbldvcmRQbGFjZSgpOw0KLSAgICBGWF9CT09MIGJVcCA9IFRSVUU7DQotICAgIEZYX0JPT0wgYkRvd24gPSBUUlVFOw0KLSAgICBGWF9JTlQzMiBuTGVmdCA9IDA7DQotICAgIEZYX0lOVDMyIG5SaWdodCA9IG1fTGluZUFycmF5LkdldFNpemUoKSAtIDE7DQotICAgIEZYX0lOVDMyIG5NaWQgPSBtX0xpbmVBcnJheS5HZXRTaXplKCkgLyAyOw0KLSAgICBGWF9GTE9BVCBmVG9wID0gMDsNCi0gICAgRlhfRkxPQVQgZkJvdHRvbSA9IDA7DQotICAgIHdoaWxlIChuTGVmdCA8PSBuUmlnaHQpIHsNCi0gICAgICAgIGlmIChDTGluZSAqIHBMaW5lID0gbV9MaW5lQXJyYXkuR2V0QXQobk1pZCkpIHsNCi0gICAgICAgICAgICBmVG9wID0gcExpbmUtPm1fTGluZUluZm8uZkxpbmVZIC0gcExpbmUtPm1fTGluZUluZm8uZkxpbmVBc2NlbnQgLSBtX3BWVC0+R2V0TGluZUxlYWRpbmcobV9TZWNJbmZvKTsNCi0gICAgICAgICAgICBmQm90dG9tID0gcExpbmUtPm1fTGluZUluZm8uZkxpbmVZIC0gcExpbmUtPm1fTGluZUluZm8uZkxpbmVEZXNjZW50Ow0KLSAgICAgICAgICAgIGlmIChJc0Zsb2F0QmlnZ2VyKHBvaW50LnksIGZUb3ApKSB7DQotICAgICAgICAgICAgICAgIGJVcCA9IEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoSXNGbG9hdFNtYWxsZXIocG9pbnQueSwgZkJvdHRvbSkpIHsNCi0gICAgICAgICAgICAgICAgYkRvd24gPSBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKElzRmxvYXRTbWFsbGVyKHBvaW50LnksIGZUb3ApKSB7DQotICAgICAgICAgICAgICAgIG5SaWdodCA9IG5NaWQgLSAxOw0KLSAgICAgICAgICAgICAgICBuTWlkID0gKG5MZWZ0ICsgblJpZ2h0KSAvIDI7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoSXNGbG9hdEJpZ2dlcihwb2ludC55LCBmQm90dG9tKSkgew0KLSAgICAgICAgICAgICAgICBuTGVmdCA9IG5NaWQgKyAxOw0KLSAgICAgICAgICAgICAgICBuTWlkID0gKG5MZWZ0ICsgblJpZ2h0KSAvIDI7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHBsYWNlID0gU2VhcmNoV29yZFBsYWNlKHBvaW50LngsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQVlRfV29yZFJhbmdlKHBMaW5lLT5HZXROZXh0V29yZFBsYWNlKHBMaW5lLT5HZXRCZWdpbldvcmRQbGFjZSgpKSwgcExpbmUtPkdldEVuZFdvcmRQbGFjZSgpKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQotICAgICAgICAgICAgICAgIHBsYWNlLm5MaW5lSW5kZXggPSBuTWlkOw0KLSAgICAgICAgICAgICAgICByZXR1cm4gcGxhY2U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChiVXApIHsNCi0gICAgICAgIHBsYWNlID0gR2V0QmVnaW5Xb3JkUGxhY2UoKTsNCi0gICAgfQ0KLSAgICBpZiAoYkRvd24pIHsNCi0gICAgICAgIHBsYWNlID0gR2V0RW5kV29yZFBsYWNlKCk7DQotICAgIH0NCi0gICAgcmV0dXJuIHBsYWNlOw0KLX0NCi1DUFZUX1dvcmRQbGFjZSBDU2VjdGlvbjo6U2VhcmNoV29yZFBsYWNlKEZYX0ZMT0FUIGZ4LCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIGxpbmVwbGFjZSkgY29uc3QNCi17DQotICAgIGlmIChDTGluZSAqIHBMaW5lID0gbV9MaW5lQXJyYXkuR2V0QXQobGluZXBsYWNlLm5MaW5lSW5kZXgpKSB7DQotICAgICAgICByZXR1cm4gU2VhcmNoV29yZFBsYWNlKGZ4IC0gbV9TZWNJbmZvLnJjU2VjdGlvbi5sZWZ0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFZUX1dvcmRSYW5nZShwTGluZS0+R2V0TmV4dFdvcmRQbGFjZShwTGluZS0+R2V0QmVnaW5Xb3JkUGxhY2UoKSksIHBMaW5lLT5HZXRFbmRXb3JkUGxhY2UoKSkpOw0KLSAgICB9DQotICAgIHJldHVybiBHZXRCZWdpbldvcmRQbGFjZSgpOw0KLX0NCi1DUFZUX1dvcmRQbGFjZSBDU2VjdGlvbjo6U2VhcmNoV29yZFBsYWNlKEZYX0ZMT0FUIGZ4LCBjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHJhbmdlKSBjb25zdA0KLXsNCi0gICAgQ1BWVF9Xb3JkUGxhY2Ugd29yZHBsYWNlID0gcmFuZ2UuQmVnaW5Qb3M7DQotICAgIHdvcmRwbGFjZS5uV29yZEluZGV4ID0gLTE7DQotICAgIGlmICghbV9wVlQpCXsNCi0gICAgICAgIHJldHVybiB3b3JkcGxhY2U7DQotICAgIH0NCi0gICAgRlhfSU5UMzIgbkxlZnQgPSByYW5nZS5CZWdpblBvcy5uV29yZEluZGV4Ow0KLSAgICBGWF9JTlQzMiBuUmlnaHQgPSByYW5nZS5FbmRQb3MubldvcmRJbmRleCArIDE7DQotICAgIEZYX0lOVDMyIG5NaWQgPSAobkxlZnQgKyBuUmlnaHQpIC8gMjsNCi0gICAgd2hpbGUgKG5MZWZ0IDwgblJpZ2h0KSB7DQotICAgICAgICBpZiAobk1pZCA9PSBuTGVmdCkgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG5NaWQgPT0gblJpZ2h0KSB7DQotICAgICAgICAgICAgbk1pZC0tOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKENQVlRfV29yZEluZm8gKiBwV29yZCA9IG1fV29yZEFycmF5LkdldEF0KG5NaWQpKSB7DQotICAgICAgICAgICAgaWYgKGZ4ID4gcFdvcmQtPmZXb3JkWCArIG1fcFZULT5HZXRXb3JkV2lkdGgoKnBXb3JkKSAqIFBWVF9IQUxGKSB7DQotICAgICAgICAgICAgICAgIG5MZWZ0ID0gbk1pZDsNCi0gICAgICAgICAgICAgICAgbk1pZCA9IChuTGVmdCArIG5SaWdodCkgLyAyOw0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBuUmlnaHQgPSBuTWlkOw0KLSAgICAgICAgICAgICAgICBuTWlkID0gKG5MZWZ0ICsgblJpZ2h0KSAvIDI7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKENQVlRfV29yZEluZm8gKiBwV29yZCA9IG1fV29yZEFycmF5LkdldEF0KG5NaWQpKSB7DQotICAgICAgICBpZiAoZnggPiBwV29yZC0+ZldvcmRYICsgbV9wVlQtPkdldFdvcmRXaWR0aCgqcFdvcmQpICogUFZUX0hBTEYpIHsNCi0gICAgICAgICAgICB3b3JkcGxhY2UubldvcmRJbmRleCA9IG5NaWQ7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIHdvcmRwbGFjZTsNCi19DQotdm9pZCBDU2VjdGlvbjo6Q2xlYXJMZWZ0V29yZHMoRlhfSU5UMzIgbldvcmRJbmRleCkNCi17DQotICAgIGZvciAoRlhfSU5UMzIgaSA9IG5Xb3JkSW5kZXg7IGkgPj0gMDsgaS0tKSB7DQotICAgICAgICBkZWxldGUgbV9Xb3JkQXJyYXkuR2V0QXQoaSk7DQotICAgICAgICBtX1dvcmRBcnJheS5SZW1vdmVBdChpKTsNCi0gICAgfQ0KLX0NCi12b2lkIENTZWN0aW9uOjpDbGVhclJpZ2h0V29yZHMoRlhfSU5UMzIgbldvcmRJbmRleCkNCi17DQotICAgIGZvciAoRlhfSU5UMzIgaSA9IG1fV29yZEFycmF5LkdldFNpemUoKSAtIDE7IGkgPiBuV29yZEluZGV4OyBpLS0pIHsNCi0gICAgICAgIGRlbGV0ZSBtX1dvcmRBcnJheS5HZXRBdChpKTsNCi0gICAgICAgIG1fV29yZEFycmF5LlJlbW92ZUF0KGkpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1NlY3Rpb246OkNsZWFyTWlkV29yZHMoRlhfSU5UMzIgbkJlZ2luSW5kZXgsIEZYX0lOVDMyIG5FbmRJbmRleCkNCi17DQotICAgIGZvciAoRlhfSU5UMzIgaSA9IG5FbmRJbmRleDsgaSA+IG5CZWdpbkluZGV4OyBpLS0pIHsNCi0gICAgICAgIGRlbGV0ZSBtX1dvcmRBcnJheS5HZXRBdChpKTsNCi0gICAgICAgIG1fV29yZEFycmF5LlJlbW92ZUF0KGkpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1NlY3Rpb246OkNsZWFyV29yZHMoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiBQbGFjZVJhbmdlKQ0KLXsNCi0gICAgQ1BWVF9Xb3JkUGxhY2UgU2VjQmVnaW5Qb3MgPSBHZXRCZWdpbldvcmRQbGFjZSgpOw0KLSAgICBDUFZUX1dvcmRQbGFjZSBTZWNFbmRQb3MgPSBHZXRFbmRXb3JkUGxhY2UoKTsNCi0gICAgaWYgKFBsYWNlUmFuZ2UuQmVnaW5Qb3MuV29yZENtcChTZWNCZWdpblBvcykgPj0gMCkgew0KLSAgICAgICAgaWYgKFBsYWNlUmFuZ2UuRW5kUG9zLldvcmRDbXAoU2VjRW5kUG9zKSA8PSAwKSB7DQotICAgICAgICAgICAgQ2xlYXJNaWRXb3JkcyhQbGFjZVJhbmdlLkJlZ2luUG9zLm5Xb3JkSW5kZXgsIFBsYWNlUmFuZ2UuRW5kUG9zLm5Xb3JkSW5kZXgpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBDbGVhclJpZ2h0V29yZHMoUGxhY2VSYW5nZS5CZWdpblBvcy5uV29yZEluZGV4KTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIGlmIChQbGFjZVJhbmdlLkVuZFBvcy5Xb3JkQ21wKFNlY0VuZFBvcykgPD0gMCkgew0KLSAgICAgICAgQ2xlYXJMZWZ0V29yZHMoUGxhY2VSYW5nZS5FbmRQb3MubldvcmRJbmRleCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBSZXNldFdvcmRBcnJheSgpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1NlY3Rpb246OkNsZWFyV29yZChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKQ0KLXsNCi0gICAgZGVsZXRlIG1fV29yZEFycmF5LkdldEF0KHBsYWNlLm5Xb3JkSW5kZXgpOw0KLSAgICBtX1dvcmRBcnJheS5SZW1vdmVBdChwbGFjZS5uV29yZEluZGV4KTsNCi19DQotQ1R5cGVzZXQ6OkNUeXBlc2V0KENTZWN0aW9uICogcFNlY3Rpb24pIDogbV9wU2VjdGlvbihwU2VjdGlvbiksIG1fcFZUKHBTZWN0aW9uLT5tX3BWVCksIG1fcmNSZXQoMC4wZiwgMC4wZiwgMC4wZiwgMC4wZikNCi17DQotfQ0KLUNUeXBlc2V0Ojp+Q1R5cGVzZXQoKQ0KLXsNCi19DQotQ1BWVF9GbG9hdFJlY3QgQ1R5cGVzZXQ6OkNoYXJBcnJheSgpDQotew0KLSAgICBBU1NFUlQobV9wU2VjdGlvbiAhPSBOVUxMKTsNCi0gICAgQVNTRVJUKG1fcFZUICE9IE5VTEwpOw0KLSAgICBGWF9GTE9BVCBmTGluZUFzY2VudCA9IG1fcFZULT5HZXRGb250QXNjZW50KG1fcFZULT5HZXREZWZhdWx0Rm9udEluZGV4KCksIG1fcFZULT5HZXRGb250U2l6ZSgpKTsNCi0gICAgRlhfRkxPQVQgZkxpbmVEZXNjZW50ID0gbV9wVlQtPkdldEZvbnREZXNjZW50KG1fcFZULT5HZXREZWZhdWx0Rm9udEluZGV4KCksIG1fcFZULT5HZXRGb250U2l6ZSgpKTsNCi0gICAgbV9yY1JldC5EZWZhdWx0KCk7DQotICAgIEZYX0ZMT0FUIHggPSAwLjBmLCB5ID0gMC4wZjsNCi0gICAgRlhfRkxPQVQgZk5leHRXaWR0aDsNCi0gICAgRlhfSU5UMzIgblN0YXJ0ID0gMDsNCi0gICAgRlhfRkxPQVQgZk5vZGVXaWR0aCA9IG1fcFZULT5HZXRQbGF0ZVdpZHRoKCkgLyAobV9wVlQtPm1fbkNoYXJBcnJheSA8PSAwID8gMSA6IG1fcFZULT5tX25DaGFyQXJyYXkpOw0KLSAgICBpZiAoQ0xpbmUgKiBwTGluZSA9IG1fcFNlY3Rpb24tPm1fTGluZUFycmF5LkdldEF0KDApKSB7DQotICAgICAgICB4ID0gMC4wZjsNCi0gICAgICAgIHkgKz0gIG1fcFZULT5HZXRMaW5lTGVhZGluZyhtX3BTZWN0aW9uLT5tX1NlY0luZm8pOw0KLSAgICAgICAgeSArPSBmTGluZUFzY2VudDsNCi0gICAgICAgIG5TdGFydCA9IDA7DQotICAgICAgICBzd2l0Y2ggKG1fcFZULT5HZXRBbGlnbm1lbnQobV9wU2VjdGlvbi0+bV9TZWNJbmZvKSkgew0KLSAgICAgICAgICAgIGNhc2UgMDoNCi0gICAgICAgICAgICAgICAgcExpbmUtPm1fTGluZUluZm8uZkxpbmVYID0gZk5vZGVXaWR0aCAqIFBWVF9IQUxGOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDE6DQotICAgICAgICAgICAgICAgIG5TdGFydCA9IChtX3BWVC0+bV9uQ2hhckFycmF5IC0gbV9wU2VjdGlvbi0+bV9Xb3JkQXJyYXkuR2V0U2l6ZSgpKSAvIDI7DQotICAgICAgICAgICAgICAgIHBMaW5lLT5tX0xpbmVJbmZvLmZMaW5lWCA9IGZOb2RlV2lkdGggKiBuU3RhcnQgLSBmTm9kZVdpZHRoICogUFZUX0hBTEY7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgMjoNCi0gICAgICAgICAgICAgICAgblN0YXJ0ID0gbV9wVlQtPm1fbkNoYXJBcnJheSAtIG1fcFNlY3Rpb24tPm1fV29yZEFycmF5LkdldFNpemUoKTsNCi0gICAgICAgICAgICAgICAgcExpbmUtPm1fTGluZUluZm8uZkxpbmVYID0gZk5vZGVXaWR0aCAqIG5TdGFydCAtIGZOb2RlV2lkdGggKiBQVlRfSEFMRjsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBmb3IgKEZYX0lOVDMyIHcgPSAwLCBzeiA9IG1fcFNlY3Rpb24tPm1fV29yZEFycmF5LkdldFNpemUoKTsgdyA8IHN6OyB3KyspIHsNCi0gICAgICAgICAgICBpZiAodyA+PSBtX3BWVC0+bV9uQ2hhckFycmF5KSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBmTmV4dFdpZHRoID0gMDsNCi0gICAgICAgICAgICBpZiAoQ1BWVF9Xb3JkSW5mbyAqIHBOZXh0V29yZCA9IChDUFZUX1dvcmRJbmZvICopbV9wU2VjdGlvbi0+bV9Xb3JkQXJyYXkuR2V0QXQodyArIDEpKSB7DQotICAgICAgICAgICAgICAgIHBOZXh0V29yZC0+ZldvcmRUYWlsID0gMDsNCi0gICAgICAgICAgICAgICAgZk5leHRXaWR0aCA9IG1fcFZULT5HZXRXb3JkV2lkdGgoKnBOZXh0V29yZCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChDUFZUX1dvcmRJbmZvICogcFdvcmQgPSAoQ1BWVF9Xb3JkSW5mbyAqKW1fcFNlY3Rpb24tPm1fV29yZEFycmF5LkdldEF0KHcpKSB7DQotICAgICAgICAgICAgICAgIHBXb3JkLT5mV29yZFRhaWwgPSAwOw0KLSAgICAgICAgICAgICAgICBGWF9GTE9BVCBmV29yZFdpZHRoID0gbV9wVlQtPkdldFdvcmRXaWR0aCgqcFdvcmQpOw0KLSAgICAgICAgICAgICAgICBGWF9GTE9BVCBmV29yZEFzY2VudCA9IG1fcFZULT5HZXRXb3JkQXNjZW50KCpwV29yZCk7DQotICAgICAgICAgICAgICAgIEZYX0ZMT0FUIGZXb3JkRGVzY2VudCA9IG1fcFZULT5HZXRXb3JkRGVzY2VudCgqcFdvcmQpOw0KLSAgICAgICAgICAgICAgICB4ID0gKEZYX0ZMT0FUKShmTm9kZVdpZHRoICogKHcgKyBuU3RhcnQgKyAwLjUpIC0gZldvcmRXaWR0aCAqIFBWVF9IQUxGKTsNCi0gICAgICAgICAgICAgICAgcFdvcmQtPmZXb3JkWCA9IHg7DQotICAgICAgICAgICAgICAgIHBXb3JkLT5mV29yZFkgPSB5Ow0KLSAgICAgICAgICAgICAgICBpZiAodyA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICBwTGluZS0+bV9MaW5lSW5mby5mTGluZVggPSB4Ow0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmICh3ICE9IG1fcFNlY3Rpb24tPm1fV29yZEFycmF5LkdldFNpemUoKSAtIDEpDQotICAgICAgICAgICAgICAgICAgICBwV29yZC0+ZldvcmRUYWlsID0gKGZOb2RlV2lkdGggLSAoZldvcmRXaWR0aCArIGZOZXh0V2lkdGgpICogUFZUX0hBTEYgPiAwID8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZk5vZGVXaWR0aCAtIChmV29yZFdpZHRoICsgZk5leHRXaWR0aCkgKiBQVlRfSEFMRiA6IDApOw0KLSAgICAgICAgICAgICAgICBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIHBXb3JkLT5mV29yZFRhaWwgPSAwOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHggKz0gZldvcmRXaWR0aDsNCi0gICAgICAgICAgICAgICAgZkxpbmVBc2NlbnQgPSBGUERGX01BWChmTGluZUFzY2VudCwgZldvcmRBc2NlbnQpOw0KLSAgICAgICAgICAgICAgICBmTGluZURlc2NlbnQgPSBGUERGX01JTihmTGluZURlc2NlbnQsIGZXb3JkRGVzY2VudCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcExpbmUtPm1fTGluZUluZm8ubkJlZ2luV29yZEluZGV4ID0gMDsNCi0gICAgICAgIHBMaW5lLT5tX0xpbmVJbmZvLm5FbmRXb3JkSW5kZXggPSBtX3BTZWN0aW9uLT5tX1dvcmRBcnJheS5HZXRTaXplKCkgLSAxOw0KLSAgICAgICAgcExpbmUtPm1fTGluZUluZm8uZkxpbmVZID0geTsNCi0gICAgICAgIHBMaW5lLT5tX0xpbmVJbmZvLmZMaW5lV2lkdGggPSAJeCAtIHBMaW5lLT5tX0xpbmVJbmZvLmZMaW5lWDsNCi0gICAgICAgIHBMaW5lLT5tX0xpbmVJbmZvLmZMaW5lQXNjZW50ID0gZkxpbmVBc2NlbnQ7DQotICAgICAgICBwTGluZS0+bV9MaW5lSW5mby5mTGluZURlc2NlbnQgPSBmTGluZURlc2NlbnQ7DQotICAgICAgICB5ICs9ICgtZkxpbmVEZXNjZW50KTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9yY1JldCA9IENQVlRfRmxvYXRSZWN0KDAsIDAsIHgsIHkpOw0KLX0NCi1DUFZUX1NpemUgQ1R5cGVzZXQ6OkdldEVkaXRTaXplKEZYX0ZMT0FUIGZGb250U2l6ZSkNCi17DQotICAgIEFTU0VSVChtX3BTZWN0aW9uICE9IE5VTEwpOw0KLSAgICBBU1NFUlQobV9wVlQgIT0gTlVMTCk7DQotICAgIFNwbGl0TGluZXMoRkFMU0UsIGZGb250U2l6ZSk7DQotICAgIHJldHVybiBDUFZUX1NpemUobV9yY1JldC5XaWR0aCgpLCBtX3JjUmV0LkhlaWdodCgpKTsNCi19DQotQ1BWVF9GbG9hdFJlY3QgQ1R5cGVzZXQ6OlR5cGVzZXQoKQ0KLXsNCi0gICAgQVNTRVJUKG1fcFNlY3Rpb24gIT0gTlVMTCk7DQotICAgIEFTU0VSVChtX3BWVCAhPSBOVUxMKTsNCi0gICAgbV9wU2VjdGlvbi0+bV9MaW5lQXJyYXkuRW1wdHkoKTsNCi0gICAgU3BsaXRMaW5lcyhUUlVFLCAwLjBmKTsNCi0gICAgbV9wU2VjdGlvbi0+bV9MaW5lQXJyYXkuQ2xlYXIoKTsNCi0gICAgT3V0cHV0TGluZXMoKTsNCi0gICAgcmV0dXJuIG1fcmNSZXQ7DQotfQ0KLXN0YXRpYyBpbnQgc3BlY2lhbF9jaGFyc1sxMjhdID0gew0KLSAgICAweDAwMDAsIDB4MDAwQywgMHgwMDA4LCAweDAwMEMsIDB4MDAwOCwgMHgwMDAwLCAweDAwMjAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDgsIDB4MDAwOCwgMHgwMDAwLCAweDAwMTAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMjgsDQotICAgIDB4MDAwQywgMHgwMDA4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDI4LCAweDAwMjgsIDB4MDAyOCwgMHgwMDI4LA0KLSAgICAweDAwMDIsIDB4MDAwMiwgMHgwMDAyLCAweDAwMDIsIDB4MDAwMiwgMHgwMDAyLCAweDAwMDIsIDB4MDAwMiwNCi0gICAgMHgwMDAyLCAweDAwMDIsIDB4MDAwOCwgMHgwMDA4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDgsDQotICAgIDB4MDAwMCwgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLA0KLSAgICAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwNCi0gICAgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsDQotICAgIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsIDB4MDAwQywgMHgwMDAwLCAweDAwMDgsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwNCi0gICAgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsDQotICAgIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLA0KLSAgICAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMEMsIDB4MDAwMCwgMHgwMDA4LCAweDAwMDAsIDB4MDAwMCwNCi19Ow0KLXN0YXRpYyBGWF9CT09MIElzTGF0aW4oRlhfV09SRCB3b3JkKQ0KLXsNCi0gICAgaWYgKHdvcmQgPD0gMHgwMDdGKSB7DQotICAgICAgICBpZiAoc3BlY2lhbF9jaGFyc1t3b3JkXSAmIDB4MDAwMSkgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmICgod29yZCA+PSAweDAwQzAgJiYgd29yZCA8PSAweDAwRkYpIHx8DQotICAgICAgICAgICAgKHdvcmQgPj0gMHgwMTAwICYmIHdvcmQgPD0gMHgwMjRGKSB8fA0KLSAgICAgICAgICAgICh3b3JkID49IDB4MUUwMCAmJiB3b3JkIDw9IDB4MUVGRikgfHwNCi0gICAgICAgICAgICAod29yZCA+PSAweDJDNjAgJiYgd29yZCA8PSAweDJDN0YpIHx8DQotICAgICAgICAgICAgKHdvcmQgPj0gMHhBNzIwICYmIHdvcmQgPD0gMHhBN0ZGKSB8fA0KLSAgICAgICAgICAgICh3b3JkID49IDB4RkYyMSAmJiB3b3JkIDw9IDB4RkYzQSkgfHwNCi0gICAgICAgICAgICAod29yZCA+PSAweEZGNDEgJiYgd29yZCA8PSAweEZGNUEpKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLXN0YXRpYyBGWF9CT09MIElzRGlnaXQoRlhfRFdPUkQgd29yZCkNCi17DQotICAgIHJldHVybiAod29yZCA+PSAweDAwMzAgJiYgd29yZCA8PSAweDAwMzkpID8gVFJVRSA6IEZBTFNFOw0KLX0NCi1zdGF0aWMgRlhfQk9PTCBJc0NKSyhGWF9EV09SRCB3b3JkKQ0KLXsNCi0gICAgaWYgKCh3b3JkID49IDB4MTEwMCAmJiB3b3JkIDw9IDB4MTFGRikgfHwNCi0gICAgICAgICAgICAod29yZCA+PSAweDJFODAgJiYgd29yZCA8PSAweDJGRkYpIHx8DQotICAgICAgICAgICAgKHdvcmQgPj0gMHgzMDQwICYmIHdvcmQgPD0gMHg5RkJGKSB8fA0KLSAgICAgICAgICAgICh3b3JkID49IDB4QUMwMCAmJiB3b3JkIDw9IDB4RDdBRikgfHwNCi0gICAgICAgICAgICAod29yZCA+PSAweEY5MDAgJiYgd29yZCA8PSAweEZBRkYpIHx8DQotICAgICAgICAgICAgKHdvcmQgPj0gMHhGRTMwICYmIHdvcmQgPD0gMHhGRTRGKSB8fA0KLSAgICAgICAgICAgICh3b3JkID49IDB4MjAwMDAgJiYgd29yZCA8PSAweDJBNkRGKSB8fA0KLSAgICAgICAgICAgICh3b3JkID49IDB4MkY4MDAgJiYgd29yZCA8PSAweDJGQTFGKSkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgaWYgKHdvcmQgPj0gMHgzMDAwICYmIHdvcmQgPD0gMHgzMDNGKSB7DQotICAgICAgICBpZiAod29yZCA9PSAweDMwMDUgfHwgd29yZCA9PSAweDMwMDYgfHwgd29yZCA9PSAweDMwMjEgfHwgd29yZCA9PSAweDMwMjIgfHwNCi0gICAgICAgICAgICAgICAgd29yZCA9PSAweDMwMjMgfHwgd29yZCA9PSAweDMwMjQgfHwgd29yZCA9PSAweDMwMjUgfHwgd29yZCA9PSAweDMwMjYgfHwNCi0gICAgICAgICAgICAgICAgd29yZCA9PSAweDMwMjcgfHwgd29yZCA9PSAweDMwMjggfHwgd29yZCA9PSAweDMwMjkgfHwgd29yZCA9PSAweDMwMzEgfHwNCi0gICAgICAgICAgICAgICAgd29yZCA9PSAweDMwMzIgfHwgd29yZCA9PSAweDMwMzMgfHwgd29yZCA9PSAweDMwMzQgfHwgd29yZCA9PSAweDMwMzUpIHsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAod29yZCA+PSAweEZGNjYgJiYgd29yZCA8PSAweEZGOUQpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotc3RhdGljIEZYX0JPT0wgSXNQdW5jdHVhdGlvbihGWF9EV09SRCB3b3JkKQ0KLXsNCi0gICAgaWYgKHdvcmQgPD0gMHgwMDdGKSB7DQotICAgICAgICBpZiAoKHNwZWNpYWxfY2hhcnNbd29yZF0gPj4gMykgJiAxKSB7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZiAod29yZCA+PSAweDAwODAgJiYgd29yZCA8PSAweDAwRkYpIHsNCi0gICAgICAgIGlmICh3b3JkID09IDB4MDA4MiB8fCB3b3JkID09IDB4MDA4NCB8fCB3b3JkID09IDB4MDA4NSB8fCB3b3JkID09IDB4MDA5MSB8fA0KLSAgICAgICAgICAgICAgICB3b3JkID09IDB4MDA5MiB8fCB3b3JkID09IDB4MDA5MyB8fCB3b3JkIDw9IDB4MDA5NCB8fCB3b3JkID09IDB4MDA5NiB8fA0KLSAgICAgICAgICAgICAgICB3b3JkID09IDB4MDBCNCB8fCB3b3JkID09IDB4MDBCOCkgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2UgaWYgKHdvcmQgPj0gMHgyMDAwICYmIHdvcmQgPD0gMHgyMDZGKSB7DQotICAgICAgICBpZiAod29yZCA9PSAweDIwMTAgfHwgd29yZCA9PSAweDIwMTEgfHwgd29yZCA9PSAweDIwMTIgfHwgd29yZCA9PSAweDIwMTMgfHwNCi0gICAgICAgICAgICAgICAgd29yZCA9PSAweDIwMTggfHwgd29yZCA9PSAweDIwMTkgfHwgd29yZCA9PSAweDIwMUEgfHwgd29yZCA9PSAweDIwMUIgfHwNCi0gICAgICAgICAgICAgICAgd29yZCA9PSAweDIwMUMgfHwgd29yZCA9PSAweDIwMUQgfHwgd29yZCA9PSAweDIwMUUgfHwgd29yZCA9PSAweDIwMUYgfHwNCi0gICAgICAgICAgICAgICAgd29yZCA9PSAweDIwMzIgfHwgd29yZCA9PSAweDIwMzMgfHwgd29yZCA9PSAweDIwMzQgfHwgd29yZCA9PSAweDIwMzUgfHwNCi0gICAgICAgICAgICAgICAgd29yZCA9PSAweDIwMzYgfHwgd29yZCA9PSAweDIwMzcgfHwgd29yZCA9PSAweDIwM0MgfHwgd29yZCA9PSAweDIwM0QgfHwNCi0gICAgICAgICAgICAgICAgd29yZCA9PSAweDIwM0UgfHwgd29yZCA9PSAweDIwNDQpIHsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIGlmICh3b3JkID49IDB4MzAwMCAmJiB3b3JkIDw9IDB4MzAzRikgew0KLSAgICAgICAgaWYgKHdvcmQgPT0gMHgzMDAxIHx8IHdvcmQgPT0gMHgzMDAyIHx8IHdvcmQgPT0gMHgzMDAzIHx8IHdvcmQgPT0gMHgzMDA1IHx8DQotICAgICAgICAgICAgICAgIHdvcmQgPT0gMHgzMDA5IHx8IHdvcmQgPT0gMHgzMDBBIHx8IHdvcmQgPT0gMHgzMDBCIHx8IHdvcmQgPT0gMHgzMDBDIHx8DQotICAgICAgICAgICAgICAgIHdvcmQgPT0gMHgzMDBEIHx8IHdvcmQgPT0gMHgzMDBGIHx8IHdvcmQgPT0gMHgzMDBFIHx8IHdvcmQgPT0gMHgzMDEwIHx8DQotICAgICAgICAgICAgICAgIHdvcmQgPT0gMHgzMDExIHx8IHdvcmQgPT0gMHgzMDE0IHx8IHdvcmQgPT0gMHgzMDE1IHx8IHdvcmQgPT0gMHgzMDE2IHx8DQotICAgICAgICAgICAgICAgIHdvcmQgPT0gMHgzMDE3IHx8IHdvcmQgPT0gMHgzMDE4IHx8IHdvcmQgPT0gMHgzMDE5IHx8IHdvcmQgPT0gMHgzMDFBIHx8DQotICAgICAgICAgICAgICAgIHdvcmQgPT0gMHgzMDFCIHx8IHdvcmQgPT0gMHgzMDFEIHx8IHdvcmQgPT0gMHgzMDFFIHx8IHdvcmQgPT0gMHgzMDFGKSB7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZiAod29yZCA+PSAweEZFNTAgJiYgd29yZCA8PSAweEZFNkYpIHsNCi0gICAgICAgIGlmICgod29yZCA+PSAweEZFNTAgJiYgd29yZCA8PSAweEZFNUUpIHx8IHdvcmQgPT0gMHhGRTYzKSB7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZiAod29yZCA+PSAweEZGMDAgJiYgd29yZCA8PSAweEZGRUYpIHsNCi0gICAgICAgIGlmICh3b3JkID09IDB4RkYwMSB8fCB3b3JkID09IDB4RkYwMiB8fCB3b3JkID09IDB4RkYwNyB8fCB3b3JkID09IDB4RkYwOCB8fA0KLSAgICAgICAgICAgICAgICB3b3JkID09IDB4RkYwOSB8fCB3b3JkID09IDB4RkYwQyB8fCB3b3JkID09IDB4RkYwRSB8fCB3b3JkID09IDB4RkYwRiB8fA0KLSAgICAgICAgICAgICAgICB3b3JkID09IDB4RkYxQSB8fCB3b3JkID09IDB4RkYxQiB8fCB3b3JkID09IDB4RkYxRiB8fCB3b3JkID09IDB4RkYzQiB8fA0KLSAgICAgICAgICAgICAgICB3b3JkID09IDB4RkYzRCB8fCB3b3JkID09IDB4RkY0MCB8fCB3b3JkID09IDB4RkY1QiB8fCB3b3JkID09IDB4RkY1QyB8fA0KLSAgICAgICAgICAgICAgICB3b3JkID09IDB4RkY1RCB8fCB3b3JkID09IDB4RkY2MSB8fCB3b3JkID09IDB4RkY2MiB8fCB3b3JkID09IDB4RkY2MyB8fA0KLSAgICAgICAgICAgICAgICB3b3JkID09IDB4RkY2NCB8fCB3b3JkID09IDB4RkY2NSB8fCB3b3JkID09IDB4RkY5RSB8fCB3b3JkID09IDB4RkY5Rikgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotc3RhdGljIEZYX0JPT0wgSXNDb25uZWN0aXZlU3ltYm9sKEZYX0RXT1JEIHdvcmQpDQotew0KLSAgICBpZiAod29yZCA8PSAweDAwN0YpIHsNCi0gICAgICAgIGlmICgoc3BlY2lhbF9jaGFyc1t3b3JkXSA+PiA1KSAmIDEpIHsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLXN0YXRpYyBGWF9CT09MIElzT3BlblN0eWxlUHVuY3R1YXRpb24oRlhfRFdPUkQgd29yZCkNCi17DQotICAgIGlmICh3b3JkIDw9IDB4MDA3Rikgew0KLSAgICAgICAgaWYgKChzcGVjaWFsX2NoYXJzW3dvcmRdID4+IDIpICYgMSkgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2UgaWYgKHdvcmQgPT0gMHgzMDBBIHx8IHdvcmQgPT0gMHgzMDBDIHx8IHdvcmQgPT0gMHgzMDBFIHx8IHdvcmQgPT0gMHgzMDEwIHx8DQotICAgICAgICAgICAgICAgd29yZCA9PSAweDMwMTQgfHwgd29yZCA9PSAweDMwMTYgfHwgd29yZCA9PSAweDMwMTggfHwgd29yZCA9PSAweDMwMUEgfHwNCi0gICAgICAgICAgICAgICB3b3JkID09IDB4RkYwOCB8fCB3b3JkID09IDB4RkYzQiB8fCB3b3JkID09IDB4RkY1QiB8fCB3b3JkID09IDB4RkY2Mikgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1zdGF0aWMgRlhfQk9PTCBJc0N1cnJlbmN5U3ltYm9sKEZYX1dPUkQgd29yZCkNCi17DQotICAgIGlmICh3b3JkID09IDB4MDAyNCB8fCB3b3JkID09IDB4MDA4MCB8fCB3b3JkID09IDB4MDBBMiB8fCB3b3JkID09IDB4MDBBMyB8fA0KLSAgICAgICAgICAgIHdvcmQgPT0gMHgwMEE0IHx8IHdvcmQgPT0gMHgwMEE1IHx8ICh3b3JkID49IDB4MjBBMCAmJiB3b3JkIDw9IDB4MjBDRikgfHwNCi0gICAgICAgICAgICB3b3JkID09IDB4RkU2OSB8fCB3b3JkID09IDB4RkYwNCB8fCB3b3JkID09IDB4RkZFMCB8fCB3b3JkID09IDB4RkZFMSB8fA0KLSAgICAgICAgICAgIHdvcmQgPT0gMHhGRkU1IHx8IHdvcmQgPT0gMHhGRkU2KSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLXN0YXRpYyBGWF9CT09MIElzUHJlZml4U3ltYm9sKEZYX1dPUkQgd29yZCkNCi17DQotICAgIGlmIChJc0N1cnJlbmN5U3ltYm9sKHdvcmQpKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBpZiAod29yZCA9PSAweDIxMTYpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotc3RhdGljIEZYX0JPT0wgSXNTcGFjZShGWF9XT1JEIHdvcmQpDQotew0KLSAgICByZXR1cm4gKHdvcmQgPT0gMHgwMDIwIHx8IHdvcmQgPT0gMHgzMDAwKSA/IFRSVUUgOiBGQUxTRTsNCi19DQotc3RhdGljIEZYX0JPT0wgTmVlZERpdmlzaW9uKEZYX1dPUkQgcHJldldvcmQsIEZYX1dPUkQgY3VyV29yZCkNCi17DQotICAgIGlmICgoSXNMYXRpbihwcmV2V29yZCkgfHwgSXNEaWdpdChwcmV2V29yZCkpICYmIChJc0xhdGluKGN1cldvcmQpIHx8IElzRGlnaXQoY3VyV29yZCkpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0gZWxzZSBpZiAoSXNTcGFjZShjdXJXb3JkKSB8fCBJc1B1bmN0dWF0aW9uKGN1cldvcmQpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0gZWxzZSBpZiAoSXNDb25uZWN0aXZlU3ltYm9sKHByZXZXb3JkKSB8fCBJc0Nvbm5lY3RpdmVTeW1ib2woY3VyV29yZCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfSBlbHNlIGlmIChJc1NwYWNlKHByZXZXb3JkKSB8fCBJc1B1bmN0dWF0aW9uKHByZXZXb3JkKSkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0gZWxzZSBpZiAoSXNQcmVmaXhTeW1ib2wocHJldldvcmQpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0gZWxzZSBpZiAoSXNQcmVmaXhTeW1ib2woY3VyV29yZCkgfHwgSXNDSksoY3VyV29yZCkpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9IGVsc2UgaWYgKElzQ0pLKHByZXZXb3JkKSkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi12b2lkIENUeXBlc2V0OjpTcGxpdExpbmVzKEZYX0JPT0wgYlR5cGVzZXQsIEZYX0ZMT0FUIGZGb250U2l6ZSkNCi17DQotICAgIEFTU0VSVChtX3BWVCAhPSBOVUxMKTsNCi0gICAgQVNTRVJUKG1fcFNlY3Rpb24gIT0gTlVMTCk7DQotICAgIEZYX0lOVDMyIG5MaW5lSGVhZCA9IDA7DQotICAgIEZYX0lOVDMyIG5MaW5lVGFpbCA9IDA7DQotICAgIEZYX0ZMT0FUIGZNYXhYID0gMC4wZiwgZk1heFkgPSAwLjBmOw0KLSAgICBGWF9GTE9BVCBmTGluZVdpZHRoID0gMC4wZiwgZkJhY2t1cExpbmVXaWR0aCA9IDAuMGY7DQotICAgIEZYX0ZMT0FUIGZMaW5lQXNjZW50ID0gMC4wZiwgZkJhY2t1cExpbmVBc2NlbnQgPSAwLjBmOw0KLSAgICBGWF9GTE9BVCBmTGluZURlc2NlbnQgPSAwLjBmLCBmQmFja3VwTGluZURlc2NlbnQgPSAwLjBmOw0KLSAgICBGWF9JTlQzMiBuV29yZFN0YXJ0UG9zID0gMDsNCi0gICAgRlhfQk9PTCBiRnVsbFdvcmQgPSBGQUxTRTsNCi0gICAgRlhfSU5UMzIgbkxpbmVGdWxsV29yZEluZGV4ID0gMDsNCi0gICAgRlhfSU5UMzIgbkNoYXJJbmRleCA9IDA7DQotICAgIENQVlRfTGluZUluZm8gbGluZTsNCi0gICAgRlhfRkxPQVQgZldvcmRXaWR0aCA9IDA7DQotICAgIEZYX0ZMT0FUIGZUeXBlc2V0V2lkdGggPSBGUERGX01BWChtX3BWVC0+R2V0UGxhdGVXaWR0aCgpIC0gbV9wVlQtPkdldExpbmVJbmRlbnQobV9wU2VjdGlvbi0+bV9TZWNJbmZvKSwgMC4wZik7DQotICAgIEZYX0lOVDMyIG5Ub3RhbFdvcmRzID0gbV9wU2VjdGlvbi0+bV9Xb3JkQXJyYXkuR2V0U2l6ZSgpOw0KLSAgICBGWF9CT09MIGJPcGVuZWQgPSBGQUxTRTsNCi0gICAgaWYgKG5Ub3RhbFdvcmRzID4gMCkgew0KLSAgICAgICAgRlhfSU5UMzIgaSA9IDA7DQotICAgICAgICB3aGlsZSAoaSA8IG5Ub3RhbFdvcmRzKSB7DQotICAgICAgICAgICAgQ1BWVF9Xb3JkSW5mbyAqIHBXb3JkID0gbV9wU2VjdGlvbi0+bV9Xb3JkQXJyYXkuR2V0QXQoaSk7DQotICAgICAgICAgICAgQ1BWVF9Xb3JkSW5mbyogcE9sZFdvcmQgPSBwV29yZDsNCi0gICAgICAgICAgICBpZiAoaSA+IDApIHsNCi0gICAgICAgICAgICAgICAgcE9sZFdvcmQgPSBtX3BTZWN0aW9uLT5tX1dvcmRBcnJheS5HZXRBdChpIC0gMSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChwV29yZCkgew0KLSAgICAgICAgICAgICAgICBpZiAoYlR5cGVzZXQpIHsNCi0gICAgICAgICAgICAgICAgICAgIGZMaW5lQXNjZW50ID0gRlBERl9NQVgoZkxpbmVBc2NlbnQsIG1fcFZULT5HZXRXb3JkQXNjZW50KCpwV29yZCwgVFJVRSkpOw0KLSAgICAgICAgICAgICAgICAgICAgZkxpbmVEZXNjZW50ID0gRlBERl9NSU4oZkxpbmVEZXNjZW50LCBtX3BWVC0+R2V0V29yZERlc2NlbnQoKnBXb3JkLCBUUlVFKSk7DQotICAgICAgICAgICAgICAgICAgICBmV29yZFdpZHRoID0gbV9wVlQtPkdldFdvcmRXaWR0aCgqcFdvcmQpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgZkxpbmVBc2NlbnQgPSBGUERGX01BWChmTGluZUFzY2VudCwgbV9wVlQtPkdldFdvcmRBc2NlbnQoKnBXb3JkLCBmRm9udFNpemUpKTsNCi0gICAgICAgICAgICAgICAgICAgIGZMaW5lRGVzY2VudCA9IEZQREZfTUlOKGZMaW5lRGVzY2VudCwgbV9wVlQtPkdldFdvcmREZXNjZW50KCpwV29yZCwgZkZvbnRTaXplKSk7DQotICAgICAgICAgICAgICAgICAgICBmV29yZFdpZHRoID0gbV9wVlQtPkdldFdvcmRXaWR0aChwV29yZC0+bkZvbnRJbmRleCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBXb3JkLT5Xb3JkLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wVlQtPm1fd1N1YldvcmQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BWVC0+bV9mQ2hhclNwYWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wVlQtPm1fbkhvcnpTY2FsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZGb250U2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBXb3JkLT5mV29yZFRhaWwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoIWJPcGVuZWQpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChJc09wZW5TdHlsZVB1bmN0dWF0aW9uKHBXb3JkLT5Xb3JkKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJPcGVuZWQgPSBUUlVFOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJGdWxsV29yZCA9IFRSVUU7DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBPbGRXb3JkICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTmVlZERpdmlzaW9uKHBPbGRXb3JkLT5Xb3JkLCBwV29yZC0+V29yZCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYkZ1bGxXb3JkID0gVFJVRTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBpZiAoIUlzU3BhY2UocFdvcmQtPldvcmQpICYmICFJc09wZW5TdHlsZVB1bmN0dWF0aW9uKHBXb3JkLT5Xb3JkKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJPcGVuZWQgPSBGQUxTRTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoYkZ1bGxXb3JkKSB7DQotICAgICAgICAgICAgICAgICAgICBiRnVsbFdvcmQgPSBGQUxTRTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChuQ2hhckluZGV4ID4gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5MaW5lRnVsbFdvcmRJbmRleCArKzsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIG5Xb3JkU3RhcnRQb3MgPSBpOw0KLSAgICAgICAgICAgICAgICAgICAgZkJhY2t1cExpbmVXaWR0aCA9IGZMaW5lV2lkdGg7DQotICAgICAgICAgICAgICAgICAgICBmQmFja3VwTGluZUFzY2VudCA9IGZMaW5lQXNjZW50Ow0KLSAgICAgICAgICAgICAgICAgICAgZkJhY2t1cExpbmVEZXNjZW50ID0gZkxpbmVEZXNjZW50Ow0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG5DaGFySW5kZXgrKzsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKG1fcFZULT5tX2JMaW1pdFdpZHRoICYmIGZUeXBlc2V0V2lkdGggPiAwICYmDQotICAgICAgICAgICAgICAgICAgICBmTGluZVdpZHRoICsgZldvcmRXaWR0aCA+IGZUeXBlc2V0V2lkdGgpIHsNCi0gICAgICAgICAgICAgICAgaWYgKG5MaW5lRnVsbFdvcmRJbmRleCA+IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIGkgPSBuV29yZFN0YXJ0UG9zOw0KLSAgICAgICAgICAgICAgICAgICAgZkxpbmVXaWR0aCA9IGZCYWNrdXBMaW5lV2lkdGg7DQotICAgICAgICAgICAgICAgICAgICBmTGluZUFzY2VudCA9IGZCYWNrdXBMaW5lQXNjZW50Ow0KLSAgICAgICAgICAgICAgICAgICAgZkxpbmVEZXNjZW50ID0gZkJhY2t1cExpbmVEZXNjZW50Ow0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChuQ2hhckluZGV4ID09IDEpIHsNCi0gICAgICAgICAgICAgICAgICAgIGZMaW5lV2lkdGggPSAgZldvcmRXaWR0aDsNCi0gICAgICAgICAgICAgICAgICAgIGkrKzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBuTGluZVRhaWwgPSBpIC0gMTsNCi0gICAgICAgICAgICAgICAgaWYgKGJUeXBlc2V0KSB7DQotICAgICAgICAgICAgICAgICAgICBsaW5lLm5CZWdpbldvcmRJbmRleCA9IG5MaW5lSGVhZDsNCi0gICAgICAgICAgICAgICAgICAgIGxpbmUubkVuZFdvcmRJbmRleCA9IG5MaW5lVGFpbDsNCi0gICAgICAgICAgICAgICAgICAgIGxpbmUublRvdGFsV29yZCA9IG5MaW5lVGFpbCAtIG5MaW5lSGVhZCArIDE7DQotICAgICAgICAgICAgICAgICAgICBsaW5lLmZMaW5lV2lkdGggPSBmTGluZVdpZHRoOw0KLSAgICAgICAgICAgICAgICAgICAgbGluZS5mTGluZUFzY2VudCA9IGZMaW5lQXNjZW50Ow0KLSAgICAgICAgICAgICAgICAgICAgbGluZS5mTGluZURlc2NlbnQgPSBmTGluZURlc2NlbnQ7DQotICAgICAgICAgICAgICAgICAgICBtX3BTZWN0aW9uLT5BZGRMaW5lKGxpbmUpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGZNYXhZICs9IChmTGluZUFzY2VudCArIG1fcFZULT5HZXRMaW5lTGVhZGluZyhtX3BTZWN0aW9uLT5tX1NlY0luZm8pKTsNCi0gICAgICAgICAgICAgICAgZk1heFkgKz0gKC1mTGluZURlc2NlbnQpOw0KLSAgICAgICAgICAgICAgICBmTWF4WCA9IEZQREZfTUFYKGZMaW5lV2lkdGgsIGZNYXhYKTsNCi0gICAgICAgICAgICAgICAgbkxpbmVIZWFkID0gaTsNCi0gICAgICAgICAgICAgICAgZkxpbmVXaWR0aCA9IDAuMGY7DQotICAgICAgICAgICAgICAgIGZMaW5lQXNjZW50ID0gMC4wZjsNCi0gICAgICAgICAgICAgICAgZkxpbmVEZXNjZW50ID0gMC4wZjsNCi0gICAgICAgICAgICAgICAgbkNoYXJJbmRleCA9IDA7DQotICAgICAgICAgICAgICAgIG5MaW5lRnVsbFdvcmRJbmRleCA9IDA7DQotICAgICAgICAgICAgICAgIGJGdWxsV29yZCA9IEZBTFNFOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGZMaW5lV2lkdGggKz0gZldvcmRXaWR0aDsNCi0gICAgICAgICAgICAgICAgaSsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChuTGluZUhlYWQgPD0gblRvdGFsV29yZHMgLSAxKSB7DQotICAgICAgICAgICAgbkxpbmVUYWlsID0gblRvdGFsV29yZHMgLSAxOw0KLSAgICAgICAgICAgIGlmIChiVHlwZXNldCkgew0KLSAgICAgICAgICAgICAgICBsaW5lLm5CZWdpbldvcmRJbmRleCA9IG5MaW5lSGVhZDsNCi0gICAgICAgICAgICAgICAgbGluZS5uRW5kV29yZEluZGV4ID0gbkxpbmVUYWlsOw0KLSAgICAgICAgICAgICAgICBsaW5lLm5Ub3RhbFdvcmQgPSBuTGluZVRhaWwgLSBuTGluZUhlYWQgKyAxOw0KLSAgICAgICAgICAgICAgICBsaW5lLmZMaW5lV2lkdGggPSBmTGluZVdpZHRoOw0KLSAgICAgICAgICAgICAgICBsaW5lLmZMaW5lQXNjZW50ID0gZkxpbmVBc2NlbnQ7DQotICAgICAgICAgICAgICAgIGxpbmUuZkxpbmVEZXNjZW50ID0gZkxpbmVEZXNjZW50Ow0KLSAgICAgICAgICAgICAgICBtX3BTZWN0aW9uLT5BZGRMaW5lKGxpbmUpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBmTWF4WSArPSAoZkxpbmVBc2NlbnQgKyBtX3BWVC0+R2V0TGluZUxlYWRpbmcobV9wU2VjdGlvbi0+bV9TZWNJbmZvKSk7DQotICAgICAgICAgICAgZk1heFkgKz0gKC1mTGluZURlc2NlbnQpOw0KLSAgICAgICAgICAgIGZNYXhYID0gRlBERl9NQVgoZkxpbmVXaWR0aCwgZk1heFgpOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYgKGJUeXBlc2V0KSB7DQotICAgICAgICAgICAgZkxpbmVBc2NlbnQgPSBtX3BWVC0+R2V0TGluZUFzY2VudChtX3BTZWN0aW9uLT5tX1NlY0luZm8pOw0KLSAgICAgICAgICAgIGZMaW5lRGVzY2VudCA9IG1fcFZULT5HZXRMaW5lRGVzY2VudChtX3BTZWN0aW9uLT5tX1NlY0luZm8pOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBmTGluZUFzY2VudCA9IG1fcFZULT5HZXRGb250QXNjZW50KG1fcFZULT5HZXREZWZhdWx0Rm9udEluZGV4KCksIGZGb250U2l6ZSk7DQotICAgICAgICAgICAgZkxpbmVEZXNjZW50ID0gbV9wVlQtPkdldEZvbnREZXNjZW50KG1fcFZULT5HZXREZWZhdWx0Rm9udEluZGV4KCksIGZGb250U2l6ZSk7DQotICAgICAgICB9DQotICAgICAgICBpZiAoYlR5cGVzZXQpIHsNCi0gICAgICAgICAgICBsaW5lLm5CZWdpbldvcmRJbmRleCA9IC0xOw0KLSAgICAgICAgICAgIGxpbmUubkVuZFdvcmRJbmRleCA9IC0xOw0KLSAgICAgICAgICAgIGxpbmUublRvdGFsV29yZCA9IDA7DQotICAgICAgICAgICAgbGluZS5mTGluZVdpZHRoID0gMDsNCi0gICAgICAgICAgICBsaW5lLmZMaW5lQXNjZW50ID0gZkxpbmVBc2NlbnQ7DQotICAgICAgICAgICAgbGluZS5mTGluZURlc2NlbnQgPSBmTGluZURlc2NlbnQ7DQotICAgICAgICAgICAgbV9wU2VjdGlvbi0+QWRkTGluZShsaW5lKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGZNYXhZICs9IChtX3BWVC0+R2V0TGluZUxlYWRpbmcobV9wU2VjdGlvbi0+bV9TZWNJbmZvKSArIGZMaW5lQXNjZW50ICsgKC1mTGluZURlc2NlbnQpKTsNCi0gICAgfQ0KLSAgICBtX3JjUmV0ID0gQ1BWVF9GbG9hdFJlY3QoMCwgMCwgZk1heFgsIGZNYXhZKTsNCi19DQotdm9pZCBDVHlwZXNldDo6T3V0cHV0TGluZXMoKQ0KLXsNCi0gICAgQVNTRVJUKG1fcFZUICE9IE5VTEwpOw0KLSAgICBBU1NFUlQobV9wU2VjdGlvbiAhPSBOVUxMKTsNCi0gICAgRlhfRkxPQVQgZk1pblggPSAwLjBmLCBmTWluWSA9IDAuMGYsIGZNYXhYID0gMC4wZiwgZk1heFkgPSAwLjBmOw0KLSAgICBGWF9GTE9BVCBmUG9zWCA9IDAuMGYsIGZQb3NZID0gMC4wZjsNCi0gICAgRlhfRkxPQVQgZkxpbmVJbmRlbnQgPSBtX3BWVC0+R2V0TGluZUluZGVudChtX3BTZWN0aW9uLT5tX1NlY0luZm8pOw0KLSAgICBGWF9GTE9BVCBmVHlwZXNldFdpZHRoID0gRlBERl9NQVgobV9wVlQtPkdldFBsYXRlV2lkdGgoKSAtIGZMaW5lSW5kZW50LCAwLjBmKTsNCi0gICAgc3dpdGNoIChtX3BWVC0+R2V0QWxpZ25tZW50KG1fcFNlY3Rpb24tPm1fU2VjSW5mbykpIHsNCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICBjYXNlIDA6DQotICAgICAgICAgICAgZk1pblggPSAwLjBmOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSAxOg0KLSAgICAgICAgICAgIGZNaW5YID0gKGZUeXBlc2V0V2lkdGggLSBtX3JjUmV0LldpZHRoKCkpICAqIFBWVF9IQUxGOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSAyOg0KLSAgICAgICAgICAgIGZNaW5YID0gZlR5cGVzZXRXaWR0aCAtIG1fcmNSZXQuV2lkdGgoKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgfQ0KLSAgICBmTWF4WCA9IGZNaW5YICsgbV9yY1JldC5XaWR0aCgpOw0KLSAgICBmTWluWSA9IDAuMGY7DQotICAgIGZNYXhZID0gbV9yY1JldC5IZWlnaHQoKTsNCi0gICAgRlhfSU5UMzIgblRvdGFsTGluZXMgPSBtX3BTZWN0aW9uLT5tX0xpbmVBcnJheS5HZXRTaXplKCk7DQotICAgIGlmIChuVG90YWxMaW5lcyA+IDApIHsNCi0gICAgICAgIG1fcFNlY3Rpb24tPm1fU2VjSW5mby5uVG90YWxMaW5lID0gblRvdGFsTGluZXM7DQotICAgICAgICBmb3IgKEZYX0lOVDMyIGwgPSAwOyBsIDwgblRvdGFsTGluZXM7IGwrKykgew0KLSAgICAgICAgICAgIGlmIChDTGluZSAqIHBMaW5lID0gbV9wU2VjdGlvbi0+bV9MaW5lQXJyYXkuR2V0QXQobCkpIHsNCi0gICAgICAgICAgICAgICAgc3dpdGNoIChtX3BWVC0+R2V0QWxpZ25tZW50KG1fcFNlY3Rpb24tPm1fU2VjSW5mbykpIHsNCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgICAgICAgICBjYXNlIDA6DQotICAgICAgICAgICAgICAgICAgICAgICAgZlBvc1ggPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSAxOg0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZQb3NYID0gKGZUeXBlc2V0V2lkdGggLSBwTGluZS0+bV9MaW5lSW5mby5mTGluZVdpZHRoKSAqIFBWVF9IQUxGOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSAyOg0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZQb3NYID0gZlR5cGVzZXRXaWR0aCAtIHBMaW5lLT5tX0xpbmVJbmZvLmZMaW5lV2lkdGg7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZlBvc1ggKz0gZkxpbmVJbmRlbnQ7DQotICAgICAgICAgICAgICAgIGZQb3NZICs9IG1fcFZULT5HZXRMaW5lTGVhZGluZyhtX3BTZWN0aW9uLT5tX1NlY0luZm8pOw0KLSAgICAgICAgICAgICAgICBmUG9zWSArPSBwTGluZS0+bV9MaW5lSW5mby5mTGluZUFzY2VudDsNCi0gICAgICAgICAgICAgICAgcExpbmUtPm1fTGluZUluZm8uZkxpbmVYID0gZlBvc1ggLSBmTWluWDsNCi0gICAgICAgICAgICAgICAgcExpbmUtPm1fTGluZUluZm8uZkxpbmVZID0gZlBvc1kgLSBmTWluWTsNCi0gICAgICAgICAgICAgICAgZm9yIChGWF9JTlQzMiB3ID0gcExpbmUtPm1fTGluZUluZm8ubkJlZ2luV29yZEluZGV4OyB3IDw9IHBMaW5lLT5tX0xpbmVJbmZvLm5FbmRXb3JkSW5kZXg7IHcrKykgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKENQVlRfV29yZEluZm8gKiBwV29yZCA9IG1fcFNlY3Rpb24tPm1fV29yZEFycmF5LkdldEF0KHcpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcFdvcmQtPmZXb3JkWCA9IGZQb3NYIC0gZk1pblg7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBXb3JkLT5wV29yZFByb3BzKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocFdvcmQtPnBXb3JkUHJvcHMtPm5TY3JpcHRUeXBlKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Og0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQVlRXT1JEX1NDUklQVF9OT1JNQUw6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFdvcmQtPmZXb3JkWSA9IGZQb3NZIC0gZk1pblk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBWVFdPUkRfU0NSSVBUX1NVUEVSOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBXb3JkLT5mV29yZFkgPSBmUG9zWSAtIG1fcFZULT5HZXRXb3JkQXNjZW50KCpwV29yZCkgLSBmTWluWTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUFZUV09SRF9TQ1JJUFRfU1VCOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBXb3JkLT5mV29yZFkgPSBmUG9zWSAtIG1fcFZULT5HZXRXb3JkRGVzY2VudCgqcFdvcmQpIC0gZk1pblk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwV29yZC0+ZldvcmRZID0gZlBvc1kgLSBmTWluWTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgZlBvc1ggKz0gbV9wVlQtPkdldFdvcmRXaWR0aCgqcFdvcmQpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGZQb3NZICs9ICgtcExpbmUtPm1fTGluZUluZm8uZkxpbmVEZXNjZW50KTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9yY1JldCA9IENQVlRfRmxvYXRSZWN0KGZNaW5YLCBmTWluWSwgZk1heFgsIGZNYXhZKTsNCi19DQotQ1BERl9WYXJpYWJsZVRleHQ6OkNQREZfVmFyaWFibGVUZXh0KCkgOg0KLSAgICBtX3BWVFByb3ZpZGVyKE5VTEwpLA0KLSAgICBtX3BWVEl0ZXJhdG9yKE5VTEwpLA0KLSAgICBtX2JJbml0aWFsKEZBTFNFKSwNCi0gICAgbV9iUmljaFRleHQoRkFMU0UpLA0KLSAgICBtX2JNdWx0aUxpbmUoRkFMU0UpLA0KLSAgICBtX2JMaW1pdFdpZHRoKEZBTFNFKSwNCi0gICAgbV9iQXV0b0ZvbnRTaXplKEZBTFNFKSwNCi0gICAgbV9uTGltaXRDaGFyKDApLA0KLSAgICBtX25DaGFyQXJyYXkoMCksDQotICAgIG1fbkFsaWdubWVudCgwKSwNCi0gICAgbV9mQ2hhclNwYWNlKDAuMGYpLA0KLSAgICBtX2ZXb3JkU3BhY2UoMC4wZiksDQotICAgIG1fZkZvbnRTaXplKDAuMGYpLA0KLSAgICBtX25Ib3J6U2NhbGUoMTAwKSwNCi0gICAgbV93U3ViV29yZCgwKSwNCi0gICAgbV9mTGluZUxlYWRpbmcoMC4wZikNCi17DQotfQ0KLUNQREZfVmFyaWFibGVUZXh0Ojp+Q1BERl9WYXJpYWJsZVRleHQoKQ0KLXsNCi0gICAgaWYgKG1fcFZUSXRlcmF0b3IpIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BWVEl0ZXJhdG9yOw0KLSAgICAgICAgbV9wVlRJdGVyYXRvciA9IE5VTEw7DQotICAgIH0NCi0gICAgUmVzZXRBbGwoKTsNCi19DQotdm9pZCBDUERGX1ZhcmlhYmxlVGV4dDo6SW5pdGlhbGl6ZSgpDQotew0KLSAgICBpZiAoIW1fYkluaXRpYWwpIHsNCi0gICAgICAgIENQVlRfU2VjdGlvbkluZm8gc2VjaW5mbzsNCi0gICAgICAgIGlmIChtX2JSaWNoVGV4dCkgew0KLSAgICAgICAgICAgIHNlY2luZm8ucFNlY1Byb3BzID0gRlhfTkVXIENQVlRfU2VjUHJvcHMoMC4wZiwgMC4wZiwgMCk7DQotICAgICAgICAgICAgc2VjaW5mby5wV29yZFByb3BzID0gRlhfTkVXIENQVlRfV29yZFByb3BzKEdldERlZmF1bHRGb250SW5kZXgoKSwgUFZUX0RFRkFVTFRfRk9OVFNJWkUsIDAsIDAsIDApOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1BWVF9Xb3JkUGxhY2UgcGxhY2U7DQotICAgICAgICBwbGFjZS5uU2VjSW5kZXggPSAwOw0KLSAgICAgICAgQWRkU2VjdGlvbihwbGFjZSwgc2VjaW5mbyk7DQotICAgICAgICBDUFZUX0xpbmVJbmZvIGxpbmVpbmZvOw0KLSAgICAgICAgbGluZWluZm8uZkxpbmVBc2NlbnQgPSBHZXRGb250QXNjZW50KEdldERlZmF1bHRGb250SW5kZXgoKSwgR2V0Rm9udFNpemUoKSk7DQotICAgICAgICBsaW5laW5mby5mTGluZURlc2NlbnQgPSBHZXRGb250RGVzY2VudChHZXREZWZhdWx0Rm9udEluZGV4KCksIEdldEZvbnRTaXplKCkpOw0KLSAgICAgICAgQWRkTGluZShwbGFjZSwgbGluZWluZm8pOw0KLSAgICAgICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdCgwKSkgew0KLSAgICAgICAgICAgIHBTZWN0aW9uLT5SZXNldExpbmVQbGFjZSgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9iSW5pdGlhbCA9IFRSVUU7DQotICAgIH0NCi19DQotdm9pZCBDUERGX1ZhcmlhYmxlVGV4dDo6UmVzZXRBbGwoKQ0KLXsNCi0gICAgbV9iSW5pdGlhbCA9IEZBTFNFOw0KLSAgICBSZXNldFNlY3Rpb25BcnJheSgpOw0KLX0NCi1DUFZUX1dvcmRQbGFjZSBDUERGX1ZhcmlhYmxlVGV4dDo6SW5zZXJ0V29yZChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIGNoYXJzZXQsDQotICAgICAgICBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMpDQotew0KLSAgICBGWF9JTlQzMiBuVG90bGFXb3JkcyA9IHRoaXMtPkdldFRvdGFsV29yZHMoKTsNCi0gICAgaWYgKG1fbkxpbWl0Q2hhciA+IDAgJiYgblRvdGxhV29yZHMgPj0gbV9uTGltaXRDaGFyKSB7DQotICAgICAgICByZXR1cm4gcGxhY2U7DQotICAgIH0NCi0gICAgaWYgKG1fbkNoYXJBcnJheSA+IDAgJiYgblRvdGxhV29yZHMgPj0gbV9uQ2hhckFycmF5KSB7DQotICAgICAgICByZXR1cm4gcGxhY2U7DQotICAgIH0NCi0gICAgQ1BWVF9Xb3JkUGxhY2UgbmV3cGxhY2UgPSBwbGFjZTsNCi0gICAgbmV3cGxhY2UubldvcmRJbmRleCArKzsNCi0gICAgaWYgKG1fYlJpY2hUZXh0KSB7DQotICAgICAgICBDUFZUX1dvcmRQcm9wcyAqIHBOZXdQcm9wcyA9IHBXb3JkUHJvcHMgPyBGWF9ORVcgQ1BWVF9Xb3JkUHJvcHMoKnBXb3JkUHJvcHMpIDogRlhfTkVXIENQVlRfV29yZFByb3BzKCk7DQotICAgICAgICBpZiAocE5ld1Byb3BzKSB7DQotICAgICAgICAgICAgcE5ld1Byb3BzLT5uRm9udEluZGV4ID0gR2V0V29yZEZvbnRJbmRleCh3b3JkLCBjaGFyc2V0LCBwV29yZFByb3BzLT5uRm9udEluZGV4KTsNCi0gICAgICAgICAgICByZXR1cm4gQWRkV29yZChuZXdwbGFjZSwgQ1BWVF9Xb3JkSW5mbyh3b3JkLCBjaGFyc2V0LCAtMSwgcE5ld1Byb3BzKSk7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBGWF9JTlQzMiBuRm9udEluZGV4ID0gR2V0U3ViV29yZCgpID4gMCA/IEdldERlZmF1bHRGb250SW5kZXgoKSA6IEdldFdvcmRGb250SW5kZXgod29yZCwgY2hhcnNldCwgR2V0RGVmYXVsdEZvbnRJbmRleCgpKTsNCi0gICAgICAgIHJldHVybiBBZGRXb3JkKG5ld3BsYWNlLCBDUFZUX1dvcmRJbmZvKHdvcmQsIGNoYXJzZXQsIG5Gb250SW5kZXgsIE5VTEwpKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gcGxhY2U7DQotfQ0KLUNQVlRfV29yZFBsYWNlIENQREZfVmFyaWFibGVUZXh0OjpJbnNlcnRTZWN0aW9uKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIGNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMsDQotICAgICAgICBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMpDQotew0KLSAgICBGWF9JTlQzMiBuVG90bGFXb3JkcyA9IHRoaXMtPkdldFRvdGFsV29yZHMoKTsNCi0gICAgaWYgKG1fbkxpbWl0Q2hhciA+IDAgJiYgblRvdGxhV29yZHMgPj0gbV9uTGltaXRDaGFyKSB7DQotICAgICAgICByZXR1cm4gcGxhY2U7DQotICAgIH0NCi0gICAgaWYgKG1fbkNoYXJBcnJheSA+IDAgJiYgblRvdGxhV29yZHMgPj0gbV9uQ2hhckFycmF5KSB7DQotICAgICAgICByZXR1cm4gcGxhY2U7DQotICAgIH0NCi0gICAgaWYgKCFtX2JNdWx0aUxpbmUpIHsNCi0gICAgICAgIHJldHVybiBwbGFjZTsNCi0gICAgfQ0KLSAgICBDUFZUX1dvcmRQbGFjZSB3b3JkcGxhY2UgPSBwbGFjZTsNCi0gICAgVXBkYXRlV29yZFBsYWNlKHdvcmRwbGFjZSk7DQotICAgIENQVlRfV29yZFBsYWNlIG5ld3BsYWNlID0gcGxhY2U7DQotICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQod29yZHBsYWNlLm5TZWNJbmRleCkpIHsNCi0gICAgICAgIENQVlRfV29yZFBsYWNlIE5ld1BsYWNlKHdvcmRwbGFjZS5uU2VjSW5kZXggKyAxLCAwLCAtMSk7DQotICAgICAgICBDUFZUX1NlY3Rpb25JbmZvIHNlY2luZm87DQotICAgICAgICBpZiAobV9iUmljaFRleHQpIHsNCi0gICAgICAgICAgICBpZiAocFNlY1Byb3BzKSB7DQotICAgICAgICAgICAgICAgIHNlY2luZm8ucFNlY1Byb3BzID0gRlhfTkVXIENQVlRfU2VjUHJvcHMoKnBTZWNQcm9wcyk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChwV29yZFByb3BzKSB7DQotICAgICAgICAgICAgICAgIHNlY2luZm8ucFdvcmRQcm9wcyA9IEZYX05FVyBDUFZUX1dvcmRQcm9wcygqcFdvcmRQcm9wcyk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgQWRkU2VjdGlvbihOZXdQbGFjZSwgc2VjaW5mbyk7DQotICAgICAgICBuZXdwbGFjZSA9IE5ld1BsYWNlOw0KLSAgICAgICAgaWYgKENTZWN0aW9uICogcE5ld1NlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdChOZXdQbGFjZS5uU2VjSW5kZXgpKSB7DQotICAgICAgICAgICAgZm9yIChGWF9JTlQzMiB3ID0gd29yZHBsYWNlLm5Xb3JkSW5kZXggKyAxLCBzeiA9IHBTZWN0aW9uLT5tX1dvcmRBcnJheS5HZXRTaXplKCk7IHcgPCBzejsgdysrKSB7DQotICAgICAgICAgICAgICAgIGlmIChDUFZUX1dvcmRJbmZvICogcFdvcmQgPSBwU2VjdGlvbi0+bV9Xb3JkQXJyYXkuR2V0QXQodykpIHsNCi0gICAgICAgICAgICAgICAgICAgIE5ld1BsYWNlLm5Xb3JkSW5kZXgrKzsNCi0gICAgICAgICAgICAgICAgICAgIHBOZXdTZWN0aW9uLT5BZGRXb3JkKE5ld1BsYWNlLCAqcFdvcmQpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgQ2xlYXJTZWN0aW9uUmlnaHRXb3Jkcyh3b3JkcGxhY2UpOw0KLSAgICB9DQotICAgIHJldHVybiBuZXdwbGFjZTsNCi19DQotQ1BWVF9Xb3JkUGxhY2UgQ1BERl9WYXJpYWJsZVRleHQ6Okluc2VydFRleHQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSwgRlhfTFBDV1NUUiB0ZXh0LCBGWF9JTlQzMiBjaGFyc2V0LA0KLSAgICAgICAgY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwUHJvcHMpDQotew0KLSAgICBDRlhfV2lkZVN0cmluZyBzd1RleHQgPSB0ZXh0Ow0KLSAgICBDUFZUX1dvcmRQbGFjZSB3cCA9IHBsYWNlOw0KLSAgICBmb3IgKEZYX0lOVDMyIGkgPSAwLCBzeiA9IHN3VGV4dC5HZXRMZW5ndGgoKTsgaSA8IHN6OyBpKyspIHsNCi0gICAgICAgIENQVlRfV29yZFBsYWNlIG9sZHdwID0gd3A7DQotICAgICAgICBGWF9XT1JEIHdvcmQgPSBzd1RleHQuR2V0QXQoaSk7DQotICAgICAgICBzd2l0Y2ggKHdvcmQpIHsNCi0gICAgICAgICAgICBjYXNlIDB4MEQ6DQotICAgICAgICAgICAgICAgIGlmIChtX2JNdWx0aUxpbmUpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChzd1RleHQuR2V0QXQoaSArIDEpID09IDB4MEEpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpICs9IDE7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB3cCA9IEluc2VydFNlY3Rpb24od3AsIHBTZWNQcm9wcywgcFByb3BzKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDB4MEE6DQotICAgICAgICAgICAgICAgIGlmIChtX2JNdWx0aUxpbmUpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChzd1RleHQuR2V0QXQoaSArIDEpID09IDB4MEQpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpICs9IDE7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB3cCA9IEluc2VydFNlY3Rpb24od3AsIHBTZWNQcm9wcywgcFByb3BzKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDB4MDk6DQotICAgICAgICAgICAgICAgIHdvcmQgPSAweDIwOw0KLSAgICAgICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgICAgIHdwID0gSW5zZXJ0V29yZCh3cCwgd29yZCwgY2hhcnNldCwgcFByb3BzKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBpZiAod3AgPT0gb2xkd3ApIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gd3A7DQotfQ0KLUNQVlRfV29yZFBsYWNlIENQREZfVmFyaWFibGVUZXh0OjpEZWxldGVXb3Jkcyhjb25zdCBDUFZUX1dvcmRSYW5nZSAmIFBsYWNlUmFuZ2UpDQotew0KLSAgICBGWF9CT09MIGJMYXN0U2VjUG9zID0gRkFMU0U7DQotICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQoUGxhY2VSYW5nZS5FbmRQb3MublNlY0luZGV4KSkgew0KLSAgICAgICAgYkxhc3RTZWNQb3MgPSAoUGxhY2VSYW5nZS5FbmRQb3MgPT0gcFNlY3Rpb24tPkdldEVuZFdvcmRQbGFjZSgpKTsNCi0gICAgfQ0KLSAgICBDbGVhcldvcmRzKFBsYWNlUmFuZ2UpOw0KLSAgICBpZiAoUGxhY2VSYW5nZS5CZWdpblBvcy5uU2VjSW5kZXggIT0gUGxhY2VSYW5nZS5FbmRQb3MublNlY0luZGV4KSB7DQotICAgICAgICBDbGVhckVtcHR5U2VjdGlvbnMoUGxhY2VSYW5nZSk7DQotICAgICAgICBpZiAoIWJMYXN0U2VjUG9zKSB7DQotICAgICAgICAgICAgTGlua0xhdHRlclNlY3Rpb24oUGxhY2VSYW5nZS5CZWdpblBvcyk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIFBsYWNlUmFuZ2UuQmVnaW5Qb3M7DQotfQ0KLUNQVlRfV29yZFBsYWNlIENQREZfVmFyaWFibGVUZXh0OjpEZWxldGVXb3JkKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpDQotew0KLSAgICByZXR1cm4gQ2xlYXJSaWdodFdvcmQoQWp1c3RMaW5lSGVhZGVyKHBsYWNlLCBUUlVFKSk7DQotfQ0KLUNQVlRfV29yZFBsYWNlIENQREZfVmFyaWFibGVUZXh0OjpCYWNrU3BhY2VXb3JkKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpDQotew0KLSAgICByZXR1cm4gQ2xlYXJMZWZ0V29yZChBanVzdExpbmVIZWFkZXIocGxhY2UsIFRSVUUpKTsNCi19DQotdm9pZCBDUERGX1ZhcmlhYmxlVGV4dDo6U2V0VGV4dChGWF9MUENXU1RSIHRleHQsIEZYX0lOVDMyIGNoYXJzZXQsIGNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMpDQotew0KLSAgICBEZWxldGVXb3JkcyhDUFZUX1dvcmRSYW5nZShHZXRCZWdpbldvcmRQbGFjZSgpLCBHZXRFbmRXb3JkUGxhY2UoKSkpOw0KLSAgICBDRlhfV2lkZVN0cmluZyBzd1RleHQgPSB0ZXh0Ow0KLSAgICBDUFZUX1dvcmRQbGFjZQl3cCgwLCAwLCAtMSk7DQotICAgIENQVlRfU2VjdGlvbkluZm8gc2VjaW5mbzsNCi0gICAgaWYgKG1fYlJpY2hUZXh0KSB7DQotICAgICAgICBpZiAocFNlY1Byb3BzKSB7DQotICAgICAgICAgICAgc2VjaW5mby5wU2VjUHJvcHMgPSBGWF9ORVcgQ1BWVF9TZWNQcm9wcygqcFNlY1Byb3BzKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwV29yZFByb3BzKSB7DQotICAgICAgICAgICAgc2VjaW5mby5wV29yZFByb3BzID0gRlhfTkVXIENQVlRfV29yZFByb3BzKCpwV29yZFByb3BzKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fU2VjdGlvbkFycmF5LkdldEF0KDApKSB7DQotICAgICAgICBwU2VjdGlvbi0+bV9TZWNJbmZvID0gc2VjaW5mbzsNCi0gICAgfQ0KLSAgICBGWF9JTlQzMiBuQ2hhckNvdW50ID0gMDsNCi0gICAgZm9yIChGWF9JTlQzMiBpID0gMCwgc3ogPSBzd1RleHQuR2V0TGVuZ3RoKCk7IGkgPCBzejsgaSsrKSB7DQotICAgICAgICBpZiAobV9uTGltaXRDaGFyID4gMCAmJiBuQ2hhckNvdW50ID49IG1fbkxpbWl0Q2hhcikgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fbkNoYXJBcnJheSA+IDAgJiYgbkNoYXJDb3VudCA+PSBtX25DaGFyQXJyYXkpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX1dPUkQgd29yZCA9IHN3VGV4dC5HZXRBdChpKTsNCi0gICAgICAgIHN3aXRjaCAod29yZCkgew0KLSAgICAgICAgICAgIGNhc2UgMHgwRDoNCi0gICAgICAgICAgICAgICAgaWYgKG1fYk11bHRpTGluZSkgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN3VGV4dC5HZXRBdChpICsgMSkgPT0gMHgwQSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIHdwLm5TZWNJbmRleCArKzsNCi0gICAgICAgICAgICAgICAgICAgIHdwLm5MaW5lSW5kZXggPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgd3AubldvcmRJbmRleCA9IC0xOw0KLSAgICAgICAgICAgICAgICAgICAgQWRkU2VjdGlvbih3cCwgc2VjaW5mbyk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSAweDBBOg0KLSAgICAgICAgICAgICAgICBpZiAobV9iTXVsdGlMaW5lKSB7DQotICAgICAgICAgICAgICAgICAgICBpZiAoc3dUZXh0LkdldEF0KGkgKyAxKSA9PSAweDBEKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAxOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgd3AublNlY0luZGV4ICsrOw0KLSAgICAgICAgICAgICAgICAgICAgd3AubkxpbmVJbmRleCA9IDA7DQotICAgICAgICAgICAgICAgICAgICB3cC5uV29yZEluZGV4ID0gLTE7DQotICAgICAgICAgICAgICAgICAgICBBZGRTZWN0aW9uKHdwLCBzZWNpbmZvKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDB4MDk6DQotICAgICAgICAgICAgICAgIHdvcmQgPSAweDIwOw0KLSAgICAgICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgICAgIHdwID0gSW5zZXJ0V29yZCh3cCwgd29yZCwgY2hhcnNldCwgcFdvcmRQcm9wcyk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbkNoYXJDb3VudCsrOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9WYXJpYWJsZVRleHQ6OlVwZGF0ZVdvcmRQbGFjZShDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdA0KLXsNCi0gICAgaWYgKHBsYWNlLm5TZWNJbmRleCA8IDApIHsNCi0gICAgICAgIHBsYWNlID0gR2V0QmVnaW5Xb3JkUGxhY2UoKTsNCi0gICAgfQ0KLSAgICBpZiAocGxhY2UublNlY0luZGV4ID49IG1fU2VjdGlvbkFycmF5LkdldFNpemUoKSkgew0KLSAgICAgICAgcGxhY2UgPSBHZXRFbmRXb3JkUGxhY2UoKTsNCi0gICAgfQ0KLSAgICBwbGFjZSA9IEFqdXN0TGluZUhlYWRlcihwbGFjZSwgVFJVRSk7DQotICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQocGxhY2UublNlY0luZGV4KSkgew0KLSAgICAgICAgcFNlY3Rpb24tPlVwZGF0ZVdvcmRQbGFjZShwbGFjZSk7DQotICAgIH0NCi19DQotRlhfSU5UMzIgQ1BERl9WYXJpYWJsZVRleHQ6OldvcmRQbGFjZVRvV29yZEluZGV4KGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0DQotew0KLSAgICBDUFZUX1dvcmRQbGFjZSBuZXdwbGFjZSA9IHBsYWNlOw0KLSAgICBVcGRhdGVXb3JkUGxhY2UobmV3cGxhY2UpOw0KLSAgICBGWF9JTlQzMiBuSW5kZXggPSAwOw0KLSAgICBGWF9JTlQzMiBpID0gMDsNCi0gICAgRlhfSU5UMzIgc3ogPSAwOw0KLSAgICBmb3IgKGkgPSAwLCBzeiA9IG1fU2VjdGlvbkFycmF5LkdldFNpemUoKTsgaSA8IHN6ICYmIGkgPCBuZXdwbGFjZS5uU2VjSW5kZXg7IGkrKykgew0KLSAgICAgICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdChpKSkgew0KLSAgICAgICAgICAgIG5JbmRleCArPSBwU2VjdGlvbi0+bV9Xb3JkQXJyYXkuR2V0U2l6ZSgpOw0KLSAgICAgICAgICAgIGlmIChpICE9IG1fU2VjdGlvbkFycmF5LkdldFNpemUoKSAtIDEpIHsNCi0gICAgICAgICAgICAgICAgbkluZGV4ICs9IFBWVF9SRVRVUk5fTEVOR1RIOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoaSA+PSAwICYmIGkgPCBtX1NlY3Rpb25BcnJheS5HZXRTaXplKCkpIHsNCi0gICAgICAgIG5JbmRleCArPSBuZXdwbGFjZS5uV29yZEluZGV4ICsgUFZUX1JFVFVSTl9MRU5HVEg7DQotICAgIH0NCi0gICAgcmV0dXJuIG5JbmRleDsNCi19DQotQ1BWVF9Xb3JkUGxhY2UgQ1BERl9WYXJpYWJsZVRleHQ6OldvcmRJbmRleFRvV29yZFBsYWNlKEZYX0lOVDMyIGluZGV4KSBjb25zdA0KLXsNCi0gICAgQ1BWVF9Xb3JkUGxhY2UgcGxhY2UgPSBHZXRCZWdpbldvcmRQbGFjZSgpOw0KLSAgICBGWF9JTlQzMiBuT2xkSW5kZXggPSAwICwgbkluZGV4ID0gMDsNCi0gICAgRlhfQk9PTCBiRmluZCA9IEZBTFNFOw0KLSAgICBmb3IgKEZYX0lOVDMyIGkgPSAwLCBzeiA9IG1fU2VjdGlvbkFycmF5LkdldFNpemUoKTsgaSA8IHN6OyBpKyspIHsNCi0gICAgICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQoaSkpIHsNCi0gICAgICAgICAgICBuSW5kZXggKz0gcFNlY3Rpb24tPm1fV29yZEFycmF5LkdldFNpemUoKTsNCi0gICAgICAgICAgICBpZiAobkluZGV4ID09IGluZGV4KSB7DQotICAgICAgICAgICAgICAgIHBsYWNlID0gcFNlY3Rpb24tPkdldEVuZFdvcmRQbGFjZSgpOw0KLSAgICAgICAgICAgICAgICBiRmluZCA9IFRSVUU7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAobkluZGV4ID4gaW5kZXgpIHsNCi0gICAgICAgICAgICAgICAgcGxhY2UublNlY0luZGV4ID0gaTsNCi0gICAgICAgICAgICAgICAgcGxhY2UubldvcmRJbmRleCA9IGluZGV4IC0gbk9sZEluZGV4IC0gMTsNCi0gICAgICAgICAgICAgICAgcFNlY3Rpb24tPlVwZGF0ZVdvcmRQbGFjZShwbGFjZSk7DQotICAgICAgICAgICAgICAgIGJGaW5kID0gVFJVRTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChpICE9IG1fU2VjdGlvbkFycmF5LkdldFNpemUoKSAtIDEpIHsNCi0gICAgICAgICAgICAgICAgbkluZGV4ICs9IFBWVF9SRVRVUk5fTEVOR1RIOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBuT2xkSW5kZXggPSBuSW5kZXg7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKCFiRmluZCkgew0KLSAgICAgICAgcGxhY2UgPSBHZXRFbmRXb3JkUGxhY2UoKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gcGxhY2U7DQotfQ0KLUNQVlRfV29yZFBsYWNlIENQREZfVmFyaWFibGVUZXh0OjpHZXRCZWdpbldvcmRQbGFjZSgpIGNvbnN0DQotew0KLSAgICByZXR1cm4gbV9iSW5pdGlhbCA/IENQVlRfV29yZFBsYWNlKDAsIDAsIC0xKSA6IENQVlRfV29yZFBsYWNlKCk7DQotfQ0KLUNQVlRfV29yZFBsYWNlIENQREZfVmFyaWFibGVUZXh0OjpHZXRFbmRXb3JkUGxhY2UoKSBjb25zdA0KLXsNCi0gICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdChtX1NlY3Rpb25BcnJheS5HZXRTaXplKCkgLSAxKSkgew0KLSAgICAgICAgcmV0dXJuIHBTZWN0aW9uLT5HZXRFbmRXb3JkUGxhY2UoKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gQ1BWVF9Xb3JkUGxhY2UoKTsNCi19DQotQ1BWVF9Xb3JkUGxhY2UgQ1BERl9WYXJpYWJsZVRleHQ6OkdldFByZXZXb3JkUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3QNCi17DQotICAgIGlmKCBwbGFjZS5uU2VjSW5kZXggPCAwKSB7DQotICAgICAgICByZXR1cm4gR2V0QmVnaW5Xb3JkUGxhY2UoKTsNCi0gICAgfQ0KLSAgICBpZiAocGxhY2UublNlY0luZGV4ID49IG1fU2VjdGlvbkFycmF5LkdldFNpemUoKSkgew0KLSAgICAgICAgcmV0dXJuIEdldEVuZFdvcmRQbGFjZSgpOw0KLSAgICB9DQotICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQocGxhY2UublNlY0luZGV4KSkgew0KLSAgICAgICAgaWYgKHBsYWNlLldvcmRDbXAocFNlY3Rpb24tPkdldEJlZ2luV29yZFBsYWNlKCkpIDw9IDApIHsNCi0gICAgICAgICAgICBpZiAoQ1NlY3Rpb24gKiBwUHJldlNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdChwbGFjZS5uU2VjSW5kZXggLSAxKSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gcFByZXZTZWN0aW9uLT5HZXRFbmRXb3JkUGxhY2UoKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICByZXR1cm4gR2V0QmVnaW5Xb3JkUGxhY2UoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHJldHVybiBwU2VjdGlvbi0+R2V0UHJldldvcmRQbGFjZShwbGFjZSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIHBsYWNlOw0KLX0NCi1DUFZUX1dvcmRQbGFjZSBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0TmV4dFdvcmRQbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdA0KLXsNCi0gICAgaWYgKHBsYWNlLm5TZWNJbmRleCA8IDApIHsNCi0gICAgICAgIHJldHVybiBHZXRCZWdpbldvcmRQbGFjZSgpOw0KLSAgICB9DQotICAgIGlmIChwbGFjZS5uU2VjSW5kZXggPj0gbV9TZWN0aW9uQXJyYXkuR2V0U2l6ZSgpKSB7DQotICAgICAgICByZXR1cm4gR2V0RW5kV29yZFBsYWNlKCk7DQotICAgIH0NCi0gICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdChwbGFjZS5uU2VjSW5kZXgpKSB7DQotICAgICAgICBpZiAocGxhY2UuV29yZENtcChwU2VjdGlvbi0+R2V0RW5kV29yZFBsYWNlKCkpID49IDApIHsNCi0gICAgICAgICAgICBpZiAoQ1NlY3Rpb24gKiBwTmV4dFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdChwbGFjZS5uU2VjSW5kZXggKyAxKSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gcE5leHRTZWN0aW9uLT5HZXRCZWdpbldvcmRQbGFjZSgpOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBHZXRFbmRXb3JkUGxhY2UoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHJldHVybiBwU2VjdGlvbi0+R2V0TmV4dFdvcmRQbGFjZShwbGFjZSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIHBsYWNlOw0KLX0NCi1DUFZUX1dvcmRQbGFjZSBDUERGX1ZhcmlhYmxlVGV4dDo6U2VhcmNoV29yZFBsYWNlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3QNCi17DQotICAgIENQREZfUG9pbnQgcHQgPSBPdXRUb0luKHBvaW50KTsNCi0gICAgQ1BWVF9Xb3JkUGxhY2UgcGxhY2UgPSBHZXRCZWdpbldvcmRQbGFjZSgpOw0KLSAgICBGWF9JTlQzMiBuTGVmdCA9IDA7DQotICAgIEZYX0lOVDMyIG5SaWdodCA9IG1fU2VjdGlvbkFycmF5LkdldFNpemUoKSAtIDE7DQotICAgIEZYX0lOVDMyIG5NaWQgPSBtX1NlY3Rpb25BcnJheS5HZXRTaXplKCkgLyAyOw0KLSAgICBGWF9CT09MIGJVcCA9IFRSVUU7DQotICAgIEZYX0JPT0wgYkRvd24gPSBUUlVFOw0KLSAgICB3aGlsZSAobkxlZnQgPD0gblJpZ2h0KSB7DQotICAgICAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fU2VjdGlvbkFycmF5LkdldEF0KG5NaWQpKSB7DQotICAgICAgICAgICAgaWYgKElzRmxvYXRCaWdnZXIocHQueSwgcFNlY3Rpb24tPm1fU2VjSW5mby5yY1NlY3Rpb24udG9wKSkgew0KLSAgICAgICAgICAgICAgICBiVXAgPSBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKElzRmxvYXRCaWdnZXIocFNlY3Rpb24tPm1fU2VjSW5mby5yY1NlY3Rpb24uYm90dG9tLCBwdC55KSkgew0KLSAgICAgICAgICAgICAgICBiRG93biA9IEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoSXNGbG9hdFNtYWxsZXIocHQueSwgcFNlY3Rpb24tPm1fU2VjSW5mby5yY1NlY3Rpb24udG9wKSkgew0KLSAgICAgICAgICAgICAgICBuUmlnaHQgPSBuTWlkIC0gMTsNCi0gICAgICAgICAgICAgICAgbk1pZCA9IChuTGVmdCArIG5SaWdodCkgLyAyOw0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9IGVsc2UgaWYgKElzRmxvYXRCaWdnZXIocHQueSwgcFNlY3Rpb24tPm1fU2VjSW5mby5yY1NlY3Rpb24uYm90dG9tKSkgew0KLSAgICAgICAgICAgICAgICBuTGVmdCA9IG5NaWQgKyAxOw0KLSAgICAgICAgICAgICAgICBuTWlkID0gKG5MZWZ0ICsgblJpZ2h0KSAvIDI7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHBsYWNlID0gcFNlY3Rpb24tPlNlYXJjaFdvcmRQbGFjZSgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9Qb2ludChwdC54IC0gcFNlY3Rpb24tPm1fU2VjSW5mby5yY1NlY3Rpb24ubGVmdCwgcHQueSAtIHBTZWN0aW9uLT5tX1NlY0luZm8ucmNTZWN0aW9uLnRvcCkNCi0gICAgICAgICAgICAgICAgICAgICAgICApOw0KLSAgICAgICAgICAgICAgICBwbGFjZS5uU2VjSW5kZXggPSBuTWlkOw0KLSAgICAgICAgICAgICAgICByZXR1cm4gcGxhY2U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoYlVwKSB7DQotICAgICAgICBwbGFjZSA9IEdldEJlZ2luV29yZFBsYWNlKCk7DQotICAgIH0NCi0gICAgaWYgKGJEb3duKSB7DQotICAgICAgICBwbGFjZSA9IEdldEVuZFdvcmRQbGFjZSgpOw0KLSAgICB9DQotICAgIHJldHVybiBwbGFjZTsNCi19DQotQ1BWVF9Xb3JkUGxhY2UgQ1BERl9WYXJpYWJsZVRleHQ6OkdldFVwV29yZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3QNCi17DQotICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQocGxhY2UublNlY0luZGV4KSkgew0KLSAgICAgICAgQ1BWVF9Xb3JkUGxhY2UgdGVtcCA9ICBwbGFjZTsNCi0gICAgICAgIENQREZfUG9pbnQgcHQgPSBPdXRUb0luKHBvaW50KTsNCi0gICAgICAgIGlmICh0ZW1wLm5MaW5lSW5kZXgtLSA+IDApIHsNCi0gICAgICAgICAgICByZXR1cm4gcFNlY3Rpb24tPlNlYXJjaFdvcmRQbGFjZShwdC54IC0gcFNlY3Rpb24tPm1fU2VjSW5mby5yY1NlY3Rpb24ubGVmdCwgdGVtcCk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlmICh0ZW1wLm5TZWNJbmRleC0tID4gMCkgew0KLSAgICAgICAgICAgICAgICBpZiAoQ1NlY3Rpb24gKiBwTGFzdFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdCh0ZW1wLm5TZWNJbmRleCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIHRlbXAubkxpbmVJbmRleCA9IHBMYXN0U2VjdGlvbi0+bV9MaW5lQXJyYXkuR2V0U2l6ZSgpIC0gMTsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBwTGFzdFNlY3Rpb24tPlNlYXJjaFdvcmRQbGFjZShwdC54IC0gcExhc3RTZWN0aW9uLT5tX1NlY0luZm8ucmNTZWN0aW9uLmxlZnQsIHRlbXApOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBwbGFjZTsNCi19DQotQ1BWVF9Xb3JkUGxhY2UgQ1BERl9WYXJpYWJsZVRleHQ6OkdldERvd25Xb3JkUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSwgY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdA0KLXsNCi0gICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdChwbGFjZS5uU2VjSW5kZXgpKSB7DQotICAgICAgICBDUFZUX1dvcmRQbGFjZSB0ZW1wID0gIHBsYWNlOw0KLSAgICAgICAgQ1BERl9Qb2ludCBwdCA9IE91dFRvSW4ocG9pbnQpOw0KLSAgICAgICAgaWYgKHRlbXAubkxpbmVJbmRleCsrIDwgcFNlY3Rpb24tPm1fTGluZUFycmF5LkdldFNpemUoKSAtIDEpIHsNCi0gICAgICAgICAgICByZXR1cm4gcFNlY3Rpb24tPlNlYXJjaFdvcmRQbGFjZShwdC54IC0gcFNlY3Rpb24tPm1fU2VjSW5mby5yY1NlY3Rpb24ubGVmdCwgdGVtcCk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlmICh0ZW1wLm5TZWNJbmRleCsrIDwgbV9TZWN0aW9uQXJyYXkuR2V0U2l6ZSgpIC0gMSkgew0KLSAgICAgICAgICAgICAgICBpZiAoQ1NlY3Rpb24gKiBwTmV4dFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdCh0ZW1wLm5TZWNJbmRleCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIHRlbXAubkxpbmVJbmRleCA9IDA7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcE5leHRTZWN0aW9uLT5TZWFyY2hXb3JkUGxhY2UocHQueCAtIHBTZWN0aW9uLT5tX1NlY0luZm8ucmNTZWN0aW9uLmxlZnQsIHRlbXApOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBwbGFjZTsNCi19DQotQ1BWVF9Xb3JkUGxhY2UgQ1BERl9WYXJpYWJsZVRleHQ6OkdldExpbmVCZWdpblBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0DQotew0KLSAgICByZXR1cm4gQ1BWVF9Xb3JkUGxhY2UocGxhY2UublNlY0luZGV4LCBwbGFjZS5uTGluZUluZGV4LCAtMSk7DQotfQ0KLUNQVlRfV29yZFBsYWNlIENQREZfVmFyaWFibGVUZXh0OjpHZXRMaW5lRW5kUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3QNCi17DQotICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQocGxhY2UublNlY0luZGV4KSkNCi0gICAgICAgIGlmIChDTGluZSAqIHBMaW5lID0gcFNlY3Rpb24tPm1fTGluZUFycmF5LkdldEF0KHBsYWNlLm5MaW5lSW5kZXgpKSB7DQotICAgICAgICAgICAgcmV0dXJuIHBMaW5lLT5HZXRFbmRXb3JkUGxhY2UoKTsNCi0gICAgICAgIH0NCi0gICAgcmV0dXJuIHBsYWNlOw0KLX0NCi1DUFZUX1dvcmRQbGFjZSBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0U2VjdGlvbkJlZ2luUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3QNCi17DQotICAgIHJldHVybiBDUFZUX1dvcmRQbGFjZShwbGFjZS5uU2VjSW5kZXgsIDAsIC0xKTsNCi19DQotQ1BWVF9Xb3JkUGxhY2UgQ1BERl9WYXJpYWJsZVRleHQ6OkdldFNlY3Rpb25FbmRQbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdA0KLXsNCi0gICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdChwbGFjZS5uU2VjSW5kZXgpKSB7DQotICAgICAgICByZXR1cm4gcFNlY3Rpb24tPkdldEVuZFdvcmRQbGFjZSgpOw0KLSAgICB9DQotICAgIHJldHVybiBwbGFjZTsNCi19DQotRlhfSU5UMzIgQ1BERl9WYXJpYWJsZVRleHQ6OkdldFRvdGFsV29yZHMoKSBjb25zdA0KLXsNCi0gICAgRlhfSU5UMzIgblRvdGFsID0gMDsNCi0gICAgZm9yIChGWF9JTlQzMiBpID0gMCwgc3ogPSBtX1NlY3Rpb25BcnJheS5HZXRTaXplKCk7IGkgPCBzejsgaSsrKQ0KLSAgICAgICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdChpKSkgew0KLSAgICAgICAgICAgIG5Ub3RhbCArPSAocFNlY3Rpb24tPm1fV29yZEFycmF5LkdldFNpemUoKSArIFBWVF9SRVRVUk5fTEVOR1RIKTsNCi0gICAgICAgIH0NCi0gICAgcmV0dXJuIG5Ub3RhbCAtIFBWVF9SRVRVUk5fTEVOR1RIOw0KLX0NCi12b2lkIENQREZfVmFyaWFibGVUZXh0OjpSZXNldFNlY3Rpb25BcnJheSgpDQotew0KLSAgICBmb3IgKEZYX0lOVDMyIHMgPSAwLCBzeiA9IG1fU2VjdGlvbkFycmF5LkdldFNpemUoKTsgcyA8IHN6OyBzKyspIHsNCi0gICAgICAgIGRlbGV0ZSBtX1NlY3Rpb25BcnJheS5HZXRBdChzKTsNCi0gICAgfQ0KLSAgICBtX1NlY3Rpb25BcnJheS5SZW1vdmVBbGwoKTsNCi19DQotQ1BWVF9Xb3JkUGxhY2UgQ1BERl9WYXJpYWJsZVRleHQ6OkFkZFNlY3Rpb24oY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSwgY29uc3QgQ1BWVF9TZWN0aW9uSW5mbyAmIHNlY2luZm8pDQotew0KLSAgICBpZiAoSXNWYWxpZCgpICYmICFtX2JNdWx0aUxpbmUpIHsNCi0gICAgICAgIHJldHVybiBwbGFjZTsNCi0gICAgfQ0KLSAgICBGWF9JTlQzMiBuU2VjSW5kZXggPSBGUERGX01BWChGUERGX01JTihwbGFjZS5uU2VjSW5kZXgsIG1fU2VjdGlvbkFycmF5LkdldFNpemUoKSksIDApOw0KLSAgICBDU2VjdGlvbiAqIHBTZWN0aW9uID0gRlhfTkVXIENTZWN0aW9uKHRoaXMpOw0KLSAgICBpZiAoIXBTZWN0aW9uKSB7DQotICAgICAgICByZXR1cm4gcGxhY2U7DQotICAgIH0NCi0gICAgcFNlY3Rpb24tPm1fU2VjSW5mbyA9IHNlY2luZm87DQotICAgIHBTZWN0aW9uLT5TZWNQbGFjZS5uU2VjSW5kZXggPSBuU2VjSW5kZXg7DQotICAgIGlmIChuU2VjSW5kZXggPT0gbV9TZWN0aW9uQXJyYXkuR2V0U2l6ZSgpKSB7DQotICAgICAgICBtX1NlY3Rpb25BcnJheS5BZGQocFNlY3Rpb24pOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9TZWN0aW9uQXJyYXkuSW5zZXJ0QXQoblNlY0luZGV4LCBwU2VjdGlvbik7DQotICAgIH0NCi0gICAgcmV0dXJuIHBsYWNlOw0KLX0NCi1DUFZUX1dvcmRQbGFjZSBDUERGX1ZhcmlhYmxlVGV4dDo6QWRkTGluZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBjb25zdCBDUFZUX0xpbmVJbmZvICYgbGluZWluZm8pDQotew0KLSAgICBpZiAobV9TZWN0aW9uQXJyYXkuSXNFbXB0eSgpKSB7DQotICAgICAgICByZXR1cm4gcGxhY2U7DQotICAgIH0NCi0gICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdChwbGFjZS5uU2VjSW5kZXgpKSB7DQotICAgICAgICByZXR1cm4gcFNlY3Rpb24tPkFkZExpbmUobGluZWluZm8pOw0KLSAgICB9DQotICAgIHJldHVybiBwbGFjZTsNCi19DQotQ1BWVF9Xb3JkUGxhY2UgQ1BERl9WYXJpYWJsZVRleHQ6OkFkZFdvcmQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkSW5mbyAmIHdvcmRpbmZvKQ0KLXsNCi0gICAgaWYgKG1fU2VjdGlvbkFycmF5LkdldFNpemUoKSA8PSAwKSB7DQotICAgICAgICByZXR1cm4gcGxhY2U7DQotICAgIH0NCi0gICAgQ1BWVF9Xb3JkUGxhY2UgbmV3cGxhY2UgPSBwbGFjZTsNCi0gICAgbmV3cGxhY2UublNlY0luZGV4ID0gRlBERl9NQVgoRlBERl9NSU4obmV3cGxhY2UublNlY0luZGV4LCBtX1NlY3Rpb25BcnJheS5HZXRTaXplKCkgLSAxKSwgMCk7DQotICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQobmV3cGxhY2UublNlY0luZGV4KSkgew0KLSAgICAgICAgcmV0dXJuIHBTZWN0aW9uLT5BZGRXb3JkKG5ld3BsYWNlLCB3b3JkaW5mbyk7DQotICAgIH0NCi0gICAgcmV0dXJuIHBsYWNlOw0KLX0NCi1GWF9CT09MIENQREZfVmFyaWFibGVUZXh0OjpHZXRXb3JkSW5mbyhjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBDUFZUX1dvcmRJbmZvICYgd29yZGluZm8pDQotew0KLSAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fU2VjdGlvbkFycmF5LkdldEF0KHBsYWNlLm5TZWNJbmRleCkpIHsNCi0gICAgICAgIGlmIChDUFZUX1dvcmRJbmZvICogcFdvcmQgPSBwU2VjdGlvbi0+bV9Xb3JkQXJyYXkuR2V0QXQocGxhY2UubldvcmRJbmRleCkpIHsNCi0gICAgICAgICAgICB3b3JkaW5mbyA9ICpwV29yZDsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUZYX0JPT0wgQ1BERl9WYXJpYWJsZVRleHQ6OlNldFdvcmRJbmZvKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIGNvbnN0IENQVlRfV29yZEluZm8gJiB3b3JkaW5mbykNCi17DQotICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQocGxhY2UublNlY0luZGV4KSkgew0KLSAgICAgICAgaWYgKENQVlRfV29yZEluZm8gKiBwV29yZCA9IHBTZWN0aW9uLT5tX1dvcmRBcnJheS5HZXRBdChwbGFjZS5uV29yZEluZGV4KSkgew0KLSAgICAgICAgICAgICpwV29yZCA9IHdvcmRpbmZvOw0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotRlhfQk9PTCBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0TGluZUluZm8oY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSwgQ1BWVF9MaW5lSW5mbyAmIGxpbmVpbmZvKQ0KLXsNCi0gICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdChwbGFjZS5uU2VjSW5kZXgpKSB7DQotICAgICAgICBpZiAoQ0xpbmUgKiBwTGluZSA9IHBTZWN0aW9uLT5tX0xpbmVBcnJheS5HZXRBdChwbGFjZS5uTGluZUluZGV4KSkgew0KLSAgICAgICAgICAgIGxpbmVpbmZvID0gcExpbmUtPm1fTGluZUluZm87DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1GWF9CT09MIENQREZfVmFyaWFibGVUZXh0OjpHZXRTZWN0aW9uSW5mbyhjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBDUFZUX1NlY3Rpb25JbmZvICYgc2VjaW5mbykNCi17DQotICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQocGxhY2UublNlY0luZGV4KSkgew0KLSAgICAgICAgc2VjaW5mbyA9IHBTZWN0aW9uLT5tX1NlY0luZm87DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUNQREZfUmVjdCBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0Q29udGVudFJlY3QoKSBjb25zdA0KLXsNCi0gICAgcmV0dXJuIEluVG9PdXQoQ1BERl9FZGl0Q29udGFpbmVyOjpHZXRDb250ZW50UmVjdCgpKTsNCi19DQotRlhfRkxPQVQgQ1BERl9WYXJpYWJsZVRleHQ6OkdldFdvcmRGb250U2l6ZShjb25zdCBDUFZUX1dvcmRJbmZvICYgV29yZEluZm8sIEZYX0JPT0wgYkZhY3RGb250U2l6ZSkNCi17DQotICAgIHJldHVybiBtX2JSaWNoVGV4dCAmJiBXb3JkSW5mby5wV29yZFByb3BzID8gKFdvcmRJbmZvLnBXb3JkUHJvcHMtPm5TY3JpcHRUeXBlID09IFBWVFdPUkRfU0NSSVBUX05PUk1BTCB8fCBiRmFjdEZvbnRTaXplID8gV29yZEluZm8ucFdvcmRQcm9wcy0+ZkZvbnRTaXplIDogV29yZEluZm8ucFdvcmRQcm9wcy0+ZkZvbnRTaXplICogUFZUX0hBTEYpIDogR2V0Rm9udFNpemUoKTsNCi19DQotRlhfSU5UMzIgQ1BERl9WYXJpYWJsZVRleHQ6OkdldFdvcmRGb250SW5kZXgoY29uc3QgQ1BWVF9Xb3JkSW5mbyAmIFdvcmRJbmZvKQ0KLXsNCi0gICAgcmV0dXJuIG1fYlJpY2hUZXh0ICYmIFdvcmRJbmZvLnBXb3JkUHJvcHMgPyBXb3JkSW5mby5wV29yZFByb3BzLT5uRm9udEluZGV4IDogV29yZEluZm8ubkZvbnRJbmRleDsNCi19DQotRlhfRkxPQVQgQ1BERl9WYXJpYWJsZVRleHQ6OkdldFdvcmRXaWR0aChGWF9JTlQzMiBuRm9udEluZGV4LCBGWF9XT1JEIFdvcmQsIEZYX1dPUkQgU3ViV29yZCwNCi0gICAgICAgIEZYX0ZMT0FUIGZDaGFyU3BhY2UsIEZYX0lOVDMyIG5Ib3J6U2NhbGUsDQotICAgICAgICBGWF9GTE9BVCBmRm9udFNpemUsIEZYX0ZMT0FUIGZXb3JkVGFpbCwgRlhfSU5UMzIgbldvcmRTdHlsZSkNCi17DQotICAgIHJldHVybiAoR2V0Q2hhcldpZHRoKG5Gb250SW5kZXgsIFdvcmQsIFN1YldvcmQsIG5Xb3JkU3R5bGUpICogZkZvbnRTaXplICogUFZUX0ZPTlRTQ0FMRSArIGZDaGFyU3BhY2UpICogbkhvcnpTY2FsZSAqIFBWVF9QRVJDRU5UICsgZldvcmRUYWlsOw0KLX0NCi1GWF9GTE9BVCBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0V29yZFdpZHRoKGNvbnN0IENQVlRfV29yZEluZm8gJiBXb3JkSW5mbykNCi17DQotICAgIHJldHVybiBHZXRXb3JkV2lkdGgoR2V0V29yZEZvbnRJbmRleChXb3JkSW5mbyksIFdvcmRJbmZvLldvcmQsIEdldFN1YldvcmQoKSwgR2V0Q2hhclNwYWNlKFdvcmRJbmZvKSwgR2V0SG9yelNjYWxlKFdvcmRJbmZvKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICBHZXRXb3JkRm9udFNpemUoV29yZEluZm8pLCBXb3JkSW5mby5mV29yZFRhaWwsDQotICAgICAgICAgICAgICAgICAgICAgICAgV29yZEluZm8ucFdvcmRQcm9wcyA/IFdvcmRJbmZvLnBXb3JkUHJvcHMtPm5Xb3JkU3R5bGUgOiAwKTsNCi19DQotRlhfRkxPQVQgQ1BERl9WYXJpYWJsZVRleHQ6OkdldExpbmVBc2NlbnQoY29uc3QgQ1BWVF9TZWN0aW9uSW5mbyAmIFNlY0luZm8pDQotew0KLSAgICByZXR1cm4gbV9iUmljaFRleHQgJiYgU2VjSW5mby5wV29yZFByb3BzID8gR2V0Rm9udEFzY2VudChTZWNJbmZvLnBXb3JkUHJvcHMtPm5Gb250SW5kZXgsIFNlY0luZm8ucFdvcmRQcm9wcy0+ZkZvbnRTaXplKSA6DQotICAgICAgICAgICBHZXRGb250QXNjZW50KEdldERlZmF1bHRGb250SW5kZXgoKSwgR2V0Rm9udFNpemUoKSk7DQotfQ0KLUZYX0ZMT0FUIENQREZfVmFyaWFibGVUZXh0OjpHZXRMaW5lRGVzY2VudChjb25zdCBDUFZUX1NlY3Rpb25JbmZvICYgU2VjSW5mbykNCi17DQotICAgIHJldHVybiBtX2JSaWNoVGV4dCAmJiBTZWNJbmZvLnBXb3JkUHJvcHMgPyBHZXRGb250RGVzY2VudChTZWNJbmZvLnBXb3JkUHJvcHMtPm5Gb250SW5kZXgsIFNlY0luZm8ucFdvcmRQcm9wcy0+ZkZvbnRTaXplKSA6DQotICAgICAgICAgICBHZXRGb250RGVzY2VudChHZXREZWZhdWx0Rm9udEluZGV4KCksIEdldEZvbnRTaXplKCkpOw0KLX0NCi1GWF9GTE9BVCBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0Rm9udEFzY2VudChGWF9JTlQzMiBuRm9udEluZGV4LCBGWF9GTE9BVCBmRm9udFNpemUpDQotew0KLSAgICByZXR1cm4gKEZYX0ZMT0FUKUdldFR5cGVBc2NlbnQobkZvbnRJbmRleCkgKiBmRm9udFNpemUgKiBQVlRfRk9OVFNDQUxFOw0KLX0NCi1GWF9GTE9BVCBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0Rm9udERlc2NlbnQoRlhfSU5UMzIgbkZvbnRJbmRleCwgRlhfRkxPQVQgZkZvbnRTaXplKQ0KLXsNCi0gICAgcmV0dXJuIChGWF9GTE9BVClHZXRUeXBlRGVzY2VudChuRm9udEluZGV4KSAqIGZGb250U2l6ZSAqIFBWVF9GT05UU0NBTEU7DQotfQ0KLUZYX0ZMT0FUIENQREZfVmFyaWFibGVUZXh0OjpHZXRXb3JkQXNjZW50KGNvbnN0IENQVlRfV29yZEluZm8gJiBXb3JkSW5mbywgRlhfRkxPQVQgZkZvbnRTaXplKQ0KLXsNCi0gICAgcmV0dXJuIEdldEZvbnRBc2NlbnQoR2V0V29yZEZvbnRJbmRleChXb3JkSW5mbyksIGZGb250U2l6ZSk7DQotfQ0KLUZYX0ZMT0FUIENQREZfVmFyaWFibGVUZXh0OjpHZXRXb3JkRGVzY2VudChjb25zdCBDUFZUX1dvcmRJbmZvICYgV29yZEluZm8sIEZYX0ZMT0FUIGZGb250U2l6ZSkNCi17DQotICAgIHJldHVybiBHZXRGb250RGVzY2VudChHZXRXb3JkRm9udEluZGV4KFdvcmRJbmZvKSwgZkZvbnRTaXplKTsNCi19DQotRlhfRkxPQVQgQ1BERl9WYXJpYWJsZVRleHQ6OkdldFdvcmRBc2NlbnQoY29uc3QgQ1BWVF9Xb3JkSW5mbyAmIFdvcmRJbmZvLCBGWF9CT09MIGJGYWN0Rm9udFNpemUpDQotew0KLSAgICByZXR1cm4gR2V0Rm9udEFzY2VudChHZXRXb3JkRm9udEluZGV4KFdvcmRJbmZvKSwgR2V0V29yZEZvbnRTaXplKFdvcmRJbmZvLCBiRmFjdEZvbnRTaXplKSk7DQotfQ0KLUZYX0ZMT0FUIENQREZfVmFyaWFibGVUZXh0OjpHZXRXb3JkRGVzY2VudChjb25zdCBDUFZUX1dvcmRJbmZvICYgV29yZEluZm8sIEZYX0JPT0wgYkZhY3RGb250U2l6ZSkNCi17DQotICAgIHJldHVybiBHZXRGb250RGVzY2VudChHZXRXb3JkRm9udEluZGV4KFdvcmRJbmZvKSwgR2V0V29yZEZvbnRTaXplKFdvcmRJbmZvLCBiRmFjdEZvbnRTaXplKSk7DQotfQ0KLUZYX0ZMT0FUIENQREZfVmFyaWFibGVUZXh0OjpHZXRMaW5lTGVhZGluZyhjb25zdCBDUFZUX1NlY3Rpb25JbmZvICYgU2VjSW5mbykNCi17DQotICAgIHJldHVybiBtX2JSaWNoVGV4dCAmJiBTZWNJbmZvLnBTZWNQcm9wcyA/IFNlY0luZm8ucFNlY1Byb3BzLT5mTGluZUxlYWRpbmcgOiBtX2ZMaW5lTGVhZGluZzsNCi19DQotRlhfRkxPQVQgQ1BERl9WYXJpYWJsZVRleHQ6OkdldExpbmVJbmRlbnQoY29uc3QgQ1BWVF9TZWN0aW9uSW5mbyAmIFNlY0luZm8pDQotew0KLSAgICByZXR1cm4gbV9iUmljaFRleHQgJiYgU2VjSW5mby5wU2VjUHJvcHMgPyBTZWNJbmZvLnBTZWNQcm9wcy0+ZkxpbmVJbmRlbnQgOiAwLjBmOw0KLX0NCi1GWF9JTlQzMiBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0QWxpZ25tZW50KGNvbnN0IENQVlRfU2VjdGlvbkluZm8mIFNlY0luZm8pDQotew0KLSAgICByZXR1cm4gbV9iUmljaFRleHQgJiYgU2VjSW5mby5wU2VjUHJvcHMgPyBTZWNJbmZvLnBTZWNQcm9wcy0+bkFsaWdubWVudCA6IHRoaXMtPm1fbkFsaWdubWVudDsNCi19DQotRlhfRkxPQVQgQ1BERl9WYXJpYWJsZVRleHQ6OkdldENoYXJTcGFjZShjb25zdCBDUFZUX1dvcmRJbmZvICYgV29yZEluZm8pDQotew0KLSAgICByZXR1cm4gbV9iUmljaFRleHQgJiYgV29yZEluZm8ucFdvcmRQcm9wcyA/IFdvcmRJbmZvLnBXb3JkUHJvcHMtPmZDaGFyU3BhY2UgOiBtX2ZDaGFyU3BhY2U7DQotfQ0KLUZYX0lOVDMyIENQREZfVmFyaWFibGVUZXh0OjpHZXRIb3J6U2NhbGUoY29uc3QgQ1BWVF9Xb3JkSW5mbyAmIFdvcmRJbmZvKQ0KLXsNCi0gICAgcmV0dXJuIG1fYlJpY2hUZXh0ICYmIFdvcmRJbmZvLnBXb3JkUHJvcHMgPyBXb3JkSW5mby5wV29yZFByb3BzLT5uSG9yelNjYWxlIDogbV9uSG9yelNjYWxlOw0KLX0NCi12b2lkIENQREZfVmFyaWFibGVUZXh0OjpDbGVhclNlY3Rpb25SaWdodFdvcmRzKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpDQotew0KLSAgICBDUFZUX1dvcmRQbGFjZSB3b3JkcGxhY2UgPSBBanVzdExpbmVIZWFkZXIocGxhY2UsIFRSVUUpOw0KLSAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fU2VjdGlvbkFycmF5LkdldEF0KHBsYWNlLm5TZWNJbmRleCkpIHsNCi0gICAgICAgIGZvciAoRlhfSU5UMzIgdyA9IHBTZWN0aW9uLT5tX1dvcmRBcnJheS5HZXRTaXplKCkgLSAxOyB3ID4gd29yZHBsYWNlLm5Xb3JkSW5kZXg7IHctLSkgew0KLSAgICAgICAgICAgIGRlbGV0ZSBwU2VjdGlvbi0+bV9Xb3JkQXJyYXkuR2V0QXQodyk7DQotICAgICAgICAgICAgcFNlY3Rpb24tPm1fV29yZEFycmF5LlJlbW92ZUF0KHcpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLUNQVlRfV29yZFBsYWNlIENQREZfVmFyaWFibGVUZXh0OjpBanVzdExpbmVIZWFkZXIoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSwgRlhfQk9PTCBiUHJldk9yTmV4dCkgY29uc3QNCi17DQotICAgIGlmIChwbGFjZS5uV29yZEluZGV4IDwgMCAmJiBwbGFjZS5uTGluZUluZGV4ID4gMCkgew0KLSAgICAgICAgaWYgKGJQcmV2T3JOZXh0KSB7DQotICAgICAgICAgICAgcmV0dXJuIEdldFByZXZXb3JkUGxhY2UocGxhY2UpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICByZXR1cm4gR2V0TmV4dFdvcmRQbGFjZShwbGFjZSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIHBsYWNlOw0KLX0NCi1GWF9CT09MIENQREZfVmFyaWFibGVUZXh0OjpDbGVhckVtcHR5U2VjdGlvbihjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKQ0KLXsNCi0gICAgaWYgKHBsYWNlLm5TZWNJbmRleCA9PSAwICYmIG1fU2VjdGlvbkFycmF5LkdldFNpemUoKSA9PSAxKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdChwbGFjZS5uU2VjSW5kZXgpKSB7DQotICAgICAgICBpZiAocFNlY3Rpb24tPm1fV29yZEFycmF5LkdldFNpemUoKSA9PSAwKSB7DQotICAgICAgICAgICAgZGVsZXRlIHBTZWN0aW9uOw0KLSAgICAgICAgICAgIG1fU2VjdGlvbkFycmF5LlJlbW92ZUF0KHBsYWNlLm5TZWNJbmRleCk7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi12b2lkIENQREZfVmFyaWFibGVUZXh0OjpDbGVhckVtcHR5U2VjdGlvbnMoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiBQbGFjZVJhbmdlKQ0KLXsNCi0gICAgQ1BWVF9Xb3JkUGxhY2Ugd29yZHBsYWNlOw0KLSAgICBmb3IgKEZYX0lOVDMyIHMgPSBQbGFjZVJhbmdlLkVuZFBvcy5uU2VjSW5kZXg7IHMgPiBQbGFjZVJhbmdlLkJlZ2luUG9zLm5TZWNJbmRleDsgcy0tKSB7DQotICAgICAgICB3b3JkcGxhY2UublNlY0luZGV4ID0gczsNCi0gICAgICAgIENsZWFyRW1wdHlTZWN0aW9uKHdvcmRwbGFjZSk7DQotICAgIH0NCi19DQotdm9pZCBDUERGX1ZhcmlhYmxlVGV4dDo6TGlua0xhdHRlclNlY3Rpb24oY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkNCi17DQotICAgIENQVlRfV29yZFBsYWNlIG9sZHBsYWNlID0gQWp1c3RMaW5lSGVhZGVyKHBsYWNlLCBUUlVFKTsNCi0gICAgaWYgKENTZWN0aW9uICogcE5leHRTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQocGxhY2UublNlY0luZGV4ICsgMSkpIHsNCi0gICAgICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQob2xkcGxhY2UublNlY0luZGV4KSkgew0KLSAgICAgICAgICAgIGZvciAoRlhfSU5UMzIgdyA9IDAsIHN6ID0gcE5leHRTZWN0aW9uLT5tX1dvcmRBcnJheS5HZXRTaXplKCk7IHcgPCBzejsgdysrKSB7DQotICAgICAgICAgICAgICAgIGlmIChDUFZUX1dvcmRJbmZvICogcFdvcmQgPSBwTmV4dFNlY3Rpb24tPm1fV29yZEFycmF5LkdldEF0KHcpKSB7DQotICAgICAgICAgICAgICAgICAgICBvbGRwbGFjZS5uV29yZEluZGV4ICsrOw0KLSAgICAgICAgICAgICAgICAgICAgcFNlY3Rpb24tPkFkZFdvcmQob2xkcGxhY2UsICpwV29yZCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBkZWxldGUgcE5leHRTZWN0aW9uOw0KLSAgICAgICAgbV9TZWN0aW9uQXJyYXkuUmVtb3ZlQXQocGxhY2UublNlY0luZGV4ICsgMSk7DQotICAgIH0NCi19DQotdm9pZCBDUERGX1ZhcmlhYmxlVGV4dDo6Q2xlYXJXb3Jkcyhjb25zdCBDUFZUX1dvcmRSYW5nZSAmIFBsYWNlUmFuZ2UpDQotew0KLSAgICBDUFZUX1dvcmRSYW5nZSBOZXdSYW5nZTsNCi0gICAgTmV3UmFuZ2UuQmVnaW5Qb3MgPSBBanVzdExpbmVIZWFkZXIoUGxhY2VSYW5nZS5CZWdpblBvcywgVFJVRSk7DQotICAgIE5ld1JhbmdlLkVuZFBvcyA9IEFqdXN0TGluZUhlYWRlcihQbGFjZVJhbmdlLkVuZFBvcywgVFJVRSk7DQotICAgIGZvciAoRlhfSU5UMzIgcyA9IE5ld1JhbmdlLkVuZFBvcy5uU2VjSW5kZXg7IHMgPj0gTmV3UmFuZ2UuQmVnaW5Qb3MublNlY0luZGV4OyBzLS0pIHsNCi0gICAgICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQocykpIHsNCi0gICAgICAgICAgICBwU2VjdGlvbi0+Q2xlYXJXb3JkcyhOZXdSYW5nZSk7DQotICAgICAgICB9DQotICAgIH0NCi19DQotQ1BWVF9Xb3JkUGxhY2UgQ1BERl9WYXJpYWJsZVRleHQ6OkNsZWFyTGVmdFdvcmQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkNCi17DQotICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQocGxhY2UublNlY0luZGV4KSkgew0KLSAgICAgICAgQ1BWVF9Xb3JkUGxhY2UgbGVmdHBsYWNlID0gdGhpcy0+R2V0UHJldldvcmRQbGFjZShwbGFjZSk7DQotICAgICAgICBpZiAobGVmdHBsYWNlICE9IHBsYWNlKSB7DQotICAgICAgICAgICAgaWYgKGxlZnRwbGFjZS5uU2VjSW5kZXggIT0gcGxhY2UublNlY0luZGV4KSB7DQotICAgICAgICAgICAgICAgIGlmIChwU2VjdGlvbi0+bV9Xb3JkQXJyYXkuR2V0U2l6ZSgpID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHRoaXMtPkNsZWFyRW1wdHlTZWN0aW9uKHBsYWNlKTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIHRoaXMtPkxpbmtMYXR0ZXJTZWN0aW9uKGxlZnRwbGFjZSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBwU2VjdGlvbi0+Q2xlYXJXb3JkKHBsYWNlKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gbGVmdHBsYWNlOw0KLSAgICB9DQotICAgIHJldHVybiBwbGFjZTsNCi19DQotQ1BWVF9Xb3JkUGxhY2UgQ1BERl9WYXJpYWJsZVRleHQ6OkNsZWFyUmlnaHRXb3JkKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpDQotew0KLSAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fU2VjdGlvbkFycmF5LkdldEF0KHBsYWNlLm5TZWNJbmRleCkpIHsNCi0gICAgICAgIENQVlRfV29yZFBsYWNlIHJpZ2h0cGxhY2UgPSBBanVzdExpbmVIZWFkZXIodGhpcy0+R2V0TmV4dFdvcmRQbGFjZShwbGFjZSksIEZBTFNFKTsNCi0gICAgICAgIGlmIChyaWdodHBsYWNlICE9IHBsYWNlKSB7DQotICAgICAgICAgICAgaWYocmlnaHRwbGFjZS5uU2VjSW5kZXggIT0gcGxhY2UublNlY0luZGV4KSB7DQotICAgICAgICAgICAgICAgIExpbmtMYXR0ZXJTZWN0aW9uKHBsYWNlKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBwU2VjdGlvbi0+Q2xlYXJXb3JkKHJpZ2h0cGxhY2UpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gcGxhY2U7DQotfQ0KLXZvaWQgQ1BERl9WYXJpYWJsZVRleHQ6OlJlYXJyYW5nZUFsbCgpDQotew0KLSAgICBSZWFycmFuZ2UoQ1BWVF9Xb3JkUmFuZ2UoR2V0QmVnaW5Xb3JkUGxhY2UoKSwgR2V0RW5kV29yZFBsYWNlKCkpKTsNCi19DQotdm9pZCBDUERGX1ZhcmlhYmxlVGV4dDo6UmVhcnJhbmdlUGFydChjb25zdCBDUFZUX1dvcmRSYW5nZSAmIFBsYWNlUmFuZ2UpDQotew0KLSAgICBSZWFycmFuZ2UoUGxhY2VSYW5nZSk7DQotfQ0KLUNQVlRfRmxvYXRSZWN0IENQREZfVmFyaWFibGVUZXh0OjpSZWFycmFuZ2UoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiBQbGFjZVJhbmdlKQ0KLXsNCi0gICAgQ1BWVF9GbG9hdFJlY3QgcmNSZXQ7DQotICAgIGlmIChJc1ZhbGlkKCkpIHsNCi0gICAgICAgIGlmIChtX2JBdXRvRm9udFNpemUpIHsNCi0gICAgICAgICAgICBTZXRGb250U2l6ZShHZXRBdXRvRm9udFNpemUoKSk7DQotICAgICAgICAgICAgcmNSZXQgPSBSZWFycmFuZ2VTZWN0aW9ucyhDUFZUX1dvcmRSYW5nZShHZXRCZWdpbldvcmRQbGFjZSgpLCBHZXRFbmRXb3JkUGxhY2UoKSkpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICByY1JldCA9IFJlYXJyYW5nZVNlY3Rpb25zKFBsYWNlUmFuZ2UpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIFNldENvbnRlbnRSZWN0KHJjUmV0KTsNCi0gICAgcmV0dXJuIHJjUmV0Ow0KLX0NCi1GWF9GTE9BVCBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0QXV0b0ZvbnRTaXplKCkNCi17DQotICAgIEZYX0lOVDMyIG5Ub3RhbCA9IHNpemVvZihnRm9udFNpemVTdGVwcykgLyBzaXplb2YoRlhfQllURSk7DQotICAgIGlmIChJc011bHRpTGluZSgpKSB7DQotICAgICAgICBuVG90YWwgLz0gNDsNCi0gICAgfQ0KLSAgICBpZiAoblRvdGFsIDw9IDApIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGlmIChHZXRQbGF0ZVdpZHRoKCkgPD0gMCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgRlhfSU5UMzIgbkxlZnQgPSAwOw0KLSAgICBGWF9JTlQzMiBuUmlnaHQgPSBuVG90YWwgLSAxOw0KLSAgICBGWF9JTlQzMiBuTWlkID0gblRvdGFsIC8gMjsNCi0gICAgd2hpbGUgKG5MZWZ0IDw9IG5SaWdodCkgew0KLSAgICAgICAgaWYgKElzQmlnZ2VyKGdGb250U2l6ZVN0ZXBzW25NaWRdKSkgew0KLSAgICAgICAgICAgIG5SaWdodCA9IG5NaWQgLSAxOw0KLSAgICAgICAgICAgIG5NaWQgPSAobkxlZnQgKyBuUmlnaHQpIC8gMjsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbkxlZnQgPSBuTWlkICsgMTsNCi0gICAgICAgICAgICBuTWlkID0gKG5MZWZ0ICsgblJpZ2h0KSAvIDI7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIChGWF9GTE9BVClnRm9udFNpemVTdGVwc1tuTWlkXTsNCi19DQotRlhfQk9PTAlDUERGX1ZhcmlhYmxlVGV4dDo6SXNCaWdnZXIoRlhfRkxPQVQgZkZvbnRTaXplKQ0KLXsNCi0gICAgRlhfQk9PTCBiQmlnZ2VyID0gIEZBTFNFOw0KLSAgICBDUFZUX1NpemUgc3pUb3RhbDsNCi0gICAgZm9yIChGWF9JTlQzMiBzID0gMCwgc3ogPSBtX1NlY3Rpb25BcnJheS5HZXRTaXplKCk7IHMgPCBzejsgcysrKSB7DQotICAgICAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fU2VjdGlvbkFycmF5LkdldEF0KHMpKSB7DQotICAgICAgICAgICAgQ1BWVF9TaXplIHNpemUgPSBwU2VjdGlvbi0+R2V0U2VjdGlvblNpemUoZkZvbnRTaXplKTsNCi0gICAgICAgICAgICBzelRvdGFsLnggPSBGUERGX01BWChzaXplLngsIHN6VG90YWwueCk7DQotICAgICAgICAgICAgc3pUb3RhbC55ICs9IHNpemUueTsNCi0gICAgICAgICAgICBpZiAoSXNGbG9hdEJpZ2dlcihzelRvdGFsLngsIEdldFBsYXRlV2lkdGgoKSkNCi0gICAgICAgICAgICAgICAgICAgIHx8IElzRmxvYXRCaWdnZXIoc3pUb3RhbC55LCBHZXRQbGF0ZUhlaWdodCgpKQ0KLSAgICAgICAgICAgICAgICkgew0KLSAgICAgICAgICAgICAgICBiQmlnZ2VyID0gVFJVRTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBiQmlnZ2VyOw0KLX0NCi1DUFZUX0Zsb2F0UmVjdCBDUERGX1ZhcmlhYmxlVGV4dDo6UmVhcnJhbmdlU2VjdGlvbnMoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiBQbGFjZVJhbmdlKQ0KLXsNCi0gICAgQ1BWVF9Xb3JkUGxhY2UgcGxhY2U7DQotICAgIEZYX0ZMT0FUIGZQb3NZID0gMDsNCi0gICAgRlhfRkxPQVQgZk9sZEhlaWdodDsNCi0gICAgRlhfSU5UMzIgblNTZWNJbmRleCA9IFBsYWNlUmFuZ2UuQmVnaW5Qb3MublNlY0luZGV4Ow0KLSAgICBGWF9JTlQzMiBuRVNlY0luZGV4ID0gUGxhY2VSYW5nZS5FbmRQb3MublNlY0luZGV4Ow0KLSAgICBDUFZUX0Zsb2F0UmVjdCByY1JldDsNCi0gICAgZm9yIChGWF9JTlQzMiBzID0gMCwgc3ogPSBtX1NlY3Rpb25BcnJheS5HZXRTaXplKCk7IHMgPCBzejsgcysrKSB7DQotICAgICAgICBwbGFjZS5uU2VjSW5kZXggPSBzOw0KLSAgICAgICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdChzKSkgew0KLSAgICAgICAgICAgIHBTZWN0aW9uLT5TZWNQbGFjZSA9IHBsYWNlOw0KLSAgICAgICAgICAgIENQVlRfRmxvYXRSZWN0IHJjU2VjID0gcFNlY3Rpb24tPm1fU2VjSW5mby5yY1NlY3Rpb247DQotICAgICAgICAgICAgaWYgKHMgPj0gblNTZWNJbmRleCkgew0KLSAgICAgICAgICAgICAgICBpZiAocyA8PSBuRVNlY0luZGV4KSB7DQotICAgICAgICAgICAgICAgICAgICByY1NlYyA9IHBTZWN0aW9uLT5SZWFycmFuZ2UoKTsNCi0gICAgICAgICAgICAgICAgICAgIHJjU2VjLnRvcCArPSBmUG9zWTsNCi0gICAgICAgICAgICAgICAgICAgIHJjU2VjLmJvdHRvbSArPSBmUG9zWTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIGZPbGRIZWlnaHQgPSBwU2VjdGlvbi0+bV9TZWNJbmZvLnJjU2VjdGlvbi5ib3R0b20gLSBwU2VjdGlvbi0+bV9TZWNJbmZvLnJjU2VjdGlvbi50b3A7DQotICAgICAgICAgICAgICAgICAgICByY1NlYy50b3AgPSBmUG9zWTsNCi0gICAgICAgICAgICAgICAgICAgIHJjU2VjLmJvdHRvbSA9IGZQb3NZICsgZk9sZEhlaWdodDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBwU2VjdGlvbi0+bV9TZWNJbmZvLnJjU2VjdGlvbiA9IHJjU2VjOw0KLSAgICAgICAgICAgICAgICBwU2VjdGlvbi0+UmVzZXRMaW5lUGxhY2UoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKHMgPT0gMCkgew0KLSAgICAgICAgICAgICAgICByY1JldCA9IHJjU2VjOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHJjUmV0LmxlZnQgPSBGUERGX01JTihyY1NlYy5sZWZ0LCByY1JldC5sZWZ0KTsNCi0gICAgICAgICAgICAgICAgcmNSZXQudG9wID0gRlBERl9NSU4ocmNTZWMudG9wLCByY1JldC50b3ApOw0KLSAgICAgICAgICAgICAgICByY1JldC5yaWdodCA9IEZQREZfTUFYKHJjU2VjLnJpZ2h0LCByY1JldC5yaWdodCk7DQotICAgICAgICAgICAgICAgIHJjUmV0LmJvdHRvbSA9IEZQREZfTUFYKHJjU2VjLmJvdHRvbSwgcmNSZXQuYm90dG9tKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZlBvc1kgKz0gcmNTZWMuSGVpZ2h0KCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIHJjUmV0Ow0KLX0NCi1GWF9JTlQzMiBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0Q2hhcldpZHRoKEZYX0lOVDMyIG5Gb250SW5kZXgsIEZYX1dPUkQgV29yZCwgRlhfV09SRCBTdWJXb3JkLCBGWF9JTlQzMiBuV29yZFN0eWxlKQ0KLXsNCi0gICAgaWYgKG1fcFZUUHJvdmlkZXIpIHsNCi0gICAgICAgIGlmIChTdWJXb3JkID4gMCkgew0KLSAgICAgICAgICAgIHJldHVybiBtX3BWVFByb3ZpZGVyLT5HZXRDaGFyV2lkdGgobkZvbnRJbmRleCwgU3ViV29yZCwgbldvcmRTdHlsZSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHJldHVybiBtX3BWVFByb3ZpZGVyLT5HZXRDaGFyV2lkdGgobkZvbnRJbmRleCwgV29yZCwgbldvcmRTdHlsZSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIDA7DQotfQ0KLUZYX0lOVDMyIENQREZfVmFyaWFibGVUZXh0OjpHZXRUeXBlQXNjZW50KEZYX0lOVDMyIG5Gb250SW5kZXgpDQotew0KLSAgICByZXR1cm4gbV9wVlRQcm92aWRlciA/IG1fcFZUUHJvdmlkZXItPkdldFR5cGVBc2NlbnQobkZvbnRJbmRleCkgOiAwOw0KLX0NCi1GWF9JTlQzMiBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0VHlwZURlc2NlbnQoRlhfSU5UMzIgbkZvbnRJbmRleCkNCi17DQotICAgIHJldHVybiBtX3BWVFByb3ZpZGVyID8gbV9wVlRQcm92aWRlci0+R2V0VHlwZURlc2NlbnQobkZvbnRJbmRleCkgOiAwOw0KLX0NCi1GWF9JTlQzMiBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0V29yZEZvbnRJbmRleChGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIGNoYXJzZXQsIEZYX0lOVDMyIG5Gb250SW5kZXgpDQotew0KLSAgICByZXR1cm4gbV9wVlRQcm92aWRlciA/IG1fcFZUUHJvdmlkZXItPkdldFdvcmRGb250SW5kZXgod29yZCwgY2hhcnNldCwgbkZvbnRJbmRleCkgOiAtMTsNCi19DQotRlhfSU5UMzIgQ1BERl9WYXJpYWJsZVRleHQ6OkdldERlZmF1bHRGb250SW5kZXgoKQ0KLXsNCi0gICAgcmV0dXJuIG1fcFZUUHJvdmlkZXIgPyBtX3BWVFByb3ZpZGVyLT5HZXREZWZhdWx0Rm9udEluZGV4KCkgOiAtMTsNCi19DQotRlhfQk9PTAlDUERGX1ZhcmlhYmxlVGV4dDo6SXNMYXRpbldvcmQoRlhfV09SRCB3b3JkKQ0KLXsNCi0gICAgcmV0dXJuIG1fcFZUUHJvdmlkZXIgPyBtX3BWVFByb3ZpZGVyLT5Jc0xhdGluV29yZCh3b3JkKSA6IEZBTFNFOw0KLX0NCi1JUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvciAqIENQREZfVmFyaWFibGVUZXh0OjpHZXRJdGVyYXRvcigpDQotew0KLSAgICBpZiAoIW1fcFZUSXRlcmF0b3IpIHsNCi0gICAgICAgIHJldHVybiBtX3BWVEl0ZXJhdG9yID0gRlhfTkVXIENQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yKHRoaXMpOw0KLSAgICB9DQotICAgIHJldHVybiBtX3BWVEl0ZXJhdG9yOw0KLX0NCi1JUERGX1ZhcmlhYmxlVGV4dF9Qcm92aWRlcioJQ1BERl9WYXJpYWJsZVRleHQ6OlNldFByb3ZpZGVyKElQREZfVmFyaWFibGVUZXh0X1Byb3ZpZGVyICogcFByb3ZpZGVyKQ0KLXsNCi0gICAgSVBERl9WYXJpYWJsZVRleHRfUHJvdmlkZXIqIHBPbGQgPSBtX3BWVFByb3ZpZGVyOw0KLSAgICBtX3BWVFByb3ZpZGVyID0gcFByb3ZpZGVyOw0KLSAgICByZXR1cm4gcE9sZDsNCi19DQotQ1BERl9WYXJpYWJsZVRleHRfSXRlcmF0b3I6OkNQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yKENQREZfVmFyaWFibGVUZXh0ICogcFZUKToNCi0gICAgbV9wVlQocFZUKSwNCi0gICAgbV9DdXJQb3MoLTEsIC0xLCAtMSkNCi17DQotfQ0KLUNQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yOjp+Q1BERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IoKQ0KLXsNCi19DQotdm9pZCBDUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvcjo6U2V0QXQoRlhfSU5UMzIgbldvcmRJbmRleCkNCi17DQotICAgIEFTU0VSVChtX3BWVCAhPSBOVUxMKTsNCi0gICAgbV9DdXJQb3MgPSBtX3BWVC0+V29yZEluZGV4VG9Xb3JkUGxhY2UobldvcmRJbmRleCk7DQotfQ0KLXZvaWQgQ1BERl9WYXJpYWJsZVRleHRfSXRlcmF0b3I6OlNldEF0KGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpDQotew0KLSAgICBBU1NFUlQobV9wVlQgIT0gTlVMTCk7DQotICAgIG1fQ3VyUG9zID0gcGxhY2U7DQotfQ0KLUZYX0JPT0wJQ1BERl9WYXJpYWJsZVRleHRfSXRlcmF0b3I6Ok5leHRXb3JkKCkNCi17DQotICAgIEFTU0VSVChtX3BWVCAhPSBOVUxMKTsNCi0gICAgaWYgKG1fQ3VyUG9zID09IG1fcFZULT5HZXRFbmRXb3JkUGxhY2UoKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fQ3VyUG9zID0gbV9wVlQtPkdldE5leHRXb3JkUGxhY2UobV9DdXJQb3MpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTAlDUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvcjo6UHJldldvcmQoKQ0KLXsNCi0gICAgQVNTRVJUKG1fcFZUICE9IE5VTEwpOw0KLSAgICBpZiAobV9DdXJQb3MgPT0gbV9wVlQtPkdldEJlZ2luV29yZFBsYWNlKCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBtX0N1clBvcyA9IG1fcFZULT5HZXRQcmV2V29yZFBsYWNlKG1fQ3VyUG9zKTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wJQ1BERl9WYXJpYWJsZVRleHRfSXRlcmF0b3I6Ok5leHRMaW5lKCkNCi17DQotICAgIEFTU0VSVChtX3BWVCAhPSBOVUxMKTsNCi0gICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX3BWVC0+bV9TZWN0aW9uQXJyYXkuR2V0QXQobV9DdXJQb3MublNlY0luZGV4KSkgew0KLSAgICAgICAgaWYgKG1fQ3VyUG9zLm5MaW5lSW5kZXggPCBwU2VjdGlvbi0+bV9MaW5lQXJyYXkuR2V0U2l6ZSgpIC0gMSkgew0KLSAgICAgICAgICAgIG1fQ3VyUG9zID0gQ1BWVF9Xb3JkUGxhY2UobV9DdXJQb3MublNlY0luZGV4LCBtX0N1clBvcy5uTGluZUluZGV4ICsgMSwgLTEpOw0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAobV9DdXJQb3MublNlY0luZGV4IDwgbV9wVlQtPm1fU2VjdGlvbkFycmF5LkdldFNpemUoKSAtIDEpIHsNCi0gICAgICAgICAgICAgICAgbV9DdXJQb3MgPSBDUFZUX1dvcmRQbGFjZShtX0N1clBvcy5uU2VjSW5kZXggKyAxLCAwLCAtMSk7DQotICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUZYX0JPT0wJQ1BERl9WYXJpYWJsZVRleHRfSXRlcmF0b3I6OlByZXZMaW5lKCkNCi17DQotICAgIEFTU0VSVChtX3BWVCAhPSBOVUxMKTsNCi0gICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX3BWVC0+bV9TZWN0aW9uQXJyYXkuR2V0QXQobV9DdXJQb3MublNlY0luZGV4KSkgew0KLSAgICAgICAgaWYgKG1fQ3VyUG9zLm5MaW5lSW5kZXggPiAwKSB7DQotICAgICAgICAgICAgbV9DdXJQb3MgPSBDUFZUX1dvcmRQbGFjZShtX0N1clBvcy5uU2VjSW5kZXgsIG1fQ3VyUG9zLm5MaW5lSW5kZXggLSAxLCAtMSk7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlmIChtX0N1clBvcy5uU2VjSW5kZXggPiAwKSB7DQotICAgICAgICAgICAgICAgIGlmIChDU2VjdGlvbiAqIHBMYXN0U2VjdGlvbiA9IG1fcFZULT5tX1NlY3Rpb25BcnJheS5HZXRBdChtX0N1clBvcy5uU2VjSW5kZXggLSAxKSkgew0KLSAgICAgICAgICAgICAgICAgICAgbV9DdXJQb3MgPSBDUFZUX1dvcmRQbGFjZShtX0N1clBvcy5uU2VjSW5kZXggLSAxLCBwTGFzdFNlY3Rpb24tPm1fTGluZUFycmF5LkdldFNpemUoKSAtIDEsIC0xKTsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotRlhfQk9PTAlDUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvcjo6TmV4dFNlY3Rpb24oKQ0KLXsNCi0gICAgQVNTRVJUKG1fcFZUICE9IE5VTEwpOw0KLSAgICBpZiAobV9DdXJQb3MublNlY0luZGV4IDwgbV9wVlQtPm1fU2VjdGlvbkFycmF5LkdldFNpemUoKSAtIDEpIHsNCi0gICAgICAgIG1fQ3VyUG9zID0gQ1BWVF9Xb3JkUGxhY2UobV9DdXJQb3MublNlY0luZGV4ICsgMSwgMCwgLTEpOw0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1GWF9CT09MCUNQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yOjpQcmV2U2VjdGlvbigpDQotew0KLSAgICBBU1NFUlQobV9wVlQgIT0gTlVMTCk7DQotICAgIGlmIChtX0N1clBvcy5uU2VjSW5kZXggPiAwKSB7DQotICAgICAgICBtX0N1clBvcyA9IENQVlRfV29yZFBsYWNlKG1fQ3VyUG9zLm5TZWNJbmRleCAtIDEsIDAsIC0xKTsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotRlhfQk9PTAlDUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvcjo6R2V0V29yZChDUFZUX1dvcmQgJiB3b3JkKSBjb25zdA0KLXsNCi0gICAgQVNTRVJUKG1fcFZUICE9IE5VTEwpOw0KLSAgICB3b3JkLldvcmRQbGFjZSA9IG1fQ3VyUG9zOw0KLSAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fcFZULT5tX1NlY3Rpb25BcnJheS5HZXRBdChtX0N1clBvcy5uU2VjSW5kZXgpKSB7DQotICAgICAgICBpZiAoQ0xpbmUgKiBwTGluZSA9IHBTZWN0aW9uLT5tX0xpbmVBcnJheS5HZXRBdChtX0N1clBvcy5uTGluZUluZGV4KSkgew0KLSAgICAgICAgICAgIGlmIChDUFZUX1dvcmRJbmZvICogcFdvcmQgPSBwU2VjdGlvbi0+bV9Xb3JkQXJyYXkuR2V0QXQobV9DdXJQb3MubldvcmRJbmRleCkpIHsNCi0gICAgICAgICAgICAgICAgd29yZC5Xb3JkID0gcFdvcmQtPldvcmQ7DQotICAgICAgICAgICAgICAgIHdvcmQubkNoYXJzZXQgPSBwV29yZC0+bkNoYXJzZXQ7DQotICAgICAgICAgICAgICAgIHdvcmQuZldpZHRoID0gbV9wVlQtPkdldFdvcmRXaWR0aCgqcFdvcmQpOw0KLSAgICAgICAgICAgICAgICB3b3JkLnB0V29yZCA9IG1fcFZULT5JblRvT3V0KA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX1BvaW50KHBXb3JkLT5mV29yZFggKyBwU2VjdGlvbi0+bV9TZWNJbmZvLnJjU2VjdGlvbi5sZWZ0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBXb3JkLT5mV29yZFkgKyBwU2VjdGlvbi0+bV9TZWNJbmZvLnJjU2VjdGlvbi50b3ApICk7DQotICAgICAgICAgICAgICAgIHdvcmQuZkFzY2VudCA9IG1fcFZULT5HZXRXb3JkQXNjZW50KCpwV29yZCk7DQotICAgICAgICAgICAgICAgIHdvcmQuZkRlc2NlbnQgPSBtX3BWVC0+R2V0V29yZERlc2NlbnQoKnBXb3JkKTsNCi0gICAgICAgICAgICAgICAgaWYgKHBXb3JkLT5wV29yZFByb3BzKSB7DQotICAgICAgICAgICAgICAgICAgICB3b3JkLldvcmRQcm9wcyA9ICpwV29yZC0+cFdvcmRQcm9wczsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB3b3JkLm5Gb250SW5kZXggPSBtX3BWVC0+R2V0V29yZEZvbnRJbmRleCgqcFdvcmQpOw0KLSAgICAgICAgICAgICAgICB3b3JkLmZGb250U2l6ZSA9IG1fcFZULT5HZXRXb3JkRm9udFNpemUoKnBXb3JkKTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotRlhfQk9PTAlDUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvcjo6U2V0V29yZChjb25zdCBDUFZUX1dvcmQgJiB3b3JkKQ0KLXsNCi0gICAgQVNTRVJUKG1fcFZUICE9IE5VTEwpOw0KLSAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fcFZULT5tX1NlY3Rpb25BcnJheS5HZXRBdChtX0N1clBvcy5uU2VjSW5kZXgpKSB7DQotICAgICAgICBpZiAoQ1BWVF9Xb3JkSW5mbyAqIHBXb3JkID0gcFNlY3Rpb24tPm1fV29yZEFycmF5LkdldEF0KG1fQ3VyUG9zLm5Xb3JkSW5kZXgpKSB7DQotICAgICAgICAgICAgaWYgKHBXb3JkLT5wV29yZFByb3BzKSB7DQotICAgICAgICAgICAgICAgICpwV29yZC0+cFdvcmRQcm9wcyA9IHdvcmQuV29yZFByb3BzOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUZYX0JPT0wJQ1BERl9WYXJpYWJsZVRleHRfSXRlcmF0b3I6OkdldExpbmUoQ1BWVF9MaW5lICYgbGluZSkgY29uc3QNCi17DQotICAgIEFTU0VSVChtX3BWVCAhPSBOVUxMKTsNCi0gICAgbGluZS5saW5lcGxhY2UgPSBDUFZUX1dvcmRQbGFjZShtX0N1clBvcy5uU2VjSW5kZXgsIG1fQ3VyUG9zLm5MaW5lSW5kZXgsIC0xKTsNCi0gICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX3BWVC0+bV9TZWN0aW9uQXJyYXkuR2V0QXQobV9DdXJQb3MublNlY0luZGV4KSkgew0KLSAgICAgICAgaWYgKENMaW5lICogcExpbmUgPSBwU2VjdGlvbi0+bV9MaW5lQXJyYXkuR2V0QXQobV9DdXJQb3MubkxpbmVJbmRleCkpIHsNCi0gICAgICAgICAgICBsaW5lLnB0TGluZSA9IG1fcFZULT5JblRvT3V0KA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQREZfUG9pbnQocExpbmUtPm1fTGluZUluZm8uZkxpbmVYICsgcFNlY3Rpb24tPm1fU2VjSW5mby5yY1NlY3Rpb24ubGVmdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lLT5tX0xpbmVJbmZvLmZMaW5lWSArIHBTZWN0aW9uLT5tX1NlY0luZm8ucmNTZWN0aW9uLnRvcCkgKTsNCi0gICAgICAgICAgICBsaW5lLmZMaW5lV2lkdGggPSBwTGluZS0+bV9MaW5lSW5mby5mTGluZVdpZHRoOw0KLSAgICAgICAgICAgIGxpbmUuZkxpbmVBc2NlbnQgPSBwTGluZS0+bV9MaW5lSW5mby5mTGluZUFzY2VudDsNCi0gICAgICAgICAgICBsaW5lLmZMaW5lRGVzY2VudCA9IHBMaW5lLT5tX0xpbmVJbmZvLmZMaW5lRGVzY2VudDsNCi0gICAgICAgICAgICBsaW5lLmxpbmVFbmQgPSBwTGluZS0+R2V0RW5kV29yZFBsYWNlKCk7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1GWF9CT09MCUNQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yOjpHZXRTZWN0aW9uKENQVlRfU2VjdGlvbiAmIHNlY3Rpb24pIGNvbnN0DQotew0KLSAgICBBU1NFUlQobV9wVlQgIT0gTlVMTCk7DQotICAgIHNlY3Rpb24uc2VjcGxhY2UgPSBDUFZUX1dvcmRQbGFjZShtX0N1clBvcy5uU2VjSW5kZXgsIDAsIC0xKTsNCi0gICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX3BWVC0+bV9TZWN0aW9uQXJyYXkuR2V0QXQobV9DdXJQb3MublNlY0luZGV4KSkgew0KLSAgICAgICAgc2VjdGlvbi5yY1NlY3Rpb24gPSBtX3BWVC0+SW5Ub091dChwU2VjdGlvbi0+bV9TZWNJbmZvLnJjU2VjdGlvbik7DQotICAgICAgICBpZiAocFNlY3Rpb24tPm1fU2VjSW5mby5wU2VjUHJvcHMpIHsNCi0gICAgICAgICAgICBzZWN0aW9uLlNlY1Byb3BzID0gKnBTZWN0aW9uLT5tX1NlY0luZm8ucFNlY1Byb3BzOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBTZWN0aW9uLT5tX1NlY0luZm8ucFdvcmRQcm9wcykgew0KLSAgICAgICAgICAgIHNlY3Rpb24uV29yZFByb3BzID0gKnBTZWN0aW9uLT5tX1NlY0luZm8ucFdvcmRQcm9wczsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotRlhfQk9PTAlDUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvcjo6U2V0U2VjdGlvbihjb25zdCBDUFZUX1NlY3Rpb24gJiBzZWN0aW9uKQ0KLXsNCi0gICAgQVNTRVJUKG1fcFZUICE9IE5VTEwpOw0KLSAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fcFZULT5tX1NlY3Rpb25BcnJheS5HZXRBdChtX0N1clBvcy5uU2VjSW5kZXgpKSB7DQotICAgICAgICBpZiAocFNlY3Rpb24tPm1fU2VjSW5mby5wU2VjUHJvcHMpIHsNCi0gICAgICAgICAgICAqcFNlY3Rpb24tPm1fU2VjSW5mby5wU2VjUHJvcHMgPSBzZWN0aW9uLlNlY1Byb3BzOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBTZWN0aW9uLT5tX1NlY0luZm8ucFdvcmRQcm9wcykgew0KLSAgICAgICAgICAgICpwU2VjdGlvbi0+bV9TZWNJbmZvLnBXb3JkUHJvcHMgPSBzZWN0aW9uLldvcmRQcm9wczsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmRvYy9mcGRmX2RvYy5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmRvYy9mcGRmX3Z0LmgiCisjaW5jbHVkZSAicGRmX3Z0LmgiCitjb25zdCBGWF9CWVRFIGdGb250U2l6ZVN0ZXBzW10gPSB7CTQsIDYsIDgsIDksIDEwLAkxMiwgMTQsIDE4LCAyMCwgMjUsCTMwLCAzNSwgNDAsIDQ1LCA1MCwJNTUsIDYwLCA3MCwgODAsIDkwLAkxMDAsIDExMCwgMTIwLCAxMzAsIDE0NH07CisjZGVmaW5lIFBWVF9SRVRVUk5fTEVOR1RICQkJCQkxCisjZGVmaW5lIFBWVF9ERUZBVUxUX0ZPTlRTSVpFCQkJCTE4LjBmCisjZGVmaW5lIFBWVFdPUkRfU0NSSVBUX05PUk1BTAkJCQkwCisjZGVmaW5lIFBWVFdPUkRfU0NSSVBUX1NVUEVSCQkJCTEKKyNkZWZpbmUgUFZUV09SRF9TQ1JJUFRfU1VCCQkJCQkyCisjZGVmaW5lCVBWVF9GT05UU0NBTEUJCQkJCQkwLjAwMWYKKyNkZWZpbmUgUFZUX1BFUkNFTlQJCQkJCQkJMC4wMWYKKyNkZWZpbmUgUFZUX0hBTEYJCQkJCQkJMC41ZgorQ0xpbmU6OkNMaW5lKCkKK3sKK30KK0NMaW5lOjp+Q0xpbmUoKQoreworfQorQ1BWVF9Xb3JkUGxhY2UgQ0xpbmU6OkdldEJlZ2luV29yZFBsYWNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ1BWVF9Xb3JkUGxhY2UoTGluZVBsYWNlLm5TZWNJbmRleCwgTGluZVBsYWNlLm5MaW5lSW5kZXgsIC0xKTsKK30KK0NQVlRfV29yZFBsYWNlIENMaW5lOjpHZXRFbmRXb3JkUGxhY2UoKSBjb25zdAoreworICAgIHJldHVybiBDUFZUX1dvcmRQbGFjZShMaW5lUGxhY2UublNlY0luZGV4LCBMaW5lUGxhY2UubkxpbmVJbmRleCwgbV9MaW5lSW5mby5uRW5kV29yZEluZGV4KTsKK30KK0NQVlRfV29yZFBsYWNlIENMaW5lOjpHZXRQcmV2V29yZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0Cit7CisgICAgaWYgKHBsYWNlLm5Xb3JkSW5kZXggPiBtX0xpbmVJbmZvLm5FbmRXb3JkSW5kZXgpIHsKKyAgICAgICAgcmV0dXJuIENQVlRfV29yZFBsYWNlKHBsYWNlLm5TZWNJbmRleCwgcGxhY2UubkxpbmVJbmRleCwgbV9MaW5lSW5mby5uRW5kV29yZEluZGV4KTsKKyAgICB9CisgICAgcmV0dXJuIENQVlRfV29yZFBsYWNlKHBsYWNlLm5TZWNJbmRleCwgcGxhY2UubkxpbmVJbmRleCwgcGxhY2UubldvcmRJbmRleCAtIDEpOworfQorQ1BWVF9Xb3JkUGxhY2UgQ0xpbmU6OkdldE5leHRXb3JkUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3QKK3sKKyAgICBpZiAocGxhY2UubldvcmRJbmRleCA8IG1fTGluZUluZm8ubkJlZ2luV29yZEluZGV4KSB7CisgICAgICAgIHJldHVybiBDUFZUX1dvcmRQbGFjZShwbGFjZS5uU2VjSW5kZXgsIHBsYWNlLm5MaW5lSW5kZXgsIG1fTGluZUluZm8ubkJlZ2luV29yZEluZGV4KTsKKyAgICB9CisgICAgcmV0dXJuIENQVlRfV29yZFBsYWNlKHBsYWNlLm5TZWNJbmRleCwgcGxhY2UubkxpbmVJbmRleCwgcGxhY2UubldvcmRJbmRleCArIDEpOworfQorQ1NlY3Rpb246OkNTZWN0aW9uKENQREZfVmFyaWFibGVUZXh0ICogcFZUKSA6IG1fcFZUKHBWVCkKK3sKK30KK0NTZWN0aW9uOjp+Q1NlY3Rpb24oKQoreworICAgIFJlc2V0QWxsKCk7Cit9Cit2b2lkIENTZWN0aW9uOjpSZXNldEFsbCgpCit7CisgICAgUmVzZXRXb3JkQXJyYXkoKTsKKyAgICBSZXNldExpbmVBcnJheSgpOworfQordm9pZCBDU2VjdGlvbjo6UmVzZXRMaW5lQXJyYXkoKQoreworICAgIG1fTGluZUFycmF5LlJlbW92ZUFsbCgpOworfQordm9pZCBDU2VjdGlvbjo6UmVzZXRXb3JkQXJyYXkoKQoreworICAgIGZvciAoRlhfSU5UMzIgaSA9IDAsIHN6ID0gbV9Xb3JkQXJyYXkuR2V0U2l6ZSgpOyBpIDwgc3o7IGkrKykgeworICAgICAgICBkZWxldGUgbV9Xb3JkQXJyYXkuR2V0QXQoaSk7CisgICAgfQorICAgIG1fV29yZEFycmF5LlJlbW92ZUFsbCgpOworfQordm9pZCBDU2VjdGlvbjo6UmVzZXRMaW5lUGxhY2UoKQoreworICAgIGZvciAoRlhfSU5UMzIgaSA9IDAsIHN6ID0gbV9MaW5lQXJyYXkuR2V0U2l6ZSgpOyBpIDwgc3o7IGkrKykgeworICAgICAgICBpZiAoQ0xpbmUgKiBwTGluZSA9IG1fTGluZUFycmF5LkdldEF0KGkpKSB7CisgICAgICAgICAgICBwTGluZS0+TGluZVBsYWNlID0gQ1BWVF9Xb3JkUGxhY2UoU2VjUGxhY2UublNlY0luZGV4LCBpLCAtMSk7CisgICAgICAgIH0KKyAgICB9Cit9CitDUFZUX1dvcmRQbGFjZSBDU2VjdGlvbjo6QWRkV29yZChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRJbmZvICYgd29yZGluZm8pCit7CisgICAgaWYgKENQVlRfV29yZEluZm8gKiBwV29yZCA9IEZYX05FVyBDUFZUX1dvcmRJbmZvKHdvcmRpbmZvKSkgeworICAgICAgICBGWF9JTlQzMiBuV29yZEluZGV4ID0gRlBERl9NQVgoRlBERl9NSU4ocGxhY2UubldvcmRJbmRleCwgdGhpcy0+bV9Xb3JkQXJyYXkuR2V0U2l6ZSgpKSwgMCk7CisgICAgICAgIGlmIChuV29yZEluZGV4ID09IG1fV29yZEFycmF5LkdldFNpemUoKSkgeworICAgICAgICAgICAgbV9Xb3JkQXJyYXkuQWRkKHBXb3JkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fV29yZEFycmF5Lkluc2VydEF0KG5Xb3JkSW5kZXgsIHBXb3JkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcGxhY2U7Cit9CitDUFZUX1dvcmRQbGFjZSBDU2VjdGlvbjo6QWRkTGluZShjb25zdCBDUFZUX0xpbmVJbmZvICYgbGluZWluZm8pCit7CisgICAgcmV0dXJuIENQVlRfV29yZFBsYWNlKFNlY1BsYWNlLm5TZWNJbmRleCwgbV9MaW5lQXJyYXkuQWRkKGxpbmVpbmZvKSwgLTEpOworfQorQ1BWVF9GbG9hdFJlY3QgQ1NlY3Rpb246OlJlYXJyYW5nZSgpCit7CisgICAgQVNTRVJUKG1fcFZUICE9IE5VTEwpOworICAgIGlmIChtX3BWVC0+bV9uQ2hhckFycmF5ID4gMCkgeworICAgICAgICByZXR1cm4gQ1R5cGVzZXQodGhpcykuQ2hhckFycmF5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIENUeXBlc2V0KHRoaXMpLlR5cGVzZXQoKTsKKyAgICB9Cit9CitDUFZUX1NpemUgQ1NlY3Rpb246OkdldFNlY3Rpb25TaXplKEZYX0ZMT0FUIGZGb250U2l6ZSkKK3sKKyAgICByZXR1cm4gQ1R5cGVzZXQodGhpcykuR2V0RWRpdFNpemUoZkZvbnRTaXplKTsKK30KK0NQVlRfV29yZFBsYWNlIENTZWN0aW9uOjpHZXRCZWdpbldvcmRQbGFjZSgpIGNvbnN0Cit7CisgICAgaWYgKENMaW5lICogcExpbmUgPSBtX0xpbmVBcnJheS5HZXRBdCgwKSkgeworICAgICAgICByZXR1cm4gcExpbmUtPkdldEJlZ2luV29yZFBsYWNlKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIFNlY1BsYWNlOworICAgIH0KK30KK0NQVlRfV29yZFBsYWNlIENTZWN0aW9uOjpHZXRFbmRXb3JkUGxhY2UoKSBjb25zdAoreworICAgIGlmIChDTGluZSAqIHBMaW5lID0gbV9MaW5lQXJyYXkuR2V0QXQobV9MaW5lQXJyYXkuR2V0U2l6ZSgpIC0gMSkpIHsKKyAgICAgICAgcmV0dXJuIHBMaW5lLT5HZXRFbmRXb3JkUGxhY2UoKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gdGhpcy0+U2VjUGxhY2U7CisgICAgfQorfQorQ1BWVF9Xb3JkUGxhY2UgQ1NlY3Rpb246OkdldFByZXZXb3JkUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3QKK3sKKyAgICBpZiAocGxhY2UubkxpbmVJbmRleCA8IDApIHsKKyAgICAgICAgcmV0dXJuIEdldEJlZ2luV29yZFBsYWNlKCk7CisgICAgfQorICAgIGlmIChwbGFjZS5uTGluZUluZGV4ID49IG1fTGluZUFycmF5LkdldFNpemUoKSkgeworICAgICAgICByZXR1cm4gR2V0RW5kV29yZFBsYWNlKCk7CisgICAgfQorICAgIGlmIChDTGluZSAqIHBMaW5lID0gbV9MaW5lQXJyYXkuR2V0QXQocGxhY2UubkxpbmVJbmRleCkpIHsKKyAgICAgICAgaWYgKHBsYWNlLm5Xb3JkSW5kZXggPT0gcExpbmUtPm1fTGluZUluZm8ubkJlZ2luV29yZEluZGV4KSB7CisgICAgICAgICAgICByZXR1cm4gQ1BWVF9Xb3JkUGxhY2UocGxhY2UublNlY0luZGV4LCBwbGFjZS5uTGluZUluZGV4LCAtMSk7CisgICAgICAgIH0gZWxzZSBpZiAocGxhY2UubldvcmRJbmRleCA8IHBMaW5lLT5tX0xpbmVJbmZvLm5CZWdpbldvcmRJbmRleCkgeworICAgICAgICAgICAgaWYgKENMaW5lICogcFByZXZMaW5lID0gbV9MaW5lQXJyYXkuR2V0QXQocGxhY2UubkxpbmVJbmRleCAtIDEpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBQcmV2TGluZS0+R2V0RW5kV29yZFBsYWNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gcExpbmUtPkdldFByZXZXb3JkUGxhY2UocGxhY2UpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwbGFjZTsKK30KK0NQVlRfV29yZFBsYWNlIENTZWN0aW9uOjpHZXROZXh0V29yZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0Cit7CisgICAgaWYgKHBsYWNlLm5MaW5lSW5kZXggPCAwKSB7CisgICAgICAgIHJldHVybiBHZXRCZWdpbldvcmRQbGFjZSgpOworICAgIH0KKyAgICBpZiAocGxhY2UubkxpbmVJbmRleCA+PSBtX0xpbmVBcnJheS5HZXRTaXplKCkpIHsKKyAgICAgICAgcmV0dXJuIEdldEVuZFdvcmRQbGFjZSgpOworICAgIH0KKyAgICBpZiAoQ0xpbmUgKiBwTGluZSA9IG1fTGluZUFycmF5LkdldEF0KHBsYWNlLm5MaW5lSW5kZXgpKSB7CisgICAgICAgIGlmIChwbGFjZS5uV29yZEluZGV4ID49IHBMaW5lLT5tX0xpbmVJbmZvLm5FbmRXb3JkSW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChDTGluZSAqIHBOZXh0TGluZSA9IG1fTGluZUFycmF5LkdldEF0KHBsYWNlLm5MaW5lSW5kZXggKyAxKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBwTmV4dExpbmUtPkdldEJlZ2luV29yZFBsYWNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gcExpbmUtPkdldE5leHRXb3JkUGxhY2UocGxhY2UpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwbGFjZTsKK30KK3ZvaWQgQ1NlY3Rpb246OlVwZGF0ZVdvcmRQbGFjZShDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdAoreworICAgIEZYX0lOVDMyIG5MZWZ0ID0gMDsKKyAgICBGWF9JTlQzMiBuUmlnaHQgPSBtX0xpbmVBcnJheS5HZXRTaXplKCkgLSAxOworICAgIEZYX0lOVDMyIG5NaWQgPSAobkxlZnQgKyBuUmlnaHQpIC8gMjsKKyAgICB3aGlsZSAobkxlZnQgPD0gblJpZ2h0KSB7CisgICAgICAgIGlmIChDTGluZSAqIHBMaW5lID0gbV9MaW5lQXJyYXkuR2V0QXQobk1pZCkpIHsKKyAgICAgICAgICAgIGlmIChwbGFjZS5uV29yZEluZGV4IDwgcExpbmUtPm1fTGluZUluZm8ubkJlZ2luV29yZEluZGV4KSB7CisgICAgICAgICAgICAgICAgblJpZ2h0ID0gbk1pZCAtIDE7CisgICAgICAgICAgICAgICAgbk1pZCA9IChuTGVmdCArIG5SaWdodCkgLyAyOworICAgICAgICAgICAgfSBlbHNlIGlmIChwbGFjZS5uV29yZEluZGV4ID4gcExpbmUtPm1fTGluZUluZm8ubkVuZFdvcmRJbmRleCkgeworICAgICAgICAgICAgICAgIG5MZWZ0ID0gbk1pZCArIDE7CisgICAgICAgICAgICAgICAgbk1pZCA9IChuTGVmdCArIG5SaWdodCkgLyAyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwbGFjZS5uTGluZUluZGV4ID0gbk1pZDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KK0NQVlRfV29yZFBsYWNlIENTZWN0aW9uOjpTZWFyY2hXb3JkUGxhY2UoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdAoreworICAgIEFTU0VSVChtX3BWVCAhPSBOVUxMKTsKKyAgICBDUFZUX1dvcmRQbGFjZSBwbGFjZSA9IEdldEJlZ2luV29yZFBsYWNlKCk7CisgICAgRlhfQk9PTCBiVXAgPSBUUlVFOworICAgIEZYX0JPT0wgYkRvd24gPSBUUlVFOworICAgIEZYX0lOVDMyIG5MZWZ0ID0gMDsKKyAgICBGWF9JTlQzMiBuUmlnaHQgPSBtX0xpbmVBcnJheS5HZXRTaXplKCkgLSAxOworICAgIEZYX0lOVDMyIG5NaWQgPSBtX0xpbmVBcnJheS5HZXRTaXplKCkgLyAyOworICAgIEZYX0ZMT0FUIGZUb3AgPSAwOworICAgIEZYX0ZMT0FUIGZCb3R0b20gPSAwOworICAgIHdoaWxlIChuTGVmdCA8PSBuUmlnaHQpIHsKKyAgICAgICAgaWYgKENMaW5lICogcExpbmUgPSBtX0xpbmVBcnJheS5HZXRBdChuTWlkKSkgeworICAgICAgICAgICAgZlRvcCA9IHBMaW5lLT5tX0xpbmVJbmZvLmZMaW5lWSAtIHBMaW5lLT5tX0xpbmVJbmZvLmZMaW5lQXNjZW50IC0gbV9wVlQtPkdldExpbmVMZWFkaW5nKG1fU2VjSW5mbyk7CisgICAgICAgICAgICBmQm90dG9tID0gcExpbmUtPm1fTGluZUluZm8uZkxpbmVZIC0gcExpbmUtPm1fTGluZUluZm8uZkxpbmVEZXNjZW50OworICAgICAgICAgICAgaWYgKElzRmxvYXRCaWdnZXIocG9pbnQueSwgZlRvcCkpIHsKKyAgICAgICAgICAgICAgICBiVXAgPSBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChJc0Zsb2F0U21hbGxlcihwb2ludC55LCBmQm90dG9tKSkgeworICAgICAgICAgICAgICAgIGJEb3duID0gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoSXNGbG9hdFNtYWxsZXIocG9pbnQueSwgZlRvcCkpIHsKKyAgICAgICAgICAgICAgICBuUmlnaHQgPSBuTWlkIC0gMTsKKyAgICAgICAgICAgICAgICBuTWlkID0gKG5MZWZ0ICsgblJpZ2h0KSAvIDI7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKElzRmxvYXRCaWdnZXIocG9pbnQueSwgZkJvdHRvbSkpIHsKKyAgICAgICAgICAgICAgICBuTGVmdCA9IG5NaWQgKyAxOworICAgICAgICAgICAgICAgIG5NaWQgPSAobkxlZnQgKyBuUmlnaHQpIC8gMjsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGxhY2UgPSBTZWFyY2hXb3JkUGxhY2UocG9pbnQueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFZUX1dvcmRSYW5nZShwTGluZS0+R2V0TmV4dFdvcmRQbGFjZShwTGluZS0+R2V0QmVnaW5Xb3JkUGxhY2UoKSksIHBMaW5lLT5HZXRFbmRXb3JkUGxhY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgcGxhY2UubkxpbmVJbmRleCA9IG5NaWQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBsYWNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChiVXApIHsKKyAgICAgICAgcGxhY2UgPSBHZXRCZWdpbldvcmRQbGFjZSgpOworICAgIH0KKyAgICBpZiAoYkRvd24pIHsKKyAgICAgICAgcGxhY2UgPSBHZXRFbmRXb3JkUGxhY2UoKTsKKyAgICB9CisgICAgcmV0dXJuIHBsYWNlOworfQorQ1BWVF9Xb3JkUGxhY2UgQ1NlY3Rpb246OlNlYXJjaFdvcmRQbGFjZShGWF9GTE9BVCBmeCwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBsaW5lcGxhY2UpIGNvbnN0Cit7CisgICAgaWYgKENMaW5lICogcExpbmUgPSBtX0xpbmVBcnJheS5HZXRBdChsaW5lcGxhY2UubkxpbmVJbmRleCkpIHsKKyAgICAgICAgcmV0dXJuIFNlYXJjaFdvcmRQbGFjZShmeCAtIG1fU2VjSW5mby5yY1NlY3Rpb24ubGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUFZUX1dvcmRSYW5nZShwTGluZS0+R2V0TmV4dFdvcmRQbGFjZShwTGluZS0+R2V0QmVnaW5Xb3JkUGxhY2UoKSksIHBMaW5lLT5HZXRFbmRXb3JkUGxhY2UoKSkpOworICAgIH0KKyAgICByZXR1cm4gR2V0QmVnaW5Xb3JkUGxhY2UoKTsKK30KK0NQVlRfV29yZFBsYWNlIENTZWN0aW9uOjpTZWFyY2hXb3JkUGxhY2UoRlhfRkxPQVQgZngsIGNvbnN0IENQVlRfV29yZFJhbmdlICYgcmFuZ2UpIGNvbnN0Cit7CisgICAgQ1BWVF9Xb3JkUGxhY2Ugd29yZHBsYWNlID0gcmFuZ2UuQmVnaW5Qb3M7CisgICAgd29yZHBsYWNlLm5Xb3JkSW5kZXggPSAtMTsKKyAgICBpZiAoIW1fcFZUKQl7CisgICAgICAgIHJldHVybiB3b3JkcGxhY2U7CisgICAgfQorICAgIEZYX0lOVDMyIG5MZWZ0ID0gcmFuZ2UuQmVnaW5Qb3MubldvcmRJbmRleDsKKyAgICBGWF9JTlQzMiBuUmlnaHQgPSByYW5nZS5FbmRQb3MubldvcmRJbmRleCArIDE7CisgICAgRlhfSU5UMzIgbk1pZCA9IChuTGVmdCArIG5SaWdodCkgLyAyOworICAgIHdoaWxlIChuTGVmdCA8IG5SaWdodCkgeworICAgICAgICBpZiAobk1pZCA9PSBuTGVmdCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5NaWQgPT0gblJpZ2h0KSB7CisgICAgICAgICAgICBuTWlkLS07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoQ1BWVF9Xb3JkSW5mbyAqIHBXb3JkID0gbV9Xb3JkQXJyYXkuR2V0QXQobk1pZCkpIHsKKyAgICAgICAgICAgIGlmIChmeCA+IHBXb3JkLT5mV29yZFggKyBtX3BWVC0+R2V0V29yZFdpZHRoKCpwV29yZCkgKiBQVlRfSEFMRikgeworICAgICAgICAgICAgICAgIG5MZWZ0ID0gbk1pZDsKKyAgICAgICAgICAgICAgICBuTWlkID0gKG5MZWZ0ICsgblJpZ2h0KSAvIDI7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG5SaWdodCA9IG5NaWQ7CisgICAgICAgICAgICAgICAgbk1pZCA9IChuTGVmdCArIG5SaWdodCkgLyAyOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKENQVlRfV29yZEluZm8gKiBwV29yZCA9IG1fV29yZEFycmF5LkdldEF0KG5NaWQpKSB7CisgICAgICAgIGlmIChmeCA+IHBXb3JkLT5mV29yZFggKyBtX3BWVC0+R2V0V29yZFdpZHRoKCpwV29yZCkgKiBQVlRfSEFMRikgeworICAgICAgICAgICAgd29yZHBsYWNlLm5Xb3JkSW5kZXggPSBuTWlkOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB3b3JkcGxhY2U7Cit9Cit2b2lkIENTZWN0aW9uOjpDbGVhckxlZnRXb3JkcyhGWF9JTlQzMiBuV29yZEluZGV4KQoreworICAgIGZvciAoRlhfSU5UMzIgaSA9IG5Xb3JkSW5kZXg7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIGRlbGV0ZSBtX1dvcmRBcnJheS5HZXRBdChpKTsKKyAgICAgICAgbV9Xb3JkQXJyYXkuUmVtb3ZlQXQoaSk7CisgICAgfQorfQordm9pZCBDU2VjdGlvbjo6Q2xlYXJSaWdodFdvcmRzKEZYX0lOVDMyIG5Xb3JkSW5kZXgpCit7CisgICAgZm9yIChGWF9JTlQzMiBpID0gbV9Xb3JkQXJyYXkuR2V0U2l6ZSgpIC0gMTsgaSA+IG5Xb3JkSW5kZXg7IGktLSkgeworICAgICAgICBkZWxldGUgbV9Xb3JkQXJyYXkuR2V0QXQoaSk7CisgICAgICAgIG1fV29yZEFycmF5LlJlbW92ZUF0KGkpOworICAgIH0KK30KK3ZvaWQgQ1NlY3Rpb246OkNsZWFyTWlkV29yZHMoRlhfSU5UMzIgbkJlZ2luSW5kZXgsIEZYX0lOVDMyIG5FbmRJbmRleCkKK3sKKyAgICBmb3IgKEZYX0lOVDMyIGkgPSBuRW5kSW5kZXg7IGkgPiBuQmVnaW5JbmRleDsgaS0tKSB7CisgICAgICAgIGRlbGV0ZSBtX1dvcmRBcnJheS5HZXRBdChpKTsKKyAgICAgICAgbV9Xb3JkQXJyYXkuUmVtb3ZlQXQoaSk7CisgICAgfQorfQordm9pZCBDU2VjdGlvbjo6Q2xlYXJXb3Jkcyhjb25zdCBDUFZUX1dvcmRSYW5nZSAmIFBsYWNlUmFuZ2UpCit7CisgICAgQ1BWVF9Xb3JkUGxhY2UgU2VjQmVnaW5Qb3MgPSBHZXRCZWdpbldvcmRQbGFjZSgpOworICAgIENQVlRfV29yZFBsYWNlIFNlY0VuZFBvcyA9IEdldEVuZFdvcmRQbGFjZSgpOworICAgIGlmIChQbGFjZVJhbmdlLkJlZ2luUG9zLldvcmRDbXAoU2VjQmVnaW5Qb3MpID49IDApIHsKKyAgICAgICAgaWYgKFBsYWNlUmFuZ2UuRW5kUG9zLldvcmRDbXAoU2VjRW5kUG9zKSA8PSAwKSB7CisgICAgICAgICAgICBDbGVhck1pZFdvcmRzKFBsYWNlUmFuZ2UuQmVnaW5Qb3MubldvcmRJbmRleCwgUGxhY2VSYW5nZS5FbmRQb3MubldvcmRJbmRleCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBDbGVhclJpZ2h0V29yZHMoUGxhY2VSYW5nZS5CZWdpblBvcy5uV29yZEluZGV4KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoUGxhY2VSYW5nZS5FbmRQb3MuV29yZENtcChTZWNFbmRQb3MpIDw9IDApIHsKKyAgICAgICAgQ2xlYXJMZWZ0V29yZHMoUGxhY2VSYW5nZS5FbmRQb3MubldvcmRJbmRleCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUmVzZXRXb3JkQXJyYXkoKTsKKyAgICB9Cit9Cit2b2lkIENTZWN0aW9uOjpDbGVhcldvcmQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkKK3sKKyAgICBkZWxldGUgbV9Xb3JkQXJyYXkuR2V0QXQocGxhY2UubldvcmRJbmRleCk7CisgICAgbV9Xb3JkQXJyYXkuUmVtb3ZlQXQocGxhY2UubldvcmRJbmRleCk7Cit9CitDVHlwZXNldDo6Q1R5cGVzZXQoQ1NlY3Rpb24gKiBwU2VjdGlvbikgOiBtX3BTZWN0aW9uKHBTZWN0aW9uKSwgbV9wVlQocFNlY3Rpb24tPm1fcFZUKSwgbV9yY1JldCgwLjBmLCAwLjBmLCAwLjBmLCAwLjBmKQoreworfQorQ1R5cGVzZXQ6On5DVHlwZXNldCgpCit7Cit9CitDUFZUX0Zsb2F0UmVjdCBDVHlwZXNldDo6Q2hhckFycmF5KCkKK3sKKyAgICBBU1NFUlQobV9wU2VjdGlvbiAhPSBOVUxMKTsKKyAgICBBU1NFUlQobV9wVlQgIT0gTlVMTCk7CisgICAgRlhfRkxPQVQgZkxpbmVBc2NlbnQgPSBtX3BWVC0+R2V0Rm9udEFzY2VudChtX3BWVC0+R2V0RGVmYXVsdEZvbnRJbmRleCgpLCBtX3BWVC0+R2V0Rm9udFNpemUoKSk7CisgICAgRlhfRkxPQVQgZkxpbmVEZXNjZW50ID0gbV9wVlQtPkdldEZvbnREZXNjZW50KG1fcFZULT5HZXREZWZhdWx0Rm9udEluZGV4KCksIG1fcFZULT5HZXRGb250U2l6ZSgpKTsKKyAgICBtX3JjUmV0LkRlZmF1bHQoKTsKKyAgICBGWF9GTE9BVCB4ID0gMC4wZiwgeSA9IDAuMGY7CisgICAgRlhfRkxPQVQgZk5leHRXaWR0aDsKKyAgICBGWF9JTlQzMiBuU3RhcnQgPSAwOworICAgIEZYX0ZMT0FUIGZOb2RlV2lkdGggPSBtX3BWVC0+R2V0UGxhdGVXaWR0aCgpIC8gKG1fcFZULT5tX25DaGFyQXJyYXkgPD0gMCA/IDEgOiBtX3BWVC0+bV9uQ2hhckFycmF5KTsKKyAgICBpZiAoQ0xpbmUgKiBwTGluZSA9IG1fcFNlY3Rpb24tPm1fTGluZUFycmF5LkdldEF0KDApKSB7CisgICAgICAgIHggPSAwLjBmOworICAgICAgICB5ICs9ICBtX3BWVC0+R2V0TGluZUxlYWRpbmcobV9wU2VjdGlvbi0+bV9TZWNJbmZvKTsKKyAgICAgICAgeSArPSBmTGluZUFzY2VudDsKKyAgICAgICAgblN0YXJ0ID0gMDsKKyAgICAgICAgc3dpdGNoIChtX3BWVC0+R2V0QWxpZ25tZW50KG1fcFNlY3Rpb24tPm1fU2VjSW5mbykpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICBwTGluZS0+bV9MaW5lSW5mby5mTGluZVggPSBmTm9kZVdpZHRoICogUFZUX0hBTEY7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgblN0YXJ0ID0gKG1fcFZULT5tX25DaGFyQXJyYXkgLSBtX3BTZWN0aW9uLT5tX1dvcmRBcnJheS5HZXRTaXplKCkpIC8gMjsKKyAgICAgICAgICAgICAgICBwTGluZS0+bV9MaW5lSW5mby5mTGluZVggPSBmTm9kZVdpZHRoICogblN0YXJ0IC0gZk5vZGVXaWR0aCAqIFBWVF9IQUxGOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIG5TdGFydCA9IG1fcFZULT5tX25DaGFyQXJyYXkgLSBtX3BTZWN0aW9uLT5tX1dvcmRBcnJheS5HZXRTaXplKCk7CisgICAgICAgICAgICAgICAgcExpbmUtPm1fTGluZUluZm8uZkxpbmVYID0gZk5vZGVXaWR0aCAqIG5TdGFydCAtIGZOb2RlV2lkdGggKiBQVlRfSEFMRjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3IgKEZYX0lOVDMyIHcgPSAwLCBzeiA9IG1fcFNlY3Rpb24tPm1fV29yZEFycmF5LkdldFNpemUoKTsgdyA8IHN6OyB3KyspIHsKKyAgICAgICAgICAgIGlmICh3ID49IG1fcFZULT5tX25DaGFyQXJyYXkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZOZXh0V2lkdGggPSAwOworICAgICAgICAgICAgaWYgKENQVlRfV29yZEluZm8gKiBwTmV4dFdvcmQgPSAoQ1BWVF9Xb3JkSW5mbyAqKW1fcFNlY3Rpb24tPm1fV29yZEFycmF5LkdldEF0KHcgKyAxKSkgeworICAgICAgICAgICAgICAgIHBOZXh0V29yZC0+ZldvcmRUYWlsID0gMDsKKyAgICAgICAgICAgICAgICBmTmV4dFdpZHRoID0gbV9wVlQtPkdldFdvcmRXaWR0aCgqcE5leHRXb3JkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChDUFZUX1dvcmRJbmZvICogcFdvcmQgPSAoQ1BWVF9Xb3JkSW5mbyAqKW1fcFNlY3Rpb24tPm1fV29yZEFycmF5LkdldEF0KHcpKSB7CisgICAgICAgICAgICAgICAgcFdvcmQtPmZXb3JkVGFpbCA9IDA7CisgICAgICAgICAgICAgICAgRlhfRkxPQVQgZldvcmRXaWR0aCA9IG1fcFZULT5HZXRXb3JkV2lkdGgoKnBXb3JkKTsKKyAgICAgICAgICAgICAgICBGWF9GTE9BVCBmV29yZEFzY2VudCA9IG1fcFZULT5HZXRXb3JkQXNjZW50KCpwV29yZCk7CisgICAgICAgICAgICAgICAgRlhfRkxPQVQgZldvcmREZXNjZW50ID0gbV9wVlQtPkdldFdvcmREZXNjZW50KCpwV29yZCk7CisgICAgICAgICAgICAgICAgeCA9IChGWF9GTE9BVCkoZk5vZGVXaWR0aCAqICh3ICsgblN0YXJ0ICsgMC41KSAtIGZXb3JkV2lkdGggKiBQVlRfSEFMRik7CisgICAgICAgICAgICAgICAgcFdvcmQtPmZXb3JkWCA9IHg7CisgICAgICAgICAgICAgICAgcFdvcmQtPmZXb3JkWSA9IHk7CisgICAgICAgICAgICAgICAgaWYgKHcgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBwTGluZS0+bV9MaW5lSW5mby5mTGluZVggPSB4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAodyAhPSBtX3BTZWN0aW9uLT5tX1dvcmRBcnJheS5HZXRTaXplKCkgLSAxKQorICAgICAgICAgICAgICAgICAgICBwV29yZC0+ZldvcmRUYWlsID0gKGZOb2RlV2lkdGggLSAoZldvcmRXaWR0aCArIGZOZXh0V2lkdGgpICogUFZUX0hBTEYgPiAwID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmTm9kZVdpZHRoIC0gKGZXb3JkV2lkdGggKyBmTmV4dFdpZHRoKSAqIFBWVF9IQUxGIDogMCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBXb3JkLT5mV29yZFRhaWwgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB4ICs9IGZXb3JkV2lkdGg7CisgICAgICAgICAgICAgICAgZkxpbmVBc2NlbnQgPSBGUERGX01BWChmTGluZUFzY2VudCwgZldvcmRBc2NlbnQpOworICAgICAgICAgICAgICAgIGZMaW5lRGVzY2VudCA9IEZQREZfTUlOKGZMaW5lRGVzY2VudCwgZldvcmREZXNjZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwTGluZS0+bV9MaW5lSW5mby5uQmVnaW5Xb3JkSW5kZXggPSAwOworICAgICAgICBwTGluZS0+bV9MaW5lSW5mby5uRW5kV29yZEluZGV4ID0gbV9wU2VjdGlvbi0+bV9Xb3JkQXJyYXkuR2V0U2l6ZSgpIC0gMTsKKyAgICAgICAgcExpbmUtPm1fTGluZUluZm8uZkxpbmVZID0geTsKKyAgICAgICAgcExpbmUtPm1fTGluZUluZm8uZkxpbmVXaWR0aCA9IAl4IC0gcExpbmUtPm1fTGluZUluZm8uZkxpbmVYOworICAgICAgICBwTGluZS0+bV9MaW5lSW5mby5mTGluZUFzY2VudCA9IGZMaW5lQXNjZW50OworICAgICAgICBwTGluZS0+bV9MaW5lSW5mby5mTGluZURlc2NlbnQgPSBmTGluZURlc2NlbnQ7CisgICAgICAgIHkgKz0gKC1mTGluZURlc2NlbnQpOworICAgIH0KKyAgICByZXR1cm4gbV9yY1JldCA9IENQVlRfRmxvYXRSZWN0KDAsIDAsIHgsIHkpOworfQorQ1BWVF9TaXplIENUeXBlc2V0OjpHZXRFZGl0U2l6ZShGWF9GTE9BVCBmRm9udFNpemUpCit7CisgICAgQVNTRVJUKG1fcFNlY3Rpb24gIT0gTlVMTCk7CisgICAgQVNTRVJUKG1fcFZUICE9IE5VTEwpOworICAgIFNwbGl0TGluZXMoRkFMU0UsIGZGb250U2l6ZSk7CisgICAgcmV0dXJuIENQVlRfU2l6ZShtX3JjUmV0LldpZHRoKCksIG1fcmNSZXQuSGVpZ2h0KCkpOworfQorQ1BWVF9GbG9hdFJlY3QgQ1R5cGVzZXQ6OlR5cGVzZXQoKQoreworICAgIEFTU0VSVChtX3BTZWN0aW9uICE9IE5VTEwpOworICAgIEFTU0VSVChtX3BWVCAhPSBOVUxMKTsKKyAgICBtX3BTZWN0aW9uLT5tX0xpbmVBcnJheS5FbXB0eSgpOworICAgIFNwbGl0TGluZXMoVFJVRSwgMC4wZik7CisgICAgbV9wU2VjdGlvbi0+bV9MaW5lQXJyYXkuQ2xlYXIoKTsKKyAgICBPdXRwdXRMaW5lcygpOworICAgIHJldHVybiBtX3JjUmV0OworfQorc3RhdGljIGludCBzcGVjaWFsX2NoYXJzWzEyOF0gPSB7CisgICAgMHgwMDAwLCAweDAwMEMsIDB4MDAwOCwgMHgwMDBDLCAweDAwMDgsIDB4MDAwMCwgMHgwMDIwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDgsIDB4MDAwOCwgMHgwMDAwLCAweDAwMTAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMjgsCisgICAgMHgwMDBDLCAweDAwMDgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMjgsIDB4MDAyOCwgMHgwMDI4LCAweDAwMjgsCisgICAgMHgwMDAyLCAweDAwMDIsIDB4MDAwMiwgMHgwMDAyLCAweDAwMDIsIDB4MDAwMiwgMHgwMDAyLCAweDAwMDIsCisgICAgMHgwMDAyLCAweDAwMDIsIDB4MDAwOCwgMHgwMDA4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDgsCisgICAgMHgwMDAwLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsCisgICAgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsCisgICAgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsCisgICAgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDBDLCAweDAwMDAsIDB4MDAwOCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsCisgICAgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsCisgICAgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDAxLCAweDAwMDEsCisgICAgMHgwMDAxLCAweDAwMDEsIDB4MDAwMSwgMHgwMDBDLCAweDAwMDAsIDB4MDAwOCwgMHgwMDAwLCAweDAwMDAsCit9Oworc3RhdGljIEZYX0JPT0wgSXNMYXRpbihGWF9XT1JEIHdvcmQpCit7CisgICAgaWYgKHdvcmQgPD0gMHgwMDdGKSB7CisgICAgICAgIGlmIChzcGVjaWFsX2NoYXJzW3dvcmRdICYgMHgwMDAxKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoKHdvcmQgPj0gMHgwMEMwICYmIHdvcmQgPD0gMHgwMEZGKSB8fAorICAgICAgICAgICAgKHdvcmQgPj0gMHgwMTAwICYmIHdvcmQgPD0gMHgwMjRGKSB8fAorICAgICAgICAgICAgKHdvcmQgPj0gMHgxRTAwICYmIHdvcmQgPD0gMHgxRUZGKSB8fAorICAgICAgICAgICAgKHdvcmQgPj0gMHgyQzYwICYmIHdvcmQgPD0gMHgyQzdGKSB8fAorICAgICAgICAgICAgKHdvcmQgPj0gMHhBNzIwICYmIHdvcmQgPD0gMHhBN0ZGKSB8fAorICAgICAgICAgICAgKHdvcmQgPj0gMHhGRjIxICYmIHdvcmQgPD0gMHhGRjNBKSB8fAorICAgICAgICAgICAgKHdvcmQgPj0gMHhGRjQxICYmIHdvcmQgPD0gMHhGRjVBKSkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorc3RhdGljIEZYX0JPT0wgSXNEaWdpdChGWF9EV09SRCB3b3JkKQoreworICAgIHJldHVybiAod29yZCA+PSAweDAwMzAgJiYgd29yZCA8PSAweDAwMzkpID8gVFJVRSA6IEZBTFNFOworfQorc3RhdGljIEZYX0JPT0wgSXNDSksoRlhfRFdPUkQgd29yZCkKK3sKKyAgICBpZiAoKHdvcmQgPj0gMHgxMTAwICYmIHdvcmQgPD0gMHgxMUZGKSB8fAorICAgICAgICAgICAgKHdvcmQgPj0gMHgyRTgwICYmIHdvcmQgPD0gMHgyRkZGKSB8fAorICAgICAgICAgICAgKHdvcmQgPj0gMHgzMDQwICYmIHdvcmQgPD0gMHg5RkJGKSB8fAorICAgICAgICAgICAgKHdvcmQgPj0gMHhBQzAwICYmIHdvcmQgPD0gMHhEN0FGKSB8fAorICAgICAgICAgICAgKHdvcmQgPj0gMHhGOTAwICYmIHdvcmQgPD0gMHhGQUZGKSB8fAorICAgICAgICAgICAgKHdvcmQgPj0gMHhGRTMwICYmIHdvcmQgPD0gMHhGRTRGKSB8fAorICAgICAgICAgICAgKHdvcmQgPj0gMHgyMDAwMCAmJiB3b3JkIDw9IDB4MkE2REYpIHx8CisgICAgICAgICAgICAod29yZCA+PSAweDJGODAwICYmIHdvcmQgPD0gMHgyRkExRikpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGlmICh3b3JkID49IDB4MzAwMCAmJiB3b3JkIDw9IDB4MzAzRikgeworICAgICAgICBpZiAod29yZCA9PSAweDMwMDUgfHwgd29yZCA9PSAweDMwMDYgfHwgd29yZCA9PSAweDMwMjEgfHwgd29yZCA9PSAweDMwMjIgfHwKKyAgICAgICAgICAgICAgICB3b3JkID09IDB4MzAyMyB8fCB3b3JkID09IDB4MzAyNCB8fCB3b3JkID09IDB4MzAyNSB8fCB3b3JkID09IDB4MzAyNiB8fAorICAgICAgICAgICAgICAgIHdvcmQgPT0gMHgzMDI3IHx8IHdvcmQgPT0gMHgzMDI4IHx8IHdvcmQgPT0gMHgzMDI5IHx8IHdvcmQgPT0gMHgzMDMxIHx8CisgICAgICAgICAgICAgICAgd29yZCA9PSAweDMwMzIgfHwgd29yZCA9PSAweDMwMzMgfHwgd29yZCA9PSAweDMwMzQgfHwgd29yZCA9PSAweDMwMzUpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKHdvcmQgPj0gMHhGRjY2ICYmIHdvcmQgPD0gMHhGRjlEKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitzdGF0aWMgRlhfQk9PTCBJc1B1bmN0dWF0aW9uKEZYX0RXT1JEIHdvcmQpCit7CisgICAgaWYgKHdvcmQgPD0gMHgwMDdGKSB7CisgICAgICAgIGlmICgoc3BlY2lhbF9jaGFyc1t3b3JkXSA+PiAzKSAmIDEpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICh3b3JkID49IDB4MDA4MCAmJiB3b3JkIDw9IDB4MDBGRikgeworICAgICAgICBpZiAod29yZCA9PSAweDAwODIgfHwgd29yZCA9PSAweDAwODQgfHwgd29yZCA9PSAweDAwODUgfHwgd29yZCA9PSAweDAwOTEgfHwKKyAgICAgICAgICAgICAgICB3b3JkID09IDB4MDA5MiB8fCB3b3JkID09IDB4MDA5MyB8fCB3b3JkIDw9IDB4MDA5NCB8fCB3b3JkID09IDB4MDA5NiB8fAorICAgICAgICAgICAgICAgIHdvcmQgPT0gMHgwMEI0IHx8IHdvcmQgPT0gMHgwMEI4KSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAod29yZCA+PSAweDIwMDAgJiYgd29yZCA8PSAweDIwNkYpIHsKKyAgICAgICAgaWYgKHdvcmQgPT0gMHgyMDEwIHx8IHdvcmQgPT0gMHgyMDExIHx8IHdvcmQgPT0gMHgyMDEyIHx8IHdvcmQgPT0gMHgyMDEzIHx8CisgICAgICAgICAgICAgICAgd29yZCA9PSAweDIwMTggfHwgd29yZCA9PSAweDIwMTkgfHwgd29yZCA9PSAweDIwMUEgfHwgd29yZCA9PSAweDIwMUIgfHwKKyAgICAgICAgICAgICAgICB3b3JkID09IDB4MjAxQyB8fCB3b3JkID09IDB4MjAxRCB8fCB3b3JkID09IDB4MjAxRSB8fCB3b3JkID09IDB4MjAxRiB8fAorICAgICAgICAgICAgICAgIHdvcmQgPT0gMHgyMDMyIHx8IHdvcmQgPT0gMHgyMDMzIHx8IHdvcmQgPT0gMHgyMDM0IHx8IHdvcmQgPT0gMHgyMDM1IHx8CisgICAgICAgICAgICAgICAgd29yZCA9PSAweDIwMzYgfHwgd29yZCA9PSAweDIwMzcgfHwgd29yZCA9PSAweDIwM0MgfHwgd29yZCA9PSAweDIwM0QgfHwKKyAgICAgICAgICAgICAgICB3b3JkID09IDB4MjAzRSB8fCB3b3JkID09IDB4MjA0NCkgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHdvcmQgPj0gMHgzMDAwICYmIHdvcmQgPD0gMHgzMDNGKSB7CisgICAgICAgIGlmICh3b3JkID09IDB4MzAwMSB8fCB3b3JkID09IDB4MzAwMiB8fCB3b3JkID09IDB4MzAwMyB8fCB3b3JkID09IDB4MzAwNSB8fAorICAgICAgICAgICAgICAgIHdvcmQgPT0gMHgzMDA5IHx8IHdvcmQgPT0gMHgzMDBBIHx8IHdvcmQgPT0gMHgzMDBCIHx8IHdvcmQgPT0gMHgzMDBDIHx8CisgICAgICAgICAgICAgICAgd29yZCA9PSAweDMwMEQgfHwgd29yZCA9PSAweDMwMEYgfHwgd29yZCA9PSAweDMwMEUgfHwgd29yZCA9PSAweDMwMTAgfHwKKyAgICAgICAgICAgICAgICB3b3JkID09IDB4MzAxMSB8fCB3b3JkID09IDB4MzAxNCB8fCB3b3JkID09IDB4MzAxNSB8fCB3b3JkID09IDB4MzAxNiB8fAorICAgICAgICAgICAgICAgIHdvcmQgPT0gMHgzMDE3IHx8IHdvcmQgPT0gMHgzMDE4IHx8IHdvcmQgPT0gMHgzMDE5IHx8IHdvcmQgPT0gMHgzMDFBIHx8CisgICAgICAgICAgICAgICAgd29yZCA9PSAweDMwMUIgfHwgd29yZCA9PSAweDMwMUQgfHwgd29yZCA9PSAweDMwMUUgfHwgd29yZCA9PSAweDMwMUYpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICh3b3JkID49IDB4RkU1MCAmJiB3b3JkIDw9IDB4RkU2RikgeworICAgICAgICBpZiAoKHdvcmQgPj0gMHhGRTUwICYmIHdvcmQgPD0gMHhGRTVFKSB8fCB3b3JkID09IDB4RkU2MykgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHdvcmQgPj0gMHhGRjAwICYmIHdvcmQgPD0gMHhGRkVGKSB7CisgICAgICAgIGlmICh3b3JkID09IDB4RkYwMSB8fCB3b3JkID09IDB4RkYwMiB8fCB3b3JkID09IDB4RkYwNyB8fCB3b3JkID09IDB4RkYwOCB8fAorICAgICAgICAgICAgICAgIHdvcmQgPT0gMHhGRjA5IHx8IHdvcmQgPT0gMHhGRjBDIHx8IHdvcmQgPT0gMHhGRjBFIHx8IHdvcmQgPT0gMHhGRjBGIHx8CisgICAgICAgICAgICAgICAgd29yZCA9PSAweEZGMUEgfHwgd29yZCA9PSAweEZGMUIgfHwgd29yZCA9PSAweEZGMUYgfHwgd29yZCA9PSAweEZGM0IgfHwKKyAgICAgICAgICAgICAgICB3b3JkID09IDB4RkYzRCB8fCB3b3JkID09IDB4RkY0MCB8fCB3b3JkID09IDB4RkY1QiB8fCB3b3JkID09IDB4RkY1QyB8fAorICAgICAgICAgICAgICAgIHdvcmQgPT0gMHhGRjVEIHx8IHdvcmQgPT0gMHhGRjYxIHx8IHdvcmQgPT0gMHhGRjYyIHx8IHdvcmQgPT0gMHhGRjYzIHx8CisgICAgICAgICAgICAgICAgd29yZCA9PSAweEZGNjQgfHwgd29yZCA9PSAweEZGNjUgfHwgd29yZCA9PSAweEZGOUUgfHwgd29yZCA9PSAweEZGOUYpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK3N0YXRpYyBGWF9CT09MIElzQ29ubmVjdGl2ZVN5bWJvbChGWF9EV09SRCB3b3JkKQoreworICAgIGlmICh3b3JkIDw9IDB4MDA3RikgeworICAgICAgICBpZiAoKHNwZWNpYWxfY2hhcnNbd29yZF0gPj4gNSkgJiAxKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitzdGF0aWMgRlhfQk9PTCBJc09wZW5TdHlsZVB1bmN0dWF0aW9uKEZYX0RXT1JEIHdvcmQpCit7CisgICAgaWYgKHdvcmQgPD0gMHgwMDdGKSB7CisgICAgICAgIGlmICgoc3BlY2lhbF9jaGFyc1t3b3JkXSA+PiAyKSAmIDEpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICh3b3JkID09IDB4MzAwQSB8fCB3b3JkID09IDB4MzAwQyB8fCB3b3JkID09IDB4MzAwRSB8fCB3b3JkID09IDB4MzAxMCB8fAorICAgICAgICAgICAgICAgd29yZCA9PSAweDMwMTQgfHwgd29yZCA9PSAweDMwMTYgfHwgd29yZCA9PSAweDMwMTggfHwgd29yZCA9PSAweDMwMUEgfHwKKyAgICAgICAgICAgICAgIHdvcmQgPT0gMHhGRjA4IHx8IHdvcmQgPT0gMHhGRjNCIHx8IHdvcmQgPT0gMHhGRjVCIHx8IHdvcmQgPT0gMHhGRjYyKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitzdGF0aWMgRlhfQk9PTCBJc0N1cnJlbmN5U3ltYm9sKEZYX1dPUkQgd29yZCkKK3sKKyAgICBpZiAod29yZCA9PSAweDAwMjQgfHwgd29yZCA9PSAweDAwODAgfHwgd29yZCA9PSAweDAwQTIgfHwgd29yZCA9PSAweDAwQTMgfHwKKyAgICAgICAgICAgIHdvcmQgPT0gMHgwMEE0IHx8IHdvcmQgPT0gMHgwMEE1IHx8ICh3b3JkID49IDB4MjBBMCAmJiB3b3JkIDw9IDB4MjBDRikgfHwKKyAgICAgICAgICAgIHdvcmQgPT0gMHhGRTY5IHx8IHdvcmQgPT0gMHhGRjA0IHx8IHdvcmQgPT0gMHhGRkUwIHx8IHdvcmQgPT0gMHhGRkUxIHx8CisgICAgICAgICAgICB3b3JkID09IDB4RkZFNSB8fCB3b3JkID09IDB4RkZFNikgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorc3RhdGljIEZYX0JPT0wgSXNQcmVmaXhTeW1ib2woRlhfV09SRCB3b3JkKQoreworICAgIGlmIChJc0N1cnJlbmN5U3ltYm9sKHdvcmQpKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBpZiAod29yZCA9PSAweDIxMTYpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK3N0YXRpYyBGWF9CT09MIElzU3BhY2UoRlhfV09SRCB3b3JkKQoreworICAgIHJldHVybiAod29yZCA9PSAweDAwMjAgfHwgd29yZCA9PSAweDMwMDApID8gVFJVRSA6IEZBTFNFOworfQorc3RhdGljIEZYX0JPT0wgTmVlZERpdmlzaW9uKEZYX1dPUkQgcHJldldvcmQsIEZYX1dPUkQgY3VyV29yZCkKK3sKKyAgICBpZiAoKElzTGF0aW4ocHJldldvcmQpIHx8IElzRGlnaXQocHJldldvcmQpKSAmJiAoSXNMYXRpbihjdXJXb3JkKSB8fCBJc0RpZ2l0KGN1cldvcmQpKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfSBlbHNlIGlmIChJc1NwYWNlKGN1cldvcmQpIHx8IElzUHVuY3R1YXRpb24oY3VyV29yZCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0gZWxzZSBpZiAoSXNDb25uZWN0aXZlU3ltYm9sKHByZXZXb3JkKSB8fCBJc0Nvbm5lY3RpdmVTeW1ib2woY3VyV29yZCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0gZWxzZSBpZiAoSXNTcGFjZShwcmV2V29yZCkgfHwgSXNQdW5jdHVhdGlvbihwcmV2V29yZCkpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfSBlbHNlIGlmIChJc1ByZWZpeFN5bWJvbChwcmV2V29yZCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0gZWxzZSBpZiAoSXNQcmVmaXhTeW1ib2woY3VyV29yZCkgfHwgSXNDSksoY3VyV29yZCkpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfSBlbHNlIGlmIChJc0NKSyhwcmV2V29yZCkpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK3ZvaWQgQ1R5cGVzZXQ6OlNwbGl0TGluZXMoRlhfQk9PTCBiVHlwZXNldCwgRlhfRkxPQVQgZkZvbnRTaXplKQoreworICAgIEFTU0VSVChtX3BWVCAhPSBOVUxMKTsKKyAgICBBU1NFUlQobV9wU2VjdGlvbiAhPSBOVUxMKTsKKyAgICBGWF9JTlQzMiBuTGluZUhlYWQgPSAwOworICAgIEZYX0lOVDMyIG5MaW5lVGFpbCA9IDA7CisgICAgRlhfRkxPQVQgZk1heFggPSAwLjBmLCBmTWF4WSA9IDAuMGY7CisgICAgRlhfRkxPQVQgZkxpbmVXaWR0aCA9IDAuMGYsIGZCYWNrdXBMaW5lV2lkdGggPSAwLjBmOworICAgIEZYX0ZMT0FUIGZMaW5lQXNjZW50ID0gMC4wZiwgZkJhY2t1cExpbmVBc2NlbnQgPSAwLjBmOworICAgIEZYX0ZMT0FUIGZMaW5lRGVzY2VudCA9IDAuMGYsIGZCYWNrdXBMaW5lRGVzY2VudCA9IDAuMGY7CisgICAgRlhfSU5UMzIgbldvcmRTdGFydFBvcyA9IDA7CisgICAgRlhfQk9PTCBiRnVsbFdvcmQgPSBGQUxTRTsKKyAgICBGWF9JTlQzMiBuTGluZUZ1bGxXb3JkSW5kZXggPSAwOworICAgIEZYX0lOVDMyIG5DaGFySW5kZXggPSAwOworICAgIENQVlRfTGluZUluZm8gbGluZTsKKyAgICBGWF9GTE9BVCBmV29yZFdpZHRoID0gMDsKKyAgICBGWF9GTE9BVCBmVHlwZXNldFdpZHRoID0gRlBERl9NQVgobV9wVlQtPkdldFBsYXRlV2lkdGgoKSAtIG1fcFZULT5HZXRMaW5lSW5kZW50KG1fcFNlY3Rpb24tPm1fU2VjSW5mbyksIDAuMGYpOworICAgIEZYX0lOVDMyIG5Ub3RhbFdvcmRzID0gbV9wU2VjdGlvbi0+bV9Xb3JkQXJyYXkuR2V0U2l6ZSgpOworICAgIEZYX0JPT0wgYk9wZW5lZCA9IEZBTFNFOworICAgIGlmIChuVG90YWxXb3JkcyA+IDApIHsKKyAgICAgICAgRlhfSU5UMzIgaSA9IDA7CisgICAgICAgIHdoaWxlIChpIDwgblRvdGFsV29yZHMpIHsKKyAgICAgICAgICAgIENQVlRfV29yZEluZm8gKiBwV29yZCA9IG1fcFNlY3Rpb24tPm1fV29yZEFycmF5LkdldEF0KGkpOworICAgICAgICAgICAgQ1BWVF9Xb3JkSW5mbyogcE9sZFdvcmQgPSBwV29yZDsKKyAgICAgICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgICAgIHBPbGRXb3JkID0gbV9wU2VjdGlvbi0+bV9Xb3JkQXJyYXkuR2V0QXQoaSAtIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBXb3JkKSB7CisgICAgICAgICAgICAgICAgaWYgKGJUeXBlc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGZMaW5lQXNjZW50ID0gRlBERl9NQVgoZkxpbmVBc2NlbnQsIG1fcFZULT5HZXRXb3JkQXNjZW50KCpwV29yZCwgVFJVRSkpOworICAgICAgICAgICAgICAgICAgICBmTGluZURlc2NlbnQgPSBGUERGX01JTihmTGluZURlc2NlbnQsIG1fcFZULT5HZXRXb3JkRGVzY2VudCgqcFdvcmQsIFRSVUUpKTsKKyAgICAgICAgICAgICAgICAgICAgZldvcmRXaWR0aCA9IG1fcFZULT5HZXRXb3JkV2lkdGgoKnBXb3JkKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmTGluZUFzY2VudCA9IEZQREZfTUFYKGZMaW5lQXNjZW50LCBtX3BWVC0+R2V0V29yZEFzY2VudCgqcFdvcmQsIGZGb250U2l6ZSkpOworICAgICAgICAgICAgICAgICAgICBmTGluZURlc2NlbnQgPSBGUERGX01JTihmTGluZURlc2NlbnQsIG1fcFZULT5HZXRXb3JkRGVzY2VudCgqcFdvcmQsIGZGb250U2l6ZSkpOworICAgICAgICAgICAgICAgICAgICBmV29yZFdpZHRoID0gbV9wVlQtPkdldFdvcmRXaWR0aChwV29yZC0+bkZvbnRJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFdvcmQtPldvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcFZULT5tX3dTdWJXb3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BWVC0+bV9mQ2hhclNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BWVC0+bV9uSG9yelNjYWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmRm9udFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBXb3JkLT5mV29yZFRhaWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWJPcGVuZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKElzT3BlblN0eWxlUHVuY3R1YXRpb24ocFdvcmQtPldvcmQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiT3BlbmVkID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJGdWxsV29yZCA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocE9sZFdvcmQgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE5lZWREaXZpc2lvbihwT2xkV29yZC0+V29yZCwgcFdvcmQtPldvcmQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYkZ1bGxXb3JkID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghSXNTcGFjZShwV29yZC0+V29yZCkgJiYgIUlzT3BlblN0eWxlUHVuY3R1YXRpb24ocFdvcmQtPldvcmQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiT3BlbmVkID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGJGdWxsV29yZCkgeworICAgICAgICAgICAgICAgICAgICBiRnVsbFdvcmQgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5DaGFySW5kZXggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuTGluZUZ1bGxXb3JkSW5kZXggKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbldvcmRTdGFydFBvcyA9IGk7CisgICAgICAgICAgICAgICAgICAgIGZCYWNrdXBMaW5lV2lkdGggPSBmTGluZVdpZHRoOworICAgICAgICAgICAgICAgICAgICBmQmFja3VwTGluZUFzY2VudCA9IGZMaW5lQXNjZW50OworICAgICAgICAgICAgICAgICAgICBmQmFja3VwTGluZURlc2NlbnQgPSBmTGluZURlc2NlbnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5DaGFySW5kZXgrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX3BWVC0+bV9iTGltaXRXaWR0aCAmJiBmVHlwZXNldFdpZHRoID4gMCAmJgorICAgICAgICAgICAgICAgICAgICBmTGluZVdpZHRoICsgZldvcmRXaWR0aCA+IGZUeXBlc2V0V2lkdGgpIHsKKyAgICAgICAgICAgICAgICBpZiAobkxpbmVGdWxsV29yZEluZGV4ID4gMCkgeworICAgICAgICAgICAgICAgICAgICBpID0gbldvcmRTdGFydFBvczsKKyAgICAgICAgICAgICAgICAgICAgZkxpbmVXaWR0aCA9IGZCYWNrdXBMaW5lV2lkdGg7CisgICAgICAgICAgICAgICAgICAgIGZMaW5lQXNjZW50ID0gZkJhY2t1cExpbmVBc2NlbnQ7CisgICAgICAgICAgICAgICAgICAgIGZMaW5lRGVzY2VudCA9IGZCYWNrdXBMaW5lRGVzY2VudDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG5DaGFySW5kZXggPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBmTGluZVdpZHRoID0gIGZXb3JkV2lkdGg7CisgICAgICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbkxpbmVUYWlsID0gaSAtIDE7CisgICAgICAgICAgICAgICAgaWYgKGJUeXBlc2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmUubkJlZ2luV29yZEluZGV4ID0gbkxpbmVIZWFkOworICAgICAgICAgICAgICAgICAgICBsaW5lLm5FbmRXb3JkSW5kZXggPSBuTGluZVRhaWw7CisgICAgICAgICAgICAgICAgICAgIGxpbmUublRvdGFsV29yZCA9IG5MaW5lVGFpbCAtIG5MaW5lSGVhZCArIDE7CisgICAgICAgICAgICAgICAgICAgIGxpbmUuZkxpbmVXaWR0aCA9IGZMaW5lV2lkdGg7CisgICAgICAgICAgICAgICAgICAgIGxpbmUuZkxpbmVBc2NlbnQgPSBmTGluZUFzY2VudDsKKyAgICAgICAgICAgICAgICAgICAgbGluZS5mTGluZURlc2NlbnQgPSBmTGluZURlc2NlbnQ7CisgICAgICAgICAgICAgICAgICAgIG1fcFNlY3Rpb24tPkFkZExpbmUobGluZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZNYXhZICs9IChmTGluZUFzY2VudCArIG1fcFZULT5HZXRMaW5lTGVhZGluZyhtX3BTZWN0aW9uLT5tX1NlY0luZm8pKTsKKyAgICAgICAgICAgICAgICBmTWF4WSArPSAoLWZMaW5lRGVzY2VudCk7CisgICAgICAgICAgICAgICAgZk1heFggPSBGUERGX01BWChmTGluZVdpZHRoLCBmTWF4WCk7CisgICAgICAgICAgICAgICAgbkxpbmVIZWFkID0gaTsKKyAgICAgICAgICAgICAgICBmTGluZVdpZHRoID0gMC4wZjsKKyAgICAgICAgICAgICAgICBmTGluZUFzY2VudCA9IDAuMGY7CisgICAgICAgICAgICAgICAgZkxpbmVEZXNjZW50ID0gMC4wZjsKKyAgICAgICAgICAgICAgICBuQ2hhckluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICBuTGluZUZ1bGxXb3JkSW5kZXggPSAwOworICAgICAgICAgICAgICAgIGJGdWxsV29yZCA9IEZBTFNFOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmTGluZVdpZHRoICs9IGZXb3JkV2lkdGg7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChuTGluZUhlYWQgPD0gblRvdGFsV29yZHMgLSAxKSB7CisgICAgICAgICAgICBuTGluZVRhaWwgPSBuVG90YWxXb3JkcyAtIDE7CisgICAgICAgICAgICBpZiAoYlR5cGVzZXQpIHsKKyAgICAgICAgICAgICAgICBsaW5lLm5CZWdpbldvcmRJbmRleCA9IG5MaW5lSGVhZDsKKyAgICAgICAgICAgICAgICBsaW5lLm5FbmRXb3JkSW5kZXggPSBuTGluZVRhaWw7CisgICAgICAgICAgICAgICAgbGluZS5uVG90YWxXb3JkID0gbkxpbmVUYWlsIC0gbkxpbmVIZWFkICsgMTsKKyAgICAgICAgICAgICAgICBsaW5lLmZMaW5lV2lkdGggPSBmTGluZVdpZHRoOworICAgICAgICAgICAgICAgIGxpbmUuZkxpbmVBc2NlbnQgPSBmTGluZUFzY2VudDsKKyAgICAgICAgICAgICAgICBsaW5lLmZMaW5lRGVzY2VudCA9IGZMaW5lRGVzY2VudDsKKyAgICAgICAgICAgICAgICBtX3BTZWN0aW9uLT5BZGRMaW5lKGxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZk1heFkgKz0gKGZMaW5lQXNjZW50ICsgbV9wVlQtPkdldExpbmVMZWFkaW5nKG1fcFNlY3Rpb24tPm1fU2VjSW5mbykpOworICAgICAgICAgICAgZk1heFkgKz0gKC1mTGluZURlc2NlbnQpOworICAgICAgICAgICAgZk1heFggPSBGUERGX01BWChmTGluZVdpZHRoLCBmTWF4WCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoYlR5cGVzZXQpIHsKKyAgICAgICAgICAgIGZMaW5lQXNjZW50ID0gbV9wVlQtPkdldExpbmVBc2NlbnQobV9wU2VjdGlvbi0+bV9TZWNJbmZvKTsKKyAgICAgICAgICAgIGZMaW5lRGVzY2VudCA9IG1fcFZULT5HZXRMaW5lRGVzY2VudChtX3BTZWN0aW9uLT5tX1NlY0luZm8pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZkxpbmVBc2NlbnQgPSBtX3BWVC0+R2V0Rm9udEFzY2VudChtX3BWVC0+R2V0RGVmYXVsdEZvbnRJbmRleCgpLCBmRm9udFNpemUpOworICAgICAgICAgICAgZkxpbmVEZXNjZW50ID0gbV9wVlQtPkdldEZvbnREZXNjZW50KG1fcFZULT5HZXREZWZhdWx0Rm9udEluZGV4KCksIGZGb250U2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJUeXBlc2V0KSB7CisgICAgICAgICAgICBsaW5lLm5CZWdpbldvcmRJbmRleCA9IC0xOworICAgICAgICAgICAgbGluZS5uRW5kV29yZEluZGV4ID0gLTE7CisgICAgICAgICAgICBsaW5lLm5Ub3RhbFdvcmQgPSAwOworICAgICAgICAgICAgbGluZS5mTGluZVdpZHRoID0gMDsKKyAgICAgICAgICAgIGxpbmUuZkxpbmVBc2NlbnQgPSBmTGluZUFzY2VudDsKKyAgICAgICAgICAgIGxpbmUuZkxpbmVEZXNjZW50ID0gZkxpbmVEZXNjZW50OworICAgICAgICAgICAgbV9wU2VjdGlvbi0+QWRkTGluZShsaW5lKTsKKyAgICAgICAgfQorICAgICAgICBmTWF4WSArPSAobV9wVlQtPkdldExpbmVMZWFkaW5nKG1fcFNlY3Rpb24tPm1fU2VjSW5mbykgKyBmTGluZUFzY2VudCArICgtZkxpbmVEZXNjZW50KSk7CisgICAgfQorICAgIG1fcmNSZXQgPSBDUFZUX0Zsb2F0UmVjdCgwLCAwLCBmTWF4WCwgZk1heFkpOworfQordm9pZCBDVHlwZXNldDo6T3V0cHV0TGluZXMoKQoreworICAgIEFTU0VSVChtX3BWVCAhPSBOVUxMKTsKKyAgICBBU1NFUlQobV9wU2VjdGlvbiAhPSBOVUxMKTsKKyAgICBGWF9GTE9BVCBmTWluWCA9IDAuMGYsIGZNaW5ZID0gMC4wZiwgZk1heFggPSAwLjBmLCBmTWF4WSA9IDAuMGY7CisgICAgRlhfRkxPQVQgZlBvc1ggPSAwLjBmLCBmUG9zWSA9IDAuMGY7CisgICAgRlhfRkxPQVQgZkxpbmVJbmRlbnQgPSBtX3BWVC0+R2V0TGluZUluZGVudChtX3BTZWN0aW9uLT5tX1NlY0luZm8pOworICAgIEZYX0ZMT0FUIGZUeXBlc2V0V2lkdGggPSBGUERGX01BWChtX3BWVC0+R2V0UGxhdGVXaWR0aCgpIC0gZkxpbmVJbmRlbnQsIDAuMGYpOworICAgIHN3aXRjaCAobV9wVlQtPkdldEFsaWdubWVudChtX3BTZWN0aW9uLT5tX1NlY0luZm8pKSB7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIGZNaW5YID0gMC4wZjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBmTWluWCA9IChmVHlwZXNldFdpZHRoIC0gbV9yY1JldC5XaWR0aCgpKSAgKiBQVlRfSEFMRjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBmTWluWCA9IGZUeXBlc2V0V2lkdGggLSBtX3JjUmV0LldpZHRoKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgZk1heFggPSBmTWluWCArIG1fcmNSZXQuV2lkdGgoKTsKKyAgICBmTWluWSA9IDAuMGY7CisgICAgZk1heFkgPSBtX3JjUmV0LkhlaWdodCgpOworICAgIEZYX0lOVDMyIG5Ub3RhbExpbmVzID0gbV9wU2VjdGlvbi0+bV9MaW5lQXJyYXkuR2V0U2l6ZSgpOworICAgIGlmIChuVG90YWxMaW5lcyA+IDApIHsKKyAgICAgICAgbV9wU2VjdGlvbi0+bV9TZWNJbmZvLm5Ub3RhbExpbmUgPSBuVG90YWxMaW5lczsKKyAgICAgICAgZm9yIChGWF9JTlQzMiBsID0gMDsgbCA8IG5Ub3RhbExpbmVzOyBsKyspIHsKKyAgICAgICAgICAgIGlmIChDTGluZSAqIHBMaW5lID0gbV9wU2VjdGlvbi0+bV9MaW5lQXJyYXkuR2V0QXQobCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fcFZULT5HZXRBbGlnbm1lbnQobV9wU2VjdGlvbi0+bV9TZWNJbmZvKSkgeworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgICAgICBmUG9zWCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgZlBvc1ggPSAoZlR5cGVzZXRXaWR0aCAtIHBMaW5lLT5tX0xpbmVJbmZvLmZMaW5lV2lkdGgpICogUFZUX0hBTEY7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgZlBvc1ggPSBmVHlwZXNldFdpZHRoIC0gcExpbmUtPm1fTGluZUluZm8uZkxpbmVXaWR0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmUG9zWCArPSBmTGluZUluZGVudDsKKyAgICAgICAgICAgICAgICBmUG9zWSArPSBtX3BWVC0+R2V0TGluZUxlYWRpbmcobV9wU2VjdGlvbi0+bV9TZWNJbmZvKTsKKyAgICAgICAgICAgICAgICBmUG9zWSArPSBwTGluZS0+bV9MaW5lSW5mby5mTGluZUFzY2VudDsKKyAgICAgICAgICAgICAgICBwTGluZS0+bV9MaW5lSW5mby5mTGluZVggPSBmUG9zWCAtIGZNaW5YOworICAgICAgICAgICAgICAgIHBMaW5lLT5tX0xpbmVJbmZvLmZMaW5lWSA9IGZQb3NZIC0gZk1pblk7CisgICAgICAgICAgICAgICAgZm9yIChGWF9JTlQzMiB3ID0gcExpbmUtPm1fTGluZUluZm8ubkJlZ2luV29yZEluZGV4OyB3IDw9IHBMaW5lLT5tX0xpbmVJbmZvLm5FbmRXb3JkSW5kZXg7IHcrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoQ1BWVF9Xb3JkSW5mbyAqIHBXb3JkID0gbV9wU2VjdGlvbi0+bV9Xb3JkQXJyYXkuR2V0QXQodykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBXb3JkLT5mV29yZFggPSBmUG9zWCAtIGZNaW5YOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBXb3JkLT5wV29yZFByb3BzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwV29yZC0+cFdvcmRQcm9wcy0+blNjcmlwdFR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQVlRXT1JEX1NDUklQVF9OT1JNQUw6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwV29yZC0+ZldvcmRZID0gZlBvc1kgLSBmTWluWTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFBWVFdPUkRfU0NSSVBUX1NVUEVSOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFdvcmQtPmZXb3JkWSA9IGZQb3NZIC0gbV9wVlQtPkdldFdvcmRBc2NlbnQoKnBXb3JkKSAtIGZNaW5ZOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUFZUV09SRF9TQ1JJUFRfU1VCOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFdvcmQtPmZXb3JkWSA9IGZQb3NZIC0gbV9wVlQtPkdldFdvcmREZXNjZW50KCpwV29yZCkgLSBmTWluWTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFdvcmQtPmZXb3JkWSA9IGZQb3NZIC0gZk1pblk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBmUG9zWCArPSBtX3BWVC0+R2V0V29yZFdpZHRoKCpwV29yZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZlBvc1kgKz0gKC1wTGluZS0+bV9MaW5lSW5mby5mTGluZURlc2NlbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIG1fcmNSZXQgPSBDUFZUX0Zsb2F0UmVjdChmTWluWCwgZk1pblksIGZNYXhYLCBmTWF4WSk7Cit9CitDUERGX1ZhcmlhYmxlVGV4dDo6Q1BERl9WYXJpYWJsZVRleHQoKSA6CisgICAgbV9wVlRQcm92aWRlcihOVUxMKSwKKyAgICBtX3BWVEl0ZXJhdG9yKE5VTEwpLAorICAgIG1fYkluaXRpYWwoRkFMU0UpLAorICAgIG1fYlJpY2hUZXh0KEZBTFNFKSwKKyAgICBtX2JNdWx0aUxpbmUoRkFMU0UpLAorICAgIG1fYkxpbWl0V2lkdGgoRkFMU0UpLAorICAgIG1fYkF1dG9Gb250U2l6ZShGQUxTRSksCisgICAgbV9uTGltaXRDaGFyKDApLAorICAgIG1fbkNoYXJBcnJheSgwKSwKKyAgICBtX25BbGlnbm1lbnQoMCksCisgICAgbV9mQ2hhclNwYWNlKDAuMGYpLAorICAgIG1fZldvcmRTcGFjZSgwLjBmKSwKKyAgICBtX2ZGb250U2l6ZSgwLjBmKSwKKyAgICBtX25Ib3J6U2NhbGUoMTAwKSwKKyAgICBtX3dTdWJXb3JkKDApLAorICAgIG1fZkxpbmVMZWFkaW5nKDAuMGYpCit7Cit9CitDUERGX1ZhcmlhYmxlVGV4dDo6fkNQREZfVmFyaWFibGVUZXh0KCkKK3sKKyAgICBpZiAobV9wVlRJdGVyYXRvcikgeworICAgICAgICBkZWxldGUgbV9wVlRJdGVyYXRvcjsKKyAgICAgICAgbV9wVlRJdGVyYXRvciA9IE5VTEw7CisgICAgfQorICAgIFJlc2V0QWxsKCk7Cit9Cit2b2lkIENQREZfVmFyaWFibGVUZXh0OjpJbml0aWFsaXplKCkKK3sKKyAgICBpZiAoIW1fYkluaXRpYWwpIHsKKyAgICAgICAgQ1BWVF9TZWN0aW9uSW5mbyBzZWNpbmZvOworICAgICAgICBpZiAobV9iUmljaFRleHQpIHsKKyAgICAgICAgICAgIHNlY2luZm8ucFNlY1Byb3BzID0gRlhfTkVXIENQVlRfU2VjUHJvcHMoMC4wZiwgMC4wZiwgMCk7CisgICAgICAgICAgICBzZWNpbmZvLnBXb3JkUHJvcHMgPSBGWF9ORVcgQ1BWVF9Xb3JkUHJvcHMoR2V0RGVmYXVsdEZvbnRJbmRleCgpLCBQVlRfREVGQVVMVF9GT05UU0laRSwgMCwgMCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgQ1BWVF9Xb3JkUGxhY2UgcGxhY2U7CisgICAgICAgIHBsYWNlLm5TZWNJbmRleCA9IDA7CisgICAgICAgIEFkZFNlY3Rpb24ocGxhY2UsIHNlY2luZm8pOworICAgICAgICBDUFZUX0xpbmVJbmZvIGxpbmVpbmZvOworICAgICAgICBsaW5laW5mby5mTGluZUFzY2VudCA9IEdldEZvbnRBc2NlbnQoR2V0RGVmYXVsdEZvbnRJbmRleCgpLCBHZXRGb250U2l6ZSgpKTsKKyAgICAgICAgbGluZWluZm8uZkxpbmVEZXNjZW50ID0gR2V0Rm9udERlc2NlbnQoR2V0RGVmYXVsdEZvbnRJbmRleCgpLCBHZXRGb250U2l6ZSgpKTsKKyAgICAgICAgQWRkTGluZShwbGFjZSwgbGluZWluZm8pOworICAgICAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fU2VjdGlvbkFycmF5LkdldEF0KDApKSB7CisgICAgICAgICAgICBwU2VjdGlvbi0+UmVzZXRMaW5lUGxhY2UoKTsKKyAgICAgICAgfQorICAgICAgICBtX2JJbml0aWFsID0gVFJVRTsKKyAgICB9Cit9Cit2b2lkIENQREZfVmFyaWFibGVUZXh0OjpSZXNldEFsbCgpCit7CisgICAgbV9iSW5pdGlhbCA9IEZBTFNFOworICAgIFJlc2V0U2VjdGlvbkFycmF5KCk7Cit9CitDUFZUX1dvcmRQbGFjZSBDUERGX1ZhcmlhYmxlVGV4dDo6SW5zZXJ0V29yZChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIGNoYXJzZXQsCisgICAgICAgIGNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcykKK3sKKyAgICBGWF9JTlQzMiBuVG90bGFXb3JkcyA9IHRoaXMtPkdldFRvdGFsV29yZHMoKTsKKyAgICBpZiAobV9uTGltaXRDaGFyID4gMCAmJiBuVG90bGFXb3JkcyA+PSBtX25MaW1pdENoYXIpIHsKKyAgICAgICAgcmV0dXJuIHBsYWNlOworICAgIH0KKyAgICBpZiAobV9uQ2hhckFycmF5ID4gMCAmJiBuVG90bGFXb3JkcyA+PSBtX25DaGFyQXJyYXkpIHsKKyAgICAgICAgcmV0dXJuIHBsYWNlOworICAgIH0KKyAgICBDUFZUX1dvcmRQbGFjZSBuZXdwbGFjZSA9IHBsYWNlOworICAgIG5ld3BsYWNlLm5Xb3JkSW5kZXggKys7CisgICAgaWYgKG1fYlJpY2hUZXh0KSB7CisgICAgICAgIENQVlRfV29yZFByb3BzICogcE5ld1Byb3BzID0gcFdvcmRQcm9wcyA/IEZYX05FVyBDUFZUX1dvcmRQcm9wcygqcFdvcmRQcm9wcykgOiBGWF9ORVcgQ1BWVF9Xb3JkUHJvcHMoKTsKKyAgICAgICAgaWYgKHBOZXdQcm9wcykgeworICAgICAgICAgICAgcE5ld1Byb3BzLT5uRm9udEluZGV4ID0gR2V0V29yZEZvbnRJbmRleCh3b3JkLCBjaGFyc2V0LCBwV29yZFByb3BzLT5uRm9udEluZGV4KTsKKyAgICAgICAgICAgIHJldHVybiBBZGRXb3JkKG5ld3BsYWNlLCBDUFZUX1dvcmRJbmZvKHdvcmQsIGNoYXJzZXQsIC0xLCBwTmV3UHJvcHMpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEZYX0lOVDMyIG5Gb250SW5kZXggPSBHZXRTdWJXb3JkKCkgPiAwID8gR2V0RGVmYXVsdEZvbnRJbmRleCgpIDogR2V0V29yZEZvbnRJbmRleCh3b3JkLCBjaGFyc2V0LCBHZXREZWZhdWx0Rm9udEluZGV4KCkpOworICAgICAgICByZXR1cm4gQWRkV29yZChuZXdwbGFjZSwgQ1BWVF9Xb3JkSW5mbyh3b3JkLCBjaGFyc2V0LCBuRm9udEluZGV4LCBOVUxMKSk7CisgICAgfQorICAgIHJldHVybiBwbGFjZTsKK30KK0NQVlRfV29yZFBsYWNlIENQREZfVmFyaWFibGVUZXh0OjpJbnNlcnRTZWN0aW9uKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIGNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMsCisgICAgICAgIGNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcykKK3sKKyAgICBGWF9JTlQzMiBuVG90bGFXb3JkcyA9IHRoaXMtPkdldFRvdGFsV29yZHMoKTsKKyAgICBpZiAobV9uTGltaXRDaGFyID4gMCAmJiBuVG90bGFXb3JkcyA+PSBtX25MaW1pdENoYXIpIHsKKyAgICAgICAgcmV0dXJuIHBsYWNlOworICAgIH0KKyAgICBpZiAobV9uQ2hhckFycmF5ID4gMCAmJiBuVG90bGFXb3JkcyA+PSBtX25DaGFyQXJyYXkpIHsKKyAgICAgICAgcmV0dXJuIHBsYWNlOworICAgIH0KKyAgICBpZiAoIW1fYk11bHRpTGluZSkgeworICAgICAgICByZXR1cm4gcGxhY2U7CisgICAgfQorICAgIENQVlRfV29yZFBsYWNlIHdvcmRwbGFjZSA9IHBsYWNlOworICAgIFVwZGF0ZVdvcmRQbGFjZSh3b3JkcGxhY2UpOworICAgIENQVlRfV29yZFBsYWNlIG5ld3BsYWNlID0gcGxhY2U7CisgICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdCh3b3JkcGxhY2UublNlY0luZGV4KSkgeworICAgICAgICBDUFZUX1dvcmRQbGFjZSBOZXdQbGFjZSh3b3JkcGxhY2UublNlY0luZGV4ICsgMSwgMCwgLTEpOworICAgICAgICBDUFZUX1NlY3Rpb25JbmZvIHNlY2luZm87CisgICAgICAgIGlmIChtX2JSaWNoVGV4dCkgeworICAgICAgICAgICAgaWYgKHBTZWNQcm9wcykgeworICAgICAgICAgICAgICAgIHNlY2luZm8ucFNlY1Byb3BzID0gRlhfTkVXIENQVlRfU2VjUHJvcHMoKnBTZWNQcm9wcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocFdvcmRQcm9wcykgeworICAgICAgICAgICAgICAgIHNlY2luZm8ucFdvcmRQcm9wcyA9IEZYX05FVyBDUFZUX1dvcmRQcm9wcygqcFdvcmRQcm9wcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQWRkU2VjdGlvbihOZXdQbGFjZSwgc2VjaW5mbyk7CisgICAgICAgIG5ld3BsYWNlID0gTmV3UGxhY2U7CisgICAgICAgIGlmIChDU2VjdGlvbiAqIHBOZXdTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQoTmV3UGxhY2UublNlY0luZGV4KSkgeworICAgICAgICAgICAgZm9yIChGWF9JTlQzMiB3ID0gd29yZHBsYWNlLm5Xb3JkSW5kZXggKyAxLCBzeiA9IHBTZWN0aW9uLT5tX1dvcmRBcnJheS5HZXRTaXplKCk7IHcgPCBzejsgdysrKSB7CisgICAgICAgICAgICAgICAgaWYgKENQVlRfV29yZEluZm8gKiBwV29yZCA9IHBTZWN0aW9uLT5tX1dvcmRBcnJheS5HZXRBdCh3KSkgeworICAgICAgICAgICAgICAgICAgICBOZXdQbGFjZS5uV29yZEluZGV4Kys7CisgICAgICAgICAgICAgICAgICAgIHBOZXdTZWN0aW9uLT5BZGRXb3JkKE5ld1BsYWNlLCAqcFdvcmQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBDbGVhclNlY3Rpb25SaWdodFdvcmRzKHdvcmRwbGFjZSk7CisgICAgfQorICAgIHJldHVybiBuZXdwbGFjZTsKK30KK0NQVlRfV29yZFBsYWNlIENQREZfVmFyaWFibGVUZXh0OjpJbnNlcnRUZXh0KGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIEZYX0xQQ1dTVFIgdGV4dCwgRlhfSU5UMzIgY2hhcnNldCwKKyAgICAgICAgY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwUHJvcHMpCit7CisgICAgQ0ZYX1dpZGVTdHJpbmcgc3dUZXh0ID0gdGV4dDsKKyAgICBDUFZUX1dvcmRQbGFjZSB3cCA9IHBsYWNlOworICAgIGZvciAoRlhfSU5UMzIgaSA9IDAsIHN6ID0gc3dUZXh0LkdldExlbmd0aCgpOyBpIDwgc3o7IGkrKykgeworICAgICAgICBDUFZUX1dvcmRQbGFjZSBvbGR3cCA9IHdwOworICAgICAgICBGWF9XT1JEIHdvcmQgPSBzd1RleHQuR2V0QXQoaSk7CisgICAgICAgIHN3aXRjaCAod29yZCkgeworICAgICAgICAgICAgY2FzZSAweDBEOgorICAgICAgICAgICAgICAgIGlmIChtX2JNdWx0aUxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN3VGV4dC5HZXRBdChpICsgMSkgPT0gMHgwQSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHdwID0gSW5zZXJ0U2VjdGlvbih3cCwgcFNlY1Byb3BzLCBwUHJvcHMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgwQToKKyAgICAgICAgICAgICAgICBpZiAobV9iTXVsdGlMaW5lKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzd1RleHQuR2V0QXQoaSArIDEpID09IDB4MEQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3cCA9IEluc2VydFNlY3Rpb24od3AsIHBTZWNQcm9wcywgcFByb3BzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDB4MDk6CisgICAgICAgICAgICAgICAgd29yZCA9IDB4MjA7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHdwID0gSW5zZXJ0V29yZCh3cCwgd29yZCwgY2hhcnNldCwgcFByb3BzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAod3AgPT0gb2xkd3ApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB3cDsKK30KK0NQVlRfV29yZFBsYWNlIENQREZfVmFyaWFibGVUZXh0OjpEZWxldGVXb3Jkcyhjb25zdCBDUFZUX1dvcmRSYW5nZSAmIFBsYWNlUmFuZ2UpCit7CisgICAgRlhfQk9PTCBiTGFzdFNlY1BvcyA9IEZBTFNFOworICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQoUGxhY2VSYW5nZS5FbmRQb3MublNlY0luZGV4KSkgeworICAgICAgICBiTGFzdFNlY1BvcyA9IChQbGFjZVJhbmdlLkVuZFBvcyA9PSBwU2VjdGlvbi0+R2V0RW5kV29yZFBsYWNlKCkpOworICAgIH0KKyAgICBDbGVhcldvcmRzKFBsYWNlUmFuZ2UpOworICAgIGlmIChQbGFjZVJhbmdlLkJlZ2luUG9zLm5TZWNJbmRleCAhPSBQbGFjZVJhbmdlLkVuZFBvcy5uU2VjSW5kZXgpIHsKKyAgICAgICAgQ2xlYXJFbXB0eVNlY3Rpb25zKFBsYWNlUmFuZ2UpOworICAgICAgICBpZiAoIWJMYXN0U2VjUG9zKSB7CisgICAgICAgICAgICBMaW5rTGF0dGVyU2VjdGlvbihQbGFjZVJhbmdlLkJlZ2luUG9zKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gUGxhY2VSYW5nZS5CZWdpblBvczsKK30KK0NQVlRfV29yZFBsYWNlIENQREZfVmFyaWFibGVUZXh0OjpEZWxldGVXb3JkKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpCit7CisgICAgcmV0dXJuIENsZWFyUmlnaHRXb3JkKEFqdXN0TGluZUhlYWRlcihwbGFjZSwgVFJVRSkpOworfQorQ1BWVF9Xb3JkUGxhY2UgQ1BERl9WYXJpYWJsZVRleHQ6OkJhY2tTcGFjZVdvcmQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkKK3sKKyAgICByZXR1cm4gQ2xlYXJMZWZ0V29yZChBanVzdExpbmVIZWFkZXIocGxhY2UsIFRSVUUpKTsKK30KK3ZvaWQgQ1BERl9WYXJpYWJsZVRleHQ6OlNldFRleHQoRlhfTFBDV1NUUiB0ZXh0LCBGWF9JTlQzMiBjaGFyc2V0LCBjb25zdCBDUFZUX1NlY1Byb3BzICogcFNlY1Byb3BzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMpCit7CisgICAgRGVsZXRlV29yZHMoQ1BWVF9Xb3JkUmFuZ2UoR2V0QmVnaW5Xb3JkUGxhY2UoKSwgR2V0RW5kV29yZFBsYWNlKCkpKTsKKyAgICBDRlhfV2lkZVN0cmluZyBzd1RleHQgPSB0ZXh0OworICAgIENQVlRfV29yZFBsYWNlCXdwKDAsIDAsIC0xKTsKKyAgICBDUFZUX1NlY3Rpb25JbmZvIHNlY2luZm87CisgICAgaWYgKG1fYlJpY2hUZXh0KSB7CisgICAgICAgIGlmIChwU2VjUHJvcHMpIHsKKyAgICAgICAgICAgIHNlY2luZm8ucFNlY1Byb3BzID0gRlhfTkVXIENQVlRfU2VjUHJvcHMoKnBTZWNQcm9wcyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBXb3JkUHJvcHMpIHsKKyAgICAgICAgICAgIHNlY2luZm8ucFdvcmRQcm9wcyA9IEZYX05FVyBDUFZUX1dvcmRQcm9wcygqcFdvcmRQcm9wcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdCgwKSkgeworICAgICAgICBwU2VjdGlvbi0+bV9TZWNJbmZvID0gc2VjaW5mbzsKKyAgICB9CisgICAgRlhfSU5UMzIgbkNoYXJDb3VudCA9IDA7CisgICAgZm9yIChGWF9JTlQzMiBpID0gMCwgc3ogPSBzd1RleHQuR2V0TGVuZ3RoKCk7IGkgPCBzejsgaSsrKSB7CisgICAgICAgIGlmIChtX25MaW1pdENoYXIgPiAwICYmIG5DaGFyQ291bnQgPj0gbV9uTGltaXRDaGFyKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9uQ2hhckFycmF5ID4gMCAmJiBuQ2hhckNvdW50ID49IG1fbkNoYXJBcnJheSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgRlhfV09SRCB3b3JkID0gc3dUZXh0LkdldEF0KGkpOworICAgICAgICBzd2l0Y2ggKHdvcmQpIHsKKyAgICAgICAgICAgIGNhc2UgMHgwRDoKKyAgICAgICAgICAgICAgICBpZiAobV9iTXVsdGlMaW5lKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzd1RleHQuR2V0QXQoaSArIDEpID09IDB4MEEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3cC5uU2VjSW5kZXggKys7CisgICAgICAgICAgICAgICAgICAgIHdwLm5MaW5lSW5kZXggPSAwOworICAgICAgICAgICAgICAgICAgICB3cC5uV29yZEluZGV4ID0gLTE7CisgICAgICAgICAgICAgICAgICAgIEFkZFNlY3Rpb24od3AsIHNlY2luZm8pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgwQToKKyAgICAgICAgICAgICAgICBpZiAobV9iTXVsdGlMaW5lKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChzd1RleHQuR2V0QXQoaSArIDEpID09IDB4MEQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3cC5uU2VjSW5kZXggKys7CisgICAgICAgICAgICAgICAgICAgIHdwLm5MaW5lSW5kZXggPSAwOworICAgICAgICAgICAgICAgICAgICB3cC5uV29yZEluZGV4ID0gLTE7CisgICAgICAgICAgICAgICAgICAgIEFkZFNlY3Rpb24od3AsIHNlY2luZm8pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMHgwOToKKyAgICAgICAgICAgICAgICB3b3JkID0gMHgyMDsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgd3AgPSBJbnNlcnRXb3JkKHdwLCB3b3JkLCBjaGFyc2V0LCBwV29yZFByb3BzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBuQ2hhckNvdW50Kys7CisgICAgfQorfQordm9pZCBDUERGX1ZhcmlhYmxlVGV4dDo6VXBkYXRlV29yZFBsYWNlKENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0Cit7CisgICAgaWYgKHBsYWNlLm5TZWNJbmRleCA8IDApIHsKKyAgICAgICAgcGxhY2UgPSBHZXRCZWdpbldvcmRQbGFjZSgpOworICAgIH0KKyAgICBpZiAocGxhY2UublNlY0luZGV4ID49IG1fU2VjdGlvbkFycmF5LkdldFNpemUoKSkgeworICAgICAgICBwbGFjZSA9IEdldEVuZFdvcmRQbGFjZSgpOworICAgIH0KKyAgICBwbGFjZSA9IEFqdXN0TGluZUhlYWRlcihwbGFjZSwgVFJVRSk7CisgICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdChwbGFjZS5uU2VjSW5kZXgpKSB7CisgICAgICAgIHBTZWN0aW9uLT5VcGRhdGVXb3JkUGxhY2UocGxhY2UpOworICAgIH0KK30KK0ZYX0lOVDMyIENQREZfVmFyaWFibGVUZXh0OjpXb3JkUGxhY2VUb1dvcmRJbmRleChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdAoreworICAgIENQVlRfV29yZFBsYWNlIG5ld3BsYWNlID0gcGxhY2U7CisgICAgVXBkYXRlV29yZFBsYWNlKG5ld3BsYWNlKTsKKyAgICBGWF9JTlQzMiBuSW5kZXggPSAwOworICAgIEZYX0lOVDMyIGkgPSAwOworICAgIEZYX0lOVDMyIHN6ID0gMDsKKyAgICBmb3IgKGkgPSAwLCBzeiA9IG1fU2VjdGlvbkFycmF5LkdldFNpemUoKTsgaSA8IHN6ICYmIGkgPCBuZXdwbGFjZS5uU2VjSW5kZXg7IGkrKykgeworICAgICAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fU2VjdGlvbkFycmF5LkdldEF0KGkpKSB7CisgICAgICAgICAgICBuSW5kZXggKz0gcFNlY3Rpb24tPm1fV29yZEFycmF5LkdldFNpemUoKTsKKyAgICAgICAgICAgIGlmIChpICE9IG1fU2VjdGlvbkFycmF5LkdldFNpemUoKSAtIDEpIHsKKyAgICAgICAgICAgICAgICBuSW5kZXggKz0gUFZUX1JFVFVSTl9MRU5HVEg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGkgPj0gMCAmJiBpIDwgbV9TZWN0aW9uQXJyYXkuR2V0U2l6ZSgpKSB7CisgICAgICAgIG5JbmRleCArPSBuZXdwbGFjZS5uV29yZEluZGV4ICsgUFZUX1JFVFVSTl9MRU5HVEg7CisgICAgfQorICAgIHJldHVybiBuSW5kZXg7Cit9CitDUFZUX1dvcmRQbGFjZSBDUERGX1ZhcmlhYmxlVGV4dDo6V29yZEluZGV4VG9Xb3JkUGxhY2UoRlhfSU5UMzIgaW5kZXgpIGNvbnN0Cit7CisgICAgQ1BWVF9Xb3JkUGxhY2UgcGxhY2UgPSBHZXRCZWdpbldvcmRQbGFjZSgpOworICAgIEZYX0lOVDMyIG5PbGRJbmRleCA9IDAgLCBuSW5kZXggPSAwOworICAgIEZYX0JPT0wgYkZpbmQgPSBGQUxTRTsKKyAgICBmb3IgKEZYX0lOVDMyIGkgPSAwLCBzeiA9IG1fU2VjdGlvbkFycmF5LkdldFNpemUoKTsgaSA8IHN6OyBpKyspIHsKKyAgICAgICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdChpKSkgeworICAgICAgICAgICAgbkluZGV4ICs9IHBTZWN0aW9uLT5tX1dvcmRBcnJheS5HZXRTaXplKCk7CisgICAgICAgICAgICBpZiAobkluZGV4ID09IGluZGV4KSB7CisgICAgICAgICAgICAgICAgcGxhY2UgPSBwU2VjdGlvbi0+R2V0RW5kV29yZFBsYWNlKCk7CisgICAgICAgICAgICAgICAgYkZpbmQgPSBUUlVFOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIGlmIChuSW5kZXggPiBpbmRleCkgeworICAgICAgICAgICAgICAgIHBsYWNlLm5TZWNJbmRleCA9IGk7CisgICAgICAgICAgICAgICAgcGxhY2UubldvcmRJbmRleCA9IGluZGV4IC0gbk9sZEluZGV4IC0gMTsKKyAgICAgICAgICAgICAgICBwU2VjdGlvbi0+VXBkYXRlV29yZFBsYWNlKHBsYWNlKTsKKyAgICAgICAgICAgICAgICBiRmluZCA9IFRSVUU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaSAhPSBtX1NlY3Rpb25BcnJheS5HZXRTaXplKCkgLSAxKSB7CisgICAgICAgICAgICAgICAgbkluZGV4ICs9IFBWVF9SRVRVUk5fTEVOR1RIOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbk9sZEluZGV4ID0gbkluZGV4OworICAgICAgICB9CisgICAgfQorICAgIGlmICghYkZpbmQpIHsKKyAgICAgICAgcGxhY2UgPSBHZXRFbmRXb3JkUGxhY2UoKTsKKyAgICB9CisgICAgcmV0dXJuIHBsYWNlOworfQorQ1BWVF9Xb3JkUGxhY2UgQ1BERl9WYXJpYWJsZVRleHQ6OkdldEJlZ2luV29yZFBsYWNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iSW5pdGlhbCA/IENQVlRfV29yZFBsYWNlKDAsIDAsIC0xKSA6IENQVlRfV29yZFBsYWNlKCk7Cit9CitDUFZUX1dvcmRQbGFjZSBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0RW5kV29yZFBsYWNlKCkgY29uc3QKK3sKKyAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fU2VjdGlvbkFycmF5LkdldEF0KG1fU2VjdGlvbkFycmF5LkdldFNpemUoKSAtIDEpKSB7CisgICAgICAgIHJldHVybiBwU2VjdGlvbi0+R2V0RW5kV29yZFBsYWNlKCk7CisgICAgfQorICAgIHJldHVybiBDUFZUX1dvcmRQbGFjZSgpOworfQorQ1BWVF9Xb3JkUGxhY2UgQ1BERl9WYXJpYWJsZVRleHQ6OkdldFByZXZXb3JkUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3QKK3sKKyAgICBpZiggcGxhY2UublNlY0luZGV4IDwgMCkgeworICAgICAgICByZXR1cm4gR2V0QmVnaW5Xb3JkUGxhY2UoKTsKKyAgICB9CisgICAgaWYgKHBsYWNlLm5TZWNJbmRleCA+PSBtX1NlY3Rpb25BcnJheS5HZXRTaXplKCkpIHsKKyAgICAgICAgcmV0dXJuIEdldEVuZFdvcmRQbGFjZSgpOworICAgIH0KKyAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fU2VjdGlvbkFycmF5LkdldEF0KHBsYWNlLm5TZWNJbmRleCkpIHsKKyAgICAgICAgaWYgKHBsYWNlLldvcmRDbXAocFNlY3Rpb24tPkdldEJlZ2luV29yZFBsYWNlKCkpIDw9IDApIHsKKyAgICAgICAgICAgIGlmIChDU2VjdGlvbiAqIHBQcmV2U2VjdGlvbiA9IG1fU2VjdGlvbkFycmF5LkdldEF0KHBsYWNlLm5TZWNJbmRleCAtIDEpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBQcmV2U2VjdGlvbi0+R2V0RW5kV29yZFBsYWNlKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBHZXRCZWdpbldvcmRQbGFjZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHBTZWN0aW9uLT5HZXRQcmV2V29yZFBsYWNlKHBsYWNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcGxhY2U7Cit9CitDUFZUX1dvcmRQbGFjZSBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0TmV4dFdvcmRQbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdAoreworICAgIGlmIChwbGFjZS5uU2VjSW5kZXggPCAwKSB7CisgICAgICAgIHJldHVybiBHZXRCZWdpbldvcmRQbGFjZSgpOworICAgIH0KKyAgICBpZiAocGxhY2UublNlY0luZGV4ID49IG1fU2VjdGlvbkFycmF5LkdldFNpemUoKSkgeworICAgICAgICByZXR1cm4gR2V0RW5kV29yZFBsYWNlKCk7CisgICAgfQorICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQocGxhY2UublNlY0luZGV4KSkgeworICAgICAgICBpZiAocGxhY2UuV29yZENtcChwU2VjdGlvbi0+R2V0RW5kV29yZFBsYWNlKCkpID49IDApIHsKKyAgICAgICAgICAgIGlmIChDU2VjdGlvbiAqIHBOZXh0U2VjdGlvbiA9IG1fU2VjdGlvbkFycmF5LkdldEF0KHBsYWNlLm5TZWNJbmRleCArIDEpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBOZXh0U2VjdGlvbi0+R2V0QmVnaW5Xb3JkUGxhY2UoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEVuZFdvcmRQbGFjZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHBTZWN0aW9uLT5HZXROZXh0V29yZFBsYWNlKHBsYWNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcGxhY2U7Cit9CitDUFZUX1dvcmRQbGFjZSBDUERGX1ZhcmlhYmxlVGV4dDo6U2VhcmNoV29yZFBsYWNlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3QKK3sKKyAgICBDUERGX1BvaW50IHB0ID0gT3V0VG9Jbihwb2ludCk7CisgICAgQ1BWVF9Xb3JkUGxhY2UgcGxhY2UgPSBHZXRCZWdpbldvcmRQbGFjZSgpOworICAgIEZYX0lOVDMyIG5MZWZ0ID0gMDsKKyAgICBGWF9JTlQzMiBuUmlnaHQgPSBtX1NlY3Rpb25BcnJheS5HZXRTaXplKCkgLSAxOworICAgIEZYX0lOVDMyIG5NaWQgPSBtX1NlY3Rpb25BcnJheS5HZXRTaXplKCkgLyAyOworICAgIEZYX0JPT0wgYlVwID0gVFJVRTsKKyAgICBGWF9CT09MIGJEb3duID0gVFJVRTsKKyAgICB3aGlsZSAobkxlZnQgPD0gblJpZ2h0KSB7CisgICAgICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQobk1pZCkpIHsKKyAgICAgICAgICAgIGlmIChJc0Zsb2F0QmlnZ2VyKHB0LnksIHBTZWN0aW9uLT5tX1NlY0luZm8ucmNTZWN0aW9uLnRvcCkpIHsKKyAgICAgICAgICAgICAgICBiVXAgPSBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChJc0Zsb2F0QmlnZ2VyKHBTZWN0aW9uLT5tX1NlY0luZm8ucmNTZWN0aW9uLmJvdHRvbSwgcHQueSkpIHsKKyAgICAgICAgICAgICAgICBiRG93biA9IEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKElzRmxvYXRTbWFsbGVyKHB0LnksIHBTZWN0aW9uLT5tX1NlY0luZm8ucmNTZWN0aW9uLnRvcCkpIHsKKyAgICAgICAgICAgICAgICBuUmlnaHQgPSBuTWlkIC0gMTsKKyAgICAgICAgICAgICAgICBuTWlkID0gKG5MZWZ0ICsgblJpZ2h0KSAvIDI7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKElzRmxvYXRCaWdnZXIocHQueSwgcFNlY3Rpb24tPm1fU2VjSW5mby5yY1NlY3Rpb24uYm90dG9tKSkgeworICAgICAgICAgICAgICAgIG5MZWZ0ID0gbk1pZCArIDE7CisgICAgICAgICAgICAgICAgbk1pZCA9IChuTGVmdCArIG5SaWdodCkgLyAyOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwbGFjZSA9IHBTZWN0aW9uLT5TZWFyY2hXb3JkUGxhY2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BERl9Qb2ludChwdC54IC0gcFNlY3Rpb24tPm1fU2VjSW5mby5yY1NlY3Rpb24ubGVmdCwgcHQueSAtIHBTZWN0aW9uLT5tX1NlY0luZm8ucmNTZWN0aW9uLnRvcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgcGxhY2UublNlY0luZGV4ID0gbk1pZDsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGxhY2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYlVwKSB7CisgICAgICAgIHBsYWNlID0gR2V0QmVnaW5Xb3JkUGxhY2UoKTsKKyAgICB9CisgICAgaWYgKGJEb3duKSB7CisgICAgICAgIHBsYWNlID0gR2V0RW5kV29yZFBsYWNlKCk7CisgICAgfQorICAgIHJldHVybiBwbGFjZTsKK30KK0NQVlRfV29yZFBsYWNlIENQREZfVmFyaWFibGVUZXh0OjpHZXRVcFdvcmRQbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpIGNvbnN0Cit7CisgICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdChwbGFjZS5uU2VjSW5kZXgpKSB7CisgICAgICAgIENQVlRfV29yZFBsYWNlIHRlbXAgPSAgcGxhY2U7CisgICAgICAgIENQREZfUG9pbnQgcHQgPSBPdXRUb0luKHBvaW50KTsKKyAgICAgICAgaWYgKHRlbXAubkxpbmVJbmRleC0tID4gMCkgeworICAgICAgICAgICAgcmV0dXJuIHBTZWN0aW9uLT5TZWFyY2hXb3JkUGxhY2UocHQueCAtIHBTZWN0aW9uLT5tX1NlY0luZm8ucmNTZWN0aW9uLmxlZnQsIHRlbXApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHRlbXAublNlY0luZGV4LS0gPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKENTZWN0aW9uICogcExhc3RTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQodGVtcC5uU2VjSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgICAgIHRlbXAubkxpbmVJbmRleCA9IHBMYXN0U2VjdGlvbi0+bV9MaW5lQXJyYXkuR2V0U2l6ZSgpIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBMYXN0U2VjdGlvbi0+U2VhcmNoV29yZFBsYWNlKHB0LnggLSBwTGFzdFNlY3Rpb24tPm1fU2VjSW5mby5yY1NlY3Rpb24ubGVmdCwgdGVtcCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwbGFjZTsKK30KK0NQVlRfV29yZFBsYWNlIENQREZfVmFyaWFibGVUZXh0OjpHZXREb3duV29yZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3QKK3sKKyAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fU2VjdGlvbkFycmF5LkdldEF0KHBsYWNlLm5TZWNJbmRleCkpIHsKKyAgICAgICAgQ1BWVF9Xb3JkUGxhY2UgdGVtcCA9ICBwbGFjZTsKKyAgICAgICAgQ1BERl9Qb2ludCBwdCA9IE91dFRvSW4ocG9pbnQpOworICAgICAgICBpZiAodGVtcC5uTGluZUluZGV4KysgPCBwU2VjdGlvbi0+bV9MaW5lQXJyYXkuR2V0U2l6ZSgpIC0gMSkgeworICAgICAgICAgICAgcmV0dXJuIHBTZWN0aW9uLT5TZWFyY2hXb3JkUGxhY2UocHQueCAtIHBTZWN0aW9uLT5tX1NlY0luZm8ucmNTZWN0aW9uLmxlZnQsIHRlbXApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHRlbXAublNlY0luZGV4KysgPCBtX1NlY3Rpb25BcnJheS5HZXRTaXplKCkgLSAxKSB7CisgICAgICAgICAgICAgICAgaWYgKENTZWN0aW9uICogcE5leHRTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQodGVtcC5uU2VjSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgICAgIHRlbXAubkxpbmVJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwTmV4dFNlY3Rpb24tPlNlYXJjaFdvcmRQbGFjZShwdC54IC0gcFNlY3Rpb24tPm1fU2VjSW5mby5yY1NlY3Rpb24ubGVmdCwgdGVtcCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwbGFjZTsKK30KK0NQVlRfV29yZFBsYWNlIENQREZfVmFyaWFibGVUZXh0OjpHZXRMaW5lQmVnaW5QbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdAoreworICAgIHJldHVybiBDUFZUX1dvcmRQbGFjZShwbGFjZS5uU2VjSW5kZXgsIHBsYWNlLm5MaW5lSW5kZXgsIC0xKTsKK30KK0NQVlRfV29yZFBsYWNlIENQREZfVmFyaWFibGVUZXh0OjpHZXRMaW5lRW5kUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3QKK3sKKyAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fU2VjdGlvbkFycmF5LkdldEF0KHBsYWNlLm5TZWNJbmRleCkpCisgICAgICAgIGlmIChDTGluZSAqIHBMaW5lID0gcFNlY3Rpb24tPm1fTGluZUFycmF5LkdldEF0KHBsYWNlLm5MaW5lSW5kZXgpKSB7CisgICAgICAgICAgICByZXR1cm4gcExpbmUtPkdldEVuZFdvcmRQbGFjZSgpOworICAgICAgICB9CisgICAgcmV0dXJuIHBsYWNlOworfQorQ1BWVF9Xb3JkUGxhY2UgQ1BERl9WYXJpYWJsZVRleHQ6OkdldFNlY3Rpb25CZWdpblBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0Cit7CisgICAgcmV0dXJuIENQVlRfV29yZFBsYWNlKHBsYWNlLm5TZWNJbmRleCwgMCwgLTEpOworfQorQ1BWVF9Xb3JkUGxhY2UgQ1BERl9WYXJpYWJsZVRleHQ6OkdldFNlY3Rpb25FbmRQbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdAoreworICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQocGxhY2UublNlY0luZGV4KSkgeworICAgICAgICByZXR1cm4gcFNlY3Rpb24tPkdldEVuZFdvcmRQbGFjZSgpOworICAgIH0KKyAgICByZXR1cm4gcGxhY2U7Cit9CitGWF9JTlQzMiBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0VG90YWxXb3JkcygpIGNvbnN0Cit7CisgICAgRlhfSU5UMzIgblRvdGFsID0gMDsKKyAgICBmb3IgKEZYX0lOVDMyIGkgPSAwLCBzeiA9IG1fU2VjdGlvbkFycmF5LkdldFNpemUoKTsgaSA8IHN6OyBpKyspCisgICAgICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQoaSkpIHsKKyAgICAgICAgICAgIG5Ub3RhbCArPSAocFNlY3Rpb24tPm1fV29yZEFycmF5LkdldFNpemUoKSArIFBWVF9SRVRVUk5fTEVOR1RIKTsKKyAgICAgICAgfQorICAgIHJldHVybiBuVG90YWwgLSBQVlRfUkVUVVJOX0xFTkdUSDsKK30KK3ZvaWQgQ1BERl9WYXJpYWJsZVRleHQ6OlJlc2V0U2VjdGlvbkFycmF5KCkKK3sKKyAgICBmb3IgKEZYX0lOVDMyIHMgPSAwLCBzeiA9IG1fU2VjdGlvbkFycmF5LkdldFNpemUoKTsgcyA8IHN6OyBzKyspIHsKKyAgICAgICAgZGVsZXRlIG1fU2VjdGlvbkFycmF5LkdldEF0KHMpOworICAgIH0KKyAgICBtX1NlY3Rpb25BcnJheS5SZW1vdmVBbGwoKTsKK30KK0NQVlRfV29yZFBsYWNlIENQREZfVmFyaWFibGVUZXh0OjpBZGRTZWN0aW9uKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIGNvbnN0IENQVlRfU2VjdGlvbkluZm8gJiBzZWNpbmZvKQoreworICAgIGlmIChJc1ZhbGlkKCkgJiYgIW1fYk11bHRpTGluZSkgeworICAgICAgICByZXR1cm4gcGxhY2U7CisgICAgfQorICAgIEZYX0lOVDMyIG5TZWNJbmRleCA9IEZQREZfTUFYKEZQREZfTUlOKHBsYWNlLm5TZWNJbmRleCwgbV9TZWN0aW9uQXJyYXkuR2V0U2l6ZSgpKSwgMCk7CisgICAgQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IEZYX05FVyBDU2VjdGlvbih0aGlzKTsKKyAgICBpZiAoIXBTZWN0aW9uKSB7CisgICAgICAgIHJldHVybiBwbGFjZTsKKyAgICB9CisgICAgcFNlY3Rpb24tPm1fU2VjSW5mbyA9IHNlY2luZm87CisgICAgcFNlY3Rpb24tPlNlY1BsYWNlLm5TZWNJbmRleCA9IG5TZWNJbmRleDsKKyAgICBpZiAoblNlY0luZGV4ID09IG1fU2VjdGlvbkFycmF5LkdldFNpemUoKSkgeworICAgICAgICBtX1NlY3Rpb25BcnJheS5BZGQocFNlY3Rpb24pOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fU2VjdGlvbkFycmF5Lkluc2VydEF0KG5TZWNJbmRleCwgcFNlY3Rpb24pOworICAgIH0KKyAgICByZXR1cm4gcGxhY2U7Cit9CitDUFZUX1dvcmRQbGFjZSBDUERGX1ZhcmlhYmxlVGV4dDo6QWRkTGluZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBjb25zdCBDUFZUX0xpbmVJbmZvICYgbGluZWluZm8pCit7CisgICAgaWYgKG1fU2VjdGlvbkFycmF5LklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gcGxhY2U7CisgICAgfQorICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQocGxhY2UublNlY0luZGV4KSkgeworICAgICAgICByZXR1cm4gcFNlY3Rpb24tPkFkZExpbmUobGluZWluZm8pOworICAgIH0KKyAgICByZXR1cm4gcGxhY2U7Cit9CitDUFZUX1dvcmRQbGFjZSBDUERGX1ZhcmlhYmxlVGV4dDo6QWRkV29yZChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRJbmZvICYgd29yZGluZm8pCit7CisgICAgaWYgKG1fU2VjdGlvbkFycmF5LkdldFNpemUoKSA8PSAwKSB7CisgICAgICAgIHJldHVybiBwbGFjZTsKKyAgICB9CisgICAgQ1BWVF9Xb3JkUGxhY2UgbmV3cGxhY2UgPSBwbGFjZTsKKyAgICBuZXdwbGFjZS5uU2VjSW5kZXggPSBGUERGX01BWChGUERGX01JTihuZXdwbGFjZS5uU2VjSW5kZXgsIG1fU2VjdGlvbkFycmF5LkdldFNpemUoKSAtIDEpLCAwKTsKKyAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fU2VjdGlvbkFycmF5LkdldEF0KG5ld3BsYWNlLm5TZWNJbmRleCkpIHsKKyAgICAgICAgcmV0dXJuIHBTZWN0aW9uLT5BZGRXb3JkKG5ld3BsYWNlLCB3b3JkaW5mbyk7CisgICAgfQorICAgIHJldHVybiBwbGFjZTsKK30KK0ZYX0JPT0wgQ1BERl9WYXJpYWJsZVRleHQ6OkdldFdvcmRJbmZvKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIENQVlRfV29yZEluZm8gJiB3b3JkaW5mbykKK3sKKyAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fU2VjdGlvbkFycmF5LkdldEF0KHBsYWNlLm5TZWNJbmRleCkpIHsKKyAgICAgICAgaWYgKENQVlRfV29yZEluZm8gKiBwV29yZCA9IHBTZWN0aW9uLT5tX1dvcmRBcnJheS5HZXRBdChwbGFjZS5uV29yZEluZGV4KSkgeworICAgICAgICAgICAgd29yZGluZm8gPSAqcFdvcmQ7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitGWF9CT09MIENQREZfVmFyaWFibGVUZXh0OjpTZXRXb3JkSW5mbyhjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRJbmZvICYgd29yZGluZm8pCit7CisgICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdChwbGFjZS5uU2VjSW5kZXgpKSB7CisgICAgICAgIGlmIChDUFZUX1dvcmRJbmZvICogcFdvcmQgPSBwU2VjdGlvbi0+bV9Xb3JkQXJyYXkuR2V0QXQocGxhY2UubldvcmRJbmRleCkpIHsKKyAgICAgICAgICAgICpwV29yZCA9IHdvcmRpbmZvOworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorRlhfQk9PTCBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0TGluZUluZm8oY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSwgQ1BWVF9MaW5lSW5mbyAmIGxpbmVpbmZvKQoreworICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQocGxhY2UublNlY0luZGV4KSkgeworICAgICAgICBpZiAoQ0xpbmUgKiBwTGluZSA9IHBTZWN0aW9uLT5tX0xpbmVBcnJheS5HZXRBdChwbGFjZS5uTGluZUluZGV4KSkgeworICAgICAgICAgICAgbGluZWluZm8gPSBwTGluZS0+bV9MaW5lSW5mbzsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK0ZYX0JPT0wgQ1BERl9WYXJpYWJsZVRleHQ6OkdldFNlY3Rpb25JbmZvKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIENQVlRfU2VjdGlvbkluZm8gJiBzZWNpbmZvKQoreworICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQocGxhY2UublNlY0luZGV4KSkgeworICAgICAgICBzZWNpbmZvID0gcFNlY3Rpb24tPm1fU2VjSW5mbzsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK0NQREZfUmVjdCBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0Q29udGVudFJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBJblRvT3V0KENQREZfRWRpdENvbnRhaW5lcjo6R2V0Q29udGVudFJlY3QoKSk7Cit9CitGWF9GTE9BVCBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0V29yZEZvbnRTaXplKGNvbnN0IENQVlRfV29yZEluZm8gJiBXb3JkSW5mbywgRlhfQk9PTCBiRmFjdEZvbnRTaXplKQoreworICAgIHJldHVybiBtX2JSaWNoVGV4dCAmJiBXb3JkSW5mby5wV29yZFByb3BzID8gKFdvcmRJbmZvLnBXb3JkUHJvcHMtPm5TY3JpcHRUeXBlID09IFBWVFdPUkRfU0NSSVBUX05PUk1BTCB8fCBiRmFjdEZvbnRTaXplID8gV29yZEluZm8ucFdvcmRQcm9wcy0+ZkZvbnRTaXplIDogV29yZEluZm8ucFdvcmRQcm9wcy0+ZkZvbnRTaXplICogUFZUX0hBTEYpIDogR2V0Rm9udFNpemUoKTsKK30KK0ZYX0lOVDMyIENQREZfVmFyaWFibGVUZXh0OjpHZXRXb3JkRm9udEluZGV4KGNvbnN0IENQVlRfV29yZEluZm8gJiBXb3JkSW5mbykKK3sKKyAgICByZXR1cm4gbV9iUmljaFRleHQgJiYgV29yZEluZm8ucFdvcmRQcm9wcyA/IFdvcmRJbmZvLnBXb3JkUHJvcHMtPm5Gb250SW5kZXggOiBXb3JkSW5mby5uRm9udEluZGV4OworfQorRlhfRkxPQVQgQ1BERl9WYXJpYWJsZVRleHQ6OkdldFdvcmRXaWR0aChGWF9JTlQzMiBuRm9udEluZGV4LCBGWF9XT1JEIFdvcmQsIEZYX1dPUkQgU3ViV29yZCwKKyAgICAgICAgRlhfRkxPQVQgZkNoYXJTcGFjZSwgRlhfSU5UMzIgbkhvcnpTY2FsZSwKKyAgICAgICAgRlhfRkxPQVQgZkZvbnRTaXplLCBGWF9GTE9BVCBmV29yZFRhaWwsIEZYX0lOVDMyIG5Xb3JkU3R5bGUpCit7CisgICAgcmV0dXJuIChHZXRDaGFyV2lkdGgobkZvbnRJbmRleCwgV29yZCwgU3ViV29yZCwgbldvcmRTdHlsZSkgKiBmRm9udFNpemUgKiBQVlRfRk9OVFNDQUxFICsgZkNoYXJTcGFjZSkgKiBuSG9yelNjYWxlICogUFZUX1BFUkNFTlQgKyBmV29yZFRhaWw7Cit9CitGWF9GTE9BVCBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0V29yZFdpZHRoKGNvbnN0IENQVlRfV29yZEluZm8gJiBXb3JkSW5mbykKK3sKKyAgICByZXR1cm4gR2V0V29yZFdpZHRoKEdldFdvcmRGb250SW5kZXgoV29yZEluZm8pLCBXb3JkSW5mby5Xb3JkLCBHZXRTdWJXb3JkKCksIEdldENoYXJTcGFjZShXb3JkSW5mbyksIEdldEhvcnpTY2FsZShXb3JkSW5mbyksCisgICAgICAgICAgICAgICAgICAgICAgICBHZXRXb3JkRm9udFNpemUoV29yZEluZm8pLCBXb3JkSW5mby5mV29yZFRhaWwsCisgICAgICAgICAgICAgICAgICAgICAgICBXb3JkSW5mby5wV29yZFByb3BzID8gV29yZEluZm8ucFdvcmRQcm9wcy0+bldvcmRTdHlsZSA6IDApOworfQorRlhfRkxPQVQgQ1BERl9WYXJpYWJsZVRleHQ6OkdldExpbmVBc2NlbnQoY29uc3QgQ1BWVF9TZWN0aW9uSW5mbyAmIFNlY0luZm8pCit7CisgICAgcmV0dXJuIG1fYlJpY2hUZXh0ICYmIFNlY0luZm8ucFdvcmRQcm9wcyA/IEdldEZvbnRBc2NlbnQoU2VjSW5mby5wV29yZFByb3BzLT5uRm9udEluZGV4LCBTZWNJbmZvLnBXb3JkUHJvcHMtPmZGb250U2l6ZSkgOgorICAgICAgICAgICBHZXRGb250QXNjZW50KEdldERlZmF1bHRGb250SW5kZXgoKSwgR2V0Rm9udFNpemUoKSk7Cit9CitGWF9GTE9BVCBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0TGluZURlc2NlbnQoY29uc3QgQ1BWVF9TZWN0aW9uSW5mbyAmIFNlY0luZm8pCit7CisgICAgcmV0dXJuIG1fYlJpY2hUZXh0ICYmIFNlY0luZm8ucFdvcmRQcm9wcyA/IEdldEZvbnREZXNjZW50KFNlY0luZm8ucFdvcmRQcm9wcy0+bkZvbnRJbmRleCwgU2VjSW5mby5wV29yZFByb3BzLT5mRm9udFNpemUpIDoKKyAgICAgICAgICAgR2V0Rm9udERlc2NlbnQoR2V0RGVmYXVsdEZvbnRJbmRleCgpLCBHZXRGb250U2l6ZSgpKTsKK30KK0ZYX0ZMT0FUIENQREZfVmFyaWFibGVUZXh0OjpHZXRGb250QXNjZW50KEZYX0lOVDMyIG5Gb250SW5kZXgsIEZYX0ZMT0FUIGZGb250U2l6ZSkKK3sKKyAgICByZXR1cm4gKEZYX0ZMT0FUKUdldFR5cGVBc2NlbnQobkZvbnRJbmRleCkgKiBmRm9udFNpemUgKiBQVlRfRk9OVFNDQUxFOworfQorRlhfRkxPQVQgQ1BERl9WYXJpYWJsZVRleHQ6OkdldEZvbnREZXNjZW50KEZYX0lOVDMyIG5Gb250SW5kZXgsIEZYX0ZMT0FUIGZGb250U2l6ZSkKK3sKKyAgICByZXR1cm4gKEZYX0ZMT0FUKUdldFR5cGVEZXNjZW50KG5Gb250SW5kZXgpICogZkZvbnRTaXplICogUFZUX0ZPTlRTQ0FMRTsKK30KK0ZYX0ZMT0FUIENQREZfVmFyaWFibGVUZXh0OjpHZXRXb3JkQXNjZW50KGNvbnN0IENQVlRfV29yZEluZm8gJiBXb3JkSW5mbywgRlhfRkxPQVQgZkZvbnRTaXplKQoreworICAgIHJldHVybiBHZXRGb250QXNjZW50KEdldFdvcmRGb250SW5kZXgoV29yZEluZm8pLCBmRm9udFNpemUpOworfQorRlhfRkxPQVQgQ1BERl9WYXJpYWJsZVRleHQ6OkdldFdvcmREZXNjZW50KGNvbnN0IENQVlRfV29yZEluZm8gJiBXb3JkSW5mbywgRlhfRkxPQVQgZkZvbnRTaXplKQoreworICAgIHJldHVybiBHZXRGb250RGVzY2VudChHZXRXb3JkRm9udEluZGV4KFdvcmRJbmZvKSwgZkZvbnRTaXplKTsKK30KK0ZYX0ZMT0FUIENQREZfVmFyaWFibGVUZXh0OjpHZXRXb3JkQXNjZW50KGNvbnN0IENQVlRfV29yZEluZm8gJiBXb3JkSW5mbywgRlhfQk9PTCBiRmFjdEZvbnRTaXplKQoreworICAgIHJldHVybiBHZXRGb250QXNjZW50KEdldFdvcmRGb250SW5kZXgoV29yZEluZm8pLCBHZXRXb3JkRm9udFNpemUoV29yZEluZm8sIGJGYWN0Rm9udFNpemUpKTsKK30KK0ZYX0ZMT0FUIENQREZfVmFyaWFibGVUZXh0OjpHZXRXb3JkRGVzY2VudChjb25zdCBDUFZUX1dvcmRJbmZvICYgV29yZEluZm8sIEZYX0JPT0wgYkZhY3RGb250U2l6ZSkKK3sKKyAgICByZXR1cm4gR2V0Rm9udERlc2NlbnQoR2V0V29yZEZvbnRJbmRleChXb3JkSW5mbyksIEdldFdvcmRGb250U2l6ZShXb3JkSW5mbywgYkZhY3RGb250U2l6ZSkpOworfQorRlhfRkxPQVQgQ1BERl9WYXJpYWJsZVRleHQ6OkdldExpbmVMZWFkaW5nKGNvbnN0IENQVlRfU2VjdGlvbkluZm8gJiBTZWNJbmZvKQoreworICAgIHJldHVybiBtX2JSaWNoVGV4dCAmJiBTZWNJbmZvLnBTZWNQcm9wcyA/IFNlY0luZm8ucFNlY1Byb3BzLT5mTGluZUxlYWRpbmcgOiBtX2ZMaW5lTGVhZGluZzsKK30KK0ZYX0ZMT0FUIENQREZfVmFyaWFibGVUZXh0OjpHZXRMaW5lSW5kZW50KGNvbnN0IENQVlRfU2VjdGlvbkluZm8gJiBTZWNJbmZvKQoreworICAgIHJldHVybiBtX2JSaWNoVGV4dCAmJiBTZWNJbmZvLnBTZWNQcm9wcyA/IFNlY0luZm8ucFNlY1Byb3BzLT5mTGluZUluZGVudCA6IDAuMGY7Cit9CitGWF9JTlQzMiBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0QWxpZ25tZW50KGNvbnN0IENQVlRfU2VjdGlvbkluZm8mIFNlY0luZm8pCit7CisgICAgcmV0dXJuIG1fYlJpY2hUZXh0ICYmIFNlY0luZm8ucFNlY1Byb3BzID8gU2VjSW5mby5wU2VjUHJvcHMtPm5BbGlnbm1lbnQgOiB0aGlzLT5tX25BbGlnbm1lbnQ7Cit9CitGWF9GTE9BVCBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0Q2hhclNwYWNlKGNvbnN0IENQVlRfV29yZEluZm8gJiBXb3JkSW5mbykKK3sKKyAgICByZXR1cm4gbV9iUmljaFRleHQgJiYgV29yZEluZm8ucFdvcmRQcm9wcyA/IFdvcmRJbmZvLnBXb3JkUHJvcHMtPmZDaGFyU3BhY2UgOiBtX2ZDaGFyU3BhY2U7Cit9CitGWF9JTlQzMiBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0SG9yelNjYWxlKGNvbnN0IENQVlRfV29yZEluZm8gJiBXb3JkSW5mbykKK3sKKyAgICByZXR1cm4gbV9iUmljaFRleHQgJiYgV29yZEluZm8ucFdvcmRQcm9wcyA/IFdvcmRJbmZvLnBXb3JkUHJvcHMtPm5Ib3J6U2NhbGUgOiBtX25Ib3J6U2NhbGU7Cit9Cit2b2lkIENQREZfVmFyaWFibGVUZXh0OjpDbGVhclNlY3Rpb25SaWdodFdvcmRzKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpCit7CisgICAgQ1BWVF9Xb3JkUGxhY2Ugd29yZHBsYWNlID0gQWp1c3RMaW5lSGVhZGVyKHBsYWNlLCBUUlVFKTsKKyAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fU2VjdGlvbkFycmF5LkdldEF0KHBsYWNlLm5TZWNJbmRleCkpIHsKKyAgICAgICAgZm9yIChGWF9JTlQzMiB3ID0gcFNlY3Rpb24tPm1fV29yZEFycmF5LkdldFNpemUoKSAtIDE7IHcgPiB3b3JkcGxhY2UubldvcmRJbmRleDsgdy0tKSB7CisgICAgICAgICAgICBkZWxldGUgcFNlY3Rpb24tPm1fV29yZEFycmF5LkdldEF0KHcpOworICAgICAgICAgICAgcFNlY3Rpb24tPm1fV29yZEFycmF5LlJlbW92ZUF0KHcpOworICAgICAgICB9CisgICAgfQorfQorQ1BWVF9Xb3JkUGxhY2UgQ1BERl9WYXJpYWJsZVRleHQ6OkFqdXN0TGluZUhlYWRlcihjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBGWF9CT09MIGJQcmV2T3JOZXh0KSBjb25zdAoreworICAgIGlmIChwbGFjZS5uV29yZEluZGV4IDwgMCAmJiBwbGFjZS5uTGluZUluZGV4ID4gMCkgeworICAgICAgICBpZiAoYlByZXZPck5leHQpIHsKKyAgICAgICAgICAgIHJldHVybiBHZXRQcmV2V29yZFBsYWNlKHBsYWNlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBHZXROZXh0V29yZFBsYWNlKHBsYWNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcGxhY2U7Cit9CitGWF9CT09MIENQREZfVmFyaWFibGVUZXh0OjpDbGVhckVtcHR5U2VjdGlvbihjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKQoreworICAgIGlmIChwbGFjZS5uU2VjSW5kZXggPT0gMCAmJiBtX1NlY3Rpb25BcnJheS5HZXRTaXplKCkgPT0gMSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQocGxhY2UublNlY0luZGV4KSkgeworICAgICAgICBpZiAocFNlY3Rpb24tPm1fV29yZEFycmF5LkdldFNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICBkZWxldGUgcFNlY3Rpb247CisgICAgICAgICAgICBtX1NlY3Rpb25BcnJheS5SZW1vdmVBdChwbGFjZS5uU2VjSW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQordm9pZCBDUERGX1ZhcmlhYmxlVGV4dDo6Q2xlYXJFbXB0eVNlY3Rpb25zKGNvbnN0IENQVlRfV29yZFJhbmdlICYgUGxhY2VSYW5nZSkKK3sKKyAgICBDUFZUX1dvcmRQbGFjZSB3b3JkcGxhY2U7CisgICAgZm9yIChGWF9JTlQzMiBzID0gUGxhY2VSYW5nZS5FbmRQb3MublNlY0luZGV4OyBzID4gUGxhY2VSYW5nZS5CZWdpblBvcy5uU2VjSW5kZXg7IHMtLSkgeworICAgICAgICB3b3JkcGxhY2UublNlY0luZGV4ID0gczsKKyAgICAgICAgQ2xlYXJFbXB0eVNlY3Rpb24od29yZHBsYWNlKTsKKyAgICB9Cit9Cit2b2lkIENQREZfVmFyaWFibGVUZXh0OjpMaW5rTGF0dGVyU2VjdGlvbihjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKQoreworICAgIENQVlRfV29yZFBsYWNlIG9sZHBsYWNlID0gQWp1c3RMaW5lSGVhZGVyKHBsYWNlLCBUUlVFKTsKKyAgICBpZiAoQ1NlY3Rpb24gKiBwTmV4dFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdChwbGFjZS5uU2VjSW5kZXggKyAxKSkgeworICAgICAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fU2VjdGlvbkFycmF5LkdldEF0KG9sZHBsYWNlLm5TZWNJbmRleCkpIHsKKyAgICAgICAgICAgIGZvciAoRlhfSU5UMzIgdyA9IDAsIHN6ID0gcE5leHRTZWN0aW9uLT5tX1dvcmRBcnJheS5HZXRTaXplKCk7IHcgPCBzejsgdysrKSB7CisgICAgICAgICAgICAgICAgaWYgKENQVlRfV29yZEluZm8gKiBwV29yZCA9IHBOZXh0U2VjdGlvbi0+bV9Xb3JkQXJyYXkuR2V0QXQodykpIHsKKyAgICAgICAgICAgICAgICAgICAgb2xkcGxhY2UubldvcmRJbmRleCArKzsKKyAgICAgICAgICAgICAgICAgICAgcFNlY3Rpb24tPkFkZFdvcmQob2xkcGxhY2UsICpwV29yZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRlbGV0ZSBwTmV4dFNlY3Rpb247CisgICAgICAgIG1fU2VjdGlvbkFycmF5LlJlbW92ZUF0KHBsYWNlLm5TZWNJbmRleCArIDEpOworICAgIH0KK30KK3ZvaWQgQ1BERl9WYXJpYWJsZVRleHQ6OkNsZWFyV29yZHMoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiBQbGFjZVJhbmdlKQoreworICAgIENQVlRfV29yZFJhbmdlIE5ld1JhbmdlOworICAgIE5ld1JhbmdlLkJlZ2luUG9zID0gQWp1c3RMaW5lSGVhZGVyKFBsYWNlUmFuZ2UuQmVnaW5Qb3MsIFRSVUUpOworICAgIE5ld1JhbmdlLkVuZFBvcyA9IEFqdXN0TGluZUhlYWRlcihQbGFjZVJhbmdlLkVuZFBvcywgVFJVRSk7CisgICAgZm9yIChGWF9JTlQzMiBzID0gTmV3UmFuZ2UuRW5kUG9zLm5TZWNJbmRleDsgcyA+PSBOZXdSYW5nZS5CZWdpblBvcy5uU2VjSW5kZXg7IHMtLSkgeworICAgICAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fU2VjdGlvbkFycmF5LkdldEF0KHMpKSB7CisgICAgICAgICAgICBwU2VjdGlvbi0+Q2xlYXJXb3JkcyhOZXdSYW5nZSk7CisgICAgICAgIH0KKyAgICB9Cit9CitDUFZUX1dvcmRQbGFjZSBDUERGX1ZhcmlhYmxlVGV4dDo6Q2xlYXJMZWZ0V29yZChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKQoreworICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQocGxhY2UublNlY0luZGV4KSkgeworICAgICAgICBDUFZUX1dvcmRQbGFjZSBsZWZ0cGxhY2UgPSB0aGlzLT5HZXRQcmV2V29yZFBsYWNlKHBsYWNlKTsKKyAgICAgICAgaWYgKGxlZnRwbGFjZSAhPSBwbGFjZSkgeworICAgICAgICAgICAgaWYgKGxlZnRwbGFjZS5uU2VjSW5kZXggIT0gcGxhY2UublNlY0luZGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKHBTZWN0aW9uLT5tX1dvcmRBcnJheS5HZXRTaXplKCkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLT5DbGVhckVtcHR5U2VjdGlvbihwbGFjZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy0+TGlua0xhdHRlclNlY3Rpb24obGVmdHBsYWNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBTZWN0aW9uLT5DbGVhcldvcmQocGxhY2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBsZWZ0cGxhY2U7CisgICAgfQorICAgIHJldHVybiBwbGFjZTsKK30KK0NQVlRfV29yZFBsYWNlIENQREZfVmFyaWFibGVUZXh0OjpDbGVhclJpZ2h0V29yZChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKQoreworICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQocGxhY2UublNlY0luZGV4KSkgeworICAgICAgICBDUFZUX1dvcmRQbGFjZSByaWdodHBsYWNlID0gQWp1c3RMaW5lSGVhZGVyKHRoaXMtPkdldE5leHRXb3JkUGxhY2UocGxhY2UpLCBGQUxTRSk7CisgICAgICAgIGlmIChyaWdodHBsYWNlICE9IHBsYWNlKSB7CisgICAgICAgICAgICBpZihyaWdodHBsYWNlLm5TZWNJbmRleCAhPSBwbGFjZS5uU2VjSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBMaW5rTGF0dGVyU2VjdGlvbihwbGFjZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBTZWN0aW9uLT5DbGVhcldvcmQocmlnaHRwbGFjZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBsYWNlOworfQordm9pZCBDUERGX1ZhcmlhYmxlVGV4dDo6UmVhcnJhbmdlQWxsKCkKK3sKKyAgICBSZWFycmFuZ2UoQ1BWVF9Xb3JkUmFuZ2UoR2V0QmVnaW5Xb3JkUGxhY2UoKSwgR2V0RW5kV29yZFBsYWNlKCkpKTsKK30KK3ZvaWQgQ1BERl9WYXJpYWJsZVRleHQ6OlJlYXJyYW5nZVBhcnQoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiBQbGFjZVJhbmdlKQoreworICAgIFJlYXJyYW5nZShQbGFjZVJhbmdlKTsKK30KK0NQVlRfRmxvYXRSZWN0IENQREZfVmFyaWFibGVUZXh0OjpSZWFycmFuZ2UoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiBQbGFjZVJhbmdlKQoreworICAgIENQVlRfRmxvYXRSZWN0IHJjUmV0OworICAgIGlmIChJc1ZhbGlkKCkpIHsKKyAgICAgICAgaWYgKG1fYkF1dG9Gb250U2l6ZSkgeworICAgICAgICAgICAgU2V0Rm9udFNpemUoR2V0QXV0b0ZvbnRTaXplKCkpOworICAgICAgICAgICAgcmNSZXQgPSBSZWFycmFuZ2VTZWN0aW9ucyhDUFZUX1dvcmRSYW5nZShHZXRCZWdpbldvcmRQbGFjZSgpLCBHZXRFbmRXb3JkUGxhY2UoKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmNSZXQgPSBSZWFycmFuZ2VTZWN0aW9ucyhQbGFjZVJhbmdlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBTZXRDb250ZW50UmVjdChyY1JldCk7CisgICAgcmV0dXJuIHJjUmV0OworfQorRlhfRkxPQVQgQ1BERl9WYXJpYWJsZVRleHQ6OkdldEF1dG9Gb250U2l6ZSgpCit7CisgICAgRlhfSU5UMzIgblRvdGFsID0gc2l6ZW9mKGdGb250U2l6ZVN0ZXBzKSAvIHNpemVvZihGWF9CWVRFKTsKKyAgICBpZiAoSXNNdWx0aUxpbmUoKSkgeworICAgICAgICBuVG90YWwgLz0gNDsKKyAgICB9CisgICAgaWYgKG5Ub3RhbCA8PSAwKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoR2V0UGxhdGVXaWR0aCgpIDw9IDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEZYX0lOVDMyIG5MZWZ0ID0gMDsKKyAgICBGWF9JTlQzMiBuUmlnaHQgPSBuVG90YWwgLSAxOworICAgIEZYX0lOVDMyIG5NaWQgPSBuVG90YWwgLyAyOworICAgIHdoaWxlIChuTGVmdCA8PSBuUmlnaHQpIHsKKyAgICAgICAgaWYgKElzQmlnZ2VyKGdGb250U2l6ZVN0ZXBzW25NaWRdKSkgeworICAgICAgICAgICAgblJpZ2h0ID0gbk1pZCAtIDE7CisgICAgICAgICAgICBuTWlkID0gKG5MZWZ0ICsgblJpZ2h0KSAvIDI7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5MZWZ0ID0gbk1pZCArIDE7CisgICAgICAgICAgICBuTWlkID0gKG5MZWZ0ICsgblJpZ2h0KSAvIDI7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gKEZYX0ZMT0FUKWdGb250U2l6ZVN0ZXBzW25NaWRdOworfQorRlhfQk9PTAlDUERGX1ZhcmlhYmxlVGV4dDo6SXNCaWdnZXIoRlhfRkxPQVQgZkZvbnRTaXplKQoreworICAgIEZYX0JPT0wgYkJpZ2dlciA9ICBGQUxTRTsKKyAgICBDUFZUX1NpemUgc3pUb3RhbDsKKyAgICBmb3IgKEZYX0lOVDMyIHMgPSAwLCBzeiA9IG1fU2VjdGlvbkFycmF5LkdldFNpemUoKTsgcyA8IHN6OyBzKyspIHsKKyAgICAgICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX1NlY3Rpb25BcnJheS5HZXRBdChzKSkgeworICAgICAgICAgICAgQ1BWVF9TaXplIHNpemUgPSBwU2VjdGlvbi0+R2V0U2VjdGlvblNpemUoZkZvbnRTaXplKTsKKyAgICAgICAgICAgIHN6VG90YWwueCA9IEZQREZfTUFYKHNpemUueCwgc3pUb3RhbC54KTsKKyAgICAgICAgICAgIHN6VG90YWwueSArPSBzaXplLnk7CisgICAgICAgICAgICBpZiAoSXNGbG9hdEJpZ2dlcihzelRvdGFsLngsIEdldFBsYXRlV2lkdGgoKSkKKyAgICAgICAgICAgICAgICAgICAgfHwgSXNGbG9hdEJpZ2dlcihzelRvdGFsLnksIEdldFBsYXRlSGVpZ2h0KCkpCisgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICBiQmlnZ2VyID0gVFJVRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYkJpZ2dlcjsKK30KK0NQVlRfRmxvYXRSZWN0IENQREZfVmFyaWFibGVUZXh0OjpSZWFycmFuZ2VTZWN0aW9ucyhjb25zdCBDUFZUX1dvcmRSYW5nZSAmIFBsYWNlUmFuZ2UpCit7CisgICAgQ1BWVF9Xb3JkUGxhY2UgcGxhY2U7CisgICAgRlhfRkxPQVQgZlBvc1kgPSAwOworICAgIEZYX0ZMT0FUIGZPbGRIZWlnaHQ7CisgICAgRlhfSU5UMzIgblNTZWNJbmRleCA9IFBsYWNlUmFuZ2UuQmVnaW5Qb3MublNlY0luZGV4OworICAgIEZYX0lOVDMyIG5FU2VjSW5kZXggPSBQbGFjZVJhbmdlLkVuZFBvcy5uU2VjSW5kZXg7CisgICAgQ1BWVF9GbG9hdFJlY3QgcmNSZXQ7CisgICAgZm9yIChGWF9JTlQzMiBzID0gMCwgc3ogPSBtX1NlY3Rpb25BcnJheS5HZXRTaXplKCk7IHMgPCBzejsgcysrKSB7CisgICAgICAgIHBsYWNlLm5TZWNJbmRleCA9IHM7CisgICAgICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9TZWN0aW9uQXJyYXkuR2V0QXQocykpIHsKKyAgICAgICAgICAgIHBTZWN0aW9uLT5TZWNQbGFjZSA9IHBsYWNlOworICAgICAgICAgICAgQ1BWVF9GbG9hdFJlY3QgcmNTZWMgPSBwU2VjdGlvbi0+bV9TZWNJbmZvLnJjU2VjdGlvbjsKKyAgICAgICAgICAgIGlmIChzID49IG5TU2VjSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAocyA8PSBuRVNlY0luZGV4KSB7CisgICAgICAgICAgICAgICAgICAgIHJjU2VjID0gcFNlY3Rpb24tPlJlYXJyYW5nZSgpOworICAgICAgICAgICAgICAgICAgICByY1NlYy50b3AgKz0gZlBvc1k7CisgICAgICAgICAgICAgICAgICAgIHJjU2VjLmJvdHRvbSArPSBmUG9zWTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmT2xkSGVpZ2h0ID0gcFNlY3Rpb24tPm1fU2VjSW5mby5yY1NlY3Rpb24uYm90dG9tIC0gcFNlY3Rpb24tPm1fU2VjSW5mby5yY1NlY3Rpb24udG9wOworICAgICAgICAgICAgICAgICAgICByY1NlYy50b3AgPSBmUG9zWTsKKyAgICAgICAgICAgICAgICAgICAgcmNTZWMuYm90dG9tID0gZlBvc1kgKyBmT2xkSGVpZ2h0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwU2VjdGlvbi0+bV9TZWNJbmZvLnJjU2VjdGlvbiA9IHJjU2VjOworICAgICAgICAgICAgICAgIHBTZWN0aW9uLT5SZXNldExpbmVQbGFjZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHMgPT0gMCkgeworICAgICAgICAgICAgICAgIHJjUmV0ID0gcmNTZWM7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJjUmV0LmxlZnQgPSBGUERGX01JTihyY1NlYy5sZWZ0LCByY1JldC5sZWZ0KTsKKyAgICAgICAgICAgICAgICByY1JldC50b3AgPSBGUERGX01JTihyY1NlYy50b3AsIHJjUmV0LnRvcCk7CisgICAgICAgICAgICAgICAgcmNSZXQucmlnaHQgPSBGUERGX01BWChyY1NlYy5yaWdodCwgcmNSZXQucmlnaHQpOworICAgICAgICAgICAgICAgIHJjUmV0LmJvdHRvbSA9IEZQREZfTUFYKHJjU2VjLmJvdHRvbSwgcmNSZXQuYm90dG9tKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZQb3NZICs9IHJjU2VjLkhlaWdodCgpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByY1JldDsKK30KK0ZYX0lOVDMyIENQREZfVmFyaWFibGVUZXh0OjpHZXRDaGFyV2lkdGgoRlhfSU5UMzIgbkZvbnRJbmRleCwgRlhfV09SRCBXb3JkLCBGWF9XT1JEIFN1YldvcmQsIEZYX0lOVDMyIG5Xb3JkU3R5bGUpCit7CisgICAgaWYgKG1fcFZUUHJvdmlkZXIpIHsKKyAgICAgICAgaWYgKFN1YldvcmQgPiAwKSB7CisgICAgICAgICAgICByZXR1cm4gbV9wVlRQcm92aWRlci0+R2V0Q2hhcldpZHRoKG5Gb250SW5kZXgsIFN1YldvcmQsIG5Xb3JkU3R5bGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG1fcFZUUHJvdmlkZXItPkdldENoYXJXaWR0aChuRm9udEluZGV4LCBXb3JkLCBuV29yZFN0eWxlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KK0ZYX0lOVDMyIENQREZfVmFyaWFibGVUZXh0OjpHZXRUeXBlQXNjZW50KEZYX0lOVDMyIG5Gb250SW5kZXgpCit7CisgICAgcmV0dXJuIG1fcFZUUHJvdmlkZXIgPyBtX3BWVFByb3ZpZGVyLT5HZXRUeXBlQXNjZW50KG5Gb250SW5kZXgpIDogMDsKK30KK0ZYX0lOVDMyIENQREZfVmFyaWFibGVUZXh0OjpHZXRUeXBlRGVzY2VudChGWF9JTlQzMiBuRm9udEluZGV4KQoreworICAgIHJldHVybiBtX3BWVFByb3ZpZGVyID8gbV9wVlRQcm92aWRlci0+R2V0VHlwZURlc2NlbnQobkZvbnRJbmRleCkgOiAwOworfQorRlhfSU5UMzIgQ1BERl9WYXJpYWJsZVRleHQ6OkdldFdvcmRGb250SW5kZXgoRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBjaGFyc2V0LCBGWF9JTlQzMiBuRm9udEluZGV4KQoreworICAgIHJldHVybiBtX3BWVFByb3ZpZGVyID8gbV9wVlRQcm92aWRlci0+R2V0V29yZEZvbnRJbmRleCh3b3JkLCBjaGFyc2V0LCBuRm9udEluZGV4KSA6IC0xOworfQorRlhfSU5UMzIgQ1BERl9WYXJpYWJsZVRleHQ6OkdldERlZmF1bHRGb250SW5kZXgoKQoreworICAgIHJldHVybiBtX3BWVFByb3ZpZGVyID8gbV9wVlRQcm92aWRlci0+R2V0RGVmYXVsdEZvbnRJbmRleCgpIDogLTE7Cit9CitGWF9CT09MCUNQREZfVmFyaWFibGVUZXh0OjpJc0xhdGluV29yZChGWF9XT1JEIHdvcmQpCit7CisgICAgcmV0dXJuIG1fcFZUUHJvdmlkZXIgPyBtX3BWVFByb3ZpZGVyLT5Jc0xhdGluV29yZCh3b3JkKSA6IEZBTFNFOworfQorSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IgKiBDUERGX1ZhcmlhYmxlVGV4dDo6R2V0SXRlcmF0b3IoKQoreworICAgIGlmICghbV9wVlRJdGVyYXRvcikgeworICAgICAgICByZXR1cm4gbV9wVlRJdGVyYXRvciA9IEZYX05FVyBDUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvcih0aGlzKTsKKyAgICB9CisgICAgcmV0dXJuIG1fcFZUSXRlcmF0b3I7Cit9CitJUERGX1ZhcmlhYmxlVGV4dF9Qcm92aWRlcioJQ1BERl9WYXJpYWJsZVRleHQ6OlNldFByb3ZpZGVyKElQREZfVmFyaWFibGVUZXh0X1Byb3ZpZGVyICogcFByb3ZpZGVyKQoreworICAgIElQREZfVmFyaWFibGVUZXh0X1Byb3ZpZGVyKiBwT2xkID0gbV9wVlRQcm92aWRlcjsKKyAgICBtX3BWVFByb3ZpZGVyID0gcFByb3ZpZGVyOworICAgIHJldHVybiBwT2xkOworfQorQ1BERl9WYXJpYWJsZVRleHRfSXRlcmF0b3I6OkNQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yKENQREZfVmFyaWFibGVUZXh0ICogcFZUKToKKyAgICBtX3BWVChwVlQpLAorICAgIG1fQ3VyUG9zKC0xLCAtMSwgLTEpCit7Cit9CitDUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvcjo6fkNQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yKCkKK3sKK30KK3ZvaWQgQ1BERl9WYXJpYWJsZVRleHRfSXRlcmF0b3I6OlNldEF0KEZYX0lOVDMyIG5Xb3JkSW5kZXgpCit7CisgICAgQVNTRVJUKG1fcFZUICE9IE5VTEwpOworICAgIG1fQ3VyUG9zID0gbV9wVlQtPldvcmRJbmRleFRvV29yZFBsYWNlKG5Xb3JkSW5kZXgpOworfQordm9pZCBDUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvcjo6U2V0QXQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkKK3sKKyAgICBBU1NFUlQobV9wVlQgIT0gTlVMTCk7CisgICAgbV9DdXJQb3MgPSBwbGFjZTsKK30KK0ZYX0JPT0wJQ1BERl9WYXJpYWJsZVRleHRfSXRlcmF0b3I6Ok5leHRXb3JkKCkKK3sKKyAgICBBU1NFUlQobV9wVlQgIT0gTlVMTCk7CisgICAgaWYgKG1fQ3VyUG9zID09IG1fcFZULT5HZXRFbmRXb3JkUGxhY2UoKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fQ3VyUG9zID0gbV9wVlQtPkdldE5leHRXb3JkUGxhY2UobV9DdXJQb3MpOworICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTAlDUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvcjo6UHJldldvcmQoKQoreworICAgIEFTU0VSVChtX3BWVCAhPSBOVUxMKTsKKyAgICBpZiAobV9DdXJQb3MgPT0gbV9wVlQtPkdldEJlZ2luV29yZFBsYWNlKCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBtX0N1clBvcyA9IG1fcFZULT5HZXRQcmV2V29yZFBsYWNlKG1fQ3VyUG9zKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wJQ1BERl9WYXJpYWJsZVRleHRfSXRlcmF0b3I6Ok5leHRMaW5lKCkKK3sKKyAgICBBU1NFUlQobV9wVlQgIT0gTlVMTCk7CisgICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX3BWVC0+bV9TZWN0aW9uQXJyYXkuR2V0QXQobV9DdXJQb3MublNlY0luZGV4KSkgeworICAgICAgICBpZiAobV9DdXJQb3MubkxpbmVJbmRleCA8IHBTZWN0aW9uLT5tX0xpbmVBcnJheS5HZXRTaXplKCkgLSAxKSB7CisgICAgICAgICAgICBtX0N1clBvcyA9IENQVlRfV29yZFBsYWNlKG1fQ3VyUG9zLm5TZWNJbmRleCwgbV9DdXJQb3MubkxpbmVJbmRleCArIDEsIC0xKTsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fQ3VyUG9zLm5TZWNJbmRleCA8IG1fcFZULT5tX1NlY3Rpb25BcnJheS5HZXRTaXplKCkgLSAxKSB7CisgICAgICAgICAgICAgICAgbV9DdXJQb3MgPSBDUFZUX1dvcmRQbGFjZShtX0N1clBvcy5uU2VjSW5kZXggKyAxLCAwLCAtMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorRlhfQk9PTAlDUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvcjo6UHJldkxpbmUoKQoreworICAgIEFTU0VSVChtX3BWVCAhPSBOVUxMKTsKKyAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fcFZULT5tX1NlY3Rpb25BcnJheS5HZXRBdChtX0N1clBvcy5uU2VjSW5kZXgpKSB7CisgICAgICAgIGlmIChtX0N1clBvcy5uTGluZUluZGV4ID4gMCkgeworICAgICAgICAgICAgbV9DdXJQb3MgPSBDUFZUX1dvcmRQbGFjZShtX0N1clBvcy5uU2VjSW5kZXgsIG1fQ3VyUG9zLm5MaW5lSW5kZXggLSAxLCAtMSk7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX0N1clBvcy5uU2VjSW5kZXggPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKENTZWN0aW9uICogcExhc3RTZWN0aW9uID0gbV9wVlQtPm1fU2VjdGlvbkFycmF5LkdldEF0KG1fQ3VyUG9zLm5TZWNJbmRleCAtIDEpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fQ3VyUG9zID0gQ1BWVF9Xb3JkUGxhY2UobV9DdXJQb3MublNlY0luZGV4IC0gMSwgcExhc3RTZWN0aW9uLT5tX0xpbmVBcnJheS5HZXRTaXplKCkgLSAxLCAtMSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitGWF9CT09MCUNQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yOjpOZXh0U2VjdGlvbigpCit7CisgICAgQVNTRVJUKG1fcFZUICE9IE5VTEwpOworICAgIGlmIChtX0N1clBvcy5uU2VjSW5kZXggPCBtX3BWVC0+bV9TZWN0aW9uQXJyYXkuR2V0U2l6ZSgpIC0gMSkgeworICAgICAgICBtX0N1clBvcyA9IENQVlRfV29yZFBsYWNlKG1fQ3VyUG9zLm5TZWNJbmRleCArIDEsIDAsIC0xKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK0ZYX0JPT0wJQ1BERl9WYXJpYWJsZVRleHRfSXRlcmF0b3I6OlByZXZTZWN0aW9uKCkKK3sKKyAgICBBU1NFUlQobV9wVlQgIT0gTlVMTCk7CisgICAgaWYgKG1fQ3VyUG9zLm5TZWNJbmRleCA+IDApIHsKKyAgICAgICAgbV9DdXJQb3MgPSBDUFZUX1dvcmRQbGFjZShtX0N1clBvcy5uU2VjSW5kZXggLSAxLCAwLCAtMSk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitGWF9CT09MCUNQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yOjpHZXRXb3JkKENQVlRfV29yZCAmIHdvcmQpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcFZUICE9IE5VTEwpOworICAgIHdvcmQuV29yZFBsYWNlID0gbV9DdXJQb3M7CisgICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX3BWVC0+bV9TZWN0aW9uQXJyYXkuR2V0QXQobV9DdXJQb3MublNlY0luZGV4KSkgeworICAgICAgICBpZiAoQ0xpbmUgKiBwTGluZSA9IHBTZWN0aW9uLT5tX0xpbmVBcnJheS5HZXRBdChtX0N1clBvcy5uTGluZUluZGV4KSkgeworICAgICAgICAgICAgaWYgKENQVlRfV29yZEluZm8gKiBwV29yZCA9IHBTZWN0aW9uLT5tX1dvcmRBcnJheS5HZXRBdChtX0N1clBvcy5uV29yZEluZGV4KSkgeworICAgICAgICAgICAgICAgIHdvcmQuV29yZCA9IHBXb3JkLT5Xb3JkOworICAgICAgICAgICAgICAgIHdvcmQubkNoYXJzZXQgPSBwV29yZC0+bkNoYXJzZXQ7CisgICAgICAgICAgICAgICAgd29yZC5mV2lkdGggPSBtX3BWVC0+R2V0V29yZFdpZHRoKCpwV29yZCk7CisgICAgICAgICAgICAgICAgd29yZC5wdFdvcmQgPSBtX3BWVC0+SW5Ub091dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX1BvaW50KHBXb3JkLT5mV29yZFggKyBwU2VjdGlvbi0+bV9TZWNJbmZvLnJjU2VjdGlvbi5sZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFdvcmQtPmZXb3JkWSArIHBTZWN0aW9uLT5tX1NlY0luZm8ucmNTZWN0aW9uLnRvcCkgKTsKKyAgICAgICAgICAgICAgICB3b3JkLmZBc2NlbnQgPSBtX3BWVC0+R2V0V29yZEFzY2VudCgqcFdvcmQpOworICAgICAgICAgICAgICAgIHdvcmQuZkRlc2NlbnQgPSBtX3BWVC0+R2V0V29yZERlc2NlbnQoKnBXb3JkKTsKKyAgICAgICAgICAgICAgICBpZiAocFdvcmQtPnBXb3JkUHJvcHMpIHsKKyAgICAgICAgICAgICAgICAgICAgd29yZC5Xb3JkUHJvcHMgPSAqcFdvcmQtPnBXb3JkUHJvcHM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdvcmQubkZvbnRJbmRleCA9IG1fcFZULT5HZXRXb3JkRm9udEluZGV4KCpwV29yZCk7CisgICAgICAgICAgICAgICAgd29yZC5mRm9udFNpemUgPSBtX3BWVC0+R2V0V29yZEZvbnRTaXplKCpwV29yZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorRlhfQk9PTAlDUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvcjo6U2V0V29yZChjb25zdCBDUFZUX1dvcmQgJiB3b3JkKQoreworICAgIEFTU0VSVChtX3BWVCAhPSBOVUxMKTsKKyAgICBpZiAoQ1NlY3Rpb24gKiBwU2VjdGlvbiA9IG1fcFZULT5tX1NlY3Rpb25BcnJheS5HZXRBdChtX0N1clBvcy5uU2VjSW5kZXgpKSB7CisgICAgICAgIGlmIChDUFZUX1dvcmRJbmZvICogcFdvcmQgPSBwU2VjdGlvbi0+bV9Xb3JkQXJyYXkuR2V0QXQobV9DdXJQb3MubldvcmRJbmRleCkpIHsKKyAgICAgICAgICAgIGlmIChwV29yZC0+cFdvcmRQcm9wcykgeworICAgICAgICAgICAgICAgICpwV29yZC0+cFdvcmRQcm9wcyA9IHdvcmQuV29yZFByb3BzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorRlhfQk9PTAlDUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvcjo6R2V0TGluZShDUFZUX0xpbmUgJiBsaW5lKSBjb25zdAoreworICAgIEFTU0VSVChtX3BWVCAhPSBOVUxMKTsKKyAgICBsaW5lLmxpbmVwbGFjZSA9IENQVlRfV29yZFBsYWNlKG1fQ3VyUG9zLm5TZWNJbmRleCwgbV9DdXJQb3MubkxpbmVJbmRleCwgLTEpOworICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9wVlQtPm1fU2VjdGlvbkFycmF5LkdldEF0KG1fQ3VyUG9zLm5TZWNJbmRleCkpIHsKKyAgICAgICAgaWYgKENMaW5lICogcExpbmUgPSBwU2VjdGlvbi0+bV9MaW5lQXJyYXkuR2V0QXQobV9DdXJQb3MubkxpbmVJbmRleCkpIHsKKyAgICAgICAgICAgIGxpbmUucHRMaW5lID0gbV9wVlQtPkluVG9PdXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUERGX1BvaW50KHBMaW5lLT5tX0xpbmVJbmZvLmZMaW5lWCArIHBTZWN0aW9uLT5tX1NlY0luZm8ucmNTZWN0aW9uLmxlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lLT5tX0xpbmVJbmZvLmZMaW5lWSArIHBTZWN0aW9uLT5tX1NlY0luZm8ucmNTZWN0aW9uLnRvcCkgKTsKKyAgICAgICAgICAgIGxpbmUuZkxpbmVXaWR0aCA9IHBMaW5lLT5tX0xpbmVJbmZvLmZMaW5lV2lkdGg7CisgICAgICAgICAgICBsaW5lLmZMaW5lQXNjZW50ID0gcExpbmUtPm1fTGluZUluZm8uZkxpbmVBc2NlbnQ7CisgICAgICAgICAgICBsaW5lLmZMaW5lRGVzY2VudCA9IHBMaW5lLT5tX0xpbmVJbmZvLmZMaW5lRGVzY2VudDsKKyAgICAgICAgICAgIGxpbmUubGluZUVuZCA9IHBMaW5lLT5HZXRFbmRXb3JkUGxhY2UoKTsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK0ZYX0JPT0wJQ1BERl9WYXJpYWJsZVRleHRfSXRlcmF0b3I6OkdldFNlY3Rpb24oQ1BWVF9TZWN0aW9uICYgc2VjdGlvbikgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wVlQgIT0gTlVMTCk7CisgICAgc2VjdGlvbi5zZWNwbGFjZSA9IENQVlRfV29yZFBsYWNlKG1fQ3VyUG9zLm5TZWNJbmRleCwgMCwgLTEpOworICAgIGlmIChDU2VjdGlvbiAqIHBTZWN0aW9uID0gbV9wVlQtPm1fU2VjdGlvbkFycmF5LkdldEF0KG1fQ3VyUG9zLm5TZWNJbmRleCkpIHsKKyAgICAgICAgc2VjdGlvbi5yY1NlY3Rpb24gPSBtX3BWVC0+SW5Ub091dChwU2VjdGlvbi0+bV9TZWNJbmZvLnJjU2VjdGlvbik7CisgICAgICAgIGlmIChwU2VjdGlvbi0+bV9TZWNJbmZvLnBTZWNQcm9wcykgeworICAgICAgICAgICAgc2VjdGlvbi5TZWNQcm9wcyA9ICpwU2VjdGlvbi0+bV9TZWNJbmZvLnBTZWNQcm9wczsKKyAgICAgICAgfQorICAgICAgICBpZiAocFNlY3Rpb24tPm1fU2VjSW5mby5wV29yZFByb3BzKSB7CisgICAgICAgICAgICBzZWN0aW9uLldvcmRQcm9wcyA9ICpwU2VjdGlvbi0+bV9TZWNJbmZvLnBXb3JkUHJvcHM7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK0ZYX0JPT0wJQ1BERl9WYXJpYWJsZVRleHRfSXRlcmF0b3I6OlNldFNlY3Rpb24oY29uc3QgQ1BWVF9TZWN0aW9uICYgc2VjdGlvbikKK3sKKyAgICBBU1NFUlQobV9wVlQgIT0gTlVMTCk7CisgICAgaWYgKENTZWN0aW9uICogcFNlY3Rpb24gPSBtX3BWVC0+bV9TZWN0aW9uQXJyYXkuR2V0QXQobV9DdXJQb3MublNlY0luZGV4KSkgeworICAgICAgICBpZiAocFNlY3Rpb24tPm1fU2VjSW5mby5wU2VjUHJvcHMpIHsKKyAgICAgICAgICAgICpwU2VjdGlvbi0+bV9TZWNJbmZvLnBTZWNQcm9wcyA9IHNlY3Rpb24uU2VjUHJvcHM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBTZWN0aW9uLT5tX1NlY0luZm8ucFdvcmRQcm9wcykgeworICAgICAgICAgICAgKnBTZWN0aW9uLT5tX1NlY0luZm8ucFdvcmRQcm9wcyA9IHNlY3Rpb24uV29yZFByb3BzOworICAgICAgICB9CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmZG9jL2RvY192dG1vZHVsZS5jcHAgYi9jb3JlL3NyYy9mcGRmZG9jL2RvY192dG1vZHVsZS5jcHAKaW5kZXggOGJjNGU3Yi4uYzQ0Y2JhYyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZmRvYy9kb2NfdnRtb2R1bGUuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZkb2MvZG9jX3Z0bW9kdWxlLmNwcApAQCAtMSwxNyArMSwxNyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmRvYy9mcGRmX2RvYy5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZkb2MvZnBkZl92dC5oIg0KLSNpbmNsdWRlICJwZGZfdnQuaCINCi1JUERGX1ZhcmlhYmxlVGV4dCogSVBERl9WYXJpYWJsZVRleHQ6Ok5ld1ZhcmlhYmxlVGV4dCgpDQotew0KLSAgICByZXR1cm4gRlhfTkVXIENQREZfVmFyaWFibGVUZXh0KCk7DQotfQ0KLXZvaWQgSVBERl9WYXJpYWJsZVRleHQ6OkRlbFZhcmlhYmxlVGV4dChJUERGX1ZhcmlhYmxlVGV4dCogcFZUKQ0KLXsNCi0gICAgZGVsZXRlIChDUERGX1ZhcmlhYmxlVGV4dCopcFZUOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mcGRmZG9jL2ZwZGZfZG9jLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mcGRmZG9jL2ZwZGZfdnQuaCIKKyNpbmNsdWRlICJwZGZfdnQuaCIKK0lQREZfVmFyaWFibGVUZXh0KiBJUERGX1ZhcmlhYmxlVGV4dDo6TmV3VmFyaWFibGVUZXh0KCkKK3sKKyAgICByZXR1cm4gRlhfTkVXIENQREZfVmFyaWFibGVUZXh0KCk7Cit9Cit2b2lkIElQREZfVmFyaWFibGVUZXh0OjpEZWxWYXJpYWJsZVRleHQoSVBERl9WYXJpYWJsZVRleHQqIHBWVCkKK3sKKyAgICBkZWxldGUgKENQREZfVmFyaWFibGVUZXh0KilwVlQ7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmZG9jL3BkZl92dC5oIGIvY29yZS9zcmMvZnBkZmRvYy9wZGZfdnQuaAppbmRleCBmYzFhZjA0Li42YjJkNWU1IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmZG9jL3BkZl92dC5oCisrKyBiL2NvcmUvc3JjL2ZwZGZkb2MvcGRmX3Z0LmgKQEAgLTEsNjQyICsxLDY0MiBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2RlZmluZSBfUERGX1ZUX0hfDQotY2xhc3MgQ1BWVF9TaXplOw0KLWNsYXNzIENQVlRfRmxvYXRSZWN0Ow0KLXN0cnVjdCBDUFZUX1NlY3Rpb25JbmZvOw0KLXN0cnVjdCBDUFZUX0xpbmVJbmZvOw0KLXN0cnVjdCBDUFZUX1dvcmRJbmZvOw0KLWNsYXNzIENMaW5lOw0KLWNsYXNzIENMaW5lczsNCi1jbGFzcyBDU2VjdGlvbjsNCi1jbGFzcyBDVHlwZXNldDsNCi1jbGFzcyBDUERGX0VkaXRDb250YWluZXI7DQotY2xhc3MgQ1BERl9WYXJpYWJsZVRleHQ7DQotY2xhc3MgQ1BERl9WYXJpYWJsZVRleHRfSXRlcmF0b3I7DQotI2RlZmluZSBJc0Zsb2F0WmVybyhmKQkJCQkJCSgoZikgPCAwLjAwMDEgJiYgKGYpID4gLTAuMDAwMSkNCi0jZGVmaW5lIElzRmxvYXRCaWdnZXIoZmEsZmIpCQkJCSgoZmEpID4gKGZiKSAmJiAhSXNGbG9hdFplcm8oKGZhKSAtIChmYikpKQ0KLSNkZWZpbmUgSXNGbG9hdFNtYWxsZXIoZmEsZmIpCQkJCSgoZmEpIDwgKGZiKSAmJiAhSXNGbG9hdFplcm8oKGZhKSAtIChmYikpKQ0KLXRlbXBsYXRlPGNsYXNzIFQ+IFQgRlBERl9NSU4gKGNvbnN0IFQgJiBpLCBjb25zdCBUICYgaikNCi17DQotICAgIHJldHVybiAoKGkgPCBqKSA/IGkgOiBqKTsNCi19DQotdGVtcGxhdGU8Y2xhc3MgVD4gVCBGUERGX01BWCAoY29uc3QgVCAmIGksIGNvbnN0IFQgJiBqKQ0KLXsNCi0gICAgcmV0dXJuICgoaSA+IGopID8gaSA6IGopOw0KLX0NCi1jbGFzcyBDUFZUX1NpemUNCi17DQotcHVibGljOg0KLSAgICBDUFZUX1NpemUoKSA6IHgoMC4wZiksIHkoMC4wZikNCi0gICAgew0KLSAgICB9DQotICAgIENQVlRfU2l6ZShGWF9GTE9BVCB4LCBGWF9GTE9BVCB5KQ0KLSAgICB7DQotICAgICAgICB0aGlzLT54ID0geDsNCi0gICAgICAgIHRoaXMtPnkgPSB5Ow0KLSAgICB9DQotICAgIEZYX0ZMT0FUIHgsIHk7DQotfTsNCi1jbGFzcyBDUFZUX0Zsb2F0UmVjdCA6IHB1YmxpYyBDRlhfRmxvYXRSZWN0DQotew0KLXB1YmxpYzoNCi0gICAgQ1BWVF9GbG9hdFJlY3QoKQ0KLSAgICB7DQotICAgICAgICBsZWZ0ID0gdG9wID0gcmlnaHQgPSBib3R0b20gPSAwLjBmOw0KLSAgICB9DQotICAgIENQVlRfRmxvYXRSZWN0KEZYX0ZMT0FUIGxlZnQsIEZYX0ZMT0FUIHRvcCwNCi0gICAgICAgICAgICAgICAgICAgRlhfRkxPQVQgcmlnaHQsIEZYX0ZMT0FUIGJvdHRvbSkNCi0gICAgew0KLSAgICAgICAgdGhpcy0+bGVmdCA9IGxlZnQ7DQotICAgICAgICB0aGlzLT50b3AgPSB0b3A7DQotICAgICAgICB0aGlzLT5yaWdodCA9IHJpZ2h0Ow0KLSAgICAgICAgdGhpcy0+Ym90dG9tID0gYm90dG9tOw0KLSAgICB9DQotICAgIENQVlRfRmxvYXRSZWN0KGNvbnN0IENQREZfUmVjdCAmIHJlY3QpDQotICAgIHsNCi0gICAgICAgIHRoaXMtPmxlZnQgPSByZWN0LmxlZnQ7DQotICAgICAgICB0aGlzLT50b3AgPSByZWN0LnRvcDsNCi0gICAgICAgIHRoaXMtPnJpZ2h0ID0gcmVjdC5yaWdodDsNCi0gICAgICAgIHRoaXMtPmJvdHRvbSA9IHJlY3QuYm90dG9tOw0KLSAgICB9DQotICAgIHZvaWQgRGVmYXVsdCgpDQotICAgIHsNCi0gICAgICAgIGxlZnQgPSB0b3AgPSByaWdodCA9IGJvdHRvbSA9IDAuMGY7DQotICAgIH0NCi0gICAgRlhfRkxPQVQgSGVpZ2h0KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgaWYodGhpcy0+dG9wID4gdGhpcy0+Ym90dG9tKSB7DQotICAgICAgICAgICAgcmV0dXJuIHRoaXMtPnRvcCAtIHRoaXMtPmJvdHRvbTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcmV0dXJuIHRoaXMtPmJvdHRvbSAtIHRoaXMtPnRvcDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX07DQotc3RydWN0IENQVlRfU2VjdGlvbkluZm8gew0KLSAgICBDUFZUX1NlY3Rpb25JbmZvKCkgOiByY1NlY3Rpb24oKSwgblRvdGFsTGluZSgwKSwgcFNlY1Byb3BzKE5VTEwpLCBwV29yZFByb3BzKE5VTEwpDQotICAgIHsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIH5DUFZUX1NlY3Rpb25JbmZvKCkNCi0gICAgew0KLSAgICAgICAgaWYgKHBTZWNQcm9wcykgew0KLSAgICAgICAgICAgIGRlbGV0ZSBwU2VjUHJvcHM7DQotICAgICAgICB9DQotICAgICAgICBpZiAocFdvcmRQcm9wcykgew0KLSAgICAgICAgICAgIGRlbGV0ZSBwV29yZFByb3BzOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIENQVlRfU2VjdGlvbkluZm8oY29uc3QgQ1BWVF9TZWN0aW9uSW5mbyAmIG90aGVyKTogcmNTZWN0aW9uKCksIG5Ub3RhbExpbmUoMCksIHBTZWNQcm9wcyhOVUxMKSwgcFdvcmRQcm9wcyhOVUxMKQ0KLSAgICB7DQotICAgICAgICBvcGVyYXRvciA9IChvdGhlcik7DQotICAgIH0NCi0gICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBDUFZUX1NlY3Rpb25JbmZvICYgb3RoZXIpDQotICAgIHsNCi0gICAgICAgIGlmICh0aGlzID09ICZvdGhlcikgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIHRoaXMtPnJjU2VjdGlvbiA9IG90aGVyLnJjU2VjdGlvbjsNCi0gICAgICAgIHRoaXMtPm5Ub3RhbExpbmUgPSBvdGhlci5uVG90YWxMaW5lOw0KLSAgICAgICAgaWYgKG90aGVyLnBTZWNQcm9wcykgew0KLSAgICAgICAgICAgIGlmIChwU2VjUHJvcHMpIHsNCi0gICAgICAgICAgICAgICAgKnBTZWNQcm9wcyA9ICpvdGhlci5wU2VjUHJvcHM7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgcFNlY1Byb3BzID0gRlhfTkVXIENQVlRfU2VjUHJvcHMoKm90aGVyLnBTZWNQcm9wcyk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG90aGVyLnBXb3JkUHJvcHMpIHsNCi0gICAgICAgICAgICBpZiAocFdvcmRQcm9wcykgew0KLSAgICAgICAgICAgICAgICAqcFdvcmRQcm9wcyA9ICpvdGhlci5wV29yZFByb3BzOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHBXb3JkUHJvcHMgPSBGWF9ORVcgQ1BWVF9Xb3JkUHJvcHMoKm90aGVyLnBXb3JkUHJvcHMpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDUFZUX0Zsb2F0UmVjdAkJCQlyY1NlY3Rpb247DQotICAgIEZYX0lOVDMyCQkJCQluVG90YWxMaW5lOw0KLSAgICBDUFZUX1NlY1Byb3BzKgkJCQlwU2VjUHJvcHM7DQotICAgIENQVlRfV29yZFByb3BzKgkJCQlwV29yZFByb3BzOw0KLX07DQotc3RydWN0IENQVlRfTGluZUluZm8gew0KLSAgICBDUFZUX0xpbmVJbmZvKCkgOiBuVG90YWxXb3JkKDApLCBuQmVnaW5Xb3JkSW5kZXgoLTEpLCBuRW5kV29yZEluZGV4KC0xKSwNCi0gICAgICAgIGZMaW5lWCgwLjBmKSwgZkxpbmVZKDAuMGYpLCBmTGluZVdpZHRoKDAuMGYpLCBmTGluZUFzY2VudCgwLjBmKSwgZkxpbmVEZXNjZW50KDAuMGYpDQotICAgIHsNCi0gICAgfQ0KLSAgICBGWF9JTlQzMgkJCQkJblRvdGFsV29yZDsNCi0gICAgRlhfSU5UMzIJCQkJCW5CZWdpbldvcmRJbmRleDsNCi0gICAgRlhfSU5UMzIJCQkJCW5FbmRXb3JkSW5kZXg7DQotICAgIEZYX0ZMT0FUCQkJCQlmTGluZVg7DQotICAgIEZYX0ZMT0FUCQkJCQlmTGluZVk7DQotICAgIEZYX0ZMT0FUCQkJCQlmTGluZVdpZHRoOw0KLSAgICBGWF9GTE9BVAkJCQkJZkxpbmVBc2NlbnQ7DQotICAgIEZYX0ZMT0FUCQkJCQlmTGluZURlc2NlbnQ7DQotfTsNCi1zdHJ1Y3QgQ1BWVF9Xb3JkSW5mbyA6IHB1YmxpYyBDRlhfT2JqZWN0IHsNCi0gICAgQ1BWVF9Xb3JkSW5mbygpIDogV29yZCgwKSwgbkNoYXJzZXQoMCksDQotICAgICAgICBmV29yZFgoMC4wZiksIGZXb3JkWSgwLjBmKSwgZldvcmRUYWlsKDAuMGYpLCBuRm9udEluZGV4KC0xKSwgcFdvcmRQcm9wcyhOVUxMKQ0KLSAgICB7DQotICAgIH0NCi0gICAgQ1BWVF9Xb3JkSW5mbyhGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIGNoYXJzZXQsIEZYX0lOVDMyIGZvbnRJbmRleCwgQ1BWVF9Xb3JkUHJvcHMgKiBwUHJvcHMpOg0KLSAgICAgICAgV29yZCh3b3JkKSwgbkNoYXJzZXQoY2hhcnNldCksIGZXb3JkWCgwLjBmKSwgZldvcmRZKDAuMGYpLCBmV29yZFRhaWwoMC4wZiksDQotICAgICAgICBuRm9udEluZGV4KGZvbnRJbmRleCksIHBXb3JkUHJvcHMocFByb3BzKQ0KLSAgICB7DQotICAgIH0NCi0gICAgdmlydHVhbCB+Q1BWVF9Xb3JkSW5mbygpDQotICAgIHsNCi0gICAgICAgIGlmIChwV29yZFByb3BzKSB7DQotICAgICAgICAgICAgZGVsZXRlIHBXb3JkUHJvcHM7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgQ1BWVF9Xb3JkSW5mbyhjb25zdCBDUFZUX1dvcmRJbmZvICYgd29yZCk6IFdvcmQoMCksIG5DaGFyc2V0KDApLA0KLSAgICAgICAgZldvcmRYKDAuMGYpLCBmV29yZFkoMC4wZiksIGZXb3JkVGFpbCgwLjBmKSwgbkZvbnRJbmRleCgtMSksIHBXb3JkUHJvcHMoTlVMTCkNCi0gICAgew0KLSAgICAgICAgb3BlcmF0b3IgPSAod29yZCk7DQotICAgIH0NCi0gICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBDUFZUX1dvcmRJbmZvICYgd29yZCkNCi0gICAgew0KLSAgICAgICAgaWYgKHRoaXMgPT0gJndvcmQpIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICB0aGlzLT5Xb3JkID0gd29yZC5Xb3JkOw0KLSAgICAgICAgdGhpcy0+bkNoYXJzZXQgPSB3b3JkLm5DaGFyc2V0Ow0KLSAgICAgICAgdGhpcy0+bkZvbnRJbmRleCA9IHdvcmQubkZvbnRJbmRleDsNCi0gICAgICAgIGlmICh3b3JkLnBXb3JkUHJvcHMpIHsNCi0gICAgICAgICAgICBpZiAocFdvcmRQcm9wcykgew0KLSAgICAgICAgICAgICAgICAqcFdvcmRQcm9wcyA9ICp3b3JkLnBXb3JkUHJvcHM7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgcFdvcmRQcm9wcyA9IEZYX05FVyBDUFZUX1dvcmRQcm9wcygqd29yZC5wV29yZFByb3BzKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhfV09SRAkJCQkJCVdvcmQ7DQotICAgIEZYX0lOVDMyCQkJCQluQ2hhcnNldDsNCi0gICAgRlhfRkxPQVQJCQkJCWZXb3JkWDsNCi0gICAgRlhfRkxPQVQJCQkJCWZXb3JkWTsNCi0gICAgRlhfRkxPQVQJCQkJCWZXb3JkVGFpbDsNCi0gICAgRlhfSU5UMzIJCQkJCW5Gb250SW5kZXg7DQotICAgIENQVlRfV29yZFByb3BzKgkJCQlwV29yZFByb3BzOw0KLX07DQotc3RydWN0IENQVlRfRmxvYXRSYW5nZSB7DQotICAgIENQVlRfRmxvYXRSYW5nZSgpIDogZk1pbigwLjBmKSwgZk1heCgwLjBmKQ0KLSAgICB7DQotICAgIH0NCi0gICAgQ1BWVF9GbG9hdFJhbmdlKEZYX0ZMT0FUIG1pbiwgRlhfRkxPQVQgbWF4KSA6IGZNaW4obWluKSwgZk1heChtYXgpDQotICAgIHsNCi0gICAgfQ0KLSAgICBGWF9GTE9BVCBSYW5nZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBmTWF4IC0gZk1pbjsNCi0gICAgfQ0KLSAgICBGWF9GTE9BVCBmTWluLCBmTWF4Ow0KLX07DQotdGVtcGxhdGU8Y2xhc3MgVFlQRT4gY2xhc3MgQ1BWVF9BcnJheVRlbXBsYXRlIDogcHVibGljIENGWF9BcnJheVRlbXBsYXRlPFRZUEU+DQotew0KLXB1YmxpYzoNCi0gICAgRlhfQk9PTCBJc0VtcHR5KCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIENGWF9BcnJheVRlbXBsYXRlPFRZUEU+OjpHZXRTaXplKCkgPD0gMDsNCi0gICAgfQ0KLSAgICBUWVBFIEdldEF0KGludCBuSW5kZXgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIGlmIChuSW5kZXggPj0gMCAmJiBuSW5kZXggPCBDRlhfQXJyYXlUZW1wbGF0ZTxUWVBFPjo6R2V0U2l6ZSgpKSB7DQotICAgICAgICAgICAgcmV0dXJuIENGWF9BcnJheVRlbXBsYXRlPFRZUEU+OjpHZXRBdChuSW5kZXgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgdm9pZCBSZW1vdmVBdChpbnQgbkluZGV4KQ0KLSAgICB7DQotICAgICAgICBpZiAobkluZGV4ID49IDAgJiYgbkluZGV4IDwgQ0ZYX0FycmF5VGVtcGxhdGU8VFlQRT46OkdldFNpemUoKSkgew0KLSAgICAgICAgICAgIENGWF9BcnJheVRlbXBsYXRlPFRZUEU+OjpSZW1vdmVBdChuSW5kZXgpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfTsNCi1jbGFzcyBDTGluZSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgQ0xpbmUoKTsNCi0gICAgdmlydHVhbCB+Q0xpbmUoKTsNCi0gICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJR2V0QmVnaW5Xb3JkUGxhY2UoKSBjb25zdDsNCi0gICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJR2V0RW5kV29yZFBsYWNlKCkgY29uc3Q7DQotICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCUdldFByZXZXb3JkUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3Q7DQotICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCUdldE5leHRXb3JkUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3Q7DQotICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCUxpbmVQbGFjZTsNCi0gICAgQ1BWVF9MaW5lSW5mbwkJCQkJCQltX0xpbmVJbmZvOw0KLX07DQotY2xhc3MgQ0xpbmVzDQotew0KLXB1YmxpYzoNCi0gICAgQ0xpbmVzKCkgOiBtX25Ub3RhbCgwKSB7fQ0KLSAgICB2aXJ0dWFsIH5DTGluZXMoKQ0KLSAgICB7DQotICAgICAgICBSZW1vdmVBbGwoKTsNCi0gICAgfQ0KLSAgICBGWF9JTlQzMgkJCQkJCQkJR2V0U2l6ZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0xpbmVzLkdldFNpemUoKTsNCi0gICAgfQ0KLSAgICBDTGluZSAqCQkJCQkJCQkJR2V0QXQoRlhfSU5UMzIgbkluZGV4KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9MaW5lcy5HZXRBdChuSW5kZXgpOw0KLSAgICB9DQotICAgIHZvaWQJCQkJCQkJCQlFbXB0eSgpDQotICAgIHsNCi0gICAgICAgIG1fblRvdGFsID0gMDsNCi0gICAgfQ0KLSAgICB2b2lkCQkJCQkJCQkJUmVtb3ZlQWxsKCkNCi0gICAgew0KLSAgICAgICAgZm9yIChGWF9JTlQzMiBpID0gMCwgc3ogPSBHZXRTaXplKCk7IGkgPCBzejsgaSsrKSB7DQotICAgICAgICAgICAgZGVsZXRlIEdldEF0KGkpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9MaW5lcy5SZW1vdmVBbGwoKTsNCi0gICAgICAgIG1fblRvdGFsID0gMDsNCi0gICAgfQ0KLSAgICBGWF9JTlQzMgkJCQkJCQkJQWRkKGNvbnN0IENQVlRfTGluZUluZm8gJiBsaW5laW5mbykNCi0gICAgew0KLSAgICAgICAgaWYgKG1fblRvdGFsID49IEdldFNpemUoKSkgew0KLSAgICAgICAgICAgIGlmIChDTGluZSAqIHBMaW5lID0gRlhfTkVXIENMaW5lKSB7DQotICAgICAgICAgICAgICAgIHBMaW5lLT5tX0xpbmVJbmZvID0gbGluZWluZm87DQotICAgICAgICAgICAgICAgIG1fTGluZXMuQWRkKHBMaW5lKTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fblRvdGFsKys7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybiBtX25Ub3RhbDsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYgKENMaW5lICogcExpbmUgPSBHZXRBdChtX25Ub3RhbCkpIHsNCi0gICAgICAgICAgICAgICAgcExpbmUtPm1fTGluZUluZm8gPSBsaW5laW5mbzsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuIG1fblRvdGFsKys7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgdm9pZAkJCQkJCQkJCUNsZWFyKCkNCi0gICAgew0KLSAgICAgICAgZm9yIChGWF9JTlQzMiBpID0gR2V0U2l6ZSgpIC0gMTsgaSA+PSBtX25Ub3RhbDsgaS0tKSB7DQotICAgICAgICAgICAgZGVsZXRlIEdldEF0KGkpOw0KLSAgICAgICAgICAgIG1fTGluZXMuUmVtb3ZlQXQoaSk7DQotICAgICAgICB9DQotICAgIH0NCi1wcml2YXRlOg0KLSAgICBDUFZUX0FycmF5VGVtcGxhdGU8Q0xpbmUqPgkJCQltX0xpbmVzOw0KLSAgICBGWF9JTlQzMgkJCQkJCQkJbV9uVG90YWw7DQotfTsNCi1jbGFzcyBDU2VjdGlvbiA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLSAgICBmcmllbmQgY2xhc3MgQ1R5cGVzZXQ7DQotcHVibGljOg0KLSAgICBDU2VjdGlvbihDUERGX1ZhcmlhYmxlVGV4dCAqIHBWVCk7DQotICAgIHZpcnR1YWwgfkNTZWN0aW9uKCk7DQotICAgIHZvaWQJCQkJCQkJCQlSZXNldEFsbCgpOw0KLSAgICB2b2lkCQkJCQkJCQkJUmVzZXRMaW5lQXJyYXkoKTsNCi0gICAgdm9pZAkJCQkJCQkJCVJlc2V0V29yZEFycmF5KCk7DQotICAgIHZvaWQJCQkJCQkJCQlSZXNldExpbmVQbGFjZSgpOw0KLSAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlBZGRXb3JkKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIGNvbnN0IENQVlRfV29yZEluZm8gJiB3b3JkaW5mbyk7DQotICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCUFkZExpbmUoY29uc3QgQ1BWVF9MaW5lSW5mbyAmIGxpbmVpbmZvKTsNCi0gICAgdm9pZAkJCQkJCQkJCUNsZWFyV29yZHMoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiBQbGFjZVJhbmdlKTsNCi0gICAgdm9pZAkJCQkJCQkJCUNsZWFyV29yZChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKTsNCi0gICAgQ1BWVF9GbG9hdFJlY3QJCQkJCQkJUmVhcnJhbmdlKCk7DQotICAgIENQVlRfU2l6ZQkJCQkJCQkJR2V0U2VjdGlvblNpemUoRlhfRkxPQVQgZkZvbnRTaXplKTsNCi0gICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJR2V0QmVnaW5Xb3JkUGxhY2UoKSBjb25zdDsNCi0gICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJR2V0RW5kV29yZFBsYWNlKCkgY29uc3Q7DQotICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCUdldFByZXZXb3JkUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3Q7DQotICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCUdldE5leHRXb3JkUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3Q7DQotICAgIHZvaWQJCQkJCQkJCQlVcGRhdGVXb3JkUGxhY2UoQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3Q7DQotICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCVNlYXJjaFdvcmRQbGFjZShjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpIGNvbnN0Ow0KLSAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlTZWFyY2hXb3JkUGxhY2UoRlhfRkxPQVQgZngsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgbGluZXBsYWNlKSBjb25zdDsNCi0gICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJU2VhcmNoV29yZFBsYWNlKEZYX0ZMT0FUIGZ4LCBjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHJhbmdlKSBjb25zdDsNCi1wdWJsaWM6DQotICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCVNlY1BsYWNlOw0KLSAgICBDUFZUX1NlY3Rpb25JbmZvCQkJCQkJbV9TZWNJbmZvOw0KLSAgICBDTGluZXMJCQkJCQkJCQltX0xpbmVBcnJheTsNCi0gICAgQ1BWVF9BcnJheVRlbXBsYXRlPENQVlRfV29yZEluZm8qPgkJbV9Xb3JkQXJyYXk7DQotcHJpdmF0ZToNCi0gICAgdm9pZAkJCQkJCQkJCUNsZWFyTGVmdFdvcmRzKEZYX0lOVDMyIG5Xb3JkSW5kZXgpOw0KLSAgICB2b2lkCQkJCQkJCQkJQ2xlYXJSaWdodFdvcmRzKEZYX0lOVDMyIG5Xb3JkSW5kZXgpOw0KLSAgICB2b2lkCQkJCQkJCQkJQ2xlYXJNaWRXb3JkcyhGWF9JTlQzMiBuQmVnaW5JbmRleCwgRlhfSU5UMzIgbkVuZEluZGV4KTsNCi0NCi0gICAgQ1BERl9WYXJpYWJsZVRleHQJCQkJCQkqbV9wVlQ7DQotfTsNCi1jbGFzcyBDVHlwZXNldA0KLXsNCi1wdWJsaWM6DQotICAgIENUeXBlc2V0KENTZWN0aW9uICogcFNlY3Rpb24pOw0KLSAgICB2aXJ0dWFsIH5DVHlwZXNldCgpOw0KLSAgICBDUFZUX1NpemUJCQkJCQkJCUdldEVkaXRTaXplKEZYX0ZMT0FUIGZGb250U2l6ZSk7DQotICAgIENQVlRfRmxvYXRSZWN0CQkJCQkJCVR5cGVzZXQoKTsNCi0gICAgQ1BWVF9GbG9hdFJlY3QJCQkJCQkJQ2hhckFycmF5KCk7DQotcHJpdmF0ZToNCi0gICAgdm9pZAkJCQkJCQkJCVNwbGl0TGluZXMoRlhfQk9PTCBiVHlwZXNldCwgRlhfRkxPQVQgZkZvbnRTaXplKTsNCi0gICAgdm9pZAkJCQkJCQkJCU91dHB1dExpbmVzKCk7DQotDQotICAgIENQVlRfRmxvYXRSZWN0CQkJCQkJCW1fcmNSZXQ7DQotICAgIENQREZfVmFyaWFibGVUZXh0CQkJCQkJKiBtX3BWVDsNCi0gICAgQ1NlY3Rpb24JCQkJCQkJCSogbV9wU2VjdGlvbjsNCi19Ow0KLWNsYXNzIENQREZfRWRpdENvbnRhaW5lcg0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfRWRpdENvbnRhaW5lcigpOiBtX3JjUGxhdGUoMCwgMCwgMCwgMCksIG1fcmNDb250ZW50KDAsIDAsIDAsIDApIHt9Ow0KLSAgICB2aXJ0dWFsIH5DUERGX0VkaXRDb250YWluZXIoKSB7fTsNCi0gICAgdmlydHVhbCB2b2lkCQkJCQkJCVNldFBsYXRlUmVjdChjb25zdCBDUERGX1JlY3QgJiByZWN0KQ0KLSAgICB7DQotICAgICAgICBtX3JjUGxhdGUgPSByZWN0Ow0KLSAgICB9Ow0KLSAgICB2aXJ0dWFsIGNvbnN0IENQREZfUmVjdCAmCQkJCUdldFBsYXRlUmVjdCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3JjUGxhdGU7DQotICAgIH07DQotICAgIHZpcnR1YWwgdm9pZAkJCQkJCQlTZXRDb250ZW50UmVjdChjb25zdCBDUFZUX0Zsb2F0UmVjdCAmIHJlY3QpDQotICAgIHsNCi0gICAgICAgIG1fcmNDb250ZW50ID0gcmVjdDsNCi0gICAgfTsNCi0gICAgdmlydHVhbCBDUERGX1JlY3QgCQkJCQkJR2V0Q29udGVudFJlY3QoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9yY0NvbnRlbnQ7DQotICAgIH07DQotICAgIEZYX0ZMT0FUCQkJCQkJCQlHZXRQbGF0ZVdpZHRoKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcmNQbGF0ZS5yaWdodCAtIG1fcmNQbGF0ZS5sZWZ0Ow0KLSAgICB9Ow0KLSAgICBGWF9GTE9BVAkJCQkJCQkJR2V0UGxhdGVIZWlnaHQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9yY1BsYXRlLnRvcCAtIG1fcmNQbGF0ZS5ib3R0b207DQotICAgIH07DQotICAgIENQVlRfU2l6ZQkJCQkJCQkJR2V0UGxhdGVTaXplKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIENQVlRfU2l6ZShHZXRQbGF0ZVdpZHRoKCksIEdldFBsYXRlSGVpZ2h0KCkpOw0KLSAgICB9Ow0KLSAgICBDUERGX1BvaW50CQkJCQkJCQlHZXRCVFBvaW50KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIENQREZfUG9pbnQobV9yY1BsYXRlLmxlZnQsIG1fcmNQbGF0ZS50b3ApOw0KLSAgICB9Ow0KLSAgICBDUERGX1BvaW50CQkJCQkJCQlHZXRFVFBvaW50KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIENQREZfUG9pbnQobV9yY1BsYXRlLnJpZ2h0LCBtX3JjUGxhdGUuYm90dG9tKTsNCi0gICAgfTsNCi0gICAgaW5saW5lIENQREZfUG9pbnQJCQkJCQlJblRvT3V0KGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIENQREZfUG9pbnQocG9pbnQueCArIEdldEJUUG9pbnQoKS54LCBHZXRCVFBvaW50KCkueSAtIHBvaW50LnkpOw0KLSAgICB9Ow0KLSAgICBpbmxpbmUgQ1BERl9Qb2ludAkJCQkJCU91dFRvSW4oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gQ1BERl9Qb2ludChwb2ludC54IC0gR2V0QlRQb2ludCgpLngsIEdldEJUUG9pbnQoKS55IC0gcG9pbnQueSk7DQotICAgIH07DQotICAgIGlubGluZSBDUERGX1JlY3QJCQkJCQlJblRvT3V0KGNvbnN0IENQVlRfRmxvYXRSZWN0ICYgcmVjdCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgQ1BERl9Qb2ludCBwdExlZnRUb3AgPSBJblRvT3V0KENQREZfUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCkpOw0KLSAgICAgICAgQ1BERl9Qb2ludCBwdFJpZ2h0Qm90dG9tID0gSW5Ub091dChDUERGX1BvaW50KHJlY3QucmlnaHQsIHJlY3QuYm90dG9tKSk7DQotICAgICAgICByZXR1cm4gQ1BERl9SZWN0KHB0TGVmdFRvcC54LCBwdFJpZ2h0Qm90dG9tLnksIHB0UmlnaHRCb3R0b20ueCwgcHRMZWZ0VG9wLnkpOw0KLSAgICB9Ow0KLSAgICBpbmxpbmUgQ1BWVF9GbG9hdFJlY3QJCQkJCU91dFRvSW4oY29uc3QgQ1BERl9SZWN0ICYgcmVjdCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgQ1BERl9Qb2ludCBwdExlZnRUb3AgPSBPdXRUb0luKENQREZfUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCkpOw0KLSAgICAgICAgQ1BERl9Qb2ludCBwdFJpZ2h0Qm90dG9tID0gT3V0VG9JbihDUERGX1BvaW50KHJlY3QucmlnaHQsIHJlY3QuYm90dG9tKSk7DQotICAgICAgICByZXR1cm4gQ1BWVF9GbG9hdFJlY3QocHRMZWZ0VG9wLngsIHB0TGVmdFRvcC55LCBwdFJpZ2h0Qm90dG9tLngsIHB0UmlnaHRCb3R0b20ueSk7DQotICAgIH07DQotDQotcHJpdmF0ZToNCi0gICAgQ1BERl9SZWN0CQkJCQkJCQltX3JjUGxhdGU7DQotICAgIENQVlRfRmxvYXRSZWN0CQkJCQkJCW1fcmNDb250ZW50Ow0KLX07DQotY2xhc3MgQ1BERl9WYXJpYWJsZVRleHQgOiBwdWJsaWMgSVBERl9WYXJpYWJsZVRleHQsIHB1YmxpYyBDRlhfT2JqZWN0LCBwcml2YXRlIENQREZfRWRpdENvbnRhaW5lcg0KLXsNCi0gICAgZnJpZW5kIGNsYXNzIENUeXBlc2V0Ow0KLSAgICBmcmllbmQgY2xhc3MgQ1NlY3Rpb247DQotICAgIGZyaWVuZCBjbGFzcyBDUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvcjsNCi1wdWJsaWM6DQotICAgIENQREZfVmFyaWFibGVUZXh0KCk7DQotICAgIHZpcnR1YWwgfkNQREZfVmFyaWFibGVUZXh0KCk7DQotICAgIElQREZfVmFyaWFibGVUZXh0X1Byb3ZpZGVyKgkJCQlTZXRQcm92aWRlcihJUERGX1ZhcmlhYmxlVGV4dF9Qcm92aWRlciAqIHBQcm92aWRlcik7DQotICAgIElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yKgkJCQlHZXRJdGVyYXRvcigpOw0KLSAgICB2b2lkCQkJCQkJCQkJU2V0UGxhdGVSZWN0KGNvbnN0IENQREZfUmVjdCAmIHJlY3QpDQotICAgIHsNCi0gICAgICAgIENQREZfRWRpdENvbnRhaW5lcjo6U2V0UGxhdGVSZWN0KHJlY3QpOw0KLSAgICB9DQotICAgIHZvaWQJCQkJCQkJCQlTZXRBbGlnbm1lbnQoRlhfSU5UMzIgbkZvcm1hdCA9IDApDQotICAgIHsNCi0gICAgICAgIG1fbkFsaWdubWVudCA9IG5Gb3JtYXQ7DQotICAgIH0NCi0gICAgdm9pZAkJCQkJCQkJCVNldFBhc3N3b3JkQ2hhcihGWF9XT1JEIHdTdWJXb3JkID0gJyonKQ0KLSAgICB7DQotICAgICAgICBtX3dTdWJXb3JkID0gd1N1YldvcmQ7DQotICAgIH0NCi0gICAgdm9pZAkJCQkJCQkJCVNldExpbWl0Q2hhcihGWF9JTlQzMiBuTGltaXRDaGFyID0gMCkNCi0gICAgew0KLSAgICAgICAgbV9uTGltaXRDaGFyID0gbkxpbWl0Q2hhcjsNCi0gICAgfQ0KLSAgICB2b2lkCQkJCQkJCQkJU2V0Q2hhclNwYWNlKEZYX0ZMT0FUIGZDaGFyU3BhY2UgPSAwLjBmKQ0KLSAgICB7DQotICAgICAgICBtX2ZDaGFyU3BhY2UgPSBmQ2hhclNwYWNlOw0KLSAgICB9DQotICAgIHZvaWQJCQkJCQkJCQlTZXRIb3J6U2NhbGUoRlhfSU5UMzIgbkhvcnpTY2FsZSA9IDEwMCkNCi0gICAgew0KLSAgICAgICAgbV9uSG9yelNjYWxlID0gbkhvcnpTY2FsZTsNCi0gICAgfQ0KLSAgICB2b2lkCQkJCQkJCQkJU2V0TXVsdGlMaW5lKEZYX0JPT0wgYk11bHRpTGluZSA9IFRSVUUpDQotICAgIHsNCi0gICAgICAgIG1fYk11bHRpTGluZSA9IGJNdWx0aUxpbmU7DQotICAgIH0NCi0gICAgdm9pZAkJCQkJCQkJCVNldEF1dG9SZXR1cm4oRlhfQk9PTCBiQXV0byA9IFRSVUUpDQotICAgIHsNCi0gICAgICAgIG1fYkxpbWl0V2lkdGggPSBiQXV0bzsNCi0gICAgfQ0KLSAgICB2b2lkCQkJCQkJCQkJU2V0Rm9udFNpemUoRlhfRkxPQVQgZkZvbnRTaXplKQ0KLSAgICB7DQotICAgICAgICBtX2ZGb250U2l6ZSA9IGZGb250U2l6ZTsNCi0gICAgfQ0KLSAgICB2b2lkCQkJCQkJCQkJU2V0Q2hhckFycmF5KEZYX0lOVDMyIG5DaGFyQXJyYXkgPSAwKQ0KLSAgICB7DQotICAgICAgICBtX25DaGFyQXJyYXkgPSBuQ2hhckFycmF5Ow0KLSAgICB9DQotICAgIHZvaWQJCQkJCQkJCQlTZXRBdXRvRm9udFNpemUoRlhfQk9PTCBiQXV0byA9IFRSVUUpDQotICAgIHsNCi0gICAgICAgIG1fYkF1dG9Gb250U2l6ZSA9IGJBdXRvOw0KLSAgICB9DQotICAgIHZvaWQJCQkJCQkJCQlTZXRSaWNoVGV4dChGWF9CT09MIGJSaWNoVGV4dCkNCi0gICAgew0KLSAgICAgICAgbV9iUmljaFRleHQgPSBiUmljaFRleHQ7DQotICAgIH0NCi0gICAgdm9pZAkJCQkJCQkJCVNldExpbmVMZWFkaW5nKEZYX0ZMT0FUIGZMaW5lTGVhZGluZykNCi0gICAgew0KLSAgICAgICAgbV9mTGluZUxlYWRpbmcgPSBmTGluZUxlYWRpbmc7DQotICAgIH0NCi0gICAgdm9pZAkJCQkJCQkJCUluaXRpYWxpemUoKTsNCi0gICAgRlhfQk9PTAkJCQkJCQkJCUlzVmFsaWQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9iSW5pdGlhbDsNCi0gICAgfQ0KLSAgICBGWF9CT09MCQkJCQkJCQkJSXNSaWNoVGV4dCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX2JSaWNoVGV4dDsNCi0gICAgfQ0KLSAgICB2b2lkCQkJCQkJCQkJUmVhcnJhbmdlQWxsKCk7DQotICAgIHZvaWQJCQkJCQkJCQlSZWFycmFuZ2VQYXJ0KGNvbnN0IENQVlRfV29yZFJhbmdlICYgUGxhY2VSYW5nZSk7DQotICAgIHZvaWQJCQkJCQkJCQlSZXNldEFsbCgpOw0KLSAgICB2b2lkCQkJCQkJCQkJU2V0VGV4dChGWF9MUENXU1RSIHRleHQsIEZYX0lOVDMyIGNoYXJzZXQgPSAxLCBjb25zdCBDUFZUX1NlY1Byb3BzICogcFNlY1Byb3BzID0gTlVMTCwNCi0gICAgICAgICAgICBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMgPSBOVUxMKTsNCi0gICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJSW5zZXJ0V29yZChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIGNoYXJzZXQgPSAxLA0KLSAgICAgICAgICAgIGNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcyA9IE5VTEwpOw0KLSAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlJbnNlcnRTZWN0aW9uKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIGNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMgPSBOVUxMLA0KLSAgICAgICAgICAgIGNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcyA9IE5VTEwpOw0KLSAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlJbnNlcnRUZXh0KGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIEZYX0xQQ1dTVFIgdGV4dCwgRlhfSU5UMzIgY2hhcnNldCA9IDEsDQotICAgICAgICAgICAgY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcyA9IE5VTEwsCWNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcyA9IE5VTEwpOw0KLSAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlEZWxldGVXb3Jkcyhjb25zdCBDUFZUX1dvcmRSYW5nZSAmIFBsYWNlUmFuZ2UpOw0KLSAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlEZWxldGVXb3JkKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpOw0KLSAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlCYWNrU3BhY2VXb3JkKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpOw0KLSAgICBjb25zdCBDUERGX1JlY3QgJgkJCQkJCUdldFBsYXRlUmVjdCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBDUERGX0VkaXRDb250YWluZXI6OkdldFBsYXRlUmVjdCgpOw0KLSAgICB9DQotICAgIENQREZfUmVjdAkJCQkJCQkJR2V0Q29udGVudFJlY3QoKSBjb25zdDsNCi0gICAgRlhfSU5UMzIJCQkJCQkJCUdldFRvdGFsV29yZHMoKSBjb25zdDsNCi0gICAgRlhfRkxPQVQJCQkJCQkJCUdldEZvbnRTaXplKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fZkZvbnRTaXplOw0KLSAgICB9DQotICAgIEZYX0lOVDMyCQkJCQkJCQlHZXRBbGlnbm1lbnQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9uQWxpZ25tZW50Ow0KLSAgICB9DQotICAgIEZYX0lOVDMyCQkJCQkJCQlHZXRDaGFyQXJyYXkoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9uQ2hhckFycmF5Ow0KLSAgICB9DQotICAgIEZYX0lOVDMyCQkJCQkJCQlHZXRMaW1pdENoYXIoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9uTGltaXRDaGFyOw0KLSAgICB9DQotICAgIEZYX0JPT0wJCQkJCQkJCQlJc011bHRpTGluZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX2JNdWx0aUxpbmU7DQotICAgIH0NCi0gICAgRlhfSU5UMzIJCQkJCQkJCUdldEhvcnpTY2FsZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX25Ib3J6U2NhbGU7DQotICAgIH0NCi0gICAgRlhfRkxPQVQJCQkJCQkJCUdldENoYXJTcGFjZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX2ZDaGFyU3BhY2U7DQotICAgIH0NCi0NCi0gICAgaW5saW5lIENQVlRfV29yZFBsYWNlCQkJCQlHZXRCZWdpbldvcmRQbGFjZSgpIGNvbnN0Ow0KLSAgICBpbmxpbmUgQ1BWVF9Xb3JkUGxhY2UJCQkJCUdldEVuZFdvcmRQbGFjZSgpIGNvbnN0Ow0KLSAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlHZXRQcmV2V29yZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0Ow0KLSAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlHZXROZXh0V29yZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0Ow0KLSAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlTZWFyY2hXb3JkUGxhY2UoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdDsNCi0gICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJR2V0VXBXb3JkUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSwgY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdDsNCi0gICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJR2V0RG93bldvcmRQbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpIGNvbnN0Ow0KLSAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlHZXRMaW5lQmVnaW5QbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdDsNCi0gICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJR2V0TGluZUVuZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0Ow0KLSAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlHZXRTZWN0aW9uQmVnaW5QbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdDsNCi0gICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJR2V0U2VjdGlvbkVuZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0Ow0KLSAgICB2b2lkCQkJCQkJCQkJVXBkYXRlV29yZFBsYWNlKENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0Ow0KLSAgICBGWF9JTlQzMgkJCQkJCQkJV29yZFBsYWNlVG9Xb3JkSW5kZXgoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3Q7DQotICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCVdvcmRJbmRleFRvV29yZFBsYWNlKEZYX0lOVDMyIGluZGV4KSBjb25zdDsNCi0gICAgRlhfV09SRAkJCQkJCQkJCUdldFBhc3N3b3JkQ2hhcigpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBHZXRTdWJXb3JkKCk7DQotICAgIH0NCi0gICAgRlhfV09SRAkJCQkJCQkJCUdldFN1YldvcmQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV93U3ViV29yZDsNCi0gICAgfQ0KLXByaXZhdGU6DQotICAgIEZYX0lOVDMyCQkJCQkJCQlHZXRDaGFyV2lkdGgoRlhfSU5UMzIgbkZvbnRJbmRleCwgRlhfV09SRCBXb3JkLCBGWF9XT1JEIFN1YldvcmQsIEZYX0lOVDMyIG5Xb3JkU3R5bGUpOw0KLSAgICBGWF9JTlQzMgkJCQkJCQkJR2V0VHlwZUFzY2VudChGWF9JTlQzMiBuRm9udEluZGV4KTsNCi0gICAgRlhfSU5UMzIJCQkJCQkJCUdldFR5cGVEZXNjZW50KEZYX0lOVDMyIG5Gb250SW5kZXgpOw0KLSAgICBGWF9JTlQzMgkJCQkJCQkJR2V0V29yZEZvbnRJbmRleChGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIGNoYXJzZXQsIEZYX0lOVDMyIG5Gb250SW5kZXgpOw0KLSAgICBGWF9JTlQzMgkJCQkJCQkJR2V0RGVmYXVsdEZvbnRJbmRleCgpOw0KLSAgICBGWF9CT09MCQkJCQkJCQkJSXNMYXRpbldvcmQoRlhfV09SRCB3b3JkKTsNCi1wcml2YXRlOg0KLQ0KLSAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlBZGRTZWN0aW9uKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIGNvbnN0IENQVlRfU2VjdGlvbkluZm8gJiBzZWNpbmZvKTsNCi0gICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJQWRkTGluZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBjb25zdCBDUFZUX0xpbmVJbmZvICYgbGluZWluZm8pOw0KLSAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlBZGRXb3JkKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIGNvbnN0IENQVlRfV29yZEluZm8gJiB3b3JkaW5mbyk7DQotICAgIEZYX0JPT0wJCQkJCQkJCQlHZXRXb3JkSW5mbyhjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBDUFZUX1dvcmRJbmZvICYgd29yZGluZm8pOw0KLSAgICBGWF9CT09MCQkJCQkJCQkJU2V0V29yZEluZm8oY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkSW5mbyAmIHdvcmRpbmZvKTsNCi0gICAgRlhfQk9PTAkJCQkJCQkJCUdldExpbmVJbmZvKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIENQVlRfTGluZUluZm8gJiBsaW5laW5mbyk7DQotICAgIEZYX0JPT0wJCQkJCQkJCQlHZXRTZWN0aW9uSW5mbyhjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBDUFZUX1NlY3Rpb25JbmZvICYgc2VjaW5mbyk7DQotICAgIEZYX0ZMT0FUCQkJCQkJCQlHZXRXb3JkRm9udFNpemUoY29uc3QgQ1BWVF9Xb3JkSW5mbyAmIFdvcmRJbmZvLCBGWF9CT09MIGJGYWN0Rm9udFNpemUgPSBGQUxTRSk7DQotICAgIEZYX0ZMT0FUCQkJCQkJCQlHZXRXb3JkV2lkdGgoRlhfSU5UMzIgbkZvbnRJbmRleCwgRlhfV09SRCBXb3JkLCBGWF9XT1JEIFN1YldvcmQsDQotICAgICAgICAgICAgRlhfRkxPQVQgZkNoYXJTcGFjZSwgRlhfSU5UMzIgbkhvcnpTY2FsZSwNCi0gICAgICAgICAgICBGWF9GTE9BVCBmRm9udFNpemUsIEZYX0ZMT0FUIGZXb3JkVGFpbCwgRlhfSU5UMzIgbldvcmRTdHlsZSk7DQotICAgIEZYX0ZMT0FUCQkJCQkJCQlHZXRXb3JkV2lkdGgoY29uc3QgQ1BWVF9Xb3JkSW5mbyAmIFdvcmRJbmZvKTsNCi0gICAgRlhfRkxPQVQJCQkJCQkJCUdldFdvcmRBc2NlbnQoY29uc3QgQ1BWVF9Xb3JkSW5mbyAmIFdvcmRJbmZvLCBGWF9GTE9BVCBmRm9udFNpemUpOw0KLSAgICBGWF9GTE9BVAkJCQkJCQkJR2V0V29yZERlc2NlbnQoY29uc3QgQ1BWVF9Xb3JkSW5mbyAmIFdvcmRJbmZvLCBGWF9GTE9BVCBmRm9udFNpemUpOw0KLSAgICBGWF9GTE9BVAkJCQkJCQkJR2V0V29yZEFzY2VudChjb25zdCBDUFZUX1dvcmRJbmZvICYgV29yZEluZm8sIEZYX0JPT0wgYkZhY3RGb250U2l6ZSA9IEZBTFNFKTsNCi0gICAgRlhfRkxPQVQJCQkJCQkJCUdldFdvcmREZXNjZW50KGNvbnN0IENQVlRfV29yZEluZm8gJiBXb3JkSW5mbywgRlhfQk9PTCBiRmFjdEZvbnRTaXplID0gRkFMU0UpOw0KLSAgICBGWF9GTE9BVAkJCQkJCQkJR2V0TGluZUFzY2VudChjb25zdCBDUFZUX1NlY3Rpb25JbmZvICYgU2VjSW5mbyk7DQotICAgIEZYX0ZMT0FUCQkJCQkJCQlHZXRMaW5lRGVzY2VudChjb25zdCBDUFZUX1NlY3Rpb25JbmZvICYgU2VjSW5mbyk7DQotICAgIEZYX0ZMT0FUCQkJCQkJCQlHZXRGb250QXNjZW50KEZYX0lOVDMyIG5Gb250SW5kZXgsIEZYX0ZMT0FUIGZGb250U2l6ZSk7DQotICAgIEZYX0ZMT0FUCQkJCQkJCQlHZXRGb250RGVzY2VudChGWF9JTlQzMiBuRm9udEluZGV4LCBGWF9GTE9BVCBmRm9udFNpemUpOw0KLSAgICBGWF9JTlQzMgkJCQkJCQkJR2V0V29yZEZvbnRJbmRleChjb25zdCBDUFZUX1dvcmRJbmZvICYgV29yZEluZm8pOw0KLSAgICBGWF9GTE9BVAkJCQkJCQkJR2V0Q2hhclNwYWNlKGNvbnN0IENQVlRfV29yZEluZm8gJiBXb3JkSW5mbyk7DQotICAgIEZYX0lOVDMyCQkJCQkJCQlHZXRIb3J6U2NhbGUoY29uc3QgQ1BWVF9Xb3JkSW5mbyAmIFdvcmRJbmZvKTsNCi0gICAgRlhfRkxPQVQJCQkJCQkJCUdldExpbmVMZWFkaW5nKGNvbnN0IENQVlRfU2VjdGlvbkluZm8gJiBTZWNJbmZvKTsNCi0gICAgRlhfRkxPQVQJCQkJCQkJCUdldExpbmVJbmRlbnQoY29uc3QgQ1BWVF9TZWN0aW9uSW5mbyAmIFNlY0luZm8pOw0KLSAgICBGWF9JTlQzMgkJCQkJCQkJR2V0QWxpZ25tZW50KGNvbnN0IENQVlRfU2VjdGlvbkluZm8mIFNlY0luZm8pOw0KLQ0KLSAgICB2b2lkCQkJCQkJCQkJQ2xlYXJTZWN0aW9uUmlnaHRXb3Jkcyhjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKTsNCi0gICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJQWp1c3RMaW5lSGVhZGVyKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIEZYX0JPT0wgYlByZXZPck5leHQpIGNvbnN0Ow0KLSAgICBGWF9CT09MCQkJCQkJCQkJQ2xlYXJFbXB0eVNlY3Rpb24oY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSk7DQotICAgIHZvaWQJCQkJCQkJCQlDbGVhckVtcHR5U2VjdGlvbnMoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiBQbGFjZVJhbmdlKTsNCi0gICAgdm9pZAkJCQkJCQkJCUxpbmtMYXR0ZXJTZWN0aW9uKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpOw0KLSAgICB2b2lkCQkJCQkJCQkJQ2xlYXJXb3Jkcyhjb25zdCBDUFZUX1dvcmRSYW5nZSAmIFBsYWNlUmFuZ2UpOw0KLSAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlDbGVhckxlZnRXb3JkKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpOw0KLSAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlDbGVhclJpZ2h0V29yZChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKTsNCi1wcml2YXRlOg0KLSAgICBDUFZUX0Zsb2F0UmVjdAkJCQkJCQlSZWFycmFuZ2UoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiBQbGFjZVJhbmdlKTsNCi0gICAgRlhfRkxPQVQJCQkJCQkJCUdldEF1dG9Gb250U2l6ZSgpOw0KLSAgICBGWF9CT09MCQkJCQkJCQkJSXNCaWdnZXIoRlhfRkxPQVQgZkZvbnRTaXplKTsNCi0gICAgQ1BWVF9GbG9hdFJlY3QJCQkJCQkJUmVhcnJhbmdlU2VjdGlvbnMoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiBQbGFjZVJhbmdlKTsNCi1wcml2YXRlOg0KLSAgICB2b2lkCQkJCQkJCQkJUmVzZXRTZWN0aW9uQXJyYXkoKTsNCi1wcml2YXRlOg0KLSAgICBDUFZUX0FycmF5VGVtcGxhdGU8Q1NlY3Rpb24qPgkJCW1fU2VjdGlvbkFycmF5Ow0KLSAgICBGWF9JTlQzMgkJCQkJCQkJbV9uTGltaXRDaGFyOw0KLSAgICBGWF9JTlQzMgkJCQkJCQkJbV9uQ2hhckFycmF5Ow0KLSAgICBGWF9CT09MCQkJCQkJCQkJbV9iTXVsdGlMaW5lOw0KLSAgICBGWF9CT09MCQkJCQkJCQkJbV9iTGltaXRXaWR0aDsNCi0gICAgRlhfQk9PTAkJCQkJCQkJCW1fYkF1dG9Gb250U2l6ZTsNCi0gICAgRlhfSU5UMzIJCQkJCQkJCW1fbkFsaWdubWVudDsNCi0gICAgRlhfRkxPQVQJCQkJCQkJCW1fZkxpbmVMZWFkaW5nOw0KLSAgICBGWF9GTE9BVAkJCQkJCQkJbV9mQ2hhclNwYWNlOw0KLSAgICBGWF9JTlQzMgkJCQkJCQkJbV9uSG9yelNjYWxlOw0KLSAgICBGWF9XT1JECQkJCQkJCQkJbV93U3ViV29yZDsNCi0gICAgRlhfRkxPQVQJCQkJCQkJCW1fZldvcmRTcGFjZTsNCi0gICAgRlhfRkxPQVQJCQkJCQkJCW1fZkZvbnRTaXplOw0KLQ0KLXByaXZhdGU6DQotICAgIEZYX0JPT0wJCQkJCQkJCQltX2JJbml0aWFsOw0KLSAgICBGWF9CT09MCQkJCQkJCQkJbV9iUmljaFRleHQ7DQotICAgIEZYX0ZMT0FUCQkJCQkJCQltX2ZDYXJldE9yaWdpblg7DQotICAgIEZYX0lOVDMyCQkJCQkJCQltX25DdXJGb250SW5kZXg7DQotICAgIElQREZfVmFyaWFibGVUZXh0X1Byb3ZpZGVyICoJCQltX3BWVFByb3ZpZGVyOw0KLSAgICBDUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvciAqCQkJbV9wVlRJdGVyYXRvcjsNCi19Ow0KLWNsYXNzIENQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yIDogcHVibGljIElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yLCBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yKENQREZfVmFyaWFibGVUZXh0ICogcFZUKTsNCi0gICAgdmlydHVhbCB+Q1BERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IoKTsNCi0gICAgRlhfQk9PTAkJCQkJCQkJCU5leHRXb3JkKCk7DQotICAgIEZYX0JPT0wJCQkJCQkJCQlQcmV2V29yZCgpOw0KLSAgICBGWF9CT09MCQkJCQkJCQkJTmV4dExpbmUoKTsNCi0gICAgRlhfQk9PTAkJCQkJCQkJCVByZXZMaW5lKCk7DQotICAgIEZYX0JPT0wJCQkJCQkJCQlOZXh0U2VjdGlvbigpOw0KLSAgICBGWF9CT09MCQkJCQkJCQkJUHJldlNlY3Rpb24oKTsNCi0gICAgRlhfQk9PTAkJCQkJCQkJCVNldFdvcmQoY29uc3QgQ1BWVF9Xb3JkICYgd29yZCk7DQotICAgIEZYX0JPT0wJCQkJCQkJCQlHZXRXb3JkKENQVlRfV29yZCAmIHdvcmQpIGNvbnN0Ow0KLSAgICBGWF9CT09MCQkJCQkJCQkJR2V0TGluZShDUFZUX0xpbmUgJiBsaW5lKSBjb25zdDsNCi0gICAgRlhfQk9PTAkJCQkJCQkJCUdldFNlY3Rpb24oQ1BWVF9TZWN0aW9uICYgc2VjdGlvbikgY29uc3Q7DQotICAgIEZYX0JPT0wJCQkJCQkJCQlTZXRTZWN0aW9uKGNvbnN0IENQVlRfU2VjdGlvbiAmIHNlY3Rpb24pOw0KLSAgICB2b2lkCQkJCQkJCQkJU2V0QXQoRlhfSU5UMzIgbldvcmRJbmRleCk7DQotICAgIHZvaWQJCQkJCQkJCQlTZXRBdChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKTsNCi0gICAgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJgkJCQkJR2V0QXQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9DdXJQb3M7DQotICAgIH07DQotcHJpdmF0ZToNCi0gICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJbV9DdXJQb3M7DQotICAgIENQREZfVmFyaWFibGVUZXh0ICoJCQkJCQltX3BWVDsNCi19Ow0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNkZWZpbmUgX1BERl9WVF9IXworY2xhc3MgQ1BWVF9TaXplOworY2xhc3MgQ1BWVF9GbG9hdFJlY3Q7CitzdHJ1Y3QgQ1BWVF9TZWN0aW9uSW5mbzsKK3N0cnVjdCBDUFZUX0xpbmVJbmZvOworc3RydWN0IENQVlRfV29yZEluZm87CitjbGFzcyBDTGluZTsKK2NsYXNzIENMaW5lczsKK2NsYXNzIENTZWN0aW9uOworY2xhc3MgQ1R5cGVzZXQ7CitjbGFzcyBDUERGX0VkaXRDb250YWluZXI7CitjbGFzcyBDUERGX1ZhcmlhYmxlVGV4dDsKK2NsYXNzIENQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yOworI2RlZmluZSBJc0Zsb2F0WmVybyhmKQkJCQkJCSgoZikgPCAwLjAwMDEgJiYgKGYpID4gLTAuMDAwMSkKKyNkZWZpbmUgSXNGbG9hdEJpZ2dlcihmYSxmYikJCQkJKChmYSkgPiAoZmIpICYmICFJc0Zsb2F0WmVybygoZmEpIC0gKGZiKSkpCisjZGVmaW5lIElzRmxvYXRTbWFsbGVyKGZhLGZiKQkJCQkoKGZhKSA8IChmYikgJiYgIUlzRmxvYXRaZXJvKChmYSkgLSAoZmIpKSkKK3RlbXBsYXRlPGNsYXNzIFQ+IFQgRlBERl9NSU4gKGNvbnN0IFQgJiBpLCBjb25zdCBUICYgaikKK3sKKyAgICByZXR1cm4gKChpIDwgaikgPyBpIDogaik7Cit9Cit0ZW1wbGF0ZTxjbGFzcyBUPiBUIEZQREZfTUFYIChjb25zdCBUICYgaSwgY29uc3QgVCAmIGopCit7CisgICAgcmV0dXJuICgoaSA+IGopID8gaSA6IGopOworfQorY2xhc3MgQ1BWVF9TaXplCit7CitwdWJsaWM6CisgICAgQ1BWVF9TaXplKCkgOiB4KDAuMGYpLCB5KDAuMGYpCisgICAgeworICAgIH0KKyAgICBDUFZUX1NpemUoRlhfRkxPQVQgeCwgRlhfRkxPQVQgeSkKKyAgICB7CisgICAgICAgIHRoaXMtPnggPSB4OworICAgICAgICB0aGlzLT55ID0geTsKKyAgICB9CisgICAgRlhfRkxPQVQgeCwgeTsKK307CitjbGFzcyBDUFZUX0Zsb2F0UmVjdCA6IHB1YmxpYyBDRlhfRmxvYXRSZWN0Cit7CitwdWJsaWM6CisgICAgQ1BWVF9GbG9hdFJlY3QoKQorICAgIHsKKyAgICAgICAgbGVmdCA9IHRvcCA9IHJpZ2h0ID0gYm90dG9tID0gMC4wZjsKKyAgICB9CisgICAgQ1BWVF9GbG9hdFJlY3QoRlhfRkxPQVQgbGVmdCwgRlhfRkxPQVQgdG9wLAorICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIHJpZ2h0LCBGWF9GTE9BVCBib3R0b20pCisgICAgeworICAgICAgICB0aGlzLT5sZWZ0ID0gbGVmdDsKKyAgICAgICAgdGhpcy0+dG9wID0gdG9wOworICAgICAgICB0aGlzLT5yaWdodCA9IHJpZ2h0OworICAgICAgICB0aGlzLT5ib3R0b20gPSBib3R0b207CisgICAgfQorICAgIENQVlRfRmxvYXRSZWN0KGNvbnN0IENQREZfUmVjdCAmIHJlY3QpCisgICAgeworICAgICAgICB0aGlzLT5sZWZ0ID0gcmVjdC5sZWZ0OworICAgICAgICB0aGlzLT50b3AgPSByZWN0LnRvcDsKKyAgICAgICAgdGhpcy0+cmlnaHQgPSByZWN0LnJpZ2h0OworICAgICAgICB0aGlzLT5ib3R0b20gPSByZWN0LmJvdHRvbTsKKyAgICB9CisgICAgdm9pZCBEZWZhdWx0KCkKKyAgICB7CisgICAgICAgIGxlZnQgPSB0b3AgPSByaWdodCA9IGJvdHRvbSA9IDAuMGY7CisgICAgfQorICAgIEZYX0ZMT0FUIEhlaWdodCgpIGNvbnN0CisgICAgeworICAgICAgICBpZih0aGlzLT50b3AgPiB0aGlzLT5ib3R0b20pIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLT50b3AgLSB0aGlzLT5ib3R0b207CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy0+Ym90dG9tIC0gdGhpcy0+dG9wOworICAgICAgICB9CisgICAgfQorfTsKK3N0cnVjdCBDUFZUX1NlY3Rpb25JbmZvIHsKKyAgICBDUFZUX1NlY3Rpb25JbmZvKCkgOiByY1NlY3Rpb24oKSwgblRvdGFsTGluZSgwKSwgcFNlY1Byb3BzKE5VTEwpLCBwV29yZFByb3BzKE5VTEwpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5DUFZUX1NlY3Rpb25JbmZvKCkKKyAgICB7CisgICAgICAgIGlmIChwU2VjUHJvcHMpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwU2VjUHJvcHM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBXb3JkUHJvcHMpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwV29yZFByb3BzOworICAgICAgICB9CisgICAgfQorICAgIENQVlRfU2VjdGlvbkluZm8oY29uc3QgQ1BWVF9TZWN0aW9uSW5mbyAmIG90aGVyKTogcmNTZWN0aW9uKCksIG5Ub3RhbExpbmUoMCksIHBTZWNQcm9wcyhOVUxMKSwgcFdvcmRQcm9wcyhOVUxMKQorICAgIHsKKyAgICAgICAgb3BlcmF0b3IgPSAob3RoZXIpOworICAgIH0KKyAgICB2b2lkIG9wZXJhdG9yID0gKGNvbnN0IENQVlRfU2VjdGlvbkluZm8gJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh0aGlzID09ICZvdGhlcikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMtPnJjU2VjdGlvbiA9IG90aGVyLnJjU2VjdGlvbjsKKyAgICAgICAgdGhpcy0+blRvdGFsTGluZSA9IG90aGVyLm5Ub3RhbExpbmU7CisgICAgICAgIGlmIChvdGhlci5wU2VjUHJvcHMpIHsKKyAgICAgICAgICAgIGlmIChwU2VjUHJvcHMpIHsKKyAgICAgICAgICAgICAgICAqcFNlY1Byb3BzID0gKm90aGVyLnBTZWNQcm9wczsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcFNlY1Byb3BzID0gRlhfTkVXIENQVlRfU2VjUHJvcHMoKm90aGVyLnBTZWNQcm9wcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG90aGVyLnBXb3JkUHJvcHMpIHsKKyAgICAgICAgICAgIGlmIChwV29yZFByb3BzKSB7CisgICAgICAgICAgICAgICAgKnBXb3JkUHJvcHMgPSAqb3RoZXIucFdvcmRQcm9wczsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcFdvcmRQcm9wcyA9IEZYX05FVyBDUFZUX1dvcmRQcm9wcygqb3RoZXIucFdvcmRQcm9wcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQ1BWVF9GbG9hdFJlY3QJCQkJcmNTZWN0aW9uOworICAgIEZYX0lOVDMyCQkJCQluVG90YWxMaW5lOworICAgIENQVlRfU2VjUHJvcHMqCQkJCXBTZWNQcm9wczsKKyAgICBDUFZUX1dvcmRQcm9wcyoJCQkJcFdvcmRQcm9wczsKK307CitzdHJ1Y3QgQ1BWVF9MaW5lSW5mbyB7CisgICAgQ1BWVF9MaW5lSW5mbygpIDogblRvdGFsV29yZCgwKSwgbkJlZ2luV29yZEluZGV4KC0xKSwgbkVuZFdvcmRJbmRleCgtMSksCisgICAgICAgIGZMaW5lWCgwLjBmKSwgZkxpbmVZKDAuMGYpLCBmTGluZVdpZHRoKDAuMGYpLCBmTGluZUFzY2VudCgwLjBmKSwgZkxpbmVEZXNjZW50KDAuMGYpCisgICAgeworICAgIH0KKyAgICBGWF9JTlQzMgkJCQkJblRvdGFsV29yZDsKKyAgICBGWF9JTlQzMgkJCQkJbkJlZ2luV29yZEluZGV4OworICAgIEZYX0lOVDMyCQkJCQluRW5kV29yZEluZGV4OworICAgIEZYX0ZMT0FUCQkJCQlmTGluZVg7CisgICAgRlhfRkxPQVQJCQkJCWZMaW5lWTsKKyAgICBGWF9GTE9BVAkJCQkJZkxpbmVXaWR0aDsKKyAgICBGWF9GTE9BVAkJCQkJZkxpbmVBc2NlbnQ7CisgICAgRlhfRkxPQVQJCQkJCWZMaW5lRGVzY2VudDsKK307CitzdHJ1Y3QgQ1BWVF9Xb3JkSW5mbyA6IHB1YmxpYyBDRlhfT2JqZWN0IHsKKyAgICBDUFZUX1dvcmRJbmZvKCkgOiBXb3JkKDApLCBuQ2hhcnNldCgwKSwKKyAgICAgICAgZldvcmRYKDAuMGYpLCBmV29yZFkoMC4wZiksIGZXb3JkVGFpbCgwLjBmKSwgbkZvbnRJbmRleCgtMSksIHBXb3JkUHJvcHMoTlVMTCkKKyAgICB7CisgICAgfQorICAgIENQVlRfV29yZEluZm8oRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBjaGFyc2V0LCBGWF9JTlQzMiBmb250SW5kZXgsIENQVlRfV29yZFByb3BzICogcFByb3BzKToKKyAgICAgICAgV29yZCh3b3JkKSwgbkNoYXJzZXQoY2hhcnNldCksIGZXb3JkWCgwLjBmKSwgZldvcmRZKDAuMGYpLCBmV29yZFRhaWwoMC4wZiksCisgICAgICAgIG5Gb250SW5kZXgoZm9udEluZGV4KSwgcFdvcmRQcm9wcyhwUHJvcHMpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5DUFZUX1dvcmRJbmZvKCkKKyAgICB7CisgICAgICAgIGlmIChwV29yZFByb3BzKSB7CisgICAgICAgICAgICBkZWxldGUgcFdvcmRQcm9wczsKKyAgICAgICAgfQorICAgIH0KKyAgICBDUFZUX1dvcmRJbmZvKGNvbnN0IENQVlRfV29yZEluZm8gJiB3b3JkKTogV29yZCgwKSwgbkNoYXJzZXQoMCksCisgICAgICAgIGZXb3JkWCgwLjBmKSwgZldvcmRZKDAuMGYpLCBmV29yZFRhaWwoMC4wZiksIG5Gb250SW5kZXgoLTEpLCBwV29yZFByb3BzKE5VTEwpCisgICAgeworICAgICAgICBvcGVyYXRvciA9ICh3b3JkKTsKKyAgICB9CisgICAgdm9pZCBvcGVyYXRvciA9IChjb25zdCBDUFZUX1dvcmRJbmZvICYgd29yZCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzID09ICZ3b3JkKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdGhpcy0+V29yZCA9IHdvcmQuV29yZDsKKyAgICAgICAgdGhpcy0+bkNoYXJzZXQgPSB3b3JkLm5DaGFyc2V0OworICAgICAgICB0aGlzLT5uRm9udEluZGV4ID0gd29yZC5uRm9udEluZGV4OworICAgICAgICBpZiAod29yZC5wV29yZFByb3BzKSB7CisgICAgICAgICAgICBpZiAocFdvcmRQcm9wcykgeworICAgICAgICAgICAgICAgICpwV29yZFByb3BzID0gKndvcmQucFdvcmRQcm9wczsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcFdvcmRQcm9wcyA9IEZYX05FVyBDUFZUX1dvcmRQcm9wcygqd29yZC5wV29yZFByb3BzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBGWF9XT1JECQkJCQkJV29yZDsKKyAgICBGWF9JTlQzMgkJCQkJbkNoYXJzZXQ7CisgICAgRlhfRkxPQVQJCQkJCWZXb3JkWDsKKyAgICBGWF9GTE9BVAkJCQkJZldvcmRZOworICAgIEZYX0ZMT0FUCQkJCQlmV29yZFRhaWw7CisgICAgRlhfSU5UMzIJCQkJCW5Gb250SW5kZXg7CisgICAgQ1BWVF9Xb3JkUHJvcHMqCQkJCXBXb3JkUHJvcHM7Cit9Oworc3RydWN0IENQVlRfRmxvYXRSYW5nZSB7CisgICAgQ1BWVF9GbG9hdFJhbmdlKCkgOiBmTWluKDAuMGYpLCBmTWF4KDAuMGYpCisgICAgeworICAgIH0KKyAgICBDUFZUX0Zsb2F0UmFuZ2UoRlhfRkxPQVQgbWluLCBGWF9GTE9BVCBtYXgpIDogZk1pbihtaW4pLCBmTWF4KG1heCkKKyAgICB7CisgICAgfQorICAgIEZYX0ZMT0FUIFJhbmdlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmTWF4IC0gZk1pbjsKKyAgICB9CisgICAgRlhfRkxPQVQgZk1pbiwgZk1heDsKK307Cit0ZW1wbGF0ZTxjbGFzcyBUWVBFPiBjbGFzcyBDUFZUX0FycmF5VGVtcGxhdGUgOiBwdWJsaWMgQ0ZYX0FycmF5VGVtcGxhdGU8VFlQRT4KK3sKK3B1YmxpYzoKKyAgICBGWF9CT09MIElzRW1wdHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENGWF9BcnJheVRlbXBsYXRlPFRZUEU+OjpHZXRTaXplKCkgPD0gMDsKKyAgICB9CisgICAgVFlQRSBHZXRBdChpbnQgbkluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG5JbmRleCA+PSAwICYmIG5JbmRleCA8IENGWF9BcnJheVRlbXBsYXRlPFRZUEU+OjpHZXRTaXplKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBDRlhfQXJyYXlUZW1wbGF0ZTxUWVBFPjo6R2V0QXQobkluZGV4KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdm9pZCBSZW1vdmVBdChpbnQgbkluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKG5JbmRleCA+PSAwICYmIG5JbmRleCA8IENGWF9BcnJheVRlbXBsYXRlPFRZUEU+OjpHZXRTaXplKCkpIHsKKyAgICAgICAgICAgIENGWF9BcnJheVRlbXBsYXRlPFRZUEU+OjpSZW1vdmVBdChuSW5kZXgpOworICAgICAgICB9CisgICAgfQorfTsKK2NsYXNzIENMaW5lIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBDTGluZSgpOworICAgIHZpcnR1YWwgfkNMaW5lKCk7CisgICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJR2V0QmVnaW5Xb3JkUGxhY2UoKSBjb25zdDsKKyAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlHZXRFbmRXb3JkUGxhY2UoKSBjb25zdDsKKyAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlHZXRQcmV2V29yZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0OworICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCUdldE5leHRXb3JkUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3Q7CisgICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJTGluZVBsYWNlOworICAgIENQVlRfTGluZUluZm8JCQkJCQkJbV9MaW5lSW5mbzsKK307CitjbGFzcyBDTGluZXMKK3sKK3B1YmxpYzoKKyAgICBDTGluZXMoKSA6IG1fblRvdGFsKDApIHt9CisgICAgdmlydHVhbCB+Q0xpbmVzKCkKKyAgICB7CisgICAgICAgIFJlbW92ZUFsbCgpOworICAgIH0KKyAgICBGWF9JTlQzMgkJCQkJCQkJR2V0U2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9MaW5lcy5HZXRTaXplKCk7CisgICAgfQorICAgIENMaW5lICoJCQkJCQkJCQlHZXRBdChGWF9JTlQzMiBuSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9MaW5lcy5HZXRBdChuSW5kZXgpOworICAgIH0KKyAgICB2b2lkCQkJCQkJCQkJRW1wdHkoKQorICAgIHsKKyAgICAgICAgbV9uVG90YWwgPSAwOworICAgIH0KKyAgICB2b2lkCQkJCQkJCQkJUmVtb3ZlQWxsKCkKKyAgICB7CisgICAgICAgIGZvciAoRlhfSU5UMzIgaSA9IDAsIHN6ID0gR2V0U2l6ZSgpOyBpIDwgc3o7IGkrKykgeworICAgICAgICAgICAgZGVsZXRlIEdldEF0KGkpOworICAgICAgICB9CisgICAgICAgIG1fTGluZXMuUmVtb3ZlQWxsKCk7CisgICAgICAgIG1fblRvdGFsID0gMDsKKyAgICB9CisgICAgRlhfSU5UMzIJCQkJCQkJCUFkZChjb25zdCBDUFZUX0xpbmVJbmZvICYgbGluZWluZm8pCisgICAgeworICAgICAgICBpZiAobV9uVG90YWwgPj0gR2V0U2l6ZSgpKSB7CisgICAgICAgICAgICBpZiAoQ0xpbmUgKiBwTGluZSA9IEZYX05FVyBDTGluZSkgeworICAgICAgICAgICAgICAgIHBMaW5lLT5tX0xpbmVJbmZvID0gbGluZWluZm87CisgICAgICAgICAgICAgICAgbV9MaW5lcy5BZGQocExpbmUpOworICAgICAgICAgICAgICAgIHJldHVybiBtX25Ub3RhbCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1fblRvdGFsOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKENMaW5lICogcExpbmUgPSBHZXRBdChtX25Ub3RhbCkpIHsKKyAgICAgICAgICAgICAgICBwTGluZS0+bV9MaW5lSW5mbyA9IGxpbmVpbmZvOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1fblRvdGFsKys7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZAkJCQkJCQkJCUNsZWFyKCkKKyAgICB7CisgICAgICAgIGZvciAoRlhfSU5UMzIgaSA9IEdldFNpemUoKSAtIDE7IGkgPj0gbV9uVG90YWw7IGktLSkgeworICAgICAgICAgICAgZGVsZXRlIEdldEF0KGkpOworICAgICAgICAgICAgbV9MaW5lcy5SZW1vdmVBdChpKTsKKyAgICAgICAgfQorICAgIH0KK3ByaXZhdGU6CisgICAgQ1BWVF9BcnJheVRlbXBsYXRlPENMaW5lKj4JCQkJbV9MaW5lczsKKyAgICBGWF9JTlQzMgkJCQkJCQkJbV9uVG90YWw7Cit9OworY2xhc3MgQ1NlY3Rpb24gOiBwdWJsaWMgQ0ZYX09iamVjdAoreworICAgIGZyaWVuZCBjbGFzcyBDVHlwZXNldDsKK3B1YmxpYzoKKyAgICBDU2VjdGlvbihDUERGX1ZhcmlhYmxlVGV4dCAqIHBWVCk7CisgICAgdmlydHVhbCB+Q1NlY3Rpb24oKTsKKyAgICB2b2lkCQkJCQkJCQkJUmVzZXRBbGwoKTsKKyAgICB2b2lkCQkJCQkJCQkJUmVzZXRMaW5lQXJyYXkoKTsKKyAgICB2b2lkCQkJCQkJCQkJUmVzZXRXb3JkQXJyYXkoKTsKKyAgICB2b2lkCQkJCQkJCQkJUmVzZXRMaW5lUGxhY2UoKTsKKyAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlBZGRXb3JkKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIGNvbnN0IENQVlRfV29yZEluZm8gJiB3b3JkaW5mbyk7CisgICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJQWRkTGluZShjb25zdCBDUFZUX0xpbmVJbmZvICYgbGluZWluZm8pOworICAgIHZvaWQJCQkJCQkJCQlDbGVhcldvcmRzKGNvbnN0IENQVlRfV29yZFJhbmdlICYgUGxhY2VSYW5nZSk7CisgICAgdm9pZAkJCQkJCQkJCUNsZWFyV29yZChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKTsKKyAgICBDUFZUX0Zsb2F0UmVjdAkJCQkJCQlSZWFycmFuZ2UoKTsKKyAgICBDUFZUX1NpemUJCQkJCQkJCUdldFNlY3Rpb25TaXplKEZYX0ZMT0FUIGZGb250U2l6ZSk7CisgICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJR2V0QmVnaW5Xb3JkUGxhY2UoKSBjb25zdDsKKyAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlHZXRFbmRXb3JkUGxhY2UoKSBjb25zdDsKKyAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlHZXRQcmV2V29yZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0OworICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCUdldE5leHRXb3JkUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3Q7CisgICAgdm9pZAkJCQkJCQkJCVVwZGF0ZVdvcmRQbGFjZShDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdDsKKyAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlTZWFyY2hXb3JkUGxhY2UoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdDsKKyAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlTZWFyY2hXb3JkUGxhY2UoRlhfRkxPQVQgZngsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgbGluZXBsYWNlKSBjb25zdDsKKyAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlTZWFyY2hXb3JkUGxhY2UoRlhfRkxPQVQgZngsIGNvbnN0IENQVlRfV29yZFJhbmdlICYgcmFuZ2UpIGNvbnN0OworcHVibGljOgorICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCVNlY1BsYWNlOworICAgIENQVlRfU2VjdGlvbkluZm8JCQkJCQltX1NlY0luZm87CisgICAgQ0xpbmVzCQkJCQkJCQkJbV9MaW5lQXJyYXk7CisgICAgQ1BWVF9BcnJheVRlbXBsYXRlPENQVlRfV29yZEluZm8qPgkJbV9Xb3JkQXJyYXk7Citwcml2YXRlOgorICAgIHZvaWQJCQkJCQkJCQlDbGVhckxlZnRXb3JkcyhGWF9JTlQzMiBuV29yZEluZGV4KTsKKyAgICB2b2lkCQkJCQkJCQkJQ2xlYXJSaWdodFdvcmRzKEZYX0lOVDMyIG5Xb3JkSW5kZXgpOworICAgIHZvaWQJCQkJCQkJCQlDbGVhck1pZFdvcmRzKEZYX0lOVDMyIG5CZWdpbkluZGV4LCBGWF9JTlQzMiBuRW5kSW5kZXgpOworCisgICAgQ1BERl9WYXJpYWJsZVRleHQJCQkJCQkqbV9wVlQ7Cit9OworY2xhc3MgQ1R5cGVzZXQKK3sKK3B1YmxpYzoKKyAgICBDVHlwZXNldChDU2VjdGlvbiAqIHBTZWN0aW9uKTsKKyAgICB2aXJ0dWFsIH5DVHlwZXNldCgpOworICAgIENQVlRfU2l6ZQkJCQkJCQkJR2V0RWRpdFNpemUoRlhfRkxPQVQgZkZvbnRTaXplKTsKKyAgICBDUFZUX0Zsb2F0UmVjdAkJCQkJCQlUeXBlc2V0KCk7CisgICAgQ1BWVF9GbG9hdFJlY3QJCQkJCQkJQ2hhckFycmF5KCk7Citwcml2YXRlOgorICAgIHZvaWQJCQkJCQkJCQlTcGxpdExpbmVzKEZYX0JPT0wgYlR5cGVzZXQsIEZYX0ZMT0FUIGZGb250U2l6ZSk7CisgICAgdm9pZAkJCQkJCQkJCU91dHB1dExpbmVzKCk7CisKKyAgICBDUFZUX0Zsb2F0UmVjdAkJCQkJCQltX3JjUmV0OworICAgIENQREZfVmFyaWFibGVUZXh0CQkJCQkJKiBtX3BWVDsKKyAgICBDU2VjdGlvbgkJCQkJCQkJKiBtX3BTZWN0aW9uOworfTsKK2NsYXNzIENQREZfRWRpdENvbnRhaW5lcgoreworcHVibGljOgorICAgIENQREZfRWRpdENvbnRhaW5lcigpOiBtX3JjUGxhdGUoMCwgMCwgMCwgMCksIG1fcmNDb250ZW50KDAsIDAsIDAsIDApIHt9OworICAgIHZpcnR1YWwgfkNQREZfRWRpdENvbnRhaW5lcigpIHt9OworICAgIHZpcnR1YWwgdm9pZAkJCQkJCQlTZXRQbGF0ZVJlY3QoY29uc3QgQ1BERl9SZWN0ICYgcmVjdCkKKyAgICB7CisgICAgICAgIG1fcmNQbGF0ZSA9IHJlY3Q7CisgICAgfTsKKyAgICB2aXJ0dWFsIGNvbnN0IENQREZfUmVjdCAmCQkJCUdldFBsYXRlUmVjdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9yY1BsYXRlOworICAgIH07CisgICAgdmlydHVhbCB2b2lkCQkJCQkJCVNldENvbnRlbnRSZWN0KGNvbnN0IENQVlRfRmxvYXRSZWN0ICYgcmVjdCkKKyAgICB7CisgICAgICAgIG1fcmNDb250ZW50ID0gcmVjdDsKKyAgICB9OworICAgIHZpcnR1YWwgQ1BERl9SZWN0IAkJCQkJCUdldENvbnRlbnRSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3JjQ29udGVudDsKKyAgICB9OworICAgIEZYX0ZMT0FUCQkJCQkJCQlHZXRQbGF0ZVdpZHRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3JjUGxhdGUucmlnaHQgLSBtX3JjUGxhdGUubGVmdDsKKyAgICB9OworICAgIEZYX0ZMT0FUCQkJCQkJCQlHZXRQbGF0ZUhlaWdodCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9yY1BsYXRlLnRvcCAtIG1fcmNQbGF0ZS5ib3R0b207CisgICAgfTsKKyAgICBDUFZUX1NpemUJCQkJCQkJCUdldFBsYXRlU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQ1BWVF9TaXplKEdldFBsYXRlV2lkdGgoKSwgR2V0UGxhdGVIZWlnaHQoKSk7CisgICAgfTsKKyAgICBDUERGX1BvaW50CQkJCQkJCQlHZXRCVFBvaW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBDUERGX1BvaW50KG1fcmNQbGF0ZS5sZWZ0LCBtX3JjUGxhdGUudG9wKTsKKyAgICB9OworICAgIENQREZfUG9pbnQJCQkJCQkJCUdldEVUUG9pbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIENQREZfUG9pbnQobV9yY1BsYXRlLnJpZ2h0LCBtX3JjUGxhdGUuYm90dG9tKTsKKyAgICB9OworICAgIGlubGluZSBDUERGX1BvaW50CQkJCQkJSW5Ub091dChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQ1BERl9Qb2ludChwb2ludC54ICsgR2V0QlRQb2ludCgpLngsIEdldEJUUG9pbnQoKS55IC0gcG9pbnQueSk7CisgICAgfTsKKyAgICBpbmxpbmUgQ1BERl9Qb2ludAkJCQkJCU91dFRvSW4oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIENQREZfUG9pbnQocG9pbnQueCAtIEdldEJUUG9pbnQoKS54LCBHZXRCVFBvaW50KCkueSAtIHBvaW50LnkpOworICAgIH07CisgICAgaW5saW5lIENQREZfUmVjdAkJCQkJCUluVG9PdXQoY29uc3QgQ1BWVF9GbG9hdFJlY3QgJiByZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAgQ1BERl9Qb2ludCBwdExlZnRUb3AgPSBJblRvT3V0KENQREZfUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCkpOworICAgICAgICBDUERGX1BvaW50IHB0UmlnaHRCb3R0b20gPSBJblRvT3V0KENQREZfUG9pbnQocmVjdC5yaWdodCwgcmVjdC5ib3R0b20pKTsKKyAgICAgICAgcmV0dXJuIENQREZfUmVjdChwdExlZnRUb3AueCwgcHRSaWdodEJvdHRvbS55LCBwdFJpZ2h0Qm90dG9tLngsIHB0TGVmdFRvcC55KTsKKyAgICB9OworICAgIGlubGluZSBDUFZUX0Zsb2F0UmVjdAkJCQkJT3V0VG9Jbihjb25zdCBDUERGX1JlY3QgJiByZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAgQ1BERl9Qb2ludCBwdExlZnRUb3AgPSBPdXRUb0luKENQREZfUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCkpOworICAgICAgICBDUERGX1BvaW50IHB0UmlnaHRCb3R0b20gPSBPdXRUb0luKENQREZfUG9pbnQocmVjdC5yaWdodCwgcmVjdC5ib3R0b20pKTsKKyAgICAgICAgcmV0dXJuIENQVlRfRmxvYXRSZWN0KHB0TGVmdFRvcC54LCBwdExlZnRUb3AueSwgcHRSaWdodEJvdHRvbS54LCBwdFJpZ2h0Qm90dG9tLnkpOworICAgIH07CisKK3ByaXZhdGU6CisgICAgQ1BERl9SZWN0CQkJCQkJCQltX3JjUGxhdGU7CisgICAgQ1BWVF9GbG9hdFJlY3QJCQkJCQkJbV9yY0NvbnRlbnQ7Cit9OworY2xhc3MgQ1BERl9WYXJpYWJsZVRleHQgOiBwdWJsaWMgSVBERl9WYXJpYWJsZVRleHQsIHB1YmxpYyBDRlhfT2JqZWN0LCBwcml2YXRlIENQREZfRWRpdENvbnRhaW5lcgoreworICAgIGZyaWVuZCBjbGFzcyBDVHlwZXNldDsKKyAgICBmcmllbmQgY2xhc3MgQ1NlY3Rpb247CisgICAgZnJpZW5kIGNsYXNzIENQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yOworcHVibGljOgorICAgIENQREZfVmFyaWFibGVUZXh0KCk7CisgICAgdmlydHVhbCB+Q1BERl9WYXJpYWJsZVRleHQoKTsKKyAgICBJUERGX1ZhcmlhYmxlVGV4dF9Qcm92aWRlcioJCQkJU2V0UHJvdmlkZXIoSVBERl9WYXJpYWJsZVRleHRfUHJvdmlkZXIgKiBwUHJvdmlkZXIpOworICAgIElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yKgkJCQlHZXRJdGVyYXRvcigpOworICAgIHZvaWQJCQkJCQkJCQlTZXRQbGF0ZVJlY3QoY29uc3QgQ1BERl9SZWN0ICYgcmVjdCkKKyAgICB7CisgICAgICAgIENQREZfRWRpdENvbnRhaW5lcjo6U2V0UGxhdGVSZWN0KHJlY3QpOworICAgIH0KKyAgICB2b2lkCQkJCQkJCQkJU2V0QWxpZ25tZW50KEZYX0lOVDMyIG5Gb3JtYXQgPSAwKQorICAgIHsKKyAgICAgICAgbV9uQWxpZ25tZW50ID0gbkZvcm1hdDsKKyAgICB9CisgICAgdm9pZAkJCQkJCQkJCVNldFBhc3N3b3JkQ2hhcihGWF9XT1JEIHdTdWJXb3JkID0gJyonKQorICAgIHsKKyAgICAgICAgbV93U3ViV29yZCA9IHdTdWJXb3JkOworICAgIH0KKyAgICB2b2lkCQkJCQkJCQkJU2V0TGltaXRDaGFyKEZYX0lOVDMyIG5MaW1pdENoYXIgPSAwKQorICAgIHsKKyAgICAgICAgbV9uTGltaXRDaGFyID0gbkxpbWl0Q2hhcjsKKyAgICB9CisgICAgdm9pZAkJCQkJCQkJCVNldENoYXJTcGFjZShGWF9GTE9BVCBmQ2hhclNwYWNlID0gMC4wZikKKyAgICB7CisgICAgICAgIG1fZkNoYXJTcGFjZSA9IGZDaGFyU3BhY2U7CisgICAgfQorICAgIHZvaWQJCQkJCQkJCQlTZXRIb3J6U2NhbGUoRlhfSU5UMzIgbkhvcnpTY2FsZSA9IDEwMCkKKyAgICB7CisgICAgICAgIG1fbkhvcnpTY2FsZSA9IG5Ib3J6U2NhbGU7CisgICAgfQorICAgIHZvaWQJCQkJCQkJCQlTZXRNdWx0aUxpbmUoRlhfQk9PTCBiTXVsdGlMaW5lID0gVFJVRSkKKyAgICB7CisgICAgICAgIG1fYk11bHRpTGluZSA9IGJNdWx0aUxpbmU7CisgICAgfQorICAgIHZvaWQJCQkJCQkJCQlTZXRBdXRvUmV0dXJuKEZYX0JPT0wgYkF1dG8gPSBUUlVFKQorICAgIHsKKyAgICAgICAgbV9iTGltaXRXaWR0aCA9IGJBdXRvOworICAgIH0KKyAgICB2b2lkCQkJCQkJCQkJU2V0Rm9udFNpemUoRlhfRkxPQVQgZkZvbnRTaXplKQorICAgIHsKKyAgICAgICAgbV9mRm9udFNpemUgPSBmRm9udFNpemU7CisgICAgfQorICAgIHZvaWQJCQkJCQkJCQlTZXRDaGFyQXJyYXkoRlhfSU5UMzIgbkNoYXJBcnJheSA9IDApCisgICAgeworICAgICAgICBtX25DaGFyQXJyYXkgPSBuQ2hhckFycmF5OworICAgIH0KKyAgICB2b2lkCQkJCQkJCQkJU2V0QXV0b0ZvbnRTaXplKEZYX0JPT0wgYkF1dG8gPSBUUlVFKQorICAgIHsKKyAgICAgICAgbV9iQXV0b0ZvbnRTaXplID0gYkF1dG87CisgICAgfQorICAgIHZvaWQJCQkJCQkJCQlTZXRSaWNoVGV4dChGWF9CT09MIGJSaWNoVGV4dCkKKyAgICB7CisgICAgICAgIG1fYlJpY2hUZXh0ID0gYlJpY2hUZXh0OworICAgIH0KKyAgICB2b2lkCQkJCQkJCQkJU2V0TGluZUxlYWRpbmcoRlhfRkxPQVQgZkxpbmVMZWFkaW5nKQorICAgIHsKKyAgICAgICAgbV9mTGluZUxlYWRpbmcgPSBmTGluZUxlYWRpbmc7CisgICAgfQorICAgIHZvaWQJCQkJCQkJCQlJbml0aWFsaXplKCk7CisgICAgRlhfQk9PTAkJCQkJCQkJCUlzVmFsaWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYkluaXRpYWw7CisgICAgfQorICAgIEZYX0JPT0wJCQkJCQkJCQlJc1JpY2hUZXh0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JSaWNoVGV4dDsKKyAgICB9CisgICAgdm9pZAkJCQkJCQkJCVJlYXJyYW5nZUFsbCgpOworICAgIHZvaWQJCQkJCQkJCQlSZWFycmFuZ2VQYXJ0KGNvbnN0IENQVlRfV29yZFJhbmdlICYgUGxhY2VSYW5nZSk7CisgICAgdm9pZAkJCQkJCQkJCVJlc2V0QWxsKCk7CisgICAgdm9pZAkJCQkJCQkJCVNldFRleHQoRlhfTFBDV1NUUiB0ZXh0LCBGWF9JTlQzMiBjaGFyc2V0ID0gMSwgY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcyA9IE5VTEwsCisgICAgICAgICAgICBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMgPSBOVUxMKTsKKyAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlJbnNlcnRXb3JkKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCA9IDEsCisgICAgICAgICAgICBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMgPSBOVUxMKTsKKyAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlJbnNlcnRTZWN0aW9uKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIGNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMgPSBOVUxMLAorICAgICAgICAgICAgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzID0gTlVMTCk7CisgICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJSW5zZXJ0VGV4dChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBGWF9MUENXU1RSIHRleHQsIEZYX0lOVDMyIGNoYXJzZXQgPSAxLAorICAgICAgICAgICAgY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcyA9IE5VTEwsCWNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcyA9IE5VTEwpOworICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCURlbGV0ZVdvcmRzKGNvbnN0IENQVlRfV29yZFJhbmdlICYgUGxhY2VSYW5nZSk7CisgICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJRGVsZXRlV29yZChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKTsKKyAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlCYWNrU3BhY2VXb3JkKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpOworICAgIGNvbnN0IENQREZfUmVjdCAmCQkJCQkJR2V0UGxhdGVSZWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBDUERGX0VkaXRDb250YWluZXI6OkdldFBsYXRlUmVjdCgpOworICAgIH0KKyAgICBDUERGX1JlY3QJCQkJCQkJCUdldENvbnRlbnRSZWN0KCkgY29uc3Q7CisgICAgRlhfSU5UMzIJCQkJCQkJCUdldFRvdGFsV29yZHMoKSBjb25zdDsKKyAgICBGWF9GTE9BVAkJCQkJCQkJR2V0Rm9udFNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZkZvbnRTaXplOworICAgIH0KKyAgICBGWF9JTlQzMgkJCQkJCQkJR2V0QWxpZ25tZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX25BbGlnbm1lbnQ7CisgICAgfQorICAgIEZYX0lOVDMyCQkJCQkJCQlHZXRDaGFyQXJyYXkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbkNoYXJBcnJheTsKKyAgICB9CisgICAgRlhfSU5UMzIJCQkJCQkJCUdldExpbWl0Q2hhcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9uTGltaXRDaGFyOworICAgIH0KKyAgICBGWF9CT09MCQkJCQkJCQkJSXNNdWx0aUxpbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYk11bHRpTGluZTsKKyAgICB9CisgICAgRlhfSU5UMzIJCQkJCQkJCUdldEhvcnpTY2FsZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9uSG9yelNjYWxlOworICAgIH0KKyAgICBGWF9GTE9BVAkJCQkJCQkJR2V0Q2hhclNwYWNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZDaGFyU3BhY2U7CisgICAgfQorCisgICAgaW5saW5lIENQVlRfV29yZFBsYWNlCQkJCQlHZXRCZWdpbldvcmRQbGFjZSgpIGNvbnN0OworICAgIGlubGluZSBDUFZUX1dvcmRQbGFjZQkJCQkJR2V0RW5kV29yZFBsYWNlKCkgY29uc3Q7CisgICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJR2V0UHJldldvcmRQbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdDsKKyAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlHZXROZXh0V29yZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0OworICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCVNlYXJjaFdvcmRQbGFjZShjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpIGNvbnN0OworICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCUdldFVwV29yZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3Q7CisgICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJR2V0RG93bldvcmRQbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpIGNvbnN0OworICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCUdldExpbmVCZWdpblBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0OworICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCUdldExpbmVFbmRQbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdDsKKyAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlHZXRTZWN0aW9uQmVnaW5QbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdDsKKyAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlHZXRTZWN0aW9uRW5kUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3Q7CisgICAgdm9pZAkJCQkJCQkJCVVwZGF0ZVdvcmRQbGFjZShDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdDsKKyAgICBGWF9JTlQzMgkJCQkJCQkJV29yZFBsYWNlVG9Xb3JkSW5kZXgoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3Q7CisgICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJV29yZEluZGV4VG9Xb3JkUGxhY2UoRlhfSU5UMzIgaW5kZXgpIGNvbnN0OworICAgIEZYX1dPUkQJCQkJCQkJCQlHZXRQYXNzd29yZENoYXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldFN1YldvcmQoKTsKKyAgICB9CisgICAgRlhfV09SRAkJCQkJCQkJCUdldFN1YldvcmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd1N1YldvcmQ7CisgICAgfQorcHJpdmF0ZToKKyAgICBGWF9JTlQzMgkJCQkJCQkJR2V0Q2hhcldpZHRoKEZYX0lOVDMyIG5Gb250SW5kZXgsIEZYX1dPUkQgV29yZCwgRlhfV09SRCBTdWJXb3JkLCBGWF9JTlQzMiBuV29yZFN0eWxlKTsKKyAgICBGWF9JTlQzMgkJCQkJCQkJR2V0VHlwZUFzY2VudChGWF9JTlQzMiBuRm9udEluZGV4KTsKKyAgICBGWF9JTlQzMgkJCQkJCQkJR2V0VHlwZURlc2NlbnQoRlhfSU5UMzIgbkZvbnRJbmRleCk7CisgICAgRlhfSU5UMzIJCQkJCQkJCUdldFdvcmRGb250SW5kZXgoRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBjaGFyc2V0LCBGWF9JTlQzMiBuRm9udEluZGV4KTsKKyAgICBGWF9JTlQzMgkJCQkJCQkJR2V0RGVmYXVsdEZvbnRJbmRleCgpOworICAgIEZYX0JPT0wJCQkJCQkJCQlJc0xhdGluV29yZChGWF9XT1JEIHdvcmQpOworcHJpdmF0ZToKKworICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCUFkZFNlY3Rpb24oY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSwgY29uc3QgQ1BWVF9TZWN0aW9uSW5mbyAmIHNlY2luZm8pOworICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCUFkZExpbmUoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSwgY29uc3QgQ1BWVF9MaW5lSW5mbyAmIGxpbmVpbmZvKTsKKyAgICBDUFZUX1dvcmRQbGFjZQkJCQkJCQlBZGRXb3JkKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIGNvbnN0IENQVlRfV29yZEluZm8gJiB3b3JkaW5mbyk7CisgICAgRlhfQk9PTAkJCQkJCQkJCUdldFdvcmRJbmZvKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIENQVlRfV29yZEluZm8gJiB3b3JkaW5mbyk7CisgICAgRlhfQk9PTAkJCQkJCQkJCVNldFdvcmRJbmZvKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIGNvbnN0IENQVlRfV29yZEluZm8gJiB3b3JkaW5mbyk7CisgICAgRlhfQk9PTAkJCQkJCQkJCUdldExpbmVJbmZvKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIENQVlRfTGluZUluZm8gJiBsaW5laW5mbyk7CisgICAgRlhfQk9PTAkJCQkJCQkJCUdldFNlY3Rpb25JbmZvKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIENQVlRfU2VjdGlvbkluZm8gJiBzZWNpbmZvKTsKKyAgICBGWF9GTE9BVAkJCQkJCQkJR2V0V29yZEZvbnRTaXplKGNvbnN0IENQVlRfV29yZEluZm8gJiBXb3JkSW5mbywgRlhfQk9PTCBiRmFjdEZvbnRTaXplID0gRkFMU0UpOworICAgIEZYX0ZMT0FUCQkJCQkJCQlHZXRXb3JkV2lkdGgoRlhfSU5UMzIgbkZvbnRJbmRleCwgRlhfV09SRCBXb3JkLCBGWF9XT1JEIFN1YldvcmQsCisgICAgICAgICAgICBGWF9GTE9BVCBmQ2hhclNwYWNlLCBGWF9JTlQzMiBuSG9yelNjYWxlLAorICAgICAgICAgICAgRlhfRkxPQVQgZkZvbnRTaXplLCBGWF9GTE9BVCBmV29yZFRhaWwsIEZYX0lOVDMyIG5Xb3JkU3R5bGUpOworICAgIEZYX0ZMT0FUCQkJCQkJCQlHZXRXb3JkV2lkdGgoY29uc3QgQ1BWVF9Xb3JkSW5mbyAmIFdvcmRJbmZvKTsKKyAgICBGWF9GTE9BVAkJCQkJCQkJR2V0V29yZEFzY2VudChjb25zdCBDUFZUX1dvcmRJbmZvICYgV29yZEluZm8sIEZYX0ZMT0FUIGZGb250U2l6ZSk7CisgICAgRlhfRkxPQVQJCQkJCQkJCUdldFdvcmREZXNjZW50KGNvbnN0IENQVlRfV29yZEluZm8gJiBXb3JkSW5mbywgRlhfRkxPQVQgZkZvbnRTaXplKTsKKyAgICBGWF9GTE9BVAkJCQkJCQkJR2V0V29yZEFzY2VudChjb25zdCBDUFZUX1dvcmRJbmZvICYgV29yZEluZm8sIEZYX0JPT0wgYkZhY3RGb250U2l6ZSA9IEZBTFNFKTsKKyAgICBGWF9GTE9BVAkJCQkJCQkJR2V0V29yZERlc2NlbnQoY29uc3QgQ1BWVF9Xb3JkSW5mbyAmIFdvcmRJbmZvLCBGWF9CT09MIGJGYWN0Rm9udFNpemUgPSBGQUxTRSk7CisgICAgRlhfRkxPQVQJCQkJCQkJCUdldExpbmVBc2NlbnQoY29uc3QgQ1BWVF9TZWN0aW9uSW5mbyAmIFNlY0luZm8pOworICAgIEZYX0ZMT0FUCQkJCQkJCQlHZXRMaW5lRGVzY2VudChjb25zdCBDUFZUX1NlY3Rpb25JbmZvICYgU2VjSW5mbyk7CisgICAgRlhfRkxPQVQJCQkJCQkJCUdldEZvbnRBc2NlbnQoRlhfSU5UMzIgbkZvbnRJbmRleCwgRlhfRkxPQVQgZkZvbnRTaXplKTsKKyAgICBGWF9GTE9BVAkJCQkJCQkJR2V0Rm9udERlc2NlbnQoRlhfSU5UMzIgbkZvbnRJbmRleCwgRlhfRkxPQVQgZkZvbnRTaXplKTsKKyAgICBGWF9JTlQzMgkJCQkJCQkJR2V0V29yZEZvbnRJbmRleChjb25zdCBDUFZUX1dvcmRJbmZvICYgV29yZEluZm8pOworICAgIEZYX0ZMT0FUCQkJCQkJCQlHZXRDaGFyU3BhY2UoY29uc3QgQ1BWVF9Xb3JkSW5mbyAmIFdvcmRJbmZvKTsKKyAgICBGWF9JTlQzMgkJCQkJCQkJR2V0SG9yelNjYWxlKGNvbnN0IENQVlRfV29yZEluZm8gJiBXb3JkSW5mbyk7CisgICAgRlhfRkxPQVQJCQkJCQkJCUdldExpbmVMZWFkaW5nKGNvbnN0IENQVlRfU2VjdGlvbkluZm8gJiBTZWNJbmZvKTsKKyAgICBGWF9GTE9BVAkJCQkJCQkJR2V0TGluZUluZGVudChjb25zdCBDUFZUX1NlY3Rpb25JbmZvICYgU2VjSW5mbyk7CisgICAgRlhfSU5UMzIJCQkJCQkJCUdldEFsaWdubWVudChjb25zdCBDUFZUX1NlY3Rpb25JbmZvJiBTZWNJbmZvKTsKKworICAgIHZvaWQJCQkJCQkJCQlDbGVhclNlY3Rpb25SaWdodFdvcmRzKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpOworICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCUFqdXN0TGluZUhlYWRlcihjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBGWF9CT09MIGJQcmV2T3JOZXh0KSBjb25zdDsKKyAgICBGWF9CT09MCQkJCQkJCQkJQ2xlYXJFbXB0eVNlY3Rpb24oY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSk7CisgICAgdm9pZAkJCQkJCQkJCUNsZWFyRW1wdHlTZWN0aW9ucyhjb25zdCBDUFZUX1dvcmRSYW5nZSAmIFBsYWNlUmFuZ2UpOworICAgIHZvaWQJCQkJCQkJCQlMaW5rTGF0dGVyU2VjdGlvbihjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKTsKKyAgICB2b2lkCQkJCQkJCQkJQ2xlYXJXb3Jkcyhjb25zdCBDUFZUX1dvcmRSYW5nZSAmIFBsYWNlUmFuZ2UpOworICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCUNsZWFyTGVmdFdvcmQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSk7CisgICAgQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJQ2xlYXJSaWdodFdvcmQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSk7Citwcml2YXRlOgorICAgIENQVlRfRmxvYXRSZWN0CQkJCQkJCVJlYXJyYW5nZShjb25zdCBDUFZUX1dvcmRSYW5nZSAmIFBsYWNlUmFuZ2UpOworICAgIEZYX0ZMT0FUCQkJCQkJCQlHZXRBdXRvRm9udFNpemUoKTsKKyAgICBGWF9CT09MCQkJCQkJCQkJSXNCaWdnZXIoRlhfRkxPQVQgZkZvbnRTaXplKTsKKyAgICBDUFZUX0Zsb2F0UmVjdAkJCQkJCQlSZWFycmFuZ2VTZWN0aW9ucyhjb25zdCBDUFZUX1dvcmRSYW5nZSAmIFBsYWNlUmFuZ2UpOworcHJpdmF0ZToKKyAgICB2b2lkCQkJCQkJCQkJUmVzZXRTZWN0aW9uQXJyYXkoKTsKK3ByaXZhdGU6CisgICAgQ1BWVF9BcnJheVRlbXBsYXRlPENTZWN0aW9uKj4JCQltX1NlY3Rpb25BcnJheTsKKyAgICBGWF9JTlQzMgkJCQkJCQkJbV9uTGltaXRDaGFyOworICAgIEZYX0lOVDMyCQkJCQkJCQltX25DaGFyQXJyYXk7CisgICAgRlhfQk9PTAkJCQkJCQkJCW1fYk11bHRpTGluZTsKKyAgICBGWF9CT09MCQkJCQkJCQkJbV9iTGltaXRXaWR0aDsKKyAgICBGWF9CT09MCQkJCQkJCQkJbV9iQXV0b0ZvbnRTaXplOworICAgIEZYX0lOVDMyCQkJCQkJCQltX25BbGlnbm1lbnQ7CisgICAgRlhfRkxPQVQJCQkJCQkJCW1fZkxpbmVMZWFkaW5nOworICAgIEZYX0ZMT0FUCQkJCQkJCQltX2ZDaGFyU3BhY2U7CisgICAgRlhfSU5UMzIJCQkJCQkJCW1fbkhvcnpTY2FsZTsKKyAgICBGWF9XT1JECQkJCQkJCQkJbV93U3ViV29yZDsKKyAgICBGWF9GTE9BVAkJCQkJCQkJbV9mV29yZFNwYWNlOworICAgIEZYX0ZMT0FUCQkJCQkJCQltX2ZGb250U2l6ZTsKKworcHJpdmF0ZToKKyAgICBGWF9CT09MCQkJCQkJCQkJbV9iSW5pdGlhbDsKKyAgICBGWF9CT09MCQkJCQkJCQkJbV9iUmljaFRleHQ7CisgICAgRlhfRkxPQVQJCQkJCQkJCW1fZkNhcmV0T3JpZ2luWDsKKyAgICBGWF9JTlQzMgkJCQkJCQkJbV9uQ3VyRm9udEluZGV4OworICAgIElQREZfVmFyaWFibGVUZXh0X1Byb3ZpZGVyICoJCQltX3BWVFByb3ZpZGVyOworICAgIENQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yICoJCQltX3BWVEl0ZXJhdG9yOworfTsKK2NsYXNzIENQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yIDogcHVibGljIElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yLCBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yKENQREZfVmFyaWFibGVUZXh0ICogcFZUKTsKKyAgICB2aXJ0dWFsIH5DUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvcigpOworICAgIEZYX0JPT0wJCQkJCQkJCQlOZXh0V29yZCgpOworICAgIEZYX0JPT0wJCQkJCQkJCQlQcmV2V29yZCgpOworICAgIEZYX0JPT0wJCQkJCQkJCQlOZXh0TGluZSgpOworICAgIEZYX0JPT0wJCQkJCQkJCQlQcmV2TGluZSgpOworICAgIEZYX0JPT0wJCQkJCQkJCQlOZXh0U2VjdGlvbigpOworICAgIEZYX0JPT0wJCQkJCQkJCQlQcmV2U2VjdGlvbigpOworICAgIEZYX0JPT0wJCQkJCQkJCQlTZXRXb3JkKGNvbnN0IENQVlRfV29yZCAmIHdvcmQpOworICAgIEZYX0JPT0wJCQkJCQkJCQlHZXRXb3JkKENQVlRfV29yZCAmIHdvcmQpIGNvbnN0OworICAgIEZYX0JPT0wJCQkJCQkJCQlHZXRMaW5lKENQVlRfTGluZSAmIGxpbmUpIGNvbnN0OworICAgIEZYX0JPT0wJCQkJCQkJCQlHZXRTZWN0aW9uKENQVlRfU2VjdGlvbiAmIHNlY3Rpb24pIGNvbnN0OworICAgIEZYX0JPT0wJCQkJCQkJCQlTZXRTZWN0aW9uKGNvbnN0IENQVlRfU2VjdGlvbiAmIHNlY3Rpb24pOworICAgIHZvaWQJCQkJCQkJCQlTZXRBdChGWF9JTlQzMiBuV29yZEluZGV4KTsKKyAgICB2b2lkCQkJCQkJCQkJU2V0QXQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSk7CisgICAgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJgkJCQkJR2V0QXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fQ3VyUG9zOworICAgIH07Citwcml2YXRlOgorICAgIENQVlRfV29yZFBsYWNlCQkJCQkJCW1fQ3VyUG9zOworICAgIENQREZfVmFyaWFibGVUZXh0ICoJCQkJCQltX3BWVDsKK307CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmZG9jL3RhZ2dlZF9pbnQuaCBiL2NvcmUvc3JjL2ZwZGZkb2MvdGFnZ2VkX2ludC5oCmluZGV4IGEzNDNhODAuLjBlYmY0MDggMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZkb2MvdGFnZ2VkX2ludC5oCisrKyBiL2NvcmUvc3JjL2ZwZGZkb2MvdGFnZ2VkX2ludC5oCkBAIC0xLDkxICsxLDkxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GUERGX1RBR0dFRF9JTlRfSF8NCi0jZGVmaW5lIF9GUERGX1RBR0dFRF9JTlRfSF8NCi1jbGFzcyBDUERGX1N0cnVjdFRyZWVJbXBsOw0KLWNsYXNzIENQREZfU3RydWN0RWxlbWVudEltcGw7DQotY2xhc3MgQ1BERl9TdHJ1Y3RUcmVlSW1wbCA6IHB1YmxpYyBDUERGX1N0cnVjdFRyZWUNCi17DQotcHVibGljOg0KLSAgICBDUERGX1N0cnVjdFRyZWVJbXBsKGNvbnN0IENQREZfRG9jdW1lbnQqIHBEb2MpOw0KLSAgICB+Q1BERl9TdHJ1Y3RUcmVlSW1wbCgpOw0KLSAgICBpbnQJCQlDb3VudFRvcEVsZW1lbnRzKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fS2lkcy5HZXRTaXplKCk7DQotICAgIH0NCi0gICAgQ1BERl9TdHJ1Y3RFbGVtZW50KglHZXRUb3BFbGVtZW50KGludCBpKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gKENQREZfU3RydWN0RWxlbWVudCopbV9LaWRzLkdldEF0KGkpOw0KLSAgICB9DQotICAgIHZvaWQJCUxvYWREb2NUcmVlKCk7DQotICAgIHZvaWQJCUxvYWRQYWdlVHJlZShjb25zdCBDUERGX0RpY3Rpb25hcnkqIHBQYWdlRGljdCk7DQotICAgIENQREZfU3RydWN0RWxlbWVudEltcGwqIEFkZFBhZ2VOb2RlKENQREZfRGljdGlvbmFyeSogcEVsZW1lbnQsIENGWF9NYXBQdHJUb1B0ciYgbWFwLCBpbnQgbkxldmVsID0gMCk7DQotICAgIEZYX0JPT0wJCUFkZFRvcExldmVsTm9kZShDUERGX0RpY3Rpb25hcnkqIHBEaWN0LCBDUERGX1N0cnVjdEVsZW1lbnRJbXBsKiBwRWxlbWVudCk7DQotcHJvdGVjdGVkOg0KLSAgICBjb25zdCBDUERGX0RpY3Rpb25hcnkqCW1fcFRyZWVSb290Ow0KLSAgICBjb25zdCBDUERGX0RpY3Rpb25hcnkqCW1fcFJvbGVNYXA7DQotICAgIGNvbnN0IENQREZfRGljdGlvbmFyeSoJbV9wUGFnZTsNCi0gICAgQ0ZYX0FycmF5VGVtcGxhdGU8Q1BERl9TdHJ1Y3RFbGVtZW50SW1wbCo+CW1fS2lkczsNCi0gICAgZnJpZW5kIGNsYXNzIENQREZfU3RydWN0RWxlbWVudEltcGw7DQotfTsNCi1jbGFzcyBDUERGX1N0cnVjdEVsZW1lbnRJbXBsIDogcHVibGljIENQREZfU3RydWN0RWxlbWVudA0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfU3RydWN0RWxlbWVudEltcGwoQ1BERl9TdHJ1Y3RUcmVlSW1wbCogcFRyZWUsIENQREZfU3RydWN0RWxlbWVudEltcGwqIHBQYXJlbnQsIENQREZfRGljdGlvbmFyeSogcERpY3QpOw0KLSAgICB+Q1BERl9TdHJ1Y3RFbGVtZW50SW1wbCgpOw0KLSAgICBDUERGX1N0cnVjdFRyZWUqCQlHZXRUcmVlKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcFRyZWU7DQotICAgIH0NCi0gICAgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmCUdldFR5cGUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9UeXBlOw0KLSAgICB9DQotICAgIENQREZfU3RydWN0RWxlbWVudCoJCUdldFBhcmVudCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BQYXJlbnQ7DQotICAgIH0NCi0gICAgQ1BERl9EaWN0aW9uYXJ5ICoJCUdldERpY3QoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRGljdDsNCi0gICAgfQ0KLSAgICBpbnQJCQkJCQlDb3VudEtpZHMoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9LaWRzLkdldFNpemUoKTsNCi0gICAgfQ0KLSAgICBjb25zdCBDUERGX1N0cnVjdEtpZCYJR2V0S2lkKGludCBpbmRleCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fS2lkcy5HZXREYXRhKClbaW5kZXhdOw0KLSAgICB9DQotICAgIENGWF9QdHJBcnJheSoJCQlHZXRPYmplY3RBcnJheSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAmbV9PYmplY3RBcnJheTsNCi0gICAgfQ0KLQ0KLSAgICBDUERGX09iamVjdCoJCQlHZXRBdHRyKEZYX0JTVFIgb3duZXIsIEZYX0JTVFIgbmFtZSwgRlhfQk9PTCBiSW5oZXJpdGFibGUgPSBGQUxTRSwgRlhfRkxPQVQgZkxldmVsID0gMC4wRik7DQotDQotICAgIENGWF9CeXRlU3RyaW5nCQkJR2V0TmFtZShGWF9CU1RSIG93bmVyLCBGWF9CU1RSIG5hbWUsIEZYX0JTVFIgZGVmYXVsdF92YWx1ZSwgRlhfQk9PTCBiSW5oZXJpdGFibGUgPSBGQUxTRSwgaW50IHN1YmluZGV4ID0gLTEpOw0KLSAgICBGWF9BUkdCCQkJCQlHZXRDb2xvcihGWF9CU1RSIG93bmVyLCBGWF9CU1RSIG5hbWUsIEZYX0FSR0IgZGVmYXVsdF92YWx1ZSwgRlhfQk9PTCBiSW5oZXJpdGFibGUgPSBGQUxTRSwgaW50IHN1YmluZGV4ID0gLTEpOw0KLSAgICBGWF9GTE9BVAkJCQlHZXROdW1iZXIoRlhfQlNUUiBvd25lciwgRlhfQlNUUiBuYW1lLCBGWF9GTE9BVCBkZWZhdWx0X3ZhbHVlLCBGWF9CT09MIGJJbmhlcml0YWJsZSA9IEZBTFNFLCBpbnQgc3ViaW5kZXggPSAtMSk7DQotICAgIGludAkJCQkJCUdldEludGVnZXIoRlhfQlNUUiBvd25lciwgRlhfQlNUUiBuYW1lLCBpbnQgZGVmYXVsdF92YWx1ZSwgRlhfQk9PTCBiSW5oZXJpdGFibGUgPSBGQUxTRSwgaW50IHN1YmluZGV4ID0gLTEpOw0KLSAgICBDRlhfUHRyQXJyYXkJCQltX09iamVjdEFycmF5Ow0KLSAgICB2b2lkCQkJCQlMb2FkS2lkcyhDUERGX0RpY3Rpb25hcnkqIHBEaWN0KTsNCi0gICAgdm9pZAkJCQkJTG9hZEtpZChGWF9EV09SRCBQYWdlT2JqTnVtLCBDUERGX09iamVjdCogcE9iaiwgQ1BERl9TdHJ1Y3RLaWQqIHBLaWQpOw0KLSAgICBDUERGX09iamVjdCoJCQlHZXRBdHRyKEZYX0JTVFIgb3duZXIsIEZYX0JTVFIgbmFtZSwgRlhfQk9PTCBiSW5oZXJpdGFibGUsIGludCBzdWJpbmRleCk7DQotICAgIENQREZfU3RydWN0RWxlbWVudEltcGwqCVJldGFpbigpOw0KLSAgICB2b2lkCQkJCQlSZWxlYXNlKCk7DQotcHJvdGVjdGVkOg0KLSAgICBDUERGX1N0cnVjdFRyZWVJbXBsKgltX3BUcmVlOw0KLSAgICBDRlhfQnl0ZVN0cmluZwkJCW1fVHlwZTsNCi0gICAgQ1BERl9TdHJ1Y3RFbGVtZW50SW1wbCoJbV9wUGFyZW50Ow0KLSAgICBDUERGX0RpY3Rpb25hcnkqCQltX3BEaWN0Ow0KLSAgICBDRlhfQXJyYXlUZW1wbGF0ZTxDUERGX1N0cnVjdEtpZD4JbV9LaWRzOw0KLQ0KLSAgICBpbnQJCQltX1JlZkNvdW50Ow0KLSAgICBmcmllbmQgY2xhc3MgQ1BERl9TdHJ1Y3RUcmVlSW1wbDsNCi19Ow0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZQREZfVEFHR0VEX0lOVF9IXworI2RlZmluZSBfRlBERl9UQUdHRURfSU5UX0hfCitjbGFzcyBDUERGX1N0cnVjdFRyZWVJbXBsOworY2xhc3MgQ1BERl9TdHJ1Y3RFbGVtZW50SW1wbDsKK2NsYXNzIENQREZfU3RydWN0VHJlZUltcGwgOiBwdWJsaWMgQ1BERl9TdHJ1Y3RUcmVlCit7CitwdWJsaWM6CisgICAgQ1BERl9TdHJ1Y3RUcmVlSW1wbChjb25zdCBDUERGX0RvY3VtZW50KiBwRG9jKTsKKyAgICB+Q1BERl9TdHJ1Y3RUcmVlSW1wbCgpOworICAgIGludAkJCUNvdW50VG9wRWxlbWVudHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fS2lkcy5HZXRTaXplKCk7CisgICAgfQorICAgIENQREZfU3RydWN0RWxlbWVudCoJR2V0VG9wRWxlbWVudChpbnQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoQ1BERl9TdHJ1Y3RFbGVtZW50KiltX0tpZHMuR2V0QXQoaSk7CisgICAgfQorICAgIHZvaWQJCUxvYWREb2NUcmVlKCk7CisgICAgdm9pZAkJTG9hZFBhZ2VUcmVlKGNvbnN0IENQREZfRGljdGlvbmFyeSogcFBhZ2VEaWN0KTsKKyAgICBDUERGX1N0cnVjdEVsZW1lbnRJbXBsKiBBZGRQYWdlTm9kZShDUERGX0RpY3Rpb25hcnkqIHBFbGVtZW50LCBDRlhfTWFwUHRyVG9QdHImIG1hcCwgaW50IG5MZXZlbCA9IDApOworICAgIEZYX0JPT0wJCUFkZFRvcExldmVsTm9kZShDUERGX0RpY3Rpb25hcnkqIHBEaWN0LCBDUERGX1N0cnVjdEVsZW1lbnRJbXBsKiBwRWxlbWVudCk7Citwcm90ZWN0ZWQ6CisgICAgY29uc3QgQ1BERl9EaWN0aW9uYXJ5KgltX3BUcmVlUm9vdDsKKyAgICBjb25zdCBDUERGX0RpY3Rpb25hcnkqCW1fcFJvbGVNYXA7CisgICAgY29uc3QgQ1BERl9EaWN0aW9uYXJ5KgltX3BQYWdlOworICAgIENGWF9BcnJheVRlbXBsYXRlPENQREZfU3RydWN0RWxlbWVudEltcGwqPgltX0tpZHM7CisgICAgZnJpZW5kIGNsYXNzIENQREZfU3RydWN0RWxlbWVudEltcGw7Cit9OworY2xhc3MgQ1BERl9TdHJ1Y3RFbGVtZW50SW1wbCA6IHB1YmxpYyBDUERGX1N0cnVjdEVsZW1lbnQKK3sKK3B1YmxpYzoKKyAgICBDUERGX1N0cnVjdEVsZW1lbnRJbXBsKENQREZfU3RydWN0VHJlZUltcGwqIHBUcmVlLCBDUERGX1N0cnVjdEVsZW1lbnRJbXBsKiBwUGFyZW50LCBDUERGX0RpY3Rpb25hcnkqIHBEaWN0KTsKKyAgICB+Q1BERl9TdHJ1Y3RFbGVtZW50SW1wbCgpOworICAgIENQREZfU3RydWN0VHJlZSoJCUdldFRyZWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcFRyZWU7CisgICAgfQorICAgIGNvbnN0IENGWF9CeXRlU3RyaW5nJglHZXRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX1R5cGU7CisgICAgfQorICAgIENQREZfU3RydWN0RWxlbWVudCoJCUdldFBhcmVudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wUGFyZW50OworICAgIH0KKyAgICBDUERGX0RpY3Rpb25hcnkgKgkJR2V0RGljdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wRGljdDsKKyAgICB9CisgICAgaW50CQkJCQkJQ291bnRLaWRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0tpZHMuR2V0U2l6ZSgpOworICAgIH0KKyAgICBjb25zdCBDUERGX1N0cnVjdEtpZCYJR2V0S2lkKGludCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0tpZHMuR2V0RGF0YSgpW2luZGV4XTsKKyAgICB9CisgICAgQ0ZYX1B0ckFycmF5KgkJCUdldE9iamVjdEFycmF5KCkKKyAgICB7CisgICAgICAgIHJldHVybiAmbV9PYmplY3RBcnJheTsKKyAgICB9CisKKyAgICBDUERGX09iamVjdCoJCQlHZXRBdHRyKEZYX0JTVFIgb3duZXIsIEZYX0JTVFIgbmFtZSwgRlhfQk9PTCBiSW5oZXJpdGFibGUgPSBGQUxTRSwgRlhfRkxPQVQgZkxldmVsID0gMC4wRik7CisKKyAgICBDRlhfQnl0ZVN0cmluZwkJCUdldE5hbWUoRlhfQlNUUiBvd25lciwgRlhfQlNUUiBuYW1lLCBGWF9CU1RSIGRlZmF1bHRfdmFsdWUsIEZYX0JPT0wgYkluaGVyaXRhYmxlID0gRkFMU0UsIGludCBzdWJpbmRleCA9IC0xKTsKKyAgICBGWF9BUkdCCQkJCQlHZXRDb2xvcihGWF9CU1RSIG93bmVyLCBGWF9CU1RSIG5hbWUsIEZYX0FSR0IgZGVmYXVsdF92YWx1ZSwgRlhfQk9PTCBiSW5oZXJpdGFibGUgPSBGQUxTRSwgaW50IHN1YmluZGV4ID0gLTEpOworICAgIEZYX0ZMT0FUCQkJCUdldE51bWJlcihGWF9CU1RSIG93bmVyLCBGWF9CU1RSIG5hbWUsIEZYX0ZMT0FUIGRlZmF1bHRfdmFsdWUsIEZYX0JPT0wgYkluaGVyaXRhYmxlID0gRkFMU0UsIGludCBzdWJpbmRleCA9IC0xKTsKKyAgICBpbnQJCQkJCQlHZXRJbnRlZ2VyKEZYX0JTVFIgb3duZXIsIEZYX0JTVFIgbmFtZSwgaW50IGRlZmF1bHRfdmFsdWUsIEZYX0JPT0wgYkluaGVyaXRhYmxlID0gRkFMU0UsIGludCBzdWJpbmRleCA9IC0xKTsKKyAgICBDRlhfUHRyQXJyYXkJCQltX09iamVjdEFycmF5OworICAgIHZvaWQJCQkJCUxvYWRLaWRzKENQREZfRGljdGlvbmFyeSogcERpY3QpOworICAgIHZvaWQJCQkJCUxvYWRLaWQoRlhfRFdPUkQgUGFnZU9iak51bSwgQ1BERl9PYmplY3QqIHBPYmosIENQREZfU3RydWN0S2lkKiBwS2lkKTsKKyAgICBDUERGX09iamVjdCoJCQlHZXRBdHRyKEZYX0JTVFIgb3duZXIsIEZYX0JTVFIgbmFtZSwgRlhfQk9PTCBiSW5oZXJpdGFibGUsIGludCBzdWJpbmRleCk7CisgICAgQ1BERl9TdHJ1Y3RFbGVtZW50SW1wbCoJUmV0YWluKCk7CisgICAgdm9pZAkJCQkJUmVsZWFzZSgpOworcHJvdGVjdGVkOgorICAgIENQREZfU3RydWN0VHJlZUltcGwqCW1fcFRyZWU7CisgICAgQ0ZYX0J5dGVTdHJpbmcJCQltX1R5cGU7CisgICAgQ1BERl9TdHJ1Y3RFbGVtZW50SW1wbCoJbV9wUGFyZW50OworICAgIENQREZfRGljdGlvbmFyeSoJCW1fcERpY3Q7CisgICAgQ0ZYX0FycmF5VGVtcGxhdGU8Q1BERl9TdHJ1Y3RLaWQ+CW1fS2lkczsKKworICAgIGludAkJCW1fUmVmQ291bnQ7CisgICAgZnJpZW5kIGNsYXNzIENQREZfU3RydWN0VHJlZUltcGw7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmdGV4dC9mcGRmX3RleHQuY3BwIGIvY29yZS9zcmMvZnBkZnRleHQvZnBkZl90ZXh0LmNwcAppbmRleCAyNTc2Yjc1Li4wNDhlYmRlIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmdGV4dC9mcGRmX3RleHQuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZ0ZXh0L2ZwZGZfdGV4dC5jcHAKQEAgLTEsNzkxICsxLDc5MSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2UuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZW9iai5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZ0ZXh0L2ZwZGZfdGV4dC5oIg0KLSNpbmNsdWRlICJ0eHRwcm9jLmgiDQotI2luY2x1ZGUgInRleHRfaW50LmgiDQotI2lmICFkZWZpbmVkKF9GUERGQVBJX01JTklfKSB8fCBkZWZpbmVkKF9GWENPUkVfRkVBVFVSRV9BTExfKQ0KLWV4dGVybiBGWF9MUENTVFIgRkNTX0dldEFsdFN0cihGWF9XQ0hBUik7DQotQ0ZYX0J5dGVTdHJpbmcgQ2hhckZyb21Vbmljb2RlQWx0KEZYX1dDSEFSIHVuaWNvZGUsIGludCBkZXN0Y3AsIEZYX0xQQ1NUUiBkZWZjaGFyKQ0KLXsNCi0gICAgaWYgKGRlc3RjcCA9PSAwKSB7DQotICAgICAgICBpZiAodW5pY29kZSA8IDB4ODApIHsNCi0gICAgICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKGNoYXIpdW5pY29kZSk7DQotICAgICAgICB9DQotICAgICAgICBGWF9MUENTVFIgYWx0c3RyID0gRkNTX0dldEFsdFN0cih1bmljb2RlKTsNCi0gICAgICAgIGlmIChhbHRzdHIpIHsNCi0gICAgICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoYWx0c3RyLCAtMSk7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoZGVmY2hhciwgLTEpOw0KLSAgICB9DQotICAgIEZYX0JPT0wgYkRlZiA9IEZBTFNFOw0KLSAgICBjaGFyIGJ1ZlsxMF07DQotICAgIGludCByZXQgPSBGWFNZU19XaWRlQ2hhclRvTXVsdGlCeXRlKGRlc3RjcCwgMCwgKHdjaGFyX3QqKSZ1bmljb2RlLCAxLCBidWYsIDEwLCBOVUxMLCAmYkRlZik7DQotICAgIGlmIChyZXQgJiYgIWJEZWYpIHsNCi0gICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZyhidWYsIHJldCk7DQotICAgIH0NCi0gICAgRlhfTFBDU1RSIGFsdHN0ciA9IEZDU19HZXRBbHRTdHIodW5pY29kZSk7DQotICAgIGlmIChhbHRzdHIpIHsNCi0gICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZyhhbHRzdHIsIC0xKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoZGVmY2hhciwgLTEpOw0KLX0NCi1DVGV4dFBhZ2U6OkNUZXh0UGFnZSgpDQotew0KLX0NCi1DVGV4dFBhZ2U6On5DVGV4dFBhZ2UoKQ0KLXsNCi0gICAgaW50IGk7DQotICAgIGZvciAoaSA9IDA7IGkgPCBtX0Jhc2VMaW5lcy5HZXRTaXplKCk7IGkgKyspIHsNCi0gICAgICAgIENUZXh0QmFzZUxpbmUqIHBCYXNlTGluZSA9IChDVGV4dEJhc2VMaW5lKiltX0Jhc2VMaW5lcy5HZXRBdChpKTsNCi0gICAgICAgIGRlbGV0ZSBwQmFzZUxpbmU7DQotICAgIH0NCi0gICAgZm9yIChpID0gMDsgaSA8IG1fVGV4dENvbHVtbnMuR2V0U2l6ZSgpOyBpICsrKSB7DQotICAgICAgICBDVGV4dENvbHVtbiogcFRleHRDb2x1bW4gPSAoQ1RleHRDb2x1bW4qKW1fVGV4dENvbHVtbnMuR2V0QXQoaSk7DQotICAgICAgICBkZWxldGUgcFRleHRDb2x1bW47DQotICAgIH0NCi19DQotdm9pZCBDVGV4dFBhZ2U6OlByb2Nlc3NPYmplY3QoQ1BERl9QYWdlT2JqZWN0KiBwT2JqZWN0KQ0KLXsNCi0gICAgaWYgKHBPYmplY3QtPm1fVHlwZSAhPSBQREZQQUdFX1RFWFQpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDUERGX1RleHRPYmplY3QqIHBUZXh0ID0gKENQREZfVGV4dE9iamVjdCopcE9iamVjdDsNCi0gICAgQ1BERl9Gb250KiBwRm9udCA9IHBUZXh0LT5tX1RleHRTdGF0ZS5HZXRGb250KCk7DQotICAgIGludCBjb3VudCA9IHBUZXh0LT5Db3VudEl0ZW1zKCk7DQotICAgIEZYX0ZMT0FUKiBwUG9zQXJyYXkgPSBGWF9BbGxvYyhGWF9GTE9BVCwgY291bnQgKiAyKTsNCi0gICAgaWYgKHBQb3NBcnJheSkgew0KLSAgICAgICAgcFRleHQtPkNhbGNDaGFyUG9zKHBQb3NBcnJheSk7DQotICAgIH0NCi0gICAgRlhfRkxPQVQgZm9udHNpemVfaCA9IHBUZXh0LT5tX1RleHRTdGF0ZS5HZXRGb250U2l6ZUgoKTsNCi0gICAgRlhfRkxPQVQgZm9udHNpemVfdiA9IHBUZXh0LT5tX1RleHRTdGF0ZS5HZXRGb250U2l6ZVYoKTsNCi0gICAgRlhfRFdPUkQgc3BhY2VfY2hhcmNvZGUgPSBwRm9udC0+Q2hhckNvZGVGcm9tVW5pY29kZSgnICcpOw0KLSAgICBGWF9GTE9BVCBzcGFjZXcgPSAwOw0KLSAgICBpZiAoc3BhY2VfY2hhcmNvZGUgIT0gLTEpIHsNCi0gICAgICAgIHNwYWNldyA9IGZvbnRzaXplX2ggKiBwRm9udC0+R2V0Q2hhcldpZHRoRihzcGFjZV9jaGFyY29kZSkgLyAxMDAwOw0KLSAgICB9DQotICAgIGlmIChzcGFjZXcgPT0gMCkgew0KLSAgICAgICAgc3BhY2V3ID0gZm9udHNpemVfaCAvIDQ7DQotICAgIH0NCi0gICAgaWYgKHBUZXh0LT5tX1RleHRTdGF0ZS5HZXRCYXNlbGluZUFuZ2xlKCkgIT0gMCkgew0KLSAgICAgICAgaW50IGNjID0gMDsNCi0gICAgICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4Ow0KLSAgICAgICAgcFRleHQtPkdldFRleHRNYXRyaXgoJm1hdHJpeCk7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBUZXh0LT5tX25DaGFyczsgaSArKykgew0KLSAgICAgICAgICAgIEZYX0RXT1JEIGNoYXJjb2RlID0gcFRleHQtPm1fbkNoYXJzID09IDEgPyAoRlhfRFdPUkQpKEZYX1VJTlRQVFIpcFRleHQtPm1fcENoYXJDb2RlcyA6IHBUZXh0LT5tX3BDaGFyQ29kZXNbaV07DQotICAgICAgICAgICAgaWYgKGNoYXJjb2RlID09IChGWF9EV09SRCkgLSAxKSB7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9SRUNUIGNoYXJfYm94Ow0KLSAgICAgICAgICAgIHBGb250LT5HZXRDaGFyQkJveChjaGFyY29kZSwgY2hhcl9ib3gpOw0KLSAgICAgICAgICAgIEZYX0ZMT0FUIGNoYXJfbGVmdCA9IHBQb3NBcnJheSA/IHBQb3NBcnJheVtjYyAqIDJdIDogY2hhcl9ib3gubGVmdCAqIHBUZXh0LT5tX1RleHRTdGF0ZS5HZXRGb250U2l6ZSgpIC8gMTAwMDsNCi0gICAgICAgICAgICBGWF9GTE9BVCBjaGFyX3JpZ2h0ID0gcFBvc0FycmF5ID8gcFBvc0FycmF5W2NjICogMiArIDFdIDogY2hhcl9ib3gucmlnaHQgKiBwVGV4dC0+bV9UZXh0U3RhdGUuR2V0Rm9udFNpemUoKSAvIDEwMDA7DQotICAgICAgICAgICAgRlhfRkxPQVQgY2hhcl90b3AgPSBjaGFyX2JveC50b3AgKiBwVGV4dC0+bV9UZXh0U3RhdGUuR2V0Rm9udFNpemUoKSAvIDEwMDA7DQotICAgICAgICAgICAgRlhfRkxPQVQgY2hhcl9ib3R0b20gPSBjaGFyX2JveC5ib3R0b20gKiBwVGV4dC0+bV9UZXh0U3RhdGUuR2V0Rm9udFNpemUoKSAvIDEwMDA7DQotICAgICAgICAgICAgY2MgKys7DQotICAgICAgICAgICAgRlhfRkxPQVQgY2hhcl9vcmlneCwgY2hhcl9vcmlneTsNCi0gICAgICAgICAgICBtYXRyaXguVHJhbnNmb3JtKGNoYXJfbGVmdCwgMCwgY2hhcl9vcmlneCwgY2hhcl9vcmlneSk7DQotICAgICAgICAgICAgbWF0cml4LlRyYW5zZm9ybVJlY3QoY2hhcl9sZWZ0LCBjaGFyX3JpZ2h0LCBjaGFyX3RvcCwgY2hhcl9ib3R0b20pOw0KLSAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIHN0cjsNCi0gICAgICAgICAgICBwRm9udC0+QXBwZW5kQ2hhcihzdHIsIGNoYXJjb2RlKTsNCi0gICAgICAgICAgICBJbnNlcnRUZXh0Qm94KE5VTEwsIGNoYXJfb3JpZ3ksIGNoYXJfbGVmdCwgY2hhcl9yaWdodCwgY2hhcl90b3AsDQotICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX2JvdHRvbSwgc3BhY2V3LCBmb250c2l6ZV92LCBzdHIsIHBGb250KTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwUG9zQXJyYXkpIHsNCi0gICAgICAgICAgICBGWF9GcmVlKHBQb3NBcnJheSk7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhfRkxPQVQgcmF0aW9faCA9IGZvbnRzaXplX2ggLyBwVGV4dC0+bV9UZXh0U3RhdGUuR2V0Rm9udFNpemUoKTsNCi0gICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IGNvdW50ICogMjsgaWkgKyspIHsNCi0gICAgICAgIHBQb3NBcnJheVtpaV0gKj0gcmF0aW9faDsNCi0gICAgfQ0KLSAgICBGWF9GTE9BVCBiYXNlbGluZSA9IHBUZXh0LT5tX1Bvc1k7DQotICAgIENUZXh0QmFzZUxpbmUqIHBCYXNlTGluZSA9IE5VTEw7DQotICAgIEZYX0ZMT0FUIHRvcHkgPSBwVGV4dC0+bV9Ub3A7DQotICAgIEZYX0ZMT0FUIGJvdHRvbXkgPSBwVGV4dC0+bV9Cb3R0b207DQotICAgIEZYX0ZMT0FUIGxlZnR4ID0gcFRleHQtPm1fTGVmdDsNCi0gICAgaW50IGNjID0gMDsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgc2VnbWVudDsNCi0gICAgaW50IHNwYWNlX2NvdW50ID0gMDsNCi0gICAgRlhfRkxPQVQgbGFzdF9sZWZ0ID0gMCwgbGFzdF9yaWdodCA9IDAsIHNlZ21lbnRfbGVmdCA9IDAsIHNlZ21lbnRfcmlnaHQgPSAwOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBUZXh0LT5tX25DaGFyczsgaSArKykgew0KLSAgICAgICAgRlhfRFdPUkQgY2hhcmNvZGUgPSBwVGV4dC0+bV9uQ2hhcnMgPT0gMSA/IChGWF9EV09SRCkoRlhfVUlOVFBUUilwVGV4dC0+bV9wQ2hhckNvZGVzIDogcFRleHQtPm1fcENoYXJDb2Rlc1tpXTsNCi0gICAgICAgIGlmIChjaGFyY29kZSA9PSAoRlhfRFdPUkQpIC0gMSkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfRkxPQVQgY2hhcl9sZWZ0ID0gcFBvc0FycmF5W2NjICogMl07DQotICAgICAgICBGWF9GTE9BVCBjaGFyX3JpZ2h0ID0gcFBvc0FycmF5W2NjICogMiArIDFdOw0KLSAgICAgICAgY2MgKys7DQotICAgICAgICBpZiAoY2hhcl9sZWZ0IDwgbGFzdF9sZWZ0IHx8IChjaGFyX2xlZnQgLSBsYXN0X3JpZ2h0KSA+IHNwYWNldyAvIDIpIHsNCi0gICAgICAgICAgICBwQmFzZUxpbmUgPSBJbnNlcnRUZXh0Qm94KHBCYXNlTGluZSwgYmFzZWxpbmUsIGxlZnR4ICsgc2VnbWVudF9sZWZ0LCBsZWZ0eCArIHNlZ21lbnRfcmlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3B5LCBib3R0b215LCBzcGFjZXcsIGZvbnRzaXplX3YsIHNlZ21lbnQsIHBGb250KTsNCi0gICAgICAgICAgICBzZWdtZW50X2xlZnQgPSBjaGFyX2xlZnQ7DQotICAgICAgICAgICAgc2VnbWVudCA9ICIiOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgd0NoID0gcFRleHQtPkdldEZvbnQoKS0+VW5pY29kZUZyb21DaGFyQ29kZShjaGFyY29kZSk7DQotICAgICAgICBGWF9EV09SRCBjaCA9IHdDaC5HZXRMZW5ndGgoKSA+IDAgPyB3Q2guR2V0QXQoMCkgOiBjaGFyY29kZTsNCi0gICAgICAgIGlmIChzcGFjZV9jb3VudCA+IDEpIHsNCi0gICAgICAgICAgICBwQmFzZUxpbmUgPSBJbnNlcnRUZXh0Qm94KHBCYXNlTGluZSwgYmFzZWxpbmUsIGxlZnR4ICsgc2VnbWVudF9sZWZ0LCBsZWZ0eCArIHNlZ21lbnRfcmlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3B5LCBib3R0b215LCBzcGFjZXcsIGZvbnRzaXplX3YsIHNlZ21lbnQsIHBGb250KTsNCi0gICAgICAgICAgICBzZWdtZW50ID0gIiI7DQotICAgICAgICB9IGVsc2UgaWYgKHNwYWNlX2NvdW50ID09IDEpIHsNCi0gICAgICAgICAgICBwRm9udC0+QXBwZW5kQ2hhcihzZWdtZW50LCAnICcpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHNlZ21lbnQuR2V0TGVuZ3RoKCkgPT0gMCkgew0KLSAgICAgICAgICAgIHNlZ21lbnRfbGVmdCA9IGNoYXJfbGVmdDsNCi0gICAgICAgIH0NCi0gICAgICAgIHNlZ21lbnRfcmlnaHQgPSBjaGFyX3JpZ2h0Ow0KLSAgICAgICAgcEZvbnQtPkFwcGVuZENoYXIoc2VnbWVudCwgY2hhcmNvZGUpOw0KLSAgICAgICAgc3BhY2VfY291bnQgPSAwOw0KLSAgICAgICAgbGFzdF9sZWZ0ID0gY2hhcl9sZWZ0Ow0KLSAgICAgICAgbGFzdF9yaWdodCA9IGNoYXJfcmlnaHQ7DQotICAgIH0NCi0gICAgaWYgKHNlZ21lbnQuR2V0TGVuZ3RoKCkpDQotICAgICAgICBwQmFzZUxpbmUgPSBJbnNlcnRUZXh0Qm94KHBCYXNlTGluZSwgYmFzZWxpbmUsIGxlZnR4ICsgc2VnbWVudF9sZWZ0LCBsZWZ0eCArIHNlZ21lbnRfcmlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcHksIGJvdHRvbXksIHNwYWNldywgZm9udHNpemVfdiwgc2VnbWVudCwgcEZvbnQpOw0KLSAgICBGWF9GcmVlKHBQb3NBcnJheSk7DQotfQ0KLXN0YXRpYyB2b2lkIENvbnZlcnRQREZTdHJpbmcoQ0ZYX0J5dGVTdHJpbmcmIHJlc3VsdCwgQ0ZYX0J5dGVTdHJpbmcmIHNyYywgQ1BERl9Gb250KiBwRm9udCk7DQotQ1RleHRCYXNlTGluZSogQ1RleHRQYWdlOjpJbnNlcnRUZXh0Qm94KENUZXh0QmFzZUxpbmUqIHBCYXNlTGluZSwgRlhfRkxPQVQgYmFzZXksIEZYX0ZMT0FUIGxlZnR4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCByaWdodHgsIEZYX0ZMT0FUIHRvcHksIEZYX0ZMT0FUIGJvdHRvbXksIEZYX0ZMT0FUIHNwYWNldywgRlhfRkxPQVQgZm9udHNpemVfdiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcmIHN0ciwgQ1BERl9Gb250KiBwRm9udCkNCi17DQotICAgIGlmIChzdHIuR2V0TGVuZ3RoKCkgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKHBCYXNlTGluZSA9PSBOVUxMKSB7DQotICAgICAgICBpbnQgaTsNCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBtX0Jhc2VMaW5lcy5HZXRTaXplKCk7IGkgKyspIHsNCi0gICAgICAgICAgICBDVGV4dEJhc2VMaW5lKiBwRXhpc3RMaW5lID0gKENUZXh0QmFzZUxpbmUqKW1fQmFzZUxpbmVzLkdldEF0KGkpOw0KLSAgICAgICAgICAgIGlmIChwRXhpc3RMaW5lLT5tX0Jhc2VMaW5lID09IGJhc2V5KSB7DQotICAgICAgICAgICAgICAgIHBCYXNlTGluZSA9IHBFeGlzdExpbmU7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAocEV4aXN0TGluZS0+bV9CYXNlTGluZSA8IGJhc2V5KSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwQmFzZUxpbmUgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHBCYXNlTGluZSA9IEZYX05FVyBDVGV4dEJhc2VMaW5lOw0KLSAgICAgICAgICAgIGlmIChOVUxMID09IHBCYXNlTGluZSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcEJhc2VMaW5lLT5tX0Jhc2VMaW5lID0gYmFzZXk7DQotICAgICAgICAgICAgbV9CYXNlTGluZXMuSW5zZXJ0QXQoaSwgcEJhc2VMaW5lKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDRlhfV2lkZVN0cmluZyB0ZXh0Ow0KLSAgICBGWF9MUENTVFIgcFN0ciA9IHN0cjsNCi0gICAgaW50IGxlbiA9IHN0ci5HZXRMZW5ndGgoKSwgb2Zmc2V0ID0gMDsNCi0gICAgd2hpbGUgKG9mZnNldCA8IGxlbikgew0KLSAgICAgICAgRlhfRFdPUkQgY2ggPSBwRm9udC0+R2V0TmV4dENoYXIocFN0ciwgb2Zmc2V0KTsNCi0gICAgICAgIENGWF9XaWRlU3RyaW5nIHVuaWNvZGVfc3RyID0gcEZvbnQtPlVuaWNvZGVGcm9tQ2hhckNvZGUoY2gpOw0KLSAgICAgICAgdGV4dCArPSB1bmljb2RlX3N0cjsNCi0gICAgfQ0KLSAgICBwQmFzZUxpbmUtPkluc2VydFRleHRCb3gobGVmdHgsIHJpZ2h0eCwgdG9weSwgYm90dG9teSwgc3BhY2V3LCBmb250c2l6ZV92LCB0ZXh0KTsNCi0gICAgcmV0dXJuIHBCYXNlTGluZTsNCi19DQotdm9pZCBDVGV4dFBhZ2U6OldyaXRlT3V0cHV0KENGWF9XaWRlU3RyaW5nQXJyYXkmIGxpbmVzLCBpbnQgaU1pbldpZHRoKQ0KLXsNCi0gICAgRlhfRkxPQVQgbGFzdGhlaWdodCA9IC0xOw0KLSAgICBGWF9GTE9BVCBsYXN0YmFzZWxpbmUgPSAtMTsNCi0gICAgRlhfRkxPQVQgTWluTGVmdFggPSAxMDAwMDAwOw0KLSAgICBGWF9GTE9BVCBNYXhSaWdodFggPSAwOw0KLSAgICBpbnQgaTsNCi0gICAgZm9yIChpID0gMDsgaSA8IG1fQmFzZUxpbmVzLkdldFNpemUoKTsgaSArKykgew0KLSAgICAgICAgQ1RleHRCYXNlTGluZSogcEJhc2VMaW5lID0gKENUZXh0QmFzZUxpbmUqKW1fQmFzZUxpbmVzLkdldEF0KGkpOw0KLSAgICAgICAgRlhfRkxPQVQgbGVmdHgsIHJpZ2h0eDsNCi0gICAgICAgIGlmIChwQmFzZUxpbmUtPkdldFdpZHRoKGxlZnR4LCByaWdodHgpKSB7DQotICAgICAgICAgICAgaWYgKGxlZnR4IDwgTWluTGVmdFgpIHsNCi0gICAgICAgICAgICAgICAgTWluTGVmdFggPSBsZWZ0eDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKHJpZ2h0eCA+IE1heFJpZ2h0WCkgew0KLSAgICAgICAgICAgICAgICBNYXhSaWdodFggPSByaWdodHg7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGZvciAoaSA9IDA7IGkgPCBtX0Jhc2VMaW5lcy5HZXRTaXplKCk7IGkgKyspIHsNCi0gICAgICAgIENUZXh0QmFzZUxpbmUqIHBCYXNlTGluZSA9IChDVGV4dEJhc2VMaW5lKiltX0Jhc2VMaW5lcy5HZXRBdChpKTsNCi0gICAgICAgIHBCYXNlTGluZS0+TWVyZ2VCb3hlcygpOw0KLSAgICB9DQotICAgIGZvciAoaSA9IDE7IGkgPCBtX0Jhc2VMaW5lcy5HZXRTaXplKCk7IGkgKyspIHsNCi0gICAgICAgIENUZXh0QmFzZUxpbmUqIHBCYXNlTGluZSA9IChDVGV4dEJhc2VMaW5lKiltX0Jhc2VMaW5lcy5HZXRBdChpKTsNCi0gICAgICAgIENUZXh0QmFzZUxpbmUqIHBQcmV2TGluZSA9IChDVGV4dEJhc2VMaW5lKiltX0Jhc2VMaW5lcy5HZXRBdChpIC0gMSk7DQotICAgICAgICBpZiAocEJhc2VMaW5lLT5DYW5NZXJnZShwUHJldkxpbmUpKSB7DQotICAgICAgICAgICAgcFByZXZMaW5lLT5NZXJnZShwQmFzZUxpbmUpOw0KLSAgICAgICAgICAgIGRlbGV0ZSBwQmFzZUxpbmU7DQotICAgICAgICAgICAgbV9CYXNlTGluZXMuUmVtb3ZlQXQoaSk7DQotICAgICAgICAgICAgaSAtLTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAobV9iQXV0b1dpZHRoKSB7DQotICAgICAgICBpbnQqIHdpZHRocyA9IEZYX0FsbG9jKGludCwgbV9CYXNlTGluZXMuR2V0U2l6ZSgpKTsNCi0gICAgICAgIGlmICh3aWR0aHMpIHsNCi0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9CYXNlTGluZXMuR2V0U2l6ZSgpOyBpICsrKSB7DQotICAgICAgICAgICAgICAgIHdpZHRoc1tpXSA9IDA7DQotICAgICAgICAgICAgICAgIENUZXh0QmFzZUxpbmUqIHBCYXNlTGluZSA9IChDVGV4dEJhc2VMaW5lKiltX0Jhc2VMaW5lcy5HZXRBdChpKTsNCi0gICAgICAgICAgICAgICAgaW50IFRvdGFsQ2hhcnMgPSAwOw0KLSAgICAgICAgICAgICAgICBGWF9GTE9BVCBUb3RhbFdpZHRoID0gMDsNCi0gICAgICAgICAgICAgICAgaW50IG1pbmNoYXJzOw0KLSAgICAgICAgICAgICAgICBwQmFzZUxpbmUtPkNvdW50Q2hhcnMoVG90YWxDaGFycywgVG90YWxXaWR0aCwgbWluY2hhcnMpOw0KLSAgICAgICAgICAgICAgICBpZiAoVG90YWxDaGFycykgew0KLSAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQgY2hhcndpZHRoID0gVG90YWxXaWR0aCAvIFRvdGFsQ2hhcnM7DQotICAgICAgICAgICAgICAgICAgICB3aWR0aHNbaV0gPSAoaW50KSgoTWF4UmlnaHRYIC0gTWluTGVmdFgpIC8gY2hhcndpZHRoKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAod2lkdGhzW2ldID4gMTAwMCkgew0KLSAgICAgICAgICAgICAgICAgICAgd2lkdGhzW2ldID0gMTAwMDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAod2lkdGhzW2ldIDwgbWluY2hhcnMpIHsNCi0gICAgICAgICAgICAgICAgICAgIHdpZHRoc1tpXSA9IG1pbmNoYXJzOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGludCBBdmdXaWR0aCA9IDAsIHdpZHRoY291bnQgPSAwOw0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtX0Jhc2VMaW5lcy5HZXRTaXplKCk7IGkgKyspDQotICAgICAgICAgICAgICAgIGlmICh3aWR0aHNbaV0pIHsNCi0gICAgICAgICAgICAgICAgICAgIEF2Z1dpZHRoICs9IHdpZHRoc1tpXTsNCi0gICAgICAgICAgICAgICAgICAgIHdpZHRoY291bnQgKys7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBBdmdXaWR0aCA9IGludCgoRlhfRkxPQVQpQXZnV2lkdGggLyB3aWR0aGNvdW50ICsgMC41KTsNCi0gICAgICAgICAgICBpbnQgTWF4V2lkdGggPSAwOw0KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtX0Jhc2VMaW5lcy5HZXRTaXplKCk7IGkgKyspDQotICAgICAgICAgICAgICAgIGlmIChNYXhXaWR0aCA8IHdpZHRoc1tpXSkgew0KLSAgICAgICAgICAgICAgICAgICAgTWF4V2lkdGggPSB3aWR0aHNbaV07DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoTWF4V2lkdGggPiBBdmdXaWR0aCAqIDYgLyA1KSB7DQotICAgICAgICAgICAgICAgIE1heFdpZHRoID0gQXZnV2lkdGggKiA2IC8gNTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgRlhfRnJlZSh3aWR0aHMpOw0KLSAgICAgICAgICAgIGlmIChpTWluV2lkdGggPCBNYXhXaWR0aCkgew0KLSAgICAgICAgICAgICAgICBpTWluV2lkdGggPSBNYXhXaWR0aDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgZm9yIChpID0gMDsgaSA8IG1fQmFzZUxpbmVzLkdldFNpemUoKTsgaSArKykgew0KLSAgICAgICAgQ1RleHRCYXNlTGluZSogcEJhc2VMaW5lID0gKENUZXh0QmFzZUxpbmUqKW1fQmFzZUxpbmVzLkdldEF0KGkpOw0KLSAgICAgICAgcEJhc2VMaW5lLT5NZXJnZUJveGVzKCk7DQotICAgIH0NCi0gICAgaWYgKG1fYktlZXBDb2x1bW4pIHsNCi0gICAgICAgIEZpbmRDb2x1bW5zKCk7DQotICAgIH0NCi0gICAgZm9yIChpID0gMDsgaSA8IG1fQmFzZUxpbmVzLkdldFNpemUoKTsgaSArKykgew0KLSAgICAgICAgQ1RleHRCYXNlTGluZSogcEJhc2VMaW5lID0gKENUZXh0QmFzZUxpbmUqKW1fQmFzZUxpbmVzLkdldEF0KGkpOw0KLSAgICAgICAgaWYgKGxhc3RoZWlnaHQgPj0gMCkgew0KLSAgICAgICAgICAgIEZYX0ZMT0FUIGR5ID0gbGFzdGJhc2VsaW5lIC0gcEJhc2VMaW5lLT5tX0Jhc2VMaW5lOw0KLSAgICAgICAgICAgIGlmIChkeSA+PSAocEJhc2VMaW5lLT5tX01heEZvbnRTaXplVikgKiAxLjUgfHwgZHkgPj0gbGFzdGhlaWdodCAqIDEuNSkgew0KLSAgICAgICAgICAgICAgICBsaW5lcy5BZGQoTCIiKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBsYXN0aGVpZ2h0ID0gcEJhc2VMaW5lLT5tX01heEZvbnRTaXplVjsNCi0gICAgICAgIGxhc3RiYXNlbGluZSA9IHBCYXNlTGluZS0+bV9CYXNlTGluZTsNCi0gICAgICAgIENGWF9XaWRlU3RyaW5nIHN0cjsNCi0gICAgICAgIHBCYXNlTGluZS0+V3JpdGVPdXRwdXQoc3RyLCBNaW5MZWZ0WCwgTWF4UmlnaHRYIC0gTWluTGVmdFgsIGlNaW5XaWR0aCk7DQotICAgICAgICBsaW5lcy5BZGQoc3RyKTsNCi0gICAgfQ0KLX0NCi12b2lkIE5vcm1hbGl6ZUNvbXBvc2l0ZUNoYXIoRlhfV0NIQVIgd0NoYXIsIENGWF9XaWRlU3RyaW5nJiBzRGVzdCkNCi17DQotICAgIHdDaGFyID0gRlhfR2V0TWlycm9yQ2hhcih3Q2hhciwgVFJVRSwgRkFMU0UpOw0KLSAgICBGWF9MUFdTVFIgcERzdCA9IE5VTEw7DQotICAgIEZYX1NUUlNJWkUgbkNvdW50ID0gRlhfVW5pY29kZV9HZXROb3JtYWxpemF0aW9uKHdDaGFyLCBwRHN0KTsNCi0gICAgaWYgKG5Db3VudCA8IDEgKSB7DQotICAgICAgICBzRGVzdCArPSB3Q2hhcjsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBwRHN0ID0gbmV3IEZYX1dDSEFSW25Db3VudF07DQotICAgIEZYX1VuaWNvZGVfR2V0Tm9ybWFsaXphdGlvbih3Q2hhciwgcERzdCk7DQotICAgIGZvciAoaW50IG5JbmRleCA9IDA7IG5JbmRleCA8IG5Db3VudDsgbkluZGV4KyspIHsNCi0gICAgICAgIHNEZXN0ICs9IHBEc3RbbkluZGV4XTsNCi0gICAgfQ0KLSAgICBkZWxldGVbXSBwRHN0Ow0KLX0NCi12b2lkIE5vcm1hbGl6ZVN0cmluZyhDRlhfV2lkZVN0cmluZyYgc3RyKQ0KLXsNCi0gICAgaWYgKHN0ci5HZXRMZW5ndGgoKSA8PSAwKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcgc0J1ZmZlcjsNCi0gICAgSUZYX0JpZGlDaGFyKiBCaWRpQ2hhciA9IElGWF9CaWRpQ2hhcjo6Q3JlYXRlKCk7DQotICAgIGlmIChOVUxMID09IEJpZGlDaGFyKQl7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ0ZYX1dvcmRBcnJheSBvcmRlcjsNCi0gICAgRlhfQk9PTCBiUjJMID0gRkFMU0U7DQotICAgIEZYX0lOVDMyIHN0YXJ0ID0gMCwgY291bnQgPSAwLCBpID0gMDsNCi0gICAgaW50IG5SMkwgPSAwLCBuTDJSID0gMDsNCi0gICAgZm9yIChpID0gMDsgaSA8IHN0ci5HZXRMZW5ndGgoKTsgaSsrKSB7DQotICAgICAgICBpZihCaWRpQ2hhci0+QXBwZW5kQ2hhcihzdHIuR2V0QXQoaSkpKSB7DQotICAgICAgICAgICAgRlhfSU5UMzIgcmV0ID0gQmlkaUNoYXItPkdldEJpZGlJbmZvKHN0YXJ0LCBjb3VudCk7DQotICAgICAgICAgICAgb3JkZXIuQWRkKHN0YXJ0KTsNCi0gICAgICAgICAgICBvcmRlci5BZGQoY291bnQpOw0KLSAgICAgICAgICAgIG9yZGVyLkFkZChyZXQpOw0KLSAgICAgICAgICAgIGlmKCFiUjJMKSB7DQotICAgICAgICAgICAgICAgIGlmKHJldCA9PSAyKSB7DQotICAgICAgICAgICAgICAgICAgICBuUjJMKys7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0ID09IDEpIHsNCi0gICAgICAgICAgICAgICAgICAgIG5MMlIrKzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZihCaWRpQ2hhci0+RW5kQ2hhcigpKSB7DQotICAgICAgICBGWF9JTlQzMiByZXQgPSBCaWRpQ2hhci0+R2V0QmlkaUluZm8oc3RhcnQsIGNvdW50KTsNCi0gICAgICAgIG9yZGVyLkFkZChzdGFydCk7DQotICAgICAgICBvcmRlci5BZGQoY291bnQpOw0KLSAgICAgICAgb3JkZXIuQWRkKHJldCk7DQotICAgICAgICBpZighYlIyTCkgew0KLSAgICAgICAgICAgIGlmKHJldCA9PSAyKSB7DQotICAgICAgICAgICAgICAgIG5SMkwrKzsNCi0gICAgICAgICAgICB9IGVsc2UgaWYocmV0ID09IDEpIHsNCi0gICAgICAgICAgICAgICAgbkwyUisrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZihuUjJMID4gMCAmJiBuUjJMID49IG5MMlIpIHsNCi0gICAgICAgIGJSMkwgPSBUUlVFOw0KLSAgICB9DQotICAgIGlmKGJSMkwpIHsNCi0gICAgICAgIGludCBjb3VudCA9IG9yZGVyLkdldFNpemUoKTsNCi0gICAgICAgIGZvcihpbnQgaiA9IGNvdW50IC0gMTsgaiA+IDA7IGogLT0gMykgew0KLSAgICAgICAgICAgIGludCByZXQgPSBvcmRlci5HZXRBdChqKTsNCi0gICAgICAgICAgICBpbnQgc3RhcnQgPSBvcmRlci5HZXRBdChqIC0gMik7DQotICAgICAgICAgICAgaW50IGNvdW50MSA9IG9yZGVyLkdldEF0KGogLSAxKTsNCi0gICAgICAgICAgICBpZihyZXQgPT0gMiB8fCByZXQgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBmb3IoaW50IGkgPSBzdGFydCArIGNvdW50MSAtIDE7IGkgPj0gc3RhcnQ7IGktLSkgew0KLSAgICAgICAgICAgICAgICAgICAgTm9ybWFsaXplQ29tcG9zaXRlQ2hhcihzdHJbaV0sIHNCdWZmZXIpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgaSA9IGo7DQotICAgICAgICAgICAgICAgIEZYX0JPT0wgYlN5bWJvbCA9IEZBTFNFOw0KLSAgICAgICAgICAgICAgICB3aGlsZShpID4gMCAmJiBvcmRlci5HZXRBdChpKSAhPSAyKSB7DQotICAgICAgICAgICAgICAgICAgICBiU3ltYm9sID0gIW9yZGVyLkdldEF0KGkpOw0KLSAgICAgICAgICAgICAgICAgICAgaSAtPSAzOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGludCBlbmQgPSBzdGFydCArIGNvdW50MSA7DQotICAgICAgICAgICAgICAgIGludCBuID0gMDsNCi0gICAgICAgICAgICAgICAgaWYoYlN5bWJvbCkgew0KLSAgICAgICAgICAgICAgICAgICAgbiA9IGkgKyA2Ow0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgbiA9IGkgKyAzOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmKG4gPj0gaikgew0KLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCBtID0gc3RhcnQ7IG0gPCBlbmQ7IG0rKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNCdWZmZXIgKz0gc3RyW21dOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgaSA9IGo7DQotICAgICAgICAgICAgICAgICAgICBqID0gbjsNCi0gICAgICAgICAgICAgICAgICAgIGZvcig7IG4gPD0gaTsgbiArPSAzKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldCA9IG9yZGVyLkdldEF0KG4pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCA9IG9yZGVyLkdldEF0KG4gLSAyKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQxID0gb3JkZXIuR2V0QXQobiAtIDEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbmQgPSBzdGFydCArIGNvdW50MSA7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCBtID0gc3RhcnQ7IG0gPCBlbmQ7IG0rKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzQnVmZmVyICs9IHN0clttXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpbnQgY291bnQgPSBvcmRlci5HZXRTaXplKCk7DQotICAgICAgICBGWF9CT09MIGJMMlIgPSBGQUxTRTsNCi0gICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBjb3VudDsgaiArPSAzKSB7DQotICAgICAgICAgICAgaW50IHJldCA9IG9yZGVyLkdldEF0KGogKyAyKTsNCi0gICAgICAgICAgICBpbnQgc3RhcnQgPSBvcmRlci5HZXRBdChqKTsNCi0gICAgICAgICAgICBpbnQgY291bnQxID0gb3JkZXIuR2V0QXQoaiArIDEpOw0KLSAgICAgICAgICAgIGlmKHJldCA9PSAyIHx8IChqID09IDAgJiYgcmV0ID09IDAgJiYgIWJMMlIpKSB7DQotICAgICAgICAgICAgICAgIGludCBpID0gaiArIDM7DQotICAgICAgICAgICAgICAgIHdoaWxlKGJSMkwgJiYgaSA8IGNvdW50KSB7DQotICAgICAgICAgICAgICAgICAgICBpZihvcmRlci5HZXRBdChpICsgMikgPT0gMSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpICs9IDM7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYoaSA9PSAzKSB7DQotICAgICAgICAgICAgICAgICAgICBqID0gLTM7DQotICAgICAgICAgICAgICAgICAgICBiTDJSID0gVFJVRTsNCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGludCBlbmQgPSBzdHIuR2V0TGVuZ3RoKCkgLSAxOw0KLSAgICAgICAgICAgICAgICBpZihpIDwgY291bnQpIHsNCi0gICAgICAgICAgICAgICAgICAgIGVuZCA9IG9yZGVyLkdldEF0KGkpIC0gMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBqID0gaSAtIDM7DQotICAgICAgICAgICAgICAgIGZvcihpbnQgbiA9IGVuZDsgbiA+PSBzdGFydDsgbi0tKSB7DQotICAgICAgICAgICAgICAgICAgICBOb3JtYWxpemVDb21wb3NpdGVDaGFyKHN0cltpXSwgc0J1ZmZlcik7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBpbnQgZW5kID0gc3RhcnQgKyBjb3VudDEgOw0KLSAgICAgICAgICAgICAgICBmb3IoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7DQotICAgICAgICAgICAgICAgICAgICBzQnVmZmVyICs9IHN0cltpXTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBzdHIuRW1wdHkoKTsNCi0gICAgc3RyICs9IHNCdWZmZXI7DQotICAgIEJpZGlDaGFyLT5SZWxlYXNlKCk7DQotfQ0KLXN0YXRpYyBGWF9CT09MIElzTnVtYmVyKENGWF9XaWRlU3RyaW5nJiBzdHIpDQotew0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0ci5HZXRMZW5ndGgoKTsgaSArKykgew0KLSAgICAgICAgRlhfV0NIQVIgY2ggPSBzdHJbaV07DQotICAgICAgICBpZiAoKGNoIDwgJzAnIHx8IGNoID4gJzknKSAmJiBjaCAhPSAnLScgJiYgY2ggIT0gJysnICYmIGNoICE9ICcuJyAmJiBjaCAhPSAnICcpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ1RleHRQYWdlOjpGaW5kQ29sdW1ucygpDQotew0KLSAgICBpbnQgaTsNCi0gICAgZm9yIChpID0gMDsgaSA8IG1fQmFzZUxpbmVzLkdldFNpemUoKTsgaSArKykgew0KLSAgICAgICAgQ1RleHRCYXNlTGluZSogcEJhc2VMaW5lID0gKENUZXh0QmFzZUxpbmUqKW1fQmFzZUxpbmVzLkdldEF0KGkpOw0KLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwQmFzZUxpbmUtPm1fVGV4dExpc3QuR2V0U2l6ZSgpOyBqICsrKSB7DQotICAgICAgICAgICAgQ1RleHRCb3gqIHBUZXh0Qm94ID0gKENUZXh0Qm94KilwQmFzZUxpbmUtPm1fVGV4dExpc3QuR2V0QXQoaik7DQotICAgICAgICAgICAgQ1RleHRDb2x1bW4qIHBDb2x1bW4gPSBGaW5kQ29sdW1uKHBUZXh0Qm94LT5tX1JpZ2h0KTsNCi0gICAgICAgICAgICBpZiAocENvbHVtbiA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIHBDb2x1bW4gPSBGWF9ORVcgQ1RleHRDb2x1bW47DQotICAgICAgICAgICAgICAgIGlmIChwQ29sdW1uKSB7DQotICAgICAgICAgICAgICAgICAgICBwQ29sdW1uLT5tX0NvdW50ID0gMTsNCi0gICAgICAgICAgICAgICAgICAgIHBDb2x1bW4tPm1fQXZnUG9zID0gcFRleHRCb3gtPm1fUmlnaHQ7DQotICAgICAgICAgICAgICAgICAgICBwQ29sdW1uLT5tX1RleHRQb3MgPSAtMTsNCi0gICAgICAgICAgICAgICAgICAgIG1fVGV4dENvbHVtbnMuQWRkKHBDb2x1bW4pOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgcENvbHVtbi0+bV9BdmdQb3MgPSAocENvbHVtbi0+bV9Db3VudCAqIHBDb2x1bW4tPm1fQXZnUG9zICsgcFRleHRCb3gtPm1fUmlnaHQpIC8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocENvbHVtbi0+bV9Db3VudCArIDEpOw0KLSAgICAgICAgICAgICAgICBwQ29sdW1uLT5tX0NvdW50ICsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpbnQgbWluY291bnQgPSBtX0Jhc2VMaW5lcy5HZXRTaXplKCkgLyA0Ow0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbV9UZXh0Q29sdW1ucy5HZXRTaXplKCk7IGkgKyspIHsNCi0gICAgICAgIENUZXh0Q29sdW1uKiBwVGV4dENvbHVtbiA9IChDVGV4dENvbHVtbiopbV9UZXh0Q29sdW1ucy5HZXRBdChpKTsNCi0gICAgICAgIGlmIChwVGV4dENvbHVtbi0+bV9Db3VudCA+PSBtaW5jb3VudCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVsZXRlIHBUZXh0Q29sdW1uOw0KLSAgICAgICAgbV9UZXh0Q29sdW1ucy5SZW1vdmVBdChpKTsNCi0gICAgICAgIGkgLS07DQotICAgIH0NCi0gICAgZm9yIChpID0gMDsgaSA8IG1fQmFzZUxpbmVzLkdldFNpemUoKTsgaSArKykgew0KLSAgICAgICAgQ1RleHRCYXNlTGluZSogcEJhc2VMaW5lID0gKENUZXh0QmFzZUxpbmUqKW1fQmFzZUxpbmVzLkdldEF0KGkpOw0KLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwQmFzZUxpbmUtPm1fVGV4dExpc3QuR2V0U2l6ZSgpOyBqICsrKSB7DQotICAgICAgICAgICAgQ1RleHRCb3gqIHBUZXh0Qm94ID0gKENUZXh0Qm94KilwQmFzZUxpbmUtPm1fVGV4dExpc3QuR2V0QXQoaik7DQotICAgICAgICAgICAgaWYgKElzTnVtYmVyKHBUZXh0Qm94LT5tX1RleHQpKSB7DQotICAgICAgICAgICAgICAgIHBUZXh0Qm94LT5tX3BDb2x1bW4gPSBGaW5kQ29sdW1uKHBUZXh0Qm94LT5tX1JpZ2h0KTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi19DQotQ1RleHRDb2x1bW4qIENUZXh0UGFnZTo6RmluZENvbHVtbihGWF9GTE9BVCB4cG9zKQ0KLXsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX1RleHRDb2x1bW5zLkdldFNpemUoKTsgaSArKykgew0KLSAgICAgICAgQ1RleHRDb2x1bW4qIHBDb2x1bW4gPSAoQ1RleHRDb2x1bW4qKW1fVGV4dENvbHVtbnMuR2V0QXQoaSk7DQotICAgICAgICBpZiAocENvbHVtbi0+bV9BdmdQb3MgPCB4cG9zICsgMSAmJiBwQ29sdW1uLT5tX0F2Z1BvcyA+IHhwb3MgLSAxKSB7DQotICAgICAgICAgICAgcmV0dXJuIHBDb2x1bW47DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLXZvaWQgQ1RleHRQYWdlOjpCcmVha1NwYWNlKENQREZfVGV4dE9iamVjdCogcFRleHRPYmopDQotew0KLX0NCi1DVGV4dEJhc2VMaW5lOjpDVGV4dEJhc2VMaW5lKCkNCi17DQotICAgIG1fVG9wID0gLTEwMDAwMDsNCi0gICAgbV9Cb3R0b20gPSAxMDAwMDA7DQotICAgIG1fTWF4Rm9udFNpemVWID0gMDsNCi19DQotQ1RleHRCYXNlTGluZTo6fkNUZXh0QmFzZUxpbmUoKQ0KLXsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX1RleHRMaXN0LkdldFNpemUoKTsgaSArKykgew0KLSAgICAgICAgQ1RleHRCb3gqIHBUZXh0ID0gKENUZXh0Qm94KiltX1RleHRMaXN0LkdldEF0KGkpOw0KLSAgICAgICAgZGVsZXRlIHBUZXh0Ow0KLSAgICB9DQotfQ0KLXZvaWQgQ1RleHRCYXNlTGluZTo6SW5zZXJ0VGV4dEJveChGWF9GTE9BVCBsZWZ0eCwgRlhfRkxPQVQgcmlnaHR4LCBGWF9GTE9BVCB0b3B5LCBGWF9GTE9BVCBib3R0b215LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCBzcGFjZXcsIEZYX0ZMT0FUIGZvbnRzaXplX3YsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiB0ZXh0KQ0KLXsNCi0gICAgaWYgKG1fVG9wIDwgdG9weSkgew0KLSAgICAgICAgbV9Ub3AgPSB0b3B5Ow0KLSAgICB9DQotICAgIGlmIChtX0JvdHRvbSA+IGJvdHRvbXkpIHsNCi0gICAgICAgIG1fQm90dG9tID0gYm90dG9teTsNCi0gICAgfQ0KLSAgICBpZiAobV9NYXhGb250U2l6ZVYgPCBmb250c2l6ZV92KSB7DQotICAgICAgICBtX01heEZvbnRTaXplViA9IGZvbnRzaXplX3Y7DQotICAgIH0NCi0gICAgaW50IGk7DQotICAgIGZvciAoaSA9IDA7IGkgPCBtX1RleHRMaXN0LkdldFNpemUoKTsgaSArKykgew0KLSAgICAgICAgQ1RleHRCb3gqIHBUZXh0ID0gKENUZXh0Qm94KiltX1RleHRMaXN0LkdldEF0KGkpOw0KLSAgICAgICAgaWYgKHBUZXh0LT5tX0xlZnQgPiBsZWZ0eCkgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIENUZXh0Qm94KiBwVGV4dCA9IEZYX05FVyBDVGV4dEJveDsNCi0gICAgaWYgKE5VTEwgPT0gcFRleHQpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBwVGV4dC0+bV9UZXh0ID0gdGV4dDsNCi0gICAgcFRleHQtPm1fTGVmdCA9IGxlZnR4Ow0KLSAgICBwVGV4dC0+bV9SaWdodCA9IHJpZ2h0eDsNCi0gICAgcFRleHQtPm1fVG9wID0gdG9weTsNCi0gICAgcFRleHQtPm1fQm90dG9tID0gYm90dG9teTsNCi0gICAgcFRleHQtPm1fU3BhY2VXaWR0aCA9IHNwYWNldzsNCi0gICAgcFRleHQtPm1fRm9udFNpemVWID0gZm9udHNpemVfdjsNCi0gICAgcFRleHQtPm1fcENvbHVtbiA9IE5VTEw7DQotICAgIG1fVGV4dExpc3QuSW5zZXJ0QXQoaSwgcFRleHQpOw0KLX0NCi1GWF9CT09MIEdldEludGVyc2VjdGlvbihGWF9GTE9BVCBsb3cxLCBGWF9GTE9BVCBoaWdoMSwgRlhfRkxPQVQgbG93MiwgRlhfRkxPQVQgaGlnaDIsDQotICAgICAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQmIGludGVybG93LCBGWF9GTE9BVCYgaW50ZXJoaWdoKTsNCi1GWF9CT09MIENUZXh0QmFzZUxpbmU6OkNhbk1lcmdlKENUZXh0QmFzZUxpbmUqIHBPdGhlcikNCi17DQotICAgIEZYX0ZMT0FUIGludGVyX3RvcCwgaW50ZXJfYm90dG9tOw0KLSAgICBpZiAoIUdldEludGVyc2VjdGlvbihtX0JvdHRvbSwgbV9Ub3AsIHBPdGhlci0+bV9Cb3R0b20sIHBPdGhlci0+bV9Ub3AsDQotICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyX2JvdHRvbSwgaW50ZXJfdG9wKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYX0ZMT0FUIGludGVyX2ggPSBpbnRlcl90b3AgLSBpbnRlcl9ib3R0b207DQotICAgIGlmIChpbnRlcl9oIDwgKG1fVG9wIC0gbV9Cb3R0b20pIC8gMiAmJiBpbnRlcl9oIDwgKHBPdGhlci0+bV9Ub3AgLSBwT3RoZXItPm1fQm90dG9tKSAvIDIpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWF9GTE9BVCBkeSA9IChGWF9GTE9BVClGWFNZU19mYWJzKG1fQmFzZUxpbmUgLSBwT3RoZXItPm1fQmFzZUxpbmUpOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fVGV4dExpc3QuR2V0U2l6ZSgpOyBpICsrKSB7DQotICAgICAgICBDVGV4dEJveCogcFRleHQgPSAoQ1RleHRCb3gqKW1fVGV4dExpc3QuR2V0QXQoaSk7DQotICAgICAgICBGWF9GTE9BVCB3aWR0aCA9IHBUZXh0LT5tX1JpZ2h0IC0gcFRleHQtPm1fTGVmdDsNCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcE90aGVyLT5tX1RleHRMaXN0LkdldFNpemUoKTsgaiArKykgew0KLSAgICAgICAgICAgIENUZXh0Qm94KiBwT3RoZXJUZXh0ID0gKENUZXh0Qm94KilwT3RoZXItPm1fVGV4dExpc3QuR2V0QXQoaik7DQotICAgICAgICAgICAgRlhfRkxPQVQgaW50ZXJfbGVmdCwgaW50ZXJfcmlnaHQ7DQotICAgICAgICAgICAgaWYgKCFHZXRJbnRlcnNlY3Rpb24ocFRleHQtPm1fTGVmdCwgcFRleHQtPm1fUmlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcE90aGVyVGV4dC0+bV9MZWZ0LCBwT3RoZXJUZXh0LT5tX1JpZ2h0LCBpbnRlcl9sZWZ0LCBpbnRlcl9yaWdodCkpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIEZYX0ZMT0FUIGludGVyX3cgPSBpbnRlcl9yaWdodCAtIGludGVyX2xlZnQ7DQotICAgICAgICAgICAgaWYgKGludGVyX3cgPCBwVGV4dC0+bV9TcGFjZVdpZHRoIC8gMiAmJiBpbnRlcl93IDwgcE90aGVyVGV4dC0+bV9TcGFjZVdpZHRoIC8gMikgew0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGR5ID49IChwVGV4dC0+bV9Cb3R0b20gLSBwVGV4dC0+bV9Ub3ApIC8gMiB8fA0KLSAgICAgICAgICAgICAgICAgICAgZHkgPj0gKHBPdGhlclRleHQtPm1fQm90dG9tIC0gcE90aGVyVGV4dC0+bV9Ub3ApIC8gMikgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi12b2lkIENUZXh0QmFzZUxpbmU6Ok1lcmdlKENUZXh0QmFzZUxpbmUqIHBPdGhlcikNCi17DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcE90aGVyLT5tX1RleHRMaXN0LkdldFNpemUoKTsgaSArKykgew0KLSAgICAgICAgQ1RleHRCb3gqIHBUZXh0ID0gKENUZXh0Qm94KilwT3RoZXItPm1fVGV4dExpc3QuR2V0QXQoaSk7DQotICAgICAgICBJbnNlcnRUZXh0Qm94KHBUZXh0LT5tX0xlZnQsIHBUZXh0LT5tX1JpZ2h0LCBwVGV4dC0+bV9Ub3AsIHBUZXh0LT5tX0JvdHRvbSwNCi0gICAgICAgICAgICAgICAgICAgICAgcFRleHQtPm1fU3BhY2VXaWR0aCwgcFRleHQtPm1fRm9udFNpemVWLCBwVGV4dC0+bV9UZXh0KTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENUZXh0QmFzZUxpbmU6OkdldFdpZHRoKEZYX0ZMT0FUJiBsZWZ0eCwgRlhfRkxPQVQmIHJpZ2h0eCkNCi17DQotICAgIGludCBpOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbV9UZXh0TGlzdC5HZXRTaXplKCk7IGkgKyspIHsNCi0gICAgICAgIENUZXh0Qm94KiBwVGV4dCA9IChDVGV4dEJveCopbV9UZXh0TGlzdC5HZXRBdChpKTsNCi0gICAgICAgIGlmIChwVGV4dC0+bV9UZXh0ICE9IEwiICIpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoaSA9PSBtX1RleHRMaXN0LkdldFNpemUoKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIENUZXh0Qm94KiBwVGV4dCA9IChDVGV4dEJveCopbV9UZXh0TGlzdC5HZXRBdChpKTsNCi0gICAgbGVmdHggPSBwVGV4dC0+bV9MZWZ0Ow0KLSAgICBmb3IgKGkgPSBtX1RleHRMaXN0LkdldFNpemUoKSAtIDE7IGkgPj0gMDsgaSAtLSkgew0KLSAgICAgICAgQ1RleHRCb3gqIHBUZXh0ID0gKENUZXh0Qm94KiltX1RleHRMaXN0LkdldEF0KGkpOw0KLSAgICAgICAgaWYgKHBUZXh0LT5tX1RleHQgIT0gTCIgIikgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHBUZXh0ID0gKENUZXh0Qm94KiltX1RleHRMaXN0LkdldEF0KGkpOw0KLSAgICByaWdodHggPSBwVGV4dC0+bV9SaWdodDsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ1RleHRCYXNlTGluZTo6TWVyZ2VCb3hlcygpDQotew0KLSAgICBpbnQgaSA9IDA7DQotICAgIHdoaWxlICgxKSB7DQotICAgICAgICBpZiAoaSA+PSBtX1RleHRMaXN0LkdldFNpemUoKSAtIDEpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIENUZXh0Qm94KiBwVGhpc1RleHQgPSAoQ1RleHRCb3gqKW1fVGV4dExpc3QuR2V0QXQoaSk7DQotICAgICAgICBDVGV4dEJveCogcE5leHRUZXh0ID0gKENUZXh0Qm94KiltX1RleHRMaXN0LkdldEF0KGkgKyAxKTsNCi0gICAgICAgIEZYX0ZMT0FUIGR4ID0gcE5leHRUZXh0LT5tX0xlZnQgLSBwVGhpc1RleHQtPm1fUmlnaHQ7DQotICAgICAgICBGWF9GTE9BVCBzcGFjZXcgPSAocFRoaXNUZXh0LT5tX1NwYWNlV2lkdGggPT0gMC4wKSA/DQotICAgICAgICAgICAgICAgICAgICAgICAgICBwTmV4dFRleHQtPm1fU3BhY2VXaWR0aCA6IHBUaGlzVGV4dC0+bV9TcGFjZVdpZHRoOw0KLSAgICAgICAgaWYgKHNwYWNldyA+IDAuMCAmJiBkeCA8IHNwYWNldyAqIDIpIHsNCi0gICAgICAgICAgICBwVGhpc1RleHQtPm1fUmlnaHQgPSBwTmV4dFRleHQtPm1fUmlnaHQ7DQotICAgICAgICAgICAgaWYgKGR4ID4gc3BhY2V3ICogMS41KSB7DQotICAgICAgICAgICAgICAgIHBUaGlzVGV4dC0+bV9UZXh0ICs9IEwiICAiOw0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZHggPiBzcGFjZXcgLyAzKSB7DQotICAgICAgICAgICAgICAgIHBUaGlzVGV4dC0+bV9UZXh0ICs9IEwnICc7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHBUaGlzVGV4dC0+bV9UZXh0ICs9IHBOZXh0VGV4dC0+bV9UZXh0Ow0KLSAgICAgICAgICAgIHBUaGlzVGV4dC0+bV9TcGFjZVdpZHRoID0gcE5leHRUZXh0LT5tX1NwYWNlV2lkdGggPT0gMC4wID8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNldyA6IHBOZXh0VGV4dC0+bV9TcGFjZVdpZHRoOw0KLSAgICAgICAgICAgIG1fVGV4dExpc3QuUmVtb3ZlQXQoaSArIDEpOw0KLSAgICAgICAgICAgIGRlbGV0ZSBwTmV4dFRleHQ7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGkgKys7DQotICAgICAgICB9DQotICAgIH0NCi19DQotdm9pZCBDVGV4dEJhc2VMaW5lOjpXcml0ZU91dHB1dChDRlhfV2lkZVN0cmluZyYgc3RyLCBGWF9GTE9BVCBsZWZ0eCwgRlhfRkxPQVQgcGFnZXdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlUZXh0V2lkdGgpDQotew0KLSAgICBpbnQgbGFzdHBvcyA9IC0xOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fVGV4dExpc3QuR2V0U2l6ZSgpOyBpICsrKSB7DQotICAgICAgICBDVGV4dEJveCogcFRleHQgPSAoQ1RleHRCb3gqKW1fVGV4dExpc3QuR2V0QXQoaSk7DQotICAgICAgICBpbnQgeHBvczsNCi0gICAgICAgIGlmIChwVGV4dC0+bV9wQ29sdW1uKSB7DQotICAgICAgICAgICAgeHBvcyA9IChpbnQpKChwVGV4dC0+bV9wQ29sdW1uLT5tX0F2Z1BvcyAtIGxlZnR4KSAqIGlUZXh0V2lkdGggLyBwYWdld2lkdGggKyAwLjUpOw0KLSAgICAgICAgICAgIHhwb3MgLT0gcFRleHQtPm1fVGV4dC5HZXRMZW5ndGgoKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgeHBvcyA9IChpbnQpKChwVGV4dC0+bV9MZWZ0IC0gbGVmdHgpICogaVRleHRXaWR0aCAvIHBhZ2V3aWR0aCArIDAuNSk7DQotICAgICAgICB9DQotICAgICAgICBpZiAoeHBvcyA8PSBsYXN0cG9zKSB7DQotICAgICAgICAgICAgeHBvcyA9IGxhc3Rwb3MgKyAxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yIChpbnQgaiA9IGxhc3Rwb3MgKyAxOyBqIDwgeHBvczsgaiArKykgew0KLSAgICAgICAgICAgIHN0ciArPSAnICc7DQotICAgICAgICB9DQotICAgICAgICBDRlhfV2lkZVN0cmluZyBzU3JjKHBUZXh0LT5tX1RleHQpOw0KLSAgICAgICAgTm9ybWFsaXplU3RyaW5nKHNTcmMpOw0KLSAgICAgICAgc3RyICs9IHNTcmM7DQotICAgICAgICBzdHIgKz0gJyAnOw0KLSAgICAgICAgbGFzdHBvcyA9IHhwb3MgKyBwVGV4dC0+bV9UZXh0LkdldExlbmd0aCgpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1RleHRCYXNlTGluZTo6Q291bnRDaGFycyhpbnQmIGNvdW50LCBGWF9GTE9BVCYgd2lkdGgsIGludCYgbWluY2hhcnMpDQotew0KLSAgICBtaW5jaGFycyA9IDA7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9UZXh0TGlzdC5HZXRTaXplKCk7IGkgKyspIHsNCi0gICAgICAgIENUZXh0Qm94KiBwVGV4dCA9IChDVGV4dEJveCopbV9UZXh0TGlzdC5HZXRBdChpKTsNCi0gICAgICAgIGlmIChwVGV4dC0+bV9SaWdodCAtIHBUZXh0LT5tX0xlZnQgPCAwLjAwMikgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgY291bnQgKz0gcFRleHQtPm1fVGV4dC5HZXRMZW5ndGgoKTsNCi0gICAgICAgIHdpZHRoICs9IHBUZXh0LT5tX1JpZ2h0IC0gcFRleHQtPm1fTGVmdDsNCi0gICAgICAgIG1pbmNoYXJzICs9IHBUZXh0LT5tX1RleHQuR2V0TGVuZ3RoKCkgKyAxOw0KLSAgICB9DQotfQ0KLSNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1DQotc3RhdGljIHZvaWQgQ2hlY2tSb3RhdGUoQ1BERl9QYWdlJiBwYWdlLCBDRlhfRmxvYXRSZWN0JiBwYWdlX2Jib3gpDQotew0KLSAgICBpbnQgdG90YWxfY291bnQgPSAwLCByb3RhdGVkX2NvdW50WzNdID0gezAsIDAsIDB9Ow0KLSAgICBGWF9QT1NJVElPTiBwb3MgPSBwYWdlLkdldEZpcnN0T2JqZWN0UG9zaXRpb24oKTsNCi0gICAgd2hpbGUgKHBvcykgew0KLSAgICAgICAgQ1BERl9QYWdlT2JqZWN0KiBwT2JqID0gcGFnZS5HZXROZXh0T2JqZWN0KHBvcyk7DQotICAgICAgICBpZiAocE9iai0+bV9UeXBlICE9IFBERlBBR0VfVEVYVCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgdG90YWxfY291bnQgKys7DQotICAgICAgICBDUERGX1RleHRPYmplY3QqIHBUZXh0ID0gKENQREZfVGV4dE9iamVjdCopcE9iajsNCi0gICAgICAgIEZYX0ZMT0FUIGFuZ2xlID0gcFRleHQtPm1fVGV4dFN0YXRlLkdldEJhc2VsaW5lQW5nbGUoKTsNCi0gICAgICAgIGlmIChhbmdsZSA9PSAwLjApIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBkZWdyZWUgPSAoaW50KShhbmdsZSAqIDE4MCAvIFBJICsgMC41KTsNCi0gICAgICAgIGlmIChkZWdyZWUgJSA5MCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGRlZ3JlZSA8IDApIHsNCi0gICAgICAgICAgICBkZWdyZWUgKz0gMzYwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW50IGluZGV4ID0gZGVncmVlIC8gOTAgJSAzIC0gMTsNCi0gICAgICAgIGlmIChpbmRleCA8IDApIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJvdGF0ZWRfY291bnRbaW5kZXhdICsrOw0KLSAgICB9DQotICAgIGlmICh0b3RhbF9jb3VudCA9PSAwKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXg7DQotICAgIGlmIChyb3RhdGVkX2NvdW50WzBdID4gdG90YWxfY291bnQgKiAyIC8gMykgew0KLSAgICAgICAgbWF0cml4LlNldCgwLCAtMSwgMSwgMCwgMCwgcGFnZS5HZXRQYWdlSGVpZ2h0KCkpOw0KLSAgICB9IGVsc2UgaWYgKHJvdGF0ZWRfY291bnRbMV0gPiB0b3RhbF9jb3VudCAqIDIgLyAzKSB7DQotICAgICAgICBtYXRyaXguU2V0KC0xLCAwLCAwLCAtMSwgcGFnZS5HZXRQYWdlV2lkdGgoKSwgcGFnZS5HZXRQYWdlSGVpZ2h0KCkpOw0KLSAgICB9IGVsc2UgaWYgKHJvdGF0ZWRfY291bnRbMl0gPiB0b3RhbF9jb3VudCAqIDIgLyAzKSB7DQotICAgICAgICBtYXRyaXguU2V0KDAsIDEsIC0xLCAwLCBwYWdlLkdldFBhZ2VXaWR0aCgpLCAwKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBwYWdlLlRyYW5zZm9ybShtYXRyaXgpOw0KLSAgICBwYWdlX2Jib3guVHJhbnNmb3JtKCZtYXRyaXgpOw0KLX0NCi12b2lkIFBERl9HZXRQYWdlVGV4dF9Vbmljb2RlKENGWF9XaWRlU3RyaW5nQXJyYXkmIGxpbmVzLCBDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0RpY3Rpb25hcnkqIHBQYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlNaW5XaWR0aCwgRlhfRFdPUkQgZmxhZ3MpDQotew0KLSAgICBsaW5lcy5SZW1vdmVBbGwoKTsNCi0gICAgaWYgKHBQYWdlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDUERGX1BhZ2UgcGFnZTsNCi0gICAgcGFnZS5Mb2FkKHBEb2MsIHBQYWdlKTsNCi0gICAgQ1BERl9QYXJzZU9wdGlvbnMgb3B0aW9uczsNCi0gICAgb3B0aW9ucy5tX2JUZXh0T25seSA9IFRSVUU7DQotICAgIG9wdGlvbnMubV9iU2VwYXJhdGVGb3JtID0gRkFMU0U7DQotICAgIHBhZ2UuUGFyc2VDb250ZW50KCZvcHRpb25zKTsNCi0gICAgQ0ZYX0Zsb2F0UmVjdCBwYWdlX2Jib3ggPSBwYWdlLkdldFBhZ2VCQm94KCk7DQotICAgIGlmIChmbGFncyAmIFBERjJUWFRfQVVUT19ST1RBVEUpIHsNCi0gICAgICAgIENoZWNrUm90YXRlKHBhZ2UsIHBhZ2VfYmJveCk7DQotICAgIH0NCi0gICAgQ1RleHRQYWdlIHRleHRzOw0KLSAgICB0ZXh0cy5tX2JBdXRvV2lkdGggPSBmbGFncyAmIFBERjJUWFRfQVVUT19XSURUSDsNCi0gICAgdGV4dHMubV9iS2VlcENvbHVtbiA9IGZsYWdzICYgUERGMlRYVF9LRUVQX0NPTFVNTjsNCi0gICAgdGV4dHMubV9iQnJlYWtTcGFjZSA9IFRSVUU7DQotICAgIEZYX1BPU0lUSU9OIHBvcyA9IHBhZ2UuR2V0Rmlyc3RPYmplY3RQb3NpdGlvbigpOw0KLSAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICBDUERGX1BhZ2VPYmplY3QqIHBPYmplY3QgPSBwYWdlLkdldE5leHRPYmplY3QocG9zKTsNCi0gICAgICAgIGlmICghKGZsYWdzICYgUERGMlRYVF9JTkNMVURFX0lOVklTSUJMRSkpIHsNCi0gICAgICAgICAgICBDRlhfRmxvYXRSZWN0IHJlY3QocE9iamVjdC0+bV9MZWZ0LCBwT2JqZWN0LT5tX0JvdHRvbSwgcE9iamVjdC0+bV9SaWdodCwgcE9iamVjdC0+bV9Ub3ApOw0KLSAgICAgICAgICAgIGlmICghcGFnZV9iYm94LkNvbnRhaW5zKHJlY3QpKSB7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHRleHRzLlByb2Nlc3NPYmplY3QocE9iamVjdCk7DQotICAgIH0NCi0gICAgdGV4dHMuV3JpdGVPdXRwdXQobGluZXMsIGlNaW5XaWR0aCk7DQotfQ0KLXZvaWQgUERGX0dldFBhZ2VUZXh0KENGWF9CeXRlU3RyaW5nQXJyYXkmIGxpbmVzLCBDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0RpY3Rpb25hcnkqIHBQYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgIGludCBpTWluV2lkdGgsIEZYX0RXT1JEIGZsYWdzKQ0KLXsNCi0gICAgbGluZXMuUmVtb3ZlQWxsKCk7DQotICAgIENGWF9XaWRlU3RyaW5nQXJyYXkgd2xpbmVzOw0KLSAgICBQREZfR2V0UGFnZVRleHRfVW5pY29kZSh3bGluZXMsIHBEb2MsIHBQYWdlLCBpTWluV2lkdGgsIGZsYWdzKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3bGluZXMuR2V0U2l6ZSgpOyBpICsrKSB7DQotICAgICAgICBDRlhfV2lkZVN0cmluZyB3c3RyID0gd2xpbmVzW2ldOw0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc3RyOw0KLSAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCB3c3RyLkdldExlbmd0aCgpOyBjICsrKSB7DQotICAgICAgICAgICAgc3RyICs9IENoYXJGcm9tVW5pY29kZUFsdCh3c3RyW2NdLCBGWFNZU19HZXRBQ1AoKSwgIj8iKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGxpbmVzLkFkZChzdHIpOw0KLSAgICB9DQotfQ0KLSNlbmRpZg0KLWV4dGVybiB2b2lkIF9QREZfR2V0VGV4dFN0cmVhbV9Vbmljb2RlKENGWF9XaWRlVGV4dEJ1ZiYgYnVmZmVyLCBDUERGX1BhZ2VPYmplY3RzKiBwUGFnZSwgRlhfQk9PTCBiVXNlTEYsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX1B0ckFycmF5KiBwT2JqQXJyYXkpOw0KLXZvaWQgUERGX0dldFRleHRTdHJlYW1fVW5pY29kZShDRlhfV2lkZVRleHRCdWYmIGJ1ZmZlciwgQ1BERl9Eb2N1bWVudCogcERvYywgQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZSwgRlhfRFdPUkQgZmxhZ3MpDQotew0KLSAgICBidWZmZXIuRXN0aW1hdGVTaXplKDAsIDEwMjQwKTsNCi0gICAgQ1BERl9QYWdlIHBhZ2U7DQotICAgIHBhZ2UuTG9hZChwRG9jLCBwUGFnZSk7DQotICAgIENQREZfUGFyc2VPcHRpb25zIG9wdGlvbnM7DQotICAgIG9wdGlvbnMubV9iVGV4dE9ubHkgPSBUUlVFOw0KLSAgICBvcHRpb25zLm1fYlNlcGFyYXRlRm9ybSA9IEZBTFNFOw0KLSAgICBwYWdlLlBhcnNlQ29udGVudCgmb3B0aW9ucyk7DQotICAgIF9QREZfR2V0VGV4dFN0cmVhbV9Vbmljb2RlKGJ1ZmZlciwgJnBhZ2UsIFRSVUUsIE5VTEwpOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2VvYmouaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZ0ZXh0L2ZwZGZfdGV4dC5oIgorI2luY2x1ZGUgInR4dHByb2MuaCIKKyNpbmNsdWRlICJ0ZXh0X2ludC5oIgorI2lmICFkZWZpbmVkKF9GUERGQVBJX01JTklfKSB8fCBkZWZpbmVkKF9GWENPUkVfRkVBVFVSRV9BTExfKQorZXh0ZXJuIEZYX0xQQ1NUUiBGQ1NfR2V0QWx0U3RyKEZYX1dDSEFSKTsKK0NGWF9CeXRlU3RyaW5nIENoYXJGcm9tVW5pY29kZUFsdChGWF9XQ0hBUiB1bmljb2RlLCBpbnQgZGVzdGNwLCBGWF9MUENTVFIgZGVmY2hhcikKK3sKKyAgICBpZiAoZGVzdGNwID09IDApIHsKKyAgICAgICAgaWYgKHVuaWNvZGUgPCAweDgwKSB7CisgICAgICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKGNoYXIpdW5pY29kZSk7CisgICAgICAgIH0KKyAgICAgICAgRlhfTFBDU1RSIGFsdHN0ciA9IEZDU19HZXRBbHRTdHIodW5pY29kZSk7CisgICAgICAgIGlmIChhbHRzdHIpIHsKKyAgICAgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZyhhbHRzdHIsIC0xKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoZGVmY2hhciwgLTEpOworICAgIH0KKyAgICBGWF9CT09MIGJEZWYgPSBGQUxTRTsKKyAgICBjaGFyIGJ1ZlsxMF07CisgICAgaW50IHJldCA9IEZYU1lTX1dpZGVDaGFyVG9NdWx0aUJ5dGUoZGVzdGNwLCAwLCAod2NoYXJfdCopJnVuaWNvZGUsIDEsIGJ1ZiwgMTAsIE5VTEwsICZiRGVmKTsKKyAgICBpZiAocmV0ICYmICFiRGVmKSB7CisgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZyhidWYsIHJldCk7CisgICAgfQorICAgIEZYX0xQQ1NUUiBhbHRzdHIgPSBGQ1NfR2V0QWx0U3RyKHVuaWNvZGUpOworICAgIGlmIChhbHRzdHIpIHsKKyAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKGFsdHN0ciwgLTEpOworICAgIH0KKyAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoZGVmY2hhciwgLTEpOworfQorQ1RleHRQYWdlOjpDVGV4dFBhZ2UoKQoreworfQorQ1RleHRQYWdlOjp+Q1RleHRQYWdlKCkKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbV9CYXNlTGluZXMuR2V0U2l6ZSgpOyBpICsrKSB7CisgICAgICAgIENUZXh0QmFzZUxpbmUqIHBCYXNlTGluZSA9IChDVGV4dEJhc2VMaW5lKiltX0Jhc2VMaW5lcy5HZXRBdChpKTsKKyAgICAgICAgZGVsZXRlIHBCYXNlTGluZTsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IG1fVGV4dENvbHVtbnMuR2V0U2l6ZSgpOyBpICsrKSB7CisgICAgICAgIENUZXh0Q29sdW1uKiBwVGV4dENvbHVtbiA9IChDVGV4dENvbHVtbiopbV9UZXh0Q29sdW1ucy5HZXRBdChpKTsKKyAgICAgICAgZGVsZXRlIHBUZXh0Q29sdW1uOworICAgIH0KK30KK3ZvaWQgQ1RleHRQYWdlOjpQcm9jZXNzT2JqZWN0KENQREZfUGFnZU9iamVjdCogcE9iamVjdCkKK3sKKyAgICBpZiAocE9iamVjdC0+bV9UeXBlICE9IFBERlBBR0VfVEVYVCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfVGV4dE9iamVjdCogcFRleHQgPSAoQ1BERl9UZXh0T2JqZWN0KilwT2JqZWN0OworICAgIENQREZfRm9udCogcEZvbnQgPSBwVGV4dC0+bV9UZXh0U3RhdGUuR2V0Rm9udCgpOworICAgIGludCBjb3VudCA9IHBUZXh0LT5Db3VudEl0ZW1zKCk7CisgICAgRlhfRkxPQVQqIHBQb3NBcnJheSA9IEZYX0FsbG9jKEZYX0ZMT0FULCBjb3VudCAqIDIpOworICAgIGlmIChwUG9zQXJyYXkpIHsKKyAgICAgICAgcFRleHQtPkNhbGNDaGFyUG9zKHBQb3NBcnJheSk7CisgICAgfQorICAgIEZYX0ZMT0FUIGZvbnRzaXplX2ggPSBwVGV4dC0+bV9UZXh0U3RhdGUuR2V0Rm9udFNpemVIKCk7CisgICAgRlhfRkxPQVQgZm9udHNpemVfdiA9IHBUZXh0LT5tX1RleHRTdGF0ZS5HZXRGb250U2l6ZVYoKTsKKyAgICBGWF9EV09SRCBzcGFjZV9jaGFyY29kZSA9IHBGb250LT5DaGFyQ29kZUZyb21Vbmljb2RlKCcgJyk7CisgICAgRlhfRkxPQVQgc3BhY2V3ID0gMDsKKyAgICBpZiAoc3BhY2VfY2hhcmNvZGUgIT0gLTEpIHsKKyAgICAgICAgc3BhY2V3ID0gZm9udHNpemVfaCAqIHBGb250LT5HZXRDaGFyV2lkdGhGKHNwYWNlX2NoYXJjb2RlKSAvIDEwMDA7CisgICAgfQorICAgIGlmIChzcGFjZXcgPT0gMCkgeworICAgICAgICBzcGFjZXcgPSBmb250c2l6ZV9oIC8gNDsKKyAgICB9CisgICAgaWYgKHBUZXh0LT5tX1RleHRTdGF0ZS5HZXRCYXNlbGluZUFuZ2xlKCkgIT0gMCkgeworICAgICAgICBpbnQgY2MgPSAwOworICAgICAgICBDRlhfQWZmaW5lTWF0cml4IG1hdHJpeDsKKyAgICAgICAgcFRleHQtPkdldFRleHRNYXRyaXgoJm1hdHJpeCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcFRleHQtPm1fbkNoYXJzOyBpICsrKSB7CisgICAgICAgICAgICBGWF9EV09SRCBjaGFyY29kZSA9IHBUZXh0LT5tX25DaGFycyA9PSAxID8gKEZYX0RXT1JEKShGWF9VSU5UUFRSKXBUZXh0LT5tX3BDaGFyQ29kZXMgOiBwVGV4dC0+bV9wQ2hhckNvZGVzW2ldOworICAgICAgICAgICAgaWYgKGNoYXJjb2RlID09IChGWF9EV09SRCkgLSAxKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9SRUNUIGNoYXJfYm94OworICAgICAgICAgICAgcEZvbnQtPkdldENoYXJCQm94KGNoYXJjb2RlLCBjaGFyX2JveCk7CisgICAgICAgICAgICBGWF9GTE9BVCBjaGFyX2xlZnQgPSBwUG9zQXJyYXkgPyBwUG9zQXJyYXlbY2MgKiAyXSA6IGNoYXJfYm94LmxlZnQgKiBwVGV4dC0+bV9UZXh0U3RhdGUuR2V0Rm9udFNpemUoKSAvIDEwMDA7CisgICAgICAgICAgICBGWF9GTE9BVCBjaGFyX3JpZ2h0ID0gcFBvc0FycmF5ID8gcFBvc0FycmF5W2NjICogMiArIDFdIDogY2hhcl9ib3gucmlnaHQgKiBwVGV4dC0+bV9UZXh0U3RhdGUuR2V0Rm9udFNpemUoKSAvIDEwMDA7CisgICAgICAgICAgICBGWF9GTE9BVCBjaGFyX3RvcCA9IGNoYXJfYm94LnRvcCAqIHBUZXh0LT5tX1RleHRTdGF0ZS5HZXRGb250U2l6ZSgpIC8gMTAwMDsKKyAgICAgICAgICAgIEZYX0ZMT0FUIGNoYXJfYm90dG9tID0gY2hhcl9ib3guYm90dG9tICogcFRleHQtPm1fVGV4dFN0YXRlLkdldEZvbnRTaXplKCkgLyAxMDAwOworICAgICAgICAgICAgY2MgKys7CisgICAgICAgICAgICBGWF9GTE9BVCBjaGFyX29yaWd4LCBjaGFyX29yaWd5OworICAgICAgICAgICAgbWF0cml4LlRyYW5zZm9ybShjaGFyX2xlZnQsIDAsIGNoYXJfb3JpZ3gsIGNoYXJfb3JpZ3kpOworICAgICAgICAgICAgbWF0cml4LlRyYW5zZm9ybVJlY3QoY2hhcl9sZWZ0LCBjaGFyX3JpZ2h0LCBjaGFyX3RvcCwgY2hhcl9ib3R0b20pOworICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc3RyOworICAgICAgICAgICAgcEZvbnQtPkFwcGVuZENoYXIoc3RyLCBjaGFyY29kZSk7CisgICAgICAgICAgICBJbnNlcnRUZXh0Qm94KE5VTEwsIGNoYXJfb3JpZ3ksIGNoYXJfbGVmdCwgY2hhcl9yaWdodCwgY2hhcl90b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfYm90dG9tLCBzcGFjZXcsIGZvbnRzaXplX3YsIHN0ciwgcEZvbnQpOworICAgICAgICB9CisgICAgICAgIGlmIChwUG9zQXJyYXkpIHsKKyAgICAgICAgICAgIEZYX0ZyZWUocFBvc0FycmF5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX0ZMT0FUIHJhdGlvX2ggPSBmb250c2l6ZV9oIC8gcFRleHQtPm1fVGV4dFN0YXRlLkdldEZvbnRTaXplKCk7CisgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IGNvdW50ICogMjsgaWkgKyspIHsKKyAgICAgICAgcFBvc0FycmF5W2lpXSAqPSByYXRpb19oOworICAgIH0KKyAgICBGWF9GTE9BVCBiYXNlbGluZSA9IHBUZXh0LT5tX1Bvc1k7CisgICAgQ1RleHRCYXNlTGluZSogcEJhc2VMaW5lID0gTlVMTDsKKyAgICBGWF9GTE9BVCB0b3B5ID0gcFRleHQtPm1fVG9wOworICAgIEZYX0ZMT0FUIGJvdHRvbXkgPSBwVGV4dC0+bV9Cb3R0b207CisgICAgRlhfRkxPQVQgbGVmdHggPSBwVGV4dC0+bV9MZWZ0OworICAgIGludCBjYyA9IDA7CisgICAgQ0ZYX0J5dGVTdHJpbmcgc2VnbWVudDsKKyAgICBpbnQgc3BhY2VfY291bnQgPSAwOworICAgIEZYX0ZMT0FUIGxhc3RfbGVmdCA9IDAsIGxhc3RfcmlnaHQgPSAwLCBzZWdtZW50X2xlZnQgPSAwLCBzZWdtZW50X3JpZ2h0ID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBUZXh0LT5tX25DaGFyczsgaSArKykgeworICAgICAgICBGWF9EV09SRCBjaGFyY29kZSA9IHBUZXh0LT5tX25DaGFycyA9PSAxID8gKEZYX0RXT1JEKShGWF9VSU5UUFRSKXBUZXh0LT5tX3BDaGFyQ29kZXMgOiBwVGV4dC0+bV9wQ2hhckNvZGVzW2ldOworICAgICAgICBpZiAoY2hhcmNvZGUgPT0gKEZYX0RXT1JEKSAtIDEpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEZYX0ZMT0FUIGNoYXJfbGVmdCA9IHBQb3NBcnJheVtjYyAqIDJdOworICAgICAgICBGWF9GTE9BVCBjaGFyX3JpZ2h0ID0gcFBvc0FycmF5W2NjICogMiArIDFdOworICAgICAgICBjYyArKzsKKyAgICAgICAgaWYgKGNoYXJfbGVmdCA8IGxhc3RfbGVmdCB8fCAoY2hhcl9sZWZ0IC0gbGFzdF9yaWdodCkgPiBzcGFjZXcgLyAyKSB7CisgICAgICAgICAgICBwQmFzZUxpbmUgPSBJbnNlcnRUZXh0Qm94KHBCYXNlTGluZSwgYmFzZWxpbmUsIGxlZnR4ICsgc2VnbWVudF9sZWZ0LCBsZWZ0eCArIHNlZ21lbnRfcmlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcHksIGJvdHRvbXksIHNwYWNldywgZm9udHNpemVfdiwgc2VnbWVudCwgcEZvbnQpOworICAgICAgICAgICAgc2VnbWVudF9sZWZ0ID0gY2hhcl9sZWZ0OworICAgICAgICAgICAgc2VnbWVudCA9ICIiOworICAgICAgICB9CisgICAgICAgIENGWF9XaWRlU3RyaW5nIHdDaCA9IHBUZXh0LT5HZXRGb250KCktPlVuaWNvZGVGcm9tQ2hhckNvZGUoY2hhcmNvZGUpOworICAgICAgICBGWF9EV09SRCBjaCA9IHdDaC5HZXRMZW5ndGgoKSA+IDAgPyB3Q2guR2V0QXQoMCkgOiBjaGFyY29kZTsKKyAgICAgICAgaWYgKHNwYWNlX2NvdW50ID4gMSkgeworICAgICAgICAgICAgcEJhc2VMaW5lID0gSW5zZXJ0VGV4dEJveChwQmFzZUxpbmUsIGJhc2VsaW5lLCBsZWZ0eCArIHNlZ21lbnRfbGVmdCwgbGVmdHggKyBzZWdtZW50X3JpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3B5LCBib3R0b215LCBzcGFjZXcsIGZvbnRzaXplX3YsIHNlZ21lbnQsIHBGb250KTsKKyAgICAgICAgICAgIHNlZ21lbnQgPSAiIjsKKyAgICAgICAgfSBlbHNlIGlmIChzcGFjZV9jb3VudCA9PSAxKSB7CisgICAgICAgICAgICBwRm9udC0+QXBwZW5kQ2hhcihzZWdtZW50LCAnICcpOworICAgICAgICB9CisgICAgICAgIGlmIChzZWdtZW50LkdldExlbmd0aCgpID09IDApIHsKKyAgICAgICAgICAgIHNlZ21lbnRfbGVmdCA9IGNoYXJfbGVmdDsKKyAgICAgICAgfQorICAgICAgICBzZWdtZW50X3JpZ2h0ID0gY2hhcl9yaWdodDsKKyAgICAgICAgcEZvbnQtPkFwcGVuZENoYXIoc2VnbWVudCwgY2hhcmNvZGUpOworICAgICAgICBzcGFjZV9jb3VudCA9IDA7CisgICAgICAgIGxhc3RfbGVmdCA9IGNoYXJfbGVmdDsKKyAgICAgICAgbGFzdF9yaWdodCA9IGNoYXJfcmlnaHQ7CisgICAgfQorICAgIGlmIChzZWdtZW50LkdldExlbmd0aCgpKQorICAgICAgICBwQmFzZUxpbmUgPSBJbnNlcnRUZXh0Qm94KHBCYXNlTGluZSwgYmFzZWxpbmUsIGxlZnR4ICsgc2VnbWVudF9sZWZ0LCBsZWZ0eCArIHNlZ21lbnRfcmlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9weSwgYm90dG9teSwgc3BhY2V3LCBmb250c2l6ZV92LCBzZWdtZW50LCBwRm9udCk7CisgICAgRlhfRnJlZShwUG9zQXJyYXkpOworfQorc3RhdGljIHZvaWQgQ29udmVydFBERlN0cmluZyhDRlhfQnl0ZVN0cmluZyYgcmVzdWx0LCBDRlhfQnl0ZVN0cmluZyYgc3JjLCBDUERGX0ZvbnQqIHBGb250KTsKK0NUZXh0QmFzZUxpbmUqIENUZXh0UGFnZTo6SW5zZXJ0VGV4dEJveChDVGV4dEJhc2VMaW5lKiBwQmFzZUxpbmUsIEZYX0ZMT0FUIGJhc2V5LCBGWF9GTE9BVCBsZWZ0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCByaWdodHgsIEZYX0ZMT0FUIHRvcHksIEZYX0ZMT0FUIGJvdHRvbXksIEZYX0ZMT0FUIHNwYWNldywgRlhfRkxPQVQgZm9udHNpemVfdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyYgc3RyLCBDUERGX0ZvbnQqIHBGb250KQoreworICAgIGlmIChzdHIuR2V0TGVuZ3RoKCkgPT0gMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHBCYXNlTGluZSA9PSBOVUxMKSB7CisgICAgICAgIGludCBpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9CYXNlTGluZXMuR2V0U2l6ZSgpOyBpICsrKSB7CisgICAgICAgICAgICBDVGV4dEJhc2VMaW5lKiBwRXhpc3RMaW5lID0gKENUZXh0QmFzZUxpbmUqKW1fQmFzZUxpbmVzLkdldEF0KGkpOworICAgICAgICAgICAgaWYgKHBFeGlzdExpbmUtPm1fQmFzZUxpbmUgPT0gYmFzZXkpIHsKKyAgICAgICAgICAgICAgICBwQmFzZUxpbmUgPSBwRXhpc3RMaW5lOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBFeGlzdExpbmUtPm1fQmFzZUxpbmUgPCBiYXNleSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChwQmFzZUxpbmUgPT0gTlVMTCkgeworICAgICAgICAgICAgcEJhc2VMaW5lID0gRlhfTkVXIENUZXh0QmFzZUxpbmU7CisgICAgICAgICAgICBpZiAoTlVMTCA9PSBwQmFzZUxpbmUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBCYXNlTGluZS0+bV9CYXNlTGluZSA9IGJhc2V5OworICAgICAgICAgICAgbV9CYXNlTGluZXMuSW5zZXJ0QXQoaSwgcEJhc2VMaW5lKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBDRlhfV2lkZVN0cmluZyB0ZXh0OworICAgIEZYX0xQQ1NUUiBwU3RyID0gc3RyOworICAgIGludCBsZW4gPSBzdHIuR2V0TGVuZ3RoKCksIG9mZnNldCA9IDA7CisgICAgd2hpbGUgKG9mZnNldCA8IGxlbikgeworICAgICAgICBGWF9EV09SRCBjaCA9IHBGb250LT5HZXROZXh0Q2hhcihwU3RyLCBvZmZzZXQpOworICAgICAgICBDRlhfV2lkZVN0cmluZyB1bmljb2RlX3N0ciA9IHBGb250LT5Vbmljb2RlRnJvbUNoYXJDb2RlKGNoKTsKKyAgICAgICAgdGV4dCArPSB1bmljb2RlX3N0cjsKKyAgICB9CisgICAgcEJhc2VMaW5lLT5JbnNlcnRUZXh0Qm94KGxlZnR4LCByaWdodHgsIHRvcHksIGJvdHRvbXksIHNwYWNldywgZm9udHNpemVfdiwgdGV4dCk7CisgICAgcmV0dXJuIHBCYXNlTGluZTsKK30KK3ZvaWQgQ1RleHRQYWdlOjpXcml0ZU91dHB1dChDRlhfV2lkZVN0cmluZ0FycmF5JiBsaW5lcywgaW50IGlNaW5XaWR0aCkKK3sKKyAgICBGWF9GTE9BVCBsYXN0aGVpZ2h0ID0gLTE7CisgICAgRlhfRkxPQVQgbGFzdGJhc2VsaW5lID0gLTE7CisgICAgRlhfRkxPQVQgTWluTGVmdFggPSAxMDAwMDAwOworICAgIEZYX0ZMT0FUIE1heFJpZ2h0WCA9IDA7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IG1fQmFzZUxpbmVzLkdldFNpemUoKTsgaSArKykgeworICAgICAgICBDVGV4dEJhc2VMaW5lKiBwQmFzZUxpbmUgPSAoQ1RleHRCYXNlTGluZSopbV9CYXNlTGluZXMuR2V0QXQoaSk7CisgICAgICAgIEZYX0ZMT0FUIGxlZnR4LCByaWdodHg7CisgICAgICAgIGlmIChwQmFzZUxpbmUtPkdldFdpZHRoKGxlZnR4LCByaWdodHgpKSB7CisgICAgICAgICAgICBpZiAobGVmdHggPCBNaW5MZWZ0WCkgeworICAgICAgICAgICAgICAgIE1pbkxlZnRYID0gbGVmdHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmlnaHR4ID4gTWF4UmlnaHRYKSB7CisgICAgICAgICAgICAgICAgTWF4UmlnaHRYID0gcmlnaHR4OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBtX0Jhc2VMaW5lcy5HZXRTaXplKCk7IGkgKyspIHsKKyAgICAgICAgQ1RleHRCYXNlTGluZSogcEJhc2VMaW5lID0gKENUZXh0QmFzZUxpbmUqKW1fQmFzZUxpbmVzLkdldEF0KGkpOworICAgICAgICBwQmFzZUxpbmUtPk1lcmdlQm94ZXMoKTsKKyAgICB9CisgICAgZm9yIChpID0gMTsgaSA8IG1fQmFzZUxpbmVzLkdldFNpemUoKTsgaSArKykgeworICAgICAgICBDVGV4dEJhc2VMaW5lKiBwQmFzZUxpbmUgPSAoQ1RleHRCYXNlTGluZSopbV9CYXNlTGluZXMuR2V0QXQoaSk7CisgICAgICAgIENUZXh0QmFzZUxpbmUqIHBQcmV2TGluZSA9IChDVGV4dEJhc2VMaW5lKiltX0Jhc2VMaW5lcy5HZXRBdChpIC0gMSk7CisgICAgICAgIGlmIChwQmFzZUxpbmUtPkNhbk1lcmdlKHBQcmV2TGluZSkpIHsKKyAgICAgICAgICAgIHBQcmV2TGluZS0+TWVyZ2UocEJhc2VMaW5lKTsKKyAgICAgICAgICAgIGRlbGV0ZSBwQmFzZUxpbmU7CisgICAgICAgICAgICBtX0Jhc2VMaW5lcy5SZW1vdmVBdChpKTsKKyAgICAgICAgICAgIGkgLS07CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1fYkF1dG9XaWR0aCkgeworICAgICAgICBpbnQqIHdpZHRocyA9IEZYX0FsbG9jKGludCwgbV9CYXNlTGluZXMuR2V0U2l6ZSgpKTsKKyAgICAgICAgaWYgKHdpZHRocykgeworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1fQmFzZUxpbmVzLkdldFNpemUoKTsgaSArKykgeworICAgICAgICAgICAgICAgIHdpZHRoc1tpXSA9IDA7CisgICAgICAgICAgICAgICAgQ1RleHRCYXNlTGluZSogcEJhc2VMaW5lID0gKENUZXh0QmFzZUxpbmUqKW1fQmFzZUxpbmVzLkdldEF0KGkpOworICAgICAgICAgICAgICAgIGludCBUb3RhbENoYXJzID0gMDsKKyAgICAgICAgICAgICAgICBGWF9GTE9BVCBUb3RhbFdpZHRoID0gMDsKKyAgICAgICAgICAgICAgICBpbnQgbWluY2hhcnM7CisgICAgICAgICAgICAgICAgcEJhc2VMaW5lLT5Db3VudENoYXJzKFRvdGFsQ2hhcnMsIFRvdGFsV2lkdGgsIG1pbmNoYXJzKTsKKyAgICAgICAgICAgICAgICBpZiAoVG90YWxDaGFycykgeworICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCBjaGFyd2lkdGggPSBUb3RhbFdpZHRoIC8gVG90YWxDaGFyczsKKyAgICAgICAgICAgICAgICAgICAgd2lkdGhzW2ldID0gKGludCkoKE1heFJpZ2h0WCAtIE1pbkxlZnRYKSAvIGNoYXJ3aWR0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh3aWR0aHNbaV0gPiAxMDAwKSB7CisgICAgICAgICAgICAgICAgICAgIHdpZHRoc1tpXSA9IDEwMDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh3aWR0aHNbaV0gPCBtaW5jaGFycykgeworICAgICAgICAgICAgICAgICAgICB3aWR0aHNbaV0gPSBtaW5jaGFyczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgQXZnV2lkdGggPSAwLCB3aWR0aGNvdW50ID0gMDsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtX0Jhc2VMaW5lcy5HZXRTaXplKCk7IGkgKyspCisgICAgICAgICAgICAgICAgaWYgKHdpZHRoc1tpXSkgeworICAgICAgICAgICAgICAgICAgICBBdmdXaWR0aCArPSB3aWR0aHNbaV07CisgICAgICAgICAgICAgICAgICAgIHdpZHRoY291bnQgKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgQXZnV2lkdGggPSBpbnQoKEZYX0ZMT0FUKUF2Z1dpZHRoIC8gd2lkdGhjb3VudCArIDAuNSk7CisgICAgICAgICAgICBpbnQgTWF4V2lkdGggPSAwOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1fQmFzZUxpbmVzLkdldFNpemUoKTsgaSArKykKKyAgICAgICAgICAgICAgICBpZiAoTWF4V2lkdGggPCB3aWR0aHNbaV0pIHsKKyAgICAgICAgICAgICAgICAgICAgTWF4V2lkdGggPSB3aWR0aHNbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKE1heFdpZHRoID4gQXZnV2lkdGggKiA2IC8gNSkgeworICAgICAgICAgICAgICAgIE1heFdpZHRoID0gQXZnV2lkdGggKiA2IC8gNTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZYX0ZyZWUod2lkdGhzKTsKKyAgICAgICAgICAgIGlmIChpTWluV2lkdGggPCBNYXhXaWR0aCkgeworICAgICAgICAgICAgICAgIGlNaW5XaWR0aCA9IE1heFdpZHRoOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBtX0Jhc2VMaW5lcy5HZXRTaXplKCk7IGkgKyspIHsKKyAgICAgICAgQ1RleHRCYXNlTGluZSogcEJhc2VMaW5lID0gKENUZXh0QmFzZUxpbmUqKW1fQmFzZUxpbmVzLkdldEF0KGkpOworICAgICAgICBwQmFzZUxpbmUtPk1lcmdlQm94ZXMoKTsKKyAgICB9CisgICAgaWYgKG1fYktlZXBDb2x1bW4pIHsKKyAgICAgICAgRmluZENvbHVtbnMoKTsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IG1fQmFzZUxpbmVzLkdldFNpemUoKTsgaSArKykgeworICAgICAgICBDVGV4dEJhc2VMaW5lKiBwQmFzZUxpbmUgPSAoQ1RleHRCYXNlTGluZSopbV9CYXNlTGluZXMuR2V0QXQoaSk7CisgICAgICAgIGlmIChsYXN0aGVpZ2h0ID49IDApIHsKKyAgICAgICAgICAgIEZYX0ZMT0FUIGR5ID0gbGFzdGJhc2VsaW5lIC0gcEJhc2VMaW5lLT5tX0Jhc2VMaW5lOworICAgICAgICAgICAgaWYgKGR5ID49IChwQmFzZUxpbmUtPm1fTWF4Rm9udFNpemVWKSAqIDEuNSB8fCBkeSA+PSBsYXN0aGVpZ2h0ICogMS41KSB7CisgICAgICAgICAgICAgICAgbGluZXMuQWRkKEwiIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbGFzdGhlaWdodCA9IHBCYXNlTGluZS0+bV9NYXhGb250U2l6ZVY7CisgICAgICAgIGxhc3RiYXNlbGluZSA9IHBCYXNlTGluZS0+bV9CYXNlTGluZTsKKyAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgc3RyOworICAgICAgICBwQmFzZUxpbmUtPldyaXRlT3V0cHV0KHN0ciwgTWluTGVmdFgsIE1heFJpZ2h0WCAtIE1pbkxlZnRYLCBpTWluV2lkdGgpOworICAgICAgICBsaW5lcy5BZGQoc3RyKTsKKyAgICB9Cit9Cit2b2lkIE5vcm1hbGl6ZUNvbXBvc2l0ZUNoYXIoRlhfV0NIQVIgd0NoYXIsIENGWF9XaWRlU3RyaW5nJiBzRGVzdCkKK3sKKyAgICB3Q2hhciA9IEZYX0dldE1pcnJvckNoYXIod0NoYXIsIFRSVUUsIEZBTFNFKTsKKyAgICBGWF9MUFdTVFIgcERzdCA9IE5VTEw7CisgICAgRlhfU1RSU0laRSBuQ291bnQgPSBGWF9Vbmljb2RlX0dldE5vcm1hbGl6YXRpb24od0NoYXIsIHBEc3QpOworICAgIGlmIChuQ291bnQgPCAxICkgeworICAgICAgICBzRGVzdCArPSB3Q2hhcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwRHN0ID0gbmV3IEZYX1dDSEFSW25Db3VudF07CisgICAgRlhfVW5pY29kZV9HZXROb3JtYWxpemF0aW9uKHdDaGFyLCBwRHN0KTsKKyAgICBmb3IgKGludCBuSW5kZXggPSAwOyBuSW5kZXggPCBuQ291bnQ7IG5JbmRleCsrKSB7CisgICAgICAgIHNEZXN0ICs9IHBEc3RbbkluZGV4XTsKKyAgICB9CisgICAgZGVsZXRlW10gcERzdDsKK30KK3ZvaWQgTm9ybWFsaXplU3RyaW5nKENGWF9XaWRlU3RyaW5nJiBzdHIpCit7CisgICAgaWYgKHN0ci5HZXRMZW5ndGgoKSA8PSAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZYX1dpZGVTdHJpbmcgc0J1ZmZlcjsKKyAgICBJRlhfQmlkaUNoYXIqIEJpZGlDaGFyID0gSUZYX0JpZGlDaGFyOjpDcmVhdGUoKTsKKyAgICBpZiAoTlVMTCA9PSBCaWRpQ2hhcikJeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENGWF9Xb3JkQXJyYXkgb3JkZXI7CisgICAgRlhfQk9PTCBiUjJMID0gRkFMU0U7CisgICAgRlhfSU5UMzIgc3RhcnQgPSAwLCBjb3VudCA9IDAsIGkgPSAwOworICAgIGludCBuUjJMID0gMCwgbkwyUiA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IHN0ci5HZXRMZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIGlmKEJpZGlDaGFyLT5BcHBlbmRDaGFyKHN0ci5HZXRBdChpKSkpIHsKKyAgICAgICAgICAgIEZYX0lOVDMyIHJldCA9IEJpZGlDaGFyLT5HZXRCaWRpSW5mbyhzdGFydCwgY291bnQpOworICAgICAgICAgICAgb3JkZXIuQWRkKHN0YXJ0KTsKKyAgICAgICAgICAgIG9yZGVyLkFkZChjb3VudCk7CisgICAgICAgICAgICBvcmRlci5BZGQocmV0KTsKKyAgICAgICAgICAgIGlmKCFiUjJMKSB7CisgICAgICAgICAgICAgICAgaWYocmV0ID09IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgblIyTCsrOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0ID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgbkwyUisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZihCaWRpQ2hhci0+RW5kQ2hhcigpKSB7CisgICAgICAgIEZYX0lOVDMyIHJldCA9IEJpZGlDaGFyLT5HZXRCaWRpSW5mbyhzdGFydCwgY291bnQpOworICAgICAgICBvcmRlci5BZGQoc3RhcnQpOworICAgICAgICBvcmRlci5BZGQoY291bnQpOworICAgICAgICBvcmRlci5BZGQocmV0KTsKKyAgICAgICAgaWYoIWJSMkwpIHsKKyAgICAgICAgICAgIGlmKHJldCA9PSAyKSB7CisgICAgICAgICAgICAgICAgblIyTCsrOworICAgICAgICAgICAgfSBlbHNlIGlmKHJldCA9PSAxKSB7CisgICAgICAgICAgICAgICAgbkwyUisrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmKG5SMkwgPiAwICYmIG5SMkwgPj0gbkwyUikgeworICAgICAgICBiUjJMID0gVFJVRTsKKyAgICB9CisgICAgaWYoYlIyTCkgeworICAgICAgICBpbnQgY291bnQgPSBvcmRlci5HZXRTaXplKCk7CisgICAgICAgIGZvcihpbnQgaiA9IGNvdW50IC0gMTsgaiA+IDA7IGogLT0gMykgeworICAgICAgICAgICAgaW50IHJldCA9IG9yZGVyLkdldEF0KGopOworICAgICAgICAgICAgaW50IHN0YXJ0ID0gb3JkZXIuR2V0QXQoaiAtIDIpOworICAgICAgICAgICAgaW50IGNvdW50MSA9IG9yZGVyLkdldEF0KGogLSAxKTsKKyAgICAgICAgICAgIGlmKHJldCA9PSAyIHx8IHJldCA9PSAwKSB7CisgICAgICAgICAgICAgICAgZm9yKGludCBpID0gc3RhcnQgKyBjb3VudDEgLSAxOyBpID49IHN0YXJ0OyBpLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgTm9ybWFsaXplQ29tcG9zaXRlQ2hhcihzdHJbaV0sIHNCdWZmZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaSA9IGo7CisgICAgICAgICAgICAgICAgRlhfQk9PTCBiU3ltYm9sID0gRkFMU0U7CisgICAgICAgICAgICAgICAgd2hpbGUoaSA+IDAgJiYgb3JkZXIuR2V0QXQoaSkgIT0gMikgeworICAgICAgICAgICAgICAgICAgICBiU3ltYm9sID0gIW9yZGVyLkdldEF0KGkpOworICAgICAgICAgICAgICAgICAgICBpIC09IDM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGludCBlbmQgPSBzdGFydCArIGNvdW50MSA7CisgICAgICAgICAgICAgICAgaW50IG4gPSAwOworICAgICAgICAgICAgICAgIGlmKGJTeW1ib2wpIHsKKyAgICAgICAgICAgICAgICAgICAgbiA9IGkgKyA2OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG4gPSBpICsgMzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYobiA+PSBqKSB7CisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgbSA9IHN0YXJ0OyBtIDwgZW5kOyBtKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNCdWZmZXIgKz0gc3RyW21dOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaSA9IGo7CisgICAgICAgICAgICAgICAgICAgIGogPSBuOworICAgICAgICAgICAgICAgICAgICBmb3IoOyBuIDw9IGk7IG4gKz0gMykgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldCA9IG9yZGVyLkdldEF0KG4pOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0ID0gb3JkZXIuR2V0QXQobiAtIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50MSA9IG9yZGVyLkdldEF0KG4gLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbmQgPSBzdGFydCArIGNvdW50MSA7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaW50IG0gPSBzdGFydDsgbSA8IGVuZDsgbSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc0J1ZmZlciArPSBzdHJbbV07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgY291bnQgPSBvcmRlci5HZXRTaXplKCk7CisgICAgICAgIEZYX0JPT0wgYkwyUiA9IEZBTFNFOworICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgY291bnQ7IGogKz0gMykgeworICAgICAgICAgICAgaW50IHJldCA9IG9yZGVyLkdldEF0KGogKyAyKTsKKyAgICAgICAgICAgIGludCBzdGFydCA9IG9yZGVyLkdldEF0KGopOworICAgICAgICAgICAgaW50IGNvdW50MSA9IG9yZGVyLkdldEF0KGogKyAxKTsKKyAgICAgICAgICAgIGlmKHJldCA9PSAyIHx8IChqID09IDAgJiYgcmV0ID09IDAgJiYgIWJMMlIpKSB7CisgICAgICAgICAgICAgICAgaW50IGkgPSBqICsgMzsKKyAgICAgICAgICAgICAgICB3aGlsZShiUjJMICYmIGkgPCBjb3VudCkgeworICAgICAgICAgICAgICAgICAgICBpZihvcmRlci5HZXRBdChpICsgMikgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpICs9IDM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoaSA9PSAzKSB7CisgICAgICAgICAgICAgICAgICAgIGogPSAtMzsKKyAgICAgICAgICAgICAgICAgICAgYkwyUiA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnQgZW5kID0gc3RyLkdldExlbmd0aCgpIC0gMTsKKyAgICAgICAgICAgICAgICBpZihpIDwgY291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgZW5kID0gb3JkZXIuR2V0QXQoaSkgLSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBqID0gaSAtIDM7CisgICAgICAgICAgICAgICAgZm9yKGludCBuID0gZW5kOyBuID49IHN0YXJ0OyBuLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgTm9ybWFsaXplQ29tcG9zaXRlQ2hhcihzdHJbaV0sIHNCdWZmZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IGVuZCA9IHN0YXJ0ICsgY291bnQxIDsKKyAgICAgICAgICAgICAgICBmb3IoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHNCdWZmZXIgKz0gc3RyW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBzdHIuRW1wdHkoKTsKKyAgICBzdHIgKz0gc0J1ZmZlcjsKKyAgICBCaWRpQ2hhci0+UmVsZWFzZSgpOworfQorc3RhdGljIEZYX0JPT0wgSXNOdW1iZXIoQ0ZYX1dpZGVTdHJpbmcmIHN0cikKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0ci5HZXRMZW5ndGgoKTsgaSArKykgeworICAgICAgICBGWF9XQ0hBUiBjaCA9IHN0cltpXTsKKyAgICAgICAgaWYgKChjaCA8ICcwJyB8fCBjaCA+ICc5JykgJiYgY2ggIT0gJy0nICYmIGNoICE9ICcrJyAmJiBjaCAhPSAnLicgJiYgY2ggIT0gJyAnKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9Cit2b2lkIENUZXh0UGFnZTo6RmluZENvbHVtbnMoKQoreworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBtX0Jhc2VMaW5lcy5HZXRTaXplKCk7IGkgKyspIHsKKyAgICAgICAgQ1RleHRCYXNlTGluZSogcEJhc2VMaW5lID0gKENUZXh0QmFzZUxpbmUqKW1fQmFzZUxpbmVzLkdldEF0KGkpOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBCYXNlTGluZS0+bV9UZXh0TGlzdC5HZXRTaXplKCk7IGogKyspIHsKKyAgICAgICAgICAgIENUZXh0Qm94KiBwVGV4dEJveCA9IChDVGV4dEJveCopcEJhc2VMaW5lLT5tX1RleHRMaXN0LkdldEF0KGopOworICAgICAgICAgICAgQ1RleHRDb2x1bW4qIHBDb2x1bW4gPSBGaW5kQ29sdW1uKHBUZXh0Qm94LT5tX1JpZ2h0KTsKKyAgICAgICAgICAgIGlmIChwQ29sdW1uID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBwQ29sdW1uID0gRlhfTkVXIENUZXh0Q29sdW1uOworICAgICAgICAgICAgICAgIGlmIChwQ29sdW1uKSB7CisgICAgICAgICAgICAgICAgICAgIHBDb2x1bW4tPm1fQ291bnQgPSAxOworICAgICAgICAgICAgICAgICAgICBwQ29sdW1uLT5tX0F2Z1BvcyA9IHBUZXh0Qm94LT5tX1JpZ2h0OworICAgICAgICAgICAgICAgICAgICBwQ29sdW1uLT5tX1RleHRQb3MgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgbV9UZXh0Q29sdW1ucy5BZGQocENvbHVtbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwQ29sdW1uLT5tX0F2Z1BvcyA9IChwQ29sdW1uLT5tX0NvdW50ICogcENvbHVtbi0+bV9BdmdQb3MgKyBwVGV4dEJveC0+bV9SaWdodCkgLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBDb2x1bW4tPm1fQ291bnQgKyAxKTsKKyAgICAgICAgICAgICAgICBwQ29sdW1uLT5tX0NvdW50ICsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGludCBtaW5jb3VudCA9IG1fQmFzZUxpbmVzLkdldFNpemUoKSAvIDQ7CisgICAgZm9yIChpID0gMDsgaSA8IG1fVGV4dENvbHVtbnMuR2V0U2l6ZSgpOyBpICsrKSB7CisgICAgICAgIENUZXh0Q29sdW1uKiBwVGV4dENvbHVtbiA9IChDVGV4dENvbHVtbiopbV9UZXh0Q29sdW1ucy5HZXRBdChpKTsKKyAgICAgICAgaWYgKHBUZXh0Q29sdW1uLT5tX0NvdW50ID49IG1pbmNvdW50KSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBkZWxldGUgcFRleHRDb2x1bW47CisgICAgICAgIG1fVGV4dENvbHVtbnMuUmVtb3ZlQXQoaSk7CisgICAgICAgIGkgLS07CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBtX0Jhc2VMaW5lcy5HZXRTaXplKCk7IGkgKyspIHsKKyAgICAgICAgQ1RleHRCYXNlTGluZSogcEJhc2VMaW5lID0gKENUZXh0QmFzZUxpbmUqKW1fQmFzZUxpbmVzLkdldEF0KGkpOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBCYXNlTGluZS0+bV9UZXh0TGlzdC5HZXRTaXplKCk7IGogKyspIHsKKyAgICAgICAgICAgIENUZXh0Qm94KiBwVGV4dEJveCA9IChDVGV4dEJveCopcEJhc2VMaW5lLT5tX1RleHRMaXN0LkdldEF0KGopOworICAgICAgICAgICAgaWYgKElzTnVtYmVyKHBUZXh0Qm94LT5tX1RleHQpKSB7CisgICAgICAgICAgICAgICAgcFRleHRCb3gtPm1fcENvbHVtbiA9IEZpbmRDb2x1bW4ocFRleHRCb3gtPm1fUmlnaHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorQ1RleHRDb2x1bW4qIENUZXh0UGFnZTo6RmluZENvbHVtbihGWF9GTE9BVCB4cG9zKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9UZXh0Q29sdW1ucy5HZXRTaXplKCk7IGkgKyspIHsKKyAgICAgICAgQ1RleHRDb2x1bW4qIHBDb2x1bW4gPSAoQ1RleHRDb2x1bW4qKW1fVGV4dENvbHVtbnMuR2V0QXQoaSk7CisgICAgICAgIGlmIChwQ29sdW1uLT5tX0F2Z1BvcyA8IHhwb3MgKyAxICYmIHBDb2x1bW4tPm1fQXZnUG9zID4geHBvcyAtIDEpIHsKKyAgICAgICAgICAgIHJldHVybiBwQ29sdW1uOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQordm9pZCBDVGV4dFBhZ2U6OkJyZWFrU3BhY2UoQ1BERl9UZXh0T2JqZWN0KiBwVGV4dE9iaikKK3sKK30KK0NUZXh0QmFzZUxpbmU6OkNUZXh0QmFzZUxpbmUoKQoreworICAgIG1fVG9wID0gLTEwMDAwMDsKKyAgICBtX0JvdHRvbSA9IDEwMDAwMDsKKyAgICBtX01heEZvbnRTaXplViA9IDA7Cit9CitDVGV4dEJhc2VMaW5lOjp+Q1RleHRCYXNlTGluZSgpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX1RleHRMaXN0LkdldFNpemUoKTsgaSArKykgeworICAgICAgICBDVGV4dEJveCogcFRleHQgPSAoQ1RleHRCb3gqKW1fVGV4dExpc3QuR2V0QXQoaSk7CisgICAgICAgIGRlbGV0ZSBwVGV4dDsKKyAgICB9Cit9Cit2b2lkIENUZXh0QmFzZUxpbmU6Okluc2VydFRleHRCb3goRlhfRkxPQVQgbGVmdHgsIEZYX0ZMT0FUIHJpZ2h0eCwgRlhfRkxPQVQgdG9weSwgRlhfRkxPQVQgYm90dG9teSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCBzcGFjZXcsIEZYX0ZMT0FUIGZvbnRzaXplX3YsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiB0ZXh0KQoreworICAgIGlmIChtX1RvcCA8IHRvcHkpIHsKKyAgICAgICAgbV9Ub3AgPSB0b3B5OworICAgIH0KKyAgICBpZiAobV9Cb3R0b20gPiBib3R0b215KSB7CisgICAgICAgIG1fQm90dG9tID0gYm90dG9teTsKKyAgICB9CisgICAgaWYgKG1fTWF4Rm9udFNpemVWIDwgZm9udHNpemVfdikgeworICAgICAgICBtX01heEZvbnRTaXplViA9IGZvbnRzaXplX3Y7CisgICAgfQorICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBtX1RleHRMaXN0LkdldFNpemUoKTsgaSArKykgeworICAgICAgICBDVGV4dEJveCogcFRleHQgPSAoQ1RleHRCb3gqKW1fVGV4dExpc3QuR2V0QXQoaSk7CisgICAgICAgIGlmIChwVGV4dC0+bV9MZWZ0ID4gbGVmdHgpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIENUZXh0Qm94KiBwVGV4dCA9IEZYX05FVyBDVGV4dEJveDsKKyAgICBpZiAoTlVMTCA9PSBwVGV4dCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHBUZXh0LT5tX1RleHQgPSB0ZXh0OworICAgIHBUZXh0LT5tX0xlZnQgPSBsZWZ0eDsKKyAgICBwVGV4dC0+bV9SaWdodCA9IHJpZ2h0eDsKKyAgICBwVGV4dC0+bV9Ub3AgPSB0b3B5OworICAgIHBUZXh0LT5tX0JvdHRvbSA9IGJvdHRvbXk7CisgICAgcFRleHQtPm1fU3BhY2VXaWR0aCA9IHNwYWNldzsKKyAgICBwVGV4dC0+bV9Gb250U2l6ZVYgPSBmb250c2l6ZV92OworICAgIHBUZXh0LT5tX3BDb2x1bW4gPSBOVUxMOworICAgIG1fVGV4dExpc3QuSW5zZXJ0QXQoaSwgcFRleHQpOworfQorRlhfQk9PTCBHZXRJbnRlcnNlY3Rpb24oRlhfRkxPQVQgbG93MSwgRlhfRkxPQVQgaGlnaDEsIEZYX0ZMT0FUIGxvdzIsIEZYX0ZMT0FUIGhpZ2gyLAorICAgICAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQmIGludGVybG93LCBGWF9GTE9BVCYgaW50ZXJoaWdoKTsKK0ZYX0JPT0wgQ1RleHRCYXNlTGluZTo6Q2FuTWVyZ2UoQ1RleHRCYXNlTGluZSogcE90aGVyKQoreworICAgIEZYX0ZMT0FUIGludGVyX3RvcCwgaW50ZXJfYm90dG9tOworICAgIGlmICghR2V0SW50ZXJzZWN0aW9uKG1fQm90dG9tLCBtX1RvcCwgcE90aGVyLT5tX0JvdHRvbSwgcE90aGVyLT5tX1RvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcl9ib3R0b20sIGludGVyX3RvcCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWF9GTE9BVCBpbnRlcl9oID0gaW50ZXJfdG9wIC0gaW50ZXJfYm90dG9tOworICAgIGlmIChpbnRlcl9oIDwgKG1fVG9wIC0gbV9Cb3R0b20pIC8gMiAmJiBpbnRlcl9oIDwgKHBPdGhlci0+bV9Ub3AgLSBwT3RoZXItPm1fQm90dG9tKSAvIDIpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWF9GTE9BVCBkeSA9IChGWF9GTE9BVClGWFNZU19mYWJzKG1fQmFzZUxpbmUgLSBwT3RoZXItPm1fQmFzZUxpbmUpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9UZXh0TGlzdC5HZXRTaXplKCk7IGkgKyspIHsKKyAgICAgICAgQ1RleHRCb3gqIHBUZXh0ID0gKENUZXh0Qm94KiltX1RleHRMaXN0LkdldEF0KGkpOworICAgICAgICBGWF9GTE9BVCB3aWR0aCA9IHBUZXh0LT5tX1JpZ2h0IC0gcFRleHQtPm1fTGVmdDsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwT3RoZXItPm1fVGV4dExpc3QuR2V0U2l6ZSgpOyBqICsrKSB7CisgICAgICAgICAgICBDVGV4dEJveCogcE90aGVyVGV4dCA9IChDVGV4dEJveCopcE90aGVyLT5tX1RleHRMaXN0LkdldEF0KGopOworICAgICAgICAgICAgRlhfRkxPQVQgaW50ZXJfbGVmdCwgaW50ZXJfcmlnaHQ7CisgICAgICAgICAgICBpZiAoIUdldEludGVyc2VjdGlvbihwVGV4dC0+bV9MZWZ0LCBwVGV4dC0+bV9SaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBPdGhlclRleHQtPm1fTGVmdCwgcE90aGVyVGV4dC0+bV9SaWdodCwgaW50ZXJfbGVmdCwgaW50ZXJfcmlnaHQpKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9GTE9BVCBpbnRlcl93ID0gaW50ZXJfcmlnaHQgLSBpbnRlcl9sZWZ0OworICAgICAgICAgICAgaWYgKGludGVyX3cgPCBwVGV4dC0+bV9TcGFjZVdpZHRoIC8gMiAmJiBpbnRlcl93IDwgcE90aGVyVGV4dC0+bV9TcGFjZVdpZHRoIC8gMikgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGR5ID49IChwVGV4dC0+bV9Cb3R0b20gLSBwVGV4dC0+bV9Ub3ApIC8gMiB8fAorICAgICAgICAgICAgICAgICAgICBkeSA+PSAocE90aGVyVGV4dC0+bV9Cb3R0b20gLSBwT3RoZXJUZXh0LT5tX1RvcCkgLyAyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQordm9pZCBDVGV4dEJhc2VMaW5lOjpNZXJnZShDVGV4dEJhc2VMaW5lKiBwT3RoZXIpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwT3RoZXItPm1fVGV4dExpc3QuR2V0U2l6ZSgpOyBpICsrKSB7CisgICAgICAgIENUZXh0Qm94KiBwVGV4dCA9IChDVGV4dEJveCopcE90aGVyLT5tX1RleHRMaXN0LkdldEF0KGkpOworICAgICAgICBJbnNlcnRUZXh0Qm94KHBUZXh0LT5tX0xlZnQsIHBUZXh0LT5tX1JpZ2h0LCBwVGV4dC0+bV9Ub3AsIHBUZXh0LT5tX0JvdHRvbSwKKyAgICAgICAgICAgICAgICAgICAgICBwVGV4dC0+bV9TcGFjZVdpZHRoLCBwVGV4dC0+bV9Gb250U2l6ZVYsIHBUZXh0LT5tX1RleHQpOworICAgIH0KK30KK0ZYX0JPT0wgQ1RleHRCYXNlTGluZTo6R2V0V2lkdGgoRlhfRkxPQVQmIGxlZnR4LCBGWF9GTE9BVCYgcmlnaHR4KQoreworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBtX1RleHRMaXN0LkdldFNpemUoKTsgaSArKykgeworICAgICAgICBDVGV4dEJveCogcFRleHQgPSAoQ1RleHRCb3gqKW1fVGV4dExpc3QuR2V0QXQoaSk7CisgICAgICAgIGlmIChwVGV4dC0+bV9UZXh0ICE9IEwiICIpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmIChpID09IG1fVGV4dExpc3QuR2V0U2l6ZSgpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgQ1RleHRCb3gqIHBUZXh0ID0gKENUZXh0Qm94KiltX1RleHRMaXN0LkdldEF0KGkpOworICAgIGxlZnR4ID0gcFRleHQtPm1fTGVmdDsKKyAgICBmb3IgKGkgPSBtX1RleHRMaXN0LkdldFNpemUoKSAtIDE7IGkgPj0gMDsgaSAtLSkgeworICAgICAgICBDVGV4dEJveCogcFRleHQgPSAoQ1RleHRCb3gqKW1fVGV4dExpc3QuR2V0QXQoaSk7CisgICAgICAgIGlmIChwVGV4dC0+bV9UZXh0ICE9IEwiICIpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHBUZXh0ID0gKENUZXh0Qm94KiltX1RleHRMaXN0LkdldEF0KGkpOworICAgIHJpZ2h0eCA9IHBUZXh0LT5tX1JpZ2h0OworICAgIHJldHVybiBUUlVFOworfQordm9pZCBDVGV4dEJhc2VMaW5lOjpNZXJnZUJveGVzKCkKK3sKKyAgICBpbnQgaSA9IDA7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKGkgPj0gbV9UZXh0TGlzdC5HZXRTaXplKCkgLSAxKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBDVGV4dEJveCogcFRoaXNUZXh0ID0gKENUZXh0Qm94KiltX1RleHRMaXN0LkdldEF0KGkpOworICAgICAgICBDVGV4dEJveCogcE5leHRUZXh0ID0gKENUZXh0Qm94KiltX1RleHRMaXN0LkdldEF0KGkgKyAxKTsKKyAgICAgICAgRlhfRkxPQVQgZHggPSBwTmV4dFRleHQtPm1fTGVmdCAtIHBUaGlzVGV4dC0+bV9SaWdodDsKKyAgICAgICAgRlhfRkxPQVQgc3BhY2V3ID0gKHBUaGlzVGV4dC0+bV9TcGFjZVdpZHRoID09IDAuMCkgPworICAgICAgICAgICAgICAgICAgICAgICAgICBwTmV4dFRleHQtPm1fU3BhY2VXaWR0aCA6IHBUaGlzVGV4dC0+bV9TcGFjZVdpZHRoOworICAgICAgICBpZiAoc3BhY2V3ID4gMC4wICYmIGR4IDwgc3BhY2V3ICogMikgeworICAgICAgICAgICAgcFRoaXNUZXh0LT5tX1JpZ2h0ID0gcE5leHRUZXh0LT5tX1JpZ2h0OworICAgICAgICAgICAgaWYgKGR4ID4gc3BhY2V3ICogMS41KSB7CisgICAgICAgICAgICAgICAgcFRoaXNUZXh0LT5tX1RleHQgKz0gTCIgICI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGR4ID4gc3BhY2V3IC8gMykgeworICAgICAgICAgICAgICAgIHBUaGlzVGV4dC0+bV9UZXh0ICs9IEwnICc7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwVGhpc1RleHQtPm1fVGV4dCArPSBwTmV4dFRleHQtPm1fVGV4dDsKKyAgICAgICAgICAgIHBUaGlzVGV4dC0+bV9TcGFjZVdpZHRoID0gcE5leHRUZXh0LT5tX1NwYWNlV2lkdGggPT0gMC4wID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2V3IDogcE5leHRUZXh0LT5tX1NwYWNlV2lkdGg7CisgICAgICAgICAgICBtX1RleHRMaXN0LlJlbW92ZUF0KGkgKyAxKTsKKyAgICAgICAgICAgIGRlbGV0ZSBwTmV4dFRleHQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpICsrOworICAgICAgICB9CisgICAgfQorfQordm9pZCBDVGV4dEJhc2VMaW5lOjpXcml0ZU91dHB1dChDRlhfV2lkZVN0cmluZyYgc3RyLCBGWF9GTE9BVCBsZWZ0eCwgRlhfRkxPQVQgcGFnZXdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaVRleHRXaWR0aCkKK3sKKyAgICBpbnQgbGFzdHBvcyA9IC0xOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9UZXh0TGlzdC5HZXRTaXplKCk7IGkgKyspIHsKKyAgICAgICAgQ1RleHRCb3gqIHBUZXh0ID0gKENUZXh0Qm94KiltX1RleHRMaXN0LkdldEF0KGkpOworICAgICAgICBpbnQgeHBvczsKKyAgICAgICAgaWYgKHBUZXh0LT5tX3BDb2x1bW4pIHsKKyAgICAgICAgICAgIHhwb3MgPSAoaW50KSgocFRleHQtPm1fcENvbHVtbi0+bV9BdmdQb3MgLSBsZWZ0eCkgKiBpVGV4dFdpZHRoIC8gcGFnZXdpZHRoICsgMC41KTsKKyAgICAgICAgICAgIHhwb3MgLT0gcFRleHQtPm1fVGV4dC5HZXRMZW5ndGgoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHhwb3MgPSAoaW50KSgocFRleHQtPm1fTGVmdCAtIGxlZnR4KSAqIGlUZXh0V2lkdGggLyBwYWdld2lkdGggKyAwLjUpOworICAgICAgICB9CisgICAgICAgIGlmICh4cG9zIDw9IGxhc3Rwb3MpIHsKKyAgICAgICAgICAgIHhwb3MgPSBsYXN0cG9zICsgMTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBqID0gbGFzdHBvcyArIDE7IGogPCB4cG9zOyBqICsrKSB7CisgICAgICAgICAgICBzdHIgKz0gJyAnOworICAgICAgICB9CisgICAgICAgIENGWF9XaWRlU3RyaW5nIHNTcmMocFRleHQtPm1fVGV4dCk7CisgICAgICAgIE5vcm1hbGl6ZVN0cmluZyhzU3JjKTsKKyAgICAgICAgc3RyICs9IHNTcmM7CisgICAgICAgIHN0ciArPSAnICc7CisgICAgICAgIGxhc3Rwb3MgPSB4cG9zICsgcFRleHQtPm1fVGV4dC5HZXRMZW5ndGgoKTsKKyAgICB9Cit9Cit2b2lkIENUZXh0QmFzZUxpbmU6OkNvdW50Q2hhcnMoaW50JiBjb3VudCwgRlhfRkxPQVQmIHdpZHRoLCBpbnQmIG1pbmNoYXJzKQoreworICAgIG1pbmNoYXJzID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fVGV4dExpc3QuR2V0U2l6ZSgpOyBpICsrKSB7CisgICAgICAgIENUZXh0Qm94KiBwVGV4dCA9IChDVGV4dEJveCopbV9UZXh0TGlzdC5HZXRBdChpKTsKKyAgICAgICAgaWYgKHBUZXh0LT5tX1JpZ2h0IC0gcFRleHQtPm1fTGVmdCA8IDAuMDAyKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBjb3VudCArPSBwVGV4dC0+bV9UZXh0LkdldExlbmd0aCgpOworICAgICAgICB3aWR0aCArPSBwVGV4dC0+bV9SaWdodCAtIHBUZXh0LT5tX0xlZnQ7CisgICAgICAgIG1pbmNoYXJzICs9IHBUZXh0LT5tX1RleHQuR2V0TGVuZ3RoKCkgKyAxOworICAgIH0KK30KKyNkZWZpbmUgUEkgMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjI2NDMzODMyNzk1CitzdGF0aWMgdm9pZCBDaGVja1JvdGF0ZShDUERGX1BhZ2UmIHBhZ2UsIENGWF9GbG9hdFJlY3QmIHBhZ2VfYmJveCkKK3sKKyAgICBpbnQgdG90YWxfY291bnQgPSAwLCByb3RhdGVkX2NvdW50WzNdID0gezAsIDAsIDB9OworICAgIEZYX1BPU0lUSU9OIHBvcyA9IHBhZ2UuR2V0Rmlyc3RPYmplY3RQb3NpdGlvbigpOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgQ1BERl9QYWdlT2JqZWN0KiBwT2JqID0gcGFnZS5HZXROZXh0T2JqZWN0KHBvcyk7CisgICAgICAgIGlmIChwT2JqLT5tX1R5cGUgIT0gUERGUEFHRV9URVhUKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICB0b3RhbF9jb3VudCArKzsKKyAgICAgICAgQ1BERl9UZXh0T2JqZWN0KiBwVGV4dCA9IChDUERGX1RleHRPYmplY3QqKXBPYmo7CisgICAgICAgIEZYX0ZMT0FUIGFuZ2xlID0gcFRleHQtPm1fVGV4dFN0YXRlLkdldEJhc2VsaW5lQW5nbGUoKTsKKyAgICAgICAgaWYgKGFuZ2xlID09IDAuMCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaW50IGRlZ3JlZSA9IChpbnQpKGFuZ2xlICogMTgwIC8gUEkgKyAwLjUpOworICAgICAgICBpZiAoZGVncmVlICUgOTApIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChkZWdyZWUgPCAwKSB7CisgICAgICAgICAgICBkZWdyZWUgKz0gMzYwOworICAgICAgICB9CisgICAgICAgIGludCBpbmRleCA9IGRlZ3JlZSAvIDkwICUgMyAtIDE7CisgICAgICAgIGlmIChpbmRleCA8IDApIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHJvdGF0ZWRfY291bnRbaW5kZXhdICsrOworICAgIH0KKyAgICBpZiAodG90YWxfY291bnQgPT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4OworICAgIGlmIChyb3RhdGVkX2NvdW50WzBdID4gdG90YWxfY291bnQgKiAyIC8gMykgeworICAgICAgICBtYXRyaXguU2V0KDAsIC0xLCAxLCAwLCAwLCBwYWdlLkdldFBhZ2VIZWlnaHQoKSk7CisgICAgfSBlbHNlIGlmIChyb3RhdGVkX2NvdW50WzFdID4gdG90YWxfY291bnQgKiAyIC8gMykgeworICAgICAgICBtYXRyaXguU2V0KC0xLCAwLCAwLCAtMSwgcGFnZS5HZXRQYWdlV2lkdGgoKSwgcGFnZS5HZXRQYWdlSGVpZ2h0KCkpOworICAgIH0gZWxzZSBpZiAocm90YXRlZF9jb3VudFsyXSA+IHRvdGFsX2NvdW50ICogMiAvIDMpIHsKKyAgICAgICAgbWF0cml4LlNldCgwLCAxLCAtMSwgMCwgcGFnZS5HZXRQYWdlV2lkdGgoKSwgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwYWdlLlRyYW5zZm9ybShtYXRyaXgpOworICAgIHBhZ2VfYmJveC5UcmFuc2Zvcm0oJm1hdHJpeCk7Cit9Cit2b2lkIFBERl9HZXRQYWdlVGV4dF9Vbmljb2RlKENGWF9XaWRlU3RyaW5nQXJyYXkmIGxpbmVzLCBDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0RpY3Rpb25hcnkqIHBQYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaU1pbldpZHRoLCBGWF9EV09SRCBmbGFncykKK3sKKyAgICBsaW5lcy5SZW1vdmVBbGwoKTsKKyAgICBpZiAocFBhZ2UgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfUGFnZSBwYWdlOworICAgIHBhZ2UuTG9hZChwRG9jLCBwUGFnZSk7CisgICAgQ1BERl9QYXJzZU9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLm1fYlRleHRPbmx5ID0gVFJVRTsKKyAgICBvcHRpb25zLm1fYlNlcGFyYXRlRm9ybSA9IEZBTFNFOworICAgIHBhZ2UuUGFyc2VDb250ZW50KCZvcHRpb25zKTsKKyAgICBDRlhfRmxvYXRSZWN0IHBhZ2VfYmJveCA9IHBhZ2UuR2V0UGFnZUJCb3goKTsKKyAgICBpZiAoZmxhZ3MgJiBQREYyVFhUX0FVVE9fUk9UQVRFKSB7CisgICAgICAgIENoZWNrUm90YXRlKHBhZ2UsIHBhZ2VfYmJveCk7CisgICAgfQorICAgIENUZXh0UGFnZSB0ZXh0czsKKyAgICB0ZXh0cy5tX2JBdXRvV2lkdGggPSBmbGFncyAmIFBERjJUWFRfQVVUT19XSURUSDsKKyAgICB0ZXh0cy5tX2JLZWVwQ29sdW1uID0gZmxhZ3MgJiBQREYyVFhUX0tFRVBfQ09MVU1OOworICAgIHRleHRzLm1fYkJyZWFrU3BhY2UgPSBUUlVFOworICAgIEZYX1BPU0lUSU9OIHBvcyA9IHBhZ2UuR2V0Rmlyc3RPYmplY3RQb3NpdGlvbigpOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgQ1BERl9QYWdlT2JqZWN0KiBwT2JqZWN0ID0gcGFnZS5HZXROZXh0T2JqZWN0KHBvcyk7CisgICAgICAgIGlmICghKGZsYWdzICYgUERGMlRYVF9JTkNMVURFX0lOVklTSUJMRSkpIHsKKyAgICAgICAgICAgIENGWF9GbG9hdFJlY3QgcmVjdChwT2JqZWN0LT5tX0xlZnQsIHBPYmplY3QtPm1fQm90dG9tLCBwT2JqZWN0LT5tX1JpZ2h0LCBwT2JqZWN0LT5tX1RvcCk7CisgICAgICAgICAgICBpZiAoIXBhZ2VfYmJveC5Db250YWlucyhyZWN0KSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRleHRzLlByb2Nlc3NPYmplY3QocE9iamVjdCk7CisgICAgfQorICAgIHRleHRzLldyaXRlT3V0cHV0KGxpbmVzLCBpTWluV2lkdGgpOworfQordm9pZCBQREZfR2V0UGFnZVRleHQoQ0ZYX0J5dGVTdHJpbmdBcnJheSYgbGluZXMsIENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfRGljdGlvbmFyeSogcFBhZ2UsCisgICAgICAgICAgICAgICAgICAgICBpbnQgaU1pbldpZHRoLCBGWF9EV09SRCBmbGFncykKK3sKKyAgICBsaW5lcy5SZW1vdmVBbGwoKTsKKyAgICBDRlhfV2lkZVN0cmluZ0FycmF5IHdsaW5lczsKKyAgICBQREZfR2V0UGFnZVRleHRfVW5pY29kZSh3bGluZXMsIHBEb2MsIHBQYWdlLCBpTWluV2lkdGgsIGZsYWdzKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHdsaW5lcy5HZXRTaXplKCk7IGkgKyspIHsKKyAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgd3N0ciA9IHdsaW5lc1tpXTsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc3RyOworICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IHdzdHIuR2V0TGVuZ3RoKCk7IGMgKyspIHsKKyAgICAgICAgICAgIHN0ciArPSBDaGFyRnJvbVVuaWNvZGVBbHQod3N0cltjXSwgRlhTWVNfR2V0QUNQKCksICI/Iik7CisgICAgICAgIH0KKyAgICAgICAgbGluZXMuQWRkKHN0cik7CisgICAgfQorfQorI2VuZGlmCitleHRlcm4gdm9pZCBfUERGX0dldFRleHRTdHJlYW1fVW5pY29kZShDRlhfV2lkZVRleHRCdWYmIGJ1ZmZlciwgQ1BERl9QYWdlT2JqZWN0cyogcFBhZ2UsIEZYX0JPT0wgYlVzZUxGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX1B0ckFycmF5KiBwT2JqQXJyYXkpOwordm9pZCBQREZfR2V0VGV4dFN0cmVhbV9Vbmljb2RlKENGWF9XaWRlVGV4dEJ1ZiYgYnVmZmVyLCBDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGX0RpY3Rpb25hcnkqIHBQYWdlLCBGWF9EV09SRCBmbGFncykKK3sKKyAgICBidWZmZXIuRXN0aW1hdGVTaXplKDAsIDEwMjQwKTsKKyAgICBDUERGX1BhZ2UgcGFnZTsKKyAgICBwYWdlLkxvYWQocERvYywgcFBhZ2UpOworICAgIENQREZfUGFyc2VPcHRpb25zIG9wdGlvbnM7CisgICAgb3B0aW9ucy5tX2JUZXh0T25seSA9IFRSVUU7CisgICAgb3B0aW9ucy5tX2JTZXBhcmF0ZUZvcm0gPSBGQUxTRTsKKyAgICBwYWdlLlBhcnNlQ29udGVudCgmb3B0aW9ucyk7CisgICAgX1BERl9HZXRUZXh0U3RyZWFtX1VuaWNvZGUoYnVmZmVyLCAmcGFnZSwgVFJVRSwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmdGV4dC9mcGRmX3RleHRfaW50LmNwcCBiL2NvcmUvc3JjL2ZwZGZ0ZXh0L2ZwZGZfdGV4dF9pbnQuY3BwCmluZGV4IDM2YjA0NDIuLjBlMGQ1MmUgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZ0ZXh0L2ZwZGZfdGV4dF9pbnQuY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZ0ZXh0L2ZwZGZfdGV4dF9pbnQuY3BwCkBAIC0xLDI4MDQgKzEsMjgwNCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3Jlc291cmNlLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2VvYmouaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mcGRmdGV4dC9mcGRmX3RleHQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZS5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCINCi0jaW5jbHVkZSA8Y3R5cGUuaD4NCi0jaW5jbHVkZSAidGV4dF9pbnQuaCINCi1GWF9CT09MIF9Jc0lnbm9yZVNwYWNlQ2hhcmFjdGVyKEZYX1dDSEFSIGN1ckNoYXIpDQotew0KLSAgICBpZihjdXJDaGFyIDwgMjU1ICkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmICggKGN1ckNoYXIgPj0gMHgwNjAwICYmIGN1ckNoYXIgPD0gMHgwNkZGKQ0KLSAgICAgICAgICAgIHx8IChjdXJDaGFyID49IDB4RkU3MCAmJiBjdXJDaGFyIDw9IDB4RkVGRikNCi0gICAgICAgICAgICB8fCAoY3VyQ2hhciA+PSAweEZCNTAgJiYgY3VyQ2hhciA8PSAweEZERkYpDQotICAgICAgICAgICAgfHwgKGN1ckNoYXIgPj0gMHgwNDAwICYmIGN1ckNoYXIgPD0gMHgwNEZGKQ0KLSAgICAgICAgICAgIHx8IChjdXJDaGFyID49IDB4MDUwMCAmJiBjdXJDaGFyIDw9IDB4MDUyRikNCi0gICAgICAgICAgICB8fCAoY3VyQ2hhciA+PSAweEE2NDAgJiYgY3VyQ2hhciA8PSAweEE2OUYpDQotICAgICAgICAgICAgfHwgKGN1ckNoYXIgPj0gMHgyREUwICYmIGN1ckNoYXIgPD0gMHgyREZGKQ0KLSAgICAgICAgICAgIHx8IGN1ckNoYXIgPT0gODQ2Nw0KLSAgICAgICAgICAgIHx8IChjdXJDaGFyID49IDB4MjAwMCAmJiBjdXJDaGFyIDw9IDB4MjA2RikpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotQ1BERlRleHRfUGFyc2VPcHRpb25zOjpDUERGVGV4dF9QYXJzZU9wdGlvbnMoKQ0KLSAgICA6IG1fYkdldENoYXJDb2RlT25seShGQUxTRSksIG1fYk5vcm1hbGl6ZU9ianMoVFJVRSksIG1fYk91dHB1dEh5cGhlbihGQUxTRSkNCi17DQotfQ0KLUlQREZfVGV4dFBhZ2UqIElQREZfVGV4dFBhZ2U6OkNyZWF0ZVRleHRQYWdlKGNvbnN0IENQREZfUGFnZSogcFBhZ2UsIENQREZUZXh0X1BhcnNlT3B0aW9ucyBQYXJzZXJPcHRpb25zKQ0KLXsNCi0gICAgQ1BERl9UZXh0UGFnZSogcFRleHRQYWdlRXggPSBGWF9ORVcgQ1BERl9UZXh0UGFnZShwUGFnZSwgUGFyc2VyT3B0aW9ucyk7DQotICAgIHJldHVybiBwVGV4dFBhZ2VFeDsNCi19DQotSVBERl9UZXh0UGFnZSogSVBERl9UZXh0UGFnZTo6Q3JlYXRlVGV4dFBhZ2UoY29uc3QgQ1BERl9QYWdlKiBwUGFnZSwgaW50IGZsYWdzKQ0KLXsNCi0gICAgQ1BERl9UZXh0UGFnZSogcFRleHRQYWdlID0gRlhfTkVXIENQREZfVGV4dFBhZ2UocFBhZ2UsIGZsYWdzKTsNCi0gICAgcmV0dXJuCXBUZXh0UGFnZTsNCi19DQotSVBERl9UZXh0UGFnZSoJSVBERl9UZXh0UGFnZTo6Q3JlYXRlVGV4dFBhZ2UoY29uc3QgQ1BERl9QYWdlT2JqZWN0cyogcE9ianMsIGludCBmbGFncykNCi17DQotICAgIENQREZfVGV4dFBhZ2UqIHBUZXh0UGFnZSA9IEZYX05FVyBDUERGX1RleHRQYWdlKHBPYmpzLCBmbGFncyk7DQotICAgIHJldHVybglwVGV4dFBhZ2U7DQotfQ0KLUlQREZfVGV4dFBhZ2VGaW5kKglJUERGX1RleHRQYWdlRmluZDo6Q3JlYXRlUGFnZUZpbmQoY29uc3QgSVBERl9UZXh0UGFnZSogcFRleHRQYWdlKQ0KLXsNCi0gICAgaWYgKCFwVGV4dFBhZ2UpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiBGWF9ORVcgQ1BERl9UZXh0UGFnZUZpbmQocFRleHRQYWdlKTsNCi19DQotSVBERl9MaW5rRXh0cmFjdCogSVBERl9MaW5rRXh0cmFjdDo6Q3JlYXRlTGlua0V4dHJhY3QoKQ0KLXsNCi0gICAgcmV0dXJuIEZYX05FVyBDUERGX0xpbmtFeHRyYWN0KCk7DQotfQ0KLSNkZWZpbmUgIFRFWFRfQkxBTktfQ0hBUgkJTCcgJw0KLSNkZWZpbmUgIFRFWFRfTElORUZFRURfQ0hBUgkJTCdcbicNCi0jZGVmaW5lCSBURVhUX1JFVFVSTl9DSEFSCQlMJ1xyJw0KLSNkZWZpbmUgIFRFWFRfRU1QVFkJCQkJTCIiDQotI2RlZmluZSAgVEVYVF9CTEFOSwkJCQlMIiAiDQotI2RlZmluZSAgVEVYVF9SRVRVUk5fTElORUZFRUQJTCJcclxuIg0KLSNkZWZpbmUgIFRFWFRfTElORUZFRUQJCQlMIlxuIg0KLSNkZWZpbmUJIFRFWFRfQ0hBUlJBVElPX0dBUERFTFRBCTAuMDcwDQotQ1BERl9UZXh0UGFnZTo6Q1BERl9UZXh0UGFnZShjb25zdCBDUERGX1BhZ2UqIHBQYWdlLCBpbnQgZmxhZ3MpDQotICAgIDogbV9wUHJlVGV4dE9iaihOVUxMKSwNCi0gICAgICBtX0lzUGFyc2VyZWQoRkFMU0UpLA0KLSAgICAgIG1fY2hhckxpc3QoNTEyKSwNCi0gICAgICBtX1RlbXBDaGFyTGlzdCg1MCksDQotICAgICAgbV9UZXh0bGluZURpcigtMSksDQotICAgICAgbV9DdXJsaW5lUmVjdCgwLCAwLCAwLCAwKQ0KLXsNCi0gICAgbV9wUGFnZSA9IHBQYWdlOw0KLSAgICBtX3BhcnNlcmZsYWcgPSBmbGFnczsNCi0gICAgbV9UZXh0QnVmLkVzdGltYXRlU2l6ZSgwLCAxMDI0MCk7DQotICAgIHBQYWdlLT5HZXREaXNwbGF5TWF0cml4KG1fRGlzcGxheU1hdHJpeCwgMCwgMCwgKGludCkgcFBhZ2UtPkdldFBhZ2VXaWR0aCgpLCAoaW50KXBQYWdlLT5HZXRQYWdlSGVpZ2h0KCksIDApOw0KLX0NCi1DUERGX1RleHRQYWdlOjpDUERGX1RleHRQYWdlKGNvbnN0IENQREZfUGFnZSogcFBhZ2UsIENQREZUZXh0X1BhcnNlT3B0aW9ucyBQYXJzZXJPcHRpb25zKQ0KLSAgICA6IG1fcFByZVRleHRPYmooTlVMTCkNCi0gICAgLCBtX0lzUGFyc2VyZWQoRkFMU0UpDQotICAgICwgbV9jaGFyTGlzdCg1MTIpDQotICAgICwgbV9UZW1wQ2hhckxpc3QoNTApDQotICAgICwgbV9UZXh0bGluZURpcigtMSkNCi0gICAgLCBtX0N1cmxpbmVSZWN0KDAsIDAsIDAsIDApDQotICAgICwgbV9QYXJzZU9wdGlvbnMoUGFyc2VyT3B0aW9ucykNCi17DQotICAgIG1fcFBhZ2UgPSBwUGFnZTsNCi0gICAgbV9wYXJzZXJmbGFnID0gMDsNCi0gICAgbV9UZXh0QnVmLkVzdGltYXRlU2l6ZSgwLCAxMDI0MCk7DQotICAgIHBQYWdlLT5HZXREaXNwbGF5TWF0cml4KG1fRGlzcGxheU1hdHJpeCwgMCwgMCwgKGludCkgcFBhZ2UtPkdldFBhZ2VXaWR0aCgpLCAoaW50KXBQYWdlLT5HZXRQYWdlSGVpZ2h0KCksIDApOw0KLX0NCi1DUERGX1RleHRQYWdlOjpDUERGX1RleHRQYWdlKGNvbnN0IENQREZfUGFnZU9iamVjdHMqIHBQYWdlLCBpbnQgZmxhZ3MpDQotICAgIDogbV9wUHJlVGV4dE9iaihOVUxMKSwNCi0gICAgICBtX0lzUGFyc2VyZWQoRkFMU0UpLA0KLSAgICAgIG1fY2hhckxpc3QoNTEyKSwNCi0gICAgICBtX1RlbXBDaGFyTGlzdCg1MCksDQotICAgICAgbV9UZXh0bGluZURpcigtMSksDQotICAgICAgbV9DdXJsaW5lUmVjdCgwLCAwLCAwLCAwKQ0KLXsNCi0gICAgbV9wUGFnZSA9IHBQYWdlOw0KLSAgICBtX3BhcnNlcmZsYWcgPSBmbGFnczsNCi0gICAgbV9UZXh0QnVmLkVzdGltYXRlU2l6ZSgwLCAxMDI0MCk7DQotICAgIENGWF9GbG9hdFJlY3QgcGFnZVJlY3QgPSBwUGFnZS0+Q2FsY0JvdW5kaW5nQm94KCk7DQotICAgIG1fRGlzcGxheU1hdHJpeCA9IENGWF9BZmZpbmVNYXRyaXgoMSwgMCwgMCwgLTEsIHBhZ2VSZWN0LnJpZ2h0LCBwYWdlUmVjdC50b3ApOw0KLX0NCi12b2lkIENQREZfVGV4dFBhZ2U6Ok5vcm1hbGl6ZU9iamVjdHMoRlhfQk9PTCBiTm9ybWFsaXplKQ0KLXsNCi0gICAgbV9QYXJzZU9wdGlvbnMubV9iTm9ybWFsaXplT2JqcyA9IGJOb3JtYWxpemU7DQotfQ0KLUZYX0JPT0wgQ1BERl9UZXh0UGFnZTo6SXNDb250cm9sQ2hhcihQQUdFQ0hBUl9JTkZPKiBwQ2hhckluZm8pDQotew0KLSAgICBpZighcENoYXJJbmZvKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgc3dpdGNoKHBDaGFySW5mby0+bV9Vbmljb2RlKSB7DQotICAgICAgICBjYXNlIDB4MjoNCi0gICAgICAgIGNhc2UgMHgzOg0KLSAgICAgICAgY2FzZSAweDkzOg0KLSAgICAgICAgY2FzZSAweDk0Og0KLSAgICAgICAgY2FzZSAweDk2Og0KLSAgICAgICAgY2FzZSAweDk3Og0KLSAgICAgICAgY2FzZSAweDk4Og0KLSAgICAgICAgY2FzZSAweGZmZmU6DQotICAgICAgICAgICAgaWYocENoYXJJbmZvLT5tX0ZsYWcgPT0gRlBERlRFWFRfQ0hBUl9IWVBIRU4pIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BERl9UZXh0UGFnZTo6UGFyc2VUZXh0UGFnZSgpDQotew0KLSAgICBpZiAoIW1fcFBhZ2UpIHsNCi0gICAgICAgIG1fSXNQYXJzZXJlZCA9IEZBTFNFOw0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fSXNQYXJzZXJlZCA9IEZBTFNFOw0KLSAgICBtX1RleHRCdWYuQ2xlYXIoKTsNCi0gICAgbV9jaGFyTGlzdC5SZW1vdmVBbGwoKTsNCi0gICAgbV9wUHJlVGV4dE9iaiA9IE5VTEw7DQotICAgIFByb2Nlc3NPYmplY3QoKTsNCi0gICAgbV9Jc1BhcnNlcmVkID0gVFJVRTsNCi0gICAgaWYoIW1fUGFyc2VPcHRpb25zLm1fYkdldENoYXJDb2RlT25seSkgew0KLSAgICAgICAgbV9DaGFySW5kZXguUmVtb3ZlQWxsKCk7DQotICAgICAgICBpbnQgbkNvdW50ID0gbV9jaGFyTGlzdC5HZXRTaXplKCk7DQotICAgICAgICBpZihuQ291bnQpIHsNCi0gICAgICAgICAgICBtX0NoYXJJbmRleC5BZGQoMCk7DQotICAgICAgICB9DQotICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbkNvdW50OyBpKyspIHsNCi0gICAgICAgICAgICBpbnQgaW5kZXhTaXplID0gbV9DaGFySW5kZXguR2V0U2l6ZSgpOw0KLSAgICAgICAgICAgIEZYX0JPT0wgYk5vcm1hbCA9IEZBTFNFOw0KLSAgICAgICAgICAgIFBBR0VDSEFSX0lORk8gY2hhcmluZm8gPSAqKFBBR0VDSEFSX0lORk8qKW1fY2hhckxpc3QuR2V0QXQoaSk7DQotICAgICAgICAgICAgaWYoY2hhcmluZm8ubV9GbGFnID09IEZQREZURVhUX0NIQVJfR0VORVJBVEVEKSB7DQotICAgICAgICAgICAgICAgIGJOb3JtYWwgPSBUUlVFOw0KLSAgICAgICAgICAgIH0NCi0jaWZkZWYgRk9YSVRfQ0hST01FX0JVSUxEDQotICAgICAgICAgICAgZWxzZSBpZihjaGFyaW5mby5tX1VuaWNvZGUgPT0gMCB8fCBJc0NvbnRyb2xDaGFyKCZjaGFyaW5mbykpDQotI2Vsc2UNCi0gICAgICAgICAgICBlbHNlIGlmKGNoYXJpbmZvLm1fVW5pY29kZSA9PSAwKQ0KLSNlbmRpZg0KLSAgICAgICAgICAgICAgICBiTm9ybWFsID0gRkFMU0U7DQotICAgICAgICAgICAgZWxzZSB7DQotICAgICAgICAgICAgICAgIGJOb3JtYWwgPSBUUlVFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZihiTm9ybWFsKSB7DQotICAgICAgICAgICAgICAgIGlmKGluZGV4U2l6ZSAlIDIpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fQ2hhckluZGV4LkFkZCgxKTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmKGluZGV4U2l6ZSA8PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBtX0NoYXJJbmRleC5TZXRBdChpbmRleFNpemUgLSAxLCBtX0NoYXJJbmRleC5HZXRBdChpbmRleFNpemUgLSAxKSArIDEpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgaWYoaW5kZXhTaXplICUgMikgew0KLSAgICAgICAgICAgICAgICAgICAgaWYoaW5kZXhTaXplIDw9IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIG1fQ2hhckluZGV4LlNldEF0KGluZGV4U2l6ZSAtIDEsIGkgKyAxKTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fQ2hhckluZGV4LkFkZChpICsgMSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpbnQgaW5kZXhTaXplID0gbV9DaGFySW5kZXguR2V0U2l6ZSgpOw0KLSAgICAgICAgaWYoaW5kZXhTaXplICUgMikgew0KLSAgICAgICAgICAgIG1fQ2hhckluZGV4LlJlbW92ZUF0KGluZGV4U2l6ZSAtIDEpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1pbnQJQ1BERl9UZXh0UGFnZTo6Q291bnRDaGFycygpIGNvbnN0DQotew0KLSAgICBpZihtX1BhcnNlT3B0aW9ucy5tX2JHZXRDaGFyQ29kZU9ubHkpIHsNCi0gICAgICAgIHJldHVybiBtX1RleHRCdWYuR2V0U2l6ZSgpOw0KLSAgICB9DQotICAgIHJldHVybiBtX2NoYXJMaXN0LkdldFNpemUoKTsNCi19DQotaW50IENQREZfVGV4dFBhZ2U6OkNoYXJJbmRleEZyb21UZXh0SW5kZXgoaW50IFRleHRJbmRleCkgY29uc3QNCi17DQotICAgIGludCBpbmRleFNpemUgPSBtX0NoYXJJbmRleC5HZXRTaXplKCk7DQotICAgIGludCBjb3VudCA9IDA7DQotICAgIGZvcihpbnQgaSA9IDA7IGkgPCBpbmRleFNpemU7IGkgKz0gMikgew0KLSAgICAgICAgY291bnQgKz0gbV9DaGFySW5kZXguR2V0QXQoaSArIDEpOw0KLSAgICAgICAgaWYoY291bnQgPiBUZXh0SW5kZXgpIHsNCi0gICAgICAgICAgICByZXR1cm4gCVRleHRJbmRleCAtIGNvdW50ICsgbV9DaGFySW5kZXguR2V0QXQoaSArIDEpICsgbV9DaGFySW5kZXguR2V0QXQoaSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIC0xOw0KLX0NCi1pbnQgQ1BERl9UZXh0UGFnZTo6VGV4dEluZGV4RnJvbUNoYXJJbmRleChpbnQgQ2hhckluZGV4KSBjb25zdA0KLXsNCi0gICAgaW50IGluZGV4U2l6ZSA9IG1fQ2hhckluZGV4LkdldFNpemUoKTsNCi0gICAgaW50IGNvdW50ID0gMDsNCi0gICAgZm9yKGludCBpID0gMDsgaSA8IGluZGV4U2l6ZTsgaSArPSAyKSB7DQotICAgICAgICBjb3VudCArPSBtX0NoYXJJbmRleC5HZXRBdChpICsgMSk7DQotICAgICAgICBpZihtX0NoYXJJbmRleC5HZXRBdChpICsgMSkgKyBtX0NoYXJJbmRleC5HZXRBdChpKSA+IENoYXJJbmRleCkgew0KLSAgICAgICAgICAgIGlmKENoYXJJbmRleCAtIG1fQ2hhckluZGV4LkdldEF0KGkpIDwgMCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybiAJQ2hhckluZGV4IC0gbV9DaGFySW5kZXguR2V0QXQoaSkgKyBjb3VudCAtIG1fQ2hhckluZGV4LkdldEF0KGkgKyAxKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gLTE7DQotfQ0KLXZvaWQgQ1BERl9UZXh0UGFnZTo6R2V0UmVjdEFycmF5KGludCBzdGFydCwgaW50IG5Db3VudCwgQ0ZYX1JlY3RBcnJheSYgcmVjdEFycmF5KSBjb25zdA0KLXsNCi0gICAgaWYobV9QYXJzZU9wdGlvbnMubV9iR2V0Q2hhckNvZGVPbmx5KSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYoc3RhcnQgPCAwIHx8IG5Db3VudCA9PSAwKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKCFtX0lzUGFyc2VyZWQpCXsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBQQUdFQ0hBUl9JTkZPCQlpbmZvX2N1cmNoYXI7DQotICAgIENQREZfVGV4dE9iamVjdCoJcEN1ck9iaiA9IE5VTEw7DQotICAgIENGWF9GbG9hdFJlY3QJCXJlY3Q7DQotICAgIGludAkJCQkJY3VyUG9zID0gc3RhcnQ7DQotICAgIEZYX0JPT0wJCQkJZmxhZ05ld1JlY3QgPSBUUlVFOw0KLSAgICBpZiAobkNvdW50ICsgc3RhcnQgPiBtX2NoYXJMaXN0LkdldFNpemUoKSB8fCBuQ291bnQgPT0gLTEpIHsNCi0gICAgICAgIG5Db3VudCA9IG1fY2hhckxpc3QuR2V0U2l6ZSgpIC0gc3RhcnQ7DQotICAgIH0NCi0gICAgd2hpbGUgKG5Db3VudC0tKSB7DQotICAgICAgICBpbmZvX2N1cmNoYXIgPSAqKFBBR0VDSEFSX0lORk8qKW1fY2hhckxpc3QuR2V0QXQoY3VyUG9zKyspOw0KLSAgICAgICAgaWYgKGluZm9fY3VyY2hhci5tX0ZsYWcgPT0gRlBERlRFWFRfQ0hBUl9HRU5FUkFURUQpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKGluZm9fY3VyY2hhci5tX0NoYXJCb3guV2lkdGgoKSA8IDAuMDEgfHwgaW5mb19jdXJjaGFyLm1fQ2hhckJveC5IZWlnaHQoKSA8IDAuMDEpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKCFwQ3VyT2JqKSB7DQotICAgICAgICAgICAgcEN1ck9iaiA9IGluZm9fY3VyY2hhci5tX3BUZXh0T2JqOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBDdXJPYmogIT0gaW5mb19jdXJjaGFyLm1fcFRleHRPYmopIHsNCi0gICAgICAgICAgICByZWN0QXJyYXkuQWRkKHJlY3QpOw0KLSAgICAgICAgICAgIHBDdXJPYmogPSBpbmZvX2N1cmNoYXIubV9wVGV4dE9iajsNCi0gICAgICAgICAgICBmbGFnTmV3UmVjdCA9IFRSVUU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoZmxhZ05ld1JlY3QpIHsNCi0gICAgICAgICAgICBGWF9GTE9BVCBvcmdYID0gaW5mb19jdXJjaGFyLm1fT3JpZ2luWCwgb3JnWSA9IGluZm9fY3VyY2hhci5tX09yaWdpblk7DQotICAgICAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXgsIG1hdHJpeF9yZXZlcnNlOw0KLSAgICAgICAgICAgIGluZm9fY3VyY2hhci5tX3BUZXh0T2JqLT5HZXRUZXh0TWF0cml4KCZtYXRyaXgpOw0KLSAgICAgICAgICAgIG1hdHJpeC5Db25jYXQoaW5mb19jdXJjaGFyLm1fTWF0cml4KTsNCi0gICAgICAgICAgICBtYXRyaXhfcmV2ZXJzZS5TZXRSZXZlcnNlKG1hdHJpeCk7DQotICAgICAgICAgICAgbWF0cml4X3JldmVyc2UuVHJhbnNmb3JtKG9yZ1gsIG9yZ1kpOw0KLSAgICAgICAgICAgIHJlY3QubGVmdCA9IGluZm9fY3VyY2hhci5tX0NoYXJCb3gubGVmdDsNCi0gICAgICAgICAgICByZWN0LnJpZ2h0ID0gaW5mb19jdXJjaGFyLm1fQ2hhckJveC5yaWdodDsNCi0gICAgICAgICAgICBpZiAocEN1ck9iai0+R2V0Rm9udCgpLT5HZXRUeXBlRGVzY2VudCgpKSB7DQotICAgICAgICAgICAgICAgIHJlY3QuYm90dG9tID0gb3JnWSArIHBDdXJPYmotPkdldEZvbnQoKS0+R2V0VHlwZURlc2NlbnQoKSAqIHBDdXJPYmotPkdldEZvbnRTaXplKCkgLyAxMDAwOw0KLSAgICAgICAgICAgICAgICBGWF9GTE9BVCB4UG9zVGVtcCA9IG9yZ1g7DQotICAgICAgICAgICAgICAgIG1hdHJpeC5UcmFuc2Zvcm0oeFBvc1RlbXAsIHJlY3QuYm90dG9tKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICByZWN0LmJvdHRvbSA9IGluZm9fY3VyY2hhci5tX0NoYXJCb3guYm90dG9tOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAocEN1ck9iai0+R2V0Rm9udCgpLT5HZXRUeXBlQXNjZW50KCkpIHsNCi0gICAgICAgICAgICAgICAgcmVjdC50b3AgPSBvcmdZICsgcEN1ck9iai0+R2V0Rm9udCgpLT5HZXRUeXBlQXNjZW50KCkgKiBwQ3VyT2JqLT5HZXRGb250U2l6ZSgpIC8gMTAwMDsNCi0gICAgICAgICAgICAgICAgRlhfRkxPQVQgeFBvc1RlbXAgPSBvcmdYICsgR2V0Q2hhcldpZHRoKGluZm9fY3VyY2hhci5tX0NoYXJDb2RlLCBwQ3VyT2JqLT5HZXRGb250KCkpICogcEN1ck9iai0+R2V0Rm9udFNpemUoKSAvIDEwMDA7DQotICAgICAgICAgICAgICAgIG1hdHJpeC5UcmFuc2Zvcm0oeFBvc1RlbXAsIHJlY3QudG9wKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICByZWN0LnRvcCA9IGluZm9fY3VyY2hhci5tX0NoYXJCb3gudG9wOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBmbGFnTmV3UmVjdCA9IEZBTFNFOw0KLSAgICAgICAgICAgIHJlY3QgPSBpbmZvX2N1cmNoYXIubV9DaGFyQm94Ow0KLSAgICAgICAgICAgIHJlY3QuTm9ybWFsaXplKCk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGluZm9fY3VyY2hhci5tX0NoYXJCb3guTm9ybWFsaXplKCk7DQotICAgICAgICAgICAgaWYgKHJlY3QubGVmdCA+IGluZm9fY3VyY2hhci5tX0NoYXJCb3gubGVmdCkgew0KLSAgICAgICAgICAgICAgICByZWN0LmxlZnQgPSBpbmZvX2N1cmNoYXIubV9DaGFyQm94LmxlZnQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChyZWN0LnJpZ2h0IDwgaW5mb19jdXJjaGFyLm1fQ2hhckJveC5yaWdodCkgew0KLSAgICAgICAgICAgICAgICByZWN0LnJpZ2h0ID0gaW5mb19jdXJjaGFyLm1fQ2hhckJveC5yaWdodDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKCByZWN0LnRvcCA8IGluZm9fY3VyY2hhci5tX0NoYXJCb3gudG9wKSB7DQotICAgICAgICAgICAgICAgIHJlY3QudG9wID0gaW5mb19jdXJjaGFyLm1fQ2hhckJveC50b3A7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChyZWN0LmJvdHRvbSA+IGluZm9fY3VyY2hhci5tX0NoYXJCb3guYm90dG9tKSB7DQotICAgICAgICAgICAgICAgIHJlY3QuYm90dG9tID0gaW5mb19jdXJjaGFyLm1fQ2hhckJveC5ib3R0b207DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJlY3RBcnJheS5BZGQocmVjdCk7DQotICAgIHJldHVybjsNCi19DQotaW50IENQREZfVGV4dFBhZ2U6OkdldEluZGV4QXRQb3MoQ1BERl9Qb2ludCBwb2ludCAsIEZYX0ZMT0FUIHhUb3JlbGFuY2UsIEZYX0ZMT0FUIHlUb3JlbGFuY2UpIGNvbnN0DQotew0KLSAgICBpZihtX1BhcnNlT3B0aW9ucy5tX2JHZXRDaGFyQ29kZU9ubHkpIHsNCi0gICAgICAgIHJldHVybiAtMzsNCi0gICAgfQ0KLSAgICBpZiAoIW1fSXNQYXJzZXJlZCkJew0KLSAgICAgICAgcmV0dXJuCS0zOw0KLSAgICB9DQotICAgIEZYX0ZMT0FUIGRpc3RhbmNlID0gMDsNCi0gICAgaW50IHBvcyA9IDA7DQotICAgIGludCBOZWFyUG9zID0gLTE7DQotICAgIGRvdWJsZSB4ZGlmID0gNTAwMCwgeWRpZiA9IDUwMDA7DQotICAgIHdoaWxlKHBvcyA8IG1fY2hhckxpc3QuR2V0U2l6ZSgpKSB7DQotICAgICAgICBQQUdFQ0hBUl9JTkZPIGNoYXJpbmZvID0gKihQQUdFQ0hBUl9JTkZPKikobV9jaGFyTGlzdC5HZXRBdChwb3MpKTsNCi0gICAgICAgIENGWF9GbG9hdFJlY3QgY2hhcnJlY3QgPSBjaGFyaW5mby5tX0NoYXJCb3g7DQotICAgICAgICBpZiAoY2hhcnJlY3QuQ29udGFpbnMocG9pbnQueCwgcG9pbnQueSkpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICh4VG9yZWxhbmNlID4gMCB8fCB5VG9yZWxhbmNlID4gMCkgew0KLSAgICAgICAgICAgIENGWF9GbG9hdFJlY3QgY2hhclJlY3RFeHQ7DQotICAgICAgICAgICAgY2hhcnJlY3QuTm9ybWFsaXplKCk7DQotICAgICAgICAgICAgY2hhclJlY3RFeHQubGVmdCA9IGNoYXJyZWN0LmxlZnQgLSB4VG9yZWxhbmNlIC8gMjsNCi0gICAgICAgICAgICBjaGFyUmVjdEV4dC5yaWdodCA9IGNoYXJyZWN0LnJpZ2h0ICsgeFRvcmVsYW5jZSAvIDI7DQotICAgICAgICAgICAgY2hhclJlY3RFeHQudG9wID0gY2hhcnJlY3QudG9wICsgeVRvcmVsYW5jZSAvIDI7DQotICAgICAgICAgICAgY2hhclJlY3RFeHQuYm90dG9tID0gY2hhcnJlY3QuYm90dG9tIC0geVRvcmVsYW5jZSAvIDI7DQotICAgICAgICAgICAgaWYgKGNoYXJSZWN0RXh0LkNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7DQotICAgICAgICAgICAgICAgIGRvdWJsZSBjdXJYZGlmLCBjdXJZZGlmOw0KLSAgICAgICAgICAgICAgICBjdXJYZGlmID0gRlhTWVNfZmFicyhwb2ludC54IC0gY2hhcnJlY3QubGVmdCkgPCBGWFNZU19mYWJzKHBvaW50LnggLSBjaGFycmVjdC5yaWdodCkgPyBGWFNZU19mYWJzKHBvaW50LnggLSBjaGFycmVjdC5sZWZ0KSA6IEZYU1lTX2ZhYnMocG9pbnQueCAtIGNoYXJyZWN0LnJpZ2h0KTsNCi0gICAgICAgICAgICAgICAgY3VyWWRpZiA9IEZYU1lTX2ZhYnMocG9pbnQueSAtIGNoYXJyZWN0LmJvdHRvbSkgPCBGWFNZU19mYWJzKHBvaW50LnkgLSBjaGFycmVjdC50b3AJKSA/IEZYU1lTX2ZhYnMocG9pbnQueSAtIGNoYXJyZWN0LmJvdHRvbSkgOiBGWFNZU19mYWJzKHBvaW50LnkgLSBjaGFycmVjdC50b3ApOw0KLSAgICAgICAgICAgICAgICBpZiAoY3VyWWRpZiArIGN1clhkaWYgPCB4ZGlmICsgeWRpZikgew0KLSAgICAgICAgICAgICAgICAgICAgeWRpZiA9IGN1cllkaWY7DQotICAgICAgICAgICAgICAgICAgICB4ZGlmID0gY3VyWGRpZjsNCi0gICAgICAgICAgICAgICAgICAgIE5lYXJQb3MgPSBwb3M7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICArK3BvczsNCi0gICAgfQ0KLSAgICBpZiAocG9zID49IG1fY2hhckxpc3QuR2V0U2l6ZSgpKSB7DQotICAgICAgICBwb3MgPSBOZWFyUG9zOw0KLSAgICB9DQotICAgIHJldHVybiBwb3M7DQotfQ0KLUNGWF9XaWRlU3RyaW5nIENQREZfVGV4dFBhZ2U6OkdldFRleHRCeVJlY3QoQ0ZYX0Zsb2F0UmVjdCByZWN0KSBjb25zdA0KLXsNCi0gICAgQ0ZYX1dpZGVTdHJpbmcgc3RyVGV4dDsNCi0gICAgaWYobV9QYXJzZU9wdGlvbnMubV9iR2V0Q2hhckNvZGVPbmx5IHx8ICFtX0lzUGFyc2VyZWQpIHsNCi0gICAgICAgIHJldHVybiBzdHJUZXh0Ow0KLSAgICB9DQotICAgIGludCBuQ291bnQgPSBtX2NoYXJMaXN0LkdldFNpemUoKTsNCi0gICAgaW50IHBvcyA9IDA7DQotICAgIEZYX0ZMT0FUIHBvc3kgPSAwOw0KLSAgICBGWF9CT09MIElzQ29udGFpblByZUNoYXIgPSBGQUxTRTsNCi0gICAgRlhfQk9PTAlJU0FkZExpbmVGZWVkID0gRkFMU0U7DQotICAgIHdoaWxlIChwb3MgPCBuQ291bnQpIHsNCi0gICAgICAgIFBBR0VDSEFSX0lORk8gY2hhcmluZm8gPSAqKFBBR0VDSEFSX0lORk8qKW1fY2hhckxpc3QuR2V0QXQocG9zKyspOw0KLSAgICAgICAgaWYgKElzUmVjdEludGVyc2VjdChyZWN0LCBjaGFyaW5mby5tX0NoYXJCb3gpKSB7DQotICAgICAgICAgICAgaWYgKEZYU1lTX2ZhYnMocG9zeSAtIGNoYXJpbmZvLm1fT3JpZ2luWSkgPiAwICYmICFJc0NvbnRhaW5QcmVDaGFyICYmIElTQWRkTGluZUZlZWQpIHsNCi0gICAgICAgICAgICAgICAgcG9zeSA9IGNoYXJpbmZvLm1fT3JpZ2luWTsNCi0gICAgICAgICAgICAgICAgaWYgKHN0clRleHQuR2V0TGVuZ3RoKCkgPiAwKSB7DQotICAgICAgICAgICAgICAgICAgICBzdHJUZXh0ICs9IEwiXHJcbiI7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgSXNDb250YWluUHJlQ2hhciA9IFRSVUU7DQotICAgICAgICAgICAgSVNBZGRMaW5lRmVlZCA9IEZBTFNFOw0KLSAgICAgICAgICAgIGlmIChjaGFyaW5mby5tX1VuaWNvZGUpIHsNCi0gICAgICAgICAgICAgICAgc3RyVGV4dCArPSBjaGFyaW5mby5tX1VuaWNvZGU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIGlmIChjaGFyaW5mby5tX1VuaWNvZGUgPT0gMzIpIHsNCi0gICAgICAgICAgICBpZiAoSXNDb250YWluUHJlQ2hhciAmJiBjaGFyaW5mby5tX1VuaWNvZGUpIHsNCi0gICAgICAgICAgICAgICAgc3RyVGV4dCArPSBjaGFyaW5mby5tX1VuaWNvZGU7DQotICAgICAgICAgICAgICAgIElzQ29udGFpblByZUNoYXIgPSBGQUxTRTsNCi0gICAgICAgICAgICAgICAgSVNBZGRMaW5lRmVlZCA9IEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgSXNDb250YWluUHJlQ2hhciA9IEZBTFNFOw0KLSAgICAgICAgICAgIElTQWRkTGluZUZlZWQgPSBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBzdHJUZXh0Ow0KLX0NCi12b2lkIENQREZfVGV4dFBhZ2U6OkdldFJlY3RzQXJyYXlCeVJlY3QoQ0ZYX0Zsb2F0UmVjdCByZWN0LCBDRlhfUmVjdEFycmF5JiByZXNSZWN0QXJyYXkpIGNvbnN0DQotew0KLSAgICBpZihtX1BhcnNlT3B0aW9ucy5tX2JHZXRDaGFyQ29kZU9ubHkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAoIW1fSXNQYXJzZXJlZCkJew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENGWF9GbG9hdFJlY3QJCWN1clJlY3Q7DQotICAgIEZYX0JPT0wJCQkJZmxhZ05ld1JlY3QgPSBUUlVFOw0KLSAgICBDUERGX1RleHRPYmplY3QqCXBDdXJPYmogPSBOVUxMOw0KLSAgICBpbnQgbkNvdW50ID0gbV9jaGFyTGlzdC5HZXRTaXplKCk7DQotICAgIGludCBwb3MgPSAwOw0KLSAgICB3aGlsZSAocG9zIDwgbkNvdW50KSB7DQotICAgICAgICBQQUdFQ0hBUl9JTkZPIGluZm9fY3VyY2hhciA9ICooUEFHRUNIQVJfSU5GTyopbV9jaGFyTGlzdC5HZXRBdChwb3MrKyk7DQotICAgICAgICBpZiAoaW5mb19jdXJjaGFyLm1fRmxhZyA9PSBGUERGVEVYVF9DSEFSX0dFTkVSQVRFRCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYocG9zID09IDQ5NCkgew0KLSAgICAgICAgICAgIGludCBhID0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChJc1JlY3RJbnRlcnNlY3QocmVjdCwgaW5mb19jdXJjaGFyLm1fQ2hhckJveCkpIHsNCi0gICAgICAgICAgICBpZighcEN1ck9iaikgew0KLSAgICAgICAgICAgICAgICBwQ3VyT2JqID0gaW5mb19jdXJjaGFyLm1fcFRleHRPYmo7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChwQ3VyT2JqICE9IGluZm9fY3VyY2hhci5tX3BUZXh0T2JqKSB7DQotICAgICAgICAgICAgICAgIHJlc1JlY3RBcnJheS5BZGQoY3VyUmVjdCk7DQotICAgICAgICAgICAgICAgIHBDdXJPYmogPSBpbmZvX2N1cmNoYXIubV9wVGV4dE9iajsNCi0gICAgICAgICAgICAgICAgZmxhZ05ld1JlY3QgPSBUUlVFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoZmxhZ05ld1JlY3QpIHsNCi0gICAgICAgICAgICAgICAgY3VyUmVjdCA9IGluZm9fY3VyY2hhci5tX0NoYXJCb3g7DQotICAgICAgICAgICAgICAgIGZsYWdOZXdSZWN0ID0gRkFMU0U7DQotICAgICAgICAgICAgICAgIGN1clJlY3QuTm9ybWFsaXplKCk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgaW5mb19jdXJjaGFyLm1fQ2hhckJveC5Ob3JtYWxpemUoKTsNCi0gICAgICAgICAgICAgICAgaWYgKGN1clJlY3QubGVmdCA+IGluZm9fY3VyY2hhci5tX0NoYXJCb3gubGVmdCkgew0KLSAgICAgICAgICAgICAgICAgICAgY3VyUmVjdC5sZWZ0ID0gaW5mb19jdXJjaGFyLm1fQ2hhckJveC5sZWZ0Ow0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChjdXJSZWN0LnJpZ2h0IDwgaW5mb19jdXJjaGFyLm1fQ2hhckJveC5yaWdodCkgew0KLSAgICAgICAgICAgICAgICAgICAgY3VyUmVjdC5yaWdodCA9IGluZm9fY3VyY2hhci5tX0NoYXJCb3gucmlnaHQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKCBjdXJSZWN0LnRvcCA8IGluZm9fY3VyY2hhci5tX0NoYXJCb3gudG9wKSB7DQotICAgICAgICAgICAgICAgICAgICBjdXJSZWN0LnRvcCA9IGluZm9fY3VyY2hhci5tX0NoYXJCb3gudG9wOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChjdXJSZWN0LmJvdHRvbSA+IGluZm9fY3VyY2hhci5tX0NoYXJCb3guYm90dG9tKSB7DQotICAgICAgICAgICAgICAgICAgICBjdXJSZWN0LmJvdHRvbSA9IGluZm9fY3VyY2hhci5tX0NoYXJCb3guYm90dG9tOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJlc1JlY3RBcnJheS5BZGQoY3VyUmVjdCk7DQotICAgIHJldHVybjsNCi19DQotaW50CUNQREZfVGV4dFBhZ2U6OkdldEluZGV4QXRQb3MoRlhfRkxPQVQgeCwgRlhfRkxPQVQgeSwgRlhfRkxPQVQgeFRvcmVsYW5jZSwgRlhfRkxPQVQgeVRvcmVsYW5jZSkgY29uc3QNCi17DQotICAgIGlmKG1fUGFyc2VPcHRpb25zLm1fYkdldENoYXJDb2RlT25seSkgew0KLSAgICAgICAgcmV0dXJuIC0zOw0KLSAgICB9DQotICAgIENQREZfUG9pbnQgcG9pbnQoeCwgeSk7DQotICAgIHJldHVybiBHZXRJbmRleEF0UG9zKHBvaW50LCB4VG9yZWxhbmNlLCB5VG9yZWxhbmNlKTsNCi19DQotaW50IENQREZfVGV4dFBhZ2U6OkdldE9yZGVyQnlEaXJlY3Rpb24oaW50IG9yZGVyLCBpbnQgZGlyZWN0aW9uKSBjb25zdA0KLXsNCi0gICAgaWYobV9QYXJzZU9wdGlvbnMubV9iR2V0Q2hhckNvZGVPbmx5KSB7DQotICAgICAgICByZXR1cm4gLTM7DQotICAgIH0NCi0gICAgaWYgKCFtX0lzUGFyc2VyZWQpIHsNCi0gICAgICAgIHJldHVybiAtMzsNCi0gICAgfQ0KLSAgICBpZiAoZGlyZWN0aW9uID09IEZQREZURVhUX1JJR0hUIHx8IGRpcmVjdGlvbiA9PSBGUERGVEVYVF9MRUZUKSB7DQotICAgICAgICBvcmRlciArPSBkaXJlY3Rpb247DQotICAgICAgICB3aGlsZShvcmRlciA+PSAwICYmIG9yZGVyIDwgbV9jaGFyTGlzdC5HZXRTaXplKCkpIHsNCi0gICAgICAgICAgICBQQUdFQ0hBUl9JTkZPIGNpbmZvID0gKihQQUdFQ0hBUl9JTkZPKiltX2NoYXJMaXN0LkdldEF0KG9yZGVyKTsNCi0gICAgICAgICAgICBpZiAoY2luZm8ubV9GbGFnICE9IEZQREZURVhUX0NIQVJfR0VORVJBVEVEKSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGlmIChjaW5mby5tX1VuaWNvZGUgPT0gVEVYVF9MSU5FRkVFRF9DSEFSIHx8IGNpbmZvLm1fVW5pY29kZSA9PSBURVhUX1JFVFVSTl9DSEFSKSB7DQotICAgICAgICAgICAgICAgICAgICBvcmRlciArPSBkaXJlY3Rpb247DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChvcmRlciA+PSBtX2NoYXJMaXN0LkdldFNpemUoKSkgew0KLSAgICAgICAgICAgIG9yZGVyID0gLTI7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gb3JkZXI7DQotICAgIH0NCi0gICAgUEFHRUNIQVJfSU5GTyBjaGFyaW5mbzsNCi0gICAgY2hhcmluZm8gPSAqKFBBR0VDSEFSX0lORk8qKW1fY2hhckxpc3QuR2V0QXQob3JkZXIpOw0KLSAgICBDUERGX1BvaW50IGN1clBvcyhjaGFyaW5mby5tX09yaWdpblgsIGNoYXJpbmZvLm1fT3JpZ2luWSk7DQotICAgIEZYX0ZMT0FUIGRpZlBvc1kgPSAwLjAsIG1pblhkaWYgPSAxMDAwOw0KLSAgICBpbnQJbWluSW5kZXggPSAtMjsNCi0gICAgaW50IGluZGV4ID0gb3JkZXI7DQotICAgIEZYX0ZMT0FUIGhlaWdodCA9IGNoYXJpbmZvLm1fQ2hhckJveC5IZWlnaHQoKTsNCi0gICAgaWYgKGRpcmVjdGlvbiA9PSBGUERGVEVYVF9VUCkgew0KLSAgICAgICAgbWluSW5kZXggPSAtMTsNCi0gICAgICAgIHdoaWxlICgxKSB7DQotICAgICAgICAgICAgaWYgKC0taW5kZXggPCAwKQl7DQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgY2hhcmluZm8gPSAqKFBBR0VDSEFSX0lORk8qKW1fY2hhckxpc3QuR2V0QXQoaW5kZXgpOw0KLSAgICAgICAgICAgIGlmIChGWFNZU19mYWJzKGNoYXJpbmZvLm1fT3JpZ2luWSAtIGN1clBvcy55KSA+IEZYX01BWChoZWlnaHQsIGNoYXJpbmZvLm1fQ2hhckJveC5IZWlnaHQoKSkgLyAyKSB7DQotICAgICAgICAgICAgICAgIGRpZlBvc1kgPSBjaGFyaW5mby5tX09yaWdpblk7DQotICAgICAgICAgICAgICAgIG1pbkluZGV4ID0gaW5kZXg7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0ZMT0FUIFByZVhkaWYgPSBjaGFyaW5mby5tX09yaWdpblggLSBjdXJQb3MueDsNCi0gICAgICAgIG1pblhkaWYgPSBQcmVYZGlmOw0KLSAgICAgICAgaWYgKFByZVhkaWYgPT0gMCkJew0KLSAgICAgICAgICAgIHJldHVybiBpbmRleDsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0ZMT0FUIGN1clhkaWYgPSAwOw0KLSAgICAgICAgd2hpbGUgKC0taW5kZXggPj0gMCkgew0KLSAgICAgICAgICAgIGNoYXJpbmZvID0gKihQQUdFQ0hBUl9JTkZPKiltX2NoYXJMaXN0LkdldEF0KGluZGV4KTsNCi0gICAgICAgICAgICBpZiAoZGlmUG9zWSAhPSBjaGFyaW5mby5tX09yaWdpblkpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGN1clhkaWYgPSBjaGFyaW5mby5tX09yaWdpblggLSBjdXJQb3MueDsNCi0gICAgICAgICAgICBpZiAoY3VyWGRpZiA9PSAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaW50IHNpZ25mbGFnID0gMDsNCi0gICAgICAgICAgICBpZiAoY3VyWGRpZiA+IDApIHsNCi0gICAgICAgICAgICAgICAgc2lnbmZsYWcgPSAxOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHNpZ25mbGFnID0gLTE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChzaWduZmxhZyAqIFByZVhkaWYgPCAwKSB7DQotICAgICAgICAgICAgICAgIGlmIChGWFNZU19mYWJzKFByZVhkaWYpIDwgRlhTWVNfZmFicyhjdXJYZGlmKSkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4ICsgMTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoRlhTWVNfZmFicyhjdXJYZGlmKSA8IEZYU1lTX2ZhYnMobWluWGRpZikpIHsNCi0gICAgICAgICAgICAgICAgbWluSW5kZXggPSBpbmRleDsNCi0gICAgICAgICAgICAgICAgbWluWGRpZiA9IGN1clhkaWY7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIFByZVhkaWYgPSBjdXJYZGlmOw0KLSAgICAgICAgICAgIGlmIChkaWZQb3NZICE9IGNoYXJpbmZvLm1fT3JpZ2luWSkgew0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gbWluSW5kZXg7DQotICAgIH0gZWxzZSBpZihGUERGVEVYVF9ET1dOKSB7DQotICAgICAgICBtaW5JbmRleCA9IC0yOw0KLSAgICAgICAgd2hpbGUgKDEpIHsNCi0gICAgICAgICAgICBpZiAoKytpbmRleCA+IG1fY2hhckxpc3QuR2V0U2l6ZSgpIC0gMSkJew0KLSAgICAgICAgICAgICAgICByZXR1cm4gbWluSW5kZXg7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNoYXJpbmZvID0gKihQQUdFQ0hBUl9JTkZPKiltX2NoYXJMaXN0LkdldEF0KGluZGV4KTsNCi0gICAgICAgICAgICBpZiAoRlhTWVNfZmFicyhjaGFyaW5mby5tX09yaWdpblkgLSBjdXJQb3MueSkgPiBGWF9NQVgoaGVpZ2h0LCBjaGFyaW5mby5tX0NoYXJCb3guSGVpZ2h0KCkpIC8gMikgew0KLSAgICAgICAgICAgICAgICBkaWZQb3NZID0gY2hhcmluZm8ubV9PcmlnaW5ZOw0KLSAgICAgICAgICAgICAgICBtaW5JbmRleCA9IGluZGV4Ow0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBGWF9GTE9BVCBQcmVYZGlmID0gY2hhcmluZm8ubV9PcmlnaW5YIC0gY3VyUG9zLng7DQotICAgICAgICBtaW5YZGlmID0gUHJlWGRpZjsNCi0gICAgICAgIGlmIChQcmVYZGlmID09IDApCXsNCi0gICAgICAgICAgICByZXR1cm4gaW5kZXg7DQotICAgICAgICB9DQotICAgICAgICBGWF9GTE9BVCBjdXJYZGlmID0gMDsNCi0gICAgICAgIHdoaWxlICgrK2luZGV4IDwgbV9jaGFyTGlzdC5HZXRTaXplKCkpIHsNCi0gICAgICAgICAgICBjaGFyaW5mbyA9ICooUEFHRUNIQVJfSU5GTyopbV9jaGFyTGlzdC5HZXRBdChpbmRleCk7DQotICAgICAgICAgICAgaWYgKGRpZlBvc1kgIT0gY2hhcmluZm8ubV9PcmlnaW5ZKSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjdXJYZGlmID0gY2hhcmluZm8ubV9PcmlnaW5YIC0gY3VyUG9zLng7DQotICAgICAgICAgICAgaWYgKGN1clhkaWYgPT0gMCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGludCBzaWduZmxhZyA9IDA7DQotICAgICAgICAgICAgaWYgKGN1clhkaWYgPiAwKSB7DQotICAgICAgICAgICAgICAgIHNpZ25mbGFnID0gMTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBzaWduZmxhZyA9IC0xOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoc2lnbmZsYWcgKiBQcmVYZGlmIDwgMCkgew0KLSAgICAgICAgICAgICAgICBpZiAoRlhTWVNfZmFicyhQcmVYZGlmKSA8IEZYU1lTX2ZhYnMoY3VyWGRpZikpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCAtIDE7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKEZYU1lTX2ZhYnMoY3VyWGRpZikgPCBGWFNZU19mYWJzKG1pblhkaWYpKSB7DQotICAgICAgICAgICAgICAgIG1pblhkaWYgPSBjdXJYZGlmOw0KLSAgICAgICAgICAgICAgICBtaW5JbmRleCA9IGluZGV4Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBQcmVYZGlmID0gY3VyWGRpZjsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBtaW5JbmRleDsNCi0gICAgfQ0KLX0NCi12b2lkIENQREZfVGV4dFBhZ2U6OkdldENoYXJJbmZvKGludCBpbmRleCwgRlBERl9DSEFSX0lORk8gJiBpbmZvKSBjb25zdA0KLXsNCi0gICAgaWYobV9QYXJzZU9wdGlvbnMubV9iR2V0Q2hhckNvZGVPbmx5KSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKCFtX0lzUGFyc2VyZWQpCXsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1fY2hhckxpc3QuR2V0U2l6ZSgpKQl7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgUEFHRUNIQVJfSU5GTyBjaGFyaW5mbzsNCi0gICAgY2hhcmluZm8gPSAqKFBBR0VDSEFSX0lORk8qKW1fY2hhckxpc3QuR2V0QXQoaW5kZXgpOw0KLSAgICBpbmZvLm1fQ2hhcmNvZGUgPSBjaGFyaW5mby5tX0NoYXJDb2RlOw0KLSAgICBpbmZvLm1fT3JpZ2luWCA9IGNoYXJpbmZvLm1fT3JpZ2luWDsNCi0gICAgaW5mby5tX09yaWdpblkgPSBjaGFyaW5mby5tX09yaWdpblk7DQotICAgIGluZm8ubV9Vbmljb2RlID0gY2hhcmluZm8ubV9Vbmljb2RlOw0KLSAgICBpbmZvLm1fRmxhZyA9IGNoYXJpbmZvLm1fRmxhZzsNCi0gICAgaW5mby5tX0NoYXJCb3ggPSBjaGFyaW5mby5tX0NoYXJCb3g7DQotICAgIGluZm8ubV9wVGV4dE9iaiA9IGNoYXJpbmZvLm1fcFRleHRPYmo7DQotICAgIGlmIChjaGFyaW5mby5tX3BUZXh0T2JqICYmIGNoYXJpbmZvLm1fcFRleHRPYmotPkdldEZvbnQoKSkgew0KLSAgICAgICAgaW5mby5tX0ZvbnRTaXplID0gY2hhcmluZm8ubV9wVGV4dE9iai0+R2V0Rm9udFNpemUoKTsNCi0gICAgfQ0KLSAgICBpbmZvLm1fTWF0cml4LkNvcHkoY2hhcmluZm8ubV9NYXRyaXgpOw0KLSAgICByZXR1cm47DQotfQ0KLXZvaWQgQ1BERl9UZXh0UGFnZTo6Q2hlY2tNYXJrZWRDb250ZW50T2JqZWN0KEZYX0lOVDMyJiBzdGFydCwgRlhfSU5UMzImIG5Db3VudCkgY29uc3QNCi17DQotICAgIFBBR0VDSEFSX0lORk8gY2hhcmluZm8gPSAqKFBBR0VDSEFSX0lORk8qKW1fY2hhckxpc3QuR2V0QXQoc3RhcnQpOw0KLSAgICBQQUdFQ0hBUl9JTkZPIGNoYXJpbmZvMiA9ICooUEFHRUNIQVJfSU5GTyopbV9jaGFyTGlzdC5HZXRBdChzdGFydCArIG5Db3VudCAtIDEpOw0KLSAgICBpZiAoRlBERlRFWFRfQ0hBUl9QSUVDRSAhPSBjaGFyaW5mby5tX0ZsYWcgJiYgRlBERlRFWFRfQ0hBUl9QSUVDRSAhPSBjaGFyaW5mbzIubV9GbGFnKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKEZQREZURVhUX0NIQVJfUElFQ0UgPT0gY2hhcmluZm8ubV9GbGFnKSB7DQotICAgICAgICBQQUdFQ0hBUl9JTkZPIGNoYXJpbmZvMSA9IGNoYXJpbmZvOw0KLSAgICAgICAgaW50IHN0YXJ0SW5kZXggPSBzdGFydDsNCi0gICAgICAgIHdoaWxlKEZQREZURVhUX0NIQVJfUElFQ0UgPT0gY2hhcmluZm8xLm1fRmxhZyAmJiBjaGFyaW5mbzEubV9JbmRleCA9PSBjaGFyaW5mby5tX0luZGV4KSB7DQotICAgICAgICAgICAgc3RhcnRJbmRleC0tOw0KLSAgICAgICAgICAgIGlmIChzdGFydEluZGV4IDwgMCkJew0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgY2hhcmluZm8xID0gKihQQUdFQ0hBUl9JTkZPKiltX2NoYXJMaXN0LkdldEF0KHN0YXJ0SW5kZXgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgc3RhcnRJbmRleCsrOw0KLSAgICAgICAgc3RhcnQgPSBzdGFydEluZGV4Ow0KLSAgICB9DQotICAgIGlmIChGUERGVEVYVF9DSEFSX1BJRUNFID09IGNoYXJpbmZvMi5tX0ZsYWcpIHsNCi0gICAgICAgIFBBR0VDSEFSX0lORk8gY2hhcmluZm8zID0gY2hhcmluZm8yOw0KLSAgICAgICAgaW50IGVuZEluZGV4ID0gc3RhcnQgKyBuQ291bnQgLSAxOw0KLSAgICAgICAgd2hpbGUoRlBERlRFWFRfQ0hBUl9QSUVDRSA9PSBjaGFyaW5mbzMubV9GbGFnICYmIGNoYXJpbmZvMy5tX0luZGV4ID09IGNoYXJpbmZvMi5tX0luZGV4KSB7DQotICAgICAgICAgICAgZW5kSW5kZXgrKzsNCi0gICAgICAgICAgICBpZiAoZW5kSW5kZXggPj0gbV9jaGFyTGlzdC5HZXRTaXplKCkpCXsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNoYXJpbmZvMyA9ICooUEFHRUNIQVJfSU5GTyopbV9jaGFyTGlzdC5HZXRBdChlbmRJbmRleCk7DQotICAgICAgICB9DQotICAgICAgICBlbmRJbmRleC0tOw0KLSAgICAgICAgbkNvdW50ID0gZW5kSW5kZXggLSBzdGFydCArIDE7DQotICAgIH0NCi19DQotQ0ZYX1dpZGVTdHJpbmcgQ1BERl9UZXh0UGFnZTo6R2V0UGFnZVRleHQoaW50IHN0YXJ0ICwgaW50IG5Db3VudCkgY29uc3QNCi17DQotICAgIGlmICghbV9Jc1BhcnNlcmVkIHx8IG5Db3VudCA9PSAwKSB7DQotICAgICAgICByZXR1cm4gTCIiOw0KLSAgICB9DQotICAgIGlmIChzdGFydCA8IDApIHsNCi0gICAgICAgIHN0YXJ0ID0gMDsNCi0gICAgfQ0KLSAgICBpZgkobkNvdW50ID09IC0xKSB7DQotICAgICAgICBuQ291bnQgPSBtX2NoYXJMaXN0LkdldFNpemUoKSAtIHN0YXJ0Ow0KLSAgICAgICAgcmV0dXJuIG1fVGV4dEJ1Zi5HZXRXaWRlU3RyaW5nKCkuTWlkKHN0YXJ0LCBtX1RleHRCdWYuR2V0V2lkZVN0cmluZygpLkdldExlbmd0aCgpKTsNCi0gICAgfQ0KLSAgICBpZihuQ291bnQgPD0gMCB8fCBtX2NoYXJMaXN0LkdldFNpemUoKSA8PSAwKSB7DQotICAgICAgICByZXR1cm4gTCIiOw0KLSAgICB9DQotICAgIGlmKG5Db3VudCArIHN0YXJ0ID4gbV9jaGFyTGlzdC5HZXRTaXplKCkgLSAxKSB7DQotICAgICAgICBuQ291bnQgPSBtX2NoYXJMaXN0LkdldFNpemUoKSAtIHN0YXJ0Ow0KLSAgICB9DQotICAgIGlmIChuQ291bnQgPD0gMCkgew0KLSAgICAgICAgcmV0dXJuIEwiIjsNCi0gICAgfQ0KLSAgICBDaGVja01hcmtlZENvbnRlbnRPYmplY3Qoc3RhcnQsIG5Db3VudCk7DQotICAgIGludCBzdGFydGluZGV4ID0gMDsNCi0gICAgUEFHRUNIQVJfSU5GTyBjaGFyaW5mbyA9ICooUEFHRUNIQVJfSU5GTyopbV9jaGFyTGlzdC5HZXRBdChzdGFydCk7DQotICAgIGludCBzdGFydE9mZnNldCA9IDA7DQotICAgIHdoaWxlKGNoYXJpbmZvLm1fSW5kZXggPT0gLTEpIHsNCi0gICAgICAgIHN0YXJ0T2Zmc2V0Kys7DQotICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPiBuQ291bnQgfHwgc3RhcnQgKyBzdGFydE9mZnNldCA+PSBtX2NoYXJMaXN0LkdldFNpemUoKSkJew0KLSAgICAgICAgICAgIHJldHVybiBMIiI7DQotICAgICAgICB9DQotICAgICAgICBjaGFyaW5mbyA9ICooUEFHRUNIQVJfSU5GTyopbV9jaGFyTGlzdC5HZXRBdChzdGFydCArIHN0YXJ0T2Zmc2V0KTsNCi0gICAgfQ0KLSAgICBzdGFydGluZGV4ID0gY2hhcmluZm8ubV9JbmRleDsNCi0gICAgY2hhcmluZm8gPSAqKFBBR0VDSEFSX0lORk8qKW1fY2hhckxpc3QuR2V0QXQoc3RhcnQgKyBuQ291bnQgLSAxKTsNCi0gICAgaW50IG5Db3VudE9mZnNldCA9IDA7DQotICAgIHdoaWxlIChjaGFyaW5mby5tX0luZGV4ID09IC0xKSB7DQotICAgICAgICBuQ291bnRPZmZzZXQrKzsNCi0gICAgICAgIGlmIChuQ291bnRPZmZzZXQgPj0gbkNvdW50KSB7DQotICAgICAgICAgICAgcmV0dXJuIEwiIjsNCi0gICAgICAgIH0NCi0gICAgICAgIGNoYXJpbmZvID0gKihQQUdFQ0hBUl9JTkZPKiltX2NoYXJMaXN0LkdldEF0KHN0YXJ0ICsgbkNvdW50IC0gbkNvdW50T2Zmc2V0IC0gMSk7DQotICAgIH0NCi0gICAgbkNvdW50ID0gc3RhcnQgKyBuQ291bnQgLSBuQ291bnRPZmZzZXQgLSBzdGFydGluZGV4Ow0KLSAgICBpZihuQ291bnQgPD0gMCkgew0KLSAgICAgICAgcmV0dXJuIEwiIjsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9UZXh0QnVmLkdldFdpZGVTdHJpbmcoKS5NaWQoc3RhcnRpbmRleCwgbkNvdW50KTsNCi19DQotaW50IENQREZfVGV4dFBhZ2U6OkNvdW50UmVjdHMoaW50IHN0YXJ0LCBpbnQgbkNvdW50KQ0KLXsNCi0gICAgaWYobV9QYXJzZU9wdGlvbnMubV9iR2V0Q2hhckNvZGVPbmx5KSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgaWYgKCFtX0lzUGFyc2VyZWQpCXsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBpZiAoc3RhcnQgPCAwKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgaWYgKG5Db3VudCA9PSAtMSB8fCBuQ291bnQgKyBzdGFydCA+IG1fY2hhckxpc3QuR2V0U2l6ZSgpICkgew0KLSAgICAgICAgbkNvdW50ID0gbV9jaGFyTGlzdC5HZXRTaXplKCkgLSBzdGFydDsNCi0gICAgfQ0KLSAgICBtX1NlbFJlY3RzLlJlbW92ZUFsbCgpOw0KLSAgICBHZXRSZWN0QXJyYXkoc3RhcnQsIG5Db3VudCwgbV9TZWxSZWN0cyk7DQotICAgIHJldHVybiBtX1NlbFJlY3RzLkdldFNpemUoKTsNCi19DQotdm9pZCBDUERGX1RleHRQYWdlOjpHZXRSZWN0KGludCByZWN0SW5kZXgsIEZYX0ZMT0FUJiBsZWZ0LCBGWF9GTE9BVCYgdG9wLCBGWF9GTE9BVCYgcmlnaHQsIEZYX0ZMT0FUICZib3R0b20pIGNvbnN0DQotew0KLSAgICBpZihtX1BhcnNlT3B0aW9ucy5tX2JHZXRDaGFyQ29kZU9ubHkpIHsNCi0gICAgICAgIHJldHVybiA7DQotICAgIH0NCi0gICAgaWYgKCFtX0lzUGFyc2VyZWQgfHwgcmVjdEluZGV4IDwgMCB8fCByZWN0SW5kZXggPj0gbV9TZWxSZWN0cy5HZXRTaXplKCkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBsZWZ0ID0gbV9TZWxSZWN0cy5HZXRBdChyZWN0SW5kZXgpLmxlZnQ7DQotICAgIHRvcCA9IG1fU2VsUmVjdHMuR2V0QXQocmVjdEluZGV4KS50b3A7DQotICAgIHJpZ2h0ID0gbV9TZWxSZWN0cy5HZXRBdChyZWN0SW5kZXgpLnJpZ2h0Ow0KLSAgICBib3R0b20gPSBtX1NlbFJlY3RzLkdldEF0KHJlY3RJbmRleCkuYm90dG9tOw0KLX0NCi1GWF9CT09MIENQREZfVGV4dFBhZ2U6OkdldEJhc2VsaW5lUm90YXRlKGludCBzdGFydCwgaW50IGVuZCwgaW50JiBSb3RhdGUpDQotew0KLSAgICBpZihtX1BhcnNlT3B0aW9ucy5tX2JHZXRDaGFyQ29kZU9ubHkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZihlbmQgPT0gc3RhcnQpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWF9GTE9BVCBkeCwgZHk7DQotICAgIEZQREZfQ0hBUl9JTkZPIGluZm8xLCBpbmZvMjsNCi0gICAgR2V0Q2hhckluZm8oc3RhcnQsIGluZm8xKTsNCi0gICAgR2V0Q2hhckluZm8oZW5kLCBpbmZvMik7DQotICAgIHdoaWxlKGluZm8yLm1fQ2hhckJveC5XaWR0aCgpID09IDAgfHwgaW5mbzIubV9DaGFyQm94LkhlaWdodCgpID09IDApIHsNCi0gICAgICAgIGVuZC0tOw0KLSAgICAgICAgaWYoZW5kIDw9IHN0YXJ0KSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgR2V0Q2hhckluZm8oZW5kLCBpbmZvMik7DQotICAgIH0NCi0gICAgZHggPSAoaW5mbzIubV9PcmlnaW5YIC0gaW5mbzEubV9PcmlnaW5YKTsNCi0gICAgZHkgPSAoaW5mbzIubV9PcmlnaW5ZIC0gaW5mbzEubV9PcmlnaW5ZKTsNCi0gICAgaWYoZHggPT0gMCkgew0KLSAgICAgICAgaWYoZHkgPiAwKSB7DQotICAgICAgICAgICAgUm90YXRlID0gOTA7DQotICAgICAgICB9IGVsc2UgaWYgKGR5IDwgMCkgew0KLSAgICAgICAgICAgIFJvdGF0ZSA9IDI3MDsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgUm90YXRlID0gMDsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGZsb2F0IGEgPSBGWFNZU19hdGFuMihkeSwgZHgpOw0KLSAgICAgICAgUm90YXRlID0gKGludCkoYSAqIDE4MCAvIEZYX1BJICsgMC41KTsNCi0gICAgfQ0KLSAgICBpZihSb3RhdGUgPCAwKSB7DQotICAgICAgICBSb3RhdGUgPSAtUm90YXRlOw0KLSAgICB9IGVsc2UgaWYoUm90YXRlID4gMCkgew0KLSAgICAgICAgUm90YXRlID0gMzYwIC0gUm90YXRlOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MCUNQREZfVGV4dFBhZ2U6OkdldEJhc2VsaW5lUm90YXRlKENGWF9GbG9hdFJlY3QgcmVjdCAsIGludCYgUm90YXRlKQ0KLXsNCi0gICAgaWYobV9QYXJzZU9wdGlvbnMubV9iR2V0Q2hhckNvZGVPbmx5KSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaW50IHN0YXJ0LCBlbmQsIGNvdW50LCBuID0gQ291bnRCb3VuZGVkU2VnbWVudHMocmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCwgcmVjdC5ib3R0b20sIFRSVUUpOw0KLSAgICBpZihuIDwgMSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmKG4gPiAxKSB7DQotICAgICAgICBHZXRCb3VuZGVkU2VnbWVudChuIC0gMSwgc3RhcnQsIGNvdW50KTsNCi0gICAgICAgIGVuZCA9IHN0YXJ0ICsgY291bnQgLSAxOw0KLSAgICAgICAgR2V0Qm91bmRlZFNlZ21lbnQoMCwgc3RhcnQsIGNvdW50KTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEdldEJvdW5kZWRTZWdtZW50KDAsIHN0YXJ0LCBjb3VudCk7DQotICAgICAgICBlbmQgPSBzdGFydCArIGNvdW50IC0gMTsNCi0gICAgfQ0KLSAgICByZXR1cm4gR2V0QmFzZWxpbmVSb3RhdGUoc3RhcnQsIGVuZCwgUm90YXRlKTsNCi19DQotRlhfQk9PTAlDUERGX1RleHRQYWdlOjpHZXRCYXNlbGluZVJvdGF0ZShpbnQgcmVjdEluZGV4LCBpbnQmIFJvdGF0ZSkNCi17DQotICAgIGlmKG1fUGFyc2VPcHRpb25zLm1fYkdldENoYXJDb2RlT25seSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmICghbV9Jc1BhcnNlcmVkIHx8IHJlY3RJbmRleCA8IDAgfHwgcmVjdEluZGV4ID4gbV9TZWxSZWN0cy5HZXRTaXplKCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDRlhfRmxvYXRSZWN0IHJlY3QgPSBtX1NlbFJlY3RzLkdldEF0KHJlY3RJbmRleCk7DQotICAgIHJldHVybiBHZXRCYXNlbGluZVJvdGF0ZShyZWN0ICwgUm90YXRlKTsNCi19DQotaW50CUNQREZfVGV4dFBhZ2U6OkNvdW50Qm91bmRlZFNlZ21lbnRzKEZYX0ZMT0FUIGxlZnQsIEZYX0ZMT0FUIHRvcCwgRlhfRkxPQVQgcmlnaHQsIEZYX0ZMT0FUIGJvdHRvbSwgRlhfQk9PTCBiQ29udGFpbnMgKQ0KLXsNCi0gICAgaWYobV9QYXJzZU9wdGlvbnMubV9iR2V0Q2hhckNvZGVPbmx5KSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgbV9TZWdtZW50LlJlbW92ZUFsbCgpOw0KLSAgICBpZiAoIW1fSXNQYXJzZXJlZCkJew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIENGWF9GbG9hdFJlY3QgcmVjdChsZWZ0LCBib3R0b20sIHJpZ2h0LCB0b3ApOw0KLSAgICByZWN0Lk5vcm1hbGl6ZSgpOw0KLSAgICBpbnQgbkNvdW50ID0gbV9jaGFyTGlzdC5HZXRTaXplKCk7DQotICAgIGludCBwb3MgPSAwOw0KLSAgICBGUERGX1NFR01FTlQJc2VnbWVudDsNCi0gICAgc2VnbWVudC5tX1N0YXJ0ID0gMDsNCi0gICAgc2VnbWVudC5tX25Db3VudCA9IDA7DQotICAgIEZYX0JPT0wJCXNlZ21lbnRTdGF0dXMgPSAwOw0KLSAgICBGWF9CT09MCQlJc0NvbnRhaW5QcmVDaGFyID0gRkFMU0U7DQotICAgIHdoaWxlIChwb3MgPCBuQ291bnQpIHsNCi0gICAgICAgIGlmKHBvcyA9PSA0OTMpIHsNCi0gICAgICAgICAgICBpbnQgYSA9IDA7DQotICAgICAgICB9DQotICAgICAgICBQQUdFQ0hBUl9JTkZPIGNoYXJpbmZvID0gKihQQUdFQ0hBUl9JTkZPKiltX2NoYXJMaXN0LkdldEF0KHBvcyk7DQotICAgICAgICBpZihiQ29udGFpbnMgJiYgcmVjdC5Db250YWlucyhjaGFyaW5mby5tX0NoYXJCb3gpKSB7DQotICAgICAgICAgICAgaWYgKHNlZ21lbnRTdGF0dXMgPT0gMCB8fCBzZWdtZW50U3RhdHVzID09IDIpIHsNCi0gICAgICAgICAgICAgICAgc2VnbWVudC5tX1N0YXJ0ID0gcG9zOw0KLSAgICAgICAgICAgICAgICBzZWdtZW50Lm1fbkNvdW50ID0gMTsNCi0gICAgICAgICAgICAgICAgc2VnbWVudFN0YXR1cyA9IDE7DQotICAgICAgICAgICAgfSBlbHNlIGlmIChzZWdtZW50U3RhdHVzID09IDEpIHsNCi0gICAgICAgICAgICAgICAgc2VnbWVudC5tX25Db3VudCsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBJc0NvbnRhaW5QcmVDaGFyID0gVFJVRTsNCi0gICAgICAgIH0gZWxzZSBpZiAoIWJDb250YWlucyAmJiAoSXNSZWN0SW50ZXJzZWN0KHJlY3QsIGNoYXJpbmZvLm1fQ2hhckJveCkgfHwgcmVjdC5Db250YWlucyhjaGFyaW5mby5tX09yaWdpblgsIGNoYXJpbmZvLm1fT3JpZ2luWSkpKSB7DQotICAgICAgICAgICAgaWYgKHNlZ21lbnRTdGF0dXMgPT0gMCB8fCBzZWdtZW50U3RhdHVzID09IDIpIHsNCi0gICAgICAgICAgICAgICAgc2VnbWVudC5tX1N0YXJ0ID0gcG9zOw0KLSAgICAgICAgICAgICAgICBzZWdtZW50Lm1fbkNvdW50ID0gMTsNCi0gICAgICAgICAgICAgICAgc2VnbWVudFN0YXR1cyA9IDE7DQotICAgICAgICAgICAgfSBlbHNlIGlmIChzZWdtZW50U3RhdHVzID09IDEpIHsNCi0gICAgICAgICAgICAgICAgc2VnbWVudC5tX25Db3VudCsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBJc0NvbnRhaW5QcmVDaGFyID0gVFJVRTsNCi0gICAgICAgIH0gZWxzZSBpZiAoY2hhcmluZm8ubV9Vbmljb2RlID09IDMyKSB7DQotICAgICAgICAgICAgaWYgKElzQ29udGFpblByZUNoYXIgPT0gVFJVRSkgew0KLSAgICAgICAgICAgICAgICBpZiAoc2VnbWVudFN0YXR1cyA9PSAwIHx8IHNlZ21lbnRTdGF0dXMgPT0gMikgew0KLSAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5tX1N0YXJ0ID0gcG9zOw0KLSAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5tX25Db3VudCA9IDE7DQotICAgICAgICAgICAgICAgICAgICBzZWdtZW50U3RhdHVzID0gMTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWdtZW50U3RhdHVzID09IDEpIHsNCi0gICAgICAgICAgICAgICAgICAgIHNlZ21lbnQubV9uQ291bnQrKzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBJc0NvbnRhaW5QcmVDaGFyID0gRkFMU0U7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgaWYgKHNlZ21lbnRTdGF0dXMgPT0gMSkgew0KLSAgICAgICAgICAgICAgICAgICAgc2VnbWVudFN0YXR1cyA9IDI7DQotICAgICAgICAgICAgICAgICAgICBtX1NlZ21lbnQuQWRkKHNlZ21lbnQpOw0KLSAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5tX1N0YXJ0ID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIHNlZ21lbnQubV9uQ291bnQgPSAwOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAoc2VnbWVudFN0YXR1cyA9PSAxKSB7DQotICAgICAgICAgICAgICAgIHNlZ21lbnRTdGF0dXMgPSAyOw0KLSAgICAgICAgICAgICAgICBtX1NlZ21lbnQuQWRkKHNlZ21lbnQpOw0KLSAgICAgICAgICAgICAgICBzZWdtZW50Lm1fU3RhcnQgPSAwOw0KLSAgICAgICAgICAgICAgICBzZWdtZW50Lm1fbkNvdW50ID0gMDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgSXNDb250YWluUHJlQ2hhciA9IEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcG9zKys7DQotICAgIH0NCi0gICAgaWYgKHNlZ21lbnRTdGF0dXMgPT0gMSkgew0KLSAgICAgICAgc2VnbWVudFN0YXR1cyA9IDI7DQotICAgICAgICBtX1NlZ21lbnQuQWRkKHNlZ21lbnQpOw0KLSAgICAgICAgc2VnbWVudC5tX1N0YXJ0ID0gMDsNCi0gICAgICAgIHNlZ21lbnQubV9uQ291bnQgPSAwOw0KLSAgICB9DQotICAgIHJldHVybiBtX1NlZ21lbnQuR2V0U2l6ZSgpOw0KLX0NCi12b2lkIENQREZfVGV4dFBhZ2U6OkdldEJvdW5kZWRTZWdtZW50KGludCBpbmRleCwgaW50JiBzdGFydCwgaW50JiBjb3VudCkgY29uc3QNCi17DQotICAgIGlmKG1fUGFyc2VPcHRpb25zLm1fYkdldENoYXJDb2RlT25seSkgew0KLSAgICAgICAgcmV0dXJuIDsNCi0gICAgfQ0KLSAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1fU2VnbWVudC5HZXRTaXplKCkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBzdGFydCA9IG1fU2VnbWVudC5HZXRBdChpbmRleCkubV9TdGFydDsNCi0gICAgY291bnQgPSBtX1NlZ21lbnQuR2V0QXQoaW5kZXgpLm1fbkNvdW50Ow0KLX0NCi1pbnQgQ1BERl9UZXh0UGFnZTo6R2V0V29yZEJyZWFrKGludCBpbmRleCwgaW50IGRpcmVjdGlvbikgY29uc3QNCi17DQotICAgIGlmKG1fUGFyc2VPcHRpb25zLm1fYkdldENoYXJDb2RlT25seSkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIGlmICghbV9Jc1BhcnNlcmVkKQl7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgaWYgKGRpcmVjdGlvbiAhPSBGUERGVEVYVF9MRUZUICYmIGRpcmVjdGlvbiAhPSBGUERGVEVYVF9SSUdIVCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbV9jaGFyTGlzdC5HZXRTaXplKCkpIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBQQUdFQ0hBUl9JTkZPIGNoYXJpbmZvOw0KLSAgICBjaGFyaW5mbyA9ICooUEFHRUNIQVJfSU5GTyopbV9jaGFyTGlzdC5HZXRBdChpbmRleCk7DQotICAgIGlmIChjaGFyaW5mby5tX0luZGV4ID09IC0xIHx8IGNoYXJpbmZvLm1fRmxhZyA9PSBGUERGVEVYVF9DSEFSX0dFTkVSQVRFRCkJew0KLSAgICAgICAgcmV0dXJuIGluZGV4Ow0KLSAgICB9DQotICAgIGlmICghSXNMZXR0ZXIoY2hhcmluZm8ubV9Vbmljb2RlKSkgew0KLSAgICAgICAgcmV0dXJuIGluZGV4Ow0KLSAgICB9DQotICAgIGludCBicmVha1BvcyA9IGluZGV4Ow0KLSAgICBpZiAoZGlyZWN0aW9uID09IEZQREZURVhUX0xFRlQpIHsNCi0gICAgICAgIHdoaWxlICgtLWJyZWFrUG9zID4gMCkgew0KLSAgICAgICAgICAgIGNoYXJpbmZvID0gKihQQUdFQ0hBUl9JTkZPKiltX2NoYXJMaXN0LkdldEF0KGJyZWFrUG9zKTsNCi0gICAgICAgICAgICBpZiAoIUlzTGV0dGVyKGNoYXJpbmZvLm1fVW5pY29kZSkpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJyZWFrUG9zOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBicmVha1BvczsNCi0gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT0gRlBERlRFWFRfUklHSFQpIHsNCi0gICAgICAgIHdoaWxlICgrK2JyZWFrUG9zIDwgbV9jaGFyTGlzdC5HZXRTaXplKCkpIHsNCi0gICAgICAgICAgICBjaGFyaW5mbyA9ICooUEFHRUNIQVJfSU5GTyopbV9jaGFyTGlzdC5HZXRBdChicmVha1Bvcyk7DQotICAgICAgICAgICAgaWYgKCFJc0xldHRlcihjaGFyaW5mby5tX1VuaWNvZGUpKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBicmVha1BvczsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gYnJlYWtQb3M7DQotICAgIH0NCi0gICAgcmV0dXJuIGJyZWFrUG9zOw0KLX0NCi1GWF9JTlQzMiBDUERGX1RleHRQYWdlOjpGaW5kVGV4dGxpbmVGbG93RGlyZWN0aW9uKCkNCi17DQotICAgIGlmICghbV9wUGFnZSkJew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIGNvbnN0IEZYX0lOVDMyIG5QYWdlV2lkdGggPSAoRlhfSU5UMzIpKChDUERGX1BhZ2UqKW1fcFBhZ2UpLT5HZXRQYWdlV2lkdGgoKTsNCi0gICAgY29uc3QgRlhfSU5UMzIgblBhZ2VIZWlnaHQgPSAoRlhfSU5UMzIpKChDUERGX1BhZ2UqKW1fcFBhZ2UpLT5HZXRQYWdlSGVpZ2h0KCk7DQotICAgIENGWF9CeXRlQXJyYXkgbkhvcml6b250YWxNYXNrOw0KLSAgICBpZiAoIW5Ib3Jpem9udGFsTWFzay5TZXRTaXplKG5QYWdlV2lkdGgpKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0JRlhfQllURSogcERhdGFIID0gbkhvcml6b250YWxNYXNrLkdldERhdGEoKTsNCi0gICAgQ0ZYX0J5dGVBcnJheSBuVmVydGljYWxNYXNrOw0KLSAgICBpZiAoIW5WZXJ0aWNhbE1hc2suU2V0U2l6ZShuUGFnZUhlaWdodCkpIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLQlGWF9CWVRFKiBwRGF0YVYgPSBuVmVydGljYWxNYXNrLkdldERhdGEoKTsNCi0gICAgRlhfSU5UMzIgaW5kZXggPSAwOw0KLSAgICBGWF9GTE9BVCBmTGluZUhlaWdodCA9IDAuMGY7DQotICAgIENQREZfUGFnZU9iamVjdCogcFBhZ2VPYmogPSBOVUxMOw0KLSAgICBGWF9QT1NJVElPTglwb3MgPSBOVUxMOw0KLSAgICBwb3MgPSBtX3BQYWdlLT5HZXRGaXJzdE9iamVjdFBvc2l0aW9uKCk7DQotICAgIGlmKCFwb3MpIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICB3aGlsZShwb3MpIHsNCi0gICAgICAgIHBQYWdlT2JqID0gbV9wUGFnZS0+R2V0TmV4dE9iamVjdChwb3MpOw0KLSAgICAgICAgaWYoTlVMTCA9PSBwUGFnZU9iaikgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoUERGUEFHRV9URVhUICE9IHBQYWdlT2JqLT5tX1R5cGUpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0JCUZYX0lOVDMyIG1pbkggPSAoRlhfSU5UMzIpcFBhZ2VPYmotPm1fTGVmdCA8IDAgPyAwIDogKEZYX0lOVDMyKXBQYWdlT2JqLT5tX0xlZnQ7DQotCQlGWF9JTlQzMiBtYXhIID0gKEZYX0lOVDMyKXBQYWdlT2JqLT5tX1JpZ2h0ID4gblBhZ2VXaWR0aCA/IG5QYWdlV2lkdGggOiAoRlhfSU5UMzIpcFBhZ2VPYmotPm1fUmlnaHQ7DQotCQlGWF9JTlQzMiBtaW5WID0gKEZYX0lOVDMyKXBQYWdlT2JqLT5tX0JvdHRvbSA8IDAgPyAwIDogKEZYX0lOVDMyKXBQYWdlT2JqLT5tX0JvdHRvbTsNCi0JCUZYX0lOVDMyIG1heFYgPSAoRlhfSU5UMzIpcFBhZ2VPYmotPm1fVG9wID4gblBhZ2VIZWlnaHQgPyBuUGFnZUhlaWdodCA6IChGWF9JTlQzMilwUGFnZU9iai0+bV9Ub3A7DQotCQlpZiAobWluSCA+PSBtYXhIIHx8IG1pblYgPj0gbWF4Vil7DQotCQkJY29udGludWU7DQotCQl9DQotDQotCQlGWFNZU19tZW1zZXQ4KHBEYXRhSCArIG1pbkgsIDEsIG1heEggLSBtaW5IKTsNCi0JCUZYU1lTX21lbXNldDgocERhdGFWICsgbWluViwgMSwgbWF4ViAtIG1pblYpOw0KLQ0KLQkJaWYgKGZMaW5lSGVpZ2h0IDw9IDAuMGYpIHsNCi0JCQlmTGluZUhlaWdodCA9IHBQYWdlT2JqLT5tX1RvcCAtIHBQYWdlT2JqLT5tX0JvdHRvbTsNCi0JCX0NCi0NCi0JCXBQYWdlT2JqID0gTlVMTDsNCi0gICAgfQ0KLSAgICBGWF9JTlQzMiBuU3RhcnRIID0gMDsNCi0gICAgRlhfSU5UMzIgbkVuZEggPSAwOw0KLSAgICBGWF9GTE9BVCBuU3VtSCA9IDAuMGY7DQotICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IG5QYWdlV2lkdGg7IGluZGV4KyspDQotICAgICAgICBpZigxID09IG5Ib3Jpem9udGFsTWFza1tpbmRleF0pIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgblN0YXJ0SCA9IGluZGV4Ow0KLSAgICBmb3IgKGluZGV4ID0gblBhZ2VXaWR0aDsgaW5kZXggPiAwOyBpbmRleC0tKQ0KLSAgICAgICAgaWYoMSA9PSBuSG9yaXpvbnRhbE1hc2tbaW5kZXggLSAxXSkgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICBuRW5kSCA9IGluZGV4Ow0KLSAgICBmb3IgKGluZGV4ID0gblN0YXJ0SDsgaW5kZXggPCBuRW5kSDsgaW5kZXgrKykgew0KLSAgICAgICAgblN1bUggKz0gbkhvcml6b250YWxNYXNrW2luZGV4XTsNCi0gICAgfQ0KLSAgICBuU3VtSCAvPSBuRW5kSCAtIG5TdGFydEg7DQotICAgIEZYX0lOVDMyIG5TdGFydFYgPSAwOw0KLSAgICBGWF9JTlQzMiBuRW5kViA9IDA7DQotICAgIEZYX0ZMT0FUIG5TdW1WID0gMC4wZjsNCi0gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgblBhZ2VIZWlnaHQ7IGluZGV4KyspDQotICAgICAgICBpZigxID09IG5WZXJ0aWNhbE1hc2tbaW5kZXhdKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIG5TdGFydFYgPSBpbmRleDsNCi0gICAgZm9yIChpbmRleCA9IG5QYWdlSGVpZ2h0OyBpbmRleCA+IDA7IGluZGV4LS0pDQotICAgICAgICBpZigxID09IG5WZXJ0aWNhbE1hc2tbaW5kZXggLSAxXSkgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICBuRW5kViA9IGluZGV4Ow0KLSAgICBmb3IgKGluZGV4ID0gblN0YXJ0VjsgaW5kZXggPCBuRW5kVjsgaW5kZXgrKykgew0KLSAgICAgICAgblN1bVYgKz0gblZlcnRpY2FsTWFza1tpbmRleF07DQotICAgIH0NCi0gICAgblN1bVYgLz0gbkVuZFYgLSBuU3RhcnRWOw0KLSAgICBpZiAoKG5FbmRWIC0gblN0YXJ0VikgPCAoRlhfSU5UMzIpKDIgKiBmTGluZUhlaWdodCkpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGlmICgobkVuZEggLSBuU3RhcnRIKSA8IChGWF9JTlQzMikoMiAqIGZMaW5lSGVpZ2h0KSkgew0KLSAgICAgICAgcmV0dXJuIDE7DQotICAgIH0NCi0gICAgaWYgKG5TdW1IID4gMC44Zikgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgaWYgKG5TdW1IIC0gblN1bVYgPiAwLjBmKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBpZiAoblN1bVYgLSBuU3VtSCA+IDAuMGYpIHsNCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotICAgIHJldHVybiAtMTsNCi19DQotdm9pZCBDUERGX1RleHRQYWdlOjpQcm9jZXNzT2JqZWN0KCkNCi17DQotICAgIENQREZfUGFnZU9iamVjdCoJcFBhZ2VPYmogPSBOVUxMOw0KLSAgICBpZiAoIW1fcFBhZ2UpCXsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9QT1NJVElPTglwb3M7DQotICAgIHBvcyA9IG1fcFBhZ2UtPkdldEZpcnN0T2JqZWN0UG9zaXRpb24oKTsNCi0gICAgaWYgKCFwb3MpCXsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX1RleHRsaW5lRGlyID0gRmluZFRleHRsaW5lRmxvd0RpcmVjdGlvbigpOw0KLSAgICBpbnQgbkNvdW50ID0gMDsNCi0gICAgd2hpbGUgKHBvcykgew0KLSAgICAgICAgcFBhZ2VPYmogPSBtX3BQYWdlLT5HZXROZXh0T2JqZWN0KHBvcyk7DQotICAgICAgICBpZihwUGFnZU9iaikgew0KLSAgICAgICAgICAgIGlmKHBQYWdlT2JqLT5tX1R5cGUgPT0gUERGUEFHRV9URVhUKSB7DQotICAgICAgICAgICAgICAgIGlmIChuQ291bnQgPT0gMykgew0KLSAgICAgICAgICAgICAgICAgICAgbkNvdW50ID0gbkNvdW50Ow0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4Ow0KLSAgICAgICAgICAgICAgICBQcm9jZXNzVGV4dE9iamVjdCgoQ1BERl9UZXh0T2JqZWN0KilwUGFnZU9iaiwgbWF0cml4LCBwb3MpOw0KLSAgICAgICAgICAgICAgICBuQ291bnQrKzsNCi0gICAgICAgICAgICB9IGVsc2UgaWYgKHBQYWdlT2JqLT5tX1R5cGUgPT0gUERGUEFHRV9GT1JNKSB7DQotICAgICAgICAgICAgICAgIENGWF9BZmZpbmVNYXRyaXggZm9ybU1hdHJpeCgxLCAwLCAwLCAxLCAwLCAwKTsNCi0gICAgICAgICAgICAgICAgUHJvY2Vzc0Zvcm1PYmplY3QoKENQREZfRm9ybU9iamVjdCopcFBhZ2VPYmosIGZvcm1NYXRyaXgpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHBQYWdlT2JqID0gTlVMTDsNCi0gICAgfQ0KLSAgICBpbnQgY291bnQgPSBtX0xpbmVPYmouR2V0U2l6ZSgpOw0KLSAgICBmb3IoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgew0KLSAgICAgICAgUHJvY2Vzc1RleHRPYmplY3QobV9MaW5lT2JqLkdldEF0KGkpKTsNCi0gICAgfQ0KLSAgICBtX0xpbmVPYmouUmVtb3ZlQWxsKCk7DQotICAgIENsb3NlVGVtcExpbmUoKTsNCi19DQotdm9pZCBDUERGX1RleHRQYWdlOjpQcm9jZXNzRm9ybU9iamVjdChDUERGX0Zvcm1PYmplY3QqIHBGb3JtT2JqLCBDRlhfQWZmaW5lTWF0cml4IGZvcm1NYXRyaXgpDQotew0KLSAgICBDUERGX1BhZ2VPYmplY3QqCXBQYWdlT2JqID0gTlVMTDsNCi0gICAgRlhfUE9TSVRJT04JcG9zOw0KLSAgICBpZiAoIXBGb3JtT2JqKQl7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgcG9zID0gcEZvcm1PYmotPm1fcEZvcm0tPkdldEZpcnN0T2JqZWN0UG9zaXRpb24oKTsNCi0gICAgaWYgKCFwb3MpCXsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDRlhfQWZmaW5lTWF0cml4IGN1ckZvcm1NYXRyaXg7DQotICAgIGN1ckZvcm1NYXRyaXguQ29weShwRm9ybU9iai0+bV9Gb3JtTWF0cml4KTsNCi0gICAgY3VyRm9ybU1hdHJpeC5Db25jYXQoZm9ybU1hdHJpeCk7DQotICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgIHBQYWdlT2JqID0gcEZvcm1PYmotPm1fcEZvcm0tPkdldE5leHRPYmplY3QocG9zKTsNCi0gICAgICAgIGlmKHBQYWdlT2JqKSB7DQotICAgICAgICAgICAgaWYocFBhZ2VPYmotPm1fVHlwZSA9PSBQREZQQUdFX1RFWFQpIHsNCi0gICAgICAgICAgICAgICAgUHJvY2Vzc1RleHRPYmplY3QoKENQREZfVGV4dE9iamVjdCopcFBhZ2VPYmosIGN1ckZvcm1NYXRyaXgsIHBvcyk7DQotICAgICAgICAgICAgfSBlbHNlIGlmIChwUGFnZU9iai0+bV9UeXBlID09IFBERlBBR0VfRk9STSkgew0KLSAgICAgICAgICAgICAgICBQcm9jZXNzRm9ybU9iamVjdCgoQ1BERl9Gb3JtT2JqZWN0KilwUGFnZU9iaiwgY3VyRm9ybU1hdHJpeCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcFBhZ2VPYmogPSBOVUxMOw0KLSAgICB9DQotfQ0KLWludCBDUERGX1RleHRQYWdlOjpHZXRDaGFyV2lkdGgoRlhfRFdPUkQgY2hhckNvZGUsIENQREZfRm9udCogcEZvbnQpIGNvbnN0DQotew0KLSAgICBpZihjaGFyQ29kZSA9PSAtMSkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgaW50IHcgPSBwRm9udC0+R2V0Q2hhcldpZHRoRihjaGFyQ29kZSk7DQotICAgIGlmKHcgPT0gMCkgew0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc3RyOw0KLSAgICAgICAgcEZvbnQtPkFwcGVuZENoYXIoc3RyLCBjaGFyQ29kZSk7DQotICAgICAgICB3ID0gcEZvbnQtPkdldFN0cmluZ1dpZHRoKHN0ciwgMSk7DQotICAgICAgICBpZih3ID09IDApIHsNCi0gICAgICAgICAgICBGWF9SRUNUIEJCb3g7DQotICAgICAgICAgICAgcEZvbnQtPkdldENoYXJCQm94KGNoYXJDb2RlLCBCQm94KTsNCi0gICAgICAgICAgICB3ID0gQkJveC5yaWdodCAtIEJCb3gubGVmdDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gdzsNCi19DQotdm9pZCBDUERGX1RleHRQYWdlOjpPblBpZWNlKElGWF9CaWRpQ2hhciogcEJpZGksIENGWF9XaWRlU3RyaW5nJiBzdHIpDQotew0KLSAgICBGWF9JTlQzMiBzdGFydCwgY291bnQ7DQotICAgIEZYX0lOVDMyIHJldCA9IHBCaWRpLT5HZXRCaWRpSW5mbyhzdGFydCwgY291bnQpOw0KLSAgICBpZihyZXQgPT0gMikgew0KLSAgICAgICAgZm9yKGludCBpID0gc3RhcnQgKyBjb3VudCAtIDE7IGkgPj0gc3RhcnQ7IGktLSkgew0KLSAgICAgICAgICAgIG1fVGV4dEJ1Zi5BcHBlbmRDaGFyKHN0ci5HZXRBdChpKSk7DQotICAgICAgICAgICAgbV9jaGFyTGlzdC5BZGQoKihQQUdFQ0hBUl9JTkZPKiltX1RlbXBDaGFyTGlzdC5HZXRBdChpKSk7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpbnQgZW5kID0gc3RhcnQgKyBjb3VudCA7DQotICAgICAgICBmb3IoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7DQotICAgICAgICAgICAgbV9UZXh0QnVmLkFwcGVuZENoYXIoc3RyLkdldEF0KGkpKTsNCi0gICAgICAgICAgICBtX2NoYXJMaXN0LkFkZCgqKFBBR0VDSEFSX0lORk8qKW1fVGVtcENoYXJMaXN0LkdldEF0KGkpKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi12b2lkIENQREZfVGV4dFBhZ2U6OkFkZENoYXJJbmZvQnlMUkRpcmVjdGlvbihDRlhfV2lkZVN0cmluZyYgc3RyLCBpbnQgaSkNCi17DQotICAgIFBBR0VDSEFSX0lORk8gSW5mbyA9ICooUEFHRUNIQVJfSU5GTyopbV9UZW1wQ2hhckxpc3QuR2V0QXQoaSk7DQotICAgIEZYX1dDSEFSIHdDaGFyID0gc3RyLkdldEF0KGkpOw0KLSNpZmRlZiBGT1hJVF9DSFJPTUVfQlVJTEQNCi0gICAgaWYoIUlzQ29udHJvbENoYXIoJkluZm8pKSB7DQotI2Vsc2UNCi0gICAgaWYod0NoYXIgIT0gMHhmZmZlKSB7DQotI2VuZGlmDQotICAgICAgICBJbmZvLm1fSW5kZXggPSBtX1RleHRCdWYuR2V0TGVuZ3RoKCk7DQotICAgICAgICBpZiAod0NoYXIgPj0gMHhGQjAwICYmIHdDaGFyIDw9IDB4RkIwNikgew0KLSAgICAgICAgICAgIEZYX0xQV1NUUiBwRHN0ID0gTlVMTDsNCi0gICAgICAgICAgICBGWF9TVFJTSVpFIG5Db3VudCA9IEZYX1VuaWNvZGVfR2V0Tm9ybWFsaXphdGlvbih3Q2hhciwgcERzdCk7DQotICAgICAgICAgICAgaWYgKG5Db3VudCA+PSAxKSB7DQotICAgICAgICAgICAgICAgIHBEc3QgPSBGWF9BbGxvYyhGWF9XQ0hBUiwgbkNvdW50KTsNCi0gICAgICAgICAgICAgICAgaWYgKCFwRHN0KSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgRlhfVW5pY29kZV9HZXROb3JtYWxpemF0aW9uKHdDaGFyLCBwRHN0KTsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgbkluZGV4ID0gMDsgbkluZGV4IDwgbkNvdW50OyBuSW5kZXgrKykgew0KLSAgICAgICAgICAgICAgICAgICAgUEFHRUNIQVJfSU5GTyBJbmZvMiA9IEluZm87DQotICAgICAgICAgICAgICAgICAgICBJbmZvMi5tX1VuaWNvZGUgPSBwRHN0W25JbmRleF07DQotICAgICAgICAgICAgICAgICAgICBJbmZvMi5tX0ZsYWcgPSBGUERGVEVYVF9DSEFSX1BJRUNFOw0KLSAgICAgICAgICAgICAgICAgICAgbV9UZXh0QnVmLkFwcGVuZENoYXIoSW5mbzIubV9Vbmljb2RlKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmKCAhbV9QYXJzZU9wdGlvbnMubV9iR2V0Q2hhckNvZGVPbmx5KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9jaGFyTGlzdC5BZGQoSW5mbzIpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIEZYX0ZyZWUocERzdCk7DQotICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBtX1RleHRCdWYuQXBwZW5kQ2hhcih3Q2hhcik7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBJbmZvLm1fSW5kZXggPSAtMTsNCi0gICAgfQ0KLSAgICBpZiggIW1fUGFyc2VPcHRpb25zLm1fYkdldENoYXJDb2RlT25seSkgew0KLSAgICAgICAgbV9jaGFyTGlzdC5BZGQoSW5mbyk7DQotICAgIH0NCi19DQotdm9pZCBDUERGX1RleHRQYWdlOjpBZGRDaGFySW5mb0J5UkxEaXJlY3Rpb24oQ0ZYX1dpZGVTdHJpbmcmIHN0ciwgaW50IGkpDQotew0KLSAgICBQQUdFQ0hBUl9JTkZPIEluZm8gPSAqKFBBR0VDSEFSX0lORk8qKW1fVGVtcENoYXJMaXN0LkdldEF0KGkpOw0KLSNpZmRlZiBGT1hJVF9DSFJPTUVfQlVJTEQNCi0gICAgaWYoIUlzQ29udHJvbENoYXIoJkluZm8pKSB7DQotI2Vsc2UNCi0gICAgaWYoc3RyLkdldEF0KGkpICE9IDB4ZmZmZSkgew0KLSNlbmRpZg0KLSAgICAgICAgSW5mby5tX0luZGV4ID0gbV9UZXh0QnVmLkdldExlbmd0aCgpOw0KLSAgICAgICAgRlhfV0NIQVIgd0NoYXIgPSBGWF9HZXRNaXJyb3JDaGFyKHN0ci5HZXRBdChpKSwgVFJVRSwgRkFMU0UpOw0KLSAgICAgICAgRlhfTFBXU1RSIHBEc3QgPSBOVUxMOw0KLSAgICAgICAgRlhfU1RSU0laRSBuQ291bnQgPSBGWF9Vbmljb2RlX0dldE5vcm1hbGl6YXRpb24od0NoYXIsIHBEc3QpOw0KLSAgICAgICAgaWYgKG5Db3VudCA+PSAxKSB7DQotICAgICAgICAgICAgcERzdCA9IEZYX0FsbG9jKEZYX1dDSEFSLCBuQ291bnQpOw0KLSAgICAgICAgICAgIGlmICghcERzdCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIEZYX1VuaWNvZGVfR2V0Tm9ybWFsaXphdGlvbih3Q2hhciwgcERzdCk7DQotICAgICAgICAgICAgZm9yIChpbnQgbkluZGV4ID0gMDsgbkluZGV4IDwgbkNvdW50OyBuSW5kZXgrKykgew0KLSAgICAgICAgICAgICAgICBQQUdFQ0hBUl9JTkZPIEluZm8yID0gSW5mbzsNCi0gICAgICAgICAgICAgICAgSW5mbzIubV9Vbmljb2RlID0gcERzdFtuSW5kZXhdOw0KLSAgICAgICAgICAgICAgICBJbmZvMi5tX0ZsYWcgPSBGUERGVEVYVF9DSEFSX1BJRUNFOw0KLSAgICAgICAgICAgICAgICBtX1RleHRCdWYuQXBwZW5kQ2hhcihJbmZvMi5tX1VuaWNvZGUpOw0KLSAgICAgICAgICAgICAgICBpZiggIW1fUGFyc2VPcHRpb25zLm1fYkdldENoYXJDb2RlT25seSkgew0KLSAgICAgICAgICAgICAgICAgICAgbV9jaGFyTGlzdC5BZGQoSW5mbzIpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIEZYX0ZyZWUocERzdCk7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBJbmZvLm1fVW5pY29kZSA9IHdDaGFyOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9UZXh0QnVmLkFwcGVuZENoYXIoSW5mby5tX1VuaWNvZGUpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgSW5mby5tX0luZGV4ID0gLTE7DQotICAgIH0NCi0gICAgaWYoICFtX1BhcnNlT3B0aW9ucy5tX2JHZXRDaGFyQ29kZU9ubHkpIHsNCi0gICAgICAgIG1fY2hhckxpc3QuQWRkKEluZm8pOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9UZXh0UGFnZTo6Q2xvc2VUZW1wTGluZSgpDQotew0KLSAgICBpbnQgY291bnQxID0gbV9UZW1wQ2hhckxpc3QuR2V0U2l6ZSgpOw0KLSAgICBpZiAoY291bnQxIDw9IDApIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBJRlhfQmlkaUNoYXIqIEJpZGlDaGFyID0gSUZYX0JpZGlDaGFyOjpDcmVhdGUoKTsNCi0gICAgQ0ZYX1dpZGVTdHJpbmcgc3RyID0gbV9UZW1wVGV4dEJ1Zi5HZXRXaWRlU3RyaW5nKCk7DQotICAgIENGWF9Xb3JkQXJyYXkgb3JkZXI7DQotICAgIEZYX0JPT0wgYlIyTCA9IEZBTFNFOw0KLSAgICBGWF9JTlQzMiBzdGFydCA9IDAsIGNvdW50ID0gMCwgaSA9IDA7DQotICAgIGludCBuUjJMID0gMCwgbkwyUiA9IDA7DQotICAgIEZYX0JPT0wgYlByZXZTcGFjZSA9IEZBTFNFOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc3RyLkdldExlbmd0aCgpOyBpKyspIHsNCi0gICAgICAgIGlmKHN0ci5HZXRBdChpKSA9PSAzMikgew0KLSAgICAgICAgICAgIGlmKGJQcmV2U3BhY2UpIHsNCi0gICAgICAgICAgICAgICAgbV9UZW1wVGV4dEJ1Zi5EZWxldGUoaSwgMSk7DQotICAgICAgICAgICAgICAgIG1fVGVtcENoYXJMaXN0LkRlbGV0ZShpKTsNCi0gICAgICAgICAgICAgICAgc3RyLkRlbGV0ZShpKTsNCi0gICAgICAgICAgICAgICAgY291bnQxIC0tOw0KLSAgICAgICAgICAgICAgICBpLS07DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBiUHJldlNwYWNlID0gVFJVRTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgYlByZXZTcGFjZSA9IEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoQmlkaUNoYXIgJiYgQmlkaUNoYXItPkFwcGVuZENoYXIoc3RyLkdldEF0KGkpKSkgew0KLSAgICAgICAgICAgIEZYX0lOVDMyIHJldCA9IEJpZGlDaGFyLT5HZXRCaWRpSW5mbyhzdGFydCwgY291bnQpOw0KLSAgICAgICAgICAgIG9yZGVyLkFkZChzdGFydCk7DQotICAgICAgICAgICAgb3JkZXIuQWRkKGNvdW50KTsNCi0gICAgICAgICAgICBvcmRlci5BZGQocmV0KTsNCi0gICAgICAgICAgICBpZighYlIyTCkgew0KLSAgICAgICAgICAgICAgICBpZihyZXQgPT0gMikgew0KLSAgICAgICAgICAgICAgICAgICAgblIyTCsrOw0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldCA9PSAxKSB7DQotICAgICAgICAgICAgICAgICAgICBuTDJSKys7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYoQmlkaUNoYXIgJiYgQmlkaUNoYXItPkVuZENoYXIoKSkgew0KLSAgICAgICAgRlhfSU5UMzIgcmV0ID0gQmlkaUNoYXItPkdldEJpZGlJbmZvKHN0YXJ0LCBjb3VudCk7DQotICAgICAgICBvcmRlci5BZGQoc3RhcnQpOw0KLSAgICAgICAgb3JkZXIuQWRkKGNvdW50KTsNCi0gICAgICAgIG9yZGVyLkFkZChyZXQpOw0KLSAgICAgICAgaWYoIWJSMkwpIHsNCi0gICAgICAgICAgICBpZihyZXQgPT0gMikgew0KLSAgICAgICAgICAgICAgICBuUjJMKys7DQotICAgICAgICAgICAgfSBlbHNlIGlmKHJldCA9PSAxKSB7DQotICAgICAgICAgICAgICAgIG5MMlIrKzsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYoblIyTCA+IDAgJiYgblIyTCA+PSBuTDJSKSB7DQotICAgICAgICBiUjJMID0gVFJVRTsNCi0gICAgfQ0KLSAgICBpZih0aGlzLT5tX3BhcnNlcmZsYWcgPT0gRlBERlRFWFRfUkxUQiB8fCBiUjJMKSB7DQotICAgICAgICBpbnQgY291bnQgPSBvcmRlci5HZXRTaXplKCk7DQotICAgICAgICBmb3IoaW50IGogPSBjb3VudCAtIDE7IGogPiAwOyBqIC09IDMpIHsNCi0gICAgICAgICAgICBpbnQgcmV0ID0gb3JkZXIuR2V0QXQoaik7DQotICAgICAgICAgICAgaW50IHN0YXJ0ID0gb3JkZXIuR2V0QXQoaiAtIDIpOw0KLSAgICAgICAgICAgIGludCBjb3VudDEgPSBvcmRlci5HZXRBdChqIC0gMSk7DQotICAgICAgICAgICAgaWYocmV0ID09IDIgfHwgcmV0ID09IDApIHsNCi0gICAgICAgICAgICAgICAgZm9yKGludCBpID0gc3RhcnQgKyBjb3VudDEgLSAxOyBpID49IHN0YXJ0OyBpLS0pIHsNCi0gICAgICAgICAgICAgICAgICAgIEFkZENoYXJJbmZvQnlSTERpcmVjdGlvbihzdHIsIGkpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgaSA9IGo7DQotICAgICAgICAgICAgICAgIEZYX0JPT0wgYlN5bWJvbCA9IEZBTFNFOw0KLSAgICAgICAgICAgICAgICB3aGlsZShpID4gMCAmJiBvcmRlci5HZXRBdChpKSAhPSAyKSB7DQotICAgICAgICAgICAgICAgICAgICBiU3ltYm9sID0gIW9yZGVyLkdldEF0KGkpOw0KLSAgICAgICAgICAgICAgICAgICAgaSAtPSAzOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGludCBlbmQgPSBzdGFydCArIGNvdW50MSA7DQotICAgICAgICAgICAgICAgIGludCBuID0gMDsNCi0gICAgICAgICAgICAgICAgaWYoYlN5bWJvbCkgew0KLSAgICAgICAgICAgICAgICAgICAgbiA9IGkgKyA2Ow0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgbiA9IGkgKyAzOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmKG4gPj0gaikgew0KLSAgICAgICAgICAgICAgICAgICAgZm9yKGludCBtID0gc3RhcnQ7IG0gPCBlbmQ7IG0rKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFkZENoYXJJbmZvQnlMUkRpcmVjdGlvbihzdHIsIG0pOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgaSA9IGo7DQotICAgICAgICAgICAgICAgICAgICBqID0gbjsNCi0gICAgICAgICAgICAgICAgICAgIGZvcig7IG4gPD0gaTsgbiArPSAzKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldCA9IG9yZGVyLkdldEF0KG4pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCA9IG9yZGVyLkdldEF0KG4gLSAyKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQxID0gb3JkZXIuR2V0QXQobiAtIDEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbmQgPSBzdGFydCArIGNvdW50MSA7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGludCBtID0gc3RhcnQ7IG0gPCBlbmQ7IG0rKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRDaGFySW5mb0J5TFJEaXJlY3Rpb24oc3RyLCBtKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpbnQgY291bnQgPSBvcmRlci5HZXRTaXplKCk7DQotICAgICAgICBGWF9CT09MIGJMMlIgPSBGQUxTRTsNCi0gICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBjb3VudDsgaiArPSAzKSB7DQotICAgICAgICAgICAgaW50IHJldCA9IG9yZGVyLkdldEF0KGogKyAyKTsNCi0gICAgICAgICAgICBpbnQgc3RhcnQgPSBvcmRlci5HZXRBdChqKTsNCi0gICAgICAgICAgICBpbnQgY291bnQxID0gb3JkZXIuR2V0QXQoaiArIDEpOw0KLSAgICAgICAgICAgIGlmKHJldCA9PSAyIHx8IChqID09IDAgJiYgcmV0ID09IDAgJiYgIWJMMlIpKSB7DQotICAgICAgICAgICAgICAgIGludCBpID0gaiArIDM7DQotICAgICAgICAgICAgICAgIHdoaWxlKGJSMkwgJiYgaSA8IGNvdW50KSB7DQotICAgICAgICAgICAgICAgICAgICBpZihvcmRlci5HZXRBdChpICsgMikgPT0gMSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpICs9IDM7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYoaSA9PSAzKSB7DQotICAgICAgICAgICAgICAgICAgICBqID0gLTM7DQotICAgICAgICAgICAgICAgICAgICBiTDJSID0gVFJVRTsNCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGludCBlbmQgPSBtX1RlbXBDaGFyTGlzdC5HZXRTaXplKCkgLSAxOw0KLSAgICAgICAgICAgICAgICBpZihpIDwgY291bnQpIHsNCi0gICAgICAgICAgICAgICAgICAgIGVuZCA9IG9yZGVyLkdldEF0KGkpIC0gMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBqID0gaSAtIDM7DQotICAgICAgICAgICAgICAgIGZvcihpbnQgbiA9IGVuZDsgbiA+PSBzdGFydDsgbi0tKSB7DQotICAgICAgICAgICAgICAgICAgICBBZGRDaGFySW5mb0J5UkxEaXJlY3Rpb24oc3RyLCBuKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGludCBlbmQgPSBzdGFydCArIGNvdW50MSA7DQotICAgICAgICAgICAgICAgIGZvcihpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIEFkZENoYXJJbmZvQnlMUkRpcmVjdGlvbihzdHIsIGkpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGludCBudGV4dCA9IG1fVGV4dEJ1Zi5HZXRTaXplKCk7DQotICAgIG50ZXh0ID0gbV9jaGFyTGlzdC5HZXRTaXplKCk7DQotICAgIG9yZGVyLlJlbW92ZUFsbCgpOw0KLSAgICBtX1RlbXBDaGFyTGlzdC5SZW1vdmVBbGwoKTsNCi0gICAgbV9UZW1wVGV4dEJ1Zi5EZWxldGUoMCwgbV9UZW1wVGV4dEJ1Zi5HZXRMZW5ndGgoKSk7DQotICAgIEJpZGlDaGFyLT5SZWxlYXNlKCk7DQotfQ0KLXZvaWQgQ1BERl9UZXh0UGFnZTo6UHJvY2Vzc1RleHRPYmplY3QoQ1BERl9UZXh0T2JqZWN0KglwVGV4dE9iaiwgQ0ZYX0FmZmluZU1hdHJpeCBmb3JtTWF0cml4LCBGWF9QT1NJVElPTiBPYmpQb3MpDQotew0KLSAgICBDRlhfRmxvYXRSZWN0IHJlKHBUZXh0T2JqLT5tX0xlZnQsIHBUZXh0T2JqLT5tX0JvdHRvbSwgcFRleHRPYmotPm1fUmlnaHQsIHBUZXh0T2JqLT5tX1RvcCk7DQotICAgIGlmKEZYU1lTX2ZhYnMocFRleHRPYmotPm1fUmlnaHQgLSBwVGV4dE9iai0+bV9MZWZ0KSA8IDAuMDFmICkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGludCBjb3VudCA9IG1fTGluZU9iai5HZXRTaXplKCk7DQotICAgIFBERlRFWFRfT2JqIE9iajsNCi0gICAgT2JqLm1fcFRleHRPYmogPSBwVGV4dE9iajsNCi0gICAgT2JqLm1fZm9ybU1hdHJpeCA9IGZvcm1NYXRyaXg7DQotICAgIGlmKGNvdW50ID09IDApIHsNCi0gICAgICAgIG1fTGluZU9iai5BZGQoT2JqKTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAoSXNTYW1lQXNQcmVUZXh0T2JqZWN0KHBUZXh0T2JqLCBPYmpQb3MpKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgUERGVEVYVF9PYmogcHJldl9PYmogPSBtX0xpbmVPYmouR2V0QXQoY291bnQgLSAxKTsNCi0gICAgQ1BERl9UZXh0T2JqZWN0SXRlbSBpdGVtOw0KLSAgICBpbnQgbkl0ZW0gPSBwcmV2X09iai5tX3BUZXh0T2JqLT5Db3VudEl0ZW1zKCk7DQotICAgIHByZXZfT2JqLm1fcFRleHRPYmotPkdldEl0ZW1JbmZvKG5JdGVtIC0gMSwgJml0ZW0pOw0KLSAgICBGWF9GTE9BVCBwcmV2X3dpZHRoID0gR2V0Q2hhcldpZHRoKGl0ZW0ubV9DaGFyQ29kZSwgcHJldl9PYmoubV9wVGV4dE9iai0+R2V0Rm9udCgpKSAqIHByZXZfT2JqLm1fcFRleHRPYmotPkdldEZvbnRTaXplKCkgLyAxMDAwOw0KLSAgICBDRlhfQWZmaW5lTWF0cml4IHByZXZfbWF0cml4Ow0KLSAgICBwcmV2X09iai5tX3BUZXh0T2JqLT5HZXRUZXh0TWF0cml4KCZwcmV2X21hdHJpeCk7DQotICAgIHByZXZfd2lkdGggPSBGWFNZU19mYWJzKHByZXZfd2lkdGgpOw0KLSAgICBwcmV2X21hdHJpeC5Db25jYXQocHJldl9PYmoubV9mb3JtTWF0cml4KTsNCi0gICAgcHJldl93aWR0aCA9IHByZXZfbWF0cml4LlRyYW5zZm9ybURpc3RhbmNlKHByZXZfd2lkdGgpOw0KLSAgICBwVGV4dE9iai0+R2V0SXRlbUluZm8oMCwgJml0ZW0pOw0KLSAgICBGWF9GTE9BVCB0aGlzX3dpZHRoID0gR2V0Q2hhcldpZHRoKGl0ZW0ubV9DaGFyQ29kZSwgcFRleHRPYmotPkdldEZvbnQoKSkgKiBwVGV4dE9iai0+R2V0Rm9udFNpemUoKSAvIDEwMDA7DQotICAgIHRoaXNfd2lkdGggPSBGWFNZU19mYWJzKHRoaXNfd2lkdGgpOw0KLSAgICBDRlhfQWZmaW5lTWF0cml4IHRoaXNfbWF0cml4Ow0KLSAgICBwVGV4dE9iai0+R2V0VGV4dE1hdHJpeCgmdGhpc19tYXRyaXgpOw0KLSAgICB0aGlzX3dpZHRoID0gRlhTWVNfZmFicyh0aGlzX3dpZHRoKTsNCi0gICAgdGhpc19tYXRyaXguQ29uY2F0KGZvcm1NYXRyaXgpOw0KLSAgICB0aGlzX3dpZHRoID0gdGhpc19tYXRyaXguVHJhbnNmb3JtRGlzdGFuY2UodGhpc193aWR0aCk7DQotICAgIEZYX0ZMT0FUIHRocmVzaG9sZCA9IHByZXZfd2lkdGggPiB0aGlzX3dpZHRoID8gcHJldl93aWR0aCAvIDQgOiB0aGlzX3dpZHRoIC8gNDsNCi0gICAgRlhfRkxPQVQgcHJldl94ID0gcHJldl9PYmoubV9wVGV4dE9iai0+R2V0UG9zWCgpLCBwcmV2X3kgPSBwcmV2X09iai5tX3BUZXh0T2JqLT5HZXRQb3NZKCk7DQotICAgIHByZXZfT2JqLm1fZm9ybU1hdHJpeC5UcmFuc2Zvcm0ocHJldl94LCBwcmV2X3kpOw0KLSAgICBtX0Rpc3BsYXlNYXRyaXguVHJhbnNmb3JtKHByZXZfeCwgcHJldl95KTsNCi0gICAgRlhfRkxPQVQgdGhpc194ID0gcFRleHRPYmotPkdldFBvc1goKSwgdGhpc195ID0gcFRleHRPYmotPkdldFBvc1koKTsNCi0gICAgZm9ybU1hdHJpeC5UcmFuc2Zvcm0odGhpc194LCB0aGlzX3kpOw0KLSAgICBtX0Rpc3BsYXlNYXRyaXguVHJhbnNmb3JtKHRoaXNfeCwgdGhpc195KTsNCi0gICAgaWYgKEZYU1lTX2ZhYnModGhpc195IC0gcHJldl95KSA+IHRocmVzaG9sZCAqIDIpIHsNCi0gICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7DQotICAgICAgICAgICAgUHJvY2Vzc1RleHRPYmplY3QobV9MaW5lT2JqLkdldEF0KGkpKTsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fTGluZU9iai5SZW1vdmVBbGwoKTsNCi0gICAgICAgIG1fTGluZU9iai5BZGQoT2JqKTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpbnQgaSA9IDA7DQotICAgIGlmKG1fUGFyc2VPcHRpb25zLm1fYk5vcm1hbGl6ZU9ianMpIHsNCi0gICAgICAgIGZvcihpID0gY291bnQgLSAxOyBpID49IDA7IGktLSkgew0KLSAgICAgICAgICAgIFBERlRFWFRfT2JqIHByZXZfT2JqID0gbV9MaW5lT2JqLkdldEF0KGkpOw0KLSAgICAgICAgICAgIENGWF9BZmZpbmVNYXRyaXggcHJldl9tYXRyaXg7DQotICAgICAgICAgICAgcHJldl9PYmoubV9wVGV4dE9iai0+R2V0VGV4dE1hdHJpeCgmcHJldl9tYXRyaXgpOw0KLSAgICAgICAgICAgIEZYX0ZMT0FUIFByZXZfeCA9IHByZXZfT2JqLm1fcFRleHRPYmotPkdldFBvc1goKSwgUHJldl95ID0gcHJldl9PYmoubV9wVGV4dE9iai0+R2V0UG9zWSgpOw0KLSAgICAgICAgICAgIHByZXZfT2JqLm1fZm9ybU1hdHJpeC5UcmFuc2Zvcm0oUHJldl94LCBQcmV2X3kpOw0KLSAgICAgICAgICAgIG1fRGlzcGxheU1hdHJpeC5UcmFuc2Zvcm0oUHJldl94LCBQcmV2X3kpOw0KLSAgICAgICAgICAgIGlmKHRoaXNfeCA+PSBQcmV2X3gpIHsNCi0gICAgICAgICAgICAgICAgaWYoaSA9PSBjb3VudCAtIDEpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fTGluZU9iai5BZGQoT2JqKTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fTGluZU9iai5JbnNlcnRBdChpICsgMSwgT2JqKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZihpIDwgMCkgew0KLSAgICAgICAgICAgIG1fTGluZU9iai5JbnNlcnRBdCgwLCBPYmopOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9MaW5lT2JqLkFkZChPYmopOw0KLSAgICB9DQotfQ0KLUZYX0lOVDMyIENQREZfVGV4dFBhZ2U6OlByZU1hcmtlZENvbnRlbnQoUERGVEVYVF9PYmogT2JqKQ0KLXsNCi0gICAgQ1BERl9UZXh0T2JqZWN0KiBwVGV4dE9iaiA9IE9iai5tX3BUZXh0T2JqOw0KLSAgICBDUERGX0NvbnRlbnRNYXJrRGF0YSogcE1hcmtEYXRhID0gKENQREZfQ29udGVudE1hcmtEYXRhKilwVGV4dE9iai0+bV9Db250ZW50TWFyay5HZXRPYmplY3QoKTsNCi0gICAgaWYoIXBNYXJrRGF0YSkgew0KLSAgICAgICAgcmV0dXJuIEZQREZURVhUX01DX1BBU1M7DQotICAgIH0NCi0gICAgaW50IG5Db250ZW50TWFyayA9IHBNYXJrRGF0YS0+Q291bnRJdGVtcygpOw0KLSAgICBpZiAobkNvbnRlbnRNYXJrIDwgMSkgew0KLSAgICAgICAgcmV0dXJuIEZQREZURVhUX01DX1BBU1M7DQotICAgIH0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcgYWN0VGV4dDsNCi0gICAgRlhfQk9PTCBiRXhpc3QgPSBGQUxTRTsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IE5VTEw7DQotICAgIGludCBuID0gMDsNCi0gICAgZm9yIChuID0gMDsgbiA8IG5Db250ZW50TWFyazsgbisrKSB7DQotICAgICAgICBDUERGX0NvbnRlbnRNYXJrSXRlbSYgaXRlbSA9IHBNYXJrRGF0YS0+R2V0SXRlbShuKTsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIHRhZ1N0ciA9IChDRlhfQnl0ZVN0cmluZylpdGVtLkdldE5hbWUoKTsNCi0gICAgICAgIHBEaWN0ID0gKENQREZfRGljdGlvbmFyeSopaXRlbS5HZXRQYXJhbSgpOw0KLSAgICAgICAgQ1BERl9TdHJpbmcqIHRlbXAgPSAoQ1BERl9TdHJpbmcqKXBEaWN0LT5HZXRFbGVtZW50KEZYX0JTVFJDKCJBY3R1YWxUZXh0IikpOw0KLSAgICAgICAgaWYgKHRlbXApIHsNCi0gICAgICAgICAgICBiRXhpc3QgPSBUUlVFOw0KLSAgICAgICAgICAgIGFjdFRleHQgPSB0ZW1wLT5HZXRVbmljb2RlVGV4dCgpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmICghYkV4aXN0KSB7DQotICAgICAgICByZXR1cm4gRlBERlRFWFRfTUNfUEFTUzsNCi0gICAgfQ0KLSAgICBpZiAobV9wUHJlVGV4dE9iaikgew0KLSAgICAgICAgaWYgKENQREZfQ29udGVudE1hcmtEYXRhKiBwUHJlTWFya0RhdGEgPSAoQ1BERl9Db250ZW50TWFya0RhdGEqKW1fcFByZVRleHRPYmotPm1fQ29udGVudE1hcmsuR2V0T2JqZWN0KCkpIHsNCi0gICAgICAgICAgICBpZiAocFByZU1hcmtEYXRhLT5Db3VudEl0ZW1zKCkgPT0gbikgew0KLSAgICAgICAgICAgICAgICBDUERGX0NvbnRlbnRNYXJrSXRlbSYgaXRlbSA9IHBQcmVNYXJrRGF0YS0+R2V0SXRlbShuIC0gMSk7DQotICAgICAgICAgICAgICAgIGlmIChwRGljdCA9PSBpdGVtLkdldFBhcmFtKCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGUERGVEVYVF9NQ19ET05FOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIENQREZfRm9udCoJcEZvbnQgPSBwVGV4dE9iai0+R2V0Rm9udCgpOw0KLSAgICBGWF9TVFJTSVpFIG5JdGVtcyA9IGFjdFRleHQuR2V0TGVuZ3RoKCk7DQotICAgIGlmIChuSXRlbXMgPCAxKSB7DQotICAgICAgICByZXR1cm4gRlBERlRFWFRfTUNfUEFTUzsNCi0gICAgfQ0KLSAgICBiRXhpc3QgPSBGQUxTRTsNCi0gICAgZm9yIChGWF9TVFJTSVpFIGkgPSAwOyBpIDwgbkl0ZW1zOyBpKyspIHsNCi0gICAgICAgIEZYX1dDSEFSIHdDaGFyID0gYWN0VGV4dC5HZXRBdChpKTsNCi0gICAgICAgIGlmICgtMSA9PSBwRm9udC0+Q2hhckNvZGVGcm9tVW5pY29kZSh3Q2hhcikpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgYkV4aXN0ID0gVFJVRTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoIWJFeGlzdCkgew0KLSAgICAgICAgcmV0dXJuIEZQREZURVhUX01DX1BBU1M7DQotICAgIH0NCi0gICAgYkV4aXN0ID0gRkFMU0U7DQotICAgIGZvciAoRlhfU1RSU0laRSBqID0gMDsgaiA8IG5JdGVtczsgaisrKSB7DQotICAgICAgICBGWF9XQ0hBUiB3Q2hhciA9IGFjdFRleHQuR2V0QXQoaik7DQotICAgICAgICBpZiAoKHdDaGFyID4gMHg4MCAmJiB3Q2hhciA8IDB4RkZGRCkgfHwgKHdDaGFyIDw9IDB4ODAgJiYgaXNwcmludCh3Q2hhcikpKSB7DQotICAgICAgICAgICAgYkV4aXN0ID0gVFJVRTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoIWJFeGlzdCkgew0KLSAgICAgICAgcmV0dXJuIEZQREZURVhUX01DX0RPTkU7DQotICAgIH0NCi0gICAgcmV0dXJuIEZQREZURVhUX01DX0RFTEFZOw0KLX0NCi12b2lkIENQREZfVGV4dFBhZ2U6OlByb2Nlc3NNYXJrZWRDb250ZW50KFBERlRFWFRfT2JqIE9iaikNCi17DQotICAgIENQREZfVGV4dE9iamVjdCogcFRleHRPYmogPSBPYmoubV9wVGV4dE9iajsNCi0gICAgQ1BERl9Db250ZW50TWFya0RhdGEqIHBNYXJrRGF0YSA9IChDUERGX0NvbnRlbnRNYXJrRGF0YSopcFRleHRPYmotPm1fQ29udGVudE1hcmsuR2V0T2JqZWN0KCk7DQotICAgIGlmKCFwTWFya0RhdGEpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpbnQgbkNvbnRlbnRNYXJrID0gcE1hcmtEYXRhLT5Db3VudEl0ZW1zKCk7DQotICAgIGlmIChuQ29udGVudE1hcmsgPCAxKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcgYWN0VGV4dDsNCi0gICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IE5VTEw7DQotICAgIGludCBuID0gMDsNCi0gICAgZm9yIChuID0gMDsgbiA8IG5Db250ZW50TWFyazsgbisrKSB7DQotICAgICAgICBDUERGX0NvbnRlbnRNYXJrSXRlbSYgaXRlbSA9IHBNYXJrRGF0YS0+R2V0SXRlbShuKTsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIHRhZ1N0ciA9IChDRlhfQnl0ZVN0cmluZylpdGVtLkdldE5hbWUoKTsNCi0gICAgICAgIHBEaWN0ID0gKENQREZfRGljdGlvbmFyeSopaXRlbS5HZXRQYXJhbSgpOw0KLSAgICAgICAgQ1BERl9TdHJpbmcqIHRlbXAgPSAoQ1BERl9TdHJpbmcqKXBEaWN0LT5HZXRFbGVtZW50KEZYX0JTVFJDKCJBY3R1YWxUZXh0IikpOw0KLSAgICAgICAgaWYgKHRlbXApIHsNCi0gICAgICAgICAgICBhY3RUZXh0ID0gdGVtcC0+R2V0VW5pY29kZVRleHQoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBGWF9TVFJTSVpFIG5JdGVtcyA9IGFjdFRleHQuR2V0TGVuZ3RoKCk7DQotICAgIGlmIChuSXRlbXMgPCAxKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9Gb250KglwRm9udCA9IHBUZXh0T2JqLT5HZXRGb250KCk7DQotICAgIENGWF9BZmZpbmVNYXRyaXggZm9ybU1hdHJpeCA9IE9iai5tX2Zvcm1NYXRyaXg7DQotICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4Ow0KLSAgICBwVGV4dE9iai0+R2V0VGV4dE1hdHJpeCgmbWF0cml4KTsNCi0gICAgbWF0cml4LkNvbmNhdChmb3JtTWF0cml4KTsNCi0gICAgRlhfRkxPQVQgZlBvc1ggPSBwVGV4dE9iai0+R2V0UG9zWCgpOw0KLSAgICBGWF9GTE9BVCBmUG9zWSA9IHBUZXh0T2JqLT5HZXRQb3NZKCk7DQotICAgIGludCBuQ2hhckluZm9JbmRleCA9IG1fVGV4dEJ1Zi5HZXRMZW5ndGgoKTsNCi0gICAgQ0ZYX0Zsb2F0UmVjdCBjaGFyQm94Ow0KLSAgICBjaGFyQm94LnRvcCA9IHBUZXh0T2JqLT5tX1RvcDsNCi0gICAgY2hhckJveC5sZWZ0ID0gcFRleHRPYmotPm1fTGVmdDsNCi0gICAgY2hhckJveC5yaWdodCA9IHBUZXh0T2JqLT5tX1JpZ2h0Ow0KLSAgICBjaGFyQm94LmJvdHRvbSA9IHBUZXh0T2JqLT5tX0JvdHRvbTsNCi0gICAgZm9yIChGWF9TVFJTSVpFIGsgPSAwOyBrIDwgbkl0ZW1zOyBrKyspIHsNCi0gICAgICAgIEZYX1dDSEFSIHdDaGFyID0gYWN0VGV4dC5HZXRBdChrKTsNCi0gICAgICAgIGlmICh3Q2hhciA8PSAweDgwICYmICFpc3ByaW50KHdDaGFyKSkgew0KLSAgICAgICAgICAgIHdDaGFyID0gMHgyMDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICh3Q2hhciA+PSAweEZGRkQpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIFBBR0VDSEFSX0lORk8gY2hhcmluZm87DQotICAgICAgICBjaGFyaW5mby5tX09yaWdpblggPSBmUG9zWDsNCi0gICAgICAgIGNoYXJpbmZvLm1fT3JpZ2luWSA9IGZQb3NZOw0KLSAgICAgICAgY2hhcmluZm8ubV9JbmRleCA9IG5DaGFySW5mb0luZGV4Ow0KLSAgICAgICAgY2hhcmluZm8ubV9Vbmljb2RlID0gd0NoYXI7DQotICAgICAgICBjaGFyaW5mby5tX0NoYXJDb2RlID0gcEZvbnQtPkNoYXJDb2RlRnJvbVVuaWNvZGUod0NoYXIpOw0KLSAgICAgICAgY2hhcmluZm8ubV9GbGFnID0gRlBERlRFWFRfQ0hBUl9QSUVDRTsNCi0gICAgICAgIGNoYXJpbmZvLm1fcFRleHRPYmogPSBwVGV4dE9iajsNCi0gICAgICAgIGNoYXJpbmZvLm1fQ2hhckJveC50b3AgPSBjaGFyQm94LnRvcDsNCi0gICAgICAgIGNoYXJpbmZvLm1fQ2hhckJveC5sZWZ0ID0gY2hhckJveC5sZWZ0Ow0KLSAgICAgICAgY2hhcmluZm8ubV9DaGFyQm94LnJpZ2h0ID0gY2hhckJveC5yaWdodDsNCi0gICAgICAgIGNoYXJpbmZvLm1fQ2hhckJveC5ib3R0b20gPSBjaGFyQm94LmJvdHRvbTsNCi0gICAgICAgIGNoYXJpbmZvLm1fTWF0cml4LkNvcHkobWF0cml4KTsNCi0gICAgICAgIG1fVGVtcFRleHRCdWYuQXBwZW5kQ2hhcih3Q2hhcik7DQotICAgICAgICBtX1RlbXBDaGFyTGlzdC5BZGQoY2hhcmluZm8pOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1BERl9UZXh0UGFnZTo6RmluZFByZXZpb3VzVGV4dE9iamVjdCh2b2lkKQ0KLXsNCi0gICAgaWYgKG1fVGVtcENoYXJMaXN0LkdldFNpemUoKSA8IDEgJiYgbV9jaGFyTGlzdC5HZXRTaXplKCkgPCAxKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgUEFHRUNIQVJfSU5GTyBwcmVDaGFyOw0KLSAgICBpZiAobV9UZW1wQ2hhckxpc3QuR2V0U2l6ZSgpID49IDEpIHsNCi0gICAgICAgIHByZUNoYXIgPSAqKFBBR0VDSEFSX0lORk8qKW1fVGVtcENoYXJMaXN0LkdldEF0KG1fVGVtcENoYXJMaXN0LkdldFNpemUoKSAtIDEpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcHJlQ2hhciA9ICooUEFHRUNIQVJfSU5GTyopbV9jaGFyTGlzdC5HZXRBdChtX2NoYXJMaXN0LkdldFNpemUoKSAtIDEpOw0KLSAgICB9DQotICAgIGlmIChwcmVDaGFyLm1fcFRleHRPYmopIHsNCi0gICAgICAgIG1fcFByZVRleHRPYmogPSBwcmVDaGFyLm1fcFRleHRPYmo7DQotICAgIH0NCi19DQotdm9pZCBDUERGX1RleHRQYWdlOjpQcm9jZXNzVGV4dE9iamVjdChQREZURVhUX09iaiBPYmopDQotew0KLSAgICBDUERGX1RleHRPYmplY3QqIHBUZXh0T2JqID0gT2JqLm1fcFRleHRPYmo7DQotICAgIGlmKEZYU1lTX2ZhYnMocFRleHRPYmotPm1fUmlnaHQgLSBwVGV4dE9iai0+bV9MZWZ0KSA8IDAuMDFmICkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENGWF9BZmZpbmVNYXRyaXggZm9ybU1hdHJpeCA9IE9iai5tX2Zvcm1NYXRyaXg7DQotICAgIENQREZfRm9udCoJcEZvbnQgPSBwVGV4dE9iai0+R2V0Rm9udCgpOw0KLSAgICBDRlhfQWZmaW5lTWF0cml4IG1hdHJpeDsNCi0gICAgcFRleHRPYmotPkdldFRleHRNYXRyaXgoJm1hdHJpeCk7DQotICAgIG1hdHJpeC5Db25jYXQoZm9ybU1hdHJpeCk7DQotICAgIEZYX0lOVDMyIGJQcmVNS0MgPSBQcmVNYXJrZWRDb250ZW50KE9iaik7DQotICAgIGlmIChGUERGVEVYVF9NQ19ET05FID09IGJQcmVNS0MpIHsNCi0gICAgICAgIG1fcFByZVRleHRPYmogPSBwVGV4dE9iajsNCi0gICAgICAgIG1fcGVyTWF0cml4LkNvcHkoZm9ybU1hdHJpeCk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaW50IHJlc3VsdCA9IDA7DQotICAgIGlmIChtX3BQcmVUZXh0T2JqKSB7DQotICAgICAgICByZXN1bHQgPSBQcm9jZXNzSW5zZXJ0T2JqZWN0KHBUZXh0T2JqLCBmb3JtTWF0cml4KTsNCi0gICAgICAgIGlmICgyID09IHJlc3VsdCkgew0KLSAgICAgICAgICAgIG1fQ3VybGluZVJlY3QgPSBDRlhfRmxvYXRSZWN0KE9iai5tX3BUZXh0T2JqLT5tX0xlZnQsIE9iai5tX3BUZXh0T2JqLT5tX0JvdHRvbSwgT2JqLm1fcFRleHRPYmotPm1fUmlnaHQsIE9iai5tX3BUZXh0T2JqLT5tX1RvcCk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIG1fQ3VybGluZVJlY3QuVW5pb24oQ0ZYX0Zsb2F0UmVjdChPYmoubV9wVGV4dE9iai0+bV9MZWZ0LCBPYmoubV9wVGV4dE9iai0+bV9Cb3R0b20sIE9iai5tX3BUZXh0T2JqLT5tX1JpZ2h0LCBPYmoubV9wVGV4dE9iai0+bV9Ub3ApKTsNCi0gICAgICAgIH0NCi0gICAgICAgIFBBR0VDSEFSX0lORk8gZ2VuZXJhdGVDaGFyOw0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSAxKSB7DQotICAgICAgICAgICAgaWYgKEdlbmVyYXRlQ2hhckluZm8oVEVYVF9CTEFOS19DSEFSLCBnZW5lcmF0ZUNoYXIpKSB7DQotICAgICAgICAgICAgICAgIGlmICghZm9ybU1hdHJpeC5Jc0lkZW50aXR5KCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ2hhci5tX01hdHJpeC5Db3B5KGZvcm1NYXRyaXgpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG1fVGVtcFRleHRCdWYuQXBwZW5kQ2hhcihURVhUX0JMQU5LX0NIQVIpOw0KLSAgICAgICAgICAgICAgICBtX1RlbXBDaGFyTGlzdC5BZGQoZ2VuZXJhdGVDaGFyKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2UgaWYocmVzdWx0ID09IDIpIHsNCi0gICAgICAgICAgICBDbG9zZVRlbXBMaW5lKCk7DQotICAgICAgICAgICAgaWYobV9UZXh0QnVmLkdldFNpemUoKSkgew0KLSAgICAgICAgICAgICAgICBpZihtX1BhcnNlT3B0aW9ucy5tX2JHZXRDaGFyQ29kZU9ubHkpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fVGV4dEJ1Zi5BcHBlbmRDaGFyKFRFWFRfUkVUVVJOX0NIQVIpOw0KLSAgICAgICAgICAgICAgICAgICAgbV9UZXh0QnVmLkFwcGVuZENoYXIoVEVYVF9MSU5FRkVFRF9DSEFSKTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmKEdlbmVyYXRlQ2hhckluZm8oVEVYVF9SRVRVUk5fQ0hBUiwgZ2VuZXJhdGVDaGFyKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fVGV4dEJ1Zi5BcHBlbmRDaGFyKFRFWFRfUkVUVVJOX0NIQVIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm9ybU1hdHJpeC5Jc0lkZW50aXR5KCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDaGFyLm1fTWF0cml4LkNvcHkoZm9ybU1hdHJpeCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY2hhckxpc3QuQWRkKGdlbmVyYXRlQ2hhcik7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBpZihHZW5lcmF0ZUNoYXJJbmZvKFRFWFRfTElORUZFRURfQ0hBUiwgZ2VuZXJhdGVDaGFyKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fVGV4dEJ1Zi5BcHBlbmRDaGFyKFRFWFRfTElORUZFRURfQ0hBUik7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JtTWF0cml4LklzSWRlbnRpdHkoKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNoYXIubV9NYXRyaXguQ29weShmb3JtTWF0cml4KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9jaGFyTGlzdC5BZGQoZ2VuZXJhdGVDaGFyKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IDMgJiYgIW1fUGFyc2VPcHRpb25zLm1fYk91dHB1dEh5cGhlbikgew0KLSAgICAgICAgICAgIEZYX0lOVDMyIG5DaGFycyA9IHBUZXh0T2JqLT5Db3VudENoYXJzKCk7DQotICAgICAgICAgICAgaWYgKG5DaGFycyA9PSAxKSB7DQotICAgICAgICAgICAgICAgIENQREZfVGV4dE9iamVjdEl0ZW0gaXRlbTsNCi0gICAgICAgICAgICAgICAgcFRleHRPYmotPkdldENoYXJJbmZvKDAsICZpdGVtKTsNCi0gICAgICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgd3N0ckl0ZW0gPSBwVGV4dE9iai0+R2V0Rm9udCgpLT5Vbmljb2RlRnJvbUNoYXJDb2RlKGl0ZW0ubV9DaGFyQ29kZSk7DQotICAgICAgICAgICAgICAgIGlmKHdzdHJJdGVtLklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgICAgICAgICAgd3N0ckl0ZW0gKz0gKEZYX1dDSEFSKWl0ZW0ubV9DaGFyQ29kZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBGWF9XQ0hBUiBjdXJDaGFyID0gd3N0ckl0ZW0uR2V0QXQoMCk7DQotICAgICAgICAgICAgICAgIGlmICgweDJEID09IGN1ckNoYXIgfHwgMHhBRCA9PSBjdXJDaGFyKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgd2hpbGUgKG1fVGVtcFRleHRCdWYuR2V0U2l6ZSgpID4gMCAmJiBtX1RlbXBUZXh0QnVmLkdldFdpZGVTdHJpbmcoKS5HZXRBdChtX1RlbXBUZXh0QnVmLkdldExlbmd0aCgpIC0gMSkgPT0gMHgyMCkgew0KLSAgICAgICAgICAgICAgICBtX1RlbXBUZXh0QnVmLkRlbGV0ZShtX1RlbXBUZXh0QnVmLkdldExlbmd0aCgpIC0gMSwgMSk7DQotICAgICAgICAgICAgICAgIG1fVGVtcENoYXJMaXN0LkRlbGV0ZShtX1RlbXBDaGFyTGlzdC5HZXRTaXplKCkgLSAxKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgUEFHRUNIQVJfSU5GTyogY2hhID0gKFBBR0VDSEFSX0lORk8qKW1fVGVtcENoYXJMaXN0LkdldEF0KG1fVGVtcENoYXJMaXN0LkdldFNpemUoKSAtIDEpOw0KLSAgICAgICAgICAgIG1fVGVtcFRleHRCdWYuRGVsZXRlKG1fVGVtcFRleHRCdWYuR2V0TGVuZ3RoKCkgLSAxLCAxKTsNCi0jaWZkZWYgRk9YSVRfQ0hST01FX0JVSUxEDQotICAgICAgICAgICAgY2hhLT5tX1VuaWNvZGUgPSAweDI7DQotICAgICAgICAgICAgY2hhLT5tX0ZsYWcgPSBGUERGVEVYVF9DSEFSX0hZUEhFTjsNCi0gICAgICAgICAgICBtX1RlbXBUZXh0QnVmLkFwcGVuZENoYXIoMHhmZmZlKTsNCi0jZWxzZQ0KLSAgICAgICAgICAgIGNoYS0+bV9Vbmljb2RlID0gMDsNCi0gICAgICAgICAgICBtX1RlbXBUZXh0QnVmLkFwcGVuZENoYXIoMHhmZmZlKTsNCi0jZW5kaWYNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1fQ3VybGluZVJlY3QgPSBDRlhfRmxvYXRSZWN0KE9iai5tX3BUZXh0T2JqLT5tX0xlZnQsIE9iai5tX3BUZXh0T2JqLT5tX0JvdHRvbSwgT2JqLm1fcFRleHRPYmotPm1fUmlnaHQsIE9iai5tX3BUZXh0T2JqLT5tX1RvcCk7DQotICAgIH0NCi0gICAgaWYgKEZQREZURVhUX01DX0RFTEFZID09IGJQcmVNS0MpIHsNCi0gICAgICAgIFByb2Nlc3NNYXJrZWRDb250ZW50KE9iaik7DQotICAgICAgICBtX3BQcmVUZXh0T2JqID0gcFRleHRPYmo7DQotICAgICAgICBtX3Blck1hdHJpeC5Db3B5KGZvcm1NYXRyaXgpOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fcFByZVRleHRPYmogPSBwVGV4dE9iajsNCi0gICAgbV9wZXJNYXRyaXguQ29weShmb3JtTWF0cml4KTsNCi0gICAgaW50IG5JdGVtcyA9IHBUZXh0T2JqLT5Db3VudEl0ZW1zKCk7DQotICAgIEZYX0ZMT0FUIHNwYWNpbmcgPSAwOw0KLSAgICBGWF9GTE9BVCBiYXNlU3BhY2UgPSAwLjA7DQotICAgIEZYX0JPT0wgYkFsbENoYXIgPSBUUlVFOw0KLSAgICBpZiAocFRleHRPYmotPm1fVGV4dFN0YXRlLkdldE9iamVjdCgpLT5tX0NoYXJTcGFjZSAmJiBuSXRlbXMgPj0gMykgew0KLSAgICAgICAgc3BhY2luZyA9IG1hdHJpeC5UcmFuc2Zvcm1EaXN0YW5jZShwVGV4dE9iai0+bV9UZXh0U3RhdGUuR2V0T2JqZWN0KCktPm1fQ2hhclNwYWNlKTsNCi0gICAgICAgIGJhc2VTcGFjZSA9IHNwYWNpbmc7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5JdGVtczsgaSsrKSB7DQotICAgICAgICAgICAgQ1BERl9UZXh0T2JqZWN0SXRlbSBpdGVtOw0KLSAgICAgICAgICAgIHBUZXh0T2JqLT5HZXRJdGVtSW5mbyhpLCAmaXRlbSk7DQotICAgICAgICAgICAgaWYgKGl0ZW0ubV9DaGFyQ29kZSA9PSAoRlhfRFdPUkQpIC0gMSkgew0KLSAgICAgICAgICAgICAgICBGWF9GTE9BVCBmb250c2l6ZV9oID0gcFRleHRPYmotPm1fVGV4dFN0YXRlLkdldEZvbnRTaXplSCgpOw0KLSAgICAgICAgICAgICAgICBGWF9GTE9BVCBrZXJuaW5nID0gLWZvbnRzaXplX2ggKiBpdGVtLm1fT3JpZ2luWCAvIDEwMDA7DQotICAgICAgICAgICAgICAgIGlmKGtlcm5pbmcgKyBzcGFjaW5nIDwgYmFzZVNwYWNlKSB7DQotICAgICAgICAgICAgICAgICAgICBiYXNlU3BhY2UgPSBrZXJuaW5nICsgc3BhY2luZzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBiQWxsQ2hhciA9IEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHNwYWNpbmcgPSAwOw0KLSAgICAgICAgaWYoYmFzZVNwYWNlIDwgMC4wIHx8IChuSXRlbXMgPT0gMyAmJiAhYkFsbENoYXIpKSB7DQotICAgICAgICAgICAgYmFzZVNwYWNlID0gMC4wOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkl0ZW1zOyBpKyspIHsNCi0gICAgICAgIENQREZfVGV4dE9iamVjdEl0ZW0gaXRlbTsNCi0gICAgICAgIFBBR0VDSEFSX0lORk8gY2hhcmluZm87DQotICAgICAgICBjaGFyaW5mby5tX09yaWdpblggPSAwOw0KLSAgICAgICAgY2hhcmluZm8ubV9PcmlnaW5ZID0gMDsNCi0gICAgICAgIHBUZXh0T2JqLT5HZXRJdGVtSW5mbyhpLCAmaXRlbSk7DQotICAgICAgICBpZiAoaXRlbS5tX0NoYXJDb2RlID09IChGWF9EV09SRCkgLSAxKSB7DQotICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgc3RyID0gbV9UZW1wVGV4dEJ1Zi5HZXRXaWRlU3RyaW5nKCk7DQotICAgICAgICAgICAgaWYoc3RyLklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgICAgICBzdHIgPSBtX1RleHRCdWYuR2V0V2lkZVN0cmluZygpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoc3RyLklzRW1wdHkoKSB8fCBzdHIuR2V0QXQoc3RyLkdldExlbmd0aCgpIC0gMSkgPT0gVEVYVF9CTEFOS19DSEFSKSB7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9GTE9BVCBmb250c2l6ZV9oID0gcFRleHRPYmotPm1fVGV4dFN0YXRlLkdldEZvbnRTaXplSCgpOw0KLSAgICAgICAgICAgIHNwYWNpbmcgPSAtZm9udHNpemVfaCAqIGl0ZW0ubV9PcmlnaW5YIC8gMTAwMDsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0ZMT0FUIGNoYXJTcGFjZSA9IHBUZXh0T2JqLT5tX1RleHRTdGF0ZS5HZXRPYmplY3QoKS0+bV9DaGFyU3BhY2U7DQotICAgICAgICBpZiAoY2hhclNwYWNlID4gMC4wMDEpIHsNCi0gICAgICAgICAgICBzcGFjaW5nICs9IG1hdHJpeC5UcmFuc2Zvcm1EaXN0YW5jZShjaGFyU3BhY2UpOw0KLSAgICAgICAgfSBlbHNlIGlmKGNoYXJTcGFjZSA8IC0wLjAwMSkgew0KLSAgICAgICAgICAgIHNwYWNpbmcgLT0gbWF0cml4LlRyYW5zZm9ybURpc3RhbmNlKEZYU1lTX2ZhYnMoY2hhclNwYWNlKSk7DQotICAgICAgICB9DQotICAgICAgICBzcGFjaW5nIC09IGJhc2VTcGFjZTsNCi0gICAgICAgIGlmIChzcGFjaW5nICYmIGkgPiAwKSB7DQotICAgICAgICAgICAgaW50IGxhc3Rfd2lkdGggPSAwOw0KLSAgICAgICAgICAgIEZYX0ZMT0FUIGZvbnRzaXplX2ggPSBwVGV4dE9iai0+bV9UZXh0U3RhdGUuR2V0Rm9udFNpemVIKCk7DQotICAgICAgICAgICAgRlhfRFdPUkQgc3BhY2VfY2hhcmNvZGUgPSBwRm9udC0+Q2hhckNvZGVGcm9tVW5pY29kZSgnICcpOw0KLSAgICAgICAgICAgIEZYX0ZMT0FUIHRocmVzaG9sZCA9IDA7DQotICAgICAgICAgICAgaWYgKHNwYWNlX2NoYXJjb2RlICE9IC0xKSB7DQotICAgICAgICAgICAgICAgIHRocmVzaG9sZCA9IGZvbnRzaXplX2ggKiBwRm9udC0+R2V0Q2hhcldpZHRoRihzcGFjZV9jaGFyY29kZSkgLyAxMDAwIDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKHRocmVzaG9sZCA+IGZvbnRzaXplX2ggLyAzKSB7DQotICAgICAgICAgICAgICAgIHRocmVzaG9sZCA9IDA7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgdGhyZXNob2xkIC89IDI7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmICh0aHJlc2hvbGQgPT0gMCkgew0KLSAgICAgICAgICAgICAgICB0aHJlc2hvbGQgPSBmb250c2l6ZV9oOw0KLSAgICAgICAgICAgICAgICBpbnQgdGhpc193aWR0aCA9IEZYU1lTX2FicyhHZXRDaGFyV2lkdGgoaXRlbS5tX0NoYXJDb2RlLCBwRm9udCkpOw0KLSAgICAgICAgICAgICAgICB0aHJlc2hvbGQgPSB0aGlzX3dpZHRoID4gbGFzdF93aWR0aCA/IChGWF9GTE9BVCl0aGlzX3dpZHRoIDogKEZYX0ZMT0FUKWxhc3Rfd2lkdGg7DQotICAgICAgICAgICAgICAgIGludCBuRGl2aWRlID0gNjsNCi0gICAgICAgICAgICAgICAgaWYgKHRocmVzaG9sZCA8IDMwMCkgew0KLSAgICAgICAgICAgICAgICAgICAgbkRpdmlkZSA9IDI7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhyZXNob2xkIDwgNTAwKSB7DQotICAgICAgICAgICAgICAgICAgICBuRGl2aWRlID0gNDsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aHJlc2hvbGQgPCA3MDApIHsNCi0gICAgICAgICAgICAgICAgICAgIG5EaXZpZGUgPSA1Ow0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHRocmVzaG9sZCA9IHRocmVzaG9sZCAvIG5EaXZpZGU7DQotICAgICAgICAgICAgICAgIHRocmVzaG9sZCA9IGZvbnRzaXplX2ggKiB0aHJlc2hvbGQgLyAxMDAwOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAodGhyZXNob2xkICYmIChzcGFjaW5nICYmIHNwYWNpbmcgPj0gdGhyZXNob2xkKSApIHsNCi0gICAgICAgICAgICAgICAgY2hhcmluZm8ubV9Vbmljb2RlID0gVEVYVF9CTEFOS19DSEFSOw0KLSAgICAgICAgICAgICAgICBjaGFyaW5mby5tX0ZsYWcgPSBGUERGVEVYVF9DSEFSX0dFTkVSQVRFRDsNCi0gICAgICAgICAgICAgICAgY2hhcmluZm8ubV9wVGV4dE9iaiA9IHBUZXh0T2JqOw0KLSAgICAgICAgICAgICAgICBjaGFyaW5mby5tX0luZGV4ID0gbV9UZXh0QnVmLkdldExlbmd0aCgpOw0KLSAgICAgICAgICAgICAgICBtX1RlbXBUZXh0QnVmLkFwcGVuZENoYXIoVEVYVF9CTEFOS19DSEFSKTsNCi0gICAgICAgICAgICAgICAgY2hhcmluZm8ubV9DaGFyQ29kZSA9IC0xOw0KLSAgICAgICAgICAgICAgICBjaGFyaW5mby5tX01hdHJpeC5Db3B5KGZvcm1NYXRyaXgpOw0KLSAgICAgICAgICAgICAgICBtYXRyaXguVHJhbnNmb3JtKGl0ZW0ubV9PcmlnaW5YLCBpdGVtLm1fT3JpZ2luWSwgY2hhcmluZm8ubV9PcmlnaW5YLCBjaGFyaW5mby5tX09yaWdpblkpOw0KLSAgICAgICAgICAgICAgICBjaGFyaW5mby5tX0NoYXJCb3ggPSBDRlhfRmxvYXRSZWN0KGNoYXJpbmZvLm1fT3JpZ2luWCwgY2hhcmluZm8ubV9PcmlnaW5ZLCBjaGFyaW5mby5tX09yaWdpblgsIGNoYXJpbmZvLm1fT3JpZ2luWSk7DQotICAgICAgICAgICAgICAgIG1fVGVtcENoYXJMaXN0LkFkZChjaGFyaW5mbyk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChpdGVtLm1fQ2hhckNvZGUgPT0gKEZYX0RXT1JEKSAtIDEpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgc3BhY2luZyA9IDA7DQotICAgICAgICBDRlhfV2lkZVN0cmluZyB3c3RySXRlbSA9IHBGb250LT5Vbmljb2RlRnJvbUNoYXJDb2RlKGl0ZW0ubV9DaGFyQ29kZSk7DQotICAgICAgICBGWF9CT09MIGJOb1VuaWNvZGUgPSBGQUxTRTsNCi0gICAgICAgIEZYX1dDSEFSIHdDaGFyID0gd3N0ckl0ZW0uR2V0QXQoMCk7DQotICAgICAgICBpZiAoKHdzdHJJdGVtLklzRW1wdHkoKSB8fCB3Q2hhciA9PSAwKSAmJiBpdGVtLm1fQ2hhckNvZGUpIHsNCi0gICAgICAgICAgICBpZih3c3RySXRlbS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICAgICAgd3N0ckl0ZW0gKz0gKEZYX1dDSEFSKWl0ZW0ubV9DaGFyQ29kZTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICB3c3RySXRlbS5TZXRBdCgwLCAoRlhfV0NIQVIpaXRlbS5tX0NoYXJDb2RlKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgYk5vVW5pY29kZSA9IFRSVUU7DQotICAgICAgICB9DQotICAgICAgICBjaGFyaW5mby5tX0luZGV4ID0gLTE7DQotICAgICAgICBjaGFyaW5mby5tX0NoYXJDb2RlID0gaXRlbS5tX0NoYXJDb2RlOw0KLSAgICAgICAgaWYoYk5vVW5pY29kZSkgew0KLSAgICAgICAgICAgIGNoYXJpbmZvLm1fRmxhZyA9IEZQREZURVhUX0NIQVJfVU5VTklDT0RFOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBjaGFyaW5mby5tX0ZsYWcgPSBGUERGVEVYVF9DSEFSX05PUk1BTDsNCi0gICAgICAgIH0NCi0gICAgICAgIGNoYXJpbmZvLm1fcFRleHRPYmogPSBwVGV4dE9iajsNCi0gICAgICAgIGNoYXJpbmZvLm1fT3JpZ2luWCA9IDAsIGNoYXJpbmZvLm1fT3JpZ2luWSA9IDA7DQotICAgICAgICBtYXRyaXguVHJhbnNmb3JtKGl0ZW0ubV9PcmlnaW5YLCBpdGVtLm1fT3JpZ2luWSwgY2hhcmluZm8ubV9PcmlnaW5YLCBjaGFyaW5mby5tX09yaWdpblkpOw0KLSAgICAgICAgRlhfUkVDVCByZWN0KDAsIDAsIDAsIDApOw0KLSAgICAgICAgcmVjdC5JbnRlcnNlY3QoMCwgMCwgMCwgMCk7DQotICAgICAgICBjaGFyaW5mby5tX3BUZXh0T2JqLT5HZXRGb250KCktPkdldENoYXJCQm94KGNoYXJpbmZvLm1fQ2hhckNvZGUsIHJlY3QpOw0KLSAgICAgICAgY2hhcmluZm8ubV9DaGFyQm94LnRvcCA9IHJlY3QudG9wICogcFRleHRPYmotPkdldEZvbnRTaXplKCkgLyAxMDAwICsgaXRlbS5tX09yaWdpblk7DQotICAgICAgICBjaGFyaW5mby5tX0NoYXJCb3gubGVmdCA9IHJlY3QubGVmdCAqIHBUZXh0T2JqLT5HZXRGb250U2l6ZSgpIC8gMTAwMCArIGl0ZW0ubV9PcmlnaW5YOw0KLSAgICAgICAgY2hhcmluZm8ubV9DaGFyQm94LnJpZ2h0ID0gcmVjdC5yaWdodCAqIHBUZXh0T2JqLT5HZXRGb250U2l6ZSgpIC8gMTAwMCArIGl0ZW0ubV9PcmlnaW5YOw0KLSAgICAgICAgY2hhcmluZm8ubV9DaGFyQm94LmJvdHRvbSA9IHJlY3QuYm90dG9tICogcFRleHRPYmotPkdldEZvbnRTaXplKCkgLyAxMDAwICsgaXRlbS5tX09yaWdpblk7DQotICAgICAgICBpZiAoZmFic2YoY2hhcmluZm8ubV9DaGFyQm94LnRvcCAtIGNoYXJpbmZvLm1fQ2hhckJveC5ib3R0b20pIDwgMC4wMWYpIHsNCi0gICAgICAgICAgICBjaGFyaW5mby5tX0NoYXJCb3gudG9wID0gY2hhcmluZm8ubV9DaGFyQm94LmJvdHRvbSArIHBUZXh0T2JqLT5HZXRGb250U2l6ZSgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGZhYnNmKGNoYXJpbmZvLm1fQ2hhckJveC5yaWdodCAtIGNoYXJpbmZvLm1fQ2hhckJveC5sZWZ0KSA8IDAuMDFmKSB7DQotICAgICAgICAgICAgY2hhcmluZm8ubV9DaGFyQm94LnJpZ2h0ID0gY2hhcmluZm8ubV9DaGFyQm94LmxlZnQgKyBwVGV4dE9iai0+R2V0Q2hhcldpZHRoKGNoYXJpbmZvLm1fQ2hhckNvZGUpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbWF0cml4LlRyYW5zZm9ybVJlY3QoY2hhcmluZm8ubV9DaGFyQm94KTsNCi0gICAgICAgIGNoYXJpbmZvLm1fTWF0cml4LkNvcHkobWF0cml4KTsNCi0gICAgICAgIGlmICh3c3RySXRlbS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICBjaGFyaW5mby5tX1VuaWNvZGUgPSAwOw0KLSAgICAgICAgICAgIG1fVGVtcENoYXJMaXN0LkFkZChjaGFyaW5mbyk7DQotICAgICAgICAgICAgbV9UZW1wVGV4dEJ1Zi5BcHBlbmRDaGFyKDB4ZmZmZSk7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGludCBuVG90YWwgPSB3c3RySXRlbS5HZXRMZW5ndGgoKTsNCi0gICAgICAgICAgICBpbnQgbiA9IDA7DQotICAgICAgICAgICAgRlhfQk9PTCBiRGVsID0gRkFMU0U7DQotICAgICAgICAgICAgd2hpbGUgKG4gPCBtX1RlbXBDaGFyTGlzdC5HZXRTaXplKCkgJiYgbiA8IDcpIHsNCi0gICAgICAgICAgICAgICAgbisrOw0KLSAgICAgICAgICAgICAgICBQQUdFQ0hBUl9JTkZPKiBjaGFyaW5mbzEgPSAoUEFHRUNIQVJfSU5GTyopbV9UZW1wQ2hhckxpc3QuR2V0QXQobV9UZW1wQ2hhckxpc3QuR2V0U2l6ZSgpIC0gbik7DQotICAgICAgICAgICAgICAgIGlmKGNoYXJpbmZvMS0+bV9DaGFyQ29kZSA9PSBjaGFyaW5mby5tX0NoYXJDb2RlICYmDQotICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmluZm8xLT5tX3BUZXh0T2JqLT5HZXRGb250KCkgPT0gY2hhcmluZm8ubV9wVGV4dE9iai0+R2V0Rm9udCgpICAmJg0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYU1lTX2ZhYnMoY2hhcmluZm8xLT5tX09yaWdpblggLSBjaGFyaW5mby5tX09yaWdpblgpIDwgVEVYVF9DSEFSUkFUSU9fR0FQREVMVEEgKiBwVGV4dE9iai0+R2V0Rm9udFNpemUoKSAgJiYNCi0gICAgICAgICAgICAgICAgICAgICAgICBGWFNZU19mYWJzKGNoYXJpbmZvMS0+bV9PcmlnaW5ZIC0gY2hhcmluZm8ubV9PcmlnaW5ZKSA8IFRFWFRfQ0hBUlJBVElPX0dBUERFTFRBICogcFRleHRPYmotPkdldEZvbnRTaXplKCkgKSB7DQotICAgICAgICAgICAgICAgICAgICBiRGVsID0gVFJVRTsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmKCFiRGVsKSB7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IG5JbmRleCA9IDA7IG5JbmRleCA8IG5Ub3RhbDsgbkluZGV4KyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGNoYXJpbmZvLm1fVW5pY29kZSA9IHdzdHJJdGVtLkdldEF0KG5JbmRleCk7DQotICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcmluZm8ubV9Vbmljb2RlKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmluZm8ubV9JbmRleCA9IG1fVGV4dEJ1Zi5HZXRMZW5ndGgoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX1RlbXBUZXh0QnVmLkFwcGVuZENoYXIoY2hhcmluZm8ubV9Vbmljb2RlKTsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9UZW1wVGV4dEJ1Zi5BcHBlbmRDaGFyKDB4ZmZmZSk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBtX1RlbXBDaGFyTGlzdC5BZGQoY2hhcmluZm8pOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIGlmKGkgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyBzdHIgPSBtX1RlbXBUZXh0QnVmLkdldFdpZGVTdHJpbmcoKTsNCi0gICAgICAgICAgICAgICAgaWYgKCFzdHIuSXNFbXB0eSgpICYmIHN0ci5HZXRBdChzdHIuR2V0TGVuZ3RoKCkgLSAxKSA9PSBURVhUX0JMQU5LX0NIQVIpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fVGVtcFRleHRCdWYuRGVsZXRlKG1fVGVtcFRleHRCdWYuR2V0TGVuZ3RoKCkgLSAxLCAxKTsNCi0gICAgICAgICAgICAgICAgICAgIG1fVGVtcENoYXJMaXN0LkRlbGV0ZShtX1RlbXBDaGFyTGlzdC5HZXRTaXplKCkgLSAxKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1GWF9JTlQzMiBDUERGX1RleHRQYWdlOjpHZXRUZXh0T2JqZWN0V3JpdGluZ01vZGUoY29uc3QgQ1BERl9UZXh0T2JqZWN0KiBwVGV4dE9iaikNCi17DQotICAgIEZYX0lOVDMyIG5DaGFycyA9IHBUZXh0T2JqLT5Db3VudENoYXJzKCk7DQotICAgIGlmIChuQ2hhcnMgPT0gMSkgew0KLSAgICAgICAgcmV0dXJuIG1fVGV4dGxpbmVEaXI7DQotICAgIH0NCi0gICAgQ1BERl9UZXh0T2JqZWN0SXRlbSBmaXJzdCwgbGFzdDsNCi0gICAgcFRleHRPYmotPkdldENoYXJJbmZvKDAsICZmaXJzdCk7DQotICAgIHBUZXh0T2JqLT5HZXRDaGFySW5mbyhuQ2hhcnMgLSAxLCAmbGFzdCk7DQotICAgIENGWF9NYXRyaXggdGV4dE1hdHJpeDsNCi0gICAgcFRleHRPYmotPkdldFRleHRNYXRyaXgoJnRleHRNYXRyaXgpOw0KLSAgICB0ZXh0TWF0cml4LlRyYW5zZm9ybVBvaW50KGZpcnN0Lm1fT3JpZ2luWCwgZmlyc3QubV9PcmlnaW5ZKTsNCi0gICAgdGV4dE1hdHJpeC5UcmFuc2Zvcm1Qb2ludChsYXN0Lm1fT3JpZ2luWCwgbGFzdC5tX09yaWdpblkpOw0KLSAgICBGWF9GTE9BVCBkWCA9IEZYU1lTX2ZhYnMobGFzdC5tX09yaWdpblggLSBmaXJzdC5tX09yaWdpblgpOw0KLSAgICBGWF9GTE9BVCBkWSA9IEZYU1lTX2ZhYnMobGFzdC5tX09yaWdpblkgLSBmaXJzdC5tX09yaWdpblkpOw0KLSAgICBpZiAoZFggPD0gMC4wMDAxZiAmJiBkWSA8PSAwLjAwMDFmKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgQ0ZYX1ZlY3RvckYgdjsNCi0gICAgdi5TZXQoZFgsIGRZKTsNCi0gICAgdi5Ob3JtYWxpemUoKTsNCi0gICAgaWYgKHYueSA8PSAwLjA4NzJmKSB7DQotICAgICAgICBpZiAodi54IDw9IDAuMDg3MmYpIHsNCi0gICAgICAgICAgICByZXR1cm4gbV9UZXh0bGluZURpcjsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9IGVsc2UgaWYgKHYueCA8PSAwLjA4NzJmKSB7DQotICAgICAgICByZXR1cm4gMTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9UZXh0bGluZURpcjsNCi19DQotRlhfQk9PTCBDUERGX1RleHRQYWdlOjpJc0h5cGhlbihGWF9XQ0hBUiBjdXJDaGFyKQ0KLXsNCi0gICAgQ0ZYX1dpZGVTdHJpbmcgc3RyQ3VyVGV4dCA9IG1fVGVtcFRleHRCdWYuR2V0V2lkZVN0cmluZygpOw0KLSAgICBpZihzdHJDdXJUZXh0LkdldExlbmd0aCgpID09IDApIHsNCi0gICAgICAgIHN0ckN1clRleHQgPSBtX1RleHRCdWYuR2V0V2lkZVN0cmluZygpOw0KLSAgICB9DQotICAgIEZYX1NUUlNJWkUgbkNvdW50ID0gc3RyQ3VyVGV4dC5HZXRMZW5ndGgoKTsNCi0gICAgaW50IG5JbmRleCA9IG5Db3VudCAtIDE7DQotICAgIEZYX1dDSEFSIHdjVG1wID0gc3RyQ3VyVGV4dC5HZXRBdChuSW5kZXgpOw0KLSAgICB3aGlsZSh3Y1RtcCA9PSAweDIwICYmIG5JbmRleCA8PSBuQ291bnQgLSAxICYmIG5JbmRleCA+PSAwKSB7DQotICAgICAgICB3Y1RtcCA9IHN0ckN1clRleHQuR2V0QXQoLS1uSW5kZXgpOw0KLSAgICB9DQotICAgIGlmICgweDJEID09IHdjVG1wIHx8IDB4QUQgPT0gd2NUbXApIHsNCi0gICAgICAgIGlmICgtLW5JbmRleCA+IDApIHsNCi0gICAgICAgICAgICBGWF9XQ0hBUiBwcmVDaGFyID0gc3RyQ3VyVGV4dC5HZXRBdCgobkluZGV4KSk7DQotICAgICAgICAgICAgaWYgKCgocHJlQ2hhciA+PSBMJ0EnICYmIHByZUNoYXIgPD0gTCdaJykgfHwgKHByZUNoYXIgPj0gTCdhJyAmJiBwcmVDaGFyIDw9IEwneicpKQ0KLSAgICAgICAgICAgICAgICAgICAgJiYgKChjdXJDaGFyID49IEwnQScgJiYgY3VyQ2hhciA8PSBMJ1onKSB8fCAoY3VyQ2hhciA+PSBMJ2EnICYmIGN1ckNoYXIgPD0gTCd6JykpKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGludCBzaXplID0gbV9UZW1wQ2hhckxpc3QuR2V0U2l6ZSgpOw0KLSAgICAgICAgUEFHRUNIQVJfSU5GTyBwcmVDaGFyOw0KLSAgICAgICAgaWYgKHNpemUpIHsNCi0gICAgICAgICAgICBwcmVDaGFyID0gKFBBR0VDSEFSX0lORk8pbV9UZW1wQ2hhckxpc3Rbc2l6ZSAtIDFdOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBzaXplID0gbV9jaGFyTGlzdC5HZXRTaXplKCk7DQotICAgICAgICAgICAgaWYoc2l6ZSA9PSAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcHJlQ2hhciA9IChQQUdFQ0hBUl9JTkZPKW1fY2hhckxpc3Rbc2l6ZSAtIDFdOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKEZQREZURVhUX0NIQVJfUElFQ0UgPT0gcHJlQ2hhci5tX0ZsYWcpDQotICAgICAgICAgICAgaWYgKDB4QUQgPT0gcHJlQ2hhci5tX1VuaWNvZGUgfHwgMHgyRCA9PSBwcmVDaGFyLm1fVW5pY29kZSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1pbnQgQ1BERl9UZXh0UGFnZTo6UHJvY2Vzc0luc2VydE9iamVjdChjb25zdCBDUERGX1RleHRPYmplY3QqIHBPYmosIENGWF9BZmZpbmVNYXRyaXggZm9ybU1hdHJpeCkNCi17DQotICAgIEZpbmRQcmV2aW91c1RleHRPYmplY3QoKTsNCi0gICAgRlhfQk9PTCBiTmV3bGluZSA9IEZBTFNFOw0KLSAgICBpbnQgV3JpdGluZ01vZGUgPSBHZXRUZXh0T2JqZWN0V3JpdGluZ01vZGUocE9iaik7DQotICAgIGlmKFdyaXRpbmdNb2RlID09IC0xKSB7DQotICAgICAgICBXcml0aW5nTW9kZSA9IEdldFRleHRPYmplY3RXcml0aW5nTW9kZShtX3BQcmVUZXh0T2JqKTsNCi0gICAgfQ0KLSAgICBDRlhfRmxvYXRSZWN0IHRoaXNfcmVjdChwT2JqLT5tX0xlZnQsIHBPYmotPm1fQm90dG9tLCBwT2JqLT5tX1JpZ2h0LCBwT2JqLT5tX1RvcCk7DQotICAgIENGWF9GbG9hdFJlY3QgcHJldl9yZWN0KG1fcFByZVRleHRPYmotPm1fTGVmdCwgbV9wUHJlVGV4dE9iai0+bV9Cb3R0b20sIG1fcFByZVRleHRPYmotPm1fUmlnaHQsIG1fcFByZVRleHRPYmotPm1fVG9wKTsNCi0gICAgQ1BERl9UZXh0T2JqZWN0SXRlbSBQcmV2SXRlbSwgaXRlbTsNCi0gICAgaW50IG5JdGVtID0gbV9wUHJlVGV4dE9iai0+Q291bnRJdGVtcygpOw0KLSAgICBtX3BQcmVUZXh0T2JqLT5HZXRJdGVtSW5mbyhuSXRlbSAtIDEsICZQcmV2SXRlbSk7DQotICAgIHBPYmotPkdldEl0ZW1JbmZvKDAsICZpdGVtKTsNCi0gICAgQ0ZYX1dpZGVTdHJpbmcgd3N0ckl0ZW0gPSBwT2JqLT5HZXRGb250KCktPlVuaWNvZGVGcm9tQ2hhckNvZGUoaXRlbS5tX0NoYXJDb2RlKTsNCi0gICAgaWYod3N0ckl0ZW0uSXNFbXB0eSgpKSB7DQotICAgICAgICB3c3RySXRlbSArPSAoRlhfV0NIQVIpaXRlbS5tX0NoYXJDb2RlOw0KLSAgICB9DQotICAgIEZYX1dDSEFSIGN1ckNoYXIgPSB3c3RySXRlbS5HZXRBdCgwKTsNCi0gICAgaWYoV3JpdGluZ01vZGUgPT0gMCkgew0KLSAgICAgICAgaWYodGhpc19yZWN0LkhlaWdodCgpID4gNC41ICYmIHByZXZfcmVjdC5IZWlnaHQoKSA+IDQuNSkgew0KLSAgICAgICAgICAgIEZYX0ZMT0FUIHRvcCA9IHRoaXNfcmVjdC50b3AgPCBwcmV2X3JlY3QudG9wID8gdGhpc19yZWN0LnRvcCA6IHByZXZfcmVjdC50b3A7DQotICAgICAgICAgICAgRlhfRkxPQVQgYm90dG9tID0gdGhpc19yZWN0LmJvdHRvbSA+IHByZXZfcmVjdC5ib3R0b20gPyB0aGlzX3JlY3QuYm90dG9tIDogcHJldl9yZWN0LmJvdHRvbTsNCi0gICAgICAgICAgICBpZihib3R0b20gPj0gdG9wKSB7DQotICAgICAgICAgICAgICAgIGlmKElzSHlwaGVuKGN1ckNoYXIpKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICByZXR1cm4gMjsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZiAoV3JpdGluZ01vZGUgPT0gMSkgew0KLSAgICAgICAgaWYodGhpc19yZWN0LldpZHRoKCkgPiBwT2JqLT5HZXRGb250U2l6ZSgpICogMC4xZiAmJiBwcmV2X3JlY3QuV2lkdGgoKSA+IG1fcFByZVRleHRPYmotPkdldEZvbnRTaXplKCkgKiAwLjFmKSB7DQotICAgICAgICAgICAgRlhfRkxPQVQgbGVmdCA9IHRoaXNfcmVjdC5sZWZ0ID4gbV9DdXJsaW5lUmVjdC5sZWZ0ID8gdGhpc19yZWN0LmxlZnQgOiBtX0N1cmxpbmVSZWN0LmxlZnQ7DQotICAgICAgICAgICAgRlhfRkxPQVQgcmlnaHQgPSB0aGlzX3JlY3QucmlnaHQgPCBtX0N1cmxpbmVSZWN0LnJpZ2h0ID8gdGhpc19yZWN0LnJpZ2h0IDogbV9DdXJsaW5lUmVjdC5yaWdodDsNCi0gICAgICAgICAgICBpZihyaWdodCA8PSBsZWZ0KSB7DQotICAgICAgICAgICAgICAgIGlmKElzSHlwaGVuKGN1ckNoYXIpKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICByZXR1cm4gMjsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhfRkxPQVQgbGFzdF9wb3MgPSBQcmV2SXRlbS5tX09yaWdpblg7DQotICAgIGludCBuTGFzdFdpZHRoID0gR2V0Q2hhcldpZHRoKFByZXZJdGVtLm1fQ2hhckNvZGUsIG1fcFByZVRleHRPYmotPkdldEZvbnQoKSk7DQotICAgIEZYX0ZMT0FUIGxhc3Rfd2lkdGggPSBuTGFzdFdpZHRoICogbV9wUHJlVGV4dE9iai0+R2V0Rm9udFNpemUoKSAvIDEwMDA7DQotICAgIGxhc3Rfd2lkdGggPSBGWFNZU19mYWJzKGxhc3Rfd2lkdGgpOw0KLSAgICBpbnQgblRoaXNXaWR0aCA9IEdldENoYXJXaWR0aChpdGVtLm1fQ2hhckNvZGUsIHBPYmotPkdldEZvbnQoKSk7DQotICAgIEZYX0ZMT0FUIHRoaXNfd2lkdGggPSBuVGhpc1dpZHRoICogcE9iai0+R2V0Rm9udFNpemUoKSAvIDEwMDA7DQotICAgIHRoaXNfd2lkdGggPSBGWFNZU19mYWJzKHRoaXNfd2lkdGgpOw0KLSAgICBGWF9GTE9BVCB0aHJlc2hvbGQgPSBsYXN0X3dpZHRoID4gdGhpc193aWR0aCA/IGxhc3Rfd2lkdGggLyA0IDogdGhpc193aWR0aCAvIDQ7DQotICAgIENGWF9BZmZpbmVNYXRyaXggcHJldl9tYXRyaXgsIHByZXZfcmV2ZXJzZTsNCi0gICAgbV9wUHJlVGV4dE9iai0+R2V0VGV4dE1hdHJpeCgmcHJldl9tYXRyaXgpOw0KLSAgICBwcmV2X21hdHJpeC5Db25jYXQobV9wZXJNYXRyaXgpOw0KLSAgICBwcmV2X3JldmVyc2UuU2V0UmV2ZXJzZShwcmV2X21hdHJpeCk7DQotICAgIEZYX0ZMT0FUIHggPSBwT2JqLT5HZXRQb3NYKCk7DQotICAgIEZYX0ZMT0FUIHkgPSBwT2JqLT5HZXRQb3NZKCk7DQotICAgIGZvcm1NYXRyaXguVHJhbnNmb3JtKHgsIHkpOw0KLSAgICBwcmV2X3JldmVyc2UuVHJhbnNmb3JtKHgsIHkpOw0KLSAgICBpZihsYXN0X3dpZHRoIDwgdGhpc193aWR0aCkgew0KLSAgICAgICAgdGhyZXNob2xkID0gcHJldl9yZXZlcnNlLlRyYW5zZm9ybURpc3RhbmNlKHRocmVzaG9sZCk7DQotICAgIH0NCi0gICAgQ0ZYX0Zsb2F0UmVjdCByZWN0MShtX3BQcmVUZXh0T2JqLT5tX0xlZnQsIHBPYmotPm1fQm90dG9tLCBtX3BQcmVUZXh0T2JqLT5tX1JpZ2h0LCBwT2JqLT5tX1RvcCk7DQotICAgIENGWF9GbG9hdFJlY3QgcmVjdDIobV9wUHJlVGV4dE9iai0+bV9MZWZ0LCBtX3BQcmVUZXh0T2JqLT5tX0JvdHRvbSwgbV9wUHJlVGV4dE9iai0+bV9SaWdodCwgbV9wUHJlVGV4dE9iai0+bV9Ub3ApOw0KLSAgICBDRlhfRmxvYXRSZWN0IHJlY3QzID0gcmVjdDE7DQotICAgIHJlY3QxLkludGVyc2VjdChyZWN0Mik7DQotICAgIGlmIChXcml0aW5nTW9kZSA9PSAwKSB7DQotICAgICAgICBpZiAoKHJlY3QxLklzRW1wdHkoKSAmJiByZWN0Mi5IZWlnaHQoKSA+IDUgJiYgcmVjdDMuSGVpZ2h0KCkgPiA1KQ0KLSAgICAgICAgICAgICAgICB8fCAoKHkgPiB0aHJlc2hvbGQgKiAyIHx8IHkgPCB0aHJlc2hvbGQgKiAtMykgJiYgKEZYU1lTX2ZhYnMoeSkgPCAxID8gRlhTWVNfZmFicyh4KSA8IEZYU1lTX2ZhYnMoeSkgOiBUUlVFKSkpIHsNCi0gICAgICAgICAgICBiTmV3bGluZSA9IFRSVUU7DQotICAgICAgICAgICAgaWYobkl0ZW0gPiAxICkgew0KLSAgICAgICAgICAgICAgICBDUERGX1RleHRPYmplY3RJdGVtIHRlbXBJdGVtOw0KLSAgICAgICAgICAgICAgICBtX3BQcmVUZXh0T2JqLT5HZXRJdGVtSW5mbygwLCAmdGVtcEl0ZW0pOw0KLSAgICAgICAgICAgICAgICBDRlhfQWZmaW5lTWF0cml4IG07DQotICAgICAgICAgICAgICAgIG1fcFByZVRleHRPYmotPkdldFRleHRNYXRyaXgoJm0pOw0KLSAgICAgICAgICAgICAgICBpZihQcmV2SXRlbS5tX09yaWdpblggPiB0ZW1wSXRlbS5tX09yaWdpblggJiYNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX0Rpc3BsYXlNYXRyaXguYSA+IDAuOSAmJiBtX0Rpc3BsYXlNYXRyaXguYiA8IDAuMSAmJg0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fRGlzcGxheU1hdHJpeC5jIDwgMC4xICYmIG1fRGlzcGxheU1hdHJpeC5kIDwgLTAuOQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICYmIG0uYiA8IDAuMSAmJiBtLmMgPCAwLjEgKSB7DQotICAgICAgICAgICAgICAgICAgICBDRlhfRmxvYXRSZWN0IHJlKDAsIG1fcFByZVRleHRPYmotPm1fQm90dG9tLCAxMDAwLCBtX3BQcmVUZXh0T2JqLT5tX1RvcCk7DQotICAgICAgICAgICAgICAgICAgICBpZihyZS5Db250YWlucyhwT2JqLT5HZXRQb3NYKCksIHBPYmotPkdldFBvc1koKSkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBiTmV3bGluZSA9IEZBTFNFOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBDRlhfRmxvYXRSZWN0IHJlKDAsIHBPYmotPm1fQm90dG9tLCAxMDAwLCBwT2JqLT5tX1RvcCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYocmUuQ29udGFpbnMobV9wUHJlVGV4dE9iai0+R2V0UG9zWCgpLCBtX3BQcmVUZXh0T2JqLT5HZXRQb3NZKCkpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJOZXdsaW5lID0gRkFMU0U7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmKGJOZXdsaW5lKSB7DQotICAgICAgICBpZihJc0h5cGhlbihjdXJDaGFyKSkgew0KLSAgICAgICAgICAgIHJldHVybiAzOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIDI7DQotICAgIH0NCi0gICAgRlhfSU5UMzIgbkNoYXJzID0gcE9iai0+Q291bnRDaGFycygpOw0KLSAgICBpZiAobkNoYXJzID09IDEgJiYgKCAweDJEID09IGN1ckNoYXIgfHwgMHhBRCA9PSBjdXJDaGFyKSkNCi0gICAgICAgIGlmIChJc0h5cGhlbihjdXJDaGFyKSkgew0KLSAgICAgICAgICAgIHJldHVybiAzOw0KLSAgICAgICAgfQ0KLSAgICBDRlhfV2lkZVN0cmluZyBQcmV2U3RyID0gbV9wUHJlVGV4dE9iai0+R2V0Rm9udCgpLT5Vbmljb2RlRnJvbUNoYXJDb2RlKFByZXZJdGVtLm1fQ2hhckNvZGUpOw0KLSAgICBGWF9XQ0hBUiBwcmVDaGFyID0gUHJldlN0ci5HZXRBdChQcmV2U3RyLkdldExlbmd0aCgpIC0gMSk7DQotICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4Ow0KLSAgICBwT2JqLT5HZXRUZXh0TWF0cml4KCZtYXRyaXgpOw0KLSAgICBtYXRyaXguQ29uY2F0KGZvcm1NYXRyaXgpOw0KLSAgICB0aHJlc2hvbGQgPSAoRlhfRkxPQVQpKG5MYXN0V2lkdGggPiBuVGhpc1dpZHRoID8gbkxhc3RXaWR0aCA6IG5UaGlzV2lkdGgpOw0KLSAgICB0aHJlc2hvbGQgPSB0aHJlc2hvbGQgPiA0MDAgPyAodGhyZXNob2xkIDwgNzAwID8gdGhyZXNob2xkIC8gNCA6ICAodGhyZXNob2xkID4gODAwID8gdGhyZXNob2xkIC8gNiA6IHRocmVzaG9sZCAvIDUpKSA6ICh0aHJlc2hvbGQgLyAyKTsNCi0gICAgaWYobkxhc3RXaWR0aCA+PSBuVGhpc1dpZHRoKSB7DQotICAgICAgICB0aHJlc2hvbGQgKj0gRlhTWVNfZmFicyhtX3BQcmVUZXh0T2JqLT5HZXRGb250U2l6ZSgpKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHRocmVzaG9sZCAqPSBGWFNZU19mYWJzKHBPYmotPkdldEZvbnRTaXplKCkpOw0KLSAgICAgICAgdGhyZXNob2xkID0gbWF0cml4LlRyYW5zZm9ybURpc3RhbmNlKHRocmVzaG9sZCk7DQotICAgICAgICB0aHJlc2hvbGQgPSBwcmV2X3JldmVyc2UuVHJhbnNmb3JtRGlzdGFuY2UodGhyZXNob2xkKTsNCi0gICAgfQ0KLSAgICB0aHJlc2hvbGQgLz0gMTAwMDsNCi0gICAgaWYoKHRocmVzaG9sZCA8IDEuNDg4MSAmJiB0aHJlc2hvbGQgPiAxLjQ4NzkpDQotICAgICAgICAgICAgfHwgKHRocmVzaG9sZCA8IDEuMzkwMDEgJiYgdGhyZXNob2xkID4gMS4zODk5OSkpIHsNCi0gICAgICAgIHRocmVzaG9sZCAqPSAxLjU7DQotICAgIH0NCi0gICAgaWYgKEZYU1lTX2ZhYnMobGFzdF9wb3MgKyBsYXN0X3dpZHRoIC0geCkgPiB0aHJlc2hvbGQgJiYgY3VyQ2hhciAhPSBMJyAnICYmIHByZUNoYXIgIT0gTCcgJykNCi0gICAgICAgIGlmIChjdXJDaGFyICE9IEwnICcgJiYgcHJlQ2hhciAhPSBMJyAnKSB7DQotICAgICAgICAgICAgaWYoKHggLSBsYXN0X3BvcyAtIGxhc3Rfd2lkdGgpID4gdGhyZXNob2xkIHx8IChsYXN0X3BvcyAtIHggLSBsYXN0X3dpZHRoKSA+IHRocmVzaG9sZCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYoeCA8IDAgJiYgKGxhc3RfcG9zIC0geCAtIGxhc3Rfd2lkdGgpID4gdGhyZXNob2xkKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAxOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZigoeCAtIGxhc3RfcG9zIC0gbGFzdF93aWR0aCkgPiB0aGlzX3dpZHRoIHx8ICh4IC0gbGFzdF9wb3MgLSB0aGlzX3dpZHRoKSA+IGxhc3Rfd2lkdGggKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAxOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgcmV0dXJuIDA7DQotfQ0KLUZYX0JPT0wgQ1BERl9UZXh0UGFnZTo6SXNTYW1lVGV4dE9iamVjdChDUERGX1RleHRPYmplY3QqIHBUZXh0T2JqMSwgQ1BERl9UZXh0T2JqZWN0KiBwVGV4dE9iajIpDQotew0KLSAgICBpZiAoIXBUZXh0T2JqMSB8fCAhcFRleHRPYmoyKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ0ZYX0Zsb2F0UmVjdCByY1ByZU9iaihwVGV4dE9iajItPm1fTGVmdCwgcFRleHRPYmoyLT5tX0JvdHRvbSwgcFRleHRPYmoyLT5tX1JpZ2h0LCBwVGV4dE9iajItPm1fVG9wKTsNCi0gICAgQ0ZYX0Zsb2F0UmVjdCByY0N1ck9iaihwVGV4dE9iajEtPm1fTGVmdCwgcFRleHRPYmoxLT5tX0JvdHRvbSwgcFRleHRPYmoxLT5tX1JpZ2h0LCBwVGV4dE9iajEtPm1fVG9wKTsNCi0gICAgaWYgKHJjUHJlT2JqLklzRW1wdHkoKSAmJiByY0N1ck9iai5Jc0VtcHR5KCkgJiYgIW1fUGFyc2VPcHRpb25zLm1fYkdldENoYXJDb2RlT25seSkgew0KLSAgICAgICAgRlhfRkxPQVQgZGJYZGlmID0gRlhTWVNfZmFicyhyY1ByZU9iai5sZWZ0IC0gcmNDdXJPYmoubGVmdCk7DQotICAgICAgICBpbnQgbkNvdW50ID0gbV9jaGFyTGlzdC5HZXRTaXplKCk7DQotICAgICAgICBpZiAobkNvdW50ID49IDIpIHsNCi0gICAgICAgICAgICBQQUdFQ0hBUl9JTkZPIHBlckNoYXJUZW1wID0gKFBBR0VDSEFSX0lORk8pbV9jaGFyTGlzdFtuQ291bnQgLSAyXTsNCi0gICAgICAgICAgICBGWF9GTE9BVCBkYlNwYWNlID0gcGVyQ2hhclRlbXAubV9DaGFyQm94LldpZHRoKCk7DQotICAgICAgICAgICAgaWYgKGRiWGRpZiA+IGRiU3BhY2UpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoIXJjUHJlT2JqLklzRW1wdHkoKSB8fCAhcmNDdXJPYmouSXNFbXB0eSgpKSB7DQotICAgICAgICByY1ByZU9iai5JbnRlcnNlY3QocmNDdXJPYmopOw0KLSAgICAgICAgaWYgKHJjUHJlT2JqLklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChGWFNZU19mYWJzKHJjUHJlT2JqLldpZHRoKCkgLSByY0N1ck9iai5XaWR0aCgpKSA+IHJjQ3VyT2JqLldpZHRoKCkgLyAyKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBUZXh0T2JqMi0+R2V0Rm9udFNpemUoKSAhPSBwVGV4dE9iajEtPkdldEZvbnRTaXplKCkpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaW50IG5QcmVDb3VudCA9IHBUZXh0T2JqMi0+Q291bnRJdGVtcygpOw0KLSAgICBpbnQgbkN1ckNvdW50ID0gcFRleHRPYmoxLT5Db3VudEl0ZW1zKCk7DQotICAgIGlmIChuUHJlQ291bnQgIT0gbkN1ckNvdW50KSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ1BERl9UZXh0T2JqZWN0SXRlbSBpdGVtUGVyLCBpdGVtQ3VyOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5QcmVDb3VudDsgaSsrKSB7DQotICAgICAgICBwVGV4dE9iajItPkdldEl0ZW1JbmZvKGksICZpdGVtUGVyKTsNCi0gICAgICAgIHBUZXh0T2JqMS0+R2V0SXRlbUluZm8oaSwgJml0ZW1DdXIpOw0KLSAgICAgICAgaWYgKGl0ZW1DdXIubV9DaGFyQ29kZSAhPSBpdGVtUGVyLm1fQ2hhckNvZGUpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYoRlhTWVNfZmFicyhwVGV4dE9iajEtPkdldFBvc1goKSAtIHBUZXh0T2JqMi0+R2V0UG9zWCgpKSA+IEdldENoYXJXaWR0aChpdGVtUGVyLm1fQ2hhckNvZGUsIHBUZXh0T2JqMi0+R2V0Rm9udCgpKSpwVGV4dE9iajItPkdldEZvbnRTaXplKCkgLyAxMDAwICogMC45IHx8DQotICAgICAgICAgICAgRlhTWVNfZmFicyhwVGV4dE9iajEtPkdldFBvc1koKSAtIHBUZXh0T2JqMi0+R2V0UG9zWSgpKSA+DQotICAgICAgICAgICAgRlhfTUFYKEZYX01BWChyY1ByZU9iai5IZWlnaHQoKSAsIHJjUHJlT2JqLldpZHRoKCkpLCBwVGV4dE9iajItPkdldEZvbnRTaXplKCkpIC8gOCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENQREZfVGV4dFBhZ2U6OklzU2FtZUFzUHJlVGV4dE9iamVjdChDUERGX1RleHRPYmplY3QqIHBUZXh0T2JqLCBGWF9QT1NJVElPTiBPYmpQb3MpDQotew0KLSAgICBpZiAoIXBUZXh0T2JqKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaW50IGkgPSAwOw0KLSAgICBpZiAoIU9ialBvcykgew0KLSAgICAgICAgT2JqUG9zID0gbV9wUGFnZS0+R2V0TGFzdE9iamVjdFBvc2l0aW9uKCk7DQotICAgIH0NCi0gICAgQ1BERl9QYWdlT2JqZWN0KiBwT2JqID0gbV9wUGFnZS0+R2V0UHJldk9iamVjdChPYmpQb3MpOw0KLSAgICB3aGlsZSAoaSA8IDUgJiYgT2JqUG9zKSB7DQotICAgICAgICBwT2JqID0gbV9wUGFnZS0+R2V0UHJldk9iamVjdChPYmpQb3MpOw0KLSAgICAgICAgaWYocE9iaiA9PSBwVGV4dE9iaikgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYocE9iai0+bV9UeXBlICE9IFBERlBBR0VfVEVYVCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoSXNTYW1lVGV4dE9iamVjdCgoQ1BERl9UZXh0T2JqZWN0KilwT2JqLCBwVGV4dE9iaikpIHsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGkrKzsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUZYX0JPT0wgQ1BERl9UZXh0UGFnZTo6R2VuZXJhdGVDaGFySW5mbyhGWF9XQ0hBUiB1bmljb2RlLCBQQUdFQ0hBUl9JTkZPJiBpbmZvKQ0KLXsNCi0gICAgaW50IHNpemUgPSBtX1RlbXBDaGFyTGlzdC5HZXRTaXplKCk7DQotICAgIFBBR0VDSEFSX0lORk8gcHJlQ2hhcjsNCi0gICAgaWYgKHNpemUpIHsNCi0gICAgICAgIHByZUNoYXIgPSAoUEFHRUNIQVJfSU5GTyltX1RlbXBDaGFyTGlzdFtzaXplIC0gMV07DQotICAgIH0gZWxzZSB7DQotICAgICAgICBzaXplID0gbV9jaGFyTGlzdC5HZXRTaXplKCk7DQotICAgICAgICBpZihzaXplID09IDApIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBwcmVDaGFyID0gKFBBR0VDSEFSX0lORk8pbV9jaGFyTGlzdFtzaXplIC0gMV07DQotICAgIH0NCi0gICAgaW5mby5tX0luZGV4ID0gbV9UZXh0QnVmLkdldExlbmd0aCgpOw0KLSAgICBpbmZvLm1fVW5pY29kZSA9IHVuaWNvZGU7DQotICAgIGluZm8ubV9wVGV4dE9iaiA9IE5VTEw7DQotICAgIGluZm8ubV9DaGFyQ29kZSA9IC0xOw0KLSAgICBpbmZvLm1fRmxhZyA9IEZQREZURVhUX0NIQVJfR0VORVJBVEVEOw0KLSAgICBpbnQgcHJlV2lkdGggPSAwOw0KLSAgICBpZiAocHJlQ2hhci5tX3BUZXh0T2JqICYmIHByZUNoYXIubV9DaGFyQ29kZSAhPSAoRlhfRFdPUkQpIC0gMSkgew0KLSAgICAgICAgcHJlV2lkdGggPSBHZXRDaGFyV2lkdGgocHJlQ2hhci5tX0NoYXJDb2RlLCBwcmVDaGFyLm1fcFRleHRPYmotPkdldEZvbnQoKSk7DQotICAgIH0NCi0gICAgRlhfRkxPQVQgZnMgPSAwOw0KLSAgICBpZihwcmVDaGFyLm1fcFRleHRPYmopIHsNCi0gICAgICAgIGZzID0gcHJlQ2hhci5tX3BUZXh0T2JqLT5HZXRGb250U2l6ZSgpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZnMgPSBwcmVDaGFyLm1fQ2hhckJveC5IZWlnaHQoKTsNCi0gICAgfQ0KLSAgICBpZighZnMpIHsNCi0gICAgICAgIGZzID0gMTsNCi0gICAgfQ0KLSAgICBpbmZvLm1fT3JpZ2luWCA9IHByZUNoYXIubV9PcmlnaW5YICsgcHJlV2lkdGggKiAoZnMpIC8gMTAwMDsNCi0gICAgaW5mby5tX09yaWdpblkgPSBwcmVDaGFyLm1fT3JpZ2luWTsNCi0gICAgaW5mby5tX0NoYXJCb3ggPSBDRlhfRmxvYXRSZWN0KGluZm8ubV9PcmlnaW5YLCBpbmZvLm1fT3JpZ2luWSwgaW5mby5tX09yaWdpblgsIGluZm8ubV9PcmlnaW5ZKTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ1BERl9UZXh0UGFnZTo6SXNSZWN0SW50ZXJzZWN0KENGWF9GbG9hdFJlY3QgcmVjdDEsIENGWF9GbG9hdFJlY3QgcmVjdDIpDQotew0KLSAgICByZWN0MS5JbnRlcnNlY3QocmVjdDIpOw0KLSAgICBpZihyZWN0MS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTAlDUERGX1RleHRQYWdlOjpJc0xldHRlcihGWF9XQ0hBUiB1bmljb2RlKQ0KLXsNCi0gICAgaWYgKHVuaWNvZGUgPCBMJ0EnKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKHVuaWNvZGUgPiBMJ1onICYmIHVuaWNvZGUgPCBMJ2EnKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKHVuaWNvZGUgPiBMJ3onKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUNQREZfVGV4dFBhZ2VGaW5kOjpDUERGX1RleHRQYWdlRmluZChjb25zdCBJUERGX1RleHRQYWdlKiBwVGV4dFBhZ2UpDQotICAgIDogbV9Jc0ZpbmQoRkFMU0UpLA0KLSAgICAgIG1fcFRleHRQYWdlKE5VTEwpDQotew0KLSAgICBpZiAoIXBUZXh0UGFnZSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENQREZfTW9kdWxlTWdyKiBwUERGTW9kdWxlID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpOw0KLSAgICBtX3BUZXh0UGFnZSA9IHBUZXh0UGFnZTsNCi0gICAgbV9zdHJUZXh0ID0gbV9wVGV4dFBhZ2UtPkdldFBhZ2VUZXh0KCk7DQotICAgIGludCBuQ291bnQgPSBwVGV4dFBhZ2UtPkNvdW50Q2hhcnMoKTsNCi0gICAgaWYobkNvdW50KSB7DQotICAgICAgICBtX0NoYXJJbmRleC5BZGQoMCk7DQotICAgIH0NCi0gICAgZm9yKGludCBpID0gMDsgaSA8IG5Db3VudDsgaSsrKSB7DQotICAgICAgICBGUERGX0NIQVJfSU5GTyBpbmZvOw0KLSAgICAgICAgcFRleHRQYWdlLT5HZXRDaGFySW5mbyhpLCBpbmZvKTsNCi0gICAgICAgIGludCBpbmRleFNpemUgPSBtX0NoYXJJbmRleC5HZXRTaXplKCk7DQotICAgICAgICBpZihpbmZvLm1fRmxhZyA9PSBDSEFSX05PUk1BTCB8fCBpbmZvLm1fRmxhZyA9PSBDSEFSX0dFTkVSQVRFRCkgew0KLSAgICAgICAgICAgIGlmKGluZGV4U2l6ZSAlIDIpIHsNCi0gICAgICAgICAgICAgICAgbV9DaGFySW5kZXguQWRkKDEpOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGlmKGluZGV4U2l6ZSA8PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBtX0NoYXJJbmRleC5TZXRBdChpbmRleFNpemUgLSAxLCBtX0NoYXJJbmRleC5HZXRBdChpbmRleFNpemUgLSAxKSArIDEpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYoaW5kZXhTaXplICUgMikgew0KLSAgICAgICAgICAgICAgICBpZihpbmRleFNpemUgPD0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbV9DaGFySW5kZXguU2V0QXQoaW5kZXhTaXplIC0gMSwgaSArIDEpOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIG1fQ2hhckluZGV4LkFkZChpICsgMSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGludCBpbmRleFNpemUgPSBtX0NoYXJJbmRleC5HZXRTaXplKCk7DQotICAgIGlmKGluZGV4U2l6ZSAlIDIpIHsNCi0gICAgICAgIG1fQ2hhckluZGV4LlJlbW92ZUF0KGluZGV4U2l6ZSAtIDEpOw0KLSAgICB9DQotICAgIG1fcmVzU3RhcnQgPSAwOw0KLSAgICBtX3Jlc0VuZCA9IC0xOw0KLX0NCi1pbnQgQ1BERl9UZXh0UGFnZUZpbmQ6OkdldENoYXJJbmRleChpbnQgaW5kZXgpIGNvbnN0DQotew0KLSAgICByZXR1cm4gbV9wVGV4dFBhZ2UtPkNoYXJJbmRleEZyb21UZXh0SW5kZXgoaW5kZXgpOw0KLSAgICBpbnQgaW5kZXhTaXplID0gbV9DaGFySW5kZXguR2V0U2l6ZSgpOw0KLSAgICBpbnQgY291bnQgPSAwOw0KLSAgICBmb3IoaW50IGkgPSAwOyBpIDwgaW5kZXhTaXplOyBpICs9IDIpIHsNCi0gICAgICAgIGNvdW50ICs9IG1fQ2hhckluZGV4LkdldEF0KGkgKyAxKTsNCi0gICAgICAgIGlmKGNvdW50ID4gaW5kZXgpIHsNCi0gICAgICAgICAgICByZXR1cm4gCWluZGV4IC0gY291bnQgKyBtX0NoYXJJbmRleC5HZXRBdChpICsgMSkgKyBtX0NoYXJJbmRleC5HZXRBdChpKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gLTE7DQotfQ0KLUZYX0JPT0wJQ1BERl9UZXh0UGFnZUZpbmQ6OkZpbmRGaXJzdChDRlhfV2lkZVN0cmluZyBmaW5kd2hhdCwgaW50IGZsYWdzLCBpbnQgc3RhcnRQb3MpDQotew0KLSAgICBpZiAoIW1fcFRleHRQYWdlKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKG1fc3RyVGV4dC5Jc0VtcHR5KCkgfHwgbV9iTWF0Y2hDYXNlICE9IChmbGFncyAmIEZQREZURVhUX01BVENIQ0FTRSkpIHsNCi0gICAgICAgIG1fc3RyVGV4dCA9IG1fcFRleHRQYWdlLT5HZXRQYWdlVGV4dCgpOw0KLSAgICB9DQotICAgIG1fZmluZFdoYXQgPSBmaW5kd2hhdDsNCi0gICAgbV9mbGFncyA9IGZsYWdzOw0KLSAgICBtX2JNYXRjaENhc2UgPSBmbGFncyAmIEZQREZURVhUX01BVENIQ0FTRTsNCi0gICAgaWYgKG1fc3RyVGV4dC5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIG1fSXNGaW5kID0gRkFMU0U7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBGWF9TVFJTSVpFIGxlbiA9IGZpbmR3aGF0LkdldExlbmd0aCgpOw0KLSAgICBpZiAoIW1fYk1hdGNoQ2FzZSkgew0KLSAgICAgICAgZmluZHdoYXQuTWFrZUxvd2VyKCk7DQotICAgICAgICBtX3N0clRleHQuTWFrZUxvd2VyKCk7DQotICAgIH0NCi0gICAgbV9iTWF0Y2hXaG9sZVdvcmQgPSBmbGFncyAmIEZQREZURVhUX01BVENIV0hPTEVXT1JEOw0KLSAgICBtX2ZpbmROZXh0U3RhcnQgPSBzdGFydFBvczsNCi0gICAgaWYgKHN0YXJ0UG9zID09IC0xKSB7DQotICAgICAgICBtX2ZpbmRQcmVTdGFydCA9IG1fc3RyVGV4dC5HZXRMZW5ndGgoKSAtIDE7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX2ZpbmRQcmVTdGFydCA9IHN0YXJ0UG9zOw0KLSAgICB9DQotICAgIG1fY3NGaW5kV2hhdEFycmF5LlJlbW92ZUFsbCgpOw0KLSAgICBpbnQgaSA9IDA7DQotICAgIHdoaWxlKGkgPCBsZW4pIHsNCi0gICAgICAgIGlmKGZpbmR3aGF0LkdldEF0KGkpICE9ICcgJykgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaSsrOw0KLSAgICB9DQotICAgIGlmKGkgPCBsZW4pIHsNCi0gICAgICAgIEV4dHJhY3RGaW5kV2hhdChmaW5kd2hhdCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX2NzRmluZFdoYXRBcnJheS5BZGQoZmluZHdoYXQpOw0KLSAgICB9DQotICAgIGlmKG1fY3NGaW5kV2hhdEFycmF5LkdldFNpemUoKSA8PSAwKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbV9Jc0ZpbmQgPSBUUlVFOw0KLSAgICBtX3Jlc1N0YXJ0ID0gMDsNCi0gICAgbV9yZXNFbmQgPSAtMTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ1BERl9UZXh0UGFnZUZpbmQ6OkZpbmROZXh0KCkNCi17DQotICAgIGlmICghbV9wVGV4dFBhZ2UpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBtX3Jlc0FycmF5LlJlbW92ZUFsbCgpOw0KLSAgICBpZihtX2ZpbmROZXh0U3RhcnQgPT0gLTEpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZihtX3N0clRleHQuSXNFbXB0eSgpKSB7DQotICAgICAgICBtX0lzRmluZCA9IEZBTFNFOw0KLSAgICAgICAgcmV0dXJuIG1fSXNGaW5kOw0KLSAgICB9DQotICAgIGludCBzdHJMZW4gPSBtX3N0clRleHQuR2V0TGVuZ3RoKCk7DQotICAgIGlmIChtX2ZpbmROZXh0U3RhcnQgPiBzdHJMZW4gLSAxKSB7DQotICAgICAgICBtX0lzRmluZCA9IEZBTFNFOw0KLSAgICAgICAgcmV0dXJuIG1fSXNGaW5kOw0KLSAgICB9DQotICAgIGludCBuQ291bnQgPSBtX2NzRmluZFdoYXRBcnJheS5HZXRTaXplKCk7DQotICAgIGludCBuUmVzdWx0UG9zID0gMDsNCi0gICAgaW50CW5TdGFydFBvcyA9IDA7DQotICAgIG5TdGFydFBvcyA9IG1fZmluZE5leHRTdGFydDsNCi0gICAgRlhfQk9PTCBiU3BhY2VTdGFydCA9IEZBTFNFOw0KLSAgICBmb3IoaW50IGlXb3JkID0gMDsgaVdvcmQgPCBuQ291bnQ7IGlXb3JkKyspIHsNCi0gICAgICAgIENGWF9XaWRlU3RyaW5nIGNzV29yZCA9IG1fY3NGaW5kV2hhdEFycmF5W2lXb3JkXTsNCi0gICAgICAgIGlmKGNzV29yZC5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICBpZihpV29yZCA9PSBuQ291bnQgLSAxKSB7DQotICAgICAgICAgICAgICAgIEZYX1dDSEFSIHN0ckluc2VydCA9IG1fc3RyVGV4dC5HZXRBdChuU3RhcnRQb3MpOw0KLSAgICAgICAgICAgICAgICBpZihzdHJJbnNlcnQgPT0gVEVYVF9MSU5FRkVFRF9DSEFSIHx8IHN0ckluc2VydCA9PSBURVhUX0JMQU5LX0NIQVIgfHwgc3RySW5zZXJ0ID09IFRFWFRfUkVUVVJOX0NIQVIgfHwgc3RySW5zZXJ0ID09IDE2MCkgew0KLSAgICAgICAgICAgICAgICAgICAgblJlc3VsdFBvcyA9IG5TdGFydFBvcyArIDE7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpV29yZCA9IC0xOw0KLSAgICAgICAgICAgIH0gZWxzZSBpZihpV29yZCA9PSAwKSB7DQotICAgICAgICAgICAgICAgIGJTcGFjZVN0YXJ0ID0gVFJVRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpbnQgZW5kSW5kZXg7DQotICAgICAgICBuUmVzdWx0UG9zID0gbV9zdHJUZXh0LkZpbmQoY3NXb3JkLCBuU3RhcnRQb3MpOw0KLSAgICAgICAgaWYgKG5SZXN1bHRQb3MgPT0gLTEpIHsNCi0gICAgICAgICAgICBtX0lzRmluZCA9IEZBTFNFOw0KLSAgICAgICAgICAgIHJldHVybiBtX0lzRmluZDsNCi0gICAgICAgIH0NCi0gICAgICAgIGVuZEluZGV4ID0gblJlc3VsdFBvcyArIGNzV29yZC5HZXRMZW5ndGgoKSAtIDE7DQotICAgICAgICBpZihpV29yZCA9PSAwKSB7DQotICAgICAgICAgICAgbV9yZXNTdGFydCA9IG5SZXN1bHRQb3M7DQotICAgICAgICB9DQotICAgICAgICBGWF9CT09MIGJNYXRjaCA9IFRSVUU7DQotICAgICAgICBpZihpV29yZCAhPSAwICYmICFiU3BhY2VTdGFydCkgew0KLSAgICAgICAgICAgIGludCBQcmVSZXNFbmRQb3MgPSBuU3RhcnRQb3M7DQotICAgICAgICAgICAgaW50IGN1ckNoYXIgPSBjc1dvcmQuR2V0QXQoMCk7DQotICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgbGFzdFdvcmQgPSBtX2NzRmluZFdoYXRBcnJheVtpV29yZCAtIDFdOw0KLSAgICAgICAgICAgIGludCBsYXN0Q2hhciA9IGxhc3RXb3JkLkdldEF0KGxhc3RXb3JkLkdldExlbmd0aCgpIC0gMSk7DQotICAgICAgICAgICAgaWYoblN0YXJ0UG9zID09IG5SZXN1bHRQb3MgJiYgIShfSXNJZ25vcmVTcGFjZUNoYXJhY3RlcihsYXN0Q2hhcikgfHwgX0lzSWdub3JlU3BhY2VDaGFyYWN0ZXIoY3VyQ2hhcikpKSB7DQotICAgICAgICAgICAgICAgIGJNYXRjaCA9IEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBmb3IoaW50IGQgPSBQcmVSZXNFbmRQb3M7IGQgPCBuUmVzdWx0UG9zOyBkKyspIHsNCi0gICAgICAgICAgICAgICAgRlhfV0NIQVIgc3RySW5zZXJ0ID0gbV9zdHJUZXh0LkdldEF0KGQpOw0KLSAgICAgICAgICAgICAgICBpZihzdHJJbnNlcnQgIT0gVEVYVF9MSU5FRkVFRF9DSEFSICYmIHN0ckluc2VydCAhPSBURVhUX0JMQU5LX0NIQVIgJiYgc3RySW5zZXJ0ICE9IFRFWFRfUkVUVVJOX0NIQVIgJiYgc3RySW5zZXJ0ICE9IDE2MCkgew0KLSAgICAgICAgICAgICAgICAgICAgYk1hdGNoID0gRkFMU0U7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSBpZihiU3BhY2VTdGFydCkgew0KLSAgICAgICAgICAgIGlmKG5SZXN1bHRQb3MgPiAwKSB7DQotICAgICAgICAgICAgICAgIEZYX1dDSEFSIHN0ckluc2VydCA9IG1fc3RyVGV4dC5HZXRBdChuUmVzdWx0UG9zIC0gMSk7DQotICAgICAgICAgICAgICAgIGlmKHN0ckluc2VydCAhPSBURVhUX0xJTkVGRUVEX0NIQVIgJiYgc3RySW5zZXJ0ICE9IFRFWFRfQkxBTktfQ0hBUiAmJiBzdHJJbnNlcnQgIT0gVEVYVF9SRVRVUk5fQ0hBUiAmJiBzdHJJbnNlcnQgIT0gMTYwKSB7DQotICAgICAgICAgICAgICAgICAgICBiTWF0Y2ggPSBGQUxTRTsNCi0gICAgICAgICAgICAgICAgICAgIG1fcmVzU3RhcnQgPSBuUmVzdWx0UG9zOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgbV9yZXNTdGFydCA9IG5SZXN1bHRQb3MgLSAxOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYobV9iTWF0Y2hXaG9sZVdvcmQgJiYgYk1hdGNoKSB7DQotICAgICAgICAgICAgYk1hdGNoID0gSXNNYXRjaFdob2xlV29yZChtX3N0clRleHQsIG5SZXN1bHRQb3MsIGVuZEluZGV4KTsNCi0gICAgICAgIH0NCi0gICAgICAgIG5TdGFydFBvcyA9IGVuZEluZGV4ICsgMTsNCi0gICAgICAgIGlmKCFiTWF0Y2gpIHsNCi0gICAgICAgICAgICBpV29yZCA9IC0xOw0KLSAgICAgICAgICAgIGlmKGJTcGFjZVN0YXJ0KSB7DQotICAgICAgICAgICAgICAgIG5TdGFydFBvcyA9IG1fcmVzU3RhcnQgKyBtX2NzRmluZFdoYXRBcnJheVsxXS5HZXRMZW5ndGgoKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBuU3RhcnRQb3MgPSBtX3Jlc1N0YXJ0ICsgbV9jc0ZpbmRXaGF0QXJyYXlbMF0uR2V0TGVuZ3RoKCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fcmVzRW5kID0gblJlc3VsdFBvcyArIG1fY3NGaW5kV2hhdEFycmF5W21fY3NGaW5kV2hhdEFycmF5LkdldFNpemUoKSAtIDFdLkdldExlbmd0aCgpIC0gMTsNCi0gICAgbV9Jc0ZpbmQgPSBUUlVFOw0KLSAgICBpbnQgcmVzU3RhcnQgPSBHZXRDaGFySW5kZXgobV9yZXNTdGFydCk7DQotICAgIGludCByZXNFbmQgPSBHZXRDaGFySW5kZXgobV9yZXNFbmQpOw0KLSAgICBtX3BUZXh0UGFnZS0+R2V0UmVjdEFycmF5KHJlc1N0YXJ0LCByZXNFbmQgLSByZXNTdGFydCArIDEsIG1fcmVzQXJyYXkpOw0KLSAgICBpZihtX2ZsYWdzICYgRlBERlRFWFRfQ09OU0VDVVRJVkUpIHsNCi0gICAgICAgIG1fZmluZE5leHRTdGFydCA9IG1fcmVzU3RhcnQgKyAxOw0KLSAgICAgICAgbV9maW5kUHJlU3RhcnQgPSBtX3Jlc0VuZCAtIDE7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX2ZpbmROZXh0U3RhcnQgPSBtX3Jlc0VuZCArIDE7DQotICAgICAgICBtX2ZpbmRQcmVTdGFydCA9IG1fcmVzU3RhcnQgLSAxOw0KLSAgICB9DQotICAgIHJldHVybiBtX0lzRmluZDsNCi19DQotRlhfQk9PTCBDUERGX1RleHRQYWdlRmluZDo6RmluZFByZXYoKQ0KLXsNCi0gICAgaWYgKCFtX3BUZXh0UGFnZSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fcmVzQXJyYXkuUmVtb3ZlQWxsKCk7DQotICAgIGlmKG1fc3RyVGV4dC5Jc0VtcHR5KCkgfHwgbV9maW5kUHJlU3RhcnQgPCAwKSB7DQotICAgICAgICBtX0lzRmluZCA9IEZBTFNFOw0KLSAgICAgICAgcmV0dXJuIG1fSXNGaW5kOw0KLSAgICB9DQotICAgIENQREZfVGV4dFBhZ2VGaW5kIGZpbmRFbmdpbmUobV9wVGV4dFBhZ2UpOw0KLSAgICBGWF9CT09MIHJldCA9IGZpbmRFbmdpbmUuRmluZEZpcnN0KG1fZmluZFdoYXQsIG1fZmxhZ3MpOw0KLSAgICBpZighcmV0KSB7DQotICAgICAgICBtX0lzRmluZCA9IEZBTFNFOw0KLSAgICAgICAgcmV0dXJuIG1fSXNGaW5kOw0KLSAgICB9DQotICAgIGludAlvcmRlciA9IC0xLCBNYXRjaGVkQ291bnQgPSAwOw0KLSAgICB3aGlsZShyZXQpIHsNCi0gICAgICAgIHJldCA9IGZpbmRFbmdpbmUuRmluZE5leHQoKTsNCi0gICAgICAgIGlmKHJldCkgew0KLSAgICAgICAgICAgIGludCBvcmRlcjEgPSBmaW5kRW5naW5lLkdldEN1ck9yZGVyKCkgOw0KLSAgICAgICAgICAgIGludAlNYXRjaGVkQ291bnQxID0gZmluZEVuZ2luZS5HZXRNYXRjaGVkQ291bnQoKTsNCi0gICAgICAgICAgICBpZigoKG9yZGVyMSArIE1hdGNoZWRDb3VudDEpIC0gMSkgPiBtX2ZpbmRQcmVTdGFydCkgew0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgb3JkZXIgPSBvcmRlcjE7DQotICAgICAgICAgICAgTWF0Y2hlZENvdW50ID0gTWF0Y2hlZENvdW50MTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZihvcmRlciA9PSAtMSkgew0KLSAgICAgICAgbV9Jc0ZpbmQgPSBGQUxTRTsNCi0gICAgICAgIHJldHVybiBtX0lzRmluZDsNCi0gICAgfQ0KLSAgICBtX3Jlc1N0YXJ0ID0gbV9wVGV4dFBhZ2UtPlRleHRJbmRleEZyb21DaGFySW5kZXgob3JkZXIpOw0KLSAgICBtX3Jlc0VuZCA9IG1fcFRleHRQYWdlLT5UZXh0SW5kZXhGcm9tQ2hhckluZGV4KG9yZGVyICsgTWF0Y2hlZENvdW50IC0gMSk7DQotICAgIG1fSXNGaW5kID0gVFJVRTsNCi0gICAgbV9wVGV4dFBhZ2UtPkdldFJlY3RBcnJheShvcmRlciwgTWF0Y2hlZENvdW50LCBtX3Jlc0FycmF5KTsNCi0gICAgaWYobV9mbGFncyAmIEZQREZURVhUX0NPTlNFQ1VUSVZFKSB7DQotICAgICAgICBtX2ZpbmROZXh0U3RhcnQgPSBtX3Jlc1N0YXJ0ICsgMTsNCi0gICAgICAgIG1fZmluZFByZVN0YXJ0ID0gbV9yZXNFbmQgLSAxOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9maW5kTmV4dFN0YXJ0ID0gbV9yZXNFbmQgKyAxOw0KLSAgICAgICAgbV9maW5kUHJlU3RhcnQgPSBtX3Jlc1N0YXJ0IC0gMTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9Jc0ZpbmQ7DQotfQ0KLXZvaWQgQ1BERl9UZXh0UGFnZUZpbmQ6OkV4dHJhY3RGaW5kV2hhdChDRlhfV2lkZVN0cmluZyBmaW5kd2hhdCkNCi17DQotICAgIGlmKGZpbmR3aGF0LklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuIDsNCi0gICAgfQ0KLSAgICBpbnQgaW5kZXggPSAwOw0KLSAgICB3aGlsZSgxKSB7DQotICAgICAgICBDRlhfV2lkZVN0cmluZyBjc1dvcmQgPSBURVhUX0VNUFRZOw0KLSAgICAgICAgaW50IHJldCA9IEV4dHJhY3RTdWJTdHJpbmcoY3NXb3JkLCBmaW5kd2hhdCwgaW5kZXgsIFRFWFRfQkxBTktfQ0hBUik7DQotICAgICAgICBpZihjc1dvcmQuSXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgaWYocmV0KSB7DQotICAgICAgICAgICAgICAgIG1fY3NGaW5kV2hhdEFycmF5LkFkZChDRlhfV2lkZVN0cmluZyhMIiIpKTsNCi0gICAgICAgICAgICAgICAgaW5kZXgrKzsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaW50IHBvcyA9IDA7DQotICAgICAgICBGWF9CT09MIGJMYXN0SWdub3JlID0gRkFMU0U7DQotICAgICAgICB3aGlsZShwb3MgPCBjc1dvcmQuR2V0TGVuZ3RoKCkpIHsNCi0gICAgICAgICAgICBDRlhfV2lkZVN0cmluZyBjdXJTdHIgPSBjc1dvcmQuTWlkKHBvcywgMSk7DQotICAgICAgICAgICAgRlhfV0NIQVIgY3VyQ2hhciA9IGNzV29yZC5HZXRBdChwb3MpOw0KLSAgICAgICAgICAgIGlmIChfSXNJZ25vcmVTcGFjZUNoYXJhY3RlcihjdXJDaGFyKSkgew0KLSAgICAgICAgICAgICAgICBpZiAocG9zID4gMCAmJiBjdXJDaGFyID09IDB4MjAxOSkgew0KLSAgICAgICAgICAgICAgICAgICAgcG9zKys7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAocG9zID4gMCApIHsNCi0gICAgICAgICAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIHByZVN0ciA9IGNzV29yZC5NaWQoMCwgcG9zKTsNCi0gICAgICAgICAgICAgICAgICAgIG1fY3NGaW5kV2hhdEFycmF5LkFkZChwcmVTdHIpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG1fY3NGaW5kV2hhdEFycmF5LkFkZChjdXJTdHIpOw0KLSAgICAgICAgICAgICAgICBpZiAocG9zID09IGNzV29yZC5HZXRMZW5ndGgoKSAtIDEpIHsNCi0gICAgICAgICAgICAgICAgICAgIGNzV29yZC5FbXB0eSgpOw0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgY3NXb3JkID0gY3NXb3JkLlJpZ2h0KGNzV29yZC5HZXRMZW5ndGgoKSAtIHBvcyAtIDEpOw0KLSAgICAgICAgICAgICAgICBwb3MgPSAwOw0KLSAgICAgICAgICAgICAgICBiTGFzdElnbm9yZSA9IFRSVUU7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGJMYXN0SWdub3JlID0gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHBvcysrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCFjc1dvcmQuSXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgbV9jc0ZpbmRXaGF0QXJyYXkuQWRkKGNzV29yZCk7DQotICAgICAgICB9DQotICAgICAgICBpbmRleCsrOw0KLSAgICB9DQotICAgIHJldHVybjsNCi19DQotRlhfQk9PTCBDUERGX1RleHRQYWdlRmluZDo6SXNNYXRjaFdob2xlV29yZChDRlhfV2lkZVN0cmluZyBjc1BhZ2VUZXh0LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpDQotew0KLSAgICBpbnQgY2hhcl9sZWZ0ID0gMDsNCi0gICAgaW50IGNoYXJfcmlnaHQgPSAwOw0KLSAgICBpbnQgY2hhcl9jb3VudCA9IGVuZFBvcyAtIHN0YXJ0UG9zICsgMTsNCi0gICAgaWYoY2hhcl9jb3VudCA8IDEpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoY2hhcl9jb3VudCA9PSAxICYmIGNzUGFnZVRleHQuR2V0QXQoc3RhcnRQb3MpID4gMjU1KSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBpZihzdGFydFBvcyAtIDEgPj0gMCApIHsNCi0gICAgICAgIGNoYXJfbGVmdCA9IGNzUGFnZVRleHQuR2V0QXQoc3RhcnRQb3MgLSAxKTsNCi0gICAgfQ0KLSAgICBpZihzdGFydFBvcyArIGNoYXJfY291bnQgPCBjc1BhZ2VUZXh0LkdldExlbmd0aCgpKSB7DQotICAgICAgICBjaGFyX3JpZ2h0ID0gY3NQYWdlVGV4dC5HZXRBdChzdGFydFBvcyArIGNoYXJfY291bnQpOw0KLSAgICB9DQotICAgIGlmKGNoYXJfbGVmdCA9PSAweDYxKSB7DQotICAgICAgICBpbnQgYSA9IDA7DQotICAgIH0NCi0gICAgaWYgKChjaGFyX2xlZnQgPiAnQScgJiYgY2hhcl9sZWZ0IDwgJ2EnKSB8fCAoY2hhcl9sZWZ0ID4gJ2EnICYmIGNoYXJfbGVmdCA8ICd6JykgfHwgKGNoYXJfbGVmdCA+IDB4ZmIwMCAmJiBjaGFyX2xlZnQgPCAweGZiMDYpIHx8IChjaGFyX2xlZnQgPj0gJzAnICYmIGNoYXJfbGVmdCA8PSAnOScpIHx8DQotICAgICAgICAgICAgKGNoYXJfcmlnaHQgPiAnQScgJiYgY2hhcl9yaWdodCA8ICdhJykgfHwgKGNoYXJfcmlnaHQgPiAnYScgJiYgY2hhcl9yaWdodCA8ICd6JykgfHwgKGNoYXJfcmlnaHQgPiAweGZiMDAgJiYgY2hhcl9yaWdodCA8IDB4ZmIwNikgfHwgKGNoYXJfcmlnaHQgPj0gJzAnICYmIGNoYXJfcmlnaHQgPD0gJzknKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmKCEoKCdBJyA+IGNoYXJfbGVmdCB8fCBjaGFyX2xlZnQgPiAnWicpICAmJiAoJ2EnID4gY2hhcl9sZWZ0IHx8IGNoYXJfbGVmdCA+ICd6JykNCi0gICAgICAgICAgICAmJiAoJ0EnID4gY2hhcl9yaWdodCB8fCBjaGFyX3JpZ2h0ID4gJ1onKSAgJiYgKCdhJyA+IGNoYXJfcmlnaHQgfHwgY2hhcl9yaWdodCA+ICd6JykpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKGNoYXJfY291bnQgPiAwKSB7DQotICAgICAgICBpZiAoY3NQYWdlVGV4dC5HZXRBdChzdGFydFBvcykgPj0gTCcwJyAmJiBjc1BhZ2VUZXh0LkdldEF0KHN0YXJ0UG9zKSA8PSBMJzknICYmIGNoYXJfbGVmdCA+PSBMJzAnICYmIGNoYXJfbGVmdCA8PSBMJzknKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGNzUGFnZVRleHQuR2V0QXQoZW5kUG9zKSA+PSBMJzAnICYmIGNzUGFnZVRleHQuR2V0QXQoZW5kUG9zKSA8PSBMJzknICYmIGNoYXJfcmlnaHQgPj0gTCcwJyAmJiBjaGFyX3JpZ2h0IDw9IEwnOScpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ1BERl9UZXh0UGFnZUZpbmQ6OkV4dHJhY3RTdWJTdHJpbmcoQ0ZYX1dpZGVTdHJpbmcmIHJTdHJpbmcsIEZYX0xQQ1dTVFIgbHBzekZ1bGxTdHJpbmcsDQotICAgICAgICBpbnQgaVN1YlN0cmluZywgRlhfV0NIQVIgY2hTZXApDQotew0KLSAgICBpZiAobHBzekZ1bGxTdHJpbmcgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHdoaWxlIChpU3ViU3RyaW5nLS0pIHsNCi0gICAgICAgIGxwc3pGdWxsU3RyaW5nID0gRlhTWVNfd2NzY2hyKGxwc3pGdWxsU3RyaW5nLCBjaFNlcCk7DQotICAgICAgICBpZiAobHBzekZ1bGxTdHJpbmcgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJTdHJpbmcuRW1wdHkoKTsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBscHN6RnVsbFN0cmluZysrOw0KLSAgICAgICAgd2hpbGUoKmxwc3pGdWxsU3RyaW5nID09IGNoU2VwKSB7DQotICAgICAgICAgICAgbHBzekZ1bGxTdHJpbmcrKzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBGWF9MUENXU1RSIGxwY2hFbmQgPSBGWFNZU193Y3NjaHIobHBzekZ1bGxTdHJpbmcsIGNoU2VwKTsNCi0gICAgaW50IG5MZW4gPSAobHBjaEVuZCA9PSBOVUxMKSA/DQotICAgICAgICAgICAgICAgKGludClGWFNZU193Y3NsZW4obHBzekZ1bGxTdHJpbmcpIDogKGludCkobHBjaEVuZCAtIGxwc3pGdWxsU3RyaW5nKTsNCi0gICAgQVNTRVJUKG5MZW4gPj0gMCk7DQotICAgIEZYU1lTX21lbWNweTMyKHJTdHJpbmcuR2V0QnVmZmVyKG5MZW4pLCBscHN6RnVsbFN0cmluZywgbkxlbiAqIHNpemVvZihGWF9XQ0hBUikpOw0KLSAgICByU3RyaW5nLlJlbGVhc2VCdWZmZXIoKTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUNGWF9XaWRlU3RyaW5nIENQREZfVGV4dFBhZ2VGaW5kOjpNYWtlUmV2ZXJzZShjb25zdCBDRlhfV2lkZVN0cmluZyBzdHIpDQotew0KLSAgICBDRlhfV2lkZVN0cmluZyBzdHIyOw0KLSAgICBzdHIyLkVtcHR5KCk7DQotICAgIGludCBubGVuID0gc3RyLkdldExlbmd0aCgpOw0KLSAgICBmb3IoaW50IGkgPSBubGVuIC0gMTsgaSA+PSAwOyBpLS0pIHsNCi0gICAgICAgIHN0cjIgKz0gc3RyLkdldEF0KGkpOw0KLSAgICB9DQotICAgIHJldHVybiBzdHIyOw0KLX0NCi12b2lkIENQREZfVGV4dFBhZ2VGaW5kOjpHZXRSZWN0QXJyYXkoQ0ZYX1JlY3RBcnJheSYgcmVjdHMpIGNvbnN0DQotew0KLSAgICByZWN0cy5Db3B5KG1fcmVzQXJyYXkpOw0KLX0NCi1pbnQJQ1BERl9UZXh0UGFnZUZpbmQ6OkdldEN1ck9yZGVyKCkgY29uc3QNCi17DQotICAgIHJldHVybiBHZXRDaGFySW5kZXgobV9yZXNTdGFydCk7DQotfQ0KLWludAlDUERGX1RleHRQYWdlRmluZDo6R2V0TWF0Y2hlZENvdW50KCljb25zdA0KLXsNCi0gICAgaW50IHJlc1N0YXJ0ID0gR2V0Q2hhckluZGV4KG1fcmVzU3RhcnQpOw0KLSAgICBpbnQgcmVzRW5kID0gR2V0Q2hhckluZGV4KG1fcmVzRW5kKTsNCi0gICAgcmV0dXJuIHJlc0VuZCAtIHJlc1N0YXJ0ICsgMTsNCi19DQotQ1BERl9MaW5rRXh0cmFjdDo6Q1BERl9MaW5rRXh0cmFjdCgpDQotICAgIDogbV9wVGV4dFBhZ2UoTlVMTCksDQotICAgICAgbV9Jc1BhcnNlcmQoRkFMU0UpDQotew0KLX0NCi1DUERGX0xpbmtFeHRyYWN0Ojp+Q1BERl9MaW5rRXh0cmFjdCgpDQotew0KLSAgICBEZWxldGVMaW5rTGlzdCgpOw0KLX0NCi1GWF9CT09MIENQREZfTGlua0V4dHJhY3Q6OkV4dHJhY3RMaW5rcyhjb25zdCBJUERGX1RleHRQYWdlKiBwVGV4dFBhZ2UpDQotew0KLSAgICBpZiAoIXBUZXh0UGFnZSB8fCAhcFRleHRQYWdlLT5Jc1BhcnNlcmVkKCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBtX3BUZXh0UGFnZSA9IChjb25zdCBDUERGX1RleHRQYWdlKilwVGV4dFBhZ2U7DQotICAgIG1fc3RyUGFnZVRleHQgPSBtX3BUZXh0UGFnZS0+R2V0UGFnZVRleHQoMCwgLTEpOw0KLSAgICBEZWxldGVMaW5rTGlzdCgpOw0KLSAgICBpZiAobV9zdHJQYWdlVGV4dC5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBwYXJzZXJMaW5rKCk7DQotICAgIG1fSXNQYXJzZXJkID0gVFJVRTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ1BERl9MaW5rRXh0cmFjdDo6RGVsZXRlTGlua0xpc3QoKQ0KLXsNCi0gICAgd2hpbGUgKG1fTGlua0xpc3QuR2V0U2l6ZSgpKSB7DQotICAgICAgICBDUERGX0xpbmtFeHQqIGxpbmtpbmZvID0gTlVMTDsNCi0gICAgICAgIGxpbmtpbmZvID0gbV9MaW5rTGlzdC5HZXRBdCgwKTsNCi0gICAgICAgIG1fTGlua0xpc3QuUmVtb3ZlQXQoMCk7DQotICAgICAgICBkZWxldGUgbGlua2luZm87DQotICAgIH0NCi0gICAgbV9MaW5rTGlzdC5SZW1vdmVBbGwoKTsNCi19DQotaW50IENQREZfTGlua0V4dHJhY3Q6OkNvdW50TGlua3MoKSBjb25zdA0KLXsNCi0gICAgaWYgKCFtX0lzUGFyc2VyZCkJew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIHJldHVybiBtX0xpbmtMaXN0LkdldFNpemUoKTsNCi19DQotdm9pZCBDUERGX0xpbmtFeHRyYWN0OjpwYXJzZXJMaW5rKCkNCi17DQotICAgIGludCBzdGFydCA9IDAsIHBvcyA9IDA7DQotICAgIGludCBUb3RhbENoYXIgPSBtX3BUZXh0UGFnZS0+Q291bnRDaGFycygpOw0KLSAgICB3aGlsZSAocG9zIDwgVG90YWxDaGFyKSB7DQotICAgICAgICBGUERGX0NIQVJfSU5GTyBwYWdlQ2hhcjsNCi0gICAgICAgIG1fcFRleHRQYWdlLT5HZXRDaGFySW5mbyhwb3MsIHBhZ2VDaGFyKTsNCi0gICAgICAgIGlmIChwYWdlQ2hhci5tX0ZsYWcgPT0gQ0hBUl9HRU5FUkFURUQgfHwgcGFnZUNoYXIubV9Vbmljb2RlID09IDB4MjAgfHwgcG9zID09IFRvdGFsQ2hhciAtIDEpIHsNCi0gICAgICAgICAgICBpbnQgbkNvdW50ID0gcG9zIC0gc3RhcnQ7DQotICAgICAgICAgICAgaWYocG9zID09IFRvdGFsQ2hhciAtIDEpIHsNCi0gICAgICAgICAgICAgICAgbkNvdW50Kys7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIHN0ckJlQ2hlY2s7DQotICAgICAgICAgICAgc3RyQmVDaGVjayA9IG1fcFRleHRQYWdlLT5HZXRQYWdlVGV4dChzdGFydCwgbkNvdW50KTsNCi0gICAgICAgICAgICBpZiAoc3RyQmVDaGVjay5HZXRMZW5ndGgoKSA+IDUpIHsNCi0gICAgICAgICAgICAgICAgd2hpbGUoc3RyQmVDaGVjay5HZXRMZW5ndGgoKSA+IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX1dDSEFSIGNoID0gc3RyQmVDaGVjay5HZXRBdChzdHJCZUNoZWNrLkdldExlbmd0aCgpIC0gMSk7DQotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gTCcpJyB8fCBjaCA9PSBMJywnIHx8IGNoID09IEwnPicgfHwgY2ggPT0gTCcuJykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ckJlQ2hlY2sgPSBzdHJCZUNoZWNrLk1pZCgwLCBzdHJCZUNoZWNrLkdldExlbmd0aCgpIC0gMSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgbkNvdW50LS07DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChuQ291bnQgPiA1ICYmIChDaGVja1dlYkxpbmsoc3RyQmVDaGVjaykgfHwgQ2hlY2tNYWlsTGluayhzdHJCZUNoZWNrKSkpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmICghQXBwZW5kVG9MaW5rTGlzdChzdGFydCwgbkNvdW50LCBzdHJCZUNoZWNrKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHN0YXJ0ID0gKytwb3M7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHBvcysrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BERl9MaW5rRXh0cmFjdDo6Q2hlY2tXZWJMaW5rKENGWF9XaWRlU3RyaW5nJiBzdHJCZUNoZWNrKQ0KLXsNCi0gICAgQ0ZYX1dpZGVTdHJpbmcgc3RyID0gc3RyQmVDaGVjazsNCi0gICAgc3RyLk1ha2VMb3dlcigpOw0KLSAgICBpZiAoc3RyLkZpbmQoTCJodHRwOi8vd3d3LiIpICE9IC0xKSB7DQotICAgICAgICBzdHJCZUNoZWNrID0gc3RyQmVDaGVjay5SaWdodChzdHIuR2V0TGVuZ3RoKCkgLSBzdHIuRmluZChMImh0dHA6Ly93d3cuIikpOw0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0gZWxzZSBpZiAoc3RyLkZpbmQoTCJodHRwOi8vIikgIT0gLTEpIHsNCi0gICAgICAgIHN0ckJlQ2hlY2sgPSBzdHJCZUNoZWNrLlJpZ2h0KHN0ci5HZXRMZW5ndGgoKSAtIHN0ci5GaW5kKEwiaHR0cDovLyIpKTsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9IGVsc2UgaWYgKHN0ci5GaW5kKEwiaHR0cHM6Ly93d3cuIikgIT0gLTEpIHsNCi0gICAgICAgIHN0ckJlQ2hlY2sgPSBzdHJCZUNoZWNrLlJpZ2h0KHN0ci5HZXRMZW5ndGgoKSAtIHN0ci5GaW5kKEwiaHR0cHM6Ly93d3cuIikpOw0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0gZWxzZSBpZiAoc3RyLkZpbmQoTCJodHRwczovLyIpICE9IC0xKSB7DQotICAgICAgICBzdHJCZUNoZWNrID0gc3RyQmVDaGVjay5SaWdodChzdHIuR2V0TGVuZ3RoKCkgLSBzdHIuRmluZChMImh0dHBzOi8vIikpOw0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0gZWxzZSBpZiAoc3RyLkZpbmQoTCJ3d3cuIikgIT0gLTEpIHsNCi0gICAgICAgIHN0ckJlQ2hlY2sgPSBzdHJCZUNoZWNrLlJpZ2h0KHN0ci5HZXRMZW5ndGgoKSAtIHN0ci5GaW5kKEwid3d3LiIpKTsNCi0gICAgICAgIHN0ckJlQ2hlY2sgPSBMImh0dHA6Ly8iICsgc3RyQmVDaGVjazsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BERl9MaW5rRXh0cmFjdDo6Q2hlY2tNYWlsTGluayhDRlhfV2lkZVN0cmluZyYgc3RyKQ0KLXsNCi0gICAgc3RyLk1ha2VMb3dlcigpOw0KLSAgICBpbnQgYVBvcyA9IHN0ci5GaW5kKEwnQCcpOw0KLSAgICBpZiAoYVBvcyA8IDEpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoc3RyLkdldEF0KGFQb3MgLSAxKSA9PSBMJy4nIHx8IHN0ci5HZXRBdChhUG9zIC0gMSkgPT0gTCdfJykgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGludCBpOw0KLSAgICBmb3IgKGkgPSBhUG9zIC0gMTsgaSA+PSAwOyBpLS0pIHsNCi0gICAgICAgIEZYX1dDSEFSIGNoID0gc3RyLkdldEF0KGkpOw0KLSAgICAgICAgaWYgKGNoID09IEwnXycgfHwgY2ggPT0gTCcuJyB8fCAoY2ggPj0gTCdhJyAmJiBjaCA8PSBMJ3onKSB8fCAoY2ggPj0gTCcwJyAmJiBjaCA8PSBMJzknKSkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAoaSA9PSBhUG9zIC0gMSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHN0ciA9IHN0ci5SaWdodChzdHIuR2V0TGVuZ3RoKCkgLSBpIC0gMSk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgYVBvcyA9IHN0ci5GaW5kKEwnQCcpOw0KLSAgICBpZiAoYVBvcyA8IDEpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDRlhfV2lkZVN0cmluZyBzdHJ0ZW1wID0gTCIiOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgYVBvczsgaSsrKSB7DQotICAgICAgICBGWF9XQ0hBUiB3Y2ggPSBzdHIuR2V0QXQoaSk7DQotICAgICAgICBpZiAod2NoID49IEwnYScgJiYgd2NoIDw9IEwneicpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc3RydGVtcCA9IHN0ci5SaWdodChzdHIuR2V0TGVuZ3RoKCkgLSBpICsgMSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKHN0cnRlbXAgIT0gTCIiKSB7DQotICAgICAgICBzdHIgPSBzdHJ0ZW1wOw0KLSAgICB9DQotICAgIGFQb3MgPSBzdHIuRmluZChMJ0AnKTsNCi0gICAgaWYgKGFQb3MgPCAxKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgc3RyLlRyaW1SaWdodChMJy4nKTsNCi0gICAgc3RydGVtcCA9IHN0cjsNCi0gICAgaW50IGVQb3MgPSBzdHIuRmluZChMJy4nKTsNCi0gICAgaWYgKGVQb3MgPT0gLTEpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICB3aGlsZSAoZVBvcyAhPSAtMSkgew0KLSAgICAgICAgc3RydGVtcCA9IHN0cnRlbXAuUmlnaHQoc3RydGVtcC5HZXRMZW5ndGgoKSAtIGVQb3MgLSAxKTsNCi0gICAgICAgIGVQb3MgPSBzdHJ0ZW1wLkZpbmQoJy4nKTsNCi0gICAgfQ0KLSAgICBlUG9zID0gc3RydGVtcC5HZXRMZW5ndGgoKTsNCi0gICAgZm9yIChpID0gMDsgaSA8IGVQb3M7IGkrKykgew0KLSAgICAgICAgRlhfV0NIQVIgd2NoID0gc3RyLkdldEF0KGkpOw0KLSAgICAgICAgaWYgKCh3Y2ggPj0gTCdhJyAmJiB3Y2ggPD0gTCd6JykgfHwgKHdjaCA+PSBMJzAnICYmIHdjaCA8PSBMJzknKSkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBzdHIgPSBzdHIuTGVmdChzdHIuR2V0TGVuZ3RoKCkgLSBlUG9zICsgaSArIDEpOw0KLSAgICAgICAgICAgIGVQb3MgPSBlUG9zIC0gaSAtIDE7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaW50IG5MZW4gPSBzdHIuR2V0TGVuZ3RoKCk7DQotICAgIGZvciAoaSA9IGFQb3MgKyAxOyBpIDwgbkxlbiAtIGVQb3M7IGkrKykgew0KLSAgICAgICAgRlhfV0NIQVIgd2NoID0gc3RyLkdldEF0KGkpOw0KLSAgICAgICAgaWYgKHdjaCA9PSBMJy0nIHx8IHdjaCA9PSBMJy4nIHx8ICh3Y2ggPj0gTCdhJyAmJiB3Y2ggPD0gTCd6JykgfHwgKHdjaCA+PSBMJzAnICYmIHdjaCA8PSBMJzknKSkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKHN0ci5GaW5kKEwibWFpbHRvOiIpID09IC0xKSB7DQotICAgICAgICBzdHIgPSBMIm1haWx0bzoiICsgc3RyOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENQREZfTGlua0V4dHJhY3Q6OkFwcGVuZFRvTGlua0xpc3QoaW50IHN0YXJ0LCBpbnQgY291bnQsIENGWF9XaWRlU3RyaW5nIHN0clVybCkNCi17DQotICAgIENQREZfTGlua0V4dCogbGlua0luZm8gPSBOVUxMOw0KLSAgICBsaW5rSW5mbyA9IEZYX05FVyBDUERGX0xpbmtFeHQ7DQotICAgIGlmICghbGlua0luZm8pIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBsaW5rSW5mby0+bV9zdHJVcmwgPSBzdHJVcmw7DQotICAgIGxpbmtJbmZvLT5tX1N0YXJ0ID0gc3RhcnQ7DQotICAgIGxpbmtJbmZvLT5tX0NvdW50ID0gY291bnQ7DQotICAgIG1fTGlua0xpc3QuQWRkKGxpbmtJbmZvKTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUNGWF9XaWRlU3RyaW5nIENQREZfTGlua0V4dHJhY3Q6OkdldFVSTChpbnQgaW5kZXgpIGNvbnN0DQotew0KLSAgICBpZiAoIW1fSXNQYXJzZXJkIHx8IGluZGV4IDwgMCB8fCBpbmRleCA+PSBtX0xpbmtMaXN0LkdldFNpemUoKSkgew0KLSAgICAgICAgcmV0dXJuIEwiIjsNCi0gICAgfQ0KLSAgICBDUERGX0xpbmtFeHQqIGxpbmsgPSBOVUxMOw0KLSAgICBsaW5rID0gbV9MaW5rTGlzdC5HZXRBdChpbmRleCk7DQotICAgIGlmICghbGluaykgew0KLSAgICAgICAgcmV0dXJuIEwiIjsNCi0gICAgfQ0KLSAgICByZXR1cm4gbGluay0+bV9zdHJVcmw7DQotfQ0KLXZvaWQgQ1BERl9MaW5rRXh0cmFjdDo6R2V0Qm91bmRlZFNlZ21lbnQoaW50IGluZGV4LCBpbnQmIHN0YXJ0LCBpbnQmIGNvdW50KSBjb25zdA0KLXsNCi0gICAgaWYgKCFtX0lzUGFyc2VyZCB8fCBpbmRleCA8IDAgfHwgaW5kZXggPj0gbV9MaW5rTGlzdC5HZXRTaXplKCkpIHsNCi0gICAgICAgIHJldHVybiA7DQotICAgIH0NCi0gICAgQ1BERl9MaW5rRXh0KiBsaW5rID0gTlVMTDsNCi0gICAgbGluayA9IG1fTGlua0xpc3QuR2V0QXQoaW5kZXgpOw0KLSAgICBpZiAoIWxpbmspIHsNCi0gICAgICAgIHJldHVybiA7DQotICAgIH0NCi0gICAgc3RhcnQgPSBsaW5rLT5tX1N0YXJ0Ow0KLSAgICBjb3VudCA9IGxpbmstPm1fQ291bnQ7DQotfQ0KLXZvaWQgQ1BERl9MaW5rRXh0cmFjdDo6R2V0UmVjdHMoaW50IGluZGV4LCBDRlhfUmVjdEFycmF5JiByZWN0cykgY29uc3QNCi17DQotICAgIGlmICghbV9Jc1BhcnNlcmQgfHwgaW5kZXggPCAwIHx8IGluZGV4ID49IG1fTGlua0xpc3QuR2V0U2l6ZSgpKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1BERl9MaW5rRXh0KiBsaW5rID0gTlVMTDsNCi0gICAgbGluayA9IG1fTGlua0xpc3QuR2V0QXQoaW5kZXgpOw0KLSAgICBpZiAoIWxpbmspIHsNCi0gICAgICAgIHJldHVybiA7DQotICAgIH0NCi0gICAgbV9wVGV4dFBhZ2UtPkdldFJlY3RBcnJheShsaW5rLT5tX1N0YXJ0LCBsaW5rLT5tX0NvdW50LCByZWN0cyk7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9yZXNvdXJjZS5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2VvYmouaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZ0ZXh0L2ZwZGZfdGV4dC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2UuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCIKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgInRleHRfaW50LmgiCitGWF9CT09MIF9Jc0lnbm9yZVNwYWNlQ2hhcmFjdGVyKEZYX1dDSEFSIGN1ckNoYXIpCit7CisgICAgaWYoY3VyQ2hhciA8IDI1NSApIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoIChjdXJDaGFyID49IDB4MDYwMCAmJiBjdXJDaGFyIDw9IDB4MDZGRikKKyAgICAgICAgICAgIHx8IChjdXJDaGFyID49IDB4RkU3MCAmJiBjdXJDaGFyIDw9IDB4RkVGRikKKyAgICAgICAgICAgIHx8IChjdXJDaGFyID49IDB4RkI1MCAmJiBjdXJDaGFyIDw9IDB4RkRGRikKKyAgICAgICAgICAgIHx8IChjdXJDaGFyID49IDB4MDQwMCAmJiBjdXJDaGFyIDw9IDB4MDRGRikKKyAgICAgICAgICAgIHx8IChjdXJDaGFyID49IDB4MDUwMCAmJiBjdXJDaGFyIDw9IDB4MDUyRikKKyAgICAgICAgICAgIHx8IChjdXJDaGFyID49IDB4QTY0MCAmJiBjdXJDaGFyIDw9IDB4QTY5RikKKyAgICAgICAgICAgIHx8IChjdXJDaGFyID49IDB4MkRFMCAmJiBjdXJDaGFyIDw9IDB4MkRGRikKKyAgICAgICAgICAgIHx8IGN1ckNoYXIgPT0gODQ2NworICAgICAgICAgICAgfHwgKGN1ckNoYXIgPj0gMHgyMDAwICYmIGN1ckNoYXIgPD0gMHgyMDZGKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorQ1BERlRleHRfUGFyc2VPcHRpb25zOjpDUERGVGV4dF9QYXJzZU9wdGlvbnMoKQorICAgIDogbV9iR2V0Q2hhckNvZGVPbmx5KEZBTFNFKSwgbV9iTm9ybWFsaXplT2JqcyhUUlVFKSwgbV9iT3V0cHV0SHlwaGVuKEZBTFNFKQoreworfQorSVBERl9UZXh0UGFnZSogSVBERl9UZXh0UGFnZTo6Q3JlYXRlVGV4dFBhZ2UoY29uc3QgQ1BERl9QYWdlKiBwUGFnZSwgQ1BERlRleHRfUGFyc2VPcHRpb25zIFBhcnNlck9wdGlvbnMpCit7CisgICAgQ1BERl9UZXh0UGFnZSogcFRleHRQYWdlRXggPSBGWF9ORVcgQ1BERl9UZXh0UGFnZShwUGFnZSwgUGFyc2VyT3B0aW9ucyk7CisgICAgcmV0dXJuIHBUZXh0UGFnZUV4OworfQorSVBERl9UZXh0UGFnZSogSVBERl9UZXh0UGFnZTo6Q3JlYXRlVGV4dFBhZ2UoY29uc3QgQ1BERl9QYWdlKiBwUGFnZSwgaW50IGZsYWdzKQoreworICAgIENQREZfVGV4dFBhZ2UqIHBUZXh0UGFnZSA9IEZYX05FVyBDUERGX1RleHRQYWdlKHBQYWdlLCBmbGFncyk7CisgICAgcmV0dXJuCXBUZXh0UGFnZTsKK30KK0lQREZfVGV4dFBhZ2UqCUlQREZfVGV4dFBhZ2U6OkNyZWF0ZVRleHRQYWdlKGNvbnN0IENQREZfUGFnZU9iamVjdHMqIHBPYmpzLCBpbnQgZmxhZ3MpCit7CisgICAgQ1BERl9UZXh0UGFnZSogcFRleHRQYWdlID0gRlhfTkVXIENQREZfVGV4dFBhZ2UocE9ianMsIGZsYWdzKTsKKyAgICByZXR1cm4JcFRleHRQYWdlOworfQorSVBERl9UZXh0UGFnZUZpbmQqCUlQREZfVGV4dFBhZ2VGaW5kOjpDcmVhdGVQYWdlRmluZChjb25zdCBJUERGX1RleHRQYWdlKiBwVGV4dFBhZ2UpCit7CisgICAgaWYgKCFwVGV4dFBhZ2UpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBGWF9ORVcgQ1BERl9UZXh0UGFnZUZpbmQocFRleHRQYWdlKTsKK30KK0lQREZfTGlua0V4dHJhY3QqIElQREZfTGlua0V4dHJhY3Q6OkNyZWF0ZUxpbmtFeHRyYWN0KCkKK3sKKyAgICByZXR1cm4gRlhfTkVXIENQREZfTGlua0V4dHJhY3QoKTsKK30KKyNkZWZpbmUgIFRFWFRfQkxBTktfQ0hBUgkJTCcgJworI2RlZmluZSAgVEVYVF9MSU5FRkVFRF9DSEFSCQlMJ1xuJworI2RlZmluZQkgVEVYVF9SRVRVUk5fQ0hBUgkJTCdccicKKyNkZWZpbmUgIFRFWFRfRU1QVFkJCQkJTCIiCisjZGVmaW5lICBURVhUX0JMQU5LCQkJCUwiICIKKyNkZWZpbmUgIFRFWFRfUkVUVVJOX0xJTkVGRUVECUwiXHJcbiIKKyNkZWZpbmUgIFRFWFRfTElORUZFRUQJCQlMIlxuIgorI2RlZmluZQkgVEVYVF9DSEFSUkFUSU9fR0FQREVMVEEJMC4wNzAKK0NQREZfVGV4dFBhZ2U6OkNQREZfVGV4dFBhZ2UoY29uc3QgQ1BERl9QYWdlKiBwUGFnZSwgaW50IGZsYWdzKQorICAgIDogbV9wUHJlVGV4dE9iaihOVUxMKSwKKyAgICAgIG1fSXNQYXJzZXJlZChGQUxTRSksCisgICAgICBtX2NoYXJMaXN0KDUxMiksCisgICAgICBtX1RlbXBDaGFyTGlzdCg1MCksCisgICAgICBtX1RleHRsaW5lRGlyKC0xKSwKKyAgICAgIG1fQ3VybGluZVJlY3QoMCwgMCwgMCwgMCkKK3sKKyAgICBtX3BQYWdlID0gcFBhZ2U7CisgICAgbV9wYXJzZXJmbGFnID0gZmxhZ3M7CisgICAgbV9UZXh0QnVmLkVzdGltYXRlU2l6ZSgwLCAxMDI0MCk7CisgICAgcFBhZ2UtPkdldERpc3BsYXlNYXRyaXgobV9EaXNwbGF5TWF0cml4LCAwLCAwLCAoaW50KSBwUGFnZS0+R2V0UGFnZVdpZHRoKCksIChpbnQpcFBhZ2UtPkdldFBhZ2VIZWlnaHQoKSwgMCk7Cit9CitDUERGX1RleHRQYWdlOjpDUERGX1RleHRQYWdlKGNvbnN0IENQREZfUGFnZSogcFBhZ2UsIENQREZUZXh0X1BhcnNlT3B0aW9ucyBQYXJzZXJPcHRpb25zKQorICAgIDogbV9wUHJlVGV4dE9iaihOVUxMKQorICAgICwgbV9Jc1BhcnNlcmVkKEZBTFNFKQorICAgICwgbV9jaGFyTGlzdCg1MTIpCisgICAgLCBtX1RlbXBDaGFyTGlzdCg1MCkKKyAgICAsIG1fVGV4dGxpbmVEaXIoLTEpCisgICAgLCBtX0N1cmxpbmVSZWN0KDAsIDAsIDAsIDApCisgICAgLCBtX1BhcnNlT3B0aW9ucyhQYXJzZXJPcHRpb25zKQoreworICAgIG1fcFBhZ2UgPSBwUGFnZTsKKyAgICBtX3BhcnNlcmZsYWcgPSAwOworICAgIG1fVGV4dEJ1Zi5Fc3RpbWF0ZVNpemUoMCwgMTAyNDApOworICAgIHBQYWdlLT5HZXREaXNwbGF5TWF0cml4KG1fRGlzcGxheU1hdHJpeCwgMCwgMCwgKGludCkgcFBhZ2UtPkdldFBhZ2VXaWR0aCgpLCAoaW50KXBQYWdlLT5HZXRQYWdlSGVpZ2h0KCksIDApOworfQorQ1BERl9UZXh0UGFnZTo6Q1BERl9UZXh0UGFnZShjb25zdCBDUERGX1BhZ2VPYmplY3RzKiBwUGFnZSwgaW50IGZsYWdzKQorICAgIDogbV9wUHJlVGV4dE9iaihOVUxMKSwKKyAgICAgIG1fSXNQYXJzZXJlZChGQUxTRSksCisgICAgICBtX2NoYXJMaXN0KDUxMiksCisgICAgICBtX1RlbXBDaGFyTGlzdCg1MCksCisgICAgICBtX1RleHRsaW5lRGlyKC0xKSwKKyAgICAgIG1fQ3VybGluZVJlY3QoMCwgMCwgMCwgMCkKK3sKKyAgICBtX3BQYWdlID0gcFBhZ2U7CisgICAgbV9wYXJzZXJmbGFnID0gZmxhZ3M7CisgICAgbV9UZXh0QnVmLkVzdGltYXRlU2l6ZSgwLCAxMDI0MCk7CisgICAgQ0ZYX0Zsb2F0UmVjdCBwYWdlUmVjdCA9IHBQYWdlLT5DYWxjQm91bmRpbmdCb3goKTsKKyAgICBtX0Rpc3BsYXlNYXRyaXggPSBDRlhfQWZmaW5lTWF0cml4KDEsIDAsIDAsIC0xLCBwYWdlUmVjdC5yaWdodCwgcGFnZVJlY3QudG9wKTsKK30KK3ZvaWQgQ1BERl9UZXh0UGFnZTo6Tm9ybWFsaXplT2JqZWN0cyhGWF9CT09MIGJOb3JtYWxpemUpCit7CisgICAgbV9QYXJzZU9wdGlvbnMubV9iTm9ybWFsaXplT2JqcyA9IGJOb3JtYWxpemU7Cit9CitGWF9CT09MIENQREZfVGV4dFBhZ2U6OklzQ29udHJvbENoYXIoUEFHRUNIQVJfSU5GTyogcENoYXJJbmZvKQoreworICAgIGlmKCFwQ2hhckluZm8pIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBzd2l0Y2gocENoYXJJbmZvLT5tX1VuaWNvZGUpIHsKKyAgICAgICAgY2FzZSAweDI6CisgICAgICAgIGNhc2UgMHgzOgorICAgICAgICBjYXNlIDB4OTM6CisgICAgICAgIGNhc2UgMHg5NDoKKyAgICAgICAgY2FzZSAweDk2OgorICAgICAgICBjYXNlIDB4OTc6CisgICAgICAgIGNhc2UgMHg5ODoKKyAgICAgICAgY2FzZSAweGZmZmU6CisgICAgICAgICAgICBpZihwQ2hhckluZm8tPm1fRmxhZyA9PSBGUERGVEVYVF9DSEFSX0hZUEhFTikgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorfQorRlhfQk9PTCBDUERGX1RleHRQYWdlOjpQYXJzZVRleHRQYWdlKCkKK3sKKyAgICBpZiAoIW1fcFBhZ2UpIHsKKyAgICAgICAgbV9Jc1BhcnNlcmVkID0gRkFMU0U7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9Jc1BhcnNlcmVkID0gRkFMU0U7CisgICAgbV9UZXh0QnVmLkNsZWFyKCk7CisgICAgbV9jaGFyTGlzdC5SZW1vdmVBbGwoKTsKKyAgICBtX3BQcmVUZXh0T2JqID0gTlVMTDsKKyAgICBQcm9jZXNzT2JqZWN0KCk7CisgICAgbV9Jc1BhcnNlcmVkID0gVFJVRTsKKyAgICBpZighbV9QYXJzZU9wdGlvbnMubV9iR2V0Q2hhckNvZGVPbmx5KSB7CisgICAgICAgIG1fQ2hhckluZGV4LlJlbW92ZUFsbCgpOworICAgICAgICBpbnQgbkNvdW50ID0gbV9jaGFyTGlzdC5HZXRTaXplKCk7CisgICAgICAgIGlmKG5Db3VudCkgeworICAgICAgICAgICAgbV9DaGFySW5kZXguQWRkKDApOworICAgICAgICB9CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuQ291bnQ7IGkrKykgeworICAgICAgICAgICAgaW50IGluZGV4U2l6ZSA9IG1fQ2hhckluZGV4LkdldFNpemUoKTsKKyAgICAgICAgICAgIEZYX0JPT0wgYk5vcm1hbCA9IEZBTFNFOworICAgICAgICAgICAgUEFHRUNIQVJfSU5GTyBjaGFyaW5mbyA9ICooUEFHRUNIQVJfSU5GTyopbV9jaGFyTGlzdC5HZXRBdChpKTsKKyAgICAgICAgICAgIGlmKGNoYXJpbmZvLm1fRmxhZyA9PSBGUERGVEVYVF9DSEFSX0dFTkVSQVRFRCkgeworICAgICAgICAgICAgICAgIGJOb3JtYWwgPSBUUlVFOworICAgICAgICAgICAgfQorI2lmZGVmIEZPWElUX0NIUk9NRV9CVUlMRAorICAgICAgICAgICAgZWxzZSBpZihjaGFyaW5mby5tX1VuaWNvZGUgPT0gMCB8fCBJc0NvbnRyb2xDaGFyKCZjaGFyaW5mbykpCisjZWxzZQorICAgICAgICAgICAgZWxzZSBpZihjaGFyaW5mby5tX1VuaWNvZGUgPT0gMCkKKyNlbmRpZgorICAgICAgICAgICAgICAgIGJOb3JtYWwgPSBGQUxTRTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGJOb3JtYWwgPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoYk5vcm1hbCkgeworICAgICAgICAgICAgICAgIGlmKGluZGV4U2l6ZSAlIDIpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9DaGFySW5kZXguQWRkKDEpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmKGluZGV4U2l6ZSA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtX0NoYXJJbmRleC5TZXRBdChpbmRleFNpemUgLSAxLCBtX0NoYXJJbmRleC5HZXRBdChpbmRleFNpemUgLSAxKSArIDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYoaW5kZXhTaXplICUgMikgeworICAgICAgICAgICAgICAgICAgICBpZihpbmRleFNpemUgPD0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbV9DaGFySW5kZXguU2V0QXQoaW5kZXhTaXplIC0gMSwgaSArIDEpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1fQ2hhckluZGV4LkFkZChpICsgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGludCBpbmRleFNpemUgPSBtX0NoYXJJbmRleC5HZXRTaXplKCk7CisgICAgICAgIGlmKGluZGV4U2l6ZSAlIDIpIHsKKyAgICAgICAgICAgIG1fQ2hhckluZGV4LlJlbW92ZUF0KGluZGV4U2l6ZSAtIDEpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQoraW50CUNQREZfVGV4dFBhZ2U6OkNvdW50Q2hhcnMoKSBjb25zdAoreworICAgIGlmKG1fUGFyc2VPcHRpb25zLm1fYkdldENoYXJDb2RlT25seSkgeworICAgICAgICByZXR1cm4gbV9UZXh0QnVmLkdldFNpemUoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fY2hhckxpc3QuR2V0U2l6ZSgpOworfQoraW50IENQREZfVGV4dFBhZ2U6OkNoYXJJbmRleEZyb21UZXh0SW5kZXgoaW50IFRleHRJbmRleCkgY29uc3QKK3sKKyAgICBpbnQgaW5kZXhTaXplID0gbV9DaGFySW5kZXguR2V0U2l6ZSgpOworICAgIGludCBjb3VudCA9IDA7CisgICAgZm9yKGludCBpID0gMDsgaSA8IGluZGV4U2l6ZTsgaSArPSAyKSB7CisgICAgICAgIGNvdW50ICs9IG1fQ2hhckluZGV4LkdldEF0KGkgKyAxKTsKKyAgICAgICAgaWYoY291bnQgPiBUZXh0SW5kZXgpIHsKKyAgICAgICAgICAgIHJldHVybiAJVGV4dEluZGV4IC0gY291bnQgKyBtX0NoYXJJbmRleC5HZXRBdChpICsgMSkgKyBtX0NoYXJJbmRleC5HZXRBdChpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CitpbnQgQ1BERl9UZXh0UGFnZTo6VGV4dEluZGV4RnJvbUNoYXJJbmRleChpbnQgQ2hhckluZGV4KSBjb25zdAoreworICAgIGludCBpbmRleFNpemUgPSBtX0NoYXJJbmRleC5HZXRTaXplKCk7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBmb3IoaW50IGkgPSAwOyBpIDwgaW5kZXhTaXplOyBpICs9IDIpIHsKKyAgICAgICAgY291bnQgKz0gbV9DaGFySW5kZXguR2V0QXQoaSArIDEpOworICAgICAgICBpZihtX0NoYXJJbmRleC5HZXRBdChpICsgMSkgKyBtX0NoYXJJbmRleC5HZXRBdChpKSA+IENoYXJJbmRleCkgeworICAgICAgICAgICAgaWYoQ2hhckluZGV4IC0gbV9DaGFySW5kZXguR2V0QXQoaSkgPCAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIAlDaGFySW5kZXggLSBtX0NoYXJJbmRleC5HZXRBdChpKSArIGNvdW50IC0gbV9DaGFySW5kZXguR2V0QXQoaSArIDEpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAtMTsKK30KK3ZvaWQgQ1BERl9UZXh0UGFnZTo6R2V0UmVjdEFycmF5KGludCBzdGFydCwgaW50IG5Db3VudCwgQ0ZYX1JlY3RBcnJheSYgcmVjdEFycmF5KSBjb25zdAoreworICAgIGlmKG1fUGFyc2VPcHRpb25zLm1fYkdldENoYXJDb2RlT25seSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmKHN0YXJ0IDwgMCB8fCBuQ291bnQgPT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghbV9Jc1BhcnNlcmVkKQl7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUEFHRUNIQVJfSU5GTwkJaW5mb19jdXJjaGFyOworICAgIENQREZfVGV4dE9iamVjdCoJcEN1ck9iaiA9IE5VTEw7CisgICAgQ0ZYX0Zsb2F0UmVjdAkJcmVjdDsKKyAgICBpbnQJCQkJCWN1clBvcyA9IHN0YXJ0OworICAgIEZYX0JPT0wJCQkJZmxhZ05ld1JlY3QgPSBUUlVFOworICAgIGlmIChuQ291bnQgKyBzdGFydCA+IG1fY2hhckxpc3QuR2V0U2l6ZSgpIHx8IG5Db3VudCA9PSAtMSkgeworICAgICAgICBuQ291bnQgPSBtX2NoYXJMaXN0LkdldFNpemUoKSAtIHN0YXJ0OworICAgIH0KKyAgICB3aGlsZSAobkNvdW50LS0pIHsKKyAgICAgICAgaW5mb19jdXJjaGFyID0gKihQQUdFQ0hBUl9JTkZPKiltX2NoYXJMaXN0LkdldEF0KGN1clBvcysrKTsKKyAgICAgICAgaWYgKGluZm9fY3VyY2hhci5tX0ZsYWcgPT0gRlBERlRFWFRfQ0hBUl9HRU5FUkFURUQpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmKGluZm9fY3VyY2hhci5tX0NoYXJCb3guV2lkdGgoKSA8IDAuMDEgfHwgaW5mb19jdXJjaGFyLm1fQ2hhckJveC5IZWlnaHQoKSA8IDAuMDEpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmKCFwQ3VyT2JqKSB7CisgICAgICAgICAgICBwQ3VyT2JqID0gaW5mb19jdXJjaGFyLm1fcFRleHRPYmo7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBDdXJPYmogIT0gaW5mb19jdXJjaGFyLm1fcFRleHRPYmopIHsKKyAgICAgICAgICAgIHJlY3RBcnJheS5BZGQocmVjdCk7CisgICAgICAgICAgICBwQ3VyT2JqID0gaW5mb19jdXJjaGFyLm1fcFRleHRPYmo7CisgICAgICAgICAgICBmbGFnTmV3UmVjdCA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZsYWdOZXdSZWN0KSB7CisgICAgICAgICAgICBGWF9GTE9BVCBvcmdYID0gaW5mb19jdXJjaGFyLm1fT3JpZ2luWCwgb3JnWSA9IGluZm9fY3VyY2hhci5tX09yaWdpblk7CisgICAgICAgICAgICBDRlhfQWZmaW5lTWF0cml4IG1hdHJpeCwgbWF0cml4X3JldmVyc2U7CisgICAgICAgICAgICBpbmZvX2N1cmNoYXIubV9wVGV4dE9iai0+R2V0VGV4dE1hdHJpeCgmbWF0cml4KTsKKyAgICAgICAgICAgIG1hdHJpeC5Db25jYXQoaW5mb19jdXJjaGFyLm1fTWF0cml4KTsKKyAgICAgICAgICAgIG1hdHJpeF9yZXZlcnNlLlNldFJldmVyc2UobWF0cml4KTsKKyAgICAgICAgICAgIG1hdHJpeF9yZXZlcnNlLlRyYW5zZm9ybShvcmdYLCBvcmdZKTsKKyAgICAgICAgICAgIHJlY3QubGVmdCA9IGluZm9fY3VyY2hhci5tX0NoYXJCb3gubGVmdDsKKyAgICAgICAgICAgIHJlY3QucmlnaHQgPSBpbmZvX2N1cmNoYXIubV9DaGFyQm94LnJpZ2h0OworICAgICAgICAgICAgaWYgKHBDdXJPYmotPkdldEZvbnQoKS0+R2V0VHlwZURlc2NlbnQoKSkgeworICAgICAgICAgICAgICAgIHJlY3QuYm90dG9tID0gb3JnWSArIHBDdXJPYmotPkdldEZvbnQoKS0+R2V0VHlwZURlc2NlbnQoKSAqIHBDdXJPYmotPkdldEZvbnRTaXplKCkgLyAxMDAwOworICAgICAgICAgICAgICAgIEZYX0ZMT0FUIHhQb3NUZW1wID0gb3JnWDsKKyAgICAgICAgICAgICAgICBtYXRyaXguVHJhbnNmb3JtKHhQb3NUZW1wLCByZWN0LmJvdHRvbSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlY3QuYm90dG9tID0gaW5mb19jdXJjaGFyLm1fQ2hhckJveC5ib3R0b207CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocEN1ck9iai0+R2V0Rm9udCgpLT5HZXRUeXBlQXNjZW50KCkpIHsKKyAgICAgICAgICAgICAgICByZWN0LnRvcCA9IG9yZ1kgKyBwQ3VyT2JqLT5HZXRGb250KCktPkdldFR5cGVBc2NlbnQoKSAqIHBDdXJPYmotPkdldEZvbnRTaXplKCkgLyAxMDAwOworICAgICAgICAgICAgICAgIEZYX0ZMT0FUIHhQb3NUZW1wID0gb3JnWCArIEdldENoYXJXaWR0aChpbmZvX2N1cmNoYXIubV9DaGFyQ29kZSwgcEN1ck9iai0+R2V0Rm9udCgpKSAqIHBDdXJPYmotPkdldEZvbnRTaXplKCkgLyAxMDAwOworICAgICAgICAgICAgICAgIG1hdHJpeC5UcmFuc2Zvcm0oeFBvc1RlbXAsIHJlY3QudG9wKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmVjdC50b3AgPSBpbmZvX2N1cmNoYXIubV9DaGFyQm94LnRvcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZsYWdOZXdSZWN0ID0gRkFMU0U7CisgICAgICAgICAgICByZWN0ID0gaW5mb19jdXJjaGFyLm1fQ2hhckJveDsKKyAgICAgICAgICAgIHJlY3QuTm9ybWFsaXplKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbmZvX2N1cmNoYXIubV9DaGFyQm94Lk5vcm1hbGl6ZSgpOworICAgICAgICAgICAgaWYgKHJlY3QubGVmdCA+IGluZm9fY3VyY2hhci5tX0NoYXJCb3gubGVmdCkgeworICAgICAgICAgICAgICAgIHJlY3QubGVmdCA9IGluZm9fY3VyY2hhci5tX0NoYXJCb3gubGVmdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZWN0LnJpZ2h0IDwgaW5mb19jdXJjaGFyLm1fQ2hhckJveC5yaWdodCkgeworICAgICAgICAgICAgICAgIHJlY3QucmlnaHQgPSBpbmZvX2N1cmNoYXIubV9DaGFyQm94LnJpZ2h0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCByZWN0LnRvcCA8IGluZm9fY3VyY2hhci5tX0NoYXJCb3gudG9wKSB7CisgICAgICAgICAgICAgICAgcmVjdC50b3AgPSBpbmZvX2N1cmNoYXIubV9DaGFyQm94LnRvcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZWN0LmJvdHRvbSA+IGluZm9fY3VyY2hhci5tX0NoYXJCb3guYm90dG9tKSB7CisgICAgICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBpbmZvX2N1cmNoYXIubV9DaGFyQm94LmJvdHRvbTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZWN0QXJyYXkuQWRkKHJlY3QpOworICAgIHJldHVybjsKK30KK2ludCBDUERGX1RleHRQYWdlOjpHZXRJbmRleEF0UG9zKENQREZfUG9pbnQgcG9pbnQgLCBGWF9GTE9BVCB4VG9yZWxhbmNlLCBGWF9GTE9BVCB5VG9yZWxhbmNlKSBjb25zdAoreworICAgIGlmKG1fUGFyc2VPcHRpb25zLm1fYkdldENoYXJDb2RlT25seSkgeworICAgICAgICByZXR1cm4gLTM7CisgICAgfQorICAgIGlmICghbV9Jc1BhcnNlcmVkKQl7CisgICAgICAgIHJldHVybgktMzsKKyAgICB9CisgICAgRlhfRkxPQVQgZGlzdGFuY2UgPSAwOworICAgIGludCBwb3MgPSAwOworICAgIGludCBOZWFyUG9zID0gLTE7CisgICAgZG91YmxlIHhkaWYgPSA1MDAwLCB5ZGlmID0gNTAwMDsKKyAgICB3aGlsZShwb3MgPCBtX2NoYXJMaXN0LkdldFNpemUoKSkgeworICAgICAgICBQQUdFQ0hBUl9JTkZPIGNoYXJpbmZvID0gKihQQUdFQ0hBUl9JTkZPKikobV9jaGFyTGlzdC5HZXRBdChwb3MpKTsKKyAgICAgICAgQ0ZYX0Zsb2F0UmVjdCBjaGFycmVjdCA9IGNoYXJpbmZvLm1fQ2hhckJveDsKKyAgICAgICAgaWYgKGNoYXJyZWN0LkNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoeFRvcmVsYW5jZSA+IDAgfHwgeVRvcmVsYW5jZSA+IDApIHsKKyAgICAgICAgICAgIENGWF9GbG9hdFJlY3QgY2hhclJlY3RFeHQ7CisgICAgICAgICAgICBjaGFycmVjdC5Ob3JtYWxpemUoKTsKKyAgICAgICAgICAgIGNoYXJSZWN0RXh0LmxlZnQgPSBjaGFycmVjdC5sZWZ0IC0geFRvcmVsYW5jZSAvIDI7CisgICAgICAgICAgICBjaGFyUmVjdEV4dC5yaWdodCA9IGNoYXJyZWN0LnJpZ2h0ICsgeFRvcmVsYW5jZSAvIDI7CisgICAgICAgICAgICBjaGFyUmVjdEV4dC50b3AgPSBjaGFycmVjdC50b3AgKyB5VG9yZWxhbmNlIC8gMjsKKyAgICAgICAgICAgIGNoYXJSZWN0RXh0LmJvdHRvbSA9IGNoYXJyZWN0LmJvdHRvbSAtIHlUb3JlbGFuY2UgLyAyOworICAgICAgICAgICAgaWYgKGNoYXJSZWN0RXh0LkNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKSB7CisgICAgICAgICAgICAgICAgZG91YmxlIGN1clhkaWYsIGN1cllkaWY7CisgICAgICAgICAgICAgICAgY3VyWGRpZiA9IEZYU1lTX2ZhYnMocG9pbnQueCAtIGNoYXJyZWN0LmxlZnQpIDwgRlhTWVNfZmFicyhwb2ludC54IC0gY2hhcnJlY3QucmlnaHQpID8gRlhTWVNfZmFicyhwb2ludC54IC0gY2hhcnJlY3QubGVmdCkgOiBGWFNZU19mYWJzKHBvaW50LnggLSBjaGFycmVjdC5yaWdodCk7CisgICAgICAgICAgICAgICAgY3VyWWRpZiA9IEZYU1lTX2ZhYnMocG9pbnQueSAtIGNoYXJyZWN0LmJvdHRvbSkgPCBGWFNZU19mYWJzKHBvaW50LnkgLSBjaGFycmVjdC50b3AJKSA/IEZYU1lTX2ZhYnMocG9pbnQueSAtIGNoYXJyZWN0LmJvdHRvbSkgOiBGWFNZU19mYWJzKHBvaW50LnkgLSBjaGFycmVjdC50b3ApOworICAgICAgICAgICAgICAgIGlmIChjdXJZZGlmICsgY3VyWGRpZiA8IHhkaWYgKyB5ZGlmKSB7CisgICAgICAgICAgICAgICAgICAgIHlkaWYgPSBjdXJZZGlmOworICAgICAgICAgICAgICAgICAgICB4ZGlmID0gY3VyWGRpZjsKKyAgICAgICAgICAgICAgICAgICAgTmVhclBvcyA9IHBvczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgKytwb3M7CisgICAgfQorICAgIGlmIChwb3MgPj0gbV9jaGFyTGlzdC5HZXRTaXplKCkpIHsKKyAgICAgICAgcG9zID0gTmVhclBvczsKKyAgICB9CisgICAgcmV0dXJuIHBvczsKK30KK0NGWF9XaWRlU3RyaW5nIENQREZfVGV4dFBhZ2U6OkdldFRleHRCeVJlY3QoQ0ZYX0Zsb2F0UmVjdCByZWN0KSBjb25zdAoreworICAgIENGWF9XaWRlU3RyaW5nIHN0clRleHQ7CisgICAgaWYobV9QYXJzZU9wdGlvbnMubV9iR2V0Q2hhckNvZGVPbmx5IHx8ICFtX0lzUGFyc2VyZWQpIHsKKyAgICAgICAgcmV0dXJuIHN0clRleHQ7CisgICAgfQorICAgIGludCBuQ291bnQgPSBtX2NoYXJMaXN0LkdldFNpemUoKTsKKyAgICBpbnQgcG9zID0gMDsKKyAgICBGWF9GTE9BVCBwb3N5ID0gMDsKKyAgICBGWF9CT09MIElzQ29udGFpblByZUNoYXIgPSBGQUxTRTsKKyAgICBGWF9CT09MCUlTQWRkTGluZUZlZWQgPSBGQUxTRTsKKyAgICB3aGlsZSAocG9zIDwgbkNvdW50KSB7CisgICAgICAgIFBBR0VDSEFSX0lORk8gY2hhcmluZm8gPSAqKFBBR0VDSEFSX0lORk8qKW1fY2hhckxpc3QuR2V0QXQocG9zKyspOworICAgICAgICBpZiAoSXNSZWN0SW50ZXJzZWN0KHJlY3QsIGNoYXJpbmZvLm1fQ2hhckJveCkpIHsKKyAgICAgICAgICAgIGlmIChGWFNZU19mYWJzKHBvc3kgLSBjaGFyaW5mby5tX09yaWdpblkpID4gMCAmJiAhSXNDb250YWluUHJlQ2hhciAmJiBJU0FkZExpbmVGZWVkKSB7CisgICAgICAgICAgICAgICAgcG9zeSA9IGNoYXJpbmZvLm1fT3JpZ2luWTsKKyAgICAgICAgICAgICAgICBpZiAoc3RyVGV4dC5HZXRMZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgc3RyVGV4dCArPSBMIlxyXG4iOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIElzQ29udGFpblByZUNoYXIgPSBUUlVFOworICAgICAgICAgICAgSVNBZGRMaW5lRmVlZCA9IEZBTFNFOworICAgICAgICAgICAgaWYgKGNoYXJpbmZvLm1fVW5pY29kZSkgeworICAgICAgICAgICAgICAgIHN0clRleHQgKz0gY2hhcmluZm8ubV9Vbmljb2RlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGNoYXJpbmZvLm1fVW5pY29kZSA9PSAzMikgeworICAgICAgICAgICAgaWYgKElzQ29udGFpblByZUNoYXIgJiYgY2hhcmluZm8ubV9Vbmljb2RlKSB7CisgICAgICAgICAgICAgICAgc3RyVGV4dCArPSBjaGFyaW5mby5tX1VuaWNvZGU7CisgICAgICAgICAgICAgICAgSXNDb250YWluUHJlQ2hhciA9IEZBTFNFOworICAgICAgICAgICAgICAgIElTQWRkTGluZUZlZWQgPSBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIElzQ29udGFpblByZUNoYXIgPSBGQUxTRTsKKyAgICAgICAgICAgIElTQWRkTGluZUZlZWQgPSBUUlVFOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBzdHJUZXh0OworfQordm9pZCBDUERGX1RleHRQYWdlOjpHZXRSZWN0c0FycmF5QnlSZWN0KENGWF9GbG9hdFJlY3QgcmVjdCwgQ0ZYX1JlY3RBcnJheSYgcmVzUmVjdEFycmF5KSBjb25zdAoreworICAgIGlmKG1fUGFyc2VPcHRpb25zLm1fYkdldENoYXJDb2RlT25seSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghbV9Jc1BhcnNlcmVkKQl7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZYX0Zsb2F0UmVjdAkJY3VyUmVjdDsKKyAgICBGWF9CT09MCQkJCWZsYWdOZXdSZWN0ID0gVFJVRTsKKyAgICBDUERGX1RleHRPYmplY3QqCXBDdXJPYmogPSBOVUxMOworICAgIGludCBuQ291bnQgPSBtX2NoYXJMaXN0LkdldFNpemUoKTsKKyAgICBpbnQgcG9zID0gMDsKKyAgICB3aGlsZSAocG9zIDwgbkNvdW50KSB7CisgICAgICAgIFBBR0VDSEFSX0lORk8gaW5mb19jdXJjaGFyID0gKihQQUdFQ0hBUl9JTkZPKiltX2NoYXJMaXN0LkdldEF0KHBvcysrKTsKKyAgICAgICAgaWYgKGluZm9fY3VyY2hhci5tX0ZsYWcgPT0gRlBERlRFWFRfQ0hBUl9HRU5FUkFURUQpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmKHBvcyA9PSA0OTQpIHsKKyAgICAgICAgICAgIGludCBhID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoSXNSZWN0SW50ZXJzZWN0KHJlY3QsIGluZm9fY3VyY2hhci5tX0NoYXJCb3gpKSB7CisgICAgICAgICAgICBpZighcEN1ck9iaikgeworICAgICAgICAgICAgICAgIHBDdXJPYmogPSBpbmZvX2N1cmNoYXIubV9wVGV4dE9iajsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwQ3VyT2JqICE9IGluZm9fY3VyY2hhci5tX3BUZXh0T2JqKSB7CisgICAgICAgICAgICAgICAgcmVzUmVjdEFycmF5LkFkZChjdXJSZWN0KTsKKyAgICAgICAgICAgICAgICBwQ3VyT2JqID0gaW5mb19jdXJjaGFyLm1fcFRleHRPYmo7CisgICAgICAgICAgICAgICAgZmxhZ05ld1JlY3QgPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZsYWdOZXdSZWN0KSB7CisgICAgICAgICAgICAgICAgY3VyUmVjdCA9IGluZm9fY3VyY2hhci5tX0NoYXJCb3g7CisgICAgICAgICAgICAgICAgZmxhZ05ld1JlY3QgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICBjdXJSZWN0Lk5vcm1hbGl6ZSgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbmZvX2N1cmNoYXIubV9DaGFyQm94Lk5vcm1hbGl6ZSgpOworICAgICAgICAgICAgICAgIGlmIChjdXJSZWN0LmxlZnQgPiBpbmZvX2N1cmNoYXIubV9DaGFyQm94LmxlZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgY3VyUmVjdC5sZWZ0ID0gaW5mb19jdXJjaGFyLm1fQ2hhckJveC5sZWZ0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY3VyUmVjdC5yaWdodCA8IGluZm9fY3VyY2hhci5tX0NoYXJCb3gucmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgY3VyUmVjdC5yaWdodCA9IGluZm9fY3VyY2hhci5tX0NoYXJCb3gucmlnaHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICggY3VyUmVjdC50b3AgPCBpbmZvX2N1cmNoYXIubV9DaGFyQm94LnRvcCkgeworICAgICAgICAgICAgICAgICAgICBjdXJSZWN0LnRvcCA9IGluZm9fY3VyY2hhci5tX0NoYXJCb3gudG9wOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY3VyUmVjdC5ib3R0b20gPiBpbmZvX2N1cmNoYXIubV9DaGFyQm94LmJvdHRvbSkgeworICAgICAgICAgICAgICAgICAgICBjdXJSZWN0LmJvdHRvbSA9IGluZm9fY3VyY2hhci5tX0NoYXJCb3guYm90dG9tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXNSZWN0QXJyYXkuQWRkKGN1clJlY3QpOworICAgIHJldHVybjsKK30KK2ludAlDUERGX1RleHRQYWdlOjpHZXRJbmRleEF0UG9zKEZYX0ZMT0FUIHgsIEZYX0ZMT0FUIHksIEZYX0ZMT0FUIHhUb3JlbGFuY2UsIEZYX0ZMT0FUIHlUb3JlbGFuY2UpIGNvbnN0Cit7CisgICAgaWYobV9QYXJzZU9wdGlvbnMubV9iR2V0Q2hhckNvZGVPbmx5KSB7CisgICAgICAgIHJldHVybiAtMzsKKyAgICB9CisgICAgQ1BERl9Qb2ludCBwb2ludCh4LCB5KTsKKyAgICByZXR1cm4gR2V0SW5kZXhBdFBvcyhwb2ludCwgeFRvcmVsYW5jZSwgeVRvcmVsYW5jZSk7Cit9CitpbnQgQ1BERl9UZXh0UGFnZTo6R2V0T3JkZXJCeURpcmVjdGlvbihpbnQgb3JkZXIsIGludCBkaXJlY3Rpb24pIGNvbnN0Cit7CisgICAgaWYobV9QYXJzZU9wdGlvbnMubV9iR2V0Q2hhckNvZGVPbmx5KSB7CisgICAgICAgIHJldHVybiAtMzsKKyAgICB9CisgICAgaWYgKCFtX0lzUGFyc2VyZWQpIHsKKyAgICAgICAgcmV0dXJuIC0zOworICAgIH0KKyAgICBpZiAoZGlyZWN0aW9uID09IEZQREZURVhUX1JJR0hUIHx8IGRpcmVjdGlvbiA9PSBGUERGVEVYVF9MRUZUKSB7CisgICAgICAgIG9yZGVyICs9IGRpcmVjdGlvbjsKKyAgICAgICAgd2hpbGUob3JkZXIgPj0gMCAmJiBvcmRlciA8IG1fY2hhckxpc3QuR2V0U2l6ZSgpKSB7CisgICAgICAgICAgICBQQUdFQ0hBUl9JTkZPIGNpbmZvID0gKihQQUdFQ0hBUl9JTkZPKiltX2NoYXJMaXN0LkdldEF0KG9yZGVyKTsKKyAgICAgICAgICAgIGlmIChjaW5mby5tX0ZsYWcgIT0gRlBERlRFWFRfQ0hBUl9HRU5FUkFURUQpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNpbmZvLm1fVW5pY29kZSA9PSBURVhUX0xJTkVGRUVEX0NIQVIgfHwgY2luZm8ubV9Vbmljb2RlID09IFRFWFRfUkVUVVJOX0NIQVIpIHsKKyAgICAgICAgICAgICAgICAgICAgb3JkZXIgKz0gZGlyZWN0aW9uOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAob3JkZXIgPj0gbV9jaGFyTGlzdC5HZXRTaXplKCkpIHsKKyAgICAgICAgICAgIG9yZGVyID0gLTI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG9yZGVyOworICAgIH0KKyAgICBQQUdFQ0hBUl9JTkZPIGNoYXJpbmZvOworICAgIGNoYXJpbmZvID0gKihQQUdFQ0hBUl9JTkZPKiltX2NoYXJMaXN0LkdldEF0KG9yZGVyKTsKKyAgICBDUERGX1BvaW50IGN1clBvcyhjaGFyaW5mby5tX09yaWdpblgsIGNoYXJpbmZvLm1fT3JpZ2luWSk7CisgICAgRlhfRkxPQVQgZGlmUG9zWSA9IDAuMCwgbWluWGRpZiA9IDEwMDA7CisgICAgaW50CW1pbkluZGV4ID0gLTI7CisgICAgaW50IGluZGV4ID0gb3JkZXI7CisgICAgRlhfRkxPQVQgaGVpZ2h0ID0gY2hhcmluZm8ubV9DaGFyQm94LkhlaWdodCgpOworICAgIGlmIChkaXJlY3Rpb24gPT0gRlBERlRFWFRfVVApIHsKKyAgICAgICAgbWluSW5kZXggPSAtMTsKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIGlmICgtLWluZGV4IDwgMCkJeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNoYXJpbmZvID0gKihQQUdFQ0hBUl9JTkZPKiltX2NoYXJMaXN0LkdldEF0KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChGWFNZU19mYWJzKGNoYXJpbmZvLm1fT3JpZ2luWSAtIGN1clBvcy55KSA+IEZYX01BWChoZWlnaHQsIGNoYXJpbmZvLm1fQ2hhckJveC5IZWlnaHQoKSkgLyAyKSB7CisgICAgICAgICAgICAgICAgZGlmUG9zWSA9IGNoYXJpbmZvLm1fT3JpZ2luWTsKKyAgICAgICAgICAgICAgICBtaW5JbmRleCA9IGluZGV4OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEZYX0ZMT0FUIFByZVhkaWYgPSBjaGFyaW5mby5tX09yaWdpblggLSBjdXJQb3MueDsKKyAgICAgICAgbWluWGRpZiA9IFByZVhkaWY7CisgICAgICAgIGlmIChQcmVYZGlmID09IDApCXsKKyAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgfQorICAgICAgICBGWF9GTE9BVCBjdXJYZGlmID0gMDsKKyAgICAgICAgd2hpbGUgKC0taW5kZXggPj0gMCkgeworICAgICAgICAgICAgY2hhcmluZm8gPSAqKFBBR0VDSEFSX0lORk8qKW1fY2hhckxpc3QuR2V0QXQoaW5kZXgpOworICAgICAgICAgICAgaWYgKGRpZlBvc1kgIT0gY2hhcmluZm8ubV9PcmlnaW5ZKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdXJYZGlmID0gY2hhcmluZm8ubV9PcmlnaW5YIC0gY3VyUG9zLng7CisgICAgICAgICAgICBpZiAoY3VyWGRpZiA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IHNpZ25mbGFnID0gMDsKKyAgICAgICAgICAgIGlmIChjdXJYZGlmID4gMCkgeworICAgICAgICAgICAgICAgIHNpZ25mbGFnID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2lnbmZsYWcgPSAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzaWduZmxhZyAqIFByZVhkaWYgPCAwKSB7CisgICAgICAgICAgICAgICAgaWYgKEZYU1lTX2ZhYnMoUHJlWGRpZikgPCBGWFNZU19mYWJzKGN1clhkaWYpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCArIDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChGWFNZU19mYWJzKGN1clhkaWYpIDwgRlhTWVNfZmFicyhtaW5YZGlmKSkgeworICAgICAgICAgICAgICAgIG1pbkluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgbWluWGRpZiA9IGN1clhkaWY7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQcmVYZGlmID0gY3VyWGRpZjsKKyAgICAgICAgICAgIGlmIChkaWZQb3NZICE9IGNoYXJpbmZvLm1fT3JpZ2luWSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBtaW5JbmRleDsKKyAgICB9IGVsc2UgaWYoRlBERlRFWFRfRE9XTikgeworICAgICAgICBtaW5JbmRleCA9IC0yOworICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgaWYgKCsraW5kZXggPiBtX2NoYXJMaXN0LkdldFNpemUoKSAtIDEpCXsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWluSW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGFyaW5mbyA9ICooUEFHRUNIQVJfSU5GTyopbV9jaGFyTGlzdC5HZXRBdChpbmRleCk7CisgICAgICAgICAgICBpZiAoRlhTWVNfZmFicyhjaGFyaW5mby5tX09yaWdpblkgLSBjdXJQb3MueSkgPiBGWF9NQVgoaGVpZ2h0LCBjaGFyaW5mby5tX0NoYXJCb3guSGVpZ2h0KCkpIC8gMikgeworICAgICAgICAgICAgICAgIGRpZlBvc1kgPSBjaGFyaW5mby5tX09yaWdpblk7CisgICAgICAgICAgICAgICAgbWluSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBGWF9GTE9BVCBQcmVYZGlmID0gY2hhcmluZm8ubV9PcmlnaW5YIC0gY3VyUG9zLng7CisgICAgICAgIG1pblhkaWYgPSBQcmVYZGlmOworICAgICAgICBpZiAoUHJlWGRpZiA9PSAwKQl7CisgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgIH0KKyAgICAgICAgRlhfRkxPQVQgY3VyWGRpZiA9IDA7CisgICAgICAgIHdoaWxlICgrK2luZGV4IDwgbV9jaGFyTGlzdC5HZXRTaXplKCkpIHsKKyAgICAgICAgICAgIGNoYXJpbmZvID0gKihQQUdFQ0hBUl9JTkZPKiltX2NoYXJMaXN0LkdldEF0KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChkaWZQb3NZICE9IGNoYXJpbmZvLm1fT3JpZ2luWSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3VyWGRpZiA9IGNoYXJpbmZvLm1fT3JpZ2luWCAtIGN1clBvcy54OworICAgICAgICAgICAgaWYgKGN1clhkaWYgPT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBzaWduZmxhZyA9IDA7CisgICAgICAgICAgICBpZiAoY3VyWGRpZiA+IDApIHsKKyAgICAgICAgICAgICAgICBzaWduZmxhZyA9IDE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNpZ25mbGFnID0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2lnbmZsYWcgKiBQcmVYZGlmIDwgMCkgeworICAgICAgICAgICAgICAgIGlmIChGWFNZU19mYWJzKFByZVhkaWYpIDwgRlhTWVNfZmFicyhjdXJYZGlmKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggLSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoRlhTWVNfZmFicyhjdXJYZGlmKSA8IEZYU1lTX2ZhYnMobWluWGRpZikpIHsKKyAgICAgICAgICAgICAgICBtaW5YZGlmID0gY3VyWGRpZjsKKyAgICAgICAgICAgICAgICBtaW5JbmRleCA9IGluZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHJlWGRpZiA9IGN1clhkaWY7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1pbkluZGV4OworICAgIH0KK30KK3ZvaWQgQ1BERl9UZXh0UGFnZTo6R2V0Q2hhckluZm8oaW50IGluZGV4LCBGUERGX0NIQVJfSU5GTyAmIGluZm8pIGNvbnN0Cit7CisgICAgaWYobV9QYXJzZU9wdGlvbnMubV9iR2V0Q2hhckNvZGVPbmx5KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFtX0lzUGFyc2VyZWQpCXsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1fY2hhckxpc3QuR2V0U2l6ZSgpKQl7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUEFHRUNIQVJfSU5GTyBjaGFyaW5mbzsKKyAgICBjaGFyaW5mbyA9ICooUEFHRUNIQVJfSU5GTyopbV9jaGFyTGlzdC5HZXRBdChpbmRleCk7CisgICAgaW5mby5tX0NoYXJjb2RlID0gY2hhcmluZm8ubV9DaGFyQ29kZTsKKyAgICBpbmZvLm1fT3JpZ2luWCA9IGNoYXJpbmZvLm1fT3JpZ2luWDsKKyAgICBpbmZvLm1fT3JpZ2luWSA9IGNoYXJpbmZvLm1fT3JpZ2luWTsKKyAgICBpbmZvLm1fVW5pY29kZSA9IGNoYXJpbmZvLm1fVW5pY29kZTsKKyAgICBpbmZvLm1fRmxhZyA9IGNoYXJpbmZvLm1fRmxhZzsKKyAgICBpbmZvLm1fQ2hhckJveCA9IGNoYXJpbmZvLm1fQ2hhckJveDsKKyAgICBpbmZvLm1fcFRleHRPYmogPSBjaGFyaW5mby5tX3BUZXh0T2JqOworICAgIGlmIChjaGFyaW5mby5tX3BUZXh0T2JqICYmIGNoYXJpbmZvLm1fcFRleHRPYmotPkdldEZvbnQoKSkgeworICAgICAgICBpbmZvLm1fRm9udFNpemUgPSBjaGFyaW5mby5tX3BUZXh0T2JqLT5HZXRGb250U2l6ZSgpOworICAgIH0KKyAgICBpbmZvLm1fTWF0cml4LkNvcHkoY2hhcmluZm8ubV9NYXRyaXgpOworICAgIHJldHVybjsKK30KK3ZvaWQgQ1BERl9UZXh0UGFnZTo6Q2hlY2tNYXJrZWRDb250ZW50T2JqZWN0KEZYX0lOVDMyJiBzdGFydCwgRlhfSU5UMzImIG5Db3VudCkgY29uc3QKK3sKKyAgICBQQUdFQ0hBUl9JTkZPIGNoYXJpbmZvID0gKihQQUdFQ0hBUl9JTkZPKiltX2NoYXJMaXN0LkdldEF0KHN0YXJ0KTsKKyAgICBQQUdFQ0hBUl9JTkZPIGNoYXJpbmZvMiA9ICooUEFHRUNIQVJfSU5GTyopbV9jaGFyTGlzdC5HZXRBdChzdGFydCArIG5Db3VudCAtIDEpOworICAgIGlmIChGUERGVEVYVF9DSEFSX1BJRUNFICE9IGNoYXJpbmZvLm1fRmxhZyAmJiBGUERGVEVYVF9DSEFSX1BJRUNFICE9IGNoYXJpbmZvMi5tX0ZsYWcpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoRlBERlRFWFRfQ0hBUl9QSUVDRSA9PSBjaGFyaW5mby5tX0ZsYWcpIHsKKyAgICAgICAgUEFHRUNIQVJfSU5GTyBjaGFyaW5mbzEgPSBjaGFyaW5mbzsKKyAgICAgICAgaW50IHN0YXJ0SW5kZXggPSBzdGFydDsKKyAgICAgICAgd2hpbGUoRlBERlRFWFRfQ0hBUl9QSUVDRSA9PSBjaGFyaW5mbzEubV9GbGFnICYmIGNoYXJpbmZvMS5tX0luZGV4ID09IGNoYXJpbmZvLm1fSW5kZXgpIHsKKyAgICAgICAgICAgIHN0YXJ0SW5kZXgtLTsKKyAgICAgICAgICAgIGlmIChzdGFydEluZGV4IDwgMCkJeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hhcmluZm8xID0gKihQQUdFQ0hBUl9JTkZPKiltX2NoYXJMaXN0LkdldEF0KHN0YXJ0SW5kZXgpOworICAgICAgICB9CisgICAgICAgIHN0YXJ0SW5kZXgrKzsKKyAgICAgICAgc3RhcnQgPSBzdGFydEluZGV4OworICAgIH0KKyAgICBpZiAoRlBERlRFWFRfQ0hBUl9QSUVDRSA9PSBjaGFyaW5mbzIubV9GbGFnKSB7CisgICAgICAgIFBBR0VDSEFSX0lORk8gY2hhcmluZm8zID0gY2hhcmluZm8yOworICAgICAgICBpbnQgZW5kSW5kZXggPSBzdGFydCArIG5Db3VudCAtIDE7CisgICAgICAgIHdoaWxlKEZQREZURVhUX0NIQVJfUElFQ0UgPT0gY2hhcmluZm8zLm1fRmxhZyAmJiBjaGFyaW5mbzMubV9JbmRleCA9PSBjaGFyaW5mbzIubV9JbmRleCkgeworICAgICAgICAgICAgZW5kSW5kZXgrKzsKKyAgICAgICAgICAgIGlmIChlbmRJbmRleCA+PSBtX2NoYXJMaXN0LkdldFNpemUoKSkJeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2hhcmluZm8zID0gKihQQUdFQ0hBUl9JTkZPKiltX2NoYXJMaXN0LkdldEF0KGVuZEluZGV4KTsKKyAgICAgICAgfQorICAgICAgICBlbmRJbmRleC0tOworICAgICAgICBuQ291bnQgPSBlbmRJbmRleCAtIHN0YXJ0ICsgMTsKKyAgICB9Cit9CitDRlhfV2lkZVN0cmluZyBDUERGX1RleHRQYWdlOjpHZXRQYWdlVGV4dChpbnQgc3RhcnQgLCBpbnQgbkNvdW50KSBjb25zdAoreworICAgIGlmICghbV9Jc1BhcnNlcmVkIHx8IG5Db3VudCA9PSAwKSB7CisgICAgICAgIHJldHVybiBMIiI7CisgICAgfQorICAgIGlmIChzdGFydCA8IDApIHsKKyAgICAgICAgc3RhcnQgPSAwOworICAgIH0KKyAgICBpZgkobkNvdW50ID09IC0xKSB7CisgICAgICAgIG5Db3VudCA9IG1fY2hhckxpc3QuR2V0U2l6ZSgpIC0gc3RhcnQ7CisgICAgICAgIHJldHVybiBtX1RleHRCdWYuR2V0V2lkZVN0cmluZygpLk1pZChzdGFydCwgbV9UZXh0QnVmLkdldFdpZGVTdHJpbmcoKS5HZXRMZW5ndGgoKSk7CisgICAgfQorICAgIGlmKG5Db3VudCA8PSAwIHx8IG1fY2hhckxpc3QuR2V0U2l6ZSgpIDw9IDApIHsKKyAgICAgICAgcmV0dXJuIEwiIjsKKyAgICB9CisgICAgaWYobkNvdW50ICsgc3RhcnQgPiBtX2NoYXJMaXN0LkdldFNpemUoKSAtIDEpIHsKKyAgICAgICAgbkNvdW50ID0gbV9jaGFyTGlzdC5HZXRTaXplKCkgLSBzdGFydDsKKyAgICB9CisgICAgaWYgKG5Db3VudCA8PSAwKSB7CisgICAgICAgIHJldHVybiBMIiI7CisgICAgfQorICAgIENoZWNrTWFya2VkQ29udGVudE9iamVjdChzdGFydCwgbkNvdW50KTsKKyAgICBpbnQgc3RhcnRpbmRleCA9IDA7CisgICAgUEFHRUNIQVJfSU5GTyBjaGFyaW5mbyA9ICooUEFHRUNIQVJfSU5GTyopbV9jaGFyTGlzdC5HZXRBdChzdGFydCk7CisgICAgaW50IHN0YXJ0T2Zmc2V0ID0gMDsKKyAgICB3aGlsZShjaGFyaW5mby5tX0luZGV4ID09IC0xKSB7CisgICAgICAgIHN0YXJ0T2Zmc2V0Kys7CisgICAgICAgIGlmIChzdGFydE9mZnNldCA+IG5Db3VudCB8fCBzdGFydCArIHN0YXJ0T2Zmc2V0ID49IG1fY2hhckxpc3QuR2V0U2l6ZSgpKQl7CisgICAgICAgICAgICByZXR1cm4gTCIiOworICAgICAgICB9CisgICAgICAgIGNoYXJpbmZvID0gKihQQUdFQ0hBUl9JTkZPKiltX2NoYXJMaXN0LkdldEF0KHN0YXJ0ICsgc3RhcnRPZmZzZXQpOworICAgIH0KKyAgICBzdGFydGluZGV4ID0gY2hhcmluZm8ubV9JbmRleDsKKyAgICBjaGFyaW5mbyA9ICooUEFHRUNIQVJfSU5GTyopbV9jaGFyTGlzdC5HZXRBdChzdGFydCArIG5Db3VudCAtIDEpOworICAgIGludCBuQ291bnRPZmZzZXQgPSAwOworICAgIHdoaWxlIChjaGFyaW5mby5tX0luZGV4ID09IC0xKSB7CisgICAgICAgIG5Db3VudE9mZnNldCsrOworICAgICAgICBpZiAobkNvdW50T2Zmc2V0ID49IG5Db3VudCkgeworICAgICAgICAgICAgcmV0dXJuIEwiIjsKKyAgICAgICAgfQorICAgICAgICBjaGFyaW5mbyA9ICooUEFHRUNIQVJfSU5GTyopbV9jaGFyTGlzdC5HZXRBdChzdGFydCArIG5Db3VudCAtIG5Db3VudE9mZnNldCAtIDEpOworICAgIH0KKyAgICBuQ291bnQgPSBzdGFydCArIG5Db3VudCAtIG5Db3VudE9mZnNldCAtIHN0YXJ0aW5kZXg7CisgICAgaWYobkNvdW50IDw9IDApIHsKKyAgICAgICAgcmV0dXJuIEwiIjsKKyAgICB9CisgICAgcmV0dXJuIG1fVGV4dEJ1Zi5HZXRXaWRlU3RyaW5nKCkuTWlkKHN0YXJ0aW5kZXgsIG5Db3VudCk7Cit9CitpbnQgQ1BERl9UZXh0UGFnZTo6Q291bnRSZWN0cyhpbnQgc3RhcnQsIGludCBuQ291bnQpCit7CisgICAgaWYobV9QYXJzZU9wdGlvbnMubV9iR2V0Q2hhckNvZGVPbmx5KSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKCFtX0lzUGFyc2VyZWQpCXsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAoc3RhcnQgPCAwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKG5Db3VudCA9PSAtMSB8fCBuQ291bnQgKyBzdGFydCA+IG1fY2hhckxpc3QuR2V0U2l6ZSgpICkgeworICAgICAgICBuQ291bnQgPSBtX2NoYXJMaXN0LkdldFNpemUoKSAtIHN0YXJ0OworICAgIH0KKyAgICBtX1NlbFJlY3RzLlJlbW92ZUFsbCgpOworICAgIEdldFJlY3RBcnJheShzdGFydCwgbkNvdW50LCBtX1NlbFJlY3RzKTsKKyAgICByZXR1cm4gbV9TZWxSZWN0cy5HZXRTaXplKCk7Cit9Cit2b2lkIENQREZfVGV4dFBhZ2U6OkdldFJlY3QoaW50IHJlY3RJbmRleCwgRlhfRkxPQVQmIGxlZnQsIEZYX0ZMT0FUJiB0b3AsIEZYX0ZMT0FUJiByaWdodCwgRlhfRkxPQVQgJmJvdHRvbSkgY29uc3QKK3sKKyAgICBpZihtX1BhcnNlT3B0aW9ucy5tX2JHZXRDaGFyQ29kZU9ubHkpIHsKKyAgICAgICAgcmV0dXJuIDsKKyAgICB9CisgICAgaWYgKCFtX0lzUGFyc2VyZWQgfHwgcmVjdEluZGV4IDwgMCB8fCByZWN0SW5kZXggPj0gbV9TZWxSZWN0cy5HZXRTaXplKCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBsZWZ0ID0gbV9TZWxSZWN0cy5HZXRBdChyZWN0SW5kZXgpLmxlZnQ7CisgICAgdG9wID0gbV9TZWxSZWN0cy5HZXRBdChyZWN0SW5kZXgpLnRvcDsKKyAgICByaWdodCA9IG1fU2VsUmVjdHMuR2V0QXQocmVjdEluZGV4KS5yaWdodDsKKyAgICBib3R0b20gPSBtX1NlbFJlY3RzLkdldEF0KHJlY3RJbmRleCkuYm90dG9tOworfQorRlhfQk9PTCBDUERGX1RleHRQYWdlOjpHZXRCYXNlbGluZVJvdGF0ZShpbnQgc3RhcnQsIGludCBlbmQsIGludCYgUm90YXRlKQoreworICAgIGlmKG1fUGFyc2VPcHRpb25zLm1fYkdldENoYXJDb2RlT25seSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmKGVuZCA9PSBzdGFydCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEZYX0ZMT0FUIGR4LCBkeTsKKyAgICBGUERGX0NIQVJfSU5GTyBpbmZvMSwgaW5mbzI7CisgICAgR2V0Q2hhckluZm8oc3RhcnQsIGluZm8xKTsKKyAgICBHZXRDaGFySW5mbyhlbmQsIGluZm8yKTsKKyAgICB3aGlsZShpbmZvMi5tX0NoYXJCb3guV2lkdGgoKSA9PSAwIHx8IGluZm8yLm1fQ2hhckJveC5IZWlnaHQoKSA9PSAwKSB7CisgICAgICAgIGVuZC0tOworICAgICAgICBpZihlbmQgPD0gc3RhcnQpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBHZXRDaGFySW5mbyhlbmQsIGluZm8yKTsKKyAgICB9CisgICAgZHggPSAoaW5mbzIubV9PcmlnaW5YIC0gaW5mbzEubV9PcmlnaW5YKTsKKyAgICBkeSA9IChpbmZvMi5tX09yaWdpblkgLSBpbmZvMS5tX09yaWdpblkpOworICAgIGlmKGR4ID09IDApIHsKKyAgICAgICAgaWYoZHkgPiAwKSB7CisgICAgICAgICAgICBSb3RhdGUgPSA5MDsKKyAgICAgICAgfSBlbHNlIGlmIChkeSA8IDApIHsKKyAgICAgICAgICAgIFJvdGF0ZSA9IDI3MDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFJvdGF0ZSA9IDA7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmbG9hdCBhID0gRlhTWVNfYXRhbjIoZHksIGR4KTsKKyAgICAgICAgUm90YXRlID0gKGludCkoYSAqIDE4MCAvIEZYX1BJICsgMC41KTsKKyAgICB9CisgICAgaWYoUm90YXRlIDwgMCkgeworICAgICAgICBSb3RhdGUgPSAtUm90YXRlOworICAgIH0gZWxzZSBpZihSb3RhdGUgPiAwKSB7CisgICAgICAgIFJvdGF0ZSA9IDM2MCAtIFJvdGF0ZTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MCUNQREZfVGV4dFBhZ2U6OkdldEJhc2VsaW5lUm90YXRlKENGWF9GbG9hdFJlY3QgcmVjdCAsIGludCYgUm90YXRlKQoreworICAgIGlmKG1fUGFyc2VPcHRpb25zLm1fYkdldENoYXJDb2RlT25seSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGludCBzdGFydCwgZW5kLCBjb3VudCwgbiA9IENvdW50Qm91bmRlZFNlZ21lbnRzKHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQsIHJlY3QuYm90dG9tLCBUUlVFKTsKKyAgICBpZihuIDwgMSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmKG4gPiAxKSB7CisgICAgICAgIEdldEJvdW5kZWRTZWdtZW50KG4gLSAxLCBzdGFydCwgY291bnQpOworICAgICAgICBlbmQgPSBzdGFydCArIGNvdW50IC0gMTsKKyAgICAgICAgR2V0Qm91bmRlZFNlZ21lbnQoMCwgc3RhcnQsIGNvdW50KTsKKyAgICB9IGVsc2UgeworICAgICAgICBHZXRCb3VuZGVkU2VnbWVudCgwLCBzdGFydCwgY291bnQpOworICAgICAgICBlbmQgPSBzdGFydCArIGNvdW50IC0gMTsKKyAgICB9CisgICAgcmV0dXJuIEdldEJhc2VsaW5lUm90YXRlKHN0YXJ0LCBlbmQsIFJvdGF0ZSk7Cit9CitGWF9CT09MCUNQREZfVGV4dFBhZ2U6OkdldEJhc2VsaW5lUm90YXRlKGludCByZWN0SW5kZXgsIGludCYgUm90YXRlKQoreworICAgIGlmKG1fUGFyc2VPcHRpb25zLm1fYkdldENoYXJDb2RlT25seSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmICghbV9Jc1BhcnNlcmVkIHx8IHJlY3RJbmRleCA8IDAgfHwgcmVjdEluZGV4ID4gbV9TZWxSZWN0cy5HZXRTaXplKCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDRlhfRmxvYXRSZWN0IHJlY3QgPSBtX1NlbFJlY3RzLkdldEF0KHJlY3RJbmRleCk7CisgICAgcmV0dXJuIEdldEJhc2VsaW5lUm90YXRlKHJlY3QgLCBSb3RhdGUpOworfQoraW50CUNQREZfVGV4dFBhZ2U6OkNvdW50Qm91bmRlZFNlZ21lbnRzKEZYX0ZMT0FUIGxlZnQsIEZYX0ZMT0FUIHRvcCwgRlhfRkxPQVQgcmlnaHQsIEZYX0ZMT0FUIGJvdHRvbSwgRlhfQk9PTCBiQ29udGFpbnMgKQoreworICAgIGlmKG1fUGFyc2VPcHRpb25zLm1fYkdldENoYXJDb2RlT25seSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIG1fU2VnbWVudC5SZW1vdmVBbGwoKTsKKyAgICBpZiAoIW1fSXNQYXJzZXJlZCkJeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIENGWF9GbG9hdFJlY3QgcmVjdChsZWZ0LCBib3R0b20sIHJpZ2h0LCB0b3ApOworICAgIHJlY3QuTm9ybWFsaXplKCk7CisgICAgaW50IG5Db3VudCA9IG1fY2hhckxpc3QuR2V0U2l6ZSgpOworICAgIGludCBwb3MgPSAwOworICAgIEZQREZfU0VHTUVOVAlzZWdtZW50OworICAgIHNlZ21lbnQubV9TdGFydCA9IDA7CisgICAgc2VnbWVudC5tX25Db3VudCA9IDA7CisgICAgRlhfQk9PTAkJc2VnbWVudFN0YXR1cyA9IDA7CisgICAgRlhfQk9PTAkJSXNDb250YWluUHJlQ2hhciA9IEZBTFNFOworICAgIHdoaWxlIChwb3MgPCBuQ291bnQpIHsKKyAgICAgICAgaWYocG9zID09IDQ5MykgeworICAgICAgICAgICAgaW50IGEgPSAwOworICAgICAgICB9CisgICAgICAgIFBBR0VDSEFSX0lORk8gY2hhcmluZm8gPSAqKFBBR0VDSEFSX0lORk8qKW1fY2hhckxpc3QuR2V0QXQocG9zKTsKKyAgICAgICAgaWYoYkNvbnRhaW5zICYmIHJlY3QuQ29udGFpbnMoY2hhcmluZm8ubV9DaGFyQm94KSkgeworICAgICAgICAgICAgaWYgKHNlZ21lbnRTdGF0dXMgPT0gMCB8fCBzZWdtZW50U3RhdHVzID09IDIpIHsKKyAgICAgICAgICAgICAgICBzZWdtZW50Lm1fU3RhcnQgPSBwb3M7CisgICAgICAgICAgICAgICAgc2VnbWVudC5tX25Db3VudCA9IDE7CisgICAgICAgICAgICAgICAgc2VnbWVudFN0YXR1cyA9IDE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNlZ21lbnRTdGF0dXMgPT0gMSkgeworICAgICAgICAgICAgICAgIHNlZ21lbnQubV9uQ291bnQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIElzQ29udGFpblByZUNoYXIgPSBUUlVFOworICAgICAgICB9IGVsc2UgaWYgKCFiQ29udGFpbnMgJiYgKElzUmVjdEludGVyc2VjdChyZWN0LCBjaGFyaW5mby5tX0NoYXJCb3gpIHx8IHJlY3QuQ29udGFpbnMoY2hhcmluZm8ubV9PcmlnaW5YLCBjaGFyaW5mby5tX09yaWdpblkpKSkgeworICAgICAgICAgICAgaWYgKHNlZ21lbnRTdGF0dXMgPT0gMCB8fCBzZWdtZW50U3RhdHVzID09IDIpIHsKKyAgICAgICAgICAgICAgICBzZWdtZW50Lm1fU3RhcnQgPSBwb3M7CisgICAgICAgICAgICAgICAgc2VnbWVudC5tX25Db3VudCA9IDE7CisgICAgICAgICAgICAgICAgc2VnbWVudFN0YXR1cyA9IDE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNlZ21lbnRTdGF0dXMgPT0gMSkgeworICAgICAgICAgICAgICAgIHNlZ21lbnQubV9uQ291bnQrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIElzQ29udGFpblByZUNoYXIgPSBUUlVFOworICAgICAgICB9IGVsc2UgaWYgKGNoYXJpbmZvLm1fVW5pY29kZSA9PSAzMikgeworICAgICAgICAgICAgaWYgKElzQ29udGFpblByZUNoYXIgPT0gVFJVRSkgeworICAgICAgICAgICAgICAgIGlmIChzZWdtZW50U3RhdHVzID09IDAgfHwgc2VnbWVudFN0YXR1cyA9PSAyKSB7CisgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQubV9TdGFydCA9IHBvczsKKyAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5tX25Db3VudCA9IDE7CisgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRTdGF0dXMgPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VnbWVudFN0YXR1cyA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQubV9uQ291bnQrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgSXNDb250YWluUHJlQ2hhciA9IEZBTFNFOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoc2VnbWVudFN0YXR1cyA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRTdGF0dXMgPSAyOworICAgICAgICAgICAgICAgICAgICBtX1NlZ21lbnQuQWRkKHNlZ21lbnQpOworICAgICAgICAgICAgICAgICAgICBzZWdtZW50Lm1fU3RhcnQgPSAwOworICAgICAgICAgICAgICAgICAgICBzZWdtZW50Lm1fbkNvdW50ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoc2VnbWVudFN0YXR1cyA9PSAxKSB7CisgICAgICAgICAgICAgICAgc2VnbWVudFN0YXR1cyA9IDI7CisgICAgICAgICAgICAgICAgbV9TZWdtZW50LkFkZChzZWdtZW50KTsKKyAgICAgICAgICAgICAgICBzZWdtZW50Lm1fU3RhcnQgPSAwOworICAgICAgICAgICAgICAgIHNlZ21lbnQubV9uQ291bnQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgSXNDb250YWluUHJlQ2hhciA9IEZBTFNFOworICAgICAgICB9CisgICAgICAgIHBvcysrOworICAgIH0KKyAgICBpZiAoc2VnbWVudFN0YXR1cyA9PSAxKSB7CisgICAgICAgIHNlZ21lbnRTdGF0dXMgPSAyOworICAgICAgICBtX1NlZ21lbnQuQWRkKHNlZ21lbnQpOworICAgICAgICBzZWdtZW50Lm1fU3RhcnQgPSAwOworICAgICAgICBzZWdtZW50Lm1fbkNvdW50ID0gMDsKKyAgICB9CisgICAgcmV0dXJuIG1fU2VnbWVudC5HZXRTaXplKCk7Cit9Cit2b2lkIENQREZfVGV4dFBhZ2U6OkdldEJvdW5kZWRTZWdtZW50KGludCBpbmRleCwgaW50JiBzdGFydCwgaW50JiBjb3VudCkgY29uc3QKK3sKKyAgICBpZihtX1BhcnNlT3B0aW9ucy5tX2JHZXRDaGFyQ29kZU9ubHkpIHsKKyAgICAgICAgcmV0dXJuIDsKKyAgICB9CisgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtX1NlZ21lbnQuR2V0U2l6ZSgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3RhcnQgPSBtX1NlZ21lbnQuR2V0QXQoaW5kZXgpLm1fU3RhcnQ7CisgICAgY291bnQgPSBtX1NlZ21lbnQuR2V0QXQoaW5kZXgpLm1fbkNvdW50OworfQoraW50IENQREZfVGV4dFBhZ2U6OkdldFdvcmRCcmVhayhpbnQgaW5kZXgsIGludCBkaXJlY3Rpb24pIGNvbnN0Cit7CisgICAgaWYobV9QYXJzZU9wdGlvbnMubV9iR2V0Q2hhckNvZGVPbmx5KSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKCFtX0lzUGFyc2VyZWQpCXsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAoZGlyZWN0aW9uICE9IEZQREZURVhUX0xFRlQgJiYgZGlyZWN0aW9uICE9IEZQREZURVhUX1JJR0hUKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtX2NoYXJMaXN0LkdldFNpemUoKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIFBBR0VDSEFSX0lORk8gY2hhcmluZm87CisgICAgY2hhcmluZm8gPSAqKFBBR0VDSEFSX0lORk8qKW1fY2hhckxpc3QuR2V0QXQoaW5kZXgpOworICAgIGlmIChjaGFyaW5mby5tX0luZGV4ID09IC0xIHx8IGNoYXJpbmZvLm1fRmxhZyA9PSBGUERGVEVYVF9DSEFSX0dFTkVSQVRFRCkJeworICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgfQorICAgIGlmICghSXNMZXR0ZXIoY2hhcmluZm8ubV9Vbmljb2RlKSkgeworICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgfQorICAgIGludCBicmVha1BvcyA9IGluZGV4OworICAgIGlmIChkaXJlY3Rpb24gPT0gRlBERlRFWFRfTEVGVCkgeworICAgICAgICB3aGlsZSAoLS1icmVha1BvcyA+IDApIHsKKyAgICAgICAgICAgIGNoYXJpbmZvID0gKihQQUdFQ0hBUl9JTkZPKiltX2NoYXJMaXN0LkdldEF0KGJyZWFrUG9zKTsKKyAgICAgICAgICAgIGlmICghSXNMZXR0ZXIoY2hhcmluZm8ubV9Vbmljb2RlKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBicmVha1BvczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYnJlYWtQb3M7CisgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT0gRlBERlRFWFRfUklHSFQpIHsKKyAgICAgICAgd2hpbGUgKCsrYnJlYWtQb3MgPCBtX2NoYXJMaXN0LkdldFNpemUoKSkgeworICAgICAgICAgICAgY2hhcmluZm8gPSAqKFBBR0VDSEFSX0lORk8qKW1fY2hhckxpc3QuR2V0QXQoYnJlYWtQb3MpOworICAgICAgICAgICAgaWYgKCFJc0xldHRlcihjaGFyaW5mby5tX1VuaWNvZGUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJyZWFrUG9zOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBicmVha1BvczsKKyAgICB9CisgICAgcmV0dXJuIGJyZWFrUG9zOworfQorRlhfSU5UMzIgQ1BERl9UZXh0UGFnZTo6RmluZFRleHRsaW5lRmxvd0RpcmVjdGlvbigpCit7CisgICAgaWYgKCFtX3BQYWdlKQl7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgY29uc3QgRlhfSU5UMzIgblBhZ2VXaWR0aCA9IChGWF9JTlQzMikoKENQREZfUGFnZSopbV9wUGFnZSktPkdldFBhZ2VXaWR0aCgpOworICAgIGNvbnN0IEZYX0lOVDMyIG5QYWdlSGVpZ2h0ID0gKEZYX0lOVDMyKSgoQ1BERl9QYWdlKiltX3BQYWdlKS0+R2V0UGFnZUhlaWdodCgpOworICAgIENGWF9CeXRlQXJyYXkgbkhvcml6b250YWxNYXNrOworICAgIGlmICghbkhvcml6b250YWxNYXNrLlNldFNpemUoblBhZ2VXaWR0aCkpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKwlGWF9CWVRFKiBwRGF0YUggPSBuSG9yaXpvbnRhbE1hc2suR2V0RGF0YSgpOworICAgIENGWF9CeXRlQXJyYXkgblZlcnRpY2FsTWFzazsKKyAgICBpZiAoIW5WZXJ0aWNhbE1hc2suU2V0U2l6ZShuUGFnZUhlaWdodCkpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKwlGWF9CWVRFKiBwRGF0YVYgPSBuVmVydGljYWxNYXNrLkdldERhdGEoKTsKKyAgICBGWF9JTlQzMiBpbmRleCA9IDA7CisgICAgRlhfRkxPQVQgZkxpbmVIZWlnaHQgPSAwLjBmOworICAgIENQREZfUGFnZU9iamVjdCogcFBhZ2VPYmogPSBOVUxMOworICAgIEZYX1BPU0lUSU9OCXBvcyA9IE5VTEw7CisgICAgcG9zID0gbV9wUGFnZS0+R2V0Rmlyc3RPYmplY3RQb3NpdGlvbigpOworICAgIGlmKCFwb3MpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICB3aGlsZShwb3MpIHsKKyAgICAgICAgcFBhZ2VPYmogPSBtX3BQYWdlLT5HZXROZXh0T2JqZWN0KHBvcyk7CisgICAgICAgIGlmKE5VTEwgPT0gcFBhZ2VPYmopIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmKFBERlBBR0VfVEVYVCAhPSBwUGFnZU9iai0+bV9UeXBlKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCQlGWF9JTlQzMiBtaW5IID0gKEZYX0lOVDMyKXBQYWdlT2JqLT5tX0xlZnQgPCAwID8gMCA6IChGWF9JTlQzMilwUGFnZU9iai0+bV9MZWZ0OworCQlGWF9JTlQzMiBtYXhIID0gKEZYX0lOVDMyKXBQYWdlT2JqLT5tX1JpZ2h0ID4gblBhZ2VXaWR0aCA/IG5QYWdlV2lkdGggOiAoRlhfSU5UMzIpcFBhZ2VPYmotPm1fUmlnaHQ7CisJCUZYX0lOVDMyIG1pblYgPSAoRlhfSU5UMzIpcFBhZ2VPYmotPm1fQm90dG9tIDwgMCA/IDAgOiAoRlhfSU5UMzIpcFBhZ2VPYmotPm1fQm90dG9tOworCQlGWF9JTlQzMiBtYXhWID0gKEZYX0lOVDMyKXBQYWdlT2JqLT5tX1RvcCA+IG5QYWdlSGVpZ2h0ID8gblBhZ2VIZWlnaHQgOiAoRlhfSU5UMzIpcFBhZ2VPYmotPm1fVG9wOworCQlpZiAobWluSCA+PSBtYXhIIHx8IG1pblYgPj0gbWF4Vil7CisJCQljb250aW51ZTsKKwkJfQorCisJCUZYU1lTX21lbXNldDgocERhdGFIICsgbWluSCwgMSwgbWF4SCAtIG1pbkgpOworCQlGWFNZU19tZW1zZXQ4KHBEYXRhViArIG1pblYsIDEsIG1heFYgLSBtaW5WKTsKKworCQlpZiAoZkxpbmVIZWlnaHQgPD0gMC4wZikgeworCQkJZkxpbmVIZWlnaHQgPSBwUGFnZU9iai0+bV9Ub3AgLSBwUGFnZU9iai0+bV9Cb3R0b207CisJCX0KKworCQlwUGFnZU9iaiA9IE5VTEw7CisgICAgfQorICAgIEZYX0lOVDMyIG5TdGFydEggPSAwOworICAgIEZYX0lOVDMyIG5FbmRIID0gMDsKKyAgICBGWF9GTE9BVCBuU3VtSCA9IDAuMGY7CisgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgblBhZ2VXaWR0aDsgaW5kZXgrKykKKyAgICAgICAgaWYoMSA9PSBuSG9yaXpvbnRhbE1hc2tbaW5kZXhdKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIG5TdGFydEggPSBpbmRleDsKKyAgICBmb3IgKGluZGV4ID0gblBhZ2VXaWR0aDsgaW5kZXggPiAwOyBpbmRleC0tKQorICAgICAgICBpZigxID09IG5Ib3Jpem9udGFsTWFza1tpbmRleCAtIDFdKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIG5FbmRIID0gaW5kZXg7CisgICAgZm9yIChpbmRleCA9IG5TdGFydEg7IGluZGV4IDwgbkVuZEg7IGluZGV4KyspIHsKKyAgICAgICAgblN1bUggKz0gbkhvcml6b250YWxNYXNrW2luZGV4XTsKKyAgICB9CisgICAgblN1bUggLz0gbkVuZEggLSBuU3RhcnRIOworICAgIEZYX0lOVDMyIG5TdGFydFYgPSAwOworICAgIEZYX0lOVDMyIG5FbmRWID0gMDsKKyAgICBGWF9GTE9BVCBuU3VtViA9IDAuMGY7CisgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgblBhZ2VIZWlnaHQ7IGluZGV4KyspCisgICAgICAgIGlmKDEgPT0gblZlcnRpY2FsTWFza1tpbmRleF0pIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgblN0YXJ0ViA9IGluZGV4OworICAgIGZvciAoaW5kZXggPSBuUGFnZUhlaWdodDsgaW5kZXggPiAwOyBpbmRleC0tKQorICAgICAgICBpZigxID09IG5WZXJ0aWNhbE1hc2tbaW5kZXggLSAxXSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICBuRW5kViA9IGluZGV4OworICAgIGZvciAoaW5kZXggPSBuU3RhcnRWOyBpbmRleCA8IG5FbmRWOyBpbmRleCsrKSB7CisgICAgICAgIG5TdW1WICs9IG5WZXJ0aWNhbE1hc2tbaW5kZXhdOworICAgIH0KKyAgICBuU3VtViAvPSBuRW5kViAtIG5TdGFydFY7CisgICAgaWYgKChuRW5kViAtIG5TdGFydFYpIDwgKEZYX0lOVDMyKSgyICogZkxpbmVIZWlnaHQpKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoKG5FbmRIIC0gblN0YXJ0SCkgPCAoRlhfSU5UMzIpKDIgKiBmTGluZUhlaWdodCkpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGlmIChuU3VtSCA+IDAuOGYpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChuU3VtSCAtIG5TdW1WID4gMC4wZikgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKG5TdW1WIC0gblN1bUggPiAwLjBmKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9Cit2b2lkIENQREZfVGV4dFBhZ2U6OlByb2Nlc3NPYmplY3QoKQoreworICAgIENQREZfUGFnZU9iamVjdCoJcFBhZ2VPYmogPSBOVUxMOworICAgIGlmICghbV9wUGFnZSkJeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX1BPU0lUSU9OCXBvczsKKyAgICBwb3MgPSBtX3BQYWdlLT5HZXRGaXJzdE9iamVjdFBvc2l0aW9uKCk7CisgICAgaWYgKCFwb3MpCXsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX1RleHRsaW5lRGlyID0gRmluZFRleHRsaW5lRmxvd0RpcmVjdGlvbigpOworICAgIGludCBuQ291bnQgPSAwOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgcFBhZ2VPYmogPSBtX3BQYWdlLT5HZXROZXh0T2JqZWN0KHBvcyk7CisgICAgICAgIGlmKHBQYWdlT2JqKSB7CisgICAgICAgICAgICBpZihwUGFnZU9iai0+bV9UeXBlID09IFBERlBBR0VfVEVYVCkgeworICAgICAgICAgICAgICAgIGlmIChuQ291bnQgPT0gMykgeworICAgICAgICAgICAgICAgICAgICBuQ291bnQgPSBuQ291bnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4OworICAgICAgICAgICAgICAgIFByb2Nlc3NUZXh0T2JqZWN0KChDUERGX1RleHRPYmplY3QqKXBQYWdlT2JqLCBtYXRyaXgsIHBvcyk7CisgICAgICAgICAgICAgICAgbkNvdW50Kys7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHBQYWdlT2JqLT5tX1R5cGUgPT0gUERGUEFHRV9GT1JNKSB7CisgICAgICAgICAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCBmb3JtTWF0cml4KDEsIDAsIDAsIDEsIDAsIDApOworICAgICAgICAgICAgICAgIFByb2Nlc3NGb3JtT2JqZWN0KChDUERGX0Zvcm1PYmplY3QqKXBQYWdlT2JqLCBmb3JtTWF0cml4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwUGFnZU9iaiA9IE5VTEw7CisgICAgfQorICAgIGludCBjb3VudCA9IG1fTGluZU9iai5HZXRTaXplKCk7CisgICAgZm9yKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgUHJvY2Vzc1RleHRPYmplY3QobV9MaW5lT2JqLkdldEF0KGkpKTsKKyAgICB9CisgICAgbV9MaW5lT2JqLlJlbW92ZUFsbCgpOworICAgIENsb3NlVGVtcExpbmUoKTsKK30KK3ZvaWQgQ1BERl9UZXh0UGFnZTo6UHJvY2Vzc0Zvcm1PYmplY3QoQ1BERl9Gb3JtT2JqZWN0KiBwRm9ybU9iaiwgQ0ZYX0FmZmluZU1hdHJpeCBmb3JtTWF0cml4KQoreworICAgIENQREZfUGFnZU9iamVjdCoJcFBhZ2VPYmogPSBOVUxMOworICAgIEZYX1BPU0lUSU9OCXBvczsKKyAgICBpZiAoIXBGb3JtT2JqKQl7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcG9zID0gcEZvcm1PYmotPm1fcEZvcm0tPkdldEZpcnN0T2JqZWN0UG9zaXRpb24oKTsKKyAgICBpZiAoIXBvcykJeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENGWF9BZmZpbmVNYXRyaXggY3VyRm9ybU1hdHJpeDsKKyAgICBjdXJGb3JtTWF0cml4LkNvcHkocEZvcm1PYmotPm1fRm9ybU1hdHJpeCk7CisgICAgY3VyRm9ybU1hdHJpeC5Db25jYXQoZm9ybU1hdHJpeCk7CisgICAgd2hpbGUgKHBvcykgeworICAgICAgICBwUGFnZU9iaiA9IHBGb3JtT2JqLT5tX3BGb3JtLT5HZXROZXh0T2JqZWN0KHBvcyk7CisgICAgICAgIGlmKHBQYWdlT2JqKSB7CisgICAgICAgICAgICBpZihwUGFnZU9iai0+bV9UeXBlID09IFBERlBBR0VfVEVYVCkgeworICAgICAgICAgICAgICAgIFByb2Nlc3NUZXh0T2JqZWN0KChDUERGX1RleHRPYmplY3QqKXBQYWdlT2JqLCBjdXJGb3JtTWF0cml4LCBwb3MpOworICAgICAgICAgICAgfSBlbHNlIGlmIChwUGFnZU9iai0+bV9UeXBlID09IFBERlBBR0VfRk9STSkgeworICAgICAgICAgICAgICAgIFByb2Nlc3NGb3JtT2JqZWN0KChDUERGX0Zvcm1PYmplY3QqKXBQYWdlT2JqLCBjdXJGb3JtTWF0cml4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwUGFnZU9iaiA9IE5VTEw7CisgICAgfQorfQoraW50IENQREZfVGV4dFBhZ2U6OkdldENoYXJXaWR0aChGWF9EV09SRCBjaGFyQ29kZSwgQ1BERl9Gb250KiBwRm9udCkgY29uc3QKK3sKKyAgICBpZihjaGFyQ29kZSA9PSAtMSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaW50IHcgPSBwRm9udC0+R2V0Q2hhcldpZHRoRihjaGFyQ29kZSk7CisgICAgaWYodyA9PSAwKSB7CisgICAgICAgIENGWF9CeXRlU3RyaW5nIHN0cjsKKyAgICAgICAgcEZvbnQtPkFwcGVuZENoYXIoc3RyLCBjaGFyQ29kZSk7CisgICAgICAgIHcgPSBwRm9udC0+R2V0U3RyaW5nV2lkdGgoc3RyLCAxKTsKKyAgICAgICAgaWYodyA9PSAwKSB7CisgICAgICAgICAgICBGWF9SRUNUIEJCb3g7CisgICAgICAgICAgICBwRm9udC0+R2V0Q2hhckJCb3goY2hhckNvZGUsIEJCb3gpOworICAgICAgICAgICAgdyA9IEJCb3gucmlnaHQgLSBCQm94LmxlZnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHc7Cit9Cit2b2lkIENQREZfVGV4dFBhZ2U6Ok9uUGllY2UoSUZYX0JpZGlDaGFyKiBwQmlkaSwgQ0ZYX1dpZGVTdHJpbmcmIHN0cikKK3sKKyAgICBGWF9JTlQzMiBzdGFydCwgY291bnQ7CisgICAgRlhfSU5UMzIgcmV0ID0gcEJpZGktPkdldEJpZGlJbmZvKHN0YXJ0LCBjb3VudCk7CisgICAgaWYocmV0ID09IDIpIHsKKyAgICAgICAgZm9yKGludCBpID0gc3RhcnQgKyBjb3VudCAtIDE7IGkgPj0gc3RhcnQ7IGktLSkgeworICAgICAgICAgICAgbV9UZXh0QnVmLkFwcGVuZENoYXIoc3RyLkdldEF0KGkpKTsKKyAgICAgICAgICAgIG1fY2hhckxpc3QuQWRkKCooUEFHRUNIQVJfSU5GTyopbV9UZW1wQ2hhckxpc3QuR2V0QXQoaSkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IGVuZCA9IHN0YXJ0ICsgY291bnQgOworICAgICAgICBmb3IoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CisgICAgICAgICAgICBtX1RleHRCdWYuQXBwZW5kQ2hhcihzdHIuR2V0QXQoaSkpOworICAgICAgICAgICAgbV9jaGFyTGlzdC5BZGQoKihQQUdFQ0hBUl9JTkZPKiltX1RlbXBDaGFyTGlzdC5HZXRBdChpKSk7CisgICAgICAgIH0KKyAgICB9Cit9Cit2b2lkIENQREZfVGV4dFBhZ2U6OkFkZENoYXJJbmZvQnlMUkRpcmVjdGlvbihDRlhfV2lkZVN0cmluZyYgc3RyLCBpbnQgaSkKK3sKKyAgICBQQUdFQ0hBUl9JTkZPIEluZm8gPSAqKFBBR0VDSEFSX0lORk8qKW1fVGVtcENoYXJMaXN0LkdldEF0KGkpOworICAgIEZYX1dDSEFSIHdDaGFyID0gc3RyLkdldEF0KGkpOworI2lmZGVmIEZPWElUX0NIUk9NRV9CVUlMRAorICAgIGlmKCFJc0NvbnRyb2xDaGFyKCZJbmZvKSkgeworI2Vsc2UKKyAgICBpZih3Q2hhciAhPSAweGZmZmUpIHsKKyNlbmRpZgorICAgICAgICBJbmZvLm1fSW5kZXggPSBtX1RleHRCdWYuR2V0TGVuZ3RoKCk7CisgICAgICAgIGlmICh3Q2hhciA+PSAweEZCMDAgJiYgd0NoYXIgPD0gMHhGQjA2KSB7CisgICAgICAgICAgICBGWF9MUFdTVFIgcERzdCA9IE5VTEw7CisgICAgICAgICAgICBGWF9TVFJTSVpFIG5Db3VudCA9IEZYX1VuaWNvZGVfR2V0Tm9ybWFsaXphdGlvbih3Q2hhciwgcERzdCk7CisgICAgICAgICAgICBpZiAobkNvdW50ID49IDEpIHsKKyAgICAgICAgICAgICAgICBwRHN0ID0gRlhfQWxsb2MoRlhfV0NIQVIsIG5Db3VudCk7CisgICAgICAgICAgICAgICAgaWYgKCFwRHN0KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRlhfVW5pY29kZV9HZXROb3JtYWxpemF0aW9uKHdDaGFyLCBwRHN0KTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBuSW5kZXggPSAwOyBuSW5kZXggPCBuQ291bnQ7IG5JbmRleCsrKSB7CisgICAgICAgICAgICAgICAgICAgIFBBR0VDSEFSX0lORk8gSW5mbzIgPSBJbmZvOworICAgICAgICAgICAgICAgICAgICBJbmZvMi5tX1VuaWNvZGUgPSBwRHN0W25JbmRleF07CisgICAgICAgICAgICAgICAgICAgIEluZm8yLm1fRmxhZyA9IEZQREZURVhUX0NIQVJfUElFQ0U7CisgICAgICAgICAgICAgICAgICAgIG1fVGV4dEJ1Zi5BcHBlbmRDaGFyKEluZm8yLm1fVW5pY29kZSk7CisgICAgICAgICAgICAgICAgICAgIGlmKCAhbV9QYXJzZU9wdGlvbnMubV9iR2V0Q2hhckNvZGVPbmx5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2NoYXJMaXN0LkFkZChJbmZvMik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRlhfRnJlZShwRHN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9UZXh0QnVmLkFwcGVuZENoYXIod0NoYXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIEluZm8ubV9JbmRleCA9IC0xOworICAgIH0KKyAgICBpZiggIW1fUGFyc2VPcHRpb25zLm1fYkdldENoYXJDb2RlT25seSkgeworICAgICAgICBtX2NoYXJMaXN0LkFkZChJbmZvKTsKKyAgICB9Cit9Cit2b2lkIENQREZfVGV4dFBhZ2U6OkFkZENoYXJJbmZvQnlSTERpcmVjdGlvbihDRlhfV2lkZVN0cmluZyYgc3RyLCBpbnQgaSkKK3sKKyAgICBQQUdFQ0hBUl9JTkZPIEluZm8gPSAqKFBBR0VDSEFSX0lORk8qKW1fVGVtcENoYXJMaXN0LkdldEF0KGkpOworI2lmZGVmIEZPWElUX0NIUk9NRV9CVUlMRAorICAgIGlmKCFJc0NvbnRyb2xDaGFyKCZJbmZvKSkgeworI2Vsc2UKKyAgICBpZihzdHIuR2V0QXQoaSkgIT0gMHhmZmZlKSB7CisjZW5kaWYKKyAgICAgICAgSW5mby5tX0luZGV4ID0gbV9UZXh0QnVmLkdldExlbmd0aCgpOworICAgICAgICBGWF9XQ0hBUiB3Q2hhciA9IEZYX0dldE1pcnJvckNoYXIoc3RyLkdldEF0KGkpLCBUUlVFLCBGQUxTRSk7CisgICAgICAgIEZYX0xQV1NUUiBwRHN0ID0gTlVMTDsKKyAgICAgICAgRlhfU1RSU0laRSBuQ291bnQgPSBGWF9Vbmljb2RlX0dldE5vcm1hbGl6YXRpb24od0NoYXIsIHBEc3QpOworICAgICAgICBpZiAobkNvdW50ID49IDEpIHsKKyAgICAgICAgICAgIHBEc3QgPSBGWF9BbGxvYyhGWF9XQ0hBUiwgbkNvdW50KTsKKyAgICAgICAgICAgIGlmICghcERzdCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZYX1VuaWNvZGVfR2V0Tm9ybWFsaXphdGlvbih3Q2hhciwgcERzdCk7CisgICAgICAgICAgICBmb3IgKGludCBuSW5kZXggPSAwOyBuSW5kZXggPCBuQ291bnQ7IG5JbmRleCsrKSB7CisgICAgICAgICAgICAgICAgUEFHRUNIQVJfSU5GTyBJbmZvMiA9IEluZm87CisgICAgICAgICAgICAgICAgSW5mbzIubV9Vbmljb2RlID0gcERzdFtuSW5kZXhdOworICAgICAgICAgICAgICAgIEluZm8yLm1fRmxhZyA9IEZQREZURVhUX0NIQVJfUElFQ0U7CisgICAgICAgICAgICAgICAgbV9UZXh0QnVmLkFwcGVuZENoYXIoSW5mbzIubV9Vbmljb2RlKTsKKyAgICAgICAgICAgICAgICBpZiggIW1fUGFyc2VPcHRpb25zLm1fYkdldENoYXJDb2RlT25seSkgeworICAgICAgICAgICAgICAgICAgICBtX2NoYXJMaXN0LkFkZChJbmZvMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfRnJlZShwRHN0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEluZm8ubV9Vbmljb2RlID0gd0NoYXI7CisgICAgICAgIH0KKyAgICAgICAgbV9UZXh0QnVmLkFwcGVuZENoYXIoSW5mby5tX1VuaWNvZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIEluZm8ubV9JbmRleCA9IC0xOworICAgIH0KKyAgICBpZiggIW1fUGFyc2VPcHRpb25zLm1fYkdldENoYXJDb2RlT25seSkgeworICAgICAgICBtX2NoYXJMaXN0LkFkZChJbmZvKTsKKyAgICB9Cit9Cit2b2lkIENQREZfVGV4dFBhZ2U6OkNsb3NlVGVtcExpbmUoKQoreworICAgIGludCBjb3VudDEgPSBtX1RlbXBDaGFyTGlzdC5HZXRTaXplKCk7CisgICAgaWYgKGNvdW50MSA8PSAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgSUZYX0JpZGlDaGFyKiBCaWRpQ2hhciA9IElGWF9CaWRpQ2hhcjo6Q3JlYXRlKCk7CisgICAgQ0ZYX1dpZGVTdHJpbmcgc3RyID0gbV9UZW1wVGV4dEJ1Zi5HZXRXaWRlU3RyaW5nKCk7CisgICAgQ0ZYX1dvcmRBcnJheSBvcmRlcjsKKyAgICBGWF9CT09MIGJSMkwgPSBGQUxTRTsKKyAgICBGWF9JTlQzMiBzdGFydCA9IDAsIGNvdW50ID0gMCwgaSA9IDA7CisgICAgaW50IG5SMkwgPSAwLCBuTDJSID0gMDsKKyAgICBGWF9CT09MIGJQcmV2U3BhY2UgPSBGQUxTRTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc3RyLkdldExlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgaWYoc3RyLkdldEF0KGkpID09IDMyKSB7CisgICAgICAgICAgICBpZihiUHJldlNwYWNlKSB7CisgICAgICAgICAgICAgICAgbV9UZW1wVGV4dEJ1Zi5EZWxldGUoaSwgMSk7CisgICAgICAgICAgICAgICAgbV9UZW1wQ2hhckxpc3QuRGVsZXRlKGkpOworICAgICAgICAgICAgICAgIHN0ci5EZWxldGUoaSk7CisgICAgICAgICAgICAgICAgY291bnQxIC0tOworICAgICAgICAgICAgICAgIGktLTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJQcmV2U3BhY2UgPSBUUlVFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYlByZXZTcGFjZSA9IEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmKEJpZGlDaGFyICYmIEJpZGlDaGFyLT5BcHBlbmRDaGFyKHN0ci5HZXRBdChpKSkpIHsKKyAgICAgICAgICAgIEZYX0lOVDMyIHJldCA9IEJpZGlDaGFyLT5HZXRCaWRpSW5mbyhzdGFydCwgY291bnQpOworICAgICAgICAgICAgb3JkZXIuQWRkKHN0YXJ0KTsKKyAgICAgICAgICAgIG9yZGVyLkFkZChjb3VudCk7CisgICAgICAgICAgICBvcmRlci5BZGQocmV0KTsKKyAgICAgICAgICAgIGlmKCFiUjJMKSB7CisgICAgICAgICAgICAgICAgaWYocmV0ID09IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgblIyTCsrOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0ID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgbkwyUisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZihCaWRpQ2hhciAmJiBCaWRpQ2hhci0+RW5kQ2hhcigpKSB7CisgICAgICAgIEZYX0lOVDMyIHJldCA9IEJpZGlDaGFyLT5HZXRCaWRpSW5mbyhzdGFydCwgY291bnQpOworICAgICAgICBvcmRlci5BZGQoc3RhcnQpOworICAgICAgICBvcmRlci5BZGQoY291bnQpOworICAgICAgICBvcmRlci5BZGQocmV0KTsKKyAgICAgICAgaWYoIWJSMkwpIHsKKyAgICAgICAgICAgIGlmKHJldCA9PSAyKSB7CisgICAgICAgICAgICAgICAgblIyTCsrOworICAgICAgICAgICAgfSBlbHNlIGlmKHJldCA9PSAxKSB7CisgICAgICAgICAgICAgICAgbkwyUisrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmKG5SMkwgPiAwICYmIG5SMkwgPj0gbkwyUikgeworICAgICAgICBiUjJMID0gVFJVRTsKKyAgICB9CisgICAgaWYodGhpcy0+bV9wYXJzZXJmbGFnID09IEZQREZURVhUX1JMVEIgfHwgYlIyTCkgeworICAgICAgICBpbnQgY291bnQgPSBvcmRlci5HZXRTaXplKCk7CisgICAgICAgIGZvcihpbnQgaiA9IGNvdW50IC0gMTsgaiA+IDA7IGogLT0gMykgeworICAgICAgICAgICAgaW50IHJldCA9IG9yZGVyLkdldEF0KGopOworICAgICAgICAgICAgaW50IHN0YXJ0ID0gb3JkZXIuR2V0QXQoaiAtIDIpOworICAgICAgICAgICAgaW50IGNvdW50MSA9IG9yZGVyLkdldEF0KGogLSAxKTsKKyAgICAgICAgICAgIGlmKHJldCA9PSAyIHx8IHJldCA9PSAwKSB7CisgICAgICAgICAgICAgICAgZm9yKGludCBpID0gc3RhcnQgKyBjb3VudDEgLSAxOyBpID49IHN0YXJ0OyBpLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgQWRkQ2hhckluZm9CeVJMRGlyZWN0aW9uKHN0ciwgaSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpID0gajsKKyAgICAgICAgICAgICAgICBGWF9CT09MIGJTeW1ib2wgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICB3aGlsZShpID4gMCAmJiBvcmRlci5HZXRBdChpKSAhPSAyKSB7CisgICAgICAgICAgICAgICAgICAgIGJTeW1ib2wgPSAhb3JkZXIuR2V0QXQoaSk7CisgICAgICAgICAgICAgICAgICAgIGkgLT0gMzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW50IGVuZCA9IHN0YXJ0ICsgY291bnQxIDsKKyAgICAgICAgICAgICAgICBpbnQgbiA9IDA7CisgICAgICAgICAgICAgICAgaWYoYlN5bWJvbCkgeworICAgICAgICAgICAgICAgICAgICBuID0gaSArIDY7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbiA9IGkgKyAzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihuID49IGopIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGludCBtID0gc3RhcnQ7IG0gPCBlbmQ7IG0rKykgeworICAgICAgICAgICAgICAgICAgICAgICAgQWRkQ2hhckluZm9CeUxSRGlyZWN0aW9uKHN0ciwgbSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpID0gajsKKyAgICAgICAgICAgICAgICAgICAgaiA9IG47CisgICAgICAgICAgICAgICAgICAgIGZvcig7IG4gPD0gaTsgbiArPSAzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0ID0gb3JkZXIuR2V0QXQobik7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnQgPSBvcmRlci5HZXRBdChuIC0gMik7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQxID0gb3JkZXIuR2V0QXQobiAtIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVuZCA9IHN0YXJ0ICsgY291bnQxIDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgbSA9IHN0YXJ0OyBtIDwgZW5kOyBtKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRDaGFySW5mb0J5TFJEaXJlY3Rpb24oc3RyLCBtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGludCBjb3VudCA9IG9yZGVyLkdldFNpemUoKTsKKyAgICAgICAgRlhfQk9PTCBiTDJSID0gRkFMU0U7CisgICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBjb3VudDsgaiArPSAzKSB7CisgICAgICAgICAgICBpbnQgcmV0ID0gb3JkZXIuR2V0QXQoaiArIDIpOworICAgICAgICAgICAgaW50IHN0YXJ0ID0gb3JkZXIuR2V0QXQoaik7CisgICAgICAgICAgICBpbnQgY291bnQxID0gb3JkZXIuR2V0QXQoaiArIDEpOworICAgICAgICAgICAgaWYocmV0ID09IDIgfHwgKGogPT0gMCAmJiByZXQgPT0gMCAmJiAhYkwyUikpIHsKKyAgICAgICAgICAgICAgICBpbnQgaSA9IGogKyAzOworICAgICAgICAgICAgICAgIHdoaWxlKGJSMkwgJiYgaSA8IGNvdW50KSB7CisgICAgICAgICAgICAgICAgICAgIGlmKG9yZGVyLkdldEF0KGkgKyAyKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihpID09IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgaiA9IC0zOworICAgICAgICAgICAgICAgICAgICBiTDJSID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGludCBlbmQgPSBtX1RlbXBDaGFyTGlzdC5HZXRTaXplKCkgLSAxOworICAgICAgICAgICAgICAgIGlmKGkgPCBjb3VudCkgeworICAgICAgICAgICAgICAgICAgICBlbmQgPSBvcmRlci5HZXRBdChpKSAtIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGogPSBpIC0gMzsKKyAgICAgICAgICAgICAgICBmb3IoaW50IG4gPSBlbmQ7IG4gPj0gc3RhcnQ7IG4tLSkgeworICAgICAgICAgICAgICAgICAgICBBZGRDaGFySW5mb0J5UkxEaXJlY3Rpb24oc3RyLCBuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGludCBlbmQgPSBzdGFydCArIGNvdW50MSA7CisgICAgICAgICAgICAgICAgZm9yKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBBZGRDaGFySW5mb0J5TFJEaXJlY3Rpb24oc3RyLCBpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaW50IG50ZXh0ID0gbV9UZXh0QnVmLkdldFNpemUoKTsKKyAgICBudGV4dCA9IG1fY2hhckxpc3QuR2V0U2l6ZSgpOworICAgIG9yZGVyLlJlbW92ZUFsbCgpOworICAgIG1fVGVtcENoYXJMaXN0LlJlbW92ZUFsbCgpOworICAgIG1fVGVtcFRleHRCdWYuRGVsZXRlKDAsIG1fVGVtcFRleHRCdWYuR2V0TGVuZ3RoKCkpOworICAgIEJpZGlDaGFyLT5SZWxlYXNlKCk7Cit9Cit2b2lkIENQREZfVGV4dFBhZ2U6OlByb2Nlc3NUZXh0T2JqZWN0KENQREZfVGV4dE9iamVjdCoJcFRleHRPYmosIENGWF9BZmZpbmVNYXRyaXggZm9ybU1hdHJpeCwgRlhfUE9TSVRJT04gT2JqUG9zKQoreworICAgIENGWF9GbG9hdFJlY3QgcmUocFRleHRPYmotPm1fTGVmdCwgcFRleHRPYmotPm1fQm90dG9tLCBwVGV4dE9iai0+bV9SaWdodCwgcFRleHRPYmotPm1fVG9wKTsKKyAgICBpZihGWFNZU19mYWJzKHBUZXh0T2JqLT5tX1JpZ2h0IC0gcFRleHRPYmotPm1fTGVmdCkgPCAwLjAxZiApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgY291bnQgPSBtX0xpbmVPYmouR2V0U2l6ZSgpOworICAgIFBERlRFWFRfT2JqIE9iajsKKyAgICBPYmoubV9wVGV4dE9iaiA9IHBUZXh0T2JqOworICAgIE9iai5tX2Zvcm1NYXRyaXggPSBmb3JtTWF0cml4OworICAgIGlmKGNvdW50ID09IDApIHsKKyAgICAgICAgbV9MaW5lT2JqLkFkZChPYmopOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChJc1NhbWVBc1ByZVRleHRPYmplY3QocFRleHRPYmosIE9ialBvcykpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBQREZURVhUX09iaiBwcmV2X09iaiA9IG1fTGluZU9iai5HZXRBdChjb3VudCAtIDEpOworICAgIENQREZfVGV4dE9iamVjdEl0ZW0gaXRlbTsKKyAgICBpbnQgbkl0ZW0gPSBwcmV2X09iai5tX3BUZXh0T2JqLT5Db3VudEl0ZW1zKCk7CisgICAgcHJldl9PYmoubV9wVGV4dE9iai0+R2V0SXRlbUluZm8obkl0ZW0gLSAxLCAmaXRlbSk7CisgICAgRlhfRkxPQVQgcHJldl93aWR0aCA9IEdldENoYXJXaWR0aChpdGVtLm1fQ2hhckNvZGUsIHByZXZfT2JqLm1fcFRleHRPYmotPkdldEZvbnQoKSkgKiBwcmV2X09iai5tX3BUZXh0T2JqLT5HZXRGb250U2l6ZSgpIC8gMTAwMDsKKyAgICBDRlhfQWZmaW5lTWF0cml4IHByZXZfbWF0cml4OworICAgIHByZXZfT2JqLm1fcFRleHRPYmotPkdldFRleHRNYXRyaXgoJnByZXZfbWF0cml4KTsKKyAgICBwcmV2X3dpZHRoID0gRlhTWVNfZmFicyhwcmV2X3dpZHRoKTsKKyAgICBwcmV2X21hdHJpeC5Db25jYXQocHJldl9PYmoubV9mb3JtTWF0cml4KTsKKyAgICBwcmV2X3dpZHRoID0gcHJldl9tYXRyaXguVHJhbnNmb3JtRGlzdGFuY2UocHJldl93aWR0aCk7CisgICAgcFRleHRPYmotPkdldEl0ZW1JbmZvKDAsICZpdGVtKTsKKyAgICBGWF9GTE9BVCB0aGlzX3dpZHRoID0gR2V0Q2hhcldpZHRoKGl0ZW0ubV9DaGFyQ29kZSwgcFRleHRPYmotPkdldEZvbnQoKSkgKiBwVGV4dE9iai0+R2V0Rm9udFNpemUoKSAvIDEwMDA7CisgICAgdGhpc193aWR0aCA9IEZYU1lTX2ZhYnModGhpc193aWR0aCk7CisgICAgQ0ZYX0FmZmluZU1hdHJpeCB0aGlzX21hdHJpeDsKKyAgICBwVGV4dE9iai0+R2V0VGV4dE1hdHJpeCgmdGhpc19tYXRyaXgpOworICAgIHRoaXNfd2lkdGggPSBGWFNZU19mYWJzKHRoaXNfd2lkdGgpOworICAgIHRoaXNfbWF0cml4LkNvbmNhdChmb3JtTWF0cml4KTsKKyAgICB0aGlzX3dpZHRoID0gdGhpc19tYXRyaXguVHJhbnNmb3JtRGlzdGFuY2UodGhpc193aWR0aCk7CisgICAgRlhfRkxPQVQgdGhyZXNob2xkID0gcHJldl93aWR0aCA+IHRoaXNfd2lkdGggPyBwcmV2X3dpZHRoIC8gNCA6IHRoaXNfd2lkdGggLyA0OworICAgIEZYX0ZMT0FUIHByZXZfeCA9IHByZXZfT2JqLm1fcFRleHRPYmotPkdldFBvc1goKSwgcHJldl95ID0gcHJldl9PYmoubV9wVGV4dE9iai0+R2V0UG9zWSgpOworICAgIHByZXZfT2JqLm1fZm9ybU1hdHJpeC5UcmFuc2Zvcm0ocHJldl94LCBwcmV2X3kpOworICAgIG1fRGlzcGxheU1hdHJpeC5UcmFuc2Zvcm0ocHJldl94LCBwcmV2X3kpOworICAgIEZYX0ZMT0FUIHRoaXNfeCA9IHBUZXh0T2JqLT5HZXRQb3NYKCksIHRoaXNfeSA9IHBUZXh0T2JqLT5HZXRQb3NZKCk7CisgICAgZm9ybU1hdHJpeC5UcmFuc2Zvcm0odGhpc194LCB0aGlzX3kpOworICAgIG1fRGlzcGxheU1hdHJpeC5UcmFuc2Zvcm0odGhpc194LCB0aGlzX3kpOworICAgIGlmIChGWFNZU19mYWJzKHRoaXNfeSAtIHByZXZfeSkgPiB0aHJlc2hvbGQgKiAyKSB7CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgICAgICBQcm9jZXNzVGV4dE9iamVjdChtX0xpbmVPYmouR2V0QXQoaSkpOworICAgICAgICB9CisgICAgICAgIG1fTGluZU9iai5SZW1vdmVBbGwoKTsKKyAgICAgICAgbV9MaW5lT2JqLkFkZChPYmopOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludCBpID0gMDsKKyAgICBpZihtX1BhcnNlT3B0aW9ucy5tX2JOb3JtYWxpemVPYmpzKSB7CisgICAgICAgIGZvcihpID0gY291bnQgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgUERGVEVYVF9PYmogcHJldl9PYmogPSBtX0xpbmVPYmouR2V0QXQoaSk7CisgICAgICAgICAgICBDRlhfQWZmaW5lTWF0cml4IHByZXZfbWF0cml4OworICAgICAgICAgICAgcHJldl9PYmoubV9wVGV4dE9iai0+R2V0VGV4dE1hdHJpeCgmcHJldl9tYXRyaXgpOworICAgICAgICAgICAgRlhfRkxPQVQgUHJldl94ID0gcHJldl9PYmoubV9wVGV4dE9iai0+R2V0UG9zWCgpLCBQcmV2X3kgPSBwcmV2X09iai5tX3BUZXh0T2JqLT5HZXRQb3NZKCk7CisgICAgICAgICAgICBwcmV2X09iai5tX2Zvcm1NYXRyaXguVHJhbnNmb3JtKFByZXZfeCwgUHJldl95KTsKKyAgICAgICAgICAgIG1fRGlzcGxheU1hdHJpeC5UcmFuc2Zvcm0oUHJldl94LCBQcmV2X3kpOworICAgICAgICAgICAgaWYodGhpc194ID49IFByZXZfeCkgeworICAgICAgICAgICAgICAgIGlmKGkgPT0gY291bnQgLSAxKSB7CisgICAgICAgICAgICAgICAgICAgIG1fTGluZU9iai5BZGQoT2JqKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX0xpbmVPYmouSW5zZXJ0QXQoaSArIDEsIE9iaik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmKGkgPCAwKSB7CisgICAgICAgICAgICBtX0xpbmVPYmouSW5zZXJ0QXQoMCwgT2JqKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG1fTGluZU9iai5BZGQoT2JqKTsKKyAgICB9Cit9CitGWF9JTlQzMiBDUERGX1RleHRQYWdlOjpQcmVNYXJrZWRDb250ZW50KFBERlRFWFRfT2JqIE9iaikKK3sKKyAgICBDUERGX1RleHRPYmplY3QqIHBUZXh0T2JqID0gT2JqLm1fcFRleHRPYmo7CisgICAgQ1BERl9Db250ZW50TWFya0RhdGEqIHBNYXJrRGF0YSA9IChDUERGX0NvbnRlbnRNYXJrRGF0YSopcFRleHRPYmotPm1fQ29udGVudE1hcmsuR2V0T2JqZWN0KCk7CisgICAgaWYoIXBNYXJrRGF0YSkgeworICAgICAgICByZXR1cm4gRlBERlRFWFRfTUNfUEFTUzsKKyAgICB9CisgICAgaW50IG5Db250ZW50TWFyayA9IHBNYXJrRGF0YS0+Q291bnRJdGVtcygpOworICAgIGlmIChuQ29udGVudE1hcmsgPCAxKSB7CisgICAgICAgIHJldHVybiBGUERGVEVYVF9NQ19QQVNTOworICAgIH0KKyAgICBDRlhfV2lkZVN0cmluZyBhY3RUZXh0OworICAgIEZYX0JPT0wgYkV4aXN0ID0gRkFMU0U7CisgICAgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IE5VTEw7CisgICAgaW50IG4gPSAwOworICAgIGZvciAobiA9IDA7IG4gPCBuQ29udGVudE1hcms7IG4rKykgeworICAgICAgICBDUERGX0NvbnRlbnRNYXJrSXRlbSYgaXRlbSA9IHBNYXJrRGF0YS0+R2V0SXRlbShuKTsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgdGFnU3RyID0gKENGWF9CeXRlU3RyaW5nKWl0ZW0uR2V0TmFtZSgpOworICAgICAgICBwRGljdCA9IChDUERGX0RpY3Rpb25hcnkqKWl0ZW0uR2V0UGFyYW0oKTsKKyAgICAgICAgQ1BERl9TdHJpbmcqIHRlbXAgPSAoQ1BERl9TdHJpbmcqKXBEaWN0LT5HZXRFbGVtZW50KEZYX0JTVFJDKCJBY3R1YWxUZXh0IikpOworICAgICAgICBpZiAodGVtcCkgeworICAgICAgICAgICAgYkV4aXN0ID0gVFJVRTsKKyAgICAgICAgICAgIGFjdFRleHQgPSB0ZW1wLT5HZXRVbmljb2RlVGV4dCgpOworICAgICAgICB9CisgICAgfQorICAgIGlmICghYkV4aXN0KSB7CisgICAgICAgIHJldHVybiBGUERGVEVYVF9NQ19QQVNTOworICAgIH0KKyAgICBpZiAobV9wUHJlVGV4dE9iaikgeworICAgICAgICBpZiAoQ1BERl9Db250ZW50TWFya0RhdGEqIHBQcmVNYXJrRGF0YSA9IChDUERGX0NvbnRlbnRNYXJrRGF0YSopbV9wUHJlVGV4dE9iai0+bV9Db250ZW50TWFyay5HZXRPYmplY3QoKSkgeworICAgICAgICAgICAgaWYgKHBQcmVNYXJrRGF0YS0+Q291bnRJdGVtcygpID09IG4pIHsKKyAgICAgICAgICAgICAgICBDUERGX0NvbnRlbnRNYXJrSXRlbSYgaXRlbSA9IHBQcmVNYXJrRGF0YS0+R2V0SXRlbShuIC0gMSk7CisgICAgICAgICAgICAgICAgaWYgKHBEaWN0ID09IGl0ZW0uR2V0UGFyYW0oKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRlBERlRFWFRfTUNfRE9ORTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQ1BERl9Gb250KglwRm9udCA9IHBUZXh0T2JqLT5HZXRGb250KCk7CisgICAgRlhfU1RSU0laRSBuSXRlbXMgPSBhY3RUZXh0LkdldExlbmd0aCgpOworICAgIGlmIChuSXRlbXMgPCAxKSB7CisgICAgICAgIHJldHVybiBGUERGVEVYVF9NQ19QQVNTOworICAgIH0KKyAgICBiRXhpc3QgPSBGQUxTRTsKKyAgICBmb3IgKEZYX1NUUlNJWkUgaSA9IDA7IGkgPCBuSXRlbXM7IGkrKykgeworICAgICAgICBGWF9XQ0hBUiB3Q2hhciA9IGFjdFRleHQuR2V0QXQoaSk7CisgICAgICAgIGlmICgtMSA9PSBwRm9udC0+Q2hhckNvZGVGcm9tVW5pY29kZSh3Q2hhcikpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYkV4aXN0ID0gVFJVRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmICghYkV4aXN0KSB7CisgICAgICAgIHJldHVybiBGUERGVEVYVF9NQ19QQVNTOworICAgIH0KKyAgICBiRXhpc3QgPSBGQUxTRTsKKyAgICBmb3IgKEZYX1NUUlNJWkUgaiA9IDA7IGogPCBuSXRlbXM7IGorKykgeworICAgICAgICBGWF9XQ0hBUiB3Q2hhciA9IGFjdFRleHQuR2V0QXQoaik7CisgICAgICAgIGlmICgod0NoYXIgPiAweDgwICYmIHdDaGFyIDwgMHhGRkZEKSB8fCAod0NoYXIgPD0gMHg4MCAmJiBpc3ByaW50KHdDaGFyKSkpIHsKKyAgICAgICAgICAgIGJFeGlzdCA9IFRSVUU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWJFeGlzdCkgeworICAgICAgICByZXR1cm4gRlBERlRFWFRfTUNfRE9ORTsKKyAgICB9CisgICAgcmV0dXJuIEZQREZURVhUX01DX0RFTEFZOworfQordm9pZCBDUERGX1RleHRQYWdlOjpQcm9jZXNzTWFya2VkQ29udGVudChQREZURVhUX09iaiBPYmopCit7CisgICAgQ1BERl9UZXh0T2JqZWN0KiBwVGV4dE9iaiA9IE9iai5tX3BUZXh0T2JqOworICAgIENQREZfQ29udGVudE1hcmtEYXRhKiBwTWFya0RhdGEgPSAoQ1BERl9Db250ZW50TWFya0RhdGEqKXBUZXh0T2JqLT5tX0NvbnRlbnRNYXJrLkdldE9iamVjdCgpOworICAgIGlmKCFwTWFya0RhdGEpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgbkNvbnRlbnRNYXJrID0gcE1hcmtEYXRhLT5Db3VudEl0ZW1zKCk7CisgICAgaWYgKG5Db250ZW50TWFyayA8IDEpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDRlhfV2lkZVN0cmluZyBhY3RUZXh0OworICAgIENQREZfRGljdGlvbmFyeSogcERpY3QgPSBOVUxMOworICAgIGludCBuID0gMDsKKyAgICBmb3IgKG4gPSAwOyBuIDwgbkNvbnRlbnRNYXJrOyBuKyspIHsKKyAgICAgICAgQ1BERl9Db250ZW50TWFya0l0ZW0mIGl0ZW0gPSBwTWFya0RhdGEtPkdldEl0ZW0obik7CisgICAgICAgIENGWF9CeXRlU3RyaW5nIHRhZ1N0ciA9IChDRlhfQnl0ZVN0cmluZylpdGVtLkdldE5hbWUoKTsKKyAgICAgICAgcERpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KilpdGVtLkdldFBhcmFtKCk7CisgICAgICAgIENQREZfU3RyaW5nKiB0ZW1wID0gKENQREZfU3RyaW5nKilwRGljdC0+R2V0RWxlbWVudChGWF9CU1RSQygiQWN0dWFsVGV4dCIpKTsKKyAgICAgICAgaWYgKHRlbXApIHsKKyAgICAgICAgICAgIGFjdFRleHQgPSB0ZW1wLT5HZXRVbmljb2RlVGV4dCgpOworICAgICAgICB9CisgICAgfQorICAgIEZYX1NUUlNJWkUgbkl0ZW1zID0gYWN0VGV4dC5HZXRMZW5ndGgoKTsKKyAgICBpZiAobkl0ZW1zIDwgMSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfRm9udCoJcEZvbnQgPSBwVGV4dE9iai0+R2V0Rm9udCgpOworICAgIENGWF9BZmZpbmVNYXRyaXggZm9ybU1hdHJpeCA9IE9iai5tX2Zvcm1NYXRyaXg7CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXg7CisgICAgcFRleHRPYmotPkdldFRleHRNYXRyaXgoJm1hdHJpeCk7CisgICAgbWF0cml4LkNvbmNhdChmb3JtTWF0cml4KTsKKyAgICBGWF9GTE9BVCBmUG9zWCA9IHBUZXh0T2JqLT5HZXRQb3NYKCk7CisgICAgRlhfRkxPQVQgZlBvc1kgPSBwVGV4dE9iai0+R2V0UG9zWSgpOworICAgIGludCBuQ2hhckluZm9JbmRleCA9IG1fVGV4dEJ1Zi5HZXRMZW5ndGgoKTsKKyAgICBDRlhfRmxvYXRSZWN0IGNoYXJCb3g7CisgICAgY2hhckJveC50b3AgPSBwVGV4dE9iai0+bV9Ub3A7CisgICAgY2hhckJveC5sZWZ0ID0gcFRleHRPYmotPm1fTGVmdDsKKyAgICBjaGFyQm94LnJpZ2h0ID0gcFRleHRPYmotPm1fUmlnaHQ7CisgICAgY2hhckJveC5ib3R0b20gPSBwVGV4dE9iai0+bV9Cb3R0b207CisgICAgZm9yIChGWF9TVFJTSVpFIGsgPSAwOyBrIDwgbkl0ZW1zOyBrKyspIHsKKyAgICAgICAgRlhfV0NIQVIgd0NoYXIgPSBhY3RUZXh0LkdldEF0KGspOworICAgICAgICBpZiAod0NoYXIgPD0gMHg4MCAmJiAhaXNwcmludCh3Q2hhcikpIHsKKyAgICAgICAgICAgIHdDaGFyID0gMHgyMDsKKyAgICAgICAgfQorICAgICAgICBpZiAod0NoYXIgPj0gMHhGRkZEKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBQQUdFQ0hBUl9JTkZPIGNoYXJpbmZvOworICAgICAgICBjaGFyaW5mby5tX09yaWdpblggPSBmUG9zWDsKKyAgICAgICAgY2hhcmluZm8ubV9PcmlnaW5ZID0gZlBvc1k7CisgICAgICAgIGNoYXJpbmZvLm1fSW5kZXggPSBuQ2hhckluZm9JbmRleDsKKyAgICAgICAgY2hhcmluZm8ubV9Vbmljb2RlID0gd0NoYXI7CisgICAgICAgIGNoYXJpbmZvLm1fQ2hhckNvZGUgPSBwRm9udC0+Q2hhckNvZGVGcm9tVW5pY29kZSh3Q2hhcik7CisgICAgICAgIGNoYXJpbmZvLm1fRmxhZyA9IEZQREZURVhUX0NIQVJfUElFQ0U7CisgICAgICAgIGNoYXJpbmZvLm1fcFRleHRPYmogPSBwVGV4dE9iajsKKyAgICAgICAgY2hhcmluZm8ubV9DaGFyQm94LnRvcCA9IGNoYXJCb3gudG9wOworICAgICAgICBjaGFyaW5mby5tX0NoYXJCb3gubGVmdCA9IGNoYXJCb3gubGVmdDsKKyAgICAgICAgY2hhcmluZm8ubV9DaGFyQm94LnJpZ2h0ID0gY2hhckJveC5yaWdodDsKKyAgICAgICAgY2hhcmluZm8ubV9DaGFyQm94LmJvdHRvbSA9IGNoYXJCb3guYm90dG9tOworICAgICAgICBjaGFyaW5mby5tX01hdHJpeC5Db3B5KG1hdHJpeCk7CisgICAgICAgIG1fVGVtcFRleHRCdWYuQXBwZW5kQ2hhcih3Q2hhcik7CisgICAgICAgIG1fVGVtcENoYXJMaXN0LkFkZChjaGFyaW5mbyk7CisgICAgfQorfQordm9pZCBDUERGX1RleHRQYWdlOjpGaW5kUHJldmlvdXNUZXh0T2JqZWN0KHZvaWQpCit7CisgICAgaWYgKG1fVGVtcENoYXJMaXN0LkdldFNpemUoKSA8IDEgJiYgbV9jaGFyTGlzdC5HZXRTaXplKCkgPCAxKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUEFHRUNIQVJfSU5GTyBwcmVDaGFyOworICAgIGlmIChtX1RlbXBDaGFyTGlzdC5HZXRTaXplKCkgPj0gMSkgeworICAgICAgICBwcmVDaGFyID0gKihQQUdFQ0hBUl9JTkZPKiltX1RlbXBDaGFyTGlzdC5HZXRBdChtX1RlbXBDaGFyTGlzdC5HZXRTaXplKCkgLSAxKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmVDaGFyID0gKihQQUdFQ0hBUl9JTkZPKiltX2NoYXJMaXN0LkdldEF0KG1fY2hhckxpc3QuR2V0U2l6ZSgpIC0gMSk7CisgICAgfQorICAgIGlmIChwcmVDaGFyLm1fcFRleHRPYmopIHsKKyAgICAgICAgbV9wUHJlVGV4dE9iaiA9IHByZUNoYXIubV9wVGV4dE9iajsKKyAgICB9Cit9Cit2b2lkIENQREZfVGV4dFBhZ2U6OlByb2Nlc3NUZXh0T2JqZWN0KFBERlRFWFRfT2JqIE9iaikKK3sKKyAgICBDUERGX1RleHRPYmplY3QqIHBUZXh0T2JqID0gT2JqLm1fcFRleHRPYmo7CisgICAgaWYoRlhTWVNfZmFicyhwVGV4dE9iai0+bV9SaWdodCAtIHBUZXh0T2JqLT5tX0xlZnQpIDwgMC4wMWYgKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBmb3JtTWF0cml4ID0gT2JqLm1fZm9ybU1hdHJpeDsKKyAgICBDUERGX0ZvbnQqCXBGb250ID0gcFRleHRPYmotPkdldEZvbnQoKTsKKyAgICBDRlhfQWZmaW5lTWF0cml4IG1hdHJpeDsKKyAgICBwVGV4dE9iai0+R2V0VGV4dE1hdHJpeCgmbWF0cml4KTsKKyAgICBtYXRyaXguQ29uY2F0KGZvcm1NYXRyaXgpOworICAgIEZYX0lOVDMyIGJQcmVNS0MgPSBQcmVNYXJrZWRDb250ZW50KE9iaik7CisgICAgaWYgKEZQREZURVhUX01DX0RPTkUgPT0gYlByZU1LQykgeworICAgICAgICBtX3BQcmVUZXh0T2JqID0gcFRleHRPYmo7CisgICAgICAgIG1fcGVyTWF0cml4LkNvcHkoZm9ybU1hdHJpeCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IHJlc3VsdCA9IDA7CisgICAgaWYgKG1fcFByZVRleHRPYmopIHsKKyAgICAgICAgcmVzdWx0ID0gUHJvY2Vzc0luc2VydE9iamVjdChwVGV4dE9iaiwgZm9ybU1hdHJpeCk7CisgICAgICAgIGlmICgyID09IHJlc3VsdCkgeworICAgICAgICAgICAgbV9DdXJsaW5lUmVjdCA9IENGWF9GbG9hdFJlY3QoT2JqLm1fcFRleHRPYmotPm1fTGVmdCwgT2JqLm1fcFRleHRPYmotPm1fQm90dG9tLCBPYmoubV9wVGV4dE9iai0+bV9SaWdodCwgT2JqLm1fcFRleHRPYmotPm1fVG9wKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fQ3VybGluZVJlY3QuVW5pb24oQ0ZYX0Zsb2F0UmVjdChPYmoubV9wVGV4dE9iai0+bV9MZWZ0LCBPYmoubV9wVGV4dE9iai0+bV9Cb3R0b20sIE9iai5tX3BUZXh0T2JqLT5tX1JpZ2h0LCBPYmoubV9wVGV4dE9iai0+bV9Ub3ApKTsKKyAgICAgICAgfQorICAgICAgICBQQUdFQ0hBUl9JTkZPIGdlbmVyYXRlQ2hhcjsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSAxKSB7CisgICAgICAgICAgICBpZiAoR2VuZXJhdGVDaGFySW5mbyhURVhUX0JMQU5LX0NIQVIsIGdlbmVyYXRlQ2hhcikpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZvcm1NYXRyaXguSXNJZGVudGl0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ2hhci5tX01hdHJpeC5Db3B5KGZvcm1NYXRyaXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX1RlbXBUZXh0QnVmLkFwcGVuZENoYXIoVEVYVF9CTEFOS19DSEFSKTsKKyAgICAgICAgICAgICAgICBtX1RlbXBDaGFyTGlzdC5BZGQoZ2VuZXJhdGVDaGFyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmKHJlc3VsdCA9PSAyKSB7CisgICAgICAgICAgICBDbG9zZVRlbXBMaW5lKCk7CisgICAgICAgICAgICBpZihtX1RleHRCdWYuR2V0U2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgaWYobV9QYXJzZU9wdGlvbnMubV9iR2V0Q2hhckNvZGVPbmx5KSB7CisgICAgICAgICAgICAgICAgICAgIG1fVGV4dEJ1Zi5BcHBlbmRDaGFyKFRFWFRfUkVUVVJOX0NIQVIpOworICAgICAgICAgICAgICAgICAgICBtX1RleHRCdWYuQXBwZW5kQ2hhcihURVhUX0xJTkVGRUVEX0NIQVIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmKEdlbmVyYXRlQ2hhckluZm8oVEVYVF9SRVRVUk5fQ0hBUiwgZ2VuZXJhdGVDaGFyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9UZXh0QnVmLkFwcGVuZENoYXIoVEVYVF9SRVRVUk5fQ0hBUik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcm1NYXRyaXguSXNJZGVudGl0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVDaGFyLm1fTWF0cml4LkNvcHkoZm9ybU1hdHJpeCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBtX2NoYXJMaXN0LkFkZChnZW5lcmF0ZUNoYXIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmKEdlbmVyYXRlQ2hhckluZm8oVEVYVF9MSU5FRkVFRF9DSEFSLCBnZW5lcmF0ZUNoYXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX1RleHRCdWYuQXBwZW5kQ2hhcihURVhUX0xJTkVGRUVEX0NIQVIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JtTWF0cml4LklzSWRlbnRpdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ2hhci5tX01hdHJpeC5Db3B5KGZvcm1NYXRyaXgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbV9jaGFyTGlzdC5BZGQoZ2VuZXJhdGVDaGFyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gMyAmJiAhbV9QYXJzZU9wdGlvbnMubV9iT3V0cHV0SHlwaGVuKSB7CisgICAgICAgICAgICBGWF9JTlQzMiBuQ2hhcnMgPSBwVGV4dE9iai0+Q291bnRDaGFycygpOworICAgICAgICAgICAgaWYgKG5DaGFycyA9PSAxKSB7CisgICAgICAgICAgICAgICAgQ1BERl9UZXh0T2JqZWN0SXRlbSBpdGVtOworICAgICAgICAgICAgICAgIHBUZXh0T2JqLT5HZXRDaGFySW5mbygwLCAmaXRlbSk7CisgICAgICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgd3N0ckl0ZW0gPSBwVGV4dE9iai0+R2V0Rm9udCgpLT5Vbmljb2RlRnJvbUNoYXJDb2RlKGl0ZW0ubV9DaGFyQ29kZSk7CisgICAgICAgICAgICAgICAgaWYod3N0ckl0ZW0uSXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHdzdHJJdGVtICs9IChGWF9XQ0hBUilpdGVtLm1fQ2hhckNvZGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEZYX1dDSEFSIGN1ckNoYXIgPSB3c3RySXRlbS5HZXRBdCgwKTsKKyAgICAgICAgICAgICAgICBpZiAoMHgyRCA9PSBjdXJDaGFyIHx8IDB4QUQgPT0gY3VyQ2hhcikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKG1fVGVtcFRleHRCdWYuR2V0U2l6ZSgpID4gMCAmJiBtX1RlbXBUZXh0QnVmLkdldFdpZGVTdHJpbmcoKS5HZXRBdChtX1RlbXBUZXh0QnVmLkdldExlbmd0aCgpIC0gMSkgPT0gMHgyMCkgeworICAgICAgICAgICAgICAgIG1fVGVtcFRleHRCdWYuRGVsZXRlKG1fVGVtcFRleHRCdWYuR2V0TGVuZ3RoKCkgLSAxLCAxKTsKKyAgICAgICAgICAgICAgICBtX1RlbXBDaGFyTGlzdC5EZWxldGUobV9UZW1wQ2hhckxpc3QuR2V0U2l6ZSgpIC0gMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQQUdFQ0hBUl9JTkZPKiBjaGEgPSAoUEFHRUNIQVJfSU5GTyopbV9UZW1wQ2hhckxpc3QuR2V0QXQobV9UZW1wQ2hhckxpc3QuR2V0U2l6ZSgpIC0gMSk7CisgICAgICAgICAgICBtX1RlbXBUZXh0QnVmLkRlbGV0ZShtX1RlbXBUZXh0QnVmLkdldExlbmd0aCgpIC0gMSwgMSk7CisjaWZkZWYgRk9YSVRfQ0hST01FX0JVSUxECisgICAgICAgICAgICBjaGEtPm1fVW5pY29kZSA9IDB4MjsKKyAgICAgICAgICAgIGNoYS0+bV9GbGFnID0gRlBERlRFWFRfQ0hBUl9IWVBIRU47CisgICAgICAgICAgICBtX1RlbXBUZXh0QnVmLkFwcGVuZENoYXIoMHhmZmZlKTsKKyNlbHNlCisgICAgICAgICAgICBjaGEtPm1fVW5pY29kZSA9IDA7CisgICAgICAgICAgICBtX1RlbXBUZXh0QnVmLkFwcGVuZENoYXIoMHhmZmZlKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9DdXJsaW5lUmVjdCA9IENGWF9GbG9hdFJlY3QoT2JqLm1fcFRleHRPYmotPm1fTGVmdCwgT2JqLm1fcFRleHRPYmotPm1fQm90dG9tLCBPYmoubV9wVGV4dE9iai0+bV9SaWdodCwgT2JqLm1fcFRleHRPYmotPm1fVG9wKTsKKyAgICB9CisgICAgaWYgKEZQREZURVhUX01DX0RFTEFZID09IGJQcmVNS0MpIHsKKyAgICAgICAgUHJvY2Vzc01hcmtlZENvbnRlbnQoT2JqKTsKKyAgICAgICAgbV9wUHJlVGV4dE9iaiA9IHBUZXh0T2JqOworICAgICAgICBtX3Blck1hdHJpeC5Db3B5KGZvcm1NYXRyaXgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcFByZVRleHRPYmogPSBwVGV4dE9iajsKKyAgICBtX3Blck1hdHJpeC5Db3B5KGZvcm1NYXRyaXgpOworICAgIGludCBuSXRlbXMgPSBwVGV4dE9iai0+Q291bnRJdGVtcygpOworICAgIEZYX0ZMT0FUIHNwYWNpbmcgPSAwOworICAgIEZYX0ZMT0FUIGJhc2VTcGFjZSA9IDAuMDsKKyAgICBGWF9CT09MIGJBbGxDaGFyID0gVFJVRTsKKyAgICBpZiAocFRleHRPYmotPm1fVGV4dFN0YXRlLkdldE9iamVjdCgpLT5tX0NoYXJTcGFjZSAmJiBuSXRlbXMgPj0gMykgeworICAgICAgICBzcGFjaW5nID0gbWF0cml4LlRyYW5zZm9ybURpc3RhbmNlKHBUZXh0T2JqLT5tX1RleHRTdGF0ZS5HZXRPYmplY3QoKS0+bV9DaGFyU3BhY2UpOworICAgICAgICBiYXNlU3BhY2UgPSBzcGFjaW5nOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5JdGVtczsgaSsrKSB7CisgICAgICAgICAgICBDUERGX1RleHRPYmplY3RJdGVtIGl0ZW07CisgICAgICAgICAgICBwVGV4dE9iai0+R2V0SXRlbUluZm8oaSwgJml0ZW0pOworICAgICAgICAgICAgaWYgKGl0ZW0ubV9DaGFyQ29kZSA9PSAoRlhfRFdPUkQpIC0gMSkgeworICAgICAgICAgICAgICAgIEZYX0ZMT0FUIGZvbnRzaXplX2ggPSBwVGV4dE9iai0+bV9UZXh0U3RhdGUuR2V0Rm9udFNpemVIKCk7CisgICAgICAgICAgICAgICAgRlhfRkxPQVQga2VybmluZyA9IC1mb250c2l6ZV9oICogaXRlbS5tX09yaWdpblggLyAxMDAwOworICAgICAgICAgICAgICAgIGlmKGtlcm5pbmcgKyBzcGFjaW5nIDwgYmFzZVNwYWNlKSB7CisgICAgICAgICAgICAgICAgICAgIGJhc2VTcGFjZSA9IGtlcm5pbmcgKyBzcGFjaW5nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBiQWxsQ2hhciA9IEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHNwYWNpbmcgPSAwOworICAgICAgICBpZihiYXNlU3BhY2UgPCAwLjAgfHwgKG5JdGVtcyA9PSAzICYmICFiQWxsQ2hhcikpIHsKKyAgICAgICAgICAgIGJhc2VTcGFjZSA9IDAuMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5JdGVtczsgaSsrKSB7CisgICAgICAgIENQREZfVGV4dE9iamVjdEl0ZW0gaXRlbTsKKyAgICAgICAgUEFHRUNIQVJfSU5GTyBjaGFyaW5mbzsKKyAgICAgICAgY2hhcmluZm8ubV9PcmlnaW5YID0gMDsKKyAgICAgICAgY2hhcmluZm8ubV9PcmlnaW5ZID0gMDsKKyAgICAgICAgcFRleHRPYmotPkdldEl0ZW1JbmZvKGksICZpdGVtKTsKKyAgICAgICAgaWYgKGl0ZW0ubV9DaGFyQ29kZSA9PSAoRlhfRFdPUkQpIC0gMSkgeworICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgc3RyID0gbV9UZW1wVGV4dEJ1Zi5HZXRXaWRlU3RyaW5nKCk7CisgICAgICAgICAgICBpZihzdHIuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgc3RyID0gbV9UZXh0QnVmLkdldFdpZGVTdHJpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdHIuSXNFbXB0eSgpIHx8IHN0ci5HZXRBdChzdHIuR2V0TGVuZ3RoKCkgLSAxKSA9PSBURVhUX0JMQU5LX0NIQVIpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZYX0ZMT0FUIGZvbnRzaXplX2ggPSBwVGV4dE9iai0+bV9UZXh0U3RhdGUuR2V0Rm9udFNpemVIKCk7CisgICAgICAgICAgICBzcGFjaW5nID0gLWZvbnRzaXplX2ggKiBpdGVtLm1fT3JpZ2luWCAvIDEwMDA7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBGWF9GTE9BVCBjaGFyU3BhY2UgPSBwVGV4dE9iai0+bV9UZXh0U3RhdGUuR2V0T2JqZWN0KCktPm1fQ2hhclNwYWNlOworICAgICAgICBpZiAoY2hhclNwYWNlID4gMC4wMDEpIHsKKyAgICAgICAgICAgIHNwYWNpbmcgKz0gbWF0cml4LlRyYW5zZm9ybURpc3RhbmNlKGNoYXJTcGFjZSk7CisgICAgICAgIH0gZWxzZSBpZihjaGFyU3BhY2UgPCAtMC4wMDEpIHsKKyAgICAgICAgICAgIHNwYWNpbmcgLT0gbWF0cml4LlRyYW5zZm9ybURpc3RhbmNlKEZYU1lTX2ZhYnMoY2hhclNwYWNlKSk7CisgICAgICAgIH0KKyAgICAgICAgc3BhY2luZyAtPSBiYXNlU3BhY2U7CisgICAgICAgIGlmIChzcGFjaW5nICYmIGkgPiAwKSB7CisgICAgICAgICAgICBpbnQgbGFzdF93aWR0aCA9IDA7CisgICAgICAgICAgICBGWF9GTE9BVCBmb250c2l6ZV9oID0gcFRleHRPYmotPm1fVGV4dFN0YXRlLkdldEZvbnRTaXplSCgpOworICAgICAgICAgICAgRlhfRFdPUkQgc3BhY2VfY2hhcmNvZGUgPSBwRm9udC0+Q2hhckNvZGVGcm9tVW5pY29kZSgnICcpOworICAgICAgICAgICAgRlhfRkxPQVQgdGhyZXNob2xkID0gMDsKKyAgICAgICAgICAgIGlmIChzcGFjZV9jaGFyY29kZSAhPSAtMSkgeworICAgICAgICAgICAgICAgIHRocmVzaG9sZCA9IGZvbnRzaXplX2ggKiBwRm9udC0+R2V0Q2hhcldpZHRoRihzcGFjZV9jaGFyY29kZSkgLyAxMDAwIDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aHJlc2hvbGQgPiBmb250c2l6ZV9oIC8gMykgeworICAgICAgICAgICAgICAgIHRocmVzaG9sZCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRocmVzaG9sZCAvPSAyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRocmVzaG9sZCA9PSAwKSB7CisgICAgICAgICAgICAgICAgdGhyZXNob2xkID0gZm9udHNpemVfaDsKKyAgICAgICAgICAgICAgICBpbnQgdGhpc193aWR0aCA9IEZYU1lTX2FicyhHZXRDaGFyV2lkdGgoaXRlbS5tX0NoYXJDb2RlLCBwRm9udCkpOworICAgICAgICAgICAgICAgIHRocmVzaG9sZCA9IHRoaXNfd2lkdGggPiBsYXN0X3dpZHRoID8gKEZYX0ZMT0FUKXRoaXNfd2lkdGggOiAoRlhfRkxPQVQpbGFzdF93aWR0aDsKKyAgICAgICAgICAgICAgICBpbnQgbkRpdmlkZSA9IDY7CisgICAgICAgICAgICAgICAgaWYgKHRocmVzaG9sZCA8IDMwMCkgeworICAgICAgICAgICAgICAgICAgICBuRGl2aWRlID0gMjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRocmVzaG9sZCA8IDUwMCkgeworICAgICAgICAgICAgICAgICAgICBuRGl2aWRlID0gNDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRocmVzaG9sZCA8IDcwMCkgeworICAgICAgICAgICAgICAgICAgICBuRGl2aWRlID0gNTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhyZXNob2xkID0gdGhyZXNob2xkIC8gbkRpdmlkZTsKKyAgICAgICAgICAgICAgICB0aHJlc2hvbGQgPSBmb250c2l6ZV9oICogdGhyZXNob2xkIC8gMTAwMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0aHJlc2hvbGQgJiYgKHNwYWNpbmcgJiYgc3BhY2luZyA+PSB0aHJlc2hvbGQpICkgeworICAgICAgICAgICAgICAgIGNoYXJpbmZvLm1fVW5pY29kZSA9IFRFWFRfQkxBTktfQ0hBUjsKKyAgICAgICAgICAgICAgICBjaGFyaW5mby5tX0ZsYWcgPSBGUERGVEVYVF9DSEFSX0dFTkVSQVRFRDsKKyAgICAgICAgICAgICAgICBjaGFyaW5mby5tX3BUZXh0T2JqID0gcFRleHRPYmo7CisgICAgICAgICAgICAgICAgY2hhcmluZm8ubV9JbmRleCA9IG1fVGV4dEJ1Zi5HZXRMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBtX1RlbXBUZXh0QnVmLkFwcGVuZENoYXIoVEVYVF9CTEFOS19DSEFSKTsKKyAgICAgICAgICAgICAgICBjaGFyaW5mby5tX0NoYXJDb2RlID0gLTE7CisgICAgICAgICAgICAgICAgY2hhcmluZm8ubV9NYXRyaXguQ29weShmb3JtTWF0cml4KTsKKyAgICAgICAgICAgICAgICBtYXRyaXguVHJhbnNmb3JtKGl0ZW0ubV9PcmlnaW5YLCBpdGVtLm1fT3JpZ2luWSwgY2hhcmluZm8ubV9PcmlnaW5YLCBjaGFyaW5mby5tX09yaWdpblkpOworICAgICAgICAgICAgICAgIGNoYXJpbmZvLm1fQ2hhckJveCA9IENGWF9GbG9hdFJlY3QoY2hhcmluZm8ubV9PcmlnaW5YLCBjaGFyaW5mby5tX09yaWdpblksIGNoYXJpbmZvLm1fT3JpZ2luWCwgY2hhcmluZm8ubV9PcmlnaW5ZKTsKKyAgICAgICAgICAgICAgICBtX1RlbXBDaGFyTGlzdC5BZGQoY2hhcmluZm8pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGl0ZW0ubV9DaGFyQ29kZSA9PSAoRlhfRFdPUkQpIC0gMSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHNwYWNpbmcgPSAwOworICAgICAgICBDRlhfV2lkZVN0cmluZyB3c3RySXRlbSA9IHBGb250LT5Vbmljb2RlRnJvbUNoYXJDb2RlKGl0ZW0ubV9DaGFyQ29kZSk7CisgICAgICAgIEZYX0JPT0wgYk5vVW5pY29kZSA9IEZBTFNFOworICAgICAgICBGWF9XQ0hBUiB3Q2hhciA9IHdzdHJJdGVtLkdldEF0KDApOworICAgICAgICBpZiAoKHdzdHJJdGVtLklzRW1wdHkoKSB8fCB3Q2hhciA9PSAwKSAmJiBpdGVtLm1fQ2hhckNvZGUpIHsKKyAgICAgICAgICAgIGlmKHdzdHJJdGVtLklzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHdzdHJJdGVtICs9IChGWF9XQ0hBUilpdGVtLm1fQ2hhckNvZGU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHdzdHJJdGVtLlNldEF0KDAsIChGWF9XQ0hBUilpdGVtLm1fQ2hhckNvZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYk5vVW5pY29kZSA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgY2hhcmluZm8ubV9JbmRleCA9IC0xOworICAgICAgICBjaGFyaW5mby5tX0NoYXJDb2RlID0gaXRlbS5tX0NoYXJDb2RlOworICAgICAgICBpZihiTm9Vbmljb2RlKSB7CisgICAgICAgICAgICBjaGFyaW5mby5tX0ZsYWcgPSBGUERGVEVYVF9DSEFSX1VOVU5JQ09ERTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNoYXJpbmZvLm1fRmxhZyA9IEZQREZURVhUX0NIQVJfTk9STUFMOworICAgICAgICB9CisgICAgICAgIGNoYXJpbmZvLm1fcFRleHRPYmogPSBwVGV4dE9iajsKKyAgICAgICAgY2hhcmluZm8ubV9PcmlnaW5YID0gMCwgY2hhcmluZm8ubV9PcmlnaW5ZID0gMDsKKyAgICAgICAgbWF0cml4LlRyYW5zZm9ybShpdGVtLm1fT3JpZ2luWCwgaXRlbS5tX09yaWdpblksIGNoYXJpbmZvLm1fT3JpZ2luWCwgY2hhcmluZm8ubV9PcmlnaW5ZKTsKKyAgICAgICAgRlhfUkVDVCByZWN0KDAsIDAsIDAsIDApOworICAgICAgICByZWN0LkludGVyc2VjdCgwLCAwLCAwLCAwKTsKKyAgICAgICAgY2hhcmluZm8ubV9wVGV4dE9iai0+R2V0Rm9udCgpLT5HZXRDaGFyQkJveChjaGFyaW5mby5tX0NoYXJDb2RlLCByZWN0KTsKKyAgICAgICAgY2hhcmluZm8ubV9DaGFyQm94LnRvcCA9IHJlY3QudG9wICogcFRleHRPYmotPkdldEZvbnRTaXplKCkgLyAxMDAwICsgaXRlbS5tX09yaWdpblk7CisgICAgICAgIGNoYXJpbmZvLm1fQ2hhckJveC5sZWZ0ID0gcmVjdC5sZWZ0ICogcFRleHRPYmotPkdldEZvbnRTaXplKCkgLyAxMDAwICsgaXRlbS5tX09yaWdpblg7CisgICAgICAgIGNoYXJpbmZvLm1fQ2hhckJveC5yaWdodCA9IHJlY3QucmlnaHQgKiBwVGV4dE9iai0+R2V0Rm9udFNpemUoKSAvIDEwMDAgKyBpdGVtLm1fT3JpZ2luWDsKKyAgICAgICAgY2hhcmluZm8ubV9DaGFyQm94LmJvdHRvbSA9IHJlY3QuYm90dG9tICogcFRleHRPYmotPkdldEZvbnRTaXplKCkgLyAxMDAwICsgaXRlbS5tX09yaWdpblk7CisgICAgICAgIGlmIChmYWJzZihjaGFyaW5mby5tX0NoYXJCb3gudG9wIC0gY2hhcmluZm8ubV9DaGFyQm94LmJvdHRvbSkgPCAwLjAxZikgeworICAgICAgICAgICAgY2hhcmluZm8ubV9DaGFyQm94LnRvcCA9IGNoYXJpbmZvLm1fQ2hhckJveC5ib3R0b20gKyBwVGV4dE9iai0+R2V0Rm9udFNpemUoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZmFic2YoY2hhcmluZm8ubV9DaGFyQm94LnJpZ2h0IC0gY2hhcmluZm8ubV9DaGFyQm94LmxlZnQpIDwgMC4wMWYpIHsKKyAgICAgICAgICAgIGNoYXJpbmZvLm1fQ2hhckJveC5yaWdodCA9IGNoYXJpbmZvLm1fQ2hhckJveC5sZWZ0ICsgcFRleHRPYmotPkdldENoYXJXaWR0aChjaGFyaW5mby5tX0NoYXJDb2RlKTsKKyAgICAgICAgfQorICAgICAgICBtYXRyaXguVHJhbnNmb3JtUmVjdChjaGFyaW5mby5tX0NoYXJCb3gpOworICAgICAgICBjaGFyaW5mby5tX01hdHJpeC5Db3B5KG1hdHJpeCk7CisgICAgICAgIGlmICh3c3RySXRlbS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGNoYXJpbmZvLm1fVW5pY29kZSA9IDA7CisgICAgICAgICAgICBtX1RlbXBDaGFyTGlzdC5BZGQoY2hhcmluZm8pOworICAgICAgICAgICAgbV9UZW1wVGV4dEJ1Zi5BcHBlbmRDaGFyKDB4ZmZmZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBuVG90YWwgPSB3c3RySXRlbS5HZXRMZW5ndGgoKTsKKyAgICAgICAgICAgIGludCBuID0gMDsKKyAgICAgICAgICAgIEZYX0JPT0wgYkRlbCA9IEZBTFNFOworICAgICAgICAgICAgd2hpbGUgKG4gPCBtX1RlbXBDaGFyTGlzdC5HZXRTaXplKCkgJiYgbiA8IDcpIHsKKyAgICAgICAgICAgICAgICBuKys7CisgICAgICAgICAgICAgICAgUEFHRUNIQVJfSU5GTyogY2hhcmluZm8xID0gKFBBR0VDSEFSX0lORk8qKW1fVGVtcENoYXJMaXN0LkdldEF0KG1fVGVtcENoYXJMaXN0LkdldFNpemUoKSAtIG4pOworICAgICAgICAgICAgICAgIGlmKGNoYXJpbmZvMS0+bV9DaGFyQ29kZSA9PSBjaGFyaW5mby5tX0NoYXJDb2RlICYmCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyaW5mbzEtPm1fcFRleHRPYmotPkdldEZvbnQoKSA9PSBjaGFyaW5mby5tX3BUZXh0T2JqLT5HZXRGb250KCkgICYmCisgICAgICAgICAgICAgICAgICAgICAgICBGWFNZU19mYWJzKGNoYXJpbmZvMS0+bV9PcmlnaW5YIC0gY2hhcmluZm8ubV9PcmlnaW5YKSA8IFRFWFRfQ0hBUlJBVElPX0dBUERFTFRBICogcFRleHRPYmotPkdldEZvbnRTaXplKCkgICYmCisgICAgICAgICAgICAgICAgICAgICAgICBGWFNZU19mYWJzKGNoYXJpbmZvMS0+bV9PcmlnaW5ZIC0gY2hhcmluZm8ubV9PcmlnaW5ZKSA8IFRFWFRfQ0hBUlJBVElPX0dBUERFTFRBICogcFRleHRPYmotPkdldEZvbnRTaXplKCkgKSB7CisgICAgICAgICAgICAgICAgICAgIGJEZWwgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZighYkRlbCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IG5JbmRleCA9IDA7IG5JbmRleCA8IG5Ub3RhbDsgbkluZGV4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhcmluZm8ubV9Vbmljb2RlID0gd3N0ckl0ZW0uR2V0QXQobkluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJpbmZvLm1fVW5pY29kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmluZm8ubV9JbmRleCA9IG1fVGV4dEJ1Zi5HZXRMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fVGVtcFRleHRCdWYuQXBwZW5kQ2hhcihjaGFyaW5mby5tX1VuaWNvZGUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9UZW1wVGV4dEJ1Zi5BcHBlbmRDaGFyKDB4ZmZmZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbV9UZW1wQ2hhckxpc3QuQWRkKGNoYXJpbmZvKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYoaSA9PSAwKSB7CisgICAgICAgICAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgc3RyID0gbV9UZW1wVGV4dEJ1Zi5HZXRXaWRlU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFzdHIuSXNFbXB0eSgpICYmIHN0ci5HZXRBdChzdHIuR2V0TGVuZ3RoKCkgLSAxKSA9PSBURVhUX0JMQU5LX0NIQVIpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9UZW1wVGV4dEJ1Zi5EZWxldGUobV9UZW1wVGV4dEJ1Zi5HZXRMZW5ndGgoKSAtIDEsIDEpOworICAgICAgICAgICAgICAgICAgICBtX1RlbXBDaGFyTGlzdC5EZWxldGUobV9UZW1wQ2hhckxpc3QuR2V0U2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorRlhfSU5UMzIgQ1BERl9UZXh0UGFnZTo6R2V0VGV4dE9iamVjdFdyaXRpbmdNb2RlKGNvbnN0IENQREZfVGV4dE9iamVjdCogcFRleHRPYmopCit7CisgICAgRlhfSU5UMzIgbkNoYXJzID0gcFRleHRPYmotPkNvdW50Q2hhcnMoKTsKKyAgICBpZiAobkNoYXJzID09IDEpIHsKKyAgICAgICAgcmV0dXJuIG1fVGV4dGxpbmVEaXI7CisgICAgfQorICAgIENQREZfVGV4dE9iamVjdEl0ZW0gZmlyc3QsIGxhc3Q7CisgICAgcFRleHRPYmotPkdldENoYXJJbmZvKDAsICZmaXJzdCk7CisgICAgcFRleHRPYmotPkdldENoYXJJbmZvKG5DaGFycyAtIDEsICZsYXN0KTsKKyAgICBDRlhfTWF0cml4IHRleHRNYXRyaXg7CisgICAgcFRleHRPYmotPkdldFRleHRNYXRyaXgoJnRleHRNYXRyaXgpOworICAgIHRleHRNYXRyaXguVHJhbnNmb3JtUG9pbnQoZmlyc3QubV9PcmlnaW5YLCBmaXJzdC5tX09yaWdpblkpOworICAgIHRleHRNYXRyaXguVHJhbnNmb3JtUG9pbnQobGFzdC5tX09yaWdpblgsIGxhc3QubV9PcmlnaW5ZKTsKKyAgICBGWF9GTE9BVCBkWCA9IEZYU1lTX2ZhYnMobGFzdC5tX09yaWdpblggLSBmaXJzdC5tX09yaWdpblgpOworICAgIEZYX0ZMT0FUIGRZID0gRlhTWVNfZmFicyhsYXN0Lm1fT3JpZ2luWSAtIGZpcnN0Lm1fT3JpZ2luWSk7CisgICAgaWYgKGRYIDw9IDAuMDAwMWYgJiYgZFkgPD0gMC4wMDAxZikgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIENGWF9WZWN0b3JGIHY7CisgICAgdi5TZXQoZFgsIGRZKTsKKyAgICB2Lk5vcm1hbGl6ZSgpOworICAgIGlmICh2LnkgPD0gMC4wODcyZikgeworICAgICAgICBpZiAodi54IDw9IDAuMDg3MmYpIHsKKyAgICAgICAgICAgIHJldHVybiBtX1RleHRsaW5lRGlyOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSBpZiAodi54IDw9IDAuMDg3MmYpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiBtX1RleHRsaW5lRGlyOworfQorRlhfQk9PTCBDUERGX1RleHRQYWdlOjpJc0h5cGhlbihGWF9XQ0hBUiBjdXJDaGFyKQoreworICAgIENGWF9XaWRlU3RyaW5nIHN0ckN1clRleHQgPSBtX1RlbXBUZXh0QnVmLkdldFdpZGVTdHJpbmcoKTsKKyAgICBpZihzdHJDdXJUZXh0LkdldExlbmd0aCgpID09IDApIHsKKyAgICAgICAgc3RyQ3VyVGV4dCA9IG1fVGV4dEJ1Zi5HZXRXaWRlU3RyaW5nKCk7CisgICAgfQorICAgIEZYX1NUUlNJWkUgbkNvdW50ID0gc3RyQ3VyVGV4dC5HZXRMZW5ndGgoKTsKKyAgICBpbnQgbkluZGV4ID0gbkNvdW50IC0gMTsKKyAgICBGWF9XQ0hBUiB3Y1RtcCA9IHN0ckN1clRleHQuR2V0QXQobkluZGV4KTsKKyAgICB3aGlsZSh3Y1RtcCA9PSAweDIwICYmIG5JbmRleCA8PSBuQ291bnQgLSAxICYmIG5JbmRleCA+PSAwKSB7CisgICAgICAgIHdjVG1wID0gc3RyQ3VyVGV4dC5HZXRBdCgtLW5JbmRleCk7CisgICAgfQorICAgIGlmICgweDJEID09IHdjVG1wIHx8IDB4QUQgPT0gd2NUbXApIHsKKyAgICAgICAgaWYgKC0tbkluZGV4ID4gMCkgeworICAgICAgICAgICAgRlhfV0NIQVIgcHJlQ2hhciA9IHN0ckN1clRleHQuR2V0QXQoKG5JbmRleCkpOworICAgICAgICAgICAgaWYgKCgocHJlQ2hhciA+PSBMJ0EnICYmIHByZUNoYXIgPD0gTCdaJykgfHwgKHByZUNoYXIgPj0gTCdhJyAmJiBwcmVDaGFyIDw9IEwneicpKQorICAgICAgICAgICAgICAgICAgICAmJiAoKGN1ckNoYXIgPj0gTCdBJyAmJiBjdXJDaGFyIDw9IEwnWicpIHx8IChjdXJDaGFyID49IEwnYScgJiYgY3VyQ2hhciA8PSBMJ3onKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbnQgc2l6ZSA9IG1fVGVtcENoYXJMaXN0LkdldFNpemUoKTsKKyAgICAgICAgUEFHRUNIQVJfSU5GTyBwcmVDaGFyOworICAgICAgICBpZiAoc2l6ZSkgeworICAgICAgICAgICAgcHJlQ2hhciA9IChQQUdFQ0hBUl9JTkZPKW1fVGVtcENoYXJMaXN0W3NpemUgLSAxXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNpemUgPSBtX2NoYXJMaXN0LkdldFNpemUoKTsKKyAgICAgICAgICAgIGlmKHNpemUgPT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByZUNoYXIgPSAoUEFHRUNIQVJfSU5GTyltX2NoYXJMaXN0W3NpemUgLSAxXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoRlBERlRFWFRfQ0hBUl9QSUVDRSA9PSBwcmVDaGFyLm1fRmxhZykKKyAgICAgICAgICAgIGlmICgweEFEID09IHByZUNoYXIubV9Vbmljb2RlIHx8IDB4MkQgPT0gcHJlQ2hhci5tX1VuaWNvZGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQoraW50IENQREZfVGV4dFBhZ2U6OlByb2Nlc3NJbnNlcnRPYmplY3QoY29uc3QgQ1BERl9UZXh0T2JqZWN0KiBwT2JqLCBDRlhfQWZmaW5lTWF0cml4IGZvcm1NYXRyaXgpCit7CisgICAgRmluZFByZXZpb3VzVGV4dE9iamVjdCgpOworICAgIEZYX0JPT0wgYk5ld2xpbmUgPSBGQUxTRTsKKyAgICBpbnQgV3JpdGluZ01vZGUgPSBHZXRUZXh0T2JqZWN0V3JpdGluZ01vZGUocE9iaik7CisgICAgaWYoV3JpdGluZ01vZGUgPT0gLTEpIHsKKyAgICAgICAgV3JpdGluZ01vZGUgPSBHZXRUZXh0T2JqZWN0V3JpdGluZ01vZGUobV9wUHJlVGV4dE9iaik7CisgICAgfQorICAgIENGWF9GbG9hdFJlY3QgdGhpc19yZWN0KHBPYmotPm1fTGVmdCwgcE9iai0+bV9Cb3R0b20sIHBPYmotPm1fUmlnaHQsIHBPYmotPm1fVG9wKTsKKyAgICBDRlhfRmxvYXRSZWN0IHByZXZfcmVjdChtX3BQcmVUZXh0T2JqLT5tX0xlZnQsIG1fcFByZVRleHRPYmotPm1fQm90dG9tLCBtX3BQcmVUZXh0T2JqLT5tX1JpZ2h0LCBtX3BQcmVUZXh0T2JqLT5tX1RvcCk7CisgICAgQ1BERl9UZXh0T2JqZWN0SXRlbSBQcmV2SXRlbSwgaXRlbTsKKyAgICBpbnQgbkl0ZW0gPSBtX3BQcmVUZXh0T2JqLT5Db3VudEl0ZW1zKCk7CisgICAgbV9wUHJlVGV4dE9iai0+R2V0SXRlbUluZm8obkl0ZW0gLSAxLCAmUHJldkl0ZW0pOworICAgIHBPYmotPkdldEl0ZW1JbmZvKDAsICZpdGVtKTsKKyAgICBDRlhfV2lkZVN0cmluZyB3c3RySXRlbSA9IHBPYmotPkdldEZvbnQoKS0+VW5pY29kZUZyb21DaGFyQ29kZShpdGVtLm1fQ2hhckNvZGUpOworICAgIGlmKHdzdHJJdGVtLklzRW1wdHkoKSkgeworICAgICAgICB3c3RySXRlbSArPSAoRlhfV0NIQVIpaXRlbS5tX0NoYXJDb2RlOworICAgIH0KKyAgICBGWF9XQ0hBUiBjdXJDaGFyID0gd3N0ckl0ZW0uR2V0QXQoMCk7CisgICAgaWYoV3JpdGluZ01vZGUgPT0gMCkgeworICAgICAgICBpZih0aGlzX3JlY3QuSGVpZ2h0KCkgPiA0LjUgJiYgcHJldl9yZWN0LkhlaWdodCgpID4gNC41KSB7CisgICAgICAgICAgICBGWF9GTE9BVCB0b3AgPSB0aGlzX3JlY3QudG9wIDwgcHJldl9yZWN0LnRvcCA/IHRoaXNfcmVjdC50b3AgOiBwcmV2X3JlY3QudG9wOworICAgICAgICAgICAgRlhfRkxPQVQgYm90dG9tID0gdGhpc19yZWN0LmJvdHRvbSA+IHByZXZfcmVjdC5ib3R0b20gPyB0aGlzX3JlY3QuYm90dG9tIDogcHJldl9yZWN0LmJvdHRvbTsKKyAgICAgICAgICAgIGlmKGJvdHRvbSA+PSB0b3ApIHsKKyAgICAgICAgICAgICAgICBpZihJc0h5cGhlbihjdXJDaGFyKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKFdyaXRpbmdNb2RlID09IDEpIHsKKyAgICAgICAgaWYodGhpc19yZWN0LldpZHRoKCkgPiBwT2JqLT5HZXRGb250U2l6ZSgpICogMC4xZiAmJiBwcmV2X3JlY3QuV2lkdGgoKSA+IG1fcFByZVRleHRPYmotPkdldEZvbnRTaXplKCkgKiAwLjFmKSB7CisgICAgICAgICAgICBGWF9GTE9BVCBsZWZ0ID0gdGhpc19yZWN0LmxlZnQgPiBtX0N1cmxpbmVSZWN0LmxlZnQgPyB0aGlzX3JlY3QubGVmdCA6IG1fQ3VybGluZVJlY3QubGVmdDsKKyAgICAgICAgICAgIEZYX0ZMT0FUIHJpZ2h0ID0gdGhpc19yZWN0LnJpZ2h0IDwgbV9DdXJsaW5lUmVjdC5yaWdodCA/IHRoaXNfcmVjdC5yaWdodCA6IG1fQ3VybGluZVJlY3QucmlnaHQ7CisgICAgICAgICAgICBpZihyaWdodCA8PSBsZWZ0KSB7CisgICAgICAgICAgICAgICAgaWYoSXNIeXBoZW4oY3VyQ2hhcikpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIEZYX0ZMT0FUIGxhc3RfcG9zID0gUHJldkl0ZW0ubV9PcmlnaW5YOworICAgIGludCBuTGFzdFdpZHRoID0gR2V0Q2hhcldpZHRoKFByZXZJdGVtLm1fQ2hhckNvZGUsIG1fcFByZVRleHRPYmotPkdldEZvbnQoKSk7CisgICAgRlhfRkxPQVQgbGFzdF93aWR0aCA9IG5MYXN0V2lkdGggKiBtX3BQcmVUZXh0T2JqLT5HZXRGb250U2l6ZSgpIC8gMTAwMDsKKyAgICBsYXN0X3dpZHRoID0gRlhTWVNfZmFicyhsYXN0X3dpZHRoKTsKKyAgICBpbnQgblRoaXNXaWR0aCA9IEdldENoYXJXaWR0aChpdGVtLm1fQ2hhckNvZGUsIHBPYmotPkdldEZvbnQoKSk7CisgICAgRlhfRkxPQVQgdGhpc193aWR0aCA9IG5UaGlzV2lkdGggKiBwT2JqLT5HZXRGb250U2l6ZSgpIC8gMTAwMDsKKyAgICB0aGlzX3dpZHRoID0gRlhTWVNfZmFicyh0aGlzX3dpZHRoKTsKKyAgICBGWF9GTE9BVCB0aHJlc2hvbGQgPSBsYXN0X3dpZHRoID4gdGhpc193aWR0aCA/IGxhc3Rfd2lkdGggLyA0IDogdGhpc193aWR0aCAvIDQ7CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBwcmV2X21hdHJpeCwgcHJldl9yZXZlcnNlOworICAgIG1fcFByZVRleHRPYmotPkdldFRleHRNYXRyaXgoJnByZXZfbWF0cml4KTsKKyAgICBwcmV2X21hdHJpeC5Db25jYXQobV9wZXJNYXRyaXgpOworICAgIHByZXZfcmV2ZXJzZS5TZXRSZXZlcnNlKHByZXZfbWF0cml4KTsKKyAgICBGWF9GTE9BVCB4ID0gcE9iai0+R2V0UG9zWCgpOworICAgIEZYX0ZMT0FUIHkgPSBwT2JqLT5HZXRQb3NZKCk7CisgICAgZm9ybU1hdHJpeC5UcmFuc2Zvcm0oeCwgeSk7CisgICAgcHJldl9yZXZlcnNlLlRyYW5zZm9ybSh4LCB5KTsKKyAgICBpZihsYXN0X3dpZHRoIDwgdGhpc193aWR0aCkgeworICAgICAgICB0aHJlc2hvbGQgPSBwcmV2X3JldmVyc2UuVHJhbnNmb3JtRGlzdGFuY2UodGhyZXNob2xkKTsKKyAgICB9CisgICAgQ0ZYX0Zsb2F0UmVjdCByZWN0MShtX3BQcmVUZXh0T2JqLT5tX0xlZnQsIHBPYmotPm1fQm90dG9tLCBtX3BQcmVUZXh0T2JqLT5tX1JpZ2h0LCBwT2JqLT5tX1RvcCk7CisgICAgQ0ZYX0Zsb2F0UmVjdCByZWN0MihtX3BQcmVUZXh0T2JqLT5tX0xlZnQsIG1fcFByZVRleHRPYmotPm1fQm90dG9tLCBtX3BQcmVUZXh0T2JqLT5tX1JpZ2h0LCBtX3BQcmVUZXh0T2JqLT5tX1RvcCk7CisgICAgQ0ZYX0Zsb2F0UmVjdCByZWN0MyA9IHJlY3QxOworICAgIHJlY3QxLkludGVyc2VjdChyZWN0Mik7CisgICAgaWYgKFdyaXRpbmdNb2RlID09IDApIHsKKyAgICAgICAgaWYgKChyZWN0MS5Jc0VtcHR5KCkgJiYgcmVjdDIuSGVpZ2h0KCkgPiA1ICYmIHJlY3QzLkhlaWdodCgpID4gNSkKKyAgICAgICAgICAgICAgICB8fCAoKHkgPiB0aHJlc2hvbGQgKiAyIHx8IHkgPCB0aHJlc2hvbGQgKiAtMykgJiYgKEZYU1lTX2ZhYnMoeSkgPCAxID8gRlhTWVNfZmFicyh4KSA8IEZYU1lTX2ZhYnMoeSkgOiBUUlVFKSkpIHsKKyAgICAgICAgICAgIGJOZXdsaW5lID0gVFJVRTsKKyAgICAgICAgICAgIGlmKG5JdGVtID4gMSApIHsKKyAgICAgICAgICAgICAgICBDUERGX1RleHRPYmplY3RJdGVtIHRlbXBJdGVtOworICAgICAgICAgICAgICAgIG1fcFByZVRleHRPYmotPkdldEl0ZW1JbmZvKDAsICZ0ZW1wSXRlbSk7CisgICAgICAgICAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCBtOworICAgICAgICAgICAgICAgIG1fcFByZVRleHRPYmotPkdldFRleHRNYXRyaXgoJm0pOworICAgICAgICAgICAgICAgIGlmKFByZXZJdGVtLm1fT3JpZ2luWCA+IHRlbXBJdGVtLm1fT3JpZ2luWCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgbV9EaXNwbGF5TWF0cml4LmEgPiAwLjkgJiYgbV9EaXNwbGF5TWF0cml4LmIgPCAwLjEgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fRGlzcGxheU1hdHJpeC5jIDwgMC4xICYmIG1fRGlzcGxheU1hdHJpeC5kIDwgLTAuOQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgbS5iIDwgMC4xICYmIG0uYyA8IDAuMSApIHsKKyAgICAgICAgICAgICAgICAgICAgQ0ZYX0Zsb2F0UmVjdCByZSgwLCBtX3BQcmVUZXh0T2JqLT5tX0JvdHRvbSwgMTAwMCwgbV9wUHJlVGV4dE9iai0+bV9Ub3ApOworICAgICAgICAgICAgICAgICAgICBpZihyZS5Db250YWlucyhwT2JqLT5HZXRQb3NYKCksIHBPYmotPkdldFBvc1koKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJOZXdsaW5lID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDRlhfRmxvYXRSZWN0IHJlKDAsIHBPYmotPm1fQm90dG9tLCAxMDAwLCBwT2JqLT5tX1RvcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihyZS5Db250YWlucyhtX3BQcmVUZXh0T2JqLT5HZXRQb3NYKCksIG1fcFByZVRleHRPYmotPkdldFBvc1koKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiTmV3bGluZSA9IEZBTFNFOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmKGJOZXdsaW5lKSB7CisgICAgICAgIGlmKElzSHlwaGVuKGN1ckNoYXIpKSB7CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMjsKKyAgICB9CisgICAgRlhfSU5UMzIgbkNoYXJzID0gcE9iai0+Q291bnRDaGFycygpOworICAgIGlmIChuQ2hhcnMgPT0gMSAmJiAoIDB4MkQgPT0gY3VyQ2hhciB8fCAweEFEID09IGN1ckNoYXIpKQorICAgICAgICBpZiAoSXNIeXBoZW4oY3VyQ2hhcikpIHsKKyAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICB9CisgICAgQ0ZYX1dpZGVTdHJpbmcgUHJldlN0ciA9IG1fcFByZVRleHRPYmotPkdldEZvbnQoKS0+VW5pY29kZUZyb21DaGFyQ29kZShQcmV2SXRlbS5tX0NoYXJDb2RlKTsKKyAgICBGWF9XQ0hBUiBwcmVDaGFyID0gUHJldlN0ci5HZXRBdChQcmV2U3RyLkdldExlbmd0aCgpIC0gMSk7CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXg7CisgICAgcE9iai0+R2V0VGV4dE1hdHJpeCgmbWF0cml4KTsKKyAgICBtYXRyaXguQ29uY2F0KGZvcm1NYXRyaXgpOworICAgIHRocmVzaG9sZCA9IChGWF9GTE9BVCkobkxhc3RXaWR0aCA+IG5UaGlzV2lkdGggPyBuTGFzdFdpZHRoIDogblRoaXNXaWR0aCk7CisgICAgdGhyZXNob2xkID0gdGhyZXNob2xkID4gNDAwID8gKHRocmVzaG9sZCA8IDcwMCA/IHRocmVzaG9sZCAvIDQgOiAgKHRocmVzaG9sZCA+IDgwMCA/IHRocmVzaG9sZCAvIDYgOiB0aHJlc2hvbGQgLyA1KSkgOiAodGhyZXNob2xkIC8gMik7CisgICAgaWYobkxhc3RXaWR0aCA+PSBuVGhpc1dpZHRoKSB7CisgICAgICAgIHRocmVzaG9sZCAqPSBGWFNZU19mYWJzKG1fcFByZVRleHRPYmotPkdldEZvbnRTaXplKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRocmVzaG9sZCAqPSBGWFNZU19mYWJzKHBPYmotPkdldEZvbnRTaXplKCkpOworICAgICAgICB0aHJlc2hvbGQgPSBtYXRyaXguVHJhbnNmb3JtRGlzdGFuY2UodGhyZXNob2xkKTsKKyAgICAgICAgdGhyZXNob2xkID0gcHJldl9yZXZlcnNlLlRyYW5zZm9ybURpc3RhbmNlKHRocmVzaG9sZCk7CisgICAgfQorICAgIHRocmVzaG9sZCAvPSAxMDAwOworICAgIGlmKCh0aHJlc2hvbGQgPCAxLjQ4ODEgJiYgdGhyZXNob2xkID4gMS40ODc5KQorICAgICAgICAgICAgfHwgKHRocmVzaG9sZCA8IDEuMzkwMDEgJiYgdGhyZXNob2xkID4gMS4zODk5OSkpIHsKKyAgICAgICAgdGhyZXNob2xkICo9IDEuNTsKKyAgICB9CisgICAgaWYgKEZYU1lTX2ZhYnMobGFzdF9wb3MgKyBsYXN0X3dpZHRoIC0geCkgPiB0aHJlc2hvbGQgJiYgY3VyQ2hhciAhPSBMJyAnICYmIHByZUNoYXIgIT0gTCcgJykKKyAgICAgICAgaWYgKGN1ckNoYXIgIT0gTCcgJyAmJiBwcmVDaGFyICE9IEwnICcpIHsKKyAgICAgICAgICAgIGlmKCh4IC0gbGFzdF9wb3MgLSBsYXN0X3dpZHRoKSA+IHRocmVzaG9sZCB8fCAobGFzdF9wb3MgLSB4IC0gbGFzdF93aWR0aCkgPiB0aHJlc2hvbGQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKHggPCAwICYmIChsYXN0X3BvcyAtIHggLSBsYXN0X3dpZHRoKSA+IHRocmVzaG9sZCkgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoKHggLSBsYXN0X3BvcyAtIGxhc3Rfd2lkdGgpID4gdGhpc193aWR0aCB8fCAoeCAtIGxhc3RfcG9zIC0gdGhpc193aWR0aCkgPiBsYXN0X3dpZHRoICkgeworICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgcmV0dXJuIDA7Cit9CitGWF9CT09MIENQREZfVGV4dFBhZ2U6OklzU2FtZVRleHRPYmplY3QoQ1BERl9UZXh0T2JqZWN0KiBwVGV4dE9iajEsIENQREZfVGV4dE9iamVjdCogcFRleHRPYmoyKQoreworICAgIGlmICghcFRleHRPYmoxIHx8ICFwVGV4dE9iajIpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDRlhfRmxvYXRSZWN0IHJjUHJlT2JqKHBUZXh0T2JqMi0+bV9MZWZ0LCBwVGV4dE9iajItPm1fQm90dG9tLCBwVGV4dE9iajItPm1fUmlnaHQsIHBUZXh0T2JqMi0+bV9Ub3ApOworICAgIENGWF9GbG9hdFJlY3QgcmNDdXJPYmoocFRleHRPYmoxLT5tX0xlZnQsIHBUZXh0T2JqMS0+bV9Cb3R0b20sIHBUZXh0T2JqMS0+bV9SaWdodCwgcFRleHRPYmoxLT5tX1RvcCk7CisgICAgaWYgKHJjUHJlT2JqLklzRW1wdHkoKSAmJiByY0N1ck9iai5Jc0VtcHR5KCkgJiYgIW1fUGFyc2VPcHRpb25zLm1fYkdldENoYXJDb2RlT25seSkgeworICAgICAgICBGWF9GTE9BVCBkYlhkaWYgPSBGWFNZU19mYWJzKHJjUHJlT2JqLmxlZnQgLSByY0N1ck9iai5sZWZ0KTsKKyAgICAgICAgaW50IG5Db3VudCA9IG1fY2hhckxpc3QuR2V0U2l6ZSgpOworICAgICAgICBpZiAobkNvdW50ID49IDIpIHsKKyAgICAgICAgICAgIFBBR0VDSEFSX0lORk8gcGVyQ2hhclRlbXAgPSAoUEFHRUNIQVJfSU5GTyltX2NoYXJMaXN0W25Db3VudCAtIDJdOworICAgICAgICAgICAgRlhfRkxPQVQgZGJTcGFjZSA9IHBlckNoYXJUZW1wLm1fQ2hhckJveC5XaWR0aCgpOworICAgICAgICAgICAgaWYgKGRiWGRpZiA+IGRiU3BhY2UpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFyY1ByZU9iai5Jc0VtcHR5KCkgfHwgIXJjQ3VyT2JqLklzRW1wdHkoKSkgeworICAgICAgICByY1ByZU9iai5JbnRlcnNlY3QocmNDdXJPYmopOworICAgICAgICBpZiAocmNQcmVPYmouSXNFbXB0eSgpKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKEZYU1lTX2ZhYnMocmNQcmVPYmouV2lkdGgoKSAtIHJjQ3VyT2JqLldpZHRoKCkpID4gcmNDdXJPYmouV2lkdGgoKSAvIDIpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBpZiAocFRleHRPYmoyLT5HZXRGb250U2l6ZSgpICE9IHBUZXh0T2JqMS0+R2V0Rm9udFNpemUoKSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgfQorICAgIGludCBuUHJlQ291bnQgPSBwVGV4dE9iajItPkNvdW50SXRlbXMoKTsKKyAgICBpbnQgbkN1ckNvdW50ID0gcFRleHRPYmoxLT5Db3VudEl0ZW1zKCk7CisgICAgaWYgKG5QcmVDb3VudCAhPSBuQ3VyQ291bnQpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDUERGX1RleHRPYmplY3RJdGVtIGl0ZW1QZXIsIGl0ZW1DdXI7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuUHJlQ291bnQ7IGkrKykgeworICAgICAgICBwVGV4dE9iajItPkdldEl0ZW1JbmZvKGksICZpdGVtUGVyKTsKKyAgICAgICAgcFRleHRPYmoxLT5HZXRJdGVtSW5mbyhpLCAmaXRlbUN1cik7CisgICAgICAgIGlmIChpdGVtQ3VyLm1fQ2hhckNvZGUgIT0gaXRlbVBlci5tX0NoYXJDb2RlKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYoRlhTWVNfZmFicyhwVGV4dE9iajEtPkdldFBvc1goKSAtIHBUZXh0T2JqMi0+R2V0UG9zWCgpKSA+IEdldENoYXJXaWR0aChpdGVtUGVyLm1fQ2hhckNvZGUsIHBUZXh0T2JqMi0+R2V0Rm9udCgpKSpwVGV4dE9iajItPkdldEZvbnRTaXplKCkgLyAxMDAwICogMC45IHx8CisgICAgICAgICAgICBGWFNZU19mYWJzKHBUZXh0T2JqMS0+R2V0UG9zWSgpIC0gcFRleHRPYmoyLT5HZXRQb3NZKCkpID4KKyAgICAgICAgICAgIEZYX01BWChGWF9NQVgocmNQcmVPYmouSGVpZ2h0KCkgLCByY1ByZU9iai5XaWR0aCgpKSwgcFRleHRPYmoyLT5HZXRGb250U2l6ZSgpKSAvIDgpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ1BERl9UZXh0UGFnZTo6SXNTYW1lQXNQcmVUZXh0T2JqZWN0KENQREZfVGV4dE9iamVjdCogcFRleHRPYmosIEZYX1BPU0lUSU9OIE9ialBvcykKK3sKKyAgICBpZiAoIXBUZXh0T2JqKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaW50IGkgPSAwOworICAgIGlmICghT2JqUG9zKSB7CisgICAgICAgIE9ialBvcyA9IG1fcFBhZ2UtPkdldExhc3RPYmplY3RQb3NpdGlvbigpOworICAgIH0KKyAgICBDUERGX1BhZ2VPYmplY3QqIHBPYmogPSBtX3BQYWdlLT5HZXRQcmV2T2JqZWN0KE9ialBvcyk7CisgICAgd2hpbGUgKGkgPCA1ICYmIE9ialBvcykgeworICAgICAgICBwT2JqID0gbV9wUGFnZS0+R2V0UHJldk9iamVjdChPYmpQb3MpOworICAgICAgICBpZihwT2JqID09IHBUZXh0T2JqKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZihwT2JqLT5tX1R5cGUgIT0gUERGUEFHRV9URVhUKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZihJc1NhbWVUZXh0T2JqZWN0KChDUERGX1RleHRPYmplY3QqKXBPYmosIHBUZXh0T2JqKSkgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgaSsrOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitGWF9CT09MIENQREZfVGV4dFBhZ2U6OkdlbmVyYXRlQ2hhckluZm8oRlhfV0NIQVIgdW5pY29kZSwgUEFHRUNIQVJfSU5GTyYgaW5mbykKK3sKKyAgICBpbnQgc2l6ZSA9IG1fVGVtcENoYXJMaXN0LkdldFNpemUoKTsKKyAgICBQQUdFQ0hBUl9JTkZPIHByZUNoYXI7CisgICAgaWYgKHNpemUpIHsKKyAgICAgICAgcHJlQ2hhciA9IChQQUdFQ0hBUl9JTkZPKW1fVGVtcENoYXJMaXN0W3NpemUgLSAxXTsKKyAgICB9IGVsc2UgeworICAgICAgICBzaXplID0gbV9jaGFyTGlzdC5HZXRTaXplKCk7CisgICAgICAgIGlmKHNpemUgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIHByZUNoYXIgPSAoUEFHRUNIQVJfSU5GTyltX2NoYXJMaXN0W3NpemUgLSAxXTsKKyAgICB9CisgICAgaW5mby5tX0luZGV4ID0gbV9UZXh0QnVmLkdldExlbmd0aCgpOworICAgIGluZm8ubV9Vbmljb2RlID0gdW5pY29kZTsKKyAgICBpbmZvLm1fcFRleHRPYmogPSBOVUxMOworICAgIGluZm8ubV9DaGFyQ29kZSA9IC0xOworICAgIGluZm8ubV9GbGFnID0gRlBERlRFWFRfQ0hBUl9HRU5FUkFURUQ7CisgICAgaW50IHByZVdpZHRoID0gMDsKKyAgICBpZiAocHJlQ2hhci5tX3BUZXh0T2JqICYmIHByZUNoYXIubV9DaGFyQ29kZSAhPSAoRlhfRFdPUkQpIC0gMSkgeworICAgICAgICBwcmVXaWR0aCA9IEdldENoYXJXaWR0aChwcmVDaGFyLm1fQ2hhckNvZGUsIHByZUNoYXIubV9wVGV4dE9iai0+R2V0Rm9udCgpKTsKKyAgICB9CisgICAgRlhfRkxPQVQgZnMgPSAwOworICAgIGlmKHByZUNoYXIubV9wVGV4dE9iaikgeworICAgICAgICBmcyA9IHByZUNoYXIubV9wVGV4dE9iai0+R2V0Rm9udFNpemUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmcyA9IHByZUNoYXIubV9DaGFyQm94LkhlaWdodCgpOworICAgIH0KKyAgICBpZighZnMpIHsKKyAgICAgICAgZnMgPSAxOworICAgIH0KKyAgICBpbmZvLm1fT3JpZ2luWCA9IHByZUNoYXIubV9PcmlnaW5YICsgcHJlV2lkdGggKiAoZnMpIC8gMTAwMDsKKyAgICBpbmZvLm1fT3JpZ2luWSA9IHByZUNoYXIubV9PcmlnaW5ZOworICAgIGluZm8ubV9DaGFyQm94ID0gQ0ZYX0Zsb2F0UmVjdChpbmZvLm1fT3JpZ2luWCwgaW5mby5tX09yaWdpblksIGluZm8ubV9PcmlnaW5YLCBpbmZvLm1fT3JpZ2luWSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENQREZfVGV4dFBhZ2U6OklzUmVjdEludGVyc2VjdChDRlhfRmxvYXRSZWN0IHJlY3QxLCBDRlhfRmxvYXRSZWN0IHJlY3QyKQoreworICAgIHJlY3QxLkludGVyc2VjdChyZWN0Mik7CisgICAgaWYocmVjdDEuSXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MCUNQREZfVGV4dFBhZ2U6OklzTGV0dGVyKEZYX1dDSEFSIHVuaWNvZGUpCit7CisgICAgaWYgKHVuaWNvZGUgPCBMJ0EnKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKHVuaWNvZGUgPiBMJ1onICYmIHVuaWNvZGUgPCBMJ2EnKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKHVuaWNvZGUgPiBMJ3onKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitDUERGX1RleHRQYWdlRmluZDo6Q1BERl9UZXh0UGFnZUZpbmQoY29uc3QgSVBERl9UZXh0UGFnZSogcFRleHRQYWdlKQorICAgIDogbV9Jc0ZpbmQoRkFMU0UpLAorICAgICAgbV9wVGV4dFBhZ2UoTlVMTCkKK3sKKyAgICBpZiAoIXBUZXh0UGFnZSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENQREZfTW9kdWxlTWdyKiBwUERGTW9kdWxlID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpOworICAgIG1fcFRleHRQYWdlID0gcFRleHRQYWdlOworICAgIG1fc3RyVGV4dCA9IG1fcFRleHRQYWdlLT5HZXRQYWdlVGV4dCgpOworICAgIGludCBuQ291bnQgPSBwVGV4dFBhZ2UtPkNvdW50Q2hhcnMoKTsKKyAgICBpZihuQ291bnQpIHsKKyAgICAgICAgbV9DaGFySW5kZXguQWRkKDApOworICAgIH0KKyAgICBmb3IoaW50IGkgPSAwOyBpIDwgbkNvdW50OyBpKyspIHsKKyAgICAgICAgRlBERl9DSEFSX0lORk8gaW5mbzsKKyAgICAgICAgcFRleHRQYWdlLT5HZXRDaGFySW5mbyhpLCBpbmZvKTsKKyAgICAgICAgaW50IGluZGV4U2l6ZSA9IG1fQ2hhckluZGV4LkdldFNpemUoKTsKKyAgICAgICAgaWYoaW5mby5tX0ZsYWcgPT0gQ0hBUl9OT1JNQUwgfHwgaW5mby5tX0ZsYWcgPT0gQ0hBUl9HRU5FUkFURUQpIHsKKyAgICAgICAgICAgIGlmKGluZGV4U2l6ZSAlIDIpIHsKKyAgICAgICAgICAgICAgICBtX0NoYXJJbmRleC5BZGQoMSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmKGluZGV4U2l6ZSA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX0NoYXJJbmRleC5TZXRBdChpbmRleFNpemUgLSAxLCBtX0NoYXJJbmRleC5HZXRBdChpbmRleFNpemUgLSAxKSArIDEpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYoaW5kZXhTaXplICUgMikgeworICAgICAgICAgICAgICAgIGlmKGluZGV4U2l6ZSA8PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX0NoYXJJbmRleC5TZXRBdChpbmRleFNpemUgLSAxLCBpICsgMSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fQ2hhckluZGV4LkFkZChpICsgMSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaW50IGluZGV4U2l6ZSA9IG1fQ2hhckluZGV4LkdldFNpemUoKTsKKyAgICBpZihpbmRleFNpemUgJSAyKSB7CisgICAgICAgIG1fQ2hhckluZGV4LlJlbW92ZUF0KGluZGV4U2l6ZSAtIDEpOworICAgIH0KKyAgICBtX3Jlc1N0YXJ0ID0gMDsKKyAgICBtX3Jlc0VuZCA9IC0xOworfQoraW50IENQREZfVGV4dFBhZ2VGaW5kOjpHZXRDaGFySW5kZXgoaW50IGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBtX3BUZXh0UGFnZS0+Q2hhckluZGV4RnJvbVRleHRJbmRleChpbmRleCk7CisgICAgaW50IGluZGV4U2l6ZSA9IG1fQ2hhckluZGV4LkdldFNpemUoKTsKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvcihpbnQgaSA9IDA7IGkgPCBpbmRleFNpemU7IGkgKz0gMikgeworICAgICAgICBjb3VudCArPSBtX0NoYXJJbmRleC5HZXRBdChpICsgMSk7CisgICAgICAgIGlmKGNvdW50ID4gaW5kZXgpIHsKKyAgICAgICAgICAgIHJldHVybiAJaW5kZXggLSBjb3VudCArIG1fQ2hhckluZGV4LkdldEF0KGkgKyAxKSArIG1fQ2hhckluZGV4LkdldEF0KGkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAtMTsKK30KK0ZYX0JPT0wJQ1BERl9UZXh0UGFnZUZpbmQ6OkZpbmRGaXJzdChDRlhfV2lkZVN0cmluZyBmaW5kd2hhdCwgaW50IGZsYWdzLCBpbnQgc3RhcnRQb3MpCit7CisgICAgaWYgKCFtX3BUZXh0UGFnZSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChtX3N0clRleHQuSXNFbXB0eSgpIHx8IG1fYk1hdGNoQ2FzZSAhPSAoZmxhZ3MgJiBGUERGVEVYVF9NQVRDSENBU0UpKSB7CisgICAgICAgIG1fc3RyVGV4dCA9IG1fcFRleHRQYWdlLT5HZXRQYWdlVGV4dCgpOworICAgIH0KKyAgICBtX2ZpbmRXaGF0ID0gZmluZHdoYXQ7CisgICAgbV9mbGFncyA9IGZsYWdzOworICAgIG1fYk1hdGNoQ2FzZSA9IGZsYWdzICYgRlBERlRFWFRfTUFUQ0hDQVNFOworICAgIGlmIChtX3N0clRleHQuSXNFbXB0eSgpKSB7CisgICAgICAgIG1fSXNGaW5kID0gRkFMU0U7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBGWF9TVFJTSVpFIGxlbiA9IGZpbmR3aGF0LkdldExlbmd0aCgpOworICAgIGlmICghbV9iTWF0Y2hDYXNlKSB7CisgICAgICAgIGZpbmR3aGF0Lk1ha2VMb3dlcigpOworICAgICAgICBtX3N0clRleHQuTWFrZUxvd2VyKCk7CisgICAgfQorICAgIG1fYk1hdGNoV2hvbGVXb3JkID0gZmxhZ3MgJiBGUERGVEVYVF9NQVRDSFdIT0xFV09SRDsKKyAgICBtX2ZpbmROZXh0U3RhcnQgPSBzdGFydFBvczsKKyAgICBpZiAoc3RhcnRQb3MgPT0gLTEpIHsKKyAgICAgICAgbV9maW5kUHJlU3RhcnQgPSBtX3N0clRleHQuR2V0TGVuZ3RoKCkgLSAxOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZmluZFByZVN0YXJ0ID0gc3RhcnRQb3M7CisgICAgfQorICAgIG1fY3NGaW5kV2hhdEFycmF5LlJlbW92ZUFsbCgpOworICAgIGludCBpID0gMDsKKyAgICB3aGlsZShpIDwgbGVuKSB7CisgICAgICAgIGlmKGZpbmR3aGF0LkdldEF0KGkpICE9ICcgJykgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaSsrOworICAgIH0KKyAgICBpZihpIDwgbGVuKSB7CisgICAgICAgIEV4dHJhY3RGaW5kV2hhdChmaW5kd2hhdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9jc0ZpbmRXaGF0QXJyYXkuQWRkKGZpbmR3aGF0KTsKKyAgICB9CisgICAgaWYobV9jc0ZpbmRXaGF0QXJyYXkuR2V0U2l6ZSgpIDw9IDApIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBtX0lzRmluZCA9IFRSVUU7CisgICAgbV9yZXNTdGFydCA9IDA7CisgICAgbV9yZXNFbmQgPSAtMTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ1BERl9UZXh0UGFnZUZpbmQ6OkZpbmROZXh0KCkKK3sKKyAgICBpZiAoIW1fcFRleHRQYWdlKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9yZXNBcnJheS5SZW1vdmVBbGwoKTsKKyAgICBpZihtX2ZpbmROZXh0U3RhcnQgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZihtX3N0clRleHQuSXNFbXB0eSgpKSB7CisgICAgICAgIG1fSXNGaW5kID0gRkFMU0U7CisgICAgICAgIHJldHVybiBtX0lzRmluZDsKKyAgICB9CisgICAgaW50IHN0ckxlbiA9IG1fc3RyVGV4dC5HZXRMZW5ndGgoKTsKKyAgICBpZiAobV9maW5kTmV4dFN0YXJ0ID4gc3RyTGVuIC0gMSkgeworICAgICAgICBtX0lzRmluZCA9IEZBTFNFOworICAgICAgICByZXR1cm4gbV9Jc0ZpbmQ7CisgICAgfQorICAgIGludCBuQ291bnQgPSBtX2NzRmluZFdoYXRBcnJheS5HZXRTaXplKCk7CisgICAgaW50IG5SZXN1bHRQb3MgPSAwOworICAgIGludAluU3RhcnRQb3MgPSAwOworICAgIG5TdGFydFBvcyA9IG1fZmluZE5leHRTdGFydDsKKyAgICBGWF9CT09MIGJTcGFjZVN0YXJ0ID0gRkFMU0U7CisgICAgZm9yKGludCBpV29yZCA9IDA7IGlXb3JkIDwgbkNvdW50OyBpV29yZCsrKSB7CisgICAgICAgIENGWF9XaWRlU3RyaW5nIGNzV29yZCA9IG1fY3NGaW5kV2hhdEFycmF5W2lXb3JkXTsKKyAgICAgICAgaWYoY3NXb3JkLklzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYoaVdvcmQgPT0gbkNvdW50IC0gMSkgeworICAgICAgICAgICAgICAgIEZYX1dDSEFSIHN0ckluc2VydCA9IG1fc3RyVGV4dC5HZXRBdChuU3RhcnRQb3MpOworICAgICAgICAgICAgICAgIGlmKHN0ckluc2VydCA9PSBURVhUX0xJTkVGRUVEX0NIQVIgfHwgc3RySW5zZXJ0ID09IFRFWFRfQkxBTktfQ0hBUiB8fCBzdHJJbnNlcnQgPT0gVEVYVF9SRVRVUk5fQ0hBUiB8fCBzdHJJbnNlcnQgPT0gMTYwKSB7CisgICAgICAgICAgICAgICAgICAgIG5SZXN1bHRQb3MgPSBuU3RhcnRQb3MgKyAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaVdvcmQgPSAtMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZihpV29yZCA9PSAwKSB7CisgICAgICAgICAgICAgICAgYlNwYWNlU3RhcnQgPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaW50IGVuZEluZGV4OworICAgICAgICBuUmVzdWx0UG9zID0gbV9zdHJUZXh0LkZpbmQoY3NXb3JkLCBuU3RhcnRQb3MpOworICAgICAgICBpZiAoblJlc3VsdFBvcyA9PSAtMSkgeworICAgICAgICAgICAgbV9Jc0ZpbmQgPSBGQUxTRTsKKyAgICAgICAgICAgIHJldHVybiBtX0lzRmluZDsKKyAgICAgICAgfQorICAgICAgICBlbmRJbmRleCA9IG5SZXN1bHRQb3MgKyBjc1dvcmQuR2V0TGVuZ3RoKCkgLSAxOworICAgICAgICBpZihpV29yZCA9PSAwKSB7CisgICAgICAgICAgICBtX3Jlc1N0YXJ0ID0gblJlc3VsdFBvczsKKyAgICAgICAgfQorICAgICAgICBGWF9CT09MIGJNYXRjaCA9IFRSVUU7CisgICAgICAgIGlmKGlXb3JkICE9IDAgJiYgIWJTcGFjZVN0YXJ0KSB7CisgICAgICAgICAgICBpbnQgUHJlUmVzRW5kUG9zID0gblN0YXJ0UG9zOworICAgICAgICAgICAgaW50IGN1ckNoYXIgPSBjc1dvcmQuR2V0QXQoMCk7CisgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyBsYXN0V29yZCA9IG1fY3NGaW5kV2hhdEFycmF5W2lXb3JkIC0gMV07CisgICAgICAgICAgICBpbnQgbGFzdENoYXIgPSBsYXN0V29yZC5HZXRBdChsYXN0V29yZC5HZXRMZW5ndGgoKSAtIDEpOworICAgICAgICAgICAgaWYoblN0YXJ0UG9zID09IG5SZXN1bHRQb3MgJiYgIShfSXNJZ25vcmVTcGFjZUNoYXJhY3RlcihsYXN0Q2hhcikgfHwgX0lzSWdub3JlU3BhY2VDaGFyYWN0ZXIoY3VyQ2hhcikpKSB7CisgICAgICAgICAgICAgICAgYk1hdGNoID0gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IoaW50IGQgPSBQcmVSZXNFbmRQb3M7IGQgPCBuUmVzdWx0UG9zOyBkKyspIHsKKyAgICAgICAgICAgICAgICBGWF9XQ0hBUiBzdHJJbnNlcnQgPSBtX3N0clRleHQuR2V0QXQoZCk7CisgICAgICAgICAgICAgICAgaWYoc3RySW5zZXJ0ICE9IFRFWFRfTElORUZFRURfQ0hBUiAmJiBzdHJJbnNlcnQgIT0gVEVYVF9CTEFOS19DSEFSICYmIHN0ckluc2VydCAhPSBURVhUX1JFVFVSTl9DSEFSICYmIHN0ckluc2VydCAhPSAxNjApIHsKKyAgICAgICAgICAgICAgICAgICAgYk1hdGNoID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmKGJTcGFjZVN0YXJ0KSB7CisgICAgICAgICAgICBpZihuUmVzdWx0UG9zID4gMCkgeworICAgICAgICAgICAgICAgIEZYX1dDSEFSIHN0ckluc2VydCA9IG1fc3RyVGV4dC5HZXRBdChuUmVzdWx0UG9zIC0gMSk7CisgICAgICAgICAgICAgICAgaWYoc3RySW5zZXJ0ICE9IFRFWFRfTElORUZFRURfQ0hBUiAmJiBzdHJJbnNlcnQgIT0gVEVYVF9CTEFOS19DSEFSICYmIHN0ckluc2VydCAhPSBURVhUX1JFVFVSTl9DSEFSICYmIHN0ckluc2VydCAhPSAxNjApIHsKKyAgICAgICAgICAgICAgICAgICAgYk1hdGNoID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgIG1fcmVzU3RhcnQgPSBuUmVzdWx0UG9zOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1fcmVzU3RhcnQgPSBuUmVzdWx0UG9zIC0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYobV9iTWF0Y2hXaG9sZVdvcmQgJiYgYk1hdGNoKSB7CisgICAgICAgICAgICBiTWF0Y2ggPSBJc01hdGNoV2hvbGVXb3JkKG1fc3RyVGV4dCwgblJlc3VsdFBvcywgZW5kSW5kZXgpOworICAgICAgICB9CisgICAgICAgIG5TdGFydFBvcyA9IGVuZEluZGV4ICsgMTsKKyAgICAgICAgaWYoIWJNYXRjaCkgeworICAgICAgICAgICAgaVdvcmQgPSAtMTsKKyAgICAgICAgICAgIGlmKGJTcGFjZVN0YXJ0KSB7CisgICAgICAgICAgICAgICAgblN0YXJ0UG9zID0gbV9yZXNTdGFydCArIG1fY3NGaW5kV2hhdEFycmF5WzFdLkdldExlbmd0aCgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBuU3RhcnRQb3MgPSBtX3Jlc1N0YXJ0ICsgbV9jc0ZpbmRXaGF0QXJyYXlbMF0uR2V0TGVuZ3RoKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgbV9yZXNFbmQgPSBuUmVzdWx0UG9zICsgbV9jc0ZpbmRXaGF0QXJyYXlbbV9jc0ZpbmRXaGF0QXJyYXkuR2V0U2l6ZSgpIC0gMV0uR2V0TGVuZ3RoKCkgLSAxOworICAgIG1fSXNGaW5kID0gVFJVRTsKKyAgICBpbnQgcmVzU3RhcnQgPSBHZXRDaGFySW5kZXgobV9yZXNTdGFydCk7CisgICAgaW50IHJlc0VuZCA9IEdldENoYXJJbmRleChtX3Jlc0VuZCk7CisgICAgbV9wVGV4dFBhZ2UtPkdldFJlY3RBcnJheShyZXNTdGFydCwgcmVzRW5kIC0gcmVzU3RhcnQgKyAxLCBtX3Jlc0FycmF5KTsKKyAgICBpZihtX2ZsYWdzICYgRlBERlRFWFRfQ09OU0VDVVRJVkUpIHsKKyAgICAgICAgbV9maW5kTmV4dFN0YXJ0ID0gbV9yZXNTdGFydCArIDE7CisgICAgICAgIG1fZmluZFByZVN0YXJ0ID0gbV9yZXNFbmQgLSAxOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZmluZE5leHRTdGFydCA9IG1fcmVzRW5kICsgMTsKKyAgICAgICAgbV9maW5kUHJlU3RhcnQgPSBtX3Jlc1N0YXJ0IC0gMTsKKyAgICB9CisgICAgcmV0dXJuIG1fSXNGaW5kOworfQorRlhfQk9PTCBDUERGX1RleHRQYWdlRmluZDo6RmluZFByZXYoKQoreworICAgIGlmICghbV9wVGV4dFBhZ2UpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBtX3Jlc0FycmF5LlJlbW92ZUFsbCgpOworICAgIGlmKG1fc3RyVGV4dC5Jc0VtcHR5KCkgfHwgbV9maW5kUHJlU3RhcnQgPCAwKSB7CisgICAgICAgIG1fSXNGaW5kID0gRkFMU0U7CisgICAgICAgIHJldHVybiBtX0lzRmluZDsKKyAgICB9CisgICAgQ1BERl9UZXh0UGFnZUZpbmQgZmluZEVuZ2luZShtX3BUZXh0UGFnZSk7CisgICAgRlhfQk9PTCByZXQgPSBmaW5kRW5naW5lLkZpbmRGaXJzdChtX2ZpbmRXaGF0LCBtX2ZsYWdzKTsKKyAgICBpZighcmV0KSB7CisgICAgICAgIG1fSXNGaW5kID0gRkFMU0U7CisgICAgICAgIHJldHVybiBtX0lzRmluZDsKKyAgICB9CisgICAgaW50CW9yZGVyID0gLTEsIE1hdGNoZWRDb3VudCA9IDA7CisgICAgd2hpbGUocmV0KSB7CisgICAgICAgIHJldCA9IGZpbmRFbmdpbmUuRmluZE5leHQoKTsKKyAgICAgICAgaWYocmV0KSB7CisgICAgICAgICAgICBpbnQgb3JkZXIxID0gZmluZEVuZ2luZS5HZXRDdXJPcmRlcigpIDsKKyAgICAgICAgICAgIGludAlNYXRjaGVkQ291bnQxID0gZmluZEVuZ2luZS5HZXRNYXRjaGVkQ291bnQoKTsKKyAgICAgICAgICAgIGlmKCgob3JkZXIxICsgTWF0Y2hlZENvdW50MSkgLSAxKSA+IG1fZmluZFByZVN0YXJ0KSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvcmRlciA9IG9yZGVyMTsKKyAgICAgICAgICAgIE1hdGNoZWRDb3VudCA9IE1hdGNoZWRDb3VudDE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYob3JkZXIgPT0gLTEpIHsKKyAgICAgICAgbV9Jc0ZpbmQgPSBGQUxTRTsKKyAgICAgICAgcmV0dXJuIG1fSXNGaW5kOworICAgIH0KKyAgICBtX3Jlc1N0YXJ0ID0gbV9wVGV4dFBhZ2UtPlRleHRJbmRleEZyb21DaGFySW5kZXgob3JkZXIpOworICAgIG1fcmVzRW5kID0gbV9wVGV4dFBhZ2UtPlRleHRJbmRleEZyb21DaGFySW5kZXgob3JkZXIgKyBNYXRjaGVkQ291bnQgLSAxKTsKKyAgICBtX0lzRmluZCA9IFRSVUU7CisgICAgbV9wVGV4dFBhZ2UtPkdldFJlY3RBcnJheShvcmRlciwgTWF0Y2hlZENvdW50LCBtX3Jlc0FycmF5KTsKKyAgICBpZihtX2ZsYWdzICYgRlBERlRFWFRfQ09OU0VDVVRJVkUpIHsKKyAgICAgICAgbV9maW5kTmV4dFN0YXJ0ID0gbV9yZXNTdGFydCArIDE7CisgICAgICAgIG1fZmluZFByZVN0YXJ0ID0gbV9yZXNFbmQgLSAxOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZmluZE5leHRTdGFydCA9IG1fcmVzRW5kICsgMTsKKyAgICAgICAgbV9maW5kUHJlU3RhcnQgPSBtX3Jlc1N0YXJ0IC0gMTsKKyAgICB9CisgICAgcmV0dXJuIG1fSXNGaW5kOworfQordm9pZCBDUERGX1RleHRQYWdlRmluZDo6RXh0cmFjdEZpbmRXaGF0KENGWF9XaWRlU3RyaW5nIGZpbmR3aGF0KQoreworICAgIGlmKGZpbmR3aGF0LklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gOworICAgIH0KKyAgICBpbnQgaW5kZXggPSAwOworICAgIHdoaWxlKDEpIHsKKyAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgY3NXb3JkID0gVEVYVF9FTVBUWTsKKyAgICAgICAgaW50IHJldCA9IEV4dHJhY3RTdWJTdHJpbmcoY3NXb3JkLCBmaW5kd2hhdCwgaW5kZXgsIFRFWFRfQkxBTktfQ0hBUik7CisgICAgICAgIGlmKGNzV29yZC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmKHJldCkgeworICAgICAgICAgICAgICAgIG1fY3NGaW5kV2hhdEFycmF5LkFkZChDRlhfV2lkZVN0cmluZyhMIiIpKTsKKyAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbnQgcG9zID0gMDsKKyAgICAgICAgRlhfQk9PTCBiTGFzdElnbm9yZSA9IEZBTFNFOworICAgICAgICB3aGlsZShwb3MgPCBjc1dvcmQuR2V0TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIGN1clN0ciA9IGNzV29yZC5NaWQocG9zLCAxKTsKKyAgICAgICAgICAgIEZYX1dDSEFSIGN1ckNoYXIgPSBjc1dvcmQuR2V0QXQocG9zKTsKKyAgICAgICAgICAgIGlmIChfSXNJZ25vcmVTcGFjZUNoYXJhY3RlcihjdXJDaGFyKSkgeworICAgICAgICAgICAgICAgIGlmIChwb3MgPiAwICYmIGN1ckNoYXIgPT0gMHgyMDE5KSB7CisgICAgICAgICAgICAgICAgICAgIHBvcysrOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBvcyA+IDAgKSB7CisgICAgICAgICAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIHByZVN0ciA9IGNzV29yZC5NaWQoMCwgcG9zKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jc0ZpbmRXaGF0QXJyYXkuQWRkKHByZVN0cik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fY3NGaW5kV2hhdEFycmF5LkFkZChjdXJTdHIpOworICAgICAgICAgICAgICAgIGlmIChwb3MgPT0gY3NXb3JkLkdldExlbmd0aCgpIC0gMSkgeworICAgICAgICAgICAgICAgICAgICBjc1dvcmQuRW1wdHkoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNzV29yZCA9IGNzV29yZC5SaWdodChjc1dvcmQuR2V0TGVuZ3RoKCkgLSBwb3MgLSAxKTsKKyAgICAgICAgICAgICAgICBwb3MgPSAwOworICAgICAgICAgICAgICAgIGJMYXN0SWdub3JlID0gVFJVRTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYkxhc3RJZ25vcmUgPSBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvcysrOworICAgICAgICB9CisgICAgICAgIGlmICghY3NXb3JkLklzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9jc0ZpbmRXaGF0QXJyYXkuQWRkKGNzV29yZCk7CisgICAgICAgIH0KKyAgICAgICAgaW5kZXgrKzsKKyAgICB9CisgICAgcmV0dXJuOworfQorRlhfQk9PTCBDUERGX1RleHRQYWdlRmluZDo6SXNNYXRjaFdob2xlV29yZChDRlhfV2lkZVN0cmluZyBjc1BhZ2VUZXh0LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpCit7CisgICAgaW50IGNoYXJfbGVmdCA9IDA7CisgICAgaW50IGNoYXJfcmlnaHQgPSAwOworICAgIGludCBjaGFyX2NvdW50ID0gZW5kUG9zIC0gc3RhcnRQb3MgKyAxOworICAgIGlmKGNoYXJfY291bnQgPCAxKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKGNoYXJfY291bnQgPT0gMSAmJiBjc1BhZ2VUZXh0LkdldEF0KHN0YXJ0UG9zKSA+IDI1NSkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgaWYoc3RhcnRQb3MgLSAxID49IDAgKSB7CisgICAgICAgIGNoYXJfbGVmdCA9IGNzUGFnZVRleHQuR2V0QXQoc3RhcnRQb3MgLSAxKTsKKyAgICB9CisgICAgaWYoc3RhcnRQb3MgKyBjaGFyX2NvdW50IDwgY3NQYWdlVGV4dC5HZXRMZW5ndGgoKSkgeworICAgICAgICBjaGFyX3JpZ2h0ID0gY3NQYWdlVGV4dC5HZXRBdChzdGFydFBvcyArIGNoYXJfY291bnQpOworICAgIH0KKyAgICBpZihjaGFyX2xlZnQgPT0gMHg2MSkgeworICAgICAgICBpbnQgYSA9IDA7CisgICAgfQorICAgIGlmICgoY2hhcl9sZWZ0ID4gJ0EnICYmIGNoYXJfbGVmdCA8ICdhJykgfHwgKGNoYXJfbGVmdCA+ICdhJyAmJiBjaGFyX2xlZnQgPCAneicpIHx8IChjaGFyX2xlZnQgPiAweGZiMDAgJiYgY2hhcl9sZWZ0IDwgMHhmYjA2KSB8fCAoY2hhcl9sZWZ0ID49ICcwJyAmJiBjaGFyX2xlZnQgPD0gJzknKSB8fAorICAgICAgICAgICAgKGNoYXJfcmlnaHQgPiAnQScgJiYgY2hhcl9yaWdodCA8ICdhJykgfHwgKGNoYXJfcmlnaHQgPiAnYScgJiYgY2hhcl9yaWdodCA8ICd6JykgfHwgKGNoYXJfcmlnaHQgPiAweGZiMDAgJiYgY2hhcl9yaWdodCA8IDB4ZmIwNikgfHwgKGNoYXJfcmlnaHQgPj0gJzAnICYmIGNoYXJfcmlnaHQgPD0gJzknKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmKCEoKCdBJyA+IGNoYXJfbGVmdCB8fCBjaGFyX2xlZnQgPiAnWicpICAmJiAoJ2EnID4gY2hhcl9sZWZ0IHx8IGNoYXJfbGVmdCA+ICd6JykKKyAgICAgICAgICAgICYmICgnQScgPiBjaGFyX3JpZ2h0IHx8IGNoYXJfcmlnaHQgPiAnWicpICAmJiAoJ2EnID4gY2hhcl9yaWdodCB8fCBjaGFyX3JpZ2h0ID4gJ3onKSkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoY2hhcl9jb3VudCA+IDApIHsKKyAgICAgICAgaWYgKGNzUGFnZVRleHQuR2V0QXQoc3RhcnRQb3MpID49IEwnMCcgJiYgY3NQYWdlVGV4dC5HZXRBdChzdGFydFBvcykgPD0gTCc5JyAmJiBjaGFyX2xlZnQgPj0gTCcwJyAmJiBjaGFyX2xlZnQgPD0gTCc5JykgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmIChjc1BhZ2VUZXh0LkdldEF0KGVuZFBvcykgPj0gTCcwJyAmJiBjc1BhZ2VUZXh0LkdldEF0KGVuZFBvcykgPD0gTCc5JyAmJiBjaGFyX3JpZ2h0ID49IEwnMCcgJiYgY2hhcl9yaWdodCA8PSBMJzknKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENQREZfVGV4dFBhZ2VGaW5kOjpFeHRyYWN0U3ViU3RyaW5nKENGWF9XaWRlU3RyaW5nJiByU3RyaW5nLCBGWF9MUENXU1RSIGxwc3pGdWxsU3RyaW5nLAorICAgICAgICBpbnQgaVN1YlN0cmluZywgRlhfV0NIQVIgY2hTZXApCit7CisgICAgaWYgKGxwc3pGdWxsU3RyaW5nID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICB3aGlsZSAoaVN1YlN0cmluZy0tKSB7CisgICAgICAgIGxwc3pGdWxsU3RyaW5nID0gRlhTWVNfd2NzY2hyKGxwc3pGdWxsU3RyaW5nLCBjaFNlcCk7CisgICAgICAgIGlmIChscHN6RnVsbFN0cmluZyA9PSBOVUxMKSB7CisgICAgICAgICAgICByU3RyaW5nLkVtcHR5KCk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgbHBzekZ1bGxTdHJpbmcrKzsKKyAgICAgICAgd2hpbGUoKmxwc3pGdWxsU3RyaW5nID09IGNoU2VwKSB7CisgICAgICAgICAgICBscHN6RnVsbFN0cmluZysrOworICAgICAgICB9CisgICAgfQorICAgIEZYX0xQQ1dTVFIgbHBjaEVuZCA9IEZYU1lTX3djc2NocihscHN6RnVsbFN0cmluZywgY2hTZXApOworICAgIGludCBuTGVuID0gKGxwY2hFbmQgPT0gTlVMTCkgPworICAgICAgICAgICAgICAgKGludClGWFNZU193Y3NsZW4obHBzekZ1bGxTdHJpbmcpIDogKGludCkobHBjaEVuZCAtIGxwc3pGdWxsU3RyaW5nKTsKKyAgICBBU1NFUlQobkxlbiA+PSAwKTsKKyAgICBGWFNZU19tZW1jcHkzMihyU3RyaW5nLkdldEJ1ZmZlcihuTGVuKSwgbHBzekZ1bGxTdHJpbmcsIG5MZW4gKiBzaXplb2YoRlhfV0NIQVIpKTsKKyAgICByU3RyaW5nLlJlbGVhc2VCdWZmZXIoKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0NGWF9XaWRlU3RyaW5nIENQREZfVGV4dFBhZ2VGaW5kOjpNYWtlUmV2ZXJzZShjb25zdCBDRlhfV2lkZVN0cmluZyBzdHIpCit7CisgICAgQ0ZYX1dpZGVTdHJpbmcgc3RyMjsKKyAgICBzdHIyLkVtcHR5KCk7CisgICAgaW50IG5sZW4gPSBzdHIuR2V0TGVuZ3RoKCk7CisgICAgZm9yKGludCBpID0gbmxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIHN0cjIgKz0gc3RyLkdldEF0KGkpOworICAgIH0KKyAgICByZXR1cm4gc3RyMjsKK30KK3ZvaWQgQ1BERl9UZXh0UGFnZUZpbmQ6OkdldFJlY3RBcnJheShDRlhfUmVjdEFycmF5JiByZWN0cykgY29uc3QKK3sKKyAgICByZWN0cy5Db3B5KG1fcmVzQXJyYXkpOworfQoraW50CUNQREZfVGV4dFBhZ2VGaW5kOjpHZXRDdXJPcmRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIEdldENoYXJJbmRleChtX3Jlc1N0YXJ0KTsKK30KK2ludAlDUERGX1RleHRQYWdlRmluZDo6R2V0TWF0Y2hlZENvdW50KCljb25zdAoreworICAgIGludCByZXNTdGFydCA9IEdldENoYXJJbmRleChtX3Jlc1N0YXJ0KTsKKyAgICBpbnQgcmVzRW5kID0gR2V0Q2hhckluZGV4KG1fcmVzRW5kKTsKKyAgICByZXR1cm4gcmVzRW5kIC0gcmVzU3RhcnQgKyAxOworfQorQ1BERl9MaW5rRXh0cmFjdDo6Q1BERl9MaW5rRXh0cmFjdCgpCisgICAgOiBtX3BUZXh0UGFnZShOVUxMKSwKKyAgICAgIG1fSXNQYXJzZXJkKEZBTFNFKQoreworfQorQ1BERl9MaW5rRXh0cmFjdDo6fkNQREZfTGlua0V4dHJhY3QoKQoreworICAgIERlbGV0ZUxpbmtMaXN0KCk7Cit9CitGWF9CT09MIENQREZfTGlua0V4dHJhY3Q6OkV4dHJhY3RMaW5rcyhjb25zdCBJUERGX1RleHRQYWdlKiBwVGV4dFBhZ2UpCit7CisgICAgaWYgKCFwVGV4dFBhZ2UgfHwgIXBUZXh0UGFnZS0+SXNQYXJzZXJlZCgpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9wVGV4dFBhZ2UgPSAoY29uc3QgQ1BERl9UZXh0UGFnZSopcFRleHRQYWdlOworICAgIG1fc3RyUGFnZVRleHQgPSBtX3BUZXh0UGFnZS0+R2V0UGFnZVRleHQoMCwgLTEpOworICAgIERlbGV0ZUxpbmtMaXN0KCk7CisgICAgaWYgKG1fc3RyUGFnZVRleHQuSXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcGFyc2VyTGluaygpOworICAgIG1fSXNQYXJzZXJkID0gVFJVRTsKKyAgICByZXR1cm4gVFJVRTsKK30KK3ZvaWQgQ1BERl9MaW5rRXh0cmFjdDo6RGVsZXRlTGlua0xpc3QoKQoreworICAgIHdoaWxlIChtX0xpbmtMaXN0LkdldFNpemUoKSkgeworICAgICAgICBDUERGX0xpbmtFeHQqIGxpbmtpbmZvID0gTlVMTDsKKyAgICAgICAgbGlua2luZm8gPSBtX0xpbmtMaXN0LkdldEF0KDApOworICAgICAgICBtX0xpbmtMaXN0LlJlbW92ZUF0KDApOworICAgICAgICBkZWxldGUgbGlua2luZm87CisgICAgfQorICAgIG1fTGlua0xpc3QuUmVtb3ZlQWxsKCk7Cit9CitpbnQgQ1BERl9MaW5rRXh0cmFjdDo6Q291bnRMaW5rcygpIGNvbnN0Cit7CisgICAgaWYgKCFtX0lzUGFyc2VyZCkJeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiBtX0xpbmtMaXN0LkdldFNpemUoKTsKK30KK3ZvaWQgQ1BERl9MaW5rRXh0cmFjdDo6cGFyc2VyTGluaygpCit7CisgICAgaW50IHN0YXJ0ID0gMCwgcG9zID0gMDsKKyAgICBpbnQgVG90YWxDaGFyID0gbV9wVGV4dFBhZ2UtPkNvdW50Q2hhcnMoKTsKKyAgICB3aGlsZSAocG9zIDwgVG90YWxDaGFyKSB7CisgICAgICAgIEZQREZfQ0hBUl9JTkZPIHBhZ2VDaGFyOworICAgICAgICBtX3BUZXh0UGFnZS0+R2V0Q2hhckluZm8ocG9zLCBwYWdlQ2hhcik7CisgICAgICAgIGlmIChwYWdlQ2hhci5tX0ZsYWcgPT0gQ0hBUl9HRU5FUkFURUQgfHwgcGFnZUNoYXIubV9Vbmljb2RlID09IDB4MjAgfHwgcG9zID09IFRvdGFsQ2hhciAtIDEpIHsKKyAgICAgICAgICAgIGludCBuQ291bnQgPSBwb3MgLSBzdGFydDsKKyAgICAgICAgICAgIGlmKHBvcyA9PSBUb3RhbENoYXIgLSAxKSB7CisgICAgICAgICAgICAgICAgbkNvdW50Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyBzdHJCZUNoZWNrOworICAgICAgICAgICAgc3RyQmVDaGVjayA9IG1fcFRleHRQYWdlLT5HZXRQYWdlVGV4dChzdGFydCwgbkNvdW50KTsKKyAgICAgICAgICAgIGlmIChzdHJCZUNoZWNrLkdldExlbmd0aCgpID4gNSkgeworICAgICAgICAgICAgICAgIHdoaWxlKHN0ckJlQ2hlY2suR2V0TGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIEZYX1dDSEFSIGNoID0gc3RyQmVDaGVjay5HZXRBdChzdHJCZUNoZWNrLkdldExlbmd0aCgpIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSBMJyknIHx8IGNoID09IEwnLCcgfHwgY2ggPT0gTCc+JyB8fCBjaCA9PSBMJy4nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJCZUNoZWNrID0gc3RyQmVDaGVjay5NaWQoMCwgc3RyQmVDaGVjay5HZXRMZW5ndGgoKSAtIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgbkNvdW50LS07CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobkNvdW50ID4gNSAmJiAoQ2hlY2tXZWJMaW5rKHN0ckJlQ2hlY2spIHx8IENoZWNrTWFpbExpbmsoc3RyQmVDaGVjaykpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghQXBwZW5kVG9MaW5rTGlzdChzdGFydCwgbkNvdW50LCBzdHJCZUNoZWNrKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGFydCA9ICsrcG9zOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcG9zKys7CisgICAgICAgIH0KKyAgICB9Cit9CitGWF9CT09MIENQREZfTGlua0V4dHJhY3Q6OkNoZWNrV2ViTGluayhDRlhfV2lkZVN0cmluZyYgc3RyQmVDaGVjaykKK3sKKyAgICBDRlhfV2lkZVN0cmluZyBzdHIgPSBzdHJCZUNoZWNrOworICAgIHN0ci5NYWtlTG93ZXIoKTsKKyAgICBpZiAoc3RyLkZpbmQoTCJodHRwOi8vd3d3LiIpICE9IC0xKSB7CisgICAgICAgIHN0ckJlQ2hlY2sgPSBzdHJCZUNoZWNrLlJpZ2h0KHN0ci5HZXRMZW5ndGgoKSAtIHN0ci5GaW5kKEwiaHR0cDovL3d3dy4iKSk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0gZWxzZSBpZiAoc3RyLkZpbmQoTCJodHRwOi8vIikgIT0gLTEpIHsKKyAgICAgICAgc3RyQmVDaGVjayA9IHN0ckJlQ2hlY2suUmlnaHQoc3RyLkdldExlbmd0aCgpIC0gc3RyLkZpbmQoTCJodHRwOi8vIikpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9IGVsc2UgaWYgKHN0ci5GaW5kKEwiaHR0cHM6Ly93d3cuIikgIT0gLTEpIHsKKyAgICAgICAgc3RyQmVDaGVjayA9IHN0ckJlQ2hlY2suUmlnaHQoc3RyLkdldExlbmd0aCgpIC0gc3RyLkZpbmQoTCJodHRwczovL3d3dy4iKSk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0gZWxzZSBpZiAoc3RyLkZpbmQoTCJodHRwczovLyIpICE9IC0xKSB7CisgICAgICAgIHN0ckJlQ2hlY2sgPSBzdHJCZUNoZWNrLlJpZ2h0KHN0ci5HZXRMZW5ndGgoKSAtIHN0ci5GaW5kKEwiaHR0cHM6Ly8iKSk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0gZWxzZSBpZiAoc3RyLkZpbmQoTCJ3d3cuIikgIT0gLTEpIHsKKyAgICAgICAgc3RyQmVDaGVjayA9IHN0ckJlQ2hlY2suUmlnaHQoc3RyLkdldExlbmd0aCgpIC0gc3RyLkZpbmQoTCJ3d3cuIikpOworICAgICAgICBzdHJCZUNoZWNrID0gTCJodHRwOi8vIiArIHN0ckJlQ2hlY2s7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9Cit9CitGWF9CT09MIENQREZfTGlua0V4dHJhY3Q6OkNoZWNrTWFpbExpbmsoQ0ZYX1dpZGVTdHJpbmcmIHN0cikKK3sKKyAgICBzdHIuTWFrZUxvd2VyKCk7CisgICAgaW50IGFQb3MgPSBzdHIuRmluZChMJ0AnKTsKKyAgICBpZiAoYVBvcyA8IDEpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoc3RyLkdldEF0KGFQb3MgLSAxKSA9PSBMJy4nIHx8IHN0ci5HZXRBdChhUG9zIC0gMSkgPT0gTCdfJykgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGludCBpOworICAgIGZvciAoaSA9IGFQb3MgLSAxOyBpID49IDA7IGktLSkgeworICAgICAgICBGWF9XQ0hBUiBjaCA9IHN0ci5HZXRBdChpKTsKKyAgICAgICAgaWYgKGNoID09IEwnXycgfHwgY2ggPT0gTCcuJyB8fCAoY2ggPj0gTCdhJyAmJiBjaCA8PSBMJ3onKSB8fCAoY2ggPj0gTCcwJyAmJiBjaCA8PSBMJzknKSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaSA9PSBhUG9zIC0gMSkgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0ciA9IHN0ci5SaWdodChzdHIuR2V0TGVuZ3RoKCkgLSBpIC0gMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBhUG9zID0gc3RyLkZpbmQoTCdAJyk7CisgICAgaWYgKGFQb3MgPCAxKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgQ0ZYX1dpZGVTdHJpbmcgc3RydGVtcCA9IEwiIjsKKyAgICBmb3IgKGkgPSAwOyBpIDwgYVBvczsgaSsrKSB7CisgICAgICAgIEZYX1dDSEFSIHdjaCA9IHN0ci5HZXRBdChpKTsKKyAgICAgICAgaWYgKHdjaCA+PSBMJ2EnICYmIHdjaCA8PSBMJ3onKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0cnRlbXAgPSBzdHIuUmlnaHQoc3RyLkdldExlbmd0aCgpIC0gaSArIDEpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChzdHJ0ZW1wICE9IEwiIikgeworICAgICAgICBzdHIgPSBzdHJ0ZW1wOworICAgIH0KKyAgICBhUG9zID0gc3RyLkZpbmQoTCdAJyk7CisgICAgaWYgKGFQb3MgPCAxKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgc3RyLlRyaW1SaWdodChMJy4nKTsKKyAgICBzdHJ0ZW1wID0gc3RyOworICAgIGludCBlUG9zID0gc3RyLkZpbmQoTCcuJyk7CisgICAgaWYgKGVQb3MgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICB3aGlsZSAoZVBvcyAhPSAtMSkgeworICAgICAgICBzdHJ0ZW1wID0gc3RydGVtcC5SaWdodChzdHJ0ZW1wLkdldExlbmd0aCgpIC0gZVBvcyAtIDEpOworICAgICAgICBlUG9zID0gc3RydGVtcC5GaW5kKCcuJyk7CisgICAgfQorICAgIGVQb3MgPSBzdHJ0ZW1wLkdldExlbmd0aCgpOworICAgIGZvciAoaSA9IDA7IGkgPCBlUG9zOyBpKyspIHsKKyAgICAgICAgRlhfV0NIQVIgd2NoID0gc3RyLkdldEF0KGkpOworICAgICAgICBpZiAoKHdjaCA+PSBMJ2EnICYmIHdjaCA8PSBMJ3onKSB8fCAod2NoID49IEwnMCcgJiYgd2NoIDw9IEwnOScpKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0ciA9IHN0ci5MZWZ0KHN0ci5HZXRMZW5ndGgoKSAtIGVQb3MgKyBpICsgMSk7CisgICAgICAgICAgICBlUG9zID0gZVBvcyAtIGkgLSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaW50IG5MZW4gPSBzdHIuR2V0TGVuZ3RoKCk7CisgICAgZm9yIChpID0gYVBvcyArIDE7IGkgPCBuTGVuIC0gZVBvczsgaSsrKSB7CisgICAgICAgIEZYX1dDSEFSIHdjaCA9IHN0ci5HZXRBdChpKTsKKyAgICAgICAgaWYgKHdjaCA9PSBMJy0nIHx8IHdjaCA9PSBMJy4nIHx8ICh3Y2ggPj0gTCdhJyAmJiB3Y2ggPD0gTCd6JykgfHwgKHdjaCA+PSBMJzAnICYmIHdjaCA8PSBMJzknKSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHN0ci5GaW5kKEwibWFpbHRvOiIpID09IC0xKSB7CisgICAgICAgIHN0ciA9IEwibWFpbHRvOiIgKyBzdHI7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDUERGX0xpbmtFeHRyYWN0OjpBcHBlbmRUb0xpbmtMaXN0KGludCBzdGFydCwgaW50IGNvdW50LCBDRlhfV2lkZVN0cmluZyBzdHJVcmwpCit7CisgICAgQ1BERl9MaW5rRXh0KiBsaW5rSW5mbyA9IE5VTEw7CisgICAgbGlua0luZm8gPSBGWF9ORVcgQ1BERl9MaW5rRXh0OworICAgIGlmICghbGlua0luZm8pIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBsaW5rSW5mby0+bV9zdHJVcmwgPSBzdHJVcmw7CisgICAgbGlua0luZm8tPm1fU3RhcnQgPSBzdGFydDsKKyAgICBsaW5rSW5mby0+bV9Db3VudCA9IGNvdW50OworICAgIG1fTGlua0xpc3QuQWRkKGxpbmtJbmZvKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0NGWF9XaWRlU3RyaW5nIENQREZfTGlua0V4dHJhY3Q6OkdldFVSTChpbnQgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKCFtX0lzUGFyc2VyZCB8fCBpbmRleCA8IDAgfHwgaW5kZXggPj0gbV9MaW5rTGlzdC5HZXRTaXplKCkpIHsKKyAgICAgICAgcmV0dXJuIEwiIjsKKyAgICB9CisgICAgQ1BERl9MaW5rRXh0KiBsaW5rID0gTlVMTDsKKyAgICBsaW5rID0gbV9MaW5rTGlzdC5HZXRBdChpbmRleCk7CisgICAgaWYgKCFsaW5rKSB7CisgICAgICAgIHJldHVybiBMIiI7CisgICAgfQorICAgIHJldHVybiBsaW5rLT5tX3N0clVybDsKK30KK3ZvaWQgQ1BERl9MaW5rRXh0cmFjdDo6R2V0Qm91bmRlZFNlZ21lbnQoaW50IGluZGV4LCBpbnQmIHN0YXJ0LCBpbnQmIGNvdW50KSBjb25zdAoreworICAgIGlmICghbV9Jc1BhcnNlcmQgfHwgaW5kZXggPCAwIHx8IGluZGV4ID49IG1fTGlua0xpc3QuR2V0U2l6ZSgpKSB7CisgICAgICAgIHJldHVybiA7CisgICAgfQorICAgIENQREZfTGlua0V4dCogbGluayA9IE5VTEw7CisgICAgbGluayA9IG1fTGlua0xpc3QuR2V0QXQoaW5kZXgpOworICAgIGlmICghbGluaykgeworICAgICAgICByZXR1cm4gOworICAgIH0KKyAgICBzdGFydCA9IGxpbmstPm1fU3RhcnQ7CisgICAgY291bnQgPSBsaW5rLT5tX0NvdW50OworfQordm9pZCBDUERGX0xpbmtFeHRyYWN0OjpHZXRSZWN0cyhpbnQgaW5kZXgsIENGWF9SZWN0QXJyYXkmIHJlY3RzKSBjb25zdAoreworICAgIGlmICghbV9Jc1BhcnNlcmQgfHwgaW5kZXggPCAwIHx8IGluZGV4ID49IG1fTGlua0xpc3QuR2V0U2l6ZSgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ1BERl9MaW5rRXh0KiBsaW5rID0gTlVMTDsKKyAgICBsaW5rID0gbV9MaW5rTGlzdC5HZXRBdChpbmRleCk7CisgICAgaWYgKCFsaW5rKSB7CisgICAgICAgIHJldHVybiA7CisgICAgfQorICAgIG1fcFRleHRQYWdlLT5HZXRSZWN0QXJyYXkobGluay0+bV9TdGFydCwgbGluay0+bV9Db3VudCwgcmVjdHMpOworfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZnRleHQvZnBkZl90ZXh0X3NlYXJjaC5jcHAgYi9jb3JlL3NyYy9mcGRmdGV4dC9mcGRmX3RleHRfc2VhcmNoLmNwcAppbmRleCBiMDI5ZjY5Li44YzgxYWQ5IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmdGV4dC9mcGRmX3RleHRfc2VhcmNoLmNwcAorKysgYi9jb3JlL3NyYy9mcGRmdGV4dC9mcGRmX3RleHRfc2VhcmNoLmNwcApAQCAtMSwzMjUgKzEsMzI1IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZW9iai5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZ0ZXh0L2ZwZGZfdGV4dC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlLmgiDQotY2xhc3MgQ1BERl9UZXh0U3RyZWFtIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDUERGX1RleHRTdHJlYW0oQ0ZYX1dpZGVUZXh0QnVmJiBidWZmZXIsIEZYX0JPT0wgYlVzZUxGLCBDRlhfUHRyQXJyYXkqIHBPYmpBcnJheSk7DQotICAgIH5DUERGX1RleHRTdHJlYW0oKSB7fQ0KLSAgICBGWF9CT09MIFByb2Nlc3NPYmplY3QoY29uc3QgQ1BERl9UZXh0T2JqZWN0KiBwT2JqLCBGWF9CT09MIGJGaXJzdExpbmUpOw0KLSAgICBDRlhfV2lkZVRleHRCdWYmCW1fQnVmZmVyOw0KLSAgICBGWF9CT09MCQkJCW1fYlVzZUxGOw0KLSAgICBDRlhfUHRyQXJyYXkqCQltX3BPYmpBcnJheTsNCi0gICAgY29uc3QgQ1BERl9UZXh0T2JqZWN0KgltX3BMYXN0T2JqOw0KLX07DQotQ1BERl9UZXh0U3RyZWFtOjpDUERGX1RleHRTdHJlYW0oQ0ZYX1dpZGVUZXh0QnVmJiBidWZmZXIsIEZYX0JPT0wgYlVzZUxGLCBDRlhfUHRyQXJyYXkqIHBPYmpBcnJheSkgOiBtX0J1ZmZlcihidWZmZXIpDQotew0KLSAgICBtX3BMYXN0T2JqID0gTlVMTDsNCi0gICAgbV9iVXNlTEYgPSBiVXNlTEY7DQotICAgIG1fcE9iakFycmF5ID0gcE9iakFycmF5Ow0KLX0NCi1GWF9CT09MIEZQREZUZXh0X0lzU2FtZVRleHRPYmplY3QoY29uc3QgQ1BERl9UZXh0T2JqZWN0KiBwVGV4dE9iajEsIGNvbnN0IENQREZfVGV4dE9iamVjdCogcFRleHRPYmoyKQ0KLXsNCi0gICAgaWYgKCFwVGV4dE9iajEgfHwgIXBUZXh0T2JqMikgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIENGWF9GbG9hdFJlY3QgcmNQcmVPYmoocFRleHRPYmoyLT5tX0xlZnQsIHBUZXh0T2JqMi0+bV9Cb3R0b20sIHBUZXh0T2JqMi0+bV9SaWdodCwgcFRleHRPYmoyLT5tX1RvcCk7DQotICAgIENGWF9GbG9hdFJlY3QgcmNDdXJPYmoocFRleHRPYmoxLT5tX0xlZnQsIHBUZXh0T2JqMS0+bV9Cb3R0b20sIHBUZXh0T2JqMS0+bV9SaWdodCwgcFRleHRPYmoxLT5tX1RvcCk7DQotICAgIGlmIChyY1ByZU9iai5Jc0VtcHR5KCkgJiYgcmNDdXJPYmouSXNFbXB0eSgpKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBpZiAoIXJjUHJlT2JqLklzRW1wdHkoKSB8fCAhcmNDdXJPYmouSXNFbXB0eSgpKSB7DQotICAgICAgICByY1ByZU9iai5JbnRlcnNlY3QocmNDdXJPYmopOw0KLSAgICAgICAgaWYgKHJjUHJlT2JqLklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChGWFNZU19mYWJzKHJjUHJlT2JqLldpZHRoKCkgLSByY0N1ck9iai5XaWR0aCgpKSA+IHJjQ3VyT2JqLldpZHRoKCkgLyAyKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBUZXh0T2JqMi0+R2V0Rm9udFNpemUoKSAhPSBwVGV4dE9iajEtPkdldEZvbnRTaXplKCkpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaW50IG5QcmVDb3VudCA9IHBUZXh0T2JqMi0+Q291bnRJdGVtcygpOw0KLSAgICBpbnQgbkN1ckNvdW50ID0gcFRleHRPYmoxLT5Db3VudEl0ZW1zKCk7DQotICAgIGlmIChuUHJlQ291bnQgIT0gbkN1ckNvdW50KSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuUHJlQ291bnQ7IGkrKykgew0KLSAgICAgICAgQ1BERl9UZXh0T2JqZWN0SXRlbSBpdGVtUGVyLCBpdGVtQ3VyOw0KLSAgICAgICAgcFRleHRPYmoyLT5HZXRJdGVtSW5mbyhpLCAmaXRlbVBlcik7DQotICAgICAgICBwVGV4dE9iajEtPkdldEl0ZW1JbmZvKGksICZpdGVtQ3VyKTsNCi0gICAgICAgIGlmIChpdGVtQ3VyLm1fQ2hhckNvZGUgIT0gaXRlbVBlci5tX0NoYXJDb2RlKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1pbnQgR2V0Q2hhcldpZHRoKEZYX0RXT1JEIGNoYXJDb2RlLCBDUERGX0ZvbnQqIHBGb250KQ0KLXsNCi0gICAgaWYoY2hhckNvZGUgPT0gLTEpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGludCB3ID0gcEZvbnQtPkdldENoYXJXaWR0aEYoY2hhckNvZGUpOw0KLSAgICBpZih3ID09IDApIHsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIHN0cjsNCi0gICAgICAgIHBGb250LT5BcHBlbmRDaGFyKHN0ciwgY2hhckNvZGUpOw0KLSAgICAgICAgdyA9IHBGb250LT5HZXRTdHJpbmdXaWR0aChzdHIsIDEpOw0KLSAgICAgICAgaWYodyA9PSAwKSB7DQotICAgICAgICAgICAgRlhfUkVDVCBCQm94Ow0KLSAgICAgICAgICAgIHBGb250LT5HZXRDaGFyQkJveChjaGFyQ29kZSwgQkJveCk7DQotICAgICAgICAgICAgdyA9IEJCb3gucmlnaHQgLSBCQm94LmxlZnQ7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIHc7DQotfQ0KLWludCBGUERGVGV4dF9Qcm9jZXNzSW50ZXJPYmooY29uc3QgQ1BERl9UZXh0T2JqZWN0KiBwUHJldk9iaiwgY29uc3QgQ1BERl9UZXh0T2JqZWN0KiBwT2JqKQ0KLXsNCi0gICAgaWYoRlBERlRleHRfSXNTYW1lVGV4dE9iamVjdChwUHJldk9iaiwgcE9iaikpIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBDUERGX1RleHRPYmplY3RJdGVtIGl0ZW07DQotICAgIGludCBuSXRlbSA9IHBQcmV2T2JqLT5Db3VudEl0ZW1zKCk7DQotICAgIHBQcmV2T2JqLT5HZXRJdGVtSW5mbyhuSXRlbSAtIDEsICZpdGVtKTsNCi0gICAgRlhfV0NIQVIgcHJlQ2hhciA9IDAsIGN1ckNoYXIgPSAwOw0KLSAgICBDRlhfV2lkZVN0cmluZyB3c3RyID0gcFByZXZPYmotPkdldEZvbnQoKS0+VW5pY29kZUZyb21DaGFyQ29kZShpdGVtLm1fQ2hhckNvZGUpOw0KLSAgICBpZih3c3RyLkdldExlbmd0aCgpKSB7DQotICAgICAgICBwcmVDaGFyID0gd3N0ci5HZXRBdCgwKTsNCi0gICAgfQ0KLSAgICBGWF9GTE9BVCBsYXN0X3BvcyA9IGl0ZW0ubV9PcmlnaW5YOw0KLSAgICBpbnQgbkxhc3RXaWR0aCA9IEdldENoYXJXaWR0aChpdGVtLm1fQ2hhckNvZGUsIHBQcmV2T2JqLT5HZXRGb250KCkpOw0KLSAgICBGWF9GTE9BVCBsYXN0X3dpZHRoID0gbkxhc3RXaWR0aCAqIHBQcmV2T2JqLT5HZXRGb250U2l6ZSgpIC8gMTAwMDsNCi0gICAgbGFzdF93aWR0aCA9IEZYU1lTX2ZhYnMobGFzdF93aWR0aCk7DQotICAgIHBPYmotPkdldEl0ZW1JbmZvKDAsICZpdGVtKTsNCi0gICAgd3N0ciA9IHBPYmotPkdldEZvbnQoKS0+VW5pY29kZUZyb21DaGFyQ29kZShpdGVtLm1fQ2hhckNvZGUpOw0KLSAgICBpZih3c3RyLkdldExlbmd0aCgpKSB7DQotICAgICAgICBjdXJDaGFyID0gd3N0ci5HZXRBdCgwKTsNCi0gICAgfQ0KLSAgICBpbnQgblRoaXNXaWR0aCA9IEdldENoYXJXaWR0aChpdGVtLm1fQ2hhckNvZGUsIHBPYmotPkdldEZvbnQoKSk7DQotICAgIEZYX0ZMT0FUIHRoaXNfd2lkdGggPSBuVGhpc1dpZHRoICogcE9iai0+R2V0Rm9udFNpemUoKSAvIDEwMDA7DQotICAgIHRoaXNfd2lkdGggPSBGWFNZU19mYWJzKHRoaXNfd2lkdGgpOw0KLSAgICBGWF9GTE9BVCB0aHJlc2hvbGQgPSBsYXN0X3dpZHRoID4gdGhpc193aWR0aCA/IGxhc3Rfd2lkdGggLyA0IDogdGhpc193aWR0aCAvIDQ7DQotICAgIENGWF9BZmZpbmVNYXRyaXggcHJldl9tYXRyaXgsIHByZXZfcmV2ZXJzZTsNCi0gICAgcFByZXZPYmotPkdldFRleHRNYXRyaXgoJnByZXZfbWF0cml4KTsNCi0gICAgcHJldl9yZXZlcnNlLlNldFJldmVyc2UocHJldl9tYXRyaXgpOw0KLSAgICBGWF9GTE9BVCB4ID0gcE9iai0+R2V0UG9zWCgpLCB5ID0gcE9iai0+R2V0UG9zWSgpOw0KLSAgICBwcmV2X3JldmVyc2UuVHJhbnNmb3JtKHgsIHkpOw0KLSAgICBpZiAoRlhTWVNfZmFicyh5KSA+IHRocmVzaG9sZCAqIDIpIHsNCi0gICAgICAgIHJldHVybiAyOw0KLSAgICB9DQotICAgIHRocmVzaG9sZCA9IChGWF9GTE9BVCkobkxhc3RXaWR0aCA+IG5UaGlzV2lkdGggPyBuTGFzdFdpZHRoIDogblRoaXNXaWR0aCk7DQotICAgIHRocmVzaG9sZCA9IHRocmVzaG9sZCA+IDQwMCA/ICh0aHJlc2hvbGQgPCA3MDAgPyB0aHJlc2hvbGQgLyA0IDogIHRocmVzaG9sZCAvIDUpIDogKHRocmVzaG9sZCAvIDIpOw0KLSAgICB0aHJlc2hvbGQgKj0gbkxhc3RXaWR0aCA+IG5UaGlzV2lkdGggPyBGWFNZU19mYWJzKHBQcmV2T2JqLT5HZXRGb250U2l6ZSgpKSA6IEZYU1lTX2ZhYnMocE9iai0+R2V0Rm9udFNpemUoKSk7DQotICAgIHRocmVzaG9sZCAvPSAxMDAwOw0KLSAgICBpZiAoRlhTWVNfZmFicyhsYXN0X3BvcyArIGxhc3Rfd2lkdGggLSB4KSA+IHRocmVzaG9sZCAmJiBjdXJDaGFyICE9IEwnICcgJiYgcHJlQ2hhciAhPSBMJyAnKQ0KLSAgICAgICAgaWYoY3VyQ2hhciAhPSBMJyAnICYmIHByZUNoYXIgIT0gTCcgJykgew0KLSAgICAgICAgICAgIGlmKCh4IC0gbGFzdF9wb3MgLSBsYXN0X3dpZHRoKSA+IHRocmVzaG9sZCB8fCAobGFzdF9wb3MgLSB4IC0gbGFzdF93aWR0aCkgPiB0aHJlc2hvbGQpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIDE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmKHggPCAwICYmIChsYXN0X3BvcyAtIHggLSBsYXN0X3dpZHRoKSA+IHRocmVzaG9sZCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYoKHggLSBsYXN0X3BvcyAtIGxhc3Rfd2lkdGgpID4gdGhpc193aWR0aCB8fCAoeCAtIGxhc3RfcG9zIC0gdGhpc193aWR0aCkgPiBsYXN0X3dpZHRoICkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIGlmKGxhc3RfcG9zICsgbGFzdF93aWR0aCA+IHggKyB0aGlzX3dpZHRoICYmIGN1ckNoYXIgPT0gTCcgJykgew0KLSAgICAgICAgcmV0dXJuIDM7DQotICAgIH0NCi0gICAgcmV0dXJuIDA7DQotfQ0KLUZYX0JPT0wgQ1BERl9UZXh0U3RyZWFtOjpQcm9jZXNzT2JqZWN0KGNvbnN0IENQREZfVGV4dE9iamVjdCogcE9iaiwgRlhfQk9PTCBiRmlyc3RMaW5lKQ0KLXsNCi0gICAgaWYocE9iai0+bV9Cb3R0b20gPiAzODAgJiYgcE9iai0+bV9MZWZ0IDwgNDUgJiYgcE9iai0+bV9Ub3AgPCA0MDIpIHsNCi0gICAgICAgIGludCBpID0gMDsNCi0gICAgfQ0KLSAgICBDUERGX0ZvbnQqIHBGb250ID0gcE9iai0+R2V0Rm9udCgpOw0KLSAgICBDRlhfQWZmaW5lTWF0cml4IG1hdHJpeDsNCi0gICAgcE9iai0+R2V0VGV4dE1hdHJpeCgmbWF0cml4KTsNCi0gICAgRlhfRkxPQVQgZnMgPSBwT2JqLT5HZXRGb250U2l6ZSgpOw0KLSAgICBpbnQgaXRlbV9pbmRleCA9IDA7DQotICAgIGlmIChtX3BMYXN0T2JqKSB7DQotICAgICAgICBpbnQgcmVzdWx0ID0gRlBERlRleHRfUHJvY2Vzc0ludGVyT2JqKG1fcExhc3RPYmosIHBPYmopOw0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSAyKSB7DQotICAgICAgICAgICAgaW50IGxlbiA9IG1fQnVmZmVyLkdldExlbmd0aCgpOw0KLSAgICAgICAgICAgIGlmIChsZW4gJiYgbV9iVXNlTEYgJiYgbV9CdWZmZXIuR2V0QnVmZmVyKClbbGVuIC0gMV0gPT0gTCctJykgew0KLSAgICAgICAgICAgICAgICBtX0J1ZmZlci5EZWxldGUobGVuIC0gMSwgMSk7DQotICAgICAgICAgICAgICAgIGlmIChtX3BPYmpBcnJheSkgew0KLSAgICAgICAgICAgICAgICAgICAgbV9wT2JqQXJyYXktPlJlbW92ZUF0KChsZW4gLSAxKSAqIDIsIDIpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgaWYgKGJGaXJzdExpbmUpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChtX2JVc2VMRikgew0KLSAgICAgICAgICAgICAgICAgICAgbV9CdWZmZXIuQXBwZW5kQ2hhcihMJ1xyJyk7DQotICAgICAgICAgICAgICAgICAgICBtX0J1ZmZlci5BcHBlbmRDaGFyKEwnXG4nKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX3BPYmpBcnJheSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BPYmpBcnJheS0+QWRkKE5VTEwpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fQnVmZmVyLkFwcGVuZENoYXIoJyAnKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX3BPYmpBcnJheSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcE9iakFycmF5LT5BZGQoTlVMTCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9wT2JqQXJyYXktPkFkZChOVUxMKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IDEpIHsNCi0gICAgICAgICAgICBtX0J1ZmZlci5BcHBlbmRDaGFyKEwnICcpOw0KLSAgICAgICAgICAgIGlmIChtX3BPYmpBcnJheSkgew0KLSAgICAgICAgICAgICAgICBtX3BPYmpBcnJheS0+QWRkKE5VTEwpOw0KLSAgICAgICAgICAgICAgICBtX3BPYmpBcnJheS0+QWRkKE5VTEwpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IC0xKSB7DQotICAgICAgICAgICAgbV9wTGFzdE9iaiA9IHBPYmo7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gMykgew0KLSAgICAgICAgICAgIGl0ZW1faW5kZXggPSAxOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fcExhc3RPYmogPSBwT2JqOw0KLSAgICBpbnQgbkl0ZW1zID0gcE9iai0+Q291bnRJdGVtcygpOw0KLSAgICBGWF9GTE9BVCBJZ25vcmVrZXJuaW5nID0gMDsNCi0gICAgZm9yKGludCBpID0gMTsgaSA8IG5JdGVtcyAtIDE7IGkgKz0gMikgew0KLSAgICAgICAgQ1BERl9UZXh0T2JqZWN0SXRlbSBpdGVtOw0KLSAgICAgICAgcE9iai0+R2V0SXRlbUluZm8oaSwgJml0ZW0pOw0KLSAgICAgICAgaWYgKGl0ZW0ubV9DaGFyQ29kZSA9PSAoRlhfRFdPUkQpIC0gMSkgew0KLSAgICAgICAgICAgIGlmKGkgPT0gMSkgew0KLSAgICAgICAgICAgICAgICBJZ25vcmVrZXJuaW5nID0gaXRlbS5tX09yaWdpblg7DQotICAgICAgICAgICAgfSBlbHNlIGlmKElnbm9yZWtlcm5pbmcgPiBpdGVtLm1fT3JpZ2luWCkgew0KLSAgICAgICAgICAgICAgICBJZ25vcmVrZXJuaW5nID0gaXRlbS5tX09yaWdpblg7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBJZ25vcmVrZXJuaW5nID0gMDsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBGWF9GTE9BVCBzcGFjaW5nID0gMDsNCi0gICAgZm9yICg7IGl0ZW1faW5kZXggPCBuSXRlbXM7IGl0ZW1faW5kZXggKyspIHsNCi0gICAgICAgIENQREZfVGV4dE9iamVjdEl0ZW0gaXRlbTsNCi0gICAgICAgIHBPYmotPkdldEl0ZW1JbmZvKGl0ZW1faW5kZXgsICZpdGVtKTsNCi0gICAgICAgIGlmIChpdGVtLm1fQ2hhckNvZGUgPT0gKEZYX0RXT1JEKSAtIDEpIHsNCi0gICAgICAgICAgICBDRlhfV2lkZVN0cmluZyB3c3RyID0gbV9CdWZmZXIuR2V0V2lkZVN0cmluZygpOw0KLSAgICAgICAgICAgIGlmICh3c3RyLklzRW1wdHkoKSB8fCB3c3RyLkdldEF0KHdzdHIuR2V0TGVuZ3RoKCkgLSAxKSA9PSBMJyAnKSB7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9GTE9BVCBmb250c2l6ZV9oID0gcE9iai0+bV9UZXh0U3RhdGUuR2V0Rm9udFNpemVIKCk7DQotICAgICAgICAgICAgc3BhY2luZyA9IC1mb250c2l6ZV9oICogKGl0ZW0ubV9PcmlnaW5YIC0gSWdub3Jla2VybmluZykgLyAxMDAwOw0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfRkxPQVQgY2hhclNwYWNlID0gcE9iai0+bV9UZXh0U3RhdGUuR2V0T2JqZWN0KCktPm1fQ2hhclNwYWNlOw0KLSAgICAgICAgaWYobkl0ZW1zID4gMyAmJiAhc3BhY2luZykgew0KLSAgICAgICAgICAgIGNoYXJTcGFjZSA9IDA7DQotICAgICAgICB9DQotICAgICAgICBpZigoc3BhY2luZyB8fCBjaGFyU3BhY2UpICYmIGl0ZW1faW5kZXggPiAwKSB7DQotICAgICAgICAgICAgaW50IGxhc3Rfd2lkdGggPSAwOw0KLSAgICAgICAgICAgIEZYX0ZMT0FUIGZvbnRzaXplX2ggPSBwT2JqLT5tX1RleHRTdGF0ZS5HZXRGb250U2l6ZUgoKTsNCi0gICAgICAgICAgICBGWF9EV09SRCBzcGFjZV9jaGFyY29kZSA9IHBGb250LT5DaGFyQ29kZUZyb21Vbmljb2RlKCcgJyk7DQotICAgICAgICAgICAgRlhfRkxPQVQgdGhyZXNob2xkID0gMDsNCi0gICAgICAgICAgICBpZiAoc3BhY2VfY2hhcmNvZGUgIT0gLTEpIHsNCi0gICAgICAgICAgICAgICAgdGhyZXNob2xkID0gZm9udHNpemVfaCAqIHBGb250LT5HZXRDaGFyV2lkdGhGKHNwYWNlX2NoYXJjb2RlKSAvIDEwMDAgOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZih0aHJlc2hvbGQgPiBmb250c2l6ZV9oIC8gMykgew0KLSAgICAgICAgICAgICAgICB0aHJlc2hvbGQgPSAwOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHRocmVzaG9sZCAvPSAyOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAodGhyZXNob2xkID09IDApIHsNCi0gICAgICAgICAgICAgICAgdGhyZXNob2xkID0gZm9udHNpemVfaDsNCi0gICAgICAgICAgICAgICAgaW50IHRoaXNfd2lkdGggPSBGWFNZU19hYnMoR2V0Q2hhcldpZHRoKGl0ZW0ubV9DaGFyQ29kZSwgcEZvbnQpKTsNCi0gICAgICAgICAgICAgICAgdGhyZXNob2xkID0gdGhpc193aWR0aCA+IGxhc3Rfd2lkdGggPyAoRlhfRkxPQVQpdGhpc193aWR0aCA6IChGWF9GTE9BVClsYXN0X3dpZHRoOw0KLSAgICAgICAgICAgICAgICBpbnQgbkRpdmlkZSA9IDY7DQotICAgICAgICAgICAgICAgIGlmICh0aHJlc2hvbGQgPCAzMDApIHsNCi0gICAgICAgICAgICAgICAgICAgIG5EaXZpZGUgPSAyOw0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRocmVzaG9sZCA8IDUwMCkgew0KLSAgICAgICAgICAgICAgICAgICAgbkRpdmlkZSA9IDQ7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhyZXNob2xkIDwgNzAwKSB7DQotICAgICAgICAgICAgICAgICAgICBuRGl2aWRlID0gNTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB0aHJlc2hvbGQgPSB0aHJlc2hvbGQgLyBuRGl2aWRlOw0KLSAgICAgICAgICAgICAgICB0aHJlc2hvbGQgPSBmb250c2l6ZV9oICogdGhyZXNob2xkIC8gMTAwMDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYoY2hhclNwYWNlID4gMC4wMDEpIHsNCi0gICAgICAgICAgICAgICAgc3BhY2luZyArPSBtYXRyaXguVHJhbnNmb3JtRGlzdGFuY2UoY2hhclNwYWNlKTsNCi0gICAgICAgICAgICB9IGVsc2UgaWYoY2hhclNwYWNlIDwgLTAuMDAxKSB7DQotICAgICAgICAgICAgICAgIHNwYWNpbmcgLT0gbWF0cml4LlRyYW5zZm9ybURpc3RhbmNlKEZYU1lTX2ZhYnMoY2hhclNwYWNlKSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmICh0aHJlc2hvbGQgJiYgKHNwYWNpbmcgJiYgc3BhY2luZyA+PSB0aHJlc2hvbGQpICkgew0KLSAgICAgICAgICAgICAgICBtX0J1ZmZlci5BcHBlbmRDaGFyKEwnICcpOw0KLSAgICAgICAgICAgICAgICBpZiAobV9wT2JqQXJyYXkpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fcE9iakFycmF5LT5BZGQoTlVMTCk7DQotICAgICAgICAgICAgICAgICAgICBtX3BPYmpBcnJheS0+QWRkKE5VTEwpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChpdGVtLm1fQ2hhckNvZGUgPT0gKEZYX0RXT1JEKSAtIDEpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHNwYWNpbmcgPSAwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgdW5pY29kZV9zdHIgPSBwRm9udC0+VW5pY29kZUZyb21DaGFyQ29kZShpdGVtLm1fQ2hhckNvZGUpOw0KLSAgICAgICAgaWYgKHVuaWNvZGVfc3RyLklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgIG1fQnVmZmVyLkFwcGVuZENoYXIoKEZYX1dDSEFSKWl0ZW0ubV9DaGFyQ29kZSk7DQotICAgICAgICAgICAgaWYgKG1fcE9iakFycmF5KSB7DQotICAgICAgICAgICAgICAgIG1fcE9iakFycmF5LT5BZGQoKHZvaWQqKXBPYmopOw0KLSAgICAgICAgICAgICAgICBtX3BPYmpBcnJheS0+QWRkKCh2b2lkKikoRlhfSU5UUFRSKWl0ZW1faW5kZXgpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbV9CdWZmZXIgPDwgdW5pY29kZV9zdHI7DQotICAgICAgICAgICAgaWYgKG1fcE9iakFycmF5KSB7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdW5pY29kZV9zdHIuR2V0TGVuZ3RoKCk7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fcE9iakFycmF5LT5BZGQoKHZvaWQqKXBPYmopOw0KLSAgICAgICAgICAgICAgICAgICAgbV9wT2JqQXJyYXktPkFkZCgodm9pZCopKEZYX0lOVFBUUilpdGVtX2luZGV4KTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLXZvaWQgX1BERl9HZXRUZXh0U3RyZWFtX1VuaWNvZGUoQ0ZYX1dpZGVUZXh0QnVmJiBidWZmZXIsIENQREZfUGFnZU9iamVjdHMqIHBQYWdlLCBGWF9CT09MIGJVc2VMRiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9QdHJBcnJheSogcE9iakFycmF5KQ0KLXsNCi0gICAgQ1BERl9UZXh0U3RyZWFtIHRleHRzdHJlYW0oYnVmZmVyLCBiVXNlTEYsIHBPYmpBcnJheSk7DQotICAgIEZYX1BPU0lUSU9OIHBvcyA9IHBQYWdlLT5HZXRGaXJzdE9iamVjdFBvc2l0aW9uKCk7DQotICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgIENQREZfUGFnZU9iamVjdCogcE9iamVjdCA9IHBQYWdlLT5HZXROZXh0T2JqZWN0KHBvcyk7DQotICAgICAgICBpZiAocE9iamVjdCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAocE9iamVjdC0+bV9UeXBlICE9IFBERlBBR0VfVEVYVCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgdGV4dHN0cmVhbS5Qcm9jZXNzT2JqZWN0KChDUERGX1RleHRPYmplY3QqKXBPYmplY3QsIEZBTFNFKTsNCi0gICAgfQ0KLX0NCi1DRlhfV2lkZVN0cmluZyBQREZfR2V0Rmlyc3RUZXh0TGluZV9Vbmljb2RlKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfRGljdGlvbmFyeSogcFBhZ2UpDQotew0KLSAgICBDRlhfV2lkZVRleHRCdWYgYnVmZmVyOw0KLSAgICBidWZmZXIuRXN0aW1hdGVTaXplKDAsIDEwMjQpOw0KLSAgICBDUERGX1BhZ2UgcGFnZTsNCi0gICAgcGFnZS5Mb2FkKHBEb2MsIHBQYWdlKTsNCi0gICAgQ1BERl9QYXJzZU9wdGlvbnMgb3B0aW9uczsNCi0gICAgb3B0aW9ucy5tX2JUZXh0T25seSA9IFRSVUU7DQotICAgIG9wdGlvbnMubV9iU2VwYXJhdGVGb3JtID0gRkFMU0U7DQotICAgIHBhZ2UuUGFyc2VDb250ZW50KCZvcHRpb25zKTsNCi0gICAgQ1BERl9UZXh0U3RyZWFtIHRleHRzdHJlYW0oYnVmZmVyLCBGQUxTRSwgTlVMTCk7DQotICAgIEZYX1BPU0lUSU9OIHBvcyA9IHBhZ2UuR2V0Rmlyc3RPYmplY3RQb3NpdGlvbigpOw0KLSAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICBDUERGX1BhZ2VPYmplY3QqIHBPYmplY3QgPSBwYWdlLkdldE5leHRPYmplY3QocG9zKTsNCi0gICAgICAgIGlmIChwT2JqZWN0LT5tX1R5cGUgIT0gUERGUEFHRV9URVhUKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAodGV4dHN0cmVhbS5Qcm9jZXNzT2JqZWN0KChDUERGX1RleHRPYmplY3QqKXBPYmplY3QsIFRSVUUpKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIGJ1ZmZlci5HZXRXaWRlU3RyaW5nKCk7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlb2JqLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mcGRmdGV4dC9mcGRmX3RleHQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlLmgiCitjbGFzcyBDUERGX1RleHRTdHJlYW0gOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENQREZfVGV4dFN0cmVhbShDRlhfV2lkZVRleHRCdWYmIGJ1ZmZlciwgRlhfQk9PTCBiVXNlTEYsIENGWF9QdHJBcnJheSogcE9iakFycmF5KTsKKyAgICB+Q1BERl9UZXh0U3RyZWFtKCkge30KKyAgICBGWF9CT09MIFByb2Nlc3NPYmplY3QoY29uc3QgQ1BERl9UZXh0T2JqZWN0KiBwT2JqLCBGWF9CT09MIGJGaXJzdExpbmUpOworICAgIENGWF9XaWRlVGV4dEJ1ZiYJbV9CdWZmZXI7CisgICAgRlhfQk9PTAkJCQltX2JVc2VMRjsKKyAgICBDRlhfUHRyQXJyYXkqCQltX3BPYmpBcnJheTsKKyAgICBjb25zdCBDUERGX1RleHRPYmplY3QqCW1fcExhc3RPYmo7Cit9OworQ1BERl9UZXh0U3RyZWFtOjpDUERGX1RleHRTdHJlYW0oQ0ZYX1dpZGVUZXh0QnVmJiBidWZmZXIsIEZYX0JPT0wgYlVzZUxGLCBDRlhfUHRyQXJyYXkqIHBPYmpBcnJheSkgOiBtX0J1ZmZlcihidWZmZXIpCit7CisgICAgbV9wTGFzdE9iaiA9IE5VTEw7CisgICAgbV9iVXNlTEYgPSBiVXNlTEY7CisgICAgbV9wT2JqQXJyYXkgPSBwT2JqQXJyYXk7Cit9CitGWF9CT09MIEZQREZUZXh0X0lzU2FtZVRleHRPYmplY3QoY29uc3QgQ1BERl9UZXh0T2JqZWN0KiBwVGV4dE9iajEsIGNvbnN0IENQREZfVGV4dE9iamVjdCogcFRleHRPYmoyKQoreworICAgIGlmICghcFRleHRPYmoxIHx8ICFwVGV4dE9iajIpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDRlhfRmxvYXRSZWN0IHJjUHJlT2JqKHBUZXh0T2JqMi0+bV9MZWZ0LCBwVGV4dE9iajItPm1fQm90dG9tLCBwVGV4dE9iajItPm1fUmlnaHQsIHBUZXh0T2JqMi0+bV9Ub3ApOworICAgIENGWF9GbG9hdFJlY3QgcmNDdXJPYmoocFRleHRPYmoxLT5tX0xlZnQsIHBUZXh0T2JqMS0+bV9Cb3R0b20sIHBUZXh0T2JqMS0+bV9SaWdodCwgcFRleHRPYmoxLT5tX1RvcCk7CisgICAgaWYgKHJjUHJlT2JqLklzRW1wdHkoKSAmJiByY0N1ck9iai5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGlmICghcmNQcmVPYmouSXNFbXB0eSgpIHx8ICFyY0N1ck9iai5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmNQcmVPYmouSW50ZXJzZWN0KHJjQ3VyT2JqKTsKKyAgICAgICAgaWYgKHJjUHJlT2JqLklzRW1wdHkoKSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmIChGWFNZU19mYWJzKHJjUHJlT2JqLldpZHRoKCkgLSByY0N1ck9iai5XaWR0aCgpKSA+IHJjQ3VyT2JqLldpZHRoKCkgLyAyKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBUZXh0T2JqMi0+R2V0Rm9udFNpemUoKSAhPSBwVGV4dE9iajEtPkdldEZvbnRTaXplKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpbnQgblByZUNvdW50ID0gcFRleHRPYmoyLT5Db3VudEl0ZW1zKCk7CisgICAgaW50IG5DdXJDb3VudCA9IHBUZXh0T2JqMS0+Q291bnRJdGVtcygpOworICAgIGlmIChuUHJlQ291bnQgIT0gbkN1ckNvdW50KSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuUHJlQ291bnQ7IGkrKykgeworICAgICAgICBDUERGX1RleHRPYmplY3RJdGVtIGl0ZW1QZXIsIGl0ZW1DdXI7CisgICAgICAgIHBUZXh0T2JqMi0+R2V0SXRlbUluZm8oaSwgJml0ZW1QZXIpOworICAgICAgICBwVGV4dE9iajEtPkdldEl0ZW1JbmZvKGksICZpdGVtQ3VyKTsKKyAgICAgICAgaWYgKGl0ZW1DdXIubV9DaGFyQ29kZSAhPSBpdGVtUGVyLm1fQ2hhckNvZGUpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK2ludCBHZXRDaGFyV2lkdGgoRlhfRFdPUkQgY2hhckNvZGUsIENQREZfRm9udCogcEZvbnQpCit7CisgICAgaWYoY2hhckNvZGUgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGludCB3ID0gcEZvbnQtPkdldENoYXJXaWR0aEYoY2hhckNvZGUpOworICAgIGlmKHcgPT0gMCkgeworICAgICAgICBDRlhfQnl0ZVN0cmluZyBzdHI7CisgICAgICAgIHBGb250LT5BcHBlbmRDaGFyKHN0ciwgY2hhckNvZGUpOworICAgICAgICB3ID0gcEZvbnQtPkdldFN0cmluZ1dpZHRoKHN0ciwgMSk7CisgICAgICAgIGlmKHcgPT0gMCkgeworICAgICAgICAgICAgRlhfUkVDVCBCQm94OworICAgICAgICAgICAgcEZvbnQtPkdldENoYXJCQm94KGNoYXJDb2RlLCBCQm94KTsKKyAgICAgICAgICAgIHcgPSBCQm94LnJpZ2h0IC0gQkJveC5sZWZ0OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB3OworfQoraW50IEZQREZUZXh0X1Byb2Nlc3NJbnRlck9iaihjb25zdCBDUERGX1RleHRPYmplY3QqIHBQcmV2T2JqLCBjb25zdCBDUERGX1RleHRPYmplY3QqIHBPYmopCit7CisgICAgaWYoRlBERlRleHRfSXNTYW1lVGV4dE9iamVjdChwUHJldk9iaiwgcE9iaikpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBDUERGX1RleHRPYmplY3RJdGVtIGl0ZW07CisgICAgaW50IG5JdGVtID0gcFByZXZPYmotPkNvdW50SXRlbXMoKTsKKyAgICBwUHJldk9iai0+R2V0SXRlbUluZm8obkl0ZW0gLSAxLCAmaXRlbSk7CisgICAgRlhfV0NIQVIgcHJlQ2hhciA9IDAsIGN1ckNoYXIgPSAwOworICAgIENGWF9XaWRlU3RyaW5nIHdzdHIgPSBwUHJldk9iai0+R2V0Rm9udCgpLT5Vbmljb2RlRnJvbUNoYXJDb2RlKGl0ZW0ubV9DaGFyQ29kZSk7CisgICAgaWYod3N0ci5HZXRMZW5ndGgoKSkgeworICAgICAgICBwcmVDaGFyID0gd3N0ci5HZXRBdCgwKTsKKyAgICB9CisgICAgRlhfRkxPQVQgbGFzdF9wb3MgPSBpdGVtLm1fT3JpZ2luWDsKKyAgICBpbnQgbkxhc3RXaWR0aCA9IEdldENoYXJXaWR0aChpdGVtLm1fQ2hhckNvZGUsIHBQcmV2T2JqLT5HZXRGb250KCkpOworICAgIEZYX0ZMT0FUIGxhc3Rfd2lkdGggPSBuTGFzdFdpZHRoICogcFByZXZPYmotPkdldEZvbnRTaXplKCkgLyAxMDAwOworICAgIGxhc3Rfd2lkdGggPSBGWFNZU19mYWJzKGxhc3Rfd2lkdGgpOworICAgIHBPYmotPkdldEl0ZW1JbmZvKDAsICZpdGVtKTsKKyAgICB3c3RyID0gcE9iai0+R2V0Rm9udCgpLT5Vbmljb2RlRnJvbUNoYXJDb2RlKGl0ZW0ubV9DaGFyQ29kZSk7CisgICAgaWYod3N0ci5HZXRMZW5ndGgoKSkgeworICAgICAgICBjdXJDaGFyID0gd3N0ci5HZXRBdCgwKTsKKyAgICB9CisgICAgaW50IG5UaGlzV2lkdGggPSBHZXRDaGFyV2lkdGgoaXRlbS5tX0NoYXJDb2RlLCBwT2JqLT5HZXRGb250KCkpOworICAgIEZYX0ZMT0FUIHRoaXNfd2lkdGggPSBuVGhpc1dpZHRoICogcE9iai0+R2V0Rm9udFNpemUoKSAvIDEwMDA7CisgICAgdGhpc193aWR0aCA9IEZYU1lTX2ZhYnModGhpc193aWR0aCk7CisgICAgRlhfRkxPQVQgdGhyZXNob2xkID0gbGFzdF93aWR0aCA+IHRoaXNfd2lkdGggPyBsYXN0X3dpZHRoIC8gNCA6IHRoaXNfd2lkdGggLyA0OworICAgIENGWF9BZmZpbmVNYXRyaXggcHJldl9tYXRyaXgsIHByZXZfcmV2ZXJzZTsKKyAgICBwUHJldk9iai0+R2V0VGV4dE1hdHJpeCgmcHJldl9tYXRyaXgpOworICAgIHByZXZfcmV2ZXJzZS5TZXRSZXZlcnNlKHByZXZfbWF0cml4KTsKKyAgICBGWF9GTE9BVCB4ID0gcE9iai0+R2V0UG9zWCgpLCB5ID0gcE9iai0+R2V0UG9zWSgpOworICAgIHByZXZfcmV2ZXJzZS5UcmFuc2Zvcm0oeCwgeSk7CisgICAgaWYgKEZYU1lTX2ZhYnMoeSkgPiB0aHJlc2hvbGQgKiAyKSB7CisgICAgICAgIHJldHVybiAyOworICAgIH0KKyAgICB0aHJlc2hvbGQgPSAoRlhfRkxPQVQpKG5MYXN0V2lkdGggPiBuVGhpc1dpZHRoID8gbkxhc3RXaWR0aCA6IG5UaGlzV2lkdGgpOworICAgIHRocmVzaG9sZCA9IHRocmVzaG9sZCA+IDQwMCA/ICh0aHJlc2hvbGQgPCA3MDAgPyB0aHJlc2hvbGQgLyA0IDogIHRocmVzaG9sZCAvIDUpIDogKHRocmVzaG9sZCAvIDIpOworICAgIHRocmVzaG9sZCAqPSBuTGFzdFdpZHRoID4gblRoaXNXaWR0aCA/IEZYU1lTX2ZhYnMocFByZXZPYmotPkdldEZvbnRTaXplKCkpIDogRlhTWVNfZmFicyhwT2JqLT5HZXRGb250U2l6ZSgpKTsKKyAgICB0aHJlc2hvbGQgLz0gMTAwMDsKKyAgICBpZiAoRlhTWVNfZmFicyhsYXN0X3BvcyArIGxhc3Rfd2lkdGggLSB4KSA+IHRocmVzaG9sZCAmJiBjdXJDaGFyICE9IEwnICcgJiYgcHJlQ2hhciAhPSBMJyAnKQorICAgICAgICBpZihjdXJDaGFyICE9IEwnICcgJiYgcHJlQ2hhciAhPSBMJyAnKSB7CisgICAgICAgICAgICBpZigoeCAtIGxhc3RfcG9zIC0gbGFzdF93aWR0aCkgPiB0aHJlc2hvbGQgfHwgKGxhc3RfcG9zIC0geCAtIGxhc3Rfd2lkdGgpID4gdGhyZXNob2xkKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZih4IDwgMCAmJiAobGFzdF9wb3MgLSB4IC0gbGFzdF93aWR0aCkgPiB0aHJlc2hvbGQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKCh4IC0gbGFzdF9wb3MgLSBsYXN0X3dpZHRoKSA+IHRoaXNfd2lkdGggfHwgKHggLSBsYXN0X3BvcyAtIHRoaXNfd2lkdGgpID4gbGFzdF93aWR0aCApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIGlmKGxhc3RfcG9zICsgbGFzdF93aWR0aCA+IHggKyB0aGlzX3dpZHRoICYmIGN1ckNoYXIgPT0gTCcgJykgeworICAgICAgICByZXR1cm4gMzsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CitGWF9CT09MIENQREZfVGV4dFN0cmVhbTo6UHJvY2Vzc09iamVjdChjb25zdCBDUERGX1RleHRPYmplY3QqIHBPYmosIEZYX0JPT0wgYkZpcnN0TGluZSkKK3sKKyAgICBpZihwT2JqLT5tX0JvdHRvbSA+IDM4MCAmJiBwT2JqLT5tX0xlZnQgPCA0NSAmJiBwT2JqLT5tX1RvcCA8IDQwMikgeworICAgICAgICBpbnQgaSA9IDA7CisgICAgfQorICAgIENQREZfRm9udCogcEZvbnQgPSBwT2JqLT5HZXRGb250KCk7CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXg7CisgICAgcE9iai0+R2V0VGV4dE1hdHJpeCgmbWF0cml4KTsKKyAgICBGWF9GTE9BVCBmcyA9IHBPYmotPkdldEZvbnRTaXplKCk7CisgICAgaW50IGl0ZW1faW5kZXggPSAwOworICAgIGlmIChtX3BMYXN0T2JqKSB7CisgICAgICAgIGludCByZXN1bHQgPSBGUERGVGV4dF9Qcm9jZXNzSW50ZXJPYmoobV9wTGFzdE9iaiwgcE9iaik7CisgICAgICAgIGlmIChyZXN1bHQgPT0gMikgeworICAgICAgICAgICAgaW50IGxlbiA9IG1fQnVmZmVyLkdldExlbmd0aCgpOworICAgICAgICAgICAgaWYgKGxlbiAmJiBtX2JVc2VMRiAmJiBtX0J1ZmZlci5HZXRCdWZmZXIoKVtsZW4gLSAxXSA9PSBMJy0nKSB7CisgICAgICAgICAgICAgICAgbV9CdWZmZXIuRGVsZXRlKGxlbiAtIDEsIDEpOworICAgICAgICAgICAgICAgIGlmIChtX3BPYmpBcnJheSkgeworICAgICAgICAgICAgICAgICAgICBtX3BPYmpBcnJheS0+UmVtb3ZlQXQoKGxlbiAtIDEpICogMiwgMik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoYkZpcnN0TGluZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1fYlVzZUxGKSB7CisgICAgICAgICAgICAgICAgICAgIG1fQnVmZmVyLkFwcGVuZENoYXIoTCdccicpOworICAgICAgICAgICAgICAgICAgICBtX0J1ZmZlci5BcHBlbmRDaGFyKEwnXG4nKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fcE9iakFycmF5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BPYmpBcnJheS0+QWRkKE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbV9CdWZmZXIuQXBwZW5kQ2hhcignICcpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9wT2JqQXJyYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcE9iakFycmF5LT5BZGQoTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BPYmpBcnJheS0+QWRkKE5VTEwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSAxKSB7CisgICAgICAgICAgICBtX0J1ZmZlci5BcHBlbmRDaGFyKEwnICcpOworICAgICAgICAgICAgaWYgKG1fcE9iakFycmF5KSB7CisgICAgICAgICAgICAgICAgbV9wT2JqQXJyYXktPkFkZChOVUxMKTsKKyAgICAgICAgICAgICAgICBtX3BPYmpBcnJheS0+QWRkKE5VTEwpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSAtMSkgeworICAgICAgICAgICAgbV9wTGFzdE9iaiA9IHBPYmo7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IDMpIHsKKyAgICAgICAgICAgIGl0ZW1faW5kZXggPSAxOworICAgICAgICB9CisgICAgfQorICAgIG1fcExhc3RPYmogPSBwT2JqOworICAgIGludCBuSXRlbXMgPSBwT2JqLT5Db3VudEl0ZW1zKCk7CisgICAgRlhfRkxPQVQgSWdub3Jla2VybmluZyA9IDA7CisgICAgZm9yKGludCBpID0gMTsgaSA8IG5JdGVtcyAtIDE7IGkgKz0gMikgeworICAgICAgICBDUERGX1RleHRPYmplY3RJdGVtIGl0ZW07CisgICAgICAgIHBPYmotPkdldEl0ZW1JbmZvKGksICZpdGVtKTsKKyAgICAgICAgaWYgKGl0ZW0ubV9DaGFyQ29kZSA9PSAoRlhfRFdPUkQpIC0gMSkgeworICAgICAgICAgICAgaWYoaSA9PSAxKSB7CisgICAgICAgICAgICAgICAgSWdub3Jla2VybmluZyA9IGl0ZW0ubV9PcmlnaW5YOworICAgICAgICAgICAgfSBlbHNlIGlmKElnbm9yZWtlcm5pbmcgPiBpdGVtLm1fT3JpZ2luWCkgeworICAgICAgICAgICAgICAgIElnbm9yZWtlcm5pbmcgPSBpdGVtLm1fT3JpZ2luWDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIElnbm9yZWtlcm5pbmcgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgRlhfRkxPQVQgc3BhY2luZyA9IDA7CisgICAgZm9yICg7IGl0ZW1faW5kZXggPCBuSXRlbXM7IGl0ZW1faW5kZXggKyspIHsKKyAgICAgICAgQ1BERl9UZXh0T2JqZWN0SXRlbSBpdGVtOworICAgICAgICBwT2JqLT5HZXRJdGVtSW5mbyhpdGVtX2luZGV4LCAmaXRlbSk7CisgICAgICAgIGlmIChpdGVtLm1fQ2hhckNvZGUgPT0gKEZYX0RXT1JEKSAtIDEpIHsKKyAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIHdzdHIgPSBtX0J1ZmZlci5HZXRXaWRlU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAod3N0ci5Jc0VtcHR5KCkgfHwgd3N0ci5HZXRBdCh3c3RyLkdldExlbmd0aCgpIC0gMSkgPT0gTCcgJykgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfRkxPQVQgZm9udHNpemVfaCA9IHBPYmotPm1fVGV4dFN0YXRlLkdldEZvbnRTaXplSCgpOworICAgICAgICAgICAgc3BhY2luZyA9IC1mb250c2l6ZV9oICogKGl0ZW0ubV9PcmlnaW5YIC0gSWdub3Jla2VybmluZykgLyAxMDAwOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgRlhfRkxPQVQgY2hhclNwYWNlID0gcE9iai0+bV9UZXh0U3RhdGUuR2V0T2JqZWN0KCktPm1fQ2hhclNwYWNlOworICAgICAgICBpZihuSXRlbXMgPiAzICYmICFzcGFjaW5nKSB7CisgICAgICAgICAgICBjaGFyU3BhY2UgPSAwOworICAgICAgICB9CisgICAgICAgIGlmKChzcGFjaW5nIHx8IGNoYXJTcGFjZSkgJiYgaXRlbV9pbmRleCA+IDApIHsKKyAgICAgICAgICAgIGludCBsYXN0X3dpZHRoID0gMDsKKyAgICAgICAgICAgIEZYX0ZMT0FUIGZvbnRzaXplX2ggPSBwT2JqLT5tX1RleHRTdGF0ZS5HZXRGb250U2l6ZUgoKTsKKyAgICAgICAgICAgIEZYX0RXT1JEIHNwYWNlX2NoYXJjb2RlID0gcEZvbnQtPkNoYXJDb2RlRnJvbVVuaWNvZGUoJyAnKTsKKyAgICAgICAgICAgIEZYX0ZMT0FUIHRocmVzaG9sZCA9IDA7CisgICAgICAgICAgICBpZiAoc3BhY2VfY2hhcmNvZGUgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICB0aHJlc2hvbGQgPSBmb250c2l6ZV9oICogcEZvbnQtPkdldENoYXJXaWR0aEYoc3BhY2VfY2hhcmNvZGUpIC8gMTAwMCA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZih0aHJlc2hvbGQgPiBmb250c2l6ZV9oIC8gMykgeworICAgICAgICAgICAgICAgIHRocmVzaG9sZCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRocmVzaG9sZCAvPSAyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRocmVzaG9sZCA9PSAwKSB7CisgICAgICAgICAgICAgICAgdGhyZXNob2xkID0gZm9udHNpemVfaDsKKyAgICAgICAgICAgICAgICBpbnQgdGhpc193aWR0aCA9IEZYU1lTX2FicyhHZXRDaGFyV2lkdGgoaXRlbS5tX0NoYXJDb2RlLCBwRm9udCkpOworICAgICAgICAgICAgICAgIHRocmVzaG9sZCA9IHRoaXNfd2lkdGggPiBsYXN0X3dpZHRoID8gKEZYX0ZMT0FUKXRoaXNfd2lkdGggOiAoRlhfRkxPQVQpbGFzdF93aWR0aDsKKyAgICAgICAgICAgICAgICBpbnQgbkRpdmlkZSA9IDY7CisgICAgICAgICAgICAgICAgaWYgKHRocmVzaG9sZCA8IDMwMCkgeworICAgICAgICAgICAgICAgICAgICBuRGl2aWRlID0gMjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRocmVzaG9sZCA8IDUwMCkgeworICAgICAgICAgICAgICAgICAgICBuRGl2aWRlID0gNDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRocmVzaG9sZCA8IDcwMCkgeworICAgICAgICAgICAgICAgICAgICBuRGl2aWRlID0gNTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhyZXNob2xkID0gdGhyZXNob2xkIC8gbkRpdmlkZTsKKyAgICAgICAgICAgICAgICB0aHJlc2hvbGQgPSBmb250c2l6ZV9oICogdGhyZXNob2xkIC8gMTAwMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKGNoYXJTcGFjZSA+IDAuMDAxKSB7CisgICAgICAgICAgICAgICAgc3BhY2luZyArPSBtYXRyaXguVHJhbnNmb3JtRGlzdGFuY2UoY2hhclNwYWNlKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZihjaGFyU3BhY2UgPCAtMC4wMDEpIHsKKyAgICAgICAgICAgICAgICBzcGFjaW5nIC09IG1hdHJpeC5UcmFuc2Zvcm1EaXN0YW5jZShGWFNZU19mYWJzKGNoYXJTcGFjZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRocmVzaG9sZCAmJiAoc3BhY2luZyAmJiBzcGFjaW5nID49IHRocmVzaG9sZCkgKSB7CisgICAgICAgICAgICAgICAgbV9CdWZmZXIuQXBwZW5kQ2hhcihMJyAnKTsKKyAgICAgICAgICAgICAgICBpZiAobV9wT2JqQXJyYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wT2JqQXJyYXktPkFkZChOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgbV9wT2JqQXJyYXktPkFkZChOVUxMKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaXRlbS5tX0NoYXJDb2RlID09IChGWF9EV09SRCkgLSAxKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzcGFjaW5nID0gMDsKKyAgICAgICAgfQorICAgICAgICBDRlhfV2lkZVN0cmluZyB1bmljb2RlX3N0ciA9IHBGb250LT5Vbmljb2RlRnJvbUNoYXJDb2RlKGl0ZW0ubV9DaGFyQ29kZSk7CisgICAgICAgIGlmICh1bmljb2RlX3N0ci5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fQnVmZmVyLkFwcGVuZENoYXIoKEZYX1dDSEFSKWl0ZW0ubV9DaGFyQ29kZSk7CisgICAgICAgICAgICBpZiAobV9wT2JqQXJyYXkpIHsKKyAgICAgICAgICAgICAgICBtX3BPYmpBcnJheS0+QWRkKCh2b2lkKilwT2JqKTsKKyAgICAgICAgICAgICAgICBtX3BPYmpBcnJheS0+QWRkKCh2b2lkKikoRlhfSU5UUFRSKWl0ZW1faW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9CdWZmZXIgPDwgdW5pY29kZV9zdHI7CisgICAgICAgICAgICBpZiAobV9wT2JqQXJyYXkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVuaWNvZGVfc3RyLkdldExlbmd0aCgpOyBpICsrKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcE9iakFycmF5LT5BZGQoKHZvaWQqKXBPYmopOworICAgICAgICAgICAgICAgICAgICBtX3BPYmpBcnJheS0+QWRkKCh2b2lkKikoRlhfSU5UUFRSKWl0ZW1faW5kZXgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9Cit2b2lkIF9QREZfR2V0VGV4dFN0cmVhbV9Vbmljb2RlKENGWF9XaWRlVGV4dEJ1ZiYgYnVmZmVyLCBDUERGX1BhZ2VPYmplY3RzKiBwUGFnZSwgRlhfQk9PTCBiVXNlTEYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9QdHJBcnJheSogcE9iakFycmF5KQoreworICAgIENQREZfVGV4dFN0cmVhbSB0ZXh0c3RyZWFtKGJ1ZmZlciwgYlVzZUxGLCBwT2JqQXJyYXkpOworICAgIEZYX1BPU0lUSU9OIHBvcyA9IHBQYWdlLT5HZXRGaXJzdE9iamVjdFBvc2l0aW9uKCk7CisgICAgd2hpbGUgKHBvcykgeworICAgICAgICBDUERGX1BhZ2VPYmplY3QqIHBPYmplY3QgPSBwUGFnZS0+R2V0TmV4dE9iamVjdChwb3MpOworICAgICAgICBpZiAocE9iamVjdCA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocE9iamVjdC0+bV9UeXBlICE9IFBERlBBR0VfVEVYVCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgdGV4dHN0cmVhbS5Qcm9jZXNzT2JqZWN0KChDUERGX1RleHRPYmplY3QqKXBPYmplY3QsIEZBTFNFKTsKKyAgICB9Cit9CitDRlhfV2lkZVN0cmluZyBQREZfR2V0Rmlyc3RUZXh0TGluZV9Vbmljb2RlKENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZfRGljdGlvbmFyeSogcFBhZ2UpCit7CisgICAgQ0ZYX1dpZGVUZXh0QnVmIGJ1ZmZlcjsKKyAgICBidWZmZXIuRXN0aW1hdGVTaXplKDAsIDEwMjQpOworICAgIENQREZfUGFnZSBwYWdlOworICAgIHBhZ2UuTG9hZChwRG9jLCBwUGFnZSk7CisgICAgQ1BERl9QYXJzZU9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLm1fYlRleHRPbmx5ID0gVFJVRTsKKyAgICBvcHRpb25zLm1fYlNlcGFyYXRlRm9ybSA9IEZBTFNFOworICAgIHBhZ2UuUGFyc2VDb250ZW50KCZvcHRpb25zKTsKKyAgICBDUERGX1RleHRTdHJlYW0gdGV4dHN0cmVhbShidWZmZXIsIEZBTFNFLCBOVUxMKTsKKyAgICBGWF9QT1NJVElPTiBwb3MgPSBwYWdlLkdldEZpcnN0T2JqZWN0UG9zaXRpb24oKTsKKyAgICB3aGlsZSAocG9zKSB7CisgICAgICAgIENQREZfUGFnZU9iamVjdCogcE9iamVjdCA9IHBhZ2UuR2V0TmV4dE9iamVjdChwb3MpOworICAgICAgICBpZiAocE9iamVjdC0+bV9UeXBlICE9IFBERlBBR0VfVEVYVCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHRzdHJlYW0uUHJvY2Vzc09iamVjdCgoQ1BERl9UZXh0T2JqZWN0KilwT2JqZWN0LCBUUlVFKSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGJ1ZmZlci5HZXRXaWRlU3RyaW5nKCk7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmdGV4dC90ZXh0X2ludC5oIGIvY29yZS9zcmMvZnBkZnRleHQvdGV4dF9pbnQuaAppbmRleCBhMGFmNTFlLi4zOWRjNzIxIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9mcGRmdGV4dC90ZXh0X2ludC5oCisrKyBiL2NvcmUvc3JjL2ZwZGZ0ZXh0L3RleHRfaW50LmgKQEAgLTEsMjE1ICsxLDIxNSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfUERGX1RFWFRfSU5UX0hfDQotI2RlZmluZSBfUERGX1RFWFRfSU5UX0hfDQotY2xhc3MgQ1BERl9UZXh0UGFyc2VPcHRpb25zIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDUERGX1RleHRQYXJzZU9wdGlvbnMoKTsNCi0gICAgRlhfQk9PTAkJCW1fYkNoZWNrT2JqZWN0T3JkZXI7DQotICAgIEZYX0JPT0wJCQltX2JDaGVja0RpcmVjdGlvbjsNCi0gICAgaW50CQkJCW1fbkNoZWNrU2FtZU9iamVjdDsNCi19Ow0KLWNsYXNzIENQREZfVGV4dFBhZ2U7DQotY2xhc3MgQ1BERl9MaW5rRXh0cmFjdDsNCi1jbGFzcyBDUERGX1RleHRQYWdlRmluZDsNCi1jbGFzcyBDUERGX0RvY1Byb2dyZXNzaXZlU2VhcmNoOw0KLSNkZWZpbmUgRlBERlRFWFRfQ0hBUl9FUlJPUgkJCS0xDQotI2RlZmluZSBGUERGVEVYVF9DSEFSX05PUk1BTAkJMA0KLSNkZWZpbmUgRlBERlRFWFRfQ0hBUl9HRU5FUkFURUQJCTENCi0jZGVmaW5lIEZQREZURVhUX0NIQVJfVU5VTklDT0RFCQkyDQotI2RlZmluZSBGUERGVEVYVF9DSEFSX0hZUEhFTgkJMw0KLSNkZWZpbmUgRlBERlRFWFRfQ0hBUl9QSUVDRQkJCTQNCi0jZGVmaW5lIEZQREZURVhUX01DX1BBU1MJCQkwDQotI2RlZmluZSBGUERGVEVYVF9NQ19ET05FCQkJMQ0KLSNkZWZpbmUgRlBERlRFWFRfTUNfREVMQVkJCQkyDQotdHlwZWRlZiBzdHJ1Y3QgX1BBR0VDSEFSX0lORk86IHB1YmxpYyBDRlhfT2JqZWN0IHsNCi0gICAgaW50CQkJCQltX0NoYXJDb2RlOw0KLSAgICBGWF9XQ0hBUgkJCW1fVW5pY29kZTsNCi0gICAgRlhfRkxPQVQJCQltX09yaWdpblg7DQotICAgIEZYX0ZMT0FUCQkJbV9PcmlnaW5ZOw0KLSAgICBGWF9JTlQzMgkJCW1fRmxhZzsNCi0gICAgQ0ZYX0Zsb2F0UmVjdAkJbV9DaGFyQm94Ow0KLSAgICBDUERGX1RleHRPYmplY3QqCW1fcFRleHRPYmo7DQotICAgIENGWF9BZmZpbmVNYXRyaXgJbV9NYXRyaXg7DQotICAgIGludAkJCQkJbV9JbmRleDsNCi19IFBBR0VDSEFSX0lORk87DQotdHlwZWRlZglDRlhfU2VnbWVudGVkQXJyYXk8UEFHRUNIQVJfSU5GTz4gUEFHRUNIQVJfSW5mb0FycmF5Ow0KLXR5cGVkZWYgc3RydWN0IHsNCi0gICAgaW50CW1fU3RhcnQ7DQotICAgIGludCBtX25Db3VudDsNCi19IEZQREZfU0VHTUVOVDsNCi10eXBlZGVmIENGWF9BcnJheVRlbXBsYXRlPEZQREZfU0VHTUVOVD4gU0VHTUVOVF9BcnJheTsNCi10eXBlZGVmIHN0cnVjdCB7DQotICAgIENQREZfVGV4dE9iamVjdCoJbV9wVGV4dE9iajsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeAltX2Zvcm1NYXRyaXg7DQotfSBQREZURVhUX09iajsNCi10eXBlZGVmIENGWF9BcnJheVRlbXBsYXRlPFBERlRFWFRfT2JqPiBMSU5FT0JKOw0KLWNsYXNzIENQREZfVGV4dFBhZ2U6IHB1YmxpYyBJUERGX1RleHRQYWdlDQotew0KLXB1YmxpYzoNCi0gICAgQ1BERl9UZXh0UGFnZShjb25zdCBDUERGX1BhZ2UqIHBQYWdlLCBpbnQgZmxhZ3MgPSAwKTsNCi0gICAgQ1BERl9UZXh0UGFnZShjb25zdCBDUERGX1BhZ2VPYmplY3RzKiBwUGFnZSwgaW50IGZsYWdzID0gMCk7DQotICAgIENQREZfVGV4dFBhZ2UoY29uc3QgQ1BERl9QYWdlKiBwUGFnZSwgQ1BERlRleHRfUGFyc2VPcHRpb25zIFBhcnNlck9wdGlvbnMpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJCVBhcnNlVGV4dFBhZ2UoKTsNCi0gICAgdmlydHVhbCB2b2lkCQkJCQlOb3JtYWxpemVPYmplY3RzKEZYX0JPT0wgYk5vcm1hbGl6ZSk7DQotICAgIHZpcnR1YWwJRlhfQk9PTAkJCQkJSXNQYXJzZXJlZCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0lzUGFyc2VyZWQ7DQotICAgIH0NCi0gICAgdmlydHVhbCB+Q1BERl9UZXh0UGFnZSgpIHt9Ow0KLXB1YmxpYzoNCi0gICAgdmlydHVhbCBpbnQgQ2hhckluZGV4RnJvbVRleHRJbmRleChpbnQgVGV4dEluZGV4KWNvbnN0IDsNCi0gICAgdmlydHVhbCBpbnQgVGV4dEluZGV4RnJvbUNoYXJJbmRleChpbnQgQ2hhckluZGV4KWNvbnN0Ow0KLSAgICB2aXJ0dWFsIGludAkJCQkJCUNvdW50Q2hhcnMoKSBjb25zdDsNCi0gICAgdmlydHVhbAl2b2lkCQkJCQlHZXRDaGFySW5mbyhpbnQgaW5kZXgsIEZQREZfQ0hBUl9JTkZPICYgaW5mbykgY29uc3Q7DQotICAgIHZpcnR1YWwgdm9pZAkJCQkJR2V0UmVjdEFycmF5KGludCBzdGFydCwgaW50IG5Db3VudCwgQ0ZYX1JlY3RBcnJheSYgcmVjdEFycmF5KSBjb25zdDsNCi0gICAgdmlydHVhbCBpbnQJCQkJCQlHZXRJbmRleEF0UG9zKENQREZfUG9pbnQgcG9pbnQsIEZYX0ZMT0FUIHhUb3JlbGFuY2UsIEZYX0ZMT0FUIHlUb3JlbGFuY2UpIGNvbnN0Ow0KLSAgICB2aXJ0dWFsIGludAkJCQkJCUdldEluZGV4QXRQb3MoRlhfRkxPQVQgeCwgRlhfRkxPQVQgeSwgRlhfRkxPQVQgeFRvcmVsYW5jZSwNCi0gICAgICAgICAgICBGWF9GTE9BVCB5VG9yZWxhbmNlKSBjb25zdDsNCi0gICAgdmlydHVhbCBDRlhfV2lkZVN0cmluZwkJCUdldFRleHRCeVJlY3QoQ0ZYX0Zsb2F0UmVjdCByZWN0KSBjb25zdDsNCi0gICAgdmlydHVhbCB2b2lkCQkJCQlHZXRSZWN0c0FycmF5QnlSZWN0KENGWF9GbG9hdFJlY3QgcmVjdCwgQ0ZYX1JlY3RBcnJheSYgcmVzUmVjdEFycmF5KSBjb25zdDsNCi0gICAgdmlydHVhbAlpbnQJCQkJCQlHZXRPcmRlckJ5RGlyZWN0aW9uKGludCBvcmRlciwgaW50IGRpcmVjdGlvbikgY29uc3Q7DQotICAgIHZpcnR1YWwJQ0ZYX1dpZGVTdHJpbmcJCQlHZXRQYWdlVGV4dChpbnQgc3RhcnQgPSAwLCBpbnQgbkNvdW50ID0gLTEpIGNvbnN0Ow0KLQ0KLSAgICB2aXJ0dWFsIGludAkJCQkJCUNvdW50UmVjdHMoaW50IHN0YXJ0LCBpbnQgbkNvdW50KTsNCi0gICAgdmlydHVhbAl2b2lkCQkJCQlHZXRSZWN0KGludCByZWN0SW5kZXgsIEZYX0ZMT0FUJiBsZWZ0LCBGWF9GTE9BVCYgdG9wDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIEZYX0ZMT0FUJiByaWdodCwgRlhfRkxPQVQgJmJvdHRvbSkgY29uc3Q7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCQkJR2V0QmFzZWxpbmVSb3RhdGUoaW50IHJlY3RJbmRleCwgaW50JiBSb3RhdGUpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJCUdldEJhc2VsaW5lUm90YXRlKENGWF9GbG9hdFJlY3QgcmVjdCwgaW50JiBSb3RhdGUpOw0KLSAgICB2aXJ0dWFsCWludAkJCQkJCUNvdW50Qm91bmRlZFNlZ21lbnRzKEZYX0ZMT0FUIGxlZnQsIEZYX0ZMT0FUIHRvcCwNCi0gICAgICAgICAgICBGWF9GTE9BVCByaWdodCwgRlhfRkxPQVQgYm90dG9tLCBGWF9CT09MIGJDb250YWlucyA9IEZBTFNFKTsNCi0gICAgdmlydHVhbAl2b2lkCQkJCQlHZXRCb3VuZGVkU2VnbWVudChpbnQgaW5kZXgsIGludCYgc3RhcnQsIGludCYgY291bnQpIGNvbnN0Ow0KLSAgICB2aXJ0dWFsIGludAkJCQkJCUdldFdvcmRCcmVhayhpbnQgaW5kZXgsIGludCBkaXJlY3Rpb24pIGNvbnN0Ow0KLXB1YmxpYzoNCi0gICAgY29uc3QJUEFHRUNIQVJfSW5mb0FycmF5KgkJR2V0Q2hhckxpc3QoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gJm1fY2hhckxpc3Q7DQotICAgIH0NCi0gICAgc3RhdGljCUZYX0JPT0wJCQkJCUlzUmVjdEludGVyc2VjdChDRlhfRmxvYXRSZWN0IHJlY3QxLCBDRlhfRmxvYXRSZWN0IHJlY3QyKTsNCi0gICAgc3RhdGljCUZYX0JPT0wJCQkJCUlzTGV0dGVyKEZYX1dDSEFSIHVuaWNvZGUpOw0KLXByaXZhdGU6DQotICAgIEZYX0JPT0wJCQkJCQkJSXNIeXBoZW4oRlhfV0NIQVIgY3VyQ2hhcik7DQotICAgIEZYX0JPT0wJCQkJCQkJSXNDb250cm9sQ2hhcihQQUdFQ0hBUl9JTkZPKiBwQ2hhckluZm8pOw0KLSAgICBGWF9CT09MCQkJCQkJCUdldEJhc2VsaW5lUm90YXRlKGludCBzdGFydCwgaW50IGVuZCwgaW50JiBSb3RhdGUpOw0KLSAgICB2b2lkCQkJCQkJCVByb2Nlc3NPYmplY3QoKTsNCi0gICAgdm9pZAkJCQkJCQlQcm9jZXNzRm9ybU9iamVjdChDUERGX0Zvcm1PYmplY3QqCXBGb3JtT2JqLCBDRlhfQWZmaW5lTWF0cml4IGZvcm1NYXRyaXgpOw0KLSAgICB2b2lkCQkJCQkJCVByb2Nlc3NUZXh0T2JqZWN0KFBERlRFWFRfT2JqIHBPYmopOw0KLSAgICB2b2lkCQkJCQkJCVByb2Nlc3NUZXh0T2JqZWN0KENQREZfVGV4dE9iamVjdCoJcFRleHRPYmosIENGWF9BZmZpbmVNYXRyaXggZm9ybU1hdHJpeCwgRlhfUE9TSVRJT04gT2JqUG9zKTsNCi0gICAgaW50CQkJCQkJCQlQcm9jZXNzSW5zZXJ0T2JqZWN0KGNvbnN0IENQREZfVGV4dE9iamVjdCogcE9iaiwgQ0ZYX0FmZmluZU1hdHJpeCBmb3JtTWF0cml4KTsNCi0gICAgRlhfQk9PTAkJCQkJCQlHZW5lcmF0ZUNoYXJJbmZvKEZYX1dDSEFSIHVuaWNvZGUsIFBBR0VDSEFSX0lORk8mIGluZm8pOw0KLSAgICBGWF9CT09MCQkJCQkJCUlzU2FtZUFzUHJlVGV4dE9iamVjdChDUERGX1RleHRPYmplY3QqIHBUZXh0T2JqLCBGWF9QT1NJVElPTiBPYmpQb3MpOw0KLSAgICBGWF9CT09MCQkJCQkJCUlzU2FtZVRleHRPYmplY3QoQ1BERl9UZXh0T2JqZWN0KiBwVGV4dE9iajEsIENQREZfVGV4dE9iamVjdCogcFRleHRPYmoyKTsNCi0gICAgaW50CQkJCQkJCQlHZXRDaGFyV2lkdGgoRlhfRFdPUkQgY2hhckNvZGUsIENQREZfRm9udCogcEZvbnQpIGNvbnN0Ow0KLSAgICB2b2lkCQkJCQkJCUNsb3NlVGVtcExpbmUoKTsNCi0gICAgdm9pZAkJCQkJCQlPblBpZWNlKElGWF9CaWRpQ2hhciogcEJpZGksIENGWF9XaWRlU3RyaW5nJiBzdHIpOw0KLSAgICBGWF9JTlQzMglQcmVNYXJrZWRDb250ZW50KFBERlRFWFRfT2JqIHBPYmopOw0KLSAgICB2b2lkCQlQcm9jZXNzTWFya2VkQ29udGVudChQREZURVhUX09iaiBwT2JqKTsNCi0gICAgdm9pZAkJQ2hlY2tNYXJrZWRDb250ZW50T2JqZWN0KEZYX0lOVDMyJiBzdGFydCwgRlhfSU5UMzImIG5Db3VudCkgY29uc3Q7DQotICAgIHZvaWQJCUZpbmRQcmV2aW91c1RleHRPYmplY3Qodm9pZCk7DQotICAgIHZvaWQJCUFkZENoYXJJbmZvQnlMUkRpcmVjdGlvbihDRlhfV2lkZVN0cmluZyYgc3RyLCBpbnQgaSk7DQotICAgIHZvaWQJCUFkZENoYXJJbmZvQnlSTERpcmVjdGlvbihDRlhfV2lkZVN0cmluZyYgc3RyLCBpbnQgaSk7DQotICAgIEZYX0lOVDMyCUdldFRleHRPYmplY3RXcml0aW5nTW9kZShjb25zdCBDUERGX1RleHRPYmplY3QqIHBUZXh0T2JqKTsNCi0gICAgRlhfSU5UMzIJRmluZFRleHRsaW5lRmxvd0RpcmVjdGlvbigpOw0KLXByb3RlY3RlZDoNCi0gICAgQ1BERlRleHRfUGFyc2VPcHRpb25zCQkJbV9QYXJzZU9wdGlvbnM7DQotICAgIENGWF9Xb3JkQXJyYXkJCQkJCW1fQ2hhckluZGV4Ow0KLSAgICBjb25zdCBDUERGX1BhZ2VPYmplY3RzKgkJCW1fcFBhZ2U7DQotICAgIFBBR0VDSEFSX0luZm9BcnJheQkJCQltX2NoYXJMaXN0Ow0KLSAgICBDRlhfV2lkZVRleHRCdWYJCQkJCW1fVGV4dEJ1ZjsNCi0gICAgUEFHRUNIQVJfSW5mb0FycmF5CQkJCW1fVGVtcENoYXJMaXN0Ow0KLSAgICBDRlhfV2lkZVRleHRCdWYJCQkJCW1fVGVtcFRleHRCdWY7DQotICAgIGludAkJCQkJCQkJbV9wYXJzZXJmbGFnOw0KLSAgICBDUERGX1RleHRPYmplY3QqCQkJCW1fcFByZVRleHRPYmo7DQotICAgIENGWF9BZmZpbmVNYXRyaXgJCQkJbV9wZXJNYXRyaXg7DQotICAgIEZYX0JPT0wJCQkJCQkJbV9Jc1BhcnNlcmVkOw0KLSAgICBDRlhfQWZmaW5lTWF0cml4CQkJCW1fRGlzcGxheU1hdHJpeDsNCi0NCi0gICAgU0VHTUVOVF9BcnJheQkJCQkJbV9TZWdtZW50Ow0KLSAgICBDRlhfUmVjdEFycmF5CQkJCQltX1NlbFJlY3RzOw0KLSAgICBMSU5FT0JKCQkJCQkJCW1fTGluZU9iajsNCi0gICAgRlhfQk9PTAkJCQkJCQltX1RleHRsaW5lRGlyOw0KLSAgICBDRlhfRmxvYXRSZWN0CQkJCQltX0N1cmxpbmVSZWN0Ow0KLX07DQotY2xhc3MgQ1BERl9UZXh0UGFnZUZpbmQ6IHB1YmxpYyBJUERGX1RleHRQYWdlRmluZA0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfVGV4dFBhZ2VGaW5kKGNvbnN0IElQREZfVGV4dFBhZ2UqIHBUZXh0UGFnZSk7DQotICAgIHZpcnR1YWwJCQkJCQkJfkNQREZfVGV4dFBhZ2VGaW5kKCkge307DQotcHVibGljOg0KLSAgICB2aXJ0dWFsCUZYX0JPT0wJCQkJCUZpbmRGaXJzdChDRlhfV2lkZVN0cmluZyBmaW5kd2hhdCwgaW50IGZsYWdzLCBpbnQgc3RhcnRQb3MgPSAwKTsNCi0gICAgdmlydHVhbAlGWF9CT09MCQkJCQlGaW5kTmV4dCgpOw0KLSAgICB2aXJ0dWFsCUZYX0JPT0wJCQkJCUZpbmRQcmV2KCk7DQotDQotICAgIHZpcnR1YWwgdm9pZAkJCQkJR2V0UmVjdEFycmF5KENGWF9SZWN0QXJyYXkmIHJlY3RzKSBjb25zdDsNCi0gICAgdmlydHVhbCBpbnQJCQkJCQlHZXRDdXJPcmRlcigpIGNvbnN0Ow0KLSAgICB2aXJ0dWFsIGludAkJCQkJCUdldE1hdGNoZWRDb3VudCgpY29uc3Q7DQotcHJvdGVjdGVkOg0KLSAgICB2b2lkCQkJCQkJCUV4dHJhY3RGaW5kV2hhdChDRlhfV2lkZVN0cmluZyBmaW5kd2hhdCk7DQotICAgIEZYX0JPT0wJCQkJCQkJSXNNYXRjaFdob2xlV29yZChDRlhfV2lkZVN0cmluZyBjc1BhZ2VUZXh0LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpOw0KLSAgICBGWF9CT09MCQkJCQkJCUV4dHJhY3RTdWJTdHJpbmcoQ0ZYX1dpZGVTdHJpbmcmIHJTdHJpbmcsIEZYX0xQQ1dTVFIgbHBzekZ1bGxTdHJpbmcsDQotICAgICAgICAgICAgaW50IGlTdWJTdHJpbmcsIEZYX1dDSEFSIGNoU2VwKTsNCi0gICAgQ0ZYX1dpZGVTdHJpbmcJCQkJCU1ha2VSZXZlcnNlKGNvbnN0IENGWF9XaWRlU3RyaW5nIHN0cik7DQotICAgIGludAkJCQkJCQkJUmV2ZXJzZUZpbmQoQ0ZYX1dpZGVTdHJpbmcgY3NQYWdlVGV4dCwgQ0ZYX1dpZGVTdHJpbmcgY3NXb3JkLCBpbnQgblN0YXJ0UG9zLCBpbnQmIFdvcmRMZW5ndGgpOw0KLSAgICBpbnQJCQkJCQkJCUdldENoYXJJbmRleChpbnQgaW5kZXgpIGNvbnN0Ow0KLXByaXZhdGU6DQotICAgIENGWF9Xb3JkQXJyYXkJCQkJCW1fQ2hhckluZGV4Ow0KLSAgICBjb25zdCBJUERGX1RleHRQYWdlKgkJCW1fcFRleHRQYWdlOw0KLSAgICBDRlhfV2lkZVN0cmluZwkJCQkJbV9zdHJUZXh0Ow0KLSAgICBDRlhfV2lkZVN0cmluZwkJCQkJbV9maW5kV2hhdDsNCi0gICAgaW50CQkJCQkJCQltX2ZsYWdzOw0KLSAgICBDRlhfV2lkZVN0cmluZ0FycmF5CQkJCW1fY3NGaW5kV2hhdEFycmF5Ow0KLSAgICBpbnQJCQkJCQkJCW1fZmluZE5leHRTdGFydDsNCi0gICAgaW50CQkJCQkJCQltX2ZpbmRQcmVTdGFydDsNCi0gICAgRlhfQk9PTAkJCQkJCQltX2JNYXRjaENhc2U7DQotICAgIEZYX0JPT0wJCQkJCQkJbV9iTWF0Y2hXaG9sZVdvcmQ7DQotICAgIGludAkJCQkJCQkJbV9yZXNTdGFydDsNCi0gICAgaW50CQkJCQkJCQltX3Jlc0VuZDsNCi0gICAgQ0ZYX1JlY3RBcnJheQkJCQkJbV9yZXNBcnJheTsNCi0gICAgRlhfQk9PTAkJCQkJCQltX0lzRmluZDsNCi19Ow0KLWNsYXNzIENQREZfTGlua0V4dDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDUERGX0xpbmtFeHQoKSB7fTsNCi0gICAgaW50CQkJCQkJCQltX1N0YXJ0Ow0KLSAgICBpbnQJCQkJCQkJCW1fQ291bnQ7DQotICAgIENGWF9XaWRlU3RyaW5nCQkJCQltX3N0clVybDsNCi0gICAgdmlydHVhbAkJCQkJCQl+Q1BERl9MaW5rRXh0KCkge307DQotfTsNCi10eXBlZGVmIENGWF9BcnJheVRlbXBsYXRlPENQREZfTGlua0V4dCo+IExJTktfSW5mb0FycmF5Ow0KLWNsYXNzIENQREZfTGlua0V4dHJhY3Q6IHB1YmxpYyBJUERGX0xpbmtFeHRyYWN0DQotew0KLXB1YmxpYzoNCi0gICAgQ1BERl9MaW5rRXh0cmFjdCgpOw0KLSAgICB2aXJ0dWFsCQkJCQkJCX5DUERGX0xpbmtFeHRyYWN0KCk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCQkJRXh0cmFjdExpbmtzKGNvbnN0IElQREZfVGV4dFBhZ2UqIHBUZXh0UGFnZSk7DQotICAgIHZpcnR1YWwJRlhfQk9PTAkJCQkJSXNFeHRyYWN0KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fSXNQYXJzZXJkOw0KLSAgICB9DQotcHVibGljOg0KLSAgICB2aXJ0dWFsIGludAkJCQkJCUNvdW50TGlua3MoKSBjb25zdDsNCi0gICAgdmlydHVhbAlDRlhfV2lkZVN0cmluZwkJCUdldFVSTChpbnQgaW5kZXgpIGNvbnN0Ow0KLSAgICB2aXJ0dWFsCXZvaWQJCQkJCUdldEJvdW5kZWRTZWdtZW50KGludCBpbmRleCwgaW50JiBzdGFydCwgaW50JiBjb3VudCkgY29uc3Q7DQotICAgIHZpcnR1YWwJdm9pZAkJCQkJR2V0UmVjdHMoaW50IGluZGV4LCBDRlhfUmVjdEFycmF5JiByZWN0cyljb25zdDsNCi1wcm90ZWN0ZWQ6DQotICAgIHZvaWQJCQkJCQkJcGFyc2VyTGluaygpOw0KLSAgICB2b2lkCQkJCQkJCURlbGV0ZUxpbmtMaXN0KCk7DQotICAgIEZYX0JPT0wJCQkJCQkJQ2hlY2tXZWJMaW5rKENGWF9XaWRlU3RyaW5nJiBzdHJCZUNoZWNrKTsNCi0gICAgRlhfQk9PTAkJCQkJCQlDaGVja01haWxMaW5rKENGWF9XaWRlU3RyaW5nJiBzdHIpOw0KLSAgICBGWF9CT09MCQkJCQkJCUFwcGVuZFRvTGlua0xpc3QoaW50IHN0YXJ0LCBpbnQgY291bnQsIENGWF9XaWRlU3RyaW5nIHN0clVybCk7DQotcHJpdmF0ZToNCi0gICAgTElOS19JbmZvQXJyYXkJCQkJCW1fTGlua0xpc3Q7DQotICAgIGNvbnN0IENQREZfVGV4dFBhZ2UqCQkJbV9wVGV4dFBhZ2U7DQotICAgIENGWF9XaWRlU3RyaW5nCQkJCQltX3N0clBhZ2VUZXh0Ow0KLSAgICBGWF9CT09MCQkJCQkJCW1fSXNQYXJzZXJkOw0KLX07DQotRlhfU1RSU0laRSBGWF9Vbmljb2RlX0dldE5vcm1hbGl6YXRpb24oRlhfV0NIQVIgd2NoLCBGWF9MUFdTVFIgcERzdCk7DQotdm9pZCBOb3JtYWxpemVTdHJpbmcoQ0ZYX1dpZGVTdHJpbmcmIHN0cik7DQotdm9pZCBOb3JtYWxpemVDb21wb3NpdGVDaGFyKEZYX1dDSEFSIHdDaGFyLCBDRlhfV2lkZVN0cmluZyYgc0Rlc3QpOw0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX1BERl9URVhUX0lOVF9IXworI2RlZmluZSBfUERGX1RFWFRfSU5UX0hfCitjbGFzcyBDUERGX1RleHRQYXJzZU9wdGlvbnMgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENQREZfVGV4dFBhcnNlT3B0aW9ucygpOworICAgIEZYX0JPT0wJCQltX2JDaGVja09iamVjdE9yZGVyOworICAgIEZYX0JPT0wJCQltX2JDaGVja0RpcmVjdGlvbjsKKyAgICBpbnQJCQkJbV9uQ2hlY2tTYW1lT2JqZWN0OworfTsKK2NsYXNzIENQREZfVGV4dFBhZ2U7CitjbGFzcyBDUERGX0xpbmtFeHRyYWN0OworY2xhc3MgQ1BERl9UZXh0UGFnZUZpbmQ7CitjbGFzcyBDUERGX0RvY1Byb2dyZXNzaXZlU2VhcmNoOworI2RlZmluZSBGUERGVEVYVF9DSEFSX0VSUk9SCQkJLTEKKyNkZWZpbmUgRlBERlRFWFRfQ0hBUl9OT1JNQUwJCTAKKyNkZWZpbmUgRlBERlRFWFRfQ0hBUl9HRU5FUkFURUQJCTEKKyNkZWZpbmUgRlBERlRFWFRfQ0hBUl9VTlVOSUNPREUJCTIKKyNkZWZpbmUgRlBERlRFWFRfQ0hBUl9IWVBIRU4JCTMKKyNkZWZpbmUgRlBERlRFWFRfQ0hBUl9QSUVDRQkJCTQKKyNkZWZpbmUgRlBERlRFWFRfTUNfUEFTUwkJCTAKKyNkZWZpbmUgRlBERlRFWFRfTUNfRE9ORQkJCTEKKyNkZWZpbmUgRlBERlRFWFRfTUNfREVMQVkJCQkyCit0eXBlZGVmIHN0cnVjdCBfUEFHRUNIQVJfSU5GTzogcHVibGljIENGWF9PYmplY3QgeworICAgIGludAkJCQkJbV9DaGFyQ29kZTsKKyAgICBGWF9XQ0hBUgkJCW1fVW5pY29kZTsKKyAgICBGWF9GTE9BVAkJCW1fT3JpZ2luWDsKKyAgICBGWF9GTE9BVAkJCW1fT3JpZ2luWTsKKyAgICBGWF9JTlQzMgkJCW1fRmxhZzsKKyAgICBDRlhfRmxvYXRSZWN0CQltX0NoYXJCb3g7CisgICAgQ1BERl9UZXh0T2JqZWN0KgltX3BUZXh0T2JqOworICAgIENGWF9BZmZpbmVNYXRyaXgJbV9NYXRyaXg7CisgICAgaW50CQkJCQltX0luZGV4OworfSBQQUdFQ0hBUl9JTkZPOwordHlwZWRlZglDRlhfU2VnbWVudGVkQXJyYXk8UEFHRUNIQVJfSU5GTz4gUEFHRUNIQVJfSW5mb0FycmF5OwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludAltX1N0YXJ0OworICAgIGludCBtX25Db3VudDsKK30gRlBERl9TRUdNRU5UOwordHlwZWRlZiBDRlhfQXJyYXlUZW1wbGF0ZTxGUERGX1NFR01FTlQ+IFNFR01FTlRfQXJyYXk7Cit0eXBlZGVmIHN0cnVjdCB7CisgICAgQ1BERl9UZXh0T2JqZWN0KgltX3BUZXh0T2JqOworICAgIENGWF9BZmZpbmVNYXRyaXgJbV9mb3JtTWF0cml4OworfSBQREZURVhUX09iajsKK3R5cGVkZWYgQ0ZYX0FycmF5VGVtcGxhdGU8UERGVEVYVF9PYmo+IExJTkVPQko7CitjbGFzcyBDUERGX1RleHRQYWdlOiBwdWJsaWMgSVBERl9UZXh0UGFnZQoreworcHVibGljOgorICAgIENQREZfVGV4dFBhZ2UoY29uc3QgQ1BERl9QYWdlKiBwUGFnZSwgaW50IGZsYWdzID0gMCk7CisgICAgQ1BERl9UZXh0UGFnZShjb25zdCBDUERGX1BhZ2VPYmplY3RzKiBwUGFnZSwgaW50IGZsYWdzID0gMCk7CisgICAgQ1BERl9UZXh0UGFnZShjb25zdCBDUERGX1BhZ2UqIHBQYWdlLCBDUERGVGV4dF9QYXJzZU9wdGlvbnMgUGFyc2VyT3B0aW9ucyk7CisgICAgdmlydHVhbCBGWF9CT09MCQkJCQlQYXJzZVRleHRQYWdlKCk7CisgICAgdmlydHVhbCB2b2lkCQkJCQlOb3JtYWxpemVPYmplY3RzKEZYX0JPT0wgYk5vcm1hbGl6ZSk7CisgICAgdmlydHVhbAlGWF9CT09MCQkJCQlJc1BhcnNlcmVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0lzUGFyc2VyZWQ7CisgICAgfQorICAgIHZpcnR1YWwgfkNQREZfVGV4dFBhZ2UoKSB7fTsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGludCBDaGFySW5kZXhGcm9tVGV4dEluZGV4KGludCBUZXh0SW5kZXgpY29uc3QgOworICAgIHZpcnR1YWwgaW50IFRleHRJbmRleEZyb21DaGFySW5kZXgoaW50IENoYXJJbmRleCljb25zdDsKKyAgICB2aXJ0dWFsIGludAkJCQkJCUNvdW50Q2hhcnMoKSBjb25zdDsKKyAgICB2aXJ0dWFsCXZvaWQJCQkJCUdldENoYXJJbmZvKGludCBpbmRleCwgRlBERl9DSEFSX0lORk8gJiBpbmZvKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQJCQkJCUdldFJlY3RBcnJheShpbnQgc3RhcnQsIGludCBuQ291bnQsIENGWF9SZWN0QXJyYXkmIHJlY3RBcnJheSkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQJCQkJCQlHZXRJbmRleEF0UG9zKENQREZfUG9pbnQgcG9pbnQsIEZYX0ZMT0FUIHhUb3JlbGFuY2UsIEZYX0ZMT0FUIHlUb3JlbGFuY2UpIGNvbnN0OworICAgIHZpcnR1YWwgaW50CQkJCQkJR2V0SW5kZXhBdFBvcyhGWF9GTE9BVCB4LCBGWF9GTE9BVCB5LCBGWF9GTE9BVCB4VG9yZWxhbmNlLAorICAgICAgICAgICAgRlhfRkxPQVQgeVRvcmVsYW5jZSkgY29uc3Q7CisgICAgdmlydHVhbCBDRlhfV2lkZVN0cmluZwkJCUdldFRleHRCeVJlY3QoQ0ZYX0Zsb2F0UmVjdCByZWN0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQJCQkJCUdldFJlY3RzQXJyYXlCeVJlY3QoQ0ZYX0Zsb2F0UmVjdCByZWN0LCBDRlhfUmVjdEFycmF5JiByZXNSZWN0QXJyYXkpIGNvbnN0OworICAgIHZpcnR1YWwJaW50CQkJCQkJR2V0T3JkZXJCeURpcmVjdGlvbihpbnQgb3JkZXIsIGludCBkaXJlY3Rpb24pIGNvbnN0OworICAgIHZpcnR1YWwJQ0ZYX1dpZGVTdHJpbmcJCQlHZXRQYWdlVGV4dChpbnQgc3RhcnQgPSAwLCBpbnQgbkNvdW50ID0gLTEpIGNvbnN0OworCisgICAgdmlydHVhbCBpbnQJCQkJCQlDb3VudFJlY3RzKGludCBzdGFydCwgaW50IG5Db3VudCk7CisgICAgdmlydHVhbAl2b2lkCQkJCQlHZXRSZWN0KGludCByZWN0SW5kZXgsIEZYX0ZMT0FUJiBsZWZ0LCBGWF9GTE9BVCYgdG9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgRlhfRkxPQVQmIHJpZ2h0LCBGWF9GTE9BVCAmYm90dG9tKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJCUdldEJhc2VsaW5lUm90YXRlKGludCByZWN0SW5kZXgsIGludCYgUm90YXRlKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJCUdldEJhc2VsaW5lUm90YXRlKENGWF9GbG9hdFJlY3QgcmVjdCwgaW50JiBSb3RhdGUpOworICAgIHZpcnR1YWwJaW50CQkJCQkJQ291bnRCb3VuZGVkU2VnbWVudHMoRlhfRkxPQVQgbGVmdCwgRlhfRkxPQVQgdG9wLAorICAgICAgICAgICAgRlhfRkxPQVQgcmlnaHQsIEZYX0ZMT0FUIGJvdHRvbSwgRlhfQk9PTCBiQ29udGFpbnMgPSBGQUxTRSk7CisgICAgdmlydHVhbAl2b2lkCQkJCQlHZXRCb3VuZGVkU2VnbWVudChpbnQgaW5kZXgsIGludCYgc3RhcnQsIGludCYgY291bnQpIGNvbnN0OworICAgIHZpcnR1YWwgaW50CQkJCQkJR2V0V29yZEJyZWFrKGludCBpbmRleCwgaW50IGRpcmVjdGlvbikgY29uc3Q7CitwdWJsaWM6CisgICAgY29uc3QJUEFHRUNIQVJfSW5mb0FycmF5KgkJR2V0Q2hhckxpc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICZtX2NoYXJMaXN0OworICAgIH0KKyAgICBzdGF0aWMJRlhfQk9PTAkJCQkJSXNSZWN0SW50ZXJzZWN0KENGWF9GbG9hdFJlY3QgcmVjdDEsIENGWF9GbG9hdFJlY3QgcmVjdDIpOworICAgIHN0YXRpYwlGWF9CT09MCQkJCQlJc0xldHRlcihGWF9XQ0hBUiB1bmljb2RlKTsKK3ByaXZhdGU6CisgICAgRlhfQk9PTAkJCQkJCQlJc0h5cGhlbihGWF9XQ0hBUiBjdXJDaGFyKTsKKyAgICBGWF9CT09MCQkJCQkJCUlzQ29udHJvbENoYXIoUEFHRUNIQVJfSU5GTyogcENoYXJJbmZvKTsKKyAgICBGWF9CT09MCQkJCQkJCUdldEJhc2VsaW5lUm90YXRlKGludCBzdGFydCwgaW50IGVuZCwgaW50JiBSb3RhdGUpOworICAgIHZvaWQJCQkJCQkJUHJvY2Vzc09iamVjdCgpOworICAgIHZvaWQJCQkJCQkJUHJvY2Vzc0Zvcm1PYmplY3QoQ1BERl9Gb3JtT2JqZWN0KglwRm9ybU9iaiwgQ0ZYX0FmZmluZU1hdHJpeCBmb3JtTWF0cml4KTsKKyAgICB2b2lkCQkJCQkJCVByb2Nlc3NUZXh0T2JqZWN0KFBERlRFWFRfT2JqIHBPYmopOworICAgIHZvaWQJCQkJCQkJUHJvY2Vzc1RleHRPYmplY3QoQ1BERl9UZXh0T2JqZWN0KglwVGV4dE9iaiwgQ0ZYX0FmZmluZU1hdHJpeCBmb3JtTWF0cml4LCBGWF9QT1NJVElPTiBPYmpQb3MpOworICAgIGludAkJCQkJCQkJUHJvY2Vzc0luc2VydE9iamVjdChjb25zdCBDUERGX1RleHRPYmplY3QqIHBPYmosIENGWF9BZmZpbmVNYXRyaXggZm9ybU1hdHJpeCk7CisgICAgRlhfQk9PTAkJCQkJCQlHZW5lcmF0ZUNoYXJJbmZvKEZYX1dDSEFSIHVuaWNvZGUsIFBBR0VDSEFSX0lORk8mIGluZm8pOworICAgIEZYX0JPT0wJCQkJCQkJSXNTYW1lQXNQcmVUZXh0T2JqZWN0KENQREZfVGV4dE9iamVjdCogcFRleHRPYmosIEZYX1BPU0lUSU9OIE9ialBvcyk7CisgICAgRlhfQk9PTAkJCQkJCQlJc1NhbWVUZXh0T2JqZWN0KENQREZfVGV4dE9iamVjdCogcFRleHRPYmoxLCBDUERGX1RleHRPYmplY3QqIHBUZXh0T2JqMik7CisgICAgaW50CQkJCQkJCQlHZXRDaGFyV2lkdGgoRlhfRFdPUkQgY2hhckNvZGUsIENQREZfRm9udCogcEZvbnQpIGNvbnN0OworICAgIHZvaWQJCQkJCQkJQ2xvc2VUZW1wTGluZSgpOworICAgIHZvaWQJCQkJCQkJT25QaWVjZShJRlhfQmlkaUNoYXIqIHBCaWRpLCBDRlhfV2lkZVN0cmluZyYgc3RyKTsKKyAgICBGWF9JTlQzMglQcmVNYXJrZWRDb250ZW50KFBERlRFWFRfT2JqIHBPYmopOworICAgIHZvaWQJCVByb2Nlc3NNYXJrZWRDb250ZW50KFBERlRFWFRfT2JqIHBPYmopOworICAgIHZvaWQJCUNoZWNrTWFya2VkQ29udGVudE9iamVjdChGWF9JTlQzMiYgc3RhcnQsIEZYX0lOVDMyJiBuQ291bnQpIGNvbnN0OworICAgIHZvaWQJCUZpbmRQcmV2aW91c1RleHRPYmplY3Qodm9pZCk7CisgICAgdm9pZAkJQWRkQ2hhckluZm9CeUxSRGlyZWN0aW9uKENGWF9XaWRlU3RyaW5nJiBzdHIsIGludCBpKTsKKyAgICB2b2lkCQlBZGRDaGFySW5mb0J5UkxEaXJlY3Rpb24oQ0ZYX1dpZGVTdHJpbmcmIHN0ciwgaW50IGkpOworICAgIEZYX0lOVDMyCUdldFRleHRPYmplY3RXcml0aW5nTW9kZShjb25zdCBDUERGX1RleHRPYmplY3QqIHBUZXh0T2JqKTsKKyAgICBGWF9JTlQzMglGaW5kVGV4dGxpbmVGbG93RGlyZWN0aW9uKCk7Citwcm90ZWN0ZWQ6CisgICAgQ1BERlRleHRfUGFyc2VPcHRpb25zCQkJbV9QYXJzZU9wdGlvbnM7CisgICAgQ0ZYX1dvcmRBcnJheQkJCQkJbV9DaGFySW5kZXg7CisgICAgY29uc3QgQ1BERl9QYWdlT2JqZWN0cyoJCQltX3BQYWdlOworICAgIFBBR0VDSEFSX0luZm9BcnJheQkJCQltX2NoYXJMaXN0OworICAgIENGWF9XaWRlVGV4dEJ1ZgkJCQkJbV9UZXh0QnVmOworICAgIFBBR0VDSEFSX0luZm9BcnJheQkJCQltX1RlbXBDaGFyTGlzdDsKKyAgICBDRlhfV2lkZVRleHRCdWYJCQkJCW1fVGVtcFRleHRCdWY7CisgICAgaW50CQkJCQkJCQltX3BhcnNlcmZsYWc7CisgICAgQ1BERl9UZXh0T2JqZWN0KgkJCQltX3BQcmVUZXh0T2JqOworICAgIENGWF9BZmZpbmVNYXRyaXgJCQkJbV9wZXJNYXRyaXg7CisgICAgRlhfQk9PTAkJCQkJCQltX0lzUGFyc2VyZWQ7CisgICAgQ0ZYX0FmZmluZU1hdHJpeAkJCQltX0Rpc3BsYXlNYXRyaXg7CisKKyAgICBTRUdNRU5UX0FycmF5CQkJCQltX1NlZ21lbnQ7CisgICAgQ0ZYX1JlY3RBcnJheQkJCQkJbV9TZWxSZWN0czsKKyAgICBMSU5FT0JKCQkJCQkJCW1fTGluZU9iajsKKyAgICBGWF9CT09MCQkJCQkJCW1fVGV4dGxpbmVEaXI7CisgICAgQ0ZYX0Zsb2F0UmVjdAkJCQkJbV9DdXJsaW5lUmVjdDsKK307CitjbGFzcyBDUERGX1RleHRQYWdlRmluZDogcHVibGljIElQREZfVGV4dFBhZ2VGaW5kCit7CitwdWJsaWM6CisgICAgQ1BERl9UZXh0UGFnZUZpbmQoY29uc3QgSVBERl9UZXh0UGFnZSogcFRleHRQYWdlKTsKKyAgICB2aXJ0dWFsCQkJCQkJCX5DUERGX1RleHRQYWdlRmluZCgpIHt9OworcHVibGljOgorICAgIHZpcnR1YWwJRlhfQk9PTAkJCQkJRmluZEZpcnN0KENGWF9XaWRlU3RyaW5nIGZpbmR3aGF0LCBpbnQgZmxhZ3MsIGludCBzdGFydFBvcyA9IDApOworICAgIHZpcnR1YWwJRlhfQk9PTAkJCQkJRmluZE5leHQoKTsKKyAgICB2aXJ0dWFsCUZYX0JPT0wJCQkJCUZpbmRQcmV2KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQJCQkJCUdldFJlY3RBcnJheShDRlhfUmVjdEFycmF5JiByZWN0cykgY29uc3Q7CisgICAgdmlydHVhbCBpbnQJCQkJCQlHZXRDdXJPcmRlcigpIGNvbnN0OworICAgIHZpcnR1YWwgaW50CQkJCQkJR2V0TWF0Y2hlZENvdW50KCljb25zdDsKK3Byb3RlY3RlZDoKKyAgICB2b2lkCQkJCQkJCUV4dHJhY3RGaW5kV2hhdChDRlhfV2lkZVN0cmluZyBmaW5kd2hhdCk7CisgICAgRlhfQk9PTAkJCQkJCQlJc01hdGNoV2hvbGVXb3JkKENGWF9XaWRlU3RyaW5nIGNzUGFnZVRleHQsIGludCBzdGFydFBvcywgaW50IGVuZFBvcyk7CisgICAgRlhfQk9PTAkJCQkJCQlFeHRyYWN0U3ViU3RyaW5nKENGWF9XaWRlU3RyaW5nJiByU3RyaW5nLCBGWF9MUENXU1RSIGxwc3pGdWxsU3RyaW5nLAorICAgICAgICAgICAgaW50IGlTdWJTdHJpbmcsIEZYX1dDSEFSIGNoU2VwKTsKKyAgICBDRlhfV2lkZVN0cmluZwkJCQkJTWFrZVJldmVyc2UoY29uc3QgQ0ZYX1dpZGVTdHJpbmcgc3RyKTsKKyAgICBpbnQJCQkJCQkJCVJldmVyc2VGaW5kKENGWF9XaWRlU3RyaW5nIGNzUGFnZVRleHQsIENGWF9XaWRlU3RyaW5nIGNzV29yZCwgaW50IG5TdGFydFBvcywgaW50JiBXb3JkTGVuZ3RoKTsKKyAgICBpbnQJCQkJCQkJCUdldENoYXJJbmRleChpbnQgaW5kZXgpIGNvbnN0OworcHJpdmF0ZToKKyAgICBDRlhfV29yZEFycmF5CQkJCQltX0NoYXJJbmRleDsKKyAgICBjb25zdCBJUERGX1RleHRQYWdlKgkJCW1fcFRleHRQYWdlOworICAgIENGWF9XaWRlU3RyaW5nCQkJCQltX3N0clRleHQ7CisgICAgQ0ZYX1dpZGVTdHJpbmcJCQkJCW1fZmluZFdoYXQ7CisgICAgaW50CQkJCQkJCQltX2ZsYWdzOworICAgIENGWF9XaWRlU3RyaW5nQXJyYXkJCQkJbV9jc0ZpbmRXaGF0QXJyYXk7CisgICAgaW50CQkJCQkJCQltX2ZpbmROZXh0U3RhcnQ7CisgICAgaW50CQkJCQkJCQltX2ZpbmRQcmVTdGFydDsKKyAgICBGWF9CT09MCQkJCQkJCW1fYk1hdGNoQ2FzZTsKKyAgICBGWF9CT09MCQkJCQkJCW1fYk1hdGNoV2hvbGVXb3JkOworICAgIGludAkJCQkJCQkJbV9yZXNTdGFydDsKKyAgICBpbnQJCQkJCQkJCW1fcmVzRW5kOworICAgIENGWF9SZWN0QXJyYXkJCQkJCW1fcmVzQXJyYXk7CisgICAgRlhfQk9PTAkJCQkJCQltX0lzRmluZDsKK307CitjbGFzcyBDUERGX0xpbmtFeHQ6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ1BERl9MaW5rRXh0KCkge307CisgICAgaW50CQkJCQkJCQltX1N0YXJ0OworICAgIGludAkJCQkJCQkJbV9Db3VudDsKKyAgICBDRlhfV2lkZVN0cmluZwkJCQkJbV9zdHJVcmw7CisgICAgdmlydHVhbAkJCQkJCQl+Q1BERl9MaW5rRXh0KCkge307Cit9OwordHlwZWRlZiBDRlhfQXJyYXlUZW1wbGF0ZTxDUERGX0xpbmtFeHQqPiBMSU5LX0luZm9BcnJheTsKK2NsYXNzIENQREZfTGlua0V4dHJhY3Q6IHB1YmxpYyBJUERGX0xpbmtFeHRyYWN0Cit7CitwdWJsaWM6CisgICAgQ1BERl9MaW5rRXh0cmFjdCgpOworICAgIHZpcnR1YWwJCQkJCQkJfkNQREZfTGlua0V4dHJhY3QoKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJCUV4dHJhY3RMaW5rcyhjb25zdCBJUERGX1RleHRQYWdlKiBwVGV4dFBhZ2UpOworICAgIHZpcnR1YWwJRlhfQk9PTAkJCQkJSXNFeHRyYWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0lzUGFyc2VyZDsKKyAgICB9CitwdWJsaWM6CisgICAgdmlydHVhbCBpbnQJCQkJCQlDb3VudExpbmtzKCkgY29uc3Q7CisgICAgdmlydHVhbAlDRlhfV2lkZVN0cmluZwkJCUdldFVSTChpbnQgaW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwJdm9pZAkJCQkJR2V0Qm91bmRlZFNlZ21lbnQoaW50IGluZGV4LCBpbnQmIHN0YXJ0LCBpbnQmIGNvdW50KSBjb25zdDsKKyAgICB2aXJ0dWFsCXZvaWQJCQkJCUdldFJlY3RzKGludCBpbmRleCwgQ0ZYX1JlY3RBcnJheSYgcmVjdHMpY29uc3Q7Citwcm90ZWN0ZWQ6CisgICAgdm9pZAkJCQkJCQlwYXJzZXJMaW5rKCk7CisgICAgdm9pZAkJCQkJCQlEZWxldGVMaW5rTGlzdCgpOworICAgIEZYX0JPT0wJCQkJCQkJQ2hlY2tXZWJMaW5rKENGWF9XaWRlU3RyaW5nJiBzdHJCZUNoZWNrKTsKKyAgICBGWF9CT09MCQkJCQkJCUNoZWNrTWFpbExpbmsoQ0ZYX1dpZGVTdHJpbmcmIHN0cik7CisgICAgRlhfQk9PTAkJCQkJCQlBcHBlbmRUb0xpbmtMaXN0KGludCBzdGFydCwgaW50IGNvdW50LCBDRlhfV2lkZVN0cmluZyBzdHJVcmwpOworcHJpdmF0ZToKKyAgICBMSU5LX0luZm9BcnJheQkJCQkJbV9MaW5rTGlzdDsKKyAgICBjb25zdCBDUERGX1RleHRQYWdlKgkJCW1fcFRleHRQYWdlOworICAgIENGWF9XaWRlU3RyaW5nCQkJCQltX3N0clBhZ2VUZXh0OworICAgIEZYX0JPT0wJCQkJCQkJbV9Jc1BhcnNlcmQ7Cit9OworRlhfU1RSU0laRSBGWF9Vbmljb2RlX0dldE5vcm1hbGl6YXRpb24oRlhfV0NIQVIgd2NoLCBGWF9MUFdTVFIgcERzdCk7Cit2b2lkIE5vcm1hbGl6ZVN0cmluZyhDRlhfV2lkZVN0cmluZyYgc3RyKTsKK3ZvaWQgTm9ybWFsaXplQ29tcG9zaXRlQ2hhcihGWF9XQ0hBUiB3Q2hhciwgQ0ZYX1dpZGVTdHJpbmcmIHNEZXN0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZnRleHQvdHh0cHJvYy5oIGIvY29yZS9zcmMvZnBkZnRleHQvdHh0cHJvYy5oCmluZGV4IDNlYzg1MGQuLjVhODhlZTUgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZ0ZXh0L3R4dHByb2MuaAorKysgYi9jb3JlL3NyYy9mcGRmdGV4dC90eHRwcm9jLmgKQEAgLTEsNzAgKzEsNzAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX1BERl9UWFRQUk9DX0hfDQotI2RlZmluZSBfUERGX1RYVFBST0NfSF8NCi1jbGFzcyBDVGV4dENvbHVtbiA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgRlhfRkxPQVQJbV9BdmdQb3M7DQotICAgIGludAkJbV9Db3VudDsNCi0gICAgaW50CQltX1RleHRQb3M7DQotfTsNCi1jbGFzcyBDVGV4dEJveCA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgQ0ZYX1dpZGVTdHJpbmcJbV9UZXh0Ow0KLSAgICBGWF9GTE9BVAltX0xlZnQ7DQotICAgIEZYX0ZMT0FUCW1fUmlnaHQ7DQotICAgIEZYX0ZMT0FUCW1fU3BhY2VXaWR0aDsNCi0gICAgRlhfRkxPQVQJbV9Ub3A7DQotICAgIEZYX0ZMT0FUCW1fQm90dG9tOw0KLSAgICBGWF9GTE9BVAltX0ZvbnRTaXplVjsNCi0gICAgQ1RleHRDb2x1bW4qIG1fcENvbHVtbjsNCi19Ow0KLWNsYXNzIENUZXh0QmFzZUxpbmUgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENUZXh0QmFzZUxpbmUoKTsNCi0gICAgfkNUZXh0QmFzZUxpbmUoKTsNCi0gICAgdm9pZAlJbnNlcnRUZXh0Qm94KEZYX0ZMT0FUIGxlZnR4LCBGWF9GTE9BVCByaWdodHgsIEZYX0ZMT0FUIHRvcHksIEZYX0ZMT0FUIGJvdHRvbXksDQotICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCBzcGFjZXcsIEZYX0ZMT0FUIGZvbnRzaXplX3YsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHIpOw0KLSAgICBGWF9CT09MCUdldFdpZHRoKEZYX0ZMT0FUJiBsZWZ0eCwgRlhfRkxPQVQmIHJpZ2h0eCk7DQotICAgIEZYX0JPT0wJQ2FuTWVyZ2UoQ1RleHRCYXNlTGluZSogcE90aGVyKTsNCi0gICAgdm9pZAlNZXJnZShDVGV4dEJhc2VMaW5lKiBwT3RoZXIpOw0KLSAgICB2b2lkCU1lcmdlQm94ZXMoKTsNCi0gICAgdm9pZAlDb3VudENoYXJzKGludCYgY291bnQsIEZYX0ZMT0FUJiB3aWR0aCwgaW50JiBtaW5jaGFycyk7DQotICAgIHZvaWQJV3JpdGVPdXRwdXQoQ0ZYX1dpZGVTdHJpbmcmIHN0ciwgRlhfRkxPQVQgbGVmdHgsIEZYX0ZMT0FUIHdpZHRoLCBpbnQgaVdpZHRoKTsNCi0gICAgRlhfRkxPQVQJbV9CYXNlTGluZTsNCi0gICAgRlhfRkxPQVQJbV9Ub3A7DQotICAgIEZYX0ZMT0FUCW1fQm90dG9tOw0KLSAgICBGWF9GTE9BVAltX01heEZvbnRTaXplVjsNCi0gICAgQ0ZYX1B0ckFycmF5CQltX1RleHRMaXN0Ow0KLX07DQotY2xhc3MgQ1BERl9QYWdlT2JqZWN0Ow0KLWNsYXNzIENQREZfVGV4dE9iamVjdDsNCi1jbGFzcyBDVGV4dFBhZ2UgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENUZXh0UGFnZSgpOw0KLSAgICB+Q1RleHRQYWdlKCk7DQotICAgIHZvaWQJUHJvY2Vzc09iamVjdChDUERGX1BhZ2VPYmplY3QqIHBPYmopOw0KLSAgICBDVGV4dEJhc2VMaW5lKiBJbnNlcnRUZXh0Qm94KENUZXh0QmFzZUxpbmUqIHBCYXNlTGluZSwgRlhfRkxPQVQgYmFzZXksIEZYX0ZMT0FUIGxlZnR4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIHJpZ2h0eCwgRlhfRkxPQVQgdG9weSwgRlhfRkxPQVQgYm90dG9teSwgRlhfRkxPQVQgc3BhY2V3LCBGWF9GTE9BVCBmb250c2l6ZV92LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nJiBzdHIsIENQREZfRm9udCogcEZvbnQpOw0KLSAgICB2b2lkCVdyaXRlT3V0cHV0KENGWF9XaWRlU3RyaW5nQXJyYXkmIGxpbmVzLCBpbnQgaU1pbldpZHRoKTsNCi0gICAgRlhfQk9PTAltX2JBdXRvV2lkdGg7DQotICAgIEZYX0JPT0wJbV9iS2VlcENvbHVtbjsNCi0gICAgRlhfQk9PTAltX2JCcmVha1NwYWNlOw0KLSAgICBGWF9CT09MCW1fYk9DUjsNCi1wcml2YXRlOg0KLSAgICBDRlhfUHRyQXJyYXkJbV9CYXNlTGluZXM7DQotICAgIENGWF9QdHJBcnJheQltX1RleHRDb2x1bW5zOw0KLSAgICB2b2lkCUZpbmRDb2x1bW5zKCk7DQotICAgIENUZXh0Q29sdW1uKglGaW5kQ29sdW1uKEZYX0ZMT0FUIHhwb3MpOw0KLSAgICB2b2lkCUJyZWFrU3BhY2UoQ1BERl9UZXh0T2JqZWN0KiBwVGV4dE9iaik7DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9QREZfVFhUUFJPQ19IXworI2RlZmluZSBfUERGX1RYVFBST0NfSF8KK2NsYXNzIENUZXh0Q29sdW1uIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBGWF9GTE9BVAltX0F2Z1BvczsKKyAgICBpbnQJCW1fQ291bnQ7CisgICAgaW50CQltX1RleHRQb3M7Cit9OworY2xhc3MgQ1RleHRCb3ggOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENGWF9XaWRlU3RyaW5nCW1fVGV4dDsKKyAgICBGWF9GTE9BVAltX0xlZnQ7CisgICAgRlhfRkxPQVQJbV9SaWdodDsKKyAgICBGWF9GTE9BVAltX1NwYWNlV2lkdGg7CisgICAgRlhfRkxPQVQJbV9Ub3A7CisgICAgRlhfRkxPQVQJbV9Cb3R0b207CisgICAgRlhfRkxPQVQJbV9Gb250U2l6ZVY7CisgICAgQ1RleHRDb2x1bW4qIG1fcENvbHVtbjsKK307CitjbGFzcyBDVGV4dEJhc2VMaW5lIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBDVGV4dEJhc2VMaW5lKCk7CisgICAgfkNUZXh0QmFzZUxpbmUoKTsKKyAgICB2b2lkCUluc2VydFRleHRCb3goRlhfRkxPQVQgbGVmdHgsIEZYX0ZMT0FUIHJpZ2h0eCwgRlhfRkxPQVQgdG9weSwgRlhfRkxPQVQgYm90dG9teSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQgc3BhY2V3LCBGWF9GTE9BVCBmb250c2l6ZV92LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyKTsKKyAgICBGWF9CT09MCUdldFdpZHRoKEZYX0ZMT0FUJiBsZWZ0eCwgRlhfRkxPQVQmIHJpZ2h0eCk7CisgICAgRlhfQk9PTAlDYW5NZXJnZShDVGV4dEJhc2VMaW5lKiBwT3RoZXIpOworICAgIHZvaWQJTWVyZ2UoQ1RleHRCYXNlTGluZSogcE90aGVyKTsKKyAgICB2b2lkCU1lcmdlQm94ZXMoKTsKKyAgICB2b2lkCUNvdW50Q2hhcnMoaW50JiBjb3VudCwgRlhfRkxPQVQmIHdpZHRoLCBpbnQmIG1pbmNoYXJzKTsKKyAgICB2b2lkCVdyaXRlT3V0cHV0KENGWF9XaWRlU3RyaW5nJiBzdHIsIEZYX0ZMT0FUIGxlZnR4LCBGWF9GTE9BVCB3aWR0aCwgaW50IGlXaWR0aCk7CisgICAgRlhfRkxPQVQJbV9CYXNlTGluZTsKKyAgICBGWF9GTE9BVAltX1RvcDsKKyAgICBGWF9GTE9BVAltX0JvdHRvbTsKKyAgICBGWF9GTE9BVAltX01heEZvbnRTaXplVjsKKyAgICBDRlhfUHRyQXJyYXkJCW1fVGV4dExpc3Q7Cit9OworY2xhc3MgQ1BERl9QYWdlT2JqZWN0OworY2xhc3MgQ1BERl9UZXh0T2JqZWN0OworY2xhc3MgQ1RleHRQYWdlIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBDVGV4dFBhZ2UoKTsKKyAgICB+Q1RleHRQYWdlKCk7CisgICAgdm9pZAlQcm9jZXNzT2JqZWN0KENQREZfUGFnZU9iamVjdCogcE9iaik7CisgICAgQ1RleHRCYXNlTGluZSogSW5zZXJ0VGV4dEJveChDVGV4dEJhc2VMaW5lKiBwQmFzZUxpbmUsIEZYX0ZMT0FUIGJhc2V5LCBGWF9GTE9BVCBsZWZ0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIHJpZ2h0eCwgRlhfRkxPQVQgdG9weSwgRlhfRkxPQVQgYm90dG9teSwgRlhfRkxPQVQgc3BhY2V3LCBGWF9GTE9BVCBmb250c2l6ZV92LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcmIHN0ciwgQ1BERl9Gb250KiBwRm9udCk7CisgICAgdm9pZAlXcml0ZU91dHB1dChDRlhfV2lkZVN0cmluZ0FycmF5JiBsaW5lcywgaW50IGlNaW5XaWR0aCk7CisgICAgRlhfQk9PTAltX2JBdXRvV2lkdGg7CisgICAgRlhfQk9PTAltX2JLZWVwQ29sdW1uOworICAgIEZYX0JPT0wJbV9iQnJlYWtTcGFjZTsKKyAgICBGWF9CT09MCW1fYk9DUjsKK3ByaXZhdGU6CisgICAgQ0ZYX1B0ckFycmF5CW1fQmFzZUxpbmVzOworICAgIENGWF9QdHJBcnJheQltX1RleHRDb2x1bW5zOworICAgIHZvaWQJRmluZENvbHVtbnMoKTsKKyAgICBDVGV4dENvbHVtbioJRmluZENvbHVtbihGWF9GTE9BVCB4cG9zKTsKKyAgICB2b2lkCUJyZWFrU3BhY2UoQ1BERl9UZXh0T2JqZWN0KiBwVGV4dE9iaik7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9mcGRmdGV4dC91bmljb2Rlbm9ybWFsaXphdGlvbi5jcHAgYi9jb3JlL3NyYy9mcGRmdGV4dC91bmljb2Rlbm9ybWFsaXphdGlvbi5jcHAKaW5kZXggYjkyNzg3Yi4uMWQzNmI4NSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnBkZnRleHQvdW5pY29kZW5vcm1hbGl6YXRpb24uY3BwCisrKyBiL2NvcmUvc3JjL2ZwZGZ0ZXh0L3VuaWNvZGVub3JtYWxpemF0aW9uLmNwcApAQCAtMSw3NSArMSw3NSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZnRleHQvZnBkZl90ZXh0LmgiDQotZXh0ZXJuIGNvbnN0IEZYX1dDSEFSIGdfVW5pY29kZURhdGFfTm9ybWFsaXphdGlvbls2NTUzNl07DQotZXh0ZXJuIGNvbnN0IEZYX1dDSEFSIGdfVW5pY29kZURhdGFfTm9ybWFsaXphdGlvbl9NYXAxWzUzNzZdOw0KLWV4dGVybiBjb25zdCBGWF9XQ0hBUiBnX1VuaWNvZGVEYXRhX05vcm1hbGl6YXRpb25fTWFwMlsxNzM0XTsNCi1leHRlcm4gY29uc3QgRlhfV0NIQVIgZ19Vbmljb2RlRGF0YV9Ob3JtYWxpemF0aW9uX01hcDNbMTE2NF07DQotZXh0ZXJuIGNvbnN0IEZYX1dDSEFSIGdfVW5pY29kZURhdGFfTm9ybWFsaXphdGlvbl9NYXA0WzQ4OF07DQotRlhfTFBDV1NUUiBnX1VuaWNvZGVEYXRhX05vcm1hbGl6YXRpb25fTWFwc1s1XSA9IHsNCi0gICAgTlVMTCwNCi0gICAgZ19Vbmljb2RlRGF0YV9Ob3JtYWxpemF0aW9uX01hcDEsDQotICAgIGdfVW5pY29kZURhdGFfTm9ybWFsaXphdGlvbl9NYXAyLA0KLSAgICBnX1VuaWNvZGVEYXRhX05vcm1hbGl6YXRpb25fTWFwMywNCi0gICAgZ19Vbmljb2RlRGF0YV9Ob3JtYWxpemF0aW9uX01hcDQNCi19Ow0KLUZYX1NUUlNJWkUgRlhfVW5pY29kZV9HZXROb3JtYWxpemF0aW9uKEZYX1dDSEFSIHdjaCwgRlhfTFBXU1RSIHBEc3QpDQotew0KLSAgICB3Y2ggPSB3Y2ggJiAweEZGRkY7DQotICAgIEZYX1dDSEFSIHdGaW5kID0gZ19Vbmljb2RlRGF0YV9Ob3JtYWxpemF0aW9uW3djaF07DQotICAgIGlmICghd0ZpbmQpIHsNCi0gICAgICAgIGlmIChwRHN0KSB7DQotICAgICAgICAgICAgKnBEc3QgPSB3Y2g7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gMTsNCi0gICAgfQ0KLSAgICBpZih3RmluZCA+PSAweDgwMDApIHsNCi0gICAgICAgIHdjaCA9IHdGaW5kIC0gMHg4MDAwOw0KLSAgICAgICAgd0ZpbmQgPSAxOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgd2NoID0gd0ZpbmQgJiAweDBGRkY7DQotICAgICAgICB3RmluZCA+Pj0gMTI7DQotICAgIH0NCi0gICAgRlhfTFBDV1NUUiBwTWFwID0gZ19Vbmljb2RlRGF0YV9Ob3JtYWxpemF0aW9uX01hcHNbd0ZpbmRdOw0KLSAgICBpZiAocE1hcCA9PSBnX1VuaWNvZGVEYXRhX05vcm1hbGl6YXRpb25fTWFwNCkgew0KLSAgICAgICAgcE1hcCA9IGdfVW5pY29kZURhdGFfTm9ybWFsaXphdGlvbl9NYXA0ICsgd2NoOw0KLSAgICAgICAgd0ZpbmQgPSAoRlhfV0NIQVIpKCpwTWFwICsrKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHBNYXAgKz0gd2NoOw0KLSAgICB9DQotICAgIGlmIChwRHN0KSB7DQotICAgICAgICBGWF9XQ0hBUiBuID0gd0ZpbmQ7DQotICAgICAgICB3aGlsZSAobiAtLSkgew0KLSAgICAgICAgICAgICpwRHN0ICsrID0gKnBNYXAgKys7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIChGWF9TVFJTSVpFKXdGaW5kOw0KLX0NCi1GWF9TVFJTSVpFIEZYX1dpZGVTdHJpbmdfR2V0Tm9ybWFsaXphdGlvbihGWF9XU1RSIHdzU3JjLCBGWF9MUFdTVFIgcERzdCkNCi17DQotICAgIEZYX1NUUlNJWkUgbkNvdW50ID0gMDsNCi0gICAgZm9yIChGWF9TVFJTSVpFIGxlbiA9IDA7IGxlbiA8IHdzU3JjLkdldExlbmd0aCgpOyBsZW4gKyspIHsNCi0gICAgICAgIEZYX1dDSEFSIHdjaCA9IHdzU3JjLkdldEF0KGxlbik7DQotICAgICAgICBpZihwRHN0KSB7DQotICAgICAgICAgICAgbkNvdW50ICs9IEZYX1VuaWNvZGVfR2V0Tm9ybWFsaXphdGlvbih3Y2gsIHBEc3QgKyBuQ291bnQpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBuQ291bnQgKz0gRlhfVW5pY29kZV9HZXROb3JtYWxpemF0aW9uKHdjaCwgcERzdCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIG5Db3VudDsNCi19DQotRlhfU1RSU0laRSBGWF9XaWRlU3RyaW5nX0dldE5vcm1hbGl6YXRpb24oRlhfV1NUUiB3c1NyYywgQ0ZYX1dpZGVTdHJpbmcgJndzRHN0KQ0KLXsNCi0gICAgRlhfU1RSU0laRSBuTGVuID0gRlhfV2lkZVN0cmluZ19HZXROb3JtYWxpemF0aW9uKHdzU3JjLCAoRlhfTFBXU1RSKU5VTEwpOw0KLSAgICBpZiAoIW5MZW4pIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIEZYX0xQV1NUUiBwQnVmID0gd3NEc3QuR2V0QnVmZmVyKG5MZW4pOw0KLSAgICBGWF9XaWRlU3RyaW5nX0dldE5vcm1hbGl6YXRpb24od3NTcmMsIHBCdWYpOw0KLSAgICB3c0RzdC5SZWxlYXNlQnVmZmVyKG5MZW4pOw0KLSAgICByZXR1cm4gbkxlbjsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnBkZnRleHQvZnBkZl90ZXh0LmgiCitleHRlcm4gY29uc3QgRlhfV0NIQVIgZ19Vbmljb2RlRGF0YV9Ob3JtYWxpemF0aW9uWzY1NTM2XTsKK2V4dGVybiBjb25zdCBGWF9XQ0hBUiBnX1VuaWNvZGVEYXRhX05vcm1hbGl6YXRpb25fTWFwMVs1Mzc2XTsKK2V4dGVybiBjb25zdCBGWF9XQ0hBUiBnX1VuaWNvZGVEYXRhX05vcm1hbGl6YXRpb25fTWFwMlsxNzM0XTsKK2V4dGVybiBjb25zdCBGWF9XQ0hBUiBnX1VuaWNvZGVEYXRhX05vcm1hbGl6YXRpb25fTWFwM1sxMTY0XTsKK2V4dGVybiBjb25zdCBGWF9XQ0hBUiBnX1VuaWNvZGVEYXRhX05vcm1hbGl6YXRpb25fTWFwNFs0ODhdOworRlhfTFBDV1NUUiBnX1VuaWNvZGVEYXRhX05vcm1hbGl6YXRpb25fTWFwc1s1XSA9IHsKKyAgICBOVUxMLAorICAgIGdfVW5pY29kZURhdGFfTm9ybWFsaXphdGlvbl9NYXAxLAorICAgIGdfVW5pY29kZURhdGFfTm9ybWFsaXphdGlvbl9NYXAyLAorICAgIGdfVW5pY29kZURhdGFfTm9ybWFsaXphdGlvbl9NYXAzLAorICAgIGdfVW5pY29kZURhdGFfTm9ybWFsaXphdGlvbl9NYXA0Cit9OworRlhfU1RSU0laRSBGWF9Vbmljb2RlX0dldE5vcm1hbGl6YXRpb24oRlhfV0NIQVIgd2NoLCBGWF9MUFdTVFIgcERzdCkKK3sKKyAgICB3Y2ggPSB3Y2ggJiAweEZGRkY7CisgICAgRlhfV0NIQVIgd0ZpbmQgPSBnX1VuaWNvZGVEYXRhX05vcm1hbGl6YXRpb25bd2NoXTsKKyAgICBpZiAoIXdGaW5kKSB7CisgICAgICAgIGlmIChwRHN0KSB7CisgICAgICAgICAgICAqcERzdCA9IHdjaDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgaWYod0ZpbmQgPj0gMHg4MDAwKSB7CisgICAgICAgIHdjaCA9IHdGaW5kIC0gMHg4MDAwOworICAgICAgICB3RmluZCA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgd2NoID0gd0ZpbmQgJiAweDBGRkY7CisgICAgICAgIHdGaW5kID4+PSAxMjsKKyAgICB9CisgICAgRlhfTFBDV1NUUiBwTWFwID0gZ19Vbmljb2RlRGF0YV9Ob3JtYWxpemF0aW9uX01hcHNbd0ZpbmRdOworICAgIGlmIChwTWFwID09IGdfVW5pY29kZURhdGFfTm9ybWFsaXphdGlvbl9NYXA0KSB7CisgICAgICAgIHBNYXAgPSBnX1VuaWNvZGVEYXRhX05vcm1hbGl6YXRpb25fTWFwNCArIHdjaDsKKyAgICAgICAgd0ZpbmQgPSAoRlhfV0NIQVIpKCpwTWFwICsrKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwTWFwICs9IHdjaDsKKyAgICB9CisgICAgaWYgKHBEc3QpIHsKKyAgICAgICAgRlhfV0NIQVIgbiA9IHdGaW5kOworICAgICAgICB3aGlsZSAobiAtLSkgeworICAgICAgICAgICAgKnBEc3QgKysgPSAqcE1hcCArKzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gKEZYX1NUUlNJWkUpd0ZpbmQ7Cit9CitGWF9TVFJTSVpFIEZYX1dpZGVTdHJpbmdfR2V0Tm9ybWFsaXphdGlvbihGWF9XU1RSIHdzU3JjLCBGWF9MUFdTVFIgcERzdCkKK3sKKyAgICBGWF9TVFJTSVpFIG5Db3VudCA9IDA7CisgICAgZm9yIChGWF9TVFJTSVpFIGxlbiA9IDA7IGxlbiA8IHdzU3JjLkdldExlbmd0aCgpOyBsZW4gKyspIHsKKyAgICAgICAgRlhfV0NIQVIgd2NoID0gd3NTcmMuR2V0QXQobGVuKTsKKyAgICAgICAgaWYocERzdCkgeworICAgICAgICAgICAgbkNvdW50ICs9IEZYX1VuaWNvZGVfR2V0Tm9ybWFsaXphdGlvbih3Y2gsIHBEc3QgKyBuQ291bnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbkNvdW50ICs9IEZYX1VuaWNvZGVfR2V0Tm9ybWFsaXphdGlvbih3Y2gsIHBEc3QpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBuQ291bnQ7Cit9CitGWF9TVFJTSVpFIEZYX1dpZGVTdHJpbmdfR2V0Tm9ybWFsaXphdGlvbihGWF9XU1RSIHdzU3JjLCBDRlhfV2lkZVN0cmluZyAmd3NEc3QpCit7CisgICAgRlhfU1RSU0laRSBuTGVuID0gRlhfV2lkZVN0cmluZ19HZXROb3JtYWxpemF0aW9uKHdzU3JjLCAoRlhfTFBXU1RSKU5VTEwpOworICAgIGlmICghbkxlbikgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgRlhfTFBXU1RSIHBCdWYgPSB3c0RzdC5HZXRCdWZmZXIobkxlbik7CisgICAgRlhfV2lkZVN0cmluZ19HZXROb3JtYWxpemF0aW9uKHdzU3JjLCBwQnVmKTsKKyAgICB3c0RzdC5SZWxlYXNlQnVmZmVyKG5MZW4pOworICAgIHJldHVybiBuTGVuOworfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnBkZnRleHQvdW5pY29kZW5vcm1hbGl6YXRpb25kYXRhLmNwcCBiL2NvcmUvc3JjL2ZwZGZ0ZXh0L3VuaWNvZGVub3JtYWxpemF0aW9uZGF0YS5jcHAKaW5kZXggNzUwMzgyYi4uMzdjY2RjOTQgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2ZwZGZ0ZXh0L3VuaWNvZGVub3JtYWxpemF0aW9uZGF0YS5jcHAKKysrIGIvY29yZS9zcmMvZnBkZnRleHQvdW5pY29kZW5vcm1hbGl6YXRpb25kYXRhLmNwcApAQCAtMSw0NjYxICsxLDQ2NjEgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X3N5c3RlbS5oIg0KLWV4dGVybiBjb25zdCBGWF9XQ0hBUiBnX1VuaWNvZGVEYXRhX05vcm1hbGl6YXRpb25bNjU1MzZdID0gew0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgwMDEsIDB4MDAwMCwgMHgyMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwMDIsIDB4ODAwMiwgMHgwMDAwLCAweDIwMDQsIDB4MDAwMCwgMHgwMDAwLCAweDgwMDMsDQotICAgIDB4ODAwNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgwMDUsIDB4MDAwMCwgMHg4MDA2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgwMDcsIDB4ODAwOCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4ODAwOSwgMHg4MDBBLCAweDgwMEIsIDB4ODAwQywgMHgwMDAwLCAweDAwMDAsIDB4ODAwRCwgMHg4MDBFLCAweDgwMEYsIDB4MDAwMCwgMHgzMDAwLCAweDMwMDMsIDB4MzAwNiwgMHgwMDAwLA0KLSAgICAweDgwMTAsIDB4ODAxMSwgMHg4MDEyLCAweDgwMTMsIDB4ODAxNCwgMHg4MDE1LCAweDAwMDAsIDB4ODAxNiwgMHg4MDE3LCAweDgwMTgsIDB4ODAxOSwgMHg4MDFBLCAweDgwMUIsIDB4ODAxQywgMHg4MDFELCAweDgwMUUsDQotICAgIDB4ODAxRiwgMHg4MDIwLCAweDgwMjEsIDB4ODAyMiwgMHg4MDIzLCAweDgwMjQsIDB4ODAyNSwgMHgwMDAwLCAweDgwMjYsIDB4ODAyNywgMHg4MDI4LCAweDgwMjksIDB4ODAyQSwgMHg4MDJCLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4MDJDLCAweDgwMkQsIDB4ODAyRSwgMHg4MDJGLCAweDgwMzAsIDB4ODAzMSwgMHgwMDAwLCAweDgwMzIsIDB4ODAzMywgMHg4MDM0LCAweDgwMzUsIDB4ODAzNiwgMHg4MDM3LCAweDgwMzgsIDB4ODAzOSwgMHg4MDNBLA0KLSAgICAweDAwMDAsIDB4ODAzQiwgMHg4MDNDLCAweDgwM0QsIDB4ODAzRSwgMHg4MDNGLCAweDgwNDAsIDB4MDAwMCwgMHg4MDQxLCAweDgwNDIsIDB4ODA0MywgMHg4MDQ0LCAweDgwNDUsIDB4ODA0NiwgMHgwMDAwLCAweDgwNDcsDQotICAgIDB4ODA0OCwgMHg4MDQ5LCAweDgwNEEsIDB4ODA0QiwgMHg4MDRDLCAweDgwNEQsIDB4ODA0RSwgMHg4MDRGLCAweDgwNTAsIDB4ODA1MSwgMHg4MDUyLCAweDgwNTMsIDB4ODA1NCwgMHg4MDU1LCAweDgwNTYsIDB4ODA1NywNCi0gICAgMHg4MDU4LCAweDgwNTksIDB4ODA1QSwgMHg4MDVCLCAweDgwNUMsIDB4ODA1RCwgMHg4MDVFLCAweDgwNUYsIDB4ODA2MCwgMHg4MDYxLCAweDgwNjIsIDB4ODA2MywgMHg4MDY0LCAweDgwNjUsIDB4ODA2NiwgMHg4MDY3LA0KLSAgICAweDgwNjgsIDB4ODA2OSwgMHg4MDZBLCAweDgwNkIsIDB4ODA2QywgMHg4MDZELCAweDgwNkUsIDB4ODA2RiwgMHg4MDcwLCAweDgwNzEsIDB4ODA3MiwgMHg4MDczLCAweDgwNzQsIDB4ODA3NSwgMHg4MDc2LCAweDgwNzcsDQotICAgIDB4ODA3OCwgMHgwMDAwLCAweDIwMDYsIDB4MjAwOCwgMHg4MDc5LCAweDgwN0EsIDB4ODA3QiwgMHg4MDdDLCAweDgwN0QsIDB4ODA3RSwgMHg4MDdGLCAweDgwODAsIDB4ODA4MSwgMHg4MDgyLCAweDgwODMsIDB4ODA4NCwNCi0gICAgMHg4MDg1LCAweDgwODYsIDB4ODA4NywgMHg4MDg4LCAweDgwODksIDB4ODA4QSwgMHg4MDhCLCAweDgwOEMsIDB4ODA4RCwgMHg4MDhFLCAweDAwMDAsIDB4MDAwMCwgMHg4MDhGLCAweDgwOTAsIDB4ODA5MSwgMHg4MDkyLA0KLSAgICAweDgwOTMsIDB4ODA5NCwgMHgyMDBBLCAweDIwMEMsIDB4ODA5NSwgMHg4MDk2LCAweDgwOTcsIDB4ODA5OCwgMHg4MDk5LCAweDgwOUEsIDB4ODA5QiwgMHg4MDlDLCAweDgwOUQsIDB4ODA5RSwgMHg4MDlGLCAweDgwQTAsDQotICAgIDB4ODBBMSwgMHg4MEEyLCAweDgwQTMsIDB4ODBBNCwgMHg4MEE1LCAweDgwQTYsIDB4ODBBNywgMHg4MEE4LCAweDgwQTksIDB4ODBBQSwgMHg4MEFCLCAweDgwQUMsIDB4ODBBRCwgMHg4MEFFLCAweDgwQUYsIDB4ODBCMCwNCi0gICAgMHg4MEIxLCAweDgwQjIsIDB4ODBCMywgMHg4MEI0LCAweDgwQjUsIDB4ODBCNiwgMHg4MEI3LCAweDgwQjgsIDB4ODBCOSwgMHg4MEJBLCAweDgwQkIsIDB4ODBCQywgMHg4MEJELCAweDgwQkUsIDB4ODBCRiwgMHg4MEMwLA0KLSAgICAweDgwQzEsIDB4ODBDMiwgMHg4MEMzLCAweDgwQzQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODBDNSwgMHg4MEM2LCAweDgwQzcsIDB4ODBDOCwgMHg4MEM5LCAweDgwQ0EsIDB4MDAwMCwgMHg4MENCLCAweDAwMDAsDQotICAgIDB4ODBDQywgMHg4MENELCAweDgwQ0UsIDB4ODBDRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4MEQwLCAweDgwRDEsIDB4ODBEMiwgMHg4MEQzLCAweDAwMDAsIDB4ODBENCwgMHg4MEQ1LCAweDgwRDYsIDB4ODBENywNCi0gICAgMHg4MEQ4LCAweDgwRDksIDB4MDAwMCwgMHgwMDAwLCAweDgwREEsIDB4ODBEQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgwREMsIDB4ODBERCwgMHg4MERFLCAweDgwREYsIDB4ODBFMCwgMHg4MEUxLA0KLSAgICAweDgwRTIsIDB4MDAwMCwgMHg4MEUzLCAweDgwRTQsIDB4ODBFNSwgMHg4MEU2LCAweDgwRTcsIDB4MDAwMCwgMHg4MEU4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMDBFLCAweDIwMTAsIDB4MjAxMiwgMHgyMDE0LCAweDIwMTYsIDB4MjAxOCwgMHgyMDFBLCAweDIwMUMsIDB4MjAxRSwgMHg4MEU5LCAweDgwRUEsIDB4ODBFQiwNCi0gICAgMHg4MEVDLCAweDgwRUQsIDB4ODBFRSwgMHg4MEVGLCAweDgwRjAsIDB4ODBGMSwgMHg4MEYyLCAweDgwRjMsIDB4ODBGNCwgMHg4MEY1LCAweDgwRjYsIDB4ODBGNywgMHg4MEY4LCAweDgwRjksIDB4ODBGQSwgMHg4MEZCLA0KLSAgICAweDgwRkMsIDB4ODBGRCwgMHg4MEZFLCAweDgwRkYsIDB4ODEwMCwgMHg4MTAxLCAweDgxMDIsIDB4ODEwMywgMHg4MTA0LCAweDgxMDUsIDB4ODEwNiwgMHg4MTA3LCAweDgxMDgsIDB4ODEwOSwgMHg4MTBBLCAweDgxMEIsDQotICAgIDB4ODEwQywgMHgyMDIwLCAweDIwMjIsIDB4MjAyNCwgMHg4MTBELCAweDgxMEUsIDB4MDAwMCwgMHgwMDAwLCAweDgxMEYsIDB4ODExMCwgMHg4MTExLCAweDgxMTIsIDB4ODExMywgMHg4MTE0LCAweDgxMTUsIDB4ODExNiwNCi0gICAgMHg4MTE3LCAweDgxMTgsIDB4ODExOSwgMHg4MTFBLCAweDgxMUIsIDB4ODExQywgMHg4MTFELCAweDgxMUUsIDB4ODExRiwgMHg4MTIwLCAweDgxMjEsIDB4ODEyMiwgMHg4MTIzLCAweDgxMjQsIDB4ODEyNSwgMHg4MTI2LA0KLSAgICAweDgxMjcsIDB4ODEyOCwgMHg4MTI5LCAweDgxMkEsIDB4ODEyQiwgMHg4MTJDLCAweDgxMkQsIDB4ODEyRSwgMHg4MTJGLCAweDgxMzAsIDB4ODEzMSwgMHg4MTMyLCAweDAwMDAsIDB4MDAwMCwgMHg4MTMzLCAweDgxMzQsDQotICAgIDB4ODEzNSwgMHg4MTM2LCAweDAwMDAsIDB4MDAwMCwgMHg4MTM3LCAweDgxMzgsIDB4ODEzOSwgMHg4MTNBLCAweDgxM0IsIDB4ODEzQywgMHg4MTNELCAweDgxM0UsIDB4ODEzRiwgMHg4MTQwLCAweDgxNDEsIDB4ODE0MiwNCi0gICAgMHg4MTQzLCAweDgxNDQsIDB4ODE0NSwgMHg4MTQ2LCAweDgxNDcsIDB4ODE0OCwgMHg4MTQ5LCAweDgxNEEsIDB4MjAyNiwgMHgyMDI4LCAweDgxNEIsIDB4ODE0QywgMHg4MTRELCAweDgxNEUsIDB4ODE0RiwgMHg4MTUwLA0KLSAgICAweDgxNTEsIDB4MDAwMCwgMHgwMDAwLCAweDgxNTIsIDB4ODE1MywgMHg4MTU0LCAweDgxNTUsIDB4ODE1NiwgMHg4MTU3LCAweDgxNTgsIDB4ODE1OSwgMHg4MTVBLCAweDgxNUIsIDB4ODE1QywgMHg4MTVELCAweDgxNUUsDQotICAgIDB4ODE1RiwgMHgwMDAwLCAweDgxNjAsIDB4ODE2MSwgMHg4MTYyLCAweDgxNjMsIDB4ODE2NCwgMHg4MTY1LCAweDgxNjYsIDB4MDAwMCwgMHg4MTY3LCAweDgxNjgsIDB4ODE2OSwgMHg4MTZBLCAweDgxNkIsIDB4ODE2QywNCi0gICAgMHg4MTZELCAweDgxNkUsIDB4ODE2RiwgMHgwMDAwLCAweDAwMDAsIDB4ODE3MCwgMHg4MTcxLCAweDAwMDAsIDB4ODE3MiwgMHgwMDAwLCAweDgxNzMsIDB4ODE3NCwgMHg4MTc1LCAweDgxNzYsIDB4MDAwMCwgMHg4MTc3LA0KLSAgICAweDgxNzgsIDB4ODE3OSwgMHg4MTdBLCAweDgxN0IsIDB4ODE3QywgMHg4MTdELCAweDIwMkEsIDB4MDAwMCwgMHgwMDAwLCAweDgxN0UsIDB4ODE3RiwgMHg4MTgwLCAweDgxODEsIDB4ODE4MiwgMHg4MTgzLCAweDgxODQsDQotICAgIDB4ODE4NSwgMHg4MTg2LCAweDgxODcsIDB4MDAwMCwgMHg4MTg4LCAweDgxODksIDB4ODE4QSwgMHg4MThCLCAweDgxOEMsIDB4ODE4RCwgMHgwMDAwLCAweDgxOEUsIDB4ODE4RiwgMHg4MTkwLCAweDgxOTEsIDB4ODE5MiwNCi0gICAgMHg4MTkzLCAweDgxOTQsIDB4MDAwMCwgMHg4MTk1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgxOTYsIDB4MDAwMCwgMHg4MTk3LCAweDgxOTgsIDB4ODE5OSwgMHg4MTlBLCAweDgxOUIsIDB4ODE5QywgMHg4MTlELA0KLSAgICAweDgxOUUsIDB4MDAwMCwgMHgwMDAwLCAweDIwMkMsIDB4MjAyRSwgMHgyMDMwLCAweDIwMzIsIDB4MjAzNCwgMHgyMDM2LCAweDIwMzgsIDB4MjAzQSwgMHgyMDNDLCAweDAwMDAsIDB4MDAwMCwgMHg4MTlGLCAweDgxQTAsDQotICAgIDB4ODFBMSwgMHg4MUEyLCAweDgxQTMsIDB4ODFBNCwgMHg4MUE1LCAweDgxQTYsIDB4ODFBNywgMHg4MUE4LCAweDgxQTksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4ODFBQSwgMHg4MUFCLCAweDgxQUMsIDB4ODFBRCwgMHg4MUFFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4ODFBRiwgMHg4MUIwLCAweDAwMDAsIDB4ODFCMSwgMHg4MUIyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgxQjMsIDB4ODFCNCwgMHg4MUI1LCAweDgxQjYsIDB4ODFCNywgMHg4MUI4LCAweDgxQjksIDB4ODFCQSwgMHg4MUJCLCAweDgxQkMsIDB4ODFCRCwgMHg4MUJFLCAweDgxQkYsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4MUMwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgxQzEsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgxQzIsIDB4ODFDMywgMHg4MUM0LCAweDgxQzUsIDB4ODFDNiwgMHg4MUM3LCAweDgxQzgsIDB4MDAwMCwgMHg4MUM5LCAweDAwMDAsIDB4ODFDQSwgMHg4MUNCLA0KLSAgICAweDgxQ0MsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4MUNELCAweDgxQ0UsIDB4ODFDRiwgMHg4MUQwLCAweDgxRDEsIDB4ODFEMiwNCi0gICAgMHg4MUQzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODFENCwgMHg4MUQ1LCAweDgxRDYsIDB4ODFENywgMHg4MUQ4LCAweDAwMDAsDQotICAgIDB4ODFEOSwgMHg4MURBLCAweDgxREIsIDB4ODFEQywgMHg4MURELCAweDgxREUsIDB4ODFERiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDgxRTAsIDB4ODFFMSwgMHg4MUUyLCAweDAwMDAsIDB4ODFFMywgMHg4MUU0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgxRTUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4ODFFNiwgMHg4MUU3LCAweDAwMDAsIDB4ODFFOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4MUU5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODFFQSwgMHg4MUVCLCAweDgxRUMsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4MUVELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODFFRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDgxRUYsIDB4ODFGMCwgMHgwMDAwLCAweDgxRjEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODFGMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgxRjMsIDB4ODFGNCwgMHg4MUY1LCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgxRjYsIDB4ODFGNywgMHgwMDAwLCAweDAwMDAsIDB4ODFGOCwgMHg4MUY5LCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4MUZBLCAweDgxRkIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4MUZDLCAweDgxRkQsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODFGRSwgMHg4MUZGLCAweDAwMDAsIDB4MDAwMCwgMHg4MjAwLCAweDgyMDEsDQotICAgIDB4ODIwMiwgMHg4MjAzLCAweDgyMDQsIDB4ODIwNSwgMHg4MjA2LCAweDgyMDcsIDB4ODIwOCwgMHg4MjA5LCAweDgyMEEsIDB4ODIwQiwgMHg4MjBDLCAweDgyMEQsIDB4ODIwRSwgMHg4MjBGLCAweDgyMTAsIDB4ODIxMSwNCi0gICAgMHg4MjEyLCAweDgyMTMsIDB4ODIxNCwgMHg4MjE1LCAweDIwM0UsIDB4MjA0MCwgMHg4MjE2LCAweDgyMTcsIDB4MDAwMCwgMHgwMDAwLCAweDgyMTgsIDB4ODIxOSwgMHg4MjFBLCAweDgyMUIsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDgyMUMsIDB4ODIxRCwgMHg4MjFFLCAweDgyMUYsIDB4MjA0MiwgMHgyMDQ0LCAweDgyMjAsIDB4ODIyMSwgMHg4MjIyLCAweDgyMjMsIDB4MDAwMCwgMHgwMDAwLCAweDgyMjQsIDB4ODIyNSwgMHg4MjI2LCAweDgyMjcsDQotICAgIDB4MDAwMCwgMHg4MjI4LCAweDgyMjksIDB4ODIyQSwgMHg4MjJCLCAweDgyMkMsIDB4ODIyRCwgMHg4MjJFLCAweDgyMkYsIDB4ODIzMCwgMHg4MjMxLCAweDAwMDAsIDB4MDAwMCwgMHg4MjMyLCAweDgyMzMsIDB4MDAwMCwNCi0gICAgMHg4MjM0LCAweDgyMzUsIDB4ODIzNiwgMHg4MjM3LCAweDIwNDYsIDB4MjA0OCwgMHg4MjM4LCAweDgyMzksIDB4MDAwMCwgMHgwMDAwLCAweDgyM0EsIDB4ODIzQiwgMHg4MjNDLCAweDgyM0QsIDB4ODIzRSwgMHg4MjNGLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4MjQwLCAweDgyNDEsIDB4ODI0MiwgMHg4MjQzLCAweDgyNDQsIDB4ODI0NSwgMHgwMDAwLCAweDAwMDAsIDB4ODI0NiwgMHg4MjQ3LCAweDgyNDgsIDB4ODI0OSwgMHg4MjRBLCAweDgyNEIsDQotICAgIDB4ODI0QywgMHg4MjRELCAweDgyNEUsIDB4ODI0RiwgMHg4MjUwLCAweDgyNTEsIDB4ODI1MiwgMHg4MjUzLCAweDgyNTQsIDB4ODI1NSwgMHg4MjU2LCAweDgyNTcsIDB4ODI1OCwgMHg4MjU5LCAweDgyNUEsIDB4ODI1QiwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDgyNUMsIDB4ODI1RCwgMHg4MjVFLCAweDgyNUYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMDRBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwNEMsIDB4MjA0RSwgMHgyMDUwLCAweDIwNTIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDIwNTQsIDB4MDAwMCwgMHgyMDU2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjA1OCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMDVBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MjA1QywgMHgwMDAwLCAweDAwMDAsIDB4MjA1RSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjA2MCwgMHgyMDYyLCAweDIwNjQsIDB4MjA2NiwgMHgyMDY4LCAweDIwNkEsIDB4MjA2QywgMHgyMDZFLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMDcwLCAweDIwNzIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjA3NCwgMHgyMDc2LCAweDAwMDAsIDB4MjA3OCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjA3QSwgMHgwMDAwLCAweDAwMDAsIDB4MjA3QywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwN0UsIDB4MjA4MCwgMHgyMDgyLCAweDAwMDAsIDB4MDAwMCwgMHgyMDg0LCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMDg2LCAweDAwMDAsIDB4MDAwMCwgMHgyMDg4LCAweDIwOEEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjA4QywgMHgyMDhFLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwOTAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwOTIsIDB4MjA5NCwgMHgyMDk2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwOTgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDIwOUEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjA5QywgMHgyMDlFLCAweDAwMDAsIDB4MjBBMCwgMHgyMEEyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwQTQsIDB4MjBBNiwgMHgyMEE4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwQUEsIDB4MDAwMCwgMHgyMEFDLCAweDIwQUUsIDB4MjBCMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMEIyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjBCNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwQjYsIDB4MjBCOCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgyNjAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjBCQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMEJDLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MjBCRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwQzAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMEMyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwQzQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjBDNiwgMHgwMDAwLCAweDIwQzgsIDB4MjBDQSwgMHgyMENDLCAweDIwQ0UsIDB4MjBEMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDIwRDIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwRDQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjBENiwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDIwRDgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMERBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjBEQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMERFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwRTAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODI2MSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwRTIsIDB4MDAwMCwgMHgyMEU0LCAweDAwMDAsIDB4MjBFNiwgMHgwMDAwLCAweDIwRTgsIDB4MDAwMCwgMHgyMEVBLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDIwRUMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMEVFLCAweDAwMDAsIDB4MjBGMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MjBGMiwgMHgyMEY0LCAweDAwMDAsIDB4MjBGNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODI2MiwgMHg4MjYzLCAweDgyNjQsIDB4ODI2NSwNCi0gICAgMHg4MjY2LCAweDgyNjcsIDB4ODI2OCwgMHg4MjY5LCAweDgyNkEsIDB4ODI2QiwgMHg4MjZDLCAweDgyNkQsIDB4ODI2RSwgMHg4MjZGLCAweDgyNzAsIDB4MDAwMCwgMHg4MjcxLCAweDgyNzIsIDB4ODI3MywgMHg4Mjc0LA0KLSAgICAweDgyNzUsIDB4ODI3NiwgMHg4Mjc3LCAweDgyNzgsIDB4ODI3OSwgMHg4MjdBLCAweDgyN0IsIDB4ODI3QywgMHg4MjdELCAweDgyN0UsIDB4ODI3RiwgMHg4MjgwLCAweDgyODEsIDB4ODI4MiwgMHgwMDAwLCAweDgyODMsDQotICAgIDB4ODI4NCwgMHg4Mjg1LCAweDgyODYsIDB4ODI4NywgMHg4Mjg4LCAweDgyODksIDB4ODI4QSwgMHg4MjhCLCAweDgyOEMsIDB4ODI4RCwgMHg4MjhFLCAweDgyOEYsIDB4ODI5MCwgMHg4MjkxLCAweDgyOTIsIDB4ODI5MywNCi0gICAgMHg4Mjk0LCAweDgyOTUsIDB4ODI5NiwgMHg4Mjk3LCAweDgyOTgsIDB4ODI5OSwgMHg4MjlBLCAweDgyOUIsIDB4ODI5QywgMHg4MjlELCAweDgyOUUsIDB4MDAwMCwgMHg4MjlGLCAweDgyQTAsIDB4ODJBMSwgMHg4MkEyLA0KLSAgICAweDgyQTMsIDB4ODJBNCwgMHg4MkE1LCAweDgyQTYsIDB4ODJBNywgMHg4MkE4LCAweDgyQTksIDB4ODJBQSwgMHg4MkFCLCAweDAwMDAsIDB4MjBGOCwgMHg4MkFDLCAweDAwMDAsIDB4ODJBRCwgMHg4MkFFLCAweDgyQUYsDQotICAgIDB4ODJCMCwgMHg4MkIxLCAweDgyQjIsIDB4ODJCMywgMHg4MkI0LCAweDgyQjUsIDB4ODJCNiwgMHg4MkI3LCAweDgyQjgsIDB4ODJCOSwgMHg4MkJBLCAweDgyQkIsIDB4ODJCQywgMHg4MkJELCAweDgyQkUsIDB4ODJCRiwNCi0gICAgMHg4MkMwLCAweDgyQzEsIDB4ODJDMiwgMHg4MkMzLCAweDgyQzQsIDB4ODJDNSwgMHg4MkM2LCAweDAwMDAsIDB4ODJDNywgMHgwMDAwLCAweDAwMDAsIDB4ODJDOCwgMHg4MkM5LCAweDgyQ0EsIDB4ODJDQiwgMHg4MkNDLA0KLSAgICAweDgyQ0QsIDB4ODJDRSwgMHg4MkNGLCAweDgyRDAsIDB4ODJEMSwgMHg4MkQyLCAweDgyRDMsIDB4ODJENCwgMHg4MkQ1LCAweDgyRDYsIDB4ODJENywgMHg4MkQ4LCAweDgyRDksIDB4ODJEQSwgMHg4MkRCLCAweDgyREMsDQotICAgIDB4ODJERCwgMHg4MkRFLCAweDgyREYsIDB4ODJFMCwgMHg4MkUxLCAweDgyRTIsIDB4ODJFMywgMHg4MkU0LCAweDgyRTUsIDB4ODJFNiwgMHg4MkU3LCAweDgyRTgsIDB4ODJFOSwgMHg4MkVBLCAweDgyRUIsIDB4ODJFQywNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDgyRUQsIDB4ODJFRSwgMHg4MkVGLCAweDgyRjAsIDB4ODJGMSwgMHg4MkYyLCAweDgyRjMsIDB4ODJGNCwgMHg4MkY1LCAweDgyRjYsIDB4ODJGNywgMHg4MkY4LCAweDgyRjksIDB4ODJGQSwgMHg4MkZCLCAweDgyRkMsDQotICAgIDB4ODJGRCwgMHg4MkZFLCAweDgyRkYsIDB4ODMwMCwgMHg4MzAxLCAweDgzMDIsIDB4ODMwMywgMHg4MzA0LCAweDgzMDUsIDB4ODMwNiwgMHg4MzA3LCAweDgzMDgsIDB4ODMwOSwgMHg4MzBBLCAweDgzMEIsIDB4ODMwQywNCi0gICAgMHg4MzBELCAweDgzMEUsIDB4ODMwRiwgMHg4MzEwLCAweDgzMTEsIDB4ODMxMiwgMHg4MzEzLCAweDgzMTQsIDB4ODMxNSwgMHg4MzE2LCAweDgzMTcsIDB4ODMxOCwgMHg4MzE5LCAweDgzMUEsIDB4ODMxQiwgMHg4MzFDLA0KLSAgICAweDgzMUQsIDB4ODMxRSwgMHg4MzFGLCAweDgzMjAsIDB4ODMyMSwgMHg4MzIyLCAweDgzMjMsIDB4ODMyNCwgMHg4MzI1LCAweDgzMjYsIDB4ODMyNywgMHg4MzI4LCAweDgzMjksIDB4ODMyQSwgMHg4MzJCLCAweDgzMkMsDQotICAgIDB4ODMyRCwgMHg4MzJFLCAweDgzMkYsIDB4ODMzMCwgMHg4MzMxLCAweDgzMzIsIDB4ODMzMywgMHg4MzM0LCAweDgzMzUsIDB4ODMzNiwgMHg4MzM3LCAweDgzMzgsIDB4ODMzOSwgMHg4MzNBLCAweDgzM0IsIDB4ODMzQywNCi0gICAgMHg4MzNELCAweDgzM0UsIDB4ODMzRiwgMHg4MzQwLCAweDgzNDEsIDB4ODM0MiwgMHg4MzQzLCAweDgzNDQsIDB4ODM0NSwgMHg4MzQ2LCAweDgzNDcsIDB4ODM0OCwgMHg4MzQ5LCAweDgzNEEsIDB4ODM0QiwgMHg4MzRDLA0KLSAgICAweDgzNEQsIDB4ODM0RSwgMHg4MzRGLCAweDgzNTAsIDB4ODM1MSwgMHg4MzUyLCAweDgzNTMsIDB4ODM1NCwgMHg4MzU1LCAweDgzNTYsIDB4ODM1NywgMHg4MzU4LCAweDgzNTksIDB4ODM1QSwgMHg4MzVCLCAweDgzNUMsDQotICAgIDB4ODM1RCwgMHg4MzVFLCAweDgzNUYsIDB4ODM2MCwgMHg4MzYxLCAweDgzNjIsIDB4ODM2MywgMHg4MzY0LCAweDgzNjUsIDB4ODM2NiwgMHg4MzY3LCAweDgzNjgsIDB4ODM2OSwgMHg4MzZBLCAweDgzNkIsIDB4ODM2QywNCi0gICAgMHg4MzZELCAweDgzNkUsIDB4ODM2RiwgMHg4MzcwLCAweDgzNzEsIDB4ODM3MiwgMHg4MzczLCAweDgzNzQsIDB4ODM3NSwgMHg4Mzc2LCAweDgzNzcsIDB4ODM3OCwgMHg4Mzc5LCAweDgzN0EsIDB4ODM3QiwgMHg4MzdDLA0KLSAgICAweDgzN0QsIDB4ODM3RSwgMHg4MzdGLCAweDgzODAsIDB4ODM4MSwgMHg4MzgyLCAweDgzODMsIDB4ODM4NCwgMHg4Mzg1LCAweDgzODYsIDB4ODM4NywgMHg4Mzg4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4ODM4OSwgMHg4MzhBLCAweDgzOEIsIDB4ODM4QywgMHg4MzhELCAweDgzOEUsIDB4ODM4RiwgMHg4MzkwLCAweDgzOTEsIDB4ODM5MiwgMHg4MzkzLCAweDgzOTQsIDB4ODM5NSwgMHg4Mzk2LCAweDgzOTcsIDB4ODM5OCwNCi0gICAgMHg4Mzk5LCAweDgzOUEsIDB4ODM5QiwgMHg4MzlDLCAweDgzOUQsIDB4ODM5RSwgMHg4MzlGLCAweDgzQTAsIDB4ODNBMSwgMHg4M0EyLCAweDgzQTMsIDB4ODNBNCwgMHg4M0E1LCAweDgzQTYsIDB4ODNBNywgMHg4M0E4LA0KLSAgICAweDgzQTksIDB4ODNBQSwgMHg4M0FCLCAweDgzQUMsIDB4ODNBRCwgMHg4M0FFLCAweDgzQUYsIDB4ODNCMCwgMHg4M0IxLCAweDgzQjIsIDB4ODNCMywgMHg4M0I0LCAweDgzQjUsIDB4ODNCNiwgMHg4M0I3LCAweDgzQjgsDQotICAgIDB4ODNCOSwgMHg4M0JBLCAweDgzQkIsIDB4ODNCQywgMHg4M0JELCAweDgzQkUsIDB4ODNCRiwgMHg4M0MwLCAweDgzQzEsIDB4ODNDMiwgMHg4M0MzLCAweDgzQzQsIDB4ODNDNSwgMHg4M0M2LCAweDgzQzcsIDB4ODNDOCwNCi0gICAgMHg4M0M5LCAweDgzQ0EsIDB4ODNDQiwgMHg4M0NDLCAweDgzQ0QsIDB4ODNDRSwgMHg4M0NGLCAweDgzRDAsIDB4ODNEMSwgMHg4M0QyLCAweDgzRDMsIDB4ODNENCwgMHg4M0Q1LCAweDgzRDYsIDB4ODNENywgMHg4M0Q4LA0KLSAgICAweDgzRDksIDB4ODNEQSwgMHg4M0RCLCAweDgzREMsIDB4ODNERCwgMHg4M0RFLCAweDgzREYsIDB4ODNFMCwgMHg4M0UxLCAweDgzRTIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4ODNFMywgMHg4M0U0LCAweDgzRTUsIDB4ODNFNiwgMHg4M0U3LCAweDgzRTgsIDB4ODNFOSwgMHg4M0VBLCAweDgzRUIsIDB4ODNFQywgMHg4M0VELCAweDgzRUUsIDB4ODNFRiwgMHg4M0YwLCAweDgzRjEsIDB4ODNGMiwNCi0gICAgMHg4M0YzLCAweDgzRjQsIDB4ODNGNSwgMHg4M0Y2LCAweDgzRjcsIDB4ODNGOCwgMHgwMDAwLCAweDAwMDAsIDB4ODNGOSwgMHg4M0ZBLCAweDgzRkIsIDB4ODNGQywgMHg4M0ZELCAweDgzRkUsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDgzRkYsIDB4ODQwMCwgMHg4NDAxLCAweDg0MDIsIDB4ODQwMywgMHg4NDA0LCAweDg0MDUsIDB4ODQwNiwgMHg4NDA3LCAweDg0MDgsIDB4ODQwOSwgMHg4NDBBLCAweDg0MEIsIDB4ODQwQywgMHg4NDBELCAweDg0MEUsDQotICAgIDB4ODQwRiwgMHg4NDEwLCAweDg0MTEsIDB4ODQxMiwgMHg4NDEzLCAweDg0MTQsIDB4ODQxNSwgMHg4NDE2LCAweDg0MTcsIDB4ODQxOCwgMHg4NDE5LCAweDg0MUEsIDB4ODQxQiwgMHg4NDFDLCAweDg0MUQsIDB4ODQxRSwNCi0gICAgMHg4NDFGLCAweDg0MjAsIDB4ODQyMSwgMHg4NDIyLCAweDg0MjMsIDB4ODQyNCwgMHgwMDAwLCAweDAwMDAsIDB4ODQyNSwgMHg4NDI2LCAweDg0MjcsIDB4ODQyOCwgMHg4NDI5LCAweDg0MkEsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDg0MkIsIDB4ODQyQywgMHg4NDJELCAweDg0MkUsIDB4ODQyRiwgMHg4NDMwLCAweDg0MzEsIDB4ODQzMiwgMHgwMDAwLCAweDg0MzMsIDB4MDAwMCwgMHg4NDM0LCAweDAwMDAsIDB4ODQzNSwgMHgwMDAwLCAweDg0MzYsDQotICAgIDB4ODQzNywgMHg4NDM4LCAweDg0MzksIDB4ODQzQSwgMHg4NDNCLCAweDg0M0MsIDB4ODQzRCwgMHg4NDNFLCAweDg0M0YsIDB4ODQ0MCwgMHg4NDQxLCAweDg0NDIsIDB4ODQ0MywgMHg4NDQ0LCAweDg0NDUsIDB4ODQ0NiwNCi0gICAgMHg4NDQ3LCAweDg0NDgsIDB4ODQ0OSwgMHg4NDRBLCAweDg0NEIsIDB4ODQ0QywgMHg4NDRELCAweDg0NEUsIDB4ODQ0RiwgMHg4NDUwLCAweDg0NTEsIDB4ODQ1MiwgMHg4NDUzLCAweDg0NTQsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDg0NTUsIDB4ODQ1NiwgMHg4NDU3LCAweDg0NTgsIDB4ODQ1OSwgMHg4NDVBLCAweDg0NUIsIDB4ODQ1QywgMHg4NDVELCAweDg0NUUsIDB4ODQ1RiwgMHg4NDYwLCAweDg0NjEsIDB4ODQ2MiwgMHg4NDYzLCAweDg0NjQsDQotICAgIDB4ODQ2NSwgMHg4NDY2LCAweDg0NjcsIDB4ODQ2OCwgMHg4NDY5LCAweDg0NkEsIDB4ODQ2QiwgMHg4NDZDLCAweDg0NkQsIDB4ODQ2RSwgMHg4NDZGLCAweDg0NzAsIDB4ODQ3MSwgMHg4NDcyLCAweDg0NzMsIDB4ODQ3NCwNCi0gICAgMHg4NDc1LCAweDg0NzYsIDB4ODQ3NywgMHg4NDc4LCAweDg0NzksIDB4ODQ3QSwgMHg4NDdCLCAweDg0N0MsIDB4ODQ3RCwgMHg4NDdFLCAweDg0N0YsIDB4ODQ4MCwgMHg4NDgxLCAweDg0ODIsIDB4ODQ4MywgMHg4NDg0LA0KLSAgICAweDg0ODUsIDB4ODQ4NiwgMHg4NDg3LCAweDg0ODgsIDB4ODQ4OSwgMHgwMDAwLCAweDg0OEEsIDB4ODQ4QiwgMHg4NDhDLCAweDg0OEQsIDB4ODQ4RSwgMHg4NDhGLCAweDg0OTAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDg0OTEsIDB4ODQ5MiwgMHg4NDkzLCAweDAwMDAsIDB4ODQ5NCwgMHg4NDk1LCAweDg0OTYsIDB4ODQ5NywgMHg4NDk4LCAweDg0OTksIDB4ODQ5QSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4NDlCLCAweDg0OUMsIDB4ODQ5RCwgMHg4NDlFLCAweDAwMDAsIDB4MDAwMCwgMHg4NDlGLCAweDg0QTAsIDB4ODRBMSwgMHg4NEEyLCAweDg0QTMsIDB4ODRBNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDg0QTUsIDB4ODRBNiwgMHg4NEE3LCAweDg0QTgsIDB4ODRBOSwgMHg4NEFBLCAweDg0QUIsIDB4ODRBQywgMHg4NEFELCAweDg0QUUsIDB4ODRBRiwgMHg4NEIwLCAweDg0QjEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDg0QjIsIDB4ODRCMywgMHg4NEI0LCAweDAwMDAsIDB4ODRCNSwgMHg4NEI2LCAweDg0QjcsIDB4ODRCOCwgMHg4NEI5LCAweDg0QkEsIDB4ODRCQiwgMHg4NEJDLCAweDg0QkQsIDB4MDAwMCwNCi0gICAgMHg4NEJFLCAweDg0QkYsIDB4ODRDMCwgMHg4NEMxLCAweDg0QzIsIDB4ODRDMywgMHg4NEM0LCAweDg0QzUsIDB4ODRDNiwgMHg4NEM3LCAweDg0QzgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4ODRDOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODRDQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4NENCLCAweDIwRkEsIDB4MzAwOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODRDQywNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMEZDLCAweDMwMEMsIDB4MDAwMCwgMHgyMEZFLCAweDMwMEYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMTAwLCAweDAwMDAsIDB4MjEwMiwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjEwNCwgMHgyMTA2LCAweDIxMDgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg0MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODRDRCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDg0Q0UsIDB4ODRDRiwgMHgwMDAwLCAweDAwMDAsIDB4ODREMCwgMHg4NEQxLCAweDg0RDIsIDB4ODREMywgMHg4NEQ0LCAweDg0RDUsIDB4ODRENiwgMHg4NEQ3LCAweDg0RDgsIDB4ODREOSwgMHg4NERBLCAweDg0REIsDQotICAgIDB4ODREQywgMHg4NERELCAweDg0REUsIDB4ODRERiwgMHg4NEUwLCAweDg0RTEsIDB4ODRFMiwgMHg4NEUzLCAweDg0RTQsIDB4ODRFNSwgMHg4NEU2LCAweDg0RTcsIDB4ODRFOCwgMHg4NEU5LCAweDg0RUEsIDB4MDAwMCwNCi0gICAgMHg4NEVCLCAweDg0RUMsIDB4ODRFRCwgMHg4NEVFLCAweDg0RUYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMTBBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDMwMTIsIDB4MzAxNSwgMHg4NEYwLCAweDIxMEMsIDB4MDAwMCwgMHgzMDE4LCAweDMwMUIsIDB4ODRGMSwgMHgwMDAwLCAweDIxMEUsIDB4ODRGMiwgMHg4NEYzLCAweDg0RjQsIDB4ODRGNSwgMHg4NEY2LCAweDg0RjcsDQotICAgIDB4ODRGOCwgMHg4NEY5LCAweDg0RkEsIDB4ODRGQiwgMHgwMDAwLCAweDg0RkMsIDB4MjExMCwgMHgwMDAwLCAweDAwMDAsIDB4ODRGRCwgMHg4NEZFLCAweDg0RkYsIDB4ODUwMCwgMHg4NTAxLCAweDg1MDIsIDB4ODUwMywNCi0gICAgMHgyMTEyLCAweDMwMUUsIDB4MjExNCwgMHg4NTA0LCAweDg1MDUsIDB4MDAwMCwgMHg4NTA2LCAweDg1MDcsIDB4ODUwOCwgMHgwMDAwLCAweDg1MDksIDB4ODUwQSwgMHg4NTBCLCAweDg1MEMsIDB4ODUwRCwgMHg4NTBFLA0KLSAgICAweDg1MEYsIDB4ODUxMCwgMHgwMDAwLCAweDg1MTEsIDB4ODUxMiwgMHg4NTEzLCAweDg1MTQsIDB4ODUxNSwgMHg4NTE2LCAweDg1MTcsIDB4MDAwMCwgMHgzMDIxLCAweDg1MTgsIDB4ODUxOSwgMHg4NTFBLCAweDg1MUIsDQotICAgIDB4ODUxQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg1MUQsIDB4ODUxRSwgMHg4NTFGLCAweDg1MjAsIDB4ODUyMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgzMDI0LCAweDMwMjcsIDB4NDAwNSwgMHgzMDJBLCAweDMwMkQsIDB4MzAzMCwgMHgzMDMzLCAweDMwMzYsIDB4MzAzOSwgMHgzMDNDLCAweDMwM0YsIDB4MzA0MiwgMHgzMDQ1LCAweDMwNDgsIDB4MzA0QiwgMHgyMTE2LA0KLSAgICAweDg1MjIsIDB4MjExOCwgMHgzMDRFLCAweDIxMUEsIDB4ODUyMywgMHgyMTFDLCAweDMwNTEsIDB4NDAwQSwgMHgyMTFFLCAweDg1MjQsIDB4MjEyMCwgMHgzMDU0LCAweDg1MjUsIDB4ODUyNiwgMHg4NTI3LCAweDg1MjgsDQotICAgIDB4ODUyOSwgMHgyMTIyLCAweDMwNTcsIDB4MjEyNCwgMHg4NTJBLCAweDIxMjYsIDB4MzA1QSwgMHg0MDBGLCAweDIxMjgsIDB4ODUyQiwgMHgyMTJBLCAweDMwNUQsIDB4ODUyQywgMHg4NTJELCAweDg1MkUsIDB4ODUyRiwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgzMDYwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjEyQywgMHgyMTJFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIxMzAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjEzMiwgMHgyMTM0LCAweDIxMzYsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4NTMwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODUzMSwgMHgwMDAwLCAweDAwMDAsIDB4ODUzMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjEzOCwgMHgwMDAwLCAweDIxM0EsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIxM0MsIDB4MzA2MywgMHgwMDAwLCAweDIxM0UsDQotICAgIDB4MzA2NiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDIxNDAsIDB4MDAwMCwgMHgwMDAwLCAweDIxNDIsIDB4MDAwMCwgMHgwMDAwLCAweDIxNDQsIDB4MDAwMCwgMHgyMTQ2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MjE0OCwgMHgwMDAwLCAweDIxNEEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMTRDLCAweDIxNEUsIDB4MjE1MCwNCi0gICAgMHgyMTUyLCAweDIxNTQsIDB4MDAwMCwgMHgwMDAwLCAweDIxNTYsIDB4MjE1OCwgMHgwMDAwLCAweDAwMDAsIDB4MjE1QSwgMHgyMTVDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDIxNUUsIDB4MjE2MCwgMHgwMDAwLCAweDAwMDAsIDB4MjE2MiwgMHgyMTY0LCAweDAwMDAsIDB4MDAwMCwgMHgyMTY2LCAweDIxNjgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMTZBLCAweDIxNkMsIDB4MjE2RSwgMHgyMTcwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDIxNzIsIDB4MjE3NCwgMHgyMTc2LCAweDIxNzgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjE3QSwgMHgyMTdDLCAweDIxN0UsIDB4MjE4MCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODUzMywgMHg4NTM0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDMwNjksIDB4MzA2QywgMHgzMDZGLCAweDMwNzIsIDB4MzA3NSwgMHgzMDc4LCAweDMwN0IsIDB4MzA3RSwgMHgyMTgyLCAweDIxODQsIDB4MjE4NiwgMHgyMTg4LCAweDIxOEEsIDB4MjE4QywgMHgyMThFLCAweDIxOTAsDQotICAgIDB4MzA4MSwgMHgzMDg0LCAweDMwODcsIDB4MzA4QSwgMHgzMDhELCAweDMwOTAsIDB4MzA5MywgMHgzMDk2LCAweDMwOTksIDB4MjE5MiwgMHgzMDlDLCAweDMwOUYsIDB4MjE5NCwgMHgyMTk2LCAweDIxOTgsIDB4MjE5QSwNCi0gICAgMHgyMTlDLCAweDMwQTIsIDB4ODUzNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDg1MzYsIDB4ODUzNywgMHg4NTM4LCAweDg1MzksIDB4ODUzQSwgMHg4NTNCLCAweDg1M0MsIDB4ODUzRCwgMHg4NTNFLCAweDIxOUUsIDB4MjFBMCwgMHgyMUEyLCAweDIxQTQsIDB4MjFBNiwgMHgyMUE4LCAweDIxQUEsDQotICAgIDB4MjFBQywgMHgyMUFFLCAweDIxQjAsIDB4MjFCMiwgMHgzMEE1LCAweDMwQTgsIDB4MzBBQiwgMHgzMEFFLCAweDMwQjEsIDB4MzBCNCwgMHgzMEI3LCAweDMwQkEsIDB4MzBCRCwgMHg0MDE0LCAweDQwMTksIDB4NDAxRSwNCi0gICAgMHg0MDIzLCAweDQwMjgsIDB4NDAyRCwgMHg0MDMyLCAweDQwMzcsIDB4NDAzQywgMHg0MDQxLCAweDQwNDYsIDB4MjFCNCwgMHgyMUI2LCAweDIxQjgsIDB4MjFCQSwgMHgyMUJDLCAweDIxQkUsIDB4MjFDMCwgMHgyMUMyLA0KLSAgICAweDIxQzQsIDB4MzBDMCwgMHgzMEMzLCAweDMwQzYsIDB4MzBDOSwgMHgzMENDLCAweDMwQ0YsIDB4MzBEMiwgMHgzMEQ1LCAweDMwRDgsIDB4MzBEQiwgMHgzMERFLCAweDMwRTEsIDB4MzBFNCwgMHgzMEU3LCAweDMwRUEsDQotICAgIDB4MzBFRCwgMHgzMEYwLCAweDMwRjMsIDB4MzBGNiwgMHgzMEY5LCAweDMwRkMsIDB4MzBGRiwgMHgzMTAyLCAweDMxMDUsIDB4MzEwOCwgMHgzMTBCLCAweDMxMEUsIDB4MzExMSwgMHgzMTE0LCAweDMxMTcsIDB4MzExQSwNCi0gICAgMHgzMTFELCAweDMxMjAsIDB4MzEyMywgMHgzMTI2LCAweDMxMjksIDB4MzEyQywgMHg4NTNGLCAweDg1NDAsIDB4ODU0MSwgMHg4NTQyLCAweDg1NDMsIDB4ODU0NCwgMHg4NTQ1LCAweDg1NDYsIDB4ODU0NywgMHg4NTQ4LA0KLSAgICAweDg1NDksIDB4ODU0QSwgMHg4NTRCLCAweDg1NEMsIDB4ODU0RCwgMHg4NTRFLCAweDg1NEYsIDB4ODU1MCwgMHg4NTUxLCAweDg1NTIsIDB4ODU1MywgMHg4NTU0LCAweDg1NTUsIDB4ODU1NiwgMHg4NTU3LCAweDg1NTgsDQotICAgIDB4ODU1OSwgMHg4NTVBLCAweDg1NUIsIDB4ODU1QywgMHg4NTVELCAweDg1NUUsIDB4ODU1RiwgMHg4NTYwLCAweDg1NjEsIDB4ODU2MiwgMHg4NTYzLCAweDg1NjQsIDB4ODU2NSwgMHg4NTY2LCAweDg1NjcsIDB4ODU2OCwNCi0gICAgMHg4NTY5LCAweDg1NkEsIDB4ODU2QiwgMHg4NTZDLCAweDg1NkQsIDB4ODU2RSwgMHg4NTZGLCAweDg1NzAsIDB4ODU3MSwgMHg4NTcyLCAweDg1NzMsIDB4MjFDNiwgMHgyMUM4LCAweDIxQ0EsIDB4MjFDQywgMHgyMUNFLA0KLSAgICAweDIxRDAsIDB4MjFEMiwgMHgyMUQ0LCAweDIxRDYsIDB4MjFEOCwgMHg4NTc0LCAweDg1NzUsIDB4ODU3NiwgMHg4NTc3LCAweDg1NzgsIDB4ODU3OSwgMHg4NTdBLCAweDg1N0IsIDB4ODU3QywgMHgyMURBLCAweDg1N0QsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODU3RSwgMHg4NTdGLCAweDg1ODAsIDB4ODU4MSwgMHg4NTgyLCAweDg1ODMsIDB4ODU4NCwgMHg4NTg1LCAweDg1ODYsIDB4MjFEQywNCi0gICAgMHg4NTg3LCAweDg1ODgsIDB4ODU4OSwgMHg4NThBLCAweDg1OEIsIDB4ODU4QywgMHg4NThELCAweDg1OEUsIDB4ODU4RiwgMHgyMURFLCAweDg1OTAsIDB4ODU5MSwgMHg4NTkyLCAweDg1OTMsIDB4ODU5NCwgMHg4NTk1LA0KLSAgICAweDg1OTYsIDB4ODU5NywgMHg4NTk4LCAweDIxRTAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDQwNEIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgzMTJGLCAweDIxRTIsIDB4MzEzMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjFFNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4NTk5LCAweDg1OUEsIDB4ODU5QiwgMHg4NTlDLCAweDg1OUQsIDB4ODU5RSwgMHg4NTlGLCAweDg1QTAsIDB4ODVBMSwgMHg4NUEyLCAweDg1QTMsIDB4ODVBNCwgMHg4NUE1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4ODVBNiwgMHg4NUE3LCAweDg1QTgsIDB4ODVBOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg1QUEsIDB4ODVBQiwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg1QUMsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODVBRCwNCi0gICAgMHg4NUFFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4NUFGLCAweDAwMDAsIDB4MDAwMCwgMHg4NUIwLCAweDAwMDAsIDB4ODVCMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDg1QjIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODVCMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg1QjQsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg1QjUsIDB4ODVCNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4NUI3LCAweDg1QjgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODVCOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4NUJBLCAweDg1QkIsIDB4ODVCQywgMHg4NUJELCAweDg1QkUsIDB4ODVCRiwgMHg4NUMwLCAweDg1QzEsIDB4ODVDMiwgMHg4NUMzLCAweDg1QzQsIDB4ODVDNSwgMHg4NUM2LCAweDg1QzcsIDB4ODVDOCwgMHg4NUM5LA0KLSAgICAweDg1Q0EsIDB4ODVDQiwgMHg4NUNDLCAweDg1Q0QsIDB4ODVDRSwgMHg4NUNGLCAweDg1RDAsIDB4ODVEMSwgMHg4NUQyLCAweDg1RDMsIDB4ODVENCwgMHg4NUQ1LCAweDg1RDYsIDB4ODVENywgMHg4NUQ4LCAweDg1RDksDQotICAgIDB4ODVEQSwgMHg4NURCLCAweDg1REMsIDB4ODVERCwgMHg4NURFLCAweDg1REYsIDB4ODVFMCwgMHg4NUUxLCAweDg1RTIsIDB4ODVFMywgMHg4NUU0LCAweDg1RTUsIDB4ODVFNiwgMHg4NUU3LCAweDg1RTgsIDB4ODVFOSwNCi0gICAgMHg4NUVBLCAweDg1RUIsIDB4ODVFQywgMHg4NUVELCAweDg1RUUsIDB4ODVFRiwgMHg4NUYwLCAweDg1RjEsIDB4ODVGMiwgMHg4NUYzLCAweDg1RjQsIDB4ODVGNSwgMHg4NUY2LCAweDg1RjcsIDB4ODVGOCwgMHg4NUY5LA0KLSAgICAweDg1RkEsIDB4ODVGQiwgMHg4NUZDLCAweDg1RkQsIDB4ODVGRSwgMHg4NUZGLCAweDg2MDAsIDB4ODYwMSwgMHg4NjAyLCAweDg2MDMsIDB4ODYwNCwgMHg4NjA1LCAweDg2MDYsIDB4ODYwNywgMHg4NjA4LCAweDg2MDksDQotICAgIDB4ODYwQSwgMHg4NjBCLCAweDg2MEMsIDB4ODYwRCwgMHg4NjBFLCAweDg2MEYsIDB4ODYxMCwgMHg4NjExLCAweDg2MTIsIDB4ODYxMywgMHg4NjE0LCAweDg2MTUsIDB4ODYxNiwgMHg4NjE3LCAweDg2MTgsIDB4ODYxOSwNCi0gICAgMHg4NjFBLCAweDg2MUIsIDB4ODYxQywgMHg4NjFELCAweDg2MUUsIDB4ODYxRiwgMHg4NjIwLCAweDg2MjEsIDB4ODYyMiwgMHg4NjIzLCAweDg2MjQsIDB4ODYyNSwgMHg4NjI2LCAweDg2MjcsIDB4ODYyOCwgMHg4NjI5LA0KLSAgICAweDg2MkEsIDB4ODYyQiwgMHg4NjJDLCAweDg2MkQsIDB4ODYyRSwgMHg4NjJGLCAweDg2MzAsIDB4ODYzMSwgMHg4NjMyLCAweDg2MzMsIDB4ODYzNCwgMHg4NjM1LCAweDg2MzYsIDB4ODYzNywgMHg4NjM4LCAweDg2MzksDQotICAgIDB4ODYzQSwgMHg4NjNCLCAweDg2M0MsIDB4ODYzRCwgMHg4NjNFLCAweDg2M0YsIDB4ODY0MCwgMHg4NjQxLCAweDg2NDIsIDB4ODY0MywgMHg4NjQ0LCAweDg2NDUsIDB4ODY0NiwgMHg4NjQ3LCAweDg2NDgsIDB4ODY0OSwNCi0gICAgMHg4NjRBLCAweDg2NEIsIDB4ODY0QywgMHg4NjRELCAweDg2NEUsIDB4ODY0RiwgMHg4NjUwLCAweDg2NTEsIDB4ODY1MiwgMHg4NjUzLCAweDg2NTQsIDB4ODY1NSwgMHg4NjU2LCAweDg2NTcsIDB4ODY1OCwgMHg4NjU5LA0KLSAgICAweDg2NUEsIDB4ODY1QiwgMHg4NjVDLCAweDg2NUQsIDB4ODY1RSwgMHg4NjVGLCAweDg2NjAsIDB4ODY2MSwgMHg4NjYyLCAweDg2NjMsIDB4ODY2NCwgMHg4NjY1LCAweDg2NjYsIDB4ODY2NywgMHg4NjY4LCAweDg2NjksDQotICAgIDB4ODY2QSwgMHg4NjZCLCAweDg2NkMsIDB4ODY2RCwgMHg4NjZFLCAweDg2NkYsIDB4ODY3MCwgMHg4NjcxLCAweDg2NzIsIDB4ODY3MywgMHg4Njc0LCAweDg2NzUsIDB4ODY3NiwgMHg4Njc3LCAweDg2NzgsIDB4ODY3OSwNCi0gICAgMHg4NjdBLCAweDg2N0IsIDB4ODY3QywgMHg4NjdELCAweDg2N0UsIDB4ODY3RiwgMHg4NjgwLCAweDg2ODEsIDB4ODY4MiwgMHg4NjgzLCAweDg2ODQsIDB4ODY4NSwgMHg4Njg2LCAweDg2ODcsIDB4ODY4OCwgMHg4Njg5LA0KLSAgICAweDg2OEEsIDB4ODY4QiwgMHg4NjhDLCAweDg2OEQsIDB4ODY4RSwgMHg4NjhGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDg2OTAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg2OTEsIDB4MDAwMCwgMHg4NjkyLCAweDg2OTMsIDB4ODY5NCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjFFNiwgMHgwMDAwLCAweDIxRTgsIDB4MDAwMCwNCi0gICAgMHgyMUVBLCAweDAwMDAsIDB4MjFFQywgMHgwMDAwLCAweDIxRUUsIDB4MDAwMCwgMHgyMUYwLCAweDAwMDAsIDB4MjFGMiwgMHgwMDAwLCAweDIxRjQsIDB4MDAwMCwgMHgyMUY2LCAweDAwMDAsIDB4MjFGOCwgMHgwMDAwLA0KLSAgICAweDIxRkEsIDB4MDAwMCwgMHgyMUZDLCAweDAwMDAsIDB4MDAwMCwgMHgyMUZFLCAweDAwMDAsIDB4MjIwMCwgMHgwMDAwLCAweDIyMDIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MjIwNCwgMHgyMjA2LCAweDAwMDAsIDB4MjIwOCwgMHgyMjBBLCAweDAwMDAsIDB4MjIwQywgMHgyMjBFLCAweDAwMDAsIDB4MjIxMCwgMHgyMjEyLCAweDAwMDAsIDB4MjIxNCwgMHgyMjE2LCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjIxOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMjFBLCAweDIyMUMsIDB4MDAwMCwgMHgyMjFFLCAweDIyMjAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjIyMiwgMHgwMDAwLCAweDIyMjQsIDB4MDAwMCwNCi0gICAgMHgyMjI2LCAweDAwMDAsIDB4MjIyOCwgMHgwMDAwLCAweDIyMkEsIDB4MDAwMCwgMHgyMjJDLCAweDAwMDAsIDB4MjIyRSwgMHgwMDAwLCAweDIyMzAsIDB4MDAwMCwgMHgyMjMyLCAweDAwMDAsIDB4MjIzNCwgMHgwMDAwLA0KLSAgICAweDIyMzYsIDB4MDAwMCwgMHgyMjM4LCAweDAwMDAsIDB4MDAwMCwgMHgyMjNBLCAweDAwMDAsIDB4MjIzQywgMHgwMDAwLCAweDIyM0UsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MjI0MCwgMHgyMjQyLCAweDAwMDAsIDB4MjI0NCwgMHgyMjQ2LCAweDAwMDAsIDB4MjI0OCwgMHgyMjRBLCAweDAwMDAsIDB4MjI0QywgMHgyMjRFLCAweDAwMDAsIDB4MjI1MCwgMHgyMjUyLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjI1NCwgMHgwMDAwLCAweDAwMDAsIDB4MjI1NiwgMHgyMjU4LCAweDIyNUEsIDB4MjI1QywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMjVFLCAweDIyNjAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4Njk1LCAweDg2OTYsIDB4ODY5NywgMHg4Njk4LCAweDg2OTksIDB4ODY5QSwgMHg4NjlCLCAweDg2OUMsIDB4ODY5RCwgMHg4NjlFLCAweDg2OUYsIDB4ODZBMCwgMHg4NkExLCAweDg2QTIsIDB4ODZBMywNCi0gICAgMHg4NkE0LCAweDg2QTUsIDB4ODZBNiwgMHg4NkE3LCAweDg2QTgsIDB4ODZBOSwgMHg4NkFBLCAweDg2QUIsIDB4ODZBQywgMHg4NkFELCAweDg2QUUsIDB4ODZBRiwgMHg4NkIwLCAweDg2QjEsIDB4ODZCMiwgMHg4NkIzLA0KLSAgICAweDg2QjQsIDB4ODZCNSwgMHg4NkI2LCAweDg2QjcsIDB4ODZCOCwgMHg4NkI5LCAweDg2QkEsIDB4ODZCQiwgMHg4NkJDLCAweDg2QkQsIDB4ODZCRSwgMHg4NkJGLCAweDg2QzAsIDB4ODZDMSwgMHg4NkMyLCAweDg2QzMsDQotICAgIDB4ODZDNCwgMHg4NkM1LCAweDg2QzYsIDB4ODZDNywgMHg4NkM4LCAweDg2QzksIDB4ODZDQSwgMHg4NkNCLCAweDg2Q0MsIDB4ODZDRCwgMHg4NkNFLCAweDg2Q0YsIDB4ODZEMCwgMHg4NkQxLCAweDg2RDIsIDB4ODZEMywNCi0gICAgMHg4NkQ0LCAweDg2RDUsIDB4ODZENiwgMHg4NkQ3LCAweDg2RDgsIDB4ODZEOSwgMHg4NkRBLCAweDg2REIsIDB4ODZEQywgMHg4NkRELCAweDg2REUsIDB4ODZERiwgMHg4NkUwLCAweDg2RTEsIDB4ODZFMiwgMHg4NkUzLA0KLSAgICAweDg2RTQsIDB4ODZFNSwgMHg4NkU2LCAweDg2RTcsIDB4ODZFOCwgMHg4NkU5LCAweDg2RUEsIDB4ODZFQiwgMHg4NkVDLCAweDg2RUQsIDB4ODZFRSwgMHg4NkVGLCAweDg2RjAsIDB4ODZGMSwgMHg4NkYyLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDg2RjMsIDB4ODZGNCwgMHg4NkY1LCAweDg2RjYsIDB4ODZGNywgMHg4NkY4LCAweDg2RjksIDB4ODZGQSwgMHg4NkZCLCAweDg2RkMsIDB4ODZGRCwgMHg4NkZFLCAweDg2RkYsIDB4ODcwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgzMTM1LCAweDMxMzgsIDB4MzEzQiwgMHgzMTNFLCAweDMxNDEsIDB4MzE0NCwgMHgzMTQ3LCAweDMxNEEsIDB4MzE0RCwgMHgzMTUwLCAweDMxNTMsIDB4MzE1NiwgMHgzMTU5LCAweDMxNUMsIDB4NDA1MCwgMHg0MDU1LA0KLSAgICAweDQwNUEsIDB4NDA1RiwgMHg0MDY0LCAweDQwNjksIDB4NDA2RSwgMHg0MDczLCAweDQwNzgsIDB4NDA3RCwgMHg0MDgyLCAweDQwODcsIDB4NDA4QywgMHg0MDkxLCAweDQwOTYsIDB4NDA5QiwgMHg0MEEzLCAweDAwMDAsDQotICAgIDB4MzE1RiwgMHgzMTYyLCAweDMxNjUsIDB4MzE2OCwgMHgzMTZCLCAweDMxNkUsIDB4MzE3MSwgMHgzMTc0LCAweDMxNzcsIDB4MzE3QSwgMHgzMTdELCAweDMxODAsIDB4MzE4MywgMHgzMTg2LCAweDMxODksIDB4MzE4QywNCi0gICAgMHgzMThGLCAweDMxOTIsIDB4MzE5NSwgMHgzMTk4LCAweDMxOUIsIDB4MzE5RSwgMHgzMUExLCAweDMxQTQsIDB4MzFBNywgMHgzMUFBLCAweDMxQUQsIDB4MzFCMCwgMHgzMUIzLCAweDMxQjYsIDB4MzFCOSwgMHgzMUJDLA0KLSAgICAweDMxQkYsIDB4MzFDMiwgMHgzMUM1LCAweDMxQzgsIDB4ODcwMSwgMHg4NzAyLCAweDg3MDMsIDB4ODcwNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MzFDQiwgMHgyMjYyLCAweDIyNjQsIDB4MjI2NiwgMHgyMjY4LCAweDIyNkEsIDB4MjI2QywgMHgyMjZFLCAweDIyNzAsIDB4MjI3MiwgMHgyMjc0LCAweDIyNzYsIDB4MjI3OCwgMHgyMjdBLCAweDIyN0MsIDB4MjI3RSwNCi0gICAgMHg4NzA1LCAweDg3MDYsIDB4ODcwNywgMHg4NzA4LCAweDg3MDksIDB4ODcwQSwgMHg4NzBCLCAweDg3MEMsIDB4ODcwRCwgMHg4NzBFLCAweDg3MEYsIDB4ODcxMCwgMHg4NzExLCAweDg3MTIsIDB4MjI4MCwgMHgyMjgyLA0KLSAgICAweDIyODQsIDB4MjI4NiwgMHgyMjg4LCAweDIyOEEsIDB4MjI4QywgMHgyMjhFLCAweDIyOTAsIDB4MjI5MiwgMHgyMjk0LCAweDIyOTYsIDB4MjI5OCwgMHgyMjlBLCAweDQwQUEsIDB4NDBCMCwgMHgyMjlDLCAweDAwMDAsDQotICAgIDB4ODcxMywgMHg4NzE0LCAweDg3MTUsIDB4ODcxNiwgMHg4NzE3LCAweDg3MTgsIDB4ODcxOSwgMHg4NzFBLCAweDg3MUIsIDB4ODcxQywgMHg4NzFELCAweDg3MUUsIDB4ODcxRiwgMHg4NzIwLCAweDg3MjEsIDB4ODcyMiwNCi0gICAgMHg4NzIzLCAweDg3MjQsIDB4ODcyNSwgMHg4NzI2LCAweDg3MjcsIDB4ODcyOCwgMHg4NzI5LCAweDg3MkEsIDB4ODcyQiwgMHg4NzJDLCAweDg3MkQsIDB4ODcyRSwgMHg4NzJGLCAweDg3MzAsIDB4ODczMSwgMHg4NzMyLA0KLSAgICAweDg3MzMsIDB4ODczNCwgMHg4NzM1LCAweDg3MzYsIDB4ODczNywgMHg4NzM4LCAweDg3MzksIDB4ODczQSwgMHg4NzNCLCAweDg3M0MsIDB4ODczRCwgMHg4NzNFLCAweDg3M0YsIDB4ODc0MCwgMHg4NzQxLCAweDg3NDIsDQotICAgIDB4ODc0MywgMHgyMjlFLCAweDIyQTAsIDB4MjJBMiwgMHgyMkE0LCAweDIyQTYsIDB4MjJBOCwgMHgyMkFBLCAweDIyQUMsIDB4MjJBRSwgMHgyMkIwLCAweDIyQjIsIDB4MjJCNCwgMHgyMkI2LCAweDIyQjgsIDB4MjJCQSwNCi0gICAgMHgyMkJDLCAweDIyQkUsIDB4MjJDMCwgMHgyMkMyLCAweDIyQzQsIDB4MjJDNiwgMHgyMkM4LCAweDIyQ0EsIDB4MjJDQywgMHgzMUNFLCAweDMxRDEsIDB4MzFENCwgMHgyMkNFLCAweDMxRDcsIDB4MjJEMCwgMHgzMURBLA0KLSAgICAweDg3NDQsIDB4ODc0NSwgMHg4NzQ2LCAweDg3NDcsIDB4ODc0OCwgMHg4NzQ5LCAweDg3NEEsIDB4ODc0QiwgMHg4NzRDLCAweDg3NEQsIDB4ODc0RSwgMHg4NzRGLCAweDg3NTAsIDB4ODc1MSwgMHg4NzUyLCAweDg3NTMsDQotICAgIDB4ODc1NCwgMHg4NzU1LCAweDg3NTYsIDB4ODc1NywgMHg4NzU4LCAweDg3NTksIDB4ODc1QSwgMHg4NzVCLCAweDg3NUMsIDB4ODc1RCwgMHg4NzVFLCAweDg3NUYsIDB4ODc2MCwgMHg4NzYxLCAweDg3NjIsIDB4ODc2MywNCi0gICAgMHg4NzY0LCAweDg3NjUsIDB4ODc2NiwgMHg4NzY3LCAweDg3NjgsIDB4ODc2OSwgMHg4NzZBLCAweDg3NkIsIDB4ODc2QywgMHg4NzZELCAweDg3NkUsIDB4ODc2RiwgMHg4NzcwLCAweDg3NzEsIDB4ODc3MiwgMHgwMDAwLA0KLSAgICAweDQwQjUsIDB4NDBCQSwgMHg0MEJGLCAweDMxREQsIDB4NDBDNCwgMHgzMUUwLCAweDMxRTMsIDB4NDBDOSwgMHg0MENGLCAweDMxRTYsIDB4MzFFOSwgMHgzMUVDLCAweDQwRDQsIDB4NDBEOSwgMHgzMUVGLCAweDMxRjIsDQotICAgIDB4MjJEMiwgMHgzMUY1LCAweDQwREUsIDB4NDBFMywgMHgyMkQ0LCAweDQwRTgsIDB4NDBFRSwgMHg0MEY1LCAweDMxRjgsIDB4NDBGQiwgMHg0MTAxLCAweDQxMDcsIDB4MzFGQiwgMHgzMUZFLCAweDMyMDEsIDB4NDEwQywNCi0gICAgMHg0MTExLCAweDQxMTcsIDB4MzIwNCwgMHgzMjA3LCAweDMyMEEsIDB4MjJENiwgMHgyMkQ4LCAweDIyREEsIDB4MjJEQywgMHgzMjBELCAweDMyMTAsIDB4NDExQywgMHgzMjEzLCAweDQxMjIsIDB4NDEyNywgMHgzMjE2LA0KLSAgICAweDIyREUsIDB4MjJFMCwgMHg0MTJELCAweDQxMzMsIDB4NDEzOCwgMHgzMjE5LCAweDQxM0UsIDB4MjJFMiwgMHgzMjFDLCAweDMyMUYsIDB4MzIyMiwgMHgzMjI1LCAweDMyMjgsIDB4NDE0NCwgMHgzMjJCLCAweDIyRTQsDQotICAgIDB4MzIyRSwgMHgzMjMxLCAweDMyMzQsIDB4NDE0OSwgMHgzMjM3LCAweDMyM0EsIDB4MzIzRCwgMHg0MTRFLCAweDQxNTQsIDB4MjJFNiwgMHg0MTU5LCAweDIyRTgsIDB4NDE1RiwgMHg0MTY0LCAweDMyNDAsIDB4MzI0MywNCi0gICAgMHgzMjQ2LCAweDQxNjksIDB4MjJFQSwgMHgzMjQ5LCAweDQxNkUsIDB4MjJFQywgMHg0MTczLCAweDMyNEMsIDB4MjJFRSwgMHgyMkYwLCAweDIyRjIsIDB4MjJGNCwgMHgyMkY2LCAweDIyRjgsIDB4MjJGQSwgMHgyMkZDLA0KLSAgICAweDIyRkUsIDB4MjMwMCwgMHgzMjRGLCAweDMyNTIsIDB4MzI1NSwgMHgzMjU4LCAweDMyNUIsIDB4MzI1RSwgMHgzMjYxLCAweDMyNjQsIDB4MzI2NywgMHgzMjZBLCAweDMyNkQsIDB4MzI3MCwgMHgzMjczLCAweDMyNzYsDQotICAgIDB4MzI3OSwgMHgzMjdDLCAweDIzMDIsIDB4MjMwNCwgMHgzMjdGLCAweDIzMDYsIDB4MjMwOCwgMHgyMzBBLCAweDMyODIsIDB4MzI4NSwgMHgyMzBDLCAweDIzMEUsIDB4MjMxMCwgMHgyMzEyLCAweDIzMTQsIDB4NDE3OSwNCi0gICAgMHgyMzE2LCAweDIzMTgsIDB4MjMxQSwgMHgyMzFDLCAweDIzMUUsIDB4MjMyMCwgMHgyMzIyLCAweDIzMjQsIDB4MzI4OCwgMHg0MTdFLCAweDIzMjYsIDB4MjMyOCwgMHgyMzJBLCAweDIzMkMsIDB4MjMyRSwgMHgyMzMwLA0KLSAgICAweDIzMzIsIDB4MzI4QiwgMHgzMjhFLCAweDMyOTEsIDB4MzI5NCwgMHgyMzM0LCAweDIzMzYsIDB4MjMzOCwgMHgyMzNBLCAweDIzM0MsIDB4MjMzRSwgMHgyMzQwLCAweDIzNDIsIDB4MjM0NCwgMHgyMzQ2LCAweDMyOTcsDQotICAgIDB4MzI5QSwgMHgyMzQ4LCAweDMyOUQsIDB4MzJBMCwgMHgzMkEzLCAweDIzNEEsIDB4MzJBNiwgMHgzMkE5LCAweDQxODMsIDB4MjM0QywgMHgzMkFDLCAweDMyQUYsIDB4MzJCMiwgMHgzMkI1LCAweDQxODgsIDB4NDE4RSwNCi0gICAgMHgyMzRFLCAweDIzNTAsIDB4MjM1MiwgMHgyMzU0LCAweDIzNTYsIDB4MjM1OCwgMHgyMzVBLCAweDIzNUMsIDB4MjM1RSwgMHgyMzYwLCAweDIzNjIsIDB4MjM2NCwgMHgyMzY2LCAweDIzNjgsIDB4MjM2QSwgMHgyMzZDLA0KLSAgICAweDIzNkUsIDB4MjM3MCwgMHg0MTk1LCAweDIzNzIsIDB4MjM3NCwgMHgyMzc2LCAweDQxOUEsIDB4MzJCOCwgMHgyMzc4LCAweDIzN0EsIDB4MjM3QywgMHgyMzdFLCAweDIzODAsIDB4MjM4MiwgMHgyMzg0LCAweDIzODYsDQotICAgIDB4MjM4OCwgMHgyMzhBLCAweDMyQkIsIDB4MjM4QywgMHgyMzhFLCAweDMyQkUsIDB4MzJDMSwgMHgyMzkwLCAweDQxOUYsIDB4MzJDNCwgMHgyMzkyLCAweDIzOTQsIDB4MjM5NiwgMHgyMzk4LCAweDMyQzcsIDB4MzJDQSwNCi0gICAgMHgyMzlBLCAweDIzOUMsIDB4MjM5RSwgMHgyM0EwLCAweDIzQTIsIDB4MjNBNCwgMHgyM0E2LCAweDIzQTgsIDB4MjNBQSwgMHgzMkNELCAweDMyRDAsIDB4MzJEMywgMHgzMkQ2LCAweDMyRDksIDB4MzJEQywgMHgzMkRGLA0KLSAgICAweDMyRTIsIDB4MzJFNSwgMHgzMkU4LCAweDMyRUIsIDB4MzJFRSwgMHgzMkYxLCAweDMyRjQsIDB4MzJGNywgMHgzMkZBLCAweDMyRkQsIDB4MzMwMCwgMHgzMzAzLCAweDMzMDYsIDB4MzMwOSwgMHgzMzBDLCAweDMzMEYsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODc3MywNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Nzc0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3NzUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3NzYsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4ODc3NywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3NzgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Nzc5LCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3N0EsIDB4ODc3QiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODc3QywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3N0QsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3N0UsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4NzdGLCAweDg3ODAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDg3ODEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4NzgyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4NzgzLCAweDAwMDAsIDB4MDAwMCwgMHg4Nzg0LCAweDAwMDAsIDB4ODc4NSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4ODc4NiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3ODcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3ODgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODc4OSwgMHg4NzhBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODc4QiwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDg3OEMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4NzhELCAweDAwMDAsIDB4ODc4RSwgMHg4NzhGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4NzkwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODc5MSwgMHgwMDAwLCAweDg3OTIsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODc5MywgMHg4Nzk0LCAweDg3OTUsIDB4MDAwMCwgMHg4Nzk2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3OTcsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4ODc5OCwgMHgwMDAwLCAweDAwMDAsIDB4ODc5OSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4NzlBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4ODc5QiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4NzlDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3OUQsIDB4MDAwMCwgMHgwMDAwLCAweDg3OUUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDg3OUYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0EwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDg3QTEsIDB4MDAwMCwgMHg4N0EyLCAweDAwMDAsIDB4ODdBMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3QTQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4ODdBNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0E2LCAweDg3QTcsIDB4MDAwMCwgMHgwMDAwLCAweDg3QTgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdBOSwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3QUEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4N0FCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdBQywgMHgwMDAwLCAweDAwMDAsIDB4ODdBRCwgMHg4N0FFLCAweDg3QUYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0IwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdCMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4ODdCMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3QjMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdCNCwgMHgwMDAwLCAweDg3QjUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3QjYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4ODdCNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdCOCwgMHg4N0I5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdCQSwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdCQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4ODdCQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0JELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdCRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3QkYsIDB4MDAwMCwgMHgwMDAwLCAweDg3QzAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdDMSwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0MyLCAweDAwMDAsIDB4ODdDMywgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3QzQsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3QzUsIDB4ODdDNiwgMHgwMDAwLCAweDg3QzcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3QzgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdDOSwgMHgwMDAwLCAweDg3Q0EsIDB4ODdDQiwgMHgwMDAwLCAweDg3Q0MsIDB4ODdDRCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4N0NFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4N0NGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdEMCwgMHgwMDAwLCAweDg3RDEsIDB4MDAwMCwgMHg4N0QyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3RDMsIDB4ODdENCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4N0Q1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4N0Q2LCAweDAwMDAsIDB4ODdENywgMHgwMDAwLCAweDg3RDgsIDB4MDAwMCwgMHgwMDAwLCAweDg3RDksIDB4MDAwMCwgMHgwMDAwLCAweDg3REEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0RCLCAweDAwMDAsIDB4ODdEQywNCi0gICAgMHgwMDAwLCAweDg3REQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDg3REUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0RGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3RTAsIDB4MDAwMCwgMHg4N0UxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0UyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdFMywgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDg3RTQsIDB4MDAwMCwgMHg4N0U1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0U2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDg3RTcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDg3RTgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3RTksIDB4MDAwMCwgMHgwMDAwLCAweDg3RUEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDg3RUIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDg3RUMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0VELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0VFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3RUYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0YwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0YxLCAweDg3RjIsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0YzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3RjQsIDB4MDAwMCwgMHg4N0Y1LCAweDAwMDAsIDB4ODdGNiwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4N0Y3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdGOCwgMHg4N0Y5LCAweDAwMDAsIDB4MDAwMCwgMHg4N0ZBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3RkIsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3RkMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3RkQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdGRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0ZGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4MDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODgwMSwgMHgwMDAwLCAweDg4MDIsIDB4ODgwMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4MDQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODgwNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4MDYsIDB4ODgwNywNCi0gICAgMHg4ODA4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODgwOSwgMHgwMDAwLCAweDAwMDAsIDB4ODgwQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4MEIsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4ODgwQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODgwRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODBFLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4ODBGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODgxMCwgMHg4ODExLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODEyLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4ODEzLCAweDAwMDAsIDB4ODgxNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODE1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4ODgxNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODE3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODgxOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4ODE5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODgxQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODFCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4MUMsIDB4MDAwMCwgMHg4ODFELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDg4MUUsIDB4ODgxRiwgMHg4ODIwLCAweDAwMDAsIDB4ODgyMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4ODIyLCAweDg4MjMsIDB4ODgyNCwgMHgwMDAwLCAweDAwMDAsIDB4ODgyNSwgMHgwMDAwLCAweDAwMDAsIDB4ODgyNiwgMHg4ODI3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4ODgyOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODI5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODgyQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODJCLCAweDAwMDAsIDB4ODgyQywgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDg4MkQsIDB4ODgyRSwgMHgwMDAwLCAweDAwMDAsIDB4ODgyRiwgMHgwMDAwLCAweDg4MzAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDg4MzEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODgzMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4MzMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODM0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4MzUsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4MzYsDQotICAgIDB4MDAwMCwgMHg4ODM3LCAweDAwMDAsIDB4MDAwMCwgMHg4ODM4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4MzksIDB4ODgzQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODNCLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4ODNDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODgzRCwgMHgwMDAwLCAweDAwMDAsIDB4ODgzRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDg4M0YsIDB4MDAwMCwgMHg4ODQwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg0MSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODQyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg0MywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg0NCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg0NSwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NDYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODQ3LCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODQ4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODQ5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg0QSwgMHg4ODRCLCAweDg4NEMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg0RCwgMHg4ODRFLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4ODRGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NTAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NTEsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODUyLCAweDAwMDAsIDB4ODg1MywgMHg4ODU0LCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4ODg1NSwgMHgwMDAwLCAweDg4NTYsIDB4MDAwMCwgMHgwMDAwLCAweDg4NTcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg1OCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4ODg1OSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NUEsIDB4MDAwMCwgMHg4ODVCLCAweDg4NUMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg1RCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NUUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NUYsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NjAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg2MSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NjIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4ODYzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NjQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg2NSwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODY2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg2NywNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODY4LCAweDg4NjksIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODZBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODZCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODZDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NkQsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NkUsIDB4MDAwMCwgMHgwMDAwLCAweDg4NkYsIDB4ODg3MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODcxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4ODg3MiwgMHgwMDAwLCAweDAwMDAsIDB4ODg3MywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg3NCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4ODg3NSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NzYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODc3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NzgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg3OSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODdBLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg3QiwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4ODdDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4N0QsIDB4ODg3RSwgMHgwMDAwLCAweDg4N0YsIDB4MDAwMCwgMHg4ODgwLCAweDg4ODEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4ODIsIDB4ODg4MywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4ODQsIDB4ODg4NSwgMHgwMDAwLCAweDAwMDAsIDB4ODg4NiwgMHgwMDAwLCAweDg4ODcsIDB4ODg4OCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4ODksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4OEEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg4QiwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg4QywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4ODg4RCwgMHgwMDAwLCAweDg4OEUsIDB4MDAwMCwgMHgwMDAwLCAweDg4OEYsIDB4ODg5MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODkxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4ODg5MiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4OTMsIDB4MDAwMCwgMHg4ODk0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4OTUsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg5NiwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODk3LCAweDAwMDAsIDB4ODg5OCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4ODg5OSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4ODlBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDg4OUIsIDB4MDAwMCwgMHgwMDAwLCAweDg4OUMsIDB4MDAwMCwgMHgwMDAwLCAweDg4OUQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg5RSwgMHgwMDAwLCAweDAwMDAsIDB4ODg5RiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4ODhBMCwgMHgwMDAwLCAweDg4QTEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEEyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4QTMsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4QTQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhBNSwgMHgwMDAwLCAweDg4QTYsIDB4MDAwMCwgMHg4OEE3LCAweDg4QTgsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEE5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDg4QUEsIDB4MDAwMCwgMHg4OEFCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDg4QUMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEFELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEFFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhBRiwgMHgwMDAwLCAweDAwMDAsIDB4ODhCMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4OEIxLCAweDAwMDAsIDB4MDAwMCwgMHg4OEIyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhCMywgMHg4OEI0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4QjUsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhCNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4QjcsIDB4ODhCOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEI5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhCQSwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhCQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4OEJDLCAweDg4QkQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4QkUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4QkYsIDB4MDAwMCwgMHgwMDAwLCAweDg4QzAsIDB4MDAwMCwgMHg4OEMxLA0KLSAgICAweDg4QzIsIDB4ODhDMywgMHg4OEM0LCAweDg4QzUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4QzYsIDB4MDAwMCwgMHgwMDAwLCAweDg4QzcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhDOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4OEM5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OENBLCAweDAwMDAsIDB4ODhDQiwgMHgwMDAwLCAweDg4Q0MsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OENELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4Q0UsIDB4MDAwMCwgMHg4OENGLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhEMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhEMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDg4RDIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhEMywgMHgwMDAwLA0KLSAgICAweDg4RDQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4RDUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4RDYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhENywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhEOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEQ5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhEQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhEQiwgMHg4OERDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDg4REQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4ODhERSwgMHg4OERGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEUwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhFMSwgMHg4OEUyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEUzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEU0LCAweDAwMDAsIDB4MDAwMCwgMHg4OEU1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4RTYsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhFNywgMHgwMDAwLCAweDg4RTgsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEU5LCAweDAwMDAsIDB4ODhFQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4RUIsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhFQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEVELCAweDg4RUUsIDB4MDAwMCwgMHgwMDAwLCAweDg4RUYsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEYwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEYxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4OEYyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhGMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4ODhGNCwgMHg4OEY1LCAweDg4RjYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhGNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEY4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4RjksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhGQSwgMHgwMDAwLCAweDAwMDAsIDB4ODhGQiwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4OEZDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4RkQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEZFLCAweDAwMDAsIDB4ODhGRiwgMHgwMDAwLCAweDAwMDAsIDB4ODkwMCwgMHg4OTAxLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTAyLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5MDMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTA0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDg5MDUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkwNiwgMHg4OTA3LCAweDg5MDgsIDB4MDAwMCwgMHg4OTA5LCAweDAwMDAsIDB4ODkwQSwgMHgwMDAwLCAweDg5MEIsIDB4MDAwMCwNCi0gICAgMHg4OTBDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5MEQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkwRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTBGLCAweDAwMDAsIDB4ODkxMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4OTExLCAweDAwMDAsIDB4ODkxMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTEzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkxNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTE1LCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTE2LCAweDAwMDAsIDB4MDAwMCwgMHg4OTE3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDg5MTgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTE5LCAweDg5MUEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5MUIsIDB4MDAwMCwgMHg4OTFDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4OTFELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDg5MUUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTFGLCAweDg5MjAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkyMSwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTIyLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTIzLCAweDg5MjQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkyNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4ODkyNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5MjcsIDB4MDAwMCwgMHgwMDAwLCAweDg5MjgsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkyOSwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTJBLCAweDAwMDAsIDB4MDAwMCwgMHg4OTJCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkyQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTJELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4ODkyRSwgMHgwMDAwLCAweDAwMDAsIDB4ODkyRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkzMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTMxLCAweDAwMDAsIDB4ODkzMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkzMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4OTM0LCAweDg5MzUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTM2LCAweDAwMDAsIDB4MDAwMCwgMHg4OTM3LCAweDg5MzgsDQotICAgIDB4MDAwMCwgMHg4OTM5LCAweDAwMDAsIDB4MDAwMCwgMHg4OTNBLCAweDAwMDAsIDB4MDAwMCwgMHg4OTNCLCAweDAwMDAsIDB4MDAwMCwgMHg4OTNDLCAweDg5M0QsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5M0UsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5M0YsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDg5NDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5NDEsIDB4MDAwMCwgMHgwMDAwLCAweDg5NDIsDQotICAgIDB4ODk0MywgMHg4OTQ0LCAweDg5NDUsIDB4MDAwMCwgMHg4OTQ2LCAweDAwMDAsIDB4MDAwMCwgMHg4OTQ3LCAweDAwMDAsIDB4MDAwMCwgMHg4OTQ4LCAweDg5NDksIDB4ODk0QSwgMHgwMDAwLCAweDg5NEIsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5NEMsIDB4MDAwMCwgMHg4OTRELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTRFLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk0RiwgMHgwMDAwLCAweDg5NTAsIDB4MDAwMCwgMHgwMDAwLCAweDg5NTEsIDB4MDAwMCwgMHg4OTUyLCAweDg5NTMsIDB4ODk1NCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDg5NTUsIDB4ODk1NiwgMHg4OTU3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTU4LCAweDAwMDAsIDB4ODk1OSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5NUEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTVCLCAweDg5NUMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTVELCAweDAwMDAsIDB4MDAwMCwgMHg4OTVFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDg5NUYsIDB4ODk2MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk2MSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5NjIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTYzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk2NCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk2NSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDg5NjYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk2NywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5NjgsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk2OSwgMHg4OTZBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTZCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDg5NkMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5NkQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDg5NkUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk2RiwgMHgwMDAwLCAweDg5NzAsIDB4ODk3MSwgMHgwMDAwLCAweDg5NzIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk3MywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4OTc0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk3NSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTc2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTc3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk3OCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk3OSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDg5N0EsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5N0IsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5N0MsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5N0QsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk3RSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5N0YsIDB4MDAwMCwgMHg4OTgwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5ODEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5ODIsIDB4ODk4MywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5ODQsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTg1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4ODk4NiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5ODcsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTg4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTg5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OThBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk4QiwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5OEMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OThELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5OEUsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OThGLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTkwLCAweDAwMDAsIDB4ODk5MSwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk5MiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5OTMsIDB4MDAwMCwgMHgwMDAwLCAweDg5OTQsIDB4ODk5NSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5OTYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4OTk3LCAweDg5OTgsIDB4MDAwMCwgMHgwMDAwLCAweDg5OTksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTlBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTlCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk5QywgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5OUQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5OUUsIDB4ODk5RiwgMHg4OUEwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlBMSwgMHgwMDAwLCAweDAwMDAsIDB4ODlBMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5QTMsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDg5QTQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5QTUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4ODlBNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlBNywgMHgwMDAwLCAweDg5QTgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUE5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlBQSwgMHgwMDAwLCAweDAwMDAsIDB4ODlBQiwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4ODlBQywgMHg4OUFELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlBRSwgMHg4OUFGLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5QjAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUIxLCAweDAwMDAsIDB4MDAwMCwgMHg4OUIyLCAweDAwMDAsIDB4MDAwMCwgMHg4OUIzLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlCNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUI1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5QjYsIDB4ODlCNywgMHgwMDAwLCAweDg5QjgsIDB4ODlCOSwgMHg4OUJBLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUJCLCAweDAwMDAsIDB4ODlCQywgMHg4OUJELCAweDAwMDAsIDB4ODlCRSwgMHg4OUJGLCAweDg5QzAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlDMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5QzIsIDB4MDAwMCwgMHg4OUMzLCAweDg5QzQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5QzUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5QzYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUM3LA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4OUM4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5QzksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5Q0EsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4ODlDQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlDQywNCi0gICAgMHgwMDAwLCAweDg5Q0QsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4OUNFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlDRiwgMHg4OUQwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5RDEsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlEMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlEMywgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlENCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUQ1LCAweDAwMDAsIDB4MDAwMCwgMHg4OUQ2LCAweDg5RDcsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDg5RDgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUQ5LCAweDAwMDAsIDB4ODlEQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4OURCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OURDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OURELA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OURFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5REYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUUwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlFMSwgMHg4OUUyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5RTMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5RTQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUU1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5RTYsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4OUU3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4ODlFOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5RTksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlFQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUVCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlFQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5RUQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4ODlFRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5RUYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUYwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUYxLCAweDAwMDAsIDB4ODlGMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5RjMsIDB4ODlGNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUY1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5RjYsIDB4MDAwMCwgMHg4OUY3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDg5RjgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlGOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlGQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlGQiwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlGQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5RkQsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5RkUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlGRiwgMHg4QTAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMDEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTAyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMDMsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTA0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEwNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEwNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMDcsIDB4OEEwOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTA5LCAweDAwMDAsIDB4OEEwQSwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEwQiwgMHgwMDAwLCAweDAwMDAsIDB4OEEwQywNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OEEwRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEwRSwgMHgwMDAwLCAweDAwMDAsIDB4OEEwRiwgMHgwMDAwLCAweDAwMDAsIDB4OEExMCwgMHg4QTExLA0KLSAgICAweDAwMDAsIDB4OEExMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEExMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTE0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OEExNSwgMHg4QTE2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTE3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4QTE4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTE5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMUEsDQotICAgIDB4MDAwMCwgMHg4QTFCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDhBMUMsIDB4MDAwMCwgMHgwMDAwLCAweDhBMUQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEExRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEExRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMjAsDQotICAgIDB4OEEyMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEyMiwNCi0gICAgMHg4QTIzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTI0LCAweDhBMjUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDhBMjYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEyNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4OEEyOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTI5LCAweDAwMDAsIDB4OEEyQSwgMHgwMDAwLCAweDAwMDAsIDB4OEEyQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMkMsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OEEyRCwgMHgwMDAwLCAweDhBMkUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMkYsIDB4MDAwMCwgMHgwMDAwLCAweDhBMzAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEzMSwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMzIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEzMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDhBMzQsIDB4OEEzNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEzNiwgMHgwMDAwLCAweDhBMzcsIDB4MDAwMCwgMHg4QTM4LCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMzksIDB4OEEzQSwgMHgwMDAwLCAweDAwMDAsIDB4OEEzQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEzQywNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEzRCwgMHgwMDAwLCAweDAwMDAsIDB4OEEzRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBM0YsIDB4MDAwMCwgMHg4QTQwLA0KLSAgICAweDhBNDEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNDIsIDB4OEE0MywgMHg4QTQ0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDhBNDUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNDYsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTQ3LCAweDhBNDgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OEE0OSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTRBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE0QiwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE0QywgMHg4QTRELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE0RSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNEYsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE1MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE1MSwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTUyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4QTUzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNTQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDhBNTUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE1NiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OEE1NywgMHgwMDAwLCAweDAwMDAsIDB4OEE1OCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTU5LCAweDAwMDAsIDB4MDAwMCwgMHg4QTVBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OEE1QiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNUMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4QTVELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNUUsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDhBNUYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE2MCwgMHg4QTYxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4QTYyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNjMsIDB4MDAwMCwgMHgwMDAwLCAweDhBNjQsIDB4MDAwMCwgMHgwMDAwLCAweDhBNjUsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE2NiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTY3LCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNjgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTY5LCAweDAwMDAsIDB4OEE2QSwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE2QiwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4OEE2QywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNkQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNkUsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4QTZGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE3MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTcxLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE3MiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE3MywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTc0LCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNzUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTc2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDhBNzcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTc4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDhBNzksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBN0EsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE3QiwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTdDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE3RCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBN0UsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDhBN0YsIDB4MDAwMCwgMHgwMDAwLCAweDhBODAsIDB4OEE4MSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE4MiwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBODMsIDB4MDAwMCwgMHg4QTg0LCAweDhBODUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4QTg2LCAweDAwMDAsIDB4OEE4NywgMHgwMDAwLCAweDAwMDAsIDB4OEE4OCwgMHgwMDAwLCAweDhBODksIDB4OEE4QSwgMHgwMDAwLCAweDhBOEIsIDB4OEE4QywgMHg4QThELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDhBOEUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBOEYsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBOTAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTkxLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTkyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDhBOTMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTk0LCAweDhBOTUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTk2LCAweDhBOTcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTk4LA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4QTk5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE5QSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OEE5QiwgMHgwMDAwLCAweDhBOUMsIDB4MDAwMCwgMHgwMDAwLCAweDhBOUQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTlFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4OEE5RiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBQTAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUExLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBQTIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUEzLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFBNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFBNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBQTYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBQTcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OEFBOCwgMHg4QUE5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBQUEsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4QUFCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUFDLCAweDhBQUQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4OEFBRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFBRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBQjAsIDB4MDAwMCwgMHgwMDAwLCAweDhBQjEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFCMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4QUIzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFCNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDhBQjUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBQjYsIDB4MDAwMCwgMHg4QUI3LCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUI4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFCOSwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OEFCQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFCQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDhBQkMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUJELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OEFCRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUJGLCAweDhBQzAsIDB4MDAwMCwgMHg4QUMxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUMyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBQzMsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDhBQzQsIDB4MDAwMCwgMHg4QUM1LCAweDAwMDAsIDB4MDAwMCwgMHg4QUM2LCAweDAwMDAsIDB4OEFDNywgMHgwMDAwLCAweDAwMDAsIDB4OEFDOCwgMHg4QUM5LCAweDhBQ0EsIDB4MDAwMCwNCi0gICAgMHg4QUNCLCAweDhBQ0MsIDB4OEFDRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUNFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUNGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDhBRDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUQxLCAweDAwMDAsIDB4OEFEMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFEMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUQ0LCAweDAwMDAsIDB4OEFENSwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OEFENiwgMHgwMDAwLCAweDhBRDcsIDB4OEFEOCwgMHgwMDAwLCAweDAwMDAsIDB4OEFEOSwgMHgwMDAwLCAweDAwMDAsIDB4OEFEQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBREIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFEQywgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBREQsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFERSwgMHgwMDAwLCAweDhBREYsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUUwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFFMSwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFFMiwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFFMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFFNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBRTUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFFNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFFNywNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBRTgsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4QUU5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUVBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFFQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUVDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBRUQsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFFRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUVGLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBRjAsIDB4MDAwMCwgMHg4QUYxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4QUYyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUYzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUY0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBRjUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUY2LA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFGNywgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUY4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBRjksIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUZBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBRkIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFGQywgMHg4QUZELCAweDhBRkUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4QUZGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEIwMSwgMHg4QjAyLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMDMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjA0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMDUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEIwNiwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OEIwNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMDgsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMDksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEIwQSwgMHgwMDAwLCAweDAwMDAsIDB4OEIwQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMEMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMEQsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDhCMEUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMEYsIDB4OEIxMCwgMHg4QjExLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4QjEyLCAweDhCMTMsIDB4OEIxNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjE1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMTYsIDB4OEIxNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjE4LCAweDhCMTksDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMUEsIDB4OEIxQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjFDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMUQsIDB4OEIxRSwgMHgwMDAwLCAweDhCMUYsIDB4MDAwMCwgMHgwMDAwLCAweDhCMjAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjIxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEIyMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjIzLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEIyNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEIyNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjI2LA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDhCMjcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEIyOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMjksIDB4MDAwMCwgMHg4QjJBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjJCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMkMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjJELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMkUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4OEIyRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjMwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEIzMSwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OEIzMiwgMHgwMDAwLCAweDhCMzMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjM0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjM1LCAweDAwMDAsIDB4OEIzNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjM3LCAweDhCMzgsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjM5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjNBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCM0IsIDB4MDAwMCwgMHg4QjNDLCAweDhCM0QsIDB4MDAwMCwgMHgwMDAwLCAweDhCM0UsDQotICAgIDB4OEIzRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjQwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEI0MSwgMHgwMDAwLCAweDAwMDAsIDB4OEI0MiwgMHgwMDAwLCAweDhCNDMsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OEI0NCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCNDUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjQ2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCNDcsIDB4OEI0OCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEI0OSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4QjRBLCAweDhCNEIsIDB4MDAwMCwgMHg4QjRDLCAweDAwMDAsIDB4OEI0RCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCNEUsIDB4MDAwMCwNCi0gICAgMHg4QjRGLCAweDAwMDAsIDB4OEI1MCwgMHgwMDAwLCAweDhCNTEsIDB4OEI1MiwgMHg4QjUzLCAweDhCNTQsIDB4OEI1NSwgMHg4QjU2LCAweDAwMDAsIDB4OEI1NywgMHgwMDAwLCAweDhCNTgsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDhCNTksIDB4MDAwMCwgMHgwMDAwLCAweDhCNUEsIDB4OEI1QiwgMHg4QjVDLCAweDAwMDAsIDB4OEI1RCwgMHgwMDAwLCAweDhCNUUsIDB4OEI1RiwgMHg4QjYwLCAweDhCNjEsIDB4OEI2MiwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4QjYzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCNjQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCNjUsIDB4MDAwMCwNCi0gICAgMHg4QjY2LCAweDhCNjcsIDB4OEI2OCwgMHg4QjY5LCAweDAwMDAsIDB4OEI2QSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjZCLCAweDhCNkMsIDB4MDAwMCwgMHg4QjZELCAweDAwMDAsIDB4MDAwMCwgMHg4QjZFLA0KLSAgICAweDhCNkYsIDB4MDAwMCwgMHg4QjcwLCAweDhCNzEsIDB4OEI3MiwgMHgwMDAwLCAweDhCNzMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Qjc0LCAweDAwMDAsDQotICAgIDB4OEI3NSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCNzYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCNzcsIDB4MDAwMCwgMHg4Qjc4LCAweDhCNzksIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDhCN0EsIDB4OEI3QiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjdDLCAweDAwMDAsIDB4OEI3RCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDhCN0UsIDB4OEI3RiwgMHg4QjgwLCAweDhCODEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCODIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4QjgzLCAweDAwMDAsIDB4OEI4NCwgMHgwMDAwLCAweDAwMDAsIDB4OEI4NSwgMHgwMDAwLCAweDhCODYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEI4NywNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Qjg4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Qjg5LCAweDAwMDAsIDB4OEI4QSwgMHgwMDAwLA0KLSAgICAweDhCOEIsIDB4MDAwMCwgMHg4QjhDLCAweDhCOEQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCOEUsIDB4OEI4RiwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4OEI5MCwgMHg4QjkxLCAweDhCOTIsIDB4MDAwMCwgMHg4QjkzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCOTQsIDB4OEI5NSwgMHg4Qjk2LCAweDhCOTcsIDB4MDAwMCwgMHg4Qjk4LCAweDhCOTksIDB4OEI5QSwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCOUIsIDB4MDAwMCwgMHgwMDAwLCAweDhCOUMsIDB4MDAwMCwgMHgwMDAwLCAweDhCOUQsIDB4OEI5RSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4QjlGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJBMCwgMHg4QkExLCAweDhCQTIsIDB4OEJBMywgMHgwMDAwLCAweDAwMDAsIDB4OEJBNCwgMHg4QkE1LCAweDAwMDAsDQotICAgIDB4OEJBNiwgMHg4QkE3LCAweDAwMDAsIDB4OEJBOCwgMHgwMDAwLCAweDAwMDAsIDB4OEJBOSwgMHgwMDAwLCAweDhCQUEsIDB4OEJBQiwgMHgwMDAwLCAweDAwMDAsIDB4OEJBQywgMHgwMDAwLCAweDAwMDAsIDB4OEJBRCwNCi0gICAgMHgwMDAwLCAweDhCQUUsIDB4OEJBRiwgMHgwMDAwLCAweDhCQjAsIDB4MDAwMCwgMHg4QkIxLCAweDAwMDAsIDB4MDAwMCwgMHg4QkIyLCAweDAwMDAsIDB4OEJCMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkI0LCAweDhCQjUsIDB4OEJCNiwgMHg4QkI3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4OEJCOCwgMHg4QkI5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkJBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCQkIsIDB4MDAwMCwgMHg4QkJDLCAweDhCQkQsIDB4OEJCRSwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkJGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJDMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJDMSwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OEJDMiwgMHg4QkMzLCAweDAwMDAsIDB4MDAwMCwgMHg4QkM0LCAweDhCQzUsIDB4OEJDNiwgMHgwMDAwLCAweDhCQzcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJDOCwgMHg4QkM5LCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJDQSwgMHgwMDAwLCAweDhCQ0IsIDB4OEJDQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OEJDRCwgMHgwMDAwLCAweDhCQ0UsIDB4OEJDRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCRDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJEMSwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OEJEMiwgMHg4QkQzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCRDQsIDB4OEJENSwgMHg4QkQ2LCAweDAwMDAsIDB4OEJENywgMHgwMDAwLCAweDhCRDgsDQotICAgIDB4OEJEOSwgMHgwMDAwLCAweDAwMDAsIDB4OEJEQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJEQiwgMHgwMDAwLCAweDAwMDAsIDB4OEJEQywgMHg4QkRELCAweDhCREUsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJERiwgMHgwMDAwLCAweDhCRTAsIDB4MDAwMCwgMHg4QkUxLCAweDAwMDAsIDB4MDAwMCwgMHg4QkUyLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCRTMsIDB4MDAwMCwgMHgwMDAwLCAweDhCRTQsIDB4MDAwMCwgMHg4QkU1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCRTYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkU3LCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkU4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4QkU5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJFQSwgMHgwMDAwLCAweDhCRUIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkVDLCAweDhCRUQsIDB4MDAwMCwgMHg4QkVFLCAweDAwMDAsIDB4MDAwMCwgMHg4QkVGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJGMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJGMSwgMHg4QkYyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCRjMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OEJGNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDhCRjUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCRjYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJGNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkY4LCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJGOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJGQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCRkIsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkZDLA0KLSAgICAweDhCRkQsIDB4MDAwMCwgMHg4QkZFLCAweDhCRkYsIDB4MDAwMCwgMHg4QzAwLCAweDhDMDEsIDB4OEMwMiwgMHgwMDAwLCAweDhDMDMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMwNCwgMHg4QzA1LCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMDYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzA3LCAweDAwMDAsIDB4MDAwMCwgMHg4QzA4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMDksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMwQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMEIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMEMsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzBELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OEMwRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMEYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzEwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMxMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMTIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzEzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzE0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMxNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4OEMxNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMxNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMTgsIDB4OEMxOSwgMHg4QzFBLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMUIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMxQywgMHgwMDAwLCAweDhDMUQsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMUUsIDB4MDAwMCwgMHg4QzFGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMyMCwNCi0gICAgMHg4QzIxLCAweDAwMDAsIDB4OEMyMiwgMHgwMDAwLCAweDAwMDAsIDB4OEMyMywgMHgwMDAwLCAweDAwMDAsIDB4OEMyNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMyNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzI2LCAweDhDMjcsIDB4OEMyOCwgMHg4QzI5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMkEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzJCLCAweDAwMDAsIDB4OEMyQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMkQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDhDMkUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMkYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4OEMzMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzMxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMzMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OEMzMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMzNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMzUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzM2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzM3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4QzM4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMzOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMzQSwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMzQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMzQywgMHgwMDAwLCAweDAwMDAsIDB4OEMzRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzNFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzNGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM0MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OEM0MSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDNDIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDNDMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzQ0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDhDNDUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM0NiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzQ3LCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzQ4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDhDNDksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzRBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM0QiwgMHg4QzRDLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM0RCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM0RSwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM0RiwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDNTAsIDB4MDAwMCwgMHg4QzUxLCAweDhDNTIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM1MywgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDhDNTQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzU1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM1NiwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4QzU3LCAweDAwMDAsIDB4MDAwMCwgMHg4QzU4LCAweDAwMDAsIDB4MDAwMCwgMHg4QzU5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDhDNUEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzVCLCAweDAwMDAsIDB4MDAwMCwgMHg4QzVDLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDNUQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzVFLCAweDAwMDAsIDB4OEM1RiwgMHgwMDAwLCAweDhDNjAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4QzYxLCAweDAwMDAsIDB4MDAwMCwgMHg4QzYyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM2MywNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzY0LCAweDAwMDAsIDB4MDAwMCwgMHg4QzY1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM2NiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM2NywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzY4LCAweDhDNjksIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDNkEsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzZCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM2QywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM2RCwgMHgwMDAwLCAweDAwMDAsIDB4OEM2RSwgMHg4QzZGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4QzcwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDNzEsIDB4MDAwMCwgMHg4QzcyLCAweDhDNzMsIDB4MDAwMCwgMHgwMDAwLCAweDhDNzQsIDB4OEM3NSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM3NiwgMHgwMDAwLCAweDAwMDAsIDB4OEM3NywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Qzc4LCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDhDNzksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzdBLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDN0IsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzdDLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDN0QsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDN0UsIDB4OEM3RiwgMHgwMDAwLCAweDAwMDAsIDB4OEM4MCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDODEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzgyLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDODMsIDB4OEM4NCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDODUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM4NiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Qzg3LA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDODgsIDB4MDAwMCwgMHg4Qzg5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDOEEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDOEIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzhDLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDhDOEQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM4RSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzhGLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM5MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzkxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzkyLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzkzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Qzk0LCAweDAwMDAsIDB4MDAwMCwgMHg4Qzk1LA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4Qzk2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDOTcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Qzk4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4Qzk5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDOUEsIDB4OEM5QiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzlDLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4QzlELCAweDhDOUUsIDB4MDAwMCwgMHgwMDAwLCAweDhDOUYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0EwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDQTEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0EyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4Q0EzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OENBNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDQTUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0E2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDQTcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0E4LCAweDAwMDAsIDB4OENBOSwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDQUEsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0FCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0FDLCAweDhDQUQsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OENBRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0FGLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDQjAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0IxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0IyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OENCMywgMHg4Q0I0LCAweDAwMDAsIDB4OENCNSwgMHgwMDAwLCAweDAwMDAsIDB4OENCNiwgMHgwMDAwLCAweDAwMDAsIDB4OENCNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDQjgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OENCOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0JBLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4Q0JCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDQkMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDQkQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0JFLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4Q0JGLCAweDAwMDAsIDB4OENDMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDQzEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OENDMiwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0MzLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0M0LCAweDAwMDAsIDB4OENDNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OENDNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0M3LCAweDhDQzgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OENDOSwgMHgwMDAwLCAweDhDQ0EsIDB4MDAwMCwgMHgwMDAwLCAweDhDQ0IsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDhDQ0MsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0NELCAweDAwMDAsIDB4MDAwMCwgMHg4Q0NFLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0NGLCAweDAwMDAsIDB4OENEMCwNCi0gICAgMHg4Q0QxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDRDIsIDB4MDAwMCwgMHg4Q0QzLCAweDAwMDAsIDB4OENENCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4Q0Q1LCAweDhDRDYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0Q3LCAweDAwMDAsIDB4OENEOCwgMHgwMDAwLCAweDhDRDksIDB4MDAwMCwgMHg4Q0RBLCAweDAwMDAsDQotICAgIDB4OENEQiwgMHgwMDAwLCAweDAwMDAsIDB4OENEQywgMHgwMDAwLCAweDhDREQsIDB4OENERSwgMHg4Q0RGLCAweDhDRTAsIDB4MDAwMCwgMHgwMDAwLCAweDhDRTEsIDB4MDAwMCwgMHg4Q0UyLCAweDAwMDAsIDB4OENFMywNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0U0LCAweDAwMDAsIDB4OENFNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDRTYsIDB4MDAwMCwgMHgwMDAwLCAweDhDRTcsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OENFOCwgMHgwMDAwLCAweDAwMDAsIDB4OENFOSwgMHgwMDAwLCAweDhDRUEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OENFQiwgMHgwMDAwLCAweDhDRUMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4Q0VELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OENFRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDRUYsIDB4MDAwMCwNCi0gICAgMHg4Q0YwLCAweDAwMDAsIDB4OENGMSwgMHgwMDAwLCAweDhDRjIsIDB4OENGMywgMHgwMDAwLCAweDAwMDAsIDB4OENGNCwgMHgwMDAwLCAweDAwMDAsIDB4OENGNSwgMHgwMDAwLCAweDAwMDAsIDB4OENGNiwgMHgwMDAwLA0KLSAgICAweDhDRjcsIDB4OENGOCwgMHg4Q0Y5LCAweDhDRkEsIDB4MDAwMCwgMHgwMDAwLCAweDhDRkIsIDB4MDAwMCwgMHgwMDAwLCAweDhDRkMsIDB4MDAwMCwgMHg4Q0ZELCAweDhDRkUsIDB4OENGRiwgMHg4RDAwLCAweDAwMDAsDQotICAgIDB4OEQwMSwgMHg4RDAyLCAweDhEMDMsIDB4OEQwNCwgMHgwMDAwLCAweDhEMDUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQwNiwgMHgwMDAwLCAweDAwMDAsIDB4OEQwNywNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhEMDgsIDB4OEQwOSwgMHg4RDBBLCAweDhEMEIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDBDLCAweDhEMEQsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OEQwRSwgMHg4RDBGLCAweDAwMDAsIDB4MDAwMCwgMHg4RDEwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDExLCAweDAwMDAsIDB4OEQxMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDEzLCAweDAwMDAsDQotICAgIDB4OEQxNCwgMHg4RDE1LCAweDAwMDAsIDB4OEQxNiwgMHg4RDE3LCAweDhEMTgsIDB4OEQxOSwgMHgwMDAwLCAweDhEMUEsIDB4MDAwMCwgMHg4RDFCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4RDFDLCAweDAwMDAsIDB4OEQxRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDFFLCAweDAwMDAsIDB4MDAwMCwgMHg4RDFGLCAweDAwMDAsIDB4MDAwMCwgMHg4RDIwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDIxLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4RDIyLCAweDAwMDAsIDB4OEQyMywgMHgwMDAwLCAweDAwMDAsIDB4OEQyNCwgMHgwMDAwLCAweDhEMjUsIDB4MDAwMCwgMHg4RDI2LCAweDAwMDAsIDB4OEQyNywgMHgwMDAwLCAweDhEMjgsDQotICAgIDB4MDAwMCwgMHg4RDI5LCAweDhEMkEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQyQiwgMHg4RDJDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhEMkQsIDB4OEQyRSwgMHg4RDJGLCAweDhEMzAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDhEMzEsIDB4OEQzMiwgMHgwMDAwLCAweDhEMzMsIDB4MDAwMCwgMHg4RDM0LCAweDhEMzUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQzNiwgMHgwMDAwLCAweDhEMzcsIDB4OEQzOCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OEQzOSwgMHgwMDAwLCAweDhEM0EsIDB4MDAwMCwgMHgwMDAwLCAweDhEM0IsIDB4OEQzQywgMHg4RDNELCAweDAwMDAsIDB4OEQzRSwgMHgwMDAwLCAweDhEM0YsIDB4MDAwMCwgMHg4RDQwLCAweDAwMDAsDQotICAgIDB4OEQ0MSwgMHg4RDQyLCAweDhENDMsIDB4MDAwMCwgMHg4RDQ0LCAweDhENDUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDQ2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhENDcsIDB4MDAwMCwNCi0gICAgMHg4RDQ4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhENDksIDB4MDAwMCwgMHg4RDRBLCAweDhENEIsIDB4MDAwMCwgMHg4RDRDLCAweDAwMDAsIDB4OEQ0RCwgMHgwMDAwLCAweDhENEUsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDhENEYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDUwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDUxLCAweDhENTIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQ1MywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQ1NCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhENTUsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDU2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQ1NywgMHg4RDU4LA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhENTksIDB4MDAwMCwgMHg4RDVBLCAweDhENUIsIDB4OEQ1QywgMHgwMDAwLCAweDhENUQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhENUUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQ1RiwNCi0gICAgMHg4RDYwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhENjEsIDB4MDAwMCwgMHgwMDAwLCAweDhENjIsIDB4OEQ2MywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhENjQsIDB4OEQ2NSwgMHgwMDAwLA0KLSAgICAweDhENjYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQ2NywgMHg4RDY4LCAweDAwMDAsIDB4MDAwMCwgMHg4RDY5LCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDhENkEsIDB4OEQ2QiwgMHgwMDAwLCAweDhENkMsIDB4OEQ2RCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDZFLCAweDAwMDAsIDB4OEQ2RiwgMHgwMDAwLCAweDhENzAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDcxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDcyLCAweDAwMDAsDQotICAgIDB4OEQ3MywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDc0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhENzUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDc2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhENzcsIDB4OEQ3OCwgMHgwMDAwLA0KLSAgICAweDhENzksIDB4OEQ3QSwgMHg4RDdCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQ3QywgMHg4RDdELCAweDhEN0UsIDB4OEQ3RiwgMHg4RDgwLCAweDhEODEsIDB4MDAwMCwgMHgwMDAwLCAweDhEODIsDQotICAgIDB4OEQ4MywgMHgwMDAwLCAweDhEODQsIDB4OEQ4NSwgMHg4RDg2LCAweDAwMDAsIDB4OEQ4NywgMHg4RDg4LCAweDhEODksIDB4MDAwMCwgMHg4RDhBLCAweDhEOEIsIDB4OEQ4QywgMHg4RDhELCAweDAwMDAsIDB4OEQ4RSwNCi0gICAgMHg4RDhGLCAweDhEOTAsIDB4OEQ5MSwgMHg4RDkyLCAweDhEOTMsIDB4OEQ5NCwgMHgwMDAwLCAweDhEOTUsIDB4OEQ5NiwgMHgwMDAwLCAweDhEOTcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OEQ5OCwgMHg4RDk5LCAweDhEOUEsIDB4MDAwMCwgMHg4RDlCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhEOUMsIDB4OEQ5RCwgMHgwMDAwLCAweDhEOUUsIDB4MDAwMCwgMHg4RDlGLCAweDAwMDAsDQotICAgIDB4OERBMCwgMHg4REExLCAweDhEQTIsIDB4OERBMywgMHg4REE0LCAweDAwMDAsIDB4OERBNSwgMHg4REE2LCAweDAwMDAsIDB4MDAwMCwgMHg4REE3LCAweDAwMDAsIDB4OERBOCwgMHg4REE5LCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhEQUEsIDB4OERBQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhEQUMsIDB4OERBRCwgMHg4REFFLCAweDhEQUYsIDB4OERCMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OERCMSwgMHg4REIyLCAweDAwMDAsIDB4OERCMywgMHg4REI0LCAweDAwMDAsIDB4OERCNSwgMHgwMDAwLCAweDAwMDAsIDB4OERCNiwgMHgwMDAwLCAweDhEQjcsDQotICAgIDB4OERCOCwgMHgwMDAwLCAweDAwMDAsIDB4OERCOSwgMHg4REJBLCAweDAwMDAsIDB4OERCQiwgMHg4REJDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhEQkQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhEQkUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4REJGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhEQzAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhEQzEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OERDMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDhEQzMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4REM0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4REM1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4REM2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4REM3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4OERDOCwgMHgwMDAwLCAweDAwMDAsIDB4OERDOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhEQ0EsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4RENCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhEQ0MsIDB4OERDRCwgMHg4RENFLCAweDAwMDAsIDB4OERDRiwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4REQwLCAweDhERDEsIDB4OEREMiwgMHgwMDAwLCAweDhERDMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4REQ0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDhERDUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OERENiwgMHg4REQ3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhERDgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4OEREOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RERBLCAweDhEREIsIDB4OEREQywgMHg4RERELCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OERERSwgMHgwMDAwLCAweDhEREYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OERFMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4REUxLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4REUyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDhERTMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhERTQsIDB4OERFNSwgMHg4REU2LCAweDhERTcsIDB4OERFOCwgMHgwMDAwLCAweDhERTksIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4REVBLCAweDAwMDAsIDB4OERFQiwgMHgwMDAwLCAweDhERUMsIDB4OERFRCwgMHg4REVFLCAweDhERUYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4REYwLCAweDAwMDAsIDB4OERGMSwgMHg4REYyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4REYzLCAweDhERjQsIDB4OERGNSwgMHg4REY2LCAweDhERjcsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhERjgsIDB4OERGOSwgMHgwMDAwLCAweDAwMDAsIDB4OERGQSwgMHg4REZCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OERGQywNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4REZELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OERGRSwgMHgwMDAwLCAweDAwMDAsIDB4OERGRiwgMHgwMDAwLCAweDAwMDAsIDB4OEUwMCwgMHg4RTAxLA0KLSAgICAweDhFMDIsIDB4MDAwMCwgMHg4RTAzLCAweDAwMDAsIDB4OEUwNCwgMHg4RTA1LCAweDhFMDYsIDB4MDAwMCwgMHgwMDAwLCAweDhFMDcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEUwOCwgMHg4RTA5LCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTBBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEUwQiwNCi0gICAgMHgwMDAwLCAweDhFMEMsIDB4OEUwRCwgMHgwMDAwLCAweDhFMEUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFMEYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEUxMCwgMHg4RTExLCAweDhFMTIsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDhFMTMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEUxNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTE1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OEUxNiwgMHg4RTE3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTE4LCAweDhFMTksIDB4MDAwMCwgMHgwMDAwLCAweDhFMUEsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFMUIsIDB4OEUxQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTFELCAweDAwMDAsIDB4MDAwMCwgMHg4RTFFLCAweDAwMDAsIDB4OEUxRiwgMHgwMDAwLA0KLSAgICAweDhFMjAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFMjEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDhFMjIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTIzLCAweDhFMjQsIDB4MDAwMCwgMHg4RTI1LCAweDAwMDAsIDB4OEUyNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDhFMjcsIDB4MDAwMCwgMHgwMDAwLCAweDhFMjgsIDB4MDAwMCwgMHgwMDAwLCAweDhFMjksIDB4MDAwMCwgMHgwMDAwLCAweDhFMkEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTJCLA0KLSAgICAweDhFMkMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEUyRCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTJFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEUyRiwgMHgwMDAwLCAweDAwMDAsIDB4OEUzMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OEUzMSwgMHgwMDAwLCAweDhFMzIsIDB4MDAwMCwgMHg4RTMzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEUzNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEUzNSwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4OEUzNiwgMHgwMDAwLCAweDhFMzcsIDB4MDAwMCwgMHg4RTM4LCAweDAwMDAsIDB4OEUzOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTNBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFM0IsIDB4OEUzQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFM0QsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEUzRSwgMHgwMDAwLCAweDhFM0YsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEU0MCwgMHg4RTQxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OEU0MiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4OEU0MywgMHg4RTQ0LCAweDAwMDAsIDB4OEU0NSwgMHgwMDAwLCAweDhFNDYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFNDcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFNDgsIDB4OEU0OSwgMHgwMDAwLCAweDhFNEEsIDB4OEU0QiwgMHg4RTRDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFNEQsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFNEUsIDB4OEU0RiwgMHgwMDAwLCAweDAwMDAsIDB4OEU1MCwgMHgwMDAwLCAweDhFNTEsIDB4MDAwMCwgMHgwMDAwLCAweDhFNTIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFNTMsIDB4MDAwMCwgMHg4RTU0LCAweDAwMDAsIDB4OEU1NSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4RTU2LCAweDhFNTcsIDB4MDAwMCwgMHg4RTU4LCAweDhFNTksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTVBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFNUIsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDhFNUMsIDB4OEU1RCwgMHgwMDAwLCAweDAwMDAsIDB4OEU1RSwgMHg4RTVGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTYwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEU2MSwgMHgwMDAwLCAweDAwMDAsIDB4OEU2MiwgMHg4RTYzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFNjQsIDB4MDAwMCwNCi0gICAgMHg4RTY1LCAweDAwMDAsIDB4MDAwMCwgMHg4RTY2LCAweDhFNjcsIDB4MDAwMCwgMHgwMDAwLCAweDhFNjgsIDB4OEU2OSwgMHg4RTZBLCAweDhFNkIsIDB4MDAwMCwgMHgwMDAwLCAweDhFNkMsIDB4OEU2RCwgMHg4RTZFLA0KLSAgICAweDhFNkYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTcwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTcxLCAweDhFNzIsIDB4MDAwMCwgMHg4RTczLCAweDAwMDAsIDB4OEU3NCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4RTc1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTc2LCAweDAwMDAsIDB4MDAwMCwgMHg4RTc3LCAweDhFNzgsIDB4MDAwMCwgMHgwMDAwLCAweDhFNzksIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFN0EsIDB4MDAwMCwgMHg4RTdCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTdDLCAweDhFN0QsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFN0UsIDB4MDAwMCwgMHg4RTdGLCAweDAwMDAsIDB4OEU4MCwgMHg4RTgxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFODIsDQotICAgIDB4OEU4MywgMHgwMDAwLCAweDAwMDAsIDB4OEU4NCwgMHgwMDAwLCAweDhFODUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTg2LCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDhFODcsIDB4MDAwMCwgMHg4RTg4LCAweDAwMDAsIDB4MDAwMCwgMHg4RTg5LCAweDAwMDAsIDB4OEU4QSwgMHgwMDAwLCAweDhFOEIsIDB4OEU4QywgMHg4RThELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDhFOEUsIDB4MDAwMCwgMHgwMDAwLCAweDhFOEYsIDB4MDAwMCwgMHg4RTkwLCAweDhFOTEsIDB4MDAwMCwgMHg4RTkyLCAweDAwMDAsIDB4OEU5MywgMHg4RTk0LCAweDhFOTUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEU5NiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTk3LCAweDAwMDAsIDB4OEU5OCwgMHgwMDAwLCAweDhFOTksIDB4OEU5QSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDhFOUIsIDB4MDAwMCwgMHg4RTlDLCAweDAwMDAsIDB4OEU5RCwgMHgwMDAwLCAweDhFOUUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTlGLCAweDAwMDAsIDB4MDAwMCwgMHg4RUEwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4RUExLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEVBMiwgMHgwMDAwLCAweDhFQTMsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RUE0LCAweDhFQTUsIDB4OEVBNiwgMHgwMDAwLCAweDhFQTcsIDB4OEVBOCwgMHg4RUE5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFQUEsIDB4OEVBQiwNCi0gICAgMHg4RUFDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEVBRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RUFFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OEVBRiwgMHgwMDAwLCAweDAwMDAsIDB4OEVCMCwgMHgwMDAwLCAweDhFQjEsIDB4MDAwMCwgMHg4RUIyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFQjMsDQotICAgIDB4OEVCNCwgMHgwMDAwLCAweDhFQjUsIDB4MDAwMCwgMHgwMDAwLCAweDhFQjYsIDB4MDAwMCwgMHgwMDAwLCAweDhFQjcsIDB4OEVCOCwgMHg4RUI5LCAweDhFQkEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEVCQiwNCi0gICAgMHg4RUJDLCAweDhFQkQsIDB4OEVCRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RUJGLCAweDAwMDAsIDB4OEVDMCwgMHg4RUMxLCAweDAwMDAsIDB4OEVDMiwgMHgwMDAwLCAweDAwMDAsIDB4OEVDMywgMHg4RUM0LA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFQzUsIDB4MDAwMCwgMHgwMDAwLCAweDhFQzYsIDB4MDAwMCwgMHg4RUM3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4RUM4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEVDOSwgMHg4RUNBLCAweDAwMDAsIDB4MDAwMCwgMHg4RUNCLCAweDhFQ0MsIDB4MDAwMCwgMHg4RUNELCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFQ0UsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEVDRiwgMHgwMDAwLCAweDhFRDAsIDB4OEVEMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDhFRDIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEVEMywgMHg4RUQ0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFRDUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4OEVENiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFRDcsIDB4OEVEOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RUQ5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFREEsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OEVEQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFREMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEVERCwgMHgwMDAwLCAweDhFREUsIDB4MDAwMCwgMHg4RURGLCAweDAwMDAsIDB4MDAwMCwgMHg4RUUwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4RUUxLCAweDhFRTIsIDB4OEVFMywgMHgwMDAwLCAweDAwMDAsIDB4OEVFNCwgMHg4RUU1LCAweDAwMDAsIDB4OEVFNiwgMHg4RUU3LCAweDAwMDAsIDB4OEVFOCwgMHgwMDAwLCAweDhFRTksIDB4MDAwMCwNCi0gICAgMHg4RUVBLCAweDAwMDAsIDB4MDAwMCwgMHg4RUVCLCAweDAwMDAsIDB4OEVFQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFRUQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEVFRSwgMHg4RUVGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFRjAsIDB4OEVGMSwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4OEVGMiwgMHg4RUYzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RUY0LCAweDhFRjUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEVGNiwgMHg4RUY3LCAweDhFRjgsIDB4OEVGOSwNCi0gICAgMHgwMDAwLCAweDhFRkEsIDB4OEVGQiwgMHgwMDAwLCAweDhFRkMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEVGRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDhFRkUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RUZGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEYwMSwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEYwMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4RjAzLCAweDAwMDAsIDB4MDAwMCwgMHg4RjA0LCAweDhGMDUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEYwNiwgMHg4RjA3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEYwOCwgMHg4RjA5LCAweDAwMDAsIDB4MDAwMCwgMHg4RjBBLCAweDAwMDAsIDB4MDAwMCwgMHg4RjBCLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDhGMEMsIDB4OEYwRCwgMHgwMDAwLCAweDhGMEUsIDB4OEYwRiwgMHgwMDAwLCAweDhGMTAsIDB4MDAwMCwgMHg4RjExLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEYxMiwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGMTMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGMTQsIDB4MDAwMCwgMHg4RjE1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OEYxNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjE3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjE4LCAweDAwMDAsDQotICAgIDB4OEYxOSwgMHgwMDAwLCAweDAwMDAsIDB4OEYxQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjFCLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4RjFDLCAweDhGMUQsIDB4OEYxRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGMUYsIDB4MDAwMCwgMHg4RjIwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjIxLCAweDhGMjIsIDB4OEYyMywgMHg4RjI0LA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEYyNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4OEYyNiwgMHgwMDAwLCAweDhGMjcsIDB4OEYyOCwgMHgwMDAwLCAweDAwMDAsIDB4OEYyOSwgMHgwMDAwLCAweDhGMkEsIDB4OEYyQiwgMHgwMDAwLCAweDhGMkMsIDB4OEYyRCwgMHgwMDAwLCAweDhGMkUsIDB4OEYyRiwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OEYzMCwgMHg4RjMxLCAweDhGMzIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEYzMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OEYzNCwgMHgwMDAwLCAweDhGMzUsIDB4MDAwMCwgMHg4RjM2LCAweDAwMDAsIDB4MDAwMCwgMHg4RjM3LCAweDhGMzgsIDB4MDAwMCwgMHg4RjM5LCAweDhGM0EsIDB4OEYzQiwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4RjNDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEYzRCwgMHgwMDAwLCAweDAwMDAsIDB4OEYzRSwgMHgwMDAwLCAweDhGM0YsIDB4OEY0MCwgMHg4RjQxLCAweDhGNDIsIDB4OEY0MywNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjQ0LCAweDAwMDAsIDB4MDAwMCwgMHg4RjQ1LCAweDhGNDYsIDB4OEY0NywgMHgwMDAwLCAweDhGNDgsIDB4OEY0OSwgMHg4RjRBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDhGNEIsIDB4MDAwMCwgMHg4RjRDLCAweDhGNEQsIDB4OEY0RSwgMHg4RjRGLCAweDhGNTAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGNTEsIDB4MDAwMCwgMHg4RjUyLCAweDAwMDAsDQotICAgIDB4OEY1MywgMHg4RjU0LCAweDhGNTUsIDB4MDAwMCwgMHg4RjU2LCAweDhGNTcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEY1OCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGNTksIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGNUEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4OEY1QiwgMHgwMDAwLCAweDAwMDAsIDB4OEY1QywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGNUQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjVFLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjVGLCAweDhGNjAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEY2MSwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjYyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjYzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGNjQsIDB4MDAwMCwgMHg4RjY1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDhGNjYsIDB4MDAwMCwgMHgwMDAwLCAweDhGNjcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEY2OCwgMHgwMDAwLCAweDAwMDAsIDB4OEY2OSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjZBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEY2QiwgMHgwMDAwLCAweDAwMDAsIDB4OEY2QywgMHgwMDAwLCAweDhGNkQsIDB4OEY2RSwgMHgwMDAwLCAweDhGNkYsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OEY3MCwgMHg4RjcxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4RjcyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjczLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg4Rjc0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEY3NSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Rjc2LCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OEY3NywgMHgwMDAwLCAweDhGNzgsIDB4MDAwMCwgMHg4Rjc5LCAweDAwMDAsIDB4OEY3QSwgMHg4RjdCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEY3QywgMHgwMDAwLCAweDhGN0QsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEY3RSwgMHgwMDAwLCAweDhGN0YsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDhGODAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGODEsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGODIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4RjgzLCAweDAwMDAsIDB4OEY4NCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEY4NSwgMHgwMDAwLCAweDhGODYsIDB4OEY4NywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Rjg4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Rjg5LCAweDAwMDAsIDB4MDAwMCwgMHg4RjhBLCAweDAwMDAsIDB4OEY4QiwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGOEMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEY4RCwNCi0gICAgMHgwMDAwLCAweDhGOEUsIDB4OEY4RiwgMHg4RjkwLCAweDAwMDAsIDB4OEY5MSwgMHg4RjkyLCAweDhGOTMsIDB4OEY5NCwgMHgwMDAwLCAweDhGOTUsIDB4MDAwMCwgMHg4Rjk2LCAweDAwMDAsIDB4OEY5NywgMHg4Rjk4LA0KLSAgICAweDhGOTksIDB4OEY5QSwgMHg4RjlCLCAweDhGOUMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEY5RCwgMHg4RjlFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGOUYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4RkEwLCAweDAwMDAsIDB4MDAwMCwgMHg4RkExLCAweDAwMDAsIDB4OEZBMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RkEzLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4RkE0LCAweDAwMDAsIDB4OEZBNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGQTYsIDB4OEZBNywgMHg4RkE4LCAweDAwMDAsIDB4OEZBOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGQUEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGQUIsIDB4OEZBQywgMHg4RkFELCAweDhGQUUsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDhGQUYsIDB4OEZCMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGQjEsIDB4OEZCMiwgMHgwMDAwLCAweDhGQjMsIDB4MDAwMCwgMHgwMDAwLCAweDhGQjQsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OEZCNSwgMHgwMDAwLCAweDAwMDAsIDB4OEZCNiwgMHgwMDAwLCAweDhGQjcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEZCOCwgMHg4RkI5LCAweDAwMDAsIDB4MDAwMCwgMHg4RkJBLA0KLSAgICAweDhGQkIsIDB4OEZCQywgMHgwMDAwLCAweDhGQkQsIDB4OEZCRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RkJGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEZDMCwgMHg4RkMxLCAweDhGQzIsDQotICAgIDB4MDAwMCwgMHg4RkMzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEZDNCwgMHgwMDAwLCAweDhGQzUsIDB4MDAwMCwgMHg4RkM2LCAweDhGQzcsIDB4OEZDOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg4RkM5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGQ0EsIDB4MDAwMCwgMHg4RkNCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RkNDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDhGQ0QsIDB4OEZDRSwgMHgwMDAwLCAweDhGQ0YsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEZEMCwgMHg4RkQxLCAweDhGRDIsIDB4MDAwMCwgMHg4RkQzLCAweDAwMDAsIDB4OEZENCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OEZENSwgMHgwMDAwLCAweDhGRDYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RkQ3LCAweDhGRDgsIDB4OEZEOSwgMHg4RkRBLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGREIsIDB4OEZEQywgMHg4RkRELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGREUsIDB4OEZERiwgMHgwMDAwLCAweDhGRTAsIDB4MDAwMCwgMHg4RkUxLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg4RkUyLCAweDhGRTMsIDB4OEZFNCwgMHgwMDAwLCAweDAwMDAsIDB4OEZFNSwgMHgwMDAwLCAweDhGRTYsIDB4MDAwMCwgMHg4RkU3LCAweDhGRTgsIDB4OEZFOSwgMHgwMDAwLCAweDhGRUEsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDhGRUIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEZFQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OEZFRCwgMHgwMDAwLCAweDhGRUUsIDB4MDAwMCwgMHg4RkVGLCAweDhGRjAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEZGMSwgMHgwMDAwLCAweDhGRjIsIDB4MDAwMCwgMHg4RkYzLCAweDhGRjQsDQotICAgIDB4MDAwMCwgMHg4RkY1LCAweDAwMDAsIDB4OEZGNiwgMHgwMDAwLCAweDhGRjcsIDB4MDAwMCwgMHgwMDAwLCAweDhGRjgsIDB4OEZGOSwgMHgwMDAwLCAweDhGRkEsIDB4OEZGQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OEZGQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGRkQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RkZFLCAweDAwMDAsIDB4OEZGRiwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTAwMCwgMHg5MDAxLCAweDkwMDIsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDkwMDMsIDB4MDAwMCwgMHg5MDA0LCAweDkwMDUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OTAwNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4OTAwNywgMHg5MDA4LCAweDkwMDksIDB4MDAwMCwgMHg5MDBBLCAweDkwMEIsIDB4MDAwMCwgMHgwMDAwLCAweDkwMEMsIDB4OTAwRCwgMHgwMDAwLCAweDkwMEUsIDB4MDAwMCwgMHg5MDBGLCAweDAwMDAsIDB4OTAxMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OTAxMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwMTIsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDkwMTMsIDB4OTAxNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDE1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwMTYsDQotICAgIDB4MDAwMCwgMHg5MDE3LCAweDkwMTgsIDB4MDAwMCwgMHgwMDAwLCAweDkwMTksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDFBLCAweDkwMUIsIDB4OTAxQywNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDFELCAweDAwMDAsIDB4MDAwMCwgMHg5MDFFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTAxRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDIwLCAweDAwMDAsIDB4OTAyMSwgMHg5MDIyLCAweDAwMDAsDQotICAgIDB4OTAyMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTAyNCwgMHg5MDI1LCAweDkwMjYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwMjcsIDB4MDAwMCwNCi0gICAgMHg5MDI4LCAweDkwMjksIDB4OTAyQSwgMHg5MDJCLCAweDkwMkMsIDB4OTAyRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwMkUsIDB4MDAwMCwgMHg5MDJGLCAweDkwMzAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDMxLCAweDAwMDAsIDB4OTAzMiwgMHgwMDAwLCAweDAwMDAsIDB4OTAzMywgMHg5MDM0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwMzUsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDkwMzYsIDB4MDAwMCwgMHg5MDM3LCAweDkwMzgsIDB4OTAzOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDNBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDNCLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTAzQywNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OTAzRCwgMHgwMDAwLCAweDkwM0UsIDB4OTAzRiwgMHg5MDQwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDQxLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDQyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwNDMsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDkwNDQsIDB4MDAwMCwgMHgwMDAwLCAweDkwNDUsIDB4MDAwMCwgMHg5MDQ2LCAweDAwMDAsIDB4OTA0NywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwNDgsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDkwNDksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDRBLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwNEIsIDB4MDAwMCwgMHg5MDRDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA0RCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDRFLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA0RiwgMHgwMDAwLCAweDAwMDAsIDB4OTA1MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg5MDUxLCAweDAwMDAsIDB4OTA1MiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDUzLCAweDkwNTQsIDB4MDAwMCwNCi0gICAgMHg5MDU1LCAweDkwNTYsIDB4OTA1NywgMHg5MDU4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwNTksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA1QSwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwNUIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA1QywgMHg5MDVELCAweDAwMDAsIDB4OTA1RSwgMHg5MDVGLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg5MDYwLCAweDkwNjEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwNjIsIDB4MDAwMCwgMHg5MDYzLCAweDkwNjQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA2NSwgMHg5MDY2LCAweDkwNjcsIDB4OTA2OCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDY5LCAweDAwMDAsIDB4OTA2QSwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHg5MDZCLCAweDkwNkMsIDB4MDAwMCwgMHg5MDZELCAweDAwMDAsIDB4MDAwMCwgMHg5MDZFLCAweDkwNkYsIDB4MDAwMCwgMHg5MDcwLCAweDkwNzEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg5MDcyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwNzMsIDB4MDAwMCwgMHg5MDc0LA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg5MDc1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDc2LCAweDkwNzcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA3OCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDkwNzksIDB4OTA3QSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA3QiwgMHgwMDAwLCAweDAwMDAsIDB4OTA3QywNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDdELCAweDAwMDAsIDB4OTA3RSwgMHgwMDAwLCAweDAwMDAsIDB4OTA3RiwgMHg5MDgwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwODEsIDB4OTA4MiwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OTA4MywgMHg5MDg0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA4NSwgMHgwMDAwLCAweDkwODYsIDB4OTA4NywgMHg5MDg4LCAweDAwMDAsIDB4MDAwMCwgMHg5MDg5LCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDkwOEEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwOEIsIDB4OTA4QywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OTA4RCwgMHgwMDAwLCAweDkwOEUsIDB4MDAwMCwgMHg5MDhGLCAweDkwOTAsIDB4OTA5MSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwOTIsIDB4MDAwMCwgMHg5MDkzLA0KLSAgICAweDkwOTQsIDB4MDAwMCwgMHgwMDAwLCAweDkwOTUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA5NiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA5NywgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDk4LCAweDkwOTksIDB4MDAwMCwgMHg5MDlBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA5QiwgMHgwMDAwLCAweDkwOUMsIDB4MDAwMCwgMHg5MDlELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg5MDlFLCAweDkwOUYsIDB4OTBBMCwgMHgwMDAwLCAweDkwQTEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBBMiwgMHg5MEEzLCAweDAwMDAsIDB4OTBBNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OTBBNSwgMHgwMDAwLCAweDAwMDAsIDB4OTBBNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBBNywgMHgwMDAwLCAweDkwQTgsIDB4OTBBOSwgMHg5MEFBLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwQUIsIDB4MDAwMCwgMHgwMDAwLCAweDkwQUMsIDB4MDAwMCwgMHg5MEFELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwQUUsDQotICAgIDB4OTBBRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEIwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwQjEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBCMiwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OTBCMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OTBCNCwgMHg5MEI1LCAweDkwQjYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwQjcsIDB4OTBCOCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4OTBCOSwgMHg5MEJBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEJCLCAweDAwMDAsIDB4OTBCQywgMHgwMDAwLCAweDAwMDAsIDB4OTBCRCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OTBCRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwQkYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBDMCwgMHgwMDAwLCAweDkwQzEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBDMiwgMHgwMDAwLCAweDAwMDAsIDB4OTBDMywgMHgwMDAwLCAweDkwQzQsIDB4MDAwMCwgMHg5MEM1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDkwQzYsIDB4MDAwMCwgMHgwMDAwLCAweDkwQzcsIDB4OTBDOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEM5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MENBLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg5MENCLCAweDAwMDAsIDB4OTBDQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwQ0QsIDB4OTBDRSwgMHg5MENGLCAweDkwRDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwRDEsDQotICAgIDB4MDAwMCwgMHg5MEQyLCAweDkwRDMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEQ0LCAweDAwMDAsIDB4MDAwMCwgMHg5MEQ1LCAweDkwRDYsIDB4MDAwMCwgMHg5MEQ3LCAweDkwRDgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEQ5LCAweDkwREEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MERCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwREMsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDkwREQsIDB4MDAwMCwgMHg5MERFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwREYsIDB4OTBFMCwgMHg5MEUxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwRTIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEUzLCAweDAwMDAsIDB4MDAwMCwgMHg5MEU0LCAweDAwMDAsIDB4OTBFNSwgMHg5MEU2LCAweDAwMDAsIDB4OTBFNywgMHg5MEU4LCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEU5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBFQSwgMHgwMDAwLCAweDkwRUIsIDB4OTBFQywgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwRUQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEVFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwRUYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEYwLCAweDkwRjEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBGMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEYzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEY0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEY1LCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwRjYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwRjcsIDB4MDAwMCwgMHg5MEY4LCAweDkwRjksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwRkEsIDB4MDAwMCwgMHg5MEZCLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwRkMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBGRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEZFLCAweDkwRkYsIDB4MDAwMCwgMHgwMDAwLCAweDkxMDAsIDB4OTEwMSwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OTEwMiwgMHgwMDAwLCAweDkxMDMsIDB4OTEwNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MTA1LCAweDAwMDAsIDB4MDAwMCwgMHg5MTA2LCAweDAwMDAsIDB4MDAwMCwgMHg5MTA3LA0KLSAgICAweDkxMDgsIDB4OTEwOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkxMEEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTEwQiwgMHgwMDAwLCAweDkxMEMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDkxMEQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MTBFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkxMEYsIDB4OTExMCwgMHgwMDAwLA0KLSAgICAweDkxMTEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTExMiwgMHg5MTEzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkxMTQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDkxMTUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDkxMTYsIDB4OTExNywgMHg5MTE4LCAweDkxMTksIDB4OTExQSwgMHg5MTFCLCAweDkxMUMsIDB4OTExRCwgMHg5MTFFLCAweDkxMUYsIDB4OTEyMCwgMHg5MTIxLCAweDkxMjIsIDB4OTEyMywgMHg5MTI0LCAweDkxMjUsDQotICAgIDB4OTEyNiwgMHg5MTI3LCAweDkxMjgsIDB4OTEyOSwgMHg5MTJBLCAweDkxMkIsIDB4OTEyQywgMHg5MTJELCAweDkxMkUsIDB4OTEyRiwgMHg5MTMwLCAweDkxMzEsIDB4OTEzMiwgMHg5MTMzLCAweDkxMzQsIDB4OTEzNSwNCi0gICAgMHg5MTM2LCAweDkxMzcsIDB4OTEzOCwgMHg5MTM5LCAweDkxM0EsIDB4OTEzQiwgMHg5MTNDLCAweDkxM0QsIDB4OTEzRSwgMHg5MTNGLCAweDkxNDAsIDB4OTE0MSwgMHg5MTQyLCAweDkxNDMsIDB4OTE0NCwgMHg5MTQ1LA0KLSAgICAweDkxNDYsIDB4OTE0NywgMHg5MTQ4LCAweDkxNDksIDB4OTE0QSwgMHg5MTRCLCAweDkxNEMsIDB4OTE0RCwgMHg5MTRFLCAweDkxNEYsIDB4OTE1MCwgMHg5MTUxLCAweDkxNTIsIDB4OTE1MywgMHg5MTU0LCAweDkxNTUsDQotICAgIDB4OTE1NiwgMHg5MTU3LCAweDkxNTgsIDB4OTE1OSwgMHg5MTVBLCAweDkxNUIsIDB4OTE1QywgMHg5MTVELCAweDkxNUUsIDB4OTE1RiwgMHg5MTYwLCAweDkxNjEsIDB4OTE2MiwgMHg5MTYzLCAweDkxNjQsIDB4OTE2NSwNCi0gICAgMHg5MTY2LCAweDkxNjcsIDB4OTE2OCwgMHg5MTY5LCAweDkxNkEsIDB4OTE2QiwgMHg5MTZDLCAweDkxNkQsIDB4OTE2RSwgMHg5MTZGLCAweDkxNzAsIDB4OTE3MSwgMHg5MTcyLCAweDkxNzMsIDB4OTE3NCwgMHg5MTc1LA0KLSAgICAweDkxNzYsIDB4OTE3NywgMHg5MTc4LCAweDkxNzksIDB4OTE3QSwgMHg5MTdCLCAweDkxN0MsIDB4OTE3RCwgMHg5MTdFLCAweDkxN0YsIDB4OTE4MCwgMHg5MTgxLCAweDkxODIsIDB4OTE4MywgMHg5MTg0LCAweDkxODUsDQotICAgIDB4OTE4NiwgMHg5MTg3LCAweDkxODgsIDB4OTE4OSwgMHg5MThBLCAweDkxOEIsIDB4OTE4QywgMHg5MThELCAweDkxOEUsIDB4OTE4RiwgMHg5MTkwLCAweDkxOTEsIDB4OTE5MiwgMHg5MTkzLCAweDkxOTQsIDB4OTE5NSwNCi0gICAgMHg5MTk2LCAweDkxOTcsIDB4OTE5OCwgMHg5MTk5LCAweDkxOUEsIDB4OTE5QiwgMHg5MTlDLCAweDkxOUQsIDB4OTE5RSwgMHg5MTlGLCAweDkxQTAsIDB4OTFBMSwgMHg5MUEyLCAweDkxQTMsIDB4OTFBNCwgMHg5MUE1LA0KLSAgICAweDkxQTYsIDB4OTFBNywgMHg5MUE4LCAweDkxQTksIDB4OTFBQSwgMHg5MUFCLCAweDkxQUMsIDB4OTFBRCwgMHg5MUFFLCAweDkxQUYsIDB4OTFCMCwgMHg5MUIxLCAweDkxQjIsIDB4OTFCMywgMHg5MUI0LCAweDkxQjUsDQotICAgIDB4OTFCNiwgMHg5MUI3LCAweDkxQjgsIDB4OTFCOSwgMHg5MUJBLCAweDkxQkIsIDB4OTFCQywgMHg5MUJELCAweDkxQkUsIDB4OTFCRiwgMHg5MUMwLCAweDkxQzEsIDB4OTFDMiwgMHg5MUMzLCAweDkxQzQsIDB4OTFDNSwNCi0gICAgMHg5MUM2LCAweDkxQzcsIDB4OTFDOCwgMHg5MUM5LCAweDkxQ0EsIDB4OTFDQiwgMHg5MUNDLCAweDkxQ0QsIDB4OTFDRSwgMHg5MUNGLCAweDkxRDAsIDB4OTFEMSwgMHg5MUQyLCAweDkxRDMsIDB4OTFENCwgMHg5MUQ1LA0KLSAgICAweDkxRDYsIDB4OTFENywgMHg5MUQ4LCAweDkxRDksIDB4OTFEQSwgMHg5MURCLCAweDkxREMsIDB4OTFERCwgMHg5MURFLCAweDkxREYsIDB4OTFFMCwgMHg5MUUxLCAweDkxRTIsIDB4OTFFMywgMHg5MUU0LCAweDkxRTUsDQotICAgIDB4OTFFNiwgMHg5MUU3LCAweDkxRTgsIDB4OTFFOSwgMHg5MUVBLCAweDkxRUIsIDB4OTFFQywgMHg5MUVELCAweDkxRUUsIDB4OTFFRiwgMHg5MUYwLCAweDkxRjEsIDB4OTFGMiwgMHg5MUYzLCAweDkxRjQsIDB4OTFGNSwNCi0gICAgMHg5MUY2LCAweDkxRjcsIDB4OTFGOCwgMHg5MUY5LCAweDkxRkEsIDB4OTFGQiwgMHg5MUZDLCAweDkxRkQsIDB4OTFGRSwgMHg5MUZGLCAweDkyMDAsIDB4OTIwMSwgMHg5MjAyLCAweDkyMDMsIDB4OTIwNCwgMHg5MjA1LA0KLSAgICAweDkyMDYsIDB4OTIwNywgMHg5MjA4LCAweDkyMDksIDB4OTIwQSwgMHg5MjBCLCAweDkyMEMsIDB4OTIwRCwgMHg5MjBFLCAweDkyMEYsIDB4OTIxMCwgMHg5MjExLCAweDkyMTIsIDB4OTIxMywgMHg5MjE0LCAweDkyMTUsDQotICAgIDB4OTIxNiwgMHg5MjE3LCAweDkyMTgsIDB4OTIxOSwgMHg5MjFBLCAweDkyMUIsIDB4OTIxQywgMHg5MjFELCAweDkyMUUsIDB4OTIxRiwgMHg5MjIwLCAweDkyMjEsIDB4OTIyMiwgMHg5MjIzLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg5MjI0LCAweDAwMDAsIDB4OTIyNSwgMHgwMDAwLCAweDAwMDAsIDB4OTIyNiwgMHg5MjI3LCAweDkyMjgsIDB4OTIyOSwgMHg5MjJBLCAweDkyMkIsIDB4OTIyQywgMHg5MjJELCAweDkyMkUsIDB4OTIyRiwgMHgwMDAwLA0KLSAgICAweDkyMzAsIDB4MDAwMCwgMHg5MjMxLCAweDAwMDAsIDB4MDAwMCwgMHg5MjMyLCAweDkyMzMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTIzNCwgMHg5MjM1LCAweDkyMzYsIDB4OTIzNywgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4OTIzOCwgMHg5MjM5LCAweDkyM0EsIDB4OTIzQiwgMHg5MjNDLCAweDkyM0QsIDB4OTIzRSwgMHg5MjNGLCAweDkyNDAsIDB4OTI0MSwgMHg5MjQyLCAweDkyNDMsIDB4OTI0NCwgMHg5MjQ1LCAweDkyNDYsIDB4OTI0NywNCi0gICAgMHg5MjQ4LCAweDkyNDksIDB4OTI0QSwgMHg5MjRCLCAweDkyNEMsIDB4OTI0RCwgMHg5MjRFLCAweDkyNEYsIDB4OTI1MCwgMHg5MjUxLCAweDkyNTIsIDB4OTI1MywgMHg5MjU0LCAweDkyNTUsIDB4OTI1NiwgMHg5MjU3LA0KLSAgICAweDkyNTgsIDB4OTI1OSwgMHg5MjVBLCAweDkyNUIsIDB4OTI1QywgMHg5MjVELCAweDkyNUUsIDB4OTI1RiwgMHg5MjYwLCAweDkyNjEsIDB4OTI2MiwgMHg5MjYzLCAweDkyNjQsIDB4OTI2NSwgMHg5MjY2LCAweDkyNjcsDQotICAgIDB4OTI2OCwgMHg5MjY5LCAweDkyNkEsIDB4OTI2QiwgMHg5MjZDLCAweDkyNkQsIDB4OTI2RSwgMHg5MjZGLCAweDkyNzAsIDB4OTI3MSwgMHg5MjcyLCAweDkyNzMsIDB4MDAwMCwgMHg5Mjc0LCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg5Mjc1LCAweDkyNzYsIDB4OTI3NywgMHg5Mjc4LCAweDkyNzksIDB4OTI3QSwgMHg5MjdCLCAweDkyN0MsIDB4OTI3RCwgMHg5MjdFLCAweDkyN0YsIDB4OTI4MCwgMHg5MjgxLCAweDkyODIsIDB4OTI4MywgMHg5Mjg0LA0KLSAgICAweDkyODUsIDB4OTI4NiwgMHg5Mjg3LCAweDkyODgsIDB4OTI4OSwgMHg5MjhBLCAweDkyOEIsIDB4OTI4QywgMHg5MjhELCAweDkyOEUsIDB4OTI4RiwgMHg5MjkwLCAweDkyOTEsIDB4OTI5MiwgMHg5MjkzLCAweDkyOTQsDQotICAgIDB4OTI5NSwgMHg5Mjk2LCAweDkyOTcsIDB4OTI5OCwgMHg5Mjk5LCAweDkyOUEsIDB4OTI5QiwgMHg5MjlDLCAweDkyOUQsIDB4OTI5RSwgMHg5MjlGLCAweDkyQTAsIDB4OTJBMSwgMHg5MkEyLCAweDkyQTMsIDB4OTJBNCwNCi0gICAgMHg5MkE1LCAweDkyQTYsIDB4OTJBNywgMHg5MkE4LCAweDkyQTksIDB4OTJBQSwgMHg5MkFCLCAweDkyQUMsIDB4OTJBRCwgMHg5MkFFLCAweDkyQUYsIDB4OTJCMCwgMHg5MkIxLCAweDkyQjIsIDB4OTJCMywgMHg5MkI0LA0KLSAgICAweDkyQjUsIDB4OTJCNiwgMHg5MkI3LCAweDkyQjgsIDB4OTJCOSwgMHg5MkJBLCAweDkyQkIsIDB4OTJCQywgMHg5MkJELCAweDkyQkUsIDB4OTJCRiwgMHg5MkMwLCAweDkyQzEsIDB4OTJDMiwgMHg5MkMzLCAweDkyQzQsDQotICAgIDB4OTJDNSwgMHg5MkM2LCAweDkyQzcsIDB4OTJDOCwgMHg5MkM5LCAweDkyQ0EsIDB4OTJDQiwgMHg5MkNDLCAweDkyQ0QsIDB4OTJDRSwgMHg5MkNGLCAweDkyRDAsIDB4OTJEMSwgMHg5MkQyLCAweDkyRDMsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4OTJENCwgMHg5MkQ1LCAweDkyRDYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTJENywgMHg5MkQ4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgyM0FDLCAweDIzQUUsIDB4MjNCMCwgMHgzMzEyLCAweDMzMTUsIDB4MjNCMiwgMHgyM0I0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIzQjYsIDB4MjNCOCwgMHgyM0JBLCAweDIzQkMsIDB4MjNCRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjNDMCwgMHgwMDAwLCAweDIzQzIsDQotICAgIDB4OTJEOSwgMHg5MkRBLCAweDkyREIsIDB4OTJEQywgMHg5MkRELCAweDkyREUsIDB4OTJERiwgMHg5MkUwLCAweDkyRTEsIDB4OTJFMiwgMHgyM0M0LCAweDIzQzYsIDB4MjNDOCwgMHgyM0NBLCAweDIzQ0MsIDB4MjNDRSwNCi0gICAgMHgyM0QwLCAweDIzRDIsIDB4MjNENCwgMHgyM0Q2LCAweDIzRDgsIDB4MjNEQSwgMHgyM0RDLCAweDAwMDAsIDB4MjNERSwgMHgyM0UwLCAweDIzRTIsIDB4MjNFNCwgMHgyM0U2LCAweDAwMDAsIDB4MjNFOCwgMHgwMDAwLA0KLSAgICAweDIzRUEsIDB4MjNFQywgMHgwMDAwLCAweDIzRUUsIDB4MjNGMCwgMHgwMDAwLCAweDIzRjIsIDB4MjNGNCwgMHgyM0Y2LCAweDIzRjgsIDB4MjNGQSwgMHgyM0ZDLCAweDIzRkUsIDB4MjQwMCwgMHgyNDAyLCAweDI0MDQsDQotICAgIDB4OTJFMywgMHg5MkU0LCAweDkyRTUsIDB4OTJFNiwgMHg5MkU3LCAweDkyRTgsIDB4OTJFOSwgMHg5MkVBLCAweDkyRUIsIDB4OTJFQywgMHg5MkVELCAweDkyRUUsIDB4OTJFRiwgMHg5MkYwLCAweDkyRjEsIDB4OTJGMiwNCi0gICAgMHg5MkYzLCAweDkyRjQsIDB4OTJGNSwgMHg5MkY2LCAweDkyRjcsIDB4OTJGOCwgMHg5MkY5LCAweDkyRkEsIDB4OTJGQiwgMHg5MkZDLCAweDkyRkQsIDB4OTJGRSwgMHg5MkZGLCAweDkzMDAsIDB4OTMwMSwgMHg5MzAyLA0KLSAgICAweDkzMDMsIDB4OTMwNCwgMHg5MzA1LCAweDkzMDYsIDB4OTMwNywgMHg5MzA4LCAweDkzMDksIDB4OTMwQSwgMHg5MzBCLCAweDkzMEMsIDB4OTMwRCwgMHg5MzBFLCAweDkzMEYsIDB4OTMxMCwgMHg5MzExLCAweDkzMTIsDQotICAgIDB4OTMxMywgMHg5MzE0LCAweDkzMTUsIDB4OTMxNiwgMHg5MzE3LCAweDkzMTgsIDB4OTMxOSwgMHg5MzFBLCAweDkzMUIsIDB4OTMxQywgMHg5MzFELCAweDkzMUUsIDB4OTMxRiwgMHg5MzIwLCAweDkzMjEsIDB4OTMyMiwNCi0gICAgMHg5MzIzLCAweDkzMjQsIDB4OTMyNSwgMHg5MzI2LCAweDkzMjcsIDB4OTMyOCwgMHg5MzI5LCAweDkzMkEsIDB4OTMyQiwgMHg5MzJDLCAweDkzMkQsIDB4OTMyRSwgMHg5MzJGLCAweDkzMzAsIDB4OTMzMSwgMHg5MzMyLA0KLSAgICAweDkzMzMsIDB4OTMzNCwgMHg5MzM1LCAweDkzMzYsIDB4OTMzNywgMHg5MzM4LCAweDkzMzksIDB4OTMzQSwgMHg5MzNCLCAweDkzM0MsIDB4OTMzRCwgMHg5MzNFLCAweDkzM0YsIDB4OTM0MCwgMHg5MzQxLCAweDkzNDIsDQotICAgIDB4OTM0MywgMHg5MzQ0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkzNDUsIDB4OTM0NiwgMHg5MzQ3LCAweDkzNDgsIDB4OTM0OSwgMHg5MzRBLCAweDkzNEIsIDB4OTM0QywgMHg5MzRELCAweDkzNEUsIDB4OTM0RiwgMHg5MzUwLCAweDkzNTEsDQotICAgIDB4OTM1MiwgMHg5MzUzLCAweDkzNTQsIDB4OTM1NSwgMHg5MzU2LCAweDkzNTcsIDB4OTM1OCwgMHg5MzU5LCAweDkzNUEsIDB4OTM1QiwgMHgyNDA2LCAweDI0MDgsIDB4MjQwQSwgMHgyNDBDLCAweDI0MEUsIDB4MjQxMCwNCi0gICAgMHgyNDEyLCAweDI0MTQsIDB4MjQxNiwgMHgyNDE4LCAweDI0MUEsIDB4MjQxQywgMHgyNDFFLCAweDI0MjAsIDB4MjQyMiwgMHgyNDI0LCAweDI0MjYsIDB4MjQyOCwgMHg5MzVDLCAweDkzNUQsIDB4OTM1RSwgMHg5MzVGLA0KLSAgICAweDI0MkEsIDB4MjQyQywgMHgyNDJFLCAweDI0MzAsIDB4MjQzMiwgMHgyNDM0LCAweDI0MzYsIDB4MjQzOCwgMHgyNDNBLCAweDI0M0MsIDB4MjQzRSwgMHgyNDQwLCAweDI0NDIsIDB4MjQ0NCwgMHgyNDQ2LCAweDI0NDgsDQotICAgIDB4MjQ0QSwgMHgyNDRDLCAweDI0NEUsIDB4MjQ1MCwgMHgyNDUyLCAweDI0NTQsIDB4MjQ1NiwgMHgyNDU4LCAweDI0NUEsIDB4MjQ1QywgMHgyNDVFLCAweDI0NjAsIDB4MjQ2MiwgMHgyNDY0LCAweDI0NjYsIDB4MjQ2OCwNCi0gICAgMHgyNDZBLCAweDI0NkMsIDB4MjQ2RSwgMHgyNDcwLCAweDI0NzIsIDB4MjQ3NCwgMHgyNDc2LCAweDI0NzgsIDB4MjQ3QSwgMHgyNDdDLCAweDI0N0UsIDB4MjQ4MCwgMHgyNDgyLCAweDI0ODQsIDB4MjQ4NiwgMHgyNDg4LA0KLSAgICAweDI0OEEsIDB4MjQ4QywgMHgyNDhFLCAweDI0OTAsIDB4MjQ5MiwgMHgyNDk0LCAweDI0OTYsIDB4MjQ5OCwgMHgyNDlBLCAweDI0OUMsIDB4MjQ5RSwgMHgyNEEwLCAweDI0QTIsIDB4MjRBNCwgMHgyNEE2LCAweDI0QTgsDQotICAgIDB4MjRBQSwgMHgyNEFDLCAweDI0QUUsIDB4MjRCMCwgMHgyNEIyLCAweDI0QjQsIDB4MjRCNiwgMHgyNEI4LCAweDI0QkEsIDB4MjRCQywgMHgyNEJFLCAweDI0QzAsIDB4MjRDMiwgMHgyNEM0LCAweDI0QzYsIDB4MjRDOCwNCi0gICAgMHgyNENBLCAweDI0Q0MsIDB4MjRDRSwgMHgyNEQwLCAweDI0RDIsIDB4MjRENCwgMHgyNEQ2LCAweDI0RDgsIDB4MjREQSwgMHgyNERDLCAweDI0REUsIDB4MjRFMCwgMHgyNEUyLCAweDI0RTQsIDB4MjRFNiwgMHgyNEU4LA0KLSAgICAweDI0RUEsIDB4MjRFQywgMHgyNEVFLCAweDI0RjAsIDB4MjRGMiwgMHgyNEY0LCAweDI0RjYsIDB4MjRGOCwgMHgyNEZBLCAweDI0RkMsIDB4MjRGRSwgMHgyNTAwLCAweDI1MDIsIDB4MjUwNCwgMHgyNTA2LCAweDI1MDgsDQotICAgIDB4MjUwQSwgMHgyNTBDLCAweDI1MEUsIDB4MjUxMCwgMHgyNTEyLCAweDI1MTQsIDB4MjUxNiwgMHgyNTE4LCAweDI1MUEsIDB4MjUxQywgMHgyNTFFLCAweDI1MjAsIDB4MjUyMiwgMHgyNTI0LCAweDI1MjYsIDB4MjUyOCwNCi0gICAgMHgyNTJBLCAweDI1MkMsIDB4MjUyRSwgMHgyNTMwLCAweDI1MzIsIDB4MjUzNCwgMHgyNTM2LCAweDI1MzgsIDB4MjUzQSwgMHgyNTNDLCAweDI1M0UsIDB4MjU0MCwgMHgyNTQyLCAweDI1NDQsIDB4MjU0NiwgMHgyNTQ4LA0KLSAgICAweDI1NEEsIDB4MjU0QywgMHgyNTRFLCAweDI1NTAsIDB4MjU1MiwgMHgyNTU0LCAweDI1NTYsIDB4MjU1OCwgMHgyNTVBLCAweDI1NUMsIDB4MjU1RSwgMHgyNTYwLCAweDI1NjIsIDB4MjU2NCwgMHgyNTY2LCAweDI1NjgsDQotICAgIDB4MjU2QSwgMHgyNTZDLCAweDI1NkUsIDB4MjU3MCwgMHgyNTcyLCAweDI1NzQsIDB4MjU3NiwgMHgyNTc4LCAweDI1N0EsIDB4MjU3QywgMHgyNTdFLCAweDI1ODAsIDB4MjU4MiwgMHgyNTg0LCAweDI1ODYsIDB4MjU4OCwNCi0gICAgMHgyNThBLCAweDI1OEMsIDB4MjU4RSwgMHgyNTkwLCAweDI1OTIsIDB4MjU5NCwgMHgyNTk2LCAweDI1OTgsIDB4MjU5QSwgMHgyNTlDLCAweDI1OUUsIDB4MjVBMCwgMHgyNUEyLCAweDI1QTQsIDB4MjVBNiwgMHgyNUE4LA0KLSAgICAweDI1QUEsIDB4MjVBQywgMHgyNUFFLCAweDI1QjAsIDB4MjVCMiwgMHgyNUI0LCAweDI1QjYsIDB4MjVCOCwgMHgyNUJBLCAweDI1QkMsIDB4MjVCRSwgMHgyNUMwLCAweDI1QzIsIDB4MjVDNCwgMHgyNUM2LCAweDI1QzgsDQotICAgIDB4MjVDQSwgMHgyNUNDLCAweDI1Q0UsIDB4MjVEMCwgMHgyNUQyLCAweDI1RDQsIDB4MjVENiwgMHgyNUQ4LCAweDI1REEsIDB4MjVEQywgMHgyNURFLCAweDI1RTAsIDB4MjVFMiwgMHgyNUU0LCAweDI1RTYsIDB4MjVFOCwNCi0gICAgMHgyNUVBLCAweDI1RUMsIDB4MjVFRSwgMHgyNUYwLCAweDI1RjIsIDB4MjVGNCwgMHgyNUY2LCAweDI1RjgsIDB4MjVGQSwgMHgyNUZDLCAweDI1RkUsIDB4MjYwMCwgMHgyNjAyLCAweDI2MDQsIDB4MjYwNiwgMHgyNjA4LA0KLSAgICAweDI2MEEsIDB4MjYwQywgMHgzMzE4LCAweDMzMUIsIDB4MzMxRSwgMHgyNjBFLCAweDI2MTAsIDB4MjYxMiwgMHgyNjE0LCAweDI2MTYsIDB4MjYxOCwgMHgyNjFBLCAweDI2MUMsIDB4MjYxRSwgMHgyNjIwLCAweDI2MjIsDQotICAgIDB4MjYyNCwgMHgyNjI2LCAweDI2MjgsIDB4MjYyQSwgMHgyNjJDLCAweDI2MkUsIDB4MjYzMCwgMHgyNjMyLCAweDI2MzQsIDB4MjYzNiwgMHgyNjM4LCAweDI2M0EsIDB4MjYzQywgMHgyNjNFLCAweDI2NDAsIDB4MjY0MiwNCi0gICAgMHgyNjQ0LCAweDI2NDYsIDB4MjY0OCwgMHgyNjRBLCAweDI2NEMsIDB4MjY0RSwgMHgyNjUwLCAweDI2NTIsIDB4MjY1NCwgMHgyNjU2LCAweDI2NTgsIDB4MjY1QSwgMHgyNjVDLCAweDI2NUUsIDB4MjY2MCwgMHgyNjYyLA0KLSAgICAweDI2NjQsIDB4MjY2NiwgMHgyNjY4LCAweDI2NkEsIDB4MjY2QywgMHgyNjZFLCAweDI2NzAsIDB4MjY3MiwgMHgyNjc0LCAweDI2NzYsIDB4MjY3OCwgMHgyNjdBLCAweDI2N0MsIDB4MjY3RSwgMHgyNjgwLCAweDI2ODIsDQotICAgIDB4MjY4NCwgMHgyNjg2LCAweDI2ODgsIDB4MjY4QSwgMHgyNjhDLCAweDI2OEUsIDB4MjY5MCwgMHgyNjkyLCAweDI2OTQsIDB4MjY5NiwgMHgyNjk4LCAweDI2OUEsIDB4MjY5QywgMHgyNjlFLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDMzMjEsIDB4MzMyNCwgMHgzMzI3LCAweDMzMkEsIDB4MzMyRCwgMHgzMzMwLCAweDMzMzMsIDB4MzMzNiwgMHgzMzM5LCAweDMzM0MsIDB4MzMzRiwgMHgzMzQyLCAweDMzNDUsIDB4MzM0OCwgMHgzMzRCLCAweDMzNEUsDQotICAgIDB4MzM1MSwgMHgzMzU0LCAweDMzNTcsIDB4MzM1QSwgMHgzMzVELCAweDMzNjAsIDB4MzM2MywgMHgzMzY2LCAweDMzNjksIDB4MzM2QywgMHgzMzZGLCAweDMzNzIsIDB4MzM3NSwgMHgzMzc4LCAweDMzN0IsIDB4MzM3RSwNCi0gICAgMHgzMzgxLCAweDMzODQsIDB4MzM4NywgMHgzMzhBLCAweDMzOEQsIDB4MzM5MCwgMHgzMzkzLCAweDMzOTYsIDB4MzM5OSwgMHgzMzlDLCAweDMzOUYsIDB4MzNBMiwgMHgzM0E1LCAweDMzQTgsIDB4MzNBQiwgMHgzM0FFLA0KLSAgICAweDMzQjEsIDB4MzNCNCwgMHgzM0I3LCAweDMzQkEsIDB4MzNCRCwgMHgzM0MwLCAweDMzQzMsIDB4MzNDNiwgMHgzM0M5LCAweDMzQ0MsIDB4MzNDRiwgMHgzM0QyLCAweDMzRDUsIDB4MzNEOCwgMHgzM0RCLCAweDMzREUsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDMzRTEsIDB4MzNFNCwgMHgzM0U3LCAweDMzRUEsIDB4MzNFRCwgMHgzM0YwLCAweDMzRjMsIDB4MzNGNiwgMHgzM0Y5LCAweDMzRkMsIDB4MzNGRiwgMHgzNDAyLCAweDM0MDUsIDB4MzQwOCwNCi0gICAgMHgzNDBCLCAweDM0MEUsIDB4MzQxMSwgMHgzNDE0LCAweDM0MTcsIDB4MzQxQSwgMHgzNDFELCAweDM0MjAsIDB4MzQyMywgMHgzNDI2LCAweDM0MjksIDB4MzQyQywgMHgzNDJGLCAweDM0MzIsIDB4MzQzNSwgMHgzNDM4LA0KLSAgICAweDM0M0IsIDB4MzQzRSwgMHgzNDQxLCAweDM0NDQsIDB4MzQ0NywgMHgzNDRBLCAweDM0NEQsIDB4MzQ1MCwgMHgzNDUzLCAweDM0NTYsIDB4MzQ1OSwgMHgzNDVDLCAweDM0NUYsIDB4MzQ2MiwgMHgzNDY1LCAweDM0NjgsDQotICAgIDB4MzQ2QiwgMHgzNDZFLCAweDM0NzEsIDB4MzQ3NCwgMHgzNDc3LCAweDM0N0EsIDB4MzQ3RCwgMHgzNDgwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MzQ4MywgMHgzNDg2LCAweDQxQTQsIDB4NDFBOSwgMHg0MUFFLCAweDQxQjMsIDB4NDFCOCwgMHg0MUJELCAweDQxQzIsIDB4MzQ4OSwgMHg0MUM3LCAweDQxREEsIDB4NDFFMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDkzNjAsIDB4OTM2MSwgMHg5MzYyLCAweDkzNjMsIDB4OTM2NCwgMHg5MzY1LCAweDkzNjYsIDB4OTM2NywgMHg5MzY4LCAweDkzNjksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg5MzZBLCAweDkzNkIsIDB4OTM2QywgMHg5MzZELCAweDkzNkUsIDB4OTM2RiwgMHg5MzcwLCAweDkzNzEsIDB4OTM3MiwgMHg5MzczLCAweDkzNzQsIDB4OTM3NSwgMHg5Mzc2LCAweDkzNzcsIDB4OTM3OCwgMHg5Mzc5LA0KLSAgICAweDkzN0EsIDB4OTM3QiwgMHg5MzdDLCAweDkzN0QsIDB4OTM3RSwgMHgwMDAwLCAweDAwMDAsIDB4OTM3RiwgMHg5MzgwLCAweDkzODEsIDB4OTM4MiwgMHg5MzgzLCAweDkzODQsIDB4OTM4NSwgMHg5Mzg2LCAweDkzODcsDQotICAgIDB4OTM4OCwgMHg5Mzg5LCAweDkzOEEsIDB4MDAwMCwgMHg5MzhCLCAweDkzOEMsIDB4OTM4RCwgMHg5MzhFLCAweDkzOEYsIDB4OTM5MCwgMHg5MzkxLCAweDkzOTIsIDB4OTM5MywgMHg5Mzk0LCAweDkzOTUsIDB4OTM5NiwNCi0gICAgMHg5Mzk3LCAweDkzOTgsIDB4OTM5OSwgMHg5MzlBLCAweDkzOUIsIDB4OTM5QywgMHg5MzlELCAweDAwMDAsIDB4OTM5RSwgMHg5MzlGLCAweDkzQTAsIDB4OTNBMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDkzQTIsIDB4MjZBMCwgMHg5M0EzLCAweDAwMDAsIDB4OTNBNCwgMHgwMDAwLCAweDkzQTUsIDB4MjZBMiwgMHg5M0E2LCAweDI2QTQsIDB4OTNBNywgMHgyNkE2LCAweDkzQTgsIDB4MjZBOCwgMHg5M0E5LCAweDI2QUEsDQotICAgIDB4OTNBQSwgMHg5M0FCLCAweDkzQUMsIDB4OTNBRCwgMHg5M0FFLCAweDkzQUYsIDB4OTNCMCwgMHg5M0IxLCAweDkzQjIsIDB4OTNCMywgMHg5M0I0LCAweDkzQjUsIDB4OTNCNiwgMHg5M0I3LCAweDkzQjgsIDB4OTNCOSwNCi0gICAgMHg5M0JBLCAweDkzQkIsIDB4OTNCQywgMHg5M0JELCAweDkzQkUsIDB4OTNCRiwgMHg5M0MwLCAweDkzQzEsIDB4OTNDMiwgMHg5M0MzLCAweDkzQzQsIDB4OTNDNSwgMHg5M0M2LCAweDkzQzcsIDB4OTNDOCwgMHg5M0M5LA0KLSAgICAweDkzQ0EsIDB4OTNDQiwgMHg5M0NDLCAweDkzQ0QsIDB4OTNDRSwgMHg5M0NGLCAweDkzRDAsIDB4OTNEMSwgMHg5M0QyLCAweDkzRDMsIDB4OTNENCwgMHg5M0Q1LCAweDkzRDYsIDB4OTNENywgMHg5M0Q4LCAweDkzRDksDQotICAgIDB4OTNEQSwgMHg5M0RCLCAweDkzREMsIDB4OTNERCwgMHg5M0RFLCAweDkzREYsIDB4OTNFMCwgMHg5M0UxLCAweDkzRTIsIDB4OTNFMywgMHg5M0U0LCAweDkzRTUsIDB4OTNFNiwgMHg5M0U3LCAweDkzRTgsIDB4OTNFOSwNCi0gICAgMHg5M0VBLCAweDkzRUIsIDB4OTNFQywgMHg5M0VELCAweDkzRUUsIDB4OTNFRiwgMHg5M0YwLCAweDkzRjEsIDB4OTNGMiwgMHg5M0YzLCAweDkzRjQsIDB4OTNGNSwgMHg5M0Y2LCAweDkzRjcsIDB4OTNGOCwgMHg5M0Y5LA0KLSAgICAweDkzRkEsIDB4OTNGQiwgMHg5M0ZDLCAweDkzRkQsIDB4OTNGRSwgMHg5M0ZGLCAweDk0MDAsIDB4OTQwMSwgMHg5NDAyLCAweDk0MDMsIDB4OTQwNCwgMHg5NDA1LCAweDk0MDYsIDB4OTQwNywgMHg5NDA4LCAweDk0MDksDQotICAgIDB4OTQwQSwgMHg5NDBCLCAweDk0MEMsIDB4OTQwRCwgMHg5NDBFLCAweDk0MEYsIDB4OTQxMCwgMHg5NDExLCAweDk0MTIsIDB4OTQxMywgMHg5NDE0LCAweDk0MTUsIDB4OTQxNiwgMHg5NDE3LCAweDk0MTgsIDB4OTQxOSwNCi0gICAgMHg5NDFBLCAweDk0MUIsIDB4OTQxQywgMHg5NDFELCAweDk0MUUsIDB4MjZBQywgMHgyNkFFLCAweDI2QjAsIDB4MjZCMiwgMHgyNkI0LCAweDI2QjYsIDB4MjZCOCwgMHgyNkJBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4OTQxRiwgMHg5NDIwLCAweDk0MjEsIDB4OTQyMiwgMHg5NDIzLCAweDk0MjQsIDB4OTQyNSwgMHg5NDI2LCAweDk0MjcsIDB4OTQyOCwgMHg5NDI5LCAweDk0MkEsIDB4OTQyQiwgMHg5NDJDLCAweDk0MkQsDQotICAgIDB4OTQyRSwgMHg5NDJGLCAweDk0MzAsIDB4OTQzMSwgMHg5NDMyLCAweDk0MzMsIDB4OTQzNCwgMHg5NDM1LCAweDk0MzYsIDB4OTQzNywgMHg5NDM4LCAweDk0MzksIDB4OTQzQSwgMHg5NDNCLCAweDk0M0MsIDB4OTQzRCwNCi0gICAgMHg5NDNFLCAweDk0M0YsIDB4OTQ0MCwgMHg5NDQxLCAweDk0NDIsIDB4OTQ0MywgMHg5NDQ0LCAweDk0NDUsIDB4OTQ0NiwgMHg5NDQ3LCAweDk0NDgsIDB4OTQ0OSwgMHg5NDRBLCAweDk0NEIsIDB4OTQ0QywgMHg5NDRELA0KLSAgICAweDk0NEUsIDB4OTQ0RiwgMHg5NDUwLCAweDk0NTEsIDB4OTQ1MiwgMHg5NDUzLCAweDk0NTQsIDB4OTQ1NSwgMHg5NDU2LCAweDk0NTcsIDB4OTQ1OCwgMHg5NDU5LCAweDk0NUEsIDB4OTQ1QiwgMHg5NDVDLCAweDk0NUQsDQotICAgIDB4OTQ1RSwgMHg5NDVGLCAweDk0NjAsIDB4OTQ2MSwgMHg5NDYyLCAweDk0NjMsIDB4OTQ2NCwgMHg5NDY1LCAweDk0NjYsIDB4OTQ2NywgMHg5NDY4LCAweDk0NjksIDB4OTQ2QSwgMHg5NDZCLCAweDk0NkMsIDB4OTQ2RCwNCi0gICAgMHg5NDZFLCAweDk0NkYsIDB4OTQ3MCwgMHg5NDcxLCAweDk0NzIsIDB4OTQ3MywgMHg5NDc0LCAweDk0NzUsIDB4OTQ3NiwgMHg5NDc3LCAweDk0NzgsIDB4OTQ3OSwgMHg5NDdBLCAweDk0N0IsIDB4OTQ3QywgMHg5NDdELA0KLSAgICAweDk0N0UsIDB4OTQ3RiwgMHg5NDgwLCAweDk0ODEsIDB4OTQ4MiwgMHg5NDgzLCAweDk0ODQsIDB4OTQ4NSwgMHg5NDg2LCAweDk0ODcsIDB4OTQ4OCwgMHg5NDg5LCAweDk0OEEsIDB4OTQ4QiwgMHg5NDhDLCAweDk0OEQsDQotICAgIDB4OTQ4RSwgMHg5NDhGLCAweDk0OTAsIDB4OTQ5MSwgMHg5NDkyLCAweDk0OTMsIDB4OTQ5NCwgMHg5NDk1LCAweDk0OTYsIDB4OTQ5NywgMHg5NDk4LCAweDk0OTksIDB4OTQ5QSwgMHg5NDlCLCAweDk0OUMsIDB4OTQ5RCwNCi0gICAgMHg5NDlFLCAweDk0OUYsIDB4OTRBMCwgMHg5NEExLCAweDk0QTIsIDB4OTRBMywgMHg5NEE0LCAweDk0QTUsIDB4OTRBNiwgMHg5NEE3LCAweDk0QTgsIDB4OTRBOSwgMHg5NEFBLCAweDk0QUIsIDB4OTRBQywgMHg5NEFELA0KLSAgICAweDk0QUUsIDB4OTRBRiwgMHg5NEIwLCAweDk0QjEsIDB4OTRCMiwgMHg5NEIzLCAweDk0QjQsIDB4OTRCNSwgMHg5NEI2LCAweDk0QjcsIDB4OTRCOCwgMHg5NEI5LCAweDk0QkEsIDB4OTRCQiwgMHg5NEJDLCAweDk0QkQsDQotICAgIDB4OTRCRSwgMHg5NEJGLCAweDk0QzAsIDB4OTRDMSwgMHg5NEMyLCAweDk0QzMsIDB4OTRDNCwgMHg5NEM1LCAweDk0QzYsIDB4OTRDNywgMHg5NEM4LCAweDk0QzksIDB4OTRDQSwgMHg5NENCLCAweDk0Q0MsIDB4OTRDRCwNCi0gICAgMHg5NENFLCAweDk0Q0YsIDB4OTREMCwgMHg5NEQxLCAweDk0RDIsIDB4OTREMywgMHg5NEQ0LCAweDk0RDUsIDB4OTRENiwgMHg5NEQ3LCAweDk0RDgsIDB4OTREOSwgMHg5NERBLCAweDk0REIsIDB4OTREQywgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHg5NERELCAweDk0REUsIDB4OTRERiwgMHg5NEUwLCAweDk0RTEsIDB4OTRFMiwgMHgwMDAwLCAweDAwMDAsIDB4OTRFMywgMHg5NEU0LCAweDk0RTUsIDB4OTRFNiwgMHg5NEU3LCAweDk0RTgsDQotICAgIDB4MDAwMCwgMHgwMDAwLCAweDk0RTksIDB4OTRFQSwgMHg5NEVCLCAweDk0RUMsIDB4OTRFRCwgMHg5NEVFLCAweDAwMDAsIDB4MDAwMCwgMHg5NEVGLCAweDk0RjAsIDB4OTRGMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwNCi0gICAgMHg5NEYyLCAweDk0RjMsIDB4OTRGNCwgMHg5NEY1LCAweDk0RjYsIDB4OTRGNywgMHg5NEY4LCAweDAwMDAsIDB4OTRGOSwgMHg5NEZBLCAweDk0RkIsIDB4OTRGQywgMHg5NEZELCAweDk0RkUsIDB4OTRGRiwgMHgwMDAwLA0KLSAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDANCi19Ow0KLWV4dGVybiBjb25zdCBGWF9XQ0hBUiBnX1VuaWNvZGVEYXRhX05vcm1hbGl6YXRpb25fTWFwMVs1Mzc2XSA9IHsNCi0gICAgMHgwMDY2LCAweDAwNTMsIDB4MDA1MywgMHgwMDU5LCAweDAwMjAsIDB4MDMwOCwgMHgwMDYxLCAweDAwNTIsIDB4MDMwNCwgMHgwMDMyLCAweDAwMzMsIDB4MDMwMSwgMHgwM0JDLCAweDAzMjcsIDB4MDAzMSwgMHgwMDZGLA0KLSAgICAweDAwNDEsIDB4MDA0MSwgMHgwMDQxLCAweDAwNDEsIDB4MDA0MSwgMHgwMDQxLCAweDAwNDMsIDB4MDA0NSwgMHgwMDQ1LCAweDAwNDUsIDB4MDA0NSwgMHgwMDQ5LCAweDAwNDksIDB4MDA0OSwgMHgwMDQ5LCAweDAwNDQsDQotICAgIDB4MDA0RSwgMHgwMDRGLCAweDAwNEYsIDB4MDA0RiwgMHgwMDRGLCAweDAwNEYsIDB4MDA0RiwgMHgwMDU1LCAweDAwNTUsIDB4MDA1NSwgMHgwMDU1LCAweDAwNTksIDB4MDA2MSwgMHgwMDYxLCAweDAwNjEsIDB4MDA2MSwNCi0gICAgMHgwMDYxLCAweDAwNjEsIDB4MDA2MywgMHgwMDY1LCAweDAwNjUsIDB4MDA2NSwgMHgwMDY1LCAweDAwNjksIDB4MDA2OSwgMHgwMDY5LCAweDAwNjksIDB4MDA2RSwgMHgwMDZGLCAweDAwNkYsIDB4MDA2RiwgMHgwMDZGLA0KLSAgICAweDAwNkYsIDB4MDA2RiwgMHgwMDc1LCAweDAwNzUsIDB4MDA3NSwgMHgwMDc1LCAweDAwNzksIDB4MDA3OSwgMHgwMDQxLCAweDAwNjEsIDB4MDA0MSwgMHgwMDYxLCAweDAwNDEsIDB4MDA2MSwgMHgwMDQzLCAweDAwNjMsDQotICAgIDB4MDA0MywgMHgwMDYzLCAweDAwNDMsIDB4MDA2MywgMHgwMDQzLCAweDAwNjMsIDB4MDA0NCwgMHgwMDY0LCAweDAwNDQsIDB4MDA2NCwgMHgwMDQ1LCAweDAwNjUsIDB4MDA0NSwgMHgwMDY1LCAweDAwNDUsIDB4MDA2NSwNCi0gICAgMHgwMDQ1LCAweDAwNjUsIDB4MDA0NSwgMHgwMDY1LCAweDAwNDcsIDB4MDA2NywgMHgwMDQ3LCAweDAwNjcsIDB4MDA0NywgMHgwMDY3LCAweDAwNDcsIDB4MDA2NywgMHgwMDQ4LCAweDAwNjgsIDB4MDA0OCwgMHgwMDY4LA0KLSAgICAweDAwNDksIDB4MDA2OSwgMHgwMDQ5LCAweDAwNjksIDB4MDA0OSwgMHgwMDY5LCAweDAwNDksIDB4MDA2OSwgMHgwMDQ5LCAweDAwNEEsIDB4MDA2QSwgMHgwMDRCLCAweDAwNkIsIDB4MDA0QiwgMHgwMDRDLCAweDAwNkMsDQotICAgIDB4MDA0QywgMHgwMDZDLCAweDAwNEMsIDB4MDA2QywgMHgwMDRDLCAweDAwNkMsIDB4MDA0QywgMHgwMDZDLCAweDAwNEUsIDB4MDA2RSwgMHgwMDRFLCAweDAwNkUsIDB4MDA0RSwgMHgwMDZFLCAweDAwNkUsIDB4MDA0RiwNCi0gICAgMHgwMDZGLCAweDAwNEYsIDB4MDA2RiwgMHgwMDRGLCAweDAwNkYsIDB4MDA1MiwgMHgwMDcyLCAweDAwNTIsIDB4MDA3MiwgMHgwMDUyLCAweDAwNzIsIDB4MDA1MywgMHgwMDczLCAweDAwNTMsIDB4MDA3MywgMHgwMDUzLA0KLSAgICAweDAwNzMsIDB4MDA1MywgMHgwMDczLCAweDAwNTQsIDB4MDA3NCwgMHgwMDU0LCAweDAwNzQsIDB4MDA1NCwgMHgwMDc0LCAweDAwNTUsIDB4MDA3NSwgMHgwMDU1LCAweDAwNzUsIDB4MDA1NSwgMHgwMDc1LCAweDAwNTUsDQotICAgIDB4MDA3NSwgMHgwMDU1LCAweDAwNzUsIDB4MDA1NSwgMHgwMDc1LCAweDAwNTcsIDB4MDA3NywgMHgwMDU5LCAweDAwNzksIDB4MDA1OSwgMHgwMDVBLCAweDAwN0EsIDB4MDA1QSwgMHgwMDdBLCAweDAwNUEsIDB4MDA3QSwNCi0gICAgMHgwMDczLCAweDAwNjIsIDB4MDA0MiwgMHgwMDQyLCAweDAwNjIsIDB4MDA0MywgMHgwMDYzLCAweDAwNDQsIDB4MDA0NCwgMHgwMDQ0LCAweDAwNjQsIDB4MDA0NSwgMHgwMDQ1LCAweDAwNDYsIDB4MDA2NiwgMHgwMDQ3LA0KLSAgICAweDAwNDksIDB4MDA0QiwgMHgwMDZCLCAweDAwNkMsIDB4MDA0RCwgMHgwMDRFLCAweDAwNkUsIDB4MDA0RiwgMHgwMDRGLCAweDAwNkYsIDB4MDA1MCwgMHgwMDcwLCAweDAyODMsIDB4MDA3NCwgMHgwMDU0LCAweDAwNzQsDQotICAgIDB4MDA1NCwgMHgwMDU1LCAweDAwNzUsIDB4MDA1NiwgMHgwMDU5LCAweDAwNzksIDB4MDA1QSwgMHgwMDdBLCAweDAxQjcsIDB4MDA0MSwgMHgwMDYxLCAweDAwNDksIDB4MDA2OSwgMHgwMDRGLCAweDAwNkYsIDB4MDA1NSwNCi0gICAgMHgwMDc1LCAweDAwREMsIDB4MDBGQywgMHgwMERDLCAweDAwRkMsIDB4MDBEQywgMHgwMEZDLCAweDAwREMsIDB4MDBGQywgMHgwMDY1LCAweDAwNDEsIDB4MDA2MSwgMHgwMDQxLCAweDAwNjEsIDB4MDBDNiwgMHgwMEU2LA0KLSAgICAweDAwNDcsIDB4MDA2NywgMHgwMDQ3LCAweDAwNjcsIDB4MDA0QiwgMHgwMDZCLCAweDAwNEYsIDB4MDA2RiwgMHgwMUVBLCAweDAxRUIsIDB4MDFCNywgMHgwMjkyLCAweDAwNkEsIDB4MDA0NywgMHgwMDY3LCAweDAwNEUsDQotICAgIDB4MDA2RSwgMHgwMDQxLCAweDAwNjEsIDB4MDBDNiwgMHgwMEU2LCAweDAwRDgsIDB4MDBGOCwgMHgwMDQxLCAweDAwNjEsIDB4MDA0MSwgMHgwMDYxLCAweDAwNDUsIDB4MDA2NSwgMHgwMDQ1LCAweDAwNjUsIDB4MDA0OSwNCi0gICAgMHgwMDY5LCAweDAwNDksIDB4MDA2OSwgMHgwMDRGLCAweDAwNkYsIDB4MDA0RiwgMHgwMDZGLCAweDAwNTIsIDB4MDA3MiwgMHgwMDUyLCAweDAwNzIsIDB4MDA1NSwgMHgwMDc1LCAweDAwNTUsIDB4MDA3NSwgMHgwMDUzLA0KLSAgICAweDAwNzMsIDB4MDA1NCwgMHgwMDc0LCAweDAwNDgsIDB4MDA2OCwgMHgwMDRFLCAweDAwNjQsIDB4MDA1QSwgMHgwMDdBLCAweDAwNDEsIDB4MDA2MSwgMHgwMDQ1LCAweDAwNjUsIDB4MDBENiwgMHgwMEY2LCAweDAwRDUsDQotICAgIDB4MDBGNSwgMHgwMDRGLCAweDAwNkYsIDB4MDIyRSwgMHgwMjJGLCAweDAwNTksIDB4MDA3OSwgMHgwMDZDLCAweDAwNkUsIDB4MDA3NCwgMHgwMDZBLCAweDAwNDEsIDB4MDA0MywgMHgwMDYzLCAweDAwNEMsIDB4MDA1NCwNCi0gICAgMHgwMDUzLCAweDAwNUEsIDB4MDA0MiwgMHgwMDU1LCAweDAwNTYsIDB4MDA0NSwgMHgwMDY1LCAweDAwNEEsIDB4MDA2QSwgMHgwMDUxLCAweDAwNzEsIDB4MDA1MiwgMHgwMDcyLCAweDAwNTksIDB4MDA3OSwgMHgwMDYxLA0KLSAgICAweDAyNTEsIDB4MDA2MiwgMHgwMDZGLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY0LCAweDAwNjUsIDB4MDI1OSwgMHgwMDY1LCAweDAwNjUsIDB4MDA2NSwgMHgwMDY1LCAweDAwNkEsIDB4MDA2NywgMHgwMDY3LCAweDAwNDcsDQotICAgIDB4MDA2OCwgMHgwMDY4LCAweDAwNjksIDB4MDA0OSwgMHgwMDZDLCAweDAwNkMsIDB4MDA2QywgMHgwMDZELCAweDAwNkQsIDB4MDA2RCwgMHgwMDZFLCAweDAwNkUsIDB4MDA2RSwgMHgwMDZGLCAweDAwNzIsIDB4MDA3MiwNCi0gICAgMHgwMDcyLCAweDAwNzIsIDB4MDA3MiwgMHgwMDcyLCAweDAwNzIsIDB4MDA1MiwgMHgwMDUyLCAweDAwNzMsIDB4MDA2QSwgMHgwMjgzLCAweDAyODMsIDB4MDA3NCwgMHgwMDc0LCAweDAwNTUsIDB4MDA3NiwgMHgwMDc2LA0KLSAgICAweDAwNzcsIDB4MDA3OSwgMHgwMDU5LCAweDAwN0EsIDB4MDA3QSwgMHgwMjkyLCAweDAwNDMsIDB4MDA0MiwgMHgwMDY1LCAweDAwNDcsIDB4MDA0OCwgMHgwMDZBLCAweDAwNkIsIDB4MDA0QywgMHgwMDcxLCAweDAwNjgsDQotICAgIDB4MDA2OCwgMHgwMDY4LCAweDAwNjgsIDB4MDA2QSwgMHgwMDcyLCAweDAyNzksIDB4MDI3QiwgMHgwMjgxLCAweDAwNzcsIDB4MDA3OSwgMHgwMjYzLCAweDAwNkMsIDB4MDA3MywgMHgwMDc4LCAweDAyOTUsIDB4MDMwMCwNCi0gICAgMHgwMzAxLCAweDAzMTMsIDB4MDMwOCwgMHgwMDYxLCAweDAwNjUsIDB4MDA2OSwgMHgwMDZGLCAweDAwNzUsIDB4MDA2MywgMHgwMDY0LCAweDAwNjgsIDB4MDA2RCwgMHgwMDcyLCAweDAwNzQsIDB4MDA3NiwgMHgwMDc4LA0KLSAgICAweDAyQjksIDB4MDAzQiwgMHgwMDIwLCAweDAwQTgsIDB4MDM5MSwgMHgwMEI3LCAweDAzOTUsIDB4MDM5NywgMHgwMzk5LCAweDAzOUYsIDB4MDNBNSwgMHgwM0E5LCAweDAzQ0EsIDB4MDM5OSwgMHgwM0E1LCAweDAzQjEsDQotICAgIDB4MDNCNSwgMHgwM0I3LCAweDAzQjksIDB4MDNDQiwgMHgwM0I5LCAweDAzQzUsIDB4MDNCRiwgMHgwM0M1LCAweDAzQzksIDB4MDNCMiwgMHgwM0I4LCAweDAzQTUsIDB4MDNEMiwgMHgwM0QyLCAweDAzQzYsIDB4MDNDMCwNCi0gICAgMHgwM0JBLCAweDAzQzEsIDB4MDNDMiwgMHgwMzk4LCAweDAzQjUsIDB4MDNBMywgMHgwNDE1LCAweDA0MTUsIDB4MDQxMywgMHgwNDA2LCAweDA0MUEsIDB4MDQxOCwgMHgwNDIzLCAweDA0MTgsIDB4MDQzOCwgMHgwNDM1LA0KLSAgICAweDA0MzUsIDB4MDQzMywgMHgwNDU2LCAweDA0M0EsIDB4MDQzOCwgMHgwNDQzLCAweDA0NjYsIDB4MDQ2NywgMHgwNDZBLCAweDA0NkIsIDB4MDQ3NCwgMHgwNDc1LCAweDA0NjAsIDB4MDQ2MSwgMHgwNDE5LCAweDA0MzksDQotICAgIDB4MDQyMCwgMHgwNDQwLCAweDA0MTMsIDB4MDQzMywgMHgwNDEzLCAweDA0MzMsIDB4MDQxMywgMHgwNDMzLCAweDA0MTYsIDB4MDQzNiwgMHgwNDE3LCAweDA0MzcsIDB4MDQxQSwgMHgwNDNBLCAweDA0MUEsIDB4MDQzQSwNCi0gICAgMHgwNDFBLCAweDA0M0EsIDB4MDQxQSwgMHgwNDNBLCAweDA0MUQsIDB4MDQzRCwgMHgwNDFGLCAweDA0M0YsIDB4MDQyMSwgMHgwNDQxLCAweDA0MjIsIDB4MDQ0MiwgMHgwNEFFLCAweDA0QUYsIDB4MDQyNSwgMHgwNDQ1LA0KLSAgICAweDA0MjcsIDB4MDQ0NywgMHgwNDI3LCAweDA0NDcsIDB4MDQxNiwgMHgwNDM2LCAweDA0QkMsIDB4MDRCRCwgMHgwNDE2LCAweDA0MzYsIDB4MDQxQSwgMHgwNDNBLCAweDA0MUIsIDB4MDQzQiwgMHgwNDFELCAweDA0M0QsDQotICAgIDB4MDQxRCwgMHgwNDNELCAweDA0MUMsIDB4MDQzQywgMHgwNDEwLCAweDA0MzAsIDB4MDQxMCwgMHgwNDMwLCAweDA0MTUsIDB4MDQzNSwgMHgwNEQ4LCAweDA0RDksIDB4MDQxNiwgMHgwNDM2LCAweDA0MTcsIDB4MDQzNywNCi0gICAgMHgwNDE4LCAweDA0MzgsIDB4MDQxOCwgMHgwNDM4LCAweDA0MUUsIDB4MDQzRSwgMHgwNEU4LCAweDA0RTksIDB4MDQyRCwgMHgwNDRELCAweDA0MjMsIDB4MDQ0MywgMHgwNDIzLCAweDA0NDMsIDB4MDQyMywgMHgwNDQzLA0KLSAgICAweDA0MjcsIDB4MDQ0NywgMHgwNDEzLCAweDA0MzMsIDB4MDQyQiwgMHgwNDRCLCAweDA0MTMsIDB4MDQzMywgMHgwNDI1LCAweDA0NDUsIDB4MDQyNSwgMHgwNDQ1LCAweDA0MTcsIDB4MDQzNywgMHgwNDFCLCAweDA0M0IsDQotICAgIDB4MEYwQiwgMHgxMERDLCAweDAwNDEsIDB4MDBDNiwgMHgwMDQyLCAweDAwNDIsIDB4MDA0NCwgMHgwMDQ1LCAweDAxOEUsIDB4MDA0NywgMHgwMDQ4LCAweDAwNDksIDB4MDA0QSwgMHgwMDRCLCAweDAwNEMsIDB4MDA0RCwNCi0gICAgMHgwMDRFLCAweDAwNEYsIDB4MDIyMiwgMHgwMDUwLCAweDAwNTIsIDB4MDA1NCwgMHgwMDU1LCAweDAwNTcsIDB4MDA2MSwgMHgwMjUwLCAweDAyNTEsIDB4MUQwMiwgMHgwMDYyLCAweDAwNjQsIDB4MDA2NSwgMHgwMjU5LA0KLSAgICAweDAyNUIsIDB4MDI1QywgMHgwMDY3LCAweDAwNkIsIDB4MDA2RCwgMHgwMTRCLCAweDAwNkYsIDB4MDI1NCwgMHgxRDE2LCAweDFEMTcsIDB4MDA3MCwgMHgwMDc0LCAweDAwNzUsIDB4MUQxRCwgMHgwMjZGLCAweDAwNzYsDQotICAgIDB4MUQyNSwgMHgwM0IyLCAweDAzQjMsIDB4MDNCNCwgMHgwM0M2LCAweDAzQzcsIDB4MDA2OSwgMHgwMDcyLCAweDAwNzUsIDB4MDA3NiwgMHgwM0IyLCAweDAzQjMsIDB4MDNDMSwgMHgwM0M2LCAweDAzQzcsIDB4MDA2MiwNCi0gICAgMHgwMDY0LCAweDAwNjYsIDB4MDA2RCwgMHgwMDZFLCAweDAwNzAsIDB4MDA3MiwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDdBLCAweDAwNjcsIDB4MDQzRCwgMHgwMDRDLCAweDAwNzAsIDB4MDA1NSwgMHgwMjhBLA0KLSAgICAweDAwNjIsIDB4MDA2NCwgMHgwMDY2LCAweDAwNjcsIDB4MDA2QiwgMHgwMDZDLCAweDAwNkQsIDB4MDA2RSwgMHgwMDcwLCAweDAwNzIsIDB4MDA3MywgMHgwMjgzLCAweDAwNzYsIDB4MDA3OCwgMHgwMDdBLCAweDAwNjEsDQotICAgIDB4MDI1MSwgMHgwMDY0LCAweDAwNjUsIDB4MDA2NSwgMHgwMDY1LCAweDAwNjUsIDB4MDA2OSwgMHgwMjgzLCAweDAyNTIsIDB4MDA2MywgMHgwMjU1LCAweDAwRjAsIDB4MDI1QywgMHgwMDY2LCAweDAyNUYsIDB4MDI2MSwNCi0gICAgMHgwMjY1LCAweDAyNjgsIDB4MDI2OSwgMHgwMjZBLCAweDFEN0IsIDB4MDI5RCwgMHgwMjZELCAweDFEODUsIDB4MDI5RiwgMHgwMjcxLCAweDAyNzAsIDB4MDI3MiwgMHgwMjczLCAweDAyNzQsIDB4MDI3NSwgMHgwMjc4LA0KLSAgICAweDAyODIsIDB4MDI4MywgMHgwMUFCLCAweDAyODksIDB4MDI4QSwgMHgxRDFDLCAweDAyOEIsIDB4MDI4QywgMHgwMDdBLCAweDAyOTAsIDB4MDI5MSwgMHgwMjkyLCAweDAzQjgsIDB4MDA0MSwgMHgwMDYxLCAweDAwNDIsDQotICAgIDB4MDA2MiwgMHgwMDQyLCAweDAwNjIsIDB4MDA0MiwgMHgwMDYyLCAweDAwNDMsIDB4MDA2MywgMHgwMDQ0LCAweDAwNjQsIDB4MDA0NCwgMHgwMDY0LCAweDAwNDQsIDB4MDA2NCwgMHgwMDQ0LCAweDAwNjQsIDB4MDA0NCwNCi0gICAgMHgwMDY0LCAweDAwNDUsIDB4MDA2NSwgMHgwMDQ1LCAweDAwNjUsIDB4MDA0NSwgMHgwMDY1LCAweDAwNDUsIDB4MDA2NSwgMHgwMjI4LCAweDAyMjksIDB4MDA0NiwgMHgwMDY2LCAweDAwNDcsIDB4MDA2NywgMHgwMDQ4LA0KLSAgICAweDAwNjgsIDB4MDA0OCwgMHgwMDY4LCAweDAwNDgsIDB4MDA2OCwgMHgwMDQ4LCAweDAwNjgsIDB4MDA0OCwgMHgwMDY4LCAweDAwNDksIDB4MDA2OSwgMHgwMENGLCAweDAwRUYsIDB4MDA0QiwgMHgwMDZCLCAweDAwNEIsDQotICAgIDB4MDA2QiwgMHgwMDRCLCAweDAwNkIsIDB4MDA0QywgMHgwMDZDLCAweDAwNEMsIDB4MDA2QywgMHgwMDRDLCAweDAwNkMsIDB4MDA0QywgMHgwMDZDLCAweDAwNEQsIDB4MDA2RCwgMHgwMDRELCAweDAwNkQsIDB4MDA0RCwNCi0gICAgMHgwMDZELCAweDAwNEUsIDB4MDA2RSwgMHgwMDRFLCAweDAwNkUsIDB4MDA0RSwgMHgwMDZFLCAweDAwNEUsIDB4MDA2RSwgMHgwMEQ1LCAweDAwRjUsIDB4MDBENSwgMHgwMEY1LCAweDAxNEMsIDB4MDE0RCwgMHgwMTRDLA0KLSAgICAweDAxNEQsIDB4MDA1MCwgMHgwMDcwLCAweDAwNTAsIDB4MDA3MCwgMHgwMDUyLCAweDAwNzIsIDB4MDA1MiwgMHgwMDcyLCAweDAwNTIsIDB4MDA3MiwgMHgwMDUyLCAweDAwNzIsIDB4MDA1MywgMHgwMDczLCAweDAwNTMsDQotICAgIDB4MDA3MywgMHgwMDUzLCAweDAwNzMsIDB4MDA1MywgMHgwMDczLCAweDAwNTMsIDB4MDA3MywgMHgwMDU0LCAweDAwNzQsIDB4MDA1NCwgMHgwMDc0LCAweDAwNTQsIDB4MDA3NCwgMHgwMDU0LCAweDAwNzQsIDB4MDA1NSwNCi0gICAgMHgwMDc1LCAweDAwNTUsIDB4MDA3NSwgMHgwMDU1LCAweDAwNzUsIDB4MDE2OCwgMHgwMTY5LCAweDAxNkEsIDB4MDE2QiwgMHgwMDU2LCAweDAwNzYsIDB4MDA1NiwgMHgwMDc2LCAweDAwNTcsIDB4MDA3NywgMHgwMDU3LA0KLSAgICAweDAwNzcsIDB4MDA1NywgMHgwMDc3LCAweDAwNTcsIDB4MDA3NywgMHgwMDU3LCAweDAwNzcsIDB4MDA1OCwgMHgwMDc4LCAweDAwNTgsIDB4MDA3OCwgMHgwMDU5LCAweDAwNzksIDB4MDA1QSwgMHgwMDdBLCAweDAwNUEsDQotICAgIDB4MDA3QSwgMHgwMDVBLCAweDAwN0EsIDB4MDA2OCwgMHgwMDc0LCAweDAwNzcsIDB4MDA3OSwgMHgwMDYxLCAweDAxN0YsIDB4MDA0MSwgMHgwMDYxLCAweDAwNDEsIDB4MDA2MSwgMHgwMDQxLCAweDAwNjEsIDB4MDA0MSwNCi0gICAgMHgwMDYxLCAweDAwNDEsIDB4MDA2MSwgMHgwMDQxLCAweDAwNjEsIDB4MDA0MSwgMHgwMDYxLCAweDAwNDEsIDB4MDA2MSwgMHgwMDQxLCAweDAwNjEsIDB4MDA0MSwgMHgwMDYxLCAweDAwNDEsIDB4MDA2MSwgMHgwMDQxLA0KLSAgICAweDAwNjEsIDB4MDA0NSwgMHgwMDY1LCAweDAwNDUsIDB4MDA2NSwgMHgwMDQ1LCAweDAwNjUsIDB4MDA0NSwgMHgwMDY1LCAweDAwNDUsIDB4MDA2NSwgMHgwMDQ1LCAweDAwNjUsIDB4MDA0NSwgMHgwMDY1LCAweDAwNDUsDQotICAgIDB4MDA2NSwgMHgwMDQ5LCAweDAwNjksIDB4MDA0OSwgMHgwMDY5LCAweDAwNEYsIDB4MDA2RiwgMHgwMDRGLCAweDAwNkYsIDB4MDA0RiwgMHgwMDZGLCAweDAwNEYsIDB4MDA2RiwgMHgwMDRGLCAweDAwNkYsIDB4MDA0RiwNCi0gICAgMHgwMDZGLCAweDAwNEYsIDB4MDA2RiwgMHgwMDRGLCAweDAwNkYsIDB4MDA0RiwgMHgwMDZGLCAweDAwNEYsIDB4MDA2RiwgMHgwMDRGLCAweDAwNkYsIDB4MDA0RiwgMHgwMDZGLCAweDAwNTUsIDB4MDA3NSwgMHgwMDU1LA0KLSAgICAweDAwNzUsIDB4MDA1NSwgMHgwMDc1LCAweDAwNTUsIDB4MDA3NSwgMHgwMDU1LCAweDAwNzUsIDB4MDA1NSwgMHgwMDc1LCAweDAwNTUsIDB4MDA3NSwgMHgwMDU5LCAweDAwNzksIDB4MDA1OSwgMHgwMDc5LCAweDAwNTksDQotICAgIDB4MDA3OSwgMHgwMDU5LCAweDAwNzksIDB4MDNCMSwgMHgwM0IxLCAweDAzQjEsIDB4MDNCMSwgMHgwM0IxLCAweDAzQjEsIDB4MDNCMSwgMHgwM0IxLCAweDAzOTEsIDB4MDM5MSwgMHgwMzkxLCAweDAzOTEsIDB4MDM5MSwNCi0gICAgMHgwMzkxLCAweDAzOTEsIDB4MDM5MSwgMHgwM0I1LCAweDAzQjUsIDB4MDNCNSwgMHgwM0I1LCAweDAzQjUsIDB4MDNCNSwgMHgwMzk1LCAweDAzOTUsIDB4MDM5NSwgMHgwMzk1LCAweDAzOTUsIDB4MDM5NSwgMHgwM0I3LA0KLSAgICAweDAzQjcsIDB4MDNCNywgMHgwM0I3LCAweDAzQjcsIDB4MDNCNywgMHgwM0I3LCAweDAzQjcsIDB4MDM5NywgMHgwMzk3LCAweDAzOTcsIDB4MDM5NywgMHgwMzk3LCAweDAzOTcsIDB4MDM5NywgMHgwMzk3LCAweDAzQjksDQotICAgIDB4MDNCOSwgMHgwM0I5LCAweDAzQjksIDB4MDNCOSwgMHgwM0I5LCAweDAzQjksIDB4MDNCOSwgMHgwMzk5LCAweDAzOTksIDB4MDM5OSwgMHgwMzk5LCAweDAzOTksIDB4MDM5OSwgMHgwMzk5LCAweDAzOTksIDB4MDNCRiwNCi0gICAgMHgwM0JGLCAweDAzQkYsIDB4MDNCRiwgMHgwM0JGLCAweDAzQkYsIDB4MDM5RiwgMHgwMzlGLCAweDAzOUYsIDB4MDM5RiwgMHgwMzlGLCAweDAzOUYsIDB4MDNDNSwgMHgwM0M1LCAweDAzQzUsIDB4MDNDNSwgMHgwM0M1LA0KLSAgICAweDAzQzUsIDB4MDNDNSwgMHgwM0M1LCAweDAzQTUsIDB4MDNBNSwgMHgwM0E1LCAweDAzQTUsIDB4MDNDOSwgMHgwM0M5LCAweDAzQzksIDB4MDNDOSwgMHgwM0M5LCAweDAzQzksIDB4MDNDOSwgMHgwM0M5LCAweDAzQTksDQotICAgIDB4MDNBOSwgMHgwM0E5LCAweDAzQTksIDB4MDNBOSwgMHgwM0E5LCAweDAzQTksIDB4MDNBOSwgMHgwM0IxLCAweDAzQjEsIDB4MDNCNSwgMHgwM0I1LCAweDAzQjcsIDB4MDNCNywgMHgwM0I5LCAweDAzQjksIDB4MDNCRiwNCi0gICAgMHgwM0JGLCAweDAzQzUsIDB4MDNDNSwgMHgwM0M5LCAweDAzQzksIDB4MDNCMSwgMHgwM0IxLCAweDAzQjEsIDB4MDNCMSwgMHgwM0IxLCAweDAzQjEsIDB4MDNCMSwgMHgwM0IxLCAweDAzOTEsIDB4MDM5MSwgMHgwMzkxLA0KLSAgICAweDAzOTEsIDB4MDM5MSwgMHgwMzkxLCAweDAzOTEsIDB4MDM5MSwgMHgwM0I3LCAweDAzQjcsIDB4MDNCNywgMHgwM0I3LCAweDAzQjcsIDB4MDNCNywgMHgwM0I3LCAweDAzQjcsIDB4MDM5NywgMHgwMzk3LCAweDAzOTcsDQotICAgIDB4MDM5NywgMHgwMzk3LCAweDAzOTcsIDB4MDM5NywgMHgwMzk3LCAweDAzQzksIDB4MDNDOSwgMHgwM0M5LCAweDAzQzksIDB4MDNDOSwgMHgwM0M5LCAweDAzQzksIDB4MDNDOSwgMHgwM0E5LCAweDAzQTksIDB4MDNBOSwNCi0gICAgMHgwM0E5LCAweDAzQTksIDB4MDNBOSwgMHgwM0E5LCAweDAzQTksIDB4MDNCMSwgMHgwM0IxLCAweDAzQjEsIDB4MDNCMSwgMHgwM0IxLCAweDAzQjEsIDB4MDNCMSwgMHgwMzkxLCAweDAzOTEsIDB4MDM5MSwgMHgwMzkxLA0KLSAgICAweDAzOTEsIDB4MDNCNywgMHgwM0I3LCAweDAzQjcsIDB4MDNCNywgMHgwM0I3LCAweDAzOTUsIDB4MDM5NSwgMHgwMzk3LCAweDAzOTcsIDB4MDM5NywgMHgwM0I5LCAweDAzQjksIDB4MDNCOSwgMHgwM0I5LCAweDAzQjksDQotICAgIDB4MDNCOSwgMHgwMzk5LCAweDAzOTksIDB4MDM5OSwgMHgwMzk5LCAweDAzQzUsIDB4MDNDNSwgMHgwM0M1LCAweDAzQzUsIDB4MDNDMSwgMHgwM0MxLCAweDAzQzUsIDB4MDNDNSwgMHgwM0E1LCAweDAzQTUsIDB4MDNBNSwNCi0gICAgMHgwM0E1LCAweDAzQTEsIDB4MDNDOSwgMHgwM0M5LCAweDAzQzksIDB4MDNDOSwgMHgwM0M5LCAweDAzOUYsIDB4MDM5RiwgMHgwM0E5LCAweDAzQTksIDB4MDNBOSwgMHgwMEI0LCAweDAzMTQsIDB4MDAyMCwgMHgwMDIwLA0KLSAgICAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDIwMTAsIDB4MDMzMywgMHgwMDJFLCAweDAwMjAsIDB4MDAyMCwgMHgwMDMwLCAweDAwNjksDQotICAgIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgMHgwMDM4LCAweDAwMzksIDB4MDAyQiwgMHgyMjEyLCAweDAwM0QsIDB4MDAyOCwgMHgwMDI5LCAweDAwNkUsIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywNCi0gICAgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LCAweDAwMzgsIDB4MDAzOSwgMHgwMDJCLCAweDIyMTIsIDB4MDAzRCwgMHgwMDI4LCAweDAwMjksIDB4MDA2MSwgMHgwMDY1LCAweDAwNkYsIDB4MDA3OCwgMHgwMjU5LA0KLSAgICAweDAwNDMsIDB4MDE5MCwgMHgwMDY3LCAweDAwNDgsIDB4MDA0OCwgMHgwMDQ4LCAweDAwNjgsIDB4MDA2OCwgMHgwMDQ5LCAweDAwNDksIDB4MDA0QywgMHgwMDZDLCAweDAwNEUsIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsDQotICAgIDB4MDA1MiwgMHgwMDUyLCAweDAwNTIsIDB4MDA1MiwgMHgwMDU2LCAweDAwNUEsIDB4MDNBOSwgMHgwMUIxLCAweDAwNUEsIDB4MDA0QiwgMHgwMEM1LCAweDAwNDIsIDB4MDA0MywgMHgwMDY1LCAweDAwNjUsIDB4MDA0NSwNCi0gICAgMHgwMDQ2LCAweDAwNEQsIDB4MDA2RiwgMHgwNUQwLCAweDA1RDEsIDB4MDVEMiwgMHgwNUQzLCAweDAwNjksIDB4MDNDMCwgMHgwM0IzLCAweDAzOTMsIDB4MDNBMCwgMHgyMjExLCAweDAwNDQsIDB4MDA2NCwgMHgwMDY1LA0KLSAgICAweDAwNjksIDB4MDA2QSwgMHgwMDQ5LCAweDAwNTYsIDB4MDA1OCwgMHgwMDRDLCAweDAwNDMsIDB4MDA0NCwgMHgwMDRELCAweDAwNjksIDB4MDA3NiwgMHgwMDc4LCAweDAwNkMsIDB4MDA2MywgMHgwMDY0LCAweDAwNkQsDQotICAgIDB4MjIwMywgMHgyMjA4LCAweDIyMEIsIDB4MzAwOCwgMHgzMDA5LCAweDAwNjIsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgMHgwMDM4LCAweDAwMzksIDB4MDA0MSwNCi0gICAgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywgMHgwMDQ4LCAweDAwNDksIDB4MDA0QSwgMHgwMDRCLCAweDAwNEMsIDB4MDA0RCwgMHgwMDRFLCAweDAwNEYsIDB4MDA1MCwgMHgwMDUxLA0KLSAgICAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LCAweDAwNTgsIDB4MDA1OSwgMHgwMDVBLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsDQotICAgIDB4MDA2OCwgMHgwMDY5LCAweDAwNkEsIDB4MDA2QiwgMHgwMDZDLCAweDAwNkQsIDB4MDA2RSwgMHgwMDZGLCAweDAwNzAsIDB4MDA3MSwgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywNCi0gICAgMHgwMDc4LCAweDAwNzksIDB4MDA3QSwgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsIDB4MDAzOCwgMHgwMDM5LCAweDAwMzAsIDB4MDAzMSwgMHgwMDMyLA0KLSAgICAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgMHgwMDM4LCAweDAwMzksIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgMHgwMDM4LCAweDAwMzksDQotICAgIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgMHgwMDM4LCAweDAwMzksIDB4MDA0QywgMHgwMDZDLCAweDAwNEMsIDB4MDA1MCwgMHgwMDUyLCAweDAwNjEsIDB4MDA3NCwNCi0gICAgMHgwMDQ4LCAweDAwNjgsIDB4MDA0QiwgMHgwMDZCLCAweDAwNUEsIDB4MDA3QSwgMHgwMDc2LCAweDAwNTcsIDB4MDA1OCwgMHgwMDc2LCAweDAwNkEsIDB4MDA1NiwgMHgyRDYxLCAweDZCQ0QsIDB4NkMxMSwgMHg4NjRFLA0KLSAgICAweDg5N0YsIDB4ODlEMiwgMHg5NTdGLCAweDk3NTIsIDB4OThERiwgMHg5QUE4LCAweDlCM0MsIDB4OUVBNiwgMHg5RUM0LCAweDlGOUYsIDB4NEUwMCwgMHg0RTI4LCAweDRFMzYsIDB4NEUzRiwgMHg0RTU5LCAweDRFODUsDQotICAgIDB4NEU4QywgMHg0RUEwLCAweDRFQkEsIDB4NTEzRiwgMHg1MTY1LCAweDUxNkIsIDB4NTE4MiwgMHg1MTk2LCAweDUxQUIsIDB4NTFFMCwgMHg1MUY1LCAweDUyMDAsIDB4NTI5QiwgMHg1MkY5LCAweDUzMTUsIDB4NTMxQSwNCi0gICAgMHg1MzM4LCAweDUzNDEsIDB4NTM1QywgMHg1MzY5LCAweDUzODIsIDB4NTNCNiwgMHg1M0M4LCAweDUzRTMsIDB4NTZENywgMHg1NzFGLCAweDU4RUIsIDB4NTkwMiwgMHg1OTBBLCAweDU5MTUsIDB4NTkyNywgMHg1OTczLA0KLSAgICAweDVCNTAsIDB4NUI4MCwgMHg1QkY4LCAweDVDMEYsIDB4NUMyMiwgMHg1QzM4LCAweDVDNkUsIDB4NUM3MSwgMHg1RERCLCAweDVERTUsIDB4NURGMSwgMHg1REZFLCAweDVFNzIsIDB4NUU3QSwgMHg1RTdGLCAweDVFRjQsDQotICAgIDB4NUVGRSwgMHg1RjBCLCAweDVGMTMsIDB4NUY1MCwgMHg1RjYxLCAweDVGNzMsIDB4NUZDMywgMHg2MjA4LCAweDYyMzYsIDB4NjI0QiwgMHg2NTJGLCAweDY1MzQsIDB4NjU4NywgMHg2NTk3LCAweDY1QTQsIDB4NjVCOSwNCi0gICAgMHg2NUUwLCAweDY1RTUsIDB4NjZGMCwgMHg2NzA4LCAweDY3MjgsIDB4NkIyMCwgMHg2QjYyLCAweDZCNzksIDB4NkJCMywgMHg2QkNCLCAweDZCRDQsIDB4NkJEQiwgMHg2QzBGLCAweDZDMTQsIDB4NkMzNCwgMHg3MDZCLA0KLSAgICAweDcyMkEsIDB4NzIzNiwgMHg3MjNCLCAweDcyM0YsIDB4NzI0NywgMHg3MjU5LCAweDcyNUIsIDB4NzJBQywgMHg3Mzg0LCAweDczODksIDB4NzREQywgMHg3NEU2LCAweDc1MTgsIDB4NzUxRiwgMHg3NTI4LCAweDc1MzAsDQotICAgIDB4NzU4QiwgMHg3NTkyLCAweDc2NzYsIDB4NzY3RCwgMHg3NkFFLCAweDc2QkYsIDB4NzZFRSwgMHg3N0RCLCAweDc3RTIsIDB4NzdGMywgMHg3OTNBLCAweDc5QjgsIDB4NzlCRSwgMHg3QTc0LCAweDdBQ0IsIDB4N0FGOSwNCi0gICAgMHg3QzczLCAweDdDRjgsIDB4N0YzNiwgMHg3RjUxLCAweDdGOEEsIDB4N0ZCRCwgMHg4MDAxLCAweDgwMEMsIDB4ODAxMiwgMHg4MDMzLCAweDgwN0YsIDB4ODA4OSwgMHg4MUUzLCAweDgxRUEsIDB4ODFGMywgMHg4MUZDLA0KLSAgICAweDgyMEMsIDB4ODIxQiwgMHg4MjFGLCAweDgyNkUsIDB4ODI3MiwgMHg4Mjc4LCAweDg2NEQsIDB4ODY2QiwgMHg4ODQwLCAweDg4NEMsIDB4ODg2MywgMHg4OTdFLCAweDg5OEIsIDB4ODlEMiwgMHg4QTAwLCAweDhDMzcsDQotICAgIDB4OEM0NiwgMHg4QzU1LCAweDhDNzgsIDB4OEM5RCwgMHg4RDY0LCAweDhENzAsIDB4OERCMywgMHg4RUFCLCAweDhFQ0EsIDB4OEY5QiwgMHg4RkIwLCAweDhGQjUsIDB4OTA5MSwgMHg5MTQ5LCAweDkxQzYsIDB4OTFDQywNCi0gICAgMHg5MUQxLCAweDk1NzcsIDB4OTU4MCwgMHg5NjFDLCAweDk2QjYsIDB4OTZCOSwgMHg5NkU4LCAweDk3NTEsIDB4OTc1RSwgMHg5NzYyLCAweDk3NjksIDB4OTdDQiwgMHg5N0VELCAweDk3RjMsIDB4OTgwMSwgMHg5OEE4LA0KLSAgICAweDk4REIsIDB4OThERiwgMHg5OTk2LCAweDk5OTksIDB4OTlBQywgMHg5QUE4LCAweDlBRDgsIDB4OUFERiwgMHg5QjI1LCAweDlCMkYsIDB4OUIzMiwgMHg5QjNDLCAweDlCNUEsIDB4OUNFNSwgMHg5RTc1LCAweDlFN0YsDQotICAgIDB4OUVBNSwgMHg5RUJCLCAweDlFQzMsIDB4OUVDRCwgMHg5RUQxLCAweDlFRjksIDB4OUVGRCwgMHg5RjBFLCAweDlGMTMsIDB4OUYyMCwgMHg5RjNCLCAweDlGNEEsIDB4OUY1MiwgMHg5RjhELCAweDlGOUMsIDB4OUZBMCwNCi0gICAgMHgwMDIwLCAweDMwMTIsIDB4NTM0MSwgMHg1MzQ0LCAweDUzNDUsIDB4MTEwMCwgMHgxMTAxLCAweDExQUEsIDB4MTEwMiwgMHgxMUFDLCAweDExQUQsIDB4MTEwMywgMHgxMTA0LCAweDExMDUsIDB4MTFCMCwgMHgxMUIxLA0KLSAgICAweDExQjIsIDB4MTFCMywgMHgxMUI0LCAweDExQjUsIDB4MTExQSwgMHgxMTA2LCAweDExMDcsIDB4MTEwOCwgMHgxMTIxLCAweDExMDksIDB4MTEwQSwgMHgxMTBCLCAweDExMEMsIDB4MTEwRCwgMHgxMTBFLCAweDExMEYsDQotICAgIDB4MTExMCwgMHgxMTExLCAweDExMTIsIDB4MTE2MSwgMHgxMTYyLCAweDExNjMsIDB4MTE2NCwgMHgxMTY1LCAweDExNjYsIDB4MTE2NywgMHgxMTY4LCAweDExNjksIDB4MTE2QSwgMHgxMTZCLCAweDExNkMsIDB4MTE2RCwNCi0gICAgMHgxMTZFLCAweDExNkYsIDB4MTE3MCwgMHgxMTcxLCAweDExNzIsIDB4MTE3MywgMHgxMTc0LCAweDExNzUsIDB4MTE2MCwgMHgxMTE0LCAweDExMTUsIDB4MTFDNywgMHgxMUM4LCAweDExQ0MsIDB4MTFDRSwgMHgxMUQzLA0KLSAgICAweDExRDcsIDB4MTFEOSwgMHgxMTFDLCAweDExREQsIDB4MTFERiwgMHgxMTFELCAweDExMUUsIDB4MTEyMCwgMHgxMTIyLCAweDExMjMsIDB4MTEyNywgMHgxMTI5LCAweDExMkIsIDB4MTEyQywgMHgxMTJELCAweDExMkUsDQotICAgIDB4MTEyRiwgMHgxMTMyLCAweDExMzYsIDB4MTE0MCwgMHgxMTQ3LCAweDExNEMsIDB4MTFGMSwgMHgxMUYyLCAweDExNTcsIDB4MTE1OCwgMHgxMTU5LCAweDExODQsIDB4MTE4NSwgMHgxMTg4LCAweDExOTEsIDB4MTE5MiwNCi0gICAgMHgxMTk0LCAweDExOUUsIDB4MTFBMSwgMHg0RTAwLCAweDRFOEMsIDB4NEUwOSwgMHg1NkRCLCAweDRFMEEsIDB4NEUyRCwgMHg0RTBCLCAweDc1MzIsIDB4NEU1OSwgMHg0RTE5LCAweDRFMDEsIDB4NTkyOSwgMHg1NzMwLA0KLSAgICAweDRFQkEsIDB4NTU0RiwgMHg1RTdDLCAweDY1ODcsIDB4N0I4RiwgMHgxMTAwLCAweDExMDIsIDB4MTEwMywgMHgxMTA1LCAweDExMDYsIDB4MTEwNywgMHgxMTA5LCAweDExMEIsIDB4MTEwQywgMHgxMTBFLCAweDExMEYsDQotICAgIDB4MTExMCwgMHgxMTExLCAweDExMTIsIDB4NEUwMCwgMHg0RThDLCAweDRFMDksIDB4NTZEQiwgMHg0RTk0LCAweDUxNkQsIDB4NEUwMywgMHg1MTZCLCAweDRFNUQsIDB4NTM0MSwgMHg2NzA4LCAweDcwNkIsIDB4NkMzNCwNCi0gICAgMHg2NzI4LCAweDkxRDEsIDB4NTcxRiwgMHg2NUU1LCAweDY4MkEsIDB4NjcwOSwgMHg3OTNFLCAweDU0MEQsIDB4NzI3OSwgMHg4Q0ExLCAweDc5NUQsIDB4NTJCNCwgMHg3OUQ4LCAweDc1MzcsIDB4NTk3MywgMHg5MDY5LA0KLSAgICAweDUxMkEsIDB4NTM3MCwgMHg2Q0U4LCAweDk4MDUsIDB4NEYxMSwgMHg1MTk5LCAweDZCNjMsIDB4NEUwQSwgMHg0RTJELCAweDRFMEIsIDB4NURFNiwgMHg1M0YzLCAweDUzM0IsIDB4NUI5NywgMHg1QjY2LCAweDc2RTMsDQotICAgIDB4NEYwMSwgMHg4Q0M3LCAweDUzNTQsIDB4NTkxQywgMHgzMEEyLCAweDMwQTQsIDB4MzBBNiwgMHgzMEE4LCAweDMwQUEsIDB4MzBBQiwgMHgzMEFELCAweDMwQUYsIDB4MzBCMSwgMHgzMEIzLCAweDMwQjUsIDB4MzBCNywNCi0gICAgMHgzMEI5LCAweDMwQkIsIDB4MzBCRCwgMHgzMEJGLCAweDMwQzEsIDB4MzBDNCwgMHgzMEM2LCAweDMwQzgsIDB4MzBDQSwgMHgzMENCLCAweDMwQ0MsIDB4MzBDRCwgMHgzMENFLCAweDMwQ0YsIDB4MzBEMiwgMHgzMEQ1LA0KLSAgICAweDMwRDgsIDB4MzBEQiwgMHgzMERFLCAweDMwREYsIDB4MzBFMCwgMHgzMEUxLCAweDMwRTIsIDB4MzBFNCwgMHgzMEU2LCAweDMwRTgsIDB4MzBFOSwgMHgzMEVBLCAweDMwRUIsIDB4MzBFQywgMHgzMEVELCAweDMwRUYsDQotICAgIDB4MzBGMCwgMHgzMEYxLCAweDMwRjIsIDB4NEUyMiwgMHg1RTc2LCAweDVFN0EsIDB4NUU3MiwgMHg0RTcxLCAweDRFOTgsIDB4NEU5QSwgMHg0RjJCLCAweDVFMDMsIDB4NTM2MCwgMHg2NzY1LCAweDRGQTMsIDB4NEZFMywNCi0gICAgMHg3Q0ZCLCAweDRGQTAsIDB4NEYyNSwgMHg0RkU5LCAweDRFRDMsIDB4NEUyQSwgMHg0RUVDLCAweDRGMjYsIDB4NEYxRiwgMHg0RkE3LCAweDRGQTYsIDB4NEYyQSwgMHg2NzcwLCAweDRGMjcsIDB4NEYxRSwgMHg1OTA3LA0KLSAgICAweDVCQjYsIDB4NEY2MywgMHg1MDZDLCAweDRGMjAsIDB4NEYxQiwgMHg1MDNBLCAweDRGMjQsIDB4NTAzRSwgMHg1MDdCLCAweDRFQzUsIDB4NEY2NSwgMHg0RkE4LCAweDRFQzYsIDB4NEZBNSwgMHg1MDdFLCAweDk2QzcsDQotICAgIDB4NEVGNywgMHg0RUVBLCAweDRGQUMsIDB4NEVCRiwgMHg0RkVELCAweDUwQTcsIDB4NEZFNiwgMHg0RkFBLCAweDVDM0QsIDB4NTA3RiwgMHg0RjE4LCAweDUwQTgsIDB4NEZFQSwgMHg1MEE5LCAweDUwQTUsIDB4NEZFOCwNCi0gICAgMHg1MUY2LCAweDUxNTEsIDB4NTEzRiwgMHg1MTU2LCAweDUxODUsIDB4NEUyNCwgMHg1MThDLCAweDgwQzQsIDB4NTE5OSwgMHg1RTQyLCAweDUxQkIsIDB4NTFEQiwgMHg1MUVGLCAweDUyMkIsIDB4NTIyMCwgMHg1MjJELA0KLSAgICAweDUyMTksIDB4NTIzOSwgMHg1MjFBLCAweDUyNjUsIDB4NTI1MCwgMHg1MjQwLCAweDUyMUIsIDB4NTIyQywgMHg1MjEyLCAweDUyNjcsIDB4NTIxOCwgMHg1MjNELCAweDUyM0YsIDB4NTI1MSwgMHg1MjQyLCAweDUyQjIsDQotICAgIDB4NTJBOCwgMHg1MkQ2LCAweDUyQTEsIDB4ODBEQywgMHg1MkIzLCAweDUyQkYsIDB4NTJBMiwgMHg1MkNCLCAweDUyQjEsIDB4NTI5RCwgMHg1MzAwLCAweDUzMjYsIDB4NkM0NywgMHg1MzJFLCAweDUzM0EsIDB4NTM0RiwNCi0gICAgMHg2MDY0LCAweDUzNzQsIDB4NTM4RCwgMHg1MzhDLCAweDUzODksIDB4NTNBMywgMHg1M0MyLCAweDRFMUIsIDB4NTRBNCwgMHg1NDM0LCAweDU0NTAsIDB4NTQxNSwgMHg1NDU4LCAweDU1QjEsIDB4NTQ1NywgMHg1RkY1LA0KLSAgICAweDk1RUUsIDB4NTREMSwgMHg1NDJGLCAweDU1MjQsIDB4NEUyNywgMHg0RTU0LCAweDUzNTUsIDB4NTRERiwgMHg1NDVCLCAweDU1NkMsIDB4NTUxRCwgMHg1NDE3LCAweDU0NUMsIDB4NTUyMiwgMHg1NEQ0LCAweDUzRjksDQotICAgIDB4NTVCRCwgMHg1NDU1LCAweDU1NjcsIDB4NUMxRCwgMHg1NTFCLCAweDU0RDcsIDB4NTUyMCwgMHg1NTc4LCAweDUzRkQsIDB4NTREMywgMHg1NDUyLCAweDU1NzQsIDB4NjA3NiwgMHg1NjE4LCAweDU0OUQsIDB4NTREMiwNCi0gICAgMHg1NERELCAweDU0RDUsIDB4NTVGMywgMHg1NEQ5LCAweDU1QjcsIDB4NTQyOCwgMHg1NDlCLCAweDU0MTMsIDB4NTREQywgMHg1QzFELCAweDU2NUMsIDB4NTU2RSwgMHg1NDU2LCAweDU0OTksIDB4NEVCOCwgMHg1NUJFLA0KLSAgICAweDRFMjUsIDB4NTYyNCwgMHg1NTZELCAweDU1RUIsIDB4NTZBMywgMHg1MTgxLCAweDU0NTMsIDB4NTU3MCwgMHg1NjMxLCAweDU2RjEsIDB4NTZGNSwgMHg1NkZELCAweDU2RjQsIDB4NTZFRCwgMHg1NzA2LCAweDU2RkUsDQotICAgIDB4NTZFMiwgMHg1N0FELCAweDYyNjcsIDB4NTc1QSwgMHg1N0E5LCAweDU3REEsIDB4NUMyNywgMHg2MkE1LCAweDU3M0EsIDB4NTc1NywgMHg4MzE0LCAweDU3QjIsIDB4NTdEOCwgMHg2RDgyLCAweDUxQTIsIDB4NTc1RSwNCi0gICAgMHg1N0Q5LCAweDVDMTgsIDB4NTgxMSwgMHg1N0FCLCAweDU3NjAsIDB4NTgxNSwgMHg1NzVGLCAweDU3QTYsIDB4NTc1QiwgMHg1MzhCLCAweDU3OTIsIDB4NTczOSwgMHg1Nzg2LCAweDU3NEYsIDB4NTc4NSwgMHg1NzVDLA0KLSAgICAweDU3NUQsIDB4NThFRSwgMHg1OEY2LCAweDU4RjgsIDB4NUJGRiwgMHg1OTFGLCAweDY4QTYsIDB4NEYxOSwgMHg1OTM5LCAweDU5NDIsIDB4NTk2NSwgMHg1OTQxLCAweDU5M0EsIDB4NTk0QiwgMHg1OUY5LCAweDU5ODYsDQotICAgIDB4NTlENywgMHg1OTc4LCAweDVBMzEsIDB4NUEwNCwgMHg1OTg3LCAweDVBMDUsIDB4NUEzMiwgMHg1OUFCLCAweDVBQUEsIDB4NTk4OCwgMHg1OUFBLCAweDU5QTksIDB4NUEzNCwgMHg1QTczLCAweDVBMDYsIDB4NUE3NSwNCi0gICAgMHg1QTA3LCAweDVBRjEsIDB4NUFEMiwgMHg1QjM3LCAweDVBRDQsIDB4NUE3NCwgMHg1QTc2LCAweDVBMDgsIDB4NUI1OSwgMHg1QjY2LCAweDVCNkEsIDB4NUJBQiwgMHg1QkRELCAweDVCOUUsIDB4NUI4MSwgMHg1QkExLA0KLSAgICAweDUxOTksIDB4NUJCRCwgMHg1QkEwLCAweDVCOUQsIDB4NUMwNiwgMHg0RTEzLCAweDVCRkIsIDB4NUJGOSwgMHg1QkZDLCAweDVDMzQsIDB4NUM0QSwgMHg1QzM4LCAweDVDNDksIDB4NUM2MSwgMHg1QzQyLCAweDVDNUYsDQotICAgIDB4NUM2NiwgMHg1QzVFLCAweDUxODgsIDB4NUM5OCwgMHg1QzlCLCAweDVDRTEsIDB4NUQwMywgMHg1Qzk3LCAweDRFRDEsIDB4NUNFNSwgMHg1QzlBLCAweDVENUQsIDB4NUQyRCwgMHg1Qzk2LCAweDVENUEsIDB4NUQwMiwNCi0gICAgMHg1Q0U0LCAweDVDRTMsIDB4NUNDNCwgMHg1RDA0LCAweDVDOTksIDB4NUQ1OCwgMHg1Q0FELCAweDVDN0YsIDB4NUNCMywgMHg1Q0JGLCAweDVDRTYsIDB4NURDNSwgMHg1REVGLCAweDVFMDUsIDB4NUUwOCwgMHg1RTEwLA0KLSAgICAweDVFMjYsIDB4NUUyNywgMHg1RTBGLCAweDVFM0MsIDB4NUUzQiwgMHg1RTFDLCAweDVFMDEsIDB4NUUyRSwgMHg1RTMxLCAweDVFNzIsIDB4NTFFMCwgMHg1RTkzLCAweDUzOTUsIDB4NTNBMiwgMHg1M0E2LCAweDUzQTgsDQotICAgIDB4NTNBRSwgMHg1RTk5LCAweDUzODIsIDB4NUU5MSwgMHg1RTlGLCAweDVFN0YsIDB4NUVFQSwgMHg1RTkwLCAweDUzODUsIDB4NUYxMSwgMHg1RjJBLCAweDVGMjAsIDB4NUYzQSwgMHg1RjM5LCAweDVGMjUsIDB4NUYyRiwNCi0gICAgMHg1RjY2LCAweDU0MEUsIDB4NUY4NCwgMHg0RUNFLCAweDVGOTUsIDB4NTkwRCwgMHg1RjgxLCAweDVGN0IsIDB4NjA1MiwgMHg4MDNCLCAweDYwQTYsIDB4NjAwNSwgMHg5NUY3LCAweDYwNzYsIDB4NjA3QywgMHg2MDdELA0KLSAgICAweDYwN0IsIDB4NzIzMSwgMHg2MEVDLCAweDYwQUIsIDB4NjAwNiwgMHg2MDdBLCAweDVGRkUsIDB4NjAwMSwgMHg2MTIwLCAweDYwRTgsIDB4NjBFRCwgMHg2MDc4LCAweDYwRUYsIDB4NjAwNCwgMHg2MDAyLCAweDg2NTEsDQotICAgIDB4NjBBRCwgMHg1RTg2LCAweDVGRTcsIDB4NjBFQiwgMHg2MDFDLCAweDUxRUQsIDB4NjEyNiwgMHg2MTZELCAweDYwRUUsIDB4NjEyNCwgMHg2MEFGLCAweDYwMDMsIDB4NUJBQSwgMHg1RkM2LCAweDYwNzMsIDB4NUU5NCwNCi0gICAgMHg2MDNGLCAweDYxRDQsIDB4NjAzQywgMHg2MUQxLCAweDYwNzksIDB4NjBFOSwgMHg2MUQyLCAweDYwMDAsIDB4NjBBQywgMHg1RkNGLCAweDYwRTcsIDB4NjE1MSwgMHg2MDRCLCAweDYyMDYsIDB4NjIwQiwgMHg2MjE3LA0KLSAgICAweDYyMkMsIDB4NjIxOCwgMHg2MjBGLCAweDYyMzcsIDB4NjI5QiwgMHg2MzFGLCAweDgyMEQsIDB4NjI2QSwgMHg1Mzc3LCAweDYyNkIsIDB4NjJBMSwgMHg2MzIzLCAweDYzMDIsIDB4OTFDNywgMHg2MkUzLCAweDYyNkMsDQotICAgIDB4NjM2MiwgMHg2MzI1LCAweDYzNUYsIDB4NjQ0NywgMHg2MzYzLCAweDYyQTIsIDB4NjNCNCwgMHg2M0JDLCAweDY0MDIsIDB4NjMxQSwgMHg2MkEwLCAweDYyOUYsIDB4NjNCQSwgMHg2MzVFLCAweDY0OTEsIDB4NjMyMCwNCi0gICAgMHg2MzIyLCAweDYzQjgsIDB4NjJFOCwgMHg2MjlBLCAweDYyNTEsIDB4NjNGRiwgMHg2MzFFLCAweDYzMUQsIDB4NjM2MSwgMHg2MkU1LCAweDYzQjMsIDB4NjJFOSwgMHg1MUZCLCAweDYzMjEsIDB4NjJDNSwgMHg2MzZFLA0KLSAgICAweDYzMjQsIDB4NjJERiwgMHg2NDQ4LCAweDYyRTcsIDB4NjQwMSwgMHg2M0I3LCAweDYyNjksIDB4NjRCNywgMHg2NDQ2LCAweDY0REUsIDB4NjRCOCwgMHg2MjcwLCAweDY0NDUsIDB4NjRCNSwgMHg2MkUyLCAweDYyRTYsDQotICAgIDB4NjQ4NCwgMHg2NDAwLCAweDY0QkEsIDB4NjQzQSwgMHg2NDQ0LCAweDY1MTIsIDB4NjMxQiwgMHg2NDRBLCAweDY0MDUsIDB4NjNGRCwgMHg2NjhCLCAweDhEMjUsIDB4NTNEOSwgMHg2NTRDLCAweDY1NzAsIDB4NjU1QiwNCi0gICAgMHg2QkQ5LCAweDY1OTMsIDB4NjVBOSwgMHg2NUFELCAweDRFOEUsIDB4NTM0NywgMHg2NUY2LCAweDY2NEIsIDB4NjYzQywgMHg2NjU1LCAweDY2NTYsIDB4NjVGOCwgMHg3NTQ1LCAweDY2ODIsIDB4NjYzNSwgMHg2NjU0LA0KLSAgICAweDUzODYsIDB4NjYxOSwgMHg2NjUzLCAweDY2QTcsIDB4NjVGNywgMHg2NjNELCAweDY2NTIsIDB4NEU2NiwgMHg0RjFBLCAweDgwRTcsIDB4NEUxQywgMHg2ODA1LCAweDY3NDYsIDB4NjgwMCwgMHg2N0E3LCAweDY3NjEsDQotICAgIDB4NjdBRCwgMHg1RjAzLCAweDY3QTgsIDB4NjdBMywgMHg2ODBCLCAweDY4MDgsIDB4NjgxNiwgMHg2ODYwLCAweDY3NjgsIDB4NjdBQiwgMHg2ODYyLCAweDRFMUEsIDB4Njc4MSwgMHg2NzY5LCAweDgzNjMsIDB4Njg2NCwNCi0gICAgMHg2Nzg0LCAweDY3QUEsIDB4Njc2MCwgMHg2OEJGLCAweDY5MjAsIDB4NjkwMSwgMHg2ODY4LCAweDY4NjksIDB4NEU1MCwgMHg2NzlFLCAweDY5N0MsIDB4NjgwNywgMHg2N0EyLCAweDY4MzcsIDB4NjczNCwgMHg2ODExLA0KLSAgICAweDY4NjYsIDB4Njg2MSwgMHg2ODY1LCAweDY3M0EsIDB4NjkyRCwgMHg2QTJBLCAweDZBQTksIDB4NjlEQywgMHg2N0ZELCAweDY4NjMsIDB4Njg2NywgMHg2OURBLCAweDY4QzAsIDB4NkEyRiwgMHg2OEJDLCAweDUzRjAsDQotICAgIDB4NjlERiwgMHg2N0UwLCAweDY5REIsIDB4ODJEOCwgMHg2N0RDLCAweDZBNzksIDB4Njk4OCwgMHg2ODA5LCAweDY5MUYsIDB4NkE3QywgMHg2ODBFLCAweDZBNzEsIDB4NjlFMCwgMHg2ODBDLCAweDY3QTUsIDB4NkE2NSwNCi0gICAgMHg2OTg3LCAweDY4MEEsIDB4Njk4OSwgMHg2OEMyLCAweDZBMzEsIDB4NjgwRiwgMHg2NzQzLCAweDY5MjQsIDB4NjgzRSwgMHg2OTg0LCAweDk0QTYsIDB4NkIyNywgMHg2QjI0LCAweDZCMjIsIDB4NUM4MSwgMHg1Mzg2LA0KLSAgICAweDVGNTIsIDB4NkI4MSwgMHg2QjhCLCAweDZCOTIsIDB4NkI4NywgMHg2QjlBLCAweDZCOTMsIDB4NkJBMSwgMHg2QjdDLCAweDY3NDAsIDB4NThGMywgMHg2QkMxLCAweDZCQjQsIDB4NkJGNSwgMHg2QkUxLCAweDZDMDcsDQotICAgIDB4NkMxNCwgMHg2QzIyLCAweDZDMjksIDB4NkMzMiwgMHg1MUZDLCAweDUxQjMsIDB4NTFCMSwgMHg2Q0ExLCAweDUxQjUsIDB4NkNDNCwgMHg2Qzc5LCAweDZENDMsIDB4NkNGRSwgMHg1MUM5LCAweDUxQzQsIDB4NkNFQSwNCi0gICAgMHg2RTBDLCAweDUxQzAsIDB4NkNBNiwgMHg2RTBBLCAweDZEOUUsIDB4NkQ0NSwgMHg2REEzLCAweDUxQ0YsIDB4NkNBOCwgMHg2REExLCAweDZENEIsIDB4NkQ1MSwgMHg1MUQxLCAweDZENDgsIDB4NkQ4QywgMHg2RDA3LA0KLSAgICAweDZDNjQsIDB4NkNBOSwgMHg1MUM2LCAweDZDOUYsIDB4NkUyOSwgMHg2REEyLCAweDZFN0YsIDB4NkNBNywgMHg3MDZELCAweDZEQTQsIDB4ODM2NSwgMHg2Q0FBLCAweDZFREUsIDB4NkUxNywgMHg2RDUyLCAweDZENTAsDQotICAgIDB4NkVEQSwgMHg2RUUxLCAweDZFMTQsIDB4NkU4NywgMHg2Q0E0LCAweDZDNDksIDB4NkQ5RiwgMHg2RTBELCAweDZEQTgsIDB4NkUxMCwgMHg2RDQ2LCAweDk4OEQsIDB4NkNGQywgMHg2RDAxLCAweDZGNUMsIDB4NkRBNiwNCi0gICAgMHg2RDU0LCAweDZFODMsIDB4NkRBMCwgMHg2REE5LCAweDZENDcsIDB4NkQ5RCwgMHg2Qzg0LCAweDZEQTcsIDB4NkUxMSwgMHg2Q0ZELCAweDZFRUEsIDB4NkNGNiwgMHg2RDRELCAweDZENEEsIDB4NkQ1MywgMHg2RTdGLA0KLSAgICAweDZDREUsIDB4NkQ0RSwgMHg2RDlCLCAweDZFRTUsIDB4NkY0RCwgMHg2RUU4LCAweDZFODUsIDB4NkNGQSwgMHg2RUU0LCAweDZFRTIsIDB4NkUwRSwgMHg2Q0ZCLCAweDZENEYsIDB4NkZEMiwgMHg2Q0Y4LCAweDZDQTUsDQotICAgIDB4NkY0NywgMHg2RjQ2LCAweDZGNzQsIDB4NkNGNywgMHg2RkQxLCAweDZGNEIsIDB4NkY5QywgMHg2Q0EzLCAweDZFRTAsIDB4NkQxMiwgMHg2RUU5LCAweDcwNEYsIDB4NkU3RSwgMHg2RUU2LCAweDZFREYsIDB4NzA3RSwNCi0gICAgMHg0RTNBLCAweDRFNEMsIDB4NzBDMywgMHg2NUUwLCAweDcwQkMsIDB4NzA5QywgMHg3MERGLCAweDgzMTUsIDB4NzExNSwgMHg3MEU2LCAweDcwODAsIDB4ODM2NywgMHg3MDlELCAweDcwRUQsIDB4NzBCRCwgMHg3MEU4LA0KLSAgICAweDcwNkYsIDB4NzA5NiwgMHg3MEU3LCAweDcwRUIsIDB4NzExNiwgMHg4NDI1LCAweDcwN0YsIDB4NzBEQiwgMHg3MEU5LCAweDcwRUMsIDB4NzExOCwgMHg3MEMxLCAweDcwODksIDB4NzBDMiwgMHg0RTg5LCAweDRFM0EsDQotICAgIDB4NzIzNywgMHg1QzE0LCAweDU4OTksIDB4NzI0RCwgMHg3Mjc1LCAweDgzNjYsIDB4NzI2NiwgMHg3MjhBLCAweDcyN0EsIDB4NzJCNiwgMHg3MkVELCAweDcyQzgsIDB4NzJGMCwgMHg3MkI5LCAweDcyRjIsIDB4NzJCOCwNCi0gICAgMHg3MkYxLCAweDcyRUUsIDB4NTk1NiwgMHg3MkVDLCAweDcyRUYsIDB4NzMwMywgMHg3MkRFLCAweDgzQjcsIDB4NzMwRSwgMHg3MkI3LCAweDUxN0QsIDB4NzM2RCwgMHg3MzJFLCAweDczMTUsIDB4NzMyMSwgMHg3M0IwLA0KLSAgICAweDczRDAsIDB4NzNGMiwgMHg3M0FFLCAweDczOUEsIDB4NzQxMCwgMHg3NDc2LCAweDgzQjksIDB4NzM5QiwgMHg3NDA1LCAweDczQjEsIDB4NzQwRiwgMHg3NDBFLCAweDczOTEsIDB4NzQ3NywgMHg3M0YwLCAweDczQUYsDQotICAgIDB4NzM5OSwgMHg3M0JBLCAweDc0M0MsIDB4NzNEMSwgMHg3NDhFLCAweDc0RDIsIDB4NzRFRiwgMHg3NEVFLCAweDRFQTcsIDB4NEVBNywgMHg0RUE5LCAweDZCRDUsIDB4NzUzQiwgMHg3NTcyLCAweDVGMDIsIDB4NUY1MywNCi0gICAgMHg3NTc0LCAweDUzRTAsIDB4NzVDOSwgMHg5MTc4LCAweDc1RjksIDB4NzVENiwgMHg3NUFGLCAweDc1QTEsIDB4NzVFQSwgMHg3NjE3LCAweDc1QUUsIDB4NzU5RiwgMHg3NUFELCAweDc2MTgsIDB4NzU5NywgMHg3NUU4LA0KLSAgICAweDc1RUIsIDB4NzYwNSwgMHg3NUEwLCAweDc2MkEsIDB4NzVEMiwgMHg3NTk2LCAweDc1QUMsIDB4NzY1RSwgMHg3NjYzLCAweDc2M0YsIDB4NzYzRSwgMHg3NUM4LCAweDc2MkIsIDB4NzY2QiwgMHg1M0QxLCAweDc2OTEsDQotICAgIDB4NzVCMSwgMHg3NkIyLCAweDc2QjEsIDB4Njc2RiwgMHg3NkQ3LCAweDc2Q0YsIDB4NUMzRCwgMHg3NkQxLCAweDc2RDgsIDB4NTM2MiwgMHg4MzYxLCAweDc3MjYsIDB4NEYxNywgMHg1NkYwLCAweDc3NDEsIDB4Nzc1MCwNCi0gICAgMHg3NzJGLCAweDc3OTIsIDB4NEU4NiwgMHg3Nzg2LCAweDc3NTEsIDB4NzcyQywgMHg3N0E5LCAweDc3RUIsIDB4Nzg0NSwgMHg3MEFFLCAweDc4NDEsIDB4Nzg1NiwgMHg3ODE3LCAweDc4MUEsIDB4Nzg1NSwgMHg3ODAwLA0KLSAgICAweDc4NkUsIDB4NzgwMSwgMHg3ODU5LCAweDc4MTYsIDB4Nzg5QywgMHg3ODlCLCAweDc3RjYsIDB4Nzg1NywgMHg3ODVBLCAweDc4NDAsIDB4Nzg4RCwgMHg3N0ZGLCAweDc4M0EsIDB4NzgzRSwgMHg3N0ZFLCAweDc4M0IsDQotICAgIDB4Nzk4NCwgMHg3OTc4LCAweDc5NkYsIDB4Nzk0RSwgMHg1RkExLCAweDc5ODUsIDB4NzkzQywgMHg3OTc3LCAweDc5QzMsIDB4N0M3QywgMHg3QTBFLCAweDc5QzYsIDB4NjhGMSwgMHg3OUNELCAweDc5RjAsIDB4N0EyMywNCi0gICAgMHg3OUVGLCAweDk4OTYsIDB4NzlGRSwgMHg3QTUxLCAweDc5RkQsIDB4N0EzMywgMHg3QTlELCAweDZEM0MsIDB4N0E3NywgMHg3QTkxLCAweDdBOEUsIDB4N0FBRCwgMHg3QUE1LCAweDdBOUMsIDB4N0E4RCwgMHg3QUE2LA0KLSAgICAweDdBODMsIDB4N0FERSwgMHg3QjE0LCAweDdCMEIsIDB4N0IxNSwgMHg3QjNBLCAweDdCNUQsIDB4ODI4MiwgMHg4MzAzLCAweDdCNTEsIDB4N0JBNywgMHg3QjdDLCAweDdCMDMsIDB4N0I1QiwgMHg3QjVBLCAweDdCQTYsDQotICAgIDB4N0JEMywgMHg3QkFBLCAweDdCODAsIDB4N0JEMSwgMHg3QkFCLCAweDZBOTAsIDB4N0I1QywgMHg3QjdFLCAweDVFMTgsIDB4N0JFRSwgMHg3Qjc5LCAweDdCOTMsIDB4N0JFRiwgMHg3QkE4LCAweDdDNDEsIDB4N0IzQywNCi0gICAgMHg3QjdFLCAweDdCM0UsIDB4N0JGMSwgMHg3QkE5LCAweDU0MDEsIDB4NTk4NiwgMHg3Q0E0LCAweDdDQzEsIDB4N0NBQSwgMHg3Q0FFLCAweDdDRjUsIDB4N0M5RCwgMHg3Qzc0LCAweDdDOUMsIDB4N0VBMCwgMHg3RUFBLA0KLSAgICAweDdFQTMsIDB4N0VBNiwgMHg3RUEyLCAweDdFQTEsIDB4N0VBNSwgMHg3RUE4LCAweDdFQUIsIDB4N0VCOSwgMHg3RUIzLCAweDdFQkQsIDB4N0VCRSwgMHg3RUFGLCAweDdFQjAsIDB4N0VCMSwgMHg3RUI4LCAweDdFQTcsDQotICAgIDB4N0VCNywgMHg3RUFELCAweDdFQjQsIDB4N0VCQSwgMHg2MjRFLCAweDYyNEUsIDB4N0VDNiwgMHg3RUMyLCAweDdFQzEsIDB4N0VDNSwgMHg3RUJCLCAweDdFQ0QsIDB4N0VDMCwgMHg3RUNCLCAweDdFRDAsIDB4N0VDQywNCi0gICAgMHg3RUM4LCAweDVGMjYsIDB4N0VDNCwgMHg3RUNBLCAweDdFRDcsIDB4N0VEMywgMHg3RURELCAweDdFRTYsIDB4N0VENCwgMHg3RURFLCAweDdFREMsIDB4N0VEQSwgMHg3RUQ5LCAweDdFRDIsIDB4N0VENiwgMHg3RURGLA0KLSAgICAweDRFMUQsIDB4N0VEQiwgMHg3RUUyLCAweDdFRDEsIDB4N0VFMSwgMHg3RUUwLCAweDdFRTgsIDB4N0VFNSwgMHg3RUNGLCAweDdFRkMsIDB4N0YwRCwgMHg3RUZGLCAweDdFRjgsIDB4N0VGQiwgMHg3RUY2LCAweDdFRjQsDQotICAgIDB4N0VGRSwgMHg3RUIyLCAweDdGNTEsIDB4N0YwMCwgMHg3RUI2LCAweDdFRkEsIDB4N0VFRSwgMHg3RUZELCAweDdFRjAsIDB4N0VFQiwgMHg3RUY1LCAweDdFRjIsIDB4N0YwMSwgMHg3RDI3LCAweDdFRUYsIDB4N0VFQSwNCi0gICAgMHg3RjAzLCAweDdGMDQsIDB4N0YwMiwgMHg3RUJGLCAweDdGMDksIDB4N0YwRSwgMHg3RjE0LCAweDdGMTcsIDB4N0YxOCwgMHg3RjBDLCAweDdGMTYsIDB4N0YxMywgMHg3RjA1LCAweDdFQUMsIDB4N0YxMSwgMHg3RjA4LA0KLSAgICAweDdFQzMsIDB4N0YwRiwgMHg3RjA3LCAweDgxRjQsIDB4ODQyNiwgMHg3RjE5LCAweDdGMjIsIDB4N0YxMiwgMHg3RUM5LCAweDdGMjMsIDB4N0YxRSwgMHg3RjFBLCAweDdGMUMsIDB4N0YxRiwgMHg3RjFCLCAweDUzQkYsDQotICAgIDB4N0YxRCwgMHg3RjI5LCAweDdFQjUsIDB4N0YyNywgMHg3RjI2LCAweDdENzcsIDB4N0YxNSwgMHg3RjI1LCAweDYwM0IsIDB4N0VFOSwgMHg3RUY3LCAweDdGMkIsIDB4N0YyQSwgMHg3RjJGLCAweDdFQzcsIDB4N0YyRSwNCi0gICAgMHg3RjJELCAweDdFRDUsIDB4N0VFMywgMHg3RjBCLCAweDdFRjMsIDB4N0VEOCwgMHg3Q0ZCLCAweDgzMjcsIDB4N0YzMywgMHg3RjMyLCAweDdGMzQsIDB4N0VDRSwgMHg3RUU3LCAweDdGMjQsIDB4N0YzMSwgMHg3RjJDLA0KLSAgICAweDdFQTksIDB4N0VFRCwgMHg3RjIwLCAweDdGMjgsIDB4N0VBNCwgMHg3RjM1LCAweDdGMDYsIDB4OTRCNSwgMHg3RjQyLCAweDdGNUEsIDB4OUE4MiwgMHg3RjYyLCAweDdGNTcsIDB4N0Y3NCwgMHg3RjgxLCAweDgyODgsDQotICAgIDB4N0Y5RiwgMHg3RkExLCAweDRFNDksIDB4ODFCQiwgMHg0RTYwLCAweDdGQzYsIDB4N0ZEQSwgMHg3RkQ4LCAweDdGRDksIDB4ODAyNywgMHg1NzIzLCAweDk1RkIsIDB4ODA1NCwgMHg4MDZBLCAweDU4RjAsIDB4ODAzOCwNCi0gICAgMHg4MDY5LCAweDgwNDIsIDB4ODA0QywgMHg4MDRELCAweDU0MkMsIDB4ODA0QiwgMHg4MDgzLCAweDgwQzEsIDB4ODEwOSwgMHg4MEVCLCAweDgxMzEsIDB4ODBDMCwgMHg4MEJFLCAweDgwRTgsIDB4ODEzNiwgMHg4MTExLA0KLSAgICAweDgwQkYsIDB4ODExQSwgMHg4MEEwLCAweDgxN0QsIDB4ODE1OCwgMHg4MEE0LCAweDgwRjYsIDB4ODE3QiwgMHg4MEM2LCAweDgxMEQsIDB4ODExMywgMHg4MTM4LCAweDgxMTAsIDB4ODE5MSwgMHg4MTRBLCAweDgwRUEsDQotICAgIDB4ODEwRiwgMHg4MTE0LCAweDgxREMsIDB4NTM2NywgMHg0RTM0LCAweDUzRjAsIDB4NEUwRSwgMHg1MTc0LCAweDRFM0UsIDB4NjVFNywgMHg4MjMxLCAweDgyMjMsIDB4ODIzMCwgMHg4MjNCLCAweDgyNzAsIDB4ODI3MywNCi0gICAgMHg4MkM0LCAweDUyMEQsIDB4ODJDRSwgMHg1MTc5LCAweDgzNDYsIDB4OEM0NiwgMHg1RTg0LCAweDgzMEUsIDB4ODM1QSwgMHg4MkNCLCAweDUzNEUsIDB4NzBERiwgMHg4MkNDLCAweDgzQjEsIDB4NEUwNywgMHg4M0I0LA0KLSAgICAweDUzRjYsIDB4ODM2RCwgMHg3NzQwLCAweDgyQzcsIDB4ODM2NCwgMHg2NDFDLCAweDgzQjMsIDB4ODM4NSwgMHg4MkNELCAweDgzNkEsIDB4NzZENiwgMHg4M0IyLCAweDgyQzEsIDB4ODNCQywgMHg4MzVDLCAweDg0OEMsDQotICAgIDB4ODQ4QiwgMHg4NDcxLCAweDgzMTEsIDB4ODM2QiwgMHg4MzY4LCAweDg0ODcsIDB4ODM1RSwgMHg4MzZDLCAweDgzQjgsIDB4ODM1QiwgMHg4NDg5LCAweDgyOUMsIDB4ODQyNywgMHg4NEUzLCAweDgzNUYsIDB4ODRERiwNCi0gICAgMHg4Mjk3LCAweDU5REMsIDB4ODUzNywgMHg4M0I2LCAweDgzNTAsIDB4ODQyOCwgMHg4MzYwLCAweDUwMUYsIDB4ODRERCwgMHg4MzY5LCAweDgyN0EsIDB4ODM2RiwgMHg4NUFFLCAweDgyQzgsIDB4ODUzQywgMHg4NTNBLA0KLSAgICAweDg0MUEsIDB4ODU3MiwgMHg4MkE2LCAweDgyQ0YsIDB4ODU3NCwgMHg4MkY5LCAweDg2MTYsIDB4ODVEMywgMHg4NTM5LCAweDgzMEYsIDB4NTE3MCwgMHg4NEUwLCAweDg0MUQsIDB4NTkwNCwgMHg4NjVBLCAweDg2NEYsDQotICAgIDB4NTNGNywgMHg0RThGLCAweDg2NkMsIDB4ODZGMSwgMHg4NzE1LCAweDg2QUMsIDB4ODY4MCwgMHg3MzJDLCAweDg2N0UsIDB4ODY3MSwgMHg4NzE3LCAweDg2RjMsIDB4ODY4MiwgMHg4NDI0LCAweDg3N0MsIDB4ODc4MCwNCi0gICAgMHg4NkYwLCAweDg3NDgsIDB4ODdBOCwgMHg4NjZFLCAweDg3NDksIDB4ODZGMiwgMHg4NjZCLCAweDg2Q0YsIDB4ODY4MSwgMHg4NjgzLCAweDg3NDcsIDB4ODY3RiwgMHg4NzRFLCAweDg2RjQsIDB4ODc3RSwgMHg4NjlELA0KLSAgICAweDg3MjEsIDB4ODZDRSwgMHg4N0NGLCAweDg2Q0EsIDB4ODY5NSwgMHg4NkVFLCAweDRGMTcsIDB4NjcyRiwgMHg1MzZCLCAweDUxQjIsIDB4ODg2RSwgMHg4ODg1LCAweDg4NjUsIDB4ODhDNSwgMHg5MUNDLCAweDUyMzYsDQotICAgIDB4NTkwRCwgMHg4OEM4LCAweDg4ODYsIDB4ODhFNCwgMHg4OEUyLCAweDdGMjEsIDB4ODkxQiwgMHg0RUI1LCAweDg4RTUsIDB4ODg4NCwgMHg4OEUzLCAweDg4QzYsIDB4ODkzNCwgMHg4ODlDLCAweDg4NkMsIDB4ODhBRCwNCi0gICAgMHg4OTU1LCAweDg5QzEsIDB4ODlDNCwgMHg4OUM1LCAweDg5QzYsIDB4ODlDNywgMHg4OUNCLCAweDg5Q0QsIDB4ODlDRSwgMHg0RUIyLCAweDg5Q0EsIDB4ODlDRiwgMHg4OUQwLCAweDg5RDEsIDB4ODlDOSwgMHg4OUM4LA0KLSAgICAweDg5Q0MsIDB4ODlDMiwgMHg4OURFLCAweDg5RUYsIDB4ODlFNiwgMHg4QkEyLCAweDhCQTMsIDB4OEJBMSwgMHg4QkFGLCAweDhCQTcsIDB4OEJBOCwgMHg4QkE2LCAweDhCQUQsIDB4OEJBQSwgMHg4QkFCLCAweDhCQUMsDQotICAgIDB4OEJCMCwgMHg4QkI5LCAweDhCQjYsIDB4OEJCQywgMHg4QkMwLCAweDhCQjcsIDB4OEJCRiwgMHg4QkJFLCAweDhCQjgsIDB4OEJDOSwgMHg4QkMzLCAweDhCQ0EsIDB4OEJDMSwgMHg4QkMyLCAweDhCQ0IsIDB4OEJCNSwNCi0gICAgMHg4QkM4LCAweDhCRDIsIDB4OEJDRiwgMHg4QkM0LCAweDhCQ0UsIDB4OEJDNSwgMHg4QkNELCAweDU0OEYsIDB4OEJFOSwgMHg4QkUyLCAweDhCRTMsIDB4OEJENSwgMHg4QkQ3LCAweDhCRTcsIDB4OEJERiwgMHg4QkUxLA0KLSAgICAweDhCRTAsIDB4OEJEOCwgMHg4QkRELCAweDhCRTUsIDB4OEJFNiwgMHg4QkRDLCAweDhCRDksIDB4OEJENiwgMHg4QkQ0LCAweDhCREIsIDB4OEJEMywgMHg1OTM4LCAweDVGRDcsIDB4OEJBNCwgMHg4QkYzLCAweDhCRjYsDQotICAgIDB4OEJERSwgMHg4QkYxLCAweDhCRUUsIDB4OEJFRCwgMHg4QkRBLCAweDhCRUIsIDB4OEJFQywgMHg4QkVGLCAweDhCRjAsIDB4OEJGNSwgMHg4QkYyLCAweDhCRjQsIDB4OEMwMSwgMHg4QkZFLCAweDhDMDcsIDB4OEJGRCwNCi0gICAgMHg4QzBBLCAweDhDMDMsIDB4OEMwNCwgMHg4QzA2LCAweDhDMDgsIDB4OEJGRiwgMHg4QkY3LCAweDhCRTQsIDB4OEJGOSwgMHg4QkZDLCAweDhDMDUsIDB4OEJCQSwgMHg4QzAyLCAweDhDMDAsIDB4OEMwRCwgMHg4QzFFLA0KLSAgICAweDhDMUQsIDB4OEMyNSwgMHg4QkU4LCAweDhDMTQsIDB4OEMxQiwgMHg4QzEwLCAweDhDMEYsIDB4OEMxNSwgMHg4QzE4LCAweDhCQjMsIDB4OEMxOSwgMHg4QzBDLCAweDhCQkQsIDB4OEJGOCwgMHg4QzFBLCAweDhDMTYsDQotICAgIDB4OEJGQSwgMHg4QzBCLCAweDhDMTIsIDB4OEMxMywgMHg4QThBLCAweDhCQ0MsIDB4OEMwRSwgMHg4QzFDLCAweDhDMjcsIDB4OEMxMSwgMHg4QzIxLCAweDhDMjQsIDB4OEMyNiwgMHg4QkIyLCAweDhDMjIsIDB4OEMyMywNCi0gICAgMHg4QzFGLCAweDhDMkEsIDB4OEMyQywgMHg4QkI0LCAweDhDMjgsIDB4OEMyOSwgMHg4QkMxLCAweDhDMzIsIDB4OEJBNSwgMHg4QzJFLCAweDhCQzYsIDB4OEMyRiwgMHg4QzJELCAweDhDMzEsIDB4OEMzNSwgMHg4QkQxLA0KLSAgICAweDhCQUUsIDB4OEMzNCwgMHg2MkE0LCAweDhCRUEsIDB4OEE4OSwgMHg4QzJCLCAweDhCRkIsIDB4NTNEOCwgMHg4QTVGLCAweDk2RTAsIDB4OEMxNywgMHg4QkE5LCAweDhDMzAsIDB4OEMzNiwgMHg4RDVFLCAweDhDMjAsDQotICAgIDB4OEMzMywgMHg1QzgyLCAweDdBRDYsIDB4NEUzMCwgMHg3MzJBLCAweDhDNkUsIDB4NzMyQiwgMHg4RDFELCAweDhEMUUsIDB4OEQxRiwgMHg4RDIyLCAweDhEMjEsIDB4OEQyQiwgMHg4RDI3LCAweDhEMjksIDB4OEQyQSwNCi0gICAgMHg4RDJGLCAweDhEMjMsIDB4OEQyRSwgMHg4RDMzLCAweDhENDAsIDB4OEQzMCwgMHg4RDM1LCAweDhEMkMsIDB4NEU3MCwgMHg4RDM3LCAweDhEMzYsIDB4OEQzOSwgMHg4RDM0LCAweDhEM0IsIDB4OEQzOCwgMHg4RDNBLA0KLSAgICAweDhEMzIsIDB4OEQ0MiwgMHg4RDQxLCAweDhEM0YsIDB4OEQ0NSwgMHg4RDQ0LCAweDhEM0UsIDB4OEQzQywgMHg4RDQ4LCAweDhENEEsIDB4NUJCRSwgMHg4RDQ3LCAweDhENTIsIDB4OEQ0OSwgMHg4RDUwLCAweDhENEYsDQotICAgIDB4OEQ1NCwgMHg4RDUzLCAweDhEMjQsIDB4NTM1NiwgMHg4RDMxLCAweDhENEIsIDB4OEQ1NSwgMHg4RDI4LCAweDhEMjYsIDB4OEQ0QywgMHg4RDU2LCAweDhENTcsIDB4OEQ1QSwgMHg4RDU5LCAweDhEMkQsIDB4OEQ1QiwNCi0gICAgMHg4RDVDLCAweDhEM0QsIDB4OEQ1OCwgMHg4RDVGLCAweDhENjAsIDB4OEQ1RSwgMHg4RDYxLCAweDhENjIsIDB4OEQ0NiwgMHg4RDQzLCAweDhENTEsIDB4OEQ0RSwgMHg4RDVELCAweDhENjMsIDB4OEQ2QSwgMHg4RDc2LA0KLSAgICAweDhENzUsIDB4OEQ4QiwgMHg4REIxLCAweDhGRjksIDB4OERGNSwgMHg4RTBBLCAweDhEQzQsIDB4OERGOCwgMHg4REQ2LCAweDhFNTIsIDB4OERGNywgMHg4REY2LCAweDhEQjgsIDB4OEUwQywgMHg4REZCLCAweDhEQzMsDQotICAgIDB4OEUyRiwgMHg4RERFLCAweDhFMkMsIDB4OEU3MCwgMHg4REY5LCAweDhFNTEsIDB4OEU3RiwgMHg4RTlDLCAweDhFOEYsIDB4OEVBRiwgMHg4RjY2LCAweDhGNjcsIDB4OEY2OCwgMHg1MTlCLCAweDhGNjksIDB4OEY2QiwNCi0gICAgMHg4RjZELCAweDhGNkYsIDB4OEY3OCwgMHg4RjcxLCAweDhGNzQsIDB4OEY3NSwgMHg4RjdBLCAweDhGNzIsIDB4OEY3NiwgMHg4RjdDLCAweDhGODMsIDB4OEY4MiwgMHg4RjgxLCAweDhGODAsIDB4OEY3RCwgMHg4RjdFLA0KLSAgICAweDhGODQsIDB4OEY4NSwgMHg4RjdCLCAweDhGODYsIDB4OEY4RSwgMHg4Rjg5LCAweDhGOEIsIDB4OEY4RCwgMHg4RjhBLCAweDhGODcsIDB4OEY4OCwgMHg4RjZFLCAweDhGOTEsIDB4OEY4RiwgMHg4RjkzLCAweDhGOTAsDQotICAgIDB4OEY5NywgMHg4MjA2LCAweDhGOTIsIDB4NkJDMiwgMHg4Rjk2LCAweDhGOTUsIDB4OEY5OCwgMHg4RjZDLCAweDhGOTksIDB4OEY3RiwgMHg4RjlBLCAweDhGNzAsIDB4OEY5NCwgMHg4Rjc5LCAweDhGNzMsIDB4NTI5RSwNCi0gICAgMHg4RjlFLCAweDhGQUIsIDB4OEZBOSwgMHg1MTlDLCAweDhGRDksIDB4OEZERSwgMHg1NDY4LCAweDhGREIsIDB4NkUzOCwgMHg4RkQwLCAweDhGQzcsIDB4OEZCRSwgMHg4RkRELCAweDkwNjUsIDB4OTAwQSwgMHg5MDEyLA0KLSAgICAweDhGREMsIDB4OTAwMiwgMHg4RkRGLCAweDhGQzEsIDB4OTAwOSwgMHg5MDU3LCAweDhGQkQsIDB4OEZDOCwgMHg4RkQ4LCAweDhGRTksIDB4OEZCOSwgMHg5MDNCLCAweDkwMjYsIDB4OTBDRiwgMHg5MEFFLCAweDkwRDMsDQotICAgIDB4NEU2MSwgMHg5MEI5LCAweDkwQUMsIDB4OTBFNywgMHg5MDkzLCAweDkwRDEsIDB4OTBCQiwgMHg5MEY4LCAweDkwQkEsIDB4OTBEMCwgMHg5MDlELCAweDkxNDIsIDB4OTBFNiwgMHg4MTRDLCAweDRFMTEsIDB4OTE1RCwNCi0gICAgMHg1MzNCLCAweDkxNzEsIDB4OTE2NiwgMHg5MTdGLCAweDg4NDUsIDB4OTE3RSwgMHg5MTdELCAweDkxQ0EsIDB4OTQ4NywgMHg5NDhDLCAweDk0OEEsIDB4OTQ4OSwgMHg5NDhCLCAweDk0ODgsIDB4OTQ5MywgMHg5NDkwLA0KLSAgICAweDk0OEYsIDB4OTQ5MiwgMHg5NDhFLCAweDk0OTcsIDB4OTQ4RCwgMHg5NDk1LCAweDk0QUYsIDB4OTRBQiwgMHg5NDk4LCAweDk0QUQsIDB4OTRBMCwgMHg5NDlELCAweDk0QTQsIDB4OTRBMywgMHg5NDlFLCAweDk0QUUsDQotICAgIDB4OTRBNywgMHg5NDk5LCAweDk0OUIsIDB4OTRBQSwgMHg5NENDLCAweDk0QzgsIDB4OTRCNiwgMHg5NEMzLCAweDk0QjQsIDB4OTRCOSwgMHg5NENELCAweDk0QjAsIDB4OTRCOCwgMHg5NEMwLCAweDk0QkYsIDB4OTRCRSwNCi0gICAgMHg5NDlDLCAweDk0Q0EsIDB4OTRDOSwgMHg5NEM3LCAweDk0Q0IsIDB4OTRDMiwgMHg5NEIzLCAweDk0QzYsIDB4OTRDNSwgMHg5NEJBLCAweDk0QTksIDB4OTRCMiwgMHg5NEJDLCAweDk0QkQsIDB4OTRDRiwgMHg5NEYwLA0KLSAgICAweDk0RDIsIDB4OTRFQywgMHg5NEVBLCAweDk0RjYsIDB4OTRGMywgMHg5NERDLCAweDk0REEsIDB4OTRFMywgMHg5NEU4LCAweDk0RTIsIDB4OTRFRCwgMHg5NEVCLCAweDk0RTYsIDB4ODg1NCwgMHg5NEQxLCAweDk0RjcsDQotICAgIDB4OTRGMSwgMHg5NERGLCAweDk0RjUsIDB4OTRENSwgMHg5NEVGLCAweDk0RDAsIDB4OTUxMCwgMHg5NTAwLCAweDk1MDgsIDB4OTUxMSwgMHg5NTA5LCAweDk0REQsIDB4OTUxMiwgMHg5NTBDLCAweDk0QTEsIDB4OTRFNCwNCi0gICAgMHg5NEQ3LCAweDk1MEIsIDB4OTUwQSwgMHg5NTEzLCAweDk1MDQsIDB4OTUwMywgMHg5NTE0LCAweDk1MDcsIDB4OTREMywgMHg5NEZBLCAweDk0RDYsIDB4OTUwNiwgMHg5NTAyLCAweDk1MkYsIDB4OTRBMiwgMHg5NTFFLA0KLSAgICAweDVGNTUsIDB4OTUxNiwgMHg5NTI5LCAweDk0RDQsIDB4OTUyNSwgMHg5NTE1LCAweDk1MUYsIDB4OTUyNCwgMHg5NTMxLCAweDk0RUUsIDB4OTUxQiwgMHg5NTJDLCAweDk1MkQsIDB4OTUxQywgMHg5NEIxLCAweDk1MjYsDQotICAgIDB4OTUxQSwgMHg5NTIwLCAweDk1MjEsIDB4OTUyMiwgMHg5NTE5LCAweDk1MzAsIDB4ODg2OCwgMHg5NEZDLCAweDk1MjgsIDB4OTQ5NCwgMHg5NTM0LCAweDk0RkUsIDB4OTUwNSwgMHg5NTQwLCAweDk1MzcsIDB4OTRFMSwNCi0gICAgMHg5NDk2LCAweDk1M0IsIDB4OTUzRCwgMHg5NTM4LCAweDk1MzIsIDB4OTUzOSwgMHg5NTNFLCAweDk1MkUsIDB4OTUzNiwgMHg5NTE3LCAweDk1M0EsIDB4OTU0MSwgMHg5NTUxLCAweDk1NTUsIDB4OTUwMSwgMHg5NTQ5LA0KLSAgICAweDk1NDgsIDB4OTU0MywgMHg5NEE4LCAweDg0RTUsIDB4OTU0RiwgMHg5NEUwLCAweDk0RTksIDB4OTUzQywgMHg5NTUwLCAweDk1NDcsIDB4OTU1MiwgMHg5NTRELCAweDk1NTMsIDB4OTU1RSwgMHg5NTVGLCAweDk0RkUsDQotICAgIDB4OTU0NiwgMHg5NTU5LCAweDk1NjAsIDB4OTU1RCwgMHg5NEZGLCAweDk1MzUsIDB4OTU1NywgMHg5NTU4LCAweDk1NUIsIDB4OTRGMiwgMHg5NTVDLCAweDk1NTYsIDB4OTU0MiwgMHg5MzNFLCAweDk1NUEsIDB4OTRFNywNCi0gICAgMHg5NTZBLCAweDk1MDgsIDB4OTREOSwgMHg5NTYzLCAweDk1NjYsIDB4OTU2MSwgMHg5NDlGLCAweDk1NkIsIDB4OTUwRiwgMHg5NTQ0LCAweDk1NEMsIDB4OTU3MCwgMHg5NTZGLCAweDk1NkQsIDB4OTRDMSwgMHg5NTZFLA0KLSAgICAweDk0Q0UsIDB4OTREQiwgMHg5NTcxLCAweDk0RjgsIDB4OTU2QywgMHg5NTU0LCAweDkyNzQsIDB4OTUyNywgMHg5NTc0LCAweDk0QzQsIDB4OTU3MywgMHg5NTY3LCAweDk0QTUsIDB4OTU3NSwgMHg5NTc2LCAweDk1NEEsDQotICAgIDB4OTU2OSwgMHg5NTIzLCAweDk0QkIsIDB4OTJBRSwgMHg1MUZGLCAweDk1N0YsIDB4OTVFOCwgMHg5NUU5LCAweDk1RUEsIDB4OTVFQiwgMHg5NUVDLCAweDk1RUQsIDB4NUYwMCwgMHg5NUY2LCAweDk1RjMsIDB4OTVGMCwNCi0gICAgMHg5NUYyLCAweDk1RjQsIDB4OTVGNSwgMHg5NUY4LCAweDk2MDIsIDB4OTYwMSwgMHg5NjAwLCAweDk1RkEsIDB4OTVGRCwgMHg5NjAzLCAweDk2MDYsIDB4OTVGRSwgMHg5NjA1LCAweDk2MEEsIDB4OTYwOSwgMHg5NjBFLA0KLSAgICAweDk2MEYsIDB4OTYwRCwgMHg5NjA4LCAweDk2MEMsIDB4OTYxMiwgMHg2NzdGLCAweDY2OTcsIDB4OTVGMSwgMHg5NjE0LCAweDk2MTUsIDB4OTYxMSwgMHg5NjE3LCAweDk2MTgsIDB4OTVGRiwgMHg5NjE2LCAweDk2MTksDQotICAgIDB4OTVFRiwgMHg1MTczLCAweDk2MUEsIDB4OTYxMywgMHg5NjEwLCAweDhGOUYsIDB4OTYxQiwgMHg5NUZDLCAweDk2NDksIDB4OTY1NSwgMHg5NjM1LCAweDk2MzQsIDB4OTY0OCwgMHg5NjQ2LCAweDk2MzMsIDB4OTY2NywNCi0gICAgMHg5NjFGLCAweDk2MzYsIDB4OTY2OCwgMHg5NjQ1LCAweDk2OEYsIDB4OTY2OSwgMHg5NjkwLCAweDk2NDcsIDB4OTZCNiwgMHg1M0VBLCAweDk2QkQsIDB4ODY3RCwgMHg1M0NDLCAweDk2Q0YsIDB4Njc0MiwgMHg5RTIxLA0KLSAgICAweDc5QkIsIDB4OTZCRSwgMHg0RTkxLCAweDc1MzUsIDB4OTcyMSwgMHg5NkZFLCAweDk3MDEsIDB4OTZGMywgMHg5NzJELCAweDUzQzcsIDB4NzA3NSwgMHg1M0M2LCAweDk3NTMsIDB4OTc1OSwgMHg4MTdDLCAweDk3NjUsDQotICAgIDB4OUYxNywgMHg1REU5LCAweDk3OUYsIDB4N0YzMCwgMHg5NzkxLCAweDk3QUYsIDB4OTdFNiwgMHg5N0U3LCAweDk3RTksIDB4OTdFQSwgMHg5N0VDLCAweDk3RUIsIDB4OTdGNSwgMHg1NENELCAweDk4NzUsIDB4OTg3NiwNCi0gICAgMHg5ODc3LCAweDk4NzksIDB4OTg3QSwgMHg5ODc4LCAweDk4N0IsIDB4OTg3QywgMHg5ODgyLCAweDk4ODAsIDB4OTg4MywgMHg5ODg0LCAweDk4N0QsIDB4OTg4MSwgMHg5ODdGLCAweDk4ODcsIDB4OTg4NiwgMHg5ODhDLA0KLSAgICAweDk4ODksIDB4OTg5MCwgMHg5ODhGLCAweDU5MzQsIDB4OTg4QSwgMHg5ODhCLCAweDk4OTQsIDB4OTg4OCwgMHg5ODkzLCAweDk4OTEsIDB4OTg5NywgMHg5ODk4LCAweDk4OUQsIDB4OTg5QSwgMHg5ODlDLCAweDk4OTksDQotICAgIDB4OTg5QiwgMHg2MTNGLCAweDk4QTEsIDB4OThBMCwgMHg3QzdCLCAweDk4OUYsIDB4OThBMiwgMHg5ODdFLCAweDk4QTQsIDB4OThBNSwgMHg2NjNFLCAweDk4QTYsIDB4OTg4NSwgMHg5ODlFLCAweDk4QTcsIDB4OThDRSwNCi0gICAgMHg5OEQwLCAweDk4RDEsIDB4OThEMiwgMHg1M0YwLCAweDk4RDMsIDB4OThENCwgMHg5OENGLCAweDk4RDYsIDB4OThENSwgMHg5OEQ3LCAweDk4RDgsIDB4OThEOSwgMHg5OERFLCAweDk5NjUsIDB4OTk2NCwgMHg5OTY2LA0KLSAgICAweDk5NjgsIDB4OTk2QSwgMHg5OTZCLCAweDk5NkMsIDB4OTk2RCwgMHg5OTZFLCAweDk5NzQsIDB4OTk3MiwgMHg5OTcxLCAweDk5NzAsIDB4OTk3MywgMHg5OTdBLCAweDk5NzgsIDB4OTk3QywgMHg5OTc3LCAweDUxN0IsDQotICAgIDB4OTk3NSwgMHg5OTc5LCAweDk5N0QsIDB4OTk4MSwgMHg5OTdGLCAweDk5N0UsIDB4NEY1OSwgMHg4MEI0LCAweDk5ODQsIDB4OTk4MywgMHg5OTZGLCAweDk5ODUsIDB4OTk4NiwgMHg3Q0M3LCAweDk5NjcsIDB4NTU4MiwNCi0gICAgMHg5OTg5LCAweDk5OEUsIDB4OTk2OSwgMHg5OThGLCAweDk5OEEsIDB4OTk4QywgMHg5OThELCAweDk5OTIsIDB4OTk5MCwgMHg5OTkxLCAweDk5ODgsIDB4OTk5NCwgMHg5OTc2LCAweDk4RTgsIDB4OTkwRCwgMHg5OThCLA0KLSAgICAweDlBNkMsIDB4OUE2RCwgMHg1MUFGLCAweDlBNkUsIDB4OUE3MCwgMHg5QTZGLCAweDlBNzMsIDB4OUE3QiwgMHg5QTdELCAweDlBNzksIDB4OUE3NSwgMHg5QTdFLCAweDlBODAsIDB4OUE3OCwgMHg5QTc2LCAweDlBN0MsDQotICAgIDB4OUE3NywgMHg5QTg4LCAweDlBODcsIDB4OUE4MywgMHg5QTg2LCAweDlBOEUsIDB4OUE4RiwgMHg5QThCLCAweDlBOEQsIDB4OUE5MywgMHg5QTkyLCAweDlBOTEsIDB4OUE5MCwgMHg5QTlCLCAweDlBOTcsIDB4OUE5OSwNCi0gICAgMHg5QTlFLCAweDlBOTgsIDB4OUE5RCwgMHg4MTdFLCAweDlBN0EsIDB4OUE5QSwgMHg5QTlGLCAweDlBQTEsIDB4ODRFNiwgMHg5QTlDLCAweDlBOTYsIDB4OUFBMCwgMHg5QUEyLCAweDlBNzEsIDB4OUE4NSwgMHg5QTk1LA0KLSAgICAweDlBODEsIDB4OUE4NCwgMHg5QThDLCAweDYwQ0EsIDB4OUE3RiwgMHg5QUE0LCAweDlBNzQsIDB4OUFBNywgMHg5QUE1LCAweDlBQTYsIDB4OUE4QSwgMHg4MEFFLCAweDlBQzUsIDB4ODEwRiwgMHg0RjUzLCAweDlBQ0MsDQotICAgIDB4OUFDQiwgMHg1M0QxLCAweDY3N0UsIDB4ODBFMSwgMHg5QjEzLCAweDY1OTcsIDB4OTVGOSwgMHg5NjBCLCAweDk2MDQsIDB4OTBDMSwgMHg5QjQ5LCAweDlCNDcsIDB4OUM3QywgMHg5QzgwLCAweDlDODEsIDB4OUM4MiwNCi0gICAgMHg5QzdGLCAweDlDODUsIDB4OUM4NiwgMHg5QzhGLCAweDlDODcsIDB4OUM5MCwgMHg5QzhELCAweDlDOEIsIDB4OUM4QSwgMHg5QzkyLCAweDlDOTUsIDB4OUM5NiwgMHg5Qzk0LCAweDlDOUIsIDB4OUM5MSwgMHg5QzlDLA0KLSAgICAweDlDQTcsIDB4OUNBMCwgMHg5Q0E5LCAweDlDQTQsIDB4OUNBOCwgMHg5Q0JCLCAweDlDQUYsIDB4OUNBRCwgMHg5QzlFLCAweDlDQjcsIDB4OUNCNCwgMHg5Q0IxLCAweDlDQjUsIDB4OUNCMiwgMHg5Q0IzLCAweDlDQjgsDQotICAgIDB4OUNBRSwgMHg5Q0IwLCAweDlDQjYsIDB4OUNBQiwgMHg5Q0NBLCAweDlDOTcsIDB4OUNCRCwgMHg5Q0M3LCAweDlDQzUsIDB4OUNDNiwgMHg5Q0MzLCAweDlDRDIsIDB4OUNEMSwgMHg5Q0E1LCAweDlDQ0YsIDB4OUNDRSwNCi0gICAgMHg5Q0QwLCAweDlDQ0QsIDB4OUNDMSwgMHg5Q0EyLCAweDlDQ0MsIDB4OUNBNiwgMHg5Q0EzLCAweDlDQjksIDB4OUNENywgMHg5Q0Q0LCAweDlDQzksIDB4OUNENSwgMHg5Q0Q2LCAweDlDREYsIDB4OUNERCwgMHg5Q0RDLA0KLSAgICAweDlDREUsIDB4OUM5RiwgMHg5Q0JDLCAweDlDOEUsIDB4OUM5OSwgMHg5Q0UzLCAweDlDRTIsIDB4OUM5QSwgMHg5Q0M0LCAweDlDODgsIDB4OUNBMSwgMHg5RTFGLCAweDUxRUIsIDB4OUUyMCwgMHg5RTI0LCAweDUxRTQsDQotICAgIDB4OUUyMywgMHg5RTIyLCAweDlFMjksIDB4OUUyOCwgMHg5RTI2LCAweDlFMzAsIDB4OUUzNSwgMHg5RTMzLCAweDlFMzIsIDB4OUUyRSwgMHg5RTMxLCAweDlFMkEsIDB4OUUyRiwgMHg5RTJELCAweDlFMzgsIDB4OUUzOSwNCi0gICAgMHg5RTNCLCAweDlFM0YsIDB4OUUzRCwgMHg5RTNBLCAweDlFNDMsIDB4OUU0NiwgMHg5RTQxLCAweDlFNDgsIDB4OUU0NSwgMHg5RTQ0LCAweDlFNDksIDB4OUU0QywgMHg5RTRGLCAweDlFNEUsIDB4OUU0QSwgMHg5RTUzLA0KLSAgICAweDlFMkIsIDB4OUU1MSwgMHg5RTRCLCAweDlFNTksIDB4OUU1NSwgMHg5RTU3LCAweDlFNTYsIDB4OUU0RCwgMHg5RTVCLCAweDlFNUMsIDB4ODNCQSwgMHg5RTVGLCAweDlFNjQsIDB4OUU2MCwgMHg5RTYxLCAweDlFNTgsDQotICAgIDB4OUU2MywgMHg5RTVBLCAweDlFNjIsIDB4OUU1RSwgMHg5RTY3LCAweDlFNjUsIDB4OUUyNSwgMHg5RTM3LCAweDlFNjgsIDB4OUUzNiwgMHg5RTZBLCAweDlFNTQsIDB4OUU2OSwgMHg5RTZCLCAweDlFNDcsIDB4OUU2QywNCi0gICAgMHg5RTcwLCAweDlFNkQsIDB4OUU2RiwgMHg5RTJDLCAweDlFNzQsIDB4OUU2NiwgMHg5RTczLCAweDlFNDIsIDB4OUUzRSwgMHg1MzY0LCAweDlFN0UsIDB4Nzg3NywgMHg3NkQwLCAweDRFM0QsIDB4OUVBNiwgMHg5RUI4LA0KLSAgICAweDlFQjksIDB4OTc2MiwgMHg0RTQ4LCAweDlFQzQsIDB4OUVDOSwgMHg3MEI5LCAweDUxNUEsIDB4OTcwOSwgMHg5RUUxLCAweDlFRTksIDB4OUVGRSwgMHg5RjBCLCAweDlGMEQsIDB4OUYzOSwgMHg5RjUwLCAweDY1OEIsDQotICAgIDB4OEQ0RCwgMHg5RjUxLCAweDlGN0YsIDB4OUY4MCwgMHg5RjgxLCAweDlGODUsIDB4OUY4NywgMHg5RjgzLCAweDlGODYsIDB4OUY4NCwgMHg5Rjg4LCAweDlGOEEsIDB4OUY4OSwgMHg5RjhCLCAweDlGOEMsIDB4OUY5OSwNCi0gICAgMHg1MzkwLCAweDVFOUUsIDB4OUY5QSwgMHg5RjlCLCAweDlGOUYsIDB4QTc2RiwgMHg4QzQ4LCAweDY2RjQsIDB4OEVDQSwgMHg4Q0M4LCAweDZFRDEsIDB4NEUzMiwgMHg1M0U1LCAweDlGOUMsIDB4OUY5QywgMHg1OTUxLA0KLSAgICAweDkxRDEsIDB4NTU4NywgMHg1OTQ4LCAweDYxRjYsIDB4NzY2OSwgMHg3Rjg1LCAweDg2M0YsIDB4ODdCQSwgMHg4OEY4LCAweDkwOEYsIDB4NkEwMiwgMHg2RDFCLCAweDcwRDksIDB4NzNERSwgMHg4NDNELCAweDkxNkEsDQotICAgIDB4OTlGMSwgMHg0RTgyLCAweDUzNzUsIDB4NkIwNCwgMHg3MjFCLCAweDg2MkQsIDB4OUUxRSwgMHg1RDUwLCAweDZGRUIsIDB4ODVDRCwgMHg4OTY0LCAweDYyQzksIDB4ODFEOCwgMHg4ODFGLCAweDVFQ0EsIDB4NjcxNywNCi0gICAgMHg2RDZBLCAweDcyRkMsIDB4OTBDRSwgMHg0Rjg2LCAweDUxQjcsIDB4NTJERSwgMHg2NEM0LCAweDZBRDMsIDB4NzIxMCwgMHg3NkU3LCAweDgwMDEsIDB4ODYwNiwgMHg4NjVDLCAweDhERUYsIDB4OTczMiwgMHg5QjZGLA0KLSAgICAweDlERkEsIDB4Nzg4QywgMHg3OTdGLCAweDdEQTAsIDB4ODNDOSwgMHg5MzA0LCAweDlFN0YsIDB4OEFENiwgMHg1OERGLCAweDVGMDQsIDB4N0M2MCwgMHg4MDdFLCAweDcyNjIsIDB4NzhDQSwgMHg4Q0MyLCAweDk2RjcsDQotICAgIDB4NThEOCwgMHg1QzYyLCAweDZBMTMsIDB4NkREQSwgMHg2RjBGLCAweDdEMkYsIDB4N0UzNywgMHg5NjRCLCAweDUyRDIsIDB4ODA4QiwgMHg1MURDLCAweDUxQ0MsIDB4N0ExQywgMHg3REJFLCAweDgzRjEsIDB4OTY3NSwNCi0gICAgMHg4QjgwLCAweDYyQ0YsIDB4NkEwMiwgMHg4QUZFLCAweDRFMzksIDB4NUJFNywgMHg2MDEyLCAweDczODcsIDB4NzU3MCwgMHg1MzE3LCAweDc4RkIsIDB4NEZCRiwgMHg1RkE5LCAweDRFMEQsIDB4NkNDQywgMHg2NTc4LA0KLSAgICAweDdEMjIsIDB4NTNDMywgMHg1ODVFLCAweDc3MDEsIDB4ODQ0OSwgMHg4QUFBLCAweDZCQkEsIDB4OEZCMCwgMHg2Qzg4LCAweDYyRkUsIDB4ODJFNSwgMHg2M0EwLCAweDc1NjUsIDB4NEVBRSwgMHg1MTY5LCAweDUxQzksDQotICAgIDB4Njg4MSwgMHg3Q0U3LCAweDgyNkYsIDB4OEFEMiwgMHg5MUNGLCAweDUyRjUsIDB4NTQ0MiwgMHg1OTczLCAweDVFRUMsIDB4NjVDNSwgMHg2RkZFLCAweDc5MkEsIDB4OTVBRCwgMHg5QTZBLCAweDlFOTcsIDB4OUVDRSwNCi0gICAgMHg1MjlCLCAweDY2QzYsIDB4NkI3NywgMHg4RjYyLCAweDVFNzQsIDB4NjE5MCwgMHg2MjAwLCAweDY0OUEsIDB4NkYyMywgMHg3MTQ5LCAweDc0ODksIDB4NzlDQSwgMHg3REY0LCAweDgwNkYsIDB4OEYyNiwgMHg4NEVFLA0KLSAgICAweDkwMjMsIDB4OTM0QSwgMHg1MjE3LCAweDUyQTMsIDB4NTRCRCwgMHg3MEM4LCAweDg4QzIsIDB4OEFBQSwgMHg1RUM5LCAweDVGRjUsIDB4NjM3QiwgMHg2QkFFLCAweDdDM0UsIDB4NzM3NSwgMHg0RUU0LCAweDU2RjksDQotICAgIDB4NUJFNywgMHg1REJBLCAweDYwMUMsIDB4NzNCMiwgMHg3NDY5LCAweDdGOUEsIDB4ODA0NiwgMHg5MjM0LCAweDk2RjYsIDB4OTc0OCwgMHg5ODE4LCAweDRGOEIsIDB4NzlBRSwgMHg5MUI0LCAweDk2QjgsIDB4NjBFMSwNCi0gICAgMHg0RTg2LCAweDUwREEsIDB4NUJFRSwgMHg1QzNGLCAweDY1OTksIDB4NkEwMiwgMHg3MUNFLCAweDc2NDIsIDB4ODRGQywgMHg5MDdDLCAweDlGOEQsIDB4NjY4OCwgMHg5NjJFLCAweDUyODksIDB4Njc3QiwgMHg2N0YzLA0KLSAgICAweDZENDEsIDB4NkU5QywgMHg3NDA5LCAweDc1NTksIDB4Nzg2QiwgMHg3RDEwLCAweDk4NUUsIDB4NTE2RCwgMHg2MjJFLCAweDk2NzgsIDB4NTAyQiwgMHg1RDE5LCAweDZERUEsIDB4OEYyQSwgMHg1RjhCLCAweDYxNDQsDQotICAgIDB4NjgxNywgMHg3Mzg3LCAweDk2ODYsIDB4NTIyOSwgMHg1NDBGLCAweDVDNjUsIDB4NjYxMywgMHg2NzRFLCAweDY4QTgsIDB4NkNFNSwgMHg3NDA2LCAweDc1RTIsIDB4N0Y3OSwgMHg4OENGLCAweDg4RTEsIDB4OTFDQywNCi0gICAgMHg5NkUyLCAweDUzM0YsIDB4NkVCQSwgMHg1NDFELCAweDcxRDAsIDB4NzQ5OCwgMHg4NUZBLCAweDk2QTMsIDB4OUM1NywgMHg5RTlGLCAweDY3OTcsIDB4NkRDQiwgMHg4MUU4LCAweDdBQ0IsIDB4N0IyMCwgMHg3QzkyLA0KLSAgICAweDcyQzAsIDB4NzA5OSwgMHg4QjU4LCAweDRFQzAsIDB4ODMzNiwgMHg1MjNBLCAweDUyMDcsIDB4NUVBNiwgMHg2MkQzLCAweDdDRDYsIDB4NUI4NSwgMHg2RDFFLCAweDY2QjQsIDB4OEYzQiwgMHg4ODRDLCAweDk2NEQsDQotICAgIDB4ODk4QiwgMHg1RUQzLCAweDUxNDAsIDB4NTVDMCwgMHg1ODVBLCAweDY2NzQsIDB4NTFERSwgMHg3MzJBLCAweDc2Q0EsIDB4NzkzQywgMHg3OTVFLCAweDc5NjUsIDB4Nzk4RiwgMHg5NzU2LCAweDdDQkUsIDB4N0ZCRCwNCi0gICAgMHg4NjEyLCAweDhBRjgsIDB4OTAzOCwgMHg5MEZELCAweDk4RUYsIDB4OThGQywgMHg5OTI4LCAweDlEQjQsIDB4NEZBRSwgMHg1MEU3LCAweDUxNEQsIDB4NTJDOSwgMHg1MkU0LCAweDUzNTEsIDB4NTU5RCwgMHg1NjA2LA0KLSAgICAweDU2NjgsIDB4NTg0MCwgMHg1OEE4LCAweDVDNjQsIDB4NUM2RSwgMHg2MDk0LCAweDYxNjgsIDB4NjE4RSwgMHg2MUYyLCAweDY1NEYsIDB4NjVFMiwgMHg2NjkxLCAweDY4ODUsIDB4NkQ3NywgMHg2RTFBLCAweDZGMjIsDQotICAgIDB4NzE2RSwgMHg3MjJCLCAweDc0MjIsIDB4Nzg5MSwgMHg3OTNFLCAweDc5NDksIDB4Nzk0OCwgMHg3OTUwLCAweDc5NTYsIDB4Nzk1RCwgMHg3OThELCAweDc5OEUsIDB4N0E0MCwgMHg3QTgxLCAweDdCQzAsIDB4N0RGNCwNCi0gICAgMHg3RTA5LCAweDdFNDEsIDB4N0Y3MiwgMHg4MDA1LCAweDgxRUQsIDB4ODI3OSwgMHg4Mjc5LCAweDg0NTcsIDB4ODkxMCwgMHg4OTk2LCAweDhCMDEsIDB4OEIzOSwgMHg4Q0QzLCAweDhEMDgsIDB4OEZCNiwgMHg5MDM4LA0KLSAgICAweDk2RTMsIDB4OTdGRiwgMHg5ODNCLCAweDYwNzUsIDB4ODIxOCwgMHg0RTI2LCAweDUxQjUsIDB4NTE2OCwgMHg0RjgwLCAweDUxNDUsIDB4NTE4MCwgMHg1MkM3LCAweDUyRkEsIDB4NTU5RCwgMHg1NTU1LCAweDU1OTksDQotICAgIDB4NTVFMiwgMHg1ODVBLCAweDU4QjMsIDB4NTk0NCwgMHg1OTU0LCAweDVBNjIsIDB4NUIyOCwgMHg1RUQyLCAweDVFRDksIDB4NUY2OSwgMHg1RkFELCAweDYwRDgsIDB4NjE0RSwgMHg2MTA4LCAweDYxOEUsIDB4NjE2MCwNCi0gICAgMHg2MUYyLCAweDYyMzQsIDB4NjNDNCwgMHg2NDFDLCAweDY0NTIsIDB4NjU1NiwgMHg2Njc0LCAweDY3MTcsIDB4NjcxQiwgMHg2NzU2LCAweDZCNzksIDB4NkJCQSwgMHg2RDQxLCAweDZFREIsIDB4NkVDQiwgMHg2RjIyLA0KLSAgICAweDcwMUUsIDB4NzE2RSwgMHg3N0E3LCAweDcyMzUsIDB4NzJBRiwgMHg3MzJBLCAweDc0NzEsIDB4NzUwNiwgMHg3NTNCLCAweDc2MUQsIDB4NzYxRiwgMHg3NkNBLCAweDc2REIsIDB4NzZGNCwgMHg3NzRBLCAweDc3NDAsDQotICAgIDB4NzhDQywgMHg3QUIxLCAweDdCQzAsIDB4N0M3QiwgMHg3RDVCLCAweDdERjQsIDB4N0YzRSwgMHg4MDA1LCAweDgzNTIsIDB4ODNFRiwgMHg4Nzc5LCAweDg5NDEsIDB4ODk4NiwgMHg4OTk2LCAweDhBQkYsIDB4OEFGOCwNCi0gICAgMHg4QUNCLCAweDhCMDEsIDB4OEFGRSwgMHg4QUVELCAweDhCMzksIDB4OEI4QSwgMHg4RDA4LCAweDhGMzgsIDB4OTA3MiwgMHg5MTk5LCAweDkyNzYsIDB4OTY3QywgMHg5NkUzLCAweDk3NTYsIDB4OTdEQiwgMHg5N0ZGLA0KLSAgICAweDk4MEIsIDB4OTgzQiwgMHg5QjEyLCAweDlGOUMsIDB4M0I5RCwgMHg0MDE4LCAweDQwMzksIDB4OUY0MywgMHg5RjhFLCAweDA1RTIsIDB4MDVEMCwgMHgwNUQzLCAweDA1RDQsIDB4MDVEQiwgMHgwNURDLCAweDA1REQsDQotICAgIDB4MDVFOCwgMHgwNUVBLCAweDAwMkIsIDB4MDY3MSwgMHgwNjcxLCAweDA2N0IsIDB4MDY3QiwgMHgwNjdCLCAweDA2N0IsIDB4MDY3RSwgMHgwNjdFLCAweDA2N0UsIDB4MDY3RSwgMHgwNjgwLCAweDA2ODAsIDB4MDY4MCwNCi0gICAgMHgwNjgwLCAweDA2N0EsIDB4MDY3QSwgMHgwNjdBLCAweDA2N0EsIDB4MDY3RiwgMHgwNjdGLCAweDA2N0YsIDB4MDY3RiwgMHgwNjc5LCAweDA2NzksIDB4MDY3OSwgMHgwNjc5LCAweDA2QTQsIDB4MDZBNCwgMHgwNkE0LA0KLSAgICAweDA2QTQsIDB4MDZBNiwgMHgwNkE2LCAweDA2QTYsIDB4MDZBNiwgMHgwNjg0LCAweDA2ODQsIDB4MDY4NCwgMHgwNjg0LCAweDA2ODMsIDB4MDY4MywgMHgwNjgzLCAweDA2ODMsIDB4MDY4NiwgMHgwNjg2LCAweDA2ODYsDQotICAgIDB4MDY4NiwgMHgwNjg3LCAweDA2ODcsIDB4MDY4NywgMHgwNjg3LCAweDA2OEQsIDB4MDY4RCwgMHgwNjhDLCAweDA2OEMsIDB4MDY4RSwgMHgwNjhFLCAweDA2ODgsIDB4MDY4OCwgMHgwNjk4LCAweDA2OTgsIDB4MDY5MSwNCi0gICAgMHgwNjkxLCAweDA2QTksIDB4MDZBOSwgMHgwNkE5LCAweDA2QTksIDB4MDZBRiwgMHgwNkFGLCAweDA2QUYsIDB4MDZBRiwgMHgwNkIzLCAweDA2QjMsIDB4MDZCMywgMHgwNkIzLCAweDA2QjEsIDB4MDZCMSwgMHgwNkIxLA0KLSAgICAweDA2QjEsIDB4MDZCQSwgMHgwNkJBLCAweDA2QkIsIDB4MDZCQiwgMHgwNkJCLCAweDA2QkIsIDB4MDZDMCwgMHgwNkMwLCAweDA2QzEsIDB4MDZDMSwgMHgwNkMxLCAweDA2QzEsIDB4MDZCRSwgMHgwNkJFLCAweDA2QkUsDQotICAgIDB4MDZCRSwgMHgwNkQyLCAweDA2RDIsIDB4MDZEMywgMHgwNkQzLCAweDA2QUQsIDB4MDZBRCwgMHgwNkFELCAweDA2QUQsIDB4MDZDNywgMHgwNkM3LCAweDA2QzYsIDB4MDZDNiwgMHgwNkM4LCAweDA2QzgsIDB4MDY3NywNCi0gICAgMHgwNkNCLCAweDA2Q0IsIDB4MDZDNSwgMHgwNkM1LCAweDA2QzksIDB4MDZDOSwgMHgwNkQwLCAweDA2RDAsIDB4MDZEMCwgMHgwNkQwLCAweDA2NDksIDB4MDY0OSwgMHgwNkNDLCAweDA2Q0MsIDB4MDZDQywgMHgwNkNDLA0KLSAgICAweDAwMkMsIDB4MzAwMSwgMHgzMDAyLCAweDAwM0EsIDB4MDAzQiwgMHgwMDIxLCAweDAwM0YsIDB4MzAxNiwgMHgzMDE3LCAweDIwMjYsIDB4MjAyNSwgMHgyMDE0LCAweDIwMTMsIDB4MDA1RiwgMHgwMDVGLCAweDAwMjgsDQotICAgIDB4MDAyOSwgMHgwMDdCLCAweDAwN0QsIDB4MzAxNCwgMHgzMDE1LCAweDMwMTAsIDB4MzAxMSwgMHgzMDBBLCAweDMwMEIsIDB4MzAwOCwgMHgzMDA5LCAweDMwMEMsIDB4MzAwRCwgMHgzMDBFLCAweDMwMEYsIDB4MDA1QiwNCi0gICAgMHgwMDVELCAweDIwM0UsIDB4MjAzRSwgMHgyMDNFLCAweDIwM0UsIDB4MDA1RiwgMHgwMDVGLCAweDAwNUYsIDB4MDAyQywgMHgzMDAxLCAweDAwMkUsIDB4MDAzQiwgMHgwMDNBLCAweDAwM0YsIDB4MDAyMSwgMHgyMDE0LA0KLSAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDdCLCAweDAwN0QsIDB4MzAxNCwgMHgzMDE1LCAweDAwMjMsIDB4MDAyNiwgMHgwMDJBLCAweDAwMkIsIDB4MDAyRCwgMHgwMDNDLCAweDAwM0UsIDB4MDAzRCwgMHgwMDVDLCAweDAwMjQsDQotICAgIDB4MDAyNSwgMHgwMDQwLCAweDA2NEIsIDB4MDY0QywgMHgwNjRELCAweDA2NEUsIDB4MDY0RiwgMHgwNjUwLCAweDA2NTEsIDB4MDY1MiwgMHgwNjIxLCAweDA2MjIsIDB4MDYyMiwgMHgwNjIzLCAweDA2MjMsIDB4MDYyNCwNCi0gICAgMHgwNjI0LCAweDA2MjUsIDB4MDYyNSwgMHgwNjI2LCAweDA2MjYsIDB4MDYyNiwgMHgwNjI2LCAweDA2MjcsIDB4MDYyNywgMHgwNjI4LCAweDA2MjgsIDB4MDYyOCwgMHgwNjI4LCAweDA2MjksIDB4MDYyOSwgMHgwNjJBLA0KLSAgICAweDA2MkEsIDB4MDYyQSwgMHgwNjJBLCAweDA2MkIsIDB4MDYyQiwgMHgwNjJCLCAweDA2MkIsIDB4MDYyQywgMHgwNjJDLCAweDA2MkMsIDB4MDYyQywgMHgwNjJELCAweDA2MkQsIDB4MDYyRCwgMHgwNjJELCAweDA2MkUsDQotICAgIDB4MDYyRSwgMHgwNjJFLCAweDA2MkUsIDB4MDYyRiwgMHgwNjJGLCAweDA2MzAsIDB4MDYzMCwgMHgwNjMxLCAweDA2MzEsIDB4MDYzMiwgMHgwNjMyLCAweDA2MzMsIDB4MDYzMywgMHgwNjMzLCAweDA2MzMsIDB4MDYzNCwNCi0gICAgMHgwNjM0LCAweDA2MzQsIDB4MDYzNCwgMHgwNjM1LCAweDA2MzUsIDB4MDYzNSwgMHgwNjM1LCAweDA2MzYsIDB4MDYzNiwgMHgwNjM2LCAweDA2MzYsIDB4MDYzNywgMHgwNjM3LCAweDA2MzcsIDB4MDYzNywgMHgwNjM4LA0KLSAgICAweDA2MzgsIDB4MDYzOCwgMHgwNjM4LCAweDA2MzksIDB4MDYzOSwgMHgwNjM5LCAweDA2MzksIDB4MDYzQSwgMHgwNjNBLCAweDA2M0EsIDB4MDYzQSwgMHgwNjQxLCAweDA2NDEsIDB4MDY0MSwgMHgwNjQxLCAweDA2NDIsDQotICAgIDB4MDY0MiwgMHgwNjQyLCAweDA2NDIsIDB4MDY0MywgMHgwNjQzLCAweDA2NDMsIDB4MDY0MywgMHgwNjQ0LCAweDA2NDQsIDB4MDY0NCwgMHgwNjQ0LCAweDA2NDUsIDB4MDY0NSwgMHgwNjQ1LCAweDA2NDUsIDB4MDY0NiwNCi0gICAgMHgwNjQ2LCAweDA2NDYsIDB4MDY0NiwgMHgwNjQ3LCAweDA2NDcsIDB4MDY0NywgMHgwNjQ3LCAweDA2NDgsIDB4MDY0OCwgMHgwNjQ5LCAweDA2NDksIDB4MDY0QSwgMHgwNjRBLCAweDA2NEEsIDB4MDY0QSwgMHgwMDIxLA0KLSAgICAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LCAweDAwMjgsIDB4MDAyOSwgMHgwMDJBLCAweDAwMkIsIDB4MDAyQywgMHgwMDJELCAweDAwMkUsIDB4MDAyRiwgMHgwMDMwLCAweDAwMzEsDQotICAgIDB4MDAzMiwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNSwgMHgwMDM2LCAweDAwMzcsIDB4MDAzOCwgMHgwMDM5LCAweDAwM0EsIDB4MDAzQiwgMHgwMDNDLCAweDAwM0QsIDB4MDAzRSwgMHgwMDNGLCAweDAwNDAsIDB4MDA0MSwNCi0gICAgMHgwMDQyLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNDYsIDB4MDA0NywgMHgwMDQ4LCAweDAwNDksIDB4MDA0QSwgMHgwMDRCLCAweDAwNEMsIDB4MDA0RCwgMHgwMDRFLCAweDAwNEYsIDB4MDA1MCwgMHgwMDUxLA0KLSAgICAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LCAweDAwNTgsIDB4MDA1OSwgMHgwMDVBLCAweDAwNUIsIDB4MDA1QywgMHgwMDVELCAweDAwNUUsIDB4MDA1RiwgMHgwMDYwLCAweDAwNjEsDQotICAgIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsIDB4MDA2OCwgMHgwMDY5LCAweDAwNkEsIDB4MDA2QiwgMHgwMDZDLCAweDAwNkQsIDB4MDA2RSwgMHgwMDZGLCAweDAwNzAsIDB4MDA3MSwNCi0gICAgMHgwMDcyLCAweDAwNzMsIDB4MDA3NCwgMHgwMDc1LCAweDAwNzYsIDB4MDA3NywgMHgwMDc4LCAweDAwNzksIDB4MDA3QSwgMHgwMDdCLCAweDAwN0MsIDB4MDA3RCwgMHgwMDdFLCAweDI5ODUsIDB4Mjk4NiwgMHgzMDAyLA0KLSAgICAweDMwMEMsIDB4MzAwRCwgMHgzMDAxLCAweDMwRkIsIDB4MzBGMiwgMHgzMEExLCAweDMwQTMsIDB4MzBBNSwgMHgzMEE3LCAweDMwQTksIDB4MzBFMywgMHgzMEU1LCAweDMwRTcsIDB4MzBDMywgMHgzMEZDLCAweDMwQTIsDQotICAgIDB4MzBBNCwgMHgzMEE2LCAweDMwQTgsIDB4MzBBQSwgMHgzMEFCLCAweDMwQUQsIDB4MzBBRiwgMHgzMEIxLCAweDMwQjMsIDB4MzBCNSwgMHgzMEI3LCAweDMwQjksIDB4MzBCQiwgMHgzMEJELCAweDMwQkYsIDB4MzBDMSwNCi0gICAgMHgzMEM0LCAweDMwQzYsIDB4MzBDOCwgMHgzMENBLCAweDMwQ0IsIDB4MzBDQywgMHgzMENELCAweDMwQ0UsIDB4MzBDRiwgMHgzMEQyLCAweDMwRDUsIDB4MzBEOCwgMHgzMERCLCAweDMwREUsIDB4MzBERiwgMHgzMEUwLA0KLSAgICAweDMwRTEsIDB4MzBFMiwgMHgzMEU0LCAweDMwRTYsIDB4MzBFOCwgMHgzMEU5LCAweDMwRUEsIDB4MzBFQiwgMHgzMEVDLCAweDMwRUQsIDB4MzBFRiwgMHgzMEYzLCAweDMwOTksIDB4MzA5QSwgMHgzMTY0LCAweDMxMzEsDQotICAgIDB4MzEzMiwgMHgzMTMzLCAweDMxMzQsIDB4MzEzNSwgMHgzMTM2LCAweDMxMzcsIDB4MzEzOCwgMHgzMTM5LCAweDMxM0EsIDB4MzEzQiwgMHgzMTNDLCAweDMxM0QsIDB4MzEzRSwgMHgzMTNGLCAweDMxNDAsIDB4MzE0MSwNCi0gICAgMHgzMTQyLCAweDMxNDMsIDB4MzE0NCwgMHgzMTQ1LCAweDMxNDYsIDB4MzE0NywgMHgzMTQ4LCAweDMxNDksIDB4MzE0QSwgMHgzMTRCLCAweDMxNEMsIDB4MzE0RCwgMHgzMTRFLCAweDMxNEYsIDB4MzE1MCwgMHgzMTUxLA0KLSAgICAweDMxNTIsIDB4MzE1MywgMHgzMTU0LCAweDMxNTUsIDB4MzE1NiwgMHgzMTU3LCAweDMxNTgsIDB4MzE1OSwgMHgzMTVBLCAweDMxNUIsIDB4MzE1QywgMHgzMTVELCAweDMxNUUsIDB4MzE1RiwgMHgzMTYwLCAweDMxNjEsDQotICAgIDB4MzE2MiwgMHgzMTYzLCAweDAwQTIsIDB4MDBBMywgMHgwMEFDLCAweDAwQUYsIDB4MDBBNiwgMHgwMEE1LCAweDIwQTksIDB4MjUwMiwgMHgyMTkwLCAweDIxOTEsIDB4MjE5MiwgMHgyMTkzLCAweDI1QTAsIDB4MjVDQg0KLX07DQotZXh0ZXJuIGNvbnN0IEZYX1dDSEFSIGdfVW5pY29kZURhdGFfTm9ybWFsaXphdGlvbl9NYXAyWzE3MjRdID0gew0KLSAgICAweDAwNEYsIDB4MDA0NSwgMHgwMDU0LCAweDAwNEQsIDB4MDA2RiwgMHgwMDY1LCAweDAwNDksIDB4MDA0QSwgMHgwMDY5LCAweDAwNkEsIDB4MDA0RiwgMHgwMDQ1LCAweDAwNkYsIDB4MDA2NSwgMHgwMDQ0LCAweDAxN0QsDQotICAgIDB4MDA0NCwgMHgwMTdFLCAweDAwNjQsIDB4MDE3RSwgMHgwMDRDLCAweDAwNEEsIDB4MDA0QywgMHgwMDZBLCAweDAwNkMsIDB4MDA2QSwgMHgwMDRFLCAweDAwNEEsIDB4MDA0RSwgMHgwMDZBLCAweDAwNkUsIDB4MDA2QSwNCi0gICAgMHgwMDQ0LCAweDAwNUEsIDB4MDA0NCwgMHgwMDdBLCAweDAwNjQsIDB4MDA3QSwgMHgwMDY0LCAweDAwNjIsIDB4MDA3MSwgMHgwMDcwLCAweDAwNEYsIDB4MDA0NSwgMHgwMDY0LCAweDAwN0EsIDB4MDA2NCwgMHgwMjkyLA0KLSAgICAweDAwNjQsIDB4MDA3QSwgMHgwMDc0LCAweDAwNzMsIDB4MDA3NCwgMHgwMjgzLCAweDAwNzQsIDB4MDA2MywgMHgwMDY2LCAweDAxNEIsIDB4MDA2QywgMHgwMDczLCAweDAwNkMsIDB4MDA3QSwgMHgwNDFELCAweDA0MTMsDQotICAgIDB4MDQzRCwgMHgwNDMzLCAweDA0MjIsIDB4MDQyNiwgMHgwNDQyLCAweDA0NDYsIDB4MDQxMCwgMHgwNDE1LCAweDA0MzAsIDB4MDQzNSwgMHgwNTY1LCAweDA1ODIsIDB4MDYyNywgMHgwNjc0LCAweDA2NDgsIDB4MDY3NCwNCi0gICAgMHgwNkM3LCAweDA2NzQsIDB4MDY0QSwgMHgwNjc0LCAweDA2RDUsIDB4MDY1NCwgMHgwNkMxLCAweDA2NTQsIDB4MDZEMiwgMHgwNjU0LCAweDA5MjgsIDB4MDkzQywgMHgwOTMwLCAweDA5M0MsIDB4MDkzMywgMHgwOTNDLA0KLSAgICAweDA5MTUsIDB4MDkzQywgMHgwOTE2LCAweDA5M0MsIDB4MDkxNywgMHgwOTNDLCAweDA5MUMsIDB4MDkzQywgMHgwOTIxLCAweDA5M0MsIDB4MDkyMiwgMHgwOTNDLCAweDA5MkIsIDB4MDkzQywgMHgwOTJGLCAweDA5M0MsDQotICAgIDB4MDlDNywgMHgwOUJFLCAweDA5QzcsIDB4MDlENywgMHgwOUExLCAweDA5QkMsIDB4MDlBMiwgMHgwOUJDLCAweDA5QUYsIDB4MDlCQywgMHgwQTMyLCAweDBBM0MsIDB4MEEzOCwgMHgwQTNDLCAweDBBMTYsIDB4MEEzQywNCi0gICAgMHgwQTE3LCAweDBBM0MsIDB4MEExQywgMHgwQTNDLCAweDBBMkIsIDB4MEEzQywgMHgwQjQ3LCAweDBCNTYsIDB4MEI0NywgMHgwQjNFLCAweDBCNDcsIDB4MEI1NywgMHgwQjIxLCAweDBCM0MsIDB4MEIyMiwgMHgwQjNDLA0KLSAgICAweDBCOTIsIDB4MEJENywgMHgwQkM2LCAweDBCQkUsIDB4MEJDNywgMHgwQkJFLCAweDBCQzYsIDB4MEJENywgMHgwQzQ2LCAweDBDNTYsIDB4MENCRiwgMHgwQ0Q1LCAweDBDQzYsIDB4MENENSwgMHgwQ0M2LCAweDBDRDYsDQotICAgIDB4MENDNiwgMHgwQ0MyLCAweDBDQ0EsIDB4MENENSwgMHgwRDQ2LCAweDBEM0UsIDB4MEQ0NywgMHgwRDNFLCAweDBENDYsIDB4MEQ1NywgMHgwREQ5LCAweDBEQ0EsIDB4MEREOSwgMHgwRENGLCAweDBEREMsIDB4MERDQSwNCi0gICAgMHgwREQ5LCAweDBEREYsIDB4MEU0RCwgMHgwRTMyLCAweDBFQ0QsIDB4MEVCMiwgMHgwRUFCLCAweDBFOTksIDB4MEVBQiwgMHgwRUExLCAweDBGNDIsIDB4MEZCNywgMHgwRjRDLCAweDBGQjcsIDB4MEY1MSwgMHgwRkI3LA0KLSAgICAweDBGNTYsIDB4MEZCNywgMHgwRjVCLCAweDBGQjcsIDB4MEY0MCwgMHgwRkI1LCAweDBGNzEsIDB4MEY3MiwgMHgwRjcxLCAweDBGNzQsIDB4MEZCMiwgMHgwRjgwLCAweDBGQjIsIDB4MEY4MSwgMHgwRkIzLCAweDBGODAsDQotICAgIDB4MEZCMywgMHgwRjgxLCAweDBGNzEsIDB4MEY4MCwgMHgwRjkyLCAweDBGQjcsIDB4MEY5QywgMHgwRkI3LCAweDBGQTEsIDB4MEZCNywgMHgwRkE2LCAweDBGQjcsIDB4MEZBQiwgMHgwRkI3LCAweDBGOTAsIDB4MEZCNSwNCi0gICAgMHgxMDI1LCAweDEwMkUsIDB4MUIwNSwgMHgxQjM1LCAweDFCMDcsIDB4MUIzNSwgMHgxQjA5LCAweDFCMzUsIDB4MUIwQiwgMHgxQjM1LCAweDFCMEQsIDB4MUIzNSwgMHgxQjExLCAweDFCMzUsIDB4MUIzQSwgMHgxQjM1LA0KLSAgICAweDFCM0MsIDB4MUIzNSwgMHgxQjNFLCAweDFCMzUsIDB4MUIzRiwgMHgxQjM1LCAweDFCNDIsIDB4MUIzNSwgMHgwMDc0LCAweDAwNjgsIDB4MDAyRSwgMHgwMDJFLCAweDIwMzIsIDB4MjAzMiwgMHgyMDM1LCAweDIwMzUsDQotICAgIDB4MDAyMSwgMHgwMDIxLCAweDAwMjAsIDB4MDMwNSwgMHgwMDNGLCAweDAwM0YsIDB4MDAzRiwgMHgwMDIxLCAweDAwMjEsIDB4MDAzRiwgMHgwMDUyLCAweDAwNzMsIDB4MDBCMCwgMHgwMDQzLCAweDAwQjAsIDB4MDA0NiwNCi0gICAgMHgwMDRFLCAweDAwNkYsIDB4MDA1MywgMHgwMDRELCAweDAwNTQsIDB4MDA0RCwgMHgwMDMxLCAweDAwMkYsIDB4MDA0OSwgMHgwMDQ5LCAweDAwNDksIDB4MDA1NiwgMHgwMDU2LCAweDAwNDksIDB4MDA0OSwgMHgwMDU4LA0KLSAgICAweDAwNTgsIDB4MDA0OSwgMHgwMDY5LCAweDAwNjksIDB4MDA2OSwgMHgwMDc2LCAweDAwNzYsIDB4MDA2OSwgMHgwMDY5LCAweDAwNzgsIDB4MDA3OCwgMHgwMDY5LCAweDIxOTAsIDB4MDMzOCwgMHgyMTkyLCAweDAzMzgsDQotICAgIDB4MjE5NCwgMHgwMzM4LCAweDIxRDAsIDB4MDMzOCwgMHgyMUQ0LCAweDAzMzgsIDB4MjFEMiwgMHgwMzM4LCAweDIyMjMsIDB4MDMzOCwgMHgyMjI1LCAweDAzMzgsIDB4MjIyQiwgMHgyMjJCLCAweDIyMkUsIDB4MjIyRSwNCi0gICAgMHgyMjNDLCAweDAzMzgsIDB4MjI0MywgMHgwMzM4LCAweDIyNDUsIDB4MDMzOCwgMHgyMjQ4LCAweDAzMzgsIDB4MDAzRCwgMHgwMDJGLCAweDIyNjEsIDB4MDAyRiwgMHgyMjRELCAweDAwMkYsIDB4MDAzQywgMHgwMDJGLA0KLSAgICAweDAwM0UsIDB4MDAyRiwgMHgyMjY0LCAweDAwMkYsIDB4MjI2NSwgMHgwMDJGLCAweDIyNzIsIDB4MDAyRiwgMHgyMjczLCAweDAwMkYsIDB4MjI3NiwgMHgwMDJGLCAweDIyNzcsIDB4MDAyRiwgMHgyMjdBLCAweDAwMkYsDQotICAgIDB4MjI3QiwgMHgwMDJGLCAweDIyODIsIDB4MDAyRiwgMHgyMjgzLCAweDAwMkYsIDB4MjI4NiwgMHgwMDJGLCAweDIyODcsIDB4MDAyRiwgMHgyMkEyLCAweDAwMkYsIDB4MjJBOCwgMHgwMDJGLCAweDIyQTksIDB4MDAyRiwNCi0gICAgMHgyMkFCLCAweDAwMkYsIDB4MjI3QywgMHgwMDJGLCAweDIyN0QsIDB4MDAyRiwgMHgyMjkxLCAweDAwMkYsIDB4MjI5MiwgMHgwMDJGLCAweDIyQjIsIDB4MDAyRiwgMHgyMkIzLCAweDAwMkYsIDB4MjJCNCwgMHgwMDJGLA0KLSAgICAweDIyQjUsIDB4MDAyRiwgMHgwMDQyLCAweDAwNTMsIDB4MDA0OCwgMHgwMDU0LCAweDAwNEMsIDB4MDA0NiwgMHgwMDU2LCAweDAwNTQsIDB4MDA0NiwgMHgwMDQ2LCAweDAwNDMsIDB4MDA1MiwgMHgwMDUzLCAweDAwNTMsDQotICAgIDB4MDA1MywgMHgwMDQ5LCAweDAwNDUsIDB4MDA0RCwgMHgwMDQ2LCAweDAwNTMsIDB4MDA0NywgMHgwMDUzLCAweDAwNTIsIDB4MDA1MywgMHgwMDU1LCAweDAwNTMsIDB4MDA1MywgMHgwMDUwLCAweDAwMzEsIDB4MDAzMCwNCi0gICAgMHgwMDMxLCAweDAwMzEsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzEsIDB4MDAzMywgMHgwMDMxLCAweDAwMzQsIDB4MDAzMSwgMHgwMDM1LCAweDAwMzEsIDB4MDAzNiwgMHgwMDMxLCAweDAwMzcsIDB4MDAzMSwgMHgwMDM4LA0KLSAgICAweDAwMzEsIDB4MDAzOSwgMHgwMDMyLCAweDAwMzAsIDB4MDAzMSwgMHgwMDJFLCAweDAwMzIsIDB4MDAyRSwgMHgwMDMzLCAweDAwMkUsIDB4MDAzNCwgMHgwMDJFLCAweDAwMzUsIDB4MDAyRSwgMHgwMDM2LCAweDAwMkUsDQotICAgIDB4MDAzNywgMHgwMDJFLCAweDAwMzgsIDB4MDAyRSwgMHgwMDM5LCAweDAwMkUsIDB4MDAzMSwgMHgwMDMxLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMxLCAweDAwMzMsIDB4MDAzMSwgMHgwMDM0LCAweDAwMzEsIDB4MDAzNSwNCi0gICAgMHgwMDMxLCAweDAwMzYsIDB4MDAzMSwgMHgwMDM3LCAweDAwMzEsIDB4MDAzOCwgMHgwMDMxLCAweDAwMzksIDB4MDAzMiwgMHgwMDMwLCAweDAwMzEsIDB4MDAzMCwgMHgwMDMxLCAweDAwMzAsIDB4MDAzMSwgMHgwMDMwLA0KLSAgICAweDAwMzEsIDB4MDAzMCwgMHgwMDNELCAweDAwM0QsIDB4MkFERCwgMHgwMDJGLCAweDMwNEIsIDB4MzA5OSwgMHgzMDRELCAweDMwOTksIDB4MzA0RiwgMHgzMDk5LCAweDMwNTEsIDB4MzA5OSwgMHgzMDUzLCAweDMwOTksDQotICAgIDB4MzA1NSwgMHgzMDk5LCAweDMwNTcsIDB4MzA5OSwgMHgzMDU5LCAweDMwOTksIDB4MzA1QiwgMHgzMDk5LCAweDMwNUQsIDB4MzA5OSwgMHgzMDVGLCAweDMwOTksIDB4MzA2MSwgMHgzMDk5LCAweDMwNjQsIDB4MzA5OSwNCi0gICAgMHgzMDY2LCAweDMwOTksIDB4MzA2OCwgMHgzMDk5LCAweDMwNkYsIDB4MzA5OSwgMHgzMDZGLCAweDMwOUEsIDB4MzA3MiwgMHgzMDk5LCAweDMwNzIsIDB4MzA5QSwgMHgzMDc1LCAweDMwOTksIDB4MzA3NSwgMHgzMDlBLA0KLSAgICAweDMwNzgsIDB4MzA5OSwgMHgzMDc4LCAweDMwOUEsIDB4MzA3QiwgMHgzMDk5LCAweDMwN0IsIDB4MzA5QSwgMHgzMDQ2LCAweDMwOTksIDB4MDAyMCwgMHgzMDk5LCAweDAwMjAsIDB4MzA5QSwgMHgzMDlELCAweDMwOTksDQotICAgIDB4MzA4OCwgMHgzMDhBLCAweDMwQUIsIDB4MzA5OSwgMHgzMEFELCAweDMwOTksIDB4MzBBRiwgMHgzMDk5LCAweDMwQjEsIDB4MzA5OSwgMHgzMEIzLCAweDMwOTksIDB4MzBCNSwgMHgzMDk5LCAweDMwQjcsIDB4MzA5OSwNCi0gICAgMHgzMEI5LCAweDMwOTksIDB4MzBCQiwgMHgzMDk5LCAweDMwQkQsIDB4MzA5OSwgMHgzMEJGLCAweDMwOTksIDB4MzBDMSwgMHgzMDk5LCAweDMwQzQsIDB4MzA5OSwgMHgzMEM2LCAweDMwOTksIDB4MzBDOCwgMHgzMDk5LA0KLSAgICAweDMwQ0YsIDB4MzA5OSwgMHgzMENGLCAweDMwOUEsIDB4MzBEMiwgMHgzMDk5LCAweDMwRDIsIDB4MzA5QSwgMHgzMEQ1LCAweDMwOTksIDB4MzBENSwgMHgzMDlBLCAweDMwRDgsIDB4MzA5OSwgMHgzMEQ4LCAweDMwOUEsDQotICAgIDB4MzBEQiwgMHgzMDk5LCAweDMwREIsIDB4MzA5QSwgMHgzMEE2LCAweDMwOTksIDB4MzBFRiwgMHgzMDk5LCAweDMwRjAsIDB4MzA5OSwgMHgzMEYxLCAweDMwOTksIDB4MzBGMiwgMHgzMDk5LCAweDMwRkQsIDB4MzA5OSwNCi0gICAgMHgzMEIzLCAweDMwQzgsIDB4MDAzMiwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMiwgMHgwMDMyLCAweDAwMzMsIDB4MDAzMiwgMHgwMDM0LCAweDAwMzIsIDB4MDAzNSwgMHgwMDMyLCAweDAwMzYsIDB4MDAzMiwgMHgwMDM3LA0KLSAgICAweDAwMzIsIDB4MDAzOCwgMHgwMDMyLCAweDAwMzksIDB4MDAzMywgMHgwMDMwLCAweDAwMzMsIDB4MDAzMSwgMHgwMDMzLCAweDAwMzIsIDB4MDAzMywgMHgwMDMzLCAweDAwMzMsIDB4MDAzNCwgMHgwMDMzLCAweDAwMzUsDQotICAgIDB4MTEwMCwgMHgxMTYxLCAweDExMDIsIDB4MTE2MSwgMHgxMTAzLCAweDExNjEsIDB4MTEwNSwgMHgxMTYxLCAweDExMDYsIDB4MTE2MSwgMHgxMTA3LCAweDExNjEsIDB4MTEwOSwgMHgxMTYxLCAweDExMEIsIDB4MTE2MSwNCi0gICAgMHgxMTBDLCAweDExNjEsIDB4MTEwRSwgMHgxMTYxLCAweDExMEYsIDB4MTE2MSwgMHgxMTEwLCAweDExNjEsIDB4MTExMSwgMHgxMTYxLCAweDExMTIsIDB4MTE2MSwgMHgxMTBCLCAweDExNkUsIDB4MDAzMywgMHgwMDM2LA0KLSAgICAweDAwMzMsIDB4MDAzNywgMHgwMDMzLCAweDAwMzgsIDB4MDAzMywgMHgwMDM5LCAweDAwMzQsIDB4MDAzMCwgMHgwMDM0LCAweDAwMzEsIDB4MDAzNCwgMHgwMDMyLCAweDAwMzQsIDB4MDAzMywgMHgwMDM0LCAweDAwMzQsDQotICAgIDB4MDAzNCwgMHgwMDM1LCAweDAwMzQsIDB4MDAzNiwgMHgwMDM0LCAweDAwMzcsIDB4MDAzNCwgMHgwMDM4LCAweDAwMzQsIDB4MDAzOSwgMHgwMDM1LCAweDAwMzAsIDB4MDAzMSwgMHg2NzA4LCAweDAwMzIsIDB4NjcwOCwNCi0gICAgMHgwMDMzLCAweDY3MDgsIDB4MDAzNCwgMHg2NzA4LCAweDAwMzUsIDB4NjcwOCwgMHgwMDM2LCAweDY3MDgsIDB4MDAzNywgMHg2NzA4LCAweDAwMzgsIDB4NjcwOCwgMHgwMDM5LCAweDY3MDgsIDB4MDA0OCwgMHgwMDY3LA0KLSAgICAweDAwNjUsIDB4MDA1NiwgMHgzMEFFLCAweDMwQUMsIDB4MzBBRCwgMHgzMEVELCAweDMwQzcsIDB4MzBCNywgMHgzMEM5LCAweDMwRUIsIDB4MzBDOCwgMHgzMEYzLCAweDMwQ0EsIDB4MzBDRSwgMHgzMEQ0LCAweDMwQjMsDQotICAgIDB4MzBEMywgMHgzMEVCLCAweDMwREEsIDB4MzBCRCwgMHgzMERCLCAweDMwRjMsIDB4MzBERiwgMHgzMEVBLCAweDMwRTEsIDB4MzBBQywgMHgzMEVBLCAweDMwRTksIDB4MzBFQywgMHgzMEUwLCAweDAwMzAsIDB4NzBCOSwNCi0gICAgMHgwMDMxLCAweDcwQjksIDB4MDAzMiwgMHg3MEI5LCAweDAwMzMsIDB4NzBCOSwgMHgwMDM0LCAweDcwQjksIDB4MDAzNSwgMHg3MEI5LCAweDAwMzYsIDB4NzBCOSwgMHgwMDM3LCAweDcwQjksIDB4MDAzOCwgMHg3MEI5LA0KLSAgICAweDAwMzksIDB4NzBCOSwgMHgwMDY0LCAweDAwNjEsIDB4MDA0MSwgMHgwMDU1LCAweDAwNkYsIDB4MDA1NiwgMHgwMDcwLCAweDAwNjMsIDB4MDA2NCwgMHgwMDZELCAweDAwNDksIDB4MDA1NSwgMHg1RTczLCAweDYyMTAsDQotICAgIDB4NjYyRCwgMHg1NDhDLCAweDU5MjcsIDB4NkI2MywgMHg2NjBFLCAweDZDQkIsIDB4MDA3MCwgMHgwMDQxLCAweDAwNkUsIDB4MDA0MSwgMHgwM0JDLCAweDAwNDEsIDB4MDA2RCwgMHgwMDQxLCAweDAwNkIsIDB4MDA0MSwNCi0gICAgMHgwMDRCLCAweDAwNDIsIDB4MDA0RCwgMHgwMDQyLCAweDAwNDcsIDB4MDA0MiwgMHgwMDcwLCAweDAwNDYsIDB4MDA2RSwgMHgwMDQ2LCAweDAzQkMsIDB4MDA0NiwgMHgwM0JDLCAweDAwNjcsIDB4MDA2RCwgMHgwMDY3LA0KLSAgICAweDAwNkIsIDB4MDA2NywgMHgwMDQ4LCAweDAwN0EsIDB4MDNCQywgMHgyMTEzLCAweDAwNkQsIDB4MjExMywgMHgwMDY0LCAweDIxMTMsIDB4MDA2QiwgMHgyMTEzLCAweDAwNjYsIDB4MDA2RCwgMHgwMDZFLCAweDAwNkQsDQotICAgIDB4MDNCQywgMHgwMDZELCAweDAwNkQsIDB4MDA2RCwgMHgwMDYzLCAweDAwNkQsIDB4MDA2QiwgMHgwMDZELCAweDAwNkQsIDB4MDBCMiwgMHgwMDZELCAweDAwQjMsIDB4MDA1MCwgMHgwMDYxLCAweDAwNzAsIDB4MDA3MywNCi0gICAgMHgwMDZFLCAweDAwNzMsIDB4MDNCQywgMHgwMDczLCAweDAwNkQsIDB4MDA3MywgMHgwMDcwLCAweDAwNTYsIDB4MDA2RSwgMHgwMDU2LCAweDAzQkMsIDB4MDA1NiwgMHgwMDZELCAweDAwNTYsIDB4MDA2QiwgMHgwMDU2LA0KLSAgICAweDAwNEQsIDB4MDA1NiwgMHgwMDcwLCAweDAwNTcsIDB4MDA2RSwgMHgwMDU3LCAweDAzQkMsIDB4MDA1NywgMHgwMDZELCAweDAwNTcsIDB4MDA2QiwgMHgwMDU3LCAweDAwNEQsIDB4MDA1NywgMHgwMDZCLCAweDAzQTksDQotICAgIDB4MDA0RCwgMHgwM0E5LCAweDAwNDIsIDB4MDA3MSwgMHgwMDYzLCAweDAwNjMsIDB4MDA2MywgMHgwMDY0LCAweDAwNjQsIDB4MDA0MiwgMHgwMDQ3LCAweDAwNzksIDB4MDA2OCwgMHgwMDYxLCAweDAwNDgsIDB4MDA1MCwNCi0gICAgMHgwMDY5LCAweDAwNkUsIDB4MDA0QiwgMHgwMDRCLCAweDAwNEIsIDB4MDA0RCwgMHgwMDZCLCAweDAwNzQsIDB4MDA2QywgMHgwMDZELCAweDAwNkMsIDB4MDA2RSwgMHgwMDZDLCAweDAwNzgsIDB4MDA2RCwgMHgwMDYyLA0KLSAgICAweDAwNTAsIDB4MDA0OCwgMHgwMDUwLCAweDAwNTIsIDB4MDA3MywgMHgwMDcyLCAweDAwNTMsIDB4MDA3NiwgMHgwMDU3LCAweDAwNjIsIDB4MDAzMSwgMHg2NUU1LCAweDAwMzIsIDB4NjVFNSwgMHgwMDMzLCAweDY1RTUsDQotICAgIDB4MDAzNCwgMHg2NUU1LCAweDAwMzUsIDB4NjVFNSwgMHgwMDM2LCAweDY1RTUsIDB4MDAzNywgMHg2NUU1LCAweDAwMzgsIDB4NjVFNSwgMHgwMDM5LCAweDY1RTUsIDB4MDA2NiwgMHgwMDY2LCAweDAwNjYsIDB4MDA2OSwNCi0gICAgMHgwMDY2LCAweDAwNkMsIDB4MDE3RiwgMHgwMDc0LCAweDAwNzMsIDB4MDA3NCwgMHgwNTc0LCAweDA1NzYsIDB4MDU3NCwgMHgwNTY1LCAweDA1NzQsIDB4MDU2QiwgMHgwNTdFLCAweDA1NzYsIDB4MDU3NCwgMHgwNTZELA0KLSAgICAweDA1RDksIDB4MDVCNCwgMHgwNUYyLCAweDA1QjcsIDB4MDVFOSwgMHgwNUMxLCAweDA1RTksIDB4MDVDMiwgMHhGQjQ5LCAweDA1QzEsIDB4RkI0OSwgMHgwNUMyLCAweDA1RDAsIDB4MDVCNywgMHgwNUQwLCAweDA1QjgsDQotICAgIDB4MDVEMCwgMHgwNUJDLCAweDA1RDEsIDB4MDVCQywgMHgwNUQyLCAweDA1QkMsIDB4MDVEMywgMHgwNUJDLCAweDA1RDQsIDB4MDVCQywgMHgwNUQ1LCAweDA1QkMsIDB4MDVENiwgMHgwNUJDLCAweDA1RDgsIDB4MDVCQywNCi0gICAgMHgwNUQ5LCAweDA1QkMsIDB4MDVEQSwgMHgwNUJDLCAweDA1REIsIDB4MDVCQywgMHgwNURDLCAweDA1QkMsIDB4MDVERSwgMHgwNUJDLCAweDA1RTAsIDB4MDVCQywgMHgwNUUxLCAweDA1QkMsIDB4MDVFMywgMHgwNUJDLA0KLSAgICAweDA1RTQsIDB4MDVCQywgMHgwNUU2LCAweDA1QkMsIDB4MDVFNywgMHgwNUJDLCAweDA1RTgsIDB4MDVCQywgMHgwNUU5LCAweDA1QkMsIDB4MDVFQSwgMHgwNUJDLCAweDA1RDUsIDB4MDVCOSwgMHgwNUQxLCAweDA1QkYsDQotICAgIDB4MDVEQiwgMHgwNUJGLCAweDA1RTQsIDB4MDVCRiwgMHgwNUQwLCAweDA1REMsIDB4MDYyNiwgMHgwNjI3LCAweDA2MjYsIDB4MDYyNywgMHgwNjI2LCAweDA2RDUsIDB4MDYyNiwgMHgwNkQ1LCAweDA2MjYsIDB4MDY0OCwNCi0gICAgMHgwNjI2LCAweDA2NDgsIDB4MDYyNiwgMHgwNkM3LCAweDA2MjYsIDB4MDZDNywgMHgwNjI2LCAweDA2QzYsIDB4MDYyNiwgMHgwNkM2LCAweDA2MjYsIDB4MDZDOCwgMHgwNjI2LCAweDA2QzgsIDB4MDYyNiwgMHgwNkQwLA0KLSAgICAweDA2MjYsIDB4MDZEMCwgMHgwNjI2LCAweDA2RDAsIDB4MDYyNiwgMHgwNjQ5LCAweDA2MjYsIDB4MDY0OSwgMHgwNjI2LCAweDA2NDksIDB4MDYyNiwgMHgwNjJDLCAweDA2MjYsIDB4MDYyRCwgMHgwNjI2LCAweDA2NDUsDQotICAgIDB4MDYyNiwgMHgwNjQ5LCAweDA2MjYsIDB4MDY0QSwgMHgwNjI4LCAweDA2MkMsIDB4MDYyOCwgMHgwNjJELCAweDA2MjgsIDB4MDYyRSwgMHgwNjI4LCAweDA2NDUsIDB4MDYyOCwgMHgwNjQ5LCAweDA2MjgsIDB4MDY0QSwNCi0gICAgMHgwNjJBLCAweDA2MkMsIDB4MDYyQSwgMHgwNjJELCAweDA2MkEsIDB4MDYyRSwgMHgwNjJBLCAweDA2NDUsIDB4MDYyQSwgMHgwNjQ5LCAweDA2MkEsIDB4MDY0QSwgMHgwNjJCLCAweDA2MkMsIDB4MDYyQiwgMHgwNjQ1LA0KLSAgICAweDA2MkIsIDB4MDY0OSwgMHgwNjJCLCAweDA2NEEsIDB4MDYyQywgMHgwNjJELCAweDA2MkMsIDB4MDY0NSwgMHgwNjJELCAweDA2MkMsIDB4MDYyRCwgMHgwNjQ1LCAweDA2MkUsIDB4MDYyQywgMHgwNjJFLCAweDA2MkQsDQotICAgIDB4MDYyRSwgMHgwNjQ1LCAweDA2MzMsIDB4MDYyQywgMHgwNjMzLCAweDA2MkQsIDB4MDYzMywgMHgwNjJFLCAweDA2MzMsIDB4MDY0NSwgMHgwNjM1LCAweDA2MkQsIDB4MDYzNSwgMHgwNjQ1LCAweDA2MzYsIDB4MDYyQywNCi0gICAgMHgwNjM2LCAweDA2MkQsIDB4MDYzNiwgMHgwNjJFLCAweDA2MzYsIDB4MDY0NSwgMHgwNjM3LCAweDA2MkQsIDB4MDYzNywgMHgwNjQ1LCAweDA2MzgsIDB4MDY0NSwgMHgwNjM5LCAweDA2MkMsIDB4MDYzOSwgMHgwNjQ1LA0KLSAgICAweDA2M0EsIDB4MDYyQywgMHgwNjNBLCAweDA2NDUsIDB4MDY0MSwgMHgwNjJDLCAweDA2NDEsIDB4MDYyRCwgMHgwNjQxLCAweDA2MkUsIDB4MDY0MSwgMHgwNjQ1LCAweDA2NDEsIDB4MDY0OSwgMHgwNjQxLCAweDA2NEEsDQotICAgIDB4MDY0MiwgMHgwNjJELCAweDA2NDIsIDB4MDY0NSwgMHgwNjQyLCAweDA2NDksIDB4MDY0MiwgMHgwNjRBLCAweDA2NDMsIDB4MDYyNywgMHgwNjQzLCAweDA2MkMsIDB4MDY0MywgMHgwNjJELCAweDA2NDMsIDB4MDYyRSwNCi0gICAgMHgwNjQzLCAweDA2NDQsIDB4MDY0MywgMHgwNjQ1LCAweDA2NDMsIDB4MDY0OSwgMHgwNjQzLCAweDA2NEEsIDB4MDY0NCwgMHgwNjJDLCAweDA2NDQsIDB4MDYyRCwgMHgwNjQ0LCAweDA2MkUsIDB4MDY0NCwgMHgwNjQ1LA0KLSAgICAweDA2NDQsIDB4MDY0OSwgMHgwNjQ0LCAweDA2NEEsIDB4MDY0NSwgMHgwNjJDLCAweDA2NDUsIDB4MDYyRCwgMHgwNjQ1LCAweDA2MkUsIDB4MDY0NSwgMHgwNjQ1LCAweDA2NDUsIDB4MDY0OSwgMHgwNjQ1LCAweDA2NEEsDQotICAgIDB4MDY0NiwgMHgwNjJDLCAweDA2NDYsIDB4MDYyRCwgMHgwNjQ2LCAweDA2MkUsIDB4MDY0NiwgMHgwNjQ1LCAweDA2NDYsIDB4MDY0OSwgMHgwNjQ2LCAweDA2NEEsIDB4MDY0NywgMHgwNjJDLCAweDA2NDcsIDB4MDY0NSwNCi0gICAgMHgwNjQ3LCAweDA2NDksIDB4MDY0NywgMHgwNjRBLCAweDA2NEEsIDB4MDYyQywgMHgwNjRBLCAweDA2MkQsIDB4MDY0QSwgMHgwNjJFLCAweDA2NEEsIDB4MDY0NSwgMHgwNjRBLCAweDA2NDksIDB4MDY0QSwgMHgwNjRBLA0KLSAgICAweDA2MzAsIDB4MDY3MCwgMHgwNjMxLCAweDA2NzAsIDB4MDY0OSwgMHgwNjcwLCAweDA2NEMsIDB4MDY1MSwgMHgwNjRELCAweDA2NTEsIDB4MDY0RSwgMHgwNjUxLCAweDA2NEYsIDB4MDY1MSwgMHgwNjUwLCAweDA2NTEsDQotICAgIDB4MDY1MSwgMHgwNjcwLCAweDA2MjYsIDB4MDYzMSwgMHgwNjI2LCAweDA2MzIsIDB4MDYyNiwgMHgwNjQ1LCAweDA2MjYsIDB4MDY0NiwgMHgwNjI2LCAweDA2NDksIDB4MDYyNiwgMHgwNjRBLCAweDA2MjgsIDB4MDYzMSwNCi0gICAgMHgwNjI4LCAweDA2MzIsIDB4MDYyOCwgMHgwNjQ1LCAweDA2MjgsIDB4MDY0NiwgMHgwNjI4LCAweDA2NDksIDB4MDYyOCwgMHgwNjRBLCAweDA2MkEsIDB4MDYzMSwgMHgwNjJBLCAweDA2MzIsIDB4MDYyQSwgMHgwNjQ1LA0KLSAgICAweDA2MkEsIDB4MDY0NiwgMHgwNjJBLCAweDA2NDksIDB4MDYyQSwgMHgwNjRBLCAweDA2MkIsIDB4MDYzMSwgMHgwNjJCLCAweDA2MzIsIDB4MDYyQiwgMHgwNjQ1LCAweDA2MkIsIDB4MDY0NiwgMHgwNjJCLCAweDA2NDksDQotICAgIDB4MDYyQiwgMHgwNjRBLCAweDA2NDEsIDB4MDY0OSwgMHgwNjQxLCAweDA2NEEsIDB4MDY0MiwgMHgwNjQ5LCAweDA2NDIsIDB4MDY0QSwgMHgwNjQzLCAweDA2MjcsIDB4MDY0MywgMHgwNjQ0LCAweDA2NDMsIDB4MDY0NSwNCi0gICAgMHgwNjQzLCAweDA2NDksIDB4MDY0MywgMHgwNjRBLCAweDA2NDQsIDB4MDY0NSwgMHgwNjQ0LCAweDA2NDksIDB4MDY0NCwgMHgwNjRBLCAweDA2NDUsIDB4MDYyNywgMHgwNjQ1LCAweDA2NDUsIDB4MDY0NiwgMHgwNjMxLA0KLSAgICAweDA2NDYsIDB4MDYzMiwgMHgwNjQ2LCAweDA2NDUsIDB4MDY0NiwgMHgwNjQ2LCAweDA2NDYsIDB4MDY0OSwgMHgwNjQ2LCAweDA2NEEsIDB4MDY0OSwgMHgwNjcwLCAweDA2NEEsIDB4MDYzMSwgMHgwNjRBLCAweDA2MzIsDQotICAgIDB4MDY0QSwgMHgwNjQ1LCAweDA2NEEsIDB4MDY0NiwgMHgwNjRBLCAweDA2NDksIDB4MDY0QSwgMHgwNjRBLCAweDA2MjYsIDB4MDYyQywgMHgwNjI2LCAweDA2MkQsIDB4MDYyNiwgMHgwNjJFLCAweDA2MjYsIDB4MDY0NSwNCi0gICAgMHgwNjI2LCAweDA2NDcsIDB4MDYyOCwgMHgwNjJDLCAweDA2MjgsIDB4MDYyRCwgMHgwNjI4LCAweDA2MkUsIDB4MDYyOCwgMHgwNjQ1LCAweDA2MjgsIDB4MDY0NywgMHgwNjJBLCAweDA2MkMsIDB4MDYyQSwgMHgwNjJELA0KLSAgICAweDA2MkEsIDB4MDYyRSwgMHgwNjJBLCAweDA2NDUsIDB4MDYyQSwgMHgwNjQ3LCAweDA2MkIsIDB4MDY0NSwgMHgwNjJDLCAweDA2MkQsIDB4MDYyQywgMHgwNjQ1LCAweDA2MkQsIDB4MDYyQywgMHgwNjJELCAweDA2NDUsDQotICAgIDB4MDYyRSwgMHgwNjJDLCAweDA2MkUsIDB4MDY0NSwgMHgwNjMzLCAweDA2MkMsIDB4MDYzMywgMHgwNjJELCAweDA2MzMsIDB4MDYyRSwgMHgwNjMzLCAweDA2NDUsIDB4MDYzNSwgMHgwNjJELCAweDA2MzUsIDB4MDYyRSwNCi0gICAgMHgwNjM1LCAweDA2NDUsIDB4MDYzNiwgMHgwNjJDLCAweDA2MzYsIDB4MDYyRCwgMHgwNjM2LCAweDA2MkUsIDB4MDYzNiwgMHgwNjQ1LCAweDA2MzcsIDB4MDYyRCwgMHgwNjM4LCAweDA2NDUsIDB4MDYzOSwgMHgwNjJDLA0KLSAgICAweDA2MzksIDB4MDY0NSwgMHgwNjNBLCAweDA2MkMsIDB4MDYzQSwgMHgwNjQ1LCAweDA2NDEsIDB4MDYyQywgMHgwNjQxLCAweDA2MkQsIDB4MDY0MSwgMHgwNjJFLCAweDA2NDEsIDB4MDY0NSwgMHgwNjQyLCAweDA2MkQsDQotICAgIDB4MDY0MiwgMHgwNjQ1LCAweDA2NDMsIDB4MDYyQywgMHgwNjQzLCAweDA2MkQsIDB4MDY0MywgMHgwNjJFLCAweDA2NDMsIDB4MDY0NCwgMHgwNjQzLCAweDA2NDUsIDB4MDY0NCwgMHgwNjJDLCAweDA2NDQsIDB4MDYyRCwNCi0gICAgMHgwNjQ0LCAweDA2MkUsIDB4MDY0NCwgMHgwNjQ1LCAweDA2NDQsIDB4MDY0NywgMHgwNjQ1LCAweDA2MkMsIDB4MDY0NSwgMHgwNjJELCAweDA2NDUsIDB4MDYyRSwgMHgwNjQ1LCAweDA2NDUsIDB4MDY0NiwgMHgwNjJDLA0KLSAgICAweDA2NDYsIDB4MDYyRCwgMHgwNjQ2LCAweDA2MkUsIDB4MDY0NiwgMHgwNjQ1LCAweDA2NDYsIDB4MDY0NywgMHgwNjQ3LCAweDA2MkMsIDB4MDY0NywgMHgwNjQ1LCAweDA2NDcsIDB4MDY3MCwgMHgwNjRBLCAweDA2MkMsDQotICAgIDB4MDY0QSwgMHgwNjJELCAweDA2NEEsIDB4MDYyRSwgMHgwNjRBLCAweDA2NDUsIDB4MDY0QSwgMHgwNjQ3LCAweDA2MjYsIDB4MDY0NSwgMHgwNjI2LCAweDA2NDcsIDB4MDYyOCwgMHgwNjQ1LCAweDA2MjgsIDB4MDY0NywNCi0gICAgMHgwNjJBLCAweDA2NDUsIDB4MDYyQSwgMHgwNjQ3LCAweDA2MkIsIDB4MDY0NSwgMHgwNjJCLCAweDA2NDcsIDB4MDYzMywgMHgwNjQ1LCAweDA2MzMsIDB4MDY0NywgMHgwNjM0LCAweDA2NDUsIDB4MDYzNCwgMHgwNjQ3LA0KLSAgICAweDA2NDMsIDB4MDY0NCwgMHgwNjQzLCAweDA2NDUsIDB4MDY0NCwgMHgwNjQ1LCAweDA2NDYsIDB4MDY0NSwgMHgwNjQ2LCAweDA2NDcsIDB4MDY0QSwgMHgwNjQ1LCAweDA2NEEsIDB4MDY0NywgMHgwNjM3LCAweDA2NDksDQotICAgIDB4MDYzNywgMHgwNjRBLCAweDA2MzksIDB4MDY0OSwgMHgwNjM5LCAweDA2NEEsIDB4MDYzQSwgMHgwNjQ5LCAweDA2M0EsIDB4MDY0QSwgMHgwNjMzLCAweDA2NDksIDB4MDYzMywgMHgwNjRBLCAweDA2MzQsIDB4MDY0OSwNCi0gICAgMHgwNjM0LCAweDA2NEEsIDB4MDYyRCwgMHgwNjQ5LCAweDA2MkQsIDB4MDY0QSwgMHgwNjJDLCAweDA2NDksIDB4MDYyQywgMHgwNjRBLCAweDA2MkUsIDB4MDY0OSwgMHgwNjJFLCAweDA2NEEsIDB4MDYzNSwgMHgwNjQ5LA0KLSAgICAweDA2MzUsIDB4MDY0QSwgMHgwNjM2LCAweDA2NDksIDB4MDYzNiwgMHgwNjRBLCAweDA2MzQsIDB4MDYyQywgMHgwNjM0LCAweDA2MkQsIDB4MDYzNCwgMHgwNjJFLCAweDA2MzQsIDB4MDY0NSwgMHgwNjM0LCAweDA2MzEsDQotICAgIDB4MDYzMywgMHgwNjMxLCAweDA2MzUsIDB4MDYzMSwgMHgwNjM2LCAweDA2MzEsIDB4MDYzNywgMHgwNjQ5LCAweDA2MzcsIDB4MDY0QSwgMHgwNjM5LCAweDA2NDksIDB4MDYzOSwgMHgwNjRBLCAweDA2M0EsIDB4MDY0OSwNCi0gICAgMHgwNjNBLCAweDA2NEEsIDB4MDYzMywgMHgwNjQ5LCAweDA2MzMsIDB4MDY0QSwgMHgwNjM0LCAweDA2NDksIDB4MDYzNCwgMHgwNjRBLCAweDA2MkQsIDB4MDY0OSwgMHgwNjJELCAweDA2NEEsIDB4MDYyQywgMHgwNjQ5LA0KLSAgICAweDA2MkMsIDB4MDY0QSwgMHgwNjJFLCAweDA2NDksIDB4MDYyRSwgMHgwNjRBLCAweDA2MzUsIDB4MDY0OSwgMHgwNjM1LCAweDA2NEEsIDB4MDYzNiwgMHgwNjQ5LCAweDA2MzYsIDB4MDY0QSwgMHgwNjM0LCAweDA2MkMsDQotICAgIDB4MDYzNCwgMHgwNjJELCAweDA2MzQsIDB4MDYyRSwgMHgwNjM0LCAweDA2NDUsIDB4MDYzNCwgMHgwNjMxLCAweDA2MzMsIDB4MDYzMSwgMHgwNjM1LCAweDA2MzEsIDB4MDYzNiwgMHgwNjMxLCAweDA2MzQsIDB4MDYyQywNCi0gICAgMHgwNjM0LCAweDA2MkQsIDB4MDYzNCwgMHgwNjJFLCAweDA2MzQsIDB4MDY0NSwgMHgwNjMzLCAweDA2NDcsIDB4MDYzNCwgMHgwNjQ3LCAweDA2MzcsIDB4MDY0NSwgMHgwNjMzLCAweDA2MkMsIDB4MDYzMywgMHgwNjJELA0KLSAgICAweDA2MzMsIDB4MDYyRSwgMHgwNjM0LCAweDA2MkMsIDB4MDYzNCwgMHgwNjJELCAweDA2MzQsIDB4MDYyRSwgMHgwNjM3LCAweDA2NDUsIDB4MDYzOCwgMHgwNjQ1LCAweDA2MjcsIDB4MDY0QiwgMHgwNjI3LCAweDA2NEIsDQotICAgIDB4MDY0MCwgMHgwNjRCLCAweDA2NDAsIDB4MDY0RSwgMHgwNjQwLCAweDA2NEYsIDB4MDY0MCwgMHgwNjUwLCAweDA2NDAsIDB4MDY1MSwgMHgwNjQwLCAweDA2NTIsIDB4MDY0NCwgMHgwNjIyLCAweDA2NDQsIDB4MDYyMiwNCi0gICAgMHgwNjQ0LCAweDA2MjMsIDB4MDY0NCwgMHgwNjIzLCAweDA2NDQsIDB4MDYyNSwgMHgwNjQ0LCAweDA2MjUsIDB4MDY0NCwgMHgwNjI3LCAweDA2NDQsIDB4MDYyNw0KLX07DQotZXh0ZXJuIGNvbnN0IEZYX1dDSEFSIGdfVW5pY29kZURhdGFfTm9ybWFsaXphdGlvbl9NYXAzWzExNjRdID0gew0KLSAgICAweDAwMzEsIDB4MDAyRiwgMHgwMDM0LCAweDAwMzEsIDB4MDAyRiwgMHgwMDMyLCAweDAwMzMsIDB4MDAyRiwgMHgwMDM0LCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDIwMzIsIDB4MjAzMiwgMHgyMDMyLCAweDIwMzUsDQotICAgIDB4MjAzNSwgMHgyMDM1LCAweDAwNjEsIDB4MDAyRiwgMHgwMDYzLCAweDAwNjEsIDB4MDAyRiwgMHgwMDczLCAweDAwNjMsIDB4MDAyRiwgMHgwMDZGLCAweDAwNjMsIDB4MDAyRiwgMHgwMDc1LCAweDAwNTQsIDB4MDA0NSwNCi0gICAgMHgwMDRDLCAweDAwNDYsIDB4MDA0MSwgMHgwMDU4LCAweDAwMzEsIDB4MDAyRiwgMHgwMDM3LCAweDAwMzEsIDB4MDAyRiwgMHgwMDM5LCAweDAwMzEsIDB4MDAyRiwgMHgwMDMzLCAweDAwMzIsIDB4MDAyRiwgMHgwMDMzLA0KLSAgICAweDAwMzEsIDB4MDAyRiwgMHgwMDM1LCAweDAwMzIsIDB4MDAyRiwgMHgwMDM1LCAweDAwMzMsIDB4MDAyRiwgMHgwMDM1LCAweDAwMzQsIDB4MDAyRiwgMHgwMDM1LCAweDAwMzEsIDB4MDAyRiwgMHgwMDM2LCAweDAwMzUsDQotICAgIDB4MDAyRiwgMHgwMDM2LCAweDAwMzEsIDB4MDAyRiwgMHgwMDM4LCAweDAwMzMsIDB4MDAyRiwgMHgwMDM4LCAweDAwMzUsIDB4MDAyRiwgMHgwMDM4LCAweDAwMzcsIDB4MDAyRiwgMHgwMDM4LCAweDAwNDksIDB4MDA0OSwNCi0gICAgMHgwMDQ5LCAweDAwNTYsIDB4MDA0OSwgMHgwMDQ5LCAweDAwNTgsIDB4MDA0OSwgMHgwMDQ5LCAweDAwNjksIDB4MDA2OSwgMHgwMDY5LCAweDAwNzYsIDB4MDA2OSwgMHgwMDY5LCAweDAwNzgsIDB4MDA2OSwgMHgwMDY5LA0KLSAgICAweDAwMzAsIDB4MjA0NCwgMHgwMDMzLCAweDIyMkIsIDB4MjIyQiwgMHgyMjJCLCAweDIyMkUsIDB4MjIyRSwgMHgyMjJFLCAweDAwNEUsIDB4MDA1NSwgMHgwMDRDLCAweDAwNTMsIDB4MDA0RiwgMHgwMDQ4LCAweDAwNTMsDQotICAgIDB4MDA1NCwgMHgwMDU4LCAweDAwNDUsIDB4MDA1NCwgMHgwMDU4LCAweDAwNDUsIDB4MDA0RiwgMHgwMDU0LCAweDAwNDUsIDB4MDA0RSwgMHgwMDUxLCAweDAwNDEsIDB4MDA0MywgMHgwMDRCLCAweDAwNDIsIDB4MDA0NSwNCi0gICAgMHgwMDRDLCAweDAwNDQsIDB4MDA0QywgMHgwMDQ1LCAweDAwNDQsIDB4MDA0MywgMHgwMDMxLCAweDAwNDQsIDB4MDA0MywgMHgwMDMyLCAweDAwNDQsIDB4MDA0MywgMHgwMDMzLCAweDAwNDQsIDB4MDA0MywgMHgwMDM0LA0KLSAgICAweDAwNEUsIDB4MDA0MSwgMHgwMDRCLCAweDAwNTMsIDB4MDA1OSwgMHgwMDRFLCAweDAwNDUsIDB4MDA1NCwgMHgwMDQyLCAweDAwNDMsIDB4MDA0MSwgMHgwMDRFLCAweDAwNTMsIDB4MDA1NSwgMHgwMDQyLCAweDAwNDUsDQotICAgIDB4MDA1MywgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDRDLCAweDAwMjgsIDB4MDAzMSwgMHgwMDI5LCAweDAwMjgsIDB4MDAzMiwgMHgwMDI5LCAweDAwMjgsIDB4MDAzMywgMHgwMDI5LCAweDAwMjgsIDB4MDAzNCwNCi0gICAgMHgwMDI5LCAweDAwMjgsIDB4MDAzNSwgMHgwMDI5LCAweDAwMjgsIDB4MDAzNiwgMHgwMDI5LCAweDAwMjgsIDB4MDAzNywgMHgwMDI5LCAweDAwMjgsIDB4MDAzOCwgMHgwMDI5LCAweDAwMjgsIDB4MDAzOSwgMHgwMDI5LA0KLSAgICAweDAwMzEsIDB4MDAzMCwgMHgwMDJFLCAweDAwMzEsIDB4MDAzMSwgMHgwMDJFLCAweDAwMzEsIDB4MDAzMiwgMHgwMDJFLCAweDAwMzEsIDB4MDAzMywgMHgwMDJFLCAweDAwMzEsIDB4MDAzNCwgMHgwMDJFLCAweDAwMzEsDQotICAgIDB4MDAzNSwgMHgwMDJFLCAweDAwMzEsIDB4MDAzNiwgMHgwMDJFLCAweDAwMzEsIDB4MDAzNywgMHgwMDJFLCAweDAwMzEsIDB4MDAzOCwgMHgwMDJFLCAweDAwMzEsIDB4MDAzOSwgMHgwMDJFLCAweDAwMzIsIDB4MDAzMCwNCi0gICAgMHgwMDJFLCAweDAwMjgsIDB4MDA2MSwgMHgwMDI5LCAweDAwMjgsIDB4MDA2MiwgMHgwMDI5LCAweDAwMjgsIDB4MDA2MywgMHgwMDI5LCAweDAwMjgsIDB4MDA2NCwgMHgwMDI5LCAweDAwMjgsIDB4MDA2NSwgMHgwMDI5LA0KLSAgICAweDAwMjgsIDB4MDA2NiwgMHgwMDI5LCAweDAwMjgsIDB4MDA2NywgMHgwMDI5LCAweDAwMjgsIDB4MDA2OCwgMHgwMDI5LCAweDAwMjgsIDB4MDA2OSwgMHgwMDI5LCAweDAwMjgsIDB4MDA2QSwgMHgwMDI5LCAweDAwMjgsDQotICAgIDB4MDA2QiwgMHgwMDI5LCAweDAwMjgsIDB4MDA2QywgMHgwMDI5LCAweDAwMjgsIDB4MDA2RCwgMHgwMDI5LCAweDAwMjgsIDB4MDA2RSwgMHgwMDI5LCAweDAwMjgsIDB4MDA2RiwgMHgwMDI5LCAweDAwMjgsIDB4MDA3MCwNCi0gICAgMHgwMDI5LCAweDAwMjgsIDB4MDA3MSwgMHgwMDI5LCAweDAwMjgsIDB4MDA3MiwgMHgwMDI5LCAweDAwMjgsIDB4MDA3MywgMHgwMDI5LCAweDAwMjgsIDB4MDA3NCwgMHgwMDI5LCAweDAwMjgsIDB4MDA3NSwgMHgwMDI5LA0KLSAgICAweDAwMjgsIDB4MDA3NiwgMHgwMDI5LCAweDAwMjgsIDB4MDA3NywgMHgwMDI5LCAweDAwMjgsIDB4MDA3OCwgMHgwMDI5LCAweDAwMjgsIDB4MDA3OSwgMHgwMDI5LCAweDAwMjgsIDB4MDA3QSwgMHgwMDI5LCAweDAwM0EsDQotICAgIDB4MDAzQSwgMHgwMDNELCAweDAwM0QsIDB4MDAzRCwgMHgwMDNELCAweDAwMjgsIDB4MTEwMCwgMHgwMDI5LCAweDAwMjgsIDB4MTEwMiwgMHgwMDI5LCAweDAwMjgsIDB4MTEwMywgMHgwMDI5LCAweDAwMjgsIDB4MTEwNSwNCi0gICAgMHgwMDI5LCAweDAwMjgsIDB4MTEwNiwgMHgwMDI5LCAweDAwMjgsIDB4MTEwNywgMHgwMDI5LCAweDAwMjgsIDB4MTEwOSwgMHgwMDI5LCAweDAwMjgsIDB4MTEwQiwgMHgwMDI5LCAweDAwMjgsIDB4MTEwQywgMHgwMDI5LA0KLSAgICAweDAwMjgsIDB4MTEwRSwgMHgwMDI5LCAweDAwMjgsIDB4MTEwRiwgMHgwMDI5LCAweDAwMjgsIDB4MTExMCwgMHgwMDI5LCAweDAwMjgsIDB4MTExMSwgMHgwMDI5LCAweDAwMjgsIDB4MTExMiwgMHgwMDI5LCAweDAwMjgsDQotICAgIDB4NEUwMCwgMHgwMDI5LCAweDAwMjgsIDB4NEU4QywgMHgwMDI5LCAweDAwMjgsIDB4NEUwOSwgMHgwMDI5LCAweDAwMjgsIDB4NTZEQiwgMHgwMDI5LCAweDAwMjgsIDB4NEU5NCwgMHgwMDI5LCAweDAwMjgsIDB4NTE2RCwNCi0gICAgMHgwMDI5LCAweDAwMjgsIDB4NEUwMywgMHgwMDI5LCAweDAwMjgsIDB4NTE2QiwgMHgwMDI5LCAweDAwMjgsIDB4NEU1RCwgMHgwMDI5LCAweDAwMjgsIDB4NTM0MSwgMHgwMDI5LCAweDAwMjgsIDB4NjcwOCwgMHgwMDI5LA0KLSAgICAweDAwMjgsIDB4NzA2QiwgMHgwMDI5LCAweDAwMjgsIDB4NkMzNCwgMHgwMDI5LCAweDAwMjgsIDB4NjcyOCwgMHgwMDI5LCAweDAwMjgsIDB4OTFEMSwgMHgwMDI5LCAweDAwMjgsIDB4NTcxRiwgMHgwMDI5LCAweDAwMjgsDQotICAgIDB4NjVFNSwgMHgwMDI5LCAweDAwMjgsIDB4NjgyQSwgMHgwMDI5LCAweDAwMjgsIDB4NjcwOSwgMHgwMDI5LCAweDAwMjgsIDB4NzkzRSwgMHgwMDI5LCAweDAwMjgsIDB4NTQwRCwgMHgwMDI5LCAweDAwMjgsIDB4NzI3OSwNCi0gICAgMHgwMDI5LCAweDAwMjgsIDB4OENBMSwgMHgwMDI5LCAweDAwMjgsIDB4Nzk1RCwgMHgwMDI5LCAweDAwMjgsIDB4NTJCNCwgMHgwMDI5LCAweDAwMjgsIDB4NEVFMywgMHgwMDI5LCAweDAwMjgsIDB4NTQ3QywgMHgwMDI5LA0KLSAgICAweDAwMjgsIDB4NUI2NiwgMHgwMDI5LCAweDAwMjgsIDB4NzZFMywgMHgwMDI5LCAweDAwMjgsIDB4NEYwMSwgMHgwMDI5LCAweDAwMjgsIDB4OENDNywgMHgwMDI5LCAweDAwMjgsIDB4NTM1NCwgMHgwMDI5LCAweDAwMjgsDQotICAgIDB4Nzk2RCwgMHgwMDI5LCAweDAwMjgsIDB4NEYxMSwgMHgwMDI5LCAweDAwMjgsIDB4ODFFQSwgMHgwMDI5LCAweDAwMjgsIDB4ODFGMywgMHgwMDI5LCAweDAwNTAsIDB4MDA1NCwgMHgwMDQ1LCAweDAwMzEsIDB4MDAzMCwNCi0gICAgMHg2NzA4LCAweDAwMzEsIDB4MDAzMSwgMHg2NzA4LCAweDAwMzEsIDB4MDAzMiwgMHg2NzA4LCAweDAwNjUsIDB4MDA3MiwgMHgwMDY3LCAweDAwNEMsIDB4MDA1NCwgMHgwMDQ0LCAweDMwQTIsIDB4MzBGQywgMHgzMEVCLA0KLSAgICAweDMwQTQsIDB4MzBGMywgMHgzMEMxLCAweDMwQTYsIDB4MzBBOSwgMHgzMEYzLCAweDMwQUEsIDB4MzBGMywgMHgzMEI5LCAweDMwQUEsIDB4MzBGQywgMHgzMEUwLCAweDMwQUIsIDB4MzBBNCwgMHgzMEVBLCAweDMwQUMsDQotICAgIDB4MzBFRCwgMHgzMEYzLCAweDMwQUMsIDB4MzBGMywgMHgzMERFLCAweDMwQUUsIDB4MzBDQiwgMHgzMEZDLCAweDMwQjAsIDB4MzBFOSwgMHgzMEUwLCAweDMwQjEsIDB4MzBGQywgMHgzMEI5LCAweDMwQjMsIDB4MzBFQiwNCi0gICAgMHgzMENBLCAweDMwQjMsIDB4MzBGQywgMHgzMERELCAweDMwQkIsIDB4MzBGMywgMHgzMEMxLCAweDMwQkIsIDB4MzBGMywgMHgzMEM4LCAweDMwQzAsIDB4MzBGQywgMHgzMEI5LCAweDMwQ0UsIDB4MzBDMywgMHgzMEM4LA0KLSAgICAweDMwQ0YsIDB4MzBBNCwgMHgzMEM0LCAweDMwRDEsIDB4MzBGQywgMHgzMEM0LCAweDMwRDQsIDB4MzBBRiwgMHgzMEVCLCAweDMwRDUsIDB4MzBFOSwgMHgzMEYzLCAweDMwREEsIDB4MzBDQiwgMHgzMEQyLCAweDMwRDgsDQotICAgIDB4MzBFQiwgMHgzMEM0LCAweDMwREEsIDB4MzBGMywgMHgzMEI5LCAweDMwREEsIDB4MzBGQywgMHgzMEI4LCAweDMwRDksIDB4MzBGQywgMHgzMEJGLCAweDMwREMsIDB4MzBFQiwgMHgzMEM4LCAweDMwREQsIDB4MzBGMywNCi0gICAgMHgzMEM5LCAweDMwREIsIDB4MzBGQywgMHgzMEVCLCAweDMwREIsIDB4MzBGQywgMHgzMEYzLCAweDMwREUsIDB4MzBBNCwgMHgzMEVCLCAweDMwREUsIDB4MzBDMywgMHgzMENGLCAweDMwREUsIDB4MzBFQiwgMHgzMEFGLA0KLSAgICAweDMwRTQsIDB4MzBGQywgMHgzMEM5LCAweDMwRTQsIDB4MzBGQywgMHgzMEVCLCAweDMwRTYsIDB4MzBBMiwgMHgzMEYzLCAweDMwRUIsIDB4MzBENCwgMHgzMEZDLCAweDMwRUYsIDB4MzBDMywgMHgzMEM4LCAweDAwMzEsDQotICAgIDB4MDAzMCwgMHg3MEI5LCAweDAwMzEsIDB4MDAzMSwgMHg3MEI5LCAweDAwMzEsIDB4MDAzMiwgMHg3MEI5LCAweDAwMzEsIDB4MDAzMywgMHg3MEI5LCAweDAwMzEsIDB4MDAzNCwgMHg3MEI5LCAweDAwMzEsIDB4MDAzNSwNCi0gICAgMHg3MEI5LCAweDAwMzEsIDB4MDAzNiwgMHg3MEI5LCAweDAwMzEsIDB4MDAzNywgMHg3MEI5LCAweDAwMzEsIDB4MDAzOCwgMHg3MEI5LCAweDAwMzEsIDB4MDAzOSwgMHg3MEI5LCAweDAwMzIsIDB4MDAzMCwgMHg3MEI5LA0KLSAgICAweDAwMzIsIDB4MDAzMSwgMHg3MEI5LCAweDAwMzIsIDB4MDAzMiwgMHg3MEI5LCAweDAwMzIsIDB4MDAzMywgMHg3MEI5LCAweDAwMzIsIDB4MDAzNCwgMHg3MEI5LCAweDAwNjgsIDB4MDA1MCwgMHgwMDYxLCAweDAwNjIsDQotICAgIDB4MDA2MSwgMHgwMDcyLCAweDAwNjQsIDB4MDA2RCwgMHgwMEIyLCAweDAwNjQsIDB4MDA2RCwgMHgwMEIzLCAweDAwNjMsIDB4MDA2MSwgMHgwMDZDLCAweDAwNkIsIDB4MDA0OCwgMHgwMDdBLCAweDAwNEQsIDB4MDA0OCwNCi0gICAgMHgwMDdBLCAweDAwNDcsIDB4MDA0OCwgMHgwMDdBLCAweDAwNTQsIDB4MDA0OCwgMHgwMDdBLCAweDAwNkQsIDB4MDA2RCwgMHgwMEIyLCAweDAwNjMsIDB4MDA2RCwgMHgwMEIyLCAweDAwNkIsIDB4MDA2RCwgMHgwMEIyLA0KLSAgICAweDAwNkQsIDB4MDA2RCwgMHgwMEIzLCAweDAwNjMsIDB4MDA2RCwgMHgwMEIzLCAweDAwNkIsIDB4MDA2RCwgMHgwMEIzLCAweDAwNkQsIDB4MjIxNSwgMHgwMDczLCAweDAwNkIsIDB4MDA1MCwgMHgwMDYxLCAweDAwNEQsDQotICAgIDB4MDA1MCwgMHgwMDYxLCAweDAwNDcsIDB4MDA1MCwgMHgwMDYxLCAweDAwNzIsIDB4MDA2MSwgMHgwMDY0LCAweDAwNDMsIDB4MDA2RiwgMHgwMDJFLCAweDAwNkMsIDB4MDA2RiwgMHgwMDY3LCAweDAwNkQsIDB4MDA2OSwNCi0gICAgMHgwMDZDLCAweDAwNkQsIDB4MDA2RiwgMHgwMDZDLCAweDAwNTAsIDB4MDA1MCwgMHgwMDRELCAweDAwNTYsIDB4MjIxNSwgMHgwMDZELCAweDAwNDEsIDB4MjIxNSwgMHgwMDZELCAweDAwMzEsIDB4MDAzMCwgMHg2NUU1LA0KLSAgICAweDAwMzEsIDB4MDAzMSwgMHg2NUU1LCAweDAwMzEsIDB4MDAzMiwgMHg2NUU1LCAweDAwMzEsIDB4MDAzMywgMHg2NUU1LCAweDAwMzEsIDB4MDAzNCwgMHg2NUU1LCAweDAwMzEsIDB4MDAzNSwgMHg2NUU1LCAweDAwMzEsDQotICAgIDB4MDAzNiwgMHg2NUU1LCAweDAwMzEsIDB4MDAzNywgMHg2NUU1LCAweDAwMzEsIDB4MDAzOCwgMHg2NUU1LCAweDAwMzEsIDB4MDAzOSwgMHg2NUU1LCAweDAwMzIsIDB4MDAzMCwgMHg2NUU1LCAweDAwMzIsIDB4MDAzMSwNCi0gICAgMHg2NUU1LCAweDAwMzIsIDB4MDAzMiwgMHg2NUU1LCAweDAwMzIsIDB4MDAzMywgMHg2NUU1LCAweDAwMzIsIDB4MDAzNCwgMHg2NUU1LCAweDAwMzIsIDB4MDAzNSwgMHg2NUU1LCAweDAwMzIsIDB4MDAzNiwgMHg2NUU1LA0KLSAgICAweDAwMzIsIDB4MDAzNywgMHg2NUU1LCAweDAwMzIsIDB4MDAzOCwgMHg2NUU1LCAweDAwMzIsIDB4MDAzOSwgMHg2NUU1LCAweDAwMzMsIDB4MDAzMCwgMHg2NUU1LCAweDAwMzMsIDB4MDAzMSwgMHg2NUU1LCAweDAwNjcsDQotICAgIDB4MDA2MSwgMHgwMDZDLCAweDAwNjYsIDB4MDA2NiwgMHgwMDY5LCAweDAwNjYsIDB4MDA2NiwgMHgwMDZDLCAweDA2NDAsIDB4MDY0RSwgMHgwNjUxLCAweDA2NDAsIDB4MDY0RiwgMHgwNjUxLCAweDA2NDAsIDB4MDY1MCwNCi0gICAgMHgwNjUxLCAweDA2MkEsIDB4MDYyQywgMHgwNjQ1LCAweDA2MkEsIDB4MDYyRCwgMHgwNjJDLCAweDA2MkEsIDB4MDYyRCwgMHgwNjJDLCAweDA2MkEsIDB4MDYyRCwgMHgwNjQ1LCAweDA2MkEsIDB4MDYyRSwgMHgwNjQ1LA0KLSAgICAweDA2MkEsIDB4MDY0NSwgMHgwNjJDLCAweDA2MkEsIDB4MDY0NSwgMHgwNjJELCAweDA2MkEsIDB4MDY0NSwgMHgwNjJFLCAweDA2MkMsIDB4MDY0NSwgMHgwNjJELCAweDA2MkMsIDB4MDY0NSwgMHgwNjJELCAweDA2MkQsDQotICAgIDB4MDY0NSwgMHgwNjRBLCAweDA2MkQsIDB4MDY0NSwgMHgwNjQ5LCAweDA2MzMsIDB4MDYyRCwgMHgwNjJDLCAweDA2MzMsIDB4MDYyQywgMHgwNjJELCAweDA2MzMsIDB4MDYyQywgMHgwNjQ5LCAweDA2MzMsIDB4MDY0NSwNCi0gICAgMHgwNjJELCAweDA2MzMsIDB4MDY0NSwgMHgwNjJELCAweDA2MzMsIDB4MDY0NSwgMHgwNjJDLCAweDA2MzMsIDB4MDY0NSwgMHgwNjQ1LCAweDA2MzMsIDB4MDY0NSwgMHgwNjQ1LCAweDA2MzUsIDB4MDYyRCwgMHgwNjJELA0KLSAgICAweDA2MzUsIDB4MDYyRCwgMHgwNjJELCAweDA2MzUsIDB4MDY0NSwgMHgwNjQ1LCAweDA2MzQsIDB4MDYyRCwgMHgwNjQ1LCAweDA2MzQsIDB4MDYyRCwgMHgwNjQ1LCAweDA2MzQsIDB4MDYyQywgMHgwNjRBLCAweDA2MzQsDQotICAgIDB4MDY0NSwgMHgwNjJFLCAweDA2MzQsIDB4MDY0NSwgMHgwNjJFLCAweDA2MzQsIDB4MDY0NSwgMHgwNjQ1LCAweDA2MzQsIDB4MDY0NSwgMHgwNjQ1LCAweDA2MzYsIDB4MDYyRCwgMHgwNjQ5LCAweDA2MzYsIDB4MDYyRSwNCi0gICAgMHgwNjQ1LCAweDA2MzYsIDB4MDYyRSwgMHgwNjQ1LCAweDA2MzcsIDB4MDY0NSwgMHgwNjJELCAweDA2MzcsIDB4MDY0NSwgMHgwNjJELCAweDA2MzcsIDB4MDY0NSwgMHgwNjQ1LCAweDA2MzcsIDB4MDY0NSwgMHgwNjRBLA0KLSAgICAweDA2MzksIDB4MDYyQywgMHgwNjQ1LCAweDA2MzksIDB4MDY0NSwgMHgwNjQ1LCAweDA2MzksIDB4MDY0NSwgMHgwNjQ1LCAweDA2MzksIDB4MDY0NSwgMHgwNjQ5LCAweDA2M0EsIDB4MDY0NSwgMHgwNjQ1LCAweDA2M0EsDQotICAgIDB4MDY0NSwgMHgwNjRBLCAweDA2M0EsIDB4MDY0NSwgMHgwNjQ5LCAweDA2NDEsIDB4MDYyRSwgMHgwNjQ1LCAweDA2NDEsIDB4MDYyRSwgMHgwNjQ1LCAweDA2NDIsIDB4MDY0NSwgMHgwNjJELCAweDA2NDIsIDB4MDY0NSwNCi0gICAgMHgwNjQ1LCAweDA2NDQsIDB4MDYyRCwgMHgwNjQ1LCAweDA2NDQsIDB4MDYyRCwgMHgwNjRBLCAweDA2NDQsIDB4MDYyRCwgMHgwNjQ5LCAweDA2NDQsIDB4MDYyQywgMHgwNjJDLCAweDA2NDQsIDB4MDYyQywgMHgwNjJDLA0KLSAgICAweDA2NDQsIDB4MDYyRSwgMHgwNjQ1LCAweDA2NDQsIDB4MDYyRSwgMHgwNjQ1LCAweDA2NDQsIDB4MDY0NSwgMHgwNjJELCAweDA2NDQsIDB4MDY0NSwgMHgwNjJELCAweDA2NDUsIDB4MDYyRCwgMHgwNjJDLCAweDA2NDUsDQotICAgIDB4MDYyRCwgMHgwNjQ1LCAweDA2NDUsIDB4MDYyRCwgMHgwNjRBLCAweDA2NDUsIDB4MDYyQywgMHgwNjJELCAweDA2NDUsIDB4MDYyQywgMHgwNjQ1LCAweDA2NDUsIDB4MDYyRSwgMHgwNjJDLCAweDA2NDUsIDB4MDYyRSwNCi0gICAgMHgwNjQ1LCAweDA2NDUsIDB4MDYyQywgMHgwNjJFLCAweDA2NDcsIDB4MDY0NSwgMHgwNjJDLCAweDA2NDcsIDB4MDY0NSwgMHgwNjQ1LCAweDA2NDYsIDB4MDYyRCwgMHgwNjQ1LCAweDA2NDYsIDB4MDYyRCwgMHgwNjQ5LA0KLSAgICAweDA2NDYsIDB4MDYyQywgMHgwNjQ1LCAweDA2NDYsIDB4MDYyQywgMHgwNjQ1LCAweDA2NDYsIDB4MDYyQywgMHgwNjQ5LCAweDA2NDYsIDB4MDY0NSwgMHgwNjRBLCAweDA2NDYsIDB4MDY0NSwgMHgwNjQ5LCAweDA2NEEsDQotICAgIDB4MDY0NSwgMHgwNjQ1LCAweDA2NEEsIDB4MDY0NSwgMHgwNjQ1LCAweDA2MjgsIDB4MDYyRSwgMHgwNjRBLCAweDA2MkEsIDB4MDYyQywgMHgwNjRBLCAweDA2MkEsIDB4MDYyQywgMHgwNjQ5LCAweDA2MkEsIDB4MDYyRSwNCi0gICAgMHgwNjRBLCAweDA2MkEsIDB4MDYyRSwgMHgwNjQ5LCAweDA2MkEsIDB4MDY0NSwgMHgwNjRBLCAweDA2MkEsIDB4MDY0NSwgMHgwNjQ5LCAweDA2MkMsIDB4MDY0NSwgMHgwNjRBLCAweDA2MkMsIDB4MDYyRCwgMHgwNjQ5LA0KLSAgICAweDA2MkMsIDB4MDY0NSwgMHgwNjQ5LCAweDA2MzMsIDB4MDYyRSwgMHgwNjQ5LCAweDA2MzUsIDB4MDYyRCwgMHgwNjRBLCAweDA2MzQsIDB4MDYyRCwgMHgwNjRBLCAweDA2MzYsIDB4MDYyRCwgMHgwNjRBLCAweDA2NDQsDQotICAgIDB4MDYyQywgMHgwNjRBLCAweDA2NDQsIDB4MDY0NSwgMHgwNjRBLCAweDA2NEEsIDB4MDYyRCwgMHgwNjRBLCAweDA2NEEsIDB4MDYyQywgMHgwNjRBLCAweDA2NEEsIDB4MDY0NSwgMHgwNjRBLCAweDA2NDUsIDB4MDY0NSwNCi0gICAgMHgwNjRBLCAweDA2NDIsIDB4MDY0NSwgMHgwNjRBLCAweDA2NDYsIDB4MDYyRCwgMHgwNjRBLCAweDA2NDIsIDB4MDY0NSwgMHgwNjJELCAweDA2NDQsIDB4MDYyRCwgMHgwNjQ1LCAweDA2MzksIDB4MDY0NSwgMHgwNjRBLA0KLSAgICAweDA2NDMsIDB4MDY0NSwgMHgwNjRBLCAweDA2NDYsIDB4MDYyQywgMHgwNjJELCAweDA2NDUsIDB4MDYyRSwgMHgwNjRBLCAweDA2NDQsIDB4MDYyQywgMHgwNjQ1LCAweDA2NDMsIDB4MDY0NSwgMHgwNjQ1LCAweDA2NDQsDQotICAgIDB4MDYyQywgMHgwNjQ1LCAweDA2NDYsIDB4MDYyQywgMHgwNjJELCAweDA2MkMsIDB4MDYyRCwgMHgwNjRBLCAweDA2MkQsIDB4MDYyQywgMHgwNjRBLCAweDA2NDUsIDB4MDYyQywgMHgwNjRBLCAweDA2NDEsIDB4MDY0NSwNCi0gICAgMHgwNjRBLCAweDA2MjgsIDB4MDYyRCwgMHgwNjRBLCAweDA2NDMsIDB4MDY0NSwgMHgwNjQ1LCAweDA2MzksIDB4MDYyQywgMHgwNjQ1LCAweDA2MzUsIDB4MDY0NSwgMHgwNjQ1LCAweDA2MzMsIDB4MDYyRSwgMHgwNjRBLA0KLSAgICAweDA2NDYsIDB4MDYyQywgMHgwNjRBLCAweDA2MzUsIDB4MDY0NCwgMHgwNkQyLCAweDA2NDIsIDB4MDY0NCwgMHgwNkQyLCAweDA2MzUsIDB4MDY0NCwgMHgwNjQ5DQotfTsNCi1leHRlcm4gY29uc3QgRlhfV0NIQVIgZ19Vbmljb2RlRGF0YV9Ob3JtYWxpemF0aW9uX01hcDRbNDg4XSA9IHsNCi0gICAgMHgwMDA0LCAweDIwMzIsIDB4MjAzMiwgMHgyMDMyLCAweDIwMzIsIDB4MDAwNCwgMHgwMDMxLCAweDAwMkYsIDB4MDAzMSwgMHgwMDMwLCAweDAwMDQsIDB4MDA1NiwgMHgwMDQ5LCAweDAwNDksIDB4MDA0OSwgMHgwMDA0LA0KLSAgICAweDAwNzYsIDB4MDA2OSwgMHgwMDY5LCAweDAwNjksIDB4MDAwNCwgMHgwMDI4LCAweDAwMzEsIDB4MDAzMCwgMHgwMDI5LCAweDAwMDQsIDB4MDAyOCwgMHgwMDMxLCAweDAwMzEsIDB4MDAyOSwgMHgwMDA0LCAweDAwMjgsDQotICAgIDB4MDAzMSwgMHgwMDMyLCAweDAwMjksIDB4MDAwNCwgMHgwMDI4LCAweDAwMzEsIDB4MDAzMywgMHgwMDI5LCAweDAwMDQsIDB4MDAyOCwgMHgwMDMxLCAweDAwMzQsIDB4MDAyOSwgMHgwMDA0LCAweDAwMjgsIDB4MDAzMSwNCi0gICAgMHgwMDM1LCAweDAwMjksIDB4MDAwNCwgMHgwMDI4LCAweDAwMzEsIDB4MDAzNiwgMHgwMDI5LCAweDAwMDQsIDB4MDAyOCwgMHgwMDMxLCAweDAwMzcsIDB4MDAyOSwgMHgwMDA0LCAweDAwMjgsIDB4MDAzMSwgMHgwMDM4LA0KLSAgICAweDAwMjksIDB4MDAwNCwgMHgwMDI4LCAweDAwMzEsIDB4MDAzOSwgMHgwMDI5LCAweDAwMDQsIDB4MDAyOCwgMHgwMDMyLCAweDAwMzAsIDB4MDAyOSwgMHgwMDA0LCAweDIyMkIsIDB4MjIyQiwgMHgyMjJCLCAweDIyMkIsDQotICAgIDB4MDAwNCwgMHgwMDI4LCAweDExMDAsIDB4MTE2MSwgMHgwMDI5LCAweDAwMDQsIDB4MDAyOCwgMHgxMTAyLCAweDExNjEsIDB4MDAyOSwgMHgwMDA0LCAweDAwMjgsIDB4MTEwMywgMHgxMTYxLCAweDAwMjksIDB4MDAwNCwNCi0gICAgMHgwMDI4LCAweDExMDUsIDB4MTE2MSwgMHgwMDI5LCAweDAwMDQsIDB4MDAyOCwgMHgxMTA2LCAweDExNjEsIDB4MDAyOSwgMHgwMDA0LCAweDAwMjgsIDB4MTEwNywgMHgxMTYxLCAweDAwMjksIDB4MDAwNCwgMHgwMDI4LA0KLSAgICAweDExMDksIDB4MTE2MSwgMHgwMDI5LCAweDAwMDQsIDB4MDAyOCwgMHgxMTBCLCAweDExNjEsIDB4MDAyOSwgMHgwMDA0LCAweDAwMjgsIDB4MTEwQywgMHgxMTYxLCAweDAwMjksIDB4MDAwNCwgMHgwMDI4LCAweDExMEUsDQotICAgIDB4MTE2MSwgMHgwMDI5LCAweDAwMDQsIDB4MDAyOCwgMHgxMTBGLCAweDExNjEsIDB4MDAyOSwgMHgwMDA0LCAweDAwMjgsIDB4MTExMCwgMHgxMTYxLCAweDAwMjksIDB4MDAwNCwgMHgwMDI4LCAweDExMTEsIDB4MTE2MSwNCi0gICAgMHgwMDI5LCAweDAwMDQsIDB4MDAyOCwgMHgxMTEyLCAweDExNjEsIDB4MDAyOSwgMHgwMDA0LCAweDAwMjgsIDB4MTEwQywgMHgxMTZFLCAweDAwMjksIDB4MDAwNywgMHgwMDI4LCAweDExMEIsIDB4MTE2OSwgMHgxMTBDLA0KLSAgICAweDExNjUsIDB4MTFBQiwgMHgwMDI5LCAweDAwMDYsIDB4MDAyOCwgMHgxMTBCLCAweDExNjksIDB4MTExMiwgMHgxMTZFLCAweDAwMjksIDB4MDAwNSwgMHgxMTBFLCAweDExNjEsIDB4MTFCNywgMHgxMTAwLCAweDExNjksDQotICAgIDB4MDAwNCwgMHgxMTBDLCAweDExNkUsIDB4MTEwQiwgMHgxMTc0LCAweDAwMDQsIDB4MzBBMiwgMHgzMEQxLCAweDMwRkMsIDB4MzBDOCwgMHgwMDA0LCAweDMwQTIsIDB4MzBFQiwgMHgzMEQ1LCAweDMwQTEsIDB4MDAwNCwNCi0gICAgMHgzMEEyLCAweDMwRjMsIDB4MzBEQSwgMHgzMEEyLCAweDAwMDQsIDB4MzBBNCwgMHgzMENCLCAweDMwRjMsIDB4MzBCMCwgMHgwMDA1LCAweDMwQTgsIDB4MzBCOSwgMHgzMEFGLCAweDMwRkMsIDB4MzBDOSwgMHgwMDA0LA0KLSAgICAweDMwQTgsIDB4MzBGQywgMHgzMEFCLCAweDMwRkMsIDB4MDAwNCwgMHgzMEFCLCAweDMwRTksIDB4MzBDMywgMHgzMEM4LCAweDAwMDQsIDB4MzBBQiwgMHgzMEVELCAweDMwRUEsIDB4MzBGQywgMHgwMDA0LCAweDMwQUQsDQotICAgIDB4MzBFNSwgMHgzMEVBLCAweDMwRkMsIDB4MDAwNCwgMHgzMEFFLCAweDMwRUIsIDB4MzBDMCwgMHgzMEZDLCAweDAwMDUsIDB4MzBBRCwgMHgzMEVELCAweDMwQjAsIDB4MzBFOSwgMHgzMEUwLCAweDAwMDYsIDB4MzBBRCwNCi0gICAgMHgzMEVELCAweDMwRTEsIDB4MzBGQywgMHgzMEM4LCAweDMwRUIsIDB4MDAwNSwgMHgzMEFELCAweDMwRUQsIDB4MzBFRiwgMHgzMEMzLCAweDMwQzgsIDB4MDAwNSwgMHgzMEIwLCAweDMwRTksIDB4MzBFMCwgMHgzMEM4LA0KLSAgICAweDMwRjMsIDB4MDAwNSwgMHgzMEFGLCAweDMwRUIsIDB4MzBCQywgMHgzMEE0LCAweDMwRUQsIDB4MDAwNCwgMHgzMEFGLCAweDMwRUQsIDB4MzBGQywgMHgzMENELCAweDAwMDQsIDB4MzBCNSwgMHgzMEE0LCAweDMwQUYsDQotICAgIDB4MzBFQiwgMHgwMDA1LCAweDMwQjUsIDB4MzBGMywgMHgzMEMxLCAweDMwRkMsIDB4MzBFMCwgMHgwMDA0LCAweDMwQjcsIDB4MzBFQSwgMHgzMEYzLCAweDMwQjAsIDB4MDAwNSwgMHgzMEQxLCAweDMwRkMsIDB4MzBCQiwNCi0gICAgMHgzMEYzLCAweDMwQzgsIDB4MDAwNCwgMHgzMEQwLCAweDMwRkMsIDB4MzBFQywgMHgzMEVCLCAweDAwMDUsIDB4MzBENCwgMHgzMEEyLCAweDMwQjksIDB4MzBDOCwgMHgzMEVCLCAweDAwMDUsIDB4MzBENSwgMHgzMEExLA0KLSAgICAweDMwRTksIDB4MzBDMywgMHgzMEM5LCAweDAwMDQsIDB4MzBENSwgMHgzMEEzLCAweDMwRkMsIDB4MzBDOCwgMHgwMDA1LCAweDMwRDYsIDB4MzBDMywgMHgzMEI3LCAweDMwQTcsIDB4MzBFQiwgMHgwMDA1LCAweDMwRDgsDQotICAgIDB4MzBBRiwgMHgzMEJGLCAweDMwRkMsIDB4MzBFQiwgMHgwMDA0LCAweDMwREQsIDB4MzBBNCwgMHgzMEYzLCAweDMwQzgsIDB4MDAwNCwgMHgzMERFLCAweDMwQTQsIDB4MzBBRiwgMHgzMEVELCAweDAwMDUsIDB4MzBERSwNCi0gICAgMHgzMEYzLCAweDMwQjcsIDB4MzBFNywgMHgzMEYzLCAweDAwMDQsIDB4MzBERiwgMHgzMEFGLCAweDMwRUQsIDB4MzBGMywgMHgwMDA1LCAweDMwREYsIDB4MzBFQSwgMHgzMEQwLCAweDMwRkMsIDB4MzBFQiwgMHgwMDA0LA0KLSAgICAweDMwRTEsIDB4MzBBQywgMHgzMEM4LCAweDMwRjMsIDB4MDAwNCwgMHgzMEUxLCAweDMwRkMsIDB4MzBDOCwgMHgzMEVCLCAweDAwMDQsIDB4MzBFQSwgMHgzMEMzLCAweDMwQzgsIDB4MzBFQiwgMHgwMDA0LCAweDMwRUIsDQotICAgIDB4MzBGQywgMHgzMEQ2LCAweDMwRUIsIDB4MDAwNSwgMHgzMEVDLCAweDMwRjMsIDB4MzBDOCwgMHgzMEIyLCAweDMwRjMsIDB4MDAwNCwgMHg2ODJBLCAweDVGMEYsIDB4NEYxQSwgMHg3OTNFLCAweDAwMDQsIDB4MDA2QiwNCi0gICAgMHgwMDYzLCAweDAwNjEsIDB4MDA2QywgMHgwMDA0LCAweDAwNkQsIDB4MjIxNSwgMHgwMDczLCAweDAwQjIsIDB4MDAwNSwgMHgwMDcyLCAweDAwNjEsIDB4MDA2NCwgMHgyMjE1LCAweDAwNzMsIDB4MDAwNiwgMHgwMDcyLA0KLSAgICAweDAwNjEsIDB4MDA2NCwgMHgyMjE1LCAweDAwNzMsIDB4MDBCMiwgMHgwMDA0LCAweDAwNjEsIDB4MDAyRSwgMHgwMDZELCAweDAwMkUsIDB4MDAwNCwgMHgwMDQzLCAweDIyMTUsIDB4MDA2QiwgMHgwMDY3LCAweDAwMDQsDQotICAgIDB4MDA3MCwgMHgwMDJFLCAweDAwNkQsIDB4MDAyRSwgMHgwMDA0LCAweDA2MjcsIDB4MDY0NCwgMHgwNjQ0LCAweDA2NDcsIDB4MDAwNCwgMHgwNjI3LCAweDA2NDMsIDB4MDYyOCwgMHgwNjMxLCAweDAwMDQsIDB4MDY0NSwNCi0gICAgMHgwNjJELCAweDA2NDUsIDB4MDYyRiwgMHgwMDA0LCAweDA2MzUsIDB4MDY0NCwgMHgwNjM5LCAweDA2NDUsIDB4MDAwNCwgMHgwNjMxLCAweDA2MzMsIDB4MDY0OCwgMHgwNjQ0LCAweDAwMDQsIDB4MDYzOSwgMHgwNjQ0LA0KLSAgICAweDA2NEEsIDB4MDY0NywgMHgwMDA0LCAweDA2NDgsIDB4MDYzMywgMHgwNjQ0LCAweDA2NDUsIDB4MDAxMiwgMHgwNjM1LCAweDA2NDQsIDB4MDY0OSwgMHgwMDIwLCAweDA2MjcsIDB4MDY0NCwgMHgwNjQ0LCAweDA2NDcsDQotICAgIDB4MDAyMCwgMHgwNjM5LCAweDA2NDQsIDB4MDY0QSwgMHgwNjQ3LCAweDAwMjAsIDB4MDY0OCwgMHgwNjMzLCAweDA2NDQsIDB4MDY0NSwgMHgwMDA4LCAweDA2MkMsIDB4MDY0NCwgMHgwMDIwLCAweDA2MkMsIDB4MDY0NCwNCi0gICAgMHgwNjI3LCAweDA2NDQsIDB4MDY0NywgMHgwMDA0LCAweDA2MzEsIDB4MDZDQywgMHgwNjI3LCAweDA2NDQNCi19Ow0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X3N5c3RlbS5oIgorZXh0ZXJuIGNvbnN0IEZYX1dDSEFSIGdfVW5pY29kZURhdGFfTm9ybWFsaXphdGlvbls2NTUzNl0gPSB7CisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODAwMSwgMHgwMDAwLCAweDIwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMDAyLCAweDgwMDIsIDB4MDAwMCwgMHgyMDA0LCAweDAwMDAsIDB4MDAwMCwgMHg4MDAzLAorICAgIDB4ODAwNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgwMDUsIDB4MDAwMCwgMHg4MDA2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgwMDcsIDB4ODAwOCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4MDA5LCAweDgwMEEsIDB4ODAwQiwgMHg4MDBDLCAweDAwMDAsIDB4MDAwMCwgMHg4MDBELCAweDgwMEUsIDB4ODAwRiwgMHgwMDAwLCAweDMwMDAsIDB4MzAwMywgMHgzMDA2LCAweDAwMDAsCisgICAgMHg4MDEwLCAweDgwMTEsIDB4ODAxMiwgMHg4MDEzLCAweDgwMTQsIDB4ODAxNSwgMHgwMDAwLCAweDgwMTYsIDB4ODAxNywgMHg4MDE4LCAweDgwMTksIDB4ODAxQSwgMHg4MDFCLCAweDgwMUMsIDB4ODAxRCwgMHg4MDFFLAorICAgIDB4ODAxRiwgMHg4MDIwLCAweDgwMjEsIDB4ODAyMiwgMHg4MDIzLCAweDgwMjQsIDB4ODAyNSwgMHgwMDAwLCAweDgwMjYsIDB4ODAyNywgMHg4MDI4LCAweDgwMjksIDB4ODAyQSwgMHg4MDJCLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDgwMkMsIDB4ODAyRCwgMHg4MDJFLCAweDgwMkYsIDB4ODAzMCwgMHg4MDMxLCAweDAwMDAsIDB4ODAzMiwgMHg4MDMzLCAweDgwMzQsIDB4ODAzNSwgMHg4MDM2LCAweDgwMzcsIDB4ODAzOCwgMHg4MDM5LCAweDgwM0EsCisgICAgMHgwMDAwLCAweDgwM0IsIDB4ODAzQywgMHg4MDNELCAweDgwM0UsIDB4ODAzRiwgMHg4MDQwLCAweDAwMDAsIDB4ODA0MSwgMHg4MDQyLCAweDgwNDMsIDB4ODA0NCwgMHg4MDQ1LCAweDgwNDYsIDB4MDAwMCwgMHg4MDQ3LAorICAgIDB4ODA0OCwgMHg4MDQ5LCAweDgwNEEsIDB4ODA0QiwgMHg4MDRDLCAweDgwNEQsIDB4ODA0RSwgMHg4MDRGLCAweDgwNTAsIDB4ODA1MSwgMHg4MDUyLCAweDgwNTMsIDB4ODA1NCwgMHg4MDU1LCAweDgwNTYsIDB4ODA1NywKKyAgICAweDgwNTgsIDB4ODA1OSwgMHg4MDVBLCAweDgwNUIsIDB4ODA1QywgMHg4MDVELCAweDgwNUUsIDB4ODA1RiwgMHg4MDYwLCAweDgwNjEsIDB4ODA2MiwgMHg4MDYzLCAweDgwNjQsIDB4ODA2NSwgMHg4MDY2LCAweDgwNjcsCisgICAgMHg4MDY4LCAweDgwNjksIDB4ODA2QSwgMHg4MDZCLCAweDgwNkMsIDB4ODA2RCwgMHg4MDZFLCAweDgwNkYsIDB4ODA3MCwgMHg4MDcxLCAweDgwNzIsIDB4ODA3MywgMHg4MDc0LCAweDgwNzUsIDB4ODA3NiwgMHg4MDc3LAorICAgIDB4ODA3OCwgMHgwMDAwLCAweDIwMDYsIDB4MjAwOCwgMHg4MDc5LCAweDgwN0EsIDB4ODA3QiwgMHg4MDdDLCAweDgwN0QsIDB4ODA3RSwgMHg4MDdGLCAweDgwODAsIDB4ODA4MSwgMHg4MDgyLCAweDgwODMsIDB4ODA4NCwKKyAgICAweDgwODUsIDB4ODA4NiwgMHg4MDg3LCAweDgwODgsIDB4ODA4OSwgMHg4MDhBLCAweDgwOEIsIDB4ODA4QywgMHg4MDhELCAweDgwOEUsIDB4MDAwMCwgMHgwMDAwLCAweDgwOEYsIDB4ODA5MCwgMHg4MDkxLCAweDgwOTIsCisgICAgMHg4MDkzLCAweDgwOTQsIDB4MjAwQSwgMHgyMDBDLCAweDgwOTUsIDB4ODA5NiwgMHg4MDk3LCAweDgwOTgsIDB4ODA5OSwgMHg4MDlBLCAweDgwOUIsIDB4ODA5QywgMHg4MDlELCAweDgwOUUsIDB4ODA5RiwgMHg4MEEwLAorICAgIDB4ODBBMSwgMHg4MEEyLCAweDgwQTMsIDB4ODBBNCwgMHg4MEE1LCAweDgwQTYsIDB4ODBBNywgMHg4MEE4LCAweDgwQTksIDB4ODBBQSwgMHg4MEFCLCAweDgwQUMsIDB4ODBBRCwgMHg4MEFFLCAweDgwQUYsIDB4ODBCMCwKKyAgICAweDgwQjEsIDB4ODBCMiwgMHg4MEIzLCAweDgwQjQsIDB4ODBCNSwgMHg4MEI2LCAweDgwQjcsIDB4ODBCOCwgMHg4MEI5LCAweDgwQkEsIDB4ODBCQiwgMHg4MEJDLCAweDgwQkQsIDB4ODBCRSwgMHg4MEJGLCAweDgwQzAsCisgICAgMHg4MEMxLCAweDgwQzIsIDB4ODBDMywgMHg4MEM0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgwQzUsIDB4ODBDNiwgMHg4MEM3LCAweDgwQzgsIDB4ODBDOSwgMHg4MENBLCAweDAwMDAsIDB4ODBDQiwgMHgwMDAwLAorICAgIDB4ODBDQywgMHg4MENELCAweDgwQ0UsIDB4ODBDRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4MEQwLCAweDgwRDEsIDB4ODBEMiwgMHg4MEQzLCAweDAwMDAsIDB4ODBENCwgMHg4MEQ1LCAweDgwRDYsIDB4ODBENywKKyAgICAweDgwRDgsIDB4ODBEOSwgMHgwMDAwLCAweDAwMDAsIDB4ODBEQSwgMHg4MERCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODBEQywgMHg4MERELCAweDgwREUsIDB4ODBERiwgMHg4MEUwLCAweDgwRTEsCisgICAgMHg4MEUyLCAweDAwMDAsIDB4ODBFMywgMHg4MEU0LCAweDgwRTUsIDB4ODBFNiwgMHg4MEU3LCAweDAwMDAsIDB4ODBFOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMDBFLCAweDIwMTAsIDB4MjAxMiwgMHgyMDE0LCAweDIwMTYsIDB4MjAxOCwgMHgyMDFBLCAweDIwMUMsIDB4MjAxRSwgMHg4MEU5LCAweDgwRUEsIDB4ODBFQiwKKyAgICAweDgwRUMsIDB4ODBFRCwgMHg4MEVFLCAweDgwRUYsIDB4ODBGMCwgMHg4MEYxLCAweDgwRjIsIDB4ODBGMywgMHg4MEY0LCAweDgwRjUsIDB4ODBGNiwgMHg4MEY3LCAweDgwRjgsIDB4ODBGOSwgMHg4MEZBLCAweDgwRkIsCisgICAgMHg4MEZDLCAweDgwRkQsIDB4ODBGRSwgMHg4MEZGLCAweDgxMDAsIDB4ODEwMSwgMHg4MTAyLCAweDgxMDMsIDB4ODEwNCwgMHg4MTA1LCAweDgxMDYsIDB4ODEwNywgMHg4MTA4LCAweDgxMDksIDB4ODEwQSwgMHg4MTBCLAorICAgIDB4ODEwQywgMHgyMDIwLCAweDIwMjIsIDB4MjAyNCwgMHg4MTBELCAweDgxMEUsIDB4MDAwMCwgMHgwMDAwLCAweDgxMEYsIDB4ODExMCwgMHg4MTExLCAweDgxMTIsIDB4ODExMywgMHg4MTE0LCAweDgxMTUsIDB4ODExNiwKKyAgICAweDgxMTcsIDB4ODExOCwgMHg4MTE5LCAweDgxMUEsIDB4ODExQiwgMHg4MTFDLCAweDgxMUQsIDB4ODExRSwgMHg4MTFGLCAweDgxMjAsIDB4ODEyMSwgMHg4MTIyLCAweDgxMjMsIDB4ODEyNCwgMHg4MTI1LCAweDgxMjYsCisgICAgMHg4MTI3LCAweDgxMjgsIDB4ODEyOSwgMHg4MTJBLCAweDgxMkIsIDB4ODEyQywgMHg4MTJELCAweDgxMkUsIDB4ODEyRiwgMHg4MTMwLCAweDgxMzEsIDB4ODEzMiwgMHgwMDAwLCAweDAwMDAsIDB4ODEzMywgMHg4MTM0LAorICAgIDB4ODEzNSwgMHg4MTM2LCAweDAwMDAsIDB4MDAwMCwgMHg4MTM3LCAweDgxMzgsIDB4ODEzOSwgMHg4MTNBLCAweDgxM0IsIDB4ODEzQywgMHg4MTNELCAweDgxM0UsIDB4ODEzRiwgMHg4MTQwLCAweDgxNDEsIDB4ODE0MiwKKyAgICAweDgxNDMsIDB4ODE0NCwgMHg4MTQ1LCAweDgxNDYsIDB4ODE0NywgMHg4MTQ4LCAweDgxNDksIDB4ODE0QSwgMHgyMDI2LCAweDIwMjgsIDB4ODE0QiwgMHg4MTRDLCAweDgxNEQsIDB4ODE0RSwgMHg4MTRGLCAweDgxNTAsCisgICAgMHg4MTUxLCAweDAwMDAsIDB4MDAwMCwgMHg4MTUyLCAweDgxNTMsIDB4ODE1NCwgMHg4MTU1LCAweDgxNTYsIDB4ODE1NywgMHg4MTU4LCAweDgxNTksIDB4ODE1QSwgMHg4MTVCLCAweDgxNUMsIDB4ODE1RCwgMHg4MTVFLAorICAgIDB4ODE1RiwgMHgwMDAwLCAweDgxNjAsIDB4ODE2MSwgMHg4MTYyLCAweDgxNjMsIDB4ODE2NCwgMHg4MTY1LCAweDgxNjYsIDB4MDAwMCwgMHg4MTY3LCAweDgxNjgsIDB4ODE2OSwgMHg4MTZBLCAweDgxNkIsIDB4ODE2QywKKyAgICAweDgxNkQsIDB4ODE2RSwgMHg4MTZGLCAweDAwMDAsIDB4MDAwMCwgMHg4MTcwLCAweDgxNzEsIDB4MDAwMCwgMHg4MTcyLCAweDAwMDAsIDB4ODE3MywgMHg4MTc0LCAweDgxNzUsIDB4ODE3NiwgMHgwMDAwLCAweDgxNzcsCisgICAgMHg4MTc4LCAweDgxNzksIDB4ODE3QSwgMHg4MTdCLCAweDgxN0MsIDB4ODE3RCwgMHgyMDJBLCAweDAwMDAsIDB4MDAwMCwgMHg4MTdFLCAweDgxN0YsIDB4ODE4MCwgMHg4MTgxLCAweDgxODIsIDB4ODE4MywgMHg4MTg0LAorICAgIDB4ODE4NSwgMHg4MTg2LCAweDgxODcsIDB4MDAwMCwgMHg4MTg4LCAweDgxODksIDB4ODE4QSwgMHg4MThCLCAweDgxOEMsIDB4ODE4RCwgMHgwMDAwLCAweDgxOEUsIDB4ODE4RiwgMHg4MTkwLCAweDgxOTEsIDB4ODE5MiwKKyAgICAweDgxOTMsIDB4ODE5NCwgMHgwMDAwLCAweDgxOTUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODE5NiwgMHgwMDAwLCAweDgxOTcsIDB4ODE5OCwgMHg4MTk5LCAweDgxOUEsIDB4ODE5QiwgMHg4MTlDLCAweDgxOUQsCisgICAgMHg4MTlFLCAweDAwMDAsIDB4MDAwMCwgMHgyMDJDLCAweDIwMkUsIDB4MjAzMCwgMHgyMDMyLCAweDIwMzQsIDB4MjAzNiwgMHgyMDM4LCAweDIwM0EsIDB4MjAzQywgMHgwMDAwLCAweDAwMDAsIDB4ODE5RiwgMHg4MUEwLAorICAgIDB4ODFBMSwgMHg4MUEyLCAweDgxQTMsIDB4ODFBNCwgMHg4MUE1LCAweDgxQTYsIDB4ODFBNywgMHg4MUE4LCAweDgxQTksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4ODFBQSwgMHg4MUFCLCAweDgxQUMsIDB4ODFBRCwgMHg4MUFFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4ODFBRiwgMHg4MUIwLCAweDAwMDAsIDB4ODFCMSwgMHg4MUIyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4MUIzLCAweDgxQjQsIDB4ODFCNSwgMHg4MUI2LCAweDgxQjcsIDB4ODFCOCwgMHg4MUI5LCAweDgxQkEsIDB4ODFCQiwgMHg4MUJDLCAweDgxQkQsIDB4ODFCRSwgMHg4MUJGLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4MUMwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgxQzEsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODFDMiwgMHg4MUMzLCAweDgxQzQsIDB4ODFDNSwgMHg4MUM2LCAweDgxQzcsIDB4ODFDOCwgMHgwMDAwLCAweDgxQzksIDB4MDAwMCwgMHg4MUNBLCAweDgxQ0IsCisgICAgMHg4MUNDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4MUNELCAweDgxQ0UsIDB4ODFDRiwgMHg4MUQwLCAweDgxRDEsIDB4ODFEMiwKKyAgICAweDgxRDMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgxRDQsIDB4ODFENSwgMHg4MUQ2LCAweDgxRDcsIDB4ODFEOCwgMHgwMDAwLAorICAgIDB4ODFEOSwgMHg4MURBLCAweDgxREIsIDB4ODFEQywgMHg4MURELCAweDgxREUsIDB4ODFERiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4MUUwLCAweDgxRTEsIDB4ODFFMiwgMHgwMDAwLCAweDgxRTMsIDB4ODFFNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4MUU1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4ODFFNiwgMHg4MUU3LCAweDAwMDAsIDB4ODFFOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4MUU5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODFFQSwgMHg4MUVCLCAweDgxRUMsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgxRUQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODFFRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4MUVGLCAweDgxRjAsIDB4MDAwMCwgMHg4MUYxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgxRjIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4MUYzLCAweDgxRjQsIDB4ODFGNSwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgxRjYsIDB4ODFGNywgMHgwMDAwLCAweDAwMDAsIDB4ODFGOCwgMHg4MUY5LCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgxRkEsIDB4ODFGQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgxRkMsIDB4ODFGRCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDgxRkUsIDB4ODFGRiwgMHgwMDAwLCAweDAwMDAsIDB4ODIwMCwgMHg4MjAxLAorICAgIDB4ODIwMiwgMHg4MjAzLCAweDgyMDQsIDB4ODIwNSwgMHg4MjA2LCAweDgyMDcsIDB4ODIwOCwgMHg4MjA5LCAweDgyMEEsIDB4ODIwQiwgMHg4MjBDLCAweDgyMEQsIDB4ODIwRSwgMHg4MjBGLCAweDgyMTAsIDB4ODIxMSwKKyAgICAweDgyMTIsIDB4ODIxMywgMHg4MjE0LCAweDgyMTUsIDB4MjAzRSwgMHgyMDQwLCAweDgyMTYsIDB4ODIxNywgMHgwMDAwLCAweDAwMDAsIDB4ODIxOCwgMHg4MjE5LCAweDgyMUEsIDB4ODIxQiwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4MjFDLCAweDgyMUQsIDB4ODIxRSwgMHg4MjFGLCAweDIwNDIsIDB4MjA0NCwgMHg4MjIwLCAweDgyMjEsIDB4ODIyMiwgMHg4MjIzLCAweDAwMDAsIDB4MDAwMCwgMHg4MjI0LCAweDgyMjUsIDB4ODIyNiwgMHg4MjI3LAorICAgIDB4MDAwMCwgMHg4MjI4LCAweDgyMjksIDB4ODIyQSwgMHg4MjJCLCAweDgyMkMsIDB4ODIyRCwgMHg4MjJFLCAweDgyMkYsIDB4ODIzMCwgMHg4MjMxLCAweDAwMDAsIDB4MDAwMCwgMHg4MjMyLCAweDgyMzMsIDB4MDAwMCwKKyAgICAweDgyMzQsIDB4ODIzNSwgMHg4MjM2LCAweDgyMzcsIDB4MjA0NiwgMHgyMDQ4LCAweDgyMzgsIDB4ODIzOSwgMHgwMDAwLCAweDAwMDAsIDB4ODIzQSwgMHg4MjNCLCAweDgyM0MsIDB4ODIzRCwgMHg4MjNFLCAweDgyM0YsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4ODI0MCwgMHg4MjQxLCAweDgyNDIsIDB4ODI0MywgMHg4MjQ0LCAweDgyNDUsIDB4MDAwMCwgMHgwMDAwLCAweDgyNDYsIDB4ODI0NywgMHg4MjQ4LCAweDgyNDksIDB4ODI0QSwgMHg4MjRCLAorICAgIDB4ODI0QywgMHg4MjRELCAweDgyNEUsIDB4ODI0RiwgMHg4MjUwLCAweDgyNTEsIDB4ODI1MiwgMHg4MjUzLCAweDgyNTQsIDB4ODI1NSwgMHg4MjU2LCAweDgyNTcsIDB4ODI1OCwgMHg4MjU5LCAweDgyNUEsIDB4ODI1QiwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4MjVDLCAweDgyNUQsIDB4ODI1RSwgMHg4MjVGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMDRBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwNEMsIDB4MjA0RSwgMHgyMDUwLCAweDIwNTIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgyMDU0LCAweDAwMDAsIDB4MjA1NiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjA1OCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwNUEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDIwNUMsIDB4MDAwMCwgMHgwMDAwLCAweDIwNUUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMDYwLCAweDIwNjIsIDB4MjA2NCwgMHgyMDY2LCAweDIwNjgsIDB4MjA2QSwgMHgyMDZDLCAweDIwNkUsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjA3MCwgMHgyMDcyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjA3NCwgMHgyMDc2LCAweDAwMDAsIDB4MjA3OCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjA3QSwgMHgwMDAwLCAweDAwMDAsIDB4MjA3QywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMDdFLCAweDIwODAsIDB4MjA4MiwgMHgwMDAwLCAweDAwMDAsIDB4MjA4NCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjA4NiwgMHgwMDAwLCAweDAwMDAsIDB4MjA4OCwgMHgyMDhBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjA4QywgMHgyMDhFLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjA5MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjA5MiwgMHgyMDk0LCAweDIwOTYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwOTgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgyMDlBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwOUMsIDB4MjA5RSwgMHgwMDAwLCAweDIwQTAsIDB4MjBBMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjBBNCwgMHgyMEE2LCAweDIwQTgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjBBQSwgMHgwMDAwLCAweDIwQUMsIDB4MjBBRSwgMHgyMEIwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwQjIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjBCNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMEI2LCAweDIwQjgsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4MjYwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjBCQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMEJDLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgyMEJFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjBDMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwQzIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMEM0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjBDNiwgMHgwMDAwLCAweDIwQzgsIDB4MjBDQSwgMHgyMENDLCAweDIwQ0UsIDB4MjBEMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MjBEMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMEQ0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwRDYsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDIwRDgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMERBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjBEQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwREUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMEUwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODI2MSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMEUyLCAweDAwMDAsIDB4MjBFNCwgMHgwMDAwLCAweDIwRTYsIDB4MDAwMCwgMHgyMEU4LCAweDAwMDAsIDB4MjBFQSwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDIwRUMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjBFRSwgMHgwMDAwLCAweDIwRjAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MjBGMiwgMHgyMEY0LCAweDAwMDAsIDB4MjBGNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODI2MiwgMHg4MjYzLCAweDgyNjQsIDB4ODI2NSwKKyAgICAweDgyNjYsIDB4ODI2NywgMHg4MjY4LCAweDgyNjksIDB4ODI2QSwgMHg4MjZCLCAweDgyNkMsIDB4ODI2RCwgMHg4MjZFLCAweDgyNkYsIDB4ODI3MCwgMHgwMDAwLCAweDgyNzEsIDB4ODI3MiwgMHg4MjczLCAweDgyNzQsCisgICAgMHg4Mjc1LCAweDgyNzYsIDB4ODI3NywgMHg4Mjc4LCAweDgyNzksIDB4ODI3QSwgMHg4MjdCLCAweDgyN0MsIDB4ODI3RCwgMHg4MjdFLCAweDgyN0YsIDB4ODI4MCwgMHg4MjgxLCAweDgyODIsIDB4MDAwMCwgMHg4MjgzLAorICAgIDB4ODI4NCwgMHg4Mjg1LCAweDgyODYsIDB4ODI4NywgMHg4Mjg4LCAweDgyODksIDB4ODI4QSwgMHg4MjhCLCAweDgyOEMsIDB4ODI4RCwgMHg4MjhFLCAweDgyOEYsIDB4ODI5MCwgMHg4MjkxLCAweDgyOTIsIDB4ODI5MywKKyAgICAweDgyOTQsIDB4ODI5NSwgMHg4Mjk2LCAweDgyOTcsIDB4ODI5OCwgMHg4Mjk5LCAweDgyOUEsIDB4ODI5QiwgMHg4MjlDLCAweDgyOUQsIDB4ODI5RSwgMHgwMDAwLCAweDgyOUYsIDB4ODJBMCwgMHg4MkExLCAweDgyQTIsCisgICAgMHg4MkEzLCAweDgyQTQsIDB4ODJBNSwgMHg4MkE2LCAweDgyQTcsIDB4ODJBOCwgMHg4MkE5LCAweDgyQUEsIDB4ODJBQiwgMHgwMDAwLCAweDIwRjgsIDB4ODJBQywgMHgwMDAwLCAweDgyQUQsIDB4ODJBRSwgMHg4MkFGLAorICAgIDB4ODJCMCwgMHg4MkIxLCAweDgyQjIsIDB4ODJCMywgMHg4MkI0LCAweDgyQjUsIDB4ODJCNiwgMHg4MkI3LCAweDgyQjgsIDB4ODJCOSwgMHg4MkJBLCAweDgyQkIsIDB4ODJCQywgMHg4MkJELCAweDgyQkUsIDB4ODJCRiwKKyAgICAweDgyQzAsIDB4ODJDMSwgMHg4MkMyLCAweDgyQzMsIDB4ODJDNCwgMHg4MkM1LCAweDgyQzYsIDB4MDAwMCwgMHg4MkM3LCAweDAwMDAsIDB4MDAwMCwgMHg4MkM4LCAweDgyQzksIDB4ODJDQSwgMHg4MkNCLCAweDgyQ0MsCisgICAgMHg4MkNELCAweDgyQ0UsIDB4ODJDRiwgMHg4MkQwLCAweDgyRDEsIDB4ODJEMiwgMHg4MkQzLCAweDgyRDQsIDB4ODJENSwgMHg4MkQ2LCAweDgyRDcsIDB4ODJEOCwgMHg4MkQ5LCAweDgyREEsIDB4ODJEQiwgMHg4MkRDLAorICAgIDB4ODJERCwgMHg4MkRFLCAweDgyREYsIDB4ODJFMCwgMHg4MkUxLCAweDgyRTIsIDB4ODJFMywgMHg4MkU0LCAweDgyRTUsIDB4ODJFNiwgMHg4MkU3LCAweDgyRTgsIDB4ODJFOSwgMHg4MkVBLCAweDgyRUIsIDB4ODJFQywKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4MkVELCAweDgyRUUsIDB4ODJFRiwgMHg4MkYwLCAweDgyRjEsIDB4ODJGMiwgMHg4MkYzLCAweDgyRjQsIDB4ODJGNSwgMHg4MkY2LCAweDgyRjcsIDB4ODJGOCwgMHg4MkY5LCAweDgyRkEsIDB4ODJGQiwgMHg4MkZDLAorICAgIDB4ODJGRCwgMHg4MkZFLCAweDgyRkYsIDB4ODMwMCwgMHg4MzAxLCAweDgzMDIsIDB4ODMwMywgMHg4MzA0LCAweDgzMDUsIDB4ODMwNiwgMHg4MzA3LCAweDgzMDgsIDB4ODMwOSwgMHg4MzBBLCAweDgzMEIsIDB4ODMwQywKKyAgICAweDgzMEQsIDB4ODMwRSwgMHg4MzBGLCAweDgzMTAsIDB4ODMxMSwgMHg4MzEyLCAweDgzMTMsIDB4ODMxNCwgMHg4MzE1LCAweDgzMTYsIDB4ODMxNywgMHg4MzE4LCAweDgzMTksIDB4ODMxQSwgMHg4MzFCLCAweDgzMUMsCisgICAgMHg4MzFELCAweDgzMUUsIDB4ODMxRiwgMHg4MzIwLCAweDgzMjEsIDB4ODMyMiwgMHg4MzIzLCAweDgzMjQsIDB4ODMyNSwgMHg4MzI2LCAweDgzMjcsIDB4ODMyOCwgMHg4MzI5LCAweDgzMkEsIDB4ODMyQiwgMHg4MzJDLAorICAgIDB4ODMyRCwgMHg4MzJFLCAweDgzMkYsIDB4ODMzMCwgMHg4MzMxLCAweDgzMzIsIDB4ODMzMywgMHg4MzM0LCAweDgzMzUsIDB4ODMzNiwgMHg4MzM3LCAweDgzMzgsIDB4ODMzOSwgMHg4MzNBLCAweDgzM0IsIDB4ODMzQywKKyAgICAweDgzM0QsIDB4ODMzRSwgMHg4MzNGLCAweDgzNDAsIDB4ODM0MSwgMHg4MzQyLCAweDgzNDMsIDB4ODM0NCwgMHg4MzQ1LCAweDgzNDYsIDB4ODM0NywgMHg4MzQ4LCAweDgzNDksIDB4ODM0QSwgMHg4MzRCLCAweDgzNEMsCisgICAgMHg4MzRELCAweDgzNEUsIDB4ODM0RiwgMHg4MzUwLCAweDgzNTEsIDB4ODM1MiwgMHg4MzUzLCAweDgzNTQsIDB4ODM1NSwgMHg4MzU2LCAweDgzNTcsIDB4ODM1OCwgMHg4MzU5LCAweDgzNUEsIDB4ODM1QiwgMHg4MzVDLAorICAgIDB4ODM1RCwgMHg4MzVFLCAweDgzNUYsIDB4ODM2MCwgMHg4MzYxLCAweDgzNjIsIDB4ODM2MywgMHg4MzY0LCAweDgzNjUsIDB4ODM2NiwgMHg4MzY3LCAweDgzNjgsIDB4ODM2OSwgMHg4MzZBLCAweDgzNkIsIDB4ODM2QywKKyAgICAweDgzNkQsIDB4ODM2RSwgMHg4MzZGLCAweDgzNzAsIDB4ODM3MSwgMHg4MzcyLCAweDgzNzMsIDB4ODM3NCwgMHg4Mzc1LCAweDgzNzYsIDB4ODM3NywgMHg4Mzc4LCAweDgzNzksIDB4ODM3QSwgMHg4MzdCLCAweDgzN0MsCisgICAgMHg4MzdELCAweDgzN0UsIDB4ODM3RiwgMHg4MzgwLCAweDgzODEsIDB4ODM4MiwgMHg4MzgzLCAweDgzODQsIDB4ODM4NSwgMHg4Mzg2LCAweDgzODcsIDB4ODM4OCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4ODM4OSwgMHg4MzhBLCAweDgzOEIsIDB4ODM4QywgMHg4MzhELCAweDgzOEUsIDB4ODM4RiwgMHg4MzkwLCAweDgzOTEsIDB4ODM5MiwgMHg4MzkzLCAweDgzOTQsIDB4ODM5NSwgMHg4Mzk2LCAweDgzOTcsIDB4ODM5OCwKKyAgICAweDgzOTksIDB4ODM5QSwgMHg4MzlCLCAweDgzOUMsIDB4ODM5RCwgMHg4MzlFLCAweDgzOUYsIDB4ODNBMCwgMHg4M0ExLCAweDgzQTIsIDB4ODNBMywgMHg4M0E0LCAweDgzQTUsIDB4ODNBNiwgMHg4M0E3LCAweDgzQTgsCisgICAgMHg4M0E5LCAweDgzQUEsIDB4ODNBQiwgMHg4M0FDLCAweDgzQUQsIDB4ODNBRSwgMHg4M0FGLCAweDgzQjAsIDB4ODNCMSwgMHg4M0IyLCAweDgzQjMsIDB4ODNCNCwgMHg4M0I1LCAweDgzQjYsIDB4ODNCNywgMHg4M0I4LAorICAgIDB4ODNCOSwgMHg4M0JBLCAweDgzQkIsIDB4ODNCQywgMHg4M0JELCAweDgzQkUsIDB4ODNCRiwgMHg4M0MwLCAweDgzQzEsIDB4ODNDMiwgMHg4M0MzLCAweDgzQzQsIDB4ODNDNSwgMHg4M0M2LCAweDgzQzcsIDB4ODNDOCwKKyAgICAweDgzQzksIDB4ODNDQSwgMHg4M0NCLCAweDgzQ0MsIDB4ODNDRCwgMHg4M0NFLCAweDgzQ0YsIDB4ODNEMCwgMHg4M0QxLCAweDgzRDIsIDB4ODNEMywgMHg4M0Q0LCAweDgzRDUsIDB4ODNENiwgMHg4M0Q3LCAweDgzRDgsCisgICAgMHg4M0Q5LCAweDgzREEsIDB4ODNEQiwgMHg4M0RDLCAweDgzREQsIDB4ODNERSwgMHg4M0RGLCAweDgzRTAsIDB4ODNFMSwgMHg4M0UyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4ODNFMywgMHg4M0U0LCAweDgzRTUsIDB4ODNFNiwgMHg4M0U3LCAweDgzRTgsIDB4ODNFOSwgMHg4M0VBLCAweDgzRUIsIDB4ODNFQywgMHg4M0VELCAweDgzRUUsIDB4ODNFRiwgMHg4M0YwLCAweDgzRjEsIDB4ODNGMiwKKyAgICAweDgzRjMsIDB4ODNGNCwgMHg4M0Y1LCAweDgzRjYsIDB4ODNGNywgMHg4M0Y4LCAweDAwMDAsIDB4MDAwMCwgMHg4M0Y5LCAweDgzRkEsIDB4ODNGQiwgMHg4M0ZDLCAweDgzRkQsIDB4ODNGRSwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4M0ZGLCAweDg0MDAsIDB4ODQwMSwgMHg4NDAyLCAweDg0MDMsIDB4ODQwNCwgMHg4NDA1LCAweDg0MDYsIDB4ODQwNywgMHg4NDA4LCAweDg0MDksIDB4ODQwQSwgMHg4NDBCLCAweDg0MEMsIDB4ODQwRCwgMHg4NDBFLAorICAgIDB4ODQwRiwgMHg4NDEwLCAweDg0MTEsIDB4ODQxMiwgMHg4NDEzLCAweDg0MTQsIDB4ODQxNSwgMHg4NDE2LCAweDg0MTcsIDB4ODQxOCwgMHg4NDE5LCAweDg0MUEsIDB4ODQxQiwgMHg4NDFDLCAweDg0MUQsIDB4ODQxRSwKKyAgICAweDg0MUYsIDB4ODQyMCwgMHg4NDIxLCAweDg0MjIsIDB4ODQyMywgMHg4NDI0LCAweDAwMDAsIDB4MDAwMCwgMHg4NDI1LCAweDg0MjYsIDB4ODQyNywgMHg4NDI4LCAweDg0MjksIDB4ODQyQSwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4NDJCLCAweDg0MkMsIDB4ODQyRCwgMHg4NDJFLCAweDg0MkYsIDB4ODQzMCwgMHg4NDMxLCAweDg0MzIsIDB4MDAwMCwgMHg4NDMzLCAweDAwMDAsIDB4ODQzNCwgMHgwMDAwLCAweDg0MzUsIDB4MDAwMCwgMHg4NDM2LAorICAgIDB4ODQzNywgMHg4NDM4LCAweDg0MzksIDB4ODQzQSwgMHg4NDNCLCAweDg0M0MsIDB4ODQzRCwgMHg4NDNFLCAweDg0M0YsIDB4ODQ0MCwgMHg4NDQxLCAweDg0NDIsIDB4ODQ0MywgMHg4NDQ0LCAweDg0NDUsIDB4ODQ0NiwKKyAgICAweDg0NDcsIDB4ODQ0OCwgMHg4NDQ5LCAweDg0NEEsIDB4ODQ0QiwgMHg4NDRDLCAweDg0NEQsIDB4ODQ0RSwgMHg4NDRGLCAweDg0NTAsIDB4ODQ1MSwgMHg4NDUyLCAweDg0NTMsIDB4ODQ1NCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4NDU1LCAweDg0NTYsIDB4ODQ1NywgMHg4NDU4LCAweDg0NTksIDB4ODQ1QSwgMHg4NDVCLCAweDg0NUMsIDB4ODQ1RCwgMHg4NDVFLCAweDg0NUYsIDB4ODQ2MCwgMHg4NDYxLCAweDg0NjIsIDB4ODQ2MywgMHg4NDY0LAorICAgIDB4ODQ2NSwgMHg4NDY2LCAweDg0NjcsIDB4ODQ2OCwgMHg4NDY5LCAweDg0NkEsIDB4ODQ2QiwgMHg4NDZDLCAweDg0NkQsIDB4ODQ2RSwgMHg4NDZGLCAweDg0NzAsIDB4ODQ3MSwgMHg4NDcyLCAweDg0NzMsIDB4ODQ3NCwKKyAgICAweDg0NzUsIDB4ODQ3NiwgMHg4NDc3LCAweDg0NzgsIDB4ODQ3OSwgMHg4NDdBLCAweDg0N0IsIDB4ODQ3QywgMHg4NDdELCAweDg0N0UsIDB4ODQ3RiwgMHg4NDgwLCAweDg0ODEsIDB4ODQ4MiwgMHg4NDgzLCAweDg0ODQsCisgICAgMHg4NDg1LCAweDg0ODYsIDB4ODQ4NywgMHg4NDg4LCAweDg0ODksIDB4MDAwMCwgMHg4NDhBLCAweDg0OEIsIDB4ODQ4QywgMHg4NDhELCAweDg0OEUsIDB4ODQ4RiwgMHg4NDkwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDg0OTEsIDB4ODQ5MiwgMHg4NDkzLCAweDAwMDAsIDB4ODQ5NCwgMHg4NDk1LCAweDg0OTYsIDB4ODQ5NywgMHg4NDk4LCAweDg0OTksIDB4ODQ5QSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDg0OUIsIDB4ODQ5QywgMHg4NDlELCAweDg0OUUsIDB4MDAwMCwgMHgwMDAwLCAweDg0OUYsIDB4ODRBMCwgMHg4NEExLCAweDg0QTIsIDB4ODRBMywgMHg4NEE0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4NEE1LCAweDg0QTYsIDB4ODRBNywgMHg4NEE4LCAweDg0QTksIDB4ODRBQSwgMHg4NEFCLCAweDg0QUMsIDB4ODRBRCwgMHg4NEFFLCAweDg0QUYsIDB4ODRCMCwgMHg4NEIxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDg0QjIsIDB4ODRCMywgMHg4NEI0LCAweDAwMDAsIDB4ODRCNSwgMHg4NEI2LCAweDg0QjcsIDB4ODRCOCwgMHg4NEI5LCAweDg0QkEsIDB4ODRCQiwgMHg4NEJDLCAweDg0QkQsIDB4MDAwMCwKKyAgICAweDg0QkUsIDB4ODRCRiwgMHg4NEMwLCAweDg0QzEsIDB4ODRDMiwgMHg4NEMzLCAweDg0QzQsIDB4ODRDNSwgMHg4NEM2LCAweDg0QzcsIDB4ODRDOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDg0QzksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg0Q0EsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4NENCLCAweDIwRkEsIDB4MzAwOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODRDQywKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIwRkMsIDB4MzAwQywgMHgwMDAwLCAweDIwRkUsIDB4MzAwRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIxMDAsIDB4MDAwMCwgMHgyMTAyLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIxMDQsIDB4MjEwNiwgMHgyMTA4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg0MDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODRDRCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4NENFLCAweDg0Q0YsIDB4MDAwMCwgMHgwMDAwLCAweDg0RDAsIDB4ODREMSwgMHg4NEQyLCAweDg0RDMsIDB4ODRENCwgMHg4NEQ1LCAweDg0RDYsIDB4ODRENywgMHg4NEQ4LCAweDg0RDksIDB4ODREQSwgMHg4NERCLAorICAgIDB4ODREQywgMHg4NERELCAweDg0REUsIDB4ODRERiwgMHg4NEUwLCAweDg0RTEsIDB4ODRFMiwgMHg4NEUzLCAweDg0RTQsIDB4ODRFNSwgMHg4NEU2LCAweDg0RTcsIDB4ODRFOCwgMHg4NEU5LCAweDg0RUEsIDB4MDAwMCwKKyAgICAweDg0RUIsIDB4ODRFQywgMHg4NEVELCAweDg0RUUsIDB4ODRFRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjEwQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgzMDEyLCAweDMwMTUsIDB4ODRGMCwgMHgyMTBDLCAweDAwMDAsIDB4MzAxOCwgMHgzMDFCLCAweDg0RjEsIDB4MDAwMCwgMHgyMTBFLCAweDg0RjIsIDB4ODRGMywgMHg4NEY0LCAweDg0RjUsIDB4ODRGNiwgMHg4NEY3LAorICAgIDB4ODRGOCwgMHg4NEY5LCAweDg0RkEsIDB4ODRGQiwgMHgwMDAwLCAweDg0RkMsIDB4MjExMCwgMHgwMDAwLCAweDAwMDAsIDB4ODRGRCwgMHg4NEZFLCAweDg0RkYsIDB4ODUwMCwgMHg4NTAxLCAweDg1MDIsIDB4ODUwMywKKyAgICAweDIxMTIsIDB4MzAxRSwgMHgyMTE0LCAweDg1MDQsIDB4ODUwNSwgMHgwMDAwLCAweDg1MDYsIDB4ODUwNywgMHg4NTA4LCAweDAwMDAsIDB4ODUwOSwgMHg4NTBBLCAweDg1MEIsIDB4ODUwQywgMHg4NTBELCAweDg1MEUsCisgICAgMHg4NTBGLCAweDg1MTAsIDB4MDAwMCwgMHg4NTExLCAweDg1MTIsIDB4ODUxMywgMHg4NTE0LCAweDg1MTUsIDB4ODUxNiwgMHg4NTE3LCAweDAwMDAsIDB4MzAyMSwgMHg4NTE4LCAweDg1MTksIDB4ODUxQSwgMHg4NTFCLAorICAgIDB4ODUxQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg1MUQsIDB4ODUxRSwgMHg4NTFGLCAweDg1MjAsIDB4ODUyMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDMwMjQsIDB4MzAyNywgMHg0MDA1LCAweDMwMkEsIDB4MzAyRCwgMHgzMDMwLCAweDMwMzMsIDB4MzAzNiwgMHgzMDM5LCAweDMwM0MsIDB4MzAzRiwgMHgzMDQyLCAweDMwNDUsIDB4MzA0OCwgMHgzMDRCLCAweDIxMTYsCisgICAgMHg4NTIyLCAweDIxMTgsIDB4MzA0RSwgMHgyMTFBLCAweDg1MjMsIDB4MjExQywgMHgzMDUxLCAweDQwMEEsIDB4MjExRSwgMHg4NTI0LCAweDIxMjAsIDB4MzA1NCwgMHg4NTI1LCAweDg1MjYsIDB4ODUyNywgMHg4NTI4LAorICAgIDB4ODUyOSwgMHgyMTIyLCAweDMwNTcsIDB4MjEyNCwgMHg4NTJBLCAweDIxMjYsIDB4MzA1QSwgMHg0MDBGLCAweDIxMjgsIDB4ODUyQiwgMHgyMTJBLCAweDMwNUQsIDB4ODUyQywgMHg4NTJELCAweDg1MkUsIDB4ODUyRiwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDMwNjAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIxMkMsIDB4MjEyRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIxMzAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIxMzIsIDB4MjEzNCwgMHgyMTM2LAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4NTMwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODUzMSwgMHgwMDAwLCAweDAwMDAsIDB4ODUzMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIxMzgsIDB4MDAwMCwgMHgyMTNBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMTNDLCAweDMwNjMsIDB4MDAwMCwgMHgyMTNFLAorICAgIDB4MzA2NiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MjE0MCwgMHgwMDAwLCAweDAwMDAsIDB4MjE0MiwgMHgwMDAwLCAweDAwMDAsIDB4MjE0NCwgMHgwMDAwLCAweDIxNDYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MjE0OCwgMHgwMDAwLCAweDIxNEEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyMTRDLCAweDIxNEUsIDB4MjE1MCwKKyAgICAweDIxNTIsIDB4MjE1NCwgMHgwMDAwLCAweDAwMDAsIDB4MjE1NiwgMHgyMTU4LCAweDAwMDAsIDB4MDAwMCwgMHgyMTVBLCAweDIxNUMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgyMTVFLCAweDIxNjAsIDB4MDAwMCwgMHgwMDAwLCAweDIxNjIsIDB4MjE2NCwgMHgwMDAwLCAweDAwMDAsIDB4MjE2NiwgMHgyMTY4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIxNkEsIDB4MjE2QywgMHgyMTZFLCAweDIxNzAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgyMTcyLCAweDIxNzQsIDB4MjE3NiwgMHgyMTc4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIxN0EsIDB4MjE3QywgMHgyMTdFLCAweDIxODAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODUzMywgMHg4NTM0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgzMDY5LCAweDMwNkMsIDB4MzA2RiwgMHgzMDcyLCAweDMwNzUsIDB4MzA3OCwgMHgzMDdCLCAweDMwN0UsIDB4MjE4MiwgMHgyMTg0LCAweDIxODYsIDB4MjE4OCwgMHgyMThBLCAweDIxOEMsIDB4MjE4RSwgMHgyMTkwLAorICAgIDB4MzA4MSwgMHgzMDg0LCAweDMwODcsIDB4MzA4QSwgMHgzMDhELCAweDMwOTAsIDB4MzA5MywgMHgzMDk2LCAweDMwOTksIDB4MjE5MiwgMHgzMDlDLCAweDMwOUYsIDB4MjE5NCwgMHgyMTk2LCAweDIxOTgsIDB4MjE5QSwKKyAgICAweDIxOUMsIDB4MzBBMiwgMHg4NTM1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4NTM2LCAweDg1MzcsIDB4ODUzOCwgMHg4NTM5LCAweDg1M0EsIDB4ODUzQiwgMHg4NTNDLCAweDg1M0QsIDB4ODUzRSwgMHgyMTlFLCAweDIxQTAsIDB4MjFBMiwgMHgyMUE0LCAweDIxQTYsIDB4MjFBOCwgMHgyMUFBLAorICAgIDB4MjFBQywgMHgyMUFFLCAweDIxQjAsIDB4MjFCMiwgMHgzMEE1LCAweDMwQTgsIDB4MzBBQiwgMHgzMEFFLCAweDMwQjEsIDB4MzBCNCwgMHgzMEI3LCAweDMwQkEsIDB4MzBCRCwgMHg0MDE0LCAweDQwMTksIDB4NDAxRSwKKyAgICAweDQwMjMsIDB4NDAyOCwgMHg0MDJELCAweDQwMzIsIDB4NDAzNywgMHg0MDNDLCAweDQwNDEsIDB4NDA0NiwgMHgyMUI0LCAweDIxQjYsIDB4MjFCOCwgMHgyMUJBLCAweDIxQkMsIDB4MjFCRSwgMHgyMUMwLCAweDIxQzIsCisgICAgMHgyMUM0LCAweDMwQzAsIDB4MzBDMywgMHgzMEM2LCAweDMwQzksIDB4MzBDQywgMHgzMENGLCAweDMwRDIsIDB4MzBENSwgMHgzMEQ4LCAweDMwREIsIDB4MzBERSwgMHgzMEUxLCAweDMwRTQsIDB4MzBFNywgMHgzMEVBLAorICAgIDB4MzBFRCwgMHgzMEYwLCAweDMwRjMsIDB4MzBGNiwgMHgzMEY5LCAweDMwRkMsIDB4MzBGRiwgMHgzMTAyLCAweDMxMDUsIDB4MzEwOCwgMHgzMTBCLCAweDMxMEUsIDB4MzExMSwgMHgzMTE0LCAweDMxMTcsIDB4MzExQSwKKyAgICAweDMxMUQsIDB4MzEyMCwgMHgzMTIzLCAweDMxMjYsIDB4MzEyOSwgMHgzMTJDLCAweDg1M0YsIDB4ODU0MCwgMHg4NTQxLCAweDg1NDIsIDB4ODU0MywgMHg4NTQ0LCAweDg1NDUsIDB4ODU0NiwgMHg4NTQ3LCAweDg1NDgsCisgICAgMHg4NTQ5LCAweDg1NEEsIDB4ODU0QiwgMHg4NTRDLCAweDg1NEQsIDB4ODU0RSwgMHg4NTRGLCAweDg1NTAsIDB4ODU1MSwgMHg4NTUyLCAweDg1NTMsIDB4ODU1NCwgMHg4NTU1LCAweDg1NTYsIDB4ODU1NywgMHg4NTU4LAorICAgIDB4ODU1OSwgMHg4NTVBLCAweDg1NUIsIDB4ODU1QywgMHg4NTVELCAweDg1NUUsIDB4ODU1RiwgMHg4NTYwLCAweDg1NjEsIDB4ODU2MiwgMHg4NTYzLCAweDg1NjQsIDB4ODU2NSwgMHg4NTY2LCAweDg1NjcsIDB4ODU2OCwKKyAgICAweDg1NjksIDB4ODU2QSwgMHg4NTZCLCAweDg1NkMsIDB4ODU2RCwgMHg4NTZFLCAweDg1NkYsIDB4ODU3MCwgMHg4NTcxLCAweDg1NzIsIDB4ODU3MywgMHgyMUM2LCAweDIxQzgsIDB4MjFDQSwgMHgyMUNDLCAweDIxQ0UsCisgICAgMHgyMUQwLCAweDIxRDIsIDB4MjFENCwgMHgyMUQ2LCAweDIxRDgsIDB4ODU3NCwgMHg4NTc1LCAweDg1NzYsIDB4ODU3NywgMHg4NTc4LCAweDg1NzksIDB4ODU3QSwgMHg4NTdCLCAweDg1N0MsIDB4MjFEQSwgMHg4NTdELAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODU3RSwgMHg4NTdGLCAweDg1ODAsIDB4ODU4MSwgMHg4NTgyLCAweDg1ODMsIDB4ODU4NCwgMHg4NTg1LCAweDg1ODYsIDB4MjFEQywKKyAgICAweDg1ODcsIDB4ODU4OCwgMHg4NTg5LCAweDg1OEEsIDB4ODU4QiwgMHg4NThDLCAweDg1OEQsIDB4ODU4RSwgMHg4NThGLCAweDIxREUsIDB4ODU5MCwgMHg4NTkxLCAweDg1OTIsIDB4ODU5MywgMHg4NTk0LCAweDg1OTUsCisgICAgMHg4NTk2LCAweDg1OTcsIDB4ODU5OCwgMHgyMUUwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg0MDRCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgzMTJGLCAweDIxRTIsIDB4MzEzMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjFFNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDg1OTksIDB4ODU5QSwgMHg4NTlCLCAweDg1OUMsIDB4ODU5RCwgMHg4NTlFLCAweDg1OUYsIDB4ODVBMCwgMHg4NUExLCAweDg1QTIsIDB4ODVBMywgMHg4NUE0LCAweDg1QTUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDg1QTYsIDB4ODVBNywgMHg4NUE4LCAweDg1QTksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4NUFBLCAweDg1QUIsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4NUFDLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODVBRCwKKyAgICAweDg1QUUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4NUFGLCAweDAwMDAsIDB4MDAwMCwgMHg4NUIwLCAweDAwMDAsIDB4ODVCMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4ODVCMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4NUIzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODVCNCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4NUI1LCAweDg1QjYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODVCNywgMHg4NUI4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODVCOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDg1QkEsIDB4ODVCQiwgMHg4NUJDLCAweDg1QkQsIDB4ODVCRSwgMHg4NUJGLCAweDg1QzAsIDB4ODVDMSwgMHg4NUMyLCAweDg1QzMsIDB4ODVDNCwgMHg4NUM1LCAweDg1QzYsIDB4ODVDNywgMHg4NUM4LCAweDg1QzksCisgICAgMHg4NUNBLCAweDg1Q0IsIDB4ODVDQywgMHg4NUNELCAweDg1Q0UsIDB4ODVDRiwgMHg4NUQwLCAweDg1RDEsIDB4ODVEMiwgMHg4NUQzLCAweDg1RDQsIDB4ODVENSwgMHg4NUQ2LCAweDg1RDcsIDB4ODVEOCwgMHg4NUQ5LAorICAgIDB4ODVEQSwgMHg4NURCLCAweDg1REMsIDB4ODVERCwgMHg4NURFLCAweDg1REYsIDB4ODVFMCwgMHg4NUUxLCAweDg1RTIsIDB4ODVFMywgMHg4NUU0LCAweDg1RTUsIDB4ODVFNiwgMHg4NUU3LCAweDg1RTgsIDB4ODVFOSwKKyAgICAweDg1RUEsIDB4ODVFQiwgMHg4NUVDLCAweDg1RUQsIDB4ODVFRSwgMHg4NUVGLCAweDg1RjAsIDB4ODVGMSwgMHg4NUYyLCAweDg1RjMsIDB4ODVGNCwgMHg4NUY1LCAweDg1RjYsIDB4ODVGNywgMHg4NUY4LCAweDg1RjksCisgICAgMHg4NUZBLCAweDg1RkIsIDB4ODVGQywgMHg4NUZELCAweDg1RkUsIDB4ODVGRiwgMHg4NjAwLCAweDg2MDEsIDB4ODYwMiwgMHg4NjAzLCAweDg2MDQsIDB4ODYwNSwgMHg4NjA2LCAweDg2MDcsIDB4ODYwOCwgMHg4NjA5LAorICAgIDB4ODYwQSwgMHg4NjBCLCAweDg2MEMsIDB4ODYwRCwgMHg4NjBFLCAweDg2MEYsIDB4ODYxMCwgMHg4NjExLCAweDg2MTIsIDB4ODYxMywgMHg4NjE0LCAweDg2MTUsIDB4ODYxNiwgMHg4NjE3LCAweDg2MTgsIDB4ODYxOSwKKyAgICAweDg2MUEsIDB4ODYxQiwgMHg4NjFDLCAweDg2MUQsIDB4ODYxRSwgMHg4NjFGLCAweDg2MjAsIDB4ODYyMSwgMHg4NjIyLCAweDg2MjMsIDB4ODYyNCwgMHg4NjI1LCAweDg2MjYsIDB4ODYyNywgMHg4NjI4LCAweDg2MjksCisgICAgMHg4NjJBLCAweDg2MkIsIDB4ODYyQywgMHg4NjJELCAweDg2MkUsIDB4ODYyRiwgMHg4NjMwLCAweDg2MzEsIDB4ODYzMiwgMHg4NjMzLCAweDg2MzQsIDB4ODYzNSwgMHg4NjM2LCAweDg2MzcsIDB4ODYzOCwgMHg4NjM5LAorICAgIDB4ODYzQSwgMHg4NjNCLCAweDg2M0MsIDB4ODYzRCwgMHg4NjNFLCAweDg2M0YsIDB4ODY0MCwgMHg4NjQxLCAweDg2NDIsIDB4ODY0MywgMHg4NjQ0LCAweDg2NDUsIDB4ODY0NiwgMHg4NjQ3LCAweDg2NDgsIDB4ODY0OSwKKyAgICAweDg2NEEsIDB4ODY0QiwgMHg4NjRDLCAweDg2NEQsIDB4ODY0RSwgMHg4NjRGLCAweDg2NTAsIDB4ODY1MSwgMHg4NjUyLCAweDg2NTMsIDB4ODY1NCwgMHg4NjU1LCAweDg2NTYsIDB4ODY1NywgMHg4NjU4LCAweDg2NTksCisgICAgMHg4NjVBLCAweDg2NUIsIDB4ODY1QywgMHg4NjVELCAweDg2NUUsIDB4ODY1RiwgMHg4NjYwLCAweDg2NjEsIDB4ODY2MiwgMHg4NjYzLCAweDg2NjQsIDB4ODY2NSwgMHg4NjY2LCAweDg2NjcsIDB4ODY2OCwgMHg4NjY5LAorICAgIDB4ODY2QSwgMHg4NjZCLCAweDg2NkMsIDB4ODY2RCwgMHg4NjZFLCAweDg2NkYsIDB4ODY3MCwgMHg4NjcxLCAweDg2NzIsIDB4ODY3MywgMHg4Njc0LCAweDg2NzUsIDB4ODY3NiwgMHg4Njc3LCAweDg2NzgsIDB4ODY3OSwKKyAgICAweDg2N0EsIDB4ODY3QiwgMHg4NjdDLCAweDg2N0QsIDB4ODY3RSwgMHg4NjdGLCAweDg2ODAsIDB4ODY4MSwgMHg4NjgyLCAweDg2ODMsIDB4ODY4NCwgMHg4Njg1LCAweDg2ODYsIDB4ODY4NywgMHg4Njg4LCAweDg2ODksCisgICAgMHg4NjhBLCAweDg2OEIsIDB4ODY4QywgMHg4NjhELCAweDg2OEUsIDB4ODY4RiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4NjkwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4NjkxLCAweDAwMDAsIDB4ODY5MiwgMHg4NjkzLCAweDg2OTQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjFFNiwgMHgwMDAwLCAweDIxRTgsIDB4MDAwMCwKKyAgICAweDIxRUEsIDB4MDAwMCwgMHgyMUVDLCAweDAwMDAsIDB4MjFFRSwgMHgwMDAwLCAweDIxRjAsIDB4MDAwMCwgMHgyMUYyLCAweDAwMDAsIDB4MjFGNCwgMHgwMDAwLCAweDIxRjYsIDB4MDAwMCwgMHgyMUY4LCAweDAwMDAsCisgICAgMHgyMUZBLCAweDAwMDAsIDB4MjFGQywgMHgwMDAwLCAweDAwMDAsIDB4MjFGRSwgMHgwMDAwLCAweDIyMDAsIDB4MDAwMCwgMHgyMjAyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MjIwNCwgMHgyMjA2LCAweDAwMDAsIDB4MjIwOCwgMHgyMjBBLCAweDAwMDAsIDB4MjIwQywgMHgyMjBFLCAweDAwMDAsIDB4MjIxMCwgMHgyMjEyLCAweDAwMDAsIDB4MjIxNCwgMHgyMjE2LCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIyMTgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjIxQSwgMHgyMjFDLCAweDAwMDAsIDB4MjIxRSwgMHgyMjIwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjIyMiwgMHgwMDAwLCAweDIyMjQsIDB4MDAwMCwKKyAgICAweDIyMjYsIDB4MDAwMCwgMHgyMjI4LCAweDAwMDAsIDB4MjIyQSwgMHgwMDAwLCAweDIyMkMsIDB4MDAwMCwgMHgyMjJFLCAweDAwMDAsIDB4MjIzMCwgMHgwMDAwLCAweDIyMzIsIDB4MDAwMCwgMHgyMjM0LCAweDAwMDAsCisgICAgMHgyMjM2LCAweDAwMDAsIDB4MjIzOCwgMHgwMDAwLCAweDAwMDAsIDB4MjIzQSwgMHgwMDAwLCAweDIyM0MsIDB4MDAwMCwgMHgyMjNFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MjI0MCwgMHgyMjQyLCAweDAwMDAsIDB4MjI0NCwgMHgyMjQ2LCAweDAwMDAsIDB4MjI0OCwgMHgyMjRBLCAweDAwMDAsIDB4MjI0QywgMHgyMjRFLCAweDAwMDAsIDB4MjI1MCwgMHgyMjUyLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIyNTQsIDB4MDAwMCwgMHgwMDAwLCAweDIyNTYsIDB4MjI1OCwgMHgyMjVBLCAweDIyNUMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MjI1RSwgMHgyMjYwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4Njk1LCAweDg2OTYsIDB4ODY5NywgMHg4Njk4LCAweDg2OTksIDB4ODY5QSwgMHg4NjlCLCAweDg2OUMsIDB4ODY5RCwgMHg4NjlFLCAweDg2OUYsIDB4ODZBMCwgMHg4NkExLCAweDg2QTIsIDB4ODZBMywKKyAgICAweDg2QTQsIDB4ODZBNSwgMHg4NkE2LCAweDg2QTcsIDB4ODZBOCwgMHg4NkE5LCAweDg2QUEsIDB4ODZBQiwgMHg4NkFDLCAweDg2QUQsIDB4ODZBRSwgMHg4NkFGLCAweDg2QjAsIDB4ODZCMSwgMHg4NkIyLCAweDg2QjMsCisgICAgMHg4NkI0LCAweDg2QjUsIDB4ODZCNiwgMHg4NkI3LCAweDg2QjgsIDB4ODZCOSwgMHg4NkJBLCAweDg2QkIsIDB4ODZCQywgMHg4NkJELCAweDg2QkUsIDB4ODZCRiwgMHg4NkMwLCAweDg2QzEsIDB4ODZDMiwgMHg4NkMzLAorICAgIDB4ODZDNCwgMHg4NkM1LCAweDg2QzYsIDB4ODZDNywgMHg4NkM4LCAweDg2QzksIDB4ODZDQSwgMHg4NkNCLCAweDg2Q0MsIDB4ODZDRCwgMHg4NkNFLCAweDg2Q0YsIDB4ODZEMCwgMHg4NkQxLCAweDg2RDIsIDB4ODZEMywKKyAgICAweDg2RDQsIDB4ODZENSwgMHg4NkQ2LCAweDg2RDcsIDB4ODZEOCwgMHg4NkQ5LCAweDg2REEsIDB4ODZEQiwgMHg4NkRDLCAweDg2REQsIDB4ODZERSwgMHg4NkRGLCAweDg2RTAsIDB4ODZFMSwgMHg4NkUyLCAweDg2RTMsCisgICAgMHg4NkU0LCAweDg2RTUsIDB4ODZFNiwgMHg4NkU3LCAweDg2RTgsIDB4ODZFOSwgMHg4NkVBLCAweDg2RUIsIDB4ODZFQywgMHg4NkVELCAweDg2RUUsIDB4ODZFRiwgMHg4NkYwLCAweDg2RjEsIDB4ODZGMiwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDg2RjMsIDB4ODZGNCwgMHg4NkY1LCAweDg2RjYsIDB4ODZGNywgMHg4NkY4LCAweDg2RjksIDB4ODZGQSwgMHg4NkZCLCAweDg2RkMsIDB4ODZGRCwgMHg4NkZFLCAweDg2RkYsIDB4ODcwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDMxMzUsIDB4MzEzOCwgMHgzMTNCLCAweDMxM0UsIDB4MzE0MSwgMHgzMTQ0LCAweDMxNDcsIDB4MzE0QSwgMHgzMTRELCAweDMxNTAsIDB4MzE1MywgMHgzMTU2LCAweDMxNTksIDB4MzE1QywgMHg0MDUwLCAweDQwNTUsCisgICAgMHg0MDVBLCAweDQwNUYsIDB4NDA2NCwgMHg0MDY5LCAweDQwNkUsIDB4NDA3MywgMHg0MDc4LCAweDQwN0QsIDB4NDA4MiwgMHg0MDg3LCAweDQwOEMsIDB4NDA5MSwgMHg0MDk2LCAweDQwOUIsIDB4NDBBMywgMHgwMDAwLAorICAgIDB4MzE1RiwgMHgzMTYyLCAweDMxNjUsIDB4MzE2OCwgMHgzMTZCLCAweDMxNkUsIDB4MzE3MSwgMHgzMTc0LCAweDMxNzcsIDB4MzE3QSwgMHgzMTdELCAweDMxODAsIDB4MzE4MywgMHgzMTg2LCAweDMxODksIDB4MzE4QywKKyAgICAweDMxOEYsIDB4MzE5MiwgMHgzMTk1LCAweDMxOTgsIDB4MzE5QiwgMHgzMTlFLCAweDMxQTEsIDB4MzFBNCwgMHgzMUE3LCAweDMxQUEsIDB4MzFBRCwgMHgzMUIwLCAweDMxQjMsIDB4MzFCNiwgMHgzMUI5LCAweDMxQkMsCisgICAgMHgzMUJGLCAweDMxQzIsIDB4MzFDNSwgMHgzMUM4LCAweDg3MDEsIDB4ODcwMiwgMHg4NzAzLCAweDg3MDQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MzFDQiwgMHgyMjYyLCAweDIyNjQsIDB4MjI2NiwgMHgyMjY4LCAweDIyNkEsIDB4MjI2QywgMHgyMjZFLCAweDIyNzAsIDB4MjI3MiwgMHgyMjc0LCAweDIyNzYsIDB4MjI3OCwgMHgyMjdBLCAweDIyN0MsIDB4MjI3RSwKKyAgICAweDg3MDUsIDB4ODcwNiwgMHg4NzA3LCAweDg3MDgsIDB4ODcwOSwgMHg4NzBBLCAweDg3MEIsIDB4ODcwQywgMHg4NzBELCAweDg3MEUsIDB4ODcwRiwgMHg4NzEwLCAweDg3MTEsIDB4ODcxMiwgMHgyMjgwLCAweDIyODIsCisgICAgMHgyMjg0LCAweDIyODYsIDB4MjI4OCwgMHgyMjhBLCAweDIyOEMsIDB4MjI4RSwgMHgyMjkwLCAweDIyOTIsIDB4MjI5NCwgMHgyMjk2LCAweDIyOTgsIDB4MjI5QSwgMHg0MEFBLCAweDQwQjAsIDB4MjI5QywgMHgwMDAwLAorICAgIDB4ODcxMywgMHg4NzE0LCAweDg3MTUsIDB4ODcxNiwgMHg4NzE3LCAweDg3MTgsIDB4ODcxOSwgMHg4NzFBLCAweDg3MUIsIDB4ODcxQywgMHg4NzFELCAweDg3MUUsIDB4ODcxRiwgMHg4NzIwLCAweDg3MjEsIDB4ODcyMiwKKyAgICAweDg3MjMsIDB4ODcyNCwgMHg4NzI1LCAweDg3MjYsIDB4ODcyNywgMHg4NzI4LCAweDg3MjksIDB4ODcyQSwgMHg4NzJCLCAweDg3MkMsIDB4ODcyRCwgMHg4NzJFLCAweDg3MkYsIDB4ODczMCwgMHg4NzMxLCAweDg3MzIsCisgICAgMHg4NzMzLCAweDg3MzQsIDB4ODczNSwgMHg4NzM2LCAweDg3MzcsIDB4ODczOCwgMHg4NzM5LCAweDg3M0EsIDB4ODczQiwgMHg4NzNDLCAweDg3M0QsIDB4ODczRSwgMHg4NzNGLCAweDg3NDAsIDB4ODc0MSwgMHg4NzQyLAorICAgIDB4ODc0MywgMHgyMjlFLCAweDIyQTAsIDB4MjJBMiwgMHgyMkE0LCAweDIyQTYsIDB4MjJBOCwgMHgyMkFBLCAweDIyQUMsIDB4MjJBRSwgMHgyMkIwLCAweDIyQjIsIDB4MjJCNCwgMHgyMkI2LCAweDIyQjgsIDB4MjJCQSwKKyAgICAweDIyQkMsIDB4MjJCRSwgMHgyMkMwLCAweDIyQzIsIDB4MjJDNCwgMHgyMkM2LCAweDIyQzgsIDB4MjJDQSwgMHgyMkNDLCAweDMxQ0UsIDB4MzFEMSwgMHgzMUQ0LCAweDIyQ0UsIDB4MzFENywgMHgyMkQwLCAweDMxREEsCisgICAgMHg4NzQ0LCAweDg3NDUsIDB4ODc0NiwgMHg4NzQ3LCAweDg3NDgsIDB4ODc0OSwgMHg4NzRBLCAweDg3NEIsIDB4ODc0QywgMHg4NzRELCAweDg3NEUsIDB4ODc0RiwgMHg4NzUwLCAweDg3NTEsIDB4ODc1MiwgMHg4NzUzLAorICAgIDB4ODc1NCwgMHg4NzU1LCAweDg3NTYsIDB4ODc1NywgMHg4NzU4LCAweDg3NTksIDB4ODc1QSwgMHg4NzVCLCAweDg3NUMsIDB4ODc1RCwgMHg4NzVFLCAweDg3NUYsIDB4ODc2MCwgMHg4NzYxLCAweDg3NjIsIDB4ODc2MywKKyAgICAweDg3NjQsIDB4ODc2NSwgMHg4NzY2LCAweDg3NjcsIDB4ODc2OCwgMHg4NzY5LCAweDg3NkEsIDB4ODc2QiwgMHg4NzZDLCAweDg3NkQsIDB4ODc2RSwgMHg4NzZGLCAweDg3NzAsIDB4ODc3MSwgMHg4NzcyLCAweDAwMDAsCisgICAgMHg0MEI1LCAweDQwQkEsIDB4NDBCRiwgMHgzMURELCAweDQwQzQsIDB4MzFFMCwgMHgzMUUzLCAweDQwQzksIDB4NDBDRiwgMHgzMUU2LCAweDMxRTksIDB4MzFFQywgMHg0MEQ0LCAweDQwRDksIDB4MzFFRiwgMHgzMUYyLAorICAgIDB4MjJEMiwgMHgzMUY1LCAweDQwREUsIDB4NDBFMywgMHgyMkQ0LCAweDQwRTgsIDB4NDBFRSwgMHg0MEY1LCAweDMxRjgsIDB4NDBGQiwgMHg0MTAxLCAweDQxMDcsIDB4MzFGQiwgMHgzMUZFLCAweDMyMDEsIDB4NDEwQywKKyAgICAweDQxMTEsIDB4NDExNywgMHgzMjA0LCAweDMyMDcsIDB4MzIwQSwgMHgyMkQ2LCAweDIyRDgsIDB4MjJEQSwgMHgyMkRDLCAweDMyMEQsIDB4MzIxMCwgMHg0MTFDLCAweDMyMTMsIDB4NDEyMiwgMHg0MTI3LCAweDMyMTYsCisgICAgMHgyMkRFLCAweDIyRTAsIDB4NDEyRCwgMHg0MTMzLCAweDQxMzgsIDB4MzIxOSwgMHg0MTNFLCAweDIyRTIsIDB4MzIxQywgMHgzMjFGLCAweDMyMjIsIDB4MzIyNSwgMHgzMjI4LCAweDQxNDQsIDB4MzIyQiwgMHgyMkU0LAorICAgIDB4MzIyRSwgMHgzMjMxLCAweDMyMzQsIDB4NDE0OSwgMHgzMjM3LCAweDMyM0EsIDB4MzIzRCwgMHg0MTRFLCAweDQxNTQsIDB4MjJFNiwgMHg0MTU5LCAweDIyRTgsIDB4NDE1RiwgMHg0MTY0LCAweDMyNDAsIDB4MzI0MywKKyAgICAweDMyNDYsIDB4NDE2OSwgMHgyMkVBLCAweDMyNDksIDB4NDE2RSwgMHgyMkVDLCAweDQxNzMsIDB4MzI0QywgMHgyMkVFLCAweDIyRjAsIDB4MjJGMiwgMHgyMkY0LCAweDIyRjYsIDB4MjJGOCwgMHgyMkZBLCAweDIyRkMsCisgICAgMHgyMkZFLCAweDIzMDAsIDB4MzI0RiwgMHgzMjUyLCAweDMyNTUsIDB4MzI1OCwgMHgzMjVCLCAweDMyNUUsIDB4MzI2MSwgMHgzMjY0LCAweDMyNjcsIDB4MzI2QSwgMHgzMjZELCAweDMyNzAsIDB4MzI3MywgMHgzMjc2LAorICAgIDB4MzI3OSwgMHgzMjdDLCAweDIzMDIsIDB4MjMwNCwgMHgzMjdGLCAweDIzMDYsIDB4MjMwOCwgMHgyMzBBLCAweDMyODIsIDB4MzI4NSwgMHgyMzBDLCAweDIzMEUsIDB4MjMxMCwgMHgyMzEyLCAweDIzMTQsIDB4NDE3OSwKKyAgICAweDIzMTYsIDB4MjMxOCwgMHgyMzFBLCAweDIzMUMsIDB4MjMxRSwgMHgyMzIwLCAweDIzMjIsIDB4MjMyNCwgMHgzMjg4LCAweDQxN0UsIDB4MjMyNiwgMHgyMzI4LCAweDIzMkEsIDB4MjMyQywgMHgyMzJFLCAweDIzMzAsCisgICAgMHgyMzMyLCAweDMyOEIsIDB4MzI4RSwgMHgzMjkxLCAweDMyOTQsIDB4MjMzNCwgMHgyMzM2LCAweDIzMzgsIDB4MjMzQSwgMHgyMzNDLCAweDIzM0UsIDB4MjM0MCwgMHgyMzQyLCAweDIzNDQsIDB4MjM0NiwgMHgzMjk3LAorICAgIDB4MzI5QSwgMHgyMzQ4LCAweDMyOUQsIDB4MzJBMCwgMHgzMkEzLCAweDIzNEEsIDB4MzJBNiwgMHgzMkE5LCAweDQxODMsIDB4MjM0QywgMHgzMkFDLCAweDMyQUYsIDB4MzJCMiwgMHgzMkI1LCAweDQxODgsIDB4NDE4RSwKKyAgICAweDIzNEUsIDB4MjM1MCwgMHgyMzUyLCAweDIzNTQsIDB4MjM1NiwgMHgyMzU4LCAweDIzNUEsIDB4MjM1QywgMHgyMzVFLCAweDIzNjAsIDB4MjM2MiwgMHgyMzY0LCAweDIzNjYsIDB4MjM2OCwgMHgyMzZBLCAweDIzNkMsCisgICAgMHgyMzZFLCAweDIzNzAsIDB4NDE5NSwgMHgyMzcyLCAweDIzNzQsIDB4MjM3NiwgMHg0MTlBLCAweDMyQjgsIDB4MjM3OCwgMHgyMzdBLCAweDIzN0MsIDB4MjM3RSwgMHgyMzgwLCAweDIzODIsIDB4MjM4NCwgMHgyMzg2LAorICAgIDB4MjM4OCwgMHgyMzhBLCAweDMyQkIsIDB4MjM4QywgMHgyMzhFLCAweDMyQkUsIDB4MzJDMSwgMHgyMzkwLCAweDQxOUYsIDB4MzJDNCwgMHgyMzkyLCAweDIzOTQsIDB4MjM5NiwgMHgyMzk4LCAweDMyQzcsIDB4MzJDQSwKKyAgICAweDIzOUEsIDB4MjM5QywgMHgyMzlFLCAweDIzQTAsIDB4MjNBMiwgMHgyM0E0LCAweDIzQTYsIDB4MjNBOCwgMHgyM0FBLCAweDMyQ0QsIDB4MzJEMCwgMHgzMkQzLCAweDMyRDYsIDB4MzJEOSwgMHgzMkRDLCAweDMyREYsCisgICAgMHgzMkUyLCAweDMyRTUsIDB4MzJFOCwgMHgzMkVCLCAweDMyRUUsIDB4MzJGMSwgMHgzMkY0LCAweDMyRjcsIDB4MzJGQSwgMHgzMkZELCAweDMzMDAsIDB4MzMwMywgMHgzMzA2LCAweDMzMDksIDB4MzMwQywgMHgzMzBGLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODc3MywKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3NzQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3NzUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3NzYsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4Nzc3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Nzc4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODc3OSwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODc3QSwgMHg4NzdCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3N0MsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4NzdELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4NzdFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4NzdGLCAweDg3ODAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4NzgxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDg3ODIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3ODMsIDB4MDAwMCwgMHgwMDAwLCAweDg3ODQsIDB4MDAwMCwgMHg4Nzg1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDg3ODYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3ODcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Nzg4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3ODksIDB4ODc4QSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3OEIsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4ODc4QywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3OEQsIDB4MDAwMCwgMHg4NzhFLCAweDg3OEYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4ODc5MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3OTEsIDB4MDAwMCwgMHg4NzkyLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODc5MywgMHg4Nzk0LCAweDg3OTUsIDB4MDAwMCwgMHg4Nzk2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3OTcsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4Nzk4LCAweDAwMDAsIDB4MDAwMCwgMHg4Nzk5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3OUEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDg3OUIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODc5QywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3OUQsIDB4MDAwMCwgMHgwMDAwLCAweDg3OUUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4ODc5RiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3QTAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4N0ExLCAweDAwMDAsIDB4ODdBMiwgMHgwMDAwLCAweDg3QTMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0E0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4ODdBNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0E2LCAweDg3QTcsIDB4MDAwMCwgMHgwMDAwLCAweDg3QTgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdBOSwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdBQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4ODdBQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3QUMsIDB4MDAwMCwgMHgwMDAwLCAweDg3QUQsIDB4ODdBRSwgMHg4N0FGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0IwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdCMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4N0IyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdCMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3QjQsIDB4MDAwMCwgMHg4N0I1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdCNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDg3QjcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdCOCwgMHg4N0I5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3QkEsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdCQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDg3QkMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdCRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3QkUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdCRiwgMHgwMDAwLCAweDAwMDAsIDB4ODdDMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0MxLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdDMiwgMHgwMDAwLCAweDg3QzMsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3QzQsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdDNSwgMHg4N0M2LCAweDAwMDAsIDB4ODdDNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0M4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3QzksIDB4MDAwMCwgMHg4N0NBLCAweDg3Q0IsIDB4MDAwMCwgMHg4N0NDLCAweDg3Q0QsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4N0NFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4N0NGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0QwLCAweDAwMDAsIDB4ODdEMSwgMHgwMDAwLCAweDg3RDIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdEMywgMHg4N0Q0LCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4ODdENSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4N0Q2LCAweDAwMDAsIDB4ODdENywgMHgwMDAwLCAweDg3RDgsIDB4MDAwMCwgMHgwMDAwLCAweDg3RDksIDB4MDAwMCwgMHgwMDAwLCAweDg3REEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0RCLCAweDAwMDAsIDB4ODdEQywKKyAgICAweDAwMDAsIDB4ODdERCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4N0RFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0RGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0UwLCAweDAwMDAsIDB4ODdFMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3RTIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3RTMsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDg3RTQsIDB4MDAwMCwgMHg4N0U1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3RTYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDg3RTcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDg3RTgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0U5LCAweDAwMDAsIDB4MDAwMCwgMHg4N0VBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDg3RUIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4ODdFQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3RUQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0VFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3RUYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3RjAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdGMSwgMHg4N0YyLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0YzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdGNCwgMHgwMDAwLCAweDg3RjUsIDB4MDAwMCwgMHg4N0Y2LCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4ODdGNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdGOCwgMHg4N0Y5LCAweDAwMDAsIDB4MDAwMCwgMHg4N0ZBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3RkIsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdGQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4N0ZELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODdGRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg3RkYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODgwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4MDEsIDB4MDAwMCwgMHg4ODAyLCAweDg4MDMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODA0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODgwNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4MDYsIDB4ODgwNywKKyAgICAweDg4MDgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODA5LCAweDAwMDAsIDB4MDAwMCwgMHg4ODBBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODgwQiwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDg4MEMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODgwRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODBFLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDg4MEYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODEwLCAweDg4MTEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4MTIsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4ODgxMywgMHgwMDAwLCAweDg4MTQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODgxNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4ODgxNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODE3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODgxOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDg4MTksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODFBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4MUIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODFDLCAweDAwMDAsIDB4ODgxRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDg4MUUsIDB4ODgxRiwgMHg4ODIwLCAweDAwMDAsIDB4ODgyMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDg4MjIsIDB4ODgyMywgMHg4ODI0LCAweDAwMDAsIDB4MDAwMCwgMHg4ODI1LCAweDAwMDAsIDB4MDAwMCwgMHg4ODI2LCAweDg4MjcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDg4MjgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODI5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4MkEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODgyQiwgMHgwMDAwLCAweDg4MkMsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDg4MkQsIDB4ODgyRSwgMHgwMDAwLCAweDAwMDAsIDB4ODgyRiwgMHgwMDAwLCAweDg4MzAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4ODgzMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4MzIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4MzMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODM0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODgzNSwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODM2LAorICAgIDB4MDAwMCwgMHg4ODM3LCAweDAwMDAsIDB4MDAwMCwgMHg4ODM4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODgzOSwgMHg4ODNBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4M0IsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4ODgzQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4M0QsIDB4MDAwMCwgMHgwMDAwLCAweDg4M0UsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDg4M0YsIDB4MDAwMCwgMHg4ODQwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODQxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NDIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NDMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg0NCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODQ1LCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODQ2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg0NywgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODQ4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NDksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODRBLCAweDg4NEIsIDB4ODg0QywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODRELCAweDg4NEUsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4ODg0RiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODUwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODUxLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODUyLCAweDAwMDAsIDB4ODg1MywgMHg4ODU0LCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4ODg1NSwgMHgwMDAwLCAweDg4NTYsIDB4MDAwMCwgMHgwMDAwLCAweDg4NTcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODU4LCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4ODg1OSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg1QSwgMHgwMDAwLCAweDg4NUIsIDB4ODg1QywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODVELCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODVFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg1RiwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg2MCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg2MSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NjIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4ODYzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODY0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NjUsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODY2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg2NywKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NjgsIDB4ODg2OSwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODZBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg2QiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg2QywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODZELAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NkUsIDB4MDAwMCwgMHgwMDAwLCAweDg4NkYsIDB4ODg3MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NzEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDg4NzIsIDB4MDAwMCwgMHgwMDAwLCAweDg4NzMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NzQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4ODg3NSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NzYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NzcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4NzgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODc5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4N0EsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODdCLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4ODg3QywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODdELCAweDg4N0UsIDB4MDAwMCwgMHg4ODdGLCAweDAwMDAsIDB4ODg4MCwgMHg4ODgxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4ODIsIDB4ODg4MywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg4NCwgMHg4ODg1LCAweDAwMDAsIDB4MDAwMCwgMHg4ODg2LCAweDAwMDAsIDB4ODg4NywgMHg4ODg4LCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg4OSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODhBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4OEIsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg4QywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4ODhELCAweDAwMDAsIDB4ODg4RSwgMHgwMDAwLCAweDAwMDAsIDB4ODg4RiwgMHg4ODkwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4OTEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDg4OTIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg5MywgMHgwMDAwLCAweDg4OTQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODg5NSwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4OTYsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4ODk3LCAweDAwMDAsIDB4ODg5OCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4ODk5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDg4OUEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4ODg5QiwgMHgwMDAwLCAweDAwMDAsIDB4ODg5QywgMHgwMDAwLCAweDAwMDAsIDB4ODg5RCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4OUUsIDB4MDAwMCwgMHgwMDAwLCAweDg4OUYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4ODhBMCwgMHgwMDAwLCAweDg4QTEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEEyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4QTMsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhBNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEE1LCAweDAwMDAsIDB4ODhBNiwgMHgwMDAwLCAweDg4QTcsIDB4ODhBOCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhBOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDg4QUEsIDB4MDAwMCwgMHg4OEFCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4OEFDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhBRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhBRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhBRiwgMHgwMDAwLCAweDAwMDAsIDB4ODhCMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDg4QjEsIDB4MDAwMCwgMHgwMDAwLCAweDg4QjIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4QjMsIDB4ODhCNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEI1LAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhCNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4QjcsIDB4ODhCOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4QjksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEJBLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEJCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4OEJDLCAweDg4QkQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4QkUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhCRiwgMHgwMDAwLCAweDAwMDAsIDB4ODhDMCwgMHgwMDAwLCAweDg4QzEsCisgICAgMHg4OEMyLCAweDg4QzMsIDB4ODhDNCwgMHg4OEM1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEM2LCAweDAwMDAsIDB4MDAwMCwgMHg4OEM3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhDOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4ODhDOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4Q0EsIDB4MDAwMCwgMHg4OENCLCAweDAwMDAsIDB4ODhDQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhDRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OENFLCAweDAwMDAsIDB4ODhDRiwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEQwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhEMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4ODhEMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEQzLCAweDAwMDAsCisgICAgMHg4OEQ0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEQ1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4RDYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhENywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhEOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhEOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OERBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OERCLCAweDg4REMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4ODhERCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDg4REUsIDB4ODhERiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhFMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEUxLCAweDg4RTIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhFMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEU0LCAweDAwMDAsIDB4MDAwMCwgMHg4OEU1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4RTYsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEU3LCAweDAwMDAsIDB4ODhFOCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhFOSwgMHgwMDAwLCAweDg4RUEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEVCLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhFQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEVELCAweDg4RUUsIDB4MDAwMCwgMHgwMDAwLCAweDg4RUYsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4RjAsIDB4MDAwMCwgMHgwMDAwLCAweDg4RjEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4ODhGMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg4RjMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4ODhGNCwgMHg4OEY1LCAweDg4RjYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhGNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEY4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODhGOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEZBLCAweDAwMDAsIDB4MDAwMCwgMHg4OEZCLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4ODhGQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEZELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OEZFLCAweDAwMDAsIDB4ODhGRiwgMHgwMDAwLCAweDAwMDAsIDB4ODkwMCwgMHg4OTAxLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5MDIsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTAzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkwNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDg5MDUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkwNiwgMHg4OTA3LCAweDg5MDgsIDB4MDAwMCwgMHg4OTA5LCAweDAwMDAsIDB4ODkwQSwgMHgwMDAwLCAweDg5MEIsIDB4MDAwMCwKKyAgICAweDg5MEMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkwRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5MEUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTBGLCAweDAwMDAsIDB4ODkxMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDg5MTEsIDB4MDAwMCwgMHg4OTEyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5MTMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTE0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkxNSwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkxNiwgMHgwMDAwLCAweDAwMDAsIDB4ODkxNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDg5MTgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5MTksIDB4ODkxQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTFCLCAweDAwMDAsIDB4ODkxQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4OTFELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4OTFFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTFGLCAweDg5MjAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTIxLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTIyLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5MjMsIDB4ODkyNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkyNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDg5MjYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTI3LCAweDAwMDAsIDB4MDAwMCwgMHg4OTI4LAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkyOSwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5MkEsIDB4MDAwMCwgMHgwMDAwLCAweDg5MkIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTJDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkyRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4ODkyRSwgMHgwMDAwLCAweDAwMDAsIDB4ODkyRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkzMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5MzEsIDB4MDAwMCwgMHg4OTMyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTMzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4ODkzNCwgMHg4OTM1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkzNiwgMHgwMDAwLCAweDAwMDAsIDB4ODkzNywgMHg4OTM4LAorICAgIDB4MDAwMCwgMHg4OTM5LCAweDAwMDAsIDB4MDAwMCwgMHg4OTNBLCAweDAwMDAsIDB4MDAwMCwgMHg4OTNCLCAweDAwMDAsIDB4MDAwMCwgMHg4OTNDLCAweDg5M0QsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkzRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODkzRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4OTQwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTQxLCAweDAwMDAsIDB4MDAwMCwgMHg4OTQyLAorICAgIDB4ODk0MywgMHg4OTQ0LCAweDg5NDUsIDB4MDAwMCwgMHg4OTQ2LCAweDAwMDAsIDB4MDAwMCwgMHg4OTQ3LCAweDAwMDAsIDB4MDAwMCwgMHg4OTQ4LCAweDg5NDksIDB4ODk0QSwgMHgwMDAwLCAweDg5NEIsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk0QywgMHgwMDAwLCAweDg5NEQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5NEUsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5NEYsIDB4MDAwMCwgMHg4OTUwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTUxLCAweDAwMDAsIDB4ODk1MiwgMHg4OTUzLCAweDg5NTQsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDg5NTUsIDB4ODk1NiwgMHg4OTU3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTU4LCAweDAwMDAsIDB4ODk1OSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTVBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTVCLCAweDg5NUMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk1RCwgMHgwMDAwLCAweDAwMDAsIDB4ODk1RSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDg5NUYsIDB4ODk2MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTYxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTYyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTYzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk2NCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5NjUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDg5NjYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk2NywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk2OCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTY5LCAweDg5NkEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk2QiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDg5NkMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5NkQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4ODk2RSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5NkYsIDB4MDAwMCwgMHg4OTcwLCAweDg5NzEsIDB4MDAwMCwgMHg4OTcyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk3MywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDg5NzQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTc1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5NzYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk3NywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk3OCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5NzksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4ODk3QSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5N0IsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTdDLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk3RCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTdFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk3RiwgMHgwMDAwLCAweDg5ODAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk4MSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTgyLCAweDg5ODMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTg0LAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTg1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4OTg2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTg3LAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTg4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5ODksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk4QSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5OEIsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5OEMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OThELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5OEUsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5OEYsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk5MCwgMHgwMDAwLCAweDg5OTEsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk5MiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODk5MywgMHgwMDAwLCAweDAwMDAsIDB4ODk5NCwgMHg4OTk1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTk2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4OTk3LCAweDg5OTgsIDB4MDAwMCwgMHgwMDAwLCAweDg5OTksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5OUEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5OUIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTlDLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OTlELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5OUUsIDB4ODk5RiwgMHg4OUEwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUExLCAweDAwMDAsIDB4MDAwMCwgMHg4OUEyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUEzLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDg5QTQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5QTUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDg5QTYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5QTcsIDB4MDAwMCwgMHg4OUE4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUE5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlBQSwgMHgwMDAwLCAweDAwMDAsIDB4ODlBQiwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4OUFDLCAweDg5QUQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUFFLCAweDg5QUYsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUIwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlCMSwgMHgwMDAwLCAweDAwMDAsIDB4ODlCMiwgMHgwMDAwLCAweDAwMDAsIDB4ODlCMywgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlCNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5QjUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlCNiwgMHg4OUI3LCAweDAwMDAsIDB4ODlCOCwgMHg4OUI5LCAweDg5QkEsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlCQiwgMHgwMDAwLCAweDg5QkMsIDB4ODlCRCwgMHgwMDAwLCAweDg5QkUsIDB4ODlCRiwgMHg4OUMwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlDMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5QzIsIDB4MDAwMCwgMHg4OUMzLCAweDg5QzQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlDNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlDNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5QzcsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4ODlDOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUM5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlDQSwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4ODlDQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlDQywKKyAgICAweDAwMDAsIDB4ODlDRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4ODlDRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5Q0YsIDB4ODlEMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUQxLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUQyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUQzLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5RDQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlENSwgMHgwMDAwLCAweDAwMDAsIDB4ODlENiwgMHg4OUQ3LAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDg5RDgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUQ5LCAweDAwMDAsIDB4ODlEQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDg5REIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5REMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5REQsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlERSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OURGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5RTAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUUxLCAweDg5RTIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUUzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUU0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUU1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlFNiwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4ODlFNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDg5RTgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUU5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlFQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5RUIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5RUMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUVELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4OUVFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlFRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlGMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlGMSwgMHgwMDAwLCAweDg5RjIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5RjMsIDB4ODlGNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUY1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUY2LCAweDAwMDAsIDB4ODlGNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDg5RjgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlGOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlGQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUZCLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5RkMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDg5RkQsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4ODlGRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4OUZGLCAweDhBMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMDEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMDIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEwMywgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEwNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEwNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEwNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEwNywgMHg4QTA4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMDksIDB4MDAwMCwgMHg4QTBBLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEwQiwgMHgwMDAwLCAweDAwMDAsIDB4OEEwQywKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4QTBELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTBFLCAweDAwMDAsIDB4MDAwMCwgMHg4QTBGLCAweDAwMDAsIDB4MDAwMCwgMHg4QTEwLCAweDhBMTEsCisgICAgMHgwMDAwLCAweDhBMTIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMTMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTE0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4QTE1LCAweDhBMTYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMTcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OEExOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEExOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTFBLAorICAgIDB4MDAwMCwgMHg4QTFCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4OEExQywgMHgwMDAwLCAweDAwMDAsIDB4OEExRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTFFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMUYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTIwLAorICAgIDB4OEEyMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEyMiwKKyAgICAweDhBMjMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMjQsIDB4OEEyNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4QTI2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMjcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4OEEyOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTI5LCAweDAwMDAsIDB4OEEyQSwgMHgwMDAwLCAweDAwMDAsIDB4OEEyQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMkMsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhBMkQsIDB4MDAwMCwgMHg4QTJFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMkYsIDB4MDAwMCwgMHgwMDAwLCAweDhBMzAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEzMSwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEzMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTMzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4QTM0LCAweDhBMzUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMzYsIDB4MDAwMCwgMHg4QTM3LCAweDAwMDAsIDB4OEEzOCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBMzksIDB4OEEzQSwgMHgwMDAwLCAweDAwMDAsIDB4OEEzQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEzQywKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTNELCAweDAwMDAsIDB4MDAwMCwgMHg4QTNFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEEzRiwgMHgwMDAwLCAweDhBNDAsCisgICAgMHg4QTQxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTQyLCAweDhBNDMsIDB4OEE0NCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDhBNDUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNDYsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNDcsIDB4OEE0OCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhBNDksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE0QSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNEIsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE0QywgMHg4QTRELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE0RSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE0RiwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNTAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE1MSwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTUyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4QTUzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTU0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDhBNTUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE1NiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4QTU3LCAweDAwMDAsIDB4MDAwMCwgMHg4QTU4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNTksIDB4MDAwMCwgMHgwMDAwLCAweDhBNUEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4QTVCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE1QywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4QTVELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNUUsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4OEE1RiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTYwLCAweDhBNjEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OEE2MiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTYzLCAweDAwMDAsIDB4MDAwMCwgMHg4QTY0LCAweDAwMDAsIDB4MDAwMCwgMHg4QTY1LAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE2NiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTY3LCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE2OCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNjksIDB4MDAwMCwgMHg4QTZBLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNkIsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4OEE2QywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNkQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE2RSwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OEE2RiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBNzAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE3MSwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE3MiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTczLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTc0LCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTc1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE3NiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDhBNzcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTc4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4QTc5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTdBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBN0IsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBN0MsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE3RCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBN0UsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4OEE3RiwgMHgwMDAwLCAweDAwMDAsIDB4OEE4MCwgMHg4QTgxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QTgyLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBODMsIDB4MDAwMCwgMHg4QTg0LCAweDhBODUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDhBODYsIDB4MDAwMCwgMHg4QTg3LCAweDAwMDAsIDB4MDAwMCwgMHg4QTg4LCAweDAwMDAsIDB4OEE4OSwgMHg4QThBLCAweDAwMDAsIDB4OEE4QiwgMHg4QThDLCAweDhBOEQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4QThFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBOEYsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE5MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBOTEsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE5MiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDhBOTMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBOTQsIDB4OEE5NSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBOTYsIDB4OEE5NywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBOTgsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OEE5OSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE5QSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhBOUIsIDB4MDAwMCwgMHg4QTlDLCAweDAwMDAsIDB4MDAwMCwgMHg4QTlELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEE5RSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4OEE5RiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBQTAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUExLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFBMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBQTMsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBQTQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBQTUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUE2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBQTcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4QUE4LCAweDhBQTksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFBQSwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OEFBQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFBQywgMHg4QUFELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4OEFBRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFBRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFCMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFCMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFCMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDhBQjMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBQjQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDhBQjUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBQjYsIDB4MDAwMCwgMHg4QUI3LCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBQjgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUI5LCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhBQkEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBQkIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDhBQkMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUJELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4QUJFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBQkYsIDB4OEFDMCwgMHgwMDAwLCAweDhBQzEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFDMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUMzLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDhBQzQsIDB4MDAwMCwgMHg4QUM1LCAweDAwMDAsIDB4MDAwMCwgMHg4QUM2LCAweDAwMDAsIDB4OEFDNywgMHgwMDAwLCAweDAwMDAsIDB4OEFDOCwgMHg4QUM5LCAweDhBQ0EsIDB4MDAwMCwKKyAgICAweDhBQ0IsIDB4OEFDQywgMHg4QUNELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBQ0UsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUNGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4QUQwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFEMSwgMHgwMDAwLCAweDhBRDIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFEMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBRDQsIDB4MDAwMCwgMHg4QUQ1LCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhBRDYsIDB4MDAwMCwgMHg4QUQ3LCAweDhBRDgsIDB4MDAwMCwgMHgwMDAwLCAweDhBRDksIDB4MDAwMCwgMHgwMDAwLCAweDhBREEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBREIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QURDLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QURELAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFERSwgMHgwMDAwLCAweDhBREYsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUUwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUUxLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBRTIsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFFMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFFNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUU1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBRTYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFFNywKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFFOCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OEFFOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBRUEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBRUIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFFQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUVELAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFFRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUVGLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFGMCwgMHgwMDAwLCAweDhBRjEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4QUYyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUYzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBRjQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEFGNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBRjYsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBRjcsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUY4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBRjksIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBRkEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QUZCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhBRkMsIDB4OEFGRCwgMHg4QUZFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4QUZGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMDEsIDB4OEIwMiwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMDMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMDQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEIwNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjA2LCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhCMDcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjA4LAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMDksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjBBLCAweDAwMDAsIDB4MDAwMCwgMHg4QjBCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjBDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMEQsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4OEIwRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjBGLCAweDhCMTAsIDB4OEIxMSwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDhCMTIsIDB4OEIxMywgMHg4QjE0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMTUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjE2LCAweDhCMTcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEIxOCwgMHg4QjE5LAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMUEsIDB4OEIxQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjFDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEIxRCwgMHg4QjFFLCAweDAwMDAsIDB4OEIxRiwgMHgwMDAwLCAweDAwMDAsIDB4OEIyMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMjEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEIyMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjIzLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMjQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjI1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMjYsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4QjI3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMjgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjI5LCAweDAwMDAsIDB4OEIyQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjJCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEIyQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMkQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjJFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4OEIyRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjMwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjMxLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhCMzIsIDB4MDAwMCwgMHg4QjMzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEIzNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjM1LCAweDAwMDAsIDB4OEIzNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjM3LCAweDhCMzgsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCMzksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCM0EsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjNCLCAweDAwMDAsIDB4OEIzQywgMHg4QjNELCAweDAwMDAsIDB4MDAwMCwgMHg4QjNFLAorICAgIDB4OEIzRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjQwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEI0MSwgMHgwMDAwLCAweDAwMDAsIDB4OEI0MiwgMHgwMDAwLCAweDhCNDMsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4QjQ0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEI0NSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEI0NiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEI0NywgMHg4QjQ4LCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCNDksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4QjRBLCAweDhCNEIsIDB4MDAwMCwgMHg4QjRDLCAweDAwMDAsIDB4OEI0RCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCNEUsIDB4MDAwMCwKKyAgICAweDhCNEYsIDB4MDAwMCwgMHg4QjUwLCAweDAwMDAsIDB4OEI1MSwgMHg4QjUyLCAweDhCNTMsIDB4OEI1NCwgMHg4QjU1LCAweDhCNTYsIDB4MDAwMCwgMHg4QjU3LCAweDAwMDAsIDB4OEI1OCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4QjU5LCAweDAwMDAsIDB4MDAwMCwgMHg4QjVBLCAweDhCNUIsIDB4OEI1QywgMHgwMDAwLCAweDhCNUQsIDB4MDAwMCwgMHg4QjVFLCAweDhCNUYsIDB4OEI2MCwgMHg4QjYxLCAweDhCNjIsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4QjYzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCNjQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCNjUsIDB4MDAwMCwKKyAgICAweDhCNjYsIDB4OEI2NywgMHg4QjY4LCAweDhCNjksIDB4MDAwMCwgMHg4QjZBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCNkIsIDB4OEI2QywgMHgwMDAwLCAweDhCNkQsIDB4MDAwMCwgMHgwMDAwLCAweDhCNkUsCisgICAgMHg4QjZGLCAweDAwMDAsIDB4OEI3MCwgMHg4QjcxLCAweDhCNzIsIDB4MDAwMCwgMHg4QjczLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEI3NCwgMHgwMDAwLAorICAgIDB4OEI3NSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCNzYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCNzcsIDB4MDAwMCwgMHg4Qjc4LCAweDhCNzksIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4OEI3QSwgMHg4QjdCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCN0MsIDB4MDAwMCwgMHg4QjdELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4QjdFLCAweDhCN0YsIDB4OEI4MCwgMHg4QjgxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjgyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4QjgzLCAweDAwMDAsIDB4OEI4NCwgMHgwMDAwLCAweDAwMDAsIDB4OEI4NSwgMHgwMDAwLCAweDhCODYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEI4NywKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCODgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCODksIDB4MDAwMCwgMHg4QjhBLCAweDAwMDAsCisgICAgMHg4QjhCLCAweDAwMDAsIDB4OEI4QywgMHg4QjhELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QjhFLCAweDhCOEYsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4OEI5MCwgMHg4QjkxLCAweDhCOTIsIDB4MDAwMCwgMHg4QjkzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCOTQsIDB4OEI5NSwgMHg4Qjk2LCAweDhCOTcsIDB4MDAwMCwgMHg4Qjk4LCAweDhCOTksIDB4OEI5QSwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEI5QiwgMHgwMDAwLCAweDAwMDAsIDB4OEI5QywgMHgwMDAwLCAweDAwMDAsIDB4OEI5RCwgMHg4QjlFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OEI5RiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCQTAsIDB4OEJBMSwgMHg4QkEyLCAweDhCQTMsIDB4MDAwMCwgMHgwMDAwLCAweDhCQTQsIDB4OEJBNSwgMHgwMDAwLAorICAgIDB4OEJBNiwgMHg4QkE3LCAweDAwMDAsIDB4OEJBOCwgMHgwMDAwLCAweDAwMDAsIDB4OEJBOSwgMHgwMDAwLCAweDhCQUEsIDB4OEJBQiwgMHgwMDAwLCAweDAwMDAsIDB4OEJBQywgMHgwMDAwLCAweDAwMDAsIDB4OEJBRCwKKyAgICAweDAwMDAsIDB4OEJBRSwgMHg4QkFGLCAweDAwMDAsIDB4OEJCMCwgMHgwMDAwLCAweDhCQjEsIDB4MDAwMCwgMHgwMDAwLCAweDhCQjIsIDB4MDAwMCwgMHg4QkIzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJCNCwgMHg4QkI1LCAweDhCQjYsIDB4OEJCNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4OEJCOCwgMHg4QkI5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkJBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCQkIsIDB4MDAwMCwgMHg4QkJDLCAweDhCQkQsIDB4OEJCRSwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCQkYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkMwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkMxLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhCQzIsIDB4OEJDMywgMHgwMDAwLCAweDAwMDAsIDB4OEJDNCwgMHg4QkM1LCAweDhCQzYsIDB4MDAwMCwgMHg4QkM3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCQzgsIDB4OEJDOSwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJDQSwgMHgwMDAwLCAweDhCQ0IsIDB4OEJDQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4QkNELCAweDAwMDAsIDB4OEJDRSwgMHg4QkNGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJEMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkQxLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhCRDIsIDB4OEJEMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkQ0LCAweDhCRDUsIDB4OEJENiwgMHgwMDAwLCAweDhCRDcsIDB4MDAwMCwgMHg4QkQ4LAorICAgIDB4OEJEOSwgMHgwMDAwLCAweDAwMDAsIDB4OEJEQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJEQiwgMHgwMDAwLCAweDAwMDAsIDB4OEJEQywgMHg4QkRELCAweDhCREUsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkRGLCAweDAwMDAsIDB4OEJFMCwgMHgwMDAwLCAweDhCRTEsIDB4MDAwMCwgMHgwMDAwLCAweDhCRTIsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkUzLCAweDAwMDAsIDB4MDAwMCwgMHg4QkU0LCAweDAwMDAsIDB4OEJFNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkU2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkU3LCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCRTgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDhCRTksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkVBLCAweDAwMDAsIDB4OEJFQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJFQywgMHg4QkVELCAweDAwMDAsIDB4OEJFRSwgMHgwMDAwLCAweDAwMDAsIDB4OEJFRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkYwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkYxLCAweDhCRjIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkYzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4QkY0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4QkY1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkY2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJGNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QkY4LCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJGOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEJGQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCRkIsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhCRkMsCisgICAgMHg4QkZELCAweDAwMDAsIDB4OEJGRSwgMHg4QkZGLCAweDAwMDAsIDB4OEMwMCwgMHg4QzAxLCAweDhDMDIsIDB4MDAwMCwgMHg4QzAzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMDQsIDB4OEMwNSwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMDYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMwNywgMHgwMDAwLCAweDAwMDAsIDB4OEMwOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMDksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzBBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzBCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMEMsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMEQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhDMEUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzBGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMxMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMxMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMTIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMTMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMxNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMTUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4OEMxNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMxNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMxOCwgMHg4QzE5LCAweDhDMUEsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzFCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMUMsIDB4MDAwMCwgMHg4QzFELAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMUUsIDB4MDAwMCwgMHg4QzFGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMyMCwKKyAgICAweDhDMjEsIDB4MDAwMCwgMHg4QzIyLCAweDAwMDAsIDB4MDAwMCwgMHg4QzIzLCAweDAwMDAsIDB4MDAwMCwgMHg4QzI0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMjUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzI2LCAweDhDMjcsIDB4OEMyOCwgMHg4QzI5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzJBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzJCLCAweDAwMDAsIDB4OEMyQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMkQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4OEMyRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMyRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4OEMzMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMzMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMzIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4QzMzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMzQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzM1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzM2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMzcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OEMzOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDMzksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMzQSwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzNCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDM0MsIDB4MDAwMCwgMHgwMDAwLCAweDhDM0QsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDM0UsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEMzRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM0MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4QzQxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM0MiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzQzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzQ0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4QzQ1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDNDYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM0NywgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDNDgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4QzQ5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM0QSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzRCLCAweDhDNEMsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDNEQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDNEUsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzRGLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzUwLCAweDAwMDAsIDB4OEM1MSwgMHg4QzUyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDNTMsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4OEM1NCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDNTUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzU2LCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OEM1NywgMHgwMDAwLCAweDAwMDAsIDB4OEM1OCwgMHgwMDAwLCAweDAwMDAsIDB4OEM1OSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDhDNUEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzVCLCAweDAwMDAsIDB4MDAwMCwgMHg4QzVDLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM1RCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM1RSwgMHgwMDAwLCAweDhDNUYsIDB4MDAwMCwgMHg4QzYwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4QzYxLCAweDAwMDAsIDB4MDAwMCwgMHg4QzYyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM2MywKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDNjQsIDB4MDAwMCwgMHgwMDAwLCAweDhDNjUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDNjYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM2NywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzY4LCAweDhDNjksIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM2QSwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM2QiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDNkMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM2RCwgMHgwMDAwLCAweDAwMDAsIDB4OEM2RSwgMHg4QzZGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDhDNzAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM3MSwgMHgwMDAwLCAweDhDNzIsIDB4OEM3MywgMHgwMDAwLCAweDAwMDAsIDB4OEM3NCwgMHg4Qzc1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDNzYsIDB4MDAwMCwgMHgwMDAwLCAweDhDNzcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM3OCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDhDNzksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzdBLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM3QiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDN0MsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDN0QsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDN0UsIDB4OEM3RiwgMHgwMDAwLCAweDAwMDAsIDB4OEM4MCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM4MSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDODIsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM4MywgMHg4Qzg0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Qzg1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Qzg2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDODcsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Qzg4LCAweDAwMDAsIDB4OEM4OSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDOEEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM4QiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM4QywgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDhDOEQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzhFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDOEYsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDOTAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM5MSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM5MiwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDOTMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDOTQsIDB4MDAwMCwgMHgwMDAwLCAweDhDOTUsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OEM5NiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Qzk3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEM5OCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4Qzk5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDOUEsIDB4OEM5QiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4QzlDLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDhDOUQsIDB4OEM5RSwgMHgwMDAwLCAweDAwMDAsIDB4OEM5RiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDQTAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0ExLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OENBMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4Q0EzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OENBNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDQTUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDQTYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0E3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OENBOCwgMHgwMDAwLCAweDhDQTksIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDQUEsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0FCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDQUMsIDB4OENBRCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhDQUUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0FGLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OENCMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDQjEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OENCMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4Q0IzLCAweDhDQjQsIDB4MDAwMCwgMHg4Q0I1LCAweDAwMDAsIDB4MDAwMCwgMHg4Q0I2LCAweDAwMDAsIDB4MDAwMCwgMHg4Q0I3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0I4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OENCOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0JBLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDhDQkIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OENCQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OENCRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDQkUsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OENCRiwgMHgwMDAwLCAweDhDQzAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDQzEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OENDMiwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDQzMsIDB4MDAwMCwgMHgwMDAwLCAweDhDQzQsIDB4MDAwMCwgMHg4Q0M1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhDQzYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OENDNywgMHg4Q0M4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDQzksIDB4MDAwMCwgMHg4Q0NBLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0NCLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDhDQ0MsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0NELCAweDAwMDAsIDB4MDAwMCwgMHg4Q0NFLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0NGLCAweDAwMDAsIDB4OENEMCwKKyAgICAweDhDRDEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OENEMiwgMHgwMDAwLCAweDhDRDMsIDB4MDAwMCwgMHg4Q0Q0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OENENSwgMHg4Q0Q2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OENENywgMHgwMDAwLCAweDhDRDgsIDB4MDAwMCwgMHg4Q0Q5LCAweDAwMDAsIDB4OENEQSwgMHgwMDAwLAorICAgIDB4OENEQiwgMHgwMDAwLCAweDAwMDAsIDB4OENEQywgMHgwMDAwLCAweDhDREQsIDB4OENERSwgMHg4Q0RGLCAweDhDRTAsIDB4MDAwMCwgMHgwMDAwLCAweDhDRTEsIDB4MDAwMCwgMHg4Q0UyLCAweDAwMDAsIDB4OENFMywKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDRTQsIDB4MDAwMCwgMHg4Q0U1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OENFNiwgMHgwMDAwLCAweDAwMDAsIDB4OENFNywgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhDRTgsIDB4MDAwMCwgMHgwMDAwLCAweDhDRTksIDB4MDAwMCwgMHg4Q0VBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDRUIsIDB4MDAwMCwgMHg4Q0VDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4Q0VELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OENFRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhDRUYsIDB4MDAwMCwKKyAgICAweDhDRjAsIDB4MDAwMCwgMHg4Q0YxLCAweDAwMDAsIDB4OENGMiwgMHg4Q0YzLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0Y0LCAweDAwMDAsIDB4MDAwMCwgMHg4Q0Y1LCAweDAwMDAsIDB4MDAwMCwgMHg4Q0Y2LCAweDAwMDAsCisgICAgMHg4Q0Y3LCAweDhDRjgsIDB4OENGOSwgMHg4Q0ZBLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0ZCLCAweDAwMDAsIDB4MDAwMCwgMHg4Q0ZDLCAweDAwMDAsIDB4OENGRCwgMHg4Q0ZFLCAweDhDRkYsIDB4OEQwMCwgMHgwMDAwLAorICAgIDB4OEQwMSwgMHg4RDAyLCAweDhEMDMsIDB4OEQwNCwgMHgwMDAwLCAweDhEMDUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQwNiwgMHgwMDAwLCAweDAwMDAsIDB4OEQwNywKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQwOCwgMHg4RDA5LCAweDhEMEEsIDB4OEQwQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhEMEMsIDB4OEQwRCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhEMEUsIDB4OEQwRiwgMHgwMDAwLCAweDAwMDAsIDB4OEQxMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQxMSwgMHgwMDAwLCAweDhEMTIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQxMywgMHgwMDAwLAorICAgIDB4OEQxNCwgMHg4RDE1LCAweDAwMDAsIDB4OEQxNiwgMHg4RDE3LCAweDhEMTgsIDB4OEQxOSwgMHgwMDAwLCAweDhEMUEsIDB4MDAwMCwgMHg4RDFCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDhEMUMsIDB4MDAwMCwgMHg4RDFELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhEMUUsIDB4MDAwMCwgMHgwMDAwLCAweDhEMUYsIDB4MDAwMCwgMHgwMDAwLCAweDhEMjAsIDB4MDAwMCwgMHgwMDAwLCAweDhEMjEsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OEQyMiwgMHgwMDAwLCAweDhEMjMsIDB4MDAwMCwgMHgwMDAwLCAweDhEMjQsIDB4MDAwMCwgMHg4RDI1LCAweDAwMDAsIDB4OEQyNiwgMHgwMDAwLCAweDhEMjcsIDB4MDAwMCwgMHg4RDI4LAorICAgIDB4MDAwMCwgMHg4RDI5LCAweDhEMkEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQyQiwgMHg4RDJDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhEMkQsIDB4OEQyRSwgMHg4RDJGLCAweDhEMzAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4OEQzMSwgMHg4RDMyLCAweDAwMDAsIDB4OEQzMywgMHgwMDAwLCAweDhEMzQsIDB4OEQzNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDM2LCAweDAwMDAsIDB4OEQzNywgMHg4RDM4LCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhEMzksIDB4MDAwMCwgMHg4RDNBLCAweDAwMDAsIDB4MDAwMCwgMHg4RDNCLCAweDhEM0MsIDB4OEQzRCwgMHgwMDAwLCAweDhEM0UsIDB4MDAwMCwgMHg4RDNGLCAweDAwMDAsIDB4OEQ0MCwgMHgwMDAwLAorICAgIDB4OEQ0MSwgMHg4RDQyLCAweDhENDMsIDB4MDAwMCwgMHg4RDQ0LCAweDhENDUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDQ2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhENDcsIDB4MDAwMCwKKyAgICAweDhENDgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQ0OSwgMHgwMDAwLCAweDhENEEsIDB4OEQ0QiwgMHgwMDAwLCAweDhENEMsIDB4MDAwMCwgMHg4RDRELCAweDAwMDAsIDB4OEQ0RSwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4RDRGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQ1MCwgMHgwMDAwLCAweDAwMDAsIDB4OEQ1MSwgMHg4RDUyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQ1MywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQ1NCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhENTUsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhENTYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDU3LCAweDhENTgsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDU5LCAweDAwMDAsIDB4OEQ1QSwgMHg4RDVCLCAweDhENUMsIDB4MDAwMCwgMHg4RDVELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhENUUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQ1RiwKKyAgICAweDhENjAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQ2MSwgMHgwMDAwLCAweDAwMDAsIDB4OEQ2MiwgMHg4RDYzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQ2NCwgMHg4RDY1LCAweDAwMDAsCisgICAgMHg4RDY2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhENjcsIDB4OEQ2OCwgMHgwMDAwLCAweDAwMDAsIDB4OEQ2OSwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDhENkEsIDB4OEQ2QiwgMHgwMDAwLCAweDhENkMsIDB4OEQ2RCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDZFLCAweDAwMDAsIDB4OEQ2RiwgMHgwMDAwLCAweDhENzAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQ3MSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQ3MiwgMHgwMDAwLAorICAgIDB4OEQ3MywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhENzQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDc1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhENzYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEQ3NywgMHg4RDc4LCAweDAwMDAsCisgICAgMHg4RDc5LCAweDhEN0EsIDB4OEQ3QiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhEN0MsIDB4OEQ3RCwgMHg4RDdFLCAweDhEN0YsIDB4OEQ4MCwgMHg4RDgxLCAweDAwMDAsIDB4MDAwMCwgMHg4RDgyLAorICAgIDB4OEQ4MywgMHgwMDAwLCAweDhEODQsIDB4OEQ4NSwgMHg4RDg2LCAweDAwMDAsIDB4OEQ4NywgMHg4RDg4LCAweDhEODksIDB4MDAwMCwgMHg4RDhBLCAweDhEOEIsIDB4OEQ4QywgMHg4RDhELCAweDAwMDAsIDB4OEQ4RSwKKyAgICAweDhEOEYsIDB4OEQ5MCwgMHg4RDkxLCAweDhEOTIsIDB4OEQ5MywgMHg4RDk0LCAweDAwMDAsIDB4OEQ5NSwgMHg4RDk2LCAweDAwMDAsIDB4OEQ5NywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhEOTgsIDB4OEQ5OSwgMHg4RDlBLCAweDAwMDAsIDB4OEQ5QiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RDlDLCAweDhEOUQsIDB4MDAwMCwgMHg4RDlFLCAweDAwMDAsIDB4OEQ5RiwgMHgwMDAwLAorICAgIDB4OERBMCwgMHg4REExLCAweDhEQTIsIDB4OERBMywgMHg4REE0LCAweDAwMDAsIDB4OERBNSwgMHg4REE2LCAweDAwMDAsIDB4MDAwMCwgMHg4REE3LCAweDAwMDAsIDB4OERBOCwgMHg4REE5LCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OERBQSwgMHg4REFCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OERBQywgMHg4REFELCAweDhEQUUsIDB4OERBRiwgMHg4REIwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhEQjEsIDB4OERCMiwgMHgwMDAwLCAweDhEQjMsIDB4OERCNCwgMHgwMDAwLCAweDhEQjUsIDB4MDAwMCwgMHgwMDAwLCAweDhEQjYsIDB4MDAwMCwgMHg4REI3LAorICAgIDB4OERCOCwgMHgwMDAwLCAweDAwMDAsIDB4OERCOSwgMHg4REJBLCAweDAwMDAsIDB4OERCQiwgMHg4REJDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhEQkQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4REJFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OERCRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4REMwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhEQzEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4REMyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4OERDMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDhEQzQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4REM1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhEQzYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OERDNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4OERDOCwgMHgwMDAwLCAweDAwMDAsIDB4OERDOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OERDQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OERDQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RENDLCAweDhEQ0QsIDB4OERDRSwgMHgwMDAwLCAweDhEQ0YsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4REQwLCAweDhERDEsIDB4OEREMiwgMHgwMDAwLCAweDhERDMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4REQ0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4OERENSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4REQ2LCAweDhERDcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEREOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4OEREOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RERBLCAweDhEREIsIDB4OEREQywgMHg4RERELCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4RERFLCAweDAwMDAsIDB4OERERiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4REUwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhERTEsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OERFMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDhERTMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhERTQsIDB4OERFNSwgMHg4REU2LCAweDhERTcsIDB4OERFOCwgMHgwMDAwLCAweDhERTksIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhERUEsIDB4MDAwMCwgMHg4REVCLCAweDAwMDAsIDB4OERFQywgMHg4REVELCAweDhERUUsIDB4OERFRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OERGMCwgMHgwMDAwLCAweDhERjEsIDB4OERGMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OERGMywgMHg4REY0LCAweDhERjUsIDB4OERGNiwgMHg4REY3LAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhERjgsIDB4OERGOSwgMHgwMDAwLCAweDAwMDAsIDB4OERGQSwgMHg4REZCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OERGQywKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhERkQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4REZFLCAweDAwMDAsIDB4MDAwMCwgMHg4REZGLCAweDAwMDAsIDB4MDAwMCwgMHg4RTAwLCAweDhFMDEsCisgICAgMHg4RTAyLCAweDAwMDAsIDB4OEUwMywgMHgwMDAwLCAweDhFMDQsIDB4OEUwNSwgMHg4RTA2LCAweDAwMDAsIDB4MDAwMCwgMHg4RTA3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFMDgsIDB4OEUwOSwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTBBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEUwQiwKKyAgICAweDAwMDAsIDB4OEUwQywgMHg4RTBELCAweDAwMDAsIDB4OEUwRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTBGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFMTAsIDB4OEUxMSwgMHg4RTEyLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDhFMTMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEUxNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFMTUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhFMTYsIDB4OEUxNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTE4LCAweDhFMTksIDB4MDAwMCwgMHgwMDAwLCAweDhFMUEsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEUxQiwgMHg4RTFDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFMUQsIDB4MDAwMCwgMHgwMDAwLCAweDhFMUUsIDB4MDAwMCwgMHg4RTFGLCAweDAwMDAsCisgICAgMHg4RTIwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTIxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDhFMjIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTIzLCAweDhFMjQsIDB4MDAwMCwgMHg4RTI1LCAweDAwMDAsIDB4OEUyNiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4OEUyNywgMHgwMDAwLCAweDAwMDAsIDB4OEUyOCwgMHgwMDAwLCAweDAwMDAsIDB4OEUyOSwgMHgwMDAwLCAweDAwMDAsIDB4OEUyQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFMkIsCisgICAgMHg4RTJDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEUyRCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEUyRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEUyRiwgMHgwMDAwLCAweDAwMDAsIDB4OEUzMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4RTMxLCAweDAwMDAsIDB4OEUzMiwgMHgwMDAwLCAweDhFMzMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFMzQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFMzUsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4OEUzNiwgMHgwMDAwLCAweDhFMzcsIDB4MDAwMCwgMHg4RTM4LCAweDAwMDAsIDB4OEUzOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTNBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEUzQiwgMHg4RTNDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTNELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEUzRSwgMHgwMDAwLCAweDhFM0YsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTQwLCAweDhFNDEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhFNDIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4OEU0MywgMHg4RTQ0LCAweDAwMDAsIDB4OEU0NSwgMHgwMDAwLCAweDhFNDYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFNDcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEU0OCwgMHg4RTQ5LCAweDAwMDAsIDB4OEU0QSwgMHg4RTRCLCAweDhFNEMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEU0RCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTRFLCAweDhFNEYsIDB4MDAwMCwgMHgwMDAwLCAweDhFNTAsIDB4MDAwMCwgMHg4RTUxLCAweDAwMDAsIDB4MDAwMCwgMHg4RTUyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFNTMsIDB4MDAwMCwgMHg4RTU0LCAweDAwMDAsIDB4OEU1NSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDhFNTYsIDB4OEU1NywgMHgwMDAwLCAweDhFNTgsIDB4OEU1OSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFNUEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEU1QiwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4RTVDLCAweDhFNUQsIDB4MDAwMCwgMHgwMDAwLCAweDhFNUUsIDB4OEU1RiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEU2MCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEU2MSwgMHgwMDAwLCAweDAwMDAsIDB4OEU2MiwgMHg4RTYzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFNjQsIDB4MDAwMCwKKyAgICAweDhFNjUsIDB4MDAwMCwgMHgwMDAwLCAweDhFNjYsIDB4OEU2NywgMHgwMDAwLCAweDAwMDAsIDB4OEU2OCwgMHg4RTY5LCAweDhFNkEsIDB4OEU2QiwgMHgwMDAwLCAweDAwMDAsIDB4OEU2QywgMHg4RTZELCAweDhFNkUsCisgICAgMHg4RTZGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEU3MCwgMHgwMDAwLCAweDAwMDAsIDB4OEU3MSwgMHg4RTcyLCAweDAwMDAsIDB4OEU3MywgMHgwMDAwLCAweDhFNzQsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4RTc1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTc2LCAweDAwMDAsIDB4MDAwMCwgMHg4RTc3LCAweDhFNzgsIDB4MDAwMCwgMHgwMDAwLCAweDhFNzksIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEU3QSwgMHgwMDAwLCAweDhFN0IsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFN0MsIDB4OEU3RCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTdFLCAweDAwMDAsIDB4OEU3RiwgMHgwMDAwLCAweDhFODAsIDB4OEU4MSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTgyLAorICAgIDB4OEU4MywgMHgwMDAwLCAweDAwMDAsIDB4OEU4NCwgMHgwMDAwLCAweDhFODUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTg2LCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4OEU4NywgMHgwMDAwLCAweDhFODgsIDB4MDAwMCwgMHgwMDAwLCAweDhFODksIDB4MDAwMCwgMHg4RThBLCAweDAwMDAsIDB4OEU4QiwgMHg4RThDLCAweDhFOEQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4RThFLCAweDAwMDAsIDB4MDAwMCwgMHg4RThGLCAweDAwMDAsIDB4OEU5MCwgMHg4RTkxLCAweDAwMDAsIDB4OEU5MiwgMHgwMDAwLCAweDhFOTMsIDB4OEU5NCwgMHg4RTk1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEU5NiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RTk3LCAweDAwMDAsIDB4OEU5OCwgMHgwMDAwLCAweDhFOTksIDB4OEU5QSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4OEU5QiwgMHgwMDAwLCAweDhFOUMsIDB4MDAwMCwgMHg4RTlELCAweDAwMDAsIDB4OEU5RSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFOUYsIDB4MDAwMCwgMHgwMDAwLCAweDhFQTAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OEVBMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFQTIsIDB4MDAwMCwgMHg4RUEzLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RUE0LCAweDhFQTUsIDB4OEVBNiwgMHgwMDAwLCAweDhFQTcsIDB4OEVBOCwgMHg4RUE5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFQUEsIDB4OEVBQiwKKyAgICAweDhFQUMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RUFELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFQUUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhFQUYsIDB4MDAwMCwgMHgwMDAwLCAweDhFQjAsIDB4MDAwMCwgMHg4RUIxLCAweDAwMDAsIDB4OEVCMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RUIzLAorICAgIDB4OEVCNCwgMHgwMDAwLCAweDhFQjUsIDB4MDAwMCwgMHgwMDAwLCAweDhFQjYsIDB4MDAwMCwgMHgwMDAwLCAweDhFQjcsIDB4OEVCOCwgMHg4RUI5LCAweDhFQkEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEVCQiwKKyAgICAweDhFQkMsIDB4OEVCRCwgMHg4RUJFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFQkYsIDB4MDAwMCwgMHg4RUMwLCAweDhFQzEsIDB4MDAwMCwgMHg4RUMyLCAweDAwMDAsIDB4MDAwMCwgMHg4RUMzLCAweDhFQzQsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RUM1LCAweDAwMDAsIDB4MDAwMCwgMHg4RUM2LCAweDAwMDAsIDB4OEVDNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4RUM4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEVDOSwgMHg4RUNBLCAweDAwMDAsIDB4MDAwMCwgMHg4RUNCLCAweDhFQ0MsIDB4MDAwMCwgMHg4RUNELCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEVDRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RUNGLCAweDAwMDAsIDB4OEVEMCwgMHg4RUQxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4RUQyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFRDMsIDB4OEVENCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RUQ1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4OEVENiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFRDcsIDB4OEVEOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RUQ5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFREEsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4RURCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEVEQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFREQsIDB4MDAwMCwgMHg4RURFLCAweDAwMDAsIDB4OEVERiwgMHgwMDAwLCAweDAwMDAsIDB4OEVFMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4RUUxLCAweDhFRTIsIDB4OEVFMywgMHgwMDAwLCAweDAwMDAsIDB4OEVFNCwgMHg4RUU1LCAweDAwMDAsIDB4OEVFNiwgMHg4RUU3LCAweDAwMDAsIDB4OEVFOCwgMHgwMDAwLCAweDhFRTksIDB4MDAwMCwKKyAgICAweDhFRUEsIDB4MDAwMCwgMHgwMDAwLCAweDhFRUIsIDB4MDAwMCwgMHg4RUVDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RUVELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhFRUUsIDB4OEVFRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RUYwLCAweDhFRjEsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4OEVGMiwgMHg4RUYzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RUY0LCAweDhFRjUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEVGNiwgMHg4RUY3LCAweDhFRjgsIDB4OEVGOSwKKyAgICAweDAwMDAsIDB4OEVGQSwgMHg4RUZCLCAweDAwMDAsIDB4OEVGQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RUZELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4RUZFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEVGRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGMDEsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEYwMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDhGMDMsIDB4MDAwMCwgMHgwMDAwLCAweDhGMDQsIDB4OEYwNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjA2LCAweDhGMDcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGMDgsIDB4OEYwOSwgMHgwMDAwLCAweDAwMDAsIDB4OEYwQSwgMHgwMDAwLCAweDAwMDAsIDB4OEYwQiwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDhGMEMsIDB4OEYwRCwgMHgwMDAwLCAweDhGMEUsIDB4OEYwRiwgMHgwMDAwLCAweDhGMTAsIDB4MDAwMCwgMHg4RjExLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEYxMiwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEYxMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEYxNCwgMHgwMDAwLCAweDhGMTUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhGMTYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEYxNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEYxOCwgMHgwMDAwLAorICAgIDB4OEYxOSwgMHgwMDAwLCAweDAwMDAsIDB4OEYxQSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjFCLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDhGMUMsIDB4OEYxRCwgMHg4RjFFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEYxRiwgMHgwMDAwLCAweDhGMjAsIDB4MDAwMCwgMHgwMDAwLCAweDhGMjEsIDB4OEYyMiwgMHg4RjIzLCAweDhGMjQsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGMjUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4OEYyNiwgMHgwMDAwLCAweDhGMjcsIDB4OEYyOCwgMHgwMDAwLCAweDAwMDAsIDB4OEYyOSwgMHgwMDAwLCAweDhGMkEsIDB4OEYyQiwgMHgwMDAwLCAweDhGMkMsIDB4OEYyRCwgMHgwMDAwLCAweDhGMkUsIDB4OEYyRiwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4RjMwLCAweDhGMzEsIDB4OEYzMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjMzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhGMzQsIDB4MDAwMCwgMHg4RjM1LCAweDAwMDAsIDB4OEYzNiwgMHgwMDAwLCAweDAwMDAsIDB4OEYzNywgMHg4RjM4LCAweDAwMDAsIDB4OEYzOSwgMHg4RjNBLCAweDhGM0IsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4RjNDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEYzRCwgMHgwMDAwLCAweDAwMDAsIDB4OEYzRSwgMHgwMDAwLCAweDhGM0YsIDB4OEY0MCwgMHg4RjQxLCAweDhGNDIsIDB4OEY0MywKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGNDQsIDB4MDAwMCwgMHgwMDAwLCAweDhGNDUsIDB4OEY0NiwgMHg4RjQ3LCAweDAwMDAsIDB4OEY0OCwgMHg4RjQ5LCAweDhGNEEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4RjRCLCAweDAwMDAsIDB4OEY0QywgMHg4RjRELCAweDhGNEUsIDB4OEY0RiwgMHg4RjUwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjUxLCAweDAwMDAsIDB4OEY1MiwgMHgwMDAwLAorICAgIDB4OEY1MywgMHg4RjU0LCAweDhGNTUsIDB4MDAwMCwgMHg4RjU2LCAweDhGNTcsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjU4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEY1OSwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjVBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4OEY1QiwgMHgwMDAwLCAweDAwMDAsIDB4OEY1QywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGNUQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjVFLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGNUYsIDB4OEY2MCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjYxLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEY2MiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEY2MywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGNjQsIDB4MDAwMCwgMHg4RjY1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4OEY2NiwgMHgwMDAwLCAweDAwMDAsIDB4OEY2NywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjY4LCAweDAwMDAsIDB4MDAwMCwgMHg4RjY5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEY2QSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEY2QiwgMHgwMDAwLCAweDAwMDAsIDB4OEY2QywgMHgwMDAwLCAweDhGNkQsIDB4OEY2RSwgMHgwMDAwLCAweDhGNkYsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4RjcwLCAweDhGNzEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OEY3MiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEY3MywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OEY3NCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGNzUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4Rjc2LCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4Rjc3LCAweDAwMDAsIDB4OEY3OCwgMHgwMDAwLCAweDhGNzksIDB4MDAwMCwgMHg4RjdBLCAweDhGN0IsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGN0MsIDB4MDAwMCwgMHg4RjdELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEY3RSwgMHgwMDAwLCAweDhGN0YsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg4RjgwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjgxLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjgyLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4RjgzLCAweDAwMDAsIDB4OEY4NCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEY4NSwgMHgwMDAwLCAweDhGODYsIDB4OEY4NywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGODgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGODksIDB4MDAwMCwgMHgwMDAwLCAweDhGOEEsIDB4MDAwMCwgMHg4RjhCLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGOEMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEY4RCwKKyAgICAweDAwMDAsIDB4OEY4RSwgMHg4RjhGLCAweDhGOTAsIDB4MDAwMCwgMHg4RjkxLCAweDhGOTIsIDB4OEY5MywgMHg4Rjk0LCAweDAwMDAsIDB4OEY5NSwgMHgwMDAwLCAweDhGOTYsIDB4MDAwMCwgMHg4Rjk3LCAweDhGOTgsCisgICAgMHg4Rjk5LCAweDhGOUEsIDB4OEY5QiwgMHg4RjlDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGOUQsIDB4OEY5RSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RjlGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4RkEwLCAweDAwMDAsIDB4MDAwMCwgMHg4RkExLCAweDAwMDAsIDB4OEZBMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RkEzLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDhGQTQsIDB4MDAwMCwgMHg4RkE1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEZBNiwgMHg4RkE3LCAweDhGQTgsIDB4MDAwMCwgMHg4RkE5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RkFBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RkFCLCAweDhGQUMsIDB4OEZBRCwgMHg4RkFFLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDhGQUYsIDB4OEZCMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGQjEsIDB4OEZCMiwgMHgwMDAwLCAweDhGQjMsIDB4MDAwMCwgMHgwMDAwLCAweDhGQjQsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4RkI1LCAweDAwMDAsIDB4MDAwMCwgMHg4RkI2LCAweDAwMDAsIDB4OEZCNywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RkI4LCAweDhGQjksIDB4MDAwMCwgMHgwMDAwLCAweDhGQkEsCisgICAgMHg4RkJCLCAweDhGQkMsIDB4MDAwMCwgMHg4RkJELCAweDhGQkUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEZCRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGQzAsIDB4OEZDMSwgMHg4RkMyLAorICAgIDB4MDAwMCwgMHg4RkMzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEZDNCwgMHgwMDAwLCAweDhGQzUsIDB4MDAwMCwgMHg4RkM2LCAweDhGQzcsIDB4OEZDOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDhGQzksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEZDQSwgMHgwMDAwLCAweDhGQ0IsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEZDQywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDhGQ0QsIDB4OEZDRSwgMHgwMDAwLCAweDhGQ0YsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEZEMCwgMHg4RkQxLCAweDhGRDIsIDB4MDAwMCwgMHg4RkQzLCAweDAwMDAsIDB4OEZENCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4RkQ1LCAweDAwMDAsIDB4OEZENiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGRDcsIDB4OEZEOCwgMHg4RkQ5LCAweDhGREEsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RkRCLCAweDhGREMsIDB4OEZERCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RkRFLCAweDhGREYsIDB4MDAwMCwgMHg4RkUwLCAweDAwMDAsIDB4OEZFMSwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg4RkUyLCAweDhGRTMsIDB4OEZFNCwgMHgwMDAwLCAweDAwMDAsIDB4OEZFNSwgMHgwMDAwLCAweDhGRTYsIDB4MDAwMCwgMHg4RkU3LCAweDhGRTgsIDB4OEZFOSwgMHgwMDAwLCAweDhGRUEsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4OEZFQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg4RkVDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDhGRUQsIDB4MDAwMCwgMHg4RkVFLCAweDAwMDAsIDB4OEZFRiwgMHg4RkYwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGRjEsIDB4MDAwMCwgMHg4RkYyLCAweDAwMDAsIDB4OEZGMywgMHg4RkY0LAorICAgIDB4MDAwMCwgMHg4RkY1LCAweDAwMDAsIDB4OEZGNiwgMHgwMDAwLCAweDhGRjcsIDB4MDAwMCwgMHgwMDAwLCAweDhGRjgsIDB4OEZGOSwgMHgwMDAwLCAweDhGRkEsIDB4OEZGQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg4RkZDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OEZGRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDhGRkUsIDB4MDAwMCwgMHg4RkZGLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTAwMCwgMHg5MDAxLCAweDkwMDIsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4OTAwMywgMHgwMDAwLCAweDkwMDQsIDB4OTAwNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDkwMDYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4OTAwNywgMHg5MDA4LCAweDkwMDksIDB4MDAwMCwgMHg5MDBBLCAweDkwMEIsIDB4MDAwMCwgMHgwMDAwLCAweDkwMEMsIDB4OTAwRCwgMHgwMDAwLCAweDkwMEUsIDB4MDAwMCwgMHg5MDBGLCAweDAwMDAsIDB4OTAxMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg5MDExLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTAxMiwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg5MDEzLCAweDkwMTQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTAxNSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDE2LAorICAgIDB4MDAwMCwgMHg5MDE3LCAweDkwMTgsIDB4MDAwMCwgMHgwMDAwLCAweDkwMTksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDFBLCAweDkwMUIsIDB4OTAxQywKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwMUQsIDB4MDAwMCwgMHgwMDAwLCAweDkwMUUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwMUYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTAyMCwgMHgwMDAwLCAweDkwMjEsIDB4OTAyMiwgMHgwMDAwLAorICAgIDB4OTAyMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTAyNCwgMHg5MDI1LCAweDkwMjYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwMjcsIDB4MDAwMCwKKyAgICAweDkwMjgsIDB4OTAyOSwgMHg5MDJBLCAweDkwMkIsIDB4OTAyQywgMHg5MDJELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTAyRSwgMHgwMDAwLCAweDkwMkYsIDB4OTAzMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTAzMSwgMHgwMDAwLCAweDkwMzIsIDB4MDAwMCwgMHgwMDAwLCAweDkwMzMsIDB4OTAzNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDM1LAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDkwMzYsIDB4MDAwMCwgMHg5MDM3LCAweDkwMzgsIDB4OTAzOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDNBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwM0IsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTAzQywKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg5MDNELCAweDAwMDAsIDB4OTAzRSwgMHg5MDNGLCAweDkwNDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA0MSwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwNDIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA0MywgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDkwNDQsIDB4MDAwMCwgMHgwMDAwLCAweDkwNDUsIDB4MDAwMCwgMHg5MDQ2LCAweDAwMDAsIDB4OTA0NywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwNDgsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4OTA0OSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA0QSwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwNEIsIDB4MDAwMCwgMHg5MDRDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDRELCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwNEUsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwNEYsIDB4MDAwMCwgMHgwMDAwLCAweDkwNTAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg5MDUxLCAweDAwMDAsIDB4OTA1MiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDUzLCAweDkwNTQsIDB4MDAwMCwKKyAgICAweDkwNTUsIDB4OTA1NiwgMHg5MDU3LCAweDkwNTgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA1OSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDVBLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDVCLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwNUMsIDB4OTA1RCwgMHgwMDAwLCAweDkwNUUsIDB4OTA1RiwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDkwNjAsIDB4OTA2MSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA2MiwgMHgwMDAwLCAweDkwNjMsIDB4OTA2NCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwNjUsIDB4OTA2NiwgMHg5MDY3LCAweDkwNjgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA2OSwgMHgwMDAwLCAweDkwNkEsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHg5MDZCLCAweDkwNkMsIDB4MDAwMCwgMHg5MDZELCAweDAwMDAsIDB4MDAwMCwgMHg5MDZFLCAweDkwNkYsIDB4MDAwMCwgMHg5MDcwLCAweDkwNzEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDkwNzIsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA3MywgMHgwMDAwLCAweDkwNzQsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OTA3NSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA3NiwgMHg5MDc3LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwNzgsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDkwNzksIDB4OTA3QSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA3QiwgMHgwMDAwLCAweDAwMDAsIDB4OTA3QywKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwN0QsIDB4MDAwMCwgMHg5MDdFLCAweDAwMDAsIDB4MDAwMCwgMHg5MDdGLCAweDkwODAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA4MSwgMHg5MDgyLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDkwODMsIDB4OTA4NCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwODUsIDB4MDAwMCwgMHg5MDg2LCAweDkwODcsIDB4OTA4OCwgMHgwMDAwLCAweDAwMDAsIDB4OTA4OSwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDkwOEEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwOEIsIDB4OTA4QywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg5MDhELCAweDAwMDAsIDB4OTA4RSwgMHgwMDAwLCAweDkwOEYsIDB4OTA5MCwgMHg5MDkxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTA5MiwgMHgwMDAwLCAweDkwOTMsCisgICAgMHg5MDk0LCAweDAwMDAsIDB4MDAwMCwgMHg5MDk1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwOTYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwOTcsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDk4LCAweDkwOTksIDB4MDAwMCwgMHg5MDlBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MDlCLCAweDAwMDAsIDB4OTA5QywgMHgwMDAwLCAweDkwOUQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OTA5RSwgMHg5MDlGLCAweDkwQTAsIDB4MDAwMCwgMHg5MEExLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBBMiwgMHg5MEEzLCAweDAwMDAsIDB4OTBBNCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg5MEE1LCAweDAwMDAsIDB4MDAwMCwgMHg5MEE2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEE3LCAweDAwMDAsIDB4OTBBOCwgMHg5MEE5LCAweDkwQUEsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEFCLCAweDAwMDAsIDB4MDAwMCwgMHg5MEFDLCAweDAwMDAsIDB4OTBBRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEFFLAorICAgIDB4OTBBRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEIwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwQjEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBCMiwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg5MEIzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDkwQjQsIDB4OTBCNSwgMHg5MEI2LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEI3LCAweDkwQjgsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4OTBCOSwgMHg5MEJBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEJCLCAweDAwMDAsIDB4OTBCQywgMHgwMDAwLCAweDAwMDAsIDB4OTBCRCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg5MEJFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBCRiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwQzAsIDB4MDAwMCwgMHg5MEMxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBDMiwgMHgwMDAwLCAweDAwMDAsIDB4OTBDMywgMHgwMDAwLCAweDkwQzQsIDB4MDAwMCwgMHg5MEM1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4OTBDNiwgMHgwMDAwLCAweDAwMDAsIDB4OTBDNywgMHg5MEM4LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwQzksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwQ0EsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OTBDQiwgMHgwMDAwLCAweDkwQ0MsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MENELCAweDkwQ0UsIDB4OTBDRiwgMHg5MEQwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEQxLAorICAgIDB4MDAwMCwgMHg5MEQyLCAweDkwRDMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwRDQsIDB4MDAwMCwgMHgwMDAwLCAweDkwRDUsIDB4OTBENiwgMHgwMDAwLCAweDkwRDcsIDB4OTBEOCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBEOSwgMHg5MERBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBEQiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MERDLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDkwREQsIDB4MDAwMCwgMHg5MERFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwREYsIDB4OTBFMCwgMHg5MEUxLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBFMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBFMywgMHgwMDAwLCAweDAwMDAsIDB4OTBFNCwgMHgwMDAwLCAweDkwRTUsIDB4OTBFNiwgMHgwMDAwLCAweDkwRTcsIDB4OTBFOCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBFOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwRUEsIDB4MDAwMCwgMHg5MEVCLCAweDkwRUMsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBFRCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBFRSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEVGLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEYwLCAweDkwRjEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBGMiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwRjMsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwRjQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBGNSwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwRjYsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBGNywgMHgwMDAwLCAweDkwRjgsIDB4OTBGOSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTBGQSwgMHgwMDAwLCAweDkwRkIsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEZDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkwRkQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MEZFLCAweDkwRkYsIDB4MDAwMCwgMHgwMDAwLCAweDkxMDAsIDB4OTEwMSwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg5MTAyLCAweDAwMDAsIDB4OTEwMywgMHg5MTA0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkxMDUsIDB4MDAwMCwgMHgwMDAwLCAweDkxMDYsIDB4MDAwMCwgMHgwMDAwLCAweDkxMDcsCisgICAgMHg5MTA4LCAweDkxMDksIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MTBBLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkxMEIsIDB4MDAwMCwgMHg5MTBDLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDkxMEQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MTBFLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4OTEwRiwgMHg5MTEwLCAweDAwMDAsCisgICAgMHg5MTExLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkxMTIsIDB4OTExMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MTE0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg5MTE1LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg5MTE2LCAweDkxMTcsIDB4OTExOCwgMHg5MTE5LCAweDkxMUEsIDB4OTExQiwgMHg5MTFDLCAweDkxMUQsIDB4OTExRSwgMHg5MTFGLCAweDkxMjAsIDB4OTEyMSwgMHg5MTIyLCAweDkxMjMsIDB4OTEyNCwgMHg5MTI1LAorICAgIDB4OTEyNiwgMHg5MTI3LCAweDkxMjgsIDB4OTEyOSwgMHg5MTJBLCAweDkxMkIsIDB4OTEyQywgMHg5MTJELCAweDkxMkUsIDB4OTEyRiwgMHg5MTMwLCAweDkxMzEsIDB4OTEzMiwgMHg5MTMzLCAweDkxMzQsIDB4OTEzNSwKKyAgICAweDkxMzYsIDB4OTEzNywgMHg5MTM4LCAweDkxMzksIDB4OTEzQSwgMHg5MTNCLCAweDkxM0MsIDB4OTEzRCwgMHg5MTNFLCAweDkxM0YsIDB4OTE0MCwgMHg5MTQxLCAweDkxNDIsIDB4OTE0MywgMHg5MTQ0LCAweDkxNDUsCisgICAgMHg5MTQ2LCAweDkxNDcsIDB4OTE0OCwgMHg5MTQ5LCAweDkxNEEsIDB4OTE0QiwgMHg5MTRDLCAweDkxNEQsIDB4OTE0RSwgMHg5MTRGLCAweDkxNTAsIDB4OTE1MSwgMHg5MTUyLCAweDkxNTMsIDB4OTE1NCwgMHg5MTU1LAorICAgIDB4OTE1NiwgMHg5MTU3LCAweDkxNTgsIDB4OTE1OSwgMHg5MTVBLCAweDkxNUIsIDB4OTE1QywgMHg5MTVELCAweDkxNUUsIDB4OTE1RiwgMHg5MTYwLCAweDkxNjEsIDB4OTE2MiwgMHg5MTYzLCAweDkxNjQsIDB4OTE2NSwKKyAgICAweDkxNjYsIDB4OTE2NywgMHg5MTY4LCAweDkxNjksIDB4OTE2QSwgMHg5MTZCLCAweDkxNkMsIDB4OTE2RCwgMHg5MTZFLCAweDkxNkYsIDB4OTE3MCwgMHg5MTcxLCAweDkxNzIsIDB4OTE3MywgMHg5MTc0LCAweDkxNzUsCisgICAgMHg5MTc2LCAweDkxNzcsIDB4OTE3OCwgMHg5MTc5LCAweDkxN0EsIDB4OTE3QiwgMHg5MTdDLCAweDkxN0QsIDB4OTE3RSwgMHg5MTdGLCAweDkxODAsIDB4OTE4MSwgMHg5MTgyLCAweDkxODMsIDB4OTE4NCwgMHg5MTg1LAorICAgIDB4OTE4NiwgMHg5MTg3LCAweDkxODgsIDB4OTE4OSwgMHg5MThBLCAweDkxOEIsIDB4OTE4QywgMHg5MThELCAweDkxOEUsIDB4OTE4RiwgMHg5MTkwLCAweDkxOTEsIDB4OTE5MiwgMHg5MTkzLCAweDkxOTQsIDB4OTE5NSwKKyAgICAweDkxOTYsIDB4OTE5NywgMHg5MTk4LCAweDkxOTksIDB4OTE5QSwgMHg5MTlCLCAweDkxOUMsIDB4OTE5RCwgMHg5MTlFLCAweDkxOUYsIDB4OTFBMCwgMHg5MUExLCAweDkxQTIsIDB4OTFBMywgMHg5MUE0LCAweDkxQTUsCisgICAgMHg5MUE2LCAweDkxQTcsIDB4OTFBOCwgMHg5MUE5LCAweDkxQUEsIDB4OTFBQiwgMHg5MUFDLCAweDkxQUQsIDB4OTFBRSwgMHg5MUFGLCAweDkxQjAsIDB4OTFCMSwgMHg5MUIyLCAweDkxQjMsIDB4OTFCNCwgMHg5MUI1LAorICAgIDB4OTFCNiwgMHg5MUI3LCAweDkxQjgsIDB4OTFCOSwgMHg5MUJBLCAweDkxQkIsIDB4OTFCQywgMHg5MUJELCAweDkxQkUsIDB4OTFCRiwgMHg5MUMwLCAweDkxQzEsIDB4OTFDMiwgMHg5MUMzLCAweDkxQzQsIDB4OTFDNSwKKyAgICAweDkxQzYsIDB4OTFDNywgMHg5MUM4LCAweDkxQzksIDB4OTFDQSwgMHg5MUNCLCAweDkxQ0MsIDB4OTFDRCwgMHg5MUNFLCAweDkxQ0YsIDB4OTFEMCwgMHg5MUQxLCAweDkxRDIsIDB4OTFEMywgMHg5MUQ0LCAweDkxRDUsCisgICAgMHg5MUQ2LCAweDkxRDcsIDB4OTFEOCwgMHg5MUQ5LCAweDkxREEsIDB4OTFEQiwgMHg5MURDLCAweDkxREQsIDB4OTFERSwgMHg5MURGLCAweDkxRTAsIDB4OTFFMSwgMHg5MUUyLCAweDkxRTMsIDB4OTFFNCwgMHg5MUU1LAorICAgIDB4OTFFNiwgMHg5MUU3LCAweDkxRTgsIDB4OTFFOSwgMHg5MUVBLCAweDkxRUIsIDB4OTFFQywgMHg5MUVELCAweDkxRUUsIDB4OTFFRiwgMHg5MUYwLCAweDkxRjEsIDB4OTFGMiwgMHg5MUYzLCAweDkxRjQsIDB4OTFGNSwKKyAgICAweDkxRjYsIDB4OTFGNywgMHg5MUY4LCAweDkxRjksIDB4OTFGQSwgMHg5MUZCLCAweDkxRkMsIDB4OTFGRCwgMHg5MUZFLCAweDkxRkYsIDB4OTIwMCwgMHg5MjAxLCAweDkyMDIsIDB4OTIwMywgMHg5MjA0LCAweDkyMDUsCisgICAgMHg5MjA2LCAweDkyMDcsIDB4OTIwOCwgMHg5MjA5LCAweDkyMEEsIDB4OTIwQiwgMHg5MjBDLCAweDkyMEQsIDB4OTIwRSwgMHg5MjBGLCAweDkyMTAsIDB4OTIxMSwgMHg5MjEyLCAweDkyMTMsIDB4OTIxNCwgMHg5MjE1LAorICAgIDB4OTIxNiwgMHg5MjE3LCAweDkyMTgsIDB4OTIxOSwgMHg5MjFBLCAweDkyMUIsIDB4OTIxQywgMHg5MjFELCAweDkyMUUsIDB4OTIxRiwgMHg5MjIwLCAweDkyMjEsIDB4OTIyMiwgMHg5MjIzLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDkyMjQsIDB4MDAwMCwgMHg5MjI1LCAweDAwMDAsIDB4MDAwMCwgMHg5MjI2LCAweDkyMjcsIDB4OTIyOCwgMHg5MjI5LCAweDkyMkEsIDB4OTIyQiwgMHg5MjJDLCAweDkyMkQsIDB4OTIyRSwgMHg5MjJGLCAweDAwMDAsCisgICAgMHg5MjMwLCAweDAwMDAsIDB4OTIzMSwgMHgwMDAwLCAweDAwMDAsIDB4OTIzMiwgMHg5MjMzLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDkyMzQsIDB4OTIzNSwgMHg5MjM2LCAweDkyMzcsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4OTIzOCwgMHg5MjM5LCAweDkyM0EsIDB4OTIzQiwgMHg5MjNDLCAweDkyM0QsIDB4OTIzRSwgMHg5MjNGLCAweDkyNDAsIDB4OTI0MSwgMHg5MjQyLCAweDkyNDMsIDB4OTI0NCwgMHg5MjQ1LCAweDkyNDYsIDB4OTI0NywKKyAgICAweDkyNDgsIDB4OTI0OSwgMHg5MjRBLCAweDkyNEIsIDB4OTI0QywgMHg5MjRELCAweDkyNEUsIDB4OTI0RiwgMHg5MjUwLCAweDkyNTEsIDB4OTI1MiwgMHg5MjUzLCAweDkyNTQsIDB4OTI1NSwgMHg5MjU2LCAweDkyNTcsCisgICAgMHg5MjU4LCAweDkyNTksIDB4OTI1QSwgMHg5MjVCLCAweDkyNUMsIDB4OTI1RCwgMHg5MjVFLCAweDkyNUYsIDB4OTI2MCwgMHg5MjYxLCAweDkyNjIsIDB4OTI2MywgMHg5MjY0LCAweDkyNjUsIDB4OTI2NiwgMHg5MjY3LAorICAgIDB4OTI2OCwgMHg5MjY5LCAweDkyNkEsIDB4OTI2QiwgMHg5MjZDLCAweDkyNkQsIDB4OTI2RSwgMHg5MjZGLCAweDkyNzAsIDB4OTI3MSwgMHg5MjcyLCAweDkyNzMsIDB4MDAwMCwgMHg5Mjc0LCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDkyNzUsIDB4OTI3NiwgMHg5Mjc3LCAweDkyNzgsIDB4OTI3OSwgMHg5MjdBLCAweDkyN0IsIDB4OTI3QywgMHg5MjdELCAweDkyN0UsIDB4OTI3RiwgMHg5MjgwLCAweDkyODEsIDB4OTI4MiwgMHg5MjgzLCAweDkyODQsCisgICAgMHg5Mjg1LCAweDkyODYsIDB4OTI4NywgMHg5Mjg4LCAweDkyODksIDB4OTI4QSwgMHg5MjhCLCAweDkyOEMsIDB4OTI4RCwgMHg5MjhFLCAweDkyOEYsIDB4OTI5MCwgMHg5MjkxLCAweDkyOTIsIDB4OTI5MywgMHg5Mjk0LAorICAgIDB4OTI5NSwgMHg5Mjk2LCAweDkyOTcsIDB4OTI5OCwgMHg5Mjk5LCAweDkyOUEsIDB4OTI5QiwgMHg5MjlDLCAweDkyOUQsIDB4OTI5RSwgMHg5MjlGLCAweDkyQTAsIDB4OTJBMSwgMHg5MkEyLCAweDkyQTMsIDB4OTJBNCwKKyAgICAweDkyQTUsIDB4OTJBNiwgMHg5MkE3LCAweDkyQTgsIDB4OTJBOSwgMHg5MkFBLCAweDkyQUIsIDB4OTJBQywgMHg5MkFELCAweDkyQUUsIDB4OTJBRiwgMHg5MkIwLCAweDkyQjEsIDB4OTJCMiwgMHg5MkIzLCAweDkyQjQsCisgICAgMHg5MkI1LCAweDkyQjYsIDB4OTJCNywgMHg5MkI4LCAweDkyQjksIDB4OTJCQSwgMHg5MkJCLCAweDkyQkMsIDB4OTJCRCwgMHg5MkJFLCAweDkyQkYsIDB4OTJDMCwgMHg5MkMxLCAweDkyQzIsIDB4OTJDMywgMHg5MkM0LAorICAgIDB4OTJDNSwgMHg5MkM2LCAweDkyQzcsIDB4OTJDOCwgMHg5MkM5LCAweDkyQ0EsIDB4OTJDQiwgMHg5MkNDLCAweDkyQ0QsIDB4OTJDRSwgMHg5MkNGLCAweDkyRDAsIDB4OTJEMSwgMHg5MkQyLCAweDkyRDMsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHg5MkQ0LCAweDkyRDUsIDB4OTJENiwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MkQ3LCAweDkyRDgsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDIzQUMsIDB4MjNBRSwgMHgyM0IwLCAweDMzMTIsIDB4MzMxNSwgMHgyM0IyLCAweDIzQjQsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgyM0I2LCAweDIzQjgsIDB4MjNCQSwgMHgyM0JDLCAweDIzQkUsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDIzQzAsIDB4MDAwMCwgMHgyM0MyLAorICAgIDB4OTJEOSwgMHg5MkRBLCAweDkyREIsIDB4OTJEQywgMHg5MkRELCAweDkyREUsIDB4OTJERiwgMHg5MkUwLCAweDkyRTEsIDB4OTJFMiwgMHgyM0M0LCAweDIzQzYsIDB4MjNDOCwgMHgyM0NBLCAweDIzQ0MsIDB4MjNDRSwKKyAgICAweDIzRDAsIDB4MjNEMiwgMHgyM0Q0LCAweDIzRDYsIDB4MjNEOCwgMHgyM0RBLCAweDIzREMsIDB4MDAwMCwgMHgyM0RFLCAweDIzRTAsIDB4MjNFMiwgMHgyM0U0LCAweDIzRTYsIDB4MDAwMCwgMHgyM0U4LCAweDAwMDAsCisgICAgMHgyM0VBLCAweDIzRUMsIDB4MDAwMCwgMHgyM0VFLCAweDIzRjAsIDB4MDAwMCwgMHgyM0YyLCAweDIzRjQsIDB4MjNGNiwgMHgyM0Y4LCAweDIzRkEsIDB4MjNGQywgMHgyM0ZFLCAweDI0MDAsIDB4MjQwMiwgMHgyNDA0LAorICAgIDB4OTJFMywgMHg5MkU0LCAweDkyRTUsIDB4OTJFNiwgMHg5MkU3LCAweDkyRTgsIDB4OTJFOSwgMHg5MkVBLCAweDkyRUIsIDB4OTJFQywgMHg5MkVELCAweDkyRUUsIDB4OTJFRiwgMHg5MkYwLCAweDkyRjEsIDB4OTJGMiwKKyAgICAweDkyRjMsIDB4OTJGNCwgMHg5MkY1LCAweDkyRjYsIDB4OTJGNywgMHg5MkY4LCAweDkyRjksIDB4OTJGQSwgMHg5MkZCLCAweDkyRkMsIDB4OTJGRCwgMHg5MkZFLCAweDkyRkYsIDB4OTMwMCwgMHg5MzAxLCAweDkzMDIsCisgICAgMHg5MzAzLCAweDkzMDQsIDB4OTMwNSwgMHg5MzA2LCAweDkzMDcsIDB4OTMwOCwgMHg5MzA5LCAweDkzMEEsIDB4OTMwQiwgMHg5MzBDLCAweDkzMEQsIDB4OTMwRSwgMHg5MzBGLCAweDkzMTAsIDB4OTMxMSwgMHg5MzEyLAorICAgIDB4OTMxMywgMHg5MzE0LCAweDkzMTUsIDB4OTMxNiwgMHg5MzE3LCAweDkzMTgsIDB4OTMxOSwgMHg5MzFBLCAweDkzMUIsIDB4OTMxQywgMHg5MzFELCAweDkzMUUsIDB4OTMxRiwgMHg5MzIwLCAweDkzMjEsIDB4OTMyMiwKKyAgICAweDkzMjMsIDB4OTMyNCwgMHg5MzI1LCAweDkzMjYsIDB4OTMyNywgMHg5MzI4LCAweDkzMjksIDB4OTMyQSwgMHg5MzJCLCAweDkzMkMsIDB4OTMyRCwgMHg5MzJFLCAweDkzMkYsIDB4OTMzMCwgMHg5MzMxLCAweDkzMzIsCisgICAgMHg5MzMzLCAweDkzMzQsIDB4OTMzNSwgMHg5MzM2LCAweDkzMzcsIDB4OTMzOCwgMHg5MzM5LCAweDkzM0EsIDB4OTMzQiwgMHg5MzNDLCAweDkzM0QsIDB4OTMzRSwgMHg5MzNGLCAweDkzNDAsIDB4OTM0MSwgMHg5MzQyLAorICAgIDB4OTM0MywgMHg5MzQ0LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHg5MzQ1LCAweDkzNDYsIDB4OTM0NywgMHg5MzQ4LCAweDkzNDksIDB4OTM0QSwgMHg5MzRCLCAweDkzNEMsIDB4OTM0RCwgMHg5MzRFLCAweDkzNEYsIDB4OTM1MCwgMHg5MzUxLAorICAgIDB4OTM1MiwgMHg5MzUzLCAweDkzNTQsIDB4OTM1NSwgMHg5MzU2LCAweDkzNTcsIDB4OTM1OCwgMHg5MzU5LCAweDkzNUEsIDB4OTM1QiwgMHgyNDA2LCAweDI0MDgsIDB4MjQwQSwgMHgyNDBDLCAweDI0MEUsIDB4MjQxMCwKKyAgICAweDI0MTIsIDB4MjQxNCwgMHgyNDE2LCAweDI0MTgsIDB4MjQxQSwgMHgyNDFDLCAweDI0MUUsIDB4MjQyMCwgMHgyNDIyLCAweDI0MjQsIDB4MjQyNiwgMHgyNDI4LCAweDkzNUMsIDB4OTM1RCwgMHg5MzVFLCAweDkzNUYsCisgICAgMHgyNDJBLCAweDI0MkMsIDB4MjQyRSwgMHgyNDMwLCAweDI0MzIsIDB4MjQzNCwgMHgyNDM2LCAweDI0MzgsIDB4MjQzQSwgMHgyNDNDLCAweDI0M0UsIDB4MjQ0MCwgMHgyNDQyLCAweDI0NDQsIDB4MjQ0NiwgMHgyNDQ4LAorICAgIDB4MjQ0QSwgMHgyNDRDLCAweDI0NEUsIDB4MjQ1MCwgMHgyNDUyLCAweDI0NTQsIDB4MjQ1NiwgMHgyNDU4LCAweDI0NUEsIDB4MjQ1QywgMHgyNDVFLCAweDI0NjAsIDB4MjQ2MiwgMHgyNDY0LCAweDI0NjYsIDB4MjQ2OCwKKyAgICAweDI0NkEsIDB4MjQ2QywgMHgyNDZFLCAweDI0NzAsIDB4MjQ3MiwgMHgyNDc0LCAweDI0NzYsIDB4MjQ3OCwgMHgyNDdBLCAweDI0N0MsIDB4MjQ3RSwgMHgyNDgwLCAweDI0ODIsIDB4MjQ4NCwgMHgyNDg2LCAweDI0ODgsCisgICAgMHgyNDhBLCAweDI0OEMsIDB4MjQ4RSwgMHgyNDkwLCAweDI0OTIsIDB4MjQ5NCwgMHgyNDk2LCAweDI0OTgsIDB4MjQ5QSwgMHgyNDlDLCAweDI0OUUsIDB4MjRBMCwgMHgyNEEyLCAweDI0QTQsIDB4MjRBNiwgMHgyNEE4LAorICAgIDB4MjRBQSwgMHgyNEFDLCAweDI0QUUsIDB4MjRCMCwgMHgyNEIyLCAweDI0QjQsIDB4MjRCNiwgMHgyNEI4LCAweDI0QkEsIDB4MjRCQywgMHgyNEJFLCAweDI0QzAsIDB4MjRDMiwgMHgyNEM0LCAweDI0QzYsIDB4MjRDOCwKKyAgICAweDI0Q0EsIDB4MjRDQywgMHgyNENFLCAweDI0RDAsIDB4MjREMiwgMHgyNEQ0LCAweDI0RDYsIDB4MjREOCwgMHgyNERBLCAweDI0REMsIDB4MjRERSwgMHgyNEUwLCAweDI0RTIsIDB4MjRFNCwgMHgyNEU2LCAweDI0RTgsCisgICAgMHgyNEVBLCAweDI0RUMsIDB4MjRFRSwgMHgyNEYwLCAweDI0RjIsIDB4MjRGNCwgMHgyNEY2LCAweDI0RjgsIDB4MjRGQSwgMHgyNEZDLCAweDI0RkUsIDB4MjUwMCwgMHgyNTAyLCAweDI1MDQsIDB4MjUwNiwgMHgyNTA4LAorICAgIDB4MjUwQSwgMHgyNTBDLCAweDI1MEUsIDB4MjUxMCwgMHgyNTEyLCAweDI1MTQsIDB4MjUxNiwgMHgyNTE4LCAweDI1MUEsIDB4MjUxQywgMHgyNTFFLCAweDI1MjAsIDB4MjUyMiwgMHgyNTI0LCAweDI1MjYsIDB4MjUyOCwKKyAgICAweDI1MkEsIDB4MjUyQywgMHgyNTJFLCAweDI1MzAsIDB4MjUzMiwgMHgyNTM0LCAweDI1MzYsIDB4MjUzOCwgMHgyNTNBLCAweDI1M0MsIDB4MjUzRSwgMHgyNTQwLCAweDI1NDIsIDB4MjU0NCwgMHgyNTQ2LCAweDI1NDgsCisgICAgMHgyNTRBLCAweDI1NEMsIDB4MjU0RSwgMHgyNTUwLCAweDI1NTIsIDB4MjU1NCwgMHgyNTU2LCAweDI1NTgsIDB4MjU1QSwgMHgyNTVDLCAweDI1NUUsIDB4MjU2MCwgMHgyNTYyLCAweDI1NjQsIDB4MjU2NiwgMHgyNTY4LAorICAgIDB4MjU2QSwgMHgyNTZDLCAweDI1NkUsIDB4MjU3MCwgMHgyNTcyLCAweDI1NzQsIDB4MjU3NiwgMHgyNTc4LCAweDI1N0EsIDB4MjU3QywgMHgyNTdFLCAweDI1ODAsIDB4MjU4MiwgMHgyNTg0LCAweDI1ODYsIDB4MjU4OCwKKyAgICAweDI1OEEsIDB4MjU4QywgMHgyNThFLCAweDI1OTAsIDB4MjU5MiwgMHgyNTk0LCAweDI1OTYsIDB4MjU5OCwgMHgyNTlBLCAweDI1OUMsIDB4MjU5RSwgMHgyNUEwLCAweDI1QTIsIDB4MjVBNCwgMHgyNUE2LCAweDI1QTgsCisgICAgMHgyNUFBLCAweDI1QUMsIDB4MjVBRSwgMHgyNUIwLCAweDI1QjIsIDB4MjVCNCwgMHgyNUI2LCAweDI1QjgsIDB4MjVCQSwgMHgyNUJDLCAweDI1QkUsIDB4MjVDMCwgMHgyNUMyLCAweDI1QzQsIDB4MjVDNiwgMHgyNUM4LAorICAgIDB4MjVDQSwgMHgyNUNDLCAweDI1Q0UsIDB4MjVEMCwgMHgyNUQyLCAweDI1RDQsIDB4MjVENiwgMHgyNUQ4LCAweDI1REEsIDB4MjVEQywgMHgyNURFLCAweDI1RTAsIDB4MjVFMiwgMHgyNUU0LCAweDI1RTYsIDB4MjVFOCwKKyAgICAweDI1RUEsIDB4MjVFQywgMHgyNUVFLCAweDI1RjAsIDB4MjVGMiwgMHgyNUY0LCAweDI1RjYsIDB4MjVGOCwgMHgyNUZBLCAweDI1RkMsIDB4MjVGRSwgMHgyNjAwLCAweDI2MDIsIDB4MjYwNCwgMHgyNjA2LCAweDI2MDgsCisgICAgMHgyNjBBLCAweDI2MEMsIDB4MzMxOCwgMHgzMzFCLCAweDMzMUUsIDB4MjYwRSwgMHgyNjEwLCAweDI2MTIsIDB4MjYxNCwgMHgyNjE2LCAweDI2MTgsIDB4MjYxQSwgMHgyNjFDLCAweDI2MUUsIDB4MjYyMCwgMHgyNjIyLAorICAgIDB4MjYyNCwgMHgyNjI2LCAweDI2MjgsIDB4MjYyQSwgMHgyNjJDLCAweDI2MkUsIDB4MjYzMCwgMHgyNjMyLCAweDI2MzQsIDB4MjYzNiwgMHgyNjM4LCAweDI2M0EsIDB4MjYzQywgMHgyNjNFLCAweDI2NDAsIDB4MjY0MiwKKyAgICAweDI2NDQsIDB4MjY0NiwgMHgyNjQ4LCAweDI2NEEsIDB4MjY0QywgMHgyNjRFLCAweDI2NTAsIDB4MjY1MiwgMHgyNjU0LCAweDI2NTYsIDB4MjY1OCwgMHgyNjVBLCAweDI2NUMsIDB4MjY1RSwgMHgyNjYwLCAweDI2NjIsCisgICAgMHgyNjY0LCAweDI2NjYsIDB4MjY2OCwgMHgyNjZBLCAweDI2NkMsIDB4MjY2RSwgMHgyNjcwLCAweDI2NzIsIDB4MjY3NCwgMHgyNjc2LCAweDI2NzgsIDB4MjY3QSwgMHgyNjdDLCAweDI2N0UsIDB4MjY4MCwgMHgyNjgyLAorICAgIDB4MjY4NCwgMHgyNjg2LCAweDI2ODgsIDB4MjY4QSwgMHgyNjhDLCAweDI2OEUsIDB4MjY5MCwgMHgyNjkyLCAweDI2OTQsIDB4MjY5NiwgMHgyNjk4LCAweDI2OUEsIDB4MjY5QywgMHgyNjlFLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgzMzIxLCAweDMzMjQsIDB4MzMyNywgMHgzMzJBLCAweDMzMkQsIDB4MzMzMCwgMHgzMzMzLCAweDMzMzYsIDB4MzMzOSwgMHgzMzNDLCAweDMzM0YsIDB4MzM0MiwgMHgzMzQ1LCAweDMzNDgsIDB4MzM0QiwgMHgzMzRFLAorICAgIDB4MzM1MSwgMHgzMzU0LCAweDMzNTcsIDB4MzM1QSwgMHgzMzVELCAweDMzNjAsIDB4MzM2MywgMHgzMzY2LCAweDMzNjksIDB4MzM2QywgMHgzMzZGLCAweDMzNzIsIDB4MzM3NSwgMHgzMzc4LCAweDMzN0IsIDB4MzM3RSwKKyAgICAweDMzODEsIDB4MzM4NCwgMHgzMzg3LCAweDMzOEEsIDB4MzM4RCwgMHgzMzkwLCAweDMzOTMsIDB4MzM5NiwgMHgzMzk5LCAweDMzOUMsIDB4MzM5RiwgMHgzM0EyLCAweDMzQTUsIDB4MzNBOCwgMHgzM0FCLCAweDMzQUUsCisgICAgMHgzM0IxLCAweDMzQjQsIDB4MzNCNywgMHgzM0JBLCAweDMzQkQsIDB4MzNDMCwgMHgzM0MzLCAweDMzQzYsIDB4MzNDOSwgMHgzM0NDLCAweDMzQ0YsIDB4MzNEMiwgMHgzM0Q1LCAweDMzRDgsIDB4MzNEQiwgMHgzM0RFLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDMzRTEsIDB4MzNFNCwgMHgzM0U3LCAweDMzRUEsIDB4MzNFRCwgMHgzM0YwLCAweDMzRjMsIDB4MzNGNiwgMHgzM0Y5LCAweDMzRkMsIDB4MzNGRiwgMHgzNDAyLCAweDM0MDUsIDB4MzQwOCwKKyAgICAweDM0MEIsIDB4MzQwRSwgMHgzNDExLCAweDM0MTQsIDB4MzQxNywgMHgzNDFBLCAweDM0MUQsIDB4MzQyMCwgMHgzNDIzLCAweDM0MjYsIDB4MzQyOSwgMHgzNDJDLCAweDM0MkYsIDB4MzQzMiwgMHgzNDM1LCAweDM0MzgsCisgICAgMHgzNDNCLCAweDM0M0UsIDB4MzQ0MSwgMHgzNDQ0LCAweDM0NDcsIDB4MzQ0QSwgMHgzNDRELCAweDM0NTAsIDB4MzQ1MywgMHgzNDU2LCAweDM0NTksIDB4MzQ1QywgMHgzNDVGLCAweDM0NjIsIDB4MzQ2NSwgMHgzNDY4LAorICAgIDB4MzQ2QiwgMHgzNDZFLCAweDM0NzEsIDB4MzQ3NCwgMHgzNDc3LCAweDM0N0EsIDB4MzQ3RCwgMHgzNDgwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MzQ4MywgMHgzNDg2LCAweDQxQTQsIDB4NDFBOSwgMHg0MUFFLCAweDQxQjMsIDB4NDFCOCwgMHg0MUJELCAweDQxQzIsIDB4MzQ4OSwgMHg0MUM3LCAweDQxREEsIDB4NDFFMywgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg5MzYwLCAweDkzNjEsIDB4OTM2MiwgMHg5MzYzLCAweDkzNjQsIDB4OTM2NSwgMHg5MzY2LCAweDkzNjcsIDB4OTM2OCwgMHg5MzY5LCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDkzNkEsIDB4OTM2QiwgMHg5MzZDLCAweDkzNkQsIDB4OTM2RSwgMHg5MzZGLCAweDkzNzAsIDB4OTM3MSwgMHg5MzcyLCAweDkzNzMsIDB4OTM3NCwgMHg5Mzc1LCAweDkzNzYsIDB4OTM3NywgMHg5Mzc4LCAweDkzNzksCisgICAgMHg5MzdBLCAweDkzN0IsIDB4OTM3QywgMHg5MzdELCAweDkzN0UsIDB4MDAwMCwgMHgwMDAwLCAweDkzN0YsIDB4OTM4MCwgMHg5MzgxLCAweDkzODIsIDB4OTM4MywgMHg5Mzg0LCAweDkzODUsIDB4OTM4NiwgMHg5Mzg3LAorICAgIDB4OTM4OCwgMHg5Mzg5LCAweDkzOEEsIDB4MDAwMCwgMHg5MzhCLCAweDkzOEMsIDB4OTM4RCwgMHg5MzhFLCAweDkzOEYsIDB4OTM5MCwgMHg5MzkxLCAweDkzOTIsIDB4OTM5MywgMHg5Mzk0LCAweDkzOTUsIDB4OTM5NiwKKyAgICAweDkzOTcsIDB4OTM5OCwgMHg5Mzk5LCAweDkzOUEsIDB4OTM5QiwgMHg5MzlDLCAweDkzOUQsIDB4MDAwMCwgMHg5MzlFLCAweDkzOUYsIDB4OTNBMCwgMHg5M0ExLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHg5M0EyLCAweDI2QTAsIDB4OTNBMywgMHgwMDAwLCAweDkzQTQsIDB4MDAwMCwgMHg5M0E1LCAweDI2QTIsIDB4OTNBNiwgMHgyNkE0LCAweDkzQTcsIDB4MjZBNiwgMHg5M0E4LCAweDI2QTgsIDB4OTNBOSwgMHgyNkFBLAorICAgIDB4OTNBQSwgMHg5M0FCLCAweDkzQUMsIDB4OTNBRCwgMHg5M0FFLCAweDkzQUYsIDB4OTNCMCwgMHg5M0IxLCAweDkzQjIsIDB4OTNCMywgMHg5M0I0LCAweDkzQjUsIDB4OTNCNiwgMHg5M0I3LCAweDkzQjgsIDB4OTNCOSwKKyAgICAweDkzQkEsIDB4OTNCQiwgMHg5M0JDLCAweDkzQkQsIDB4OTNCRSwgMHg5M0JGLCAweDkzQzAsIDB4OTNDMSwgMHg5M0MyLCAweDkzQzMsIDB4OTNDNCwgMHg5M0M1LCAweDkzQzYsIDB4OTNDNywgMHg5M0M4LCAweDkzQzksCisgICAgMHg5M0NBLCAweDkzQ0IsIDB4OTNDQywgMHg5M0NELCAweDkzQ0UsIDB4OTNDRiwgMHg5M0QwLCAweDkzRDEsIDB4OTNEMiwgMHg5M0QzLCAweDkzRDQsIDB4OTNENSwgMHg5M0Q2LCAweDkzRDcsIDB4OTNEOCwgMHg5M0Q5LAorICAgIDB4OTNEQSwgMHg5M0RCLCAweDkzREMsIDB4OTNERCwgMHg5M0RFLCAweDkzREYsIDB4OTNFMCwgMHg5M0UxLCAweDkzRTIsIDB4OTNFMywgMHg5M0U0LCAweDkzRTUsIDB4OTNFNiwgMHg5M0U3LCAweDkzRTgsIDB4OTNFOSwKKyAgICAweDkzRUEsIDB4OTNFQiwgMHg5M0VDLCAweDkzRUQsIDB4OTNFRSwgMHg5M0VGLCAweDkzRjAsIDB4OTNGMSwgMHg5M0YyLCAweDkzRjMsIDB4OTNGNCwgMHg5M0Y1LCAweDkzRjYsIDB4OTNGNywgMHg5M0Y4LCAweDkzRjksCisgICAgMHg5M0ZBLCAweDkzRkIsIDB4OTNGQywgMHg5M0ZELCAweDkzRkUsIDB4OTNGRiwgMHg5NDAwLCAweDk0MDEsIDB4OTQwMiwgMHg5NDAzLCAweDk0MDQsIDB4OTQwNSwgMHg5NDA2LCAweDk0MDcsIDB4OTQwOCwgMHg5NDA5LAorICAgIDB4OTQwQSwgMHg5NDBCLCAweDk0MEMsIDB4OTQwRCwgMHg5NDBFLCAweDk0MEYsIDB4OTQxMCwgMHg5NDExLCAweDk0MTIsIDB4OTQxMywgMHg5NDE0LCAweDk0MTUsIDB4OTQxNiwgMHg5NDE3LCAweDk0MTgsIDB4OTQxOSwKKyAgICAweDk0MUEsIDB4OTQxQiwgMHg5NDFDLCAweDk0MUQsIDB4OTQxRSwgMHgyNkFDLCAweDI2QUUsIDB4MjZCMCwgMHgyNkIyLCAweDI2QjQsIDB4MjZCNiwgMHgyNkI4LCAweDI2QkEsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDk0MUYsIDB4OTQyMCwgMHg5NDIxLCAweDk0MjIsIDB4OTQyMywgMHg5NDI0LCAweDk0MjUsIDB4OTQyNiwgMHg5NDI3LCAweDk0MjgsIDB4OTQyOSwgMHg5NDJBLCAweDk0MkIsIDB4OTQyQywgMHg5NDJELAorICAgIDB4OTQyRSwgMHg5NDJGLCAweDk0MzAsIDB4OTQzMSwgMHg5NDMyLCAweDk0MzMsIDB4OTQzNCwgMHg5NDM1LCAweDk0MzYsIDB4OTQzNywgMHg5NDM4LCAweDk0MzksIDB4OTQzQSwgMHg5NDNCLCAweDk0M0MsIDB4OTQzRCwKKyAgICAweDk0M0UsIDB4OTQzRiwgMHg5NDQwLCAweDk0NDEsIDB4OTQ0MiwgMHg5NDQzLCAweDk0NDQsIDB4OTQ0NSwgMHg5NDQ2LCAweDk0NDcsIDB4OTQ0OCwgMHg5NDQ5LCAweDk0NEEsIDB4OTQ0QiwgMHg5NDRDLCAweDk0NEQsCisgICAgMHg5NDRFLCAweDk0NEYsIDB4OTQ1MCwgMHg5NDUxLCAweDk0NTIsIDB4OTQ1MywgMHg5NDU0LCAweDk0NTUsIDB4OTQ1NiwgMHg5NDU3LCAweDk0NTgsIDB4OTQ1OSwgMHg5NDVBLCAweDk0NUIsIDB4OTQ1QywgMHg5NDVELAorICAgIDB4OTQ1RSwgMHg5NDVGLCAweDk0NjAsIDB4OTQ2MSwgMHg5NDYyLCAweDk0NjMsIDB4OTQ2NCwgMHg5NDY1LCAweDk0NjYsIDB4OTQ2NywgMHg5NDY4LCAweDk0NjksIDB4OTQ2QSwgMHg5NDZCLCAweDk0NkMsIDB4OTQ2RCwKKyAgICAweDk0NkUsIDB4OTQ2RiwgMHg5NDcwLCAweDk0NzEsIDB4OTQ3MiwgMHg5NDczLCAweDk0NzQsIDB4OTQ3NSwgMHg5NDc2LCAweDk0NzcsIDB4OTQ3OCwgMHg5NDc5LCAweDk0N0EsIDB4OTQ3QiwgMHg5NDdDLCAweDk0N0QsCisgICAgMHg5NDdFLCAweDk0N0YsIDB4OTQ4MCwgMHg5NDgxLCAweDk0ODIsIDB4OTQ4MywgMHg5NDg0LCAweDk0ODUsIDB4OTQ4NiwgMHg5NDg3LCAweDk0ODgsIDB4OTQ4OSwgMHg5NDhBLCAweDk0OEIsIDB4OTQ4QywgMHg5NDhELAorICAgIDB4OTQ4RSwgMHg5NDhGLCAweDk0OTAsIDB4OTQ5MSwgMHg5NDkyLCAweDk0OTMsIDB4OTQ5NCwgMHg5NDk1LCAweDk0OTYsIDB4OTQ5NywgMHg5NDk4LCAweDk0OTksIDB4OTQ5QSwgMHg5NDlCLCAweDk0OUMsIDB4OTQ5RCwKKyAgICAweDk0OUUsIDB4OTQ5RiwgMHg5NEEwLCAweDk0QTEsIDB4OTRBMiwgMHg5NEEzLCAweDk0QTQsIDB4OTRBNSwgMHg5NEE2LCAweDk0QTcsIDB4OTRBOCwgMHg5NEE5LCAweDk0QUEsIDB4OTRBQiwgMHg5NEFDLCAweDk0QUQsCisgICAgMHg5NEFFLCAweDk0QUYsIDB4OTRCMCwgMHg5NEIxLCAweDk0QjIsIDB4OTRCMywgMHg5NEI0LCAweDk0QjUsIDB4OTRCNiwgMHg5NEI3LCAweDk0QjgsIDB4OTRCOSwgMHg5NEJBLCAweDk0QkIsIDB4OTRCQywgMHg5NEJELAorICAgIDB4OTRCRSwgMHg5NEJGLCAweDk0QzAsIDB4OTRDMSwgMHg5NEMyLCAweDk0QzMsIDB4OTRDNCwgMHg5NEM1LCAweDk0QzYsIDB4OTRDNywgMHg5NEM4LCAweDk0QzksIDB4OTRDQSwgMHg5NENCLCAweDk0Q0MsIDB4OTRDRCwKKyAgICAweDk0Q0UsIDB4OTRDRiwgMHg5NEQwLCAweDk0RDEsIDB4OTREMiwgMHg5NEQzLCAweDk0RDQsIDB4OTRENSwgMHg5NEQ2LCAweDk0RDcsIDB4OTREOCwgMHg5NEQ5LCAweDk0REEsIDB4OTREQiwgMHg5NERDLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4OTRERCwgMHg5NERFLCAweDk0REYsIDB4OTRFMCwgMHg5NEUxLCAweDk0RTIsIDB4MDAwMCwgMHgwMDAwLCAweDk0RTMsIDB4OTRFNCwgMHg5NEU1LCAweDk0RTYsIDB4OTRFNywgMHg5NEU4LAorICAgIDB4MDAwMCwgMHgwMDAwLCAweDk0RTksIDB4OTRFQSwgMHg5NEVCLCAweDk0RUMsIDB4OTRFRCwgMHg5NEVFLCAweDAwMDAsIDB4MDAwMCwgMHg5NEVGLCAweDk0RjAsIDB4OTRGMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwKKyAgICAweDk0RjIsIDB4OTRGMywgMHg5NEY0LCAweDk0RjUsIDB4OTRGNiwgMHg5NEY3LCAweDk0RjgsIDB4MDAwMCwgMHg5NEY5LCAweDk0RkEsIDB4OTRGQiwgMHg5NEZDLCAweDk0RkQsIDB4OTRGRSwgMHg5NEZGLCAweDAwMDAsCisgICAgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwCit9OworZXh0ZXJuIGNvbnN0IEZYX1dDSEFSIGdfVW5pY29kZURhdGFfTm9ybWFsaXphdGlvbl9NYXAxWzUzNzZdID0geworICAgIDB4MDA2NiwgMHgwMDUzLCAweDAwNTMsIDB4MDA1OSwgMHgwMDIwLCAweDAzMDgsIDB4MDA2MSwgMHgwMDUyLCAweDAzMDQsIDB4MDAzMiwgMHgwMDMzLCAweDAzMDEsIDB4MDNCQywgMHgwMzI3LCAweDAwMzEsIDB4MDA2RiwKKyAgICAweDAwNDEsIDB4MDA0MSwgMHgwMDQxLCAweDAwNDEsIDB4MDA0MSwgMHgwMDQxLCAweDAwNDMsIDB4MDA0NSwgMHgwMDQ1LCAweDAwNDUsIDB4MDA0NSwgMHgwMDQ5LCAweDAwNDksIDB4MDA0OSwgMHgwMDQ5LCAweDAwNDQsCisgICAgMHgwMDRFLCAweDAwNEYsIDB4MDA0RiwgMHgwMDRGLCAweDAwNEYsIDB4MDA0RiwgMHgwMDRGLCAweDAwNTUsIDB4MDA1NSwgMHgwMDU1LCAweDAwNTUsIDB4MDA1OSwgMHgwMDYxLCAweDAwNjEsIDB4MDA2MSwgMHgwMDYxLAorICAgIDB4MDA2MSwgMHgwMDYxLCAweDAwNjMsIDB4MDA2NSwgMHgwMDY1LCAweDAwNjUsIDB4MDA2NSwgMHgwMDY5LCAweDAwNjksIDB4MDA2OSwgMHgwMDY5LCAweDAwNkUsIDB4MDA2RiwgMHgwMDZGLCAweDAwNkYsIDB4MDA2RiwKKyAgICAweDAwNkYsIDB4MDA2RiwgMHgwMDc1LCAweDAwNzUsIDB4MDA3NSwgMHgwMDc1LCAweDAwNzksIDB4MDA3OSwgMHgwMDQxLCAweDAwNjEsIDB4MDA0MSwgMHgwMDYxLCAweDAwNDEsIDB4MDA2MSwgMHgwMDQzLCAweDAwNjMsCisgICAgMHgwMDQzLCAweDAwNjMsIDB4MDA0MywgMHgwMDYzLCAweDAwNDMsIDB4MDA2MywgMHgwMDQ0LCAweDAwNjQsIDB4MDA0NCwgMHgwMDY0LCAweDAwNDUsIDB4MDA2NSwgMHgwMDQ1LCAweDAwNjUsIDB4MDA0NSwgMHgwMDY1LAorICAgIDB4MDA0NSwgMHgwMDY1LCAweDAwNDUsIDB4MDA2NSwgMHgwMDQ3LCAweDAwNjcsIDB4MDA0NywgMHgwMDY3LCAweDAwNDcsIDB4MDA2NywgMHgwMDQ3LCAweDAwNjcsIDB4MDA0OCwgMHgwMDY4LCAweDAwNDgsIDB4MDA2OCwKKyAgICAweDAwNDksIDB4MDA2OSwgMHgwMDQ5LCAweDAwNjksIDB4MDA0OSwgMHgwMDY5LCAweDAwNDksIDB4MDA2OSwgMHgwMDQ5LCAweDAwNEEsIDB4MDA2QSwgMHgwMDRCLCAweDAwNkIsIDB4MDA0QiwgMHgwMDRDLCAweDAwNkMsCisgICAgMHgwMDRDLCAweDAwNkMsIDB4MDA0QywgMHgwMDZDLCAweDAwNEMsIDB4MDA2QywgMHgwMDRDLCAweDAwNkMsIDB4MDA0RSwgMHgwMDZFLCAweDAwNEUsIDB4MDA2RSwgMHgwMDRFLCAweDAwNkUsIDB4MDA2RSwgMHgwMDRGLAorICAgIDB4MDA2RiwgMHgwMDRGLCAweDAwNkYsIDB4MDA0RiwgMHgwMDZGLCAweDAwNTIsIDB4MDA3MiwgMHgwMDUyLCAweDAwNzIsIDB4MDA1MiwgMHgwMDcyLCAweDAwNTMsIDB4MDA3MywgMHgwMDUzLCAweDAwNzMsIDB4MDA1MywKKyAgICAweDAwNzMsIDB4MDA1MywgMHgwMDczLCAweDAwNTQsIDB4MDA3NCwgMHgwMDU0LCAweDAwNzQsIDB4MDA1NCwgMHgwMDc0LCAweDAwNTUsIDB4MDA3NSwgMHgwMDU1LCAweDAwNzUsIDB4MDA1NSwgMHgwMDc1LCAweDAwNTUsCisgICAgMHgwMDc1LCAweDAwNTUsIDB4MDA3NSwgMHgwMDU1LCAweDAwNzUsIDB4MDA1NywgMHgwMDc3LCAweDAwNTksIDB4MDA3OSwgMHgwMDU5LCAweDAwNUEsIDB4MDA3QSwgMHgwMDVBLCAweDAwN0EsIDB4MDA1QSwgMHgwMDdBLAorICAgIDB4MDA3MywgMHgwMDYyLCAweDAwNDIsIDB4MDA0MiwgMHgwMDYyLCAweDAwNDMsIDB4MDA2MywgMHgwMDQ0LCAweDAwNDQsIDB4MDA0NCwgMHgwMDY0LCAweDAwNDUsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNjYsIDB4MDA0NywKKyAgICAweDAwNDksIDB4MDA0QiwgMHgwMDZCLCAweDAwNkMsIDB4MDA0RCwgMHgwMDRFLCAweDAwNkUsIDB4MDA0RiwgMHgwMDRGLCAweDAwNkYsIDB4MDA1MCwgMHgwMDcwLCAweDAyODMsIDB4MDA3NCwgMHgwMDU0LCAweDAwNzQsCisgICAgMHgwMDU0LCAweDAwNTUsIDB4MDA3NSwgMHgwMDU2LCAweDAwNTksIDB4MDA3OSwgMHgwMDVBLCAweDAwN0EsIDB4MDFCNywgMHgwMDQxLCAweDAwNjEsIDB4MDA0OSwgMHgwMDY5LCAweDAwNEYsIDB4MDA2RiwgMHgwMDU1LAorICAgIDB4MDA3NSwgMHgwMERDLCAweDAwRkMsIDB4MDBEQywgMHgwMEZDLCAweDAwREMsIDB4MDBGQywgMHgwMERDLCAweDAwRkMsIDB4MDA2NSwgMHgwMDQxLCAweDAwNjEsIDB4MDA0MSwgMHgwMDYxLCAweDAwQzYsIDB4MDBFNiwKKyAgICAweDAwNDcsIDB4MDA2NywgMHgwMDQ3LCAweDAwNjcsIDB4MDA0QiwgMHgwMDZCLCAweDAwNEYsIDB4MDA2RiwgMHgwMUVBLCAweDAxRUIsIDB4MDFCNywgMHgwMjkyLCAweDAwNkEsIDB4MDA0NywgMHgwMDY3LCAweDAwNEUsCisgICAgMHgwMDZFLCAweDAwNDEsIDB4MDA2MSwgMHgwMEM2LCAweDAwRTYsIDB4MDBEOCwgMHgwMEY4LCAweDAwNDEsIDB4MDA2MSwgMHgwMDQxLCAweDAwNjEsIDB4MDA0NSwgMHgwMDY1LCAweDAwNDUsIDB4MDA2NSwgMHgwMDQ5LAorICAgIDB4MDA2OSwgMHgwMDQ5LCAweDAwNjksIDB4MDA0RiwgMHgwMDZGLCAweDAwNEYsIDB4MDA2RiwgMHgwMDUyLCAweDAwNzIsIDB4MDA1MiwgMHgwMDcyLCAweDAwNTUsIDB4MDA3NSwgMHgwMDU1LCAweDAwNzUsIDB4MDA1MywKKyAgICAweDAwNzMsIDB4MDA1NCwgMHgwMDc0LCAweDAwNDgsIDB4MDA2OCwgMHgwMDRFLCAweDAwNjQsIDB4MDA1QSwgMHgwMDdBLCAweDAwNDEsIDB4MDA2MSwgMHgwMDQ1LCAweDAwNjUsIDB4MDBENiwgMHgwMEY2LCAweDAwRDUsCisgICAgMHgwMEY1LCAweDAwNEYsIDB4MDA2RiwgMHgwMjJFLCAweDAyMkYsIDB4MDA1OSwgMHgwMDc5LCAweDAwNkMsIDB4MDA2RSwgMHgwMDc0LCAweDAwNkEsIDB4MDA0MSwgMHgwMDQzLCAweDAwNjMsIDB4MDA0QywgMHgwMDU0LAorICAgIDB4MDA1MywgMHgwMDVBLCAweDAwNDIsIDB4MDA1NSwgMHgwMDU2LCAweDAwNDUsIDB4MDA2NSwgMHgwMDRBLCAweDAwNkEsIDB4MDA1MSwgMHgwMDcxLCAweDAwNTIsIDB4MDA3MiwgMHgwMDU5LCAweDAwNzksIDB4MDA2MSwKKyAgICAweDAyNTEsIDB4MDA2MiwgMHgwMDZGLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY0LCAweDAwNjUsIDB4MDI1OSwgMHgwMDY1LCAweDAwNjUsIDB4MDA2NSwgMHgwMDY1LCAweDAwNkEsIDB4MDA2NywgMHgwMDY3LCAweDAwNDcsCisgICAgMHgwMDY4LCAweDAwNjgsIDB4MDA2OSwgMHgwMDQ5LCAweDAwNkMsIDB4MDA2QywgMHgwMDZDLCAweDAwNkQsIDB4MDA2RCwgMHgwMDZELCAweDAwNkUsIDB4MDA2RSwgMHgwMDZFLCAweDAwNkYsIDB4MDA3MiwgMHgwMDcyLAorICAgIDB4MDA3MiwgMHgwMDcyLCAweDAwNzIsIDB4MDA3MiwgMHgwMDcyLCAweDAwNTIsIDB4MDA1MiwgMHgwMDczLCAweDAwNkEsIDB4MDI4MywgMHgwMjgzLCAweDAwNzQsIDB4MDA3NCwgMHgwMDU1LCAweDAwNzYsIDB4MDA3NiwKKyAgICAweDAwNzcsIDB4MDA3OSwgMHgwMDU5LCAweDAwN0EsIDB4MDA3QSwgMHgwMjkyLCAweDAwNDMsIDB4MDA0MiwgMHgwMDY1LCAweDAwNDcsIDB4MDA0OCwgMHgwMDZBLCAweDAwNkIsIDB4MDA0QywgMHgwMDcxLCAweDAwNjgsCisgICAgMHgwMDY4LCAweDAwNjgsIDB4MDA2OCwgMHgwMDZBLCAweDAwNzIsIDB4MDI3OSwgMHgwMjdCLCAweDAyODEsIDB4MDA3NywgMHgwMDc5LCAweDAyNjMsIDB4MDA2QywgMHgwMDczLCAweDAwNzgsIDB4MDI5NSwgMHgwMzAwLAorICAgIDB4MDMwMSwgMHgwMzEzLCAweDAzMDgsIDB4MDA2MSwgMHgwMDY1LCAweDAwNjksIDB4MDA2RiwgMHgwMDc1LCAweDAwNjMsIDB4MDA2NCwgMHgwMDY4LCAweDAwNkQsIDB4MDA3MiwgMHgwMDc0LCAweDAwNzYsIDB4MDA3OCwKKyAgICAweDAyQjksIDB4MDAzQiwgMHgwMDIwLCAweDAwQTgsIDB4MDM5MSwgMHgwMEI3LCAweDAzOTUsIDB4MDM5NywgMHgwMzk5LCAweDAzOUYsIDB4MDNBNSwgMHgwM0E5LCAweDAzQ0EsIDB4MDM5OSwgMHgwM0E1LCAweDAzQjEsCisgICAgMHgwM0I1LCAweDAzQjcsIDB4MDNCOSwgMHgwM0NCLCAweDAzQjksIDB4MDNDNSwgMHgwM0JGLCAweDAzQzUsIDB4MDNDOSwgMHgwM0IyLCAweDAzQjgsIDB4MDNBNSwgMHgwM0QyLCAweDAzRDIsIDB4MDNDNiwgMHgwM0MwLAorICAgIDB4MDNCQSwgMHgwM0MxLCAweDAzQzIsIDB4MDM5OCwgMHgwM0I1LCAweDAzQTMsIDB4MDQxNSwgMHgwNDE1LCAweDA0MTMsIDB4MDQwNiwgMHgwNDFBLCAweDA0MTgsIDB4MDQyMywgMHgwNDE4LCAweDA0MzgsIDB4MDQzNSwKKyAgICAweDA0MzUsIDB4MDQzMywgMHgwNDU2LCAweDA0M0EsIDB4MDQzOCwgMHgwNDQzLCAweDA0NjYsIDB4MDQ2NywgMHgwNDZBLCAweDA0NkIsIDB4MDQ3NCwgMHgwNDc1LCAweDA0NjAsIDB4MDQ2MSwgMHgwNDE5LCAweDA0MzksCisgICAgMHgwNDIwLCAweDA0NDAsIDB4MDQxMywgMHgwNDMzLCAweDA0MTMsIDB4MDQzMywgMHgwNDEzLCAweDA0MzMsIDB4MDQxNiwgMHgwNDM2LCAweDA0MTcsIDB4MDQzNywgMHgwNDFBLCAweDA0M0EsIDB4MDQxQSwgMHgwNDNBLAorICAgIDB4MDQxQSwgMHgwNDNBLCAweDA0MUEsIDB4MDQzQSwgMHgwNDFELCAweDA0M0QsIDB4MDQxRiwgMHgwNDNGLCAweDA0MjEsIDB4MDQ0MSwgMHgwNDIyLCAweDA0NDIsIDB4MDRBRSwgMHgwNEFGLCAweDA0MjUsIDB4MDQ0NSwKKyAgICAweDA0MjcsIDB4MDQ0NywgMHgwNDI3LCAweDA0NDcsIDB4MDQxNiwgMHgwNDM2LCAweDA0QkMsIDB4MDRCRCwgMHgwNDE2LCAweDA0MzYsIDB4MDQxQSwgMHgwNDNBLCAweDA0MUIsIDB4MDQzQiwgMHgwNDFELCAweDA0M0QsCisgICAgMHgwNDFELCAweDA0M0QsIDB4MDQxQywgMHgwNDNDLCAweDA0MTAsIDB4MDQzMCwgMHgwNDEwLCAweDA0MzAsIDB4MDQxNSwgMHgwNDM1LCAweDA0RDgsIDB4MDREOSwgMHgwNDE2LCAweDA0MzYsIDB4MDQxNywgMHgwNDM3LAorICAgIDB4MDQxOCwgMHgwNDM4LCAweDA0MTgsIDB4MDQzOCwgMHgwNDFFLCAweDA0M0UsIDB4MDRFOCwgMHgwNEU5LCAweDA0MkQsIDB4MDQ0RCwgMHgwNDIzLCAweDA0NDMsIDB4MDQyMywgMHgwNDQzLCAweDA0MjMsIDB4MDQ0MywKKyAgICAweDA0MjcsIDB4MDQ0NywgMHgwNDEzLCAweDA0MzMsIDB4MDQyQiwgMHgwNDRCLCAweDA0MTMsIDB4MDQzMywgMHgwNDI1LCAweDA0NDUsIDB4MDQyNSwgMHgwNDQ1LCAweDA0MTcsIDB4MDQzNywgMHgwNDFCLCAweDA0M0IsCisgICAgMHgwRjBCLCAweDEwREMsIDB4MDA0MSwgMHgwMEM2LCAweDAwNDIsIDB4MDA0MiwgMHgwMDQ0LCAweDAwNDUsIDB4MDE4RSwgMHgwMDQ3LCAweDAwNDgsIDB4MDA0OSwgMHgwMDRBLCAweDAwNEIsIDB4MDA0QywgMHgwMDRELAorICAgIDB4MDA0RSwgMHgwMDRGLCAweDAyMjIsIDB4MDA1MCwgMHgwMDUyLCAweDAwNTQsIDB4MDA1NSwgMHgwMDU3LCAweDAwNjEsIDB4MDI1MCwgMHgwMjUxLCAweDFEMDIsIDB4MDA2MiwgMHgwMDY0LCAweDAwNjUsIDB4MDI1OSwKKyAgICAweDAyNUIsIDB4MDI1QywgMHgwMDY3LCAweDAwNkIsIDB4MDA2RCwgMHgwMTRCLCAweDAwNkYsIDB4MDI1NCwgMHgxRDE2LCAweDFEMTcsIDB4MDA3MCwgMHgwMDc0LCAweDAwNzUsIDB4MUQxRCwgMHgwMjZGLCAweDAwNzYsCisgICAgMHgxRDI1LCAweDAzQjIsIDB4MDNCMywgMHgwM0I0LCAweDAzQzYsIDB4MDNDNywgMHgwMDY5LCAweDAwNzIsIDB4MDA3NSwgMHgwMDc2LCAweDAzQjIsIDB4MDNCMywgMHgwM0MxLCAweDAzQzYsIDB4MDNDNywgMHgwMDYyLAorICAgIDB4MDA2NCwgMHgwMDY2LCAweDAwNkQsIDB4MDA2RSwgMHgwMDcwLCAweDAwNzIsIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3QSwgMHgwMDY3LCAweDA0M0QsIDB4MDA0QywgMHgwMDcwLCAweDAwNTUsIDB4MDI4QSwKKyAgICAweDAwNjIsIDB4MDA2NCwgMHgwMDY2LCAweDAwNjcsIDB4MDA2QiwgMHgwMDZDLCAweDAwNkQsIDB4MDA2RSwgMHgwMDcwLCAweDAwNzIsIDB4MDA3MywgMHgwMjgzLCAweDAwNzYsIDB4MDA3OCwgMHgwMDdBLCAweDAwNjEsCisgICAgMHgwMjUxLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY1LCAweDAwNjUsIDB4MDA2NSwgMHgwMDY5LCAweDAyODMsIDB4MDI1MiwgMHgwMDYzLCAweDAyNTUsIDB4MDBGMCwgMHgwMjVDLCAweDAwNjYsIDB4MDI1RiwgMHgwMjYxLAorICAgIDB4MDI2NSwgMHgwMjY4LCAweDAyNjksIDB4MDI2QSwgMHgxRDdCLCAweDAyOUQsIDB4MDI2RCwgMHgxRDg1LCAweDAyOUYsIDB4MDI3MSwgMHgwMjcwLCAweDAyNzIsIDB4MDI3MywgMHgwMjc0LCAweDAyNzUsIDB4MDI3OCwKKyAgICAweDAyODIsIDB4MDI4MywgMHgwMUFCLCAweDAyODksIDB4MDI4QSwgMHgxRDFDLCAweDAyOEIsIDB4MDI4QywgMHgwMDdBLCAweDAyOTAsIDB4MDI5MSwgMHgwMjkyLCAweDAzQjgsIDB4MDA0MSwgMHgwMDYxLCAweDAwNDIsCisgICAgMHgwMDYyLCAweDAwNDIsIDB4MDA2MiwgMHgwMDQyLCAweDAwNjIsIDB4MDA0MywgMHgwMDYzLCAweDAwNDQsIDB4MDA2NCwgMHgwMDQ0LCAweDAwNjQsIDB4MDA0NCwgMHgwMDY0LCAweDAwNDQsIDB4MDA2NCwgMHgwMDQ0LAorICAgIDB4MDA2NCwgMHgwMDQ1LCAweDAwNjUsIDB4MDA0NSwgMHgwMDY1LCAweDAwNDUsIDB4MDA2NSwgMHgwMDQ1LCAweDAwNjUsIDB4MDIyOCwgMHgwMjI5LCAweDAwNDYsIDB4MDA2NiwgMHgwMDQ3LCAweDAwNjcsIDB4MDA0OCwKKyAgICAweDAwNjgsIDB4MDA0OCwgMHgwMDY4LCAweDAwNDgsIDB4MDA2OCwgMHgwMDQ4LCAweDAwNjgsIDB4MDA0OCwgMHgwMDY4LCAweDAwNDksIDB4MDA2OSwgMHgwMENGLCAweDAwRUYsIDB4MDA0QiwgMHgwMDZCLCAweDAwNEIsCisgICAgMHgwMDZCLCAweDAwNEIsIDB4MDA2QiwgMHgwMDRDLCAweDAwNkMsIDB4MDA0QywgMHgwMDZDLCAweDAwNEMsIDB4MDA2QywgMHgwMDRDLCAweDAwNkMsIDB4MDA0RCwgMHgwMDZELCAweDAwNEQsIDB4MDA2RCwgMHgwMDRELAorICAgIDB4MDA2RCwgMHgwMDRFLCAweDAwNkUsIDB4MDA0RSwgMHgwMDZFLCAweDAwNEUsIDB4MDA2RSwgMHgwMDRFLCAweDAwNkUsIDB4MDBENSwgMHgwMEY1LCAweDAwRDUsIDB4MDBGNSwgMHgwMTRDLCAweDAxNEQsIDB4MDE0QywKKyAgICAweDAxNEQsIDB4MDA1MCwgMHgwMDcwLCAweDAwNTAsIDB4MDA3MCwgMHgwMDUyLCAweDAwNzIsIDB4MDA1MiwgMHgwMDcyLCAweDAwNTIsIDB4MDA3MiwgMHgwMDUyLCAweDAwNzIsIDB4MDA1MywgMHgwMDczLCAweDAwNTMsCisgICAgMHgwMDczLCAweDAwNTMsIDB4MDA3MywgMHgwMDUzLCAweDAwNzMsIDB4MDA1MywgMHgwMDczLCAweDAwNTQsIDB4MDA3NCwgMHgwMDU0LCAweDAwNzQsIDB4MDA1NCwgMHgwMDc0LCAweDAwNTQsIDB4MDA3NCwgMHgwMDU1LAorICAgIDB4MDA3NSwgMHgwMDU1LCAweDAwNzUsIDB4MDA1NSwgMHgwMDc1LCAweDAxNjgsIDB4MDE2OSwgMHgwMTZBLCAweDAxNkIsIDB4MDA1NiwgMHgwMDc2LCAweDAwNTYsIDB4MDA3NiwgMHgwMDU3LCAweDAwNzcsIDB4MDA1NywKKyAgICAweDAwNzcsIDB4MDA1NywgMHgwMDc3LCAweDAwNTcsIDB4MDA3NywgMHgwMDU3LCAweDAwNzcsIDB4MDA1OCwgMHgwMDc4LCAweDAwNTgsIDB4MDA3OCwgMHgwMDU5LCAweDAwNzksIDB4MDA1QSwgMHgwMDdBLCAweDAwNUEsCisgICAgMHgwMDdBLCAweDAwNUEsIDB4MDA3QSwgMHgwMDY4LCAweDAwNzQsIDB4MDA3NywgMHgwMDc5LCAweDAwNjEsIDB4MDE3RiwgMHgwMDQxLCAweDAwNjEsIDB4MDA0MSwgMHgwMDYxLCAweDAwNDEsIDB4MDA2MSwgMHgwMDQxLAorICAgIDB4MDA2MSwgMHgwMDQxLCAweDAwNjEsIDB4MDA0MSwgMHgwMDYxLCAweDAwNDEsIDB4MDA2MSwgMHgwMDQxLCAweDAwNjEsIDB4MDA0MSwgMHgwMDYxLCAweDAwNDEsIDB4MDA2MSwgMHgwMDQxLCAweDAwNjEsIDB4MDA0MSwKKyAgICAweDAwNjEsIDB4MDA0NSwgMHgwMDY1LCAweDAwNDUsIDB4MDA2NSwgMHgwMDQ1LCAweDAwNjUsIDB4MDA0NSwgMHgwMDY1LCAweDAwNDUsIDB4MDA2NSwgMHgwMDQ1LCAweDAwNjUsIDB4MDA0NSwgMHgwMDY1LCAweDAwNDUsCisgICAgMHgwMDY1LCAweDAwNDksIDB4MDA2OSwgMHgwMDQ5LCAweDAwNjksIDB4MDA0RiwgMHgwMDZGLCAweDAwNEYsIDB4MDA2RiwgMHgwMDRGLCAweDAwNkYsIDB4MDA0RiwgMHgwMDZGLCAweDAwNEYsIDB4MDA2RiwgMHgwMDRGLAorICAgIDB4MDA2RiwgMHgwMDRGLCAweDAwNkYsIDB4MDA0RiwgMHgwMDZGLCAweDAwNEYsIDB4MDA2RiwgMHgwMDRGLCAweDAwNkYsIDB4MDA0RiwgMHgwMDZGLCAweDAwNEYsIDB4MDA2RiwgMHgwMDU1LCAweDAwNzUsIDB4MDA1NSwKKyAgICAweDAwNzUsIDB4MDA1NSwgMHgwMDc1LCAweDAwNTUsIDB4MDA3NSwgMHgwMDU1LCAweDAwNzUsIDB4MDA1NSwgMHgwMDc1LCAweDAwNTUsIDB4MDA3NSwgMHgwMDU5LCAweDAwNzksIDB4MDA1OSwgMHgwMDc5LCAweDAwNTksCisgICAgMHgwMDc5LCAweDAwNTksIDB4MDA3OSwgMHgwM0IxLCAweDAzQjEsIDB4MDNCMSwgMHgwM0IxLCAweDAzQjEsIDB4MDNCMSwgMHgwM0IxLCAweDAzQjEsIDB4MDM5MSwgMHgwMzkxLCAweDAzOTEsIDB4MDM5MSwgMHgwMzkxLAorICAgIDB4MDM5MSwgMHgwMzkxLCAweDAzOTEsIDB4MDNCNSwgMHgwM0I1LCAweDAzQjUsIDB4MDNCNSwgMHgwM0I1LCAweDAzQjUsIDB4MDM5NSwgMHgwMzk1LCAweDAzOTUsIDB4MDM5NSwgMHgwMzk1LCAweDAzOTUsIDB4MDNCNywKKyAgICAweDAzQjcsIDB4MDNCNywgMHgwM0I3LCAweDAzQjcsIDB4MDNCNywgMHgwM0I3LCAweDAzQjcsIDB4MDM5NywgMHgwMzk3LCAweDAzOTcsIDB4MDM5NywgMHgwMzk3LCAweDAzOTcsIDB4MDM5NywgMHgwMzk3LCAweDAzQjksCisgICAgMHgwM0I5LCAweDAzQjksIDB4MDNCOSwgMHgwM0I5LCAweDAzQjksIDB4MDNCOSwgMHgwM0I5LCAweDAzOTksIDB4MDM5OSwgMHgwMzk5LCAweDAzOTksIDB4MDM5OSwgMHgwMzk5LCAweDAzOTksIDB4MDM5OSwgMHgwM0JGLAorICAgIDB4MDNCRiwgMHgwM0JGLCAweDAzQkYsIDB4MDNCRiwgMHgwM0JGLCAweDAzOUYsIDB4MDM5RiwgMHgwMzlGLCAweDAzOUYsIDB4MDM5RiwgMHgwMzlGLCAweDAzQzUsIDB4MDNDNSwgMHgwM0M1LCAweDAzQzUsIDB4MDNDNSwKKyAgICAweDAzQzUsIDB4MDNDNSwgMHgwM0M1LCAweDAzQTUsIDB4MDNBNSwgMHgwM0E1LCAweDAzQTUsIDB4MDNDOSwgMHgwM0M5LCAweDAzQzksIDB4MDNDOSwgMHgwM0M5LCAweDAzQzksIDB4MDNDOSwgMHgwM0M5LCAweDAzQTksCisgICAgMHgwM0E5LCAweDAzQTksIDB4MDNBOSwgMHgwM0E5LCAweDAzQTksIDB4MDNBOSwgMHgwM0E5LCAweDAzQjEsIDB4MDNCMSwgMHgwM0I1LCAweDAzQjUsIDB4MDNCNywgMHgwM0I3LCAweDAzQjksIDB4MDNCOSwgMHgwM0JGLAorICAgIDB4MDNCRiwgMHgwM0M1LCAweDAzQzUsIDB4MDNDOSwgMHgwM0M5LCAweDAzQjEsIDB4MDNCMSwgMHgwM0IxLCAweDAzQjEsIDB4MDNCMSwgMHgwM0IxLCAweDAzQjEsIDB4MDNCMSwgMHgwMzkxLCAweDAzOTEsIDB4MDM5MSwKKyAgICAweDAzOTEsIDB4MDM5MSwgMHgwMzkxLCAweDAzOTEsIDB4MDM5MSwgMHgwM0I3LCAweDAzQjcsIDB4MDNCNywgMHgwM0I3LCAweDAzQjcsIDB4MDNCNywgMHgwM0I3LCAweDAzQjcsIDB4MDM5NywgMHgwMzk3LCAweDAzOTcsCisgICAgMHgwMzk3LCAweDAzOTcsIDB4MDM5NywgMHgwMzk3LCAweDAzOTcsIDB4MDNDOSwgMHgwM0M5LCAweDAzQzksIDB4MDNDOSwgMHgwM0M5LCAweDAzQzksIDB4MDNDOSwgMHgwM0M5LCAweDAzQTksIDB4MDNBOSwgMHgwM0E5LAorICAgIDB4MDNBOSwgMHgwM0E5LCAweDAzQTksIDB4MDNBOSwgMHgwM0E5LCAweDAzQjEsIDB4MDNCMSwgMHgwM0IxLCAweDAzQjEsIDB4MDNCMSwgMHgwM0IxLCAweDAzQjEsIDB4MDM5MSwgMHgwMzkxLCAweDAzOTEsIDB4MDM5MSwKKyAgICAweDAzOTEsIDB4MDNCNywgMHgwM0I3LCAweDAzQjcsIDB4MDNCNywgMHgwM0I3LCAweDAzOTUsIDB4MDM5NSwgMHgwMzk3LCAweDAzOTcsIDB4MDM5NywgMHgwM0I5LCAweDAzQjksIDB4MDNCOSwgMHgwM0I5LCAweDAzQjksCisgICAgMHgwM0I5LCAweDAzOTksIDB4MDM5OSwgMHgwMzk5LCAweDAzOTksIDB4MDNDNSwgMHgwM0M1LCAweDAzQzUsIDB4MDNDNSwgMHgwM0MxLCAweDAzQzEsIDB4MDNDNSwgMHgwM0M1LCAweDAzQTUsIDB4MDNBNSwgMHgwM0E1LAorICAgIDB4MDNBNSwgMHgwM0ExLCAweDAzQzksIDB4MDNDOSwgMHgwM0M5LCAweDAzQzksIDB4MDNDOSwgMHgwMzlGLCAweDAzOUYsIDB4MDNBOSwgMHgwM0E5LCAweDAzQTksIDB4MDBCNCwgMHgwMzE0LCAweDAwMjAsIDB4MDAyMCwKKyAgICAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDAwMjAsIDB4MDAyMCwgMHgwMDIwLCAweDIwMTAsIDB4MDMzMywgMHgwMDJFLCAweDAwMjAsIDB4MDAyMCwgMHgwMDMwLCAweDAwNjksCisgICAgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LCAweDAwMzgsIDB4MDAzOSwgMHgwMDJCLCAweDIyMTIsIDB4MDAzRCwgMHgwMDI4LCAweDAwMjksIDB4MDA2RSwgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwgMHgwMDMzLAorICAgIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgMHgwMDM4LCAweDAwMzksIDB4MDAyQiwgMHgyMjEyLCAweDAwM0QsIDB4MDAyOCwgMHgwMDI5LCAweDAwNjEsIDB4MDA2NSwgMHgwMDZGLCAweDAwNzgsIDB4MDI1OSwKKyAgICAweDAwNDMsIDB4MDE5MCwgMHgwMDY3LCAweDAwNDgsIDB4MDA0OCwgMHgwMDQ4LCAweDAwNjgsIDB4MDA2OCwgMHgwMDQ5LCAweDAwNDksIDB4MDA0QywgMHgwMDZDLCAweDAwNEUsIDB4MDA1MCwgMHgwMDUxLCAweDAwNTIsCisgICAgMHgwMDUyLCAweDAwNTIsIDB4MDA1MiwgMHgwMDUyLCAweDAwNTYsIDB4MDA1QSwgMHgwM0E5LCAweDAxQjEsIDB4MDA1QSwgMHgwMDRCLCAweDAwQzUsIDB4MDA0MiwgMHgwMDQzLCAweDAwNjUsIDB4MDA2NSwgMHgwMDQ1LAorICAgIDB4MDA0NiwgMHgwMDRELCAweDAwNkYsIDB4MDVEMCwgMHgwNUQxLCAweDA1RDIsIDB4MDVEMywgMHgwMDY5LCAweDAzQzAsIDB4MDNCMywgMHgwMzkzLCAweDAzQTAsIDB4MjIxMSwgMHgwMDQ0LCAweDAwNjQsIDB4MDA2NSwKKyAgICAweDAwNjksIDB4MDA2QSwgMHgwMDQ5LCAweDAwNTYsIDB4MDA1OCwgMHgwMDRDLCAweDAwNDMsIDB4MDA0NCwgMHgwMDRELCAweDAwNjksIDB4MDA3NiwgMHgwMDc4LCAweDAwNkMsIDB4MDA2MywgMHgwMDY0LCAweDAwNkQsCisgICAgMHgyMjAzLCAweDIyMDgsIDB4MjIwQiwgMHgzMDA4LCAweDMwMDksIDB4MDA2MiwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LCAweDAwMzgsIDB4MDAzOSwgMHgwMDQxLAorICAgIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsIDB4MDA0OCwgMHgwMDQ5LCAweDAwNEEsIDB4MDA0QiwgMHgwMDRDLCAweDAwNEQsIDB4MDA0RSwgMHgwMDRGLCAweDAwNTAsIDB4MDA1MSwKKyAgICAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LCAweDAwNTgsIDB4MDA1OSwgMHgwMDVBLCAweDAwNjEsIDB4MDA2MiwgMHgwMDYzLCAweDAwNjQsIDB4MDA2NSwgMHgwMDY2LCAweDAwNjcsCisgICAgMHgwMDY4LCAweDAwNjksIDB4MDA2QSwgMHgwMDZCLCAweDAwNkMsIDB4MDA2RCwgMHgwMDZFLCAweDAwNkYsIDB4MDA3MCwgMHgwMDcxLCAweDAwNzIsIDB4MDA3MywgMHgwMDc0LCAweDAwNzUsIDB4MDA3NiwgMHgwMDc3LAorICAgIDB4MDA3OCwgMHgwMDc5LCAweDAwN0EsIDB4MDAzMCwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LCAweDAwMzgsIDB4MDAzOSwgMHgwMDMwLCAweDAwMzEsIDB4MDAzMiwKKyAgICAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgMHgwMDM4LCAweDAwMzksIDB4MDAzMSwgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgMHgwMDM4LCAweDAwMzksCisgICAgMHgwMDMxLCAweDAwMzIsIDB4MDAzMywgMHgwMDM0LCAweDAwMzUsIDB4MDAzNiwgMHgwMDM3LCAweDAwMzgsIDB4MDAzOSwgMHgwMDRDLCAweDAwNkMsIDB4MDA0QywgMHgwMDUwLCAweDAwNTIsIDB4MDA2MSwgMHgwMDc0LAorICAgIDB4MDA0OCwgMHgwMDY4LCAweDAwNEIsIDB4MDA2QiwgMHgwMDVBLCAweDAwN0EsIDB4MDA3NiwgMHgwMDU3LCAweDAwNTgsIDB4MDA3NiwgMHgwMDZBLCAweDAwNTYsIDB4MkQ2MSwgMHg2QkNELCAweDZDMTEsIDB4ODY0RSwKKyAgICAweDg5N0YsIDB4ODlEMiwgMHg5NTdGLCAweDk3NTIsIDB4OThERiwgMHg5QUE4LCAweDlCM0MsIDB4OUVBNiwgMHg5RUM0LCAweDlGOUYsIDB4NEUwMCwgMHg0RTI4LCAweDRFMzYsIDB4NEUzRiwgMHg0RTU5LCAweDRFODUsCisgICAgMHg0RThDLCAweDRFQTAsIDB4NEVCQSwgMHg1MTNGLCAweDUxNjUsIDB4NTE2QiwgMHg1MTgyLCAweDUxOTYsIDB4NTFBQiwgMHg1MUUwLCAweDUxRjUsIDB4NTIwMCwgMHg1MjlCLCAweDUyRjksIDB4NTMxNSwgMHg1MzFBLAorICAgIDB4NTMzOCwgMHg1MzQxLCAweDUzNUMsIDB4NTM2OSwgMHg1MzgyLCAweDUzQjYsIDB4NTNDOCwgMHg1M0UzLCAweDU2RDcsIDB4NTcxRiwgMHg1OEVCLCAweDU5MDIsIDB4NTkwQSwgMHg1OTE1LCAweDU5MjcsIDB4NTk3MywKKyAgICAweDVCNTAsIDB4NUI4MCwgMHg1QkY4LCAweDVDMEYsIDB4NUMyMiwgMHg1QzM4LCAweDVDNkUsIDB4NUM3MSwgMHg1RERCLCAweDVERTUsIDB4NURGMSwgMHg1REZFLCAweDVFNzIsIDB4NUU3QSwgMHg1RTdGLCAweDVFRjQsCisgICAgMHg1RUZFLCAweDVGMEIsIDB4NUYxMywgMHg1RjUwLCAweDVGNjEsIDB4NUY3MywgMHg1RkMzLCAweDYyMDgsIDB4NjIzNiwgMHg2MjRCLCAweDY1MkYsIDB4NjUzNCwgMHg2NTg3LCAweDY1OTcsIDB4NjVBNCwgMHg2NUI5LAorICAgIDB4NjVFMCwgMHg2NUU1LCAweDY2RjAsIDB4NjcwOCwgMHg2NzI4LCAweDZCMjAsIDB4NkI2MiwgMHg2Qjc5LCAweDZCQjMsIDB4NkJDQiwgMHg2QkQ0LCAweDZCREIsIDB4NkMwRiwgMHg2QzE0LCAweDZDMzQsIDB4NzA2QiwKKyAgICAweDcyMkEsIDB4NzIzNiwgMHg3MjNCLCAweDcyM0YsIDB4NzI0NywgMHg3MjU5LCAweDcyNUIsIDB4NzJBQywgMHg3Mzg0LCAweDczODksIDB4NzREQywgMHg3NEU2LCAweDc1MTgsIDB4NzUxRiwgMHg3NTI4LCAweDc1MzAsCisgICAgMHg3NThCLCAweDc1OTIsIDB4NzY3NiwgMHg3NjdELCAweDc2QUUsIDB4NzZCRiwgMHg3NkVFLCAweDc3REIsIDB4NzdFMiwgMHg3N0YzLCAweDc5M0EsIDB4NzlCOCwgMHg3OUJFLCAweDdBNzQsIDB4N0FDQiwgMHg3QUY5LAorICAgIDB4N0M3MywgMHg3Q0Y4LCAweDdGMzYsIDB4N0Y1MSwgMHg3RjhBLCAweDdGQkQsIDB4ODAwMSwgMHg4MDBDLCAweDgwMTIsIDB4ODAzMywgMHg4MDdGLCAweDgwODksIDB4ODFFMywgMHg4MUVBLCAweDgxRjMsIDB4ODFGQywKKyAgICAweDgyMEMsIDB4ODIxQiwgMHg4MjFGLCAweDgyNkUsIDB4ODI3MiwgMHg4Mjc4LCAweDg2NEQsIDB4ODY2QiwgMHg4ODQwLCAweDg4NEMsIDB4ODg2MywgMHg4OTdFLCAweDg5OEIsIDB4ODlEMiwgMHg4QTAwLCAweDhDMzcsCisgICAgMHg4QzQ2LCAweDhDNTUsIDB4OEM3OCwgMHg4QzlELCAweDhENjQsIDB4OEQ3MCwgMHg4REIzLCAweDhFQUIsIDB4OEVDQSwgMHg4RjlCLCAweDhGQjAsIDB4OEZCNSwgMHg5MDkxLCAweDkxNDksIDB4OTFDNiwgMHg5MUNDLAorICAgIDB4OTFEMSwgMHg5NTc3LCAweDk1ODAsIDB4OTYxQywgMHg5NkI2LCAweDk2QjksIDB4OTZFOCwgMHg5NzUxLCAweDk3NUUsIDB4OTc2MiwgMHg5NzY5LCAweDk3Q0IsIDB4OTdFRCwgMHg5N0YzLCAweDk4MDEsIDB4OThBOCwKKyAgICAweDk4REIsIDB4OThERiwgMHg5OTk2LCAweDk5OTksIDB4OTlBQywgMHg5QUE4LCAweDlBRDgsIDB4OUFERiwgMHg5QjI1LCAweDlCMkYsIDB4OUIzMiwgMHg5QjNDLCAweDlCNUEsIDB4OUNFNSwgMHg5RTc1LCAweDlFN0YsCisgICAgMHg5RUE1LCAweDlFQkIsIDB4OUVDMywgMHg5RUNELCAweDlFRDEsIDB4OUVGOSwgMHg5RUZELCAweDlGMEUsIDB4OUYxMywgMHg5RjIwLCAweDlGM0IsIDB4OUY0QSwgMHg5RjUyLCAweDlGOEQsIDB4OUY5QywgMHg5RkEwLAorICAgIDB4MDAyMCwgMHgzMDEyLCAweDUzNDEsIDB4NTM0NCwgMHg1MzQ1LCAweDExMDAsIDB4MTEwMSwgMHgxMUFBLCAweDExMDIsIDB4MTFBQywgMHgxMUFELCAweDExMDMsIDB4MTEwNCwgMHgxMTA1LCAweDExQjAsIDB4MTFCMSwKKyAgICAweDExQjIsIDB4MTFCMywgMHgxMUI0LCAweDExQjUsIDB4MTExQSwgMHgxMTA2LCAweDExMDcsIDB4MTEwOCwgMHgxMTIxLCAweDExMDksIDB4MTEwQSwgMHgxMTBCLCAweDExMEMsIDB4MTEwRCwgMHgxMTBFLCAweDExMEYsCisgICAgMHgxMTEwLCAweDExMTEsIDB4MTExMiwgMHgxMTYxLCAweDExNjIsIDB4MTE2MywgMHgxMTY0LCAweDExNjUsIDB4MTE2NiwgMHgxMTY3LCAweDExNjgsIDB4MTE2OSwgMHgxMTZBLCAweDExNkIsIDB4MTE2QywgMHgxMTZELAorICAgIDB4MTE2RSwgMHgxMTZGLCAweDExNzAsIDB4MTE3MSwgMHgxMTcyLCAweDExNzMsIDB4MTE3NCwgMHgxMTc1LCAweDExNjAsIDB4MTExNCwgMHgxMTE1LCAweDExQzcsIDB4MTFDOCwgMHgxMUNDLCAweDExQ0UsIDB4MTFEMywKKyAgICAweDExRDcsIDB4MTFEOSwgMHgxMTFDLCAweDExREQsIDB4MTFERiwgMHgxMTFELCAweDExMUUsIDB4MTEyMCwgMHgxMTIyLCAweDExMjMsIDB4MTEyNywgMHgxMTI5LCAweDExMkIsIDB4MTEyQywgMHgxMTJELCAweDExMkUsCisgICAgMHgxMTJGLCAweDExMzIsIDB4MTEzNiwgMHgxMTQwLCAweDExNDcsIDB4MTE0QywgMHgxMUYxLCAweDExRjIsIDB4MTE1NywgMHgxMTU4LCAweDExNTksIDB4MTE4NCwgMHgxMTg1LCAweDExODgsIDB4MTE5MSwgMHgxMTkyLAorICAgIDB4MTE5NCwgMHgxMTlFLCAweDExQTEsIDB4NEUwMCwgMHg0RThDLCAweDRFMDksIDB4NTZEQiwgMHg0RTBBLCAweDRFMkQsIDB4NEUwQiwgMHg3NTMyLCAweDRFNTksIDB4NEUxOSwgMHg0RTAxLCAweDU5MjksIDB4NTczMCwKKyAgICAweDRFQkEsIDB4NTU0RiwgMHg1RTdDLCAweDY1ODcsIDB4N0I4RiwgMHgxMTAwLCAweDExMDIsIDB4MTEwMywgMHgxMTA1LCAweDExMDYsIDB4MTEwNywgMHgxMTA5LCAweDExMEIsIDB4MTEwQywgMHgxMTBFLCAweDExMEYsCisgICAgMHgxMTEwLCAweDExMTEsIDB4MTExMiwgMHg0RTAwLCAweDRFOEMsIDB4NEUwOSwgMHg1NkRCLCAweDRFOTQsIDB4NTE2RCwgMHg0RTAzLCAweDUxNkIsIDB4NEU1RCwgMHg1MzQxLCAweDY3MDgsIDB4NzA2QiwgMHg2QzM0LAorICAgIDB4NjcyOCwgMHg5MUQxLCAweDU3MUYsIDB4NjVFNSwgMHg2ODJBLCAweDY3MDksIDB4NzkzRSwgMHg1NDBELCAweDcyNzksIDB4OENBMSwgMHg3OTVELCAweDUyQjQsIDB4NzlEOCwgMHg3NTM3LCAweDU5NzMsIDB4OTA2OSwKKyAgICAweDUxMkEsIDB4NTM3MCwgMHg2Q0U4LCAweDk4MDUsIDB4NEYxMSwgMHg1MTk5LCAweDZCNjMsIDB4NEUwQSwgMHg0RTJELCAweDRFMEIsIDB4NURFNiwgMHg1M0YzLCAweDUzM0IsIDB4NUI5NywgMHg1QjY2LCAweDc2RTMsCisgICAgMHg0RjAxLCAweDhDQzcsIDB4NTM1NCwgMHg1OTFDLCAweDMwQTIsIDB4MzBBNCwgMHgzMEE2LCAweDMwQTgsIDB4MzBBQSwgMHgzMEFCLCAweDMwQUQsIDB4MzBBRiwgMHgzMEIxLCAweDMwQjMsIDB4MzBCNSwgMHgzMEI3LAorICAgIDB4MzBCOSwgMHgzMEJCLCAweDMwQkQsIDB4MzBCRiwgMHgzMEMxLCAweDMwQzQsIDB4MzBDNiwgMHgzMEM4LCAweDMwQ0EsIDB4MzBDQiwgMHgzMENDLCAweDMwQ0QsIDB4MzBDRSwgMHgzMENGLCAweDMwRDIsIDB4MzBENSwKKyAgICAweDMwRDgsIDB4MzBEQiwgMHgzMERFLCAweDMwREYsIDB4MzBFMCwgMHgzMEUxLCAweDMwRTIsIDB4MzBFNCwgMHgzMEU2LCAweDMwRTgsIDB4MzBFOSwgMHgzMEVBLCAweDMwRUIsIDB4MzBFQywgMHgzMEVELCAweDMwRUYsCisgICAgMHgzMEYwLCAweDMwRjEsIDB4MzBGMiwgMHg0RTIyLCAweDVFNzYsIDB4NUU3QSwgMHg1RTcyLCAweDRFNzEsIDB4NEU5OCwgMHg0RTlBLCAweDRGMkIsIDB4NUUwMywgMHg1MzYwLCAweDY3NjUsIDB4NEZBMywgMHg0RkUzLAorICAgIDB4N0NGQiwgMHg0RkEwLCAweDRGMjUsIDB4NEZFOSwgMHg0RUQzLCAweDRFMkEsIDB4NEVFQywgMHg0RjI2LCAweDRGMUYsIDB4NEZBNywgMHg0RkE2LCAweDRGMkEsIDB4Njc3MCwgMHg0RjI3LCAweDRGMUUsIDB4NTkwNywKKyAgICAweDVCQjYsIDB4NEY2MywgMHg1MDZDLCAweDRGMjAsIDB4NEYxQiwgMHg1MDNBLCAweDRGMjQsIDB4NTAzRSwgMHg1MDdCLCAweDRFQzUsIDB4NEY2NSwgMHg0RkE4LCAweDRFQzYsIDB4NEZBNSwgMHg1MDdFLCAweDk2QzcsCisgICAgMHg0RUY3LCAweDRFRUEsIDB4NEZBQywgMHg0RUJGLCAweDRGRUQsIDB4NTBBNywgMHg0RkU2LCAweDRGQUEsIDB4NUMzRCwgMHg1MDdGLCAweDRGMTgsIDB4NTBBOCwgMHg0RkVBLCAweDUwQTksIDB4NTBBNSwgMHg0RkU4LAorICAgIDB4NTFGNiwgMHg1MTUxLCAweDUxM0YsIDB4NTE1NiwgMHg1MTg1LCAweDRFMjQsIDB4NTE4QywgMHg4MEM0LCAweDUxOTksIDB4NUU0MiwgMHg1MUJCLCAweDUxREIsIDB4NTFFRiwgMHg1MjJCLCAweDUyMjAsIDB4NTIyRCwKKyAgICAweDUyMTksIDB4NTIzOSwgMHg1MjFBLCAweDUyNjUsIDB4NTI1MCwgMHg1MjQwLCAweDUyMUIsIDB4NTIyQywgMHg1MjEyLCAweDUyNjcsIDB4NTIxOCwgMHg1MjNELCAweDUyM0YsIDB4NTI1MSwgMHg1MjQyLCAweDUyQjIsCisgICAgMHg1MkE4LCAweDUyRDYsIDB4NTJBMSwgMHg4MERDLCAweDUyQjMsIDB4NTJCRiwgMHg1MkEyLCAweDUyQ0IsIDB4NTJCMSwgMHg1MjlELCAweDUzMDAsIDB4NTMyNiwgMHg2QzQ3LCAweDUzMkUsIDB4NTMzQSwgMHg1MzRGLAorICAgIDB4NjA2NCwgMHg1Mzc0LCAweDUzOEQsIDB4NTM4QywgMHg1Mzg5LCAweDUzQTMsIDB4NTNDMiwgMHg0RTFCLCAweDU0QTQsIDB4NTQzNCwgMHg1NDUwLCAweDU0MTUsIDB4NTQ1OCwgMHg1NUIxLCAweDU0NTcsIDB4NUZGNSwKKyAgICAweDk1RUUsIDB4NTREMSwgMHg1NDJGLCAweDU1MjQsIDB4NEUyNywgMHg0RTU0LCAweDUzNTUsIDB4NTRERiwgMHg1NDVCLCAweDU1NkMsIDB4NTUxRCwgMHg1NDE3LCAweDU0NUMsIDB4NTUyMiwgMHg1NEQ0LCAweDUzRjksCisgICAgMHg1NUJELCAweDU0NTUsIDB4NTU2NywgMHg1QzFELCAweDU1MUIsIDB4NTRENywgMHg1NTIwLCAweDU1NzgsIDB4NTNGRCwgMHg1NEQzLCAweDU0NTIsIDB4NTU3NCwgMHg2MDc2LCAweDU2MTgsIDB4NTQ5RCwgMHg1NEQyLAorICAgIDB4NTRERCwgMHg1NEQ1LCAweDU1RjMsIDB4NTREOSwgMHg1NUI3LCAweDU0MjgsIDB4NTQ5QiwgMHg1NDEzLCAweDU0REMsIDB4NUMxRCwgMHg1NjVDLCAweDU1NkUsIDB4NTQ1NiwgMHg1NDk5LCAweDRFQjgsIDB4NTVCRSwKKyAgICAweDRFMjUsIDB4NTYyNCwgMHg1NTZELCAweDU1RUIsIDB4NTZBMywgMHg1MTgxLCAweDU0NTMsIDB4NTU3MCwgMHg1NjMxLCAweDU2RjEsIDB4NTZGNSwgMHg1NkZELCAweDU2RjQsIDB4NTZFRCwgMHg1NzA2LCAweDU2RkUsCisgICAgMHg1NkUyLCAweDU3QUQsIDB4NjI2NywgMHg1NzVBLCAweDU3QTksIDB4NTdEQSwgMHg1QzI3LCAweDYyQTUsIDB4NTczQSwgMHg1NzU3LCAweDgzMTQsIDB4NTdCMiwgMHg1N0Q4LCAweDZEODIsIDB4NTFBMiwgMHg1NzVFLAorICAgIDB4NTdEOSwgMHg1QzE4LCAweDU4MTEsIDB4NTdBQiwgMHg1NzYwLCAweDU4MTUsIDB4NTc1RiwgMHg1N0E2LCAweDU3NUIsIDB4NTM4QiwgMHg1NzkyLCAweDU3MzksIDB4NTc4NiwgMHg1NzRGLCAweDU3ODUsIDB4NTc1QywKKyAgICAweDU3NUQsIDB4NThFRSwgMHg1OEY2LCAweDU4RjgsIDB4NUJGRiwgMHg1OTFGLCAweDY4QTYsIDB4NEYxOSwgMHg1OTM5LCAweDU5NDIsIDB4NTk2NSwgMHg1OTQxLCAweDU5M0EsIDB4NTk0QiwgMHg1OUY5LCAweDU5ODYsCisgICAgMHg1OUQ3LCAweDU5NzgsIDB4NUEzMSwgMHg1QTA0LCAweDU5ODcsIDB4NUEwNSwgMHg1QTMyLCAweDU5QUIsIDB4NUFBQSwgMHg1OTg4LCAweDU5QUEsIDB4NTlBOSwgMHg1QTM0LCAweDVBNzMsIDB4NUEwNiwgMHg1QTc1LAorICAgIDB4NUEwNywgMHg1QUYxLCAweDVBRDIsIDB4NUIzNywgMHg1QUQ0LCAweDVBNzQsIDB4NUE3NiwgMHg1QTA4LCAweDVCNTksIDB4NUI2NiwgMHg1QjZBLCAweDVCQUIsIDB4NUJERCwgMHg1QjlFLCAweDVCODEsIDB4NUJBMSwKKyAgICAweDUxOTksIDB4NUJCRCwgMHg1QkEwLCAweDVCOUQsIDB4NUMwNiwgMHg0RTEzLCAweDVCRkIsIDB4NUJGOSwgMHg1QkZDLCAweDVDMzQsIDB4NUM0QSwgMHg1QzM4LCAweDVDNDksIDB4NUM2MSwgMHg1QzQyLCAweDVDNUYsCisgICAgMHg1QzY2LCAweDVDNUUsIDB4NTE4OCwgMHg1Qzk4LCAweDVDOUIsIDB4NUNFMSwgMHg1RDAzLCAweDVDOTcsIDB4NEVEMSwgMHg1Q0U1LCAweDVDOUEsIDB4NUQ1RCwgMHg1RDJELCAweDVDOTYsIDB4NUQ1QSwgMHg1RDAyLAorICAgIDB4NUNFNCwgMHg1Q0UzLCAweDVDQzQsIDB4NUQwNCwgMHg1Qzk5LCAweDVENTgsIDB4NUNBRCwgMHg1QzdGLCAweDVDQjMsIDB4NUNCRiwgMHg1Q0U2LCAweDVEQzUsIDB4NURFRiwgMHg1RTA1LCAweDVFMDgsIDB4NUUxMCwKKyAgICAweDVFMjYsIDB4NUUyNywgMHg1RTBGLCAweDVFM0MsIDB4NUUzQiwgMHg1RTFDLCAweDVFMDEsIDB4NUUyRSwgMHg1RTMxLCAweDVFNzIsIDB4NTFFMCwgMHg1RTkzLCAweDUzOTUsIDB4NTNBMiwgMHg1M0E2LCAweDUzQTgsCisgICAgMHg1M0FFLCAweDVFOTksIDB4NTM4MiwgMHg1RTkxLCAweDVFOUYsIDB4NUU3RiwgMHg1RUVBLCAweDVFOTAsIDB4NTM4NSwgMHg1RjExLCAweDVGMkEsIDB4NUYyMCwgMHg1RjNBLCAweDVGMzksIDB4NUYyNSwgMHg1RjJGLAorICAgIDB4NUY2NiwgMHg1NDBFLCAweDVGODQsIDB4NEVDRSwgMHg1Rjk1LCAweDU5MEQsIDB4NUY4MSwgMHg1RjdCLCAweDYwNTIsIDB4ODAzQiwgMHg2MEE2LCAweDYwMDUsIDB4OTVGNywgMHg2MDc2LCAweDYwN0MsIDB4NjA3RCwKKyAgICAweDYwN0IsIDB4NzIzMSwgMHg2MEVDLCAweDYwQUIsIDB4NjAwNiwgMHg2MDdBLCAweDVGRkUsIDB4NjAwMSwgMHg2MTIwLCAweDYwRTgsIDB4NjBFRCwgMHg2MDc4LCAweDYwRUYsIDB4NjAwNCwgMHg2MDAyLCAweDg2NTEsCisgICAgMHg2MEFELCAweDVFODYsIDB4NUZFNywgMHg2MEVCLCAweDYwMUMsIDB4NTFFRCwgMHg2MTI2LCAweDYxNkQsIDB4NjBFRSwgMHg2MTI0LCAweDYwQUYsIDB4NjAwMywgMHg1QkFBLCAweDVGQzYsIDB4NjA3MywgMHg1RTk0LAorICAgIDB4NjAzRiwgMHg2MUQ0LCAweDYwM0MsIDB4NjFEMSwgMHg2MDc5LCAweDYwRTksIDB4NjFEMiwgMHg2MDAwLCAweDYwQUMsIDB4NUZDRiwgMHg2MEU3LCAweDYxNTEsIDB4NjA0QiwgMHg2MjA2LCAweDYyMEIsIDB4NjIxNywKKyAgICAweDYyMkMsIDB4NjIxOCwgMHg2MjBGLCAweDYyMzcsIDB4NjI5QiwgMHg2MzFGLCAweDgyMEQsIDB4NjI2QSwgMHg1Mzc3LCAweDYyNkIsIDB4NjJBMSwgMHg2MzIzLCAweDYzMDIsIDB4OTFDNywgMHg2MkUzLCAweDYyNkMsCisgICAgMHg2MzYyLCAweDYzMjUsIDB4NjM1RiwgMHg2NDQ3LCAweDYzNjMsIDB4NjJBMiwgMHg2M0I0LCAweDYzQkMsIDB4NjQwMiwgMHg2MzFBLCAweDYyQTAsIDB4NjI5RiwgMHg2M0JBLCAweDYzNUUsIDB4NjQ5MSwgMHg2MzIwLAorICAgIDB4NjMyMiwgMHg2M0I4LCAweDYyRTgsIDB4NjI5QSwgMHg2MjUxLCAweDYzRkYsIDB4NjMxRSwgMHg2MzFELCAweDYzNjEsIDB4NjJFNSwgMHg2M0IzLCAweDYyRTksIDB4NTFGQiwgMHg2MzIxLCAweDYyQzUsIDB4NjM2RSwKKyAgICAweDYzMjQsIDB4NjJERiwgMHg2NDQ4LCAweDYyRTcsIDB4NjQwMSwgMHg2M0I3LCAweDYyNjksIDB4NjRCNywgMHg2NDQ2LCAweDY0REUsIDB4NjRCOCwgMHg2MjcwLCAweDY0NDUsIDB4NjRCNSwgMHg2MkUyLCAweDYyRTYsCisgICAgMHg2NDg0LCAweDY0MDAsIDB4NjRCQSwgMHg2NDNBLCAweDY0NDQsIDB4NjUxMiwgMHg2MzFCLCAweDY0NEEsIDB4NjQwNSwgMHg2M0ZELCAweDY2OEIsIDB4OEQyNSwgMHg1M0Q5LCAweDY1NEMsIDB4NjU3MCwgMHg2NTVCLAorICAgIDB4NkJEOSwgMHg2NTkzLCAweDY1QTksIDB4NjVBRCwgMHg0RThFLCAweDUzNDcsIDB4NjVGNiwgMHg2NjRCLCAweDY2M0MsIDB4NjY1NSwgMHg2NjU2LCAweDY1RjgsIDB4NzU0NSwgMHg2NjgyLCAweDY2MzUsIDB4NjY1NCwKKyAgICAweDUzODYsIDB4NjYxOSwgMHg2NjUzLCAweDY2QTcsIDB4NjVGNywgMHg2NjNELCAweDY2NTIsIDB4NEU2NiwgMHg0RjFBLCAweDgwRTcsIDB4NEUxQywgMHg2ODA1LCAweDY3NDYsIDB4NjgwMCwgMHg2N0E3LCAweDY3NjEsCisgICAgMHg2N0FELCAweDVGMDMsIDB4NjdBOCwgMHg2N0EzLCAweDY4MEIsIDB4NjgwOCwgMHg2ODE2LCAweDY4NjAsIDB4Njc2OCwgMHg2N0FCLCAweDY4NjIsIDB4NEUxQSwgMHg2NzgxLCAweDY3NjksIDB4ODM2MywgMHg2ODY0LAorICAgIDB4Njc4NCwgMHg2N0FBLCAweDY3NjAsIDB4NjhCRiwgMHg2OTIwLCAweDY5MDEsIDB4Njg2OCwgMHg2ODY5LCAweDRFNTAsIDB4Njc5RSwgMHg2OTdDLCAweDY4MDcsIDB4NjdBMiwgMHg2ODM3LCAweDY3MzQsIDB4NjgxMSwKKyAgICAweDY4NjYsIDB4Njg2MSwgMHg2ODY1LCAweDY3M0EsIDB4NjkyRCwgMHg2QTJBLCAweDZBQTksIDB4NjlEQywgMHg2N0ZELCAweDY4NjMsIDB4Njg2NywgMHg2OURBLCAweDY4QzAsIDB4NkEyRiwgMHg2OEJDLCAweDUzRjAsCisgICAgMHg2OURGLCAweDY3RTAsIDB4NjlEQiwgMHg4MkQ4LCAweDY3REMsIDB4NkE3OSwgMHg2OTg4LCAweDY4MDksIDB4NjkxRiwgMHg2QTdDLCAweDY4MEUsIDB4NkE3MSwgMHg2OUUwLCAweDY4MEMsIDB4NjdBNSwgMHg2QTY1LAorICAgIDB4Njk4NywgMHg2ODBBLCAweDY5ODksIDB4NjhDMiwgMHg2QTMxLCAweDY4MEYsIDB4Njc0MywgMHg2OTI0LCAweDY4M0UsIDB4Njk4NCwgMHg5NEE2LCAweDZCMjcsIDB4NkIyNCwgMHg2QjIyLCAweDVDODEsIDB4NTM4NiwKKyAgICAweDVGNTIsIDB4NkI4MSwgMHg2QjhCLCAweDZCOTIsIDB4NkI4NywgMHg2QjlBLCAweDZCOTMsIDB4NkJBMSwgMHg2QjdDLCAweDY3NDAsIDB4NThGMywgMHg2QkMxLCAweDZCQjQsIDB4NkJGNSwgMHg2QkUxLCAweDZDMDcsCisgICAgMHg2QzE0LCAweDZDMjIsIDB4NkMyOSwgMHg2QzMyLCAweDUxRkMsIDB4NTFCMywgMHg1MUIxLCAweDZDQTEsIDB4NTFCNSwgMHg2Q0M0LCAweDZDNzksIDB4NkQ0MywgMHg2Q0ZFLCAweDUxQzksIDB4NTFDNCwgMHg2Q0VBLAorICAgIDB4NkUwQywgMHg1MUMwLCAweDZDQTYsIDB4NkUwQSwgMHg2RDlFLCAweDZENDUsIDB4NkRBMywgMHg1MUNGLCAweDZDQTgsIDB4NkRBMSwgMHg2RDRCLCAweDZENTEsIDB4NTFEMSwgMHg2RDQ4LCAweDZEOEMsIDB4NkQwNywKKyAgICAweDZDNjQsIDB4NkNBOSwgMHg1MUM2LCAweDZDOUYsIDB4NkUyOSwgMHg2REEyLCAweDZFN0YsIDB4NkNBNywgMHg3MDZELCAweDZEQTQsIDB4ODM2NSwgMHg2Q0FBLCAweDZFREUsIDB4NkUxNywgMHg2RDUyLCAweDZENTAsCisgICAgMHg2RURBLCAweDZFRTEsIDB4NkUxNCwgMHg2RTg3LCAweDZDQTQsIDB4NkM0OSwgMHg2RDlGLCAweDZFMEQsIDB4NkRBOCwgMHg2RTEwLCAweDZENDYsIDB4OTg4RCwgMHg2Q0ZDLCAweDZEMDEsIDB4NkY1QywgMHg2REE2LAorICAgIDB4NkQ1NCwgMHg2RTgzLCAweDZEQTAsIDB4NkRBOSwgMHg2RDQ3LCAweDZEOUQsIDB4NkM4NCwgMHg2REE3LCAweDZFMTEsIDB4NkNGRCwgMHg2RUVBLCAweDZDRjYsIDB4NkQ0RCwgMHg2RDRBLCAweDZENTMsIDB4NkU3RiwKKyAgICAweDZDREUsIDB4NkQ0RSwgMHg2RDlCLCAweDZFRTUsIDB4NkY0RCwgMHg2RUU4LCAweDZFODUsIDB4NkNGQSwgMHg2RUU0LCAweDZFRTIsIDB4NkUwRSwgMHg2Q0ZCLCAweDZENEYsIDB4NkZEMiwgMHg2Q0Y4LCAweDZDQTUsCisgICAgMHg2RjQ3LCAweDZGNDYsIDB4NkY3NCwgMHg2Q0Y3LCAweDZGRDEsIDB4NkY0QiwgMHg2RjlDLCAweDZDQTMsIDB4NkVFMCwgMHg2RDEyLCAweDZFRTksIDB4NzA0RiwgMHg2RTdFLCAweDZFRTYsIDB4NkVERiwgMHg3MDdFLAorICAgIDB4NEUzQSwgMHg0RTRDLCAweDcwQzMsIDB4NjVFMCwgMHg3MEJDLCAweDcwOUMsIDB4NzBERiwgMHg4MzE1LCAweDcxMTUsIDB4NzBFNiwgMHg3MDgwLCAweDgzNjcsIDB4NzA5RCwgMHg3MEVELCAweDcwQkQsIDB4NzBFOCwKKyAgICAweDcwNkYsIDB4NzA5NiwgMHg3MEU3LCAweDcwRUIsIDB4NzExNiwgMHg4NDI1LCAweDcwN0YsIDB4NzBEQiwgMHg3MEU5LCAweDcwRUMsIDB4NzExOCwgMHg3MEMxLCAweDcwODksIDB4NzBDMiwgMHg0RTg5LCAweDRFM0EsCisgICAgMHg3MjM3LCAweDVDMTQsIDB4NTg5OSwgMHg3MjRELCAweDcyNzUsIDB4ODM2NiwgMHg3MjY2LCAweDcyOEEsIDB4NzI3QSwgMHg3MkI2LCAweDcyRUQsIDB4NzJDOCwgMHg3MkYwLCAweDcyQjksIDB4NzJGMiwgMHg3MkI4LAorICAgIDB4NzJGMSwgMHg3MkVFLCAweDU5NTYsIDB4NzJFQywgMHg3MkVGLCAweDczMDMsIDB4NzJERSwgMHg4M0I3LCAweDczMEUsIDB4NzJCNywgMHg1MTdELCAweDczNkQsIDB4NzMyRSwgMHg3MzE1LCAweDczMjEsIDB4NzNCMCwKKyAgICAweDczRDAsIDB4NzNGMiwgMHg3M0FFLCAweDczOUEsIDB4NzQxMCwgMHg3NDc2LCAweDgzQjksIDB4NzM5QiwgMHg3NDA1LCAweDczQjEsIDB4NzQwRiwgMHg3NDBFLCAweDczOTEsIDB4NzQ3NywgMHg3M0YwLCAweDczQUYsCisgICAgMHg3Mzk5LCAweDczQkEsIDB4NzQzQywgMHg3M0QxLCAweDc0OEUsIDB4NzREMiwgMHg3NEVGLCAweDc0RUUsIDB4NEVBNywgMHg0RUE3LCAweDRFQTksIDB4NkJENSwgMHg3NTNCLCAweDc1NzIsIDB4NUYwMiwgMHg1RjUzLAorICAgIDB4NzU3NCwgMHg1M0UwLCAweDc1QzksIDB4OTE3OCwgMHg3NUY5LCAweDc1RDYsIDB4NzVBRiwgMHg3NUExLCAweDc1RUEsIDB4NzYxNywgMHg3NUFFLCAweDc1OUYsIDB4NzVBRCwgMHg3NjE4LCAweDc1OTcsIDB4NzVFOCwKKyAgICAweDc1RUIsIDB4NzYwNSwgMHg3NUEwLCAweDc2MkEsIDB4NzVEMiwgMHg3NTk2LCAweDc1QUMsIDB4NzY1RSwgMHg3NjYzLCAweDc2M0YsIDB4NzYzRSwgMHg3NUM4LCAweDc2MkIsIDB4NzY2QiwgMHg1M0QxLCAweDc2OTEsCisgICAgMHg3NUIxLCAweDc2QjIsIDB4NzZCMSwgMHg2NzZGLCAweDc2RDcsIDB4NzZDRiwgMHg1QzNELCAweDc2RDEsIDB4NzZEOCwgMHg1MzYyLCAweDgzNjEsIDB4NzcyNiwgMHg0RjE3LCAweDU2RjAsIDB4Nzc0MSwgMHg3NzUwLAorICAgIDB4NzcyRiwgMHg3NzkyLCAweDRFODYsIDB4Nzc4NiwgMHg3NzUxLCAweDc3MkMsIDB4NzdBOSwgMHg3N0VCLCAweDc4NDUsIDB4NzBBRSwgMHg3ODQxLCAweDc4NTYsIDB4NzgxNywgMHg3ODFBLCAweDc4NTUsIDB4NzgwMCwKKyAgICAweDc4NkUsIDB4NzgwMSwgMHg3ODU5LCAweDc4MTYsIDB4Nzg5QywgMHg3ODlCLCAweDc3RjYsIDB4Nzg1NywgMHg3ODVBLCAweDc4NDAsIDB4Nzg4RCwgMHg3N0ZGLCAweDc4M0EsIDB4NzgzRSwgMHg3N0ZFLCAweDc4M0IsCisgICAgMHg3OTg0LCAweDc5NzgsIDB4Nzk2RiwgMHg3OTRFLCAweDVGQTEsIDB4Nzk4NSwgMHg3OTNDLCAweDc5NzcsIDB4NzlDMywgMHg3QzdDLCAweDdBMEUsIDB4NzlDNiwgMHg2OEYxLCAweDc5Q0QsIDB4NzlGMCwgMHg3QTIzLAorICAgIDB4NzlFRiwgMHg5ODk2LCAweDc5RkUsIDB4N0E1MSwgMHg3OUZELCAweDdBMzMsIDB4N0E5RCwgMHg2RDNDLCAweDdBNzcsIDB4N0E5MSwgMHg3QThFLCAweDdBQUQsIDB4N0FBNSwgMHg3QTlDLCAweDdBOEQsIDB4N0FBNiwKKyAgICAweDdBODMsIDB4N0FERSwgMHg3QjE0LCAweDdCMEIsIDB4N0IxNSwgMHg3QjNBLCAweDdCNUQsIDB4ODI4MiwgMHg4MzAzLCAweDdCNTEsIDB4N0JBNywgMHg3QjdDLCAweDdCMDMsIDB4N0I1QiwgMHg3QjVBLCAweDdCQTYsCisgICAgMHg3QkQzLCAweDdCQUEsIDB4N0I4MCwgMHg3QkQxLCAweDdCQUIsIDB4NkE5MCwgMHg3QjVDLCAweDdCN0UsIDB4NUUxOCwgMHg3QkVFLCAweDdCNzksIDB4N0I5MywgMHg3QkVGLCAweDdCQTgsIDB4N0M0MSwgMHg3QjNDLAorICAgIDB4N0I3RSwgMHg3QjNFLCAweDdCRjEsIDB4N0JBOSwgMHg1NDAxLCAweDU5ODYsIDB4N0NBNCwgMHg3Q0MxLCAweDdDQUEsIDB4N0NBRSwgMHg3Q0Y1LCAweDdDOUQsIDB4N0M3NCwgMHg3QzlDLCAweDdFQTAsIDB4N0VBQSwKKyAgICAweDdFQTMsIDB4N0VBNiwgMHg3RUEyLCAweDdFQTEsIDB4N0VBNSwgMHg3RUE4LCAweDdFQUIsIDB4N0VCOSwgMHg3RUIzLCAweDdFQkQsIDB4N0VCRSwgMHg3RUFGLCAweDdFQjAsIDB4N0VCMSwgMHg3RUI4LCAweDdFQTcsCisgICAgMHg3RUI3LCAweDdFQUQsIDB4N0VCNCwgMHg3RUJBLCAweDYyNEUsIDB4NjI0RSwgMHg3RUM2LCAweDdFQzIsIDB4N0VDMSwgMHg3RUM1LCAweDdFQkIsIDB4N0VDRCwgMHg3RUMwLCAweDdFQ0IsIDB4N0VEMCwgMHg3RUNDLAorICAgIDB4N0VDOCwgMHg1RjI2LCAweDdFQzQsIDB4N0VDQSwgMHg3RUQ3LCAweDdFRDMsIDB4N0VERCwgMHg3RUU2LCAweDdFRDQsIDB4N0VERSwgMHg3RURDLCAweDdFREEsIDB4N0VEOSwgMHg3RUQyLCAweDdFRDYsIDB4N0VERiwKKyAgICAweDRFMUQsIDB4N0VEQiwgMHg3RUUyLCAweDdFRDEsIDB4N0VFMSwgMHg3RUUwLCAweDdFRTgsIDB4N0VFNSwgMHg3RUNGLCAweDdFRkMsIDB4N0YwRCwgMHg3RUZGLCAweDdFRjgsIDB4N0VGQiwgMHg3RUY2LCAweDdFRjQsCisgICAgMHg3RUZFLCAweDdFQjIsIDB4N0Y1MSwgMHg3RjAwLCAweDdFQjYsIDB4N0VGQSwgMHg3RUVFLCAweDdFRkQsIDB4N0VGMCwgMHg3RUVCLCAweDdFRjUsIDB4N0VGMiwgMHg3RjAxLCAweDdEMjcsIDB4N0VFRiwgMHg3RUVBLAorICAgIDB4N0YwMywgMHg3RjA0LCAweDdGMDIsIDB4N0VCRiwgMHg3RjA5LCAweDdGMEUsIDB4N0YxNCwgMHg3RjE3LCAweDdGMTgsIDB4N0YwQywgMHg3RjE2LCAweDdGMTMsIDB4N0YwNSwgMHg3RUFDLCAweDdGMTEsIDB4N0YwOCwKKyAgICAweDdFQzMsIDB4N0YwRiwgMHg3RjA3LCAweDgxRjQsIDB4ODQyNiwgMHg3RjE5LCAweDdGMjIsIDB4N0YxMiwgMHg3RUM5LCAweDdGMjMsIDB4N0YxRSwgMHg3RjFBLCAweDdGMUMsIDB4N0YxRiwgMHg3RjFCLCAweDUzQkYsCisgICAgMHg3RjFELCAweDdGMjksIDB4N0VCNSwgMHg3RjI3LCAweDdGMjYsIDB4N0Q3NywgMHg3RjE1LCAweDdGMjUsIDB4NjAzQiwgMHg3RUU5LCAweDdFRjcsIDB4N0YyQiwgMHg3RjJBLCAweDdGMkYsIDB4N0VDNywgMHg3RjJFLAorICAgIDB4N0YyRCwgMHg3RUQ1LCAweDdFRTMsIDB4N0YwQiwgMHg3RUYzLCAweDdFRDgsIDB4N0NGQiwgMHg4MzI3LCAweDdGMzMsIDB4N0YzMiwgMHg3RjM0LCAweDdFQ0UsIDB4N0VFNywgMHg3RjI0LCAweDdGMzEsIDB4N0YyQywKKyAgICAweDdFQTksIDB4N0VFRCwgMHg3RjIwLCAweDdGMjgsIDB4N0VBNCwgMHg3RjM1LCAweDdGMDYsIDB4OTRCNSwgMHg3RjQyLCAweDdGNUEsIDB4OUE4MiwgMHg3RjYyLCAweDdGNTcsIDB4N0Y3NCwgMHg3RjgxLCAweDgyODgsCisgICAgMHg3RjlGLCAweDdGQTEsIDB4NEU0OSwgMHg4MUJCLCAweDRFNjAsIDB4N0ZDNiwgMHg3RkRBLCAweDdGRDgsIDB4N0ZEOSwgMHg4MDI3LCAweDU3MjMsIDB4OTVGQiwgMHg4MDU0LCAweDgwNkEsIDB4NThGMCwgMHg4MDM4LAorICAgIDB4ODA2OSwgMHg4MDQyLCAweDgwNEMsIDB4ODA0RCwgMHg1NDJDLCAweDgwNEIsIDB4ODA4MywgMHg4MEMxLCAweDgxMDksIDB4ODBFQiwgMHg4MTMxLCAweDgwQzAsIDB4ODBCRSwgMHg4MEU4LCAweDgxMzYsIDB4ODExMSwKKyAgICAweDgwQkYsIDB4ODExQSwgMHg4MEEwLCAweDgxN0QsIDB4ODE1OCwgMHg4MEE0LCAweDgwRjYsIDB4ODE3QiwgMHg4MEM2LCAweDgxMEQsIDB4ODExMywgMHg4MTM4LCAweDgxMTAsIDB4ODE5MSwgMHg4MTRBLCAweDgwRUEsCisgICAgMHg4MTBGLCAweDgxMTQsIDB4ODFEQywgMHg1MzY3LCAweDRFMzQsIDB4NTNGMCwgMHg0RTBFLCAweDUxNzQsIDB4NEUzRSwgMHg2NUU3LCAweDgyMzEsIDB4ODIyMywgMHg4MjMwLCAweDgyM0IsIDB4ODI3MCwgMHg4MjczLAorICAgIDB4ODJDNCwgMHg1MjBELCAweDgyQ0UsIDB4NTE3OSwgMHg4MzQ2LCAweDhDNDYsIDB4NUU4NCwgMHg4MzBFLCAweDgzNUEsIDB4ODJDQiwgMHg1MzRFLCAweDcwREYsIDB4ODJDQywgMHg4M0IxLCAweDRFMDcsIDB4ODNCNCwKKyAgICAweDUzRjYsIDB4ODM2RCwgMHg3NzQwLCAweDgyQzcsIDB4ODM2NCwgMHg2NDFDLCAweDgzQjMsIDB4ODM4NSwgMHg4MkNELCAweDgzNkEsIDB4NzZENiwgMHg4M0IyLCAweDgyQzEsIDB4ODNCQywgMHg4MzVDLCAweDg0OEMsCisgICAgMHg4NDhCLCAweDg0NzEsIDB4ODMxMSwgMHg4MzZCLCAweDgzNjgsIDB4ODQ4NywgMHg4MzVFLCAweDgzNkMsIDB4ODNCOCwgMHg4MzVCLCAweDg0ODksIDB4ODI5QywgMHg4NDI3LCAweDg0RTMsIDB4ODM1RiwgMHg4NERGLAorICAgIDB4ODI5NywgMHg1OURDLCAweDg1MzcsIDB4ODNCNiwgMHg4MzUwLCAweDg0MjgsIDB4ODM2MCwgMHg1MDFGLCAweDg0REQsIDB4ODM2OSwgMHg4MjdBLCAweDgzNkYsIDB4ODVBRSwgMHg4MkM4LCAweDg1M0MsIDB4ODUzQSwKKyAgICAweDg0MUEsIDB4ODU3MiwgMHg4MkE2LCAweDgyQ0YsIDB4ODU3NCwgMHg4MkY5LCAweDg2MTYsIDB4ODVEMywgMHg4NTM5LCAweDgzMEYsIDB4NTE3MCwgMHg4NEUwLCAweDg0MUQsIDB4NTkwNCwgMHg4NjVBLCAweDg2NEYsCisgICAgMHg1M0Y3LCAweDRFOEYsIDB4ODY2QywgMHg4NkYxLCAweDg3MTUsIDB4ODZBQywgMHg4NjgwLCAweDczMkMsIDB4ODY3RSwgMHg4NjcxLCAweDg3MTcsIDB4ODZGMywgMHg4NjgyLCAweDg0MjQsIDB4ODc3QywgMHg4NzgwLAorICAgIDB4ODZGMCwgMHg4NzQ4LCAweDg3QTgsIDB4ODY2RSwgMHg4NzQ5LCAweDg2RjIsIDB4ODY2QiwgMHg4NkNGLCAweDg2ODEsIDB4ODY4MywgMHg4NzQ3LCAweDg2N0YsIDB4ODc0RSwgMHg4NkY0LCAweDg3N0UsIDB4ODY5RCwKKyAgICAweDg3MjEsIDB4ODZDRSwgMHg4N0NGLCAweDg2Q0EsIDB4ODY5NSwgMHg4NkVFLCAweDRGMTcsIDB4NjcyRiwgMHg1MzZCLCAweDUxQjIsIDB4ODg2RSwgMHg4ODg1LCAweDg4NjUsIDB4ODhDNSwgMHg5MUNDLCAweDUyMzYsCisgICAgMHg1OTBELCAweDg4QzgsIDB4ODg4NiwgMHg4OEU0LCAweDg4RTIsIDB4N0YyMSwgMHg4OTFCLCAweDRFQjUsIDB4ODhFNSwgMHg4ODg0LCAweDg4RTMsIDB4ODhDNiwgMHg4OTM0LCAweDg4OUMsIDB4ODg2QywgMHg4OEFELAorICAgIDB4ODk1NSwgMHg4OUMxLCAweDg5QzQsIDB4ODlDNSwgMHg4OUM2LCAweDg5QzcsIDB4ODlDQiwgMHg4OUNELCAweDg5Q0UsIDB4NEVCMiwgMHg4OUNBLCAweDg5Q0YsIDB4ODlEMCwgMHg4OUQxLCAweDg5QzksIDB4ODlDOCwKKyAgICAweDg5Q0MsIDB4ODlDMiwgMHg4OURFLCAweDg5RUYsIDB4ODlFNiwgMHg4QkEyLCAweDhCQTMsIDB4OEJBMSwgMHg4QkFGLCAweDhCQTcsIDB4OEJBOCwgMHg4QkE2LCAweDhCQUQsIDB4OEJBQSwgMHg4QkFCLCAweDhCQUMsCisgICAgMHg4QkIwLCAweDhCQjksIDB4OEJCNiwgMHg4QkJDLCAweDhCQzAsIDB4OEJCNywgMHg4QkJGLCAweDhCQkUsIDB4OEJCOCwgMHg4QkM5LCAweDhCQzMsIDB4OEJDQSwgMHg4QkMxLCAweDhCQzIsIDB4OEJDQiwgMHg4QkI1LAorICAgIDB4OEJDOCwgMHg4QkQyLCAweDhCQ0YsIDB4OEJDNCwgMHg4QkNFLCAweDhCQzUsIDB4OEJDRCwgMHg1NDhGLCAweDhCRTksIDB4OEJFMiwgMHg4QkUzLCAweDhCRDUsIDB4OEJENywgMHg4QkU3LCAweDhCREYsIDB4OEJFMSwKKyAgICAweDhCRTAsIDB4OEJEOCwgMHg4QkRELCAweDhCRTUsIDB4OEJFNiwgMHg4QkRDLCAweDhCRDksIDB4OEJENiwgMHg4QkQ0LCAweDhCREIsIDB4OEJEMywgMHg1OTM4LCAweDVGRDcsIDB4OEJBNCwgMHg4QkYzLCAweDhCRjYsCisgICAgMHg4QkRFLCAweDhCRjEsIDB4OEJFRSwgMHg4QkVELCAweDhCREEsIDB4OEJFQiwgMHg4QkVDLCAweDhCRUYsIDB4OEJGMCwgMHg4QkY1LCAweDhCRjIsIDB4OEJGNCwgMHg4QzAxLCAweDhCRkUsIDB4OEMwNywgMHg4QkZELAorICAgIDB4OEMwQSwgMHg4QzAzLCAweDhDMDQsIDB4OEMwNiwgMHg4QzA4LCAweDhCRkYsIDB4OEJGNywgMHg4QkU0LCAweDhCRjksIDB4OEJGQywgMHg4QzA1LCAweDhCQkEsIDB4OEMwMiwgMHg4QzAwLCAweDhDMEQsIDB4OEMxRSwKKyAgICAweDhDMUQsIDB4OEMyNSwgMHg4QkU4LCAweDhDMTQsIDB4OEMxQiwgMHg4QzEwLCAweDhDMEYsIDB4OEMxNSwgMHg4QzE4LCAweDhCQjMsIDB4OEMxOSwgMHg4QzBDLCAweDhCQkQsIDB4OEJGOCwgMHg4QzFBLCAweDhDMTYsCisgICAgMHg4QkZBLCAweDhDMEIsIDB4OEMxMiwgMHg4QzEzLCAweDhBOEEsIDB4OEJDQywgMHg4QzBFLCAweDhDMUMsIDB4OEMyNywgMHg4QzExLCAweDhDMjEsIDB4OEMyNCwgMHg4QzI2LCAweDhCQjIsIDB4OEMyMiwgMHg4QzIzLAorICAgIDB4OEMxRiwgMHg4QzJBLCAweDhDMkMsIDB4OEJCNCwgMHg4QzI4LCAweDhDMjksIDB4OEJDMSwgMHg4QzMyLCAweDhCQTUsIDB4OEMyRSwgMHg4QkM2LCAweDhDMkYsIDB4OEMyRCwgMHg4QzMxLCAweDhDMzUsIDB4OEJEMSwKKyAgICAweDhCQUUsIDB4OEMzNCwgMHg2MkE0LCAweDhCRUEsIDB4OEE4OSwgMHg4QzJCLCAweDhCRkIsIDB4NTNEOCwgMHg4QTVGLCAweDk2RTAsIDB4OEMxNywgMHg4QkE5LCAweDhDMzAsIDB4OEMzNiwgMHg4RDVFLCAweDhDMjAsCisgICAgMHg4QzMzLCAweDVDODIsIDB4N0FENiwgMHg0RTMwLCAweDczMkEsIDB4OEM2RSwgMHg3MzJCLCAweDhEMUQsIDB4OEQxRSwgMHg4RDFGLCAweDhEMjIsIDB4OEQyMSwgMHg4RDJCLCAweDhEMjcsIDB4OEQyOSwgMHg4RDJBLAorICAgIDB4OEQyRiwgMHg4RDIzLCAweDhEMkUsIDB4OEQzMywgMHg4RDQwLCAweDhEMzAsIDB4OEQzNSwgMHg4RDJDLCAweDRFNzAsIDB4OEQzNywgMHg4RDM2LCAweDhEMzksIDB4OEQzNCwgMHg4RDNCLCAweDhEMzgsIDB4OEQzQSwKKyAgICAweDhEMzIsIDB4OEQ0MiwgMHg4RDQxLCAweDhEM0YsIDB4OEQ0NSwgMHg4RDQ0LCAweDhEM0UsIDB4OEQzQywgMHg4RDQ4LCAweDhENEEsIDB4NUJCRSwgMHg4RDQ3LCAweDhENTIsIDB4OEQ0OSwgMHg4RDUwLCAweDhENEYsCisgICAgMHg4RDU0LCAweDhENTMsIDB4OEQyNCwgMHg1MzU2LCAweDhEMzEsIDB4OEQ0QiwgMHg4RDU1LCAweDhEMjgsIDB4OEQyNiwgMHg4RDRDLCAweDhENTYsIDB4OEQ1NywgMHg4RDVBLCAweDhENTksIDB4OEQyRCwgMHg4RDVCLAorICAgIDB4OEQ1QywgMHg4RDNELCAweDhENTgsIDB4OEQ1RiwgMHg4RDYwLCAweDhENUUsIDB4OEQ2MSwgMHg4RDYyLCAweDhENDYsIDB4OEQ0MywgMHg4RDUxLCAweDhENEUsIDB4OEQ1RCwgMHg4RDYzLCAweDhENkEsIDB4OEQ3NiwKKyAgICAweDhENzUsIDB4OEQ4QiwgMHg4REIxLCAweDhGRjksIDB4OERGNSwgMHg4RTBBLCAweDhEQzQsIDB4OERGOCwgMHg4REQ2LCAweDhFNTIsIDB4OERGNywgMHg4REY2LCAweDhEQjgsIDB4OEUwQywgMHg4REZCLCAweDhEQzMsCisgICAgMHg4RTJGLCAweDhEREUsIDB4OEUyQywgMHg4RTcwLCAweDhERjksIDB4OEU1MSwgMHg4RTdGLCAweDhFOUMsIDB4OEU4RiwgMHg4RUFGLCAweDhGNjYsIDB4OEY2NywgMHg4RjY4LCAweDUxOUIsIDB4OEY2OSwgMHg4RjZCLAorICAgIDB4OEY2RCwgMHg4RjZGLCAweDhGNzgsIDB4OEY3MSwgMHg4Rjc0LCAweDhGNzUsIDB4OEY3QSwgMHg4RjcyLCAweDhGNzYsIDB4OEY3QywgMHg4RjgzLCAweDhGODIsIDB4OEY4MSwgMHg4RjgwLCAweDhGN0QsIDB4OEY3RSwKKyAgICAweDhGODQsIDB4OEY4NSwgMHg4RjdCLCAweDhGODYsIDB4OEY4RSwgMHg4Rjg5LCAweDhGOEIsIDB4OEY4RCwgMHg4RjhBLCAweDhGODcsIDB4OEY4OCwgMHg4RjZFLCAweDhGOTEsIDB4OEY4RiwgMHg4RjkzLCAweDhGOTAsCisgICAgMHg4Rjk3LCAweDgyMDYsIDB4OEY5MiwgMHg2QkMyLCAweDhGOTYsIDB4OEY5NSwgMHg4Rjk4LCAweDhGNkMsIDB4OEY5OSwgMHg4RjdGLCAweDhGOUEsIDB4OEY3MCwgMHg4Rjk0LCAweDhGNzksIDB4OEY3MywgMHg1MjlFLAorICAgIDB4OEY5RSwgMHg4RkFCLCAweDhGQTksIDB4NTE5QywgMHg4RkQ5LCAweDhGREUsIDB4NTQ2OCwgMHg4RkRCLCAweDZFMzgsIDB4OEZEMCwgMHg4RkM3LCAweDhGQkUsIDB4OEZERCwgMHg5MDY1LCAweDkwMEEsIDB4OTAxMiwKKyAgICAweDhGREMsIDB4OTAwMiwgMHg4RkRGLCAweDhGQzEsIDB4OTAwOSwgMHg5MDU3LCAweDhGQkQsIDB4OEZDOCwgMHg4RkQ4LCAweDhGRTksIDB4OEZCOSwgMHg5MDNCLCAweDkwMjYsIDB4OTBDRiwgMHg5MEFFLCAweDkwRDMsCisgICAgMHg0RTYxLCAweDkwQjksIDB4OTBBQywgMHg5MEU3LCAweDkwOTMsIDB4OTBEMSwgMHg5MEJCLCAweDkwRjgsIDB4OTBCQSwgMHg5MEQwLCAweDkwOUQsIDB4OTE0MiwgMHg5MEU2LCAweDgxNEMsIDB4NEUxMSwgMHg5MTVELAorICAgIDB4NTMzQiwgMHg5MTcxLCAweDkxNjYsIDB4OTE3RiwgMHg4ODQ1LCAweDkxN0UsIDB4OTE3RCwgMHg5MUNBLCAweDk0ODcsIDB4OTQ4QywgMHg5NDhBLCAweDk0ODksIDB4OTQ4QiwgMHg5NDg4LCAweDk0OTMsIDB4OTQ5MCwKKyAgICAweDk0OEYsIDB4OTQ5MiwgMHg5NDhFLCAweDk0OTcsIDB4OTQ4RCwgMHg5NDk1LCAweDk0QUYsIDB4OTRBQiwgMHg5NDk4LCAweDk0QUQsIDB4OTRBMCwgMHg5NDlELCAweDk0QTQsIDB4OTRBMywgMHg5NDlFLCAweDk0QUUsCisgICAgMHg5NEE3LCAweDk0OTksIDB4OTQ5QiwgMHg5NEFBLCAweDk0Q0MsIDB4OTRDOCwgMHg5NEI2LCAweDk0QzMsIDB4OTRCNCwgMHg5NEI5LCAweDk0Q0QsIDB4OTRCMCwgMHg5NEI4LCAweDk0QzAsIDB4OTRCRiwgMHg5NEJFLAorICAgIDB4OTQ5QywgMHg5NENBLCAweDk0QzksIDB4OTRDNywgMHg5NENCLCAweDk0QzIsIDB4OTRCMywgMHg5NEM2LCAweDk0QzUsIDB4OTRCQSwgMHg5NEE5LCAweDk0QjIsIDB4OTRCQywgMHg5NEJELCAweDk0Q0YsIDB4OTRGMCwKKyAgICAweDk0RDIsIDB4OTRFQywgMHg5NEVBLCAweDk0RjYsIDB4OTRGMywgMHg5NERDLCAweDk0REEsIDB4OTRFMywgMHg5NEU4LCAweDk0RTIsIDB4OTRFRCwgMHg5NEVCLCAweDk0RTYsIDB4ODg1NCwgMHg5NEQxLCAweDk0RjcsCisgICAgMHg5NEYxLCAweDk0REYsIDB4OTRGNSwgMHg5NEQ1LCAweDk0RUYsIDB4OTREMCwgMHg5NTEwLCAweDk1MDAsIDB4OTUwOCwgMHg5NTExLCAweDk1MDksIDB4OTRERCwgMHg5NTEyLCAweDk1MEMsIDB4OTRBMSwgMHg5NEU0LAorICAgIDB4OTRENywgMHg5NTBCLCAweDk1MEEsIDB4OTUxMywgMHg5NTA0LCAweDk1MDMsIDB4OTUxNCwgMHg5NTA3LCAweDk0RDMsIDB4OTRGQSwgMHg5NEQ2LCAweDk1MDYsIDB4OTUwMiwgMHg5NTJGLCAweDk0QTIsIDB4OTUxRSwKKyAgICAweDVGNTUsIDB4OTUxNiwgMHg5NTI5LCAweDk0RDQsIDB4OTUyNSwgMHg5NTE1LCAweDk1MUYsIDB4OTUyNCwgMHg5NTMxLCAweDk0RUUsIDB4OTUxQiwgMHg5NTJDLCAweDk1MkQsIDB4OTUxQywgMHg5NEIxLCAweDk1MjYsCisgICAgMHg5NTFBLCAweDk1MjAsIDB4OTUyMSwgMHg5NTIyLCAweDk1MTksIDB4OTUzMCwgMHg4ODY4LCAweDk0RkMsIDB4OTUyOCwgMHg5NDk0LCAweDk1MzQsIDB4OTRGRSwgMHg5NTA1LCAweDk1NDAsIDB4OTUzNywgMHg5NEUxLAorICAgIDB4OTQ5NiwgMHg5NTNCLCAweDk1M0QsIDB4OTUzOCwgMHg5NTMyLCAweDk1MzksIDB4OTUzRSwgMHg5NTJFLCAweDk1MzYsIDB4OTUxNywgMHg5NTNBLCAweDk1NDEsIDB4OTU1MSwgMHg5NTU1LCAweDk1MDEsIDB4OTU0OSwKKyAgICAweDk1NDgsIDB4OTU0MywgMHg5NEE4LCAweDg0RTUsIDB4OTU0RiwgMHg5NEUwLCAweDk0RTksIDB4OTUzQywgMHg5NTUwLCAweDk1NDcsIDB4OTU1MiwgMHg5NTRELCAweDk1NTMsIDB4OTU1RSwgMHg5NTVGLCAweDk0RkUsCisgICAgMHg5NTQ2LCAweDk1NTksIDB4OTU2MCwgMHg5NTVELCAweDk0RkYsIDB4OTUzNSwgMHg5NTU3LCAweDk1NTgsIDB4OTU1QiwgMHg5NEYyLCAweDk1NUMsIDB4OTU1NiwgMHg5NTQyLCAweDkzM0UsIDB4OTU1QSwgMHg5NEU3LAorICAgIDB4OTU2QSwgMHg5NTA4LCAweDk0RDksIDB4OTU2MywgMHg5NTY2LCAweDk1NjEsIDB4OTQ5RiwgMHg5NTZCLCAweDk1MEYsIDB4OTU0NCwgMHg5NTRDLCAweDk1NzAsIDB4OTU2RiwgMHg5NTZELCAweDk0QzEsIDB4OTU2RSwKKyAgICAweDk0Q0UsIDB4OTREQiwgMHg5NTcxLCAweDk0RjgsIDB4OTU2QywgMHg5NTU0LCAweDkyNzQsIDB4OTUyNywgMHg5NTc0LCAweDk0QzQsIDB4OTU3MywgMHg5NTY3LCAweDk0QTUsIDB4OTU3NSwgMHg5NTc2LCAweDk1NEEsCisgICAgMHg5NTY5LCAweDk1MjMsIDB4OTRCQiwgMHg5MkFFLCAweDUxRkYsIDB4OTU3RiwgMHg5NUU4LCAweDk1RTksIDB4OTVFQSwgMHg5NUVCLCAweDk1RUMsIDB4OTVFRCwgMHg1RjAwLCAweDk1RjYsIDB4OTVGMywgMHg5NUYwLAorICAgIDB4OTVGMiwgMHg5NUY0LCAweDk1RjUsIDB4OTVGOCwgMHg5NjAyLCAweDk2MDEsIDB4OTYwMCwgMHg5NUZBLCAweDk1RkQsIDB4OTYwMywgMHg5NjA2LCAweDk1RkUsIDB4OTYwNSwgMHg5NjBBLCAweDk2MDksIDB4OTYwRSwKKyAgICAweDk2MEYsIDB4OTYwRCwgMHg5NjA4LCAweDk2MEMsIDB4OTYxMiwgMHg2NzdGLCAweDY2OTcsIDB4OTVGMSwgMHg5NjE0LCAweDk2MTUsIDB4OTYxMSwgMHg5NjE3LCAweDk2MTgsIDB4OTVGRiwgMHg5NjE2LCAweDk2MTksCisgICAgMHg5NUVGLCAweDUxNzMsIDB4OTYxQSwgMHg5NjEzLCAweDk2MTAsIDB4OEY5RiwgMHg5NjFCLCAweDk1RkMsIDB4OTY0OSwgMHg5NjU1LCAweDk2MzUsIDB4OTYzNCwgMHg5NjQ4LCAweDk2NDYsIDB4OTYzMywgMHg5NjY3LAorICAgIDB4OTYxRiwgMHg5NjM2LCAweDk2NjgsIDB4OTY0NSwgMHg5NjhGLCAweDk2NjksIDB4OTY5MCwgMHg5NjQ3LCAweDk2QjYsIDB4NTNFQSwgMHg5NkJELCAweDg2N0QsIDB4NTNDQywgMHg5NkNGLCAweDY3NDIsIDB4OUUyMSwKKyAgICAweDc5QkIsIDB4OTZCRSwgMHg0RTkxLCAweDc1MzUsIDB4OTcyMSwgMHg5NkZFLCAweDk3MDEsIDB4OTZGMywgMHg5NzJELCAweDUzQzcsIDB4NzA3NSwgMHg1M0M2LCAweDk3NTMsIDB4OTc1OSwgMHg4MTdDLCAweDk3NjUsCisgICAgMHg5RjE3LCAweDVERTksIDB4OTc5RiwgMHg3RjMwLCAweDk3OTEsIDB4OTdBRiwgMHg5N0U2LCAweDk3RTcsIDB4OTdFOSwgMHg5N0VBLCAweDk3RUMsIDB4OTdFQiwgMHg5N0Y1LCAweDU0Q0QsIDB4OTg3NSwgMHg5ODc2LAorICAgIDB4OTg3NywgMHg5ODc5LCAweDk4N0EsIDB4OTg3OCwgMHg5ODdCLCAweDk4N0MsIDB4OTg4MiwgMHg5ODgwLCAweDk4ODMsIDB4OTg4NCwgMHg5ODdELCAweDk4ODEsIDB4OTg3RiwgMHg5ODg3LCAweDk4ODYsIDB4OTg4QywKKyAgICAweDk4ODksIDB4OTg5MCwgMHg5ODhGLCAweDU5MzQsIDB4OTg4QSwgMHg5ODhCLCAweDk4OTQsIDB4OTg4OCwgMHg5ODkzLCAweDk4OTEsIDB4OTg5NywgMHg5ODk4LCAweDk4OUQsIDB4OTg5QSwgMHg5ODlDLCAweDk4OTksCisgICAgMHg5ODlCLCAweDYxM0YsIDB4OThBMSwgMHg5OEEwLCAweDdDN0IsIDB4OTg5RiwgMHg5OEEyLCAweDk4N0UsIDB4OThBNCwgMHg5OEE1LCAweDY2M0UsIDB4OThBNiwgMHg5ODg1LCAweDk4OUUsIDB4OThBNywgMHg5OENFLAorICAgIDB4OThEMCwgMHg5OEQxLCAweDk4RDIsIDB4NTNGMCwgMHg5OEQzLCAweDk4RDQsIDB4OThDRiwgMHg5OEQ2LCAweDk4RDUsIDB4OThENywgMHg5OEQ4LCAweDk4RDksIDB4OThERSwgMHg5OTY1LCAweDk5NjQsIDB4OTk2NiwKKyAgICAweDk5NjgsIDB4OTk2QSwgMHg5OTZCLCAweDk5NkMsIDB4OTk2RCwgMHg5OTZFLCAweDk5NzQsIDB4OTk3MiwgMHg5OTcxLCAweDk5NzAsIDB4OTk3MywgMHg5OTdBLCAweDk5NzgsIDB4OTk3QywgMHg5OTc3LCAweDUxN0IsCisgICAgMHg5OTc1LCAweDk5NzksIDB4OTk3RCwgMHg5OTgxLCAweDk5N0YsIDB4OTk3RSwgMHg0RjU5LCAweDgwQjQsIDB4OTk4NCwgMHg5OTgzLCAweDk5NkYsIDB4OTk4NSwgMHg5OTg2LCAweDdDQzcsIDB4OTk2NywgMHg1NTgyLAorICAgIDB4OTk4OSwgMHg5OThFLCAweDk5NjksIDB4OTk4RiwgMHg5OThBLCAweDk5OEMsIDB4OTk4RCwgMHg5OTkyLCAweDk5OTAsIDB4OTk5MSwgMHg5OTg4LCAweDk5OTQsIDB4OTk3NiwgMHg5OEU4LCAweDk5MEQsIDB4OTk4QiwKKyAgICAweDlBNkMsIDB4OUE2RCwgMHg1MUFGLCAweDlBNkUsIDB4OUE3MCwgMHg5QTZGLCAweDlBNzMsIDB4OUE3QiwgMHg5QTdELCAweDlBNzksIDB4OUE3NSwgMHg5QTdFLCAweDlBODAsIDB4OUE3OCwgMHg5QTc2LCAweDlBN0MsCisgICAgMHg5QTc3LCAweDlBODgsIDB4OUE4NywgMHg5QTgzLCAweDlBODYsIDB4OUE4RSwgMHg5QThGLCAweDlBOEIsIDB4OUE4RCwgMHg5QTkzLCAweDlBOTIsIDB4OUE5MSwgMHg5QTkwLCAweDlBOUIsIDB4OUE5NywgMHg5QTk5LAorICAgIDB4OUE5RSwgMHg5QTk4LCAweDlBOUQsIDB4ODE3RSwgMHg5QTdBLCAweDlBOUEsIDB4OUE5RiwgMHg5QUExLCAweDg0RTYsIDB4OUE5QywgMHg5QTk2LCAweDlBQTAsIDB4OUFBMiwgMHg5QTcxLCAweDlBODUsIDB4OUE5NSwKKyAgICAweDlBODEsIDB4OUE4NCwgMHg5QThDLCAweDYwQ0EsIDB4OUE3RiwgMHg5QUE0LCAweDlBNzQsIDB4OUFBNywgMHg5QUE1LCAweDlBQTYsIDB4OUE4QSwgMHg4MEFFLCAweDlBQzUsIDB4ODEwRiwgMHg0RjUzLCAweDlBQ0MsCisgICAgMHg5QUNCLCAweDUzRDEsIDB4Njc3RSwgMHg4MEUxLCAweDlCMTMsIDB4NjU5NywgMHg5NUY5LCAweDk2MEIsIDB4OTYwNCwgMHg5MEMxLCAweDlCNDksIDB4OUI0NywgMHg5QzdDLCAweDlDODAsIDB4OUM4MSwgMHg5QzgyLAorICAgIDB4OUM3RiwgMHg5Qzg1LCAweDlDODYsIDB4OUM4RiwgMHg5Qzg3LCAweDlDOTAsIDB4OUM4RCwgMHg5QzhCLCAweDlDOEEsIDB4OUM5MiwgMHg5Qzk1LCAweDlDOTYsIDB4OUM5NCwgMHg5QzlCLCAweDlDOTEsIDB4OUM5QywKKyAgICAweDlDQTcsIDB4OUNBMCwgMHg5Q0E5LCAweDlDQTQsIDB4OUNBOCwgMHg5Q0JCLCAweDlDQUYsIDB4OUNBRCwgMHg5QzlFLCAweDlDQjcsIDB4OUNCNCwgMHg5Q0IxLCAweDlDQjUsIDB4OUNCMiwgMHg5Q0IzLCAweDlDQjgsCisgICAgMHg5Q0FFLCAweDlDQjAsIDB4OUNCNiwgMHg5Q0FCLCAweDlDQ0EsIDB4OUM5NywgMHg5Q0JELCAweDlDQzcsIDB4OUNDNSwgMHg5Q0M2LCAweDlDQzMsIDB4OUNEMiwgMHg5Q0QxLCAweDlDQTUsIDB4OUNDRiwgMHg5Q0NFLAorICAgIDB4OUNEMCwgMHg5Q0NELCAweDlDQzEsIDB4OUNBMiwgMHg5Q0NDLCAweDlDQTYsIDB4OUNBMywgMHg5Q0I5LCAweDlDRDcsIDB4OUNENCwgMHg5Q0M5LCAweDlDRDUsIDB4OUNENiwgMHg5Q0RGLCAweDlDREQsIDB4OUNEQywKKyAgICAweDlDREUsIDB4OUM5RiwgMHg5Q0JDLCAweDlDOEUsIDB4OUM5OSwgMHg5Q0UzLCAweDlDRTIsIDB4OUM5QSwgMHg5Q0M0LCAweDlDODgsIDB4OUNBMSwgMHg5RTFGLCAweDUxRUIsIDB4OUUyMCwgMHg5RTI0LCAweDUxRTQsCisgICAgMHg5RTIzLCAweDlFMjIsIDB4OUUyOSwgMHg5RTI4LCAweDlFMjYsIDB4OUUzMCwgMHg5RTM1LCAweDlFMzMsIDB4OUUzMiwgMHg5RTJFLCAweDlFMzEsIDB4OUUyQSwgMHg5RTJGLCAweDlFMkQsIDB4OUUzOCwgMHg5RTM5LAorICAgIDB4OUUzQiwgMHg5RTNGLCAweDlFM0QsIDB4OUUzQSwgMHg5RTQzLCAweDlFNDYsIDB4OUU0MSwgMHg5RTQ4LCAweDlFNDUsIDB4OUU0NCwgMHg5RTQ5LCAweDlFNEMsIDB4OUU0RiwgMHg5RTRFLCAweDlFNEEsIDB4OUU1MywKKyAgICAweDlFMkIsIDB4OUU1MSwgMHg5RTRCLCAweDlFNTksIDB4OUU1NSwgMHg5RTU3LCAweDlFNTYsIDB4OUU0RCwgMHg5RTVCLCAweDlFNUMsIDB4ODNCQSwgMHg5RTVGLCAweDlFNjQsIDB4OUU2MCwgMHg5RTYxLCAweDlFNTgsCisgICAgMHg5RTYzLCAweDlFNUEsIDB4OUU2MiwgMHg5RTVFLCAweDlFNjcsIDB4OUU2NSwgMHg5RTI1LCAweDlFMzcsIDB4OUU2OCwgMHg5RTM2LCAweDlFNkEsIDB4OUU1NCwgMHg5RTY5LCAweDlFNkIsIDB4OUU0NywgMHg5RTZDLAorICAgIDB4OUU3MCwgMHg5RTZELCAweDlFNkYsIDB4OUUyQywgMHg5RTc0LCAweDlFNjYsIDB4OUU3MywgMHg5RTQyLCAweDlFM0UsIDB4NTM2NCwgMHg5RTdFLCAweDc4NzcsIDB4NzZEMCwgMHg0RTNELCAweDlFQTYsIDB4OUVCOCwKKyAgICAweDlFQjksIDB4OTc2MiwgMHg0RTQ4LCAweDlFQzQsIDB4OUVDOSwgMHg3MEI5LCAweDUxNUEsIDB4OTcwOSwgMHg5RUUxLCAweDlFRTksIDB4OUVGRSwgMHg5RjBCLCAweDlGMEQsIDB4OUYzOSwgMHg5RjUwLCAweDY1OEIsCisgICAgMHg4RDRELCAweDlGNTEsIDB4OUY3RiwgMHg5RjgwLCAweDlGODEsIDB4OUY4NSwgMHg5Rjg3LCAweDlGODMsIDB4OUY4NiwgMHg5Rjg0LCAweDlGODgsIDB4OUY4QSwgMHg5Rjg5LCAweDlGOEIsIDB4OUY4QywgMHg5Rjk5LAorICAgIDB4NTM5MCwgMHg1RTlFLCAweDlGOUEsIDB4OUY5QiwgMHg5RjlGLCAweEE3NkYsIDB4OEM0OCwgMHg2NkY0LCAweDhFQ0EsIDB4OENDOCwgMHg2RUQxLCAweDRFMzIsIDB4NTNFNSwgMHg5RjlDLCAweDlGOUMsIDB4NTk1MSwKKyAgICAweDkxRDEsIDB4NTU4NywgMHg1OTQ4LCAweDYxRjYsIDB4NzY2OSwgMHg3Rjg1LCAweDg2M0YsIDB4ODdCQSwgMHg4OEY4LCAweDkwOEYsIDB4NkEwMiwgMHg2RDFCLCAweDcwRDksIDB4NzNERSwgMHg4NDNELCAweDkxNkEsCisgICAgMHg5OUYxLCAweDRFODIsIDB4NTM3NSwgMHg2QjA0LCAweDcyMUIsIDB4ODYyRCwgMHg5RTFFLCAweDVENTAsIDB4NkZFQiwgMHg4NUNELCAweDg5NjQsIDB4NjJDOSwgMHg4MUQ4LCAweDg4MUYsIDB4NUVDQSwgMHg2NzE3LAorICAgIDB4NkQ2QSwgMHg3MkZDLCAweDkwQ0UsIDB4NEY4NiwgMHg1MUI3LCAweDUyREUsIDB4NjRDNCwgMHg2QUQzLCAweDcyMTAsIDB4NzZFNywgMHg4MDAxLCAweDg2MDYsIDB4ODY1QywgMHg4REVGLCAweDk3MzIsIDB4OUI2RiwKKyAgICAweDlERkEsIDB4Nzg4QywgMHg3OTdGLCAweDdEQTAsIDB4ODNDOSwgMHg5MzA0LCAweDlFN0YsIDB4OEFENiwgMHg1OERGLCAweDVGMDQsIDB4N0M2MCwgMHg4MDdFLCAweDcyNjIsIDB4NzhDQSwgMHg4Q0MyLCAweDk2RjcsCisgICAgMHg1OEQ4LCAweDVDNjIsIDB4NkExMywgMHg2RERBLCAweDZGMEYsIDB4N0QyRiwgMHg3RTM3LCAweDk2NEIsIDB4NTJEMiwgMHg4MDhCLCAweDUxREMsIDB4NTFDQywgMHg3QTFDLCAweDdEQkUsIDB4ODNGMSwgMHg5Njc1LAorICAgIDB4OEI4MCwgMHg2MkNGLCAweDZBMDIsIDB4OEFGRSwgMHg0RTM5LCAweDVCRTcsIDB4NjAxMiwgMHg3Mzg3LCAweDc1NzAsIDB4NTMxNywgMHg3OEZCLCAweDRGQkYsIDB4NUZBOSwgMHg0RTBELCAweDZDQ0MsIDB4NjU3OCwKKyAgICAweDdEMjIsIDB4NTNDMywgMHg1ODVFLCAweDc3MDEsIDB4ODQ0OSwgMHg4QUFBLCAweDZCQkEsIDB4OEZCMCwgMHg2Qzg4LCAweDYyRkUsIDB4ODJFNSwgMHg2M0EwLCAweDc1NjUsIDB4NEVBRSwgMHg1MTY5LCAweDUxQzksCisgICAgMHg2ODgxLCAweDdDRTcsIDB4ODI2RiwgMHg4QUQyLCAweDkxQ0YsIDB4NTJGNSwgMHg1NDQyLCAweDU5NzMsIDB4NUVFQywgMHg2NUM1LCAweDZGRkUsIDB4NzkyQSwgMHg5NUFELCAweDlBNkEsIDB4OUU5NywgMHg5RUNFLAorICAgIDB4NTI5QiwgMHg2NkM2LCAweDZCNzcsIDB4OEY2MiwgMHg1RTc0LCAweDYxOTAsIDB4NjIwMCwgMHg2NDlBLCAweDZGMjMsIDB4NzE0OSwgMHg3NDg5LCAweDc5Q0EsIDB4N0RGNCwgMHg4MDZGLCAweDhGMjYsIDB4ODRFRSwKKyAgICAweDkwMjMsIDB4OTM0QSwgMHg1MjE3LCAweDUyQTMsIDB4NTRCRCwgMHg3MEM4LCAweDg4QzIsIDB4OEFBQSwgMHg1RUM5LCAweDVGRjUsIDB4NjM3QiwgMHg2QkFFLCAweDdDM0UsIDB4NzM3NSwgMHg0RUU0LCAweDU2RjksCisgICAgMHg1QkU3LCAweDVEQkEsIDB4NjAxQywgMHg3M0IyLCAweDc0NjksIDB4N0Y5QSwgMHg4MDQ2LCAweDkyMzQsIDB4OTZGNiwgMHg5NzQ4LCAweDk4MTgsIDB4NEY4QiwgMHg3OUFFLCAweDkxQjQsIDB4OTZCOCwgMHg2MEUxLAorICAgIDB4NEU4NiwgMHg1MERBLCAweDVCRUUsIDB4NUMzRiwgMHg2NTk5LCAweDZBMDIsIDB4NzFDRSwgMHg3NjQyLCAweDg0RkMsIDB4OTA3QywgMHg5RjhELCAweDY2ODgsIDB4OTYyRSwgMHg1Mjg5LCAweDY3N0IsIDB4NjdGMywKKyAgICAweDZENDEsIDB4NkU5QywgMHg3NDA5LCAweDc1NTksIDB4Nzg2QiwgMHg3RDEwLCAweDk4NUUsIDB4NTE2RCwgMHg2MjJFLCAweDk2NzgsIDB4NTAyQiwgMHg1RDE5LCAweDZERUEsIDB4OEYyQSwgMHg1RjhCLCAweDYxNDQsCisgICAgMHg2ODE3LCAweDczODcsIDB4OTY4NiwgMHg1MjI5LCAweDU0MEYsIDB4NUM2NSwgMHg2NjEzLCAweDY3NEUsIDB4NjhBOCwgMHg2Q0U1LCAweDc0MDYsIDB4NzVFMiwgMHg3Rjc5LCAweDg4Q0YsIDB4ODhFMSwgMHg5MUNDLAorICAgIDB4OTZFMiwgMHg1MzNGLCAweDZFQkEsIDB4NTQxRCwgMHg3MUQwLCAweDc0OTgsIDB4ODVGQSwgMHg5NkEzLCAweDlDNTcsIDB4OUU5RiwgMHg2Nzk3LCAweDZEQ0IsIDB4ODFFOCwgMHg3QUNCLCAweDdCMjAsIDB4N0M5MiwKKyAgICAweDcyQzAsIDB4NzA5OSwgMHg4QjU4LCAweDRFQzAsIDB4ODMzNiwgMHg1MjNBLCAweDUyMDcsIDB4NUVBNiwgMHg2MkQzLCAweDdDRDYsIDB4NUI4NSwgMHg2RDFFLCAweDY2QjQsIDB4OEYzQiwgMHg4ODRDLCAweDk2NEQsCisgICAgMHg4OThCLCAweDVFRDMsIDB4NTE0MCwgMHg1NUMwLCAweDU4NUEsIDB4NjY3NCwgMHg1MURFLCAweDczMkEsIDB4NzZDQSwgMHg3OTNDLCAweDc5NUUsIDB4Nzk2NSwgMHg3OThGLCAweDk3NTYsIDB4N0NCRSwgMHg3RkJELAorICAgIDB4ODYxMiwgMHg4QUY4LCAweDkwMzgsIDB4OTBGRCwgMHg5OEVGLCAweDk4RkMsIDB4OTkyOCwgMHg5REI0LCAweDRGQUUsIDB4NTBFNywgMHg1MTRELCAweDUyQzksIDB4NTJFNCwgMHg1MzUxLCAweDU1OUQsIDB4NTYwNiwKKyAgICAweDU2NjgsIDB4NTg0MCwgMHg1OEE4LCAweDVDNjQsIDB4NUM2RSwgMHg2MDk0LCAweDYxNjgsIDB4NjE4RSwgMHg2MUYyLCAweDY1NEYsIDB4NjVFMiwgMHg2NjkxLCAweDY4ODUsIDB4NkQ3NywgMHg2RTFBLCAweDZGMjIsCisgICAgMHg3MTZFLCAweDcyMkIsIDB4NzQyMiwgMHg3ODkxLCAweDc5M0UsIDB4Nzk0OSwgMHg3OTQ4LCAweDc5NTAsIDB4Nzk1NiwgMHg3OTVELCAweDc5OEQsIDB4Nzk4RSwgMHg3QTQwLCAweDdBODEsIDB4N0JDMCwgMHg3REY0LAorICAgIDB4N0UwOSwgMHg3RTQxLCAweDdGNzIsIDB4ODAwNSwgMHg4MUVELCAweDgyNzksIDB4ODI3OSwgMHg4NDU3LCAweDg5MTAsIDB4ODk5NiwgMHg4QjAxLCAweDhCMzksIDB4OENEMywgMHg4RDA4LCAweDhGQjYsIDB4OTAzOCwKKyAgICAweDk2RTMsIDB4OTdGRiwgMHg5ODNCLCAweDYwNzUsIDB4ODIxOCwgMHg0RTI2LCAweDUxQjUsIDB4NTE2OCwgMHg0RjgwLCAweDUxNDUsIDB4NTE4MCwgMHg1MkM3LCAweDUyRkEsIDB4NTU5RCwgMHg1NTU1LCAweDU1OTksCisgICAgMHg1NUUyLCAweDU4NUEsIDB4NThCMywgMHg1OTQ0LCAweDU5NTQsIDB4NUE2MiwgMHg1QjI4LCAweDVFRDIsIDB4NUVEOSwgMHg1RjY5LCAweDVGQUQsIDB4NjBEOCwgMHg2MTRFLCAweDYxMDgsIDB4NjE4RSwgMHg2MTYwLAorICAgIDB4NjFGMiwgMHg2MjM0LCAweDYzQzQsIDB4NjQxQywgMHg2NDUyLCAweDY1NTYsIDB4NjY3NCwgMHg2NzE3LCAweDY3MUIsIDB4Njc1NiwgMHg2Qjc5LCAweDZCQkEsIDB4NkQ0MSwgMHg2RURCLCAweDZFQ0IsIDB4NkYyMiwKKyAgICAweDcwMUUsIDB4NzE2RSwgMHg3N0E3LCAweDcyMzUsIDB4NzJBRiwgMHg3MzJBLCAweDc0NzEsIDB4NzUwNiwgMHg3NTNCLCAweDc2MUQsIDB4NzYxRiwgMHg3NkNBLCAweDc2REIsIDB4NzZGNCwgMHg3NzRBLCAweDc3NDAsCisgICAgMHg3OENDLCAweDdBQjEsIDB4N0JDMCwgMHg3QzdCLCAweDdENUIsIDB4N0RGNCwgMHg3RjNFLCAweDgwMDUsIDB4ODM1MiwgMHg4M0VGLCAweDg3NzksIDB4ODk0MSwgMHg4OTg2LCAweDg5OTYsIDB4OEFCRiwgMHg4QUY4LAorICAgIDB4OEFDQiwgMHg4QjAxLCAweDhBRkUsIDB4OEFFRCwgMHg4QjM5LCAweDhCOEEsIDB4OEQwOCwgMHg4RjM4LCAweDkwNzIsIDB4OTE5OSwgMHg5Mjc2LCAweDk2N0MsIDB4OTZFMywgMHg5NzU2LCAweDk3REIsIDB4OTdGRiwKKyAgICAweDk4MEIsIDB4OTgzQiwgMHg5QjEyLCAweDlGOUMsIDB4M0I5RCwgMHg0MDE4LCAweDQwMzksIDB4OUY0MywgMHg5RjhFLCAweDA1RTIsIDB4MDVEMCwgMHgwNUQzLCAweDA1RDQsIDB4MDVEQiwgMHgwNURDLCAweDA1REQsCisgICAgMHgwNUU4LCAweDA1RUEsIDB4MDAyQiwgMHgwNjcxLCAweDA2NzEsIDB4MDY3QiwgMHgwNjdCLCAweDA2N0IsIDB4MDY3QiwgMHgwNjdFLCAweDA2N0UsIDB4MDY3RSwgMHgwNjdFLCAweDA2ODAsIDB4MDY4MCwgMHgwNjgwLAorICAgIDB4MDY4MCwgMHgwNjdBLCAweDA2N0EsIDB4MDY3QSwgMHgwNjdBLCAweDA2N0YsIDB4MDY3RiwgMHgwNjdGLCAweDA2N0YsIDB4MDY3OSwgMHgwNjc5LCAweDA2NzksIDB4MDY3OSwgMHgwNkE0LCAweDA2QTQsIDB4MDZBNCwKKyAgICAweDA2QTQsIDB4MDZBNiwgMHgwNkE2LCAweDA2QTYsIDB4MDZBNiwgMHgwNjg0LCAweDA2ODQsIDB4MDY4NCwgMHgwNjg0LCAweDA2ODMsIDB4MDY4MywgMHgwNjgzLCAweDA2ODMsIDB4MDY4NiwgMHgwNjg2LCAweDA2ODYsCisgICAgMHgwNjg2LCAweDA2ODcsIDB4MDY4NywgMHgwNjg3LCAweDA2ODcsIDB4MDY4RCwgMHgwNjhELCAweDA2OEMsIDB4MDY4QywgMHgwNjhFLCAweDA2OEUsIDB4MDY4OCwgMHgwNjg4LCAweDA2OTgsIDB4MDY5OCwgMHgwNjkxLAorICAgIDB4MDY5MSwgMHgwNkE5LCAweDA2QTksIDB4MDZBOSwgMHgwNkE5LCAweDA2QUYsIDB4MDZBRiwgMHgwNkFGLCAweDA2QUYsIDB4MDZCMywgMHgwNkIzLCAweDA2QjMsIDB4MDZCMywgMHgwNkIxLCAweDA2QjEsIDB4MDZCMSwKKyAgICAweDA2QjEsIDB4MDZCQSwgMHgwNkJBLCAweDA2QkIsIDB4MDZCQiwgMHgwNkJCLCAweDA2QkIsIDB4MDZDMCwgMHgwNkMwLCAweDA2QzEsIDB4MDZDMSwgMHgwNkMxLCAweDA2QzEsIDB4MDZCRSwgMHgwNkJFLCAweDA2QkUsCisgICAgMHgwNkJFLCAweDA2RDIsIDB4MDZEMiwgMHgwNkQzLCAweDA2RDMsIDB4MDZBRCwgMHgwNkFELCAweDA2QUQsIDB4MDZBRCwgMHgwNkM3LCAweDA2QzcsIDB4MDZDNiwgMHgwNkM2LCAweDA2QzgsIDB4MDZDOCwgMHgwNjc3LAorICAgIDB4MDZDQiwgMHgwNkNCLCAweDA2QzUsIDB4MDZDNSwgMHgwNkM5LCAweDA2QzksIDB4MDZEMCwgMHgwNkQwLCAweDA2RDAsIDB4MDZEMCwgMHgwNjQ5LCAweDA2NDksIDB4MDZDQywgMHgwNkNDLCAweDA2Q0MsIDB4MDZDQywKKyAgICAweDAwMkMsIDB4MzAwMSwgMHgzMDAyLCAweDAwM0EsIDB4MDAzQiwgMHgwMDIxLCAweDAwM0YsIDB4MzAxNiwgMHgzMDE3LCAweDIwMjYsIDB4MjAyNSwgMHgyMDE0LCAweDIwMTMsIDB4MDA1RiwgMHgwMDVGLCAweDAwMjgsCisgICAgMHgwMDI5LCAweDAwN0IsIDB4MDA3RCwgMHgzMDE0LCAweDMwMTUsIDB4MzAxMCwgMHgzMDExLCAweDMwMEEsIDB4MzAwQiwgMHgzMDA4LCAweDMwMDksIDB4MzAwQywgMHgzMDBELCAweDMwMEUsIDB4MzAwRiwgMHgwMDVCLAorICAgIDB4MDA1RCwgMHgyMDNFLCAweDIwM0UsIDB4MjAzRSwgMHgyMDNFLCAweDAwNUYsIDB4MDA1RiwgMHgwMDVGLCAweDAwMkMsIDB4MzAwMSwgMHgwMDJFLCAweDAwM0IsIDB4MDAzQSwgMHgwMDNGLCAweDAwMjEsIDB4MjAxNCwKKyAgICAweDAwMjgsIDB4MDAyOSwgMHgwMDdCLCAweDAwN0QsIDB4MzAxNCwgMHgzMDE1LCAweDAwMjMsIDB4MDAyNiwgMHgwMDJBLCAweDAwMkIsIDB4MDAyRCwgMHgwMDNDLCAweDAwM0UsIDB4MDAzRCwgMHgwMDVDLCAweDAwMjQsCisgICAgMHgwMDI1LCAweDAwNDAsIDB4MDY0QiwgMHgwNjRDLCAweDA2NEQsIDB4MDY0RSwgMHgwNjRGLCAweDA2NTAsIDB4MDY1MSwgMHgwNjUyLCAweDA2MjEsIDB4MDYyMiwgMHgwNjIyLCAweDA2MjMsIDB4MDYyMywgMHgwNjI0LAorICAgIDB4MDYyNCwgMHgwNjI1LCAweDA2MjUsIDB4MDYyNiwgMHgwNjI2LCAweDA2MjYsIDB4MDYyNiwgMHgwNjI3LCAweDA2MjcsIDB4MDYyOCwgMHgwNjI4LCAweDA2MjgsIDB4MDYyOCwgMHgwNjI5LCAweDA2MjksIDB4MDYyQSwKKyAgICAweDA2MkEsIDB4MDYyQSwgMHgwNjJBLCAweDA2MkIsIDB4MDYyQiwgMHgwNjJCLCAweDA2MkIsIDB4MDYyQywgMHgwNjJDLCAweDA2MkMsIDB4MDYyQywgMHgwNjJELCAweDA2MkQsIDB4MDYyRCwgMHgwNjJELCAweDA2MkUsCisgICAgMHgwNjJFLCAweDA2MkUsIDB4MDYyRSwgMHgwNjJGLCAweDA2MkYsIDB4MDYzMCwgMHgwNjMwLCAweDA2MzEsIDB4MDYzMSwgMHgwNjMyLCAweDA2MzIsIDB4MDYzMywgMHgwNjMzLCAweDA2MzMsIDB4MDYzMywgMHgwNjM0LAorICAgIDB4MDYzNCwgMHgwNjM0LCAweDA2MzQsIDB4MDYzNSwgMHgwNjM1LCAweDA2MzUsIDB4MDYzNSwgMHgwNjM2LCAweDA2MzYsIDB4MDYzNiwgMHgwNjM2LCAweDA2MzcsIDB4MDYzNywgMHgwNjM3LCAweDA2MzcsIDB4MDYzOCwKKyAgICAweDA2MzgsIDB4MDYzOCwgMHgwNjM4LCAweDA2MzksIDB4MDYzOSwgMHgwNjM5LCAweDA2MzksIDB4MDYzQSwgMHgwNjNBLCAweDA2M0EsIDB4MDYzQSwgMHgwNjQxLCAweDA2NDEsIDB4MDY0MSwgMHgwNjQxLCAweDA2NDIsCisgICAgMHgwNjQyLCAweDA2NDIsIDB4MDY0MiwgMHgwNjQzLCAweDA2NDMsIDB4MDY0MywgMHgwNjQzLCAweDA2NDQsIDB4MDY0NCwgMHgwNjQ0LCAweDA2NDQsIDB4MDY0NSwgMHgwNjQ1LCAweDA2NDUsIDB4MDY0NSwgMHgwNjQ2LAorICAgIDB4MDY0NiwgMHgwNjQ2LCAweDA2NDYsIDB4MDY0NywgMHgwNjQ3LCAweDA2NDcsIDB4MDY0NywgMHgwNjQ4LCAweDA2NDgsIDB4MDY0OSwgMHgwNjQ5LCAweDA2NEEsIDB4MDY0QSwgMHgwNjRBLCAweDA2NEEsIDB4MDAyMSwKKyAgICAweDAwMjIsIDB4MDAyMywgMHgwMDI0LCAweDAwMjUsIDB4MDAyNiwgMHgwMDI3LCAweDAwMjgsIDB4MDAyOSwgMHgwMDJBLCAweDAwMkIsIDB4MDAyQywgMHgwMDJELCAweDAwMkUsIDB4MDAyRiwgMHgwMDMwLCAweDAwMzEsCisgICAgMHgwMDMyLCAweDAwMzMsIDB4MDAzNCwgMHgwMDM1LCAweDAwMzYsIDB4MDAzNywgMHgwMDM4LCAweDAwMzksIDB4MDAzQSwgMHgwMDNCLCAweDAwM0MsIDB4MDAzRCwgMHgwMDNFLCAweDAwM0YsIDB4MDA0MCwgMHgwMDQxLAorICAgIDB4MDA0MiwgMHgwMDQzLCAweDAwNDQsIDB4MDA0NSwgMHgwMDQ2LCAweDAwNDcsIDB4MDA0OCwgMHgwMDQ5LCAweDAwNEEsIDB4MDA0QiwgMHgwMDRDLCAweDAwNEQsIDB4MDA0RSwgMHgwMDRGLCAweDAwNTAsIDB4MDA1MSwKKyAgICAweDAwNTIsIDB4MDA1MywgMHgwMDU0LCAweDAwNTUsIDB4MDA1NiwgMHgwMDU3LCAweDAwNTgsIDB4MDA1OSwgMHgwMDVBLCAweDAwNUIsIDB4MDA1QywgMHgwMDVELCAweDAwNUUsIDB4MDA1RiwgMHgwMDYwLCAweDAwNjEsCisgICAgMHgwMDYyLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY1LCAweDAwNjYsIDB4MDA2NywgMHgwMDY4LCAweDAwNjksIDB4MDA2QSwgMHgwMDZCLCAweDAwNkMsIDB4MDA2RCwgMHgwMDZFLCAweDAwNkYsIDB4MDA3MCwgMHgwMDcxLAorICAgIDB4MDA3MiwgMHgwMDczLCAweDAwNzQsIDB4MDA3NSwgMHgwMDc2LCAweDAwNzcsIDB4MDA3OCwgMHgwMDc5LCAweDAwN0EsIDB4MDA3QiwgMHgwMDdDLCAweDAwN0QsIDB4MDA3RSwgMHgyOTg1LCAweDI5ODYsIDB4MzAwMiwKKyAgICAweDMwMEMsIDB4MzAwRCwgMHgzMDAxLCAweDMwRkIsIDB4MzBGMiwgMHgzMEExLCAweDMwQTMsIDB4MzBBNSwgMHgzMEE3LCAweDMwQTksIDB4MzBFMywgMHgzMEU1LCAweDMwRTcsIDB4MzBDMywgMHgzMEZDLCAweDMwQTIsCisgICAgMHgzMEE0LCAweDMwQTYsIDB4MzBBOCwgMHgzMEFBLCAweDMwQUIsIDB4MzBBRCwgMHgzMEFGLCAweDMwQjEsIDB4MzBCMywgMHgzMEI1LCAweDMwQjcsIDB4MzBCOSwgMHgzMEJCLCAweDMwQkQsIDB4MzBCRiwgMHgzMEMxLAorICAgIDB4MzBDNCwgMHgzMEM2LCAweDMwQzgsIDB4MzBDQSwgMHgzMENCLCAweDMwQ0MsIDB4MzBDRCwgMHgzMENFLCAweDMwQ0YsIDB4MzBEMiwgMHgzMEQ1LCAweDMwRDgsIDB4MzBEQiwgMHgzMERFLCAweDMwREYsIDB4MzBFMCwKKyAgICAweDMwRTEsIDB4MzBFMiwgMHgzMEU0LCAweDMwRTYsIDB4MzBFOCwgMHgzMEU5LCAweDMwRUEsIDB4MzBFQiwgMHgzMEVDLCAweDMwRUQsIDB4MzBFRiwgMHgzMEYzLCAweDMwOTksIDB4MzA5QSwgMHgzMTY0LCAweDMxMzEsCisgICAgMHgzMTMyLCAweDMxMzMsIDB4MzEzNCwgMHgzMTM1LCAweDMxMzYsIDB4MzEzNywgMHgzMTM4LCAweDMxMzksIDB4MzEzQSwgMHgzMTNCLCAweDMxM0MsIDB4MzEzRCwgMHgzMTNFLCAweDMxM0YsIDB4MzE0MCwgMHgzMTQxLAorICAgIDB4MzE0MiwgMHgzMTQzLCAweDMxNDQsIDB4MzE0NSwgMHgzMTQ2LCAweDMxNDcsIDB4MzE0OCwgMHgzMTQ5LCAweDMxNEEsIDB4MzE0QiwgMHgzMTRDLCAweDMxNEQsIDB4MzE0RSwgMHgzMTRGLCAweDMxNTAsIDB4MzE1MSwKKyAgICAweDMxNTIsIDB4MzE1MywgMHgzMTU0LCAweDMxNTUsIDB4MzE1NiwgMHgzMTU3LCAweDMxNTgsIDB4MzE1OSwgMHgzMTVBLCAweDMxNUIsIDB4MzE1QywgMHgzMTVELCAweDMxNUUsIDB4MzE1RiwgMHgzMTYwLCAweDMxNjEsCisgICAgMHgzMTYyLCAweDMxNjMsIDB4MDBBMiwgMHgwMEEzLCAweDAwQUMsIDB4MDBBRiwgMHgwMEE2LCAweDAwQTUsIDB4MjBBOSwgMHgyNTAyLCAweDIxOTAsIDB4MjE5MSwgMHgyMTkyLCAweDIxOTMsIDB4MjVBMCwgMHgyNUNCCit9OworZXh0ZXJuIGNvbnN0IEZYX1dDSEFSIGdfVW5pY29kZURhdGFfTm9ybWFsaXphdGlvbl9NYXAyWzE3MjRdID0geworICAgIDB4MDA0RiwgMHgwMDQ1LCAweDAwNTQsIDB4MDA0RCwgMHgwMDZGLCAweDAwNjUsIDB4MDA0OSwgMHgwMDRBLCAweDAwNjksIDB4MDA2QSwgMHgwMDRGLCAweDAwNDUsIDB4MDA2RiwgMHgwMDY1LCAweDAwNDQsIDB4MDE3RCwKKyAgICAweDAwNDQsIDB4MDE3RSwgMHgwMDY0LCAweDAxN0UsIDB4MDA0QywgMHgwMDRBLCAweDAwNEMsIDB4MDA2QSwgMHgwMDZDLCAweDAwNkEsIDB4MDA0RSwgMHgwMDRBLCAweDAwNEUsIDB4MDA2QSwgMHgwMDZFLCAweDAwNkEsCisgICAgMHgwMDQ0LCAweDAwNUEsIDB4MDA0NCwgMHgwMDdBLCAweDAwNjQsIDB4MDA3QSwgMHgwMDY0LCAweDAwNjIsIDB4MDA3MSwgMHgwMDcwLCAweDAwNEYsIDB4MDA0NSwgMHgwMDY0LCAweDAwN0EsIDB4MDA2NCwgMHgwMjkyLAorICAgIDB4MDA2NCwgMHgwMDdBLCAweDAwNzQsIDB4MDA3MywgMHgwMDc0LCAweDAyODMsIDB4MDA3NCwgMHgwMDYzLCAweDAwNjYsIDB4MDE0QiwgMHgwMDZDLCAweDAwNzMsIDB4MDA2QywgMHgwMDdBLCAweDA0MUQsIDB4MDQxMywKKyAgICAweDA0M0QsIDB4MDQzMywgMHgwNDIyLCAweDA0MjYsIDB4MDQ0MiwgMHgwNDQ2LCAweDA0MTAsIDB4MDQxNSwgMHgwNDMwLCAweDA0MzUsIDB4MDU2NSwgMHgwNTgyLCAweDA2MjcsIDB4MDY3NCwgMHgwNjQ4LCAweDA2NzQsCisgICAgMHgwNkM3LCAweDA2NzQsIDB4MDY0QSwgMHgwNjc0LCAweDA2RDUsIDB4MDY1NCwgMHgwNkMxLCAweDA2NTQsIDB4MDZEMiwgMHgwNjU0LCAweDA5MjgsIDB4MDkzQywgMHgwOTMwLCAweDA5M0MsIDB4MDkzMywgMHgwOTNDLAorICAgIDB4MDkxNSwgMHgwOTNDLCAweDA5MTYsIDB4MDkzQywgMHgwOTE3LCAweDA5M0MsIDB4MDkxQywgMHgwOTNDLCAweDA5MjEsIDB4MDkzQywgMHgwOTIyLCAweDA5M0MsIDB4MDkyQiwgMHgwOTNDLCAweDA5MkYsIDB4MDkzQywKKyAgICAweDA5QzcsIDB4MDlCRSwgMHgwOUM3LCAweDA5RDcsIDB4MDlBMSwgMHgwOUJDLCAweDA5QTIsIDB4MDlCQywgMHgwOUFGLCAweDA5QkMsIDB4MEEzMiwgMHgwQTNDLCAweDBBMzgsIDB4MEEzQywgMHgwQTE2LCAweDBBM0MsCisgICAgMHgwQTE3LCAweDBBM0MsIDB4MEExQywgMHgwQTNDLCAweDBBMkIsIDB4MEEzQywgMHgwQjQ3LCAweDBCNTYsIDB4MEI0NywgMHgwQjNFLCAweDBCNDcsIDB4MEI1NywgMHgwQjIxLCAweDBCM0MsIDB4MEIyMiwgMHgwQjNDLAorICAgIDB4MEI5MiwgMHgwQkQ3LCAweDBCQzYsIDB4MEJCRSwgMHgwQkM3LCAweDBCQkUsIDB4MEJDNiwgMHgwQkQ3LCAweDBDNDYsIDB4MEM1NiwgMHgwQ0JGLCAweDBDRDUsIDB4MENDNiwgMHgwQ0Q1LCAweDBDQzYsIDB4MENENiwKKyAgICAweDBDQzYsIDB4MENDMiwgMHgwQ0NBLCAweDBDRDUsIDB4MEQ0NiwgMHgwRDNFLCAweDBENDcsIDB4MEQzRSwgMHgwRDQ2LCAweDBENTcsIDB4MEREOSwgMHgwRENBLCAweDBERDksIDB4MERDRiwgMHgwRERDLCAweDBEQ0EsCisgICAgMHgwREQ5LCAweDBEREYsIDB4MEU0RCwgMHgwRTMyLCAweDBFQ0QsIDB4MEVCMiwgMHgwRUFCLCAweDBFOTksIDB4MEVBQiwgMHgwRUExLCAweDBGNDIsIDB4MEZCNywgMHgwRjRDLCAweDBGQjcsIDB4MEY1MSwgMHgwRkI3LAorICAgIDB4MEY1NiwgMHgwRkI3LCAweDBGNUIsIDB4MEZCNywgMHgwRjQwLCAweDBGQjUsIDB4MEY3MSwgMHgwRjcyLCAweDBGNzEsIDB4MEY3NCwgMHgwRkIyLCAweDBGODAsIDB4MEZCMiwgMHgwRjgxLCAweDBGQjMsIDB4MEY4MCwKKyAgICAweDBGQjMsIDB4MEY4MSwgMHgwRjcxLCAweDBGODAsIDB4MEY5MiwgMHgwRkI3LCAweDBGOUMsIDB4MEZCNywgMHgwRkExLCAweDBGQjcsIDB4MEZBNiwgMHgwRkI3LCAweDBGQUIsIDB4MEZCNywgMHgwRjkwLCAweDBGQjUsCisgICAgMHgxMDI1LCAweDEwMkUsIDB4MUIwNSwgMHgxQjM1LCAweDFCMDcsIDB4MUIzNSwgMHgxQjA5LCAweDFCMzUsIDB4MUIwQiwgMHgxQjM1LCAweDFCMEQsIDB4MUIzNSwgMHgxQjExLCAweDFCMzUsIDB4MUIzQSwgMHgxQjM1LAorICAgIDB4MUIzQywgMHgxQjM1LCAweDFCM0UsIDB4MUIzNSwgMHgxQjNGLCAweDFCMzUsIDB4MUI0MiwgMHgxQjM1LCAweDAwNzQsIDB4MDA2OCwgMHgwMDJFLCAweDAwMkUsIDB4MjAzMiwgMHgyMDMyLCAweDIwMzUsIDB4MjAzNSwKKyAgICAweDAwMjEsIDB4MDAyMSwgMHgwMDIwLCAweDAzMDUsIDB4MDAzRiwgMHgwMDNGLCAweDAwM0YsIDB4MDAyMSwgMHgwMDIxLCAweDAwM0YsIDB4MDA1MiwgMHgwMDczLCAweDAwQjAsIDB4MDA0MywgMHgwMEIwLCAweDAwNDYsCisgICAgMHgwMDRFLCAweDAwNkYsIDB4MDA1MywgMHgwMDRELCAweDAwNTQsIDB4MDA0RCwgMHgwMDMxLCAweDAwMkYsIDB4MDA0OSwgMHgwMDQ5LCAweDAwNDksIDB4MDA1NiwgMHgwMDU2LCAweDAwNDksIDB4MDA0OSwgMHgwMDU4LAorICAgIDB4MDA1OCwgMHgwMDQ5LCAweDAwNjksIDB4MDA2OSwgMHgwMDY5LCAweDAwNzYsIDB4MDA3NiwgMHgwMDY5LCAweDAwNjksIDB4MDA3OCwgMHgwMDc4LCAweDAwNjksIDB4MjE5MCwgMHgwMzM4LCAweDIxOTIsIDB4MDMzOCwKKyAgICAweDIxOTQsIDB4MDMzOCwgMHgyMUQwLCAweDAzMzgsIDB4MjFENCwgMHgwMzM4LCAweDIxRDIsIDB4MDMzOCwgMHgyMjIzLCAweDAzMzgsIDB4MjIyNSwgMHgwMzM4LCAweDIyMkIsIDB4MjIyQiwgMHgyMjJFLCAweDIyMkUsCisgICAgMHgyMjNDLCAweDAzMzgsIDB4MjI0MywgMHgwMzM4LCAweDIyNDUsIDB4MDMzOCwgMHgyMjQ4LCAweDAzMzgsIDB4MDAzRCwgMHgwMDJGLCAweDIyNjEsIDB4MDAyRiwgMHgyMjRELCAweDAwMkYsIDB4MDAzQywgMHgwMDJGLAorICAgIDB4MDAzRSwgMHgwMDJGLCAweDIyNjQsIDB4MDAyRiwgMHgyMjY1LCAweDAwMkYsIDB4MjI3MiwgMHgwMDJGLCAweDIyNzMsIDB4MDAyRiwgMHgyMjc2LCAweDAwMkYsIDB4MjI3NywgMHgwMDJGLCAweDIyN0EsIDB4MDAyRiwKKyAgICAweDIyN0IsIDB4MDAyRiwgMHgyMjgyLCAweDAwMkYsIDB4MjI4MywgMHgwMDJGLCAweDIyODYsIDB4MDAyRiwgMHgyMjg3LCAweDAwMkYsIDB4MjJBMiwgMHgwMDJGLCAweDIyQTgsIDB4MDAyRiwgMHgyMkE5LCAweDAwMkYsCisgICAgMHgyMkFCLCAweDAwMkYsIDB4MjI3QywgMHgwMDJGLCAweDIyN0QsIDB4MDAyRiwgMHgyMjkxLCAweDAwMkYsIDB4MjI5MiwgMHgwMDJGLCAweDIyQjIsIDB4MDAyRiwgMHgyMkIzLCAweDAwMkYsIDB4MjJCNCwgMHgwMDJGLAorICAgIDB4MjJCNSwgMHgwMDJGLCAweDAwNDIsIDB4MDA1MywgMHgwMDQ4LCAweDAwNTQsIDB4MDA0QywgMHgwMDQ2LCAweDAwNTYsIDB4MDA1NCwgMHgwMDQ2LCAweDAwNDYsIDB4MDA0MywgMHgwMDUyLCAweDAwNTMsIDB4MDA1MywKKyAgICAweDAwNTMsIDB4MDA0OSwgMHgwMDQ1LCAweDAwNEQsIDB4MDA0NiwgMHgwMDUzLCAweDAwNDcsIDB4MDA1MywgMHgwMDUyLCAweDAwNTMsIDB4MDA1NSwgMHgwMDUzLCAweDAwNTMsIDB4MDA1MCwgMHgwMDMxLCAweDAwMzAsCisgICAgMHgwMDMxLCAweDAwMzEsIDB4MDAzMSwgMHgwMDMyLCAweDAwMzEsIDB4MDAzMywgMHgwMDMxLCAweDAwMzQsIDB4MDAzMSwgMHgwMDM1LCAweDAwMzEsIDB4MDAzNiwgMHgwMDMxLCAweDAwMzcsIDB4MDAzMSwgMHgwMDM4LAorICAgIDB4MDAzMSwgMHgwMDM5LCAweDAwMzIsIDB4MDAzMCwgMHgwMDMxLCAweDAwMkUsIDB4MDAzMiwgMHgwMDJFLCAweDAwMzMsIDB4MDAyRSwgMHgwMDM0LCAweDAwMkUsIDB4MDAzNSwgMHgwMDJFLCAweDAwMzYsIDB4MDAyRSwKKyAgICAweDAwMzcsIDB4MDAyRSwgMHgwMDM4LCAweDAwMkUsIDB4MDAzOSwgMHgwMDJFLCAweDAwMzEsIDB4MDAzMSwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMSwgMHgwMDMzLCAweDAwMzEsIDB4MDAzNCwgMHgwMDMxLCAweDAwMzUsCisgICAgMHgwMDMxLCAweDAwMzYsIDB4MDAzMSwgMHgwMDM3LCAweDAwMzEsIDB4MDAzOCwgMHgwMDMxLCAweDAwMzksIDB4MDAzMiwgMHgwMDMwLCAweDAwMzEsIDB4MDAzMCwgMHgwMDMxLCAweDAwMzAsIDB4MDAzMSwgMHgwMDMwLAorICAgIDB4MDAzMSwgMHgwMDMwLCAweDAwM0QsIDB4MDAzRCwgMHgyQURELCAweDAwMkYsIDB4MzA0QiwgMHgzMDk5LCAweDMwNEQsIDB4MzA5OSwgMHgzMDRGLCAweDMwOTksIDB4MzA1MSwgMHgzMDk5LCAweDMwNTMsIDB4MzA5OSwKKyAgICAweDMwNTUsIDB4MzA5OSwgMHgzMDU3LCAweDMwOTksIDB4MzA1OSwgMHgzMDk5LCAweDMwNUIsIDB4MzA5OSwgMHgzMDVELCAweDMwOTksIDB4MzA1RiwgMHgzMDk5LCAweDMwNjEsIDB4MzA5OSwgMHgzMDY0LCAweDMwOTksCisgICAgMHgzMDY2LCAweDMwOTksIDB4MzA2OCwgMHgzMDk5LCAweDMwNkYsIDB4MzA5OSwgMHgzMDZGLCAweDMwOUEsIDB4MzA3MiwgMHgzMDk5LCAweDMwNzIsIDB4MzA5QSwgMHgzMDc1LCAweDMwOTksIDB4MzA3NSwgMHgzMDlBLAorICAgIDB4MzA3OCwgMHgzMDk5LCAweDMwNzgsIDB4MzA5QSwgMHgzMDdCLCAweDMwOTksIDB4MzA3QiwgMHgzMDlBLCAweDMwNDYsIDB4MzA5OSwgMHgwMDIwLCAweDMwOTksIDB4MDAyMCwgMHgzMDlBLCAweDMwOUQsIDB4MzA5OSwKKyAgICAweDMwODgsIDB4MzA4QSwgMHgzMEFCLCAweDMwOTksIDB4MzBBRCwgMHgzMDk5LCAweDMwQUYsIDB4MzA5OSwgMHgzMEIxLCAweDMwOTksIDB4MzBCMywgMHgzMDk5LCAweDMwQjUsIDB4MzA5OSwgMHgzMEI3LCAweDMwOTksCisgICAgMHgzMEI5LCAweDMwOTksIDB4MzBCQiwgMHgzMDk5LCAweDMwQkQsIDB4MzA5OSwgMHgzMEJGLCAweDMwOTksIDB4MzBDMSwgMHgzMDk5LCAweDMwQzQsIDB4MzA5OSwgMHgzMEM2LCAweDMwOTksIDB4MzBDOCwgMHgzMDk5LAorICAgIDB4MzBDRiwgMHgzMDk5LCAweDMwQ0YsIDB4MzA5QSwgMHgzMEQyLCAweDMwOTksIDB4MzBEMiwgMHgzMDlBLCAweDMwRDUsIDB4MzA5OSwgMHgzMEQ1LCAweDMwOUEsIDB4MzBEOCwgMHgzMDk5LCAweDMwRDgsIDB4MzA5QSwKKyAgICAweDMwREIsIDB4MzA5OSwgMHgzMERCLCAweDMwOUEsIDB4MzBBNiwgMHgzMDk5LCAweDMwRUYsIDB4MzA5OSwgMHgzMEYwLCAweDMwOTksIDB4MzBGMSwgMHgzMDk5LCAweDMwRjIsIDB4MzA5OSwgMHgzMEZELCAweDMwOTksCisgICAgMHgzMEIzLCAweDMwQzgsIDB4MDAzMiwgMHgwMDMxLCAweDAwMzIsIDB4MDAzMiwgMHgwMDMyLCAweDAwMzMsIDB4MDAzMiwgMHgwMDM0LCAweDAwMzIsIDB4MDAzNSwgMHgwMDMyLCAweDAwMzYsIDB4MDAzMiwgMHgwMDM3LAorICAgIDB4MDAzMiwgMHgwMDM4LCAweDAwMzIsIDB4MDAzOSwgMHgwMDMzLCAweDAwMzAsIDB4MDAzMywgMHgwMDMxLCAweDAwMzMsIDB4MDAzMiwgMHgwMDMzLCAweDAwMzMsIDB4MDAzMywgMHgwMDM0LCAweDAwMzMsIDB4MDAzNSwKKyAgICAweDExMDAsIDB4MTE2MSwgMHgxMTAyLCAweDExNjEsIDB4MTEwMywgMHgxMTYxLCAweDExMDUsIDB4MTE2MSwgMHgxMTA2LCAweDExNjEsIDB4MTEwNywgMHgxMTYxLCAweDExMDksIDB4MTE2MSwgMHgxMTBCLCAweDExNjEsCisgICAgMHgxMTBDLCAweDExNjEsIDB4MTEwRSwgMHgxMTYxLCAweDExMEYsIDB4MTE2MSwgMHgxMTEwLCAweDExNjEsIDB4MTExMSwgMHgxMTYxLCAweDExMTIsIDB4MTE2MSwgMHgxMTBCLCAweDExNkUsIDB4MDAzMywgMHgwMDM2LAorICAgIDB4MDAzMywgMHgwMDM3LCAweDAwMzMsIDB4MDAzOCwgMHgwMDMzLCAweDAwMzksIDB4MDAzNCwgMHgwMDMwLCAweDAwMzQsIDB4MDAzMSwgMHgwMDM0LCAweDAwMzIsIDB4MDAzNCwgMHgwMDMzLCAweDAwMzQsIDB4MDAzNCwKKyAgICAweDAwMzQsIDB4MDAzNSwgMHgwMDM0LCAweDAwMzYsIDB4MDAzNCwgMHgwMDM3LCAweDAwMzQsIDB4MDAzOCwgMHgwMDM0LCAweDAwMzksIDB4MDAzNSwgMHgwMDMwLCAweDAwMzEsIDB4NjcwOCwgMHgwMDMyLCAweDY3MDgsCisgICAgMHgwMDMzLCAweDY3MDgsIDB4MDAzNCwgMHg2NzA4LCAweDAwMzUsIDB4NjcwOCwgMHgwMDM2LCAweDY3MDgsIDB4MDAzNywgMHg2NzA4LCAweDAwMzgsIDB4NjcwOCwgMHgwMDM5LCAweDY3MDgsIDB4MDA0OCwgMHgwMDY3LAorICAgIDB4MDA2NSwgMHgwMDU2LCAweDMwQUUsIDB4MzBBQywgMHgzMEFELCAweDMwRUQsIDB4MzBDNywgMHgzMEI3LCAweDMwQzksIDB4MzBFQiwgMHgzMEM4LCAweDMwRjMsIDB4MzBDQSwgMHgzMENFLCAweDMwRDQsIDB4MzBCMywKKyAgICAweDMwRDMsIDB4MzBFQiwgMHgzMERBLCAweDMwQkQsIDB4MzBEQiwgMHgzMEYzLCAweDMwREYsIDB4MzBFQSwgMHgzMEUxLCAweDMwQUMsIDB4MzBFQSwgMHgzMEU5LCAweDMwRUMsIDB4MzBFMCwgMHgwMDMwLCAweDcwQjksCisgICAgMHgwMDMxLCAweDcwQjksIDB4MDAzMiwgMHg3MEI5LCAweDAwMzMsIDB4NzBCOSwgMHgwMDM0LCAweDcwQjksIDB4MDAzNSwgMHg3MEI5LCAweDAwMzYsIDB4NzBCOSwgMHgwMDM3LCAweDcwQjksIDB4MDAzOCwgMHg3MEI5LAorICAgIDB4MDAzOSwgMHg3MEI5LCAweDAwNjQsIDB4MDA2MSwgMHgwMDQxLCAweDAwNTUsIDB4MDA2RiwgMHgwMDU2LCAweDAwNzAsIDB4MDA2MywgMHgwMDY0LCAweDAwNkQsIDB4MDA0OSwgMHgwMDU1LCAweDVFNzMsIDB4NjIxMCwKKyAgICAweDY2MkQsIDB4NTQ4QywgMHg1OTI3LCAweDZCNjMsIDB4NjYwRSwgMHg2Q0JCLCAweDAwNzAsIDB4MDA0MSwgMHgwMDZFLCAweDAwNDEsIDB4MDNCQywgMHgwMDQxLCAweDAwNkQsIDB4MDA0MSwgMHgwMDZCLCAweDAwNDEsCisgICAgMHgwMDRCLCAweDAwNDIsIDB4MDA0RCwgMHgwMDQyLCAweDAwNDcsIDB4MDA0MiwgMHgwMDcwLCAweDAwNDYsIDB4MDA2RSwgMHgwMDQ2LCAweDAzQkMsIDB4MDA0NiwgMHgwM0JDLCAweDAwNjcsIDB4MDA2RCwgMHgwMDY3LAorICAgIDB4MDA2QiwgMHgwMDY3LCAweDAwNDgsIDB4MDA3QSwgMHgwM0JDLCAweDIxMTMsIDB4MDA2RCwgMHgyMTEzLCAweDAwNjQsIDB4MjExMywgMHgwMDZCLCAweDIxMTMsIDB4MDA2NiwgMHgwMDZELCAweDAwNkUsIDB4MDA2RCwKKyAgICAweDAzQkMsIDB4MDA2RCwgMHgwMDZELCAweDAwNkQsIDB4MDA2MywgMHgwMDZELCAweDAwNkIsIDB4MDA2RCwgMHgwMDZELCAweDAwQjIsIDB4MDA2RCwgMHgwMEIzLCAweDAwNTAsIDB4MDA2MSwgMHgwMDcwLCAweDAwNzMsCisgICAgMHgwMDZFLCAweDAwNzMsIDB4MDNCQywgMHgwMDczLCAweDAwNkQsIDB4MDA3MywgMHgwMDcwLCAweDAwNTYsIDB4MDA2RSwgMHgwMDU2LCAweDAzQkMsIDB4MDA1NiwgMHgwMDZELCAweDAwNTYsIDB4MDA2QiwgMHgwMDU2LAorICAgIDB4MDA0RCwgMHgwMDU2LCAweDAwNzAsIDB4MDA1NywgMHgwMDZFLCAweDAwNTcsIDB4MDNCQywgMHgwMDU3LCAweDAwNkQsIDB4MDA1NywgMHgwMDZCLCAweDAwNTcsIDB4MDA0RCwgMHgwMDU3LCAweDAwNkIsIDB4MDNBOSwKKyAgICAweDAwNEQsIDB4MDNBOSwgMHgwMDQyLCAweDAwNzEsIDB4MDA2MywgMHgwMDYzLCAweDAwNjMsIDB4MDA2NCwgMHgwMDY0LCAweDAwNDIsIDB4MDA0NywgMHgwMDc5LCAweDAwNjgsIDB4MDA2MSwgMHgwMDQ4LCAweDAwNTAsCisgICAgMHgwMDY5LCAweDAwNkUsIDB4MDA0QiwgMHgwMDRCLCAweDAwNEIsIDB4MDA0RCwgMHgwMDZCLCAweDAwNzQsIDB4MDA2QywgMHgwMDZELCAweDAwNkMsIDB4MDA2RSwgMHgwMDZDLCAweDAwNzgsIDB4MDA2RCwgMHgwMDYyLAorICAgIDB4MDA1MCwgMHgwMDQ4LCAweDAwNTAsIDB4MDA1MiwgMHgwMDczLCAweDAwNzIsIDB4MDA1MywgMHgwMDc2LCAweDAwNTcsIDB4MDA2MiwgMHgwMDMxLCAweDY1RTUsIDB4MDAzMiwgMHg2NUU1LCAweDAwMzMsIDB4NjVFNSwKKyAgICAweDAwMzQsIDB4NjVFNSwgMHgwMDM1LCAweDY1RTUsIDB4MDAzNiwgMHg2NUU1LCAweDAwMzcsIDB4NjVFNSwgMHgwMDM4LCAweDY1RTUsIDB4MDAzOSwgMHg2NUU1LCAweDAwNjYsIDB4MDA2NiwgMHgwMDY2LCAweDAwNjksCisgICAgMHgwMDY2LCAweDAwNkMsIDB4MDE3RiwgMHgwMDc0LCAweDAwNzMsIDB4MDA3NCwgMHgwNTc0LCAweDA1NzYsIDB4MDU3NCwgMHgwNTY1LCAweDA1NzQsIDB4MDU2QiwgMHgwNTdFLCAweDA1NzYsIDB4MDU3NCwgMHgwNTZELAorICAgIDB4MDVEOSwgMHgwNUI0LCAweDA1RjIsIDB4MDVCNywgMHgwNUU5LCAweDA1QzEsIDB4MDVFOSwgMHgwNUMyLCAweEZCNDksIDB4MDVDMSwgMHhGQjQ5LCAweDA1QzIsIDB4MDVEMCwgMHgwNUI3LCAweDA1RDAsIDB4MDVCOCwKKyAgICAweDA1RDAsIDB4MDVCQywgMHgwNUQxLCAweDA1QkMsIDB4MDVEMiwgMHgwNUJDLCAweDA1RDMsIDB4MDVCQywgMHgwNUQ0LCAweDA1QkMsIDB4MDVENSwgMHgwNUJDLCAweDA1RDYsIDB4MDVCQywgMHgwNUQ4LCAweDA1QkMsCisgICAgMHgwNUQ5LCAweDA1QkMsIDB4MDVEQSwgMHgwNUJDLCAweDA1REIsIDB4MDVCQywgMHgwNURDLCAweDA1QkMsIDB4MDVERSwgMHgwNUJDLCAweDA1RTAsIDB4MDVCQywgMHgwNUUxLCAweDA1QkMsIDB4MDVFMywgMHgwNUJDLAorICAgIDB4MDVFNCwgMHgwNUJDLCAweDA1RTYsIDB4MDVCQywgMHgwNUU3LCAweDA1QkMsIDB4MDVFOCwgMHgwNUJDLCAweDA1RTksIDB4MDVCQywgMHgwNUVBLCAweDA1QkMsIDB4MDVENSwgMHgwNUI5LCAweDA1RDEsIDB4MDVCRiwKKyAgICAweDA1REIsIDB4MDVCRiwgMHgwNUU0LCAweDA1QkYsIDB4MDVEMCwgMHgwNURDLCAweDA2MjYsIDB4MDYyNywgMHgwNjI2LCAweDA2MjcsIDB4MDYyNiwgMHgwNkQ1LCAweDA2MjYsIDB4MDZENSwgMHgwNjI2LCAweDA2NDgsCisgICAgMHgwNjI2LCAweDA2NDgsIDB4MDYyNiwgMHgwNkM3LCAweDA2MjYsIDB4MDZDNywgMHgwNjI2LCAweDA2QzYsIDB4MDYyNiwgMHgwNkM2LCAweDA2MjYsIDB4MDZDOCwgMHgwNjI2LCAweDA2QzgsIDB4MDYyNiwgMHgwNkQwLAorICAgIDB4MDYyNiwgMHgwNkQwLCAweDA2MjYsIDB4MDZEMCwgMHgwNjI2LCAweDA2NDksIDB4MDYyNiwgMHgwNjQ5LCAweDA2MjYsIDB4MDY0OSwgMHgwNjI2LCAweDA2MkMsIDB4MDYyNiwgMHgwNjJELCAweDA2MjYsIDB4MDY0NSwKKyAgICAweDA2MjYsIDB4MDY0OSwgMHgwNjI2LCAweDA2NEEsIDB4MDYyOCwgMHgwNjJDLCAweDA2MjgsIDB4MDYyRCwgMHgwNjI4LCAweDA2MkUsIDB4MDYyOCwgMHgwNjQ1LCAweDA2MjgsIDB4MDY0OSwgMHgwNjI4LCAweDA2NEEsCisgICAgMHgwNjJBLCAweDA2MkMsIDB4MDYyQSwgMHgwNjJELCAweDA2MkEsIDB4MDYyRSwgMHgwNjJBLCAweDA2NDUsIDB4MDYyQSwgMHgwNjQ5LCAweDA2MkEsIDB4MDY0QSwgMHgwNjJCLCAweDA2MkMsIDB4MDYyQiwgMHgwNjQ1LAorICAgIDB4MDYyQiwgMHgwNjQ5LCAweDA2MkIsIDB4MDY0QSwgMHgwNjJDLCAweDA2MkQsIDB4MDYyQywgMHgwNjQ1LCAweDA2MkQsIDB4MDYyQywgMHgwNjJELCAweDA2NDUsIDB4MDYyRSwgMHgwNjJDLCAweDA2MkUsIDB4MDYyRCwKKyAgICAweDA2MkUsIDB4MDY0NSwgMHgwNjMzLCAweDA2MkMsIDB4MDYzMywgMHgwNjJELCAweDA2MzMsIDB4MDYyRSwgMHgwNjMzLCAweDA2NDUsIDB4MDYzNSwgMHgwNjJELCAweDA2MzUsIDB4MDY0NSwgMHgwNjM2LCAweDA2MkMsCisgICAgMHgwNjM2LCAweDA2MkQsIDB4MDYzNiwgMHgwNjJFLCAweDA2MzYsIDB4MDY0NSwgMHgwNjM3LCAweDA2MkQsIDB4MDYzNywgMHgwNjQ1LCAweDA2MzgsIDB4MDY0NSwgMHgwNjM5LCAweDA2MkMsIDB4MDYzOSwgMHgwNjQ1LAorICAgIDB4MDYzQSwgMHgwNjJDLCAweDA2M0EsIDB4MDY0NSwgMHgwNjQxLCAweDA2MkMsIDB4MDY0MSwgMHgwNjJELCAweDA2NDEsIDB4MDYyRSwgMHgwNjQxLCAweDA2NDUsIDB4MDY0MSwgMHgwNjQ5LCAweDA2NDEsIDB4MDY0QSwKKyAgICAweDA2NDIsIDB4MDYyRCwgMHgwNjQyLCAweDA2NDUsIDB4MDY0MiwgMHgwNjQ5LCAweDA2NDIsIDB4MDY0QSwgMHgwNjQzLCAweDA2MjcsIDB4MDY0MywgMHgwNjJDLCAweDA2NDMsIDB4MDYyRCwgMHgwNjQzLCAweDA2MkUsCisgICAgMHgwNjQzLCAweDA2NDQsIDB4MDY0MywgMHgwNjQ1LCAweDA2NDMsIDB4MDY0OSwgMHgwNjQzLCAweDA2NEEsIDB4MDY0NCwgMHgwNjJDLCAweDA2NDQsIDB4MDYyRCwgMHgwNjQ0LCAweDA2MkUsIDB4MDY0NCwgMHgwNjQ1LAorICAgIDB4MDY0NCwgMHgwNjQ5LCAweDA2NDQsIDB4MDY0QSwgMHgwNjQ1LCAweDA2MkMsIDB4MDY0NSwgMHgwNjJELCAweDA2NDUsIDB4MDYyRSwgMHgwNjQ1LCAweDA2NDUsIDB4MDY0NSwgMHgwNjQ5LCAweDA2NDUsIDB4MDY0QSwKKyAgICAweDA2NDYsIDB4MDYyQywgMHgwNjQ2LCAweDA2MkQsIDB4MDY0NiwgMHgwNjJFLCAweDA2NDYsIDB4MDY0NSwgMHgwNjQ2LCAweDA2NDksIDB4MDY0NiwgMHgwNjRBLCAweDA2NDcsIDB4MDYyQywgMHgwNjQ3LCAweDA2NDUsCisgICAgMHgwNjQ3LCAweDA2NDksIDB4MDY0NywgMHgwNjRBLCAweDA2NEEsIDB4MDYyQywgMHgwNjRBLCAweDA2MkQsIDB4MDY0QSwgMHgwNjJFLCAweDA2NEEsIDB4MDY0NSwgMHgwNjRBLCAweDA2NDksIDB4MDY0QSwgMHgwNjRBLAorICAgIDB4MDYzMCwgMHgwNjcwLCAweDA2MzEsIDB4MDY3MCwgMHgwNjQ5LCAweDA2NzAsIDB4MDY0QywgMHgwNjUxLCAweDA2NEQsIDB4MDY1MSwgMHgwNjRFLCAweDA2NTEsIDB4MDY0RiwgMHgwNjUxLCAweDA2NTAsIDB4MDY1MSwKKyAgICAweDA2NTEsIDB4MDY3MCwgMHgwNjI2LCAweDA2MzEsIDB4MDYyNiwgMHgwNjMyLCAweDA2MjYsIDB4MDY0NSwgMHgwNjI2LCAweDA2NDYsIDB4MDYyNiwgMHgwNjQ5LCAweDA2MjYsIDB4MDY0QSwgMHgwNjI4LCAweDA2MzEsCisgICAgMHgwNjI4LCAweDA2MzIsIDB4MDYyOCwgMHgwNjQ1LCAweDA2MjgsIDB4MDY0NiwgMHgwNjI4LCAweDA2NDksIDB4MDYyOCwgMHgwNjRBLCAweDA2MkEsIDB4MDYzMSwgMHgwNjJBLCAweDA2MzIsIDB4MDYyQSwgMHgwNjQ1LAorICAgIDB4MDYyQSwgMHgwNjQ2LCAweDA2MkEsIDB4MDY0OSwgMHgwNjJBLCAweDA2NEEsIDB4MDYyQiwgMHgwNjMxLCAweDA2MkIsIDB4MDYzMiwgMHgwNjJCLCAweDA2NDUsIDB4MDYyQiwgMHgwNjQ2LCAweDA2MkIsIDB4MDY0OSwKKyAgICAweDA2MkIsIDB4MDY0QSwgMHgwNjQxLCAweDA2NDksIDB4MDY0MSwgMHgwNjRBLCAweDA2NDIsIDB4MDY0OSwgMHgwNjQyLCAweDA2NEEsIDB4MDY0MywgMHgwNjI3LCAweDA2NDMsIDB4MDY0NCwgMHgwNjQzLCAweDA2NDUsCisgICAgMHgwNjQzLCAweDA2NDksIDB4MDY0MywgMHgwNjRBLCAweDA2NDQsIDB4MDY0NSwgMHgwNjQ0LCAweDA2NDksIDB4MDY0NCwgMHgwNjRBLCAweDA2NDUsIDB4MDYyNywgMHgwNjQ1LCAweDA2NDUsIDB4MDY0NiwgMHgwNjMxLAorICAgIDB4MDY0NiwgMHgwNjMyLCAweDA2NDYsIDB4MDY0NSwgMHgwNjQ2LCAweDA2NDYsIDB4MDY0NiwgMHgwNjQ5LCAweDA2NDYsIDB4MDY0QSwgMHgwNjQ5LCAweDA2NzAsIDB4MDY0QSwgMHgwNjMxLCAweDA2NEEsIDB4MDYzMiwKKyAgICAweDA2NEEsIDB4MDY0NSwgMHgwNjRBLCAweDA2NDYsIDB4MDY0QSwgMHgwNjQ5LCAweDA2NEEsIDB4MDY0QSwgMHgwNjI2LCAweDA2MkMsIDB4MDYyNiwgMHgwNjJELCAweDA2MjYsIDB4MDYyRSwgMHgwNjI2LCAweDA2NDUsCisgICAgMHgwNjI2LCAweDA2NDcsIDB4MDYyOCwgMHgwNjJDLCAweDA2MjgsIDB4MDYyRCwgMHgwNjI4LCAweDA2MkUsIDB4MDYyOCwgMHgwNjQ1LCAweDA2MjgsIDB4MDY0NywgMHgwNjJBLCAweDA2MkMsIDB4MDYyQSwgMHgwNjJELAorICAgIDB4MDYyQSwgMHgwNjJFLCAweDA2MkEsIDB4MDY0NSwgMHgwNjJBLCAweDA2NDcsIDB4MDYyQiwgMHgwNjQ1LCAweDA2MkMsIDB4MDYyRCwgMHgwNjJDLCAweDA2NDUsIDB4MDYyRCwgMHgwNjJDLCAweDA2MkQsIDB4MDY0NSwKKyAgICAweDA2MkUsIDB4MDYyQywgMHgwNjJFLCAweDA2NDUsIDB4MDYzMywgMHgwNjJDLCAweDA2MzMsIDB4MDYyRCwgMHgwNjMzLCAweDA2MkUsIDB4MDYzMywgMHgwNjQ1LCAweDA2MzUsIDB4MDYyRCwgMHgwNjM1LCAweDA2MkUsCisgICAgMHgwNjM1LCAweDA2NDUsIDB4MDYzNiwgMHgwNjJDLCAweDA2MzYsIDB4MDYyRCwgMHgwNjM2LCAweDA2MkUsIDB4MDYzNiwgMHgwNjQ1LCAweDA2MzcsIDB4MDYyRCwgMHgwNjM4LCAweDA2NDUsIDB4MDYzOSwgMHgwNjJDLAorICAgIDB4MDYzOSwgMHgwNjQ1LCAweDA2M0EsIDB4MDYyQywgMHgwNjNBLCAweDA2NDUsIDB4MDY0MSwgMHgwNjJDLCAweDA2NDEsIDB4MDYyRCwgMHgwNjQxLCAweDA2MkUsIDB4MDY0MSwgMHgwNjQ1LCAweDA2NDIsIDB4MDYyRCwKKyAgICAweDA2NDIsIDB4MDY0NSwgMHgwNjQzLCAweDA2MkMsIDB4MDY0MywgMHgwNjJELCAweDA2NDMsIDB4MDYyRSwgMHgwNjQzLCAweDA2NDQsIDB4MDY0MywgMHgwNjQ1LCAweDA2NDQsIDB4MDYyQywgMHgwNjQ0LCAweDA2MkQsCisgICAgMHgwNjQ0LCAweDA2MkUsIDB4MDY0NCwgMHgwNjQ1LCAweDA2NDQsIDB4MDY0NywgMHgwNjQ1LCAweDA2MkMsIDB4MDY0NSwgMHgwNjJELCAweDA2NDUsIDB4MDYyRSwgMHgwNjQ1LCAweDA2NDUsIDB4MDY0NiwgMHgwNjJDLAorICAgIDB4MDY0NiwgMHgwNjJELCAweDA2NDYsIDB4MDYyRSwgMHgwNjQ2LCAweDA2NDUsIDB4MDY0NiwgMHgwNjQ3LCAweDA2NDcsIDB4MDYyQywgMHgwNjQ3LCAweDA2NDUsIDB4MDY0NywgMHgwNjcwLCAweDA2NEEsIDB4MDYyQywKKyAgICAweDA2NEEsIDB4MDYyRCwgMHgwNjRBLCAweDA2MkUsIDB4MDY0QSwgMHgwNjQ1LCAweDA2NEEsIDB4MDY0NywgMHgwNjI2LCAweDA2NDUsIDB4MDYyNiwgMHgwNjQ3LCAweDA2MjgsIDB4MDY0NSwgMHgwNjI4LCAweDA2NDcsCisgICAgMHgwNjJBLCAweDA2NDUsIDB4MDYyQSwgMHgwNjQ3LCAweDA2MkIsIDB4MDY0NSwgMHgwNjJCLCAweDA2NDcsIDB4MDYzMywgMHgwNjQ1LCAweDA2MzMsIDB4MDY0NywgMHgwNjM0LCAweDA2NDUsIDB4MDYzNCwgMHgwNjQ3LAorICAgIDB4MDY0MywgMHgwNjQ0LCAweDA2NDMsIDB4MDY0NSwgMHgwNjQ0LCAweDA2NDUsIDB4MDY0NiwgMHgwNjQ1LCAweDA2NDYsIDB4MDY0NywgMHgwNjRBLCAweDA2NDUsIDB4MDY0QSwgMHgwNjQ3LCAweDA2MzcsIDB4MDY0OSwKKyAgICAweDA2MzcsIDB4MDY0QSwgMHgwNjM5LCAweDA2NDksIDB4MDYzOSwgMHgwNjRBLCAweDA2M0EsIDB4MDY0OSwgMHgwNjNBLCAweDA2NEEsIDB4MDYzMywgMHgwNjQ5LCAweDA2MzMsIDB4MDY0QSwgMHgwNjM0LCAweDA2NDksCisgICAgMHgwNjM0LCAweDA2NEEsIDB4MDYyRCwgMHgwNjQ5LCAweDA2MkQsIDB4MDY0QSwgMHgwNjJDLCAweDA2NDksIDB4MDYyQywgMHgwNjRBLCAweDA2MkUsIDB4MDY0OSwgMHgwNjJFLCAweDA2NEEsIDB4MDYzNSwgMHgwNjQ5LAorICAgIDB4MDYzNSwgMHgwNjRBLCAweDA2MzYsIDB4MDY0OSwgMHgwNjM2LCAweDA2NEEsIDB4MDYzNCwgMHgwNjJDLCAweDA2MzQsIDB4MDYyRCwgMHgwNjM0LCAweDA2MkUsIDB4MDYzNCwgMHgwNjQ1LCAweDA2MzQsIDB4MDYzMSwKKyAgICAweDA2MzMsIDB4MDYzMSwgMHgwNjM1LCAweDA2MzEsIDB4MDYzNiwgMHgwNjMxLCAweDA2MzcsIDB4MDY0OSwgMHgwNjM3LCAweDA2NEEsIDB4MDYzOSwgMHgwNjQ5LCAweDA2MzksIDB4MDY0QSwgMHgwNjNBLCAweDA2NDksCisgICAgMHgwNjNBLCAweDA2NEEsIDB4MDYzMywgMHgwNjQ5LCAweDA2MzMsIDB4MDY0QSwgMHgwNjM0LCAweDA2NDksIDB4MDYzNCwgMHgwNjRBLCAweDA2MkQsIDB4MDY0OSwgMHgwNjJELCAweDA2NEEsIDB4MDYyQywgMHgwNjQ5LAorICAgIDB4MDYyQywgMHgwNjRBLCAweDA2MkUsIDB4MDY0OSwgMHgwNjJFLCAweDA2NEEsIDB4MDYzNSwgMHgwNjQ5LCAweDA2MzUsIDB4MDY0QSwgMHgwNjM2LCAweDA2NDksIDB4MDYzNiwgMHgwNjRBLCAweDA2MzQsIDB4MDYyQywKKyAgICAweDA2MzQsIDB4MDYyRCwgMHgwNjM0LCAweDA2MkUsIDB4MDYzNCwgMHgwNjQ1LCAweDA2MzQsIDB4MDYzMSwgMHgwNjMzLCAweDA2MzEsIDB4MDYzNSwgMHgwNjMxLCAweDA2MzYsIDB4MDYzMSwgMHgwNjM0LCAweDA2MkMsCisgICAgMHgwNjM0LCAweDA2MkQsIDB4MDYzNCwgMHgwNjJFLCAweDA2MzQsIDB4MDY0NSwgMHgwNjMzLCAweDA2NDcsIDB4MDYzNCwgMHgwNjQ3LCAweDA2MzcsIDB4MDY0NSwgMHgwNjMzLCAweDA2MkMsIDB4MDYzMywgMHgwNjJELAorICAgIDB4MDYzMywgMHgwNjJFLCAweDA2MzQsIDB4MDYyQywgMHgwNjM0LCAweDA2MkQsIDB4MDYzNCwgMHgwNjJFLCAweDA2MzcsIDB4MDY0NSwgMHgwNjM4LCAweDA2NDUsIDB4MDYyNywgMHgwNjRCLCAweDA2MjcsIDB4MDY0QiwKKyAgICAweDA2NDAsIDB4MDY0QiwgMHgwNjQwLCAweDA2NEUsIDB4MDY0MCwgMHgwNjRGLCAweDA2NDAsIDB4MDY1MCwgMHgwNjQwLCAweDA2NTEsIDB4MDY0MCwgMHgwNjUyLCAweDA2NDQsIDB4MDYyMiwgMHgwNjQ0LCAweDA2MjIsCisgICAgMHgwNjQ0LCAweDA2MjMsIDB4MDY0NCwgMHgwNjIzLCAweDA2NDQsIDB4MDYyNSwgMHgwNjQ0LCAweDA2MjUsIDB4MDY0NCwgMHgwNjI3LCAweDA2NDQsIDB4MDYyNworfTsKK2V4dGVybiBjb25zdCBGWF9XQ0hBUiBnX1VuaWNvZGVEYXRhX05vcm1hbGl6YXRpb25fTWFwM1sxMTY0XSA9IHsKKyAgICAweDAwMzEsIDB4MDAyRiwgMHgwMDM0LCAweDAwMzEsIDB4MDAyRiwgMHgwMDMyLCAweDAwMzMsIDB4MDAyRiwgMHgwMDM0LCAweDAwMkUsIDB4MDAyRSwgMHgwMDJFLCAweDIwMzIsIDB4MjAzMiwgMHgyMDMyLCAweDIwMzUsCisgICAgMHgyMDM1LCAweDIwMzUsIDB4MDA2MSwgMHgwMDJGLCAweDAwNjMsIDB4MDA2MSwgMHgwMDJGLCAweDAwNzMsIDB4MDA2MywgMHgwMDJGLCAweDAwNkYsIDB4MDA2MywgMHgwMDJGLCAweDAwNzUsIDB4MDA1NCwgMHgwMDQ1LAorICAgIDB4MDA0QywgMHgwMDQ2LCAweDAwNDEsIDB4MDA1OCwgMHgwMDMxLCAweDAwMkYsIDB4MDAzNywgMHgwMDMxLCAweDAwMkYsIDB4MDAzOSwgMHgwMDMxLCAweDAwMkYsIDB4MDAzMywgMHgwMDMyLCAweDAwMkYsIDB4MDAzMywKKyAgICAweDAwMzEsIDB4MDAyRiwgMHgwMDM1LCAweDAwMzIsIDB4MDAyRiwgMHgwMDM1LCAweDAwMzMsIDB4MDAyRiwgMHgwMDM1LCAweDAwMzQsIDB4MDAyRiwgMHgwMDM1LCAweDAwMzEsIDB4MDAyRiwgMHgwMDM2LCAweDAwMzUsCisgICAgMHgwMDJGLCAweDAwMzYsIDB4MDAzMSwgMHgwMDJGLCAweDAwMzgsIDB4MDAzMywgMHgwMDJGLCAweDAwMzgsIDB4MDAzNSwgMHgwMDJGLCAweDAwMzgsIDB4MDAzNywgMHgwMDJGLCAweDAwMzgsIDB4MDA0OSwgMHgwMDQ5LAorICAgIDB4MDA0OSwgMHgwMDU2LCAweDAwNDksIDB4MDA0OSwgMHgwMDU4LCAweDAwNDksIDB4MDA0OSwgMHgwMDY5LCAweDAwNjksIDB4MDA2OSwgMHgwMDc2LCAweDAwNjksIDB4MDA2OSwgMHgwMDc4LCAweDAwNjksIDB4MDA2OSwKKyAgICAweDAwMzAsIDB4MjA0NCwgMHgwMDMzLCAweDIyMkIsIDB4MjIyQiwgMHgyMjJCLCAweDIyMkUsIDB4MjIyRSwgMHgyMjJFLCAweDAwNEUsIDB4MDA1NSwgMHgwMDRDLCAweDAwNTMsIDB4MDA0RiwgMHgwMDQ4LCAweDAwNTMsCisgICAgMHgwMDU0LCAweDAwNTgsIDB4MDA0NSwgMHgwMDU0LCAweDAwNTgsIDB4MDA0NSwgMHgwMDRGLCAweDAwNTQsIDB4MDA0NSwgMHgwMDRFLCAweDAwNTEsIDB4MDA0MSwgMHgwMDQzLCAweDAwNEIsIDB4MDA0MiwgMHgwMDQ1LAorICAgIDB4MDA0QywgMHgwMDQ0LCAweDAwNEMsIDB4MDA0NSwgMHgwMDQ0LCAweDAwNDMsIDB4MDAzMSwgMHgwMDQ0LCAweDAwNDMsIDB4MDAzMiwgMHgwMDQ0LCAweDAwNDMsIDB4MDAzMywgMHgwMDQ0LCAweDAwNDMsIDB4MDAzNCwKKyAgICAweDAwNEUsIDB4MDA0MSwgMHgwMDRCLCAweDAwNTMsIDB4MDA1OSwgMHgwMDRFLCAweDAwNDUsIDB4MDA1NCwgMHgwMDQyLCAweDAwNDMsIDB4MDA0MSwgMHgwMDRFLCAweDAwNTMsIDB4MDA1NSwgMHgwMDQyLCAweDAwNDUsCisgICAgMHgwMDUzLCAweDAwNDMsIDB4MDA0NCwgMHgwMDQ1LCAweDAwNEMsIDB4MDAyOCwgMHgwMDMxLCAweDAwMjksIDB4MDAyOCwgMHgwMDMyLCAweDAwMjksIDB4MDAyOCwgMHgwMDMzLCAweDAwMjksIDB4MDAyOCwgMHgwMDM0LAorICAgIDB4MDAyOSwgMHgwMDI4LCAweDAwMzUsIDB4MDAyOSwgMHgwMDI4LCAweDAwMzYsIDB4MDAyOSwgMHgwMDI4LCAweDAwMzcsIDB4MDAyOSwgMHgwMDI4LCAweDAwMzgsIDB4MDAyOSwgMHgwMDI4LCAweDAwMzksIDB4MDAyOSwKKyAgICAweDAwMzEsIDB4MDAzMCwgMHgwMDJFLCAweDAwMzEsIDB4MDAzMSwgMHgwMDJFLCAweDAwMzEsIDB4MDAzMiwgMHgwMDJFLCAweDAwMzEsIDB4MDAzMywgMHgwMDJFLCAweDAwMzEsIDB4MDAzNCwgMHgwMDJFLCAweDAwMzEsCisgICAgMHgwMDM1LCAweDAwMkUsIDB4MDAzMSwgMHgwMDM2LCAweDAwMkUsIDB4MDAzMSwgMHgwMDM3LCAweDAwMkUsIDB4MDAzMSwgMHgwMDM4LCAweDAwMkUsIDB4MDAzMSwgMHgwMDM5LCAweDAwMkUsIDB4MDAzMiwgMHgwMDMwLAorICAgIDB4MDAyRSwgMHgwMDI4LCAweDAwNjEsIDB4MDAyOSwgMHgwMDI4LCAweDAwNjIsIDB4MDAyOSwgMHgwMDI4LCAweDAwNjMsIDB4MDAyOSwgMHgwMDI4LCAweDAwNjQsIDB4MDAyOSwgMHgwMDI4LCAweDAwNjUsIDB4MDAyOSwKKyAgICAweDAwMjgsIDB4MDA2NiwgMHgwMDI5LCAweDAwMjgsIDB4MDA2NywgMHgwMDI5LCAweDAwMjgsIDB4MDA2OCwgMHgwMDI5LCAweDAwMjgsIDB4MDA2OSwgMHgwMDI5LCAweDAwMjgsIDB4MDA2QSwgMHgwMDI5LCAweDAwMjgsCisgICAgMHgwMDZCLCAweDAwMjksIDB4MDAyOCwgMHgwMDZDLCAweDAwMjksIDB4MDAyOCwgMHgwMDZELCAweDAwMjksIDB4MDAyOCwgMHgwMDZFLCAweDAwMjksIDB4MDAyOCwgMHgwMDZGLCAweDAwMjksIDB4MDAyOCwgMHgwMDcwLAorICAgIDB4MDAyOSwgMHgwMDI4LCAweDAwNzEsIDB4MDAyOSwgMHgwMDI4LCAweDAwNzIsIDB4MDAyOSwgMHgwMDI4LCAweDAwNzMsIDB4MDAyOSwgMHgwMDI4LCAweDAwNzQsIDB4MDAyOSwgMHgwMDI4LCAweDAwNzUsIDB4MDAyOSwKKyAgICAweDAwMjgsIDB4MDA3NiwgMHgwMDI5LCAweDAwMjgsIDB4MDA3NywgMHgwMDI5LCAweDAwMjgsIDB4MDA3OCwgMHgwMDI5LCAweDAwMjgsIDB4MDA3OSwgMHgwMDI5LCAweDAwMjgsIDB4MDA3QSwgMHgwMDI5LCAweDAwM0EsCisgICAgMHgwMDNBLCAweDAwM0QsIDB4MDAzRCwgMHgwMDNELCAweDAwM0QsIDB4MDAyOCwgMHgxMTAwLCAweDAwMjksIDB4MDAyOCwgMHgxMTAyLCAweDAwMjksIDB4MDAyOCwgMHgxMTAzLCAweDAwMjksIDB4MDAyOCwgMHgxMTA1LAorICAgIDB4MDAyOSwgMHgwMDI4LCAweDExMDYsIDB4MDAyOSwgMHgwMDI4LCAweDExMDcsIDB4MDAyOSwgMHgwMDI4LCAweDExMDksIDB4MDAyOSwgMHgwMDI4LCAweDExMEIsIDB4MDAyOSwgMHgwMDI4LCAweDExMEMsIDB4MDAyOSwKKyAgICAweDAwMjgsIDB4MTEwRSwgMHgwMDI5LCAweDAwMjgsIDB4MTEwRiwgMHgwMDI5LCAweDAwMjgsIDB4MTExMCwgMHgwMDI5LCAweDAwMjgsIDB4MTExMSwgMHgwMDI5LCAweDAwMjgsIDB4MTExMiwgMHgwMDI5LCAweDAwMjgsCisgICAgMHg0RTAwLCAweDAwMjksIDB4MDAyOCwgMHg0RThDLCAweDAwMjksIDB4MDAyOCwgMHg0RTA5LCAweDAwMjksIDB4MDAyOCwgMHg1NkRCLCAweDAwMjksIDB4MDAyOCwgMHg0RTk0LCAweDAwMjksIDB4MDAyOCwgMHg1MTZELAorICAgIDB4MDAyOSwgMHgwMDI4LCAweDRFMDMsIDB4MDAyOSwgMHgwMDI4LCAweDUxNkIsIDB4MDAyOSwgMHgwMDI4LCAweDRFNUQsIDB4MDAyOSwgMHgwMDI4LCAweDUzNDEsIDB4MDAyOSwgMHgwMDI4LCAweDY3MDgsIDB4MDAyOSwKKyAgICAweDAwMjgsIDB4NzA2QiwgMHgwMDI5LCAweDAwMjgsIDB4NkMzNCwgMHgwMDI5LCAweDAwMjgsIDB4NjcyOCwgMHgwMDI5LCAweDAwMjgsIDB4OTFEMSwgMHgwMDI5LCAweDAwMjgsIDB4NTcxRiwgMHgwMDI5LCAweDAwMjgsCisgICAgMHg2NUU1LCAweDAwMjksIDB4MDAyOCwgMHg2ODJBLCAweDAwMjksIDB4MDAyOCwgMHg2NzA5LCAweDAwMjksIDB4MDAyOCwgMHg3OTNFLCAweDAwMjksIDB4MDAyOCwgMHg1NDBELCAweDAwMjksIDB4MDAyOCwgMHg3Mjc5LAorICAgIDB4MDAyOSwgMHgwMDI4LCAweDhDQTEsIDB4MDAyOSwgMHgwMDI4LCAweDc5NUQsIDB4MDAyOSwgMHgwMDI4LCAweDUyQjQsIDB4MDAyOSwgMHgwMDI4LCAweDRFRTMsIDB4MDAyOSwgMHgwMDI4LCAweDU0N0MsIDB4MDAyOSwKKyAgICAweDAwMjgsIDB4NUI2NiwgMHgwMDI5LCAweDAwMjgsIDB4NzZFMywgMHgwMDI5LCAweDAwMjgsIDB4NEYwMSwgMHgwMDI5LCAweDAwMjgsIDB4OENDNywgMHgwMDI5LCAweDAwMjgsIDB4NTM1NCwgMHgwMDI5LCAweDAwMjgsCisgICAgMHg3OTZELCAweDAwMjksIDB4MDAyOCwgMHg0RjExLCAweDAwMjksIDB4MDAyOCwgMHg4MUVBLCAweDAwMjksIDB4MDAyOCwgMHg4MUYzLCAweDAwMjksIDB4MDA1MCwgMHgwMDU0LCAweDAwNDUsIDB4MDAzMSwgMHgwMDMwLAorICAgIDB4NjcwOCwgMHgwMDMxLCAweDAwMzEsIDB4NjcwOCwgMHgwMDMxLCAweDAwMzIsIDB4NjcwOCwgMHgwMDY1LCAweDAwNzIsIDB4MDA2NywgMHgwMDRDLCAweDAwNTQsIDB4MDA0NCwgMHgzMEEyLCAweDMwRkMsIDB4MzBFQiwKKyAgICAweDMwQTQsIDB4MzBGMywgMHgzMEMxLCAweDMwQTYsIDB4MzBBOSwgMHgzMEYzLCAweDMwQUEsIDB4MzBGMywgMHgzMEI5LCAweDMwQUEsIDB4MzBGQywgMHgzMEUwLCAweDMwQUIsIDB4MzBBNCwgMHgzMEVBLCAweDMwQUMsCisgICAgMHgzMEVELCAweDMwRjMsIDB4MzBBQywgMHgzMEYzLCAweDMwREUsIDB4MzBBRSwgMHgzMENCLCAweDMwRkMsIDB4MzBCMCwgMHgzMEU5LCAweDMwRTAsIDB4MzBCMSwgMHgzMEZDLCAweDMwQjksIDB4MzBCMywgMHgzMEVCLAorICAgIDB4MzBDQSwgMHgzMEIzLCAweDMwRkMsIDB4MzBERCwgMHgzMEJCLCAweDMwRjMsIDB4MzBDMSwgMHgzMEJCLCAweDMwRjMsIDB4MzBDOCwgMHgzMEMwLCAweDMwRkMsIDB4MzBCOSwgMHgzMENFLCAweDMwQzMsIDB4MzBDOCwKKyAgICAweDMwQ0YsIDB4MzBBNCwgMHgzMEM0LCAweDMwRDEsIDB4MzBGQywgMHgzMEM0LCAweDMwRDQsIDB4MzBBRiwgMHgzMEVCLCAweDMwRDUsIDB4MzBFOSwgMHgzMEYzLCAweDMwREEsIDB4MzBDQiwgMHgzMEQyLCAweDMwRDgsCisgICAgMHgzMEVCLCAweDMwQzQsIDB4MzBEQSwgMHgzMEYzLCAweDMwQjksIDB4MzBEQSwgMHgzMEZDLCAweDMwQjgsIDB4MzBEOSwgMHgzMEZDLCAweDMwQkYsIDB4MzBEQywgMHgzMEVCLCAweDMwQzgsIDB4MzBERCwgMHgzMEYzLAorICAgIDB4MzBDOSwgMHgzMERCLCAweDMwRkMsIDB4MzBFQiwgMHgzMERCLCAweDMwRkMsIDB4MzBGMywgMHgzMERFLCAweDMwQTQsIDB4MzBFQiwgMHgzMERFLCAweDMwQzMsIDB4MzBDRiwgMHgzMERFLCAweDMwRUIsIDB4MzBBRiwKKyAgICAweDMwRTQsIDB4MzBGQywgMHgzMEM5LCAweDMwRTQsIDB4MzBGQywgMHgzMEVCLCAweDMwRTYsIDB4MzBBMiwgMHgzMEYzLCAweDMwRUIsIDB4MzBENCwgMHgzMEZDLCAweDMwRUYsIDB4MzBDMywgMHgzMEM4LCAweDAwMzEsCisgICAgMHgwMDMwLCAweDcwQjksIDB4MDAzMSwgMHgwMDMxLCAweDcwQjksIDB4MDAzMSwgMHgwMDMyLCAweDcwQjksIDB4MDAzMSwgMHgwMDMzLCAweDcwQjksIDB4MDAzMSwgMHgwMDM0LCAweDcwQjksIDB4MDAzMSwgMHgwMDM1LAorICAgIDB4NzBCOSwgMHgwMDMxLCAweDAwMzYsIDB4NzBCOSwgMHgwMDMxLCAweDAwMzcsIDB4NzBCOSwgMHgwMDMxLCAweDAwMzgsIDB4NzBCOSwgMHgwMDMxLCAweDAwMzksIDB4NzBCOSwgMHgwMDMyLCAweDAwMzAsIDB4NzBCOSwKKyAgICAweDAwMzIsIDB4MDAzMSwgMHg3MEI5LCAweDAwMzIsIDB4MDAzMiwgMHg3MEI5LCAweDAwMzIsIDB4MDAzMywgMHg3MEI5LCAweDAwMzIsIDB4MDAzNCwgMHg3MEI5LCAweDAwNjgsIDB4MDA1MCwgMHgwMDYxLCAweDAwNjIsCisgICAgMHgwMDYxLCAweDAwNzIsIDB4MDA2NCwgMHgwMDZELCAweDAwQjIsIDB4MDA2NCwgMHgwMDZELCAweDAwQjMsIDB4MDA2MywgMHgwMDYxLCAweDAwNkMsIDB4MDA2QiwgMHgwMDQ4LCAweDAwN0EsIDB4MDA0RCwgMHgwMDQ4LAorICAgIDB4MDA3QSwgMHgwMDQ3LCAweDAwNDgsIDB4MDA3QSwgMHgwMDU0LCAweDAwNDgsIDB4MDA3QSwgMHgwMDZELCAweDAwNkQsIDB4MDBCMiwgMHgwMDYzLCAweDAwNkQsIDB4MDBCMiwgMHgwMDZCLCAweDAwNkQsIDB4MDBCMiwKKyAgICAweDAwNkQsIDB4MDA2RCwgMHgwMEIzLCAweDAwNjMsIDB4MDA2RCwgMHgwMEIzLCAweDAwNkIsIDB4MDA2RCwgMHgwMEIzLCAweDAwNkQsIDB4MjIxNSwgMHgwMDczLCAweDAwNkIsIDB4MDA1MCwgMHgwMDYxLCAweDAwNEQsCisgICAgMHgwMDUwLCAweDAwNjEsIDB4MDA0NywgMHgwMDUwLCAweDAwNjEsIDB4MDA3MiwgMHgwMDYxLCAweDAwNjQsIDB4MDA0MywgMHgwMDZGLCAweDAwMkUsIDB4MDA2QywgMHgwMDZGLCAweDAwNjcsIDB4MDA2RCwgMHgwMDY5LAorICAgIDB4MDA2QywgMHgwMDZELCAweDAwNkYsIDB4MDA2QywgMHgwMDUwLCAweDAwNTAsIDB4MDA0RCwgMHgwMDU2LCAweDIyMTUsIDB4MDA2RCwgMHgwMDQxLCAweDIyMTUsIDB4MDA2RCwgMHgwMDMxLCAweDAwMzAsIDB4NjVFNSwKKyAgICAweDAwMzEsIDB4MDAzMSwgMHg2NUU1LCAweDAwMzEsIDB4MDAzMiwgMHg2NUU1LCAweDAwMzEsIDB4MDAzMywgMHg2NUU1LCAweDAwMzEsIDB4MDAzNCwgMHg2NUU1LCAweDAwMzEsIDB4MDAzNSwgMHg2NUU1LCAweDAwMzEsCisgICAgMHgwMDM2LCAweDY1RTUsIDB4MDAzMSwgMHgwMDM3LCAweDY1RTUsIDB4MDAzMSwgMHgwMDM4LCAweDY1RTUsIDB4MDAzMSwgMHgwMDM5LCAweDY1RTUsIDB4MDAzMiwgMHgwMDMwLCAweDY1RTUsIDB4MDAzMiwgMHgwMDMxLAorICAgIDB4NjVFNSwgMHgwMDMyLCAweDAwMzIsIDB4NjVFNSwgMHgwMDMyLCAweDAwMzMsIDB4NjVFNSwgMHgwMDMyLCAweDAwMzQsIDB4NjVFNSwgMHgwMDMyLCAweDAwMzUsIDB4NjVFNSwgMHgwMDMyLCAweDAwMzYsIDB4NjVFNSwKKyAgICAweDAwMzIsIDB4MDAzNywgMHg2NUU1LCAweDAwMzIsIDB4MDAzOCwgMHg2NUU1LCAweDAwMzIsIDB4MDAzOSwgMHg2NUU1LCAweDAwMzMsIDB4MDAzMCwgMHg2NUU1LCAweDAwMzMsIDB4MDAzMSwgMHg2NUU1LCAweDAwNjcsCisgICAgMHgwMDYxLCAweDAwNkMsIDB4MDA2NiwgMHgwMDY2LCAweDAwNjksIDB4MDA2NiwgMHgwMDY2LCAweDAwNkMsIDB4MDY0MCwgMHgwNjRFLCAweDA2NTEsIDB4MDY0MCwgMHgwNjRGLCAweDA2NTEsIDB4MDY0MCwgMHgwNjUwLAorICAgIDB4MDY1MSwgMHgwNjJBLCAweDA2MkMsIDB4MDY0NSwgMHgwNjJBLCAweDA2MkQsIDB4MDYyQywgMHgwNjJBLCAweDA2MkQsIDB4MDYyQywgMHgwNjJBLCAweDA2MkQsIDB4MDY0NSwgMHgwNjJBLCAweDA2MkUsIDB4MDY0NSwKKyAgICAweDA2MkEsIDB4MDY0NSwgMHgwNjJDLCAweDA2MkEsIDB4MDY0NSwgMHgwNjJELCAweDA2MkEsIDB4MDY0NSwgMHgwNjJFLCAweDA2MkMsIDB4MDY0NSwgMHgwNjJELCAweDA2MkMsIDB4MDY0NSwgMHgwNjJELCAweDA2MkQsCisgICAgMHgwNjQ1LCAweDA2NEEsIDB4MDYyRCwgMHgwNjQ1LCAweDA2NDksIDB4MDYzMywgMHgwNjJELCAweDA2MkMsIDB4MDYzMywgMHgwNjJDLCAweDA2MkQsIDB4MDYzMywgMHgwNjJDLCAweDA2NDksIDB4MDYzMywgMHgwNjQ1LAorICAgIDB4MDYyRCwgMHgwNjMzLCAweDA2NDUsIDB4MDYyRCwgMHgwNjMzLCAweDA2NDUsIDB4MDYyQywgMHgwNjMzLCAweDA2NDUsIDB4MDY0NSwgMHgwNjMzLCAweDA2NDUsIDB4MDY0NSwgMHgwNjM1LCAweDA2MkQsIDB4MDYyRCwKKyAgICAweDA2MzUsIDB4MDYyRCwgMHgwNjJELCAweDA2MzUsIDB4MDY0NSwgMHgwNjQ1LCAweDA2MzQsIDB4MDYyRCwgMHgwNjQ1LCAweDA2MzQsIDB4MDYyRCwgMHgwNjQ1LCAweDA2MzQsIDB4MDYyQywgMHgwNjRBLCAweDA2MzQsCisgICAgMHgwNjQ1LCAweDA2MkUsIDB4MDYzNCwgMHgwNjQ1LCAweDA2MkUsIDB4MDYzNCwgMHgwNjQ1LCAweDA2NDUsIDB4MDYzNCwgMHgwNjQ1LCAweDA2NDUsIDB4MDYzNiwgMHgwNjJELCAweDA2NDksIDB4MDYzNiwgMHgwNjJFLAorICAgIDB4MDY0NSwgMHgwNjM2LCAweDA2MkUsIDB4MDY0NSwgMHgwNjM3LCAweDA2NDUsIDB4MDYyRCwgMHgwNjM3LCAweDA2NDUsIDB4MDYyRCwgMHgwNjM3LCAweDA2NDUsIDB4MDY0NSwgMHgwNjM3LCAweDA2NDUsIDB4MDY0QSwKKyAgICAweDA2MzksIDB4MDYyQywgMHgwNjQ1LCAweDA2MzksIDB4MDY0NSwgMHgwNjQ1LCAweDA2MzksIDB4MDY0NSwgMHgwNjQ1LCAweDA2MzksIDB4MDY0NSwgMHgwNjQ5LCAweDA2M0EsIDB4MDY0NSwgMHgwNjQ1LCAweDA2M0EsCisgICAgMHgwNjQ1LCAweDA2NEEsIDB4MDYzQSwgMHgwNjQ1LCAweDA2NDksIDB4MDY0MSwgMHgwNjJFLCAweDA2NDUsIDB4MDY0MSwgMHgwNjJFLCAweDA2NDUsIDB4MDY0MiwgMHgwNjQ1LCAweDA2MkQsIDB4MDY0MiwgMHgwNjQ1LAorICAgIDB4MDY0NSwgMHgwNjQ0LCAweDA2MkQsIDB4MDY0NSwgMHgwNjQ0LCAweDA2MkQsIDB4MDY0QSwgMHgwNjQ0LCAweDA2MkQsIDB4MDY0OSwgMHgwNjQ0LCAweDA2MkMsIDB4MDYyQywgMHgwNjQ0LCAweDA2MkMsIDB4MDYyQywKKyAgICAweDA2NDQsIDB4MDYyRSwgMHgwNjQ1LCAweDA2NDQsIDB4MDYyRSwgMHgwNjQ1LCAweDA2NDQsIDB4MDY0NSwgMHgwNjJELCAweDA2NDQsIDB4MDY0NSwgMHgwNjJELCAweDA2NDUsIDB4MDYyRCwgMHgwNjJDLCAweDA2NDUsCisgICAgMHgwNjJELCAweDA2NDUsIDB4MDY0NSwgMHgwNjJELCAweDA2NEEsIDB4MDY0NSwgMHgwNjJDLCAweDA2MkQsIDB4MDY0NSwgMHgwNjJDLCAweDA2NDUsIDB4MDY0NSwgMHgwNjJFLCAweDA2MkMsIDB4MDY0NSwgMHgwNjJFLAorICAgIDB4MDY0NSwgMHgwNjQ1LCAweDA2MkMsIDB4MDYyRSwgMHgwNjQ3LCAweDA2NDUsIDB4MDYyQywgMHgwNjQ3LCAweDA2NDUsIDB4MDY0NSwgMHgwNjQ2LCAweDA2MkQsIDB4MDY0NSwgMHgwNjQ2LCAweDA2MkQsIDB4MDY0OSwKKyAgICAweDA2NDYsIDB4MDYyQywgMHgwNjQ1LCAweDA2NDYsIDB4MDYyQywgMHgwNjQ1LCAweDA2NDYsIDB4MDYyQywgMHgwNjQ5LCAweDA2NDYsIDB4MDY0NSwgMHgwNjRBLCAweDA2NDYsIDB4MDY0NSwgMHgwNjQ5LCAweDA2NEEsCisgICAgMHgwNjQ1LCAweDA2NDUsIDB4MDY0QSwgMHgwNjQ1LCAweDA2NDUsIDB4MDYyOCwgMHgwNjJFLCAweDA2NEEsIDB4MDYyQSwgMHgwNjJDLCAweDA2NEEsIDB4MDYyQSwgMHgwNjJDLCAweDA2NDksIDB4MDYyQSwgMHgwNjJFLAorICAgIDB4MDY0QSwgMHgwNjJBLCAweDA2MkUsIDB4MDY0OSwgMHgwNjJBLCAweDA2NDUsIDB4MDY0QSwgMHgwNjJBLCAweDA2NDUsIDB4MDY0OSwgMHgwNjJDLCAweDA2NDUsIDB4MDY0QSwgMHgwNjJDLCAweDA2MkQsIDB4MDY0OSwKKyAgICAweDA2MkMsIDB4MDY0NSwgMHgwNjQ5LCAweDA2MzMsIDB4MDYyRSwgMHgwNjQ5LCAweDA2MzUsIDB4MDYyRCwgMHgwNjRBLCAweDA2MzQsIDB4MDYyRCwgMHgwNjRBLCAweDA2MzYsIDB4MDYyRCwgMHgwNjRBLCAweDA2NDQsCisgICAgMHgwNjJDLCAweDA2NEEsIDB4MDY0NCwgMHgwNjQ1LCAweDA2NEEsIDB4MDY0QSwgMHgwNjJELCAweDA2NEEsIDB4MDY0QSwgMHgwNjJDLCAweDA2NEEsIDB4MDY0QSwgMHgwNjQ1LCAweDA2NEEsIDB4MDY0NSwgMHgwNjQ1LAorICAgIDB4MDY0QSwgMHgwNjQyLCAweDA2NDUsIDB4MDY0QSwgMHgwNjQ2LCAweDA2MkQsIDB4MDY0QSwgMHgwNjQyLCAweDA2NDUsIDB4MDYyRCwgMHgwNjQ0LCAweDA2MkQsIDB4MDY0NSwgMHgwNjM5LCAweDA2NDUsIDB4MDY0QSwKKyAgICAweDA2NDMsIDB4MDY0NSwgMHgwNjRBLCAweDA2NDYsIDB4MDYyQywgMHgwNjJELCAweDA2NDUsIDB4MDYyRSwgMHgwNjRBLCAweDA2NDQsIDB4MDYyQywgMHgwNjQ1LCAweDA2NDMsIDB4MDY0NSwgMHgwNjQ1LCAweDA2NDQsCisgICAgMHgwNjJDLCAweDA2NDUsIDB4MDY0NiwgMHgwNjJDLCAweDA2MkQsIDB4MDYyQywgMHgwNjJELCAweDA2NEEsIDB4MDYyRCwgMHgwNjJDLCAweDA2NEEsIDB4MDY0NSwgMHgwNjJDLCAweDA2NEEsIDB4MDY0MSwgMHgwNjQ1LAorICAgIDB4MDY0QSwgMHgwNjI4LCAweDA2MkQsIDB4MDY0QSwgMHgwNjQzLCAweDA2NDUsIDB4MDY0NSwgMHgwNjM5LCAweDA2MkMsIDB4MDY0NSwgMHgwNjM1LCAweDA2NDUsIDB4MDY0NSwgMHgwNjMzLCAweDA2MkUsIDB4MDY0QSwKKyAgICAweDA2NDYsIDB4MDYyQywgMHgwNjRBLCAweDA2MzUsIDB4MDY0NCwgMHgwNkQyLCAweDA2NDIsIDB4MDY0NCwgMHgwNkQyLCAweDA2MzUsIDB4MDY0NCwgMHgwNjQ5Cit9OworZXh0ZXJuIGNvbnN0IEZYX1dDSEFSIGdfVW5pY29kZURhdGFfTm9ybWFsaXphdGlvbl9NYXA0WzQ4OF0gPSB7CisgICAgMHgwMDA0LCAweDIwMzIsIDB4MjAzMiwgMHgyMDMyLCAweDIwMzIsIDB4MDAwNCwgMHgwMDMxLCAweDAwMkYsIDB4MDAzMSwgMHgwMDMwLCAweDAwMDQsIDB4MDA1NiwgMHgwMDQ5LCAweDAwNDksIDB4MDA0OSwgMHgwMDA0LAorICAgIDB4MDA3NiwgMHgwMDY5LCAweDAwNjksIDB4MDA2OSwgMHgwMDA0LCAweDAwMjgsIDB4MDAzMSwgMHgwMDMwLCAweDAwMjksIDB4MDAwNCwgMHgwMDI4LCAweDAwMzEsIDB4MDAzMSwgMHgwMDI5LCAweDAwMDQsIDB4MDAyOCwKKyAgICAweDAwMzEsIDB4MDAzMiwgMHgwMDI5LCAweDAwMDQsIDB4MDAyOCwgMHgwMDMxLCAweDAwMzMsIDB4MDAyOSwgMHgwMDA0LCAweDAwMjgsIDB4MDAzMSwgMHgwMDM0LCAweDAwMjksIDB4MDAwNCwgMHgwMDI4LCAweDAwMzEsCisgICAgMHgwMDM1LCAweDAwMjksIDB4MDAwNCwgMHgwMDI4LCAweDAwMzEsIDB4MDAzNiwgMHgwMDI5LCAweDAwMDQsIDB4MDAyOCwgMHgwMDMxLCAweDAwMzcsIDB4MDAyOSwgMHgwMDA0LCAweDAwMjgsIDB4MDAzMSwgMHgwMDM4LAorICAgIDB4MDAyOSwgMHgwMDA0LCAweDAwMjgsIDB4MDAzMSwgMHgwMDM5LCAweDAwMjksIDB4MDAwNCwgMHgwMDI4LCAweDAwMzIsIDB4MDAzMCwgMHgwMDI5LCAweDAwMDQsIDB4MjIyQiwgMHgyMjJCLCAweDIyMkIsIDB4MjIyQiwKKyAgICAweDAwMDQsIDB4MDAyOCwgMHgxMTAwLCAweDExNjEsIDB4MDAyOSwgMHgwMDA0LCAweDAwMjgsIDB4MTEwMiwgMHgxMTYxLCAweDAwMjksIDB4MDAwNCwgMHgwMDI4LCAweDExMDMsIDB4MTE2MSwgMHgwMDI5LCAweDAwMDQsCisgICAgMHgwMDI4LCAweDExMDUsIDB4MTE2MSwgMHgwMDI5LCAweDAwMDQsIDB4MDAyOCwgMHgxMTA2LCAweDExNjEsIDB4MDAyOSwgMHgwMDA0LCAweDAwMjgsIDB4MTEwNywgMHgxMTYxLCAweDAwMjksIDB4MDAwNCwgMHgwMDI4LAorICAgIDB4MTEwOSwgMHgxMTYxLCAweDAwMjksIDB4MDAwNCwgMHgwMDI4LCAweDExMEIsIDB4MTE2MSwgMHgwMDI5LCAweDAwMDQsIDB4MDAyOCwgMHgxMTBDLCAweDExNjEsIDB4MDAyOSwgMHgwMDA0LCAweDAwMjgsIDB4MTEwRSwKKyAgICAweDExNjEsIDB4MDAyOSwgMHgwMDA0LCAweDAwMjgsIDB4MTEwRiwgMHgxMTYxLCAweDAwMjksIDB4MDAwNCwgMHgwMDI4LCAweDExMTAsIDB4MTE2MSwgMHgwMDI5LCAweDAwMDQsIDB4MDAyOCwgMHgxMTExLCAweDExNjEsCisgICAgMHgwMDI5LCAweDAwMDQsIDB4MDAyOCwgMHgxMTEyLCAweDExNjEsIDB4MDAyOSwgMHgwMDA0LCAweDAwMjgsIDB4MTEwQywgMHgxMTZFLCAweDAwMjksIDB4MDAwNywgMHgwMDI4LCAweDExMEIsIDB4MTE2OSwgMHgxMTBDLAorICAgIDB4MTE2NSwgMHgxMUFCLCAweDAwMjksIDB4MDAwNiwgMHgwMDI4LCAweDExMEIsIDB4MTE2OSwgMHgxMTEyLCAweDExNkUsIDB4MDAyOSwgMHgwMDA1LCAweDExMEUsIDB4MTE2MSwgMHgxMUI3LCAweDExMDAsIDB4MTE2OSwKKyAgICAweDAwMDQsIDB4MTEwQywgMHgxMTZFLCAweDExMEIsIDB4MTE3NCwgMHgwMDA0LCAweDMwQTIsIDB4MzBEMSwgMHgzMEZDLCAweDMwQzgsIDB4MDAwNCwgMHgzMEEyLCAweDMwRUIsIDB4MzBENSwgMHgzMEExLCAweDAwMDQsCisgICAgMHgzMEEyLCAweDMwRjMsIDB4MzBEQSwgMHgzMEEyLCAweDAwMDQsIDB4MzBBNCwgMHgzMENCLCAweDMwRjMsIDB4MzBCMCwgMHgwMDA1LCAweDMwQTgsIDB4MzBCOSwgMHgzMEFGLCAweDMwRkMsIDB4MzBDOSwgMHgwMDA0LAorICAgIDB4MzBBOCwgMHgzMEZDLCAweDMwQUIsIDB4MzBGQywgMHgwMDA0LCAweDMwQUIsIDB4MzBFOSwgMHgzMEMzLCAweDMwQzgsIDB4MDAwNCwgMHgzMEFCLCAweDMwRUQsIDB4MzBFQSwgMHgzMEZDLCAweDAwMDQsIDB4MzBBRCwKKyAgICAweDMwRTUsIDB4MzBFQSwgMHgzMEZDLCAweDAwMDQsIDB4MzBBRSwgMHgzMEVCLCAweDMwQzAsIDB4MzBGQywgMHgwMDA1LCAweDMwQUQsIDB4MzBFRCwgMHgzMEIwLCAweDMwRTksIDB4MzBFMCwgMHgwMDA2LCAweDMwQUQsCisgICAgMHgzMEVELCAweDMwRTEsIDB4MzBGQywgMHgzMEM4LCAweDMwRUIsIDB4MDAwNSwgMHgzMEFELCAweDMwRUQsIDB4MzBFRiwgMHgzMEMzLCAweDMwQzgsIDB4MDAwNSwgMHgzMEIwLCAweDMwRTksIDB4MzBFMCwgMHgzMEM4LAorICAgIDB4MzBGMywgMHgwMDA1LCAweDMwQUYsIDB4MzBFQiwgMHgzMEJDLCAweDMwQTQsIDB4MzBFRCwgMHgwMDA0LCAweDMwQUYsIDB4MzBFRCwgMHgzMEZDLCAweDMwQ0QsIDB4MDAwNCwgMHgzMEI1LCAweDMwQTQsIDB4MzBBRiwKKyAgICAweDMwRUIsIDB4MDAwNSwgMHgzMEI1LCAweDMwRjMsIDB4MzBDMSwgMHgzMEZDLCAweDMwRTAsIDB4MDAwNCwgMHgzMEI3LCAweDMwRUEsIDB4MzBGMywgMHgzMEIwLCAweDAwMDUsIDB4MzBEMSwgMHgzMEZDLCAweDMwQkIsCisgICAgMHgzMEYzLCAweDMwQzgsIDB4MDAwNCwgMHgzMEQwLCAweDMwRkMsIDB4MzBFQywgMHgzMEVCLCAweDAwMDUsIDB4MzBENCwgMHgzMEEyLCAweDMwQjksIDB4MzBDOCwgMHgzMEVCLCAweDAwMDUsIDB4MzBENSwgMHgzMEExLAorICAgIDB4MzBFOSwgMHgzMEMzLCAweDMwQzksIDB4MDAwNCwgMHgzMEQ1LCAweDMwQTMsIDB4MzBGQywgMHgzMEM4LCAweDAwMDUsIDB4MzBENiwgMHgzMEMzLCAweDMwQjcsIDB4MzBBNywgMHgzMEVCLCAweDAwMDUsIDB4MzBEOCwKKyAgICAweDMwQUYsIDB4MzBCRiwgMHgzMEZDLCAweDMwRUIsIDB4MDAwNCwgMHgzMERELCAweDMwQTQsIDB4MzBGMywgMHgzMEM4LCAweDAwMDQsIDB4MzBERSwgMHgzMEE0LCAweDMwQUYsIDB4MzBFRCwgMHgwMDA1LCAweDMwREUsCisgICAgMHgzMEYzLCAweDMwQjcsIDB4MzBFNywgMHgzMEYzLCAweDAwMDQsIDB4MzBERiwgMHgzMEFGLCAweDMwRUQsIDB4MzBGMywgMHgwMDA1LCAweDMwREYsIDB4MzBFQSwgMHgzMEQwLCAweDMwRkMsIDB4MzBFQiwgMHgwMDA0LAorICAgIDB4MzBFMSwgMHgzMEFDLCAweDMwQzgsIDB4MzBGMywgMHgwMDA0LCAweDMwRTEsIDB4MzBGQywgMHgzMEM4LCAweDMwRUIsIDB4MDAwNCwgMHgzMEVBLCAweDMwQzMsIDB4MzBDOCwgMHgzMEVCLCAweDAwMDQsIDB4MzBFQiwKKyAgICAweDMwRkMsIDB4MzBENiwgMHgzMEVCLCAweDAwMDUsIDB4MzBFQywgMHgzMEYzLCAweDMwQzgsIDB4MzBCMiwgMHgzMEYzLCAweDAwMDQsIDB4NjgyQSwgMHg1RjBGLCAweDRGMUEsIDB4NzkzRSwgMHgwMDA0LCAweDAwNkIsCisgICAgMHgwMDYzLCAweDAwNjEsIDB4MDA2QywgMHgwMDA0LCAweDAwNkQsIDB4MjIxNSwgMHgwMDczLCAweDAwQjIsIDB4MDAwNSwgMHgwMDcyLCAweDAwNjEsIDB4MDA2NCwgMHgyMjE1LCAweDAwNzMsIDB4MDAwNiwgMHgwMDcyLAorICAgIDB4MDA2MSwgMHgwMDY0LCAweDIyMTUsIDB4MDA3MywgMHgwMEIyLCAweDAwMDQsIDB4MDA2MSwgMHgwMDJFLCAweDAwNkQsIDB4MDAyRSwgMHgwMDA0LCAweDAwNDMsIDB4MjIxNSwgMHgwMDZCLCAweDAwNjcsIDB4MDAwNCwKKyAgICAweDAwNzAsIDB4MDAyRSwgMHgwMDZELCAweDAwMkUsIDB4MDAwNCwgMHgwNjI3LCAweDA2NDQsIDB4MDY0NCwgMHgwNjQ3LCAweDAwMDQsIDB4MDYyNywgMHgwNjQzLCAweDA2MjgsIDB4MDYzMSwgMHgwMDA0LCAweDA2NDUsCisgICAgMHgwNjJELCAweDA2NDUsIDB4MDYyRiwgMHgwMDA0LCAweDA2MzUsIDB4MDY0NCwgMHgwNjM5LCAweDA2NDUsIDB4MDAwNCwgMHgwNjMxLCAweDA2MzMsIDB4MDY0OCwgMHgwNjQ0LCAweDAwMDQsIDB4MDYzOSwgMHgwNjQ0LAorICAgIDB4MDY0QSwgMHgwNjQ3LCAweDAwMDQsIDB4MDY0OCwgMHgwNjMzLCAweDA2NDQsIDB4MDY0NSwgMHgwMDEyLCAweDA2MzUsIDB4MDY0NCwgMHgwNjQ5LCAweDAwMjAsIDB4MDYyNywgMHgwNjQ0LCAweDA2NDQsIDB4MDY0NywKKyAgICAweDAwMjAsIDB4MDYzOSwgMHgwNjQ0LCAweDA2NEEsIDB4MDY0NywgMHgwMDIwLCAweDA2NDgsIDB4MDYzMywgMHgwNjQ0LCAweDA2NDUsIDB4MDAwOCwgMHgwNjJDLCAweDA2NDQsIDB4MDAyMCwgMHgwNjJDLCAweDA2NDQsCisgICAgMHgwNjI3LCAweDA2NDQsIDB4MDY0NywgMHgwMDA0LCAweDA2MzEsIDB4MDZDQywgMHgwNjI3LCAweDA2NDQKK307CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meF9mcmVldHlwZS5oIGIvY29yZS9zcmMvZnhfZnJlZXR5cGUuaAppbmRleCA3YzUwZjY4Li5kMTYwMDM2IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meF9mcmVldHlwZS5oCisrKyBiL2NvcmUvc3JjL2Z4X2ZyZWV0eXBlLmgKQEAgLTEsMTUgKzEsMTUgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0ZYX1NSQ19GUkVFVFlQRV9IXw0KLSNkZWZpbmUgX0ZYX1NSQ19GUkVFVFlQRV9IXw0KLSNpbmNsdWRlICIuL2Z4Z2UvZnhfZnJlZXR5cGUvZnhmdDIuNS4wMS9pbmNsdWRlL2Z0MmJ1aWxkLmgiDQotI2luY2x1ZGUgIi4vZnhnZS9meF9mcmVldHlwZS9meGZ0Mi41LjAxL2luY2x1ZGUvZnJlZXR5cGUvZnJlZXR5cGUuaCINCi0jaW5jbHVkZSAiLi9meGdlL2Z4X2ZyZWV0eXBlL2Z4ZnQyLjUuMDEvaW5jbHVkZS9mcmVldHlwZS9mdG91dGxuLmgiDQotI2luY2x1ZGUgIi4vZnhnZS9meF9mcmVldHlwZS9meGZ0Mi41LjAxL2luY2x1ZGUvZnJlZXR5cGUvZnRtbS5oIg0KLSNpbmNsdWRlICIuL2Z4Z2UvZnhfZnJlZXR5cGUvZnhmdDIuNS4wMS9pbmNsdWRlL2ZyZWV0eXBlL2ludGVybmFsL2Z0b2Jqcy5oIg0KLSNpbmNsdWRlICIuL2Z4Z2UvZnhfZnJlZXR5cGUvZnhmdDIuNS4wMS9pbmNsdWRlL2ZyZWV0eXBlL3R0dGFibGVzLmgiDQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlhfU1JDX0ZSRUVUWVBFX0hfCisjZGVmaW5lIF9GWF9TUkNfRlJFRVRZUEVfSF8KKyNpbmNsdWRlICIuL2Z4Z2UvZnhfZnJlZXR5cGUvZnhmdDIuNS4wMS9pbmNsdWRlL2Z0MmJ1aWxkLmgiCisjaW5jbHVkZSAiLi9meGdlL2Z4X2ZyZWV0eXBlL2Z4ZnQyLjUuMDEvaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIgorI2luY2x1ZGUgIi4vZnhnZS9meF9mcmVldHlwZS9meGZ0Mi41LjAxL2luY2x1ZGUvZnJlZXR5cGUvZnRvdXRsbi5oIgorI2luY2x1ZGUgIi4vZnhnZS9meF9mcmVldHlwZS9meGZ0Mi41LjAxL2luY2x1ZGUvZnJlZXR5cGUvZnRtbS5oIgorI2luY2x1ZGUgIi4vZnhnZS9meF9mcmVldHlwZS9meGZ0Mi41LjAxL2luY2x1ZGUvZnJlZXR5cGUvaW50ZXJuYWwvZnRvYmpzLmgiCisjaW5jbHVkZSAiLi9meGdlL2Z4X2ZyZWV0eXBlL2Z4ZnQyLjUuMDEvaW5jbHVkZS9mcmVldHlwZS90dHRhYmxlcy5oIgorI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meF9qcGVnbGliLmggYi9jb3JlL3NyYy9meF9qcGVnbGliLmgKaW5kZXggMWNlMjE3Mi4uMDI4YTVlZSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhfanBlZ2xpYi5oCisrKyBiL2NvcmUvc3JjL2Z4X2pwZWdsaWIuaApAQCAtMSwxMCArMSwxMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlhfU1JDX0pQRUdMSUJfSF8NCi0jZGVmaW5lIF9GWF9TUkNfSlBFR0xJQl9IXw0KLSNpbmNsdWRlICIuL2Z4Y29kZWMvbGlianBlZy9qcGVnbGliLmgiDQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlhfU1JDX0pQRUdMSUJfSF8KKyNkZWZpbmUgX0ZYX1NSQ19KUEVHTElCX0hfCisjaW5jbHVkZSAiLi9meGNvZGVjL2xpYmpwZWcvanBlZ2xpYi5oIgorI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meF96bGliLmggYi9jb3JlL3NyYy9meF96bGliLmgKaW5kZXggM2M2YzVhOC4uY2M1NTYwYiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhfemxpYi5oCisrKyBiL2NvcmUvc3JjL2Z4X3psaWIuaApAQCAtMSwxMCArMSwxMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlhfU1JDX1pMSUJfSF8NCi0jZGVmaW5lIF9GWF9TUkNfWkxJQl9IXw0KLSNpbmNsdWRlICIuL2Z4Y29kZWMvZnhfemxpYi96bGliX3YxMjgvemxpYi5oIg0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZYX1NSQ19aTElCX0hfCisjZGVmaW5lIF9GWF9TUkNfWkxJQl9IXworI2luY2x1ZGUgIi4vZnhjb2RlYy9meF96bGliL3psaWJfdjEyOC96bGliLmgiCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvY29kZWMvY29kZWNfaW50LmggYi9jb3JlL3NyYy9meGNvZGVjL2NvZGVjL2NvZGVjX2ludC5oCmluZGV4IDU3MWFmNjEuLjYzOGQ5NmQgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvY29kZWMvY29kZWNfaW50LmgKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9jb2RlYy9jb2RlY19pbnQuaApAQCAtMSwyNzAgKzEsMjcwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSA8bGltaXRzLmg+DQotY2xhc3MgQ0NvZGVjX0Jhc2ljTW9kdWxlIDogcHVibGljIElDb2RlY19CYXNpY01vZHVsZQ0KLXsNCi1wdWJsaWM6DQotICAgIHZpcnR1YWwgRlhfQk9PTAlSdW5MZW5ndGhFbmNvZGUoY29uc3QgRlhfQllURSogc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIEZYX0xQQllURSYgZGVzdF9idWYsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQmIGRlc3Rfc2l6ZSk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAlBODVFbmNvZGUoY29uc3QgRlhfQllURSogc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIEZYX0xQQllURSYgZGVzdF9idWYsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQmIGRlc3Rfc2l6ZSk7DQotICAgIHZpcnR1YWwgSUNvZGVjX1NjYW5saW5lRGVjb2RlcioJQ3JlYXRlUnVuTGVuZ3RoRGVjb2RlcihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsDQotICAgICAgICAgICAgaW50IG5Db21wcywgaW50IGJwYyk7DQotfTsNCi1zdHJ1Y3QgQ0NvZGVjX0ltYWdlRGF0YUNhY2hlIHsNCi0gICAgaW50CQkJbV9XaWR0aCwgbV9IZWlnaHQ7DQotICAgIGludAkJCW1fbkNhY2hlZExpbmVzOw0KLSAgICBGWF9CWVRFCQltX0RhdGE7DQotfTsNCi1jbGFzcyBDQ29kZWNfU2NhbmxpbmVEZWNvZGVyIDogcHVibGljIElDb2RlY19TY2FubGluZURlY29kZXINCi17DQotcHVibGljOg0KLQ0KLSAgICBDQ29kZWNfU2NhbmxpbmVEZWNvZGVyKCk7DQotDQotICAgIHZpcnR1YWwgfkNDb2RlY19TY2FubGluZURlY29kZXIoKTsNCi0NCi0gICAgdmlydHVhbCBGWF9EV09SRAlHZXRTcmNPZmZzZXQoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0NCi0gICAgdmlydHVhbCB2b2lkCQlEb3duU2NhbGUoaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCk7DQotDQotICAgIEZYX0xQQllURQkJCUdldFNjYW5saW5lKGludCBsaW5lKTsNCi0NCi0gICAgRlhfQk9PTAkJCQlTa2lwVG9TY2FubGluZShpbnQgbGluZSwgSUZYX1BhdXNlKiBwUGF1c2UpOw0KLQ0KLSAgICBpbnQJCQkJCUdldFdpZHRoKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fT3V0cHV0V2lkdGg7DQotICAgIH0NCi0NCi0gICAgaW50CQkJCQlHZXRIZWlnaHQoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9PdXRwdXRIZWlnaHQ7DQotICAgIH0NCi0NCi0gICAgaW50CQkJCQlDb3VudENvbXBzKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fbkNvbXBzOw0KLSAgICB9DQotDQotICAgIGludAkJCQkJR2V0QlBDKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fYnBjOw0KLSAgICB9DQotDQotICAgIEZYX0JPT0wJCQkJSXNDb2xvclRyYW5zZm9ybWVkKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fYkNvbG9yVHJhbnNmb3JtZWQ7DQotICAgIH0NCi0NCi0gICAgdm9pZAkJCQlDbGVhckltYWdlRGF0YSgpDQotICAgIHsNCi0gICAgICAgIGlmIChtX3BEYXRhQ2FjaGUpIHsNCi0gICAgICAgICAgICBGWF9GcmVlKG1fcERhdGFDYWNoZSk7DQotICAgICAgICB9DQotICAgICAgICBtX3BEYXRhQ2FjaGUgPSBOVUxMOw0KLSAgICB9DQotcHJvdGVjdGVkOg0KLQ0KLSAgICBpbnQJCQkJCW1fT3JpZ1dpZHRoOw0KLQ0KLSAgICBpbnQJCQkJCW1fT3JpZ0hlaWdodDsNCi0NCi0gICAgaW50CQkJCQltX0Rvd25TY2FsZTsNCi0NCi0gICAgaW50CQkJCQltX091dHB1dFdpZHRoOw0KLQ0KLSAgICBpbnQJCQkJCW1fT3V0cHV0SGVpZ2h0Ow0KLQ0KLSAgICBpbnQJCQkJCW1fbkNvbXBzOw0KLQ0KLSAgICBpbnQJCQkJCW1fYnBjOw0KLQ0KLSAgICBpbnQJCQkJCW1fUGl0Y2g7DQotDQotICAgIEZYX0JPT0wJCQkJbV9iQ29sb3JUcmFuc2Zvcm1lZDsNCi0NCi0gICAgRlhfTFBCWVRFCQkJUmVhZE5leHRMaW5lKCk7DQotDQotICAgIHZpcnR1YWwgRlhfQk9PTAkJdl9SZXdpbmQoKSA9IDA7DQotDQotICAgIHZpcnR1YWwgRlhfTFBCWVRFCXZfR2V0TmV4dExpbmUoKSA9IDA7DQotDQotICAgIHZpcnR1YWwgdm9pZAkJdl9Eb3duU2NhbGUoaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCkgPSAwOw0KLQ0KLSAgICBpbnQJCQkJCW1fTmV4dExpbmU7DQotDQotICAgIEZYX0xQQllURQkJCW1fcExhc3RTY2FubGluZTsNCi0NCi0gICAgQ0NvZGVjX0ltYWdlRGF0YUNhY2hlKgltX3BEYXRhQ2FjaGU7DQotfTsNCi1jbGFzcyBDQ29kZWNfRmF4TW9kdWxlIDogcHVibGljIElDb2RlY19GYXhNb2R1bGUNCi17DQotcHVibGljOg0KLSAgICB2aXJ0dWFsIElDb2RlY19TY2FubGluZURlY29kZXIqCUNyZWF0ZURlY29kZXIoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KLSAgICAgICAgICAgIGludCBLLCBGWF9CT09MIEVuZE9mTGluZSwgRlhfQk9PTCBFbmNvZGVkQnl0ZUFsaWduLCBGWF9CT09MIEJsYWNrSXMxLCBpbnQgQ29sdW1ucywgaW50IFJvd3MpOw0KLSAgICBGWF9CT09MCQlFbmNvZGUoRlhfTFBDQllURSBzcmNfYnVmLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBwaXRjaCwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSk7DQotfTsNCi1jbGFzcyBDQ29kZWNfRmxhdGVNb2R1bGUgOiBwdWJsaWMgSUNvZGVjX0ZsYXRlTW9kdWxlDQotew0KLXB1YmxpYzoNCi0gICAgdmlydHVhbCBJQ29kZWNfU2NhbmxpbmVEZWNvZGVyKglDcmVhdGVEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwNCi0gICAgICAgICAgICBpbnQgbkNvbXBzLCBpbnQgYnBjLCBpbnQgcHJlZGljdG9yLCBpbnQgQ29sb3JzLCBpbnQgQml0c1BlckNvbXBvbmVudCwgaW50IENvbHVtbnMpOw0KLSAgICB2aXJ0dWFsIEZYX0RXT1JEIEZsYXRlT3JMWldEZWNvZGUoRlhfQk9PTCBiTFpXLCBjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgRlhfQk9PTCBiRWFybHlDaGFuZ2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJlZGljdG9yLCBpbnQgQ29sb3JzLCBpbnQgQml0c1BlckNvbXBvbmVudCwgaW50IENvbHVtbnMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBlc3RpbWF0ZWRfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSk7DQotICAgIHZpcnR1YWwgRlhfQk9PTCBFbmNvZGUoY29uc3QgRlhfQllURSogc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWRpY3RvciwgaW50IENvbG9ycywgaW50IEJpdHNQZXJDb21wb25lbnQsIGludCBDb2x1bW5zLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCUVuY29kZShGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBGWF9MUEJZVEUmIGRlc3RfYnVmLCBGWF9EV09SRCYgZGVzdF9zaXplKTsNCi19Ow0KLWNsYXNzIENDb2RlY19KcGVnTW9kdWxlIDogcHVibGljIElDb2RlY19KcGVnTW9kdWxlDQotew0KLXB1YmxpYzoNCi0gICAgQ0NvZGVjX0pwZWdNb2R1bGUoKSA6IG1fcEV4dFByb3ZpZGVyKE5VTEwpIHt9DQotICAgIHZvaWQgU2V0UG92aWRlcihJRlhfSnBlZ1Byb3ZpZGVyKiBwSlApDQotICAgIHsNCi0gICAgICAgIG1fcEV4dFByb3ZpZGVyID0gcEpQOw0KLSAgICB9DQotICAgIElDb2RlY19TY2FubGluZURlY29kZXIqCUNyZWF0ZURlY29kZXIoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBuQ29tcHMsIEZYX0JPT0wgQ29sb3JUcmFuc2Zvcm0pOw0KLSAgICBGWF9CT09MCQlMb2FkSW5mbyhGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBpbnQmIHdpZHRoLCBpbnQmIGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBudW1fY29tcG9uZW50cywgaW50JiBiaXRzX3Blcl9jb21wb25lbnRzLCBGWF9CT09MJiBjb2xvcl90cmFuc2Zvcm0sDQotICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSogaWNjX2J1Zl9wdHIsIEZYX0RXT1JEKiBpY2NfbGVuZ3RoKTsNCi0gICAgRlhfQk9PTAkJRW5jb2RlKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTb3VyY2UsIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX1NUUlNJWkUmIGRlc3Rfc2l6ZSwgaW50IHF1YWxpdHksIEZYX0xQQ0JZVEUgaWNjX2J1ZiwgRlhfRFdPUkQgaWNjX2xlbmd0aCk7DQotICAgIHZpcnR1YWwgdm9pZCoJCVN0YXJ0KCk7DQotICAgIHZpcnR1YWwgdm9pZAkJRmluaXNoKHZvaWQqIHBDb250ZXh0KTsNCi0gICAgdmlydHVhbCB2b2lkCQlJbnB1dCh2b2lkKiBwQ29udGV4dCwgRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSk7DQotICAgIHZpcnR1YWwgaW50CQkJUmVhZEhlYWRlcih2b2lkKiBwQ29udGV4dCwgaW50KiB3aWR0aCwgaW50KiBoZWlnaHQsIGludCogbkNvbXBzKTsNCi0gICAgdmlydHVhbCBGWF9CT09MCQlTdGFydFNjYW5saW5lKHZvaWQqIHBDb250ZXh0LCBpbnQgZG93bl9zY2FsZSk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJUmVhZFNjYW5saW5lKHZvaWQqIHBDb250ZXh0LCBGWF9MUEJZVEUgZGVzdF9idWYpOw0KLSAgICB2aXJ0dWFsIEZYX0RXT1JECUdldEF2YWlsSW5wdXQodm9pZCogcENvbnRleHQsIEZYX0xQQllURSogYXZhaWxfYnVmX3B0cik7DQotcHJvdGVjdGVkOg0KLSAgICBJRlhfSnBlZ1Byb3ZpZGVyKiBtX3BFeHRQcm92aWRlcjsNCi19Ow0KLWNsYXNzIENDb2RlY19JY2NNb2R1bGUgOiBwdWJsaWMgSUNvZGVjX0ljY01vZHVsZQ0KLXsNCi1wdWJsaWM6DQotICAgIHZpcnR1YWwgSWNjQ1MJCQlHZXRQcm9maWxlQ1MoRlhfTFBDQllURSBwUHJvZmlsZURhdGEsIHVuc2lnbmVkIGludCBkd1Byb2ZpbGVTaXplKTsNCi0gICAgdmlydHVhbCBJY2NDUwkJCUdldFByb2ZpbGVDUyhJRlhfRmlsZVJlYWQqIHBGaWxlKTsNCi0gICAgdmlydHVhbCBGWF9MUFZPSUQJCUNyZWF0ZVRyYW5zZm9ybShJQ29kZWNfSWNjTW9kdWxlOjpJY2NQYXJhbSogcElucHV0UGFyYW0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQ29kZWNfSWNjTW9kdWxlOjpJY2NQYXJhbSogcE91dHB1dFBhcmFtLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUNvZGVjX0ljY01vZHVsZTo6SWNjUGFyYW0qIHBQcm9vZlBhcmFtID0gTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGR3SW50ZW50ID0gSWNjX0lOVEVOVF9QRVJDRVBUVUFMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgZHdGbGFnID0gSWNjX0ZMQUdTX0RFRkFVTFQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBkd1ByZkludGVudCA9IEljY19JTlRFTlRfQUJTT0xVVEVfQ09MT1JJTUVUUklDLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgZHdQcmZGbGFnID0gSWNjX0ZMQUdTX1NPRlRQUk9PRklORw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCi0gICAgdmlydHVhbCBGWF9MUFZPSUQJCUNyZWF0ZVRyYW5zZm9ybV9zUkdCKEZYX0xQQ0JZVEUgcFByb2ZpbGVEYXRhLCB1bnNpZ25lZCBpbnQgZHdQcm9maWxlU2l6ZSwgaW50IG5Db21wb25lbnRzLCBpbnQgaW50ZW50ID0gMCwNCi0gICAgICAgICAgICBGWF9EV09SRCBkd1NyY0Zvcm1hdCA9IEljY19GT1JNQVRfREVGQVVMVCk7DQotICAgIHZpcnR1YWwgRlhfTFBWT0lECQlDcmVhdGVUcmFuc2Zvcm1fQ01ZSyhGWF9MUENCWVRFIHBTcmNQcm9maWxlRGF0YSwgdW5zaWduZWQgaW50IGR3U3JjUHJvZmlsZVNpemUsIGludCBuU3JjQ29tcG9uZW50cywNCi0gICAgICAgICAgICBGWF9MUENCWVRFIHBEc3RQcm9maWxlRGF0YSwgdW5zaWduZWQgaW50IGR3RHN0UHJvZmlsZVNpemUsIGludCBpbnRlbnQgPSAwLA0KLSAgICAgICAgICAgIEZYX0RXT1JEIGR3U3JjRm9ybWF0ID0gSWNjX0ZPUk1BVF9ERUZBVUxULA0KLSAgICAgICAgICAgIEZYX0RXT1JEIGR3RHN0Rm9ybWF0ID0gSWNjX0ZPUk1BVF9ERUZBVUxUDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQotICAgIHZpcnR1YWwgdm9pZAkJCURlc3Ryb3lUcmFuc2Zvcm0oRlhfTFBWT0lEIHBUcmFuc2Zvcm0pOw0KLSAgICB2aXJ0dWFsIHZvaWQJCQlUcmFuc2xhdGUoRlhfTFBWT0lEIHBUcmFuc2Zvcm0sIEZYX0ZMT0FUKiBwU3JjVmFsdWVzLCBGWF9GTE9BVCogcERlc3RWYWx1ZXMpOw0KLSAgICB2aXJ0dWFsIHZvaWQJCQlUcmFuc2xhdGVTY2FubGluZShGWF9MUFZPSUQgcFRyYW5zZm9ybSwgRlhfTFBCWVRFIHBEZXN0LCBGWF9MUENCWVRFIHBTcmMsIGludCBwaXhlbHMpOw0KLSAgICB2aXJ0dWFsIH5DQ29kZWNfSWNjTW9kdWxlKCk7DQotcHJvdGVjdGVkOg0KLSAgICBDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyCQltX01hcFRyYW5mb3JtOw0KLSAgICBDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyCQltX01hcFByb2ZpbGU7DQotICAgIHR5cGVkZWYgZW51bSB7DQotICAgICAgICBJY2NfQ0xBU1NfSU5QVVQgPSAwLA0KLSAgICAgICAgSWNjX0NMQVNTX09VVFBVVCwNCi0gICAgICAgIEljY19DTEFTU19QUk9PRiwNCi0gICAgICAgIEljY19DTEFTU19NQVgNCi0gICAgfSBJY2NfQ0xBU1M7DQotICAgIEZYX0xQVk9JRAkJQ3JlYXRlUHJvZmlsZShJQ29kZWNfSWNjTW9kdWxlOjpJY2NQYXJhbSogcEljY1BhcmFtLCBJY2NfQ0xBU1MgaWMsIENGWF9CaW5hcnlCdWYqIHBUcmFuc2Zvcm1LZXkpOw0KLX07DQotY2xhc3MgQ0NvZGVjX0pweE1vZHVsZSA6IHB1YmxpYyBJQ29kZWNfSnB4TW9kdWxlDQotew0KLXB1YmxpYzoNCi0gICAgQ0NvZGVjX0pweE1vZHVsZSgpOw0KLSAgICB2b2lkKgkJQ3JlYXRlRGVjb2RlcihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBGWF9CT09MIHVzZUNvbG9yU3BhY2UgPSBGQUxTRSk7DQotICAgIHZvaWQJCUdldEltYWdlSW5mbyhGWF9MUFZPSUQgY3R4LCBGWF9EV09SRCYgd2lkdGgsIEZYX0RXT1JEJiBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCYgY29kZXN0cmVhbV9uQ29tcHMsIEZYX0RXT1JEJiBvdXRwdXRfbkNvbXBzKTsNCi0gICAgRlhfQk9PTAkJRGVjb2RlKHZvaWQqIGN0eCwgRlhfTFBCWVRFIGRlc3RfZGF0YSwgaW50IHBpdGNoLCBGWF9CT09MIGJUcmFuc2xhdGVDb2xvciwgRlhfTFBCWVRFIG9mZnNldHMpOw0KLSAgICB2b2lkCQlEZXN0cm95RGVjb2Rlcih2b2lkKiBjdHgpOw0KLX07DQotI2luY2x1ZGUgIi4uL2piaWcyL0pCaWcyX0NvbnRleHQuaCINCi1jbGFzcyBDUERGX0piaWcySW50ZXJmYWNlIDogcHVibGljIENGWF9PYmplY3QsIHB1YmxpYyBDSkJpZzJfTW9kdWxlDQotew0KLXB1YmxpYzoNCi0gICAgdmlydHVhbCB2b2lkICpKQmlnMl9NYWxsb2MoRlhfRFdPUkQgZHdTaXplKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRlhfQWxsb2MoRlhfQllURSwgZHdTaXplKTsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIHZvaWQgKkpCaWcyX01hbGxvYzIoRlhfRFdPUkQgbnVtLCBGWF9EV09SRCBkd1NpemUpDQotICAgIHsNCi0gICAgICAgIGlmIChkd1NpemUgJiYgbnVtID49IFVJTlRfTUFYIC8gZHdTaXplKSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gRlhfQWxsb2MoRlhfQllURSwgbnVtICogZHdTaXplKTsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIHZvaWQgKkpCaWcyX01hbGxvYzMoRlhfRFdPUkQgbnVtLCBGWF9EV09SRCBkd1NpemUsIEZYX0RXT1JEIGR3U2l6ZTIpDQotICAgIHsNCi0gICAgICAgIGlmIChkd1NpemUyICYmIGR3U2l6ZSA+PSBVSU5UX01BWCAvIGR3U2l6ZTIpIHsNCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0RXT1JEIHNpemUgPSBkd1NpemUyICogZHdTaXplOw0KLSAgICAgICAgaWYgKHNpemUgJiYgbnVtID49IFVJTlRfTUFYIC8gc2l6ZSkgew0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIEZYX0FsbG9jKEZYX0JZVEUsIG51bSAqIHNpemUpOw0KLSAgICB9DQotICAgIHZpcnR1YWwgdm9pZCAqSkJpZzJfUmVhbGxvYyhGWF9MUFZPSUQgcE1lbSwgRlhfRFdPUkQgZHdTaXplKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRlhfUmVhbGxvYyhGWF9CWVRFLCBwTWVtLCBkd1NpemUpOw0KLSAgICB9DQotICAgIHZpcnR1YWwgdm9pZCBKQmlnMl9GcmVlKEZYX0xQVk9JRCBwTWVtKQ0KLSAgICB7DQotICAgICAgICBGWF9GcmVlKHBNZW0pOw0KLSAgICB9DQotfTsNCi1jbGFzcyBDQ29kZWNfSmJpZzJDb250ZXh0IDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDQ29kZWNfSmJpZzJDb250ZXh0KCk7DQotICAgIH5DQ29kZWNfSmJpZzJDb250ZXh0KCkge307DQotICAgIElGWF9GaWxlUmVhZCogbV9maWxlX3B0cjsNCi0gICAgRlhfRFdPUkQgbV93aWR0aDsNCi0gICAgRlhfRFdPUkQgbV9oZWlnaHQ7DQotICAgIEZYX0xQQllURSBtX3NyY19idWY7DQotICAgIEZYX0RXT1JEIG1fc3JjX3NpemU7DQotICAgIEZYX0xQQ0JZVEUgbV9nbG9iYWxfZGF0YTsNCi0gICAgRlhfRFdPUkQgbV9nbG9iYWxfc2l6ZTsNCi0gICAgRlhfTFBCWVRFIG1fZGVzdF9idWY7DQotICAgIEZYX0RXT1JEIG1fZGVzdF9waXRjaDsNCi0gICAgRlhfQk9PTAltX2JGaWxlUmVhZGVyOw0KLSAgICBJRlhfUGF1c2UqIG1fcFBhdXNlOw0KLSAgICBDSkJpZzJfQ29udGV4dCogbV9wQ29udGV4dDsNCi0gICAgQ0pCaWcyX0ltYWdlKiBtX2Rlc3RfaW1hZ2U7DQotfTsNCi1jbGFzcyBDQ29kZWNfSmJpZzJNb2R1bGUgOiBwdWJsaWMgSUNvZGVjX0piaWcyTW9kdWxlDQotew0KLXB1YmxpYzoNCi0gICAgQ0NvZGVjX0piaWcyTW9kdWxlKCkge307DQotICAgIH5DQ29kZWNfSmJpZzJNb2R1bGUoKTsNCi0gICAgRlhfQk9PTAkJRGVjb2RlKEZYX0RXT1JEIHdpZHRoLCBGWF9EV09SRCBoZWlnaHQsIEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsDQotICAgICAgICAgICAgICAgICAgICAgICBGWF9MUENCWVRFIGdsb2JhbF9kYXRhLCBGWF9EV09SRCBnbG9iYWxfc2l6ZSwgRlhfTFBCWVRFIGRlc3RfYnVmLCBGWF9EV09SRCBkZXN0X3BpdGNoKTsNCi0gICAgRlhfQk9PTAkJRGVjb2RlKElGWF9GaWxlUmVhZCogZmlsZV9wdHIsDQotICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCYgd2lkdGgsIEZYX0RXT1JEJiBoZWlnaHQsIEZYX0RXT1JEJiBwaXRjaCwgRlhfTFBCWVRFJiBkZXN0X2J1Zik7DQotICAgIHZvaWQqCQkJCUNyZWF0ZUpiaWcyQ29udGV4dCgpOw0KLSAgICBGWENPREVDX1NUQVRVUwkJU3RhcnREZWNvZGUodm9pZCogcEpiaWcyQ29udGV4dCwgRlhfRFdPUkQgd2lkdGgsIEZYX0RXT1JEIGhlaWdodCwgRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUENCWVRFIGdsb2JhbF9kYXRhLCBGWF9EV09SRCBnbG9iYWxfc2l6ZSwgRlhfTFBCWVRFIGRlc3RfYnVmLCBGWF9EV09SRCBkZXN0X3BpdGNoLCBJRlhfUGF1c2UqIHBQYXVzZSk7DQotDQotICAgIEZYQ09ERUNfU1RBVFVTCQlTdGFydERlY29kZSh2b2lkKiBwSmJpZzJDb250ZXh0LCBJRlhfRmlsZVJlYWQqIGZpbGVfcHRyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEJiB3aWR0aCwgRlhfRFdPUkQmIGhlaWdodCwgRlhfRFdPUkQmIHBpdGNoLCBGWF9MUEJZVEUmIGRlc3RfYnVmLCBJRlhfUGF1c2UqIHBQYXVzZSk7DQotICAgIEZYQ09ERUNfU1RBVFVTCQlDb250aW51ZURlY29kZSh2b2lkKiBwSmJpZzJDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSk7DQotICAgIHZvaWQJCQkJRGVzdHJveUpiaWcyQ29udGV4dCh2b2lkKiBwSmJpZzJDb250ZXh0KTsNCi0gICAgQ1BERl9KYmlnMkludGVyZmFjZQltX01vZHVsZTsNCi1wcml2YXRlOg0KLX07DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorY2xhc3MgQ0NvZGVjX0Jhc2ljTW9kdWxlIDogcHVibGljIElDb2RlY19CYXNpY01vZHVsZQoreworcHVibGljOgorICAgIHZpcnR1YWwgRlhfQk9PTAlSdW5MZW5ndGhFbmNvZGUoY29uc3QgRlhfQllURSogc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIEZYX0xQQllURSYgZGVzdF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCYgZGVzdF9zaXplKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJQTg1RW5jb2RlKGNvbnN0IEZYX0JZVEUqIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBGWF9MUEJZVEUmIGRlc3RfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQmIGRlc3Rfc2l6ZSk7CisgICAgdmlydHVhbCBJQ29kZWNfU2NhbmxpbmVEZWNvZGVyKglDcmVhdGVSdW5MZW5ndGhEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgICAgIGludCBuQ29tcHMsIGludCBicGMpOworfTsKK3N0cnVjdCBDQ29kZWNfSW1hZ2VEYXRhQ2FjaGUgeworICAgIGludAkJCW1fV2lkdGgsIG1fSGVpZ2h0OworICAgIGludAkJCW1fbkNhY2hlZExpbmVzOworICAgIEZYX0JZVEUJCW1fRGF0YTsKK307CitjbGFzcyBDQ29kZWNfU2NhbmxpbmVEZWNvZGVyIDogcHVibGljIElDb2RlY19TY2FubGluZURlY29kZXIKK3sKK3B1YmxpYzoKKworICAgIENDb2RlY19TY2FubGluZURlY29kZXIoKTsKKworICAgIHZpcnR1YWwgfkNDb2RlY19TY2FubGluZURlY29kZXIoKTsKKworICAgIHZpcnR1YWwgRlhfRFdPUkQJR2V0U3JjT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQJCURvd25TY2FsZShpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0KTsKKworICAgIEZYX0xQQllURQkJCUdldFNjYW5saW5lKGludCBsaW5lKTsKKworICAgIEZYX0JPT0wJCQkJU2tpcFRvU2NhbmxpbmUoaW50IGxpbmUsIElGWF9QYXVzZSogcFBhdXNlKTsKKworICAgIGludAkJCQkJR2V0V2lkdGgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fT3V0cHV0V2lkdGg7CisgICAgfQorCisgICAgaW50CQkJCQlHZXRIZWlnaHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fT3V0cHV0SGVpZ2h0OworICAgIH0KKworICAgIGludAkJCQkJQ291bnRDb21wcygpCisgICAgeworICAgICAgICByZXR1cm4gbV9uQ29tcHM7CisgICAgfQorCisgICAgaW50CQkJCQlHZXRCUEMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnBjOworICAgIH0KKworICAgIEZYX0JPT0wJCQkJSXNDb2xvclRyYW5zZm9ybWVkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JDb2xvclRyYW5zZm9ybWVkOworICAgIH0KKworICAgIHZvaWQJCQkJQ2xlYXJJbWFnZURhdGEoKQorICAgIHsKKyAgICAgICAgaWYgKG1fcERhdGFDYWNoZSkgeworICAgICAgICAgICAgRlhfRnJlZShtX3BEYXRhQ2FjaGUpOworICAgICAgICB9CisgICAgICAgIG1fcERhdGFDYWNoZSA9IE5VTEw7CisgICAgfQorcHJvdGVjdGVkOgorCisgICAgaW50CQkJCQltX09yaWdXaWR0aDsKKworICAgIGludAkJCQkJbV9PcmlnSGVpZ2h0OworCisgICAgaW50CQkJCQltX0Rvd25TY2FsZTsKKworICAgIGludAkJCQkJbV9PdXRwdXRXaWR0aDsKKworICAgIGludAkJCQkJbV9PdXRwdXRIZWlnaHQ7CisKKyAgICBpbnQJCQkJCW1fbkNvbXBzOworCisgICAgaW50CQkJCQltX2JwYzsKKworICAgIGludAkJCQkJbV9QaXRjaDsKKworICAgIEZYX0JPT0wJCQkJbV9iQ29sb3JUcmFuc2Zvcm1lZDsKKworICAgIEZYX0xQQllURQkJCVJlYWROZXh0TGluZSgpOworCisgICAgdmlydHVhbCBGWF9CT09MCQl2X1Jld2luZCgpID0gMDsKKworICAgIHZpcnR1YWwgRlhfTFBCWVRFCXZfR2V0TmV4dExpbmUoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQJCXZfRG93blNjYWxlKGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQpID0gMDsKKworICAgIGludAkJCQkJbV9OZXh0TGluZTsKKworICAgIEZYX0xQQllURQkJCW1fcExhc3RTY2FubGluZTsKKworICAgIENDb2RlY19JbWFnZURhdGFDYWNoZSoJbV9wRGF0YUNhY2hlOworfTsKK2NsYXNzIENDb2RlY19GYXhNb2R1bGUgOiBwdWJsaWMgSUNvZGVjX0ZheE1vZHVsZQoreworcHVibGljOgorICAgIHZpcnR1YWwgSUNvZGVjX1NjYW5saW5lRGVjb2RlcioJQ3JlYXRlRGVjb2RlcihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisgICAgICAgICAgICBpbnQgSywgRlhfQk9PTCBFbmRPZkxpbmUsIEZYX0JPT0wgRW5jb2RlZEJ5dGVBbGlnbiwgRlhfQk9PTCBCbGFja0lzMSwgaW50IENvbHVtbnMsIGludCBSb3dzKTsKKyAgICBGWF9CT09MCQlFbmNvZGUoRlhfTFBDQllURSBzcmNfYnVmLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBwaXRjaCwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSk7Cit9OworY2xhc3MgQ0NvZGVjX0ZsYXRlTW9kdWxlIDogcHVibGljIElDb2RlY19GbGF0ZU1vZHVsZQoreworcHVibGljOgorICAgIHZpcnR1YWwgSUNvZGVjX1NjYW5saW5lRGVjb2RlcioJQ3JlYXRlRGVjb2RlcihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisgICAgICAgICAgICBpbnQgbkNvbXBzLCBpbnQgYnBjLCBpbnQgcHJlZGljdG9yLCBpbnQgQ29sb3JzLCBpbnQgQml0c1BlckNvbXBvbmVudCwgaW50IENvbHVtbnMpOworICAgIHZpcnR1YWwgRlhfRFdPUkQgRmxhdGVPckxaV0RlY29kZShGWF9CT09MIGJMWlcsIGNvbnN0IEZYX0JZVEUqIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBGWF9CT09MIGJFYXJseUNoYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWRpY3RvciwgaW50IENvbG9ycywgaW50IEJpdHNQZXJDb21wb25lbnQsIGludCBDb2x1bW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBlc3RpbWF0ZWRfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSk7CisgICAgdmlydHVhbCBGWF9CT09MIEVuY29kZShjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmVkaWN0b3IsIGludCBDb2xvcnMsIGludCBCaXRzUGVyQ29tcG9uZW50LCBpbnQgQ29sdW1ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpOworICAgIHZpcnR1YWwgRlhfQk9PTAkJRW5jb2RlKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpOworfTsKK2NsYXNzIENDb2RlY19KcGVnTW9kdWxlIDogcHVibGljIElDb2RlY19KcGVnTW9kdWxlCit7CitwdWJsaWM6CisgICAgQ0NvZGVjX0pwZWdNb2R1bGUoKSA6IG1fcEV4dFByb3ZpZGVyKE5VTEwpIHt9CisgICAgdm9pZCBTZXRQb3ZpZGVyKElGWF9KcGVnUHJvdmlkZXIqIHBKUCkKKyAgICB7CisgICAgICAgIG1fcEV4dFByb3ZpZGVyID0gcEpQOworICAgIH0KKyAgICBJQ29kZWNfU2NhbmxpbmVEZWNvZGVyKglDcmVhdGVEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBuQ29tcHMsIEZYX0JPT0wgQ29sb3JUcmFuc2Zvcm0pOworICAgIEZYX0JPT0wJCUxvYWRJbmZvKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCYgd2lkdGgsIGludCYgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbnVtX2NvbXBvbmVudHMsIGludCYgYml0c19wZXJfY29tcG9uZW50cywgRlhfQk9PTCYgY29sb3JfdHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSogaWNjX2J1Zl9wdHIsIEZYX0RXT1JEKiBpY2NfbGVuZ3RoKTsKKyAgICBGWF9CT09MCQlFbmNvZGUoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNvdXJjZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfU1RSU0laRSYgZGVzdF9zaXplLCBpbnQgcXVhbGl0eSwgRlhfTFBDQllURSBpY2NfYnVmLCBGWF9EV09SRCBpY2NfbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQqCQlTdGFydCgpOworICAgIHZpcnR1YWwgdm9pZAkJRmluaXNoKHZvaWQqIHBDb250ZXh0KTsKKyAgICB2aXJ0dWFsIHZvaWQJCUlucHV0KHZvaWQqIHBDb250ZXh0LCBGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplKTsKKyAgICB2aXJ0dWFsIGludAkJCVJlYWRIZWFkZXIodm9pZCogcENvbnRleHQsIGludCogd2lkdGgsIGludCogaGVpZ2h0LCBpbnQqIG5Db21wcyk7CisgICAgdmlydHVhbCBGWF9CT09MCQlTdGFydFNjYW5saW5lKHZvaWQqIHBDb250ZXh0LCBpbnQgZG93bl9zY2FsZSk7CisgICAgdmlydHVhbCBGWF9CT09MCQlSZWFkU2NhbmxpbmUodm9pZCogcENvbnRleHQsIEZYX0xQQllURSBkZXN0X2J1Zik7CisgICAgdmlydHVhbCBGWF9EV09SRAlHZXRBdmFpbElucHV0KHZvaWQqIHBDb250ZXh0LCBGWF9MUEJZVEUqIGF2YWlsX2J1Zl9wdHIpOworcHJvdGVjdGVkOgorICAgIElGWF9KcGVnUHJvdmlkZXIqIG1fcEV4dFByb3ZpZGVyOworfTsKK2NsYXNzIENDb2RlY19JY2NNb2R1bGUgOiBwdWJsaWMgSUNvZGVjX0ljY01vZHVsZQoreworcHVibGljOgorICAgIHZpcnR1YWwgSWNjQ1MJCQlHZXRQcm9maWxlQ1MoRlhfTFBDQllURSBwUHJvZmlsZURhdGEsIHVuc2lnbmVkIGludCBkd1Byb2ZpbGVTaXplKTsKKyAgICB2aXJ0dWFsIEljY0NTCQkJR2V0UHJvZmlsZUNTKElGWF9GaWxlUmVhZCogcEZpbGUpOworICAgIHZpcnR1YWwgRlhfTFBWT0lECQlDcmVhdGVUcmFuc2Zvcm0oSUNvZGVjX0ljY01vZHVsZTo6SWNjUGFyYW0qIHBJbnB1dFBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQ29kZWNfSWNjTW9kdWxlOjpJY2NQYXJhbSogcE91dHB1dFBhcmFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJQ29kZWNfSWNjTW9kdWxlOjpJY2NQYXJhbSogcFByb29mUGFyYW0gPSBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBkd0ludGVudCA9IEljY19JTlRFTlRfUEVSQ0VQVFVBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgZHdGbGFnID0gSWNjX0ZMQUdTX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGR3UHJmSW50ZW50ID0gSWNjX0lOVEVOVF9BQlNPTFVURV9DT0xPUklNRVRSSUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGR3UHJmRmxhZyA9IEljY19GTEFHU19TT0ZUUFJPT0ZJTkcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICB2aXJ0dWFsIEZYX0xQVk9JRAkJQ3JlYXRlVHJhbnNmb3JtX3NSR0IoRlhfTFBDQllURSBwUHJvZmlsZURhdGEsIHVuc2lnbmVkIGludCBkd1Byb2ZpbGVTaXplLCBpbnQgbkNvbXBvbmVudHMsIGludCBpbnRlbnQgPSAwLAorICAgICAgICAgICAgRlhfRFdPUkQgZHdTcmNGb3JtYXQgPSBJY2NfRk9STUFUX0RFRkFVTFQpOworICAgIHZpcnR1YWwgRlhfTFBWT0lECQlDcmVhdGVUcmFuc2Zvcm1fQ01ZSyhGWF9MUENCWVRFIHBTcmNQcm9maWxlRGF0YSwgdW5zaWduZWQgaW50IGR3U3JjUHJvZmlsZVNpemUsIGludCBuU3JjQ29tcG9uZW50cywKKyAgICAgICAgICAgIEZYX0xQQ0JZVEUgcERzdFByb2ZpbGVEYXRhLCB1bnNpZ25lZCBpbnQgZHdEc3RQcm9maWxlU2l6ZSwgaW50IGludGVudCA9IDAsCisgICAgICAgICAgICBGWF9EV09SRCBkd1NyY0Zvcm1hdCA9IEljY19GT1JNQVRfREVGQVVMVCwKKyAgICAgICAgICAgIEZYX0RXT1JEIGR3RHN0Rm9ybWF0ID0gSWNjX0ZPUk1BVF9ERUZBVUxUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICB2aXJ0dWFsIHZvaWQJCQlEZXN0cm95VHJhbnNmb3JtKEZYX0xQVk9JRCBwVHJhbnNmb3JtKTsKKyAgICB2aXJ0dWFsIHZvaWQJCQlUcmFuc2xhdGUoRlhfTFBWT0lEIHBUcmFuc2Zvcm0sIEZYX0ZMT0FUKiBwU3JjVmFsdWVzLCBGWF9GTE9BVCogcERlc3RWYWx1ZXMpOworICAgIHZpcnR1YWwgdm9pZAkJCVRyYW5zbGF0ZVNjYW5saW5lKEZYX0xQVk9JRCBwVHJhbnNmb3JtLCBGWF9MUEJZVEUgcERlc3QsIEZYX0xQQ0JZVEUgcFNyYywgaW50IHBpeGVscyk7CisgICAgdmlydHVhbCB+Q0NvZGVjX0ljY01vZHVsZSgpOworcHJvdGVjdGVkOgorICAgIENGWF9NYXBCeXRlU3RyaW5nVG9QdHIJCW1fTWFwVHJhbmZvcm07CisgICAgQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0cgkJbV9NYXBQcm9maWxlOworICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIEljY19DTEFTU19JTlBVVCA9IDAsCisgICAgICAgIEljY19DTEFTU19PVVRQVVQsCisgICAgICAgIEljY19DTEFTU19QUk9PRiwKKyAgICAgICAgSWNjX0NMQVNTX01BWAorICAgIH0gSWNjX0NMQVNTOworICAgIEZYX0xQVk9JRAkJQ3JlYXRlUHJvZmlsZShJQ29kZWNfSWNjTW9kdWxlOjpJY2NQYXJhbSogcEljY1BhcmFtLCBJY2NfQ0xBU1MgaWMsIENGWF9CaW5hcnlCdWYqIHBUcmFuc2Zvcm1LZXkpOworfTsKK2NsYXNzIENDb2RlY19KcHhNb2R1bGUgOiBwdWJsaWMgSUNvZGVjX0pweE1vZHVsZQoreworcHVibGljOgorICAgIENDb2RlY19KcHhNb2R1bGUoKTsKKyAgICB2b2lkKgkJQ3JlYXRlRGVjb2RlcihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBGWF9CT09MIHVzZUNvbG9yU3BhY2UgPSBGQUxTRSk7CisgICAgdm9pZAkJR2V0SW1hZ2VJbmZvKEZYX0xQVk9JRCBjdHgsIEZYX0RXT1JEJiB3aWR0aCwgRlhfRFdPUkQmIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQmIGNvZGVzdHJlYW1fbkNvbXBzLCBGWF9EV09SRCYgb3V0cHV0X25Db21wcyk7CisgICAgRlhfQk9PTAkJRGVjb2RlKHZvaWQqIGN0eCwgRlhfTFBCWVRFIGRlc3RfZGF0YSwgaW50IHBpdGNoLCBGWF9CT09MIGJUcmFuc2xhdGVDb2xvciwgRlhfTFBCWVRFIG9mZnNldHMpOworICAgIHZvaWQJCURlc3Ryb3lEZWNvZGVyKHZvaWQqIGN0eCk7Cit9OworI2luY2x1ZGUgIi4uL2piaWcyL0pCaWcyX0NvbnRleHQuaCIKK2NsYXNzIENQREZfSmJpZzJJbnRlcmZhY2UgOiBwdWJsaWMgQ0ZYX09iamVjdCwgcHVibGljIENKQmlnMl9Nb2R1bGUKK3sKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgKkpCaWcyX01hbGxvYyhGWF9EV09SRCBkd1NpemUpCisgICAgeworICAgICAgICByZXR1cm4gRlhfQWxsb2MoRlhfQllURSwgZHdTaXplKTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkICpKQmlnMl9NYWxsb2MyKEZYX0RXT1JEIG51bSwgRlhfRFdPUkQgZHdTaXplKQorICAgIHsKKyAgICAgICAgaWYgKGR3U2l6ZSAmJiBudW0gPj0gVUlOVF9NQVggLyBkd1NpemUpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHJldHVybiBGWF9BbGxvYyhGWF9CWVRFLCBudW0gKiBkd1NpemUpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgKkpCaWcyX01hbGxvYzMoRlhfRFdPUkQgbnVtLCBGWF9EV09SRCBkd1NpemUsIEZYX0RXT1JEIGR3U2l6ZTIpCisgICAgeworICAgICAgICBpZiAoZHdTaXplMiAmJiBkd1NpemUgPj0gVUlOVF9NQVggLyBkd1NpemUyKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBGWF9EV09SRCBzaXplID0gZHdTaXplMiAqIGR3U2l6ZTsKKyAgICAgICAgaWYgKHNpemUgJiYgbnVtID49IFVJTlRfTUFYIC8gc2l6ZSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEZYX0FsbG9jKEZYX0JZVEUsIG51bSAqIHNpemUpOworICAgIH0KKyAgICB2aXJ0dWFsIHZvaWQgKkpCaWcyX1JlYWxsb2MoRlhfTFBWT0lEIHBNZW0sIEZYX0RXT1JEIGR3U2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBGWF9SZWFsbG9jKEZYX0JZVEUsIHBNZW0sIGR3U2l6ZSk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZCBKQmlnMl9GcmVlKEZYX0xQVk9JRCBwTWVtKQorICAgIHsKKyAgICAgICAgRlhfRnJlZShwTWVtKTsKKyAgICB9Cit9OworY2xhc3MgQ0NvZGVjX0piaWcyQ29udGV4dCA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ0NvZGVjX0piaWcyQ29udGV4dCgpOworICAgIH5DQ29kZWNfSmJpZzJDb250ZXh0KCkge307CisgICAgSUZYX0ZpbGVSZWFkKiBtX2ZpbGVfcHRyOworICAgIEZYX0RXT1JEIG1fd2lkdGg7CisgICAgRlhfRFdPUkQgbV9oZWlnaHQ7CisgICAgRlhfTFBCWVRFIG1fc3JjX2J1ZjsKKyAgICBGWF9EV09SRCBtX3NyY19zaXplOworICAgIEZYX0xQQ0JZVEUgbV9nbG9iYWxfZGF0YTsKKyAgICBGWF9EV09SRCBtX2dsb2JhbF9zaXplOworICAgIEZYX0xQQllURSBtX2Rlc3RfYnVmOworICAgIEZYX0RXT1JEIG1fZGVzdF9waXRjaDsKKyAgICBGWF9CT09MCW1fYkZpbGVSZWFkZXI7CisgICAgSUZYX1BhdXNlKiBtX3BQYXVzZTsKKyAgICBDSkJpZzJfQ29udGV4dCogbV9wQ29udGV4dDsKKyAgICBDSkJpZzJfSW1hZ2UqIG1fZGVzdF9pbWFnZTsKK307CitjbGFzcyBDQ29kZWNfSmJpZzJNb2R1bGUgOiBwdWJsaWMgSUNvZGVjX0piaWcyTW9kdWxlCit7CitwdWJsaWM6CisgICAgQ0NvZGVjX0piaWcyTW9kdWxlKCkge307CisgICAgfkNDb2RlY19KYmlnMk1vZHVsZSgpOworICAgIEZYX0JPT0wJCURlY29kZShGWF9EV09SRCB3aWR0aCwgRlhfRFdPUkQgaGVpZ2h0LCBGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICBGWF9MUENCWVRFIGdsb2JhbF9kYXRhLCBGWF9EV09SRCBnbG9iYWxfc2l6ZSwgRlhfTFBCWVRFIGRlc3RfYnVmLCBGWF9EV09SRCBkZXN0X3BpdGNoKTsKKyAgICBGWF9CT09MCQlEZWNvZGUoSUZYX0ZpbGVSZWFkKiBmaWxlX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQmIHdpZHRoLCBGWF9EV09SRCYgaGVpZ2h0LCBGWF9EV09SRCYgcGl0Y2gsIEZYX0xQQllURSYgZGVzdF9idWYpOworICAgIHZvaWQqCQkJCUNyZWF0ZUpiaWcyQ29udGV4dCgpOworICAgIEZYQ09ERUNfU1RBVFVTCQlTdGFydERlY29kZSh2b2lkKiBwSmJpZzJDb250ZXh0LCBGWF9EV09SRCB3aWR0aCwgRlhfRFdPUkQgaGVpZ2h0LCBGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBDQllURSBnbG9iYWxfZGF0YSwgRlhfRFdPUkQgZ2xvYmFsX3NpemUsIEZYX0xQQllURSBkZXN0X2J1ZiwgRlhfRFdPUkQgZGVzdF9waXRjaCwgSUZYX1BhdXNlKiBwUGF1c2UpOworCisgICAgRlhDT0RFQ19TVEFUVVMJCVN0YXJ0RGVjb2RlKHZvaWQqIHBKYmlnMkNvbnRleHQsIElGWF9GaWxlUmVhZCogZmlsZV9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCYgd2lkdGgsIEZYX0RXT1JEJiBoZWlnaHQsIEZYX0RXT1JEJiBwaXRjaCwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgSUZYX1BhdXNlKiBwUGF1c2UpOworICAgIEZYQ09ERUNfU1RBVFVTCQlDb250aW51ZURlY29kZSh2b2lkKiBwSmJpZzJDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSk7CisgICAgdm9pZAkJCQlEZXN0cm95SmJpZzJDb250ZXh0KHZvaWQqIHBKYmlnMkNvbnRleHQpOworICAgIENQREZfSmJpZzJJbnRlcmZhY2UJbV9Nb2R1bGU7Citwcml2YXRlOgorfTsKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvY29kZWMvZnhfY29kZWMuY3BwIGIvY29yZS9zcmMvZnhjb2RlYy9jb2RlYy9meF9jb2RlYy5jcHAKaW5kZXggMmY1ODZjYS4uYzZiM2NjZSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9jb2RlYy9meF9jb2RlYy5jcHAKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9jb2RlYy9meF9jb2RlYy5jcHAKQEAgLTEsNDQ3ICsxLDQ0NyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjb2RlYy9meF9jb2RlYy5oIg0KLSNpbmNsdWRlICJjb2RlY19pbnQuaCINCi1DQ29kZWNfTW9kdWxlTWdyOjpDQ29kZWNfTW9kdWxlTWdyKCkNCi17DQotICAgIG1fcEJhc2ljTW9kdWxlID0gRlhfTkVXIENDb2RlY19CYXNpY01vZHVsZTsNCi0gICAgbV9wRmF4TW9kdWxlID0gRlhfTkVXIENDb2RlY19GYXhNb2R1bGU7DQotICAgIG1fcEpwZWdNb2R1bGUgPSBGWF9ORVcgQ0NvZGVjX0pwZWdNb2R1bGU7DQotICAgIG1fcEpweE1vZHVsZSA9IEZYX05FVyBDQ29kZWNfSnB4TW9kdWxlOw0KLSAgICBtX3BKYmlnMk1vZHVsZSA9IEZYX05FVyBDQ29kZWNfSmJpZzJNb2R1bGU7DQotICAgIG1fcEljY01vZHVsZSA9IEZYX05FVyBDQ29kZWNfSWNjTW9kdWxlOw0KLSAgICBtX3BGbGF0ZU1vZHVsZSA9IEZYX05FVyBDQ29kZWNfRmxhdGVNb2R1bGU7DQotfQ0KLUNDb2RlY19Nb2R1bGVNZ3I6On5DQ29kZWNfTW9kdWxlTWdyKCkNCi17DQotICAgIGRlbGV0ZSBtX3BCYXNpY01vZHVsZTsNCi0gICAgZGVsZXRlIG1fcEZheE1vZHVsZTsNCi0gICAgZGVsZXRlIG1fcEpwZWdNb2R1bGU7DQotICAgIGRlbGV0ZSBtX3BGbGF0ZU1vZHVsZTsNCi0gICAgZGVsZXRlIG1fcEpweE1vZHVsZTsNCi0gICAgZGVsZXRlIG1fcEpiaWcyTW9kdWxlOw0KLSAgICBkZWxldGUgbV9wSWNjTW9kdWxlOw0KLX0NCi12b2lkIENDb2RlY19Nb2R1bGVNZ3I6OkluaXRKYmlnMkRlY29kZXIoKQ0KLXsNCi19DQotdm9pZCBDQ29kZWNfTW9kdWxlTWdyOjpJbml0SnB4RGVjb2RlcigpDQotew0KLX0NCi12b2lkIENDb2RlY19Nb2R1bGVNZ3I6OkluaXRJY2NEZWNvZGVyKCkNCi17DQotfQ0KLUNDb2RlY19TY2FubGluZURlY29kZXI6OkNDb2RlY19TY2FubGluZURlY29kZXIoKQ0KLXsNCi0gICAgbV9OZXh0TGluZSA9IC0xOw0KLSAgICBtX3BEYXRhQ2FjaGUgPSBOVUxMOw0KLSAgICBtX3BMYXN0U2NhbmxpbmUgPSBOVUxMOw0KLX0NCi1DQ29kZWNfU2NhbmxpbmVEZWNvZGVyOjp+Q0NvZGVjX1NjYW5saW5lRGVjb2RlcigpDQotew0KLSAgICBpZiAobV9wRGF0YUNhY2hlKSB7DQotICAgICAgICBGWF9GcmVlKG1fcERhdGFDYWNoZSk7DQotICAgIH0NCi19DQotRlhfTFBCWVRFIENDb2RlY19TY2FubGluZURlY29kZXI6OkdldFNjYW5saW5lKGludCBsaW5lKQ0KLXsNCi0gICAgaWYgKG1fcERhdGFDYWNoZSAmJiBsaW5lIDwgbV9wRGF0YUNhY2hlLT5tX25DYWNoZWRMaW5lcykgew0KLSAgICAgICAgcmV0dXJuICZtX3BEYXRhQ2FjaGUtPm1fRGF0YSArIGxpbmUgKiBtX1BpdGNoOw0KLSAgICB9DQotICAgIGlmIChtX05leHRMaW5lID09IGxpbmUgKyAxKSB7DQotICAgICAgICByZXR1cm4gbV9wTGFzdFNjYW5saW5lOw0KLSAgICB9DQotICAgIGlmIChtX05leHRMaW5lIDwgMCB8fCBtX05leHRMaW5lID4gbGluZSkgew0KLSAgICAgICAgaWYgKCF2X1Jld2luZCgpKSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBtX05leHRMaW5lID0gMDsNCi0gICAgfQ0KLSAgICB3aGlsZSAobV9OZXh0TGluZSA8IGxpbmUpIHsNCi0gICAgICAgIFJlYWROZXh0TGluZSgpOw0KLSAgICAgICAgbV9OZXh0TGluZSArKzsNCi0gICAgfQ0KLSAgICBtX3BMYXN0U2NhbmxpbmUgPSBSZWFkTmV4dExpbmUoKTsNCi0gICAgbV9OZXh0TGluZSArKzsNCi0gICAgcmV0dXJuIG1fcExhc3RTY2FubGluZTsNCi19DQotRlhfQk9PTCBDQ29kZWNfU2NhbmxpbmVEZWNvZGVyOjpTa2lwVG9TY2FubGluZShpbnQgbGluZSwgSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBpZiAobV9wRGF0YUNhY2hlICYmIGxpbmUgPCBtX3BEYXRhQ2FjaGUtPm1fbkNhY2hlZExpbmVzKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKG1fTmV4dExpbmUgPT0gbGluZSB8fCBtX05leHRMaW5lID09IGxpbmUgKyAxKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKG1fTmV4dExpbmUgPCAwIHx8IG1fTmV4dExpbmUgPiBsaW5lKSB7DQotICAgICAgICB2X1Jld2luZCgpOw0KLSAgICAgICAgbV9OZXh0TGluZSA9IDA7DQotICAgIH0NCi0gICAgbV9wTGFzdFNjYW5saW5lID0gTlVMTDsNCi0gICAgd2hpbGUgKG1fTmV4dExpbmUgPCBsaW5lKSB7DQotICAgICAgICBtX3BMYXN0U2NhbmxpbmUgPSBSZWFkTmV4dExpbmUoKTsNCi0gICAgICAgIG1fTmV4dExpbmUgKys7DQotICAgICAgICBpZiAocFBhdXNlICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotRlhfTFBCWVRFIENDb2RlY19TY2FubGluZURlY29kZXI6OlJlYWROZXh0TGluZSgpDQotew0KLSAgICBGWF9MUEJZVEUgcExpbmUgPSB2X0dldE5leHRMaW5lKCk7DQotICAgIGlmIChwTGluZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAobV9wRGF0YUNhY2hlICYmIG1fTmV4dExpbmUgPT0gbV9wRGF0YUNhY2hlLT5tX25DYWNoZWRMaW5lcykgew0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIoJm1fcERhdGFDYWNoZS0+bV9EYXRhICsgbV9OZXh0TGluZSAqIG1fUGl0Y2gsIHBMaW5lLCBtX1BpdGNoKTsNCi0gICAgICAgIG1fcERhdGFDYWNoZS0+bV9uQ2FjaGVkTGluZXMgKys7DQotICAgIH0NCi0gICAgcmV0dXJuIHBMaW5lOw0KLX0NCi12b2lkIENDb2RlY19TY2FubGluZURlY29kZXI6OkRvd25TY2FsZShpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0KQ0KLXsNCi0gICAgaWYgKGRlc3Rfd2lkdGggPCAwKSB7DQotICAgICAgICBkZXN0X3dpZHRoID0gLWRlc3Rfd2lkdGg7DQotICAgIH0NCi0gICAgaWYgKGRlc3RfaGVpZ2h0IDwgMCkgew0KLSAgICAgICAgZGVzdF9oZWlnaHQgPSAtZGVzdF9oZWlnaHQ7DQotICAgIH0NCi0gICAgdl9Eb3duU2NhbGUoZGVzdF93aWR0aCwgZGVzdF9oZWlnaHQpOw0KLSAgICBpZiAobV9wRGF0YUNhY2hlKSB7DQotICAgICAgICBpZiAobV9wRGF0YUNhY2hlLT5tX0hlaWdodCA9PSBtX091dHB1dEhlaWdodCAmJiBtX3BEYXRhQ2FjaGUtPm1fV2lkdGggPT0gbV9PdXRwdXRXaWR0aCkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0ZyZWUobV9wRGF0YUNhY2hlKTsNCi0gICAgICAgIG1fcERhdGFDYWNoZSA9IE5VTEw7DQotICAgIH0NCi0gICAgbV9wRGF0YUNhY2hlID0gKENDb2RlY19JbWFnZURhdGFDYWNoZSopRlhNRU1fRGVmYXVsdEFsbG9jKA0KLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKENDb2RlY19JbWFnZURhdGFDYWNoZSkgKyBtX1BpdGNoICogbV9PdXRwdXRIZWlnaHQsIEZYTUVNX05PTkxFQVZFKTsNCi0gICAgaWYgKG1fcERhdGFDYWNoZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbV9wRGF0YUNhY2hlLT5tX0hlaWdodCA9IG1fT3V0cHV0SGVpZ2h0Ow0KLSAgICBtX3BEYXRhQ2FjaGUtPm1fV2lkdGggPSBtX091dHB1dFdpZHRoOw0KLSAgICBtX3BEYXRhQ2FjaGUtPm1fbkNhY2hlZExpbmVzID0gMDsNCi19DQotRlhfQk9PTCBDQ29kZWNfQmFzaWNNb2R1bGU6OlJ1bkxlbmd0aEVuY29kZShjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwNCi0gICAgICAgIEZYX0RXT1JEJiBkZXN0X3NpemUpDQotew0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLWV4dGVybiAiQyIgZG91YmxlIEZYc3RydG9kKGNvbnN0IGNoYXIqIG5wdHIsIGNoYXIqKiBlbmRwdHIpDQotew0KLSAgICBkb3VibGUgcmV0ID0gMC4wOw0KLSAgICBjb25zdCBjaGFyKiBwdHIgPSBucHRyOw0KLSAgICBjb25zdCBjaGFyKiBleHBfcHRyID0gTlVMTDsNCi0gICAgaW50CWVfbnVtYmVyID0gMCwNCi0gICAgICAgIGVfc2lnbmFsID0gMCwNCi0gICAgICAgIGVfcG9pbnQgPSAwLA0KLSAgICAgICAgaXNfbmVnYXRpdmUgPSAwOw0KLSAgICBpbnQgZXhwX3JldCA9IDAsIGV4cF9zaWcgPSAxLA0KLSAgICAgICAgZnJhX3JldCA9IDAsIGZyYV9jb3VudCA9IDAsIGZyYV9iYXNlID0gMTsNCi0gICAgaWYobnB0ciA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMC4wOw0KLSAgICB9DQotICAgIGZvciAoOzsgcHRyKyspIHsNCi0gICAgICAgIGlmKCFlX251bWJlciAmJiAhZV9wb2ludCAmJiAoKnB0ciA9PSAnXHQnIHx8ICpwdHIgPT0gJyAnKSkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoKnB0ciA+PSAnMCcgJiYgKnB0ciA8PSAnOScpIHsNCi0gICAgICAgICAgICBpZighZV9udW1iZXIpIHsNCi0gICAgICAgICAgICAgICAgZV9udW1iZXIgPSAxOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZighZV9wb2ludCkgew0KLSAgICAgICAgICAgICAgICByZXQgKj0gMTA7DQotICAgICAgICAgICAgICAgIHJldCArPSAoKnB0ciAtICcwJyk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgZnJhX2NvdW50Kys7DQotICAgICAgICAgICAgICAgIGZyYV9yZXQgKj0gMTA7DQotICAgICAgICAgICAgICAgIGZyYV9yZXQgKz0gKCpwdHIgLSAnMCcpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKCFlX3BvaW50ICYmICpwdHIgPT0gJy4nKSB7DQotICAgICAgICAgICAgZV9wb2ludCA9IDE7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZighZV9udW1iZXIgJiYgIWVfcG9pbnQgJiYgIWVfc2lnbmFsKSB7DQotICAgICAgICAgICAgc3dpdGNoKCpwdHIpIHsNCi0gICAgICAgICAgICAgICAgY2FzZSAnLSc6DQotICAgICAgICAgICAgICAgICAgICBpc19uZWdhdGl2ZSA9IDE7DQotICAgICAgICAgICAgICAgIGNhc2UgJysnOg0KLSAgICAgICAgICAgICAgICAgICAgZV9zaWduYWwgPSAxOw0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoZV9udW1iZXIgJiYgKCpwdHIgPT0gJ2UnIHx8ICpwdHIgPT0gJ0UnKSkgew0KLSNkZWZpbmUgRVhQT05FTlRfREVURUNUKHB0cikJXA0KLSAgICBmb3IoOztwdHIrKyl7CQlcDQotICAgICAgICBpZigqcHRyIDwgJzAnIHx8ICpwdHIgPiAnOScpewlcDQotICAgICAgICAgICAgaWYoZW5kcHRyKQkqZW5kcHRyID0gKGNoYXIqKXB0cjsJXA0KLSAgICAgICAgICAgIGJyZWFrOwlcDQotICAgICAgICB9ZWxzZXsJCVwNCi0gICAgICAgICAgICBleHBfcmV0ICo9IDEwOwlcDQotICAgICAgICAgICAgZXhwX3JldCArPSAoKnB0ciAtICcwJyk7CVwNCi0gICAgICAgICAgICBjb250aW51ZTsJCVwNCi0gICAgICAgIH0JXA0KLSAgICB9DQotICAgICAgICAgICAgZXhwX3B0ciA9IHB0cisrOw0KLSAgICAgICAgICAgIGlmKCpwdHIgPT0gJysnIHx8ICpwdHIgPT0gJy0nKSB7DQotICAgICAgICAgICAgICAgIGV4cF9zaWcgPSAoKnB0cisrID09ICcrJykgPyAxIDogLTE7DQotICAgICAgICAgICAgICAgIGlmKCpwdHIgPCAnMCcgfHwgKnB0ciA+ICc5Jykgew0KLSAgICAgICAgICAgICAgICAgICAgaWYoZW5kcHRyKQl7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmVuZHB0ciA9IChjaGFyKilleHBfcHRyOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgRVhQT05FTlRfREVURUNUKHB0cik7DQotICAgICAgICAgICAgfSBlbHNlIGlmKCpwdHIgPj0gJzAnICYmICpwdHIgPD0gJzknKSB7DQotICAgICAgICAgICAgICAgIEVYUE9ORU5UX0RFVEVDVChwdHIpOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGlmKGVuZHB0cikJew0KLSAgICAgICAgICAgICAgICAgICAgKmVuZHB0ciA9IChjaGFyKilleHBfcHRyOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0jdW5kZWYgRVhQT05FTlRfREVURUNUDQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBpZihwdHIgIT0gbnB0ciAmJiAhZV9udW1iZXIpIHsNCi0gICAgICAgICAgICBpZihlbmRwdHIpCXsNCi0gICAgICAgICAgICAgICAgKmVuZHB0ciA9IChjaGFyKilucHRyOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKGVuZHB0cikJew0KLSAgICAgICAgICAgICplbmRwdHIgPSAoY2hhciopcHRyOw0KLSAgICAgICAgfQ0KLSAgICAgICAgYnJlYWs7DQotICAgIH0NCi0gICAgd2hpbGUoZnJhX2NvdW50LS0pIHsNCi0gICAgICAgIGZyYV9iYXNlICo9IDEwOw0KLSAgICB9DQotICAgIHJldCArPSAoZG91YmxlKWZyYV9yZXQgLyAoZG91YmxlKWZyYV9iYXNlOw0KLSAgICBpZihleHBfc2lnID09IDEpIHsNCi0gICAgICAgIHdoaWxlKGV4cF9yZXQtLSkgew0KLSAgICAgICAgICAgIHJldCAqPSAxMC4wOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgd2hpbGUoZXhwX3JldC0tKSB7DQotICAgICAgICAgICAgcmV0IC89IDEwLjA7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIGlzX25lZ2F0aXZlID8gLXJldCA6IHJldDsNCi19DQotRlhfQk9PTCBDQ29kZWNfQmFzaWNNb2R1bGU6OkE4NUVuY29kZShjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEJiBkZXN0X3NpemUpDQotew0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUNDb2RlY19Nb2R1bGVNZ3IqIENDb2RlY19Nb2R1bGVNZ3I6OkNyZWF0ZSgpDQotew0KLSAgICByZXR1cm4gRlhfTkVXIENDb2RlY19Nb2R1bGVNZ3I7DQotfQ0KLXZvaWQgQ0NvZGVjX01vZHVsZU1ncjo6RGVzdHJveSgpDQotew0KLSAgICBkZWxldGUgdGhpczsNCi19DQotY2xhc3MgQ0NvZGVjX1JMU2NhbmxpbmVEZWNvZGVyIDogcHVibGljIENDb2RlY19TY2FubGluZURlY29kZXINCi17DQotcHVibGljOg0KLSAgICBDQ29kZWNfUkxTY2FubGluZURlY29kZXIoKTsNCi0gICAgdmlydHVhbCB+Q0NvZGVjX1JMU2NhbmxpbmVEZWNvZGVyKCk7DQotICAgIEZYX0JPT0wJCQkJQ3JlYXRlKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG5Db21wcywgaW50IGJwYyk7DQotICAgIHZpcnR1YWwgdm9pZAkJdl9Eb3duU2NhbGUoaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCkge30NCi0gICAgdmlydHVhbCBGWF9CT09MCQl2X1Jld2luZCgpOw0KLSAgICB2aXJ0dWFsIEZYX0xQQllURQl2X0dldE5leHRMaW5lKCk7DQotICAgIHZpcnR1YWwgRlhfRFdPUkQJR2V0U3JjT2Zmc2V0KCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fU3JjT2Zmc2V0Ow0KLSAgICB9DQotcHJvdGVjdGVkOg0KLSAgICBGWF9CT09MCQkJCUNoZWNrRGVzdFNpemUoKTsNCi0gICAgdm9pZAkJCQlHZXROZXh0T3BlcmF0b3IoKTsNCi0gICAgdm9pZAkJCQlVcGRhdGVPcGVyYXRvcihGWF9CWVRFIHVzZWRfYnl0ZXMpOw0KLQ0KLSAgICBGWF9MUEJZVEUJCQltX3BTY2FubGluZTsNCi0gICAgRlhfTFBDQllURQkJCW1fcFNyY0J1ZjsNCi0gICAgRlhfRFdPUkQJCQltX1NyY1NpemU7DQotICAgIEZYX0RXT1JECQkJbV9kd0xpbmVCeXRlczsNCi0gICAgRlhfRFdPUkQJCQltX1NyY09mZnNldDsNCi0gICAgRlhfQk9PTAkJCQltX2JFT0Q7DQotICAgIEZYX0JZVEUJCQkJbV9PcGVyYXRvcjsNCi19Ow0KLUNDb2RlY19STFNjYW5saW5lRGVjb2Rlcjo6Q0NvZGVjX1JMU2NhbmxpbmVEZWNvZGVyKCkNCi0gICAgOiBtX3BTY2FubGluZShOVUxMKQ0KLSAgICAsIG1fcFNyY0J1ZihOVUxMKQ0KLSAgICAsIG1fU3JjU2l6ZSgwKQ0KLSAgICAsIG1fZHdMaW5lQnl0ZXMoMCkNCi0gICAgLCBtX1NyY09mZnNldCgwKQ0KLSAgICAsIG1fYkVPRChGQUxTRSkNCi0gICAgLCBtX09wZXJhdG9yKDApDQotew0KLX0NCi1DQ29kZWNfUkxTY2FubGluZURlY29kZXI6On5DQ29kZWNfUkxTY2FubGluZURlY29kZXIoKQ0KLXsNCi0gICAgaWYgKG1fcFNjYW5saW5lKSB7DQotICAgICAgICBGWF9GcmVlKG1fcFNjYW5saW5lKTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENDb2RlY19STFNjYW5saW5lRGVjb2Rlcjo6Q2hlY2tEZXN0U2l6ZSgpDQotew0KLSAgICBGWF9EV09SRCBpID0gMDsNCi0gICAgRlhfRFdPUkQgb2xkX3NpemUgPSAwOw0KLSAgICBGWF9EV09SRCBkZXN0X3NpemUgPSAwOw0KLSAgICB3aGlsZSAoaSA8IG1fU3JjU2l6ZSkgew0KLSAgICAgICAgaWYgKG1fcFNyY0J1ZltpXSA8IDEyOCkgew0KLSAgICAgICAgICAgIG9sZF9zaXplID0gZGVzdF9zaXplOw0KLSAgICAgICAgICAgIGRlc3Rfc2l6ZSArPSBtX3BTcmNCdWZbaV0gKyAxOw0KLSAgICAgICAgICAgIGlmIChkZXN0X3NpemUgPCBvbGRfc2l6ZSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGkgKz0gbV9wU3JjQnVmW2ldICsgMjsNCi0gICAgICAgIH0gZWxzZSBpZiAobV9wU3JjQnVmW2ldID4gMTI4KSB7DQotICAgICAgICAgICAgb2xkX3NpemUgPSBkZXN0X3NpemU7DQotICAgICAgICAgICAgZGVzdF9zaXplICs9IDI1NyAtIG1fcFNyY0J1ZltpXTsNCi0gICAgICAgICAgICBpZiAoZGVzdF9zaXplIDwgb2xkX3NpemUpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpICs9IDI7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmICgoKEZYX0RXT1JEKW1fT3JpZ1dpZHRoICogbV9uQ29tcHMgKiBtX2JwYyAqIG1fT3JpZ0hlaWdodCArIDcpIC8gOCA+IGRlc3Rfc2l6ZSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENDb2RlY19STFNjYW5saW5lRGVjb2Rlcjo6Q3JlYXRlKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG5Db21wcywgaW50IGJwYykNCi17DQotICAgIG1fcFNyY0J1ZiA9IHNyY19idWY7DQotICAgIG1fU3JjU2l6ZSA9IHNyY19zaXplOw0KLSAgICBtX091dHB1dFdpZHRoID0gbV9PcmlnV2lkdGggPSB3aWR0aDsNCi0gICAgbV9PdXRwdXRIZWlnaHQgPSBtX09yaWdIZWlnaHQgPSBoZWlnaHQ7DQotICAgIG1fbkNvbXBzID0gbkNvbXBzOw0KLSAgICBtX2JwYyA9IGJwYzsNCi0gICAgbV9iQ29sb3JUcmFuc2Zvcm1lZCA9IEZBTFNFOw0KLSAgICBtX0Rvd25TY2FsZSA9IDE7DQotICAgIG1fUGl0Y2ggPSAod2lkdGggKiBuQ29tcHMgKiBicGMgKyAzMSkgLyAzMiAqIDQ7DQotICAgIG1fZHdMaW5lQnl0ZXMgPSAod2lkdGggKiBuQ29tcHMgKiBicGMgKyA3KSAvIDg7DQotICAgIG1fcFNjYW5saW5lID0gRlhfQWxsb2MoRlhfQllURSwgbV9QaXRjaCk7DQotICAgIGlmIChtX3BTY2FubGluZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgRlhTWVNfbWVtc2V0MzIobV9wU2NhbmxpbmUsIDAsIG1fUGl0Y2gpOw0KLSAgICByZXR1cm4gQ2hlY2tEZXN0U2l6ZSgpOw0KLX0NCi1GWF9CT09MIENDb2RlY19STFNjYW5saW5lRGVjb2Rlcjo6dl9SZXdpbmQoKQ0KLXsNCi0gICAgRlhTWVNfbWVtc2V0MzIobV9wU2NhbmxpbmUsIDAsIG1fUGl0Y2gpOw0KLSAgICBtX1NyY09mZnNldCA9IDA7DQotICAgIG1fYkVPRCA9IEZBTFNFOw0KLSAgICBtX09wZXJhdG9yID0gMDsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0xQQllURSBDQ29kZWNfUkxTY2FubGluZURlY29kZXI6OnZfR2V0TmV4dExpbmUoKQ0KLXsNCi0gICAgaWYgKG1fU3JjT2Zmc2V0ID09IDApIHsNCi0gICAgICAgIEdldE5leHRPcGVyYXRvcigpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYgKG1fYkVPRCkgew0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIEZYU1lTX21lbXNldDMyKG1fcFNjYW5saW5lLCAwLCBtX1BpdGNoKTsNCi0gICAgRlhfRFdPUkQgY29sX3BvcyA9IDA7DQotICAgIEZYX0JPT0wJZW9sID0gRkFMU0U7DQotICAgIHdoaWxlIChtX1NyY09mZnNldCA8IG1fU3JjU2l6ZSAmJiAhZW9sKSB7DQotICAgICAgICBpZiAobV9PcGVyYXRvciA8IDEyOCkgew0KLSAgICAgICAgICAgIEZYX0RXT1JEIGNvcHlfbGVuID0gbV9PcGVyYXRvciArIDE7DQotICAgICAgICAgICAgaWYgKGNvbF9wb3MgKyBjb3B5X2xlbiA+PSBtX2R3TGluZUJ5dGVzKSB7DQotICAgICAgICAgICAgICAgIGNvcHlfbGVuID0gbV9kd0xpbmVCeXRlcyAtIGNvbF9wb3M7DQotICAgICAgICAgICAgICAgIGVvbCA9IFRSVUU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChjb3B5X2xlbiA+PSBtX1NyY1NpemUgLSBtX1NyY09mZnNldCkgew0KLSAgICAgICAgICAgICAgICBjb3B5X2xlbiA9IG1fU3JjU2l6ZSAtIG1fU3JjT2Zmc2V0Ow0KLSAgICAgICAgICAgICAgICBtX2JFT0QgPSBUUlVFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BTY2FubGluZSArIGNvbF9wb3MsIG1fcFNyY0J1ZiArIG1fU3JjT2Zmc2V0LCBjb3B5X2xlbik7DQotICAgICAgICAgICAgY29sX3BvcyArPSBjb3B5X2xlbjsNCi0gICAgICAgICAgICBVcGRhdGVPcGVyYXRvcigoRlhfQllURSljb3B5X2xlbik7DQotICAgICAgICB9IGVsc2UgaWYgKG1fT3BlcmF0b3IgPiAxMjgpIHsNCi0gICAgICAgICAgICBpbnQgZmlsbCA9IDA7DQotICAgICAgICAgICAgaWYgKG1fU3JjT2Zmc2V0IC0gMSA8IG1fU3JjU2l6ZSAtIDEpIHsNCi0gICAgICAgICAgICAgICAgZmlsbCA9IG1fcFNyY0J1ZlttX1NyY09mZnNldF07DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIEZYX0RXT1JEIGR1cGxpY2F0ZV9sZW4gPSAyNTcgLSBtX09wZXJhdG9yOw0KLSAgICAgICAgICAgIGlmIChjb2xfcG9zICsgZHVwbGljYXRlX2xlbiA+PSBtX2R3TGluZUJ5dGVzKSB7DQotICAgICAgICAgICAgICAgIGR1cGxpY2F0ZV9sZW4gPSBtX2R3TGluZUJ5dGVzIC0gY29sX3BvczsNCi0gICAgICAgICAgICAgICAgZW9sID0gVFJVRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgRlhTWVNfbWVtc2V0OChtX3BTY2FubGluZSArIGNvbF9wb3MsIGZpbGwsIGR1cGxpY2F0ZV9sZW4pOw0KLSAgICAgICAgICAgIGNvbF9wb3MgKz0gZHVwbGljYXRlX2xlbjsNCi0gICAgICAgICAgICBVcGRhdGVPcGVyYXRvcigoRlhfQllURSlkdXBsaWNhdGVfbGVuKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbV9iRU9EID0gVFJVRTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wU2NhbmxpbmU7DQotfQ0KLXZvaWQgQ0NvZGVjX1JMU2NhbmxpbmVEZWNvZGVyOjpHZXROZXh0T3BlcmF0b3IoKQ0KLXsNCi0gICAgaWYgKG1fU3JjT2Zmc2V0ID49IG1fU3JjU2l6ZSkgew0KLSAgICAgICAgbV9PcGVyYXRvciA9IDEyODsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX09wZXJhdG9yID0gbV9wU3JjQnVmW21fU3JjT2Zmc2V0XTsNCi0gICAgbV9TcmNPZmZzZXQgKys7DQotfQ0KLXZvaWQgQ0NvZGVjX1JMU2NhbmxpbmVEZWNvZGVyOjpVcGRhdGVPcGVyYXRvcihGWF9CWVRFIHVzZWRfYnl0ZXMpDQotew0KLSAgICBpZiAodXNlZF9ieXRlcyA9PSAwKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKG1fT3BlcmF0b3IgPCAxMjgpIHsNCi0gICAgICAgIEZYU1lTX2Fzc2VydCgoRlhfRFdPUkQpbV9PcGVyYXRvciArIDEgPj0gdXNlZF9ieXRlcyk7DQotICAgICAgICBpZiAodXNlZF9ieXRlcyA9PSBtX09wZXJhdG9yICsgMSkgew0KLSAgICAgICAgICAgIG1fU3JjT2Zmc2V0ICs9IHVzZWRfYnl0ZXM7DQotICAgICAgICAgICAgR2V0TmV4dE9wZXJhdG9yKCk7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9PcGVyYXRvciAtPSB1c2VkX2J5dGVzOw0KLSAgICAgICAgbV9TcmNPZmZzZXQgKz0gdXNlZF9ieXRlczsNCi0gICAgICAgIGlmIChtX1NyY09mZnNldCA+PSBtX1NyY1NpemUpIHsNCi0gICAgICAgICAgICBtX09wZXJhdG9yID0gMTI4Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX0JZVEUgY291bnQgPSAyNTcgLSBtX09wZXJhdG9yOw0KLSAgICBGWFNZU19hc3NlcnQoKEZYX0RXT1JEKWNvdW50ID49IHVzZWRfYnl0ZXMpOw0KLSAgICBpZiAodXNlZF9ieXRlcyA9PSBjb3VudCkgew0KLSAgICAgICAgbV9TcmNPZmZzZXQgKys7DQotICAgICAgICBHZXROZXh0T3BlcmF0b3IoKTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBjb3VudCAtPSB1c2VkX2J5dGVzOw0KLSAgICBtX09wZXJhdG9yID0gMjU3IC0gY291bnQ7DQotfQ0KLUlDb2RlY19TY2FubGluZURlY29kZXIqIENDb2RlY19CYXNpY01vZHVsZTo6Q3JlYXRlUnVuTGVuZ3RoRGVjb2RlcihGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsDQotICAgICAgICBpbnQgbkNvbXBzLCBpbnQgYnBjKQ0KLXsNCi0gICAgQ0NvZGVjX1JMU2NhbmxpbmVEZWNvZGVyKiBwUkxTY2FubGluZURlY29kZXIgPSBGWF9ORVcgQ0NvZGVjX1JMU2NhbmxpbmVEZWNvZGVyOw0KLSAgICBpZiAocFJMU2NhbmxpbmVEZWNvZGVyID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmICghcFJMU2NhbmxpbmVEZWNvZGVyLT5DcmVhdGUoc3JjX2J1Ziwgc3JjX3NpemUsIHdpZHRoLCBoZWlnaHQsIG5Db21wcywgYnBjKSkgew0KLSAgICAgICAgZGVsZXRlIHBSTFNjYW5saW5lRGVjb2RlcjsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiBwUkxTY2FubGluZURlY29kZXI7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaCIKKyNpbmNsdWRlICJjb2RlY19pbnQuaCIKK0NDb2RlY19Nb2R1bGVNZ3I6OkNDb2RlY19Nb2R1bGVNZ3IoKQoreworICAgIG1fcEJhc2ljTW9kdWxlID0gRlhfTkVXIENDb2RlY19CYXNpY01vZHVsZTsKKyAgICBtX3BGYXhNb2R1bGUgPSBGWF9ORVcgQ0NvZGVjX0ZheE1vZHVsZTsKKyAgICBtX3BKcGVnTW9kdWxlID0gRlhfTkVXIENDb2RlY19KcGVnTW9kdWxlOworICAgIG1fcEpweE1vZHVsZSA9IEZYX05FVyBDQ29kZWNfSnB4TW9kdWxlOworICAgIG1fcEpiaWcyTW9kdWxlID0gRlhfTkVXIENDb2RlY19KYmlnMk1vZHVsZTsKKyAgICBtX3BJY2NNb2R1bGUgPSBGWF9ORVcgQ0NvZGVjX0ljY01vZHVsZTsKKyAgICBtX3BGbGF0ZU1vZHVsZSA9IEZYX05FVyBDQ29kZWNfRmxhdGVNb2R1bGU7Cit9CitDQ29kZWNfTW9kdWxlTWdyOjp+Q0NvZGVjX01vZHVsZU1ncigpCit7CisgICAgZGVsZXRlIG1fcEJhc2ljTW9kdWxlOworICAgIGRlbGV0ZSBtX3BGYXhNb2R1bGU7CisgICAgZGVsZXRlIG1fcEpwZWdNb2R1bGU7CisgICAgZGVsZXRlIG1fcEZsYXRlTW9kdWxlOworICAgIGRlbGV0ZSBtX3BKcHhNb2R1bGU7CisgICAgZGVsZXRlIG1fcEpiaWcyTW9kdWxlOworICAgIGRlbGV0ZSBtX3BJY2NNb2R1bGU7Cit9Cit2b2lkIENDb2RlY19Nb2R1bGVNZ3I6OkluaXRKYmlnMkRlY29kZXIoKQoreworfQordm9pZCBDQ29kZWNfTW9kdWxlTWdyOjpJbml0SnB4RGVjb2RlcigpCit7Cit9Cit2b2lkIENDb2RlY19Nb2R1bGVNZ3I6OkluaXRJY2NEZWNvZGVyKCkKK3sKK30KK0NDb2RlY19TY2FubGluZURlY29kZXI6OkNDb2RlY19TY2FubGluZURlY29kZXIoKQoreworICAgIG1fTmV4dExpbmUgPSAtMTsKKyAgICBtX3BEYXRhQ2FjaGUgPSBOVUxMOworICAgIG1fcExhc3RTY2FubGluZSA9IE5VTEw7Cit9CitDQ29kZWNfU2NhbmxpbmVEZWNvZGVyOjp+Q0NvZGVjX1NjYW5saW5lRGVjb2RlcigpCit7CisgICAgaWYgKG1fcERhdGFDYWNoZSkgeworICAgICAgICBGWF9GcmVlKG1fcERhdGFDYWNoZSk7CisgICAgfQorfQorRlhfTFBCWVRFIENDb2RlY19TY2FubGluZURlY29kZXI6OkdldFNjYW5saW5lKGludCBsaW5lKQoreworICAgIGlmIChtX3BEYXRhQ2FjaGUgJiYgbGluZSA8IG1fcERhdGFDYWNoZS0+bV9uQ2FjaGVkTGluZXMpIHsKKyAgICAgICAgcmV0dXJuICZtX3BEYXRhQ2FjaGUtPm1fRGF0YSArIGxpbmUgKiBtX1BpdGNoOworICAgIH0KKyAgICBpZiAobV9OZXh0TGluZSA9PSBsaW5lICsgMSkgeworICAgICAgICByZXR1cm4gbV9wTGFzdFNjYW5saW5lOworICAgIH0KKyAgICBpZiAobV9OZXh0TGluZSA8IDAgfHwgbV9OZXh0TGluZSA+IGxpbmUpIHsKKyAgICAgICAgaWYgKCF2X1Jld2luZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBtX05leHRMaW5lID0gMDsKKyAgICB9CisgICAgd2hpbGUgKG1fTmV4dExpbmUgPCBsaW5lKSB7CisgICAgICAgIFJlYWROZXh0TGluZSgpOworICAgICAgICBtX05leHRMaW5lICsrOworICAgIH0KKyAgICBtX3BMYXN0U2NhbmxpbmUgPSBSZWFkTmV4dExpbmUoKTsKKyAgICBtX05leHRMaW5lICsrOworICAgIHJldHVybiBtX3BMYXN0U2NhbmxpbmU7Cit9CitGWF9CT09MIENDb2RlY19TY2FubGluZURlY29kZXI6OlNraXBUb1NjYW5saW5lKGludCBsaW5lLCBJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBpZiAobV9wRGF0YUNhY2hlICYmIGxpbmUgPCBtX3BEYXRhQ2FjaGUtPm1fbkNhY2hlZExpbmVzKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKG1fTmV4dExpbmUgPT0gbGluZSB8fCBtX05leHRMaW5lID09IGxpbmUgKyAxKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKG1fTmV4dExpbmUgPCAwIHx8IG1fTmV4dExpbmUgPiBsaW5lKSB7CisgICAgICAgIHZfUmV3aW5kKCk7CisgICAgICAgIG1fTmV4dExpbmUgPSAwOworICAgIH0KKyAgICBtX3BMYXN0U2NhbmxpbmUgPSBOVUxMOworICAgIHdoaWxlIChtX05leHRMaW5lIDwgbGluZSkgeworICAgICAgICBtX3BMYXN0U2NhbmxpbmUgPSBSZWFkTmV4dExpbmUoKTsKKyAgICAgICAgbV9OZXh0TGluZSArKzsKKyAgICAgICAgaWYgKHBQYXVzZSAmJiBwUGF1c2UtPk5lZWRUb1BhdXNlTm93KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK0ZYX0xQQllURSBDQ29kZWNfU2NhbmxpbmVEZWNvZGVyOjpSZWFkTmV4dExpbmUoKQoreworICAgIEZYX0xQQllURSBwTGluZSA9IHZfR2V0TmV4dExpbmUoKTsKKyAgICBpZiAocExpbmUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKG1fcERhdGFDYWNoZSAmJiBtX05leHRMaW5lID09IG1fcERhdGFDYWNoZS0+bV9uQ2FjaGVkTGluZXMpIHsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIoJm1fcERhdGFDYWNoZS0+bV9EYXRhICsgbV9OZXh0TGluZSAqIG1fUGl0Y2gsIHBMaW5lLCBtX1BpdGNoKTsKKyAgICAgICAgbV9wRGF0YUNhY2hlLT5tX25DYWNoZWRMaW5lcyArKzsKKyAgICB9CisgICAgcmV0dXJuIHBMaW5lOworfQordm9pZCBDQ29kZWNfU2NhbmxpbmVEZWNvZGVyOjpEb3duU2NhbGUoaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCkKK3sKKyAgICBpZiAoZGVzdF93aWR0aCA8IDApIHsKKyAgICAgICAgZGVzdF93aWR0aCA9IC1kZXN0X3dpZHRoOworICAgIH0KKyAgICBpZiAoZGVzdF9oZWlnaHQgPCAwKSB7CisgICAgICAgIGRlc3RfaGVpZ2h0ID0gLWRlc3RfaGVpZ2h0OworICAgIH0KKyAgICB2X0Rvd25TY2FsZShkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCk7CisgICAgaWYgKG1fcERhdGFDYWNoZSkgeworICAgICAgICBpZiAobV9wRGF0YUNhY2hlLT5tX0hlaWdodCA9PSBtX091dHB1dEhlaWdodCAmJiBtX3BEYXRhQ2FjaGUtPm1fV2lkdGggPT0gbV9PdXRwdXRXaWR0aCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEZYX0ZyZWUobV9wRGF0YUNhY2hlKTsKKyAgICAgICAgbV9wRGF0YUNhY2hlID0gTlVMTDsKKyAgICB9CisgICAgbV9wRGF0YUNhY2hlID0gKENDb2RlY19JbWFnZURhdGFDYWNoZSopRlhNRU1fRGVmYXVsdEFsbG9jKAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoQ0NvZGVjX0ltYWdlRGF0YUNhY2hlKSArIG1fUGl0Y2ggKiBtX091dHB1dEhlaWdodCwgRlhNRU1fTk9OTEVBVkUpOworICAgIGlmIChtX3BEYXRhQ2FjaGUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcERhdGFDYWNoZS0+bV9IZWlnaHQgPSBtX091dHB1dEhlaWdodDsKKyAgICBtX3BEYXRhQ2FjaGUtPm1fV2lkdGggPSBtX091dHB1dFdpZHRoOworICAgIG1fcERhdGFDYWNoZS0+bV9uQ2FjaGVkTGluZXMgPSAwOworfQorRlhfQk9PTCBDQ29kZWNfQmFzaWNNb2R1bGU6OlJ1bkxlbmd0aEVuY29kZShjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwKKyAgICAgICAgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkKK3sKKyAgICByZXR1cm4gRkFMU0U7Cit9CitleHRlcm4gIkMiIGRvdWJsZSBGWHN0cnRvZChjb25zdCBjaGFyKiBucHRyLCBjaGFyKiogZW5kcHRyKQoreworICAgIGRvdWJsZSByZXQgPSAwLjA7CisgICAgY29uc3QgY2hhciogcHRyID0gbnB0cjsKKyAgICBjb25zdCBjaGFyKiBleHBfcHRyID0gTlVMTDsKKyAgICBpbnQJZV9udW1iZXIgPSAwLAorICAgICAgICBlX3NpZ25hbCA9IDAsCisgICAgICAgIGVfcG9pbnQgPSAwLAorICAgICAgICBpc19uZWdhdGl2ZSA9IDA7CisgICAgaW50IGV4cF9yZXQgPSAwLCBleHBfc2lnID0gMSwKKyAgICAgICAgZnJhX3JldCA9IDAsIGZyYV9jb3VudCA9IDAsIGZyYV9iYXNlID0gMTsKKyAgICBpZihucHRyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDAuMDsKKyAgICB9CisgICAgZm9yICg7OyBwdHIrKykgeworICAgICAgICBpZighZV9udW1iZXIgJiYgIWVfcG9pbnQgJiYgKCpwdHIgPT0gJ1x0JyB8fCAqcHRyID09ICcgJykpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmKCpwdHIgPj0gJzAnICYmICpwdHIgPD0gJzknKSB7CisgICAgICAgICAgICBpZighZV9udW1iZXIpIHsKKyAgICAgICAgICAgICAgICBlX251bWJlciA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZighZV9wb2ludCkgeworICAgICAgICAgICAgICAgIHJldCAqPSAxMDsKKyAgICAgICAgICAgICAgICByZXQgKz0gKCpwdHIgLSAnMCcpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmcmFfY291bnQrKzsKKyAgICAgICAgICAgICAgICBmcmFfcmV0ICo9IDEwOworICAgICAgICAgICAgICAgIGZyYV9yZXQgKz0gKCpwdHIgLSAnMCcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYoIWVfcG9pbnQgJiYgKnB0ciA9PSAnLicpIHsKKyAgICAgICAgICAgIGVfcG9pbnQgPSAxOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYoIWVfbnVtYmVyICYmICFlX3BvaW50ICYmICFlX3NpZ25hbCkgeworICAgICAgICAgICAgc3dpdGNoKCpwdHIpIHsKKyAgICAgICAgICAgICAgICBjYXNlICctJzoKKyAgICAgICAgICAgICAgICAgICAgaXNfbmVnYXRpdmUgPSAxOworICAgICAgICAgICAgICAgIGNhc2UgJysnOgorICAgICAgICAgICAgICAgICAgICBlX3NpZ25hbCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmKGVfbnVtYmVyICYmICgqcHRyID09ICdlJyB8fCAqcHRyID09ICdFJykpIHsKKyNkZWZpbmUgRVhQT05FTlRfREVURUNUKHB0cikJXAorICAgIGZvcig7O3B0cisrKXsJCVwKKyAgICAgICAgaWYoKnB0ciA8ICcwJyB8fCAqcHRyID4gJzknKXsJXAorICAgICAgICAgICAgaWYoZW5kcHRyKQkqZW5kcHRyID0gKGNoYXIqKXB0cjsJXAorICAgICAgICAgICAgYnJlYWs7CVwKKyAgICAgICAgfWVsc2V7CQlcCisgICAgICAgICAgICBleHBfcmV0ICo9IDEwOwlcCisgICAgICAgICAgICBleHBfcmV0ICs9ICgqcHRyIC0gJzAnKTsJXAorICAgICAgICAgICAgY29udGludWU7CQlcCisgICAgICAgIH0JXAorICAgIH0KKyAgICAgICAgICAgIGV4cF9wdHIgPSBwdHIrKzsKKyAgICAgICAgICAgIGlmKCpwdHIgPT0gJysnIHx8ICpwdHIgPT0gJy0nKSB7CisgICAgICAgICAgICAgICAgZXhwX3NpZyA9ICgqcHRyKysgPT0gJysnKSA/IDEgOiAtMTsKKyAgICAgICAgICAgICAgICBpZigqcHRyIDwgJzAnIHx8ICpwdHIgPiAnOScpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoZW5kcHRyKQl7CisgICAgICAgICAgICAgICAgICAgICAgICAqZW5kcHRyID0gKGNoYXIqKWV4cF9wdHI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEVYUE9ORU5UX0RFVEVDVChwdHIpOworICAgICAgICAgICAgfSBlbHNlIGlmKCpwdHIgPj0gJzAnICYmICpwdHIgPD0gJzknKSB7CisgICAgICAgICAgICAgICAgRVhQT05FTlRfREVURUNUKHB0cik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmKGVuZHB0cikJeworICAgICAgICAgICAgICAgICAgICAqZW5kcHRyID0gKGNoYXIqKWV4cF9wdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorI3VuZGVmIEVYUE9ORU5UX0RFVEVDVAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYocHRyICE9IG5wdHIgJiYgIWVfbnVtYmVyKSB7CisgICAgICAgICAgICBpZihlbmRwdHIpCXsKKyAgICAgICAgICAgICAgICAqZW5kcHRyID0gKGNoYXIqKW5wdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZihlbmRwdHIpCXsKKyAgICAgICAgICAgICplbmRwdHIgPSAoY2hhciopcHRyOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB3aGlsZShmcmFfY291bnQtLSkgeworICAgICAgICBmcmFfYmFzZSAqPSAxMDsKKyAgICB9CisgICAgcmV0ICs9IChkb3VibGUpZnJhX3JldCAvIChkb3VibGUpZnJhX2Jhc2U7CisgICAgaWYoZXhwX3NpZyA9PSAxKSB7CisgICAgICAgIHdoaWxlKGV4cF9yZXQtLSkgeworICAgICAgICAgICAgcmV0ICo9IDEwLjA7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICB3aGlsZShleHBfcmV0LS0pIHsKKyAgICAgICAgICAgIHJldCAvPSAxMC4wOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBpc19uZWdhdGl2ZSA/IC1yZXQgOiByZXQ7Cit9CitGWF9CT09MIENDb2RlY19CYXNpY01vZHVsZTo6QTg1RW5jb2RlKGNvbnN0IEZYX0JZVEUqIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBGWF9MUEJZVEUmIGRlc3RfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCYgZGVzdF9zaXplKQoreworICAgIHJldHVybiBGQUxTRTsKK30KK0NDb2RlY19Nb2R1bGVNZ3IqIENDb2RlY19Nb2R1bGVNZ3I6OkNyZWF0ZSgpCit7CisgICAgcmV0dXJuIEZYX05FVyBDQ29kZWNfTW9kdWxlTWdyOworfQordm9pZCBDQ29kZWNfTW9kdWxlTWdyOjpEZXN0cm95KCkKK3sKKyAgICBkZWxldGUgdGhpczsKK30KK2NsYXNzIENDb2RlY19STFNjYW5saW5lRGVjb2RlciA6IHB1YmxpYyBDQ29kZWNfU2NhbmxpbmVEZWNvZGVyCit7CitwdWJsaWM6CisgICAgQ0NvZGVjX1JMU2NhbmxpbmVEZWNvZGVyKCk7CisgICAgdmlydHVhbCB+Q0NvZGVjX1JMU2NhbmxpbmVEZWNvZGVyKCk7CisgICAgRlhfQk9PTAkJCQlDcmVhdGUoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbkNvbXBzLCBpbnQgYnBjKTsKKyAgICB2aXJ0dWFsIHZvaWQJCXZfRG93blNjYWxlKGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQpIHt9CisgICAgdmlydHVhbCBGWF9CT09MCQl2X1Jld2luZCgpOworICAgIHZpcnR1YWwgRlhfTFBCWVRFCXZfR2V0TmV4dExpbmUoKTsKKyAgICB2aXJ0dWFsIEZYX0RXT1JECUdldFNyY09mZnNldCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9TcmNPZmZzZXQ7CisgICAgfQorcHJvdGVjdGVkOgorICAgIEZYX0JPT0wJCQkJQ2hlY2tEZXN0U2l6ZSgpOworICAgIHZvaWQJCQkJR2V0TmV4dE9wZXJhdG9yKCk7CisgICAgdm9pZAkJCQlVcGRhdGVPcGVyYXRvcihGWF9CWVRFIHVzZWRfYnl0ZXMpOworCisgICAgRlhfTFBCWVRFCQkJbV9wU2NhbmxpbmU7CisgICAgRlhfTFBDQllURQkJCW1fcFNyY0J1ZjsKKyAgICBGWF9EV09SRAkJCW1fU3JjU2l6ZTsKKyAgICBGWF9EV09SRAkJCW1fZHdMaW5lQnl0ZXM7CisgICAgRlhfRFdPUkQJCQltX1NyY09mZnNldDsKKyAgICBGWF9CT09MCQkJCW1fYkVPRDsKKyAgICBGWF9CWVRFCQkJCW1fT3BlcmF0b3I7Cit9OworQ0NvZGVjX1JMU2NhbmxpbmVEZWNvZGVyOjpDQ29kZWNfUkxTY2FubGluZURlY29kZXIoKQorICAgIDogbV9wU2NhbmxpbmUoTlVMTCkKKyAgICAsIG1fcFNyY0J1ZihOVUxMKQorICAgICwgbV9TcmNTaXplKDApCisgICAgLCBtX2R3TGluZUJ5dGVzKDApCisgICAgLCBtX1NyY09mZnNldCgwKQorICAgICwgbV9iRU9EKEZBTFNFKQorICAgICwgbV9PcGVyYXRvcigwKQoreworfQorQ0NvZGVjX1JMU2NhbmxpbmVEZWNvZGVyOjp+Q0NvZGVjX1JMU2NhbmxpbmVEZWNvZGVyKCkKK3sKKyAgICBpZiAobV9wU2NhbmxpbmUpIHsKKyAgICAgICAgRlhfRnJlZShtX3BTY2FubGluZSk7CisgICAgfQorfQorRlhfQk9PTCBDQ29kZWNfUkxTY2FubGluZURlY29kZXI6OkNoZWNrRGVzdFNpemUoKQoreworICAgIEZYX0RXT1JEIGkgPSAwOworICAgIEZYX0RXT1JEIG9sZF9zaXplID0gMDsKKyAgICBGWF9EV09SRCBkZXN0X3NpemUgPSAwOworICAgIHdoaWxlIChpIDwgbV9TcmNTaXplKSB7CisgICAgICAgIGlmIChtX3BTcmNCdWZbaV0gPCAxMjgpIHsKKyAgICAgICAgICAgIG9sZF9zaXplID0gZGVzdF9zaXplOworICAgICAgICAgICAgZGVzdF9zaXplICs9IG1fcFNyY0J1ZltpXSArIDE7CisgICAgICAgICAgICBpZiAoZGVzdF9zaXplIDwgb2xkX3NpemUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IG1fcFNyY0J1ZltpXSArIDI7CisgICAgICAgIH0gZWxzZSBpZiAobV9wU3JjQnVmW2ldID4gMTI4KSB7CisgICAgICAgICAgICBvbGRfc2l6ZSA9IGRlc3Rfc2l6ZTsKKyAgICAgICAgICAgIGRlc3Rfc2l6ZSArPSAyNTcgLSBtX3BTcmNCdWZbaV07CisgICAgICAgICAgICBpZiAoZGVzdF9zaXplIDwgb2xkX3NpemUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoKChGWF9EV09SRCltX09yaWdXaWR0aCAqIG1fbkNvbXBzICogbV9icGMgKiBtX09yaWdIZWlnaHQgKyA3KSAvIDggPiBkZXN0X3NpemUpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0NvZGVjX1JMU2NhbmxpbmVEZWNvZGVyOjpDcmVhdGUoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbkNvbXBzLCBpbnQgYnBjKQoreworICAgIG1fcFNyY0J1ZiA9IHNyY19idWY7CisgICAgbV9TcmNTaXplID0gc3JjX3NpemU7CisgICAgbV9PdXRwdXRXaWR0aCA9IG1fT3JpZ1dpZHRoID0gd2lkdGg7CisgICAgbV9PdXRwdXRIZWlnaHQgPSBtX09yaWdIZWlnaHQgPSBoZWlnaHQ7CisgICAgbV9uQ29tcHMgPSBuQ29tcHM7CisgICAgbV9icGMgPSBicGM7CisgICAgbV9iQ29sb3JUcmFuc2Zvcm1lZCA9IEZBTFNFOworICAgIG1fRG93blNjYWxlID0gMTsKKyAgICBtX1BpdGNoID0gKHdpZHRoICogbkNvbXBzICogYnBjICsgMzEpIC8gMzIgKiA0OworICAgIG1fZHdMaW5lQnl0ZXMgPSAod2lkdGggKiBuQ29tcHMgKiBicGMgKyA3KSAvIDg7CisgICAgbV9wU2NhbmxpbmUgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1BpdGNoKTsKKyAgICBpZiAobV9wU2NhbmxpbmUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEZYU1lTX21lbXNldDMyKG1fcFNjYW5saW5lLCAwLCBtX1BpdGNoKTsKKyAgICByZXR1cm4gQ2hlY2tEZXN0U2l6ZSgpOworfQorRlhfQk9PTCBDQ29kZWNfUkxTY2FubGluZURlY29kZXI6OnZfUmV3aW5kKCkKK3sKKyAgICBGWFNZU19tZW1zZXQzMihtX3BTY2FubGluZSwgMCwgbV9QaXRjaCk7CisgICAgbV9TcmNPZmZzZXQgPSAwOworICAgIG1fYkVPRCA9IEZBTFNFOworICAgIG1fT3BlcmF0b3IgPSAwOworICAgIHJldHVybiBUUlVFOworfQorRlhfTFBCWVRFIENDb2RlY19STFNjYW5saW5lRGVjb2Rlcjo6dl9HZXROZXh0TGluZSgpCit7CisgICAgaWYgKG1fU3JjT2Zmc2V0ID09IDApIHsKKyAgICAgICAgR2V0TmV4dE9wZXJhdG9yKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fYkVPRCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgRlhTWVNfbWVtc2V0MzIobV9wU2NhbmxpbmUsIDAsIG1fUGl0Y2gpOworICAgIEZYX0RXT1JEIGNvbF9wb3MgPSAwOworICAgIEZYX0JPT0wJZW9sID0gRkFMU0U7CisgICAgd2hpbGUgKG1fU3JjT2Zmc2V0IDwgbV9TcmNTaXplICYmICFlb2wpIHsKKyAgICAgICAgaWYgKG1fT3BlcmF0b3IgPCAxMjgpIHsKKyAgICAgICAgICAgIEZYX0RXT1JEIGNvcHlfbGVuID0gbV9PcGVyYXRvciArIDE7CisgICAgICAgICAgICBpZiAoY29sX3BvcyArIGNvcHlfbGVuID49IG1fZHdMaW5lQnl0ZXMpIHsKKyAgICAgICAgICAgICAgICBjb3B5X2xlbiA9IG1fZHdMaW5lQnl0ZXMgLSBjb2xfcG9zOworICAgICAgICAgICAgICAgIGVvbCA9IFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29weV9sZW4gPj0gbV9TcmNTaXplIC0gbV9TcmNPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBjb3B5X2xlbiA9IG1fU3JjU2l6ZSAtIG1fU3JjT2Zmc2V0OworICAgICAgICAgICAgICAgIG1fYkVPRCA9IFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BTY2FubGluZSArIGNvbF9wb3MsIG1fcFNyY0J1ZiArIG1fU3JjT2Zmc2V0LCBjb3B5X2xlbik7CisgICAgICAgICAgICBjb2xfcG9zICs9IGNvcHlfbGVuOworICAgICAgICAgICAgVXBkYXRlT3BlcmF0b3IoKEZYX0JZVEUpY29weV9sZW4pOworICAgICAgICB9IGVsc2UgaWYgKG1fT3BlcmF0b3IgPiAxMjgpIHsKKyAgICAgICAgICAgIGludCBmaWxsID0gMDsKKyAgICAgICAgICAgIGlmIChtX1NyY09mZnNldCAtIDEgPCBtX1NyY1NpemUgLSAxKSB7CisgICAgICAgICAgICAgICAgZmlsbCA9IG1fcFNyY0J1ZlttX1NyY09mZnNldF07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9EV09SRCBkdXBsaWNhdGVfbGVuID0gMjU3IC0gbV9PcGVyYXRvcjsKKyAgICAgICAgICAgIGlmIChjb2xfcG9zICsgZHVwbGljYXRlX2xlbiA+PSBtX2R3TGluZUJ5dGVzKSB7CisgICAgICAgICAgICAgICAgZHVwbGljYXRlX2xlbiA9IG1fZHdMaW5lQnl0ZXMgLSBjb2xfcG9zOworICAgICAgICAgICAgICAgIGVvbCA9IFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWFNZU19tZW1zZXQ4KG1fcFNjYW5saW5lICsgY29sX3BvcywgZmlsbCwgZHVwbGljYXRlX2xlbik7CisgICAgICAgICAgICBjb2xfcG9zICs9IGR1cGxpY2F0ZV9sZW47CisgICAgICAgICAgICBVcGRhdGVPcGVyYXRvcigoRlhfQllURSlkdXBsaWNhdGVfbGVuKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fYkVPRCA9IFRSVUU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbV9wU2NhbmxpbmU7Cit9Cit2b2lkIENDb2RlY19STFNjYW5saW5lRGVjb2Rlcjo6R2V0TmV4dE9wZXJhdG9yKCkKK3sKKyAgICBpZiAobV9TcmNPZmZzZXQgPj0gbV9TcmNTaXplKSB7CisgICAgICAgIG1fT3BlcmF0b3IgPSAxMjg7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9PcGVyYXRvciA9IG1fcFNyY0J1ZlttX1NyY09mZnNldF07CisgICAgbV9TcmNPZmZzZXQgKys7Cit9Cit2b2lkIENDb2RlY19STFNjYW5saW5lRGVjb2Rlcjo6VXBkYXRlT3BlcmF0b3IoRlhfQllURSB1c2VkX2J5dGVzKQoreworICAgIGlmICh1c2VkX2J5dGVzID09IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9PcGVyYXRvciA8IDEyOCkgeworICAgICAgICBGWFNZU19hc3NlcnQoKEZYX0RXT1JEKW1fT3BlcmF0b3IgKyAxID49IHVzZWRfYnl0ZXMpOworICAgICAgICBpZiAodXNlZF9ieXRlcyA9PSBtX09wZXJhdG9yICsgMSkgeworICAgICAgICAgICAgbV9TcmNPZmZzZXQgKz0gdXNlZF9ieXRlczsKKyAgICAgICAgICAgIEdldE5leHRPcGVyYXRvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fT3BlcmF0b3IgLT0gdXNlZF9ieXRlczsKKyAgICAgICAgbV9TcmNPZmZzZXQgKz0gdXNlZF9ieXRlczsKKyAgICAgICAgaWYgKG1fU3JjT2Zmc2V0ID49IG1fU3JjU2l6ZSkgeworICAgICAgICAgICAgbV9PcGVyYXRvciA9IDEyODsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX0JZVEUgY291bnQgPSAyNTcgLSBtX09wZXJhdG9yOworICAgIEZYU1lTX2Fzc2VydCgoRlhfRFdPUkQpY291bnQgPj0gdXNlZF9ieXRlcyk7CisgICAgaWYgKHVzZWRfYnl0ZXMgPT0gY291bnQpIHsKKyAgICAgICAgbV9TcmNPZmZzZXQgKys7CisgICAgICAgIEdldE5leHRPcGVyYXRvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvdW50IC09IHVzZWRfYnl0ZXM7CisgICAgbV9PcGVyYXRvciA9IDI1NyAtIGNvdW50OworfQorSUNvZGVjX1NjYW5saW5lRGVjb2RlciogQ0NvZGVjX0Jhc2ljTW9kdWxlOjpDcmVhdGVSdW5MZW5ndGhEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgaW50IG5Db21wcywgaW50IGJwYykKK3sKKyAgICBDQ29kZWNfUkxTY2FubGluZURlY29kZXIqIHBSTFNjYW5saW5lRGVjb2RlciA9IEZYX05FVyBDQ29kZWNfUkxTY2FubGluZURlY29kZXI7CisgICAgaWYgKHBSTFNjYW5saW5lRGVjb2RlciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoIXBSTFNjYW5saW5lRGVjb2Rlci0+Q3JlYXRlKHNyY19idWYsIHNyY19zaXplLCB3aWR0aCwgaGVpZ2h0LCBuQ29tcHMsIGJwYykpIHsKKyAgICAgICAgZGVsZXRlIHBSTFNjYW5saW5lRGVjb2RlcjsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBwUkxTY2FubGluZURlY29kZXI7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2NvZGVjL2Z4X2NvZGVjX2ZheC5jcHAgYi9jb3JlL3NyYy9meGNvZGVjL2NvZGVjL2Z4X2NvZGVjX2ZheC5jcHAKaW5kZXggMjFjN2RlYi4uOTc5ZGYzOCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9jb2RlYy9meF9jb2RlY19mYXguY3BwCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvY29kZWMvZnhfY29kZWNfZmF4LmNwcApAQCAtMSw5NjggKzEsOTY4IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgiDQotI2luY2x1ZGUgImNvZGVjX2ludC5oIg0KLWV4dGVybiBjb25zdCBGWF9CWVRFIE9uZUxlYWRQb3NbMjU2XTsNCi1leHRlcm4gY29uc3QgRlhfQllURSBaZXJvTGVhZFBvc1syNTZdOw0KLWludCBfRmluZEJpdChjb25zdCBGWF9CWVRFKiBkYXRhX2J1ZiwgaW50IG1heF9wb3MsIGludCBzdGFydF9wb3MsIGludCBiaXQpDQotew0KLSAgICBpZiAoc3RhcnRfcG9zID49IG1heF9wb3MpIHsNCi0gICAgICAgIHJldHVybiBtYXhfcG9zOw0KLSAgICB9DQotICAgIEZYX0xQQ0JZVEUgbGVhZGluZ19wb3MgPSBiaXQgPyBPbmVMZWFkUG9zIDogWmVyb0xlYWRQb3M7DQotICAgIGlmIChzdGFydF9wb3MgJSA4KSB7DQotICAgICAgICBGWF9CWVRFIGRhdGEgPSBkYXRhX2J1ZltzdGFydF9wb3MgLyA4XTsNCi0gICAgICAgIGlmIChiaXQpIHsNCi0gICAgICAgICAgICBkYXRhICY9IDB4ZmYgPj4gKHN0YXJ0X3BvcyAlIDgpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBkYXRhIHw9IDB4ZmYgPDwgKDggLSBzdGFydF9wb3MgJSA4KTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChsZWFkaW5nX3Bvc1tkYXRhXSA8IDgpIHsNCi0gICAgICAgICAgICByZXR1cm4gc3RhcnRfcG9zIC8gOCAqIDggKyBsZWFkaW5nX3Bvc1tkYXRhXTsNCi0gICAgICAgIH0NCi0gICAgICAgIHN0YXJ0X3BvcyArPSA3Ow0KLSAgICB9DQotICAgIEZYX0JZVEUgc2tpcCA9IGJpdCA/IDB4MDAgOiAweGZmOw0KLSAgICBpbnQgYnl0ZV9wb3MgPSBzdGFydF9wb3MgLyA4Ow0KLSAgICBpbnQgbWF4X2J5dGUgPSAobWF4X3BvcyArIDcpIC8gODsNCi0gICAgd2hpbGUgKGJ5dGVfcG9zIDwgbWF4X2J5dGUpIHsNCi0gICAgICAgIGlmIChkYXRhX2J1ZltieXRlX3Bvc10gIT0gc2tpcCkgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgYnl0ZV9wb3MgKys7DQotICAgIH0NCi0gICAgaWYgKGJ5dGVfcG9zID09IG1heF9ieXRlKSB7DQotICAgICAgICByZXR1cm4gbWF4X3BvczsNCi0gICAgfQ0KLSAgICBpbnQgcG9zID0gbGVhZGluZ19wb3NbZGF0YV9idWZbYnl0ZV9wb3NdXSArIGJ5dGVfcG9zICogODsNCi0gICAgaWYgKHBvcyA+IG1heF9wb3MpIHsNCi0gICAgICAgIHBvcyA9IG1heF9wb3M7DQotICAgIH0NCi0gICAgcmV0dXJuIHBvczsNCi19DQotdm9pZCBfRmF4RzRGaW5kQjFCMihjb25zdCBGWF9CWVRFKiByZWZfYnVmLCBpbnQgY29sdW1ucywgaW50IGEwLCBGWF9CT09MIGEwY29sb3IsIGludCYgYjEsIGludCYgYjIpDQotew0KLSAgICBpZiAoYTBjb2xvcikgew0KLSAgICAgICAgYTBjb2xvciA9IDE7DQotICAgIH0NCi0gICAgRlhfQllURSBmaXJzdF9iaXQgPSAoYTAgPCAwKSA/IDEgOiAoKHJlZl9idWZbYTAgLyA4XSAmICgxIDw8ICg3IC0gYTAgJSA4KSkpICE9IDApOw0KLSAgICBiMSA9IF9GaW5kQml0KHJlZl9idWYsIGNvbHVtbnMsIGEwICsgMSwgIWZpcnN0X2JpdCk7DQotICAgIGlmIChiMSA+PSBjb2x1bW5zKSB7DQotICAgICAgICBiMSA9IGIyID0gY29sdW1uczsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAoZmlyc3RfYml0ID09ICFhMGNvbG9yKSB7DQotICAgICAgICBiMSA9IF9GaW5kQml0KHJlZl9idWYsIGNvbHVtbnMsIGIxICsgMSwgZmlyc3RfYml0KTsNCi0gICAgICAgIGZpcnN0X2JpdCA9ICFmaXJzdF9iaXQ7DQotICAgIH0NCi0gICAgaWYgKGIxID49IGNvbHVtbnMpIHsNCi0gICAgICAgIGIxID0gYjIgPSBjb2x1bW5zOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGIyID0gX0ZpbmRCaXQocmVmX2J1ZiwgY29sdW1ucywgYjEgKyAxLCBmaXJzdF9iaXQpOw0KLX0NCi12b2lkIF9GYXhGaWxsQml0cyhGWF9MUEJZVEUgZGVzdF9idWYsIGludCBjb2x1bW5zLCBpbnQgc3RhcnRwb3MsIGludCBlbmRwb3MpDQotew0KLSAgICBpZiAoc3RhcnRwb3MgPCAwKSB7DQotICAgICAgICBzdGFydHBvcyA9IDA7DQotICAgIH0NCi0gICAgaWYgKGVuZHBvcyA8IDApIHsNCi0gICAgICAgIGVuZHBvcyA9IDA7DQotICAgIH0NCi0gICAgaWYgKGVuZHBvcyA+PSBjb2x1bW5zKSB7DQotICAgICAgICBlbmRwb3MgPSBjb2x1bW5zOw0KLSAgICB9DQotICAgIGlmIChzdGFydHBvcyA+PSBlbmRwb3MpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpbnQgZmlyc3RfYnl0ZSA9IHN0YXJ0cG9zIC8gODsNCi0gICAgaW50IGxhc3RfYnl0ZSA9IChlbmRwb3MgLSAxKSAvIDg7DQotICAgIGlmIChmaXJzdF9ieXRlID09IGxhc3RfYnl0ZSkgew0KLSAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0cG9zICUgODsgaSA8PSAoZW5kcG9zIC0gMSkgJSA4OyBpICsrKSB7DQotICAgICAgICAgICAgZGVzdF9idWZbZmlyc3RfYnl0ZV0gLT0gMSA8PCAoNyAtIGkpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGludCBpOw0KLSAgICBmb3IgKGkgPSBzdGFydHBvcyAlIDg7IGkgPCA4OyBpICsrKSB7DQotICAgICAgICBkZXN0X2J1ZltmaXJzdF9ieXRlXSAtPSAxIDw8ICg3IC0gaSk7DQotICAgIH0NCi0gICAgZm9yIChpID0gMDsgaSA8PSAoZW5kcG9zIC0gMSkgJSA4OyBpICsrKSB7DQotICAgICAgICBkZXN0X2J1ZltsYXN0X2J5dGVdIC09IDEgPDwgKDcgLSBpKTsNCi0gICAgfQ0KLSAgICBpZiAobGFzdF9ieXRlID4gZmlyc3RfYnl0ZSArIDEpIHsNCi0gICAgICAgIEZYU1lTX21lbXNldDMyKGRlc3RfYnVmICsgZmlyc3RfYnl0ZSArIDEsIDAsIGxhc3RfYnl0ZSAtIGZpcnN0X2J5dGUgLSAxKTsNCi0gICAgfQ0KLX0NCi0jZGVmaW5lIE5FWFRCSVQgc3JjX2J1ZltiaXRwb3MvOF0gJiAoMSA8PCAoNy1iaXRwb3MlOCkpOyBiaXRwb3MgKys7DQotI2RlZmluZSBBRERCSVQoY29kZSwgYml0KSBjb2RlID0gY29kZSA8PCAxOyBpZiAoYml0KSBjb2RlICsrOw0KLSNkZWZpbmUgR0VUQklUKGJpdHBvcykgc3JjX2J1ZltiaXRwb3MvOF0gJiAoMSA8PCAoNy1iaXRwb3MlOCkpDQotc3RhdGljIGNvbnN0IEZYX0JZVEUgRmF4QmxhY2tSdW5JbnNbXSA9IHsNCi0gICAgMCwNCi0gICAgMiwNCi0gICAgMHgwMiwgMywgMCwNCi0gICAgMHgwMywgMiwgMCwNCi0gICAgMiwNCi0gICAgMHgwMiwgMSwgMCwNCi0gICAgMHgwMywgNCwgMCwNCi0gICAgMiwNCi0gICAgMHgwMiwgNiwgMCwNCi0gICAgMHgwMywgNSwgMCwNCi0gICAgMSwNCi0gICAgMHgwMywgNywgMCwNCi0gICAgMiwNCi0gICAgMHgwNCwgOSwgMCwNCi0gICAgMHgwNSwgOCwgMCwNCi0gICAgMywNCi0gICAgMHgwNCwgMTAsIDAsDQotICAgIDB4MDUsIDExLCAwLA0KLSAgICAweDA3LCAxMiwgMCwNCi0gICAgMiwNCi0gICAgMHgwNCwgMTMsIDAsDQotICAgIDB4MDcsIDE0LCAwLA0KLSAgICAxLA0KLSAgICAweDE4LCAxNSwgMCwNCi0gICAgNSwNCi0gICAgMHgwOCwgMTgsIDAsDQotICAgIDB4MGYsIDY0LCAwLA0KLSAgICAweDE3LCAxNiwgMCwNCi0gICAgMHgxOCwgMTcsIDAsDQotICAgIDB4MzcsIDAsIDAsDQotICAgIDEwLA0KLSAgICAweDA4LCAweDAwLCAweDA3LA0KLSAgICAweDBjLCAweDQwLCAweDA3LA0KLSAgICAweDBkLCAweDgwLCAweDA3LA0KLSAgICAweDE3LCAyNCwgMCwNCi0gICAgMHgxOCwgMjUsIDAsDQotICAgIDB4MjgsIDIzLCAwLA0KLSAgICAweDM3LCAyMiwgMCwNCi0gICAgMHg2NywgMTksIDAsDQotICAgIDB4NjgsIDIwLCAwLA0KLSAgICAweDZjLCAyMSwgMCwNCi0gICAgNTQsDQotICAgIDB4MTIsIDE5ODQgJSAyNTYsIDE5ODQgLyAyNTYsDQotICAgIDB4MTMsIDIwNDggJSAyNTYsIDIwNDggLyAyNTYsDQotICAgIDB4MTQsIDIxMTIgJSAyNTYsIDIxMTIgLyAyNTYsDQotICAgIDB4MTUsIDIxNzYgJSAyNTYsIDIxNzYgLyAyNTYsDQotICAgIDB4MTYsIDIyNDAgJSAyNTYsIDIyNDAgLyAyNTYsDQotICAgIDB4MTcsIDIzMDQgJSAyNTYsIDIzMDQgLyAyNTYsDQotICAgIDB4MWMsIDIzNjggJSAyNTYsIDIzNjggLyAyNTYsDQotICAgIDB4MWQsIDI0MzIgJSAyNTYsIDI0MzIgLyAyNTYsDQotICAgIDB4MWUsIDI0OTYgJSAyNTYsIDI0OTYgLyAyNTYsDQotICAgIDB4MWYsIDI1NjAgJSAyNTYsIDI1NjAgLyAyNTYsDQotICAgIDB4MjQsIDUyLCAwLA0KLSAgICAweDI3LCA1NSwgMCwNCi0gICAgMHgyOCwgNTYsIDAsDQotICAgIDB4MmIsIDU5LCAwLA0KLSAgICAweDJjLCA2MCwgMCwNCi0gICAgMHgzMywgMzIwICUgMjU2LCAzMjAgLyAyNTYsDQotICAgIDB4MzQsIDM4NCAlIDI1NiwgMzg0IC8gMjU2LA0KLSAgICAweDM1LCA0NDggJSAyNTYsIDQ0OCAvIDI1NiwNCi0gICAgMHgzNywgNTMsIDAsDQotICAgIDB4MzgsIDU0LCAwLA0KLSAgICAweDUyLCA1MCwgMCwNCi0gICAgMHg1MywgNTEsIDAsDQotICAgIDB4NTQsIDQ0LCAwLA0KLSAgICAweDU1LCA0NSwgMCwNCi0gICAgMHg1NiwgNDYsIDAsDQotICAgIDB4NTcsIDQ3LCAwLA0KLSAgICAweDU4LCA1NywgMCwNCi0gICAgMHg1OSwgNTgsIDAsDQotICAgIDB4NWEsIDYxLCAwLA0KLSAgICAweDViLCAyNTYgJSAyNTYsIDI1NiAvIDI1NiwNCi0gICAgMHg2NCwgNDgsIDAsDQotICAgIDB4NjUsIDQ5LCAwLA0KLSAgICAweDY2LCA2MiwgMCwNCi0gICAgMHg2NywgNjMsIDAsDQotICAgIDB4NjgsIDMwLCAwLA0KLSAgICAweDY5LCAzMSwgMCwNCi0gICAgMHg2YSwgMzIsIDAsDQotICAgIDB4NmIsIDMzLCAwLA0KLSAgICAweDZjLCA0MCwgMCwNCi0gICAgMHg2ZCwgNDEsIDAsDQotICAgIDB4YzgsIDEyOCwgMCwNCi0gICAgMHhjOSwgMTkyLCAwLA0KLSAgICAweGNhLCAyNiwgMCwNCi0gICAgMHhjYiwgMjcsIDAsDQotICAgIDB4Y2MsIDI4LCAwLA0KLSAgICAweGNkLCAyOSwgMCwNCi0gICAgMHhkMiwgMzQsIDAsDQotICAgIDB4ZDMsIDM1LCAwLA0KLSAgICAweGQ0LCAzNiwgMCwNCi0gICAgMHhkNSwgMzcsIDAsDQotICAgIDB4ZDYsIDM4LCAwLA0KLSAgICAweGQ3LCAzOSwgMCwNCi0gICAgMHhkYSwgNDIsIDAsDQotICAgIDB4ZGIsIDQzLCAwLA0KLSAgICAyMCwNCi0gICAgMHg0YSwgNjQwICUgMjU2LCA2NDAgLyAyNTYsDQotICAgIDB4NGIsIDcwNCAlIDI1NiwgNzA0IC8gMjU2LA0KLSAgICAweDRjLCA3NjggJSAyNTYsIDc2OCAvIDI1NiwNCi0gICAgMHg0ZCwgODMyICUgMjU2LCA4MzIgLyAyNTYsDQotICAgIDB4NTIsIDEyODAgJSAyNTYsIDEyODAgLyAyNTYsDQotICAgIDB4NTMsIDEzNDQgJSAyNTYsIDEzNDQgLyAyNTYsDQotICAgIDB4NTQsIDE0MDggJSAyNTYsIDE0MDggLyAyNTYsDQotICAgIDB4NTUsIDE0NzIgJSAyNTYsIDE0NzIgLyAyNTYsDQotICAgIDB4NWEsIDE1MzYgJSAyNTYsIDE1MzYgLyAyNTYsDQotICAgIDB4NWIsIDE2MDAgJSAyNTYsIDE2MDAgLyAyNTYsDQotICAgIDB4NjQsIDE2NjQgJSAyNTYsIDE2NjQgLyAyNTYsDQotICAgIDB4NjUsIDE3MjggJSAyNTYsIDE3MjggLyAyNTYsDQotICAgIDB4NmMsIDUxMiAlIDI1NiwgNTEyIC8gMjU2LA0KLSAgICAweDZkLCA1NzYgJSAyNTYsIDU3NiAvIDI1NiwNCi0gICAgMHg3MiwgODk2ICUgMjU2LCA4OTYgLyAyNTYsDQotICAgIDB4NzMsIDk2MCAlIDI1NiwgOTYwIC8gMjU2LA0KLSAgICAweDc0LCAxMDI0ICUgMjU2LCAxMDI0IC8gMjU2LA0KLSAgICAweDc1LCAxMDg4ICUgMjU2LCAxMDg4IC8gMjU2LA0KLSAgICAweDc2LCAxMTUyICUgMjU2LCAxMTUyIC8gMjU2LA0KLSAgICAweDc3LCAxMjE2ICUgMjU2LCAxMjE2IC8gMjU2LA0KLSAgICAweGZmDQotfTsNCi1zdGF0aWMgY29uc3QgRlhfQllURSBGYXhXaGl0ZVJ1bkluc1tdID0gew0KLSAgICAwLA0KLSAgICAwLA0KLSAgICAwLA0KLSAgICA2LA0KLSAgICAweDA3LCAyLCAwLA0KLSAgICAweDA4LCAzLCAwLA0KLSAgICAweDBCLCA0LCAwLA0KLSAgICAweDBDLCA1LCAwLA0KLSAgICAweDBFLCA2LCAwLA0KLSAgICAweDBGLCA3LCAwLA0KLSAgICA2LA0KLSAgICAweDA3LCAxMCwgMCwNCi0gICAgMHgwOCwgMTEsIDAsDQotICAgIDB4MTIsIDEyOCwgMCwNCi0gICAgMHgxMywgOCwgMCwNCi0gICAgMHgxNCwgOSwgMCwNCi0gICAgMHgxYiwgNjQsIDAsDQotICAgIDksDQotICAgIDB4MDMsIDEzLCAwLA0KLSAgICAweDA3LCAxLCAwLA0KLSAgICAweDA4LCAxMiwgMCwNCi0gICAgMHgxNywgMTkyLCAwLA0KLSAgICAweDE4LCAxNjY0ICUgMjU2LCAxNjY0IC8gMjU2LA0KLSAgICAweDJhLCAxNiwgMCwNCi0gICAgMHgyQiwgMTcsIDAsDQotICAgIDB4MzQsIDE0LCAwLA0KLSAgICAweDM1LCAxNSwgMCwNCi0gICAgMTIsDQotICAgIDB4MDMsIDIyLCAwLA0KLSAgICAweDA0LCAyMywgMCwNCi0gICAgMHgwOCwgMjAsIDAsDQotICAgIDB4MGMsIDE5LCAwLA0KLSAgICAweDEzLCAyNiwgMCwNCi0gICAgMHgxNywgMjEsIDAsDQotICAgIDB4MTgsIDI4LCAwLA0KLSAgICAweDI0LCAyNywgMCwNCi0gICAgMHgyNywgMTgsIDAsDQotICAgIDB4MjgsIDI0LCAwLA0KLSAgICAweDJCLCAyNSwgMCwNCi0gICAgMHgzNywgMjU2ICUgMjU2LCAyNTYgLyAyNTYsDQotICAgIDQyLA0KLSAgICAweDAyLCAyOSwgMCwNCi0gICAgMHgwMywgMzAsIDAsDQotICAgIDB4MDQsIDQ1LCAwLA0KLSAgICAweDA1LCA0NiwgMCwNCi0gICAgMHgwYSwgNDcsIDAsDQotICAgIDB4MGIsIDQ4LCAwLA0KLSAgICAweDEyLCAzMywgMCwNCi0gICAgMHgxMywgMzQsIDAsDQotICAgIDB4MTQsIDM1LCAwLA0KLSAgICAweDE1LCAzNiwgMCwNCi0gICAgMHgxNiwgMzcsIDAsDQotICAgIDB4MTcsIDM4LCAwLA0KLSAgICAweDFhLCAzMSwgMCwNCi0gICAgMHgxYiwgMzIsIDAsDQotICAgIDB4MjQsIDUzLCAwLA0KLSAgICAweDI1LCA1NCwgMCwNCi0gICAgMHgyOCwgMzksIDAsDQotICAgIDB4MjksIDQwLCAwLA0KLSAgICAweDJhLCA0MSwgMCwNCi0gICAgMHgyYiwgNDIsIDAsDQotICAgIDB4MmMsIDQzLCAwLA0KLSAgICAweDJkLCA0NCwgMCwNCi0gICAgMHgzMiwgNjEsIDAsDQotICAgIDB4MzMsIDYyLCAwLA0KLSAgICAweDM0LCA2MywgMCwNCi0gICAgMHgzNSwgMCwgMCwNCi0gICAgMHgzNiwgMzIwICUgMjU2LCAzMjAgLyAyNTYsDQotICAgIDB4MzcsIDM4NCAlIDI1NiwgMzg0IC8gMjU2LA0KLSAgICAweDRhLCA1OSwgMCwNCi0gICAgMHg0YiwgNjAsIDAsDQotICAgIDB4NTIsIDQ5LCAwLA0KLSAgICAweDUzLCA1MCwgMCwNCi0gICAgMHg1NCwgNTEsIDAsDQotICAgIDB4NTUsIDUyLCAwLA0KLSAgICAweDU4LCA1NSwgMCwNCi0gICAgMHg1OSwgNTYsIDAsDQotICAgIDB4NWEsIDU3LCAwLA0KLSAgICAweDViLCA1OCwgMCwNCi0gICAgMHg2NCwgNDQ4ICUgMjU2LCA0NDggLyAyNTYsDQotICAgIDB4NjUsIDUxMiAlIDI1NiwgNTEyIC8gMjU2LA0KLSAgICAweDY3LCA2NDAgJSAyNTYsIDY0MCAvIDI1NiwNCi0gICAgMHg2OCwgNTc2ICUgMjU2LCA1NzYgLyAyNTYsDQotICAgIDE2LA0KLSAgICAweDk4LCAxNDcyICUgMjU2LCAxNDcyIC8gMjU2LA0KLSAgICAweDk5LCAxNTM2ICUgMjU2LCAxNTM2IC8gMjU2LA0KLSAgICAweDlhLCAxNjAwICUgMjU2LCAxNjAwIC8gMjU2LA0KLSAgICAweDliLCAxNzI4ICUgMjU2LCAxNzI4IC8gMjU2LA0KLSAgICAweGNjLCA3MDQgJSAyNTYsIDcwNCAvIDI1NiwNCi0gICAgMHhjZCwgNzY4ICUgMjU2LCA3NjggLyAyNTYsDQotICAgIDB4ZDIsIDgzMiAlIDI1NiwgODMyIC8gMjU2LA0KLSAgICAweGQzLCA4OTYgJSAyNTYsIDg5NiAvIDI1NiwNCi0gICAgMHhkNCwgOTYwICUgMjU2LCA5NjAgLyAyNTYsDQotICAgIDB4ZDUsIDEwMjQgJSAyNTYsIDEwMjQgLyAyNTYsDQotICAgIDB4ZDYsIDEwODggJSAyNTYsIDEwODggLyAyNTYsDQotICAgIDB4ZDcsIDExNTIgJSAyNTYsIDExNTIgLyAyNTYsDQotICAgIDB4ZDgsIDEyMTYgJSAyNTYsIDEyMTYgLyAyNTYsDQotICAgIDB4ZDksIDEyODAgJSAyNTYsIDEyODAgLyAyNTYsDQotICAgIDB4ZGEsIDEzNDQgJSAyNTYsIDEzNDQgLyAyNTYsDQotICAgIDB4ZGIsIDE0MDggJSAyNTYsIDE0MDggLyAyNTYsDQotICAgIDAsDQotICAgIDMsDQotICAgIDB4MDgsIDE3OTIgJSAyNTYsIDE3OTIgLyAyNTYsDQotICAgIDB4MGMsIDE4NTYgJSAyNTYsIDE4NTYgLyAyNTYsDQotICAgIDB4MGQsIDE5MjAgJSAyNTYsIDE5MjAgLyAyNTYsDQotICAgIDEwLA0KLSAgICAweDEyLCAxOTg0ICUgMjU2LCAxOTg0IC8gMjU2LA0KLSAgICAweDEzLCAyMDQ4ICUgMjU2LCAyMDQ4IC8gMjU2LA0KLSAgICAweDE0LCAyMTEyICUgMjU2LCAyMTEyIC8gMjU2LA0KLSAgICAweDE1LCAyMTc2ICUgMjU2LCAyMTc2IC8gMjU2LA0KLSAgICAweDE2LCAyMjQwICUgMjU2LCAyMjQwIC8gMjU2LA0KLSAgICAweDE3LCAyMzA0ICUgMjU2LCAyMzA0IC8gMjU2LA0KLSAgICAweDFjLCAyMzY4ICUgMjU2LCAyMzY4IC8gMjU2LA0KLSAgICAweDFkLCAyNDMyICUgMjU2LCAyNDMyIC8gMjU2LA0KLSAgICAweDFlLCAyNDk2ICUgMjU2LCAyNDk2IC8gMjU2LA0KLSAgICAweDFmLCAyNTYwICUgMjU2LCAyNTYwIC8gMjU2LA0KLSAgICAweGZmLA0KLX07DQotaW50IF9GYXhHZXRSdW4oRlhfTFBDQllURSBpbnNfYXJyYXksIGNvbnN0IEZYX0JZVEUqIHNyY19idWYsIGludCYgYml0cG9zLCBpbnQgYml0c2l6ZSkNCi17DQotICAgIEZYX0RXT1JEIGNvZGUgPSAwOw0KLSAgICBpbnQgaW5zX29mZiA9IDA7DQotICAgIHdoaWxlICgxKSB7DQotICAgICAgICBGWF9CWVRFIGlucyA9IGluc19hcnJheVtpbnNfb2ZmKytdOw0KLSAgICAgICAgaWYgKGlucyA9PSAweGZmKSB7DQotICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGJpdHBvcyA+PSBiaXRzaXplKSB7DQotICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgfQ0KLSAgICAgICAgY29kZSA8PD0gMTsNCi0gICAgICAgIGlmIChzcmNfYnVmW2JpdHBvcyAvIDhdICYgKDEgPDwgKDcgLSBiaXRwb3MgJSA4KSkpIHsNCi0gICAgICAgICAgICBjb2RlICsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgYml0cG9zICsrOw0KLSAgICAgICAgaW50IG5leHRfb2ZmID0gaW5zX29mZiArIGlucyAqIDM7DQotICAgICAgICBmb3IgKDsgaW5zX29mZiA8IG5leHRfb2ZmOyBpbnNfb2ZmICs9IDMpIHsNCi0gICAgICAgICAgICBpZiAoaW5zX2FycmF5W2luc19vZmZdID09IGNvZGUpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIGluc19hcnJheVtpbnNfb2ZmICsgMV0gKyBpbnNfYXJyYXlbaW5zX29mZiArIDJdICogMjU2Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1GWF9CT09MIF9GYXhHNEdldFJvdyhjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBpbnQgYml0c2l6ZSwgaW50JiBiaXRwb3MsIEZYX0xQQllURSBkZXN0X2J1ZiwgY29uc3QgRlhfQllURSogcmVmX2J1ZiwgaW50IGNvbHVtbnMpDQotew0KLSAgICBpbnQgYTAgPSAtMSwgYTBjb2xvciA9IDE7DQotICAgIHdoaWxlICgxKSB7DQotICAgICAgICBpZiAoYml0cG9zID49IGJpdHNpemUpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBpbnQgYTEsIGEyLCBiMSwgYjI7DQotICAgICAgICBfRmF4RzRGaW5kQjFCMihyZWZfYnVmLCBjb2x1bW5zLCBhMCwgYTBjb2xvciwgYjEsIGIyKTsNCi0gICAgICAgIEZYX0JPT0wgYml0ID0gTkVYVEJJVDsNCi0gICAgICAgIGludCB2X2RlbHRhID0gMDsNCi0gICAgICAgIGlmIChiaXQpIHsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYgKGJpdHBvcyA+PSBiaXRzaXplKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgRlhfQk9PTCBiaXQxID0gTkVYVEJJVDsNCi0gICAgICAgICAgICBpZiAoYml0cG9zID49IGJpdHNpemUpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9CT09MIGJpdDIgPSBORVhUQklUOw0KLSAgICAgICAgICAgIGlmIChiaXQxICYmIGJpdDIpIHsNCi0gICAgICAgICAgICAgICAgdl9kZWx0YSA9IDE7DQotICAgICAgICAgICAgfSBlbHNlIGlmIChiaXQxKSB7DQotICAgICAgICAgICAgICAgIHZfZGVsdGEgPSAtMTsNCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGJpdDIpIHsNCi0gICAgICAgICAgICAgICAgaW50IHJ1bl9sZW4xID0gMDsNCi0gICAgICAgICAgICAgICAgd2hpbGUgKDEpIHsNCi0gICAgICAgICAgICAgICAgICAgIGludCBydW4gPSBfRmF4R2V0UnVuKGEwY29sb3IgPyBGYXhXaGl0ZVJ1bklucyA6IEZheEJsYWNrUnVuSW5zLCBzcmNfYnVmLCBiaXRwb3MsIGJpdHNpemUpOw0KLSAgICAgICAgICAgICAgICAgICAgcnVuX2xlbjEgKz0gcnVuOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJ1biA8IDY0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKGEwIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcnVuX2xlbjEgKys7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYTEgPSBhMCArIHJ1bl9sZW4xOw0KLSAgICAgICAgICAgICAgICBpZiAoIWEwY29sb3IpIHsNCi0gICAgICAgICAgICAgICAgICAgIF9GYXhGaWxsQml0cyhkZXN0X2J1ZiwgY29sdW1ucywgYTAsIGExKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpbnQgcnVuX2xlbjIgPSAwOw0KLSAgICAgICAgICAgICAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgICAgICAgICAgICAgaW50IHJ1biA9IF9GYXhHZXRSdW4oYTBjb2xvciA/IEZheEJsYWNrUnVuSW5zIDogRmF4V2hpdGVSdW5JbnMsIHNyY19idWYsIGJpdHBvcywgYml0c2l6ZSk7DQotICAgICAgICAgICAgICAgICAgICBydW5fbGVuMiArPSBydW47DQotICAgICAgICAgICAgICAgICAgICBpZiAocnVuIDwgNjQpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBhMiA9IGExICsgcnVuX2xlbjI7DQotICAgICAgICAgICAgICAgIGlmIChhMGNvbG9yKSB7DQotICAgICAgICAgICAgICAgICAgICBfRmF4RmlsbEJpdHMoZGVzdF9idWYsIGNvbHVtbnMsIGExLCBhMik7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYTAgPSBhMjsNCi0gICAgICAgICAgICAgICAgaWYgKGEwIDwgY29sdW1ucykgew0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgaWYgKGJpdHBvcyA+PSBiaXRzaXplKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYml0ID0gTkVYVEJJVDsNCi0gICAgICAgICAgICAgICAgaWYgKGJpdCkgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhMGNvbG9yKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgX0ZheEZpbGxCaXRzKGRlc3RfYnVmLCBjb2x1bW5zLCBhMCwgYjIpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGIyID49IGNvbHVtbnMpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGEwID0gYjI7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChiaXRwb3MgPj0gYml0c2l6ZSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYml0MSA9IE5FWFRCSVQ7DQotICAgICAgICAgICAgICAgICAgICBpZiAoYml0cG9zID49IGJpdHNpemUpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBGWF9CT09MIGJpdDIgPSBORVhUQklUOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJpdDEgJiYgYml0Mikgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHZfZGVsdGEgPSAyOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiaXQxKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgdl9kZWx0YSA9IC0yOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiaXQyKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdHBvcyA+PSBiaXRzaXplKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgYml0ID0gTkVYVEJJVDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZfZGVsdGEgPSAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZfZGVsdGEgPSAtMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRwb3MgPj0gYml0c2l6ZSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJpdCA9IE5FWFRCSVQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRwb3MgKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cG9zICs9IDU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGExID0gYjEgKyB2X2RlbHRhOw0KLSAgICAgICAgaWYgKCFhMGNvbG9yKSB7DQotICAgICAgICAgICAgX0ZheEZpbGxCaXRzKGRlc3RfYnVmLCBjb2x1bW5zLCBhMCwgYTEpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGExID49IGNvbHVtbnMpIHsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGEwID0gYTE7DQotICAgICAgICBhMGNvbG9yID0gIWEwY29sb3I7DQotICAgIH0NCi19DQotRlhfQk9PTCBfRmF4U2tpcEVPTChjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBpbnQgYml0c2l6ZSwgaW50JiBiaXRwb3MpDQotew0KLSAgICBpbnQgc3RhcnRiaXQgPSBiaXRwb3M7DQotICAgIHdoaWxlIChiaXRwb3MgPCBiaXRzaXplKSB7DQotICAgICAgICBpbnQgYml0ID0gTkVYVEJJVDsNCi0gICAgICAgIGlmIChiaXQpIHsNCi0gICAgICAgICAgICBpZiAoYml0cG9zIC0gc3RhcnRiaXQgPD0gMTEpIHsNCi0gICAgICAgICAgICAgICAgYml0cG9zID0gc3RhcnRiaXQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotRlhfQk9PTCBfRmF4R2V0MURMaW5lKGNvbnN0IEZYX0JZVEUqIHNyY19idWYsIGludCBiaXRzaXplLCBpbnQmIGJpdHBvcywgRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQgY29sdW1ucykNCi17DQotICAgIGludCBjb2xvciA9IFRSVUU7DQotICAgIGludCBzdGFydHBvcyA9IDA7DQotICAgIHdoaWxlICgxKSB7DQotICAgICAgICBpZiAoYml0cG9zID49IGJpdHNpemUpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBpbnQgcnVuX2xlbiA9IDA7DQotICAgICAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgICAgIGludCBydW4gPSBfRmF4R2V0UnVuKGNvbG9yID8gRmF4V2hpdGVSdW5JbnMgOiBGYXhCbGFja1J1bklucywgc3JjX2J1ZiwgYml0cG9zLCBiaXRzaXplKTsNCi0gICAgICAgICAgICBpZiAocnVuIDwgMCkgew0KLSAgICAgICAgICAgICAgICB3aGlsZSAoYml0cG9zIDwgYml0c2l6ZSkgew0KLSAgICAgICAgICAgICAgICAgICAgaW50IGJpdCA9IE5FWFRCSVQ7DQotICAgICAgICAgICAgICAgICAgICBpZiAoYml0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBydW5fbGVuICs9IHJ1bjsNCi0gICAgICAgICAgICBpZiAocnVuIDwgNjQpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCFjb2xvcikgew0KLSAgICAgICAgICAgIF9GYXhGaWxsQml0cyhkZXN0X2J1ZiwgY29sdW1ucywgc3RhcnRwb3MsIHN0YXJ0cG9zICsgcnVuX2xlbik7DQotICAgICAgICB9DQotICAgICAgICBzdGFydHBvcyArPSBydW5fbGVuOw0KLSAgICAgICAgaWYgKHN0YXJ0cG9zID49IGNvbHVtbnMpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIGNvbG9yID0gIWNvbG9yOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1jbGFzcyBDQ29kZWNfRmF4RGVjb2RlciA6IHB1YmxpYyBDQ29kZWNfU2NhbmxpbmVEZWNvZGVyDQotew0KLXB1YmxpYzoNCi0gICAgQ0NvZGVjX0ZheERlY29kZXIoKTsNCi0gICAgdmlydHVhbCB+Q0NvZGVjX0ZheERlY29kZXIoKTsNCi0gICAgRlhfQk9PTAkJCQlDcmVhdGUoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgSywgRlhfQk9PTCBFbmRPZkxpbmUsIEZYX0JPT0wgRW5jb2RlZEJ5dGVBbGlnbiwgRlhfQk9PTCBCbGFja0lzMSwgaW50IENvbHVtbnMsIGludCBSb3dzKTsNCi0gICAgdmlydHVhbCB2b2lkCQl2X0Rvd25TY2FsZShpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0KSB7fQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCXZfUmV3aW5kKCk7DQotICAgIHZpcnR1YWwgRlhfTFBCWVRFCXZfR2V0TmV4dExpbmUoKTsNCi0gICAgdmlydHVhbCBGWF9EV09SRAlHZXRTcmNPZmZzZXQoKTsNCi0gICAgaW50CQkJbV9FbmNvZGluZywgbV9iRW5kT2ZMaW5lLCBtX2JCeXRlQWxpZ24sIG1fYkJsYWNrOw0KLSAgICBpbnQJCQliaXRwb3M7DQotICAgIEZYX0xQQ0JZVEUJbV9wU3JjQnVmOw0KLSAgICBGWF9EV09SRAltX1NyY1NpemU7DQotICAgIEZYX0xQQllURQltX3BTY2FubGluZUJ1ZiwgbV9wUmVmQnVmOw0KLX07DQotQ0NvZGVjX0ZheERlY29kZXI6OkNDb2RlY19GYXhEZWNvZGVyKCkNCi17DQotICAgIG1fcFNjYW5saW5lQnVmID0gTlVMTDsNCi0gICAgbV9wUmVmQnVmID0gTlVMTDsNCi19DQotQ0NvZGVjX0ZheERlY29kZXI6On5DQ29kZWNfRmF4RGVjb2RlcigpDQotew0KLSAgICBpZiAobV9wU2NhbmxpbmVCdWYpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wU2NhbmxpbmVCdWYpOw0KLSAgICB9DQotICAgIGlmIChtX3BSZWZCdWYpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wUmVmQnVmKTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENDb2RlY19GYXhEZWNvZGVyOjpDcmVhdGUoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgSywgRlhfQk9PTCBFbmRPZkxpbmUsIEZYX0JPT0wgRW5jb2RlZEJ5dGVBbGlnbiwgRlhfQk9PTCBCbGFja0lzMSwgaW50IENvbHVtbnMsIGludCBSb3dzKQ0KLXsNCi0gICAgbV9FbmNvZGluZyA9IEs7DQotICAgIG1fYkVuZE9mTGluZSA9IEVuZE9mTGluZTsNCi0gICAgbV9iQnl0ZUFsaWduID0gRW5jb2RlZEJ5dGVBbGlnbjsNCi0gICAgbV9iQmxhY2sgPSBCbGFja0lzMTsNCi0gICAgbV9PcmlnV2lkdGggPSBDb2x1bW5zOw0KLSAgICBtX09yaWdIZWlnaHQgPSBSb3dzOw0KLSAgICBpZiAobV9PcmlnV2lkdGggPT0gMCkgew0KLSAgICAgICAgbV9PcmlnV2lkdGggPSB3aWR0aDsNCi0gICAgfQ0KLSAgICBpZiAobV9PcmlnSGVpZ2h0ID09IDApIHsNCi0gICAgICAgIG1fT3JpZ0hlaWdodCA9IGhlaWdodDsNCi0gICAgfQ0KLSAgICBtX1BpdGNoID0gKG1fT3JpZ1dpZHRoICsgMzEpIC8gMzIgKiA0Ow0KLSAgICBtX091dHB1dFdpZHRoID0gbV9PcmlnV2lkdGg7DQotICAgIG1fT3V0cHV0SGVpZ2h0ID0gbV9PcmlnSGVpZ2h0Ow0KLSAgICBtX3BTY2FubGluZUJ1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIG1fUGl0Y2gpOw0KLSAgICBpZiAobV9wU2NhbmxpbmVCdWYgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fcFJlZkJ1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIG1fUGl0Y2gpOw0KLSAgICBpZiAobV9wUmVmQnVmID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBtX3BTcmNCdWYgPSBzcmNfYnVmOw0KLSAgICBtX1NyY1NpemUgPSBzcmNfc2l6ZTsNCi0gICAgbV9uQ29tcHMgPSAxOw0KLSAgICBtX2JwYyA9IDE7DQotICAgIG1fYkNvbG9yVHJhbnNmb3JtZWQgPSBGQUxTRTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ0NvZGVjX0ZheERlY29kZXI6OnZfUmV3aW5kKCkNCi17DQotICAgIEZYU1lTX21lbXNldDgobV9wUmVmQnVmLCAweGZmLCBtX1BpdGNoKTsNCi0gICAgYml0cG9zID0gMDsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0xQQllURSBDQ29kZWNfRmF4RGVjb2Rlcjo6dl9HZXROZXh0TGluZSgpDQotew0KLSAgICBpbnQgYml0c2l6ZSA9IG1fU3JjU2l6ZSAqIDg7DQotICAgIF9GYXhTa2lwRU9MKG1fcFNyY0J1ZiwgYml0c2l6ZSwgYml0cG9zKTsNCi0gICAgaWYgKGJpdHBvcyA+PSBiaXRzaXplKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBGWFNZU19tZW1zZXQ4KG1fcFNjYW5saW5lQnVmLCAweGZmLCBtX1BpdGNoKTsNCi0gICAgaWYgKG1fRW5jb2RpbmcgPCAwKSB7DQotICAgICAgICBfRmF4RzRHZXRSb3cobV9wU3JjQnVmLCBiaXRzaXplLCBiaXRwb3MsIG1fcFNjYW5saW5lQnVmLCBtX3BSZWZCdWYsIG1fT3JpZ1dpZHRoKTsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKG1fcFJlZkJ1ZiwgbV9wU2NhbmxpbmVCdWYsIG1fUGl0Y2gpOw0KLSAgICB9IGVsc2UgaWYgKG1fRW5jb2RpbmcgPT0gMCkgew0KLSAgICAgICAgX0ZheEdldDFETGluZShtX3BTcmNCdWYsIGJpdHNpemUsIGJpdHBvcywgbV9wU2NhbmxpbmVCdWYsIG1fT3JpZ1dpZHRoKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEZYX0JPT0wgYk5leHQxRCA9IG1fcFNyY0J1ZltiaXRwb3MgLyA4XSAmICgxIDw8ICg3IC0gYml0cG9zICUgOCkpOw0KLSAgICAgICAgYml0cG9zICsrOw0KLSAgICAgICAgaWYgKGJOZXh0MUQpIHsNCi0gICAgICAgICAgICBfRmF4R2V0MURMaW5lKG1fcFNyY0J1ZiwgYml0c2l6ZSwgYml0cG9zLCBtX3BTY2FubGluZUJ1ZiwgbV9PcmlnV2lkdGgpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBfRmF4RzRHZXRSb3cobV9wU3JjQnVmLCBiaXRzaXplLCBiaXRwb3MsIG1fcFNjYW5saW5lQnVmLCBtX3BSZWZCdWYsIG1fT3JpZ1dpZHRoKTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYU1lTX21lbWNweTMyKG1fcFJlZkJ1ZiwgbV9wU2NhbmxpbmVCdWYsIG1fUGl0Y2gpOw0KLSAgICB9DQotICAgIGlmIChtX2JFbmRPZkxpbmUpIHsNCi0gICAgICAgIF9GYXhTa2lwRU9MKG1fcFNyY0J1ZiwgYml0c2l6ZSwgYml0cG9zKTsNCi0gICAgfQ0KLSAgICBpZiAobV9iQnl0ZUFsaWduICYmIGJpdHBvcyA8IGJpdHNpemUpIHsNCi0gICAgICAgIGludCBiaXRwb3MwID0gYml0cG9zOw0KLSAgICAgICAgaW50IGJpdHBvczEgPSAoYml0cG9zICsgNykgLyA4ICogODsNCi0gICAgICAgIHdoaWxlIChtX2JCeXRlQWxpZ24gJiYgYml0cG9zMCA8IGJpdHBvczEpIHsNCi0gICAgICAgICAgICBpbnQgYml0ID0gbV9wU3JjQnVmW2JpdHBvczAgLyA4XSAmICgxIDw8ICg3IC0gYml0cG9zMCAlIDgpKTsNCi0gICAgICAgICAgICBpZiAoYml0ICE9IDApIHsNCi0gICAgICAgICAgICAgICAgbV9iQnl0ZUFsaWduID0gRkFMU0U7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgYml0cG9zMCArKzsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9iQnl0ZUFsaWduKSB7DQotICAgICAgICAgICAgYml0cG9zID0gYml0cG9zMTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAobV9iQmxhY2spIHsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9QaXRjaDsgaSArKykgew0KLSAgICAgICAgICAgIG1fcFNjYW5saW5lQnVmW2ldID0gfm1fcFNjYW5saW5lQnVmW2ldOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBtX3BTY2FubGluZUJ1ZjsNCi19DQotRlhfRFdPUkQgQ0NvZGVjX0ZheERlY29kZXI6OkdldFNyY09mZnNldCgpDQotew0KLSAgICBGWF9EV09SRCByZXQgPSAoYml0cG9zICsgNykgLyA4Ow0KLSAgICBpZiAocmV0ID4gbV9TcmNTaXplKSB7DQotICAgICAgICByZXQgPSBtX1NyY1NpemU7DQotICAgIH0NCi0gICAgcmV0dXJuIHJldDsNCi19DQotZXh0ZXJuICJDIiB7DQotICAgIHZvaWQgX0ZheEc0RGVjb2RlKHZvaWQqLCBGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBpbnQqIHBiaXRwb3MsIEZYX0xQQllURSBkZXN0X2J1ZiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcGl0Y2gpDQotICAgIHsNCi0gICAgICAgIGlmIChwaXRjaCA9PSAwKSB7DQotICAgICAgICAgICAgcGl0Y2ggPSAod2lkdGggKyA3KSAvIDg7DQotICAgICAgICB9DQotICAgICAgICBGWF9MUEJZVEUgcmVmX2J1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIHBpdGNoKTsNCi0gICAgICAgIGlmIChyZWZfYnVmID09IE5VTEwpIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBGWFNZU19tZW1zZXQ4KHJlZl9idWYsIDB4ZmYsIHBpdGNoKTsNCi0gICAgICAgIGludCBiaXRwb3MgPSAqcGJpdHBvczsNCi0gICAgICAgIGZvciAoaW50IGlSb3cgPSAwOyBpUm93IDwgaGVpZ2h0OyBpUm93ICsrKSB7DQotICAgICAgICAgICAgRlhfTFBCWVRFIGxpbmVfYnVmID0gZGVzdF9idWYgKyBpUm93ICogcGl0Y2g7DQotICAgICAgICAgICAgRlhTWVNfbWVtc2V0OChsaW5lX2J1ZiwgMHhmZiwgcGl0Y2gpOw0KLSAgICAgICAgICAgIF9GYXhHNEdldFJvdyhzcmNfYnVmLCBzcmNfc2l6ZSA8PCAzLCBiaXRwb3MsIGxpbmVfYnVmLCByZWZfYnVmLCB3aWR0aCk7DQotICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIocmVmX2J1ZiwgbGluZV9idWYsIHBpdGNoKTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0ZyZWUocmVmX2J1Zik7DQotICAgICAgICAqcGJpdHBvcyA9IGJpdHBvczsNCi0gICAgfQ0KLX07DQotc3RhdGljIGNvbnN0IEZYX0JZVEUgQmxhY2tSdW5UZXJtaW5hdG9yWzEyOF0gPSB7DQotICAgIDB4MzcsIDEwLCAweDAyLCAzLCAweDAzLCAyLCAweDAyLCAyLCAweDAzLCAzLCAweDAzLCA0LCAweDAyLCA0LCAweDAzLCA1LA0KLSAgICAweDA1LCA2LCAweDA0LCA2LCAweDA0LCA3LCAweDA1LCA3LCAweDA3LCA3LCAweDA0LCA4LCAweDA3LCA4LCAweDE4LCA5LA0KLSAgICAweDE3LCAxMCwgMHgxOCwgMTAsIDB4MDgsIDEwLCAweDY3LCAxMSwgMHg2OCwgMTEsIDB4NmMsIDExLCAweDM3LCAxMSwgMHgyOCwgMTEsDQotICAgIDB4MTcsIDExLCAweDE4LCAxMSwgMHhjYSwgMTIsIDB4Y2IsIDEyLCAweGNjLCAxMiwgMHhjZCwgMTIsIDB4NjgsIDEyLCAweDY5LCAxMiwNCi0gICAgMHg2YSwgMTIsIDB4NmIsIDEyLCAweGQyLCAxMiwgMHhkMywgMTIsIDB4ZDQsIDEyLCAweGQ1LCAxMiwgMHhkNiwgMTIsIDB4ZDcsIDEyLA0KLSAgICAweDZjLCAxMiwgMHg2ZCwgMTIsIDB4ZGEsIDEyLCAweGRiLCAxMiwgMHg1NCwgMTIsIDB4NTUsIDEyLCAweDU2LCAxMiwgMHg1NywgMTIsDQotICAgIDB4NjQsIDEyLCAweDY1LCAxMiwgMHg1MiwgMTIsIDB4NTMsIDEyLCAweDI0LCAxMiwgMHgzNywgMTIsIDB4MzgsIDEyLCAweDI3LCAxMiwNCi0gICAgMHgyOCwgMTIsIDB4NTgsIDEyLCAweDU5LCAxMiwgMHgyYiwgMTIsIDB4MmMsIDEyLCAweDVhLCAxMiwgMHg2NiwgMTIsIDB4NjcsIDEyLA0KLX07DQotc3RhdGljIGNvbnN0IEZYX0JZVEUgQmxhY2tSdW5NYXJrdXBbODBdID0gew0KLSAgICAweDBmLCAxMCwgMHhjOCwgMTIsIDB4YzksIDEyLCAweDViLCAxMiwgMHgzMywgMTIsIDB4MzQsIDEyLCAweDM1LCAxMiwgMHg2YywgMTMsDQotICAgIDB4NmQsIDEzLCAweDRhLCAxMywgMHg0YiwgMTMsIDB4NGMsIDEzLCAweDRkLCAxMywgMHg3MiwgMTMsIDB4NzMsIDEzLCAweDc0LCAxMywNCi0gICAgMHg3NSwgMTMsIDB4NzYsIDEzLCAweDc3LCAxMywgMHg1MiwgMTMsIDB4NTMsIDEzLCAweDU0LCAxMywgMHg1NSwgMTMsIDB4NWEsIDEzLA0KLSAgICAweDViLCAxMywgMHg2NCwgMTMsIDB4NjUsIDEzLCAweDA4LCAxMSwgMHgwYywgMTEsIDB4MGQsIDExLCAweDEyLCAxMiwgMHgxMywgMTIsDQotICAgIDB4MTQsIDEyLCAweDE1LCAxMiwgMHgxNiwgMTIsIDB4MTcsIDEyLCAweDFjLCAxMiwgMHgxZCwgMTIsIDB4MWUsIDEyLCAweDFmLCAxMiwNCi19Ow0KLXN0YXRpYyBjb25zdCBGWF9CWVRFIFdoaXRlUnVuVGVybWluYXRvclsxMjhdID0gew0KLSAgICAweDM1LCA4LA0KLSAgICAweDA3LCA2LA0KLSAgICAweDA3LCA0LA0KLSAgICAweDA4LCA0LA0KLSAgICAweDBCLCA0LA0KLSAgICAweDBDLCA0LA0KLSAgICAweDBFLCA0LA0KLSAgICAweDBGLCA0LA0KLSAgICAweDEzLCA1LA0KLSAgICAweDE0LCA1LA0KLSAgICAweDA3LCA1LA0KLSAgICAweDA4LCA1LA0KLSAgICAweDA4LCA2LA0KLSAgICAweDAzLCA2LA0KLSAgICAweDM0LCA2LA0KLSAgICAweDM1LCA2LA0KLSAgICAweDJhLCA2LA0KLSAgICAweDJCLCA2LA0KLSAgICAweDI3LCA3LA0KLSAgICAweDBjLCA3LA0KLSAgICAweDA4LCA3LA0KLSAgICAweDE3LCA3LA0KLSAgICAweDAzLCA3LA0KLSAgICAweDA0LCA3LA0KLSAgICAweDI4LCA3LA0KLSAgICAweDJCLCA3LA0KLSAgICAweDEzLCA3LA0KLSAgICAweDI0LCA3LA0KLSAgICAweDE4LCA3LA0KLSAgICAweDAyLCA4LA0KLSAgICAweDAzLCA4LA0KLSAgICAweDFhLCA4LA0KLSAgICAweDFiLCA4LA0KLSAgICAweDEyLCA4LA0KLSAgICAweDEzLCA4LA0KLSAgICAweDE0LCA4LA0KLSAgICAweDE1LCA4LA0KLSAgICAweDE2LCA4LA0KLSAgICAweDE3LCA4LA0KLSAgICAweDI4LCA4LA0KLSAgICAweDI5LCA4LA0KLSAgICAweDJhLCA4LA0KLSAgICAweDJiLCA4LA0KLSAgICAweDJjLCA4LA0KLSAgICAweDJkLCA4LA0KLSAgICAweDA0LCA4LA0KLSAgICAweDA1LCA4LA0KLSAgICAweDBhLCA4LA0KLSAgICAweDBiLCA4LA0KLSAgICAweDUyLCA4LA0KLSAgICAweDUzLCA4LA0KLSAgICAweDU0LCA4LA0KLSAgICAweDU1LCA4LA0KLSAgICAweDI0LCA4LA0KLSAgICAweDI1LCA4LA0KLSAgICAweDU4LCA4LA0KLSAgICAweDU5LCA4LA0KLSAgICAweDVhLCA4LA0KLSAgICAweDViLCA4LA0KLSAgICAweDRhLCA4LA0KLSAgICAweDRiLCA4LA0KLSAgICAweDMyLCA4LA0KLSAgICAweDMzLCA4LA0KLSAgICAweDM0LCA4LA0KLX07DQotc3RhdGljIGNvbnN0IEZYX0JZVEUgV2hpdGVSdW5NYXJrdXBbODBdID0gew0KLSAgICAweDFiLCA1LA0KLSAgICAweDEyLCA1LA0KLSAgICAweDE3LCA2LA0KLSAgICAweDM3LCA3LA0KLSAgICAweDM2LCA4LA0KLSAgICAweDM3LCA4LA0KLSAgICAweDY0LCA4LA0KLSAgICAweDY1LCA4LA0KLSAgICAweDY4LCA4LA0KLSAgICAweDY3LCA4LA0KLSAgICAweGNjLCA5LA0KLSAgICAweGNkLCA5LA0KLSAgICAweGQyLCA5LA0KLSAgICAweGQzLCA5LA0KLSAgICAweGQ0LCA5LA0KLSAgICAweGQ1LCA5LA0KLSAgICAweGQ2LCA5LA0KLSAgICAweGQ3LCA5LA0KLSAgICAweGQ4LCA5LA0KLSAgICAweGQ5LCA5LA0KLSAgICAweGRhLCA5LA0KLSAgICAweGRiLCA5LA0KLSAgICAweDk4LCA5LA0KLSAgICAweDk5LCA5LA0KLSAgICAweDlhLCA5LA0KLSAgICAweDE4LCA2LA0KLSAgICAweDliLCA5LA0KLSAgICAweDA4LCAxMSwNCi0gICAgMHgwYywgMTEsDQotICAgIDB4MGQsIDExLA0KLSAgICAweDEyLCAxMiwNCi0gICAgMHgxMywgMTIsDQotICAgIDB4MTQsIDEyLA0KLSAgICAweDE1LCAxMiwNCi0gICAgMHgxNiwgMTIsDQotICAgIDB4MTcsIDEyLA0KLSAgICAweDFjLCAxMiwNCi0gICAgMHgxZCwgMTIsDQotICAgIDB4MWUsIDEyLA0KLSAgICAweDFmLCAxMiwNCi19Ow0KLXN0YXRpYyB2b2lkIF9BZGRCaXRTdHJlYW0oRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQmIGRlc3RfYml0cG9zLCBpbnQgZGF0YSwgaW50IGJpdGxlbikNCi17DQotICAgIGZvciAoaW50IGkgPSBiaXRsZW4gLSAxOyBpID49IDA7IGkgLS0pIHsNCi0gICAgICAgIGlmIChkYXRhICYgKDEgPDwgaSkpIHsNCi0gICAgICAgICAgICBkZXN0X2J1ZltkZXN0X2JpdHBvcyAvIDhdIHw9IDEgPDwgKDcgLSBkZXN0X2JpdHBvcyAlIDgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdF9iaXRwb3MgKys7DQotICAgIH0NCi19DQotc3RhdGljIHZvaWQgX0ZheEVuY29kZVJ1bihGWF9MUEJZVEUgZGVzdF9idWYsIGludCYgZGVzdF9iaXRwb3MsIGludCBydW4sIEZYX0JPT0wgYldoaXRlKQ0KLXsNCi0gICAgd2hpbGUgKHJ1biA+PSAyNTYwKSB7DQotICAgICAgICBfQWRkQml0U3RyZWFtKGRlc3RfYnVmLCBkZXN0X2JpdHBvcywgMHgxZiwgMTIpOw0KLSAgICAgICAgcnVuIC09IDI1NjA7DQotICAgIH0NCi0gICAgaWYgKHJ1biA+PSA2NCkgew0KLSAgICAgICAgaW50IG1hcmt1cCA9IHJ1biAtIHJ1biAlIDY0Ow0KLSAgICAgICAgRlhfTFBDQllURSBwID0gYldoaXRlID8gV2hpdGVSdW5NYXJrdXAgOiBCbGFja1J1bk1hcmt1cDsNCi0gICAgICAgIHAgKz0gKG1hcmt1cCAvIDY0IC0gMSkgKiAyOw0KLSAgICAgICAgX0FkZEJpdFN0cmVhbShkZXN0X2J1ZiwgZGVzdF9iaXRwb3MsICpwLCBwWzFdKTsNCi0gICAgfQ0KLSAgICBydW4gJT0gNjQ7DQotICAgIEZYX0xQQ0JZVEUgcCA9IGJXaGl0ZSA/IFdoaXRlUnVuVGVybWluYXRvciA6IEJsYWNrUnVuVGVybWluYXRvcjsNCi0gICAgcCArPSBydW4gKiAyOw0KLSAgICBfQWRkQml0U3RyZWFtKGRlc3RfYnVmLCBkZXN0X2JpdHBvcywgKnAsIHBbMV0pOw0KLX0NCi1zdGF0aWMgdm9pZCBfRmF4RW5jb2RlMkRMaW5lKEZYX0xQQllURSBkZXN0X2J1ZiwgaW50JiBkZXN0X2JpdHBvcywgRlhfTFBDQllURSBzcmNfYnVmLCBGWF9MUENCWVRFIHJlZl9idWYsIGludCBjb2xzKQ0KLXsNCi0gICAgaW50IGEwID0gLTEsIGEwY29sb3IgPSAxOw0KLSAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgaW50IGExID0gX0ZpbmRCaXQoc3JjX2J1ZiwgY29scywgYTAgKyAxLCAxIC0gYTBjb2xvcik7DQotICAgICAgICBpbnQgYjEsIGIyOw0KLSAgICAgICAgX0ZheEc0RmluZEIxQjIocmVmX2J1ZiwgY29scywgYTAsIGEwY29sb3IsIGIxLCBiMik7DQotICAgICAgICBpZiAoYjIgPCBhMSkgew0KLSAgICAgICAgICAgIGRlc3RfYml0cG9zICs9IDM7DQotICAgICAgICAgICAgZGVzdF9idWZbZGVzdF9iaXRwb3MgLyA4XSB8PSAxIDw8ICg3IC0gZGVzdF9iaXRwb3MgJSA4KTsNCi0gICAgICAgICAgICBkZXN0X2JpdHBvcyArKzsNCi0gICAgICAgICAgICBhMCA9IGIyOw0KLSAgICAgICAgfSBlbHNlIGlmIChhMSAtIGIxIDw9IDMgJiYgYjEgLSBhMSA8PSAzKSB7DQotICAgICAgICAgICAgaW50IGRlbHRhID0gYTEgLSBiMTsNCi0gICAgICAgICAgICBzd2l0Y2ggKGRlbHRhKSB7DQotICAgICAgICAgICAgICAgIGNhc2UgMDoNCi0gICAgICAgICAgICAgICAgICAgIGRlc3RfYnVmW2Rlc3RfYml0cG9zIC8gOF0gfD0gMSA8PCAoNyAtIGRlc3RfYml0cG9zICUgOCk7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAxOg0KLSAgICAgICAgICAgICAgICBjYXNlIDI6DQotICAgICAgICAgICAgICAgIGNhc2UgMzoNCi0gICAgICAgICAgICAgICAgICAgIGRlc3RfYml0cG9zICs9IGRlbHRhID09IDEgPyAxIDogZGVsdGEgKyAyOw0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9idWZbZGVzdF9iaXRwb3MgLyA4XSB8PSAxIDw8ICg3IC0gZGVzdF9iaXRwb3MgJSA4KTsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3RfYml0cG9zICsrOw0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9idWZbZGVzdF9iaXRwb3MgLyA4XSB8PSAxIDw8ICg3IC0gZGVzdF9iaXRwb3MgJSA4KTsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIC0xOg0KLSAgICAgICAgICAgICAgICBjYXNlIC0yOg0KLSAgICAgICAgICAgICAgICBjYXNlIC0zOg0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9iaXRwb3MgKz0gZGVsdGEgPT0gLTEgPyAxIDogLWRlbHRhICsgMjsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3RfYnVmW2Rlc3RfYml0cG9zIC8gOF0gfD0gMSA8PCAoNyAtIGRlc3RfYml0cG9zICUgOCk7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X2JpdHBvcyArKzsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBkZXN0X2JpdHBvcyArKzsNCi0gICAgICAgICAgICBhMCA9IGExOw0KLSAgICAgICAgICAgIGEwY29sb3IgPSAxIC0gYTBjb2xvcjsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaW50IGEyID0gX0ZpbmRCaXQoc3JjX2J1ZiwgY29scywgYTEgKyAxLCBhMGNvbG9yKTsNCi0gICAgICAgICAgICBkZXN0X2JpdHBvcyArKzsNCi0gICAgICAgICAgICBkZXN0X2JpdHBvcyArKzsNCi0gICAgICAgICAgICBkZXN0X2J1ZltkZXN0X2JpdHBvcyAvIDhdIHw9IDEgPDwgKDcgLSBkZXN0X2JpdHBvcyAlIDgpOw0KLSAgICAgICAgICAgIGRlc3RfYml0cG9zICsrOw0KLSAgICAgICAgICAgIGlmIChhMCA8IDApIHsNCi0gICAgICAgICAgICAgICAgYTAgPSAwOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBfRmF4RW5jb2RlUnVuKGRlc3RfYnVmLCBkZXN0X2JpdHBvcywgYTEgLSBhMCwgYTBjb2xvcik7DQotICAgICAgICAgICAgX0ZheEVuY29kZVJ1bihkZXN0X2J1ZiwgZGVzdF9iaXRwb3MsIGEyIC0gYTEsIDEgLSBhMGNvbG9yKTsNCi0gICAgICAgICAgICBhMCA9IGEyOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGEwID49IGNvbHMpIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgIH0NCi19DQotY2xhc3MgQ0NvZGVjX0ZheEVuY29kZXIgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENDb2RlY19GYXhFbmNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcGl0Y2gpOw0KLSAgICB+Q0NvZGVjX0ZheEVuY29kZXIoKTsNCi0gICAgdm9pZAkJCUVuY29kZShGWF9MUEJZVEUmIGRlc3RfYnVmLCBGWF9EV09SRCYgZGVzdF9zaXplKTsNCi0gICAgdm9pZAkJCUVuY29kZTJETGluZShGWF9MUENCWVRFIHNjYW5fbGluZSk7DQotICAgIENGWF9CaW5hcnlCdWYJbV9EZXN0QnVmOw0KLSAgICBGWF9MUEJZVEUJCW1fcFJlZkxpbmUsIG1fcExpbmVCdWY7DQotICAgIGludAkJCQltX0NvbHMsIG1fUm93cywgbV9QaXRjaDsNCi0gICAgRlhfTFBDQllURQkJbV9wU3JjQnVmOw0KLX07DQotQ0NvZGVjX0ZheEVuY29kZXI6OkNDb2RlY19GYXhFbmNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcGl0Y2gpDQotew0KLSAgICBtX3BTcmNCdWYgPSBzcmNfYnVmOw0KLSAgICBtX0NvbHMgPSB3aWR0aDsNCi0gICAgbV9Sb3dzID0gaGVpZ2h0Ow0KLSAgICBtX1BpdGNoID0gcGl0Y2g7DQotICAgIG1fcFJlZkxpbmUgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1BpdGNoKTsNCi0gICAgaWYgKG1fcFJlZkxpbmUgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYU1lTX21lbXNldDgobV9wUmVmTGluZSwgMHhmZiwgbV9QaXRjaCk7DQotICAgIG1fcExpbmVCdWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1BpdGNoICogOCk7DQotICAgIGlmIChtX3BMaW5lQnVmID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX0Rlc3RCdWYuRXN0aW1hdGVTaXplKDAsIDEwMjQwKTsNCi19DQotQ0NvZGVjX0ZheEVuY29kZXI6On5DQ29kZWNfRmF4RW5jb2RlcigpDQotew0KLSAgICBpZiAobV9wUmVmTGluZSkgew0KLSAgICAgICAgRlhfRnJlZShtX3BSZWZMaW5lKTsNCi0gICAgfQ0KLSAgICBpZiAobV9wTGluZUJ1Zikgew0KLSAgICAgICAgRlhfRnJlZShtX3BMaW5lQnVmKTsNCi0gICAgfQ0KLX0NCi12b2lkIENDb2RlY19GYXhFbmNvZGVyOjpFbmNvZGUoRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkNCi17DQotICAgIGludCBkZXN0X2JpdHBvcyA9IDA7DQotICAgIEZYX0JZVEUgbGFzdF9ieXRlID0gMDsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX1Jvd3M7IGkgKyspIHsNCi0gICAgICAgIEZYX0xQQ0JZVEUgc2Nhbl9saW5lID0gbV9wU3JjQnVmICsgaSAqIG1fUGl0Y2g7DQotICAgICAgICBGWFNZU19tZW1zZXQzMihtX3BMaW5lQnVmLCAwLCBtX1BpdGNoICogOCk7DQotICAgICAgICBtX3BMaW5lQnVmWzBdID0gbGFzdF9ieXRlOw0KLSAgICAgICAgX0ZheEVuY29kZTJETGluZShtX3BMaW5lQnVmLCBkZXN0X2JpdHBvcywgc2Nhbl9saW5lLCBtX3BSZWZMaW5lLCBtX0NvbHMpOw0KLSAgICAgICAgbV9EZXN0QnVmLkFwcGVuZEJsb2NrKG1fcExpbmVCdWYsIGRlc3RfYml0cG9zIC8gOCk7DQotICAgICAgICBsYXN0X2J5dGUgPSBtX3BMaW5lQnVmW2Rlc3RfYml0cG9zIC8gOF07DQotICAgICAgICBkZXN0X2JpdHBvcyAlPSA4Ow0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wUmVmTGluZSwgc2Nhbl9saW5lLCBtX1BpdGNoKTsNCi0gICAgfQ0KLSAgICBpZiAoZGVzdF9iaXRwb3MpIHsNCi0gICAgICAgIG1fRGVzdEJ1Zi5BcHBlbmRCeXRlKGxhc3RfYnl0ZSk7DQotICAgIH0NCi0gICAgZGVzdF9idWYgPSBtX0Rlc3RCdWYuR2V0QnVmZmVyKCk7DQotICAgIGRlc3Rfc2l6ZSA9IG1fRGVzdEJ1Zi5HZXRTaXplKCk7DQotICAgIG1fRGVzdEJ1Zi5EZXRhY2hCdWZmZXIoKTsNCi19DQotRlhfQk9PTAlDQ29kZWNfRmF4TW9kdWxlOjpFbmNvZGUoRlhfTFBDQllURSBzcmNfYnVmLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBwaXRjaCwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkNCi17DQotICAgIENDb2RlY19GYXhFbmNvZGVyIGVuY29kZXIoc3JjX2J1Ziwgd2lkdGgsIGhlaWdodCwgcGl0Y2gpOw0KLSAgICBlbmNvZGVyLkVuY29kZShkZXN0X2J1ZiwgZGVzdF9zaXplKTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUlDb2RlY19TY2FubGluZURlY29kZXIqCUNDb2RlY19GYXhNb2R1bGU6OkNyZWF0ZURlY29kZXIoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KLSAgICAgICAgaW50IEssIEZYX0JPT0wgRW5kT2ZMaW5lLCBGWF9CT09MIEVuY29kZWRCeXRlQWxpZ24sIEZYX0JPT0wgQmxhY2tJczEsIGludCBDb2x1bW5zLCBpbnQgUm93cykNCi17DQotICAgIENDb2RlY19GYXhEZWNvZGVyKiBwRGVjb2RlciA9IEZYX05FVyBDQ29kZWNfRmF4RGVjb2RlcjsNCi0gICAgaWYgKHBEZWNvZGVyID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHBEZWNvZGVyLT5DcmVhdGUoc3JjX2J1Ziwgc3JjX3NpemUsIHdpZHRoLCBoZWlnaHQsIEssIEVuZE9mTGluZSwgRW5jb2RlZEJ5dGVBbGlnbiwgQmxhY2tJczEsIENvbHVtbnMsIFJvd3MpOw0KLSAgICByZXR1cm4gcERlY29kZXI7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaCIKKyNpbmNsdWRlICJjb2RlY19pbnQuaCIKK2V4dGVybiBjb25zdCBGWF9CWVRFIE9uZUxlYWRQb3NbMjU2XTsKK2V4dGVybiBjb25zdCBGWF9CWVRFIFplcm9MZWFkUG9zWzI1Nl07CitpbnQgX0ZpbmRCaXQoY29uc3QgRlhfQllURSogZGF0YV9idWYsIGludCBtYXhfcG9zLCBpbnQgc3RhcnRfcG9zLCBpbnQgYml0KQoreworICAgIGlmIChzdGFydF9wb3MgPj0gbWF4X3BvcykgeworICAgICAgICByZXR1cm4gbWF4X3BvczsKKyAgICB9CisgICAgRlhfTFBDQllURSBsZWFkaW5nX3BvcyA9IGJpdCA/IE9uZUxlYWRQb3MgOiBaZXJvTGVhZFBvczsKKyAgICBpZiAoc3RhcnRfcG9zICUgOCkgeworICAgICAgICBGWF9CWVRFIGRhdGEgPSBkYXRhX2J1ZltzdGFydF9wb3MgLyA4XTsKKyAgICAgICAgaWYgKGJpdCkgeworICAgICAgICAgICAgZGF0YSAmPSAweGZmID4+IChzdGFydF9wb3MgJSA4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRhdGEgfD0gMHhmZiA8PCAoOCAtIHN0YXJ0X3BvcyAlIDgpOworICAgICAgICB9CisgICAgICAgIGlmIChsZWFkaW5nX3Bvc1tkYXRhXSA8IDgpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGFydF9wb3MgLyA4ICogOCArIGxlYWRpbmdfcG9zW2RhdGFdOworICAgICAgICB9CisgICAgICAgIHN0YXJ0X3BvcyArPSA3OworICAgIH0KKyAgICBGWF9CWVRFIHNraXAgPSBiaXQgPyAweDAwIDogMHhmZjsKKyAgICBpbnQgYnl0ZV9wb3MgPSBzdGFydF9wb3MgLyA4OworICAgIGludCBtYXhfYnl0ZSA9IChtYXhfcG9zICsgNykgLyA4OworICAgIHdoaWxlIChieXRlX3BvcyA8IG1heF9ieXRlKSB7CisgICAgICAgIGlmIChkYXRhX2J1ZltieXRlX3Bvc10gIT0gc2tpcCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnl0ZV9wb3MgKys7CisgICAgfQorICAgIGlmIChieXRlX3BvcyA9PSBtYXhfYnl0ZSkgeworICAgICAgICByZXR1cm4gbWF4X3BvczsKKyAgICB9CisgICAgaW50IHBvcyA9IGxlYWRpbmdfcG9zW2RhdGFfYnVmW2J5dGVfcG9zXV0gKyBieXRlX3BvcyAqIDg7CisgICAgaWYgKHBvcyA+IG1heF9wb3MpIHsKKyAgICAgICAgcG9zID0gbWF4X3BvczsKKyAgICB9CisgICAgcmV0dXJuIHBvczsKK30KK3ZvaWQgX0ZheEc0RmluZEIxQjIoY29uc3QgRlhfQllURSogcmVmX2J1ZiwgaW50IGNvbHVtbnMsIGludCBhMCwgRlhfQk9PTCBhMGNvbG9yLCBpbnQmIGIxLCBpbnQmIGIyKQoreworICAgIGlmIChhMGNvbG9yKSB7CisgICAgICAgIGEwY29sb3IgPSAxOworICAgIH0KKyAgICBGWF9CWVRFIGZpcnN0X2JpdCA9IChhMCA8IDApID8gMSA6ICgocmVmX2J1ZlthMCAvIDhdICYgKDEgPDwgKDcgLSBhMCAlIDgpKSkgIT0gMCk7CisgICAgYjEgPSBfRmluZEJpdChyZWZfYnVmLCBjb2x1bW5zLCBhMCArIDEsICFmaXJzdF9iaXQpOworICAgIGlmIChiMSA+PSBjb2x1bW5zKSB7CisgICAgICAgIGIxID0gYjIgPSBjb2x1bW5zOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChmaXJzdF9iaXQgPT0gIWEwY29sb3IpIHsKKyAgICAgICAgYjEgPSBfRmluZEJpdChyZWZfYnVmLCBjb2x1bW5zLCBiMSArIDEsIGZpcnN0X2JpdCk7CisgICAgICAgIGZpcnN0X2JpdCA9ICFmaXJzdF9iaXQ7CisgICAgfQorICAgIGlmIChiMSA+PSBjb2x1bW5zKSB7CisgICAgICAgIGIxID0gYjIgPSBjb2x1bW5zOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGIyID0gX0ZpbmRCaXQocmVmX2J1ZiwgY29sdW1ucywgYjEgKyAxLCBmaXJzdF9iaXQpOworfQordm9pZCBfRmF4RmlsbEJpdHMoRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQgY29sdW1ucywgaW50IHN0YXJ0cG9zLCBpbnQgZW5kcG9zKQoreworICAgIGlmIChzdGFydHBvcyA8IDApIHsKKyAgICAgICAgc3RhcnRwb3MgPSAwOworICAgIH0KKyAgICBpZiAoZW5kcG9zIDwgMCkgeworICAgICAgICBlbmRwb3MgPSAwOworICAgIH0KKyAgICBpZiAoZW5kcG9zID49IGNvbHVtbnMpIHsKKyAgICAgICAgZW5kcG9zID0gY29sdW1uczsKKyAgICB9CisgICAgaWYgKHN0YXJ0cG9zID49IGVuZHBvcykgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludCBmaXJzdF9ieXRlID0gc3RhcnRwb3MgLyA4OworICAgIGludCBsYXN0X2J5dGUgPSAoZW5kcG9zIC0gMSkgLyA4OworICAgIGlmIChmaXJzdF9ieXRlID09IGxhc3RfYnl0ZSkgeworICAgICAgICBmb3IgKGludCBpID0gc3RhcnRwb3MgJSA4OyBpIDw9IChlbmRwb3MgLSAxKSAlIDg7IGkgKyspIHsKKyAgICAgICAgICAgIGRlc3RfYnVmW2ZpcnN0X2J5dGVdIC09IDEgPDwgKDcgLSBpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludCBpOworICAgIGZvciAoaSA9IHN0YXJ0cG9zICUgODsgaSA8IDg7IGkgKyspIHsKKyAgICAgICAgZGVzdF9idWZbZmlyc3RfYnl0ZV0gLT0gMSA8PCAoNyAtIGkpOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDw9IChlbmRwb3MgLSAxKSAlIDg7IGkgKyspIHsKKyAgICAgICAgZGVzdF9idWZbbGFzdF9ieXRlXSAtPSAxIDw8ICg3IC0gaSk7CisgICAgfQorICAgIGlmIChsYXN0X2J5dGUgPiBmaXJzdF9ieXRlICsgMSkgeworICAgICAgICBGWFNZU19tZW1zZXQzMihkZXN0X2J1ZiArIGZpcnN0X2J5dGUgKyAxLCAwLCBsYXN0X2J5dGUgLSBmaXJzdF9ieXRlIC0gMSk7CisgICAgfQorfQorI2RlZmluZSBORVhUQklUIHNyY19idWZbYml0cG9zLzhdICYgKDEgPDwgKDctYml0cG9zJTgpKTsgYml0cG9zICsrOworI2RlZmluZSBBRERCSVQoY29kZSwgYml0KSBjb2RlID0gY29kZSA8PCAxOyBpZiAoYml0KSBjb2RlICsrOworI2RlZmluZSBHRVRCSVQoYml0cG9zKSBzcmNfYnVmW2JpdHBvcy84XSAmICgxIDw8ICg3LWJpdHBvcyU4KSkKK3N0YXRpYyBjb25zdCBGWF9CWVRFIEZheEJsYWNrUnVuSW5zW10gPSB7CisgICAgMCwKKyAgICAyLAorICAgIDB4MDIsIDMsIDAsCisgICAgMHgwMywgMiwgMCwKKyAgICAyLAorICAgIDB4MDIsIDEsIDAsCisgICAgMHgwMywgNCwgMCwKKyAgICAyLAorICAgIDB4MDIsIDYsIDAsCisgICAgMHgwMywgNSwgMCwKKyAgICAxLAorICAgIDB4MDMsIDcsIDAsCisgICAgMiwKKyAgICAweDA0LCA5LCAwLAorICAgIDB4MDUsIDgsIDAsCisgICAgMywKKyAgICAweDA0LCAxMCwgMCwKKyAgICAweDA1LCAxMSwgMCwKKyAgICAweDA3LCAxMiwgMCwKKyAgICAyLAorICAgIDB4MDQsIDEzLCAwLAorICAgIDB4MDcsIDE0LCAwLAorICAgIDEsCisgICAgMHgxOCwgMTUsIDAsCisgICAgNSwKKyAgICAweDA4LCAxOCwgMCwKKyAgICAweDBmLCA2NCwgMCwKKyAgICAweDE3LCAxNiwgMCwKKyAgICAweDE4LCAxNywgMCwKKyAgICAweDM3LCAwLCAwLAorICAgIDEwLAorICAgIDB4MDgsIDB4MDAsIDB4MDcsCisgICAgMHgwYywgMHg0MCwgMHgwNywKKyAgICAweDBkLCAweDgwLCAweDA3LAorICAgIDB4MTcsIDI0LCAwLAorICAgIDB4MTgsIDI1LCAwLAorICAgIDB4MjgsIDIzLCAwLAorICAgIDB4MzcsIDIyLCAwLAorICAgIDB4NjcsIDE5LCAwLAorICAgIDB4NjgsIDIwLCAwLAorICAgIDB4NmMsIDIxLCAwLAorICAgIDU0LAorICAgIDB4MTIsIDE5ODQgJSAyNTYsIDE5ODQgLyAyNTYsCisgICAgMHgxMywgMjA0OCAlIDI1NiwgMjA0OCAvIDI1NiwKKyAgICAweDE0LCAyMTEyICUgMjU2LCAyMTEyIC8gMjU2LAorICAgIDB4MTUsIDIxNzYgJSAyNTYsIDIxNzYgLyAyNTYsCisgICAgMHgxNiwgMjI0MCAlIDI1NiwgMjI0MCAvIDI1NiwKKyAgICAweDE3LCAyMzA0ICUgMjU2LCAyMzA0IC8gMjU2LAorICAgIDB4MWMsIDIzNjggJSAyNTYsIDIzNjggLyAyNTYsCisgICAgMHgxZCwgMjQzMiAlIDI1NiwgMjQzMiAvIDI1NiwKKyAgICAweDFlLCAyNDk2ICUgMjU2LCAyNDk2IC8gMjU2LAorICAgIDB4MWYsIDI1NjAgJSAyNTYsIDI1NjAgLyAyNTYsCisgICAgMHgyNCwgNTIsIDAsCisgICAgMHgyNywgNTUsIDAsCisgICAgMHgyOCwgNTYsIDAsCisgICAgMHgyYiwgNTksIDAsCisgICAgMHgyYywgNjAsIDAsCisgICAgMHgzMywgMzIwICUgMjU2LCAzMjAgLyAyNTYsCisgICAgMHgzNCwgMzg0ICUgMjU2LCAzODQgLyAyNTYsCisgICAgMHgzNSwgNDQ4ICUgMjU2LCA0NDggLyAyNTYsCisgICAgMHgzNywgNTMsIDAsCisgICAgMHgzOCwgNTQsIDAsCisgICAgMHg1MiwgNTAsIDAsCisgICAgMHg1MywgNTEsIDAsCisgICAgMHg1NCwgNDQsIDAsCisgICAgMHg1NSwgNDUsIDAsCisgICAgMHg1NiwgNDYsIDAsCisgICAgMHg1NywgNDcsIDAsCisgICAgMHg1OCwgNTcsIDAsCisgICAgMHg1OSwgNTgsIDAsCisgICAgMHg1YSwgNjEsIDAsCisgICAgMHg1YiwgMjU2ICUgMjU2LCAyNTYgLyAyNTYsCisgICAgMHg2NCwgNDgsIDAsCisgICAgMHg2NSwgNDksIDAsCisgICAgMHg2NiwgNjIsIDAsCisgICAgMHg2NywgNjMsIDAsCisgICAgMHg2OCwgMzAsIDAsCisgICAgMHg2OSwgMzEsIDAsCisgICAgMHg2YSwgMzIsIDAsCisgICAgMHg2YiwgMzMsIDAsCisgICAgMHg2YywgNDAsIDAsCisgICAgMHg2ZCwgNDEsIDAsCisgICAgMHhjOCwgMTI4LCAwLAorICAgIDB4YzksIDE5MiwgMCwKKyAgICAweGNhLCAyNiwgMCwKKyAgICAweGNiLCAyNywgMCwKKyAgICAweGNjLCAyOCwgMCwKKyAgICAweGNkLCAyOSwgMCwKKyAgICAweGQyLCAzNCwgMCwKKyAgICAweGQzLCAzNSwgMCwKKyAgICAweGQ0LCAzNiwgMCwKKyAgICAweGQ1LCAzNywgMCwKKyAgICAweGQ2LCAzOCwgMCwKKyAgICAweGQ3LCAzOSwgMCwKKyAgICAweGRhLCA0MiwgMCwKKyAgICAweGRiLCA0MywgMCwKKyAgICAyMCwKKyAgICAweDRhLCA2NDAgJSAyNTYsIDY0MCAvIDI1NiwKKyAgICAweDRiLCA3MDQgJSAyNTYsIDcwNCAvIDI1NiwKKyAgICAweDRjLCA3NjggJSAyNTYsIDc2OCAvIDI1NiwKKyAgICAweDRkLCA4MzIgJSAyNTYsIDgzMiAvIDI1NiwKKyAgICAweDUyLCAxMjgwICUgMjU2LCAxMjgwIC8gMjU2LAorICAgIDB4NTMsIDEzNDQgJSAyNTYsIDEzNDQgLyAyNTYsCisgICAgMHg1NCwgMTQwOCAlIDI1NiwgMTQwOCAvIDI1NiwKKyAgICAweDU1LCAxNDcyICUgMjU2LCAxNDcyIC8gMjU2LAorICAgIDB4NWEsIDE1MzYgJSAyNTYsIDE1MzYgLyAyNTYsCisgICAgMHg1YiwgMTYwMCAlIDI1NiwgMTYwMCAvIDI1NiwKKyAgICAweDY0LCAxNjY0ICUgMjU2LCAxNjY0IC8gMjU2LAorICAgIDB4NjUsIDE3MjggJSAyNTYsIDE3MjggLyAyNTYsCisgICAgMHg2YywgNTEyICUgMjU2LCA1MTIgLyAyNTYsCisgICAgMHg2ZCwgNTc2ICUgMjU2LCA1NzYgLyAyNTYsCisgICAgMHg3MiwgODk2ICUgMjU2LCA4OTYgLyAyNTYsCisgICAgMHg3MywgOTYwICUgMjU2LCA5NjAgLyAyNTYsCisgICAgMHg3NCwgMTAyNCAlIDI1NiwgMTAyNCAvIDI1NiwKKyAgICAweDc1LCAxMDg4ICUgMjU2LCAxMDg4IC8gMjU2LAorICAgIDB4NzYsIDExNTIgJSAyNTYsIDExNTIgLyAyNTYsCisgICAgMHg3NywgMTIxNiAlIDI1NiwgMTIxNiAvIDI1NiwKKyAgICAweGZmCit9Oworc3RhdGljIGNvbnN0IEZYX0JZVEUgRmF4V2hpdGVSdW5JbnNbXSA9IHsKKyAgICAwLAorICAgIDAsCisgICAgMCwKKyAgICA2LAorICAgIDB4MDcsIDIsIDAsCisgICAgMHgwOCwgMywgMCwKKyAgICAweDBCLCA0LCAwLAorICAgIDB4MEMsIDUsIDAsCisgICAgMHgwRSwgNiwgMCwKKyAgICAweDBGLCA3LCAwLAorICAgIDYsCisgICAgMHgwNywgMTAsIDAsCisgICAgMHgwOCwgMTEsIDAsCisgICAgMHgxMiwgMTI4LCAwLAorICAgIDB4MTMsIDgsIDAsCisgICAgMHgxNCwgOSwgMCwKKyAgICAweDFiLCA2NCwgMCwKKyAgICA5LAorICAgIDB4MDMsIDEzLCAwLAorICAgIDB4MDcsIDEsIDAsCisgICAgMHgwOCwgMTIsIDAsCisgICAgMHgxNywgMTkyLCAwLAorICAgIDB4MTgsIDE2NjQgJSAyNTYsIDE2NjQgLyAyNTYsCisgICAgMHgyYSwgMTYsIDAsCisgICAgMHgyQiwgMTcsIDAsCisgICAgMHgzNCwgMTQsIDAsCisgICAgMHgzNSwgMTUsIDAsCisgICAgMTIsCisgICAgMHgwMywgMjIsIDAsCisgICAgMHgwNCwgMjMsIDAsCisgICAgMHgwOCwgMjAsIDAsCisgICAgMHgwYywgMTksIDAsCisgICAgMHgxMywgMjYsIDAsCisgICAgMHgxNywgMjEsIDAsCisgICAgMHgxOCwgMjgsIDAsCisgICAgMHgyNCwgMjcsIDAsCisgICAgMHgyNywgMTgsIDAsCisgICAgMHgyOCwgMjQsIDAsCisgICAgMHgyQiwgMjUsIDAsCisgICAgMHgzNywgMjU2ICUgMjU2LCAyNTYgLyAyNTYsCisgICAgNDIsCisgICAgMHgwMiwgMjksIDAsCisgICAgMHgwMywgMzAsIDAsCisgICAgMHgwNCwgNDUsIDAsCisgICAgMHgwNSwgNDYsIDAsCisgICAgMHgwYSwgNDcsIDAsCisgICAgMHgwYiwgNDgsIDAsCisgICAgMHgxMiwgMzMsIDAsCisgICAgMHgxMywgMzQsIDAsCisgICAgMHgxNCwgMzUsIDAsCisgICAgMHgxNSwgMzYsIDAsCisgICAgMHgxNiwgMzcsIDAsCisgICAgMHgxNywgMzgsIDAsCisgICAgMHgxYSwgMzEsIDAsCisgICAgMHgxYiwgMzIsIDAsCisgICAgMHgyNCwgNTMsIDAsCisgICAgMHgyNSwgNTQsIDAsCisgICAgMHgyOCwgMzksIDAsCisgICAgMHgyOSwgNDAsIDAsCisgICAgMHgyYSwgNDEsIDAsCisgICAgMHgyYiwgNDIsIDAsCisgICAgMHgyYywgNDMsIDAsCisgICAgMHgyZCwgNDQsIDAsCisgICAgMHgzMiwgNjEsIDAsCisgICAgMHgzMywgNjIsIDAsCisgICAgMHgzNCwgNjMsIDAsCisgICAgMHgzNSwgMCwgMCwKKyAgICAweDM2LCAzMjAgJSAyNTYsIDMyMCAvIDI1NiwKKyAgICAweDM3LCAzODQgJSAyNTYsIDM4NCAvIDI1NiwKKyAgICAweDRhLCA1OSwgMCwKKyAgICAweDRiLCA2MCwgMCwKKyAgICAweDUyLCA0OSwgMCwKKyAgICAweDUzLCA1MCwgMCwKKyAgICAweDU0LCA1MSwgMCwKKyAgICAweDU1LCA1MiwgMCwKKyAgICAweDU4LCA1NSwgMCwKKyAgICAweDU5LCA1NiwgMCwKKyAgICAweDVhLCA1NywgMCwKKyAgICAweDViLCA1OCwgMCwKKyAgICAweDY0LCA0NDggJSAyNTYsIDQ0OCAvIDI1NiwKKyAgICAweDY1LCA1MTIgJSAyNTYsIDUxMiAvIDI1NiwKKyAgICAweDY3LCA2NDAgJSAyNTYsIDY0MCAvIDI1NiwKKyAgICAweDY4LCA1NzYgJSAyNTYsIDU3NiAvIDI1NiwKKyAgICAxNiwKKyAgICAweDk4LCAxNDcyICUgMjU2LCAxNDcyIC8gMjU2LAorICAgIDB4OTksIDE1MzYgJSAyNTYsIDE1MzYgLyAyNTYsCisgICAgMHg5YSwgMTYwMCAlIDI1NiwgMTYwMCAvIDI1NiwKKyAgICAweDliLCAxNzI4ICUgMjU2LCAxNzI4IC8gMjU2LAorICAgIDB4Y2MsIDcwNCAlIDI1NiwgNzA0IC8gMjU2LAorICAgIDB4Y2QsIDc2OCAlIDI1NiwgNzY4IC8gMjU2LAorICAgIDB4ZDIsIDgzMiAlIDI1NiwgODMyIC8gMjU2LAorICAgIDB4ZDMsIDg5NiAlIDI1NiwgODk2IC8gMjU2LAorICAgIDB4ZDQsIDk2MCAlIDI1NiwgOTYwIC8gMjU2LAorICAgIDB4ZDUsIDEwMjQgJSAyNTYsIDEwMjQgLyAyNTYsCisgICAgMHhkNiwgMTA4OCAlIDI1NiwgMTA4OCAvIDI1NiwKKyAgICAweGQ3LCAxMTUyICUgMjU2LCAxMTUyIC8gMjU2LAorICAgIDB4ZDgsIDEyMTYgJSAyNTYsIDEyMTYgLyAyNTYsCisgICAgMHhkOSwgMTI4MCAlIDI1NiwgMTI4MCAvIDI1NiwKKyAgICAweGRhLCAxMzQ0ICUgMjU2LCAxMzQ0IC8gMjU2LAorICAgIDB4ZGIsIDE0MDggJSAyNTYsIDE0MDggLyAyNTYsCisgICAgMCwKKyAgICAzLAorICAgIDB4MDgsIDE3OTIgJSAyNTYsIDE3OTIgLyAyNTYsCisgICAgMHgwYywgMTg1NiAlIDI1NiwgMTg1NiAvIDI1NiwKKyAgICAweDBkLCAxOTIwICUgMjU2LCAxOTIwIC8gMjU2LAorICAgIDEwLAorICAgIDB4MTIsIDE5ODQgJSAyNTYsIDE5ODQgLyAyNTYsCisgICAgMHgxMywgMjA0OCAlIDI1NiwgMjA0OCAvIDI1NiwKKyAgICAweDE0LCAyMTEyICUgMjU2LCAyMTEyIC8gMjU2LAorICAgIDB4MTUsIDIxNzYgJSAyNTYsIDIxNzYgLyAyNTYsCisgICAgMHgxNiwgMjI0MCAlIDI1NiwgMjI0MCAvIDI1NiwKKyAgICAweDE3LCAyMzA0ICUgMjU2LCAyMzA0IC8gMjU2LAorICAgIDB4MWMsIDIzNjggJSAyNTYsIDIzNjggLyAyNTYsCisgICAgMHgxZCwgMjQzMiAlIDI1NiwgMjQzMiAvIDI1NiwKKyAgICAweDFlLCAyNDk2ICUgMjU2LCAyNDk2IC8gMjU2LAorICAgIDB4MWYsIDI1NjAgJSAyNTYsIDI1NjAgLyAyNTYsCisgICAgMHhmZiwKK307CitpbnQgX0ZheEdldFJ1bihGWF9MUENCWVRFIGluc19hcnJheSwgY29uc3QgRlhfQllURSogc3JjX2J1ZiwgaW50JiBiaXRwb3MsIGludCBiaXRzaXplKQoreworICAgIEZYX0RXT1JEIGNvZGUgPSAwOworICAgIGludCBpbnNfb2ZmID0gMDsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBGWF9CWVRFIGlucyA9IGluc19hcnJheVtpbnNfb2ZmKytdOworICAgICAgICBpZiAoaW5zID09IDB4ZmYpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYml0cG9zID49IGJpdHNpemUpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBjb2RlIDw8PSAxOworICAgICAgICBpZiAoc3JjX2J1ZltiaXRwb3MgLyA4XSAmICgxIDw8ICg3IC0gYml0cG9zICUgOCkpKSB7CisgICAgICAgICAgICBjb2RlICsrOworICAgICAgICB9CisgICAgICAgIGJpdHBvcyArKzsKKyAgICAgICAgaW50IG5leHRfb2ZmID0gaW5zX29mZiArIGlucyAqIDM7CisgICAgICAgIGZvciAoOyBpbnNfb2ZmIDwgbmV4dF9vZmY7IGluc19vZmYgKz0gMykgeworICAgICAgICAgICAgaWYgKGluc19hcnJheVtpbnNfb2ZmXSA9PSBjb2RlKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluc19hcnJheVtpbnNfb2ZmICsgMV0gKyBpbnNfYXJyYXlbaW5zX29mZiArIDJdICogMjU2OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorRlhfQk9PTCBfRmF4RzRHZXRSb3coY29uc3QgRlhfQllURSogc3JjX2J1ZiwgaW50IGJpdHNpemUsIGludCYgYml0cG9zLCBGWF9MUEJZVEUgZGVzdF9idWYsIGNvbnN0IEZYX0JZVEUqIHJlZl9idWYsIGludCBjb2x1bW5zKQoreworICAgIGludCBhMCA9IC0xLCBhMGNvbG9yID0gMTsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoYml0cG9zID49IGJpdHNpemUpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBpbnQgYTEsIGEyLCBiMSwgYjI7CisgICAgICAgIF9GYXhHNEZpbmRCMUIyKHJlZl9idWYsIGNvbHVtbnMsIGEwLCBhMGNvbG9yLCBiMSwgYjIpOworICAgICAgICBGWF9CT09MIGJpdCA9IE5FWFRCSVQ7CisgICAgICAgIGludCB2X2RlbHRhID0gMDsKKyAgICAgICAgaWYgKGJpdCkgeworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGJpdHBvcyA+PSBiaXRzaXplKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfQk9PTCBiaXQxID0gTkVYVEJJVDsKKyAgICAgICAgICAgIGlmIChiaXRwb3MgPj0gYml0c2l6ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZYX0JPT0wgYml0MiA9IE5FWFRCSVQ7CisgICAgICAgICAgICBpZiAoYml0MSAmJiBiaXQyKSB7CisgICAgICAgICAgICAgICAgdl9kZWx0YSA9IDE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGJpdDEpIHsKKyAgICAgICAgICAgICAgICB2X2RlbHRhID0gLTE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGJpdDIpIHsKKyAgICAgICAgICAgICAgICBpbnQgcnVuX2xlbjEgPSAwOworICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBydW4gPSBfRmF4R2V0UnVuKGEwY29sb3IgPyBGYXhXaGl0ZVJ1bklucyA6IEZheEJsYWNrUnVuSW5zLCBzcmNfYnVmLCBiaXRwb3MsIGJpdHNpemUpOworICAgICAgICAgICAgICAgICAgICBydW5fbGVuMSArPSBydW47CisgICAgICAgICAgICAgICAgICAgIGlmIChydW4gPCA2NCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGEwIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBydW5fbGVuMSArKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYTEgPSBhMCArIHJ1bl9sZW4xOworICAgICAgICAgICAgICAgIGlmICghYTBjb2xvcikgeworICAgICAgICAgICAgICAgICAgICBfRmF4RmlsbEJpdHMoZGVzdF9idWYsIGNvbHVtbnMsIGEwLCBhMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGludCBydW5fbGVuMiA9IDA7CisgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHJ1biA9IF9GYXhHZXRSdW4oYTBjb2xvciA/IEZheEJsYWNrUnVuSW5zIDogRmF4V2hpdGVSdW5JbnMsIHNyY19idWYsIGJpdHBvcywgYml0c2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIHJ1bl9sZW4yICs9IHJ1bjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJ1biA8IDY0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhMiA9IGExICsgcnVuX2xlbjI7CisgICAgICAgICAgICAgICAgaWYgKGEwY29sb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgX0ZheEZpbGxCaXRzKGRlc3RfYnVmLCBjb2x1bW5zLCBhMSwgYTIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhMCA9IGEyOworICAgICAgICAgICAgICAgIGlmIChhMCA8IGNvbHVtbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoYml0cG9zID49IGJpdHNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBiaXQgPSBORVhUQklUOworICAgICAgICAgICAgICAgIGlmIChiaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFhMGNvbG9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBfRmF4RmlsbEJpdHMoZGVzdF9idWYsIGNvbHVtbnMsIGEwLCBiMik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGIyID49IGNvbHVtbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGEwID0gYjI7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChiaXRwb3MgPj0gYml0c2l6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYml0MSA9IE5FWFRCSVQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChiaXRwb3MgPj0gYml0c2l6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYml0MiA9IE5FWFRCSVQ7CisgICAgICAgICAgICAgICAgICAgIGlmIChiaXQxICYmIGJpdDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZfZGVsdGEgPSAyOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJpdDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZfZGVsdGEgPSAtMjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiaXQyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0cG9zID49IGJpdHNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBiaXQgPSBORVhUQklUOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZfZGVsdGEgPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2X2RlbHRhID0gLTM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0cG9zID49IGJpdHNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBiaXQgPSBORVhUQklUOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHBvcyArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRwb3MgKz0gNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBhMSA9IGIxICsgdl9kZWx0YTsKKyAgICAgICAgaWYgKCFhMGNvbG9yKSB7CisgICAgICAgICAgICBfRmF4RmlsbEJpdHMoZGVzdF9idWYsIGNvbHVtbnMsIGEwLCBhMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGExID49IGNvbHVtbnMpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIGEwID0gYTE7CisgICAgICAgIGEwY29sb3IgPSAhYTBjb2xvcjsKKyAgICB9Cit9CitGWF9CT09MIF9GYXhTa2lwRU9MKGNvbnN0IEZYX0JZVEUqIHNyY19idWYsIGludCBiaXRzaXplLCBpbnQmIGJpdHBvcykKK3sKKyAgICBpbnQgc3RhcnRiaXQgPSBiaXRwb3M7CisgICAgd2hpbGUgKGJpdHBvcyA8IGJpdHNpemUpIHsKKyAgICAgICAgaW50IGJpdCA9IE5FWFRCSVQ7CisgICAgICAgIGlmIChiaXQpIHsKKyAgICAgICAgICAgIGlmIChiaXRwb3MgLSBzdGFydGJpdCA8PSAxMSkgeworICAgICAgICAgICAgICAgIGJpdHBvcyA9IHN0YXJ0Yml0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorRlhfQk9PTCBfRmF4R2V0MURMaW5lKGNvbnN0IEZYX0JZVEUqIHNyY19idWYsIGludCBiaXRzaXplLCBpbnQmIGJpdHBvcywgRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQgY29sdW1ucykKK3sKKyAgICBpbnQgY29sb3IgPSBUUlVFOworICAgIGludCBzdGFydHBvcyA9IDA7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKGJpdHBvcyA+PSBiaXRzaXplKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgaW50IHJ1bl9sZW4gPSAwOworICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgaW50IHJ1biA9IF9GYXhHZXRSdW4oY29sb3IgPyBGYXhXaGl0ZVJ1bklucyA6IEZheEJsYWNrUnVuSW5zLCBzcmNfYnVmLCBiaXRwb3MsIGJpdHNpemUpOworICAgICAgICAgICAgaWYgKHJ1biA8IDApIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoYml0cG9zIDwgYml0c2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgYml0ID0gTkVYVEJJVDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJpdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcnVuX2xlbiArPSBydW47CisgICAgICAgICAgICBpZiAocnVuIDwgNjQpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWNvbG9yKSB7CisgICAgICAgICAgICBfRmF4RmlsbEJpdHMoZGVzdF9idWYsIGNvbHVtbnMsIHN0YXJ0cG9zLCBzdGFydHBvcyArIHJ1bl9sZW4pOworICAgICAgICB9CisgICAgICAgIHN0YXJ0cG9zICs9IHJ1bl9sZW47CisgICAgICAgIGlmIChzdGFydHBvcyA+PSBjb2x1bW5zKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjb2xvciA9ICFjb2xvcjsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitjbGFzcyBDQ29kZWNfRmF4RGVjb2RlciA6IHB1YmxpYyBDQ29kZWNfU2NhbmxpbmVEZWNvZGVyCit7CitwdWJsaWM6CisgICAgQ0NvZGVjX0ZheERlY29kZXIoKTsKKyAgICB2aXJ0dWFsIH5DQ29kZWNfRmF4RGVjb2RlcigpOworICAgIEZYX0JPT0wJCQkJQ3JlYXRlKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgSywgRlhfQk9PTCBFbmRPZkxpbmUsIEZYX0JPT0wgRW5jb2RlZEJ5dGVBbGlnbiwgRlhfQk9PTCBCbGFja0lzMSwgaW50IENvbHVtbnMsIGludCBSb3dzKTsKKyAgICB2aXJ0dWFsIHZvaWQJCXZfRG93blNjYWxlKGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQpIHt9CisgICAgdmlydHVhbCBGWF9CT09MCQl2X1Jld2luZCgpOworICAgIHZpcnR1YWwgRlhfTFBCWVRFCXZfR2V0TmV4dExpbmUoKTsKKyAgICB2aXJ0dWFsIEZYX0RXT1JECUdldFNyY09mZnNldCgpOworICAgIGludAkJCW1fRW5jb2RpbmcsIG1fYkVuZE9mTGluZSwgbV9iQnl0ZUFsaWduLCBtX2JCbGFjazsKKyAgICBpbnQJCQliaXRwb3M7CisgICAgRlhfTFBDQllURQltX3BTcmNCdWY7CisgICAgRlhfRFdPUkQJbV9TcmNTaXplOworICAgIEZYX0xQQllURQltX3BTY2FubGluZUJ1ZiwgbV9wUmVmQnVmOworfTsKK0NDb2RlY19GYXhEZWNvZGVyOjpDQ29kZWNfRmF4RGVjb2RlcigpCit7CisgICAgbV9wU2NhbmxpbmVCdWYgPSBOVUxMOworICAgIG1fcFJlZkJ1ZiA9IE5VTEw7Cit9CitDQ29kZWNfRmF4RGVjb2Rlcjo6fkNDb2RlY19GYXhEZWNvZGVyKCkKK3sKKyAgICBpZiAobV9wU2NhbmxpbmVCdWYpIHsKKyAgICAgICAgRlhfRnJlZShtX3BTY2FubGluZUJ1Zik7CisgICAgfQorICAgIGlmIChtX3BSZWZCdWYpIHsKKyAgICAgICAgRlhfRnJlZShtX3BSZWZCdWYpOworICAgIH0KK30KK0ZYX0JPT0wgQ0NvZGVjX0ZheERlY29kZXI6OkNyZWF0ZShGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IEssIEZYX0JPT0wgRW5kT2ZMaW5lLCBGWF9CT09MIEVuY29kZWRCeXRlQWxpZ24sIEZYX0JPT0wgQmxhY2tJczEsIGludCBDb2x1bW5zLCBpbnQgUm93cykKK3sKKyAgICBtX0VuY29kaW5nID0gSzsKKyAgICBtX2JFbmRPZkxpbmUgPSBFbmRPZkxpbmU7CisgICAgbV9iQnl0ZUFsaWduID0gRW5jb2RlZEJ5dGVBbGlnbjsKKyAgICBtX2JCbGFjayA9IEJsYWNrSXMxOworICAgIG1fT3JpZ1dpZHRoID0gQ29sdW1uczsKKyAgICBtX09yaWdIZWlnaHQgPSBSb3dzOworICAgIGlmIChtX09yaWdXaWR0aCA9PSAwKSB7CisgICAgICAgIG1fT3JpZ1dpZHRoID0gd2lkdGg7CisgICAgfQorICAgIGlmIChtX09yaWdIZWlnaHQgPT0gMCkgeworICAgICAgICBtX09yaWdIZWlnaHQgPSBoZWlnaHQ7CisgICAgfQorICAgIG1fUGl0Y2ggPSAobV9PcmlnV2lkdGggKyAzMSkgLyAzMiAqIDQ7CisgICAgbV9PdXRwdXRXaWR0aCA9IG1fT3JpZ1dpZHRoOworICAgIG1fT3V0cHV0SGVpZ2h0ID0gbV9PcmlnSGVpZ2h0OworICAgIG1fcFNjYW5saW5lQnVmID0gRlhfQWxsb2MoRlhfQllURSwgbV9QaXRjaCk7CisgICAgaWYgKG1fcFNjYW5saW5lQnVmID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBtX3BSZWZCdWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1BpdGNoKTsKKyAgICBpZiAobV9wUmVmQnVmID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBtX3BTcmNCdWYgPSBzcmNfYnVmOworICAgIG1fU3JjU2l6ZSA9IHNyY19zaXplOworICAgIG1fbkNvbXBzID0gMTsKKyAgICBtX2JwYyA9IDE7CisgICAgbV9iQ29sb3JUcmFuc2Zvcm1lZCA9IEZBTFNFOworICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDQ29kZWNfRmF4RGVjb2Rlcjo6dl9SZXdpbmQoKQoreworICAgIEZYU1lTX21lbXNldDgobV9wUmVmQnVmLCAweGZmLCBtX1BpdGNoKTsKKyAgICBiaXRwb3MgPSAwOworICAgIHJldHVybiBUUlVFOworfQorRlhfTFBCWVRFIENDb2RlY19GYXhEZWNvZGVyOjp2X0dldE5leHRMaW5lKCkKK3sKKyAgICBpbnQgYml0c2l6ZSA9IG1fU3JjU2l6ZSAqIDg7CisgICAgX0ZheFNraXBFT0wobV9wU3JjQnVmLCBiaXRzaXplLCBiaXRwb3MpOworICAgIGlmIChiaXRwb3MgPj0gYml0c2l6ZSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRlhTWVNfbWVtc2V0OChtX3BTY2FubGluZUJ1ZiwgMHhmZiwgbV9QaXRjaCk7CisgICAgaWYgKG1fRW5jb2RpbmcgPCAwKSB7CisgICAgICAgIF9GYXhHNEdldFJvdyhtX3BTcmNCdWYsIGJpdHNpemUsIGJpdHBvcywgbV9wU2NhbmxpbmVCdWYsIG1fcFJlZkJ1ZiwgbV9PcmlnV2lkdGgpOworICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BSZWZCdWYsIG1fcFNjYW5saW5lQnVmLCBtX1BpdGNoKTsKKyAgICB9IGVsc2UgaWYgKG1fRW5jb2RpbmcgPT0gMCkgeworICAgICAgICBfRmF4R2V0MURMaW5lKG1fcFNyY0J1ZiwgYml0c2l6ZSwgYml0cG9zLCBtX3BTY2FubGluZUJ1ZiwgbV9PcmlnV2lkdGgpOworICAgIH0gZWxzZSB7CisgICAgICAgIEZYX0JPT0wgYk5leHQxRCA9IG1fcFNyY0J1ZltiaXRwb3MgLyA4XSAmICgxIDw8ICg3IC0gYml0cG9zICUgOCkpOworICAgICAgICBiaXRwb3MgKys7CisgICAgICAgIGlmIChiTmV4dDFEKSB7CisgICAgICAgICAgICBfRmF4R2V0MURMaW5lKG1fcFNyY0J1ZiwgYml0c2l6ZSwgYml0cG9zLCBtX3BTY2FubGluZUJ1ZiwgbV9PcmlnV2lkdGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgX0ZheEc0R2V0Um93KG1fcFNyY0J1ZiwgYml0c2l6ZSwgYml0cG9zLCBtX3BTY2FubGluZUJ1ZiwgbV9wUmVmQnVmLCBtX09yaWdXaWR0aCk7CisgICAgICAgIH0KKyAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wUmVmQnVmLCBtX3BTY2FubGluZUJ1ZiwgbV9QaXRjaCk7CisgICAgfQorICAgIGlmIChtX2JFbmRPZkxpbmUpIHsKKyAgICAgICAgX0ZheFNraXBFT0wobV9wU3JjQnVmLCBiaXRzaXplLCBiaXRwb3MpOworICAgIH0KKyAgICBpZiAobV9iQnl0ZUFsaWduICYmIGJpdHBvcyA8IGJpdHNpemUpIHsKKyAgICAgICAgaW50IGJpdHBvczAgPSBiaXRwb3M7CisgICAgICAgIGludCBiaXRwb3MxID0gKGJpdHBvcyArIDcpIC8gOCAqIDg7CisgICAgICAgIHdoaWxlIChtX2JCeXRlQWxpZ24gJiYgYml0cG9zMCA8IGJpdHBvczEpIHsKKyAgICAgICAgICAgIGludCBiaXQgPSBtX3BTcmNCdWZbYml0cG9zMCAvIDhdICYgKDEgPDwgKDcgLSBiaXRwb3MwICUgOCkpOworICAgICAgICAgICAgaWYgKGJpdCAhPSAwKSB7CisgICAgICAgICAgICAgICAgbV9iQnl0ZUFsaWduID0gRkFMU0U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJpdHBvczAgKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fYkJ5dGVBbGlnbikgeworICAgICAgICAgICAgYml0cG9zID0gYml0cG9zMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9iQmxhY2spIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX1BpdGNoOyBpICsrKSB7CisgICAgICAgICAgICBtX3BTY2FubGluZUJ1ZltpXSA9IH5tX3BTY2FubGluZUJ1ZltpXTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbV9wU2NhbmxpbmVCdWY7Cit9CitGWF9EV09SRCBDQ29kZWNfRmF4RGVjb2Rlcjo6R2V0U3JjT2Zmc2V0KCkKK3sKKyAgICBGWF9EV09SRCByZXQgPSAoYml0cG9zICsgNykgLyA4OworICAgIGlmIChyZXQgPiBtX1NyY1NpemUpIHsKKyAgICAgICAgcmV0ID0gbV9TcmNTaXplOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorZXh0ZXJuICJDIiB7CisgICAgdm9pZCBfRmF4RzREZWNvZGUodm9pZCosIEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCogcGJpdHBvcywgRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBwaXRjaCkKKyAgICB7CisgICAgICAgIGlmIChwaXRjaCA9PSAwKSB7CisgICAgICAgICAgICBwaXRjaCA9ICh3aWR0aCArIDcpIC8gODsKKyAgICAgICAgfQorICAgICAgICBGWF9MUEJZVEUgcmVmX2J1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIHBpdGNoKTsKKyAgICAgICAgaWYgKHJlZl9idWYgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEZYU1lTX21lbXNldDgocmVmX2J1ZiwgMHhmZiwgcGl0Y2gpOworICAgICAgICBpbnQgYml0cG9zID0gKnBiaXRwb3M7CisgICAgICAgIGZvciAoaW50IGlSb3cgPSAwOyBpUm93IDwgaGVpZ2h0OyBpUm93ICsrKSB7CisgICAgICAgICAgICBGWF9MUEJZVEUgbGluZV9idWYgPSBkZXN0X2J1ZiArIGlSb3cgKiBwaXRjaDsKKyAgICAgICAgICAgIEZYU1lTX21lbXNldDgobGluZV9idWYsIDB4ZmYsIHBpdGNoKTsKKyAgICAgICAgICAgIF9GYXhHNEdldFJvdyhzcmNfYnVmLCBzcmNfc2l6ZSA8PCAzLCBiaXRwb3MsIGxpbmVfYnVmLCByZWZfYnVmLCB3aWR0aCk7CisgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihyZWZfYnVmLCBsaW5lX2J1ZiwgcGl0Y2gpOworICAgICAgICB9CisgICAgICAgIEZYX0ZyZWUocmVmX2J1Zik7CisgICAgICAgICpwYml0cG9zID0gYml0cG9zOworICAgIH0KK307CitzdGF0aWMgY29uc3QgRlhfQllURSBCbGFja1J1blRlcm1pbmF0b3JbMTI4XSA9IHsKKyAgICAweDM3LCAxMCwgMHgwMiwgMywgMHgwMywgMiwgMHgwMiwgMiwgMHgwMywgMywgMHgwMywgNCwgMHgwMiwgNCwgMHgwMywgNSwKKyAgICAweDA1LCA2LCAweDA0LCA2LCAweDA0LCA3LCAweDA1LCA3LCAweDA3LCA3LCAweDA0LCA4LCAweDA3LCA4LCAweDE4LCA5LAorICAgIDB4MTcsIDEwLCAweDE4LCAxMCwgMHgwOCwgMTAsIDB4NjcsIDExLCAweDY4LCAxMSwgMHg2YywgMTEsIDB4MzcsIDExLCAweDI4LCAxMSwKKyAgICAweDE3LCAxMSwgMHgxOCwgMTEsIDB4Y2EsIDEyLCAweGNiLCAxMiwgMHhjYywgMTIsIDB4Y2QsIDEyLCAweDY4LCAxMiwgMHg2OSwgMTIsCisgICAgMHg2YSwgMTIsIDB4NmIsIDEyLCAweGQyLCAxMiwgMHhkMywgMTIsIDB4ZDQsIDEyLCAweGQ1LCAxMiwgMHhkNiwgMTIsIDB4ZDcsIDEyLAorICAgIDB4NmMsIDEyLCAweDZkLCAxMiwgMHhkYSwgMTIsIDB4ZGIsIDEyLCAweDU0LCAxMiwgMHg1NSwgMTIsIDB4NTYsIDEyLCAweDU3LCAxMiwKKyAgICAweDY0LCAxMiwgMHg2NSwgMTIsIDB4NTIsIDEyLCAweDUzLCAxMiwgMHgyNCwgMTIsIDB4MzcsIDEyLCAweDM4LCAxMiwgMHgyNywgMTIsCisgICAgMHgyOCwgMTIsIDB4NTgsIDEyLCAweDU5LCAxMiwgMHgyYiwgMTIsIDB4MmMsIDEyLCAweDVhLCAxMiwgMHg2NiwgMTIsIDB4NjcsIDEyLAorfTsKK3N0YXRpYyBjb25zdCBGWF9CWVRFIEJsYWNrUnVuTWFya3VwWzgwXSA9IHsKKyAgICAweDBmLCAxMCwgMHhjOCwgMTIsIDB4YzksIDEyLCAweDViLCAxMiwgMHgzMywgMTIsIDB4MzQsIDEyLCAweDM1LCAxMiwgMHg2YywgMTMsCisgICAgMHg2ZCwgMTMsIDB4NGEsIDEzLCAweDRiLCAxMywgMHg0YywgMTMsIDB4NGQsIDEzLCAweDcyLCAxMywgMHg3MywgMTMsIDB4NzQsIDEzLAorICAgIDB4NzUsIDEzLCAweDc2LCAxMywgMHg3NywgMTMsIDB4NTIsIDEzLCAweDUzLCAxMywgMHg1NCwgMTMsIDB4NTUsIDEzLCAweDVhLCAxMywKKyAgICAweDViLCAxMywgMHg2NCwgMTMsIDB4NjUsIDEzLCAweDA4LCAxMSwgMHgwYywgMTEsIDB4MGQsIDExLCAweDEyLCAxMiwgMHgxMywgMTIsCisgICAgMHgxNCwgMTIsIDB4MTUsIDEyLCAweDE2LCAxMiwgMHgxNywgMTIsIDB4MWMsIDEyLCAweDFkLCAxMiwgMHgxZSwgMTIsIDB4MWYsIDEyLAorfTsKK3N0YXRpYyBjb25zdCBGWF9CWVRFIFdoaXRlUnVuVGVybWluYXRvclsxMjhdID0geworICAgIDB4MzUsIDgsCisgICAgMHgwNywgNiwKKyAgICAweDA3LCA0LAorICAgIDB4MDgsIDQsCisgICAgMHgwQiwgNCwKKyAgICAweDBDLCA0LAorICAgIDB4MEUsIDQsCisgICAgMHgwRiwgNCwKKyAgICAweDEzLCA1LAorICAgIDB4MTQsIDUsCisgICAgMHgwNywgNSwKKyAgICAweDA4LCA1LAorICAgIDB4MDgsIDYsCisgICAgMHgwMywgNiwKKyAgICAweDM0LCA2LAorICAgIDB4MzUsIDYsCisgICAgMHgyYSwgNiwKKyAgICAweDJCLCA2LAorICAgIDB4MjcsIDcsCisgICAgMHgwYywgNywKKyAgICAweDA4LCA3LAorICAgIDB4MTcsIDcsCisgICAgMHgwMywgNywKKyAgICAweDA0LCA3LAorICAgIDB4MjgsIDcsCisgICAgMHgyQiwgNywKKyAgICAweDEzLCA3LAorICAgIDB4MjQsIDcsCisgICAgMHgxOCwgNywKKyAgICAweDAyLCA4LAorICAgIDB4MDMsIDgsCisgICAgMHgxYSwgOCwKKyAgICAweDFiLCA4LAorICAgIDB4MTIsIDgsCisgICAgMHgxMywgOCwKKyAgICAweDE0LCA4LAorICAgIDB4MTUsIDgsCisgICAgMHgxNiwgOCwKKyAgICAweDE3LCA4LAorICAgIDB4MjgsIDgsCisgICAgMHgyOSwgOCwKKyAgICAweDJhLCA4LAorICAgIDB4MmIsIDgsCisgICAgMHgyYywgOCwKKyAgICAweDJkLCA4LAorICAgIDB4MDQsIDgsCisgICAgMHgwNSwgOCwKKyAgICAweDBhLCA4LAorICAgIDB4MGIsIDgsCisgICAgMHg1MiwgOCwKKyAgICAweDUzLCA4LAorICAgIDB4NTQsIDgsCisgICAgMHg1NSwgOCwKKyAgICAweDI0LCA4LAorICAgIDB4MjUsIDgsCisgICAgMHg1OCwgOCwKKyAgICAweDU5LCA4LAorICAgIDB4NWEsIDgsCisgICAgMHg1YiwgOCwKKyAgICAweDRhLCA4LAorICAgIDB4NGIsIDgsCisgICAgMHgzMiwgOCwKKyAgICAweDMzLCA4LAorICAgIDB4MzQsIDgsCit9Oworc3RhdGljIGNvbnN0IEZYX0JZVEUgV2hpdGVSdW5NYXJrdXBbODBdID0geworICAgIDB4MWIsIDUsCisgICAgMHgxMiwgNSwKKyAgICAweDE3LCA2LAorICAgIDB4MzcsIDcsCisgICAgMHgzNiwgOCwKKyAgICAweDM3LCA4LAorICAgIDB4NjQsIDgsCisgICAgMHg2NSwgOCwKKyAgICAweDY4LCA4LAorICAgIDB4NjcsIDgsCisgICAgMHhjYywgOSwKKyAgICAweGNkLCA5LAorICAgIDB4ZDIsIDksCisgICAgMHhkMywgOSwKKyAgICAweGQ0LCA5LAorICAgIDB4ZDUsIDksCisgICAgMHhkNiwgOSwKKyAgICAweGQ3LCA5LAorICAgIDB4ZDgsIDksCisgICAgMHhkOSwgOSwKKyAgICAweGRhLCA5LAorICAgIDB4ZGIsIDksCisgICAgMHg5OCwgOSwKKyAgICAweDk5LCA5LAorICAgIDB4OWEsIDksCisgICAgMHgxOCwgNiwKKyAgICAweDliLCA5LAorICAgIDB4MDgsIDExLAorICAgIDB4MGMsIDExLAorICAgIDB4MGQsIDExLAorICAgIDB4MTIsIDEyLAorICAgIDB4MTMsIDEyLAorICAgIDB4MTQsIDEyLAorICAgIDB4MTUsIDEyLAorICAgIDB4MTYsIDEyLAorICAgIDB4MTcsIDEyLAorICAgIDB4MWMsIDEyLAorICAgIDB4MWQsIDEyLAorICAgIDB4MWUsIDEyLAorICAgIDB4MWYsIDEyLAorfTsKK3N0YXRpYyB2b2lkIF9BZGRCaXRTdHJlYW0oRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQmIGRlc3RfYml0cG9zLCBpbnQgZGF0YSwgaW50IGJpdGxlbikKK3sKKyAgICBmb3IgKGludCBpID0gYml0bGVuIC0gMTsgaSA+PSAwOyBpIC0tKSB7CisgICAgICAgIGlmIChkYXRhICYgKDEgPDwgaSkpIHsKKyAgICAgICAgICAgIGRlc3RfYnVmW2Rlc3RfYml0cG9zIC8gOF0gfD0gMSA8PCAoNyAtIGRlc3RfYml0cG9zICUgOCk7CisgICAgICAgIH0KKyAgICAgICAgZGVzdF9iaXRwb3MgKys7CisgICAgfQorfQorc3RhdGljIHZvaWQgX0ZheEVuY29kZVJ1bihGWF9MUEJZVEUgZGVzdF9idWYsIGludCYgZGVzdF9iaXRwb3MsIGludCBydW4sIEZYX0JPT0wgYldoaXRlKQoreworICAgIHdoaWxlIChydW4gPj0gMjU2MCkgeworICAgICAgICBfQWRkQml0U3RyZWFtKGRlc3RfYnVmLCBkZXN0X2JpdHBvcywgMHgxZiwgMTIpOworICAgICAgICBydW4gLT0gMjU2MDsKKyAgICB9CisgICAgaWYgKHJ1biA+PSA2NCkgeworICAgICAgICBpbnQgbWFya3VwID0gcnVuIC0gcnVuICUgNjQ7CisgICAgICAgIEZYX0xQQ0JZVEUgcCA9IGJXaGl0ZSA/IFdoaXRlUnVuTWFya3VwIDogQmxhY2tSdW5NYXJrdXA7CisgICAgICAgIHAgKz0gKG1hcmt1cCAvIDY0IC0gMSkgKiAyOworICAgICAgICBfQWRkQml0U3RyZWFtKGRlc3RfYnVmLCBkZXN0X2JpdHBvcywgKnAsIHBbMV0pOworICAgIH0KKyAgICBydW4gJT0gNjQ7CisgICAgRlhfTFBDQllURSBwID0gYldoaXRlID8gV2hpdGVSdW5UZXJtaW5hdG9yIDogQmxhY2tSdW5UZXJtaW5hdG9yOworICAgIHAgKz0gcnVuICogMjsKKyAgICBfQWRkQml0U3RyZWFtKGRlc3RfYnVmLCBkZXN0X2JpdHBvcywgKnAsIHBbMV0pOworfQorc3RhdGljIHZvaWQgX0ZheEVuY29kZTJETGluZShGWF9MUEJZVEUgZGVzdF9idWYsIGludCYgZGVzdF9iaXRwb3MsIEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfTFBDQllURSByZWZfYnVmLCBpbnQgY29scykKK3sKKyAgICBpbnQgYTAgPSAtMSwgYTBjb2xvciA9IDE7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaW50IGExID0gX0ZpbmRCaXQoc3JjX2J1ZiwgY29scywgYTAgKyAxLCAxIC0gYTBjb2xvcik7CisgICAgICAgIGludCBiMSwgYjI7CisgICAgICAgIF9GYXhHNEZpbmRCMUIyKHJlZl9idWYsIGNvbHMsIGEwLCBhMGNvbG9yLCBiMSwgYjIpOworICAgICAgICBpZiAoYjIgPCBhMSkgeworICAgICAgICAgICAgZGVzdF9iaXRwb3MgKz0gMzsKKyAgICAgICAgICAgIGRlc3RfYnVmW2Rlc3RfYml0cG9zIC8gOF0gfD0gMSA8PCAoNyAtIGRlc3RfYml0cG9zICUgOCk7CisgICAgICAgICAgICBkZXN0X2JpdHBvcyArKzsKKyAgICAgICAgICAgIGEwID0gYjI7CisgICAgICAgIH0gZWxzZSBpZiAoYTEgLSBiMSA8PSAzICYmIGIxIC0gYTEgPD0gMykgeworICAgICAgICAgICAgaW50IGRlbHRhID0gYTEgLSBiMTsKKyAgICAgICAgICAgIHN3aXRjaCAoZGVsdGEpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgIGRlc3RfYnVmW2Rlc3RfYml0cG9zIC8gOF0gfD0gMSA8PCAoNyAtIGRlc3RfYml0cG9zICUgOCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAgICBkZXN0X2JpdHBvcyArPSBkZWx0YSA9PSAxID8gMSA6IGRlbHRhICsgMjsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9idWZbZGVzdF9iaXRwb3MgLyA4XSB8PSAxIDw8ICg3IC0gZGVzdF9iaXRwb3MgJSA4KTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9iaXRwb3MgKys7CisgICAgICAgICAgICAgICAgICAgIGRlc3RfYnVmW2Rlc3RfYml0cG9zIC8gOF0gfD0gMSA8PCAoNyAtIGRlc3RfYml0cG9zICUgOCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgLTE6CisgICAgICAgICAgICAgICAgY2FzZSAtMjoKKyAgICAgICAgICAgICAgICBjYXNlIC0zOgorICAgICAgICAgICAgICAgICAgICBkZXN0X2JpdHBvcyArPSBkZWx0YSA9PSAtMSA/IDEgOiAtZGVsdGEgKyAyOworICAgICAgICAgICAgICAgICAgICBkZXN0X2J1ZltkZXN0X2JpdHBvcyAvIDhdIHw9IDEgPDwgKDcgLSBkZXN0X2JpdHBvcyAlIDgpOworICAgICAgICAgICAgICAgICAgICBkZXN0X2JpdHBvcyArKzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXN0X2JpdHBvcyArKzsKKyAgICAgICAgICAgIGEwID0gYTE7CisgICAgICAgICAgICBhMGNvbG9yID0gMSAtIGEwY29sb3I7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnQgYTIgPSBfRmluZEJpdChzcmNfYnVmLCBjb2xzLCBhMSArIDEsIGEwY29sb3IpOworICAgICAgICAgICAgZGVzdF9iaXRwb3MgKys7CisgICAgICAgICAgICBkZXN0X2JpdHBvcyArKzsKKyAgICAgICAgICAgIGRlc3RfYnVmW2Rlc3RfYml0cG9zIC8gOF0gfD0gMSA8PCAoNyAtIGRlc3RfYml0cG9zICUgOCk7CisgICAgICAgICAgICBkZXN0X2JpdHBvcyArKzsKKyAgICAgICAgICAgIGlmIChhMCA8IDApIHsKKyAgICAgICAgICAgICAgICBhMCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBfRmF4RW5jb2RlUnVuKGRlc3RfYnVmLCBkZXN0X2JpdHBvcywgYTEgLSBhMCwgYTBjb2xvcik7CisgICAgICAgICAgICBfRmF4RW5jb2RlUnVuKGRlc3RfYnVmLCBkZXN0X2JpdHBvcywgYTIgLSBhMSwgMSAtIGEwY29sb3IpOworICAgICAgICAgICAgYTAgPSBhMjsKKyAgICAgICAgfQorICAgICAgICBpZiAoYTAgPj0gY29scykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorY2xhc3MgQ0NvZGVjX0ZheEVuY29kZXIgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENDb2RlY19GYXhFbmNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcGl0Y2gpOworICAgIH5DQ29kZWNfRmF4RW5jb2RlcigpOworICAgIHZvaWQJCQlFbmNvZGUoRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSk7CisgICAgdm9pZAkJCUVuY29kZTJETGluZShGWF9MUENCWVRFIHNjYW5fbGluZSk7CisgICAgQ0ZYX0JpbmFyeUJ1ZgltX0Rlc3RCdWY7CisgICAgRlhfTFBCWVRFCQltX3BSZWZMaW5lLCBtX3BMaW5lQnVmOworICAgIGludAkJCQltX0NvbHMsIG1fUm93cywgbV9QaXRjaDsKKyAgICBGWF9MUENCWVRFCQltX3BTcmNCdWY7Cit9OworQ0NvZGVjX0ZheEVuY29kZXI6OkNDb2RlY19GYXhFbmNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcGl0Y2gpCit7CisgICAgbV9wU3JjQnVmID0gc3JjX2J1ZjsKKyAgICBtX0NvbHMgPSB3aWR0aDsKKyAgICBtX1Jvd3MgPSBoZWlnaHQ7CisgICAgbV9QaXRjaCA9IHBpdGNoOworICAgIG1fcFJlZkxpbmUgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1BpdGNoKTsKKyAgICBpZiAobV9wUmVmTGluZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhTWVNfbWVtc2V0OChtX3BSZWZMaW5lLCAweGZmLCBtX1BpdGNoKTsKKyAgICBtX3BMaW5lQnVmID0gRlhfQWxsb2MoRlhfQllURSwgbV9QaXRjaCAqIDgpOworICAgIGlmIChtX3BMaW5lQnVmID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX0Rlc3RCdWYuRXN0aW1hdGVTaXplKDAsIDEwMjQwKTsKK30KK0NDb2RlY19GYXhFbmNvZGVyOjp+Q0NvZGVjX0ZheEVuY29kZXIoKQoreworICAgIGlmIChtX3BSZWZMaW5lKSB7CisgICAgICAgIEZYX0ZyZWUobV9wUmVmTGluZSk7CisgICAgfQorICAgIGlmIChtX3BMaW5lQnVmKSB7CisgICAgICAgIEZYX0ZyZWUobV9wTGluZUJ1Zik7CisgICAgfQorfQordm9pZCBDQ29kZWNfRmF4RW5jb2Rlcjo6RW5jb2RlKEZYX0xQQllURSYgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpCit7CisgICAgaW50IGRlc3RfYml0cG9zID0gMDsKKyAgICBGWF9CWVRFIGxhc3RfYnl0ZSA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX1Jvd3M7IGkgKyspIHsKKyAgICAgICAgRlhfTFBDQllURSBzY2FuX2xpbmUgPSBtX3BTcmNCdWYgKyBpICogbV9QaXRjaDsKKyAgICAgICAgRlhTWVNfbWVtc2V0MzIobV9wTGluZUJ1ZiwgMCwgbV9QaXRjaCAqIDgpOworICAgICAgICBtX3BMaW5lQnVmWzBdID0gbGFzdF9ieXRlOworICAgICAgICBfRmF4RW5jb2RlMkRMaW5lKG1fcExpbmVCdWYsIGRlc3RfYml0cG9zLCBzY2FuX2xpbmUsIG1fcFJlZkxpbmUsIG1fQ29scyk7CisgICAgICAgIG1fRGVzdEJ1Zi5BcHBlbmRCbG9jayhtX3BMaW5lQnVmLCBkZXN0X2JpdHBvcyAvIDgpOworICAgICAgICBsYXN0X2J5dGUgPSBtX3BMaW5lQnVmW2Rlc3RfYml0cG9zIC8gOF07CisgICAgICAgIGRlc3RfYml0cG9zICU9IDg7CisgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcFJlZkxpbmUsIHNjYW5fbGluZSwgbV9QaXRjaCk7CisgICAgfQorICAgIGlmIChkZXN0X2JpdHBvcykgeworICAgICAgICBtX0Rlc3RCdWYuQXBwZW5kQnl0ZShsYXN0X2J5dGUpOworICAgIH0KKyAgICBkZXN0X2J1ZiA9IG1fRGVzdEJ1Zi5HZXRCdWZmZXIoKTsKKyAgICBkZXN0X3NpemUgPSBtX0Rlc3RCdWYuR2V0U2l6ZSgpOworICAgIG1fRGVzdEJ1Zi5EZXRhY2hCdWZmZXIoKTsKK30KK0ZYX0JPT0wJQ0NvZGVjX0ZheE1vZHVsZTo6RW5jb2RlKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcGl0Y2gsIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpCit7CisgICAgQ0NvZGVjX0ZheEVuY29kZXIgZW5jb2RlcihzcmNfYnVmLCB3aWR0aCwgaGVpZ2h0LCBwaXRjaCk7CisgICAgZW5jb2Rlci5FbmNvZGUoZGVzdF9idWYsIGRlc3Rfc2l6ZSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CitJQ29kZWNfU2NhbmxpbmVEZWNvZGVyKglDQ29kZWNfRmF4TW9kdWxlOjpDcmVhdGVEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgaW50IEssIEZYX0JPT0wgRW5kT2ZMaW5lLCBGWF9CT09MIEVuY29kZWRCeXRlQWxpZ24sIEZYX0JPT0wgQmxhY2tJczEsIGludCBDb2x1bW5zLCBpbnQgUm93cykKK3sKKyAgICBDQ29kZWNfRmF4RGVjb2RlciogcERlY29kZXIgPSBGWF9ORVcgQ0NvZGVjX0ZheERlY29kZXI7CisgICAgaWYgKHBEZWNvZGVyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBEZWNvZGVyLT5DcmVhdGUoc3JjX2J1Ziwgc3JjX3NpemUsIHdpZHRoLCBoZWlnaHQsIEssIEVuZE9mTGluZSwgRW5jb2RlZEJ5dGVBbGlnbiwgQmxhY2tJczEsIENvbHVtbnMsIFJvd3MpOworICAgIHJldHVybiBwRGVjb2RlcjsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvY29kZWMvZnhfY29kZWNfZmxhdGUuY3BwIGIvY29yZS9zcmMvZnhjb2RlYy9jb2RlYy9meF9jb2RlY19mbGF0ZS5jcHAKaW5kZXggYjZmOTRlMC4uNDcyNDU5MyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9jb2RlYy9meF9jb2RlY19mbGF0ZS5jcHAKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9jb2RlYy9meF9jb2RlY19mbGF0ZS5jcHAKQEAgLTEsOTQ1ICsxLDk0NSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2Z4X3psaWIuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgiDQotI2luY2x1ZGUgImNvZGVjX2ludC5oIg0KLWV4dGVybiAiQyINCi17DQotICAgIHN0YXRpYyB2b2lkKiBteV9hbGxvY19mdW5jICh2b2lkKiBvcGFxdWUsIHVuc2lnbmVkIGludCBpdGVtcywgdW5zaWduZWQgaW50IHNpemUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBGWF9BbGxvYyhGWF9CWVRFLCBpdGVtcyAqIHNpemUpOw0KLSAgICB9DQotICAgIHN0YXRpYyB2b2lkICAgbXlfZnJlZV9mdW5jICAodm9pZCogb3BhcXVlLCB2b2lkKiBhZGRyZXNzKQ0KLSAgICB7DQotICAgICAgICBGWF9GcmVlKGFkZHJlc3MpOw0KLSAgICB9DQotICAgIHZvaWQqIEZQREZBUElfRmxhdGVJbml0KHZvaWQqICgqYWxsb2NfZnVuYykodm9pZCosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmZyZWVfZnVuYykodm9pZCosIHZvaWQqKSkNCi0gICAgew0KLSAgICAgICAgel9zdHJlYW0qIHAgPSAoel9zdHJlYW0qKWFsbG9jX2Z1bmMoMCwgMSwgc2l6ZW9mKHpfc3RyZWFtKSk7DQotICAgICAgICBpZiAocCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBGWFNZU19tZW1zZXQzMihwLCAwLCBzaXplb2Yoel9zdHJlYW0pKTsNCi0gICAgICAgIHAtPnphbGxvYyA9IGFsbG9jX2Z1bmM7DQotICAgICAgICBwLT56ZnJlZSA9IGZyZWVfZnVuYzsNCi0gICAgICAgIGluZmxhdGVJbml0KHApOw0KLSAgICAgICAgcmV0dXJuIHA7DQotICAgIH0NCi0gICAgdm9pZCBGUERGQVBJX0ZsYXRlSW5wdXQodm9pZCogY29udGV4dCwgY29uc3QgdW5zaWduZWQgY2hhciogc3JjX2J1ZiwgdW5zaWduZWQgaW50IHNyY19zaXplKQ0KLSAgICB7DQotICAgICAgICAoKHpfc3RyZWFtKiljb250ZXh0KS0+bmV4dF9pbiA9ICh1bnNpZ25lZCBjaGFyKilzcmNfYnVmOw0KLSAgICAgICAgKCh6X3N0cmVhbSopY29udGV4dCktPmF2YWlsX2luID0gc3JjX3NpemU7DQotICAgIH0NCi0gICAgaW50IEZQREZBUElfRmxhdGVHZXRUb3RhbE91dCh2b2lkKiBjb250ZXh0KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gKCh6X3N0cmVhbSopY29udGV4dCktPnRvdGFsX291dDsNCi0gICAgfQ0KLSAgICBpbnQgRlBERkFQSV9GbGF0ZU91dHB1dCh2b2lkKiBjb250ZXh0LCB1bnNpZ25lZCBjaGFyKiBkZXN0X2J1ZiwgdW5zaWduZWQgaW50IGRlc3Rfc2l6ZSkNCi0gICAgew0KLSAgICAgICAgKCh6X3N0cmVhbSopY29udGV4dCktPm5leHRfb3V0ID0gZGVzdF9idWY7DQotICAgICAgICAoKHpfc3RyZWFtKiljb250ZXh0KS0+YXZhaWxfb3V0ID0gZGVzdF9zaXplOw0KLSAgICAgICAgdW5zaWduZWQgaW50IHByZV9wb3MgPSAodW5zaWduZWQgaW50KUZQREZBUElfRmxhdGVHZXRUb3RhbE91dChjb250ZXh0KTsNCi0gICAgICAgIGludCByZXQgPSBpbmZsYXRlKCh6X3N0cmVhbSopY29udGV4dCwgWl9TWU5DX0ZMVVNIKTsNCi0gICAgICAgIHVuc2lnbmVkIGludCBwb3N0X3BvcyA9ICh1bnNpZ25lZCBpbnQpRlBERkFQSV9GbGF0ZUdldFRvdGFsT3V0KGNvbnRleHQpOw0KLSAgICAgICAgdW5zaWduZWQgaW50IHdyaXR0ZW4gPSBwb3N0X3BvcyAtIHByZV9wb3M7DQotICAgICAgICBpZiAod3JpdHRlbiA8IGRlc3Rfc2l6ZSkgew0KLSAgICAgICAgICAgIEZYU1lTX21lbXNldDgoZGVzdF9idWYgKyB3cml0dGVuLCAnXDAnLCBkZXN0X3NpemUgLSB3cml0dGVuKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiByZXQ7DQotICAgIH0NCi0gICAgaW50IEZQREZBUElfRmxhdGVHZXRUb3RhbEluKHZvaWQqIGNvbnRleHQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAoKHpfc3RyZWFtKiljb250ZXh0KS0+dG90YWxfaW47DQotICAgIH0NCi0gICAgaW50IEZQREZBUElfRmxhdGVHZXRBdmFpbE91dCh2b2lkKiBjb250ZXh0KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gKCh6X3N0cmVhbSopY29udGV4dCktPmF2YWlsX291dDsNCi0gICAgfQ0KLSAgICBpbnQgRlBERkFQSV9GbGF0ZUdldEF2YWlsSW4odm9pZCogY29udGV4dCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuICgoel9zdHJlYW0qKWNvbnRleHQpLT5hdmFpbF9pbjsNCi0gICAgfQ0KLSAgICB2b2lkIEZQREZBUElfRmxhdGVFbmQodm9pZCogY29udGV4dCkNCi0gICAgew0KLSAgICAgICAgaW5mbGF0ZUVuZCgoel9zdHJlYW0qKWNvbnRleHQpOw0KLSAgICAgICAgKCh6X3N0cmVhbSopY29udGV4dCktPnpmcmVlKDAsIGNvbnRleHQpOw0KLSAgICB9DQotICAgIHZvaWQgRlBERkFQSV9GbGF0ZUNvbXByZXNzKHVuc2lnbmVkIGNoYXIqIGRlc3RfYnVmLCB1bnNpZ25lZCBsb25nKiBkZXN0X3NpemUsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyY19idWYsIHVuc2lnbmVkIGxvbmcgc3JjX3NpemUpDQotICAgIHsNCi0gICAgICAgIGNvbXByZXNzKGRlc3RfYnVmLCBkZXN0X3NpemUsIHNyY19idWYsIHNyY19zaXplKTsNCi0gICAgfQ0KLX0NCi1jbGFzcyBDTFpXRGVjb2RlciA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgRlhfQk9PTCBEZWNvZGUoRlhfTFBCWVRFIG91dHB1dCwgRlhfRFdPUkQmIG91dGxlbiwgY29uc3QgRlhfQllURSogaW5wdXQsIEZYX0RXT1JEJiBzaXplLCBGWF9CT09MIGJFYXJseUNoYW5nZSk7DQotcHJpdmF0ZToNCi0gICAgRlhfRFdPUkQJbV9JblBvczsNCi0gICAgRlhfRFdPUkQJbV9PdXRQb3M7DQotICAgIEZYX0xQQllURQltX3BPdXRwdXQ7DQotICAgIGNvbnN0IEZYX0JZVEUqCW1fcElucHV0Ow0KLSAgICBGWF9CT09MCQltX0Vhcmx5Ow0KLSAgICB2b2lkCQlBZGRDb2RlKEZYX0RXT1JEIHByZWZpeF9jb2RlLCBGWF9CWVRFIGFwcGVuZF9jaGFyKTsNCi0gICAgRlhfRFdPUkQJbV9Db2RlQXJyYXlbNTAyMV07DQotICAgIEZYX0RXT1JECW1fbkNvZGVzOw0KLSAgICBGWF9CWVRFCQltX0RlY29kZVN0YWNrWzQwMDBdOw0KLSAgICBGWF9EV09SRAltX1N0YWNrTGVuOw0KLSAgICB2b2lkCQlEZWNvZGVTdHJpbmcoRlhfRFdPUkQgY29kZSk7DQotICAgIGludAkJCW1fQ29kZUxlbjsNCi19Ow0KLXZvaWQgQ0xaV0RlY29kZXI6OkFkZENvZGUoRlhfRFdPUkQgcHJlZml4X2NvZGUsIEZYX0JZVEUgYXBwZW5kX2NoYXIpDQotew0KLSAgICBpZiAobV9uQ29kZXMgKyBtX0Vhcmx5ID09IDQwOTQpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX0NvZGVBcnJheVttX25Db2RlcyArK10gPSAocHJlZml4X2NvZGUgPDwgMTYpIHwgYXBwZW5kX2NoYXI7DQotICAgIGlmIChtX25Db2RlcyArIG1fRWFybHkgPT0gNTEyIC0gMjU4KSB7DQotICAgICAgICBtX0NvZGVMZW4gPSAxMDsNCi0gICAgfSBlbHNlIGlmIChtX25Db2RlcyArIG1fRWFybHkgPT0gMTAyNCAtIDI1OCkgew0KLSAgICAgICAgbV9Db2RlTGVuID0gMTE7DQotICAgIH0gZWxzZSBpZiAobV9uQ29kZXMgKyBtX0Vhcmx5ID09IDIwNDggLSAyNTgpIHsNCi0gICAgICAgIG1fQ29kZUxlbiA9IDEyOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0xaV0RlY29kZXI6OkRlY29kZVN0cmluZyhGWF9EV09SRCBjb2RlKQ0KLXsNCi0gICAgd2hpbGUgKDEpIHsNCi0gICAgICAgIGludCBpbmRleCA9IGNvZGUgLSAyNTg7DQotICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IChpbnQpbV9uQ29kZXMpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0RXT1JEIGRhdGEgPSBtX0NvZGVBcnJheVtpbmRleF07DQotICAgICAgICBpZiAobV9TdGFja0xlbiA+PSBzaXplb2YobV9EZWNvZGVTdGFjaykpIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBtX0RlY29kZVN0YWNrW21fU3RhY2tMZW4rK10gPSAoRlhfQllURSlkYXRhOw0KLSAgICAgICAgY29kZSA9IGRhdGEgPj4gMTY7DQotICAgIH0NCi0gICAgaWYgKG1fU3RhY2tMZW4gPj0gc2l6ZW9mKG1fRGVjb2RlU3RhY2spKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbV9EZWNvZGVTdGFja1ttX1N0YWNrTGVuKytdID0gKEZYX0JZVEUpY29kZTsNCi19DQotaW50IENMWldEZWNvZGVyOjpEZWNvZGUoRlhfTFBCWVRFIGRlc3RfYnVmLCBGWF9EV09SRCYgZGVzdF9zaXplLCBjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCYgc3JjX3NpemUsIEZYX0JPT0wgYkVhcmx5Q2hhbmdlKQ0KLXsNCi0gICAgbV9Db2RlTGVuID0gOTsNCi0gICAgbV9JblBvcyA9IDA7DQotICAgIG1fT3V0UG9zID0gMDsNCi0gICAgbV9wSW5wdXQgPSBzcmNfYnVmOw0KLSAgICBtX3BPdXRwdXQgPSBkZXN0X2J1ZjsNCi0gICAgbV9FYXJseSA9IGJFYXJseUNoYW5nZSA/IDEgOiAwOw0KLSAgICBtX25Db2RlcyA9IDA7DQotICAgIEZYX0RXT1JEIG9sZF9jb2RlID0gKEZYX0RXT1JEKSAtIDE7DQotICAgIEZYX0JZVEUgbGFzdF9jaGFyOw0KLSAgICB3aGlsZSAoMSkgew0KLSAgICAgICAgaWYgKG1fSW5Qb3MgKyBtX0NvZGVMZW4gPiBzcmNfc2l6ZSAqIDgpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBieXRlX3BvcyA9IG1fSW5Qb3MgLyA4Ow0KLSAgICAgICAgaW50IGJpdF9wb3MgPSBtX0luUG9zICUgOCwgYml0X2xlZnQgPSBtX0NvZGVMZW47DQotICAgICAgICBGWF9EV09SRCBjb2RlID0gMDsNCi0gICAgICAgIGlmIChiaXRfcG9zKSB7DQotICAgICAgICAgICAgYml0X2xlZnQgLT0gOCAtIGJpdF9wb3M7DQotICAgICAgICAgICAgY29kZSA9IChtX3BJbnB1dFtieXRlX3BvcysrXSAmICgoMSA8PCAoOCAtIGJpdF9wb3MpKSAtIDEpKSA8PCBiaXRfbGVmdDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChiaXRfbGVmdCA8IDgpIHsNCi0gICAgICAgICAgICBjb2RlIHw9IG1fcElucHV0W2J5dGVfcG9zXSA+PiAoOCAtIGJpdF9sZWZ0KTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgYml0X2xlZnQgLT0gODsNCi0gICAgICAgICAgICBjb2RlIHw9IG1fcElucHV0W2J5dGVfcG9zKytdIDw8IGJpdF9sZWZ0Ow0KLSAgICAgICAgICAgIGlmIChiaXRfbGVmdCkgew0KLSAgICAgICAgICAgICAgICBjb2RlIHw9IG1fcElucHV0W2J5dGVfcG9zXSA+PiAoOCAtIGJpdF9sZWZ0KTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBtX0luUG9zICs9IG1fQ29kZUxlbjsNCi0gICAgICAgIGlmIChjb2RlIDwgMjU2KSB7DQotICAgICAgICAgICAgaWYgKG1fT3V0UG9zID09IGRlc3Rfc2l6ZSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gLTU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChtX3BPdXRwdXQpIHsNCi0gICAgICAgICAgICAgICAgbV9wT3V0cHV0W21fT3V0UG9zXSA9IChGWF9CWVRFKWNvZGU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fT3V0UG9zICsrOw0KLSAgICAgICAgICAgIGxhc3RfY2hhciA9IChGWF9CWVRFKWNvZGU7DQotICAgICAgICAgICAgaWYgKG9sZF9jb2RlICE9IChGWF9EV09SRCkgLSAxKSB7DQotICAgICAgICAgICAgICAgIEFkZENvZGUob2xkX2NvZGUsIGxhc3RfY2hhcik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG9sZF9jb2RlID0gY29kZTsNCi0gICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSAyNTYpIHsNCi0gICAgICAgICAgICBtX0NvZGVMZW4gPSA5Ow0KLSAgICAgICAgICAgIG1fbkNvZGVzID0gMDsNCi0gICAgICAgICAgICBvbGRfY29kZSA9IChGWF9EV09SRCkgLSAxOw0KLSAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IDI1Nykgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAob2xkX2NvZGUgPT0gKEZYX0RXT1JEKSAtIDEpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIDI7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fU3RhY2tMZW4gPSAwOw0KLSAgICAgICAgICAgIGlmIChjb2RlID49IG1fbkNvZGVzICsgMjU4KSB7DQotICAgICAgICAgICAgICAgIGlmIChtX1N0YWNrTGVuIDwgc2l6ZW9mKG1fRGVjb2RlU3RhY2spKSB7DQotICAgICAgICAgICAgICAgICAgICBtX0RlY29kZVN0YWNrW21fU3RhY2tMZW4rK10gPSBsYXN0X2NoYXI7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgRGVjb2RlU3RyaW5nKG9sZF9jb2RlKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBEZWNvZGVTdHJpbmcoY29kZSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChtX091dFBvcyArIG1fU3RhY2tMZW4gPiBkZXN0X3NpemUpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIC01Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobV9wT3V0cHV0KSB7DQotICAgICAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBtX1N0YWNrTGVuOyBpICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBtX3BPdXRwdXRbbV9PdXRQb3MgKyBpXSA9IG1fRGVjb2RlU3RhY2tbbV9TdGFja0xlbiAtIGkgLSAxXTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBtX091dFBvcyArPSBtX1N0YWNrTGVuOw0KLSAgICAgICAgICAgIGxhc3RfY2hhciA9IG1fRGVjb2RlU3RhY2tbbV9TdGFja0xlbiAtIDFdOw0KLSAgICAgICAgICAgIGlmIChvbGRfY29kZSA8IDI1Nikgew0KLSAgICAgICAgICAgICAgICBBZGRDb2RlKG9sZF9jb2RlLCBsYXN0X2NoYXIpOw0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAob2xkX2NvZGUgLSAyNTggPj0gbV9uQ29kZXMpIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9zaXplID0gbV9PdXRQb3M7DQotICAgICAgICAgICAgICAgIHNyY19zaXplID0gKG1fSW5Qb3MgKyA3KSAvIDg7DQotICAgICAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIEFkZENvZGUob2xkX2NvZGUsIGxhc3RfY2hhcik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG9sZF9jb2RlID0gY29kZTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBkZXN0X3NpemUgPSBtX091dFBvczsNCi0gICAgc3JjX3NpemUgPSAobV9JblBvcyArIDcpIC8gODsNCi0gICAgcmV0dXJuIDA7DQotfQ0KLXN0YXRpYyBGWF9CWVRFIFBhZXRoUHJlZGljdG9yKGludCBhLCBpbnQgYiwgaW50IGMpDQotew0KLSAgICBpbnQgcCA9IGEgKyBiIC0gYzsNCi0gICAgaW50IHBhID0gRlhTWVNfYWJzKHAgLSBhKTsNCi0gICAgaW50IHBiID0gRlhTWVNfYWJzKHAgLSBiKTsNCi0gICAgaW50IHBjID0gRlhTWVNfYWJzKHAgLSBjKTsNCi0gICAgaWYgKHBhIDw9IHBiICYmIHBhIDw9IHBjKSB7DQotICAgICAgICByZXR1cm4gKEZYX0JZVEUpYTsNCi0gICAgfQ0KLSAgICBpZiAocGIgPD0gcGMpIHsNCi0gICAgICAgIHJldHVybiAoRlhfQllURSliOw0KLSAgICB9DQotICAgIHJldHVybiAoRlhfQllURSljOw0KLX0NCi1zdGF0aWMgdm9pZCBQTkdfUHJlZGljdG9yRW5jb2RlKEZYX0xQQllURSYgZGF0YV9idWYsIEZYX0RXT1JEJiBkYXRhX3NpemUsIGludCBwcmVkaWN0b3IsIGludCBDb2xvcnMsIGludCBCaXRzUGVyQ29tcG9uZW50LCBpbnQgQ29sdW1ucykNCi17DQotICAgIGludCBCeXRlc1BlclBpeGVsID0gKENvbG9ycyAqIEJpdHNQZXJDb21wb25lbnQgKyA3KSAvIDg7DQotICAgIGludCByb3dfc2l6ZSA9IChDb2xvcnMgKiBCaXRzUGVyQ29tcG9uZW50ICogQ29sdW1ucyArIDcpIC8gODsNCi0gICAgaW50IHJvd19jb3VudCA9IChkYXRhX3NpemUgKyByb3dfc2l6ZSAtIDEpIC8gcm93X3NpemU7DQotICAgIGludCBsYXN0X3Jvd19zaXplID0gZGF0YV9zaXplICUgcm93X3NpemU7DQotICAgIEZYX0xQQllURSBkZXN0X2J1ZiA9IEZYX0FsbG9jKCBGWF9CWVRFLCAocm93X3NpemUgKyAxKSAqIHJvd19jb3VudCk7DQotICAgIGlmIChkZXN0X2J1ZiA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaW50IGJ5dGVfY250ID0gMDsNCi0gICAgRlhfTFBCWVRFIHBTcmNEYXRhID0gZGF0YV9idWY7DQotICAgIEZYX0xQQllURSBwRGVzdERhdGEgPSBkZXN0X2J1ZjsNCi0gICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgcm93X2NvdW50OyByb3crKykgew0KLSAgICAgICAgaWYgKHByZWRpY3RvciA9PSAxMCkgew0KLSAgICAgICAgICAgIHBEZXN0RGF0YVswXSA9IDA7DQotICAgICAgICAgICAgaW50IG1vdmVfc2l6ZSA9IHJvd19zaXplOw0KLSAgICAgICAgICAgIGlmIChtb3ZlX3NpemUgKiAocm93ICsgMSkgPiAoaW50KWRhdGFfc2l6ZSkgew0KLSAgICAgICAgICAgICAgICBtb3ZlX3NpemUgPSBkYXRhX3NpemUgLSAobW92ZV9zaXplICogcm93KTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgRlhTWVNfbWVtbW92ZTMyKHBEZXN0RGF0YSArIDEsIHBTcmNEYXRhLCBtb3ZlX3NpemUpOw0KLSAgICAgICAgICAgIHBEZXN0RGF0YSArPSAobW92ZV9zaXplICsgMSk7DQotICAgICAgICAgICAgcFNyY0RhdGEgKz0gbW92ZV9zaXplOw0KLSAgICAgICAgICAgIGJ5dGVfY250ICs9IG1vdmVfc2l6ZTsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGZvciAoaW50IGJ5dGUgPSAwOyBieXRlIDwgcm93X3NpemUgJiYgYnl0ZV9jbnQgPCAoaW50KWRhdGFfc2l6ZTsgYnl0ZSsrKSB7DQotICAgICAgICAgICAgc3dpdGNoIChwcmVkaWN0b3IpIHsNCi0gICAgICAgICAgICAgICAgY2FzZSAxMTogew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBEZXN0RGF0YVswXSA9IDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSBsZWZ0ID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZSA+PSBCeXRlc1BlclBpeGVsKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBwU3JjRGF0YVtieXRlIC0gQnl0ZXNQZXJQaXhlbF07DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBEZXN0RGF0YVtieXRlICsgMV0gPSBwU3JjRGF0YVtieXRlXSAtIGxlZnQ7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAxMjogew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBEZXN0RGF0YVswXSA9IDI7DQotICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSB1cCA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cCA9IHBTcmNEYXRhW2J5dGUgLSByb3dfc2l6ZV07DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBEZXN0RGF0YVtieXRlICsgMV0gPSBwU3JjRGF0YVtieXRlXSAtIHVwOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMTM6IHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBwRGVzdERhdGFbMF0gPSAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgbGVmdCA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGUgPj0gQnl0ZXNQZXJQaXhlbCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gcFNyY0RhdGFbYnl0ZSAtIEJ5dGVzUGVyUGl4ZWxdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHVwID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm93KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwID0gcFNyY0RhdGFbYnl0ZSAtIHJvd19zaXplXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgcERlc3REYXRhW2J5dGUgKyAxXSA9IHBTcmNEYXRhW2J5dGVdIC0gKGxlZnQgKyB1cCkgLyAyOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMTQ6IHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBwRGVzdERhdGFbMF0gPSA0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgbGVmdCA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGUgPj0gQnl0ZXNQZXJQaXhlbCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gcFNyY0RhdGFbYnl0ZSAtIEJ5dGVzUGVyUGl4ZWxdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHVwID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm93KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwID0gcFNyY0RhdGFbYnl0ZSAtIHJvd19zaXplXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSB1cHBlcl9sZWZ0ID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZSA+PSBCeXRlc1BlclBpeGVsICYmIHJvdykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHBlcl9sZWZ0ID0gcFNyY0RhdGFbYnl0ZSAtIHJvd19zaXplIC0gQnl0ZXNQZXJQaXhlbF07DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBEZXN0RGF0YVtieXRlICsgMV0gPSBwU3JjRGF0YVtieXRlXSAtIFBhZXRoUHJlZGljdG9yKGxlZnQsIHVwLCB1cHBlcl9sZWZ0KTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OiB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcERlc3REYXRhW2J5dGUgKyAxXSA9IHBTcmNEYXRhW2J5dGVdOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGJ5dGVfY250Kys7DQotICAgICAgICB9DQotICAgICAgICBwRGVzdERhdGEgKz0gKHJvd19zaXplICsgMSk7DQotICAgICAgICBwU3JjRGF0YSArPSByb3dfc2l6ZTsNCi0gICAgfQ0KLSAgICBGWF9GcmVlKGRhdGFfYnVmKTsNCi0gICAgZGF0YV9idWYgPSBkZXN0X2J1ZjsNCi0gICAgZGF0YV9zaXplID0gKHJvd19zaXplICsgMSkgKiByb3dfY291bnQgLSAobGFzdF9yb3dfc2l6ZSA+IDAgPyAocm93X3NpemUgLSBsYXN0X3Jvd19zaXplKSA6IDApOw0KLX0NCi1zdGF0aWMgdm9pZCBQTkdfUHJlZGljdExpbmUoRlhfTFBCWVRFIHBEZXN0RGF0YSwgRlhfTFBDQllURSBwU3JjRGF0YSwgRlhfTFBDQllURSBwTGFzdExpbmUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBicGMsIGludCBuQ29sb3JzLCBpbnQgblBpeGVscykNCi17DQotICAgIGludCByb3dfc2l6ZSA9IChuUGl4ZWxzICogYnBjICogbkNvbG9ycyArIDcpIC8gODsNCi0gICAgaW50IEJ5dGVzUGVyUGl4ZWwgPSAoYnBjICogbkNvbG9ycyArIDcpIC8gODsNCi0gICAgRlhfQllURSB0YWcgPSBwU3JjRGF0YVswXTsNCi0gICAgaWYgKHRhZyA9PSAwKSB7DQotICAgICAgICBGWFNZU19tZW1tb3ZlMzIocERlc3REYXRhLCBwU3JjRGF0YSArIDEsIHJvd19zaXplKTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBmb3IgKGludCBieXRlID0gMDsgYnl0ZSA8IHJvd19zaXplOyBieXRlICsrKSB7DQotICAgICAgICBGWF9CWVRFIHJhd19ieXRlID0gcFNyY0RhdGFbYnl0ZSArIDFdOw0KLSAgICAgICAgc3dpdGNoICh0YWcpIHsNCi0gICAgICAgICAgICBjYXNlIDE6CXsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgbGVmdCA9IDA7DQotICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZSA+PSBCeXRlc1BlclBpeGVsKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHBEZXN0RGF0YVtieXRlIC0gQnl0ZXNQZXJQaXhlbF07DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBwRGVzdERhdGFbYnl0ZV0gPSByYXdfYnl0ZSArIGxlZnQ7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNhc2UgMjogew0KLSAgICAgICAgICAgICAgICAgICAgRlhfQllURSB1cCA9IDA7DQotICAgICAgICAgICAgICAgICAgICBpZiAocExhc3RMaW5lKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgdXAgPSBwTGFzdExpbmVbYnl0ZV07DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBwRGVzdERhdGFbYnl0ZV0gPSByYXdfYnl0ZSArIHVwOw0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjYXNlIDM6IHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgbGVmdCA9IDA7DQotICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZSA+PSBCeXRlc1BlclBpeGVsKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHBEZXN0RGF0YVtieXRlIC0gQnl0ZXNQZXJQaXhlbF07DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHVwID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwTGFzdExpbmUpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICB1cCA9IHBMYXN0TGluZVtieXRlXTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIHBEZXN0RGF0YVtieXRlXSA9IHJhd19ieXRlICsgKHVwICsgbGVmdCkgLyAyOw0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjYXNlIDQ6IHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgbGVmdCA9IDA7DQotICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZSA+PSBCeXRlc1BlclBpeGVsKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHBEZXN0RGF0YVtieXRlIC0gQnl0ZXNQZXJQaXhlbF07DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHVwID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwTGFzdExpbmUpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICB1cCA9IHBMYXN0TGluZVtieXRlXTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgdXBwZXJfbGVmdCA9IDA7DQotICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZSA+PSBCeXRlc1BlclBpeGVsICYmIHBMYXN0TGluZSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyX2xlZnQgPSBwTGFzdExpbmVbYnl0ZSAtIEJ5dGVzUGVyUGl4ZWxdOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgcERlc3REYXRhW2J5dGVdID0gcmF3X2J5dGUgKyBQYWV0aFByZWRpY3RvcihsZWZ0LCB1cCwgdXBwZXJfbGVmdCk7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgICAgIHBEZXN0RGF0YVtieXRlXSA9IHJhd19ieXRlOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1zdGF0aWMgdm9pZCBQTkdfUHJlZGljdG9yKEZYX0xQQllURSYgZGF0YV9idWYsIEZYX0RXT1JEJiBkYXRhX3NpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgQ29sb3JzLCBpbnQgQml0c1BlckNvbXBvbmVudCwgaW50IENvbHVtbnMpDQotew0KLSAgICBpbnQgQnl0ZXNQZXJQaXhlbCA9IChDb2xvcnMgKiBCaXRzUGVyQ29tcG9uZW50ICsgNykgLyA4Ow0KLSAgICBpbnQgcm93X3NpemUgPSAoQ29sb3JzICogQml0c1BlckNvbXBvbmVudCAqIENvbHVtbnMgKyA3KSAvIDg7DQotICAgIGludCByb3dfY291bnQgPSAoZGF0YV9zaXplICsgcm93X3NpemUpIC8gKHJvd19zaXplICsgMSk7DQotICAgIGludCBsYXN0X3Jvd19zaXplID0gZGF0YV9zaXplICUgKHJvd19zaXplICsgMSk7DQotICAgIEZYX0xQQllURSBkZXN0X2J1ZiA9IEZYX0FsbG9jKCBGWF9CWVRFLCByb3dfc2l6ZSAqIHJvd19jb3VudCk7DQotICAgIGlmIChkZXN0X2J1ZiA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaW50IGJ5dGVfY250ID0gMDsNCi0gICAgRlhfTFBCWVRFIHBTcmNEYXRhID0gZGF0YV9idWY7DQotICAgIEZYX0xQQllURSBwRGVzdERhdGEgPSBkZXN0X2J1ZjsNCi0gICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgcm93X2NvdW50OyByb3cgKyspIHsNCi0gICAgICAgIEZYX0JZVEUgdGFnID0gcFNyY0RhdGFbMF07DQotICAgICAgICBpZiAodGFnID09IDApIHsNCi0gICAgICAgICAgICBpbnQgbW92ZV9zaXplID0gcm93X3NpemU7DQotICAgICAgICAgICAgaWYgKChyb3cgKyAxKSAqIChtb3ZlX3NpemUgKyAxKSA+IChpbnQpZGF0YV9zaXplKSB7DQotICAgICAgICAgICAgICAgIG1vdmVfc2l6ZSA9IGxhc3Rfcm93X3NpemUgLSAxOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWFNZU19tZW1tb3ZlMzIocERlc3REYXRhLCBwU3JjRGF0YSArIDEsIG1vdmVfc2l6ZSk7DQotICAgICAgICAgICAgcFNyY0RhdGEgKz0gbW92ZV9zaXplICsgMTsNCi0gICAgICAgICAgICBwRGVzdERhdGEgKz0gbW92ZV9zaXplOw0KLSAgICAgICAgICAgIGJ5dGVfY250ICs9IG1vdmVfc2l6ZSArIDE7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBmb3IgKGludCBieXRlID0gMDsgYnl0ZSA8IHJvd19zaXplICYmIGJ5dGVfY250IDwgKGludClkYXRhX3NpemU7IGJ5dGUgKyspIHsNCi0gICAgICAgICAgICBGWF9CWVRFIHJhd19ieXRlID0gcFNyY0RhdGFbYnl0ZSArIDFdOw0KLSAgICAgICAgICAgIHN3aXRjaCAodGFnKSB7DQotICAgICAgICAgICAgICAgIGNhc2UgMToJew0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgbGVmdCA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGUgPj0gQnl0ZXNQZXJQaXhlbCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gcERlc3REYXRhW2J5dGUgLSBCeXRlc1BlclBpeGVsXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgcERlc3REYXRhW2J5dGVdID0gcmF3X2J5dGUgKyBsZWZ0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBjYXNlIDI6IHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHVwID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm93KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwID0gcERlc3REYXRhW2J5dGUgLSByb3dfc2l6ZV07DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBEZXN0RGF0YVtieXRlXSA9IHJhd19ieXRlICsgdXA7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGNhc2UgMzogew0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgbGVmdCA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGUgPj0gQnl0ZXNQZXJQaXhlbCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gcERlc3REYXRhW2J5dGUgLSBCeXRlc1BlclBpeGVsXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSB1cCA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cCA9IHBEZXN0RGF0YVtieXRlIC0gcm93X3NpemVdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBwRGVzdERhdGFbYnl0ZV0gPSByYXdfYnl0ZSArICh1cCArIGxlZnQpIC8gMjsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgY2FzZSA0OiB7DQotICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSBsZWZ0ID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZSA+PSBCeXRlc1BlclBpeGVsKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBwRGVzdERhdGFbYnl0ZSAtIEJ5dGVzUGVyUGl4ZWxdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHVwID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm93KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwID0gcERlc3REYXRhW2J5dGUgLSByb3dfc2l6ZV07DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgdXBwZXJfbGVmdCA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGUgPj0gQnl0ZXNQZXJQaXhlbCAmJiByb3cpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJfbGVmdCA9IHBEZXN0RGF0YVtieXRlIC0gcm93X3NpemUgLSBCeXRlc1BlclBpeGVsXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgcERlc3REYXRhW2J5dGVdID0gcmF3X2J5dGUgKyBQYWV0aFByZWRpY3RvcihsZWZ0LCB1cCwgdXBwZXJfbGVmdCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgICAgICAgICBwRGVzdERhdGFbYnl0ZV0gPSByYXdfYnl0ZTsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBieXRlX2NudCsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcFNyY0RhdGEgKz0gcm93X3NpemUgKyAxOw0KLSAgICAgICAgcERlc3REYXRhICs9IHJvd19zaXplOw0KLSAgICAgICAgYnl0ZV9jbnQrKzsNCi0gICAgfQ0KLSAgICBGWF9GcmVlKGRhdGFfYnVmKTsNCi0gICAgZGF0YV9idWYgPSBkZXN0X2J1ZjsNCi0gICAgZGF0YV9zaXplID0gcm93X3NpemUgKiByb3dfY291bnQgLSAobGFzdF9yb3dfc2l6ZSA+IDAgPyAocm93X3NpemUgKyAxIC0gbGFzdF9yb3dfc2l6ZSkgOiAwKTsNCi19DQotc3RhdGljIHZvaWQgVElGRl9QcmVkaWN0b3JFbmNvZGVMaW5lKEZYX0xQQllURSBkZXN0X2J1ZiwgaW50IHJvd19zaXplLCBpbnQgQml0c1BlckNvbXBvbmVudCwgaW50IENvbG9ycywgaW50IENvbHVtbnMpDQotew0KLSAgICBpbnQgQnl0ZXNQZXJQaXhlbCA9IEJpdHNQZXJDb21wb25lbnQgKiBDb2xvcnMgLyA4Ow0KLSAgICBpZiAoQml0c1BlckNvbXBvbmVudCA8IDgpIHsNCi0gICAgICAgIEZYX0JZVEUgbWFzayA9IDB4MDE7DQotICAgICAgICBpZiAoQml0c1BlckNvbXBvbmVudCA9PSAyKSB7DQotICAgICAgICAgICAgbWFzayA9IDB4MDM7DQotICAgICAgICB9IGVsc2UgaWYgKEJpdHNQZXJDb21wb25lbnQgPT0gNCkgew0KLSAgICAgICAgICAgIG1hc2sgPSAweDBGOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW50IHJvd19iaXRzID0gQ29sb3JzICogQml0c1BlckNvbXBvbmVudCAqIENvbHVtbnM7DQotICAgICAgICBmb3IgKGludCBpID0gcm93X2JpdHMgLSBCaXRzUGVyQ29tcG9uZW50OyBpID49IEJpdHNQZXJDb21wb25lbnQ7IGkgLT0gQml0c1BlckNvbXBvbmVudCkgew0KLSAgICAgICAgICAgIGludCBjb2wgPSBpICUgODsNCi0gICAgICAgICAgICBpbnQgaW5kZXggPSBpIC8gODsNCi0gICAgICAgICAgICBpbnQgY29sX3ByZSA9IChjb2wgPT0gMCkgPyAoOCAtIEJpdHNQZXJDb21wb25lbnQpIDogKGNvbCAtIEJpdHNQZXJDb21wb25lbnQpOw0KLSAgICAgICAgICAgIGludCBpbmRleF9wcmUgPSAoY29sID09IDApID8gKGluZGV4IC0gMSkgOiBpbmRleDsNCi0gICAgICAgICAgICBGWF9CWVRFIGN1ciA9IChkZXN0X2J1ZltpbmRleF0gPj4gKDggLSBjb2wgLSBCaXRzUGVyQ29tcG9uZW50KSkgJiBtYXNrOw0KLSAgICAgICAgICAgIEZYX0JZVEUgbGVmdCA9IChkZXN0X2J1ZltpbmRleF9wcmVdID4+ICg4IC0gY29sX3ByZSAtIEJpdHNQZXJDb21wb25lbnQpKSAmIG1hc2s7DQotICAgICAgICAgICAgY3VyIC09IGxlZnQ7DQotICAgICAgICAgICAgY3VyICY9IG1hc2s7DQotICAgICAgICAgICAgY3VyIDw8PSAoOCAtIGNvbCAtIEJpdHNQZXJDb21wb25lbnQpOw0KLSAgICAgICAgICAgIGRlc3RfYnVmW2luZGV4XSAmPSB+KG1hc2sgPDwgKCg4IC0gY29sIC0gQml0c1BlckNvbXBvbmVudCkpKTsNCi0gICAgICAgICAgICBkZXN0X2J1ZltpbmRleF0gfD0gY3VyOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2UgaWYgKEJpdHNQZXJDb21wb25lbnQgPT0gOCkgew0KLSAgICAgICAgZm9yIChpbnQgaSA9IHJvd19zaXplIC0gMTsgaSA+PSBCeXRlc1BlclBpeGVsOyBpLS0pIHsNCi0gICAgICAgICAgICBkZXN0X2J1ZltpXSAtPSBkZXN0X2J1ZltpIC0gQnl0ZXNQZXJQaXhlbF07DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBmb3IgKGludCBpID0gcm93X3NpemUgLSBCeXRlc1BlclBpeGVsOyBpID49IEJ5dGVzUGVyUGl4ZWw7IGkgLT0gQnl0ZXNQZXJQaXhlbCkgew0KLSAgICAgICAgICAgIEZYX1dPUkQgcGl4ZWwgPSAoZGVzdF9idWZbaV0gPDwgOCkgfCBkZXN0X2J1ZltpICsgMV07DQotICAgICAgICAgICAgcGl4ZWwgLT0gKGRlc3RfYnVmW2kgLSBCeXRlc1BlclBpeGVsXSA8PCA4KSB8IGRlc3RfYnVmW2kgLSBCeXRlc1BlclBpeGVsICsgMV07DQotICAgICAgICAgICAgZGVzdF9idWZbaV0gPSBwaXhlbCA+PiA4Ow0KLSAgICAgICAgICAgIGRlc3RfYnVmW2kgKyAxXSA9IChGWF9CWVRFKXBpeGVsOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLXN0YXRpYyB2b2lkIFRJRkZfUHJlZGljdG9yRW5jb2RlKEZYX0xQQllURSYgZGF0YV9idWYsIEZYX0RXT1JEJiBkYXRhX3NpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IENvbG9ycywgaW50IEJpdHNQZXJDb21wb25lbnQsIGludCBDb2x1bW5zKQ0KLXsNCi0gICAgaW50IHJvd19zaXplID0gKENvbG9ycyAqIEJpdHNQZXJDb21wb25lbnQgKiBDb2x1bW5zICsgNykgLyA4Ow0KLSAgICBpbnQgcm93X2NvdW50ID0gKGRhdGFfc2l6ZSArIHJvd19zaXplIC0gMSkgLyByb3dfc2l6ZTsNCi0gICAgaW50IGxhc3Rfcm93X3NpemUgPSBkYXRhX3NpemUgJSByb3dfc2l6ZTsNCi0gICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgcm93X2NvdW50OyByb3crKykgew0KLSAgICAgICAgRlhfTFBCWVRFIHNjYW5fbGluZSA9IGRhdGFfYnVmICsgcm93ICogcm93X3NpemU7DQotICAgICAgICBpZiAoKHJvdyArIDEpICogcm93X3NpemUgPiAoaW50KWRhdGFfc2l6ZSkgew0KLSAgICAgICAgICAgIHJvd19zaXplID0gbGFzdF9yb3dfc2l6ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIFRJRkZfUHJlZGljdG9yRW5jb2RlTGluZShzY2FuX2xpbmUsIHJvd19zaXplLCBCaXRzUGVyQ29tcG9uZW50LCBDb2xvcnMsIENvbHVtbnMpOw0KLSAgICB9DQotfQ0KLXN0YXRpYyB2b2lkIFRJRkZfUHJlZGljdExpbmUoRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQgcm93X3NpemUsIGludCBCaXRzUGVyQ29tcG9uZW50LCBpbnQgQ29sb3JzLCBpbnQgQ29sdW1ucykNCi17DQotICAgIGlmIChCaXRzUGVyQ29tcG9uZW50ID09IDEpIHsNCi0gICAgICAgIGludCByb3dfYml0cyA9IEJpdHNQZXJDb21wb25lbnQgKiBDb2xvcnMgKiBDb2x1bW5zOw0KLSAgICAgICAgZm9yKGludCBpID0gMTsgaSA8IHJvd19iaXRzOyBpICsrKSB7DQotICAgICAgICAgICAgaW50IGNvbCA9IGkgJSA4Ow0KLSAgICAgICAgICAgIGludCBpbmRleCA9IGkgLyA4Ow0KLSAgICAgICAgICAgIGludCBpbmRleF9wcmUgPSAoY29sID09IDApID8gKGluZGV4IC0gMSkgOiBpbmRleDsNCi0gICAgICAgICAgICBpbnQgY29sX3ByZSA9IChjb2wgPT0gMCkgPyA4IDogY29sOw0KLSAgICAgICAgICAgIGlmKCAoKGRlc3RfYnVmW2luZGV4XSA+PiAoNyAtIGNvbCkpICYgMSkgXiAoKGRlc3RfYnVmW2luZGV4X3ByZV0gPj4gKDggLSBjb2xfcHJlKSkgJiAxKSApIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9idWZbaW5kZXhdIHw9IDEgPDwgKDcgLSBjb2wpOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGRlc3RfYnVmW2luZGV4XSAmPSB+KDEgPDwgKDcgLSBjb2wpKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaW50IEJ5dGVzUGVyUGl4ZWwgPSBCaXRzUGVyQ29tcG9uZW50ICogQ29sb3JzIC8gODsNCi0gICAgaWYgKEJpdHNQZXJDb21wb25lbnQgPT0gMTYpIHsNCi0gICAgICAgIGZvciAoaW50IGkgPSBCeXRlc1BlclBpeGVsOyBpIDwgcm93X3NpemU7IGkgKz0gMikgew0KLSAgICAgICAgICAgIEZYX1dPUkQgcGl4ZWwgPSAoZGVzdF9idWZbaSAtIEJ5dGVzUGVyUGl4ZWxdIDw8IDgpIHwgZGVzdF9idWZbaSAtIEJ5dGVzUGVyUGl4ZWwgKyAxXTsNCi0gICAgICAgICAgICBwaXhlbCArPSAoZGVzdF9idWZbaV0gPDwgOCkgfCBkZXN0X2J1ZltpICsgMV07DQotICAgICAgICAgICAgZGVzdF9idWZbaV0gPSBwaXhlbCA+PiA4Ow0KLSAgICAgICAgICAgIGRlc3RfYnVmW2kgKyAxXSA9IChGWF9CWVRFKXBpeGVsOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZm9yIChpbnQgaSA9IEJ5dGVzUGVyUGl4ZWw7IGkgPCByb3dfc2l6ZTsgaSArKykgew0KLSAgICAgICAgICAgIGRlc3RfYnVmW2ldICs9IGRlc3RfYnVmW2kgLSBCeXRlc1BlclBpeGVsXTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1zdGF0aWMgdm9pZCBUSUZGX1ByZWRpY3RvcihGWF9MUEJZVEUmIGRhdGFfYnVmLCBGWF9EV09SRCYgZGF0YV9zaXplLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBDb2xvcnMsIGludCBCaXRzUGVyQ29tcG9uZW50LCBpbnQgQ29sdW1ucykNCi17DQotICAgIGludCByb3dfc2l6ZSA9IChDb2xvcnMgKiBCaXRzUGVyQ29tcG9uZW50ICogQ29sdW1ucyArIDcpIC8gODsNCi0gICAgaW50IHJvd19jb3VudCA9IChkYXRhX3NpemUgKyByb3dfc2l6ZSAtIDEpIC8gcm93X3NpemU7DQotICAgIGludCBsYXN0X3Jvd19zaXplID0gZGF0YV9zaXplICUgcm93X3NpemU7DQotICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHJvd19jb3VudDsgcm93ICsrKSB7DQotICAgICAgICBGWF9MUEJZVEUgc2Nhbl9saW5lID0gZGF0YV9idWYgKyByb3cgKiByb3dfc2l6ZTsNCi0gICAgICAgIGlmICgocm93ICsgMSkgKiByb3dfc2l6ZSA+IChpbnQpZGF0YV9zaXplKSB7DQotICAgICAgICAgICAgcm93X3NpemUgPSBsYXN0X3Jvd19zaXplOw0KLSAgICAgICAgfQ0KLSAgICAgICAgVElGRl9QcmVkaWN0TGluZShzY2FuX2xpbmUsIHJvd19zaXplLCBCaXRzUGVyQ29tcG9uZW50LCBDb2xvcnMsIENvbHVtbnMpOw0KLSAgICB9DQotfQ0KLWNsYXNzIENDb2RlY19GbGF0ZVNjYW5saW5lRGVjb2RlciA6IHB1YmxpYyBDQ29kZWNfU2NhbmxpbmVEZWNvZGVyDQotew0KLXB1YmxpYzoNCi0gICAgQ0NvZGVjX0ZsYXRlU2NhbmxpbmVEZWNvZGVyKCk7DQotICAgIH5DQ29kZWNfRmxhdGVTY2FubGluZURlY29kZXIoKTsNCi0gICAgRlhfQk9PTAkJQ3JlYXRlKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG5Db21wcywgaW50IGJwYywNCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBwcmVkaWN0b3IsIGludCBDb2xvcnMsIGludCBCaXRzUGVyQ29tcG9uZW50LCBpbnQgQ29sdW1ucyk7DQotICAgIHZpcnR1YWwgdm9pZAkJRGVzdHJveSgpDQotICAgIHsNCi0gICAgICAgIGRlbGV0ZSB0aGlzOw0KLSAgICB9DQotICAgIHZpcnR1YWwgdm9pZAkJdl9Eb3duU2NhbGUoaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCkge30NCi0gICAgdmlydHVhbCBGWF9CT09MCQl2X1Jld2luZCgpOw0KLSAgICB2aXJ0dWFsIEZYX0xQQllURQl2X0dldE5leHRMaW5lKCk7DQotICAgIHZpcnR1YWwgRlhfRFdPUkQJR2V0U3JjT2Zmc2V0KCk7DQotICAgIHZvaWQqCQkJCW1fcEZsYXRlOw0KLSAgICBGWF9MUENCWVRFCQkJbV9TcmNCdWY7DQotICAgIEZYX0RXT1JECQkJbV9TcmNTaXplOw0KLSAgICBGWF9MUEJZVEUJCQltX3BTY2FubGluZTsNCi0gICAgRlhfTFBCWVRFCQkJbV9wTGFzdExpbmU7DQotICAgIEZYX0xQQllURQkJCW1fcFByZWRpY3RCdWZmZXI7DQotICAgIEZYX0xQQllURQkJCW1fcFByZWRpY3RSYXc7DQotICAgIGludAkJCQkJbV9QcmVkaWN0b3I7DQotICAgIGludAkJCQkJbV9Db2xvcnMsIG1fQml0c1BlckNvbXBvbmVudCwgbV9Db2x1bW5zLCBtX1ByZWRpY3RQaXRjaCwgbV9MZWZ0T3ZlcjsNCi19Ow0KLUNDb2RlY19GbGF0ZVNjYW5saW5lRGVjb2Rlcjo6Q0NvZGVjX0ZsYXRlU2NhbmxpbmVEZWNvZGVyKCkNCi17DQotICAgIG1fcEZsYXRlID0gTlVMTDsNCi0gICAgbV9wU2NhbmxpbmUgPSBOVUxMOw0KLSAgICBtX3BMYXN0TGluZSA9IE5VTEw7DQotICAgIG1fcFByZWRpY3RCdWZmZXIgPSBOVUxMOw0KLSAgICBtX3BQcmVkaWN0UmF3ID0gTlVMTDsNCi0gICAgbV9MZWZ0T3ZlciA9IDA7DQotfQ0KLUNDb2RlY19GbGF0ZVNjYW5saW5lRGVjb2Rlcjo6fkNDb2RlY19GbGF0ZVNjYW5saW5lRGVjb2RlcigpDQotew0KLSAgICBpZiAobV9wU2NhbmxpbmUpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wU2NhbmxpbmUpOw0KLSAgICB9DQotICAgIGlmIChtX3BMYXN0TGluZSkgew0KLSAgICAgICAgRlhfRnJlZShtX3BMYXN0TGluZSk7DQotICAgIH0NCi0gICAgaWYgKG1fcFByZWRpY3RCdWZmZXIpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wUHJlZGljdEJ1ZmZlcik7DQotICAgIH0NCi0gICAgaWYgKG1fcFByZWRpY3RSYXcpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wUHJlZGljdFJhdyk7DQotICAgIH0NCi0gICAgaWYgKG1fcEZsYXRlKSB7DQotICAgICAgICBGUERGQVBJX0ZsYXRlRW5kKG1fcEZsYXRlKTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENDb2RlY19GbGF0ZVNjYW5saW5lRGVjb2Rlcjo6Q3JlYXRlKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwNCi0gICAgICAgIGludCBuQ29tcHMsIGludCBicGMsIGludCBwcmVkaWN0b3IsIGludCBDb2xvcnMsIGludCBCaXRzUGVyQ29tcG9uZW50LCBpbnQgQ29sdW1ucykNCi17DQotICAgIG1fU3JjQnVmID0gc3JjX2J1ZjsNCi0gICAgbV9TcmNTaXplID0gc3JjX3NpemU7DQotICAgIG1fT3V0cHV0V2lkdGggPSBtX09yaWdXaWR0aCA9IHdpZHRoOw0KLSAgICBtX091dHB1dEhlaWdodCA9IG1fT3JpZ0hlaWdodCA9IGhlaWdodDsNCi0gICAgbV9uQ29tcHMgPSBuQ29tcHM7DQotICAgIG1fYnBjID0gYnBjOw0KLSAgICBtX2JDb2xvclRyYW5zZm9ybWVkID0gRkFMU0U7DQotICAgIG1fUGl0Y2ggPSAod2lkdGggKiBuQ29tcHMgKiBicGMgKyA3KSAvIDg7DQotICAgIG1fcFNjYW5saW5lID0gRlhfQWxsb2MoRlhfQllURSwgbV9QaXRjaCk7DQotICAgIGlmIChtX3BTY2FubGluZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbV9QcmVkaWN0b3IgPSAwOw0KLSAgICBpZiAocHJlZGljdG9yKSB7DQotICAgICAgICBpZiAocHJlZGljdG9yID49IDEwKSB7DQotICAgICAgICAgICAgbV9QcmVkaWN0b3IgPSAyOw0KLSAgICAgICAgfSBlbHNlIGlmIChwcmVkaWN0b3IgPT0gMikgew0KLSAgICAgICAgICAgIG1fUHJlZGljdG9yID0gMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX1ByZWRpY3Rvcikgew0KLSAgICAgICAgICAgIGlmIChCaXRzUGVyQ29tcG9uZW50ICogQ29sb3JzICogQ29sdW1ucyA9PSAwKSB7DQotICAgICAgICAgICAgICAgIEJpdHNQZXJDb21wb25lbnQgPSBtX2JwYzsNCi0gICAgICAgICAgICAgICAgQ29sb3JzID0gbV9uQ29tcHM7DQotICAgICAgICAgICAgICAgIENvbHVtbnMgPSBtX09yaWdXaWR0aDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9Db2xvcnMgPSBDb2xvcnM7DQotICAgICAgICAgICAgbV9CaXRzUGVyQ29tcG9uZW50ID0gQml0c1BlckNvbXBvbmVudDsNCi0gICAgICAgICAgICBtX0NvbHVtbnMgPSBDb2x1bW5zOw0KLSAgICAgICAgICAgIG1fUHJlZGljdFBpdGNoID0gKG1fQml0c1BlckNvbXBvbmVudCAqIG1fQ29sb3JzICogbV9Db2x1bW5zICsgNykgLyA4Ow0KLSAgICAgICAgICAgIG1fcExhc3RMaW5lID0gRlhfQWxsb2MoRlhfQllURSwgbV9QcmVkaWN0UGl0Y2gpOw0KLSAgICAgICAgICAgIGlmIChtX3BMYXN0TGluZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgRlhTWVNfbWVtc2V0MzIobV9wTGFzdExpbmUsIDAsIG1fUHJlZGljdFBpdGNoKTsNCi0gICAgICAgICAgICBtX3BQcmVkaWN0UmF3ID0gRlhfQWxsb2MoRlhfQllURSwgbV9QcmVkaWN0UGl0Y2ggKyAxKTsNCi0gICAgICAgICAgICBpZiAobV9wUHJlZGljdFJhdyA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9wUHJlZGljdEJ1ZmZlciA9IEZYX0FsbG9jKEZYX0JZVEUsIG1fUHJlZGljdFBpdGNoKTsNCi0gICAgICAgICAgICBpZiAobV9wUHJlZGljdEJ1ZmZlciA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ0NvZGVjX0ZsYXRlU2NhbmxpbmVEZWNvZGVyOjp2X1Jld2luZCgpDQotew0KLSAgICBpZiAobV9wRmxhdGUpIHsNCi0gICAgICAgIEZQREZBUElfRmxhdGVFbmQobV9wRmxhdGUpOw0KLSAgICB9DQotICAgIG1fcEZsYXRlID0gRlBERkFQSV9GbGF0ZUluaXQobXlfYWxsb2NfZnVuYywgbXlfZnJlZV9mdW5jKTsNCi0gICAgaWYgKG1fcEZsYXRlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGUERGQVBJX0ZsYXRlSW5wdXQobV9wRmxhdGUsIG1fU3JjQnVmLCBtX1NyY1NpemUpOw0KLSAgICBtX0xlZnRPdmVyID0gMDsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0xQQllURSBDQ29kZWNfRmxhdGVTY2FubGluZURlY29kZXI6OnZfR2V0TmV4dExpbmUoKQ0KLXsNCi0gICAgaWYgKG1fUHJlZGljdG9yKSB7DQotICAgICAgICBpZiAobV9QaXRjaCA9PSBtX1ByZWRpY3RQaXRjaCkgew0KLSAgICAgICAgICAgIGlmIChtX1ByZWRpY3RvciA9PSAyKSB7DQotICAgICAgICAgICAgICAgIEZQREZBUElfRmxhdGVPdXRwdXQobV9wRmxhdGUsIG1fcFByZWRpY3RSYXcsIG1fUHJlZGljdFBpdGNoICsgMSk7DQotICAgICAgICAgICAgICAgIFBOR19QcmVkaWN0TGluZShtX3BTY2FubGluZSwgbV9wUHJlZGljdFJhdywgbV9wTGFzdExpbmUsIG1fQml0c1BlckNvbXBvbmVudCwgbV9Db2xvcnMsIG1fQ29sdW1ucyk7DQotICAgICAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcExhc3RMaW5lLCBtX3BTY2FubGluZSwgbV9QcmVkaWN0UGl0Y2gpOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIEZQREZBUElfRmxhdGVPdXRwdXQobV9wRmxhdGUsIG1fcFNjYW5saW5lLCBtX1BpdGNoKTsNCi0gICAgICAgICAgICAgICAgVElGRl9QcmVkaWN0TGluZShtX3BTY2FubGluZSwgbV9QcmVkaWN0UGl0Y2gsIG1fYnBjLCBtX25Db21wcywgbV9PdXRwdXRXaWR0aCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpbnQgYnl0ZXNfdG9fZ28gPSBtX1BpdGNoOw0KLSAgICAgICAgICAgIGludCByZWFkX2xlZnRvdmVyID0gbV9MZWZ0T3ZlciA+IGJ5dGVzX3RvX2dvID8gYnl0ZXNfdG9fZ28gOiBtX0xlZnRPdmVyOw0KLSAgICAgICAgICAgIGlmIChyZWFkX2xlZnRvdmVyKSB7DQotICAgICAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcFNjYW5saW5lLCBtX3BQcmVkaWN0QnVmZmVyICsgbV9QcmVkaWN0UGl0Y2ggLSBtX0xlZnRPdmVyLCByZWFkX2xlZnRvdmVyKTsNCi0gICAgICAgICAgICAgICAgbV9MZWZ0T3ZlciAtPSByZWFkX2xlZnRvdmVyOw0KLSAgICAgICAgICAgICAgICBieXRlc190b19nbyAtPSByZWFkX2xlZnRvdmVyOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB3aGlsZSAoYnl0ZXNfdG9fZ28pIHsNCi0gICAgICAgICAgICAgICAgaWYgKG1fUHJlZGljdG9yID09IDIpIHsNCi0gICAgICAgICAgICAgICAgICAgIEZQREZBUElfRmxhdGVPdXRwdXQobV9wRmxhdGUsIG1fcFByZWRpY3RSYXcsIG1fUHJlZGljdFBpdGNoICsgMSk7DQotICAgICAgICAgICAgICAgICAgICBQTkdfUHJlZGljdExpbmUobV9wUHJlZGljdEJ1ZmZlciwgbV9wUHJlZGljdFJhdywgbV9wTGFzdExpbmUsIG1fQml0c1BlckNvbXBvbmVudCwgbV9Db2xvcnMsIG1fQ29sdW1ucyk7DQotICAgICAgICAgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BMYXN0TGluZSwgbV9wUHJlZGljdEJ1ZmZlciwgbV9QcmVkaWN0UGl0Y2gpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgRlBERkFQSV9GbGF0ZU91dHB1dChtX3BGbGF0ZSwgbV9wUHJlZGljdEJ1ZmZlciwgbV9QcmVkaWN0UGl0Y2gpOw0KLSAgICAgICAgICAgICAgICAgICAgVElGRl9QcmVkaWN0TGluZShtX3BQcmVkaWN0QnVmZmVyLCBtX1ByZWRpY3RQaXRjaCwgbV9CaXRzUGVyQ29tcG9uZW50LCBtX0NvbG9ycywgbV9Db2x1bW5zKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpbnQgcmVhZF9ieXRlcyA9IG1fUHJlZGljdFBpdGNoID4gYnl0ZXNfdG9fZ28gPyBieXRlc190b19nbyA6IG1fUHJlZGljdFBpdGNoOw0KLSAgICAgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BTY2FubGluZSArIG1fUGl0Y2ggLSBieXRlc190b19nbywgbV9wUHJlZGljdEJ1ZmZlciwgcmVhZF9ieXRlcyk7DQotICAgICAgICAgICAgICAgIG1fTGVmdE92ZXIgKz0gbV9QcmVkaWN0UGl0Y2ggLSByZWFkX2J5dGVzOw0KLSAgICAgICAgICAgICAgICBieXRlc190b19nbyAtPSByZWFkX2J5dGVzOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEZQREZBUElfRmxhdGVPdXRwdXQobV9wRmxhdGUsIG1fcFNjYW5saW5lLCBtX1BpdGNoKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wU2NhbmxpbmU7DQotfQ0KLUZYX0RXT1JEIENDb2RlY19GbGF0ZVNjYW5saW5lRGVjb2Rlcjo6R2V0U3JjT2Zmc2V0KCkNCi17DQotICAgIHJldHVybiBGUERGQVBJX0ZsYXRlR2V0VG90YWxJbihtX3BGbGF0ZSk7DQotfQ0KLXN0YXRpYyB2b2lkIEZsYXRlVW5jb21wcmVzcyhGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBGWF9EV09SRCBvcmlnX3NpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUsIEZYX0RXT1JEJiBvZmZzZXQpDQotew0KLSAgICBGWF9EV09SRCBndWVzc19zaXplID0gb3JpZ19zaXplID8gb3JpZ19zaXplIDogc3JjX3NpemUgKiAyOw0KLSAgICBGWF9EV09SRCBhbGxvY19zdGVwID0gb3JpZ19zaXplID8gMTAyNDAgOiAoc3JjX3NpemUgPCAxMDI0MCA/IDEwMjQwIDogc3JjX3NpemUpOw0KLSAgICBzdGF0aWMgY29uc3QgRlhfRFdPUkQga01heEluaXRpYWxBbGxvY1NpemUgPSAxMDAwMDAwMDsNCi0gICAgaWYgKGd1ZXNzX3NpemUgPiBrTWF4SW5pdGlhbEFsbG9jU2l6ZSkgew0KLSAgICAgICAgZ3Vlc3Nfc2l6ZSA9IGtNYXhJbml0aWFsQWxsb2NTaXplOw0KLSAgICAgICAgYWxsb2Nfc3RlcCA9IGtNYXhJbml0aWFsQWxsb2NTaXplOw0KLSAgICB9DQotICAgIEZYX0xQQllURSBndWVzc19idWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBndWVzc19zaXplICsgMSk7DQotICAgIGlmICghZ3Vlc3NfYnVmKSB7DQotICAgICAgICBkZXN0X2J1ZiA9IE5VTEw7DQotICAgICAgICBkZXN0X3NpemUgPSAwOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGd1ZXNzX2J1ZltndWVzc19zaXplXSA9ICdcMCc7DQotICAgIEZYX0JPT0wgdXNlT2xkSW1wbCA9IHNyY19zaXplIDwgMTAyNDA7DQotICAgIHZvaWQqIGNvbnRleHQgPSBGUERGQVBJX0ZsYXRlSW5pdChteV9hbGxvY19mdW5jLCBteV9mcmVlX2Z1bmMpOw0KLSAgICBpZiAoY29udGV4dCA9PSBOVUxMKSB7DQotICAgICAgICBkZXN0X2J1ZiA9IE5VTEw7DQotICAgICAgICBkZXN0X3NpemUgPSAwOw0KLSAgICAgICAgcmV0dXJuIDsNCi0gICAgfQ0KLSAgICBGUERGQVBJX0ZsYXRlSW5wdXQoY29udGV4dCwgc3JjX2J1Ziwgc3JjX3NpemUpOw0KLSAgICBDRlhfQXJyYXlUZW1wbGF0ZTxGWF9MUEJZVEU+IHJlc3VsdF90bXBfYnVmczsNCi0gICAgRlhfTFBCWVRFIGJ1ZiA9IGd1ZXNzX2J1ZjsNCi0gICAgRlhfRFdPUkQgYnVmX3NpemUgPSBndWVzc19zaXplOw0KLSAgICBGWF9EV09SRCBsYXN0X2J1Zl9zaXplID0gYnVmX3NpemU7DQotICAgIHdoaWxlICgxKSB7DQotICAgICAgICBGWF9JTlQzMiByZXQgPSBGUERGQVBJX0ZsYXRlT3V0cHV0KGNvbnRleHQsIGJ1ZiwgYnVmX3NpemUpOw0KLSAgICAgICAgRlhfSU5UMzIgYXZhaWxfYnVmX3NpemUgPSBGUERGQVBJX0ZsYXRlR2V0QXZhaWxPdXQoY29udGV4dCk7DQotICAgICAgICBpZiAoIXVzZU9sZEltcGwpIHsNCi0gICAgICAgICAgICBpZiAocmV0ICE9IFpfT0spIHsNCi0gICAgICAgICAgICAgICAgbGFzdF9idWZfc2l6ZSA9IGJ1Zl9zaXplIC0gYXZhaWxfYnVmX3NpemU7DQotICAgICAgICAgICAgICAgIHJlc3VsdF90bXBfYnVmcy5BZGQoYnVmKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChhdmFpbF9idWZfc2l6ZSA9PSAwKSB7DQotICAgICAgICAgICAgICAgIHJlc3VsdF90bXBfYnVmcy5BZGQoYnVmKTsNCi0gICAgICAgICAgICAgICAgYnVmID0gTlVMTDsNCi0gICAgICAgICAgICAgICAgYnVmID0gRlhfQWxsb2MoRlhfQllURSwgYnVmX3NpemUgKyAxKTsNCi0gICAgICAgICAgICAgICAgaWYgKCFidWYpIHsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3RfYnVmID0gTlVMTDsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3Rfc2l6ZSA9IDA7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYnVmW2J1Zl9zaXplXSA9ICdcMCc7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgbGFzdF9idWZfc2l6ZSA9IGJ1Zl9zaXplIC0gYXZhaWxfYnVmX3NpemU7DQotICAgICAgICAgICAgICAgIHJlc3VsdF90bXBfYnVmcy5BZGQoYnVmKTsNCi0gICAgICAgICAgICAgICAgYnVmID0gTlVMTDsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAocmV0ICE9IFpfT0spIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChhdmFpbF9idWZfc2l6ZSA9PSAwKSB7DQotICAgICAgICAgICAgICAgIEZYX0RXT1JEIG9sZF9zaXplID0gZ3Vlc3Nfc2l6ZTsNCi0gICAgICAgICAgICAgICAgZ3Vlc3Nfc2l6ZSArPSBhbGxvY19zdGVwOw0KLSAgICAgICAgICAgICAgICBpZiAoZ3Vlc3Nfc2l6ZSA8IG9sZF9zaXplIHx8IGd1ZXNzX3NpemUgKyAxIDwgZ3Vlc3Nfc2l6ZSkgew0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9idWYgPSBOVUxMOw0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zaXplID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBndWVzc19idWYgPSBGWF9SZWFsbG9jKEZYX0JZVEUsIGd1ZXNzX2J1ZiwgZ3Vlc3Nfc2l6ZSArIDEpOw0KLSAgICAgICAgICAgICAgICBpZiAoIWd1ZXNzX2J1Zikgew0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9idWYgPSBOVUxMOw0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zaXplID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBndWVzc19idWZbZ3Vlc3Nfc2l6ZV0gPSAnXDAnOw0KLSAgICAgICAgICAgICAgICBidWYgPSBndWVzc19idWYgKyBvbGRfc2l6ZTsNCi0gICAgICAgICAgICAgICAgYnVmX3NpemUgPSBndWVzc19zaXplIC0gb2xkX3NpemU7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGRlc3Rfc2l6ZSA9IEZQREZBUElfRmxhdGVHZXRUb3RhbE91dChjb250ZXh0KTsNCi0gICAgb2Zmc2V0ID0gRlBERkFQSV9GbGF0ZUdldFRvdGFsSW4oY29udGV4dCk7DQotICAgIGlmICghdXNlT2xkSW1wbCkgew0KLSAgICAgICAgaWYgKHJlc3VsdF90bXBfYnVmcy5HZXRTaXplKCkgPT0gMSkgew0KLSAgICAgICAgICAgIGRlc3RfYnVmID0gcmVzdWx0X3RtcF9idWZzWzBdOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBGWF9MUEJZVEUgcmVzdWx0X2J1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIGRlc3Rfc2l6ZSk7DQotICAgICAgICAgICAgaWYgKCFyZXN1bHRfYnVmKSB7DQotICAgICAgICAgICAgICAgIGRlc3RfYnVmID0gTlVMTDsNCi0gICAgICAgICAgICAgICAgZGVzdF9zaXplID0gMDsNCi0gICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9EV09SRCByZXN1bHRfcG9zID0gMDsNCi0gICAgICAgICAgICBmb3IgKEZYX0lOVDMyIGkgPSAwOyBpIDwgcmVzdWx0X3RtcF9idWZzLkdldFNpemUoKTsgaSsrKSB7DQotICAgICAgICAgICAgICAgIEZYX0xQQllURSB0bXBfYnVmID0gcmVzdWx0X3RtcF9idWZzW2ldOw0KLSAgICAgICAgICAgICAgICBGWF9EV09SRCB0bXBfYnVmX3NpemUgPSBidWZfc2l6ZTsNCi0gICAgICAgICAgICAgICAgaWYgKGkgPT0gcmVzdWx0X3RtcF9idWZzLkdldFNpemUoKSAtIDEpIHsNCi0gICAgICAgICAgICAgICAgICAgIHRtcF9idWZfc2l6ZSA9IGxhc3RfYnVmX3NpemU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIocmVzdWx0X2J1ZiArIHJlc3VsdF9wb3MsIHRtcF9idWYsIHRtcF9idWZfc2l6ZSk7DQotICAgICAgICAgICAgICAgIHJlc3VsdF9wb3MgKz0gdG1wX2J1Zl9zaXplOw0KLSAgICAgICAgICAgICAgICBGWF9GcmVlKHRtcF9idWYpOw0KLSAgICAgICAgICAgICAgICB0bXBfYnVmID0gTlVMTDsNCi0gICAgICAgICAgICAgICAgcmVzdWx0X3RtcF9idWZzW2ldID0gTlVMTDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZGVzdF9idWYgPSByZXN1bHRfYnVmOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYgKGd1ZXNzX3NpemUgLyAyID4gZGVzdF9zaXplKSB7DQotICAgICAgICAgICAgZ3Vlc3NfYnVmID0gRlhfUmVhbGxvYyhGWF9CWVRFLCBndWVzc19idWYsIGRlc3Rfc2l6ZSArIDEpOw0KLSAgICAgICAgICAgIGlmICghZ3Vlc3NfYnVmKSB7DQotICAgICAgICAgICAgICAgIGRlc3RfYnVmID0gTlVMTDsNCi0gICAgICAgICAgICAgICAgZGVzdF9zaXplID0gMDsNCi0gICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBndWVzc19zaXplID0gZGVzdF9zaXplOw0KLSAgICAgICAgICAgIGd1ZXNzX2J1ZltndWVzc19zaXplXSA9ICdcMCc7DQotICAgICAgICB9DQotICAgICAgICBkZXN0X2J1ZiA9IGd1ZXNzX2J1ZjsNCi0gICAgfQ0KLSAgICBGUERGQVBJX0ZsYXRlRW5kKGNvbnRleHQpOw0KLSAgICBjb250ZXh0ID0gTlVMTDsNCi19DQotSUNvZGVjX1NjYW5saW5lRGVjb2RlcioJQ0NvZGVjX0ZsYXRlTW9kdWxlOjpDcmVhdGVEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwNCi0gICAgICAgIGludCBuQ29tcHMsIGludCBicGMsIGludCBwcmVkaWN0b3IsIGludCBDb2xvcnMsIGludCBCaXRzUGVyQ29tcG9uZW50LCBpbnQgQ29sdW1ucykNCi17DQotICAgIENDb2RlY19GbGF0ZVNjYW5saW5lRGVjb2RlciogcERlY29kZXIgPSBGWF9ORVcgQ0NvZGVjX0ZsYXRlU2NhbmxpbmVEZWNvZGVyOw0KLSAgICBpZiAocERlY29kZXIgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcERlY29kZXItPkNyZWF0ZShzcmNfYnVmLCBzcmNfc2l6ZSwgd2lkdGgsIGhlaWdodCwgbkNvbXBzLCBicGMsIHByZWRpY3RvciwgQ29sb3JzLCBCaXRzUGVyQ29tcG9uZW50LCBDb2x1bW5zKTsNCi0gICAgcmV0dXJuIHBEZWNvZGVyOw0KLX0NCi1GWF9EV09SRCBDQ29kZWNfRmxhdGVNb2R1bGU6OkZsYXRlT3JMWldEZWNvZGUoRlhfQk9PTCBiTFpXLCBjb25zdCBGWF9CWVRFKiBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgRlhfQk9PTCBiRWFybHlDaGFuZ2UsDQotICAgICAgICBpbnQgcHJlZGljdG9yLCBpbnQgQ29sb3JzLCBpbnQgQml0c1BlckNvbXBvbmVudCwgaW50IENvbHVtbnMsDQotICAgICAgICBGWF9EV09SRCBlc3RpbWF0ZWRfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkNCi17DQotICAgIENMWldEZWNvZGVyKiBwRGVjb2RlciA9IE5VTEw7DQotICAgIGRlc3RfYnVmID0gTlVMTDsNCi0gICAgRlhfRFdPUkQgb2Zmc2V0ID0gMDsNCi0gICAgaW50IHByZWRpY3Rvcl90eXBlID0gMDsNCi0gICAgaWYgKHByZWRpY3Rvcikgew0KLSAgICAgICAgaWYgKHByZWRpY3RvciA+PSAxMCkgew0KLSAgICAgICAgICAgIHByZWRpY3Rvcl90eXBlID0gMjsNCi0gICAgICAgIH0gZWxzZSBpZiAocHJlZGljdG9yID09IDIpIHsNCi0gICAgICAgICAgICBwcmVkaWN0b3JfdHlwZSA9IDE7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKGJMWlcpIHsNCi0gICAgICAgIHBEZWNvZGVyID0gRlhfTkVXIENMWldEZWNvZGVyOw0KLSAgICAgICAgaWYgKHBEZWNvZGVyID09IE5VTEwpIHsNCi0gICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICB9DQotICAgICAgICBkZXN0X3NpemUgPSAoRlhfRFdPUkQpIC0gMTsNCi0gICAgICAgIG9mZnNldCA9IHNyY19zaXplOw0KLSAgICAgICAgaW50IGVyciA9IHBEZWNvZGVyLT5EZWNvZGUoTlVMTCwgZGVzdF9zaXplLCBzcmNfYnVmLCBvZmZzZXQsIGJFYXJseUNoYW5nZSk7DQotICAgICAgICBkZWxldGUgcERlY29kZXI7DQotICAgICAgICBpZiAoZXJyIHx8IGRlc3Rfc2l6ZSA9PSAwIHx8IGRlc3Rfc2l6ZSArIDEgPCBkZXN0X3NpemUpIHsNCi0gICAgICAgICAgICByZXR1cm4gKEZYX0RXT1JEKSAtIDE7DQotICAgICAgICB9DQotICAgICAgICBwRGVjb2RlciA9IEZYX05FVyBDTFpXRGVjb2RlcjsNCi0gICAgICAgIGlmIChwRGVjb2RlciA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdF9idWYgPSBGWF9BbGxvYyggRlhfQllURSwgZGVzdF9zaXplICsgMSk7DQotICAgICAgICBpZiAoZGVzdF9idWYgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGRlc3RfYnVmW2Rlc3Rfc2l6ZV0gPSAnXDAnOw0KLSAgICAgICAgcERlY29kZXItPkRlY29kZShkZXN0X2J1ZiwgZGVzdF9zaXplLCBzcmNfYnVmLCBvZmZzZXQsIGJFYXJseUNoYW5nZSk7DQotICAgICAgICBkZWxldGUgcERlY29kZXI7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBGbGF0ZVVuY29tcHJlc3Moc3JjX2J1Ziwgc3JjX3NpemUsIGVzdGltYXRlZF9zaXplLCBkZXN0X2J1ZiwgZGVzdF9zaXplLCBvZmZzZXQpOw0KLSAgICB9DQotICAgIGlmIChwcmVkaWN0b3JfdHlwZSA9PSAwKSB7DQotICAgICAgICByZXR1cm4gb2Zmc2V0Ow0KLSAgICB9DQotICAgIGlmIChwcmVkaWN0b3JfdHlwZSA9PSAyKSB7DQotICAgICAgICBQTkdfUHJlZGljdG9yKGRlc3RfYnVmLCBkZXN0X3NpemUsIENvbG9ycywgQml0c1BlckNvbXBvbmVudCwgQ29sdW1ucyk7DQotICAgIH0gZWxzZSBpZiAocHJlZGljdG9yX3R5cGUgPT0gMSkgew0KLSAgICAgICAgVElGRl9QcmVkaWN0b3IoZGVzdF9idWYsIGRlc3Rfc2l6ZSwgQ29sb3JzLCBCaXRzUGVyQ29tcG9uZW50LCBDb2x1bW5zKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gb2Zmc2V0Ow0KLX0NCi1GWF9CT09MIENDb2RlY19GbGF0ZU1vZHVsZTo6RW5jb2RlKGNvbnN0IEZYX0JZVEUqIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWRpY3RvciwgaW50IENvbG9ycywgaW50IEJpdHNQZXJDb21wb25lbnQsIGludCBDb2x1bW5zLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkNCi17DQotICAgIGlmIChwcmVkaWN0b3IgIT0gMiAmJiBwcmVkaWN0b3IgPCAxMCkgew0KLSAgICAgICAgcmV0dXJuIEVuY29kZShzcmNfYnVmLCBzcmNfc2l6ZSwgZGVzdF9idWYsIGRlc3Rfc2l6ZSk7DQotICAgIH0NCi0gICAgRlhfQk9PTCByZXQgPSBGQUxTRTsNCi0gICAgRlhfTFBCWVRFIHBTcmNCdWYgPSBOVUxMOw0KLSAgICBwU3JjQnVmID0gRlhfQWxsb2MoRlhfQllURSwgc3JjX3NpemUpOw0KLSAgICBpZiAocFNyY0J1ZiA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgRlhTWVNfbWVtY3B5MzIocFNyY0J1Ziwgc3JjX2J1Ziwgc3JjX3NpemUpOw0KLSAgICBpZiAocHJlZGljdG9yID09IDIpIHsNCi0gICAgICAgIFRJRkZfUHJlZGljdG9yRW5jb2RlKHBTcmNCdWYsIHNyY19zaXplLCBDb2xvcnMsIEJpdHNQZXJDb21wb25lbnQsIENvbHVtbnMpOw0KLSAgICB9IGVsc2UgaWYgKHByZWRpY3RvciA+PSAxMCkgew0KLSAgICAgICAgUE5HX1ByZWRpY3RvckVuY29kZShwU3JjQnVmLCBzcmNfc2l6ZSwgcHJlZGljdG9yLCBDb2xvcnMsIEJpdHNQZXJDb21wb25lbnQsIENvbHVtbnMpOw0KLSAgICB9DQotICAgIHJldCA9IEVuY29kZShwU3JjQnVmLCBzcmNfc2l6ZSwgZGVzdF9idWYsIGRlc3Rfc2l6ZSk7DQotICAgIEZYX0ZyZWUocFNyY0J1Zik7DQotICAgIHJldHVybiByZXQ7DQotfQ0KLUZYX0JPT0wgQ0NvZGVjX0ZsYXRlTW9kdWxlOjpFbmNvZGUoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkNCi17DQotICAgIGRlc3Rfc2l6ZSA9IHNyY19zaXplICsgc3JjX3NpemUgLyAxMDAwICsgMTI7DQotICAgIGRlc3RfYnVmID0gRlhfQWxsb2MoIEZYX0JZVEUsIGRlc3Rfc2l6ZSk7DQotICAgIGlmIChkZXN0X2J1ZiA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgdW5zaWduZWQgbG9uZyB0ZW1wX3NpemUgPSBkZXN0X3NpemU7DQotICAgIEZQREZBUElfRmxhdGVDb21wcmVzcyhkZXN0X2J1ZiwgJnRlbXBfc2l6ZSwgc3JjX2J1Ziwgc3JjX3NpemUpOw0KLSAgICBkZXN0X3NpemUgPSAoRlhfRFdPUkQpdGVtcF9zaXplOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2Z4X3psaWIuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaCIKKyNpbmNsdWRlICJjb2RlY19pbnQuaCIKK2V4dGVybiAiQyIKK3sKKyAgICBzdGF0aWMgdm9pZCogbXlfYWxsb2NfZnVuYyAodm9pZCogb3BhcXVlLCB1bnNpZ25lZCBpbnQgaXRlbXMsIHVuc2lnbmVkIGludCBzaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZYX0FsbG9jKEZYX0JZVEUsIGl0ZW1zICogc2l6ZSk7CisgICAgfQorICAgIHN0YXRpYyB2b2lkICAgbXlfZnJlZV9mdW5jICAodm9pZCogb3BhcXVlLCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgRlhfRnJlZShhZGRyZXNzKTsKKyAgICB9CisgICAgdm9pZCogRlBERkFQSV9GbGF0ZUluaXQodm9pZCogKCphbGxvY19mdW5jKSh2b2lkKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpmcmVlX2Z1bmMpKHZvaWQqLCB2b2lkKikpCisgICAgeworICAgICAgICB6X3N0cmVhbSogcCA9ICh6X3N0cmVhbSopYWxsb2NfZnVuYygwLCAxLCBzaXplb2Yoel9zdHJlYW0pKTsKKyAgICAgICAgaWYgKHAgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgRlhTWVNfbWVtc2V0MzIocCwgMCwgc2l6ZW9mKHpfc3RyZWFtKSk7CisgICAgICAgIHAtPnphbGxvYyA9IGFsbG9jX2Z1bmM7CisgICAgICAgIHAtPnpmcmVlID0gZnJlZV9mdW5jOworICAgICAgICBpbmZsYXRlSW5pdChwKTsKKyAgICAgICAgcmV0dXJuIHA7CisgICAgfQorICAgIHZvaWQgRlBERkFQSV9GbGF0ZUlucHV0KHZvaWQqIGNvbnRleHQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyY19idWYsIHVuc2lnbmVkIGludCBzcmNfc2l6ZSkKKyAgICB7CisgICAgICAgICgoel9zdHJlYW0qKWNvbnRleHQpLT5uZXh0X2luID0gKHVuc2lnbmVkIGNoYXIqKXNyY19idWY7CisgICAgICAgICgoel9zdHJlYW0qKWNvbnRleHQpLT5hdmFpbF9pbiA9IHNyY19zaXplOworICAgIH0KKyAgICBpbnQgRlBERkFQSV9GbGF0ZUdldFRvdGFsT3V0KHZvaWQqIGNvbnRleHQpCisgICAgeworICAgICAgICByZXR1cm4gKCh6X3N0cmVhbSopY29udGV4dCktPnRvdGFsX291dDsKKyAgICB9CisgICAgaW50IEZQREZBUElfRmxhdGVPdXRwdXQodm9pZCogY29udGV4dCwgdW5zaWduZWQgY2hhciogZGVzdF9idWYsIHVuc2lnbmVkIGludCBkZXN0X3NpemUpCisgICAgeworICAgICAgICAoKHpfc3RyZWFtKiljb250ZXh0KS0+bmV4dF9vdXQgPSBkZXN0X2J1ZjsKKyAgICAgICAgKCh6X3N0cmVhbSopY29udGV4dCktPmF2YWlsX291dCA9IGRlc3Rfc2l6ZTsKKyAgICAgICAgdW5zaWduZWQgaW50IHByZV9wb3MgPSAodW5zaWduZWQgaW50KUZQREZBUElfRmxhdGVHZXRUb3RhbE91dChjb250ZXh0KTsKKyAgICAgICAgaW50IHJldCA9IGluZmxhdGUoKHpfc3RyZWFtKiljb250ZXh0LCBaX1NZTkNfRkxVU0gpOworICAgICAgICB1bnNpZ25lZCBpbnQgcG9zdF9wb3MgPSAodW5zaWduZWQgaW50KUZQREZBUElfRmxhdGVHZXRUb3RhbE91dChjb250ZXh0KTsKKyAgICAgICAgdW5zaWduZWQgaW50IHdyaXR0ZW4gPSBwb3N0X3BvcyAtIHByZV9wb3M7CisgICAgICAgIGlmICh3cml0dGVuIDwgZGVzdF9zaXplKSB7CisgICAgICAgICAgICBGWFNZU19tZW1zZXQ4KGRlc3RfYnVmICsgd3JpdHRlbiwgJ1wwJywgZGVzdF9zaXplIC0gd3JpdHRlbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisgICAgaW50IEZQREZBUElfRmxhdGVHZXRUb3RhbEluKHZvaWQqIGNvbnRleHQpCisgICAgeworICAgICAgICByZXR1cm4gKCh6X3N0cmVhbSopY29udGV4dCktPnRvdGFsX2luOworICAgIH0KKyAgICBpbnQgRlBERkFQSV9GbGF0ZUdldEF2YWlsT3V0KHZvaWQqIGNvbnRleHQpCisgICAgeworICAgICAgICByZXR1cm4gKCh6X3N0cmVhbSopY29udGV4dCktPmF2YWlsX291dDsKKyAgICB9CisgICAgaW50IEZQREZBUElfRmxhdGVHZXRBdmFpbEluKHZvaWQqIGNvbnRleHQpCisgICAgeworICAgICAgICByZXR1cm4gKCh6X3N0cmVhbSopY29udGV4dCktPmF2YWlsX2luOworICAgIH0KKyAgICB2b2lkIEZQREZBUElfRmxhdGVFbmQodm9pZCogY29udGV4dCkKKyAgICB7CisgICAgICAgIGluZmxhdGVFbmQoKHpfc3RyZWFtKiljb250ZXh0KTsKKyAgICAgICAgKCh6X3N0cmVhbSopY29udGV4dCktPnpmcmVlKDAsIGNvbnRleHQpOworICAgIH0KKyAgICB2b2lkIEZQREZBUElfRmxhdGVDb21wcmVzcyh1bnNpZ25lZCBjaGFyKiBkZXN0X2J1ZiwgdW5zaWduZWQgbG9uZyogZGVzdF9zaXplLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmNfYnVmLCB1bnNpZ25lZCBsb25nIHNyY19zaXplKQorICAgIHsKKyAgICAgICAgY29tcHJlc3MoZGVzdF9idWYsIGRlc3Rfc2l6ZSwgc3JjX2J1Ziwgc3JjX3NpemUpOworICAgIH0KK30KK2NsYXNzIENMWldEZWNvZGVyIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBGWF9CT09MIERlY29kZShGWF9MUEJZVEUgb3V0cHV0LCBGWF9EV09SRCYgb3V0bGVuLCBjb25zdCBGWF9CWVRFKiBpbnB1dCwgRlhfRFdPUkQmIHNpemUsIEZYX0JPT0wgYkVhcmx5Q2hhbmdlKTsKK3ByaXZhdGU6CisgICAgRlhfRFdPUkQJbV9JblBvczsKKyAgICBGWF9EV09SRAltX091dFBvczsKKyAgICBGWF9MUEJZVEUJbV9wT3V0cHV0OworICAgIGNvbnN0IEZYX0JZVEUqCW1fcElucHV0OworICAgIEZYX0JPT0wJCW1fRWFybHk7CisgICAgdm9pZAkJQWRkQ29kZShGWF9EV09SRCBwcmVmaXhfY29kZSwgRlhfQllURSBhcHBlbmRfY2hhcik7CisgICAgRlhfRFdPUkQJbV9Db2RlQXJyYXlbNTAyMV07CisgICAgRlhfRFdPUkQJbV9uQ29kZXM7CisgICAgRlhfQllURQkJbV9EZWNvZGVTdGFja1s0MDAwXTsKKyAgICBGWF9EV09SRAltX1N0YWNrTGVuOworICAgIHZvaWQJCURlY29kZVN0cmluZyhGWF9EV09SRCBjb2RlKTsKKyAgICBpbnQJCQltX0NvZGVMZW47Cit9Owordm9pZCBDTFpXRGVjb2Rlcjo6QWRkQ29kZShGWF9EV09SRCBwcmVmaXhfY29kZSwgRlhfQllURSBhcHBlbmRfY2hhcikKK3sKKyAgICBpZiAobV9uQ29kZXMgKyBtX0Vhcmx5ID09IDQwOTQpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX0NvZGVBcnJheVttX25Db2RlcyArK10gPSAocHJlZml4X2NvZGUgPDwgMTYpIHwgYXBwZW5kX2NoYXI7CisgICAgaWYgKG1fbkNvZGVzICsgbV9FYXJseSA9PSA1MTIgLSAyNTgpIHsKKyAgICAgICAgbV9Db2RlTGVuID0gMTA7CisgICAgfSBlbHNlIGlmIChtX25Db2RlcyArIG1fRWFybHkgPT0gMTAyNCAtIDI1OCkgeworICAgICAgICBtX0NvZGVMZW4gPSAxMTsKKyAgICB9IGVsc2UgaWYgKG1fbkNvZGVzICsgbV9FYXJseSA9PSAyMDQ4IC0gMjU4KSB7CisgICAgICAgIG1fQ29kZUxlbiA9IDEyOworICAgIH0KK30KK3ZvaWQgQ0xaV0RlY29kZXI6OkRlY29kZVN0cmluZyhGWF9EV09SRCBjb2RlKQoreworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGludCBpbmRleCA9IGNvZGUgLSAyNTg7CisgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gKGludCltX25Db2RlcykgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgRlhfRFdPUkQgZGF0YSA9IG1fQ29kZUFycmF5W2luZGV4XTsKKyAgICAgICAgaWYgKG1fU3RhY2tMZW4gPj0gc2l6ZW9mKG1fRGVjb2RlU3RhY2spKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9EZWNvZGVTdGFja1ttX1N0YWNrTGVuKytdID0gKEZYX0JZVEUpZGF0YTsKKyAgICAgICAgY29kZSA9IGRhdGEgPj4gMTY7CisgICAgfQorICAgIGlmIChtX1N0YWNrTGVuID49IHNpemVvZihtX0RlY29kZVN0YWNrKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fRGVjb2RlU3RhY2tbbV9TdGFja0xlbisrXSA9IChGWF9CWVRFKWNvZGU7Cit9CitpbnQgQ0xaV0RlY29kZXI6OkRlY29kZShGWF9MUEJZVEUgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUsIGNvbnN0IEZYX0JZVEUqIHNyY19idWYsIEZYX0RXT1JEJiBzcmNfc2l6ZSwgRlhfQk9PTCBiRWFybHlDaGFuZ2UpCit7CisgICAgbV9Db2RlTGVuID0gOTsKKyAgICBtX0luUG9zID0gMDsKKyAgICBtX091dFBvcyA9IDA7CisgICAgbV9wSW5wdXQgPSBzcmNfYnVmOworICAgIG1fcE91dHB1dCA9IGRlc3RfYnVmOworICAgIG1fRWFybHkgPSBiRWFybHlDaGFuZ2UgPyAxIDogMDsKKyAgICBtX25Db2RlcyA9IDA7CisgICAgRlhfRFdPUkQgb2xkX2NvZGUgPSAoRlhfRFdPUkQpIC0gMTsKKyAgICBGWF9CWVRFIGxhc3RfY2hhcjsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAobV9JblBvcyArIG1fQ29kZUxlbiA+IHNyY19zaXplICogOCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaW50IGJ5dGVfcG9zID0gbV9JblBvcyAvIDg7CisgICAgICAgIGludCBiaXRfcG9zID0gbV9JblBvcyAlIDgsIGJpdF9sZWZ0ID0gbV9Db2RlTGVuOworICAgICAgICBGWF9EV09SRCBjb2RlID0gMDsKKyAgICAgICAgaWYgKGJpdF9wb3MpIHsKKyAgICAgICAgICAgIGJpdF9sZWZ0IC09IDggLSBiaXRfcG9zOworICAgICAgICAgICAgY29kZSA9IChtX3BJbnB1dFtieXRlX3BvcysrXSAmICgoMSA8PCAoOCAtIGJpdF9wb3MpKSAtIDEpKSA8PCBiaXRfbGVmdDsKKyAgICAgICAgfQorICAgICAgICBpZiAoYml0X2xlZnQgPCA4KSB7CisgICAgICAgICAgICBjb2RlIHw9IG1fcElucHV0W2J5dGVfcG9zXSA+PiAoOCAtIGJpdF9sZWZ0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJpdF9sZWZ0IC09IDg7CisgICAgICAgICAgICBjb2RlIHw9IG1fcElucHV0W2J5dGVfcG9zKytdIDw8IGJpdF9sZWZ0OworICAgICAgICAgICAgaWYgKGJpdF9sZWZ0KSB7CisgICAgICAgICAgICAgICAgY29kZSB8PSBtX3BJbnB1dFtieXRlX3Bvc10gPj4gKDggLSBiaXRfbGVmdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9JblBvcyArPSBtX0NvZGVMZW47CisgICAgICAgIGlmIChjb2RlIDwgMjU2KSB7CisgICAgICAgICAgICBpZiAobV9PdXRQb3MgPT0gZGVzdF9zaXplKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC01OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fcE91dHB1dCkgeworICAgICAgICAgICAgICAgIG1fcE91dHB1dFttX091dFBvc10gPSAoRlhfQllURSljb2RlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9PdXRQb3MgKys7CisgICAgICAgICAgICBsYXN0X2NoYXIgPSAoRlhfQllURSljb2RlOworICAgICAgICAgICAgaWYgKG9sZF9jb2RlICE9IChGWF9EV09SRCkgLSAxKSB7CisgICAgICAgICAgICAgICAgQWRkQ29kZShvbGRfY29kZSwgbGFzdF9jaGFyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9sZF9jb2RlID0gY29kZTsKKyAgICAgICAgfSBlbHNlIGlmIChjb2RlID09IDI1NikgeworICAgICAgICAgICAgbV9Db2RlTGVuID0gOTsKKyAgICAgICAgICAgIG1fbkNvZGVzID0gMDsKKyAgICAgICAgICAgIG9sZF9jb2RlID0gKEZYX0RXT1JEKSAtIDE7CisgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSAyNTcpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG9sZF9jb2RlID09IChGWF9EV09SRCkgLSAxKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX1N0YWNrTGVuID0gMDsKKyAgICAgICAgICAgIGlmIChjb2RlID49IG1fbkNvZGVzICsgMjU4KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fU3RhY2tMZW4gPCBzaXplb2YobV9EZWNvZGVTdGFjaykpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9EZWNvZGVTdGFja1ttX1N0YWNrTGVuKytdID0gbGFzdF9jaGFyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBEZWNvZGVTdHJpbmcob2xkX2NvZGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBEZWNvZGVTdHJpbmcoY29kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9PdXRQb3MgKyBtX1N0YWNrTGVuID4gZGVzdF9zaXplKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC01OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fcE91dHB1dCkgeworICAgICAgICAgICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBtX1N0YWNrTGVuOyBpICsrKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcE91dHB1dFttX091dFBvcyArIGldID0gbV9EZWNvZGVTdGFja1ttX1N0YWNrTGVuIC0gaSAtIDFdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fT3V0UG9zICs9IG1fU3RhY2tMZW47CisgICAgICAgICAgICBsYXN0X2NoYXIgPSBtX0RlY29kZVN0YWNrW21fU3RhY2tMZW4gLSAxXTsKKyAgICAgICAgICAgIGlmIChvbGRfY29kZSA8IDI1NikgeworICAgICAgICAgICAgICAgIEFkZENvZGUob2xkX2NvZGUsIGxhc3RfY2hhcik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG9sZF9jb2RlIC0gMjU4ID49IG1fbkNvZGVzKSB7CisgICAgICAgICAgICAgICAgZGVzdF9zaXplID0gbV9PdXRQb3M7CisgICAgICAgICAgICAgICAgc3JjX3NpemUgPSAobV9JblBvcyArIDcpIC8gODsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQWRkQ29kZShvbGRfY29kZSwgbGFzdF9jaGFyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9sZF9jb2RlID0gY29kZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBkZXN0X3NpemUgPSBtX091dFBvczsKKyAgICBzcmNfc2l6ZSA9IChtX0luUG9zICsgNykgLyA4OworICAgIHJldHVybiAwOworfQorc3RhdGljIEZYX0JZVEUgUGFldGhQcmVkaWN0b3IoaW50IGEsIGludCBiLCBpbnQgYykKK3sKKyAgICBpbnQgcCA9IGEgKyBiIC0gYzsKKyAgICBpbnQgcGEgPSBGWFNZU19hYnMocCAtIGEpOworICAgIGludCBwYiA9IEZYU1lTX2FicyhwIC0gYik7CisgICAgaW50IHBjID0gRlhTWVNfYWJzKHAgLSBjKTsKKyAgICBpZiAocGEgPD0gcGIgJiYgcGEgPD0gcGMpIHsKKyAgICAgICAgcmV0dXJuIChGWF9CWVRFKWE7CisgICAgfQorICAgIGlmIChwYiA8PSBwYykgeworICAgICAgICByZXR1cm4gKEZYX0JZVEUpYjsKKyAgICB9CisgICAgcmV0dXJuIChGWF9CWVRFKWM7Cit9CitzdGF0aWMgdm9pZCBQTkdfUHJlZGljdG9yRW5jb2RlKEZYX0xQQllURSYgZGF0YV9idWYsIEZYX0RXT1JEJiBkYXRhX3NpemUsIGludCBwcmVkaWN0b3IsIGludCBDb2xvcnMsIGludCBCaXRzUGVyQ29tcG9uZW50LCBpbnQgQ29sdW1ucykKK3sKKyAgICBpbnQgQnl0ZXNQZXJQaXhlbCA9IChDb2xvcnMgKiBCaXRzUGVyQ29tcG9uZW50ICsgNykgLyA4OworICAgIGludCByb3dfc2l6ZSA9IChDb2xvcnMgKiBCaXRzUGVyQ29tcG9uZW50ICogQ29sdW1ucyArIDcpIC8gODsKKyAgICBpbnQgcm93X2NvdW50ID0gKGRhdGFfc2l6ZSArIHJvd19zaXplIC0gMSkgLyByb3dfc2l6ZTsKKyAgICBpbnQgbGFzdF9yb3dfc2l6ZSA9IGRhdGFfc2l6ZSAlIHJvd19zaXplOworICAgIEZYX0xQQllURSBkZXN0X2J1ZiA9IEZYX0FsbG9jKCBGWF9CWVRFLCAocm93X3NpemUgKyAxKSAqIHJvd19jb3VudCk7CisgICAgaWYgKGRlc3RfYnVmID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgYnl0ZV9jbnQgPSAwOworICAgIEZYX0xQQllURSBwU3JjRGF0YSA9IGRhdGFfYnVmOworICAgIEZYX0xQQllURSBwRGVzdERhdGEgPSBkZXN0X2J1ZjsKKyAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCByb3dfY291bnQ7IHJvdysrKSB7CisgICAgICAgIGlmIChwcmVkaWN0b3IgPT0gMTApIHsKKyAgICAgICAgICAgIHBEZXN0RGF0YVswXSA9IDA7CisgICAgICAgICAgICBpbnQgbW92ZV9zaXplID0gcm93X3NpemU7CisgICAgICAgICAgICBpZiAobW92ZV9zaXplICogKHJvdyArIDEpID4gKGludClkYXRhX3NpemUpIHsKKyAgICAgICAgICAgICAgICBtb3ZlX3NpemUgPSBkYXRhX3NpemUgLSAobW92ZV9zaXplICogcm93KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZYU1lTX21lbW1vdmUzMihwRGVzdERhdGEgKyAxLCBwU3JjRGF0YSwgbW92ZV9zaXplKTsKKyAgICAgICAgICAgIHBEZXN0RGF0YSArPSAobW92ZV9zaXplICsgMSk7CisgICAgICAgICAgICBwU3JjRGF0YSArPSBtb3ZlX3NpemU7CisgICAgICAgICAgICBieXRlX2NudCArPSBtb3ZlX3NpemU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBieXRlID0gMDsgYnl0ZSA8IHJvd19zaXplICYmIGJ5dGVfY250IDwgKGludClkYXRhX3NpemU7IGJ5dGUrKykgeworICAgICAgICAgICAgc3dpdGNoIChwcmVkaWN0b3IpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDExOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBwRGVzdERhdGFbMF0gPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSBsZWZ0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChieXRlID49IEJ5dGVzUGVyUGl4ZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gcFNyY0RhdGFbYnl0ZSAtIEJ5dGVzUGVyUGl4ZWxdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcERlc3REYXRhW2J5dGUgKyAxXSA9IHBTcmNEYXRhW2J5dGVdIC0gbGVmdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDEyOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBwRGVzdERhdGFbMF0gPSAyOworICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSB1cCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocm93KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXAgPSBwU3JjRGF0YVtieXRlIC0gcm93X3NpemVdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcERlc3REYXRhW2J5dGUgKyAxXSA9IHBTcmNEYXRhW2J5dGVdIC0gdXA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxMzogeworICAgICAgICAgICAgICAgICAgICAgICAgcERlc3REYXRhWzBdID0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgbGVmdCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZSA+PSBCeXRlc1BlclBpeGVsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHBTcmNEYXRhW2J5dGUgLSBCeXRlc1BlclBpeGVsXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgdXAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwID0gcFNyY0RhdGFbYnl0ZSAtIHJvd19zaXplXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBEZXN0RGF0YVtieXRlICsgMV0gPSBwU3JjRGF0YVtieXRlXSAtIChsZWZ0ICsgdXApIC8gMjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE0OiB7CisgICAgICAgICAgICAgICAgICAgICAgICBwRGVzdERhdGFbMF0gPSA0OworICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSBsZWZ0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChieXRlID49IEJ5dGVzUGVyUGl4ZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gcFNyY0RhdGFbYnl0ZSAtIEJ5dGVzUGVyUGl4ZWxdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSB1cCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocm93KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXAgPSBwU3JjRGF0YVtieXRlIC0gcm93X3NpemVdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSB1cHBlcl9sZWZ0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChieXRlID49IEJ5dGVzUGVyUGl4ZWwgJiYgcm93KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJfbGVmdCA9IHBTcmNEYXRhW2J5dGUgLSByb3dfc2l6ZSAtIEJ5dGVzUGVyUGl4ZWxdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcERlc3REYXRhW2J5dGUgKyAxXSA9IHBTcmNEYXRhW2J5dGVdIC0gUGFldGhQcmVkaWN0b3IobGVmdCwgdXAsIHVwcGVyX2xlZnQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBEZXN0RGF0YVtieXRlICsgMV0gPSBwU3JjRGF0YVtieXRlXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ5dGVfY250Kys7CisgICAgICAgIH0KKyAgICAgICAgcERlc3REYXRhICs9IChyb3dfc2l6ZSArIDEpOworICAgICAgICBwU3JjRGF0YSArPSByb3dfc2l6ZTsKKyAgICB9CisgICAgRlhfRnJlZShkYXRhX2J1Zik7CisgICAgZGF0YV9idWYgPSBkZXN0X2J1ZjsKKyAgICBkYXRhX3NpemUgPSAocm93X3NpemUgKyAxKSAqIHJvd19jb3VudCAtIChsYXN0X3Jvd19zaXplID4gMCA/IChyb3dfc2l6ZSAtIGxhc3Rfcm93X3NpemUpIDogMCk7Cit9CitzdGF0aWMgdm9pZCBQTkdfUHJlZGljdExpbmUoRlhfTFBCWVRFIHBEZXN0RGF0YSwgRlhfTFBDQllURSBwU3JjRGF0YSwgRlhfTFBDQllURSBwTGFzdExpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJwYywgaW50IG5Db2xvcnMsIGludCBuUGl4ZWxzKQoreworICAgIGludCByb3dfc2l6ZSA9IChuUGl4ZWxzICogYnBjICogbkNvbG9ycyArIDcpIC8gODsKKyAgICBpbnQgQnl0ZXNQZXJQaXhlbCA9IChicGMgKiBuQ29sb3JzICsgNykgLyA4OworICAgIEZYX0JZVEUgdGFnID0gcFNyY0RhdGFbMF07CisgICAgaWYgKHRhZyA9PSAwKSB7CisgICAgICAgIEZYU1lTX21lbW1vdmUzMihwRGVzdERhdGEsIHBTcmNEYXRhICsgMSwgcm93X3NpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoaW50IGJ5dGUgPSAwOyBieXRlIDwgcm93X3NpemU7IGJ5dGUgKyspIHsKKyAgICAgICAgRlhfQllURSByYXdfYnl0ZSA9IHBTcmNEYXRhW2J5dGUgKyAxXTsKKyAgICAgICAgc3dpdGNoICh0YWcpIHsKKyAgICAgICAgICAgIGNhc2UgMToJeworICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIGxlZnQgPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZSA+PSBCeXRlc1BlclBpeGVsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gcERlc3REYXRhW2J5dGUgLSBCeXRlc1BlclBpeGVsXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwRGVzdERhdGFbYnl0ZV0gPSByYXdfYnl0ZSArIGxlZnQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgMjogeworICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHVwID0gMDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBMYXN0TGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdXAgPSBwTGFzdExpbmVbYnl0ZV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcERlc3REYXRhW2J5dGVdID0gcmF3X2J5dGUgKyB1cDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSAzOiB7CisgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgbGVmdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChieXRlID49IEJ5dGVzUGVyUGl4ZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBwRGVzdERhdGFbYnl0ZSAtIEJ5dGVzUGVyUGl4ZWxdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgdXAgPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAocExhc3RMaW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCA9IHBMYXN0TGluZVtieXRlXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwRGVzdERhdGFbYnl0ZV0gPSByYXdfYnl0ZSArICh1cCArIGxlZnQpIC8gMjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSA0OiB7CisgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgbGVmdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGlmIChieXRlID49IEJ5dGVzUGVyUGl4ZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBwRGVzdERhdGFbYnl0ZSAtIEJ5dGVzUGVyUGl4ZWxdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgdXAgPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAocExhc3RMaW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCA9IHBMYXN0TGluZVtieXRlXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHVwcGVyX2xlZnQgPSAwOworICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZSA+PSBCeXRlc1BlclBpeGVsICYmIHBMYXN0TGluZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJfbGVmdCA9IHBMYXN0TGluZVtieXRlIC0gQnl0ZXNQZXJQaXhlbF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcERlc3REYXRhW2J5dGVdID0gcmF3X2J5dGUgKyBQYWV0aFByZWRpY3RvcihsZWZ0LCB1cCwgdXBwZXJfbGVmdCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcERlc3REYXRhW2J5dGVdID0gcmF3X2J5dGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CitzdGF0aWMgdm9pZCBQTkdfUHJlZGljdG9yKEZYX0xQQllURSYgZGF0YV9idWYsIEZYX0RXT1JEJiBkYXRhX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBDb2xvcnMsIGludCBCaXRzUGVyQ29tcG9uZW50LCBpbnQgQ29sdW1ucykKK3sKKyAgICBpbnQgQnl0ZXNQZXJQaXhlbCA9IChDb2xvcnMgKiBCaXRzUGVyQ29tcG9uZW50ICsgNykgLyA4OworICAgIGludCByb3dfc2l6ZSA9IChDb2xvcnMgKiBCaXRzUGVyQ29tcG9uZW50ICogQ29sdW1ucyArIDcpIC8gODsKKyAgICBpbnQgcm93X2NvdW50ID0gKGRhdGFfc2l6ZSArIHJvd19zaXplKSAvIChyb3dfc2l6ZSArIDEpOworICAgIGludCBsYXN0X3Jvd19zaXplID0gZGF0YV9zaXplICUgKHJvd19zaXplICsgMSk7CisgICAgRlhfTFBCWVRFIGRlc3RfYnVmID0gRlhfQWxsb2MoIEZYX0JZVEUsIHJvd19zaXplICogcm93X2NvdW50KTsKKyAgICBpZiAoZGVzdF9idWYgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludCBieXRlX2NudCA9IDA7CisgICAgRlhfTFBCWVRFIHBTcmNEYXRhID0gZGF0YV9idWY7CisgICAgRlhfTFBCWVRFIHBEZXN0RGF0YSA9IGRlc3RfYnVmOworICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHJvd19jb3VudDsgcm93ICsrKSB7CisgICAgICAgIEZYX0JZVEUgdGFnID0gcFNyY0RhdGFbMF07CisgICAgICAgIGlmICh0YWcgPT0gMCkgeworICAgICAgICAgICAgaW50IG1vdmVfc2l6ZSA9IHJvd19zaXplOworICAgICAgICAgICAgaWYgKChyb3cgKyAxKSAqIChtb3ZlX3NpemUgKyAxKSA+IChpbnQpZGF0YV9zaXplKSB7CisgICAgICAgICAgICAgICAgbW92ZV9zaXplID0gbGFzdF9yb3dfc2l6ZSAtIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWFNZU19tZW1tb3ZlMzIocERlc3REYXRhLCBwU3JjRGF0YSArIDEsIG1vdmVfc2l6ZSk7CisgICAgICAgICAgICBwU3JjRGF0YSArPSBtb3ZlX3NpemUgKyAxOworICAgICAgICAgICAgcERlc3REYXRhICs9IG1vdmVfc2l6ZTsKKyAgICAgICAgICAgIGJ5dGVfY250ICs9IG1vdmVfc2l6ZSArIDE7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBieXRlID0gMDsgYnl0ZSA8IHJvd19zaXplICYmIGJ5dGVfY250IDwgKGludClkYXRhX3NpemU7IGJ5dGUgKyspIHsKKyAgICAgICAgICAgIEZYX0JZVEUgcmF3X2J5dGUgPSBwU3JjRGF0YVtieXRlICsgMV07CisgICAgICAgICAgICBzd2l0Y2ggKHRhZykgeworICAgICAgICAgICAgICAgIGNhc2UgMToJeworICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSBsZWZ0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChieXRlID49IEJ5dGVzUGVyUGl4ZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gcERlc3REYXRhW2J5dGUgLSBCeXRlc1BlclBpeGVsXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBEZXN0RGF0YVtieXRlXSA9IHJhd19ieXRlICsgbGVmdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSAyOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHVwID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cCA9IHBEZXN0RGF0YVtieXRlIC0gcm93X3NpemVdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcERlc3REYXRhW2J5dGVdID0gcmF3X2J5dGUgKyB1cDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSAzOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIGxlZnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGUgPj0gQnl0ZXNQZXJQaXhlbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBwRGVzdERhdGFbYnl0ZSAtIEJ5dGVzUGVyUGl4ZWxdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSB1cCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocm93KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXAgPSBwRGVzdERhdGFbYnl0ZSAtIHJvd19zaXplXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBEZXN0RGF0YVtieXRlXSA9IHJhd19ieXRlICsgKHVwICsgbGVmdCkgLyAyOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIDQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgbGVmdCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZSA+PSBCeXRlc1BlclBpeGVsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHBEZXN0RGF0YVtieXRlIC0gQnl0ZXNQZXJQaXhlbF07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHVwID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cCA9IHBEZXN0RGF0YVtieXRlIC0gcm93X3NpemVdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSB1cHBlcl9sZWZ0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChieXRlID49IEJ5dGVzUGVyUGl4ZWwgJiYgcm93KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJfbGVmdCA9IHBEZXN0RGF0YVtieXRlIC0gcm93X3NpemUgLSBCeXRlc1BlclBpeGVsXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBEZXN0RGF0YVtieXRlXSA9IHJhd19ieXRlICsgUGFldGhQcmVkaWN0b3IobGVmdCwgdXAsIHVwcGVyX2xlZnQpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBwRGVzdERhdGFbYnl0ZV0gPSByYXdfYnl0ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBieXRlX2NudCsrOworICAgICAgICB9CisgICAgICAgIHBTcmNEYXRhICs9IHJvd19zaXplICsgMTsKKyAgICAgICAgcERlc3REYXRhICs9IHJvd19zaXplOworICAgICAgICBieXRlX2NudCsrOworICAgIH0KKyAgICBGWF9GcmVlKGRhdGFfYnVmKTsKKyAgICBkYXRhX2J1ZiA9IGRlc3RfYnVmOworICAgIGRhdGFfc2l6ZSA9IHJvd19zaXplICogcm93X2NvdW50IC0gKGxhc3Rfcm93X3NpemUgPiAwID8gKHJvd19zaXplICsgMSAtIGxhc3Rfcm93X3NpemUpIDogMCk7Cit9CitzdGF0aWMgdm9pZCBUSUZGX1ByZWRpY3RvckVuY29kZUxpbmUoRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQgcm93X3NpemUsIGludCBCaXRzUGVyQ29tcG9uZW50LCBpbnQgQ29sb3JzLCBpbnQgQ29sdW1ucykKK3sKKyAgICBpbnQgQnl0ZXNQZXJQaXhlbCA9IEJpdHNQZXJDb21wb25lbnQgKiBDb2xvcnMgLyA4OworICAgIGlmIChCaXRzUGVyQ29tcG9uZW50IDwgOCkgeworICAgICAgICBGWF9CWVRFIG1hc2sgPSAweDAxOworICAgICAgICBpZiAoQml0c1BlckNvbXBvbmVudCA9PSAyKSB7CisgICAgICAgICAgICBtYXNrID0gMHgwMzsKKyAgICAgICAgfSBlbHNlIGlmIChCaXRzUGVyQ29tcG9uZW50ID09IDQpIHsKKyAgICAgICAgICAgIG1hc2sgPSAweDBGOworICAgICAgICB9CisgICAgICAgIGludCByb3dfYml0cyA9IENvbG9ycyAqIEJpdHNQZXJDb21wb25lbnQgKiBDb2x1bW5zOworICAgICAgICBmb3IgKGludCBpID0gcm93X2JpdHMgLSBCaXRzUGVyQ29tcG9uZW50OyBpID49IEJpdHNQZXJDb21wb25lbnQ7IGkgLT0gQml0c1BlckNvbXBvbmVudCkgeworICAgICAgICAgICAgaW50IGNvbCA9IGkgJSA4OworICAgICAgICAgICAgaW50IGluZGV4ID0gaSAvIDg7CisgICAgICAgICAgICBpbnQgY29sX3ByZSA9IChjb2wgPT0gMCkgPyAoOCAtIEJpdHNQZXJDb21wb25lbnQpIDogKGNvbCAtIEJpdHNQZXJDb21wb25lbnQpOworICAgICAgICAgICAgaW50IGluZGV4X3ByZSA9IChjb2wgPT0gMCkgPyAoaW5kZXggLSAxKSA6IGluZGV4OworICAgICAgICAgICAgRlhfQllURSBjdXIgPSAoZGVzdF9idWZbaW5kZXhdID4+ICg4IC0gY29sIC0gQml0c1BlckNvbXBvbmVudCkpICYgbWFzazsKKyAgICAgICAgICAgIEZYX0JZVEUgbGVmdCA9IChkZXN0X2J1ZltpbmRleF9wcmVdID4+ICg4IC0gY29sX3ByZSAtIEJpdHNQZXJDb21wb25lbnQpKSAmIG1hc2s7CisgICAgICAgICAgICBjdXIgLT0gbGVmdDsKKyAgICAgICAgICAgIGN1ciAmPSBtYXNrOworICAgICAgICAgICAgY3VyIDw8PSAoOCAtIGNvbCAtIEJpdHNQZXJDb21wb25lbnQpOworICAgICAgICAgICAgZGVzdF9idWZbaW5kZXhdICY9IH4obWFzayA8PCAoKDggLSBjb2wgLSBCaXRzUGVyQ29tcG9uZW50KSkpOworICAgICAgICAgICAgZGVzdF9idWZbaW5kZXhdIHw9IGN1cjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoQml0c1BlckNvbXBvbmVudCA9PSA4KSB7CisgICAgICAgIGZvciAoaW50IGkgPSByb3dfc2l6ZSAtIDE7IGkgPj0gQnl0ZXNQZXJQaXhlbDsgaS0tKSB7CisgICAgICAgICAgICBkZXN0X2J1ZltpXSAtPSBkZXN0X2J1ZltpIC0gQnl0ZXNQZXJQaXhlbF07CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGludCBpID0gcm93X3NpemUgLSBCeXRlc1BlclBpeGVsOyBpID49IEJ5dGVzUGVyUGl4ZWw7IGkgLT0gQnl0ZXNQZXJQaXhlbCkgeworICAgICAgICAgICAgRlhfV09SRCBwaXhlbCA9IChkZXN0X2J1ZltpXSA8PCA4KSB8IGRlc3RfYnVmW2kgKyAxXTsKKyAgICAgICAgICAgIHBpeGVsIC09IChkZXN0X2J1ZltpIC0gQnl0ZXNQZXJQaXhlbF0gPDwgOCkgfCBkZXN0X2J1ZltpIC0gQnl0ZXNQZXJQaXhlbCArIDFdOworICAgICAgICAgICAgZGVzdF9idWZbaV0gPSBwaXhlbCA+PiA4OworICAgICAgICAgICAgZGVzdF9idWZbaSArIDFdID0gKEZYX0JZVEUpcGl4ZWw7CisgICAgICAgIH0KKyAgICB9Cit9CitzdGF0aWMgdm9pZCBUSUZGX1ByZWRpY3RvckVuY29kZShGWF9MUEJZVEUmIGRhdGFfYnVmLCBGWF9EV09SRCYgZGF0YV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IENvbG9ycywgaW50IEJpdHNQZXJDb21wb25lbnQsIGludCBDb2x1bW5zKQoreworICAgIGludCByb3dfc2l6ZSA9IChDb2xvcnMgKiBCaXRzUGVyQ29tcG9uZW50ICogQ29sdW1ucyArIDcpIC8gODsKKyAgICBpbnQgcm93X2NvdW50ID0gKGRhdGFfc2l6ZSArIHJvd19zaXplIC0gMSkgLyByb3dfc2l6ZTsKKyAgICBpbnQgbGFzdF9yb3dfc2l6ZSA9IGRhdGFfc2l6ZSAlIHJvd19zaXplOworICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHJvd19jb3VudDsgcm93KyspIHsKKyAgICAgICAgRlhfTFBCWVRFIHNjYW5fbGluZSA9IGRhdGFfYnVmICsgcm93ICogcm93X3NpemU7CisgICAgICAgIGlmICgocm93ICsgMSkgKiByb3dfc2l6ZSA+IChpbnQpZGF0YV9zaXplKSB7CisgICAgICAgICAgICByb3dfc2l6ZSA9IGxhc3Rfcm93X3NpemU7CisgICAgICAgIH0KKyAgICAgICAgVElGRl9QcmVkaWN0b3JFbmNvZGVMaW5lKHNjYW5fbGluZSwgcm93X3NpemUsIEJpdHNQZXJDb21wb25lbnQsIENvbG9ycywgQ29sdW1ucyk7CisgICAgfQorfQorc3RhdGljIHZvaWQgVElGRl9QcmVkaWN0TGluZShGWF9MUEJZVEUgZGVzdF9idWYsIGludCByb3dfc2l6ZSwgaW50IEJpdHNQZXJDb21wb25lbnQsIGludCBDb2xvcnMsIGludCBDb2x1bW5zKQoreworICAgIGlmIChCaXRzUGVyQ29tcG9uZW50ID09IDEpIHsKKyAgICAgICAgaW50IHJvd19iaXRzID0gQml0c1BlckNvbXBvbmVudCAqIENvbG9ycyAqIENvbHVtbnM7CisgICAgICAgIGZvcihpbnQgaSA9IDE7IGkgPCByb3dfYml0czsgaSArKykgeworICAgICAgICAgICAgaW50IGNvbCA9IGkgJSA4OworICAgICAgICAgICAgaW50IGluZGV4ID0gaSAvIDg7CisgICAgICAgICAgICBpbnQgaW5kZXhfcHJlID0gKGNvbCA9PSAwKSA/IChpbmRleCAtIDEpIDogaW5kZXg7CisgICAgICAgICAgICBpbnQgY29sX3ByZSA9IChjb2wgPT0gMCkgPyA4IDogY29sOworICAgICAgICAgICAgaWYoICgoZGVzdF9idWZbaW5kZXhdID4+ICg3IC0gY29sKSkgJiAxKSBeICgoZGVzdF9idWZbaW5kZXhfcHJlXSA+PiAoOCAtIGNvbF9wcmUpKSAmIDEpICkgeworICAgICAgICAgICAgICAgIGRlc3RfYnVmW2luZGV4XSB8PSAxIDw8ICg3IC0gY29sKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVzdF9idWZbaW5kZXhdICY9IH4oMSA8PCAoNyAtIGNvbCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IEJ5dGVzUGVyUGl4ZWwgPSBCaXRzUGVyQ29tcG9uZW50ICogQ29sb3JzIC8gODsKKyAgICBpZiAoQml0c1BlckNvbXBvbmVudCA9PSAxNikgeworICAgICAgICBmb3IgKGludCBpID0gQnl0ZXNQZXJQaXhlbDsgaSA8IHJvd19zaXplOyBpICs9IDIpIHsKKyAgICAgICAgICAgIEZYX1dPUkQgcGl4ZWwgPSAoZGVzdF9idWZbaSAtIEJ5dGVzUGVyUGl4ZWxdIDw8IDgpIHwgZGVzdF9idWZbaSAtIEJ5dGVzUGVyUGl4ZWwgKyAxXTsKKyAgICAgICAgICAgIHBpeGVsICs9IChkZXN0X2J1ZltpXSA8PCA4KSB8IGRlc3RfYnVmW2kgKyAxXTsKKyAgICAgICAgICAgIGRlc3RfYnVmW2ldID0gcGl4ZWwgPj4gODsKKyAgICAgICAgICAgIGRlc3RfYnVmW2kgKyAxXSA9IChGWF9CWVRFKXBpeGVsOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IEJ5dGVzUGVyUGl4ZWw7IGkgPCByb3dfc2l6ZTsgaSArKykgeworICAgICAgICAgICAgZGVzdF9idWZbaV0gKz0gZGVzdF9idWZbaSAtIEJ5dGVzUGVyUGl4ZWxdOworICAgICAgICB9CisgICAgfQorfQorc3RhdGljIHZvaWQgVElGRl9QcmVkaWN0b3IoRlhfTFBCWVRFJiBkYXRhX2J1ZiwgRlhfRFdPUkQmIGRhdGFfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBDb2xvcnMsIGludCBCaXRzUGVyQ29tcG9uZW50LCBpbnQgQ29sdW1ucykKK3sKKyAgICBpbnQgcm93X3NpemUgPSAoQ29sb3JzICogQml0c1BlckNvbXBvbmVudCAqIENvbHVtbnMgKyA3KSAvIDg7CisgICAgaW50IHJvd19jb3VudCA9IChkYXRhX3NpemUgKyByb3dfc2l6ZSAtIDEpIC8gcm93X3NpemU7CisgICAgaW50IGxhc3Rfcm93X3NpemUgPSBkYXRhX3NpemUgJSByb3dfc2l6ZTsKKyAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCByb3dfY291bnQ7IHJvdyArKykgeworICAgICAgICBGWF9MUEJZVEUgc2Nhbl9saW5lID0gZGF0YV9idWYgKyByb3cgKiByb3dfc2l6ZTsKKyAgICAgICAgaWYgKChyb3cgKyAxKSAqIHJvd19zaXplID4gKGludClkYXRhX3NpemUpIHsKKyAgICAgICAgICAgIHJvd19zaXplID0gbGFzdF9yb3dfc2l6ZTsKKyAgICAgICAgfQorICAgICAgICBUSUZGX1ByZWRpY3RMaW5lKHNjYW5fbGluZSwgcm93X3NpemUsIEJpdHNQZXJDb21wb25lbnQsIENvbG9ycywgQ29sdW1ucyk7CisgICAgfQorfQorY2xhc3MgQ0NvZGVjX0ZsYXRlU2NhbmxpbmVEZWNvZGVyIDogcHVibGljIENDb2RlY19TY2FubGluZURlY29kZXIKK3sKK3B1YmxpYzoKKyAgICBDQ29kZWNfRmxhdGVTY2FubGluZURlY29kZXIoKTsKKyAgICB+Q0NvZGVjX0ZsYXRlU2NhbmxpbmVEZWNvZGVyKCk7CisgICAgRlhfQk9PTAkJQ3JlYXRlKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG5Db21wcywgaW50IGJwYywKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZWRpY3RvciwgaW50IENvbG9ycywgaW50IEJpdHNQZXJDb21wb25lbnQsIGludCBDb2x1bW5zKTsKKyAgICB2aXJ0dWFsIHZvaWQJCURlc3Ryb3koKQorICAgIHsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZAkJdl9Eb3duU2NhbGUoaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCkge30KKyAgICB2aXJ0dWFsIEZYX0JPT0wJCXZfUmV3aW5kKCk7CisgICAgdmlydHVhbCBGWF9MUEJZVEUJdl9HZXROZXh0TGluZSgpOworICAgIHZpcnR1YWwgRlhfRFdPUkQJR2V0U3JjT2Zmc2V0KCk7CisgICAgdm9pZCoJCQkJbV9wRmxhdGU7CisgICAgRlhfTFBDQllURQkJCW1fU3JjQnVmOworICAgIEZYX0RXT1JECQkJbV9TcmNTaXplOworICAgIEZYX0xQQllURQkJCW1fcFNjYW5saW5lOworICAgIEZYX0xQQllURQkJCW1fcExhc3RMaW5lOworICAgIEZYX0xQQllURQkJCW1fcFByZWRpY3RCdWZmZXI7CisgICAgRlhfTFBCWVRFCQkJbV9wUHJlZGljdFJhdzsKKyAgICBpbnQJCQkJCW1fUHJlZGljdG9yOworICAgIGludAkJCQkJbV9Db2xvcnMsIG1fQml0c1BlckNvbXBvbmVudCwgbV9Db2x1bW5zLCBtX1ByZWRpY3RQaXRjaCwgbV9MZWZ0T3ZlcjsKK307CitDQ29kZWNfRmxhdGVTY2FubGluZURlY29kZXI6OkNDb2RlY19GbGF0ZVNjYW5saW5lRGVjb2RlcigpCit7CisgICAgbV9wRmxhdGUgPSBOVUxMOworICAgIG1fcFNjYW5saW5lID0gTlVMTDsKKyAgICBtX3BMYXN0TGluZSA9IE5VTEw7CisgICAgbV9wUHJlZGljdEJ1ZmZlciA9IE5VTEw7CisgICAgbV9wUHJlZGljdFJhdyA9IE5VTEw7CisgICAgbV9MZWZ0T3ZlciA9IDA7Cit9CitDQ29kZWNfRmxhdGVTY2FubGluZURlY29kZXI6On5DQ29kZWNfRmxhdGVTY2FubGluZURlY29kZXIoKQoreworICAgIGlmIChtX3BTY2FubGluZSkgeworICAgICAgICBGWF9GcmVlKG1fcFNjYW5saW5lKTsKKyAgICB9CisgICAgaWYgKG1fcExhc3RMaW5lKSB7CisgICAgICAgIEZYX0ZyZWUobV9wTGFzdExpbmUpOworICAgIH0KKyAgICBpZiAobV9wUHJlZGljdEJ1ZmZlcikgeworICAgICAgICBGWF9GcmVlKG1fcFByZWRpY3RCdWZmZXIpOworICAgIH0KKyAgICBpZiAobV9wUHJlZGljdFJhdykgeworICAgICAgICBGWF9GcmVlKG1fcFByZWRpY3RSYXcpOworICAgIH0KKyAgICBpZiAobV9wRmxhdGUpIHsKKyAgICAgICAgRlBERkFQSV9GbGF0ZUVuZChtX3BGbGF0ZSk7CisgICAgfQorfQorRlhfQk9PTCBDQ29kZWNfRmxhdGVTY2FubGluZURlY29kZXI6OkNyZWF0ZShGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisgICAgICAgIGludCBuQ29tcHMsIGludCBicGMsIGludCBwcmVkaWN0b3IsIGludCBDb2xvcnMsIGludCBCaXRzUGVyQ29tcG9uZW50LCBpbnQgQ29sdW1ucykKK3sKKyAgICBtX1NyY0J1ZiA9IHNyY19idWY7CisgICAgbV9TcmNTaXplID0gc3JjX3NpemU7CisgICAgbV9PdXRwdXRXaWR0aCA9IG1fT3JpZ1dpZHRoID0gd2lkdGg7CisgICAgbV9PdXRwdXRIZWlnaHQgPSBtX09yaWdIZWlnaHQgPSBoZWlnaHQ7CisgICAgbV9uQ29tcHMgPSBuQ29tcHM7CisgICAgbV9icGMgPSBicGM7CisgICAgbV9iQ29sb3JUcmFuc2Zvcm1lZCA9IEZBTFNFOworICAgIG1fUGl0Y2ggPSAod2lkdGggKiBuQ29tcHMgKiBicGMgKyA3KSAvIDg7CisgICAgbV9wU2NhbmxpbmUgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1BpdGNoKTsKKyAgICBpZiAobV9wU2NhbmxpbmUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fUHJlZGljdG9yID0gMDsKKyAgICBpZiAocHJlZGljdG9yKSB7CisgICAgICAgIGlmIChwcmVkaWN0b3IgPj0gMTApIHsKKyAgICAgICAgICAgIG1fUHJlZGljdG9yID0gMjsKKyAgICAgICAgfSBlbHNlIGlmIChwcmVkaWN0b3IgPT0gMikgeworICAgICAgICAgICAgbV9QcmVkaWN0b3IgPSAxOworICAgICAgICB9CisgICAgICAgIGlmIChtX1ByZWRpY3RvcikgeworICAgICAgICAgICAgaWYgKEJpdHNQZXJDb21wb25lbnQgKiBDb2xvcnMgKiBDb2x1bW5zID09IDApIHsKKyAgICAgICAgICAgICAgICBCaXRzUGVyQ29tcG9uZW50ID0gbV9icGM7CisgICAgICAgICAgICAgICAgQ29sb3JzID0gbV9uQ29tcHM7CisgICAgICAgICAgICAgICAgQ29sdW1ucyA9IG1fT3JpZ1dpZHRoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9Db2xvcnMgPSBDb2xvcnM7CisgICAgICAgICAgICBtX0JpdHNQZXJDb21wb25lbnQgPSBCaXRzUGVyQ29tcG9uZW50OworICAgICAgICAgICAgbV9Db2x1bW5zID0gQ29sdW1uczsKKyAgICAgICAgICAgIG1fUHJlZGljdFBpdGNoID0gKG1fQml0c1BlckNvbXBvbmVudCAqIG1fQ29sb3JzICogbV9Db2x1bW5zICsgNykgLyA4OworICAgICAgICAgICAgbV9wTGFzdExpbmUgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1ByZWRpY3RQaXRjaCk7CisgICAgICAgICAgICBpZiAobV9wTGFzdExpbmUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZYU1lTX21lbXNldDMyKG1fcExhc3RMaW5lLCAwLCBtX1ByZWRpY3RQaXRjaCk7CisgICAgICAgICAgICBtX3BQcmVkaWN0UmF3ID0gRlhfQWxsb2MoRlhfQllURSwgbV9QcmVkaWN0UGl0Y2ggKyAxKTsKKyAgICAgICAgICAgIGlmIChtX3BQcmVkaWN0UmF3ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3BQcmVkaWN0QnVmZmVyID0gRlhfQWxsb2MoRlhfQllURSwgbV9QcmVkaWN0UGl0Y2gpOworICAgICAgICAgICAgaWYgKG1fcFByZWRpY3RCdWZmZXIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0NvZGVjX0ZsYXRlU2NhbmxpbmVEZWNvZGVyOjp2X1Jld2luZCgpCit7CisgICAgaWYgKG1fcEZsYXRlKSB7CisgICAgICAgIEZQREZBUElfRmxhdGVFbmQobV9wRmxhdGUpOworICAgIH0KKyAgICBtX3BGbGF0ZSA9IEZQREZBUElfRmxhdGVJbml0KG15X2FsbG9jX2Z1bmMsIG15X2ZyZWVfZnVuYyk7CisgICAgaWYgKG1fcEZsYXRlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGUERGQVBJX0ZsYXRlSW5wdXQobV9wRmxhdGUsIG1fU3JjQnVmLCBtX1NyY1NpemUpOworICAgIG1fTGVmdE92ZXIgPSAwOworICAgIHJldHVybiBUUlVFOworfQorRlhfTFBCWVRFIENDb2RlY19GbGF0ZVNjYW5saW5lRGVjb2Rlcjo6dl9HZXROZXh0TGluZSgpCit7CisgICAgaWYgKG1fUHJlZGljdG9yKSB7CisgICAgICAgIGlmIChtX1BpdGNoID09IG1fUHJlZGljdFBpdGNoKSB7CisgICAgICAgICAgICBpZiAobV9QcmVkaWN0b3IgPT0gMikgeworICAgICAgICAgICAgICAgIEZQREZBUElfRmxhdGVPdXRwdXQobV9wRmxhdGUsIG1fcFByZWRpY3RSYXcsIG1fUHJlZGljdFBpdGNoICsgMSk7CisgICAgICAgICAgICAgICAgUE5HX1ByZWRpY3RMaW5lKG1fcFNjYW5saW5lLCBtX3BQcmVkaWN0UmF3LCBtX3BMYXN0TGluZSwgbV9CaXRzUGVyQ29tcG9uZW50LCBtX0NvbG9ycywgbV9Db2x1bW5zKTsKKyAgICAgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BMYXN0TGluZSwgbV9wU2NhbmxpbmUsIG1fUHJlZGljdFBpdGNoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgRlBERkFQSV9GbGF0ZU91dHB1dChtX3BGbGF0ZSwgbV9wU2NhbmxpbmUsIG1fUGl0Y2gpOworICAgICAgICAgICAgICAgIFRJRkZfUHJlZGljdExpbmUobV9wU2NhbmxpbmUsIG1fUHJlZGljdFBpdGNoLCBtX2JwYywgbV9uQ29tcHMsIG1fT3V0cHV0V2lkdGgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IGJ5dGVzX3RvX2dvID0gbV9QaXRjaDsKKyAgICAgICAgICAgIGludCByZWFkX2xlZnRvdmVyID0gbV9MZWZ0T3ZlciA+IGJ5dGVzX3RvX2dvID8gYnl0ZXNfdG9fZ28gOiBtX0xlZnRPdmVyOworICAgICAgICAgICAgaWYgKHJlYWRfbGVmdG92ZXIpIHsKKyAgICAgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BTY2FubGluZSwgbV9wUHJlZGljdEJ1ZmZlciArIG1fUHJlZGljdFBpdGNoIC0gbV9MZWZ0T3ZlciwgcmVhZF9sZWZ0b3Zlcik7CisgICAgICAgICAgICAgICAgbV9MZWZ0T3ZlciAtPSByZWFkX2xlZnRvdmVyOworICAgICAgICAgICAgICAgIGJ5dGVzX3RvX2dvIC09IHJlYWRfbGVmdG92ZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoYnl0ZXNfdG9fZ28pIHsKKyAgICAgICAgICAgICAgICBpZiAobV9QcmVkaWN0b3IgPT0gMikgeworICAgICAgICAgICAgICAgICAgICBGUERGQVBJX0ZsYXRlT3V0cHV0KG1fcEZsYXRlLCBtX3BQcmVkaWN0UmF3LCBtX1ByZWRpY3RQaXRjaCArIDEpOworICAgICAgICAgICAgICAgICAgICBQTkdfUHJlZGljdExpbmUobV9wUHJlZGljdEJ1ZmZlciwgbV9wUHJlZGljdFJhdywgbV9wTGFzdExpbmUsIG1fQml0c1BlckNvbXBvbmVudCwgbV9Db2xvcnMsIG1fQ29sdW1ucyk7CisgICAgICAgICAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcExhc3RMaW5lLCBtX3BQcmVkaWN0QnVmZmVyLCBtX1ByZWRpY3RQaXRjaCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgRlBERkFQSV9GbGF0ZU91dHB1dChtX3BGbGF0ZSwgbV9wUHJlZGljdEJ1ZmZlciwgbV9QcmVkaWN0UGl0Y2gpOworICAgICAgICAgICAgICAgICAgICBUSUZGX1ByZWRpY3RMaW5lKG1fcFByZWRpY3RCdWZmZXIsIG1fUHJlZGljdFBpdGNoLCBtX0JpdHNQZXJDb21wb25lbnQsIG1fQ29sb3JzLCBtX0NvbHVtbnMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnQgcmVhZF9ieXRlcyA9IG1fUHJlZGljdFBpdGNoID4gYnl0ZXNfdG9fZ28gPyBieXRlc190b19nbyA6IG1fUHJlZGljdFBpdGNoOworICAgICAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcFNjYW5saW5lICsgbV9QaXRjaCAtIGJ5dGVzX3RvX2dvLCBtX3BQcmVkaWN0QnVmZmVyLCByZWFkX2J5dGVzKTsKKyAgICAgICAgICAgICAgICBtX0xlZnRPdmVyICs9IG1fUHJlZGljdFBpdGNoIC0gcmVhZF9ieXRlczsKKyAgICAgICAgICAgICAgICBieXRlc190b19nbyAtPSByZWFkX2J5dGVzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgRlBERkFQSV9GbGF0ZU91dHB1dChtX3BGbGF0ZSwgbV9wU2NhbmxpbmUsIG1fUGl0Y2gpOworICAgIH0KKyAgICByZXR1cm4gbV9wU2NhbmxpbmU7Cit9CitGWF9EV09SRCBDQ29kZWNfRmxhdGVTY2FubGluZURlY29kZXI6OkdldFNyY09mZnNldCgpCit7CisgICAgcmV0dXJuIEZQREZBUElfRmxhdGVHZXRUb3RhbEluKG1fcEZsYXRlKTsKK30KK3N0YXRpYyB2b2lkIEZsYXRlVW5jb21wcmVzcyhGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBGWF9EV09SRCBvcmlnX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSwgRlhfRFdPUkQmIG9mZnNldCkKK3sKKyAgICBGWF9EV09SRCBndWVzc19zaXplID0gb3JpZ19zaXplID8gb3JpZ19zaXplIDogc3JjX3NpemUgKiAyOworICAgIEZYX0RXT1JEIGFsbG9jX3N0ZXAgPSBvcmlnX3NpemUgPyAxMDI0MCA6IChzcmNfc2l6ZSA8IDEwMjQwID8gMTAyNDAgOiBzcmNfc2l6ZSk7CisgICAgc3RhdGljIGNvbnN0IEZYX0RXT1JEIGtNYXhJbml0aWFsQWxsb2NTaXplID0gMTAwMDAwMDA7CisgICAgaWYgKGd1ZXNzX3NpemUgPiBrTWF4SW5pdGlhbEFsbG9jU2l6ZSkgeworICAgICAgICBndWVzc19zaXplID0ga01heEluaXRpYWxBbGxvY1NpemU7CisgICAgICAgIGFsbG9jX3N0ZXAgPSBrTWF4SW5pdGlhbEFsbG9jU2l6ZTsKKyAgICB9CisgICAgRlhfTFBCWVRFIGd1ZXNzX2J1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIGd1ZXNzX3NpemUgKyAxKTsKKyAgICBpZiAoIWd1ZXNzX2J1ZikgeworICAgICAgICBkZXN0X2J1ZiA9IE5VTEw7CisgICAgICAgIGRlc3Rfc2l6ZSA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZ3Vlc3NfYnVmW2d1ZXNzX3NpemVdID0gJ1wwJzsKKyAgICBGWF9CT09MIHVzZU9sZEltcGwgPSBzcmNfc2l6ZSA8IDEwMjQwOworICAgIHZvaWQqIGNvbnRleHQgPSBGUERGQVBJX0ZsYXRlSW5pdChteV9hbGxvY19mdW5jLCBteV9mcmVlX2Z1bmMpOworICAgIGlmIChjb250ZXh0ID09IE5VTEwpIHsKKyAgICAgICAgZGVzdF9idWYgPSBOVUxMOworICAgICAgICBkZXN0X3NpemUgPSAwOworICAgICAgICByZXR1cm4gOworICAgIH0KKyAgICBGUERGQVBJX0ZsYXRlSW5wdXQoY29udGV4dCwgc3JjX2J1Ziwgc3JjX3NpemUpOworICAgIENGWF9BcnJheVRlbXBsYXRlPEZYX0xQQllURT4gcmVzdWx0X3RtcF9idWZzOworICAgIEZYX0xQQllURSBidWYgPSBndWVzc19idWY7CisgICAgRlhfRFdPUkQgYnVmX3NpemUgPSBndWVzc19zaXplOworICAgIEZYX0RXT1JEIGxhc3RfYnVmX3NpemUgPSBidWZfc2l6ZTsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBGWF9JTlQzMiByZXQgPSBGUERGQVBJX0ZsYXRlT3V0cHV0KGNvbnRleHQsIGJ1ZiwgYnVmX3NpemUpOworICAgICAgICBGWF9JTlQzMiBhdmFpbF9idWZfc2l6ZSA9IEZQREZBUElfRmxhdGVHZXRBdmFpbE91dChjb250ZXh0KTsKKyAgICAgICAgaWYgKCF1c2VPbGRJbXBsKSB7CisgICAgICAgICAgICBpZiAocmV0ICE9IFpfT0spIHsKKyAgICAgICAgICAgICAgICBsYXN0X2J1Zl9zaXplID0gYnVmX3NpemUgLSBhdmFpbF9idWZfc2l6ZTsKKyAgICAgICAgICAgICAgICByZXN1bHRfdG1wX2J1ZnMuQWRkKGJ1Zik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYXZhaWxfYnVmX3NpemUgPT0gMCkgeworICAgICAgICAgICAgICAgIHJlc3VsdF90bXBfYnVmcy5BZGQoYnVmKTsKKyAgICAgICAgICAgICAgICBidWYgPSBOVUxMOworICAgICAgICAgICAgICAgIGJ1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIGJ1Zl9zaXplICsgMSk7CisgICAgICAgICAgICAgICAgaWYgKCFidWYpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9idWYgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBkZXN0X3NpemUgPSAwOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJ1ZltidWZfc2l6ZV0gPSAnXDAnOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsYXN0X2J1Zl9zaXplID0gYnVmX3NpemUgLSBhdmFpbF9idWZfc2l6ZTsKKyAgICAgICAgICAgICAgICByZXN1bHRfdG1wX2J1ZnMuQWRkKGJ1Zik7CisgICAgICAgICAgICAgICAgYnVmID0gTlVMTDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChyZXQgIT0gWl9PSykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGF2YWlsX2J1Zl9zaXplID09IDApIHsKKyAgICAgICAgICAgICAgICBGWF9EV09SRCBvbGRfc2l6ZSA9IGd1ZXNzX3NpemU7CisgICAgICAgICAgICAgICAgZ3Vlc3Nfc2l6ZSArPSBhbGxvY19zdGVwOworICAgICAgICAgICAgICAgIGlmIChndWVzc19zaXplIDwgb2xkX3NpemUgfHwgZ3Vlc3Nfc2l6ZSArIDEgPCBndWVzc19zaXplKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3RfYnVmID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zaXplID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBndWVzc19idWYgPSBGWF9SZWFsbG9jKEZYX0JZVEUsIGd1ZXNzX2J1ZiwgZ3Vlc3Nfc2l6ZSArIDEpOworICAgICAgICAgICAgICAgIGlmICghZ3Vlc3NfYnVmKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3RfYnVmID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zaXplID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBndWVzc19idWZbZ3Vlc3Nfc2l6ZV0gPSAnXDAnOworICAgICAgICAgICAgICAgIGJ1ZiA9IGd1ZXNzX2J1ZiArIG9sZF9zaXplOworICAgICAgICAgICAgICAgIGJ1Zl9zaXplID0gZ3Vlc3Nfc2l6ZSAtIG9sZF9zaXplOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBkZXN0X3NpemUgPSBGUERGQVBJX0ZsYXRlR2V0VG90YWxPdXQoY29udGV4dCk7CisgICAgb2Zmc2V0ID0gRlBERkFQSV9GbGF0ZUdldFRvdGFsSW4oY29udGV4dCk7CisgICAgaWYgKCF1c2VPbGRJbXBsKSB7CisgICAgICAgIGlmIChyZXN1bHRfdG1wX2J1ZnMuR2V0U2l6ZSgpID09IDEpIHsKKyAgICAgICAgICAgIGRlc3RfYnVmID0gcmVzdWx0X3RtcF9idWZzWzBdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRlhfTFBCWVRFIHJlc3VsdF9idWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBkZXN0X3NpemUpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRfYnVmKSB7CisgICAgICAgICAgICAgICAgZGVzdF9idWYgPSBOVUxMOworICAgICAgICAgICAgICAgIGRlc3Rfc2l6ZSA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfRFdPUkQgcmVzdWx0X3BvcyA9IDA7CisgICAgICAgICAgICBmb3IgKEZYX0lOVDMyIGkgPSAwOyBpIDwgcmVzdWx0X3RtcF9idWZzLkdldFNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgRlhfTFBCWVRFIHRtcF9idWYgPSByZXN1bHRfdG1wX2J1ZnNbaV07CisgICAgICAgICAgICAgICAgRlhfRFdPUkQgdG1wX2J1Zl9zaXplID0gYnVmX3NpemU7CisgICAgICAgICAgICAgICAgaWYgKGkgPT0gcmVzdWx0X3RtcF9idWZzLkdldFNpemUoKSAtIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgdG1wX2J1Zl9zaXplID0gbGFzdF9idWZfc2l6ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIocmVzdWx0X2J1ZiArIHJlc3VsdF9wb3MsIHRtcF9idWYsIHRtcF9idWZfc2l6ZSk7CisgICAgICAgICAgICAgICAgcmVzdWx0X3BvcyArPSB0bXBfYnVmX3NpemU7CisgICAgICAgICAgICAgICAgRlhfRnJlZSh0bXBfYnVmKTsKKyAgICAgICAgICAgICAgICB0bXBfYnVmID0gTlVMTDsKKyAgICAgICAgICAgICAgICByZXN1bHRfdG1wX2J1ZnNbaV0gPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVzdF9idWYgPSByZXN1bHRfYnVmOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGd1ZXNzX3NpemUgLyAyID4gZGVzdF9zaXplKSB7CisgICAgICAgICAgICBndWVzc19idWYgPSBGWF9SZWFsbG9jKEZYX0JZVEUsIGd1ZXNzX2J1ZiwgZGVzdF9zaXplICsgMSk7CisgICAgICAgICAgICBpZiAoIWd1ZXNzX2J1ZikgeworICAgICAgICAgICAgICAgIGRlc3RfYnVmID0gTlVMTDsKKyAgICAgICAgICAgICAgICBkZXN0X3NpemUgPSAwOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGd1ZXNzX3NpemUgPSBkZXN0X3NpemU7CisgICAgICAgICAgICBndWVzc19idWZbZ3Vlc3Nfc2l6ZV0gPSAnXDAnOworICAgICAgICB9CisgICAgICAgIGRlc3RfYnVmID0gZ3Vlc3NfYnVmOworICAgIH0KKyAgICBGUERGQVBJX0ZsYXRlRW5kKGNvbnRleHQpOworICAgIGNvbnRleHQgPSBOVUxMOworfQorSUNvZGVjX1NjYW5saW5lRGVjb2RlcioJQ0NvZGVjX0ZsYXRlTW9kdWxlOjpDcmVhdGVEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgaW50IG5Db21wcywgaW50IGJwYywgaW50IHByZWRpY3RvciwgaW50IENvbG9ycywgaW50IEJpdHNQZXJDb21wb25lbnQsIGludCBDb2x1bW5zKQoreworICAgIENDb2RlY19GbGF0ZVNjYW5saW5lRGVjb2RlciogcERlY29kZXIgPSBGWF9ORVcgQ0NvZGVjX0ZsYXRlU2NhbmxpbmVEZWNvZGVyOworICAgIGlmIChwRGVjb2RlciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwRGVjb2Rlci0+Q3JlYXRlKHNyY19idWYsIHNyY19zaXplLCB3aWR0aCwgaGVpZ2h0LCBuQ29tcHMsIGJwYywgcHJlZGljdG9yLCBDb2xvcnMsIEJpdHNQZXJDb21wb25lbnQsIENvbHVtbnMpOworICAgIHJldHVybiBwRGVjb2RlcjsKK30KK0ZYX0RXT1JEIENDb2RlY19GbGF0ZU1vZHVsZTo6RmxhdGVPckxaV0RlY29kZShGWF9CT09MIGJMWlcsIGNvbnN0IEZYX0JZVEUqIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBGWF9CT09MIGJFYXJseUNoYW5nZSwKKyAgICAgICAgaW50IHByZWRpY3RvciwgaW50IENvbG9ycywgaW50IEJpdHNQZXJDb21wb25lbnQsIGludCBDb2x1bW5zLAorICAgICAgICBGWF9EV09SRCBlc3RpbWF0ZWRfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkKK3sKKyAgICBDTFpXRGVjb2RlciogcERlY29kZXIgPSBOVUxMOworICAgIGRlc3RfYnVmID0gTlVMTDsKKyAgICBGWF9EV09SRCBvZmZzZXQgPSAwOworICAgIGludCBwcmVkaWN0b3JfdHlwZSA9IDA7CisgICAgaWYgKHByZWRpY3RvcikgeworICAgICAgICBpZiAocHJlZGljdG9yID49IDEwKSB7CisgICAgICAgICAgICBwcmVkaWN0b3JfdHlwZSA9IDI7CisgICAgICAgIH0gZWxzZSBpZiAocHJlZGljdG9yID09IDIpIHsKKyAgICAgICAgICAgIHByZWRpY3Rvcl90eXBlID0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYkxaVykgeworICAgICAgICBwRGVjb2RlciA9IEZYX05FVyBDTFpXRGVjb2RlcjsKKyAgICAgICAgaWYgKHBEZWNvZGVyID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBkZXN0X3NpemUgPSAoRlhfRFdPUkQpIC0gMTsKKyAgICAgICAgb2Zmc2V0ID0gc3JjX3NpemU7CisgICAgICAgIGludCBlcnIgPSBwRGVjb2Rlci0+RGVjb2RlKE5VTEwsIGRlc3Rfc2l6ZSwgc3JjX2J1Ziwgb2Zmc2V0LCBiRWFybHlDaGFuZ2UpOworICAgICAgICBkZWxldGUgcERlY29kZXI7CisgICAgICAgIGlmIChlcnIgfHwgZGVzdF9zaXplID09IDAgfHwgZGVzdF9zaXplICsgMSA8IGRlc3Rfc2l6ZSkgeworICAgICAgICAgICAgcmV0dXJuIChGWF9EV09SRCkgLSAxOworICAgICAgICB9CisgICAgICAgIHBEZWNvZGVyID0gRlhfTkVXIENMWldEZWNvZGVyOworICAgICAgICBpZiAocERlY29kZXIgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGRlc3RfYnVmID0gRlhfQWxsb2MoIEZYX0JZVEUsIGRlc3Rfc2l6ZSArIDEpOworICAgICAgICBpZiAoZGVzdF9idWYgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGRlc3RfYnVmW2Rlc3Rfc2l6ZV0gPSAnXDAnOworICAgICAgICBwRGVjb2Rlci0+RGVjb2RlKGRlc3RfYnVmLCBkZXN0X3NpemUsIHNyY19idWYsIG9mZnNldCwgYkVhcmx5Q2hhbmdlKTsKKyAgICAgICAgZGVsZXRlIHBEZWNvZGVyOworICAgIH0gZWxzZSB7CisgICAgICAgIEZsYXRlVW5jb21wcmVzcyhzcmNfYnVmLCBzcmNfc2l6ZSwgZXN0aW1hdGVkX3NpemUsIGRlc3RfYnVmLCBkZXN0X3NpemUsIG9mZnNldCk7CisgICAgfQorICAgIGlmIChwcmVkaWN0b3JfdHlwZSA9PSAwKSB7CisgICAgICAgIHJldHVybiBvZmZzZXQ7CisgICAgfQorICAgIGlmIChwcmVkaWN0b3JfdHlwZSA9PSAyKSB7CisgICAgICAgIFBOR19QcmVkaWN0b3IoZGVzdF9idWYsIGRlc3Rfc2l6ZSwgQ29sb3JzLCBCaXRzUGVyQ29tcG9uZW50LCBDb2x1bW5zKTsKKyAgICB9IGVsc2UgaWYgKHByZWRpY3Rvcl90eXBlID09IDEpIHsKKyAgICAgICAgVElGRl9QcmVkaWN0b3IoZGVzdF9idWYsIGRlc3Rfc2l6ZSwgQ29sb3JzLCBCaXRzUGVyQ29tcG9uZW50LCBDb2x1bW5zKTsKKyAgICB9CisgICAgcmV0dXJuIG9mZnNldDsKK30KK0ZYX0JPT0wgQ0NvZGVjX0ZsYXRlTW9kdWxlOjpFbmNvZGUoY29uc3QgRlhfQllURSogc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmVkaWN0b3IsIGludCBDb2xvcnMsIGludCBCaXRzUGVyQ29tcG9uZW50LCBpbnQgQ29sdW1ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkKK3sKKyAgICBpZiAocHJlZGljdG9yICE9IDIgJiYgcHJlZGljdG9yIDwgMTApIHsKKyAgICAgICAgcmV0dXJuIEVuY29kZShzcmNfYnVmLCBzcmNfc2l6ZSwgZGVzdF9idWYsIGRlc3Rfc2l6ZSk7CisgICAgfQorICAgIEZYX0JPT0wgcmV0ID0gRkFMU0U7CisgICAgRlhfTFBCWVRFIHBTcmNCdWYgPSBOVUxMOworICAgIHBTcmNCdWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBzcmNfc2l6ZSk7CisgICAgaWYgKHBTcmNCdWYgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEZYU1lTX21lbWNweTMyKHBTcmNCdWYsIHNyY19idWYsIHNyY19zaXplKTsKKyAgICBpZiAocHJlZGljdG9yID09IDIpIHsKKyAgICAgICAgVElGRl9QcmVkaWN0b3JFbmNvZGUocFNyY0J1Ziwgc3JjX3NpemUsIENvbG9ycywgQml0c1BlckNvbXBvbmVudCwgQ29sdW1ucyk7CisgICAgfSBlbHNlIGlmIChwcmVkaWN0b3IgPj0gMTApIHsKKyAgICAgICAgUE5HX1ByZWRpY3RvckVuY29kZShwU3JjQnVmLCBzcmNfc2l6ZSwgcHJlZGljdG9yLCBDb2xvcnMsIEJpdHNQZXJDb21wb25lbnQsIENvbHVtbnMpOworICAgIH0KKyAgICByZXQgPSBFbmNvZGUocFNyY0J1Ziwgc3JjX3NpemUsIGRlc3RfYnVmLCBkZXN0X3NpemUpOworICAgIEZYX0ZyZWUocFNyY0J1Zik7CisgICAgcmV0dXJuIHJldDsKK30KK0ZYX0JPT0wgQ0NvZGVjX0ZsYXRlTW9kdWxlOjpFbmNvZGUoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkKK3sKKyAgICBkZXN0X3NpemUgPSBzcmNfc2l6ZSArIHNyY19zaXplIC8gMTAwMCArIDEyOworICAgIGRlc3RfYnVmID0gRlhfQWxsb2MoIEZYX0JZVEUsIGRlc3Rfc2l6ZSk7CisgICAgaWYgKGRlc3RfYnVmID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICB1bnNpZ25lZCBsb25nIHRlbXBfc2l6ZSA9IGRlc3Rfc2l6ZTsKKyAgICBGUERGQVBJX0ZsYXRlQ29tcHJlc3MoZGVzdF9idWYsICZ0ZW1wX3NpemUsIHNyY19idWYsIHNyY19zaXplKTsKKyAgICBkZXN0X3NpemUgPSAoRlhfRFdPUkQpdGVtcF9zaXplOworICAgIHJldHVybiBUUlVFOworfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9jb2RlYy9meF9jb2RlY19pY2MuY3BwIGIvY29yZS9zcmMvZnhjb2RlYy9jb2RlYy9meF9jb2RlY19pY2MuY3BwCmluZGV4IDY1NjE3NjQuLjIyNjU5YmEgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvY29kZWMvZnhfY29kZWNfaWNjLmNwcAorKysgYi9jb3JlL3NyYy9meGNvZGVjL2NvZGVjL2Z4X2NvZGVjX2ljYy5jcHAKQEAgLTEsMTM2MCArMSwxMzYwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgiDQotI2luY2x1ZGUgImNvZGVjX2ludC5oIg0KLSNpbmNsdWRlICIuLi9sY21zMi9pbmNsdWRlL2Z4X2xjbXMyLmgiDQotRlhfQk9PTCBNRDVDb21wdXRlSUQoIEZYX0xQQ1ZPSUQgYnVmLCBGWF9EV09SRCBkd1NpemUsIEZYX0JZVEUgSURbMTZdICkNCi17DQotICAgIHJldHVybiBjbXNNRDVjb21wdXRlSURFeHQoYnVmLCBkd1NpemUsIElEKTsNCi19DQotc3RydWN0IENMY21zQ21tIDogcHVibGljIENGWF9PYmplY3Qgew0KLSAgICBjbXNIVFJBTlNGT1JNIG1faFRyYW5zZm9ybTsNCi0gICAgaW50CQkJbV9uU3JjQ29tcG9uZW50czsNCi0gICAgaW50CQkJbV9uRHN0Q29tcG9uZW50czsNCi0gICAgRlhfQk9PTAkJbV9iTGFiOw0KLX07DQotZXh0ZXJuICJDIiB7DQotICAgIGludCBvdXJIYW5kbGVyKGludCBFcnJvckNvZGUsIGNvbnN0IGNoYXIgKkVycm9yVGV4dCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi19Ow0KLUZYX0JPT0wgQ2hlY2tDb21wb25lbnRzKGNtc0NvbG9yU3BhY2VTaWduYXR1cmUgY3MsIGludCBuQ29tcG9uZW50cywgRlhfQk9PTCBiRHN0KQ0KLXsNCi0gICAgaWYgKG5Db21wb25lbnRzIDw9IDAgfHwgbkNvbXBvbmVudHMgPiAxNSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHN3aXRjaChjcykgew0KLSAgICAgICAgY2FzZSBjbXNTaWdMYWJEYXRhOg0KLSAgICAgICAgICAgIGlmIChuQ29tcG9uZW50cyA8IDMpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgY21zU2lnR3JheURhdGE6DQotICAgICAgICAgICAgaWYgKGJEc3QgJiYgbkNvbXBvbmVudHMgIT0gMSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfSBlbHNlIGlmICghYkRzdCAmJiBuQ29tcG9uZW50cyA+IDIpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgY21zU2lnUmdiRGF0YToNCi0gICAgICAgICAgICBpZiAoYkRzdCAmJiBuQ29tcG9uZW50cyAhPSAzKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIGNtc1NpZ0NteWtEYXRhOg0KLSAgICAgICAgICAgIGlmIChiRHN0ICYmIG5Db21wb25lbnRzICE9IDQpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgaWYgKG5Db21wb25lbnRzICE9IDMpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBicmVhazsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotdm9pZCogSWNjTGliX0NyZWF0ZVRyYW5zZm9ybShjb25zdCB1bnNpZ25lZCBjaGFyKiBwU3JjUHJvZmlsZURhdGEsIHVuc2lnbmVkIGludCBkd1NyY1Byb2ZpbGVTaXplLCBpbnQgblNyY0NvbXBvbmVudHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwRHN0UHJvZmlsZURhdGEsIHVuc2lnbmVkIGludCBkd0RzdFByb2ZpbGVTaXplLCBpbnQgbkRzdENvbXBvbmVudHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW50ZW50LCBGWF9EV09SRCBkd1NyY0Zvcm1hdCA9IEljY19GT1JNQVRfREVGQVVMVCwgRlhfRFdPUkQgZHdEc3RGb3JtYXQgPSBJY2NfRk9STUFUX0RFRkFVTFQpDQotew0KLSAgICBjbXNIUFJPRklMRSBzcmNQcm9maWxlID0gTlVMTDsNCi0gICAgY21zSFBST0ZJTEUgZHN0UHJvZmlsZSA9IE5VTEw7DQotICAgIGNtc0hUUkFOU0ZPUk0gaFRyYW5zZm9ybSA9IE5VTEw7DQotICAgIENMY21zQ21tKiBwQ21tID0gTlVMTDsNCi0gICAgc3JjUHJvZmlsZSA9IGNtc09wZW5Qcm9maWxlRnJvbU1lbSgodm9pZCopcFNyY1Byb2ZpbGVEYXRhLCBkd1NyY1Byb2ZpbGVTaXplKTsNCi0gICAgaWYgKHNyY1Byb2ZpbGUgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYocERzdFByb2ZpbGVEYXRhID09IE5VTEwgJiYgZHdEc3RQcm9maWxlU2l6ZSA9PSAwICYmIG5Ec3RDb21wb25lbnRzID09IDMpIHsNCi0gICAgICAgIGRzdFByb2ZpbGUgPSBjbXNDcmVhdGVfc1JHQlByb2ZpbGUoKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGRzdFByb2ZpbGUgPSBjbXNPcGVuUHJvZmlsZUZyb21NZW0oKHZvaWQqKXBEc3RQcm9maWxlRGF0YSwgZHdEc3RQcm9maWxlU2l6ZSk7DQotICAgIH0NCi0gICAgaWYgKGRzdFByb2ZpbGUgPT0gTlVMTCkgew0KLSAgICAgICAgY21zQ2xvc2VQcm9maWxlKHNyY1Byb2ZpbGUpOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaW50IHNyY0Zvcm1hdDsNCi0gICAgRlhfQk9PTCBiTGFiID0gRkFMU0U7DQotICAgIGNtc0NvbG9yU3BhY2VTaWduYXR1cmUgc3JjQ1MgPSBjbXNHZXRDb2xvclNwYWNlKHNyY1Byb2ZpbGUpOw0KLSAgICBpZiAoIUNoZWNrQ29tcG9uZW50cyhzcmNDUywgblNyY0NvbXBvbmVudHMsIEZBTFNFKSkgew0KLSAgICAgICAgY21zQ2xvc2VQcm9maWxlKHNyY1Byb2ZpbGUpOw0KLSAgICAgICAgY21zQ2xvc2VQcm9maWxlKGRzdFByb2ZpbGUpOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKHNyY0NTID09IGNtc1NpZ0xhYkRhdGEpIHsNCi0gICAgICAgIHNyY0Zvcm1hdCA9IENPTE9SU1BBQ0VfU0goUFRfTGFiKSB8IENIQU5ORUxTX1NIKG5TcmNDb21wb25lbnRzKSB8IEJZVEVTX1NIKDApOw0KLSAgICAgICAgYkxhYiA9IFRSVUU7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBzcmNGb3JtYXQgPSBDT0xPUlNQQUNFX1NIKFBUX0FOWSkgfCBDSEFOTkVMU19TSChuU3JjQ29tcG9uZW50cykgfCBCWVRFU19TSCgxKTsNCi0gICAgICAgIGlmIChzcmNDUyA9PSBjbXNTaWdSZ2JEYXRhICYmIFRfRE9TV0FQKGR3U3JjRm9ybWF0KSkgew0KLSAgICAgICAgICAgIHNyY0Zvcm1hdCB8PSBET1NXQVBfU0goMSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgY21zQ29sb3JTcGFjZVNpZ25hdHVyZSBkc3RDUyA9IGNtc0dldENvbG9yU3BhY2UoZHN0UHJvZmlsZSk7DQotICAgIGlmICghQ2hlY2tDb21wb25lbnRzKGRzdENTLCBuRHN0Q29tcG9uZW50cywgVFJVRSkpIHsNCi0gICAgICAgIGNtc0Nsb3NlUHJvZmlsZShzcmNQcm9maWxlKTsNCi0gICAgICAgIGNtc0Nsb3NlUHJvZmlsZShkc3RQcm9maWxlKTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHN3aXRjaChkc3RDUykgew0KLSAgICAgICAgY2FzZSBjbXNTaWdHcmF5RGF0YToNCi0gICAgICAgICAgICBoVHJhbnNmb3JtID0gY21zQ3JlYXRlVHJhbnNmb3JtKHNyY1Byb2ZpbGUsIHNyY0Zvcm1hdCwgZHN0UHJvZmlsZSwgVFlQRV9HUkFZXzgsIGludGVudCwgMCk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIGNtc1NpZ1JnYkRhdGE6DQotICAgICAgICAgICAgaFRyYW5zZm9ybSA9IGNtc0NyZWF0ZVRyYW5zZm9ybShzcmNQcm9maWxlLCBzcmNGb3JtYXQsIGRzdFByb2ZpbGUsIFRZUEVfQkdSXzgsIGludGVudCwgMCk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIGNtc1NpZ0NteWtEYXRhOg0KLSAgICAgICAgICAgIGhUcmFuc2Zvcm0gPSBjbXNDcmVhdGVUcmFuc2Zvcm0oc3JjUHJvZmlsZSwgc3JjRm9ybWF0LCBkc3RQcm9maWxlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVF9ET1NXQVAoZHdEc3RGb3JtYXQpID8gVFlQRV9LWU1DXzggOiBUWVBFX0NNWUtfOCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudCwgMCk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBkZWZhdWx0Og0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICB9DQotICAgIGlmIChoVHJhbnNmb3JtID09IE5VTEwpIHsNCi0gICAgICAgIGNtc0Nsb3NlUHJvZmlsZShzcmNQcm9maWxlKTsNCi0gICAgICAgIGNtc0Nsb3NlUHJvZmlsZShkc3RQcm9maWxlKTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHBDbW0gPSBGWF9ORVcgQ0xjbXNDbW07DQotICAgIGlmIChwQ21tID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHBDbW0tPm1fblNyY0NvbXBvbmVudHMgPSBuU3JjQ29tcG9uZW50czsNCi0gICAgcENtbS0+bV9uRHN0Q29tcG9uZW50cyA9IG5Ec3RDb21wb25lbnRzOw0KLSAgICBwQ21tLT5tX2hUcmFuc2Zvcm0gPSBoVHJhbnNmb3JtOw0KLSAgICBwQ21tLT5tX2JMYWIgPSBiTGFiOw0KLSAgICBjbXNDbG9zZVByb2ZpbGUoc3JjUHJvZmlsZSk7DQotICAgIGNtc0Nsb3NlUHJvZmlsZShkc3RQcm9maWxlKTsNCi0gICAgcmV0dXJuIHBDbW07DQotfQ0KLXZvaWQqIEljY0xpYl9DcmVhdGVUcmFuc2Zvcm1fc1JHQihjb25zdCB1bnNpZ25lZCBjaGFyKiBwUHJvZmlsZURhdGEsIHVuc2lnbmVkIGludCBkd1Byb2ZpbGVTaXplLCBpbnQgbkNvbXBvbmVudHMsIGludCBpbnRlbnQsIEZYX0RXT1JEIGR3U3JjRm9ybWF0KQ0KLXsNCi0gICAgcmV0dXJuIEljY0xpYl9DcmVhdGVUcmFuc2Zvcm0ocFByb2ZpbGVEYXRhLCBkd1Byb2ZpbGVTaXplLCBuQ29tcG9uZW50cywgTlVMTCwgMCwgMywgaW50ZW50LCBkd1NyY0Zvcm1hdCk7DQotfQ0KLXZvaWQgSWNjTGliX0Rlc3Ryb3lUcmFuc2Zvcm0odm9pZCogcFRyYW5zZm9ybSkNCi17DQotICAgIGlmIChwVHJhbnNmb3JtID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBjbXNEZWxldGVUcmFuc2Zvcm0oKChDTGNtc0NtbSopcFRyYW5zZm9ybSktPm1faFRyYW5zZm9ybSk7DQotICAgIGRlbGV0ZSAoQ0xjbXNDbW0qKXBUcmFuc2Zvcm07DQotfQ0KLXZvaWQgSWNjTGliX1RyYW5zbGF0ZSh2b2lkKiBwVHJhbnNmb3JtLCBGWF9GTE9BVCogcFNyY1ZhbHVlcywgRlhfRkxPQVQqIHBEZXN0VmFsdWVzKQ0KLXsNCi0gICAgaWYgKHBUcmFuc2Zvcm0gPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENMY21zQ21tKiBwID0gKENMY21zQ21tKilwVHJhbnNmb3JtOw0KLSAgICBGWF9CWVRFIG91dHB1dFs0XTsNCi0gICAgaWYgKHAtPm1fYkxhYikgew0KLSAgICAgICAgQ0ZYX0ZpeGVkQnVmR3Jvdzxkb3VibGUsIDE2PiBpbnB1dHMocC0+bV9uU3JjQ29tcG9uZW50cyk7DQotICAgICAgICBkb3VibGUqIGlucHV0ID0gaW5wdXRzOw0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwLT5tX25TcmNDb21wb25lbnRzOyBpICsrKSB7DQotICAgICAgICAgICAgaW5wdXRbaV0gPSBwU3JjVmFsdWVzW2ldOw0KLSAgICAgICAgfQ0KLSAgICAgICAgY21zRG9UcmFuc2Zvcm0ocC0+bV9oVHJhbnNmb3JtLCBpbnB1dCwgb3V0cHV0LCAxKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIENGWF9GaXhlZEJ1Zkdyb3c8RlhfQllURSwgMTY+IGlucHV0cyhwLT5tX25TcmNDb21wb25lbnRzKTsNCi0gICAgICAgIEZYX0JZVEUqIGlucHV0ID0gaW5wdXRzOw0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwLT5tX25TcmNDb21wb25lbnRzOyBpICsrKSB7DQotICAgICAgICAgICAgaWYgKHBTcmNWYWx1ZXNbaV0gPiAxLjBmKSB7DQotICAgICAgICAgICAgICAgIGlucHV0W2ldID0gMjU1Ow0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAocFNyY1ZhbHVlc1tpXSA8IDApIHsNCi0gICAgICAgICAgICAgICAgaW5wdXRbaV0gPSAwOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGlucHV0W2ldID0gKGludCkocFNyY1ZhbHVlc1tpXSAqIDI1NS4wZik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgY21zRG9UcmFuc2Zvcm0ocC0+bV9oVHJhbnNmb3JtLCBpbnB1dCwgb3V0cHV0LCAxKTsNCi0gICAgfQ0KLSAgICBzd2l0Y2gocC0+bV9uRHN0Q29tcG9uZW50cykgew0KLSAgICAgICAgY2FzZSAxOg0KLSAgICAgICAgICAgIHBEZXN0VmFsdWVzWzBdID0gb3V0cHV0WzBdIC8gMjU1LjBmOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSAzOg0KLSAgICAgICAgICAgIHBEZXN0VmFsdWVzWzBdID0gb3V0cHV0WzJdIC8gMjU1LjBmOw0KLSAgICAgICAgICAgIHBEZXN0VmFsdWVzWzFdID0gb3V0cHV0WzFdIC8gMjU1LjBmOw0KLSAgICAgICAgICAgIHBEZXN0VmFsdWVzWzJdID0gb3V0cHV0WzBdIC8gMjU1LjBmOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSA0Og0KLSAgICAgICAgICAgIHBEZXN0VmFsdWVzWzBdID0gb3V0cHV0WzBdIC8gMjU1LjBmOw0KLSAgICAgICAgICAgIHBEZXN0VmFsdWVzWzFdID0gb3V0cHV0WzFdIC8gMjU1LjBmOw0KLSAgICAgICAgICAgIHBEZXN0VmFsdWVzWzJdID0gb3V0cHV0WzJdIC8gMjU1LjBmOw0KLSAgICAgICAgICAgIHBEZXN0VmFsdWVzWzNdID0gb3V0cHV0WzNdIC8gMjU1LjBmOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICB9DQotfQ0KLXZvaWQgSWNjTGliX1RyYW5zbGF0ZUltYWdlKHZvaWQqIHBUcmFuc2Zvcm0sIHVuc2lnbmVkIGNoYXIqIHBEZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBwU3JjLCBpbnQgcGl4ZWxzKQ0KLXsNCi0gICAgY21zRG9UcmFuc2Zvcm0oKChDTGNtc0NtbSopcFRyYW5zZm9ybSktPm1faFRyYW5zZm9ybSwgKHZvaWQqKXBTcmMsIHBEZXN0LCBwaXhlbHMpOw0KLX0NCi1GWF9MUFZPSUQgQ3JlYXRlUHJvZmlsZV9HcmF5KGRvdWJsZSBnYW1tYSkNCi17DQotICAgIGNtc0NJRXh5WSogRDUwID0gKGNtc0NJRXh5WSopY21zRDUwX3h5WSgpOw0KLSAgICBpZiAoIWNtc1doaXRlUG9pbnRGcm9tVGVtcChENTAsIDY1MDQpKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBjbXNUb25lQ3VydmUqIGN1cnZlID0gY21zQnVpbGRHYW1tYShOVUxMLCBnYW1tYSk7DQotICAgIGlmIChjdXJ2ZSA9PSBOVUxMKQl7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBGWF9MUFZPSUQgcHJvZmlsZSA9IGNtc0NyZWF0ZUdyYXlQcm9maWxlKEQ1MCwgY3VydmUpOw0KLSAgICBjbXNGcmVlVG9uZUN1cnZlKGN1cnZlKTsNCi0gICAgcmV0dXJuIHByb2ZpbGU7DQotfQ0KLUlDb2RlY19JY2NNb2R1bGU6OkljY0NTIEdldFByb2ZpbGVDU0Zyb21IYW5kbGUoRlhfTFBWT0lEIHBQcm9maWxlKQ0KLXsNCi0gICAgaWYgKHBQcm9maWxlID09IE5VTEwpCXsNCi0gICAgICAgIHJldHVybiBJQ29kZWNfSWNjTW9kdWxlOjpJY2NDU19Vbmtub3duOw0KLSAgICB9DQotICAgIHN3aXRjaCAoY21zR2V0Q29sb3JTcGFjZShwUHJvZmlsZSkpIHsNCi0gICAgICAgIGNhc2UgY21zU2lnWFlaRGF0YToNCi0gICAgICAgICAgICByZXR1cm4gSUNvZGVjX0ljY01vZHVsZTo6SWNjQ1NfWFlaOw0KLSAgICAgICAgY2FzZSBjbXNTaWdMYWJEYXRhOg0KLSAgICAgICAgICAgIHJldHVybiBJQ29kZWNfSWNjTW9kdWxlOjpJY2NDU19MYWI7DQotICAgICAgICBjYXNlIGNtc1NpZ0x1dkRhdGE6DQotICAgICAgICAgICAgcmV0dXJuIElDb2RlY19JY2NNb2R1bGU6OkljY0NTX0x1djsNCi0gICAgICAgIGNhc2UgY21zU2lnWUNiQ3JEYXRhOg0KLSAgICAgICAgICAgIHJldHVybiBJQ29kZWNfSWNjTW9kdWxlOjpJY2NDU19ZQ2JDcjsNCi0gICAgICAgIGNhc2UgY21zU2lnWXh5RGF0YToNCi0gICAgICAgICAgICByZXR1cm4gSUNvZGVjX0ljY01vZHVsZTo6SWNjQ1NfWXh5Ow0KLSAgICAgICAgY2FzZSBjbXNTaWdSZ2JEYXRhOg0KLSAgICAgICAgICAgIHJldHVybiBJQ29kZWNfSWNjTW9kdWxlOjpJY2NDU19SZ2I7DQotICAgICAgICBjYXNlIGNtc1NpZ0dyYXlEYXRhOg0KLSAgICAgICAgICAgIHJldHVybiBJQ29kZWNfSWNjTW9kdWxlOjpJY2NDU19HcmF5Ow0KLSAgICAgICAgY2FzZSBjbXNTaWdIc3ZEYXRhOg0KLSAgICAgICAgICAgIHJldHVybiBJQ29kZWNfSWNjTW9kdWxlOjpJY2NDU19Ic3Y7DQotICAgICAgICBjYXNlIGNtc1NpZ0hsc0RhdGE6DQotICAgICAgICAgICAgcmV0dXJuIElDb2RlY19JY2NNb2R1bGU6OkljY0NTX0hsczsNCi0gICAgICAgIGNhc2UgY21zU2lnQ215a0RhdGE6DQotICAgICAgICAgICAgcmV0dXJuIElDb2RlY19JY2NNb2R1bGU6OkljY0NTX0NteWs7DQotICAgICAgICBjYXNlIGNtc1NpZ0NteURhdGE6DQotICAgICAgICAgICAgcmV0dXJuIElDb2RlY19JY2NNb2R1bGU6OkljY0NTX0NteTsNCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgcmV0dXJuIElDb2RlY19JY2NNb2R1bGU6OkljY0NTX1Vua25vd247DQotICAgIH0NCi19DQotSUNvZGVjX0ljY01vZHVsZTo6SWNjQ1MgQ0NvZGVjX0ljY01vZHVsZTo6R2V0UHJvZmlsZUNTKEZYX0xQQ0JZVEUgcFByb2ZpbGVEYXRhLCB1bnNpZ25lZCBpbnQgZHdQcm9maWxlU2l6ZSkNCi17DQotICAgIElDb2RlY19JY2NNb2R1bGU6OkljY0NTIGNzOw0KLSAgICBjbXNIUFJPRklMRSBoUHJvZmlsZSA9IGNtc09wZW5Qcm9maWxlRnJvbU1lbSgodm9pZCopcFByb2ZpbGVEYXRhLCBkd1Byb2ZpbGVTaXplKTsNCi0gICAgaWYgKGhQcm9maWxlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBJY2NDU19Vbmtub3duOw0KLSAgICB9DQotICAgIGNzID0gR2V0UHJvZmlsZUNTRnJvbUhhbmRsZShoUHJvZmlsZSk7DQotICAgIGlmIChoUHJvZmlsZSkJew0KLSAgICAgICAgY21zQ2xvc2VQcm9maWxlKGhQcm9maWxlKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gY3M7DQotfQ0KLUlDb2RlY19JY2NNb2R1bGU6OkljY0NTIENDb2RlY19JY2NNb2R1bGU6OkdldFByb2ZpbGVDUyhJRlhfRmlsZVJlYWQqIHBGaWxlKQ0KLXsNCi0gICAgaWYgKHBGaWxlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBJY2NDU19Vbmtub3duOw0KLSAgICB9DQotICAgIElDb2RlY19JY2NNb2R1bGU6OkljY0NTIGNzOw0KLSAgICBGWF9EV09SRCBkd1NpemUgPSAoRlhfRFdPUkQpcEZpbGUtPkdldFNpemUoKTsNCi0gICAgRlhfTFBCWVRFIHBCdWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBkd1NpemUpOw0KLSAgICBpZiAocEJ1ZiA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gSWNjQ1NfVW5rbm93bjsNCi0gICAgfQ0KLSAgICBwRmlsZS0+UmVhZEJsb2NrKHBCdWYsIDAsIGR3U2l6ZSk7DQotICAgIGNzID0gR2V0UHJvZmlsZUNTKHBCdWYsIGR3U2l6ZSk7DQotICAgIEZYX0ZyZWUocEJ1Zik7DQotICAgIHJldHVybiBjczsNCi19DQotRlhfRFdPUkQgVHJhbnNmZXJQcm9maWxlVHlwZShGWF9MUFZPSUQgcFByb2ZpbGUsIEZYX0RXT1JEIGR3Rm9ybWF0KQ0KLXsNCi0gICAgY21zQ29sb3JTcGFjZVNpZ25hdHVyZSBjcyA9IGNtc0dldENvbG9yU3BhY2UocFByb2ZpbGUpOw0KLSAgICBzd2l0Y2ggKGNzKSB7DQotICAgICAgICBjYXNlIGNtc1NpZ1hZWkRhdGE6DQotICAgICAgICAgICAgcmV0dXJuIFRZUEVfWFlaXzE2Ow0KLSAgICAgICAgY2FzZSBjbXNTaWdMYWJEYXRhOg0KLSAgICAgICAgICAgIHJldHVybiBUWVBFX0xhYl9EQkw7DQotICAgICAgICBjYXNlIGNtc1NpZ0x1dkRhdGE6DQotICAgICAgICAgICAgcmV0dXJuIFRZUEVfWVVWXzg7DQotICAgICAgICBjYXNlIGNtc1NpZ1lDYkNyRGF0YToNCi0gICAgICAgICAgICByZXR1cm4gVFlQRV9ZQ2JDcl84Ow0KLSAgICAgICAgY2FzZSBjbXNTaWdZeHlEYXRhOg0KLSAgICAgICAgICAgIHJldHVybiBUWVBFX1l4eV8xNjsNCi0gICAgICAgIGNhc2UgY21zU2lnUmdiRGF0YToNCi0gICAgICAgICAgICByZXR1cm4gVF9ET1NXQVAoZHdGb3JtYXQpID8gVFlQRV9SR0JfOCA6IFRZUEVfQkdSXzg7DQotICAgICAgICBjYXNlIGNtc1NpZ0dyYXlEYXRhOg0KLSAgICAgICAgICAgIHJldHVybiBUWVBFX0dSQVlfODsNCi0gICAgICAgIGNhc2UgY21zU2lnSHN2RGF0YToNCi0gICAgICAgICAgICByZXR1cm4gVFlQRV9IU1ZfODsNCi0gICAgICAgIGNhc2UgY21zU2lnSGxzRGF0YToNCi0gICAgICAgICAgICByZXR1cm4gVFlQRV9ITFNfODsNCi0gICAgICAgIGNhc2UgY21zU2lnQ215a0RhdGE6DQotICAgICAgICAgICAgcmV0dXJuIFRfRE9TV0FQKGR3Rm9ybWF0KSA/IFRZUEVfS1lNQ184IDogVFlQRV9DTVlLXzg7DQotICAgICAgICBjYXNlIGNtc1NpZ0NteURhdGE6DQotICAgICAgICAgICAgcmV0dXJuIFRZUEVfQ01ZXzg7DQotICAgICAgICBjYXNlIGNtc1NpZ01DSDVEYXRhOg0KLSAgICAgICAgICAgIHJldHVybiBUX0RPU1dBUChkd0Zvcm1hdCkgPyBUWVBFX0tZTUM1XzggOiBUWVBFX0NNWUs1Xzg7DQotICAgICAgICBjYXNlIGNtc1NpZ01DSDZEYXRhOg0KLSAgICAgICAgICAgIHJldHVybiBUWVBFX0NNWUs2Xzg7DQotICAgICAgICBjYXNlIGNtc1NpZ01DSDdEYXRhOg0KLSAgICAgICAgICAgIHJldHVybiBUX0RPU1dBUChkd0Zvcm1hdCkgPyBUWVBFX0tZTUM3XzggOiBUWVBFX0NNWUs3Xzg7DQotICAgICAgICBjYXNlIGNtc1NpZ01DSDhEYXRhOg0KLSAgICAgICAgICAgIHJldHVybiBUX0RPU1dBUChkd0Zvcm1hdCkgPyBUWVBFX0tZTUM4XzggOiBUWVBFX0NNWUs4Xzg7DQotICAgICAgICBjYXNlIGNtc1NpZ01DSDlEYXRhOg0KLSAgICAgICAgICAgIHJldHVybiBUX0RPU1dBUChkd0Zvcm1hdCkgPyBUWVBFX0tZTUM5XzggOiBUWVBFX0NNWUs5Xzg7DQotICAgICAgICBjYXNlIGNtc1NpZ01DSEFEYXRhOg0KLSAgICAgICAgICAgIHJldHVybiBUX0RPU1dBUChkd0Zvcm1hdCkgPyBUWVBFX0tZTUMxMF84IDogVFlQRV9DTVlLMTBfODsNCi0gICAgICAgIGNhc2UgY21zU2lnTUNIQkRhdGE6DQotICAgICAgICAgICAgcmV0dXJuIFRfRE9TV0FQKGR3Rm9ybWF0KSA/IFRZUEVfS1lNQzExXzggOiBUWVBFX0NNWUsxMV84Ow0KLSAgICAgICAgY2FzZSBjbXNTaWdNQ0hDRGF0YToNCi0gICAgICAgICAgICByZXR1cm4gVF9ET1NXQVAoZHdGb3JtYXQpID8gVFlQRV9LWU1DMTJfOCA6IFRZUEVfQ01ZSzEyXzg7DQotICAgICAgICBkZWZhdWx0Og0KLSAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotfQ0KLWNsYXNzIENGWF9JY2NQcm9maWxlQ2FjaGUgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENGWF9JY2NQcm9maWxlQ2FjaGUoKTsNCi0gICAgfkNGWF9JY2NQcm9maWxlQ2FjaGUoKTsNCi0gICAgRlhfTFBWT0lEIG1fcFByb2ZpbGU7DQotICAgIEZYX0RXT1JECW1fZHdSYXRlOw0KLXByb3RlY3RlZDoNCi0gICAgdm9pZAlQdXJnZSgpOw0KLX07DQotQ0ZYX0ljY1Byb2ZpbGVDYWNoZTo6Q0ZYX0ljY1Byb2ZpbGVDYWNoZSgpDQotew0KLSAgICBtX3BQcm9maWxlID0gTlVMTDsNCi0gICAgbV9kd1JhdGUgPSAxOw0KLX0NCi1DRlhfSWNjUHJvZmlsZUNhY2hlOjp+Q0ZYX0ljY1Byb2ZpbGVDYWNoZSgpDQotew0KLSAgICBpZiAobV9wUHJvZmlsZSkgew0KLSAgICAgICAgY21zQ2xvc2VQcm9maWxlKG1fcFByb2ZpbGUpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0ZYX0ljY1Byb2ZpbGVDYWNoZTo6UHVyZ2UoKQ0KLXsNCi19DQotY2xhc3MgQ0ZYX0ljY1RyYW5zZm9ybUNhY2hlIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDRlhfSWNjVHJhbnNmb3JtQ2FjaGUoQ0xjbXNDbW0qIHBDbW0gPSBOVUxMKTsNCi0gICAgfkNGWF9JY2NUcmFuc2Zvcm1DYWNoZSgpOw0KLSAgICBGWF9MUFZPSUQJbV9wSWNjVHJhbnNmb3JtOw0KLSAgICBGWF9EV09SRAkJbV9kd1JhdGU7DQotICAgIENMY21zQ21tKgkJbV9wQ21tOw0KLXByb3RlY3RlZDoNCi0gICAgdm9pZAkJCVB1cmdlKCk7DQotfTsNCi1DRlhfSWNjVHJhbnNmb3JtQ2FjaGU6OkNGWF9JY2NUcmFuc2Zvcm1DYWNoZShDTGNtc0NtbSogcENtbSkNCi17DQotICAgIG1fcEljY1RyYW5zZm9ybSA9IE5VTEw7DQotICAgIG1fZHdSYXRlID0gMTsNCi0gICAgbV9wQ21tID0gcENtbTsNCi19DQotQ0ZYX0ljY1RyYW5zZm9ybUNhY2hlOjp+Q0ZYX0ljY1RyYW5zZm9ybUNhY2hlKCkNCi17DQotICAgIGlmIChtX3BJY2NUcmFuc2Zvcm0pIHsNCi0gICAgICAgIGNtc0RlbGV0ZVRyYW5zZm9ybShtX3BJY2NUcmFuc2Zvcm0pOw0KLSAgICB9DQotICAgIGlmIChtX3BDbW0pIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wQ21tKTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9JY2NUcmFuc2Zvcm1DYWNoZTo6UHVyZ2UoKQ0KLXsNCi19DQotY2xhc3MgQ0ZYX0J5dGVTdHJpbmdLZXkgOiBwdWJsaWMgQ0ZYX0JpbmFyeUJ1Zg0KLXsNCi1wdWJsaWM6DQotICAgIENGWF9CeXRlU3RyaW5nS2V5KCkgOiBDRlhfQmluYXJ5QnVmKCkge30NCi0gICAgQ0ZYX0J5dGVTdHJpbmdLZXkmCQlvcGVyYXRvciA8PCAoRlhfRFdPUkQgaSk7DQotfTsNCi1DRlhfQnl0ZVN0cmluZ0tleSYgQ0ZYX0J5dGVTdHJpbmdLZXk6Om9wZXJhdG9yIDw8IChGWF9EV09SRCBpKQ0KLXsNCi0gICAgQXBwZW5kQmxvY2soJmksIHNpemVvZihGWF9EV09SRCkpOw0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLUZYX0xQVk9JRCBDQ29kZWNfSWNjTW9kdWxlOjpDcmVhdGVQcm9maWxlKElDb2RlY19JY2NNb2R1bGU6OkljY1BhcmFtKiBwSWNjUGFyYW0sIEljY19DTEFTUyBpYywgQ0ZYX0JpbmFyeUJ1ZiogcFRyYW5zZm9ybUtleSkNCi17DQotICAgIENGWF9JY2NQcm9maWxlQ2FjaGUqIHBDYWNoZSA9IE5VTEw7DQotICAgIENGWF9CeXRlU3RyaW5nS2V5IGtleTsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgdGV4dDsNCi0gICAga2V5IDw8IHBJY2NQYXJhbS0+Q29sb3JTcGFjZSA8PCAocEljY1BhcmFtLT5kd1Byb2ZpbGVUeXBlIHwgaWMgPDwgOCk7DQotICAgIEZYX0JZVEUgSURbMTZdOw0KLSAgICBzd2l0Y2ggKHBJY2NQYXJhbS0+ZHdQcm9maWxlVHlwZSkgew0KLSAgICAgICAgY2FzZSBJY2NfUEFSQU1UWVBFX05PTkU6DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICBjYXNlIEljY19QQVJBTVRZUEVfQlVGRkVSOg0KLSAgICAgICAgICAgIE1ENUNvbXB1dGVJRChwSWNjUGFyYW0tPnBQcm9maWxlRGF0YSwgcEljY1BhcmFtLT5kd1Byb2ZpbGVTaXplLCBJRCk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIEljY19QQVJBTVRZUEVfUEFSQU06DQotICAgICAgICAgICAgRlhTWVNfbWVtc2V0MzIoSUQsIDAsIDE2KTsNCi0gICAgICAgICAgICBzd2l0Y2ggKHBJY2NQYXJhbS0+Q29sb3JTcGFjZSkgew0KLSAgICAgICAgICAgICAgICBjYXNlIEljY0NTX0dyYXk6DQotICAgICAgICAgICAgICAgICAgICB0ZXh0LkZvcm1hdCgiJWxmIiwgcEljY1BhcmFtLT5HYW1tYSk7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoNCi0gICAgICAgICAgICAgICAgICAgIDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgTUQ1Q29tcHV0ZUlEKHRleHQuR2V0QnVmZmVyKDApLCB0ZXh0LkdldExlbmd0aCgpLCBJRCk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBkZWZhdWx0Og0KLSAgICAgICAgICAgIDsNCi0gICAgfQ0KLSAgICBrZXkuQXBwZW5kQmxvY2soSUQsIDE2KTsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgUHJvZmlsZUtleShrZXkuR2V0QnVmZmVyKCksIGtleS5HZXRTaXplKCkpOw0KLSAgICBBU1NFUlQocFRyYW5zZm9ybUtleSk7DQotICAgIHBUcmFuc2Zvcm1LZXktPkFwcGVuZEJsb2NrKFByb2ZpbGVLZXkuR2V0QnVmZmVyKDApLCBQcm9maWxlS2V5LkdldExlbmd0aCgpKTsNCi0gICAgaWYgKCFtX01hcFByb2ZpbGUuTG9va3VwKFByb2ZpbGVLZXksIChGWF9MUFZPSUQmKXBDYWNoZSkpIHsNCi0gICAgICAgIHBDYWNoZSA9IEZYX05FVyBDRlhfSWNjUHJvZmlsZUNhY2hlOw0KLSAgICAgICAgaWYgKHBDYWNoZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBzd2l0Y2ggKHBJY2NQYXJhbS0+ZHdQcm9maWxlVHlwZSkgew0KLSAgICAgICAgICAgIGNhc2UgSWNjX1BBUkFNVFlQRV9CVUZGRVI6DQotICAgICAgICAgICAgICAgIHBDYWNoZS0+bV9wUHJvZmlsZSA9IGNtc09wZW5Qcm9maWxlRnJvbU1lbShwSWNjUGFyYW0tPnBQcm9maWxlRGF0YSwgcEljY1BhcmFtLT5kd1Byb2ZpbGVTaXplKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSBJY2NfUEFSQU1UWVBFX1BBUkFNOg0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHBJY2NQYXJhbS0+Q29sb3JTcGFjZSkgew0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJY2NDU19SZ2I6DQotICAgICAgICAgICAgICAgICAgICAgICAgcENhY2hlLT5tX3BQcm9maWxlID0gY21zQ3JlYXRlX3NSR0JQcm9maWxlKCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICBjYXNlIEljY0NTX0dyYXk6DQotICAgICAgICAgICAgICAgICAgICAgICAgcENhY2hlLT5tX3BQcm9maWxlID0gQ3JlYXRlUHJvZmlsZV9HcmF5KHBJY2NQYXJhbS0+R2FtbWEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBkZWZhdWx0Og0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fTWFwUHJvZmlsZS5TZXRBdChQcm9maWxlS2V5LCBwQ2FjaGUpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcENhY2hlLT5tX2R3UmF0ZSsrOw0KLSAgICB9DQotICAgIHJldHVybiBwQ2FjaGUtPm1fcFByb2ZpbGU7DQotfQ0KLUZYX0xQVk9JRCBDQ29kZWNfSWNjTW9kdWxlOjpDcmVhdGVUcmFuc2Zvcm0oSUNvZGVjX0ljY01vZHVsZTo6SWNjUGFyYW0qIHBJbnB1dFBhcmFtLA0KLSAgICAgICAgSUNvZGVjX0ljY01vZHVsZTo6SWNjUGFyYW0qIHBPdXRwdXRQYXJhbSwNCi0gICAgICAgIElDb2RlY19JY2NNb2R1bGU6OkljY1BhcmFtKiBwUHJvb2ZQYXJhbSwNCi0gICAgICAgIEZYX0RXT1JEIGR3SW50ZW50LCBGWF9EV09SRCBkd0ZsYWcsIEZYX0RXT1JEIGR3UHJmSW50ZW50LCBGWF9EV09SRCBkd1ByZkZsYWcpDQotew0KLSAgICBDTGNtc0NtbSogcENtbSA9IE5VTEw7DQotICAgIEFTU0VSVChwSW5wdXRQYXJhbSAmJiBwT3V0cHV0UGFyYW0pOw0KLSAgICBDRlhfQnl0ZVN0cmluZ0tleSBrZXk7DQotICAgIEZYX0xQVk9JRCBwSW5wdXRQcm9maWxlID0gQ3JlYXRlUHJvZmlsZShwSW5wdXRQYXJhbSwgSWNjX0NMQVNTX0lOUFVULCAma2V5KTsNCi0gICAgaWYgKHBJbnB1dFByb2ZpbGUgPT0gTlVMTCkJew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgRlhfTFBWT0lEIHBPdXRwdXRQcm9maWxlID0gQ3JlYXRlUHJvZmlsZShwT3V0cHV0UGFyYW0sIEljY19DTEFTU19PVVRQVVQsICZrZXkpOw0KLSAgICBpZiAocE91dHB1dFByb2ZpbGUgPT0gTlVMTCkJew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgRlhfRFdPUkQgZHdJbnB1dFByb2ZpbGVUeXBlID0gVHJhbnNmZXJQcm9maWxlVHlwZShwSW5wdXRQcm9maWxlLCBwSW5wdXRQYXJhbS0+ZHdGb3JtYXQpOw0KLSAgICBGWF9EV09SRCBkd091dHB1dFByb2ZpbGVUeXBlID0gVHJhbnNmZXJQcm9maWxlVHlwZShwT3V0cHV0UHJvZmlsZSwgcE91dHB1dFBhcmFtLT5kd0Zvcm1hdCk7DQotICAgIGlmIChkd0lucHV0UHJvZmlsZVR5cGUgPT0gMCB8fCBkd091dHB1dFByb2ZpbGVUeXBlID09IDApIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIEZYX0xQVk9JRCBwUHJvb2ZQcm9maWxlID0gTlVMTDsNCi0gICAgaWYgKHBQcm9vZlBhcmFtKSB7DQotICAgICAgICBwUHJvb2ZQcm9maWxlID0gQ3JlYXRlUHJvZmlsZShwUHJvb2ZQYXJhbSwgSWNjX0NMQVNTX1BST09GLCAma2V5KTsNCi0gICAgfQ0KLSAgICBrZXkgPDwgZHdJbnB1dFByb2ZpbGVUeXBlIDw8IGR3T3V0cHV0UHJvZmlsZVR5cGUgPDwgZHdJbnRlbnQgPDwgZHdGbGFnIDw8IChwUHJvb2ZQcm9maWxlICE9IE5VTEwpIDw8IGR3UHJmSW50ZW50IDw8IGR3UHJmRmxhZzsNCi0gICAgQ0ZYX0J5dGVTdHJpbmdDIFRyYW5zZm9ybUtleShrZXkuR2V0QnVmZmVyKCksIGtleS5HZXRTaXplKCkpOw0KLSAgICBDRlhfSWNjVHJhbnNmb3JtQ2FjaGUqIHBUcmFuc2Zvcm1DYWNoZTsNCi0gICAgaWYgKCFtX01hcFRyYW5mb3JtLkxvb2t1cChUcmFuc2Zvcm1LZXksIChGWF9MUFZPSUQmKXBUcmFuc2Zvcm1DYWNoZSkpIHsNCi0gICAgICAgIHBDbW0gPSBGWF9BbGxvYyhDTGNtc0NtbSwgMSk7DQotICAgICAgICBpZiAocENtbSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBwQ21tLT5tX25TcmNDb21wb25lbnRzID0gVF9DSEFOTkVMUyhkd0lucHV0UHJvZmlsZVR5cGUpOw0KLSAgICAgICAgcENtbS0+bV9uRHN0Q29tcG9uZW50cyA9IFRfQ0hBTk5FTFMoZHdPdXRwdXRQcm9maWxlVHlwZSk7DQotICAgICAgICBwQ21tLT5tX2JMYWIgPSBUX0NPTE9SU1BBQ0UocElucHV0UGFyYW0tPmR3Rm9ybWF0KSA9PSBQVF9MYWI7DQotICAgICAgICBwVHJhbnNmb3JtQ2FjaGUgPSBGWF9ORVcgQ0ZYX0ljY1RyYW5zZm9ybUNhY2hlKHBDbW0pOw0KLSAgICAgICAgaWYgKHBUcmFuc2Zvcm1DYWNoZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgRlhfRnJlZShwQ21tKTsNCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwUHJvb2ZQcm9maWxlKSB7DQotICAgICAgICAgICAgcFRyYW5zZm9ybUNhY2hlLT5tX3BJY2NUcmFuc2Zvcm0gPSBjbXNDcmVhdGVQcm9vZmluZ1RyYW5zZm9ybShwSW5wdXRQcm9maWxlLCBkd0lucHV0UHJvZmlsZVR5cGUsIHBPdXRwdXRQcm9maWxlLCBkd091dHB1dFByb2ZpbGVUeXBlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFByb29mUHJvZmlsZSwgZHdJbnRlbnQsIGR3UHJmSW50ZW50LCBkd1ByZkZsYWcpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBwVHJhbnNmb3JtQ2FjaGUtPm1fcEljY1RyYW5zZm9ybSA9IGNtc0NyZWF0ZVRyYW5zZm9ybShwSW5wdXRQcm9maWxlLCBkd0lucHV0UHJvZmlsZVR5cGUsIHBPdXRwdXRQcm9maWxlLCBkd091dHB1dFByb2ZpbGVUeXBlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHdJbnRlbnQsIGR3RmxhZyk7DQotICAgICAgICB9DQotICAgICAgICBwQ21tLT5tX2hUcmFuc2Zvcm0gPSBwVHJhbnNmb3JtQ2FjaGUtPm1fcEljY1RyYW5zZm9ybTsNCi0gICAgICAgIG1fTWFwVHJhbmZvcm0uU2V0QXQoVHJhbnNmb3JtS2V5LCBwVHJhbnNmb3JtQ2FjaGUpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcFRyYW5zZm9ybUNhY2hlLT5tX2R3UmF0ZSsrOw0KLSAgICB9DQotICAgIHJldHVybiBwVHJhbnNmb3JtQ2FjaGUtPm1fcENtbTsNCi19DQotQ0NvZGVjX0ljY01vZHVsZTo6fkNDb2RlY19JY2NNb2R1bGUoKQ0KLXsNCi0gICAgRlhfUE9TSVRJT04gcG9zID0gbV9NYXBQcm9maWxlLkdldFN0YXJ0UG9zaXRpb24oKTsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcga2V5Ow0KLSAgICBDRlhfSWNjUHJvZmlsZUNhY2hlKiBwUHJvZmlsZUNhY2hlOw0KLSAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICBtX01hcFByb2ZpbGUuR2V0TmV4dEFzc29jKHBvcywga2V5LCAoRlhfTFBWT0lEJilwUHJvZmlsZUNhY2hlKTsNCi0gICAgICAgIGlmIChwUHJvZmlsZUNhY2hlKSB7DQotICAgICAgICAgICAgZGVsZXRlIHBQcm9maWxlQ2FjaGU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcG9zID0gbV9NYXBUcmFuZm9ybS5HZXRTdGFydFBvc2l0aW9uKCk7DQotICAgIENGWF9JY2NUcmFuc2Zvcm1DYWNoZSogcFRyYW5zZm9ybUNhY2hlOw0KLSAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICBtX01hcFRyYW5mb3JtLkdldE5leHRBc3NvYyhwb3MsIGtleSwgKEZYX0xQVk9JRCYpcFRyYW5zZm9ybUNhY2hlKTsNCi0gICAgICAgIGlmIChwVHJhbnNmb3JtQ2FjaGUpIHsNCi0gICAgICAgICAgICBkZWxldGUgcFRyYW5zZm9ybUNhY2hlOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLXZvaWQqIENDb2RlY19JY2NNb2R1bGU6OkNyZWF0ZVRyYW5zZm9ybV9zUkdCKEZYX0xQQ0JZVEUgcFByb2ZpbGVEYXRhLCB1bnNpZ25lZCBpbnQgZHdQcm9maWxlU2l6ZSwgaW50IG5Db21wb25lbnRzLCBpbnQgaW50ZW50LCBGWF9EV09SRCBkd1NyY0Zvcm1hdCkNCi17DQotICAgIHJldHVybiBJY2NMaWJfQ3JlYXRlVHJhbnNmb3JtX3NSR0IocFByb2ZpbGVEYXRhLCBkd1Byb2ZpbGVTaXplLCBuQ29tcG9uZW50cywgaW50ZW50LCBkd1NyY0Zvcm1hdCk7DQotfQ0KLXZvaWQqIENDb2RlY19JY2NNb2R1bGU6OkNyZWF0ZVRyYW5zZm9ybV9DTVlLKEZYX0xQQ0JZVEUgcFNyY1Byb2ZpbGVEYXRhLCB1bnNpZ25lZCBpbnQgZHdTcmNQcm9maWxlU2l6ZSwgaW50IG5TcmNDb21wb25lbnRzLA0KLSAgICAgICAgRlhfTFBDQllURSBwRHN0UHJvZmlsZURhdGEsIHVuc2lnbmVkIGludCBkd0RzdFByb2ZpbGVTaXplLCBpbnQgaW50ZW50LA0KLSAgICAgICAgRlhfRFdPUkQgZHdTcmNGb3JtYXQgLCBGWF9EV09SRCBkd0RzdEZvcm1hdCkNCi17DQotICAgIHJldHVybiBJY2NMaWJfQ3JlYXRlVHJhbnNmb3JtKHBTcmNQcm9maWxlRGF0YSwgZHdTcmNQcm9maWxlU2l6ZSwgblNyY0NvbXBvbmVudHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBEc3RQcm9maWxlRGF0YSwgZHdEc3RQcm9maWxlU2l6ZSwgNCwgaW50ZW50LCBkd1NyY0Zvcm1hdCwgZHdEc3RGb3JtYXQpOw0KLX0NCi12b2lkIENDb2RlY19JY2NNb2R1bGU6OkRlc3Ryb3lUcmFuc2Zvcm0odm9pZCogcFRyYW5zZm9ybSkNCi17DQotICAgIEljY0xpYl9EZXN0cm95VHJhbnNmb3JtKHBUcmFuc2Zvcm0pOw0KLX0NCi12b2lkIENDb2RlY19JY2NNb2R1bGU6OlRyYW5zbGF0ZSh2b2lkKiBwVHJhbnNmb3JtLCBGWF9GTE9BVCogcFNyY1ZhbHVlcywgRlhfRkxPQVQqIHBEZXN0VmFsdWVzKQ0KLXsNCi0gICAgSWNjTGliX1RyYW5zbGF0ZShwVHJhbnNmb3JtLCBwU3JjVmFsdWVzLCBwRGVzdFZhbHVlcyk7DQotfQ0KLXZvaWQgQ0NvZGVjX0ljY01vZHVsZTo6VHJhbnNsYXRlU2NhbmxpbmUodm9pZCogcFRyYW5zZm9ybSwgRlhfTFBCWVRFIHBEZXN0LCBGWF9MUENCWVRFIHBTcmMsIGludCBwaXhlbHMpDQotew0KLSAgICBJY2NMaWJfVHJhbnNsYXRlSW1hZ2UocFRyYW5zZm9ybSwgcERlc3QsIHBTcmMsIHBpeGVscyk7DQotfQ0KLWNvbnN0IEZYX0JZVEUgZ19DTVlLU2FtcGxlc1s4MSAqIDgxICogM10gPSB7DQotICAgIDI1NSwgMjU1LCAyNTUsIDIyNSwgMjI2LCAyMjgsIDE5OSwgMjAwLCAyMDIsIDE3MywgMTc0LCAxNzgsIDE0NywgMTQ5LCAxNTIsIDEyMywgMTI1LCAxMjgsICA5OSwgOTksIDEwMiwgIDY5LCA3MCwgNzEsICAzNCwgMzAsIDMxLA0KLSAgICAyNTUsIDI1MywgMjI5LCAyMjYsIDIyNCwgMjAzLCAyMDAsIDE5OSwgMTgyLCAxNzMsIDE3MywgMTU4LCAxNDksIDE0OCwgMTM1LCAxMjUsIDEyNCwgMTEzLCAgOTksIDk5LCA5MCwgIDcwLCA2OSwgNjMsICAzMywgMjksIDI0LA0KLSAgICAyNTUsIDI1MSwgMjA0LCAyMjgsIDIyMywgMTgyLCAyMDEsIDE5OCwgMTYzLCAxNzQsIDE3MiwgMTQyLCAxNTAsIDE0NywgMTIyLCAxMjUsIDEyMywgMTAxLCAgOTksIDk4LCA4MCwgIDcwLCA2OCwgNTQsICAzMiwgMjgsIDE2LA0KLSAgICAyNTUsIDI0OSwgMTc5LCAyMzAsIDIyMiwgMTYwLCAyMDMsIDE5NywgMTQ0LCAxNzQsIDE3MCwgMTI0LCAxNTAsIDE0NSwgMTA1LCAxMjUsIDEyMiwgODgsICA5OSwgOTcsIDY5LCAgNzAsIDY4LCA0NiwgIDMxLCAyOCwgIDYsDQotICAgIDI1NSwgMjQ3LCAxNTQsIDIyOSwgMjIwLCAxMzgsIDIwMywgMTk1LCAxMjIsIDE3NiwgMTY5LCAxMDcsIDE1MCwgMTQ1LCA5MSwgMTI1LCAxMjEsIDc0LCAxMDAsIDk2LCA1NywgIDcwLCA2NywgMzUsICAyOSwgMjYsICAwLA0KLSAgICAyNTUsIDI0NiwgMTI4LCAyMzEsIDIxNywgMTE0LCAyMDUsIDE5NCwgMTAxLCAxNzYsIDE2NywgODgsIDE1MCwgMTQ0LCA3NSwgMTI1LCAxMjAsIDYwLCAxMDAsIDk2LCA0NCwgIDcwLCA2NiwgMjQsICAyOCwgMjYsICAwLA0KLSAgICAyNTUsIDI0NCwgOTYsIDIzMSwgMjE3LCA4NywgMjAzLCAxOTIsIDc4LCAxNzUsIDE2NywgNjYsIDE1MCwgMTQzLCA1NiwgMTI1LCAxMTksIDQzLCAxMDAsIDk1LCAyOSwgIDY5LCA2NiwgIDcsICAyNiwgMjYsICAwLA0KLSAgICAyNTUsIDI0MywgNTEsIDIzMiwgMjE1LCA1MSwgMjA0LCAxOTEsIDQzLCAxNzYsIDE2NSwgMzgsIDE1MCwgMTQyLCAyOCwgMTI1LCAxMTgsIDE3LCAgOTksIDk0LCAgMCwgIDY4LCA2NSwgIDAsICAyNCwgMjUsICAwLA0KLSAgICAyNTUsIDI0MSwgIDAsIDIzMSwgMjE1LCAgMCwgMjAzLCAxOTAsICAwLCAxNzYsIDE2NCwgIDAsIDE1MCwgMTQxLCAgMCwgMTI2LCAxMTcsICAwLCAgOTksIDkzLCAgMCwgIDY4LCA2NSwgIDAsICAyNCwgMjUsICAwLA0KLSAgICAyNTIsIDIyOCwgMjM4LCAyMjIsIDIwMSwgMjExLCAxOTcsIDE4MCwgMTkwLCAxNzEsIDE1NiwgMTY2LCAxNDcsIDEzMywgMTQzLCAxMjMsIDExMSwgMTE5LCAgOTksIDg4LCA5NCwgIDcxLCA2MSwgNjYsICAzNCwgMjIsIDI2LA0KLSAgICAyNTQsIDIyNiwgMjEzLCAyMjQsIDIwMSwgMTkxLCAxOTksIDE3OSwgMTcxLCAxNzIsIDE1NSwgMTQ4LCAxNDcsIDEzMywgMTI4LCAxMjMsIDExMCwgMTA2LCAgOTgsIDg3LCA4MywgIDcwLCA1OSwgNTcsICAzMywgMjEsIDE4LA0KLSAgICAyNTQsIDIyNCwgMTkxLCAyMjQsIDE5OSwgMTcyLCAyMDAsIDE3NywgMTUzLCAxNzMsIDE1NCwgMTMzLCAxNDcsIDEzMiwgMTE1LCAxMjMsIDEwOSwgOTQsICA5OCwgODYsIDc0LCAgNzAsIDU5LCA0OSwgIDMyLCAyMSwgIDksDQotICAgIDI1NSwgMjIyLCAxNjgsIDIyNywgMTk4LCAxNTAsIDIwMCwgMTc1LCAxMzUsIDE3MywgMTUzLCAxMTgsIDE0OCwgMTMwLCA5OSwgMTIzLCAxMDksIDgyLCAgOTgsIDg2LCA2NCwgIDY5LCA1OCwgNDAsICAzMSwgMTksICAwLA0KLSAgICAyNTUsIDIyMSwgMTQ1LCAyMjcsIDE5NiwgMTI5LCAyMDEsIDE3NCwgMTE1LCAxNzMsIDE1MSwgOTksIDE0OCwgMTI5LCA4NSwgMTI0LCAxMDgsIDY5LCAgOTgsIDg1LCA1MiwgIDY5LCA1OCwgMzAsICAzMCwgMTksICAwLA0KLSAgICAyNTUsIDIxOSwgMTIxLCAyMjcsIDE5NSwgMTA5LCAyMDEsIDE3NCwgOTcsIDE3NCwgMTUwLCA4MywgMTQ4LCAxMjksIDcwLCAxMjQsIDEwNywgNTUsICA5OCwgODQsIDQwLCAgNjksIDU4LCAxOSwgIDI4LCAxOCwgIDAsDQotICAgIDI1NSwgMjE4LCA5MiwgMjI5LCAxOTQsIDgyLCAyMDIsIDE3MywgNzUsIDE3NCwgMTUwLCA2MywgMTQ5LCAxMjgsIDUxLCAxMjQsIDEwNiwgMzksICA5OCwgODQsIDI0LCAgNjgsIDU3LCAgMywgIDI2LCAxOCwgIDAsDQotICAgIDI1NSwgMjE3LCA1NCwgMjI4LCAxOTMsIDUyLCAyMDEsIDE3MiwgNDYsIDE3NCwgMTQ4LCAzNiwgMTQ4LCAxMjcsIDI3LCAxMjMsIDEwNSwgMTQsICA5OCwgODMsICAwLCAgNjgsIDU2LCAgMCwgIDI1LCAxOCwgIDAsDQotICAgIDI1NSwgMjE2LCAgMCwgMjI5LCAxOTIsICAyLCAyMDIsIDE3MSwgIDQsIDE3MywgMTQ4LCAgMCwgMTQ4LCAxMjYsICAwLCAxMjQsIDEwNSwgIDAsICA5OCwgODMsICAwLCAgNjgsIDU2LCAgMCwgIDI0LCAxNywgIDAsDQotICAgIDI0OSwgMjA0LCAyMjMsIDIxOSwgMTgxLCAxOTksIDE5NSwgMTYwLCAxNzgsIDE3MCwgMTQwLCAxNTYsIDE0NiwgMTE5LCAxMzQsIDEyMywgOTksIDExMiwgIDk4LCA3NywgODgsICA3MCwgNTIsIDYxLCAgMzQsIDExLCAyMCwNCi0gICAgMjUwLCAyMDEsIDIwMCwgMjIxLCAxODAsIDE3OCwgMTk3LCAxNTksIDE2MSwgMTcxLCAxMzksIDEzOSwgMTQ3LCAxMTksIDEyMCwgMTIzLCA5OCwgOTksICA5OCwgNzcsIDc4LCAgNjksIDUxLCA1MiwgIDM0LCAxMSwgMTAsDQotICAgIDI1MiwgMjAxLCAxODAsIDIyMywgMTc5LCAxNjIsIDE5NywgMTU5LCAxNDQsIDE3MCwgMTM4LCAxMjUsIDE0NiwgMTE3LCAxMDcsIDEyMiwgOTcsIDg5LCAgOTgsIDc2LCA2OSwgIDY5LCA1MCwgNDQsICAzMiwgMTEsICAyLA0KLSAgICAyNTIsIDE5OSwgMTU4LCAyMjIsIDE3NywgMTQzLCAxOTksIDE1OCwgMTI3LCAxNzEsIDEzNywgMTEwLCAxNDcsIDExNywgOTMsIDEyMiwgOTYsIDc2LCAgOTcsIDc1LCA1OCwgIDY5LCA1MCwgMzYsICAzMiwgMTAsICAwLA0KLSAgICAyNTMsIDE5OCwgMTM3LCAyMjMsIDE3NywgMTIzLCAxOTgsIDE1NiwgMTEwLCAxNzEsIDEzNiwgOTUsIDE0NiwgMTE2LCA4MCwgMTIyLCA5NiwgNjUsICA5NywgNzUsIDQ3LCAgNjksIDUwLCAyNSwgIDMwLCAxMCwgIDAsDQotICAgIDI1NCwgMTk3LCAxMTUsIDIyNSwgMTc1LCAxMDQsIDE5OCwgMTU2LCA5MiwgMTcyLCAxMzUsIDc5LCAxNDcsIDExNSwgNjYsIDEyMywgOTUsIDUyLCAgOTgsIDc0LCAzNywgIDY5LCA0OSwgMTUsICAyOSwgMTAsICAwLA0KLSAgICAyNTQsIDE5NiwgODksIDIyNCwgMTc1LCA4MCwgMTk5LCAxNTQsIDcwLCAxNzIsIDEzNCwgNTksIDE0NiwgMTE0LCA0OCwgMTIyLCA5NSwgMzYsICA5NywgNzQsIDIxLCAgNjgsIDQ5LCAgMCwgIDI3LCAgOSwgIDAsDQotICAgIDI1NSwgMTk1LCA1NywgMjI1LCAxNzMsIDUyLCAxOTgsIDE1NCwgNDQsIDE3MiwgMTMzLCAzNiwgMTQ3LCAxMTMsIDI2LCAxMjMsIDk0LCAxNCwgIDk4LCA3NCwgIDAsICA2OCwgNDksICAwLCAgMjYsIDEwLCAgMCwNCi0gICAgMjU0LCAxOTQsIDE1LCAyMjUsIDE3MiwgMTIsIDE5OCwgMTUzLCAgNywgMTcyLCAxMzIsICAzLCAxNDYsIDExMywgIDAsIDEyMywgOTMsICAwLCAgOTgsIDczLCAgMCwgIDY4LCA0OSwgIDAsICAyNiwgIDksICAwLA0KLSAgICAyNDYsIDE3OCwgMjA5LCAyMTgsIDE1OSwgMTg2LCAxOTQsIDE0MCwgMTY2LCAxNjgsIDEyMiwgMTQ1LCAxNDQsIDEwNCwgMTI1LCAxMjEsIDg1LCAxMDMsICA5NywgNjUsIDgxLCAgNjksIDQxLCA1NSwgIDM0LCAgMCwgMTIsDQotICAgIDI0OCwgMTc2LCAxODYsIDIxOSwgMTU3LCAxNjYsIDE5NSwgMTM5LCAxNDksIDE2OCwgMTIxLCAxMzAsIDE0NCwgMTAzLCAxMTEsIDEyMSwgODUsIDkxLCAgOTcsIDY1LCA3MSwgIDY5LCA0MSwgNDYsICAzNCwgIDAsICA0LA0KLSAgICAyNDksIDE3NSwgMTY4LCAyMjAsIDE1NiwgMTUwLCAxOTYsIDEzOSwgMTM1LCAxNjksIDEyMSwgMTE2LCAxNDQsIDEwMywgMTAwLCAxMjIsIDg0LCA4MywgIDk4LCA2NSwgNjMsICA3MCwgNDEsIDM5LCAgMzMsICAwLCAgMCwNCi0gICAgMjQ5LCAxNzUsIDE0OCwgMjIwLCAxNTUsIDEzMywgMTk2LCAxMzgsIDExOSwgMTY5LCAxMjAsIDEwMywgMTQ1LCAxMDEsIDg3LCAxMjEsIDgzLCA3MSwgIDk3LCA2NSwgNTQsICA2OSwgNDEsIDMxLCAgMzIsICAwLCAgMCwNCi0gICAgMjQ5LCAxNzMsIDEyOCwgMjIyLCAxNTQsIDExNSwgMTk1LCAxMzcsIDEwMiwgMTcwLCAxMTksIDg4LCAxNDUsIDEwMSwgNzQsIDEyMiwgODMsIDU5LCAgOTcsIDY0LCA0MywgIDY4LCA0MCwgMjAsICAzMCwgIDAsICAwLA0KLSAgICAyNTAsIDE3MiwgMTA4LCAyMjEsIDE1NCwgOTgsIDE5NSwgMTM2LCA4NiwgMTcwLCAxMTgsIDczLCAxNDUsIDEwMCwgNjEsIDEyMiwgODIsIDQ4LCAgOTcsIDYzLCAzMiwgIDY5LCA0MCwgMTEsICAyOCwgIDAsICAwLA0KLSAgICAyNTAsIDE3MSwgODUsIDIyMSwgMTUzLCA3NiwgMTk2LCAxMzYsIDY3LCAxNzAsIDExNywgNTYsIDE0NSwgOTksIDQ0LCAxMjEsIDgyLCAzMywgIDk3LCA2MywgMTcsICA2OCwgNDAsICAwLCAgMjgsICAwLCAgMCwNCi0gICAgMjUxLCAxNzEsIDU4LCAyMjIsIDE1MiwgNTAsIDE5NywgMTM1LCA0MywgMTY5LCAxMTcsIDM0LCAxNDYsIDk5LCAyNSwgMTIxLCA4MSwgMTAsICA5NiwgNjMsICAwLCAgNjgsIDQwLCAgMCwgIDI3LCAgMCwgIDAsDQotICAgIDI1MCwgMTcwLCAyNiwgMjIyLCAxNTEsIDE5LCAxOTYsIDEzNCwgMTMsIDE2OSwgMTE2LCAgNCwgMTQ1LCA5OSwgIDAsIDEyMiwgODEsICAwLCAgOTcsIDYzLCAgMCwgIDY3LCA0MCwgIDAsICAyNiwgIDAsICAwLA0KLSAgICAyNDQsIDE1MywgMTk0LCAyMTUsIDEzNiwgMTczLCAxOTIsIDEyMSwgMTU1LCAxNjcsIDEwNCwgMTM1LCAxNDMsIDg5LCAxMTUsIDEyMSwgNzIsIDk2LCAgOTcsIDU0LCA3NSwgIDcwLCAzMSwgNDksICAzNCwgIDAsICA2LA0KLSAgICAyNDUsIDE1MywgMTczLCAyMTYsIDEzNiwgMTU1LCAxOTIsIDEyMCwgMTM4LCAxNjcsIDEwNCwgMTIxLCAxNDQsIDg4LCAxMDMsIDEyMSwgNzEsIDg1LCAgOTcsIDU0LCA2NiwgIDY5LCAzMSwgNDIsICAzNCwgIDAsICAwLA0KLSAgICAyNDYsIDE1MiwgMTU3LCAyMTcsIDEzNSwgMTQwLCAxOTMsIDEyMCwgMTI2LCAxNjcsIDEwMywgMTA5LCAxNDMsIDg4LCA5MiwgMTIxLCA3MiwgNzYsICA5NywgNTQsIDU4LCAgNjksIDMxLCAzNSwgIDMzLCAgMCwgIDAsDQotICAgIDI0NSwgMTUwLCAxMzksIDIxOCwgMTM0LCAxMjUsIDE5MywgMTE5LCAxMTEsIDE2NywgMTAzLCA5NiwgMTQ0LCA4NywgODAsIDEyMSwgNzEsIDY2LCAgOTYsIDUzLCA0OSwgIDY4LCAzMSwgMjYsICAzMiwgIDAsICAwLA0KLSAgICAyNDYsIDE1MSwgMTIyLCAyMTgsIDEzMywgMTA4LCAxOTQsIDExOCwgOTYsIDE2OCwgMTAyLCA4MSwgMTQ0LCA4NiwgNjksIDEyMCwgNzEsIDU1LCAgOTUsIDUzLCAzOSwgIDY4LCAzMCwgMTcsICAzMSwgIDAsICAwLA0KLSAgICAyNDgsIDE1MCwgMTAzLCAyMTgsIDEzMywgOTEsIDE5MywgMTE4LCA4MSwgMTY4LCAxMDIsIDY5LCAxNDMsIDg2LCA1NiwgMTIwLCA3MCwgNDMsICA5NiwgNTMsIDI4LCAgNjgsIDMxLCAgNiwgIDI5LCAgMCwgIDAsDQotICAgIDI0NywgMTQ5LCA4MSwgMjE4LCAxMzIsIDcyLCAxOTQsIDExNywgNjIsIDE2OCwgMTAxLCA1MiwgMTQ0LCA4NiwgNDIsIDEyMSwgNzAsIDI5LCAgOTYsIDUyLCAxMywgIDY4LCAzMCwgIDAsICAyOCwgIDAsICAwLA0KLSAgICAyNDcsIDE0OCwgNTUsIDIxOSwgMTMxLCA1MCwgMTk0LCAxMTcsIDQzLCAxNjcsIDEwMSwgMzIsIDE0NCwgODUsIDIyLCAxMjAsIDY5LCAgOCwgIDk2LCA1MiwgIDAsICA2NywgMzAsICAwLCAgMjcsICAwLCAgMCwNCi0gICAgMjQ3LCAxNDcsIDI5LCAyMTgsIDEzMSwgMjQsIDE5NCwgMTE2LCAyMCwgMTY4LCAxMDAsIDExLCAxNDQsIDg1LCAgMCwgMTIwLCA2OSwgIDAsICA5NiwgNTIsICAwLCAgNjcsIDMwLCAgMCwgIDI2LCAgMCwgIDAsDQotICAgIDI0MiwgMTMwLCAxNzksIDIxNCwgMTE0LCAxNjAsIDE5MCwgMTAxLCAxNDMsIDE2NiwgODcsIDEyNSwgMTQzLCA3MiwgMTA3LCAxMjAsIDU4LCA4OCwgIDk2LCA0MiwgNjgsICA2OSwgMTcsIDQ0LCAgMzUsICAwLCAgMCwNCi0gICAgMjQzLCAxMjksIDE2MSwgMjE1LCAxMTQsIDE0MywgMTkxLCAxMDEsIDEyOCwgMTY2LCA4NywgMTEzLCAxNDMsIDczLCA5NiwgMTIwLCA1OCwgNzksICA5NiwgNDEsIDYwLCAgNjksIDE4LCAzNywgIDMzLCAgMCwgIDAsDQotICAgIDI0MywgMTI5LCAxNDYsIDIxNiwgMTE0LCAxMzAsIDE5MiwgMTAxLCAxMTcsIDE2NiwgODcsIDEwMSwgMTQzLCA3MiwgODYsIDEyMSwgNTgsIDY5LCAgOTYsIDQyLCA1MiwgIDY5LCAxOCwgMjksICAzMSwgIDAsICAwLA0KLSAgICAyNDMsIDEyOCwgMTMwLCAyMTYsIDExNCwgMTE1LCAxOTEsIDEwMSwgMTAyLCAxNjUsIDg2LCA4OCwgMTQyLCA3MiwgNzUsIDEyMCwgNTgsIDYwLCAgOTUsIDQyLCA0MywgIDY4LCAxOSwgMjEsICAzMCwgIDAsICAwLA0KLSAgICAyNDQsIDEyNywgMTEyLCAyMTcsIDExMywgMTAxLCAxOTIsIDk5LCA4OSwgMTY2LCA4NSwgNzUsIDE0MiwgNzIsIDYzLCAxMTksIDU3LCA1MCwgIDk2LCA0MSwgMzUsICA2OCwgMTksIDEzLCAgMzAsICAwLCAgMCwNCi0gICAgMjQ0LCAxMjcsIDk2LCAyMTYsIDExMiwgODYsIDE5MSwgOTksIDc1LCAxNjYsIDg2LCA2NCwgMTQzLCA3MiwgNTIsIDEyMCwgNTcsIDQwLCAgOTUsIDQxLCAyNCwgIDY3LCAyMCwgIDEsICAyOSwgIDAsICAwLA0KLSAgICAyNDUsIDEyNiwgNzcsIDIxNiwgMTEzLCA2OCwgMTkxLCAxMDAsIDU5LCAxNjYsIDg1LCA0OSwgMTQyLCA3MSwgMzgsIDExOSwgNTcsIDI2LCAgOTUsIDQxLCAxMCwgIDY3LCAyMCwgIDAsICAyOCwgIDAsICAwLA0KLSAgICAyNDQsIDEyNiwgNTUsIDIxNiwgMTEyLCA0OCwgMTkxLCA5OSwgNDAsIDE2NiwgODUsIDMxLCAxNDMsIDcxLCAyMCwgMTE5LCA1NywgIDYsICA5NSwgNDIsICAwLCAgNjcsIDIwLCAgMCwgIDI4LCAgMCwgIDAsDQotICAgIDI0NSwgMTI2LCAzMywgMjE3LCAxMTIsIDI2LCAxOTIsIDk5LCAyMiwgMTY2LCA4NCwgMTEsIDE0MiwgNzAsICAwLCAxMTksIDU3LCAgMCwgIDk1LCA0MSwgIDAsICA2NiwgMjAsICAwLCAgMjcsICAwLCAgMCwNCi0gICAgMjQxLCAxMDIsIDE2NywgMjEzLCA5MCwgMTQ5LCAxODksIDc5LCAxMzMsIDE2NSwgNjYsIDExNSwgMTQxLCA1NCwgOTgsIDExOSwgNDEsIDgxLCAgOTYsIDI1LCA2MywgIDY5LCAgMCwgMzgsICAzMCwgIDAsICAwLA0KLSAgICAyNDEsIDEwMiwgMTQ5LCAyMTMsIDkwLCAxMzMsIDE4OSwgNzksIDExOSwgMTY1LCA2NiwgMTAzLCAxNDIsIDU1LCA4OCwgMTE5LCA0MSwgNzEsICA5NiwgMjUsIDUzLCAgNjksICAwLCAzMSwgIDI4LCAgMCwgIDAsDQotICAgIDI0MSwgMTAyLCAxMzUsIDIxNCwgOTAsIDEyMSwgMTkwLCA3OSwgMTA4LCAxNjUsIDY2LCA5MiwgMTQxLCA1NSwgNzgsIDExOSwgNDIsIDYzLCAgOTYsIDI2LCA0NiwgIDY5LCAgMCwgMjQsICAyOCwgIDAsICAwLA0KLSAgICAyNDEsIDEwMSwgMTIwLCAyMTQsIDkwLCAxMDcsIDE4OSwgNzksIDk1LCAxNjUsIDY3LCA4MywgMTQxLCA1NCwgNjgsIDExOCwgNDEsIDU0LCAgOTUsIDI3LCAzOSwgIDY4LCAgMCwgMTYsICAyNywgIDAsICAwLA0KLSAgICAyNDEsIDEwMiwgMTA2LCAyMTMsIDkwLCA5MywgMTg5LCA3OCwgODIsIDE2NCwgNjcsIDcwLCAxNDEsIDU1LCA1OCwgMTE4LCA0MiwgNDUsICA5NCwgMjcsIDI5LCAgNjcsICAyLCAgNiwgIDI3LCAgMCwgIDAsDQotICAgIDI0MiwgMTAxLCA5MCwgMjE0LCA4OSwgNzksIDE5MCwgNzksIDY5LCAxNjYsIDY3LCA1OSwgMTQxLCA1NSwgNDcsIDExOCwgNDEsIDM1LCAgOTUsIDI3LCAxOSwgIDY3LCAgMywgIDAsICAyNiwgIDAsICAwLA0KLSAgICAyNDIsIDEwMiwgNzIsIDIxMywgODksIDYzLCAxOTEsIDc5LCA1NiwgMTY0LCA2NywgNDUsIDE0MSwgNTUsIDM0LCAxMTgsIDQyLCAyMiwgIDk0LCAyOCwgIDYsICA2NywgIDMsICAwLCAgMjYsICAwLCAgMCwNCi0gICAgMjQyLCAxMDAsIDUxLCAyMTQsIDg5LCA0NSwgMTkwLCA3OCwgMzgsIDE2NCwgNjcsIDMwLCAxNDEsIDU1LCAxOCwgMTE4LCA0MiwgIDMsICA5NSwgMjgsICAwLCAgNjYsICA0LCAgMCwgIDI2LCAgMCwgIDAsDQotICAgIDI0MywgMTAwLCAzMywgMjE0LCA5MCwgMjcsIDE5MCwgNzgsIDIyLCAxNjUsIDY3LCAxMywgMTQxLCA1NSwgIDAsIDExOCwgNDMsICAwLCAgOTQsIDI5LCAgMCwgIDY2LCAgNSwgIDAsICAyNiwgIDAsICAwLA0KLSAgICAyMzcsIDY5LCAxNTMsIDIxMSwgNTgsIDEzNSwgMTg3LCA1MSwgMTIxLCAxNjMsIDQxLCAxMDUsIDE0MSwgMjgsIDkwLCAxMTgsIDE1LCA3MywgIDk2LCAgMCwgNTYsICA2OCwgIDAsIDMzLCAgMjUsICAwLCAgMCwNCi0gICAgMjM5LCA2NywgMTM3LCAyMTIsIDYwLCAxMjMsIDE4OSwgNTAsIDExMCwgMTYzLCA0MSwgOTQsIDE0MSwgMjksIDc5LCAxMTgsIDE3LCA2NSwgIDk1LCAgMCwgNDgsICA2OSwgIDAsIDI2LCAgMjUsICAwLCAgMCwNCi0gICAgMjQwLCA2OSwgMTI0LCAyMTEsIDYwLCAxMTEsIDE4OCwgNTAsIDk4LCAxNjMsIDQyLCA4NSwgMTQxLCAzMSwgNzIsIDExOCwgMTgsIDU3LCAgOTQsICAwLCA0MSwgIDY4LCAgMCwgMTksICAyNSwgIDAsICAwLA0KLSAgICAyNDAsIDcwLCAxMTIsIDIxMiwgNjEsIDk5LCAxODgsIDUyLCA4NywgMTYzLCA0MSwgNzQsIDE0MCwgMzEsIDYyLCAxMTgsIDIwLCA0OCwgIDk0LCAgMiwgMzIsICA2OCwgIDAsIDExLCAgMjQsICAwLCAgMCwNCi0gICAgMjM5LCA3MCwgOTgsIDIxMiwgNjIsIDg2LCAxODgsIDUzLCA3NywgMTY0LCA0MiwgNjQsIDE0MCwgMzIsIDUyLCAxMTgsIDIwLCA0MCwgIDk0LCAgMywgMjQsICA2NywgIDAsICAzLCAgMjMsICAwLCAgMCwNCi0gICAgMjM5LCA3MSwgODUsIDIxMiwgNjEsIDc0LCAxODcsIDUzLCA2NSwgMTYzLCA0NCwgNTQsIDE0MCwgMzQsIDQzLCAxMTgsIDIyLCAzMCwgIDk1LCAgMywgMTQsICA2NywgIDAsICAwLCAgMjMsICAwLCAgMCwNCi0gICAgMjM5LCA3MCwgNjcsIDIxMiwgNjIsIDU5LCAxODgsIDUzLCA1MSwgMTYzLCA0NSwgNDIsIDE0MSwgMzQsIDMxLCAxMTcsIDIyLCAxNywgIDk0LCAgNSwgIDIsICA2NiwgIDAsICAwLCAgMjMsICAwLCAgMCwNCi0gICAgMjM5LCA3MSwgNTAsIDIxMywgNjIsIDQzLCAxODgsIDU0LCAzNywgMTY0LCA0NSwgMjgsIDEzOSwgMzQsIDE2LCAxMTcsIDIyLCAgMiwgIDk0LCAgNywgIDAsICA2NSwgIDAsICAwLCAgMjMsICAwLCAgMCwNCi0gICAgMjQwLCA3MSwgMzQsIDIxMiwgNjMsIDI5LCAxODksIDU0LCAyNCwgMTYzLCA0NiwgMTUsIDEzOSwgMzYsICAyLCAxMTcsIDI1LCAgMCwgIDk0LCAgOCwgIDAsICA2NiwgIDAsICAwLCAgMjMsICAwLCAgMCwNCi0gICAgMjM3LCAgMCwgMTQwLCAyMDksICAwLCAxMjQsIDE4NiwgIDAsIDExMiwgMTYyLCAgMCwgOTcsIDE0MSwgIDAsIDgyLCAxMTgsICAwLCA2NywgIDk1LCAgMCwgNDksICA2OCwgIDAsIDI3LCAgMjAsICAwLCAgMCwNCi0gICAgMjM3LCAgMCwgMTI2LCAyMTAsICAwLCAxMTMsIDE4NywgIDAsIDk5LCAxNjMsICAwLCA4NiwgMTM5LCAgMCwgNzIsIDExOCwgIDAsIDU4LCAgOTUsICAwLCA0MiwgIDY3LCAgMCwgMjAsICAyMCwgIDAsICAwLA0KLSAgICAyMzcsICAxLCAxMTQsIDIwOSwgIDEsIDEwMiwgMTg3LCAgMCwgOTAsIDE2MywgIDAsIDc4LCAxMzksICAwLCA2NCwgMTE4LCAgMCwgNTAsICA5NSwgIDAsIDM1LCAgNjcsICAwLCAxMywgIDIwLCAgMCwgIDAsDQotICAgIDIzNiwgMTYsIDEwMiwgMjA5LCAgNywgOTEsIDE4NiwgIDAsIDgwLCAxNjIsICAwLCA2OCwgMTM5LCAgMCwgNTYsIDExNywgIDAsIDQzLCAgOTQsICAwLCAyNywgIDY3LCAgMCwgIDYsICAyMCwgIDAsICAwLA0KLSAgICAyMzgsIDE1LCA4OSwgMjA5LCAxMywgNzksIDE4NiwgIDYsIDY5LCAxNjIsICAwLCA1OCwgMTM5LCAgMCwgNDcsIDExNywgIDAsIDM0LCAgOTMsICAwLCAyMCwgIDY2LCAgMCwgIDIsICAyMCwgIDAsICAwLA0KLSAgICAyMzcsIDIwLCA3OCwgMjEwLCAxMiwgNjgsIDE4NywgIDQsIDU5LCAxNjMsICAwLCA0OSwgMTM5LCAgMCwgMzgsIDExNiwgIDAsIDI2LCAgOTQsICAwLCAxMSwgIDY2LCAgMCwgIDAsICAyMCwgIDAsICAwLA0KLSAgICAyMzcsIDI1LCA2NCwgMjEwLCAxOCwgNTYsIDE4NiwgMTEsIDQ4LCAxNjIsICA0LCAzOSwgMTM4LCAgMCwgMjcsIDExNywgIDAsIDE0LCAgOTMsICAwLCAgMCwgIDY2LCAgMCwgIDAsICAyMCwgIDAsICAwLA0KLSAgICAyMzgsIDI1LCA0OCwgMjEwLCAyMiwgNDMsIDE4NiwgMTUsIDM1LCAxNjIsICA4LCAyNiwgMTQwLCAgMCwgMTQsIDExNywgIDAsICAwLCAgOTMsICAwLCAgMCwgIDY1LCAgMCwgIDAsICAyMCwgIDAsICAwLA0KLSAgICAyMzgsIDI4LCAzNSwgMjEwLCAyMSwgMzAsIDE4NywgMTUsIDI0LCAxNjIsICA4LCAxNiwgMTM5LCAgMSwgIDIsIDExNywgIDAsICAwLCAgOTMsICAwLCAgMCwgIDY1LCAgMCwgIDAsICAyMiwgIDAsICAwLA0KLSAgICAyMTksIDI0MiwgMjUyLCAxOTUsIDIxNCwgMjI1LCAxNzIsIDE5MSwgMjAxLCAxNDgsIDE2NSwgMTc1LCAxMjcsIDE0MiwgMTUwLCAxMDYsIDExOSwgMTI2LCAgODQsIDk1LCAxMDEsICA1OCwgNjYsIDcyLCAgMjQsIDI3LCAzMiwNCi0gICAgMjIyLCAyMzksIDIyNiwgMTk2LCAyMTMsIDIwMiwgMTczLCAxODksIDE4MCwgMTUwLCAxNjUsIDE1OCwgMTI5LCAxNDEsIDEzNSwgMTA3LCAxMTgsIDExMywgIDg1LCA5NCwgOTAsICA1OCwgNjYsIDYzLCAgMjEsIDI2LCAyNCwNCi0gICAgMjIzLCAyMzcsIDIwMywgMTk4LCAyMTEsIDE4MiwgMTc1LCAxODgsIDE2MywgMTUyLCAxNjQsIDE0MSwgMTI5LCAxNDAsIDEyMSwgMTA3LCAxMTcsIDEwMSwgIDg1LCA5MywgODAsICA1OCwgNjQsIDU0LCAgMjEsIDI2LCAxOCwNCi0gICAgMjI2LCAyMzYsIDE3OSwgMjAxLCAyMTAsIDE2MCwgMTc3LCAxODcsIDE0MywgMTUzLCAxNjIsIDEyNSwgMTMwLCAxMzksIDEwNiwgMTA4LCAxMTYsIDg5LCAgODUsIDkyLCA2OSwgIDU4LCA2NCwgNDUsICAyMCwgMjUsICA4LA0KLSAgICAyMjcsIDIzNCwgMTUzLCAyMDEsIDIwOCwgMTM5LCAxNzgsIDE4NSwgMTI0LCAxNTQsIDE2MSwgMTA3LCAxMzEsIDEzOCwgOTEsIDEwOCwgMTE1LCA3NSwgIDg1LCA5MSwgNTgsICA1OCwgNjMsIDM1LCAgMTcsIDI1LCAgMCwNCi0gICAgMjI5LCAyMzMsIDEzMCwgMjAzLCAyMDcsIDExNiwgMTc4LCAxODQsIDEwNCwgMTU0LCAxNjAsIDkwLCAxMzEsIDEzNywgNzYsIDEwOSwgMTE0LCA2MiwgIDg1LCA5MCwgNDYsICA1OCwgNjMsIDI1LCAgMTYsIDI0LCAgMCwNCi0gICAgMjMwLCAyMzEsIDEwMCwgMjAyLCAyMDUsIDkwLCAxNzksIDE4MywgODAsIDE1NCwgMTU5LCA2OSwgMTMxLCAxMzYsIDU3LCAxMDksIDExMywgNDYsICA4NiwgOTAsIDMyLCAgNTgsIDYzLCAxMCwgIDE0LCAyNCwgIDAsDQotICAgIDIzMCwgMjMwLCA2NSwgMjA0LCAyMDQsIDU4LCAxODAsIDE4MiwgNTIsIDE1NSwgMTU3LCA0NCwgMTMyLCAxMzUsIDM1LCAxMTAsIDExMywgMjQsICA4NiwgODksICA5LCAgNTcsIDYyLCAgMCwgIDExLCAyNCwgIDAsDQotICAgIDIzMiwgMjMwLCAxOSwgMjA0LCAyMDQsIDE5LCAxODAsIDE4MSwgMTcsIDE1NSwgMTU3LCAxMCwgMTMxLCAxMzQsICAyLCAxMDksIDExMiwgIDAsICA4NSwgODksICAwLCAgNTcsIDYyLCAgMCwgIDEwLCAyMywgIDAsDQotICAgIDIxOCwgMjE2LCAyMzYsIDE5NCwgMTkyLCAyMTEsIDE3MiwgMTcxLCAxODgsIDE0OSwgMTQ5LCAxNjQsIDEyOCwgMTI3LCAxNDEsIDEwNiwgMTA2LCAxMTksICA4NCwgODQsIDk0LCAgNTksIDU3LCA2NiwgIDI1LCAxOCwgMjYsDQotICAgIDIyMSwgMjE0LCAyMTEsIDE5NiwgMTkxLCAxOTAsIDE3NCwgMTcwLCAxNzAsIDE1MCwgMTQ4LCAxNDgsIDEyOCwgMTI2LCAxMjcsIDEwNywgMTA1LCAxMDYsICA4NSwgODMsIDg0LCAgNTksIDU2LCA1OCwgIDIzLCAxNywgMTgsDQotICAgIDIyMiwgMjEzLCAxOTAsIDE5NywgMTg5LCAxNzAsIDE3NSwgMTY5LCAxNTMsIDE1MSwgMTQ3LCAxMzMsIDEyOSwgMTI2LCAxMTMsIDEwOCwgMTA1LCA5NCwgIDg1LCA4MiwgNzQsICA1OSwgNTYsIDQ5LCAgMjIsIDE3LCAxMSwNCi0gICAgMjI0LCAyMTEsIDE2OCwgMTk5LCAxODgsIDE1MSwgMTc1LCAxNjgsIDEzNSwgMTUyLCAxNDYsIDExNywgMTI5LCAxMjQsIDk5LCAxMDcsIDEwMywgODIsICA4NCwgODIsIDY0LCAgNTksIDU1LCA0MSwgIDIxLCAxNywgIDEsDQotICAgIDIyNCwgMjEwLCAxNDUsIDE5OSwgMTg3LCAxMzAsIDE3NiwgMTY2LCAxMTcsIDE1MiwgMTQ1LCAxMDEsIDEyOSwgMTIzLCA4NiwgMTA3LCAxMDMsIDcwLCAgODUsIDgxLCA1MywgIDU4LCA1NSwgMzEsICAxOSwgMTcsICAwLA0KLSAgICAyMjcsIDIwOCwgMTIzLCAyMDAsIDE4NiwgMTEwLCAxNzcsIDE2NSwgOTgsIDE1MywgMTQzLCA4NCwgMTMwLCAxMjIsIDcwLCAxMDgsIDEwMiwgNTcsICA4NSwgODAsIDQxLCAgNTgsIDU0LCAyMCwgIDE4LCAxNiwgIDAsDQotICAgIDIyNywgMjA4LCA5NywgMjAyLCAxODUsIDg2LCAxNzcsIDE2NCwgNzcsIDE1MywgMTQyLCA2NSwgMTMwLCAxMjIsIDU0LCAxMDgsIDEwMSwgNDIsICA4NSwgODAsIDI3LCAgNTgsIDU0LCAgNywgIDE2LCAxNiwgIDAsDQotICAgIDIyOCwgMjA2LCA2NiwgMjAyLCAxODQsIDU4LCAxNzgsIDE2MywgNTAsIDE1NCwgMTQxLCA0MiwgMTMxLCAxMjEsIDMzLCAxMDksIDEwMSwgMjEsICA4NiwgNzksICA1LCAgNTgsIDU0LCAgMCwgIDEzLCAxNiwgIDAsDQotICAgIDIyOCwgMjA2LCAyOSwgMjAyLCAxODMsIDI1LCAxNzgsIDE2MywgMjAsIDE1NCwgMTQxLCAxNSwgMTMxLCAxMjEsICA1LCAxMDgsIDEwMCwgIDAsICA4NSwgNzksICAwLCAgNTgsIDUzLCAgMCwgIDEzLCAxNiwgIDAsDQotICAgIDIxNywgMTkzLCAyMjEsIDE5MywgMTcyLCAxOTgsIDE3MiwgMTUzLCAxNzgsIDE0OSwgMTMzLCAxNTQsIDEyOCwgMTE0LCAxMzIsIDEwNywgOTQsIDExMSwgIDg1LCA3NCwgODksICA1OSwgNDksIDYxLCAgMjUsICA4LCAyMiwNCi0gICAgMjE5LCAxOTEsIDE5OCwgMTk1LCAxNzEsIDE3OCwgMTczLCAxNTMsIDE1OSwgMTQ5LCAxMzIsIDEzOSwgMTI4LCAxMTMsIDExOSwgMTA3LCA5NCwgMTAwLCAgODUsIDczLCA3OSwgIDU5LCA0OCwgNTIsICAyNSwgIDcsIDE0LA0KLSAgICAyMjEsIDE5MSwgMTgwLCAxOTYsIDE3MCwgMTYwLCAxNzQsIDE1MiwgMTQ0LCAxNTAsIDEzMiwgMTI1LCAxMjksIDExMywgMTA3LCAxMDcsIDkzLCA4OSwgIDg1LCA3MywgNjksICA1OSwgNDgsIDQ1LCAgMjMsICA3LCAgNCwNCi0gICAgMjIyLCAxODksIDE1OSwgMTk3LCAxNjksIDE0MiwgMTc0LCAxNTEsIDEyNywgMTUxLCAxMzEsIDExMCwgMTI5LCAxMTIsIDk0LCAxMDgsIDkzLCA3OCwgIDg1LCA3MiwgNjAsICA1OCwgNDcsIDM3LCAgMjIsICA3LCAgMCwNCi0gICAgMjIzLCAxODgsIDEzOCwgMTk3LCAxNjgsIDEyMywgMTc1LCAxNTAsIDEwOSwgMTUxLCAxMzAsIDk1LCAxMzAsIDExMSwgODEsIDEwOCwgOTIsIDY1LCAgODUsIDcyLCA0OSwgIDU5LCA0NywgMjcsICAyMSwgIDcsICAwLA0KLSAgICAyMjQsIDE4NywgMTE4LCAxOTgsIDE2NywgMTA1LCAxNzYsIDE0OSwgOTMsIDE1MiwgMTI5LCA3OSwgMTMwLCAxMTAsIDY4LCAxMDgsIDkxLCA1NCwgIDg1LCA3MSwgMzgsICA1OSwgNDcsIDE3LCAgMTgsICA3LCAgMCwNCi0gICAgMjI0LCAxODcsIDkzLCAxOTksIDE2NiwgODMsIDE3NiwgMTQ4LCA3MywgMTUyLCAxMjgsIDYyLCAxMjksIDEwOSwgNTEsIDEwOCwgOTAsIDM5LCAgODUsIDcxLCAyNSwgIDU4LCA0NiwgIDMsICAxNiwgIDgsICAwLA0KLSAgICAyMjYsIDE4NiwgNjQsIDIwMCwgMTY1LCA1NywgMTc3LCAxNDcsIDUwLCAxNTMsIDEyNywgNDAsIDEzMCwgMTA4LCAzMSwgMTA4LCA5MCwgMTksICA4NSwgNzAsICAzLCAgNTgsIDQ2LCAgMCwgIDE2LCAgOCwgIDAsDQotICAgIDIyNywgMTg1LCAzNSwgMjAwLCAxNjUsIDMwLCAxNzYsIDE0NiwgMjUsIDE1MiwgMTI3LCAxOCwgMTMwLCAxMDgsICA3LCAxMDgsIDg5LCAgMCwgIDg1LCA3MCwgIDAsICA1NywgNDYsICAwLCAgMTQsICA4LCAgMCwNCi0gICAgMjE2LCAxNjksIDIwNSwgMTkyLCAxNTAsIDE4NCwgMTcxLCAxMzQsIDE2NCwgMTQ5LCAxMTYsIDE0NCwgMTI4LCA5OSwgMTI0LCAxMDcsIDgxLCAxMDMsICA4NSwgNjMsIDgxLCAgNjAsIDM5LCA1NSwgIDI2LCAgMCwgMTUsDQotICAgIDIxNywgMTY4LCAxODYsIDE5MywgMTUwLCAxNjUsIDE3MiwgMTM0LCAxNDksIDE1MCwgMTE2LCAxMzAsIDEyOCwgOTksIDExMSwgMTA3LCA4MSwgOTIsICA4NSwgNjIsIDcyLCAgNTksIDM5LCA0NywgIDI1LCAgMCwgIDYsDQotICAgIDIxOSwgMTY4LCAxNjgsIDE5NCwgMTQ5LCAxNTAsIDE3MywgMTMzLCAxMzUsIDE1MCwgMTE2LCAxMTcsIDEyOCwgOTgsIDk5LCAxMDcsIDgwLCA4MiwgIDg2LCA2MiwgNjMsICA1OSwgMzgsIDM5LCAgMjQsICAwLCAgMCwNCi0gICAgMjE5LCAxNjYsIDE0OCwgMTk1LCAxNDksIDEzMywgMTczLCAxMzMsIDExOSwgMTUwLCAxMTUsIDEwMywgMTI4LCA5OCwgODgsIDEwNywgODAsIDcyLCAgODUsIDYxLCA1NCwgIDU5LCAzOCwgMzIsICAyMywgIDAsICAwLA0KLSAgICAyMjAsIDE2NiwgMTI5LCAxOTYsIDE0OCwgMTE2LCAxNzQsIDEzMiwgMTAzLCAxNTEsIDExNCwgODksIDEyOSwgOTcsIDc1LCAxMDcsIDc5LCA2MCwgIDg1LCA2MSwgNDQsICA1OSwgMzgsIDIyLCAgMjEsICAwLCAgMCwNCi0gICAgMjIyLCAxNjQsIDExMCwgMTk3LCAxNDcsIDk5LCAxNzUsIDEzMSwgODcsIDE1MSwgMTEzLCA3NSwgMTI5LCA5NiwgNjMsIDEwNywgNzksIDQ5LCAgODUsIDYxLCAzMywgIDU4LCAzOCwgMTIsICAxOSwgIDAsICAwLA0KLSAgICAyMjIsIDE2NCwgODgsIDE5NywgMTQ2LCA3OSwgMTc0LCAxMzAsIDY5LCAxNTEsIDExMywgNTgsIDEyOSwgOTUsIDQ3LCAxMDcsIDc4LCAzNSwgIDg1LCA2MCwgMjAsICA1OCwgMzgsICAwLCAgMTgsICAwLCAgMCwNCi0gICAgMjIzLCAxNjQsIDYzLCAxOTgsIDE0NSwgNTUsIDE3NSwgMTI5LCA0OCwgMTUxLCAxMTIsIDM5LCAxMjksIDk1LCAyOSwgMTA3LCA3OCwgMTYsICA4NSwgNjAsICAxLCAgNTgsIDM4LCAgMCwgIDE3LCAgMCwgIDAsDQotICAgIDIyMywgMTYzLCAzNiwgMTk4LCAxNDUsIDMyLCAxNzQsIDEyOSwgMjYsIDE1MSwgMTExLCAxNywgMTI5LCA5NSwgIDcsIDEwNywgNzgsICAwLCAgODQsIDYwLCAgMCwgIDU3LCAzNywgIDAsICAxNSwgIDAsICAwLA0KLSAgICAyMTUsIDE0NywgMTkyLCAxOTEsIDEzMCwgMTcyLCAxNzAsIDExNiwgMTUzLCAxNDgsIDEwMCwgMTMzLCAxMjcsIDg1LCAxMTUsIDEwNywgNjksIDk2LCAgODUsIDUxLCA3NSwgIDYwLCAyOCwgNTAsICAyNSwgIDAsICA4LA0KLSAgICAyMTcsIDE0NiwgMTczLCAxOTIsIDEzMCwgMTU0LCAxNzEsIDExNSwgMTM4LCAxNDksIDEwMCwgMTIxLCAxMjgsIDg0LCAxMDMsIDEwNywgNjgsIDg1LCAgODUsIDUxLCA2NiwgIDYwLCAyOCwgNDIsICAyNSwgIDAsICAwLA0KLSAgICAyMTcsIDE0NSwgMTU3LCAxOTMsIDEyOSwgMTQwLCAxNzMsIDExNSwgMTI1LCAxNDksIDEwMCwgMTA5LCAxMjgsIDg0LCA5MiwgMTA3LCA2OCwgNzYsICA4NSwgNTEsIDU4LCAgNTksIDI4LCAzNSwgIDIzLCAgMCwgIDAsDQotICAgIDIxOCwgMTQ1LCAxNDAsIDE5MywgMTI5LCAxMjUsIDE3MiwgMTE0LCAxMTAsIDE0OSwgOTksIDk2LCAxMjgsIDgzLCA4MSwgMTA3LCA2NywgNjUsICA4NCwgNTEsIDQ5LCAgNTksIDI5LCAyNywgIDIyLCAgMCwgIDAsDQotICAgIDIxOSwgMTQ0LCAxMjEsIDE5NCwgMTI4LCAxMDgsIDE3MiwgMTEzLCA5NiwgMTQ5LCA5OCwgODMsIDEyOCwgODMsIDY5LCAxMDcsIDY4LCA1NSwgIDg1LCA1MCwgNDAsICA1OSwgMjgsIDE4LCAgMjAsICAwLCAgMCwNCi0gICAgMjIwLCAxNDMsIDEwNCwgMTk1LCAxMjgsIDkzLCAxNzMsIDExNCwgODIsIDE1MCwgOTgsIDY5LCAxMjcsIDgyLCA1OCwgMTA3LCA2NywgNDUsICA4NSwgNTAsIDMwLCAgNTksIDI4LCAgNywgIDE5LCAgMCwgIDAsDQotICAgIDIyMCwgMTQzLCA4NCwgMTk1LCAxMjcsIDc0LCAxNzMsIDExMywgNjUsIDE0OSwgOTcsIDU1LCAxMjgsIDgyLCA0NCwgMTA2LCA2NywgMzIsICA4NCwgNTAsIDE2LCAgNTgsIDI4LCAgMCwgIDE4LCAgMCwgIDAsDQotICAgIDIyMSwgMTQyLCA2MiwgMTk2LCAxMjYsIDUzLCAxNzMsIDExMiwgNDYsIDE1MCwgOTcsIDM3LCAxMjgsIDgyLCAyNiwgMTA3LCA2NiwgMTQsICA4NCwgNTAsICAwLCAgNTgsIDI4LCAgMCwgIDE2LCAgMCwgIDAsDQotICAgIDIyMiwgMTQyLCAzOCwgMTk2LCAxMjYsIDM0LCAxNzQsIDExMiwgMjcsIDE1MCwgOTYsIDE3LCAxMjgsIDgyLCAgNiwgMTA2LCA2NiwgIDAsICA4NCwgNTAsICAwLCAgNTcsIDI5LCAgMCwgIDE2LCAgMCwgIDAsDQotICAgIDIxNCwgMTIzLCAxNzksIDE5MSwgMTEwLCAxNTksIDE2OSwgOTgsIDE0MywgMTQ3LCA4NCwgMTI0LCAxMjYsIDcwLCAxMDYsIDEwNywgNTUsIDg4LCAgODUsIDM5LCA2OSwgIDYwLCAxNSwgNDUsICAyMywgIDAsICAyLA0KLSAgICAyMTYsIDEyMywgMTYxLCAxOTIsIDExMCwgMTQ0LCAxNzAsIDk4LCAxMjksIDE0OCwgODQsIDExMiwgMTI3LCA3MCwgOTUsIDEwNywgNTUsIDc5LCAgODUsIDM5LCA2MSwgIDYwLCAxNSwgMzcsICAyMCwgIDAsICAwLA0KLSAgICAyMTcsIDEyMiwgMTQ1LCAxOTIsIDExMCwgMTMwLCAxNzAsIDk3LCAxMTYsIDE0OSwgODQsIDEwMSwgMTI3LCA3MCwgODUsIDEwNiwgNTUsIDcwLCAgODUsIDM5LCA1MywgIDU5LCAxNiwgMzAsICAxOSwgIDAsICAwLA0KLSAgICAyMTcsIDEyMywgMTMxLCAxOTIsIDEwOSwgMTE2LCAxNzEsIDk2LCAxMDMsIDE0OSwgODMsIDg5LCAxMjcsIDcwLCA3NSwgMTA2LCA1NSwgNjAsICA4NSwgNDAsIDQ1LCAgNTksIDE2LCAyMywgIDE3LCAgMCwgIDAsDQotICAgIDIxNywgMTIyLCAxMTQsIDE5MywgMTA5LCAxMDEsIDE3MiwgOTYsIDkxLCAxNDksIDgyLCA3NywgMTI4LCA2OSwgNjQsIDEwNiwgNTUsIDUwLCAgODQsIDM5LCAzNSwgIDU5LCAxNywgMTQsICAxNywgIDAsICAwLA0KLSAgICAyMTgsIDEyMiwgOTgsIDE5NCwgMTA4LCA4NywgMTcxLCA5NiwgNzcsIDE0OSwgODIsIDY1LCAxMjcsIDY5LCA1MiwgMTA2LCA1NSwgNDAsICA4NCwgNDAsIDI1LCAgNTksIDE4LCAgMywgIDE1LCAgMCwgIDAsDQotICAgIDIxOSwgMTIyLCA4MCwgMTkzLCAxMDgsIDcwLCAxNzIsIDk1LCA2MSwgMTQ5LCA4MiwgNTEsIDEyNywgNjksIDQwLCAxMDYsIDU1LCAyOCwgIDg0LCAzOSwgMTIsICA1OCwgMTcsICAwLCAgMTMsICAwLCAgMCwNCi0gICAgMjE5LCAxMjEsIDU5LCAxOTQsIDEwOCwgNTIsIDE3MiwgOTYsIDQ0LCAxNDksIDgyLCAzNSwgMTI3LCA2OCwgMjQsIDEwNiwgNTUsIDExLCAgODQsIDQwLCAgMCwgIDU3LCAxOCwgIDAsICAxMywgIDAsICAwLA0KLSAgICAyMTksIDEyMSwgNDAsIDE5MywgMTA4LCAzMywgMTcyLCA5NSwgMjYsIDE0OSwgODEsIDE5LCAxMjgsIDY4LCAgNiwgMTA2LCA1NCwgIDAsICA4NCwgMzksICAwLCAgNTcsIDE4LCAgMCwgIDEzLCAgMCwgIDAsDQotICAgIDIxMywgOTksIDE2NSwgMTg5LCA4NywgMTQ4LCAxNjksIDc2LCAxMzIsIDE0NywgNjQsIDExNSwgMTI2LCA1MiwgOTgsIDEwNiwgMzksIDgxLCAgODUsIDIzLCA2MywgIDYwLCAgMCwgMzksICAxNiwgIDAsICAwLA0KLSAgICAyMTQsIDk4LCAxNDksIDE5MSwgODcsIDEzMywgMTcwLCA3NiwgMTE5LCAxNDgsIDY1LCAxMDMsIDEyNywgNTMsIDg4LCAxMDYsIDM5LCA3MiwgIDg1LCAyNCwgNTUsICA2MCwgIDAsIDMyLCAgMTUsICAwLCAgMCwNCi0gICAgMjE1LCA5OSwgMTM2LCAxOTEsIDg3LCAxMjEsIDE3MCwgNzcsIDEwOCwgMTQ4LCA2NSwgOTMsIDEyNiwgNTMsIDc5LCAxMDYsIDQwLCA2NCwgIDg1LCAyNCwgNDcsICA1OSwgIDAsIDI1LCAgMTQsICAwLCAgMCwNCi0gICAgMjE1LCA5OSwgMTIxLCAxOTIsIDg3LCAxMDgsIDE3MCwgNzcsIDk2LCAxNDgsIDY1LCA4MiwgMTI2LCA1MywgNjksIDEwNiwgNDAsIDU1LCAgODUsIDI1LCAzOSwgIDU5LCAgMCwgMTgsICAxMywgIDAsICAwLA0KLSAgICAyMTYsIDk5LCAxMDYsIDE5MSwgODcsIDk1LCAxNzAsIDc2LCA4MywgMTQ4LCA2NSwgNzEsIDEyNiwgNTMsIDU4LCAxMDYsIDQxLCA0NSwgIDg1LCAyNiwgMzAsICA1OSwgIDAsICA4LCAgMTEsICAwLCAgMCwNCi0gICAgMjE2LCA5OCwgOTEsIDE5MiwgODgsIDgyLCAxNzAsIDc3LCA3MSwgMTQ4LCA2NSwgNjAsIDEyNywgNTMsIDQ4LCAxMDUsIDQxLCAzNiwgIDgzLCAyNiwgMjEsICA1OCwgIDEsICAyLCAgMTEsICAwLCAgMCwNCi0gICAgMjE3LCA5OSwgNzUsIDE5MiwgODcsIDY2LCAxNzAsIDc2LCA1NywgMTQ4LCA2NSwgNDcsIDEyNiwgNTMsIDM2LCAxMDUsIDQxLCAyNCwgIDgzLCAyNiwgIDgsICA1NywgIDIsICAwLCAgIDksICAwLCAgMCwNCi0gICAgMjE3LCA5OCwgNTcsIDE5MiwgODcsIDQ5LCAxNzEsIDc3LCA0MSwgMTQ3LCA2NSwgMzIsIDEyNiwgNTMsIDIxLCAxMDUsIDQxLCAgOCwgIDg0LCAyNywgIDAsICA1NywgIDMsICAwLCAgIDksICAwLCAgMCwNCi0gICAgMjE3LCA5OCwgNDAsIDE5MywgODcsIDM0LCAxNzEsIDc2LCAyNywgMTQ4LCA2NSwgMTksIDEyNiwgNTMsICA2LCAxMDUsIDQxLCAgMCwgIDgzLCAyNywgIDAsICA1NywgIDQsICAwLCAgIDksICAwLCAgMCwNCi0gICAgMjExLCA2NywgMTUyLCAxODksIDU4LCAxMzYsIDE2OCwgNTAsIDEyMiwgMTQ3LCAzOSwgMTA1LCAxMjcsIDI4LCA4OSwgMTA2LCAxNCwgNzQsICA4NSwgIDAsIDU2LCAgNTksICAwLCAzMywgICA5LCAgMCwgIDAsDQotICAgIDIxMywgNjgsIDEzOCwgMTkwLCA1OSwgMTIzLCAxNjksIDUxLCAxMDksIDE0OCwgNDAsIDk1LCAxMjYsIDMwLCA4MCwgMTA2LCAxNiwgNjUsICA4NSwgIDAsIDQ4LCAgNTksICAwLCAyNywgICA5LCAgMCwgIDAsDQotICAgIDIxNCwgNjksIDEyNSwgMTkwLCA1OSwgMTExLCAxNjgsIDUxLCA5OSwgMTQ4LCA0MSwgODYsIDEyNiwgMzEsIDcyLCAxMDYsIDE4LCA1OCwgIDg1LCAgMCwgNDEsICA1OSwgIDAsIDIwLCAgIDcsICAwLCAgMCwNCi0gICAgMjE1LCA3MCwgMTEyLCAxOTAsIDYxLCAxMDAsIDE2OSwgNTIsIDg4LCAxNDcsIDQyLCA3NiwgMTI2LCAzMiwgNjMsIDEwNiwgMTksIDQ5LCAgODQsICAxLCAzNCwgIDU4LCAgMCwgMTMsICAgNywgIDAsICAwLA0KLSAgICAyMTQsIDcwLCA5OSwgMTkwLCA2MiwgODgsIDE2OSwgNTMsIDc3LCAxNDcsIDQzLCA2NSwgMTI1LCAzMiwgNTMsIDEwNiwgMjAsIDQwLCAgODQsICAzLCAyNiwgIDU4LCAgMCwgIDQsICAgNywgIDAsICAwLA0KLSAgICAyMTQsIDcxLCA4NiwgMTkwLCA2MSwgNzUsIDE2OSwgNTMsIDY1LCAxNDYsIDQzLCA1NCwgMTI2LCAzMywgNDQsIDEwNSwgMjEsIDMxLCAgODMsICA0LCAxNywgIDU3LCAgMCwgIDAsICAgNywgIDAsICAwLA0KLSAgICAyMTUsIDcxLCA3MSwgMTkxLCA2MiwgNjIsIDE2OSwgNTMsIDUzLCAxNDcsIDQ0LCA0NCwgMTI2LCAzNCwgMzMsIDEwNSwgMjIsIDIwLCAgODMsICA1LCAgNCwgIDU3LCAgMCwgIDAsICAgNywgIDAsICAwLA0KLSAgICAyMTUsIDcxLCA1NCwgMTkxLCA2MiwgNDcsIDE2OSwgNTQsIDM5LCAxNDcsIDQ0LCAzMCwgMTI2LCAzNSwgMjAsIDEwNSwgMjMsICA2LCAgODMsICA2LCAgMCwgIDU2LCAgMCwgIDAsICAgNSwgIDAsICAwLA0KLSAgICAyMTUsIDcxLCA0MSwgMTkxLCA2MywgMzQsIDE3MCwgNTQsIDI3LCAxNDcsIDQ1LCAxNywgMTI2LCAzNSwgIDYsIDEwNSwgMjMsICAwLCAgODMsICA4LCAgMCwgIDU2LCAgMCwgIDAsICAgNSwgIDAsICAwLA0KLSAgICAyMTAsIDEzLCAxNDAsIDE4OSwgIDEsIDEyNSwgMTY3LCAgMCwgMTEwLCAxNDYsICAwLCA5NiwgMTI2LCAgMCwgODEsIDEwNiwgIDAsIDY3LCAgODUsICAwLCA1MSwgIDU5LCAgMCwgMjgsICAgNCwgIDAsICAwLA0KLSAgICAyMTIsIDE4LCAxMjYsIDE5MCwgIDcsIDExMywgMTY4LCAgMCwgMTAwLCAxNDYsICAwLCA4NiwgMTI2LCAgMCwgNzMsIDEwNiwgIDAsIDU5LCAgODQsICAwLCA0MywgIDU5LCAgMCwgMjIsICAgNCwgIDAsICAwLA0KLSAgICAyMTIsIDIxLCAxMTUsIDE5MCwgMTMsIDEwMywgMTY4LCAgMywgOTEsIDE0NiwgIDAsIDc4LCAxMjUsICAwLCA2NSwgMTA1LCAgMCwgNTIsICA4NCwgIDAsIDM2LCAgNTgsICAwLCAxNiwgICA0LCAgMCwgIDAsDQotICAgIDIxMywgMjQsIDEwMywgMTg5LCAxOSwgOTEsIDE2OCwgIDksIDgyLCAxNDYsICAwLCA2OSwgMTI1LCAgMCwgNTcsIDEwNSwgIDAsIDQ0LCAgODQsICAwLCAyOSwgIDU4LCAgMCwgIDcsICAgNCwgIDAsICAwLA0KLSAgICAyMTMsIDI3LCA5MiwgMTg4LCAyMSwgODEsIDE2OCwgMTQsIDcxLCAxNDYsICAxLCA1OSwgMTI1LCAgMCwgNDgsIDEwNSwgIDAsIDM2LCAgODQsICAwLCAyMSwgIDU4LCAgMCwgIDQsICAgNCwgIDAsICAwLA0KLSAgICAyMTMsIDMwLCA4MCwgMTg5LCAyMiwgNjksIDE2OCwgMTcsIDYxLCAxNDYsICA1LCA1MCwgMTI1LCAgMCwgMzksIDEwNCwgIDAsIDI3LCAgODMsICAwLCAxMiwgIDU3LCAgMCwgIDAsICAgNCwgIDAsICAwLA0KLSAgICAyMTQsIDMwLCA2NywgMTg5LCAyNSwgNTcsIDE2OCwgMjAsIDUwLCAxNDYsICA5LCA0MCwgMTI1LCAgMCwgMjksIDEwNCwgIDAsIDE3LCAgODMsICAwLCAgMiwgIDU2LCAgMCwgIDAsICAgNCwgIDAsICAwLA0KLSAgICAyMTQsIDMyLCA1MywgMTg5LCAyNywgNDQsIDE2OSwgMjAsIDM4LCAxNDYsIDEzLCAyOCwgMTI0LCAgMiwgMTcsIDEwNCwgIDAsICA0LCAgODMsICAwLCAgMCwgIDU2LCAgMCwgIDAsICAgNCwgIDAsICAwLA0KLSAgICAyMTQsIDMzLCA0MSwgMTkwLCAyNywgMzMsIDE2OCwgMjMsIDI3LCAxNDYsIDEzLCAxOCwgMTI1LCAgMywgIDUsIDEwNSwgIDAsICAwLCAgODMsICAwLCAgMCwgIDU2LCAgMCwgIDAsICAgNCwgIDAsICAwLA0KLSAgICAxODUsIDIyOSwgMjUwLCAxNjQsIDIwNCwgMjIzLCAxNDYsIDE4MiwgMTk5LCAxMjcsIDE1OCwgMTc0LCAxMDgsIDEzNiwgMTQ5LCAgODksIDExMywgMTI1LCAgNzAsIDkwLCAxMDAsICA0NiwgNjIsIDcxLCAgMTAsIDI1LCAzMywNCi0gICAgMTg5LCAyMjcsIDIyNSwgMTY4LCAyMDIsIDIwMSwgMTQ4LCAxODEsIDE3OSwgMTI5LCAxNTcsIDE1NiwgMTA5LCAxMzUsIDEzNCwgIDkwLCAxMTMsIDExMywgIDcwLCA4OSwgOTAsICA0NiwgNjIsIDYyLCAgIDgsIDI0LCAyNSwNCi0gICAgMTkyLCAyMjYsIDIwMiwgMTcwLCAyMDIsIDE4MiwgMTUxLCAxNzksIDE2MiwgMTMwLCAxNTYsIDE0MSwgMTEwLCAxMzMsIDEyMSwgIDkxLCAxMTIsIDEwMSwgIDcxLCA4OSwgODAsICA0NiwgNjEsIDU0LCAgIDcsIDI0LCAxOSwNCi0gICAgMTk0LCAyMjQsIDE3OSwgMTczLCAyMDAsIDE2MCwgMTUzLCAxNzgsIDE0NCwgMTMyLCAxNTUsIDEyNSwgMTEyLCAxMzMsIDEwNywgIDkyLCAxMTEsIDg5LCAgNzEsIDg4LCA2OSwgIDQ2LCA2MSwgNDUsICAgNiwgMjMsIDEwLA0KLSAgICAxOTYsIDIyMywgMTU1LCAxNzQsIDE5OCwgMTM5LCAxNTQsIDE3NiwgMTI0LCAxMzIsIDE1MywgMTA3LCAxMTMsIDEzMSwgOTEsICA5MiwgMTEwLCA3NSwgIDcyLCA4NywgNTgsICA0NywgNjAsIDM3LCAgIDQsIDIzLCAgMCwNCi0gICAgMTk4LCAyMjEsIDEzMSwgMTc1LCAxOTcsIDExNywgMTU1LCAxNzUsIDEwNSwgMTMzLCAxNTIsIDkxLCAxMTMsIDEzMCwgNzYsICA5MiwgMTA5LCA2MywgIDcyLCA4NiwgNDcsICA0NiwgNjAsIDI2LCAgIDMsIDIzLCAgMCwNCi0gICAgMjAwLCAyMjAsIDEwNCwgMTc2LCAxOTYsIDk0LCAxNTYsIDE3NSwgODQsIDEzNCwgMTUxLCA3MiwgMTEzLCAxMjksIDU5LCAgOTMsIDEwOCwgNDcsICA3MiwgODUsIDMzLCAgNDYsIDU5LCAxMywgICAwLCAyMywgIDAsDQotICAgIDIwMSwgMjE5LCA3MywgMTc5LCAxOTUsIDY1LCAxNTcsIDE3MywgNTcsIDEzNSwgMTUwLCA0OCwgMTE0LCAxMjksIDM5LCAgOTQsIDEwOCwgMjgsICA3MiwgODUsIDE1LCAgNDcsIDU5LCAgMCwgICAwLCAyMiwgIDAsDQotICAgIDIwMywgMjE5LCA0MiwgMTc4LCAxOTUsIDM3LCAxNTcsIDE3MywgMzIsIDEzNSwgMTUwLCAyNiwgMTE0LCAxMjgsIDE2LCAgOTQsIDEwNywgIDYsICA3MywgODUsICAwLCAgNDYsIDU4LCAgMCwgICAwLCAyMiwgIDAsDQotICAgIDE4NiwgMjA1LCAyMzMsIDE2NSwgMTgzLCAyMDksIDE0OCwgMTYzLCAxODcsIDEyOCwgMTQyLCAxNjMsIDEwOSwgMTIxLCAxNDAsICA5MSwgMTAxLCAxMTgsICA3MSwgODAsIDk0LCAgNDgsIDU0LCA2NiwgIDEyLCAxNSwgMjcsDQotICAgIDE4OSwgMjA0LCAyMTEsIDE2OSwgMTgyLCAxODksIDE1MSwgMTYzLCAxNjksIDEzMSwgMTQxLCAxNDcsIDExMSwgMTIxLCAxMjYsICA5MiwgMTAxLCAxMDUsICA3MiwgNzksIDg0LCAgNDgsIDU0LCA1OCwgIDExLCAxNSwgMTksDQotICAgIDE5MiwgMjAyLCAxOTAsIDE3MSwgMTgxLCAxNzAsIDE1MiwgMTYxLCAxNTIsIDEzMSwgMTQxLCAxMzMsIDExMiwgMTIwLCAxMTMsICA5MywgMTAwLCA5NCwgIDcyLCA3OSwgNzQsICA0OCwgNTMsIDUwLCAgMTAsIDE1LCAxMSwNCi0gICAgMTk1LCAyMDEsIDE2OSwgMTcyLCAxNzksIDE1MSwgMTUzLCAxNjAsIDEzNSwgMTMyLCAxMzksIDExNywgMTEzLCAxMTksIDEwMCwgIDkzLCA5OSwgODIsICA3MiwgNzgsIDY0LCAgNDgsIDUzLCA0MSwgICA5LCAxNCwgIDMsDQotICAgIDE5NSwgMjAwLCAxNDYsIDE3NCwgMTc5LCAxMzEsIDE1NCwgMTU5LCAxMTcsIDEzMywgMTM4LCAxMDEsIDExMywgMTE4LCA4NiwgIDkzLCA5OCwgNzAsICA3MywgNzcsIDUzLCAgNDgsIDUyLCAzMiwgICA4LCAxNSwgIDAsDQotICAgIDE5OCwgMTk5LCAxMjUsIDE3NSwgMTc3LCAxMTEsIDE1NSwgMTU4LCAxMDAsIDEzMywgMTM3LCA4NSwgMTEzLCAxMTcsIDcxLCAgOTMsIDk3LCA1NywgIDcyLCA3NywgNDIsICA0NywgNTIsIDIyLCAgIDUsIDE0LCAgMCwNCi0gICAgMTk5LCAxOTgsIDEwMSwgMTc2LCAxNzcsIDg5LCAxNTUsIDE1NywgNzksIDEzNCwgMTM2LCA2OCwgMTEzLCAxMTYsIDU2LCAgOTQsIDk3LCA0NCwgIDczLCA3NiwgMzAsICA0NywgNTIsIDEwLCAgIDIsIDE1LCAgMCwNCi0gICAgMjAwLCAxOTcsIDcyLCAxNzgsIDE3NiwgNjMsIDE1NywgMTU2LCA1NiwgMTM1LCAxMzYsIDQ2LCAxMTQsIDExNiwgMzcsICA5NCwgOTYsIDI2LCAgNzMsIDc2LCAxMSwgIDQ3LCA1MSwgIDAsICAgMCwgMTQsICAwLA0KLSAgICAyMDEsIDE5NywgNDUsIDE3NywgMTc1LCAzOCwgMTU2LCAxNTUsIDMxLCAxMzUsIDEzNSwgMjUsIDExNCwgMTE1LCAxNywgIDk0LCA5NiwgIDUsICA3MywgNzUsICAwLCAgNDYsIDUxLCAgMCwgICAwLCAxNCwgIDAsDQotICAgIDE4NywgMTgzLCAyMTgsIDE2NywgMTY1LCAxOTcsIDE0OSwgMTQ3LCAxNzYsIDEyOSwgMTI3LCAxNTMsIDExMSwgMTA5LCAxMzIsICA5MiwgOTAsIDExMSwgIDczLCA3MCwgODksICA0OSwgNDYsIDYyLCAgMTUsICA0LCAyMiwNCi0gICAgMTkwLCAxODMsIDE5NywgMTcwLCAxNjQsIDE3NywgMTUxLCAxNDYsIDE1OSwgMTMwLCAxMjcsIDEzOSwgMTEyLCAxMDksIDExOSwgIDkzLCA5MCwgOTksICA3MiwgNzAsIDc4LCAgNDksIDQ1LCA1MywgIDE0LCAgNCwgMTUsDQotICAgIDE5MiwgMTgyLCAxNzksIDE3MSwgMTYzLCAxNjEsIDE1MywgMTQ1LCAxNDQsIDEzMiwgMTI2LCAxMjUsIDExMywgMTA4LCAxMDcsICA5MywgODksIDg4LCAgNzMsIDcwLCA2OSwgIDQ5LCA0NSwgNDUsICAxMywgIDUsICA2LA0KLSAgICAxOTUsIDE4MSwgMTU5LCAxNzIsIDE2MiwgMTQyLCAxNTIsIDE0NSwgMTI3LCAxMzIsIDEyNSwgMTExLCAxMTMsIDEwNywgOTQsICA5MywgODgsIDc3LCAgNzMsIDY5LCA1OSwgIDQ4LCA0NSwgMzcsICAxMSwgIDUsICAwLA0KLSAgICAxOTUsIDE4MCwgMTM5LCAxNzMsIDE2MSwgMTI0LCAxNTMsIDE0MywgMTEwLCAxMzMsIDEyNSwgOTYsIDExMywgMTA2LCA4MSwgIDk0LCA4OCwgNjYsICA3MywgNjgsIDQ5LCAgNDksIDQ0LCAyOCwgICA5LCAgNiwgIDAsDQotICAgIDE5NiwgMTc5LCAxMTgsIDE3NCwgMTYwLCAxMDYsIDE1NCwgMTQyLCA5NCwgMTMzLCAxMjQsIDgxLCAxMTMsIDEwNSwgNjgsICA5NCwgODcsIDU0LCAgNzMsIDY4LCAzOSwgIDQ4LCA0NCwgMTgsICAgNSwgIDUsICAwLA0KLSAgICAxOTcsIDE3OCwgOTYsIDE3NiwgMTU5LCA4NiwgMTU1LCAxNDEsIDc1LCAxMzQsIDEyMywgNjQsIDExNCwgMTA1LCA1MywgIDk0LCA4NywgNDAsICA3MywgNjgsIDI2LCAgNDgsIDQ0LCAgNSwgICAyLCAgNiwgIDAsDQotICAgIDE5OSwgMTc4LCA3MCwgMTc2LCAxNTgsIDYyLCAxNTYsIDE0MSwgNTQsIDEzNCwgMTIyLCA0NCwgMTE0LCAxMDQsIDM1LCAgOTQsIDg2LCAyMywgIDczLCA2NywgIDgsICA0NywgNDQsICAwLCAgIDIsICA2LCAgMCwNCi0gICAgMTk5LCAxNzcsIDQ1LCAxNzgsIDE1OCwgNDAsIDE1NiwgMTQwLCAzMiwgMTM1LCAxMjIsIDI2LCAxMTQsIDEwNCwgMTYsICA5NCwgODYsICA0LCAgNzMsIDY3LCAgMCwgIDQ3LCA0NCwgIDAsICAgMCwgIDcsICAwLA0KLSAgICAxODgsIDE2MSwgMjA0LCAxNjgsIDE0NCwgMTgzLCAxNDksIDEyOSwgMTY0LCAxMzAsIDExMiwgMTQ0LCAxMTIsIDk1LCAxMjMsICA5MywgNzgsIDEwMywgIDc0LCA2MCwgODEsICA1MCwgMzYsIDU2LCAgMTYsICAwLCAxNiwNCi0gICAgMTkwLCAxNjAsIDE4NSwgMTcwLCAxNDQsIDE2NSwgMTUxLCAxMjgsIDE0OCwgMTMyLCAxMTEsIDEzMCwgMTEyLCA5NSwgMTEwLCAgOTMsIDc4LCA5MiwgIDc0LCA1OSwgNzIsICA1MCwgMzYsIDQ4LCAgMTYsICAwLCAgOCwNCi0gICAgMTkyLCAxNjAsIDE2NywgMTcxLCAxNDMsIDE1MCwgMTUzLCAxMjgsIDEzNCwgMTMyLCAxMTEsIDExNywgMTEyLCA5NCwgMTAwLCAgOTQsIDc3LCA4MiwgIDc0LCA1OSwgNjMsICA1MCwgMzYsIDQwLCAgMTQsICAwLCAgMCwNCi0gICAgMTkzLCAxNTksIDE0OSwgMTcyLCAxNDMsIDEzNCwgMTUzLCAxMjcsIDExOSwgMTMzLCAxMTAsIDEwMywgMTEzLCA5NCwgODcsICA5MywgNzcsIDcyLCAgNzMsIDU5LCA1NCwgIDUwLCAzNiwgMzIsICAxMiwgIDAsICAwLA0KLSAgICAxOTUsIDE1OSwgMTMxLCAxNzMsIDE0MiwgMTE3LCAxNTMsIDEyNywgMTA0LCAxMzIsIDExMCwgOTAsIDExMywgOTMsIDc2LCAgOTMsIDc2LCA2MSwgIDc0LCA1OSwgNDUsICA0OSwgMzYsIDIzLCAgIDksICAwLCAgMCwNCi0gICAgMTk2LCAxNTgsIDExMywgMTc0LCAxNDEsIDEwMSwgMTU1LCAxMjYsIDg5LCAxMzMsIDEwOSwgNzYsIDExMywgOTMsIDY0LCAgOTQsIDc2LCA1MSwgIDc0LCA1OCwgMzUsICA0OSwgMzYsIDE0LCAgIDYsICAwLCAgMCwNCi0gICAgMTk3LCAxNTcsIDkyLCAxNzQsIDE0MSwgODAsIDE1NCwgMTI1LCA3MSwgMTM0LCAxMDgsIDYwLCAxMTQsIDkyLCA1MCwgIDk0LCA3NSwgMzcsICA3MywgNTgsIDIyLCAgNDgsIDM2LCAgMSwgICA1LCAgMCwgIDAsDQotICAgIDE5NywgMTU3LCA2OCwgMTc1LCAxNDAsIDU5LCAxNTUsIDEyNCwgNTEsIDEzNCwgMTA4LCA0MSwgMTEzLCA5MSwgMzIsICA5NCwgNzUsIDIxLCAgNzMsIDU3LCAgNSwgIDQ4LCAzNSwgIDAsICAgNSwgIDAsICAwLA0KLSAgICAxOTgsIDE1NiwgNDYsIDE3NiwgMTQwLCA0MCwgMTU1LCAxMjQsIDMyLCAxMzQsIDEwNywgMjQsIDExNCwgOTEsIDE0LCAgOTQsIDc1LCAgMiwgIDczLCA1NywgIDAsICA0OCwgMzYsICAwLCAgIDMsICAwLCAgMCwNCi0gICAgMTg5LCAxNDAsIDE5MSwgMTY4LCAxMjYsIDE3MiwgMTUwLCAxMTIsIDE1NCwgMTMxLCA5NywgMTM0LCAxMTIsIDgyLCAxMTUsICA5NCwgNjYsIDk2LCAgNzQsIDQ5LCA3NSwgIDUxLCAyNSwgNTAsICAxMiwgIDAsIDEwLA0KLSAgICAxOTEsIDEzOSwgMTczLCAxNzAsIDEyNSwgMTU0LCAxNTIsIDExMSwgMTM4LCAxMzIsIDk2LCAxMjEsIDExMywgODEsIDEwMywgIDk0LCA2NiwgODUsICA3NCwgNDgsIDY2LCAgNTAsIDI2LCA0MiwgIDEyLCAgMCwgIDEsDQotICAgIDE5MiwgMTM5LCAxNTcsIDE3MSwgMTI1LCAxNDAsIDE1MiwgMTExLCAxMjUsIDEzMiwgOTYsIDEwOSwgMTEzLCA4MSwgOTIsICA5NCwgNjUsIDc2LCAgNzQsIDQ4LCA1OCwgIDUwLCAyNiwgMzUsICAgOSwgIDAsICAwLA0KLSAgICAxOTMsIDEzOSwgMTQwLCAxNzIsIDEyNCwgMTI1LCAxNTMsIDExMCwgMTEyLCAxMzMsIDk1LCA5NiwgMTEzLCA4MCwgODIsICA5NCwgNjUsIDY2LCAgNzQsIDQ5LCA1MCwgIDUwLCAyNiwgMjgsICAgNywgIDAsICAwLA0KLSAgICAxOTQsIDEzOCwgMTIzLCAxNzIsIDEyMywgMTA5LCAxNTMsIDExMCwgOTcsIDEzMywgOTUsIDg0LCAxMTMsIDgwLCA3MCwgIDk0LCA2NSwgNTYsICA3NCwgNDgsIDQwLCAgNTAsIDI2LCAyMCwgICA2LCAgMCwgIDAsDQotICAgIDE5NCwgMTM4LCAxMDUsIDE3MywgMTIzLCA5NCwgMTUzLCAxMDksIDgzLCAxMzMsIDk0LCA3MCwgMTEyLCA3OSwgNTksICA5NCwgNjQsIDQ2LCAgNzQsIDQ4LCAzMSwgIDUwLCAyNiwgIDksICAgNCwgIDAsICAwLA0KLSAgICAxOTYsIDEzOCwgODcsIDE3NCwgMTIyLCA3NywgMTUzLCAxMDksIDY3LCAxMzMsIDkzLCA1NiwgMTEzLCA3OSwgNDYsICA5NCwgNjQsIDM0LCAgNzMsIDQ4LCAxOCwgIDQ5LCAyNywgIDAsICAgNCwgIDAsICAwLA0KLSAgICAxOTYsIDEzNywgNjUsIDE3NCwgMTIyLCA1NywgMTU0LCAxMDgsIDQ5LCAxMzMsIDkzLCAzOSwgMTEzLCA3OSwgMjksICA5NCwgNjQsIDE4LCAgNzQsIDQ4LCAgMywgIDQ5LCAyNywgIDAsICAgMiwgIDAsICAwLA0KLSAgICAxOTcsIDEzNywgNDcsIDE3NSwgMTIyLCA0MCwgMTU1LCAxMDgsIDMyLCAxMzMsIDkzLCAyMywgMTE0LCA3OSwgMTQsICA5NCwgNjQsICAxLCAgNzMsIDQ4LCAgMCwgIDQ4LCAyNywgIDAsICAgMiwgIDAsICAwLA0KLSAgICAxODksIDExOSwgMTc3LCAxNjgsIDEwNiwgMTU5LCAxNTAsIDk0LCAxNDIsIDEzMSwgODEsIDEyNCwgMTEzLCA2NywgMTA3LCAgOTQsIDUzLCA4OSwgIDc0LCAzNywgNjksICA1MSwgMTEsIDQ1LCAgIDYsICAwLCAgMywNCi0gICAgMTkxLCAxMTksIDE2MSwgMTcwLCAxMDYsIDE0NCwgMTUyLCA5NCwgMTI5LCAxMzIsIDgxLCAxMTIsIDExMywgNjcsIDk2LCAgOTQsIDUzLCA3OSwgIDc0LCAzNywgNjEsICA1MSwgMTMsIDM4LCAgIDYsICAwLCAgMCwNCi0gICAgMTkyLCAxMTksIDE0NiwgMTcwLCAxMDYsIDEzMSwgMTUyLCA5NCwgMTE3LCAxMzIsIDgwLCAxMDEsIDExMiwgNjcsIDg1LCAgOTQsIDUzLCA3MCwgIDc0LCAzNywgNTMsICA1MCwgMTQsIDMxLCAgIDQsICAwLCAgMCwNCi0gICAgMTkyLCAxMTksIDEzMSwgMTcxLCAxMDYsIDExNywgMTUzLCA5NCwgMTA1LCAxMzIsIDgwLCA4OSwgMTEzLCA2NywgNzUsICA5NCwgNTQsIDYxLCAgNzQsIDM4LCA0NSwgIDUxLCAxNCwgMjMsICAgMywgIDAsICAwLA0KLSAgICAxOTMsIDExOCwgMTE0LCAxNzEsIDEwNiwgMTAyLCAxNTMsIDkzLCA5MCwgMTMyLCA4MCwgNzgsIDExMywgNjcsIDY1LCAgOTQsIDUzLCA1MiwgIDc0LCAzNywgMzYsICA1MCwgMTUsIDE2LCAgIDEsICAwLCAgMCwNCi0gICAgMTk0LCAxMTgsIDk5LCAxNzIsIDEwNSwgODksIDE1MywgOTMsIDc4LCAxMzIsIDgwLCA2NiwgMTEzLCA2NywgNTQsICA5NCwgNTMsIDQyLCAgNzQsIDM4LCAyNywgIDUwLCAxNiwgIDUsICAgMSwgIDAsICAwLA0KLSAgICAxOTQsIDExOCwgODIsIDE3MywgMTA1LCA3MiwgMTUzLCA5MywgNjMsIDEzMiwgNzksIDUzLCAxMTMsIDY3LCA0MiwgIDk0LCA1MywgMzAsICA3NCwgMzgsIDE1LCAgNDksIDE2LCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDE5NSwgMTE3LCA2MywgMTczLCAxMDUsIDU1LCAxNTQsIDkzLCA0NywgMTMzLCA3OSwgMzcsIDExMywgNjYsIDI3LCAgOTQsIDUzLCAxNSwgIDczLCAzOCwgIDAsICA0OCwgMTYsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMTk1LCAxMTcsIDQ2LCAxNzMsIDEwNCwgMzksIDE1NCwgOTIsIDMyLCAxMzMsIDc5LCAyMiwgMTEzLCA2NiwgMTMsICA5NCwgNTMsICAwLCAgNzMsIDM4LCAgMCwgIDQ4LCAxNywgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxODksIDk2LCAxNjYsIDE2OCwgODUsIDE0NywgMTUwLCA3NCwgMTMyLCAxMzEsIDYyLCAxMTUsIDExMywgNTEsIDk5LCAgOTQsIDM4LCA4MiwgIDc0LCAyMSwgNjMsICA1MSwgIDAsIDQwLCAgIDEsICAwLCAgMCwNCi0gICAgMTkwLCA5NiwgMTUwLCAxNzAsIDg1LCAxMzMsIDE1MiwgNzUsIDExOSwgMTMyLCA2MywgMTA0LCAxMTMsIDUxLCA4OCwgIDk0LCAzOCwgNzIsICA3NSwgMjIsIDU1LCAgNTEsICAwLCAzMywgICAxLCAgMCwgIDAsDQotICAgIDE5MiwgOTYsIDEzNywgMTcwLCA4NSwgMTIxLCAxNTIsIDc0LCAxMDgsIDEzMiwgNjQsIDk0LCAxMTMsIDUyLCA3OSwgIDk0LCAzOSwgNjQsICA3NCwgMjMsIDQ4LCAgNTAsICAwLCAyNiwgICAwLCAgMCwgIDAsDQotICAgIDE5MiwgOTYsIDEyMiwgMTcxLCA4NiwgMTA5LCAxNTIsIDc1LCA5NiwgMTMyLCA2MywgODMsIDExMywgNTIsIDY5LCAgOTQsIDM5LCA1NiwgIDc0LCAyNCwgNDEsICA1MCwgIDAsIDE5LCAgIDAsICAwLCAgMCwNCi0gICAgMTkzLCA5NiwgMTA3LCAxNzEsIDg1LCA5NiwgMTUyLCA3NSwgODQsIDEzMiwgNjQsIDcyLCAxMTMsIDUyLCA2MCwgIDk0LCAzOSwgNDcsICA3NCwgMjQsIDMyLCAgNTAsICAxLCAxMCwgICAwLCAgMCwgIDAsDQotICAgIDE5MywgOTYsIDkzLCAxNzIsIDg1LCA4MiwgMTUyLCA3NSwgNzIsIDEzMywgNjMsIDYxLCAxMTMsIDUxLCA0OSwgIDk0LCAzOSwgMzcsICA3MywgMjUsIDIzLCAgNDksICAyLCAgMiwgICAwLCAgMCwgIDAsDQotICAgIDE5NCwgOTYsIDc4LCAxNzIsIDg1LCA2OCwgMTUyLCA3NSwgNTksIDEzMiwgNjMsIDQ5LCAxMTMsIDUyLCAzOSwgIDk0LCA0MCwgMjYsICA3MywgMjUsIDExLCAgNDgsICAzLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDE5NCwgOTYsIDYwLCAxNzMsIDg1LCA1MiwgMTUzLCA3NSwgNDQsIDEzMiwgNjQsIDM1LCAxMTIsIDUyLCAyNSwgIDk0LCA0MCwgMTIsICA3MywgMjYsICAwLCAgNDgsICA0LCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDE5NSwgOTYsIDQ2LCAxNzMsIDg1LCAzOCwgMTU0LCA3NCwgMzEsIDEzMywgNjMsIDIyLCAxMTMsIDUyLCAxMSwgIDkzLCA0MCwgIDAsICA3MywgMjYsICAwLCAgNDcsICA1LCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDE4OCwgNjcsIDE1MywgMTY4LCA1OCwgMTM3LCAxNTEsIDQ5LCAxMjIsIDEzMSwgMzksIDEwNiwgMTEzLCAyOCwgOTAsICA5NCwgMTMsIDc1LCAgNzUsICAwLCA1NywgIDUxLCAgMCwgMzUsICAgMCwgIDAsICAwLA0KLSAgICAxOTAsIDY4LCAxMzgsIDE3MCwgNTksIDEyMywgMTUyLCA1MCwgMTEwLCAxMzIsIDQxLCA5NiwgMTEzLCAyOSwgODAsICA5NCwgMTYsIDY2LCAgNzUsICAwLCA0OSwgIDUwLCAgMCwgMjcsICAgMCwgIDAsICAwLA0KLSAgICAxOTEsIDY5LCAxMjYsIDE3MCwgNTksIDExMiwgMTUxLCA1MiwgMTAwLCAxMzIsIDQyLCA4NiwgMTEzLCAzMCwgNzMsICA5NSwgMTcsIDU4LCAgNzUsICAwLCA0MiwgIDUwLCAgMCwgMjEsICAgMCwgIDAsICAwLA0KLSAgICAxOTIsIDcwLCAxMTMsIDE3MCwgNjEsIDEwMCwgMTUxLCA1MiwgODksIDEzMiwgNDIsIDc3LCAxMTMsIDMxLCA2NCwgIDk0LCAxOSwgNTAsICA3NCwgIDEsIDM1LCAgNTAsICAwLCAxNCwgICAwLCAgMCwgIDAsDQotICAgIDE5MiwgNzAsIDEwMCwgMTcwLCA2MiwgODksIDE1MSwgNTMsIDc3LCAxMzEsIDQzLCA2NiwgMTEyLCAzMiwgNTQsICA5NCwgMjAsIDQyLCAgNzQsICAyLCAyNywgIDQ5LCAgMCwgIDUsICAgMCwgIDAsICAwLA0KLSAgICAxOTIsIDcxLCA4NywgMTcxLCA2MSwgNzcsIDE1MiwgNTMsIDY3LCAxMzEsIDQ0LCA1NywgMTEyLCAzMywgNDUsICA5NCwgMjEsIDMzLCAgNzQsICA0LCAxOSwgIDQ5LCAgMCwgIDEsICAgMCwgIDAsICAwLA0KLSAgICAxOTMsIDcxLCA3NCwgMTcxLCA2MiwgNjQsIDE1MiwgNTMsIDU1LCAxMzIsIDQ0LCA0NSwgMTEzLCAzNCwgMzQsICA5NCwgMjIsIDIzLCAgNzMsICA1LCAgNywgIDQ4LCAgMCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxOTMsIDcwLCA1OCwgMTcyLCA2MiwgNTAsIDE1MiwgNTQsIDQyLCAxMzIsIDQ0LCAzMiwgMTEyLCAzNSwgMjIsICA5MywgMjMsIDEwLCAgNzMsICA2LCAgMCwgIDQ3LCAgMCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxOTMsIDcwLCA0NSwgMTcyLCA2MiwgMzgsIDE1MywgNTQsIDMxLCAxMzIsIDQ0LCAyMSwgMTEyLCAzNSwgIDksICA5NCwgMjMsICAwLCAgNzMsICA3LCAgMCwgIDQ3LCAgMCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxODksIDI2LCAxNDEsIDE2OSwgMTUsIDEyNiwgMTUwLCAgMiwgMTEyLCAxMzEsICAwLCA5NywgMTEzLCAgMCwgODIsICA5NCwgIDAsIDY3LCAgNzUsICAwLCA1MSwgIDUwLCAgMCwgMjksICAgMCwgIDAsICAwLA0KLSAgICAxOTAsIDI4LCAxMjgsIDE3MCwgMTgsIDExNCwgMTUxLCAgOCwgMTAxLCAxMzIsICAwLCA4OCwgMTEzLCAgMCwgNzQsICA5NCwgIDAsIDYwLCAgNzUsICAwLCA0NCwgIDUwLCAgMCwgMjMsICAgMCwgIDAsICAwLA0KLSAgICAxOTEsIDMwLCAxMTcsIDE3MCwgMjMsIDEwNCwgMTUyLCAxMSwgOTIsIDEzMiwgIDEsIDc5LCAxMTMsICAwLCA2NywgIDk1LCAgMCwgNTMsICA3NSwgIDAsIDM3LCAgNTAsICAwLCAxNywgICAwLCAgMCwgIDAsDQotICAgIDE5MSwgMzMsIDEwNSwgMTcwLCAyNiwgOTMsIDE1MSwgMTgsIDgzLCAxMzIsICA2LCA3MCwgMTEyLCAgMCwgNTgsICA5NCwgIDAsIDQ1LCAgNzUsICAwLCAzMCwgIDQ5LCAgMCwgIDgsICAgMCwgIDAsICAwLA0KLSAgICAxOTEsIDM0LCA5MywgMTcwLCAyNywgODIsIDE1MSwgMjAsIDcyLCAxMzEsICA4LCA2MSwgMTEyLCAgMCwgNDksICA5NCwgIDAsIDM4LCAgNzQsICAwLCAyMywgIDQ5LCAgMCwgIDQsICAgMCwgIDAsICAwLA0KLSAgICAxOTEsIDM2LCA4MiwgMTcwLCAyOSwgNzEsIDE1MSwgMjIsIDYzLCAxMzEsIDExLCA1MiwgMTEyLCAgMCwgNDEsICA5MywgIDAsIDI5LCAgNzQsICAwLCAxNCwgIDQ4LCAgMCwgIDEsICAgMCwgIDAsICAwLA0KLSAgICAxOTEsIDM4LCA2OSwgMTcwLCAzMSwgNjAsIDE1MSwgMjQsIDUxLCAxMzEsIDE0LCA0MSwgMTEyLCAgMSwgMzEsICA5MywgIDAsIDE5LCAgNzMsICAwLCAgMywgIDQ4LCAgMCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxOTIsIDM3LCA1NiwgMTcxLCAzMSwgNDcsIDE1MiwgMjUsIDQwLCAxMzEsIDE3LCAzMCwgMTEyLCAgNCwgMTksICA5MywgIDAsICA3LCAgNzMsICAwLCAgMCwgIDQ3LCAgMCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxOTIsIDM4LCA0NSwgMTcxLCAzMywgMzYsIDE1MiwgMjYsIDMwLCAxMzEsIDE4LCAyMSwgMTExLCAgNywgIDksICA5MywgIDAsICAwLCAgNzMsICAwLCAgMCwgIDQ3LCAgMCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxNDksIDIxOCwgMjQ4LCAxMzMsIDE5NCwgMjIyLCAxMTksIDE3MywgMTk4LCAxMDIsIDE1MSwgMTczLCAgODYsIDEzMCwgMTQ4LCAgNzAsIDEwOCwgMTI1LCAgNTMsIDg1LCAxMDAsICAzMiwgNTksIDcxLCAgIDAsIDIyLCAzMywNCi0gICAgMTU0LCAyMTYsIDIyMywgMTM3LCAxOTMsIDIwMCwgMTIyLCAxNzIsIDE3OCwgMTA2LCAxNTAsIDE1NiwgIDg5LCAxMjgsIDEzMywgIDczLCAxMDcsIDExMiwgIDU0LCA4NSwgODksICAzMSwgNTksIDYzLCAgIDAsIDIyLCAyNiwNCi0gICAgMTU5LCAyMTUsIDIwMiwgMTQxLCAxOTIsIDE4MSwgMTI2LCAxNzEsIDE2MSwgMTA4LCAxNDksIDE0MSwgIDkwLCAxMjgsIDEyMSwgIDc0LCAxMDcsIDEwMCwgIDU1LCA4NSwgODAsICAzMiwgNTgsIDU1LCAgIDAsIDIyLCAxOSwNCi0gICAgMTYxLCAyMTMsIDE3OSwgMTQ0LCAxOTAsIDE2MCwgMTI2LCAxNzAsIDE0MywgMTA5LCAxNDgsIDEyNSwgIDkyLCAxMjcsIDEwNywgIDc0LCAxMDYsIDg5LCAgNTYsIDg0LCA2OSwgIDMyLCA1OCwgNDYsICAgMCwgMjEsIDExLA0KLSAgICAxNjMsIDIxMSwgMTU2LCAxNDQsIDE4OSwgMTM5LCAxMjksIDE2OCwgMTI1LCAxMTAsIDE0NywgMTA4LCAgOTMsIDEyNiwgOTIsICA3NSwgMTA1LCA3NiwgIDU3LCA4MywgNTgsICAzMywgNTgsIDM3LCAgIDAsIDIxLCAgMSwNCi0gICAgMTY3LCAyMTEsIDEzMywgMTQ3LCAxODgsIDEyMCwgMTMwLCAxNjcsIDEwNSwgMTEwLCAxNDUsIDkyLCAgOTMsIDEyNSwgNzgsICA3NiwgMTA0LCA2NCwgIDU4LCA4MywgNDgsICAzMywgNTcsIDI3LCAgIDAsIDIxLCAgMCwNCi0gICAgMTY5LCAyMTAsIDEwOCwgMTQ5LCAxODcsIDk2LCAxMzEsIDE2NiwgODYsIDExMiwgMTQ0LCA3NCwgIDk0LCAxMjQsIDYyLCAgNzcsIDEwMywgNDksICA1OCwgODIsIDM1LCAgMzMsIDU3LCAxNSwgICAwLCAyMSwgIDAsDQotICAgIDE3MCwgMjA5LCA4MCwgMTUxLCAxODYsIDcxLCAxMzMsIDE2NSwgNjIsIDExNCwgMTQzLCA1MiwgIDk1LCAxMjMsIDQyLCAgNzcsIDEwMywgMzIsICA1OCwgODEsIDE4LCAgMzMsIDU2LCAgMCwgICAwLCAyMSwgIDAsDQotICAgIDE3MywgMjA4LCA1NSwgMTUyLCAxODYsIDQ5LCAxMzQsIDE2NSwgNDEsIDExNCwgMTQzLCAzNCwgIDk1LCAxMjIsIDI1LCAgNzcsIDEwMiwgMTQsICA1OCwgODEsICAwLCAgMzMsIDU2LCAgMCwgICAwLCAyMSwgIDAsDQotICAgIDE1NCwgMTk1LCAyMzIsIDEzNywgMTc0LCAyMDcsIDEyMiwgMTU2LCAxODUsIDEwNSwgMTM2LCAxNjMsICA4OSwgMTE2LCAxNDAsICA3MywgOTcsIDExNywgIDU2LCA3NiwgOTQsICAzNSwgNTEsIDY2LCAgIDAsIDEzLCAyOCwNCi0gICAgMTU4LCAxOTQsIDIwOSwgMTQxLCAxNzQsIDE4NywgMTI1LCAxNTUsIDE2NywgMTA5LCAxMzUsIDE0NiwgIDkxLCAxMTYsIDEyNSwgIDc1LCA5NiwgMTA1LCAgNTcsIDc1LCA4MywgIDM1LCA1MCwgNTcsICAgMCwgMTIsIDIxLA0KLSAgICAxNjEsIDE5MywgMTg5LCAxNDQsIDE3MywgMTY5LCAxMjgsIDE1NCwgMTUxLCAxMTAsIDEzNCwgMTMyLCAgOTMsIDExNSwgMTEzLCAgNzcsIDk1LCA5NCwgIDU4LCA3NSwgNzQsICAzNSwgNTAsIDUwLCAgIDAsIDEyLCAxMywNCi0gICAgMTY0LCAxOTIsIDE2OCwgMTQ1LCAxNzEsIDE1MSwgMTI5LCAxNTMsIDEzNCwgMTExLCAxMzMsIDExNywgIDk0LCAxMTQsIDEwMCwgIDc2LCA5NSwgODIsICA1OCwgNzUsIDY0LCAgMzYsIDUwLCA0MiwgICAwLCAxMiwgIDUsDQotICAgIDE2NSwgMTkxLCAxNDcsIDE0NywgMTcwLCAxMzEsIDEzMCwgMTUyLCAxMTcsIDExMywgMTMyLCAxMDIsICA5NSwgMTEzLCA4NiwgIDc3LCA5NCwgNzEsICA1OCwgNzQsIDU0LCAgMzUsIDUwLCAzMywgICAwLCAxMywgIDAsDQotICAgIDE2NywgMTg5LCAxMjYsIDE0OCwgMTY5LCAxMTMsIDEzMiwgMTUxLCAxMDAsIDExMywgMTMxLCA4NiwgIDk2LCAxMTIsIDczLCAgNzcsIDkzLCA1OSwgIDU5LCA3MywgNDMsICAzNSwgNDksIDIzLCAgIDAsIDEyLCAgMCwNCi0gICAgMTcwLCAxODksIDEwNCwgMTUwLCAxNjgsIDkxLCAxMzMsIDE1MCwgODEsIDExNCwgMTMwLCA2OSwgIDk2LCAxMTEsIDU3LCAgNzgsIDkyLCA0NiwgIDU5LCA3MywgMzEsICAzNSwgNDksIDExLCAgIDAsIDEzLCAgMCwNCi0gICAgMTcxLCAxODgsIDc4LCAxNTIsIDE2OCwgNjgsIDEzNCwgMTQ5LCA2MCwgMTE1LCAxMzAsIDUwLCAgOTYsIDExMSwgNDEsICA3OCwgOTIsIDI5LCAgNjAsIDczLCAxNSwgIDM1LCA0OSwgIDAsICAgMCwgMTIsICAwLA0KLSAgICAxNzMsIDE4NywgNTUsIDE1MywgMTY3LCA0NywgMTM0LCAxNDksIDM5LCAxMTUsIDEyOSwgMzMsICA5NywgMTEwLCAyNCwgIDc5LCA5MiwgMTMsICA2MCwgNzIsICAwLCAgMzUsIDQ4LCAgMCwgICAwLCAxMiwgIDAsDQotICAgIDE1NywgMTc1LCAyMTcsIDEzOSwgMTU3LCAxOTYsIDEyNSwgMTQxLCAxNzUsIDEwOSwgMTIyLCAxNTMsICA5MiwgMTA0LCAxMzIsICA3NiwgODYsIDExMCwgIDU5LCA2NywgODgsICAzNywgNDMsIDYxLCAgIDEsICAxLCAyMywNCi0gICAgMTYxLCAxNzQsIDE5NiwgMTQ0LCAxNTYsIDE3NiwgMTI3LCAxNDAsIDE1OCwgMTEwLCAxMjEsIDEzNywgIDk0LCAxMDQsIDExOCwgIDc3LCA4NSwgOTgsICA1OSwgNjcsIDc4LCAgMzcsIDQzLCA1MywgICAwLCAgMiwgMTYsDQotICAgIDE2MywgMTc0LCAxNzgsIDE0NiwgMTU2LCAxNjAsIDEzMCwgMTM5LCAxNDMsIDExMiwgMTIxLCAxMjQsICA5NSwgMTAzLCAxMDYsICA3OCwgODUsIDg4LCAgNjAsIDY2LCA2OSwgIDM3LCA0MiwgNDYsICAgMCwgIDIsICA3LA0KLSAgICAxNjYsIDE3MywgMTU5LCAxNDcsIDE1NCwgMTQyLCAxMzAsIDEzOCwgMTI3LCAxMTMsIDEyMCwgMTExLCAgOTYsIDEwMywgOTUsICA3OCwgODQsIDc3LCAgNjAsIDY2LCA1OSwgIDM3LCA0MywgMzcsICAgMCwgIDIsICAwLA0KLSAgICAxNjYsIDE3MiwgMTM5LCAxNDgsIDE1NCwgMTI1LCAxMzEsIDEzNywgMTEyLCAxMTMsIDEyMCwgOTYsICA5NiwgMTAyLCA4MSwgIDc4LCA4NCwgNjYsICA2MCwgNjUsIDUwLCAgMzcsIDQyLCAyOSwgICAwLCAgMywgIDAsDQotICAgIDE2NywgMTcxLCAxMjAsIDE0OSwgMTUzLCAxMDcsIDEzMywgMTM3LCA5NSwgMTE0LCAxMTgsIDgxLCAgOTcsIDEwMSwgNjksICA3OSwgODQsIDU2LCAgNjAsIDY1LCA0MCwgIDM3LCA0MiwgMTksICAgMCwgIDMsICAwLA0KLSAgICAxNzAsIDE3MCwgOTksIDE1MSwgMTUyLCA4NywgMTM0LCAxMzYsIDc3LCAxMTUsIDExOCwgNjYsICA5NywgMTAxLCA1NSwgIDc5LCA4MywgNDIsICA2MSwgNjUsIDI4LCAgMzcsIDQyLCAgNywgICAwLCAgMywgIDAsDQotICAgIDE3MiwgMTcwLCA3NSwgMTUyLCAxNTEsIDY1LCAxMzQsIDEzNSwgNTcsIDExNSwgMTE3LCA0OCwgIDk3LCAxMDAsIDM4LCAgNzksIDgzLCAyNywgIDYxLCA2NCwgMTIsICAzNiwgNDIsICAwLCAgIDAsICAzLCAgMCwNCi0gICAgMTcyLCAxNjksIDU1LCAxNTQsIDE1MSwgNDYsIDEzNSwgMTM0LCA0MCwgMTE2LCAxMTYsIDMyLCAgOTcsIDk5LCAyMSwgIDgwLCA4MiwgMTAsICA2MSwgNjQsICAwLCAgMzYsIDQxLCAgMCwgICAwLCAgMywgIDAsDQotICAgIDE2MCwgMTU0LCAyMDMsIDE0MywgMTM5LCAxODIsIDEyNywgMTI0LCAxNjQsIDExMSwgMTA3LCAxNDMsICA5NSwgOTEsIDEyMiwgIDc4LCA3NSwgMTAzLCAgNjAsIDU3LCA4MSwgIDM5LCAzMywgNTYsICAgMSwgIDAsIDE4LA0KLSAgICAxNjMsIDE1NCwgMTg0LCAxNDYsIDEzOCwgMTY1LCAxMzAsIDEyMywgMTQ4LCAxMTMsIDEwNywgMTI5LCAgOTYsIDkwLCAxMTAsICA3OSwgNzQsIDkyLCAgNjEsIDU2LCA3MiwgIDM5LCAzNCwgNDgsICAgMiwgIDAsICA5LA0KLSAgICAxNjUsIDE1NCwgMTY3LCAxNDcsIDEzNywgMTQ5LCAxMzEsIDEyMiwgMTM0LCAxMTQsIDEwNiwgMTE3LCAgOTYsIDkwLCAxMDAsICA3OSwgNzQsIDgyLCAgNjEsIDU2LCA2NCwgIDM5LCAzMywgNDAsICAgMiwgIDAsICAxLA0KLSAgICAxNjYsIDE1MywgMTUwLCAxNDksIDEzNywgMTMzLCAxMzIsIDEyMiwgMTE5LCAxMTQsIDEwNiwgMTA0LCAgOTcsIDkwLCA4OCwgIDc5LCA3NCwgNzIsICA2MSwgNTYsIDU1LCAgMzksIDM0LCAzMywgICAwLCAgMCwgIDAsDQotICAgIDE2OCwgMTUyLCAxMzIsIDE0OSwgMTM2LCAxMTcsIDEzMiwgMTIxLCAxMDQsIDExNCwgMTA1LCA5MCwgIDk3LCA4OSwgNzYsICA3OSwgNzMsIDYyLCAgNjEsIDU2LCA0NiwgIDM4LCAzNCwgMjUsICAgMCwgIDAsICAwLA0KLSAgICAxNjksIDE1MSwgMTE0LCAxNTAsIDEzNSwgMTAxLCAxMzMsIDEyMSwgOTAsIDExNCwgMTA0LCA3NywgIDk3LCA4OSwgNjUsICA4MCwgNzMsIDUxLCAgNjEsIDU2LCAzNiwgIDM4LCAzNCwgMTYsICAgMCwgIDAsICAwLA0KLSAgICAxNzAsIDE1MCwgOTQsIDE1MSwgMTM1LCA4MywgMTM0LCAxMjAsIDczLCAxMTUsIDEwNCwgNjIsICA5OCwgODgsIDUxLCAgODAsIDcyLCAzOSwgIDYxLCA1NiwgMjQsICAzOCwgMzQsICAzLCAgIDAsICAwLCAgMCwNCi0gICAgMTcyLCAxNTAsIDcyLCAxNTMsIDEzNCwgNjMsIDEzNSwgMTE5LCA1NSwgMTE1LCAxMDMsIDQ1LCAgOTgsIDg4LCAzNiwgIDgwLCA3MiwgMjQsICA2MSwgNTUsICA5LCAgMzgsIDM0LCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDE3MiwgMTUwLCA1NCwgMTUzLCAxMzQsIDQ3LCAxMzUsIDExOSwgMzgsIDExNiwgMTAzLCAzMCwgIDk4LCA4NywgMjEsICA4MCwgNzIsICA4LCAgNjIsIDU1LCAgMCwgIDM3LCAzNCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxNjIsIDEzNCwgMTkwLCAxNDUsIDEyMCwgMTcxLCAxMjksIDEwOCwgMTUzLCAxMTMsIDkzLCAxMzQsICA5NywgNzgsIDExNSwgIDgwLCA2MywgOTYsICA2MiwgNDYsIDc1LCAgNDEsIDIzLCA1MSwgICAwLCAgMCwgMTEsDQotICAgIDE2NSwgMTM0LCAxNzMsIDE0NywgMTIwLCAxNTQsIDEzMSwgMTA3LCAxMzgsIDExNCwgOTIsIDEyMCwgIDk3LCA3OCwgMTAzLCAgODAsIDYzLCA4NSwgIDYyLCA0NiwgNjYsICA0MCwgMjMsIDQzLCAgIDAsICAwLCAgMiwNCi0gICAgMTY2LCAxMzQsIDE1NywgMTQ4LCAxMjAsIDE0MCwgMTMyLCAxMDYsIDEyNSwgMTE0LCA5MiwgMTA5LCAgOTcsIDc3LCA5MywgIDgxLCA2MywgNzcsICA2MiwgNDYsIDU4LCAgNDAsIDI0LCAzNiwgICAwLCAgMCwgIDAsDQotICAgIDE2OCwgMTMzLCAxNDAsIDE0OSwgMTE5LCAxMjUsIDEzMiwgMTA2LCAxMTIsIDExNSwgOTIsIDk3LCAgOTgsIDc3LCA4MiwgIDgxLCA2MiwgNjcsICA2MiwgNDYsIDUwLCAgNDAsIDI0LCAyOSwgICAwLCAgMCwgIDAsDQotICAgIDE2OCwgMTMzLCAxMjMsIDE1MCwgMTE5LCAxMTAsIDEzMywgMTA2LCA5NywgMTE1LCA5MSwgODQsICA5OCwgNzcsIDcwLCAgODEsIDYyLCA1NywgIDYyLCA0NiwgNDEsICA0MCwgMjQsIDIwLCAgIDAsICAwLCAgMCwNCi0gICAgMTY5LCAxMzIsIDEwNywgMTUwLCAxMTgsIDk0LCAxMzMsIDEwNSwgODQsIDExNSwgOTEsIDcyLCAgOTgsIDc2LCA2MCwgIDgwLCA2MiwgNDcsICA2MiwgNDYsIDMyLCAgMzksIDI1LCAxMSwgICAwLCAgMCwgIDAsDQotICAgIDE3MSwgMTMyLCA4OSwgMTUyLCAxMTgsIDc5LCAxMzUsIDEwNSwgNjksIDExNSwgOTAsIDU4LCAgOTgsIDc2LCA0NywgIDgwLCA2MiwgMzYsICA2MiwgNDYsIDIxLCAgMzksIDI1LCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDE3MSwgMTMyLCA2OSwgMTUzLCAxMTcsIDYwLCAxMzUsIDEwNCwgNTIsIDExNiwgOTAsIDQyLCAgOTgsIDc2LCAzMywgIDgxLCA2MSwgMjEsICA2MiwgNDYsICA2LCAgMzgsIDI1LCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDE3MiwgMTMyLCA1NCwgMTUzLCAxMTgsIDQ1LCAxMzUsIDEwNCwgMzgsIDExNiwgOTAsIDI4LCAgOTgsIDc2LCAxOCwgIDgxLCA2MSwgIDYsICA2MiwgNDYsICAwLCAgMzgsIDI1LCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDE2NCwgMTE1LCAxNzcsIDE0NiwgMTAzLCAxNTksIDEzMCwgOTEsIDE0MywgMTE0LCA3OCwgMTI1LCAgOTcsIDY1LCAxMDcsICA4MSwgNTEsIDg5LCAgNjMsIDM0LCA2OSwgIDQxLCAgOSwgNDYsICAgMCwgIDAsICA0LA0KLSAgICAxNjYsIDExNSwgMTYxLCAxNDgsIDEwMywgMTQ0LCAxMzIsIDkxLCAxMjksIDExNSwgNzgsIDExMiwgIDk4LCA2NSwgOTYsICA4MSwgNTEsIDc5LCAgNjMsIDM1LCA2MSwgIDQxLCAxMSwgMzgsICAgMCwgIDAsICAwLA0KLSAgICAxNjcsIDExNSwgMTQ2LCAxNTAsIDEwMiwgMTMxLCAxMzIsIDkxLCAxMTcsIDExNSwgNzgsIDEwMSwgIDk4LCA2NSwgODYsICA4MSwgNTEsIDcxLCAgNjMsIDM1LCA1NCwgIDQxLCAxMiwgMzIsICAgMCwgIDAsICAwLA0KLSAgICAxNjgsIDExNCwgMTMyLCAxNTAsIDEwMywgMTE4LCAxMzMsIDkxLCAxMDUsIDExNiwgNzgsIDkxLCAgOTgsIDY0LCA3NiwgIDgyLCA1MSwgNjEsICA2MywgMzYsIDQ2LCAgNDEsIDEzLCAyNCwgICAwLCAgMCwgIDAsDQotICAgIDE2OSwgMTE0LCAxMTYsIDE1MCwgMTAyLCAxMDMsIDEzNCwgOTAsIDkxLCAxMTYsIDc4LCA3OSwgIDk4LCA2NSwgNjYsICA4MSwgNTEsIDUzLCAgNjMsIDM2LCAzNywgIDQwLCAxNCwgMTcsICAgMCwgIDAsICAwLA0KLSAgICAxNjksIDExNCwgMTAxLCAxNTEsIDEwMSwgODksIDEzNCwgOTAsIDc5LCAxMTYsIDc3LCA2NywgIDk4LCA2NCwgNTYsICA4MSwgNTEsIDQ0LCAgNjMsIDM2LCAyOSwgIDQwLCAxNSwgIDcsICAgMCwgIDAsICAwLA0KLSAgICAxNzAsIDExNCwgODUsIDE1MiwgMTAxLCA3NSwgMTM1LCA5MCwgNjUsIDExNiwgNzcsIDU0LCAgOTgsIDY0LCA0NCwgIDgxLCA1MSwgMzIsICA2MywgMzYsIDE3LCAgMzksIDE1LCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDE3MiwgMTEzLCA2NiwgMTUyLCAxMDEsIDU4LCAxMzUsIDg5LCA0OSwgMTE2LCA3NywgNDAsICA5OSwgNjQsIDMwLCAgODEsIDUxLCAxOCwgIDYyLCAzNiwgIDMsICAzOCwgMTYsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMTcxLCAxMTMsIDUxLCAxNTMsIDEwMSwgNDQsIDEzNiwgODksIDM2LCAxMTYsIDc3LCAyOCwgIDk5LCA2NCwgMTgsICA4MSwgNTEsICA1LCAgNjIsIDM2LCAgMCwgIDM4LCAxNiwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxNjUsIDk0LCAxNjYsIDE0NywgODIsIDE0NywgMTMyLCA3MiwgMTMyLCAxMTUsIDYxLCAxMTUsICA5OCwgNDksIDk5LCAgODIsIDM2LCA4MiwgIDY0LCAxOSwgNjQsICA0MiwgIDAsIDQxLCAgIDAsICAwLCAgMCwNCi0gICAgMTY3LCA5MywgMTUwLCAxNTAsIDgzLCAxMzQsIDEzMywgNzMsIDEyMCwgMTE2LCA2MiwgMTA0LCAgOTksIDQ5LCA4OCwgIDgyLCAzNiwgNzIsICA2NCwgMjAsIDU1LCAgNDEsICAwLCAzMywgICAwLCAgMCwgIDAsDQotICAgIDE2OSwgOTMsIDEzNywgMTUwLCA4MywgMTIyLCAxMzQsIDczLCAxMDksIDExNiwgNjEsIDk0LCAgOTksIDUwLCA4MCwgIDgyLCAzNywgNjUsICA2NCwgMjEsIDQ5LCAgNDEsICAwLCAyNywgICAwLCAgMCwgIDAsDQotICAgIDE2OSwgOTQsIDEyMywgMTUwLCA4MywgMTEwLCAxMzMsIDczLCA5NywgMTE2LCA2MSwgODMsICA5OSwgNTAsIDcwLCAgODIsIDM4LCA1NywgIDYzLCAyMywgNDIsICA0MSwgIDAsIDIwLCAgIDAsICAwLCAgMCwNCi0gICAgMTY5LCA5NCwgMTA5LCAxNTAsIDg0LCA5NywgMTM0LCA3MywgODUsIDExNiwgNjIsIDczLCAgOTksIDUxLCA2MSwgIDgxLCAzOCwgNDgsICA2MywgMjMsIDMzLCAgNDEsICAxLCAxMSwgICAwLCAgMCwgIDAsDQotICAgIDE3MCwgOTQsIDk2LCAxNTAsIDgzLCA4NCwgMTM0LCA3MywgNzQsIDExNiwgNjEsIDYyLCAgOTksIDUwLCA1MSwgIDgyLCAzOCwgMzksICA2NCwgMjMsIDI0LCAgNDAsICAzLCAgNCwgICAwLCAgMCwgIDAsDQotICAgIDE3MSwgOTMsIDc5LCAxNTIsIDgyLCA3MCwgMTM1LCA3MywgNjEsIDExNiwgNjIsIDUxLCAgOTgsIDUxLCA0MCwgIDgxLCAzOCwgMjgsICA2MywgMjQsIDE0LCAgMzksICA0LCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDE3MSwgOTQsIDY0LCAxNTIsIDgzLCA1NSwgMTM1LCA3MywgNDcsIDExNiwgNjIsIDM3LCAgOTgsIDUwLCAyNywgIDgxLCAzOCwgMTUsICA2MywgMjQsICAxLCAgMzksICA0LCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDE3MiwgOTMsIDUxLCAxNTMsIDgyLCA0MiwgMTM1LCA3MywgMzUsIDExNywgNjIsIDI2LCAgOTksIDUxLCAxNiwgIDgxLCAzOSwgIDMsICA2MywgMjUsICAwLCAgMzgsICA1LCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDE2NiwgNjgsIDE1MywgMTQ4LCA1OSwgMTM3LCAxMzMsIDQ5LCAxMjEsIDExNSwgMzksIDEwNiwgIDk5LCAyOCwgOTEsICA4MiwgMTMsIDc1LCAgNjUsICAwLCA1OCwgIDQyLCAgMCwgMzYsICAgMCwgIDAsICAwLA0KLSAgICAxNjgsIDY4LCAxMzksIDE1MCwgNTksIDEyNCwgMTM0LCA1MCwgMTEwLCAxMTYsIDQwLCA5NiwgIDk5LCAzMCwgODEsICA4MiwgMTYsIDY2LCAgNjQsICAwLCA1MCwgIDQxLCAgMCwgMjksICAgMCwgIDAsICAwLA0KLSAgICAxNjksIDY5LCAxMjYsIDE1MCwgNTksIDExMywgMTM0LCA1MSwgMTAxLCAxMTcsIDQyLCA4NywgMTAwLCAzMCwgNzMsICA4MiwgMTcsIDU5LCAgNjUsICAwLCA0MywgIDQxLCAgMCwgMjMsICAgMCwgIDAsICAwLA0KLSAgICAxNjksIDcwLCAxMTUsIDE1MCwgNjEsIDEwMiwgMTM0LCA1MiwgODksIDExNiwgNDIsIDc3LCAgOTksIDMyLCA2NSwgIDgyLCAxOSwgNTIsICA2NCwgIDAsIDM2LCAgNDEsICAwLCAxNSwgICAwLCAgMCwgIDAsDQotICAgIDE2OSwgNzAsIDEwMSwgMTUwLCA2MSwgOTAsIDEzNCwgNTIsIDc5LCAxMTYsIDQzLCA2OCwgIDk5LCAzMiwgNTUsICA4MiwgMjEsIDQzLCAgNjQsICAyLCAyOCwgIDQxLCAgMCwgIDYsICAgMCwgIDAsICAwLA0KLSAgICAxNzAsIDcwLCA4OSwgMTUxLCA2MiwgNzksIDEzNCwgNTMsIDY5LCAxMTYsIDQ0LCA1OCwgIDk5LCAzMywgNDYsICA4MSwgMjEsIDM0LCAgNjQsICAzLCAyMCwgIDQxLCAgMCwgIDIsICAgMCwgIDAsICAwLA0KLSAgICAxNzAsIDcxLCA3NiwgMTUyLCA2MiwgNjYsIDEzNCwgNTMsIDU3LCAxMTYsIDQzLCA0NiwgIDk5LCAzMywgMzYsICA4MiwgMjIsIDI0LCAgNjQsICA1LCAxMCwgIDQwLCAgMCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxNzEsIDcwLCA2MSwgMTUyLCA2MiwgNTIsIDEzNSwgNTMsIDQ0LCAxMTYsIDQ0LCAzNSwgIDk5LCAzNCwgMjQsICA4MiwgMjIsIDEyLCAgNjMsICA2LCAgMCwgIDM5LCAgMCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxNzEsIDcxLCA0OSwgMTUzLCA2MiwgNDEsIDEzNSwgNTQsIDMzLCAxMTcsIDQ1LCAyNSwgIDk4LCAzNCwgMTMsICA4MSwgMjMsICAwLCAgNjMsICA3LCAgMCwgIDM5LCAgMCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxNjcsIDMzLCAxNDIsIDE0OSwgMjQsIDEyNywgMTM0LCAxMCwgMTEzLCAxMTYsICAwLCA5NywgMTAwLCAgMCwgODMsICA4MywgIDAsIDY4LCAgNjUsICAwLCA1MiwgIDQwLCAgMCwgMzAsICAgMCwgIDAsICAwLA0KLSAgICAxNjksIDMzLCAxMjksIDE1MCwgMjYsIDExNSwgMTM0LCAxNywgMTAyLCAxMTYsICAzLCA4OSwgMTAwLCAgMCwgNzUsICA4MywgIDAsIDYwLCAgNjUsICAwLCA0NSwgIDQwLCAgMCwgMjQsICAgMCwgIDAsICAwLA0KLSAgICAxNjksIDM2LCAxMTgsIDE1MSwgMjcsIDEwNCwgMTM0LCAxOSwgOTMsIDExNiwgIDcsIDgwLCAxMDAsICAwLCA2NywgIDgzLCAgMCwgNTQsICA2NSwgIDAsIDM4LCAgNDEsICAwLCAxNywgICAwLCAgMCwgIDAsDQotICAgIDE2OSwgMzksIDEwNywgMTUwLCAzMCwgOTQsIDEzNCwgMjIsIDg0LCAxMTYsIDExLCA3MSwgIDk5LCAgMCwgNTksICA4MywgIDAsIDQ2LCAgNjQsICAwLCAzMSwgIDQwLCAgMCwgIDksICAgMCwgIDAsICAwLA0KLSAgICAxNjksIDM5LCA5NSwgMTUxLCAzMSwgODMsIDEzNCwgMjQsIDczLCAxMTYsIDE1LCA2MiwgMTAwLCAgMSwgNTEsICA4MywgIDAsIDM4LCAgNjQsICAwLCAyNCwgIDQwLCAgMCwgIDUsICAgMCwgIDAsICAwLA0KLSAgICAxNjksIDQxLCA4MywgMTUxLCAzMywgNzMsIDEzNCwgMjYsIDY0LCAxMTcsIDE3LCA1NCwgIDk5LCAgNCwgNDIsICA4MiwgIDAsIDMwLCAgNjQsICAwLCAxNiwgIDQwLCAgMCwgIDEsICAgMCwgIDAsICAwLA0KLSAgICAxNzAsIDQyLCA3MSwgMTUyLCAzNCwgNjIsIDEzNCwgMjgsIDUzLCAxMTcsIDE5LCA0NCwgIDk5LCAgNiwgMzMsICA4MiwgIDAsIDIxLCAgNjMsICAwLCAgNCwgIDM5LCAgMCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxNzEsIDQyLCA1OSwgMTUyLCAzNSwgNTAsIDEzNCwgMjksIDQyLCAxMTcsIDIxLCAzMiwgIDk5LCAgOSwgMjIsICA4MiwgIDAsICA5LCAgNjMsICAwLCAgMCwgIDM4LCAgMCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxNzIsIDQyLCA0OCwgMTUyLCAzNiwgNDAsIDEzNSwgMjksIDMyLCAxMTcsIDIxLCAyMywgIDk5LCAxMCwgMTIsICA4MiwgIDAsICAwLCAgNjMsICAwLCAgMCwgIDM4LCAgMCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxMDcsIDIwNywgMjQ2LCAgOTYsIDE4NSwgMjIwLCAgODYsIDE2NSwgMTk2LCAgNzMsIDE0NCwgMTcxLCAgNjAsIDEyMywgMTQ3LCAgNDYsIDEwMywgMTI1LCAgMzIsIDgyLCAxMDAsICAgOSwgNTYsIDcxLCAgIDAsIDIwLCAzMywNCi0gICAgMTE1LCAyMDYsIDIyMSwgMTA0LCAxODQsIDE5OCwgIDkyLCAxNjQsIDE3OCwgIDc4LCAxNDMsIDE1NCwgIDY0LCAxMjMsIDEzMywgIDUxLCAxMDIsIDExMSwgIDM0LCA4MSwgODksICAxMCwgNTYsIDYzLCAgIDAsIDIwLCAyNywNCi0gICAgMTIyLCAyMDQsIDIwMCwgMTA4LCAxODMsIDE4MCwgIDk1LCAxNjMsIDE2MSwgIDgyLCAxNDIsIDE0MCwgIDY4LCAxMjIsIDEyMCwgIDU0LCAxMDIsIDEwMSwgIDM2LCA4MSwgNzksICAxMSwgNTYsIDU1LCAgIDAsIDIwLCAyMCwNCi0gICAgMTI1LCAyMDMsIDE3OSwgMTExLCAxODEsIDE2MCwgIDk3LCAxNjIsIDE0MywgIDg1LCAxNDEsIDEyNCwgIDcwLCAxMjEsIDEwNywgIDU1LCAxMDEsIDg5LCAgMzgsIDgwLCA2OSwgIDE0LCA1NSwgNDYsICAgMCwgMTksIDEwLA0KLSAgICAxMjgsIDIwMiwgMTU2LCAxMTMsIDE4MCwgMTQwLCAxMDIsIDE2MSwgMTI1LCAgODcsIDE0MCwgMTA4LCAgNzEsIDEyMCwgOTIsICA1NiwgMTAwLCA3NiwgIDM5LCA3OSwgNTksICAxNCwgNTUsIDM4LCAgIDAsIDIwLCAgMywNCi0gICAgMTMyLCAyMDAsIDEzNSwgMTE3LCAxNzksIDEyMSwgMTAzLCAxNTksIDEwNiwgIDg4LCAxMzksIDkzLCAgNzMsIDExOSwgNzksICA1NywgMTAwLCA2NSwgIDQxLCA3OSwgNDksICAxNSwgNTQsIDI4LCAgIDAsIDE5LCAgMCwNCi0gICAgMTM0LCAyMDAsIDExMSwgMTE5LCAxNzgsIDk4LCAxMDUsIDE1OCwgODcsICA4OSwgMTM4LCA3NiwgIDc0LCAxMTgsIDY0LCAgNTgsIDk5LCA1MSwgIDQxLCA3OCwgMzcsICAxNiwgNTQsIDE3LCAgIDAsIDE5LCAgMCwNCi0gICAgMTM3LCAxOTksIDg1LCAxMjIsIDE3NywgNzUsIDEwOCwgMTU4LCA2NiwgIDkxLCAxMzcsIDU2LCAgNzUsIDExOCwgNDYsICA1OSwgOTgsIDM1LCAgNDIsIDc4LCAyMiwgIDE2LCA1NCwgIDMsICAgMCwgMTksICAwLA0KLSAgICAxNDAsIDE5OCwgNjIsIDEyNSwgMTc3LCA1NSwgMTA5LCAxNTgsIDQ3LCAgOTIsIDEzNywgNDAsICA3NiwgMTE3LCAzMiwgIDU5LCA5OCwgMjEsICA0MiwgNzgsICA2LCAgMTYsIDU0LCAgMCwgICAwLCAxOCwgIDAsDQotICAgIDExOCwgMTg2LCAyMzEsIDEwNiwgMTY3LCAyMDYsICA5MywgMTQ5LCAxODQsICA4MSwgMTMwLCAxNjEsICA2NywgMTExLCAxMzksICA1NCwgOTIsIDExNywgIDM5LCA3MiwgOTMsICAxNywgNDgsIDY2LCAgIDAsIDEwLCAyOSwNCi0gICAgMTIzLCAxODUsIDIwNywgMTEwLCAxNjYsIDE4NiwgIDk4LCAxNDgsIDE2NywgIDg1LCAxMjksIDE0NSwgIDcxLCAxMTEsIDEyNSwgIDU2LCA5MiwgMTA0LCAgNDAsIDcyLCA4MywgIDE4LCA0OCwgNTcsICAgMCwgMTAsIDIyLA0KLSAgICAxMjgsIDE4NCwgMTg4LCAxMTMsIDE2NSwgMTY4LCAxMDIsIDE0NywgMTUxLCAgODgsIDEyOCwgMTMxLCAgNzMsIDExMCwgMTEzLCAgNTgsIDkxLCA5NCwgIDQyLCA3MSwgNzQsICAxOSwgNDgsIDUwLCAgIDAsICA5LCAxNSwNCi0gICAgMTMxLCAxODMsIDE2OCwgMTE2LCAxNjQsIDE1MSwgMTA0LCAxNDYsIDEzNCwgIDg5LCAxMjcsIDExNywgIDczLCAxMDksIDEwMCwgIDU4LCA5MCwgODMsICA0MiwgNzEsIDY1LCAgMjAsIDQ4LCA0MiwgICAwLCAgOSwgIDUsDQotICAgIDEzNCwgMTgyLCAxNDgsIDEyMCwgMTYzLCAxMzEsIDEwNSwgMTQ1LCAxMTgsICA5MCwgMTI2LCAxMDIsICA3NSwgMTA4LCA4NiwgIDU5LCA5MCwgNzIsICA0MywgNzEsIDU1LCAgMTksIDQ3LCAzNCwgICAwLCAgOSwgIDAsDQotICAgIDEzNiwgMTgxLCAxMjgsIDEyMiwgMTYyLCAxMTUsIDEwNywgMTQ0LCAxMDIsICA5MiwgMTI1LCA4NywgIDc2LCAxMDcsIDc0LCAgNjEsIDg5LCA2MCwgIDQ0LCA3MCwgNDUsICAyMCwgNDcsIDI0LCAgIDAsICA4LCAgMCwNCi0gICAgMTM5LCAxODAsIDEwNiwgMTI0LCAxNjEsIDk1LCAxMDksIDE0NCwgODMsICA5MywgMTI0LCA3MSwgIDc3LCAxMDcsIDYwLCAgNjEsIDg5LCA0NywgIDQ0LCA3MCwgMzMsICAyMCwgNDcsIDEzLCAgIDAsICA4LCAgMCwNCi0gICAgMTQyLCAxNzksIDgyLCAxMjUsIDE2MCwgNzIsIDExMSwgMTQzLCA2MywgIDk0LCAxMjQsIDU0LCAgNzcsIDEwNiwgNDQsICA2MSwgODgsIDMyLCAgNDQsIDY5LCAxOCwgIDIwLCA0NiwgIDAsICAgMCwgIDgsICAwLA0KLSAgICAxNDMsIDE3OSwgNjIsIDEyNywgMTYwLCA1NCwgMTExLCAxNDIsIDQ3LCAgOTQsIDEyNCwgMzksICA3OCwgMTA2LCAyOSwgIDYyLCA4OCwgMTgsICA0NSwgNjksICAzLCAgMjAsIDQ2LCAgMCwgICAwLCAgOCwgIDAsDQotICAgIDEyNCwgMTY3LCAyMTYsIDExMiwgMTUwLCAxOTQsICA5OSwgMTM0LCAxNzQsICA4NywgMTE3LCAxNTMsICA3MywgMTAwLCAxMzEsICA1OCwgODIsIDExMCwgIDQzLCA2NCwgODgsICAyMywgNDAsIDYxLCAgIDAsICAwLCAyNCwNCi0gICAgMTI5LCAxNjYsIDE5NSwgMTE2LCAxNTAsIDE3NSwgMTAzLCAxMzQsIDE1OCwgIDg5LCAxMTYsIDEzNywgIDc1LCA5OSwgMTE4LCAgNjAsIDgyLCA5OCwgIDQ0LCA2MywgNzgsICAyMywgNDAsIDUzLCAgIDAsICAwLCAxNywNCi0gICAgMTMyLCAxNjYsIDE3NywgMTE5LCAxNDksIDE2MCwgMTA2LCAxMzMsIDE0MywgIDkwLCAxMTUsIDEyNCwgIDc2LCA5OSwgMTA3LCAgNjEsIDgxLCA4OCwgIDQ1LCA2MywgNjksICAyNCwgNDAsIDQ2LCAgIDAsICAwLCAgOSwNCi0gICAgMTM2LCAxNjYsIDE1OSwgMTIxLCAxNDgsIDE0MywgMTA3LCAxMzIsIDEyNiwgIDkyLCAxMTUsIDExMSwgIDc3LCA5OCwgOTQsICA2MiwgODEsIDc4LCAgNDYsIDYzLCA2MCwgIDIzLCA0MCwgMzgsICAgMCwgIDAsICAwLA0KLSAgICAxMzgsIDE2NCwgMTQwLCAxMjIsIDE0NywgMTI1LCAxMDgsIDEzMSwgMTExLCAgOTMsIDExNCwgOTcsICA3OSwgOTgsIDgyLCAgNjMsIDgwLCA2NywgIDQ2LCA2MiwgNTAsICAyNCwgNDAsIDI5LCAgIDAsICAwLCAgMCwNCi0gICAgMTM5LCAxNjMsIDEyMiwgMTI0LCAxNDYsIDEwOSwgMTEwLCAxMzEsIDk2LCAgOTQsIDExNCwgODMsICA3OSwgOTcsIDcwLCAgNjMsIDgxLCA1NywgIDQ2LCA2MiwgNDEsICAyNCwgNDAsIDIxLCAgIDAsICAwLCAgMCwNCi0gICAgMTQxLCAxNjMsIDEwMSwgMTI2LCAxNDUsIDkwLCAxMTEsIDEzMCwgNzksICA5NSwgMTEzLCA2OCwgIDc5LCA5NiwgNTYsICA2MywgODAsIDQ0LCAgNDcsIDYyLCAzMCwgIDIzLCA0MCwgMTAsICAgMCwgIDAsICAwLA0KLSAgICAxNDQsIDE2MiwgNzksIDEyNywgMTQ1LCA3MCwgMTEyLCAxMjksIDYwLCAgOTUsIDExMiwgNTEsICA3OSwgOTYsIDQxLCAgNjQsIDc5LCAzMCwgIDQ3LCA2MSwgMTUsICAyMywgNDAsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMTQ1LCAxNjIsIDYwLCAxMjksIDE0NSwgNTIsIDExMywgMTI5LCA0NiwgIDk2LCAxMTIsIDM3LCAgNzksIDk1LCAyNywgIDY0LCA3OSwgMTYsICA0NywgNjEsICAxLCAgMjMsIDM5LCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDEzMSwgMTQ3LCAyMDIsIDExNywgMTMzLCAxODEsIDEwNSwgMTE5LCAxNjIsICA5MSwgMTAzLCAxNDIsICA3NywgODcsIDEyMiwgIDYyLCA3MSwgMTAyLCAgNDcsIDU0LCA4MSwgIDI2LCAzMSwgNTYsICAgMCwgIDAsIDE4LA0KLSAgICAxMzUsIDE0NywgMTgzLCAxMjAsIDEzMiwgMTY0LCAxMDcsIDExOCwgMTQ3LCAgOTMsIDEwMiwgMTI4LCAgNzgsIDg3LCAxMTAsICA2MywgNzEsIDkyLCAgNDcsIDU0LCA3MiwgIDI2LCAzMSwgNDgsICAgMCwgIDAsIDEwLA0KLSAgICAxMzgsIDE0NywgMTY2LCAxMjMsIDEzMSwgMTQ5LCAxMDgsIDExOCwgMTMzLCAgOTQsIDEwMiwgMTE2LCAgNzksIDg2LCAxMDAsICA2NCwgNzEsIDgyLCAgNDgsIDU0LCA2NCwgIDI3LCAzMSwgNDEsICAgMCwgIDAsICAyLA0KLSAgICAxMzksIDE0NiwgMTQ5LCAxMjQsIDEzMSwgMTM0LCAxMTEsIDExNywgMTE5LCAgOTQsIDEwMSwgMTAzLCAgNzksIDg2LCA4OCwgIDY0LCA3MCwgNzIsICA0OCwgNTMsIDU1LCAgMjcsIDMxLCAzMywgICAwLCAgMCwgIDAsDQotICAgIDE0MSwgMTQ2LCAxMzIsIDEyNSwgMTMxLCAxMTcsIDExMSwgMTE3LCAxMDQsICA5NSwgMTAxLCA5MSwgIDgwLCA4NiwgNzcsICA2NSwgNzAsIDYyLCAgNDgsIDUzLCA0NiwgIDI2LCAzMSwgMjUsICAgMCwgIDAsICAwLA0KLSAgICAxNDMsIDE0NSwgMTE1LCAxMjYsIDEzMCwgMTAxLCAxMTIsIDExNiwgOTAsICA5NiwgMTAwLCA3OCwgIDgwLCA4NSwgNjUsICA2NSwgNzAsIDUyLCAgNDksIDUzLCAzNywgIDI3LCAzMiwgMTcsICAgMCwgIDAsICAwLA0KLSAgICAxNDQsIDE0NCwgOTYsIDEyOCwgMTI5LCA4NSwgMTEyLCAxMTUsIDc1LCAgOTcsIDEwMCwgNjQsICA4MSwgODUsIDUyLCAgNjUsIDY5LCA0MCwgIDQ5LCA1MywgMjYsICAyNiwgMzEsICA1LCAgIDAsICAwLCAgMCwNCi0gICAgMTQ2LCAxNDQsIDc2LCAxMjksIDEyOSwgNjcsIDExNCwgMTE1LCA1OCwgIDk3LCA5OSwgNDgsICA4MiwgODQsIDM4LCAgNjYsIDY5LCAyNywgIDQ5LCA1MywgMTIsICAyNiwgMzIsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMTQ2LCAxNDQsIDU5LCAxMzAsIDEyOCwgNTEsIDExNCwgMTE0LCA0MywgIDk4LCA5OSwgMzUsICA4MiwgODQsIDI1LCAgNjYsIDY5LCAxMywgIDQ5LCA1MywgIDAsICAyNiwgMzIsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMTM1LCAxMjksIDE4OSwgMTIyLCAxMTUsIDE3MCwgMTA3LCAxMDMsIDE1MiwgIDk0LCA4OSwgMTMzLCAgNzksIDc0LCAxMTQsICA2NCwgNjAsIDk1LCAgNDksIDQzLCA3NSwgIDI5LCAyMCwgNTEsICAgMCwgIDAsIDEyLA0KLSAgICAxMzgsIDEyOSwgMTcxLCAxMjQsIDExNSwgMTUzLCAxMTAsIDEwMywgMTM4LCAgOTUsIDg5LCAxMjAsICA4MSwgNzQsIDEwMywgIDY2LCA2MCwgODYsICA1MCwgNDQsIDY3LCAgMjgsIDIxLCA0MywgICAwLCAgMCwgIDMsDQotICAgIDE0MCwgMTI5LCAxNTYsIDEyNSwgMTE1LCAxNDAsIDExMSwgMTAzLCAxMjUsICA5NiwgODksIDEwOSwgIDgxLCA3NCwgOTMsICA2NywgNjAsIDc2LCAgNTAsIDQ0LCA1OSwgIDI5LCAyMiwgMzYsICAgMCwgIDAsICAwLA0KLSAgICAxNDIsIDEyOCwgMTQwLCAxMjcsIDExNSwgMTI1LCAxMTIsIDEwMiwgMTEyLCAgOTcsIDg4LCA5NywgIDgyLCA3NCwgODMsICA2NywgNjAsIDY3LCAgNTAsIDQ0LCA1MSwgIDI5LCAyMiwgMjksICAgMCwgIDAsICAwLA0KLSAgICAxNDIsIDEyOCwgMTI0LCAxMjcsIDExNCwgMTExLCAxMTMsIDEwMiwgOTgsICA5OCwgODgsIDg1LCAgODIsIDc0LCA3MSwgIDY2LCA2MCwgNTgsICA1MCwgNDQsIDQyLCAgMjksIDIyLCAyMSwgICAwLCAgMCwgIDAsDQotICAgIDE0NCwgMTI3LCAxMDgsIDEyOCwgMTE0LCA5NiwgMTEzLCAxMDEsIDg1LCAgOTgsIDg3LCA3MywgIDgyLCA3NCwgNjEsICA2NywgNjAsIDQ4LCAgNTAsIDQ0LCAzMywgIDI4LCAyMywgMTIsICAgMCwgIDAsICAwLA0KLSAgICAxNDUsIDEyNywgOTEsIDEyOSwgMTE0LCA4MSwgMTE1LCAxMDEsIDcxLCAgOTgsIDg3LCA2MCwgIDgyLCA3MywgNDgsICA2NywgNTksIDM3LCAgNTAsIDQ0LCAyMiwgIDI5LCAyMywgIDEsICAgMCwgIDAsICAwLA0KLSAgICAxNDcsIDEyNywgNzMsIDEzMCwgMTEzLCA2MywgMTE1LCAxMDEsIDU1LCAgOTgsIDg3LCA0NSwgIDgzLCA3MywgMzUsICA2NywgNTksIDI0LCAgNTAsIDQ0LCAxMCwgIDI4LCAyNCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxNDcsIDEyNywgNTgsIDEzMSwgMTEzLCA0OSwgMTE1LCAxMDAsIDQyLCAgOTksIDg2LCAzMywgIDgzLCA3MywgMjMsICA2NywgNTksIDEwLCAgNTAsIDQ0LCAgMCwgIDI3LCAyNCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxMzgsIDExMCwgMTc3LCAxMjQsIDk5LCAxNTksIDExMCwgODgsIDE0MiwgIDk2LCA3NSwgMTI1LCAgODIsIDYyLCAxMDcsICA2NiwgNDgsIDg5LCAgNTEsIDMzLCA3MCwgIDMwLCAgOCwgNDYsICAgMCwgIDAsICA1LA0KLSAgICAxNDIsIDExMSwgMTYwLCAxMjcsIDk5LCAxNDQsIDExMywgODgsIDEzMCwgIDk4LCA3NSwgMTEyLCAgODIsIDYyLCA5NiwgIDY4LCA0OSwgODAsICA1MSwgMzMsIDYxLCAgMzAsIDEwLCAzOSwgICAwLCAgMCwgIDAsDQotICAgIDE0MywgMTExLCAxNDYsIDEyOCwgOTksIDEzMSwgMTE0LCA4OCwgMTE4LCAgOTgsIDc1LCAxMDEsICA4MywgNjIsIDg2LCAgNjgsIDQ5LCA3MSwgIDUyLCAzMywgNTQsICAzMCwgMTEsIDMyLCAgIDAsICAwLCAgMCwNCi0gICAgMTQ0LCAxMTEsIDEzMiwgMTI4LCA5OSwgMTE4LCAxMTMsIDg4LCAxMDYsICA5OSwgNzUsIDkxLCAgODMsIDYyLCA3NywgIDY4LCA0OSwgNjIsICA1MiwgMzQsIDQ2LCAgMzAsIDEyLCAyNSwgICAwLCAgMCwgIDAsDQotICAgIDE0NCwgMTExLCAxMTcsIDEyOSwgOTgsIDEwNCwgMTE0LCA4NywgOTIsICA5OSwgNzUsIDgwLCAgODMsIDYyLCA2NywgIDY4LCA0OSwgNTMsICA1MSwgMzQsIDM4LCAgMzAsIDEzLCAxOCwgICAwLCAgMCwgIDAsDQotICAgIDE0NSwgMTExLCAxMDMsIDEzMCwgOTgsIDkxLCAxMTQsIDg3LCA4MCwgIDk5LCA3NSwgNjgsICA4MywgNjMsIDU3LCAgNjgsIDUwLCA0NSwgIDUxLCAzNCwgMzAsICAzMCwgMTQsICA4LCAgIDAsICAwLCAgMCwNCi0gICAgMTQ2LCAxMTAsIDg3LCAxMzEsIDk4LCA3NiwgMTE1LCA4NywgNjcsICA5OSwgNzUsIDU2LCAgODMsIDYyLCA0NSwgIDY4LCA0OSwgMzMsICA1MiwgMzUsIDE5LCAgMzAsIDE1LCAgMiwgICAwLCAgMCwgIDAsDQotICAgIDE0OCwgMTEwLCA3MCwgMTMxLCA5OCwgNjAsIDExNiwgODYsIDUyLCAgOTksIDc0LCA0MywgIDg0LCA2MiwgMzMsICA2OSwgNDksIDIxLCAgNTIsIDM1LCAgNiwgIDI5LCAxNSwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxNDgsIDExMCwgNTYsIDEzMiwgOTcsIDQ4LCAxMTcsIDg3LCA0MCwgMTAwLCA3NSwgMzEsICA4NCwgNjIsIDIyLCAgNjgsIDQ5LCAgOSwgIDUxLCAzNSwgIDAsICAyOCwgMTUsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMTQyLCA5MSwgMTY2LCAxMjYsIDgwLCAxNDgsIDExMywgNzEsIDEzMiwgIDk4LCA1OSwgMTE1LCAgODMsIDQ3LCA5OSwgIDY5LCAzNCwgODIsICA1MywgMTcsIDY0LCAgMzIsICAwLCA0MSwgICAwLCAgMCwgIDAsDQotICAgIDE0MywgOTEsIDE1MCwgMTI4LCA4MSwgMTM1LCAxMTQsIDcxLCAxMjAsICA5OSwgNjAsIDEwNCwgIDg1LCA0OCwgODksICA2OSwgMzUsIDczLCAgNTMsIDE5LCA1NiwgIDMyLCAgMCwgMzQsICAgMCwgIDAsICAwLA0KLSAgICAxNDUsIDkxLCAxMzcsIDEyOSwgODEsIDEyMiwgMTE1LCA3MSwgMTA5LCAxMDAsIDYwLCA5NCwgIDg1LCA0OCwgODEsICA2OSwgMzUsIDY1LCAgNTMsIDE5LCA0OSwgIDMyLCAgMCwgMjgsICAgMCwgIDAsICAwLA0KLSAgICAxNDYsIDkyLCAxMjQsIDEzMCwgODEsIDExMCwgMTE1LCA3MSwgOTgsIDEwMCwgNjAsIDg0LCAgODUsIDQ5LCA3MSwgIDY5LCAzNiwgNTcsICA1MywgMjEsIDQyLCAgMzIsICAwLCAyMSwgICAwLCAgMCwgIDAsDQotICAgIDE0NywgOTEsIDExMCwgMTMwLCA4MSwgOTcsIDExNSwgNzEsIDg2LCAxMDAsIDYwLCA3NCwgIDg0LCA0OSwgNjIsICA2OSwgMzYsIDQ4LCAgNTMsIDIyLCAzNCwgIDMyLCAgMCwgMTMsICAgMCwgIDAsICAwLA0KLSAgICAxNDcsIDkyLCA5NywgMTMwLCA4MSwgODUsIDExNiwgNzIsIDc2LCAxMDAsIDYwLCA2MywgIDg1LCA0OSwgNTIsICA2OSwgMzcsIDQwLCAgNTMsIDIyLCAyNiwgIDMxLCAgMSwgIDUsICAgMCwgIDAsICAwLA0KLSAgICAxNDgsIDkyLCA4MiwgMTMxLCA4MSwgNzEsIDExNiwgNzEsIDYyLCAxMDAsIDYwLCA1MywgIDg0LCA0OSwgNDIsICA2OSwgMzcsIDMwLCAgNTIsIDIzLCAxNiwgIDMxLCAgMiwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxNDgsIDkxLCA2NywgMTMyLCA4MSwgNTcsIDExNywgNzEsIDQ5LCAxMDAsIDYwLCAzOSwgIDg0LCA0OSwgMzAsICA2OSwgMzcsIDE4LCAgNTIsIDIzLCAgMiwgIDMwLCAgMiwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxNDksIDkxLCA1NCwgMTMyLCA4MSwgNDYsIDExOCwgNzEsIDM5LCAxMDEsIDYwLCAyOSwgIDg1LCA0OSwgMTksICA2OSwgMzcsICA2LCAgNTIsIDIzLCAgMCwgIDI5LCAgMywgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxNDMsIDY4LCAxNTMsIDEyOCwgNTksIDEzNywgMTE1LCA0OSwgMTIyLCAgOTksIDM5LCAxMDcsICA4NSwgMjgsIDkxLCAgNzAsIDEzLCA3NSwgIDU0LCAgMCwgNTgsICAzMiwgIDAsIDM2LCAgIDAsICAwLCAgMCwNCi0gICAgMTQ2LCA2OCwgMTQwLCAxMzEsIDU5LCAxMjUsIDExNiwgNTEsIDExMSwgMTAwLCA0MCwgOTcsICA4NSwgMjksIDgyLCAgNzAsIDE1LCA2NywgIDU0LCAgMCwgNTAsICAzMiwgIDAsIDI5LCAgIDAsICAwLCAgMCwNCi0gICAgMTQ3LCA2OCwgMTI3LCAxMzEsIDU5LCAxMTQsIDExNywgNTEsIDEwMiwgMTAxLCA0MSwgODgsICA4NiwgMzAsIDc0LCAgNzAsIDE3LCA2MCwgIDU0LCAgMCwgNDQsICAzMiwgIDAsIDIzLCAgIDAsICAwLCAgMCwNCi0gICAgMTQ3LCA3MCwgMTE1LCAxMzEsIDYwLCAxMDMsIDExNiwgNTIsIDkxLCAxMDAsIDQyLCA3OCwgIDg1LCAzMiwgNjUsICA3MCwgMTksIDUzLCAgNTQsICAxLCAzOCwgIDMyLCAgMCwgMTcsICAgMCwgIDAsICAwLA0KLSAgICAxNDcsIDcwLCAxMDMsIDEzMSwgNjEsIDkxLCAxMTcsIDUzLCA4MSwgMTAxLCA0MywgNjksICA4NiwgMzIsIDU3LCAgNzAsIDIwLCA0NCwgIDU0LCAgMiwgMzAsICAzMiwgIDAsICA3LCAgIDAsICAwLCAgMCwNCi0gICAgMTQ4LCA3MCwgOTEsIDEzMiwgNjEsIDgwLCAxMTcsIDUyLCA3MCwgMTAxLCA0MywgNTksICA4NSwgMzMsIDQ4LCAgNzAsIDIxLCAzNiwgIDUzLCAgNCwgMjIsICAzMiwgIDAsICAzLCAgIDAsICAwLCAgMCwNCi0gICAgMTQ4LCA3MCwgNzgsIDEzMiwgNjIsIDY4LCAxMTcsIDUzLCA1OCwgMTAxLCA0MywgNDgsICA4NSwgMzQsIDM4LCAgNzAsIDIyLCAyNiwgIDUzLCAgNiwgMTIsICAzMSwgIDAsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMTQ5LCA3MSwgNjQsIDEzMiwgNjIsIDU0LCAxMTgsIDU0LCA0NiwgMTAxLCA0NCwgMzcsICA4NSwgMzQsIDI3LCAgNjksIDIzLCAxNSwgIDUzLCAgNywgIDEsICAzMCwgIDAsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMTUwLCA3MCwgNTMsIDEzNCwgNjEsIDQ0LCAxMTgsIDU0LCAzNiwgMTAxLCA0NCwgMjgsICA4NSwgMzUsIDE3LCAgNjksIDIzLCAgNCwgIDUyLCAgOCwgIDAsICAzMCwgIDAsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMTQ1LCAzOCwgMTQzLCAxMzAsIDI5LCAxMjgsIDExNywgMTgsIDExNCwgMTAxLCAgMywgOTgsICA4NywgIDAsIDg0LCAgNzIsICAwLCA2OSwgIDU0LCAgMCwgNTMsICAzMCwgIDAsIDMxLCAgIDAsICAwLCAgMCwNCi0gICAgMTQ3LCAzOCwgMTMwLCAxMzIsIDMwLCAxMTYsIDExNywgMjIsIDEwMywgMTAxLCAgOCwgODksICA4NywgIDAsIDc2LCAgNzIsICAwLCA2MiwgIDU0LCAgMCwgNDYsICAzMCwgIDAsIDI0LCAgIDAsICAwLCAgMCwNCi0gICAgMTQ4LCA0MCwgMTE5LCAxMzIsIDMxLCAxMDUsIDExNywgMjMsIDk0LCAxMDEsIDEzLCA4MSwgIDg3LCAgMCwgNjgsICA3MSwgIDAsIDU1LCAgNTQsICAwLCAzOSwgIDMwLCAgMCwgMTgsICAgMCwgIDAsICAwLA0KLSAgICAxNDgsIDQyLCAxMDgsIDEzMiwgMzQsIDk2LCAxMTcsIDI1LCA4NSwgMTAyLCAxNSwgNzMsICA4NiwgIDIsIDYwLCAgNzEsICAwLCA0NywgIDU0LCAgMCwgMzMsICAzMCwgIDAsIDExLCAgIDAsICAwLCAgMCwNCi0gICAgMTQ4LCA0MywgOTYsIDEzMywgMzUsIDg1LCAxMTcsIDI4LCA3NSwgMTAyLCAxOCwgNjQsICA4NywgIDUsIDUyLCAgNzEsICAwLCA0MCwgIDU0LCAgMCwgMjUsICAzMCwgIDAsICA1LCAgIDAsICAwLCAgMCwNCi0gICAgMTQ5LCA0NCwgODUsIDEzMiwgMzYsIDc1LCAxMTgsIDI5LCA2NiwgMTAxLCAyMCwgNTUsICA4NiwgIDgsIDQ0LCAgNzAsICAwLCAzMiwgIDUzLCAgMCwgMTgsICAyOSwgIDAsICAyLCAgIDAsICAwLCAgMCwNCi0gICAgMTQ5LCA0NSwgNzQsIDEzMywgMzcsIDY0LCAxMTgsIDMxLCA1NSwgMTAyLCAyMSwgNDUsICA4NSwgMTAsIDM0LCAgNzAsICAwLCAyMiwgIDUzLCAgMCwgIDYsICAyOCwgIDAsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMTUwLCA0NiwgNjEsIDEzMywgMzksIDUyLCAxMTgsIDMxLCA0NCwgMTAyLCAyMywgMzQsICA4NSwgMTIsIDI0LCAgNzAsICAwLCAxMiwgIDUyLCAgMCwgIDAsICAyOCwgIDAsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMTUwLCA0NiwgNTEsIDEzMywgNDAsIDQyLCAxMTksIDMyLCAzNSwgMTAyLCAyNCwgMjUsICA4NSwgMTMsIDE0LCAgNzAsICAwLCAgMSwgIDUyLCAgMCwgIDAsICAyNywgIDAsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgNTMsIDE5OCwgMjQ0LCAgNDksIDE3NywgMjE4LCAgNDEsIDE1OCwgMTk1LCAgMzIsIDEzOCwgMTcxLCAgMjIsIDExOCwgMTQ3LCAgMTEsIDk4LCAxMjQsICAgMCwgNzgsIDEwMCwgICAwLCA1NCwgNzEsICAgMCwgMTgsIDM0LA0KLSAgICA2OSwgMTk2LCAyMjAsICA2NCwgMTc1LCAxOTYsICA1NCwgMTU3LCAxNzYsICA0NSwgMTM3LCAxNTQsICAzMiwgMTE3LCAxMzMsICAxOSwgOTgsIDExMSwgICAwLCA3OCwgODksICAgMCwgNTMsIDYzLCAgIDAsIDE3LCAyNywNCi0gICAgODAsIDE5NSwgMTk4LCAgNjksIDE3NSwgMTc5LCAgNjAsIDE1NiwgMTU5LCAgNTAsIDEzNiwgMTM5LCAgMzgsIDExNiwgMTIwLCAgMjUsIDk4LCAxMDEsICAgNCwgNzcsIDgwLCAgIDAsIDUzLCA1NSwgICAwLCAxNywgMjEsDQotICAgIDg0LCAxOTMsIDE3NywgIDc1LCAxNzMsIDE1OSwgIDY0LCAxNTUsIDE0MiwgIDU1LCAxMzUsIDEyNCwgIDQxLCAxMTYsIDEwNywgIDI3LCA5NywgODksICAgOSwgNzYsIDcwLCAgIDAsIDUzLCA0NywgICAwLCAxNywgMTEsDQotICAgIDg5LCAxOTMsIDE1NywgIDc5LCAxNzIsIDE0MCwgIDcwLCAxNTQsIDEyNSwgIDU3LCAxMzQsIDEwOSwgIDQ0LCAxMTUsIDkyLCAgMzIsIDk2LCA3NiwgIDEzLCA3NiwgNTksICAgMCwgNTIsIDM5LCAgIDAsIDE2LCAgNCwNCi0gICAgOTQsIDE5MSwgMTM1LCAgODUsIDE3MSwgMTIxLCAgNzIsIDE1MiwgMTA4LCAgNjAsIDEzMywgOTQsICA0NywgMTE0LCA4MCwgIDMyLCA5NSwgNjUsICAxNSwgNzYsIDQ5LCAgIDAsIDUyLCAyOSwgICAwLCAxNiwgIDAsDQotICAgIDk4LCAxOTAsIDExMywgIDg3LCAxNzAsIDEwMCwgIDc2LCAxNTIsIDg5LCAgNjIsIDEzMiwgNzcsICA0OSwgMTEzLCA2NSwgIDM1LCA5NSwgNTIsICAxOCwgNzUsIDM3LCAgIDAsIDUyLCAxOCwgICAwLCAxNSwgIDAsDQotICAgIDEwMywgMTkwLCA4OSwgIDkwLCAxNjksIDgwLCAgNzgsIDE1MSwgNzAsICA2NCwgMTMyLCA2MCwgIDUxLCAxMTMsIDQ5LCAgMzcsIDk0LCAzOCwgIDIwLCA3NSwgMjUsICAgMCwgNTIsICA1LCAgIDAsIDE1LCAgMCwNCi0gICAgMTA2LCAxODksIDY5LCAgOTMsIDE2OSwgNjEsICA4MCwgMTUxLCA1MywgIDY2LCAxMzEsIDQ1LCAgNTIsIDExMywgMzYsICAzNywgOTQsIDI1LCAgMTksIDc0LCAxMSwgICAwLCA1MSwgIDAsICAgMCwgMTUsICAwLA0KLSAgICA3NiwgMTc4LCAyMjksICA2OCwgMTU5LCAyMDUsICA2MSwgMTQyLCAxODMsICA1MCwgMTI0LCAxNjAsICA0MCwgMTA2LCAxMzgsICAyOCwgODgsIDExNiwgIDEyLCA2OSwgOTMsICAgMCwgNDUsIDY2LCAgIDAsICA1LCAyOSwNCi0gICAgODYsIDE3NywgMjA3LCAgNzgsIDE1OCwgMTg0LCAgNjcsIDE0MiwgMTY2LCAgNTYsIDEyMywgMTQ1LCAgNDUsIDEwNiwgMTI1LCAgMzEsIDg4LCAxMDUsICAxNiwgNjksIDgzLCAgIDAsIDQ1LCA1OCwgICAwLCAgNiwgMjIsDQotICAgIDkzLCAxNzYsIDE4NywgIDgxLCAxNTgsIDE2OCwgIDcxLCAxNDEsIDE1MCwgIDYxLCAxMjMsIDEzMSwgIDQ3LCAxMDUsIDExMywgIDM1LCA4NywgOTQsICAyMCwgNjgsIDc0LCAgIDAsIDQ1LCA1MSwgICAwLCAgNSwgMTYsDQotICAgIDk4LCAxNzUsIDE2OCwgIDg0LCAxNTcsIDE1MCwgIDc1LCAxNDAsIDEzNCwgIDYzLCAxMjIsIDExNywgIDUwLCAxMDQsIDEwMCwgIDM3LCA4NywgODMsICAyMSwgNjgsIDY1LCAgIDAsIDQ1LCA0MiwgICAwLCAgNCwgIDcsDQotICAgIDEwMCwgMTc0LCAxNDksICA4OSwgMTU1LCAxMzIsICA3NiwgMTM5LCAxMTcsICA2NSwgMTIxLCAxMDIsICA1MywgMTA0LCA4NywgIDM5LCA4NiwgNzIsICAyMywgNjcsIDU1LCAgIDAsIDQ1LCAzNCwgICAwLCAgMywgIDAsDQotICAgIDEwMywgMTczLCAxMzAsICA5MiwgMTU1LCAxMTUsICA4MCwgMTM4LCAxMDIsICA2OCwgMTIwLCA4OCwgIDUzLCAxMDMsIDc1LCAgNDAsIDg2LCA2MSwgIDI0LCA2NywgNDUsICAgMCwgNDUsIDI1LCAgIDAsICAzLCAgMCwNCi0gICAgMTA3LCAxNzIsIDEwOCwgIDk1LCAxNTQsIDk2LCAgODIsIDEzNywgODUsICA3MCwgMTE5LCA3MywgIDU1LCAxMDIsIDYxLCAgNDIsIDg1LCA0OSwgIDI1LCA2NywgMzQsICAgMCwgNDUsIDE0LCAgIDAsICAzLCAgMCwNCi0gICAgMTEwLCAxNzIsIDg2LCAgOTcsIDE1MywgNzYsICA4NSwgMTM3LCA2NywgIDcwLCAxMTksIDU3LCAgNTYsIDEwMiwgNDYsICA0MiwgODQsIDM1LCAgMjYsIDY2LCAyMSwgICAwLCA0NCwgIDEsICAgMCwgIDMsICAwLA0KLSAgICAxMTIsIDE3MSwgNjcsICA5OCwgMTUzLCA1OSwgIDg2LCAxMzcsIDUyLCAgNzEsIDExOSwgNDQsICA1OCwgMTAyLCAzNCwgIDQ0LCA4NSwgMjIsICAyNywgNjYsICA3LCAgIDAsIDQ0LCAgMCwgICAwLCAgMywgIDAsDQotICAgIDkwLCAxNjAsIDIxNSwgIDgxLCAxNDQsIDE5MywgIDcwLCAxMjksIDE3MywgIDYxLCAxMTIsIDE1MSwgIDQ5LCA5NSwgMTMxLCAgMzcsIDc5LCAxMDksICAyMiwgNjEsIDg3LCAgIDAsIDM4LCA2MSwgICAwLCAgMCwgMjUsDQotICAgIDk2LCAxNjAsIDE5NCwgIDg2LCAxNDMsIDE3NCwgIDc1LCAxMjgsIDE1NywgIDY1LCAxMTIsIDEzNywgIDUzLCA5NSwgMTE3LCAgNDAsIDc4LCA5OCwgIDI1LCA2MCwgNzgsICAgMCwgMzgsIDUzLCAgIDAsICAwLCAxNywNCi0gICAgMTAwLCAxNTksIDE3NywgIDg5LCAxNDMsIDE1OSwgIDc5LCAxMjgsIDE0MywgIDY3LCAxMTEsIDEyNCwgIDU1LCA5NSwgMTA3LCAgNDIsIDc4LCA4OSwgIDI3LCA2MCwgNzAsICAgMiwgMzgsIDQ2LCAgIDAsICAwLCAgOSwNCi0gICAgMTA0LCAxNTgsIDE1OSwgIDkyLCAxNDIsIDE0MywgIDgxLCAxMjcsIDEyNywgIDY5LCAxMTAsIDExMCwgIDU2LCA5NCwgOTQsICA0MywgNzgsIDc4LCAgMjgsIDYwLCA2MCwgICAyLCAzOCwgMzgsICAgMCwgIDAsICAxLA0KLSAgICAxMDcsIDE1NywgMTQwLCAgOTQsIDE0MSwgMTI1LCAgODIsIDEyNiwgMTEyLCAgNzEsIDExMCwgOTcsICA1OSwgOTQsIDgyLCAgNDUsIDc3LCA2NywgIDI5LCA1OSwgNTEsICAgNCwgMzcsIDMwLCAgIDAsICAwLCAgMCwNCi0gICAgMTEwLCAxNTYsIDEyMiwgIDk3LCAxNDAsIDEwOSwgIDg1LCAxMjUsIDk3LCAgNzIsIDEwOSwgODMsICA1OCwgOTMsIDcxLCAgNDUsIDc3LCA1NywgIDI5LCA2MCwgNDIsICAgNSwgMzgsIDIyLCAgIDAsICAwLCAgMCwNCi0gICAgMTExLCAxNTYsIDEwMywgIDk5LCAxMzksIDkxLCAgODcsIDEyNSwgODEsICA3MywgMTA4LCA2OSwgIDYwLCA5MiwgNTgsICA0NiwgNzcsIDQ1LCAgMzAsIDU5LCAzMSwgICA1LCAzOCwgMTIsICAgMCwgIDAsICAwLA0KLSAgICAxMTUsIDE1NiwgODIsIDEwMSwgMTQwLCA3MywgIDg4LCAxMjQsIDYzLCAgNzQsIDEwOCwgNTMsICA2MCwgOTIsIDQ0LCAgNDYsIDc2LCAzMiwgIDMxLCA1OSwgMTgsICAgNiwgMzcsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMTE2LCAxNTUsIDY1LCAxMDIsIDEzOSwgNTgsICA4OSwgMTI0LCA0OSwgIDc1LCAxMDgsIDQxLCAgNjEsIDkyLCAzMiwgIDQ4LCA3NiwgMjEsICAzMSwgNTksICA2LCAgIDUsIDM3LCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDEwMCwgMTQxLCAyMDEsICA4OCwgMTI3LCAxODEsICA3OSwgMTE0LCAxNjIsICA2OSwgOTksIDE0MiwgIDU3LCA4MywgMTIyLCAgNDQsIDY4LCAxMDIsICAzMCwgNTEsIDgxLCAgIDcsIDI4LCA1NiwgICAwLCAgMCwgMTksDQotICAgIDEwNSwgMTQxLCAxODIsICA5NCwgMTI3LCAxNjMsICA4MywgMTE0LCAxNDYsICA3MSwgOTgsIDEyOCwgIDU5LCA4MywgMTEwLCAgNDYsIDY4LCA5MSwgIDMxLCA1MSwgNzIsICAxMCwgMjgsIDQ4LCAgIDAsICAwLCAxMSwNCi0gICAgMTA4LCAxNDEsIDE2NiwgIDk2LCAxMjcsIDE0OSwgIDg1LCAxMTMsIDEzMywgIDczLCA5OCwgMTE2LCAgNjAsIDgzLCA5OSwgIDQ2LCA2OCwgODIsICAzMiwgNTEsIDY0LCAgMTEsIDI5LCA0MSwgICAwLCAgMCwgIDIsDQotICAgIDExMSwgMTQxLCAxNDksICA5OCwgMTI2LCAxMzQsICA4OCwgMTEyLCAxMTksICA3NCwgOTcsIDEwMywgIDYxLCA4MywgODgsICA0OCwgNjcsIDcyLCAgMzMsIDUxLCA1NiwgIDExLCAyOSwgMzQsICAgMCwgIDAsICAwLA0KLSAgICAxMTIsIDE0MCwgMTMyLCAxMDAsIDEyNSwgMTE4LCAgODksIDExMiwgMTA1LCAgNzUsIDk3LCA5MSwgIDYyLCA4MiwgNzcsICA0OSwgNjgsIDYyLCAgMzMsIDUxLCA0NywgIDEyLCAyOSwgMjYsICAgMCwgIDAsICAwLA0KLSAgICAxMTUsIDE0MCwgMTE2LCAxMDIsIDEyNSwgMTAzLCAgOTAsIDExMSwgOTEsICA3NiwgOTYsIDc4LCAgNjIsIDgyLCA2NSwgIDQ5LCA2NywgNTIsICAzNCwgNTEsIDM4LCAgMTMsIDI5LCAxOCwgICAwLCAgMCwgIDAsDQotICAgIDExNywgMTM5LCA5NywgMTAzLCAxMjQsIDg3LCAgOTEsIDExMSwgNzcsICA3OCwgOTYsIDY1LCAgNjMsIDgxLCA1NCwgIDQ5LCA2NywgNDEsICAzNCwgNTEsIDI3LCAgMTIsIDI5LCAgNywgICAwLCAgMCwgIDAsDQotICAgIDExOSwgMTM4LCA3OCwgMTA1LCAxMjQsIDY5LCAgOTIsIDExMCwgNjAsICA3OCwgOTUsIDUwLCAgNjUsIDgxLCA0MCwgIDUwLCA2NywgMjksICAzNCwgNTEsIDE1LCAgMTMsIDMwLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDEyMCwgMTM4LCA2NCwgMTA2LCAxMjQsIDU0LCAgOTMsIDExMCwgNDcsICA3OCwgOTUsIDM4LCAgNjUsIDgxLCAyOSwgIDUwLCA2NiwgMTcsICAzNCwgNTAsICAyLCAgMTMsIDI5LCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDEwNywgMTI0LCAxODksICA5NiwgMTExLCAxNjksICA4NSwgOTksIDE1MiwgIDczLCA4NSwgMTMyLCAgNjEsIDcxLCAxMTQsICA0OCwgNTcsIDk1LCAgMzQsIDQxLCA3NSwgIDE0LCAxOCwgNTEsICAgMCwgIDAsIDEzLA0KLSAgICAxMTEsIDEyNCwgMTcxLCAxMDAsIDExMSwgMTUzLCAgODgsIDk5LCAxMzcsICA3NSwgODUsIDEyMCwgIDYzLCA3MiwgMTAzLCAgNTAsIDU4LCA4NSwgIDM2LCA0MSwgNjYsICAxNSwgMTksIDQzLCAgIDAsICAwLCAgNCwNCi0gICAgMTEzLCAxMjQsIDE1NiwgMTAxLCAxMTEsIDEzOSwgIDkwLCA5OSwgMTI1LCAgNzcsIDg1LCAxMDksICA2NCwgNzEsIDkzLCAgNTEsIDU3LCA3NywgIDM2LCA0MiwgNTksICAxNywgMjAsIDM3LCAgIDAsICAwLCAgMCwNCi0gICAgMTE1LCAxMjQsIDE0MCwgMTAzLCAxMTEsIDEyNSwgIDkwLCA5OSwgMTEyLCAgNzgsIDg1LCA5NywgIDY0LCA3MSwgODIsICA1MiwgNTcsIDY3LCAgMzYsIDQyLCA1MCwgIDE2LCAyMCwgMzAsICAgMCwgIDAsICAwLA0KLSAgICAxMTcsIDEyMywgMTI1LCAxMDQsIDExMCwgMTExLCAgOTIsIDk4LCA5OSwgIDc5LCA4NSwgODYsICA2NSwgNzEsIDcyLCAgNTEsIDU4LCA1OSwgIDM3LCA0MiwgNDMsICAxNywgMjEsIDIyLCAgIDAsICAwLCAgMCwNCi0gICAgMTE4LCAxMjMsIDExMCwgMTA1LCAxMTAsIDk3LCAgOTMsIDk4LCA4NiwgIDc4LCA4NCwgNzQsICA2NiwgNzEsIDYyLCAgNTIsIDU3LCA0OSwgIDM3LCA0MiwgMzQsICAxNywgMjIsIDE0LCAgIDAsICAwLCAgMCwNCi0gICAgMTIwLCAxMjMsIDkzLCAxMDYsIDEwOSwgODIsICA5NCwgOTcsIDcyLCAgODAsIDg0LCA2MSwgIDY2LCA3MSwgNTAsICA1MiwgNTcsIDM4LCAgMzcsIDQyLCAyNCwgIDE3LCAyMiwgIDIsICAgMCwgIDAsICAwLA0KLSAgICAxMjEsIDEyMiwgNzUsIDEwOCwgMTA5LCA2NiwgIDk1LCA5NywgNTgsICA4MCwgODQsIDQ4LCAgNjYsIDcxLCAzNywgIDUyLCA1NywgMjYsICAzNywgNDIsIDEyLCAgMTYsIDIyLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDEyMiwgMTIzLCA2MiwgMTA4LCAxMDksIDUyLCAgOTUsIDk3LCA0NSwgIDgxLCA4NCwgMzYsICA2NywgNzAsIDI2LCAgNTIsIDU3LCAxNCwgIDM3LCA0MiwgIDAsICAxNSwgMjIsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMTEzLCAxMDcsIDE3NywgMTAyLCA5NiwgMTU5LCAgODksIDg1LCAxNDEsICA3OCwgNzIsIDEyNCwgIDY1LCA2MCwgMTA3LCAgNTIsIDQ2LCA4OSwgIDM3LCAzMCwgNzAsICAxOCwgIDUsIDQ2LCAgIDAsICAwLCAgNiwNCi0gICAgMTE2LCAxMDcsIDE2MCwgMTA0LCA5NiwgMTQ0LCAgOTIsIDg1LCAxMjksICA4MCwgNzIsIDExMiwgIDY3LCA2MCwgOTYsICA1MywgNDcsIDgwLCAgMzgsIDMxLCA2MiwgIDE5LCAgNywgMzksICAgMCwgIDAsICAwLA0KLSAgICAxMTgsIDEwNywgMTQ3LCAxMDUsIDk2LCAxMzEsICA5MywgODUsIDExOCwgIDgwLCA3MiwgMTAxLCAgNjcsIDYwLCA4NywgIDU0LCA0NywgNzEsICAzOSwgMzEsIDU0LCAgMTksICA4LCAzMiwgICAwLCAgMCwgIDAsDQotICAgIDExOSwgMTA3LCAxMzIsIDEwNiwgOTYsIDExOCwgIDk0LCA4NSwgMTA2LCAgODEsIDczLCA5MSwgIDY3LCA2MCwgNzcsICA1NCwgNDcsIDYzLCAgMzksIDMyLCA0NywgIDIwLCAgOSwgMjUsICAgMCwgIDAsICAwLA0KLSAgICAxMTksIDEwNywgMTE4LCAxMDYsIDk1LCAxMDUsICA5NCwgODUsIDkzLCAgODEsIDcyLCA4MCwgIDY4LCA2MCwgNjgsICA1NCwgNDcsIDU0LCAgMzksIDMyLCAzOSwgIDIwLCAxMSwgMTgsICAgMCwgIDAsICAwLA0KLSAgICAxMjEsIDEwNywgMTA0LCAxMDcsIDk2LCA5MiwgIDk1LCA4NCwgODAsICA4MSwgNzIsIDY5LCAgNjgsIDYxLCA1OCwgIDU0LCA0OCwgNDYsICAzOSwgMzMsIDMxLCAgMjAsIDEyLCAgOSwgICAwLCAgMCwgIDAsDQotICAgIDEyMywgMTA3LCA4OCwgMTA4LCA5NSwgNzcsICA5NiwgODQsIDY4LCAgODIsIDcyLCA1NywgIDY4LCA2MCwgNDYsICA1NCwgNDcsIDM1LCAgMzksIDMzLCAyMCwgIDE5LCAxMywgIDIsICAgMCwgIDAsICAwLA0KLSAgICAxMjMsIDEwNiwgNzIsIDExMCwgOTUsIDYzLCAgOTYsIDg0LCA1NCwgIDgyLCA3MiwgNDUsICA2OSwgNjAsIDM1LCAgNTUsIDQ4LCAyMywgIDM5LCAzMywgIDksICAxOCwgMTQsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMTI1LCAxMDYsIDYwLCAxMTAsIDk0LCA1MCwgIDk4LCA4NCwgNDIsICA4MywgNzIsIDM0LCAgNjksIDYwLCAyNSwgIDU1LCA0OCwgMTIsICAzOSwgMzMsICAwLCAgMTcsIDEzLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDExOCwgODksIDE2NSwgMTA1LCA3OSwgMTQ4LCAgOTMsIDY5LCAxMzIsICA4MSwgNTcsIDExNSwgIDY4LCA0NSwgOTksICA1NSwgMzIsIDgyLCAgNDEsIDE1LCA2NCwgIDIxLCAgMCwgNDEsICAgMCwgIDAsICAwLA0KLSAgICAxMjAsIDg5LCAxNTAsIDEwNywgNzksIDEzNSwgIDk2LCA2OSwgMTIxLCAgODIsIDU4LCAxMDUsICA3MCwgNDYsIDg5LCAgNTYsIDM0LCA3MywgIDQxLCAxNywgNTYsICAyMSwgIDAsIDM0LCAgIDAsICAwLCAgMCwNCi0gICAgMTIxLCA4OSwgMTM3LCAxMDgsIDc5LCAxMjMsICA5NiwgNjksIDEwOSwgIDgyLCA1OCwgOTUsICA3MCwgNDcsIDgxLCAgNTYsIDM0LCA2NiwgIDQxLCAxOCwgNDksICAyMSwgIDAsIDI4LCAgIDAsICAwLCAgMCwNCi0gICAgMTIyLCA5MCwgMTI0LCAxMDksIDc5LCAxMTAsICA5NiwgNjksIDk5LCAgODMsIDU4LCA4NSwgIDcwLCA0NywgNzIsICA1NiwgMzUsIDU4LCAgNDEsIDE5LCA0MiwgIDIxLCAgMCwgMjIsICAgMCwgIDAsICAwLA0KLSAgICAxMjMsIDkwLCAxMTEsIDExMCwgNzksIDk4LCAgOTcsIDY5LCA4NywgIDgzLCA1OSwgNzUsICA3MCwgNDcsIDYzLCAgNTYsIDM1LCA1MCwgIDQxLCAyMCwgMzUsICAyMSwgIDAsIDE0LCAgIDAsICAwLCAgMCwNCi0gICAgMTIzLCA5MCwgOTgsIDExMCwgNzksIDg3LCAgOTcsIDcwLCA3NiwgIDg0LCA1OCwgNjQsICA3MCwgNDgsIDUzLCAgNTYsIDM2LCA0MSwgIDQwLCAyMSwgMjYsICAyMSwgIDAsICA1LCAgIDAsICAwLCAgMCwNCi0gICAgMTI1LCA4OSwgODQsIDExMSwgNzksIDczLCAgOTcsIDY5LCA2NCwgIDg0LCA1OSwgNTQsICA3MCwgNDgsIDQzLCAgNTYsIDM2LCAzMSwgIDQwLCAyMiwgMTcsICAyMCwgIDEsICAxLCAgIDAsICAwLCAgMCwNCi0gICAgMTI1LCA4OSwgNjksIDExMiwgNzksIDYwLCAgOTgsIDcwLCA1MSwgIDg0LCA1OSwgNDIsICA3MCwgNDgsIDMyLCAgNTYsIDM2LCAyMCwgIDQxLCAyMiwgIDUsICAxOSwgIDIsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMTI2LCA4OSwgNTcsIDExMiwgNzksIDQ5LCAgOTksIDcwLCA0MSwgIDg0LCA1OSwgMzIsICA3MCwgNDgsIDIyLCAgNTYsIDM2LCAxMCwgIDQwLCAyMiwgIDAsICAxOCwgIDIsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMTIxLCA2NywgMTU0LCAxMDgsIDU4LCAxMzgsICA5NywgNTAsIDEyNCwgIDg0LCAzOSwgMTA3LCAgNzEsIDI4LCA5MiwgIDU4LCAxMiwgNzYsICA0MywgIDAsIDU5LCAgMjAsICAwLCAzNywgICAwLCAgMCwgIDAsDQotICAgIDEyNCwgNjgsIDE0MCwgMTExLCA1OSwgMTI2LCAgOTgsIDUwLCAxMTIsICA4NCwgNDAsIDk4LCAgNzEsIDI5LCA4MywgIDU4LCAxNSwgNjcsICA0MiwgIDAsIDUxLCAgMjAsICAwLCAzMCwgICAwLCAgMCwgIDAsDQotICAgIDEyNCwgNjgsIDEyOSwgMTExLCA1OSwgMTE0LCAgOTksIDUxLCAxMDIsICA4NiwgNDEsIDg4LCAgNzEsIDMwLCA3NSwgIDU4LCAxNywgNjAsICA0MiwgIDAsIDQ1LCAgMjAsICAwLCAyNCwgICAwLCAgMCwgIDAsDQotICAgIDEyNSwgNzAsIDExNiwgMTExLCA2MCwgMTAzLCAgOTksIDUxLCA5MiwgIDg1LCA0MSwgNzksICA3MSwgMzEsIDY2LCAgNTgsIDE5LCA1MywgIDQyLCAgMywgMzgsICAyMCwgIDAsIDE3LCAgIDAsICAwLCAgMCwNCi0gICAgMTI1LCA3MCwgMTA0LCAxMTEsIDYxLCA5MywgIDk5LCA1MiwgODEsICA4NSwgNDMsIDY5LCAgNzIsIDMyLCA1OCwgIDU4LCAyMCwgNDUsICA0MiwgIDQsIDMxLCAgMjAsICAwLCAgOCwgICAwLCAgMCwgIDAsDQotICAgIDEyNiwgNzAsIDkyLCAxMTEsIDYxLCA4MSwgIDk5LCA1MiwgNzEsICA4NSwgNDIsIDYwLCAgNzEsIDMzLCA0OSwgIDU3LCAyMSwgMzcsICA0MiwgIDYsIDIzLCAgMjAsICAwLCAgMywgICAwLCAgMCwgIDAsDQotICAgIDEyNiwgNzAsIDc5LCAxMTIsIDYxLCA3MCwgIDk5LCA1MywgNjAsICA4NSwgNDMsIDUwLCAgNzEsIDMzLCAzOSwgIDU3LCAyMiwgMjgsICA0MSwgIDcsIDEzLCAgMTksICAwLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDEyNywgNzEsIDY2LCAxMTMsIDYyLCA1NiwgMTAwLCA1MywgNDgsICA4NiwgNDQsIDM5LCAgNzEsIDM0LCAyOSwgIDU3LCAyMywgMTgsICA0MSwgIDgsICAyLCAgMTgsICAwLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDEyOCwgNzAsIDU1LCAxMTQsIDYyLCA0NiwgMTAwLCA1NCwgMzksICA4NiwgNDQsIDMwLCAgNzEsIDM0LCAyMCwgIDU3LCAyMywgIDcsICA0MSwgIDksICAwLCAgMTgsICAwLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDEyNCwgNDEsIDE0NSwgMTExLCAzMiwgMTI4LCAgOTksIDIzLCAxMTQsICA4NiwgMTAsIDEwMCwgIDczLCAgMCwgODUsICA2MCwgIDAsIDcxLCAgNDMsICAwLCA1NCwgIDE3LCAgMCwgMzIsICAgMCwgIDAsICAwLA0KLSAgICAxMjYsIDQyLCAxMzEsIDExMywgMzMsIDExNywgMTAwLCAyNSwgMTA0LCAgODYsIDE0LCA5MCwgIDczLCAgMCwgNzcsICA2MCwgIDAsIDYzLCAgNDQsICAwLCA0NywgIDE4LCAgMCwgMjUsICAgMCwgIDAsICAwLA0KLSAgICAxMjcsIDQzLCAxMjAsIDExMywgMzQsIDEwNiwgMTAxLCAyNiwgOTUsICA4NiwgMTcsIDgyLCAgNzMsICAyLCA2OSwgIDU5LCAgMCwgNTYsICA0MywgIDAsIDQxLCAgMTgsICAwLCAxOSwgICAwLCAgMCwgIDAsDQotICAgIDEyNywgNDUsIDEwOSwgMTEzLCAzNywgOTcsIDEwMSwgMjgsIDg1LCAgODYsIDE5LCA3NCwgIDczLCAgNSwgNjEsICA1OSwgIDAsIDQ4LCAgNDMsICAwLCAzNCwgIDE5LCAgMCwgMTEsICAgMCwgIDAsICAwLA0KLSAgICAxMjcsIDQ2LCA5OCwgMTE0LCAzOCwgODYsIDEwMCwgMzAsIDc2LCAgODcsIDIxLCA2NSwgIDczLCAgOSwgNTQsICA1OSwgIDAsIDQxLCAgNDMsICAwLCAyNiwgIDE4LCAgMCwgIDUsICAgMCwgIDAsICAwLA0KLSAgICAxMjcsIDQ3LCA4NywgMTEzLCAzOSwgNzYsIDEwMSwgMzEsIDY3LCAgODYsIDIyLCA1NiwgIDcyLCAxMSwgNDUsICA1OSwgIDAsIDMzLCAgNDMsICAwLCAxOSwgIDE4LCAgMCwgIDIsICAgMCwgIDAsICAwLA0KLSAgICAxMjgsIDQ4LCA3NSwgMTE0LCAzOSwgNjUsIDEwMSwgMzMsIDU2LCAgODYsIDIzLCA0NiwgIDcyLCAxMiwgMzYsICA1OCwgIDAsIDI0LCAgNDIsICAwLCAgOSwgIDE3LCAgMCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxMjksIDQ4LCA2MywgMTE0LCA0MSwgNTQsIDEwMiwgMzMsIDQ2LCAgODcsIDI0LCAzNiwgIDcyLCAxNCwgMjYsICA1OCwgIDEsIDE0LCAgNDIsICAwLCAgMiwgIDE2LCAgMCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxMjgsIDQ4LCA1MywgMTE0LCA0MSwgNDQsIDEwMiwgMzQsIDM3LCAgODcsIDI1LCAyNywgIDcyLCAxNSwgMTcsICA1OCwgIDEsICAzLCAgNDEsICAwLCAgMCwgIDE1LCAgMCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAwLCAxODksIDI0MiwgICAwLCAxNjksIDIxNywgICAwLCAxNTEsIDE5NCwgICAwLCAxMzIsIDE3MCwgICAwLCAxMTMsIDE0NywgICAwLCA5NCwgMTIzLCAgIDAsIDc0LCA5OSwgICAwLCA1MSwgNzEsICAgMCwgMTUsIDM0LA0KLSAgICAxLCAxODcsIDIxOSwgICAxLCAxNjcsIDE5NSwgICAwLCAxNTAsIDE3NSwgICAwLCAxMzEsIDE1MywgICAwLCAxMTMsIDEzMiwgICAwLCA5NCwgMTExLCAgIDAsIDc0LCA4OSwgICAwLCA1MCwgNjMsICAgMCwgMTMsIDI4LA0KLSAgICAxLCAxODYsIDE5OCwgICAxLCAxNjcsIDE3OCwgICAwLCAxNDksIDE1OCwgICAwLCAxMzAsIDEzOSwgICAwLCAxMTEsIDExOSwgICAwLCA5MywgMTAwLCAgIDAsIDc0LCA4MCwgICAwLCA1MCwgNTUsICAgMCwgMTMsIDIyLA0KLSAgICAxLCAxODUsIDE3NiwgICAxLCAxNjUsIDE1OSwgICAxLCAxNDgsIDE0MiwgICAwLCAxMjksIDEyMywgICAwLCAxMTEsIDEwNiwgICAwLCA5MywgODksICAgMCwgNzMsIDcwLCAgIDAsIDUwLCA0NywgICAwLCAxMywgMTMsDQotICAgIDEsIDE4NCwgMTU3LCAgIDEsIDE2NCwgMTQxLCAgIDEsIDE0NywgMTI1LCAgIDAsIDEyOCwgMTEwLCAgIDAsIDExMCwgOTMsICAgMCwgOTIsIDc3LCAgIDAsIDczLCA2MCwgICAwLCA1MCwgMzksICAgMCwgMTIsICA1LA0KLSAgICAyNSwgMTgyLCAxMzcsICAyNSwgMTYzLCAxMjIsICAxNywgMTQ2LCAxMDksICAgMCwgMTI4LCA5NiwgICAwLCAxMTAsIDgxLCAgIDAsIDkyLCA2NiwgICAwLCA3MywgNTEsICAgMCwgNTAsIDMwLCAgIDAsIDEwLCAgMCwNCi0gICAgNDIsIDE4MSwgMTE0LCAgMzUsIDE2MywgMTAyLCAgMzAsIDE0NSwgOTEsICAxNCwgMTI3LCA4MCwgICAwLCAxMDksIDY3LCAgIDAsIDkxLCA1MywgICAwLCA3MiwgMzksICAgMCwgNTAsIDE5LCAgIDAsIDEwLCAgMCwNCi0gICAgNTIsIDE4MSwgOTIsICA0MywgMTYyLCA4MywgIDMyLCAxNDUsIDczLCAgMTksIDEyNiwgNjMsICAgMCwgMTA4LCA1MiwgICAwLCA5MCwgNDAsICAgMCwgNzIsIDI3LCAgIDAsIDUwLCAgNywgICAwLCAxMCwgIDAsDQotICAgIDU3LCAxODEsIDc0LCAgNDgsIDE2MiwgNjYsICAzNywgMTQ0LCA1NywgIDI0LCAxMjYsIDQ5LCAgIDcsIDEwOCwgNDAsICAgMCwgOTAsIDI5LCAgIDAsIDcyLCAxNSwgICAwLCA0OSwgIDAsICAgMCwgMTAsICAwLA0KLSAgICAxLCAxNzAsIDIyNywgICAxLCAxNTIsIDIwMywgICAwLCAxMzYsIDE4MiwgICAwLCAxMTksIDE1OSwgICAwLCAxMDEsIDEzNywgICAwLCA4NCwgMTE1LCAgIDAsIDY1LCA5MiwgICAwLCA0MywgNjYsICAgMCwgIDEsIDI5LA0KLSAgICAxLCAxNjksIDIwNiwgICAxLCAxNTEsIDE4NCwgICAxLCAxMzYsIDE2NSwgICAwLCAxMTgsIDE0NCwgICAwLCAxMDIsIDEyNSwgICAwLCA4NCwgMTA1LCAgIDAsIDY1LCA4MywgICAwLCA0MywgNTgsICAgMCwgIDAsIDIyLA0KLSAgICAyOSwgMTY4LCAxODYsICAyMSwgMTUxLCAxNjcsICAxNCwgMTM1LCAxNTAsICAgNCwgMTE4LCAxMzEsICAgMCwgMTAxLCAxMTIsICAgMCwgODMsIDk0LCAgIDAsIDY1LCA3NSwgICAwLCA0MywgNTEsICAgMCwgIDAsIDE2LA0KLSAgICA0MSwgMTY3LCAxNjcsICAzMywgMTUwLCAxNTAsICAzMSwgMTM0LCAxMzQsICAxOSwgMTE3LCAxMTcsICAgNCwgMTAwLCAxMDAsICAgMCwgODMsIDgzLCAgIDAsIDY1LCA2NSwgICAwLCA0MiwgNDMsICAgMCwgIDAsICA4LA0KLSAgICA0OCwgMTY3LCAxNDksICA0MSwgMTQ5LCAxMzMsICAzMywgMTMzLCAxMTgsICAyNSwgMTE2LCAxMDMsICAxMywgOTksIDg4LCAgIDAsIDgzLCA3MywgICAwLCA2NSwgNTYsICAgMCwgNDIsIDM1LCAgIDAsICAwLCAgMCwNCi0gICAgNTgsIDE2NSwgMTMwLCAgNDksIDE0OCwgMTE1LCAgNDIsIDEzMiwgMTAzLCAgMzEsIDExNSwgODksICAxOCwgOTksIDc1LCAgIDAsIDgyLCA2MSwgICAwLCA2NCwgNDYsICAgMCwgNDIsIDI2LCAgIDAsICAwLCAgMCwNCi0gICAgNjIsIDE2NCwgMTEwLCAgNTUsIDE0NywgOTcsICA0NSwgMTMyLCA4NywgIDM1LCAxMTUsIDc1LCAgMjIsIDk4LCA2MywgICA1LCA4MiwgNTAsICAgMCwgNjQsIDM2LCAgIDAsIDQyLCAxNiwgICAwLCAgMCwgIDAsDQotICAgIDY5LCAxNjQsIDg5LCAgNjAsIDE0NywgNzgsICA1MCwgMTMxLCA3MCwgIDM3LCAxMTQsIDU5LCAgMjYsIDk4LCA0OSwgIDEwLCA4MSwgMzcsICAgMCwgNjQsIDI0LCAgIDAsIDQyLCAgNCwgICAwLCAgMCwgIDAsDQotICAgIDcxLCAxNjQsIDcxLCAgNjMsIDE0NywgNjMsICA1MywgMTMxLCA1NSwgIDQwLCAxMTQsIDQ3LCAgMjgsIDk4LCAzOCwgIDEzLCA4MSwgMjYsICAgMCwgNjQsIDEyLCAgIDAsIDQyLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDI4LCAxNTMsIDIxNCwgIDI0LCAxMzgsIDE5MywgIDIzLCAxMjMsIDE3MSwgIDE2LCAxMDcsIDE1MCwgICAwLCA5MSwgMTMwLCAgIDAsIDc1LCAxMDksICAgMCwgNTgsIDg3LCAgIDAsIDM1LCA2MSwgICAwLCAgMCwgMjUsDQotICAgIDQ4LCAxNTMsIDE5NCwgIDQxLCAxMzgsIDE3NCwgIDM0LCAxMjMsIDE1NiwgIDI3LCAxMDcsIDEzNiwgIDE2LCA5MSwgMTE3LCAgIDEsIDc1LCA5OCwgICAwLCA1NywgNzgsICAgMCwgMzUsIDUzLCAgIDAsICAwLCAxNywNCi0gICAgNTUsIDE1MywgMTc3LCAgNDcsIDEzNywgMTU4LCAgNDIsIDEyMiwgMTQyLCAgMzMsIDEwNywgMTI0LCAgMjIsIDkxLCAxMDYsICAgNiwgNzUsIDg4LCAgIDAsIDU3LCA3MCwgICAwLCAzNSwgNDYsICAgMCwgIDAsICA5LA0KLSAgICA2MSwgMTUyLCAxNTgsICA1MywgMTM2LCAxNDMsICA0NSwgMTIyLCAxMjcsICAzNiwgMTA2LCAxMTEsICAyNCwgOTAsIDk0LCAgMTAsIDc0LCA3OCwgICAwLCA1NywgNjEsICAgMCwgMzUsIDM5LCAgIDAsICAwLCAgMiwNCi0gICAgNjcsIDE1MSwgMTQxLCAgNTksIDEzNSwgMTI2LCAgNDksIDEyMSwgMTEyLCAgMzksIDEwNSwgOTgsICAyOSwgOTAsIDgzLCAgMTQsIDc0LCA2OCwgICAwLCA1NywgNTIsICAgMCwgMzUsIDMxLCAgIDAsICAwLCAgMCwNCi0gICAgNzEsIDE1MCwgMTIzLCAgNjIsIDEzNSwgMTEwLCAgNTQsIDEyMCwgOTgsICA0MiwgMTA1LCA4NCwgIDMxLCA4OSwgNzEsICAxNiwgNzQsIDU4LCAgIDAsIDU3LCA0MywgICAwLCAzNSwgMjIsICAgMCwgIDAsICAwLA0KLSAgICA3NCwgMTUwLCAxMDUsICA2NCwgMTM0LCA5MiwgIDU1LCAxMjAsIDgzLCAgNDUsIDEwNCwgNzEsICAzNCwgODksIDU5LCAgMjAsIDczLCA0NywgICAwLCA1NywgMzIsICAgMCwgMzUsIDEzLCAgIDAsICAwLCAgMCwNCi0gICAgNzgsIDE0OSwgODQsICA2OSwgMTM0LCA3NSwgIDU5LCAxMjAsIDY2LCAgNDcsIDEwMywgNTYsICAzNCwgODgsIDQ2LCAgMjIsIDczLCAzNCwgICAxLCA1NywgMjAsICAgMCwgMzUsICAxLCAgIDAsICAwLCAgMCwNCi0gICAgODAsIDE0OSwgNjksICA3MCwgMTMzLCA2MSwgIDYwLCAxMTksIDUzLCAgNDksIDEwMywgNDQsICAzNiwgODgsIDM1LCAgMjMsIDczLCAyNCwgICAyLCA1NiwgMTAsICAgMCwgMzUsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgNTgsIDEzNiwgMjAwLCAgNTAsIDEyMiwgMTgwLCAgNDUsIDEwOSwgMTYyLCAgMzgsIDk0LCAxNDEsICAyNywgODAsIDEyMSwgIDE1LCA2NSwgMTAyLCAgIDAsIDQ4LCA4MSwgICAwLCAyNiwgNTYsICAgMCwgIDAsIDE5LA0KLSAgICA2NiwgMTM2LCAxODIsICA1OSwgMTIyLCAxNjMsICA1MiwgMTA5LCAxNDYsICA0MiwgOTQsIDEyOCwgIDMyLCA4MCwgMTA5LCAgMjAsIDY1LCA5MSwgICAyLCA0OCwgNzIsICAgMCwgMjYsIDQ5LCAgIDAsICAwLCAxMSwNCi0gICAgNzAsIDEzNiwgMTY1LCAgNjIsIDEyMiwgMTQ5LCAgNTUsIDEwOCwgMTMzLCAgNDYsIDk0LCAxMTYsICAzNSwgODAsIDk5LCAgMjEsIDY1LCA4MiwgICA0LCA0OSwgNjQsICAgMCwgMjYsIDQxLCAgIDAsICAwLCAgMywNCi0gICAgNzYsIDEzNSwgMTQ5LCAgNjYsIDEyMSwgMTMzLCAgNTgsIDEwOCwgMTE5LCAgNDgsIDk0LCAxMDMsICAzNiwgNzksIDg4LCAgMjMsIDY1LCA3MywgICA3LCA0OSwgNTYsICAgMCwgMjcsIDM0LCAgIDAsICAwLCAgMCwNCi0gICAgNzgsIDEzNSwgMTMzLCAgNjksIDEyMCwgMTE4LCAgNjAsIDEwNywgMTA2LCAgNTAsIDkzLCA5MiwgIDM5LCA3OSwgNzcsICAyNiwgNjUsIDYzLCAgIDgsIDQ5LCA0NywgICAwLCAyNywgMjYsICAgMCwgIDAsICAwLA0KLSAgICA4MiwgMTM0LCAxMTcsICA3MSwgMTIwLCAxMDQsICA2MiwgMTA3LCA5MiwgIDUxLCA5MywgNzksICAzOSwgNzgsIDY2LCAgMjcsIDY0LCA1MywgIDEwLCA0OCwgMzksICAgMCwgMjcsIDE4LCAgIDAsICAwLCAgMCwNCi0gICAgODQsIDEzNCwgOTksICA3MywgMTE5LCA4NywgIDY0LCAxMDYsIDc3LCAgNTMsIDkyLCA2NiwgIDQyLCA3OCwgNTUsICAyOCwgNjQsIDQyLCAgMTEsIDQ4LCAyOSwgICAwLCAyOCwgIDksICAgMCwgIDAsICAwLA0KLSAgICA4NywgMTMzLCA4MSwgIDc2LCAxMTksIDcyLCAgNjYsIDEwNiwgNjIsICA1NSwgOTIsIDUyLCAgNDMsIDc4LCA0MiwgIDI5LCA2NCwgMzEsICAxMiwgNDgsIDE3LCAgIDAsIDI4LCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDg4LCAxMzQsIDY3LCAgNzcsIDExOSwgNTgsICA2OCwgMTA2LCA1MSwgIDU2LCA5MiwgNDIsICA0NCwgNzgsIDMyLCAgMzAsIDY0LCAyMCwgIDEyLCA0OCwgIDYsICAgMCwgMjgsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgNzMsIDEyMCwgMTg5LCAgNjQsIDEwNywgMTY4LCAgNTcsIDk2LCAxNTEsICA0NywgODIsIDEzMywgIDM4LCA2OSwgMTE0LCAgMjYsIDU1LCA5NSwgIDExLCAzOSwgNzUsICAgMCwgMTYsIDUxLCAgIDAsICAwLCAxNCwNCi0gICAgNzgsIDEyMCwgMTcxLCAgNjksIDEwNywgMTUzLCAgNjIsIDk1LCAxMzcsICA1MSwgODIsIDExOSwgIDQwLCA2OSwgMTAyLCAgMjksIDU1LCA4NSwgIDE1LCAzOSwgNjYsICAgMCwgMTcsIDQ0LCAgIDAsICAwLCAgNCwNCi0gICAgODEsIDEyMCwgMTU2LCAgNzEsIDEwNywgMTQwLCAgNjQsIDk1LCAxMjUsICA1MywgODIsIDEwOSwgIDQyLCA2OSwgOTMsICAzMSwgNTUsIDc3LCAgMTYsIDM5LCA1OSwgICAwLCAxOCwgMzcsICAgMCwgIDAsICAwLA0KLSAgICA4NSwgMTIwLCAxNDEsICA3NCwgMTA3LCAxMjYsICA2NSwgOTUsIDExMiwgIDU0LCA4MiwgOTcsICA0MywgNjksIDgyLCAgMzIsIDU1LCA2NywgIDE3LCAzOSwgNTEsICAgMCwgMTksIDMwLCAgIDAsICAwLCAgMCwNCi0gICAgODYsIDExOSwgMTI2LCAgNzYsIDEwNiwgMTEyLCAgNjYsIDk1LCAxMDAsICA1NiwgODEsIDg1LCAgNDUsIDY5LCA3MiwgIDMzLCA1NSwgNTksICAxOCwgNDAsIDQzLCAgIDAsIDE5LCAyMiwgICAwLCAgMCwgIDAsDQotICAgIDg5LCAxMTksIDExMCwgIDc4LCAxMDYsIDk4LCAgNjksIDk0LCA4NywgIDU2LCA4MSwgNzUsICA0NiwgNjgsIDYyLCAgMzMsIDU1LCA0OSwgIDE4LCA0MCwgMzUsICAgMCwgMjAsIDE1LCAgIDAsICAwLCAgMCwNCi0gICAgODksIDExOSwgOTUsICA4MCwgMTA2LCA4MywgIDcwLCA5NCwgNzMsICA1OCwgODEsIDYzLCAgNDYsIDY4LCA1MSwgIDM0LCA1NSwgMzksICAxOSwgNDAsIDI1LCAgIDAsIDIwLCAgNCwgICAwLCAgMCwgIDAsDQotICAgIDkyLCAxMTgsIDc4LCAgODIsIDEwNiwgNjgsICA3MCwgOTMsIDU5LCAgNTksIDgxLCA0OSwgIDQ3LCA2OCwgMzksICAzNCwgNTUsIDI4LCAgMTksIDQwLCAxNCwgICAwLCAyMCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICA5MywgMTE4LCA2NSwgIDgyLCAxMDUsIDU1LCAgNzIsIDkzLCA0OCwgIDYwLCA4MSwgMzksICA0NywgNjgsIDI5LCAgMzQsIDU1LCAxOCwgIDIwLCA0MCwgIDIsICAgMCwgMjAsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgODMsIDEwNCwgMTc3LCAgNzQsIDkzLCAxNTksICA2NSwgODIsIDE0MiwgIDU2LCA3MCwgMTI0LCAgNDUsIDU3LCAxMDYsICAzMywgNDQsIDg5LCAgMjAsIDI4LCA3MCwgICAxLCAgNCwgNDYsICAgMCwgIDAsICA4LA0KLSAgICA4NiwgMTA0LCAxNjEsICA3OCwgOTMsIDE0NSwgIDY4LCA4MiwgMTI4LCAgNTgsIDcwLCAxMTIsICA0OCwgNTgsIDk2LCAgMzUsIDQ1LCA4MCwgIDIxLCAyOSwgNjIsICAgMSwgIDYsIDQwLCAgIDAsICAwLCAgMCwNCi0gICAgODksIDEwNCwgMTQ3LCAgNzksIDkzLCAxMzEsICA2OSwgODIsIDExOCwgIDU5LCA3MCwgMTAyLCAgNDcsIDU4LCA4NywgIDM2LCA0NSwgNzIsICAyMywgMjksIDU1LCAgIDMsICA3LCAzMywgICAwLCAgMCwgIDAsDQotICAgIDkwLCAxMDQsIDEzMiwgIDgwLCA5MywgMTE5LCAgNzEsIDgyLCAxMDYsICA2MCwgNzAsIDkxLCAgNDgsIDU4LCA3NywgIDM3LCA0NSwgNjIsICAyMywgMzAsIDQ3LCAgIDQsICA3LCAyNiwgICAwLCAgMCwgIDAsDQotICAgIDkyLCAxMDQsIDExOCwgIDgyLCA5MywgMTA1LCAgNzIsIDgyLCA5MywgIDYxLCA2OSwgODAsICA1MCwgNTgsIDY4LCAgMzcsIDQ1LCA1NSwgIDIzLCAzMCwgMzksICAgNCwgIDgsIDE4LCAgIDAsICAwLCAgMCwNCi0gICAgOTQsIDEwNCwgMTA1LCAgODIsIDkyLCA5MywgIDcyLCA4MiwgODIsICA2MSwgNzAsIDcwLCAgNTAsIDU4LCA1OCwgIDM4LCA0NiwgNDYsICAyMywgMzEsIDMxLCAgIDYsIDEwLCAxMSwgICAwLCAgMCwgIDAsDQotICAgIDk1LCAxMDQsIDkwLCAgODQsIDkyLCA3OSwgIDc0LCA4MiwgNzAsICA2MiwgNzAsIDU4LCAgNTAsIDU4LCA0OCwgIDM3LCA0NiwgMzYsICAyMywgMzEsIDIyLCAgIDQsIDExLCAgMywgICAwLCAgMCwgIDAsDQotICAgIDk2LCAxMDMsIDc0LCAgODUsIDkyLCA2NSwgIDc1LCA4MSwgNTYsICA2MywgNzAsIDQ3LCAgNTAsIDU4LCAzNywgIDM4LCA0NiwgMjUsICAyNCwgMzEsIDExLCAgIDMsIDExLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDk3LCAxMDMsIDYyLCAgODYsIDkyLCA1MywgIDc2LCA4MSwgNDUsICA2MywgNjksIDM2LCAgNTEsIDU4LCAyNywgIDM4LCA0NiwgMTUsICAyMywgMzEsICAwLCAgIDMsIDExLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDkwLCA4NywgMTY1LCAgODEsIDc3LCAxNDgsICA3MiwgNjcsIDEzMiwgIDYyLCA1NSwgMTE2LCAgNTAsIDQ0LCA5OSwgIDM5LCAzMSwgODIsICAyNSwgMTQsIDY0LCAgIDEsICAwLCA0MiwgICAwLCAgMCwgIDEsDQotICAgIDkzLCA4NywgMTUwLCAgODMsIDc3LCAxMzUsICA3NCwgNjcsIDEyMSwgIDYzLCA1NiwgMTA1LCAgNTIsIDQ1LCA5MCwgIDQwLCAzMiwgNzQsICAyNSwgMTYsIDU3LCAgIDMsICAwLCAzNSwgICAwLCAgMCwgIDAsDQotICAgIDk1LCA4NywgMTM4LCAgODUsIDc3LCAxMjMsICA3NSwgNjcsIDEwOSwgIDYzLCA1NywgOTUsICA1MywgNDUsIDgxLCAgNDEsIDMzLCA2NiwgIDI2LCAxNywgNTAsICAgNCwgIDAsIDI4LCAgIDAsICAwLCAgMCwNCi0gICAgOTUsIDg4LCAxMjQsICA4NSwgNzcsIDExMSwgIDc1LCA2NywgOTksICA2MywgNTcsIDg2LCAgNTMsIDQ1LCA3MiwgIDQxLCAzMywgNTgsICAyNiwgMTgsIDQzLCAgIDUsICAxLCAyMiwgICAwLCAgMCwgIDAsDQotICAgIDk3LCA4OCwgMTEyLCAgODcsIDc3LCAxMDAsICA3NiwgNjgsIDg4LCAgNjQsIDU3LCA3NiwgIDUzLCA0NiwgNjMsICA0MSwgMzQsIDUwLCAgMjYsIDE5LCAzNSwgICA1LCAgMiwgMTQsICAgMCwgIDAsICAwLA0KLSAgICA5OSwgODcsIDk5LCAgODcsIDc4LCA4OCwgIDc2LCA2OCwgNzcsICA2NSwgNTcsIDY1LCAgNTMsIDQ2LCA1NCwgIDQxLCAzNSwgNDIsICAyNywgMjAsIDI3LCAgIDYsICAyLCAgNSwgICAwLCAgMCwgIDAsDQotICAgIDEwMCwgODcsIDg1LCAgODgsIDc3LCA3NSwgIDc3LCA2OCwgNjUsICA2NSwgNTcsIDU0LCAgNTMsIDQ2LCA0NCwgIDQxLCAzNSwgMzIsICAyNywgMjEsIDE5LCAgIDUsICAzLCAgMiwgICAwLCAgMCwgIDAsDQotICAgIDEwMCwgODgsIDcxLCAgODksIDc3LCA2MSwgIDc4LCA2OCwgNTMsICA2NiwgNTcsIDQ0LCAgNTMsIDQ3LCAzMywgIDQxLCAzNSwgMjIsICAyNywgMjEsICA3LCAgIDUsICAzLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDEwMSwgODcsIDYwLCAgOTAsIDc3LCA1MiwgIDc5LCA2OCwgNDQsICA2NiwgNTgsIDM0LCAgNTMsIDQ3LCAyNSwgIDQxLCAzNSwgMTMsICAyNiwgMjIsICAwLCAgIDUsICAzLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDk3LCA2NywgMTU1LCAgODYsIDU4LCAxMzgsICA3NywgNTAsIDEyNSwgIDY2LCAzOSwgMTA4LCAgNTUsIDI4LCA5MiwgIDQzLCAxMiwgNzYsICAyOSwgIDAsIDU5LCAgIDIsICAwLCAzNywgICAwLCAgMCwgIDAsDQotICAgIDk5LCA2NywgMTQxLCAgODgsIDU5LCAxMjcsICA3OCwgNTAsIDExMywgIDY4LCA0MCwgOTgsICA1NiwgMjksIDgzLCAgNDQsIDE1LCA2OCwgIDI5LCAgMCwgNTIsICAgMywgIDAsIDMwLCAgIDAsICAwLCAgMCwNCi0gICAgMTAwLCA2OCwgMTI5LCAgODksIDU5LCAxMTUsICA4MCwgNTEsIDEwMywgIDY4LCA0MSwgODksICA1NiwgMzAsIDc1LCAgNDQsIDE2LCA2MSwgIDMwLCAgMCwgNDUsICAgNCwgIDAsIDI0LCAgIDAsICAwLCAgMCwNCi0gICAgMTAwLCA2OSwgMTE4LCAgOTAsIDYwLCAxMDQsICA4MCwgNTEsIDkyLCAgNjcsIDQxLCA3OSwgIDU2LCAzMSwgNjYsICA0NCwgMTgsIDUzLCAgMjksICAyLCAzOCwgICA0LCAgMCwgMTgsICAgMCwgIDAsICAwLA0KLSAgICAxMDEsIDY5LCAxMDQsICA5MCwgNjEsIDkzLCAgNzksIDUxLCA4MiwgIDY3LCA0MiwgNzAsICA1NiwgMzIsIDU5LCAgNDQsIDIwLCA0NiwgIDI5LCAgNCwgMzEsICAgNiwgIDAsICA5LCAgIDAsICAwLCAgMCwNCi0gICAgMTAyLCA2OSwgOTMsICA5MCwgNjEsIDgzLCAgODAsIDUyLCA3MiwgIDY4LCA0MiwgNjEsICA1NiwgMzMsIDUwLCAgNDMsIDIwLCAzOCwgIDI5LCAgNSwgMjMsICAgNywgIDAsICA0LCAgIDAsICAwLCAgMCwNCi0gICAgMTAyLCA3MCwgODAsICA5MSwgNjEsIDcxLCAgODAsIDUyLCA2MSwgIDY4LCA0MywgNTEsICA1NiwgMzIsIDQwLCAgNDQsIDIxLCAyOSwgIDMwLCAgNiwgMTQsICAgNywgIDAsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMTAzLCA3MCwgNjgsICA5MiwgNjEsIDU4LCAgODEsIDUzLCA1MCwgIDY5LCA0MywgNDEsICA1NiwgMzQsIDMxLCAgNDMsIDIyLCAxOSwgIDI5LCAgNywgIDMsICAgNywgIDAsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMTA0LCA3MCwgNTcsICA5MiwgNjEsIDQ4LCAgODIsIDUzLCA0MCwgIDY5LCA0MywgMzIsICA1NiwgMzQsIDIyLCAgNDMsIDIzLCAxMCwgIDI5LCAgOCwgIDAsICAgNiwgIDAsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMTAxLCA0NSwgMTQ1LCAgOTEsIDM1LCAxMjksICA4MCwgMjYsIDExNiwgIDY5LCAxNSwgMTAxLCAgNTksICAwLCA4NiwgIDQ2LCAgMCwgNzEsICAzMSwgIDAsIDU1LCAgIDAsICAwLCAzMywgICAwLCAgMCwgIDAsDQotICAgIDEwNCwgNDQsIDEzMiwgIDkyLCAzNiwgMTE4LCAgODIsIDI4LCAxMDUsICA3MSwgMTcsIDkxLCAgNTgsICAzLCA3NywgIDQ2LCAgMCwgNjMsICAzMSwgIDAsIDQ4LCAgIDIsICAwLCAyNiwgICAwLCAgMCwgIDAsDQotICAgIDEwNCwgNDYsIDEyMSwgIDkzLCAzNywgMTA3LCAgODIsIDMwLCA5NiwgIDcwLCAyMCwgODMsICA1OCwgIDYsIDcwLCAgNDYsICAwLCA1NywgIDMyLCAgMCwgNDEsICAgNCwgIDAsIDIwLCAgIDAsICAwLCAgMCwNCi0gICAgMTA0LCA0OCwgMTEwLCAgOTMsIDQwLCA5OCwgIDgyLCAzMSwgODcsICA3MCwgMjIsIDc0LCAgNTksICA5LCA2MiwgIDQ1LCAgMCwgNDksICAzMSwgIDAsIDM1LCAgIDYsICAwLCAxMywgICAwLCAgMCwgIDAsDQotICAgIDEwNCwgNDgsIDk5LCAgOTIsIDQxLCA4OCwgIDgyLCAzMiwgNzcsICA3MCwgMjMsIDY1LCAgNTgsIDExLCA1NCwgIDQ2LCAgMCwgNDIsICAzMiwgIDAsIDI3LCAgIDcsICAwLCAgNSwgICAwLCAgMCwgIDAsDQotICAgIDEwNSwgNTAsIDg4LCAgOTMsIDQxLCA3NywgIDgyLCAzNCwgNjgsICA3MSwgMjQsIDU3LCAgNTgsIDEzLCA0NiwgIDQ1LCAgMSwgMzUsICAzMSwgIDAsIDIxLCAgIDcsICAwLCAgMiwgICAwLCAgMCwgIDAsDQotICAgIDEwNSwgNTAsIDc2LCAgOTQsIDQxLCA2NiwgIDgzLCAzNCwgNTcsICA3MSwgMjUsIDQ3LCAgNTgsIDE1LCAzNywgIDQ1LCAgMiwgMjUsICAzMiwgIDAsIDExLCAgIDcsICAwLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDEwNiwgNTAsIDY0LCAgOTQsIDQyLCA1NSwgIDgzLCAzNSwgNDcsICA3MSwgMjYsIDM4LCAgNTgsIDE2LCAyNywgIDQ1LCAgNCwgMTcsICAzMSwgIDAsICA0LCAgIDcsICAwLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDEwNiwgNTEsIDU0LCAgOTUsIDQyLCA0NSwgIDgzLCAzNSwgMzgsICA3MSwgMjcsIDMwLCAgNTgsIDE2LCAxOSwgIDQ1LCAgNSwgIDcsICAzMCwgIDAsICAwLCAgIDYsICAwLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDAsIDE4MSwgMjQwLCAgIDAsIDE2MiwgMjE2LCAgIDAsIDE0NCwgMTkzLCAgIDAsIDEyNiwgMTY4LCAgIDAsIDEwOSwgMTQ2LCAgIDAsIDkxLCAxMjMsICAgMCwgNzEsIDk4LCAgIDAsIDQ4LCA3MSwgICAwLCAgOSwgMzQsDQotICAgIDAsIDE3OSwgMjE4LCAgIDAsIDE2MSwgMTk1LCAgIDAsIDE0NCwgMTc0LCAgIDAsIDEyNiwgMTUzLCAgIDAsIDEwOCwgMTMyLCAgIDAsIDkwLCAxMTAsICAgMCwgNzEsIDg4LCAgIDAsIDQ4LCA2MywgICAwLCAgOCwgMjksDQotICAgIDAsIDE3OCwgMTk3LCAgIDAsIDE1OSwgMTc3LCAgIDAsIDE0MywgMTU5LCAgIDAsIDEyNSwgMTM5LCAgIDAsIDEwNywgMTE5LCAgIDAsIDkwLCA5OSwgICAwLCA3MSwgNzksICAgMCwgNDgsIDU1LCAgIDAsICA4LCAyMiwNCi0gICAgMCwgMTc3LCAxNzcsICAgMCwgMTU4LCAxNTgsICAgMCwgMTQyLCAxNDEsICAgMCwgMTI0LCAxMjMsICAgMCwgMTA3LCAxMDYsICAgMCwgODksIDg4LCAgIDAsIDcxLCA3MCwgICAwLCA0OCwgNDcsICAgMCwgIDgsIDE0LA0KLSAgICAwLCAxNzYsIDE1NywgICAwLCAxNTgsIDE0MSwgICAwLCAxNDEsIDEyNiwgICAwLCAxMjMsIDEwOSwgICAwLCAxMDYsIDkzLCAgIDAsIDg5LCA3OCwgICAwLCA3MCwgNjAsICAgMCwgNDcsIDM5LCAgIDAsICA3LCAgNSwNCi0gICAgMCwgMTc1LCAxMzgsICAgMCwgMTU3LCAxMjMsICAgMCwgMTQxLCAxMTAsICAgMCwgMTIzLCA5NiwgICAwLCAxMDUsIDgxLCAgIDAsIDg4LCA2NywgICAwLCA3MCwgNTEsICAgMCwgNDgsIDMwLCAgIDAsICA2LCAgMCwNCi0gICAgMCwgMTczLCAxMTUsICAgMCwgMTU1LCAxMDQsICAgMCwgMTQwLCA5MiwgICAwLCAxMjIsIDgwLCAgIDAsIDEwNSwgNjcsICAgMCwgODgsIDU1LCAgIDAsIDY5LCA0MCwgICAwLCA0NywgMjAsICAgMCwgIDYsICAwLA0KLSAgICAwLCAxNzMsIDk0LCAgIDAsIDE1NSwgODUsICAgMCwgMTM5LCA3NSwgICAwLCAxMjEsIDY0LCAgIDAsIDEwNCwgNTMsICAgMCwgODgsIDQyLCAgIDAsIDcwLCAyOCwgICAwLCA0NywgIDksICAgMCwgIDYsICAwLA0KLSAgICAwLCAxNzMsIDc2LCAgIDAsIDE1NSwgNzAsICAgMCwgMTM4LCA2MSwgICAwLCAxMjIsIDUzLCAgIDAsIDEwNCwgNDQsICAgMCwgODcsIDMyLCAgIDAsIDY5LCAxOCwgICAwLCA0NywgIDAsICAgMCwgIDYsICAwLA0KLSAgICAwLCAxNjQsIDIyNiwgICAwLCAxNDcsIDIwMywgICAwLCAxMzEsIDE4MSwgICAwLCAxMTQsIDE1OCwgICAwLCA5NywgMTM2LCAgIDAsIDgwLCAxMTUsICAgMCwgNjMsIDkyLCAgIDAsIDQwLCA2NSwgICAwLCAgMCwgMzAsDQotICAgIDAsIDE2MiwgMjA1LCAgIDAsIDE0NSwgMTg0LCAgIDAsIDEzMCwgMTY0LCAgIDAsIDExNCwgMTQzLCAgIDAsIDk3LCAxMjQsICAgMCwgODEsIDEwNCwgICAwLCA2MywgODMsICAgMCwgNDAsIDU4LCAgIDAsICAwLCAyMywNCi0gICAgMCwgMTYyLCAxODcsICAgMCwgMTQ1LCAxNjcsICAgMCwgMTMwLCAxNTAsICAgMCwgMTEzLCAxMzEsICAgMCwgOTYsIDExMiwgICAwLCA4MCwgOTMsICAgMCwgNjIsIDc0LCAgIDAsIDQwLCA1MCwgICAwLCAgMCwgMTYsDQotICAgIDAsIDE2MCwgMTY3LCAgIDAsIDE0NCwgMTUwLCAgIDAsIDEyOSwgMTM0LCAgIDAsIDExMiwgMTE2LCAgIDAsIDk2LCAxMDAsICAgMCwgODAsIDgyLCAgIDAsIDYyLCA2NSwgICAwLCA0MCwgNDMsICAgMCwgIDAsICA3LA0KLSAgICAwLCAxNjAsIDE0OCwgICAwLCAxNDMsIDEzMywgICAwLCAxMjgsIDExOCwgICAwLCAxMTEsIDEwMywgICAwLCA5NiwgODgsICAgMCwgODAsIDczLCAgIDAsIDYyLCA1NiwgICAwLCA0MCwgMzUsICAgMCwgIDAsICAwLA0KLSAgICAwLCAxNTgsIDEzMCwgICAwLCAxNDIsIDExNywgICAwLCAxMjcsIDEwNCwgICAwLCAxMTEsIDg5LCAgIDAsIDk1LCA3NiwgICAwLCA3OSwgNjIsICAgMCwgNjIsIDQ2LCAgIDAsIDQwLCAyNiwgICAwLCAgMCwgIDAsDQotICAgIDAsIDE1OCwgMTExLCAgIDAsIDE0MSwgOTksICAgMCwgMTI3LCA4OCwgICAwLCAxMTEsIDc2LCAgIDAsIDk1LCA2MywgICAwLCA3OSwgNTEsICAgMCwgNjIsIDM3LCAgIDAsIDQwLCAxOCwgICAwLCAgMCwgIDAsDQotICAgIDAsIDE1OCwgOTEsICAgMCwgMTQxLCA4MSwgICAwLCAxMjYsIDcyLCAgIDAsIDExMCwgNjIsICAgMCwgOTQsIDUwLCAgIDAsIDc5LCAzOSwgICAwLCA2MiwgMjUsICAgMCwgNDAsICA1LCAgIDAsICAwLCAgMCwNCi0gICAgMCwgMTU3LCA3NCwgICAwLCAxNDEsIDY2LCAgIDAsIDEyNiwgNTksICAgMCwgMTEwLCA0OSwgICAwLCA5NCwgNDAsICAgMCwgNzgsIDI5LCAgIDAsIDYxLCAxNSwgICAwLCA0MCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAwLCAxNDgsIDIxNCwgICAwLCAxMzMsIDE5MiwgICAwLCAxMTksIDE3MSwgICAwLCAxMDMsIDE1MCwgICAwLCA4NywgMTI5LCAgIDAsIDcyLCAxMDgsICAgMCwgNTUsIDg2LCAgIDAsIDMyLCA2MSwgICAwLCAgMCwgMjUsDQotICAgIDAsIDE0NywgMTkzLCAgIDAsIDEzMiwgMTczLCAgIDAsIDExOCwgMTU1LCAgIDAsIDEwMywgMTM2LCAgIDAsIDg3LCAxMTYsICAgMCwgNzIsIDk4LCAgIDAsIDU1LCA3OCwgICAwLCAzMiwgNTMsICAgMCwgIDAsIDE3LA0KLSAgICAwLCAxNDcsIDE3NiwgICAwLCAxMzIsIDE1OCwgICAwLCAxMTgsIDE0MiwgICAwLCAxMDIsIDEyNCwgICAwLCA4NywgMTA2LCAgIDAsIDcyLCA4OCwgICAwLCA1NSwgNjksICAgMCwgMzMsIDQ2LCAgIDAsICAwLCAgOSwNCi0gICAgMCwgMTQ2LCAxNTksICAgMCwgMTMxLCAxNDIsICAgMCwgMTE3LCAxMjcsICAgMCwgMTAyLCAxMTEsICAgMCwgODcsIDk1LCAgIDAsIDcxLCA3OSwgICAwLCA1NSwgNjEsICAgMCwgMzMsIDM5LCAgIDAsICAwLCAgMiwNCi0gICAgMCwgMTQ1LCAxNDAsICAgMCwgMTMwLCAxMjYsICAgMCwgMTE3LCAxMTIsICAgMCwgMTAxLCA5OCwgICAwLCA4NiwgODMsICAgMCwgNzEsIDY4LCAgIDAsIDU1LCA1MiwgICAwLCAzMywgMzEsICAgMCwgIDAsICAwLA0KLSAgICAwLCAxNDQsIDEyNCwgICAwLCAxMzAsIDExMSwgICAwLCAxMTYsIDk5LCAgIDAsIDEwMSwgODQsICAgMCwgODYsIDcyLCAgIDAsIDcxLCA1OSwgICAwLCA1NSwgNDMsICAgMCwgMzMsIDIzLCAgIDAsICAwLCAgMCwNCi0gICAgMCwgMTQ0LCAxMDYsICAgMCwgMTI5LCA5NCwgICAwLCAxMTUsIDgzLCAgIDAsIDEwMSwgNzIsICAgMCwgODUsIDYwLCAgIDAsIDcxLCA0OCwgICAwLCA1NSwgMzQsICAgMCwgMzMsIDE0LCAgIDAsICAwLCAgMCwNCi0gICAgMywgMTQzLCA4NiwgICAwLCAxMjksIDc3LCAgIDAsIDExNSwgNjgsICAgMCwgMTAwLCA1OCwgICAwLCA4NSwgNDgsICAgMCwgNzAsIDM2LCAgIDAsIDU0LCAyMiwgICAwLCAzMywgIDMsICAgMCwgIDAsICAwLA0KLSAgICAxOCwgMTQzLCA3MiwgIDEzLCAxMjgsIDYzLCAgIDAsIDExNSwgNTcsICAgMCwgMTAwLCA0NywgICAwLCA4NSwgMzcsICAgMCwgNzAsIDI2LCAgIDAsIDU0LCAxMywgICAwLCAzMywgIDAsICAgMCwgIDAsICAwLA0KLSAgICAwLCAxMzIsIDIwMCwgICAwLCAxMTgsIDE3OSwgICAwLCAxMDUsIDE2MSwgICAwLCA5MSwgMTQwLCAgIDAsIDc2LCAxMjEsICAgMCwgNjIsIDEwMSwgICAwLCA0NiwgODEsICAgMCwgMjQsIDU2LCAgIDAsICAwLCAxOSwNCi0gICAgMCwgMTMxLCAxODIsICAgMCwgMTE4LCAxNjMsICAgMCwgMTA1LCAxNDYsICAgMCwgOTEsIDEyOCwgICAwLCA3NywgMTEwLCAgIDAsIDYyLCA5MSwgICAwLCA0NiwgNzIsICAgMCwgMjUsIDQ4LCAgIDAsICAwLCAxMSwNCi0gICAgMCwgMTMxLCAxNjUsICAgMCwgMTE3LCAxNDksICAgMCwgMTA0LCAxMzMsICAgMCwgOTEsIDExNiwgICAwLCA3NywgOTksICAgMCwgNjIsIDgyLCAgIDAsIDQ2LCA2NCwgICAwLCAyNSwgNDEsICAgMCwgIDAsICA0LA0KLSAgICAwLCAxMzEsIDE0OSwgICAwLCAxMTYsIDEzNCwgICAwLCAxMDQsIDExOSwgICAwLCA5MSwgMTA0LCAgIDAsIDc3LCA4OSwgICAwLCA2MiwgNzMsICAgMCwgNDYsIDU2LCAgIDAsIDI1LCAzNCwgICAwLCAgMCwgIDAsDQotICAgIDEwLCAxMzAsIDEzMywgICAyLCAxMTYsIDExOSwgICAwLCAxMDQsIDEwNiwgICAwLCA5MCwgOTEsICAgMCwgNzYsIDc4LCAgIDAsIDYyLCA2NCwgICAwLCA0NiwgNDgsICAgMCwgMjYsIDI3LCAgIDAsICAwLCAgMCwNCi0gICAgMjMsIDEzMCwgMTE4LCAgMjAsIDExNiwgMTA0LCAgMTMsIDEwMywgOTMsICAgMywgODksIDc5LCAgIDAsIDc2LCA2NywgICAwLCA2MiwgNTQsICAgMCwgNDYsIDM5LCAgIDAsIDI2LCAxOSwgICAwLCAgMCwgIDAsDQotICAgIDMzLCAxMjksIDEwMSwgIDI3LCAxMTUsIDg5LCAgMTksIDEwMywgNzksICAgOSwgODksIDY3LCAgIDAsIDc1LCA1NiwgICAwLCA2MSwgNDMsICAgMCwgNDYsIDI5LCAgIDAsIDI2LCAxMCwgICAwLCAgMCwgIDAsDQotICAgIDQxLCAxMjgsIDgzLCAgMzUsIDExNSwgNzMsICAyNywgMTAyLCA2NCwgIDE1LCA4OSwgNTUsICAgMCwgNzYsIDQ1LCAgIDAsIDYyLCAzMywgICAwLCA0NiwgMTgsICAgMCwgMjYsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgNDMsIDEyOSwgNjksICAzOCwgMTE1LCA2MSwgIDMwLCAxMDIsIDU0LCAgMTcsIDg5LCA0NSwgICAyLCA3NSwgMzQsICAgMCwgNjEsIDIzLCAgIDAsIDQ2LCAgOSwgICAwLCAyNiwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxLCAxMTYsIDE4OCwgICAxLCAxMDQsIDE2OCwgICAwLCA5MiwgMTUxLCAgIDAsIDc5LCAxMzIsICAgMCwgNjYsIDExMywgICAwLCA1MiwgOTQsICAgMCwgMzYsIDc1LCAgIDAsIDE0LCA1MiwgICAwLCAgMCwgMTQsDQotICAgIDE3LCAxMTYsIDE3MSwgIDE2LCAxMDQsIDE1MywgIDE0LCA5MiwgMTM3LCAgIDgsIDc5LCAxMTksICAgMCwgNjcsIDEwMiwgICAwLCA1MywgODUsICAgMCwgMzcsIDY3LCAgIDAsIDE2LCA0NCwgICAwLCAgMCwgIDQsDQotICAgIDMxLCAxMTYsIDE1NSwgIDI3LCAxMDQsIDE0MCwgIDIxLCA5MiwgMTI1LCAgMTMsIDc5LCAxMDksICAgMywgNjYsIDkzLCAgIDAsIDUzLCA3NywgICAwLCAzNywgNTksICAgMCwgMTYsIDM4LCAgIDAsICAwLCAgMCwNCi0gICAgMzcsIDExNSwgMTQxLCAgMzAsIDEwMywgMTI2LCAgMjYsIDkyLCAxMTIsICAxNiwgNzksIDk4LCAgIDUsIDY2LCA4MywgICAwLCA1MywgNjcsICAgMCwgMzgsIDUxLCAgIDAsIDE3LCAzMSwgICAwLCAgMCwgIDAsDQotICAgIDQxLCAxMTUsIDEyNiwgIDM3LCAxMDMsIDExMiwgIDMxLCA5MiwgMTAwLCAgMjIsIDc5LCA4NiwgIDEwLCA2NiwgNzIsICAgMCwgNTMsIDU5LCAgIDAsIDM4LCA0NCwgICAwLCAxNywgMjMsICAgMCwgIDAsICAwLA0KLSAgICA0OCwgMTE1LCAxMTEsICA0MSwgMTAyLCA5OSwgIDM0LCA5MSwgODgsICAyNCwgNzgsIDc2LCAgMTQsIDY2LCA2MywgICAwLCA1MywgNTAsICAgMCwgMzgsIDM2LCAgIDAsIDE4LCAxNSwgICAwLCAgMCwgIDAsDQotICAgIDUxLCAxMTUsIDk1LCAgNDYsIDEwMiwgODUsICAzNywgOTEsIDc0LCAgMjYsIDc4LCA2MywgIDE2LCA2NiwgNTIsICAgMCwgNTMsIDQwLCAgIDAsIDM4LCAyNiwgICAwLCAxOCwgIDUsICAgMCwgIDAsICAwLA0KLSAgICA1NSwgMTE0LCA4MCwgIDQ3LCAxMDIsIDY5LCAgNDAsIDkwLCA2MCwgIDMwLCA3OCwgNTEsICAxOSwgNjYsIDQxLCAgIDMsIDUzLCAyOSwgICAwLCAzOCwgMTUsICAgMCwgMTcsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgNTYsIDExNCwgNjYsICA1MCwgMTAyLCA1OCwgIDQwLCA5MSwgNTAsICAzMiwgNzgsIDQxLCAgMTgsIDY2LCAzMiwgICA0LCA1MywgMjEsICAgMCwgMzgsICA1LCAgIDAsIDE3LCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDM5LCAxMDIsIDE3OCwgIDM3LCA5MCwgMTU5LCAgMzAsIDc5LCAxNDIsICAyMSwgNjgsIDEyNCwgIDE0LCA1NSwgMTA2LCAgIDAsIDQyLCA4OSwgICAwLCAyNiwgNzAsICAgMCwgIDQsIDQ2LCAgIDAsICAwLCAgOCwNCi0gICAgNDgsIDEwMiwgMTYxLCAgNDIsIDkwLCAxNDUsICAzNSwgNzksIDEyOCwgIDI2LCA2OCwgMTEyLCAgMTksIDU1LCA5NiwgICAzLCA0MywgNzksICAgMCwgMjcsIDYyLCAgIDAsICA2LCA0MCwgICAwLCAgMCwgIDAsDQotICAgIDUwLCAxMDIsIDE0NywgIDQ0LCA5MCwgMTMyLCAgMzcsIDc5LCAxMTgsICAzMCwgNjgsIDEwMiwgIDIwLCA1NiwgODcsICAgNywgNDMsIDcyLCAgIDAsIDI4LCA1NSwgICAwLCAgNiwgMzQsICAgMCwgIDAsICAwLA0KLSAgICA1MywgMTAxLCAxMzMsICA0NywgOTAsIDExOCwgIDQxLCA3OSwgMTA2LCAgMzIsIDY4LCA5MSwgIDIxLCA1NiwgNzgsICAgOSwgNDMsIDYzLCAgIDAsIDI4LCA0NywgICAwLCAgNiwgMjYsICAgMCwgIDAsICAwLA0KLSAgICA1NywgMTAxLCAxMTksICA1MCwgODksIDEwNiwgIDQyLCA3OSwgOTQsICAzNCwgNjcsIDgxLCAgMjQsIDU2LCA2OCwgICA5LCA0NCwgNTUsICAgMCwgMjksIDQwLCAgIDAsICA2LCAxOSwgICAwLCAgMCwgIDAsDQotICAgIDYwLCAxMDAsIDEwNSwgIDUwLCA5MCwgOTQsICA0NSwgODAsIDgzLCAgMzYsIDY4LCA3MSwgIDI0LCA1NiwgNTksICAxMSwgNDQsIDQ2LCAgIDAsIDI5LCAzMiwgICAwLCAgNywgMTIsICAgMCwgIDAsICAwLA0KLSAgICA2MywgMTAxLCA5MSwgIDU1LCA5MCwgODAsICA0NiwgNzksIDcwLCAgMzcsIDY4LCA1OSwgIDI2LCA1NiwgNDksICAxMiwgNDQsIDM3LCAgIDEsIDI5LCAyMywgICAwLCAgNywgIDMsICAgMCwgIDAsICAwLA0KLSAgICA2NCwgMTAxLCA3NSwgIDU2LCA4OSwgNjcsICA0OCwgNzksIDU3LCAgMzcsIDY4LCA0OCwgIDI3LCA1NiwgMzcsICAxNSwgNDQsIDI2LCAgIDAsIDI5LCAxMiwgICAwLCAgNywgIDAsICAgMCwgIDAsICAwLA0KLSAgICA2NiwgMTAxLCA2NCwgIDU4LCA4OSwgNTUsICA0OSwgNzksIDQ3LCAgMzksIDY4LCAzOCwgIDI3LCA1NiwgMjksICAxNCwgNDQsIDE4LCAgIDEsIDMwLCAgMiwgICAwLCAgNywgIDAsICAgMCwgIDAsICAwLA0KLSAgICA1NywgODYsIDE2NSwgIDUxLCA3NSwgMTQ4LCAgNDUsIDY1LCAxMzMsICAzOCwgNTQsIDExNiwgIDI4LCA0MywgMTAwLCAgMTYsIDI5LCA4MywgICAwLCAxMywgNjQsICAgMCwgIDAsIDQyLCAgIDAsICAwLCAgMywNCi0gICAgNjAsIDg2LCAxNTEsICA1NSwgNzUsIDEzNSwgIDQ3LCA2NiwgMTIxLCAgMzksIDU1LCAxMDUsICAzMCwgNDQsIDkwLCAgMTgsIDMxLCA3NCwgICAzLCAxNiwgNTcsICAgMCwgIDEsIDM1LCAgIDAsICAwLCAgMCwNCi0gICAgNjIsIDg2LCAxMzksICA1NiwgNzUsIDEyMywgIDQ5LCA2NiwgMTEwLCAgNDAsIDU1LCA5NSwgIDMwLCA0NCwgODEsICAxOSwgMzEsIDY2LCAgIDQsIDE3LCA1MSwgICAwLCAgMSwgMjksICAgMCwgIDAsICAwLA0KLSAgICA2NSwgODYsIDEyNSwgIDU2LCA3NiwgMTEyLCAgNDksIDY2LCA5OSwgIDM5LCA1NSwgODYsICAzMSwgNDQsIDcyLCAgMTksIDMyLCA1OSwgICA1LCAxOCwgNDQsICAgMCwgIDEsIDIzLCAgIDAsICAwLCAgMCwNCi0gICAgNjcsIDg2LCAxMTMsICA1OCwgNzUsIDEwMCwgIDUxLCA2NiwgODgsICA0MSwgNTYsIDc3LCAgMzEsIDQ1LCA2NCwgIDIwLCAzMiwgNTEsICAgNiwgMTgsIDM1LCAgIDAsICAxLCAxNCwgICAwLCAgMCwgIDAsDQotICAgIDY5LCA4NiwgOTksICA2MSwgNzYsIDg4LCAgNTIsIDY2LCA3OCwgIDQzLCA1NiwgNjYsICAzMiwgNDUsIDU1LCAgMjAsIDMzLCA0MiwgICA3LCAxOSwgMjcsICAgMCwgIDEsICA2LCAgIDAsICAwLCAgMCwNCi0gICAgNjksIDg2LCA4NiwgIDYxLCA3NiwgNzUsICA1MywgNjcsIDY2LCAgNDMsIDU2LCA1NSwgIDMzLCA0NSwgNDUsICAyMSwgMzQsIDM0LCAgIDgsIDIwLCAyMCwgICAwLCAgMiwgIDIsICAgMCwgIDAsICAwLA0KLSAgICA3MSwgODYsIDcyLCAgNjMsIDc1LCA2MiwgIDU0LCA2NiwgNTUsICA0NSwgNTYsIDQ1LCAgMzMsIDQ1LCAzNSwgIDIyLCAzNCwgMjMsICAgNywgMjAsICA4LCAgIDAsICAyLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDcxLCA4NiwgNjIsICA2NCwgNzUsIDUzLCAgNTUsIDY2LCA0NiwgIDQ1LCA1NiwgMzYsICAzMywgNDYsIDI3LCAgMjIsIDM0LCAxNSwgICA4LCAyMCwgIDAsICAgMCwgIDIsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgNjksIDY3LCAxNTYsICA2MSwgNTgsIDE0MCwgIDUzLCA1MCwgMTI1LCAgNDUsIDM5LCAxMDgsICAzNSwgMjgsIDkzLCAgMjUsIDEyLCA3NywgIDEyLCAgMCwgNTksICAgMCwgIDAsIDM3LCAgIDAsICAwLCAgMCwNCi0gICAgNzEsIDY4LCAxNDIsICA2MywgNTksIDEyNiwgIDU2LCA1MCwgMTE0LCAgNDcsIDQwLCA5OCwgIDM3LCAyOCwgODQsICAyNiwgMTUsIDY4LCAgMTIsICAwLCA1MywgICAwLCAgMCwgMzAsICAgMCwgIDAsICAwLA0KLSAgICA3MiwgNjgsIDEzMCwgIDYzLCA1OSwgMTE2LCAgNTYsIDUwLCAxMDQsICA0NywgNDAsIDkwLCAgMzgsIDMwLCA3NSwgIDI3LCAxNiwgNjEsICAxMywgIDAsIDQ2LCAgIDAsICAwLCAyNCwgICAwLCAgMCwgIDAsDQotICAgIDczLCA2OSwgMTE4LCAgNjUsIDU5LCAxMDUsICA1NywgNTEsIDkyLCAgNDcsIDQxLCA4MCwgIDM3LCAzMCwgNjcsICAyNiwgMTgsIDUzLCAgMTQsICAxLCAzOSwgICAwLCAgMCwgMTgsICAgMCwgIDAsICAwLA0KLSAgICA3NCwgNjksIDEwNiwgIDY1LCA2MCwgOTMsICA1NywgNTEsIDgyLCAgNDgsIDQxLCA3MCwgIDM4LCAzMSwgNTksICAyNiwgMTksIDQ2LCAgMTMsICAyLCAzMiwgICAwLCAgMCwgMTAsICAgMCwgIDAsICAwLA0KLSAgICA3NiwgNjksIDk1LCAgNjYsIDYxLCA4NCwgIDU4LCA1MiwgNzMsICA0OCwgNDIsIDYxLCAgMzcsIDMyLCA1MCwgIDI2LCAyMCwgMzgsICAxNCwgIDQsIDI0LCAgIDAsICAwLCAgNCwgICAwLCAgMCwgIDAsDQotICAgIDc2LCA2OSwgODEsICA2OCwgNjAsIDcyLCAgNTgsIDUyLCA2MiwgIDQ4LCA0MiwgNTEsICAzOCwgMzIsIDQxLCAgMjcsIDIxLCAzMCwgIDE0LCAgNCwgMTYsICAgMCwgIDAsICAxLCAgIDAsICAwLCAgMCwNCi0gICAgNzYsIDY5LCA2OCwgIDY4LCA2MSwgNjAsICA2MCwgNTIsIDUxLCAgNDksIDQzLCA0MSwgIDM4LCAzMywgMzIsICAyNywgMjEsIDIwLCAgMTQsICA1LCAgNSwgICAwLCAgMCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICA3OCwgNzAsIDU5LCAgNjksIDYxLCA1MCwgIDYwLCA1MiwgNDIsICA0OSwgNDMsIDM0LCAgMzksIDMzLCAyNCwgIDI3LCAyMiwgMTMsICAxNCwgIDcsICAxLCAgIDAsICAwLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDc1LCA0NiwgMTQ2LCAgNjgsIDM4LCAxMzEsICA2MCwgMzAsIDExNywgIDUwLCAxOSwgMTAyLCAgNDEsICA0LCA4NywgIDI5LCAgMCwgNzIsICAxMywgIDAsIDU1LCAgIDAsICAwLCAzMywgICAwLCAgMCwgIDAsDQotICAgIDc4LCA0NywgMTMyLCAgNzAsIDM5LCAxMTksICA2MSwgMzAsIDEwNSwgIDUzLCAyMCwgOTIsICA0MiwgIDUsIDc4LCAgMzAsICAwLCA2NCwgIDEzLCAgMCwgNDksICAgMCwgIDAsIDI3LCAgIDAsICAwLCAgMCwNCi0gICAgNzksIDQ4LCAxMjIsICA3MCwgNDAsIDEwOCwgIDYyLCAzMiwgOTYsICA1MiwgMjIsIDg0LCAgNDIsICA5LCA3MSwgIDMwLCAgMCwgNTgsICAxNCwgIDAsIDQyLCAgIDAsICAwLCAyMCwgICAwLCAgMCwgIDAsDQotICAgIDc5LCA1MCwgMTExLCAgNzAsIDQyLCA5OSwgIDYyLCAzMywgODgsICA1MiwgMjMsIDc0LCAgNDEsIDExLCA2MywgIDI5LCAgMCwgNTAsICAxNCwgIDAsIDM2LCAgIDAsICAwLCAxNCwgICAwLCAgMCwgIDAsDQotICAgIDgwLCA1MCwgOTksICA3MCwgNDIsIDg5LCAgNjEsIDM0LCA3OCwgIDUyLCAyNSwgNjcsICA0MSwgMTQsIDU1LCAgMzAsICAwLCA0MiwgIDE1LCAgMCwgMjgsICAgMCwgIDAsICA2LCAgIDAsICAwLCAgMCwNCi0gICAgODEsIDUxLCA4OSwgIDcxLCA0MywgNzgsICA2MiwgMzUsIDY5LCAgNTIsIDI1LCA1OCwgIDQyLCAxNSwgNDcsICAzMCwgIDMsIDM2LCAgMTUsICAwLCAyMiwgICAwLCAgMCwgIDMsICAgMCwgIDAsICAwLA0KLSAgICA4MSwgNTEsIDc3LCAgNzEsIDQ0LCA2OCwgIDYzLCAzNiwgNTksICA1MywgMjYsIDQ5LCAgNDEsIDE2LCAzOCwgIDMxLCAgNCwgMjcsICAxNiwgIDAsIDEyLCAgIDAsICAwLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDgxLCA1MiwgNjUsICA3MiwgNDMsIDU2LCAgNjMsIDM2LCA0OCwgIDUzLCAyNywgMzksICA0MSwgMTcsIDI5LCAgMzAsICA0LCAxOCwgIDE0LCAgMCwgIDMsICAgMCwgIDAsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgODEsIDUyLCA1NSwgIDczLCA0NCwgNDcsICA2NCwgMzYsIDM5LCAgNTMsIDI4LCAzMiwgIDQyLCAxOCwgMjEsICAzMSwgIDYsICA5LCAgMTQsICAwLCAgMCwgICAwLCAgMCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAwLCAxNzQsIDIzOSwgICAwLCAxNTYsIDIxNCwgICAwLCAxMzksIDE5MiwgICAwLCAxMjEsIDE2OCwgICAwLCAxMDUsIDE0NSwgICAwLCA4NywgMTIzLCAgIDAsIDY4LCA5OCwgICAwLCA0NiwgNzAsICAgMCwgIDMsIDM1LA0KLSAgICAwLCAxNzIsIDIxNywgICAwLCAxNTUsIDE5NCwgICAwLCAxMzksIDE3MywgICAwLCAxMjEsIDE1MiwgICAwLCAxMDQsIDEzMCwgICAwLCA4NywgMTEwLCAgIDAsIDY5LCA4OCwgICAwLCA0NiwgNjMsICAgMCwgIDQsIDI4LA0KLSAgICAwLCAxNzEsIDE5NywgICAwLCAxNTMsIDE3NSwgICAwLCAxMzgsIDE1OCwgICAwLCAxMjEsIDEzOSwgICAwLCAxMDMsIDExOCwgICAwLCA4NiwgMTAwLCAgIDAsIDY4LCA3OSwgICAwLCA0NiwgNTUsICAgMCwgIDQsIDIyLA0KLSAgICAwLCAxNzAsIDE3NywgICAwLCAxNTIsIDE1OCwgICAwLCAxMzYsIDE0MSwgICAwLCAxMTksIDEyNCwgICAwLCAxMDMsIDEwNiwgICAwLCA4NiwgODgsICAgMCwgNjgsIDcwLCAgIDAsIDQ1LCA0NywgICAwLCAgMywgMTQsDQotICAgIDAsIDE2OSwgMTU3LCAgIDAsIDE1MiwgMTQxLCAgIDAsIDEzNiwgMTI2LCAgIDAsIDExOSwgMTA5LCAgIDAsIDEwMiwgOTQsICAgMCwgODYsIDc4LCAgIDAsIDY4LCA2MCwgICAwLCA0NiwgMzksICAgMCwgIDMsICA1LA0KLSAgICAwLCAxNjcsIDEzOCwgICAwLCAxNTAsIDEyNCwgICAwLCAxMzUsIDExMSwgICAwLCAxMTgsIDk3LCAgIDAsIDEwMiwgODIsICAgMCwgODUsIDY4LCAgIDAsIDY4LCA1MiwgICAwLCA0NiwgMzEsICAgMCwgIDMsICAwLA0KLSAgICAwLCAxNjcsIDExOCwgICAwLCAxNTAsIDEwNCwgICAwLCAxMzUsIDk0LCAgIDAsIDExOCwgODEsICAgMCwgMTAxLCA2OSwgICAwLCA4NCwgNTYsICAgMCwgNjcsIDQxLCAgIDAsIDQ1LCAyMSwgICAwLCAgMywgIDAsDQotICAgIDAsIDE2NiwgOTcsICAgMCwgMTQ5LCA4NywgICAwLCAxMzQsIDc3LCAgIDAsIDExNywgNjcsICAgMCwgMTAxLCA1NiwgICAwLCA4NSwgNDQsICAgMCwgNjcsIDMwLCAgIDAsIDQ1LCAxMCwgICAwLCAgMywgIDAsDQotICAgIDAsIDE2NSwgNzksICAgMCwgMTQ5LCA3MywgICAwLCAxMzMsIDY0LCAgIDAsIDExNywgNTYsICAgMCwgMTAxLCA0NiwgICAwLCA4NSwgMzQsICAgMCwgNjgsIDIxLCAgIDAsIDQ2LCAgMSwgICAwLCAgMywgIDAsDQotICAgIDAsIDE1OCwgMjI1LCAgIDAsIDE0MSwgMjAxLCAgIDAsIDEyNiwgMTgwLCAgIDAsIDEwOSwgMTU4LCAgIDAsIDk0LCAxMzYsICAgMCwgNzgsIDExNCwgICAwLCA2MCwgOTEsICAgMCwgMzgsIDY2LCAgIDAsICAwLCAzMCwNCi0gICAgMCwgMTU2LCAyMDMsICAgMCwgMTQwLCAxODMsICAgMCwgMTI1LCAxNjQsICAgMCwgMTA5LCAxNDMsICAgMCwgOTQsIDEyNCwgICAwLCA3OCwgMTA0LCAgIDAsIDYxLCA4MywgICAwLCAzOCwgNTcsICAgMCwgIDAsIDIzLA0KLSAgICAwLCAxNTYsIDE4NiwgICAwLCAxNDAsIDE2NiwgICAwLCAxMjUsIDE1MCwgICAwLCAxMDksIDEzMCwgICAwLCA5MywgMTExLCAgIDAsIDc3LCA5MywgICAwLCA2MCwgNzQsICAgMCwgMzgsIDUwLCAgIDAsICAwLCAxNywNCi0gICAgMCwgMTU1LCAxNjcsICAgMCwgMTM4LCAxNDksICAgMCwgMTI0LCAxMzQsICAgMCwgMTA5LCAxMTcsICAgMCwgOTMsIDEwMCwgICAwLCA3NiwgODMsICAgMCwgNjAsIDY1LCAgIDAsIDM4LCA0MywgICAwLCAgMCwgIDksDQotICAgIDAsIDE1MywgMTQ3LCAgIDAsIDEzOCwgMTM0LCAgIDAsIDEyNCwgMTIwLCAgIDAsIDEwNywgMTAzLCAgIDAsIDkyLCA4OCwgICAwLCA3NywgNzMsICAgMCwgNjAsIDU2LCAgIDAsIDM4LCAzNSwgICAwLCAgMCwgIDAsDQotICAgIDAsIDE1MywgMTMxLCAgIDAsIDEzNywgMTE4LCAgIDAsIDEyMiwgMTA1LCAgIDAsIDEwNywgOTAsICAgMCwgOTEsIDc2LCAgIDAsIDc2LCA2MywgICAwLCA2MCwgNDcsICAgMCwgMzksIDI4LCAgIDAsICAwLCAgMCwNCi0gICAgMCwgMTUzLCAxMTEsICAgMCwgMTM2LCAxMDAsICAgMCwgMTIzLCA5MCwgICAwLCAxMDcsIDc3LCAgIDAsIDkyLCA2NSwgICAwLCA3NiwgNTIsICAgMCwgNjAsIDM3LCAgIDAsIDM4LCAxOCwgICAwLCAgMCwgIDAsDQotICAgIDAsIDE1MiwgOTMsICAgMCwgMTM2LCA4MiwgICAwLCAxMjIsIDc0LCAgIDAsIDEwNiwgNjMsICAgMCwgOTEsIDUyLCAgIDAsIDc2LCA0MCwgICAwLCA1OSwgMjYsICAgMCwgMzgsICA2LCAgIDAsICAwLCAgMCwNCi0gICAgMCwgMTUxLCA3OCwgICAwLCAxMzYsIDY5LCAgIDAsIDEyMSwgNjEsICAgMCwgMTA2LCA1MiwgICAwLCA5MSwgNDMsICAgMCwgNzYsIDMyLCAgIDAsIDU5LCAxNywgICAwLCAzOCwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAwLCAxNDMsIDIxMywgICAwLCAxMjgsIDE5MSwgICAwLCAxMTUsIDE3MSwgICAwLCAxMDAsIDE0OSwgICAwLCA4NCwgMTI4LCAgIDAsIDY5LCAxMDgsICAgMCwgNTIsIDg2LCAgIDAsIDMwLCA2MSwgICAwLCAgMCwgMjUsDQotICAgIDAsIDE0MiwgMTkzLCAgIDAsIDEyNywgMTczLCAgIDAsIDExNCwgMTU0LCAgIDAsIDk5LCAxMzQsICAgMCwgODQsIDExNiwgICAwLCA2OSwgOTgsICAgMCwgNTIsIDc3LCAgIDAsIDMxLCA1MywgICAwLCAgMCwgMTgsDQotICAgIDAsIDE0MSwgMTc2LCAgIDAsIDEyNywgMTU4LCAgIDAsIDExNCwgMTQxLCAgIDAsIDk4LCAxMjIsICAgMCwgODQsIDEwNSwgICAwLCA2OSwgODgsICAgMCwgNTMsIDY5LCAgIDAsIDMxLCA0NiwgICAwLCAgMCwgIDksDQotICAgIDAsIDE0MSwgMTU5LCAgIDAsIDEyNiwgMTQyLCAgIDAsIDExMywgMTI3LCAgIDAsIDk4LCAxMTAsICAgMCwgODMsIDk1LCAgIDAsIDY5LCA3OCwgICAwLCA1MywgNjAsICAgMCwgMzIsIDM5LCAgIDAsICAwLCAgMiwNCi0gICAgMCwgMTQwLCAxNDAsICAgMCwgMTI2LCAxMjYsICAgMCwgMTEyLCAxMTIsICAgMCwgOTgsIDk4LCAgIDAsIDgzLCA4MywgICAwLCA2OCwgNjksICAgMCwgNTIsIDUyLCAgIDAsIDMxLCAzMSwgICAwLCAgMCwgIDAsDQotICAgIDAsIDE0MCwgMTI0LCAgIDAsIDEyNSwgMTEyLCAgIDAsIDExMiwgMTAwLCAgIDAsIDk3LCA4NiwgICAwLCA4MywgNzIsICAgMCwgNjgsIDU5LCAgIDAsIDUyLCA0NCwgICAwLCAzMSwgMjMsICAgMCwgIDAsICAwLA0KLSAgICAwLCAxMzksIDEwNiwgICAwLCAxMjUsIDk2LCAgIDAsIDExMSwgODUsICAgMCwgOTcsIDcyLCAgIDAsIDgzLCA2MiwgICAwLCA2OCwgNDksICAgMCwgNTIsIDM1LCAgIDAsIDMxLCAxNSwgICAwLCAgMCwgIDAsDQotICAgIDAsIDEzOCwgODgsICAgMCwgMTI0LCA3OSwgICAwLCAxMTEsIDcwLCAgIDAsIDk2LCA1OSwgICAwLCA4MiwgNDgsICAgMCwgNjgsIDM4LCAgIDAsIDUyLCAyNCwgICAwLCAzMSwgIDQsICAgMCwgIDAsICAwLA0KLSAgICAwLCAxMzksIDc2LCAgIDAsIDEyNCwgNjYsICAgMCwgMTExLCA1OCwgICAwLCA5NiwgNTAsICAgMCwgODIsIDQwLCAgIDAsIDY4LCAyOSwgICAwLCA1MiwgMTUsICAgMCwgMzEsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMCwgMTI5LCAyMDAsICAgMCwgMTE0LCAxNzksICAgMCwgMTAyLCAxNjAsICAgMCwgODcsIDEzOSwgICAwLCA3NCwgMTIwLCAgIDAsIDYwLCAxMDEsICAgMCwgNDQsIDgxLCAgIDAsIDIyLCA1NiwgICAwLCAgMCwgMTksDQotICAgIDAsIDEyNywgMTgxLCAgIDAsIDExNCwgMTYzLCAgIDAsIDEwMiwgMTQ2LCAgIDAsIDg4LCAxMjcsICAgMCwgNzQsIDEwOSwgICAwLCA2MCwgOTEsICAgMCwgNDQsIDcyLCAgIDAsIDIzLCA0OCwgICAwLCAgMCwgMTEsDQotICAgIDAsIDEyNywgMTY2LCAgIDAsIDExMywgMTQ4LCAgIDAsIDEwMSwgMTMzLCAgIDAsIDg3LCAxMTUsICAgMCwgNzQsIDk5LCAgIDAsIDYwLCA4MiwgICAwLCA0NCwgNjQsICAgMCwgMjMsIDQyLCAgIDAsICAwLCAgNCwNCi0gICAgMCwgMTI3LCAxNTAsICAgMCwgMTEzLCAxMzQsICAgMCwgMTAxLCAxMTksICAgMCwgODcsIDEwNCwgICAwLCA3NCwgODksICAgMCwgNjAsIDczLCAgIDAsIDQ0LCA1NiwgICAwLCAyMywgMzUsICAgMCwgIDAsICAwLA0KLSAgICAwLCAxMjUsIDEzNCwgICAwLCAxMTIsIDExOCwgICAwLCAxMDAsIDEwNiwgICAwLCA4NywgOTIsICAgMCwgNzMsIDc4LCAgIDAsIDYwLCA2NCwgICAwLCA0NCwgNDgsICAgMCwgMjMsIDI3LCAgIDAsICAwLCAgMCwNCi0gICAgMCwgMTI1LCAxMTgsICAgMCwgMTEyLCAxMDUsICAgMCwgMTAwLCA5NCwgICAwLCA4NiwgODAsICAgMCwgNzMsIDY4LCAgIDAsIDYwLCA1NCwgICAwLCA0NCwgMzksICAgMCwgMjMsIDIwLCAgIDAsICAwLCAgMCwNCi0gICAgMCwgMTI1LCAxMDEsICAgMCwgMTExLCA5MCwgICAwLCA5OSwgODAsICAgMCwgODYsIDY5LCAgIDAsIDczLCA1OCwgICAwLCA1OSwgNDUsICAgMCwgNDQsIDMwLCAgIDAsIDIzLCAxMSwgICAwLCAgMCwgIDAsDQotICAgIDAsIDEyNCwgODUsICAgMCwgMTExLCA3NSwgICAwLCA5OSwgNjYsICAgMCwgODYsIDU2LCAgIDAsIDczLCA0NSwgICAwLCA1OSwgMzQsICAgMCwgNDQsIDIwLCAgIDAsIDIzLCAgMSwgICAwLCAgMCwgIDAsDQotICAgIDAsIDEyNSwgNzIsICAgMCwgMTExLCA2MiwgICAwLCA5OSwgNTYsICAgMCwgODYsIDQ2LCAgIDAsIDczLCAzNiwgICAwLCA2MCwgMjYsICAgMCwgNDQsIDEyLCAgIDAsIDIzLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDAsIDExNCwgMTg4LCAgIDAsIDEwMSwgMTY3LCAgIDAsIDg5LCAxNTAsICAgMCwgNzcsIDEzMSwgICAwLCA2NCwgMTEzLCAgIDAsIDUwLCA5NSwgICAwLCAzNCwgNzUsICAgMCwgMTIsIDUyLCAgIDAsICAwLCAxNCwNCi0gICAgMCwgMTEzLCAxNzAsICAgMCwgMTAxLCAxNTMsICAgMCwgODksIDEzNywgICAwLCA3NywgMTIwLCAgIDAsIDY0LCAxMDIsICAgMCwgNTAsIDg1LCAgIDAsIDM1LCA2NywgICAwLCAxMiwgNDQsICAgMCwgIDAsICA0LA0KLSAgICAwLCAxMTMsIDE1NiwgICAwLCAxMDAsIDEzOSwgICAwLCA4OSwgMTI1LCAgIDAsIDc3LCAxMDksICAgMCwgNjQsIDkyLCAgIDAsIDUxLCA3NywgICAwLCAzNSwgNjAsICAgMCwgMTIsIDM4LCAgIDAsICAwLCAgMCwNCi0gICAgMCwgMTEyLCAxNDEsICAgMCwgMTAwLCAxMjYsICAgMCwgODksIDExMywgICAwLCA3NywgOTgsICAgMCwgNjQsIDgzLCAgIDAsIDUxLCA2OCwgICAwLCAzNSwgNTEsICAgMCwgMTIsIDMwLCAgIDAsICAwLCAgMCwNCi0gICAgMCwgMTEyLCAxMjcsICAgMCwgMTAwLCAxMTIsICAgMCwgODksIDEwMCwgICAwLCA3NiwgODcsICAgMCwgNjQsIDc0LCAgIDAsIDUxLCA1OSwgICAwLCAzNSwgNDQsICAgMCwgMTMsIDI0LCAgIDAsICAwLCAgMCwNCi0gICAgMCwgMTEyLCAxMTEsICAgMCwgMTAwLCAxMDAsICAgMCwgODgsIDg4LCAgIDAsIDc2LCA3NiwgICAwLCA2NCwgNjQsICAgMCwgNTEsIDUyLCAgIDAsIDM2LCAzNywgICAwLCAxMywgMTcsICAgMCwgIDAsICAwLA0KLSAgICAwLCAxMTEsIDk2LCAgIDAsIDk5LCA4NSwgICAwLCA4OCwgNzYsICAgMCwgNzYsIDY0LCAgIDAsIDY0LCA1MywgICAwLCA1MSwgNDEsICAgMCwgMzYsIDI3LCAgIDAsIDEzLCAgNiwgICAwLCAgMCwgIDAsDQotICAgIDAsIDExMSwgODEsICAgMCwgOTksIDcxLCAgIDAsIDg4LCA2MiwgICAwLCA3NiwgNTIsICAgMCwgNjQsIDQzLCAgIDAsIDUxLCAzMSwgICAwLCAzNiwgMTcsICAgMCwgMTMsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMCwgMTExLCA2OSwgICAwLCA5OSwgNjAsICAgMCwgODgsIDUyLCAgIDAsIDc1LCA0MywgICAwLCA2MywgMzQsICAgMCwgNTEsIDIxLCAgIDAsIDM2LCAgNywgICAwLCAxMywgIDAsICAgMCwgIDAsICAwLA0KLSAgICAwLCA5OSwgMTc3LCAgIDAsIDg4LCAxNTgsICAgMCwgNzcsIDE0MSwgICAwLCA2NiwgMTIzLCAgIDAsIDUzLCAxMDYsICAgMCwgNDAsIDg5LCAgIDAsIDI1LCA3MSwgICAwLCAgNSwgNDcsICAgMCwgIDAsICA4LA0KLSAgICAwLCA5OSwgMTYwLCAgIDAsIDg4LCAxNDQsICAgMCwgNzcsIDEyOSwgICAwLCA2NiwgMTEyLCAgIDAsIDU0LCA5NywgICAwLCA0MSwgODAsICAgMCwgMjYsIDYyLCAgIDAsICA1LCA0MCwgICAwLCAgMCwgIDAsDQotICAgIDAsIDk5LCAxNDcsICAgMCwgODcsIDEzMiwgICAwLCA3OCwgMTE3LCAgIDAsIDY2LCAxMDIsICAgMCwgNTQsIDg3LCAgIDAsIDQyLCA3MiwgICAwLCAyNiwgNTUsICAgMCwgIDUsIDM0LCAgIDAsICAwLCAgMCwNCi0gICAgMCwgOTksIDEzNCwgICAwLCA4OCwgMTE5LCAgIDAsIDc3LCAxMDcsICAgMCwgNjYsIDkyLCAgIDAsIDU0LCA3OCwgICAwLCA0MiwgNjQsICAgMCwgMjcsIDQ4LCAgIDAsICA1LCAyNywgICAwLCAgMCwgIDAsDQotICAgIDAsIDk5LCAxMjAsICAgMCwgODcsIDEwNywgICAwLCA3OCwgOTQsICAgMCwgNjYsIDgxLCAgIDAsIDU0LCA2OCwgICAwLCA0MiwgNTUsICAgMCwgMjcsIDQwLCAgIDAsICA2LCAyMCwgICAwLCAgMCwgIDAsDQotICAgIDAsIDk4LCAxMDUsICAgMCwgODcsIDk0LCAgIDAsIDc3LCA4NCwgICAwLCA2NSwgNzEsICAgMCwgNTUsIDU5LCAgIDAsIDQyLCA0NywgICAwLCAyOCwgMzMsICAgMCwgIDYsIDEyLCAgIDAsICAwLCAgMCwNCi0gICAgMCwgOTgsIDkzLCAgIDAsIDg3LCA4MSwgICAwLCA3NywgNzIsICAgMCwgNjYsIDYxLCAgIDAsIDU0LCA0OSwgICAwLCA0MiwgMzcsICAgMCwgMjgsIDI0LCAgIDAsICA2LCAgNCwgICAwLCAgMCwgIDAsDQotICAgIDAsIDk4LCA3NywgICAwLCA4NywgNjgsICAgMCwgNzcsIDU5LCAgIDAsIDY1LCA0OSwgICAwLCA1NCwgMzksICAgMCwgNDIsIDI3LCAgIDAsIDI5LCAxNCwgICAwLCAgNiwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAxLCA5OCwgNjUsICAgNywgODcsIDU2LCAgIDAsIDc3LCA0OSwgICAwLCA2NiwgNDEsICAgMCwgNTQsIDMwLCAgIDAsIDQyLCAxOSwgICAwLCAyOSwgIDMsICAgMCwgIDYsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMCwgODQsIDE2NiwgICAwLCA3NCwgMTQ5LCAgIDAsIDY0LCAxMzQsICAgMCwgNTMsIDExNywgICAwLCA0MSwgMTAwLCAgIDAsIDI4LCA4MywgICAwLCAxMSwgNjQsICAgMCwgIDAsIDQyLCAgIDAsICAwLCAgMywNCi0gICAgMCwgODQsIDE1MSwgICAwLCA3NCwgMTM1LCAgIDAsIDY0LCAxMjEsICAgMCwgNTMsIDEwNSwgICAwLCA0MiwgOTAsICAgMCwgMzAsIDc1LCAgIDAsIDE0LCA1OCwgICAwLCAgMCwgMzYsICAgMCwgIDAsICAwLA0KLSAgICAwLCA4NCwgMTM4LCAgIDAsIDc0LCAxMjQsICAgMSwgNjQsIDExMCwgICAwLCA1NCwgOTUsICAgMCwgNDMsIDgxLCAgIDAsIDMwLCA2NywgICAwLCAxNSwgNTEsICAgMCwgIDEsIDI5LCAgIDAsICAwLCAgMCwNCi0gICAgMTQsIDg0LCAxMjYsICAxMiwgNzQsIDExMiwgICAyLCA2NSwgOTksICAgMCwgNTQsIDg1LCAgIDAsIDQ0LCA3MywgICAwLCAzMSwgNTksICAgMCwgMTYsIDQ0LCAgIDAsICAxLCAyMywgICAwLCAgMCwgIDAsDQotICAgIDE2LCA4NCwgMTEzLCAgMTMsIDc0LCAxMDAsICAgNiwgNjUsIDg5LCAgIDAsIDU0LCA3NywgICAwLCA0NCwgNjUsICAgMCwgMzEsIDUxLCAgIDAsIDE3LCAzNiwgICAwLCAgMSwgMTYsICAgMCwgIDAsICAwLA0KLSAgICAyNCwgODQsIDEwMCwgIDE4LCA3NCwgODgsICAxMywgNjUsIDc4LCAgIDIsIDU1LCA2OCwgICAwLCA0NCwgNTUsICAgMCwgMzIsIDQzLCAgIDAsIDE4LCAyOCwgICAwLCAgMSwgIDYsICAgMCwgIDAsICAwLA0KLSAgICAyNiwgODQsIDg3LCAgMjQsIDc0LCA3NiwgIDE3LCA2NSwgNjcsICAgNywgNTQsIDU3LCAgIDAsIDQ0LCA0NiwgICAwLCAzMiwgMzUsICAgMCwgMTksIDIxLCAgIDAsICAyLCAgMywgICAwLCAgMCwgIDAsDQotICAgIDMwLCA4NCwgNzQsICAyOCwgNzQsIDY0LCAgMjAsIDY1LCA1NSwgIDEyLCA1NSwgNDYsICAgMCwgNDQsIDM1LCAgIDAsIDMyLCAyNCwgICAwLCAxOCwgIDksICAgMCwgIDEsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgMzIsIDg0LCA2MywgIDI4LCA3NCwgNTQsICAyMSwgNjUsIDQ3LCAgMTMsIDU0LCAzOCwgICAwLCA0NCwgMjgsICAgMCwgMzIsIDE2LCAgIDAsIDE4LCAgMSwgICAwLCAgMSwgIDAsICAgMCwgIDAsICAwLA0KLSAgICAzMCwgNjcsIDE1NSwgIDIwLCA1OCwgMTM5LCAgMjAsIDQ5LCAxMjYsICAxMiwgMzksIDExMCwgICAwLCAyNywgOTQsICAgMCwgMTMsIDc3LCAgIDAsICAwLCA2MCwgICAwLCAgMCwgMzcsICAgMCwgIDAsICAwLA0KLSAgICAzNSwgNjcsIDE0MiwgIDMwLCA1OCwgMTI2LCAgMjMsIDUwLCAxMTQsICAxNiwgNDAsIDk5LCAgIDcsIDI5LCA4NSwgICAwLCAxNSwgNjksICAgMCwgIDAsIDUyLCAgIDAsICAwLCAzMCwgICAwLCAgMCwgIDAsDQotICAgIDM1LCA2OCwgMTMxLCAgMzAsIDU5LCAxMTYsICAyNywgNTAsIDEwNCwgIDE4LCA0MCwgOTAsICAgOSwgMjksIDc2LCAgIDAsIDE3LCA2MiwgICAwLCAgMiwgNDYsICAgMCwgIDAsIDI0LCAgIDAsICAwLCAgMCwNCi0gICAgMzcsIDY5LCAxMTksICAzMywgNTksIDEwNiwgIDI3LCA1MSwgOTQsICAyMSwgNDEsIDgwLCAgIDksIDMwLCA2NywgICAwLCAxOCwgNTQsICAgMCwgIDMsIDM5LCAgIDAsICAwLCAxOCwgICAwLCAgMCwgIDAsDQotICAgIDQwLCA2OSwgMTA3LCAgMzYsIDU5LCA5NCwgIDI4LCA1MSwgODQsICAxOCwgNDEsIDcyLCAgMTAsIDMxLCA2MCwgICAwLCAxOSwgNDcsICAgMCwgIDQsIDMyLCAgIDAsICAwLCAxMCwgICAwLCAgMCwgIDAsDQotICAgIDQyLCA2OSwgOTUsICAzNiwgNTksIDg0LCAgMjksIDUxLCA3NCwgIDE5LCA0MSwgNjMsICAxMCwgMzEsIDUyLCAgIDAsIDIwLCAzOSwgICAwLCAgNCwgMjUsICAgMCwgIDAsICA0LCAgIDAsICAwLCAgMCwNCi0gICAgNDMsIDY5LCA4MywgIDM4LCA2MCwgNzMsICAzMiwgNTEsIDYyLCAgMjMsIDQyLCA1MywgIDExLCAzMSwgNDIsICAgMCwgMjAsIDMxLCAgIDAsICA1LCAxNywgICAwLCAgMCwgIDEsICAgMCwgIDAsICAwLA0KLSAgICA0NSwgNjksIDcwLCAgMzksIDYwLCA2MCwgIDMzLCA1MSwgNTIsICAyNCwgNDIsIDQzLCAgMTMsIDMyLCAzMywgICAwLCAyMSwgMjEsICAgMCwgIDUsICA2LCAgIDAsICAwLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDQ3LCA2OSwgNTksICA0MSwgNjAsIDUxLCAgMzQsIDUxLCA0MywgIDI0LCA0MiwgMzUsICAxMiwgMzMsIDI2LCAgIDEsIDIyLCAxNCwgICAwLCAgNSwgIDEsICAgMCwgIDAsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgNDYsIDQ4LCAxNDYsICA0MiwgNDAsIDEzMSwgIDM2LCAzMiwgMTE4LCAgMjcsIDIyLCAxMDMsICAxNywgIDYsIDg4LCAgIDUsICAwLCA3MywgICAwLCAgMCwgNTUsICAgMCwgIDAsIDMzLCAgIDAsICAwLCAgMCwNCi0gICAgNDgsIDQ4LCAxMzMsICA0NCwgNDAsIDExOSwgIDM3LCAzMiwgMTA3LCAgMjgsIDIyLCA5MywgIDIwLCAgOCwgNzksICAgNywgIDAsIDY1LCAgIDAsICAwLCA0OSwgICAwLCAgMCwgMjcsICAgMCwgIDAsICAwLA0KLSAgICA0OCwgNTAsIDEyMywgIDQ0LCA0MSwgMTA5LCAgMzcsIDMzLCA5NywgIDMwLCAyMywgODMsICAyMSwgMTEsIDcxLCAgIDgsICAwLCA1OCwgICAwLCAgMCwgNDIsICAgMCwgIDAsIDIxLCAgIDAsICAwLCAgMCwNCi0gICAgNDksIDUxLCAxMTEsICA0NSwgNDIsIDk5LCAgMzgsIDM0LCA4NywgIDI5LCAyNSwgNzUsICAyMCwgMTMsIDYzLCAgIDgsICAwLCA1MSwgICAwLCAgMCwgMzYsICAgMCwgIDAsIDE0LCAgIDAsICAwLCAgMCwNCi0gICAgNTIsIDUyLCAxMDAsICA0NCwgNDMsIDg5LCAgMzgsIDM1LCA3OSwgIDI5LCAyNiwgNjgsICAxOSwgMTUsIDU2LCAgMTAsICAxLCA0MywgICAwLCAgMCwgMjgsICAgMCwgIDAsICA2LCAgIDAsICAwLCAgMCwNCi0gICAgNTIsIDUyLCA5MCwgIDQ3LCA0NCwgNzksICAzOSwgMzYsIDcwLCAgMzAsIDI3LCA1OSwgIDIwLCAxNiwgNDcsICAgOSwgIDIsIDM2LCAgIDAsICAwLCAyMiwgICAwLCAgMCwgIDIsICAgMCwgIDAsICAwLA0KLSAgICA1MiwgNTMsIDc4LCAgNDYsIDQ0LCA2OCwgIDM5LCAzNywgNjAsICAzMiwgMjcsIDQ5LCAgMjIsIDE3LCAzOSwgIDEwLCAgMywgMjgsICAgMCwgIDAsIDEyLCAgIDAsICAwLCAgMCwgICAwLCAgMCwgIDAsDQotICAgIDUzLCA1MywgNjYsICA0NywgNDQsIDU3LCAgNDAsIDM2LCA0OCwgIDMyLCAyNywgMzksICAyMiwgMTgsIDMwLCAgIDksICA0LCAxOCwgICAwLCAgMCwgIDMsICAgMCwgIDAsICAwLCAgIDAsICAwLCAgMCwNCi0gICAgNTQsIDUzLCA1NywgIDQ4LCA0NSwgNDksICA0MSwgMzcsIDQxLCAgMzMsIDI4LCAzMiwgIDIyLCAxOSwgMjMsICAxMSwgIDYsIDEwLCAgIDEsICAwLCAgMCwgICAwLCAgMCwgIDAsICAgMCwgIDAsICAwLA0KLX07DQotdm9pZCBBZG9iZUNNWUtfdG9fc1JHQjEoRlhfQllURSBjLCBGWF9CWVRFIG0sIEZYX0JZVEUgeSwgRlhfQllURSBrLCBGWF9CWVRFJiBSLCBGWF9CWVRFJiBHLCBGWF9CWVRFJiBCKQ0KLXsNCi0gICAgaW50IGZpeF9jID0gYyA8PCA4Ow0KLSAgICBpbnQgZml4X20gPSBtIDw8IDg7DQotICAgIGludCBmaXhfeSA9IHkgPDwgODsNCi0gICAgaW50IGZpeF9rID0gayA8PCA4Ow0KLSAgICBpbnQgY19pbmRleCA9IChmaXhfYyArIDQwOTYpID4+IDEzOw0KLSAgICBpbnQgbV9pbmRleCA9IChmaXhfbSArIDQwOTYpID4+IDEzOw0KLSAgICBpbnQgeV9pbmRleCA9IChmaXhfeSArIDQwOTYpID4+IDEzOw0KLSAgICBpbnQga19pbmRleCA9IChmaXhfayArIDQwOTYpID4+IDEzOw0KLSAgICBpbnQgcG9zID0gKGNfaW5kZXggKiA5ICogOSAqIDkgKyBtX2luZGV4ICogOSAqIDkgKyB5X2luZGV4ICogOSArIGtfaW5kZXgpICogMzsNCi0gICAgaW50IGZpeF9yID0gZ19DTVlLU2FtcGxlc1twb3NdIDw8IDg7DQotICAgIGludCBmaXhfZyA9IGdfQ01ZS1NhbXBsZXNbcG9zICsgMV0gPDwgODsNCi0gICAgaW50IGZpeF9iID0gZ19DTVlLU2FtcGxlc1twb3MgKyAyXSA8PCA4Ow0KLSAgICBpbnQgYzFfaW5kZXggPSBmaXhfYyA+PiAxMzsNCi0gICAgaWYgKGMxX2luZGV4ID09IGNfaW5kZXgpIHsNCi0gICAgICAgIGMxX2luZGV4ID0gYzFfaW5kZXggPT0gOCA/IGMxX2luZGV4IC0gMSA6IGMxX2luZGV4ICsgMTsNCi0gICAgfQ0KLSAgICBpbnQgbTFfaW5kZXggPSBmaXhfbSA+PiAxMzsNCi0gICAgaWYgKG0xX2luZGV4ID09IG1faW5kZXgpIHsNCi0gICAgICAgIG0xX2luZGV4ID0gbTFfaW5kZXggPT0gOCA/IG0xX2luZGV4IC0gMSA6IG0xX2luZGV4ICsgMTsNCi0gICAgfQ0KLSAgICBpbnQgeTFfaW5kZXggPSBmaXhfeSA+PiAxMzsNCi0gICAgaWYgKHkxX2luZGV4ID09IHlfaW5kZXgpIHsNCi0gICAgICAgIHkxX2luZGV4ID0geTFfaW5kZXggPT0gOCA/IHkxX2luZGV4IC0gMSA6IHkxX2luZGV4ICsgMTsNCi0gICAgfQ0KLSAgICBpbnQgazFfaW5kZXggPSBmaXhfayA+PiAxMzsNCi0gICAgaWYgKGsxX2luZGV4ID09IGtfaW5kZXgpIHsNCi0gICAgICAgIGsxX2luZGV4ID0gazFfaW5kZXggPT0gOCA/IGsxX2luZGV4IC0gMSA6IGsxX2luZGV4ICsgMTsNCi0gICAgfQ0KLSAgICBpbnQgYzFfcG9zID0gcG9zICsgKGMxX2luZGV4IC0gY19pbmRleCkgKiA5ICogOSAqIDkgKiAzOw0KLSAgICBpbnQgbTFfcG9zID0gcG9zICsgKG0xX2luZGV4IC0gbV9pbmRleCkgKiA5ICogOSAqIDM7DQotICAgIGludCB5MV9wb3MgPSBwb3MgKyAoeTFfaW5kZXggLSB5X2luZGV4KSAqIDkgKiAzOw0KLSAgICBpbnQgazFfcG9zID0gcG9zICsgKGsxX2luZGV4IC0ga19pbmRleCkgKiAzOw0KLSAgICBpbnQgY19yX2RlbHRhID0gZ19DTVlLU2FtcGxlc1twb3NdIC0gZ19DTVlLU2FtcGxlc1tjMV9wb3NdOw0KLSAgICBpbnQgY19nX2RlbHRhID0gZ19DTVlLU2FtcGxlc1twb3MgKyAxXSAtIGdfQ01ZS1NhbXBsZXNbYzFfcG9zICsgMV07DQotICAgIGludCBjX2JfZGVsdGEgPSBnX0NNWUtTYW1wbGVzW3BvcyArIDJdIC0gZ19DTVlLU2FtcGxlc1tjMV9wb3MgKyAyXTsNCi0gICAgaW50IG1fcl9kZWx0YSA9IGdfQ01ZS1NhbXBsZXNbcG9zXSAtIGdfQ01ZS1NhbXBsZXNbbTFfcG9zXTsNCi0gICAgaW50IG1fZ19kZWx0YSA9IGdfQ01ZS1NhbXBsZXNbcG9zICsgMV0gLSBnX0NNWUtTYW1wbGVzW20xX3BvcyArIDFdOw0KLSAgICBpbnQgbV9iX2RlbHRhID0gZ19DTVlLU2FtcGxlc1twb3MgKyAyXSAtIGdfQ01ZS1NhbXBsZXNbbTFfcG9zICsgMl07DQotICAgIGludCB5X3JfZGVsdGEgPSBnX0NNWUtTYW1wbGVzW3Bvc10gLSBnX0NNWUtTYW1wbGVzW3kxX3Bvc107DQotICAgIGludCB5X2dfZGVsdGEgPSBnX0NNWUtTYW1wbGVzW3BvcyArIDFdIC0gZ19DTVlLU2FtcGxlc1t5MV9wb3MgKyAxXTsNCi0gICAgaW50IHlfYl9kZWx0YSA9IGdfQ01ZS1NhbXBsZXNbcG9zICsgMl0gLSBnX0NNWUtTYW1wbGVzW3kxX3BvcyArIDJdOw0KLSAgICBpbnQga19yX2RlbHRhID0gZ19DTVlLU2FtcGxlc1twb3NdIC0gZ19DTVlLU2FtcGxlc1trMV9wb3NdOw0KLSAgICBpbnQga19nX2RlbHRhID0gZ19DTVlLU2FtcGxlc1twb3MgKyAxXSAtIGdfQ01ZS1NhbXBsZXNbazFfcG9zICsgMV07DQotICAgIGludCBrX2JfZGVsdGEgPSBnX0NNWUtTYW1wbGVzW3BvcyArIDJdIC0gZ19DTVlLU2FtcGxlc1trMV9wb3MgKyAyXTsNCi0gICAgaW50IGNfcmF0ZSA9IChmaXhfYyAtIChjX2luZGV4IDw8IDEzKSkgKiAoY19pbmRleCAtIGMxX2luZGV4KTsNCi0gICAgZml4X3IgKz0gY19yX2RlbHRhICogY19yYXRlIC8gMzI7DQotICAgIGZpeF9nICs9IGNfZ19kZWx0YSAqIGNfcmF0ZSAvIDMyOw0KLSAgICBmaXhfYiArPSBjX2JfZGVsdGEgKiBjX3JhdGUgLyAzMjsNCi0gICAgaW50IG1fcmF0ZSA9IChmaXhfbSAtIChtX2luZGV4IDw8IDEzKSkgKiAobV9pbmRleCAtIG0xX2luZGV4KTsNCi0gICAgZml4X3IgKz0gbV9yX2RlbHRhICogbV9yYXRlIC8gMzI7DQotICAgIGZpeF9nICs9IG1fZ19kZWx0YSAqIG1fcmF0ZSAvIDMyOw0KLSAgICBmaXhfYiArPSBtX2JfZGVsdGEgKiBtX3JhdGUgLyAzMjsNCi0gICAgaW50IHlfcmF0ZSA9IChmaXhfeSAtICh5X2luZGV4IDw8IDEzKSkgKiAoeV9pbmRleCAtIHkxX2luZGV4KTsNCi0gICAgZml4X3IgKz0geV9yX2RlbHRhICogeV9yYXRlIC8gMzI7DQotICAgIGZpeF9nICs9IHlfZ19kZWx0YSAqIHlfcmF0ZSAvIDMyOw0KLSAgICBmaXhfYiArPSB5X2JfZGVsdGEgKiB5X3JhdGUgLyAzMjsNCi0gICAgaW50IGtfcmF0ZSA9IChmaXhfayAtIChrX2luZGV4IDw8IDEzKSkgKiAoa19pbmRleCAtIGsxX2luZGV4KTsNCi0gICAgZml4X3IgKz0ga19yX2RlbHRhICoga19yYXRlIC8gMzI7DQotICAgIGZpeF9nICs9IGtfZ19kZWx0YSAqIGtfcmF0ZSAvIDMyOw0KLSAgICBmaXhfYiArPSBrX2JfZGVsdGEgKiBrX3JhdGUgLyAzMjsNCi0gICAgaWYgKGZpeF9yIDwgMCkgew0KLSAgICAgICAgZml4X3IgPSAwOw0KLSAgICB9DQotICAgIGlmIChmaXhfZyA8IDApIHsNCi0gICAgICAgIGZpeF9nID0gMDsNCi0gICAgfQ0KLSAgICBpZiAoZml4X2IgPCAwKSB7DQotICAgICAgICBmaXhfYiA9IDA7DQotICAgIH0NCi0gICAgUiA9IGZpeF9yID4+IDg7DQotICAgIEcgPSBmaXhfZyA+PiA4Ow0KLSAgICBCID0gZml4X2IgPj4gODsNCi19DQotdm9pZCBBZG9iZUNNWUtfdG9fc1JHQihGWF9GTE9BVCBjLCBGWF9GTE9BVCBtLCBGWF9GTE9BVCB5LCBGWF9GTE9BVCBrLCBGWF9GTE9BVCYgUiwgRlhfRkxPQVQmIEcsIEZYX0ZMT0FUJiBCKQ0KLXsNCi0gICAgRlhfQllURSBjMSA9IEZYU1lTX3JvdW5kKGMgKiAyNTUpOw0KLSAgICBGWF9CWVRFIG0xID0gRlhTWVNfcm91bmQobSAqIDI1NSk7DQotICAgIEZYX0JZVEUgeTEgPSBGWFNZU19yb3VuZCh5ICogMjU1KTsNCi0gICAgRlhfQllURSBrMSA9IEZYU1lTX3JvdW5kKGsgKiAyNTUpOw0KLSAgICBGWF9CWVRFIHIsIGcsIGI7DQotICAgIEFkb2JlQ01ZS190b19zUkdCMShjMSwgbTEsIHkxLCBrMSwgciwgZywgYik7DQotICAgIFIgPSAxLjBmICogciAvIDI1NTsNCi0gICAgRyA9IDEuMGYgKiBnIC8gMjU1Ow0KLSAgICBCID0gMS4wZiAqIGIgLyAyNTU7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaCIKKyNpbmNsdWRlICJjb2RlY19pbnQuaCIKKyNpbmNsdWRlICIuLi9sY21zMi9pbmNsdWRlL2Z4X2xjbXMyLmgiCitGWF9CT09MIE1ENUNvbXB1dGVJRCggRlhfTFBDVk9JRCBidWYsIEZYX0RXT1JEIGR3U2l6ZSwgRlhfQllURSBJRFsxNl0gKQoreworICAgIHJldHVybiBjbXNNRDVjb21wdXRlSURFeHQoYnVmLCBkd1NpemUsIElEKTsKK30KK3N0cnVjdCBDTGNtc0NtbSA6IHB1YmxpYyBDRlhfT2JqZWN0IHsKKyAgICBjbXNIVFJBTlNGT1JNIG1faFRyYW5zZm9ybTsKKyAgICBpbnQJCQltX25TcmNDb21wb25lbnRzOworICAgIGludAkJCW1fbkRzdENvbXBvbmVudHM7CisgICAgRlhfQk9PTAkJbV9iTGFiOworfTsKK2V4dGVybiAiQyIgeworICAgIGludCBvdXJIYW5kbGVyKGludCBFcnJvckNvZGUsIGNvbnN0IGNoYXIgKkVycm9yVGV4dCkKKyAgICB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KK307CitGWF9CT09MIENoZWNrQ29tcG9uZW50cyhjbXNDb2xvclNwYWNlU2lnbmF0dXJlIGNzLCBpbnQgbkNvbXBvbmVudHMsIEZYX0JPT0wgYkRzdCkKK3sKKyAgICBpZiAobkNvbXBvbmVudHMgPD0gMCB8fCBuQ29tcG9uZW50cyA+IDE1KSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgc3dpdGNoKGNzKSB7CisgICAgICAgIGNhc2UgY21zU2lnTGFiRGF0YToKKyAgICAgICAgICAgIGlmIChuQ29tcG9uZW50cyA8IDMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBjbXNTaWdHcmF5RGF0YToKKyAgICAgICAgICAgIGlmIChiRHN0ICYmIG5Db21wb25lbnRzICE9IDEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFiRHN0ICYmIG5Db21wb25lbnRzID4gMikgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGNtc1NpZ1JnYkRhdGE6CisgICAgICAgICAgICBpZiAoYkRzdCAmJiBuQ29tcG9uZW50cyAhPSAzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgY21zU2lnQ215a0RhdGE6CisgICAgICAgICAgICBpZiAoYkRzdCAmJiBuQ29tcG9uZW50cyAhPSA0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAobkNvbXBvbmVudHMgIT0gMykgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK3ZvaWQqIEljY0xpYl9DcmVhdGVUcmFuc2Zvcm0oY29uc3QgdW5zaWduZWQgY2hhciogcFNyY1Byb2ZpbGVEYXRhLCB1bnNpZ25lZCBpbnQgZHdTcmNQcm9maWxlU2l6ZSwgaW50IG5TcmNDb21wb25lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwRHN0UHJvZmlsZURhdGEsIHVuc2lnbmVkIGludCBkd0RzdFByb2ZpbGVTaXplLCBpbnQgbkRzdENvbXBvbmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnRlbnQsIEZYX0RXT1JEIGR3U3JjRm9ybWF0ID0gSWNjX0ZPUk1BVF9ERUZBVUxULCBGWF9EV09SRCBkd0RzdEZvcm1hdCA9IEljY19GT1JNQVRfREVGQVVMVCkKK3sKKyAgICBjbXNIUFJPRklMRSBzcmNQcm9maWxlID0gTlVMTDsKKyAgICBjbXNIUFJPRklMRSBkc3RQcm9maWxlID0gTlVMTDsKKyAgICBjbXNIVFJBTlNGT1JNIGhUcmFuc2Zvcm0gPSBOVUxMOworICAgIENMY21zQ21tKiBwQ21tID0gTlVMTDsKKyAgICBzcmNQcm9maWxlID0gY21zT3BlblByb2ZpbGVGcm9tTWVtKCh2b2lkKilwU3JjUHJvZmlsZURhdGEsIGR3U3JjUHJvZmlsZVNpemUpOworICAgIGlmIChzcmNQcm9maWxlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmKHBEc3RQcm9maWxlRGF0YSA9PSBOVUxMICYmIGR3RHN0UHJvZmlsZVNpemUgPT0gMCAmJiBuRHN0Q29tcG9uZW50cyA9PSAzKSB7CisgICAgICAgIGRzdFByb2ZpbGUgPSBjbXNDcmVhdGVfc1JHQlByb2ZpbGUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkc3RQcm9maWxlID0gY21zT3BlblByb2ZpbGVGcm9tTWVtKCh2b2lkKilwRHN0UHJvZmlsZURhdGEsIGR3RHN0UHJvZmlsZVNpemUpOworICAgIH0KKyAgICBpZiAoZHN0UHJvZmlsZSA9PSBOVUxMKSB7CisgICAgICAgIGNtc0Nsb3NlUHJvZmlsZShzcmNQcm9maWxlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGludCBzcmNGb3JtYXQ7CisgICAgRlhfQk9PTCBiTGFiID0gRkFMU0U7CisgICAgY21zQ29sb3JTcGFjZVNpZ25hdHVyZSBzcmNDUyA9IGNtc0dldENvbG9yU3BhY2Uoc3JjUHJvZmlsZSk7CisgICAgaWYgKCFDaGVja0NvbXBvbmVudHMoc3JjQ1MsIG5TcmNDb21wb25lbnRzLCBGQUxTRSkpIHsKKyAgICAgICAgY21zQ2xvc2VQcm9maWxlKHNyY1Byb2ZpbGUpOworICAgICAgICBjbXNDbG9zZVByb2ZpbGUoZHN0UHJvZmlsZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoc3JjQ1MgPT0gY21zU2lnTGFiRGF0YSkgeworICAgICAgICBzcmNGb3JtYXQgPSBDT0xPUlNQQUNFX1NIKFBUX0xhYikgfCBDSEFOTkVMU19TSChuU3JjQ29tcG9uZW50cykgfCBCWVRFU19TSCgwKTsKKyAgICAgICAgYkxhYiA9IFRSVUU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3JjRm9ybWF0ID0gQ09MT1JTUEFDRV9TSChQVF9BTlkpIHwgQ0hBTk5FTFNfU0goblNyY0NvbXBvbmVudHMpIHwgQllURVNfU0goMSk7CisgICAgICAgIGlmIChzcmNDUyA9PSBjbXNTaWdSZ2JEYXRhICYmIFRfRE9TV0FQKGR3U3JjRm9ybWF0KSkgeworICAgICAgICAgICAgc3JjRm9ybWF0IHw9IERPU1dBUF9TSCgxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjbXNDb2xvclNwYWNlU2lnbmF0dXJlIGRzdENTID0gY21zR2V0Q29sb3JTcGFjZShkc3RQcm9maWxlKTsKKyAgICBpZiAoIUNoZWNrQ29tcG9uZW50cyhkc3RDUywgbkRzdENvbXBvbmVudHMsIFRSVUUpKSB7CisgICAgICAgIGNtc0Nsb3NlUHJvZmlsZShzcmNQcm9maWxlKTsKKyAgICAgICAgY21zQ2xvc2VQcm9maWxlKGRzdFByb2ZpbGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc3dpdGNoKGRzdENTKSB7CisgICAgICAgIGNhc2UgY21zU2lnR3JheURhdGE6CisgICAgICAgICAgICBoVHJhbnNmb3JtID0gY21zQ3JlYXRlVHJhbnNmb3JtKHNyY1Byb2ZpbGUsIHNyY0Zvcm1hdCwgZHN0UHJvZmlsZSwgVFlQRV9HUkFZXzgsIGludGVudCwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBjbXNTaWdSZ2JEYXRhOgorICAgICAgICAgICAgaFRyYW5zZm9ybSA9IGNtc0NyZWF0ZVRyYW5zZm9ybShzcmNQcm9maWxlLCBzcmNGb3JtYXQsIGRzdFByb2ZpbGUsIFRZUEVfQkdSXzgsIGludGVudCwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBjbXNTaWdDbXlrRGF0YToKKyAgICAgICAgICAgIGhUcmFuc2Zvcm0gPSBjbXNDcmVhdGVUcmFuc2Zvcm0oc3JjUHJvZmlsZSwgc3JjRm9ybWF0LCBkc3RQcm9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUX0RPU1dBUChkd0RzdEZvcm1hdCkgPyBUWVBFX0tZTUNfOCA6IFRZUEVfQ01ZS184LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQsIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKGhUcmFuc2Zvcm0gPT0gTlVMTCkgeworICAgICAgICBjbXNDbG9zZVByb2ZpbGUoc3JjUHJvZmlsZSk7CisgICAgICAgIGNtc0Nsb3NlUHJvZmlsZShkc3RQcm9maWxlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBDbW0gPSBGWF9ORVcgQ0xjbXNDbW07CisgICAgaWYgKHBDbW0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcENtbS0+bV9uU3JjQ29tcG9uZW50cyA9IG5TcmNDb21wb25lbnRzOworICAgIHBDbW0tPm1fbkRzdENvbXBvbmVudHMgPSBuRHN0Q29tcG9uZW50czsKKyAgICBwQ21tLT5tX2hUcmFuc2Zvcm0gPSBoVHJhbnNmb3JtOworICAgIHBDbW0tPm1fYkxhYiA9IGJMYWI7CisgICAgY21zQ2xvc2VQcm9maWxlKHNyY1Byb2ZpbGUpOworICAgIGNtc0Nsb3NlUHJvZmlsZShkc3RQcm9maWxlKTsKKyAgICByZXR1cm4gcENtbTsKK30KK3ZvaWQqIEljY0xpYl9DcmVhdGVUcmFuc2Zvcm1fc1JHQihjb25zdCB1bnNpZ25lZCBjaGFyKiBwUHJvZmlsZURhdGEsIHVuc2lnbmVkIGludCBkd1Byb2ZpbGVTaXplLCBpbnQgbkNvbXBvbmVudHMsIGludCBpbnRlbnQsIEZYX0RXT1JEIGR3U3JjRm9ybWF0KQoreworICAgIHJldHVybiBJY2NMaWJfQ3JlYXRlVHJhbnNmb3JtKHBQcm9maWxlRGF0YSwgZHdQcm9maWxlU2l6ZSwgbkNvbXBvbmVudHMsIE5VTEwsIDAsIDMsIGludGVudCwgZHdTcmNGb3JtYXQpOworfQordm9pZCBJY2NMaWJfRGVzdHJveVRyYW5zZm9ybSh2b2lkKiBwVHJhbnNmb3JtKQoreworICAgIGlmIChwVHJhbnNmb3JtID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjbXNEZWxldGVUcmFuc2Zvcm0oKChDTGNtc0NtbSopcFRyYW5zZm9ybSktPm1faFRyYW5zZm9ybSk7CisgICAgZGVsZXRlIChDTGNtc0NtbSopcFRyYW5zZm9ybTsKK30KK3ZvaWQgSWNjTGliX1RyYW5zbGF0ZSh2b2lkKiBwVHJhbnNmb3JtLCBGWF9GTE9BVCogcFNyY1ZhbHVlcywgRlhfRkxPQVQqIHBEZXN0VmFsdWVzKQoreworICAgIGlmIChwVHJhbnNmb3JtID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDTGNtc0NtbSogcCA9IChDTGNtc0NtbSopcFRyYW5zZm9ybTsKKyAgICBGWF9CWVRFIG91dHB1dFs0XTsKKyAgICBpZiAocC0+bV9iTGFiKSB7CisgICAgICAgIENGWF9GaXhlZEJ1Zkdyb3c8ZG91YmxlLCAxNj4gaW5wdXRzKHAtPm1fblNyY0NvbXBvbmVudHMpOworICAgICAgICBkb3VibGUqIGlucHV0ID0gaW5wdXRzOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHAtPm1fblNyY0NvbXBvbmVudHM7IGkgKyspIHsKKyAgICAgICAgICAgIGlucHV0W2ldID0gcFNyY1ZhbHVlc1tpXTsKKyAgICAgICAgfQorICAgICAgICBjbXNEb1RyYW5zZm9ybShwLT5tX2hUcmFuc2Zvcm0sIGlucHV0LCBvdXRwdXQsIDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIENGWF9GaXhlZEJ1Zkdyb3c8RlhfQllURSwgMTY+IGlucHV0cyhwLT5tX25TcmNDb21wb25lbnRzKTsKKyAgICAgICAgRlhfQllURSogaW5wdXQgPSBpbnB1dHM7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcC0+bV9uU3JjQ29tcG9uZW50czsgaSArKykgeworICAgICAgICAgICAgaWYgKHBTcmNWYWx1ZXNbaV0gPiAxLjBmKSB7CisgICAgICAgICAgICAgICAgaW5wdXRbaV0gPSAyNTU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHBTcmNWYWx1ZXNbaV0gPCAwKSB7CisgICAgICAgICAgICAgICAgaW5wdXRbaV0gPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnB1dFtpXSA9IChpbnQpKHBTcmNWYWx1ZXNbaV0gKiAyNTUuMGYpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNtc0RvVHJhbnNmb3JtKHAtPm1faFRyYW5zZm9ybSwgaW5wdXQsIG91dHB1dCwgMSk7CisgICAgfQorICAgIHN3aXRjaChwLT5tX25Ec3RDb21wb25lbnRzKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHBEZXN0VmFsdWVzWzBdID0gb3V0cHV0WzBdIC8gMjU1LjBmOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHBEZXN0VmFsdWVzWzBdID0gb3V0cHV0WzJdIC8gMjU1LjBmOworICAgICAgICAgICAgcERlc3RWYWx1ZXNbMV0gPSBvdXRwdXRbMV0gLyAyNTUuMGY7CisgICAgICAgICAgICBwRGVzdFZhbHVlc1syXSA9IG91dHB1dFswXSAvIDI1NS4wZjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBwRGVzdFZhbHVlc1swXSA9IG91dHB1dFswXSAvIDI1NS4wZjsKKyAgICAgICAgICAgIHBEZXN0VmFsdWVzWzFdID0gb3V0cHV0WzFdIC8gMjU1LjBmOworICAgICAgICAgICAgcERlc3RWYWx1ZXNbMl0gPSBvdXRwdXRbMl0gLyAyNTUuMGY7CisgICAgICAgICAgICBwRGVzdFZhbHVlc1szXSA9IG91dHB1dFszXSAvIDI1NS4wZjsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KK3ZvaWQgSWNjTGliX1RyYW5zbGF0ZUltYWdlKHZvaWQqIHBUcmFuc2Zvcm0sIHVuc2lnbmVkIGNoYXIqIHBEZXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBwU3JjLCBpbnQgcGl4ZWxzKQoreworICAgIGNtc0RvVHJhbnNmb3JtKCgoQ0xjbXNDbW0qKXBUcmFuc2Zvcm0pLT5tX2hUcmFuc2Zvcm0sICh2b2lkKilwU3JjLCBwRGVzdCwgcGl4ZWxzKTsKK30KK0ZYX0xQVk9JRCBDcmVhdGVQcm9maWxlX0dyYXkoZG91YmxlIGdhbW1hKQoreworICAgIGNtc0NJRXh5WSogRDUwID0gKGNtc0NJRXh5WSopY21zRDUwX3h5WSgpOworICAgIGlmICghY21zV2hpdGVQb2ludEZyb21UZW1wKEQ1MCwgNjUwNCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGNtc1RvbmVDdXJ2ZSogY3VydmUgPSBjbXNCdWlsZEdhbW1hKE5VTEwsIGdhbW1hKTsKKyAgICBpZiAoY3VydmUgPT0gTlVMTCkJeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRlhfTFBWT0lEIHByb2ZpbGUgPSBjbXNDcmVhdGVHcmF5UHJvZmlsZShENTAsIGN1cnZlKTsKKyAgICBjbXNGcmVlVG9uZUN1cnZlKGN1cnZlKTsKKyAgICByZXR1cm4gcHJvZmlsZTsKK30KK0lDb2RlY19JY2NNb2R1bGU6OkljY0NTIEdldFByb2ZpbGVDU0Zyb21IYW5kbGUoRlhfTFBWT0lEIHBQcm9maWxlKQoreworICAgIGlmIChwUHJvZmlsZSA9PSBOVUxMKQl7CisgICAgICAgIHJldHVybiBJQ29kZWNfSWNjTW9kdWxlOjpJY2NDU19Vbmtub3duOworICAgIH0KKyAgICBzd2l0Y2ggKGNtc0dldENvbG9yU3BhY2UocFByb2ZpbGUpKSB7CisgICAgICAgIGNhc2UgY21zU2lnWFlaRGF0YToKKyAgICAgICAgICAgIHJldHVybiBJQ29kZWNfSWNjTW9kdWxlOjpJY2NDU19YWVo7CisgICAgICAgIGNhc2UgY21zU2lnTGFiRGF0YToKKyAgICAgICAgICAgIHJldHVybiBJQ29kZWNfSWNjTW9kdWxlOjpJY2NDU19MYWI7CisgICAgICAgIGNhc2UgY21zU2lnTHV2RGF0YToKKyAgICAgICAgICAgIHJldHVybiBJQ29kZWNfSWNjTW9kdWxlOjpJY2NDU19MdXY7CisgICAgICAgIGNhc2UgY21zU2lnWUNiQ3JEYXRhOgorICAgICAgICAgICAgcmV0dXJuIElDb2RlY19JY2NNb2R1bGU6OkljY0NTX1lDYkNyOworICAgICAgICBjYXNlIGNtc1NpZ1l4eURhdGE6CisgICAgICAgICAgICByZXR1cm4gSUNvZGVjX0ljY01vZHVsZTo6SWNjQ1NfWXh5OworICAgICAgICBjYXNlIGNtc1NpZ1JnYkRhdGE6CisgICAgICAgICAgICByZXR1cm4gSUNvZGVjX0ljY01vZHVsZTo6SWNjQ1NfUmdiOworICAgICAgICBjYXNlIGNtc1NpZ0dyYXlEYXRhOgorICAgICAgICAgICAgcmV0dXJuIElDb2RlY19JY2NNb2R1bGU6OkljY0NTX0dyYXk7CisgICAgICAgIGNhc2UgY21zU2lnSHN2RGF0YToKKyAgICAgICAgICAgIHJldHVybiBJQ29kZWNfSWNjTW9kdWxlOjpJY2NDU19Ic3Y7CisgICAgICAgIGNhc2UgY21zU2lnSGxzRGF0YToKKyAgICAgICAgICAgIHJldHVybiBJQ29kZWNfSWNjTW9kdWxlOjpJY2NDU19IbHM7CisgICAgICAgIGNhc2UgY21zU2lnQ215a0RhdGE6CisgICAgICAgICAgICByZXR1cm4gSUNvZGVjX0ljY01vZHVsZTo6SWNjQ1NfQ215azsKKyAgICAgICAgY2FzZSBjbXNTaWdDbXlEYXRhOgorICAgICAgICAgICAgcmV0dXJuIElDb2RlY19JY2NNb2R1bGU6OkljY0NTX0NteTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBJQ29kZWNfSWNjTW9kdWxlOjpJY2NDU19Vbmtub3duOworICAgIH0KK30KK0lDb2RlY19JY2NNb2R1bGU6OkljY0NTIENDb2RlY19JY2NNb2R1bGU6OkdldFByb2ZpbGVDUyhGWF9MUENCWVRFIHBQcm9maWxlRGF0YSwgdW5zaWduZWQgaW50IGR3UHJvZmlsZVNpemUpCit7CisgICAgSUNvZGVjX0ljY01vZHVsZTo6SWNjQ1MgY3M7CisgICAgY21zSFBST0ZJTEUgaFByb2ZpbGUgPSBjbXNPcGVuUHJvZmlsZUZyb21NZW0oKHZvaWQqKXBQcm9maWxlRGF0YSwgZHdQcm9maWxlU2l6ZSk7CisgICAgaWYgKGhQcm9maWxlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEljY0NTX1Vua25vd247CisgICAgfQorICAgIGNzID0gR2V0UHJvZmlsZUNTRnJvbUhhbmRsZShoUHJvZmlsZSk7CisgICAgaWYgKGhQcm9maWxlKQl7CisgICAgICAgIGNtc0Nsb3NlUHJvZmlsZShoUHJvZmlsZSk7CisgICAgfQorICAgIHJldHVybiBjczsKK30KK0lDb2RlY19JY2NNb2R1bGU6OkljY0NTIENDb2RlY19JY2NNb2R1bGU6OkdldFByb2ZpbGVDUyhJRlhfRmlsZVJlYWQqIHBGaWxlKQoreworICAgIGlmIChwRmlsZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBJY2NDU19Vbmtub3duOworICAgIH0KKyAgICBJQ29kZWNfSWNjTW9kdWxlOjpJY2NDUyBjczsKKyAgICBGWF9EV09SRCBkd1NpemUgPSAoRlhfRFdPUkQpcEZpbGUtPkdldFNpemUoKTsKKyAgICBGWF9MUEJZVEUgcEJ1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIGR3U2l6ZSk7CisgICAgaWYgKHBCdWYgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gSWNjQ1NfVW5rbm93bjsKKyAgICB9CisgICAgcEZpbGUtPlJlYWRCbG9jayhwQnVmLCAwLCBkd1NpemUpOworICAgIGNzID0gR2V0UHJvZmlsZUNTKHBCdWYsIGR3U2l6ZSk7CisgICAgRlhfRnJlZShwQnVmKTsKKyAgICByZXR1cm4gY3M7Cit9CitGWF9EV09SRCBUcmFuc2ZlclByb2ZpbGVUeXBlKEZYX0xQVk9JRCBwUHJvZmlsZSwgRlhfRFdPUkQgZHdGb3JtYXQpCit7CisgICAgY21zQ29sb3JTcGFjZVNpZ25hdHVyZSBjcyA9IGNtc0dldENvbG9yU3BhY2UocFByb2ZpbGUpOworICAgIHN3aXRjaCAoY3MpIHsKKyAgICAgICAgY2FzZSBjbXNTaWdYWVpEYXRhOgorICAgICAgICAgICAgcmV0dXJuIFRZUEVfWFlaXzE2OworICAgICAgICBjYXNlIGNtc1NpZ0xhYkRhdGE6CisgICAgICAgICAgICByZXR1cm4gVFlQRV9MYWJfREJMOworICAgICAgICBjYXNlIGNtc1NpZ0x1dkRhdGE6CisgICAgICAgICAgICByZXR1cm4gVFlQRV9ZVVZfODsKKyAgICAgICAgY2FzZSBjbXNTaWdZQ2JDckRhdGE6CisgICAgICAgICAgICByZXR1cm4gVFlQRV9ZQ2JDcl84OworICAgICAgICBjYXNlIGNtc1NpZ1l4eURhdGE6CisgICAgICAgICAgICByZXR1cm4gVFlQRV9ZeHlfMTY7CisgICAgICAgIGNhc2UgY21zU2lnUmdiRGF0YToKKyAgICAgICAgICAgIHJldHVybiBUX0RPU1dBUChkd0Zvcm1hdCkgPyBUWVBFX1JHQl84IDogVFlQRV9CR1JfODsKKyAgICAgICAgY2FzZSBjbXNTaWdHcmF5RGF0YToKKyAgICAgICAgICAgIHJldHVybiBUWVBFX0dSQVlfODsKKyAgICAgICAgY2FzZSBjbXNTaWdIc3ZEYXRhOgorICAgICAgICAgICAgcmV0dXJuIFRZUEVfSFNWXzg7CisgICAgICAgIGNhc2UgY21zU2lnSGxzRGF0YToKKyAgICAgICAgICAgIHJldHVybiBUWVBFX0hMU184OworICAgICAgICBjYXNlIGNtc1NpZ0NteWtEYXRhOgorICAgICAgICAgICAgcmV0dXJuIFRfRE9TV0FQKGR3Rm9ybWF0KSA/IFRZUEVfS1lNQ184IDogVFlQRV9DTVlLXzg7CisgICAgICAgIGNhc2UgY21zU2lnQ215RGF0YToKKyAgICAgICAgICAgIHJldHVybiBUWVBFX0NNWV84OworICAgICAgICBjYXNlIGNtc1NpZ01DSDVEYXRhOgorICAgICAgICAgICAgcmV0dXJuIFRfRE9TV0FQKGR3Rm9ybWF0KSA/IFRZUEVfS1lNQzVfOCA6IFRZUEVfQ01ZSzVfODsKKyAgICAgICAgY2FzZSBjbXNTaWdNQ0g2RGF0YToKKyAgICAgICAgICAgIHJldHVybiBUWVBFX0NNWUs2Xzg7CisgICAgICAgIGNhc2UgY21zU2lnTUNIN0RhdGE6CisgICAgICAgICAgICByZXR1cm4gVF9ET1NXQVAoZHdGb3JtYXQpID8gVFlQRV9LWU1DN184IDogVFlQRV9DTVlLN184OworICAgICAgICBjYXNlIGNtc1NpZ01DSDhEYXRhOgorICAgICAgICAgICAgcmV0dXJuIFRfRE9TV0FQKGR3Rm9ybWF0KSA/IFRZUEVfS1lNQzhfOCA6IFRZUEVfQ01ZSzhfODsKKyAgICAgICAgY2FzZSBjbXNTaWdNQ0g5RGF0YToKKyAgICAgICAgICAgIHJldHVybiBUX0RPU1dBUChkd0Zvcm1hdCkgPyBUWVBFX0tZTUM5XzggOiBUWVBFX0NNWUs5Xzg7CisgICAgICAgIGNhc2UgY21zU2lnTUNIQURhdGE6CisgICAgICAgICAgICByZXR1cm4gVF9ET1NXQVAoZHdGb3JtYXQpID8gVFlQRV9LWU1DMTBfOCA6IFRZUEVfQ01ZSzEwXzg7CisgICAgICAgIGNhc2UgY21zU2lnTUNIQkRhdGE6CisgICAgICAgICAgICByZXR1cm4gVF9ET1NXQVAoZHdGb3JtYXQpID8gVFlQRV9LWU1DMTFfOCA6IFRZUEVfQ01ZSzExXzg7CisgICAgICAgIGNhc2UgY21zU2lnTUNIQ0RhdGE6CisgICAgICAgICAgICByZXR1cm4gVF9ET1NXQVAoZHdGb3JtYXQpID8gVFlQRV9LWU1DMTJfOCA6IFRZUEVfQ01ZSzEyXzg7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CitjbGFzcyBDRlhfSWNjUHJvZmlsZUNhY2hlIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBDRlhfSWNjUHJvZmlsZUNhY2hlKCk7CisgICAgfkNGWF9JY2NQcm9maWxlQ2FjaGUoKTsKKyAgICBGWF9MUFZPSUQgbV9wUHJvZmlsZTsKKyAgICBGWF9EV09SRAltX2R3UmF0ZTsKK3Byb3RlY3RlZDoKKyAgICB2b2lkCVB1cmdlKCk7Cit9OworQ0ZYX0ljY1Byb2ZpbGVDYWNoZTo6Q0ZYX0ljY1Byb2ZpbGVDYWNoZSgpCit7CisgICAgbV9wUHJvZmlsZSA9IE5VTEw7CisgICAgbV9kd1JhdGUgPSAxOworfQorQ0ZYX0ljY1Byb2ZpbGVDYWNoZTo6fkNGWF9JY2NQcm9maWxlQ2FjaGUoKQoreworICAgIGlmIChtX3BQcm9maWxlKSB7CisgICAgICAgIGNtc0Nsb3NlUHJvZmlsZShtX3BQcm9maWxlKTsKKyAgICB9Cit9Cit2b2lkIENGWF9JY2NQcm9maWxlQ2FjaGU6OlB1cmdlKCkKK3sKK30KK2NsYXNzIENGWF9JY2NUcmFuc2Zvcm1DYWNoZSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ0ZYX0ljY1RyYW5zZm9ybUNhY2hlKENMY21zQ21tKiBwQ21tID0gTlVMTCk7CisgICAgfkNGWF9JY2NUcmFuc2Zvcm1DYWNoZSgpOworICAgIEZYX0xQVk9JRAltX3BJY2NUcmFuc2Zvcm07CisgICAgRlhfRFdPUkQJCW1fZHdSYXRlOworICAgIENMY21zQ21tKgkJbV9wQ21tOworcHJvdGVjdGVkOgorICAgIHZvaWQJCQlQdXJnZSgpOworfTsKK0NGWF9JY2NUcmFuc2Zvcm1DYWNoZTo6Q0ZYX0ljY1RyYW5zZm9ybUNhY2hlKENMY21zQ21tKiBwQ21tKQoreworICAgIG1fcEljY1RyYW5zZm9ybSA9IE5VTEw7CisgICAgbV9kd1JhdGUgPSAxOworICAgIG1fcENtbSA9IHBDbW07Cit9CitDRlhfSWNjVHJhbnNmb3JtQ2FjaGU6On5DRlhfSWNjVHJhbnNmb3JtQ2FjaGUoKQoreworICAgIGlmIChtX3BJY2NUcmFuc2Zvcm0pIHsKKyAgICAgICAgY21zRGVsZXRlVHJhbnNmb3JtKG1fcEljY1RyYW5zZm9ybSk7CisgICAgfQorICAgIGlmIChtX3BDbW0pIHsKKyAgICAgICAgRlhfRnJlZShtX3BDbW0pOworICAgIH0KK30KK3ZvaWQgQ0ZYX0ljY1RyYW5zZm9ybUNhY2hlOjpQdXJnZSgpCit7Cit9CitjbGFzcyBDRlhfQnl0ZVN0cmluZ0tleSA6IHB1YmxpYyBDRlhfQmluYXJ5QnVmCit7CitwdWJsaWM6CisgICAgQ0ZYX0J5dGVTdHJpbmdLZXkoKSA6IENGWF9CaW5hcnlCdWYoKSB7fQorICAgIENGWF9CeXRlU3RyaW5nS2V5JgkJb3BlcmF0b3IgPDwgKEZYX0RXT1JEIGkpOworfTsKK0NGWF9CeXRlU3RyaW5nS2V5JiBDRlhfQnl0ZVN0cmluZ0tleTo6b3BlcmF0b3IgPDwgKEZYX0RXT1JEIGkpCit7CisgICAgQXBwZW5kQmxvY2soJmksIHNpemVvZihGWF9EV09SRCkpOworICAgIHJldHVybiAqdGhpczsKK30KK0ZYX0xQVk9JRCBDQ29kZWNfSWNjTW9kdWxlOjpDcmVhdGVQcm9maWxlKElDb2RlY19JY2NNb2R1bGU6OkljY1BhcmFtKiBwSWNjUGFyYW0sIEljY19DTEFTUyBpYywgQ0ZYX0JpbmFyeUJ1ZiogcFRyYW5zZm9ybUtleSkKK3sKKyAgICBDRlhfSWNjUHJvZmlsZUNhY2hlKiBwQ2FjaGUgPSBOVUxMOworICAgIENGWF9CeXRlU3RyaW5nS2V5IGtleTsKKyAgICBDRlhfQnl0ZVN0cmluZyB0ZXh0OworICAgIGtleSA8PCBwSWNjUGFyYW0tPkNvbG9yU3BhY2UgPDwgKHBJY2NQYXJhbS0+ZHdQcm9maWxlVHlwZSB8IGljIDw8IDgpOworICAgIEZYX0JZVEUgSURbMTZdOworICAgIHN3aXRjaCAocEljY1BhcmFtLT5kd1Byb2ZpbGVUeXBlKSB7CisgICAgICAgIGNhc2UgSWNjX1BBUkFNVFlQRV9OT05FOgorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGNhc2UgSWNjX1BBUkFNVFlQRV9CVUZGRVI6CisgICAgICAgICAgICBNRDVDb21wdXRlSUQocEljY1BhcmFtLT5wUHJvZmlsZURhdGEsIHBJY2NQYXJhbS0+ZHdQcm9maWxlU2l6ZSwgSUQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSWNjX1BBUkFNVFlQRV9QQVJBTToKKyAgICAgICAgICAgIEZYU1lTX21lbXNldDMyKElELCAwLCAxNik7CisgICAgICAgICAgICBzd2l0Y2ggKHBJY2NQYXJhbS0+Q29sb3JTcGFjZSkgeworICAgICAgICAgICAgICAgIGNhc2UgSWNjQ1NfR3JheToKKyAgICAgICAgICAgICAgICAgICAgdGV4dC5Gb3JtYXQoIiVsZiIsIHBJY2NQYXJhbS0+R2FtbWEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBNRDVDb21wdXRlSUQodGV4dC5HZXRCdWZmZXIoMCksIHRleHQuR2V0TGVuZ3RoKCksIElEKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgOworICAgIH0KKyAgICBrZXkuQXBwZW5kQmxvY2soSUQsIDE2KTsKKyAgICBDRlhfQnl0ZVN0cmluZyBQcm9maWxlS2V5KGtleS5HZXRCdWZmZXIoKSwga2V5LkdldFNpemUoKSk7CisgICAgQVNTRVJUKHBUcmFuc2Zvcm1LZXkpOworICAgIHBUcmFuc2Zvcm1LZXktPkFwcGVuZEJsb2NrKFByb2ZpbGVLZXkuR2V0QnVmZmVyKDApLCBQcm9maWxlS2V5LkdldExlbmd0aCgpKTsKKyAgICBpZiAoIW1fTWFwUHJvZmlsZS5Mb29rdXAoUHJvZmlsZUtleSwgKEZYX0xQVk9JRCYpcENhY2hlKSkgeworICAgICAgICBwQ2FjaGUgPSBGWF9ORVcgQ0ZYX0ljY1Byb2ZpbGVDYWNoZTsKKyAgICAgICAgaWYgKHBDYWNoZSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKHBJY2NQYXJhbS0+ZHdQcm9maWxlVHlwZSkgeworICAgICAgICAgICAgY2FzZSBJY2NfUEFSQU1UWVBFX0JVRkZFUjoKKyAgICAgICAgICAgICAgICBwQ2FjaGUtPm1fcFByb2ZpbGUgPSBjbXNPcGVuUHJvZmlsZUZyb21NZW0ocEljY1BhcmFtLT5wUHJvZmlsZURhdGEsIHBJY2NQYXJhbS0+ZHdQcm9maWxlU2l6ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEljY19QQVJBTVRZUEVfUEFSQU06CisgICAgICAgICAgICAgICAgc3dpdGNoIChwSWNjUGFyYW0tPkNvbG9yU3BhY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJY2NDU19SZ2I6CisgICAgICAgICAgICAgICAgICAgICAgICBwQ2FjaGUtPm1fcFByb2ZpbGUgPSBjbXNDcmVhdGVfc1JHQlByb2ZpbGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEljY0NTX0dyYXk6CisgICAgICAgICAgICAgICAgICAgICAgICBwQ2FjaGUtPm1fcFByb2ZpbGUgPSBDcmVhdGVQcm9maWxlX0dyYXkocEljY1BhcmFtLT5HYW1tYSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbV9NYXBQcm9maWxlLlNldEF0KFByb2ZpbGVLZXksIHBDYWNoZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcENhY2hlLT5tX2R3UmF0ZSsrOworICAgIH0KKyAgICByZXR1cm4gcENhY2hlLT5tX3BQcm9maWxlOworfQorRlhfTFBWT0lEIENDb2RlY19JY2NNb2R1bGU6OkNyZWF0ZVRyYW5zZm9ybShJQ29kZWNfSWNjTW9kdWxlOjpJY2NQYXJhbSogcElucHV0UGFyYW0sCisgICAgICAgIElDb2RlY19JY2NNb2R1bGU6OkljY1BhcmFtKiBwT3V0cHV0UGFyYW0sCisgICAgICAgIElDb2RlY19JY2NNb2R1bGU6OkljY1BhcmFtKiBwUHJvb2ZQYXJhbSwKKyAgICAgICAgRlhfRFdPUkQgZHdJbnRlbnQsIEZYX0RXT1JEIGR3RmxhZywgRlhfRFdPUkQgZHdQcmZJbnRlbnQsIEZYX0RXT1JEIGR3UHJmRmxhZykKK3sKKyAgICBDTGNtc0NtbSogcENtbSA9IE5VTEw7CisgICAgQVNTRVJUKHBJbnB1dFBhcmFtICYmIHBPdXRwdXRQYXJhbSk7CisgICAgQ0ZYX0J5dGVTdHJpbmdLZXkga2V5OworICAgIEZYX0xQVk9JRCBwSW5wdXRQcm9maWxlID0gQ3JlYXRlUHJvZmlsZShwSW5wdXRQYXJhbSwgSWNjX0NMQVNTX0lOUFVULCAma2V5KTsKKyAgICBpZiAocElucHV0UHJvZmlsZSA9PSBOVUxMKQl7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBGWF9MUFZPSUQgcE91dHB1dFByb2ZpbGUgPSBDcmVhdGVQcm9maWxlKHBPdXRwdXRQYXJhbSwgSWNjX0NMQVNTX09VVFBVVCwgJmtleSk7CisgICAgaWYgKHBPdXRwdXRQcm9maWxlID09IE5VTEwpCXsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIEZYX0RXT1JEIGR3SW5wdXRQcm9maWxlVHlwZSA9IFRyYW5zZmVyUHJvZmlsZVR5cGUocElucHV0UHJvZmlsZSwgcElucHV0UGFyYW0tPmR3Rm9ybWF0KTsKKyAgICBGWF9EV09SRCBkd091dHB1dFByb2ZpbGVUeXBlID0gVHJhbnNmZXJQcm9maWxlVHlwZShwT3V0cHV0UHJvZmlsZSwgcE91dHB1dFBhcmFtLT5kd0Zvcm1hdCk7CisgICAgaWYgKGR3SW5wdXRQcm9maWxlVHlwZSA9PSAwIHx8IGR3T3V0cHV0UHJvZmlsZVR5cGUgPT0gMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRlhfTFBWT0lEIHBQcm9vZlByb2ZpbGUgPSBOVUxMOworICAgIGlmIChwUHJvb2ZQYXJhbSkgeworICAgICAgICBwUHJvb2ZQcm9maWxlID0gQ3JlYXRlUHJvZmlsZShwUHJvb2ZQYXJhbSwgSWNjX0NMQVNTX1BST09GLCAma2V5KTsKKyAgICB9CisgICAga2V5IDw8IGR3SW5wdXRQcm9maWxlVHlwZSA8PCBkd091dHB1dFByb2ZpbGVUeXBlIDw8IGR3SW50ZW50IDw8IGR3RmxhZyA8PCAocFByb29mUHJvZmlsZSAhPSBOVUxMKSA8PCBkd1ByZkludGVudCA8PCBkd1ByZkZsYWc7CisgICAgQ0ZYX0J5dGVTdHJpbmdDIFRyYW5zZm9ybUtleShrZXkuR2V0QnVmZmVyKCksIGtleS5HZXRTaXplKCkpOworICAgIENGWF9JY2NUcmFuc2Zvcm1DYWNoZSogcFRyYW5zZm9ybUNhY2hlOworICAgIGlmICghbV9NYXBUcmFuZm9ybS5Mb29rdXAoVHJhbnNmb3JtS2V5LCAoRlhfTFBWT0lEJilwVHJhbnNmb3JtQ2FjaGUpKSB7CisgICAgICAgIHBDbW0gPSBGWF9BbGxvYyhDTGNtc0NtbSwgMSk7CisgICAgICAgIGlmIChwQ21tID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHBDbW0tPm1fblNyY0NvbXBvbmVudHMgPSBUX0NIQU5ORUxTKGR3SW5wdXRQcm9maWxlVHlwZSk7CisgICAgICAgIHBDbW0tPm1fbkRzdENvbXBvbmVudHMgPSBUX0NIQU5ORUxTKGR3T3V0cHV0UHJvZmlsZVR5cGUpOworICAgICAgICBwQ21tLT5tX2JMYWIgPSBUX0NPTE9SU1BBQ0UocElucHV0UGFyYW0tPmR3Rm9ybWF0KSA9PSBQVF9MYWI7CisgICAgICAgIHBUcmFuc2Zvcm1DYWNoZSA9IEZYX05FVyBDRlhfSWNjVHJhbnNmb3JtQ2FjaGUocENtbSk7CisgICAgICAgIGlmIChwVHJhbnNmb3JtQ2FjaGUgPT0gTlVMTCkgeworICAgICAgICAgICAgRlhfRnJlZShwQ21tKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmIChwUHJvb2ZQcm9maWxlKSB7CisgICAgICAgICAgICBwVHJhbnNmb3JtQ2FjaGUtPm1fcEljY1RyYW5zZm9ybSA9IGNtc0NyZWF0ZVByb29maW5nVHJhbnNmb3JtKHBJbnB1dFByb2ZpbGUsIGR3SW5wdXRQcm9maWxlVHlwZSwgcE91dHB1dFByb2ZpbGUsIGR3T3V0cHV0UHJvZmlsZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBQcm9vZlByb2ZpbGUsIGR3SW50ZW50LCBkd1ByZkludGVudCwgZHdQcmZGbGFnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBUcmFuc2Zvcm1DYWNoZS0+bV9wSWNjVHJhbnNmb3JtID0gY21zQ3JlYXRlVHJhbnNmb3JtKHBJbnB1dFByb2ZpbGUsIGR3SW5wdXRQcm9maWxlVHlwZSwgcE91dHB1dFByb2ZpbGUsIGR3T3V0cHV0UHJvZmlsZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR3SW50ZW50LCBkd0ZsYWcpOworICAgICAgICB9CisgICAgICAgIHBDbW0tPm1faFRyYW5zZm9ybSA9IHBUcmFuc2Zvcm1DYWNoZS0+bV9wSWNjVHJhbnNmb3JtOworICAgICAgICBtX01hcFRyYW5mb3JtLlNldEF0KFRyYW5zZm9ybUtleSwgcFRyYW5zZm9ybUNhY2hlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwVHJhbnNmb3JtQ2FjaGUtPm1fZHdSYXRlKys7CisgICAgfQorICAgIHJldHVybiBwVHJhbnNmb3JtQ2FjaGUtPm1fcENtbTsKK30KK0NDb2RlY19JY2NNb2R1bGU6On5DQ29kZWNfSWNjTW9kdWxlKCkKK3sKKyAgICBGWF9QT1NJVElPTiBwb3MgPSBtX01hcFByb2ZpbGUuR2V0U3RhcnRQb3NpdGlvbigpOworICAgIENGWF9CeXRlU3RyaW5nIGtleTsKKyAgICBDRlhfSWNjUHJvZmlsZUNhY2hlKiBwUHJvZmlsZUNhY2hlOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgbV9NYXBQcm9maWxlLkdldE5leHRBc3NvYyhwb3MsIGtleSwgKEZYX0xQVk9JRCYpcFByb2ZpbGVDYWNoZSk7CisgICAgICAgIGlmIChwUHJvZmlsZUNhY2hlKSB7CisgICAgICAgICAgICBkZWxldGUgcFByb2ZpbGVDYWNoZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwb3MgPSBtX01hcFRyYW5mb3JtLkdldFN0YXJ0UG9zaXRpb24oKTsKKyAgICBDRlhfSWNjVHJhbnNmb3JtQ2FjaGUqIHBUcmFuc2Zvcm1DYWNoZTsKKyAgICB3aGlsZSAocG9zKSB7CisgICAgICAgIG1fTWFwVHJhbmZvcm0uR2V0TmV4dEFzc29jKHBvcywga2V5LCAoRlhfTFBWT0lEJilwVHJhbnNmb3JtQ2FjaGUpOworICAgICAgICBpZiAocFRyYW5zZm9ybUNhY2hlKSB7CisgICAgICAgICAgICBkZWxldGUgcFRyYW5zZm9ybUNhY2hlOworICAgICAgICB9CisgICAgfQorfQordm9pZCogQ0NvZGVjX0ljY01vZHVsZTo6Q3JlYXRlVHJhbnNmb3JtX3NSR0IoRlhfTFBDQllURSBwUHJvZmlsZURhdGEsIHVuc2lnbmVkIGludCBkd1Byb2ZpbGVTaXplLCBpbnQgbkNvbXBvbmVudHMsIGludCBpbnRlbnQsIEZYX0RXT1JEIGR3U3JjRm9ybWF0KQoreworICAgIHJldHVybiBJY2NMaWJfQ3JlYXRlVHJhbnNmb3JtX3NSR0IocFByb2ZpbGVEYXRhLCBkd1Byb2ZpbGVTaXplLCBuQ29tcG9uZW50cywgaW50ZW50LCBkd1NyY0Zvcm1hdCk7Cit9Cit2b2lkKiBDQ29kZWNfSWNjTW9kdWxlOjpDcmVhdGVUcmFuc2Zvcm1fQ01ZSyhGWF9MUENCWVRFIHBTcmNQcm9maWxlRGF0YSwgdW5zaWduZWQgaW50IGR3U3JjUHJvZmlsZVNpemUsIGludCBuU3JjQ29tcG9uZW50cywKKyAgICAgICAgRlhfTFBDQllURSBwRHN0UHJvZmlsZURhdGEsIHVuc2lnbmVkIGludCBkd0RzdFByb2ZpbGVTaXplLCBpbnQgaW50ZW50LAorICAgICAgICBGWF9EV09SRCBkd1NyY0Zvcm1hdCAsIEZYX0RXT1JEIGR3RHN0Rm9ybWF0KQoreworICAgIHJldHVybiBJY2NMaWJfQ3JlYXRlVHJhbnNmb3JtKHBTcmNQcm9maWxlRGF0YSwgZHdTcmNQcm9maWxlU2l6ZSwgblNyY0NvbXBvbmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcERzdFByb2ZpbGVEYXRhLCBkd0RzdFByb2ZpbGVTaXplLCA0LCBpbnRlbnQsIGR3U3JjRm9ybWF0LCBkd0RzdEZvcm1hdCk7Cit9Cit2b2lkIENDb2RlY19JY2NNb2R1bGU6OkRlc3Ryb3lUcmFuc2Zvcm0odm9pZCogcFRyYW5zZm9ybSkKK3sKKyAgICBJY2NMaWJfRGVzdHJveVRyYW5zZm9ybShwVHJhbnNmb3JtKTsKK30KK3ZvaWQgQ0NvZGVjX0ljY01vZHVsZTo6VHJhbnNsYXRlKHZvaWQqIHBUcmFuc2Zvcm0sIEZYX0ZMT0FUKiBwU3JjVmFsdWVzLCBGWF9GTE9BVCogcERlc3RWYWx1ZXMpCit7CisgICAgSWNjTGliX1RyYW5zbGF0ZShwVHJhbnNmb3JtLCBwU3JjVmFsdWVzLCBwRGVzdFZhbHVlcyk7Cit9Cit2b2lkIENDb2RlY19JY2NNb2R1bGU6OlRyYW5zbGF0ZVNjYW5saW5lKHZvaWQqIHBUcmFuc2Zvcm0sIEZYX0xQQllURSBwRGVzdCwgRlhfTFBDQllURSBwU3JjLCBpbnQgcGl4ZWxzKQoreworICAgIEljY0xpYl9UcmFuc2xhdGVJbWFnZShwVHJhbnNmb3JtLCBwRGVzdCwgcFNyYywgcGl4ZWxzKTsKK30KK2NvbnN0IEZYX0JZVEUgZ19DTVlLU2FtcGxlc1s4MSAqIDgxICogM10gPSB7CisgICAgMjU1LCAyNTUsIDI1NSwgMjI1LCAyMjYsIDIyOCwgMTk5LCAyMDAsIDIwMiwgMTczLCAxNzQsIDE3OCwgMTQ3LCAxNDksIDE1MiwgMTIzLCAxMjUsIDEyOCwgIDk5LCA5OSwgMTAyLCAgNjksIDcwLCA3MSwgIDM0LCAzMCwgMzEsCisgICAgMjU1LCAyNTMsIDIyOSwgMjI2LCAyMjQsIDIwMywgMjAwLCAxOTksIDE4MiwgMTczLCAxNzMsIDE1OCwgMTQ5LCAxNDgsIDEzNSwgMTI1LCAxMjQsIDExMywgIDk5LCA5OSwgOTAsICA3MCwgNjksIDYzLCAgMzMsIDI5LCAyNCwKKyAgICAyNTUsIDI1MSwgMjA0LCAyMjgsIDIyMywgMTgyLCAyMDEsIDE5OCwgMTYzLCAxNzQsIDE3MiwgMTQyLCAxNTAsIDE0NywgMTIyLCAxMjUsIDEyMywgMTAxLCAgOTksIDk4LCA4MCwgIDcwLCA2OCwgNTQsICAzMiwgMjgsIDE2LAorICAgIDI1NSwgMjQ5LCAxNzksIDIzMCwgMjIyLCAxNjAsIDIwMywgMTk3LCAxNDQsIDE3NCwgMTcwLCAxMjQsIDE1MCwgMTQ1LCAxMDUsIDEyNSwgMTIyLCA4OCwgIDk5LCA5NywgNjksICA3MCwgNjgsIDQ2LCAgMzEsIDI4LCAgNiwKKyAgICAyNTUsIDI0NywgMTU0LCAyMjksIDIyMCwgMTM4LCAyMDMsIDE5NSwgMTIyLCAxNzYsIDE2OSwgMTA3LCAxNTAsIDE0NSwgOTEsIDEyNSwgMTIxLCA3NCwgMTAwLCA5NiwgNTcsICA3MCwgNjcsIDM1LCAgMjksIDI2LCAgMCwKKyAgICAyNTUsIDI0NiwgMTI4LCAyMzEsIDIxNywgMTE0LCAyMDUsIDE5NCwgMTAxLCAxNzYsIDE2NywgODgsIDE1MCwgMTQ0LCA3NSwgMTI1LCAxMjAsIDYwLCAxMDAsIDk2LCA0NCwgIDcwLCA2NiwgMjQsICAyOCwgMjYsICAwLAorICAgIDI1NSwgMjQ0LCA5NiwgMjMxLCAyMTcsIDg3LCAyMDMsIDE5MiwgNzgsIDE3NSwgMTY3LCA2NiwgMTUwLCAxNDMsIDU2LCAxMjUsIDExOSwgNDMsIDEwMCwgOTUsIDI5LCAgNjksIDY2LCAgNywgIDI2LCAyNiwgIDAsCisgICAgMjU1LCAyNDMsIDUxLCAyMzIsIDIxNSwgNTEsIDIwNCwgMTkxLCA0MywgMTc2LCAxNjUsIDM4LCAxNTAsIDE0MiwgMjgsIDEyNSwgMTE4LCAxNywgIDk5LCA5NCwgIDAsICA2OCwgNjUsICAwLCAgMjQsIDI1LCAgMCwKKyAgICAyNTUsIDI0MSwgIDAsIDIzMSwgMjE1LCAgMCwgMjAzLCAxOTAsICAwLCAxNzYsIDE2NCwgIDAsIDE1MCwgMTQxLCAgMCwgMTI2LCAxMTcsICAwLCAgOTksIDkzLCAgMCwgIDY4LCA2NSwgIDAsICAyNCwgMjUsICAwLAorICAgIDI1MiwgMjI4LCAyMzgsIDIyMiwgMjAxLCAyMTEsIDE5NywgMTgwLCAxOTAsIDE3MSwgMTU2LCAxNjYsIDE0NywgMTMzLCAxNDMsIDEyMywgMTExLCAxMTksICA5OSwgODgsIDk0LCAgNzEsIDYxLCA2NiwgIDM0LCAyMiwgMjYsCisgICAgMjU0LCAyMjYsIDIxMywgMjI0LCAyMDEsIDE5MSwgMTk5LCAxNzksIDE3MSwgMTcyLCAxNTUsIDE0OCwgMTQ3LCAxMzMsIDEyOCwgMTIzLCAxMTAsIDEwNiwgIDk4LCA4NywgODMsICA3MCwgNTksIDU3LCAgMzMsIDIxLCAxOCwKKyAgICAyNTQsIDIyNCwgMTkxLCAyMjQsIDE5OSwgMTcyLCAyMDAsIDE3NywgMTUzLCAxNzMsIDE1NCwgMTMzLCAxNDcsIDEzMiwgMTE1LCAxMjMsIDEwOSwgOTQsICA5OCwgODYsIDc0LCAgNzAsIDU5LCA0OSwgIDMyLCAyMSwgIDksCisgICAgMjU1LCAyMjIsIDE2OCwgMjI3LCAxOTgsIDE1MCwgMjAwLCAxNzUsIDEzNSwgMTczLCAxNTMsIDExOCwgMTQ4LCAxMzAsIDk5LCAxMjMsIDEwOSwgODIsICA5OCwgODYsIDY0LCAgNjksIDU4LCA0MCwgIDMxLCAxOSwgIDAsCisgICAgMjU1LCAyMjEsIDE0NSwgMjI3LCAxOTYsIDEyOSwgMjAxLCAxNzQsIDExNSwgMTczLCAxNTEsIDk5LCAxNDgsIDEyOSwgODUsIDEyNCwgMTA4LCA2OSwgIDk4LCA4NSwgNTIsICA2OSwgNTgsIDMwLCAgMzAsIDE5LCAgMCwKKyAgICAyNTUsIDIxOSwgMTIxLCAyMjcsIDE5NSwgMTA5LCAyMDEsIDE3NCwgOTcsIDE3NCwgMTUwLCA4MywgMTQ4LCAxMjksIDcwLCAxMjQsIDEwNywgNTUsICA5OCwgODQsIDQwLCAgNjksIDU4LCAxOSwgIDI4LCAxOCwgIDAsCisgICAgMjU1LCAyMTgsIDkyLCAyMjksIDE5NCwgODIsIDIwMiwgMTczLCA3NSwgMTc0LCAxNTAsIDYzLCAxNDksIDEyOCwgNTEsIDEyNCwgMTA2LCAzOSwgIDk4LCA4NCwgMjQsICA2OCwgNTcsICAzLCAgMjYsIDE4LCAgMCwKKyAgICAyNTUsIDIxNywgNTQsIDIyOCwgMTkzLCA1MiwgMjAxLCAxNzIsIDQ2LCAxNzQsIDE0OCwgMzYsIDE0OCwgMTI3LCAyNywgMTIzLCAxMDUsIDE0LCAgOTgsIDgzLCAgMCwgIDY4LCA1NiwgIDAsICAyNSwgMTgsICAwLAorICAgIDI1NSwgMjE2LCAgMCwgMjI5LCAxOTIsICAyLCAyMDIsIDE3MSwgIDQsIDE3MywgMTQ4LCAgMCwgMTQ4LCAxMjYsICAwLCAxMjQsIDEwNSwgIDAsICA5OCwgODMsICAwLCAgNjgsIDU2LCAgMCwgIDI0LCAxNywgIDAsCisgICAgMjQ5LCAyMDQsIDIyMywgMjE5LCAxODEsIDE5OSwgMTk1LCAxNjAsIDE3OCwgMTcwLCAxNDAsIDE1NiwgMTQ2LCAxMTksIDEzNCwgMTIzLCA5OSwgMTEyLCAgOTgsIDc3LCA4OCwgIDcwLCA1MiwgNjEsICAzNCwgMTEsIDIwLAorICAgIDI1MCwgMjAxLCAyMDAsIDIyMSwgMTgwLCAxNzgsIDE5NywgMTU5LCAxNjEsIDE3MSwgMTM5LCAxMzksIDE0NywgMTE5LCAxMjAsIDEyMywgOTgsIDk5LCAgOTgsIDc3LCA3OCwgIDY5LCA1MSwgNTIsICAzNCwgMTEsIDEwLAorICAgIDI1MiwgMjAxLCAxODAsIDIyMywgMTc5LCAxNjIsIDE5NywgMTU5LCAxNDQsIDE3MCwgMTM4LCAxMjUsIDE0NiwgMTE3LCAxMDcsIDEyMiwgOTcsIDg5LCAgOTgsIDc2LCA2OSwgIDY5LCA1MCwgNDQsICAzMiwgMTEsICAyLAorICAgIDI1MiwgMTk5LCAxNTgsIDIyMiwgMTc3LCAxNDMsIDE5OSwgMTU4LCAxMjcsIDE3MSwgMTM3LCAxMTAsIDE0NywgMTE3LCA5MywgMTIyLCA5NiwgNzYsICA5NywgNzUsIDU4LCAgNjksIDUwLCAzNiwgIDMyLCAxMCwgIDAsCisgICAgMjUzLCAxOTgsIDEzNywgMjIzLCAxNzcsIDEyMywgMTk4LCAxNTYsIDExMCwgMTcxLCAxMzYsIDk1LCAxNDYsIDExNiwgODAsIDEyMiwgOTYsIDY1LCAgOTcsIDc1LCA0NywgIDY5LCA1MCwgMjUsICAzMCwgMTAsICAwLAorICAgIDI1NCwgMTk3LCAxMTUsIDIyNSwgMTc1LCAxMDQsIDE5OCwgMTU2LCA5MiwgMTcyLCAxMzUsIDc5LCAxNDcsIDExNSwgNjYsIDEyMywgOTUsIDUyLCAgOTgsIDc0LCAzNywgIDY5LCA0OSwgMTUsICAyOSwgMTAsICAwLAorICAgIDI1NCwgMTk2LCA4OSwgMjI0LCAxNzUsIDgwLCAxOTksIDE1NCwgNzAsIDE3MiwgMTM0LCA1OSwgMTQ2LCAxMTQsIDQ4LCAxMjIsIDk1LCAzNiwgIDk3LCA3NCwgMjEsICA2OCwgNDksICAwLCAgMjcsICA5LCAgMCwKKyAgICAyNTUsIDE5NSwgNTcsIDIyNSwgMTczLCA1MiwgMTk4LCAxNTQsIDQ0LCAxNzIsIDEzMywgMzYsIDE0NywgMTEzLCAyNiwgMTIzLCA5NCwgMTQsICA5OCwgNzQsICAwLCAgNjgsIDQ5LCAgMCwgIDI2LCAxMCwgIDAsCisgICAgMjU0LCAxOTQsIDE1LCAyMjUsIDE3MiwgMTIsIDE5OCwgMTUzLCAgNywgMTcyLCAxMzIsICAzLCAxNDYsIDExMywgIDAsIDEyMywgOTMsICAwLCAgOTgsIDczLCAgMCwgIDY4LCA0OSwgIDAsICAyNiwgIDksICAwLAorICAgIDI0NiwgMTc4LCAyMDksIDIxOCwgMTU5LCAxODYsIDE5NCwgMTQwLCAxNjYsIDE2OCwgMTIyLCAxNDUsIDE0NCwgMTA0LCAxMjUsIDEyMSwgODUsIDEwMywgIDk3LCA2NSwgODEsICA2OSwgNDEsIDU1LCAgMzQsICAwLCAxMiwKKyAgICAyNDgsIDE3NiwgMTg2LCAyMTksIDE1NywgMTY2LCAxOTUsIDEzOSwgMTQ5LCAxNjgsIDEyMSwgMTMwLCAxNDQsIDEwMywgMTExLCAxMjEsIDg1LCA5MSwgIDk3LCA2NSwgNzEsICA2OSwgNDEsIDQ2LCAgMzQsICAwLCAgNCwKKyAgICAyNDksIDE3NSwgMTY4LCAyMjAsIDE1NiwgMTUwLCAxOTYsIDEzOSwgMTM1LCAxNjksIDEyMSwgMTE2LCAxNDQsIDEwMywgMTAwLCAxMjIsIDg0LCA4MywgIDk4LCA2NSwgNjMsICA3MCwgNDEsIDM5LCAgMzMsICAwLCAgMCwKKyAgICAyNDksIDE3NSwgMTQ4LCAyMjAsIDE1NSwgMTMzLCAxOTYsIDEzOCwgMTE5LCAxNjksIDEyMCwgMTAzLCAxNDUsIDEwMSwgODcsIDEyMSwgODMsIDcxLCAgOTcsIDY1LCA1NCwgIDY5LCA0MSwgMzEsICAzMiwgIDAsICAwLAorICAgIDI0OSwgMTczLCAxMjgsIDIyMiwgMTU0LCAxMTUsIDE5NSwgMTM3LCAxMDIsIDE3MCwgMTE5LCA4OCwgMTQ1LCAxMDEsIDc0LCAxMjIsIDgzLCA1OSwgIDk3LCA2NCwgNDMsICA2OCwgNDAsIDIwLCAgMzAsICAwLCAgMCwKKyAgICAyNTAsIDE3MiwgMTA4LCAyMjEsIDE1NCwgOTgsIDE5NSwgMTM2LCA4NiwgMTcwLCAxMTgsIDczLCAxNDUsIDEwMCwgNjEsIDEyMiwgODIsIDQ4LCAgOTcsIDYzLCAzMiwgIDY5LCA0MCwgMTEsICAyOCwgIDAsICAwLAorICAgIDI1MCwgMTcxLCA4NSwgMjIxLCAxNTMsIDc2LCAxOTYsIDEzNiwgNjcsIDE3MCwgMTE3LCA1NiwgMTQ1LCA5OSwgNDQsIDEyMSwgODIsIDMzLCAgOTcsIDYzLCAxNywgIDY4LCA0MCwgIDAsICAyOCwgIDAsICAwLAorICAgIDI1MSwgMTcxLCA1OCwgMjIyLCAxNTIsIDUwLCAxOTcsIDEzNSwgNDMsIDE2OSwgMTE3LCAzNCwgMTQ2LCA5OSwgMjUsIDEyMSwgODEsIDEwLCAgOTYsIDYzLCAgMCwgIDY4LCA0MCwgIDAsICAyNywgIDAsICAwLAorICAgIDI1MCwgMTcwLCAyNiwgMjIyLCAxNTEsIDE5LCAxOTYsIDEzNCwgMTMsIDE2OSwgMTE2LCAgNCwgMTQ1LCA5OSwgIDAsIDEyMiwgODEsICAwLCAgOTcsIDYzLCAgMCwgIDY3LCA0MCwgIDAsICAyNiwgIDAsICAwLAorICAgIDI0NCwgMTUzLCAxOTQsIDIxNSwgMTM2LCAxNzMsIDE5MiwgMTIxLCAxNTUsIDE2NywgMTA0LCAxMzUsIDE0MywgODksIDExNSwgMTIxLCA3MiwgOTYsICA5NywgNTQsIDc1LCAgNzAsIDMxLCA0OSwgIDM0LCAgMCwgIDYsCisgICAgMjQ1LCAxNTMsIDE3MywgMjE2LCAxMzYsIDE1NSwgMTkyLCAxMjAsIDEzOCwgMTY3LCAxMDQsIDEyMSwgMTQ0LCA4OCwgMTAzLCAxMjEsIDcxLCA4NSwgIDk3LCA1NCwgNjYsICA2OSwgMzEsIDQyLCAgMzQsICAwLCAgMCwKKyAgICAyNDYsIDE1MiwgMTU3LCAyMTcsIDEzNSwgMTQwLCAxOTMsIDEyMCwgMTI2LCAxNjcsIDEwMywgMTA5LCAxNDMsIDg4LCA5MiwgMTIxLCA3MiwgNzYsICA5NywgNTQsIDU4LCAgNjksIDMxLCAzNSwgIDMzLCAgMCwgIDAsCisgICAgMjQ1LCAxNTAsIDEzOSwgMjE4LCAxMzQsIDEyNSwgMTkzLCAxMTksIDExMSwgMTY3LCAxMDMsIDk2LCAxNDQsIDg3LCA4MCwgMTIxLCA3MSwgNjYsICA5NiwgNTMsIDQ5LCAgNjgsIDMxLCAyNiwgIDMyLCAgMCwgIDAsCisgICAgMjQ2LCAxNTEsIDEyMiwgMjE4LCAxMzMsIDEwOCwgMTk0LCAxMTgsIDk2LCAxNjgsIDEwMiwgODEsIDE0NCwgODYsIDY5LCAxMjAsIDcxLCA1NSwgIDk1LCA1MywgMzksICA2OCwgMzAsIDE3LCAgMzEsICAwLCAgMCwKKyAgICAyNDgsIDE1MCwgMTAzLCAyMTgsIDEzMywgOTEsIDE5MywgMTE4LCA4MSwgMTY4LCAxMDIsIDY5LCAxNDMsIDg2LCA1NiwgMTIwLCA3MCwgNDMsICA5NiwgNTMsIDI4LCAgNjgsIDMxLCAgNiwgIDI5LCAgMCwgIDAsCisgICAgMjQ3LCAxNDksIDgxLCAyMTgsIDEzMiwgNzIsIDE5NCwgMTE3LCA2MiwgMTY4LCAxMDEsIDUyLCAxNDQsIDg2LCA0MiwgMTIxLCA3MCwgMjksICA5NiwgNTIsIDEzLCAgNjgsIDMwLCAgMCwgIDI4LCAgMCwgIDAsCisgICAgMjQ3LCAxNDgsIDU1LCAyMTksIDEzMSwgNTAsIDE5NCwgMTE3LCA0MywgMTY3LCAxMDEsIDMyLCAxNDQsIDg1LCAyMiwgMTIwLCA2OSwgIDgsICA5NiwgNTIsICAwLCAgNjcsIDMwLCAgMCwgIDI3LCAgMCwgIDAsCisgICAgMjQ3LCAxNDcsIDI5LCAyMTgsIDEzMSwgMjQsIDE5NCwgMTE2LCAyMCwgMTY4LCAxMDAsIDExLCAxNDQsIDg1LCAgMCwgMTIwLCA2OSwgIDAsICA5NiwgNTIsICAwLCAgNjcsIDMwLCAgMCwgIDI2LCAgMCwgIDAsCisgICAgMjQyLCAxMzAsIDE3OSwgMjE0LCAxMTQsIDE2MCwgMTkwLCAxMDEsIDE0MywgMTY2LCA4NywgMTI1LCAxNDMsIDcyLCAxMDcsIDEyMCwgNTgsIDg4LCAgOTYsIDQyLCA2OCwgIDY5LCAxNywgNDQsICAzNSwgIDAsICAwLAorICAgIDI0MywgMTI5LCAxNjEsIDIxNSwgMTE0LCAxNDMsIDE5MSwgMTAxLCAxMjgsIDE2NiwgODcsIDExMywgMTQzLCA3MywgOTYsIDEyMCwgNTgsIDc5LCAgOTYsIDQxLCA2MCwgIDY5LCAxOCwgMzcsICAzMywgIDAsICAwLAorICAgIDI0MywgMTI5LCAxNDYsIDIxNiwgMTE0LCAxMzAsIDE5MiwgMTAxLCAxMTcsIDE2NiwgODcsIDEwMSwgMTQzLCA3MiwgODYsIDEyMSwgNTgsIDY5LCAgOTYsIDQyLCA1MiwgIDY5LCAxOCwgMjksICAzMSwgIDAsICAwLAorICAgIDI0MywgMTI4LCAxMzAsIDIxNiwgMTE0LCAxMTUsIDE5MSwgMTAxLCAxMDIsIDE2NSwgODYsIDg4LCAxNDIsIDcyLCA3NSwgMTIwLCA1OCwgNjAsICA5NSwgNDIsIDQzLCAgNjgsIDE5LCAyMSwgIDMwLCAgMCwgIDAsCisgICAgMjQ0LCAxMjcsIDExMiwgMjE3LCAxMTMsIDEwMSwgMTkyLCA5OSwgODksIDE2NiwgODUsIDc1LCAxNDIsIDcyLCA2MywgMTE5LCA1NywgNTAsICA5NiwgNDEsIDM1LCAgNjgsIDE5LCAxMywgIDMwLCAgMCwgIDAsCisgICAgMjQ0LCAxMjcsIDk2LCAyMTYsIDExMiwgODYsIDE5MSwgOTksIDc1LCAxNjYsIDg2LCA2NCwgMTQzLCA3MiwgNTIsIDEyMCwgNTcsIDQwLCAgOTUsIDQxLCAyNCwgIDY3LCAyMCwgIDEsICAyOSwgIDAsICAwLAorICAgIDI0NSwgMTI2LCA3NywgMjE2LCAxMTMsIDY4LCAxOTEsIDEwMCwgNTksIDE2NiwgODUsIDQ5LCAxNDIsIDcxLCAzOCwgMTE5LCA1NywgMjYsICA5NSwgNDEsIDEwLCAgNjcsIDIwLCAgMCwgIDI4LCAgMCwgIDAsCisgICAgMjQ0LCAxMjYsIDU1LCAyMTYsIDExMiwgNDgsIDE5MSwgOTksIDQwLCAxNjYsIDg1LCAzMSwgMTQzLCA3MSwgMjAsIDExOSwgNTcsICA2LCAgOTUsIDQyLCAgMCwgIDY3LCAyMCwgIDAsICAyOCwgIDAsICAwLAorICAgIDI0NSwgMTI2LCAzMywgMjE3LCAxMTIsIDI2LCAxOTIsIDk5LCAyMiwgMTY2LCA4NCwgMTEsIDE0MiwgNzAsICAwLCAxMTksIDU3LCAgMCwgIDk1LCA0MSwgIDAsICA2NiwgMjAsICAwLCAgMjcsICAwLCAgMCwKKyAgICAyNDEsIDEwMiwgMTY3LCAyMTMsIDkwLCAxNDksIDE4OSwgNzksIDEzMywgMTY1LCA2NiwgMTE1LCAxNDEsIDU0LCA5OCwgMTE5LCA0MSwgODEsICA5NiwgMjUsIDYzLCAgNjksICAwLCAzOCwgIDMwLCAgMCwgIDAsCisgICAgMjQxLCAxMDIsIDE0OSwgMjEzLCA5MCwgMTMzLCAxODksIDc5LCAxMTksIDE2NSwgNjYsIDEwMywgMTQyLCA1NSwgODgsIDExOSwgNDEsIDcxLCAgOTYsIDI1LCA1MywgIDY5LCAgMCwgMzEsICAyOCwgIDAsICAwLAorICAgIDI0MSwgMTAyLCAxMzUsIDIxNCwgOTAsIDEyMSwgMTkwLCA3OSwgMTA4LCAxNjUsIDY2LCA5MiwgMTQxLCA1NSwgNzgsIDExOSwgNDIsIDYzLCAgOTYsIDI2LCA0NiwgIDY5LCAgMCwgMjQsICAyOCwgIDAsICAwLAorICAgIDI0MSwgMTAxLCAxMjAsIDIxNCwgOTAsIDEwNywgMTg5LCA3OSwgOTUsIDE2NSwgNjcsIDgzLCAxNDEsIDU0LCA2OCwgMTE4LCA0MSwgNTQsICA5NSwgMjcsIDM5LCAgNjgsICAwLCAxNiwgIDI3LCAgMCwgIDAsCisgICAgMjQxLCAxMDIsIDEwNiwgMjEzLCA5MCwgOTMsIDE4OSwgNzgsIDgyLCAxNjQsIDY3LCA3MCwgMTQxLCA1NSwgNTgsIDExOCwgNDIsIDQ1LCAgOTQsIDI3LCAyOSwgIDY3LCAgMiwgIDYsICAyNywgIDAsICAwLAorICAgIDI0MiwgMTAxLCA5MCwgMjE0LCA4OSwgNzksIDE5MCwgNzksIDY5LCAxNjYsIDY3LCA1OSwgMTQxLCA1NSwgNDcsIDExOCwgNDEsIDM1LCAgOTUsIDI3LCAxOSwgIDY3LCAgMywgIDAsICAyNiwgIDAsICAwLAorICAgIDI0MiwgMTAyLCA3MiwgMjEzLCA4OSwgNjMsIDE5MSwgNzksIDU2LCAxNjQsIDY3LCA0NSwgMTQxLCA1NSwgMzQsIDExOCwgNDIsIDIyLCAgOTQsIDI4LCAgNiwgIDY3LCAgMywgIDAsICAyNiwgIDAsICAwLAorICAgIDI0MiwgMTAwLCA1MSwgMjE0LCA4OSwgNDUsIDE5MCwgNzgsIDM4LCAxNjQsIDY3LCAzMCwgMTQxLCA1NSwgMTgsIDExOCwgNDIsICAzLCAgOTUsIDI4LCAgMCwgIDY2LCAgNCwgIDAsICAyNiwgIDAsICAwLAorICAgIDI0MywgMTAwLCAzMywgMjE0LCA5MCwgMjcsIDE5MCwgNzgsIDIyLCAxNjUsIDY3LCAxMywgMTQxLCA1NSwgIDAsIDExOCwgNDMsICAwLCAgOTQsIDI5LCAgMCwgIDY2LCAgNSwgIDAsICAyNiwgIDAsICAwLAorICAgIDIzNywgNjksIDE1MywgMjExLCA1OCwgMTM1LCAxODcsIDUxLCAxMjEsIDE2MywgNDEsIDEwNSwgMTQxLCAyOCwgOTAsIDExOCwgMTUsIDczLCAgOTYsICAwLCA1NiwgIDY4LCAgMCwgMzMsICAyNSwgIDAsICAwLAorICAgIDIzOSwgNjcsIDEzNywgMjEyLCA2MCwgMTIzLCAxODksIDUwLCAxMTAsIDE2MywgNDEsIDk0LCAxNDEsIDI5LCA3OSwgMTE4LCAxNywgNjUsICA5NSwgIDAsIDQ4LCAgNjksICAwLCAyNiwgIDI1LCAgMCwgIDAsCisgICAgMjQwLCA2OSwgMTI0LCAyMTEsIDYwLCAxMTEsIDE4OCwgNTAsIDk4LCAxNjMsIDQyLCA4NSwgMTQxLCAzMSwgNzIsIDExOCwgMTgsIDU3LCAgOTQsICAwLCA0MSwgIDY4LCAgMCwgMTksICAyNSwgIDAsICAwLAorICAgIDI0MCwgNzAsIDExMiwgMjEyLCA2MSwgOTksIDE4OCwgNTIsIDg3LCAxNjMsIDQxLCA3NCwgMTQwLCAzMSwgNjIsIDExOCwgMjAsIDQ4LCAgOTQsICAyLCAzMiwgIDY4LCAgMCwgMTEsICAyNCwgIDAsICAwLAorICAgIDIzOSwgNzAsIDk4LCAyMTIsIDYyLCA4NiwgMTg4LCA1MywgNzcsIDE2NCwgNDIsIDY0LCAxNDAsIDMyLCA1MiwgMTE4LCAyMCwgNDAsICA5NCwgIDMsIDI0LCAgNjcsICAwLCAgMywgIDIzLCAgMCwgIDAsCisgICAgMjM5LCA3MSwgODUsIDIxMiwgNjEsIDc0LCAxODcsIDUzLCA2NSwgMTYzLCA0NCwgNTQsIDE0MCwgMzQsIDQzLCAxMTgsIDIyLCAzMCwgIDk1LCAgMywgMTQsICA2NywgIDAsICAwLCAgMjMsICAwLCAgMCwKKyAgICAyMzksIDcwLCA2NywgMjEyLCA2MiwgNTksIDE4OCwgNTMsIDUxLCAxNjMsIDQ1LCA0MiwgMTQxLCAzNCwgMzEsIDExNywgMjIsIDE3LCAgOTQsICA1LCAgMiwgIDY2LCAgMCwgIDAsICAyMywgIDAsICAwLAorICAgIDIzOSwgNzEsIDUwLCAyMTMsIDYyLCA0MywgMTg4LCA1NCwgMzcsIDE2NCwgNDUsIDI4LCAxMzksIDM0LCAxNiwgMTE3LCAyMiwgIDIsICA5NCwgIDcsICAwLCAgNjUsICAwLCAgMCwgIDIzLCAgMCwgIDAsCisgICAgMjQwLCA3MSwgMzQsIDIxMiwgNjMsIDI5LCAxODksIDU0LCAyNCwgMTYzLCA0NiwgMTUsIDEzOSwgMzYsICAyLCAxMTcsIDI1LCAgMCwgIDk0LCAgOCwgIDAsICA2NiwgIDAsICAwLCAgMjMsICAwLCAgMCwKKyAgICAyMzcsICAwLCAxNDAsIDIwOSwgIDAsIDEyNCwgMTg2LCAgMCwgMTEyLCAxNjIsICAwLCA5NywgMTQxLCAgMCwgODIsIDExOCwgIDAsIDY3LCAgOTUsICAwLCA0OSwgIDY4LCAgMCwgMjcsICAyMCwgIDAsICAwLAorICAgIDIzNywgIDAsIDEyNiwgMjEwLCAgMCwgMTEzLCAxODcsICAwLCA5OSwgMTYzLCAgMCwgODYsIDEzOSwgIDAsIDcyLCAxMTgsICAwLCA1OCwgIDk1LCAgMCwgNDIsICA2NywgIDAsIDIwLCAgMjAsICAwLCAgMCwKKyAgICAyMzcsICAxLCAxMTQsIDIwOSwgIDEsIDEwMiwgMTg3LCAgMCwgOTAsIDE2MywgIDAsIDc4LCAxMzksICAwLCA2NCwgMTE4LCAgMCwgNTAsICA5NSwgIDAsIDM1LCAgNjcsICAwLCAxMywgIDIwLCAgMCwgIDAsCisgICAgMjM2LCAxNiwgMTAyLCAyMDksICA3LCA5MSwgMTg2LCAgMCwgODAsIDE2MiwgIDAsIDY4LCAxMzksICAwLCA1NiwgMTE3LCAgMCwgNDMsICA5NCwgIDAsIDI3LCAgNjcsICAwLCAgNiwgIDIwLCAgMCwgIDAsCisgICAgMjM4LCAxNSwgODksIDIwOSwgMTMsIDc5LCAxODYsICA2LCA2OSwgMTYyLCAgMCwgNTgsIDEzOSwgIDAsIDQ3LCAxMTcsICAwLCAzNCwgIDkzLCAgMCwgMjAsICA2NiwgIDAsICAyLCAgMjAsICAwLCAgMCwKKyAgICAyMzcsIDIwLCA3OCwgMjEwLCAxMiwgNjgsIDE4NywgIDQsIDU5LCAxNjMsICAwLCA0OSwgMTM5LCAgMCwgMzgsIDExNiwgIDAsIDI2LCAgOTQsICAwLCAxMSwgIDY2LCAgMCwgIDAsICAyMCwgIDAsICAwLAorICAgIDIzNywgMjUsIDY0LCAyMTAsIDE4LCA1NiwgMTg2LCAxMSwgNDgsIDE2MiwgIDQsIDM5LCAxMzgsICAwLCAyNywgMTE3LCAgMCwgMTQsICA5MywgIDAsICAwLCAgNjYsICAwLCAgMCwgIDIwLCAgMCwgIDAsCisgICAgMjM4LCAyNSwgNDgsIDIxMCwgMjIsIDQzLCAxODYsIDE1LCAzNSwgMTYyLCAgOCwgMjYsIDE0MCwgIDAsIDE0LCAxMTcsICAwLCAgMCwgIDkzLCAgMCwgIDAsICA2NSwgIDAsICAwLCAgMjAsICAwLCAgMCwKKyAgICAyMzgsIDI4LCAzNSwgMjEwLCAyMSwgMzAsIDE4NywgMTUsIDI0LCAxNjIsICA4LCAxNiwgMTM5LCAgMSwgIDIsIDExNywgIDAsICAwLCAgOTMsICAwLCAgMCwgIDY1LCAgMCwgIDAsICAyMiwgIDAsICAwLAorICAgIDIxOSwgMjQyLCAyNTIsIDE5NSwgMjE0LCAyMjUsIDE3MiwgMTkxLCAyMDEsIDE0OCwgMTY1LCAxNzUsIDEyNywgMTQyLCAxNTAsIDEwNiwgMTE5LCAxMjYsICA4NCwgOTUsIDEwMSwgIDU4LCA2NiwgNzIsICAyNCwgMjcsIDMyLAorICAgIDIyMiwgMjM5LCAyMjYsIDE5NiwgMjEzLCAyMDIsIDE3MywgMTg5LCAxODAsIDE1MCwgMTY1LCAxNTgsIDEyOSwgMTQxLCAxMzUsIDEwNywgMTE4LCAxMTMsICA4NSwgOTQsIDkwLCAgNTgsIDY2LCA2MywgIDIxLCAyNiwgMjQsCisgICAgMjIzLCAyMzcsIDIwMywgMTk4LCAyMTEsIDE4MiwgMTc1LCAxODgsIDE2MywgMTUyLCAxNjQsIDE0MSwgMTI5LCAxNDAsIDEyMSwgMTA3LCAxMTcsIDEwMSwgIDg1LCA5MywgODAsICA1OCwgNjQsIDU0LCAgMjEsIDI2LCAxOCwKKyAgICAyMjYsIDIzNiwgMTc5LCAyMDEsIDIxMCwgMTYwLCAxNzcsIDE4NywgMTQzLCAxNTMsIDE2MiwgMTI1LCAxMzAsIDEzOSwgMTA2LCAxMDgsIDExNiwgODksICA4NSwgOTIsIDY5LCAgNTgsIDY0LCA0NSwgIDIwLCAyNSwgIDgsCisgICAgMjI3LCAyMzQsIDE1MywgMjAxLCAyMDgsIDEzOSwgMTc4LCAxODUsIDEyNCwgMTU0LCAxNjEsIDEwNywgMTMxLCAxMzgsIDkxLCAxMDgsIDExNSwgNzUsICA4NSwgOTEsIDU4LCAgNTgsIDYzLCAzNSwgIDE3LCAyNSwgIDAsCisgICAgMjI5LCAyMzMsIDEzMCwgMjAzLCAyMDcsIDExNiwgMTc4LCAxODQsIDEwNCwgMTU0LCAxNjAsIDkwLCAxMzEsIDEzNywgNzYsIDEwOSwgMTE0LCA2MiwgIDg1LCA5MCwgNDYsICA1OCwgNjMsIDI1LCAgMTYsIDI0LCAgMCwKKyAgICAyMzAsIDIzMSwgMTAwLCAyMDIsIDIwNSwgOTAsIDE3OSwgMTgzLCA4MCwgMTU0LCAxNTksIDY5LCAxMzEsIDEzNiwgNTcsIDEwOSwgMTEzLCA0NiwgIDg2LCA5MCwgMzIsICA1OCwgNjMsIDEwLCAgMTQsIDI0LCAgMCwKKyAgICAyMzAsIDIzMCwgNjUsIDIwNCwgMjA0LCA1OCwgMTgwLCAxODIsIDUyLCAxNTUsIDE1NywgNDQsIDEzMiwgMTM1LCAzNSwgMTEwLCAxMTMsIDI0LCAgODYsIDg5LCAgOSwgIDU3LCA2MiwgIDAsICAxMSwgMjQsICAwLAorICAgIDIzMiwgMjMwLCAxOSwgMjA0LCAyMDQsIDE5LCAxODAsIDE4MSwgMTcsIDE1NSwgMTU3LCAxMCwgMTMxLCAxMzQsICAyLCAxMDksIDExMiwgIDAsICA4NSwgODksICAwLCAgNTcsIDYyLCAgMCwgIDEwLCAyMywgIDAsCisgICAgMjE4LCAyMTYsIDIzNiwgMTk0LCAxOTIsIDIxMSwgMTcyLCAxNzEsIDE4OCwgMTQ5LCAxNDksIDE2NCwgMTI4LCAxMjcsIDE0MSwgMTA2LCAxMDYsIDExOSwgIDg0LCA4NCwgOTQsICA1OSwgNTcsIDY2LCAgMjUsIDE4LCAyNiwKKyAgICAyMjEsIDIxNCwgMjExLCAxOTYsIDE5MSwgMTkwLCAxNzQsIDE3MCwgMTcwLCAxNTAsIDE0OCwgMTQ4LCAxMjgsIDEyNiwgMTI3LCAxMDcsIDEwNSwgMTA2LCAgODUsIDgzLCA4NCwgIDU5LCA1NiwgNTgsICAyMywgMTcsIDE4LAorICAgIDIyMiwgMjEzLCAxOTAsIDE5NywgMTg5LCAxNzAsIDE3NSwgMTY5LCAxNTMsIDE1MSwgMTQ3LCAxMzMsIDEyOSwgMTI2LCAxMTMsIDEwOCwgMTA1LCA5NCwgIDg1LCA4MiwgNzQsICA1OSwgNTYsIDQ5LCAgMjIsIDE3LCAxMSwKKyAgICAyMjQsIDIxMSwgMTY4LCAxOTksIDE4OCwgMTUxLCAxNzUsIDE2OCwgMTM1LCAxNTIsIDE0NiwgMTE3LCAxMjksIDEyNCwgOTksIDEwNywgMTAzLCA4MiwgIDg0LCA4MiwgNjQsICA1OSwgNTUsIDQxLCAgMjEsIDE3LCAgMSwKKyAgICAyMjQsIDIxMCwgMTQ1LCAxOTksIDE4NywgMTMwLCAxNzYsIDE2NiwgMTE3LCAxNTIsIDE0NSwgMTAxLCAxMjksIDEyMywgODYsIDEwNywgMTAzLCA3MCwgIDg1LCA4MSwgNTMsICA1OCwgNTUsIDMxLCAgMTksIDE3LCAgMCwKKyAgICAyMjcsIDIwOCwgMTIzLCAyMDAsIDE4NiwgMTEwLCAxNzcsIDE2NSwgOTgsIDE1MywgMTQzLCA4NCwgMTMwLCAxMjIsIDcwLCAxMDgsIDEwMiwgNTcsICA4NSwgODAsIDQxLCAgNTgsIDU0LCAyMCwgIDE4LCAxNiwgIDAsCisgICAgMjI3LCAyMDgsIDk3LCAyMDIsIDE4NSwgODYsIDE3NywgMTY0LCA3NywgMTUzLCAxNDIsIDY1LCAxMzAsIDEyMiwgNTQsIDEwOCwgMTAxLCA0MiwgIDg1LCA4MCwgMjcsICA1OCwgNTQsICA3LCAgMTYsIDE2LCAgMCwKKyAgICAyMjgsIDIwNiwgNjYsIDIwMiwgMTg0LCA1OCwgMTc4LCAxNjMsIDUwLCAxNTQsIDE0MSwgNDIsIDEzMSwgMTIxLCAzMywgMTA5LCAxMDEsIDIxLCAgODYsIDc5LCAgNSwgIDU4LCA1NCwgIDAsICAxMywgMTYsICAwLAorICAgIDIyOCwgMjA2LCAyOSwgMjAyLCAxODMsIDI1LCAxNzgsIDE2MywgMjAsIDE1NCwgMTQxLCAxNSwgMTMxLCAxMjEsICA1LCAxMDgsIDEwMCwgIDAsICA4NSwgNzksICAwLCAgNTgsIDUzLCAgMCwgIDEzLCAxNiwgIDAsCisgICAgMjE3LCAxOTMsIDIyMSwgMTkzLCAxNzIsIDE5OCwgMTcyLCAxNTMsIDE3OCwgMTQ5LCAxMzMsIDE1NCwgMTI4LCAxMTQsIDEzMiwgMTA3LCA5NCwgMTExLCAgODUsIDc0LCA4OSwgIDU5LCA0OSwgNjEsICAyNSwgIDgsIDIyLAorICAgIDIxOSwgMTkxLCAxOTgsIDE5NSwgMTcxLCAxNzgsIDE3MywgMTUzLCAxNTksIDE0OSwgMTMyLCAxMzksIDEyOCwgMTEzLCAxMTksIDEwNywgOTQsIDEwMCwgIDg1LCA3MywgNzksICA1OSwgNDgsIDUyLCAgMjUsICA3LCAxNCwKKyAgICAyMjEsIDE5MSwgMTgwLCAxOTYsIDE3MCwgMTYwLCAxNzQsIDE1MiwgMTQ0LCAxNTAsIDEzMiwgMTI1LCAxMjksIDExMywgMTA3LCAxMDcsIDkzLCA4OSwgIDg1LCA3MywgNjksICA1OSwgNDgsIDQ1LCAgMjMsICA3LCAgNCwKKyAgICAyMjIsIDE4OSwgMTU5LCAxOTcsIDE2OSwgMTQyLCAxNzQsIDE1MSwgMTI3LCAxNTEsIDEzMSwgMTEwLCAxMjksIDExMiwgOTQsIDEwOCwgOTMsIDc4LCAgODUsIDcyLCA2MCwgIDU4LCA0NywgMzcsICAyMiwgIDcsICAwLAorICAgIDIyMywgMTg4LCAxMzgsIDE5NywgMTY4LCAxMjMsIDE3NSwgMTUwLCAxMDksIDE1MSwgMTMwLCA5NSwgMTMwLCAxMTEsIDgxLCAxMDgsIDkyLCA2NSwgIDg1LCA3MiwgNDksICA1OSwgNDcsIDI3LCAgMjEsICA3LCAgMCwKKyAgICAyMjQsIDE4NywgMTE4LCAxOTgsIDE2NywgMTA1LCAxNzYsIDE0OSwgOTMsIDE1MiwgMTI5LCA3OSwgMTMwLCAxMTAsIDY4LCAxMDgsIDkxLCA1NCwgIDg1LCA3MSwgMzgsICA1OSwgNDcsIDE3LCAgMTgsICA3LCAgMCwKKyAgICAyMjQsIDE4NywgOTMsIDE5OSwgMTY2LCA4MywgMTc2LCAxNDgsIDczLCAxNTIsIDEyOCwgNjIsIDEyOSwgMTA5LCA1MSwgMTA4LCA5MCwgMzksICA4NSwgNzEsIDI1LCAgNTgsIDQ2LCAgMywgIDE2LCAgOCwgIDAsCisgICAgMjI2LCAxODYsIDY0LCAyMDAsIDE2NSwgNTcsIDE3NywgMTQ3LCA1MCwgMTUzLCAxMjcsIDQwLCAxMzAsIDEwOCwgMzEsIDEwOCwgOTAsIDE5LCAgODUsIDcwLCAgMywgIDU4LCA0NiwgIDAsICAxNiwgIDgsICAwLAorICAgIDIyNywgMTg1LCAzNSwgMjAwLCAxNjUsIDMwLCAxNzYsIDE0NiwgMjUsIDE1MiwgMTI3LCAxOCwgMTMwLCAxMDgsICA3LCAxMDgsIDg5LCAgMCwgIDg1LCA3MCwgIDAsICA1NywgNDYsICAwLCAgMTQsICA4LCAgMCwKKyAgICAyMTYsIDE2OSwgMjA1LCAxOTIsIDE1MCwgMTg0LCAxNzEsIDEzNCwgMTY0LCAxNDksIDExNiwgMTQ0LCAxMjgsIDk5LCAxMjQsIDEwNywgODEsIDEwMywgIDg1LCA2MywgODEsICA2MCwgMzksIDU1LCAgMjYsICAwLCAxNSwKKyAgICAyMTcsIDE2OCwgMTg2LCAxOTMsIDE1MCwgMTY1LCAxNzIsIDEzNCwgMTQ5LCAxNTAsIDExNiwgMTMwLCAxMjgsIDk5LCAxMTEsIDEwNywgODEsIDkyLCAgODUsIDYyLCA3MiwgIDU5LCAzOSwgNDcsICAyNSwgIDAsICA2LAorICAgIDIxOSwgMTY4LCAxNjgsIDE5NCwgMTQ5LCAxNTAsIDE3MywgMTMzLCAxMzUsIDE1MCwgMTE2LCAxMTcsIDEyOCwgOTgsIDk5LCAxMDcsIDgwLCA4MiwgIDg2LCA2MiwgNjMsICA1OSwgMzgsIDM5LCAgMjQsICAwLCAgMCwKKyAgICAyMTksIDE2NiwgMTQ4LCAxOTUsIDE0OSwgMTMzLCAxNzMsIDEzMywgMTE5LCAxNTAsIDExNSwgMTAzLCAxMjgsIDk4LCA4OCwgMTA3LCA4MCwgNzIsICA4NSwgNjEsIDU0LCAgNTksIDM4LCAzMiwgIDIzLCAgMCwgIDAsCisgICAgMjIwLCAxNjYsIDEyOSwgMTk2LCAxNDgsIDExNiwgMTc0LCAxMzIsIDEwMywgMTUxLCAxMTQsIDg5LCAxMjksIDk3LCA3NSwgMTA3LCA3OSwgNjAsICA4NSwgNjEsIDQ0LCAgNTksIDM4LCAyMiwgIDIxLCAgMCwgIDAsCisgICAgMjIyLCAxNjQsIDExMCwgMTk3LCAxNDcsIDk5LCAxNzUsIDEzMSwgODcsIDE1MSwgMTEzLCA3NSwgMTI5LCA5NiwgNjMsIDEwNywgNzksIDQ5LCAgODUsIDYxLCAzMywgIDU4LCAzOCwgMTIsICAxOSwgIDAsICAwLAorICAgIDIyMiwgMTY0LCA4OCwgMTk3LCAxNDYsIDc5LCAxNzQsIDEzMCwgNjksIDE1MSwgMTEzLCA1OCwgMTI5LCA5NSwgNDcsIDEwNywgNzgsIDM1LCAgODUsIDYwLCAyMCwgIDU4LCAzOCwgIDAsICAxOCwgIDAsICAwLAorICAgIDIyMywgMTY0LCA2MywgMTk4LCAxNDUsIDU1LCAxNzUsIDEyOSwgNDgsIDE1MSwgMTEyLCAzOSwgMTI5LCA5NSwgMjksIDEwNywgNzgsIDE2LCAgODUsIDYwLCAgMSwgIDU4LCAzOCwgIDAsICAxNywgIDAsICAwLAorICAgIDIyMywgMTYzLCAzNiwgMTk4LCAxNDUsIDMyLCAxNzQsIDEyOSwgMjYsIDE1MSwgMTExLCAxNywgMTI5LCA5NSwgIDcsIDEwNywgNzgsICAwLCAgODQsIDYwLCAgMCwgIDU3LCAzNywgIDAsICAxNSwgIDAsICAwLAorICAgIDIxNSwgMTQ3LCAxOTIsIDE5MSwgMTMwLCAxNzIsIDE3MCwgMTE2LCAxNTMsIDE0OCwgMTAwLCAxMzMsIDEyNywgODUsIDExNSwgMTA3LCA2OSwgOTYsICA4NSwgNTEsIDc1LCAgNjAsIDI4LCA1MCwgIDI1LCAgMCwgIDgsCisgICAgMjE3LCAxNDYsIDE3MywgMTkyLCAxMzAsIDE1NCwgMTcxLCAxMTUsIDEzOCwgMTQ5LCAxMDAsIDEyMSwgMTI4LCA4NCwgMTAzLCAxMDcsIDY4LCA4NSwgIDg1LCA1MSwgNjYsICA2MCwgMjgsIDQyLCAgMjUsICAwLCAgMCwKKyAgICAyMTcsIDE0NSwgMTU3LCAxOTMsIDEyOSwgMTQwLCAxNzMsIDExNSwgMTI1LCAxNDksIDEwMCwgMTA5LCAxMjgsIDg0LCA5MiwgMTA3LCA2OCwgNzYsICA4NSwgNTEsIDU4LCAgNTksIDI4LCAzNSwgIDIzLCAgMCwgIDAsCisgICAgMjE4LCAxNDUsIDE0MCwgMTkzLCAxMjksIDEyNSwgMTcyLCAxMTQsIDExMCwgMTQ5LCA5OSwgOTYsIDEyOCwgODMsIDgxLCAxMDcsIDY3LCA2NSwgIDg0LCA1MSwgNDksICA1OSwgMjksIDI3LCAgMjIsICAwLCAgMCwKKyAgICAyMTksIDE0NCwgMTIxLCAxOTQsIDEyOCwgMTA4LCAxNzIsIDExMywgOTYsIDE0OSwgOTgsIDgzLCAxMjgsIDgzLCA2OSwgMTA3LCA2OCwgNTUsICA4NSwgNTAsIDQwLCAgNTksIDI4LCAxOCwgIDIwLCAgMCwgIDAsCisgICAgMjIwLCAxNDMsIDEwNCwgMTk1LCAxMjgsIDkzLCAxNzMsIDExNCwgODIsIDE1MCwgOTgsIDY5LCAxMjcsIDgyLCA1OCwgMTA3LCA2NywgNDUsICA4NSwgNTAsIDMwLCAgNTksIDI4LCAgNywgIDE5LCAgMCwgIDAsCisgICAgMjIwLCAxNDMsIDg0LCAxOTUsIDEyNywgNzQsIDE3MywgMTEzLCA2NSwgMTQ5LCA5NywgNTUsIDEyOCwgODIsIDQ0LCAxMDYsIDY3LCAzMiwgIDg0LCA1MCwgMTYsICA1OCwgMjgsICAwLCAgMTgsICAwLCAgMCwKKyAgICAyMjEsIDE0MiwgNjIsIDE5NiwgMTI2LCA1MywgMTczLCAxMTIsIDQ2LCAxNTAsIDk3LCAzNywgMTI4LCA4MiwgMjYsIDEwNywgNjYsIDE0LCAgODQsIDUwLCAgMCwgIDU4LCAyOCwgIDAsICAxNiwgIDAsICAwLAorICAgIDIyMiwgMTQyLCAzOCwgMTk2LCAxMjYsIDM0LCAxNzQsIDExMiwgMjcsIDE1MCwgOTYsIDE3LCAxMjgsIDgyLCAgNiwgMTA2LCA2NiwgIDAsICA4NCwgNTAsICAwLCAgNTcsIDI5LCAgMCwgIDE2LCAgMCwgIDAsCisgICAgMjE0LCAxMjMsIDE3OSwgMTkxLCAxMTAsIDE1OSwgMTY5LCA5OCwgMTQzLCAxNDcsIDg0LCAxMjQsIDEyNiwgNzAsIDEwNiwgMTA3LCA1NSwgODgsICA4NSwgMzksIDY5LCAgNjAsIDE1LCA0NSwgIDIzLCAgMCwgIDIsCisgICAgMjE2LCAxMjMsIDE2MSwgMTkyLCAxMTAsIDE0NCwgMTcwLCA5OCwgMTI5LCAxNDgsIDg0LCAxMTIsIDEyNywgNzAsIDk1LCAxMDcsIDU1LCA3OSwgIDg1LCAzOSwgNjEsICA2MCwgMTUsIDM3LCAgMjAsICAwLCAgMCwKKyAgICAyMTcsIDEyMiwgMTQ1LCAxOTIsIDExMCwgMTMwLCAxNzAsIDk3LCAxMTYsIDE0OSwgODQsIDEwMSwgMTI3LCA3MCwgODUsIDEwNiwgNTUsIDcwLCAgODUsIDM5LCA1MywgIDU5LCAxNiwgMzAsICAxOSwgIDAsICAwLAorICAgIDIxNywgMTIzLCAxMzEsIDE5MiwgMTA5LCAxMTYsIDE3MSwgOTYsIDEwMywgMTQ5LCA4MywgODksIDEyNywgNzAsIDc1LCAxMDYsIDU1LCA2MCwgIDg1LCA0MCwgNDUsICA1OSwgMTYsIDIzLCAgMTcsICAwLCAgMCwKKyAgICAyMTcsIDEyMiwgMTE0LCAxOTMsIDEwOSwgMTAxLCAxNzIsIDk2LCA5MSwgMTQ5LCA4MiwgNzcsIDEyOCwgNjksIDY0LCAxMDYsIDU1LCA1MCwgIDg0LCAzOSwgMzUsICA1OSwgMTcsIDE0LCAgMTcsICAwLCAgMCwKKyAgICAyMTgsIDEyMiwgOTgsIDE5NCwgMTA4LCA4NywgMTcxLCA5NiwgNzcsIDE0OSwgODIsIDY1LCAxMjcsIDY5LCA1MiwgMTA2LCA1NSwgNDAsICA4NCwgNDAsIDI1LCAgNTksIDE4LCAgMywgIDE1LCAgMCwgIDAsCisgICAgMjE5LCAxMjIsIDgwLCAxOTMsIDEwOCwgNzAsIDE3MiwgOTUsIDYxLCAxNDksIDgyLCA1MSwgMTI3LCA2OSwgNDAsIDEwNiwgNTUsIDI4LCAgODQsIDM5LCAxMiwgIDU4LCAxNywgIDAsICAxMywgIDAsICAwLAorICAgIDIxOSwgMTIxLCA1OSwgMTk0LCAxMDgsIDUyLCAxNzIsIDk2LCA0NCwgMTQ5LCA4MiwgMzUsIDEyNywgNjgsIDI0LCAxMDYsIDU1LCAxMSwgIDg0LCA0MCwgIDAsICA1NywgMTgsICAwLCAgMTMsICAwLCAgMCwKKyAgICAyMTksIDEyMSwgNDAsIDE5MywgMTA4LCAzMywgMTcyLCA5NSwgMjYsIDE0OSwgODEsIDE5LCAxMjgsIDY4LCAgNiwgMTA2LCA1NCwgIDAsICA4NCwgMzksICAwLCAgNTcsIDE4LCAgMCwgIDEzLCAgMCwgIDAsCisgICAgMjEzLCA5OSwgMTY1LCAxODksIDg3LCAxNDgsIDE2OSwgNzYsIDEzMiwgMTQ3LCA2NCwgMTE1LCAxMjYsIDUyLCA5OCwgMTA2LCAzOSwgODEsICA4NSwgMjMsIDYzLCAgNjAsICAwLCAzOSwgIDE2LCAgMCwgIDAsCisgICAgMjE0LCA5OCwgMTQ5LCAxOTEsIDg3LCAxMzMsIDE3MCwgNzYsIDExOSwgMTQ4LCA2NSwgMTAzLCAxMjcsIDUzLCA4OCwgMTA2LCAzOSwgNzIsICA4NSwgMjQsIDU1LCAgNjAsICAwLCAzMiwgIDE1LCAgMCwgIDAsCisgICAgMjE1LCA5OSwgMTM2LCAxOTEsIDg3LCAxMjEsIDE3MCwgNzcsIDEwOCwgMTQ4LCA2NSwgOTMsIDEyNiwgNTMsIDc5LCAxMDYsIDQwLCA2NCwgIDg1LCAyNCwgNDcsICA1OSwgIDAsIDI1LCAgMTQsICAwLCAgMCwKKyAgICAyMTUsIDk5LCAxMjEsIDE5MiwgODcsIDEwOCwgMTcwLCA3NywgOTYsIDE0OCwgNjUsIDgyLCAxMjYsIDUzLCA2OSwgMTA2LCA0MCwgNTUsICA4NSwgMjUsIDM5LCAgNTksICAwLCAxOCwgIDEzLCAgMCwgIDAsCisgICAgMjE2LCA5OSwgMTA2LCAxOTEsIDg3LCA5NSwgMTcwLCA3NiwgODMsIDE0OCwgNjUsIDcxLCAxMjYsIDUzLCA1OCwgMTA2LCA0MSwgNDUsICA4NSwgMjYsIDMwLCAgNTksICAwLCAgOCwgIDExLCAgMCwgIDAsCisgICAgMjE2LCA5OCwgOTEsIDE5MiwgODgsIDgyLCAxNzAsIDc3LCA3MSwgMTQ4LCA2NSwgNjAsIDEyNywgNTMsIDQ4LCAxMDUsIDQxLCAzNiwgIDgzLCAyNiwgMjEsICA1OCwgIDEsICAyLCAgMTEsICAwLCAgMCwKKyAgICAyMTcsIDk5LCA3NSwgMTkyLCA4NywgNjYsIDE3MCwgNzYsIDU3LCAxNDgsIDY1LCA0NywgMTI2LCA1MywgMzYsIDEwNSwgNDEsIDI0LCAgODMsIDI2LCAgOCwgIDU3LCAgMiwgIDAsICAgOSwgIDAsICAwLAorICAgIDIxNywgOTgsIDU3LCAxOTIsIDg3LCA0OSwgMTcxLCA3NywgNDEsIDE0NywgNjUsIDMyLCAxMjYsIDUzLCAyMSwgMTA1LCA0MSwgIDgsICA4NCwgMjcsICAwLCAgNTcsICAzLCAgMCwgICA5LCAgMCwgIDAsCisgICAgMjE3LCA5OCwgNDAsIDE5MywgODcsIDM0LCAxNzEsIDc2LCAyNywgMTQ4LCA2NSwgMTksIDEyNiwgNTMsICA2LCAxMDUsIDQxLCAgMCwgIDgzLCAyNywgIDAsICA1NywgIDQsICAwLCAgIDksICAwLCAgMCwKKyAgICAyMTEsIDY3LCAxNTIsIDE4OSwgNTgsIDEzNiwgMTY4LCA1MCwgMTIyLCAxNDcsIDM5LCAxMDUsIDEyNywgMjgsIDg5LCAxMDYsIDE0LCA3NCwgIDg1LCAgMCwgNTYsICA1OSwgIDAsIDMzLCAgIDksICAwLCAgMCwKKyAgICAyMTMsIDY4LCAxMzgsIDE5MCwgNTksIDEyMywgMTY5LCA1MSwgMTA5LCAxNDgsIDQwLCA5NSwgMTI2LCAzMCwgODAsIDEwNiwgMTYsIDY1LCAgODUsICAwLCA0OCwgIDU5LCAgMCwgMjcsICAgOSwgIDAsICAwLAorICAgIDIxNCwgNjksIDEyNSwgMTkwLCA1OSwgMTExLCAxNjgsIDUxLCA5OSwgMTQ4LCA0MSwgODYsIDEyNiwgMzEsIDcyLCAxMDYsIDE4LCA1OCwgIDg1LCAgMCwgNDEsICA1OSwgIDAsIDIwLCAgIDcsICAwLCAgMCwKKyAgICAyMTUsIDcwLCAxMTIsIDE5MCwgNjEsIDEwMCwgMTY5LCA1MiwgODgsIDE0NywgNDIsIDc2LCAxMjYsIDMyLCA2MywgMTA2LCAxOSwgNDksICA4NCwgIDEsIDM0LCAgNTgsICAwLCAxMywgICA3LCAgMCwgIDAsCisgICAgMjE0LCA3MCwgOTksIDE5MCwgNjIsIDg4LCAxNjksIDUzLCA3NywgMTQ3LCA0MywgNjUsIDEyNSwgMzIsIDUzLCAxMDYsIDIwLCA0MCwgIDg0LCAgMywgMjYsICA1OCwgIDAsICA0LCAgIDcsICAwLCAgMCwKKyAgICAyMTQsIDcxLCA4NiwgMTkwLCA2MSwgNzUsIDE2OSwgNTMsIDY1LCAxNDYsIDQzLCA1NCwgMTI2LCAzMywgNDQsIDEwNSwgMjEsIDMxLCAgODMsICA0LCAxNywgIDU3LCAgMCwgIDAsICAgNywgIDAsICAwLAorICAgIDIxNSwgNzEsIDcxLCAxOTEsIDYyLCA2MiwgMTY5LCA1MywgNTMsIDE0NywgNDQsIDQ0LCAxMjYsIDM0LCAzMywgMTA1LCAyMiwgMjAsICA4MywgIDUsICA0LCAgNTcsICAwLCAgMCwgICA3LCAgMCwgIDAsCisgICAgMjE1LCA3MSwgNTQsIDE5MSwgNjIsIDQ3LCAxNjksIDU0LCAzOSwgMTQ3LCA0NCwgMzAsIDEyNiwgMzUsIDIwLCAxMDUsIDIzLCAgNiwgIDgzLCAgNiwgIDAsICA1NiwgIDAsICAwLCAgIDUsICAwLCAgMCwKKyAgICAyMTUsIDcxLCA0MSwgMTkxLCA2MywgMzQsIDE3MCwgNTQsIDI3LCAxNDcsIDQ1LCAxNywgMTI2LCAzNSwgIDYsIDEwNSwgMjMsICAwLCAgODMsICA4LCAgMCwgIDU2LCAgMCwgIDAsICAgNSwgIDAsICAwLAorICAgIDIxMCwgMTMsIDE0MCwgMTg5LCAgMSwgMTI1LCAxNjcsICAwLCAxMTAsIDE0NiwgIDAsIDk2LCAxMjYsICAwLCA4MSwgMTA2LCAgMCwgNjcsICA4NSwgIDAsIDUxLCAgNTksICAwLCAyOCwgICA0LCAgMCwgIDAsCisgICAgMjEyLCAxOCwgMTI2LCAxOTAsICA3LCAxMTMsIDE2OCwgIDAsIDEwMCwgMTQ2LCAgMCwgODYsIDEyNiwgIDAsIDczLCAxMDYsICAwLCA1OSwgIDg0LCAgMCwgNDMsICA1OSwgIDAsIDIyLCAgIDQsICAwLCAgMCwKKyAgICAyMTIsIDIxLCAxMTUsIDE5MCwgMTMsIDEwMywgMTY4LCAgMywgOTEsIDE0NiwgIDAsIDc4LCAxMjUsICAwLCA2NSwgMTA1LCAgMCwgNTIsICA4NCwgIDAsIDM2LCAgNTgsICAwLCAxNiwgICA0LCAgMCwgIDAsCisgICAgMjEzLCAyNCwgMTAzLCAxODksIDE5LCA5MSwgMTY4LCAgOSwgODIsIDE0NiwgIDAsIDY5LCAxMjUsICAwLCA1NywgMTA1LCAgMCwgNDQsICA4NCwgIDAsIDI5LCAgNTgsICAwLCAgNywgICA0LCAgMCwgIDAsCisgICAgMjEzLCAyNywgOTIsIDE4OCwgMjEsIDgxLCAxNjgsIDE0LCA3MSwgMTQ2LCAgMSwgNTksIDEyNSwgIDAsIDQ4LCAxMDUsICAwLCAzNiwgIDg0LCAgMCwgMjEsICA1OCwgIDAsICA0LCAgIDQsICAwLCAgMCwKKyAgICAyMTMsIDMwLCA4MCwgMTg5LCAyMiwgNjksIDE2OCwgMTcsIDYxLCAxNDYsICA1LCA1MCwgMTI1LCAgMCwgMzksIDEwNCwgIDAsIDI3LCAgODMsICAwLCAxMiwgIDU3LCAgMCwgIDAsICAgNCwgIDAsICAwLAorICAgIDIxNCwgMzAsIDY3LCAxODksIDI1LCA1NywgMTY4LCAyMCwgNTAsIDE0NiwgIDksIDQwLCAxMjUsICAwLCAyOSwgMTA0LCAgMCwgMTcsICA4MywgIDAsICAyLCAgNTYsICAwLCAgMCwgICA0LCAgMCwgIDAsCisgICAgMjE0LCAzMiwgNTMsIDE4OSwgMjcsIDQ0LCAxNjksIDIwLCAzOCwgMTQ2LCAxMywgMjgsIDEyNCwgIDIsIDE3LCAxMDQsICAwLCAgNCwgIDgzLCAgMCwgIDAsICA1NiwgIDAsICAwLCAgIDQsICAwLCAgMCwKKyAgICAyMTQsIDMzLCA0MSwgMTkwLCAyNywgMzMsIDE2OCwgMjMsIDI3LCAxNDYsIDEzLCAxOCwgMTI1LCAgMywgIDUsIDEwNSwgIDAsICAwLCAgODMsICAwLCAgMCwgIDU2LCAgMCwgIDAsICAgNCwgIDAsICAwLAorICAgIDE4NSwgMjI5LCAyNTAsIDE2NCwgMjA0LCAyMjMsIDE0NiwgMTgyLCAxOTksIDEyNywgMTU4LCAxNzQsIDEwOCwgMTM2LCAxNDksICA4OSwgMTEzLCAxMjUsICA3MCwgOTAsIDEwMCwgIDQ2LCA2MiwgNzEsICAxMCwgMjUsIDMzLAorICAgIDE4OSwgMjI3LCAyMjUsIDE2OCwgMjAyLCAyMDEsIDE0OCwgMTgxLCAxNzksIDEyOSwgMTU3LCAxNTYsIDEwOSwgMTM1LCAxMzQsICA5MCwgMTEzLCAxMTMsICA3MCwgODksIDkwLCAgNDYsIDYyLCA2MiwgICA4LCAyNCwgMjUsCisgICAgMTkyLCAyMjYsIDIwMiwgMTcwLCAyMDIsIDE4MiwgMTUxLCAxNzksIDE2MiwgMTMwLCAxNTYsIDE0MSwgMTEwLCAxMzMsIDEyMSwgIDkxLCAxMTIsIDEwMSwgIDcxLCA4OSwgODAsICA0NiwgNjEsIDU0LCAgIDcsIDI0LCAxOSwKKyAgICAxOTQsIDIyNCwgMTc5LCAxNzMsIDIwMCwgMTYwLCAxNTMsIDE3OCwgMTQ0LCAxMzIsIDE1NSwgMTI1LCAxMTIsIDEzMywgMTA3LCAgOTIsIDExMSwgODksICA3MSwgODgsIDY5LCAgNDYsIDYxLCA0NSwgICA2LCAyMywgMTAsCisgICAgMTk2LCAyMjMsIDE1NSwgMTc0LCAxOTgsIDEzOSwgMTU0LCAxNzYsIDEyNCwgMTMyLCAxNTMsIDEwNywgMTEzLCAxMzEsIDkxLCAgOTIsIDExMCwgNzUsICA3MiwgODcsIDU4LCAgNDcsIDYwLCAzNywgICA0LCAyMywgIDAsCisgICAgMTk4LCAyMjEsIDEzMSwgMTc1LCAxOTcsIDExNywgMTU1LCAxNzUsIDEwNSwgMTMzLCAxNTIsIDkxLCAxMTMsIDEzMCwgNzYsICA5MiwgMTA5LCA2MywgIDcyLCA4NiwgNDcsICA0NiwgNjAsIDI2LCAgIDMsIDIzLCAgMCwKKyAgICAyMDAsIDIyMCwgMTA0LCAxNzYsIDE5NiwgOTQsIDE1NiwgMTc1LCA4NCwgMTM0LCAxNTEsIDcyLCAxMTMsIDEyOSwgNTksICA5MywgMTA4LCA0NywgIDcyLCA4NSwgMzMsICA0NiwgNTksIDEzLCAgIDAsIDIzLCAgMCwKKyAgICAyMDEsIDIxOSwgNzMsIDE3OSwgMTk1LCA2NSwgMTU3LCAxNzMsIDU3LCAxMzUsIDE1MCwgNDgsIDExNCwgMTI5LCAzOSwgIDk0LCAxMDgsIDI4LCAgNzIsIDg1LCAxNSwgIDQ3LCA1OSwgIDAsICAgMCwgMjIsICAwLAorICAgIDIwMywgMjE5LCA0MiwgMTc4LCAxOTUsIDM3LCAxNTcsIDE3MywgMzIsIDEzNSwgMTUwLCAyNiwgMTE0LCAxMjgsIDE2LCAgOTQsIDEwNywgIDYsICA3MywgODUsICAwLCAgNDYsIDU4LCAgMCwgICAwLCAyMiwgIDAsCisgICAgMTg2LCAyMDUsIDIzMywgMTY1LCAxODMsIDIwOSwgMTQ4LCAxNjMsIDE4NywgMTI4LCAxNDIsIDE2MywgMTA5LCAxMjEsIDE0MCwgIDkxLCAxMDEsIDExOCwgIDcxLCA4MCwgOTQsICA0OCwgNTQsIDY2LCAgMTIsIDE1LCAyNywKKyAgICAxODksIDIwNCwgMjExLCAxNjksIDE4MiwgMTg5LCAxNTEsIDE2MywgMTY5LCAxMzEsIDE0MSwgMTQ3LCAxMTEsIDEyMSwgMTI2LCAgOTIsIDEwMSwgMTA1LCAgNzIsIDc5LCA4NCwgIDQ4LCA1NCwgNTgsICAxMSwgMTUsIDE5LAorICAgIDE5MiwgMjAyLCAxOTAsIDE3MSwgMTgxLCAxNzAsIDE1MiwgMTYxLCAxNTIsIDEzMSwgMTQxLCAxMzMsIDExMiwgMTIwLCAxMTMsICA5MywgMTAwLCA5NCwgIDcyLCA3OSwgNzQsICA0OCwgNTMsIDUwLCAgMTAsIDE1LCAxMSwKKyAgICAxOTUsIDIwMSwgMTY5LCAxNzIsIDE3OSwgMTUxLCAxNTMsIDE2MCwgMTM1LCAxMzIsIDEzOSwgMTE3LCAxMTMsIDExOSwgMTAwLCAgOTMsIDk5LCA4MiwgIDcyLCA3OCwgNjQsICA0OCwgNTMsIDQxLCAgIDksIDE0LCAgMywKKyAgICAxOTUsIDIwMCwgMTQ2LCAxNzQsIDE3OSwgMTMxLCAxNTQsIDE1OSwgMTE3LCAxMzMsIDEzOCwgMTAxLCAxMTMsIDExOCwgODYsICA5MywgOTgsIDcwLCAgNzMsIDc3LCA1MywgIDQ4LCA1MiwgMzIsICAgOCwgMTUsICAwLAorICAgIDE5OCwgMTk5LCAxMjUsIDE3NSwgMTc3LCAxMTEsIDE1NSwgMTU4LCAxMDAsIDEzMywgMTM3LCA4NSwgMTEzLCAxMTcsIDcxLCAgOTMsIDk3LCA1NywgIDcyLCA3NywgNDIsICA0NywgNTIsIDIyLCAgIDUsIDE0LCAgMCwKKyAgICAxOTksIDE5OCwgMTAxLCAxNzYsIDE3NywgODksIDE1NSwgMTU3LCA3OSwgMTM0LCAxMzYsIDY4LCAxMTMsIDExNiwgNTYsICA5NCwgOTcsIDQ0LCAgNzMsIDc2LCAzMCwgIDQ3LCA1MiwgMTAsICAgMiwgMTUsICAwLAorICAgIDIwMCwgMTk3LCA3MiwgMTc4LCAxNzYsIDYzLCAxNTcsIDE1NiwgNTYsIDEzNSwgMTM2LCA0NiwgMTE0LCAxMTYsIDM3LCAgOTQsIDk2LCAyNiwgIDczLCA3NiwgMTEsICA0NywgNTEsICAwLCAgIDAsIDE0LCAgMCwKKyAgICAyMDEsIDE5NywgNDUsIDE3NywgMTc1LCAzOCwgMTU2LCAxNTUsIDMxLCAxMzUsIDEzNSwgMjUsIDExNCwgMTE1LCAxNywgIDk0LCA5NiwgIDUsICA3MywgNzUsICAwLCAgNDYsIDUxLCAgMCwgICAwLCAxNCwgIDAsCisgICAgMTg3LCAxODMsIDIxOCwgMTY3LCAxNjUsIDE5NywgMTQ5LCAxNDcsIDE3NiwgMTI5LCAxMjcsIDE1MywgMTExLCAxMDksIDEzMiwgIDkyLCA5MCwgMTExLCAgNzMsIDcwLCA4OSwgIDQ5LCA0NiwgNjIsICAxNSwgIDQsIDIyLAorICAgIDE5MCwgMTgzLCAxOTcsIDE3MCwgMTY0LCAxNzcsIDE1MSwgMTQ2LCAxNTksIDEzMCwgMTI3LCAxMzksIDExMiwgMTA5LCAxMTksICA5MywgOTAsIDk5LCAgNzIsIDcwLCA3OCwgIDQ5LCA0NSwgNTMsICAxNCwgIDQsIDE1LAorICAgIDE5MiwgMTgyLCAxNzksIDE3MSwgMTYzLCAxNjEsIDE1MywgMTQ1LCAxNDQsIDEzMiwgMTI2LCAxMjUsIDExMywgMTA4LCAxMDcsICA5MywgODksIDg4LCAgNzMsIDcwLCA2OSwgIDQ5LCA0NSwgNDUsICAxMywgIDUsICA2LAorICAgIDE5NSwgMTgxLCAxNTksIDE3MiwgMTYyLCAxNDIsIDE1MiwgMTQ1LCAxMjcsIDEzMiwgMTI1LCAxMTEsIDExMywgMTA3LCA5NCwgIDkzLCA4OCwgNzcsICA3MywgNjksIDU5LCAgNDgsIDQ1LCAzNywgIDExLCAgNSwgIDAsCisgICAgMTk1LCAxODAsIDEzOSwgMTczLCAxNjEsIDEyNCwgMTUzLCAxNDMsIDExMCwgMTMzLCAxMjUsIDk2LCAxMTMsIDEwNiwgODEsICA5NCwgODgsIDY2LCAgNzMsIDY4LCA0OSwgIDQ5LCA0NCwgMjgsICAgOSwgIDYsICAwLAorICAgIDE5NiwgMTc5LCAxMTgsIDE3NCwgMTYwLCAxMDYsIDE1NCwgMTQyLCA5NCwgMTMzLCAxMjQsIDgxLCAxMTMsIDEwNSwgNjgsICA5NCwgODcsIDU0LCAgNzMsIDY4LCAzOSwgIDQ4LCA0NCwgMTgsICAgNSwgIDUsICAwLAorICAgIDE5NywgMTc4LCA5NiwgMTc2LCAxNTksIDg2LCAxNTUsIDE0MSwgNzUsIDEzNCwgMTIzLCA2NCwgMTE0LCAxMDUsIDUzLCAgOTQsIDg3LCA0MCwgIDczLCA2OCwgMjYsICA0OCwgNDQsICA1LCAgIDIsICA2LCAgMCwKKyAgICAxOTksIDE3OCwgNzAsIDE3NiwgMTU4LCA2MiwgMTU2LCAxNDEsIDU0LCAxMzQsIDEyMiwgNDQsIDExNCwgMTA0LCAzNSwgIDk0LCA4NiwgMjMsICA3MywgNjcsICA4LCAgNDcsIDQ0LCAgMCwgICAyLCAgNiwgIDAsCisgICAgMTk5LCAxNzcsIDQ1LCAxNzgsIDE1OCwgNDAsIDE1NiwgMTQwLCAzMiwgMTM1LCAxMjIsIDI2LCAxMTQsIDEwNCwgMTYsICA5NCwgODYsICA0LCAgNzMsIDY3LCAgMCwgIDQ3LCA0NCwgIDAsICAgMCwgIDcsICAwLAorICAgIDE4OCwgMTYxLCAyMDQsIDE2OCwgMTQ0LCAxODMsIDE0OSwgMTI5LCAxNjQsIDEzMCwgMTEyLCAxNDQsIDExMiwgOTUsIDEyMywgIDkzLCA3OCwgMTAzLCAgNzQsIDYwLCA4MSwgIDUwLCAzNiwgNTYsICAxNiwgIDAsIDE2LAorICAgIDE5MCwgMTYwLCAxODUsIDE3MCwgMTQ0LCAxNjUsIDE1MSwgMTI4LCAxNDgsIDEzMiwgMTExLCAxMzAsIDExMiwgOTUsIDExMCwgIDkzLCA3OCwgOTIsICA3NCwgNTksIDcyLCAgNTAsIDM2LCA0OCwgIDE2LCAgMCwgIDgsCisgICAgMTkyLCAxNjAsIDE2NywgMTcxLCAxNDMsIDE1MCwgMTUzLCAxMjgsIDEzNCwgMTMyLCAxMTEsIDExNywgMTEyLCA5NCwgMTAwLCAgOTQsIDc3LCA4MiwgIDc0LCA1OSwgNjMsICA1MCwgMzYsIDQwLCAgMTQsICAwLCAgMCwKKyAgICAxOTMsIDE1OSwgMTQ5LCAxNzIsIDE0MywgMTM0LCAxNTMsIDEyNywgMTE5LCAxMzMsIDExMCwgMTAzLCAxMTMsIDk0LCA4NywgIDkzLCA3NywgNzIsICA3MywgNTksIDU0LCAgNTAsIDM2LCAzMiwgIDEyLCAgMCwgIDAsCisgICAgMTk1LCAxNTksIDEzMSwgMTczLCAxNDIsIDExNywgMTUzLCAxMjcsIDEwNCwgMTMyLCAxMTAsIDkwLCAxMTMsIDkzLCA3NiwgIDkzLCA3NiwgNjEsICA3NCwgNTksIDQ1LCAgNDksIDM2LCAyMywgICA5LCAgMCwgIDAsCisgICAgMTk2LCAxNTgsIDExMywgMTc0LCAxNDEsIDEwMSwgMTU1LCAxMjYsIDg5LCAxMzMsIDEwOSwgNzYsIDExMywgOTMsIDY0LCAgOTQsIDc2LCA1MSwgIDc0LCA1OCwgMzUsICA0OSwgMzYsIDE0LCAgIDYsICAwLCAgMCwKKyAgICAxOTcsIDE1NywgOTIsIDE3NCwgMTQxLCA4MCwgMTU0LCAxMjUsIDcxLCAxMzQsIDEwOCwgNjAsIDExNCwgOTIsIDUwLCAgOTQsIDc1LCAzNywgIDczLCA1OCwgMjIsICA0OCwgMzYsICAxLCAgIDUsICAwLCAgMCwKKyAgICAxOTcsIDE1NywgNjgsIDE3NSwgMTQwLCA1OSwgMTU1LCAxMjQsIDUxLCAxMzQsIDEwOCwgNDEsIDExMywgOTEsIDMyLCAgOTQsIDc1LCAyMSwgIDczLCA1NywgIDUsICA0OCwgMzUsICAwLCAgIDUsICAwLCAgMCwKKyAgICAxOTgsIDE1NiwgNDYsIDE3NiwgMTQwLCA0MCwgMTU1LCAxMjQsIDMyLCAxMzQsIDEwNywgMjQsIDExNCwgOTEsIDE0LCAgOTQsIDc1LCAgMiwgIDczLCA1NywgIDAsICA0OCwgMzYsICAwLCAgIDMsICAwLCAgMCwKKyAgICAxODksIDE0MCwgMTkxLCAxNjgsIDEyNiwgMTcyLCAxNTAsIDExMiwgMTU0LCAxMzEsIDk3LCAxMzQsIDExMiwgODIsIDExNSwgIDk0LCA2NiwgOTYsICA3NCwgNDksIDc1LCAgNTEsIDI1LCA1MCwgIDEyLCAgMCwgMTAsCisgICAgMTkxLCAxMzksIDE3MywgMTcwLCAxMjUsIDE1NCwgMTUyLCAxMTEsIDEzOCwgMTMyLCA5NiwgMTIxLCAxMTMsIDgxLCAxMDMsICA5NCwgNjYsIDg1LCAgNzQsIDQ4LCA2NiwgIDUwLCAyNiwgNDIsICAxMiwgIDAsICAxLAorICAgIDE5MiwgMTM5LCAxNTcsIDE3MSwgMTI1LCAxNDAsIDE1MiwgMTExLCAxMjUsIDEzMiwgOTYsIDEwOSwgMTEzLCA4MSwgOTIsICA5NCwgNjUsIDc2LCAgNzQsIDQ4LCA1OCwgIDUwLCAyNiwgMzUsICAgOSwgIDAsICAwLAorICAgIDE5MywgMTM5LCAxNDAsIDE3MiwgMTI0LCAxMjUsIDE1MywgMTEwLCAxMTIsIDEzMywgOTUsIDk2LCAxMTMsIDgwLCA4MiwgIDk0LCA2NSwgNjYsICA3NCwgNDksIDUwLCAgNTAsIDI2LCAyOCwgICA3LCAgMCwgIDAsCisgICAgMTk0LCAxMzgsIDEyMywgMTcyLCAxMjMsIDEwOSwgMTUzLCAxMTAsIDk3LCAxMzMsIDk1LCA4NCwgMTEzLCA4MCwgNzAsICA5NCwgNjUsIDU2LCAgNzQsIDQ4LCA0MCwgIDUwLCAyNiwgMjAsICAgNiwgIDAsICAwLAorICAgIDE5NCwgMTM4LCAxMDUsIDE3MywgMTIzLCA5NCwgMTUzLCAxMDksIDgzLCAxMzMsIDk0LCA3MCwgMTEyLCA3OSwgNTksICA5NCwgNjQsIDQ2LCAgNzQsIDQ4LCAzMSwgIDUwLCAyNiwgIDksICAgNCwgIDAsICAwLAorICAgIDE5NiwgMTM4LCA4NywgMTc0LCAxMjIsIDc3LCAxNTMsIDEwOSwgNjcsIDEzMywgOTMsIDU2LCAxMTMsIDc5LCA0NiwgIDk0LCA2NCwgMzQsICA3MywgNDgsIDE4LCAgNDksIDI3LCAgMCwgICA0LCAgMCwgIDAsCisgICAgMTk2LCAxMzcsIDY1LCAxNzQsIDEyMiwgNTcsIDE1NCwgMTA4LCA0OSwgMTMzLCA5MywgMzksIDExMywgNzksIDI5LCAgOTQsIDY0LCAxOCwgIDc0LCA0OCwgIDMsICA0OSwgMjcsICAwLCAgIDIsICAwLCAgMCwKKyAgICAxOTcsIDEzNywgNDcsIDE3NSwgMTIyLCA0MCwgMTU1LCAxMDgsIDMyLCAxMzMsIDkzLCAyMywgMTE0LCA3OSwgMTQsICA5NCwgNjQsICAxLCAgNzMsIDQ4LCAgMCwgIDQ4LCAyNywgIDAsICAgMiwgIDAsICAwLAorICAgIDE4OSwgMTE5LCAxNzcsIDE2OCwgMTA2LCAxNTksIDE1MCwgOTQsIDE0MiwgMTMxLCA4MSwgMTI0LCAxMTMsIDY3LCAxMDcsICA5NCwgNTMsIDg5LCAgNzQsIDM3LCA2OSwgIDUxLCAxMSwgNDUsICAgNiwgIDAsICAzLAorICAgIDE5MSwgMTE5LCAxNjEsIDE3MCwgMTA2LCAxNDQsIDE1MiwgOTQsIDEyOSwgMTMyLCA4MSwgMTEyLCAxMTMsIDY3LCA5NiwgIDk0LCA1MywgNzksICA3NCwgMzcsIDYxLCAgNTEsIDEzLCAzOCwgICA2LCAgMCwgIDAsCisgICAgMTkyLCAxMTksIDE0NiwgMTcwLCAxMDYsIDEzMSwgMTUyLCA5NCwgMTE3LCAxMzIsIDgwLCAxMDEsIDExMiwgNjcsIDg1LCAgOTQsIDUzLCA3MCwgIDc0LCAzNywgNTMsICA1MCwgMTQsIDMxLCAgIDQsICAwLCAgMCwKKyAgICAxOTIsIDExOSwgMTMxLCAxNzEsIDEwNiwgMTE3LCAxNTMsIDk0LCAxMDUsIDEzMiwgODAsIDg5LCAxMTMsIDY3LCA3NSwgIDk0LCA1NCwgNjEsICA3NCwgMzgsIDQ1LCAgNTEsIDE0LCAyMywgICAzLCAgMCwgIDAsCisgICAgMTkzLCAxMTgsIDExNCwgMTcxLCAxMDYsIDEwMiwgMTUzLCA5MywgOTAsIDEzMiwgODAsIDc4LCAxMTMsIDY3LCA2NSwgIDk0LCA1MywgNTIsICA3NCwgMzcsIDM2LCAgNTAsIDE1LCAxNiwgICAxLCAgMCwgIDAsCisgICAgMTk0LCAxMTgsIDk5LCAxNzIsIDEwNSwgODksIDE1MywgOTMsIDc4LCAxMzIsIDgwLCA2NiwgMTEzLCA2NywgNTQsICA5NCwgNTMsIDQyLCAgNzQsIDM4LCAyNywgIDUwLCAxNiwgIDUsICAgMSwgIDAsICAwLAorICAgIDE5NCwgMTE4LCA4MiwgMTczLCAxMDUsIDcyLCAxNTMsIDkzLCA2MywgMTMyLCA3OSwgNTMsIDExMywgNjcsIDQyLCAgOTQsIDUzLCAzMCwgIDc0LCAzOCwgMTUsICA0OSwgMTYsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxOTUsIDExNywgNjMsIDE3MywgMTA1LCA1NSwgMTU0LCA5MywgNDcsIDEzMywgNzksIDM3LCAxMTMsIDY2LCAyNywgIDk0LCA1MywgMTUsICA3MywgMzgsICAwLCAgNDgsIDE2LCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTk1LCAxMTcsIDQ2LCAxNzMsIDEwNCwgMzksIDE1NCwgOTIsIDMyLCAxMzMsIDc5LCAyMiwgMTEzLCA2NiwgMTMsICA5NCwgNTMsICAwLCAgNzMsIDM4LCAgMCwgIDQ4LCAxNywgIDAsICAgMCwgIDAsICAwLAorICAgIDE4OSwgOTYsIDE2NiwgMTY4LCA4NSwgMTQ3LCAxNTAsIDc0LCAxMzIsIDEzMSwgNjIsIDExNSwgMTEzLCA1MSwgOTksICA5NCwgMzgsIDgyLCAgNzQsIDIxLCA2MywgIDUxLCAgMCwgNDAsICAgMSwgIDAsICAwLAorICAgIDE5MCwgOTYsIDE1MCwgMTcwLCA4NSwgMTMzLCAxNTIsIDc1LCAxMTksIDEzMiwgNjMsIDEwNCwgMTEzLCA1MSwgODgsICA5NCwgMzgsIDcyLCAgNzUsIDIyLCA1NSwgIDUxLCAgMCwgMzMsICAgMSwgIDAsICAwLAorICAgIDE5MiwgOTYsIDEzNywgMTcwLCA4NSwgMTIxLCAxNTIsIDc0LCAxMDgsIDEzMiwgNjQsIDk0LCAxMTMsIDUyLCA3OSwgIDk0LCAzOSwgNjQsICA3NCwgMjMsIDQ4LCAgNTAsICAwLCAyNiwgICAwLCAgMCwgIDAsCisgICAgMTkyLCA5NiwgMTIyLCAxNzEsIDg2LCAxMDksIDE1MiwgNzUsIDk2LCAxMzIsIDYzLCA4MywgMTEzLCA1MiwgNjksICA5NCwgMzksIDU2LCAgNzQsIDI0LCA0MSwgIDUwLCAgMCwgMTksICAgMCwgIDAsICAwLAorICAgIDE5MywgOTYsIDEwNywgMTcxLCA4NSwgOTYsIDE1MiwgNzUsIDg0LCAxMzIsIDY0LCA3MiwgMTEzLCA1MiwgNjAsICA5NCwgMzksIDQ3LCAgNzQsIDI0LCAzMiwgIDUwLCAgMSwgMTAsICAgMCwgIDAsICAwLAorICAgIDE5MywgOTYsIDkzLCAxNzIsIDg1LCA4MiwgMTUyLCA3NSwgNzIsIDEzMywgNjMsIDYxLCAxMTMsIDUxLCA0OSwgIDk0LCAzOSwgMzcsICA3MywgMjUsIDIzLCAgNDksICAyLCAgMiwgICAwLCAgMCwgIDAsCisgICAgMTk0LCA5NiwgNzgsIDE3MiwgODUsIDY4LCAxNTIsIDc1LCA1OSwgMTMyLCA2MywgNDksIDExMywgNTIsIDM5LCAgOTQsIDQwLCAyNiwgIDczLCAyNSwgMTEsICA0OCwgIDMsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxOTQsIDk2LCA2MCwgMTczLCA4NSwgNTIsIDE1MywgNzUsIDQ0LCAxMzIsIDY0LCAzNSwgMTEyLCA1MiwgMjUsICA5NCwgNDAsIDEyLCAgNzMsIDI2LCAgMCwgIDQ4LCAgNCwgIDAsICAgMCwgIDAsICAwLAorICAgIDE5NSwgOTYsIDQ2LCAxNzMsIDg1LCAzOCwgMTU0LCA3NCwgMzEsIDEzMywgNjMsIDIyLCAxMTMsIDUyLCAxMSwgIDkzLCA0MCwgIDAsICA3MywgMjYsICAwLCAgNDcsICA1LCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTg4LCA2NywgMTUzLCAxNjgsIDU4LCAxMzcsIDE1MSwgNDksIDEyMiwgMTMxLCAzOSwgMTA2LCAxMTMsIDI4LCA5MCwgIDk0LCAxMywgNzUsICA3NSwgIDAsIDU3LCAgNTEsICAwLCAzNSwgICAwLCAgMCwgIDAsCisgICAgMTkwLCA2OCwgMTM4LCAxNzAsIDU5LCAxMjMsIDE1MiwgNTAsIDExMCwgMTMyLCA0MSwgOTYsIDExMywgMjksIDgwLCAgOTQsIDE2LCA2NiwgIDc1LCAgMCwgNDksICA1MCwgIDAsIDI3LCAgIDAsICAwLCAgMCwKKyAgICAxOTEsIDY5LCAxMjYsIDE3MCwgNTksIDExMiwgMTUxLCA1MiwgMTAwLCAxMzIsIDQyLCA4NiwgMTEzLCAzMCwgNzMsICA5NSwgMTcsIDU4LCAgNzUsICAwLCA0MiwgIDUwLCAgMCwgMjEsICAgMCwgIDAsICAwLAorICAgIDE5MiwgNzAsIDExMywgMTcwLCA2MSwgMTAwLCAxNTEsIDUyLCA4OSwgMTMyLCA0MiwgNzcsIDExMywgMzEsIDY0LCAgOTQsIDE5LCA1MCwgIDc0LCAgMSwgMzUsICA1MCwgIDAsIDE0LCAgIDAsICAwLCAgMCwKKyAgICAxOTIsIDcwLCAxMDAsIDE3MCwgNjIsIDg5LCAxNTEsIDUzLCA3NywgMTMxLCA0MywgNjYsIDExMiwgMzIsIDU0LCAgOTQsIDIwLCA0MiwgIDc0LCAgMiwgMjcsICA0OSwgIDAsICA1LCAgIDAsICAwLCAgMCwKKyAgICAxOTIsIDcxLCA4NywgMTcxLCA2MSwgNzcsIDE1MiwgNTMsIDY3LCAxMzEsIDQ0LCA1NywgMTEyLCAzMywgNDUsICA5NCwgMjEsIDMzLCAgNzQsICA0LCAxOSwgIDQ5LCAgMCwgIDEsICAgMCwgIDAsICAwLAorICAgIDE5MywgNzEsIDc0LCAxNzEsIDYyLCA2NCwgMTUyLCA1MywgNTUsIDEzMiwgNDQsIDQ1LCAxMTMsIDM0LCAzNCwgIDk0LCAyMiwgMjMsICA3MywgIDUsICA3LCAgNDgsICAwLCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTkzLCA3MCwgNTgsIDE3MiwgNjIsIDUwLCAxNTIsIDU0LCA0MiwgMTMyLCA0NCwgMzIsIDExMiwgMzUsIDIyLCAgOTMsIDIzLCAxMCwgIDczLCAgNiwgIDAsICA0NywgIDAsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxOTMsIDcwLCA0NSwgMTcyLCA2MiwgMzgsIDE1MywgNTQsIDMxLCAxMzIsIDQ0LCAyMSwgMTEyLCAzNSwgIDksICA5NCwgMjMsICAwLCAgNzMsICA3LCAgMCwgIDQ3LCAgMCwgIDAsICAgMCwgIDAsICAwLAorICAgIDE4OSwgMjYsIDE0MSwgMTY5LCAxNSwgMTI2LCAxNTAsICAyLCAxMTIsIDEzMSwgIDAsIDk3LCAxMTMsICAwLCA4MiwgIDk0LCAgMCwgNjcsICA3NSwgIDAsIDUxLCAgNTAsICAwLCAyOSwgICAwLCAgMCwgIDAsCisgICAgMTkwLCAyOCwgMTI4LCAxNzAsIDE4LCAxMTQsIDE1MSwgIDgsIDEwMSwgMTMyLCAgMCwgODgsIDExMywgIDAsIDc0LCAgOTQsICAwLCA2MCwgIDc1LCAgMCwgNDQsICA1MCwgIDAsIDIzLCAgIDAsICAwLCAgMCwKKyAgICAxOTEsIDMwLCAxMTcsIDE3MCwgMjMsIDEwNCwgMTUyLCAxMSwgOTIsIDEzMiwgIDEsIDc5LCAxMTMsICAwLCA2NywgIDk1LCAgMCwgNTMsICA3NSwgIDAsIDM3LCAgNTAsICAwLCAxNywgICAwLCAgMCwgIDAsCisgICAgMTkxLCAzMywgMTA1LCAxNzAsIDI2LCA5MywgMTUxLCAxOCwgODMsIDEzMiwgIDYsIDcwLCAxMTIsICAwLCA1OCwgIDk0LCAgMCwgNDUsICA3NSwgIDAsIDMwLCAgNDksICAwLCAgOCwgICAwLCAgMCwgIDAsCisgICAgMTkxLCAzNCwgOTMsIDE3MCwgMjcsIDgyLCAxNTEsIDIwLCA3MiwgMTMxLCAgOCwgNjEsIDExMiwgIDAsIDQ5LCAgOTQsICAwLCAzOCwgIDc0LCAgMCwgMjMsICA0OSwgIDAsICA0LCAgIDAsICAwLCAgMCwKKyAgICAxOTEsIDM2LCA4MiwgMTcwLCAyOSwgNzEsIDE1MSwgMjIsIDYzLCAxMzEsIDExLCA1MiwgMTEyLCAgMCwgNDEsICA5MywgIDAsIDI5LCAgNzQsICAwLCAxNCwgIDQ4LCAgMCwgIDEsICAgMCwgIDAsICAwLAorICAgIDE5MSwgMzgsIDY5LCAxNzAsIDMxLCA2MCwgMTUxLCAyNCwgNTEsIDEzMSwgMTQsIDQxLCAxMTIsICAxLCAzMSwgIDkzLCAgMCwgMTksICA3MywgIDAsICAzLCAgNDgsICAwLCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTkyLCAzNywgNTYsIDE3MSwgMzEsIDQ3LCAxNTIsIDI1LCA0MCwgMTMxLCAxNywgMzAsIDExMiwgIDQsIDE5LCAgOTMsICAwLCAgNywgIDczLCAgMCwgIDAsICA0NywgIDAsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxOTIsIDM4LCA0NSwgMTcxLCAzMywgMzYsIDE1MiwgMjYsIDMwLCAxMzEsIDE4LCAyMSwgMTExLCAgNywgIDksICA5MywgIDAsICAwLCAgNzMsICAwLCAgMCwgIDQ3LCAgMCwgIDAsICAgMCwgIDAsICAwLAorICAgIDE0OSwgMjE4LCAyNDgsIDEzMywgMTk0LCAyMjIsIDExOSwgMTczLCAxOTgsIDEwMiwgMTUxLCAxNzMsICA4NiwgMTMwLCAxNDgsICA3MCwgMTA4LCAxMjUsICA1MywgODUsIDEwMCwgIDMyLCA1OSwgNzEsICAgMCwgMjIsIDMzLAorICAgIDE1NCwgMjE2LCAyMjMsIDEzNywgMTkzLCAyMDAsIDEyMiwgMTcyLCAxNzgsIDEwNiwgMTUwLCAxNTYsICA4OSwgMTI4LCAxMzMsICA3MywgMTA3LCAxMTIsICA1NCwgODUsIDg5LCAgMzEsIDU5LCA2MywgICAwLCAyMiwgMjYsCisgICAgMTU5LCAyMTUsIDIwMiwgMTQxLCAxOTIsIDE4MSwgMTI2LCAxNzEsIDE2MSwgMTA4LCAxNDksIDE0MSwgIDkwLCAxMjgsIDEyMSwgIDc0LCAxMDcsIDEwMCwgIDU1LCA4NSwgODAsICAzMiwgNTgsIDU1LCAgIDAsIDIyLCAxOSwKKyAgICAxNjEsIDIxMywgMTc5LCAxNDQsIDE5MCwgMTYwLCAxMjYsIDE3MCwgMTQzLCAxMDksIDE0OCwgMTI1LCAgOTIsIDEyNywgMTA3LCAgNzQsIDEwNiwgODksICA1NiwgODQsIDY5LCAgMzIsIDU4LCA0NiwgICAwLCAyMSwgMTEsCisgICAgMTYzLCAyMTEsIDE1NiwgMTQ0LCAxODksIDEzOSwgMTI5LCAxNjgsIDEyNSwgMTEwLCAxNDcsIDEwOCwgIDkzLCAxMjYsIDkyLCAgNzUsIDEwNSwgNzYsICA1NywgODMsIDU4LCAgMzMsIDU4LCAzNywgICAwLCAyMSwgIDEsCisgICAgMTY3LCAyMTEsIDEzMywgMTQ3LCAxODgsIDEyMCwgMTMwLCAxNjcsIDEwNSwgMTEwLCAxNDUsIDkyLCAgOTMsIDEyNSwgNzgsICA3NiwgMTA0LCA2NCwgIDU4LCA4MywgNDgsICAzMywgNTcsIDI3LCAgIDAsIDIxLCAgMCwKKyAgICAxNjksIDIxMCwgMTA4LCAxNDksIDE4NywgOTYsIDEzMSwgMTY2LCA4NiwgMTEyLCAxNDQsIDc0LCAgOTQsIDEyNCwgNjIsICA3NywgMTAzLCA0OSwgIDU4LCA4MiwgMzUsICAzMywgNTcsIDE1LCAgIDAsIDIxLCAgMCwKKyAgICAxNzAsIDIwOSwgODAsIDE1MSwgMTg2LCA3MSwgMTMzLCAxNjUsIDYyLCAxMTQsIDE0MywgNTIsICA5NSwgMTIzLCA0MiwgIDc3LCAxMDMsIDMyLCAgNTgsIDgxLCAxOCwgIDMzLCA1NiwgIDAsICAgMCwgMjEsICAwLAorICAgIDE3MywgMjA4LCA1NSwgMTUyLCAxODYsIDQ5LCAxMzQsIDE2NSwgNDEsIDExNCwgMTQzLCAzNCwgIDk1LCAxMjIsIDI1LCAgNzcsIDEwMiwgMTQsICA1OCwgODEsICAwLCAgMzMsIDU2LCAgMCwgICAwLCAyMSwgIDAsCisgICAgMTU0LCAxOTUsIDIzMiwgMTM3LCAxNzQsIDIwNywgMTIyLCAxNTYsIDE4NSwgMTA1LCAxMzYsIDE2MywgIDg5LCAxMTYsIDE0MCwgIDczLCA5NywgMTE3LCAgNTYsIDc2LCA5NCwgIDM1LCA1MSwgNjYsICAgMCwgMTMsIDI4LAorICAgIDE1OCwgMTk0LCAyMDksIDE0MSwgMTc0LCAxODcsIDEyNSwgMTU1LCAxNjcsIDEwOSwgMTM1LCAxNDYsICA5MSwgMTE2LCAxMjUsICA3NSwgOTYsIDEwNSwgIDU3LCA3NSwgODMsICAzNSwgNTAsIDU3LCAgIDAsIDEyLCAyMSwKKyAgICAxNjEsIDE5MywgMTg5LCAxNDQsIDE3MywgMTY5LCAxMjgsIDE1NCwgMTUxLCAxMTAsIDEzNCwgMTMyLCAgOTMsIDExNSwgMTEzLCAgNzcsIDk1LCA5NCwgIDU4LCA3NSwgNzQsICAzNSwgNTAsIDUwLCAgIDAsIDEyLCAxMywKKyAgICAxNjQsIDE5MiwgMTY4LCAxNDUsIDE3MSwgMTUxLCAxMjksIDE1MywgMTM0LCAxMTEsIDEzMywgMTE3LCAgOTQsIDExNCwgMTAwLCAgNzYsIDk1LCA4MiwgIDU4LCA3NSwgNjQsICAzNiwgNTAsIDQyLCAgIDAsIDEyLCAgNSwKKyAgICAxNjUsIDE5MSwgMTQ3LCAxNDcsIDE3MCwgMTMxLCAxMzAsIDE1MiwgMTE3LCAxMTMsIDEzMiwgMTAyLCAgOTUsIDExMywgODYsICA3NywgOTQsIDcxLCAgNTgsIDc0LCA1NCwgIDM1LCA1MCwgMzMsICAgMCwgMTMsICAwLAorICAgIDE2NywgMTg5LCAxMjYsIDE0OCwgMTY5LCAxMTMsIDEzMiwgMTUxLCAxMDAsIDExMywgMTMxLCA4NiwgIDk2LCAxMTIsIDczLCAgNzcsIDkzLCA1OSwgIDU5LCA3MywgNDMsICAzNSwgNDksIDIzLCAgIDAsIDEyLCAgMCwKKyAgICAxNzAsIDE4OSwgMTA0LCAxNTAsIDE2OCwgOTEsIDEzMywgMTUwLCA4MSwgMTE0LCAxMzAsIDY5LCAgOTYsIDExMSwgNTcsICA3OCwgOTIsIDQ2LCAgNTksIDczLCAzMSwgIDM1LCA0OSwgMTEsICAgMCwgMTMsICAwLAorICAgIDE3MSwgMTg4LCA3OCwgMTUyLCAxNjgsIDY4LCAxMzQsIDE0OSwgNjAsIDExNSwgMTMwLCA1MCwgIDk2LCAxMTEsIDQxLCAgNzgsIDkyLCAyOSwgIDYwLCA3MywgMTUsICAzNSwgNDksICAwLCAgIDAsIDEyLCAgMCwKKyAgICAxNzMsIDE4NywgNTUsIDE1MywgMTY3LCA0NywgMTM0LCAxNDksIDM5LCAxMTUsIDEyOSwgMzMsICA5NywgMTEwLCAyNCwgIDc5LCA5MiwgMTMsICA2MCwgNzIsICAwLCAgMzUsIDQ4LCAgMCwgICAwLCAxMiwgIDAsCisgICAgMTU3LCAxNzUsIDIxNywgMTM5LCAxNTcsIDE5NiwgMTI1LCAxNDEsIDE3NSwgMTA5LCAxMjIsIDE1MywgIDkyLCAxMDQsIDEzMiwgIDc2LCA4NiwgMTEwLCAgNTksIDY3LCA4OCwgIDM3LCA0MywgNjEsICAgMSwgIDEsIDIzLAorICAgIDE2MSwgMTc0LCAxOTYsIDE0NCwgMTU2LCAxNzYsIDEyNywgMTQwLCAxNTgsIDExMCwgMTIxLCAxMzcsICA5NCwgMTA0LCAxMTgsICA3NywgODUsIDk4LCAgNTksIDY3LCA3OCwgIDM3LCA0MywgNTMsICAgMCwgIDIsIDE2LAorICAgIDE2MywgMTc0LCAxNzgsIDE0NiwgMTU2LCAxNjAsIDEzMCwgMTM5LCAxNDMsIDExMiwgMTIxLCAxMjQsICA5NSwgMTAzLCAxMDYsICA3OCwgODUsIDg4LCAgNjAsIDY2LCA2OSwgIDM3LCA0MiwgNDYsICAgMCwgIDIsICA3LAorICAgIDE2NiwgMTczLCAxNTksIDE0NywgMTU0LCAxNDIsIDEzMCwgMTM4LCAxMjcsIDExMywgMTIwLCAxMTEsICA5NiwgMTAzLCA5NSwgIDc4LCA4NCwgNzcsICA2MCwgNjYsIDU5LCAgMzcsIDQzLCAzNywgICAwLCAgMiwgIDAsCisgICAgMTY2LCAxNzIsIDEzOSwgMTQ4LCAxNTQsIDEyNSwgMTMxLCAxMzcsIDExMiwgMTEzLCAxMjAsIDk2LCAgOTYsIDEwMiwgODEsICA3OCwgODQsIDY2LCAgNjAsIDY1LCA1MCwgIDM3LCA0MiwgMjksICAgMCwgIDMsICAwLAorICAgIDE2NywgMTcxLCAxMjAsIDE0OSwgMTUzLCAxMDcsIDEzMywgMTM3LCA5NSwgMTE0LCAxMTgsIDgxLCAgOTcsIDEwMSwgNjksICA3OSwgODQsIDU2LCAgNjAsIDY1LCA0MCwgIDM3LCA0MiwgMTksICAgMCwgIDMsICAwLAorICAgIDE3MCwgMTcwLCA5OSwgMTUxLCAxNTIsIDg3LCAxMzQsIDEzNiwgNzcsIDExNSwgMTE4LCA2NiwgIDk3LCAxMDEsIDU1LCAgNzksIDgzLCA0MiwgIDYxLCA2NSwgMjgsICAzNywgNDIsICA3LCAgIDAsICAzLCAgMCwKKyAgICAxNzIsIDE3MCwgNzUsIDE1MiwgMTUxLCA2NSwgMTM0LCAxMzUsIDU3LCAxMTUsIDExNywgNDgsICA5NywgMTAwLCAzOCwgIDc5LCA4MywgMjcsICA2MSwgNjQsIDEyLCAgMzYsIDQyLCAgMCwgICAwLCAgMywgIDAsCisgICAgMTcyLCAxNjksIDU1LCAxNTQsIDE1MSwgNDYsIDEzNSwgMTM0LCA0MCwgMTE2LCAxMTYsIDMyLCAgOTcsIDk5LCAyMSwgIDgwLCA4MiwgMTAsICA2MSwgNjQsICAwLCAgMzYsIDQxLCAgMCwgICAwLCAgMywgIDAsCisgICAgMTYwLCAxNTQsIDIwMywgMTQzLCAxMzksIDE4MiwgMTI3LCAxMjQsIDE2NCwgMTExLCAxMDcsIDE0MywgIDk1LCA5MSwgMTIyLCAgNzgsIDc1LCAxMDMsICA2MCwgNTcsIDgxLCAgMzksIDMzLCA1NiwgICAxLCAgMCwgMTgsCisgICAgMTYzLCAxNTQsIDE4NCwgMTQ2LCAxMzgsIDE2NSwgMTMwLCAxMjMsIDE0OCwgMTEzLCAxMDcsIDEyOSwgIDk2LCA5MCwgMTEwLCAgNzksIDc0LCA5MiwgIDYxLCA1NiwgNzIsICAzOSwgMzQsIDQ4LCAgIDIsICAwLCAgOSwKKyAgICAxNjUsIDE1NCwgMTY3LCAxNDcsIDEzNywgMTQ5LCAxMzEsIDEyMiwgMTM0LCAxMTQsIDEwNiwgMTE3LCAgOTYsIDkwLCAxMDAsICA3OSwgNzQsIDgyLCAgNjEsIDU2LCA2NCwgIDM5LCAzMywgNDAsICAgMiwgIDAsICAxLAorICAgIDE2NiwgMTUzLCAxNTAsIDE0OSwgMTM3LCAxMzMsIDEzMiwgMTIyLCAxMTksIDExNCwgMTA2LCAxMDQsICA5NywgOTAsIDg4LCAgNzksIDc0LCA3MiwgIDYxLCA1NiwgNTUsICAzOSwgMzQsIDMzLCAgIDAsICAwLCAgMCwKKyAgICAxNjgsIDE1MiwgMTMyLCAxNDksIDEzNiwgMTE3LCAxMzIsIDEyMSwgMTA0LCAxMTQsIDEwNSwgOTAsICA5NywgODksIDc2LCAgNzksIDczLCA2MiwgIDYxLCA1NiwgNDYsICAzOCwgMzQsIDI1LCAgIDAsICAwLCAgMCwKKyAgICAxNjksIDE1MSwgMTE0LCAxNTAsIDEzNSwgMTAxLCAxMzMsIDEyMSwgOTAsIDExNCwgMTA0LCA3NywgIDk3LCA4OSwgNjUsICA4MCwgNzMsIDUxLCAgNjEsIDU2LCAzNiwgIDM4LCAzNCwgMTYsICAgMCwgIDAsICAwLAorICAgIDE3MCwgMTUwLCA5NCwgMTUxLCAxMzUsIDgzLCAxMzQsIDEyMCwgNzMsIDExNSwgMTA0LCA2MiwgIDk4LCA4OCwgNTEsICA4MCwgNzIsIDM5LCAgNjEsIDU2LCAyNCwgIDM4LCAzNCwgIDMsICAgMCwgIDAsICAwLAorICAgIDE3MiwgMTUwLCA3MiwgMTUzLCAxMzQsIDYzLCAxMzUsIDExOSwgNTUsIDExNSwgMTAzLCA0NSwgIDk4LCA4OCwgMzYsICA4MCwgNzIsIDI0LCAgNjEsIDU1LCAgOSwgIDM4LCAzNCwgIDAsICAgMCwgIDAsICAwLAorICAgIDE3MiwgMTUwLCA1NCwgMTUzLCAxMzQsIDQ3LCAxMzUsIDExOSwgMzgsIDExNiwgMTAzLCAzMCwgIDk4LCA4NywgMjEsICA4MCwgNzIsICA4LCAgNjIsIDU1LCAgMCwgIDM3LCAzNCwgIDAsICAgMCwgIDAsICAwLAorICAgIDE2MiwgMTM0LCAxOTAsIDE0NSwgMTIwLCAxNzEsIDEyOSwgMTA4LCAxNTMsIDExMywgOTMsIDEzNCwgIDk3LCA3OCwgMTE1LCAgODAsIDYzLCA5NiwgIDYyLCA0NiwgNzUsICA0MSwgMjMsIDUxLCAgIDAsICAwLCAxMSwKKyAgICAxNjUsIDEzNCwgMTczLCAxNDcsIDEyMCwgMTU0LCAxMzEsIDEwNywgMTM4LCAxMTQsIDkyLCAxMjAsICA5NywgNzgsIDEwMywgIDgwLCA2MywgODUsICA2MiwgNDYsIDY2LCAgNDAsIDIzLCA0MywgICAwLCAgMCwgIDIsCisgICAgMTY2LCAxMzQsIDE1NywgMTQ4LCAxMjAsIDE0MCwgMTMyLCAxMDYsIDEyNSwgMTE0LCA5MiwgMTA5LCAgOTcsIDc3LCA5MywgIDgxLCA2MywgNzcsICA2MiwgNDYsIDU4LCAgNDAsIDI0LCAzNiwgICAwLCAgMCwgIDAsCisgICAgMTY4LCAxMzMsIDE0MCwgMTQ5LCAxMTksIDEyNSwgMTMyLCAxMDYsIDExMiwgMTE1LCA5MiwgOTcsICA5OCwgNzcsIDgyLCAgODEsIDYyLCA2NywgIDYyLCA0NiwgNTAsICA0MCwgMjQsIDI5LCAgIDAsICAwLCAgMCwKKyAgICAxNjgsIDEzMywgMTIzLCAxNTAsIDExOSwgMTEwLCAxMzMsIDEwNiwgOTcsIDExNSwgOTEsIDg0LCAgOTgsIDc3LCA3MCwgIDgxLCA2MiwgNTcsICA2MiwgNDYsIDQxLCAgNDAsIDI0LCAyMCwgICAwLCAgMCwgIDAsCisgICAgMTY5LCAxMzIsIDEwNywgMTUwLCAxMTgsIDk0LCAxMzMsIDEwNSwgODQsIDExNSwgOTEsIDcyLCAgOTgsIDc2LCA2MCwgIDgwLCA2MiwgNDcsICA2MiwgNDYsIDMyLCAgMzksIDI1LCAxMSwgICAwLCAgMCwgIDAsCisgICAgMTcxLCAxMzIsIDg5LCAxNTIsIDExOCwgNzksIDEzNSwgMTA1LCA2OSwgMTE1LCA5MCwgNTgsICA5OCwgNzYsIDQ3LCAgODAsIDYyLCAzNiwgIDYyLCA0NiwgMjEsICAzOSwgMjUsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxNzEsIDEzMiwgNjksIDE1MywgMTE3LCA2MCwgMTM1LCAxMDQsIDUyLCAxMTYsIDkwLCA0MiwgIDk4LCA3NiwgMzMsICA4MSwgNjEsIDIxLCAgNjIsIDQ2LCAgNiwgIDM4LCAyNSwgIDAsICAgMCwgIDAsICAwLAorICAgIDE3MiwgMTMyLCA1NCwgMTUzLCAxMTgsIDQ1LCAxMzUsIDEwNCwgMzgsIDExNiwgOTAsIDI4LCAgOTgsIDc2LCAxOCwgIDgxLCA2MSwgIDYsICA2MiwgNDYsICAwLCAgMzgsIDI1LCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTY0LCAxMTUsIDE3NywgMTQ2LCAxMDMsIDE1OSwgMTMwLCA5MSwgMTQzLCAxMTQsIDc4LCAxMjUsICA5NywgNjUsIDEwNywgIDgxLCA1MSwgODksICA2MywgMzQsIDY5LCAgNDEsICA5LCA0NiwgICAwLCAgMCwgIDQsCisgICAgMTY2LCAxMTUsIDE2MSwgMTQ4LCAxMDMsIDE0NCwgMTMyLCA5MSwgMTI5LCAxMTUsIDc4LCAxMTIsICA5OCwgNjUsIDk2LCAgODEsIDUxLCA3OSwgIDYzLCAzNSwgNjEsICA0MSwgMTEsIDM4LCAgIDAsICAwLCAgMCwKKyAgICAxNjcsIDExNSwgMTQ2LCAxNTAsIDEwMiwgMTMxLCAxMzIsIDkxLCAxMTcsIDExNSwgNzgsIDEwMSwgIDk4LCA2NSwgODYsICA4MSwgNTEsIDcxLCAgNjMsIDM1LCA1NCwgIDQxLCAxMiwgMzIsICAgMCwgIDAsICAwLAorICAgIDE2OCwgMTE0LCAxMzIsIDE1MCwgMTAzLCAxMTgsIDEzMywgOTEsIDEwNSwgMTE2LCA3OCwgOTEsICA5OCwgNjQsIDc2LCAgODIsIDUxLCA2MSwgIDYzLCAzNiwgNDYsICA0MSwgMTMsIDI0LCAgIDAsICAwLCAgMCwKKyAgICAxNjksIDExNCwgMTE2LCAxNTAsIDEwMiwgMTAzLCAxMzQsIDkwLCA5MSwgMTE2LCA3OCwgNzksICA5OCwgNjUsIDY2LCAgODEsIDUxLCA1MywgIDYzLCAzNiwgMzcsICA0MCwgMTQsIDE3LCAgIDAsICAwLCAgMCwKKyAgICAxNjksIDExNCwgMTAxLCAxNTEsIDEwMSwgODksIDEzNCwgOTAsIDc5LCAxMTYsIDc3LCA2NywgIDk4LCA2NCwgNTYsICA4MSwgNTEsIDQ0LCAgNjMsIDM2LCAyOSwgIDQwLCAxNSwgIDcsICAgMCwgIDAsICAwLAorICAgIDE3MCwgMTE0LCA4NSwgMTUyLCAxMDEsIDc1LCAxMzUsIDkwLCA2NSwgMTE2LCA3NywgNTQsICA5OCwgNjQsIDQ0LCAgODEsIDUxLCAzMiwgIDYzLCAzNiwgMTcsICAzOSwgMTUsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxNzIsIDExMywgNjYsIDE1MiwgMTAxLCA1OCwgMTM1LCA4OSwgNDksIDExNiwgNzcsIDQwLCAgOTksIDY0LCAzMCwgIDgxLCA1MSwgMTgsICA2MiwgMzYsICAzLCAgMzgsIDE2LCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTcxLCAxMTMsIDUxLCAxNTMsIDEwMSwgNDQsIDEzNiwgODksIDM2LCAxMTYsIDc3LCAyOCwgIDk5LCA2NCwgMTgsICA4MSwgNTEsICA1LCAgNjIsIDM2LCAgMCwgIDM4LCAxNiwgIDAsICAgMCwgIDAsICAwLAorICAgIDE2NSwgOTQsIDE2NiwgMTQ3LCA4MiwgMTQ3LCAxMzIsIDcyLCAxMzIsIDExNSwgNjEsIDExNSwgIDk4LCA0OSwgOTksICA4MiwgMzYsIDgyLCAgNjQsIDE5LCA2NCwgIDQyLCAgMCwgNDEsICAgMCwgIDAsICAwLAorICAgIDE2NywgOTMsIDE1MCwgMTUwLCA4MywgMTM0LCAxMzMsIDczLCAxMjAsIDExNiwgNjIsIDEwNCwgIDk5LCA0OSwgODgsICA4MiwgMzYsIDcyLCAgNjQsIDIwLCA1NSwgIDQxLCAgMCwgMzMsICAgMCwgIDAsICAwLAorICAgIDE2OSwgOTMsIDEzNywgMTUwLCA4MywgMTIyLCAxMzQsIDczLCAxMDksIDExNiwgNjEsIDk0LCAgOTksIDUwLCA4MCwgIDgyLCAzNywgNjUsICA2NCwgMjEsIDQ5LCAgNDEsICAwLCAyNywgICAwLCAgMCwgIDAsCisgICAgMTY5LCA5NCwgMTIzLCAxNTAsIDgzLCAxMTAsIDEzMywgNzMsIDk3LCAxMTYsIDYxLCA4MywgIDk5LCA1MCwgNzAsICA4MiwgMzgsIDU3LCAgNjMsIDIzLCA0MiwgIDQxLCAgMCwgMjAsICAgMCwgIDAsICAwLAorICAgIDE2OSwgOTQsIDEwOSwgMTUwLCA4NCwgOTcsIDEzNCwgNzMsIDg1LCAxMTYsIDYyLCA3MywgIDk5LCA1MSwgNjEsICA4MSwgMzgsIDQ4LCAgNjMsIDIzLCAzMywgIDQxLCAgMSwgMTEsICAgMCwgIDAsICAwLAorICAgIDE3MCwgOTQsIDk2LCAxNTAsIDgzLCA4NCwgMTM0LCA3MywgNzQsIDExNiwgNjEsIDYyLCAgOTksIDUwLCA1MSwgIDgyLCAzOCwgMzksICA2NCwgMjMsIDI0LCAgNDAsICAzLCAgNCwgICAwLCAgMCwgIDAsCisgICAgMTcxLCA5MywgNzksIDE1MiwgODIsIDcwLCAxMzUsIDczLCA2MSwgMTE2LCA2MiwgNTEsICA5OCwgNTEsIDQwLCAgODEsIDM4LCAyOCwgIDYzLCAyNCwgMTQsICAzOSwgIDQsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxNzEsIDk0LCA2NCwgMTUyLCA4MywgNTUsIDEzNSwgNzMsIDQ3LCAxMTYsIDYyLCAzNywgIDk4LCA1MCwgMjcsICA4MSwgMzgsIDE1LCAgNjMsIDI0LCAgMSwgIDM5LCAgNCwgIDAsICAgMCwgIDAsICAwLAorICAgIDE3MiwgOTMsIDUxLCAxNTMsIDgyLCA0MiwgMTM1LCA3MywgMzUsIDExNywgNjIsIDI2LCAgOTksIDUxLCAxNiwgIDgxLCAzOSwgIDMsICA2MywgMjUsICAwLCAgMzgsICA1LCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTY2LCA2OCwgMTUzLCAxNDgsIDU5LCAxMzcsIDEzMywgNDksIDEyMSwgMTE1LCAzOSwgMTA2LCAgOTksIDI4LCA5MSwgIDgyLCAxMywgNzUsICA2NSwgIDAsIDU4LCAgNDIsICAwLCAzNiwgICAwLCAgMCwgIDAsCisgICAgMTY4LCA2OCwgMTM5LCAxNTAsIDU5LCAxMjQsIDEzNCwgNTAsIDExMCwgMTE2LCA0MCwgOTYsICA5OSwgMzAsIDgxLCAgODIsIDE2LCA2NiwgIDY0LCAgMCwgNTAsICA0MSwgIDAsIDI5LCAgIDAsICAwLCAgMCwKKyAgICAxNjksIDY5LCAxMjYsIDE1MCwgNTksIDExMywgMTM0LCA1MSwgMTAxLCAxMTcsIDQyLCA4NywgMTAwLCAzMCwgNzMsICA4MiwgMTcsIDU5LCAgNjUsICAwLCA0MywgIDQxLCAgMCwgMjMsICAgMCwgIDAsICAwLAorICAgIDE2OSwgNzAsIDExNSwgMTUwLCA2MSwgMTAyLCAxMzQsIDUyLCA4OSwgMTE2LCA0MiwgNzcsICA5OSwgMzIsIDY1LCAgODIsIDE5LCA1MiwgIDY0LCAgMCwgMzYsICA0MSwgIDAsIDE1LCAgIDAsICAwLCAgMCwKKyAgICAxNjksIDcwLCAxMDEsIDE1MCwgNjEsIDkwLCAxMzQsIDUyLCA3OSwgMTE2LCA0MywgNjgsICA5OSwgMzIsIDU1LCAgODIsIDIxLCA0MywgIDY0LCAgMiwgMjgsICA0MSwgIDAsICA2LCAgIDAsICAwLCAgMCwKKyAgICAxNzAsIDcwLCA4OSwgMTUxLCA2MiwgNzksIDEzNCwgNTMsIDY5LCAxMTYsIDQ0LCA1OCwgIDk5LCAzMywgNDYsICA4MSwgMjEsIDM0LCAgNjQsICAzLCAyMCwgIDQxLCAgMCwgIDIsICAgMCwgIDAsICAwLAorICAgIDE3MCwgNzEsIDc2LCAxNTIsIDYyLCA2NiwgMTM0LCA1MywgNTcsIDExNiwgNDMsIDQ2LCAgOTksIDMzLCAzNiwgIDgyLCAyMiwgMjQsICA2NCwgIDUsIDEwLCAgNDAsICAwLCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTcxLCA3MCwgNjEsIDE1MiwgNjIsIDUyLCAxMzUsIDUzLCA0NCwgMTE2LCA0NCwgMzUsICA5OSwgMzQsIDI0LCAgODIsIDIyLCAxMiwgIDYzLCAgNiwgIDAsICAzOSwgIDAsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxNzEsIDcxLCA0OSwgMTUzLCA2MiwgNDEsIDEzNSwgNTQsIDMzLCAxMTcsIDQ1LCAyNSwgIDk4LCAzNCwgMTMsICA4MSwgMjMsICAwLCAgNjMsICA3LCAgMCwgIDM5LCAgMCwgIDAsICAgMCwgIDAsICAwLAorICAgIDE2NywgMzMsIDE0MiwgMTQ5LCAyNCwgMTI3LCAxMzQsIDEwLCAxMTMsIDExNiwgIDAsIDk3LCAxMDAsICAwLCA4MywgIDgzLCAgMCwgNjgsICA2NSwgIDAsIDUyLCAgNDAsICAwLCAzMCwgICAwLCAgMCwgIDAsCisgICAgMTY5LCAzMywgMTI5LCAxNTAsIDI2LCAxMTUsIDEzNCwgMTcsIDEwMiwgMTE2LCAgMywgODksIDEwMCwgIDAsIDc1LCAgODMsICAwLCA2MCwgIDY1LCAgMCwgNDUsICA0MCwgIDAsIDI0LCAgIDAsICAwLCAgMCwKKyAgICAxNjksIDM2LCAxMTgsIDE1MSwgMjcsIDEwNCwgMTM0LCAxOSwgOTMsIDExNiwgIDcsIDgwLCAxMDAsICAwLCA2NywgIDgzLCAgMCwgNTQsICA2NSwgIDAsIDM4LCAgNDEsICAwLCAxNywgICAwLCAgMCwgIDAsCisgICAgMTY5LCAzOSwgMTA3LCAxNTAsIDMwLCA5NCwgMTM0LCAyMiwgODQsIDExNiwgMTEsIDcxLCAgOTksICAwLCA1OSwgIDgzLCAgMCwgNDYsICA2NCwgIDAsIDMxLCAgNDAsICAwLCAgOSwgICAwLCAgMCwgIDAsCisgICAgMTY5LCAzOSwgOTUsIDE1MSwgMzEsIDgzLCAxMzQsIDI0LCA3MywgMTE2LCAxNSwgNjIsIDEwMCwgIDEsIDUxLCAgODMsICAwLCAzOCwgIDY0LCAgMCwgMjQsICA0MCwgIDAsICA1LCAgIDAsICAwLCAgMCwKKyAgICAxNjksIDQxLCA4MywgMTUxLCAzMywgNzMsIDEzNCwgMjYsIDY0LCAxMTcsIDE3LCA1NCwgIDk5LCAgNCwgNDIsICA4MiwgIDAsIDMwLCAgNjQsICAwLCAxNiwgIDQwLCAgMCwgIDEsICAgMCwgIDAsICAwLAorICAgIDE3MCwgNDIsIDcxLCAxNTIsIDM0LCA2MiwgMTM0LCAyOCwgNTMsIDExNywgMTksIDQ0LCAgOTksICA2LCAzMywgIDgyLCAgMCwgMjEsICA2MywgIDAsICA0LCAgMzksICAwLCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTcxLCA0MiwgNTksIDE1MiwgMzUsIDUwLCAxMzQsIDI5LCA0MiwgMTE3LCAyMSwgMzIsICA5OSwgIDksIDIyLCAgODIsICAwLCAgOSwgIDYzLCAgMCwgIDAsICAzOCwgIDAsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxNzIsIDQyLCA0OCwgMTUyLCAzNiwgNDAsIDEzNSwgMjksIDMyLCAxMTcsIDIxLCAyMywgIDk5LCAxMCwgMTIsICA4MiwgIDAsICAwLCAgNjMsICAwLCAgMCwgIDM4LCAgMCwgIDAsICAgMCwgIDAsICAwLAorICAgIDEwNywgMjA3LCAyNDYsICA5NiwgMTg1LCAyMjAsICA4NiwgMTY1LCAxOTYsICA3MywgMTQ0LCAxNzEsICA2MCwgMTIzLCAxNDcsICA0NiwgMTAzLCAxMjUsICAzMiwgODIsIDEwMCwgICA5LCA1NiwgNzEsICAgMCwgMjAsIDMzLAorICAgIDExNSwgMjA2LCAyMjEsIDEwNCwgMTg0LCAxOTgsICA5MiwgMTY0LCAxNzgsICA3OCwgMTQzLCAxNTQsICA2NCwgMTIzLCAxMzMsICA1MSwgMTAyLCAxMTEsICAzNCwgODEsIDg5LCAgMTAsIDU2LCA2MywgICAwLCAyMCwgMjcsCisgICAgMTIyLCAyMDQsIDIwMCwgMTA4LCAxODMsIDE4MCwgIDk1LCAxNjMsIDE2MSwgIDgyLCAxNDIsIDE0MCwgIDY4LCAxMjIsIDEyMCwgIDU0LCAxMDIsIDEwMSwgIDM2LCA4MSwgNzksICAxMSwgNTYsIDU1LCAgIDAsIDIwLCAyMCwKKyAgICAxMjUsIDIwMywgMTc5LCAxMTEsIDE4MSwgMTYwLCAgOTcsIDE2MiwgMTQzLCAgODUsIDE0MSwgMTI0LCAgNzAsIDEyMSwgMTA3LCAgNTUsIDEwMSwgODksICAzOCwgODAsIDY5LCAgMTQsIDU1LCA0NiwgICAwLCAxOSwgMTAsCisgICAgMTI4LCAyMDIsIDE1NiwgMTEzLCAxODAsIDE0MCwgMTAyLCAxNjEsIDEyNSwgIDg3LCAxNDAsIDEwOCwgIDcxLCAxMjAsIDkyLCAgNTYsIDEwMCwgNzYsICAzOSwgNzksIDU5LCAgMTQsIDU1LCAzOCwgICAwLCAyMCwgIDMsCisgICAgMTMyLCAyMDAsIDEzNSwgMTE3LCAxNzksIDEyMSwgMTAzLCAxNTksIDEwNiwgIDg4LCAxMzksIDkzLCAgNzMsIDExOSwgNzksICA1NywgMTAwLCA2NSwgIDQxLCA3OSwgNDksICAxNSwgNTQsIDI4LCAgIDAsIDE5LCAgMCwKKyAgICAxMzQsIDIwMCwgMTExLCAxMTksIDE3OCwgOTgsIDEwNSwgMTU4LCA4NywgIDg5LCAxMzgsIDc2LCAgNzQsIDExOCwgNjQsICA1OCwgOTksIDUxLCAgNDEsIDc4LCAzNywgIDE2LCA1NCwgMTcsICAgMCwgMTksICAwLAorICAgIDEzNywgMTk5LCA4NSwgMTIyLCAxNzcsIDc1LCAxMDgsIDE1OCwgNjYsICA5MSwgMTM3LCA1NiwgIDc1LCAxMTgsIDQ2LCAgNTksIDk4LCAzNSwgIDQyLCA3OCwgMjIsICAxNiwgNTQsICAzLCAgIDAsIDE5LCAgMCwKKyAgICAxNDAsIDE5OCwgNjIsIDEyNSwgMTc3LCA1NSwgMTA5LCAxNTgsIDQ3LCAgOTIsIDEzNywgNDAsICA3NiwgMTE3LCAzMiwgIDU5LCA5OCwgMjEsICA0MiwgNzgsICA2LCAgMTYsIDU0LCAgMCwgICAwLCAxOCwgIDAsCisgICAgMTE4LCAxODYsIDIzMSwgMTA2LCAxNjcsIDIwNiwgIDkzLCAxNDksIDE4NCwgIDgxLCAxMzAsIDE2MSwgIDY3LCAxMTEsIDEzOSwgIDU0LCA5MiwgMTE3LCAgMzksIDcyLCA5MywgIDE3LCA0OCwgNjYsICAgMCwgMTAsIDI5LAorICAgIDEyMywgMTg1LCAyMDcsIDExMCwgMTY2LCAxODYsICA5OCwgMTQ4LCAxNjcsICA4NSwgMTI5LCAxNDUsICA3MSwgMTExLCAxMjUsICA1NiwgOTIsIDEwNCwgIDQwLCA3MiwgODMsICAxOCwgNDgsIDU3LCAgIDAsIDEwLCAyMiwKKyAgICAxMjgsIDE4NCwgMTg4LCAxMTMsIDE2NSwgMTY4LCAxMDIsIDE0NywgMTUxLCAgODgsIDEyOCwgMTMxLCAgNzMsIDExMCwgMTEzLCAgNTgsIDkxLCA5NCwgIDQyLCA3MSwgNzQsICAxOSwgNDgsIDUwLCAgIDAsICA5LCAxNSwKKyAgICAxMzEsIDE4MywgMTY4LCAxMTYsIDE2NCwgMTUxLCAxMDQsIDE0NiwgMTM0LCAgODksIDEyNywgMTE3LCAgNzMsIDEwOSwgMTAwLCAgNTgsIDkwLCA4MywgIDQyLCA3MSwgNjUsICAyMCwgNDgsIDQyLCAgIDAsICA5LCAgNSwKKyAgICAxMzQsIDE4MiwgMTQ4LCAxMjAsIDE2MywgMTMxLCAxMDUsIDE0NSwgMTE4LCAgOTAsIDEyNiwgMTAyLCAgNzUsIDEwOCwgODYsICA1OSwgOTAsIDcyLCAgNDMsIDcxLCA1NSwgIDE5LCA0NywgMzQsICAgMCwgIDksICAwLAorICAgIDEzNiwgMTgxLCAxMjgsIDEyMiwgMTYyLCAxMTUsIDEwNywgMTQ0LCAxMDIsICA5MiwgMTI1LCA4NywgIDc2LCAxMDcsIDc0LCAgNjEsIDg5LCA2MCwgIDQ0LCA3MCwgNDUsICAyMCwgNDcsIDI0LCAgIDAsICA4LCAgMCwKKyAgICAxMzksIDE4MCwgMTA2LCAxMjQsIDE2MSwgOTUsIDEwOSwgMTQ0LCA4MywgIDkzLCAxMjQsIDcxLCAgNzcsIDEwNywgNjAsICA2MSwgODksIDQ3LCAgNDQsIDcwLCAzMywgIDIwLCA0NywgMTMsICAgMCwgIDgsICAwLAorICAgIDE0MiwgMTc5LCA4MiwgMTI1LCAxNjAsIDcyLCAxMTEsIDE0MywgNjMsICA5NCwgMTI0LCA1NCwgIDc3LCAxMDYsIDQ0LCAgNjEsIDg4LCAzMiwgIDQ0LCA2OSwgMTgsICAyMCwgNDYsICAwLCAgIDAsICA4LCAgMCwKKyAgICAxNDMsIDE3OSwgNjIsIDEyNywgMTYwLCA1NCwgMTExLCAxNDIsIDQ3LCAgOTQsIDEyNCwgMzksICA3OCwgMTA2LCAyOSwgIDYyLCA4OCwgMTgsICA0NSwgNjksICAzLCAgMjAsIDQ2LCAgMCwgICAwLCAgOCwgIDAsCisgICAgMTI0LCAxNjcsIDIxNiwgMTEyLCAxNTAsIDE5NCwgIDk5LCAxMzQsIDE3NCwgIDg3LCAxMTcsIDE1MywgIDczLCAxMDAsIDEzMSwgIDU4LCA4MiwgMTEwLCAgNDMsIDY0LCA4OCwgIDIzLCA0MCwgNjEsICAgMCwgIDAsIDI0LAorICAgIDEyOSwgMTY2LCAxOTUsIDExNiwgMTUwLCAxNzUsIDEwMywgMTM0LCAxNTgsICA4OSwgMTE2LCAxMzcsICA3NSwgOTksIDExOCwgIDYwLCA4MiwgOTgsICA0NCwgNjMsIDc4LCAgMjMsIDQwLCA1MywgICAwLCAgMCwgMTcsCisgICAgMTMyLCAxNjYsIDE3NywgMTE5LCAxNDksIDE2MCwgMTA2LCAxMzMsIDE0MywgIDkwLCAxMTUsIDEyNCwgIDc2LCA5OSwgMTA3LCAgNjEsIDgxLCA4OCwgIDQ1LCA2MywgNjksICAyNCwgNDAsIDQ2LCAgIDAsICAwLCAgOSwKKyAgICAxMzYsIDE2NiwgMTU5LCAxMjEsIDE0OCwgMTQzLCAxMDcsIDEzMiwgMTI2LCAgOTIsIDExNSwgMTExLCAgNzcsIDk4LCA5NCwgIDYyLCA4MSwgNzgsICA0NiwgNjMsIDYwLCAgMjMsIDQwLCAzOCwgICAwLCAgMCwgIDAsCisgICAgMTM4LCAxNjQsIDE0MCwgMTIyLCAxNDcsIDEyNSwgMTA4LCAxMzEsIDExMSwgIDkzLCAxMTQsIDk3LCAgNzksIDk4LCA4MiwgIDYzLCA4MCwgNjcsICA0NiwgNjIsIDUwLCAgMjQsIDQwLCAyOSwgICAwLCAgMCwgIDAsCisgICAgMTM5LCAxNjMsIDEyMiwgMTI0LCAxNDYsIDEwOSwgMTEwLCAxMzEsIDk2LCAgOTQsIDExNCwgODMsICA3OSwgOTcsIDcwLCAgNjMsIDgxLCA1NywgIDQ2LCA2MiwgNDEsICAyNCwgNDAsIDIxLCAgIDAsICAwLCAgMCwKKyAgICAxNDEsIDE2MywgMTAxLCAxMjYsIDE0NSwgOTAsIDExMSwgMTMwLCA3OSwgIDk1LCAxMTMsIDY4LCAgNzksIDk2LCA1NiwgIDYzLCA4MCwgNDQsICA0NywgNjIsIDMwLCAgMjMsIDQwLCAxMCwgICAwLCAgMCwgIDAsCisgICAgMTQ0LCAxNjIsIDc5LCAxMjcsIDE0NSwgNzAsIDExMiwgMTI5LCA2MCwgIDk1LCAxMTIsIDUxLCAgNzksIDk2LCA0MSwgIDY0LCA3OSwgMzAsICA0NywgNjEsIDE1LCAgMjMsIDQwLCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTQ1LCAxNjIsIDYwLCAxMjksIDE0NSwgNTIsIDExMywgMTI5LCA0NiwgIDk2LCAxMTIsIDM3LCAgNzksIDk1LCAyNywgIDY0LCA3OSwgMTYsICA0NywgNjEsICAxLCAgMjMsIDM5LCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTMxLCAxNDcsIDIwMiwgMTE3LCAxMzMsIDE4MSwgMTA1LCAxMTksIDE2MiwgIDkxLCAxMDMsIDE0MiwgIDc3LCA4NywgMTIyLCAgNjIsIDcxLCAxMDIsICA0NywgNTQsIDgxLCAgMjYsIDMxLCA1NiwgICAwLCAgMCwgMTgsCisgICAgMTM1LCAxNDcsIDE4MywgMTIwLCAxMzIsIDE2NCwgMTA3LCAxMTgsIDE0NywgIDkzLCAxMDIsIDEyOCwgIDc4LCA4NywgMTEwLCAgNjMsIDcxLCA5MiwgIDQ3LCA1NCwgNzIsICAyNiwgMzEsIDQ4LCAgIDAsICAwLCAxMCwKKyAgICAxMzgsIDE0NywgMTY2LCAxMjMsIDEzMSwgMTQ5LCAxMDgsIDExOCwgMTMzLCAgOTQsIDEwMiwgMTE2LCAgNzksIDg2LCAxMDAsICA2NCwgNzEsIDgyLCAgNDgsIDU0LCA2NCwgIDI3LCAzMSwgNDEsICAgMCwgIDAsICAyLAorICAgIDEzOSwgMTQ2LCAxNDksIDEyNCwgMTMxLCAxMzQsIDExMSwgMTE3LCAxMTksICA5NCwgMTAxLCAxMDMsICA3OSwgODYsIDg4LCAgNjQsIDcwLCA3MiwgIDQ4LCA1MywgNTUsICAyNywgMzEsIDMzLCAgIDAsICAwLCAgMCwKKyAgICAxNDEsIDE0NiwgMTMyLCAxMjUsIDEzMSwgMTE3LCAxMTEsIDExNywgMTA0LCAgOTUsIDEwMSwgOTEsICA4MCwgODYsIDc3LCAgNjUsIDcwLCA2MiwgIDQ4LCA1MywgNDYsICAyNiwgMzEsIDI1LCAgIDAsICAwLCAgMCwKKyAgICAxNDMsIDE0NSwgMTE1LCAxMjYsIDEzMCwgMTAxLCAxMTIsIDExNiwgOTAsICA5NiwgMTAwLCA3OCwgIDgwLCA4NSwgNjUsICA2NSwgNzAsIDUyLCAgNDksIDUzLCAzNywgIDI3LCAzMiwgMTcsICAgMCwgIDAsICAwLAorICAgIDE0NCwgMTQ0LCA5NiwgMTI4LCAxMjksIDg1LCAxMTIsIDExNSwgNzUsICA5NywgMTAwLCA2NCwgIDgxLCA4NSwgNTIsICA2NSwgNjksIDQwLCAgNDksIDUzLCAyNiwgIDI2LCAzMSwgIDUsICAgMCwgIDAsICAwLAorICAgIDE0NiwgMTQ0LCA3NiwgMTI5LCAxMjksIDY3LCAxMTQsIDExNSwgNTgsICA5NywgOTksIDQ4LCAgODIsIDg0LCAzOCwgIDY2LCA2OSwgMjcsICA0OSwgNTMsIDEyLCAgMjYsIDMyLCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTQ2LCAxNDQsIDU5LCAxMzAsIDEyOCwgNTEsIDExNCwgMTE0LCA0MywgIDk4LCA5OSwgMzUsICA4MiwgODQsIDI1LCAgNjYsIDY5LCAxMywgIDQ5LCA1MywgIDAsICAyNiwgMzIsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxMzUsIDEyOSwgMTg5LCAxMjIsIDExNSwgMTcwLCAxMDcsIDEwMywgMTUyLCAgOTQsIDg5LCAxMzMsICA3OSwgNzQsIDExNCwgIDY0LCA2MCwgOTUsICA0OSwgNDMsIDc1LCAgMjksIDIwLCA1MSwgICAwLCAgMCwgMTIsCisgICAgMTM4LCAxMjksIDE3MSwgMTI0LCAxMTUsIDE1MywgMTEwLCAxMDMsIDEzOCwgIDk1LCA4OSwgMTIwLCAgODEsIDc0LCAxMDMsICA2NiwgNjAsIDg2LCAgNTAsIDQ0LCA2NywgIDI4LCAyMSwgNDMsICAgMCwgIDAsICAzLAorICAgIDE0MCwgMTI5LCAxNTYsIDEyNSwgMTE1LCAxNDAsIDExMSwgMTAzLCAxMjUsICA5NiwgODksIDEwOSwgIDgxLCA3NCwgOTMsICA2NywgNjAsIDc2LCAgNTAsIDQ0LCA1OSwgIDI5LCAyMiwgMzYsICAgMCwgIDAsICAwLAorICAgIDE0MiwgMTI4LCAxNDAsIDEyNywgMTE1LCAxMjUsIDExMiwgMTAyLCAxMTIsICA5NywgODgsIDk3LCAgODIsIDc0LCA4MywgIDY3LCA2MCwgNjcsICA1MCwgNDQsIDUxLCAgMjksIDIyLCAyOSwgICAwLCAgMCwgIDAsCisgICAgMTQyLCAxMjgsIDEyNCwgMTI3LCAxMTQsIDExMSwgMTEzLCAxMDIsIDk4LCAgOTgsIDg4LCA4NSwgIDgyLCA3NCwgNzEsICA2NiwgNjAsIDU4LCAgNTAsIDQ0LCA0MiwgIDI5LCAyMiwgMjEsICAgMCwgIDAsICAwLAorICAgIDE0NCwgMTI3LCAxMDgsIDEyOCwgMTE0LCA5NiwgMTEzLCAxMDEsIDg1LCAgOTgsIDg3LCA3MywgIDgyLCA3NCwgNjEsICA2NywgNjAsIDQ4LCAgNTAsIDQ0LCAzMywgIDI4LCAyMywgMTIsICAgMCwgIDAsICAwLAorICAgIDE0NSwgMTI3LCA5MSwgMTI5LCAxMTQsIDgxLCAxMTUsIDEwMSwgNzEsICA5OCwgODcsIDYwLCAgODIsIDczLCA0OCwgIDY3LCA1OSwgMzcsICA1MCwgNDQsIDIyLCAgMjksIDIzLCAgMSwgICAwLCAgMCwgIDAsCisgICAgMTQ3LCAxMjcsIDczLCAxMzAsIDExMywgNjMsIDExNSwgMTAxLCA1NSwgIDk4LCA4NywgNDUsICA4MywgNzMsIDM1LCAgNjcsIDU5LCAyNCwgIDUwLCA0NCwgMTAsICAyOCwgMjQsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxNDcsIDEyNywgNTgsIDEzMSwgMTEzLCA0OSwgMTE1LCAxMDAsIDQyLCAgOTksIDg2LCAzMywgIDgzLCA3MywgMjMsICA2NywgNTksIDEwLCAgNTAsIDQ0LCAgMCwgIDI3LCAyNCwgIDAsICAgMCwgIDAsICAwLAorICAgIDEzOCwgMTEwLCAxNzcsIDEyNCwgOTksIDE1OSwgMTEwLCA4OCwgMTQyLCAgOTYsIDc1LCAxMjUsICA4MiwgNjIsIDEwNywgIDY2LCA0OCwgODksICA1MSwgMzMsIDcwLCAgMzAsICA4LCA0NiwgICAwLCAgMCwgIDUsCisgICAgMTQyLCAxMTEsIDE2MCwgMTI3LCA5OSwgMTQ0LCAxMTMsIDg4LCAxMzAsICA5OCwgNzUsIDExMiwgIDgyLCA2MiwgOTYsICA2OCwgNDksIDgwLCAgNTEsIDMzLCA2MSwgIDMwLCAxMCwgMzksICAgMCwgIDAsICAwLAorICAgIDE0MywgMTExLCAxNDYsIDEyOCwgOTksIDEzMSwgMTE0LCA4OCwgMTE4LCAgOTgsIDc1LCAxMDEsICA4MywgNjIsIDg2LCAgNjgsIDQ5LCA3MSwgIDUyLCAzMywgNTQsICAzMCwgMTEsIDMyLCAgIDAsICAwLCAgMCwKKyAgICAxNDQsIDExMSwgMTMyLCAxMjgsIDk5LCAxMTgsIDExMywgODgsIDEwNiwgIDk5LCA3NSwgOTEsICA4MywgNjIsIDc3LCAgNjgsIDQ5LCA2MiwgIDUyLCAzNCwgNDYsICAzMCwgMTIsIDI1LCAgIDAsICAwLCAgMCwKKyAgICAxNDQsIDExMSwgMTE3LCAxMjksIDk4LCAxMDQsIDExNCwgODcsIDkyLCAgOTksIDc1LCA4MCwgIDgzLCA2MiwgNjcsICA2OCwgNDksIDUzLCAgNTEsIDM0LCAzOCwgIDMwLCAxMywgMTgsICAgMCwgIDAsICAwLAorICAgIDE0NSwgMTExLCAxMDMsIDEzMCwgOTgsIDkxLCAxMTQsIDg3LCA4MCwgIDk5LCA3NSwgNjgsICA4MywgNjMsIDU3LCAgNjgsIDUwLCA0NSwgIDUxLCAzNCwgMzAsICAzMCwgMTQsICA4LCAgIDAsICAwLCAgMCwKKyAgICAxNDYsIDExMCwgODcsIDEzMSwgOTgsIDc2LCAxMTUsIDg3LCA2NywgIDk5LCA3NSwgNTYsICA4MywgNjIsIDQ1LCAgNjgsIDQ5LCAzMywgIDUyLCAzNSwgMTksICAzMCwgMTUsICAyLCAgIDAsICAwLCAgMCwKKyAgICAxNDgsIDExMCwgNzAsIDEzMSwgOTgsIDYwLCAxMTYsIDg2LCA1MiwgIDk5LCA3NCwgNDMsICA4NCwgNjIsIDMzLCAgNjksIDQ5LCAyMSwgIDUyLCAzNSwgIDYsICAyOSwgMTUsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxNDgsIDExMCwgNTYsIDEzMiwgOTcsIDQ4LCAxMTcsIDg3LCA0MCwgMTAwLCA3NSwgMzEsICA4NCwgNjIsIDIyLCAgNjgsIDQ5LCAgOSwgIDUxLCAzNSwgIDAsICAyOCwgMTUsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxNDIsIDkxLCAxNjYsIDEyNiwgODAsIDE0OCwgMTEzLCA3MSwgMTMyLCAgOTgsIDU5LCAxMTUsICA4MywgNDcsIDk5LCAgNjksIDM0LCA4MiwgIDUzLCAxNywgNjQsICAzMiwgIDAsIDQxLCAgIDAsICAwLCAgMCwKKyAgICAxNDMsIDkxLCAxNTAsIDEyOCwgODEsIDEzNSwgMTE0LCA3MSwgMTIwLCAgOTksIDYwLCAxMDQsICA4NSwgNDgsIDg5LCAgNjksIDM1LCA3MywgIDUzLCAxOSwgNTYsICAzMiwgIDAsIDM0LCAgIDAsICAwLCAgMCwKKyAgICAxNDUsIDkxLCAxMzcsIDEyOSwgODEsIDEyMiwgMTE1LCA3MSwgMTA5LCAxMDAsIDYwLCA5NCwgIDg1LCA0OCwgODEsICA2OSwgMzUsIDY1LCAgNTMsIDE5LCA0OSwgIDMyLCAgMCwgMjgsICAgMCwgIDAsICAwLAorICAgIDE0NiwgOTIsIDEyNCwgMTMwLCA4MSwgMTEwLCAxMTUsIDcxLCA5OCwgMTAwLCA2MCwgODQsICA4NSwgNDksIDcxLCAgNjksIDM2LCA1NywgIDUzLCAyMSwgNDIsICAzMiwgIDAsIDIxLCAgIDAsICAwLCAgMCwKKyAgICAxNDcsIDkxLCAxMTAsIDEzMCwgODEsIDk3LCAxMTUsIDcxLCA4NiwgMTAwLCA2MCwgNzQsICA4NCwgNDksIDYyLCAgNjksIDM2LCA0OCwgIDUzLCAyMiwgMzQsICAzMiwgIDAsIDEzLCAgIDAsICAwLCAgMCwKKyAgICAxNDcsIDkyLCA5NywgMTMwLCA4MSwgODUsIDExNiwgNzIsIDc2LCAxMDAsIDYwLCA2MywgIDg1LCA0OSwgNTIsICA2OSwgMzcsIDQwLCAgNTMsIDIyLCAyNiwgIDMxLCAgMSwgIDUsICAgMCwgIDAsICAwLAorICAgIDE0OCwgOTIsIDgyLCAxMzEsIDgxLCA3MSwgMTE2LCA3MSwgNjIsIDEwMCwgNjAsIDUzLCAgODQsIDQ5LCA0MiwgIDY5LCAzNywgMzAsICA1MiwgMjMsIDE2LCAgMzEsICAyLCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTQ4LCA5MSwgNjcsIDEzMiwgODEsIDU3LCAxMTcsIDcxLCA0OSwgMTAwLCA2MCwgMzksICA4NCwgNDksIDMwLCAgNjksIDM3LCAxOCwgIDUyLCAyMywgIDIsICAzMCwgIDIsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxNDksIDkxLCA1NCwgMTMyLCA4MSwgNDYsIDExOCwgNzEsIDM5LCAxMDEsIDYwLCAyOSwgIDg1LCA0OSwgMTksICA2OSwgMzcsICA2LCAgNTIsIDIzLCAgMCwgIDI5LCAgMywgIDAsICAgMCwgIDAsICAwLAorICAgIDE0MywgNjgsIDE1MywgMTI4LCA1OSwgMTM3LCAxMTUsIDQ5LCAxMjIsICA5OSwgMzksIDEwNywgIDg1LCAyOCwgOTEsICA3MCwgMTMsIDc1LCAgNTQsICAwLCA1OCwgIDMyLCAgMCwgMzYsICAgMCwgIDAsICAwLAorICAgIDE0NiwgNjgsIDE0MCwgMTMxLCA1OSwgMTI1LCAxMTYsIDUxLCAxMTEsIDEwMCwgNDAsIDk3LCAgODUsIDI5LCA4MiwgIDcwLCAxNSwgNjcsICA1NCwgIDAsIDUwLCAgMzIsICAwLCAyOSwgICAwLCAgMCwgIDAsCisgICAgMTQ3LCA2OCwgMTI3LCAxMzEsIDU5LCAxMTQsIDExNywgNTEsIDEwMiwgMTAxLCA0MSwgODgsICA4NiwgMzAsIDc0LCAgNzAsIDE3LCA2MCwgIDU0LCAgMCwgNDQsICAzMiwgIDAsIDIzLCAgIDAsICAwLCAgMCwKKyAgICAxNDcsIDcwLCAxMTUsIDEzMSwgNjAsIDEwMywgMTE2LCA1MiwgOTEsIDEwMCwgNDIsIDc4LCAgODUsIDMyLCA2NSwgIDcwLCAxOSwgNTMsICA1NCwgIDEsIDM4LCAgMzIsICAwLCAxNywgICAwLCAgMCwgIDAsCisgICAgMTQ3LCA3MCwgMTAzLCAxMzEsIDYxLCA5MSwgMTE3LCA1MywgODEsIDEwMSwgNDMsIDY5LCAgODYsIDMyLCA1NywgIDcwLCAyMCwgNDQsICA1NCwgIDIsIDMwLCAgMzIsICAwLCAgNywgICAwLCAgMCwgIDAsCisgICAgMTQ4LCA3MCwgOTEsIDEzMiwgNjEsIDgwLCAxMTcsIDUyLCA3MCwgMTAxLCA0MywgNTksICA4NSwgMzMsIDQ4LCAgNzAsIDIxLCAzNiwgIDUzLCAgNCwgMjIsICAzMiwgIDAsICAzLCAgIDAsICAwLCAgMCwKKyAgICAxNDgsIDcwLCA3OCwgMTMyLCA2MiwgNjgsIDExNywgNTMsIDU4LCAxMDEsIDQzLCA0OCwgIDg1LCAzNCwgMzgsICA3MCwgMjIsIDI2LCAgNTMsICA2LCAxMiwgIDMxLCAgMCwgIDAsICAgMCwgIDAsICAwLAorICAgIDE0OSwgNzEsIDY0LCAxMzIsIDYyLCA1NCwgMTE4LCA1NCwgNDYsIDEwMSwgNDQsIDM3LCAgODUsIDM0LCAyNywgIDY5LCAyMywgMTUsICA1MywgIDcsICAxLCAgMzAsICAwLCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTUwLCA3MCwgNTMsIDEzNCwgNjEsIDQ0LCAxMTgsIDU0LCAzNiwgMTAxLCA0NCwgMjgsICA4NSwgMzUsIDE3LCAgNjksIDIzLCAgNCwgIDUyLCAgOCwgIDAsICAzMCwgIDAsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxNDUsIDM4LCAxNDMsIDEzMCwgMjksIDEyOCwgMTE3LCAxOCwgMTE0LCAxMDEsICAzLCA5OCwgIDg3LCAgMCwgODQsICA3MiwgIDAsIDY5LCAgNTQsICAwLCA1MywgIDMwLCAgMCwgMzEsICAgMCwgIDAsICAwLAorICAgIDE0NywgMzgsIDEzMCwgMTMyLCAzMCwgMTE2LCAxMTcsIDIyLCAxMDMsIDEwMSwgIDgsIDg5LCAgODcsICAwLCA3NiwgIDcyLCAgMCwgNjIsICA1NCwgIDAsIDQ2LCAgMzAsICAwLCAyNCwgICAwLCAgMCwgIDAsCisgICAgMTQ4LCA0MCwgMTE5LCAxMzIsIDMxLCAxMDUsIDExNywgMjMsIDk0LCAxMDEsIDEzLCA4MSwgIDg3LCAgMCwgNjgsICA3MSwgIDAsIDU1LCAgNTQsICAwLCAzOSwgIDMwLCAgMCwgMTgsICAgMCwgIDAsICAwLAorICAgIDE0OCwgNDIsIDEwOCwgMTMyLCAzNCwgOTYsIDExNywgMjUsIDg1LCAxMDIsIDE1LCA3MywgIDg2LCAgMiwgNjAsICA3MSwgIDAsIDQ3LCAgNTQsICAwLCAzMywgIDMwLCAgMCwgMTEsICAgMCwgIDAsICAwLAorICAgIDE0OCwgNDMsIDk2LCAxMzMsIDM1LCA4NSwgMTE3LCAyOCwgNzUsIDEwMiwgMTgsIDY0LCAgODcsICA1LCA1MiwgIDcxLCAgMCwgNDAsICA1NCwgIDAsIDI1LCAgMzAsICAwLCAgNSwgICAwLCAgMCwgIDAsCisgICAgMTQ5LCA0NCwgODUsIDEzMiwgMzYsIDc1LCAxMTgsIDI5LCA2NiwgMTAxLCAyMCwgNTUsICA4NiwgIDgsIDQ0LCAgNzAsICAwLCAzMiwgIDUzLCAgMCwgMTgsICAyOSwgIDAsICAyLCAgIDAsICAwLCAgMCwKKyAgICAxNDksIDQ1LCA3NCwgMTMzLCAzNywgNjQsIDExOCwgMzEsIDU1LCAxMDIsIDIxLCA0NSwgIDg1LCAxMCwgMzQsICA3MCwgIDAsIDIyLCAgNTMsICAwLCAgNiwgIDI4LCAgMCwgIDAsICAgMCwgIDAsICAwLAorICAgIDE1MCwgNDYsIDYxLCAxMzMsIDM5LCA1MiwgMTE4LCAzMSwgNDQsIDEwMiwgMjMsIDM0LCAgODUsIDEyLCAyNCwgIDcwLCAgMCwgMTIsICA1MiwgIDAsICAwLCAgMjgsICAwLCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTUwLCA0NiwgNTEsIDEzMywgNDAsIDQyLCAxMTksIDMyLCAzNSwgMTAyLCAyNCwgMjUsICA4NSwgMTMsIDE0LCAgNzAsICAwLCAgMSwgIDUyLCAgMCwgIDAsICAyNywgIDAsICAwLCAgIDAsICAwLCAgMCwKKyAgICA1MywgMTk4LCAyNDQsICA0OSwgMTc3LCAyMTgsICA0MSwgMTU4LCAxOTUsICAzMiwgMTM4LCAxNzEsICAyMiwgMTE4LCAxNDcsICAxMSwgOTgsIDEyNCwgICAwLCA3OCwgMTAwLCAgIDAsIDU0LCA3MSwgICAwLCAxOCwgMzQsCisgICAgNjksIDE5NiwgMjIwLCAgNjQsIDE3NSwgMTk2LCAgNTQsIDE1NywgMTc2LCAgNDUsIDEzNywgMTU0LCAgMzIsIDExNywgMTMzLCAgMTksIDk4LCAxMTEsICAgMCwgNzgsIDg5LCAgIDAsIDUzLCA2MywgICAwLCAxNywgMjcsCisgICAgODAsIDE5NSwgMTk4LCAgNjksIDE3NSwgMTc5LCAgNjAsIDE1NiwgMTU5LCAgNTAsIDEzNiwgMTM5LCAgMzgsIDExNiwgMTIwLCAgMjUsIDk4LCAxMDEsICAgNCwgNzcsIDgwLCAgIDAsIDUzLCA1NSwgICAwLCAxNywgMjEsCisgICAgODQsIDE5MywgMTc3LCAgNzUsIDE3MywgMTU5LCAgNjQsIDE1NSwgMTQyLCAgNTUsIDEzNSwgMTI0LCAgNDEsIDExNiwgMTA3LCAgMjcsIDk3LCA4OSwgICA5LCA3NiwgNzAsICAgMCwgNTMsIDQ3LCAgIDAsIDE3LCAxMSwKKyAgICA4OSwgMTkzLCAxNTcsICA3OSwgMTcyLCAxNDAsICA3MCwgMTU0LCAxMjUsICA1NywgMTM0LCAxMDksICA0NCwgMTE1LCA5MiwgIDMyLCA5NiwgNzYsICAxMywgNzYsIDU5LCAgIDAsIDUyLCAzOSwgICAwLCAxNiwgIDQsCisgICAgOTQsIDE5MSwgMTM1LCAgODUsIDE3MSwgMTIxLCAgNzIsIDE1MiwgMTA4LCAgNjAsIDEzMywgOTQsICA0NywgMTE0LCA4MCwgIDMyLCA5NSwgNjUsICAxNSwgNzYsIDQ5LCAgIDAsIDUyLCAyOSwgICAwLCAxNiwgIDAsCisgICAgOTgsIDE5MCwgMTEzLCAgODcsIDE3MCwgMTAwLCAgNzYsIDE1MiwgODksICA2MiwgMTMyLCA3NywgIDQ5LCAxMTMsIDY1LCAgMzUsIDk1LCA1MiwgIDE4LCA3NSwgMzcsICAgMCwgNTIsIDE4LCAgIDAsIDE1LCAgMCwKKyAgICAxMDMsIDE5MCwgODksICA5MCwgMTY5LCA4MCwgIDc4LCAxNTEsIDcwLCAgNjQsIDEzMiwgNjAsICA1MSwgMTEzLCA0OSwgIDM3LCA5NCwgMzgsICAyMCwgNzUsIDI1LCAgIDAsIDUyLCAgNSwgICAwLCAxNSwgIDAsCisgICAgMTA2LCAxODksIDY5LCAgOTMsIDE2OSwgNjEsICA4MCwgMTUxLCA1MywgIDY2LCAxMzEsIDQ1LCAgNTIsIDExMywgMzYsICAzNywgOTQsIDI1LCAgMTksIDc0LCAxMSwgICAwLCA1MSwgIDAsICAgMCwgMTUsICAwLAorICAgIDc2LCAxNzgsIDIyOSwgIDY4LCAxNTksIDIwNSwgIDYxLCAxNDIsIDE4MywgIDUwLCAxMjQsIDE2MCwgIDQwLCAxMDYsIDEzOCwgIDI4LCA4OCwgMTE2LCAgMTIsIDY5LCA5MywgICAwLCA0NSwgNjYsICAgMCwgIDUsIDI5LAorICAgIDg2LCAxNzcsIDIwNywgIDc4LCAxNTgsIDE4NCwgIDY3LCAxNDIsIDE2NiwgIDU2LCAxMjMsIDE0NSwgIDQ1LCAxMDYsIDEyNSwgIDMxLCA4OCwgMTA1LCAgMTYsIDY5LCA4MywgICAwLCA0NSwgNTgsICAgMCwgIDYsIDIyLAorICAgIDkzLCAxNzYsIDE4NywgIDgxLCAxNTgsIDE2OCwgIDcxLCAxNDEsIDE1MCwgIDYxLCAxMjMsIDEzMSwgIDQ3LCAxMDUsIDExMywgIDM1LCA4NywgOTQsICAyMCwgNjgsIDc0LCAgIDAsIDQ1LCA1MSwgICAwLCAgNSwgMTYsCisgICAgOTgsIDE3NSwgMTY4LCAgODQsIDE1NywgMTUwLCAgNzUsIDE0MCwgMTM0LCAgNjMsIDEyMiwgMTE3LCAgNTAsIDEwNCwgMTAwLCAgMzcsIDg3LCA4MywgIDIxLCA2OCwgNjUsICAgMCwgNDUsIDQyLCAgIDAsICA0LCAgNywKKyAgICAxMDAsIDE3NCwgMTQ5LCAgODksIDE1NSwgMTMyLCAgNzYsIDEzOSwgMTE3LCAgNjUsIDEyMSwgMTAyLCAgNTMsIDEwNCwgODcsICAzOSwgODYsIDcyLCAgMjMsIDY3LCA1NSwgICAwLCA0NSwgMzQsICAgMCwgIDMsICAwLAorICAgIDEwMywgMTczLCAxMzAsICA5MiwgMTU1LCAxMTUsICA4MCwgMTM4LCAxMDIsICA2OCwgMTIwLCA4OCwgIDUzLCAxMDMsIDc1LCAgNDAsIDg2LCA2MSwgIDI0LCA2NywgNDUsICAgMCwgNDUsIDI1LCAgIDAsICAzLCAgMCwKKyAgICAxMDcsIDE3MiwgMTA4LCAgOTUsIDE1NCwgOTYsICA4MiwgMTM3LCA4NSwgIDcwLCAxMTksIDczLCAgNTUsIDEwMiwgNjEsICA0MiwgODUsIDQ5LCAgMjUsIDY3LCAzNCwgICAwLCA0NSwgMTQsICAgMCwgIDMsICAwLAorICAgIDExMCwgMTcyLCA4NiwgIDk3LCAxNTMsIDc2LCAgODUsIDEzNywgNjcsICA3MCwgMTE5LCA1NywgIDU2LCAxMDIsIDQ2LCAgNDIsIDg0LCAzNSwgIDI2LCA2NiwgMjEsICAgMCwgNDQsICAxLCAgIDAsICAzLCAgMCwKKyAgICAxMTIsIDE3MSwgNjcsICA5OCwgMTUzLCA1OSwgIDg2LCAxMzcsIDUyLCAgNzEsIDExOSwgNDQsICA1OCwgMTAyLCAzNCwgIDQ0LCA4NSwgMjIsICAyNywgNjYsICA3LCAgIDAsIDQ0LCAgMCwgICAwLCAgMywgIDAsCisgICAgOTAsIDE2MCwgMjE1LCAgODEsIDE0NCwgMTkzLCAgNzAsIDEyOSwgMTczLCAgNjEsIDExMiwgMTUxLCAgNDksIDk1LCAxMzEsICAzNywgNzksIDEwOSwgIDIyLCA2MSwgODcsICAgMCwgMzgsIDYxLCAgIDAsICAwLCAyNSwKKyAgICA5NiwgMTYwLCAxOTQsICA4NiwgMTQzLCAxNzQsICA3NSwgMTI4LCAxNTcsICA2NSwgMTEyLCAxMzcsICA1MywgOTUsIDExNywgIDQwLCA3OCwgOTgsICAyNSwgNjAsIDc4LCAgIDAsIDM4LCA1MywgICAwLCAgMCwgMTcsCisgICAgMTAwLCAxNTksIDE3NywgIDg5LCAxNDMsIDE1OSwgIDc5LCAxMjgsIDE0MywgIDY3LCAxMTEsIDEyNCwgIDU1LCA5NSwgMTA3LCAgNDIsIDc4LCA4OSwgIDI3LCA2MCwgNzAsICAgMiwgMzgsIDQ2LCAgIDAsICAwLCAgOSwKKyAgICAxMDQsIDE1OCwgMTU5LCAgOTIsIDE0MiwgMTQzLCAgODEsIDEyNywgMTI3LCAgNjksIDExMCwgMTEwLCAgNTYsIDk0LCA5NCwgIDQzLCA3OCwgNzgsICAyOCwgNjAsIDYwLCAgIDIsIDM4LCAzOCwgICAwLCAgMCwgIDEsCisgICAgMTA3LCAxNTcsIDE0MCwgIDk0LCAxNDEsIDEyNSwgIDgyLCAxMjYsIDExMiwgIDcxLCAxMTAsIDk3LCAgNTksIDk0LCA4MiwgIDQ1LCA3NywgNjcsICAyOSwgNTksIDUxLCAgIDQsIDM3LCAzMCwgICAwLCAgMCwgIDAsCisgICAgMTEwLCAxNTYsIDEyMiwgIDk3LCAxNDAsIDEwOSwgIDg1LCAxMjUsIDk3LCAgNzIsIDEwOSwgODMsICA1OCwgOTMsIDcxLCAgNDUsIDc3LCA1NywgIDI5LCA2MCwgNDIsICAgNSwgMzgsIDIyLCAgIDAsICAwLCAgMCwKKyAgICAxMTEsIDE1NiwgMTAzLCAgOTksIDEzOSwgOTEsICA4NywgMTI1LCA4MSwgIDczLCAxMDgsIDY5LCAgNjAsIDkyLCA1OCwgIDQ2LCA3NywgNDUsICAzMCwgNTksIDMxLCAgIDUsIDM4LCAxMiwgICAwLCAgMCwgIDAsCisgICAgMTE1LCAxNTYsIDgyLCAxMDEsIDE0MCwgNzMsICA4OCwgMTI0LCA2MywgIDc0LCAxMDgsIDUzLCAgNjAsIDkyLCA0NCwgIDQ2LCA3NiwgMzIsICAzMSwgNTksIDE4LCAgIDYsIDM3LCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTE2LCAxNTUsIDY1LCAxMDIsIDEzOSwgNTgsICA4OSwgMTI0LCA0OSwgIDc1LCAxMDgsIDQxLCAgNjEsIDkyLCAzMiwgIDQ4LCA3NiwgMjEsICAzMSwgNTksICA2LCAgIDUsIDM3LCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTAwLCAxNDEsIDIwMSwgIDg4LCAxMjcsIDE4MSwgIDc5LCAxMTQsIDE2MiwgIDY5LCA5OSwgMTQyLCAgNTcsIDgzLCAxMjIsICA0NCwgNjgsIDEwMiwgIDMwLCA1MSwgODEsICAgNywgMjgsIDU2LCAgIDAsICAwLCAxOSwKKyAgICAxMDUsIDE0MSwgMTgyLCAgOTQsIDEyNywgMTYzLCAgODMsIDExNCwgMTQ2LCAgNzEsIDk4LCAxMjgsICA1OSwgODMsIDExMCwgIDQ2LCA2OCwgOTEsICAzMSwgNTEsIDcyLCAgMTAsIDI4LCA0OCwgICAwLCAgMCwgMTEsCisgICAgMTA4LCAxNDEsIDE2NiwgIDk2LCAxMjcsIDE0OSwgIDg1LCAxMTMsIDEzMywgIDczLCA5OCwgMTE2LCAgNjAsIDgzLCA5OSwgIDQ2LCA2OCwgODIsICAzMiwgNTEsIDY0LCAgMTEsIDI5LCA0MSwgICAwLCAgMCwgIDIsCisgICAgMTExLCAxNDEsIDE0OSwgIDk4LCAxMjYsIDEzNCwgIDg4LCAxMTIsIDExOSwgIDc0LCA5NywgMTAzLCAgNjEsIDgzLCA4OCwgIDQ4LCA2NywgNzIsICAzMywgNTEsIDU2LCAgMTEsIDI5LCAzNCwgICAwLCAgMCwgIDAsCisgICAgMTEyLCAxNDAsIDEzMiwgMTAwLCAxMjUsIDExOCwgIDg5LCAxMTIsIDEwNSwgIDc1LCA5NywgOTEsICA2MiwgODIsIDc3LCAgNDksIDY4LCA2MiwgIDMzLCA1MSwgNDcsICAxMiwgMjksIDI2LCAgIDAsICAwLCAgMCwKKyAgICAxMTUsIDE0MCwgMTE2LCAxMDIsIDEyNSwgMTAzLCAgOTAsIDExMSwgOTEsICA3NiwgOTYsIDc4LCAgNjIsIDgyLCA2NSwgIDQ5LCA2NywgNTIsICAzNCwgNTEsIDM4LCAgMTMsIDI5LCAxOCwgICAwLCAgMCwgIDAsCisgICAgMTE3LCAxMzksIDk3LCAxMDMsIDEyNCwgODcsICA5MSwgMTExLCA3NywgIDc4LCA5NiwgNjUsICA2MywgODEsIDU0LCAgNDksIDY3LCA0MSwgIDM0LCA1MSwgMjcsICAxMiwgMjksICA3LCAgIDAsICAwLCAgMCwKKyAgICAxMTksIDEzOCwgNzgsIDEwNSwgMTI0LCA2OSwgIDkyLCAxMTAsIDYwLCAgNzgsIDk1LCA1MCwgIDY1LCA4MSwgNDAsICA1MCwgNjcsIDI5LCAgMzQsIDUxLCAxNSwgIDEzLCAzMCwgIDAsICAgMCwgIDAsICAwLAorICAgIDEyMCwgMTM4LCA2NCwgMTA2LCAxMjQsIDU0LCAgOTMsIDExMCwgNDcsICA3OCwgOTUsIDM4LCAgNjUsIDgxLCAyOSwgIDUwLCA2NiwgMTcsICAzNCwgNTAsICAyLCAgMTMsIDI5LCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTA3LCAxMjQsIDE4OSwgIDk2LCAxMTEsIDE2OSwgIDg1LCA5OSwgMTUyLCAgNzMsIDg1LCAxMzIsICA2MSwgNzEsIDExNCwgIDQ4LCA1NywgOTUsICAzNCwgNDEsIDc1LCAgMTQsIDE4LCA1MSwgICAwLCAgMCwgMTMsCisgICAgMTExLCAxMjQsIDE3MSwgMTAwLCAxMTEsIDE1MywgIDg4LCA5OSwgMTM3LCAgNzUsIDg1LCAxMjAsICA2MywgNzIsIDEwMywgIDUwLCA1OCwgODUsICAzNiwgNDEsIDY2LCAgMTUsIDE5LCA0MywgICAwLCAgMCwgIDQsCisgICAgMTEzLCAxMjQsIDE1NiwgMTAxLCAxMTEsIDEzOSwgIDkwLCA5OSwgMTI1LCAgNzcsIDg1LCAxMDksICA2NCwgNzEsIDkzLCAgNTEsIDU3LCA3NywgIDM2LCA0MiwgNTksICAxNywgMjAsIDM3LCAgIDAsICAwLCAgMCwKKyAgICAxMTUsIDEyNCwgMTQwLCAxMDMsIDExMSwgMTI1LCAgOTAsIDk5LCAxMTIsICA3OCwgODUsIDk3LCAgNjQsIDcxLCA4MiwgIDUyLCA1NywgNjcsICAzNiwgNDIsIDUwLCAgMTYsIDIwLCAzMCwgICAwLCAgMCwgIDAsCisgICAgMTE3LCAxMjMsIDEyNSwgMTA0LCAxMTAsIDExMSwgIDkyLCA5OCwgOTksICA3OSwgODUsIDg2LCAgNjUsIDcxLCA3MiwgIDUxLCA1OCwgNTksICAzNywgNDIsIDQzLCAgMTcsIDIxLCAyMiwgICAwLCAgMCwgIDAsCisgICAgMTE4LCAxMjMsIDExMCwgMTA1LCAxMTAsIDk3LCAgOTMsIDk4LCA4NiwgIDc4LCA4NCwgNzQsICA2NiwgNzEsIDYyLCAgNTIsIDU3LCA0OSwgIDM3LCA0MiwgMzQsICAxNywgMjIsIDE0LCAgIDAsICAwLCAgMCwKKyAgICAxMjAsIDEyMywgOTMsIDEwNiwgMTA5LCA4MiwgIDk0LCA5NywgNzIsICA4MCwgODQsIDYxLCAgNjYsIDcxLCA1MCwgIDUyLCA1NywgMzgsICAzNywgNDIsIDI0LCAgMTcsIDIyLCAgMiwgICAwLCAgMCwgIDAsCisgICAgMTIxLCAxMjIsIDc1LCAxMDgsIDEwOSwgNjYsICA5NSwgOTcsIDU4LCAgODAsIDg0LCA0OCwgIDY2LCA3MSwgMzcsICA1MiwgNTcsIDI2LCAgMzcsIDQyLCAxMiwgIDE2LCAyMiwgIDAsICAgMCwgIDAsICAwLAorICAgIDEyMiwgMTIzLCA2MiwgMTA4LCAxMDksIDUyLCAgOTUsIDk3LCA0NSwgIDgxLCA4NCwgMzYsICA2NywgNzAsIDI2LCAgNTIsIDU3LCAxNCwgIDM3LCA0MiwgIDAsICAxNSwgMjIsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxMTMsIDEwNywgMTc3LCAxMDIsIDk2LCAxNTksICA4OSwgODUsIDE0MSwgIDc4LCA3MiwgMTI0LCAgNjUsIDYwLCAxMDcsICA1MiwgNDYsIDg5LCAgMzcsIDMwLCA3MCwgIDE4LCAgNSwgNDYsICAgMCwgIDAsICA2LAorICAgIDExNiwgMTA3LCAxNjAsIDEwNCwgOTYsIDE0NCwgIDkyLCA4NSwgMTI5LCAgODAsIDcyLCAxMTIsICA2NywgNjAsIDk2LCAgNTMsIDQ3LCA4MCwgIDM4LCAzMSwgNjIsICAxOSwgIDcsIDM5LCAgIDAsICAwLCAgMCwKKyAgICAxMTgsIDEwNywgMTQ3LCAxMDUsIDk2LCAxMzEsICA5MywgODUsIDExOCwgIDgwLCA3MiwgMTAxLCAgNjcsIDYwLCA4NywgIDU0LCA0NywgNzEsICAzOSwgMzEsIDU0LCAgMTksICA4LCAzMiwgICAwLCAgMCwgIDAsCisgICAgMTE5LCAxMDcsIDEzMiwgMTA2LCA5NiwgMTE4LCAgOTQsIDg1LCAxMDYsICA4MSwgNzMsIDkxLCAgNjcsIDYwLCA3NywgIDU0LCA0NywgNjMsICAzOSwgMzIsIDQ3LCAgMjAsICA5LCAyNSwgICAwLCAgMCwgIDAsCisgICAgMTE5LCAxMDcsIDExOCwgMTA2LCA5NSwgMTA1LCAgOTQsIDg1LCA5MywgIDgxLCA3MiwgODAsICA2OCwgNjAsIDY4LCAgNTQsIDQ3LCA1NCwgIDM5LCAzMiwgMzksICAyMCwgMTEsIDE4LCAgIDAsICAwLCAgMCwKKyAgICAxMjEsIDEwNywgMTA0LCAxMDcsIDk2LCA5MiwgIDk1LCA4NCwgODAsICA4MSwgNzIsIDY5LCAgNjgsIDYxLCA1OCwgIDU0LCA0OCwgNDYsICAzOSwgMzMsIDMxLCAgMjAsIDEyLCAgOSwgICAwLCAgMCwgIDAsCisgICAgMTIzLCAxMDcsIDg4LCAxMDgsIDk1LCA3NywgIDk2LCA4NCwgNjgsICA4MiwgNzIsIDU3LCAgNjgsIDYwLCA0NiwgIDU0LCA0NywgMzUsICAzOSwgMzMsIDIwLCAgMTksIDEzLCAgMiwgICAwLCAgMCwgIDAsCisgICAgMTIzLCAxMDYsIDcyLCAxMTAsIDk1LCA2MywgIDk2LCA4NCwgNTQsICA4MiwgNzIsIDQ1LCAgNjksIDYwLCAzNSwgIDU1LCA0OCwgMjMsICAzOSwgMzMsICA5LCAgMTgsIDE0LCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTI1LCAxMDYsIDYwLCAxMTAsIDk0LCA1MCwgIDk4LCA4NCwgNDIsICA4MywgNzIsIDM0LCAgNjksIDYwLCAyNSwgIDU1LCA0OCwgMTIsICAzOSwgMzMsICAwLCAgMTcsIDEzLCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTE4LCA4OSwgMTY1LCAxMDUsIDc5LCAxNDgsICA5MywgNjksIDEzMiwgIDgxLCA1NywgMTE1LCAgNjgsIDQ1LCA5OSwgIDU1LCAzMiwgODIsICA0MSwgMTUsIDY0LCAgMjEsICAwLCA0MSwgICAwLCAgMCwgIDAsCisgICAgMTIwLCA4OSwgMTUwLCAxMDcsIDc5LCAxMzUsICA5NiwgNjksIDEyMSwgIDgyLCA1OCwgMTA1LCAgNzAsIDQ2LCA4OSwgIDU2LCAzNCwgNzMsICA0MSwgMTcsIDU2LCAgMjEsICAwLCAzNCwgICAwLCAgMCwgIDAsCisgICAgMTIxLCA4OSwgMTM3LCAxMDgsIDc5LCAxMjMsICA5NiwgNjksIDEwOSwgIDgyLCA1OCwgOTUsICA3MCwgNDcsIDgxLCAgNTYsIDM0LCA2NiwgIDQxLCAxOCwgNDksICAyMSwgIDAsIDI4LCAgIDAsICAwLCAgMCwKKyAgICAxMjIsIDkwLCAxMjQsIDEwOSwgNzksIDExMCwgIDk2LCA2OSwgOTksICA4MywgNTgsIDg1LCAgNzAsIDQ3LCA3MiwgIDU2LCAzNSwgNTgsICA0MSwgMTksIDQyLCAgMjEsICAwLCAyMiwgICAwLCAgMCwgIDAsCisgICAgMTIzLCA5MCwgMTExLCAxMTAsIDc5LCA5OCwgIDk3LCA2OSwgODcsICA4MywgNTksIDc1LCAgNzAsIDQ3LCA2MywgIDU2LCAzNSwgNTAsICA0MSwgMjAsIDM1LCAgMjEsICAwLCAxNCwgICAwLCAgMCwgIDAsCisgICAgMTIzLCA5MCwgOTgsIDExMCwgNzksIDg3LCAgOTcsIDcwLCA3NiwgIDg0LCA1OCwgNjQsICA3MCwgNDgsIDUzLCAgNTYsIDM2LCA0MSwgIDQwLCAyMSwgMjYsICAyMSwgIDAsICA1LCAgIDAsICAwLCAgMCwKKyAgICAxMjUsIDg5LCA4NCwgMTExLCA3OSwgNzMsICA5NywgNjksIDY0LCAgODQsIDU5LCA1NCwgIDcwLCA0OCwgNDMsICA1NiwgMzYsIDMxLCAgNDAsIDIyLCAxNywgIDIwLCAgMSwgIDEsICAgMCwgIDAsICAwLAorICAgIDEyNSwgODksIDY5LCAxMTIsIDc5LCA2MCwgIDk4LCA3MCwgNTEsICA4NCwgNTksIDQyLCAgNzAsIDQ4LCAzMiwgIDU2LCAzNiwgMjAsICA0MSwgMjIsICA1LCAgMTksICAyLCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTI2LCA4OSwgNTcsIDExMiwgNzksIDQ5LCAgOTksIDcwLCA0MSwgIDg0LCA1OSwgMzIsICA3MCwgNDgsIDIyLCAgNTYsIDM2LCAxMCwgIDQwLCAyMiwgIDAsICAxOCwgIDIsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxMjEsIDY3LCAxNTQsIDEwOCwgNTgsIDEzOCwgIDk3LCA1MCwgMTI0LCAgODQsIDM5LCAxMDcsICA3MSwgMjgsIDkyLCAgNTgsIDEyLCA3NiwgIDQzLCAgMCwgNTksICAyMCwgIDAsIDM3LCAgIDAsICAwLCAgMCwKKyAgICAxMjQsIDY4LCAxNDAsIDExMSwgNTksIDEyNiwgIDk4LCA1MCwgMTEyLCAgODQsIDQwLCA5OCwgIDcxLCAyOSwgODMsICA1OCwgMTUsIDY3LCAgNDIsICAwLCA1MSwgIDIwLCAgMCwgMzAsICAgMCwgIDAsICAwLAorICAgIDEyNCwgNjgsIDEyOSwgMTExLCA1OSwgMTE0LCAgOTksIDUxLCAxMDIsICA4NiwgNDEsIDg4LCAgNzEsIDMwLCA3NSwgIDU4LCAxNywgNjAsICA0MiwgIDAsIDQ1LCAgMjAsICAwLCAyNCwgICAwLCAgMCwgIDAsCisgICAgMTI1LCA3MCwgMTE2LCAxMTEsIDYwLCAxMDMsICA5OSwgNTEsIDkyLCAgODUsIDQxLCA3OSwgIDcxLCAzMSwgNjYsICA1OCwgMTksIDUzLCAgNDIsICAzLCAzOCwgIDIwLCAgMCwgMTcsICAgMCwgIDAsICAwLAorICAgIDEyNSwgNzAsIDEwNCwgMTExLCA2MSwgOTMsICA5OSwgNTIsIDgxLCAgODUsIDQzLCA2OSwgIDcyLCAzMiwgNTgsICA1OCwgMjAsIDQ1LCAgNDIsICA0LCAzMSwgIDIwLCAgMCwgIDgsICAgMCwgIDAsICAwLAorICAgIDEyNiwgNzAsIDkyLCAxMTEsIDYxLCA4MSwgIDk5LCA1MiwgNzEsICA4NSwgNDIsIDYwLCAgNzEsIDMzLCA0OSwgIDU3LCAyMSwgMzcsICA0MiwgIDYsIDIzLCAgMjAsICAwLCAgMywgICAwLCAgMCwgIDAsCisgICAgMTI2LCA3MCwgNzksIDExMiwgNjEsIDcwLCAgOTksIDUzLCA2MCwgIDg1LCA0MywgNTAsICA3MSwgMzMsIDM5LCAgNTcsIDIyLCAyOCwgIDQxLCAgNywgMTMsICAxOSwgIDAsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxMjcsIDcxLCA2NiwgMTEzLCA2MiwgNTYsIDEwMCwgNTMsIDQ4LCAgODYsIDQ0LCAzOSwgIDcxLCAzNCwgMjksICA1NywgMjMsIDE4LCAgNDEsICA4LCAgMiwgIDE4LCAgMCwgIDAsICAgMCwgIDAsICAwLAorICAgIDEyOCwgNzAsIDU1LCAxMTQsIDYyLCA0NiwgMTAwLCA1NCwgMzksICA4NiwgNDQsIDMwLCAgNzEsIDM0LCAyMCwgIDU3LCAyMywgIDcsICA0MSwgIDksICAwLCAgMTgsICAwLCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTI0LCA0MSwgMTQ1LCAxMTEsIDMyLCAxMjgsICA5OSwgMjMsIDExNCwgIDg2LCAxMCwgMTAwLCAgNzMsICAwLCA4NSwgIDYwLCAgMCwgNzEsICA0MywgIDAsIDU0LCAgMTcsICAwLCAzMiwgICAwLCAgMCwgIDAsCisgICAgMTI2LCA0MiwgMTMxLCAxMTMsIDMzLCAxMTcsIDEwMCwgMjUsIDEwNCwgIDg2LCAxNCwgOTAsICA3MywgIDAsIDc3LCAgNjAsICAwLCA2MywgIDQ0LCAgMCwgNDcsICAxOCwgIDAsIDI1LCAgIDAsICAwLCAgMCwKKyAgICAxMjcsIDQzLCAxMjAsIDExMywgMzQsIDEwNiwgMTAxLCAyNiwgOTUsICA4NiwgMTcsIDgyLCAgNzMsICAyLCA2OSwgIDU5LCAgMCwgNTYsICA0MywgIDAsIDQxLCAgMTgsICAwLCAxOSwgICAwLCAgMCwgIDAsCisgICAgMTI3LCA0NSwgMTA5LCAxMTMsIDM3LCA5NywgMTAxLCAyOCwgODUsICA4NiwgMTksIDc0LCAgNzMsICA1LCA2MSwgIDU5LCAgMCwgNDgsICA0MywgIDAsIDM0LCAgMTksICAwLCAxMSwgICAwLCAgMCwgIDAsCisgICAgMTI3LCA0NiwgOTgsIDExNCwgMzgsIDg2LCAxMDAsIDMwLCA3NiwgIDg3LCAyMSwgNjUsICA3MywgIDksIDU0LCAgNTksICAwLCA0MSwgIDQzLCAgMCwgMjYsICAxOCwgIDAsICA1LCAgIDAsICAwLCAgMCwKKyAgICAxMjcsIDQ3LCA4NywgMTEzLCAzOSwgNzYsIDEwMSwgMzEsIDY3LCAgODYsIDIyLCA1NiwgIDcyLCAxMSwgNDUsICA1OSwgIDAsIDMzLCAgNDMsICAwLCAxOSwgIDE4LCAgMCwgIDIsICAgMCwgIDAsICAwLAorICAgIDEyOCwgNDgsIDc1LCAxMTQsIDM5LCA2NSwgMTAxLCAzMywgNTYsICA4NiwgMjMsIDQ2LCAgNzIsIDEyLCAzNiwgIDU4LCAgMCwgMjQsICA0MiwgIDAsICA5LCAgMTcsICAwLCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTI5LCA0OCwgNjMsIDExNCwgNDEsIDU0LCAxMDIsIDMzLCA0NiwgIDg3LCAyNCwgMzYsICA3MiwgMTQsIDI2LCAgNTgsICAxLCAxNCwgIDQyLCAgMCwgIDIsICAxNiwgIDAsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxMjgsIDQ4LCA1MywgMTE0LCA0MSwgNDQsIDEwMiwgMzQsIDM3LCAgODcsIDI1LCAyNywgIDcyLCAxNSwgMTcsICA1OCwgIDEsICAzLCAgNDEsICAwLCAgMCwgIDE1LCAgMCwgIDAsICAgMCwgIDAsICAwLAorICAgIDAsIDE4OSwgMjQyLCAgIDAsIDE2OSwgMjE3LCAgIDAsIDE1MSwgMTk0LCAgIDAsIDEzMiwgMTcwLCAgIDAsIDExMywgMTQ3LCAgIDAsIDk0LCAxMjMsICAgMCwgNzQsIDk5LCAgIDAsIDUxLCA3MSwgICAwLCAxNSwgMzQsCisgICAgMSwgMTg3LCAyMTksICAgMSwgMTY3LCAxOTUsICAgMCwgMTUwLCAxNzUsICAgMCwgMTMxLCAxNTMsICAgMCwgMTEzLCAxMzIsICAgMCwgOTQsIDExMSwgICAwLCA3NCwgODksICAgMCwgNTAsIDYzLCAgIDAsIDEzLCAyOCwKKyAgICAxLCAxODYsIDE5OCwgICAxLCAxNjcsIDE3OCwgICAwLCAxNDksIDE1OCwgICAwLCAxMzAsIDEzOSwgICAwLCAxMTEsIDExOSwgICAwLCA5MywgMTAwLCAgIDAsIDc0LCA4MCwgICAwLCA1MCwgNTUsICAgMCwgMTMsIDIyLAorICAgIDEsIDE4NSwgMTc2LCAgIDEsIDE2NSwgMTU5LCAgIDEsIDE0OCwgMTQyLCAgIDAsIDEyOSwgMTIzLCAgIDAsIDExMSwgMTA2LCAgIDAsIDkzLCA4OSwgICAwLCA3MywgNzAsICAgMCwgNTAsIDQ3LCAgIDAsIDEzLCAxMywKKyAgICAxLCAxODQsIDE1NywgICAxLCAxNjQsIDE0MSwgICAxLCAxNDcsIDEyNSwgICAwLCAxMjgsIDExMCwgICAwLCAxMTAsIDkzLCAgIDAsIDkyLCA3NywgICAwLCA3MywgNjAsICAgMCwgNTAsIDM5LCAgIDAsIDEyLCAgNSwKKyAgICAyNSwgMTgyLCAxMzcsICAyNSwgMTYzLCAxMjIsICAxNywgMTQ2LCAxMDksICAgMCwgMTI4LCA5NiwgICAwLCAxMTAsIDgxLCAgIDAsIDkyLCA2NiwgICAwLCA3MywgNTEsICAgMCwgNTAsIDMwLCAgIDAsIDEwLCAgMCwKKyAgICA0MiwgMTgxLCAxMTQsICAzNSwgMTYzLCAxMDIsICAzMCwgMTQ1LCA5MSwgIDE0LCAxMjcsIDgwLCAgIDAsIDEwOSwgNjcsICAgMCwgOTEsIDUzLCAgIDAsIDcyLCAzOSwgICAwLCA1MCwgMTksICAgMCwgMTAsICAwLAorICAgIDUyLCAxODEsIDkyLCAgNDMsIDE2MiwgODMsICAzMiwgMTQ1LCA3MywgIDE5LCAxMjYsIDYzLCAgIDAsIDEwOCwgNTIsICAgMCwgOTAsIDQwLCAgIDAsIDcyLCAyNywgICAwLCA1MCwgIDcsICAgMCwgMTAsICAwLAorICAgIDU3LCAxODEsIDc0LCAgNDgsIDE2MiwgNjYsICAzNywgMTQ0LCA1NywgIDI0LCAxMjYsIDQ5LCAgIDcsIDEwOCwgNDAsICAgMCwgOTAsIDI5LCAgIDAsIDcyLCAxNSwgICAwLCA0OSwgIDAsICAgMCwgMTAsICAwLAorICAgIDEsIDE3MCwgMjI3LCAgIDEsIDE1MiwgMjAzLCAgIDAsIDEzNiwgMTgyLCAgIDAsIDExOSwgMTU5LCAgIDAsIDEwMSwgMTM3LCAgIDAsIDg0LCAxMTUsICAgMCwgNjUsIDkyLCAgIDAsIDQzLCA2NiwgICAwLCAgMSwgMjksCisgICAgMSwgMTY5LCAyMDYsICAgMSwgMTUxLCAxODQsICAgMSwgMTM2LCAxNjUsICAgMCwgMTE4LCAxNDQsICAgMCwgMTAyLCAxMjUsICAgMCwgODQsIDEwNSwgICAwLCA2NSwgODMsICAgMCwgNDMsIDU4LCAgIDAsICAwLCAyMiwKKyAgICAyOSwgMTY4LCAxODYsICAyMSwgMTUxLCAxNjcsICAxNCwgMTM1LCAxNTAsICAgNCwgMTE4LCAxMzEsICAgMCwgMTAxLCAxMTIsICAgMCwgODMsIDk0LCAgIDAsIDY1LCA3NSwgICAwLCA0MywgNTEsICAgMCwgIDAsIDE2LAorICAgIDQxLCAxNjcsIDE2NywgIDMzLCAxNTAsIDE1MCwgIDMxLCAxMzQsIDEzNCwgIDE5LCAxMTcsIDExNywgICA0LCAxMDAsIDEwMCwgICAwLCA4MywgODMsICAgMCwgNjUsIDY1LCAgIDAsIDQyLCA0MywgICAwLCAgMCwgIDgsCisgICAgNDgsIDE2NywgMTQ5LCAgNDEsIDE0OSwgMTMzLCAgMzMsIDEzMywgMTE4LCAgMjUsIDExNiwgMTAzLCAgMTMsIDk5LCA4OCwgICAwLCA4MywgNzMsICAgMCwgNjUsIDU2LCAgIDAsIDQyLCAzNSwgICAwLCAgMCwgIDAsCisgICAgNTgsIDE2NSwgMTMwLCAgNDksIDE0OCwgMTE1LCAgNDIsIDEzMiwgMTAzLCAgMzEsIDExNSwgODksICAxOCwgOTksIDc1LCAgIDAsIDgyLCA2MSwgICAwLCA2NCwgNDYsICAgMCwgNDIsIDI2LCAgIDAsICAwLCAgMCwKKyAgICA2MiwgMTY0LCAxMTAsICA1NSwgMTQ3LCA5NywgIDQ1LCAxMzIsIDg3LCAgMzUsIDExNSwgNzUsICAyMiwgOTgsIDYzLCAgIDUsIDgyLCA1MCwgICAwLCA2NCwgMzYsICAgMCwgNDIsIDE2LCAgIDAsICAwLCAgMCwKKyAgICA2OSwgMTY0LCA4OSwgIDYwLCAxNDcsIDc4LCAgNTAsIDEzMSwgNzAsICAzNywgMTE0LCA1OSwgIDI2LCA5OCwgNDksICAxMCwgODEsIDM3LCAgIDAsIDY0LCAyNCwgICAwLCA0MiwgIDQsICAgMCwgIDAsICAwLAorICAgIDcxLCAxNjQsIDcxLCAgNjMsIDE0NywgNjMsICA1MywgMTMxLCA1NSwgIDQwLCAxMTQsIDQ3LCAgMjgsIDk4LCAzOCwgIDEzLCA4MSwgMjYsICAgMCwgNjQsIDEyLCAgIDAsIDQyLCAgMCwgICAwLCAgMCwgIDAsCisgICAgMjgsIDE1MywgMjE0LCAgMjQsIDEzOCwgMTkzLCAgMjMsIDEyMywgMTcxLCAgMTYsIDEwNywgMTUwLCAgIDAsIDkxLCAxMzAsICAgMCwgNzUsIDEwOSwgICAwLCA1OCwgODcsICAgMCwgMzUsIDYxLCAgIDAsICAwLCAyNSwKKyAgICA0OCwgMTUzLCAxOTQsICA0MSwgMTM4LCAxNzQsICAzNCwgMTIzLCAxNTYsICAyNywgMTA3LCAxMzYsICAxNiwgOTEsIDExNywgICAxLCA3NSwgOTgsICAgMCwgNTcsIDc4LCAgIDAsIDM1LCA1MywgICAwLCAgMCwgMTcsCisgICAgNTUsIDE1MywgMTc3LCAgNDcsIDEzNywgMTU4LCAgNDIsIDEyMiwgMTQyLCAgMzMsIDEwNywgMTI0LCAgMjIsIDkxLCAxMDYsICAgNiwgNzUsIDg4LCAgIDAsIDU3LCA3MCwgICAwLCAzNSwgNDYsICAgMCwgIDAsICA5LAorICAgIDYxLCAxNTIsIDE1OCwgIDUzLCAxMzYsIDE0MywgIDQ1LCAxMjIsIDEyNywgIDM2LCAxMDYsIDExMSwgIDI0LCA5MCwgOTQsICAxMCwgNzQsIDc4LCAgIDAsIDU3LCA2MSwgICAwLCAzNSwgMzksICAgMCwgIDAsICAyLAorICAgIDY3LCAxNTEsIDE0MSwgIDU5LCAxMzUsIDEyNiwgIDQ5LCAxMjEsIDExMiwgIDM5LCAxMDUsIDk4LCAgMjksIDkwLCA4MywgIDE0LCA3NCwgNjgsICAgMCwgNTcsIDUyLCAgIDAsIDM1LCAzMSwgICAwLCAgMCwgIDAsCisgICAgNzEsIDE1MCwgMTIzLCAgNjIsIDEzNSwgMTEwLCAgNTQsIDEyMCwgOTgsICA0MiwgMTA1LCA4NCwgIDMxLCA4OSwgNzEsICAxNiwgNzQsIDU4LCAgIDAsIDU3LCA0MywgICAwLCAzNSwgMjIsICAgMCwgIDAsICAwLAorICAgIDc0LCAxNTAsIDEwNSwgIDY0LCAxMzQsIDkyLCAgNTUsIDEyMCwgODMsICA0NSwgMTA0LCA3MSwgIDM0LCA4OSwgNTksICAyMCwgNzMsIDQ3LCAgIDAsIDU3LCAzMiwgICAwLCAzNSwgMTMsICAgMCwgIDAsICAwLAorICAgIDc4LCAxNDksIDg0LCAgNjksIDEzNCwgNzUsICA1OSwgMTIwLCA2NiwgIDQ3LCAxMDMsIDU2LCAgMzQsIDg4LCA0NiwgIDIyLCA3MywgMzQsICAgMSwgNTcsIDIwLCAgIDAsIDM1LCAgMSwgICAwLCAgMCwgIDAsCisgICAgODAsIDE0OSwgNjksICA3MCwgMTMzLCA2MSwgIDYwLCAxMTksIDUzLCAgNDksIDEwMywgNDQsICAzNiwgODgsIDM1LCAgMjMsIDczLCAyNCwgICAyLCA1NiwgMTAsICAgMCwgMzUsICAwLCAgIDAsICAwLCAgMCwKKyAgICA1OCwgMTM2LCAyMDAsICA1MCwgMTIyLCAxODAsICA0NSwgMTA5LCAxNjIsICAzOCwgOTQsIDE0MSwgIDI3LCA4MCwgMTIxLCAgMTUsIDY1LCAxMDIsICAgMCwgNDgsIDgxLCAgIDAsIDI2LCA1NiwgICAwLCAgMCwgMTksCisgICAgNjYsIDEzNiwgMTgyLCAgNTksIDEyMiwgMTYzLCAgNTIsIDEwOSwgMTQ2LCAgNDIsIDk0LCAxMjgsICAzMiwgODAsIDEwOSwgIDIwLCA2NSwgOTEsICAgMiwgNDgsIDcyLCAgIDAsIDI2LCA0OSwgICAwLCAgMCwgMTEsCisgICAgNzAsIDEzNiwgMTY1LCAgNjIsIDEyMiwgMTQ5LCAgNTUsIDEwOCwgMTMzLCAgNDYsIDk0LCAxMTYsICAzNSwgODAsIDk5LCAgMjEsIDY1LCA4MiwgICA0LCA0OSwgNjQsICAgMCwgMjYsIDQxLCAgIDAsICAwLCAgMywKKyAgICA3NiwgMTM1LCAxNDksICA2NiwgMTIxLCAxMzMsICA1OCwgMTA4LCAxMTksICA0OCwgOTQsIDEwMywgIDM2LCA3OSwgODgsICAyMywgNjUsIDczLCAgIDcsIDQ5LCA1NiwgICAwLCAyNywgMzQsICAgMCwgIDAsICAwLAorICAgIDc4LCAxMzUsIDEzMywgIDY5LCAxMjAsIDExOCwgIDYwLCAxMDcsIDEwNiwgIDUwLCA5MywgOTIsICAzOSwgNzksIDc3LCAgMjYsIDY1LCA2MywgICA4LCA0OSwgNDcsICAgMCwgMjcsIDI2LCAgIDAsICAwLCAgMCwKKyAgICA4MiwgMTM0LCAxMTcsICA3MSwgMTIwLCAxMDQsICA2MiwgMTA3LCA5MiwgIDUxLCA5MywgNzksICAzOSwgNzgsIDY2LCAgMjcsIDY0LCA1MywgIDEwLCA0OCwgMzksICAgMCwgMjcsIDE4LCAgIDAsICAwLCAgMCwKKyAgICA4NCwgMTM0LCA5OSwgIDczLCAxMTksIDg3LCAgNjQsIDEwNiwgNzcsICA1MywgOTIsIDY2LCAgNDIsIDc4LCA1NSwgIDI4LCA2NCwgNDIsICAxMSwgNDgsIDI5LCAgIDAsIDI4LCAgOSwgICAwLCAgMCwgIDAsCisgICAgODcsIDEzMywgODEsICA3NiwgMTE5LCA3MiwgIDY2LCAxMDYsIDYyLCAgNTUsIDkyLCA1MiwgIDQzLCA3OCwgNDIsICAyOSwgNjQsIDMxLCAgMTIsIDQ4LCAxNywgICAwLCAyOCwgIDAsICAgMCwgIDAsICAwLAorICAgIDg4LCAxMzQsIDY3LCAgNzcsIDExOSwgNTgsICA2OCwgMTA2LCA1MSwgIDU2LCA5MiwgNDIsICA0NCwgNzgsIDMyLCAgMzAsIDY0LCAyMCwgIDEyLCA0OCwgIDYsICAgMCwgMjgsICAwLCAgIDAsICAwLCAgMCwKKyAgICA3MywgMTIwLCAxODksICA2NCwgMTA3LCAxNjgsICA1NywgOTYsIDE1MSwgIDQ3LCA4MiwgMTMzLCAgMzgsIDY5LCAxMTQsICAyNiwgNTUsIDk1LCAgMTEsIDM5LCA3NSwgICAwLCAxNiwgNTEsICAgMCwgIDAsIDE0LAorICAgIDc4LCAxMjAsIDE3MSwgIDY5LCAxMDcsIDE1MywgIDYyLCA5NSwgMTM3LCAgNTEsIDgyLCAxMTksICA0MCwgNjksIDEwMiwgIDI5LCA1NSwgODUsICAxNSwgMzksIDY2LCAgIDAsIDE3LCA0NCwgICAwLCAgMCwgIDQsCisgICAgODEsIDEyMCwgMTU2LCAgNzEsIDEwNywgMTQwLCAgNjQsIDk1LCAxMjUsICA1MywgODIsIDEwOSwgIDQyLCA2OSwgOTMsICAzMSwgNTUsIDc3LCAgMTYsIDM5LCA1OSwgICAwLCAxOCwgMzcsICAgMCwgIDAsICAwLAorICAgIDg1LCAxMjAsIDE0MSwgIDc0LCAxMDcsIDEyNiwgIDY1LCA5NSwgMTEyLCAgNTQsIDgyLCA5NywgIDQzLCA2OSwgODIsICAzMiwgNTUsIDY3LCAgMTcsIDM5LCA1MSwgICAwLCAxOSwgMzAsICAgMCwgIDAsICAwLAorICAgIDg2LCAxMTksIDEyNiwgIDc2LCAxMDYsIDExMiwgIDY2LCA5NSwgMTAwLCAgNTYsIDgxLCA4NSwgIDQ1LCA2OSwgNzIsICAzMywgNTUsIDU5LCAgMTgsIDQwLCA0MywgICAwLCAxOSwgMjIsICAgMCwgIDAsICAwLAorICAgIDg5LCAxMTksIDExMCwgIDc4LCAxMDYsIDk4LCAgNjksIDk0LCA4NywgIDU2LCA4MSwgNzUsICA0NiwgNjgsIDYyLCAgMzMsIDU1LCA0OSwgIDE4LCA0MCwgMzUsICAgMCwgMjAsIDE1LCAgIDAsICAwLCAgMCwKKyAgICA4OSwgMTE5LCA5NSwgIDgwLCAxMDYsIDgzLCAgNzAsIDk0LCA3MywgIDU4LCA4MSwgNjMsICA0NiwgNjgsIDUxLCAgMzQsIDU1LCAzOSwgIDE5LCA0MCwgMjUsICAgMCwgMjAsICA0LCAgIDAsICAwLCAgMCwKKyAgICA5MiwgMTE4LCA3OCwgIDgyLCAxMDYsIDY4LCAgNzAsIDkzLCA1OSwgIDU5LCA4MSwgNDksICA0NywgNjgsIDM5LCAgMzQsIDU1LCAyOCwgIDE5LCA0MCwgMTQsICAgMCwgMjAsICAwLCAgIDAsICAwLCAgMCwKKyAgICA5MywgMTE4LCA2NSwgIDgyLCAxMDUsIDU1LCAgNzIsIDkzLCA0OCwgIDYwLCA4MSwgMzksICA0NywgNjgsIDI5LCAgMzQsIDU1LCAxOCwgIDIwLCA0MCwgIDIsICAgMCwgMjAsICAwLCAgIDAsICAwLCAgMCwKKyAgICA4MywgMTA0LCAxNzcsICA3NCwgOTMsIDE1OSwgIDY1LCA4MiwgMTQyLCAgNTYsIDcwLCAxMjQsICA0NSwgNTcsIDEwNiwgIDMzLCA0NCwgODksICAyMCwgMjgsIDcwLCAgIDEsICA0LCA0NiwgICAwLCAgMCwgIDgsCisgICAgODYsIDEwNCwgMTYxLCAgNzgsIDkzLCAxNDUsICA2OCwgODIsIDEyOCwgIDU4LCA3MCwgMTEyLCAgNDgsIDU4LCA5NiwgIDM1LCA0NSwgODAsICAyMSwgMjksIDYyLCAgIDEsICA2LCA0MCwgICAwLCAgMCwgIDAsCisgICAgODksIDEwNCwgMTQ3LCAgNzksIDkzLCAxMzEsICA2OSwgODIsIDExOCwgIDU5LCA3MCwgMTAyLCAgNDcsIDU4LCA4NywgIDM2LCA0NSwgNzIsICAyMywgMjksIDU1LCAgIDMsICA3LCAzMywgICAwLCAgMCwgIDAsCisgICAgOTAsIDEwNCwgMTMyLCAgODAsIDkzLCAxMTksICA3MSwgODIsIDEwNiwgIDYwLCA3MCwgOTEsICA0OCwgNTgsIDc3LCAgMzcsIDQ1LCA2MiwgIDIzLCAzMCwgNDcsICAgNCwgIDcsIDI2LCAgIDAsICAwLCAgMCwKKyAgICA5MiwgMTA0LCAxMTgsICA4MiwgOTMsIDEwNSwgIDcyLCA4MiwgOTMsICA2MSwgNjksIDgwLCAgNTAsIDU4LCA2OCwgIDM3LCA0NSwgNTUsICAyMywgMzAsIDM5LCAgIDQsICA4LCAxOCwgICAwLCAgMCwgIDAsCisgICAgOTQsIDEwNCwgMTA1LCAgODIsIDkyLCA5MywgIDcyLCA4MiwgODIsICA2MSwgNzAsIDcwLCAgNTAsIDU4LCA1OCwgIDM4LCA0NiwgNDYsICAyMywgMzEsIDMxLCAgIDYsIDEwLCAxMSwgICAwLCAgMCwgIDAsCisgICAgOTUsIDEwNCwgOTAsICA4NCwgOTIsIDc5LCAgNzQsIDgyLCA3MCwgIDYyLCA3MCwgNTgsICA1MCwgNTgsIDQ4LCAgMzcsIDQ2LCAzNiwgIDIzLCAzMSwgMjIsICAgNCwgMTEsICAzLCAgIDAsICAwLCAgMCwKKyAgICA5NiwgMTAzLCA3NCwgIDg1LCA5MiwgNjUsICA3NSwgODEsIDU2LCAgNjMsIDcwLCA0NywgIDUwLCA1OCwgMzcsICAzOCwgNDYsIDI1LCAgMjQsIDMxLCAxMSwgICAzLCAxMSwgIDAsICAgMCwgIDAsICAwLAorICAgIDk3LCAxMDMsIDYyLCAgODYsIDkyLCA1MywgIDc2LCA4MSwgNDUsICA2MywgNjksIDM2LCAgNTEsIDU4LCAyNywgIDM4LCA0NiwgMTUsICAyMywgMzEsICAwLCAgIDMsIDExLCAgMCwgICAwLCAgMCwgIDAsCisgICAgOTAsIDg3LCAxNjUsICA4MSwgNzcsIDE0OCwgIDcyLCA2NywgMTMyLCAgNjIsIDU1LCAxMTYsICA1MCwgNDQsIDk5LCAgMzksIDMxLCA4MiwgIDI1LCAxNCwgNjQsICAgMSwgIDAsIDQyLCAgIDAsICAwLCAgMSwKKyAgICA5MywgODcsIDE1MCwgIDgzLCA3NywgMTM1LCAgNzQsIDY3LCAxMjEsICA2MywgNTYsIDEwNSwgIDUyLCA0NSwgOTAsICA0MCwgMzIsIDc0LCAgMjUsIDE2LCA1NywgICAzLCAgMCwgMzUsICAgMCwgIDAsICAwLAorICAgIDk1LCA4NywgMTM4LCAgODUsIDc3LCAxMjMsICA3NSwgNjcsIDEwOSwgIDYzLCA1NywgOTUsICA1MywgNDUsIDgxLCAgNDEsIDMzLCA2NiwgIDI2LCAxNywgNTAsICAgNCwgIDAsIDI4LCAgIDAsICAwLCAgMCwKKyAgICA5NSwgODgsIDEyNCwgIDg1LCA3NywgMTExLCAgNzUsIDY3LCA5OSwgIDYzLCA1NywgODYsICA1MywgNDUsIDcyLCAgNDEsIDMzLCA1OCwgIDI2LCAxOCwgNDMsICAgNSwgIDEsIDIyLCAgIDAsICAwLCAgMCwKKyAgICA5NywgODgsIDExMiwgIDg3LCA3NywgMTAwLCAgNzYsIDY4LCA4OCwgIDY0LCA1NywgNzYsICA1MywgNDYsIDYzLCAgNDEsIDM0LCA1MCwgIDI2LCAxOSwgMzUsICAgNSwgIDIsIDE0LCAgIDAsICAwLCAgMCwKKyAgICA5OSwgODcsIDk5LCAgODcsIDc4LCA4OCwgIDc2LCA2OCwgNzcsICA2NSwgNTcsIDY1LCAgNTMsIDQ2LCA1NCwgIDQxLCAzNSwgNDIsICAyNywgMjAsIDI3LCAgIDYsICAyLCAgNSwgICAwLCAgMCwgIDAsCisgICAgMTAwLCA4NywgODUsICA4OCwgNzcsIDc1LCAgNzcsIDY4LCA2NSwgIDY1LCA1NywgNTQsICA1MywgNDYsIDQ0LCAgNDEsIDM1LCAzMiwgIDI3LCAyMSwgMTksICAgNSwgIDMsICAyLCAgIDAsICAwLCAgMCwKKyAgICAxMDAsIDg4LCA3MSwgIDg5LCA3NywgNjEsICA3OCwgNjgsIDUzLCAgNjYsIDU3LCA0NCwgIDUzLCA0NywgMzMsICA0MSwgMzUsIDIyLCAgMjcsIDIxLCAgNywgICA1LCAgMywgIDAsICAgMCwgIDAsICAwLAorICAgIDEwMSwgODcsIDYwLCAgOTAsIDc3LCA1MiwgIDc5LCA2OCwgNDQsICA2NiwgNTgsIDM0LCAgNTMsIDQ3LCAyNSwgIDQxLCAzNSwgMTMsICAyNiwgMjIsICAwLCAgIDUsICAzLCAgMCwgICAwLCAgMCwgIDAsCisgICAgOTcsIDY3LCAxNTUsICA4NiwgNTgsIDEzOCwgIDc3LCA1MCwgMTI1LCAgNjYsIDM5LCAxMDgsICA1NSwgMjgsIDkyLCAgNDMsIDEyLCA3NiwgIDI5LCAgMCwgNTksICAgMiwgIDAsIDM3LCAgIDAsICAwLCAgMCwKKyAgICA5OSwgNjcsIDE0MSwgIDg4LCA1OSwgMTI3LCAgNzgsIDUwLCAxMTMsICA2OCwgNDAsIDk4LCAgNTYsIDI5LCA4MywgIDQ0LCAxNSwgNjgsICAyOSwgIDAsIDUyLCAgIDMsICAwLCAzMCwgICAwLCAgMCwgIDAsCisgICAgMTAwLCA2OCwgMTI5LCAgODksIDU5LCAxMTUsICA4MCwgNTEsIDEwMywgIDY4LCA0MSwgODksICA1NiwgMzAsIDc1LCAgNDQsIDE2LCA2MSwgIDMwLCAgMCwgNDUsICAgNCwgIDAsIDI0LCAgIDAsICAwLCAgMCwKKyAgICAxMDAsIDY5LCAxMTgsICA5MCwgNjAsIDEwNCwgIDgwLCA1MSwgOTIsICA2NywgNDEsIDc5LCAgNTYsIDMxLCA2NiwgIDQ0LCAxOCwgNTMsICAyOSwgIDIsIDM4LCAgIDQsICAwLCAxOCwgICAwLCAgMCwgIDAsCisgICAgMTAxLCA2OSwgMTA0LCAgOTAsIDYxLCA5MywgIDc5LCA1MSwgODIsICA2NywgNDIsIDcwLCAgNTYsIDMyLCA1OSwgIDQ0LCAyMCwgNDYsICAyOSwgIDQsIDMxLCAgIDYsICAwLCAgOSwgICAwLCAgMCwgIDAsCisgICAgMTAyLCA2OSwgOTMsICA5MCwgNjEsIDgzLCAgODAsIDUyLCA3MiwgIDY4LCA0MiwgNjEsICA1NiwgMzMsIDUwLCAgNDMsIDIwLCAzOCwgIDI5LCAgNSwgMjMsICAgNywgIDAsICA0LCAgIDAsICAwLCAgMCwKKyAgICAxMDIsIDcwLCA4MCwgIDkxLCA2MSwgNzEsICA4MCwgNTIsIDYxLCAgNjgsIDQzLCA1MSwgIDU2LCAzMiwgNDAsICA0NCwgMjEsIDI5LCAgMzAsICA2LCAxNCwgICA3LCAgMCwgIDAsICAgMCwgIDAsICAwLAorICAgIDEwMywgNzAsIDY4LCAgOTIsIDYxLCA1OCwgIDgxLCA1MywgNTAsICA2OSwgNDMsIDQxLCAgNTYsIDM0LCAzMSwgIDQzLCAyMiwgMTksICAyOSwgIDcsICAzLCAgIDcsICAwLCAgMCwgICAwLCAgMCwgIDAsCisgICAgMTA0LCA3MCwgNTcsICA5MiwgNjEsIDQ4LCAgODIsIDUzLCA0MCwgIDY5LCA0MywgMzIsICA1NiwgMzQsIDIyLCAgNDMsIDIzLCAxMCwgIDI5LCAgOCwgIDAsICAgNiwgIDAsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxMDEsIDQ1LCAxNDUsICA5MSwgMzUsIDEyOSwgIDgwLCAyNiwgMTE2LCAgNjksIDE1LCAxMDEsICA1OSwgIDAsIDg2LCAgNDYsICAwLCA3MSwgIDMxLCAgMCwgNTUsICAgMCwgIDAsIDMzLCAgIDAsICAwLCAgMCwKKyAgICAxMDQsIDQ0LCAxMzIsICA5MiwgMzYsIDExOCwgIDgyLCAyOCwgMTA1LCAgNzEsIDE3LCA5MSwgIDU4LCAgMywgNzcsICA0NiwgIDAsIDYzLCAgMzEsICAwLCA0OCwgICAyLCAgMCwgMjYsICAgMCwgIDAsICAwLAorICAgIDEwNCwgNDYsIDEyMSwgIDkzLCAzNywgMTA3LCAgODIsIDMwLCA5NiwgIDcwLCAyMCwgODMsICA1OCwgIDYsIDcwLCAgNDYsICAwLCA1NywgIDMyLCAgMCwgNDEsICAgNCwgIDAsIDIwLCAgIDAsICAwLCAgMCwKKyAgICAxMDQsIDQ4LCAxMTAsICA5MywgNDAsIDk4LCAgODIsIDMxLCA4NywgIDcwLCAyMiwgNzQsICA1OSwgIDksIDYyLCAgNDUsICAwLCA0OSwgIDMxLCAgMCwgMzUsICAgNiwgIDAsIDEzLCAgIDAsICAwLCAgMCwKKyAgICAxMDQsIDQ4LCA5OSwgIDkyLCA0MSwgODgsICA4MiwgMzIsIDc3LCAgNzAsIDIzLCA2NSwgIDU4LCAxMSwgNTQsICA0NiwgIDAsIDQyLCAgMzIsICAwLCAyNywgICA3LCAgMCwgIDUsICAgMCwgIDAsICAwLAorICAgIDEwNSwgNTAsIDg4LCAgOTMsIDQxLCA3NywgIDgyLCAzNCwgNjgsICA3MSwgMjQsIDU3LCAgNTgsIDEzLCA0NiwgIDQ1LCAgMSwgMzUsICAzMSwgIDAsIDIxLCAgIDcsICAwLCAgMiwgICAwLCAgMCwgIDAsCisgICAgMTA1LCA1MCwgNzYsICA5NCwgNDEsIDY2LCAgODMsIDM0LCA1NywgIDcxLCAyNSwgNDcsICA1OCwgMTUsIDM3LCAgNDUsICAyLCAyNSwgIDMyLCAgMCwgMTEsICAgNywgIDAsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxMDYsIDUwLCA2NCwgIDk0LCA0MiwgNTUsICA4MywgMzUsIDQ3LCAgNzEsIDI2LCAzOCwgIDU4LCAxNiwgMjcsICA0NSwgIDQsIDE3LCAgMzEsICAwLCAgNCwgICA3LCAgMCwgIDAsICAgMCwgIDAsICAwLAorICAgIDEwNiwgNTEsIDU0LCAgOTUsIDQyLCA0NSwgIDgzLCAzNSwgMzgsICA3MSwgMjcsIDMwLCAgNTgsIDE2LCAxOSwgIDQ1LCAgNSwgIDcsICAzMCwgIDAsICAwLCAgIDYsICAwLCAgMCwgICAwLCAgMCwgIDAsCisgICAgMCwgMTgxLCAyNDAsICAgMCwgMTYyLCAyMTYsICAgMCwgMTQ0LCAxOTMsICAgMCwgMTI2LCAxNjgsICAgMCwgMTA5LCAxNDYsICAgMCwgOTEsIDEyMywgICAwLCA3MSwgOTgsICAgMCwgNDgsIDcxLCAgIDAsICA5LCAzNCwKKyAgICAwLCAxNzksIDIxOCwgICAwLCAxNjEsIDE5NSwgICAwLCAxNDQsIDE3NCwgICAwLCAxMjYsIDE1MywgICAwLCAxMDgsIDEzMiwgICAwLCA5MCwgMTEwLCAgIDAsIDcxLCA4OCwgICAwLCA0OCwgNjMsICAgMCwgIDgsIDI5LAorICAgIDAsIDE3OCwgMTk3LCAgIDAsIDE1OSwgMTc3LCAgIDAsIDE0MywgMTU5LCAgIDAsIDEyNSwgMTM5LCAgIDAsIDEwNywgMTE5LCAgIDAsIDkwLCA5OSwgICAwLCA3MSwgNzksICAgMCwgNDgsIDU1LCAgIDAsICA4LCAyMiwKKyAgICAwLCAxNzcsIDE3NywgICAwLCAxNTgsIDE1OCwgICAwLCAxNDIsIDE0MSwgICAwLCAxMjQsIDEyMywgICAwLCAxMDcsIDEwNiwgICAwLCA4OSwgODgsICAgMCwgNzEsIDcwLCAgIDAsIDQ4LCA0NywgICAwLCAgOCwgMTQsCisgICAgMCwgMTc2LCAxNTcsICAgMCwgMTU4LCAxNDEsICAgMCwgMTQxLCAxMjYsICAgMCwgMTIzLCAxMDksICAgMCwgMTA2LCA5MywgICAwLCA4OSwgNzgsICAgMCwgNzAsIDYwLCAgIDAsIDQ3LCAzOSwgICAwLCAgNywgIDUsCisgICAgMCwgMTc1LCAxMzgsICAgMCwgMTU3LCAxMjMsICAgMCwgMTQxLCAxMTAsICAgMCwgMTIzLCA5NiwgICAwLCAxMDUsIDgxLCAgIDAsIDg4LCA2NywgICAwLCA3MCwgNTEsICAgMCwgNDgsIDMwLCAgIDAsICA2LCAgMCwKKyAgICAwLCAxNzMsIDExNSwgICAwLCAxNTUsIDEwNCwgICAwLCAxNDAsIDkyLCAgIDAsIDEyMiwgODAsICAgMCwgMTA1LCA2NywgICAwLCA4OCwgNTUsICAgMCwgNjksIDQwLCAgIDAsIDQ3LCAyMCwgICAwLCAgNiwgIDAsCisgICAgMCwgMTczLCA5NCwgICAwLCAxNTUsIDg1LCAgIDAsIDEzOSwgNzUsICAgMCwgMTIxLCA2NCwgICAwLCAxMDQsIDUzLCAgIDAsIDg4LCA0MiwgICAwLCA3MCwgMjgsICAgMCwgNDcsICA5LCAgIDAsICA2LCAgMCwKKyAgICAwLCAxNzMsIDc2LCAgIDAsIDE1NSwgNzAsICAgMCwgMTM4LCA2MSwgICAwLCAxMjIsIDUzLCAgIDAsIDEwNCwgNDQsICAgMCwgODcsIDMyLCAgIDAsIDY5LCAxOCwgICAwLCA0NywgIDAsICAgMCwgIDYsICAwLAorICAgIDAsIDE2NCwgMjI2LCAgIDAsIDE0NywgMjAzLCAgIDAsIDEzMSwgMTgxLCAgIDAsIDExNCwgMTU4LCAgIDAsIDk3LCAxMzYsICAgMCwgODAsIDExNSwgICAwLCA2MywgOTIsICAgMCwgNDAsIDY1LCAgIDAsICAwLCAzMCwKKyAgICAwLCAxNjIsIDIwNSwgICAwLCAxNDUsIDE4NCwgICAwLCAxMzAsIDE2NCwgICAwLCAxMTQsIDE0MywgICAwLCA5NywgMTI0LCAgIDAsIDgxLCAxMDQsICAgMCwgNjMsIDgzLCAgIDAsIDQwLCA1OCwgICAwLCAgMCwgMjMsCisgICAgMCwgMTYyLCAxODcsICAgMCwgMTQ1LCAxNjcsICAgMCwgMTMwLCAxNTAsICAgMCwgMTEzLCAxMzEsICAgMCwgOTYsIDExMiwgICAwLCA4MCwgOTMsICAgMCwgNjIsIDc0LCAgIDAsIDQwLCA1MCwgICAwLCAgMCwgMTYsCisgICAgMCwgMTYwLCAxNjcsICAgMCwgMTQ0LCAxNTAsICAgMCwgMTI5LCAxMzQsICAgMCwgMTEyLCAxMTYsICAgMCwgOTYsIDEwMCwgICAwLCA4MCwgODIsICAgMCwgNjIsIDY1LCAgIDAsIDQwLCA0MywgICAwLCAgMCwgIDcsCisgICAgMCwgMTYwLCAxNDgsICAgMCwgMTQzLCAxMzMsICAgMCwgMTI4LCAxMTgsICAgMCwgMTExLCAxMDMsICAgMCwgOTYsIDg4LCAgIDAsIDgwLCA3MywgICAwLCA2MiwgNTYsICAgMCwgNDAsIDM1LCAgIDAsICAwLCAgMCwKKyAgICAwLCAxNTgsIDEzMCwgICAwLCAxNDIsIDExNywgICAwLCAxMjcsIDEwNCwgICAwLCAxMTEsIDg5LCAgIDAsIDk1LCA3NiwgICAwLCA3OSwgNjIsICAgMCwgNjIsIDQ2LCAgIDAsIDQwLCAyNiwgICAwLCAgMCwgIDAsCisgICAgMCwgMTU4LCAxMTEsICAgMCwgMTQxLCA5OSwgICAwLCAxMjcsIDg4LCAgIDAsIDExMSwgNzYsICAgMCwgOTUsIDYzLCAgIDAsIDc5LCA1MSwgICAwLCA2MiwgMzcsICAgMCwgNDAsIDE4LCAgIDAsICAwLCAgMCwKKyAgICAwLCAxNTgsIDkxLCAgIDAsIDE0MSwgODEsICAgMCwgMTI2LCA3MiwgICAwLCAxMTAsIDYyLCAgIDAsIDk0LCA1MCwgICAwLCA3OSwgMzksICAgMCwgNjIsIDI1LCAgIDAsIDQwLCAgNSwgICAwLCAgMCwgIDAsCisgICAgMCwgMTU3LCA3NCwgICAwLCAxNDEsIDY2LCAgIDAsIDEyNiwgNTksICAgMCwgMTEwLCA0OSwgICAwLCA5NCwgNDAsICAgMCwgNzgsIDI5LCAgIDAsIDYxLCAxNSwgICAwLCA0MCwgIDAsICAgMCwgIDAsICAwLAorICAgIDAsIDE0OCwgMjE0LCAgIDAsIDEzMywgMTkyLCAgIDAsIDExOSwgMTcxLCAgIDAsIDEwMywgMTUwLCAgIDAsIDg3LCAxMjksICAgMCwgNzIsIDEwOCwgICAwLCA1NSwgODYsICAgMCwgMzIsIDYxLCAgIDAsICAwLCAyNSwKKyAgICAwLCAxNDcsIDE5MywgICAwLCAxMzIsIDE3MywgICAwLCAxMTgsIDE1NSwgICAwLCAxMDMsIDEzNiwgICAwLCA4NywgMTE2LCAgIDAsIDcyLCA5OCwgICAwLCA1NSwgNzgsICAgMCwgMzIsIDUzLCAgIDAsICAwLCAxNywKKyAgICAwLCAxNDcsIDE3NiwgICAwLCAxMzIsIDE1OCwgICAwLCAxMTgsIDE0MiwgICAwLCAxMDIsIDEyNCwgICAwLCA4NywgMTA2LCAgIDAsIDcyLCA4OCwgICAwLCA1NSwgNjksICAgMCwgMzMsIDQ2LCAgIDAsICAwLCAgOSwKKyAgICAwLCAxNDYsIDE1OSwgICAwLCAxMzEsIDE0MiwgICAwLCAxMTcsIDEyNywgICAwLCAxMDIsIDExMSwgICAwLCA4NywgOTUsICAgMCwgNzEsIDc5LCAgIDAsIDU1LCA2MSwgICAwLCAzMywgMzksICAgMCwgIDAsICAyLAorICAgIDAsIDE0NSwgMTQwLCAgIDAsIDEzMCwgMTI2LCAgIDAsIDExNywgMTEyLCAgIDAsIDEwMSwgOTgsICAgMCwgODYsIDgzLCAgIDAsIDcxLCA2OCwgICAwLCA1NSwgNTIsICAgMCwgMzMsIDMxLCAgIDAsICAwLCAgMCwKKyAgICAwLCAxNDQsIDEyNCwgICAwLCAxMzAsIDExMSwgICAwLCAxMTYsIDk5LCAgIDAsIDEwMSwgODQsICAgMCwgODYsIDcyLCAgIDAsIDcxLCA1OSwgICAwLCA1NSwgNDMsICAgMCwgMzMsIDIzLCAgIDAsICAwLCAgMCwKKyAgICAwLCAxNDQsIDEwNiwgICAwLCAxMjksIDk0LCAgIDAsIDExNSwgODMsICAgMCwgMTAxLCA3MiwgICAwLCA4NSwgNjAsICAgMCwgNzEsIDQ4LCAgIDAsIDU1LCAzNCwgICAwLCAzMywgMTQsICAgMCwgIDAsICAwLAorICAgIDMsIDE0MywgODYsICAgMCwgMTI5LCA3NywgICAwLCAxMTUsIDY4LCAgIDAsIDEwMCwgNTgsICAgMCwgODUsIDQ4LCAgIDAsIDcwLCAzNiwgICAwLCA1NCwgMjIsICAgMCwgMzMsICAzLCAgIDAsICAwLCAgMCwKKyAgICAxOCwgMTQzLCA3MiwgIDEzLCAxMjgsIDYzLCAgIDAsIDExNSwgNTcsICAgMCwgMTAwLCA0NywgICAwLCA4NSwgMzcsICAgMCwgNzAsIDI2LCAgIDAsIDU0LCAxMywgICAwLCAzMywgIDAsICAgMCwgIDAsICAwLAorICAgIDAsIDEzMiwgMjAwLCAgIDAsIDExOCwgMTc5LCAgIDAsIDEwNSwgMTYxLCAgIDAsIDkxLCAxNDAsICAgMCwgNzYsIDEyMSwgICAwLCA2MiwgMTAxLCAgIDAsIDQ2LCA4MSwgICAwLCAyNCwgNTYsICAgMCwgIDAsIDE5LAorICAgIDAsIDEzMSwgMTgyLCAgIDAsIDExOCwgMTYzLCAgIDAsIDEwNSwgMTQ2LCAgIDAsIDkxLCAxMjgsICAgMCwgNzcsIDExMCwgICAwLCA2MiwgOTEsICAgMCwgNDYsIDcyLCAgIDAsIDI1LCA0OCwgICAwLCAgMCwgMTEsCisgICAgMCwgMTMxLCAxNjUsICAgMCwgMTE3LCAxNDksICAgMCwgMTA0LCAxMzMsICAgMCwgOTEsIDExNiwgICAwLCA3NywgOTksICAgMCwgNjIsIDgyLCAgIDAsIDQ2LCA2NCwgICAwLCAyNSwgNDEsICAgMCwgIDAsICA0LAorICAgIDAsIDEzMSwgMTQ5LCAgIDAsIDExNiwgMTM0LCAgIDAsIDEwNCwgMTE5LCAgIDAsIDkxLCAxMDQsICAgMCwgNzcsIDg5LCAgIDAsIDYyLCA3MywgICAwLCA0NiwgNTYsICAgMCwgMjUsIDM0LCAgIDAsICAwLCAgMCwKKyAgICAxMCwgMTMwLCAxMzMsICAgMiwgMTE2LCAxMTksICAgMCwgMTA0LCAxMDYsICAgMCwgOTAsIDkxLCAgIDAsIDc2LCA3OCwgICAwLCA2MiwgNjQsICAgMCwgNDYsIDQ4LCAgIDAsIDI2LCAyNywgICAwLCAgMCwgIDAsCisgICAgMjMsIDEzMCwgMTE4LCAgMjAsIDExNiwgMTA0LCAgMTMsIDEwMywgOTMsICAgMywgODksIDc5LCAgIDAsIDc2LCA2NywgICAwLCA2MiwgNTQsICAgMCwgNDYsIDM5LCAgIDAsIDI2LCAxOSwgICAwLCAgMCwgIDAsCisgICAgMzMsIDEyOSwgMTAxLCAgMjcsIDExNSwgODksICAxOSwgMTAzLCA3OSwgICA5LCA4OSwgNjcsICAgMCwgNzUsIDU2LCAgIDAsIDYxLCA0MywgICAwLCA0NiwgMjksICAgMCwgMjYsIDEwLCAgIDAsICAwLCAgMCwKKyAgICA0MSwgMTI4LCA4MywgIDM1LCAxMTUsIDczLCAgMjcsIDEwMiwgNjQsICAxNSwgODksIDU1LCAgIDAsIDc2LCA0NSwgICAwLCA2MiwgMzMsICAgMCwgNDYsIDE4LCAgIDAsIDI2LCAgMCwgICAwLCAgMCwgIDAsCisgICAgNDMsIDEyOSwgNjksICAzOCwgMTE1LCA2MSwgIDMwLCAxMDIsIDU0LCAgMTcsIDg5LCA0NSwgICAyLCA3NSwgMzQsICAgMCwgNjEsIDIzLCAgIDAsIDQ2LCAgOSwgICAwLCAyNiwgIDAsICAgMCwgIDAsICAwLAorICAgIDEsIDExNiwgMTg4LCAgIDEsIDEwNCwgMTY4LCAgIDAsIDkyLCAxNTEsICAgMCwgNzksIDEzMiwgICAwLCA2NiwgMTEzLCAgIDAsIDUyLCA5NCwgICAwLCAzNiwgNzUsICAgMCwgMTQsIDUyLCAgIDAsICAwLCAxNCwKKyAgICAxNywgMTE2LCAxNzEsICAxNiwgMTA0LCAxNTMsICAxNCwgOTIsIDEzNywgICA4LCA3OSwgMTE5LCAgIDAsIDY3LCAxMDIsICAgMCwgNTMsIDg1LCAgIDAsIDM3LCA2NywgICAwLCAxNiwgNDQsICAgMCwgIDAsICA0LAorICAgIDMxLCAxMTYsIDE1NSwgIDI3LCAxMDQsIDE0MCwgIDIxLCA5MiwgMTI1LCAgMTMsIDc5LCAxMDksICAgMywgNjYsIDkzLCAgIDAsIDUzLCA3NywgICAwLCAzNywgNTksICAgMCwgMTYsIDM4LCAgIDAsICAwLCAgMCwKKyAgICAzNywgMTE1LCAxNDEsICAzMCwgMTAzLCAxMjYsICAyNiwgOTIsIDExMiwgIDE2LCA3OSwgOTgsICAgNSwgNjYsIDgzLCAgIDAsIDUzLCA2NywgICAwLCAzOCwgNTEsICAgMCwgMTcsIDMxLCAgIDAsICAwLCAgMCwKKyAgICA0MSwgMTE1LCAxMjYsICAzNywgMTAzLCAxMTIsICAzMSwgOTIsIDEwMCwgIDIyLCA3OSwgODYsICAxMCwgNjYsIDcyLCAgIDAsIDUzLCA1OSwgICAwLCAzOCwgNDQsICAgMCwgMTcsIDIzLCAgIDAsICAwLCAgMCwKKyAgICA0OCwgMTE1LCAxMTEsICA0MSwgMTAyLCA5OSwgIDM0LCA5MSwgODgsICAyNCwgNzgsIDc2LCAgMTQsIDY2LCA2MywgICAwLCA1MywgNTAsICAgMCwgMzgsIDM2LCAgIDAsIDE4LCAxNSwgICAwLCAgMCwgIDAsCisgICAgNTEsIDExNSwgOTUsICA0NiwgMTAyLCA4NSwgIDM3LCA5MSwgNzQsICAyNiwgNzgsIDYzLCAgMTYsIDY2LCA1MiwgICAwLCA1MywgNDAsICAgMCwgMzgsIDI2LCAgIDAsIDE4LCAgNSwgICAwLCAgMCwgIDAsCisgICAgNTUsIDExNCwgODAsICA0NywgMTAyLCA2OSwgIDQwLCA5MCwgNjAsICAzMCwgNzgsIDUxLCAgMTksIDY2LCA0MSwgICAzLCA1MywgMjksICAgMCwgMzgsIDE1LCAgIDAsIDE3LCAgMCwgICAwLCAgMCwgIDAsCisgICAgNTYsIDExNCwgNjYsICA1MCwgMTAyLCA1OCwgIDQwLCA5MSwgNTAsICAzMiwgNzgsIDQxLCAgMTgsIDY2LCAzMiwgICA0LCA1MywgMjEsICAgMCwgMzgsICA1LCAgIDAsIDE3LCAgMCwgICAwLCAgMCwgIDAsCisgICAgMzksIDEwMiwgMTc4LCAgMzcsIDkwLCAxNTksICAzMCwgNzksIDE0MiwgIDIxLCA2OCwgMTI0LCAgMTQsIDU1LCAxMDYsICAgMCwgNDIsIDg5LCAgIDAsIDI2LCA3MCwgICAwLCAgNCwgNDYsICAgMCwgIDAsICA4LAorICAgIDQ4LCAxMDIsIDE2MSwgIDQyLCA5MCwgMTQ1LCAgMzUsIDc5LCAxMjgsICAyNiwgNjgsIDExMiwgIDE5LCA1NSwgOTYsICAgMywgNDMsIDc5LCAgIDAsIDI3LCA2MiwgICAwLCAgNiwgNDAsICAgMCwgIDAsICAwLAorICAgIDUwLCAxMDIsIDE0NywgIDQ0LCA5MCwgMTMyLCAgMzcsIDc5LCAxMTgsICAzMCwgNjgsIDEwMiwgIDIwLCA1NiwgODcsICAgNywgNDMsIDcyLCAgIDAsIDI4LCA1NSwgICAwLCAgNiwgMzQsICAgMCwgIDAsICAwLAorICAgIDUzLCAxMDEsIDEzMywgIDQ3LCA5MCwgMTE4LCAgNDEsIDc5LCAxMDYsICAzMiwgNjgsIDkxLCAgMjEsIDU2LCA3OCwgICA5LCA0MywgNjMsICAgMCwgMjgsIDQ3LCAgIDAsICA2LCAyNiwgICAwLCAgMCwgIDAsCisgICAgNTcsIDEwMSwgMTE5LCAgNTAsIDg5LCAxMDYsICA0MiwgNzksIDk0LCAgMzQsIDY3LCA4MSwgIDI0LCA1NiwgNjgsICAgOSwgNDQsIDU1LCAgIDAsIDI5LCA0MCwgICAwLCAgNiwgMTksICAgMCwgIDAsICAwLAorICAgIDYwLCAxMDAsIDEwNSwgIDUwLCA5MCwgOTQsICA0NSwgODAsIDgzLCAgMzYsIDY4LCA3MSwgIDI0LCA1NiwgNTksICAxMSwgNDQsIDQ2LCAgIDAsIDI5LCAzMiwgICAwLCAgNywgMTIsICAgMCwgIDAsICAwLAorICAgIDYzLCAxMDEsIDkxLCAgNTUsIDkwLCA4MCwgIDQ2LCA3OSwgNzAsICAzNywgNjgsIDU5LCAgMjYsIDU2LCA0OSwgIDEyLCA0NCwgMzcsICAgMSwgMjksIDIzLCAgIDAsICA3LCAgMywgICAwLCAgMCwgIDAsCisgICAgNjQsIDEwMSwgNzUsICA1NiwgODksIDY3LCAgNDgsIDc5LCA1NywgIDM3LCA2OCwgNDgsICAyNywgNTYsIDM3LCAgMTUsIDQ0LCAyNiwgICAwLCAyOSwgMTIsICAgMCwgIDcsICAwLCAgIDAsICAwLCAgMCwKKyAgICA2NiwgMTAxLCA2NCwgIDU4LCA4OSwgNTUsICA0OSwgNzksIDQ3LCAgMzksIDY4LCAzOCwgIDI3LCA1NiwgMjksICAxNCwgNDQsIDE4LCAgIDEsIDMwLCAgMiwgICAwLCAgNywgIDAsICAgMCwgIDAsICAwLAorICAgIDU3LCA4NiwgMTY1LCAgNTEsIDc1LCAxNDgsICA0NSwgNjUsIDEzMywgIDM4LCA1NCwgMTE2LCAgMjgsIDQzLCAxMDAsICAxNiwgMjksIDgzLCAgIDAsIDEzLCA2NCwgICAwLCAgMCwgNDIsICAgMCwgIDAsICAzLAorICAgIDYwLCA4NiwgMTUxLCAgNTUsIDc1LCAxMzUsICA0NywgNjYsIDEyMSwgIDM5LCA1NSwgMTA1LCAgMzAsIDQ0LCA5MCwgIDE4LCAzMSwgNzQsICAgMywgMTYsIDU3LCAgIDAsICAxLCAzNSwgICAwLCAgMCwgIDAsCisgICAgNjIsIDg2LCAxMzksICA1NiwgNzUsIDEyMywgIDQ5LCA2NiwgMTEwLCAgNDAsIDU1LCA5NSwgIDMwLCA0NCwgODEsICAxOSwgMzEsIDY2LCAgIDQsIDE3LCA1MSwgICAwLCAgMSwgMjksICAgMCwgIDAsICAwLAorICAgIDY1LCA4NiwgMTI1LCAgNTYsIDc2LCAxMTIsICA0OSwgNjYsIDk5LCAgMzksIDU1LCA4NiwgIDMxLCA0NCwgNzIsICAxOSwgMzIsIDU5LCAgIDUsIDE4LCA0NCwgICAwLCAgMSwgMjMsICAgMCwgIDAsICAwLAorICAgIDY3LCA4NiwgMTEzLCAgNTgsIDc1LCAxMDAsICA1MSwgNjYsIDg4LCAgNDEsIDU2LCA3NywgIDMxLCA0NSwgNjQsICAyMCwgMzIsIDUxLCAgIDYsIDE4LCAzNSwgICAwLCAgMSwgMTQsICAgMCwgIDAsICAwLAorICAgIDY5LCA4NiwgOTksICA2MSwgNzYsIDg4LCAgNTIsIDY2LCA3OCwgIDQzLCA1NiwgNjYsICAzMiwgNDUsIDU1LCAgMjAsIDMzLCA0MiwgICA3LCAxOSwgMjcsICAgMCwgIDEsICA2LCAgIDAsICAwLCAgMCwKKyAgICA2OSwgODYsIDg2LCAgNjEsIDc2LCA3NSwgIDUzLCA2NywgNjYsICA0MywgNTYsIDU1LCAgMzMsIDQ1LCA0NSwgIDIxLCAzNCwgMzQsICAgOCwgMjAsIDIwLCAgIDAsICAyLCAgMiwgICAwLCAgMCwgIDAsCisgICAgNzEsIDg2LCA3MiwgIDYzLCA3NSwgNjIsICA1NCwgNjYsIDU1LCAgNDUsIDU2LCA0NSwgIDMzLCA0NSwgMzUsICAyMiwgMzQsIDIzLCAgIDcsIDIwLCAgOCwgICAwLCAgMiwgIDAsICAgMCwgIDAsICAwLAorICAgIDcxLCA4NiwgNjIsICA2NCwgNzUsIDUzLCAgNTUsIDY2LCA0NiwgIDQ1LCA1NiwgMzYsICAzMywgNDYsIDI3LCAgMjIsIDM0LCAxNSwgICA4LCAyMCwgIDAsICAgMCwgIDIsICAwLCAgIDAsICAwLCAgMCwKKyAgICA2OSwgNjcsIDE1NiwgIDYxLCA1OCwgMTQwLCAgNTMsIDUwLCAxMjUsICA0NSwgMzksIDEwOCwgIDM1LCAyOCwgOTMsICAyNSwgMTIsIDc3LCAgMTIsICAwLCA1OSwgICAwLCAgMCwgMzcsICAgMCwgIDAsICAwLAorICAgIDcxLCA2OCwgMTQyLCAgNjMsIDU5LCAxMjYsICA1NiwgNTAsIDExNCwgIDQ3LCA0MCwgOTgsICAzNywgMjgsIDg0LCAgMjYsIDE1LCA2OCwgIDEyLCAgMCwgNTMsICAgMCwgIDAsIDMwLCAgIDAsICAwLCAgMCwKKyAgICA3MiwgNjgsIDEzMCwgIDYzLCA1OSwgMTE2LCAgNTYsIDUwLCAxMDQsICA0NywgNDAsIDkwLCAgMzgsIDMwLCA3NSwgIDI3LCAxNiwgNjEsICAxMywgIDAsIDQ2LCAgIDAsICAwLCAyNCwgICAwLCAgMCwgIDAsCisgICAgNzMsIDY5LCAxMTgsICA2NSwgNTksIDEwNSwgIDU3LCA1MSwgOTIsICA0NywgNDEsIDgwLCAgMzcsIDMwLCA2NywgIDI2LCAxOCwgNTMsICAxNCwgIDEsIDM5LCAgIDAsICAwLCAxOCwgICAwLCAgMCwgIDAsCisgICAgNzQsIDY5LCAxMDYsICA2NSwgNjAsIDkzLCAgNTcsIDUxLCA4MiwgIDQ4LCA0MSwgNzAsICAzOCwgMzEsIDU5LCAgMjYsIDE5LCA0NiwgIDEzLCAgMiwgMzIsICAgMCwgIDAsIDEwLCAgIDAsICAwLCAgMCwKKyAgICA3NiwgNjksIDk1LCAgNjYsIDYxLCA4NCwgIDU4LCA1MiwgNzMsICA0OCwgNDIsIDYxLCAgMzcsIDMyLCA1MCwgIDI2LCAyMCwgMzgsICAxNCwgIDQsIDI0LCAgIDAsICAwLCAgNCwgICAwLCAgMCwgIDAsCisgICAgNzYsIDY5LCA4MSwgIDY4LCA2MCwgNzIsICA1OCwgNTIsIDYyLCAgNDgsIDQyLCA1MSwgIDM4LCAzMiwgNDEsICAyNywgMjEsIDMwLCAgMTQsICA0LCAxNiwgICAwLCAgMCwgIDEsICAgMCwgIDAsICAwLAorICAgIDc2LCA2OSwgNjgsICA2OCwgNjEsIDYwLCAgNjAsIDUyLCA1MSwgIDQ5LCA0MywgNDEsICAzOCwgMzMsIDMyLCAgMjcsIDIxLCAyMCwgIDE0LCAgNSwgIDUsICAgMCwgIDAsICAwLCAgIDAsICAwLCAgMCwKKyAgICA3OCwgNzAsIDU5LCAgNjksIDYxLCA1MCwgIDYwLCA1MiwgNDIsICA0OSwgNDMsIDM0LCAgMzksIDMzLCAyNCwgIDI3LCAyMiwgMTMsICAxNCwgIDcsICAxLCAgIDAsICAwLCAgMCwgICAwLCAgMCwgIDAsCisgICAgNzUsIDQ2LCAxNDYsICA2OCwgMzgsIDEzMSwgIDYwLCAzMCwgMTE3LCAgNTAsIDE5LCAxMDIsICA0MSwgIDQsIDg3LCAgMjksICAwLCA3MiwgIDEzLCAgMCwgNTUsICAgMCwgIDAsIDMzLCAgIDAsICAwLCAgMCwKKyAgICA3OCwgNDcsIDEzMiwgIDcwLCAzOSwgMTE5LCAgNjEsIDMwLCAxMDUsICA1MywgMjAsIDkyLCAgNDIsICA1LCA3OCwgIDMwLCAgMCwgNjQsICAxMywgIDAsIDQ5LCAgIDAsICAwLCAyNywgICAwLCAgMCwgIDAsCisgICAgNzksIDQ4LCAxMjIsICA3MCwgNDAsIDEwOCwgIDYyLCAzMiwgOTYsICA1MiwgMjIsIDg0LCAgNDIsICA5LCA3MSwgIDMwLCAgMCwgNTgsICAxNCwgIDAsIDQyLCAgIDAsICAwLCAyMCwgICAwLCAgMCwgIDAsCisgICAgNzksIDUwLCAxMTEsICA3MCwgNDIsIDk5LCAgNjIsIDMzLCA4OCwgIDUyLCAyMywgNzQsICA0MSwgMTEsIDYzLCAgMjksICAwLCA1MCwgIDE0LCAgMCwgMzYsICAgMCwgIDAsIDE0LCAgIDAsICAwLCAgMCwKKyAgICA4MCwgNTAsIDk5LCAgNzAsIDQyLCA4OSwgIDYxLCAzNCwgNzgsICA1MiwgMjUsIDY3LCAgNDEsIDE0LCA1NSwgIDMwLCAgMCwgNDIsICAxNSwgIDAsIDI4LCAgIDAsICAwLCAgNiwgICAwLCAgMCwgIDAsCisgICAgODEsIDUxLCA4OSwgIDcxLCA0MywgNzgsICA2MiwgMzUsIDY5LCAgNTIsIDI1LCA1OCwgIDQyLCAxNSwgNDcsICAzMCwgIDMsIDM2LCAgMTUsICAwLCAyMiwgICAwLCAgMCwgIDMsICAgMCwgIDAsICAwLAorICAgIDgxLCA1MSwgNzcsICA3MSwgNDQsIDY4LCAgNjMsIDM2LCA1OSwgIDUzLCAyNiwgNDksICA0MSwgMTYsIDM4LCAgMzEsICA0LCAyNywgIDE2LCAgMCwgMTIsICAgMCwgIDAsICAwLCAgIDAsICAwLCAgMCwKKyAgICA4MSwgNTIsIDY1LCAgNzIsIDQzLCA1NiwgIDYzLCAzNiwgNDgsICA1MywgMjcsIDM5LCAgNDEsIDE3LCAyOSwgIDMwLCAgNCwgMTgsICAxNCwgIDAsICAzLCAgIDAsICAwLCAgMCwgICAwLCAgMCwgIDAsCisgICAgODEsIDUyLCA1NSwgIDczLCA0NCwgNDcsICA2NCwgMzYsIDM5LCAgNTMsIDI4LCAzMiwgIDQyLCAxOCwgMjEsICAzMSwgIDYsICA5LCAgMTQsICAwLCAgMCwgICAwLCAgMCwgIDAsICAgMCwgIDAsICAwLAorICAgIDAsIDE3NCwgMjM5LCAgIDAsIDE1NiwgMjE0LCAgIDAsIDEzOSwgMTkyLCAgIDAsIDEyMSwgMTY4LCAgIDAsIDEwNSwgMTQ1LCAgIDAsIDg3LCAxMjMsICAgMCwgNjgsIDk4LCAgIDAsIDQ2LCA3MCwgICAwLCAgMywgMzUsCisgICAgMCwgMTcyLCAyMTcsICAgMCwgMTU1LCAxOTQsICAgMCwgMTM5LCAxNzMsICAgMCwgMTIxLCAxNTIsICAgMCwgMTA0LCAxMzAsICAgMCwgODcsIDExMCwgICAwLCA2OSwgODgsICAgMCwgNDYsIDYzLCAgIDAsICA0LCAyOCwKKyAgICAwLCAxNzEsIDE5NywgICAwLCAxNTMsIDE3NSwgICAwLCAxMzgsIDE1OCwgICAwLCAxMjEsIDEzOSwgICAwLCAxMDMsIDExOCwgICAwLCA4NiwgMTAwLCAgIDAsIDY4LCA3OSwgICAwLCA0NiwgNTUsICAgMCwgIDQsIDIyLAorICAgIDAsIDE3MCwgMTc3LCAgIDAsIDE1MiwgMTU4LCAgIDAsIDEzNiwgMTQxLCAgIDAsIDExOSwgMTI0LCAgIDAsIDEwMywgMTA2LCAgIDAsIDg2LCA4OCwgICAwLCA2OCwgNzAsICAgMCwgNDUsIDQ3LCAgIDAsICAzLCAxNCwKKyAgICAwLCAxNjksIDE1NywgICAwLCAxNTIsIDE0MSwgICAwLCAxMzYsIDEyNiwgICAwLCAxMTksIDEwOSwgICAwLCAxMDIsIDk0LCAgIDAsIDg2LCA3OCwgICAwLCA2OCwgNjAsICAgMCwgNDYsIDM5LCAgIDAsICAzLCAgNSwKKyAgICAwLCAxNjcsIDEzOCwgICAwLCAxNTAsIDEyNCwgICAwLCAxMzUsIDExMSwgICAwLCAxMTgsIDk3LCAgIDAsIDEwMiwgODIsICAgMCwgODUsIDY4LCAgIDAsIDY4LCA1MiwgICAwLCA0NiwgMzEsICAgMCwgIDMsICAwLAorICAgIDAsIDE2NywgMTE4LCAgIDAsIDE1MCwgMTA0LCAgIDAsIDEzNSwgOTQsICAgMCwgMTE4LCA4MSwgICAwLCAxMDEsIDY5LCAgIDAsIDg0LCA1NiwgICAwLCA2NywgNDEsICAgMCwgNDUsIDIxLCAgIDAsICAzLCAgMCwKKyAgICAwLCAxNjYsIDk3LCAgIDAsIDE0OSwgODcsICAgMCwgMTM0LCA3NywgICAwLCAxMTcsIDY3LCAgIDAsIDEwMSwgNTYsICAgMCwgODUsIDQ0LCAgIDAsIDY3LCAzMCwgICAwLCA0NSwgMTAsICAgMCwgIDMsICAwLAorICAgIDAsIDE2NSwgNzksICAgMCwgMTQ5LCA3MywgICAwLCAxMzMsIDY0LCAgIDAsIDExNywgNTYsICAgMCwgMTAxLCA0NiwgICAwLCA4NSwgMzQsICAgMCwgNjgsIDIxLCAgIDAsIDQ2LCAgMSwgICAwLCAgMywgIDAsCisgICAgMCwgMTU4LCAyMjUsICAgMCwgMTQxLCAyMDEsICAgMCwgMTI2LCAxODAsICAgMCwgMTA5LCAxNTgsICAgMCwgOTQsIDEzNiwgICAwLCA3OCwgMTE0LCAgIDAsIDYwLCA5MSwgICAwLCAzOCwgNjYsICAgMCwgIDAsIDMwLAorICAgIDAsIDE1NiwgMjAzLCAgIDAsIDE0MCwgMTgzLCAgIDAsIDEyNSwgMTY0LCAgIDAsIDEwOSwgMTQzLCAgIDAsIDk0LCAxMjQsICAgMCwgNzgsIDEwNCwgICAwLCA2MSwgODMsICAgMCwgMzgsIDU3LCAgIDAsICAwLCAyMywKKyAgICAwLCAxNTYsIDE4NiwgICAwLCAxNDAsIDE2NiwgICAwLCAxMjUsIDE1MCwgICAwLCAxMDksIDEzMCwgICAwLCA5MywgMTExLCAgIDAsIDc3LCA5MywgICAwLCA2MCwgNzQsICAgMCwgMzgsIDUwLCAgIDAsICAwLCAxNywKKyAgICAwLCAxNTUsIDE2NywgICAwLCAxMzgsIDE0OSwgICAwLCAxMjQsIDEzNCwgICAwLCAxMDksIDExNywgICAwLCA5MywgMTAwLCAgIDAsIDc2LCA4MywgICAwLCA2MCwgNjUsICAgMCwgMzgsIDQzLCAgIDAsICAwLCAgOSwKKyAgICAwLCAxNTMsIDE0NywgICAwLCAxMzgsIDEzNCwgICAwLCAxMjQsIDEyMCwgICAwLCAxMDcsIDEwMywgICAwLCA5MiwgODgsICAgMCwgNzcsIDczLCAgIDAsIDYwLCA1NiwgICAwLCAzOCwgMzUsICAgMCwgIDAsICAwLAorICAgIDAsIDE1MywgMTMxLCAgIDAsIDEzNywgMTE4LCAgIDAsIDEyMiwgMTA1LCAgIDAsIDEwNywgOTAsICAgMCwgOTEsIDc2LCAgIDAsIDc2LCA2MywgICAwLCA2MCwgNDcsICAgMCwgMzksIDI4LCAgIDAsICAwLCAgMCwKKyAgICAwLCAxNTMsIDExMSwgICAwLCAxMzYsIDEwMCwgICAwLCAxMjMsIDkwLCAgIDAsIDEwNywgNzcsICAgMCwgOTIsIDY1LCAgIDAsIDc2LCA1MiwgICAwLCA2MCwgMzcsICAgMCwgMzgsIDE4LCAgIDAsICAwLCAgMCwKKyAgICAwLCAxNTIsIDkzLCAgIDAsIDEzNiwgODIsICAgMCwgMTIyLCA3NCwgICAwLCAxMDYsIDYzLCAgIDAsIDkxLCA1MiwgICAwLCA3NiwgNDAsICAgMCwgNTksIDI2LCAgIDAsIDM4LCAgNiwgICAwLCAgMCwgIDAsCisgICAgMCwgMTUxLCA3OCwgICAwLCAxMzYsIDY5LCAgIDAsIDEyMSwgNjEsICAgMCwgMTA2LCA1MiwgICAwLCA5MSwgNDMsICAgMCwgNzYsIDMyLCAgIDAsIDU5LCAxNywgICAwLCAzOCwgIDAsICAgMCwgIDAsICAwLAorICAgIDAsIDE0MywgMjEzLCAgIDAsIDEyOCwgMTkxLCAgIDAsIDExNSwgMTcxLCAgIDAsIDEwMCwgMTQ5LCAgIDAsIDg0LCAxMjgsICAgMCwgNjksIDEwOCwgICAwLCA1MiwgODYsICAgMCwgMzAsIDYxLCAgIDAsICAwLCAyNSwKKyAgICAwLCAxNDIsIDE5MywgICAwLCAxMjcsIDE3MywgICAwLCAxMTQsIDE1NCwgICAwLCA5OSwgMTM0LCAgIDAsIDg0LCAxMTYsICAgMCwgNjksIDk4LCAgIDAsIDUyLCA3NywgICAwLCAzMSwgNTMsICAgMCwgIDAsIDE4LAorICAgIDAsIDE0MSwgMTc2LCAgIDAsIDEyNywgMTU4LCAgIDAsIDExNCwgMTQxLCAgIDAsIDk4LCAxMjIsICAgMCwgODQsIDEwNSwgICAwLCA2OSwgODgsICAgMCwgNTMsIDY5LCAgIDAsIDMxLCA0NiwgICAwLCAgMCwgIDksCisgICAgMCwgMTQxLCAxNTksICAgMCwgMTI2LCAxNDIsICAgMCwgMTEzLCAxMjcsICAgMCwgOTgsIDExMCwgICAwLCA4MywgOTUsICAgMCwgNjksIDc4LCAgIDAsIDUzLCA2MCwgICAwLCAzMiwgMzksICAgMCwgIDAsICAyLAorICAgIDAsIDE0MCwgMTQwLCAgIDAsIDEyNiwgMTI2LCAgIDAsIDExMiwgMTEyLCAgIDAsIDk4LCA5OCwgICAwLCA4MywgODMsICAgMCwgNjgsIDY5LCAgIDAsIDUyLCA1MiwgICAwLCAzMSwgMzEsICAgMCwgIDAsICAwLAorICAgIDAsIDE0MCwgMTI0LCAgIDAsIDEyNSwgMTEyLCAgIDAsIDExMiwgMTAwLCAgIDAsIDk3LCA4NiwgICAwLCA4MywgNzIsICAgMCwgNjgsIDU5LCAgIDAsIDUyLCA0NCwgICAwLCAzMSwgMjMsICAgMCwgIDAsICAwLAorICAgIDAsIDEzOSwgMTA2LCAgIDAsIDEyNSwgOTYsICAgMCwgMTExLCA4NSwgICAwLCA5NywgNzIsICAgMCwgODMsIDYyLCAgIDAsIDY4LCA0OSwgICAwLCA1MiwgMzUsICAgMCwgMzEsIDE1LCAgIDAsICAwLCAgMCwKKyAgICAwLCAxMzgsIDg4LCAgIDAsIDEyNCwgNzksICAgMCwgMTExLCA3MCwgICAwLCA5NiwgNTksICAgMCwgODIsIDQ4LCAgIDAsIDY4LCAzOCwgICAwLCA1MiwgMjQsICAgMCwgMzEsICA0LCAgIDAsICAwLCAgMCwKKyAgICAwLCAxMzksIDc2LCAgIDAsIDEyNCwgNjYsICAgMCwgMTExLCA1OCwgICAwLCA5NiwgNTAsICAgMCwgODIsIDQwLCAgIDAsIDY4LCAyOSwgICAwLCA1MiwgMTUsICAgMCwgMzEsICAwLCAgIDAsICAwLCAgMCwKKyAgICAwLCAxMjksIDIwMCwgICAwLCAxMTQsIDE3OSwgICAwLCAxMDIsIDE2MCwgICAwLCA4NywgMTM5LCAgIDAsIDc0LCAxMjAsICAgMCwgNjAsIDEwMSwgICAwLCA0NCwgODEsICAgMCwgMjIsIDU2LCAgIDAsICAwLCAxOSwKKyAgICAwLCAxMjcsIDE4MSwgICAwLCAxMTQsIDE2MywgICAwLCAxMDIsIDE0NiwgICAwLCA4OCwgMTI3LCAgIDAsIDc0LCAxMDksICAgMCwgNjAsIDkxLCAgIDAsIDQ0LCA3MiwgICAwLCAyMywgNDgsICAgMCwgIDAsIDExLAorICAgIDAsIDEyNywgMTY2LCAgIDAsIDExMywgMTQ4LCAgIDAsIDEwMSwgMTMzLCAgIDAsIDg3LCAxMTUsICAgMCwgNzQsIDk5LCAgIDAsIDYwLCA4MiwgICAwLCA0NCwgNjQsICAgMCwgMjMsIDQyLCAgIDAsICAwLCAgNCwKKyAgICAwLCAxMjcsIDE1MCwgICAwLCAxMTMsIDEzNCwgICAwLCAxMDEsIDExOSwgICAwLCA4NywgMTA0LCAgIDAsIDc0LCA4OSwgICAwLCA2MCwgNzMsICAgMCwgNDQsIDU2LCAgIDAsIDIzLCAzNSwgICAwLCAgMCwgIDAsCisgICAgMCwgMTI1LCAxMzQsICAgMCwgMTEyLCAxMTgsICAgMCwgMTAwLCAxMDYsICAgMCwgODcsIDkyLCAgIDAsIDczLCA3OCwgICAwLCA2MCwgNjQsICAgMCwgNDQsIDQ4LCAgIDAsIDIzLCAyNywgICAwLCAgMCwgIDAsCisgICAgMCwgMTI1LCAxMTgsICAgMCwgMTEyLCAxMDUsICAgMCwgMTAwLCA5NCwgICAwLCA4NiwgODAsICAgMCwgNzMsIDY4LCAgIDAsIDYwLCA1NCwgICAwLCA0NCwgMzksICAgMCwgMjMsIDIwLCAgIDAsICAwLCAgMCwKKyAgICAwLCAxMjUsIDEwMSwgICAwLCAxMTEsIDkwLCAgIDAsIDk5LCA4MCwgICAwLCA4NiwgNjksICAgMCwgNzMsIDU4LCAgIDAsIDU5LCA0NSwgICAwLCA0NCwgMzAsICAgMCwgMjMsIDExLCAgIDAsICAwLCAgMCwKKyAgICAwLCAxMjQsIDg1LCAgIDAsIDExMSwgNzUsICAgMCwgOTksIDY2LCAgIDAsIDg2LCA1NiwgICAwLCA3MywgNDUsICAgMCwgNTksIDM0LCAgIDAsIDQ0LCAyMCwgICAwLCAyMywgIDEsICAgMCwgIDAsICAwLAorICAgIDAsIDEyNSwgNzIsICAgMCwgMTExLCA2MiwgICAwLCA5OSwgNTYsICAgMCwgODYsIDQ2LCAgIDAsIDczLCAzNiwgICAwLCA2MCwgMjYsICAgMCwgNDQsIDEyLCAgIDAsIDIzLCAgMCwgICAwLCAgMCwgIDAsCisgICAgMCwgMTE0LCAxODgsICAgMCwgMTAxLCAxNjcsICAgMCwgODksIDE1MCwgICAwLCA3NywgMTMxLCAgIDAsIDY0LCAxMTMsICAgMCwgNTAsIDk1LCAgIDAsIDM0LCA3NSwgICAwLCAxMiwgNTIsICAgMCwgIDAsIDE0LAorICAgIDAsIDExMywgMTcwLCAgIDAsIDEwMSwgMTUzLCAgIDAsIDg5LCAxMzcsICAgMCwgNzcsIDEyMCwgICAwLCA2NCwgMTAyLCAgIDAsIDUwLCA4NSwgICAwLCAzNSwgNjcsICAgMCwgMTIsIDQ0LCAgIDAsICAwLCAgNCwKKyAgICAwLCAxMTMsIDE1NiwgICAwLCAxMDAsIDEzOSwgICAwLCA4OSwgMTI1LCAgIDAsIDc3LCAxMDksICAgMCwgNjQsIDkyLCAgIDAsIDUxLCA3NywgICAwLCAzNSwgNjAsICAgMCwgMTIsIDM4LCAgIDAsICAwLCAgMCwKKyAgICAwLCAxMTIsIDE0MSwgICAwLCAxMDAsIDEyNiwgICAwLCA4OSwgMTEzLCAgIDAsIDc3LCA5OCwgICAwLCA2NCwgODMsICAgMCwgNTEsIDY4LCAgIDAsIDM1LCA1MSwgICAwLCAxMiwgMzAsICAgMCwgIDAsICAwLAorICAgIDAsIDExMiwgMTI3LCAgIDAsIDEwMCwgMTEyLCAgIDAsIDg5LCAxMDAsICAgMCwgNzYsIDg3LCAgIDAsIDY0LCA3NCwgICAwLCA1MSwgNTksICAgMCwgMzUsIDQ0LCAgIDAsIDEzLCAyNCwgICAwLCAgMCwgIDAsCisgICAgMCwgMTEyLCAxMTEsICAgMCwgMTAwLCAxMDAsICAgMCwgODgsIDg4LCAgIDAsIDc2LCA3NiwgICAwLCA2NCwgNjQsICAgMCwgNTEsIDUyLCAgIDAsIDM2LCAzNywgICAwLCAxMywgMTcsICAgMCwgIDAsICAwLAorICAgIDAsIDExMSwgOTYsICAgMCwgOTksIDg1LCAgIDAsIDg4LCA3NiwgICAwLCA3NiwgNjQsICAgMCwgNjQsIDUzLCAgIDAsIDUxLCA0MSwgICAwLCAzNiwgMjcsICAgMCwgMTMsICA2LCAgIDAsICAwLCAgMCwKKyAgICAwLCAxMTEsIDgxLCAgIDAsIDk5LCA3MSwgICAwLCA4OCwgNjIsICAgMCwgNzYsIDUyLCAgIDAsIDY0LCA0MywgICAwLCA1MSwgMzEsICAgMCwgMzYsIDE3LCAgIDAsIDEzLCAgMCwgICAwLCAgMCwgIDAsCisgICAgMCwgMTExLCA2OSwgICAwLCA5OSwgNjAsICAgMCwgODgsIDUyLCAgIDAsIDc1LCA0MywgICAwLCA2MywgMzQsICAgMCwgNTEsIDIxLCAgIDAsIDM2LCAgNywgICAwLCAxMywgIDAsICAgMCwgIDAsICAwLAorICAgIDAsIDk5LCAxNzcsICAgMCwgODgsIDE1OCwgICAwLCA3NywgMTQxLCAgIDAsIDY2LCAxMjMsICAgMCwgNTMsIDEwNiwgICAwLCA0MCwgODksICAgMCwgMjUsIDcxLCAgIDAsICA1LCA0NywgICAwLCAgMCwgIDgsCisgICAgMCwgOTksIDE2MCwgICAwLCA4OCwgMTQ0LCAgIDAsIDc3LCAxMjksICAgMCwgNjYsIDExMiwgICAwLCA1NCwgOTcsICAgMCwgNDEsIDgwLCAgIDAsIDI2LCA2MiwgICAwLCAgNSwgNDAsICAgMCwgIDAsICAwLAorICAgIDAsIDk5LCAxNDcsICAgMCwgODcsIDEzMiwgICAwLCA3OCwgMTE3LCAgIDAsIDY2LCAxMDIsICAgMCwgNTQsIDg3LCAgIDAsIDQyLCA3MiwgICAwLCAyNiwgNTUsICAgMCwgIDUsIDM0LCAgIDAsICAwLCAgMCwKKyAgICAwLCA5OSwgMTM0LCAgIDAsIDg4LCAxMTksICAgMCwgNzcsIDEwNywgICAwLCA2NiwgOTIsICAgMCwgNTQsIDc4LCAgIDAsIDQyLCA2NCwgICAwLCAyNywgNDgsICAgMCwgIDUsIDI3LCAgIDAsICAwLCAgMCwKKyAgICAwLCA5OSwgMTIwLCAgIDAsIDg3LCAxMDcsICAgMCwgNzgsIDk0LCAgIDAsIDY2LCA4MSwgICAwLCA1NCwgNjgsICAgMCwgNDIsIDU1LCAgIDAsIDI3LCA0MCwgICAwLCAgNiwgMjAsICAgMCwgIDAsICAwLAorICAgIDAsIDk4LCAxMDUsICAgMCwgODcsIDk0LCAgIDAsIDc3LCA4NCwgICAwLCA2NSwgNzEsICAgMCwgNTUsIDU5LCAgIDAsIDQyLCA0NywgICAwLCAyOCwgMzMsICAgMCwgIDYsIDEyLCAgIDAsICAwLCAgMCwKKyAgICAwLCA5OCwgOTMsICAgMCwgODcsIDgxLCAgIDAsIDc3LCA3MiwgICAwLCA2NiwgNjEsICAgMCwgNTQsIDQ5LCAgIDAsIDQyLCAzNywgICAwLCAyOCwgMjQsICAgMCwgIDYsICA0LCAgIDAsICAwLCAgMCwKKyAgICAwLCA5OCwgNzcsICAgMCwgODcsIDY4LCAgIDAsIDc3LCA1OSwgICAwLCA2NSwgNDksICAgMCwgNTQsIDM5LCAgIDAsIDQyLCAyNywgICAwLCAyOSwgMTQsICAgMCwgIDYsICAwLCAgIDAsICAwLCAgMCwKKyAgICAxLCA5OCwgNjUsICAgNywgODcsIDU2LCAgIDAsIDc3LCA0OSwgICAwLCA2NiwgNDEsICAgMCwgNTQsIDMwLCAgIDAsIDQyLCAxOSwgICAwLCAyOSwgIDMsICAgMCwgIDYsICAwLCAgIDAsICAwLCAgMCwKKyAgICAwLCA4NCwgMTY2LCAgIDAsIDc0LCAxNDksICAgMCwgNjQsIDEzNCwgICAwLCA1MywgMTE3LCAgIDAsIDQxLCAxMDAsICAgMCwgMjgsIDgzLCAgIDAsIDExLCA2NCwgICAwLCAgMCwgNDIsICAgMCwgIDAsICAzLAorICAgIDAsIDg0LCAxNTEsICAgMCwgNzQsIDEzNSwgICAwLCA2NCwgMTIxLCAgIDAsIDUzLCAxMDUsICAgMCwgNDIsIDkwLCAgIDAsIDMwLCA3NSwgICAwLCAxNCwgNTgsICAgMCwgIDAsIDM2LCAgIDAsICAwLCAgMCwKKyAgICAwLCA4NCwgMTM4LCAgIDAsIDc0LCAxMjQsICAgMSwgNjQsIDExMCwgICAwLCA1NCwgOTUsICAgMCwgNDMsIDgxLCAgIDAsIDMwLCA2NywgICAwLCAxNSwgNTEsICAgMCwgIDEsIDI5LCAgIDAsICAwLCAgMCwKKyAgICAxNCwgODQsIDEyNiwgIDEyLCA3NCwgMTEyLCAgIDIsIDY1LCA5OSwgICAwLCA1NCwgODUsICAgMCwgNDQsIDczLCAgIDAsIDMxLCA1OSwgICAwLCAxNiwgNDQsICAgMCwgIDEsIDIzLCAgIDAsICAwLCAgMCwKKyAgICAxNiwgODQsIDExMywgIDEzLCA3NCwgMTAwLCAgIDYsIDY1LCA4OSwgICAwLCA1NCwgNzcsICAgMCwgNDQsIDY1LCAgIDAsIDMxLCA1MSwgICAwLCAxNywgMzYsICAgMCwgIDEsIDE2LCAgIDAsICAwLCAgMCwKKyAgICAyNCwgODQsIDEwMCwgIDE4LCA3NCwgODgsICAxMywgNjUsIDc4LCAgIDIsIDU1LCA2OCwgICAwLCA0NCwgNTUsICAgMCwgMzIsIDQzLCAgIDAsIDE4LCAyOCwgICAwLCAgMSwgIDYsICAgMCwgIDAsICAwLAorICAgIDI2LCA4NCwgODcsICAyNCwgNzQsIDc2LCAgMTcsIDY1LCA2NywgICA3LCA1NCwgNTcsICAgMCwgNDQsIDQ2LCAgIDAsIDMyLCAzNSwgICAwLCAxOSwgMjEsICAgMCwgIDIsICAzLCAgIDAsICAwLCAgMCwKKyAgICAzMCwgODQsIDc0LCAgMjgsIDc0LCA2NCwgIDIwLCA2NSwgNTUsICAxMiwgNTUsIDQ2LCAgIDAsIDQ0LCAzNSwgICAwLCAzMiwgMjQsICAgMCwgMTgsICA5LCAgIDAsICAxLCAgMCwgICAwLCAgMCwgIDAsCisgICAgMzIsIDg0LCA2MywgIDI4LCA3NCwgNTQsICAyMSwgNjUsIDQ3LCAgMTMsIDU0LCAzOCwgICAwLCA0NCwgMjgsICAgMCwgMzIsIDE2LCAgIDAsIDE4LCAgMSwgICAwLCAgMSwgIDAsICAgMCwgIDAsICAwLAorICAgIDMwLCA2NywgMTU1LCAgMjAsIDU4LCAxMzksICAyMCwgNDksIDEyNiwgIDEyLCAzOSwgMTEwLCAgIDAsIDI3LCA5NCwgICAwLCAxMywgNzcsICAgMCwgIDAsIDYwLCAgIDAsICAwLCAzNywgICAwLCAgMCwgIDAsCisgICAgMzUsIDY3LCAxNDIsICAzMCwgNTgsIDEyNiwgIDIzLCA1MCwgMTE0LCAgMTYsIDQwLCA5OSwgICA3LCAyOSwgODUsICAgMCwgMTUsIDY5LCAgIDAsICAwLCA1MiwgICAwLCAgMCwgMzAsICAgMCwgIDAsICAwLAorICAgIDM1LCA2OCwgMTMxLCAgMzAsIDU5LCAxMTYsICAyNywgNTAsIDEwNCwgIDE4LCA0MCwgOTAsICAgOSwgMjksIDc2LCAgIDAsIDE3LCA2MiwgICAwLCAgMiwgNDYsICAgMCwgIDAsIDI0LCAgIDAsICAwLCAgMCwKKyAgICAzNywgNjksIDExOSwgIDMzLCA1OSwgMTA2LCAgMjcsIDUxLCA5NCwgIDIxLCA0MSwgODAsICAgOSwgMzAsIDY3LCAgIDAsIDE4LCA1NCwgICAwLCAgMywgMzksICAgMCwgIDAsIDE4LCAgIDAsICAwLCAgMCwKKyAgICA0MCwgNjksIDEwNywgIDM2LCA1OSwgOTQsICAyOCwgNTEsIDg0LCAgMTgsIDQxLCA3MiwgIDEwLCAzMSwgNjAsICAgMCwgMTksIDQ3LCAgIDAsICA0LCAzMiwgICAwLCAgMCwgMTAsICAgMCwgIDAsICAwLAorICAgIDQyLCA2OSwgOTUsICAzNiwgNTksIDg0LCAgMjksIDUxLCA3NCwgIDE5LCA0MSwgNjMsICAxMCwgMzEsIDUyLCAgIDAsIDIwLCAzOSwgICAwLCAgNCwgMjUsICAgMCwgIDAsICA0LCAgIDAsICAwLCAgMCwKKyAgICA0MywgNjksIDgzLCAgMzgsIDYwLCA3MywgIDMyLCA1MSwgNjIsICAyMywgNDIsIDUzLCAgMTEsIDMxLCA0MiwgICAwLCAyMCwgMzEsICAgMCwgIDUsIDE3LCAgIDAsICAwLCAgMSwgICAwLCAgMCwgIDAsCisgICAgNDUsIDY5LCA3MCwgIDM5LCA2MCwgNjAsICAzMywgNTEsIDUyLCAgMjQsIDQyLCA0MywgIDEzLCAzMiwgMzMsICAgMCwgMjEsIDIxLCAgIDAsICA1LCAgNiwgICAwLCAgMCwgIDAsICAgMCwgIDAsICAwLAorICAgIDQ3LCA2OSwgNTksICA0MSwgNjAsIDUxLCAgMzQsIDUxLCA0MywgIDI0LCA0MiwgMzUsICAxMiwgMzMsIDI2LCAgIDEsIDIyLCAxNCwgICAwLCAgNSwgIDEsICAgMCwgIDAsICAwLCAgIDAsICAwLCAgMCwKKyAgICA0NiwgNDgsIDE0NiwgIDQyLCA0MCwgMTMxLCAgMzYsIDMyLCAxMTgsICAyNywgMjIsIDEwMywgIDE3LCAgNiwgODgsICAgNSwgIDAsIDczLCAgIDAsICAwLCA1NSwgICAwLCAgMCwgMzMsICAgMCwgIDAsICAwLAorICAgIDQ4LCA0OCwgMTMzLCAgNDQsIDQwLCAxMTksICAzNywgMzIsIDEwNywgIDI4LCAyMiwgOTMsICAyMCwgIDgsIDc5LCAgIDcsICAwLCA2NSwgICAwLCAgMCwgNDksICAgMCwgIDAsIDI3LCAgIDAsICAwLCAgMCwKKyAgICA0OCwgNTAsIDEyMywgIDQ0LCA0MSwgMTA5LCAgMzcsIDMzLCA5NywgIDMwLCAyMywgODMsICAyMSwgMTEsIDcxLCAgIDgsICAwLCA1OCwgICAwLCAgMCwgNDIsICAgMCwgIDAsIDIxLCAgIDAsICAwLCAgMCwKKyAgICA0OSwgNTEsIDExMSwgIDQ1LCA0MiwgOTksICAzOCwgMzQsIDg3LCAgMjksIDI1LCA3NSwgIDIwLCAxMywgNjMsICAgOCwgIDAsIDUxLCAgIDAsICAwLCAzNiwgICAwLCAgMCwgMTQsICAgMCwgIDAsICAwLAorICAgIDUyLCA1MiwgMTAwLCAgNDQsIDQzLCA4OSwgIDM4LCAzNSwgNzksICAyOSwgMjYsIDY4LCAgMTksIDE1LCA1NiwgIDEwLCAgMSwgNDMsICAgMCwgIDAsIDI4LCAgIDAsICAwLCAgNiwgICAwLCAgMCwgIDAsCisgICAgNTIsIDUyLCA5MCwgIDQ3LCA0NCwgNzksICAzOSwgMzYsIDcwLCAgMzAsIDI3LCA1OSwgIDIwLCAxNiwgNDcsICAgOSwgIDIsIDM2LCAgIDAsICAwLCAyMiwgICAwLCAgMCwgIDIsICAgMCwgIDAsICAwLAorICAgIDUyLCA1MywgNzgsICA0NiwgNDQsIDY4LCAgMzksIDM3LCA2MCwgIDMyLCAyNywgNDksICAyMiwgMTcsIDM5LCAgMTAsICAzLCAyOCwgICAwLCAgMCwgMTIsICAgMCwgIDAsICAwLCAgIDAsICAwLCAgMCwKKyAgICA1MywgNTMsIDY2LCAgNDcsIDQ0LCA1NywgIDQwLCAzNiwgNDgsICAzMiwgMjcsIDM5LCAgMjIsIDE4LCAzMCwgICA5LCAgNCwgMTgsICAgMCwgIDAsICAzLCAgIDAsICAwLCAgMCwgICAwLCAgMCwgIDAsCisgICAgNTQsIDUzLCA1NywgIDQ4LCA0NSwgNDksICA0MSwgMzcsIDQxLCAgMzMsIDI4LCAzMiwgIDIyLCAxOSwgMjMsICAxMSwgIDYsIDEwLCAgIDEsICAwLCAgMCwgICAwLCAgMCwgIDAsICAgMCwgIDAsICAwLAorfTsKK3ZvaWQgQWRvYmVDTVlLX3RvX3NSR0IxKEZYX0JZVEUgYywgRlhfQllURSBtLCBGWF9CWVRFIHksIEZYX0JZVEUgaywgRlhfQllURSYgUiwgRlhfQllURSYgRywgRlhfQllURSYgQikKK3sKKyAgICBpbnQgZml4X2MgPSBjIDw8IDg7CisgICAgaW50IGZpeF9tID0gbSA8PCA4OworICAgIGludCBmaXhfeSA9IHkgPDwgODsKKyAgICBpbnQgZml4X2sgPSBrIDw8IDg7CisgICAgaW50IGNfaW5kZXggPSAoZml4X2MgKyA0MDk2KSA+PiAxMzsKKyAgICBpbnQgbV9pbmRleCA9IChmaXhfbSArIDQwOTYpID4+IDEzOworICAgIGludCB5X2luZGV4ID0gKGZpeF95ICsgNDA5NikgPj4gMTM7CisgICAgaW50IGtfaW5kZXggPSAoZml4X2sgKyA0MDk2KSA+PiAxMzsKKyAgICBpbnQgcG9zID0gKGNfaW5kZXggKiA5ICogOSAqIDkgKyBtX2luZGV4ICogOSAqIDkgKyB5X2luZGV4ICogOSArIGtfaW5kZXgpICogMzsKKyAgICBpbnQgZml4X3IgPSBnX0NNWUtTYW1wbGVzW3Bvc10gPDwgODsKKyAgICBpbnQgZml4X2cgPSBnX0NNWUtTYW1wbGVzW3BvcyArIDFdIDw8IDg7CisgICAgaW50IGZpeF9iID0gZ19DTVlLU2FtcGxlc1twb3MgKyAyXSA8PCA4OworICAgIGludCBjMV9pbmRleCA9IGZpeF9jID4+IDEzOworICAgIGlmIChjMV9pbmRleCA9PSBjX2luZGV4KSB7CisgICAgICAgIGMxX2luZGV4ID0gYzFfaW5kZXggPT0gOCA/IGMxX2luZGV4IC0gMSA6IGMxX2luZGV4ICsgMTsKKyAgICB9CisgICAgaW50IG0xX2luZGV4ID0gZml4X20gPj4gMTM7CisgICAgaWYgKG0xX2luZGV4ID09IG1faW5kZXgpIHsKKyAgICAgICAgbTFfaW5kZXggPSBtMV9pbmRleCA9PSA4ID8gbTFfaW5kZXggLSAxIDogbTFfaW5kZXggKyAxOworICAgIH0KKyAgICBpbnQgeTFfaW5kZXggPSBmaXhfeSA+PiAxMzsKKyAgICBpZiAoeTFfaW5kZXggPT0geV9pbmRleCkgeworICAgICAgICB5MV9pbmRleCA9IHkxX2luZGV4ID09IDggPyB5MV9pbmRleCAtIDEgOiB5MV9pbmRleCArIDE7CisgICAgfQorICAgIGludCBrMV9pbmRleCA9IGZpeF9rID4+IDEzOworICAgIGlmIChrMV9pbmRleCA9PSBrX2luZGV4KSB7CisgICAgICAgIGsxX2luZGV4ID0gazFfaW5kZXggPT0gOCA/IGsxX2luZGV4IC0gMSA6IGsxX2luZGV4ICsgMTsKKyAgICB9CisgICAgaW50IGMxX3BvcyA9IHBvcyArIChjMV9pbmRleCAtIGNfaW5kZXgpICogOSAqIDkgKiA5ICogMzsKKyAgICBpbnQgbTFfcG9zID0gcG9zICsgKG0xX2luZGV4IC0gbV9pbmRleCkgKiA5ICogOSAqIDM7CisgICAgaW50IHkxX3BvcyA9IHBvcyArICh5MV9pbmRleCAtIHlfaW5kZXgpICogOSAqIDM7CisgICAgaW50IGsxX3BvcyA9IHBvcyArIChrMV9pbmRleCAtIGtfaW5kZXgpICogMzsKKyAgICBpbnQgY19yX2RlbHRhID0gZ19DTVlLU2FtcGxlc1twb3NdIC0gZ19DTVlLU2FtcGxlc1tjMV9wb3NdOworICAgIGludCBjX2dfZGVsdGEgPSBnX0NNWUtTYW1wbGVzW3BvcyArIDFdIC0gZ19DTVlLU2FtcGxlc1tjMV9wb3MgKyAxXTsKKyAgICBpbnQgY19iX2RlbHRhID0gZ19DTVlLU2FtcGxlc1twb3MgKyAyXSAtIGdfQ01ZS1NhbXBsZXNbYzFfcG9zICsgMl07CisgICAgaW50IG1fcl9kZWx0YSA9IGdfQ01ZS1NhbXBsZXNbcG9zXSAtIGdfQ01ZS1NhbXBsZXNbbTFfcG9zXTsKKyAgICBpbnQgbV9nX2RlbHRhID0gZ19DTVlLU2FtcGxlc1twb3MgKyAxXSAtIGdfQ01ZS1NhbXBsZXNbbTFfcG9zICsgMV07CisgICAgaW50IG1fYl9kZWx0YSA9IGdfQ01ZS1NhbXBsZXNbcG9zICsgMl0gLSBnX0NNWUtTYW1wbGVzW20xX3BvcyArIDJdOworICAgIGludCB5X3JfZGVsdGEgPSBnX0NNWUtTYW1wbGVzW3Bvc10gLSBnX0NNWUtTYW1wbGVzW3kxX3Bvc107CisgICAgaW50IHlfZ19kZWx0YSA9IGdfQ01ZS1NhbXBsZXNbcG9zICsgMV0gLSBnX0NNWUtTYW1wbGVzW3kxX3BvcyArIDFdOworICAgIGludCB5X2JfZGVsdGEgPSBnX0NNWUtTYW1wbGVzW3BvcyArIDJdIC0gZ19DTVlLU2FtcGxlc1t5MV9wb3MgKyAyXTsKKyAgICBpbnQga19yX2RlbHRhID0gZ19DTVlLU2FtcGxlc1twb3NdIC0gZ19DTVlLU2FtcGxlc1trMV9wb3NdOworICAgIGludCBrX2dfZGVsdGEgPSBnX0NNWUtTYW1wbGVzW3BvcyArIDFdIC0gZ19DTVlLU2FtcGxlc1trMV9wb3MgKyAxXTsKKyAgICBpbnQga19iX2RlbHRhID0gZ19DTVlLU2FtcGxlc1twb3MgKyAyXSAtIGdfQ01ZS1NhbXBsZXNbazFfcG9zICsgMl07CisgICAgaW50IGNfcmF0ZSA9IChmaXhfYyAtIChjX2luZGV4IDw8IDEzKSkgKiAoY19pbmRleCAtIGMxX2luZGV4KTsKKyAgICBmaXhfciArPSBjX3JfZGVsdGEgKiBjX3JhdGUgLyAzMjsKKyAgICBmaXhfZyArPSBjX2dfZGVsdGEgKiBjX3JhdGUgLyAzMjsKKyAgICBmaXhfYiArPSBjX2JfZGVsdGEgKiBjX3JhdGUgLyAzMjsKKyAgICBpbnQgbV9yYXRlID0gKGZpeF9tIC0gKG1faW5kZXggPDwgMTMpKSAqIChtX2luZGV4IC0gbTFfaW5kZXgpOworICAgIGZpeF9yICs9IG1fcl9kZWx0YSAqIG1fcmF0ZSAvIDMyOworICAgIGZpeF9nICs9IG1fZ19kZWx0YSAqIG1fcmF0ZSAvIDMyOworICAgIGZpeF9iICs9IG1fYl9kZWx0YSAqIG1fcmF0ZSAvIDMyOworICAgIGludCB5X3JhdGUgPSAoZml4X3kgLSAoeV9pbmRleCA8PCAxMykpICogKHlfaW5kZXggLSB5MV9pbmRleCk7CisgICAgZml4X3IgKz0geV9yX2RlbHRhICogeV9yYXRlIC8gMzI7CisgICAgZml4X2cgKz0geV9nX2RlbHRhICogeV9yYXRlIC8gMzI7CisgICAgZml4X2IgKz0geV9iX2RlbHRhICogeV9yYXRlIC8gMzI7CisgICAgaW50IGtfcmF0ZSA9IChmaXhfayAtIChrX2luZGV4IDw8IDEzKSkgKiAoa19pbmRleCAtIGsxX2luZGV4KTsKKyAgICBmaXhfciArPSBrX3JfZGVsdGEgKiBrX3JhdGUgLyAzMjsKKyAgICBmaXhfZyArPSBrX2dfZGVsdGEgKiBrX3JhdGUgLyAzMjsKKyAgICBmaXhfYiArPSBrX2JfZGVsdGEgKiBrX3JhdGUgLyAzMjsKKyAgICBpZiAoZml4X3IgPCAwKSB7CisgICAgICAgIGZpeF9yID0gMDsKKyAgICB9CisgICAgaWYgKGZpeF9nIDwgMCkgeworICAgICAgICBmaXhfZyA9IDA7CisgICAgfQorICAgIGlmIChmaXhfYiA8IDApIHsKKyAgICAgICAgZml4X2IgPSAwOworICAgIH0KKyAgICBSID0gZml4X3IgPj4gODsKKyAgICBHID0gZml4X2cgPj4gODsKKyAgICBCID0gZml4X2IgPj4gODsKK30KK3ZvaWQgQWRvYmVDTVlLX3RvX3NSR0IoRlhfRkxPQVQgYywgRlhfRkxPQVQgbSwgRlhfRkxPQVQgeSwgRlhfRkxPQVQgaywgRlhfRkxPQVQmIFIsIEZYX0ZMT0FUJiBHLCBGWF9GTE9BVCYgQikKK3sKKyAgICBGWF9CWVRFIGMxID0gRlhTWVNfcm91bmQoYyAqIDI1NSk7CisgICAgRlhfQllURSBtMSA9IEZYU1lTX3JvdW5kKG0gKiAyNTUpOworICAgIEZYX0JZVEUgeTEgPSBGWFNZU19yb3VuZCh5ICogMjU1KTsKKyAgICBGWF9CWVRFIGsxID0gRlhTWVNfcm91bmQoayAqIDI1NSk7CisgICAgRlhfQllURSByLCBnLCBiOworICAgIEFkb2JlQ01ZS190b19zUkdCMShjMSwgbTEsIHkxLCBrMSwgciwgZywgYik7CisgICAgUiA9IDEuMGYgKiByIC8gMjU1OworICAgIEcgPSAxLjBmICogZyAvIDI1NTsKKyAgICBCID0gMS4wZiAqIGIgLyAyNTU7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2NvZGVjL2Z4X2NvZGVjX2piaWcuY3BwIGIvY29yZS9zcmMvZnhjb2RlYy9jb2RlYy9meF9jb2RlY19qYmlnLmNwcAppbmRleCBhNjQ0ZTk5Li45OTZhZDYwIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2NvZGVjL2Z4X2NvZGVjX2piaWcuY3BwCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvY29kZWMvZnhfY29kZWNfamJpZy5jcHAKQEAgLTEsMjEyICsxLDIxMiBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjb2RlYy9meF9jb2RlYy5oIg0KLSNpbmNsdWRlICJjb2RlY19pbnQuaCINCi1DQ29kZWNfSmJpZzJDb250ZXh0OjpDQ29kZWNfSmJpZzJDb250ZXh0KCkNCi17DQotICAgIEZYU1lTX21lbXNldDMyKHRoaXMsIDAsIHNpemVvZihDQ29kZWNfSmJpZzJDb250ZXh0KSk7DQotfQ0KLUNDb2RlY19KYmlnMk1vZHVsZTo6fkNDb2RlY19KYmlnMk1vZHVsZSgpDQotew0KLX0NCi12b2lkKiBDQ29kZWNfSmJpZzJNb2R1bGU6OkNyZWF0ZUpiaWcyQ29udGV4dCgpDQotew0KLSAgICByZXR1cm4gRlhfTkVXIENDb2RlY19KYmlnMkNvbnRleHQoKTsNCi19DQotdm9pZCBDQ29kZWNfSmJpZzJNb2R1bGU6OkRlc3Ryb3lKYmlnMkNvbnRleHQodm9pZCogcEpiaWcyQ29udGVudCkNCi17DQotICAgIGlmKHBKYmlnMkNvbnRlbnQpIHsNCi0gICAgICAgIENKQmlnMl9Db250ZXh0OjpEZXN0cm95Q29udGV4dCgoKENDb2RlY19KYmlnMkNvbnRleHQqKXBKYmlnMkNvbnRlbnQpLT5tX3BDb250ZXh0KTsNCi0gICAgICAgIGRlbGV0ZSAoQ0NvZGVjX0piaWcyQ29udGV4dCopcEpiaWcyQ29udGVudDsNCi0gICAgfQ0KLSAgICBwSmJpZzJDb250ZW50ID0gTlVMTDsNCi19DQotRlhfQk9PTCBDQ29kZWNfSmJpZzJNb2R1bGU6OkRlY29kZShGWF9EV09SRCB3aWR0aCwgRlhfRFdPUkQgaGVpZ2h0LCBGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBDQllURSBnbG9iYWxfZGF0YSwgRlhfRFdPUkQgZ2xvYmFsX3NpemUsIEZYX0xQQllURSBkZXN0X2J1ZiwgRlhfRFdPUkQgZGVzdF9waXRjaCkNCi17DQotICAgIEZYU1lTX21lbXNldDMyKGRlc3RfYnVmLCAwLCBoZWlnaHQgKiBkZXN0X3BpdGNoKTsNCi0gICAgQ0pCaWcyX0NvbnRleHQqIHBDb250ZXh0ID0gQ0pCaWcyX0NvbnRleHQ6OkNyZWF0ZUNvbnRleHQoJm1fTW9kdWxlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlhfTFBCWVRFKWdsb2JhbF9kYXRhLCBnbG9iYWxfc2l6ZSwgKEZYX0xQQllURSlzcmNfYnVmLCBzcmNfc2l6ZSwgSkJJRzJfRU1CRURfU1RSRUFNKTsNCi0gICAgaWYgKHBDb250ZXh0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpbnQgcmV0ID0gcENvbnRleHQtPmdldEZpcnN0UGFnZShkZXN0X2J1Ziwgd2lkdGgsIGhlaWdodCwgZGVzdF9waXRjaCwgTlVMTCk7DQotICAgIENKQmlnMl9Db250ZXh0OjpEZXN0cm95Q29udGV4dChwQ29udGV4dCk7DQotICAgIGlmIChyZXQgIT0gSkJJRzJfU1VDQ0VTUykgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGludCBkd29yZF9zaXplID0gaGVpZ2h0ICogZGVzdF9waXRjaCAvIDQ7DQotICAgIEZYX0RXT1JEKiBkd29yZF9idWYgPSAoRlhfRFdPUkQqKWRlc3RfYnVmOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGR3b3JkX3NpemU7IGkgKyspIHsNCi0gICAgICAgIGR3b3JkX2J1ZltpXSA9IH5kd29yZF9idWZbaV07DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ0NvZGVjX0piaWcyTW9kdWxlOjpEZWNvZGUoSUZYX0ZpbGVSZWFkKiBmaWxlX3B0ciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEJiB3aWR0aCwgRlhfRFdPUkQmIGhlaWdodCwgRlhfRFdPUkQmIHBpdGNoLCBGWF9MUEJZVEUmIGRlc3RfYnVmKQ0KLXsNCi0gICAgQ0pCaWcyX0NvbnRleHQqIHBDb250ZXh0ID0gTlVMTDsNCi0gICAgQ0pCaWcyX0ltYWdlKiBkZXN0X2ltYWdlID0gTlVMTDsNCi0gICAgRlhfRFdPUkQgc3JjX3NpemUgPSAoRlhfRFdPUkQpZmlsZV9wdHItPkdldFNpemUoKTsNCi0gICAgRlhfTFBCWVRFIHNyY19idWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBzcmNfc2l6ZSk7DQotICAgIGlmIChzcmNfYnVmID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpbnQgcmV0ID0gMDsNCi0gICAgaWYoIWZpbGVfcHRyLT5SZWFkQmxvY2soc3JjX2J1ZiwgMCwgc3JjX3NpemUpKSB7DQotICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgfQ0KLSAgICBwQ29udGV4dCA9IENKQmlnMl9Db250ZXh0OjpDcmVhdGVDb250ZXh0KCZtX01vZHVsZSwgTlVMTCwgMCwgc3JjX2J1Ziwgc3JjX3NpemUsIEpCSUcyX0ZJTEVfU1RSRUFNKTsNCi0gICAgaWYocENvbnRleHQgPT0gTlVMTCkgew0KLSAgICAgICAgZ290byBmYWlsZWQ7DQotICAgIH0NCi0gICAgcmV0ID0gcENvbnRleHQtPmdldEZpcnN0UGFnZSgmZGVzdF9pbWFnZSwgTlVMTCk7DQotICAgIENKQmlnMl9Db250ZXh0OjpEZXN0cm95Q29udGV4dChwQ29udGV4dCk7DQotICAgIGlmIChyZXQgIT0gSkJJRzJfU1VDQ0VTUykgew0KLSAgICAgICAgZ290byBmYWlsZWQ7DQotICAgIH0NCi0gICAgd2lkdGggPSAoRlhfRFdPUkQpZGVzdF9pbWFnZS0+bV9uV2lkdGg7DQotICAgIGhlaWdodCA9IChGWF9EV09SRClkZXN0X2ltYWdlLT5tX25IZWlnaHQ7DQotICAgIHBpdGNoID0gKEZYX0RXT1JEKWRlc3RfaW1hZ2UtPm1fblN0cmlkZTsNCi0gICAgZGVzdF9idWYgPSBkZXN0X2ltYWdlLT5tX3BEYXRhOw0KLSAgICBkZXN0X2ltYWdlLT5tX2JOZWVkRnJlZSA9IEZBTFNFOw0KLSAgICBkZWxldGUgZGVzdF9pbWFnZTsNCi0gICAgRlhfRnJlZShzcmNfYnVmKTsNCi0gICAgcmV0dXJuIFRSVUU7DQotZmFpbGVkOg0KLSAgICBpZihzcmNfYnVmKSB7DQotICAgICAgICBGWF9GcmVlKHNyY19idWYpOw0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotRlhDT0RFQ19TVEFUVVMgQ0NvZGVjX0piaWcyTW9kdWxlOjpTdGFydERlY29kZSh2b2lkKiBwSmJpZzJDb250ZXh0LCBGWF9EV09SRCB3aWR0aCwgRlhfRFdPUkQgaGVpZ2h0LCBGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLA0KLSAgICAgICAgRlhfTFBDQllURSBnbG9iYWxfZGF0YSwgRlhfRFdPUkQgZ2xvYmFsX3NpemUsIEZYX0xQQllURSBkZXN0X2J1ZiwgRlhfRFdPUkQgZGVzdF9waXRjaCwgSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBpZighcEpiaWcyQ29udGV4dCkgew0KLSAgICAgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0VSUl9QQVJBTVM7DQotICAgIH0NCi0gICAgQ0NvZGVjX0piaWcyQ29udGV4dCogbV9wSmJpZzJDb250ZXh0ID0gKENDb2RlY19KYmlnMkNvbnRleHQqKXBKYmlnMkNvbnRleHQ7DQotICAgIG1fcEpiaWcyQ29udGV4dC0+bV93aWR0aCA9IHdpZHRoOw0KLSAgICBtX3BKYmlnMkNvbnRleHQtPm1faGVpZ2h0ID0gaGVpZ2h0Ow0KLSAgICBtX3BKYmlnMkNvbnRleHQtPm1fc3JjX2J1ZiA9ICh1bnNpZ25lZCBjaGFyICopc3JjX2J1ZjsNCi0gICAgbV9wSmJpZzJDb250ZXh0LT5tX3NyY19zaXplID0gc3JjX3NpemU7DQotICAgIG1fcEpiaWcyQ29udGV4dC0+bV9nbG9iYWxfZGF0YSA9IGdsb2JhbF9kYXRhOw0KLSAgICBtX3BKYmlnMkNvbnRleHQtPm1fZ2xvYmFsX3NpemUgPSBnbG9iYWxfc2l6ZTsNCi0gICAgbV9wSmJpZzJDb250ZXh0LT5tX2Rlc3RfYnVmID0gZGVzdF9idWY7DQotICAgIG1fcEpiaWcyQ29udGV4dC0+bV9kZXN0X3BpdGNoID0gZGVzdF9waXRjaDsNCi0gICAgbV9wSmJpZzJDb250ZXh0LT5tX3BQYXVzZSA9IHBQYXVzZTsNCi0gICAgbV9wSmJpZzJDb250ZXh0LT5tX2JGaWxlUmVhZGVyID0gRkFMU0U7DQotICAgIEZYU1lTX21lbXNldDMyKGRlc3RfYnVmLCAwLCBoZWlnaHQgKiBkZXN0X3BpdGNoKTsNCi0gICAgbV9wSmJpZzJDb250ZXh0LT5tX3BDb250ZXh0ID0gQ0pCaWcyX0NvbnRleHQ6OkNyZWF0ZUNvbnRleHQoJm1fTW9kdWxlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlhfTFBCWVRFKWdsb2JhbF9kYXRhLCBnbG9iYWxfc2l6ZSwgKEZYX0xQQllURSlzcmNfYnVmLCBzcmNfc2l6ZSwgSkJJRzJfRU1CRURfU1RSRUFNLCBwUGF1c2UpOw0KLSAgICBpZighbV9wSmJpZzJDb250ZXh0LT5tX3BDb250ZXh0KSB7DQotICAgICAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfRVJST1I7DQotICAgIH0NCi0gICAgaW50IHJldCA9IG1fcEpiaWcyQ29udGV4dC0+bV9wQ29udGV4dC0+Z2V0Rmlyc3RQYWdlKGRlc3RfYnVmLCB3aWR0aCwgaGVpZ2h0LCBkZXN0X3BpdGNoLCBwUGF1c2UpOw0KLSAgICBpZihtX3BKYmlnMkNvbnRleHQtPm1fcENvbnRleHQtPkdldFByb2Nlc3NpdmVTdGF0dXMoKSA9PSBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIKSB7DQotICAgICAgICBDSkJpZzJfQ29udGV4dDo6RGVzdHJveUNvbnRleHQobV9wSmJpZzJDb250ZXh0LT5tX3BDb250ZXh0KTsNCi0gICAgICAgIG1fcEpiaWcyQ29udGV4dC0+bV9wQ29udGV4dCA9IE5VTEw7DQotICAgICAgICBpZiAocmV0ICE9IEpCSUcyX1NVQ0NFU1MpIHsNCi0gICAgICAgICAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfRVJST1I7DQotICAgICAgICB9DQotICAgICAgICBpbnQgZHdvcmRfc2l6ZSA9IGhlaWdodCAqIGRlc3RfcGl0Y2ggLyA0Ow0KLSAgICAgICAgRlhfRFdPUkQqIGR3b3JkX2J1ZiA9IChGWF9EV09SRCopZGVzdF9idWY7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGR3b3JkX3NpemU7IGkgKyspIHsNCi0gICAgICAgICAgICBkd29yZF9idWZbaV0gPSB+ZHdvcmRfYnVmW2ldOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7DQotICAgIH0NCi0gICAgcmV0dXJuIG1fcEpiaWcyQ29udGV4dC0+bV9wQ29udGV4dC0+R2V0UHJvY2Vzc2l2ZVN0YXR1cygpOw0KLX0NCi1GWENPREVDX1NUQVRVUyBDQ29kZWNfSmJpZzJNb2R1bGU6OlN0YXJ0RGVjb2RlKHZvaWQqIHBKYmlnMkNvbnRleHQsIElGWF9GaWxlUmVhZCogZmlsZV9wdHIsDQotICAgICAgICBGWF9EV09SRCYgd2lkdGgsIEZYX0RXT1JEJiBoZWlnaHQsIEZYX0RXT1JEJiBwaXRjaCwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBpZighcEpiaWcyQ29udGV4dCkgew0KLSAgICAgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0VSUl9QQVJBTVM7DQotICAgIH0NCi0gICAgQ0NvZGVjX0piaWcyQ29udGV4dCogbV9wSmJpZzJDb250ZXh0ID0gKENDb2RlY19KYmlnMkNvbnRleHQqKXBKYmlnMkNvbnRleHQ7DQotICAgIG1fcEpiaWcyQ29udGV4dC0+bV9iRmlsZVJlYWRlciA9IFRSVUU7DQotICAgIG1fcEpiaWcyQ29udGV4dC0+bV9kZXN0X2ltYWdlID0gTlVMTDsNCi0gICAgbV9wSmJpZzJDb250ZXh0LT5tX3NyY19zaXplID0gKEZYX0RXT1JEKWZpbGVfcHRyLT5HZXRTaXplKCk7DQotICAgIG1fcEpiaWcyQ29udGV4dC0+bV9zcmNfYnVmID0gRlhfQWxsb2MoRlhfQllURSwgbV9wSmJpZzJDb250ZXh0LT5tX3NyY19zaXplKTsNCi0gICAgaWYgKG1fcEpiaWcyQ29udGV4dC0+bV9zcmNfYnVmID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGWENPREVDX1NUQVRVU19FUlJfTUVNT1JZOw0KLSAgICB9DQotICAgIGludCByZXQgPSAwOw0KLSAgICBpZighZmlsZV9wdHItPlJlYWRCbG9jaygodm9pZCopbV9wSmJpZzJDb250ZXh0LT5tX3NyY19idWYsIDAsIG1fcEpiaWcyQ29udGV4dC0+bV9zcmNfc2l6ZSkpIHsNCi0gICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICB9DQotICAgIG1fcEpiaWcyQ29udGV4dC0+bV9wQ29udGV4dCA9IENKQmlnMl9Db250ZXh0OjpDcmVhdGVDb250ZXh0KCZtX01vZHVsZSwgTlVMTCwgMCwgbV9wSmJpZzJDb250ZXh0LT5tX3NyY19idWYsIG1fcEpiaWcyQ29udGV4dC0+bV9zcmNfc2l6ZSwgSkJJRzJfRklMRV9TVFJFQU0sIHBQYXVzZSk7DQotICAgIGlmKG1fcEpiaWcyQ29udGV4dC0+bV9wQ29udGV4dCA9PSBOVUxMKSB7DQotICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgfQ0KLSAgICByZXQgPSBtX3BKYmlnMkNvbnRleHQtPm1fcENvbnRleHQtPmdldEZpcnN0UGFnZSgmbV9wSmJpZzJDb250ZXh0LT5tX2Rlc3RfaW1hZ2UsIHBQYXVzZSk7DQotICAgIGlmKG1fcEpiaWcyQ29udGV4dC0+bV9wQ29udGV4dC0+R2V0UHJvY2Vzc2l2ZVN0YXR1cygpID09IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUUpIHsNCi0gICAgICAgIHdpZHRoID0gKEZYX0RXT1JEKW1fcEpiaWcyQ29udGV4dC0+bV9kZXN0X2ltYWdlLT5tX25XaWR0aDsNCi0gICAgICAgIGhlaWdodCA9IChGWF9EV09SRCltX3BKYmlnMkNvbnRleHQtPm1fZGVzdF9pbWFnZS0+bV9uSGVpZ2h0Ow0KLSAgICAgICAgcGl0Y2ggPSAoRlhfRFdPUkQpbV9wSmJpZzJDb250ZXh0LT5tX2Rlc3RfaW1hZ2UtPm1fblN0cmlkZTsNCi0gICAgICAgIGRlc3RfYnVmID0gbV9wSmJpZzJDb250ZXh0LT5tX2Rlc3RfaW1hZ2UtPm1fcERhdGE7DQotICAgICAgICBtX3BKYmlnMkNvbnRleHQtPm1fZGVzdF9pbWFnZS0+bV9iTmVlZEZyZWUgPSBGQUxTRTsNCi0gICAgICAgIHJldHVybiBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFOw0KLSAgICB9DQotICAgIENKQmlnMl9Db250ZXh0OjpEZXN0cm95Q29udGV4dChtX3BKYmlnMkNvbnRleHQtPm1fcENvbnRleHQpOw0KLSAgICBtX3BKYmlnMkNvbnRleHQtPm1fcENvbnRleHQgPSBOVUxMOw0KLSAgICBpZiAocmV0ICE9IEpCSUcyX1NVQ0NFU1MpIHsNCi0gICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICB9DQotICAgIHdpZHRoID0gKEZYX0RXT1JEKW1fcEpiaWcyQ29udGV4dC0+bV9kZXN0X2ltYWdlLT5tX25XaWR0aDsNCi0gICAgaGVpZ2h0ID0gKEZYX0RXT1JEKW1fcEpiaWcyQ29udGV4dC0+bV9kZXN0X2ltYWdlLT5tX25IZWlnaHQ7DQotICAgIHBpdGNoID0gKEZYX0RXT1JEKW1fcEpiaWcyQ29udGV4dC0+bV9kZXN0X2ltYWdlLT5tX25TdHJpZGU7DQotICAgIGRlc3RfYnVmID0gbV9wSmJpZzJDb250ZXh0LT5tX2Rlc3RfaW1hZ2UtPm1fcERhdGE7DQotICAgIG1fcEpiaWcyQ29udGV4dC0+bV9kZXN0X2ltYWdlLT5tX2JOZWVkRnJlZSA9IEZBTFNFOw0KLSAgICBkZWxldGUgbV9wSmJpZzJDb250ZXh0LT5tX2Rlc3RfaW1hZ2U7DQotICAgIEZYX0ZyZWUobV9wSmJpZzJDb250ZXh0LT5tX3NyY19idWYpOw0KLSAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsNCi1mYWlsZWQ6DQotICAgIGlmKG1fcEpiaWcyQ29udGV4dC0+bV9zcmNfYnVmKSB7DQotICAgICAgICBGWF9GcmVlKG1fcEpiaWcyQ29udGV4dC0+bV9zcmNfYnVmKTsNCi0gICAgfQ0KLSAgICBtX3BKYmlnMkNvbnRleHQtPm1fc3JjX2J1ZiA9IE5VTEw7DQotICAgIHJldHVybiBGWENPREVDX1NUQVRVU19FUlJPUjsNCi19DQotRlhDT0RFQ19TVEFUVVMgQ0NvZGVjX0piaWcyTW9kdWxlOjpDb250aW51ZURlY29kZSh2b2lkKiBwSmJpZzJDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIENDb2RlY19KYmlnMkNvbnRleHQqIG1fcEpiaWcyQ29udGV4dCA9IChDQ29kZWNfSmJpZzJDb250ZXh0KilwSmJpZzJDb250ZXh0Ow0KLSAgICBpbnQgcmV0ID0gbV9wSmJpZzJDb250ZXh0LT5tX3BDb250ZXh0LT5Db250aW51ZShwUGF1c2UpOw0KLSAgICBpZihtX3BKYmlnMkNvbnRleHQtPm1fcENvbnRleHQtPkdldFByb2Nlc3NpdmVTdGF0dXMoKSA9PSBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIKSB7DQotICAgICAgICBpZihtX3BKYmlnMkNvbnRleHQtPm1fYkZpbGVSZWFkZXIpIHsNCi0gICAgICAgICAgICBDSkJpZzJfQ29udGV4dDo6RGVzdHJveUNvbnRleHQobV9wSmJpZzJDb250ZXh0LT5tX3BDb250ZXh0KTsNCi0gICAgICAgICAgICBtX3BKYmlnMkNvbnRleHQtPm1fcENvbnRleHQgPSBOVUxMOw0KLSAgICAgICAgICAgIGlmIChyZXQgIT0gSkJJRzJfU1VDQ0VTUykgew0KLSAgICAgICAgICAgICAgICBpZihtX3BKYmlnMkNvbnRleHQtPm1fc3JjX2J1Zikgew0KLSAgICAgICAgICAgICAgICAgICAgRlhfRnJlZShtX3BKYmlnMkNvbnRleHQtPm1fc3JjX2J1Zik7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbV9wSmJpZzJDb250ZXh0LT5tX3NyY19idWYgPSBOVUxMOw0KLSAgICAgICAgICAgICAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfRVJST1I7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGRlbGV0ZSBtX3BKYmlnMkNvbnRleHQtPm1fZGVzdF9pbWFnZTsNCi0gICAgICAgICAgICBGWF9GcmVlKG1fcEpiaWcyQ29udGV4dC0+bV9zcmNfYnVmKTsNCi0gICAgICAgICAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgQ0pCaWcyX0NvbnRleHQ6OkRlc3Ryb3lDb250ZXh0KG1fcEpiaWcyQ29udGV4dC0+bV9wQ29udGV4dCk7DQotICAgICAgICAgICAgbV9wSmJpZzJDb250ZXh0LT5tX3BDb250ZXh0ID0gTlVMTDsNCi0gICAgICAgICAgICBpZiAocmV0ICE9IEpCSUcyX1NVQ0NFU1MpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0VSUk9SOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpbnQgZHdvcmRfc2l6ZSA9IG1fcEpiaWcyQ29udGV4dC0+bV9oZWlnaHQgKiBtX3BKYmlnMkNvbnRleHQtPm1fZGVzdF9waXRjaCAvIDQ7DQotICAgICAgICAgICAgRlhfRFdPUkQqIGR3b3JkX2J1ZiA9IChGWF9EV09SRCopbV9wSmJpZzJDb250ZXh0LT5tX2Rlc3RfYnVmOw0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZHdvcmRfc2l6ZTsgaSArKykgew0KLSAgICAgICAgICAgICAgICBkd29yZF9idWZbaV0gPSB+ZHdvcmRfYnVmW2ldOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wSmJpZzJDb250ZXh0LT5tX3BDb250ZXh0LT5HZXRQcm9jZXNzaXZlU3RhdHVzKCk7DQotfQ0KLQ0KLQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaCIKKyNpbmNsdWRlICJjb2RlY19pbnQuaCIKK0NDb2RlY19KYmlnMkNvbnRleHQ6OkNDb2RlY19KYmlnMkNvbnRleHQoKQoreworICAgIEZYU1lTX21lbXNldDMyKHRoaXMsIDAsIHNpemVvZihDQ29kZWNfSmJpZzJDb250ZXh0KSk7Cit9CitDQ29kZWNfSmJpZzJNb2R1bGU6On5DQ29kZWNfSmJpZzJNb2R1bGUoKQoreworfQordm9pZCogQ0NvZGVjX0piaWcyTW9kdWxlOjpDcmVhdGVKYmlnMkNvbnRleHQoKQoreworICAgIHJldHVybiBGWF9ORVcgQ0NvZGVjX0piaWcyQ29udGV4dCgpOworfQordm9pZCBDQ29kZWNfSmJpZzJNb2R1bGU6OkRlc3Ryb3lKYmlnMkNvbnRleHQodm9pZCogcEpiaWcyQ29udGVudCkKK3sKKyAgICBpZihwSmJpZzJDb250ZW50KSB7CisgICAgICAgIENKQmlnMl9Db250ZXh0OjpEZXN0cm95Q29udGV4dCgoKENDb2RlY19KYmlnMkNvbnRleHQqKXBKYmlnMkNvbnRlbnQpLT5tX3BDb250ZXh0KTsKKyAgICAgICAgZGVsZXRlIChDQ29kZWNfSmJpZzJDb250ZXh0KilwSmJpZzJDb250ZW50OworICAgIH0KKyAgICBwSmJpZzJDb250ZW50ID0gTlVMTDsKK30KK0ZYX0JPT0wgQ0NvZGVjX0piaWcyTW9kdWxlOjpEZWNvZGUoRlhfRFdPUkQgd2lkdGgsIEZYX0RXT1JEIGhlaWdodCwgRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBDQllURSBnbG9iYWxfZGF0YSwgRlhfRFdPUkQgZ2xvYmFsX3NpemUsIEZYX0xQQllURSBkZXN0X2J1ZiwgRlhfRFdPUkQgZGVzdF9waXRjaCkKK3sKKyAgICBGWFNZU19tZW1zZXQzMihkZXN0X2J1ZiwgMCwgaGVpZ2h0ICogZGVzdF9waXRjaCk7CisgICAgQ0pCaWcyX0NvbnRleHQqIHBDb250ZXh0ID0gQ0pCaWcyX0NvbnRleHQ6OkNyZWF0ZUNvbnRleHQoJm1fTW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGWF9MUEJZVEUpZ2xvYmFsX2RhdGEsIGdsb2JhbF9zaXplLCAoRlhfTFBCWVRFKXNyY19idWYsIHNyY19zaXplLCBKQklHMl9FTUJFRF9TVFJFQU0pOworICAgIGlmIChwQ29udGV4dCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaW50IHJldCA9IHBDb250ZXh0LT5nZXRGaXJzdFBhZ2UoZGVzdF9idWYsIHdpZHRoLCBoZWlnaHQsIGRlc3RfcGl0Y2gsIE5VTEwpOworICAgIENKQmlnMl9Db250ZXh0OjpEZXN0cm95Q29udGV4dChwQ29udGV4dCk7CisgICAgaWYgKHJldCAhPSBKQklHMl9TVUNDRVNTKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaW50IGR3b3JkX3NpemUgPSBoZWlnaHQgKiBkZXN0X3BpdGNoIC8gNDsKKyAgICBGWF9EV09SRCogZHdvcmRfYnVmID0gKEZYX0RXT1JEKilkZXN0X2J1ZjsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGR3b3JkX3NpemU7IGkgKyspIHsKKyAgICAgICAgZHdvcmRfYnVmW2ldID0gfmR3b3JkX2J1ZltpXTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENDb2RlY19KYmlnMk1vZHVsZTo6RGVjb2RlKElGWF9GaWxlUmVhZCogZmlsZV9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEJiB3aWR0aCwgRlhfRFdPUkQmIGhlaWdodCwgRlhfRFdPUkQmIHBpdGNoLCBGWF9MUEJZVEUmIGRlc3RfYnVmKQoreworICAgIENKQmlnMl9Db250ZXh0KiBwQ29udGV4dCA9IE5VTEw7CisgICAgQ0pCaWcyX0ltYWdlKiBkZXN0X2ltYWdlID0gTlVMTDsKKyAgICBGWF9EV09SRCBzcmNfc2l6ZSA9IChGWF9EV09SRClmaWxlX3B0ci0+R2V0U2l6ZSgpOworICAgIEZYX0xQQllURSBzcmNfYnVmID0gRlhfQWxsb2MoRlhfQllURSwgc3JjX3NpemUpOworICAgIGlmIChzcmNfYnVmID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpbnQgcmV0ID0gMDsKKyAgICBpZighZmlsZV9wdHItPlJlYWRCbG9jayhzcmNfYnVmLCAwLCBzcmNfc2l6ZSkpIHsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIHBDb250ZXh0ID0gQ0pCaWcyX0NvbnRleHQ6OkNyZWF0ZUNvbnRleHQoJm1fTW9kdWxlLCBOVUxMLCAwLCBzcmNfYnVmLCBzcmNfc2l6ZSwgSkJJRzJfRklMRV9TVFJFQU0pOworICAgIGlmKHBDb250ZXh0ID09IE5VTEwpIHsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIHJldCA9IHBDb250ZXh0LT5nZXRGaXJzdFBhZ2UoJmRlc3RfaW1hZ2UsIE5VTEwpOworICAgIENKQmlnMl9Db250ZXh0OjpEZXN0cm95Q29udGV4dChwQ29udGV4dCk7CisgICAgaWYgKHJldCAhPSBKQklHMl9TVUNDRVNTKSB7CisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKyAgICB3aWR0aCA9IChGWF9EV09SRClkZXN0X2ltYWdlLT5tX25XaWR0aDsKKyAgICBoZWlnaHQgPSAoRlhfRFdPUkQpZGVzdF9pbWFnZS0+bV9uSGVpZ2h0OworICAgIHBpdGNoID0gKEZYX0RXT1JEKWRlc3RfaW1hZ2UtPm1fblN0cmlkZTsKKyAgICBkZXN0X2J1ZiA9IGRlc3RfaW1hZ2UtPm1fcERhdGE7CisgICAgZGVzdF9pbWFnZS0+bV9iTmVlZEZyZWUgPSBGQUxTRTsKKyAgICBkZWxldGUgZGVzdF9pbWFnZTsKKyAgICBGWF9GcmVlKHNyY19idWYpOworICAgIHJldHVybiBUUlVFOworZmFpbGVkOgorICAgIGlmKHNyY19idWYpIHsKKyAgICAgICAgRlhfRnJlZShzcmNfYnVmKTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorRlhDT0RFQ19TVEFUVVMgQ0NvZGVjX0piaWcyTW9kdWxlOjpTdGFydERlY29kZSh2b2lkKiBwSmJpZzJDb250ZXh0LCBGWF9EV09SRCB3aWR0aCwgRlhfRFdPUkQgaGVpZ2h0LCBGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLAorICAgICAgICBGWF9MUENCWVRFIGdsb2JhbF9kYXRhLCBGWF9EV09SRCBnbG9iYWxfc2l6ZSwgRlhfTFBCWVRFIGRlc3RfYnVmLCBGWF9EV09SRCBkZXN0X3BpdGNoLCBJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBpZighcEpiaWcyQ29udGV4dCkgeworICAgICAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfRVJSX1BBUkFNUzsKKyAgICB9CisgICAgQ0NvZGVjX0piaWcyQ29udGV4dCogbV9wSmJpZzJDb250ZXh0ID0gKENDb2RlY19KYmlnMkNvbnRleHQqKXBKYmlnMkNvbnRleHQ7CisgICAgbV9wSmJpZzJDb250ZXh0LT5tX3dpZHRoID0gd2lkdGg7CisgICAgbV9wSmJpZzJDb250ZXh0LT5tX2hlaWdodCA9IGhlaWdodDsKKyAgICBtX3BKYmlnMkNvbnRleHQtPm1fc3JjX2J1ZiA9ICh1bnNpZ25lZCBjaGFyICopc3JjX2J1ZjsKKyAgICBtX3BKYmlnMkNvbnRleHQtPm1fc3JjX3NpemUgPSBzcmNfc2l6ZTsKKyAgICBtX3BKYmlnMkNvbnRleHQtPm1fZ2xvYmFsX2RhdGEgPSBnbG9iYWxfZGF0YTsKKyAgICBtX3BKYmlnMkNvbnRleHQtPm1fZ2xvYmFsX3NpemUgPSBnbG9iYWxfc2l6ZTsKKyAgICBtX3BKYmlnMkNvbnRleHQtPm1fZGVzdF9idWYgPSBkZXN0X2J1ZjsKKyAgICBtX3BKYmlnMkNvbnRleHQtPm1fZGVzdF9waXRjaCA9IGRlc3RfcGl0Y2g7CisgICAgbV9wSmJpZzJDb250ZXh0LT5tX3BQYXVzZSA9IHBQYXVzZTsKKyAgICBtX3BKYmlnMkNvbnRleHQtPm1fYkZpbGVSZWFkZXIgPSBGQUxTRTsKKyAgICBGWFNZU19tZW1zZXQzMihkZXN0X2J1ZiwgMCwgaGVpZ2h0ICogZGVzdF9waXRjaCk7CisgICAgbV9wSmJpZzJDb250ZXh0LT5tX3BDb250ZXh0ID0gQ0pCaWcyX0NvbnRleHQ6OkNyZWF0ZUNvbnRleHQoJm1fTW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGWF9MUEJZVEUpZ2xvYmFsX2RhdGEsIGdsb2JhbF9zaXplLCAoRlhfTFBCWVRFKXNyY19idWYsIHNyY19zaXplLCBKQklHMl9FTUJFRF9TVFJFQU0sIHBQYXVzZSk7CisgICAgaWYoIW1fcEpiaWcyQ29udGV4dC0+bV9wQ29udGV4dCkgeworICAgICAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfRVJST1I7CisgICAgfQorICAgIGludCByZXQgPSBtX3BKYmlnMkNvbnRleHQtPm1fcENvbnRleHQtPmdldEZpcnN0UGFnZShkZXN0X2J1Ziwgd2lkdGgsIGhlaWdodCwgZGVzdF9waXRjaCwgcFBhdXNlKTsKKyAgICBpZihtX3BKYmlnMkNvbnRleHQtPm1fcENvbnRleHQtPkdldFByb2Nlc3NpdmVTdGF0dXMoKSA9PSBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIKSB7CisgICAgICAgIENKQmlnMl9Db250ZXh0OjpEZXN0cm95Q29udGV4dChtX3BKYmlnMkNvbnRleHQtPm1fcENvbnRleHQpOworICAgICAgICBtX3BKYmlnMkNvbnRleHQtPm1fcENvbnRleHQgPSBOVUxMOworICAgICAgICBpZiAocmV0ICE9IEpCSUcyX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHJldHVybiBGWENPREVDX1NUQVRVU19FUlJPUjsKKyAgICAgICAgfQorICAgICAgICBpbnQgZHdvcmRfc2l6ZSA9IGhlaWdodCAqIGRlc3RfcGl0Y2ggLyA0OworICAgICAgICBGWF9EV09SRCogZHdvcmRfYnVmID0gKEZYX0RXT1JEKilkZXN0X2J1ZjsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkd29yZF9zaXplOyBpICsrKSB7CisgICAgICAgICAgICBkd29yZF9idWZbaV0gPSB+ZHdvcmRfYnVmW2ldOworICAgICAgICB9CisgICAgICAgIHJldHVybiBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOworICAgIH0KKyAgICByZXR1cm4gbV9wSmJpZzJDb250ZXh0LT5tX3BDb250ZXh0LT5HZXRQcm9jZXNzaXZlU3RhdHVzKCk7Cit9CitGWENPREVDX1NUQVRVUyBDQ29kZWNfSmJpZzJNb2R1bGU6OlN0YXJ0RGVjb2RlKHZvaWQqIHBKYmlnMkNvbnRleHQsIElGWF9GaWxlUmVhZCogZmlsZV9wdHIsCisgICAgICAgIEZYX0RXT1JEJiB3aWR0aCwgRlhfRFdPUkQmIGhlaWdodCwgRlhfRFdPUkQmIHBpdGNoLCBGWF9MUEJZVEUmIGRlc3RfYnVmLCBJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBpZighcEpiaWcyQ29udGV4dCkgeworICAgICAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfRVJSX1BBUkFNUzsKKyAgICB9CisgICAgQ0NvZGVjX0piaWcyQ29udGV4dCogbV9wSmJpZzJDb250ZXh0ID0gKENDb2RlY19KYmlnMkNvbnRleHQqKXBKYmlnMkNvbnRleHQ7CisgICAgbV9wSmJpZzJDb250ZXh0LT5tX2JGaWxlUmVhZGVyID0gVFJVRTsKKyAgICBtX3BKYmlnMkNvbnRleHQtPm1fZGVzdF9pbWFnZSA9IE5VTEw7CisgICAgbV9wSmJpZzJDb250ZXh0LT5tX3NyY19zaXplID0gKEZYX0RXT1JEKWZpbGVfcHRyLT5HZXRTaXplKCk7CisgICAgbV9wSmJpZzJDb250ZXh0LT5tX3NyY19idWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX3BKYmlnMkNvbnRleHQtPm1fc3JjX3NpemUpOworICAgIGlmIChtX3BKYmlnMkNvbnRleHQtPm1fc3JjX2J1ZiA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGWENPREVDX1NUQVRVU19FUlJfTUVNT1JZOworICAgIH0KKyAgICBpbnQgcmV0ID0gMDsKKyAgICBpZighZmlsZV9wdHItPlJlYWRCbG9jaygodm9pZCopbV9wSmJpZzJDb250ZXh0LT5tX3NyY19idWYsIDAsIG1fcEpiaWcyQ29udGV4dC0+bV9zcmNfc2l6ZSkpIHsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIG1fcEpiaWcyQ29udGV4dC0+bV9wQ29udGV4dCA9IENKQmlnMl9Db250ZXh0OjpDcmVhdGVDb250ZXh0KCZtX01vZHVsZSwgTlVMTCwgMCwgbV9wSmJpZzJDb250ZXh0LT5tX3NyY19idWYsIG1fcEpiaWcyQ29udGV4dC0+bV9zcmNfc2l6ZSwgSkJJRzJfRklMRV9TVFJFQU0sIHBQYXVzZSk7CisgICAgaWYobV9wSmJpZzJDb250ZXh0LT5tX3BDb250ZXh0ID09IE5VTEwpIHsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIHJldCA9IG1fcEpiaWcyQ29udGV4dC0+bV9wQ29udGV4dC0+Z2V0Rmlyc3RQYWdlKCZtX3BKYmlnMkNvbnRleHQtPm1fZGVzdF9pbWFnZSwgcFBhdXNlKTsKKyAgICBpZihtX3BKYmlnMkNvbnRleHQtPm1fcENvbnRleHQtPkdldFByb2Nlc3NpdmVTdGF0dXMoKSA9PSBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFKSB7CisgICAgICAgIHdpZHRoID0gKEZYX0RXT1JEKW1fcEpiaWcyQ29udGV4dC0+bV9kZXN0X2ltYWdlLT5tX25XaWR0aDsKKyAgICAgICAgaGVpZ2h0ID0gKEZYX0RXT1JEKW1fcEpiaWcyQ29udGV4dC0+bV9kZXN0X2ltYWdlLT5tX25IZWlnaHQ7CisgICAgICAgIHBpdGNoID0gKEZYX0RXT1JEKW1fcEpiaWcyQ29udGV4dC0+bV9kZXN0X2ltYWdlLT5tX25TdHJpZGU7CisgICAgICAgIGRlc3RfYnVmID0gbV9wSmJpZzJDb250ZXh0LT5tX2Rlc3RfaW1hZ2UtPm1fcERhdGE7CisgICAgICAgIG1fcEpiaWcyQ29udGV4dC0+bV9kZXN0X2ltYWdlLT5tX2JOZWVkRnJlZSA9IEZBTFNFOworICAgICAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRTsKKyAgICB9CisgICAgQ0pCaWcyX0NvbnRleHQ6OkRlc3Ryb3lDb250ZXh0KG1fcEpiaWcyQ29udGV4dC0+bV9wQ29udGV4dCk7CisgICAgbV9wSmJpZzJDb250ZXh0LT5tX3BDb250ZXh0ID0gTlVMTDsKKyAgICBpZiAocmV0ICE9IEpCSUcyX1NVQ0NFU1MpIHsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIHdpZHRoID0gKEZYX0RXT1JEKW1fcEpiaWcyQ29udGV4dC0+bV9kZXN0X2ltYWdlLT5tX25XaWR0aDsKKyAgICBoZWlnaHQgPSAoRlhfRFdPUkQpbV9wSmJpZzJDb250ZXh0LT5tX2Rlc3RfaW1hZ2UtPm1fbkhlaWdodDsKKyAgICBwaXRjaCA9IChGWF9EV09SRCltX3BKYmlnMkNvbnRleHQtPm1fZGVzdF9pbWFnZS0+bV9uU3RyaWRlOworICAgIGRlc3RfYnVmID0gbV9wSmJpZzJDb250ZXh0LT5tX2Rlc3RfaW1hZ2UtPm1fcERhdGE7CisgICAgbV9wSmJpZzJDb250ZXh0LT5tX2Rlc3RfaW1hZ2UtPm1fYk5lZWRGcmVlID0gRkFMU0U7CisgICAgZGVsZXRlIG1fcEpiaWcyQ29udGV4dC0+bV9kZXN0X2ltYWdlOworICAgIEZYX0ZyZWUobV9wSmJpZzJDb250ZXh0LT5tX3NyY19idWYpOworICAgIHJldHVybiBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOworZmFpbGVkOgorICAgIGlmKG1fcEpiaWcyQ29udGV4dC0+bV9zcmNfYnVmKSB7CisgICAgICAgIEZYX0ZyZWUobV9wSmJpZzJDb250ZXh0LT5tX3NyY19idWYpOworICAgIH0KKyAgICBtX3BKYmlnMkNvbnRleHQtPm1fc3JjX2J1ZiA9IE5VTEw7CisgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0VSUk9SOworfQorRlhDT0RFQ19TVEFUVVMgQ0NvZGVjX0piaWcyTW9kdWxlOjpDb250aW51ZURlY29kZSh2b2lkKiBwSmJpZzJDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBDQ29kZWNfSmJpZzJDb250ZXh0KiBtX3BKYmlnMkNvbnRleHQgPSAoQ0NvZGVjX0piaWcyQ29udGV4dCopcEpiaWcyQ29udGV4dDsKKyAgICBpbnQgcmV0ID0gbV9wSmJpZzJDb250ZXh0LT5tX3BDb250ZXh0LT5Db250aW51ZShwUGF1c2UpOworICAgIGlmKG1fcEpiaWcyQ29udGV4dC0+bV9wQ29udGV4dC0+R2V0UHJvY2Vzc2l2ZVN0YXR1cygpID09IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0gpIHsKKyAgICAgICAgaWYobV9wSmJpZzJDb250ZXh0LT5tX2JGaWxlUmVhZGVyKSB7CisgICAgICAgICAgICBDSkJpZzJfQ29udGV4dDo6RGVzdHJveUNvbnRleHQobV9wSmJpZzJDb250ZXh0LT5tX3BDb250ZXh0KTsKKyAgICAgICAgICAgIG1fcEpiaWcyQ29udGV4dC0+bV9wQ29udGV4dCA9IE5VTEw7CisgICAgICAgICAgICBpZiAocmV0ICE9IEpCSUcyX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBpZihtX3BKYmlnMkNvbnRleHQtPm1fc3JjX2J1ZikgeworICAgICAgICAgICAgICAgICAgICBGWF9GcmVlKG1fcEpiaWcyQ29udGV4dC0+bV9zcmNfYnVmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9wSmJpZzJDb250ZXh0LT5tX3NyY19idWYgPSBOVUxMOworICAgICAgICAgICAgICAgIHJldHVybiBGWENPREVDX1NUQVRVU19FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGV0ZSBtX3BKYmlnMkNvbnRleHQtPm1fZGVzdF9pbWFnZTsKKyAgICAgICAgICAgIEZYX0ZyZWUobV9wSmJpZzJDb250ZXh0LT5tX3NyY19idWYpOworICAgICAgICAgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBDSkJpZzJfQ29udGV4dDo6RGVzdHJveUNvbnRleHQobV9wSmJpZzJDb250ZXh0LT5tX3BDb250ZXh0KTsKKyAgICAgICAgICAgIG1fcEpiaWcyQ29udGV4dC0+bV9wQ29udGV4dCA9IE5VTEw7CisgICAgICAgICAgICBpZiAocmV0ICE9IEpCSUcyX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgZHdvcmRfc2l6ZSA9IG1fcEpiaWcyQ29udGV4dC0+bV9oZWlnaHQgKiBtX3BKYmlnMkNvbnRleHQtPm1fZGVzdF9waXRjaCAvIDQ7CisgICAgICAgICAgICBGWF9EV09SRCogZHdvcmRfYnVmID0gKEZYX0RXT1JEKiltX3BKYmlnMkNvbnRleHQtPm1fZGVzdF9idWY7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGR3b3JkX3NpemU7IGkgKyspIHsKKyAgICAgICAgICAgICAgICBkd29yZF9idWZbaV0gPSB+ZHdvcmRfYnVmW2ldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG1fcEpiaWcyQ29udGV4dC0+bV9wQ29udGV4dC0+R2V0UHJvY2Vzc2l2ZVN0YXR1cygpOworfQorCisKKwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9jb2RlYy9meF9jb2RlY19qcGVnLmNwcCBiL2NvcmUvc3JjL2Z4Y29kZWMvY29kZWMvZnhfY29kZWNfanBlZy5jcHAKaW5kZXggZmM5MWE2Yy4uNWU3OGUxMyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9jb2RlYy9meF9jb2RlY19qcGVnLmNwcAorKysgYi9jb3JlL3NyYy9meGNvZGVjL2NvZGVjL2Z4X2NvZGVjX2pwZWcuY3BwCkBAIC0xLDczNSArMSw3MzUgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2RpYi5oIg0KLSNpbmNsdWRlICJjb2RlY19pbnQuaCINCi1leHRlcm4gIkMiIHsNCi0gICAgc3RhdGljIHZvaWQgX0pwZWdTY2FuU09JKGNvbnN0IEZYX0JZVEUqJiBzcmNfYnVmLCBGWF9EV09SRCYgc3JjX3NpemUpDQotICAgIHsNCi0gICAgICAgIGlmIChzcmNfc2l6ZSA9PSAwKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfRFdPUkQgb2Zmc2V0ID0gMDsNCi0gICAgICAgIHdoaWxlIChvZmZzZXQgPCBzcmNfc2l6ZSAtIDEpIHsNCi0gICAgICAgICAgICBpZiAoc3JjX2J1ZltvZmZzZXRdID09IDB4ZmYgJiYgc3JjX2J1ZltvZmZzZXQgKyAxXSA9PSAweGQ4KSB7DQotICAgICAgICAgICAgICAgIHNyY19idWYgKz0gb2Zmc2V0Ow0KLSAgICAgICAgICAgICAgICBzcmNfc2l6ZSAtPSBvZmZzZXQ7DQotICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgb2Zmc2V0ICsrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfTsNCi1leHRlcm4gIkMiIHsNCi0jdW5kZWYgRkFSDQotI2luY2x1ZGUgIi4uLy4uL2Z4X2pwZWdsaWIuaCINCi19DQotZXh0ZXJuICJDIiB7DQotICAgIHN0YXRpYyB2b2lkIF9zcmNfZG9fbm90aGluZyhzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCogY2luZm8pIHt9DQotfTsNCi1leHRlcm4gIkMiIHsNCi0gICAgc3RhdGljIHZvaWQgX2Vycm9yX2ZhdGFsKGpfY29tbW9uX3B0ciBjaW5mbykNCi0gICAgew0KLSAgICAgICAgbG9uZ2ptcCgqKGptcF9idWYqKWNpbmZvLT5jbGllbnRfZGF0YSwgLTEpOw0KLSAgICB9DQotfTsNCi1leHRlcm4gIkMiIHsNCi0gICAgc3RhdGljIHZvaWQgX3NyY19za2lwX2RhdGEoc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGNpbmZvLCBsb25nIG51bSkNCi0gICAgew0KLSAgICAgICAgaWYgKG51bSA+IChsb25nKWNpbmZvLT5zcmMtPmJ5dGVzX2luX2J1ZmZlcikgew0KLSAgICAgICAgICAgIF9lcnJvcl9mYXRhbCgoal9jb21tb25fcHRyKWNpbmZvKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGNpbmZvLT5zcmMtPm5leHRfaW5wdXRfYnl0ZSArPSBudW07DQotICAgICAgICBjaW5mby0+c3JjLT5ieXRlc19pbl9idWZmZXIgLT0gbnVtOw0KLSAgICB9DQotfTsNCi1leHRlcm4gIkMiIHsNCi0gICAgc3RhdGljIGJvb2xlYW4gX3NyY19maWxsX2J1ZmZlcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLX07DQotZXh0ZXJuICJDIiB7DQotICAgIHN0YXRpYyBib29sZWFuIF9zcmNfcmVzeW5jKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGludCBkZXNpcmVkKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLX07DQotZXh0ZXJuICJDIiB7DQotICAgIHN0YXRpYyB2b2lkIF9lcnJvcl9kb19ub3RoaW5nKGpfY29tbW9uX3B0ciBjaW5mbykge30NCi19Ow0KLWV4dGVybiAiQyIgew0KLSAgICBzdGF0aWMgdm9pZCBfZXJyb3JfZG9fbm90aGluZzEoal9jb21tb25fcHRyIGNpbmZvLCBpbnQpIHt9DQotfTsNCi1leHRlcm4gIkMiIHsNCi0gICAgc3RhdGljIHZvaWQgX2Vycm9yX2RvX25vdGhpbmcyKGpfY29tbW9uX3B0ciBjaW5mbywgY2hhciopIHt9DQotfTsNCi0jZGVmaW5lIEpQRUdfTUFSS0VSX0VYSUYJCShKUEVHX0FQUDAgKyAxKQ0KLSNkZWZpbmUJSlBFR19NQVJLRVJfSUNDCQkJKEpQRUdfQVBQMCArIDIpDQotI2RlZmluZQlKUEVHX01BUktFUl9BVVRIT1JUSU1FCShKUEVHX0FQUDAgKyAzKQ0KLSNkZWZpbmUJSlBFR19NQVJLRVJfTUFYU0laRQkweEZGRkYNCi0jZGVmaW5lCUpQRUdfT1ZFUkhFQURfTEVOCTE0DQotc3RhdGljIEZYX0JPT0wgX0pwZWdJc0ljY01hcmtlcihqcGVnX3NhdmVkX21hcmtlcl9wdHIgbWFya2VyKQ0KLXsNCi0gICAgaWYgKG1hcmtlci0+bWFya2VyID09IEpQRUdfTUFSS0VSX0lDQyAmJg0KLSAgICAgICAgICAgIG1hcmtlci0+ZGF0YV9sZW5ndGggPj0gSlBFR19PVkVSSEVBRF9MRU4gJiYNCi0gICAgICAgICAgICAoRlhTWVNfbWVtY21wMzIobWFya2VyLT5kYXRhLCAiXHg0OVx4NDNceDQzXHg1Zlx4NTBceDUyXHg0Zlx4NDZceDQ5XHg0Y1x4NDVceDAwIiwgMTIpID09IDApKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLXN0YXRpYwlGWF9CT09MIF9KcGVnTG9hZEljY1Byb2ZpbGUoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgRlhfTFBCWVRFKiBpY2NfYnVmX3B0ciwgRlhfRFdPUkQqIGljY19sZW5ndGgpDQotew0KLSAgICBpZihpY2NfYnVmX3B0ciA9PSBOVUxMIHx8IGljY19sZW5ndGggPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgICppY2NfYnVmX3B0ciA9IE5VTEw7DQotICAgICppY2NfbGVuZ3RoID0gMDsNCi0gICAgRlhfTFBCWVRFIGljY19kYXRhX3B0ciA9IE5VTEw7DQotICAgIEZYX0RXT1JEIGljY19kYXRhX2xlbiA9IDA7DQotICAgIEZYX0JZVEUgY291bnRfaWNjX21hcmtlciA9IDA7DQotICAgIEZYX0JZVEUgbnVtX2ljY19tYXJrZXIgPSAwOw0KLSAgICBqcGVnX3NhdmVkX21hcmtlcl9wdHIgbWFya2VyX2xpc3RbMjU2XSA9IHtOVUxMfTsNCi0gICAgZm9yIChqcGVnX3NhdmVkX21hcmtlcl9wdHIgY3VyX21hcmtlciA9IGNpbmZvLT5tYXJrZXJfbGlzdDsNCi0gICAgICAgICAgICBjdXJfbWFya2VyICE9IE5VTEw7DQotICAgICAgICAgICAgY3VyX21hcmtlciA9IGN1cl9tYXJrZXItPm5leHQpIHsNCi0gICAgICAgIGlmKF9KcGVnSXNJY2NNYXJrZXIoY3VyX21hcmtlcikpIHsNCi0gICAgICAgICAgICBpZihjb3VudF9pY2NfbWFya2VyID09IDApIHsNCi0gICAgICAgICAgICAgICAgbnVtX2ljY19tYXJrZXIgPSBjdXJfbWFya2VyLT5kYXRhWzEzXTsNCi0gICAgICAgICAgICB9IGVsc2UgaWYobnVtX2ljY19tYXJrZXIgIT0gY3VyX21hcmtlci0+ZGF0YVsxM10pIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpbnQgc24gPSBjdXJfbWFya2VyLT5kYXRhWzEyXSAtIDE7DQotICAgICAgICAgICAgaWYoc24gPCAwIHx8IHNuID49IG51bV9pY2NfbWFya2VyKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYobWFya2VyX2xpc3Rbc25dID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgbWFya2VyX2xpc3Rbc25dID0gY3VyX21hcmtlcjsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNvdW50X2ljY19tYXJrZXIgKys7DQotICAgICAgICAgICAgaWNjX2RhdGFfbGVuICs9CShjdXJfbWFya2VyLT5kYXRhX2xlbmd0aCAtIEpQRUdfT1ZFUkhFQURfTEVOKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZihjb3VudF9pY2NfbWFya2VyICE9IG51bV9pY2NfbWFya2VyKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYobnVtX2ljY19tYXJrZXIgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgaWNjX2RhdGFfcHRyID0gRlhfQWxsb2MoRlhfQllURSwgaWNjX2RhdGFfbGVuKTsNCi0gICAgaWYoaWNjX2J1Zl9wdHIgPT0gTlVMTCkJew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgICppY2NfYnVmX3B0ciA9IGljY19kYXRhX3B0cjsNCi0gICAgKmljY19sZW5ndGggPSBpY2NfZGF0YV9sZW47DQotICAgIGZvciAoaW50IGlkeCA9IDA7IGlkeCA8IG51bV9pY2NfbWFya2VyOyBpZHgrKykgew0KLSAgICAgICAgaWNjX2RhdGFfbGVuID0gbWFya2VyX2xpc3RbaWR4XS0+ZGF0YV9sZW5ndGggLSBKUEVHX09WRVJIRUFEX0xFTjsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKGljY19kYXRhX3B0ciwgbWFya2VyX2xpc3RbaWR4XS0+ZGF0YSArIEpQRUdfT1ZFUkhFQURfTEVOLCBpY2NfZGF0YV9sZW4pOw0KLSAgICAgICAgaWNjX2RhdGFfcHRyICs9IGljY19kYXRhX2xlbjsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotc3RhdGljCUZYX0JPT0wgX0pwZWdFbWJlZEljY1Byb2ZpbGUoal9jb21wcmVzc19wdHIgY2luZm8sIEZYX0xQQ0JZVEUgaWNjX2J1Zl9wdHIsIEZYX0RXT1JEIGljY19sZW5ndGgpDQotew0KLSAgICBpZihpY2NfYnVmX3B0ciA9PSBOVUxMIHx8IGljY19sZW5ndGggPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYX0RXT1JEIGljY19zZWdtZW50X3NpemUgPSAoSlBFR19NQVJLRVJfTUFYU0laRSAtIDIgLSBKUEVHX09WRVJIRUFEX0xFTik7DQotICAgIEZYX0RXT1JEIGljY19zZWdtZW50X251bSA9IChpY2NfbGVuZ3RoIC8gaWNjX3NlZ21lbnRfc2l6ZSkgKyAxOw0KLSAgICBpZiAoaWNjX3NlZ21lbnRfbnVtID4gMjU1KQl7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgRlhfRFdPUkQgaWNjX2RhdGFfbGVuZ3RoID0gSlBFR19PVkVSSEVBRF9MRU4gKyAoaWNjX3NlZ21lbnRfbnVtID4gMSA/IGljY19zZWdtZW50X3NpemUgOiBpY2NfbGVuZ3RoKTsNCi0gICAgRlhfTFBCWVRFIGljY19kYXRhID0gRlhfQWxsb2MoRlhfQllURSwgaWNjX2RhdGFfbGVuZ3RoKTsNCi0gICAgaWYgKGljY19kYXRhID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWFNZU19tZW1jcHkzMihpY2NfZGF0YSwgIlx4NDlceDQzXHg0M1x4NWZceDUwXHg1Mlx4NGZceDQ2XHg0OVx4NGNceDQ1XHgwMCIsIDEyKTsNCi0gICAgaWNjX2RhdGFbMTNdID0gKEZYX0JZVEUpaWNjX3NlZ21lbnRfbnVtOw0KLSAgICBmb3IgKEZYX0JZVEUgaSA9IDA7IGkgPCAoaWNjX3NlZ21lbnRfbnVtIC0gMSk7IGkrKykgew0KLSAgICAgICAgaWNjX2RhdGFbMTJdID0gaSArIDE7DQotICAgICAgICBGWFNZU19tZW1jcHkzMihpY2NfZGF0YSArIEpQRUdfT1ZFUkhFQURfTEVOLCBpY2NfYnVmX3B0ciArIGkgKiBpY2Nfc2VnbWVudF9zaXplLCBpY2Nfc2VnbWVudF9zaXplKTsNCi0gICAgICAgIGpwZWdfd3JpdGVfbWFya2VyKGNpbmZvLCBKUEVHX01BUktFUl9JQ0MsIGljY19kYXRhLCBpY2NfZGF0YV9sZW5ndGgpOw0KLSAgICB9DQotICAgIGljY19kYXRhWzEyXSA9IChGWF9CWVRFKWljY19zZWdtZW50X251bTsNCi0gICAgRlhfRFdPUkQgaWNjX3NpemUgPSAoaWNjX3NlZ21lbnRfbnVtIC0gMSkgKiBpY2Nfc2VnbWVudF9zaXplOw0KLSAgICBGWFNZU19tZW1jcHkzMihpY2NfZGF0YSArIEpQRUdfT1ZFUkhFQURfTEVOLCBpY2NfYnVmX3B0ciArIGljY19zaXplLCBpY2NfbGVuZ3RoIC0gaWNjX3NpemUpOw0KLSAgICBqcGVnX3dyaXRlX21hcmtlcihjaW5mbywgSlBFR19NQVJLRVJfSUNDLCBpY2NfZGF0YSwgSlBFR19PVkVSSEVBRF9MRU4gKyBpY2NfbGVuZ3RoIC0gaWNjX3NpemUpOw0KLSAgICBGWF9GcmVlKGljY19kYXRhKTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLWV4dGVybiAiQyIgew0KLSAgICBzdGF0aWMgdm9pZCBfZGVzdF9kb19ub3RoaW5nKGpfY29tcHJlc3NfcHRyIGNpbmZvKSB7fQ0KLX07DQotZXh0ZXJuICJDIiB7DQotICAgIHN0YXRpYyBib29sZWFuIF9kZXN0X2VtcHR5KGpfY29tcHJlc3NfcHRyIGNpbmZvKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi19Ow0KLSNkZWZpbmUJSlBFR19CTE9DS19TSVpFCTEwNDg1NzYNCi1zdGF0aWMgdm9pZCBfSnBlZ0VuY29kZShjb25zdCBDRlhfRElCU291cmNlKiBwU291cmNlLCBGWF9MUEJZVEUmIGRlc3RfYnVmLCBGWF9TVFJTSVpFJiBkZXN0X3NpemUsIGludCBxdWFsaXR5LCBGWF9MUENCWVRFIGljY19idWYsIEZYX0RXT1JEIGljY19sZW5ndGgpDQotew0KLSAgICBzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3QgY2luZm87DQotICAgIHN0cnVjdCBqcGVnX2Vycm9yX21nciBqZXJyOw0KLSAgICBqZXJyLmVycm9yX2V4aXQgPSBfZXJyb3JfZG9fbm90aGluZzsNCi0gICAgamVyci5lbWl0X21lc3NhZ2UgPSBfZXJyb3JfZG9fbm90aGluZzE7DQotICAgIGplcnIub3V0cHV0X21lc3NhZ2UgPSBfZXJyb3JfZG9fbm90aGluZzsNCi0gICAgamVyci5mb3JtYXRfbWVzc2FnZSA9IF9lcnJvcl9kb19ub3RoaW5nMjsNCi0gICAgamVyci5yZXNldF9lcnJvcl9tZ3IgPSBfZXJyb3JfZG9fbm90aGluZzsNCi0gICAgY2luZm8uZXJyID0gJmplcnI7DQotICAgIGpwZWdfY3JlYXRlX2NvbXByZXNzKCZjaW5mbyk7DQotICAgIGludCBCcHAgPSBwU291cmNlLT5HZXRCUFAoKSAvIDg7DQotICAgIGludCBuQ29tcG9uZW50cyA9IEJwcCA+PSAzID8gKHBTb3VyY2UtPklzQ215a0ltYWdlKCkgPyA0IDogMykgOiAxOw0KLSAgICBpbnQgcGl0Y2ggPSBwU291cmNlLT5HZXRQaXRjaCgpOw0KLSAgICBpbnQgd2lkdGggPSBwU291cmNlLT5HZXRXaWR0aCgpOw0KLSAgICBpbnQgaGVpZ2h0ID0gcFNvdXJjZS0+R2V0SGVpZ2h0KCk7DQotICAgIEZYX0RXT1JEIGRlc3RfYnVmX2xlbmd0aCA9IHdpZHRoICogaGVpZ2h0ICogbkNvbXBvbmVudHMgKyAxMDI0ICsgKGljY19sZW5ndGggPyAoaWNjX2xlbmd0aCArIDI1NSAqIDE4KSA6IDApOw0KLSAgICBkZXN0X2J1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIGRlc3RfYnVmX2xlbmd0aCk7DQotICAgIHdoaWxlIChkZXN0X2J1ZiA9PSBOVUxMKSB7DQotICAgICAgICBkZXN0X2J1Zl9sZW5ndGggPj49IDE7DQotICAgICAgICBkZXN0X2J1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIGRlc3RfYnVmX2xlbmd0aCk7DQotICAgIH0NCi0gICAgRlhTWVNfbWVtc2V0MzIoZGVzdF9idWYsIDAsIGRlc3RfYnVmX2xlbmd0aCk7DQotICAgIHN0cnVjdCBqcGVnX2Rlc3RpbmF0aW9uX21nciBkZXN0Ow0KLSAgICBkZXN0LmluaXRfZGVzdGluYXRpb24gPSBfZGVzdF9kb19ub3RoaW5nOw0KLSAgICBkZXN0LnRlcm1fZGVzdGluYXRpb24gPSBfZGVzdF9kb19ub3RoaW5nOw0KLSAgICBkZXN0LmVtcHR5X291dHB1dF9idWZmZXIgPSBfZGVzdF9lbXB0eTsNCi0gICAgZGVzdC5uZXh0X291dHB1dF9ieXRlID0gZGVzdF9idWY7DQotICAgIGRlc3QuZnJlZV9pbl9idWZmZXIgPSBkZXN0X2J1Zl9sZW5ndGg7DQotICAgIGNpbmZvLmRlc3QgPSAmZGVzdDsNCi0gICAgY2luZm8uaW1hZ2Vfd2lkdGggPSB3aWR0aDsNCi0gICAgY2luZm8uaW1hZ2VfaGVpZ2h0ID0gaGVpZ2h0Ow0KLSAgICBjaW5mby5pbnB1dF9jb21wb25lbnRzID0gbkNvbXBvbmVudHM7DQotICAgIGlmIChuQ29tcG9uZW50cyA9PSAxKSB7DQotICAgICAgICBjaW5mby5pbl9jb2xvcl9zcGFjZSA9IEpDU19HUkFZU0NBTEU7DQotICAgIH0gZWxzZSBpZiAobkNvbXBvbmVudHMgPT0gMykgew0KLSAgICAgICAgY2luZm8uaW5fY29sb3Jfc3BhY2UgPSBKQ1NfUkdCOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgY2luZm8uaW5fY29sb3Jfc3BhY2UgPSBKQ1NfQ01ZSzsNCi0gICAgfQ0KLSAgICBGWF9MUEJZVEUgbGluZV9idWYgPSBOVUxMOw0KLSAgICBpZiAobkNvbXBvbmVudHMgPiAxKSB7DQotICAgICAgICBsaW5lX2J1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIHdpZHRoICogbkNvbXBvbmVudHMpOw0KLSAgICAgICAgaWYgKGxpbmVfYnVmID09IE5VTEwpIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgIH0NCi0gICAganBlZ19zZXRfZGVmYXVsdHMoJmNpbmZvKTsNCi0gICAgaWYocXVhbGl0eSAhPSA3NSkgew0KLSAgICAgICAganBlZ19zZXRfcXVhbGl0eSgmY2luZm8sIHF1YWxpdHksIFRSVUUpOw0KLSAgICB9DQotICAgIGpwZWdfc3RhcnRfY29tcHJlc3MoJmNpbmZvLCBUUlVFKTsNCi0gICAgX0pwZWdFbWJlZEljY1Byb2ZpbGUoJmNpbmZvLCBpY2NfYnVmLCBpY2NfbGVuZ3RoKTsNCi0gICAgSlNBTVBST1cgcm93X3BvaW50ZXJbMV07DQotICAgIEpESU1FTlNJT04gcm93Ow0KLSAgICB3aGlsZSAoY2luZm8ubmV4dF9zY2FubGluZSA8IGNpbmZvLmltYWdlX2hlaWdodCkgew0KLSAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBTb3VyY2UtPkdldFNjYW5saW5lKGNpbmZvLm5leHRfc2NhbmxpbmUpOw0KLSAgICAgICAgaWYgKG5Db21wb25lbnRzID4gMSkgew0KLSAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBsaW5lX2J1ZjsNCi0gICAgICAgICAgICBpZiAobkNvbXBvbmVudHMgPT0gMykgew0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdpZHRoOyBpICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBzcmNfc2NhblsyXTsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IHNyY19zY2FuWzFdOw0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gc3JjX3NjYW5bMF07DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IEJwcDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGl0Y2g7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IH4qc3JjX3NjYW4rKzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByb3dfcG9pbnRlclswXSA9IGxpbmVfYnVmOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICByb3dfcG9pbnRlclswXSA9IChGWF9MUEJZVEUpc3JjX3NjYW47DQotICAgICAgICB9DQotICAgICAgICByb3cgPSBjaW5mby5uZXh0X3NjYW5saW5lOw0KLSAgICAgICAganBlZ193cml0ZV9zY2FubGluZXMoJmNpbmZvLCByb3dfcG9pbnRlciwgMSk7DQotICAgICAgICBpZiAoY2luZm8ubmV4dF9zY2FubGluZSA9PSByb3cpIHsNCi0gICAgICAgICAgICBkZXN0X2J1ZiA9IEZYX1JlYWxsb2MoRlhfQllURSwgZGVzdF9idWYsIGRlc3RfYnVmX2xlbmd0aCArIEpQRUdfQkxPQ0tfU0laRSk7DQotICAgICAgICAgICAgaWYgKGRlc3RfYnVmID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgRlhfRnJlZShsaW5lX2J1Zik7DQotICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZGVzdC5uZXh0X291dHB1dF9ieXRlID0gZGVzdF9idWYgKyBkZXN0X2J1Zl9sZW5ndGggLSBkZXN0LmZyZWVfaW5fYnVmZmVyOw0KLSAgICAgICAgICAgIGRlc3RfYnVmX2xlbmd0aCArPSBKUEVHX0JMT0NLX1NJWkU7DQotICAgICAgICAgICAgZGVzdC5mcmVlX2luX2J1ZmZlciArPSBKUEVHX0JMT0NLX1NJWkU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAganBlZ19maW5pc2hfY29tcHJlc3MoJmNpbmZvKTsNCi0gICAganBlZ19kZXN0cm95X2NvbXByZXNzKCZjaW5mbyk7DQotICAgIGlmIChsaW5lX2J1Zikgew0KLSAgICAgICAgRlhfRnJlZShsaW5lX2J1Zik7DQotICAgIH0NCi0gICAgZGVzdF9zaXplID0gZGVzdF9idWZfbGVuZ3RoIC0gKEZYX1NUUlNJWkUpZGVzdC5mcmVlX2luX2J1ZmZlcjsNCi19DQotc3RhdGljIEZYX0JPT0wgX0pwZWdMb2FkSW5mbyhGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBpbnQmIHdpZHRoLCBpbnQmIGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbnVtX2NvbXBvbmVudHMsIGludCYgYml0c19wZXJfY29tcG9uZW50cywgRlhfQk9PTCYgY29sb3JfdHJhbnNmb3JtLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFKiBpY2NfYnVmX3B0ciwgRlhfRFdPUkQqIGljY19sZW5ndGgpDQotew0KLSAgICBfSnBlZ1NjYW5TT0koc3JjX2J1Ziwgc3JjX3NpemUpOw0KLSAgICBzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCBjaW5mbzsNCi0gICAgc3RydWN0IGpwZWdfZXJyb3JfbWdyIGplcnI7DQotICAgIGplcnIuZXJyb3JfZXhpdCA9IF9lcnJvcl9mYXRhbDsNCi0gICAgamVyci5lbWl0X21lc3NhZ2UgPSBfZXJyb3JfZG9fbm90aGluZzE7DQotICAgIGplcnIub3V0cHV0X21lc3NhZ2UgPSBfZXJyb3JfZG9fbm90aGluZzsNCi0gICAgamVyci5mb3JtYXRfbWVzc2FnZSA9IF9lcnJvcl9kb19ub3RoaW5nMjsNCi0gICAgamVyci5yZXNldF9lcnJvcl9tZ3IgPSBfZXJyb3JfZG9fbm90aGluZzsNCi0gICAgY2luZm8uZXJyID0gJmplcnI7DQotICAgIGptcF9idWYgbWFyazsNCi0gICAgY2luZm8uY2xpZW50X2RhdGEgPSAmbWFyazsNCi0gICAgaWYgKHNldGptcChtYXJrKSA9PSAtMSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGpwZWdfY3JlYXRlX2RlY29tcHJlc3MoJmNpbmZvKTsNCi0gICAgc3RydWN0IGpwZWdfc291cmNlX21nciBzcmM7DQotICAgIHNyYy5pbml0X3NvdXJjZSA9IF9zcmNfZG9fbm90aGluZzsNCi0gICAgc3JjLnRlcm1fc291cmNlID0gX3NyY19kb19ub3RoaW5nOw0KLSAgICBzcmMuc2tpcF9pbnB1dF9kYXRhID0gX3NyY19za2lwX2RhdGE7DQotICAgIHNyYy5maWxsX2lucHV0X2J1ZmZlciA9IF9zcmNfZmlsbF9idWZmZXI7DQotICAgIHNyYy5yZXN5bmNfdG9fcmVzdGFydCA9IF9zcmNfcmVzeW5jOw0KLSAgICBzcmMuYnl0ZXNfaW5fYnVmZmVyID0gc3JjX3NpemU7DQotICAgIHNyYy5uZXh0X2lucHV0X2J5dGUgPSBzcmNfYnVmOw0KLSAgICBjaW5mby5zcmMgPSAmc3JjOw0KLSAgICBpZiAoc2V0am1wKG1hcmspID09IC0xKSB7DQotICAgICAgICBqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcygmY2luZm8pOw0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmKGljY19idWZfcHRyICYmIGljY19sZW5ndGgpIHsNCi0gICAgICAgIGpwZWdfc2F2ZV9tYXJrZXJzKCZjaW5mbywgSlBFR19NQVJLRVJfSUNDLCBKUEVHX01BUktFUl9NQVhTSVpFKTsNCi0gICAgfQ0KLSAgICBpbnQgcmV0ID0ganBlZ19yZWFkX2hlYWRlcigmY2luZm8sIFRSVUUpOw0KLSAgICBpZiAocmV0ICE9IEpQRUdfSEVBREVSX09LKSB7DQotICAgICAgICBqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcygmY2luZm8pOw0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHdpZHRoID0gY2luZm8uaW1hZ2Vfd2lkdGg7DQotICAgIGhlaWdodCA9IGNpbmZvLmltYWdlX2hlaWdodDsNCi0gICAgbnVtX2NvbXBvbmVudHMgPSBjaW5mby5udW1fY29tcG9uZW50czsNCi0gICAgY29sb3JfdHJhbnNmb3JtID0gY2luZm8uanBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfWUNiQ3IgfHwgY2luZm8uanBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfWUNDSzsNCi0gICAgYml0c19wZXJfY29tcG9uZW50cyA9IGNpbmZvLmRhdGFfcHJlY2lzaW9uOw0KLSAgICBpZihpY2NfYnVmX3B0ciAhPSBOVUxMKSB7DQotICAgICAgICAqaWNjX2J1Zl9wdHIgPSBOVUxMOw0KLSAgICB9DQotICAgIGlmKGljY19sZW5ndGggIT0gTlVMTCkgew0KLSAgICAgICAgKmljY19sZW5ndGggPSAwOw0KLSAgICB9DQotICAgIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzKCZjaW5mbyk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1jbGFzcyBDQ29kZWNfSnBlZ0RlY29kZXIgOiBwdWJsaWMgQ0NvZGVjX1NjYW5saW5lRGVjb2Rlcg0KLXsNCi1wdWJsaWM6DQotICAgIENDb2RlY19KcGVnRGVjb2RlcigpOw0KLSAgICB+Q0NvZGVjX0pwZWdEZWNvZGVyKCk7DQotICAgIEZYX0JPT0wJCQkJQ3JlYXRlKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG5Db21wcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBDb2xvclRyYW5zZm9ybSwgSUZYX0pwZWdQcm92aWRlciogcEpQKTsNCi0gICAgdmlydHVhbCB2b2lkCQlEZXN0cm95KCkNCi0gICAgew0KLSAgICAgICAgZGVsZXRlIHRoaXM7DQotICAgIH0NCi0gICAgdmlydHVhbCB2b2lkCQl2X0Rvd25TY2FsZShpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0KTsNCi0gICAgdmlydHVhbCBGWF9CT09MCQl2X1Jld2luZCgpOw0KLSAgICB2aXJ0dWFsIEZYX0xQQllURQl2X0dldE5leHRMaW5lKCk7DQotICAgIHZpcnR1YWwgRlhfRFdPUkQJR2V0U3JjT2Zmc2V0KCk7DQotICAgIGptcF9idWYJCW1fSm1wQnVmOw0KLSAgICBzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCBjaW5mbzsNCi0gICAgc3RydWN0IGpwZWdfZXJyb3JfbWdyIGplcnI7DQotICAgIHN0cnVjdCBqcGVnX3NvdXJjZV9tZ3Igc3JjOw0KLSAgICBGWF9MUENCWVRFCW1fU3JjQnVmOw0KLSAgICBGWF9EV09SRAltX1NyY1NpemU7DQotICAgIEZYX0xQQllURQltX3BTY2FubGluZUJ1ZjsNCi0gICAgRlhfQk9PTAkJSW5pdERlY29kZSgpOw0KLSAgICBGWF9CT09MCQltX2JJbml0ZWQsIG1fYlN0YXJ0ZWQsIG1fYkpwZWdUcmFuc2Zvcm07DQotcHJvdGVjdGVkOg0KLSAgICBJRlhfSnBlZ1Byb3ZpZGVyKgltX3BFeHRQcm92aWRlcjsNCi0gICAgdm9pZCoJCQkJbV9wRXh0Q29udGV4dDsNCi0gICAgRlhfRFdPUkQJCQltX25EZWZhdWx0U2NhbGVEZW5vbTsNCi19Ow0KLUNDb2RlY19KcGVnRGVjb2Rlcjo6Q0NvZGVjX0pwZWdEZWNvZGVyKCkNCi17DQotICAgIG1fcFNjYW5saW5lQnVmID0gTlVMTDsNCi0gICAgbV9Eb3duU2NhbGUgPSAxOw0KLSAgICBtX2JTdGFydGVkID0gRkFMU0U7DQotICAgIG1fYkluaXRlZCA9IEZBTFNFOw0KLSAgICBtX3BFeHRQcm92aWRlciA9IE5VTEw7DQotICAgIG1fcEV4dENvbnRleHQgPSBOVUxMOw0KLSAgICBGWFNZU19tZW1zZXQzMigmY2luZm8sIDAsIHNpemVvZihjaW5mbykpOw0KLSAgICBGWFNZU19tZW1zZXQzMigmamVyciwgMCwgc2l6ZW9mKGplcnIpKTsNCi0gICAgRlhTWVNfbWVtc2V0MzIoJnNyYywgMCwgc2l6ZW9mKHNyYykpOw0KLSAgICBtX25EZWZhdWx0U2NhbGVEZW5vbSA9IDE7DQotfQ0KLUNDb2RlY19KcGVnRGVjb2Rlcjo6fkNDb2RlY19KcGVnRGVjb2RlcigpDQotew0KLSAgICBpZiAobV9wRXh0UHJvdmlkZXIpIHsNCi0gICAgICAgIG1fcEV4dFByb3ZpZGVyLT5EZXN0cm95RGVjb2RlcihtX3BFeHRDb250ZXh0KTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAobV9wU2NhbmxpbmVCdWYpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wU2NhbmxpbmVCdWYpOw0KLSAgICB9DQotICAgIGlmIChtX2JJbml0ZWQpIHsNCi0gICAgICAgIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzKCZjaW5mbyk7DQotICAgIH0NCi19DQotRlhfQk9PTCBDQ29kZWNfSnBlZ0RlY29kZXI6OkluaXREZWNvZGUoKQ0KLXsNCi0gICAgY2luZm8uZXJyID0gJmplcnI7DQotICAgIGNpbmZvLmNsaWVudF9kYXRhID0gJm1fSm1wQnVmOw0KLSAgICBpZiAoc2V0am1wKG1fSm1wQnVmKSA9PSAtMSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGpwZWdfY3JlYXRlX2RlY29tcHJlc3MoJmNpbmZvKTsNCi0gICAgbV9iSW5pdGVkID0gVFJVRTsNCi0gICAgY2luZm8uc3JjID0gJnNyYzsNCi0gICAgc3JjLmJ5dGVzX2luX2J1ZmZlciA9IG1fU3JjU2l6ZTsNCi0gICAgc3JjLm5leHRfaW5wdXRfYnl0ZSA9IG1fU3JjQnVmOw0KLSAgICBpZiAoc2V0am1wKG1fSm1wQnVmKSA9PSAtMSkgew0KLSAgICAgICAganBlZ19kZXN0cm95X2RlY29tcHJlc3MoJmNpbmZvKTsNCi0gICAgICAgIG1fYkluaXRlZCA9IEZBTFNFOw0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGNpbmZvLmltYWdlX3dpZHRoID0gbV9PcmlnV2lkdGg7DQotICAgIGNpbmZvLmltYWdlX2hlaWdodCA9IG1fT3JpZ0hlaWdodDsNCi0gICAgaW50IHJldCA9IGpwZWdfcmVhZF9oZWFkZXIoJmNpbmZvLCBUUlVFKTsNCi0gICAgaWYgKHJldCAhPSBKUEVHX0hFQURFUl9PSykgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChjaW5mby5zYXdfQWRvYmVfbWFya2VyKSB7DQotICAgICAgICBtX2JKcGVnVHJhbnNmb3JtID0gVFJVRTsNCi0gICAgfQ0KLSAgICBpZiAoY2luZm8ubnVtX2NvbXBvbmVudHMgPT0gMyAmJiAhbV9iSnBlZ1RyYW5zZm9ybSkgew0KLSAgICAgICAgY2luZm8ub3V0X2NvbG9yX3NwYWNlID0gY2luZm8uanBlZ19jb2xvcl9zcGFjZTsNCi0gICAgfQ0KLSAgICBtX09yaWdXaWR0aCA9IGNpbmZvLmltYWdlX3dpZHRoOw0KLSAgICBtX09yaWdIZWlnaHQgPSBjaW5mby5pbWFnZV9oZWlnaHQ7DQotICAgIG1fT3V0cHV0V2lkdGggPSBtX09yaWdXaWR0aDsNCi0gICAgbV9PdXRwdXRIZWlnaHQgPSBtX091dHB1dEhlaWdodDsNCi0gICAgbV9uRGVmYXVsdFNjYWxlRGVub20gPSBjaW5mby5zY2FsZV9kZW5vbTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ0NvZGVjX0pwZWdEZWNvZGVyOjpDcmVhdGUoRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5Db21wcywgRlhfQk9PTCBDb2xvclRyYW5zZm9ybSwgSUZYX0pwZWdQcm92aWRlciogcEpQKQ0KLXsNCi0gICAgaWYgKHBKUCkgew0KLSAgICAgICAgbV9wRXh0UHJvdmlkZXIgPSBwSlA7DQotICAgICAgICBtX3BFeHRDb250ZXh0ID0gbV9wRXh0UHJvdmlkZXItPkNyZWF0ZURlY29kZXIoc3JjX2J1Ziwgc3JjX3NpemUsIHdpZHRoLCBoZWlnaHQsIG5Db21wcywgQ29sb3JUcmFuc2Zvcm0pOw0KLSAgICAgICAgcmV0dXJuIG1fcEV4dENvbnRleHQgIT0gTlVMTDsNCi0gICAgfQ0KLSAgICBfSnBlZ1NjYW5TT0koc3JjX2J1Ziwgc3JjX3NpemUpOw0KLSAgICBtX1NyY0J1ZiA9IHNyY19idWY7DQotICAgIG1fU3JjU2l6ZSA9IHNyY19zaXplOw0KLSAgICBqZXJyLmVycm9yX2V4aXQgPSBfZXJyb3JfZmF0YWw7DQotICAgIGplcnIuZW1pdF9tZXNzYWdlID0gX2Vycm9yX2RvX25vdGhpbmcxOw0KLSAgICBqZXJyLm91dHB1dF9tZXNzYWdlID0gX2Vycm9yX2RvX25vdGhpbmc7DQotICAgIGplcnIuZm9ybWF0X21lc3NhZ2UgPSBfZXJyb3JfZG9fbm90aGluZzI7DQotICAgIGplcnIucmVzZXRfZXJyb3JfbWdyID0gX2Vycm9yX2RvX25vdGhpbmc7DQotICAgIHNyYy5pbml0X3NvdXJjZSA9IF9zcmNfZG9fbm90aGluZzsNCi0gICAgc3JjLnRlcm1fc291cmNlID0gX3NyY19kb19ub3RoaW5nOw0KLSAgICBzcmMuc2tpcF9pbnB1dF9kYXRhID0gX3NyY19za2lwX2RhdGE7DQotICAgIHNyYy5maWxsX2lucHV0X2J1ZmZlciA9IF9zcmNfZmlsbF9idWZmZXI7DQotICAgIHNyYy5yZXN5bmNfdG9fcmVzdGFydCA9IF9zcmNfcmVzeW5jOw0KLSAgICBtX2JKcGVnVHJhbnNmb3JtID0gQ29sb3JUcmFuc2Zvcm07DQotICAgIGlmKHNyY19zaXplID4gMSAmJiBGWFNZU19tZW1jbXAzMihzcmNfYnVmICsgc3JjX3NpemUgLSAyLCAiXHhGRlx4RDkiLCAyKSAhPSAwKSB7DQotICAgICAgICAoKEZYX0xQQllURSlzcmNfYnVmKVtzcmNfc2l6ZSAtIDJdID0gMHhGRjsNCi0gICAgICAgICgoRlhfTFBCWVRFKXNyY19idWYpW3NyY19zaXplIC0gMV0gPSAweEQ5Ow0KLSAgICB9DQotICAgIG1fT3V0cHV0V2lkdGggPSBtX09yaWdXaWR0aCA9IHdpZHRoOw0KLSAgICBtX091dHB1dEhlaWdodCA9IG1fT3JpZ0hlaWdodCA9IGhlaWdodDsNCi0gICAgaWYgKCFJbml0RGVjb2RlKCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoY2luZm8ubnVtX2NvbXBvbmVudHMgPCBuQ29tcHMpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoKGludCljaW5mby5pbWFnZV93aWR0aCA8IHdpZHRoKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbV9QaXRjaCA9IChjaW5mby5pbWFnZV93aWR0aCAqIGNpbmZvLm51bV9jb21wb25lbnRzICsgMykgLyA0ICogNDsNCi0gICAgbV9wU2NhbmxpbmVCdWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1BpdGNoKTsNCi0gICAgaWYgKG1fcFNjYW5saW5lQnVmID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBtX25Db21wcyA9IGNpbmZvLm51bV9jb21wb25lbnRzOw0KLSAgICBtX2JwYyA9IDg7DQotICAgIG1fYkNvbG9yVHJhbnNmb3JtZWQgPSBGQUxTRTsNCi0gICAgbV9iU3RhcnRlZCA9IEZBTFNFOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotZXh0ZXJuICJDIiB7DQotICAgIEZYX0lOVDMyIEZYX0dldERvd25zYW1wbGVSYXRpbyhGWF9JTlQzMiBvcmlnaW5XaWR0aCwgRlhfSU5UMzIgb3JpZ2luSGVpZ2h0LCBGWF9JTlQzMiBkb3duc2FtcGxlV2lkdGgsIEZYX0lOVDMyIGRvd25zYW1wbGVIZWlnaHQpDQotICAgIHsNCi0gICAgICAgIGludCBpcmF0aW9fdyA9IG9yaWdpbldpZHRoIC8gZG93bnNhbXBsZVdpZHRoOw0KLSAgICAgICAgaW50IGlyYXRpb19oID0gb3JpZ2luSGVpZ2h0IC8gZG93bnNhbXBsZUhlaWdodDsNCi0gICAgICAgIGludCByYXRpbyA9IChpcmF0aW9fdyA+IGlyYXRpb19oKSA/IGlyYXRpb19oIDogaXJhdGlvX3c7DQotICAgICAgICBpZiAocmF0aW8gPj0gOCkgew0KLSAgICAgICAgICAgIHJldHVybiA4Ow0KLSAgICAgICAgfSBlbHNlIGlmIChyYXRpbyA+PSA0KSB7DQotICAgICAgICAgICAgcmV0dXJuIDQ7DQotICAgICAgICB9IGVsc2UgaWYgKHJhdGlvID49IDIpIHsNCi0gICAgICAgICAgICByZXR1cm4gMjsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0NvZGVjX0pwZWdEZWNvZGVyOjp2X0Rvd25TY2FsZShpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0KQ0KLXsNCi0gICAgaWYgKG1fcEV4dFByb3ZpZGVyKSB7DQotICAgICAgICBtX3BFeHRQcm92aWRlci0+RG93blNjYWxlKG1fcEV4dENvbnRleHQsIGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0KTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpbnQgb2xkX3NjYWxlID0gbV9Eb3duU2NhbGU7DQotICAgIG1fRG93blNjYWxlID0gRlhfR2V0RG93bnNhbXBsZVJhdGlvKG1fT3JpZ1dpZHRoLCBtX09yaWdIZWlnaHQsIGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0KTsNCi0gICAgbV9PdXRwdXRXaWR0aCA9IChtX09yaWdXaWR0aCArIG1fRG93blNjYWxlIC0gMSkgLyBtX0Rvd25TY2FsZTsNCi0gICAgbV9PdXRwdXRIZWlnaHQgPSAobV9PcmlnSGVpZ2h0ICsgbV9Eb3duU2NhbGUgLSAxKSAvIG1fRG93blNjYWxlOw0KLSAgICBtX1BpdGNoID0gKG1fT3V0cHV0V2lkdGggKiBtX25Db21wcyArIDMpIC8gNCAqIDQ7DQotICAgIGlmIChvbGRfc2NhbGUgIT0gbV9Eb3duU2NhbGUpIHsNCi0gICAgICAgIG1fTmV4dExpbmUgPSAtMTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENDb2RlY19KcGVnRGVjb2Rlcjo6dl9SZXdpbmQoKQ0KLXsNCi0gICAgaWYgKG1fcEV4dFByb3ZpZGVyKSB7DQotICAgICAgICByZXR1cm4gbV9wRXh0UHJvdmlkZXItPlJld2luZChtX3BFeHRDb250ZXh0KTsNCi0gICAgfQ0KLSAgICBpZiAobV9iU3RhcnRlZCkgew0KLSAgICAgICAganBlZ19kZXN0cm95X2RlY29tcHJlc3MoJmNpbmZvKTsNCi0gICAgICAgIGlmICghSW5pdERlY29kZSgpKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChzZXRqbXAobV9KbXBCdWYpID09IC0xKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgY2luZm8uc2NhbGVfZGVub20gPSBtX25EZWZhdWx0U2NhbGVEZW5vbSAqIG1fRG93blNjYWxlOw0KLSAgICBtX091dHB1dFdpZHRoID0gKG1fT3JpZ1dpZHRoICsgbV9Eb3duU2NhbGUgLSAxKSAvIG1fRG93blNjYWxlOw0KLSAgICBtX091dHB1dEhlaWdodCA9IChtX09yaWdIZWlnaHQgKyBtX0Rvd25TY2FsZSAtIDEpIC8gbV9Eb3duU2NhbGU7DQotICAgIGlmICghanBlZ19zdGFydF9kZWNvbXByZXNzKCZjaW5mbykpIHsNCi0gICAgICAgIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzKCZjaW5mbyk7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKChpbnQpY2luZm8ub3V0cHV0X3dpZHRoID4gbV9PcmlnV2lkdGgpIHsNCi0gICAgICAgIEZYU1lTX2Fzc2VydChGQUxTRSk7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbV9iU3RhcnRlZCA9IFRSVUU7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9MUEJZVEUgQ0NvZGVjX0pwZWdEZWNvZGVyOjp2X0dldE5leHRMaW5lKCkNCi17DQotICAgIGlmIChtX3BFeHRQcm92aWRlcikgew0KLSAgICAgICAgcmV0dXJuIG1fcEV4dFByb3ZpZGVyLT5HZXROZXh0TGluZShtX3BFeHRDb250ZXh0KTsNCi0gICAgfQ0KLSAgICBpbnQgbmxpbmVzID0ganBlZ19yZWFkX3NjYW5saW5lcygmY2luZm8sICZtX3BTY2FubGluZUJ1ZiwgMSk7DQotICAgIGlmIChubGluZXMgPCAxKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wU2NhbmxpbmVCdWY7DQotfQ0KLUZYX0RXT1JEIENDb2RlY19KcGVnRGVjb2Rlcjo6R2V0U3JjT2Zmc2V0KCkNCi17DQotICAgIGlmIChtX3BFeHRQcm92aWRlcikgew0KLSAgICAgICAgcmV0dXJuIG1fcEV4dFByb3ZpZGVyLT5HZXRTcmNPZmZzZXQobV9wRXh0Q29udGV4dCk7DQotICAgIH0NCi0gICAgcmV0dXJuIChGWF9EV09SRCkobV9TcmNTaXplIC0gc3JjLmJ5dGVzX2luX2J1ZmZlcik7DQotfQ0KLUlDb2RlY19TY2FubGluZURlY29kZXIqCUNDb2RlY19KcGVnTW9kdWxlOjpDcmVhdGVEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsDQotICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBuQ29tcHMsIEZYX0JPT0wgQ29sb3JUcmFuc2Zvcm0pDQotew0KLSAgICBpZiAoc3JjX2J1ZiA9PSBOVUxMIHx8IHNyY19zaXplID09IDApIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENDb2RlY19KcGVnRGVjb2RlciogcERlY29kZXIgPSBGWF9ORVcgQ0NvZGVjX0pwZWdEZWNvZGVyOw0KLSAgICBpZiAocERlY29kZXIgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKCFwRGVjb2Rlci0+Q3JlYXRlKHNyY19idWYsIHNyY19zaXplLCB3aWR0aCwgaGVpZ2h0LCBuQ29tcHMsIENvbG9yVHJhbnNmb3JtLCBtX3BFeHRQcm92aWRlcikpIHsNCi0gICAgICAgIGRlbGV0ZSBwRGVjb2RlcjsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiBwRGVjb2RlcjsNCi19DQotRlhfQk9PTCBDQ29kZWNfSnBlZ01vZHVsZTo6TG9hZEluZm8oRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50JiB3aWR0aCwgaW50JiBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBudW1fY29tcG9uZW50cywgaW50JiBiaXRzX3Blcl9jb21wb25lbnRzLCBGWF9CT09MJiBjb2xvcl90cmFuc2Zvcm0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFKiBpY2NfYnVmX3B0ciwgRlhfRFdPUkQqIGljY19sZW5ndGgpDQotew0KLSAgICBpZiAobV9wRXh0UHJvdmlkZXIpIHsNCi0gICAgICAgIHJldHVybiBtX3BFeHRQcm92aWRlci0+TG9hZEluZm8oc3JjX2J1Ziwgc3JjX3NpemUsIHdpZHRoLCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9jb21wb25lbnRzLCBiaXRzX3Blcl9jb21wb25lbnRzLCBjb2xvcl90cmFuc2Zvcm0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljY19idWZfcHRyLCBpY2NfbGVuZ3RoKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gX0pwZWdMb2FkSW5mbyhzcmNfYnVmLCBzcmNfc2l6ZSwgd2lkdGgsIGhlaWdodCwgbnVtX2NvbXBvbmVudHMsIGJpdHNfcGVyX2NvbXBvbmVudHMsIGNvbG9yX3RyYW5zZm9ybSwgaWNjX2J1Zl9wdHIsIGljY19sZW5ndGgpOw0KLX0NCi1GWF9CT09MIENDb2RlY19KcGVnTW9kdWxlOjpFbmNvZGUoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNvdXJjZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfU1RSU0laRSYgZGVzdF9zaXplLCBpbnQgcXVhbGl0eSwgRlhfTFBDQllURSBpY2NfYnVmLCBGWF9EV09SRCBpY2NfbGVuZ3RoKQ0KLXsNCi0gICAgaWYgKG1fcEV4dFByb3ZpZGVyKSB7DQotICAgICAgICByZXR1cm4gbV9wRXh0UHJvdmlkZXItPkVuY29kZShwU291cmNlLCBkZXN0X2J1ZiwgZGVzdF9zaXplLCBxdWFsaXR5LCBpY2NfYnVmLCBpY2NfbGVuZ3RoKTsNCi0gICAgfQ0KLSAgICBpZihwU291cmNlLT5HZXRCUFAoKSA8IDggfHwgcFNvdXJjZS0+R2V0UGFsZXR0ZSgpICE9IE5VTEwpIHsNCi0gICAgICAgIEFTU0VSVChwU291cmNlLT5HZXRCUFAoKSA+PSA4ICYmIHBTb3VyY2UtPkdldFBhbGV0dGUoKSA9PSBOVUxMKTsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBfSnBlZ0VuY29kZShwU291cmNlLCBkZXN0X2J1ZiwgZGVzdF9zaXplLCBxdWFsaXR5LCBpY2NfYnVmLCBpY2NfbGVuZ3RoKTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXN0cnVjdCBGWEpQRUdfQ29udGV4dCB7DQotICAgIGptcF9idWYJCQltX0p1bXBNYXJrOw0KLSAgICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0IG1fSW5mbzsNCi0gICAganBlZ19lcnJvcl9tZ3IJbV9FcnJNZ3I7DQotICAgIGpwZWdfc291cmNlX21ncgltX1NyY01ncjsNCi0gICAgdW5zaWduZWQgaW50CW1fU2tpcFNpemU7DQotICAgIHZvaWQqCQkoKm1fQWxsb2NGdW5jKSh1bnNpZ25lZCBpbnQpOw0KLSAgICB2b2lkCQkoKm1fRnJlZUZ1bmMpKHZvaWQqKTsNCi19Ow0KLWV4dGVybiAiQyIgew0KLSAgICBzdGF0aWMgdm9pZCBfZXJyb3JfZmF0YWwxKGpfY29tbW9uX3B0ciBjaW5mbykNCi0gICAgew0KLSAgICAgICAgbG9uZ2ptcCgoKEZYSlBFR19Db250ZXh0KiljaW5mby0+Y2xpZW50X2RhdGEpLT5tX0p1bXBNYXJrLCAtMSk7DQotICAgIH0NCi19Ow0KLWV4dGVybiAiQyIgew0KLSAgICBzdGF0aWMgdm9pZCBfc3JjX3NraXBfZGF0YTEoc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGNpbmZvLCBsb25nIG51bSkNCi0gICAgew0KLSAgICAgICAgaWYgKGNpbmZvLT5zcmMtPmJ5dGVzX2luX2J1ZmZlciA8IChzaXplX3QpbnVtKSB7DQotICAgICAgICAgICAgKChGWEpQRUdfQ29udGV4dCopY2luZm8tPmNsaWVudF9kYXRhKS0+bV9Ta2lwU2l6ZSA9ICh1bnNpZ25lZCBpbnQpKG51bSAtIGNpbmZvLT5zcmMtPmJ5dGVzX2luX2J1ZmZlcik7DQotICAgICAgICAgICAgY2luZm8tPnNyYy0+Ynl0ZXNfaW5fYnVmZmVyID0gMDsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgY2luZm8tPnNyYy0+bmV4dF9pbnB1dF9ieXRlICs9IG51bTsNCi0gICAgICAgICAgICBjaW5mby0+c3JjLT5ieXRlc19pbl9idWZmZXIgLT0gbnVtOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfTsNCi1zdGF0aWMgdm9pZCoganBlZ19hbGxvY19mdW5jKHVuc2lnbmVkIGludCBzaXplKQ0KLXsNCi0gICAgcmV0dXJuIEZYX0FsbG9jKGNoYXIsIHNpemUpOw0KLX0NCi1zdGF0aWMgdm9pZCBqcGVnX2ZyZWVfZnVuYyh2b2lkKiBwKQ0KLXsNCi0gICAgRlhfRnJlZShwKTsNCi19DQotdm9pZCogQ0NvZGVjX0pwZWdNb2R1bGU6OlN0YXJ0KCkNCi17DQotICAgIGlmIChtX3BFeHRQcm92aWRlcikgew0KLSAgICAgICAgcmV0dXJuIG1fcEV4dFByb3ZpZGVyLT5TdGFydCgpOw0KLSAgICB9DQotICAgIEZYSlBFR19Db250ZXh0KiBwID0gKEZYSlBFR19Db250ZXh0KilGWF9BbGxvYyhGWF9CWVRFLCBzaXplb2YoRlhKUEVHX0NvbnRleHQpKTsNCi0gICAgaWYgKHAgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcC0+bV9BbGxvY0Z1bmMgPSBqcGVnX2FsbG9jX2Z1bmM7DQotICAgIHAtPm1fRnJlZUZ1bmMgPSBqcGVnX2ZyZWVfZnVuYzsNCi0gICAgcC0+bV9FcnJNZ3IuZXJyb3JfZXhpdCA9IF9lcnJvcl9mYXRhbDE7DQotICAgIHAtPm1fRXJyTWdyLmVtaXRfbWVzc2FnZSA9IF9lcnJvcl9kb19ub3RoaW5nMTsNCi0gICAgcC0+bV9FcnJNZ3Iub3V0cHV0X21lc3NhZ2UgPSBfZXJyb3JfZG9fbm90aGluZzsNCi0gICAgcC0+bV9FcnJNZ3IuZm9ybWF0X21lc3NhZ2UgPSBfZXJyb3JfZG9fbm90aGluZzI7DQotICAgIHAtPm1fRXJyTWdyLnJlc2V0X2Vycm9yX21nciA9IF9lcnJvcl9kb19ub3RoaW5nOw0KLSAgICBwLT5tX1NyY01nci5pbml0X3NvdXJjZSA9IF9zcmNfZG9fbm90aGluZzsNCi0gICAgcC0+bV9TcmNNZ3IudGVybV9zb3VyY2UgPSBfc3JjX2RvX25vdGhpbmc7DQotICAgIHAtPm1fU3JjTWdyLnNraXBfaW5wdXRfZGF0YSA9IF9zcmNfc2tpcF9kYXRhMTsNCi0gICAgcC0+bV9TcmNNZ3IuZmlsbF9pbnB1dF9idWZmZXIgPSBfc3JjX2ZpbGxfYnVmZmVyOw0KLSAgICBwLT5tX1NyY01nci5yZXN5bmNfdG9fcmVzdGFydCA9IF9zcmNfcmVzeW5jOw0KLSAgICBwLT5tX0luZm8uY2xpZW50X2RhdGEgPSBwOw0KLSAgICBwLT5tX0luZm8uZXJyID0gJnAtPm1fRXJyTWdyOw0KLSAgICBpZiAoc2V0am1wKHAtPm1fSnVtcE1hcmspID09IC0xKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBqcGVnX2NyZWF0ZV9kZWNvbXByZXNzKCZwLT5tX0luZm8pOw0KLSAgICBwLT5tX0luZm8uc3JjID0gJnAtPm1fU3JjTWdyOw0KLSAgICBwLT5tX1NraXBTaXplID0gMDsNCi0gICAgcmV0dXJuIHA7DQotfQ0KLXZvaWQgQ0NvZGVjX0pwZWdNb2R1bGU6OkZpbmlzaCh2b2lkKiBwQ29udGV4dCkNCi17DQotICAgIGlmIChtX3BFeHRQcm92aWRlcikgew0KLSAgICAgICAgbV9wRXh0UHJvdmlkZXItPkZpbmlzaChwQ29udGV4dCk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhKUEVHX0NvbnRleHQqIHAgPSAoRlhKUEVHX0NvbnRleHQqKXBDb250ZXh0Ow0KLSAgICBqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcygmcC0+bV9JbmZvKTsNCi0gICAgcC0+bV9GcmVlRnVuYyhwKTsNCi19DQotdm9pZCBDQ29kZWNfSnBlZ01vZHVsZTo6SW5wdXQodm9pZCogcENvbnRleHQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplKQ0KLXsNCi0gICAgaWYgKG1fcEV4dFByb3ZpZGVyKSB7DQotICAgICAgICBtX3BFeHRQcm92aWRlci0+SW5wdXQocENvbnRleHQsIHNyY19idWYsIHNyY19zaXplKTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWEpQRUdfQ29udGV4dCogcCA9IChGWEpQRUdfQ29udGV4dCopcENvbnRleHQ7DQotICAgIGlmIChwLT5tX1NraXBTaXplKSB7DQotICAgICAgICBpZiAocC0+bV9Ta2lwU2l6ZSA+IHNyY19zaXplKSB7DQotICAgICAgICAgICAgcC0+bV9TcmNNZ3IuYnl0ZXNfaW5fYnVmZmVyID0gMDsNCi0gICAgICAgICAgICBwLT5tX1NraXBTaXplIC09IHNyY19zaXplOw0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIHNyY19zaXplIC09IHAtPm1fU2tpcFNpemU7DQotICAgICAgICBzcmNfYnVmICs9IHAtPm1fU2tpcFNpemU7DQotICAgICAgICBwLT5tX1NraXBTaXplID0gMDsNCi0gICAgfQ0KLSAgICBwLT5tX1NyY01nci5uZXh0X2lucHV0X2J5dGUgPSBzcmNfYnVmOw0KLSAgICBwLT5tX1NyY01nci5ieXRlc19pbl9idWZmZXIgPSBzcmNfc2l6ZTsNCi19DQotaW50IENDb2RlY19KcGVnTW9kdWxlOjpSZWFkSGVhZGVyKHZvaWQqIHBDb250ZXh0LCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCwgaW50KiBuQ29tcHMpDQotew0KLSAgICBpZiAobV9wRXh0UHJvdmlkZXIpIHsNCi0gICAgICAgIHJldHVybiBtX3BFeHRQcm92aWRlci0+UmVhZEhlYWRlcihwQ29udGV4dCwgd2lkdGgsIGhlaWdodCwgbkNvbXBzKTsNCi0gICAgfQ0KLSAgICBGWEpQRUdfQ29udGV4dCogcCA9IChGWEpQRUdfQ29udGV4dCopcENvbnRleHQ7DQotICAgIGlmIChzZXRqbXAocC0+bV9KdW1wTWFyaykgPT0gLTEpIHsNCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotICAgIGludCByZXQgPSBqcGVnX3JlYWRfaGVhZGVyKCZwLT5tX0luZm8sIHRydWUpOw0KLSAgICBpZiAocmV0ID09IEpQRUdfU1VTUEVOREVEKSB7DQotICAgICAgICByZXR1cm4gMjsNCi0gICAgfQ0KLSAgICBpZiAocmV0ICE9IEpQRUdfSEVBREVSX09LKSB7DQotICAgICAgICByZXR1cm4gMTsNCi0gICAgfQ0KLSAgICAqd2lkdGggPSBwLT5tX0luZm8uaW1hZ2Vfd2lkdGg7DQotICAgICpoZWlnaHQgPSBwLT5tX0luZm8uaW1hZ2VfaGVpZ2h0Ow0KLSAgICAqbkNvbXBzID0gcC0+bV9JbmZvLm51bV9jb21wb25lbnRzOw0KLSAgICByZXR1cm4gMDsNCi19DQotRlhfQk9PTCBDQ29kZWNfSnBlZ01vZHVsZTo6U3RhcnRTY2FubGluZSh2b2lkKiBwQ29udGV4dCwgaW50IGRvd25fc2NhbGUpDQotew0KLSAgICBpZiAobV9wRXh0UHJvdmlkZXIpIHsNCi0gICAgICAgIHJldHVybiBtX3BFeHRQcm92aWRlci0+U3RhcnRTY2FubGluZShwQ29udGV4dCwgZG93bl9zY2FsZSk7DQotICAgIH0NCi0gICAgRlhKUEVHX0NvbnRleHQqIHAgPSAoRlhKUEVHX0NvbnRleHQqKXBDb250ZXh0Ow0KLSAgICBpZiAoc2V0am1wKHAtPm1fSnVtcE1hcmspID09IC0xKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgcC0+bV9JbmZvLnNjYWxlX2Rlbm9tID0gZG93bl9zY2FsZTsNCi0gICAgcmV0dXJuIGpwZWdfc3RhcnRfZGVjb21wcmVzcygmcC0+bV9JbmZvKTsNCi19DQotRlhfQk9PTCBDQ29kZWNfSnBlZ01vZHVsZTo6UmVhZFNjYW5saW5lKHZvaWQqIHBDb250ZXh0LCB1bnNpZ25lZCBjaGFyKiBkZXN0X2J1ZikNCi17DQotICAgIGlmIChtX3BFeHRQcm92aWRlcikgew0KLSAgICAgICAgcmV0dXJuIG1fcEV4dFByb3ZpZGVyLT5SZWFkU2NhbmxpbmUocENvbnRleHQsIGRlc3RfYnVmKTsNCi0gICAgfQ0KLSAgICBGWEpQRUdfQ29udGV4dCogcCA9IChGWEpQRUdfQ29udGV4dCopcENvbnRleHQ7DQotICAgIGlmIChzZXRqbXAocC0+bV9KdW1wTWFyaykgPT0gLTEpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpbnQgbmxpbmVzID0ganBlZ19yZWFkX3NjYW5saW5lcygmcC0+bV9JbmZvLCAmZGVzdF9idWYsIDEpOw0KLSAgICByZXR1cm4gbmxpbmVzID09IDE7DQotfQ0KLUZYX0RXT1JEIENDb2RlY19KcGVnTW9kdWxlOjpHZXRBdmFpbElucHV0KHZvaWQqIHBDb250ZXh0LCBGWF9MUEJZVEUqIGF2YWlsX2J1Zl9wdHIpDQotew0KLSAgICBpZiAobV9wRXh0UHJvdmlkZXIpIHsNCi0gICAgICAgIHJldHVybiBtX3BFeHRQcm92aWRlci0+R2V0QXZhaWxJbnB1dChwQ29udGV4dCwgYXZhaWxfYnVmX3B0cik7DQotICAgIH0NCi0gICAgaWYoYXZhaWxfYnVmX3B0ciAhPSBOVUxMKSB7DQotICAgICAgICAqYXZhaWxfYnVmX3B0ciA9IE5VTEw7DQotICAgICAgICBpZigoKEZYSlBFR19Db250ZXh0KilwQ29udGV4dCktPm1fU3JjTWdyLmJ5dGVzX2luX2J1ZmZlciA+IDApIHsNCi0gICAgICAgICAgICAqYXZhaWxfYnVmX3B0ciA9IChGWF9MUEJZVEUpKChGWEpQRUdfQ29udGV4dCopcENvbnRleHQpLT5tX1NyY01nci5uZXh0X2lucHV0X2J5dGU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIChGWF9EV09SRCkoKEZYSlBFR19Db250ZXh0KilwQ29udGV4dCktPm1fU3JjTWdyLmJ5dGVzX2luX2J1ZmZlcjsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjb2RlYy9meF9jb2RlYy5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9kaWIuaCIKKyNpbmNsdWRlICJjb2RlY19pbnQuaCIKK2V4dGVybiAiQyIgeworICAgIHN0YXRpYyB2b2lkIF9KcGVnU2NhblNPSShjb25zdCBGWF9CWVRFKiYgc3JjX2J1ZiwgRlhfRFdPUkQmIHNyY19zaXplKQorICAgIHsKKyAgICAgICAgaWYgKHNyY19zaXplID09IDApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBGWF9EV09SRCBvZmZzZXQgPSAwOworICAgICAgICB3aGlsZSAob2Zmc2V0IDwgc3JjX3NpemUgLSAxKSB7CisgICAgICAgICAgICBpZiAoc3JjX2J1ZltvZmZzZXRdID09IDB4ZmYgJiYgc3JjX2J1ZltvZmZzZXQgKyAxXSA9PSAweGQ4KSB7CisgICAgICAgICAgICAgICAgc3JjX2J1ZiArPSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgc3JjX3NpemUgLT0gb2Zmc2V0OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9mZnNldCArKzsKKyAgICAgICAgfQorICAgIH0KK307CitleHRlcm4gIkMiIHsKKyN1bmRlZiBGQVIKKyNpbmNsdWRlICIuLi8uLi9meF9qcGVnbGliLmgiCit9CitleHRlcm4gIkMiIHsKKyAgICBzdGF0aWMgdm9pZCBfc3JjX2RvX25vdGhpbmcoc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGNpbmZvKSB7fQorfTsKK2V4dGVybiAiQyIgeworICAgIHN0YXRpYyB2b2lkIF9lcnJvcl9mYXRhbChqX2NvbW1vbl9wdHIgY2luZm8pCisgICAgeworICAgICAgICBsb25nam1wKCooam1wX2J1ZiopY2luZm8tPmNsaWVudF9kYXRhLCAtMSk7CisgICAgfQorfTsKK2V4dGVybiAiQyIgeworICAgIHN0YXRpYyB2b2lkIF9zcmNfc2tpcF9kYXRhKHN0cnVjdCBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBjaW5mbywgbG9uZyBudW0pCisgICAgeworICAgICAgICBpZiAobnVtID4gKGxvbmcpY2luZm8tPnNyYy0+Ynl0ZXNfaW5fYnVmZmVyKSB7CisgICAgICAgICAgICBfZXJyb3JfZmF0YWwoKGpfY29tbW9uX3B0ciljaW5mbyk7CisgICAgICAgIH0KKyAgICAgICAgY2luZm8tPnNyYy0+bmV4dF9pbnB1dF9ieXRlICs9IG51bTsKKyAgICAgICAgY2luZm8tPnNyYy0+Ynl0ZXNfaW5fYnVmZmVyIC09IG51bTsKKyAgICB9Cit9OworZXh0ZXJuICJDIiB7CisgICAgc3RhdGljIGJvb2xlYW4gX3NyY19maWxsX2J1ZmZlcihqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfTsKK2V4dGVybiAiQyIgeworICAgIHN0YXRpYyBib29sZWFuIF9zcmNfcmVzeW5jKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGludCBkZXNpcmVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfTsKK2V4dGVybiAiQyIgeworICAgIHN0YXRpYyB2b2lkIF9lcnJvcl9kb19ub3RoaW5nKGpfY29tbW9uX3B0ciBjaW5mbykge30KK307CitleHRlcm4gIkMiIHsKKyAgICBzdGF0aWMgdm9pZCBfZXJyb3JfZG9fbm90aGluZzEoal9jb21tb25fcHRyIGNpbmZvLCBpbnQpIHt9Cit9OworZXh0ZXJuICJDIiB7CisgICAgc3RhdGljIHZvaWQgX2Vycm9yX2RvX25vdGhpbmcyKGpfY29tbW9uX3B0ciBjaW5mbywgY2hhciopIHt9Cit9OworI2RlZmluZSBKUEVHX01BUktFUl9FWElGCQkoSlBFR19BUFAwICsgMSkKKyNkZWZpbmUJSlBFR19NQVJLRVJfSUNDCQkJKEpQRUdfQVBQMCArIDIpCisjZGVmaW5lCUpQRUdfTUFSS0VSX0FVVEhPUlRJTUUJKEpQRUdfQVBQMCArIDMpCisjZGVmaW5lCUpQRUdfTUFSS0VSX01BWFNJWkUJMHhGRkZGCisjZGVmaW5lCUpQRUdfT1ZFUkhFQURfTEVOCTE0CitzdGF0aWMgRlhfQk9PTCBfSnBlZ0lzSWNjTWFya2VyKGpwZWdfc2F2ZWRfbWFya2VyX3B0ciBtYXJrZXIpCit7CisgICAgaWYgKG1hcmtlci0+bWFya2VyID09IEpQRUdfTUFSS0VSX0lDQyAmJgorICAgICAgICAgICAgbWFya2VyLT5kYXRhX2xlbmd0aCA+PSBKUEVHX09WRVJIRUFEX0xFTiAmJgorICAgICAgICAgICAgKEZYU1lTX21lbWNtcDMyKG1hcmtlci0+ZGF0YSwgIlx4NDlceDQzXHg0M1x4NWZceDUwXHg1Mlx4NGZceDQ2XHg0OVx4NGNceDQ1XHgwMCIsIDEyKSA9PSAwKSkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorc3RhdGljCUZYX0JPT0wgX0pwZWdMb2FkSWNjUHJvZmlsZShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBGWF9MUEJZVEUqIGljY19idWZfcHRyLCBGWF9EV09SRCogaWNjX2xlbmd0aCkKK3sKKyAgICBpZihpY2NfYnVmX3B0ciA9PSBOVUxMIHx8IGljY19sZW5ndGggPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgICppY2NfYnVmX3B0ciA9IE5VTEw7CisgICAgKmljY19sZW5ndGggPSAwOworICAgIEZYX0xQQllURSBpY2NfZGF0YV9wdHIgPSBOVUxMOworICAgIEZYX0RXT1JEIGljY19kYXRhX2xlbiA9IDA7CisgICAgRlhfQllURSBjb3VudF9pY2NfbWFya2VyID0gMDsKKyAgICBGWF9CWVRFIG51bV9pY2NfbWFya2VyID0gMDsKKyAgICBqcGVnX3NhdmVkX21hcmtlcl9wdHIgbWFya2VyX2xpc3RbMjU2XSA9IHtOVUxMfTsKKyAgICBmb3IgKGpwZWdfc2F2ZWRfbWFya2VyX3B0ciBjdXJfbWFya2VyID0gY2luZm8tPm1hcmtlcl9saXN0OworICAgICAgICAgICAgY3VyX21hcmtlciAhPSBOVUxMOworICAgICAgICAgICAgY3VyX21hcmtlciA9IGN1cl9tYXJrZXItPm5leHQpIHsKKyAgICAgICAgaWYoX0pwZWdJc0ljY01hcmtlcihjdXJfbWFya2VyKSkgeworICAgICAgICAgICAgaWYoY291bnRfaWNjX21hcmtlciA9PSAwKSB7CisgICAgICAgICAgICAgICAgbnVtX2ljY19tYXJrZXIgPSBjdXJfbWFya2VyLT5kYXRhWzEzXTsKKyAgICAgICAgICAgIH0gZWxzZSBpZihudW1faWNjX21hcmtlciAhPSBjdXJfbWFya2VyLT5kYXRhWzEzXSkgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBzbiA9IGN1cl9tYXJrZXItPmRhdGFbMTJdIC0gMTsKKyAgICAgICAgICAgIGlmKHNuIDwgMCB8fCBzbiA+PSBudW1faWNjX21hcmtlcikgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKG1hcmtlcl9saXN0W3NuXSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgbWFya2VyX2xpc3Rbc25dID0gY3VyX21hcmtlcjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY291bnRfaWNjX21hcmtlciArKzsKKyAgICAgICAgICAgIGljY19kYXRhX2xlbiArPQkoY3VyX21hcmtlci0+ZGF0YV9sZW5ndGggLSBKUEVHX09WRVJIRUFEX0xFTik7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYoY291bnRfaWNjX21hcmtlciAhPSBudW1faWNjX21hcmtlcikgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmKG51bV9pY2NfbWFya2VyID09IDApIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGljY19kYXRhX3B0ciA9IEZYX0FsbG9jKEZYX0JZVEUsIGljY19kYXRhX2xlbik7CisgICAgaWYoaWNjX2J1Zl9wdHIgPT0gTlVMTCkJeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgICppY2NfYnVmX3B0ciA9IGljY19kYXRhX3B0cjsKKyAgICAqaWNjX2xlbmd0aCA9IGljY19kYXRhX2xlbjsKKyAgICBmb3IgKGludCBpZHggPSAwOyBpZHggPCBudW1faWNjX21hcmtlcjsgaWR4KyspIHsKKyAgICAgICAgaWNjX2RhdGFfbGVuID0gbWFya2VyX2xpc3RbaWR4XS0+ZGF0YV9sZW5ndGggLSBKUEVHX09WRVJIRUFEX0xFTjsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIoaWNjX2RhdGFfcHRyLCBtYXJrZXJfbGlzdFtpZHhdLT5kYXRhICsgSlBFR19PVkVSSEVBRF9MRU4sIGljY19kYXRhX2xlbik7CisgICAgICAgIGljY19kYXRhX3B0ciArPSBpY2NfZGF0YV9sZW47CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorc3RhdGljCUZYX0JPT0wgX0pwZWdFbWJlZEljY1Byb2ZpbGUoal9jb21wcmVzc19wdHIgY2luZm8sIEZYX0xQQ0JZVEUgaWNjX2J1Zl9wdHIsIEZYX0RXT1JEIGljY19sZW5ndGgpCit7CisgICAgaWYoaWNjX2J1Zl9wdHIgPT0gTlVMTCB8fCBpY2NfbGVuZ3RoID09IDApIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWF9EV09SRCBpY2Nfc2VnbWVudF9zaXplID0gKEpQRUdfTUFSS0VSX01BWFNJWkUgLSAyIC0gSlBFR19PVkVSSEVBRF9MRU4pOworICAgIEZYX0RXT1JEIGljY19zZWdtZW50X251bSA9IChpY2NfbGVuZ3RoIC8gaWNjX3NlZ21lbnRfc2l6ZSkgKyAxOworICAgIGlmIChpY2Nfc2VnbWVudF9udW0gPiAyNTUpCXsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWF9EV09SRCBpY2NfZGF0YV9sZW5ndGggPSBKUEVHX09WRVJIRUFEX0xFTiArIChpY2Nfc2VnbWVudF9udW0gPiAxID8gaWNjX3NlZ21lbnRfc2l6ZSA6IGljY19sZW5ndGgpOworICAgIEZYX0xQQllURSBpY2NfZGF0YSA9IEZYX0FsbG9jKEZYX0JZVEUsIGljY19kYXRhX2xlbmd0aCk7CisgICAgaWYgKGljY19kYXRhID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWFNZU19tZW1jcHkzMihpY2NfZGF0YSwgIlx4NDlceDQzXHg0M1x4NWZceDUwXHg1Mlx4NGZceDQ2XHg0OVx4NGNceDQ1XHgwMCIsIDEyKTsKKyAgICBpY2NfZGF0YVsxM10gPSAoRlhfQllURSlpY2Nfc2VnbWVudF9udW07CisgICAgZm9yIChGWF9CWVRFIGkgPSAwOyBpIDwgKGljY19zZWdtZW50X251bSAtIDEpOyBpKyspIHsKKyAgICAgICAgaWNjX2RhdGFbMTJdID0gaSArIDE7CisgICAgICAgIEZYU1lTX21lbWNweTMyKGljY19kYXRhICsgSlBFR19PVkVSSEVBRF9MRU4sIGljY19idWZfcHRyICsgaSAqIGljY19zZWdtZW50X3NpemUsIGljY19zZWdtZW50X3NpemUpOworICAgICAgICBqcGVnX3dyaXRlX21hcmtlcihjaW5mbywgSlBFR19NQVJLRVJfSUNDLCBpY2NfZGF0YSwgaWNjX2RhdGFfbGVuZ3RoKTsKKyAgICB9CisgICAgaWNjX2RhdGFbMTJdID0gKEZYX0JZVEUpaWNjX3NlZ21lbnRfbnVtOworICAgIEZYX0RXT1JEIGljY19zaXplID0gKGljY19zZWdtZW50X251bSAtIDEpICogaWNjX3NlZ21lbnRfc2l6ZTsKKyAgICBGWFNZU19tZW1jcHkzMihpY2NfZGF0YSArIEpQRUdfT1ZFUkhFQURfTEVOLCBpY2NfYnVmX3B0ciArIGljY19zaXplLCBpY2NfbGVuZ3RoIC0gaWNjX3NpemUpOworICAgIGpwZWdfd3JpdGVfbWFya2VyKGNpbmZvLCBKUEVHX01BUktFUl9JQ0MsIGljY19kYXRhLCBKUEVHX09WRVJIRUFEX0xFTiArIGljY19sZW5ndGggLSBpY2Nfc2l6ZSk7CisgICAgRlhfRnJlZShpY2NfZGF0YSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CitleHRlcm4gIkMiIHsKKyAgICBzdGF0aWMgdm9pZCBfZGVzdF9kb19ub3RoaW5nKGpfY29tcHJlc3NfcHRyIGNpbmZvKSB7fQorfTsKK2V4dGVybiAiQyIgeworICAgIHN0YXRpYyBib29sZWFuIF9kZXN0X2VtcHR5KGpfY29tcHJlc3NfcHRyIGNpbmZvKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KK307CisjZGVmaW5lCUpQRUdfQkxPQ0tfU0laRQkxMDQ4NTc2CitzdGF0aWMgdm9pZCBfSnBlZ0VuY29kZShjb25zdCBDRlhfRElCU291cmNlKiBwU291cmNlLCBGWF9MUEJZVEUmIGRlc3RfYnVmLCBGWF9TVFJTSVpFJiBkZXN0X3NpemUsIGludCBxdWFsaXR5LCBGWF9MUENCWVRFIGljY19idWYsIEZYX0RXT1JEIGljY19sZW5ndGgpCit7CisgICAgc3RydWN0IGpwZWdfY29tcHJlc3Nfc3RydWN0IGNpbmZvOworICAgIHN0cnVjdCBqcGVnX2Vycm9yX21nciBqZXJyOworICAgIGplcnIuZXJyb3JfZXhpdCA9IF9lcnJvcl9kb19ub3RoaW5nOworICAgIGplcnIuZW1pdF9tZXNzYWdlID0gX2Vycm9yX2RvX25vdGhpbmcxOworICAgIGplcnIub3V0cHV0X21lc3NhZ2UgPSBfZXJyb3JfZG9fbm90aGluZzsKKyAgICBqZXJyLmZvcm1hdF9tZXNzYWdlID0gX2Vycm9yX2RvX25vdGhpbmcyOworICAgIGplcnIucmVzZXRfZXJyb3JfbWdyID0gX2Vycm9yX2RvX25vdGhpbmc7CisgICAgY2luZm8uZXJyID0gJmplcnI7CisgICAganBlZ19jcmVhdGVfY29tcHJlc3MoJmNpbmZvKTsKKyAgICBpbnQgQnBwID0gcFNvdXJjZS0+R2V0QlBQKCkgLyA4OworICAgIGludCBuQ29tcG9uZW50cyA9IEJwcCA+PSAzID8gKHBTb3VyY2UtPklzQ215a0ltYWdlKCkgPyA0IDogMykgOiAxOworICAgIGludCBwaXRjaCA9IHBTb3VyY2UtPkdldFBpdGNoKCk7CisgICAgaW50IHdpZHRoID0gcFNvdXJjZS0+R2V0V2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gcFNvdXJjZS0+R2V0SGVpZ2h0KCk7CisgICAgRlhfRFdPUkQgZGVzdF9idWZfbGVuZ3RoID0gd2lkdGggKiBoZWlnaHQgKiBuQ29tcG9uZW50cyArIDEwMjQgKyAoaWNjX2xlbmd0aCA/IChpY2NfbGVuZ3RoICsgMjU1ICogMTgpIDogMCk7CisgICAgZGVzdF9idWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBkZXN0X2J1Zl9sZW5ndGgpOworICAgIHdoaWxlIChkZXN0X2J1ZiA9PSBOVUxMKSB7CisgICAgICAgIGRlc3RfYnVmX2xlbmd0aCA+Pj0gMTsKKyAgICAgICAgZGVzdF9idWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBkZXN0X2J1Zl9sZW5ndGgpOworICAgIH0KKyAgICBGWFNZU19tZW1zZXQzMihkZXN0X2J1ZiwgMCwgZGVzdF9idWZfbGVuZ3RoKTsKKyAgICBzdHJ1Y3QganBlZ19kZXN0aW5hdGlvbl9tZ3IgZGVzdDsKKyAgICBkZXN0LmluaXRfZGVzdGluYXRpb24gPSBfZGVzdF9kb19ub3RoaW5nOworICAgIGRlc3QudGVybV9kZXN0aW5hdGlvbiA9IF9kZXN0X2RvX25vdGhpbmc7CisgICAgZGVzdC5lbXB0eV9vdXRwdXRfYnVmZmVyID0gX2Rlc3RfZW1wdHk7CisgICAgZGVzdC5uZXh0X291dHB1dF9ieXRlID0gZGVzdF9idWY7CisgICAgZGVzdC5mcmVlX2luX2J1ZmZlciA9IGRlc3RfYnVmX2xlbmd0aDsKKyAgICBjaW5mby5kZXN0ID0gJmRlc3Q7CisgICAgY2luZm8uaW1hZ2Vfd2lkdGggPSB3aWR0aDsKKyAgICBjaW5mby5pbWFnZV9oZWlnaHQgPSBoZWlnaHQ7CisgICAgY2luZm8uaW5wdXRfY29tcG9uZW50cyA9IG5Db21wb25lbnRzOworICAgIGlmIChuQ29tcG9uZW50cyA9PSAxKSB7CisgICAgICAgIGNpbmZvLmluX2NvbG9yX3NwYWNlID0gSkNTX0dSQVlTQ0FMRTsKKyAgICB9IGVsc2UgaWYgKG5Db21wb25lbnRzID09IDMpIHsKKyAgICAgICAgY2luZm8uaW5fY29sb3Jfc3BhY2UgPSBKQ1NfUkdCOworICAgIH0gZWxzZSB7CisgICAgICAgIGNpbmZvLmluX2NvbG9yX3NwYWNlID0gSkNTX0NNWUs7CisgICAgfQorICAgIEZYX0xQQllURSBsaW5lX2J1ZiA9IE5VTEw7CisgICAgaWYgKG5Db21wb25lbnRzID4gMSkgeworICAgICAgICBsaW5lX2J1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIHdpZHRoICogbkNvbXBvbmVudHMpOworICAgICAgICBpZiAobGluZV9idWYgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIGpwZWdfc2V0X2RlZmF1bHRzKCZjaW5mbyk7CisgICAgaWYocXVhbGl0eSAhPSA3NSkgeworICAgICAgICBqcGVnX3NldF9xdWFsaXR5KCZjaW5mbywgcXVhbGl0eSwgVFJVRSk7CisgICAgfQorICAgIGpwZWdfc3RhcnRfY29tcHJlc3MoJmNpbmZvLCBUUlVFKTsKKyAgICBfSnBlZ0VtYmVkSWNjUHJvZmlsZSgmY2luZm8sIGljY19idWYsIGljY19sZW5ndGgpOworICAgIEpTQU1QUk9XIHJvd19wb2ludGVyWzFdOworICAgIEpESU1FTlNJT04gcm93OworICAgIHdoaWxlIChjaW5mby5uZXh0X3NjYW5saW5lIDwgY2luZm8uaW1hZ2VfaGVpZ2h0KSB7CisgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBwU291cmNlLT5HZXRTY2FubGluZShjaW5mby5uZXh0X3NjYW5saW5lKTsKKyAgICAgICAgaWYgKG5Db21wb25lbnRzID4gMSkgeworICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IGxpbmVfYnVmOworICAgICAgICAgICAgaWYgKG5Db21wb25lbnRzID09IDMpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdpZHRoOyBpICsrKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IHNyY19zY2FuWzJdOworICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBzcmNfc2NhblsxXTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gc3JjX3NjYW5bMF07CisgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSBCcHA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBpdGNoOyBpICsrKSB7CisgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IH4qc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByb3dfcG9pbnRlclswXSA9IGxpbmVfYnVmOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcm93X3BvaW50ZXJbMF0gPSAoRlhfTFBCWVRFKXNyY19zY2FuOworICAgICAgICB9CisgICAgICAgIHJvdyA9IGNpbmZvLm5leHRfc2NhbmxpbmU7CisgICAgICAgIGpwZWdfd3JpdGVfc2NhbmxpbmVzKCZjaW5mbywgcm93X3BvaW50ZXIsIDEpOworICAgICAgICBpZiAoY2luZm8ubmV4dF9zY2FubGluZSA9PSByb3cpIHsKKyAgICAgICAgICAgIGRlc3RfYnVmID0gRlhfUmVhbGxvYyhGWF9CWVRFLCBkZXN0X2J1ZiwgZGVzdF9idWZfbGVuZ3RoICsgSlBFR19CTE9DS19TSVpFKTsKKyAgICAgICAgICAgIGlmIChkZXN0X2J1ZiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgRlhfRnJlZShsaW5lX2J1Zik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVzdC5uZXh0X291dHB1dF9ieXRlID0gZGVzdF9idWYgKyBkZXN0X2J1Zl9sZW5ndGggLSBkZXN0LmZyZWVfaW5fYnVmZmVyOworICAgICAgICAgICAgZGVzdF9idWZfbGVuZ3RoICs9IEpQRUdfQkxPQ0tfU0laRTsKKyAgICAgICAgICAgIGRlc3QuZnJlZV9pbl9idWZmZXIgKz0gSlBFR19CTE9DS19TSVpFOworICAgICAgICB9CisgICAgfQorICAgIGpwZWdfZmluaXNoX2NvbXByZXNzKCZjaW5mbyk7CisgICAganBlZ19kZXN0cm95X2NvbXByZXNzKCZjaW5mbyk7CisgICAgaWYgKGxpbmVfYnVmKSB7CisgICAgICAgIEZYX0ZyZWUobGluZV9idWYpOworICAgIH0KKyAgICBkZXN0X3NpemUgPSBkZXN0X2J1Zl9sZW5ndGggLSAoRlhfU1RSU0laRSlkZXN0LmZyZWVfaW5fYnVmZmVyOworfQorc3RhdGljIEZYX0JPT0wgX0pwZWdMb2FkSW5mbyhGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBpbnQmIHdpZHRoLCBpbnQmIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBudW1fY29tcG9uZW50cywgaW50JiBiaXRzX3Blcl9jb21wb25lbnRzLCBGWF9CT09MJiBjb2xvcl90cmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSogaWNjX2J1Zl9wdHIsIEZYX0RXT1JEKiBpY2NfbGVuZ3RoKQoreworICAgIF9KcGVnU2NhblNPSShzcmNfYnVmLCBzcmNfc2l6ZSk7CisgICAgc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QgY2luZm87CisgICAgc3RydWN0IGpwZWdfZXJyb3JfbWdyIGplcnI7CisgICAgamVyci5lcnJvcl9leGl0ID0gX2Vycm9yX2ZhdGFsOworICAgIGplcnIuZW1pdF9tZXNzYWdlID0gX2Vycm9yX2RvX25vdGhpbmcxOworICAgIGplcnIub3V0cHV0X21lc3NhZ2UgPSBfZXJyb3JfZG9fbm90aGluZzsKKyAgICBqZXJyLmZvcm1hdF9tZXNzYWdlID0gX2Vycm9yX2RvX25vdGhpbmcyOworICAgIGplcnIucmVzZXRfZXJyb3JfbWdyID0gX2Vycm9yX2RvX25vdGhpbmc7CisgICAgY2luZm8uZXJyID0gJmplcnI7CisgICAgam1wX2J1ZiBtYXJrOworICAgIGNpbmZvLmNsaWVudF9kYXRhID0gJm1hcms7CisgICAgaWYgKHNldGptcChtYXJrKSA9PSAtMSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGpwZWdfY3JlYXRlX2RlY29tcHJlc3MoJmNpbmZvKTsKKyAgICBzdHJ1Y3QganBlZ19zb3VyY2VfbWdyIHNyYzsKKyAgICBzcmMuaW5pdF9zb3VyY2UgPSBfc3JjX2RvX25vdGhpbmc7CisgICAgc3JjLnRlcm1fc291cmNlID0gX3NyY19kb19ub3RoaW5nOworICAgIHNyYy5za2lwX2lucHV0X2RhdGEgPSBfc3JjX3NraXBfZGF0YTsKKyAgICBzcmMuZmlsbF9pbnB1dF9idWZmZXIgPSBfc3JjX2ZpbGxfYnVmZmVyOworICAgIHNyYy5yZXN5bmNfdG9fcmVzdGFydCA9IF9zcmNfcmVzeW5jOworICAgIHNyYy5ieXRlc19pbl9idWZmZXIgPSBzcmNfc2l6ZTsKKyAgICBzcmMubmV4dF9pbnB1dF9ieXRlID0gc3JjX2J1ZjsKKyAgICBjaW5mby5zcmMgPSAmc3JjOworICAgIGlmIChzZXRqbXAobWFyaykgPT0gLTEpIHsKKyAgICAgICAganBlZ19kZXN0cm95X2RlY29tcHJlc3MoJmNpbmZvKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZihpY2NfYnVmX3B0ciAmJiBpY2NfbGVuZ3RoKSB7CisgICAgICAgIGpwZWdfc2F2ZV9tYXJrZXJzKCZjaW5mbywgSlBFR19NQVJLRVJfSUNDLCBKUEVHX01BUktFUl9NQVhTSVpFKTsKKyAgICB9CisgICAgaW50IHJldCA9IGpwZWdfcmVhZF9oZWFkZXIoJmNpbmZvLCBUUlVFKTsKKyAgICBpZiAocmV0ICE9IEpQRUdfSEVBREVSX09LKSB7CisgICAgICAgIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzKCZjaW5mbyk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgd2lkdGggPSBjaW5mby5pbWFnZV93aWR0aDsKKyAgICBoZWlnaHQgPSBjaW5mby5pbWFnZV9oZWlnaHQ7CisgICAgbnVtX2NvbXBvbmVudHMgPSBjaW5mby5udW1fY29tcG9uZW50czsKKyAgICBjb2xvcl90cmFuc2Zvcm0gPSBjaW5mby5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19ZQ2JDciB8fCBjaW5mby5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19ZQ0NLOworICAgIGJpdHNfcGVyX2NvbXBvbmVudHMgPSBjaW5mby5kYXRhX3ByZWNpc2lvbjsKKyAgICBpZihpY2NfYnVmX3B0ciAhPSBOVUxMKSB7CisgICAgICAgICppY2NfYnVmX3B0ciA9IE5VTEw7CisgICAgfQorICAgIGlmKGljY19sZW5ndGggIT0gTlVMTCkgeworICAgICAgICAqaWNjX2xlbmd0aCA9IDA7CisgICAgfQorICAgIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzKCZjaW5mbyk7CisgICAgcmV0dXJuIFRSVUU7Cit9CitjbGFzcyBDQ29kZWNfSnBlZ0RlY29kZXIgOiBwdWJsaWMgQ0NvZGVjX1NjYW5saW5lRGVjb2RlcgoreworcHVibGljOgorICAgIENDb2RlY19KcGVnRGVjb2RlcigpOworICAgIH5DQ29kZWNfSnBlZ0RlY29kZXIoKTsKKyAgICBGWF9CT09MCQkJCUNyZWF0ZShGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBuQ29tcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBDb2xvclRyYW5zZm9ybSwgSUZYX0pwZWdQcm92aWRlciogcEpQKTsKKyAgICB2aXJ0dWFsIHZvaWQJCURlc3Ryb3koKQorICAgIHsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZAkJdl9Eb3duU2NhbGUoaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCk7CisgICAgdmlydHVhbCBGWF9CT09MCQl2X1Jld2luZCgpOworICAgIHZpcnR1YWwgRlhfTFBCWVRFCXZfR2V0TmV4dExpbmUoKTsKKyAgICB2aXJ0dWFsIEZYX0RXT1JECUdldFNyY09mZnNldCgpOworICAgIGptcF9idWYJCW1fSm1wQnVmOworICAgIHN0cnVjdCBqcGVnX2RlY29tcHJlc3Nfc3RydWN0IGNpbmZvOworICAgIHN0cnVjdCBqcGVnX2Vycm9yX21nciBqZXJyOworICAgIHN0cnVjdCBqcGVnX3NvdXJjZV9tZ3Igc3JjOworICAgIEZYX0xQQ0JZVEUJbV9TcmNCdWY7CisgICAgRlhfRFdPUkQJbV9TcmNTaXplOworICAgIEZYX0xQQllURQltX3BTY2FubGluZUJ1ZjsKKyAgICBGWF9CT09MCQlJbml0RGVjb2RlKCk7CisgICAgRlhfQk9PTAkJbV9iSW5pdGVkLCBtX2JTdGFydGVkLCBtX2JKcGVnVHJhbnNmb3JtOworcHJvdGVjdGVkOgorICAgIElGWF9KcGVnUHJvdmlkZXIqCW1fcEV4dFByb3ZpZGVyOworICAgIHZvaWQqCQkJCW1fcEV4dENvbnRleHQ7CisgICAgRlhfRFdPUkQJCQltX25EZWZhdWx0U2NhbGVEZW5vbTsKK307CitDQ29kZWNfSnBlZ0RlY29kZXI6OkNDb2RlY19KcGVnRGVjb2RlcigpCit7CisgICAgbV9wU2NhbmxpbmVCdWYgPSBOVUxMOworICAgIG1fRG93blNjYWxlID0gMTsKKyAgICBtX2JTdGFydGVkID0gRkFMU0U7CisgICAgbV9iSW5pdGVkID0gRkFMU0U7CisgICAgbV9wRXh0UHJvdmlkZXIgPSBOVUxMOworICAgIG1fcEV4dENvbnRleHQgPSBOVUxMOworICAgIEZYU1lTX21lbXNldDMyKCZjaW5mbywgMCwgc2l6ZW9mKGNpbmZvKSk7CisgICAgRlhTWVNfbWVtc2V0MzIoJmplcnIsIDAsIHNpemVvZihqZXJyKSk7CisgICAgRlhTWVNfbWVtc2V0MzIoJnNyYywgMCwgc2l6ZW9mKHNyYykpOworICAgIG1fbkRlZmF1bHRTY2FsZURlbm9tID0gMTsKK30KK0NDb2RlY19KcGVnRGVjb2Rlcjo6fkNDb2RlY19KcGVnRGVjb2RlcigpCit7CisgICAgaWYgKG1fcEV4dFByb3ZpZGVyKSB7CisgICAgICAgIG1fcEV4dFByb3ZpZGVyLT5EZXN0cm95RGVjb2RlcihtX3BFeHRDb250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9wU2NhbmxpbmVCdWYpIHsKKyAgICAgICAgRlhfRnJlZShtX3BTY2FubGluZUJ1Zik7CisgICAgfQorICAgIGlmIChtX2JJbml0ZWQpIHsKKyAgICAgICAganBlZ19kZXN0cm95X2RlY29tcHJlc3MoJmNpbmZvKTsKKyAgICB9Cit9CitGWF9CT09MIENDb2RlY19KcGVnRGVjb2Rlcjo6SW5pdERlY29kZSgpCit7CisgICAgY2luZm8uZXJyID0gJmplcnI7CisgICAgY2luZm8uY2xpZW50X2RhdGEgPSAmbV9KbXBCdWY7CisgICAgaWYgKHNldGptcChtX0ptcEJ1ZikgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBqcGVnX2NyZWF0ZV9kZWNvbXByZXNzKCZjaW5mbyk7CisgICAgbV9iSW5pdGVkID0gVFJVRTsKKyAgICBjaW5mby5zcmMgPSAmc3JjOworICAgIHNyYy5ieXRlc19pbl9idWZmZXIgPSBtX1NyY1NpemU7CisgICAgc3JjLm5leHRfaW5wdXRfYnl0ZSA9IG1fU3JjQnVmOworICAgIGlmIChzZXRqbXAobV9KbXBCdWYpID09IC0xKSB7CisgICAgICAgIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzKCZjaW5mbyk7CisgICAgICAgIG1fYkluaXRlZCA9IEZBTFNFOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGNpbmZvLmltYWdlX3dpZHRoID0gbV9PcmlnV2lkdGg7CisgICAgY2luZm8uaW1hZ2VfaGVpZ2h0ID0gbV9PcmlnSGVpZ2h0OworICAgIGludCByZXQgPSBqcGVnX3JlYWRfaGVhZGVyKCZjaW5mbywgVFJVRSk7CisgICAgaWYgKHJldCAhPSBKUEVHX0hFQURFUl9PSykgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChjaW5mby5zYXdfQWRvYmVfbWFya2VyKSB7CisgICAgICAgIG1fYkpwZWdUcmFuc2Zvcm0gPSBUUlVFOworICAgIH0KKyAgICBpZiAoY2luZm8ubnVtX2NvbXBvbmVudHMgPT0gMyAmJiAhbV9iSnBlZ1RyYW5zZm9ybSkgeworICAgICAgICBjaW5mby5vdXRfY29sb3Jfc3BhY2UgPSBjaW5mby5qcGVnX2NvbG9yX3NwYWNlOworICAgIH0KKyAgICBtX09yaWdXaWR0aCA9IGNpbmZvLmltYWdlX3dpZHRoOworICAgIG1fT3JpZ0hlaWdodCA9IGNpbmZvLmltYWdlX2hlaWdodDsKKyAgICBtX091dHB1dFdpZHRoID0gbV9PcmlnV2lkdGg7CisgICAgbV9PdXRwdXRIZWlnaHQgPSBtX091dHB1dEhlaWdodDsKKyAgICBtX25EZWZhdWx0U2NhbGVEZW5vbSA9IGNpbmZvLnNjYWxlX2Rlbm9tOworICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDQ29kZWNfSnBlZ0RlY29kZXI6OkNyZWF0ZShGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuQ29tcHMsIEZYX0JPT0wgQ29sb3JUcmFuc2Zvcm0sIElGWF9KcGVnUHJvdmlkZXIqIHBKUCkKK3sKKyAgICBpZiAocEpQKSB7CisgICAgICAgIG1fcEV4dFByb3ZpZGVyID0gcEpQOworICAgICAgICBtX3BFeHRDb250ZXh0ID0gbV9wRXh0UHJvdmlkZXItPkNyZWF0ZURlY29kZXIoc3JjX2J1Ziwgc3JjX3NpemUsIHdpZHRoLCBoZWlnaHQsIG5Db21wcywgQ29sb3JUcmFuc2Zvcm0pOworICAgICAgICByZXR1cm4gbV9wRXh0Q29udGV4dCAhPSBOVUxMOworICAgIH0KKyAgICBfSnBlZ1NjYW5TT0koc3JjX2J1Ziwgc3JjX3NpemUpOworICAgIG1fU3JjQnVmID0gc3JjX2J1ZjsKKyAgICBtX1NyY1NpemUgPSBzcmNfc2l6ZTsKKyAgICBqZXJyLmVycm9yX2V4aXQgPSBfZXJyb3JfZmF0YWw7CisgICAgamVyci5lbWl0X21lc3NhZ2UgPSBfZXJyb3JfZG9fbm90aGluZzE7CisgICAgamVyci5vdXRwdXRfbWVzc2FnZSA9IF9lcnJvcl9kb19ub3RoaW5nOworICAgIGplcnIuZm9ybWF0X21lc3NhZ2UgPSBfZXJyb3JfZG9fbm90aGluZzI7CisgICAgamVyci5yZXNldF9lcnJvcl9tZ3IgPSBfZXJyb3JfZG9fbm90aGluZzsKKyAgICBzcmMuaW5pdF9zb3VyY2UgPSBfc3JjX2RvX25vdGhpbmc7CisgICAgc3JjLnRlcm1fc291cmNlID0gX3NyY19kb19ub3RoaW5nOworICAgIHNyYy5za2lwX2lucHV0X2RhdGEgPSBfc3JjX3NraXBfZGF0YTsKKyAgICBzcmMuZmlsbF9pbnB1dF9idWZmZXIgPSBfc3JjX2ZpbGxfYnVmZmVyOworICAgIHNyYy5yZXN5bmNfdG9fcmVzdGFydCA9IF9zcmNfcmVzeW5jOworICAgIG1fYkpwZWdUcmFuc2Zvcm0gPSBDb2xvclRyYW5zZm9ybTsKKyAgICBpZihzcmNfc2l6ZSA+IDEgJiYgRlhTWVNfbWVtY21wMzIoc3JjX2J1ZiArIHNyY19zaXplIC0gMiwgIlx4RkZceEQ5IiwgMikgIT0gMCkgeworICAgICAgICAoKEZYX0xQQllURSlzcmNfYnVmKVtzcmNfc2l6ZSAtIDJdID0gMHhGRjsKKyAgICAgICAgKChGWF9MUEJZVEUpc3JjX2J1Zilbc3JjX3NpemUgLSAxXSA9IDB4RDk7CisgICAgfQorICAgIG1fT3V0cHV0V2lkdGggPSBtX09yaWdXaWR0aCA9IHdpZHRoOworICAgIG1fT3V0cHV0SGVpZ2h0ID0gbV9PcmlnSGVpZ2h0ID0gaGVpZ2h0OworICAgIGlmICghSW5pdERlY29kZSgpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKGNpbmZvLm51bV9jb21wb25lbnRzIDwgbkNvbXBzKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKChpbnQpY2luZm8uaW1hZ2Vfd2lkdGggPCB3aWR0aCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fUGl0Y2ggPSAoY2luZm8uaW1hZ2Vfd2lkdGggKiBjaW5mby5udW1fY29tcG9uZW50cyArIDMpIC8gNCAqIDQ7CisgICAgbV9wU2NhbmxpbmVCdWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1BpdGNoKTsKKyAgICBpZiAobV9wU2NhbmxpbmVCdWYgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fbkNvbXBzID0gY2luZm8ubnVtX2NvbXBvbmVudHM7CisgICAgbV9icGMgPSA4OworICAgIG1fYkNvbG9yVHJhbnNmb3JtZWQgPSBGQUxTRTsKKyAgICBtX2JTdGFydGVkID0gRkFMU0U7CisgICAgcmV0dXJuIFRSVUU7Cit9CitleHRlcm4gIkMiIHsKKyAgICBGWF9JTlQzMiBGWF9HZXREb3duc2FtcGxlUmF0aW8oRlhfSU5UMzIgb3JpZ2luV2lkdGgsIEZYX0lOVDMyIG9yaWdpbkhlaWdodCwgRlhfSU5UMzIgZG93bnNhbXBsZVdpZHRoLCBGWF9JTlQzMiBkb3duc2FtcGxlSGVpZ2h0KQorICAgIHsKKyAgICAgICAgaW50IGlyYXRpb193ID0gb3JpZ2luV2lkdGggLyBkb3duc2FtcGxlV2lkdGg7CisgICAgICAgIGludCBpcmF0aW9faCA9IG9yaWdpbkhlaWdodCAvIGRvd25zYW1wbGVIZWlnaHQ7CisgICAgICAgIGludCByYXRpbyA9IChpcmF0aW9fdyA+IGlyYXRpb19oKSA/IGlyYXRpb19oIDogaXJhdGlvX3c7CisgICAgICAgIGlmIChyYXRpbyA+PSA4KSB7CisgICAgICAgICAgICByZXR1cm4gODsKKyAgICAgICAgfSBlbHNlIGlmIChyYXRpbyA+PSA0KSB7CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgfSBlbHNlIGlmIChyYXRpbyA+PSAyKSB7CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMTsKKyAgICB9Cit9Cit2b2lkIENDb2RlY19KcGVnRGVjb2Rlcjo6dl9Eb3duU2NhbGUoaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCkKK3sKKyAgICBpZiAobV9wRXh0UHJvdmlkZXIpIHsKKyAgICAgICAgbV9wRXh0UHJvdmlkZXItPkRvd25TY2FsZShtX3BFeHRDb250ZXh0LCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW50IG9sZF9zY2FsZSA9IG1fRG93blNjYWxlOworICAgIG1fRG93blNjYWxlID0gRlhfR2V0RG93bnNhbXBsZVJhdGlvKG1fT3JpZ1dpZHRoLCBtX09yaWdIZWlnaHQsIGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0KTsKKyAgICBtX091dHB1dFdpZHRoID0gKG1fT3JpZ1dpZHRoICsgbV9Eb3duU2NhbGUgLSAxKSAvIG1fRG93blNjYWxlOworICAgIG1fT3V0cHV0SGVpZ2h0ID0gKG1fT3JpZ0hlaWdodCArIG1fRG93blNjYWxlIC0gMSkgLyBtX0Rvd25TY2FsZTsKKyAgICBtX1BpdGNoID0gKG1fT3V0cHV0V2lkdGggKiBtX25Db21wcyArIDMpIC8gNCAqIDQ7CisgICAgaWYgKG9sZF9zY2FsZSAhPSBtX0Rvd25TY2FsZSkgeworICAgICAgICBtX05leHRMaW5lID0gLTE7CisgICAgfQorfQorRlhfQk9PTCBDQ29kZWNfSnBlZ0RlY29kZXI6OnZfUmV3aW5kKCkKK3sKKyAgICBpZiAobV9wRXh0UHJvdmlkZXIpIHsKKyAgICAgICAgcmV0dXJuIG1fcEV4dFByb3ZpZGVyLT5SZXdpbmQobV9wRXh0Q29udGV4dCk7CisgICAgfQorICAgIGlmIChtX2JTdGFydGVkKSB7CisgICAgICAgIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzKCZjaW5mbyk7CisgICAgICAgIGlmICghSW5pdERlY29kZSgpKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHNldGptcChtX0ptcEJ1ZikgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBjaW5mby5zY2FsZV9kZW5vbSA9IG1fbkRlZmF1bHRTY2FsZURlbm9tICogbV9Eb3duU2NhbGU7CisgICAgbV9PdXRwdXRXaWR0aCA9IChtX09yaWdXaWR0aCArIG1fRG93blNjYWxlIC0gMSkgLyBtX0Rvd25TY2FsZTsKKyAgICBtX091dHB1dEhlaWdodCA9IChtX09yaWdIZWlnaHQgKyBtX0Rvd25TY2FsZSAtIDEpIC8gbV9Eb3duU2NhbGU7CisgICAgaWYgKCFqcGVnX3N0YXJ0X2RlY29tcHJlc3MoJmNpbmZvKSkgeworICAgICAgICBqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcygmY2luZm8pOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmICgoaW50KWNpbmZvLm91dHB1dF93aWR0aCA+IG1fT3JpZ1dpZHRoKSB7CisgICAgICAgIEZYU1lTX2Fzc2VydChGQUxTRSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9iU3RhcnRlZCA9IFRSVUU7CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9MUEJZVEUgQ0NvZGVjX0pwZWdEZWNvZGVyOjp2X0dldE5leHRMaW5lKCkKK3sKKyAgICBpZiAobV9wRXh0UHJvdmlkZXIpIHsKKyAgICAgICAgcmV0dXJuIG1fcEV4dFByb3ZpZGVyLT5HZXROZXh0TGluZShtX3BFeHRDb250ZXh0KTsKKyAgICB9CisgICAgaW50IG5saW5lcyA9IGpwZWdfcmVhZF9zY2FubGluZXMoJmNpbmZvLCAmbV9wU2NhbmxpbmVCdWYsIDEpOworICAgIGlmIChubGluZXMgPCAxKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gbV9wU2NhbmxpbmVCdWY7Cit9CitGWF9EV09SRCBDQ29kZWNfSnBlZ0RlY29kZXI6OkdldFNyY09mZnNldCgpCit7CisgICAgaWYgKG1fcEV4dFByb3ZpZGVyKSB7CisgICAgICAgIHJldHVybiBtX3BFeHRQcm92aWRlci0+R2V0U3JjT2Zmc2V0KG1fcEV4dENvbnRleHQpOworICAgIH0KKyAgICByZXR1cm4gKEZYX0RXT1JEKShtX1NyY1NpemUgLSBzcmMuYnl0ZXNfaW5fYnVmZmVyKTsKK30KK0lDb2RlY19TY2FubGluZURlY29kZXIqCUNDb2RlY19KcGVnTW9kdWxlOjpDcmVhdGVEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsCisgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG5Db21wcywgRlhfQk9PTCBDb2xvclRyYW5zZm9ybSkKK3sKKyAgICBpZiAoc3JjX2J1ZiA9PSBOVUxMIHx8IHNyY19zaXplID09IDApIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENDb2RlY19KcGVnRGVjb2RlciogcERlY29kZXIgPSBGWF9ORVcgQ0NvZGVjX0pwZWdEZWNvZGVyOworICAgIGlmIChwRGVjb2RlciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoIXBEZWNvZGVyLT5DcmVhdGUoc3JjX2J1Ziwgc3JjX3NpemUsIHdpZHRoLCBoZWlnaHQsIG5Db21wcywgQ29sb3JUcmFuc2Zvcm0sIG1fcEV4dFByb3ZpZGVyKSkgeworICAgICAgICBkZWxldGUgcERlY29kZXI7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcERlY29kZXI7Cit9CitGWF9CT09MIENDb2RlY19KcGVnTW9kdWxlOjpMb2FkSW5mbyhGWF9MUENCWVRFIHNyY19idWYsIEZYX0RXT1JEIHNyY19zaXplLCBpbnQmIHdpZHRoLCBpbnQmIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbnVtX2NvbXBvbmVudHMsIGludCYgYml0c19wZXJfY29tcG9uZW50cywgRlhfQk9PTCYgY29sb3JfdHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFKiBpY2NfYnVmX3B0ciwgRlhfRFdPUkQqIGljY19sZW5ndGgpCit7CisgICAgaWYgKG1fcEV4dFByb3ZpZGVyKSB7CisgICAgICAgIHJldHVybiBtX3BFeHRQcm92aWRlci0+TG9hZEluZm8oc3JjX2J1Ziwgc3JjX3NpemUsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2NvbXBvbmVudHMsIGJpdHNfcGVyX2NvbXBvbmVudHMsIGNvbG9yX3RyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY2NfYnVmX3B0ciwgaWNjX2xlbmd0aCk7CisgICAgfQorICAgIHJldHVybiBfSnBlZ0xvYWRJbmZvKHNyY19idWYsIHNyY19zaXplLCB3aWR0aCwgaGVpZ2h0LCBudW1fY29tcG9uZW50cywgYml0c19wZXJfY29tcG9uZW50cywgY29sb3JfdHJhbnNmb3JtLCBpY2NfYnVmX3B0ciwgaWNjX2xlbmd0aCk7Cit9CitGWF9CT09MIENDb2RlY19KcGVnTW9kdWxlOjpFbmNvZGUoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNvdXJjZSwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfU1RSU0laRSYgZGVzdF9zaXplLCBpbnQgcXVhbGl0eSwgRlhfTFBDQllURSBpY2NfYnVmLCBGWF9EV09SRCBpY2NfbGVuZ3RoKQoreworICAgIGlmIChtX3BFeHRQcm92aWRlcikgeworICAgICAgICByZXR1cm4gbV9wRXh0UHJvdmlkZXItPkVuY29kZShwU291cmNlLCBkZXN0X2J1ZiwgZGVzdF9zaXplLCBxdWFsaXR5LCBpY2NfYnVmLCBpY2NfbGVuZ3RoKTsKKyAgICB9CisgICAgaWYocFNvdXJjZS0+R2V0QlBQKCkgPCA4IHx8IHBTb3VyY2UtPkdldFBhbGV0dGUoKSAhPSBOVUxMKSB7CisgICAgICAgIEFTU0VSVChwU291cmNlLT5HZXRCUFAoKSA+PSA4ICYmIHBTb3VyY2UtPkdldFBhbGV0dGUoKSA9PSBOVUxMKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBfSnBlZ0VuY29kZShwU291cmNlLCBkZXN0X2J1ZiwgZGVzdF9zaXplLCBxdWFsaXR5LCBpY2NfYnVmLCBpY2NfbGVuZ3RoKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK3N0cnVjdCBGWEpQRUdfQ29udGV4dCB7CisgICAgam1wX2J1ZgkJCW1fSnVtcE1hcms7CisgICAganBlZ19kZWNvbXByZXNzX3N0cnVjdCBtX0luZm87CisgICAganBlZ19lcnJvcl9tZ3IJbV9FcnJNZ3I7CisgICAganBlZ19zb3VyY2VfbWdyCW1fU3JjTWdyOworICAgIHVuc2lnbmVkIGludAltX1NraXBTaXplOworICAgIHZvaWQqCQkoKm1fQWxsb2NGdW5jKSh1bnNpZ25lZCBpbnQpOworICAgIHZvaWQJCSgqbV9GcmVlRnVuYykodm9pZCopOworfTsKK2V4dGVybiAiQyIgeworICAgIHN0YXRpYyB2b2lkIF9lcnJvcl9mYXRhbDEoal9jb21tb25fcHRyIGNpbmZvKQorICAgIHsKKyAgICAgICAgbG9uZ2ptcCgoKEZYSlBFR19Db250ZXh0KiljaW5mby0+Y2xpZW50X2RhdGEpLT5tX0p1bXBNYXJrLCAtMSk7CisgICAgfQorfTsKK2V4dGVybiAiQyIgeworICAgIHN0YXRpYyB2b2lkIF9zcmNfc2tpcF9kYXRhMShzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCogY2luZm8sIGxvbmcgbnVtKQorICAgIHsKKyAgICAgICAgaWYgKGNpbmZvLT5zcmMtPmJ5dGVzX2luX2J1ZmZlciA8IChzaXplX3QpbnVtKSB7CisgICAgICAgICAgICAoKEZYSlBFR19Db250ZXh0KiljaW5mby0+Y2xpZW50X2RhdGEpLT5tX1NraXBTaXplID0gKHVuc2lnbmVkIGludCkobnVtIC0gY2luZm8tPnNyYy0+Ynl0ZXNfaW5fYnVmZmVyKTsKKyAgICAgICAgICAgIGNpbmZvLT5zcmMtPmJ5dGVzX2luX2J1ZmZlciA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaW5mby0+c3JjLT5uZXh0X2lucHV0X2J5dGUgKz0gbnVtOworICAgICAgICAgICAgY2luZm8tPnNyYy0+Ynl0ZXNfaW5fYnVmZmVyIC09IG51bTsKKyAgICAgICAgfQorICAgIH0KK307CitzdGF0aWMgdm9pZCoganBlZ19hbGxvY19mdW5jKHVuc2lnbmVkIGludCBzaXplKQoreworICAgIHJldHVybiBGWF9BbGxvYyhjaGFyLCBzaXplKTsKK30KK3N0YXRpYyB2b2lkIGpwZWdfZnJlZV9mdW5jKHZvaWQqIHApCit7CisgICAgRlhfRnJlZShwKTsKK30KK3ZvaWQqIENDb2RlY19KcGVnTW9kdWxlOjpTdGFydCgpCit7CisgICAgaWYgKG1fcEV4dFByb3ZpZGVyKSB7CisgICAgICAgIHJldHVybiBtX3BFeHRQcm92aWRlci0+U3RhcnQoKTsKKyAgICB9CisgICAgRlhKUEVHX0NvbnRleHQqIHAgPSAoRlhKUEVHX0NvbnRleHQqKUZYX0FsbG9jKEZYX0JZVEUsIHNpemVvZihGWEpQRUdfQ29udGV4dCkpOworICAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHAtPm1fQWxsb2NGdW5jID0ganBlZ19hbGxvY19mdW5jOworICAgIHAtPm1fRnJlZUZ1bmMgPSBqcGVnX2ZyZWVfZnVuYzsKKyAgICBwLT5tX0Vyck1nci5lcnJvcl9leGl0ID0gX2Vycm9yX2ZhdGFsMTsKKyAgICBwLT5tX0Vyck1nci5lbWl0X21lc3NhZ2UgPSBfZXJyb3JfZG9fbm90aGluZzE7CisgICAgcC0+bV9FcnJNZ3Iub3V0cHV0X21lc3NhZ2UgPSBfZXJyb3JfZG9fbm90aGluZzsKKyAgICBwLT5tX0Vyck1nci5mb3JtYXRfbWVzc2FnZSA9IF9lcnJvcl9kb19ub3RoaW5nMjsKKyAgICBwLT5tX0Vyck1nci5yZXNldF9lcnJvcl9tZ3IgPSBfZXJyb3JfZG9fbm90aGluZzsKKyAgICBwLT5tX1NyY01nci5pbml0X3NvdXJjZSA9IF9zcmNfZG9fbm90aGluZzsKKyAgICBwLT5tX1NyY01nci50ZXJtX3NvdXJjZSA9IF9zcmNfZG9fbm90aGluZzsKKyAgICBwLT5tX1NyY01nci5za2lwX2lucHV0X2RhdGEgPSBfc3JjX3NraXBfZGF0YTE7CisgICAgcC0+bV9TcmNNZ3IuZmlsbF9pbnB1dF9idWZmZXIgPSBfc3JjX2ZpbGxfYnVmZmVyOworICAgIHAtPm1fU3JjTWdyLnJlc3luY190b19yZXN0YXJ0ID0gX3NyY19yZXN5bmM7CisgICAgcC0+bV9JbmZvLmNsaWVudF9kYXRhID0gcDsKKyAgICBwLT5tX0luZm8uZXJyID0gJnAtPm1fRXJyTWdyOworICAgIGlmIChzZXRqbXAocC0+bV9KdW1wTWFyaykgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGpwZWdfY3JlYXRlX2RlY29tcHJlc3MoJnAtPm1fSW5mbyk7CisgICAgcC0+bV9JbmZvLnNyYyA9ICZwLT5tX1NyY01ncjsKKyAgICBwLT5tX1NraXBTaXplID0gMDsKKyAgICByZXR1cm4gcDsKK30KK3ZvaWQgQ0NvZGVjX0pwZWdNb2R1bGU6OkZpbmlzaCh2b2lkKiBwQ29udGV4dCkKK3sKKyAgICBpZiAobV9wRXh0UHJvdmlkZXIpIHsKKyAgICAgICAgbV9wRXh0UHJvdmlkZXItPkZpbmlzaChwQ29udGV4dCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhKUEVHX0NvbnRleHQqIHAgPSAoRlhKUEVHX0NvbnRleHQqKXBDb250ZXh0OworICAgIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzKCZwLT5tX0luZm8pOworICAgIHAtPm1fRnJlZUZ1bmMocCk7Cit9Cit2b2lkIENDb2RlY19KcGVnTW9kdWxlOjpJbnB1dCh2b2lkKiBwQ29udGV4dCwgY29uc3QgdW5zaWduZWQgY2hhciogc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUpCit7CisgICAgaWYgKG1fcEV4dFByb3ZpZGVyKSB7CisgICAgICAgIG1fcEV4dFByb3ZpZGVyLT5JbnB1dChwQ29udGV4dCwgc3JjX2J1Ziwgc3JjX3NpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYSlBFR19Db250ZXh0KiBwID0gKEZYSlBFR19Db250ZXh0KilwQ29udGV4dDsKKyAgICBpZiAocC0+bV9Ta2lwU2l6ZSkgeworICAgICAgICBpZiAocC0+bV9Ta2lwU2l6ZSA+IHNyY19zaXplKSB7CisgICAgICAgICAgICBwLT5tX1NyY01nci5ieXRlc19pbl9idWZmZXIgPSAwOworICAgICAgICAgICAgcC0+bV9Ta2lwU2l6ZSAtPSBzcmNfc2l6ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzcmNfc2l6ZSAtPSBwLT5tX1NraXBTaXplOworICAgICAgICBzcmNfYnVmICs9IHAtPm1fU2tpcFNpemU7CisgICAgICAgIHAtPm1fU2tpcFNpemUgPSAwOworICAgIH0KKyAgICBwLT5tX1NyY01nci5uZXh0X2lucHV0X2J5dGUgPSBzcmNfYnVmOworICAgIHAtPm1fU3JjTWdyLmJ5dGVzX2luX2J1ZmZlciA9IHNyY19zaXplOworfQoraW50IENDb2RlY19KcGVnTW9kdWxlOjpSZWFkSGVhZGVyKHZvaWQqIHBDb250ZXh0LCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCwgaW50KiBuQ29tcHMpCit7CisgICAgaWYgKG1fcEV4dFByb3ZpZGVyKSB7CisgICAgICAgIHJldHVybiBtX3BFeHRQcm92aWRlci0+UmVhZEhlYWRlcihwQ29udGV4dCwgd2lkdGgsIGhlaWdodCwgbkNvbXBzKTsKKyAgICB9CisgICAgRlhKUEVHX0NvbnRleHQqIHAgPSAoRlhKUEVHX0NvbnRleHQqKXBDb250ZXh0OworICAgIGlmIChzZXRqbXAocC0+bV9KdW1wTWFyaykgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGludCByZXQgPSBqcGVnX3JlYWRfaGVhZGVyKCZwLT5tX0luZm8sIHRydWUpOworICAgIGlmIChyZXQgPT0gSlBFR19TVVNQRU5ERUQpIHsKKyAgICAgICAgcmV0dXJuIDI7CisgICAgfQorICAgIGlmIChyZXQgIT0gSlBFR19IRUFERVJfT0spIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgICp3aWR0aCA9IHAtPm1fSW5mby5pbWFnZV93aWR0aDsKKyAgICAqaGVpZ2h0ID0gcC0+bV9JbmZvLmltYWdlX2hlaWdodDsKKyAgICAqbkNvbXBzID0gcC0+bV9JbmZvLm51bV9jb21wb25lbnRzOworICAgIHJldHVybiAwOworfQorRlhfQk9PTCBDQ29kZWNfSnBlZ01vZHVsZTo6U3RhcnRTY2FubGluZSh2b2lkKiBwQ29udGV4dCwgaW50IGRvd25fc2NhbGUpCit7CisgICAgaWYgKG1fcEV4dFByb3ZpZGVyKSB7CisgICAgICAgIHJldHVybiBtX3BFeHRQcm92aWRlci0+U3RhcnRTY2FubGluZShwQ29udGV4dCwgZG93bl9zY2FsZSk7CisgICAgfQorICAgIEZYSlBFR19Db250ZXh0KiBwID0gKEZYSlBFR19Db250ZXh0KilwQ29udGV4dDsKKyAgICBpZiAoc2V0am1wKHAtPm1fSnVtcE1hcmspID09IC0xKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcC0+bV9JbmZvLnNjYWxlX2Rlbm9tID0gZG93bl9zY2FsZTsKKyAgICByZXR1cm4ganBlZ19zdGFydF9kZWNvbXByZXNzKCZwLT5tX0luZm8pOworfQorRlhfQk9PTCBDQ29kZWNfSnBlZ01vZHVsZTo6UmVhZFNjYW5saW5lKHZvaWQqIHBDb250ZXh0LCB1bnNpZ25lZCBjaGFyKiBkZXN0X2J1ZikKK3sKKyAgICBpZiAobV9wRXh0UHJvdmlkZXIpIHsKKyAgICAgICAgcmV0dXJuIG1fcEV4dFByb3ZpZGVyLT5SZWFkU2NhbmxpbmUocENvbnRleHQsIGRlc3RfYnVmKTsKKyAgICB9CisgICAgRlhKUEVHX0NvbnRleHQqIHAgPSAoRlhKUEVHX0NvbnRleHQqKXBDb250ZXh0OworICAgIGlmIChzZXRqbXAocC0+bV9KdW1wTWFyaykgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpbnQgbmxpbmVzID0ganBlZ19yZWFkX3NjYW5saW5lcygmcC0+bV9JbmZvLCAmZGVzdF9idWYsIDEpOworICAgIHJldHVybiBubGluZXMgPT0gMTsKK30KK0ZYX0RXT1JEIENDb2RlY19KcGVnTW9kdWxlOjpHZXRBdmFpbElucHV0KHZvaWQqIHBDb250ZXh0LCBGWF9MUEJZVEUqIGF2YWlsX2J1Zl9wdHIpCit7CisgICAgaWYgKG1fcEV4dFByb3ZpZGVyKSB7CisgICAgICAgIHJldHVybiBtX3BFeHRQcm92aWRlci0+R2V0QXZhaWxJbnB1dChwQ29udGV4dCwgYXZhaWxfYnVmX3B0cik7CisgICAgfQorICAgIGlmKGF2YWlsX2J1Zl9wdHIgIT0gTlVMTCkgeworICAgICAgICAqYXZhaWxfYnVmX3B0ciA9IE5VTEw7CisgICAgICAgIGlmKCgoRlhKUEVHX0NvbnRleHQqKXBDb250ZXh0KS0+bV9TcmNNZ3IuYnl0ZXNfaW5fYnVmZmVyID4gMCkgeworICAgICAgICAgICAgKmF2YWlsX2J1Zl9wdHIgPSAoRlhfTFBCWVRFKSgoRlhKUEVHX0NvbnRleHQqKXBDb250ZXh0KS0+bV9TcmNNZ3IubmV4dF9pbnB1dF9ieXRlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAoRlhfRFdPUkQpKChGWEpQRUdfQ29udGV4dCopcENvbnRleHQpLT5tX1NyY01nci5ieXRlc19pbl9idWZmZXI7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2NvZGVjL2Z4X2NvZGVjX2pweF9vcGouY3BwIGIvY29yZS9zcmMvZnhjb2RlYy9jb2RlYy9meF9jb2RlY19qcHhfb3BqLmNwcAppbmRleCA0MjM4MTlmLi4zMmNiMTAwIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2NvZGVjL2Z4X2NvZGVjX2pweF9vcGouY3BwCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvY29kZWMvZnhfY29kZWNfanB4X29wai5jcHAKQEAgLTEsNzk5ICsxLDc5OSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjb2RlYy9meF9jb2RlYy5oIg0KLSNpbmNsdWRlICJjb2RlY19pbnQuaCINCi0jaW5jbHVkZSAiLi4vZnhfbGlib3BlbmpwZWcvbGlib3BlbmpwZWcyMC9vcGVuanBlZy5oIg0KLSNpbmNsdWRlICIuLi9sY21zMi9pbmNsdWRlL2Z4X2xjbXMyLmgiDQotc3RhdGljIHZvaWQgZnhfZXJyb3JfY2FsbGJhY2soY29uc3QgY2hhciAqbXNnLCB2b2lkICpjbGllbnRfZGF0YSkNCi17DQotICAgICh2b2lkKWNsaWVudF9kYXRhOw0KLX0NCi1zdGF0aWMgdm9pZCBmeF93YXJuaW5nX2NhbGxiYWNrKGNvbnN0IGNoYXIgKm1zZywgdm9pZCAqY2xpZW50X2RhdGEpDQotew0KLSAgICAodm9pZCljbGllbnRfZGF0YTsNCi19DQotc3RhdGljIHZvaWQgZnhfaW5mb19jYWxsYmFjayhjb25zdCBjaGFyICptc2csIHZvaWQgKmNsaWVudF9kYXRhKQ0KLXsNCi0gICAgKHZvaWQpY2xpZW50X2RhdGE7DQotfQ0KLXR5cGVkZWYgc3RydWN0IHsNCi0gICAgY29uc3QgdW5zaWduZWQgY2hhciogc3JjX2RhdGE7DQotICAgIGludAkJCQkJIHNyY19zaXplOw0KLSAgICBpbnQJCQkJCSBvZmZzZXQ7DQotfSBkZWNvZGVEYXRhOw0KLXN0YXRpYyBPUEpfU0laRV9UIG9wal9yZWFkX2Zyb21fbWVtb3J5ICh2b2lkICogcF9idWZmZXIsIE9QSl9TSVpFX1QgcF9uYl9ieXRlcywgIGRlY29kZURhdGEqIHNyY0RhdGEpDQotew0KLSAgICBpZihzcmNEYXRhID09IE5VTEwgfHwgc3JjRGF0YS0+c3JjX3NpemUgPT0gMCB8fCBzcmNEYXRhLT5zcmNfZGF0YSA9PSBOVUxMIHx8IHNyY0RhdGEtPm9mZnNldCA+PSBzcmNEYXRhLT5zcmNfc2l6ZSkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIE9QSl9TSVpFX1QgcmVhZGxlbmd0aCA9IHBfbmJfYnl0ZXM7DQotICAgIE9QSl9TSVpFX1QgYnVmZmVyTGVuZ3RoID0gKE9QSl9TSVpFX1QpKHNyY0RhdGEtPnNyY19zaXplIC0gc3JjRGF0YS0+b2Zmc2V0KTsNCi0gICAgaWYoYnVmZmVyTGVuZ3RoIDw9IDApIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGlmKGJ1ZmZlckxlbmd0aCA8PSBwX25iX2J5dGVzKSB7DQotICAgICAgICByZWFkbGVuZ3RoID0gYnVmZmVyTGVuZ3RoOw0KLSAgICB9DQotICAgIG1lbWNweShwX2J1ZmZlciwgJihzcmNEYXRhLT5zcmNfZGF0YVtzcmNEYXRhLT5vZmZzZXRdKSwgcmVhZGxlbmd0aCk7DQotICAgIHNyY0RhdGEtPm9mZnNldCArPSAoaW50KXJlYWRsZW5ndGg7DQotICAgIHJldHVybiByZWFkbGVuZ3RoOw0KLX0NCi1zdGF0aWMgT1BKX1NJWkVfVCBvcGpfd3JpdGVfZnJvbV9tZW1vcnkgKHZvaWQgKiBwX2J1ZmZlciwgT1BKX1NJWkVfVCBwX25iX2J5dGVzLCBkZWNvZGVEYXRhKiBzcmNEYXRhKQ0KLXsNCi0gICAgaWYoc3JjRGF0YSA9PSBOVUxMIHx8IHNyY0RhdGEtPnNyY19zaXplID09IDAgfHwgc3JjRGF0YS0+c3JjX2RhdGEgPT0gTlVMTCB8fCBzcmNEYXRhLT5vZmZzZXQgPj0gc3JjRGF0YS0+c3JjX3NpemUpIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBPUEpfU0laRV9UIHdyaXRlTGVuZ3RoID0gcF9uYl9ieXRlczsNCi0gICAgT1BKX1NJWkVfVCBidWZmZXJMZW5ndGggPSAoT1BKX1NJWkVfVCkoc3JjRGF0YS0+c3JjX3NpemUgLSBzcmNEYXRhLT5vZmZzZXQpOw0KLSAgICBpZihidWZmZXJMZW5ndGggPD0gcF9uYl9ieXRlcykgew0KLSAgICAgICAgd3JpdGVMZW5ndGggPSBidWZmZXJMZW5ndGg7DQotICAgIH0NCi0gICAgbWVtY3B5KCh2b2lkKiYpKHNyY0RhdGEtPnNyY19kYXRhW3NyY0RhdGEtPm9mZnNldF0pLCBwX2J1ZmZlciwgd3JpdGVMZW5ndGgpOw0KLSAgICBzcmNEYXRhLT5vZmZzZXQgKz0gKGludCl3cml0ZUxlbmd0aDsNCi0gICAgcmV0dXJuIHdyaXRlTGVuZ3RoOw0KLX0NCi1zdGF0aWMgT1BKX09GRl9UIG9wal9za2lwX2Zyb21fbWVtb3J5IChPUEpfT0ZGX1QgcF9uYl9ieXRlcywgZGVjb2RlRGF0YSogc3JjRGF0YSkNCi17DQotICAgIGlmKHNyY0RhdGEgPT0gTlVMTCB8fCBzcmNEYXRhLT5zcmNfc2l6ZSA9PSAwIHx8IHNyY0RhdGEtPnNyY19kYXRhID09IE5VTEwgfHwgc3JjRGF0YS0+b2Zmc2V0ID49IHNyY0RhdGEtPnNyY19zaXplKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgT1BKX09GRl9UIHBvc3Rpb24gPSBzcmNEYXRhLT5vZmZzZXQgKyBwX25iX2J5dGVzOw0KLSAgICBpZihwb3N0aW9uIDwgMCApIHsNCi0gICAgICAgIHBvc3Rpb24gPSAwOw0KLSAgICB9IGVsc2UgaWYgKHBvc3Rpb24gPiBzcmNEYXRhLT5zcmNfc2l6ZSkgew0KLSAgICB9DQotICAgIHNyY0RhdGEtPm9mZnNldCA9IChpbnQpcG9zdGlvbjsNCi0gICAgcmV0dXJuIHBfbmJfYnl0ZXM7DQotfQ0KLXN0YXRpYyBPUEpfQk9PTCBvcGpfc2Vla19mcm9tX21lbW9yeSAoT1BKX09GRl9UIHBfbmJfYnl0ZXMsIGRlY29kZURhdGEgKiBzcmNEYXRhKQ0KLXsNCi0gICAgaWYoc3JjRGF0YSA9PSBOVUxMIHx8IHNyY0RhdGEtPnNyY19zaXplID09IDAgfHwgc3JjRGF0YS0+c3JjX2RhdGEgPT0gTlVMTCB8fCBzcmNEYXRhLT5vZmZzZXQgPj0gc3JjRGF0YS0+c3JjX3NpemUpIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBzcmNEYXRhLT5vZmZzZXQgPSAoaW50KXBfbmJfYnl0ZXM7DQotICAgIGlmKHNyY0RhdGEtPm9mZnNldCA8IDApIHsNCi0gICAgICAgIHNyY0RhdGEtPm9mZnNldCA9IDA7DQotICAgIH0gZWxzZSBpZihzcmNEYXRhLT5vZmZzZXQgPiBzcmNEYXRhLT5zcmNfc2l6ZSkgew0KLSAgICAgICAgc3JjRGF0YS0+b2Zmc2V0ID0gc3JjRGF0YS0+c3JjX3NpemU7DQotICAgIH0NCi0gICAgcmV0dXJuIE9QSl9UUlVFOw0KLX0NCi1vcGpfc3RyZWFtX3QqIGZ4X29wal9zdHJlYW1fY3JlYXRlX21lbW9yeV9zdHJlYW0gKGRlY29kZURhdGEqIGRhdGEsCU9QSl9TSVpFX1QgcF9zaXplLCAJT1BKX0JPT0wgcF9pc19yZWFkX3N0cmVhbSkNCi17DQotICAgIG9wal9zdHJlYW1fdCogbF9zdHJlYW0gPSAwMDsNCi0gICAgaWYgKCFkYXRhIHx8ICEgZGF0YS0+c3JjX2RhdGEgfHwgZGF0YS0+c3JjX3NpemUgPD0gMCApIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGxfc3RyZWFtID0gb3BqX3N0cmVhbV9jcmVhdGUocF9zaXplLCBwX2lzX3JlYWRfc3RyZWFtKTsNCi0gICAgaWYgKCEgbF9zdHJlYW0pIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIG9wal9zdHJlYW1fc2V0X3VzZXJfZGF0YV92MyhsX3N0cmVhbSwgZGF0YSwgTlVMTCk7DQotICAgIG9wal9zdHJlYW1fc2V0X3VzZXJfZGF0YV9sZW5ndGgobF9zdHJlYW0sIGRhdGEtPnNyY19zaXplKTsNCi0gICAgb3BqX3N0cmVhbV9zZXRfcmVhZF9mdW5jdGlvbihsX3N0cmVhbSwgKG9wal9zdHJlYW1fcmVhZF9mbikgb3BqX3JlYWRfZnJvbV9tZW1vcnkpOw0KLSAgICBvcGpfc3RyZWFtX3NldF93cml0ZV9mdW5jdGlvbihsX3N0cmVhbSwgKG9wal9zdHJlYW1fd3JpdGVfZm4pIG9wal93cml0ZV9mcm9tX21lbW9yeSk7DQotICAgIG9wal9zdHJlYW1fc2V0X3NraXBfZnVuY3Rpb24obF9zdHJlYW0sIChvcGpfc3RyZWFtX3NraXBfZm4pIG9wal9za2lwX2Zyb21fbWVtb3J5KTsNCi0gICAgb3BqX3N0cmVhbV9zZXRfc2Vla19mdW5jdGlvbihsX3N0cmVhbSwgKG9wal9zdHJlYW1fc2Vla19mbikgb3BqX3NlZWtfZnJvbV9tZW1vcnkpOw0KLSAgICByZXR1cm4gbF9zdHJlYW07DQotfQ0KLXN0YXRpYyB2b2lkIHN5Y2NfdG9fcmdiKGludCBvZmZzZXQsIGludCB1cGIsIGludCB5LCBpbnQgY2IsIGludCBjciwNCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm91dF9yLCBpbnQgKm91dF9nLCBpbnQgKm91dF9iKQ0KLXsNCi0gICAgaW50IHIsIGcsIGI7DQotICAgIGNiIC09IG9mZnNldDsNCi0gICAgY3IgLT0gb2Zmc2V0Ow0KLSAgICByID0geSArIChpbnQpKDEuNDAyICogKGZsb2F0KWNyKTsNCi0gICAgaWYociA8IDApIHsNCi0gICAgICAgIHIgPSAwOw0KLSAgICB9IGVsc2UgaWYociA+IHVwYikgew0KLSAgICAgICAgciA9IHVwYjsNCi0gICAgfSAqb3V0X3IgPSByOw0KLSAgICBnID0geSAtIChpbnQpKDAuMzQ0ICogKGZsb2F0KWNiICsgMC43MTQgKiAoZmxvYXQpY3IpOw0KLSAgICBpZihnIDwgMCkgew0KLSAgICAgICAgZyA9IDA7DQotICAgIH0gZWxzZSBpZihnID4gdXBiKSB7DQotICAgICAgICBnID0gdXBiOw0KLSAgICB9ICpvdXRfZyA9IGc7DQotICAgIGIgPSB5ICsgKGludCkoMS43NzIgKiAoZmxvYXQpY2IpOw0KLSAgICBpZihiIDwgMCkgew0KLSAgICAgICAgYiA9IDA7DQotICAgIH0gZWxzZSBpZihiID4gdXBiKSB7DQotICAgICAgICBiID0gdXBiOw0KLSAgICB9ICpvdXRfYiA9IGI7DQotfQ0KLXN0YXRpYyB2b2lkIHN5Y2M0NDRfdG9fcmdiKG9wal9pbWFnZV90ICppbWcpDQotew0KLSAgICBpbnQgKmQwLCAqZDEsICpkMiwgKnIsICpnLCAqYjsNCi0gICAgY29uc3QgaW50ICp5LCAqY2IsICpjcjsNCi0gICAgaW50IG1heHcsIG1heGgsIG1heCwgaSwgb2Zmc2V0LCB1cGI7DQotICAgIGkgPSAoaW50KWltZy0+Y29tcHNbMF0ucHJlYzsNCi0gICAgb2Zmc2V0ID0gMSA8PCAoaSAtIDEpOw0KLSAgICB1cGIgPSAoMSA8PCBpKSAtIDE7DQotICAgIG1heHcgPSAoaW50KWltZy0+Y29tcHNbMF0udzsNCi0gICAgbWF4aCA9IChpbnQpaW1nLT5jb21wc1swXS5oOw0KLSAgICBtYXggPSBtYXh3ICogbWF4aDsNCi0gICAgeSA9IGltZy0+Y29tcHNbMF0uZGF0YTsNCi0gICAgY2IgPSBpbWctPmNvbXBzWzFdLmRhdGE7DQotICAgIGNyID0gaW1nLT5jb21wc1syXS5kYXRhOw0KLSAgICBkMCA9IHIgPSBGWF9BbGxvYyhpbnQsIChzaXplX3QpbWF4KTsNCi0gICAgZDEgPSBnID0gRlhfQWxsb2MoaW50LCAoc2l6ZV90KW1heCk7DQotICAgIGQyID0gYiA9IEZYX0FsbG9jKGludCwgKHNpemVfdCltYXgpOw0KLSAgICBmb3IoaSA9IDA7IGkgPCBtYXg7ICsraSkgew0KLSAgICAgICAgc3ljY190b19yZ2Iob2Zmc2V0LCB1cGIsICp5LCAqY2IsICpjciwgciwgZywgYik7DQotICAgICAgICArK3k7DQotICAgICAgICArK2NiOw0KLSAgICAgICAgKytjcjsNCi0gICAgICAgICsrcjsNCi0gICAgICAgICsrZzsNCi0gICAgICAgICsrYjsNCi0gICAgfQ0KLSAgICBGWF9GcmVlKGltZy0+Y29tcHNbMF0uZGF0YSk7DQotICAgIGltZy0+Y29tcHNbMF0uZGF0YSA9IGQwOw0KLSAgICBGWF9GcmVlKGltZy0+Y29tcHNbMV0uZGF0YSk7DQotICAgIGltZy0+Y29tcHNbMV0uZGF0YSA9IGQxOw0KLSAgICBGWF9GcmVlKGltZy0+Y29tcHNbMl0uZGF0YSk7DQotICAgIGltZy0+Y29tcHNbMl0uZGF0YSA9IGQyOw0KLX0NCi1zdGF0aWMgdm9pZCBzeWNjNDIyX3RvX3JnYihvcGpfaW1hZ2VfdCAqaW1nKQ0KLXsNCi0gICAgaW50ICpkMCwgKmQxLCAqZDIsICpyLCAqZywgKmI7DQotICAgIGNvbnN0IGludCAqeSwgKmNiLCAqY3I7DQotICAgIGludCBtYXh3LCBtYXhoLCBtYXgsIG9mZnNldCwgdXBiOw0KLSAgICBpbnQgaSwgajsNCi0gICAgaSA9IChpbnQpaW1nLT5jb21wc1swXS5wcmVjOw0KLSAgICBvZmZzZXQgPSAxIDw8IChpIC0gMSk7DQotICAgIHVwYiA9ICgxIDw8IGkpIC0gMTsNCi0gICAgbWF4dyA9IChpbnQpaW1nLT5jb21wc1swXS53Ow0KLSAgICBtYXhoID0gKGludClpbWctPmNvbXBzWzBdLmg7DQotICAgIG1heCA9IG1heHcgKiBtYXhoOw0KLSAgICB5ID0gaW1nLT5jb21wc1swXS5kYXRhOw0KLSAgICBjYiA9IGltZy0+Y29tcHNbMV0uZGF0YTsNCi0gICAgY3IgPSBpbWctPmNvbXBzWzJdLmRhdGE7DQotICAgIGQwID0gciA9IEZYX0FsbG9jKGludCwgKHNpemVfdCltYXgpOw0KLSAgICBkMSA9IGcgPSBGWF9BbGxvYyhpbnQsIChzaXplX3QpbWF4KTsNCi0gICAgZDIgPSBiID0gRlhfQWxsb2MoaW50LCAoc2l6ZV90KW1heCk7DQotICAgIGZvcihpID0gMDsgaSA8IG1heGg7ICsraSkgew0KLSAgICAgICAgZm9yKGogPSAwOyBqIDwgbWF4dzsgaiArPSAyKSB7DQotICAgICAgICAgICAgc3ljY190b19yZ2Iob2Zmc2V0LCB1cGIsICp5LCAqY2IsICpjciwgciwgZywgYik7DQotICAgICAgICAgICAgKyt5Ow0KLSAgICAgICAgICAgICsrcjsNCi0gICAgICAgICAgICArK2c7DQotICAgICAgICAgICAgKytiOw0KLSAgICAgICAgICAgIHN5Y2NfdG9fcmdiKG9mZnNldCwgdXBiLCAqeSwgKmNiLCAqY3IsIHIsIGcsIGIpOw0KLSAgICAgICAgICAgICsreTsNCi0gICAgICAgICAgICArK3I7DQotICAgICAgICAgICAgKytnOw0KLSAgICAgICAgICAgICsrYjsNCi0gICAgICAgICAgICArK2NiOw0KLSAgICAgICAgICAgICsrY3I7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhfRnJlZShpbWctPmNvbXBzWzBdLmRhdGEpOw0KLSAgICBpbWctPmNvbXBzWzBdLmRhdGEgPSBkMDsNCi0gICAgRlhfRnJlZShpbWctPmNvbXBzWzFdLmRhdGEpOw0KLSAgICBpbWctPmNvbXBzWzFdLmRhdGEgPSBkMTsNCi0gICAgRlhfRnJlZShpbWctPmNvbXBzWzJdLmRhdGEpOw0KLSAgICBpbWctPmNvbXBzWzJdLmRhdGEgPSBkMjsNCi0gICAgaW1nLT5jb21wc1sxXS53ID0gbWF4dzsNCi0gICAgaW1nLT5jb21wc1sxXS5oID0gbWF4aDsNCi0gICAgaW1nLT5jb21wc1syXS53ID0gbWF4dzsNCi0gICAgaW1nLT5jb21wc1syXS5oID0gbWF4aDsNCi0gICAgaW1nLT5jb21wc1sxXS53ID0gKE9QSl9VSU5UMzIpbWF4dzsNCi0gICAgaW1nLT5jb21wc1sxXS5oID0gKE9QSl9VSU5UMzIpbWF4aDsNCi0gICAgaW1nLT5jb21wc1syXS53ID0gKE9QSl9VSU5UMzIpbWF4dzsNCi0gICAgaW1nLT5jb21wc1syXS5oID0gKE9QSl9VSU5UMzIpbWF4aDsNCi0gICAgaW1nLT5jb21wc1sxXS5keCA9IGltZy0+Y29tcHNbMF0uZHg7DQotICAgIGltZy0+Y29tcHNbMl0uZHggPSBpbWctPmNvbXBzWzBdLmR4Ow0KLSAgICBpbWctPmNvbXBzWzFdLmR5ID0gaW1nLT5jb21wc1swXS5keTsNCi0gICAgaW1nLT5jb21wc1syXS5keSA9IGltZy0+Y29tcHNbMF0uZHk7DQotfQ0KLXN0YXRpYyB2b2lkIHN5Y2M0MjBfdG9fcmdiKG9wal9pbWFnZV90ICppbWcpDQotew0KLSAgICBpbnQgKmQwLCAqZDEsICpkMiwgKnIsICpnLCAqYiwgKm5yLCAqbmcsICpuYjsNCi0gICAgY29uc3QgaW50ICp5LCAqY2IsICpjciwgKm55Ow0KLSAgICBpbnQgbWF4dywgbWF4aCwgbWF4LCBvZmZzZXQsIHVwYjsNCi0gICAgaW50IGksIGo7DQotICAgIGkgPSAoaW50KWltZy0+Y29tcHNbMF0ucHJlYzsNCi0gICAgb2Zmc2V0ID0gMSA8PCAoaSAtIDEpOw0KLSAgICB1cGIgPSAoMSA8PCBpKSAtIDE7DQotICAgIG1heHcgPSAoaW50KWltZy0+Y29tcHNbMF0udzsNCi0gICAgbWF4aCA9IChpbnQpaW1nLT5jb21wc1swXS5oOw0KLSAgICBtYXggPSBtYXh3ICogbWF4aDsNCi0gICAgeSA9IGltZy0+Y29tcHNbMF0uZGF0YTsNCi0gICAgY2IgPSBpbWctPmNvbXBzWzFdLmRhdGE7DQotICAgIGNyID0gaW1nLT5jb21wc1syXS5kYXRhOw0KLSAgICBkMCA9IHIgPSBGWF9BbGxvYyhpbnQsIChzaXplX3QpbWF4KTsNCi0gICAgZDEgPSBnID0gRlhfQWxsb2MoaW50LCAoc2l6ZV90KW1heCk7DQotICAgIGQyID0gYiA9IEZYX0FsbG9jKGludCwgKHNpemVfdCltYXgpOw0KLSAgICBmb3IoaSA9IDA7IGkgPCBtYXhoOyBpICs9IDIpIHsNCi0gICAgICAgIG55ID0geSArIG1heHc7DQotICAgICAgICBuciA9IHIgKyBtYXh3Ow0KLSAgICAgICAgbmcgPSBnICsgbWF4dzsNCi0gICAgICAgIG5iID0gYiArIG1heHc7DQotICAgICAgICBmb3IoaiA9IDA7IGogPCBtYXh3OyAgaiArPSAyKSB7DQotICAgICAgICAgICAgc3ljY190b19yZ2Iob2Zmc2V0LCB1cGIsICp5LCAqY2IsICpjciwgciwgZywgYik7DQotICAgICAgICAgICAgKyt5Ow0KLSAgICAgICAgICAgICsrcjsNCi0gICAgICAgICAgICArK2c7DQotICAgICAgICAgICAgKytiOw0KLSAgICAgICAgICAgIHN5Y2NfdG9fcmdiKG9mZnNldCwgdXBiLCAqeSwgKmNiLCAqY3IsIHIsIGcsIGIpOw0KLSAgICAgICAgICAgICsreTsNCi0gICAgICAgICAgICArK3I7DQotICAgICAgICAgICAgKytnOw0KLSAgICAgICAgICAgICsrYjsNCi0gICAgICAgICAgICBzeWNjX3RvX3JnYihvZmZzZXQsIHVwYiwgKm55LCAqY2IsICpjciwgbnIsIG5nLCBuYik7DQotICAgICAgICAgICAgKytueTsNCi0gICAgICAgICAgICArK25yOw0KLSAgICAgICAgICAgICsrbmc7DQotICAgICAgICAgICAgKytuYjsNCi0gICAgICAgICAgICBzeWNjX3RvX3JnYihvZmZzZXQsIHVwYiwgKm55LCAqY2IsICpjciwgbnIsIG5nLCBuYik7DQotICAgICAgICAgICAgKytueTsNCi0gICAgICAgICAgICArK25yOw0KLSAgICAgICAgICAgICsrbmc7DQotICAgICAgICAgICAgKytuYjsNCi0gICAgICAgICAgICArK2NiOw0KLSAgICAgICAgICAgICsrY3I7DQotICAgICAgICB9DQotICAgICAgICB5ICs9IG1heHc7DQotICAgICAgICByICs9IG1heHc7DQotICAgICAgICBnICs9IG1heHc7DQotICAgICAgICBiICs9IG1heHc7DQotICAgIH0NCi0gICAgRlhfRnJlZShpbWctPmNvbXBzWzBdLmRhdGEpOw0KLSAgICBpbWctPmNvbXBzWzBdLmRhdGEgPSBkMDsNCi0gICAgRlhfRnJlZShpbWctPmNvbXBzWzFdLmRhdGEpOw0KLSAgICBpbWctPmNvbXBzWzFdLmRhdGEgPSBkMTsNCi0gICAgRlhfRnJlZShpbWctPmNvbXBzWzJdLmRhdGEpOw0KLSAgICBpbWctPmNvbXBzWzJdLmRhdGEgPSBkMjsNCi0gICAgaW1nLT5jb21wc1sxXS53ID0gbWF4dzsNCi0gICAgaW1nLT5jb21wc1sxXS5oID0gbWF4aDsNCi0gICAgaW1nLT5jb21wc1syXS53ID0gbWF4dzsNCi0gICAgaW1nLT5jb21wc1syXS5oID0gbWF4aDsNCi0gICAgaW1nLT5jb21wc1sxXS53ID0gKE9QSl9VSU5UMzIpbWF4dzsNCi0gICAgaW1nLT5jb21wc1sxXS5oID0gKE9QSl9VSU5UMzIpbWF4aDsNCi0gICAgaW1nLT5jb21wc1syXS53ID0gKE9QSl9VSU5UMzIpbWF4dzsNCi0gICAgaW1nLT5jb21wc1syXS5oID0gKE9QSl9VSU5UMzIpbWF4aDsNCi0gICAgaW1nLT5jb21wc1sxXS5keCA9IGltZy0+Y29tcHNbMF0uZHg7DQotICAgIGltZy0+Y29tcHNbMl0uZHggPSBpbWctPmNvbXBzWzBdLmR4Ow0KLSAgICBpbWctPmNvbXBzWzFdLmR5ID0gaW1nLT5jb21wc1swXS5keTsNCi0gICAgaW1nLT5jb21wc1syXS5keSA9IGltZy0+Y29tcHNbMF0uZHk7DQotfQ0KLXZvaWQgY29sb3Jfc3ljY190b19yZ2Iob3BqX2ltYWdlX3QgKmltZykNCi17DQotICAgIGlmKGltZy0+bnVtY29tcHMgPCAzKSB7DQotICAgICAgICBpbWctPmNvbG9yX3NwYWNlID0gT1BKX0NMUlNQQ19HUkFZOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmKChpbWctPmNvbXBzWzBdLmR4ID09IDEpDQotICAgICAgICAgICAgJiYgKGltZy0+Y29tcHNbMV0uZHggPT0gMikNCi0gICAgICAgICAgICAmJiAoaW1nLT5jb21wc1syXS5keCA9PSAyKQ0KLSAgICAgICAgICAgICYmIChpbWctPmNvbXBzWzBdLmR5ID09IDEpDQotICAgICAgICAgICAgJiYgKGltZy0+Y29tcHNbMV0uZHkgPT0gMikNCi0gICAgICAgICAgICAmJiAoaW1nLT5jb21wc1syXS5keSA9PSAyKSkgew0KLSAgICAgICAgc3ljYzQyMF90b19yZ2IoaW1nKTsNCi0gICAgfSBlbHNlIGlmKChpbWctPmNvbXBzWzBdLmR4ID09IDEpDQotICAgICAgICAgICAgICAmJiAoaW1nLT5jb21wc1sxXS5keCA9PSAyKQ0KLSAgICAgICAgICAgICAgJiYgKGltZy0+Y29tcHNbMl0uZHggPT0gMikNCi0gICAgICAgICAgICAgICYmIChpbWctPmNvbXBzWzBdLmR5ID09IDEpDQotICAgICAgICAgICAgICAmJiAoaW1nLT5jb21wc1sxXS5keSA9PSAxKQ0KLSAgICAgICAgICAgICAgJiYgKGltZy0+Y29tcHNbMl0uZHkgPT0gMSkpIHsNCi0gICAgICAgIHN5Y2M0MjJfdG9fcmdiKGltZyk7DQotICAgIH0gZWxzZSBpZigoaW1nLT5jb21wc1swXS5keCA9PSAxKQ0KLSAgICAgICAgICAgICAgJiYgKGltZy0+Y29tcHNbMV0uZHggPT0gMSkNCi0gICAgICAgICAgICAgICYmIChpbWctPmNvbXBzWzJdLmR4ID09IDEpDQotICAgICAgICAgICAgICAmJiAoaW1nLT5jb21wc1swXS5keSA9PSAxKQ0KLSAgICAgICAgICAgICAgJiYgKGltZy0+Y29tcHNbMV0uZHkgPT0gMSkNCi0gICAgICAgICAgICAgICYmIChpbWctPmNvbXBzWzJdLmR5ID09IDEpKSB7DQotICAgICAgICBzeWNjNDQ0X3RvX3JnYihpbWcpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGltZy0+Y29sb3Jfc3BhY2UgPSBPUEpfQ0xSU1BDX1NSR0I7DQotfQ0KLXZvaWQgY29sb3JfYXBwbHlfaWNjX3Byb2ZpbGUob3BqX2ltYWdlX3QgKmltYWdlKQ0KLXsNCi0gICAgY21zSFBST0ZJTEUgaW5fcHJvZiwgb3V0X3Byb2Y7DQotICAgIGNtc0hUUkFOU0ZPUk0gdHJhbnNmb3JtOw0KLSAgICBjbXNDb2xvclNwYWNlU2lnbmF0dXJlIGluX3NwYWNlLCBvdXRfc3BhY2U7DQotICAgIGNtc1VJbnQzMk51bWJlciBpbnRlbnQsIGluX3R5cGUsIG91dF90eXBlLCBucl9zYW1wbGVzOw0KLSAgICBpbnQgKnIsICpnLCAqYjsNCi0gICAgaW50IHByZWMsIGksIG1heCwgbWF4X3csIG1heF9oOw0KLSAgICBPUEpfQ09MT1JfU1BBQ0Ugb2xkc3BhY2U7DQotICAgIGluX3Byb2YgPQ0KLSAgICAgICAgY21zT3BlblByb2ZpbGVGcm9tTWVtKGltYWdlLT5pY2NfcHJvZmlsZV9idWYsIGltYWdlLT5pY2NfcHJvZmlsZV9sZW4pOw0KLSAgICBpZihpbl9wcm9mID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpbl9zcGFjZSA9IGNtc0dldFBDUyhpbl9wcm9mKTsNCi0gICAgb3V0X3NwYWNlID0gY21zR2V0Q29sb3JTcGFjZShpbl9wcm9mKTsNCi0gICAgaW50ZW50ID0gY21zR2V0SGVhZGVyUmVuZGVyaW5nSW50ZW50KGluX3Byb2YpOw0KLSAgICBtYXhfdyA9IChpbnQpaW1hZ2UtPmNvbXBzWzBdLnc7DQotICAgIG1heF9oID0gKGludClpbWFnZS0+Y29tcHNbMF0uaDsNCi0gICAgcHJlYyA9IChpbnQpaW1hZ2UtPmNvbXBzWzBdLnByZWM7DQotICAgIG9sZHNwYWNlID0gaW1hZ2UtPmNvbG9yX3NwYWNlOw0KLSAgICBpZihvdXRfc3BhY2UgPT0gY21zU2lnUmdiRGF0YSkgew0KLSAgICAgICAgaWYoIHByZWMgPD0gOCApIHsNCi0gICAgICAgICAgICBpbl90eXBlID0gVFlQRV9SR0JfODsNCi0gICAgICAgICAgICBvdXRfdHlwZSA9IFRZUEVfUkdCXzg7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGluX3R5cGUgPSBUWVBFX1JHQl8xNjsNCi0gICAgICAgICAgICBvdXRfdHlwZSA9IFRZUEVfUkdCXzE2Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgb3V0X3Byb2YgPSBjbXNDcmVhdGVfc1JHQlByb2ZpbGUoKTsNCi0gICAgICAgIGltYWdlLT5jb2xvcl9zcGFjZSA9IE9QSl9DTFJTUENfU1JHQjsNCi0gICAgfSBlbHNlIGlmKG91dF9zcGFjZSA9PSBjbXNTaWdHcmF5RGF0YSkgew0KLSAgICAgICAgaWYoIHByZWMgPD0gOCApIHsNCi0gICAgICAgICAgICBpbl90eXBlID0gVFlQRV9HUkFZXzg7DQotICAgICAgICAgICAgb3V0X3R5cGUgPSBUWVBFX1JHQl84Ow0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpbl90eXBlID0gVFlQRV9HUkFZXzE2Ow0KLSAgICAgICAgICAgIG91dF90eXBlID0gVFlQRV9SR0JfMTY7DQotICAgICAgICB9DQotICAgICAgICBvdXRfcHJvZiA9IGNtc0NyZWF0ZV9zUkdCUHJvZmlsZSgpOw0KLSAgICAgICAgaW1hZ2UtPmNvbG9yX3NwYWNlID0gT1BKX0NMUlNQQ19TUkdCOw0KLSAgICB9IGVsc2UgaWYob3V0X3NwYWNlID09IGNtc1NpZ1lDYkNyRGF0YSkgew0KLSAgICAgICAgaW5fdHlwZSA9IFRZUEVfWUNiQ3JfMTY7DQotICAgICAgICBvdXRfdHlwZSA9IFRZUEVfUkdCXzE2Ow0KLSAgICAgICAgb3V0X3Byb2YgPSBjbXNDcmVhdGVfc1JHQlByb2ZpbGUoKTsNCi0gICAgICAgIGltYWdlLT5jb2xvcl9zcGFjZSA9IE9QSl9DTFJTUENfU1JHQjsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICB0cmFuc2Zvcm0gPSBjbXNDcmVhdGVUcmFuc2Zvcm0oaW5fcHJvZiwgaW5fdHlwZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wcm9mLCBvdXRfdHlwZSwgaW50ZW50LCAwKTsNCi0gICAgY21zQ2xvc2VQcm9maWxlKGluX3Byb2YpOw0KLSAgICBjbXNDbG9zZVByb2ZpbGUob3V0X3Byb2YpOw0KLSAgICBpZih0cmFuc2Zvcm0gPT0gTlVMTCkgew0KLSAgICAgICAgaW1hZ2UtPmNvbG9yX3NwYWNlID0gb2xkc3BhY2U7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYoaW1hZ2UtPm51bWNvbXBzID4gMikgew0KLSAgICAgICAgaWYoIHByZWMgPD0gOCApIHsNCi0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyICppbmJ1ZiwgKm91dGJ1ZiwgKmluLCAqb3V0Ow0KLSAgICAgICAgICAgIG1heCA9IG1heF93ICogbWF4X2g7DQotICAgICAgICAgICAgbnJfc2FtcGxlcyA9IChjbXNVSW50MzJOdW1iZXIpbWF4ICogMyAqIChjbXNVSW50MzJOdW1iZXIpc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOw0KLSAgICAgICAgICAgIGluID0gaW5idWYgPSBGWF9BbGxvYyh1bnNpZ25lZCBjaGFyLCBucl9zYW1wbGVzKTsNCi0gICAgICAgICAgICBvdXQgPSBvdXRidWYgPSBGWF9BbGxvYyh1bnNpZ25lZCBjaGFyLCBucl9zYW1wbGVzKTsNCi0gICAgICAgICAgICByID0gaW1hZ2UtPmNvbXBzWzBdLmRhdGE7DQotICAgICAgICAgICAgZyA9IGltYWdlLT5jb21wc1sxXS5kYXRhOw0KLSAgICAgICAgICAgIGIgPSBpbWFnZS0+Y29tcHNbMl0uZGF0YTsNCi0gICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBtYXg7ICsraSkgew0KLSAgICAgICAgICAgICAgICAqaW4rKyA9ICh1bnNpZ25lZCBjaGFyKSAqIHIrKzsNCi0gICAgICAgICAgICAgICAgKmluKysgPSAodW5zaWduZWQgY2hhcikgKiBnKys7DQotICAgICAgICAgICAgICAgICppbisrID0gKHVuc2lnbmVkIGNoYXIpICogYisrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjbXNEb1RyYW5zZm9ybSh0cmFuc2Zvcm0sIGluYnVmLCBvdXRidWYsIChjbXNVSW50MzJOdW1iZXIpbWF4KTsNCi0gICAgICAgICAgICByID0gaW1hZ2UtPmNvbXBzWzBdLmRhdGE7DQotICAgICAgICAgICAgZyA9IGltYWdlLT5jb21wc1sxXS5kYXRhOw0KLSAgICAgICAgICAgIGIgPSBpbWFnZS0+Y29tcHNbMl0uZGF0YTsNCi0gICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBtYXg7ICsraSkgew0KLSAgICAgICAgICAgICAgICAqcisrID0gKGludCkgKiBvdXQrKzsNCi0gICAgICAgICAgICAgICAgKmcrKyA9IChpbnQpICogb3V0Kys7DQotICAgICAgICAgICAgICAgICpiKysgPSAoaW50KSAqIG91dCsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9GcmVlKGluYnVmKTsNCi0gICAgICAgICAgICBGWF9GcmVlKG91dGJ1Zik7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICppbmJ1ZiwgKm91dGJ1ZiwgKmluLCAqb3V0Ow0KLSAgICAgICAgICAgIG1heCA9IG1heF93ICogbWF4X2g7DQotICAgICAgICAgICAgbnJfc2FtcGxlcyA9IChjbXNVSW50MzJOdW1iZXIpbWF4ICogMyAqIChjbXNVSW50MzJOdW1iZXIpc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsNCi0gICAgICAgICAgICBpbiA9IGluYnVmID0gRlhfQWxsb2ModW5zaWduZWQgc2hvcnQsIG5yX3NhbXBsZXMpOw0KLSAgICAgICAgICAgIG91dCA9IG91dGJ1ZiA9IEZYX0FsbG9jKHVuc2lnbmVkIHNob3J0LCBucl9zYW1wbGVzKTsNCi0gICAgICAgICAgICByID0gaW1hZ2UtPmNvbXBzWzBdLmRhdGE7DQotICAgICAgICAgICAgZyA9IGltYWdlLT5jb21wc1sxXS5kYXRhOw0KLSAgICAgICAgICAgIGIgPSBpbWFnZS0+Y29tcHNbMl0uZGF0YTsNCi0gICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBtYXg7ICsraSkgew0KLSAgICAgICAgICAgICAgICAqaW4rKyA9ICh1bnNpZ25lZCBzaG9ydCkgKiByKys7DQotICAgICAgICAgICAgICAgICppbisrID0gKHVuc2lnbmVkIHNob3J0KSAqIGcrKzsNCi0gICAgICAgICAgICAgICAgKmluKysgPSAodW5zaWduZWQgc2hvcnQpICogYisrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjbXNEb1RyYW5zZm9ybSh0cmFuc2Zvcm0sIGluYnVmLCBvdXRidWYsIChjbXNVSW50MzJOdW1iZXIpbWF4KTsNCi0gICAgICAgICAgICByID0gaW1hZ2UtPmNvbXBzWzBdLmRhdGE7DQotICAgICAgICAgICAgZyA9IGltYWdlLT5jb21wc1sxXS5kYXRhOw0KLSAgICAgICAgICAgIGIgPSBpbWFnZS0+Y29tcHNbMl0uZGF0YTsNCi0gICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBtYXg7ICsraSkgew0KLSAgICAgICAgICAgICAgICAqcisrID0gKGludCkgKiBvdXQrKzsNCi0gICAgICAgICAgICAgICAgKmcrKyA9IChpbnQpICogb3V0Kys7DQotICAgICAgICAgICAgICAgICpiKysgPSAoaW50KSAqIG91dCsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9GcmVlKGluYnVmKTsNCi0gICAgICAgICAgICBGWF9GcmVlKG91dGJ1Zik7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICB1bnNpZ25lZCBjaGFyICppbiwgKmluYnVmLCAqb3V0LCAqb3V0YnVmOw0KLSAgICAgICAgbWF4ID0gbWF4X3cgKiBtYXhfaDsNCi0gICAgICAgIG5yX3NhbXBsZXMgPSAoY21zVUludDMyTnVtYmVyKW1heCAqIDMgKiBzaXplb2YodW5zaWduZWQgY2hhcik7DQotICAgICAgICBpbiA9IGluYnVmID0gRlhfQWxsb2ModW5zaWduZWQgY2hhciwgbnJfc2FtcGxlcyk7DQotICAgICAgICBvdXQgPSBvdXRidWYgPSBGWF9BbGxvYyh1bnNpZ25lZCBjaGFyLCBucl9zYW1wbGVzKTsNCi0gICAgICAgIGltYWdlLT5jb21wcyA9IChvcGpfaW1hZ2VfY29tcF90KikNCi0gICAgICAgICAgICAgICAgICAgICAgIHJlYWxsb2MoaW1hZ2UtPmNvbXBzLCAoaW1hZ2UtPm51bWNvbXBzICsgMikgKiBzaXplb2Yob3BqX2ltYWdlX2NvbXBfdCkpOw0KLSAgICAgICAgaWYoaW1hZ2UtPm51bWNvbXBzID09IDIpIHsNCi0gICAgICAgICAgICBpbWFnZS0+Y29tcHNbM10gPSBpbWFnZS0+Y29tcHNbMV07DQotICAgICAgICB9DQotICAgICAgICBpbWFnZS0+Y29tcHNbMV0gPSBpbWFnZS0+Y29tcHNbMF07DQotICAgICAgICBpbWFnZS0+Y29tcHNbMl0gPSBpbWFnZS0+Y29tcHNbMF07DQotICAgICAgICBpbWFnZS0+Y29tcHNbMV0uZGF0YSA9IEZYX0FsbG9jKGludCwgKHNpemVfdCltYXgpOw0KLSAgICAgICAgRlhTWVNfbWVtc2V0OChpbWFnZS0+Y29tcHNbMV0uZGF0YSwgMCwgc2l6ZW9mKGludCkgKiAoc2l6ZV90KW1heCk7DQotICAgICAgICBpbWFnZS0+Y29tcHNbMl0uZGF0YSA9IEZYX0FsbG9jKGludCwgKHNpemVfdCltYXgpOw0KLSAgICAgICAgRlhTWVNfbWVtc2V0OChpbWFnZS0+Y29tcHNbMl0uZGF0YSwgMCwgc2l6ZW9mKGludCkgKiAoc2l6ZV90KW1heCk7DQotICAgICAgICBpbWFnZS0+bnVtY29tcHMgKz0gMjsNCi0gICAgICAgIHIgPSBpbWFnZS0+Y29tcHNbMF0uZGF0YTsNCi0gICAgICAgIGZvcihpID0gMDsgaSA8IG1heDsgKytpKSB7DQotICAgICAgICAgICAgKmluKysgPSAodW5zaWduZWQgY2hhcikgKiByKys7DQotICAgICAgICB9DQotICAgICAgICBjbXNEb1RyYW5zZm9ybSh0cmFuc2Zvcm0sIGluYnVmLCBvdXRidWYsIChjbXNVSW50MzJOdW1iZXIpbWF4KTsNCi0gICAgICAgIHIgPSBpbWFnZS0+Y29tcHNbMF0uZGF0YTsNCi0gICAgICAgIGcgPSBpbWFnZS0+Y29tcHNbMV0uZGF0YTsNCi0gICAgICAgIGIgPSBpbWFnZS0+Y29tcHNbMl0uZGF0YTsNCi0gICAgICAgIGZvcihpID0gMDsgaSA8IG1heDsgKytpKSB7DQotICAgICAgICAgICAgKnIrKyA9IChpbnQpICogb3V0Kys7DQotICAgICAgICAgICAgKmcrKyA9IChpbnQpICogb3V0Kys7DQotICAgICAgICAgICAgKmIrKyA9IChpbnQpICogb3V0Kys7DQotICAgICAgICB9DQotICAgICAgICBGWF9GcmVlKGluYnVmKTsNCi0gICAgICAgIEZYX0ZyZWUob3V0YnVmKTsNCi0gICAgfQ0KLSAgICBjbXNEZWxldGVUcmFuc2Zvcm0odHJhbnNmb3JtKTsNCi19DQotdm9pZCBjb2xvcl9hcHBseV9jb252ZXJzaW9uKG9wal9pbWFnZV90ICppbWFnZSkNCi17DQotICAgIGludCAqcm93Ow0KLSAgICBpbnQgZW51bWNzLCBudW1jb21wczsNCi0gICAgbnVtY29tcHMgPSBpbWFnZS0+bnVtY29tcHM7DQotICAgIGlmKG51bWNvbXBzIDwgMykgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHJvdyA9IChpbnQqKWltYWdlLT5pY2NfcHJvZmlsZV9idWY7DQotICAgIGVudW1jcyA9IHJvd1swXTsNCi0gICAgaWYoZW51bWNzID09IDE0KSB7DQotICAgICAgICBpbnQgKkwsICphLCAqYiwgKnJlZCwgKmdyZWVuLCAqYmx1ZSwgKnNyYzAsICpzcmMxLCAqc3JjMjsNCi0gICAgICAgIGRvdWJsZSBybCwgb2wsIHJhLCBvYSwgcmIsIG9iLCBwcmVjMCwgcHJlYzEsIHByZWMyOw0KLSAgICAgICAgZG91YmxlIG1pbkwsIG1heEwsIG1pbmEsIG1heGEsIG1pbmIsIG1heGI7DQotICAgICAgICB1bnNpZ25lZCBpbnQgZGVmYXVsdF90eXBlLCBpbDsNCi0gICAgICAgIHVuc2lnbmVkIGludCBpLCBtYXgsIGlsbHU7DQotICAgICAgICBjbXNIUFJPRklMRSBpbiwgb3V0Ow0KLSAgICAgICAgY21zSFRSQU5TRk9STSB0cmFuc2Zvcm07DQotICAgICAgICBjbXNVSW50MTZOdW1iZXIgUkdCWzNdOw0KLSAgICAgICAgY21zQ0lFTGFiIExhYjsNCi0gICAgICAgIGlsbHUgPSAwOw0KLSAgICAgICAgaWwgPSAwOw0KLSAgICAgICAgaW4gPSBjbXNDcmVhdGVMYWI0UHJvZmlsZShOVUxMKTsNCi0gICAgICAgIG91dCA9IGNtc0NyZWF0ZV9zUkdCUHJvZmlsZSgpOw0KLSAgICAgICAgdHJhbnNmb3JtID0NCi0gICAgICAgICAgICBjbXNDcmVhdGVUcmFuc2Zvcm0oaW4sIFRZUEVfTGFiX0RCTCwgb3V0LCBUWVBFX1JHQl8xNiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5URU5UX1BFUkNFUFRVQUwsIDApOw0KLSAgICAgICAgY21zQ2xvc2VQcm9maWxlKGluKTsNCi0gICAgICAgIGNtc0Nsb3NlUHJvZmlsZShvdXQpOw0KLSAgICAgICAgaWYodHJhbnNmb3JtID09IE5VTEwpIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBwcmVjMCA9IChkb3VibGUpaW1hZ2UtPmNvbXBzWzBdLnByZWM7DQotICAgICAgICBwcmVjMSA9IChkb3VibGUpaW1hZ2UtPmNvbXBzWzFdLnByZWM7DQotICAgICAgICBwcmVjMiA9IChkb3VibGUpaW1hZ2UtPmNvbXBzWzJdLnByZWM7DQotICAgICAgICBkZWZhdWx0X3R5cGUgPSByb3dbMV07DQotICAgICAgICBpZihkZWZhdWx0X3R5cGUgPT0gMHg0NDQ1NDYwMCkgew0KLSAgICAgICAgICAgIHJsID0gMTAwOw0KLSAgICAgICAgICAgIHJhID0gMTcwOw0KLSAgICAgICAgICAgIHJiID0gMjAwOw0KLSAgICAgICAgICAgIG9sID0gMDsNCi0gICAgICAgICAgICBvYSA9IHBvdygyLCBwcmVjMSAtIDEpOw0KLSAgICAgICAgICAgIG9iID0gcG93KDIsIHByZWMyIC0gMikgICsgcG93KDIsIHByZWMyIC0gMyk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHJsID0gcm93WzJdOw0KLSAgICAgICAgICAgIHJhID0gcm93WzRdOw0KLSAgICAgICAgICAgIHJiID0gcm93WzZdOw0KLSAgICAgICAgICAgIG9sID0gcm93WzNdOw0KLSAgICAgICAgICAgIG9hID0gcm93WzVdOw0KLSAgICAgICAgICAgIG9iID0gcm93WzddOw0KLSAgICAgICAgfQ0KLSAgICAgICAgTCA9IHNyYzAgPSBpbWFnZS0+Y29tcHNbMF0uZGF0YTsNCi0gICAgICAgIGEgPSBzcmMxID0gaW1hZ2UtPmNvbXBzWzFdLmRhdGE7DQotICAgICAgICBiID0gc3JjMiA9IGltYWdlLT5jb21wc1syXS5kYXRhOw0KLSAgICAgICAgbWF4ID0gaW1hZ2UtPmNvbXBzWzBdLncgKiBpbWFnZS0+Y29tcHNbMF0uaDsNCi0gICAgICAgIHJlZCA9IEZYX0FsbG9jKGludCwgbWF4KTsNCi0gICAgICAgIGltYWdlLT5jb21wc1swXS5kYXRhID0gcmVkOw0KLSAgICAgICAgZ3JlZW4gPSBGWF9BbGxvYyhpbnQsIG1heCk7DQotICAgICAgICBpbWFnZS0+Y29tcHNbMV0uZGF0YSA9IGdyZWVuOw0KLSAgICAgICAgYmx1ZSA9IEZYX0FsbG9jKGludCwgbWF4KTsNCi0gICAgICAgIGltYWdlLT5jb21wc1syXS5kYXRhID0gYmx1ZTsNCi0gICAgICAgIG1pbkwgPSAtKHJsICogb2wpIC8gKHBvdygyLCBwcmVjMCkgLSAxKTsNCi0gICAgICAgIG1heEwgPSBtaW5MICsgcmw7DQotICAgICAgICBtaW5hID0gLShyYSAqIG9hKSAvIChwb3coMiwgcHJlYzEpIC0gMSk7DQotICAgICAgICBtYXhhID0gbWluYSArIHJhOw0KLSAgICAgICAgbWluYiA9IC0ocmIgKiBvYikgLyAocG93KDIsIHByZWMyKSAtIDEpOw0KLSAgICAgICAgbWF4YiA9IG1pbmIgKyByYjsNCi0gICAgICAgIGZvcihpID0gMDsgaSA8IG1heDsgKytpKSB7DQotICAgICAgICAgICAgTGFiLkwgPSBtaW5MICsgKGRvdWJsZSkoKkwpICogKG1heEwgLSBtaW5MKSAvIChwb3coMiwgcHJlYzApIC0gMSk7DQotICAgICAgICAgICAgKytMOw0KLSAgICAgICAgICAgIExhYi5hID0gbWluYSArIChkb3VibGUpKCphKSAqIChtYXhhIC0gbWluYSkgLyAocG93KDIsIHByZWMxKSAtIDEpOw0KLSAgICAgICAgICAgICsrYTsNCi0gICAgICAgICAgICBMYWIuYiA9IG1pbmIgKyAoZG91YmxlKSgqYikgKiAobWF4YiAtIG1pbmIpIC8gKHBvdygyLCBwcmVjMikgLSAxKTsNCi0gICAgICAgICAgICArK2I7DQotICAgICAgICAgICAgY21zRG9UcmFuc2Zvcm0odHJhbnNmb3JtLCAmTGFiLCBSR0IsIDEpOw0KLSAgICAgICAgICAgICpyZWQrKyA9IFJHQlswXTsNCi0gICAgICAgICAgICAqZ3JlZW4rKyA9IFJHQlsxXTsNCi0gICAgICAgICAgICAqYmx1ZSsrID0gUkdCWzJdOw0KLSAgICAgICAgfQ0KLSAgICAgICAgY21zRGVsZXRlVHJhbnNmb3JtKHRyYW5zZm9ybSk7DQotICAgICAgICBGWF9GcmVlKHNyYzApOw0KLSAgICAgICAgRlhfRnJlZShzcmMxKTsNCi0gICAgICAgIEZYX0ZyZWUoc3JjMik7DQotICAgICAgICBpbWFnZS0+Y29sb3Jfc3BhY2UgPSBPUEpfQ0xSU1BDX1NSR0I7DQotICAgICAgICBpbWFnZS0+Y29tcHNbMF0ucHJlYyA9IDE2Ow0KLSAgICAgICAgaW1hZ2UtPmNvbXBzWzFdLnByZWMgPSAxNjsNCi0gICAgICAgIGltYWdlLT5jb21wc1syXS5wcmVjID0gMTY7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi19DQotY2xhc3MgQ0pQWF9EZWNvZGVyIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDSlBYX0RlY29kZXIoKTsNCi0gICAgfkNKUFhfRGVjb2RlcigpOw0KLSAgICBGWF9CT09MCUluaXQoY29uc3QgdW5zaWduZWQgY2hhciogc3JjX2RhdGEsIGludCBzcmNfc2l6ZSk7DQotICAgIHZvaWQJR2V0SW5mbyhGWF9EV09SRCYgd2lkdGgsIEZYX0RXT1JEJiBoZWlnaHQsIEZYX0RXT1JEJiBjb2Rlc3RyZWFtX25Db21wcywgRlhfRFdPUkQmIG91dHB1dF9uQ29tcHMpOw0KLSAgICBGWF9CT09MCURlY29kZShGWF9MUEJZVEUgZGVzdF9idWYsIGludCBwaXRjaCwgRlhfQk9PTCBiVHJhbnNsYXRlQ29sb3IsIEZYX0xQQllURSBvZmZzZXRzKTsNCi0gICAgRlhfTFBDQllURSBtX1NyY0RhdGE7DQotICAgIGludCBtX1NyY1NpemU7DQotICAgIG9wal9pbWFnZV90ICppbWFnZTsNCi0gICAgb3BqX2NvZGVjX3QqIGxfY29kZWM7DQotICAgIG9wal9zdHJlYW1fdCAqbF9zdHJlYW07DQotICAgIEZYX0JPT0wgbV91c2VDb2xvclNwYWNlOw0KLX07DQotQ0pQWF9EZWNvZGVyOjpDSlBYX0RlY29kZXIoKTogaW1hZ2UoTlVMTCksIGxfY29kZWMoTlVMTCksIGxfc3RyZWFtKE5VTEwpLCBtX3VzZUNvbG9yU3BhY2UoRkFMU0UpDQotew0KLX0NCi1DSlBYX0RlY29kZXI6On5DSlBYX0RlY29kZXIoKQ0KLXsNCi0gICAgaWYobF9jb2RlYykgew0KLSAgICAgICAgb3BqX2Rlc3Ryb3lfY29kZWMobF9jb2RlYyk7DQotICAgIH0NCi0gICAgaWYobF9zdHJlYW0pIHsNCi0gICAgICAgIG9wal9zdHJlYW1fZGVzdHJveShsX3N0cmVhbSk7DQotICAgIH0NCi0gICAgaWYoaW1hZ2UpIHsNCi0gICAgICAgIG9wal9pbWFnZV9kZXN0cm95KGltYWdlKTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENKUFhfRGVjb2Rlcjo6SW5pdChjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmNfZGF0YSwgaW50IHNyY19zaXplKQ0KLXsNCi0gICAgb3BqX2RwYXJhbWV0ZXJzX3QgcGFyYW1ldGVyczsNCi0gICAgdHJ5IHsNCi0gICAgICAgIGltYWdlID0gTlVMTDsNCi0gICAgICAgIG1fU3JjRGF0YSA9IHNyY19kYXRhOw0KLSAgICAgICAgbV9TcmNTaXplID0gc3JjX3NpemU7DQotICAgICAgICBkZWNvZGVEYXRhIHNyY0RhdGE7DQotICAgICAgICBzcmNEYXRhLm9mZnNldCAgPSAwOw0KLSAgICAgICAgc3JjRGF0YS5zcmNfc2l6ZSA9IHNyY19zaXplOw0KLSAgICAgICAgc3JjRGF0YS5zcmNfZGF0YSA9IHNyY19kYXRhOw0KLSAgICAgICAgbF9zdHJlYW0gPSBmeF9vcGpfc3RyZWFtX2NyZWF0ZV9tZW1vcnlfc3RyZWFtKCZzcmNEYXRhLCBPUEpfSjJLX1NUUkVBTV9DSFVOS19TSVpFLCAxKTsNCi0gICAgICAgIGlmIChsX3N0cmVhbSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgb3BqX3NldF9kZWZhdWx0X2RlY29kZXJfcGFyYW1ldGVycygmcGFyYW1ldGVycyk7DQotICAgICAgICBwYXJhbWV0ZXJzLmRlY29kX2Zvcm1hdCA9IDA7DQotICAgICAgICBwYXJhbWV0ZXJzLmNvZF9mb3JtYXQgPSAzOw0KLSAgICAgICAgaWYoRlhTWVNfbWVtY21wMzIobV9TcmNEYXRhLCAiXHgwMFx4MDBceDAwXHgwY1x4NmFceDUwXHgyMFx4MjBceDBkXHgwYVx4ODdceDBhIiwgMTIpID09IDApIHsNCi0gICAgICAgICAgICBsX2NvZGVjID0gb3BqX2NyZWF0ZV9kZWNvbXByZXNzKE9QSl9DT0RFQ19KUDIpOw0KLSAgICAgICAgICAgIHBhcmFtZXRlcnMuZGVjb2RfZm9ybWF0ID0gMTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbF9jb2RlYyA9IG9wal9jcmVhdGVfZGVjb21wcmVzcyhPUEpfQ09ERUNfSjJLKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKCFsX2NvZGVjKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgb3BqX3NldF9pbmZvX2hhbmRsZXIobF9jb2RlYywgZnhfaW5mb19jYWxsYmFjaywgMDApOw0KLSAgICAgICAgb3BqX3NldF93YXJuaW5nX2hhbmRsZXIobF9jb2RlYywgZnhfd2FybmluZ19jYWxsYmFjaywgMDApOw0KLSAgICAgICAgb3BqX3NldF9lcnJvcl9oYW5kbGVyKGxfY29kZWMsIGZ4X2Vycm9yX2NhbGxiYWNrLCAwMCk7DQotICAgICAgICBpZiAoICFvcGpfc2V0dXBfZGVjb2RlcihsX2NvZGVjLCAmcGFyYW1ldGVycykgKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoISBvcGpfcmVhZF9oZWFkZXIobF9zdHJlYW0sIGxfY29kZWMsICZpbWFnZSkpIHsNCi0gICAgICAgICAgICBpbWFnZSA9IE5VTEw7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYodGhpcy0+bV91c2VDb2xvclNwYWNlKSB7DQotICAgICAgICAgICAgaW1hZ2UtPnVzZUNvbG9yU3BhY2UgPSAxOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpbWFnZS0+dXNlQ29sb3JTcGFjZSA9IDA7DQotICAgICAgICB9DQotICAgICAgICBpZiAoIXBhcmFtZXRlcnMubmJfdGlsZV90b19kZWNvZGUpIHsNCi0gICAgICAgICAgICBpZiAoIW9wal9zZXRfZGVjb2RlX2FyZWEobF9jb2RlYywgaW1hZ2UsIHBhcmFtZXRlcnMuREFfeDAsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuREFfeTAsIHBhcmFtZXRlcnMuREFfeDEsIHBhcmFtZXRlcnMuREFfeTEpKSB7DQotICAgICAgICAgICAgICAgIG9wal9pbWFnZV9kZXN0cm95KGltYWdlKTsNCi0gICAgICAgICAgICAgICAgaW1hZ2UgPSBOVUxMOw0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmICghKG9wal9kZWNvZGUobF9jb2RlYywgbF9zdHJlYW0sIGltYWdlKSAmJiBvcGpfZW5kX2RlY29tcHJlc3MobF9jb2RlYywJbF9zdHJlYW0pKSkgew0KLSAgICAgICAgICAgICAgICBvcGpfaW1hZ2VfZGVzdHJveShpbWFnZSk7DQotICAgICAgICAgICAgICAgIGltYWdlID0gTlVMTDsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYgKCFvcGpfZ2V0X2RlY29kZWRfdGlsZShsX2NvZGVjLCBsX3N0cmVhbSwgaW1hZ2UsIHBhcmFtZXRlcnMudGlsZV9pbmRleCkpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIG9wal9zdHJlYW1fZGVzdHJveShsX3N0cmVhbSk7DQotICAgICAgICBsX3N0cmVhbSA9IE5VTEw7DQotICAgICAgICBpZiggaW1hZ2UtPmNvbG9yX3NwYWNlICE9IE9QSl9DTFJTUENfU1lDQw0KLSAgICAgICAgICAgICAgICAmJiBpbWFnZS0+bnVtY29tcHMgPT0gMyAmJiBpbWFnZS0+Y29tcHNbMF0uZHggPT0gaW1hZ2UtPmNvbXBzWzBdLmR5DQotICAgICAgICAgICAgICAgICYmIGltYWdlLT5jb21wc1sxXS5keCAhPSAxICkgew0KLSAgICAgICAgICAgIGltYWdlLT5jb2xvcl9zcGFjZSA9IE9QSl9DTFJTUENfU1lDQzsNCi0gICAgICAgIH0gZWxzZSBpZiAoaW1hZ2UtPm51bWNvbXBzIDw9IDIpIHsNCi0gICAgICAgICAgICBpbWFnZS0+Y29sb3Jfc3BhY2UgPSBPUEpfQ0xSU1BDX0dSQVk7DQotICAgICAgICB9DQotICAgICAgICBpZihpbWFnZS0+Y29sb3Jfc3BhY2UgPT0gT1BKX0NMUlNQQ19TWUNDKSB7DQotICAgICAgICAgICAgY29sb3Jfc3ljY190b19yZ2IoaW1hZ2UpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoaW1hZ2UtPmljY19wcm9maWxlX2J1ZiAmJiAhaW1hZ2UtPnVzZUNvbG9yU3BhY2UpIHsNCi0gICAgICAgICAgICBGWF9GcmVlKGltYWdlLT5pY2NfcHJvZmlsZV9idWYpOw0KLSAgICAgICAgICAgIGltYWdlLT5pY2NfcHJvZmlsZV9idWYgPSBOVUxMOw0KLSAgICAgICAgICAgIGltYWdlLT5pY2NfcHJvZmlsZV9sZW4gPSAwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoIWltYWdlKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICB9IGNhdGNoICguLi4pIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotdm9pZCBDSlBYX0RlY29kZXI6OkdldEluZm8oRlhfRFdPUkQmIHdpZHRoLCBGWF9EV09SRCYgaGVpZ2h0LCBGWF9EV09SRCYgY29kZXN0cmVhbV9uQ29tcHMsIEZYX0RXT1JEJiBvdXRwdXRfbkNvbXBzKQ0KLXsNCi0gICAgd2lkdGggPSAoRlhfRFdPUkQpaW1hZ2UtPngxOw0KLSAgICBoZWlnaHQgPSAoRlhfRFdPUkQpaW1hZ2UtPnkxOw0KLSAgICBvdXRwdXRfbkNvbXBzID0gY29kZXN0cmVhbV9uQ29tcHMgPSAoRlhfRFdPUkQpaW1hZ2UtPm51bWNvbXBzOw0KLX0NCi1GWF9CT09MIENKUFhfRGVjb2Rlcjo6RGVjb2RlKEZYX0xQQllURSBkZXN0X2J1ZiwgaW50IHBpdGNoLCBGWF9CT09MIGJUcmFuc2xhdGVDb2xvciwgRlhfTFBCWVRFIG9mZnNldHMpDQotew0KLSAgICBGWF9CWVRFKiogY2hhbm5lbF9idWZzOw0KLSAgICBpbnQqIGFkanVzdF9jb21wczsNCi0gICAgaW50IGksIHdpZCwgaGVpLCByb3csIGNvbCwgY2hhbm5lbCwgc3JjOw0KLSAgICBGWF9CT09MIGZsYWc7DQotICAgIEZYX0xQQllURSBwQ2hhbm5lbCwgcFNjYW5saW5lLCBwUGl4ZWw7DQotICAgIHRyeSB7DQotICAgICAgICBpZihpbWFnZS0+Y29tcHNbMF0udyAhPSBpbWFnZS0+eDEgfHwgaW1hZ2UtPmNvbXBzWzBdLmggIT0gaW1hZ2UtPnkxKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYocGl0Y2ggPCAoaW50KShpbWFnZS0+Y29tcHNbMF0udyAqIDggKiBpbWFnZS0+bnVtY29tcHMgKyAzMSkgPj4gNSA8PCAyKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhTWVNfbWVtc2V0OChkZXN0X2J1ZiwgMHhmZiwgaW1hZ2UtPnkxICogcGl0Y2gpOw0KLSAgICAgICAgY2hhbm5lbF9idWZzID0gRlhfQWxsb2MoRlhfQllURSosIGltYWdlLT5udW1jb21wcyk7DQotICAgICAgICBpZiAoY2hhbm5lbF9idWZzID09IE5VTEwpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBhZGp1c3RfY29tcHMgPSBGWF9BbGxvYyhpbnQsIGltYWdlLT5udW1jb21wcyk7DQotICAgICAgICBpZiAoYWRqdXN0X2NvbXBzID09IE5VTEwpIHsNCi0gICAgICAgICAgICBGWF9GcmVlKGNoYW5uZWxfYnVmcyk7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZmxhZyA9IFRSVUU7DQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKGludClpbWFnZS0+bnVtY29tcHM7IGkgKyspIHsNCi0gICAgICAgICAgICBjaGFubmVsX2J1ZnNbaV0gPSBkZXN0X2J1ZiArIG9mZnNldHNbaV07DQotICAgICAgICAgICAgYWRqdXN0X2NvbXBzW2ldID0gaW1hZ2UtPmNvbXBzW2ldLnByZWMgLSA4Ow0KLSAgICAgICAgICAgIGlmKGkgPiAwKSB7DQotICAgICAgICAgICAgICAgIGlmKGltYWdlLT5jb21wc1tpXS5keCAhPSBpbWFnZS0+Y29tcHNbaSAtIDFdLmR4DQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgaW1hZ2UtPmNvbXBzW2ldLmR5ICE9IGltYWdlLT5jb21wc1tpIC0gMV0uZHkNCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBpbWFnZS0+Y29tcHNbaV0ucHJlYyAhPSBpbWFnZS0+Y29tcHNbaSAtIDFdLnByZWMpIHsNCi0gICAgICAgICAgICAgICAgICAgIGZsYWcgPSBGQUxTRTsNCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgd2lkID0gaW1hZ2UtPmNvbXBzWzBdLnc7DQotICAgICAgICBoZWkgPSBpbWFnZS0+Y29tcHNbMF0uaDsNCi0gICAgICAgIGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCAoaW50KWltYWdlLT5udW1jb21wczsgY2hhbm5lbCsrKSB7DQotICAgICAgICAgICAgcENoYW5uZWwgPSBjaGFubmVsX2J1ZnNbY2hhbm5lbF07DQotICAgICAgICAgICAgaWYoYWRqdXN0X2NvbXBzW2NoYW5uZWxdIDwgMCkgew0KLSAgICAgICAgICAgICAgICBmb3Iocm93ID0gMDsgcm93IDwgaGVpOyByb3crKykgew0KLSAgICAgICAgICAgICAgICAgICAgcFNjYW5saW5lID0gcENoYW5uZWwgKyByb3cgKiBwaXRjaDsNCi0gICAgICAgICAgICAgICAgICAgIGZvciAoY29sID0gMDsgY29sIDwgd2lkOyBjb2wrKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBQaXhlbCA9IHBTY2FubGluZSArIGNvbCAqIGltYWdlLT5udW1jb21wczsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzcmMgPSBpbWFnZS0+Y29tcHNbY2hhbm5lbF0uZGF0YVtyb3cgKiB3aWQgKyBjb2xdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNyYyArPSBpbWFnZS0+Y29tcHNbY2hhbm5lbF0uc2duZCA/IDEgPDwgKGltYWdlLT5jb21wc1tjaGFubmVsXS5wcmVjIC0gMSkgOiAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGp1c3RfY29tcHNbY2hhbm5lbF0gPiAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwUGl4ZWwgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwUGl4ZWwgPSAoRlhfQllURSkoc3JjIDw8IC1hZGp1c3RfY29tcHNbY2hhbm5lbF0pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGZvcihyb3cgPSAwOyByb3cgPCBoZWk7IHJvdysrKSB7DQotICAgICAgICAgICAgICAgICAgICBwU2NhbmxpbmUgPSBwQ2hhbm5lbCArIHJvdyAqIHBpdGNoOw0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCB3aWQ7IGNvbCsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcFBpeGVsID0gcFNjYW5saW5lICsgY29sICogaW1hZ2UtPm51bWNvbXBzOw0KLQkJCQkJCWlmICghaW1hZ2UtPmNvbXBzW2NoYW5uZWxdLmRhdGEpIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9IGltYWdlLT5jb21wc1tjaGFubmVsXS5kYXRhW3JvdyAqIHdpZCArIGNvbF07DQotICAgICAgICAgICAgICAgICAgICAgICAgc3JjICs9IGltYWdlLT5jb21wc1tjaGFubmVsXS5zZ25kID8gMSA8PCAoaW1hZ2UtPmNvbXBzW2NoYW5uZWxdLnByZWMgLSAxKSA6IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkanVzdF9jb21wc1tjaGFubmVsXSAtIDEgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwUGl4ZWwgPSAoRlhfQllURSkoKHNyYyA+PiBhZGp1c3RfY29tcHNbY2hhbm5lbF0pKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG1wUGl4ZWwgPSAoc3JjID4+IGFkanVzdF9jb21wc1tjaGFubmVsXSkgKyAoKHNyYyA+PiAoYWRqdXN0X2NvbXBzW2NoYW5uZWxdIC0gMSkpICUgMik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXBQaXhlbCA+IDI1NSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wUGl4ZWwgPSAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG1wUGl4ZWwgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBQaXhlbCA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBQaXhlbCA9IChGWF9CWVRFKXRtcFBpeGVsOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfSBjYXRjaCAoLi4uKSB7DQotICAgICAgICBpZiAoY2hhbm5lbF9idWZzKSB7DQotICAgICAgICAgICAgRlhfRnJlZShjaGFubmVsX2J1ZnMpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfRnJlZShhZGp1c3RfY29tcHMpOw0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYX0ZyZWUoY2hhbm5lbF9idWZzKTsNCi0gICAgRlhfRnJlZShhZGp1c3RfY29tcHMpOw0KLSAgICByZXR1cm4gVFJVRTsNCi1mYWlsZWQ6DQotICAgIEZYX0ZyZWUoY2hhbm5lbF9idWZzKTsNCi0gICAgRlhfRnJlZShhZGp1c3RfY29tcHMpOw0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLXZvaWQgaW5pdGlhbGl6ZV90cmFuc2l0aW9uX3RhYmxlKCk7DQotdm9pZCBpbml0aWFsaXplX3NpZ25pZmljYW5jZV9sdXRzKCk7DQotdm9pZCBpbml0aWFsaXplX3NpZ25fbHV0KCk7DQotQ0NvZGVjX0pweE1vZHVsZTo6Q0NvZGVjX0pweE1vZHVsZSgpDQotew0KLX0NCi12b2lkKiBDQ29kZWNfSnB4TW9kdWxlOjpDcmVhdGVEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUgLCBGWF9CT09MIHVzZUNvbG9yU3BhY2UpDQotew0KLSAgICBDSlBYX0RlY29kZXIqIHBEZWNvZGVyID0gRlhfTkVXIENKUFhfRGVjb2RlcjsNCi0gICAgaWYgKHBEZWNvZGVyID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHBEZWNvZGVyLT5tX3VzZUNvbG9yU3BhY2UgPSB1c2VDb2xvclNwYWNlOw0KLSAgICBpZiAoIXBEZWNvZGVyLT5Jbml0KHNyY19idWYsIHNyY19zaXplKSkgew0KLSAgICAgICAgZGVsZXRlIHBEZWNvZGVyOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIHBEZWNvZGVyOw0KLX0NCi12b2lkIENDb2RlY19KcHhNb2R1bGU6OkdldEltYWdlSW5mbyhGWF9MUFZPSUQgY3R4LCBGWF9EV09SRCYgd2lkdGgsIEZYX0RXT1JEJiBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQmIGNvZGVzdHJlYW1fbkNvbXBzLCBGWF9EV09SRCYgb3V0cHV0X25Db21wcykNCi17DQotICAgIENKUFhfRGVjb2RlciogcERlY29kZXIgPSAoQ0pQWF9EZWNvZGVyKiljdHg7DQotICAgIHBEZWNvZGVyLT5HZXRJbmZvKHdpZHRoLCBoZWlnaHQsIGNvZGVzdHJlYW1fbkNvbXBzLCBvdXRwdXRfbkNvbXBzKTsNCi19DQotRlhfQk9PTCBDQ29kZWNfSnB4TW9kdWxlOjpEZWNvZGUodm9pZCogY3R4LCBGWF9MUEJZVEUgZGVzdF9kYXRhLCBpbnQgcGl0Y2gsIEZYX0JPT0wgYlRyYW5zbGF0ZUNvbG9yLCBGWF9MUEJZVEUgb2Zmc2V0cykNCi17DQotICAgIENKUFhfRGVjb2RlciogcERlY29kZXIgPSAoQ0pQWF9EZWNvZGVyKiljdHg7DQotICAgIHJldHVybiBwRGVjb2Rlci0+RGVjb2RlKGRlc3RfZGF0YSwgcGl0Y2gsIGJUcmFuc2xhdGVDb2xvciwgb2Zmc2V0cyk7DQotfQ0KLXZvaWQgQ0NvZGVjX0pweE1vZHVsZTo6RGVzdHJveURlY29kZXIodm9pZCogY3R4KQ0KLXsNCi0gICAgQ0pQWF9EZWNvZGVyKiBwRGVjb2RlciA9IChDSlBYX0RlY29kZXIqKWN0eDsNCi0gICAgZGVsZXRlIHBEZWNvZGVyOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgiCisjaW5jbHVkZSAiY29kZWNfaW50LmgiCisjaW5jbHVkZSAiLi4vZnhfbGlib3BlbmpwZWcvbGlib3BlbmpwZWcyMC9vcGVuanBlZy5oIgorI2luY2x1ZGUgIi4uL2xjbXMyL2luY2x1ZGUvZnhfbGNtczIuaCIKK3N0YXRpYyB2b2lkIGZ4X2Vycm9yX2NhbGxiYWNrKGNvbnN0IGNoYXIgKm1zZywgdm9pZCAqY2xpZW50X2RhdGEpCit7CisgICAgKHZvaWQpY2xpZW50X2RhdGE7Cit9CitzdGF0aWMgdm9pZCBmeF93YXJuaW5nX2NhbGxiYWNrKGNvbnN0IGNoYXIgKm1zZywgdm9pZCAqY2xpZW50X2RhdGEpCit7CisgICAgKHZvaWQpY2xpZW50X2RhdGE7Cit9CitzdGF0aWMgdm9pZCBmeF9pbmZvX2NhbGxiYWNrKGNvbnN0IGNoYXIgKm1zZywgdm9pZCAqY2xpZW50X2RhdGEpCit7CisgICAgKHZvaWQpY2xpZW50X2RhdGE7Cit9Cit0eXBlZGVmIHN0cnVjdCB7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogc3JjX2RhdGE7CisgICAgaW50CQkJCQkgc3JjX3NpemU7CisgICAgaW50CQkJCQkgb2Zmc2V0OworfSBkZWNvZGVEYXRhOworc3RhdGljIE9QSl9TSVpFX1Qgb3BqX3JlYWRfZnJvbV9tZW1vcnkgKHZvaWQgKiBwX2J1ZmZlciwgT1BKX1NJWkVfVCBwX25iX2J5dGVzLCAgZGVjb2RlRGF0YSogc3JjRGF0YSkKK3sKKyAgICBpZihzcmNEYXRhID09IE5VTEwgfHwgc3JjRGF0YS0+c3JjX3NpemUgPT0gMCB8fCBzcmNEYXRhLT5zcmNfZGF0YSA9PSBOVUxMIHx8IHNyY0RhdGEtPm9mZnNldCA+PSBzcmNEYXRhLT5zcmNfc2l6ZSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIE9QSl9TSVpFX1QgcmVhZGxlbmd0aCA9IHBfbmJfYnl0ZXM7CisgICAgT1BKX1NJWkVfVCBidWZmZXJMZW5ndGggPSAoT1BKX1NJWkVfVCkoc3JjRGF0YS0+c3JjX3NpemUgLSBzcmNEYXRhLT5vZmZzZXQpOworICAgIGlmKGJ1ZmZlckxlbmd0aCA8PSAwKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZihidWZmZXJMZW5ndGggPD0gcF9uYl9ieXRlcykgeworICAgICAgICByZWFkbGVuZ3RoID0gYnVmZmVyTGVuZ3RoOworICAgIH0KKyAgICBtZW1jcHkocF9idWZmZXIsICYoc3JjRGF0YS0+c3JjX2RhdGFbc3JjRGF0YS0+b2Zmc2V0XSksIHJlYWRsZW5ndGgpOworICAgIHNyY0RhdGEtPm9mZnNldCArPSAoaW50KXJlYWRsZW5ndGg7CisgICAgcmV0dXJuIHJlYWRsZW5ndGg7Cit9CitzdGF0aWMgT1BKX1NJWkVfVCBvcGpfd3JpdGVfZnJvbV9tZW1vcnkgKHZvaWQgKiBwX2J1ZmZlciwgT1BKX1NJWkVfVCBwX25iX2J5dGVzLCBkZWNvZGVEYXRhKiBzcmNEYXRhKQoreworICAgIGlmKHNyY0RhdGEgPT0gTlVMTCB8fCBzcmNEYXRhLT5zcmNfc2l6ZSA9PSAwIHx8IHNyY0RhdGEtPnNyY19kYXRhID09IE5VTEwgfHwgc3JjRGF0YS0+b2Zmc2V0ID49IHNyY0RhdGEtPnNyY19zaXplKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgT1BKX1NJWkVfVCB3cml0ZUxlbmd0aCA9IHBfbmJfYnl0ZXM7CisgICAgT1BKX1NJWkVfVCBidWZmZXJMZW5ndGggPSAoT1BKX1NJWkVfVCkoc3JjRGF0YS0+c3JjX3NpemUgLSBzcmNEYXRhLT5vZmZzZXQpOworICAgIGlmKGJ1ZmZlckxlbmd0aCA8PSBwX25iX2J5dGVzKSB7CisgICAgICAgIHdyaXRlTGVuZ3RoID0gYnVmZmVyTGVuZ3RoOworICAgIH0KKyAgICBtZW1jcHkoKHZvaWQqJikoc3JjRGF0YS0+c3JjX2RhdGFbc3JjRGF0YS0+b2Zmc2V0XSksIHBfYnVmZmVyLCB3cml0ZUxlbmd0aCk7CisgICAgc3JjRGF0YS0+b2Zmc2V0ICs9IChpbnQpd3JpdGVMZW5ndGg7CisgICAgcmV0dXJuIHdyaXRlTGVuZ3RoOworfQorc3RhdGljIE9QSl9PRkZfVCBvcGpfc2tpcF9mcm9tX21lbW9yeSAoT1BKX09GRl9UIHBfbmJfYnl0ZXMsIGRlY29kZURhdGEqIHNyY0RhdGEpCit7CisgICAgaWYoc3JjRGF0YSA9PSBOVUxMIHx8IHNyY0RhdGEtPnNyY19zaXplID09IDAgfHwgc3JjRGF0YS0+c3JjX2RhdGEgPT0gTlVMTCB8fCBzcmNEYXRhLT5vZmZzZXQgPj0gc3JjRGF0YS0+c3JjX3NpemUpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBPUEpfT0ZGX1QgcG9zdGlvbiA9IHNyY0RhdGEtPm9mZnNldCArIHBfbmJfYnl0ZXM7CisgICAgaWYocG9zdGlvbiA8IDAgKSB7CisgICAgICAgIHBvc3Rpb24gPSAwOworICAgIH0gZWxzZSBpZiAocG9zdGlvbiA+IHNyY0RhdGEtPnNyY19zaXplKSB7CisgICAgfQorICAgIHNyY0RhdGEtPm9mZnNldCA9IChpbnQpcG9zdGlvbjsKKyAgICByZXR1cm4gcF9uYl9ieXRlczsKK30KK3N0YXRpYyBPUEpfQk9PTCBvcGpfc2Vla19mcm9tX21lbW9yeSAoT1BKX09GRl9UIHBfbmJfYnl0ZXMsIGRlY29kZURhdGEgKiBzcmNEYXRhKQoreworICAgIGlmKHNyY0RhdGEgPT0gTlVMTCB8fCBzcmNEYXRhLT5zcmNfc2l6ZSA9PSAwIHx8IHNyY0RhdGEtPnNyY19kYXRhID09IE5VTEwgfHwgc3JjRGF0YS0+b2Zmc2V0ID49IHNyY0RhdGEtPnNyY19zaXplKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgc3JjRGF0YS0+b2Zmc2V0ID0gKGludClwX25iX2J5dGVzOworICAgIGlmKHNyY0RhdGEtPm9mZnNldCA8IDApIHsKKyAgICAgICAgc3JjRGF0YS0+b2Zmc2V0ID0gMDsKKyAgICB9IGVsc2UgaWYoc3JjRGF0YS0+b2Zmc2V0ID4gc3JjRGF0YS0+c3JjX3NpemUpIHsKKyAgICAgICAgc3JjRGF0YS0+b2Zmc2V0ID0gc3JjRGF0YS0+c3JjX3NpemU7CisgICAgfQorICAgIHJldHVybiBPUEpfVFJVRTsKK30KK29wal9zdHJlYW1fdCogZnhfb3BqX3N0cmVhbV9jcmVhdGVfbWVtb3J5X3N0cmVhbSAoZGVjb2RlRGF0YSogZGF0YSwJT1BKX1NJWkVfVCBwX3NpemUsIAlPUEpfQk9PTCBwX2lzX3JlYWRfc3RyZWFtKQoreworICAgIG9wal9zdHJlYW1fdCogbF9zdHJlYW0gPSAwMDsKKyAgICBpZiAoIWRhdGEgfHwgISBkYXRhLT5zcmNfZGF0YSB8fCBkYXRhLT5zcmNfc2l6ZSA8PSAwICkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbF9zdHJlYW0gPSBvcGpfc3RyZWFtX2NyZWF0ZShwX3NpemUsIHBfaXNfcmVhZF9zdHJlYW0pOworICAgIGlmICghIGxfc3RyZWFtKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBvcGpfc3RyZWFtX3NldF91c2VyX2RhdGFfdjMobF9zdHJlYW0sIGRhdGEsIE5VTEwpOworICAgIG9wal9zdHJlYW1fc2V0X3VzZXJfZGF0YV9sZW5ndGgobF9zdHJlYW0sIGRhdGEtPnNyY19zaXplKTsKKyAgICBvcGpfc3RyZWFtX3NldF9yZWFkX2Z1bmN0aW9uKGxfc3RyZWFtLCAob3BqX3N0cmVhbV9yZWFkX2ZuKSBvcGpfcmVhZF9mcm9tX21lbW9yeSk7CisgICAgb3BqX3N0cmVhbV9zZXRfd3JpdGVfZnVuY3Rpb24obF9zdHJlYW0sIChvcGpfc3RyZWFtX3dyaXRlX2ZuKSBvcGpfd3JpdGVfZnJvbV9tZW1vcnkpOworICAgIG9wal9zdHJlYW1fc2V0X3NraXBfZnVuY3Rpb24obF9zdHJlYW0sIChvcGpfc3RyZWFtX3NraXBfZm4pIG9wal9za2lwX2Zyb21fbWVtb3J5KTsKKyAgICBvcGpfc3RyZWFtX3NldF9zZWVrX2Z1bmN0aW9uKGxfc3RyZWFtLCAob3BqX3N0cmVhbV9zZWVrX2ZuKSBvcGpfc2Vla19mcm9tX21lbW9yeSk7CisgICAgcmV0dXJuIGxfc3RyZWFtOworfQorc3RhdGljIHZvaWQgc3ljY190b19yZ2IoaW50IG9mZnNldCwgaW50IHVwYiwgaW50IHksIGludCBjYiwgaW50IGNyLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpvdXRfciwgaW50ICpvdXRfZywgaW50ICpvdXRfYikKK3sKKyAgICBpbnQgciwgZywgYjsKKyAgICBjYiAtPSBvZmZzZXQ7CisgICAgY3IgLT0gb2Zmc2V0OworICAgIHIgPSB5ICsgKGludCkoMS40MDIgKiAoZmxvYXQpY3IpOworICAgIGlmKHIgPCAwKSB7CisgICAgICAgIHIgPSAwOworICAgIH0gZWxzZSBpZihyID4gdXBiKSB7CisgICAgICAgIHIgPSB1cGI7CisgICAgfSAqb3V0X3IgPSByOworICAgIGcgPSB5IC0gKGludCkoMC4zNDQgKiAoZmxvYXQpY2IgKyAwLjcxNCAqIChmbG9hdCljcik7CisgICAgaWYoZyA8IDApIHsKKyAgICAgICAgZyA9IDA7CisgICAgfSBlbHNlIGlmKGcgPiB1cGIpIHsKKyAgICAgICAgZyA9IHVwYjsKKyAgICB9ICpvdXRfZyA9IGc7CisgICAgYiA9IHkgKyAoaW50KSgxLjc3MiAqIChmbG9hdCljYik7CisgICAgaWYoYiA8IDApIHsKKyAgICAgICAgYiA9IDA7CisgICAgfSBlbHNlIGlmKGIgPiB1cGIpIHsKKyAgICAgICAgYiA9IHVwYjsKKyAgICB9ICpvdXRfYiA9IGI7Cit9CitzdGF0aWMgdm9pZCBzeWNjNDQ0X3RvX3JnYihvcGpfaW1hZ2VfdCAqaW1nKQoreworICAgIGludCAqZDAsICpkMSwgKmQyLCAqciwgKmcsICpiOworICAgIGNvbnN0IGludCAqeSwgKmNiLCAqY3I7CisgICAgaW50IG1heHcsIG1heGgsIG1heCwgaSwgb2Zmc2V0LCB1cGI7CisgICAgaSA9IChpbnQpaW1nLT5jb21wc1swXS5wcmVjOworICAgIG9mZnNldCA9IDEgPDwgKGkgLSAxKTsKKyAgICB1cGIgPSAoMSA8PCBpKSAtIDE7CisgICAgbWF4dyA9IChpbnQpaW1nLT5jb21wc1swXS53OworICAgIG1heGggPSAoaW50KWltZy0+Y29tcHNbMF0uaDsKKyAgICBtYXggPSBtYXh3ICogbWF4aDsKKyAgICB5ID0gaW1nLT5jb21wc1swXS5kYXRhOworICAgIGNiID0gaW1nLT5jb21wc1sxXS5kYXRhOworICAgIGNyID0gaW1nLT5jb21wc1syXS5kYXRhOworICAgIGQwID0gciA9IEZYX0FsbG9jKGludCwgKHNpemVfdCltYXgpOworICAgIGQxID0gZyA9IEZYX0FsbG9jKGludCwgKHNpemVfdCltYXgpOworICAgIGQyID0gYiA9IEZYX0FsbG9jKGludCwgKHNpemVfdCltYXgpOworICAgIGZvcihpID0gMDsgaSA8IG1heDsgKytpKSB7CisgICAgICAgIHN5Y2NfdG9fcmdiKG9mZnNldCwgdXBiLCAqeSwgKmNiLCAqY3IsIHIsIGcsIGIpOworICAgICAgICArK3k7CisgICAgICAgICsrY2I7CisgICAgICAgICsrY3I7CisgICAgICAgICsrcjsKKyAgICAgICAgKytnOworICAgICAgICArK2I7CisgICAgfQorICAgIEZYX0ZyZWUoaW1nLT5jb21wc1swXS5kYXRhKTsKKyAgICBpbWctPmNvbXBzWzBdLmRhdGEgPSBkMDsKKyAgICBGWF9GcmVlKGltZy0+Y29tcHNbMV0uZGF0YSk7CisgICAgaW1nLT5jb21wc1sxXS5kYXRhID0gZDE7CisgICAgRlhfRnJlZShpbWctPmNvbXBzWzJdLmRhdGEpOworICAgIGltZy0+Y29tcHNbMl0uZGF0YSA9IGQyOworfQorc3RhdGljIHZvaWQgc3ljYzQyMl90b19yZ2Iob3BqX2ltYWdlX3QgKmltZykKK3sKKyAgICBpbnQgKmQwLCAqZDEsICpkMiwgKnIsICpnLCAqYjsKKyAgICBjb25zdCBpbnQgKnksICpjYiwgKmNyOworICAgIGludCBtYXh3LCBtYXhoLCBtYXgsIG9mZnNldCwgdXBiOworICAgIGludCBpLCBqOworICAgIGkgPSAoaW50KWltZy0+Y29tcHNbMF0ucHJlYzsKKyAgICBvZmZzZXQgPSAxIDw8IChpIC0gMSk7CisgICAgdXBiID0gKDEgPDwgaSkgLSAxOworICAgIG1heHcgPSAoaW50KWltZy0+Y29tcHNbMF0udzsKKyAgICBtYXhoID0gKGludClpbWctPmNvbXBzWzBdLmg7CisgICAgbWF4ID0gbWF4dyAqIG1heGg7CisgICAgeSA9IGltZy0+Y29tcHNbMF0uZGF0YTsKKyAgICBjYiA9IGltZy0+Y29tcHNbMV0uZGF0YTsKKyAgICBjciA9IGltZy0+Y29tcHNbMl0uZGF0YTsKKyAgICBkMCA9IHIgPSBGWF9BbGxvYyhpbnQsIChzaXplX3QpbWF4KTsKKyAgICBkMSA9IGcgPSBGWF9BbGxvYyhpbnQsIChzaXplX3QpbWF4KTsKKyAgICBkMiA9IGIgPSBGWF9BbGxvYyhpbnQsIChzaXplX3QpbWF4KTsKKyAgICBmb3IoaSA9IDA7IGkgPCBtYXhoOyArK2kpIHsKKyAgICAgICAgZm9yKGogPSAwOyBqIDwgbWF4dzsgaiArPSAyKSB7CisgICAgICAgICAgICBzeWNjX3RvX3JnYihvZmZzZXQsIHVwYiwgKnksICpjYiwgKmNyLCByLCBnLCBiKTsKKyAgICAgICAgICAgICsreTsKKyAgICAgICAgICAgICsrcjsKKyAgICAgICAgICAgICsrZzsKKyAgICAgICAgICAgICsrYjsKKyAgICAgICAgICAgIHN5Y2NfdG9fcmdiKG9mZnNldCwgdXBiLCAqeSwgKmNiLCAqY3IsIHIsIGcsIGIpOworICAgICAgICAgICAgKyt5OworICAgICAgICAgICAgKytyOworICAgICAgICAgICAgKytnOworICAgICAgICAgICAgKytiOworICAgICAgICAgICAgKytjYjsKKyAgICAgICAgICAgICsrY3I7CisgICAgICAgIH0KKyAgICB9CisgICAgRlhfRnJlZShpbWctPmNvbXBzWzBdLmRhdGEpOworICAgIGltZy0+Y29tcHNbMF0uZGF0YSA9IGQwOworICAgIEZYX0ZyZWUoaW1nLT5jb21wc1sxXS5kYXRhKTsKKyAgICBpbWctPmNvbXBzWzFdLmRhdGEgPSBkMTsKKyAgICBGWF9GcmVlKGltZy0+Y29tcHNbMl0uZGF0YSk7CisgICAgaW1nLT5jb21wc1syXS5kYXRhID0gZDI7CisgICAgaW1nLT5jb21wc1sxXS53ID0gbWF4dzsKKyAgICBpbWctPmNvbXBzWzFdLmggPSBtYXhoOworICAgIGltZy0+Y29tcHNbMl0udyA9IG1heHc7CisgICAgaW1nLT5jb21wc1syXS5oID0gbWF4aDsKKyAgICBpbWctPmNvbXBzWzFdLncgPSAoT1BKX1VJTlQzMiltYXh3OworICAgIGltZy0+Y29tcHNbMV0uaCA9IChPUEpfVUlOVDMyKW1heGg7CisgICAgaW1nLT5jb21wc1syXS53ID0gKE9QSl9VSU5UMzIpbWF4dzsKKyAgICBpbWctPmNvbXBzWzJdLmggPSAoT1BKX1VJTlQzMiltYXhoOworICAgIGltZy0+Y29tcHNbMV0uZHggPSBpbWctPmNvbXBzWzBdLmR4OworICAgIGltZy0+Y29tcHNbMl0uZHggPSBpbWctPmNvbXBzWzBdLmR4OworICAgIGltZy0+Y29tcHNbMV0uZHkgPSBpbWctPmNvbXBzWzBdLmR5OworICAgIGltZy0+Y29tcHNbMl0uZHkgPSBpbWctPmNvbXBzWzBdLmR5OworfQorc3RhdGljIHZvaWQgc3ljYzQyMF90b19yZ2Iob3BqX2ltYWdlX3QgKmltZykKK3sKKyAgICBpbnQgKmQwLCAqZDEsICpkMiwgKnIsICpnLCAqYiwgKm5yLCAqbmcsICpuYjsKKyAgICBjb25zdCBpbnQgKnksICpjYiwgKmNyLCAqbnk7CisgICAgaW50IG1heHcsIG1heGgsIG1heCwgb2Zmc2V0LCB1cGI7CisgICAgaW50IGksIGo7CisgICAgaSA9IChpbnQpaW1nLT5jb21wc1swXS5wcmVjOworICAgIG9mZnNldCA9IDEgPDwgKGkgLSAxKTsKKyAgICB1cGIgPSAoMSA8PCBpKSAtIDE7CisgICAgbWF4dyA9IChpbnQpaW1nLT5jb21wc1swXS53OworICAgIG1heGggPSAoaW50KWltZy0+Y29tcHNbMF0uaDsKKyAgICBtYXggPSBtYXh3ICogbWF4aDsKKyAgICB5ID0gaW1nLT5jb21wc1swXS5kYXRhOworICAgIGNiID0gaW1nLT5jb21wc1sxXS5kYXRhOworICAgIGNyID0gaW1nLT5jb21wc1syXS5kYXRhOworICAgIGQwID0gciA9IEZYX0FsbG9jKGludCwgKHNpemVfdCltYXgpOworICAgIGQxID0gZyA9IEZYX0FsbG9jKGludCwgKHNpemVfdCltYXgpOworICAgIGQyID0gYiA9IEZYX0FsbG9jKGludCwgKHNpemVfdCltYXgpOworICAgIGZvcihpID0gMDsgaSA8IG1heGg7IGkgKz0gMikgeworICAgICAgICBueSA9IHkgKyBtYXh3OworICAgICAgICBuciA9IHIgKyBtYXh3OworICAgICAgICBuZyA9IGcgKyBtYXh3OworICAgICAgICBuYiA9IGIgKyBtYXh3OworICAgICAgICBmb3IoaiA9IDA7IGogPCBtYXh3OyAgaiArPSAyKSB7CisgICAgICAgICAgICBzeWNjX3RvX3JnYihvZmZzZXQsIHVwYiwgKnksICpjYiwgKmNyLCByLCBnLCBiKTsKKyAgICAgICAgICAgICsreTsKKyAgICAgICAgICAgICsrcjsKKyAgICAgICAgICAgICsrZzsKKyAgICAgICAgICAgICsrYjsKKyAgICAgICAgICAgIHN5Y2NfdG9fcmdiKG9mZnNldCwgdXBiLCAqeSwgKmNiLCAqY3IsIHIsIGcsIGIpOworICAgICAgICAgICAgKyt5OworICAgICAgICAgICAgKytyOworICAgICAgICAgICAgKytnOworICAgICAgICAgICAgKytiOworICAgICAgICAgICAgc3ljY190b19yZ2Iob2Zmc2V0LCB1cGIsICpueSwgKmNiLCAqY3IsIG5yLCBuZywgbmIpOworICAgICAgICAgICAgKytueTsKKyAgICAgICAgICAgICsrbnI7CisgICAgICAgICAgICArK25nOworICAgICAgICAgICAgKytuYjsKKyAgICAgICAgICAgIHN5Y2NfdG9fcmdiKG9mZnNldCwgdXBiLCAqbnksICpjYiwgKmNyLCBuciwgbmcsIG5iKTsKKyAgICAgICAgICAgICsrbnk7CisgICAgICAgICAgICArK25yOworICAgICAgICAgICAgKytuZzsKKyAgICAgICAgICAgICsrbmI7CisgICAgICAgICAgICArK2NiOworICAgICAgICAgICAgKytjcjsKKyAgICAgICAgfQorICAgICAgICB5ICs9IG1heHc7CisgICAgICAgIHIgKz0gbWF4dzsKKyAgICAgICAgZyArPSBtYXh3OworICAgICAgICBiICs9IG1heHc7CisgICAgfQorICAgIEZYX0ZyZWUoaW1nLT5jb21wc1swXS5kYXRhKTsKKyAgICBpbWctPmNvbXBzWzBdLmRhdGEgPSBkMDsKKyAgICBGWF9GcmVlKGltZy0+Y29tcHNbMV0uZGF0YSk7CisgICAgaW1nLT5jb21wc1sxXS5kYXRhID0gZDE7CisgICAgRlhfRnJlZShpbWctPmNvbXBzWzJdLmRhdGEpOworICAgIGltZy0+Y29tcHNbMl0uZGF0YSA9IGQyOworICAgIGltZy0+Y29tcHNbMV0udyA9IG1heHc7CisgICAgaW1nLT5jb21wc1sxXS5oID0gbWF4aDsKKyAgICBpbWctPmNvbXBzWzJdLncgPSBtYXh3OworICAgIGltZy0+Y29tcHNbMl0uaCA9IG1heGg7CisgICAgaW1nLT5jb21wc1sxXS53ID0gKE9QSl9VSU5UMzIpbWF4dzsKKyAgICBpbWctPmNvbXBzWzFdLmggPSAoT1BKX1VJTlQzMiltYXhoOworICAgIGltZy0+Y29tcHNbMl0udyA9IChPUEpfVUlOVDMyKW1heHc7CisgICAgaW1nLT5jb21wc1syXS5oID0gKE9QSl9VSU5UMzIpbWF4aDsKKyAgICBpbWctPmNvbXBzWzFdLmR4ID0gaW1nLT5jb21wc1swXS5keDsKKyAgICBpbWctPmNvbXBzWzJdLmR4ID0gaW1nLT5jb21wc1swXS5keDsKKyAgICBpbWctPmNvbXBzWzFdLmR5ID0gaW1nLT5jb21wc1swXS5keTsKKyAgICBpbWctPmNvbXBzWzJdLmR5ID0gaW1nLT5jb21wc1swXS5keTsKK30KK3ZvaWQgY29sb3Jfc3ljY190b19yZ2Iob3BqX2ltYWdlX3QgKmltZykKK3sKKyAgICBpZihpbWctPm51bWNvbXBzIDwgMykgeworICAgICAgICBpbWctPmNvbG9yX3NwYWNlID0gT1BKX0NMUlNQQ19HUkFZOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmKChpbWctPmNvbXBzWzBdLmR4ID09IDEpCisgICAgICAgICAgICAmJiAoaW1nLT5jb21wc1sxXS5keCA9PSAyKQorICAgICAgICAgICAgJiYgKGltZy0+Y29tcHNbMl0uZHggPT0gMikKKyAgICAgICAgICAgICYmIChpbWctPmNvbXBzWzBdLmR5ID09IDEpCisgICAgICAgICAgICAmJiAoaW1nLT5jb21wc1sxXS5keSA9PSAyKQorICAgICAgICAgICAgJiYgKGltZy0+Y29tcHNbMl0uZHkgPT0gMikpIHsKKyAgICAgICAgc3ljYzQyMF90b19yZ2IoaW1nKTsKKyAgICB9IGVsc2UgaWYoKGltZy0+Y29tcHNbMF0uZHggPT0gMSkKKyAgICAgICAgICAgICAgJiYgKGltZy0+Y29tcHNbMV0uZHggPT0gMikKKyAgICAgICAgICAgICAgJiYgKGltZy0+Y29tcHNbMl0uZHggPT0gMikKKyAgICAgICAgICAgICAgJiYgKGltZy0+Y29tcHNbMF0uZHkgPT0gMSkKKyAgICAgICAgICAgICAgJiYgKGltZy0+Y29tcHNbMV0uZHkgPT0gMSkKKyAgICAgICAgICAgICAgJiYgKGltZy0+Y29tcHNbMl0uZHkgPT0gMSkpIHsKKyAgICAgICAgc3ljYzQyMl90b19yZ2IoaW1nKTsKKyAgICB9IGVsc2UgaWYoKGltZy0+Y29tcHNbMF0uZHggPT0gMSkKKyAgICAgICAgICAgICAgJiYgKGltZy0+Y29tcHNbMV0uZHggPT0gMSkKKyAgICAgICAgICAgICAgJiYgKGltZy0+Y29tcHNbMl0uZHggPT0gMSkKKyAgICAgICAgICAgICAgJiYgKGltZy0+Y29tcHNbMF0uZHkgPT0gMSkKKyAgICAgICAgICAgICAgJiYgKGltZy0+Y29tcHNbMV0uZHkgPT0gMSkKKyAgICAgICAgICAgICAgJiYgKGltZy0+Y29tcHNbMl0uZHkgPT0gMSkpIHsKKyAgICAgICAgc3ljYzQ0NF90b19yZ2IoaW1nKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGltZy0+Y29sb3Jfc3BhY2UgPSBPUEpfQ0xSU1BDX1NSR0I7Cit9Cit2b2lkIGNvbG9yX2FwcGx5X2ljY19wcm9maWxlKG9wal9pbWFnZV90ICppbWFnZSkKK3sKKyAgICBjbXNIUFJPRklMRSBpbl9wcm9mLCBvdXRfcHJvZjsKKyAgICBjbXNIVFJBTlNGT1JNIHRyYW5zZm9ybTsKKyAgICBjbXNDb2xvclNwYWNlU2lnbmF0dXJlIGluX3NwYWNlLCBvdXRfc3BhY2U7CisgICAgY21zVUludDMyTnVtYmVyIGludGVudCwgaW5fdHlwZSwgb3V0X3R5cGUsIG5yX3NhbXBsZXM7CisgICAgaW50ICpyLCAqZywgKmI7CisgICAgaW50IHByZWMsIGksIG1heCwgbWF4X3csIG1heF9oOworICAgIE9QSl9DT0xPUl9TUEFDRSBvbGRzcGFjZTsKKyAgICBpbl9wcm9mID0KKyAgICAgICAgY21zT3BlblByb2ZpbGVGcm9tTWVtKGltYWdlLT5pY2NfcHJvZmlsZV9idWYsIGltYWdlLT5pY2NfcHJvZmlsZV9sZW4pOworICAgIGlmKGluX3Byb2YgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGluX3NwYWNlID0gY21zR2V0UENTKGluX3Byb2YpOworICAgIG91dF9zcGFjZSA9IGNtc0dldENvbG9yU3BhY2UoaW5fcHJvZik7CisgICAgaW50ZW50ID0gY21zR2V0SGVhZGVyUmVuZGVyaW5nSW50ZW50KGluX3Byb2YpOworICAgIG1heF93ID0gKGludClpbWFnZS0+Y29tcHNbMF0udzsKKyAgICBtYXhfaCA9IChpbnQpaW1hZ2UtPmNvbXBzWzBdLmg7CisgICAgcHJlYyA9IChpbnQpaW1hZ2UtPmNvbXBzWzBdLnByZWM7CisgICAgb2xkc3BhY2UgPSBpbWFnZS0+Y29sb3Jfc3BhY2U7CisgICAgaWYob3V0X3NwYWNlID09IGNtc1NpZ1JnYkRhdGEpIHsKKyAgICAgICAgaWYoIHByZWMgPD0gOCApIHsKKyAgICAgICAgICAgIGluX3R5cGUgPSBUWVBFX1JHQl84OworICAgICAgICAgICAgb3V0X3R5cGUgPSBUWVBFX1JHQl84OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW5fdHlwZSA9IFRZUEVfUkdCXzE2OworICAgICAgICAgICAgb3V0X3R5cGUgPSBUWVBFX1JHQl8xNjsKKyAgICAgICAgfQorICAgICAgICBvdXRfcHJvZiA9IGNtc0NyZWF0ZV9zUkdCUHJvZmlsZSgpOworICAgICAgICBpbWFnZS0+Y29sb3Jfc3BhY2UgPSBPUEpfQ0xSU1BDX1NSR0I7CisgICAgfSBlbHNlIGlmKG91dF9zcGFjZSA9PSBjbXNTaWdHcmF5RGF0YSkgeworICAgICAgICBpZiggcHJlYyA8PSA4ICkgeworICAgICAgICAgICAgaW5fdHlwZSA9IFRZUEVfR1JBWV84OworICAgICAgICAgICAgb3V0X3R5cGUgPSBUWVBFX1JHQl84OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW5fdHlwZSA9IFRZUEVfR1JBWV8xNjsKKyAgICAgICAgICAgIG91dF90eXBlID0gVFlQRV9SR0JfMTY7CisgICAgICAgIH0KKyAgICAgICAgb3V0X3Byb2YgPSBjbXNDcmVhdGVfc1JHQlByb2ZpbGUoKTsKKyAgICAgICAgaW1hZ2UtPmNvbG9yX3NwYWNlID0gT1BKX0NMUlNQQ19TUkdCOworICAgIH0gZWxzZSBpZihvdXRfc3BhY2UgPT0gY21zU2lnWUNiQ3JEYXRhKSB7CisgICAgICAgIGluX3R5cGUgPSBUWVBFX1lDYkNyXzE2OworICAgICAgICBvdXRfdHlwZSA9IFRZUEVfUkdCXzE2OworICAgICAgICBvdXRfcHJvZiA9IGNtc0NyZWF0ZV9zUkdCUHJvZmlsZSgpOworICAgICAgICBpbWFnZS0+Y29sb3Jfc3BhY2UgPSBPUEpfQ0xSU1BDX1NSR0I7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB0cmFuc2Zvcm0gPSBjbXNDcmVhdGVUcmFuc2Zvcm0oaW5fcHJvZiwgaW5fdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3Byb2YsIG91dF90eXBlLCBpbnRlbnQsIDApOworICAgIGNtc0Nsb3NlUHJvZmlsZShpbl9wcm9mKTsKKyAgICBjbXNDbG9zZVByb2ZpbGUob3V0X3Byb2YpOworICAgIGlmKHRyYW5zZm9ybSA9PSBOVUxMKSB7CisgICAgICAgIGltYWdlLT5jb2xvcl9zcGFjZSA9IG9sZHNwYWNlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmKGltYWdlLT5udW1jb21wcyA+IDIpIHsKKyAgICAgICAgaWYoIHByZWMgPD0gOCApIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmluYnVmLCAqb3V0YnVmLCAqaW4sICpvdXQ7CisgICAgICAgICAgICBtYXggPSBtYXhfdyAqIG1heF9oOworICAgICAgICAgICAgbnJfc2FtcGxlcyA9IChjbXNVSW50MzJOdW1iZXIpbWF4ICogMyAqIChjbXNVSW50MzJOdW1iZXIpc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOworICAgICAgICAgICAgaW4gPSBpbmJ1ZiA9IEZYX0FsbG9jKHVuc2lnbmVkIGNoYXIsIG5yX3NhbXBsZXMpOworICAgICAgICAgICAgb3V0ID0gb3V0YnVmID0gRlhfQWxsb2ModW5zaWduZWQgY2hhciwgbnJfc2FtcGxlcyk7CisgICAgICAgICAgICByID0gaW1hZ2UtPmNvbXBzWzBdLmRhdGE7CisgICAgICAgICAgICBnID0gaW1hZ2UtPmNvbXBzWzFdLmRhdGE7CisgICAgICAgICAgICBiID0gaW1hZ2UtPmNvbXBzWzJdLmRhdGE7CisgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBtYXg7ICsraSkgeworICAgICAgICAgICAgICAgICppbisrID0gKHVuc2lnbmVkIGNoYXIpICogcisrOworICAgICAgICAgICAgICAgICppbisrID0gKHVuc2lnbmVkIGNoYXIpICogZysrOworICAgICAgICAgICAgICAgICppbisrID0gKHVuc2lnbmVkIGNoYXIpICogYisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY21zRG9UcmFuc2Zvcm0odHJhbnNmb3JtLCBpbmJ1Ziwgb3V0YnVmLCAoY21zVUludDMyTnVtYmVyKW1heCk7CisgICAgICAgICAgICByID0gaW1hZ2UtPmNvbXBzWzBdLmRhdGE7CisgICAgICAgICAgICBnID0gaW1hZ2UtPmNvbXBzWzFdLmRhdGE7CisgICAgICAgICAgICBiID0gaW1hZ2UtPmNvbXBzWzJdLmRhdGE7CisgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBtYXg7ICsraSkgeworICAgICAgICAgICAgICAgICpyKysgPSAoaW50KSAqIG91dCsrOworICAgICAgICAgICAgICAgICpnKysgPSAoaW50KSAqIG91dCsrOworICAgICAgICAgICAgICAgICpiKysgPSAoaW50KSAqIG91dCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfRnJlZShpbmJ1Zik7CisgICAgICAgICAgICBGWF9GcmVlKG91dGJ1Zik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqaW5idWYsICpvdXRidWYsICppbiwgKm91dDsKKyAgICAgICAgICAgIG1heCA9IG1heF93ICogbWF4X2g7CisgICAgICAgICAgICBucl9zYW1wbGVzID0gKGNtc1VJbnQzMk51bWJlciltYXggKiAzICogKGNtc1VJbnQzMk51bWJlcilzaXplb2YodW5zaWduZWQgc2hvcnQpOworICAgICAgICAgICAgaW4gPSBpbmJ1ZiA9IEZYX0FsbG9jKHVuc2lnbmVkIHNob3J0LCBucl9zYW1wbGVzKTsKKyAgICAgICAgICAgIG91dCA9IG91dGJ1ZiA9IEZYX0FsbG9jKHVuc2lnbmVkIHNob3J0LCBucl9zYW1wbGVzKTsKKyAgICAgICAgICAgIHIgPSBpbWFnZS0+Y29tcHNbMF0uZGF0YTsKKyAgICAgICAgICAgIGcgPSBpbWFnZS0+Y29tcHNbMV0uZGF0YTsKKyAgICAgICAgICAgIGIgPSBpbWFnZS0+Y29tcHNbMl0uZGF0YTsKKyAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IG1heDsgKytpKSB7CisgICAgICAgICAgICAgICAgKmluKysgPSAodW5zaWduZWQgc2hvcnQpICogcisrOworICAgICAgICAgICAgICAgICppbisrID0gKHVuc2lnbmVkIHNob3J0KSAqIGcrKzsKKyAgICAgICAgICAgICAgICAqaW4rKyA9ICh1bnNpZ25lZCBzaG9ydCkgKiBiKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjbXNEb1RyYW5zZm9ybSh0cmFuc2Zvcm0sIGluYnVmLCBvdXRidWYsIChjbXNVSW50MzJOdW1iZXIpbWF4KTsKKyAgICAgICAgICAgIHIgPSBpbWFnZS0+Y29tcHNbMF0uZGF0YTsKKyAgICAgICAgICAgIGcgPSBpbWFnZS0+Y29tcHNbMV0uZGF0YTsKKyAgICAgICAgICAgIGIgPSBpbWFnZS0+Y29tcHNbMl0uZGF0YTsKKyAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IG1heDsgKytpKSB7CisgICAgICAgICAgICAgICAgKnIrKyA9IChpbnQpICogb3V0Kys7CisgICAgICAgICAgICAgICAgKmcrKyA9IChpbnQpICogb3V0Kys7CisgICAgICAgICAgICAgICAgKmIrKyA9IChpbnQpICogb3V0Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9GcmVlKGluYnVmKTsKKyAgICAgICAgICAgIEZYX0ZyZWUob3V0YnVmKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmluLCAqaW5idWYsICpvdXQsICpvdXRidWY7CisgICAgICAgIG1heCA9IG1heF93ICogbWF4X2g7CisgICAgICAgIG5yX3NhbXBsZXMgPSAoY21zVUludDMyTnVtYmVyKW1heCAqIDMgKiBzaXplb2YodW5zaWduZWQgY2hhcik7CisgICAgICAgIGluID0gaW5idWYgPSBGWF9BbGxvYyh1bnNpZ25lZCBjaGFyLCBucl9zYW1wbGVzKTsKKyAgICAgICAgb3V0ID0gb3V0YnVmID0gRlhfQWxsb2ModW5zaWduZWQgY2hhciwgbnJfc2FtcGxlcyk7CisgICAgICAgIGltYWdlLT5jb21wcyA9IChvcGpfaW1hZ2VfY29tcF90KikKKyAgICAgICAgICAgICAgICAgICAgICAgcmVhbGxvYyhpbWFnZS0+Y29tcHMsIChpbWFnZS0+bnVtY29tcHMgKyAyKSAqIHNpemVvZihvcGpfaW1hZ2VfY29tcF90KSk7CisgICAgICAgIGlmKGltYWdlLT5udW1jb21wcyA9PSAyKSB7CisgICAgICAgICAgICBpbWFnZS0+Y29tcHNbM10gPSBpbWFnZS0+Y29tcHNbMV07CisgICAgICAgIH0KKyAgICAgICAgaW1hZ2UtPmNvbXBzWzFdID0gaW1hZ2UtPmNvbXBzWzBdOworICAgICAgICBpbWFnZS0+Y29tcHNbMl0gPSBpbWFnZS0+Y29tcHNbMF07CisgICAgICAgIGltYWdlLT5jb21wc1sxXS5kYXRhID0gRlhfQWxsb2MoaW50LCAoc2l6ZV90KW1heCk7CisgICAgICAgIEZYU1lTX21lbXNldDgoaW1hZ2UtPmNvbXBzWzFdLmRhdGEsIDAsIHNpemVvZihpbnQpICogKHNpemVfdCltYXgpOworICAgICAgICBpbWFnZS0+Y29tcHNbMl0uZGF0YSA9IEZYX0FsbG9jKGludCwgKHNpemVfdCltYXgpOworICAgICAgICBGWFNZU19tZW1zZXQ4KGltYWdlLT5jb21wc1syXS5kYXRhLCAwLCBzaXplb2YoaW50KSAqIChzaXplX3QpbWF4KTsKKyAgICAgICAgaW1hZ2UtPm51bWNvbXBzICs9IDI7CisgICAgICAgIHIgPSBpbWFnZS0+Y29tcHNbMF0uZGF0YTsKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgbWF4OyArK2kpIHsKKyAgICAgICAgICAgICppbisrID0gKHVuc2lnbmVkIGNoYXIpICogcisrOworICAgICAgICB9CisgICAgICAgIGNtc0RvVHJhbnNmb3JtKHRyYW5zZm9ybSwgaW5idWYsIG91dGJ1ZiwgKGNtc1VJbnQzMk51bWJlciltYXgpOworICAgICAgICByID0gaW1hZ2UtPmNvbXBzWzBdLmRhdGE7CisgICAgICAgIGcgPSBpbWFnZS0+Y29tcHNbMV0uZGF0YTsKKyAgICAgICAgYiA9IGltYWdlLT5jb21wc1syXS5kYXRhOworICAgICAgICBmb3IoaSA9IDA7IGkgPCBtYXg7ICsraSkgeworICAgICAgICAgICAgKnIrKyA9IChpbnQpICogb3V0Kys7CisgICAgICAgICAgICAqZysrID0gKGludCkgKiBvdXQrKzsKKyAgICAgICAgICAgICpiKysgPSAoaW50KSAqIG91dCsrOworICAgICAgICB9CisgICAgICAgIEZYX0ZyZWUoaW5idWYpOworICAgICAgICBGWF9GcmVlKG91dGJ1Zik7CisgICAgfQorICAgIGNtc0RlbGV0ZVRyYW5zZm9ybSh0cmFuc2Zvcm0pOworfQordm9pZCBjb2xvcl9hcHBseV9jb252ZXJzaW9uKG9wal9pbWFnZV90ICppbWFnZSkKK3sKKyAgICBpbnQgKnJvdzsKKyAgICBpbnQgZW51bWNzLCBudW1jb21wczsKKyAgICBudW1jb21wcyA9IGltYWdlLT5udW1jb21wczsKKyAgICBpZihudW1jb21wcyA8IDMpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICByb3cgPSAoaW50KilpbWFnZS0+aWNjX3Byb2ZpbGVfYnVmOworICAgIGVudW1jcyA9IHJvd1swXTsKKyAgICBpZihlbnVtY3MgPT0gMTQpIHsKKyAgICAgICAgaW50ICpMLCAqYSwgKmIsICpyZWQsICpncmVlbiwgKmJsdWUsICpzcmMwLCAqc3JjMSwgKnNyYzI7CisgICAgICAgIGRvdWJsZSBybCwgb2wsIHJhLCBvYSwgcmIsIG9iLCBwcmVjMCwgcHJlYzEsIHByZWMyOworICAgICAgICBkb3VibGUgbWluTCwgbWF4TCwgbWluYSwgbWF4YSwgbWluYiwgbWF4YjsKKyAgICAgICAgdW5zaWduZWQgaW50IGRlZmF1bHRfdHlwZSwgaWw7CisgICAgICAgIHVuc2lnbmVkIGludCBpLCBtYXgsIGlsbHU7CisgICAgICAgIGNtc0hQUk9GSUxFIGluLCBvdXQ7CisgICAgICAgIGNtc0hUUkFOU0ZPUk0gdHJhbnNmb3JtOworICAgICAgICBjbXNVSW50MTZOdW1iZXIgUkdCWzNdOworICAgICAgICBjbXNDSUVMYWIgTGFiOworICAgICAgICBpbGx1ID0gMDsKKyAgICAgICAgaWwgPSAwOworICAgICAgICBpbiA9IGNtc0NyZWF0ZUxhYjRQcm9maWxlKE5VTEwpOworICAgICAgICBvdXQgPSBjbXNDcmVhdGVfc1JHQlByb2ZpbGUoKTsKKyAgICAgICAgdHJhbnNmb3JtID0KKyAgICAgICAgICAgIGNtc0NyZWF0ZVRyYW5zZm9ybShpbiwgVFlQRV9MYWJfREJMLCBvdXQsIFRZUEVfUkdCXzE2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVEVOVF9QRVJDRVBUVUFMLCAwKTsKKyAgICAgICAgY21zQ2xvc2VQcm9maWxlKGluKTsKKyAgICAgICAgY21zQ2xvc2VQcm9maWxlKG91dCk7CisgICAgICAgIGlmKHRyYW5zZm9ybSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcHJlYzAgPSAoZG91YmxlKWltYWdlLT5jb21wc1swXS5wcmVjOworICAgICAgICBwcmVjMSA9IChkb3VibGUpaW1hZ2UtPmNvbXBzWzFdLnByZWM7CisgICAgICAgIHByZWMyID0gKGRvdWJsZSlpbWFnZS0+Y29tcHNbMl0ucHJlYzsKKyAgICAgICAgZGVmYXVsdF90eXBlID0gcm93WzFdOworICAgICAgICBpZihkZWZhdWx0X3R5cGUgPT0gMHg0NDQ1NDYwMCkgeworICAgICAgICAgICAgcmwgPSAxMDA7CisgICAgICAgICAgICByYSA9IDE3MDsKKyAgICAgICAgICAgIHJiID0gMjAwOworICAgICAgICAgICAgb2wgPSAwOworICAgICAgICAgICAgb2EgPSBwb3coMiwgcHJlYzEgLSAxKTsKKyAgICAgICAgICAgIG9iID0gcG93KDIsIHByZWMyIC0gMikgICsgcG93KDIsIHByZWMyIC0gMyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBybCA9IHJvd1syXTsKKyAgICAgICAgICAgIHJhID0gcm93WzRdOworICAgICAgICAgICAgcmIgPSByb3dbNl07CisgICAgICAgICAgICBvbCA9IHJvd1szXTsKKyAgICAgICAgICAgIG9hID0gcm93WzVdOworICAgICAgICAgICAgb2IgPSByb3dbN107CisgICAgICAgIH0KKyAgICAgICAgTCA9IHNyYzAgPSBpbWFnZS0+Y29tcHNbMF0uZGF0YTsKKyAgICAgICAgYSA9IHNyYzEgPSBpbWFnZS0+Y29tcHNbMV0uZGF0YTsKKyAgICAgICAgYiA9IHNyYzIgPSBpbWFnZS0+Y29tcHNbMl0uZGF0YTsKKyAgICAgICAgbWF4ID0gaW1hZ2UtPmNvbXBzWzBdLncgKiBpbWFnZS0+Y29tcHNbMF0uaDsKKyAgICAgICAgcmVkID0gRlhfQWxsb2MoaW50LCBtYXgpOworICAgICAgICBpbWFnZS0+Y29tcHNbMF0uZGF0YSA9IHJlZDsKKyAgICAgICAgZ3JlZW4gPSBGWF9BbGxvYyhpbnQsIG1heCk7CisgICAgICAgIGltYWdlLT5jb21wc1sxXS5kYXRhID0gZ3JlZW47CisgICAgICAgIGJsdWUgPSBGWF9BbGxvYyhpbnQsIG1heCk7CisgICAgICAgIGltYWdlLT5jb21wc1syXS5kYXRhID0gYmx1ZTsKKyAgICAgICAgbWluTCA9IC0ocmwgKiBvbCkgLyAocG93KDIsIHByZWMwKSAtIDEpOworICAgICAgICBtYXhMID0gbWluTCArIHJsOworICAgICAgICBtaW5hID0gLShyYSAqIG9hKSAvIChwb3coMiwgcHJlYzEpIC0gMSk7CisgICAgICAgIG1heGEgPSBtaW5hICsgcmE7CisgICAgICAgIG1pbmIgPSAtKHJiICogb2IpIC8gKHBvdygyLCBwcmVjMikgLSAxKTsKKyAgICAgICAgbWF4YiA9IG1pbmIgKyByYjsKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgbWF4OyArK2kpIHsKKyAgICAgICAgICAgIExhYi5MID0gbWluTCArIChkb3VibGUpKCpMKSAqIChtYXhMIC0gbWluTCkgLyAocG93KDIsIHByZWMwKSAtIDEpOworICAgICAgICAgICAgKytMOworICAgICAgICAgICAgTGFiLmEgPSBtaW5hICsgKGRvdWJsZSkoKmEpICogKG1heGEgLSBtaW5hKSAvIChwb3coMiwgcHJlYzEpIC0gMSk7CisgICAgICAgICAgICArK2E7CisgICAgICAgICAgICBMYWIuYiA9IG1pbmIgKyAoZG91YmxlKSgqYikgKiAobWF4YiAtIG1pbmIpIC8gKHBvdygyLCBwcmVjMikgLSAxKTsKKyAgICAgICAgICAgICsrYjsKKyAgICAgICAgICAgIGNtc0RvVHJhbnNmb3JtKHRyYW5zZm9ybSwgJkxhYiwgUkdCLCAxKTsKKyAgICAgICAgICAgICpyZWQrKyA9IFJHQlswXTsKKyAgICAgICAgICAgICpncmVlbisrID0gUkdCWzFdOworICAgICAgICAgICAgKmJsdWUrKyA9IFJHQlsyXTsKKyAgICAgICAgfQorICAgICAgICBjbXNEZWxldGVUcmFuc2Zvcm0odHJhbnNmb3JtKTsKKyAgICAgICAgRlhfRnJlZShzcmMwKTsKKyAgICAgICAgRlhfRnJlZShzcmMxKTsKKyAgICAgICAgRlhfRnJlZShzcmMyKTsKKyAgICAgICAgaW1hZ2UtPmNvbG9yX3NwYWNlID0gT1BKX0NMUlNQQ19TUkdCOworICAgICAgICBpbWFnZS0+Y29tcHNbMF0ucHJlYyA9IDE2OworICAgICAgICBpbWFnZS0+Y29tcHNbMV0ucHJlYyA9IDE2OworICAgICAgICBpbWFnZS0+Y29tcHNbMl0ucHJlYyA9IDE2OworICAgICAgICByZXR1cm47CisgICAgfQorfQorY2xhc3MgQ0pQWF9EZWNvZGVyIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBDSlBYX0RlY29kZXIoKTsKKyAgICB+Q0pQWF9EZWNvZGVyKCk7CisgICAgRlhfQk9PTAlJbml0KGNvbnN0IHVuc2lnbmVkIGNoYXIqIHNyY19kYXRhLCBpbnQgc3JjX3NpemUpOworICAgIHZvaWQJR2V0SW5mbyhGWF9EV09SRCYgd2lkdGgsIEZYX0RXT1JEJiBoZWlnaHQsIEZYX0RXT1JEJiBjb2Rlc3RyZWFtX25Db21wcywgRlhfRFdPUkQmIG91dHB1dF9uQ29tcHMpOworICAgIEZYX0JPT0wJRGVjb2RlKEZYX0xQQllURSBkZXN0X2J1ZiwgaW50IHBpdGNoLCBGWF9CT09MIGJUcmFuc2xhdGVDb2xvciwgRlhfTFBCWVRFIG9mZnNldHMpOworICAgIEZYX0xQQ0JZVEUgbV9TcmNEYXRhOworICAgIGludCBtX1NyY1NpemU7CisgICAgb3BqX2ltYWdlX3QgKmltYWdlOworICAgIG9wal9jb2RlY190KiBsX2NvZGVjOworICAgIG9wal9zdHJlYW1fdCAqbF9zdHJlYW07CisgICAgRlhfQk9PTCBtX3VzZUNvbG9yU3BhY2U7Cit9OworQ0pQWF9EZWNvZGVyOjpDSlBYX0RlY29kZXIoKTogaW1hZ2UoTlVMTCksIGxfY29kZWMoTlVMTCksIGxfc3RyZWFtKE5VTEwpLCBtX3VzZUNvbG9yU3BhY2UoRkFMU0UpCit7Cit9CitDSlBYX0RlY29kZXI6On5DSlBYX0RlY29kZXIoKQoreworICAgIGlmKGxfY29kZWMpIHsKKyAgICAgICAgb3BqX2Rlc3Ryb3lfY29kZWMobF9jb2RlYyk7CisgICAgfQorICAgIGlmKGxfc3RyZWFtKSB7CisgICAgICAgIG9wal9zdHJlYW1fZGVzdHJveShsX3N0cmVhbSk7CisgICAgfQorICAgIGlmKGltYWdlKSB7CisgICAgICAgIG9wal9pbWFnZV9kZXN0cm95KGltYWdlKTsKKyAgICB9Cit9CitGWF9CT09MIENKUFhfRGVjb2Rlcjo6SW5pdChjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmNfZGF0YSwgaW50IHNyY19zaXplKQoreworICAgIG9wal9kcGFyYW1ldGVyc190IHBhcmFtZXRlcnM7CisgICAgdHJ5IHsKKyAgICAgICAgaW1hZ2UgPSBOVUxMOworICAgICAgICBtX1NyY0RhdGEgPSBzcmNfZGF0YTsKKyAgICAgICAgbV9TcmNTaXplID0gc3JjX3NpemU7CisgICAgICAgIGRlY29kZURhdGEgc3JjRGF0YTsKKyAgICAgICAgc3JjRGF0YS5vZmZzZXQgID0gMDsKKyAgICAgICAgc3JjRGF0YS5zcmNfc2l6ZSA9IHNyY19zaXplOworICAgICAgICBzcmNEYXRhLnNyY19kYXRhID0gc3JjX2RhdGE7CisgICAgICAgIGxfc3RyZWFtID0gZnhfb3BqX3N0cmVhbV9jcmVhdGVfbWVtb3J5X3N0cmVhbSgmc3JjRGF0YSwgT1BKX0oyS19TVFJFQU1fQ0hVTktfU0laRSwgMSk7CisgICAgICAgIGlmIChsX3N0cmVhbSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgb3BqX3NldF9kZWZhdWx0X2RlY29kZXJfcGFyYW1ldGVycygmcGFyYW1ldGVycyk7CisgICAgICAgIHBhcmFtZXRlcnMuZGVjb2RfZm9ybWF0ID0gMDsKKyAgICAgICAgcGFyYW1ldGVycy5jb2RfZm9ybWF0ID0gMzsKKyAgICAgICAgaWYoRlhTWVNfbWVtY21wMzIobV9TcmNEYXRhLCAiXHgwMFx4MDBceDAwXHgwY1x4NmFceDUwXHgyMFx4MjBceDBkXHgwYVx4ODdceDBhIiwgMTIpID09IDApIHsKKyAgICAgICAgICAgIGxfY29kZWMgPSBvcGpfY3JlYXRlX2RlY29tcHJlc3MoT1BKX0NPREVDX0pQMik7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmRlY29kX2Zvcm1hdCA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsX2NvZGVjID0gb3BqX2NyZWF0ZV9kZWNvbXByZXNzKE9QSl9DT0RFQ19KMkspOworICAgICAgICB9CisgICAgICAgIGlmKCFsX2NvZGVjKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgb3BqX3NldF9pbmZvX2hhbmRsZXIobF9jb2RlYywgZnhfaW5mb19jYWxsYmFjaywgMDApOworICAgICAgICBvcGpfc2V0X3dhcm5pbmdfaGFuZGxlcihsX2NvZGVjLCBmeF93YXJuaW5nX2NhbGxiYWNrLCAwMCk7CisgICAgICAgIG9wal9zZXRfZXJyb3JfaGFuZGxlcihsX2NvZGVjLCBmeF9lcnJvcl9jYWxsYmFjaywgMDApOworICAgICAgICBpZiAoICFvcGpfc2V0dXBfZGVjb2RlcihsX2NvZGVjLCAmcGFyYW1ldGVycykgKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgaWYoISBvcGpfcmVhZF9oZWFkZXIobF9zdHJlYW0sIGxfY29kZWMsICZpbWFnZSkpIHsKKyAgICAgICAgICAgIGltYWdlID0gTlVMTDsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBpZih0aGlzLT5tX3VzZUNvbG9yU3BhY2UpIHsKKyAgICAgICAgICAgIGltYWdlLT51c2VDb2xvclNwYWNlID0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGltYWdlLT51c2VDb2xvclNwYWNlID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXBhcmFtZXRlcnMubmJfdGlsZV90b19kZWNvZGUpIHsKKyAgICAgICAgICAgIGlmICghb3BqX3NldF9kZWNvZGVfYXJlYShsX2NvZGVjLCBpbWFnZSwgcGFyYW1ldGVycy5EQV94MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLkRBX3kwLCBwYXJhbWV0ZXJzLkRBX3gxLCBwYXJhbWV0ZXJzLkRBX3kxKSkgeworICAgICAgICAgICAgICAgIG9wal9pbWFnZV9kZXN0cm95KGltYWdlKTsKKyAgICAgICAgICAgICAgICBpbWFnZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCEob3BqX2RlY29kZShsX2NvZGVjLCBsX3N0cmVhbSwgaW1hZ2UpICYmIG9wal9lbmRfZGVjb21wcmVzcyhsX2NvZGVjLAlsX3N0cmVhbSkpKSB7CisgICAgICAgICAgICAgICAgb3BqX2ltYWdlX2Rlc3Ryb3koaW1hZ2UpOworICAgICAgICAgICAgICAgIGltYWdlID0gTlVMTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIW9wal9nZXRfZGVjb2RlZF90aWxlKGxfY29kZWMsIGxfc3RyZWFtLCBpbWFnZSwgcGFyYW1ldGVycy50aWxlX2luZGV4KSkgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBvcGpfc3RyZWFtX2Rlc3Ryb3kobF9zdHJlYW0pOworICAgICAgICBsX3N0cmVhbSA9IE5VTEw7CisgICAgICAgIGlmKCBpbWFnZS0+Y29sb3Jfc3BhY2UgIT0gT1BKX0NMUlNQQ19TWUNDCisgICAgICAgICAgICAgICAgJiYgaW1hZ2UtPm51bWNvbXBzID09IDMgJiYgaW1hZ2UtPmNvbXBzWzBdLmR4ID09IGltYWdlLT5jb21wc1swXS5keQorICAgICAgICAgICAgICAgICYmIGltYWdlLT5jb21wc1sxXS5keCAhPSAxICkgeworICAgICAgICAgICAgaW1hZ2UtPmNvbG9yX3NwYWNlID0gT1BKX0NMUlNQQ19TWUNDOworICAgICAgICB9IGVsc2UgaWYgKGltYWdlLT5udW1jb21wcyA8PSAyKSB7CisgICAgICAgICAgICBpbWFnZS0+Y29sb3Jfc3BhY2UgPSBPUEpfQ0xSU1BDX0dSQVk7CisgICAgICAgIH0KKyAgICAgICAgaWYoaW1hZ2UtPmNvbG9yX3NwYWNlID09IE9QSl9DTFJTUENfU1lDQykgeworICAgICAgICAgICAgY29sb3Jfc3ljY190b19yZ2IoaW1hZ2UpOworICAgICAgICB9CisgICAgICAgIGlmKGltYWdlLT5pY2NfcHJvZmlsZV9idWYgJiYgIWltYWdlLT51c2VDb2xvclNwYWNlKSB7CisgICAgICAgICAgICBGWF9GcmVlKGltYWdlLT5pY2NfcHJvZmlsZV9idWYpOworICAgICAgICAgICAgaW1hZ2UtPmljY19wcm9maWxlX2J1ZiA9IE5VTEw7CisgICAgICAgICAgICBpbWFnZS0+aWNjX3Byb2ZpbGVfbGVuID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZighaW1hZ2UpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKC4uLikgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQordm9pZCBDSlBYX0RlY29kZXI6OkdldEluZm8oRlhfRFdPUkQmIHdpZHRoLCBGWF9EV09SRCYgaGVpZ2h0LCBGWF9EV09SRCYgY29kZXN0cmVhbV9uQ29tcHMsIEZYX0RXT1JEJiBvdXRwdXRfbkNvbXBzKQoreworICAgIHdpZHRoID0gKEZYX0RXT1JEKWltYWdlLT54MTsKKyAgICBoZWlnaHQgPSAoRlhfRFdPUkQpaW1hZ2UtPnkxOworICAgIG91dHB1dF9uQ29tcHMgPSBjb2Rlc3RyZWFtX25Db21wcyA9IChGWF9EV09SRClpbWFnZS0+bnVtY29tcHM7Cit9CitGWF9CT09MIENKUFhfRGVjb2Rlcjo6RGVjb2RlKEZYX0xQQllURSBkZXN0X2J1ZiwgaW50IHBpdGNoLCBGWF9CT09MIGJUcmFuc2xhdGVDb2xvciwgRlhfTFBCWVRFIG9mZnNldHMpCit7CisgICAgRlhfQllURSoqIGNoYW5uZWxfYnVmczsKKyAgICBpbnQqIGFkanVzdF9jb21wczsKKyAgICBpbnQgaSwgd2lkLCBoZWksIHJvdywgY29sLCBjaGFubmVsLCBzcmM7CisgICAgRlhfQk9PTCBmbGFnOworICAgIEZYX0xQQllURSBwQ2hhbm5lbCwgcFNjYW5saW5lLCBwUGl4ZWw7CisgICAgdHJ5IHsKKyAgICAgICAgaWYoaW1hZ2UtPmNvbXBzWzBdLncgIT0gaW1hZ2UtPngxIHx8IGltYWdlLT5jb21wc1swXS5oICE9IGltYWdlLT55MSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmKHBpdGNoIDwgKGludCkoaW1hZ2UtPmNvbXBzWzBdLncgKiA4ICogaW1hZ2UtPm51bWNvbXBzICsgMzEpID4+IDUgPDwgMikgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIEZYU1lTX21lbXNldDgoZGVzdF9idWYsIDB4ZmYsIGltYWdlLT55MSAqIHBpdGNoKTsKKyAgICAgICAgY2hhbm5lbF9idWZzID0gRlhfQWxsb2MoRlhfQllURSosIGltYWdlLT5udW1jb21wcyk7CisgICAgICAgIGlmIChjaGFubmVsX2J1ZnMgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGFkanVzdF9jb21wcyA9IEZYX0FsbG9jKGludCwgaW1hZ2UtPm51bWNvbXBzKTsKKyAgICAgICAgaWYgKGFkanVzdF9jb21wcyA9PSBOVUxMKSB7CisgICAgICAgICAgICBGWF9GcmVlKGNoYW5uZWxfYnVmcyk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgZmxhZyA9IFRSVUU7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KWltYWdlLT5udW1jb21wczsgaSArKykgeworICAgICAgICAgICAgY2hhbm5lbF9idWZzW2ldID0gZGVzdF9idWYgKyBvZmZzZXRzW2ldOworICAgICAgICAgICAgYWRqdXN0X2NvbXBzW2ldID0gaW1hZ2UtPmNvbXBzW2ldLnByZWMgLSA4OworICAgICAgICAgICAgaWYoaSA+IDApIHsKKyAgICAgICAgICAgICAgICBpZihpbWFnZS0+Y29tcHNbaV0uZHggIT0gaW1hZ2UtPmNvbXBzW2kgLSAxXS5keAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgaW1hZ2UtPmNvbXBzW2ldLmR5ICE9IGltYWdlLT5jb21wc1tpIC0gMV0uZHkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGltYWdlLT5jb21wc1tpXS5wcmVjICE9IGltYWdlLT5jb21wc1tpIC0gMV0ucHJlYykgeworICAgICAgICAgICAgICAgICAgICBmbGFnID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3aWQgPSBpbWFnZS0+Y29tcHNbMF0udzsKKyAgICAgICAgaGVpID0gaW1hZ2UtPmNvbXBzWzBdLmg7CisgICAgICAgIGZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCAoaW50KWltYWdlLT5udW1jb21wczsgY2hhbm5lbCsrKSB7CisgICAgICAgICAgICBwQ2hhbm5lbCA9IGNoYW5uZWxfYnVmc1tjaGFubmVsXTsKKyAgICAgICAgICAgIGlmKGFkanVzdF9jb21wc1tjaGFubmVsXSA8IDApIHsKKyAgICAgICAgICAgICAgICBmb3Iocm93ID0gMDsgcm93IDwgaGVpOyByb3crKykgeworICAgICAgICAgICAgICAgICAgICBwU2NhbmxpbmUgPSBwQ2hhbm5lbCArIHJvdyAqIHBpdGNoOworICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IHdpZDsgY29sKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBQaXhlbCA9IHBTY2FubGluZSArIGNvbCAqIGltYWdlLT5udW1jb21wczsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9IGltYWdlLT5jb21wc1tjaGFubmVsXS5kYXRhW3JvdyAqIHdpZCArIGNvbF07CisgICAgICAgICAgICAgICAgICAgICAgICBzcmMgKz0gaW1hZ2UtPmNvbXBzW2NoYW5uZWxdLnNnbmQgPyAxIDw8IChpbWFnZS0+Y29tcHNbY2hhbm5lbF0ucHJlYyAtIDEpIDogMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGp1c3RfY29tcHNbY2hhbm5lbF0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBQaXhlbCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwUGl4ZWwgPSAoRlhfQllURSkoc3JjIDw8IC1hZGp1c3RfY29tcHNbY2hhbm5lbF0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3Iocm93ID0gMDsgcm93IDwgaGVpOyByb3crKykgeworICAgICAgICAgICAgICAgICAgICBwU2NhbmxpbmUgPSBwQ2hhbm5lbCArIHJvdyAqIHBpdGNoOworICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IHdpZDsgY29sKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBQaXhlbCA9IHBTY2FubGluZSArIGNvbCAqIGltYWdlLT5udW1jb21wczsKKwkJCQkJCWlmICghaW1hZ2UtPmNvbXBzW2NoYW5uZWxdLmRhdGEpIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gaW1hZ2UtPmNvbXBzW2NoYW5uZWxdLmRhdGFbcm93ICogd2lkICsgY29sXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyYyArPSBpbWFnZS0+Y29tcHNbY2hhbm5lbF0uc2duZCA/IDEgPDwgKGltYWdlLT5jb21wc1tjaGFubmVsXS5wcmVjIC0gMSkgOiAwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkanVzdF9jb21wc1tjaGFubmVsXSAtIDEgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBQaXhlbCA9IChGWF9CWVRFKSgoc3JjID4+IGFkanVzdF9jb21wc1tjaGFubmVsXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdG1wUGl4ZWwgPSAoc3JjID4+IGFkanVzdF9jb21wc1tjaGFubmVsXSkgKyAoKHNyYyA+PiAoYWRqdXN0X2NvbXBzW2NoYW5uZWxdIC0gMSkpICUgMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcFBpeGVsID4gMjU1KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcFBpeGVsID0gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG1wUGl4ZWwgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcFBpeGVsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBQaXhlbCA9IChGWF9CWVRFKXRtcFBpeGVsOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBjYXRjaCAoLi4uKSB7CisgICAgICAgIGlmIChjaGFubmVsX2J1ZnMpIHsKKyAgICAgICAgICAgIEZYX0ZyZWUoY2hhbm5lbF9idWZzKTsKKyAgICAgICAgfQorICAgICAgICBGWF9GcmVlKGFkanVzdF9jb21wcyk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgRlhfRnJlZShjaGFubmVsX2J1ZnMpOworICAgIEZYX0ZyZWUoYWRqdXN0X2NvbXBzKTsKKyAgICByZXR1cm4gVFJVRTsKK2ZhaWxlZDoKKyAgICBGWF9GcmVlKGNoYW5uZWxfYnVmcyk7CisgICAgRlhfRnJlZShhZGp1c3RfY29tcHMpOworICAgIHJldHVybiBGQUxTRTsKK30KK3ZvaWQgaW5pdGlhbGl6ZV90cmFuc2l0aW9uX3RhYmxlKCk7Cit2b2lkIGluaXRpYWxpemVfc2lnbmlmaWNhbmNlX2x1dHMoKTsKK3ZvaWQgaW5pdGlhbGl6ZV9zaWduX2x1dCgpOworQ0NvZGVjX0pweE1vZHVsZTo6Q0NvZGVjX0pweE1vZHVsZSgpCit7Cit9Cit2b2lkKiBDQ29kZWNfSnB4TW9kdWxlOjpDcmVhdGVEZWNvZGVyKEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUgLCBGWF9CT09MIHVzZUNvbG9yU3BhY2UpCit7CisgICAgQ0pQWF9EZWNvZGVyKiBwRGVjb2RlciA9IEZYX05FVyBDSlBYX0RlY29kZXI7CisgICAgaWYgKHBEZWNvZGVyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBEZWNvZGVyLT5tX3VzZUNvbG9yU3BhY2UgPSB1c2VDb2xvclNwYWNlOworICAgIGlmICghcERlY29kZXItPkluaXQoc3JjX2J1Ziwgc3JjX3NpemUpKSB7CisgICAgICAgIGRlbGV0ZSBwRGVjb2RlcjsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBwRGVjb2RlcjsKK30KK3ZvaWQgQ0NvZGVjX0pweE1vZHVsZTo6R2V0SW1hZ2VJbmZvKEZYX0xQVk9JRCBjdHgsIEZYX0RXT1JEJiB3aWR0aCwgRlhfRFdPUkQmIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEJiBjb2Rlc3RyZWFtX25Db21wcywgRlhfRFdPUkQmIG91dHB1dF9uQ29tcHMpCit7CisgICAgQ0pQWF9EZWNvZGVyKiBwRGVjb2RlciA9IChDSlBYX0RlY29kZXIqKWN0eDsKKyAgICBwRGVjb2Rlci0+R2V0SW5mbyh3aWR0aCwgaGVpZ2h0LCBjb2Rlc3RyZWFtX25Db21wcywgb3V0cHV0X25Db21wcyk7Cit9CitGWF9CT09MIENDb2RlY19KcHhNb2R1bGU6OkRlY29kZSh2b2lkKiBjdHgsIEZYX0xQQllURSBkZXN0X2RhdGEsIGludCBwaXRjaCwgRlhfQk9PTCBiVHJhbnNsYXRlQ29sb3IsIEZYX0xQQllURSBvZmZzZXRzKQoreworICAgIENKUFhfRGVjb2RlciogcERlY29kZXIgPSAoQ0pQWF9EZWNvZGVyKiljdHg7CisgICAgcmV0dXJuIHBEZWNvZGVyLT5EZWNvZGUoZGVzdF9kYXRhLCBwaXRjaCwgYlRyYW5zbGF0ZUNvbG9yLCBvZmZzZXRzKTsKK30KK3ZvaWQgQ0NvZGVjX0pweE1vZHVsZTo6RGVzdHJveURlY29kZXIodm9pZCogY3R4KQoreworICAgIENKUFhfRGVjb2RlciogcERlY29kZXIgPSAoQ0pQWF9EZWNvZGVyKiljdHg7CisgICAgZGVsZXRlIHBEZWNvZGVyOworfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9Bcml0aERlY29kZXIuaCBiL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfQXJpdGhEZWNvZGVyLmgKaW5kZXggMTY2NDI1Ny4uMjE0Njg4ZCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9Bcml0aERlY29kZXIuaAorKysgYi9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0FyaXRoRGVjb2Rlci5oCkBAIC0xLDEyNiArMSwxMjYgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0pCSUcyX0FSSVRITUVUSUNfREVDT0RFUl9IXw0KLSNkZWZpbmUgX0pCSUcyX0FSSVRITUVUSUNfREVDT0RFUl9IXw0KLSNpbmNsdWRlICJKQmlnMl9EZWZpbmUuaCINCi0jaW5jbHVkZSAiSkJpZzJfQml0U3RyZWFtLmgiDQotI2luY2x1ZGUgIkpCaWcyX0FyaXRoUWUuaCINCi10eXBlZGVmIHN0cnVjdCB7DQotICAgIHVuc2lnbmVkIGludCBNUFM7DQotICAgIHVuc2lnbmVkIGludCBJOw0KLX0gSkJpZzJBcml0aEN0eDsNCi1jbGFzcyBDSkJpZzJfQXJpdGhEZWNvZGVyIDogcHVibGljIENKQmlnMl9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDSkJpZzJfQXJpdGhEZWNvZGVyKENKQmlnMl9CaXRTdHJlYW0gKnBTdHJlYW0pOw0KLQ0KLSAgICB+Q0pCaWcyX0FyaXRoRGVjb2RlcigpOw0KLQ0KLSAgICBpbnQgREVDT0RFKEpCaWcyQXJpdGhDdHggKnBDWCk7DQotcHJpdmF0ZToNCi0NCi0gICAgdm9pZCBJTklUREVDKCk7DQotDQotICAgIHZvaWQgQllURUlOKCk7DQotICAgIHVuc2lnbmVkIGNoYXIgQjsNCi0gICAgdW5zaWduZWQgaW50IEM7DQotICAgIHVuc2lnbmVkIGludCBBOw0KLSAgICB1bnNpZ25lZCBpbnQgQ1Q7DQotICAgIENKQmlnMl9CaXRTdHJlYW0gKm1fcFN0cmVhbTsNCi19Ow0KLWlubGluZSBDSkJpZzJfQXJpdGhEZWNvZGVyOjpDSkJpZzJfQXJpdGhEZWNvZGVyKENKQmlnMl9CaXRTdHJlYW0gKnBTdHJlYW0pDQotew0KLSAgICBtX3BTdHJlYW0gPSBwU3RyZWFtOw0KLSAgICBJTklUREVDKCk7DQotfQ0KLWlubGluZSBDSkJpZzJfQXJpdGhEZWNvZGVyOjp+Q0pCaWcyX0FyaXRoRGVjb2RlcigpDQotew0KLX0NCi1pbmxpbmUgdm9pZCBDSkJpZzJfQXJpdGhEZWNvZGVyOjpJTklUREVDKCkNCi17DQotICAgIEIgPSBtX3BTdHJlYW0tPmdldEN1ckJ5dGVfYXJpdGgoKTsNCi0gICAgQyA9IChCIF4gMHhmZikgPDwgMTY7Ow0KLSAgICBCWVRFSU4oKTsNCi0gICAgQyA9IEMgPDwgNzsNCi0gICAgQ1QgPSBDVCAtIDc7DQotICAgIEEgPSAweDgwMDA7DQotfQ0KLWlubGluZSB2b2lkIENKQmlnMl9Bcml0aERlY29kZXI6OkJZVEVJTigpDQotew0KLSAgICB1bnNpZ25lZCBjaGFyIEIxOw0KLSAgICBpZihCID09IDB4ZmYpIHsNCi0gICAgICAgIEIxID0gbV9wU3RyZWFtLT5nZXROZXh0Qnl0ZV9hcml0aCgpOw0KLSAgICAgICAgaWYoQjEgPiAweDhmKSB7DQotICAgICAgICAgICAgQ1QgPSA4Ow0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBtX3BTdHJlYW0tPmluY0J5dGVJZHgoKTsNCi0gICAgICAgICAgICBCID0gQjE7DQotICAgICAgICAgICAgQyA9IEMgKyAweGZlMDAgLSAoQiA8PCA5KTsNCi0gICAgICAgICAgICBDVCA9IDc7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX3BTdHJlYW0tPmluY0J5dGVJZHgoKTsNCi0gICAgICAgIEIgPSBtX3BTdHJlYW0tPmdldEN1ckJ5dGVfYXJpdGgoKTsNCi0gICAgICAgIEMgPSBDICsgMHhmZjAwIC0gKEIgPDwgOCk7DQotICAgICAgICBDVCA9IDg7DQotICAgIH0NCi19DQotaW5saW5lIGludCBDSkJpZzJfQXJpdGhEZWNvZGVyOjpERUNPREUoSkJpZzJBcml0aEN0eCAqcENYKQ0KLXsNCi0gICAgaW50IEQ7DQotICAgIGNvbnN0IEpCaWcyQXJpdGhRZSAqIHFlID0gJlFlVGFibGVbcENYLT5JXTsNCi0gICAgQSA9IEEgLSBxZS0+UWU7DQotICAgIGlmKChDID4+IDE2KSA8IEEpIHsNCi0gICAgICAgIGlmKEEgJiAweDgwMDApIHsNCi0gICAgICAgICAgICBEID0gcENYLT5NUFM7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlmKEEgPCBxZS0+UWUpIHsNCi0gICAgICAgICAgICAgICAgRCA9IDEgLSBwQ1gtPk1QUzsNCi0gICAgICAgICAgICAgICAgaWYocWUtPm5Td2l0Y2ggPT0gMSkgew0KLSAgICAgICAgICAgICAgICAgICAgcENYLT5NUFMgPSAxIC0gcENYLT5NUFM7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcENYLT5JID0gcWUtPk5MUFM7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgRCA9IHBDWC0+TVBTOw0KLSAgICAgICAgICAgICAgICBwQ1gtPkkgPSBxZS0+Tk1QUzsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZG8gew0KLSAgICAgICAgICAgICAgICBpZiAoQ1QgPT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgQllURUlOKCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgQSA8PD0gMTsNCi0gICAgICAgICAgICAgICAgQyA8PD0gMTsNCi0gICAgICAgICAgICAgICAgQ1QtLTsNCi0gICAgICAgICAgICB9IHdoaWxlICgoQSAmIDB4ODAwMCkgPT0gMCk7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBDIC09IEEgPDwgMTY7DQotICAgICAgICBpZihBIDwgcWUtPlFlKSB7DQotICAgICAgICAgICAgQSA9IHFlLT5RZTsNCi0gICAgICAgICAgICBEID0gcENYLT5NUFM7DQotICAgICAgICAgICAgcENYLT5JID0gcWUtPk5NUFM7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIEEgPSBxZS0+UWU7DQotICAgICAgICAgICAgRCA9IDEgLSBwQ1gtPk1QUzsNCi0gICAgICAgICAgICBpZihxZS0+blN3aXRjaCA9PSAxKSB7DQotICAgICAgICAgICAgICAgIHBDWC0+TVBTID0gMSAtIHBDWC0+TVBTOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwQ1gtPkkgPSBxZS0+TkxQUzsNCi0gICAgICAgIH0NCi0gICAgICAgIGRvIHsNCi0gICAgICAgICAgICBpZiAoQ1QgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBCWVRFSU4oKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgQSA8PD0gMTsNCi0gICAgICAgICAgICBDIDw8PSAxOw0KLSAgICAgICAgICAgIENULS07DQotICAgICAgICB9IHdoaWxlICgoQSAmIDB4ODAwMCkgPT0gMCk7DQotICAgIH0NCi0gICAgcmV0dXJuIEQ7DQotfQ0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0pCSUcyX0FSSVRITUVUSUNfREVDT0RFUl9IXworI2RlZmluZSBfSkJJRzJfQVJJVEhNRVRJQ19ERUNPREVSX0hfCisjaW5jbHVkZSAiSkJpZzJfRGVmaW5lLmgiCisjaW5jbHVkZSAiSkJpZzJfQml0U3RyZWFtLmgiCisjaW5jbHVkZSAiSkJpZzJfQXJpdGhRZS5oIgordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGludCBNUFM7CisgICAgdW5zaWduZWQgaW50IEk7Cit9IEpCaWcyQXJpdGhDdHg7CitjbGFzcyBDSkJpZzJfQXJpdGhEZWNvZGVyIDogcHVibGljIENKQmlnMl9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENKQmlnMl9Bcml0aERlY29kZXIoQ0pCaWcyX0JpdFN0cmVhbSAqcFN0cmVhbSk7CisKKyAgICB+Q0pCaWcyX0FyaXRoRGVjb2RlcigpOworCisgICAgaW50IERFQ09ERShKQmlnMkFyaXRoQ3R4ICpwQ1gpOworcHJpdmF0ZToKKworICAgIHZvaWQgSU5JVERFQygpOworCisgICAgdm9pZCBCWVRFSU4oKTsKKyAgICB1bnNpZ25lZCBjaGFyIEI7CisgICAgdW5zaWduZWQgaW50IEM7CisgICAgdW5zaWduZWQgaW50IEE7CisgICAgdW5zaWduZWQgaW50IENUOworICAgIENKQmlnMl9CaXRTdHJlYW0gKm1fcFN0cmVhbTsKK307CitpbmxpbmUgQ0pCaWcyX0FyaXRoRGVjb2Rlcjo6Q0pCaWcyX0FyaXRoRGVjb2RlcihDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtKQoreworICAgIG1fcFN0cmVhbSA9IHBTdHJlYW07CisgICAgSU5JVERFQygpOworfQoraW5saW5lIENKQmlnMl9Bcml0aERlY29kZXI6On5DSkJpZzJfQXJpdGhEZWNvZGVyKCkKK3sKK30KK2lubGluZSB2b2lkIENKQmlnMl9Bcml0aERlY29kZXI6OklOSVRERUMoKQoreworICAgIEIgPSBtX3BTdHJlYW0tPmdldEN1ckJ5dGVfYXJpdGgoKTsKKyAgICBDID0gKEIgXiAweGZmKSA8PCAxNjs7CisgICAgQllURUlOKCk7CisgICAgQyA9IEMgPDwgNzsKKyAgICBDVCA9IENUIC0gNzsKKyAgICBBID0gMHg4MDAwOworfQoraW5saW5lIHZvaWQgQ0pCaWcyX0FyaXRoRGVjb2Rlcjo6QllURUlOKCkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIEIxOworICAgIGlmKEIgPT0gMHhmZikgeworICAgICAgICBCMSA9IG1fcFN0cmVhbS0+Z2V0TmV4dEJ5dGVfYXJpdGgoKTsKKyAgICAgICAgaWYoQjEgPiAweDhmKSB7CisgICAgICAgICAgICBDVCA9IDg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3BTdHJlYW0tPmluY0J5dGVJZHgoKTsKKyAgICAgICAgICAgIEIgPSBCMTsKKyAgICAgICAgICAgIEMgPSBDICsgMHhmZTAwIC0gKEIgPDwgOSk7CisgICAgICAgICAgICBDVCA9IDc7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBtX3BTdHJlYW0tPmluY0J5dGVJZHgoKTsKKyAgICAgICAgQiA9IG1fcFN0cmVhbS0+Z2V0Q3VyQnl0ZV9hcml0aCgpOworICAgICAgICBDID0gQyArIDB4ZmYwMCAtIChCIDw8IDgpOworICAgICAgICBDVCA9IDg7CisgICAgfQorfQoraW5saW5lIGludCBDSkJpZzJfQXJpdGhEZWNvZGVyOjpERUNPREUoSkJpZzJBcml0aEN0eCAqcENYKQoreworICAgIGludCBEOworICAgIGNvbnN0IEpCaWcyQXJpdGhRZSAqIHFlID0gJlFlVGFibGVbcENYLT5JXTsKKyAgICBBID0gQSAtIHFlLT5RZTsKKyAgICBpZigoQyA+PiAxNikgPCBBKSB7CisgICAgICAgIGlmKEEgJiAweDgwMDApIHsKKyAgICAgICAgICAgIEQgPSBwQ1gtPk1QUzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmKEEgPCBxZS0+UWUpIHsKKyAgICAgICAgICAgICAgICBEID0gMSAtIHBDWC0+TVBTOworICAgICAgICAgICAgICAgIGlmKHFlLT5uU3dpdGNoID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgcENYLT5NUFMgPSAxIC0gcENYLT5NUFM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBDWC0+SSA9IHFlLT5OTFBTOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBEID0gcENYLT5NUFM7CisgICAgICAgICAgICAgICAgcENYLT5JID0gcWUtPk5NUFM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgaWYgKENUID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgQllURUlOKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEEgPDw9IDE7CisgICAgICAgICAgICAgICAgQyA8PD0gMTsKKyAgICAgICAgICAgICAgICBDVC0tOworICAgICAgICAgICAgfSB3aGlsZSAoKEEgJiAweDgwMDApID09IDApOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgQyAtPSBBIDw8IDE2OworICAgICAgICBpZihBIDwgcWUtPlFlKSB7CisgICAgICAgICAgICBBID0gcWUtPlFlOworICAgICAgICAgICAgRCA9IHBDWC0+TVBTOworICAgICAgICAgICAgcENYLT5JID0gcWUtPk5NUFM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBID0gcWUtPlFlOworICAgICAgICAgICAgRCA9IDEgLSBwQ1gtPk1QUzsKKyAgICAgICAgICAgIGlmKHFlLT5uU3dpdGNoID09IDEpIHsKKyAgICAgICAgICAgICAgICBwQ1gtPk1QUyA9IDEgLSBwQ1gtPk1QUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBDWC0+SSA9IHFlLT5OTFBTOworICAgICAgICB9CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChDVCA9PSAwKSB7CisgICAgICAgICAgICAgICAgQllURUlOKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBBIDw8PSAxOworICAgICAgICAgICAgQyA8PD0gMTsKKyAgICAgICAgICAgIENULS07CisgICAgICAgIH0gd2hpbGUgKChBICYgMHg4MDAwKSA9PSAwKTsKKyAgICB9CisgICAgcmV0dXJuIEQ7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfQXJpdGhJbnREZWNvZGVyLmNwcCBiL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfQXJpdGhJbnREZWNvZGVyLmNwcAppbmRleCBiYjRlMGJiLi4xZTExNTg0IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0FyaXRoSW50RGVjb2Rlci5jcHAKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9Bcml0aEludERlY29kZXIuY3BwCkBAIC0xLDEwNSArMSwxMDUgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICJKQmlnMl9Bcml0aEludERlY29kZXIuaCINCi1DSkJpZzJfQXJpdGhJbnREZWNvZGVyOjpDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCkNCi17DQotICAgIElBeCA9IChKQmlnMkFyaXRoQ3R4KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKEpCaWcyQXJpdGhDdHgpLCA1MTIpOw0KLSAgICBKQklHMl9tZW1zZXQoSUF4LCAwLCBzaXplb2YoSkJpZzJBcml0aEN0eCkgKiA1MTIpOw0KLX0NCi1DSkJpZzJfQXJpdGhJbnREZWNvZGVyOjp+Q0pCaWcyX0FyaXRoSW50RGVjb2RlcigpDQotew0KLSAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoSUF4KTsNCi19DQotaW50IENKQmlnMl9Bcml0aEludERlY29kZXI6OmRlY29kZShDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBpbnQgKm5SZXN1bHQpDQotew0KLSAgICBpbnQgUFJFViwgVjsNCi0gICAgaW50IFMsIEQ7DQotICAgIGludCBuTmVlZEJpdHMsIG5UZW1wLCBpOw0KLSAgICBQUkVWID0gMTsNCi0gICAgUyA9IHBBcml0aERlY29kZXItPkRFQ09ERShJQXggKyBQUkVWKTsNCi0gICAgUFJFViA9IChQUkVWIDw8IDEpIHwgUzsNCi0gICAgRCA9IHBBcml0aERlY29kZXItPkRFQ09ERShJQXggKyBQUkVWKTsNCi0gICAgUFJFViA9IChQUkVWIDw8IDEpIHwgRDsNCi0gICAgaWYoRCkgew0KLSAgICAgICAgRCA9IHBBcml0aERlY29kZXItPkRFQ09ERShJQXggKyBQUkVWKTsNCi0gICAgICAgIFBSRVYgPSAoUFJFViA8PCAxKSB8IEQ7DQotICAgICAgICBpZihEKSB7DQotICAgICAgICAgICAgRCA9IHBBcml0aERlY29kZXItPkRFQ09ERShJQXggKyBQUkVWKTsNCi0gICAgICAgICAgICBQUkVWID0gKFBSRVYgPDwgMSkgfCBEOw0KLSAgICAgICAgICAgIGlmKEQpIHsNCi0gICAgICAgICAgICAgICAgRCA9IHBBcml0aERlY29kZXItPkRFQ09ERShJQXggKyBQUkVWKTsNCi0gICAgICAgICAgICAgICAgUFJFViA9IChQUkVWIDw8IDEpIHwgRDsNCi0gICAgICAgICAgICAgICAgaWYoRCkgew0KLSAgICAgICAgICAgICAgICAgICAgRCA9IHBBcml0aERlY29kZXItPkRFQ09ERShJQXggKyBQUkVWKTsNCi0gICAgICAgICAgICAgICAgICAgIFBSRVYgPSAoUFJFViA8PCAxKSB8IEQ7DQotICAgICAgICAgICAgICAgICAgICBpZihEKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbk5lZWRCaXRzID0gMzI7DQotICAgICAgICAgICAgICAgICAgICAgICAgViA9IDQ0MzY7DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5OZWVkQml0cyA9IDEyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIFYgPSAzNDA7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBuTmVlZEJpdHMgPSA4Ow0KLSAgICAgICAgICAgICAgICAgICAgViA9IDg0Ow0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgbk5lZWRCaXRzID0gNjsNCi0gICAgICAgICAgICAgICAgViA9IDIwOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbk5lZWRCaXRzID0gNDsNCi0gICAgICAgICAgICBWID0gNDsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG5OZWVkQml0cyA9IDI7DQotICAgICAgICBWID0gMDsNCi0gICAgfQ0KLSAgICBuVGVtcCA9IDA7DQotICAgIGZvcihpID0gMDsgaSA8IG5OZWVkQml0czsgaSsrKSB7DQotICAgICAgICBEID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKElBeCArIFBSRVYpOw0KLSAgICAgICAgaWYoUFJFViA8IDI1Nikgew0KLSAgICAgICAgICAgIFBSRVYgPSAoUFJFViA8PCAxKSB8IEQ7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIFBSRVYgPSAoKChQUkVWIDw8IDEpIHwgRCkgJiA1MTEpIHwgMjU2Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgblRlbXAgPSAoblRlbXAgPDwgMSkgfCBEOw0KLSAgICB9DQotICAgIFYgKz0gblRlbXA7DQotICAgIGlmKFMgPT0gMSAmJiBWID4gMCkgew0KLSAgICAgICAgViA9IC1WOw0KLSAgICB9DQotICAgICpuUmVzdWx0ID0gVjsNCi0gICAgaWYoUyA9PSAxICYmIFYgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIEpCSUcyX09PQjsNCi0gICAgfQ0KLSAgICByZXR1cm4gMDsNCi19DQotQ0pCaWcyX0FyaXRoSWFpZERlY29kZXI6OkNKQmlnMl9Bcml0aElhaWREZWNvZGVyKHVuc2lnbmVkIGNoYXIgU0JTWU1DT0RFTEVOQSkNCi17DQotICAgIFNCU1lNQ09ERUxFTiA9IFNCU1lNQ09ERUxFTkE7DQotICAgIElBSUQgPSAoSkJpZzJBcml0aEN0eCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihKQmlnMkFyaXRoQ3R4KSwgKDEgPDwgU0JTWU1DT0RFTEVOKSk7DQotICAgIEpCSUcyX21lbXNldChJQUlELCAwLCBzaXplb2YoSkJpZzJBcml0aEN0eCkgKiAoaW50KSgxIDw8IFNCU1lNQ09ERUxFTikpOw0KLX0NCi1DSkJpZzJfQXJpdGhJYWlkRGVjb2Rlcjo6fkNKQmlnMl9Bcml0aElhaWREZWNvZGVyKCkNCi17DQotICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShJQUlEKTsNCi19DQotaW50IENKQmlnMl9Bcml0aElhaWREZWNvZGVyOjpkZWNvZGUoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgaW50ICpuUmVzdWx0KQ0KLXsNCi0gICAgaW50IFBSRVY7DQotICAgIGludCBEOw0KLSAgICBpbnQgaTsNCi0gICAgUFJFViA9IDE7DQotICAgIGZvcihpID0gMDsgaSA8IFNCU1lNQ09ERUxFTjsgaSsrKSB7DQotICAgICAgICBEID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKElBSUQgKyBQUkVWKTsNCi0gICAgICAgIFBSRVYgPSAoUFJFViA8PCAxKSB8IEQ7DQotICAgIH0NCi0gICAgUFJFViA9IFBSRVYgLSAoMSA8PCBTQlNZTUNPREVMRU4pOw0KLSAgICAqblJlc3VsdCA9IFBSRVY7DQotICAgIHJldHVybiAwOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiSkJpZzJfQXJpdGhJbnREZWNvZGVyLmgiCitDSkJpZzJfQXJpdGhJbnREZWNvZGVyOjpDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCkKK3sKKyAgICBJQXggPSAoSkJpZzJBcml0aEN0eCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihKQmlnMkFyaXRoQ3R4KSwgNTEyKTsKKyAgICBKQklHMl9tZW1zZXQoSUF4LCAwLCBzaXplb2YoSkJpZzJBcml0aEN0eCkgKiA1MTIpOworfQorQ0pCaWcyX0FyaXRoSW50RGVjb2Rlcjo6fkNKQmlnMl9Bcml0aEludERlY29kZXIoKQoreworICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShJQXgpOworfQoraW50IENKQmlnMl9Bcml0aEludERlY29kZXI6OmRlY29kZShDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBpbnQgKm5SZXN1bHQpCit7CisgICAgaW50IFBSRVYsIFY7CisgICAgaW50IFMsIEQ7CisgICAgaW50IG5OZWVkQml0cywgblRlbXAsIGk7CisgICAgUFJFViA9IDE7CisgICAgUyA9IHBBcml0aERlY29kZXItPkRFQ09ERShJQXggKyBQUkVWKTsKKyAgICBQUkVWID0gKFBSRVYgPDwgMSkgfCBTOworICAgIEQgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoSUF4ICsgUFJFVik7CisgICAgUFJFViA9IChQUkVWIDw8IDEpIHwgRDsKKyAgICBpZihEKSB7CisgICAgICAgIEQgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoSUF4ICsgUFJFVik7CisgICAgICAgIFBSRVYgPSAoUFJFViA8PCAxKSB8IEQ7CisgICAgICAgIGlmKEQpIHsKKyAgICAgICAgICAgIEQgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoSUF4ICsgUFJFVik7CisgICAgICAgICAgICBQUkVWID0gKFBSRVYgPDwgMSkgfCBEOworICAgICAgICAgICAgaWYoRCkgeworICAgICAgICAgICAgICAgIEQgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoSUF4ICsgUFJFVik7CisgICAgICAgICAgICAgICAgUFJFViA9IChQUkVWIDw8IDEpIHwgRDsKKyAgICAgICAgICAgICAgICBpZihEKSB7CisgICAgICAgICAgICAgICAgICAgIEQgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoSUF4ICsgUFJFVik7CisgICAgICAgICAgICAgICAgICAgIFBSRVYgPSAoUFJFViA8PCAxKSB8IEQ7CisgICAgICAgICAgICAgICAgICAgIGlmKEQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5OZWVkQml0cyA9IDMyOworICAgICAgICAgICAgICAgICAgICAgICAgViA9IDQ0MzY7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuTmVlZEJpdHMgPSAxMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFYgPSAzNDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBuTmVlZEJpdHMgPSA4OworICAgICAgICAgICAgICAgICAgICBWID0gODQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBuTmVlZEJpdHMgPSA2OworICAgICAgICAgICAgICAgIFYgPSAyMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG5OZWVkQml0cyA9IDQ7CisgICAgICAgICAgICBWID0gNDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG5OZWVkQml0cyA9IDI7CisgICAgICAgIFYgPSAwOworICAgIH0KKyAgICBuVGVtcCA9IDA7CisgICAgZm9yKGkgPSAwOyBpIDwgbk5lZWRCaXRzOyBpKyspIHsKKyAgICAgICAgRCA9IHBBcml0aERlY29kZXItPkRFQ09ERShJQXggKyBQUkVWKTsKKyAgICAgICAgaWYoUFJFViA8IDI1NikgeworICAgICAgICAgICAgUFJFViA9IChQUkVWIDw8IDEpIHwgRDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFBSRVYgPSAoKChQUkVWIDw8IDEpIHwgRCkgJiA1MTEpIHwgMjU2OworICAgICAgICB9CisgICAgICAgIG5UZW1wID0gKG5UZW1wIDw8IDEpIHwgRDsKKyAgICB9CisgICAgViArPSBuVGVtcDsKKyAgICBpZihTID09IDEgJiYgViA+IDApIHsKKyAgICAgICAgViA9IC1WOworICAgIH0KKyAgICAqblJlc3VsdCA9IFY7CisgICAgaWYoUyA9PSAxICYmIFYgPT0gMCkgeworICAgICAgICByZXR1cm4gSkJJRzJfT09COworICAgIH0KKyAgICByZXR1cm4gMDsKK30KK0NKQmlnMl9Bcml0aElhaWREZWNvZGVyOjpDSkJpZzJfQXJpdGhJYWlkRGVjb2Rlcih1bnNpZ25lZCBjaGFyIFNCU1lNQ09ERUxFTkEpCit7CisgICAgU0JTWU1DT0RFTEVOID0gU0JTWU1DT0RFTEVOQTsKKyAgICBJQUlEID0gKEpCaWcyQXJpdGhDdHgqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihzaXplb2YoSkJpZzJBcml0aEN0eCksICgxIDw8IFNCU1lNQ09ERUxFTikpOworICAgIEpCSUcyX21lbXNldChJQUlELCAwLCBzaXplb2YoSkJpZzJBcml0aEN0eCkgKiAoaW50KSgxIDw8IFNCU1lNQ09ERUxFTikpOworfQorQ0pCaWcyX0FyaXRoSWFpZERlY29kZXI6On5DSkJpZzJfQXJpdGhJYWlkRGVjb2RlcigpCit7CisgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKElBSUQpOworfQoraW50IENKQmlnMl9Bcml0aElhaWREZWNvZGVyOjpkZWNvZGUoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgaW50ICpuUmVzdWx0KQoreworICAgIGludCBQUkVWOworICAgIGludCBEOworICAgIGludCBpOworICAgIFBSRVYgPSAxOworICAgIGZvcihpID0gMDsgaSA8IFNCU1lNQ09ERUxFTjsgaSsrKSB7CisgICAgICAgIEQgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoSUFJRCArIFBSRVYpOworICAgICAgICBQUkVWID0gKFBSRVYgPDwgMSkgfCBEOworICAgIH0KKyAgICBQUkVWID0gUFJFViAtICgxIDw8IFNCU1lNQ09ERUxFTik7CisgICAgKm5SZXN1bHQgPSBQUkVWOworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9Bcml0aEludERlY29kZXIuaCBiL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfQXJpdGhJbnREZWNvZGVyLmgKaW5kZXggYWQ0NjU2Zi4uNGVhMTA0YyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9Bcml0aEludERlY29kZXIuaAorKysgYi9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0FyaXRoSW50RGVjb2Rlci5oCkBAIC0xLDM5ICsxLDM5IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9KQklHMl9BUklUSF9JTlRfREVDT0RFUl9IXw0KLSNkZWZpbmUgX0pCSUcyX0FSSVRIX0lOVF9ERUNPREVSX0hfDQotI2luY2x1ZGUgIkpCaWcyX01vZHVsZS5oIg0KLSNpbmNsdWRlICJKQmlnMl9Bcml0aERlY29kZXIuaCINCi1jbGFzcyBDSkJpZzJfQXJpdGhJbnREZWNvZGVyIDogcHVibGljIENKQmlnMl9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCk7DQotDQotICAgIH5DSkJpZzJfQXJpdGhJbnREZWNvZGVyKCk7DQotDQotICAgIGludCBkZWNvZGUoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgaW50ICpuUmVzdWx0KTsNCi1wcml2YXRlOg0KLQ0KLSAgICBKQmlnMkFyaXRoQ3R4ICpJQXg7DQotfTsNCi1jbGFzcyBDSkJpZzJfQXJpdGhJYWlkRGVjb2RlciA6IHB1YmxpYyBDSkJpZzJfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ0pCaWcyX0FyaXRoSWFpZERlY29kZXIodW5zaWduZWQgY2hhciBTQlNZTUNPREVMRU5BKTsNCi0NCi0gICAgfkNKQmlnMl9Bcml0aElhaWREZWNvZGVyKCk7DQotDQotICAgIGludCBkZWNvZGUoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgaW50ICpuUmVzdWx0KTsNCi1wcml2YXRlOg0KLQ0KLSAgICBKQmlnMkFyaXRoQ3R4ICpJQUlEOw0KLQ0KLSAgICB1bnNpZ25lZCBjaGFyIFNCU1lNQ09ERUxFTjsNCi19Ow0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0pCSUcyX0FSSVRIX0lOVF9ERUNPREVSX0hfCisjZGVmaW5lIF9KQklHMl9BUklUSF9JTlRfREVDT0RFUl9IXworI2luY2x1ZGUgIkpCaWcyX01vZHVsZS5oIgorI2luY2x1ZGUgIkpCaWcyX0FyaXRoRGVjb2Rlci5oIgorY2xhc3MgQ0pCaWcyX0FyaXRoSW50RGVjb2RlciA6IHB1YmxpYyBDSkJpZzJfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCk7CisKKyAgICB+Q0pCaWcyX0FyaXRoSW50RGVjb2RlcigpOworCisgICAgaW50IGRlY29kZShDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBpbnQgKm5SZXN1bHQpOworcHJpdmF0ZToKKworICAgIEpCaWcyQXJpdGhDdHggKklBeDsKK307CitjbGFzcyBDSkJpZzJfQXJpdGhJYWlkRGVjb2RlciA6IHB1YmxpYyBDSkJpZzJfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDSkJpZzJfQXJpdGhJYWlkRGVjb2Rlcih1bnNpZ25lZCBjaGFyIFNCU1lNQ09ERUxFTkEpOworCisgICAgfkNKQmlnMl9Bcml0aElhaWREZWNvZGVyKCk7CisKKyAgICBpbnQgZGVjb2RlKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIGludCAqblJlc3VsdCk7Citwcml2YXRlOgorCisgICAgSkJpZzJBcml0aEN0eCAqSUFJRDsKKworICAgIHVuc2lnbmVkIGNoYXIgU0JTWU1DT0RFTEVOOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9Bcml0aFFlLmggYi9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0FyaXRoUWUuaAppbmRleCAxN2JjMThhLi42MGZiYmM5IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0FyaXRoUWUuaAorKysgYi9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0FyaXRoUWUuaApAQCAtMSw2NCArMSw2NCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfSkJJRzJfQVJJVEhfUUVfSF8NCi0jZGVmaW5lIF9KQklHMl9BUklUSF9RRV9IXw0KLXR5cGVkZWYgc3RydWN0IHsNCi0gICAgdW5zaWduZWQgaW50IFFlOw0KLSAgICB1bnNpZ25lZCBpbnQgTk1QUzsNCi0gICAgdW5zaWduZWQgaW50IE5MUFM7DQotICAgIHVuc2lnbmVkIGludCBuU3dpdGNoOw0KLX0gSkJpZzJBcml0aFFlOw0KLWNvbnN0IEpCaWcyQXJpdGhRZSBRZVRhYmxlW10gPSB7DQotICAgIHsgMHg1NjAxLCAgMSwgIDEsIDEgfSwNCi0gICAgeyAweDM0MDEsICAyLCAgNiwgMCB9LA0KLSAgICB7IDB4MTgwMSwgIDMsICA5LCAwIH0sDQotICAgIHsgMHgwQUMxLCAgNCwgMTIsIDAgfSwNCi0gICAgeyAweDA1MjEsICA1LCAyOSwgMCB9LA0KLSAgICB7IDB4MDIyMSwgMzgsIDMzLCAwIH0sDQotICAgIHsgMHg1NjAxLCAgNywgIDYsIDEgfSwNCi0gICAgeyAweDU0MDEsICA4LCAxNCwgMCB9LA0KLSAgICB7IDB4NDgwMSwgIDksIDE0LCAwIH0sDQotICAgIHsgMHgzODAxLCAxMCwgMTQsIDAgfSwNCi0gICAgeyAweDMwMDEsIDExLCAxNywgMCB9LA0KLSAgICB7IDB4MjQwMSwgMTIsIDE4LCAwIH0sDQotICAgIHsgMHgxQzAxLCAxMywgMjAsIDAgfSwNCi0gICAgeyAweDE2MDEsIDI5LCAyMSwgMCB9LA0KLSAgICB7IDB4NTYwMSwgMTUsIDE0LCAxIH0sDQotICAgIHsgMHg1NDAxLCAxNiwgMTQsIDAgfSwNCi0gICAgeyAweDUxMDEsIDE3LCAxNSwgMCB9LA0KLSAgICB7IDB4NDgwMSwgMTgsIDE2LCAwIH0sDQotICAgIHsgMHgzODAxLCAxOSwgMTcsIDAgfSwNCi0gICAgeyAweDM0MDEsIDIwLCAxOCwgMCB9LA0KLSAgICB7IDB4MzAwMSwgMjEsIDE5LCAwIH0sDQotICAgIHsgMHgyODAxLCAyMiwgMTksIDAgfSwNCi0gICAgeyAweDI0MDEsIDIzLCAyMCwgMCB9LA0KLSAgICB7IDB4MjIwMSwgMjQsIDIxLCAwIH0sDQotICAgIHsgMHgxQzAxLCAyNSwgMjIsIDAgfSwNCi0gICAgeyAweDE4MDEsIDI2LCAyMywgMCB9LA0KLSAgICB7IDB4MTYwMSwgMjcsIDI0LCAwIH0sDQotICAgIHsgMHgxNDAxLCAyOCwgMjUsIDAgfSwNCi0gICAgeyAweDEyMDEsIDI5LCAyNiwgMCB9LA0KLSAgICB7IDB4MTEwMSwgMzAsIDI3LCAwIH0sDQotICAgIHsgMHgwQUMxLCAzMSwgMjgsIDAgfSwNCi0gICAgeyAweDA5QzEsIDMyLCAyOSwgMCB9LA0KLSAgICB7IDB4MDhBMSwgMzMsIDMwLCAwIH0sDQotICAgIHsgMHgwNTIxLCAzNCwgMzEsIDAgfSwNCi0gICAgeyAweDA0NDEsIDM1LCAzMiwgMCB9LA0KLSAgICB7IDB4MDJBMSwgMzYsIDMzLCAwIH0sDQotICAgIHsgMHgwMjIxLCAzNywgMzQsIDAgfSwNCi0gICAgeyAweDAxNDEsIDM4LCAzNSwgMCB9LA0KLSAgICB7IDB4MDExMSwgMzksIDM2LCAwIH0sDQotICAgIHsgMHgwMDg1LCA0MCwgMzcsIDAgfSwNCi0gICAgeyAweDAwNDksIDQxLCAzOCwgMCB9LA0KLSAgICB7IDB4MDAyNSwgNDIsIDM5LCAwIH0sDQotICAgIHsgMHgwMDE1LCA0MywgNDAsIDAgfSwNCi0gICAgeyAweDAwMDksIDQ0LCA0MSwgMCB9LA0KLSAgICB7IDB4MDAwNSwgNDUsIDQyLCAwIH0sDQotICAgIHsgMHgwMDAxLCA0NSwgNDMsIDAgfSwNCi0gICAgeyAweDU2MDEsIDQ2LCA0NiwgMCB9DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9KQklHMl9BUklUSF9RRV9IXworI2RlZmluZSBfSkJJRzJfQVJJVEhfUUVfSF8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBpbnQgUWU7CisgICAgdW5zaWduZWQgaW50IE5NUFM7CisgICAgdW5zaWduZWQgaW50IE5MUFM7CisgICAgdW5zaWduZWQgaW50IG5Td2l0Y2g7Cit9IEpCaWcyQXJpdGhRZTsKK2NvbnN0IEpCaWcyQXJpdGhRZSBRZVRhYmxlW10gPSB7CisgICAgeyAweDU2MDEsICAxLCAgMSwgMSB9LAorICAgIHsgMHgzNDAxLCAgMiwgIDYsIDAgfSwKKyAgICB7IDB4MTgwMSwgIDMsICA5LCAwIH0sCisgICAgeyAweDBBQzEsICA0LCAxMiwgMCB9LAorICAgIHsgMHgwNTIxLCAgNSwgMjksIDAgfSwKKyAgICB7IDB4MDIyMSwgMzgsIDMzLCAwIH0sCisgICAgeyAweDU2MDEsICA3LCAgNiwgMSB9LAorICAgIHsgMHg1NDAxLCAgOCwgMTQsIDAgfSwKKyAgICB7IDB4NDgwMSwgIDksIDE0LCAwIH0sCisgICAgeyAweDM4MDEsIDEwLCAxNCwgMCB9LAorICAgIHsgMHgzMDAxLCAxMSwgMTcsIDAgfSwKKyAgICB7IDB4MjQwMSwgMTIsIDE4LCAwIH0sCisgICAgeyAweDFDMDEsIDEzLCAyMCwgMCB9LAorICAgIHsgMHgxNjAxLCAyOSwgMjEsIDAgfSwKKyAgICB7IDB4NTYwMSwgMTUsIDE0LCAxIH0sCisgICAgeyAweDU0MDEsIDE2LCAxNCwgMCB9LAorICAgIHsgMHg1MTAxLCAxNywgMTUsIDAgfSwKKyAgICB7IDB4NDgwMSwgMTgsIDE2LCAwIH0sCisgICAgeyAweDM4MDEsIDE5LCAxNywgMCB9LAorICAgIHsgMHgzNDAxLCAyMCwgMTgsIDAgfSwKKyAgICB7IDB4MzAwMSwgMjEsIDE5LCAwIH0sCisgICAgeyAweDI4MDEsIDIyLCAxOSwgMCB9LAorICAgIHsgMHgyNDAxLCAyMywgMjAsIDAgfSwKKyAgICB7IDB4MjIwMSwgMjQsIDIxLCAwIH0sCisgICAgeyAweDFDMDEsIDI1LCAyMiwgMCB9LAorICAgIHsgMHgxODAxLCAyNiwgMjMsIDAgfSwKKyAgICB7IDB4MTYwMSwgMjcsIDI0LCAwIH0sCisgICAgeyAweDE0MDEsIDI4LCAyNSwgMCB9LAorICAgIHsgMHgxMjAxLCAyOSwgMjYsIDAgfSwKKyAgICB7IDB4MTEwMSwgMzAsIDI3LCAwIH0sCisgICAgeyAweDBBQzEsIDMxLCAyOCwgMCB9LAorICAgIHsgMHgwOUMxLCAzMiwgMjksIDAgfSwKKyAgICB7IDB4MDhBMSwgMzMsIDMwLCAwIH0sCisgICAgeyAweDA1MjEsIDM0LCAzMSwgMCB9LAorICAgIHsgMHgwNDQxLCAzNSwgMzIsIDAgfSwKKyAgICB7IDB4MDJBMSwgMzYsIDMzLCAwIH0sCisgICAgeyAweDAyMjEsIDM3LCAzNCwgMCB9LAorICAgIHsgMHgwMTQxLCAzOCwgMzUsIDAgfSwKKyAgICB7IDB4MDExMSwgMzksIDM2LCAwIH0sCisgICAgeyAweDAwODUsIDQwLCAzNywgMCB9LAorICAgIHsgMHgwMDQ5LCA0MSwgMzgsIDAgfSwKKyAgICB7IDB4MDAyNSwgNDIsIDM5LCAwIH0sCisgICAgeyAweDAwMTUsIDQzLCA0MCwgMCB9LAorICAgIHsgMHgwMDA5LCA0NCwgNDEsIDAgfSwKKyAgICB7IDB4MDAwNSwgNDUsIDQyLCAwIH0sCisgICAgeyAweDAwMDEsIDQ1LCA0MywgMCB9LAorICAgIHsgMHg1NjAxLCA0NiwgNDYsIDAgfQorfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9CaXRTdHJlYW0uaCBiL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfQml0U3RyZWFtLmgKaW5kZXggOGVkNDczYS4uOWQ1ZDI5NCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9CaXRTdHJlYW0uaAorKysgYi9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0JpdFN0cmVhbS5oCkBAIC0xLDMxNiArMSwzMTYgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0pCSUcyX0JJVF9TVFJFQU1fSF8NCi0jZGVmaW5lIF9KQklHMl9CSVRfU1RSRUFNX0hfDQotI2luY2x1ZGUgIkpCaWcyX0RlZmluZS5oIg0KLWNsYXNzIENKQmlnMl9CaXRTdHJlYW0gOiBwdWJsaWMgQ0pCaWcyX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENKQmlnMl9CaXRTdHJlYW0oRlhfQllURSAqcEJ1ZmZlciwgRlhfRFdPUkQgZHdMZW5ndGgpOw0KLQ0KLSAgICBDSkJpZzJfQml0U3RyZWFtKENKQmlnMl9CaXRTdHJlYW0gJmJzKTsNCi0NCi0gICAgfkNKQmlnMl9CaXRTdHJlYW0oKTsNCi0NCi0gICAgRlhfSU5UMzIgcmVhZE5CaXRzKEZYX0RXT1JEIG5CaXRzLCBGWF9EV09SRCAqZHdSZXN1bHQpOw0KLQ0KLSAgICBGWF9JTlQzMiByZWFkTkJpdHMoRlhfRFdPUkQgbkJpdHMsIEZYX0lOVDMyICpuUmVzdWx0KTsNCi0NCi0gICAgRlhfSU5UMzIgcmVhZDFCaXQoRlhfRFdPUkQgKmR3UmVzdWx0KTsNCi0NCi0gICAgRlhfSU5UMzIgcmVhZDFCaXQoRlhfQk9PTCAgKmJSZXN1bHQpOw0KLQ0KLSAgICBGWF9JTlQzMiByZWFkMUJ5dGUoRlhfQllURSAqY1Jlc3VsdCk7DQotDQotICAgIEZYX0lOVDMyIHJlYWRJbnRlZ2VyKEZYX0RXT1JEICpkd1Jlc3VsdCk7DQotDQotICAgIEZYX0lOVDMyIHJlYWRTaG9ydEludGVnZXIoRlhfV09SRCAqd1Jlc3VsdCk7DQotDQotICAgIHZvaWQgYWxpZ25CeXRlKCk7DQotDQotICAgIHZvaWQgYWxpZ240Qnl0ZSgpOw0KLQ0KLSAgICBGWF9CWVRFIGdldEF0KEZYX0RXT1JEIGR3T2Zmc2V0KTsNCi0NCi0gICAgRlhfQllURSBnZXRDdXJCeXRlKCk7DQotDQotICAgIEZYX0JZVEUgZ2V0TmV4dEJ5dGUoKTsNCi0NCi0gICAgRlhfSU5UMzIgaW5jQnl0ZUlkeCgpOw0KLQ0KLSAgICBGWF9CWVRFIGdldEN1ckJ5dGVfYXJpdGgoKTsNCi0NCi0gICAgRlhfQllURSBnZXROZXh0Qnl0ZV9hcml0aCgpOw0KLQ0KLSAgICBGWF9EV09SRCBnZXRPZmZzZXQoKTsNCi0NCi0gICAgdm9pZCBzZXRPZmZzZXQoRlhfRFdPUkQgZHdPZmZzZXQpOw0KLQ0KLSAgICBGWF9EV09SRCBnZXRCaXRQb3MoKTsNCi0NCi0gICAgdm9pZCBzZXRCaXRQb3MoRlhfRFdPUkQgZHdCaXRQb3MpOw0KLQ0KLSAgICBGWF9CWVRFICpnZXRCdWYoKTsNCi0NCi0gICAgRlhfRFdPUkQgZ2V0TGVuZ3RoKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fZHdMZW5ndGg7DQotICAgIH0NCi0NCi0gICAgRlhfQllURSAqZ2V0UG9pbnRlcigpOw0KLQ0KLSAgICB2b2lkIG9mZnNldChGWF9EV09SRCBkd09mZnNldCk7DQotDQotICAgIEZYX0RXT1JEIGdldEJ5dGVMZWZ0KCk7DQotcHJpdmF0ZToNCi0NCi0gICAgRlhfQllURSAqbV9wQnVmOw0KLQ0KLSAgICBGWF9EV09SRCBtX2R3TGVuZ3RoOw0KLQ0KLSAgICBGWF9EV09SRCBtX2R3Qnl0ZUlkeDsNCi0NCi0gICAgRlhfRFdPUkQgbV9kd0JpdElkeDsNCi19Ow0KLWlubGluZSBDSkJpZzJfQml0U3RyZWFtOjpDSkJpZzJfQml0U3RyZWFtKEZYX0JZVEUgKnBCdWZmZXIsIEZYX0RXT1JEIGR3TGVuZ3RoKQ0KLXsNCi0gICAgbV9wQnVmID0gcEJ1ZmZlcjsNCi0gICAgbV9kd0xlbmd0aCA9IGR3TGVuZ3RoOw0KLSAgICBtX2R3Qnl0ZUlkeCA9IDA7DQotICAgIG1fZHdCaXRJZHggID0gMDsNCi0gICAgaWYgKG1fZHdMZW5ndGggPiAyNTYgKiAxMDI0ICogMTAyNCkgew0KLSAgICAgICAgbV9kd0xlbmd0aCA9IDA7DQotICAgICAgICBtX3BCdWYgPSBOVUxMOw0KLSAgICB9DQotfQ0KLWlubGluZSBDSkJpZzJfQml0U3RyZWFtOjpDSkJpZzJfQml0U3RyZWFtKENKQmlnMl9CaXRTdHJlYW0gJmJzKQ0KLXsNCi0gICAgbV9wQnVmID0gYnMubV9wQnVmOw0KLSAgICBtX2R3TGVuZ3RoID0gYnMubV9kd0xlbmd0aDsNCi0gICAgbV9kd0J5dGVJZHggPSBicy5tX2R3Qnl0ZUlkeDsNCi0gICAgbV9kd0JpdElkeCA9IGJzLm1fZHdCaXRJZHg7DQotfQ0KLWlubGluZSBDSkJpZzJfQml0U3RyZWFtOjp+Q0pCaWcyX0JpdFN0cmVhbSgpDQotew0KLX0NCi1pbmxpbmUgRlhfSU5UMzIgQ0pCaWcyX0JpdFN0cmVhbTo6cmVhZE5CaXRzKEZYX0RXT1JEIGR3Qml0cywgRlhfRFdPUkQgKmR3UmVzdWx0KQ0KLXsNCi0gICAgRlhfRFdPUkQgZHdUZW1wID0gKG1fZHdCeXRlSWR4IDw8IDMpICsgbV9kd0JpdElkeDsNCi0gICAgaWYoZHdUZW1wIDw9IChtX2R3TGVuZ3RoIDw8IDMpKSB7DQotICAgICAgICAqZHdSZXN1bHQgPSAwOw0KLSAgICAgICAgaWYoZHdUZW1wICsgZHdCaXRzIDw9IChtX2R3TGVuZ3RoIDw8IDMpKSB7DQotICAgICAgICAgICAgZHdUZW1wID0gZHdCaXRzOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBkd1RlbXAgPSAobV9kd0xlbmd0aCA8PCAzKSAtIGR3VGVtcDsNCi0gICAgICAgIH0NCi0gICAgICAgIHdoaWxlKGR3VGVtcCA+IDApIHsNCi0gICAgICAgICAgICAqZHdSZXN1bHQgPSAoKmR3UmVzdWx0IDw8IDEpIHwgKChtX3BCdWZbbV9kd0J5dGVJZHhdID4+ICg3IC0gbV9kd0JpdElkeCkpICYgMHgwMSk7DQotICAgICAgICAgICAgaWYobV9kd0JpdElkeCA9PSA3KSB7DQotICAgICAgICAgICAgICAgIG1fZHdCeXRlSWR4ICsrOw0KLSAgICAgICAgICAgICAgICBtX2R3Qml0SWR4ID0gMDsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBtX2R3Qml0SWR4ICsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBkd1RlbXAgLS07DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLX0NCi1pbmxpbmUgRlhfSU5UMzIgQ0pCaWcyX0JpdFN0cmVhbTo6cmVhZE5CaXRzKEZYX0RXT1JEIGR3Qml0cywgRlhfSU5UMzIgKm5SZXN1bHQpDQotew0KLSAgICBGWF9EV09SRCBkd1RlbXAgPSAobV9kd0J5dGVJZHggPDwgMykgKyBtX2R3Qml0SWR4Ow0KLSAgICBpZihkd1RlbXAgPD0gKG1fZHdMZW5ndGggPDwgMykpIHsNCi0gICAgICAgICpuUmVzdWx0ID0gMDsNCi0gICAgICAgIGlmKGR3VGVtcCArIGR3Qml0cyA8PSAobV9kd0xlbmd0aCA8PCAzKSkgew0KLSAgICAgICAgICAgIGR3VGVtcCA9IGR3Qml0czsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgZHdUZW1wID0gKG1fZHdMZW5ndGggPDwgMykgLSBkd1RlbXA7DQotICAgICAgICB9DQotICAgICAgICB3aGlsZShkd1RlbXAgPiAwKSB7DQotICAgICAgICAgICAgKm5SZXN1bHQgPSAoKm5SZXN1bHQgPDwgMSkgfCAoKG1fcEJ1ZlttX2R3Qnl0ZUlkeF0gPj4gKDcgLSBtX2R3Qml0SWR4KSkgJiAweDAxKTsNCi0gICAgICAgICAgICBpZihtX2R3Qml0SWR4ID09IDcpIHsNCi0gICAgICAgICAgICAgICAgbV9kd0J5dGVJZHggKys7DQotICAgICAgICAgICAgICAgIG1fZHdCaXRJZHggPSAwOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIG1fZHdCaXRJZHggKys7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGR3VGVtcCAtLTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotfQ0KLQ0KLWlubGluZSBGWF9JTlQzMiBDSkJpZzJfQml0U3RyZWFtOjpyZWFkMUJpdChGWF9EV09SRCAqZHdSZXN1bHQpDQotew0KLSAgICBpZihtX2R3Qnl0ZUlkeCA8IG1fZHdMZW5ndGgpIHsNCi0gICAgICAgICpkd1Jlc3VsdCA9IChtX3BCdWZbbV9kd0J5dGVJZHhdID4+ICg3IC0gbV9kd0JpdElkeCkpICYgMHgwMTsNCi0gICAgICAgIGlmKG1fZHdCaXRJZHggPT0gNykgew0KLSAgICAgICAgICAgIG1fZHdCeXRlSWR4ICsrOw0KLSAgICAgICAgICAgIG1fZHdCaXRJZHggPSAwOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBtX2R3Qml0SWR4ICsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0gZWxzZSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi19DQotDQotaW5saW5lIEZYX0lOVDMyIENKQmlnMl9CaXRTdHJlYW06OnJlYWQxQml0KEZYX0JPT0wgKmJSZXN1bHQpDQotew0KLSAgICBpZihtX2R3Qnl0ZUlkeCA8IG1fZHdMZW5ndGgpIHsNCi0gICAgICAgICpiUmVzdWx0ID0gKG1fcEJ1ZlttX2R3Qnl0ZUlkeF0gPj4gKDcgLSBtX2R3Qml0SWR4KSkgJiAweDAxOw0KLSAgICAgICAgaWYobV9kd0JpdElkeCA9PSA3KSB7DQotICAgICAgICAgICAgbV9kd0J5dGVJZHggKys7DQotICAgICAgICAgICAgbV9kd0JpdElkeCA9IDA7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIG1fZHdCaXRJZHggKys7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLX0NCi1pbmxpbmUgRlhfSU5UMzIgQ0pCaWcyX0JpdFN0cmVhbTo6cmVhZDFCeXRlKEZYX0JZVEUgKmNSZXN1bHQpDQotew0KLSAgICBpZihtX2R3Qnl0ZUlkeCA8IG1fZHdMZW5ndGgpIHsNCi0gICAgICAgICpjUmVzdWx0ID0gbV9wQnVmW21fZHdCeXRlSWR4XTsNCi0gICAgICAgIG1fZHdCeXRlSWR4ICsrOw0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0gZWxzZSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi19DQotDQotaW5saW5lIEZYX0lOVDMyIENKQmlnMl9CaXRTdHJlYW06OnJlYWRJbnRlZ2VyKEZYX0RXT1JEICpkd1Jlc3VsdCkNCi17DQotICAgIGlmKG1fZHdCeXRlSWR4ICsgMyA8IG1fZHdMZW5ndGgpIHsNCi0gICAgICAgICpkd1Jlc3VsdCA9IChtX3BCdWZbbV9kd0J5dGVJZHhdIDw8IDI0KSB8IChtX3BCdWZbbV9kd0J5dGVJZHggKyAxXSA8PCAxNikNCi0gICAgICAgICAgICAgICAgICAgIHwgKG1fcEJ1ZlttX2R3Qnl0ZUlkeCArIDJdIDw8IDgpIHwgbV9wQnVmW21fZHdCeXRlSWR4ICsgM107DQotICAgICAgICBtX2R3Qnl0ZUlkeCArPSA0Ow0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0gZWxzZSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi19DQotDQotaW5saW5lIEZYX0lOVDMyIENKQmlnMl9CaXRTdHJlYW06OnJlYWRTaG9ydEludGVnZXIoRlhfV09SRCAqZHdSZXN1bHQpDQotew0KLSAgICBpZihtX2R3Qnl0ZUlkeCArIDEgPCBtX2R3TGVuZ3RoKSB7DQotICAgICAgICAqZHdSZXN1bHQgPSAobV9wQnVmW21fZHdCeXRlSWR4XSA8PCA4KSB8IG1fcEJ1ZlttX2R3Qnl0ZUlkeCArIDFdOw0KLSAgICAgICAgbV9kd0J5dGVJZHggKz0gMjsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotfQ0KLWlubGluZSB2b2lkIENKQmlnMl9CaXRTdHJlYW06OmFsaWduQnl0ZSgpDQotew0KLSAgICBpZihtX2R3Qml0SWR4ICE9IDApIHsNCi0gICAgICAgIG1fZHdCeXRlSWR4ICsrOw0KLSAgICAgICAgbV9kd0JpdElkeCA9IDA7DQotICAgIH0NCi19DQotaW5saW5lIHZvaWQgQ0pCaWcyX0JpdFN0cmVhbTo6YWxpZ240Qnl0ZSgpDQotew0KLSAgICBpZihtX2R3Qml0SWR4ICE9IDApIHsNCi0gICAgICAgIG1fZHdCeXRlSWR4ICsrOw0KLSAgICAgICAgbV9kd0JpdElkeCA9IDA7DQotICAgIH0NCi0gICAgbV9kd0J5dGVJZHggPSAobV9kd0J5dGVJZHggKyAzKSAmIC00Ow0KLX0NCi1pbmxpbmUgRlhfQllURSBDSkJpZzJfQml0U3RyZWFtOjpnZXRBdChGWF9EV09SRCBkd09mZnNldCkNCi17DQotICAgIGlmKGR3T2Zmc2V0IDwgbV9kd0xlbmd0aCkgew0KLSAgICAgICAgcmV0dXJuIG1fcEJ1Zltkd09mZnNldF07DQotICAgIH0gZWxzZSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLX0NCi1pbmxpbmUgRlhfQllURSBDSkJpZzJfQml0U3RyZWFtOjpnZXRDdXJCeXRlKCkNCi17DQotICAgIGlmKG1fZHdCeXRlSWR4IDwgbV9kd0xlbmd0aCkgew0KLSAgICAgICAgcmV0dXJuIG1fcEJ1ZlttX2R3Qnl0ZUlkeF07DQotICAgIH0gZWxzZSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLX0NCi1pbmxpbmUgRlhfQllURSBDSkJpZzJfQml0U3RyZWFtOjpnZXROZXh0Qnl0ZSgpDQotew0KLSAgICBpZihtX2R3Qnl0ZUlkeCArIDEgPCBtX2R3TGVuZ3RoKSB7DQotICAgICAgICByZXR1cm4gbV9wQnVmW21fZHdCeXRlSWR4ICsgMV07DQotICAgIH0gZWxzZSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLX0NCi1pbmxpbmUgRlhfSU5UMzIgQ0pCaWcyX0JpdFN0cmVhbTo6aW5jQnl0ZUlkeCgpDQotew0KLSAgICBpZihtX2R3Qnl0ZUlkeCA8IG1fZHdMZW5ndGgpIHsNCi0gICAgICAgIG1fZHdCeXRlSWR4ICsrOw0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0gZWxzZSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi19DQotaW5saW5lIEZYX0JZVEUgQ0pCaWcyX0JpdFN0cmVhbTo6Z2V0Q3VyQnl0ZV9hcml0aCgpDQotew0KLSAgICBpZihtX2R3Qnl0ZUlkeCA8IG1fZHdMZW5ndGgpIHsNCi0gICAgICAgIHJldHVybiBtX3BCdWZbbV9kd0J5dGVJZHhdOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmV0dXJuIDB4ZmY7DQotICAgIH0NCi19DQotaW5saW5lIEZYX0JZVEUgQ0pCaWcyX0JpdFN0cmVhbTo6Z2V0TmV4dEJ5dGVfYXJpdGgoKQ0KLXsNCi0gICAgaWYobV9kd0J5dGVJZHggKyAxIDwgbV9kd0xlbmd0aCkgew0KLSAgICAgICAgcmV0dXJuIG1fcEJ1ZlttX2R3Qnl0ZUlkeCArIDFdOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmV0dXJuIDB4ZmY7DQotICAgIH0NCi19DQotaW5saW5lIEZYX0RXT1JEIENKQmlnMl9CaXRTdHJlYW06OmdldE9mZnNldCgpDQotew0KLSAgICByZXR1cm4gbV9kd0J5dGVJZHg7DQotfQ0KLWlubGluZSB2b2lkIENKQmlnMl9CaXRTdHJlYW06OnNldE9mZnNldChGWF9EV09SRCBkd09mZnNldCkNCi17DQotICAgIGlmIChkd09mZnNldCA+IG1fZHdMZW5ndGgpIHsNCi0gICAgICAgIGR3T2Zmc2V0ID0gbV9kd0xlbmd0aDsNCi0gICAgfQ0KLSAgICBtX2R3Qnl0ZUlkeCA9IGR3T2Zmc2V0Ow0KLX0NCi1pbmxpbmUgRlhfRFdPUkQgQ0pCaWcyX0JpdFN0cmVhbTo6Z2V0Qml0UG9zKCkNCi17DQotICAgIHJldHVybiAobV9kd0J5dGVJZHggPDwgMykgKyBtX2R3Qml0SWR4Ow0KLX0NCi1pbmxpbmUgdm9pZCBDSkJpZzJfQml0U3RyZWFtOjpzZXRCaXRQb3MoRlhfRFdPUkQgZHdCaXRQb3MpDQotew0KLSAgICBtX2R3Qnl0ZUlkeCA9IGR3Qml0UG9zID4+IDM7DQotICAgIG1fZHdCaXRJZHggPSBkd0JpdFBvcyAmIDc7DQotfQ0KLWlubGluZSBGWF9CWVRFICpDSkJpZzJfQml0U3RyZWFtOjpnZXRCdWYoKQ0KLXsNCi0gICAgcmV0dXJuIG1fcEJ1ZjsNCi19DQotaW5saW5lIEZYX0JZVEUgKkNKQmlnMl9CaXRTdHJlYW06OmdldFBvaW50ZXIoKQ0KLXsNCi0gICAgcmV0dXJuIG1fcEJ1ZiArIG1fZHdCeXRlSWR4Ow0KLX0NCi1pbmxpbmUgdm9pZCBDSkJpZzJfQml0U3RyZWFtOjpvZmZzZXQoRlhfRFdPUkQgZHdPZmZzZXQpDQotew0KLSAgICBtX2R3Qnl0ZUlkeCArPSBkd09mZnNldDsNCi19DQotaW5saW5lIEZYX0RXT1JEIENKQmlnMl9CaXRTdHJlYW06OmdldEJ5dGVMZWZ0KCkNCi17DQotICAgIHJldHVybiBtX2R3TGVuZ3RoIC0gbV9kd0J5dGVJZHg7DQotfQ0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0pCSUcyX0JJVF9TVFJFQU1fSF8KKyNkZWZpbmUgX0pCSUcyX0JJVF9TVFJFQU1fSF8KKyNpbmNsdWRlICJKQmlnMl9EZWZpbmUuaCIKK2NsYXNzIENKQmlnMl9CaXRTdHJlYW0gOiBwdWJsaWMgQ0pCaWcyX09iamVjdAoreworcHVibGljOgorCisgICAgQ0pCaWcyX0JpdFN0cmVhbShGWF9CWVRFICpwQnVmZmVyLCBGWF9EV09SRCBkd0xlbmd0aCk7CisKKyAgICBDSkJpZzJfQml0U3RyZWFtKENKQmlnMl9CaXRTdHJlYW0gJmJzKTsKKworICAgIH5DSkJpZzJfQml0U3RyZWFtKCk7CisKKyAgICBGWF9JTlQzMiByZWFkTkJpdHMoRlhfRFdPUkQgbkJpdHMsIEZYX0RXT1JEICpkd1Jlc3VsdCk7CisKKyAgICBGWF9JTlQzMiByZWFkTkJpdHMoRlhfRFdPUkQgbkJpdHMsIEZYX0lOVDMyICpuUmVzdWx0KTsKKworICAgIEZYX0lOVDMyIHJlYWQxQml0KEZYX0RXT1JEICpkd1Jlc3VsdCk7CisKKyAgICBGWF9JTlQzMiByZWFkMUJpdChGWF9CT09MICAqYlJlc3VsdCk7CisKKyAgICBGWF9JTlQzMiByZWFkMUJ5dGUoRlhfQllURSAqY1Jlc3VsdCk7CisKKyAgICBGWF9JTlQzMiByZWFkSW50ZWdlcihGWF9EV09SRCAqZHdSZXN1bHQpOworCisgICAgRlhfSU5UMzIgcmVhZFNob3J0SW50ZWdlcihGWF9XT1JEICp3UmVzdWx0KTsKKworICAgIHZvaWQgYWxpZ25CeXRlKCk7CisKKyAgICB2b2lkIGFsaWduNEJ5dGUoKTsKKworICAgIEZYX0JZVEUgZ2V0QXQoRlhfRFdPUkQgZHdPZmZzZXQpOworCisgICAgRlhfQllURSBnZXRDdXJCeXRlKCk7CisKKyAgICBGWF9CWVRFIGdldE5leHRCeXRlKCk7CisKKyAgICBGWF9JTlQzMiBpbmNCeXRlSWR4KCk7CisKKyAgICBGWF9CWVRFIGdldEN1ckJ5dGVfYXJpdGgoKTsKKworICAgIEZYX0JZVEUgZ2V0TmV4dEJ5dGVfYXJpdGgoKTsKKworICAgIEZYX0RXT1JEIGdldE9mZnNldCgpOworCisgICAgdm9pZCBzZXRPZmZzZXQoRlhfRFdPUkQgZHdPZmZzZXQpOworCisgICAgRlhfRFdPUkQgZ2V0Qml0UG9zKCk7CisKKyAgICB2b2lkIHNldEJpdFBvcyhGWF9EV09SRCBkd0JpdFBvcyk7CisKKyAgICBGWF9CWVRFICpnZXRCdWYoKTsKKworICAgIEZYX0RXT1JEIGdldExlbmd0aCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9kd0xlbmd0aDsKKyAgICB9CisKKyAgICBGWF9CWVRFICpnZXRQb2ludGVyKCk7CisKKyAgICB2b2lkIG9mZnNldChGWF9EV09SRCBkd09mZnNldCk7CisKKyAgICBGWF9EV09SRCBnZXRCeXRlTGVmdCgpOworcHJpdmF0ZToKKworICAgIEZYX0JZVEUgKm1fcEJ1ZjsKKworICAgIEZYX0RXT1JEIG1fZHdMZW5ndGg7CisKKyAgICBGWF9EV09SRCBtX2R3Qnl0ZUlkeDsKKworICAgIEZYX0RXT1JEIG1fZHdCaXRJZHg7Cit9OworaW5saW5lIENKQmlnMl9CaXRTdHJlYW06OkNKQmlnMl9CaXRTdHJlYW0oRlhfQllURSAqcEJ1ZmZlciwgRlhfRFdPUkQgZHdMZW5ndGgpCit7CisgICAgbV9wQnVmID0gcEJ1ZmZlcjsKKyAgICBtX2R3TGVuZ3RoID0gZHdMZW5ndGg7CisgICAgbV9kd0J5dGVJZHggPSAwOworICAgIG1fZHdCaXRJZHggID0gMDsKKyAgICBpZiAobV9kd0xlbmd0aCA+IDI1NiAqIDEwMjQgKiAxMDI0KSB7CisgICAgICAgIG1fZHdMZW5ndGggPSAwOworICAgICAgICBtX3BCdWYgPSBOVUxMOworICAgIH0KK30KK2lubGluZSBDSkJpZzJfQml0U3RyZWFtOjpDSkJpZzJfQml0U3RyZWFtKENKQmlnMl9CaXRTdHJlYW0gJmJzKQoreworICAgIG1fcEJ1ZiA9IGJzLm1fcEJ1ZjsKKyAgICBtX2R3TGVuZ3RoID0gYnMubV9kd0xlbmd0aDsKKyAgICBtX2R3Qnl0ZUlkeCA9IGJzLm1fZHdCeXRlSWR4OworICAgIG1fZHdCaXRJZHggPSBicy5tX2R3Qml0SWR4OworfQoraW5saW5lIENKQmlnMl9CaXRTdHJlYW06On5DSkJpZzJfQml0U3RyZWFtKCkKK3sKK30KK2lubGluZSBGWF9JTlQzMiBDSkJpZzJfQml0U3RyZWFtOjpyZWFkTkJpdHMoRlhfRFdPUkQgZHdCaXRzLCBGWF9EV09SRCAqZHdSZXN1bHQpCit7CisgICAgRlhfRFdPUkQgZHdUZW1wID0gKG1fZHdCeXRlSWR4IDw8IDMpICsgbV9kd0JpdElkeDsKKyAgICBpZihkd1RlbXAgPD0gKG1fZHdMZW5ndGggPDwgMykpIHsKKyAgICAgICAgKmR3UmVzdWx0ID0gMDsKKyAgICAgICAgaWYoZHdUZW1wICsgZHdCaXRzIDw9IChtX2R3TGVuZ3RoIDw8IDMpKSB7CisgICAgICAgICAgICBkd1RlbXAgPSBkd0JpdHM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkd1RlbXAgPSAobV9kd0xlbmd0aCA8PCAzKSAtIGR3VGVtcDsKKyAgICAgICAgfQorICAgICAgICB3aGlsZShkd1RlbXAgPiAwKSB7CisgICAgICAgICAgICAqZHdSZXN1bHQgPSAoKmR3UmVzdWx0IDw8IDEpIHwgKChtX3BCdWZbbV9kd0J5dGVJZHhdID4+ICg3IC0gbV9kd0JpdElkeCkpICYgMHgwMSk7CisgICAgICAgICAgICBpZihtX2R3Qml0SWR4ID09IDcpIHsKKyAgICAgICAgICAgICAgICBtX2R3Qnl0ZUlkeCArKzsKKyAgICAgICAgICAgICAgICBtX2R3Qml0SWR4ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9kd0JpdElkeCArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGR3VGVtcCAtLTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorfQoraW5saW5lIEZYX0lOVDMyIENKQmlnMl9CaXRTdHJlYW06OnJlYWROQml0cyhGWF9EV09SRCBkd0JpdHMsIEZYX0lOVDMyICpuUmVzdWx0KQoreworICAgIEZYX0RXT1JEIGR3VGVtcCA9IChtX2R3Qnl0ZUlkeCA8PCAzKSArIG1fZHdCaXRJZHg7CisgICAgaWYoZHdUZW1wIDw9IChtX2R3TGVuZ3RoIDw8IDMpKSB7CisgICAgICAgICpuUmVzdWx0ID0gMDsKKyAgICAgICAgaWYoZHdUZW1wICsgZHdCaXRzIDw9IChtX2R3TGVuZ3RoIDw8IDMpKSB7CisgICAgICAgICAgICBkd1RlbXAgPSBkd0JpdHM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkd1RlbXAgPSAobV9kd0xlbmd0aCA8PCAzKSAtIGR3VGVtcDsKKyAgICAgICAgfQorICAgICAgICB3aGlsZShkd1RlbXAgPiAwKSB7CisgICAgICAgICAgICAqblJlc3VsdCA9ICgqblJlc3VsdCA8PCAxKSB8ICgobV9wQnVmW21fZHdCeXRlSWR4XSA+PiAoNyAtIG1fZHdCaXRJZHgpKSAmIDB4MDEpOworICAgICAgICAgICAgaWYobV9kd0JpdElkeCA9PSA3KSB7CisgICAgICAgICAgICAgICAgbV9kd0J5dGVJZHggKys7CisgICAgICAgICAgICAgICAgbV9kd0JpdElkeCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fZHdCaXRJZHggKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkd1RlbXAgLS07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KK30KKworaW5saW5lIEZYX0lOVDMyIENKQmlnMl9CaXRTdHJlYW06OnJlYWQxQml0KEZYX0RXT1JEICpkd1Jlc3VsdCkKK3sKKyAgICBpZihtX2R3Qnl0ZUlkeCA8IG1fZHdMZW5ndGgpIHsKKyAgICAgICAgKmR3UmVzdWx0ID0gKG1fcEJ1ZlttX2R3Qnl0ZUlkeF0gPj4gKDcgLSBtX2R3Qml0SWR4KSkgJiAweDAxOworICAgICAgICBpZihtX2R3Qml0SWR4ID09IDcpIHsKKyAgICAgICAgICAgIG1fZHdCeXRlSWR4ICsrOworICAgICAgICAgICAgbV9kd0JpdElkeCA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2R3Qml0SWR4ICsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9Cit9CisKK2lubGluZSBGWF9JTlQzMiBDSkJpZzJfQml0U3RyZWFtOjpyZWFkMUJpdChGWF9CT09MICpiUmVzdWx0KQoreworICAgIGlmKG1fZHdCeXRlSWR4IDwgbV9kd0xlbmd0aCkgeworICAgICAgICAqYlJlc3VsdCA9IChtX3BCdWZbbV9kd0J5dGVJZHhdID4+ICg3IC0gbV9kd0JpdElkeCkpICYgMHgwMTsKKyAgICAgICAgaWYobV9kd0JpdElkeCA9PSA3KSB7CisgICAgICAgICAgICBtX2R3Qnl0ZUlkeCArKzsKKyAgICAgICAgICAgIG1fZHdCaXRJZHggPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9kd0JpdElkeCArKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorfQoraW5saW5lIEZYX0lOVDMyIENKQmlnMl9CaXRTdHJlYW06OnJlYWQxQnl0ZShGWF9CWVRFICpjUmVzdWx0KQoreworICAgIGlmKG1fZHdCeXRlSWR4IDwgbV9kd0xlbmd0aCkgeworICAgICAgICAqY1Jlc3VsdCA9IG1fcEJ1ZlttX2R3Qnl0ZUlkeF07CisgICAgICAgIG1fZHdCeXRlSWR4ICsrOworICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorfQorCitpbmxpbmUgRlhfSU5UMzIgQ0pCaWcyX0JpdFN0cmVhbTo6cmVhZEludGVnZXIoRlhfRFdPUkQgKmR3UmVzdWx0KQoreworICAgIGlmKG1fZHdCeXRlSWR4ICsgMyA8IG1fZHdMZW5ndGgpIHsKKyAgICAgICAgKmR3UmVzdWx0ID0gKG1fcEJ1ZlttX2R3Qnl0ZUlkeF0gPDwgMjQpIHwgKG1fcEJ1ZlttX2R3Qnl0ZUlkeCArIDFdIDw8IDE2KQorICAgICAgICAgICAgICAgICAgICB8IChtX3BCdWZbbV9kd0J5dGVJZHggKyAyXSA8PCA4KSB8IG1fcEJ1ZlttX2R3Qnl0ZUlkeCArIDNdOworICAgICAgICBtX2R3Qnl0ZUlkeCArPSA0OworICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorfQorCitpbmxpbmUgRlhfSU5UMzIgQ0pCaWcyX0JpdFN0cmVhbTo6cmVhZFNob3J0SW50ZWdlcihGWF9XT1JEICpkd1Jlc3VsdCkKK3sKKyAgICBpZihtX2R3Qnl0ZUlkeCArIDEgPCBtX2R3TGVuZ3RoKSB7CisgICAgICAgICpkd1Jlc3VsdCA9IChtX3BCdWZbbV9kd0J5dGVJZHhdIDw8IDgpIHwgbV9wQnVmW21fZHdCeXRlSWR4ICsgMV07CisgICAgICAgIG1fZHdCeXRlSWR4ICs9IDI7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9Cit9CitpbmxpbmUgdm9pZCBDSkJpZzJfQml0U3RyZWFtOjphbGlnbkJ5dGUoKQoreworICAgIGlmKG1fZHdCaXRJZHggIT0gMCkgeworICAgICAgICBtX2R3Qnl0ZUlkeCArKzsKKyAgICAgICAgbV9kd0JpdElkeCA9IDA7CisgICAgfQorfQoraW5saW5lIHZvaWQgQ0pCaWcyX0JpdFN0cmVhbTo6YWxpZ240Qnl0ZSgpCit7CisgICAgaWYobV9kd0JpdElkeCAhPSAwKSB7CisgICAgICAgIG1fZHdCeXRlSWR4ICsrOworICAgICAgICBtX2R3Qml0SWR4ID0gMDsKKyAgICB9CisgICAgbV9kd0J5dGVJZHggPSAobV9kd0J5dGVJZHggKyAzKSAmIC00OworfQoraW5saW5lIEZYX0JZVEUgQ0pCaWcyX0JpdFN0cmVhbTo6Z2V0QXQoRlhfRFdPUkQgZHdPZmZzZXQpCit7CisgICAgaWYoZHdPZmZzZXQgPCBtX2R3TGVuZ3RoKSB7CisgICAgICAgIHJldHVybiBtX3BCdWZbZHdPZmZzZXRdOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KK2lubGluZSBGWF9CWVRFIENKQmlnMl9CaXRTdHJlYW06OmdldEN1ckJ5dGUoKQoreworICAgIGlmKG1fZHdCeXRlSWR4IDwgbV9kd0xlbmd0aCkgeworICAgICAgICByZXR1cm4gbV9wQnVmW21fZHdCeXRlSWR4XTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CitpbmxpbmUgRlhfQllURSBDSkJpZzJfQml0U3RyZWFtOjpnZXROZXh0Qnl0ZSgpCit7CisgICAgaWYobV9kd0J5dGVJZHggKyAxIDwgbV9kd0xlbmd0aCkgeworICAgICAgICByZXR1cm4gbV9wQnVmW21fZHdCeXRlSWR4ICsgMV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQoraW5saW5lIEZYX0lOVDMyIENKQmlnMl9CaXRTdHJlYW06OmluY0J5dGVJZHgoKQoreworICAgIGlmKG1fZHdCeXRlSWR4IDwgbV9kd0xlbmd0aCkgeworICAgICAgICBtX2R3Qnl0ZUlkeCArKzsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KK30KK2lubGluZSBGWF9CWVRFIENKQmlnMl9CaXRTdHJlYW06OmdldEN1ckJ5dGVfYXJpdGgoKQoreworICAgIGlmKG1fZHdCeXRlSWR4IDwgbV9kd0xlbmd0aCkgeworICAgICAgICByZXR1cm4gbV9wQnVmW21fZHdCeXRlSWR4XTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gMHhmZjsKKyAgICB9Cit9CitpbmxpbmUgRlhfQllURSBDSkJpZzJfQml0U3RyZWFtOjpnZXROZXh0Qnl0ZV9hcml0aCgpCit7CisgICAgaWYobV9kd0J5dGVJZHggKyAxIDwgbV9kd0xlbmd0aCkgeworICAgICAgICByZXR1cm4gbV9wQnVmW21fZHdCeXRlSWR4ICsgMV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIDB4ZmY7CisgICAgfQorfQoraW5saW5lIEZYX0RXT1JEIENKQmlnMl9CaXRTdHJlYW06OmdldE9mZnNldCgpCit7CisgICAgcmV0dXJuIG1fZHdCeXRlSWR4OworfQoraW5saW5lIHZvaWQgQ0pCaWcyX0JpdFN0cmVhbTo6c2V0T2Zmc2V0KEZYX0RXT1JEIGR3T2Zmc2V0KQoreworICAgIGlmIChkd09mZnNldCA+IG1fZHdMZW5ndGgpIHsKKyAgICAgICAgZHdPZmZzZXQgPSBtX2R3TGVuZ3RoOworICAgIH0KKyAgICBtX2R3Qnl0ZUlkeCA9IGR3T2Zmc2V0OworfQoraW5saW5lIEZYX0RXT1JEIENKQmlnMl9CaXRTdHJlYW06OmdldEJpdFBvcygpCit7CisgICAgcmV0dXJuIChtX2R3Qnl0ZUlkeCA8PCAzKSArIG1fZHdCaXRJZHg7Cit9CitpbmxpbmUgdm9pZCBDSkJpZzJfQml0U3RyZWFtOjpzZXRCaXRQb3MoRlhfRFdPUkQgZHdCaXRQb3MpCit7CisgICAgbV9kd0J5dGVJZHggPSBkd0JpdFBvcyA+PiAzOworICAgIG1fZHdCaXRJZHggPSBkd0JpdFBvcyAmIDc7Cit9CitpbmxpbmUgRlhfQllURSAqQ0pCaWcyX0JpdFN0cmVhbTo6Z2V0QnVmKCkKK3sKKyAgICByZXR1cm4gbV9wQnVmOworfQoraW5saW5lIEZYX0JZVEUgKkNKQmlnMl9CaXRTdHJlYW06OmdldFBvaW50ZXIoKQoreworICAgIHJldHVybiBtX3BCdWYgKyBtX2R3Qnl0ZUlkeDsKK30KK2lubGluZSB2b2lkIENKQmlnMl9CaXRTdHJlYW06Om9mZnNldChGWF9EV09SRCBkd09mZnNldCkKK3sKKyAgICBtX2R3Qnl0ZUlkeCArPSBkd09mZnNldDsKK30KK2lubGluZSBGWF9EV09SRCBDSkJpZzJfQml0U3RyZWFtOjpnZXRCeXRlTGVmdCgpCit7CisgICAgcmV0dXJuIG1fZHdMZW5ndGggLSBtX2R3Qnl0ZUlkeDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9Db250ZXh0LmNwcCBiL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfQ29udGV4dC5jcHAKaW5kZXggODU2YzBjMy4uNTQzZjlhYiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9Db250ZXh0LmNwcAorKysgYi9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0NvbnRleHQuY3BwCkBAIC0xLDE4MTIgKzEsMTgxMiBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIkpCaWcyX0NvbnRleHQuaCINCi12b2lkIE91dHB1dEJpdG1hcChDSkJpZzJfSW1hZ2UqIHBJbWFnZSkNCi17DQotICAgIGlmKCFwSW1hZ2UpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLX0NCi1DSkJpZzJfQ29udGV4dCAqQ0pCaWcyX0NvbnRleHQ6OkNyZWF0ZUNvbnRleHQoQ0pCaWcyX01vZHVsZSAqcE1vZHVsZSwgRlhfQllURSAqcEdsb2JhbERhdGEsIEZYX0RXT1JEIGR3R2xvYmFsTGVuZ3RoLA0KLSAgICAgICAgRlhfQllURSAqcERhdGEsIEZYX0RXT1JEIGR3TGVuZ3RoLCBGWF9JTlQzMiBuU3RyZWFtVHlwZSwgSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICByZXR1cm4gbmV3KHBNb2R1bGUpIENKQmlnMl9Db250ZXh0KHBHbG9iYWxEYXRhLCBkd0dsb2JhbExlbmd0aCwgcERhdGEsIGR3TGVuZ3RoLCBuU3RyZWFtVHlwZSwgcFBhdXNlKTsNCi19DQotdm9pZCBDSkJpZzJfQ29udGV4dDo6RGVzdHJveUNvbnRleHQoQ0pCaWcyX0NvbnRleHQgKnBDb250ZXh0KQ0KLXsNCi0gICAgaWYocENvbnRleHQpIHsNCi0gICAgICAgIGRlbGV0ZSBwQ29udGV4dDsNCi0gICAgfQ0KLX0NCi1DSkJpZzJfQ29udGV4dDo6Q0pCaWcyX0NvbnRleHQoRlhfQllURSAqcEdsb2JhbERhdGEsIEZYX0RXT1JEIGR3R2xvYmFsTGVuZ3RoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9CWVRFICpwRGF0YSwgRlhfRFdPUkQgZHdMZW5ndGgsIEZYX0lOVDMyIG5TdHJlYW1UeXBlLCBJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIGlmKHBHbG9iYWxEYXRhICYmIChkd0dsb2JhbExlbmd0aCA+IDApKSB7DQotICAgICAgICBKQklHMl9BTExPQyhtX3BHbG9iYWxDb250ZXh0LCBDSkJpZzJfQ29udGV4dChOVUxMLCAwLCBwR2xvYmFsRGF0YSwgZHdHbG9iYWxMZW5ndGgsDQotICAgICAgICAgICAgICAgICAgICBKQklHMl9FTUJFRF9TVFJFQU0sIHBQYXVzZSkpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wR2xvYmFsQ29udGV4dCA9IE5VTEw7DQotICAgIH0NCi0gICAgSkJJRzJfQUxMT0MobV9wU3RyZWFtLCBDSkJpZzJfQml0U3RyZWFtKHBEYXRhLCBkd0xlbmd0aCkpOw0KLSAgICBtX25TdHJlYW1UeXBlID0gblN0cmVhbVR5cGU7DQotICAgIG1fblN0YXRlID0gSkJJRzJfT1VUX09GX1BBR0U7DQotICAgIEpCSUcyX0FMTE9DKG1fcFNlZ21lbnRMaXN0LCBDSkJpZzJfTGlzdDxDSkJpZzJfU2VnbWVudD4pOw0KLSAgICBKQklHMl9BTExPQyhtX3BQYWdlSW5mb0xpc3QsIENKQmlnMl9MaXN0PEpCaWcyUGFnZUluZm8+KDEpKTsNCi0gICAgbV9wUGFnZSA9IE5VTEw7DQotICAgIG1fYkJ1ZlNwZWNpZmllZCA9IEZBTFNFOw0KLSAgICBtX3BQYXVzZSA9IHBQYXVzZTsNCi0gICAgbV9uU2VnbWVudERlY29kZWQgPSAwOw0KLSAgICBtX1BhdXNlU3RlcCA9IDEwOw0KLSAgICBtX3BBcml0aERlY29kZXIgPSBOVUxMOw0KLSAgICBtX3BHUkQgPSBOVUxMOw0KLSAgICBtX2diQ29udGV4dCA9IE5VTEw7DQotICAgIG1fcFNlZ21lbnQgPSBOVUxMOw0KLSAgICBtX2R3T2Zmc2V0ID0gMDsNCi0gICAgbV9Qcm9jZXNzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfRlJBTUVfUkVBRFk7DQotfQ0KLUNKQmlnMl9Db250ZXh0Ojp+Q0pCaWcyX0NvbnRleHQoKQ0KLXsNCi0gICAgaWYobV9wQXJpdGhEZWNvZGVyKSB7DQotICAgICAgICBkZWxldGUgbV9wQXJpdGhEZWNvZGVyOw0KLSAgICB9DQotICAgIG1fcEFyaXRoRGVjb2RlciA9IE5VTEw7DQotICAgIGlmKG1fcEdSRCkgew0KLSAgICAgICAgZGVsZXRlIG1fcEdSRDsNCi0gICAgfQ0KLSAgICBtX3BHUkQgPSBOVUxMOw0KLSAgICBpZihtX2diQ29udGV4dCkgew0KLSAgICAgICAgZGVsZXRlIG1fZ2JDb250ZXh0Ow0KLSAgICB9DQotICAgIG1fZ2JDb250ZXh0ID0gTlVMTDsNCi0gICAgaWYobV9wR2xvYmFsQ29udGV4dCkgew0KLSAgICAgICAgZGVsZXRlIG1fcEdsb2JhbENvbnRleHQ7DQotICAgIH0NCi0gICAgbV9wR2xvYmFsQ29udGV4dCA9IE5VTEw7DQotICAgIGlmKG1fcFBhZ2VJbmZvTGlzdCkgew0KLSAgICAgICAgZGVsZXRlIG1fcFBhZ2VJbmZvTGlzdDsNCi0gICAgfQ0KLSAgICBtX3BQYWdlSW5mb0xpc3QgPSBOVUxMOw0KLSAgICBpZihtX2JCdWZTcGVjaWZpZWQgJiYgbV9wUGFnZSkgew0KLSAgICAgICAgZGVsZXRlIG1fcFBhZ2U7DQotICAgIH0NCi0gICAgbV9wUGFnZSA9IE5VTEw7DQotICAgIGlmKG1fcFN0cmVhbSkgew0KLSAgICAgICAgZGVsZXRlIG1fcFN0cmVhbTsNCi0gICAgfQ0KLSAgICBtX3BTdHJlYW0gPSBOVUxMOw0KLSAgICBpZihtX3BTZWdtZW50TGlzdCkgew0KLSAgICAgICAgZGVsZXRlIG1fcFNlZ21lbnRMaXN0Ow0KLSAgICB9DQotICAgIG1fcFNlZ21lbnRMaXN0ID0gTlVMTDsNCi19DQotRlhfSU5UMzIgQ0pCaWcyX0NvbnRleHQ6OmRlY29kZUZpbGUoSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBGWF9CWVRFIGNGbGFnczsNCi0gICAgRlhfRFdPUkQgZHdUZW1wOw0KLSAgICBjb25zdCBGWF9CWVRFIGZpbGVJRFtdID0gezB4OTcsIDB4NEEsIDB4NDIsIDB4MzIsIDB4MEQsIDB4MEEsIDB4MUEsIDB4MEF9Ow0KLSAgICBGWF9JTlQzMiBuUmV0Ow0KLSAgICBpZihtX3BTdHJlYW0tPmdldEJ5dGVMZWZ0KCkgPCA4KSB7DQotICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJmaWxlIGhlYWRlciB0b28gc2hvcnQuIik7DQotICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfVE9PX1NIT1JUOw0KLSAgICAgICAgZ290byBmYWlsZWQ7DQotICAgIH0NCi0gICAgaWYoSkJJRzJfbWVtY21wKG1fcFN0cmVhbS0+Z2V0UG9pbnRlcigpLCBmaWxlSUQsIDgpICE9IDApIHsNCi0gICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoIm5vdCBqYmlnMiBmaWxlIik7DQotICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRklMRV9GT1JNQVQ7DQotICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgfQ0KLSAgICBtX3BTdHJlYW0tPm9mZnNldCg4KTsNCi0gICAgaWYobV9wU3RyZWFtLT5yZWFkMUJ5dGUoJmNGbGFncykgIT0gMCkgew0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiZmlsZSBoZWFkZXIgdG9vIHNob3J0LiIpOw0KLSAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX1RPT19TSE9SVDsNCi0gICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICB9DQotICAgIGlmKCEoY0ZsYWdzICYgMHgwMikpIHsNCi0gICAgICAgIGlmKG1fcFN0cmVhbS0+cmVhZEludGVnZXIoJmR3VGVtcCkgIT0gMCkgew0KLSAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoImZpbGUgaGVhZGVyIHRvbyBzaG9ydC4iKTsNCi0gICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfVE9PX1NIT1JUOw0KLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoZHdUZW1wID4gMCkgew0KLSAgICAgICAgICAgIGRlbGV0ZSBtX3BQYWdlSW5mb0xpc3Q7DQotICAgICAgICAgICAgSkJJRzJfQUxMT0MobV9wUGFnZUluZm9MaXN0LCBDSkJpZzJfTGlzdDxKQmlnMlBhZ2VJbmZvPihkd1RlbXApKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZihjRmxhZ3MgJiAweDAxKSB7DQotICAgICAgICBtX25TdHJlYW1UeXBlID0gSkJJRzJfU1FVRU5USUFMX1NUUkVBTTsNCi0gICAgICAgIHJldHVybiBkZWNvZGVfU3F1ZW50aWFsT3JnbmF6YXRpb24ocFBhdXNlKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1fblN0cmVhbVR5cGUgPSBKQklHMl9SQU5ET01fU1RSRUFNOw0KLSAgICAgICAgcmV0dXJuIGRlY29kZV9SYW5kb21PcmduYXphdGlvbl9GaXJzdFBhZ2UocFBhdXNlKTsNCi0gICAgfQ0KLWZhaWxlZDoNCi0gICAgcmV0dXJuIG5SZXQ7DQotfQ0KLUZYX0lOVDMyIENKQmlnMl9Db250ZXh0OjpkZWNvZGVfU3F1ZW50aWFsT3JnbmF6YXRpb24oSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBGWF9JTlQzMiBuUmV0Ow0KLSAgICBpZihtX3BTdHJlYW0tPmdldEJ5dGVMZWZ0KCkgPiAwKSB7DQotICAgICAgICB3aGlsZShtX3BTdHJlYW0tPmdldEJ5dGVMZWZ0KCkgPj0gSkJJRzJfTUlOX1NFR01FTlRfU0laRSkgew0KLSAgICAgICAgICAgIGlmKG1fcFNlZ21lbnQgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhtX3BTZWdtZW50LCBDSkJpZzJfU2VnbWVudCgpKTsNCi0gICAgICAgICAgICAgICAgblJldCA9IHBhcnNlU2VnbWVudEhlYWRlcihtX3BTZWdtZW50KTsNCi0gICAgICAgICAgICAgICAgaWYoblJldCAhPSBKQklHMl9TVUNDRVNTKSB7DQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgbV9wU2VnbWVudDsNCi0gICAgICAgICAgICAgICAgICAgIG1fcFNlZ21lbnQgPSBOVUxMOw0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5SZXQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbV9kd09mZnNldCA9IG1fcFN0cmVhbS0+Z2V0T2Zmc2V0KCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG5SZXQgPSBwYXJzZVNlZ21lbnREYXRhKG1fcFNlZ21lbnQsIHBQYXVzZSk7DQotICAgICAgICAgICAgaWYobV9Qcm9jZXNzaXZlU3RhdHVzICA9PSBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFKSB7DQotICAgICAgICAgICAgICAgIG1fUHJvY2Vzc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUU7DQotICAgICAgICAgICAgICAgIG1fUGF1c2VTdGVwID0gMjsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpCSUcyX1NVQ0NFU1M7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmKChuUmV0ID09IEpCSUcyX0VORF9PRl9QQUdFKSB8fCAoblJldCA9PSBKQklHMl9FTkRfT0ZfRklMRSkpIHsNCi0gICAgICAgICAgICAgICAgZGVsZXRlIG1fcFNlZ21lbnQ7DQotICAgICAgICAgICAgICAgIG1fcFNlZ21lbnQgPSBOVUxMOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9IGVsc2UgaWYoblJldCAhPSBKQklHMl9TVUNDRVNTKSB7DQotICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3BTZWdtZW50Ow0KLSAgICAgICAgICAgICAgICBtX3BTZWdtZW50ID0gTlVMTDsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5SZXQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fcFNlZ21lbnRMaXN0LT5hZGRJdGVtKG1fcFNlZ21lbnQpOw0KLSAgICAgICAgICAgIGlmKG1fcFNlZ21lbnQtPm1fZHdEYXRhX2xlbmd0aCAhPSAweGZmZmZmZmZmKSB7DQotICAgICAgICAgICAgICAgIG1fZHdPZmZzZXQgPSBtX2R3T2Zmc2V0ICsgbV9wU2VnbWVudC0+bV9kd0RhdGFfbGVuZ3RoOw0KLSAgICAgICAgICAgICAgICBtX3BTdHJlYW0tPnNldE9mZnNldChtX2R3T2Zmc2V0KTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBtX3BTdHJlYW0tPm9mZnNldCg0KTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgT3V0cHV0Qml0bWFwKG1fcFBhZ2UpOw0KLSAgICAgICAgICAgIG1fcFNlZ21lbnQgPSBOVUxMOw0KLSAgICAgICAgICAgIGlmKG1fcFN0cmVhbS0+Z2V0Qnl0ZUxlZnQoKSA+IDAgJiYgbV9wUGFnZSAmJiBwUGF1c2UgJiYgcFBhdXNlLT5OZWVkVG9QYXVzZU5vdygpKSB7DQotICAgICAgICAgICAgICAgIG1fUHJvY2Vzc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUU7DQotICAgICAgICAgICAgICAgIG1fUGF1c2VTdGVwID0gMjsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEpCSUcyX1NVQ0NFU1M7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmV0dXJuIEpCSUcyX0VORF9PRl9GSUxFOw0KLSAgICB9DQotICAgIHJldHVybiBKQklHMl9TVUNDRVNTOw0KLX0NCi1GWF9JTlQzMiBDSkJpZzJfQ29udGV4dDo6ZGVjb2RlX0VtYmVkT3JnbmF6YXRpb24oSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICByZXR1cm4gZGVjb2RlX1NxdWVudGlhbE9yZ25hemF0aW9uKHBQYXVzZSk7DQotfQ0KLUZYX0lOVDMyIENKQmlnMl9Db250ZXh0OjpkZWNvZGVfUmFuZG9tT3JnbmF6YXRpb25fRmlyc3RQYWdlKElGWF9QYXVzZSogcFBhdXNlKQ0KLXsNCi0gICAgQ0pCaWcyX1NlZ21lbnQgKnBTZWdtZW50Ow0KLSAgICBGWF9JTlQzMiBuUmV0Ow0KLSAgICB3aGlsZShtX3BTdHJlYW0tPmdldEJ5dGVMZWZ0KCkgPiBKQklHMl9NSU5fU0VHTUVOVF9TSVpFKSB7DQotICAgICAgICBKQklHMl9BTExPQyhwU2VnbWVudCwgQ0pCaWcyX1NlZ21lbnQoKSk7DQotICAgICAgICBuUmV0ID0gcGFyc2VTZWdtZW50SGVhZGVyKHBTZWdtZW50KTsNCi0gICAgICAgIGlmKG5SZXQgIT0gSkJJRzJfU1VDQ0VTUykgew0KLSAgICAgICAgICAgIGRlbGV0ZSBwU2VnbWVudDsNCi0gICAgICAgICAgICByZXR1cm4gblJldDsNCi0gICAgICAgIH0gZWxzZSBpZihwU2VnbWVudC0+bV9jRmxhZ3Mucy50eXBlID09IDUxKSB7DQotICAgICAgICAgICAgZGVsZXRlIHBTZWdtZW50Ow0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wU2VnbWVudExpc3QtPmFkZEl0ZW0ocFNlZ21lbnQpOw0KLSAgICAgICAgaWYocFBhdXNlICYmIG1fcFBhdXNlICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgew0KLSAgICAgICAgICAgIG1fUGF1c2VTdGVwID0gMzsNCi0gICAgICAgICAgICBtX1Byb2Nlc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFOw0KLSAgICAgICAgICAgIHJldHVybiBKQklHMl9TVUNDRVNTOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fblNlZ21lbnREZWNvZGVkID0gMDsNCi0gICAgcmV0dXJuIGRlY29kZV9SYW5kb21PcmduYXphdGlvbihwUGF1c2UpOw0KLX0NCi1GWF9JTlQzMiBDSkJpZzJfQ29udGV4dDo6ZGVjb2RlX1JhbmRvbU9yZ25hemF0aW9uKElGWF9QYXVzZSogcFBhdXNlKQ0KLXsNCi0gICAgRlhfSU5UMzIgblJldDsNCi0gICAgZm9yKDsgbV9uU2VnbWVudERlY29kZWQgPCBtX3BTZWdtZW50TGlzdC0+Z2V0TGVuZ3RoKCk7IG1fblNlZ21lbnREZWNvZGVkKyspIHsNCi0gICAgICAgIG5SZXQgPSBwYXJzZVNlZ21lbnREYXRhKG1fcFNlZ21lbnRMaXN0LT5nZXRBdChtX25TZWdtZW50RGVjb2RlZCksIHBQYXVzZSk7DQotICAgICAgICBpZigoblJldCA9PSBKQklHMl9FTkRfT0ZfUEFHRSkgfHwgKG5SZXQgPT0gSkJJRzJfRU5EX09GX0ZJTEUpKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9IGVsc2UgaWYoblJldCAhPSBKQklHMl9TVUNDRVNTKSB7DQotICAgICAgICAgICAgcmV0dXJuIG5SZXQ7DQotICAgICAgICB9DQotICAgICAgICBpZihtX3BQYWdlICYmIHBQYXVzZSAmJiBwUGF1c2UtPk5lZWRUb1BhdXNlTm93KCkpIHsNCi0gICAgICAgICAgICBtX1BhdXNlU3RlcCA9IDQ7DQotICAgICAgICAgICAgbV9Qcm9jZXNzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRTsNCi0gICAgICAgICAgICByZXR1cm4gSkJJRzJfU1VDQ0VTUzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gSkJJRzJfU1VDQ0VTUzsNCi19DQotRlhfSU5UMzIgQ0pCaWcyX0NvbnRleHQ6OmdldEZpcnN0UGFnZShGWF9CWVRFICpwQnVmLCBGWF9JTlQzMiB3aWR0aCwgRlhfSU5UMzIgaGVpZ2h0LCBGWF9JTlQzMiBzdHJpZGUsIElGWF9QYXVzZSogcFBhdXNlKQ0KLXsNCi0gICAgRlhfSU5UMzIgblJldCA9IDA7DQotICAgIGlmKG1fcEdsb2JhbENvbnRleHQpIHsNCi0gICAgICAgIG5SZXQgPSBtX3BHbG9iYWxDb250ZXh0LT5kZWNvZGVfRW1iZWRPcmduYXphdGlvbihwUGF1c2UpOw0KLSAgICAgICAgaWYoblJldCAhPSBKQklHMl9TVUNDRVNTKSB7DQotICAgICAgICAgICAgbV9Qcm9jZXNzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfRVJST1I7DQotICAgICAgICAgICAgcmV0dXJuIG5SZXQ7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9iRmlyc3RQYWdlID0gVFJVRTsNCi0gICAgbV9QYXVzZVN0ZXAgPSAwOw0KLSAgICBpZihtX3BQYWdlKSB7DQotICAgICAgICBkZWxldGUgbV9wUGFnZTsNCi0gICAgfQ0KLSAgICBKQklHMl9BTExPQyhtX3BQYWdlLCBDSkJpZzJfSW1hZ2Uod2lkdGgsIGhlaWdodCwgc3RyaWRlLCBwQnVmKSk7DQotICAgIG1fYkJ1ZlNwZWNpZmllZCA9IFRSVUU7DQotICAgIGlmKG1fcFBhZ2UgJiYgcFBhdXNlICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgew0KLSAgICAgICAgbV9QYXVzZVN0ZXAgPSAxOw0KLSAgICAgICAgbV9Qcm9jZXNzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRTsNCi0gICAgICAgIHJldHVybiBuUmV0Ow0KLSAgICB9DQotICAgIGludCByZXQgPSBDb250aW51ZShwUGF1c2UpOw0KLSAgICByZXR1cm4gcmV0Ow0KLX0NCi1GWF9JTlQzMiBDSkJpZzJfQ29udGV4dDo6Q29udGludWUoSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBtX1Byb2Nlc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfUkVBRFk7DQotICAgIEZYX0lOVDMyIG5SZXQ7DQotICAgIGlmKG1fUGF1c2VTdGVwIDw9IDEpIHsNCi0gICAgICAgIHN3aXRjaChtX25TdHJlYW1UeXBlKSB7DQotICAgICAgICAgICAgY2FzZSBKQklHMl9GSUxFX1NUUkVBTToNCi0gICAgICAgICAgICAgICAgblJldCA9IGRlY29kZUZpbGUocFBhdXNlKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSBKQklHMl9TUVVFTlRJQUxfU1RSRUFNOg0KLSAgICAgICAgICAgICAgICBuUmV0ID0gZGVjb2RlX1NxdWVudGlhbE9yZ25hemF0aW9uKHBQYXVzZSk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgSkJJRzJfUkFORE9NX1NUUkVBTToNCi0gICAgICAgICAgICAgICAgaWYobV9iRmlyc3RQYWdlKSB7DQotICAgICAgICAgICAgICAgICAgICBuUmV0ID0gZGVjb2RlX1JhbmRvbU9yZ25hemF0aW9uX0ZpcnN0UGFnZShwUGF1c2UpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgblJldCA9IGRlY29kZV9SYW5kb21PcmduYXphdGlvbihwUGF1c2UpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgSkJJRzJfRU1CRURfU1RSRUFNOg0KLSAgICAgICAgICAgICAgICBuUmV0ID0gZGVjb2RlX0VtYmVkT3JnbmF6YXRpb24ocFBhdXNlKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgZGVmYXVsdDoNCi0gICAgICAgICAgICAgICAgbV9Qcm9jZXNzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfRVJST1I7DQotICAgICAgICAgICAgICAgIHJldHVybiBKQklHMl9FUlJPUl9TVFJFQU1fVFlQRTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIGlmKG1fUGF1c2VTdGVwID09IDIpIHsNCi0gICAgICAgIG5SZXQgPSBkZWNvZGVfU3F1ZW50aWFsT3JnbmF6YXRpb24ocFBhdXNlKTsNCi0gICAgfSBlbHNlIGlmKG1fUGF1c2VTdGVwID09IDMpIHsNCi0gICAgICAgIG5SZXQgPSBkZWNvZGVfUmFuZG9tT3JnbmF6YXRpb25fRmlyc3RQYWdlKHBQYXVzZSk7DQotICAgIH0gZWxzZSBpZihtX1BhdXNlU3RlcCA9PSA0KSB7DQotICAgICAgICBuUmV0ID0gZGVjb2RlX1JhbmRvbU9yZ25hemF0aW9uKHBQYXVzZSk7DQotICAgIH0gZWxzZSBpZihtX1BhdXNlU3RlcCA9PSA1KSB7DQotICAgICAgICBtX1Byb2Nlc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOw0KLSAgICAgICAgcmV0dXJuIEpCSUcyX1NVQ0NFU1M7DQotICAgIH0NCi0gICAgaWYobV9Qcm9jZXNzaXZlU3RhdHVzID09IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUUpIHsNCi0gICAgICAgIHJldHVybiBuUmV0Ow0KLSAgICB9DQotICAgIG1fUGF1c2VTdGVwID0gNTsNCi0gICAgaWYoIW1fYkJ1ZlNwZWNpZmllZCAmJiBuUmV0ID09IEpCSUcyX1NVQ0NFU1MpIHsNCi0gICAgICAgIG1fUHJvY2Vzc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7DQotICAgICAgICByZXR1cm4gSkJJRzJfU1VDQ0VTUzsNCi0gICAgfQ0KLSAgICBpZihuUmV0ID09IEpCSUcyX1NVQ0NFU1MpIHsNCi0gICAgICAgIG1fUHJvY2Vzc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX1Byb2Nlc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19FUlJPUjsNCi0gICAgfQ0KLSAgICByZXR1cm4gblJldDsNCi19DQotRlhfSU5UMzIgQ0pCaWcyX0NvbnRleHQ6OmdldE5leHRQYWdlKEZYX0JZVEUgKnBCdWYsIEZYX0lOVDMyIHdpZHRoLCBGWF9JTlQzMiBoZWlnaHQsIEZYX0lOVDMyIHN0cmlkZSwgSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBGWF9JTlQzMiBuUmV0ID0gSkJJRzJfRVJST1JfU1RSRUFNX1RZUEU7DQotICAgIG1fYkZpcnN0UGFnZSA9IEZBTFNFOw0KLSAgICBtX1BhdXNlU3RlcCA9IDA7DQotICAgIGlmKG1fcFBhZ2UpIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BQYWdlOw0KLSAgICB9DQotICAgIEpCSUcyX0FMTE9DKG1fcFBhZ2UsIENKQmlnMl9JbWFnZSh3aWR0aCwgaGVpZ2h0LCBzdHJpZGUsIHBCdWYpKTsNCi0gICAgbV9iQnVmU3BlY2lmaWVkID0gVFJVRTsNCi0gICAgaWYobV9wUGFnZSAmJiBwUGF1c2UgJiYgcFBhdXNlLT5OZWVkVG9QYXVzZU5vdygpKSB7DQotICAgICAgICBtX1BhdXNlU3RlcCA9IDE7DQotICAgICAgICBtX1Byb2Nlc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFOw0KLSAgICAgICAgcmV0dXJuIG5SZXQ7DQotICAgIH0NCi0gICAgcmV0dXJuIENvbnRpbnVlKHBQYXVzZSk7DQotICAgIHN3aXRjaChtX25TdHJlYW1UeXBlKSB7DQotICAgICAgICBjYXNlIEpCSUcyX0ZJTEVfU1RSRUFNOg0KLSAgICAgICAgICAgIG5SZXQgPSBkZWNvZGVGaWxlKHBQYXVzZSk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIEpCSUcyX1NRVUVOVElBTF9TVFJFQU06DQotICAgICAgICAgICAgblJldCA9IGRlY29kZV9TcXVlbnRpYWxPcmduYXphdGlvbihwUGF1c2UpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBKQklHMl9SQU5ET01fU1RSRUFNOg0KLSAgICAgICAgICAgIG5SZXQgPSBkZWNvZGVfUmFuZG9tT3JnbmF6YXRpb24ocFBhdXNlKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgSkJJRzJfRU1CRURfU1RSRUFNOg0KLSAgICAgICAgICAgIG5SZXQgPSBkZWNvZGVfRW1iZWRPcmduYXphdGlvbihwUGF1c2UpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgZGVmYXVsdDoNCi0gICAgICAgICAgICByZXR1cm4gSkJJRzJfRVJST1JfU1RSRUFNX1RZUEU7DQotICAgIH0NCi0gICAgcmV0dXJuIG5SZXQ7DQotfQ0KLUZYX0lOVDMyIENKQmlnMl9Db250ZXh0OjpnZXRGaXJzdFBhZ2UoQ0pCaWcyX0ltYWdlICoqaW1hZ2UsIElGWF9QYXVzZSogcFBhdXNlKQ0KLXsNCi0gICAgRlhfSU5UMzIgblJldDsNCi0gICAgbV9iRmlyc3RQYWdlID0gVFJVRTsNCi0gICAgbV9QYXVzZVN0ZXAgPSAwOw0KLSAgICBpZihtX3BHbG9iYWxDb250ZXh0KSB7DQotICAgICAgICBuUmV0ID0gbV9wR2xvYmFsQ29udGV4dC0+ZGVjb2RlX0VtYmVkT3JnbmF6YXRpb24ocFBhdXNlKTsNCi0gICAgICAgIGlmKG5SZXQgIT0gSkJJRzJfU1VDQ0VTUykgew0KLSAgICAgICAgICAgIHJldHVybiBuUmV0Ow0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fYkJ1ZlNwZWNpZmllZCA9IEZBTFNFOw0KLSAgICByZXR1cm4gQ29udGludWUocFBhdXNlKTsNCi19DQotRlhfSU5UMzIgQ0pCaWcyX0NvbnRleHQ6OmdldE5leHRQYWdlKENKQmlnMl9JbWFnZSAqKmltYWdlLCBJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIEZYX0lOVDMyIG5SZXQ7DQotICAgIG1fYkJ1ZlNwZWNpZmllZCA9IEZBTFNFOw0KLSAgICBtX2JGaXJzdFBhZ2UgPSBGQUxTRTsNCi0gICAgbV9QYXVzZVN0ZXAgPSAwOw0KLSAgICBzd2l0Y2gobV9uU3RyZWFtVHlwZSkgew0KLSAgICAgICAgY2FzZSBKQklHMl9GSUxFX1NUUkVBTToNCi0gICAgICAgICAgICBuUmV0ID0gZGVjb2RlRmlsZShwUGF1c2UpOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBKQklHMl9TUVVFTlRJQUxfU1RSRUFNOg0KLSAgICAgICAgICAgIG5SZXQgPSBkZWNvZGVfU3F1ZW50aWFsT3JnbmF6YXRpb24ocFBhdXNlKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgSkJJRzJfUkFORE9NX1NUUkVBTToNCi0gICAgICAgICAgICBuUmV0ID0gZGVjb2RlX1JhbmRvbU9yZ25hemF0aW9uKHBQYXVzZSk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIEpCSUcyX0VNQkVEX1NUUkVBTToNCi0gICAgICAgICAgICBuUmV0ID0gZGVjb2RlX0VtYmVkT3JnbmF6YXRpb24ocFBhdXNlKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgcmV0dXJuIEpCSUcyX0VSUk9SX1NUUkVBTV9UWVBFOw0KLSAgICB9DQotICAgIGlmKG5SZXQgPT0gSkJJRzJfU1VDQ0VTUykgew0KLSAgICAgICAgKmltYWdlID0gbV9wUGFnZTsNCi0gICAgICAgIG1fcFBhZ2UgPSBOVUxMOw0KLSAgICAgICAgcmV0dXJuIEpCSUcyX1NVQ0NFU1M7DQotICAgIH0NCi0gICAgcmV0dXJuIG5SZXQ7DQotfQ0KLUNKQmlnMl9TZWdtZW50ICpDSkJpZzJfQ29udGV4dDo6ZmluZFNlZ21lbnRCeU51bWJlcihGWF9EV09SRCBkd051bWJlcikNCi17DQotICAgIENKQmlnMl9TZWdtZW50ICpwU2VnOw0KLSAgICBGWF9JTlQzMiBpOw0KLSAgICBpZihtX3BHbG9iYWxDb250ZXh0KSB7DQotICAgICAgICBwU2VnID0gbV9wR2xvYmFsQ29udGV4dC0+ZmluZFNlZ21lbnRCeU51bWJlcihkd051bWJlcik7DQotICAgICAgICBpZihwU2VnKSB7DQotICAgICAgICAgICAgcmV0dXJuIHBTZWc7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgZm9yKGkgPSAwOyBpIDwgbV9wU2VnbWVudExpc3QtPmdldExlbmd0aCgpOyBpKyspIHsNCi0gICAgICAgIHBTZWcgPSBtX3BTZWdtZW50TGlzdC0+Z2V0QXQoaSk7DQotICAgICAgICBpZihwU2VnLT5tX2R3TnVtYmVyID09IGR3TnVtYmVyKSB7DQotICAgICAgICAgICAgcmV0dXJuIHBTZWc7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLUNKQmlnMl9TZWdtZW50ICpDSkJpZzJfQ29udGV4dDo6ZmluZFJlZmVycmVkU2VnbWVudEJ5VHlwZUFuZEluZGV4KENKQmlnMl9TZWdtZW50ICpwU2VnbWVudCwNCi0gICAgICAgIEZYX0JZVEUgY1R5cGUsIEZYX0lOVDMyIG5JbmRleCkNCi17DQotICAgIENKQmlnMl9TZWdtZW50ICpwU2VnOw0KLSAgICBGWF9JTlQzMiBpLCBjb3VudDsNCi0gICAgY291bnQgPSAwOw0KLSAgICBmb3IoaSA9IDA7IGkgPCBwU2VnbWVudC0+bV9uUmVmZXJyZWRfdG9fc2VnbWVudF9jb3VudDsgaSsrKSB7DQotICAgICAgICBwU2VnID0gZmluZFNlZ21lbnRCeU51bWJlcihwU2VnbWVudC0+bV9wUmVmZXJyZWRfdG9fc2VnbWVudF9udW1iZXJzW2ldKTsNCi0gICAgICAgIGlmKHBTZWcgJiYgcFNlZy0+bV9jRmxhZ3Mucy50eXBlID09IGNUeXBlKSB7DQotICAgICAgICAgICAgaWYoY291bnQgPT0gbkluZGV4KSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBwU2VnOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGNvdW50ICsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotRlhfSU5UMzIgQ0pCaWcyX0NvbnRleHQ6OnBhcnNlU2VnbWVudEhlYWRlcihDSkJpZzJfU2VnbWVudCAqcFNlZ21lbnQpDQotew0KLSAgICBGWF9CWVRFICBjU1NpemUsIGNQU2l6ZTsNCi0gICAgRlhfQllURSBjVGVtcDsNCi0gICAgRlhfV09SRCB3VGVtcDsNCi0gICAgRlhfRFdPUkQgZHdUZW1wOw0KLSAgICBpZigobV9wU3RyZWFtLT5yZWFkSW50ZWdlcigmcFNlZ21lbnQtPm1fZHdOdW1iZXIpICE9IDApDQotICAgICAgICAgICAgfHwgKG1fcFN0cmVhbS0+cmVhZDFCeXRlKCZwU2VnbWVudC0+bV9jRmxhZ3MuYykgIT0gMCkpIHsNCi0gICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICB9DQotICAgIGNUZW1wID0gbV9wU3RyZWFtLT5nZXRDdXJCeXRlKCk7DQotICAgIGlmKChjVGVtcCA+PiA1KSA9PSA3KSB7DQotICAgICAgICBpZihtX3BTdHJlYW0tPnJlYWRJbnRlZ2VyKChGWF9EV09SRCopJnBTZWdtZW50LT5tX25SZWZlcnJlZF90b19zZWdtZW50X2NvdW50KSAhPSAwKSB7DQotICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICB9DQotICAgICAgICBwU2VnbWVudC0+bV9uUmVmZXJyZWRfdG9fc2VnbWVudF9jb3VudCAmPSAweDFmZmZmZmZmOw0KLSAgICAgICAgaWYgKHBTZWdtZW50LT5tX25SZWZlcnJlZF90b19zZWdtZW50X2NvdW50ID4gSkJJRzJfTUFYX1JFRkVSUkVEX1NFR01FTlRfQ09VTlQpIHsNCi0gICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJUb28gbWFueSByZWZlcnJlZCBzZWdtZW50cy4iKTsNCi0gICAgICAgICAgICByZXR1cm4gSkJJRzJfRVJST1JfTElNSVQ7DQotICAgICAgICB9DQotICAgICAgICBkd1RlbXAgPSA1ICsgNCArIChwU2VnbWVudC0+bV9uUmVmZXJyZWRfdG9fc2VnbWVudF9jb3VudCArIDEpIC8gODsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGlmKG1fcFN0cmVhbS0+cmVhZDFCeXRlKCZjVGVtcCkgIT0gMCkgew0KLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcFNlZ21lbnQtPm1fblJlZmVycmVkX3RvX3NlZ21lbnRfY291bnQgPSBjVGVtcCA+PiA1Ow0KLSAgICAgICAgZHdUZW1wID0gNSArIDE7DQotICAgIH0NCi0gICAgY1NTaXplID0gcFNlZ21lbnQtPm1fZHdOdW1iZXIgPiA2NTUzNiA/IDQgOiBwU2VnbWVudC0+bV9kd051bWJlciA+IDI1NiA/IDIgOiAxOw0KLSAgICBjUFNpemUgPSBwU2VnbWVudC0+bV9jRmxhZ3Mucy5wYWdlX2Fzc29jaWF0aW9uX3NpemUgPyA0IDogMTsNCi0gICAgaWYocFNlZ21lbnQtPm1fblJlZmVycmVkX3RvX3NlZ21lbnRfY291bnQpIHsNCi0gICAgICAgIHBTZWdtZW50LT5tX3BSZWZlcnJlZF90b19zZWdtZW50X251bWJlcnMgPSAoRlhfRFdPUkQqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMigNCi0gICAgICAgICAgICAgICAgICAgIHNpemVvZihGWF9EV09SRCksIHBTZWdtZW50LT5tX25SZWZlcnJlZF90b19zZWdtZW50X2NvdW50KTsNCi0gICAgICAgIGZvcihGWF9JTlQzMiBpID0gMDsgaSA8IHBTZWdtZW50LT5tX25SZWZlcnJlZF90b19zZWdtZW50X2NvdW50OyBpKyspIHsNCi0gICAgICAgICAgICBzd2l0Y2goY1NTaXplKSB7DQotICAgICAgICAgICAgICAgIGNhc2UgMToNCi0gICAgICAgICAgICAgICAgICAgIGlmKG1fcFN0cmVhbS0+cmVhZDFCeXRlKCZjVGVtcCkgIT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgcFNlZ21lbnQtPm1fcFJlZmVycmVkX3RvX3NlZ21lbnRfbnVtYmVyc1tpXSA9IGNUZW1wOw0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMjoNCi0gICAgICAgICAgICAgICAgICAgIGlmKG1fcFN0cmVhbS0+cmVhZFNob3J0SW50ZWdlcigmd1RlbXApICE9IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIHBTZWdtZW50LT5tX3BSZWZlcnJlZF90b19zZWdtZW50X251bWJlcnNbaV0gPSB3VGVtcDsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDQ6DQotICAgICAgICAgICAgICAgICAgICBpZihtX3BTdHJlYW0tPnJlYWRJbnRlZ2VyKCZkd1RlbXApICE9IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIHBTZWdtZW50LT5tX3BSZWZlcnJlZF90b19zZWdtZW50X251bWJlcnNbaV0gPSBkd1RlbXA7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKHBTZWdtZW50LT5tX3BSZWZlcnJlZF90b19zZWdtZW50X251bWJlcnNbaV0gPj0gcFNlZ21lbnQtPm1fZHdOdW1iZXIpIHsNCi0gICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiVGhlIHJlZmVycmVkIHNlZ21lbnQgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGlzIHNlZ21lbnQgbnVtYmVyLiIpOw0KLSAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYoY1BTaXplID09IDEpIHsNCi0gICAgICAgIGlmKG1fcFN0cmVhbS0+cmVhZDFCeXRlKCZjVGVtcCkgIT0gMCkgew0KLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcFNlZ21lbnQtPm1fZHdQYWdlX2Fzc29jaWF0aW9uID0gY1RlbXA7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZihtX3BTdHJlYW0tPnJlYWRJbnRlZ2VyKCZwU2VnbWVudC0+bV9kd1BhZ2VfYXNzb2NpYXRpb24pICE9IDApIHsNCi0gICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZihtX3BTdHJlYW0tPnJlYWRJbnRlZ2VyKCZwU2VnbWVudC0+bV9kd0RhdGFfbGVuZ3RoKSAhPSAwKSB7DQotICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgfQ0KLSAgICBwU2VnbWVudC0+bV9wRGF0YSA9IG1fcFN0cmVhbS0+Z2V0UG9pbnRlcigpOw0KLSAgICBwU2VnbWVudC0+bV9TdGF0ZSA9IEpCSUcyX1NFR01FTlRfREFUQV9VTlBBUlNFRDsNCi0gICAgcmV0dXJuIEpCSUcyX1NVQ0NFU1M7DQotZmFpbGVkOg0KLSAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJoZWFkZXIgdG9vIHNob3J0LiIpOw0KLSAgICByZXR1cm4gSkJJRzJfRVJST1JfVE9PX1NIT1JUOw0KLX0NCi1GWF9JTlQzMiBDSkJpZzJfQ29udGV4dDo6cGFyc2VTZWdtZW50RGF0YShDSkJpZzJfU2VnbWVudCAqcFNlZ21lbnQsIElGWF9QYXVzZSogcFBhdXNlKQ0KLXsNCi0gICAgRlhfSU5UMzIgcmV0ID0gUHJvY2Vzc2l2ZVBhcnNlU2VnbWVudERhdGEocFNlZ21lbnQsIHBQYXVzZSk7DQotICAgIHdoaWxlKG1fUHJvY2Vzc2l2ZVN0YXR1cyAgPT0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRSAmJiBtX3BTdHJlYW0tPmdldEJ5dGVMZWZ0KCkgPiAwKSB7DQotICAgICAgICByZXQgPSBQcm9jZXNzaXZlUGFyc2VTZWdtZW50RGF0YShwU2VnbWVudCwgcFBhdXNlKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gcmV0Ow0KLX0NCi1GWF9JTlQzMiBDSkJpZzJfQ29udGV4dDo6UHJvY2Vzc2l2ZVBhcnNlU2VnbWVudERhdGEoQ0pCaWcyX1NlZ21lbnQgKnBTZWdtZW50LCBJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIHN3aXRjaChwU2VnbWVudC0+bV9jRmxhZ3Mucy50eXBlKSB7DQotICAgICAgICBjYXNlIDA6DQotICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3ltYm9sRGljdChwU2VnbWVudCwgcFBhdXNlKTsNCi0gICAgICAgIGNhc2UgNDoNCi0gICAgICAgIGNhc2UgNjoNCi0gICAgICAgIGNhc2UgNzoNCi0gICAgICAgICAgICBpZihtX25TdGF0ZSA9PSBKQklHMl9PVVRfT0ZfUEFHRSkgew0KLSAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDI7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGV4dFJlZ2lvbihwU2VnbWVudCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgY2FzZSAxNjoNCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VQYXR0ZXJuRGljdChwU2VnbWVudCwgcFBhdXNlKTsNCi0gICAgICAgIGNhc2UgMjA6DQotICAgICAgICBjYXNlIDIyOg0KLSAgICAgICAgY2FzZSAyMzoNCi0gICAgICAgICAgICBpZihtX25TdGF0ZSA9PSBKQklHMl9PVVRfT0ZfUEFHRSkgew0KLSAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDI7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSGFsZnRvbmVSZWdpb24ocFNlZ21lbnQsIHBQYXVzZSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgY2FzZSAzNjoNCi0gICAgICAgIGNhc2UgMzg6DQotICAgICAgICBjYXNlIDM5Og0KLSAgICAgICAgICAgIGlmKG1fblN0YXRlID09IEpCSUcyX09VVF9PRl9QQUdFKSB7DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkMjsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VHZW5lcmljUmVnaW9uKHBTZWdtZW50LCBwUGF1c2UpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgNDA6DQotICAgICAgICBjYXNlIDQyOg0KLSAgICAgICAgY2FzZSA0MzoNCi0gICAgICAgICAgICBpZihtX25TdGF0ZSA9PSBKQklHMl9PVVRfT0ZfUEFHRSkgew0KLSAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDI7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlR2VuZXJpY1JlZmluZW1lbnRSZWdpb24ocFNlZ21lbnQpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgNDg6IHsNCi0gICAgICAgICAgICAgICAgRlhfV09SRCB3VGVtcDsNCi0gICAgICAgICAgICAgICAgSkJpZzJQYWdlSW5mbyAqcFBhZ2VJbmZvOw0KLSAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhwUGFnZUluZm8sIEpCaWcyUGFnZUluZm8pOw0KLSAgICAgICAgICAgICAgICBpZigobV9wU3RyZWFtLT5yZWFkSW50ZWdlcigmcFBhZ2VJbmZvLT5tX2R3V2lkdGgpICE9IDApDQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgKG1fcFN0cmVhbS0+cmVhZEludGVnZXIoJnBQYWdlSW5mby0+bV9kd0hlaWdodCkgIT0gMCkNCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCAobV9wU3RyZWFtLT5yZWFkSW50ZWdlcigmcFBhZ2VJbmZvLT5tX2R3UmVzb2x1dGlvblgpICE9IDApDQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgKG1fcFN0cmVhbS0+cmVhZEludGVnZXIoJnBQYWdlSW5mby0+bV9kd1Jlc29sdXRpb25ZKSAhPSAwKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IChtX3BTdHJlYW0tPnJlYWQxQnl0ZSgmcFBhZ2VJbmZvLT5tX2NGbGFncykgIT0gMCkNCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCAobV9wU3RyZWFtLT5yZWFkU2hvcnRJbnRlZ2VyKCZ3VGVtcCkgIT0gMCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwUGFnZUluZm87DQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcFBhZ2VJbmZvLT5tX2JJc1N0cmlwZWQgPSAoKHdUZW1wID4+IDE1KSAmIDEpID8gMSA6IDA7DQotICAgICAgICAgICAgICAgIHBQYWdlSW5mby0+bV93TWF4U3RyaXBlU2l6ZSA9IHdUZW1wICYgMHg3ZmZmOw0KLSAgICAgICAgICAgICAgICBpZigocFBhZ2VJbmZvLT5tX2R3SGVpZ2h0ID09IDB4ZmZmZmZmZmYpICYmIChwUGFnZUluZm8tPm1fYklzU3RyaXBlZCAhPSAxKSkgew0KLSAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9XYXJuKCJwYWdlIGhlaWdodCA9IDB4ZmZmZmZmZmYgYnVmIHN0cmlwZSBmaWVsZCBpcyAwIik7DQotICAgICAgICAgICAgICAgICAgICBwUGFnZUluZm8tPm1fYklzU3RyaXBlZCA9IDE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYoIW1fYkJ1ZlNwZWNpZmllZCkgew0KLSAgICAgICAgICAgICAgICAgICAgaWYobV9wUGFnZSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3BQYWdlOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaWYocFBhZ2VJbmZvLT5tX2R3SGVpZ2h0ID09IDB4ZmZmZmZmZmYpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhtX3BQYWdlLCBDSkJpZzJfSW1hZ2UocFBhZ2VJbmZvLT5tX2R3V2lkdGgsIHBQYWdlSW5mby0+bV93TWF4U3RyaXBlU2l6ZSkpOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhtX3BQYWdlLCBDSkJpZzJfSW1hZ2UocFBhZ2VJbmZvLT5tX2R3V2lkdGgsIHBQYWdlSW5mby0+bV9kd0hlaWdodCkpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG1fcFBhZ2UtPmZpbGwoKHBQYWdlSW5mby0+bV9jRmxhZ3MgJiA0KSA/IDEgOiAwKTsNCi0gICAgICAgICAgICAgICAgbV9wUGFnZUluZm9MaXN0LT5hZGRJdGVtKHBQYWdlSW5mbyk7DQotICAgICAgICAgICAgICAgIG1fblN0YXRlID0gSkJJRzJfSU5fUEFHRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIDQ5Og0KLSAgICAgICAgICAgIG1fblN0YXRlID0gSkJJRzJfT1VUX09GX1BBR0U7DQotICAgICAgICAgICAgcmV0dXJuIEpCSUcyX0VORF9PRl9QQUdFOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSA1MDoNCi0gICAgICAgICAgICBtX3BTdHJlYW0tPm9mZnNldChwU2VnbWVudC0+bV9kd0RhdGFfbGVuZ3RoKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgNTE6DQotICAgICAgICAgICAgcmV0dXJuIEpCSUcyX0VORF9PRl9GSUxFOw0KLSAgICAgICAgY2FzZSA1MjoNCi0gICAgICAgICAgICBtX3BTdHJlYW0tPm9mZnNldChwU2VnbWVudC0+bV9kd0RhdGFfbGVuZ3RoKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgNTM6DQotICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGFibGUocFNlZ21lbnQpOw0KLSAgICAgICAgY2FzZSA2MjoNCi0gICAgICAgICAgICBtX3BTdHJlYW0tPm9mZnNldChwU2VnbWVudC0+bV9kd0RhdGFfbGVuZ3RoKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgYnJlYWs7DQotICAgIH0NCi0gICAgcmV0dXJuIEpCSUcyX1NVQ0NFU1M7DQotZmFpbGVkMToNCi0gICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic2VnbWVudCBkYXRhIHRvbyBzaG9ydC4iKTsNCi0gICAgcmV0dXJuIEpCSUcyX0VSUk9SX1RPT19TSE9SVDsNCi1mYWlsZWQyOg0KLSAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzZWdtZW50IHN5bnRheCBlcnJvci4iKTsNCi0gICAgcmV0dXJuIEpCSUcyX0VSUk9SX0ZFVEFMOw0KLX0NCi1GWF9JTlQzMiBDSkJpZzJfQ29udGV4dDo6cGFyc2VTeW1ib2xEaWN0KENKQmlnMl9TZWdtZW50ICpwU2VnbWVudCwgSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBGWF9EV09SRCBkd1RlbXA7DQotICAgIEZYX1dPUkQgd0ZsYWdzOw0KLSAgICBGWF9CWVRFIGNTREhVRkZESCwgY1NESFVGRkRXLCBjU0RIVUZGQk1TSVpFLCBjU0RIVUZGQUdHSU5TVDsNCi0gICAgQ0pCaWcyX0h1ZmZtYW5UYWJsZSAqVGFibGVfQjEgPSBOVUxMLCAqVGFibGVfQjIgPSBOVUxMLCAqVGFibGVfQjMgPSBOVUxMLCAqVGFibGVfQjQgPSBOVUxMLCAqVGFibGVfQjUgPSBOVUxMOw0KLSAgICBGWF9JTlQzMiBpLCBuSW5kZXgsIG5SZXQ7DQotICAgIENKQmlnMl9TZWdtZW50ICpwU2VnID0gTlVMTCwgKnBMUlNlZyA9IE5VTEw7DQotICAgIEZYX0JPT0wgYlVzZWQ7DQotICAgIENKQmlnMl9JbWFnZSAqKiBTRElOU1lNUyA9IE5VTEw7DQotICAgIENKQmlnMl9TRERQcm9jICpwU3ltYm9sRGljdERlY29kZXI7DQotICAgIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCA9IE5VTEwsICpnckNvbnRleHQgPSBOVUxMOw0KLSAgICBDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyOw0KLSAgICBKQklHMl9BTExPQyhwU3ltYm9sRGljdERlY29kZXIsIENKQmlnMl9TRERQcm9jKCkpOw0KLSAgICBpZihtX3BTdHJlYW0tPnJlYWRTaG9ydEludGVnZXIoJndGbGFncykgIT0gMCkgew0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgc2VnbWVudCA6IGRhdGEgaGVhZGVyIHRvbyBzaG9ydC4iKTsNCi0gICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9UT09fU0hPUlQ7DQotICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgfQ0KLSAgICBwU3ltYm9sRGljdERlY29kZXItPlNESFVGRiA9IHdGbGFncyAmIDB4MDAwMTsNCi0gICAgcFN5bWJvbERpY3REZWNvZGVyLT5TRFJFRkFHRyA9ICh3RmxhZ3MgPj4gMSkgJiAweDAwMDE7DQotICAgIHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RURU1QTEFURSA9ICh3RmxhZ3MgPj4gMTApICYgMHgwMDAzOw0KLSAgICBwU3ltYm9sRGljdERlY29kZXItPlNEUlRFTVBMQVRFID0gKHdGbGFncyA+PiAxMikgJiAweDAwMDM7DQotICAgIGNTREhVRkZESCA9ICh3RmxhZ3MgPj4gMikgJiAweDAwMDM7DQotICAgIGNTREhVRkZEVyA9ICh3RmxhZ3MgPj4gNCkgJiAweDAwMDM7DQotICAgIGNTREhVRkZCTVNJWkUgPSAod0ZsYWdzID4+IDYpICYgMHgwMDAxOw0KLSAgICBjU0RIVUZGQUdHSU5TVCA9ICh3RmxhZ3MgPj4gNykgJiAweDAwMDE7DQotICAgIGlmKHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RIVUZGID09IDApIHsNCi0gICAgICAgIGlmKHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RURU1QTEFURSA9PSAwKSB7DQotICAgICAgICAgICAgZHdUZW1wID0gODsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgZHdUZW1wID0gMjsNCi0gICAgICAgIH0NCi0gICAgICAgIGZvcihpID0gMDsgaSA8IChGWF9JTlQzMilkd1RlbXA7IGkrKykgew0KLSAgICAgICAgICAgIGlmKG1fcFN0cmVhbS0+cmVhZDFCeXRlKChGWF9CWVRFKikmcFN5bWJvbERpY3REZWNvZGVyLT5TREFUW2ldKSAhPSAwKSB7DQotICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInN5bWJvbCBkaWN0aW9uYXJ5IHNlZ21lbnQgOiBkYXRhIGhlYWRlciB0b28gc2hvcnQuIik7DQotICAgICAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9UT09fU0hPUlQ7DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZigocFN5bWJvbERpY3REZWNvZGVyLT5TRFJFRkFHRyA9PSAxKSAmJiAocFN5bWJvbERpY3REZWNvZGVyLT5TRFJURU1QTEFURSA9PSAwKSkgew0KLSAgICAgICAgZm9yKGkgPSAwOyBpIDwgNDsgaSsrKSB7DQotICAgICAgICAgICAgaWYobV9wU3RyZWFtLT5yZWFkMUJ5dGUoKEZYX0JZVEUqKSZwU3ltYm9sRGljdERlY29kZXItPlNEUkFUW2ldKSAhPSAwKSB7DQotICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInN5bWJvbCBkaWN0aW9uYXJ5IHNlZ21lbnQgOiBkYXRhIGhlYWRlciB0b28gc2hvcnQuIik7DQotICAgICAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9UT09fU0hPUlQ7DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZigobV9wU3RyZWFtLT5yZWFkSW50ZWdlcigmcFN5bWJvbERpY3REZWNvZGVyLT5TRE5VTUVYU1lNUykgIT0gMCkNCi0gICAgICAgICAgICB8fCAobV9wU3RyZWFtLT5yZWFkSW50ZWdlcigmcFN5bWJvbERpY3REZWNvZGVyLT5TRE5VTU5FV1NZTVMpICE9IDApKSB7DQotICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBzZWdtZW50IDogZGF0YSBoZWFkZXIgdG9vIHNob3J0LiIpOw0KLSAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX1RPT19TSE9SVDsNCi0gICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICB9DQotICAgIGlmIChwU3ltYm9sRGljdERlY29kZXItPlNETlVNRVhTWU1TID4gSkJJRzJfTUFYX0VYUE9SVF9TWVNNQk9MUw0KLSAgICAgICAgICAgIHx8IHBTeW1ib2xEaWN0RGVjb2Rlci0+U0ROVU1ORVdTWU1TID4gSkJJRzJfTUFYX05FV19TWVNNQk9MUykgew0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgc2VnbWVudCA6IHRvbyBtYW55IGV4cG9ydC9uZXcgc3ltYm9scy4iKTsNCi0gICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9MSU1JVDsNCi0gICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICB9DQotICAgIGZvcihpID0gMDsgaSA8IHBTZWdtZW50LT5tX25SZWZlcnJlZF90b19zZWdtZW50X2NvdW50OyBpKyspIHsNCi0gICAgICAgIGlmKCFmaW5kU2VnbWVudEJ5TnVtYmVyKHBTZWdtZW50LT5tX3BSZWZlcnJlZF90b19zZWdtZW50X251bWJlcnNbaV0pKSB7DQotICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgc2VnbWVudCA6IGNhbid0IGZpbmQgcmVmZXJlZCB0byBzZWdtZW50cyIpOw0KLSAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9GRVRBTDsNCi0gICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBwU3ltYm9sRGljdERlY29kZXItPlNETlVNSU5TWU1TID0gMDsNCi0gICAgZm9yKGkgPSAwOyBpIDwgcFNlZ21lbnQtPm1fblJlZmVycmVkX3RvX3NlZ21lbnRfY291bnQ7IGkrKykgew0KLSAgICAgICAgcFNlZyA9IGZpbmRTZWdtZW50QnlOdW1iZXIocFNlZ21lbnQtPm1fcFJlZmVycmVkX3RvX3NlZ21lbnRfbnVtYmVyc1tpXSk7DQotICAgICAgICBpZihwU2VnLT5tX2NGbGFncy5zLnR5cGUgPT0gMCkgew0KLSAgICAgICAgICAgIHBTeW1ib2xEaWN0RGVjb2Rlci0+U0ROVU1JTlNZTVMgKz0gcFNlZy0+bV9SZXN1bHQuc2QtPlNETlVNRVhTWU1TOw0KLSAgICAgICAgICAgIHBMUlNlZyA9IHBTZWc7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYocFN5bWJvbERpY3REZWNvZGVyLT5TRE5VTUlOU1lNUyA9PSAwKSB7DQotICAgICAgICBTRElOU1lNUyA9IE5VTEw7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBTRElOU1lNUyA9IChDSkJpZzJfSW1hZ2UqKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoDQotICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoQ0pCaWcyX0ltYWdlKiksIHBTeW1ib2xEaWN0RGVjb2Rlci0+U0ROVU1JTlNZTVMpOw0KLSAgICAgICAgZHdUZW1wID0gMDsNCi0gICAgICAgIGZvcihpID0gMDsgaSA8IHBTZWdtZW50LT5tX25SZWZlcnJlZF90b19zZWdtZW50X2NvdW50OyBpKyspIHsNCi0gICAgICAgICAgICBwU2VnID0gZmluZFNlZ21lbnRCeU51bWJlcihwU2VnbWVudC0+bV9wUmVmZXJyZWRfdG9fc2VnbWVudF9udW1iZXJzW2ldKTsNCi0gICAgICAgICAgICBpZihwU2VnLT5tX2NGbGFncy5zLnR5cGUgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBKQklHMl9tZW1jcHkoU0RJTlNZTVMgKyBkd1RlbXAsIHBTZWctPm1fUmVzdWx0LnNkLT5TREVYU1lNUywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBTZWctPm1fUmVzdWx0LnNkLT5TRE5VTUVYU1lNUyAqIHNpemVvZihDSkJpZzJfSW1hZ2UqKSk7DQotICAgICAgICAgICAgICAgIGR3VGVtcCArPSBwU2VnLT5tX1Jlc3VsdC5zZC0+U0ROVU1FWFNZTVM7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RJTlNZTVMgPSBTRElOU1lNUzsNCi0gICAgaWYocFN5bWJvbERpY3REZWNvZGVyLT5TREhVRkYgPT0gMSkgew0KLSAgICAgICAgaWYoKGNTREhVRkZESCA9PSAyKSB8fCAoY1NESFVGRkRXID09IDIpKSB7DQotICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgc2VnbWVudCA6IFNESFVGRkRIPTIgb3IgU0RIVUZGRFc9MiBpcyBub3QgcGVybWl0dGVkLiIpOw0KLSAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9GRVRBTDsNCi0gICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgIH0NCi0gICAgICAgIG5JbmRleCA9IDA7DQotICAgICAgICBpZihjU0RIVUZGREggPT0gMCkgew0KLSAgICAgICAgICAgIEpCSUcyX0FMTE9DKFRhYmxlX0I0LCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CNCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0I0KSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CNCkpOw0KLSAgICAgICAgICAgIHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RIVUZGREggPSBUYWJsZV9CNDsNCi0gICAgICAgIH0gZWxzZSBpZihjU0RIVUZGREggPT0gMSkgew0KLSAgICAgICAgICAgIEpCSUcyX0FMTE9DKFRhYmxlX0I1LCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CNSwNCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0I1KSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CNSkpOw0KLSAgICAgICAgICAgIHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RIVUZGREggPSBUYWJsZV9CNTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcFNlZyA9IGZpbmRSZWZlcnJlZFNlZ21lbnRCeVR5cGVBbmRJbmRleChwU2VnbWVudCwgNTMsIG5JbmRleCsrKTsNCi0gICAgICAgICAgICBpZighcFNlZykgew0KLSAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBzZWdtZW50IDogU0RIVUZGREggY2FuJ3QgZmluZCB1c2VyIHN1cHBsaWVkIHRhYmxlLiIpOw0KLSAgICAgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwU3ltYm9sRGljdERlY29kZXItPlNESFVGRkRIID0gcFNlZy0+bV9SZXN1bHQuaHQ7DQotICAgICAgICB9DQotICAgICAgICBpZihjU0RIVUZGRFcgPT0gMCkgew0KLSAgICAgICAgICAgIEpCSUcyX0FMTE9DKFRhYmxlX0IyLCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMiwNCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IyKSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMikpOw0KLSAgICAgICAgICAgIHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RIVUZGRFcgPSBUYWJsZV9CMjsNCi0gICAgICAgIH0gZWxzZSBpZihjU0RIVUZGRFcgPT0gMSkgew0KLSAgICAgICAgICAgIEpCSUcyX0FMTE9DKFRhYmxlX0IzLCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMywNCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IzKSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMykpOw0KLSAgICAgICAgICAgIHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RIVUZGRFcgPSBUYWJsZV9CMzsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcFNlZyA9IGZpbmRSZWZlcnJlZFNlZ21lbnRCeVR5cGVBbmRJbmRleChwU2VnbWVudCwgNTMsIG5JbmRleCsrKTsNCi0gICAgICAgICAgICBpZighcFNlZykgew0KLSAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBzZWdtZW50IDogU0RIVUZGRFcgY2FuJ3QgZmluZCB1c2VyIHN1cHBsaWVkIHRhYmxlLiIpOw0KLSAgICAgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwU3ltYm9sRGljdERlY29kZXItPlNESFVGRkRXID0gcFNlZy0+bV9SZXN1bHQuaHQ7DQotICAgICAgICB9DQotICAgICAgICBpZihjU0RIVUZGQk1TSVpFID09IDApIHsNCi0gICAgICAgICAgICBKQklHMl9BTExPQyhUYWJsZV9CMSwgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjEsDQotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMSkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjEpKTsNCi0gICAgICAgICAgICBwU3ltYm9sRGljdERlY29kZXItPlNESFVGRkJNU0laRSA9IFRhYmxlX0IxOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBwU2VnID0gZmluZFJlZmVycmVkU2VnbWVudEJ5VHlwZUFuZEluZGV4KHBTZWdtZW50LCA1MywgbkluZGV4KyspOw0KLSAgICAgICAgICAgIGlmKCFwU2VnKSB7DQotICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInN5bWJvbCBkaWN0aW9uYXJ5IHNlZ21lbnQgOiBTREhVRkZCTVNJWkUgY2FuJ3QgZmluZCB1c2VyIHN1cHBsaWVkIHRhYmxlLiIpOw0KLSAgICAgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwU3ltYm9sRGljdERlY29kZXItPlNESFVGRkJNU0laRSA9IHBTZWctPm1fUmVzdWx0Lmh0Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYocFN5bWJvbERpY3REZWNvZGVyLT5TRFJFRkFHRyA9PSAxKSB7DQotICAgICAgICAgICAgaWYoY1NESFVGRkFHR0lOU1QgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBpZighVGFibGVfQjEpIHsNCi0gICAgICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKFRhYmxlX0IxLCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjEpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0IxKSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcFN5bWJvbERpY3REZWNvZGVyLT5TREhVRkZBR0dJTlNUID0gVGFibGVfQjE7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgcFNlZyA9IGZpbmRSZWZlcnJlZFNlZ21lbnRCeVR5cGVBbmRJbmRleChwU2VnbWVudCwgNTMsIG5JbmRleCsrKTsNCi0gICAgICAgICAgICAgICAgaWYoIXBTZWcpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInN5bWJvbCBkaWN0aW9uYXJ5IHNlZ21lbnQgOiBTREhVRkZBR0dJTlNUIGNhbid0IGZpbmQgdXNlciBzdXBwbGllZCB0YWJsZS4iKTsNCi0gICAgICAgICAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9GRVRBTDsNCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RIVUZGQUdHSU5TVCA9IHBTZWctPm1fUmVzdWx0Lmh0Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZigod0ZsYWdzICYgMHgwMTAwKSAmJiBwTFJTZWcgJiYgcExSU2VnLT5tX1Jlc3VsdC5zZC0+bV9iQ29udGV4dFJldGFpbmVkKSB7DQotICAgICAgICBpZiAocFN5bWJvbERpY3REZWNvZGVyLT5TREhVRkYgPT0gMCkgew0KLSAgICAgICAgICAgIGR3VGVtcCA9IHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RURU1QTEFURSA9PSAwID8gNjU1MzYgOiBwU3ltYm9sRGljdERlY29kZXItPlNEVEVNUExBVEUgPT0gMSA/DQotICAgICAgICAgICAgICAgICAgICAgODE5MiA6IDEwMjQ7DQotICAgICAgICAgICAgZ2JDb250ZXh0ID0gKEpCaWcyQXJpdGhDdHgqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihzaXplb2YoSkJpZzJBcml0aEN0eCksIGR3VGVtcCk7DQotICAgICAgICAgICAgSkJJRzJfbWVtY3B5KGdiQ29udGV4dCwgcExSU2VnLT5tX1Jlc3VsdC5zZC0+bV9nYkNvbnRleHQsIHNpemVvZihKQmlnMkFyaXRoQ3R4KSpkd1RlbXApOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RSRUZBR0cgPT0gMSkgew0KLSAgICAgICAgICAgIGR3VGVtcCA9IHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RSVEVNUExBVEUgPyAxIDw8IDEwIDogMSA8PCAxMzsNCi0gICAgICAgICAgICBnckNvbnRleHQgPSAoSkJpZzJBcml0aEN0eCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihKQmlnMkFyaXRoQ3R4KSwgZHdUZW1wKTsNCi0gICAgICAgICAgICBKQklHMl9tZW1jcHkoZ3JDb250ZXh0LCBwTFJTZWctPm1fUmVzdWx0LnNkLT5tX2dyQ29udGV4dCwgc2l6ZW9mKEpCaWcyQXJpdGhDdHgpKmR3VGVtcCk7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZiAocFN5bWJvbERpY3REZWNvZGVyLT5TREhVRkYgPT0gMCkgew0KLSAgICAgICAgICAgIGR3VGVtcCA9IHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RURU1QTEFURSA9PSAwID8gNjU1MzYgOiBwU3ltYm9sRGljdERlY29kZXItPlNEVEVNUExBVEUgPT0gMSA/DQotICAgICAgICAgICAgICAgICAgICAgODE5MiA6IDEwMjQ7DQotICAgICAgICAgICAgZ2JDb250ZXh0ID0gKEpCaWcyQXJpdGhDdHgqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihzaXplb2YoSkJpZzJBcml0aEN0eCksIGR3VGVtcCk7DQotICAgICAgICAgICAgSkJJRzJfbWVtc2V0KGdiQ29udGV4dCwgMCwgc2l6ZW9mKEpCaWcyQXJpdGhDdHgpKmR3VGVtcCk7DQotICAgICAgICB9DQotICAgICAgICBpZiAocFN5bWJvbERpY3REZWNvZGVyLT5TRFJFRkFHRyA9PSAxKSB7DQotICAgICAgICAgICAgZHdUZW1wID0gcFN5bWJvbERpY3REZWNvZGVyLT5TRFJURU1QTEFURSA/IDEgPDwgMTAgOiAxIDw8IDEzOw0KLSAgICAgICAgICAgIGdyQ29udGV4dCA9IChKQmlnMkFyaXRoQ3R4KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKEpCaWcyQXJpdGhDdHgpLCBkd1RlbXApOw0KLSAgICAgICAgICAgIEpCSUcyX21lbXNldChnckNvbnRleHQsIDAsIHNpemVvZihKQmlnMkFyaXRoQ3R4KSpkd1RlbXApOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHBTZWdtZW50LT5tX25SZXN1bHRUeXBlID0gSkJJRzJfU1lNQk9MX0RJQ1RfUE9JTlRFUjsNCi0gICAgaWYocFN5bWJvbERpY3REZWNvZGVyLT5TREhVRkYgPT0gMCkgew0KLSAgICAgICAgSkJJRzJfQUxMT0MocEFyaXRoRGVjb2RlciwgQ0pCaWcyX0FyaXRoRGVjb2RlcihtX3BTdHJlYW0pKTsNCi0gICAgICAgIHBTZWdtZW50LT5tX1Jlc3VsdC5zZCA9IHBTeW1ib2xEaWN0RGVjb2Rlci0+ZGVjb2RlX0FyaXRoKHBBcml0aERlY29kZXIsIGdiQ29udGV4dCwgZ3JDb250ZXh0KTsNCi0gICAgICAgIGRlbGV0ZSBwQXJpdGhEZWNvZGVyOw0KLSAgICAgICAgaWYocFNlZ21lbnQtPm1fUmVzdWx0LnNkID09IE5VTEwpIHsNCi0gICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7DQotICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICB9DQotICAgICAgICBtX3BTdHJlYW0tPmFsaWduQnl0ZSgpOw0KLSAgICAgICAgbV9wU3RyZWFtLT5vZmZzZXQoMik7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBwU2VnbWVudC0+bV9SZXN1bHQuc2QgPSBwU3ltYm9sRGljdERlY29kZXItPmRlY29kZV9IdWZmbWFuKG1fcFN0cmVhbSwgZ2JDb250ZXh0LCBnckNvbnRleHQsIHBQYXVzZSk7DQotICAgICAgICBpZihwU2VnbWVudC0+bV9SZXN1bHQuc2QgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9GRVRBTDsNCi0gICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fcFN0cmVhbS0+YWxpZ25CeXRlKCk7DQotICAgIH0NCi0gICAgaWYod0ZsYWdzICYgMHgwMjAwKSB7DQotICAgICAgICBwU2VnbWVudC0+bV9SZXN1bHQuc2QtPm1fYkNvbnRleHRSZXRhaW5lZCA9IFRSVUU7DQotICAgICAgICBpZihwU3ltYm9sRGljdERlY29kZXItPlNESFVGRiA9PSAwKSB7DQotICAgICAgICAgICAgcFNlZ21lbnQtPm1fUmVzdWx0LnNkLT5tX2diQ29udGV4dCA9IGdiQ29udGV4dDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RSRUZBR0cgPT0gMSkgew0KLSAgICAgICAgICAgIHBTZWdtZW50LT5tX1Jlc3VsdC5zZC0+bV9nckNvbnRleHQgPSBnckNvbnRleHQ7DQotICAgICAgICB9DQotICAgICAgICBiVXNlZCA9IFRSVUU7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBiVXNlZCA9IEZBTFNFOw0KLSAgICB9DQotICAgIGRlbGV0ZSBwU3ltYm9sRGljdERlY29kZXI7DQotICAgIGlmKFNESU5TWU1TKSB7DQotICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0RJTlNZTVMpOw0KLSAgICB9DQotICAgIGlmKFRhYmxlX0IxKSB7DQotICAgICAgICBkZWxldGUgVGFibGVfQjE7DQotICAgIH0NCi0gICAgaWYoVGFibGVfQjIpIHsNCi0gICAgICAgIGRlbGV0ZSBUYWJsZV9CMjsNCi0gICAgfQ0KLSAgICBpZihUYWJsZV9CMykgew0KLSAgICAgICAgZGVsZXRlIFRhYmxlX0IzOw0KLSAgICB9DQotICAgIGlmKFRhYmxlX0I0KSB7DQotICAgICAgICBkZWxldGUgVGFibGVfQjQ7DQotICAgIH0NCi0gICAgaWYoVGFibGVfQjUpIHsNCi0gICAgICAgIGRlbGV0ZSBUYWJsZV9CNTsNCi0gICAgfQ0KLSAgICBpZihiVXNlZCA9PSBGQUxTRSkgew0KLSAgICAgICAgaWYoZ2JDb250ZXh0KSB7DQotICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKGdiQ29udGV4dCk7DQotICAgICAgICB9DQotICAgICAgICBpZihnckNvbnRleHQpIHsNCi0gICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoZ3JDb250ZXh0KTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gSkJJRzJfU1VDQ0VTUzsNCi1mYWlsZWQ6DQotICAgIGRlbGV0ZSBwU3ltYm9sRGljdERlY29kZXI7DQotICAgIGlmKFNESU5TWU1TKSB7DQotICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0RJTlNZTVMpOw0KLSAgICB9DQotICAgIGlmKFRhYmxlX0IxKSB7DQotICAgICAgICBkZWxldGUgVGFibGVfQjE7DQotICAgIH0NCi0gICAgaWYoVGFibGVfQjIpIHsNCi0gICAgICAgIGRlbGV0ZSBUYWJsZV9CMjsNCi0gICAgfQ0KLSAgICBpZihUYWJsZV9CMykgew0KLSAgICAgICAgZGVsZXRlIFRhYmxlX0IzOw0KLSAgICB9DQotICAgIGlmKFRhYmxlX0I0KSB7DQotICAgICAgICBkZWxldGUgVGFibGVfQjQ7DQotICAgIH0NCi0gICAgaWYoVGFibGVfQjUpIHsNCi0gICAgICAgIGRlbGV0ZSBUYWJsZV9CNTsNCi0gICAgfQ0KLSAgICBpZihnYkNvbnRleHQpIHsNCi0gICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShnYkNvbnRleHQpOw0KLSAgICB9DQotICAgIGlmKGdyQ29udGV4dCkgew0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKGdyQ29udGV4dCk7DQotICAgIH0NCi0gICAgcmV0dXJuIG5SZXQ7DQotfQ0KLQ0KLUZYX0JPT0wgQ0pCaWcyX0NvbnRleHQ6OnBhcnNlVGV4dFJlZ2lvbihDSkJpZzJfU2VnbWVudCAqcFNlZ21lbnQpDQotew0KLSAgICBGWF9EV09SRCBkd1RlbXA7DQotICAgIEZYX1dPUkQgd0ZsYWdzOw0KLSAgICBGWF9JTlQzMiBpLCBuSW5kZXgsIG5SZXQ7DQotICAgIEpCaWcyUmVnaW9uSW5mbyByaTsNCi0gICAgQ0pCaWcyX1NlZ21lbnQgKnBTZWc7DQotICAgIENKQmlnMl9JbWFnZSAqKlNCU1lNUyA9IE5VTEw7DQotICAgIEpCaWcySHVmZm1hbkNvZGUgKlNCU1lNQ09ERVMgPSBOVUxMOw0KLSAgICBGWF9CWVRFIGNTQkhVRkZGUywgY1NCSFVGRkRTLCBjU0JIVUZGRFQsIGNTQkhVRkZSRFcsIGNTQkhVRkZSREgsIGNTQkhVRkZSRFgsIGNTQkhVRkZSRFksIGNTQkhVRkZSU0laRTsNCi0gICAgQ0pCaWcyX0h1ZmZtYW5UYWJsZSAqVGFibGVfQjEgPSBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAqVGFibGVfQjYgPSBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgKlRhYmxlX0I3ID0gTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAqVGFibGVfQjggPSBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqVGFibGVfQjkgPSBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlRhYmxlX0IxMCA9IE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlRhYmxlX0IxMSA9IE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpUYWJsZV9CMTIgPSBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlRhYmxlX0IxMyA9IE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlRhYmxlX0IxNCA9IE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpUYWJsZV9CMTUgPSBOVUxMOw0KLSAgICBKQmlnMkFyaXRoQ3R4ICpnckNvbnRleHQgPSBOVUxMOw0KLSAgICBDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyOw0KLSAgICBDSkJpZzJfVFJEUHJvYyAqcFRSRDsNCi0gICAgSkJJRzJfQUxMT0MocFRSRCwgQ0pCaWcyX1RSRFByb2MoKSk7DQotICAgIGlmKChwYXJzZVJlZ2lvbkluZm8oJnJpKSAhPSBKQklHMl9TVUNDRVNTKQ0KLSAgICAgICAgICAgIHx8IChtX3BTdHJlYW0tPnJlYWRTaG9ydEludGVnZXIoJndGbGFncykgIT0gMCkpIHsNCi0gICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIHNlZ21lbnQgOiBkYXRhIGhlYWRlciB0b28gc2hvcnQuIik7DQotICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfVE9PX1NIT1JUOw0KLSAgICAgICAgZ290byBmYWlsZWQ7DQotICAgIH0NCi0gICAgcFRSRC0+U0JXID0gcmkud2lkdGg7DQotICAgIHBUUkQtPlNCSCA9IHJpLmhlaWdodDsNCi0gICAgcFRSRC0+U0JIVUZGID0gd0ZsYWdzICYgMHgwMDAxOw0KLSAgICBwVFJELT5TQlJFRklORSA9ICh3RmxhZ3MgPj4gMSkgJiAweDAwMDE7DQotICAgIGR3VGVtcCA9ICh3RmxhZ3MgPj4gMikgJiAweDAwMDM7DQotICAgIHBUUkQtPlNCU1RSSVBTID0gMSA8PCBkd1RlbXA7DQotICAgIHBUUkQtPlJFRkNPUk5FUiA9IChKQmlnMkNvcm5lcikoKHdGbGFncyA+PiA0KSAmIDB4MDAwMyk7DQotICAgIHBUUkQtPlRSQU5TUE9TRUQgPSAod0ZsYWdzID4+IDYpICYgMHgwMDAxOw0KLSAgICBwVFJELT5TQkNPTUJPUCA9IChKQmlnMkNvbXBvc2VPcCkoKHdGbGFncyA+PiA3KSAmIDB4MDAwMyk7DQotICAgIHBUUkQtPlNCREVGUElYRUwgPSAod0ZsYWdzID4+IDkpICYgMHgwMDAxOw0KLSAgICBwVFJELT5TQkRTT0ZGU0VUID0gKHdGbGFncyA+PiAxMCkgJiAweDAwMWY7DQotICAgIGlmKHBUUkQtPlNCRFNPRkZTRVQgPj0gMHgwMDEwKSB7DQotICAgICAgICBwVFJELT5TQkRTT0ZGU0VUID0gcFRSRC0+U0JEU09GRlNFVCAtIDB4MDAyMDsNCi0gICAgfQ0KLSAgICBwVFJELT5TQlJURU1QTEFURSA9ICh3RmxhZ3MgPj4gMTUpICYgMHgwMDAxOw0KLSAgICBpZihwVFJELT5TQkhVRkYgPT0gMSkgew0KLSAgICAgICAgaWYobV9wU3RyZWFtLT5yZWFkU2hvcnRJbnRlZ2VyKCZ3RmxhZ3MpICE9IDApIHsNCi0gICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBzZWdtZW50IDogZGF0YSBoZWFkZXIgdG9vIHNob3J0LiIpOw0KLSAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9UT09fU0hPUlQ7DQotICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICB9DQotICAgICAgICBjU0JIVUZGRlMgPSB3RmxhZ3MgJiAweDAwMDM7DQotICAgICAgICBjU0JIVUZGRFMgPSAod0ZsYWdzID4+IDIpICYgMHgwMDAzOw0KLSAgICAgICAgY1NCSFVGRkRUID0gKHdGbGFncyA+PiA0KSAmIDB4MDAwMzsNCi0gICAgICAgIGNTQkhVRkZSRFcgPSAod0ZsYWdzID4+IDYpICYgMHgwMDAzOw0KLSAgICAgICAgY1NCSFVGRlJESCA9ICh3RmxhZ3MgPj4gOCkgJiAweDAwMDM7DQotICAgICAgICBjU0JIVUZGUkRYID0gKHdGbGFncyA+PiAxMCkgJiAweDAwMDM7DQotICAgICAgICBjU0JIVUZGUkRZID0gKHdGbGFncyA+PiAxMikgJiAweDAwMDM7DQotICAgICAgICBjU0JIVUZGUlNJWkUgPSAod0ZsYWdzID4+IDE0KSAmIDB4MDAwMTsNCi0gICAgfQ0KLSAgICBpZigocFRSRC0+U0JSRUZJTkUgPT0gMSkgJiYgKHBUUkQtPlNCUlRFTVBMQVRFID09IDApKSB7DQotICAgICAgICBmb3IoaSA9IDA7IGkgPCA0OyBpKyspIHsNCi0gICAgICAgICAgICBpZihtX3BTdHJlYW0tPnJlYWQxQnl0ZSgoRlhfQllURSopJnBUUkQtPlNCUkFUW2ldKSAhPSAwKSB7DQotICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIHNlZ21lbnQgOiBkYXRhIGhlYWRlciB0b28gc2hvcnQuIik7DQotICAgICAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9UT09fU0hPUlQ7DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZihtX3BTdHJlYW0tPnJlYWRJbnRlZ2VyKCZwVFJELT5TQk5VTUlOU1RBTkNFUykgIT0gMCkgew0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigidGV4dCByZWdpb24gc2VnbWVudCA6IGRhdGEgaGVhZGVyIHRvbyBzaG9ydC4iKTsNCi0gICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9UT09fU0hPUlQ7DQotICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgfQ0KLSAgICBmb3IoaSA9IDA7IGkgPCBwU2VnbWVudC0+bV9uUmVmZXJyZWRfdG9fc2VnbWVudF9jb3VudDsgaSsrKSB7DQotICAgICAgICBpZighZmluZFNlZ21lbnRCeU51bWJlcihwU2VnbWVudC0+bV9wUmVmZXJyZWRfdG9fc2VnbWVudF9udW1iZXJzW2ldKSkgew0KLSAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIHNlZ21lbnQgOiBjYW4ndCBmaW5kIHJlZmVyZWQgdG8gc2VnbWVudHMiKTsNCi0gICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7DQotICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcFRSRC0+U0JOVU1TWU1TID0gMDsNCi0gICAgZm9yKGkgPSAwOyBpIDwgcFNlZ21lbnQtPm1fblJlZmVycmVkX3RvX3NlZ21lbnRfY291bnQ7IGkrKykgew0KLSAgICAgICAgcFNlZyA9IGZpbmRTZWdtZW50QnlOdW1iZXIocFNlZ21lbnQtPm1fcFJlZmVycmVkX3RvX3NlZ21lbnRfbnVtYmVyc1tpXSk7DQotICAgICAgICBpZihwU2VnLT5tX2NGbGFncy5zLnR5cGUgPT0gMCkgew0KLSAgICAgICAgICAgIHBUUkQtPlNCTlVNU1lNUyArPSBwU2VnLT5tX1Jlc3VsdC5zZC0+U0ROVU1FWFNZTVM7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKHBUUkQtPlNCTlVNU1lNUyA+IDApIHsNCi0gICAgICAgIFNCU1lNUyA9IChDSkJpZzJfSW1hZ2UqKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoDQotICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKENKQmlnMl9JbWFnZSopLCBwVFJELT5TQk5VTVNZTVMpOw0KLSAgICAgICAgZHdUZW1wID0gMDsNCi0gICAgICAgIGZvcihpID0gMDsgaSA8IHBTZWdtZW50LT5tX25SZWZlcnJlZF90b19zZWdtZW50X2NvdW50OyBpKyspIHsNCi0gICAgICAgICAgICBwU2VnID0gZmluZFNlZ21lbnRCeU51bWJlcihwU2VnbWVudC0+bV9wUmVmZXJyZWRfdG9fc2VnbWVudF9udW1iZXJzW2ldKTsNCi0gICAgICAgICAgICBpZihwU2VnLT5tX2NGbGFncy5zLnR5cGUgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBKQklHMl9tZW1jcHkoU0JTWU1TICsgZHdUZW1wLCBwU2VnLT5tX1Jlc3VsdC5zZC0+U0RFWFNZTVMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU2VnLT5tX1Jlc3VsdC5zZC0+U0ROVU1FWFNZTVMgKiBzaXplb2YoQ0pCaWcyX0ltYWdlKikpOw0KLSAgICAgICAgICAgICAgICBkd1RlbXAgKz0gcFNlZy0+bV9SZXN1bHQuc2QtPlNETlVNRVhTWU1TOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHBUUkQtPlNCU1lNUyA9IFNCU1lNUzsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHBUUkQtPlNCU1lNUyA9IE5VTEw7DQotICAgIH0NCi0gICAgaWYocFRSRC0+U0JIVUZGID09IDEpIHsNCi0gICAgICAgIFNCU1lNQ09ERVMgPSBkZWNvZGVTeW1ib2xJREh1ZmZtYW5UYWJsZShtX3BTdHJlYW0sIHBUUkQtPlNCTlVNU1lNUyk7DQotICAgICAgICBpZihTQlNZTUNPREVTID09IE5VTEwpIHsNCi0gICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBzZWdtZW50OiBzeW1ib2wgSUQgaHVmZm1hbiB0YWJsZSBkZWNvZGUgZmFpbHVyZSEiKTsNCi0gICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7DQotICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICB9DQotICAgICAgICBtX3BTdHJlYW0tPmFsaWduQnl0ZSgpOw0KLSAgICAgICAgcFRSRC0+U0JTWU1DT0RFUyA9IFNCU1lNQ09ERVM7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBkd1RlbXAgPSAwOw0KLSAgICAgICAgd2hpbGUoKEZYX0RXT1JEKSgxIDw8IGR3VGVtcCkgPCBwVFJELT5TQk5VTVNZTVMpIHsNCi0gICAgICAgICAgICBkd1RlbXAgKys7DQotICAgICAgICB9DQotICAgICAgICBwVFJELT5TQlNZTUNPREVMRU4gPSAoRlhfQllURSlkd1RlbXA7DQotICAgIH0NCi0gICAgaWYocFRSRC0+U0JIVUZGID09IDEpIHsNCi0gICAgICAgIGlmKChjU0JIVUZGRlMgPT0gMikgfHwgKGNTQkhVRkZSRFcgPT0gMikgfHwgKGNTQkhVRkZSREggPT0gMikNCi0gICAgICAgICAgICAgICAgfHwgKGNTQkhVRkZSRFggPT0gMikgfHwgKGNTQkhVRkZSRFkgPT0gMikpIHsNCi0gICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBzZWdtZW50IDogU0JIVUZGRlM9MiBvciBTQkhVRkZSRFc9MiBvciAiDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU0JIVUZGUkRIPTIgb3IgU0JIVUZGUkRYPTIgb3IgU0JIVUZGUkRZPTIgaXMgbm90IHBlcm1pdHRlZCIpOw0KLSAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9GRVRBTDsNCi0gICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgIH0NCi0gICAgICAgIG5JbmRleCA9IDA7DQotICAgICAgICBpZihjU0JIVUZGRlMgPT0gMCkgew0KLSAgICAgICAgICAgIEpCSUcyX0FMTE9DKFRhYmxlX0I2LCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CNiwNCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0I2KSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CNikpOw0KLSAgICAgICAgICAgIHBUUkQtPlNCSFVGRkZTID0gVGFibGVfQjY7DQotICAgICAgICB9IGVsc2UgaWYoY1NCSFVGRkZTID09IDEpIHsNCi0gICAgICAgICAgICBKQklHMl9BTExPQyhUYWJsZV9CNywgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjcsDQotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CNykgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjcpKTsNCi0gICAgICAgICAgICBwVFJELT5TQkhVRkZGUyA9IFRhYmxlX0I3Ow0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBwU2VnID0gZmluZFJlZmVycmVkU2VnbWVudEJ5VHlwZUFuZEluZGV4KHBTZWdtZW50LCA1MywgbkluZGV4KyspOw0KLSAgICAgICAgICAgIGlmKCFwU2VnKSB7DQotICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIHNlZ21lbnQgOiBTQkhVRkZGUyBjYW4ndCBmaW5kIHVzZXIgc3VwcGxpZWQgdGFibGUiKTsNCi0gICAgICAgICAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0ZFVEFMOw0KLSAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcFRSRC0+U0JIVUZGRlMgPSBwU2VnLT5tX1Jlc3VsdC5odDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKGNTQkhVRkZEUyA9PSAwKSB7DQotICAgICAgICAgICAgSkJJRzJfQUxMT0MoVGFibGVfQjgsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0I4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjgpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0I4KSk7DQotICAgICAgICAgICAgcFRSRC0+U0JIVUZGRFMgPSBUYWJsZV9CODsNCi0gICAgICAgIH0gZWxzZSBpZihjU0JIVUZGRFMgPT0gMSkgew0KLSAgICAgICAgICAgIEpCSUcyX0FMTE9DKFRhYmxlX0I5LCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9COSwNCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0I5KSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9COSkpOw0KLSAgICAgICAgICAgIHBUUkQtPlNCSFVGRkRTID0gVGFibGVfQjk7DQotICAgICAgICB9IGVsc2UgaWYoY1NCSFVGRkRTID09IDIpIHsNCi0gICAgICAgICAgICBKQklHMl9BTExPQyhUYWJsZV9CMTAsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxMCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IxMCkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjEwKSk7DQotICAgICAgICAgICAgcFRSRC0+U0JIVUZGRFMgPSBUYWJsZV9CMTA7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHBTZWcgPSBmaW5kUmVmZXJyZWRTZWdtZW50QnlUeXBlQW5kSW5kZXgocFNlZ21lbnQsIDUzLCBuSW5kZXgrKyk7DQotICAgICAgICAgICAgaWYoIXBTZWcpIHsNCi0gICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigidGV4dCByZWdpb24gc2VnbWVudCA6IFNCSFVGRkRTIGNhbid0IGZpbmQgdXNlciBzdXBwbGllZCB0YWJsZSIpOw0KLSAgICAgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwVFJELT5TQkhVRkZEUyA9IHBTZWctPm1fUmVzdWx0Lmh0Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoY1NCSFVGRkRUID09IDApIHsNCi0gICAgICAgICAgICBKQklHMl9BTExPQyhUYWJsZV9CMTEsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxMSwNCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IxMSkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjExKSk7DQotICAgICAgICAgICAgcFRSRC0+U0JIVUZGRFQgPSBUYWJsZV9CMTE7DQotICAgICAgICB9IGVsc2UgaWYoY1NCSFVGRkRUID09IDEpIHsNCi0gICAgICAgICAgICBKQklHMl9BTExPQyhUYWJsZV9CMTIsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxMiwNCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IxMikgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjEyKSk7DQotICAgICAgICAgICAgcFRSRC0+U0JIVUZGRFQgPSBUYWJsZV9CMTI7DQotICAgICAgICB9IGVsc2UgaWYoY1NCSFVGRkRUID09IDIpIHsNCi0gICAgICAgICAgICBKQklHMl9BTExPQyhUYWJsZV9CMTMsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxMywNCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IxMykgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjEzKSk7DQotICAgICAgICAgICAgcFRSRC0+U0JIVUZGRFQgPSBUYWJsZV9CMTM7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHBTZWcgPSBmaW5kUmVmZXJyZWRTZWdtZW50QnlUeXBlQW5kSW5kZXgocFNlZ21lbnQsIDUzLCBuSW5kZXgrKyk7DQotICAgICAgICAgICAgaWYoIXBTZWcpIHsNCi0gICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigidGV4dCByZWdpb24gc2VnbWVudCA6IFNCSFVGRkRUIGNhbid0IGZpbmQgdXNlciBzdXBwbGllZCB0YWJsZSIpOw0KLSAgICAgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwVFJELT5TQkhVRkZEVCA9IHBTZWctPm1fUmVzdWx0Lmh0Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoY1NCSFVGRlJEVyA9PSAwKSB7DQotICAgICAgICAgICAgSkJJRzJfQUxMT0MoVGFibGVfQjE0LCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMTQsDQotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMTQpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0IxNCkpOw0KLSAgICAgICAgICAgIHBUUkQtPlNCSFVGRlJEVyA9IFRhYmxlX0IxNDsNCi0gICAgICAgIH0gZWxzZSBpZihjU0JIVUZGUkRXID09IDEpIHsNCi0gICAgICAgICAgICBKQklHMl9BTExPQyhUYWJsZV9CMTUsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxNSwNCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IxNSkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjE1KSk7DQotICAgICAgICAgICAgcFRSRC0+U0JIVUZGUkRXID0gVGFibGVfQjE1Ow0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBwU2VnID0gZmluZFJlZmVycmVkU2VnbWVudEJ5VHlwZUFuZEluZGV4KHBTZWdtZW50LCA1MywgbkluZGV4KyspOw0KLSAgICAgICAgICAgIGlmKCFwU2VnKSB7DQotICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIHNlZ21lbnQgOiBTQkhVRkZSRFcgY2FuJ3QgZmluZCB1c2VyIHN1cHBsaWVkIHRhYmxlIik7DQotICAgICAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9GRVRBTDsNCi0gICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHBUUkQtPlNCSFVGRlJEVyA9IHBTZWctPm1fUmVzdWx0Lmh0Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoY1NCSFVGRlJESCA9PSAwKSB7DQotICAgICAgICAgICAgaWYoIVRhYmxlX0IxNCkgew0KLSAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhUYWJsZV9CMTQsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxNCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMTQpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0IxNCkpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwVFJELT5TQkhVRkZSREggPSBUYWJsZV9CMTQ7DQotICAgICAgICB9IGVsc2UgaWYoY1NCSFVGRlJESCA9PSAxKSB7DQotICAgICAgICAgICAgaWYoIVRhYmxlX0IxNSkgew0KLSAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhUYWJsZV9CMTUsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxNSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMTUpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0IxNSkpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwVFJELT5TQkhVRkZSREggPSBUYWJsZV9CMTU7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHBTZWcgPSBmaW5kUmVmZXJyZWRTZWdtZW50QnlUeXBlQW5kSW5kZXgocFNlZ21lbnQsIDUzLCBuSW5kZXgrKyk7DQotICAgICAgICAgICAgaWYoIXBTZWcpIHsNCi0gICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigidGV4dCByZWdpb24gc2VnbWVudCA6IFNCSFVGRlJESCBjYW4ndCBmaW5kIHVzZXIgc3VwcGxpZWQgdGFibGUiKTsNCi0gICAgICAgICAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0ZFVEFMOw0KLSAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcFRSRC0+U0JIVUZGUkRIID0gcFNlZy0+bV9SZXN1bHQuaHQ7DQotICAgICAgICB9DQotICAgICAgICBpZihjU0JIVUZGUkRYID09IDApIHsNCi0gICAgICAgICAgICBpZighVGFibGVfQjE0KSB7DQotICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKFRhYmxlX0IxNCwgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjE0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IxNCkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjE0KSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHBUUkQtPlNCSFVGRlJEWCA9IFRhYmxlX0IxNDsNCi0gICAgICAgIH0gZWxzZSBpZihjU0JIVUZGUkRYID09IDEpIHsNCi0gICAgICAgICAgICBpZighVGFibGVfQjE1KSB7DQotICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKFRhYmxlX0IxNSwgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjE1LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IxNSkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjE1KSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHBUUkQtPlNCSFVGRlJEWCA9IFRhYmxlX0IxNTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcFNlZyA9IGZpbmRSZWZlcnJlZFNlZ21lbnRCeVR5cGVBbmRJbmRleChwU2VnbWVudCwgNTMsIG5JbmRleCsrKTsNCi0gICAgICAgICAgICBpZighcFNlZykgew0KLSAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBzZWdtZW50IDogU0JIVUZGUkRYIGNhbid0IGZpbmQgdXNlciBzdXBwbGllZCB0YWJsZSIpOw0KLSAgICAgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwVFJELT5TQkhVRkZSRFggPSBwU2VnLT5tX1Jlc3VsdC5odDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKGNTQkhVRkZSRFkgPT0gMCkgew0KLSAgICAgICAgICAgIGlmKCFUYWJsZV9CMTQpIHsNCi0gICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MoVGFibGVfQjE0LCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMTQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjE0KSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMTQpKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcFRSRC0+U0JIVUZGUkRZID0gVGFibGVfQjE0Ow0KLSAgICAgICAgfSBlbHNlIGlmKGNTQkhVRkZSRFkgPT0gMSkgew0KLSAgICAgICAgICAgIGlmKCFUYWJsZV9CMTUpIHsNCi0gICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MoVGFibGVfQjE1LCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMTUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjE1KSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMTUpKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcFRSRC0+U0JIVUZGUkRZID0gVGFibGVfQjE1Ow0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBwU2VnID0gZmluZFJlZmVycmVkU2VnbWVudEJ5VHlwZUFuZEluZGV4KHBTZWdtZW50LCA1MywgbkluZGV4KyspOw0KLSAgICAgICAgICAgIGlmKCFwU2VnKSB7DQotICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIHNlZ21lbnQgOiBTQkhVRkZSRFkgY2FuJ3QgZmluZCB1c2VyIHN1cHBsaWVkIHRhYmxlIik7DQotICAgICAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9GRVRBTDsNCi0gICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHBUUkQtPlNCSFVGRlJEWSA9IHBTZWctPm1fUmVzdWx0Lmh0Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoY1NCSFVGRlJTSVpFID09IDApIHsNCi0gICAgICAgICAgICBKQklHMl9BTExPQyhUYWJsZV9CMSwgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjEsDQotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMSkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjEpKTsNCi0gICAgICAgICAgICBwVFJELT5TQkhVRkZSU0laRSA9IFRhYmxlX0IxOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBwU2VnID0gZmluZFJlZmVycmVkU2VnbWVudEJ5VHlwZUFuZEluZGV4KHBTZWdtZW50LCA1MywgbkluZGV4KyspOw0KLSAgICAgICAgICAgIGlmKCFwU2VnKSB7DQotICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIHNlZ21lbnQgOiBTQkhVRkZSU0laRSBjYW4ndCBmaW5kIHVzZXIgc3VwcGxpZWQgdGFibGUiKTsNCi0gICAgICAgICAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0ZFVEFMOw0KLSAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcFRSRC0+U0JIVUZGUlNJWkUgPSBwU2VnLT5tX1Jlc3VsdC5odDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZihwVFJELT5TQlJFRklORSA9PSAxKSB7DQotICAgICAgICBkd1RlbXAgPSBwVFJELT5TQlJURU1QTEFURSA/IDEgPDwgMTAgOiAxIDw8IDEzOw0KLSAgICAgICAgZ3JDb250ZXh0ID0gKEpCaWcyQXJpdGhDdHgqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihzaXplb2YoSkJpZzJBcml0aEN0eCksIGR3VGVtcCk7DQotICAgICAgICBKQklHMl9tZW1zZXQoZ3JDb250ZXh0LCAwLCBzaXplb2YoSkJpZzJBcml0aEN0eCkqZHdUZW1wKTsNCi0gICAgfQ0KLSAgICBpZihwVFJELT5TQkhVRkYgPT0gMCkgew0KLSAgICAgICAgSkJJRzJfQUxMT0MocEFyaXRoRGVjb2RlciwgQ0pCaWcyX0FyaXRoRGVjb2RlcihtX3BTdHJlYW0pKTsNCi0gICAgICAgIHBTZWdtZW50LT5tX25SZXN1bHRUeXBlID0gSkJJRzJfSU1BR0VfUE9JTlRFUjsNCi0gICAgICAgIHBTZWdtZW50LT5tX1Jlc3VsdC5pbSA9IHBUUkQtPmRlY29kZV9Bcml0aChwQXJpdGhEZWNvZGVyLCBnckNvbnRleHQpOw0KLSAgICAgICAgZGVsZXRlIHBBcml0aERlY29kZXI7DQotICAgICAgICBpZihwU2VnbWVudC0+bV9SZXN1bHQuaW0gPT0gTlVMTCkgew0KLSAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9GRVRBTDsNCi0gICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fcFN0cmVhbS0+YWxpZ25CeXRlKCk7DQotICAgICAgICBtX3BTdHJlYW0tPm9mZnNldCgyKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHBTZWdtZW50LT5tX25SZXN1bHRUeXBlID0gSkJJRzJfSU1BR0VfUE9JTlRFUjsNCi0gICAgICAgIHBTZWdtZW50LT5tX1Jlc3VsdC5pbSA9IHBUUkQtPmRlY29kZV9IdWZmbWFuKG1fcFN0cmVhbSwgZ3JDb250ZXh0KTsNCi0gICAgICAgIGlmKHBTZWdtZW50LT5tX1Jlc3VsdC5pbSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0ZFVEFMOw0KLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wU3RyZWFtLT5hbGlnbkJ5dGUoKTsNCi0gICAgfQ0KLSAgICBpZihwU2VnbWVudC0+bV9jRmxhZ3Mucy50eXBlICE9IDQpIHsNCi0gICAgICAgIGlmKCFtX2JCdWZTcGVjaWZpZWQpIHsNCi0gICAgICAgICAgICBKQmlnMlBhZ2VJbmZvICpwUGFnZUluZm8gPSBtX3BQYWdlSW5mb0xpc3QtPmdldExhc3QoKTsNCi0gICAgICAgICAgICBpZiAoKHBQYWdlSW5mby0+bV9iSXNTdHJpcGVkID09IDEpICYmIChyaS55ICsgcmkuaGVpZ2h0ID4gbV9wUGFnZS0+bV9uSGVpZ2h0KSkgew0KLSAgICAgICAgICAgICAgICBtX3BQYWdlLT5leHBhbmQocmkueSArIHJpLmhlaWdodCwgKHBQYWdlSW5mby0+bV9jRmxhZ3MgJiA0KSA/IDEgOiAwKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBtX3BQYWdlLT5jb21wb3NlRnJvbShyaS54LCByaS55LCBwU2VnbWVudC0+bV9SZXN1bHQuaW0sIChKQmlnMkNvbXBvc2VPcCkocmkuZmxhZ3MgJiAweDAzKSk7DQotICAgICAgICBkZWxldGUgcFNlZ21lbnQtPm1fUmVzdWx0LmltOw0KLSAgICAgICAgcFNlZ21lbnQtPm1fUmVzdWx0LmltID0gTlVMTDsNCi0gICAgfQ0KLSAgICBkZWxldGUgcFRSRDsNCi0gICAgaWYoU0JTWU1TKSB7DQotICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0JTWU1TKTsNCi0gICAgfQ0KLSAgICBpZihTQlNZTUNPREVTKSB7DQotICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0JTWU1DT0RFUyk7DQotICAgIH0NCi0gICAgaWYoZ3JDb250ZXh0KSB7DQotICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoZ3JDb250ZXh0KTsNCi0gICAgfQ0KLSAgICBpZihUYWJsZV9CMSkgew0KLSAgICAgICAgZGVsZXRlIFRhYmxlX0IxOw0KLSAgICB9DQotICAgIGlmKFRhYmxlX0I2KSB7DQotICAgICAgICBkZWxldGUgVGFibGVfQjY7DQotICAgIH0NCi0gICAgaWYoVGFibGVfQjcpIHsNCi0gICAgICAgIGRlbGV0ZSBUYWJsZV9CNzsNCi0gICAgfQ0KLSAgICBpZihUYWJsZV9COCkgew0KLSAgICAgICAgZGVsZXRlIFRhYmxlX0I4Ow0KLSAgICB9DQotICAgIGlmKFRhYmxlX0I5KSB7DQotICAgICAgICBkZWxldGUgVGFibGVfQjk7DQotICAgIH0NCi0gICAgaWYoVGFibGVfQjEwKSB7DQotICAgICAgICBkZWxldGUgVGFibGVfQjEwOw0KLSAgICB9DQotICAgIGlmKFRhYmxlX0IxMSkgew0KLSAgICAgICAgZGVsZXRlIFRhYmxlX0IxMTsNCi0gICAgfQ0KLSAgICBpZihUYWJsZV9CMTIpIHsNCi0gICAgICAgIGRlbGV0ZSBUYWJsZV9CMTI7DQotICAgIH0NCi0gICAgaWYoVGFibGVfQjEzKSB7DQotICAgICAgICBkZWxldGUgVGFibGVfQjEzOw0KLSAgICB9DQotICAgIGlmKFRhYmxlX0IxNCkgew0KLSAgICAgICAgZGVsZXRlIFRhYmxlX0IxNDsNCi0gICAgfQ0KLSAgICBpZihUYWJsZV9CMTUpIHsNCi0gICAgICAgIGRlbGV0ZSBUYWJsZV9CMTU7DQotICAgIH0NCi0gICAgcmV0dXJuIEpCSUcyX1NVQ0NFU1M7DQotZmFpbGVkOg0KLSAgICBkZWxldGUgcFRSRDsNCi0gICAgaWYoU0JTWU1TKSB7DQotICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0JTWU1TKTsNCi0gICAgfQ0KLSAgICBpZihTQlNZTUNPREVTKSB7DQotICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0JTWU1DT0RFUyk7DQotICAgIH0NCi0gICAgaWYoZ3JDb250ZXh0KSB7DQotICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoZ3JDb250ZXh0KTsNCi0gICAgfQ0KLSAgICBpZihUYWJsZV9CMSkgew0KLSAgICAgICAgZGVsZXRlIFRhYmxlX0IxOw0KLSAgICB9DQotICAgIGlmKFRhYmxlX0I2KSB7DQotICAgICAgICBkZWxldGUgVGFibGVfQjY7DQotICAgIH0NCi0gICAgaWYoVGFibGVfQjcpIHsNCi0gICAgICAgIGRlbGV0ZSBUYWJsZV9CNzsNCi0gICAgfQ0KLSAgICBpZihUYWJsZV9COCkgew0KLSAgICAgICAgZGVsZXRlIFRhYmxlX0I4Ow0KLSAgICB9DQotICAgIGlmKFRhYmxlX0I5KSB7DQotICAgICAgICBkZWxldGUgVGFibGVfQjk7DQotICAgIH0NCi0gICAgaWYoVGFibGVfQjEwKSB7DQotICAgICAgICBkZWxldGUgVGFibGVfQjEwOw0KLSAgICB9DQotICAgIGlmKFRhYmxlX0IxMSkgew0KLSAgICAgICAgZGVsZXRlIFRhYmxlX0IxMTsNCi0gICAgfQ0KLSAgICBpZihUYWJsZV9CMTIpIHsNCi0gICAgICAgIGRlbGV0ZSBUYWJsZV9CMTI7DQotICAgIH0NCi0gICAgaWYoVGFibGVfQjEzKSB7DQotICAgICAgICBkZWxldGUgVGFibGVfQjEzOw0KLSAgICB9DQotICAgIGlmKFRhYmxlX0IxNCkgew0KLSAgICAgICAgZGVsZXRlIFRhYmxlX0IxNDsNCi0gICAgfQ0KLSAgICBpZihUYWJsZV9CMTUpIHsNCi0gICAgICAgIGRlbGV0ZSBUYWJsZV9CMTU7DQotICAgIH0NCi0gICAgcmV0dXJuIG5SZXQ7DQotfQ0KLQ0KLUZYX0JPT0wgQ0pCaWcyX0NvbnRleHQ6OnBhcnNlUGF0dGVybkRpY3QoQ0pCaWcyX1NlZ21lbnQgKnBTZWdtZW50LCBJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIEZYX0RXT1JEIGR3VGVtcDsNCi0gICAgRlhfQllURSBjRmxhZ3M7DQotICAgIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dDsNCi0gICAgQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlcjsNCi0gICAgQ0pCaWcyX1BERFByb2MgKnBQREQ7DQotICAgIEZYX0lOVDMyIG5SZXQ7DQotICAgIEpCSUcyX0FMTE9DKHBQREQsIENKQmlnMl9QRERQcm9jKCkpOw0KLSAgICBpZigobV9wU3RyZWFtLT5yZWFkMUJ5dGUoJmNGbGFncykgIT0gMCkNCi0gICAgICAgICAgICB8fCAobV9wU3RyZWFtLT5yZWFkMUJ5dGUoJnBQREQtPkhEUFcpICE9IDApDQotICAgICAgICAgICAgfHwgKG1fcFN0cmVhbS0+cmVhZDFCeXRlKCZwUERELT5IRFBIKSAhPSAwKQ0KLSAgICAgICAgICAgIHx8IChtX3BTdHJlYW0tPnJlYWRJbnRlZ2VyKCZwUERELT5HUkFZTUFYKSAhPSAwKSkgew0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigicGF0dGVybiBkaWN0aW9uYXJ5IHNlZ21lbnQgOiBkYXRhIGhlYWRlciB0b28gc2hvcnQuIik7DQotICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfVE9PX1NIT1JUOw0KLSAgICAgICAgZ290byBmYWlsZWQ7DQotICAgIH0NCi0gICAgaWYgKHBQREQtPkdSQVlNQVggPiBKQklHMl9NQVhfUEFUVEVSTl9JTkRFWCkgew0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigicGF0dGVybiBkaWN0aW9uYXJ5IHNlZ21lbnQgOiB0b28gbWF4IGdyYXkgbWF4LiIpOw0KLSAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0xJTUlUOw0KLSAgICAgICAgZ290byBmYWlsZWQ7DQotICAgIH0NCi0gICAgcFBERC0+SERNTVIgPSBjRmxhZ3MgJiAweDAxOw0KLSAgICBwUERELT5IRFRFTVBMQVRFID0gKGNGbGFncyA+PiAxKSAmIDB4MDM7DQotICAgIHBTZWdtZW50LT5tX25SZXN1bHRUeXBlID0gSkJJRzJfUEFUVEVSTl9ESUNUX1BPSU5URVI7DQotICAgIGlmKHBQREQtPkhETU1SID09IDApIHsNCi0gICAgICAgIGR3VGVtcCA9IHBQREQtPkhEVEVNUExBVEUgPT0gMCA/IDY1NTM2IDogcFBERC0+SERURU1QTEFURSA9PSAxID8gODE5MiA6IDEwMjQ7DQotICAgICAgICBnYkNvbnRleHQgPSAoSkJpZzJBcml0aEN0eCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihKQmlnMkFyaXRoQ3R4KSwgZHdUZW1wKTsNCi0gICAgICAgIEpCSUcyX21lbXNldChnYkNvbnRleHQsIDAsIHNpemVvZihKQmlnMkFyaXRoQ3R4KSpkd1RlbXApOw0KLSAgICAgICAgSkJJRzJfQUxMT0MocEFyaXRoRGVjb2RlciwgQ0pCaWcyX0FyaXRoRGVjb2RlcihtX3BTdHJlYW0pKTsNCi0gICAgICAgIHBTZWdtZW50LT5tX1Jlc3VsdC5wZCA9IHBQREQtPmRlY29kZV9Bcml0aChwQXJpdGhEZWNvZGVyLCBnYkNvbnRleHQsIHBQYXVzZSk7DQotICAgICAgICBkZWxldGUgcEFyaXRoRGVjb2RlcjsNCi0gICAgICAgIGlmKHBTZWdtZW50LT5tX1Jlc3VsdC5wZCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKGdiQ29udGV4dCk7DQotICAgICAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0ZFVEFMOw0KLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKGdiQ29udGV4dCk7DQotICAgICAgICBtX3BTdHJlYW0tPmFsaWduQnl0ZSgpOw0KLSAgICAgICAgbV9wU3RyZWFtLT5vZmZzZXQoMik7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBwU2VnbWVudC0+bV9SZXN1bHQucGQgPSBwUERELT5kZWNvZGVfTU1SKG1fcFN0cmVhbSwgcFBhdXNlKTsNCi0gICAgICAgIGlmKHBTZWdtZW50LT5tX1Jlc3VsdC5wZCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0ZFVEFMOw0KLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wU3RyZWFtLT5hbGlnbkJ5dGUoKTsNCi0gICAgfQ0KLSAgICBkZWxldGUgcFBERDsNCi0gICAgcmV0dXJuIEpCSUcyX1NVQ0NFU1M7DQotZmFpbGVkOg0KLSAgICBkZWxldGUgcFBERDsNCi0gICAgcmV0dXJuIG5SZXQ7DQotfQ0KLUZYX0JPT0wgQ0pCaWcyX0NvbnRleHQ6OnBhcnNlSGFsZnRvbmVSZWdpb24oQ0pCaWcyX1NlZ21lbnQgKnBTZWdtZW50LCBJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIEZYX0RXT1JEIGR3VGVtcDsNCi0gICAgRlhfQllURSBjRmxhZ3M7DQotICAgIEpCaWcyUmVnaW9uSW5mbyByaTsNCi0gICAgQ0pCaWcyX1NlZ21lbnQgKnBTZWc7DQotICAgIENKQmlnMl9QYXR0ZXJuRGljdCAqcFBhdHRlcm5EaWN0Ow0KLSAgICBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQ7DQotICAgIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXI7DQotICAgIENKQmlnMl9IVFJEUHJvYyAqcEhSRDsNCi0gICAgRlhfSU5UMzIgblJldDsNCi0gICAgSkJJRzJfQUxMT0MocEhSRCwgQ0pCaWcyX0hUUkRQcm9jKCkpOw0KLSAgICBpZigocGFyc2VSZWdpb25JbmZvKCZyaSkgIT0gSkJJRzJfU1VDQ0VTUykNCi0gICAgICAgICAgICB8fCAobV9wU3RyZWFtLT5yZWFkMUJ5dGUoJmNGbGFncykgIT0gMCkNCi0gICAgICAgICAgICB8fCAobV9wU3RyZWFtLT5yZWFkSW50ZWdlcigmcEhSRC0+SEdXKSAhPSAwKQ0KLSAgICAgICAgICAgIHx8IChtX3BTdHJlYW0tPnJlYWRJbnRlZ2VyKCZwSFJELT5IR0gpICE9IDApDQotICAgICAgICAgICAgfHwgKG1fcFN0cmVhbS0+cmVhZEludGVnZXIoKEZYX0RXT1JEKikmcEhSRC0+SEdYKSAhPSAwKQ0KLSAgICAgICAgICAgIHx8IChtX3BTdHJlYW0tPnJlYWRJbnRlZ2VyKChGWF9EV09SRCopJnBIUkQtPkhHWSkgIT0gMCkNCi0gICAgICAgICAgICB8fCAobV9wU3RyZWFtLT5yZWFkU2hvcnRJbnRlZ2VyKCZwSFJELT5IUlgpICE9IDApDQotICAgICAgICAgICAgfHwgKG1fcFN0cmVhbS0+cmVhZFNob3J0SW50ZWdlcigmcEhSRC0+SFJZKSAhPSAwKSkgew0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiaGFsZnRvbmUgcmVnaW9uIHNlZ21lbnQgOiBkYXRhIGhlYWRlciB0b28gc2hvcnQuIik7DQotICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfVE9PX1NIT1JUOw0KLSAgICAgICAgZ290byBmYWlsZWQ7DQotICAgIH0NCi0gICAgcEhSRC0+SEJXID0gcmkud2lkdGg7DQotICAgIHBIUkQtPkhCSCA9IHJpLmhlaWdodDsNCi0gICAgcEhSRC0+SE1NUiA9IGNGbGFncyAmIDB4MDE7DQotICAgIHBIUkQtPkhURU1QTEFURSA9IChjRmxhZ3MgPj4gMSkgJiAweDAzOw0KLSAgICBwSFJELT5IRU5BQkxFU0tJUCA9IChjRmxhZ3MgPj4gMykgJiAweDAxOw0KLSAgICBwSFJELT5IQ09NQk9QID0gKEpCaWcyQ29tcG9zZU9wKSgoY0ZsYWdzID4+IDQpICYgMHgwNyk7DQotICAgIHBIUkQtPkhERUZQSVhFTCA9IChjRmxhZ3MgPj4gNykgJiAweDAxOw0KLSAgICBpZihwU2VnbWVudC0+bV9uUmVmZXJyZWRfdG9fc2VnbWVudF9jb3VudCAhPSAxKSB7DQotICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJoYWxmdG9uZSByZWdpb24gc2VnbWVudCA6IHJlZmVyZWQgdG8gc2VnbWVudCBjb3VudCBub3QgZXF1YWxzIDEiKTsNCi0gICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9GRVRBTDsNCi0gICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICB9DQotICAgIHBTZWcgPSBmaW5kU2VnbWVudEJ5TnVtYmVyKHBTZWdtZW50LT5tX3BSZWZlcnJlZF90b19zZWdtZW50X251bWJlcnNbMF0pOw0KLSAgICBpZiggKHBTZWcgPT0gTlVMTCkgfHwgKHBTZWctPm1fY0ZsYWdzLnMudHlwZSAhPSAxNikpIHsNCi0gICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoImhhbGZ0b25lIHJlZ2lvbiBzZWdtZW50IDogcmVmZXJlZCB0byBzZWdtZW50IGlzIG5vdCBwYXR0ZXJuIGRpY3QiKTsNCi0gICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9GRVRBTDsNCi0gICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICB9DQotICAgIHBQYXR0ZXJuRGljdCA9IHBTZWctPm1fUmVzdWx0LnBkOw0KLSAgICBpZigocFBhdHRlcm5EaWN0ID09IE5VTEwpIHx8IChwUGF0dGVybkRpY3QtPk5VTVBBVFMgPT0gMCkpIHsNCi0gICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoImhhbGZ0b25lIHJlZ2lvbiBzZWdtZW50IDogaGFzIG5vIHBhdHRlcm5zIGlucHV0Iik7DQotICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7DQotICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgfQ0KLSAgICBwSFJELT5ITlVNUEFUUyA9IHBQYXR0ZXJuRGljdC0+TlVNUEFUUzsNCi0gICAgcEhSRC0+SFBBVFMgPSBwUGF0dGVybkRpY3QtPkhEUEFUUzsNCi0gICAgcEhSRC0+SFBXID0gcFBhdHRlcm5EaWN0LT5IRFBBVFNbMF0tPm1fbldpZHRoOw0KLSAgICBwSFJELT5IUEggPSBwUGF0dGVybkRpY3QtPkhEUEFUU1swXS0+bV9uSGVpZ2h0Ow0KLSAgICBwU2VnbWVudC0+bV9uUmVzdWx0VHlwZSA9IEpCSUcyX0lNQUdFX1BPSU5URVI7DQotICAgIGlmKHBIUkQtPkhNTVIgPT0gMCkgew0KLSAgICAgICAgZHdUZW1wID0gcEhSRC0+SFRFTVBMQVRFID09IDAgPyA2NTUzNiA6IHBIUkQtPkhURU1QTEFURSA9PSAxID8gODE5MiA6IDEwMjQ7DQotICAgICAgICBnYkNvbnRleHQgPSAoSkJpZzJBcml0aEN0eCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihKQmlnMkFyaXRoQ3R4KSwgZHdUZW1wKTsNCi0gICAgICAgIEpCSUcyX21lbXNldChnYkNvbnRleHQsIDAsIHNpemVvZihKQmlnMkFyaXRoQ3R4KSpkd1RlbXApOw0KLSAgICAgICAgSkJJRzJfQUxMT0MocEFyaXRoRGVjb2RlciwgQ0pCaWcyX0FyaXRoRGVjb2RlcihtX3BTdHJlYW0pKTsNCi0gICAgICAgIHBTZWdtZW50LT5tX1Jlc3VsdC5pbSA9IHBIUkQtPmRlY29kZV9Bcml0aChwQXJpdGhEZWNvZGVyLCBnYkNvbnRleHQsIHBQYXVzZSk7DQotICAgICAgICBkZWxldGUgcEFyaXRoRGVjb2RlcjsNCi0gICAgICAgIGlmKHBTZWdtZW50LT5tX1Jlc3VsdC5pbSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKGdiQ29udGV4dCk7DQotICAgICAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0ZFVEFMOw0KLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKGdiQ29udGV4dCk7DQotICAgICAgICBtX3BTdHJlYW0tPmFsaWduQnl0ZSgpOw0KLSAgICAgICAgbV9wU3RyZWFtLT5vZmZzZXQoMik7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBwU2VnbWVudC0+bV9SZXN1bHQuaW0gPSBwSFJELT5kZWNvZGVfTU1SKG1fcFN0cmVhbSwgcFBhdXNlKTsNCi0gICAgICAgIGlmKHBTZWdtZW50LT5tX1Jlc3VsdC5pbSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0ZFVEFMOw0KLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wU3RyZWFtLT5hbGlnbkJ5dGUoKTsNCi0gICAgfQ0KLSAgICBpZihwU2VnbWVudC0+bV9jRmxhZ3Mucy50eXBlICE9IDIwKSB7DQotICAgICAgICBpZighbV9iQnVmU3BlY2lmaWVkKSB7DQotICAgICAgICAgICAgSkJpZzJQYWdlSW5mbyAqcFBhZ2VJbmZvID0gbV9wUGFnZUluZm9MaXN0LT5nZXRMYXN0KCk7DQotICAgICAgICAgICAgaWYgKChwUGFnZUluZm8tPm1fYklzU3RyaXBlZCA9PSAxKSAmJiAocmkueSArIHJpLmhlaWdodCA+IG1fcFBhZ2UtPm1fbkhlaWdodCkpIHsNCi0gICAgICAgICAgICAgICAgbV9wUGFnZS0+ZXhwYW5kKHJpLnkgKyByaS5oZWlnaHQsIChwUGFnZUluZm8tPm1fY0ZsYWdzICYgNCkgPyAxIDogMCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wUGFnZS0+Y29tcG9zZUZyb20ocmkueCwgcmkueSwgcFNlZ21lbnQtPm1fUmVzdWx0LmltLCAoSkJpZzJDb21wb3NlT3ApKHJpLmZsYWdzICYgMHgwMykpOw0KLSAgICAgICAgZGVsZXRlIHBTZWdtZW50LT5tX1Jlc3VsdC5pbTsNCi0gICAgICAgIHBTZWdtZW50LT5tX1Jlc3VsdC5pbSA9IE5VTEw7DQotICAgIH0NCi0gICAgZGVsZXRlIHBIUkQ7DQotICAgIHJldHVybiBKQklHMl9TVUNDRVNTOw0KLWZhaWxlZDoNCi0gICAgZGVsZXRlIHBIUkQ7DQotICAgIHJldHVybiBuUmV0Ow0KLX0NCi0NCi1GWF9CT09MIENKQmlnMl9Db250ZXh0OjpwYXJzZUdlbmVyaWNSZWdpb24oQ0pCaWcyX1NlZ21lbnQgKnBTZWdtZW50LCBJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIEZYX0RXT1JEIGR3VGVtcDsNCi0gICAgRlhfQllURSBjRmxhZ3M7DQotICAgIEZYX0lOVDMyIGksIG5SZXQ7DQotICAgIGlmKG1fcEdSRCA9PSBOVUxMKSB7DQotICAgICAgICBKQklHMl9BTExPQyhtX3BHUkQsIENKQmlnMl9HUkRQcm9jKCkpOw0KLSAgICAgICAgaWYoKHBhcnNlUmVnaW9uSW5mbygmbV9yaSkgIT0gSkJJRzJfU1VDQ0VTUykNCi0gICAgICAgICAgICAgICAgfHwgKG1fcFN0cmVhbS0+cmVhZDFCeXRlKCZjRmxhZ3MpICE9IDApKSB7DQotICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiZ2VuZXJpYyByZWdpb24gc2VnbWVudCA6IGRhdGEgaGVhZGVyIHRvbyBzaG9ydC4iKTsNCi0gICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfVE9PX1NIT1JUOw0KLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fcmkuaGVpZ2h0IDwgMCB8fCBtX3JpLndpZHRoIDwgMCkgew0KLSAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoImdlbmVyaWMgcmVnaW9uIHNlZ21lbnQgOiB3cm9uZyBkYXRhLiIpOw0KLSAgICAgICAgICAgIG5SZXQgPSBKQklHMl9GQUlMRUQ7DQotICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICB9DQotICAgICAgICBtX3BHUkQtPkdCVyA9IG1fcmkud2lkdGg7DQotICAgICAgICBtX3BHUkQtPkdCSCA9IG1fcmkuaGVpZ2h0Ow0KLSAgICAgICAgbV9wR1JELT5NTVIgPSBjRmxhZ3MgJiAweDAxOw0KLSAgICAgICAgbV9wR1JELT5HQlRFTVBMQVRFID0gKGNGbGFncyA+PiAxKSAmIDB4MDM7DQotICAgICAgICBtX3BHUkQtPlRQR0RPTiA9IChjRmxhZ3MgPj4gMykgJiAweDAxOw0KLSAgICAgICAgaWYobV9wR1JELT5NTVIgPT0gMCkgew0KLSAgICAgICAgICAgIGlmKG1fcEdSRC0+R0JURU1QTEFURSA9PSAwKSB7DQotICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IDg7IGkrKykgew0KLSAgICAgICAgICAgICAgICAgICAgaWYobV9wU3RyZWFtLT5yZWFkMUJ5dGUoKEZYX0JZVEUqKSZtX3BHUkQtPkdCQVRbaV0pICE9IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJnZW5lcmljIHJlZ2lvbiBzZWdtZW50IDogZGF0YSBoZWFkZXIgdG9vIHNob3J0LiIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9UT09fU0hPUlQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCAyOyBpKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmKG1fcFN0cmVhbS0+cmVhZDFCeXRlKChGWF9CWVRFKikmbV9wR1JELT5HQkFUW2ldKSAhPSAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiZ2VuZXJpYyByZWdpb24gc2VnbWVudCA6IGRhdGEgaGVhZGVyIHRvbyBzaG9ydC4iKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfVE9PX1NIT1JUOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wR1JELT5VU0VTS0lQID0gMDsNCi0gICAgfQ0KLSAgICBwU2VnbWVudC0+bV9uUmVzdWx0VHlwZSA9IEpCSUcyX0lNQUdFX1BPSU5URVI7DQotICAgIGlmKG1fcEdSRC0+TU1SID09IDApIHsNCi0gICAgICAgIGR3VGVtcCA9IG1fcEdSRC0+R0JURU1QTEFURSA9PSAwID8gNjU1MzYgOiBtX3BHUkQtPkdCVEVNUExBVEUgPT0gMSA/IDgxOTIgOiAxMDI0Ow0KLSAgICAgICAgaWYobV9nYkNvbnRleHQgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIG1fZ2JDb250ZXh0ID0gKEpCaWcyQXJpdGhDdHgqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jKHNpemVvZihKQmlnMkFyaXRoQ3R4KSAqIGR3VGVtcCk7DQotICAgICAgICAgICAgSkJJRzJfbWVtc2V0KG1fZ2JDb250ZXh0LCAwLCBzaXplb2YoSkJpZzJBcml0aEN0eCkqZHdUZW1wKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKG1fcEFyaXRoRGVjb2RlciA9PSBOVUxMKSB7DQotICAgICAgICAgICAgSkJJRzJfQUxMT0MobV9wQXJpdGhEZWNvZGVyLCBDSkJpZzJfQXJpdGhEZWNvZGVyKG1fcFN0cmVhbSkpOw0KLSAgICAgICAgICAgIG1fUHJvY2Vzc2l2ZVN0YXR1cyA9IG1fcEdSRC0+U3RhcnRfZGVjb2RlX0FyaXRoKCZwU2VnbWVudC0+bV9SZXN1bHQuaW0sIG1fcEFyaXRoRGVjb2RlciwgbV9nYkNvbnRleHQsIHBQYXVzZSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIG1fUHJvY2Vzc2l2ZVN0YXR1cyA9IG1fcEdSRC0+Q29udGludWVfZGVjb2RlKHBQYXVzZSk7DQotICAgICAgICB9DQotICAgICAgICBPdXRwdXRCaXRtYXAocFNlZ21lbnQtPm1fUmVzdWx0LmltKTsNCi0gICAgICAgIGlmKG1fUHJvY2Vzc2l2ZVN0YXR1cyA9PSBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFKSB7DQotICAgICAgICAgICAgaWYocFNlZ21lbnQtPm1fY0ZsYWdzLnMudHlwZSAhPSAzNikgew0KLSAgICAgICAgICAgICAgICBpZighbV9iQnVmU3BlY2lmaWVkKSB7DQotICAgICAgICAgICAgICAgICAgICBKQmlnMlBhZ2VJbmZvICpwUGFnZUluZm8gPSBtX3BQYWdlSW5mb0xpc3QtPmdldExhc3QoKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmICgocFBhZ2VJbmZvLT5tX2JJc1N0cmlwZWQgPT0gMSkgJiYgKG1fcmkueSArIG1fcmkuaGVpZ2h0ID4gbV9wUGFnZS0+bV9uSGVpZ2h0KSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcFBhZ2UtPmV4cGFuZChtX3JpLnkgKyBtX3JpLmhlaWdodCwgKHBQYWdlSW5mby0+bV9jRmxhZ3MgJiA0KSA/IDEgOiAwKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBGWF9SRUNUIFJlY3QgPSBtX3BHUkQtPkdldFJlcGxhY2VSZWN0KCk7DQotICAgICAgICAgICAgICAgIG1fcFBhZ2UtPmNvbXBvc2VGcm9tKG1fcmkueCArIFJlY3QubGVmdCwgbV9yaS55ICsgUmVjdC50b3AsIHBTZWdtZW50LT5tX1Jlc3VsdC5pbSwgKEpCaWcyQ29tcG9zZU9wKShtX3JpLmZsYWdzICYgMHgwMyksICZSZWN0KTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuIEpCSUcyX1NVQ0NFU1M7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGRlbGV0ZSBtX3BBcml0aERlY29kZXI7DQotICAgICAgICAgICAgbV9wQXJpdGhEZWNvZGVyID0gTlVMTDsNCi0gICAgICAgICAgICBpZihwU2VnbWVudC0+bV9SZXN1bHQuaW0gPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUobV9nYkNvbnRleHQpOw0KLSAgICAgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7DQotICAgICAgICAgICAgICAgIG1fZ2JDb250ZXh0ID0gTlVMTDsNCi0gICAgICAgICAgICAgICAgbV9Qcm9jZXNzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfRVJST1I7DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUobV9nYkNvbnRleHQpOw0KLSAgICAgICAgICAgIG1fZ2JDb250ZXh0ID0gTlVMTDsNCi0gICAgICAgICAgICBtX3BTdHJlYW0tPmFsaWduQnl0ZSgpOw0KLSAgICAgICAgICAgIG1fcFN0cmVhbS0+b2Zmc2V0KDIpOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgRlhDT0RFQ19TVEFUVVMgc3RhdHVzID0gbV9wR1JELT5TdGFydF9kZWNvZGVfTU1SKCZwU2VnbWVudC0+bV9SZXN1bHQuaW0sIG1fcFN0cmVhbSwgcFBhdXNlKTsNCi0gICAgICAgIHdoaWxlKHN0YXR1cyA9PSBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFKSB7DQotICAgICAgICAgICAgbV9wR1JELT5Db250aW51ZV9kZWNvZGUocFBhdXNlKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKHBTZWdtZW50LT5tX1Jlc3VsdC5pbSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0ZFVEFMOw0KLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wU3RyZWFtLT5hbGlnbkJ5dGUoKTsNCi0gICAgfQ0KLSAgICBpZihwU2VnbWVudC0+bV9jRmxhZ3Mucy50eXBlICE9IDM2KSB7DQotICAgICAgICBpZighbV9iQnVmU3BlY2lmaWVkKSB7DQotICAgICAgICAgICAgSkJpZzJQYWdlSW5mbyAqcFBhZ2VJbmZvID0gbV9wUGFnZUluZm9MaXN0LT5nZXRMYXN0KCk7DQotICAgICAgICAgICAgaWYgKChwUGFnZUluZm8tPm1fYklzU3RyaXBlZCA9PSAxKSAmJiAobV9yaS55ICsgbV9yaS5oZWlnaHQgPiBtX3BQYWdlLT5tX25IZWlnaHQpKSB7DQotICAgICAgICAgICAgICAgIG1fcFBhZ2UtPmV4cGFuZChtX3JpLnkgKyBtX3JpLmhlaWdodCwgKHBQYWdlSW5mby0+bV9jRmxhZ3MgJiA0KSA/IDEgOiAwKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBGWF9SRUNUIFJlY3QgPSBtX3BHUkQtPkdldFJlcGxhY2VSZWN0KCk7DQotICAgICAgICBtX3BQYWdlLT5jb21wb3NlRnJvbShtX3JpLnggKyBSZWN0LmxlZnQsIG1fcmkueSArIFJlY3QudG9wLCBwU2VnbWVudC0+bV9SZXN1bHQuaW0sIChKQmlnMkNvbXBvc2VPcCkobV9yaS5mbGFncyAmIDB4MDMpLCAmUmVjdCk7DQotICAgICAgICBkZWxldGUgcFNlZ21lbnQtPm1fUmVzdWx0LmltOw0KLSAgICAgICAgcFNlZ21lbnQtPm1fUmVzdWx0LmltID0gTlVMTDsNCi0gICAgfQ0KLSAgICBkZWxldGUgbV9wR1JEOw0KLSAgICBtX3BHUkQgPSBOVUxMOw0KLSAgICByZXR1cm4gSkJJRzJfU1VDQ0VTUzsNCi1mYWlsZWQ6DQotICAgIGRlbGV0ZSBtX3BHUkQ7DQotICAgIG1fcEdSRCA9IE5VTEw7DQotICAgIHJldHVybiBuUmV0Ow0KLX0NCi0NCi1GWF9CT09MIENKQmlnMl9Db250ZXh0OjpwYXJzZUdlbmVyaWNSZWZpbmVtZW50UmVnaW9uKENKQmlnMl9TZWdtZW50ICpwU2VnbWVudCkNCi17DQotICAgIEZYX0RXT1JEIGR3VGVtcDsNCi0gICAgSkJpZzJSZWdpb25JbmZvIHJpOw0KLSAgICBDSkJpZzJfU2VnbWVudCAqcFNlZzsNCi0gICAgRlhfSU5UMzIgaSwgblJldDsNCi0gICAgRlhfQllURSBjRmxhZ3M7DQotICAgIEpCaWcyQXJpdGhDdHggKmdyQ29udGV4dDsNCi0gICAgQ0pCaWcyX0dSUkRQcm9jICpwR1JSRDsNCi0gICAgQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlcjsNCi0gICAgSkJJRzJfQUxMT0MocEdSUkQsIENKQmlnMl9HUlJEUHJvYygpKTsNCi0gICAgaWYoKHBhcnNlUmVnaW9uSW5mbygmcmkpICE9IEpCSUcyX1NVQ0NFU1MpDQotICAgICAgICAgICAgfHwgKG1fcFN0cmVhbS0+cmVhZDFCeXRlKCZjRmxhZ3MpICE9IDApKSB7DQotICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJnZW5lcmljIHJlZmluZW1lbnQgcmVnaW9uIHNlZ21lbnQgOiBkYXRhIGhlYWRlciB0b28gc2hvcnQuIik7DQotICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfVE9PX1NIT1JUOw0KLSAgICAgICAgZ290byBmYWlsZWQ7DQotICAgIH0NCi0gICAgcEdSUkQtPkdSVyA9IHJpLndpZHRoOw0KLSAgICBwR1JSRC0+R1JIID0gcmkuaGVpZ2h0Ow0KLSAgICBwR1JSRC0+R1JURU1QTEFURSA9IGNGbGFncyAmIDB4MDE7DQotICAgIHBHUlJELT5UUEdST04gPSAoY0ZsYWdzID4+IDEpICYgMHgwMTsNCi0gICAgaWYocEdSUkQtPkdSVEVNUExBVEUgPT0gMCkgew0KLSAgICAgICAgZm9yKGkgPSAwOyBpIDwgNDsgaSsrKSB7DQotICAgICAgICAgICAgaWYobV9wU3RyZWFtLT5yZWFkMUJ5dGUoKEZYX0JZVEUqKSZwR1JSRC0+R1JBVFtpXSkgIT0gMCkgew0KLSAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJnZW5lcmljIHJlZmluZW1lbnQgcmVnaW9uIHNlZ21lbnQgOiBkYXRhIGhlYWRlciB0b28gc2hvcnQuIik7DQotICAgICAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9UT09fU0hPUlQ7DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBwU2VnID0gTlVMTDsNCi0gICAgaWYocFNlZ21lbnQtPm1fblJlZmVycmVkX3RvX3NlZ21lbnRfY291bnQgPiAwKSB7DQotICAgICAgICBmb3IoaSA9IDA7IGkgPCBwU2VnbWVudC0+bV9uUmVmZXJyZWRfdG9fc2VnbWVudF9jb3VudDsgaSsrKSB7DQotICAgICAgICAgICAgcFNlZyA9IHRoaXMtPmZpbmRTZWdtZW50QnlOdW1iZXIocFNlZ21lbnQtPm1fcFJlZmVycmVkX3RvX3NlZ21lbnRfbnVtYmVyc1swXSk7DQotICAgICAgICAgICAgaWYocFNlZyA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoImdlbmVyaWMgcmVmaW5lbWVudCByZWdpb24gc2VnbWVudCA6IGNhbid0IGZpbmQgcmVmZXJlZCB0byBzZWdtZW50cyIpOw0KLSAgICAgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZigocFNlZy0+bV9jRmxhZ3Mucy50eXBlID09IDQpIHx8IChwU2VnLT5tX2NGbGFncy5zLnR5cGUgPT0gMjApDQotICAgICAgICAgICAgICAgICAgICB8fCAocFNlZy0+bV9jRmxhZ3Mucy50eXBlID09IDM2KSB8fCAocFNlZy0+bV9jRmxhZ3Mucy50eXBlID09IDQwKSkgew0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZihpID49IHBTZWdtZW50LT5tX25SZWZlcnJlZF90b19zZWdtZW50X2NvdW50KSB7DQotICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiZ2VuZXJpYyByZWZpbmVtZW50IHJlZ2lvbiBzZWdtZW50IDogY2FuJ3QgZmluZCByZWZlcmVkIHRvIGludGVybWVkaWF0ZSByZWdpb24iKTsNCi0gICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7DQotICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICB9DQotICAgICAgICBwR1JSRC0+R1JSRUZFUkVOQ0UgPSBwU2VnLT5tX1Jlc3VsdC5pbTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHBHUlJELT5HUlJFRkVSRU5DRSA9IG1fcFBhZ2U7DQotICAgIH0NCi0gICAgcEdSUkQtPkdSUkVGRVJFTkNFRFggPSAwOw0KLSAgICBwR1JSRC0+R1JSRUZFUkVOQ0VEWSA9IDA7DQotICAgIGR3VGVtcCA9IHBHUlJELT5HUlRFTVBMQVRFID8gMSA8PCAxMCA6IDEgPDwgMTM7DQotICAgIGdyQ29udGV4dCA9IChKQmlnMkFyaXRoQ3R4KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKEpCaWcyQXJpdGhDdHgpLCBkd1RlbXApOw0KLSAgICBKQklHMl9tZW1zZXQoZ3JDb250ZXh0LCAwLCBzaXplb2YoSkJpZzJBcml0aEN0eCkqZHdUZW1wKTsNCi0gICAgSkJJRzJfQUxMT0MocEFyaXRoRGVjb2RlciwgQ0pCaWcyX0FyaXRoRGVjb2RlcihtX3BTdHJlYW0pKTsNCi0gICAgcFNlZ21lbnQtPm1fblJlc3VsdFR5cGUgPSBKQklHMl9JTUFHRV9QT0lOVEVSOw0KLSAgICBwU2VnbWVudC0+bV9SZXN1bHQuaW0gPSBwR1JSRC0+ZGVjb2RlKHBBcml0aERlY29kZXIsIGdyQ29udGV4dCk7DQotICAgIGRlbGV0ZSBwQXJpdGhEZWNvZGVyOw0KLSAgICBpZihwU2VnbWVudC0+bV9SZXN1bHQuaW0gPT0gTlVMTCkgew0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKGdyQ29udGV4dCk7DQotICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7DQotICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgfQ0KLSAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoZ3JDb250ZXh0KTsNCi0gICAgbV9wU3RyZWFtLT5hbGlnbkJ5dGUoKTsNCi0gICAgbV9wU3RyZWFtLT5vZmZzZXQoMik7DQotICAgIGlmKHBTZWdtZW50LT5tX2NGbGFncy5zLnR5cGUgIT0gNDApIHsNCi0gICAgICAgIGlmKCFtX2JCdWZTcGVjaWZpZWQpIHsNCi0gICAgICAgICAgICBKQmlnMlBhZ2VJbmZvICpwUGFnZUluZm8gPSBtX3BQYWdlSW5mb0xpc3QtPmdldExhc3QoKTsNCi0gICAgICAgICAgICBpZiAoKHBQYWdlSW5mby0+bV9iSXNTdHJpcGVkID09IDEpICYmIChyaS55ICsgcmkuaGVpZ2h0ID4gbV9wUGFnZS0+bV9uSGVpZ2h0KSkgew0KLSAgICAgICAgICAgICAgICBtX3BQYWdlLT5leHBhbmQocmkueSArIHJpLmhlaWdodCwgKHBQYWdlSW5mby0+bV9jRmxhZ3MgJiA0KSA/IDEgOiAwKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBtX3BQYWdlLT5jb21wb3NlRnJvbShyaS54LCByaS55LCBwU2VnbWVudC0+bV9SZXN1bHQuaW0sIChKQmlnMkNvbXBvc2VPcCkocmkuZmxhZ3MgJiAweDAzKSk7DQotICAgICAgICBkZWxldGUgcFNlZ21lbnQtPm1fUmVzdWx0LmltOw0KLSAgICAgICAgcFNlZ21lbnQtPm1fUmVzdWx0LmltID0gTlVMTDsNCi0gICAgfQ0KLSAgICBkZWxldGUgcEdSUkQ7DQotICAgIHJldHVybiBKQklHMl9TVUNDRVNTOw0KLWZhaWxlZDoNCi0gICAgZGVsZXRlIHBHUlJEOw0KLSAgICByZXR1cm4gblJldDsNCi19DQotRlhfQk9PTCBDSkJpZzJfQ29udGV4dDo6cGFyc2VUYWJsZShDSkJpZzJfU2VnbWVudCAqcFNlZ21lbnQpDQotew0KLSAgICBwU2VnbWVudC0+bV9uUmVzdWx0VHlwZSA9IEpCSUcyX0hVRkZNQU5fVEFCTEVfUE9JTlRFUjsNCi0gICAgSkJJRzJfQUxMT0MocFNlZ21lbnQtPm1fUmVzdWx0Lmh0LCBDSkJpZzJfSHVmZm1hblRhYmxlKG1fcFN0cmVhbSkpOw0KLSAgICBpZighcFNlZ21lbnQtPm1fUmVzdWx0Lmh0LT5pc09LKCkpIHsNCi0gICAgICAgIGRlbGV0ZSBwU2VnbWVudC0+bV9SZXN1bHQuaHQ7DQotICAgICAgICBwU2VnbWVudC0+bV9SZXN1bHQuaHQgPSBOVUxMOw0KLSAgICAgICAgcmV0dXJuIEpCSUcyX0VSUk9SX0ZFVEFMOw0KLSAgICB9DQotICAgIG1fcFN0cmVhbS0+YWxpZ25CeXRlKCk7DQotICAgIHJldHVybiBKQklHMl9TVUNDRVNTOw0KLX0NCi1GWF9JTlQzMiBDSkJpZzJfQ29udGV4dDo6cGFyc2VSZWdpb25JbmZvKEpCaWcyUmVnaW9uSW5mbyAqcFJJKQ0KLXsNCi0gICAgaWYoKG1fcFN0cmVhbS0+cmVhZEludGVnZXIoKEZYX0RXT1JEKikmcFJJLT53aWR0aCkgIT0gMCkNCi0gICAgICAgICAgICB8fCAobV9wU3RyZWFtLT5yZWFkSW50ZWdlcigoRlhfRFdPUkQqKSZwUkktPmhlaWdodCkgIT0gMCkNCi0gICAgICAgICAgICB8fCAobV9wU3RyZWFtLT5yZWFkSW50ZWdlcigoRlhfRFdPUkQqKSZwUkktPngpICE9IDApDQotICAgICAgICAgICAgfHwgKG1fcFN0cmVhbS0+cmVhZEludGVnZXIoKEZYX0RXT1JEKikmcFJJLT55KSAhPSAwKQ0KLSAgICAgICAgICAgIHx8IChtX3BTdHJlYW0tPnJlYWQxQnl0ZSgmcFJJLT5mbGFncykgIT0gMCkpIHsNCi0gICAgICAgIHJldHVybiBKQklHMl9FUlJPUl9UT09fU0hPUlQ7DQotICAgIH0NCi0gICAgcmV0dXJuIEpCSUcyX1NVQ0NFU1M7DQotfQ0KLUpCaWcySHVmZm1hbkNvZGUgKkNKQmlnMl9Db250ZXh0OjpkZWNvZGVTeW1ib2xJREh1ZmZtYW5UYWJsZShDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtLA0KLSAgICAgICAgRlhfRFdPUkQgU0JOVU1TWU1TKQ0KLXsNCi0gICAgSkJpZzJIdWZmbWFuQ29kZSAqU0JTWU1DT0RFUzsNCi0gICAgRlhfSU5UMzIgcnVuY29kZXNbMzVdLCBydW5jb2Rlc19sZW5bMzVdLCBydW5jb2RlOw0KLSAgICBGWF9JTlQzMiBpLCBqLCBuVGVtcCwgblZhbCwgbkJpdHM7DQotICAgIEZYX0lOVDMyIHJ1bjsNCi0gICAgU0JTWU1DT0RFUyA9IChKQmlnMkh1ZmZtYW5Db2RlKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKEpCaWcySHVmZm1hbkNvZGUpLCBTQk5VTVNZTVMpOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgMzU7IGkgKyspIHsNCi0gICAgICAgIGlmKHBTdHJlYW0tPnJlYWROQml0cyg0LCAmcnVuY29kZXNfbGVuW2ldKSAhPSAwKSB7DQotICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaHVmZm1hbl9hc3NpZ25fY29kZShydW5jb2RlcywgcnVuY29kZXNfbGVuLCAzNSk7DQotICAgIGkgPSAwOw0KLSAgICB3aGlsZShpIDwgKGludClTQk5VTVNZTVMpIHsNCi0gICAgICAgIG5WYWwgPSAwOw0KLSAgICAgICAgbkJpdHMgPSAwOw0KLSAgICAgICAgZm9yKDs7KSB7DQotICAgICAgICAgICAgaWYocFN0cmVhbS0+cmVhZDFCaXQoJm5UZW1wKSAhPSAwKSB7DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBuVmFsID0gKG5WYWwgPDwgMSkgfCBuVGVtcDsNCi0gICAgICAgICAgICBuQml0cyArKzsNCi0gICAgICAgICAgICBmb3IoaiA9IDA7IGogPCAzNTsgaisrKSB7DQotICAgICAgICAgICAgICAgIGlmKChuQml0cyA9PSBydW5jb2Rlc19sZW5bal0pICYmIChuVmFsID09IHJ1bmNvZGVzW2pdKSkgew0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYoaiA8IDM1KSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHJ1bmNvZGUgPSBqOw0KLSAgICAgICAgaWYocnVuY29kZSA8IDMyKSB7DQotICAgICAgICAgICAgU0JTWU1DT0RFU1tpXS5jb2RlbGVuID0gcnVuY29kZTsNCi0gICAgICAgICAgICBydW4gPSAwOw0KLSAgICAgICAgfSBlbHNlIGlmKHJ1bmNvZGUgPT0gMzIpIHsNCi0gICAgICAgICAgICBpZihwU3RyZWFtLT5yZWFkTkJpdHMoMiwgJm5UZW1wKSAhPSAwKSB7DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBydW4gPSBuVGVtcCArIDM7DQotICAgICAgICB9IGVsc2UgaWYocnVuY29kZSA9PSAzMykgew0KLSAgICAgICAgICAgIGlmKHBTdHJlYW0tPnJlYWROQml0cygzLCAmblRlbXApICE9IDApIHsNCi0gICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJ1biA9IG5UZW1wICsgMzsNCi0gICAgICAgIH0gZWxzZSBpZihydW5jb2RlID09IDM0KSB7DQotICAgICAgICAgICAgaWYocFN0cmVhbS0+cmVhZE5CaXRzKDcsICZuVGVtcCkgIT0gMCkgew0KLSAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcnVuID0gblRlbXAgKyAxMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKHJ1biA+IDApIHsNCi0gICAgICAgICAgICBpZiAoaSArIHJ1biA+IChpbnQpU0JOVU1TWU1TKSB7DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBmb3IoaiA9IDA7IGogPCBydW47IGorKykgew0KLSAgICAgICAgICAgICAgICBpZihydW5jb2RlID09IDMyICYmIGkgPiAwKSB7DQotICAgICAgICAgICAgICAgICAgICBTQlNZTUNPREVTW2kgKyBqXS5jb2RlbGVuID0gU0JTWU1DT0RFU1tpIC0gMV0uY29kZWxlbjsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIFNCU1lNQ09ERVNbaSArIGpdLmNvZGVsZW4gPSAwOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGkgKz0gcnVuOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpICsrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGh1ZmZtYW5fYXNzaWduX2NvZGUoU0JTWU1DT0RFUywgU0JOVU1TWU1TKTsNCi0gICAgcmV0dXJuIFNCU1lNQ09ERVM7DQotZmFpbGVkOg0KLSAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0JTWU1DT0RFUyk7DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi12b2lkIENKQmlnMl9Db250ZXh0OjpodWZmbWFuX2Fzc2lnbl9jb2RlKGludCogQ09ERVMsIGludCogUFJFRkxFTiwgaW50IE5URU1QKQ0KLXsNCi0gICAgaW50IENVUkxFTiwgTEVOTUFYLCBDVVJDT0RFLCBDVVJURU1QLCBpOw0KLSAgICBpbnQgKkxFTkNPVU5UOw0KLSAgICBpbnQgKkZJUlNUQ09ERTsNCi0gICAgTEVOTUFYID0gMDsNCi0gICAgZm9yKGkgPSAwOyBpIDwgTlRFTVA7IGkrKykgew0KLSAgICAgICAgaWYoUFJFRkxFTltpXSA+IExFTk1BWCkgew0KLSAgICAgICAgICAgIExFTk1BWCA9IFBSRUZMRU5baV07DQotICAgICAgICB9DQotICAgIH0NCi0gICAgTEVOQ09VTlQgPSAoaW50KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKGludCksIChMRU5NQVggKyAxKSk7DQotICAgIEpCSUcyX21lbXNldChMRU5DT1VOVCwgMCwgc2l6ZW9mKGludCkgKiAoTEVOTUFYICsgMSkpOw0KLSAgICBGSVJTVENPREUgPSAoaW50KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKGludCksIChMRU5NQVggKyAxKSk7DQotICAgIGZvcihpID0gMDsgaSA8IE5URU1QOyBpKyspIHsNCi0gICAgICAgIExFTkNPVU5UW1BSRUZMRU5baV1dICsrOw0KLSAgICB9DQotICAgIENVUkxFTiA9IDE7DQotICAgIEZJUlNUQ09ERVswXSA9IDA7DQotICAgIExFTkNPVU5UWzBdICA9IDA7DQotICAgIHdoaWxlKENVUkxFTiA8PSBMRU5NQVgpIHsNCi0gICAgICAgIEZJUlNUQ09ERVtDVVJMRU5dID0gKEZJUlNUQ09ERVtDVVJMRU4gLSAxXSArIExFTkNPVU5UW0NVUkxFTiAtIDFdKSA8PCAxOw0KLSAgICAgICAgQ1VSQ09ERSA9IEZJUlNUQ09ERVtDVVJMRU5dOw0KLSAgICAgICAgQ1VSVEVNUCA9IDA7DQotICAgICAgICB3aGlsZShDVVJURU1QIDwgTlRFTVApIHsNCi0gICAgICAgICAgICBpZihQUkVGTEVOW0NVUlRFTVBdID09IENVUkxFTikgew0KLSAgICAgICAgICAgICAgICBDT0RFU1tDVVJURU1QXSA9IENVUkNPREU7DQotICAgICAgICAgICAgICAgIENVUkNPREUgPSBDVVJDT0RFICsgMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgQ1VSVEVNUCA9IENVUlRFTVAgKyAxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1VSTEVOID0gQ1VSTEVOICsgMTsNCi0gICAgfQ0KLSAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoTEVOQ09VTlQpOw0KLSAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoRklSU1RDT0RFKTsNCi19DQotdm9pZCBDSkJpZzJfQ29udGV4dDo6aHVmZm1hbl9hc3NpZ25fY29kZShKQmlnMkh1ZmZtYW5Db2RlICpTQlNZTUNPREVTLCBpbnQgTlRFTVApDQotew0KLSAgICBpbnQgQ1VSTEVOLCBMRU5NQVgsIENVUkNPREUsIENVUlRFTVAsIGk7DQotICAgIGludCAqTEVOQ09VTlQ7DQotICAgIGludCAqRklSU1RDT0RFOw0KLSAgICBMRU5NQVggPSAwOw0KLSAgICBmb3IoaSA9IDA7IGkgPCBOVEVNUDsgaSsrKSB7DQotICAgICAgICBpZihTQlNZTUNPREVTW2ldLmNvZGVsZW4gPiBMRU5NQVgpIHsNCi0gICAgICAgICAgICBMRU5NQVggPSBTQlNZTUNPREVTW2ldLmNvZGVsZW47DQotICAgICAgICB9DQotICAgIH0NCi0gICAgTEVOQ09VTlQgPSAoaW50KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKGludCksIChMRU5NQVggKyAxKSk7DQotICAgIEpCSUcyX21lbXNldChMRU5DT1VOVCwgMCwgc2l6ZW9mKGludCkgKiAoTEVOTUFYICsgMSkpOw0KLSAgICBGSVJTVENPREUgPSAoaW50KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKGludCksIChMRU5NQVggKyAxKSk7DQotICAgIGZvcihpID0gMDsgaSA8IE5URU1QOyBpKyspIHsNCi0gICAgICAgIExFTkNPVU5UW1NCU1lNQ09ERVNbaV0uY29kZWxlbl0gKys7DQotICAgIH0NCi0gICAgQ1VSTEVOID0gMTsNCi0gICAgRklSU1RDT0RFWzBdID0gMDsNCi0gICAgTEVOQ09VTlRbMF0gID0gMDsNCi0gICAgd2hpbGUoQ1VSTEVOIDw9IExFTk1BWCkgew0KLSAgICAgICAgRklSU1RDT0RFW0NVUkxFTl0gPSAoRklSU1RDT0RFW0NVUkxFTiAtIDFdICsgTEVOQ09VTlRbQ1VSTEVOIC0gMV0pIDw8IDE7DQotICAgICAgICBDVVJDT0RFID0gRklSU1RDT0RFW0NVUkxFTl07DQotICAgICAgICBDVVJURU1QID0gMDsNCi0gICAgICAgIHdoaWxlKENVUlRFTVAgPCBOVEVNUCkgew0KLSAgICAgICAgICAgIGlmKFNCU1lNQ09ERVNbQ1VSVEVNUF0uY29kZWxlbiA9PSBDVVJMRU4pIHsNCi0gICAgICAgICAgICAgICAgU0JTWU1DT0RFU1tDVVJURU1QXS5jb2RlID0gQ1VSQ09ERTsNCi0gICAgICAgICAgICAgICAgQ1VSQ09ERSA9IENVUkNPREUgKyAxOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBDVVJURU1QID0gQ1VSVEVNUCArIDE7DQotICAgICAgICB9DQotICAgICAgICBDVVJMRU4gPSBDVVJMRU4gKyAxOw0KLSAgICB9DQotICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShMRU5DT1VOVCk7DQotICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShGSVJTVENPREUpOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiSkJpZzJfQ29udGV4dC5oIgordm9pZCBPdXRwdXRCaXRtYXAoQ0pCaWcyX0ltYWdlKiBwSW1hZ2UpCit7CisgICAgaWYoIXBJbWFnZSkgeworICAgICAgICByZXR1cm47CisgICAgfQorfQorQ0pCaWcyX0NvbnRleHQgKkNKQmlnMl9Db250ZXh0OjpDcmVhdGVDb250ZXh0KENKQmlnMl9Nb2R1bGUgKnBNb2R1bGUsIEZYX0JZVEUgKnBHbG9iYWxEYXRhLCBGWF9EV09SRCBkd0dsb2JhbExlbmd0aCwKKyAgICAgICAgRlhfQllURSAqcERhdGEsIEZYX0RXT1JEIGR3TGVuZ3RoLCBGWF9JTlQzMiBuU3RyZWFtVHlwZSwgSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgcmV0dXJuIG5ldyhwTW9kdWxlKSBDSkJpZzJfQ29udGV4dChwR2xvYmFsRGF0YSwgZHdHbG9iYWxMZW5ndGgsIHBEYXRhLCBkd0xlbmd0aCwgblN0cmVhbVR5cGUsIHBQYXVzZSk7Cit9Cit2b2lkIENKQmlnMl9Db250ZXh0OjpEZXN0cm95Q29udGV4dChDSkJpZzJfQ29udGV4dCAqcENvbnRleHQpCit7CisgICAgaWYocENvbnRleHQpIHsKKyAgICAgICAgZGVsZXRlIHBDb250ZXh0OworICAgIH0KK30KK0NKQmlnMl9Db250ZXh0OjpDSkJpZzJfQ29udGV4dChGWF9CWVRFICpwR2xvYmFsRGF0YSwgRlhfRFdPUkQgZHdHbG9iYWxMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSAqcERhdGEsIEZYX0RXT1JEIGR3TGVuZ3RoLCBGWF9JTlQzMiBuU3RyZWFtVHlwZSwgSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgaWYocEdsb2JhbERhdGEgJiYgKGR3R2xvYmFsTGVuZ3RoID4gMCkpIHsKKyAgICAgICAgSkJJRzJfQUxMT0MobV9wR2xvYmFsQ29udGV4dCwgQ0pCaWcyX0NvbnRleHQoTlVMTCwgMCwgcEdsb2JhbERhdGEsIGR3R2xvYmFsTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICBKQklHMl9FTUJFRF9TVFJFQU0sIHBQYXVzZSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcEdsb2JhbENvbnRleHQgPSBOVUxMOworICAgIH0KKyAgICBKQklHMl9BTExPQyhtX3BTdHJlYW0sIENKQmlnMl9CaXRTdHJlYW0ocERhdGEsIGR3TGVuZ3RoKSk7CisgICAgbV9uU3RyZWFtVHlwZSA9IG5TdHJlYW1UeXBlOworICAgIG1fblN0YXRlID0gSkJJRzJfT1VUX09GX1BBR0U7CisgICAgSkJJRzJfQUxMT0MobV9wU2VnbWVudExpc3QsIENKQmlnMl9MaXN0PENKQmlnMl9TZWdtZW50Pik7CisgICAgSkJJRzJfQUxMT0MobV9wUGFnZUluZm9MaXN0LCBDSkJpZzJfTGlzdDxKQmlnMlBhZ2VJbmZvPigxKSk7CisgICAgbV9wUGFnZSA9IE5VTEw7CisgICAgbV9iQnVmU3BlY2lmaWVkID0gRkFMU0U7CisgICAgbV9wUGF1c2UgPSBwUGF1c2U7CisgICAgbV9uU2VnbWVudERlY29kZWQgPSAwOworICAgIG1fUGF1c2VTdGVwID0gMTA7CisgICAgbV9wQXJpdGhEZWNvZGVyID0gTlVMTDsKKyAgICBtX3BHUkQgPSBOVUxMOworICAgIG1fZ2JDb250ZXh0ID0gTlVMTDsKKyAgICBtX3BTZWdtZW50ID0gTlVMTDsKKyAgICBtX2R3T2Zmc2V0ID0gMDsKKyAgICBtX1Byb2Nlc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19GUkFNRV9SRUFEWTsKK30KK0NKQmlnMl9Db250ZXh0Ojp+Q0pCaWcyX0NvbnRleHQoKQoreworICAgIGlmKG1fcEFyaXRoRGVjb2RlcikgeworICAgICAgICBkZWxldGUgbV9wQXJpdGhEZWNvZGVyOworICAgIH0KKyAgICBtX3BBcml0aERlY29kZXIgPSBOVUxMOworICAgIGlmKG1fcEdSRCkgeworICAgICAgICBkZWxldGUgbV9wR1JEOworICAgIH0KKyAgICBtX3BHUkQgPSBOVUxMOworICAgIGlmKG1fZ2JDb250ZXh0KSB7CisgICAgICAgIGRlbGV0ZSBtX2diQ29udGV4dDsKKyAgICB9CisgICAgbV9nYkNvbnRleHQgPSBOVUxMOworICAgIGlmKG1fcEdsb2JhbENvbnRleHQpIHsKKyAgICAgICAgZGVsZXRlIG1fcEdsb2JhbENvbnRleHQ7CisgICAgfQorICAgIG1fcEdsb2JhbENvbnRleHQgPSBOVUxMOworICAgIGlmKG1fcFBhZ2VJbmZvTGlzdCkgeworICAgICAgICBkZWxldGUgbV9wUGFnZUluZm9MaXN0OworICAgIH0KKyAgICBtX3BQYWdlSW5mb0xpc3QgPSBOVUxMOworICAgIGlmKG1fYkJ1ZlNwZWNpZmllZCAmJiBtX3BQYWdlKSB7CisgICAgICAgIGRlbGV0ZSBtX3BQYWdlOworICAgIH0KKyAgICBtX3BQYWdlID0gTlVMTDsKKyAgICBpZihtX3BTdHJlYW0pIHsKKyAgICAgICAgZGVsZXRlIG1fcFN0cmVhbTsKKyAgICB9CisgICAgbV9wU3RyZWFtID0gTlVMTDsKKyAgICBpZihtX3BTZWdtZW50TGlzdCkgeworICAgICAgICBkZWxldGUgbV9wU2VnbWVudExpc3Q7CisgICAgfQorICAgIG1fcFNlZ21lbnRMaXN0ID0gTlVMTDsKK30KK0ZYX0lOVDMyIENKQmlnMl9Db250ZXh0OjpkZWNvZGVGaWxlKElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIEZYX0JZVEUgY0ZsYWdzOworICAgIEZYX0RXT1JEIGR3VGVtcDsKKyAgICBjb25zdCBGWF9CWVRFIGZpbGVJRFtdID0gezB4OTcsIDB4NEEsIDB4NDIsIDB4MzIsIDB4MEQsIDB4MEEsIDB4MUEsIDB4MEF9OworICAgIEZYX0lOVDMyIG5SZXQ7CisgICAgaWYobV9wU3RyZWFtLT5nZXRCeXRlTGVmdCgpIDwgOCkgeworICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJmaWxlIGhlYWRlciB0b28gc2hvcnQuIik7CisgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9UT09fU0hPUlQ7CisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKyAgICBpZihKQklHMl9tZW1jbXAobV9wU3RyZWFtLT5nZXRQb2ludGVyKCksIGZpbGVJRCwgOCkgIT0gMCkgeworICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJub3QgamJpZzIgZmlsZSIpOworICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRklMRV9GT1JNQVQ7CisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKyAgICBtX3BTdHJlYW0tPm9mZnNldCg4KTsKKyAgICBpZihtX3BTdHJlYW0tPnJlYWQxQnl0ZSgmY0ZsYWdzKSAhPSAwKSB7CisgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoImZpbGUgaGVhZGVyIHRvbyBzaG9ydC4iKTsKKyAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX1RPT19TSE9SVDsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIGlmKCEoY0ZsYWdzICYgMHgwMikpIHsKKyAgICAgICAgaWYobV9wU3RyZWFtLT5yZWFkSW50ZWdlcigmZHdUZW1wKSAhPSAwKSB7CisgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJmaWxlIGhlYWRlciB0b28gc2hvcnQuIik7CisgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfVE9PX1NIT1JUOworICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIH0KKyAgICAgICAgaWYoZHdUZW1wID4gMCkgeworICAgICAgICAgICAgZGVsZXRlIG1fcFBhZ2VJbmZvTGlzdDsKKyAgICAgICAgICAgIEpCSUcyX0FMTE9DKG1fcFBhZ2VJbmZvTGlzdCwgQ0pCaWcyX0xpc3Q8SkJpZzJQYWdlSW5mbz4oZHdUZW1wKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYoY0ZsYWdzICYgMHgwMSkgeworICAgICAgICBtX25TdHJlYW1UeXBlID0gSkJJRzJfU1FVRU5USUFMX1NUUkVBTTsKKyAgICAgICAgcmV0dXJuIGRlY29kZV9TcXVlbnRpYWxPcmduYXphdGlvbihwUGF1c2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fblN0cmVhbVR5cGUgPSBKQklHMl9SQU5ET01fU1RSRUFNOworICAgICAgICByZXR1cm4gZGVjb2RlX1JhbmRvbU9yZ25hemF0aW9uX0ZpcnN0UGFnZShwUGF1c2UpOworICAgIH0KK2ZhaWxlZDoKKyAgICByZXR1cm4gblJldDsKK30KK0ZYX0lOVDMyIENKQmlnMl9Db250ZXh0OjpkZWNvZGVfU3F1ZW50aWFsT3JnbmF6YXRpb24oSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgRlhfSU5UMzIgblJldDsKKyAgICBpZihtX3BTdHJlYW0tPmdldEJ5dGVMZWZ0KCkgPiAwKSB7CisgICAgICAgIHdoaWxlKG1fcFN0cmVhbS0+Z2V0Qnl0ZUxlZnQoKSA+PSBKQklHMl9NSU5fU0VHTUVOVF9TSVpFKSB7CisgICAgICAgICAgICBpZihtX3BTZWdtZW50ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhtX3BTZWdtZW50LCBDSkJpZzJfU2VnbWVudCgpKTsKKyAgICAgICAgICAgICAgICBuUmV0ID0gcGFyc2VTZWdtZW50SGVhZGVyKG1fcFNlZ21lbnQpOworICAgICAgICAgICAgICAgIGlmKG5SZXQgIT0gSkJJRzJfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICBkZWxldGUgbV9wU2VnbWVudDsKKyAgICAgICAgICAgICAgICAgICAgbV9wU2VnbWVudCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuUmV0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2R3T2Zmc2V0ID0gbV9wU3RyZWFtLT5nZXRPZmZzZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5SZXQgPSBwYXJzZVNlZ21lbnREYXRhKG1fcFNlZ21lbnQsIHBQYXVzZSk7CisgICAgICAgICAgICBpZihtX1Byb2Nlc3NpdmVTdGF0dXMgID09IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUUpIHsKKyAgICAgICAgICAgICAgICBtX1Byb2Nlc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFOworICAgICAgICAgICAgICAgIG1fUGF1c2VTdGVwID0gMjsKKyAgICAgICAgICAgICAgICByZXR1cm4gSkJJRzJfU1VDQ0VTUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKChuUmV0ID09IEpCSUcyX0VORF9PRl9QQUdFKSB8fCAoblJldCA9PSBKQklHMl9FTkRfT0ZfRklMRSkpIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgbV9wU2VnbWVudDsKKyAgICAgICAgICAgICAgICBtX3BTZWdtZW50ID0gTlVMTDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSBpZihuUmV0ICE9IEpCSUcyX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgbV9wU2VnbWVudDsKKyAgICAgICAgICAgICAgICBtX3BTZWdtZW50ID0gTlVMTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gblJldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcFNlZ21lbnRMaXN0LT5hZGRJdGVtKG1fcFNlZ21lbnQpOworICAgICAgICAgICAgaWYobV9wU2VnbWVudC0+bV9kd0RhdGFfbGVuZ3RoICE9IDB4ZmZmZmZmZmYpIHsKKyAgICAgICAgICAgICAgICBtX2R3T2Zmc2V0ID0gbV9kd09mZnNldCArIG1fcFNlZ21lbnQtPm1fZHdEYXRhX2xlbmd0aDsKKyAgICAgICAgICAgICAgICBtX3BTdHJlYW0tPnNldE9mZnNldChtX2R3T2Zmc2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9wU3RyZWFtLT5vZmZzZXQoNCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBPdXRwdXRCaXRtYXAobV9wUGFnZSk7CisgICAgICAgICAgICBtX3BTZWdtZW50ID0gTlVMTDsKKyAgICAgICAgICAgIGlmKG1fcFN0cmVhbS0+Z2V0Qnl0ZUxlZnQoKSA+IDAgJiYgbV9wUGFnZSAmJiBwUGF1c2UgJiYgcFBhdXNlLT5OZWVkVG9QYXVzZU5vdygpKSB7CisgICAgICAgICAgICAgICAgbV9Qcm9jZXNzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRTsKKyAgICAgICAgICAgICAgICBtX1BhdXNlU3RlcCA9IDI7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpCSUcyX1NVQ0NFU1M7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gSkJJRzJfRU5EX09GX0ZJTEU7CisgICAgfQorICAgIHJldHVybiBKQklHMl9TVUNDRVNTOworfQorRlhfSU5UMzIgQ0pCaWcyX0NvbnRleHQ6OmRlY29kZV9FbWJlZE9yZ25hemF0aW9uKElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIHJldHVybiBkZWNvZGVfU3F1ZW50aWFsT3JnbmF6YXRpb24ocFBhdXNlKTsKK30KK0ZYX0lOVDMyIENKQmlnMl9Db250ZXh0OjpkZWNvZGVfUmFuZG9tT3JnbmF6YXRpb25fRmlyc3RQYWdlKElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIENKQmlnMl9TZWdtZW50ICpwU2VnbWVudDsKKyAgICBGWF9JTlQzMiBuUmV0OworICAgIHdoaWxlKG1fcFN0cmVhbS0+Z2V0Qnl0ZUxlZnQoKSA+IEpCSUcyX01JTl9TRUdNRU5UX1NJWkUpIHsKKyAgICAgICAgSkJJRzJfQUxMT0MocFNlZ21lbnQsIENKQmlnMl9TZWdtZW50KCkpOworICAgICAgICBuUmV0ID0gcGFyc2VTZWdtZW50SGVhZGVyKHBTZWdtZW50KTsKKyAgICAgICAgaWYoblJldCAhPSBKQklHMl9TVUNDRVNTKSB7CisgICAgICAgICAgICBkZWxldGUgcFNlZ21lbnQ7CisgICAgICAgICAgICByZXR1cm4gblJldDsKKyAgICAgICAgfSBlbHNlIGlmKHBTZWdtZW50LT5tX2NGbGFncy5zLnR5cGUgPT0gNTEpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwU2VnbWVudDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1fcFNlZ21lbnRMaXN0LT5hZGRJdGVtKHBTZWdtZW50KTsKKyAgICAgICAgaWYocFBhdXNlICYmIG1fcFBhdXNlICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgeworICAgICAgICAgICAgbV9QYXVzZVN0ZXAgPSAzOworICAgICAgICAgICAgbV9Qcm9jZXNzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRTsKKyAgICAgICAgICAgIHJldHVybiBKQklHMl9TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIG1fblNlZ21lbnREZWNvZGVkID0gMDsKKyAgICByZXR1cm4gZGVjb2RlX1JhbmRvbU9yZ25hemF0aW9uKHBQYXVzZSk7Cit9CitGWF9JTlQzMiBDSkJpZzJfQ29udGV4dDo6ZGVjb2RlX1JhbmRvbU9yZ25hemF0aW9uKElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIEZYX0lOVDMyIG5SZXQ7CisgICAgZm9yKDsgbV9uU2VnbWVudERlY29kZWQgPCBtX3BTZWdtZW50TGlzdC0+Z2V0TGVuZ3RoKCk7IG1fblNlZ21lbnREZWNvZGVkKyspIHsKKyAgICAgICAgblJldCA9IHBhcnNlU2VnbWVudERhdGEobV9wU2VnbWVudExpc3QtPmdldEF0KG1fblNlZ21lbnREZWNvZGVkKSwgcFBhdXNlKTsKKyAgICAgICAgaWYoKG5SZXQgPT0gSkJJRzJfRU5EX09GX1BBR0UpIHx8IChuUmV0ID09IEpCSUcyX0VORF9PRl9GSUxFKSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSBpZihuUmV0ICE9IEpCSUcyX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHJldHVybiBuUmV0OworICAgICAgICB9CisgICAgICAgIGlmKG1fcFBhZ2UgJiYgcFBhdXNlICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgeworICAgICAgICAgICAgbV9QYXVzZVN0ZXAgPSA0OworICAgICAgICAgICAgbV9Qcm9jZXNzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRTsKKyAgICAgICAgICAgIHJldHVybiBKQklHMl9TVUNDRVNTOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBKQklHMl9TVUNDRVNTOworfQorRlhfSU5UMzIgQ0pCaWcyX0NvbnRleHQ6OmdldEZpcnN0UGFnZShGWF9CWVRFICpwQnVmLCBGWF9JTlQzMiB3aWR0aCwgRlhfSU5UMzIgaGVpZ2h0LCBGWF9JTlQzMiBzdHJpZGUsIElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIEZYX0lOVDMyIG5SZXQgPSAwOworICAgIGlmKG1fcEdsb2JhbENvbnRleHQpIHsKKyAgICAgICAgblJldCA9IG1fcEdsb2JhbENvbnRleHQtPmRlY29kZV9FbWJlZE9yZ25hemF0aW9uKHBQYXVzZSk7CisgICAgICAgIGlmKG5SZXQgIT0gSkJJRzJfU1VDQ0VTUykgeworICAgICAgICAgICAgbV9Qcm9jZXNzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gblJldDsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX2JGaXJzdFBhZ2UgPSBUUlVFOworICAgIG1fUGF1c2VTdGVwID0gMDsKKyAgICBpZihtX3BQYWdlKSB7CisgICAgICAgIGRlbGV0ZSBtX3BQYWdlOworICAgIH0KKyAgICBKQklHMl9BTExPQyhtX3BQYWdlLCBDSkJpZzJfSW1hZ2Uod2lkdGgsIGhlaWdodCwgc3RyaWRlLCBwQnVmKSk7CisgICAgbV9iQnVmU3BlY2lmaWVkID0gVFJVRTsKKyAgICBpZihtX3BQYWdlICYmIHBQYXVzZSAmJiBwUGF1c2UtPk5lZWRUb1BhdXNlTm93KCkpIHsKKyAgICAgICAgbV9QYXVzZVN0ZXAgPSAxOworICAgICAgICBtX1Byb2Nlc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFOworICAgICAgICByZXR1cm4gblJldDsKKyAgICB9CisgICAgaW50IHJldCA9IENvbnRpbnVlKHBQYXVzZSk7CisgICAgcmV0dXJuIHJldDsKK30KK0ZYX0lOVDMyIENKQmlnMl9Db250ZXh0OjpDb250aW51ZShJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBtX1Byb2Nlc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfUkVBRFk7CisgICAgRlhfSU5UMzIgblJldDsKKyAgICBpZihtX1BhdXNlU3RlcCA8PSAxKSB7CisgICAgICAgIHN3aXRjaChtX25TdHJlYW1UeXBlKSB7CisgICAgICAgICAgICBjYXNlIEpCSUcyX0ZJTEVfU1RSRUFNOgorICAgICAgICAgICAgICAgIG5SZXQgPSBkZWNvZGVGaWxlKHBQYXVzZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEpCSUcyX1NRVUVOVElBTF9TVFJFQU06CisgICAgICAgICAgICAgICAgblJldCA9IGRlY29kZV9TcXVlbnRpYWxPcmduYXphdGlvbihwUGF1c2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKQklHMl9SQU5ET01fU1RSRUFNOgorICAgICAgICAgICAgICAgIGlmKG1fYkZpcnN0UGFnZSkgeworICAgICAgICAgICAgICAgICAgICBuUmV0ID0gZGVjb2RlX1JhbmRvbU9yZ25hemF0aW9uX0ZpcnN0UGFnZShwUGF1c2UpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG5SZXQgPSBkZWNvZGVfUmFuZG9tT3JnbmF6YXRpb24ocFBhdXNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEpCSUcyX0VNQkVEX1NUUkVBTToKKyAgICAgICAgICAgICAgICBuUmV0ID0gZGVjb2RlX0VtYmVkT3JnbmF6YXRpb24ocFBhdXNlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbV9Qcm9jZXNzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfRVJST1I7CisgICAgICAgICAgICAgICAgcmV0dXJuIEpCSUcyX0VSUk9SX1NUUkVBTV9UWVBFOworICAgICAgICB9CisgICAgfSBlbHNlIGlmKG1fUGF1c2VTdGVwID09IDIpIHsKKyAgICAgICAgblJldCA9IGRlY29kZV9TcXVlbnRpYWxPcmduYXphdGlvbihwUGF1c2UpOworICAgIH0gZWxzZSBpZihtX1BhdXNlU3RlcCA9PSAzKSB7CisgICAgICAgIG5SZXQgPSBkZWNvZGVfUmFuZG9tT3JnbmF6YXRpb25fRmlyc3RQYWdlKHBQYXVzZSk7CisgICAgfSBlbHNlIGlmKG1fUGF1c2VTdGVwID09IDQpIHsKKyAgICAgICAgblJldCA9IGRlY29kZV9SYW5kb21PcmduYXphdGlvbihwUGF1c2UpOworICAgIH0gZWxzZSBpZihtX1BhdXNlU3RlcCA9PSA1KSB7CisgICAgICAgIG1fUHJvY2Vzc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7CisgICAgICAgIHJldHVybiBKQklHMl9TVUNDRVNTOworICAgIH0KKyAgICBpZihtX1Byb2Nlc3NpdmVTdGF0dXMgPT0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRSkgeworICAgICAgICByZXR1cm4gblJldDsKKyAgICB9CisgICAgbV9QYXVzZVN0ZXAgPSA1OworICAgIGlmKCFtX2JCdWZTcGVjaWZpZWQgJiYgblJldCA9PSBKQklHMl9TVUNDRVNTKSB7CisgICAgICAgIG1fUHJvY2Vzc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7CisgICAgICAgIHJldHVybiBKQklHMl9TVUNDRVNTOworICAgIH0KKyAgICBpZihuUmV0ID09IEpCSUcyX1NVQ0NFU1MpIHsKKyAgICAgICAgbV9Qcm9jZXNzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsKKyAgICB9IGVsc2UgeworICAgICAgICBtX1Byb2Nlc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19FUlJPUjsKKyAgICB9CisgICAgcmV0dXJuIG5SZXQ7Cit9CitGWF9JTlQzMiBDSkJpZzJfQ29udGV4dDo6Z2V0TmV4dFBhZ2UoRlhfQllURSAqcEJ1ZiwgRlhfSU5UMzIgd2lkdGgsIEZYX0lOVDMyIGhlaWdodCwgRlhfSU5UMzIgc3RyaWRlLCBJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBGWF9JTlQzMiBuUmV0ID0gSkJJRzJfRVJST1JfU1RSRUFNX1RZUEU7CisgICAgbV9iRmlyc3RQYWdlID0gRkFMU0U7CisgICAgbV9QYXVzZVN0ZXAgPSAwOworICAgIGlmKG1fcFBhZ2UpIHsKKyAgICAgICAgZGVsZXRlIG1fcFBhZ2U7CisgICAgfQorICAgIEpCSUcyX0FMTE9DKG1fcFBhZ2UsIENKQmlnMl9JbWFnZSh3aWR0aCwgaGVpZ2h0LCBzdHJpZGUsIHBCdWYpKTsKKyAgICBtX2JCdWZTcGVjaWZpZWQgPSBUUlVFOworICAgIGlmKG1fcFBhZ2UgJiYgcFBhdXNlICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgeworICAgICAgICBtX1BhdXNlU3RlcCA9IDE7CisgICAgICAgIG1fUHJvY2Vzc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUU7CisgICAgICAgIHJldHVybiBuUmV0OworICAgIH0KKyAgICByZXR1cm4gQ29udGludWUocFBhdXNlKTsKKyAgICBzd2l0Y2gobV9uU3RyZWFtVHlwZSkgeworICAgICAgICBjYXNlIEpCSUcyX0ZJTEVfU1RSRUFNOgorICAgICAgICAgICAgblJldCA9IGRlY29kZUZpbGUocFBhdXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEpCSUcyX1NRVUVOVElBTF9TVFJFQU06CisgICAgICAgICAgICBuUmV0ID0gZGVjb2RlX1NxdWVudGlhbE9yZ25hemF0aW9uKHBQYXVzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBKQklHMl9SQU5ET01fU1RSRUFNOgorICAgICAgICAgICAgblJldCA9IGRlY29kZV9SYW5kb21PcmduYXphdGlvbihwUGF1c2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSkJJRzJfRU1CRURfU1RSRUFNOgorICAgICAgICAgICAgblJldCA9IGRlY29kZV9FbWJlZE9yZ25hemF0aW9uKHBQYXVzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBKQklHMl9FUlJPUl9TVFJFQU1fVFlQRTsKKyAgICB9CisgICAgcmV0dXJuIG5SZXQ7Cit9CitGWF9JTlQzMiBDSkJpZzJfQ29udGV4dDo6Z2V0Rmlyc3RQYWdlKENKQmlnMl9JbWFnZSAqKmltYWdlLCBJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBGWF9JTlQzMiBuUmV0OworICAgIG1fYkZpcnN0UGFnZSA9IFRSVUU7CisgICAgbV9QYXVzZVN0ZXAgPSAwOworICAgIGlmKG1fcEdsb2JhbENvbnRleHQpIHsKKyAgICAgICAgblJldCA9IG1fcEdsb2JhbENvbnRleHQtPmRlY29kZV9FbWJlZE9yZ25hemF0aW9uKHBQYXVzZSk7CisgICAgICAgIGlmKG5SZXQgIT0gSkJJRzJfU1VDQ0VTUykgeworICAgICAgICAgICAgcmV0dXJuIG5SZXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9iQnVmU3BlY2lmaWVkID0gRkFMU0U7CisgICAgcmV0dXJuIENvbnRpbnVlKHBQYXVzZSk7Cit9CitGWF9JTlQzMiBDSkJpZzJfQ29udGV4dDo6Z2V0TmV4dFBhZ2UoQ0pCaWcyX0ltYWdlICoqaW1hZ2UsIElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIEZYX0lOVDMyIG5SZXQ7CisgICAgbV9iQnVmU3BlY2lmaWVkID0gRkFMU0U7CisgICAgbV9iRmlyc3RQYWdlID0gRkFMU0U7CisgICAgbV9QYXVzZVN0ZXAgPSAwOworICAgIHN3aXRjaChtX25TdHJlYW1UeXBlKSB7CisgICAgICAgIGNhc2UgSkJJRzJfRklMRV9TVFJFQU06CisgICAgICAgICAgICBuUmV0ID0gZGVjb2RlRmlsZShwUGF1c2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSkJJRzJfU1FVRU5USUFMX1NUUkVBTToKKyAgICAgICAgICAgIG5SZXQgPSBkZWNvZGVfU3F1ZW50aWFsT3JnbmF6YXRpb24ocFBhdXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEpCSUcyX1JBTkRPTV9TVFJFQU06CisgICAgICAgICAgICBuUmV0ID0gZGVjb2RlX1JhbmRvbU9yZ25hemF0aW9uKHBQYXVzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBKQklHMl9FTUJFRF9TVFJFQU06CisgICAgICAgICAgICBuUmV0ID0gZGVjb2RlX0VtYmVkT3JnbmF6YXRpb24ocFBhdXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEpCSUcyX0VSUk9SX1NUUkVBTV9UWVBFOworICAgIH0KKyAgICBpZihuUmV0ID09IEpCSUcyX1NVQ0NFU1MpIHsKKyAgICAgICAgKmltYWdlID0gbV9wUGFnZTsKKyAgICAgICAgbV9wUGFnZSA9IE5VTEw7CisgICAgICAgIHJldHVybiBKQklHMl9TVUNDRVNTOworICAgIH0KKyAgICByZXR1cm4gblJldDsKK30KK0NKQmlnMl9TZWdtZW50ICpDSkJpZzJfQ29udGV4dDo6ZmluZFNlZ21lbnRCeU51bWJlcihGWF9EV09SRCBkd051bWJlcikKK3sKKyAgICBDSkJpZzJfU2VnbWVudCAqcFNlZzsKKyAgICBGWF9JTlQzMiBpOworICAgIGlmKG1fcEdsb2JhbENvbnRleHQpIHsKKyAgICAgICAgcFNlZyA9IG1fcEdsb2JhbENvbnRleHQtPmZpbmRTZWdtZW50QnlOdW1iZXIoZHdOdW1iZXIpOworICAgICAgICBpZihwU2VnKSB7CisgICAgICAgICAgICByZXR1cm4gcFNlZzsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IoaSA9IDA7IGkgPCBtX3BTZWdtZW50TGlzdC0+Z2V0TGVuZ3RoKCk7IGkrKykgeworICAgICAgICBwU2VnID0gbV9wU2VnbWVudExpc3QtPmdldEF0KGkpOworICAgICAgICBpZihwU2VnLT5tX2R3TnVtYmVyID09IGR3TnVtYmVyKSB7CisgICAgICAgICAgICByZXR1cm4gcFNlZzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK0NKQmlnMl9TZWdtZW50ICpDSkJpZzJfQ29udGV4dDo6ZmluZFJlZmVycmVkU2VnbWVudEJ5VHlwZUFuZEluZGV4KENKQmlnMl9TZWdtZW50ICpwU2VnbWVudCwKKyAgICAgICAgRlhfQllURSBjVHlwZSwgRlhfSU5UMzIgbkluZGV4KQoreworICAgIENKQmlnMl9TZWdtZW50ICpwU2VnOworICAgIEZYX0lOVDMyIGksIGNvdW50OworICAgIGNvdW50ID0gMDsKKyAgICBmb3IoaSA9IDA7IGkgPCBwU2VnbWVudC0+bV9uUmVmZXJyZWRfdG9fc2VnbWVudF9jb3VudDsgaSsrKSB7CisgICAgICAgIHBTZWcgPSBmaW5kU2VnbWVudEJ5TnVtYmVyKHBTZWdtZW50LT5tX3BSZWZlcnJlZF90b19zZWdtZW50X251bWJlcnNbaV0pOworICAgICAgICBpZihwU2VnICYmIHBTZWctPm1fY0ZsYWdzLnMudHlwZSA9PSBjVHlwZSkgeworICAgICAgICAgICAgaWYoY291bnQgPT0gbkluZGV4KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBTZWc7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvdW50ICsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorRlhfSU5UMzIgQ0pCaWcyX0NvbnRleHQ6OnBhcnNlU2VnbWVudEhlYWRlcihDSkJpZzJfU2VnbWVudCAqcFNlZ21lbnQpCit7CisgICAgRlhfQllURSAgY1NTaXplLCBjUFNpemU7CisgICAgRlhfQllURSBjVGVtcDsKKyAgICBGWF9XT1JEIHdUZW1wOworICAgIEZYX0RXT1JEIGR3VGVtcDsKKyAgICBpZigobV9wU3RyZWFtLT5yZWFkSW50ZWdlcigmcFNlZ21lbnQtPm1fZHdOdW1iZXIpICE9IDApCisgICAgICAgICAgICB8fCAobV9wU3RyZWFtLT5yZWFkMUJ5dGUoJnBTZWdtZW50LT5tX2NGbGFncy5jKSAhPSAwKSkgeworICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9CisgICAgY1RlbXAgPSBtX3BTdHJlYW0tPmdldEN1ckJ5dGUoKTsKKyAgICBpZigoY1RlbXAgPj4gNSkgPT0gNykgeworICAgICAgICBpZihtX3BTdHJlYW0tPnJlYWRJbnRlZ2VyKChGWF9EV09SRCopJnBTZWdtZW50LT5tX25SZWZlcnJlZF90b19zZWdtZW50X2NvdW50KSAhPSAwKSB7CisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgfQorICAgICAgICBwU2VnbWVudC0+bV9uUmVmZXJyZWRfdG9fc2VnbWVudF9jb3VudCAmPSAweDFmZmZmZmZmOworICAgICAgICBpZiAocFNlZ21lbnQtPm1fblJlZmVycmVkX3RvX3NlZ21lbnRfY291bnQgPiBKQklHMl9NQVhfUkVGRVJSRURfU0VHTUVOVF9DT1VOVCkgeworICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiVG9vIG1hbnkgcmVmZXJyZWQgc2VnbWVudHMuIik7CisgICAgICAgICAgICByZXR1cm4gSkJJRzJfRVJST1JfTElNSVQ7CisgICAgICAgIH0KKyAgICAgICAgZHdUZW1wID0gNSArIDQgKyAocFNlZ21lbnQtPm1fblJlZmVycmVkX3RvX3NlZ21lbnRfY291bnQgKyAxKSAvIDg7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYobV9wU3RyZWFtLT5yZWFkMUJ5dGUoJmNUZW1wKSAhPSAwKSB7CisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgfQorICAgICAgICBwU2VnbWVudC0+bV9uUmVmZXJyZWRfdG9fc2VnbWVudF9jb3VudCA9IGNUZW1wID4+IDU7CisgICAgICAgIGR3VGVtcCA9IDUgKyAxOworICAgIH0KKyAgICBjU1NpemUgPSBwU2VnbWVudC0+bV9kd051bWJlciA+IDY1NTM2ID8gNCA6IHBTZWdtZW50LT5tX2R3TnVtYmVyID4gMjU2ID8gMiA6IDE7CisgICAgY1BTaXplID0gcFNlZ21lbnQtPm1fY0ZsYWdzLnMucGFnZV9hc3NvY2lhdGlvbl9zaXplID8gNCA6IDE7CisgICAgaWYocFNlZ21lbnQtPm1fblJlZmVycmVkX3RvX3NlZ21lbnRfY291bnQpIHsKKyAgICAgICAgcFNlZ21lbnQtPm1fcFJlZmVycmVkX3RvX3NlZ21lbnRfbnVtYmVycyA9IChGWF9EV09SRCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKAorICAgICAgICAgICAgICAgICAgICBzaXplb2YoRlhfRFdPUkQpLCBwU2VnbWVudC0+bV9uUmVmZXJyZWRfdG9fc2VnbWVudF9jb3VudCk7CisgICAgICAgIGZvcihGWF9JTlQzMiBpID0gMDsgaSA8IHBTZWdtZW50LT5tX25SZWZlcnJlZF90b19zZWdtZW50X2NvdW50OyBpKyspIHsKKyAgICAgICAgICAgIHN3aXRjaChjU1NpemUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgIGlmKG1fcFN0cmVhbS0+cmVhZDFCeXRlKCZjVGVtcCkgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcFNlZ21lbnQtPm1fcFJlZmVycmVkX3RvX3NlZ21lbnRfbnVtYmVyc1tpXSA9IGNUZW1wOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgIGlmKG1fcFN0cmVhbS0+cmVhZFNob3J0SW50ZWdlcigmd1RlbXApICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBTZWdtZW50LT5tX3BSZWZlcnJlZF90b19zZWdtZW50X251bWJlcnNbaV0gPSB3VGVtcDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICBpZihtX3BTdHJlYW0tPnJlYWRJbnRlZ2VyKCZkd1RlbXApICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBTZWdtZW50LT5tX3BSZWZlcnJlZF90b19zZWdtZW50X251bWJlcnNbaV0gPSBkd1RlbXA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHBTZWdtZW50LT5tX3BSZWZlcnJlZF90b19zZWdtZW50X251bWJlcnNbaV0gPj0gcFNlZ21lbnQtPm1fZHdOdW1iZXIpIHsKKyAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJUaGUgcmVmZXJyZWQgc2VnbWVudCBudW1iZXIgaXMgZ3JlYXRlciB0aGFuIHRoaXMgc2VnbWVudCBudW1iZXIuIik7CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYoY1BTaXplID09IDEpIHsKKyAgICAgICAgaWYobV9wU3RyZWFtLT5yZWFkMUJ5dGUoJmNUZW1wKSAhPSAwKSB7CisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgfQorICAgICAgICBwU2VnbWVudC0+bV9kd1BhZ2VfYXNzb2NpYXRpb24gPSBjVGVtcDsKKyAgICB9IGVsc2UgeworICAgICAgICBpZihtX3BTdHJlYW0tPnJlYWRJbnRlZ2VyKCZwU2VnbWVudC0+bV9kd1BhZ2VfYXNzb2NpYXRpb24pICE9IDApIHsKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisgICAgfQorICAgIGlmKG1fcFN0cmVhbS0+cmVhZEludGVnZXIoJnBTZWdtZW50LT5tX2R3RGF0YV9sZW5ndGgpICE9IDApIHsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIHBTZWdtZW50LT5tX3BEYXRhID0gbV9wU3RyZWFtLT5nZXRQb2ludGVyKCk7CisgICAgcFNlZ21lbnQtPm1fU3RhdGUgPSBKQklHMl9TRUdNRU5UX0RBVEFfVU5QQVJTRUQ7CisgICAgcmV0dXJuIEpCSUcyX1NVQ0NFU1M7CitmYWlsZWQ6CisgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiaGVhZGVyIHRvbyBzaG9ydC4iKTsKKyAgICByZXR1cm4gSkJJRzJfRVJST1JfVE9PX1NIT1JUOworfQorRlhfSU5UMzIgQ0pCaWcyX0NvbnRleHQ6OnBhcnNlU2VnbWVudERhdGEoQ0pCaWcyX1NlZ21lbnQgKnBTZWdtZW50LCBJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBGWF9JTlQzMiByZXQgPSBQcm9jZXNzaXZlUGFyc2VTZWdtZW50RGF0YShwU2VnbWVudCwgcFBhdXNlKTsKKyAgICB3aGlsZShtX1Byb2Nlc3NpdmVTdGF0dXMgID09IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUUgJiYgbV9wU3RyZWFtLT5nZXRCeXRlTGVmdCgpID4gMCkgeworICAgICAgICByZXQgPSBQcm9jZXNzaXZlUGFyc2VTZWdtZW50RGF0YShwU2VnbWVudCwgcFBhdXNlKTsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KK0ZYX0lOVDMyIENKQmlnMl9Db250ZXh0OjpQcm9jZXNzaXZlUGFyc2VTZWdtZW50RGF0YShDSkJpZzJfU2VnbWVudCAqcFNlZ21lbnQsIElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIHN3aXRjaChwU2VnbWVudC0+bV9jRmxhZ3Mucy50eXBlKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIHJldHVybiBwYXJzZVN5bWJvbERpY3QocFNlZ21lbnQsIHBQYXVzZSk7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgY2FzZSA2OgorICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICBpZihtX25TdGF0ZSA9PSBKQklHMl9PVVRfT0ZfUEFHRSkgeworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkMjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGV4dFJlZ2lvbihwU2VnbWVudCk7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgMTY6CisgICAgICAgICAgICByZXR1cm4gcGFyc2VQYXR0ZXJuRGljdChwU2VnbWVudCwgcFBhdXNlKTsKKyAgICAgICAgY2FzZSAyMDoKKyAgICAgICAgY2FzZSAyMjoKKyAgICAgICAgY2FzZSAyMzoKKyAgICAgICAgICAgIGlmKG1fblN0YXRlID09IEpCSUcyX09VVF9PRl9QQUdFKSB7CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWQyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VIYWxmdG9uZVJlZ2lvbihwU2VnbWVudCwgcFBhdXNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSAzNjoKKyAgICAgICAgY2FzZSAzODoKKyAgICAgICAgY2FzZSAzOToKKyAgICAgICAgICAgIGlmKG1fblN0YXRlID09IEpCSUcyX09VVF9PRl9QQUdFKSB7CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWQyOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VHZW5lcmljUmVnaW9uKHBTZWdtZW50LCBwUGF1c2UpOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIDQwOgorICAgICAgICBjYXNlIDQyOgorICAgICAgICBjYXNlIDQzOgorICAgICAgICAgICAgaWYobV9uU3RhdGUgPT0gSkJJRzJfT1VUX09GX1BBR0UpIHsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUdlbmVyaWNSZWZpbmVtZW50UmVnaW9uKHBTZWdtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSA0ODogeworICAgICAgICAgICAgICAgIEZYX1dPUkQgd1RlbXA7CisgICAgICAgICAgICAgICAgSkJpZzJQYWdlSW5mbyAqcFBhZ2VJbmZvOworICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKHBQYWdlSW5mbywgSkJpZzJQYWdlSW5mbyk7CisgICAgICAgICAgICAgICAgaWYoKG1fcFN0cmVhbS0+cmVhZEludGVnZXIoJnBQYWdlSW5mby0+bV9kd1dpZHRoKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgKG1fcFN0cmVhbS0+cmVhZEludGVnZXIoJnBQYWdlSW5mby0+bV9kd0hlaWdodCkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IChtX3BTdHJlYW0tPnJlYWRJbnRlZ2VyKCZwUGFnZUluZm8tPm1fZHdSZXNvbHV0aW9uWCkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IChtX3BTdHJlYW0tPnJlYWRJbnRlZ2VyKCZwUGFnZUluZm8tPm1fZHdSZXNvbHV0aW9uWSkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IChtX3BTdHJlYW0tPnJlYWQxQnl0ZSgmcFBhZ2VJbmZvLT5tX2NGbGFncykgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IChtX3BTdHJlYW0tPnJlYWRTaG9ydEludGVnZXIoJndUZW1wKSAhPSAwKSkgeworICAgICAgICAgICAgICAgICAgICBkZWxldGUgcFBhZ2VJbmZvOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBQYWdlSW5mby0+bV9iSXNTdHJpcGVkID0gKCh3VGVtcCA+PiAxNSkgJiAxKSA/IDEgOiAwOworICAgICAgICAgICAgICAgIHBQYWdlSW5mby0+bV93TWF4U3RyaXBlU2l6ZSA9IHdUZW1wICYgMHg3ZmZmOworICAgICAgICAgICAgICAgIGlmKChwUGFnZUluZm8tPm1fZHdIZWlnaHQgPT0gMHhmZmZmZmZmZikgJiYgKHBQYWdlSW5mby0+bV9iSXNTdHJpcGVkICE9IDEpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfV2FybigicGFnZSBoZWlnaHQgPSAweGZmZmZmZmZmIGJ1ZiBzdHJpcGUgZmllbGQgaXMgMCIpOworICAgICAgICAgICAgICAgICAgICBwUGFnZUluZm8tPm1fYklzU3RyaXBlZCA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmKCFtX2JCdWZTcGVjaWZpZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYobV9wUGFnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG1fcFBhZ2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYocFBhZ2VJbmZvLT5tX2R3SGVpZ2h0ID09IDB4ZmZmZmZmZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKG1fcFBhZ2UsIENKQmlnMl9JbWFnZShwUGFnZUluZm8tPm1fZHdXaWR0aCwgcFBhZ2VJbmZvLT5tX3dNYXhTdHJpcGVTaXplKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhtX3BQYWdlLCBDSkJpZzJfSW1hZ2UocFBhZ2VJbmZvLT5tX2R3V2lkdGgsIHBQYWdlSW5mby0+bV9kd0hlaWdodCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fcFBhZ2UtPmZpbGwoKHBQYWdlSW5mby0+bV9jRmxhZ3MgJiA0KSA/IDEgOiAwKTsKKyAgICAgICAgICAgICAgICBtX3BQYWdlSW5mb0xpc3QtPmFkZEl0ZW0ocFBhZ2VJbmZvKTsKKyAgICAgICAgICAgICAgICBtX25TdGF0ZSA9IEpCSUcyX0lOX1BBR0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OToKKyAgICAgICAgICAgIG1fblN0YXRlID0gSkJJRzJfT1VUX09GX1BBR0U7CisgICAgICAgICAgICByZXR1cm4gSkJJRzJfRU5EX09GX1BBR0U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA1MDoKKyAgICAgICAgICAgIG1fcFN0cmVhbS0+b2Zmc2V0KHBTZWdtZW50LT5tX2R3RGF0YV9sZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNTE6CisgICAgICAgICAgICByZXR1cm4gSkJJRzJfRU5EX09GX0ZJTEU7CisgICAgICAgIGNhc2UgNTI6CisgICAgICAgICAgICBtX3BTdHJlYW0tPm9mZnNldChwU2VnbWVudC0+bV9kd0RhdGFfbGVuZ3RoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDUzOgorICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGFibGUocFNlZ21lbnQpOworICAgICAgICBjYXNlIDYyOgorICAgICAgICAgICAgbV9wU3RyZWFtLT5vZmZzZXQocFNlZ21lbnQtPm1fZHdEYXRhX2xlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gSkJJRzJfU1VDQ0VTUzsKK2ZhaWxlZDE6CisgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic2VnbWVudCBkYXRhIHRvbyBzaG9ydC4iKTsKKyAgICByZXR1cm4gSkJJRzJfRVJST1JfVE9PX1NIT1JUOworZmFpbGVkMjoKKyAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzZWdtZW50IHN5bnRheCBlcnJvci4iKTsKKyAgICByZXR1cm4gSkJJRzJfRVJST1JfRkVUQUw7Cit9CitGWF9JTlQzMiBDSkJpZzJfQ29udGV4dDo6cGFyc2VTeW1ib2xEaWN0KENKQmlnMl9TZWdtZW50ICpwU2VnbWVudCwgSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgRlhfRFdPUkQgZHdUZW1wOworICAgIEZYX1dPUkQgd0ZsYWdzOworICAgIEZYX0JZVEUgY1NESFVGRkRILCBjU0RIVUZGRFcsIGNTREhVRkZCTVNJWkUsIGNTREhVRkZBR0dJTlNUOworICAgIENKQmlnMl9IdWZmbWFuVGFibGUgKlRhYmxlX0IxID0gTlVMTCwgKlRhYmxlX0IyID0gTlVMTCwgKlRhYmxlX0IzID0gTlVMTCwgKlRhYmxlX0I0ID0gTlVMTCwgKlRhYmxlX0I1ID0gTlVMTDsKKyAgICBGWF9JTlQzMiBpLCBuSW5kZXgsIG5SZXQ7CisgICAgQ0pCaWcyX1NlZ21lbnQgKnBTZWcgPSBOVUxMLCAqcExSU2VnID0gTlVMTDsKKyAgICBGWF9CT09MIGJVc2VkOworICAgIENKQmlnMl9JbWFnZSAqKiBTRElOU1lNUyA9IE5VTEw7CisgICAgQ0pCaWcyX1NERFByb2MgKnBTeW1ib2xEaWN0RGVjb2RlcjsKKyAgICBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQgPSBOVUxMLCAqZ3JDb250ZXh0ID0gTlVMTDsKKyAgICBDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyOworICAgIEpCSUcyX0FMTE9DKHBTeW1ib2xEaWN0RGVjb2RlciwgQ0pCaWcyX1NERFByb2MoKSk7CisgICAgaWYobV9wU3RyZWFtLT5yZWFkU2hvcnRJbnRlZ2VyKCZ3RmxhZ3MpICE9IDApIHsKKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgc2VnbWVudCA6IGRhdGEgaGVhZGVyIHRvbyBzaG9ydC4iKTsKKyAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX1RPT19TSE9SVDsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RIVUZGID0gd0ZsYWdzICYgMHgwMDAxOworICAgIHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RSRUZBR0cgPSAod0ZsYWdzID4+IDEpICYgMHgwMDAxOworICAgIHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RURU1QTEFURSA9ICh3RmxhZ3MgPj4gMTApICYgMHgwMDAzOworICAgIHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RSVEVNUExBVEUgPSAod0ZsYWdzID4+IDEyKSAmIDB4MDAwMzsKKyAgICBjU0RIVUZGREggPSAod0ZsYWdzID4+IDIpICYgMHgwMDAzOworICAgIGNTREhVRkZEVyA9ICh3RmxhZ3MgPj4gNCkgJiAweDAwMDM7CisgICAgY1NESFVGRkJNU0laRSA9ICh3RmxhZ3MgPj4gNikgJiAweDAwMDE7CisgICAgY1NESFVGRkFHR0lOU1QgPSAod0ZsYWdzID4+IDcpICYgMHgwMDAxOworICAgIGlmKHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RIVUZGID09IDApIHsKKyAgICAgICAgaWYocFN5bWJvbERpY3REZWNvZGVyLT5TRFRFTVBMQVRFID09IDApIHsKKyAgICAgICAgICAgIGR3VGVtcCA9IDg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkd1RlbXAgPSAyOworICAgICAgICB9CisgICAgICAgIGZvcihpID0gMDsgaSA8IChGWF9JTlQzMilkd1RlbXA7IGkrKykgeworICAgICAgICAgICAgaWYobV9wU3RyZWFtLT5yZWFkMUJ5dGUoKEZYX0JZVEUqKSZwU3ltYm9sRGljdERlY29kZXItPlNEQVRbaV0pICE9IDApIHsKKyAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBzZWdtZW50IDogZGF0YSBoZWFkZXIgdG9vIHNob3J0LiIpOworICAgICAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9UT09fU0hPUlQ7CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYoKHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RSRUZBR0cgPT0gMSkgJiYgKHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RSVEVNUExBVEUgPT0gMCkpIHsKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgICAgICBpZihtX3BTdHJlYW0tPnJlYWQxQnl0ZSgoRlhfQllURSopJnBTeW1ib2xEaWN0RGVjb2Rlci0+U0RSQVRbaV0pICE9IDApIHsKKyAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBzZWdtZW50IDogZGF0YSBoZWFkZXIgdG9vIHNob3J0LiIpOworICAgICAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9UT09fU0hPUlQ7CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYoKG1fcFN0cmVhbS0+cmVhZEludGVnZXIoJnBTeW1ib2xEaWN0RGVjb2Rlci0+U0ROVU1FWFNZTVMpICE9IDApCisgICAgICAgICAgICB8fCAobV9wU3RyZWFtLT5yZWFkSW50ZWdlcigmcFN5bWJvbERpY3REZWNvZGVyLT5TRE5VTU5FV1NZTVMpICE9IDApKSB7CisgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInN5bWJvbCBkaWN0aW9uYXJ5IHNlZ21lbnQgOiBkYXRhIGhlYWRlciB0b28gc2hvcnQuIik7CisgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9UT09fU0hPUlQ7CisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKyAgICBpZiAocFN5bWJvbERpY3REZWNvZGVyLT5TRE5VTUVYU1lNUyA+IEpCSUcyX01BWF9FWFBPUlRfU1lTTUJPTFMKKyAgICAgICAgICAgIHx8IHBTeW1ib2xEaWN0RGVjb2Rlci0+U0ROVU1ORVdTWU1TID4gSkJJRzJfTUFYX05FV19TWVNNQk9MUykgeworICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBzZWdtZW50IDogdG9vIG1hbnkgZXhwb3J0L25ldyBzeW1ib2xzLiIpOworICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfTElNSVQ7CisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKyAgICBmb3IoaSA9IDA7IGkgPCBwU2VnbWVudC0+bV9uUmVmZXJyZWRfdG9fc2VnbWVudF9jb3VudDsgaSsrKSB7CisgICAgICAgIGlmKCFmaW5kU2VnbWVudEJ5TnVtYmVyKHBTZWdtZW50LT5tX3BSZWZlcnJlZF90b19zZWdtZW50X251bWJlcnNbaV0pKSB7CisgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBzZWdtZW50IDogY2FuJ3QgZmluZCByZWZlcmVkIHRvIHNlZ21lbnRzIik7CisgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7CisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgfQorICAgIH0KKyAgICBwU3ltYm9sRGljdERlY29kZXItPlNETlVNSU5TWU1TID0gMDsKKyAgICBmb3IoaSA9IDA7IGkgPCBwU2VnbWVudC0+bV9uUmVmZXJyZWRfdG9fc2VnbWVudF9jb3VudDsgaSsrKSB7CisgICAgICAgIHBTZWcgPSBmaW5kU2VnbWVudEJ5TnVtYmVyKHBTZWdtZW50LT5tX3BSZWZlcnJlZF90b19zZWdtZW50X251bWJlcnNbaV0pOworICAgICAgICBpZihwU2VnLT5tX2NGbGFncy5zLnR5cGUgPT0gMCkgeworICAgICAgICAgICAgcFN5bWJvbERpY3REZWNvZGVyLT5TRE5VTUlOU1lNUyArPSBwU2VnLT5tX1Jlc3VsdC5zZC0+U0ROVU1FWFNZTVM7CisgICAgICAgICAgICBwTFJTZWcgPSBwU2VnOworICAgICAgICB9CisgICAgfQorICAgIGlmKHBTeW1ib2xEaWN0RGVjb2Rlci0+U0ROVU1JTlNZTVMgPT0gMCkgeworICAgICAgICBTRElOU1lNUyA9IE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU0RJTlNZTVMgPSAoQ0pCaWcyX0ltYWdlKiopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoQ0pCaWcyX0ltYWdlKiksIHBTeW1ib2xEaWN0RGVjb2Rlci0+U0ROVU1JTlNZTVMpOworICAgICAgICBkd1RlbXAgPSAwOworICAgICAgICBmb3IoaSA9IDA7IGkgPCBwU2VnbWVudC0+bV9uUmVmZXJyZWRfdG9fc2VnbWVudF9jb3VudDsgaSsrKSB7CisgICAgICAgICAgICBwU2VnID0gZmluZFNlZ21lbnRCeU51bWJlcihwU2VnbWVudC0+bV9wUmVmZXJyZWRfdG9fc2VnbWVudF9udW1iZXJzW2ldKTsKKyAgICAgICAgICAgIGlmKHBTZWctPm1fY0ZsYWdzLnMudHlwZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgSkJJRzJfbWVtY3B5KFNESU5TWU1TICsgZHdUZW1wLCBwU2VnLT5tX1Jlc3VsdC5zZC0+U0RFWFNZTVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBTZWctPm1fUmVzdWx0LnNkLT5TRE5VTUVYU1lNUyAqIHNpemVvZihDSkJpZzJfSW1hZ2UqKSk7CisgICAgICAgICAgICAgICAgZHdUZW1wICs9IHBTZWctPm1fUmVzdWx0LnNkLT5TRE5VTUVYU1lNUzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBwU3ltYm9sRGljdERlY29kZXItPlNESU5TWU1TID0gU0RJTlNZTVM7CisgICAgaWYocFN5bWJvbERpY3REZWNvZGVyLT5TREhVRkYgPT0gMSkgeworICAgICAgICBpZigoY1NESFVGRkRIID09IDIpIHx8IChjU0RIVUZGRFcgPT0gMikpIHsKKyAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInN5bWJvbCBkaWN0aW9uYXJ5IHNlZ21lbnQgOiBTREhVRkZESD0yIG9yIFNESFVGRkRXPTIgaXMgbm90IHBlcm1pdHRlZC4iKTsKKyAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9GRVRBTDsKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisgICAgICAgIG5JbmRleCA9IDA7CisgICAgICAgIGlmKGNTREhVRkZESCA9PSAwKSB7CisgICAgICAgICAgICBKQklHMl9BTExPQyhUYWJsZV9CNCwgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjQsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0I0KSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CNCkpOworICAgICAgICAgICAgcFN5bWJvbERpY3REZWNvZGVyLT5TREhVRkZESCA9IFRhYmxlX0I0OworICAgICAgICB9IGVsc2UgaWYoY1NESFVGRkRIID09IDEpIHsKKyAgICAgICAgICAgIEpCSUcyX0FMTE9DKFRhYmxlX0I1LCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CNSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjUpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0I1KSk7CisgICAgICAgICAgICBwU3ltYm9sRGljdERlY29kZXItPlNESFVGRkRIID0gVGFibGVfQjU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwU2VnID0gZmluZFJlZmVycmVkU2VnbWVudEJ5VHlwZUFuZEluZGV4KHBTZWdtZW50LCA1MywgbkluZGV4KyspOworICAgICAgICAgICAgaWYoIXBTZWcpIHsKKyAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBzZWdtZW50IDogU0RIVUZGREggY2FuJ3QgZmluZCB1c2VyIHN1cHBsaWVkIHRhYmxlLiIpOworICAgICAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9GRVRBTDsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RIVUZGREggPSBwU2VnLT5tX1Jlc3VsdC5odDsKKyAgICAgICAgfQorICAgICAgICBpZihjU0RIVUZGRFcgPT0gMCkgeworICAgICAgICAgICAgSkJJRzJfQUxMT0MoVGFibGVfQjIsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IyLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMikgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjIpKTsKKyAgICAgICAgICAgIHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RIVUZGRFcgPSBUYWJsZV9CMjsKKyAgICAgICAgfSBlbHNlIGlmKGNTREhVRkZEVyA9PSAxKSB7CisgICAgICAgICAgICBKQklHMl9BTExPQyhUYWJsZV9CMywgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjMsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IzKSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMykpOworICAgICAgICAgICAgcFN5bWJvbERpY3REZWNvZGVyLT5TREhVRkZEVyA9IFRhYmxlX0IzOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcFNlZyA9IGZpbmRSZWZlcnJlZFNlZ21lbnRCeVR5cGVBbmRJbmRleChwU2VnbWVudCwgNTMsIG5JbmRleCsrKTsKKyAgICAgICAgICAgIGlmKCFwU2VnKSB7CisgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgc2VnbWVudCA6IFNESFVGRkRXIGNhbid0IGZpbmQgdXNlciBzdXBwbGllZCB0YWJsZS4iKTsKKyAgICAgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwU3ltYm9sRGljdERlY29kZXItPlNESFVGRkRXID0gcFNlZy0+bV9SZXN1bHQuaHQ7CisgICAgICAgIH0KKyAgICAgICAgaWYoY1NESFVGRkJNU0laRSA9PSAwKSB7CisgICAgICAgICAgICBKQklHMl9BTExPQyhUYWJsZV9CMSwgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjEsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IxKSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMSkpOworICAgICAgICAgICAgcFN5bWJvbERpY3REZWNvZGVyLT5TREhVRkZCTVNJWkUgPSBUYWJsZV9CMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBTZWcgPSBmaW5kUmVmZXJyZWRTZWdtZW50QnlUeXBlQW5kSW5kZXgocFNlZ21lbnQsIDUzLCBuSW5kZXgrKyk7CisgICAgICAgICAgICBpZighcFNlZykgeworICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInN5bWJvbCBkaWN0aW9uYXJ5IHNlZ21lbnQgOiBTREhVRkZCTVNJWkUgY2FuJ3QgZmluZCB1c2VyIHN1cHBsaWVkIHRhYmxlLiIpOworICAgICAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9GRVRBTDsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RIVUZGQk1TSVpFID0gcFNlZy0+bV9SZXN1bHQuaHQ7CisgICAgICAgIH0KKyAgICAgICAgaWYocFN5bWJvbERpY3REZWNvZGVyLT5TRFJFRkFHRyA9PSAxKSB7CisgICAgICAgICAgICBpZihjU0RIVUZGQUdHSU5TVCA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYoIVRhYmxlX0IxKSB7CisgICAgICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKFRhYmxlX0IxLCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMSkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjEpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcFN5bWJvbERpY3REZWNvZGVyLT5TREhVRkZBR0dJTlNUID0gVGFibGVfQjE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBTZWcgPSBmaW5kUmVmZXJyZWRTZWdtZW50QnlUeXBlQW5kSW5kZXgocFNlZ21lbnQsIDUzLCBuSW5kZXgrKyk7CisgICAgICAgICAgICAgICAgaWYoIXBTZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgc2VnbWVudCA6IFNESFVGRkFHR0lOU1QgY2FuJ3QgZmluZCB1c2VyIHN1cHBsaWVkIHRhYmxlLiIpOworICAgICAgICAgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwU3ltYm9sRGljdERlY29kZXItPlNESFVGRkFHR0lOU1QgPSBwU2VnLT5tX1Jlc3VsdC5odDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZigod0ZsYWdzICYgMHgwMTAwKSAmJiBwTFJTZWcgJiYgcExSU2VnLT5tX1Jlc3VsdC5zZC0+bV9iQ29udGV4dFJldGFpbmVkKSB7CisgICAgICAgIGlmIChwU3ltYm9sRGljdERlY29kZXItPlNESFVGRiA9PSAwKSB7CisgICAgICAgICAgICBkd1RlbXAgPSBwU3ltYm9sRGljdERlY29kZXItPlNEVEVNUExBVEUgPT0gMCA/IDY1NTM2IDogcFN5bWJvbERpY3REZWNvZGVyLT5TRFRFTVBMQVRFID09IDEgPworICAgICAgICAgICAgICAgICAgICAgODE5MiA6IDEwMjQ7CisgICAgICAgICAgICBnYkNvbnRleHQgPSAoSkJpZzJBcml0aEN0eCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihKQmlnMkFyaXRoQ3R4KSwgZHdUZW1wKTsKKyAgICAgICAgICAgIEpCSUcyX21lbWNweShnYkNvbnRleHQsIHBMUlNlZy0+bV9SZXN1bHQuc2QtPm1fZ2JDb250ZXh0LCBzaXplb2YoSkJpZzJBcml0aEN0eCkqZHdUZW1wKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocFN5bWJvbERpY3REZWNvZGVyLT5TRFJFRkFHRyA9PSAxKSB7CisgICAgICAgICAgICBkd1RlbXAgPSBwU3ltYm9sRGljdERlY29kZXItPlNEUlRFTVBMQVRFID8gMSA8PCAxMCA6IDEgPDwgMTM7CisgICAgICAgICAgICBnckNvbnRleHQgPSAoSkJpZzJBcml0aEN0eCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihKQmlnMkFyaXRoQ3R4KSwgZHdUZW1wKTsKKyAgICAgICAgICAgIEpCSUcyX21lbWNweShnckNvbnRleHQsIHBMUlNlZy0+bV9SZXN1bHQuc2QtPm1fZ3JDb250ZXh0LCBzaXplb2YoSkJpZzJBcml0aEN0eCkqZHdUZW1wKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChwU3ltYm9sRGljdERlY29kZXItPlNESFVGRiA9PSAwKSB7CisgICAgICAgICAgICBkd1RlbXAgPSBwU3ltYm9sRGljdERlY29kZXItPlNEVEVNUExBVEUgPT0gMCA/IDY1NTM2IDogcFN5bWJvbERpY3REZWNvZGVyLT5TRFRFTVBMQVRFID09IDEgPworICAgICAgICAgICAgICAgICAgICAgODE5MiA6IDEwMjQ7CisgICAgICAgICAgICBnYkNvbnRleHQgPSAoSkJpZzJBcml0aEN0eCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihKQmlnMkFyaXRoQ3R4KSwgZHdUZW1wKTsKKyAgICAgICAgICAgIEpCSUcyX21lbXNldChnYkNvbnRleHQsIDAsIHNpemVvZihKQmlnMkFyaXRoQ3R4KSpkd1RlbXApOworICAgICAgICB9CisgICAgICAgIGlmIChwU3ltYm9sRGljdERlY29kZXItPlNEUkVGQUdHID09IDEpIHsKKyAgICAgICAgICAgIGR3VGVtcCA9IHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RSVEVNUExBVEUgPyAxIDw8IDEwIDogMSA8PCAxMzsKKyAgICAgICAgICAgIGdyQ29udGV4dCA9IChKQmlnMkFyaXRoQ3R4KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKEpCaWcyQXJpdGhDdHgpLCBkd1RlbXApOworICAgICAgICAgICAgSkJJRzJfbWVtc2V0KGdyQ29udGV4dCwgMCwgc2l6ZW9mKEpCaWcyQXJpdGhDdHgpKmR3VGVtcCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcFNlZ21lbnQtPm1fblJlc3VsdFR5cGUgPSBKQklHMl9TWU1CT0xfRElDVF9QT0lOVEVSOworICAgIGlmKHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RIVUZGID09IDApIHsKKyAgICAgICAgSkJJRzJfQUxMT0MocEFyaXRoRGVjb2RlciwgQ0pCaWcyX0FyaXRoRGVjb2RlcihtX3BTdHJlYW0pKTsKKyAgICAgICAgcFNlZ21lbnQtPm1fUmVzdWx0LnNkID0gcFN5bWJvbERpY3REZWNvZGVyLT5kZWNvZGVfQXJpdGgocEFyaXRoRGVjb2RlciwgZ2JDb250ZXh0LCBnckNvbnRleHQpOworICAgICAgICBkZWxldGUgcEFyaXRoRGVjb2RlcjsKKyAgICAgICAgaWYocFNlZ21lbnQtPm1fUmVzdWx0LnNkID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9GRVRBTDsKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisgICAgICAgIG1fcFN0cmVhbS0+YWxpZ25CeXRlKCk7CisgICAgICAgIG1fcFN0cmVhbS0+b2Zmc2V0KDIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHBTZWdtZW50LT5tX1Jlc3VsdC5zZCA9IHBTeW1ib2xEaWN0RGVjb2Rlci0+ZGVjb2RlX0h1ZmZtYW4obV9wU3RyZWFtLCBnYkNvbnRleHQsIGdyQ29udGV4dCwgcFBhdXNlKTsKKyAgICAgICAgaWYocFNlZ21lbnQtPm1fUmVzdWx0LnNkID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9GRVRBTDsKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisgICAgICAgIG1fcFN0cmVhbS0+YWxpZ25CeXRlKCk7CisgICAgfQorICAgIGlmKHdGbGFncyAmIDB4MDIwMCkgeworICAgICAgICBwU2VnbWVudC0+bV9SZXN1bHQuc2QtPm1fYkNvbnRleHRSZXRhaW5lZCA9IFRSVUU7CisgICAgICAgIGlmKHBTeW1ib2xEaWN0RGVjb2Rlci0+U0RIVUZGID09IDApIHsKKyAgICAgICAgICAgIHBTZWdtZW50LT5tX1Jlc3VsdC5zZC0+bV9nYkNvbnRleHQgPSBnYkNvbnRleHQ7CisgICAgICAgIH0KKyAgICAgICAgaWYocFN5bWJvbERpY3REZWNvZGVyLT5TRFJFRkFHRyA9PSAxKSB7CisgICAgICAgICAgICBwU2VnbWVudC0+bV9SZXN1bHQuc2QtPm1fZ3JDb250ZXh0ID0gZ3JDb250ZXh0OworICAgICAgICB9CisgICAgICAgIGJVc2VkID0gVFJVRTsKKyAgICB9IGVsc2UgeworICAgICAgICBiVXNlZCA9IEZBTFNFOworICAgIH0KKyAgICBkZWxldGUgcFN5bWJvbERpY3REZWNvZGVyOworICAgIGlmKFNESU5TWU1TKSB7CisgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShTRElOU1lNUyk7CisgICAgfQorICAgIGlmKFRhYmxlX0IxKSB7CisgICAgICAgIGRlbGV0ZSBUYWJsZV9CMTsKKyAgICB9CisgICAgaWYoVGFibGVfQjIpIHsKKyAgICAgICAgZGVsZXRlIFRhYmxlX0IyOworICAgIH0KKyAgICBpZihUYWJsZV9CMykgeworICAgICAgICBkZWxldGUgVGFibGVfQjM7CisgICAgfQorICAgIGlmKFRhYmxlX0I0KSB7CisgICAgICAgIGRlbGV0ZSBUYWJsZV9CNDsKKyAgICB9CisgICAgaWYoVGFibGVfQjUpIHsKKyAgICAgICAgZGVsZXRlIFRhYmxlX0I1OworICAgIH0KKyAgICBpZihiVXNlZCA9PSBGQUxTRSkgeworICAgICAgICBpZihnYkNvbnRleHQpIHsKKyAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShnYkNvbnRleHQpOworICAgICAgICB9CisgICAgICAgIGlmKGdyQ29udGV4dCkgeworICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKGdyQ29udGV4dCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEpCSUcyX1NVQ0NFU1M7CitmYWlsZWQ6CisgICAgZGVsZXRlIHBTeW1ib2xEaWN0RGVjb2RlcjsKKyAgICBpZihTRElOU1lNUykgeworICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0RJTlNZTVMpOworICAgIH0KKyAgICBpZihUYWJsZV9CMSkgeworICAgICAgICBkZWxldGUgVGFibGVfQjE7CisgICAgfQorICAgIGlmKFRhYmxlX0IyKSB7CisgICAgICAgIGRlbGV0ZSBUYWJsZV9CMjsKKyAgICB9CisgICAgaWYoVGFibGVfQjMpIHsKKyAgICAgICAgZGVsZXRlIFRhYmxlX0IzOworICAgIH0KKyAgICBpZihUYWJsZV9CNCkgeworICAgICAgICBkZWxldGUgVGFibGVfQjQ7CisgICAgfQorICAgIGlmKFRhYmxlX0I1KSB7CisgICAgICAgIGRlbGV0ZSBUYWJsZV9CNTsKKyAgICB9CisgICAgaWYoZ2JDb250ZXh0KSB7CisgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShnYkNvbnRleHQpOworICAgIH0KKyAgICBpZihnckNvbnRleHQpIHsKKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKGdyQ29udGV4dCk7CisgICAgfQorICAgIHJldHVybiBuUmV0OworfQorCitGWF9CT09MIENKQmlnMl9Db250ZXh0OjpwYXJzZVRleHRSZWdpb24oQ0pCaWcyX1NlZ21lbnQgKnBTZWdtZW50KQoreworICAgIEZYX0RXT1JEIGR3VGVtcDsKKyAgICBGWF9XT1JEIHdGbGFnczsKKyAgICBGWF9JTlQzMiBpLCBuSW5kZXgsIG5SZXQ7CisgICAgSkJpZzJSZWdpb25JbmZvIHJpOworICAgIENKQmlnMl9TZWdtZW50ICpwU2VnOworICAgIENKQmlnMl9JbWFnZSAqKlNCU1lNUyA9IE5VTEw7CisgICAgSkJpZzJIdWZmbWFuQ29kZSAqU0JTWU1DT0RFUyA9IE5VTEw7CisgICAgRlhfQllURSBjU0JIVUZGRlMsIGNTQkhVRkZEUywgY1NCSFVGRkRULCBjU0JIVUZGUkRXLCBjU0JIVUZGUkRILCBjU0JIVUZGUkRYLCBjU0JIVUZGUkRZLCBjU0JIVUZGUlNJWkU7CisgICAgQ0pCaWcyX0h1ZmZtYW5UYWJsZSAqVGFibGVfQjEgPSBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICpUYWJsZV9CNiA9IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICpUYWJsZV9CNyA9IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAqVGFibGVfQjggPSBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICpUYWJsZV9COSA9IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpUYWJsZV9CMTAgPSBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlRhYmxlX0IxMSA9IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlRhYmxlX0IxMiA9IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpUYWJsZV9CMTMgPSBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlRhYmxlX0IxNCA9IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlRhYmxlX0IxNSA9IE5VTEw7CisgICAgSkJpZzJBcml0aEN0eCAqZ3JDb250ZXh0ID0gTlVMTDsKKyAgICBDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyOworICAgIENKQmlnMl9UUkRQcm9jICpwVFJEOworICAgIEpCSUcyX0FMTE9DKHBUUkQsIENKQmlnMl9UUkRQcm9jKCkpOworICAgIGlmKChwYXJzZVJlZ2lvbkluZm8oJnJpKSAhPSBKQklHMl9TVUNDRVNTKQorICAgICAgICAgICAgfHwgKG1fcFN0cmVhbS0+cmVhZFNob3J0SW50ZWdlcigmd0ZsYWdzKSAhPSAwKSkgeworICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBzZWdtZW50IDogZGF0YSBoZWFkZXIgdG9vIHNob3J0LiIpOworICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfVE9PX1NIT1JUOworICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9CisgICAgcFRSRC0+U0JXID0gcmkud2lkdGg7CisgICAgcFRSRC0+U0JIID0gcmkuaGVpZ2h0OworICAgIHBUUkQtPlNCSFVGRiA9IHdGbGFncyAmIDB4MDAwMTsKKyAgICBwVFJELT5TQlJFRklORSA9ICh3RmxhZ3MgPj4gMSkgJiAweDAwMDE7CisgICAgZHdUZW1wID0gKHdGbGFncyA+PiAyKSAmIDB4MDAwMzsKKyAgICBwVFJELT5TQlNUUklQUyA9IDEgPDwgZHdUZW1wOworICAgIHBUUkQtPlJFRkNPUk5FUiA9IChKQmlnMkNvcm5lcikoKHdGbGFncyA+PiA0KSAmIDB4MDAwMyk7CisgICAgcFRSRC0+VFJBTlNQT1NFRCA9ICh3RmxhZ3MgPj4gNikgJiAweDAwMDE7CisgICAgcFRSRC0+U0JDT01CT1AgPSAoSkJpZzJDb21wb3NlT3ApKCh3RmxhZ3MgPj4gNykgJiAweDAwMDMpOworICAgIHBUUkQtPlNCREVGUElYRUwgPSAod0ZsYWdzID4+IDkpICYgMHgwMDAxOworICAgIHBUUkQtPlNCRFNPRkZTRVQgPSAod0ZsYWdzID4+IDEwKSAmIDB4MDAxZjsKKyAgICBpZihwVFJELT5TQkRTT0ZGU0VUID49IDB4MDAxMCkgeworICAgICAgICBwVFJELT5TQkRTT0ZGU0VUID0gcFRSRC0+U0JEU09GRlNFVCAtIDB4MDAyMDsKKyAgICB9CisgICAgcFRSRC0+U0JSVEVNUExBVEUgPSAod0ZsYWdzID4+IDE1KSAmIDB4MDAwMTsKKyAgICBpZihwVFJELT5TQkhVRkYgPT0gMSkgeworICAgICAgICBpZihtX3BTdHJlYW0tPnJlYWRTaG9ydEludGVnZXIoJndGbGFncykgIT0gMCkgeworICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigidGV4dCByZWdpb24gc2VnbWVudCA6IGRhdGEgaGVhZGVyIHRvbyBzaG9ydC4iKTsKKyAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9UT09fU0hPUlQ7CisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgfQorICAgICAgICBjU0JIVUZGRlMgPSB3RmxhZ3MgJiAweDAwMDM7CisgICAgICAgIGNTQkhVRkZEUyA9ICh3RmxhZ3MgPj4gMikgJiAweDAwMDM7CisgICAgICAgIGNTQkhVRkZEVCA9ICh3RmxhZ3MgPj4gNCkgJiAweDAwMDM7CisgICAgICAgIGNTQkhVRkZSRFcgPSAod0ZsYWdzID4+IDYpICYgMHgwMDAzOworICAgICAgICBjU0JIVUZGUkRIID0gKHdGbGFncyA+PiA4KSAmIDB4MDAwMzsKKyAgICAgICAgY1NCSFVGRlJEWCA9ICh3RmxhZ3MgPj4gMTApICYgMHgwMDAzOworICAgICAgICBjU0JIVUZGUkRZID0gKHdGbGFncyA+PiAxMikgJiAweDAwMDM7CisgICAgICAgIGNTQkhVRkZSU0laRSA9ICh3RmxhZ3MgPj4gMTQpICYgMHgwMDAxOworICAgIH0KKyAgICBpZigocFRSRC0+U0JSRUZJTkUgPT0gMSkgJiYgKHBUUkQtPlNCUlRFTVBMQVRFID09IDApKSB7CisgICAgICAgIGZvcihpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICAgICAgaWYobV9wU3RyZWFtLT5yZWFkMUJ5dGUoKEZYX0JZVEUqKSZwVFJELT5TQlJBVFtpXSkgIT0gMCkgeworICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIHNlZ21lbnQgOiBkYXRhIGhlYWRlciB0b28gc2hvcnQuIik7CisgICAgICAgICAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX1RPT19TSE9SVDsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZihtX3BTdHJlYW0tPnJlYWRJbnRlZ2VyKCZwVFJELT5TQk5VTUlOU1RBTkNFUykgIT0gMCkgeworICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBzZWdtZW50IDogZGF0YSBoZWFkZXIgdG9vIHNob3J0LiIpOworICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfVE9PX1NIT1JUOworICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9CisgICAgZm9yKGkgPSAwOyBpIDwgcFNlZ21lbnQtPm1fblJlZmVycmVkX3RvX3NlZ21lbnRfY291bnQ7IGkrKykgeworICAgICAgICBpZighZmluZFNlZ21lbnRCeU51bWJlcihwU2VnbWVudC0+bV9wUmVmZXJyZWRfdG9fc2VnbWVudF9udW1iZXJzW2ldKSkgeworICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigidGV4dCByZWdpb24gc2VnbWVudCA6IGNhbid0IGZpbmQgcmVmZXJlZCB0byBzZWdtZW50cyIpOworICAgICAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0ZFVEFMOworICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcFRSRC0+U0JOVU1TWU1TID0gMDsKKyAgICBmb3IoaSA9IDA7IGkgPCBwU2VnbWVudC0+bV9uUmVmZXJyZWRfdG9fc2VnbWVudF9jb3VudDsgaSsrKSB7CisgICAgICAgIHBTZWcgPSBmaW5kU2VnbWVudEJ5TnVtYmVyKHBTZWdtZW50LT5tX3BSZWZlcnJlZF90b19zZWdtZW50X251bWJlcnNbaV0pOworICAgICAgICBpZihwU2VnLT5tX2NGbGFncy5zLnR5cGUgPT0gMCkgeworICAgICAgICAgICAgcFRSRC0+U0JOVU1TWU1TICs9IHBTZWctPm1fUmVzdWx0LnNkLT5TRE5VTUVYU1lNUzsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocFRSRC0+U0JOVU1TWU1TID4gMCkgeworICAgICAgICBTQlNZTVMgPSAoQ0pCaWcyX0ltYWdlKiopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKENKQmlnMl9JbWFnZSopLCBwVFJELT5TQk5VTVNZTVMpOworICAgICAgICBkd1RlbXAgPSAwOworICAgICAgICBmb3IoaSA9IDA7IGkgPCBwU2VnbWVudC0+bV9uUmVmZXJyZWRfdG9fc2VnbWVudF9jb3VudDsgaSsrKSB7CisgICAgICAgICAgICBwU2VnID0gZmluZFNlZ21lbnRCeU51bWJlcihwU2VnbWVudC0+bV9wUmVmZXJyZWRfdG9fc2VnbWVudF9udW1iZXJzW2ldKTsKKyAgICAgICAgICAgIGlmKHBTZWctPm1fY0ZsYWdzLnMudHlwZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgSkJJRzJfbWVtY3B5KFNCU1lNUyArIGR3VGVtcCwgcFNlZy0+bV9SZXN1bHQuc2QtPlNERVhTWU1TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwU2VnLT5tX1Jlc3VsdC5zZC0+U0ROVU1FWFNZTVMgKiBzaXplb2YoQ0pCaWcyX0ltYWdlKikpOworICAgICAgICAgICAgICAgIGR3VGVtcCArPSBwU2VnLT5tX1Jlc3VsdC5zZC0+U0ROVU1FWFNZTVM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcFRSRC0+U0JTWU1TID0gU0JTWU1TOworICAgIH0gZWxzZSB7CisgICAgICAgIHBUUkQtPlNCU1lNUyA9IE5VTEw7CisgICAgfQorICAgIGlmKHBUUkQtPlNCSFVGRiA9PSAxKSB7CisgICAgICAgIFNCU1lNQ09ERVMgPSBkZWNvZGVTeW1ib2xJREh1ZmZtYW5UYWJsZShtX3BTdHJlYW0sIHBUUkQtPlNCTlVNU1lNUyk7CisgICAgICAgIGlmKFNCU1lNQ09ERVMgPT0gTlVMTCkgeworICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigidGV4dCByZWdpb24gc2VnbWVudDogc3ltYm9sIElEIGh1ZmZtYW4gdGFibGUgZGVjb2RlIGZhaWx1cmUhIik7CisgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7CisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgfQorICAgICAgICBtX3BTdHJlYW0tPmFsaWduQnl0ZSgpOworICAgICAgICBwVFJELT5TQlNZTUNPREVTID0gU0JTWU1DT0RFUzsKKyAgICB9IGVsc2UgeworICAgICAgICBkd1RlbXAgPSAwOworICAgICAgICB3aGlsZSgoRlhfRFdPUkQpKDEgPDwgZHdUZW1wKSA8IHBUUkQtPlNCTlVNU1lNUykgeworICAgICAgICAgICAgZHdUZW1wICsrOworICAgICAgICB9CisgICAgICAgIHBUUkQtPlNCU1lNQ09ERUxFTiA9IChGWF9CWVRFKWR3VGVtcDsKKyAgICB9CisgICAgaWYocFRSRC0+U0JIVUZGID09IDEpIHsKKyAgICAgICAgaWYoKGNTQkhVRkZGUyA9PSAyKSB8fCAoY1NCSFVGRlJEVyA9PSAyKSB8fCAoY1NCSFVGRlJESCA9PSAyKQorICAgICAgICAgICAgICAgIHx8IChjU0JIVUZGUkRYID09IDIpIHx8IChjU0JIVUZGUkRZID09IDIpKSB7CisgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBzZWdtZW50IDogU0JIVUZGRlM9MiBvciBTQkhVRkZSRFc9MiBvciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTQkhVRkZSREg9MiBvciBTQkhVRkZSRFg9MiBvciBTQkhVRkZSRFk9MiBpcyBub3QgcGVybWl0dGVkIik7CisgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7CisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgfQorICAgICAgICBuSW5kZXggPSAwOworICAgICAgICBpZihjU0JIVUZGRlMgPT0gMCkgeworICAgICAgICAgICAgSkJJRzJfQUxMT0MoVGFibGVfQjYsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0I2LAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CNikgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjYpKTsKKyAgICAgICAgICAgIHBUUkQtPlNCSFVGRkZTID0gVGFibGVfQjY7CisgICAgICAgIH0gZWxzZSBpZihjU0JIVUZGRlMgPT0gMSkgeworICAgICAgICAgICAgSkJJRzJfQUxMT0MoVGFibGVfQjcsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0I3LAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CNykgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjcpKTsKKyAgICAgICAgICAgIHBUUkQtPlNCSFVGRkZTID0gVGFibGVfQjc7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwU2VnID0gZmluZFJlZmVycmVkU2VnbWVudEJ5VHlwZUFuZEluZGV4KHBTZWdtZW50LCA1MywgbkluZGV4KyspOworICAgICAgICAgICAgaWYoIXBTZWcpIHsKKyAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBzZWdtZW50IDogU0JIVUZGRlMgY2FuJ3QgZmluZCB1c2VyIHN1cHBsaWVkIHRhYmxlIik7CisgICAgICAgICAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0ZFVEFMOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcFRSRC0+U0JIVUZGRlMgPSBwU2VnLT5tX1Jlc3VsdC5odDsKKyAgICAgICAgfQorICAgICAgICBpZihjU0JIVUZGRFMgPT0gMCkgeworICAgICAgICAgICAgSkJJRzJfQUxMT0MoVGFibGVfQjgsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0I4LAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9COCkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjgpKTsKKyAgICAgICAgICAgIHBUUkQtPlNCSFVGRkRTID0gVGFibGVfQjg7CisgICAgICAgIH0gZWxzZSBpZihjU0JIVUZGRFMgPT0gMSkgeworICAgICAgICAgICAgSkJJRzJfQUxMT0MoVGFibGVfQjksIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0I5LAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9COSkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjkpKTsKKyAgICAgICAgICAgIHBUUkQtPlNCSFVGRkRTID0gVGFibGVfQjk7CisgICAgICAgIH0gZWxzZSBpZihjU0JIVUZGRFMgPT0gMikgeworICAgICAgICAgICAgSkJJRzJfQUxMT0MoVGFibGVfQjEwLCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMTAsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IxMCkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjEwKSk7CisgICAgICAgICAgICBwVFJELT5TQkhVRkZEUyA9IFRhYmxlX0IxMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBTZWcgPSBmaW5kUmVmZXJyZWRTZWdtZW50QnlUeXBlQW5kSW5kZXgocFNlZ21lbnQsIDUzLCBuSW5kZXgrKyk7CisgICAgICAgICAgICBpZighcFNlZykgeworICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIHNlZ21lbnQgOiBTQkhVRkZEUyBjYW4ndCBmaW5kIHVzZXIgc3VwcGxpZWQgdGFibGUiKTsKKyAgICAgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwVFJELT5TQkhVRkZEUyA9IHBTZWctPm1fUmVzdWx0Lmh0OworICAgICAgICB9CisgICAgICAgIGlmKGNTQkhVRkZEVCA9PSAwKSB7CisgICAgICAgICAgICBKQklHMl9BTExPQyhUYWJsZV9CMTEsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjExKSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMTEpKTsKKyAgICAgICAgICAgIHBUUkQtPlNCSFVGRkRUID0gVGFibGVfQjExOworICAgICAgICB9IGVsc2UgaWYoY1NCSFVGRkRUID09IDEpIHsKKyAgICAgICAgICAgIEpCSUcyX0FMTE9DKFRhYmxlX0IxMiwgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjEyLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMTIpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0IxMikpOworICAgICAgICAgICAgcFRSRC0+U0JIVUZGRFQgPSBUYWJsZV9CMTI7CisgICAgICAgIH0gZWxzZSBpZihjU0JIVUZGRFQgPT0gMikgeworICAgICAgICAgICAgSkJJRzJfQUxMT0MoVGFibGVfQjEzLCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMTMsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IxMykgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjEzKSk7CisgICAgICAgICAgICBwVFJELT5TQkhVRkZEVCA9IFRhYmxlX0IxMzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBTZWcgPSBmaW5kUmVmZXJyZWRTZWdtZW50QnlUeXBlQW5kSW5kZXgocFNlZ21lbnQsIDUzLCBuSW5kZXgrKyk7CisgICAgICAgICAgICBpZighcFNlZykgeworICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIHNlZ21lbnQgOiBTQkhVRkZEVCBjYW4ndCBmaW5kIHVzZXIgc3VwcGxpZWQgdGFibGUiKTsKKyAgICAgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwVFJELT5TQkhVRkZEVCA9IHBTZWctPm1fUmVzdWx0Lmh0OworICAgICAgICB9CisgICAgICAgIGlmKGNTQkhVRkZSRFcgPT0gMCkgeworICAgICAgICAgICAgSkJJRzJfQUxMT0MoVGFibGVfQjE0LCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMTQsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IxNCkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjE0KSk7CisgICAgICAgICAgICBwVFJELT5TQkhVRkZSRFcgPSBUYWJsZV9CMTQ7CisgICAgICAgIH0gZWxzZSBpZihjU0JIVUZGUkRXID09IDEpIHsKKyAgICAgICAgICAgIEpCSUcyX0FMTE9DKFRhYmxlX0IxNSwgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjE1LAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMTUpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0IxNSkpOworICAgICAgICAgICAgcFRSRC0+U0JIVUZGUkRXID0gVGFibGVfQjE1OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcFNlZyA9IGZpbmRSZWZlcnJlZFNlZ21lbnRCeVR5cGVBbmRJbmRleChwU2VnbWVudCwgNTMsIG5JbmRleCsrKTsKKyAgICAgICAgICAgIGlmKCFwU2VnKSB7CisgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigidGV4dCByZWdpb24gc2VnbWVudCA6IFNCSFVGRlJEVyBjYW4ndCBmaW5kIHVzZXIgc3VwcGxpZWQgdGFibGUiKTsKKyAgICAgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwVFJELT5TQkhVRkZSRFcgPSBwU2VnLT5tX1Jlc3VsdC5odDsKKyAgICAgICAgfQorICAgICAgICBpZihjU0JIVUZGUkRIID09IDApIHsKKyAgICAgICAgICAgIGlmKCFUYWJsZV9CMTQpIHsKKyAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhUYWJsZV9CMTQsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IxNCkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjE0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwVFJELT5TQkhVRkZSREggPSBUYWJsZV9CMTQ7CisgICAgICAgIH0gZWxzZSBpZihjU0JIVUZGUkRIID09IDEpIHsKKyAgICAgICAgICAgIGlmKCFUYWJsZV9CMTUpIHsKKyAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhUYWJsZV9CMTUsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IxNSkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjE1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwVFJELT5TQkhVRkZSREggPSBUYWJsZV9CMTU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwU2VnID0gZmluZFJlZmVycmVkU2VnbWVudEJ5VHlwZUFuZEluZGV4KHBTZWdtZW50LCA1MywgbkluZGV4KyspOworICAgICAgICAgICAgaWYoIXBTZWcpIHsKKyAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBzZWdtZW50IDogU0JIVUZGUkRIIGNhbid0IGZpbmQgdXNlciBzdXBwbGllZCB0YWJsZSIpOworICAgICAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9GRVRBTDsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBUUkQtPlNCSFVGRlJESCA9IHBTZWctPm1fUmVzdWx0Lmh0OworICAgICAgICB9CisgICAgICAgIGlmKGNTQkhVRkZSRFggPT0gMCkgeworICAgICAgICAgICAgaWYoIVRhYmxlX0IxNCkgeworICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKFRhYmxlX0IxNCwgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjE0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjE0KSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMTQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBUUkQtPlNCSFVGRlJEWCA9IFRhYmxlX0IxNDsKKyAgICAgICAgfSBlbHNlIGlmKGNTQkhVRkZSRFggPT0gMSkgeworICAgICAgICAgICAgaWYoIVRhYmxlX0IxNSkgeworICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKFRhYmxlX0IxNSwgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjE1KSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMTUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBUUkQtPlNCSFVGRlJEWCA9IFRhYmxlX0IxNTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBTZWcgPSBmaW5kUmVmZXJyZWRTZWdtZW50QnlUeXBlQW5kSW5kZXgocFNlZ21lbnQsIDUzLCBuSW5kZXgrKyk7CisgICAgICAgICAgICBpZighcFNlZykgeworICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIHNlZ21lbnQgOiBTQkhVRkZSRFggY2FuJ3QgZmluZCB1c2VyIHN1cHBsaWVkIHRhYmxlIik7CisgICAgICAgICAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0ZFVEFMOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcFRSRC0+U0JIVUZGUkRYID0gcFNlZy0+bV9SZXN1bHQuaHQ7CisgICAgICAgIH0KKyAgICAgICAgaWYoY1NCSFVGRlJEWSA9PSAwKSB7CisgICAgICAgICAgICBpZighVGFibGVfQjE0KSB7CisgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MoVGFibGVfQjE0LCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMTQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMTQpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0IxNCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcFRSRC0+U0JIVUZGUkRZID0gVGFibGVfQjE0OworICAgICAgICB9IGVsc2UgaWYoY1NCSFVGRlJEWSA9PSAxKSB7CisgICAgICAgICAgICBpZighVGFibGVfQjE1KSB7CisgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MoVGFibGVfQjE1LCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMTUpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0IxNSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcFRSRC0+U0JIVUZGUkRZID0gVGFibGVfQjE1OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcFNlZyA9IGZpbmRSZWZlcnJlZFNlZ21lbnRCeVR5cGVBbmRJbmRleChwU2VnbWVudCwgNTMsIG5JbmRleCsrKTsKKyAgICAgICAgICAgIGlmKCFwU2VnKSB7CisgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigidGV4dCByZWdpb24gc2VnbWVudCA6IFNCSFVGRlJEWSBjYW4ndCBmaW5kIHVzZXIgc3VwcGxpZWQgdGFibGUiKTsKKyAgICAgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwVFJELT5TQkhVRkZSRFkgPSBwU2VnLT5tX1Jlc3VsdC5odDsKKyAgICAgICAgfQorICAgICAgICBpZihjU0JIVUZGUlNJWkUgPT0gMCkgeworICAgICAgICAgICAgSkJJRzJfQUxMT0MoVGFibGVfQjEsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMSkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjEpKTsKKyAgICAgICAgICAgIHBUUkQtPlNCSFVGRlJTSVpFID0gVGFibGVfQjE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwU2VnID0gZmluZFJlZmVycmVkU2VnbWVudEJ5VHlwZUFuZEluZGV4KHBTZWdtZW50LCA1MywgbkluZGV4KyspOworICAgICAgICAgICAgaWYoIXBTZWcpIHsKKyAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBzZWdtZW50IDogU0JIVUZGUlNJWkUgY2FuJ3QgZmluZCB1c2VyIHN1cHBsaWVkIHRhYmxlIik7CisgICAgICAgICAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0ZFVEFMOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcFRSRC0+U0JIVUZGUlNJWkUgPSBwU2VnLT5tX1Jlc3VsdC5odDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZihwVFJELT5TQlJFRklORSA9PSAxKSB7CisgICAgICAgIGR3VGVtcCA9IHBUUkQtPlNCUlRFTVBMQVRFID8gMSA8PCAxMCA6IDEgPDwgMTM7CisgICAgICAgIGdyQ29udGV4dCA9IChKQmlnMkFyaXRoQ3R4KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKEpCaWcyQXJpdGhDdHgpLCBkd1RlbXApOworICAgICAgICBKQklHMl9tZW1zZXQoZ3JDb250ZXh0LCAwLCBzaXplb2YoSkJpZzJBcml0aEN0eCkqZHdUZW1wKTsKKyAgICB9CisgICAgaWYocFRSRC0+U0JIVUZGID09IDApIHsKKyAgICAgICAgSkJJRzJfQUxMT0MocEFyaXRoRGVjb2RlciwgQ0pCaWcyX0FyaXRoRGVjb2RlcihtX3BTdHJlYW0pKTsKKyAgICAgICAgcFNlZ21lbnQtPm1fblJlc3VsdFR5cGUgPSBKQklHMl9JTUFHRV9QT0lOVEVSOworICAgICAgICBwU2VnbWVudC0+bV9SZXN1bHQuaW0gPSBwVFJELT5kZWNvZGVfQXJpdGgocEFyaXRoRGVjb2RlciwgZ3JDb250ZXh0KTsKKyAgICAgICAgZGVsZXRlIHBBcml0aERlY29kZXI7CisgICAgICAgIGlmKHBTZWdtZW50LT5tX1Jlc3VsdC5pbSA9PSBOVUxMKSB7CisgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7CisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgfQorICAgICAgICBtX3BTdHJlYW0tPmFsaWduQnl0ZSgpOworICAgICAgICBtX3BTdHJlYW0tPm9mZnNldCgyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwU2VnbWVudC0+bV9uUmVzdWx0VHlwZSA9IEpCSUcyX0lNQUdFX1BPSU5URVI7CisgICAgICAgIHBTZWdtZW50LT5tX1Jlc3VsdC5pbSA9IHBUUkQtPmRlY29kZV9IdWZmbWFuKG1fcFN0cmVhbSwgZ3JDb250ZXh0KTsKKyAgICAgICAgaWYocFNlZ21lbnQtPm1fUmVzdWx0LmltID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9GRVRBTDsKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisgICAgICAgIG1fcFN0cmVhbS0+YWxpZ25CeXRlKCk7CisgICAgfQorICAgIGlmKHBTZWdtZW50LT5tX2NGbGFncy5zLnR5cGUgIT0gNCkgeworICAgICAgICBpZighbV9iQnVmU3BlY2lmaWVkKSB7CisgICAgICAgICAgICBKQmlnMlBhZ2VJbmZvICpwUGFnZUluZm8gPSBtX3BQYWdlSW5mb0xpc3QtPmdldExhc3QoKTsKKyAgICAgICAgICAgIGlmICgocFBhZ2VJbmZvLT5tX2JJc1N0cmlwZWQgPT0gMSkgJiYgKHJpLnkgKyByaS5oZWlnaHQgPiBtX3BQYWdlLT5tX25IZWlnaHQpKSB7CisgICAgICAgICAgICAgICAgbV9wUGFnZS0+ZXhwYW5kKHJpLnkgKyByaS5oZWlnaHQsIChwUGFnZUluZm8tPm1fY0ZsYWdzICYgNCkgPyAxIDogMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9wUGFnZS0+Y29tcG9zZUZyb20ocmkueCwgcmkueSwgcFNlZ21lbnQtPm1fUmVzdWx0LmltLCAoSkJpZzJDb21wb3NlT3ApKHJpLmZsYWdzICYgMHgwMykpOworICAgICAgICBkZWxldGUgcFNlZ21lbnQtPm1fUmVzdWx0LmltOworICAgICAgICBwU2VnbWVudC0+bV9SZXN1bHQuaW0gPSBOVUxMOworICAgIH0KKyAgICBkZWxldGUgcFRSRDsKKyAgICBpZihTQlNZTVMpIHsKKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKFNCU1lNUyk7CisgICAgfQorICAgIGlmKFNCU1lNQ09ERVMpIHsKKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKFNCU1lNQ09ERVMpOworICAgIH0KKyAgICBpZihnckNvbnRleHQpIHsKKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKGdyQ29udGV4dCk7CisgICAgfQorICAgIGlmKFRhYmxlX0IxKSB7CisgICAgICAgIGRlbGV0ZSBUYWJsZV9CMTsKKyAgICB9CisgICAgaWYoVGFibGVfQjYpIHsKKyAgICAgICAgZGVsZXRlIFRhYmxlX0I2OworICAgIH0KKyAgICBpZihUYWJsZV9CNykgeworICAgICAgICBkZWxldGUgVGFibGVfQjc7CisgICAgfQorICAgIGlmKFRhYmxlX0I4KSB7CisgICAgICAgIGRlbGV0ZSBUYWJsZV9CODsKKyAgICB9CisgICAgaWYoVGFibGVfQjkpIHsKKyAgICAgICAgZGVsZXRlIFRhYmxlX0I5OworICAgIH0KKyAgICBpZihUYWJsZV9CMTApIHsKKyAgICAgICAgZGVsZXRlIFRhYmxlX0IxMDsKKyAgICB9CisgICAgaWYoVGFibGVfQjExKSB7CisgICAgICAgIGRlbGV0ZSBUYWJsZV9CMTE7CisgICAgfQorICAgIGlmKFRhYmxlX0IxMikgeworICAgICAgICBkZWxldGUgVGFibGVfQjEyOworICAgIH0KKyAgICBpZihUYWJsZV9CMTMpIHsKKyAgICAgICAgZGVsZXRlIFRhYmxlX0IxMzsKKyAgICB9CisgICAgaWYoVGFibGVfQjE0KSB7CisgICAgICAgIGRlbGV0ZSBUYWJsZV9CMTQ7CisgICAgfQorICAgIGlmKFRhYmxlX0IxNSkgeworICAgICAgICBkZWxldGUgVGFibGVfQjE1OworICAgIH0KKyAgICByZXR1cm4gSkJJRzJfU1VDQ0VTUzsKK2ZhaWxlZDoKKyAgICBkZWxldGUgcFRSRDsKKyAgICBpZihTQlNZTVMpIHsKKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKFNCU1lNUyk7CisgICAgfQorICAgIGlmKFNCU1lNQ09ERVMpIHsKKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKFNCU1lNQ09ERVMpOworICAgIH0KKyAgICBpZihnckNvbnRleHQpIHsKKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKGdyQ29udGV4dCk7CisgICAgfQorICAgIGlmKFRhYmxlX0IxKSB7CisgICAgICAgIGRlbGV0ZSBUYWJsZV9CMTsKKyAgICB9CisgICAgaWYoVGFibGVfQjYpIHsKKyAgICAgICAgZGVsZXRlIFRhYmxlX0I2OworICAgIH0KKyAgICBpZihUYWJsZV9CNykgeworICAgICAgICBkZWxldGUgVGFibGVfQjc7CisgICAgfQorICAgIGlmKFRhYmxlX0I4KSB7CisgICAgICAgIGRlbGV0ZSBUYWJsZV9CODsKKyAgICB9CisgICAgaWYoVGFibGVfQjkpIHsKKyAgICAgICAgZGVsZXRlIFRhYmxlX0I5OworICAgIH0KKyAgICBpZihUYWJsZV9CMTApIHsKKyAgICAgICAgZGVsZXRlIFRhYmxlX0IxMDsKKyAgICB9CisgICAgaWYoVGFibGVfQjExKSB7CisgICAgICAgIGRlbGV0ZSBUYWJsZV9CMTE7CisgICAgfQorICAgIGlmKFRhYmxlX0IxMikgeworICAgICAgICBkZWxldGUgVGFibGVfQjEyOworICAgIH0KKyAgICBpZihUYWJsZV9CMTMpIHsKKyAgICAgICAgZGVsZXRlIFRhYmxlX0IxMzsKKyAgICB9CisgICAgaWYoVGFibGVfQjE0KSB7CisgICAgICAgIGRlbGV0ZSBUYWJsZV9CMTQ7CisgICAgfQorICAgIGlmKFRhYmxlX0IxNSkgeworICAgICAgICBkZWxldGUgVGFibGVfQjE1OworICAgIH0KKyAgICByZXR1cm4gblJldDsKK30KKworRlhfQk9PTCBDSkJpZzJfQ29udGV4dDo6cGFyc2VQYXR0ZXJuRGljdChDSkJpZzJfU2VnbWVudCAqcFNlZ21lbnQsIElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIEZYX0RXT1JEIGR3VGVtcDsKKyAgICBGWF9CWVRFIGNGbGFnczsKKyAgICBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQ7CisgICAgQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlcjsKKyAgICBDSkJpZzJfUEREUHJvYyAqcFBERDsKKyAgICBGWF9JTlQzMiBuUmV0OworICAgIEpCSUcyX0FMTE9DKHBQREQsIENKQmlnMl9QRERQcm9jKCkpOworICAgIGlmKChtX3BTdHJlYW0tPnJlYWQxQnl0ZSgmY0ZsYWdzKSAhPSAwKQorICAgICAgICAgICAgfHwgKG1fcFN0cmVhbS0+cmVhZDFCeXRlKCZwUERELT5IRFBXKSAhPSAwKQorICAgICAgICAgICAgfHwgKG1fcFN0cmVhbS0+cmVhZDFCeXRlKCZwUERELT5IRFBIKSAhPSAwKQorICAgICAgICAgICAgfHwgKG1fcFN0cmVhbS0+cmVhZEludGVnZXIoJnBQREQtPkdSQVlNQVgpICE9IDApKSB7CisgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInBhdHRlcm4gZGljdGlvbmFyeSBzZWdtZW50IDogZGF0YSBoZWFkZXIgdG9vIHNob3J0LiIpOworICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfVE9PX1NIT1JUOworICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9CisgICAgaWYgKHBQREQtPkdSQVlNQVggPiBKQklHMl9NQVhfUEFUVEVSTl9JTkRFWCkgeworICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJwYXR0ZXJuIGRpY3Rpb25hcnkgc2VnbWVudCA6IHRvbyBtYXggZ3JheSBtYXguIik7CisgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9MSU1JVDsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIHBQREQtPkhETU1SID0gY0ZsYWdzICYgMHgwMTsKKyAgICBwUERELT5IRFRFTVBMQVRFID0gKGNGbGFncyA+PiAxKSAmIDB4MDM7CisgICAgcFNlZ21lbnQtPm1fblJlc3VsdFR5cGUgPSBKQklHMl9QQVRURVJOX0RJQ1RfUE9JTlRFUjsKKyAgICBpZihwUERELT5IRE1NUiA9PSAwKSB7CisgICAgICAgIGR3VGVtcCA9IHBQREQtPkhEVEVNUExBVEUgPT0gMCA/IDY1NTM2IDogcFBERC0+SERURU1QTEFURSA9PSAxID8gODE5MiA6IDEwMjQ7CisgICAgICAgIGdiQ29udGV4dCA9IChKQmlnMkFyaXRoQ3R4KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKEpCaWcyQXJpdGhDdHgpLCBkd1RlbXApOworICAgICAgICBKQklHMl9tZW1zZXQoZ2JDb250ZXh0LCAwLCBzaXplb2YoSkJpZzJBcml0aEN0eCkqZHdUZW1wKTsKKyAgICAgICAgSkJJRzJfQUxMT0MocEFyaXRoRGVjb2RlciwgQ0pCaWcyX0FyaXRoRGVjb2RlcihtX3BTdHJlYW0pKTsKKyAgICAgICAgcFNlZ21lbnQtPm1fUmVzdWx0LnBkID0gcFBERC0+ZGVjb2RlX0FyaXRoKHBBcml0aERlY29kZXIsIGdiQ29udGV4dCwgcFBhdXNlKTsKKyAgICAgICAgZGVsZXRlIHBBcml0aERlY29kZXI7CisgICAgICAgIGlmKHBTZWdtZW50LT5tX1Jlc3VsdC5wZCA9PSBOVUxMKSB7CisgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoZ2JDb250ZXh0KTsKKyAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9GRVRBTDsKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShnYkNvbnRleHQpOworICAgICAgICBtX3BTdHJlYW0tPmFsaWduQnl0ZSgpOworICAgICAgICBtX3BTdHJlYW0tPm9mZnNldCgyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwU2VnbWVudC0+bV9SZXN1bHQucGQgPSBwUERELT5kZWNvZGVfTU1SKG1fcFN0cmVhbSwgcFBhdXNlKTsKKyAgICAgICAgaWYocFNlZ21lbnQtPm1fUmVzdWx0LnBkID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9GRVRBTDsKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisgICAgICAgIG1fcFN0cmVhbS0+YWxpZ25CeXRlKCk7CisgICAgfQorICAgIGRlbGV0ZSBwUEREOworICAgIHJldHVybiBKQklHMl9TVUNDRVNTOworZmFpbGVkOgorICAgIGRlbGV0ZSBwUEREOworICAgIHJldHVybiBuUmV0OworfQorRlhfQk9PTCBDSkJpZzJfQ29udGV4dDo6cGFyc2VIYWxmdG9uZVJlZ2lvbihDSkJpZzJfU2VnbWVudCAqcFNlZ21lbnQsIElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIEZYX0RXT1JEIGR3VGVtcDsKKyAgICBGWF9CWVRFIGNGbGFnczsKKyAgICBKQmlnMlJlZ2lvbkluZm8gcmk7CisgICAgQ0pCaWcyX1NlZ21lbnQgKnBTZWc7CisgICAgQ0pCaWcyX1BhdHRlcm5EaWN0ICpwUGF0dGVybkRpY3Q7CisgICAgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0OworICAgIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXI7CisgICAgQ0pCaWcyX0hUUkRQcm9jICpwSFJEOworICAgIEZYX0lOVDMyIG5SZXQ7CisgICAgSkJJRzJfQUxMT0MocEhSRCwgQ0pCaWcyX0hUUkRQcm9jKCkpOworICAgIGlmKChwYXJzZVJlZ2lvbkluZm8oJnJpKSAhPSBKQklHMl9TVUNDRVNTKQorICAgICAgICAgICAgfHwgKG1fcFN0cmVhbS0+cmVhZDFCeXRlKCZjRmxhZ3MpICE9IDApCisgICAgICAgICAgICB8fCAobV9wU3RyZWFtLT5yZWFkSW50ZWdlcigmcEhSRC0+SEdXKSAhPSAwKQorICAgICAgICAgICAgfHwgKG1fcFN0cmVhbS0+cmVhZEludGVnZXIoJnBIUkQtPkhHSCkgIT0gMCkKKyAgICAgICAgICAgIHx8IChtX3BTdHJlYW0tPnJlYWRJbnRlZ2VyKChGWF9EV09SRCopJnBIUkQtPkhHWCkgIT0gMCkKKyAgICAgICAgICAgIHx8IChtX3BTdHJlYW0tPnJlYWRJbnRlZ2VyKChGWF9EV09SRCopJnBIUkQtPkhHWSkgIT0gMCkKKyAgICAgICAgICAgIHx8IChtX3BTdHJlYW0tPnJlYWRTaG9ydEludGVnZXIoJnBIUkQtPkhSWCkgIT0gMCkKKyAgICAgICAgICAgIHx8IChtX3BTdHJlYW0tPnJlYWRTaG9ydEludGVnZXIoJnBIUkQtPkhSWSkgIT0gMCkpIHsKKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiaGFsZnRvbmUgcmVnaW9uIHNlZ21lbnQgOiBkYXRhIGhlYWRlciB0b28gc2hvcnQuIik7CisgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9UT09fU0hPUlQ7CisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKyAgICBwSFJELT5IQlcgPSByaS53aWR0aDsKKyAgICBwSFJELT5IQkggPSByaS5oZWlnaHQ7CisgICAgcEhSRC0+SE1NUiA9IGNGbGFncyAmIDB4MDE7CisgICAgcEhSRC0+SFRFTVBMQVRFID0gKGNGbGFncyA+PiAxKSAmIDB4MDM7CisgICAgcEhSRC0+SEVOQUJMRVNLSVAgPSAoY0ZsYWdzID4+IDMpICYgMHgwMTsKKyAgICBwSFJELT5IQ09NQk9QID0gKEpCaWcyQ29tcG9zZU9wKSgoY0ZsYWdzID4+IDQpICYgMHgwNyk7CisgICAgcEhSRC0+SERFRlBJWEVMID0gKGNGbGFncyA+PiA3KSAmIDB4MDE7CisgICAgaWYocFNlZ21lbnQtPm1fblJlZmVycmVkX3RvX3NlZ21lbnRfY291bnQgIT0gMSkgeworICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJoYWxmdG9uZSByZWdpb24gc2VnbWVudCA6IHJlZmVyZWQgdG8gc2VnbWVudCBjb3VudCBub3QgZXF1YWxzIDEiKTsKKyAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0ZFVEFMOworICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9CisgICAgcFNlZyA9IGZpbmRTZWdtZW50QnlOdW1iZXIocFNlZ21lbnQtPm1fcFJlZmVycmVkX3RvX3NlZ21lbnRfbnVtYmVyc1swXSk7CisgICAgaWYoIChwU2VnID09IE5VTEwpIHx8IChwU2VnLT5tX2NGbGFncy5zLnR5cGUgIT0gMTYpKSB7CisgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoImhhbGZ0b25lIHJlZ2lvbiBzZWdtZW50IDogcmVmZXJlZCB0byBzZWdtZW50IGlzIG5vdCBwYXR0ZXJuIGRpY3QiKTsKKyAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0ZFVEFMOworICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9CisgICAgcFBhdHRlcm5EaWN0ID0gcFNlZy0+bV9SZXN1bHQucGQ7CisgICAgaWYoKHBQYXR0ZXJuRGljdCA9PSBOVUxMKSB8fCAocFBhdHRlcm5EaWN0LT5OVU1QQVRTID09IDApKSB7CisgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoImhhbGZ0b25lIHJlZ2lvbiBzZWdtZW50IDogaGFzIG5vIHBhdHRlcm5zIGlucHV0Iik7CisgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9GRVRBTDsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIHBIUkQtPkhOVU1QQVRTID0gcFBhdHRlcm5EaWN0LT5OVU1QQVRTOworICAgIHBIUkQtPkhQQVRTID0gcFBhdHRlcm5EaWN0LT5IRFBBVFM7CisgICAgcEhSRC0+SFBXID0gcFBhdHRlcm5EaWN0LT5IRFBBVFNbMF0tPm1fbldpZHRoOworICAgIHBIUkQtPkhQSCA9IHBQYXR0ZXJuRGljdC0+SERQQVRTWzBdLT5tX25IZWlnaHQ7CisgICAgcFNlZ21lbnQtPm1fblJlc3VsdFR5cGUgPSBKQklHMl9JTUFHRV9QT0lOVEVSOworICAgIGlmKHBIUkQtPkhNTVIgPT0gMCkgeworICAgICAgICBkd1RlbXAgPSBwSFJELT5IVEVNUExBVEUgPT0gMCA/IDY1NTM2IDogcEhSRC0+SFRFTVBMQVRFID09IDEgPyA4MTkyIDogMTAyNDsKKyAgICAgICAgZ2JDb250ZXh0ID0gKEpCaWcyQXJpdGhDdHgqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihzaXplb2YoSkJpZzJBcml0aEN0eCksIGR3VGVtcCk7CisgICAgICAgIEpCSUcyX21lbXNldChnYkNvbnRleHQsIDAsIHNpemVvZihKQmlnMkFyaXRoQ3R4KSpkd1RlbXApOworICAgICAgICBKQklHMl9BTExPQyhwQXJpdGhEZWNvZGVyLCBDSkJpZzJfQXJpdGhEZWNvZGVyKG1fcFN0cmVhbSkpOworICAgICAgICBwU2VnbWVudC0+bV9SZXN1bHQuaW0gPSBwSFJELT5kZWNvZGVfQXJpdGgocEFyaXRoRGVjb2RlciwgZ2JDb250ZXh0LCBwUGF1c2UpOworICAgICAgICBkZWxldGUgcEFyaXRoRGVjb2RlcjsKKyAgICAgICAgaWYocFNlZ21lbnQtPm1fUmVzdWx0LmltID09IE5VTEwpIHsKKyAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShnYkNvbnRleHQpOworICAgICAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0ZFVEFMOworICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIH0KKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKGdiQ29udGV4dCk7CisgICAgICAgIG1fcFN0cmVhbS0+YWxpZ25CeXRlKCk7CisgICAgICAgIG1fcFN0cmVhbS0+b2Zmc2V0KDIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHBTZWdtZW50LT5tX1Jlc3VsdC5pbSA9IHBIUkQtPmRlY29kZV9NTVIobV9wU3RyZWFtLCBwUGF1c2UpOworICAgICAgICBpZihwU2VnbWVudC0+bV9SZXN1bHQuaW0gPT0gTlVMTCkgeworICAgICAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0ZFVEFMOworICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIH0KKyAgICAgICAgbV9wU3RyZWFtLT5hbGlnbkJ5dGUoKTsKKyAgICB9CisgICAgaWYocFNlZ21lbnQtPm1fY0ZsYWdzLnMudHlwZSAhPSAyMCkgeworICAgICAgICBpZighbV9iQnVmU3BlY2lmaWVkKSB7CisgICAgICAgICAgICBKQmlnMlBhZ2VJbmZvICpwUGFnZUluZm8gPSBtX3BQYWdlSW5mb0xpc3QtPmdldExhc3QoKTsKKyAgICAgICAgICAgIGlmICgocFBhZ2VJbmZvLT5tX2JJc1N0cmlwZWQgPT0gMSkgJiYgKHJpLnkgKyByaS5oZWlnaHQgPiBtX3BQYWdlLT5tX25IZWlnaHQpKSB7CisgICAgICAgICAgICAgICAgbV9wUGFnZS0+ZXhwYW5kKHJpLnkgKyByaS5oZWlnaHQsIChwUGFnZUluZm8tPm1fY0ZsYWdzICYgNCkgPyAxIDogMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9wUGFnZS0+Y29tcG9zZUZyb20ocmkueCwgcmkueSwgcFNlZ21lbnQtPm1fUmVzdWx0LmltLCAoSkJpZzJDb21wb3NlT3ApKHJpLmZsYWdzICYgMHgwMykpOworICAgICAgICBkZWxldGUgcFNlZ21lbnQtPm1fUmVzdWx0LmltOworICAgICAgICBwU2VnbWVudC0+bV9SZXN1bHQuaW0gPSBOVUxMOworICAgIH0KKyAgICBkZWxldGUgcEhSRDsKKyAgICByZXR1cm4gSkJJRzJfU1VDQ0VTUzsKK2ZhaWxlZDoKKyAgICBkZWxldGUgcEhSRDsKKyAgICByZXR1cm4gblJldDsKK30KKworRlhfQk9PTCBDSkJpZzJfQ29udGV4dDo6cGFyc2VHZW5lcmljUmVnaW9uKENKQmlnMl9TZWdtZW50ICpwU2VnbWVudCwgSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgRlhfRFdPUkQgZHdUZW1wOworICAgIEZYX0JZVEUgY0ZsYWdzOworICAgIEZYX0lOVDMyIGksIG5SZXQ7CisgICAgaWYobV9wR1JEID09IE5VTEwpIHsKKyAgICAgICAgSkJJRzJfQUxMT0MobV9wR1JELCBDSkJpZzJfR1JEUHJvYygpKTsKKyAgICAgICAgaWYoKHBhcnNlUmVnaW9uSW5mbygmbV9yaSkgIT0gSkJJRzJfU1VDQ0VTUykKKyAgICAgICAgICAgICAgICB8fCAobV9wU3RyZWFtLT5yZWFkMUJ5dGUoJmNGbGFncykgIT0gMCkpIHsKKyAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoImdlbmVyaWMgcmVnaW9uIHNlZ21lbnQgOiBkYXRhIGhlYWRlciB0b28gc2hvcnQuIik7CisgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfVE9PX1NIT1JUOworICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fcmkuaGVpZ2h0IDwgMCB8fCBtX3JpLndpZHRoIDwgMCkgeworICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiZ2VuZXJpYyByZWdpb24gc2VnbWVudCA6IHdyb25nIGRhdGEuIik7CisgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRkFJTEVEOworICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIH0KKyAgICAgICAgbV9wR1JELT5HQlcgPSBtX3JpLndpZHRoOworICAgICAgICBtX3BHUkQtPkdCSCA9IG1fcmkuaGVpZ2h0OworICAgICAgICBtX3BHUkQtPk1NUiA9IGNGbGFncyAmIDB4MDE7CisgICAgICAgIG1fcEdSRC0+R0JURU1QTEFURSA9IChjRmxhZ3MgPj4gMSkgJiAweDAzOworICAgICAgICBtX3BHUkQtPlRQR0RPTiA9IChjRmxhZ3MgPj4gMykgJiAweDAxOworICAgICAgICBpZihtX3BHUkQtPk1NUiA9PSAwKSB7CisgICAgICAgICAgICBpZihtX3BHUkQtPkdCVEVNUExBVEUgPT0gMCkgeworICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IDg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZihtX3BTdHJlYW0tPnJlYWQxQnl0ZSgoRlhfQllURSopJm1fcEdSRC0+R0JBVFtpXSkgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiZ2VuZXJpYyByZWdpb24gc2VnbWVudCA6IGRhdGEgaGVhZGVyIHRvbyBzaG9ydC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9UT09fU0hPUlQ7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmKG1fcFN0cmVhbS0+cmVhZDFCeXRlKChGWF9CWVRFKikmbV9wR1JELT5HQkFUW2ldKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJnZW5lcmljIHJlZ2lvbiBzZWdtZW50IDogZGF0YSBoZWFkZXIgdG9vIHNob3J0LiIpOworICAgICAgICAgICAgICAgICAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX1RPT19TSE9SVDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fcEdSRC0+VVNFU0tJUCA9IDA7CisgICAgfQorICAgIHBTZWdtZW50LT5tX25SZXN1bHRUeXBlID0gSkJJRzJfSU1BR0VfUE9JTlRFUjsKKyAgICBpZihtX3BHUkQtPk1NUiA9PSAwKSB7CisgICAgICAgIGR3VGVtcCA9IG1fcEdSRC0+R0JURU1QTEFURSA9PSAwID8gNjU1MzYgOiBtX3BHUkQtPkdCVEVNUExBVEUgPT0gMSA/IDgxOTIgOiAxMDI0OworICAgICAgICBpZihtX2diQ29udGV4dCA9PSBOVUxMKSB7CisgICAgICAgICAgICBtX2diQ29udGV4dCA9IChKQmlnMkFyaXRoQ3R4KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYyhzaXplb2YoSkJpZzJBcml0aEN0eCkgKiBkd1RlbXApOworICAgICAgICAgICAgSkJJRzJfbWVtc2V0KG1fZ2JDb250ZXh0LCAwLCBzaXplb2YoSkJpZzJBcml0aEN0eCkqZHdUZW1wKTsKKyAgICAgICAgfQorICAgICAgICBpZihtX3BBcml0aERlY29kZXIgPT0gTlVMTCkgeworICAgICAgICAgICAgSkJJRzJfQUxMT0MobV9wQXJpdGhEZWNvZGVyLCBDSkJpZzJfQXJpdGhEZWNvZGVyKG1fcFN0cmVhbSkpOworICAgICAgICAgICAgbV9Qcm9jZXNzaXZlU3RhdHVzID0gbV9wR1JELT5TdGFydF9kZWNvZGVfQXJpdGgoJnBTZWdtZW50LT5tX1Jlc3VsdC5pbSwgbV9wQXJpdGhEZWNvZGVyLCBtX2diQ29udGV4dCwgcFBhdXNlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fUHJvY2Vzc2l2ZVN0YXR1cyA9IG1fcEdSRC0+Q29udGludWVfZGVjb2RlKHBQYXVzZSk7CisgICAgICAgIH0KKyAgICAgICAgT3V0cHV0Qml0bWFwKHBTZWdtZW50LT5tX1Jlc3VsdC5pbSk7CisgICAgICAgIGlmKG1fUHJvY2Vzc2l2ZVN0YXR1cyA9PSBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFKSB7CisgICAgICAgICAgICBpZihwU2VnbWVudC0+bV9jRmxhZ3Mucy50eXBlICE9IDM2KSB7CisgICAgICAgICAgICAgICAgaWYoIW1fYkJ1ZlNwZWNpZmllZCkgeworICAgICAgICAgICAgICAgICAgICBKQmlnMlBhZ2VJbmZvICpwUGFnZUluZm8gPSBtX3BQYWdlSW5mb0xpc3QtPmdldExhc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChwUGFnZUluZm8tPm1fYklzU3RyaXBlZCA9PSAxKSAmJiAobV9yaS55ICsgbV9yaS5oZWlnaHQgPiBtX3BQYWdlLT5tX25IZWlnaHQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BQYWdlLT5leHBhbmQobV9yaS55ICsgbV9yaS5oZWlnaHQsIChwUGFnZUluZm8tPm1fY0ZsYWdzICYgNCkgPyAxIDogMCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRlhfUkVDVCBSZWN0ID0gbV9wR1JELT5HZXRSZXBsYWNlUmVjdCgpOworICAgICAgICAgICAgICAgIG1fcFBhZ2UtPmNvbXBvc2VGcm9tKG1fcmkueCArIFJlY3QubGVmdCwgbV9yaS55ICsgUmVjdC50b3AsIHBTZWdtZW50LT5tX1Jlc3VsdC5pbSwgKEpCaWcyQ29tcG9zZU9wKShtX3JpLmZsYWdzICYgMHgwMyksICZSZWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBKQklHMl9TVUNDRVNTOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVsZXRlIG1fcEFyaXRoRGVjb2RlcjsKKyAgICAgICAgICAgIG1fcEFyaXRoRGVjb2RlciA9IE5VTEw7CisgICAgICAgICAgICBpZihwU2VnbWVudC0+bV9SZXN1bHQuaW0gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShtX2diQ29udGV4dCk7CisgICAgICAgICAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0ZFVEFMOworICAgICAgICAgICAgICAgIG1fZ2JDb250ZXh0ID0gTlVMTDsKKyAgICAgICAgICAgICAgICBtX1Byb2Nlc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19FUlJPUjsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShtX2diQ29udGV4dCk7CisgICAgICAgICAgICBtX2diQ29udGV4dCA9IE5VTEw7CisgICAgICAgICAgICBtX3BTdHJlYW0tPmFsaWduQnl0ZSgpOworICAgICAgICAgICAgbV9wU3RyZWFtLT5vZmZzZXQoMik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBGWENPREVDX1NUQVRVUyBzdGF0dXMgPSBtX3BHUkQtPlN0YXJ0X2RlY29kZV9NTVIoJnBTZWdtZW50LT5tX1Jlc3VsdC5pbSwgbV9wU3RyZWFtLCBwUGF1c2UpOworICAgICAgICB3aGlsZShzdGF0dXMgPT0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRSkgeworICAgICAgICAgICAgbV9wR1JELT5Db250aW51ZV9kZWNvZGUocFBhdXNlKTsKKyAgICAgICAgfQorICAgICAgICBpZihwU2VnbWVudC0+bV9SZXN1bHQuaW0gPT0gTlVMTCkgeworICAgICAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0ZFVEFMOworICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIH0KKyAgICAgICAgbV9wU3RyZWFtLT5hbGlnbkJ5dGUoKTsKKyAgICB9CisgICAgaWYocFNlZ21lbnQtPm1fY0ZsYWdzLnMudHlwZSAhPSAzNikgeworICAgICAgICBpZighbV9iQnVmU3BlY2lmaWVkKSB7CisgICAgICAgICAgICBKQmlnMlBhZ2VJbmZvICpwUGFnZUluZm8gPSBtX3BQYWdlSW5mb0xpc3QtPmdldExhc3QoKTsKKyAgICAgICAgICAgIGlmICgocFBhZ2VJbmZvLT5tX2JJc1N0cmlwZWQgPT0gMSkgJiYgKG1fcmkueSArIG1fcmkuaGVpZ2h0ID4gbV9wUGFnZS0+bV9uSGVpZ2h0KSkgeworICAgICAgICAgICAgICAgIG1fcFBhZ2UtPmV4cGFuZChtX3JpLnkgKyBtX3JpLmhlaWdodCwgKHBQYWdlSW5mby0+bV9jRmxhZ3MgJiA0KSA/IDEgOiAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBGWF9SRUNUIFJlY3QgPSBtX3BHUkQtPkdldFJlcGxhY2VSZWN0KCk7CisgICAgICAgIG1fcFBhZ2UtPmNvbXBvc2VGcm9tKG1fcmkueCArIFJlY3QubGVmdCwgbV9yaS55ICsgUmVjdC50b3AsIHBTZWdtZW50LT5tX1Jlc3VsdC5pbSwgKEpCaWcyQ29tcG9zZU9wKShtX3JpLmZsYWdzICYgMHgwMyksICZSZWN0KTsKKyAgICAgICAgZGVsZXRlIHBTZWdtZW50LT5tX1Jlc3VsdC5pbTsKKyAgICAgICAgcFNlZ21lbnQtPm1fUmVzdWx0LmltID0gTlVMTDsKKyAgICB9CisgICAgZGVsZXRlIG1fcEdSRDsKKyAgICBtX3BHUkQgPSBOVUxMOworICAgIHJldHVybiBKQklHMl9TVUNDRVNTOworZmFpbGVkOgorICAgIGRlbGV0ZSBtX3BHUkQ7CisgICAgbV9wR1JEID0gTlVMTDsKKyAgICByZXR1cm4gblJldDsKK30KKworRlhfQk9PTCBDSkJpZzJfQ29udGV4dDo6cGFyc2VHZW5lcmljUmVmaW5lbWVudFJlZ2lvbihDSkJpZzJfU2VnbWVudCAqcFNlZ21lbnQpCit7CisgICAgRlhfRFdPUkQgZHdUZW1wOworICAgIEpCaWcyUmVnaW9uSW5mbyByaTsKKyAgICBDSkJpZzJfU2VnbWVudCAqcFNlZzsKKyAgICBGWF9JTlQzMiBpLCBuUmV0OworICAgIEZYX0JZVEUgY0ZsYWdzOworICAgIEpCaWcyQXJpdGhDdHggKmdyQ29udGV4dDsKKyAgICBDSkJpZzJfR1JSRFByb2MgKnBHUlJEOworICAgIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXI7CisgICAgSkJJRzJfQUxMT0MocEdSUkQsIENKQmlnMl9HUlJEUHJvYygpKTsKKyAgICBpZigocGFyc2VSZWdpb25JbmZvKCZyaSkgIT0gSkJJRzJfU1VDQ0VTUykKKyAgICAgICAgICAgIHx8IChtX3BTdHJlYW0tPnJlYWQxQnl0ZSgmY0ZsYWdzKSAhPSAwKSkgeworICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJnZW5lcmljIHJlZmluZW1lbnQgcmVnaW9uIHNlZ21lbnQgOiBkYXRhIGhlYWRlciB0b28gc2hvcnQuIik7CisgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9UT09fU0hPUlQ7CisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKyAgICBwR1JSRC0+R1JXID0gcmkud2lkdGg7CisgICAgcEdSUkQtPkdSSCA9IHJpLmhlaWdodDsKKyAgICBwR1JSRC0+R1JURU1QTEFURSA9IGNGbGFncyAmIDB4MDE7CisgICAgcEdSUkQtPlRQR1JPTiA9IChjRmxhZ3MgPj4gMSkgJiAweDAxOworICAgIGlmKHBHUlJELT5HUlRFTVBMQVRFID09IDApIHsKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgICAgICBpZihtX3BTdHJlYW0tPnJlYWQxQnl0ZSgoRlhfQllURSopJnBHUlJELT5HUkFUW2ldKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiZ2VuZXJpYyByZWZpbmVtZW50IHJlZ2lvbiBzZWdtZW50IDogZGF0YSBoZWFkZXIgdG9vIHNob3J0LiIpOworICAgICAgICAgICAgICAgIG5SZXQgPSBKQklHMl9FUlJPUl9UT09fU0hPUlQ7CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcFNlZyA9IE5VTEw7CisgICAgaWYocFNlZ21lbnQtPm1fblJlZmVycmVkX3RvX3NlZ21lbnRfY291bnQgPiAwKSB7CisgICAgICAgIGZvcihpID0gMDsgaSA8IHBTZWdtZW50LT5tX25SZWZlcnJlZF90b19zZWdtZW50X2NvdW50OyBpKyspIHsKKyAgICAgICAgICAgIHBTZWcgPSB0aGlzLT5maW5kU2VnbWVudEJ5TnVtYmVyKHBTZWdtZW50LT5tX3BSZWZlcnJlZF90b19zZWdtZW50X251bWJlcnNbMF0pOworICAgICAgICAgICAgaWYocFNlZyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiZ2VuZXJpYyByZWZpbmVtZW50IHJlZ2lvbiBzZWdtZW50IDogY2FuJ3QgZmluZCByZWZlcmVkIHRvIHNlZ21lbnRzIik7CisgICAgICAgICAgICAgICAgblJldCA9IEpCSUcyX0VSUk9SX0ZFVEFMOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoKHBTZWctPm1fY0ZsYWdzLnMudHlwZSA9PSA0KSB8fCAocFNlZy0+bV9jRmxhZ3Mucy50eXBlID09IDIwKQorICAgICAgICAgICAgICAgICAgICB8fCAocFNlZy0+bV9jRmxhZ3Mucy50eXBlID09IDM2KSB8fCAocFNlZy0+bV9jRmxhZ3Mucy50eXBlID09IDQwKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmKGkgPj0gcFNlZ21lbnQtPm1fblJlZmVycmVkX3RvX3NlZ21lbnRfY291bnQpIHsKKyAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoImdlbmVyaWMgcmVmaW5lbWVudCByZWdpb24gc2VnbWVudCA6IGNhbid0IGZpbmQgcmVmZXJlZCB0byBpbnRlcm1lZGlhdGUgcmVnaW9uIik7CisgICAgICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7CisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgfQorICAgICAgICBwR1JSRC0+R1JSRUZFUkVOQ0UgPSBwU2VnLT5tX1Jlc3VsdC5pbTsKKyAgICB9IGVsc2UgeworICAgICAgICBwR1JSRC0+R1JSRUZFUkVOQ0UgPSBtX3BQYWdlOworICAgIH0KKyAgICBwR1JSRC0+R1JSRUZFUkVOQ0VEWCA9IDA7CisgICAgcEdSUkQtPkdSUkVGRVJFTkNFRFkgPSAwOworICAgIGR3VGVtcCA9IHBHUlJELT5HUlRFTVBMQVRFID8gMSA8PCAxMCA6IDEgPDwgMTM7CisgICAgZ3JDb250ZXh0ID0gKEpCaWcyQXJpdGhDdHgqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihzaXplb2YoSkJpZzJBcml0aEN0eCksIGR3VGVtcCk7CisgICAgSkJJRzJfbWVtc2V0KGdyQ29udGV4dCwgMCwgc2l6ZW9mKEpCaWcyQXJpdGhDdHgpKmR3VGVtcCk7CisgICAgSkJJRzJfQUxMT0MocEFyaXRoRGVjb2RlciwgQ0pCaWcyX0FyaXRoRGVjb2RlcihtX3BTdHJlYW0pKTsKKyAgICBwU2VnbWVudC0+bV9uUmVzdWx0VHlwZSA9IEpCSUcyX0lNQUdFX1BPSU5URVI7CisgICAgcFNlZ21lbnQtPm1fUmVzdWx0LmltID0gcEdSUkQtPmRlY29kZShwQXJpdGhEZWNvZGVyLCBnckNvbnRleHQpOworICAgIGRlbGV0ZSBwQXJpdGhEZWNvZGVyOworICAgIGlmKHBTZWdtZW50LT5tX1Jlc3VsdC5pbSA9PSBOVUxMKSB7CisgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShnckNvbnRleHQpOworICAgICAgICBuUmV0ID0gSkJJRzJfRVJST1JfRkVUQUw7CisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKyAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoZ3JDb250ZXh0KTsKKyAgICBtX3BTdHJlYW0tPmFsaWduQnl0ZSgpOworICAgIG1fcFN0cmVhbS0+b2Zmc2V0KDIpOworICAgIGlmKHBTZWdtZW50LT5tX2NGbGFncy5zLnR5cGUgIT0gNDApIHsKKyAgICAgICAgaWYoIW1fYkJ1ZlNwZWNpZmllZCkgeworICAgICAgICAgICAgSkJpZzJQYWdlSW5mbyAqcFBhZ2VJbmZvID0gbV9wUGFnZUluZm9MaXN0LT5nZXRMYXN0KCk7CisgICAgICAgICAgICBpZiAoKHBQYWdlSW5mby0+bV9iSXNTdHJpcGVkID09IDEpICYmIChyaS55ICsgcmkuaGVpZ2h0ID4gbV9wUGFnZS0+bV9uSGVpZ2h0KSkgeworICAgICAgICAgICAgICAgIG1fcFBhZ2UtPmV4cGFuZChyaS55ICsgcmkuaGVpZ2h0LCAocFBhZ2VJbmZvLT5tX2NGbGFncyAmIDQpID8gMSA6IDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fcFBhZ2UtPmNvbXBvc2VGcm9tKHJpLngsIHJpLnksIHBTZWdtZW50LT5tX1Jlc3VsdC5pbSwgKEpCaWcyQ29tcG9zZU9wKShyaS5mbGFncyAmIDB4MDMpKTsKKyAgICAgICAgZGVsZXRlIHBTZWdtZW50LT5tX1Jlc3VsdC5pbTsKKyAgICAgICAgcFNlZ21lbnQtPm1fUmVzdWx0LmltID0gTlVMTDsKKyAgICB9CisgICAgZGVsZXRlIHBHUlJEOworICAgIHJldHVybiBKQklHMl9TVUNDRVNTOworZmFpbGVkOgorICAgIGRlbGV0ZSBwR1JSRDsKKyAgICByZXR1cm4gblJldDsKK30KK0ZYX0JPT0wgQ0pCaWcyX0NvbnRleHQ6OnBhcnNlVGFibGUoQ0pCaWcyX1NlZ21lbnQgKnBTZWdtZW50KQoreworICAgIHBTZWdtZW50LT5tX25SZXN1bHRUeXBlID0gSkJJRzJfSFVGRk1BTl9UQUJMRV9QT0lOVEVSOworICAgIEpCSUcyX0FMTE9DKHBTZWdtZW50LT5tX1Jlc3VsdC5odCwgQ0pCaWcyX0h1ZmZtYW5UYWJsZShtX3BTdHJlYW0pKTsKKyAgICBpZighcFNlZ21lbnQtPm1fUmVzdWx0Lmh0LT5pc09LKCkpIHsKKyAgICAgICAgZGVsZXRlIHBTZWdtZW50LT5tX1Jlc3VsdC5odDsKKyAgICAgICAgcFNlZ21lbnQtPm1fUmVzdWx0Lmh0ID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIEpCSUcyX0VSUk9SX0ZFVEFMOworICAgIH0KKyAgICBtX3BTdHJlYW0tPmFsaWduQnl0ZSgpOworICAgIHJldHVybiBKQklHMl9TVUNDRVNTOworfQorRlhfSU5UMzIgQ0pCaWcyX0NvbnRleHQ6OnBhcnNlUmVnaW9uSW5mbyhKQmlnMlJlZ2lvbkluZm8gKnBSSSkKK3sKKyAgICBpZigobV9wU3RyZWFtLT5yZWFkSW50ZWdlcigoRlhfRFdPUkQqKSZwUkktPndpZHRoKSAhPSAwKQorICAgICAgICAgICAgfHwgKG1fcFN0cmVhbS0+cmVhZEludGVnZXIoKEZYX0RXT1JEKikmcFJJLT5oZWlnaHQpICE9IDApCisgICAgICAgICAgICB8fCAobV9wU3RyZWFtLT5yZWFkSW50ZWdlcigoRlhfRFdPUkQqKSZwUkktPngpICE9IDApCisgICAgICAgICAgICB8fCAobV9wU3RyZWFtLT5yZWFkSW50ZWdlcigoRlhfRFdPUkQqKSZwUkktPnkpICE9IDApCisgICAgICAgICAgICB8fCAobV9wU3RyZWFtLT5yZWFkMUJ5dGUoJnBSSS0+ZmxhZ3MpICE9IDApKSB7CisgICAgICAgIHJldHVybiBKQklHMl9FUlJPUl9UT09fU0hPUlQ7CisgICAgfQorICAgIHJldHVybiBKQklHMl9TVUNDRVNTOworfQorSkJpZzJIdWZmbWFuQ29kZSAqQ0pCaWcyX0NvbnRleHQ6OmRlY29kZVN5bWJvbElESHVmZm1hblRhYmxlKENKQmlnMl9CaXRTdHJlYW0gKnBTdHJlYW0sCisgICAgICAgIEZYX0RXT1JEIFNCTlVNU1lNUykKK3sKKyAgICBKQmlnMkh1ZmZtYW5Db2RlICpTQlNZTUNPREVTOworICAgIEZYX0lOVDMyIHJ1bmNvZGVzWzM1XSwgcnVuY29kZXNfbGVuWzM1XSwgcnVuY29kZTsKKyAgICBGWF9JTlQzMiBpLCBqLCBuVGVtcCwgblZhbCwgbkJpdHM7CisgICAgRlhfSU5UMzIgcnVuOworICAgIFNCU1lNQ09ERVMgPSAoSkJpZzJIdWZmbWFuQ29kZSopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihKQmlnMkh1ZmZtYW5Db2RlKSwgU0JOVU1TWU1TKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMzU7IGkgKyspIHsKKyAgICAgICAgaWYocFN0cmVhbS0+cmVhZE5CaXRzKDQsICZydW5jb2Rlc19sZW5baV0pICE9IDApIHsKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisgICAgfQorICAgIGh1ZmZtYW5fYXNzaWduX2NvZGUocnVuY29kZXMsIHJ1bmNvZGVzX2xlbiwgMzUpOworICAgIGkgPSAwOworICAgIHdoaWxlKGkgPCAoaW50KVNCTlVNU1lNUykgeworICAgICAgICBuVmFsID0gMDsKKyAgICAgICAgbkJpdHMgPSAwOworICAgICAgICBmb3IoOzspIHsKKyAgICAgICAgICAgIGlmKHBTdHJlYW0tPnJlYWQxQml0KCZuVGVtcCkgIT0gMCkgeworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgblZhbCA9IChuVmFsIDw8IDEpIHwgblRlbXA7CisgICAgICAgICAgICBuQml0cyArKzsKKyAgICAgICAgICAgIGZvcihqID0gMDsgaiA8IDM1OyBqKyspIHsKKyAgICAgICAgICAgICAgICBpZigobkJpdHMgPT0gcnVuY29kZXNfbGVuW2pdKSAmJiAoblZhbCA9PSBydW5jb2Rlc1tqXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoaiA8IDM1KSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcnVuY29kZSA9IGo7CisgICAgICAgIGlmKHJ1bmNvZGUgPCAzMikgeworICAgICAgICAgICAgU0JTWU1DT0RFU1tpXS5jb2RlbGVuID0gcnVuY29kZTsKKyAgICAgICAgICAgIHJ1biA9IDA7CisgICAgICAgIH0gZWxzZSBpZihydW5jb2RlID09IDMyKSB7CisgICAgICAgICAgICBpZihwU3RyZWFtLT5yZWFkTkJpdHMoMiwgJm5UZW1wKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBydW4gPSBuVGVtcCArIDM7CisgICAgICAgIH0gZWxzZSBpZihydW5jb2RlID09IDMzKSB7CisgICAgICAgICAgICBpZihwU3RyZWFtLT5yZWFkTkJpdHMoMywgJm5UZW1wKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBydW4gPSBuVGVtcCArIDM7CisgICAgICAgIH0gZWxzZSBpZihydW5jb2RlID09IDM0KSB7CisgICAgICAgICAgICBpZihwU3RyZWFtLT5yZWFkTkJpdHMoNywgJm5UZW1wKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBydW4gPSBuVGVtcCArIDExOworICAgICAgICB9CisgICAgICAgIGlmKHJ1biA+IDApIHsKKyAgICAgICAgICAgIGlmIChpICsgcnVuID4gKGludClTQk5VTVNZTVMpIHsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvcihqID0gMDsgaiA8IHJ1bjsgaisrKSB7CisgICAgICAgICAgICAgICAgaWYocnVuY29kZSA9PSAzMiAmJiBpID4gMCkgeworICAgICAgICAgICAgICAgICAgICBTQlNZTUNPREVTW2kgKyBqXS5jb2RlbGVuID0gU0JTWU1DT0RFU1tpIC0gMV0uY29kZWxlbjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBTQlNZTUNPREVTW2kgKyBqXS5jb2RlbGVuID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IHJ1bjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGkgKys7CisgICAgICAgIH0KKyAgICB9CisgICAgaHVmZm1hbl9hc3NpZ25fY29kZShTQlNZTUNPREVTLCBTQk5VTVNZTVMpOworICAgIHJldHVybiBTQlNZTUNPREVTOworZmFpbGVkOgorICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShTQlNZTUNPREVTKTsKKyAgICByZXR1cm4gTlVMTDsKK30KK3ZvaWQgQ0pCaWcyX0NvbnRleHQ6Omh1ZmZtYW5fYXNzaWduX2NvZGUoaW50KiBDT0RFUywgaW50KiBQUkVGTEVOLCBpbnQgTlRFTVApCit7CisgICAgaW50IENVUkxFTiwgTEVOTUFYLCBDVVJDT0RFLCBDVVJURU1QLCBpOworICAgIGludCAqTEVOQ09VTlQ7CisgICAgaW50ICpGSVJTVENPREU7CisgICAgTEVOTUFYID0gMDsKKyAgICBmb3IoaSA9IDA7IGkgPCBOVEVNUDsgaSsrKSB7CisgICAgICAgIGlmKFBSRUZMRU5baV0gPiBMRU5NQVgpIHsKKyAgICAgICAgICAgIExFTk1BWCA9IFBSRUZMRU5baV07CisgICAgICAgIH0KKyAgICB9CisgICAgTEVOQ09VTlQgPSAoaW50KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKGludCksIChMRU5NQVggKyAxKSk7CisgICAgSkJJRzJfbWVtc2V0KExFTkNPVU5ULCAwLCBzaXplb2YoaW50KSAqIChMRU5NQVggKyAxKSk7CisgICAgRklSU1RDT0RFID0gKGludCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihpbnQpLCAoTEVOTUFYICsgMSkpOworICAgIGZvcihpID0gMDsgaSA8IE5URU1QOyBpKyspIHsKKyAgICAgICAgTEVOQ09VTlRbUFJFRkxFTltpXV0gKys7CisgICAgfQorICAgIENVUkxFTiA9IDE7CisgICAgRklSU1RDT0RFWzBdID0gMDsKKyAgICBMRU5DT1VOVFswXSAgPSAwOworICAgIHdoaWxlKENVUkxFTiA8PSBMRU5NQVgpIHsKKyAgICAgICAgRklSU1RDT0RFW0NVUkxFTl0gPSAoRklSU1RDT0RFW0NVUkxFTiAtIDFdICsgTEVOQ09VTlRbQ1VSTEVOIC0gMV0pIDw8IDE7CisgICAgICAgIENVUkNPREUgPSBGSVJTVENPREVbQ1VSTEVOXTsKKyAgICAgICAgQ1VSVEVNUCA9IDA7CisgICAgICAgIHdoaWxlKENVUlRFTVAgPCBOVEVNUCkgeworICAgICAgICAgICAgaWYoUFJFRkxFTltDVVJURU1QXSA9PSBDVVJMRU4pIHsKKyAgICAgICAgICAgICAgICBDT0RFU1tDVVJURU1QXSA9IENVUkNPREU7CisgICAgICAgICAgICAgICAgQ1VSQ09ERSA9IENVUkNPREUgKyAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQ1VSVEVNUCA9IENVUlRFTVAgKyAxOworICAgICAgICB9CisgICAgICAgIENVUkxFTiA9IENVUkxFTiArIDE7CisgICAgfQorICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShMRU5DT1VOVCk7CisgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKEZJUlNUQ09ERSk7Cit9Cit2b2lkIENKQmlnMl9Db250ZXh0OjpodWZmbWFuX2Fzc2lnbl9jb2RlKEpCaWcySHVmZm1hbkNvZGUgKlNCU1lNQ09ERVMsIGludCBOVEVNUCkKK3sKKyAgICBpbnQgQ1VSTEVOLCBMRU5NQVgsIENVUkNPREUsIENVUlRFTVAsIGk7CisgICAgaW50ICpMRU5DT1VOVDsKKyAgICBpbnQgKkZJUlNUQ09ERTsKKyAgICBMRU5NQVggPSAwOworICAgIGZvcihpID0gMDsgaSA8IE5URU1QOyBpKyspIHsKKyAgICAgICAgaWYoU0JTWU1DT0RFU1tpXS5jb2RlbGVuID4gTEVOTUFYKSB7CisgICAgICAgICAgICBMRU5NQVggPSBTQlNZTUNPREVTW2ldLmNvZGVsZW47CisgICAgICAgIH0KKyAgICB9CisgICAgTEVOQ09VTlQgPSAoaW50KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKGludCksIChMRU5NQVggKyAxKSk7CisgICAgSkJJRzJfbWVtc2V0KExFTkNPVU5ULCAwLCBzaXplb2YoaW50KSAqIChMRU5NQVggKyAxKSk7CisgICAgRklSU1RDT0RFID0gKGludCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihpbnQpLCAoTEVOTUFYICsgMSkpOworICAgIGZvcihpID0gMDsgaSA8IE5URU1QOyBpKyspIHsKKyAgICAgICAgTEVOQ09VTlRbU0JTWU1DT0RFU1tpXS5jb2RlbGVuXSArKzsKKyAgICB9CisgICAgQ1VSTEVOID0gMTsKKyAgICBGSVJTVENPREVbMF0gPSAwOworICAgIExFTkNPVU5UWzBdICA9IDA7CisgICAgd2hpbGUoQ1VSTEVOIDw9IExFTk1BWCkgeworICAgICAgICBGSVJTVENPREVbQ1VSTEVOXSA9IChGSVJTVENPREVbQ1VSTEVOIC0gMV0gKyBMRU5DT1VOVFtDVVJMRU4gLSAxXSkgPDwgMTsKKyAgICAgICAgQ1VSQ09ERSA9IEZJUlNUQ09ERVtDVVJMRU5dOworICAgICAgICBDVVJURU1QID0gMDsKKyAgICAgICAgd2hpbGUoQ1VSVEVNUCA8IE5URU1QKSB7CisgICAgICAgICAgICBpZihTQlNZTUNPREVTW0NVUlRFTVBdLmNvZGVsZW4gPT0gQ1VSTEVOKSB7CisgICAgICAgICAgICAgICAgU0JTWU1DT0RFU1tDVVJURU1QXS5jb2RlID0gQ1VSQ09ERTsKKyAgICAgICAgICAgICAgICBDVVJDT0RFID0gQ1VSQ09ERSArIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDVVJURU1QID0gQ1VSVEVNUCArIDE7CisgICAgICAgIH0KKyAgICAgICAgQ1VSTEVOID0gQ1VSTEVOICsgMTsKKyAgICB9CisgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKExFTkNPVU5UKTsKKyAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoRklSU1RDT0RFKTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfQ29udGV4dC5oIGIvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9Db250ZXh0LmgKaW5kZXggMzY5ZGJhMy4uOTBiZDdkZCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9Db250ZXh0LmgKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9Db250ZXh0LmgKQEAgLTEsMTM1ICsxLDEzNSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfSkJJRzJfQ09OVEVYVF9IXw0KLSNkZWZpbmUgX0pCSUcyX0NPTlRFWFRfSF8NCi0jaW5jbHVkZSAiSkJpZzJfTW9kdWxlLmgiDQotI2luY2x1ZGUgIkpCaWcyX0xpc3QuaCINCi0jaW5jbHVkZSAiSkJpZzJfU2VnbWVudC5oIg0KLSNpbmNsdWRlICJKQmlnMl9QYWdlLmgiDQotI2luY2x1ZGUgIkpCaWcyX0dlbmVyYWxEZWNvZGVyLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjb2RlYy9meF9jb2RlY19kZWYuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNydC9meF9iYXNpYy5oIg0KLXR5cGVkZWYgZW51bSB7DQotICAgIEpCSUcyX09VVF9PRl9QQUdFID0gMCwNCi0gICAgSkJJRzJfSU5fUEFHRSwNCi19IEpCaWcyU3RhdGU7DQotI2RlZmluZSBKQklHMl9TVUNDRVNTCQkJIDANCi0jZGVmaW5lIEpCSUcyX0ZBSUxFRAkJCS0xDQotI2RlZmluZSBKQklHMl9FUlJPUl9UT09fU0hPUlQJLTINCi0jZGVmaW5lIEpCSUcyX0VSUk9SX0ZFVEFMCQktMw0KLSNkZWZpbmUgSkJJRzJfRU5EX09GX1BBR0UJCSAyDQotI2RlZmluZSBKQklHMl9FTkRfT0ZfRklMRQkJIDMNCi0jZGVmaW5lIEpCSUcyX0VSUk9SX0ZJTEVfRk9STUFUIC00DQotI2RlZmluZSBKQklHMl9FUlJPUl9TVFJFQU1fVFlQRSAtNQ0KLSNkZWZpbmUgSkJJRzJfRVJST1JfTElNSVQJCS02DQotI2RlZmluZSBKQklHMl9GSUxFX1NUUkVBTQkJCTANCi0jZGVmaW5lIEpCSUcyX1NRVUVOVElBTF9TVFJFQU0JCTENCi0jZGVmaW5lIEpCSUcyX1JBTkRPTV9TVFJFQU0JCQkyDQotI2RlZmluZSBKQklHMl9FTUJFRF9TVFJFQU0JCQkzDQotI2RlZmluZSBKQklHMl9NSU5fU0VHTUVOVF9TSVpFCQkJCQkxMQ0KLWNsYXNzIENKQmlnMl9Db250ZXh0IDogcHVibGljIENKQmlnMl9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBzdGF0aWMgQ0pCaWcyX0NvbnRleHQgKkNyZWF0ZUNvbnRleHQoQ0pCaWcyX01vZHVsZSAqcE1vZHVsZSwgRlhfQllURSAqcEdsb2JhbERhdGEsIEZYX0RXT1JEIGR3R2xvYmFsTGVuZ3RoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSAqcERhdGEsIEZYX0RXT1JEIGR3TGVuZ3RoLCBGWF9JTlQzMiBuU3RyZWFtVHlwZSwgSUZYX1BhdXNlKiBwUGF1c2UgPSBOVUxMKTsNCi0NCi0gICAgc3RhdGljIHZvaWQgRGVzdHJveUNvbnRleHQoQ0pCaWcyX0NvbnRleHQgKnBDb250ZXh0KTsNCi0NCi0gICAgRlhfSU5UMzIgZ2V0Rmlyc3RQYWdlKEZYX0JZVEUgKnBCdWYsIEZYX0lOVDMyIHdpZHRoLCBGWF9JTlQzMiBoZWlnaHQsIEZYX0lOVDMyIHN0cmlkZSwgSUZYX1BhdXNlKiBwUGF1c2UpOw0KLQ0KLSAgICBGWF9JTlQzMiBnZXROZXh0UGFnZShGWF9CWVRFICpwQnVmLCBGWF9JTlQzMiB3aWR0aCwgRlhfSU5UMzIgaGVpZ2h0LCBGWF9JTlQzMiBzdHJpZGUsIElGWF9QYXVzZSogcFBhdXNlKTsNCi0NCi0gICAgRlhfSU5UMzIgZ2V0Rmlyc3RQYWdlKENKQmlnMl9JbWFnZSAqKmltYWdlLCBJRlhfUGF1c2UqIHBQYXVzZSk7DQotDQotICAgIEZYX0lOVDMyIGdldE5leHRQYWdlKENKQmlnMl9JbWFnZSAqKmltYWdlLCBJRlhfUGF1c2UqIHBQYXVzZSk7DQotICAgIEZYX0lOVDMyIENvbnRpbnVlKElGWF9QYXVzZSogcFBhdXNlKTsNCi0gICAgRlhDT0RFQ19TVEFUVVMgR2V0UHJvY2Vzc2l2ZVN0YXR1cygpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX1Byb2Nlc3NpdmVTdGF0dXM7DQotICAgIH07DQotcHJpdmF0ZToNCi0NCi0gICAgQ0pCaWcyX0NvbnRleHQoRlhfQllURSAqcEdsb2JhbERhdGEsIEZYX0RXT1JEIGR3R2xvYmFsTGVuZ3RoLA0KLSAgICAgICAgICAgICAgICAgICBGWF9CWVRFICpwRGF0YSwgRlhfRFdPUkQgZHdMZW5ndGgsIEZYX0lOVDMyIG5TdHJlYW1UeXBlLCBJRlhfUGF1c2UqIHBQYXVzZSk7DQotDQotICAgIH5DSkJpZzJfQ29udGV4dCgpOw0KLQ0KLSAgICBGWF9JTlQzMiBkZWNvZGVGaWxlKElGWF9QYXVzZSogcFBhdXNlKTsNCi0NCi0gICAgRlhfSU5UMzIgZGVjb2RlX1NxdWVudGlhbE9yZ25hemF0aW9uKElGWF9QYXVzZSogcFBhdXNlKTsNCi0NCi0gICAgRlhfSU5UMzIgZGVjb2RlX0VtYmVkT3JnbmF6YXRpb24oSUZYX1BhdXNlKiBwUGF1c2UpOw0KLQ0KLSAgICBGWF9JTlQzMiBkZWNvZGVfUmFuZG9tT3JnbmF6YXRpb25fRmlyc3RQYWdlKElGWF9QYXVzZSogcFBhdXNlKTsNCi0NCi0gICAgRlhfSU5UMzIgZGVjb2RlX1JhbmRvbU9yZ25hemF0aW9uKElGWF9QYXVzZSogcFBhdXNlKTsNCi0NCi0gICAgQ0pCaWcyX1NlZ21lbnQgKmZpbmRTZWdtZW50QnlOdW1iZXIoRlhfRFdPUkQgZHdOdW1iZXIpOw0KLQ0KLSAgICBDSkJpZzJfU2VnbWVudCAqZmluZFJlZmVycmVkU2VnbWVudEJ5VHlwZUFuZEluZGV4KENKQmlnMl9TZWdtZW50ICpwU2VnbWVudCwgRlhfQllURSBjVHlwZSwgRlhfSU5UMzIgbkluZGV4KTsNCi0NCi0gICAgRlhfSU5UMzIgcGFyc2VTZWdtZW50SGVhZGVyKENKQmlnMl9TZWdtZW50ICpwU2VnbWVudCk7DQotDQotICAgIEZYX0lOVDMyIHBhcnNlU2VnbWVudERhdGEoQ0pCaWcyX1NlZ21lbnQgKnBTZWdtZW50LCBJRlhfUGF1c2UqIHBQYXVzZSk7DQotICAgIEZYX0lOVDMyIFByb2Nlc3NpdmVQYXJzZVNlZ21lbnREYXRhKENKQmlnMl9TZWdtZW50ICpwU2VnbWVudCwgSUZYX1BhdXNlKiBwUGF1c2UpOw0KLQ0KLSAgICBGWF9JTlQzMiBwYXJzZVN5bWJvbERpY3QoQ0pCaWcyX1NlZ21lbnQgKnBTZWdtZW50LCBJRlhfUGF1c2UqIHBQYXVzZSk7DQotDQotICAgIEZYX0lOVDMyIHBhcnNlVGV4dFJlZ2lvbihDSkJpZzJfU2VnbWVudCAqcFNlZ21lbnQpOw0KLQ0KLSAgICBGWF9JTlQzMiBwYXJzZVBhdHRlcm5EaWN0KENKQmlnMl9TZWdtZW50ICpwU2VnbWVudCwgSUZYX1BhdXNlKiBwUGF1c2UpOw0KLQ0KLSAgICBGWF9JTlQzMiBwYXJzZUhhbGZ0b25lUmVnaW9uKENKQmlnMl9TZWdtZW50ICpwU2VnbWVudCwgSUZYX1BhdXNlKiBwUGF1c2UpOw0KLQ0KLSAgICBGWF9JTlQzMiBwYXJzZUdlbmVyaWNSZWdpb24oQ0pCaWcyX1NlZ21lbnQgKnBTZWdtZW50LCBJRlhfUGF1c2UqIHBQYXVzZSk7DQotDQotICAgIEZYX0lOVDMyIHBhcnNlR2VuZXJpY1JlZmluZW1lbnRSZWdpb24oQ0pCaWcyX1NlZ21lbnQgKnBTZWdtZW50KTsNCi0NCi0gICAgRlhfSU5UMzIgcGFyc2VUYWJsZShDSkJpZzJfU2VnbWVudCAqcFNlZ21lbnQpOw0KLQ0KLSAgICBGWF9JTlQzMiBwYXJzZVJlZ2lvbkluZm8oSkJpZzJSZWdpb25JbmZvICpwUkkpOw0KLQ0KLQ0KLQ0KLSAgICBKQmlnMkh1ZmZtYW5Db2RlICpkZWNvZGVTeW1ib2xJREh1ZmZtYW5UYWJsZShDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtLCBGWF9EV09SRCBTQk5VTVNZTVMpOw0KLQ0KLSAgICB2b2lkIGh1ZmZtYW5fYXNzaWduX2NvZGUoaW50KiBDT0RFUywgaW50KiBQUkVGTEVOLCBpbnQgTlRFTVApOw0KLQ0KLSAgICB2b2lkIGh1ZmZtYW5fYXNzaWduX2NvZGUoSkJpZzJIdWZmbWFuQ29kZSAqU0JTWU1DT0RFUywgaW50IE5URU1QKTsNCi0NCi1wcml2YXRlOg0KLQ0KLSAgICBDSkJpZzJfQ29udGV4dCAqbV9wR2xvYmFsQ29udGV4dDsNCi0NCi0gICAgRlhfSU5UMzIgbV9uU3RyZWFtVHlwZTsNCi0NCi0gICAgQ0pCaWcyX0JpdFN0cmVhbSAqbV9wU3RyZWFtOw0KLQ0KLSAgICBGWF9JTlQzMiBtX25TdGF0ZTsNCi0NCi0gICAgQ0pCaWcyX0xpc3Q8Q0pCaWcyX1NlZ21lbnQ+ICptX3BTZWdtZW50TGlzdDsNCi0NCi0gICAgQ0pCaWcyX0xpc3Q8SkJpZzJQYWdlSW5mbz4gKm1fcFBhZ2VJbmZvTGlzdDsNCi0NCi0gICAgQ0pCaWcyX0ltYWdlICptX3BQYWdlOw0KLQ0KLSAgICBGWF9CT09MIG1fYkJ1ZlNwZWNpZmllZDsNCi0NCi0gICAgRlhfSU5UMzIgbV9uU2VnbWVudERlY29kZWQ7DQotICAgIElGWF9QYXVzZSoJbV9wUGF1c2U7DQotICAgIEZYX0lOVDMyCW1fUGF1c2VTdGVwOw0KLSAgICBGWENPREVDX1NUQVRVUyBtX1Byb2Nlc3NpdmVTdGF0dXM7DQotICAgIEZYX0JPT0wJbV9iRmlyc3RQYWdlOw0KLSAgICBDSkJpZzJfQXJpdGhEZWNvZGVyICptX3BBcml0aERlY29kZXI7DQotICAgIENKQmlnMl9HUkRQcm9jICptX3BHUkQ7DQotICAgIEpCaWcyQXJpdGhDdHggKm1fZ2JDb250ZXh0Ow0KLSAgICBDSkJpZzJfU2VnbWVudCAqbV9wU2VnbWVudDsNCi0gICAgRlhfRFdPUkQgbV9kd09mZnNldDsNCi0gICAgSkJpZzJSZWdpb25JbmZvIG1fcmk7DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9KQklHMl9DT05URVhUX0hfCisjZGVmaW5lIF9KQklHMl9DT05URVhUX0hfCisjaW5jbHVkZSAiSkJpZzJfTW9kdWxlLmgiCisjaW5jbHVkZSAiSkJpZzJfTGlzdC5oIgorI2luY2x1ZGUgIkpCaWcyX1NlZ21lbnQuaCIKKyNpbmNsdWRlICJKQmlnMl9QYWdlLmgiCisjaW5jbHVkZSAiSkJpZzJfR2VuZXJhbERlY29kZXIuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWNfZGVmLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNydC9meF9iYXNpYy5oIgordHlwZWRlZiBlbnVtIHsKKyAgICBKQklHMl9PVVRfT0ZfUEFHRSA9IDAsCisgICAgSkJJRzJfSU5fUEFHRSwKK30gSkJpZzJTdGF0ZTsKKyNkZWZpbmUgSkJJRzJfU1VDQ0VTUwkJCSAwCisjZGVmaW5lIEpCSUcyX0ZBSUxFRAkJCS0xCisjZGVmaW5lIEpCSUcyX0VSUk9SX1RPT19TSE9SVAktMgorI2RlZmluZSBKQklHMl9FUlJPUl9GRVRBTAkJLTMKKyNkZWZpbmUgSkJJRzJfRU5EX09GX1BBR0UJCSAyCisjZGVmaW5lIEpCSUcyX0VORF9PRl9GSUxFCQkgMworI2RlZmluZSBKQklHMl9FUlJPUl9GSUxFX0ZPUk1BVCAtNAorI2RlZmluZSBKQklHMl9FUlJPUl9TVFJFQU1fVFlQRSAtNQorI2RlZmluZSBKQklHMl9FUlJPUl9MSU1JVAkJLTYKKyNkZWZpbmUgSkJJRzJfRklMRV9TVFJFQU0JCQkwCisjZGVmaW5lIEpCSUcyX1NRVUVOVElBTF9TVFJFQU0JCTEKKyNkZWZpbmUgSkJJRzJfUkFORE9NX1NUUkVBTQkJCTIKKyNkZWZpbmUgSkJJRzJfRU1CRURfU1RSRUFNCQkJMworI2RlZmluZSBKQklHMl9NSU5fU0VHTUVOVF9TSVpFCQkJCQkxMQorY2xhc3MgQ0pCaWcyX0NvbnRleHQgOiBwdWJsaWMgQ0pCaWcyX09iamVjdAoreworcHVibGljOgorCisgICAgc3RhdGljIENKQmlnMl9Db250ZXh0ICpDcmVhdGVDb250ZXh0KENKQmlnMl9Nb2R1bGUgKnBNb2R1bGUsIEZYX0JZVEUgKnBHbG9iYWxEYXRhLCBGWF9EV09SRCBkd0dsb2JhbExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSAqcERhdGEsIEZYX0RXT1JEIGR3TGVuZ3RoLCBGWF9JTlQzMiBuU3RyZWFtVHlwZSwgSUZYX1BhdXNlKiBwUGF1c2UgPSBOVUxMKTsKKworICAgIHN0YXRpYyB2b2lkIERlc3Ryb3lDb250ZXh0KENKQmlnMl9Db250ZXh0ICpwQ29udGV4dCk7CisKKyAgICBGWF9JTlQzMiBnZXRGaXJzdFBhZ2UoRlhfQllURSAqcEJ1ZiwgRlhfSU5UMzIgd2lkdGgsIEZYX0lOVDMyIGhlaWdodCwgRlhfSU5UMzIgc3RyaWRlLCBJRlhfUGF1c2UqIHBQYXVzZSk7CisKKyAgICBGWF9JTlQzMiBnZXROZXh0UGFnZShGWF9CWVRFICpwQnVmLCBGWF9JTlQzMiB3aWR0aCwgRlhfSU5UMzIgaGVpZ2h0LCBGWF9JTlQzMiBzdHJpZGUsIElGWF9QYXVzZSogcFBhdXNlKTsKKworICAgIEZYX0lOVDMyIGdldEZpcnN0UGFnZShDSkJpZzJfSW1hZ2UgKippbWFnZSwgSUZYX1BhdXNlKiBwUGF1c2UpOworCisgICAgRlhfSU5UMzIgZ2V0TmV4dFBhZ2UoQ0pCaWcyX0ltYWdlICoqaW1hZ2UsIElGWF9QYXVzZSogcFBhdXNlKTsKKyAgICBGWF9JTlQzMiBDb250aW51ZShJRlhfUGF1c2UqIHBQYXVzZSk7CisgICAgRlhDT0RFQ19TVEFUVVMgR2V0UHJvY2Vzc2l2ZVN0YXR1cygpCisgICAgeworICAgICAgICByZXR1cm4gbV9Qcm9jZXNzaXZlU3RhdHVzOworICAgIH07Citwcml2YXRlOgorCisgICAgQ0pCaWcyX0NvbnRleHQoRlhfQllURSAqcEdsb2JhbERhdGEsIEZYX0RXT1JEIGR3R2xvYmFsTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgKnBEYXRhLCBGWF9EV09SRCBkd0xlbmd0aCwgRlhfSU5UMzIgblN0cmVhbVR5cGUsIElGWF9QYXVzZSogcFBhdXNlKTsKKworICAgIH5DSkJpZzJfQ29udGV4dCgpOworCisgICAgRlhfSU5UMzIgZGVjb2RlRmlsZShJRlhfUGF1c2UqIHBQYXVzZSk7CisKKyAgICBGWF9JTlQzMiBkZWNvZGVfU3F1ZW50aWFsT3JnbmF6YXRpb24oSUZYX1BhdXNlKiBwUGF1c2UpOworCisgICAgRlhfSU5UMzIgZGVjb2RlX0VtYmVkT3JnbmF6YXRpb24oSUZYX1BhdXNlKiBwUGF1c2UpOworCisgICAgRlhfSU5UMzIgZGVjb2RlX1JhbmRvbU9yZ25hemF0aW9uX0ZpcnN0UGFnZShJRlhfUGF1c2UqIHBQYXVzZSk7CisKKyAgICBGWF9JTlQzMiBkZWNvZGVfUmFuZG9tT3JnbmF6YXRpb24oSUZYX1BhdXNlKiBwUGF1c2UpOworCisgICAgQ0pCaWcyX1NlZ21lbnQgKmZpbmRTZWdtZW50QnlOdW1iZXIoRlhfRFdPUkQgZHdOdW1iZXIpOworCisgICAgQ0pCaWcyX1NlZ21lbnQgKmZpbmRSZWZlcnJlZFNlZ21lbnRCeVR5cGVBbmRJbmRleChDSkJpZzJfU2VnbWVudCAqcFNlZ21lbnQsIEZYX0JZVEUgY1R5cGUsIEZYX0lOVDMyIG5JbmRleCk7CisKKyAgICBGWF9JTlQzMiBwYXJzZVNlZ21lbnRIZWFkZXIoQ0pCaWcyX1NlZ21lbnQgKnBTZWdtZW50KTsKKworICAgIEZYX0lOVDMyIHBhcnNlU2VnbWVudERhdGEoQ0pCaWcyX1NlZ21lbnQgKnBTZWdtZW50LCBJRlhfUGF1c2UqIHBQYXVzZSk7CisgICAgRlhfSU5UMzIgUHJvY2Vzc2l2ZVBhcnNlU2VnbWVudERhdGEoQ0pCaWcyX1NlZ21lbnQgKnBTZWdtZW50LCBJRlhfUGF1c2UqIHBQYXVzZSk7CisKKyAgICBGWF9JTlQzMiBwYXJzZVN5bWJvbERpY3QoQ0pCaWcyX1NlZ21lbnQgKnBTZWdtZW50LCBJRlhfUGF1c2UqIHBQYXVzZSk7CisKKyAgICBGWF9JTlQzMiBwYXJzZVRleHRSZWdpb24oQ0pCaWcyX1NlZ21lbnQgKnBTZWdtZW50KTsKKworICAgIEZYX0lOVDMyIHBhcnNlUGF0dGVybkRpY3QoQ0pCaWcyX1NlZ21lbnQgKnBTZWdtZW50LCBJRlhfUGF1c2UqIHBQYXVzZSk7CisKKyAgICBGWF9JTlQzMiBwYXJzZUhhbGZ0b25lUmVnaW9uKENKQmlnMl9TZWdtZW50ICpwU2VnbWVudCwgSUZYX1BhdXNlKiBwUGF1c2UpOworCisgICAgRlhfSU5UMzIgcGFyc2VHZW5lcmljUmVnaW9uKENKQmlnMl9TZWdtZW50ICpwU2VnbWVudCwgSUZYX1BhdXNlKiBwUGF1c2UpOworCisgICAgRlhfSU5UMzIgcGFyc2VHZW5lcmljUmVmaW5lbWVudFJlZ2lvbihDSkJpZzJfU2VnbWVudCAqcFNlZ21lbnQpOworCisgICAgRlhfSU5UMzIgcGFyc2VUYWJsZShDSkJpZzJfU2VnbWVudCAqcFNlZ21lbnQpOworCisgICAgRlhfSU5UMzIgcGFyc2VSZWdpb25JbmZvKEpCaWcyUmVnaW9uSW5mbyAqcFJJKTsKKworCisKKyAgICBKQmlnMkh1ZmZtYW5Db2RlICpkZWNvZGVTeW1ib2xJREh1ZmZtYW5UYWJsZShDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtLCBGWF9EV09SRCBTQk5VTVNZTVMpOworCisgICAgdm9pZCBodWZmbWFuX2Fzc2lnbl9jb2RlKGludCogQ09ERVMsIGludCogUFJFRkxFTiwgaW50IE5URU1QKTsKKworICAgIHZvaWQgaHVmZm1hbl9hc3NpZ25fY29kZShKQmlnMkh1ZmZtYW5Db2RlICpTQlNZTUNPREVTLCBpbnQgTlRFTVApOworCitwcml2YXRlOgorCisgICAgQ0pCaWcyX0NvbnRleHQgKm1fcEdsb2JhbENvbnRleHQ7CisKKyAgICBGWF9JTlQzMiBtX25TdHJlYW1UeXBlOworCisgICAgQ0pCaWcyX0JpdFN0cmVhbSAqbV9wU3RyZWFtOworCisgICAgRlhfSU5UMzIgbV9uU3RhdGU7CisKKyAgICBDSkJpZzJfTGlzdDxDSkJpZzJfU2VnbWVudD4gKm1fcFNlZ21lbnRMaXN0OworCisgICAgQ0pCaWcyX0xpc3Q8SkJpZzJQYWdlSW5mbz4gKm1fcFBhZ2VJbmZvTGlzdDsKKworICAgIENKQmlnMl9JbWFnZSAqbV9wUGFnZTsKKworICAgIEZYX0JPT0wgbV9iQnVmU3BlY2lmaWVkOworCisgICAgRlhfSU5UMzIgbV9uU2VnbWVudERlY29kZWQ7CisgICAgSUZYX1BhdXNlKgltX3BQYXVzZTsKKyAgICBGWF9JTlQzMgltX1BhdXNlU3RlcDsKKyAgICBGWENPREVDX1NUQVRVUyBtX1Byb2Nlc3NpdmVTdGF0dXM7CisgICAgRlhfQk9PTAltX2JGaXJzdFBhZ2U7CisgICAgQ0pCaWcyX0FyaXRoRGVjb2RlciAqbV9wQXJpdGhEZWNvZGVyOworICAgIENKQmlnMl9HUkRQcm9jICptX3BHUkQ7CisgICAgSkJpZzJBcml0aEN0eCAqbV9nYkNvbnRleHQ7CisgICAgQ0pCaWcyX1NlZ21lbnQgKm1fcFNlZ21lbnQ7CisgICAgRlhfRFdPUkQgbV9kd09mZnNldDsKKyAgICBKQmlnMlJlZ2lvbkluZm8gbV9yaTsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfRGVmaW5lLmggYi9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0RlZmluZS5oCmluZGV4IDEwMTliNmEuLmNjZjE1ZDAgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfRGVmaW5lLmgKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9EZWZpbmUuaApAQCAtMSwzNCArMSwzNCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfSkJJRzJfREVGSU5FX0hfDQotI2RlZmluZSBfSkJJRzJfREVGSU5FX0hfDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfc3lzdGVtLmgiDQotI2RlZmluZSBKQklHMl9tZW1zZXQJRlhTWVNfbWVtc2V0OA0KLSNkZWZpbmUgSkJJRzJfbWVtY21wCUZYU1lTX21lbWNtcDMyDQotI2RlZmluZSBKQklHMl9tZW1jcHkJRlhTWVNfbWVtY3B5MzINCi0jaW5jbHVkZSAiSkJpZzJfT2JqZWN0LmgiDQotI2RlZmluZSBKQklHMl9PT0IJCQkxDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgICBGWF9JTlQzMiB3aWR0aCwNCi0gICAgICAgICAgICAgaGVpZ2h0Ow0KLSAgICBGWF9JTlQzMiB4LA0KLSAgICAgICAgICAgICB5Ow0KLSAgICBGWF9CWVRFIGZsYWdzOw0KLX0gSkJpZzJSZWdpb25JbmZvOw0KLXR5cGVkZWYgc3RydWN0IHsNCi0gICAgRlhfSU5UMzIgY29kZWxlbjsNCi0gICAgRlhfSU5UMzIgY29kZTsNCi19IEpCaWcySHVmZm1hbkNvZGU7DQotZXh0ZXJuICJDIiB7DQotICAgIHZvaWQgX0ZheEc0RGVjb2RlKHZvaWQgKnBNb2R1bGUsIEZYX0xQQ0JZVEUgc3JjX2J1ZiwgRlhfRFdPUkQgc3JjX3NpemUsIGludCogcGJpdHBvcywgRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBwaXRjaCA9IDApOw0KLX07DQotI2RlZmluZSBKQklHMl9NQVhfUkVGRVJSRURfU0VHTUVOVF9DT1VOVAkJNjQNCi0jZGVmaW5lIEpCSUcyX01BWF9FWFBPUlRfU1lTTUJPTFMJCQkJNjU1MzUNCi0jZGVmaW5lIEpCSUcyX01BWF9ORVdfU1lTTUJPTFMJCQkJCTY1NTM1DQotI2RlZmluZSBKQklHMl9NQVhfUEFUVEVSTl9JTkRFWAkJCQkJNjU1MzUNCi0jZGVmaW5lIEpCSUcyX01BWF9JTUFHRV9TSVpFCQkJCQk2NTUzNQ0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0pCSUcyX0RFRklORV9IXworI2RlZmluZSBfSkJJRzJfREVGSU5FX0hfCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNydC9meF9zeXN0ZW0uaCIKKyNkZWZpbmUgSkJJRzJfbWVtc2V0CUZYU1lTX21lbXNldDgKKyNkZWZpbmUgSkJJRzJfbWVtY21wCUZYU1lTX21lbWNtcDMyCisjZGVmaW5lIEpCSUcyX21lbWNweQlGWFNZU19tZW1jcHkzMgorI2luY2x1ZGUgIkpCaWcyX09iamVjdC5oIgorI2RlZmluZSBKQklHMl9PT0IJCQkxCit0eXBlZGVmIHN0cnVjdCB7CisgICAgRlhfSU5UMzIgd2lkdGgsCisgICAgICAgICAgICAgaGVpZ2h0OworICAgIEZYX0lOVDMyIHgsCisgICAgICAgICAgICAgeTsKKyAgICBGWF9CWVRFIGZsYWdzOworfSBKQmlnMlJlZ2lvbkluZm87Cit0eXBlZGVmIHN0cnVjdCB7CisgICAgRlhfSU5UMzIgY29kZWxlbjsKKyAgICBGWF9JTlQzMiBjb2RlOworfSBKQmlnMkh1ZmZtYW5Db2RlOworZXh0ZXJuICJDIiB7CisgICAgdm9pZCBfRmF4RzREZWNvZGUodm9pZCAqcE1vZHVsZSwgRlhfTFBDQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwgaW50KiBwYml0cG9zLCBGWF9MUEJZVEUgZGVzdF9idWYsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHBpdGNoID0gMCk7Cit9OworI2RlZmluZSBKQklHMl9NQVhfUkVGRVJSRURfU0VHTUVOVF9DT1VOVAkJNjQKKyNkZWZpbmUgSkJJRzJfTUFYX0VYUE9SVF9TWVNNQk9MUwkJCQk2NTUzNQorI2RlZmluZSBKQklHMl9NQVhfTkVXX1NZU01CT0xTCQkJCQk2NTUzNQorI2RlZmluZSBKQklHMl9NQVhfUEFUVEVSTl9JTkRFWAkJCQkJNjU1MzUKKyNkZWZpbmUgSkJJRzJfTUFYX0lNQUdFX1NJWkUJCQkJCTY1NTM1CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfR2VuZXJhbERlY29kZXIuY3BwIGIvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9HZW5lcmFsRGVjb2Rlci5jcHAKaW5kZXggOWFhNzE0YS4uNTg0N2IyMCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9HZW5lcmFsRGVjb2Rlci5jcHAKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9HZW5lcmFsRGVjb2Rlci5jcHAKQEAgLTEsNDI5MCArMSw0MjkwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiSkJpZzJfR2VuZXJhbERlY29kZXIuaCINCi0jaW5jbHVkZSAiSkJpZzJfQXJpdGhEZWNvZGVyLmgiDQotI2luY2x1ZGUgIkpCaWcyX0FyaXRoSW50RGVjb2Rlci5oIg0KLSNpbmNsdWRlICJKQmlnMl9IdWZmbWFuRGVjb2Rlci5oIg0KLSNpbmNsdWRlICJKQmlnMl9IdWZmbWFuVGFibGUuaCINCi0jaW5jbHVkZSAiSkJpZzJfUGF0dGVybkRpY3QuaCINCi1DSkJpZzJfSW1hZ2UgKkNKQmlnMl9HUkRQcm9jOjpkZWNvZGVfQXJpdGgoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KQ0KLXsNCi0gICAgaWYgKEdCVyA9PSAwIHx8IEdCSCA9PSAwKSB7DQotICAgICAgICBDSkJpZzJfSW1hZ2UqIHBJbWFnZTsNCi0gICAgICAgIEpCSUcyX0FMTE9DKHBJbWFnZSwgQ0pCaWcyX0ltYWdlKEdCVywgR0JIKSk7DQotICAgICAgICByZXR1cm4gcEltYWdlOw0KLSAgICB9DQotICAgIGlmKEdCVEVNUExBVEUgPT0gMCkgew0KLSAgICAgICAgaWYoKEdCQVRbMF0gPT0gMykgJiYgKEdCQVRbMV0gPT0gKHNpZ25lZCBjaGFyKSAtIDEpDQotICAgICAgICAgICAgICAgICYmIChHQkFUWzJdID09IChzaWduZWQgY2hhcikgLSAzKSAmJiAoR0JBVFszXSA9PSAoc2lnbmVkIGNoYXIpIC0gMSkNCi0gICAgICAgICAgICAgICAgJiYgKEdCQVRbNF0gPT0gMikgJiYgKEdCQVRbNV0gPT0gKHNpZ25lZCBjaGFyKSAtIDIpDQotICAgICAgICAgICAgICAgICYmIChHQkFUWzZdID09IChzaWduZWQgY2hhcikgLSAyKSAmJiAoR0JBVFs3XSA9PSAoc2lnbmVkIGNoYXIpIC0gMikpIHsNCi0gICAgICAgICAgICByZXR1cm4gZGVjb2RlX0FyaXRoX1RlbXBsYXRlMF9vcHQzKHBBcml0aERlY29kZXIsIGdiQ29udGV4dCk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHJldHVybiBkZWNvZGVfQXJpdGhfVGVtcGxhdGUwX3Vub3B0KHBBcml0aERlY29kZXIsIGdiQ29udGV4dCk7DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZihHQlRFTVBMQVRFID09IDEpIHsNCi0gICAgICAgIGlmKChHQkFUWzBdID09IDMpICYmIChHQkFUWzFdID09IChzaWduZWQgY2hhcikgLSAxKSkgew0KLSAgICAgICAgICAgIHJldHVybiBkZWNvZGVfQXJpdGhfVGVtcGxhdGUxX29wdDMocEFyaXRoRGVjb2RlciwgZ2JDb250ZXh0KTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcmV0dXJuIGRlY29kZV9Bcml0aF9UZW1wbGF0ZTFfdW5vcHQocEFyaXRoRGVjb2RlciwgZ2JDb250ZXh0KTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIGlmKEdCVEVNUExBVEUgPT0gMikgew0KLSAgICAgICAgaWYoKEdCQVRbMF0gPT0gMikgJiYgKEdCQVRbMV0gPT0gKHNpZ25lZCBjaGFyKSAtIDEpKSB7DQotICAgICAgICAgICAgcmV0dXJuIGRlY29kZV9Bcml0aF9UZW1wbGF0ZTJfb3B0MyhwQXJpdGhEZWNvZGVyLCBnYkNvbnRleHQpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICByZXR1cm4gZGVjb2RlX0FyaXRoX1RlbXBsYXRlMl91bm9wdChwQXJpdGhEZWNvZGVyLCBnYkNvbnRleHQpOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYoKEdCQVRbMF0gPT0gMikgJiYgKEdCQVRbMV0gPT0gKHNpZ25lZCBjaGFyKSAtIDEpKSB7DQotICAgICAgICAgICAgcmV0dXJuIGRlY29kZV9Bcml0aF9UZW1wbGF0ZTNfb3B0MyhwQXJpdGhEZWNvZGVyLCBnYkNvbnRleHQpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICByZXR1cm4gZGVjb2RlX0FyaXRoX1RlbXBsYXRlM191bm9wdChwQXJpdGhEZWNvZGVyLCBnYkNvbnRleHQpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLUNKQmlnMl9JbWFnZSAqQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aF9UZW1wbGF0ZTBfb3B0KENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCkNCi17DQotICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOw0KLSAgICBGWF9EV09SRCBDT05URVhUOw0KLSAgICBDSkJpZzJfSW1hZ2UgKkdCUkVHOw0KLSAgICBGWF9EV09SRCBsaW5lMSwgbGluZTIsIGxpbmUzOw0KLSAgICBMVFAgPSAwOw0KLSAgICBKQklHMl9BTExPQyhHQlJFRywgQ0pCaWcyX0ltYWdlKEdCVywgR0JIKSk7DQotICAgIEdCUkVHLT5maWxsKDApOw0KLSAgICBmb3IoRlhfRFdPUkQgaCA9IDA7IGggPCBHQkg7IGgrKykgew0KLSAgICAgICAgaWYoVFBHRE9OKSB7DQotICAgICAgICAgICAgU0xUUCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0WzB4OWIyNV0pOw0KLSAgICAgICAgICAgIExUUCA9IExUUCBeIFNMVFA7DQotICAgICAgICB9DQotICAgICAgICBpZihMVFAgPT0gMSkgew0KLSAgICAgICAgICAgIEdCUkVHLT5jb3B5TGluZShoLCBoIC0gMSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGxpbmUxID0gR0JSRUctPmdldFBpeGVsKDIsIGggLSAyKTsNCi0gICAgICAgICAgICBsaW5lMSB8PSBHQlJFRy0+Z2V0UGl4ZWwoMSwgaCAtIDIpIDw8IDE7DQotICAgICAgICAgICAgbGluZTEgfD0gR0JSRUctPmdldFBpeGVsKDAsIGggLSAyKSA8PCAyOw0KLSAgICAgICAgICAgIGxpbmUyID0gR0JSRUctPmdldFBpeGVsKDMsIGggLSAxKTsNCi0gICAgICAgICAgICBsaW5lMiB8PSBHQlJFRy0+Z2V0UGl4ZWwoMiwgaCAtIDEpIDw8IDE7DQotICAgICAgICAgICAgbGluZTIgfD0gR0JSRUctPmdldFBpeGVsKDEsIGggLSAxKSA8PCAyOw0KLSAgICAgICAgICAgIGxpbmUyIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBoIC0gMSkgPDwgMzsNCi0gICAgICAgICAgICBsaW5lMyA9IDA7DQotICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR0JXOyB3KyspIHsNCi0gICAgICAgICAgICAgICAgaWYoVVNFU0tJUCAmJiBTS0lQLT5nZXRQaXhlbCh3LCBoKSkgew0KLSAgICAgICAgICAgICAgICAgICAgYlZhbCA9IDA7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gbGluZTM7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUyIDw8IDQ7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUxIDw8IDExOw0KLSAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZihiVmFsKSB7DQotICAgICAgICAgICAgICAgICAgICBHQlJFRy0+c2V0UGl4ZWwodywgaCwgYlZhbCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbGluZTEgPSAoKGxpbmUxIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyAzLCBoIC0gMikpICYgMHgxZjsNCi0gICAgICAgICAgICAgICAgbGluZTIgPSAoKGxpbmUyIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyA0LCBoIC0gMSkpICYgMHg3ZjsNCi0gICAgICAgICAgICAgICAgbGluZTMgPSAoKGxpbmUzIDw8IDEpIHwgYlZhbCkgJiAweDBmOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gR0JSRUc7DQotfQ0KLUNKQmlnMl9JbWFnZSAqQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aF9UZW1wbGF0ZTBfb3B0MihDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpDQotew0KLSAgICBGWF9CT09MIExUUCwgU0xUUCwgYlZhbDsNCi0gICAgRlhfRFdPUkQgQ09OVEVYVDsNCi0gICAgQ0pCaWcyX0ltYWdlICpHQlJFRzsNCi0gICAgRlhfRFdPUkQgbGluZTEsIGxpbmUyOw0KLSAgICBGWF9CWVRFICpwTGluZSwgY1ZhbDsNCi0gICAgRlhfSU5UUFRSIG5TdHJpZGUsIG5TdHJpZGUyOw0KLSAgICBGWF9JTlQzMiBuQml0cywgazsNCi0gICAgTFRQID0gMDsNCi0gICAgSkJJRzJfQUxMT0MoR0JSRUcsIENKQmlnMl9JbWFnZShHQlcsIEdCSCkpOw0KLSAgICBpZiAoR0JSRUctPm1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgZGVsZXRlIEdCUkVHOw0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiR2VuZXJpYyByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlOiBDcmVhdGUgSW1hZ2UgRmFpbGVkIHdpdGggd2lkdGggPSAlZCwgaGVpZ2h0ID0gJWRcbiIsIEdCVywgR0JIKTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHBMaW5lID0gR0JSRUctPm1fcERhdGE7DQotICAgIG5TdHJpZGUgPSBHQlJFRy0+bV9uU3RyaWRlOw0KLSAgICBuU3RyaWRlMiA9IG5TdHJpZGUgPDwgMTsNCi0gICAgZm9yKEZYX0RXT1JEIGggPSAwOyBoIDwgR0JIOyBoKyspIHsNCi0gICAgICAgIGlmKFRQR0RPTikgew0KLSAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFsweDliMjVdKTsNCi0gICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoTFRQID09IDEpIHsNCi0gICAgICAgICAgICBHQlJFRy0+Y29weUxpbmUoaCwgaCAtIDEpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBsaW5lMSA9IChoID4gMSkgPyBwTGluZVstblN0cmlkZTJdIDw8IDYgOiAwOw0KLSAgICAgICAgICAgIGxpbmUyID0gKGggPiAwKSA/IHBMaW5lWy1uU3RyaWRlXSA6IDA7DQotICAgICAgICAgICAgQ09OVEVYVCA9IChsaW5lMSAmIDB4ZjgwMCkgfCAobGluZTIgJiAweDA3ZjApOw0KLSAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdyArPSA4KSB7DQotICAgICAgICAgICAgICAgIGlmKHcgKyA4IDwgR0JXKSB7DQotICAgICAgICAgICAgICAgICAgICBuQml0cyA9IDg7DQotICAgICAgICAgICAgICAgICAgICBpZihoID4gMSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxID0gKGxpbmUxIDw8IDgpIHwgKHBMaW5lWy1uU3RyaWRlMiArICh3ID4+IDMpICsgMV0gPDwgNik7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBpZihoID4gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyID0gKGxpbmUyIDw8IDgpIHwgKHBMaW5lWy1uU3RyaWRlICsgKHcgPj4gMykgKyAxXSk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBuQml0cyA9IEdCVyAtIHc7DQotICAgICAgICAgICAgICAgICAgICBpZihoID4gMSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxIDw8PSA4Ow0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaWYoaCA+IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiA8PD0gODsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBjVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgZm9yKGsgPSAwOyBrIDwgbkJpdHM7IGsrKykgew0KLSAgICAgICAgICAgICAgICAgICAgaWYoVVNFU0tJUCAmJiBTS0lQLT5nZXRQaXhlbCh3LCBoKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8ICg3IC0gayk7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKChDT05URVhUICYgMHg3YmY3KSA8PCAxKSB8IGJWYWwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTEgPj4gKDcgLSBrKSkgJiAweDA4MDApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUyID4+ICg3IC0gaykpICYgMHgwMDEwKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBwTGluZVt3ID4+IDNdID0gY1ZhbDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBwTGluZSArPSBuU3RyaWRlOw0KLSAgICB9DQotICAgIHJldHVybiBHQlJFRzsNCi19DQotQ0pCaWcyX0ltYWdlICpDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoX1RlbXBsYXRlMF9vcHQzKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCkNCi17DQotICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOw0KLSAgICBGWF9EV09SRCBDT05URVhUOw0KLSAgICBDSkJpZzJfSW1hZ2UgKkdCUkVHOw0KLSAgICBGWF9EV09SRCBsaW5lMSwgbGluZTI7DQotICAgIEZYX0JZVEUgKnBMaW5lLCAqcExpbmUxLCAqcExpbmUyLCBjVmFsOw0KLSAgICBGWF9JTlQzMiBuU3RyaWRlLCBuU3RyaWRlMiwgazsNCi0gICAgRlhfSU5UMzIgbkxpbmVCeXRlcywgbkJpdHNMZWZ0LCBjYzsNCi0gICAgTFRQID0gMDsNCi0gICAgSkJJRzJfQUxMT0MoR0JSRUcsIENKQmlnMl9JbWFnZShHQlcsIEdCSCkpOw0KLSAgICBpZiAoR0JSRUctPm1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgZGVsZXRlIEdCUkVHOw0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiR2VuZXJpYyByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlOiBDcmVhdGUgSW1hZ2UgRmFpbGVkIHdpdGggd2lkdGggPSAlZCwgaGVpZ2h0ID0gJWRcbiIsIEdCVywgR0JIKTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHBMaW5lID0gR0JSRUctPm1fcERhdGE7DQotICAgIG5TdHJpZGUgPSBHQlJFRy0+bV9uU3RyaWRlOw0KLSAgICBuU3RyaWRlMiA9IG5TdHJpZGUgPDwgMTsNCi0gICAgbkxpbmVCeXRlcyA9ICgoR0JXICsgNykgPj4gMykgLSAxOw0KLSAgICBuQml0c0xlZnQgPSBHQlcgLSAobkxpbmVCeXRlcyA8PCAzKTsNCi0gICAgRlhfRFdPUkQgaGVpZ2h0ID0gR0JIICYgMHg3ZmZmZmZmZjsNCi0gICAgZm9yKEZYX0RXT1JEIGggPSAwOyBoIDwgaGVpZ2h0OyBoKyspIHsNCi0gICAgICAgIGlmKFRQR0RPTikgew0KLSAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFsweDliMjVdKTsNCi0gICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoTFRQID09IDEpIHsNCi0gICAgICAgICAgICBHQlJFRy0+Y29weUxpbmUoaCwgaCAtIDEpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZihoID4gMSkgew0KLSAgICAgICAgICAgICAgICBwTGluZTEgPSBwTGluZSAtIG5TdHJpZGUyOw0KLSAgICAgICAgICAgICAgICBwTGluZTIgPSBwTGluZSAtIG5TdHJpZGU7DQotICAgICAgICAgICAgICAgIGxpbmUxID0gKCpwTGluZTErKykgPDwgNjsNCi0gICAgICAgICAgICAgICAgbGluZTIgPSAqcExpbmUyKys7DQotICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKGxpbmUxICYgMHhmODAwKSB8IChsaW5lMiAmIDB4MDdmMCkpOw0KLSAgICAgICAgICAgICAgICBmb3IoY2MgPSAwOyBjYyA8IG5MaW5lQnl0ZXM7IGNjKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGxpbmUxID0gKGxpbmUxIDw8IDgpIHwgKCgqcExpbmUxKyspIDw8IDYpOw0KLSAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAobGluZTIgPDwgOCkgfCAoKnBMaW5lMisrKTsNCi0gICAgICAgICAgICAgICAgICAgIGNWYWwgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgZm9yKGsgPSA3OyBrID49IDA7IGstLSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8IGs7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoKENPTlRFWFQgJiAweDdiZjcpIDw8IDEpIHwgYlZhbA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUxID4+IGspICYgMHgwODAwKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUyID4+IGspICYgMHgwMDEwKSk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBwTGluZVtjY10gPSBjVmFsOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGxpbmUxIDw8PSA4Ow0KLSAgICAgICAgICAgICAgICBsaW5lMiA8PD0gODsNCi0gICAgICAgICAgICAgICAgY1ZhbCA9IDA7DQotICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IG5CaXRzTGVmdDsgaysrKSB7DQotICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8ICg3IC0gayk7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKCgoQ09OVEVYVCAmIDB4N2JmNykgPDwgMSkgfCBiVmFsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMSA+PiAoNyAtIGspKSAmIDB4MDgwMCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUyID4+ICg3IC0gaykpICYgMHgwMDEwKSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcExpbmVbbkxpbmVCeXRlc10gPSBjVmFsOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHBMaW5lMiA9IHBMaW5lIC0gblN0cmlkZTsNCi0gICAgICAgICAgICAgICAgbGluZTIgPSAoaCAmIDEpID8gKCpwTGluZTIrKykgOiAwOw0KLSAgICAgICAgICAgICAgICBDT05URVhUID0gKGxpbmUyICYgMHgwN2YwKTsNCi0gICAgICAgICAgICAgICAgZm9yKGNjID0gMDsgY2MgPCBuTGluZUJ5dGVzOyBjYysrKSB7DQotICAgICAgICAgICAgICAgICAgICBpZihoICYgMSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyID0gKGxpbmUyIDw8IDgpIHwgKCpwTGluZTIrKyk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBjVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIGZvcihrID0gNzsgayA+PSAwOyBrLS0pIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCBrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKChDT05URVhUICYgMHg3YmY3KSA8PCAxKSB8IGJWYWwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMiA+PiBrKSAmIDB4MDAxMCkpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgcExpbmVbY2NdID0gY1ZhbDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBsaW5lMiA8PD0gODsNCi0gICAgICAgICAgICAgICAgY1ZhbCA9IDA7DQotICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IG5CaXRzTGVmdDsgaysrKSB7DQotICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8ICg3IC0gayk7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKCgoQ09OVEVYVCAmIDB4N2JmNykgPDwgMSkgfCBiVmFsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCgobGluZTIgPj4gKDcgLSBrKSkpICYgMHgwMDEwKSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcExpbmVbbkxpbmVCeXRlc10gPSBjVmFsOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHBMaW5lICs9IG5TdHJpZGU7DQotICAgIH0NCi0gICAgcmV0dXJuIEdCUkVHOw0KLX0NCi1DSkJpZzJfSW1hZ2UgKkNKQmlnMl9HUkRQcm9jOjpkZWNvZGVfQXJpdGhfVGVtcGxhdGUwX3Vub3B0KENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCkNCi17DQotICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOw0KLSAgICBGWF9EV09SRCBDT05URVhUOw0KLSAgICBDSkJpZzJfSW1hZ2UgKkdCUkVHOw0KLSAgICBGWF9EV09SRCBsaW5lMSwgbGluZTIsIGxpbmUzOw0KLSAgICBMVFAgPSAwOw0KLSAgICBKQklHMl9BTExPQyhHQlJFRywgQ0pCaWcyX0ltYWdlKEdCVywgR0JIKSk7DQotICAgIEdCUkVHLT5maWxsKDApOw0KLSAgICBmb3IoRlhfRFdPUkQgaCA9IDA7IGggPCBHQkg7IGgrKykgew0KLSAgICAgICAgaWYoVFBHRE9OKSB7DQotICAgICAgICAgICAgU0xUUCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0WzB4OWIyNV0pOw0KLSAgICAgICAgICAgIExUUCA9IExUUCBeIFNMVFA7DQotICAgICAgICB9DQotICAgICAgICBpZihMVFAgPT0gMSkgew0KLSAgICAgICAgICAgIEdCUkVHLT5jb3B5TGluZShoLCBoIC0gMSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGxpbmUxID0gR0JSRUctPmdldFBpeGVsKDEsIGggLSAyKTsNCi0gICAgICAgICAgICBsaW5lMSB8PSBHQlJFRy0+Z2V0UGl4ZWwoMCwgaCAtIDIpIDw8IDE7DQotICAgICAgICAgICAgbGluZTIgPSBHQlJFRy0+Z2V0UGl4ZWwoMiwgaCAtIDEpOw0KLSAgICAgICAgICAgIGxpbmUyIHw9IEdCUkVHLT5nZXRQaXhlbCgxLCBoIC0gMSkgPDwgMTsNCi0gICAgICAgICAgICBsaW5lMiB8PSBHQlJFRy0+Z2V0UGl4ZWwoMCwgaCAtIDEpIDw8IDI7DQotICAgICAgICAgICAgbGluZTMgPSAwOw0KLSAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdysrKSB7DQotICAgICAgICAgICAgICAgIGlmKFVTRVNLSVAgJiYgU0tJUC0+Z2V0UGl4ZWwodywgaCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIGJWYWwgPSAwOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IGxpbmUzOw0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMF0sIGggKyBHQkFUWzFdKSA8PCA0Ow0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMiA8PCA1Ow0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMl0sIGggKyBHQkFUWzNdKSA8PCAxMDsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzRdLCBoICsgR0JBVFs1XSkgPDwgMTE7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUxIDw8IDEyOw0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbNl0sIGggKyBHQkFUWzddKSA8PCAxNTsNCi0gICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYoYlZhbCkgew0KLSAgICAgICAgICAgICAgICAgICAgR0JSRUctPnNldFBpeGVsKHcsIGgsIGJWYWwpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGxpbmUxID0gKChsaW5lMSA8PCAxKSB8IEdCUkVHLT5nZXRQaXhlbCh3ICsgMiwgaCAtIDIpKSAmIDB4MDc7DQotICAgICAgICAgICAgICAgIGxpbmUyID0gKChsaW5lMiA8PCAxKSB8IEdCUkVHLT5nZXRQaXhlbCh3ICsgMywgaCAtIDEpKSAmIDB4MWY7DQotICAgICAgICAgICAgICAgIGxpbmUzID0gKChsaW5lMyA8PCAxKSB8IGJWYWwpICYgMHgwZjsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEdCUkVHOw0KLX0NCi1DSkJpZzJfSW1hZ2UgKkNKQmlnMl9HUkRQcm9jOjpkZWNvZGVfQXJpdGhfVGVtcGxhdGUxX29wdChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpDQotew0KLSAgICBGWF9CT09MIExUUCwgU0xUUCwgYlZhbDsNCi0gICAgRlhfRFdPUkQgQ09OVEVYVDsNCi0gICAgQ0pCaWcyX0ltYWdlICpHQlJFRzsNCi0gICAgRlhfRFdPUkQgbGluZTEsIGxpbmUyLCBsaW5lMzsNCi0gICAgTFRQID0gMDsNCi0gICAgSkJJRzJfQUxMT0MoR0JSRUcsIENKQmlnMl9JbWFnZShHQlcsIEdCSCkpOw0KLSAgICBHQlJFRy0+ZmlsbCgwKTsNCi0gICAgZm9yKEZYX0RXT1JEIGggPSAwOyBoIDwgR0JIOyBoKyspIHsNCi0gICAgICAgIGlmKFRQR0RPTikgew0KLSAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFsweDA3OTVdKTsNCi0gICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoTFRQID09IDEpIHsNCi0gICAgICAgICAgICBHQlJFRy0+Y29weUxpbmUoaCwgaCAtIDEpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBsaW5lMSA9IEdCUkVHLT5nZXRQaXhlbCgyLCBoIC0gMik7DQotICAgICAgICAgICAgbGluZTEgfD0gR0JSRUctPmdldFBpeGVsKDEsIGggLSAyKSA8PCAxOw0KLSAgICAgICAgICAgIGxpbmUxIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBoIC0gMikgPDwgMjsNCi0gICAgICAgICAgICBsaW5lMiA9IEdCUkVHLT5nZXRQaXhlbCgzLCBoIC0gMSk7DQotICAgICAgICAgICAgbGluZTIgfD0gR0JSRUctPmdldFBpeGVsKDIsIGggLSAxKSA8PCAxOw0KLSAgICAgICAgICAgIGxpbmUyIHw9IEdCUkVHLT5nZXRQaXhlbCgxLCBoIC0gMSkgPDwgMjsNCi0gICAgICAgICAgICBsaW5lMiB8PSBHQlJFRy0+Z2V0UGl4ZWwoMCwgaCAtIDEpIDw8IDM7DQotICAgICAgICAgICAgbGluZTMgPSAwOw0KLSAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdysrKSB7DQotICAgICAgICAgICAgICAgIGlmKFVTRVNLSVAgJiYgU0tJUC0+Z2V0UGl4ZWwodywgaCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIGJWYWwgPSAwOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IGxpbmUzOw0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMiA8PCAzOw0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMSA8PCA5Ow0KLSAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZihiVmFsKSB7DQotICAgICAgICAgICAgICAgICAgICBHQlJFRy0+c2V0UGl4ZWwodywgaCwgYlZhbCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbGluZTEgPSAoKGxpbmUxIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyAzLCBoIC0gMikpICYgMHgwZjsNCi0gICAgICAgICAgICAgICAgbGluZTIgPSAoKGxpbmUyIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyA0LCBoIC0gMSkpICYgMHgzZjsNCi0gICAgICAgICAgICAgICAgbGluZTMgPSAoKGxpbmUzIDw8IDEpIHwgYlZhbCkgJiAweDA3Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gR0JSRUc7DQotfQ0KLUNKQmlnMl9JbWFnZSAqQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aF9UZW1wbGF0ZTFfb3B0MihDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpDQotew0KLSAgICBGWF9CT09MIExUUCwgU0xUUCwgYlZhbDsNCi0gICAgRlhfRFdPUkQgQ09OVEVYVDsNCi0gICAgQ0pCaWcyX0ltYWdlICpHQlJFRzsNCi0gICAgRlhfRFdPUkQgbGluZTEsIGxpbmUyOw0KLSAgICBGWF9CWVRFICpwTGluZSwgY1ZhbDsNCi0gICAgRlhfSU5UUFRSIG5TdHJpZGUsIG5TdHJpZGUyOw0KLSAgICBGWF9JTlQzMiBuQml0cywgazsNCi0gICAgTFRQID0gMDsNCi0gICAgSkJJRzJfQUxMT0MoR0JSRUcsIENKQmlnMl9JbWFnZShHQlcsIEdCSCkpOw0KLSAgICBpZiAoR0JSRUctPm1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgZGVsZXRlIEdCUkVHOw0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiR2VuZXJpYyByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlOiBDcmVhdGUgSW1hZ2UgRmFpbGVkIHdpdGggd2lkdGggPSAlZCwgaGVpZ2h0ID0gJWRcbiIsIEdCVywgR0JIKTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHBMaW5lID0gR0JSRUctPm1fcERhdGE7DQotICAgIG5TdHJpZGUgPSBHQlJFRy0+bV9uU3RyaWRlOw0KLSAgICBuU3RyaWRlMiA9IG5TdHJpZGUgPDwgMTsNCi0gICAgZm9yKEZYX0RXT1JEIGggPSAwOyBoIDwgR0JIOyBoKyspIHsNCi0gICAgICAgIGlmKFRQR0RPTikgew0KLSAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFsweDA3OTVdKTsNCi0gICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoTFRQID09IDEpIHsNCi0gICAgICAgICAgICBHQlJFRy0+Y29weUxpbmUoaCwgaCAtIDEpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBsaW5lMSA9IChoID4gMSkgPyBwTGluZVstblN0cmlkZTJdIDw8IDQgOiAwOw0KLSAgICAgICAgICAgIGxpbmUyID0gKGggPiAwKSA/IHBMaW5lWy1uU3RyaWRlXSA6IDA7DQotICAgICAgICAgICAgQ09OVEVYVCA9IChsaW5lMSAmIDB4MWUwMCkgfCAoKGxpbmUyID4+IDEpICYgMHgwMWY4KTsNCi0gICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHQlc7IHcgKz0gOCkgew0KLSAgICAgICAgICAgICAgICBpZih3ICsgOCA8IEdCVykgew0KLSAgICAgICAgICAgICAgICAgICAgbkJpdHMgPSA4Ow0KLSAgICAgICAgICAgICAgICAgICAgaWYoaCA+IDEpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSA9IChsaW5lMSA8PCA4KSB8IChwTGluZVstblN0cmlkZTIgKyAodyA+PiAzKSArIDFdIDw8IDQpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaWYoaCA+IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiA9IChsaW5lMiA8PCA4KSB8IChwTGluZVstblN0cmlkZSArICh3ID4+IDMpICsgMV0pOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgbkJpdHMgPSBHQlcgLSB3Ow0KLSAgICAgICAgICAgICAgICAgICAgaWYoaCA+IDEpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSA8PD0gODsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGlmKGggPiAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPDw9IDg7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgY1ZhbCA9IDA7DQotICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IG5CaXRzOyBrKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmKFVTRVNLSVAgJiYgU0tJUC0+Z2V0UGl4ZWwodywgaCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCAoNyAtIGspOw0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoQ09OVEVYVCAmIDB4MGVmYikgPDwgMSkgfCBiVmFsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUxID4+ICg3IC0gaykpICYgMHgwMjAwKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMiA+PiAoOCAtIGspKSAmIDB4MDAwOCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcExpbmVbdyA+PiAzXSA9IGNWYWw7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcExpbmUgKz0gblN0cmlkZTsNCi0gICAgfQ0KLSAgICByZXR1cm4gR0JSRUc7DQotfQ0KLUNKQmlnMl9JbWFnZSAqQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aF9UZW1wbGF0ZTFfb3B0MyhDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpDQotew0KLSAgICBGWF9CT09MIExUUCwgU0xUUCwgYlZhbDsNCi0gICAgRlhfRFdPUkQgQ09OVEVYVDsNCi0gICAgQ0pCaWcyX0ltYWdlICpHQlJFRzsNCi0gICAgRlhfRFdPUkQgbGluZTEsIGxpbmUyOw0KLSAgICBGWF9CWVRFICpwTGluZSwgKnBMaW5lMSwgKnBMaW5lMiwgY1ZhbDsNCi0gICAgRlhfSU5UMzIgblN0cmlkZSwgblN0cmlkZTIsIGs7DQotICAgIEZYX0lOVDMyIG5MaW5lQnl0ZXMsIG5CaXRzTGVmdCwgY2M7DQotICAgIExUUCA9IDA7DQotICAgIEpCSUcyX0FMTE9DKEdCUkVHLCBDSkJpZzJfSW1hZ2UoR0JXLCBHQkgpKTsNCi0gICAgaWYgKEdCUkVHLT5tX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIGRlbGV0ZSBHQlJFRzsNCi0gICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoIkdlbmVyaWMgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZTogQ3JlYXRlIEltYWdlIEZhaWxlZCB3aXRoIHdpZHRoID0gJWQsIGhlaWdodCA9ICVkXG4iLCBHQlcsIEdCSCk7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBwTGluZSA9IEdCUkVHLT5tX3BEYXRhOw0KLSAgICBuU3RyaWRlID0gR0JSRUctPm1fblN0cmlkZTsNCi0gICAgblN0cmlkZTIgPSBuU3RyaWRlIDw8IDE7DQotICAgIG5MaW5lQnl0ZXMgPSAoKEdCVyArIDcpID4+IDMpIC0gMTsNCi0gICAgbkJpdHNMZWZ0ID0gR0JXIC0gKG5MaW5lQnl0ZXMgPDwgMyk7DQotICAgIGZvcihGWF9EV09SRCBoID0gMDsgaCA8IEdCSDsgaCsrKSB7DQotICAgICAgICBpZihUUEdET04pIHsNCi0gICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbMHgwNzk1XSk7DQotICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKExUUCA9PSAxKSB7DQotICAgICAgICAgICAgR0JSRUctPmNvcHlMaW5lKGgsIGggLSAxKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYoaCA+IDEpIHsNCi0gICAgICAgICAgICAgICAgcExpbmUxID0gcExpbmUgLSBuU3RyaWRlMjsNCi0gICAgICAgICAgICAgICAgcExpbmUyID0gcExpbmUgLSBuU3RyaWRlOw0KLSAgICAgICAgICAgICAgICBsaW5lMSA9ICgqcExpbmUxKyspIDw8IDQ7DQotICAgICAgICAgICAgICAgIGxpbmUyID0gKnBMaW5lMisrOw0KLSAgICAgICAgICAgICAgICBDT05URVhUID0gKGxpbmUxICYgMHgxZTAwKSB8ICgobGluZTIgPj4gMSkgJiAweDAxZjgpOw0KLSAgICAgICAgICAgICAgICBmb3IoY2MgPSAwOyBjYyA8IG5MaW5lQnl0ZXM7IGNjKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGxpbmUxID0gKGxpbmUxIDw8IDgpIHwgKCgqcExpbmUxKyspIDw8IDQpOw0KLSAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAobGluZTIgPDwgOCkgfCAoKnBMaW5lMisrKTsNCi0gICAgICAgICAgICAgICAgICAgIGNWYWwgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgZm9yKGsgPSA3OyBrID49IDA7IGstLSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8IGs7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoQ09OVEVYVCAmIDB4MGVmYikgPDwgMSkgfCBiVmFsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMSA+PiBrKSAmIDB4MDIwMCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUyID4+IChrICsgMSkpICYgMHgwMDA4KTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIHBMaW5lW2NjXSA9IGNWYWw7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbGluZTEgPDw9IDg7DQotICAgICAgICAgICAgICAgIGxpbmUyIDw8PSA4Ow0KLSAgICAgICAgICAgICAgICBjVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgZm9yKGsgPSAwOyBrIDwgbkJpdHNMZWZ0OyBrKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgKDcgLSBrKTsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDBlZmIpIDw8IDEpIHwgYlZhbA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMSA+PiAoNyAtIGspKSAmIDB4MDIwMCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTIgPj4gKDggLSBrKSkgJiAweDAwMDgpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHBMaW5lW25MaW5lQnl0ZXNdID0gY1ZhbDsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBwTGluZTIgPSBwTGluZSAtIG5TdHJpZGU7DQotICAgICAgICAgICAgICAgIGxpbmUyID0gKGggJiAxKSA/ICgqcExpbmUyKyspIDogMDsNCi0gICAgICAgICAgICAgICAgQ09OVEVYVCA9IChsaW5lMiA+PiAxKSAmIDB4MDFmODsNCi0gICAgICAgICAgICAgICAgZm9yKGNjID0gMDsgY2MgPCBuTGluZUJ5dGVzOyBjYysrKSB7DQotICAgICAgICAgICAgICAgICAgICBpZihoICYgMSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyID0gKGxpbmUyIDw8IDgpIHwgKCpwTGluZTIrKyk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBjVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIGZvcihrID0gNzsgayA+PSAwOyBrLS0pIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCBrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDBlZmIpIDw8IDEpIHwgYlZhbA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTIgPj4gKGsgKyAxKSkgJiAweDAwMDgpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgcExpbmVbY2NdID0gY1ZhbDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBsaW5lMiA8PD0gODsNCi0gICAgICAgICAgICAgICAgY1ZhbCA9IDA7DQotICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IG5CaXRzTGVmdDsgaysrKSB7DQotICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8ICg3IC0gayk7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKChDT05URVhUICYgMHgwZWZiKSA8PCAxKSB8IGJWYWwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTIgPj4gKDggLSBrKSkgJiAweDAwMDgpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHBMaW5lW25MaW5lQnl0ZXNdID0gY1ZhbDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBwTGluZSArPSBuU3RyaWRlOw0KLSAgICB9DQotICAgIHJldHVybiBHQlJFRzsNCi19DQotQ0pCaWcyX0ltYWdlICpDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoX1RlbXBsYXRlMV91bm9wdChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpDQotew0KLSAgICBGWF9CT09MIExUUCwgU0xUUCwgYlZhbDsNCi0gICAgRlhfRFdPUkQgQ09OVEVYVDsNCi0gICAgQ0pCaWcyX0ltYWdlICpHQlJFRzsNCi0gICAgRlhfRFdPUkQgbGluZTEsIGxpbmUyLCBsaW5lMzsNCi0gICAgTFRQID0gMDsNCi0gICAgSkJJRzJfQUxMT0MoR0JSRUcsIENKQmlnMl9JbWFnZShHQlcsIEdCSCkpOw0KLSAgICBHQlJFRy0+ZmlsbCgwKTsNCi0gICAgZm9yKEZYX0RXT1JEIGggPSAwOyBoIDwgR0JIOyBoKyspIHsNCi0gICAgICAgIGlmKFRQR0RPTikgew0KLSAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFsweDA3OTVdKTsNCi0gICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoTFRQID09IDEpIHsNCi0gICAgICAgICAgICBHQlJFRy0+Y29weUxpbmUoaCwgaCAtIDEpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBsaW5lMSA9IEdCUkVHLT5nZXRQaXhlbCgyLCBoIC0gMik7DQotICAgICAgICAgICAgbGluZTEgfD0gR0JSRUctPmdldFBpeGVsKDEsIGggLSAyKSA8PCAxOw0KLSAgICAgICAgICAgIGxpbmUxIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBoIC0gMikgPDwgMjsNCi0gICAgICAgICAgICBsaW5lMiA9IEdCUkVHLT5nZXRQaXhlbCgyLCBoIC0gMSk7DQotICAgICAgICAgICAgbGluZTIgfD0gR0JSRUctPmdldFBpeGVsKDEsIGggLSAxKSA8PCAxOw0KLSAgICAgICAgICAgIGxpbmUyIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBoIC0gMSkgPDwgMjsNCi0gICAgICAgICAgICBsaW5lMyA9IDA7DQotICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR0JXOyB3KyspIHsNCi0gICAgICAgICAgICAgICAgaWYoVVNFU0tJUCAmJiBTS0lQLT5nZXRQaXhlbCh3LCBoKSkgew0KLSAgICAgICAgICAgICAgICAgICAgYlZhbCA9IDA7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gbGluZTM7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFswXSwgaCArIEdCQVRbMV0pIDw8IDM7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUyIDw8IDQ7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUxIDw8IDk7DQotICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmKGJWYWwpIHsNCi0gICAgICAgICAgICAgICAgICAgIEdCUkVHLT5zZXRQaXhlbCh3LCBoLCBiVmFsKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBsaW5lMSA9ICgobGluZTEgPDwgMSkgfCBHQlJFRy0+Z2V0UGl4ZWwodyArIDMsIGggLSAyKSkgJiAweDBmOw0KLSAgICAgICAgICAgICAgICBsaW5lMiA9ICgobGluZTIgPDwgMSkgfCBHQlJFRy0+Z2V0UGl4ZWwodyArIDMsIGggLSAxKSkgJiAweDFmOw0KLSAgICAgICAgICAgICAgICBsaW5lMyA9ICgobGluZTMgPDwgMSkgfCBiVmFsKSAmIDB4MDc7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBHQlJFRzsNCi19DQotQ0pCaWcyX0ltYWdlICpDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoX1RlbXBsYXRlMl9vcHQoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KQ0KLXsNCi0gICAgRlhfQk9PTCBMVFAsIFNMVFAsIGJWYWw7DQotICAgIEZYX0RXT1JEIENPTlRFWFQ7DQotICAgIENKQmlnMl9JbWFnZSAqR0JSRUc7DQotICAgIEZYX0RXT1JEIGxpbmUxLCBsaW5lMiwgbGluZTM7DQotICAgIExUUCA9IDA7DQotICAgIEpCSUcyX0FMTE9DKEdCUkVHLCBDSkJpZzJfSW1hZ2UoR0JXLCBHQkgpKTsNCi0gICAgR0JSRUctPmZpbGwoMCk7DQotICAgIGZvcihGWF9EV09SRCBoID0gMDsgaCA8IEdCSDsgaCsrKSB7DQotICAgICAgICBpZihUUEdET04pIHsNCi0gICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbMHgwMGU1XSk7DQotICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKExUUCA9PSAxKSB7DQotICAgICAgICAgICAgR0JSRUctPmNvcHlMaW5lKGgsIGggLSAxKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbGluZTEgPSBHQlJFRy0+Z2V0UGl4ZWwoMSwgaCAtIDIpOw0KLSAgICAgICAgICAgIGxpbmUxIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBoIC0gMikgPDwgMTsNCi0gICAgICAgICAgICBsaW5lMiA9IEdCUkVHLT5nZXRQaXhlbCgyLCBoIC0gMSk7DQotICAgICAgICAgICAgbGluZTIgfD0gR0JSRUctPmdldFBpeGVsKDEsIGggLSAxKSA8PCAxOw0KLSAgICAgICAgICAgIGxpbmUyIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBoIC0gMSkgPDwgMjsNCi0gICAgICAgICAgICBsaW5lMyA9IDA7DQotICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR0JXOyB3KyspIHsNCi0gICAgICAgICAgICAgICAgaWYoVVNFU0tJUCAmJiBTS0lQLT5nZXRQaXhlbCh3LCBoKSkgew0KLSAgICAgICAgICAgICAgICAgICAgYlZhbCA9IDA7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gbGluZTM7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUyIDw8IDI7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUxIDw8IDc7DQotICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmKGJWYWwpIHsNCi0gICAgICAgICAgICAgICAgICAgIEdCUkVHLT5zZXRQaXhlbCh3LCBoLCBiVmFsKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBsaW5lMSA9ICgobGluZTEgPDwgMSkgfCBHQlJFRy0+Z2V0UGl4ZWwodyArIDIsIGggLSAyKSkgJiAweDA3Ow0KLSAgICAgICAgICAgICAgICBsaW5lMiA9ICgobGluZTIgPDwgMSkgfCBHQlJFRy0+Z2V0UGl4ZWwodyArIDMsIGggLSAxKSkgJiAweDFmOw0KLSAgICAgICAgICAgICAgICBsaW5lMyA9ICgobGluZTMgPDwgMSkgfCBiVmFsKSAmIDB4MDM7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBHQlJFRzsNCi19DQotQ0pCaWcyX0ltYWdlICpDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoX1RlbXBsYXRlMl9vcHQyKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCkNCi17DQotICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOw0KLSAgICBGWF9EV09SRCBDT05URVhUOw0KLSAgICBDSkJpZzJfSW1hZ2UgKkdCUkVHOw0KLSAgICBGWF9EV09SRCBsaW5lMSwgbGluZTI7DQotICAgIEZYX0JZVEUgKnBMaW5lLCBjVmFsOw0KLSAgICBGWF9JTlRQVFIgblN0cmlkZSwgblN0cmlkZTI7DQotICAgIEZYX0lOVDMyIG5CaXRzLCBrOw0KLSAgICBMVFAgPSAwOw0KLSAgICBKQklHMl9BTExPQyhHQlJFRywgQ0pCaWcyX0ltYWdlKEdCVywgR0JIKSk7DQotICAgIGlmIChHQlJFRy0+bV9wRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICBkZWxldGUgR0JSRUc7DQotICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJHZW5lcmljIHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmU6IENyZWF0ZSBJbWFnZSBGYWlsZWQgd2l0aCB3aWR0aCA9ICVkLCBoZWlnaHQgPSAlZFxuIiwgR0JXLCBHQkgpOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcExpbmUgPSBHQlJFRy0+bV9wRGF0YTsNCi0gICAgblN0cmlkZSA9IEdCUkVHLT5tX25TdHJpZGU7DQotICAgIG5TdHJpZGUyID0gblN0cmlkZSA8PCAxOw0KLSAgICBmb3IoRlhfRFdPUkQgaCA9IDA7IGggPCBHQkg7IGgrKykgew0KLSAgICAgICAgaWYoVFBHRE9OKSB7DQotICAgICAgICAgICAgU0xUUCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0WzB4MDBlNV0pOw0KLSAgICAgICAgICAgIExUUCA9IExUUCBeIFNMVFA7DQotICAgICAgICB9DQotICAgICAgICBpZihMVFAgPT0gMSkgew0KLSAgICAgICAgICAgIEdCUkVHLT5jb3B5TGluZShoLCBoIC0gMSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGxpbmUxID0gKGggPiAxKSA/IHBMaW5lWy1uU3RyaWRlMl0gPDwgMSA6IDA7DQotICAgICAgICAgICAgbGluZTIgPSAoaCA+IDApID8gcExpbmVbLW5TdHJpZGVdIDogMDsNCi0gICAgICAgICAgICBDT05URVhUID0gKGxpbmUxICYgMHgwMzgwKSB8ICgobGluZTIgPj4gMykgJiAweDAwN2MpOw0KLSAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdyArPSA4KSB7DQotICAgICAgICAgICAgICAgIGlmKHcgKyA4IDwgR0JXKSB7DQotICAgICAgICAgICAgICAgICAgICBuQml0cyA9IDg7DQotICAgICAgICAgICAgICAgICAgICBpZihoID4gMSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxID0gKGxpbmUxIDw8IDgpIHwgKHBMaW5lWy1uU3RyaWRlMiArICh3ID4+IDMpICsgMV0gPDwgMSk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBpZihoID4gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyID0gKGxpbmUyIDw8IDgpIHwgKHBMaW5lWy1uU3RyaWRlICsgKHcgPj4gMykgKyAxXSk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBuQml0cyA9IEdCVyAtIHc7DQotICAgICAgICAgICAgICAgICAgICBpZihoID4gMSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxIDw8PSA4Ow0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaWYoaCA+IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiA8PD0gODsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBjVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgZm9yKGsgPSAwOyBrIDwgbkJpdHM7IGsrKykgew0KLSAgICAgICAgICAgICAgICAgICAgaWYoVVNFU0tJUCAmJiBTS0lQLT5nZXRQaXhlbCh3LCBoKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8ICg3IC0gayk7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKChDT05URVhUICYgMHgwMWJkKSA8PCAxKSB8IGJWYWwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTEgPj4gKDcgLSBrKSkgJiAweDAwODApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUyID4+ICgxMCAtIGspKSAmIDB4MDAwNCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcExpbmVbdyA+PiAzXSA9IGNWYWw7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcExpbmUgKz0gblN0cmlkZTsNCi0gICAgfQ0KLSAgICByZXR1cm4gR0JSRUc7DQotfQ0KLUNKQmlnMl9JbWFnZSAqQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aF9UZW1wbGF0ZTJfb3B0MyhDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpDQotew0KLSAgICBGWF9CT09MIExUUCwgU0xUUCwgYlZhbDsNCi0gICAgRlhfRFdPUkQgQ09OVEVYVDsNCi0gICAgQ0pCaWcyX0ltYWdlICpHQlJFRzsNCi0gICAgRlhfRFdPUkQgbGluZTEsIGxpbmUyOw0KLSAgICBGWF9CWVRFICpwTGluZSwgKnBMaW5lMSwgKnBMaW5lMiwgY1ZhbDsNCi0gICAgRlhfSU5UMzIgblN0cmlkZSwgblN0cmlkZTIsIGs7DQotICAgIEZYX0lOVDMyIG5MaW5lQnl0ZXMsIG5CaXRzTGVmdCwgY2M7DQotICAgIExUUCA9IDA7DQotICAgIEpCSUcyX0FMTE9DKEdCUkVHLCBDSkJpZzJfSW1hZ2UoR0JXLCBHQkgpKTsNCi0gICAgaWYgKEdCUkVHLT5tX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIGRlbGV0ZSBHQlJFRzsNCi0gICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoIkdlbmVyaWMgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZTogQ3JlYXRlIEltYWdlIEZhaWxlZCB3aXRoIHdpZHRoID0gJWQsIGhlaWdodCA9ICVkXG4iLCBHQlcsIEdCSCk7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBwTGluZSA9IEdCUkVHLT5tX3BEYXRhOw0KLSAgICBuU3RyaWRlID0gR0JSRUctPm1fblN0cmlkZTsNCi0gICAgblN0cmlkZTIgPSBuU3RyaWRlIDw8IDE7DQotICAgIG5MaW5lQnl0ZXMgPSAoKEdCVyArIDcpID4+IDMpIC0gMTsNCi0gICAgbkJpdHNMZWZ0ID0gR0JXIC0gKG5MaW5lQnl0ZXMgPDwgMyk7DQotICAgIGZvcihGWF9EV09SRCBoID0gMDsgaCA8IEdCSDsgaCsrKSB7DQotICAgICAgICBpZihUUEdET04pIHsNCi0gICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbMHgwMGU1XSk7DQotICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKExUUCA9PSAxKSB7DQotICAgICAgICAgICAgR0JSRUctPmNvcHlMaW5lKGgsIGggLSAxKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYoaCA+IDEpIHsNCi0gICAgICAgICAgICAgICAgcExpbmUxID0gcExpbmUgLSBuU3RyaWRlMjsNCi0gICAgICAgICAgICAgICAgcExpbmUyID0gcExpbmUgLSBuU3RyaWRlOw0KLSAgICAgICAgICAgICAgICBsaW5lMSA9ICgqcExpbmUxKyspIDw8IDE7DQotICAgICAgICAgICAgICAgIGxpbmUyID0gKnBMaW5lMisrOw0KLSAgICAgICAgICAgICAgICBDT05URVhUID0gKGxpbmUxICYgMHgwMzgwKSB8ICgobGluZTIgPj4gMykgJiAweDAwN2MpOw0KLSAgICAgICAgICAgICAgICBmb3IoY2MgPSAwOyBjYyA8IG5MaW5lQnl0ZXM7IGNjKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGxpbmUxID0gKGxpbmUxIDw8IDgpIHwgKCgqcExpbmUxKyspIDw8IDEpOw0KLSAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAobGluZTIgPDwgOCkgfCAoKnBMaW5lMisrKTsNCi0gICAgICAgICAgICAgICAgICAgIGNWYWwgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgZm9yKGsgPSA3OyBrID49IDA7IGstLSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8IGs7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoQ09OVEVYVCAmIDB4MDFiZCkgPDwgMSkgfCBiVmFsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMSA+PiBrKSAmIDB4MDA4MCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUyID4+IChrICsgMykpICYgMHgwMDA0KTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIHBMaW5lW2NjXSA9IGNWYWw7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbGluZTEgPDw9IDg7DQotICAgICAgICAgICAgICAgIGxpbmUyIDw8PSA4Ow0KLSAgICAgICAgICAgICAgICBjVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgZm9yKGsgPSAwOyBrIDwgbkJpdHNMZWZ0OyBrKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgKDcgLSBrKTsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDAxYmQpIDw8IDEpIHwgYlZhbA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMSA+PiAoNyAtIGspKSAmIDB4MDA4MCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTIgPj4gKDEwIC0gaykpICYgMHgwMDA0KTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBwTGluZVtuTGluZUJ5dGVzXSA9IGNWYWw7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgcExpbmUyID0gcExpbmUgLSBuU3RyaWRlOw0KLSAgICAgICAgICAgICAgICBsaW5lMiA9IChoICYgMSkgPyAoKnBMaW5lMisrKSA6IDA7DQotICAgICAgICAgICAgICAgIENPTlRFWFQgPSAobGluZTIgPj4gMykgJiAweDAwN2M7DQotICAgICAgICAgICAgICAgIGZvcihjYyA9IDA7IGNjIDwgbkxpbmVCeXRlczsgY2MrKykgew0KLSAgICAgICAgICAgICAgICAgICAgaWYoaCAmIDEpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiA9IChsaW5lMiA8PCA4KSB8ICgqcExpbmUyKyspOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgY1ZhbCA9IDA7DQotICAgICAgICAgICAgICAgICAgICBmb3IoayA9IDc7IGsgPj0gMDsgay0tKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKChDT05URVhUICYgMHgwMWJkKSA8PCAxKSB8IGJWYWwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUyID4+IChrICsgMykpICYgMHgwMDA0KTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIHBMaW5lW2NjXSA9IGNWYWw7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbGluZTIgPDw9IDg7DQotICAgICAgICAgICAgICAgIGNWYWwgPSAwOw0KLSAgICAgICAgICAgICAgICBmb3IoayA9IDA7IGsgPCBuQml0c0xlZnQ7IGsrKykgew0KLSAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsNCi0gICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCAoNyAtIGspOw0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoQ09OVEVYVCAmIDB4MDFiZCkgPDwgMSkgfCBiVmFsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKChsaW5lMiA+PiAoMTAgLSBrKSkpICYgMHgwMDA0KTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBwTGluZVtuTGluZUJ5dGVzXSA9IGNWYWw7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcExpbmUgKz0gblN0cmlkZTsNCi0gICAgfQ0KLSAgICByZXR1cm4gR0JSRUc7DQotfQ0KLUNKQmlnMl9JbWFnZSAqQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aF9UZW1wbGF0ZTJfdW5vcHQoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KQ0KLXsNCi0gICAgRlhfQk9PTCBMVFAsIFNMVFAsIGJWYWw7DQotICAgIEZYX0RXT1JEIENPTlRFWFQ7DQotICAgIENKQmlnMl9JbWFnZSAqR0JSRUc7DQotICAgIEZYX0RXT1JEIGxpbmUxLCBsaW5lMiwgbGluZTM7DQotICAgIExUUCA9IDA7DQotICAgIEpCSUcyX0FMTE9DKEdCUkVHLCBDSkJpZzJfSW1hZ2UoR0JXLCBHQkgpKTsNCi0gICAgR0JSRUctPmZpbGwoMCk7DQotICAgIGZvcihGWF9EV09SRCBoID0gMDsgaCA8IEdCSDsgaCsrKSB7DQotICAgICAgICBpZihUUEdET04pIHsNCi0gICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbMHgwMGU1XSk7DQotICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKExUUCA9PSAxKSB7DQotICAgICAgICAgICAgR0JSRUctPmNvcHlMaW5lKGgsIGggLSAxKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbGluZTEgPSBHQlJFRy0+Z2V0UGl4ZWwoMSwgaCAtIDIpOw0KLSAgICAgICAgICAgIGxpbmUxIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBoIC0gMikgPDwgMTsNCi0gICAgICAgICAgICBsaW5lMiA9IEdCUkVHLT5nZXRQaXhlbCgxLCBoIC0gMSk7DQotICAgICAgICAgICAgbGluZTIgfD0gR0JSRUctPmdldFBpeGVsKDAsIGggLSAxKSA8PCAxOw0KLSAgICAgICAgICAgIGxpbmUzID0gMDsNCi0gICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHQlc7IHcrKykgew0KLSAgICAgICAgICAgICAgICBpZihVU0VTS0lQICYmIFNLSVAtPmdldFBpeGVsKHcsIGgpKSB7DQotICAgICAgICAgICAgICAgICAgICBiVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSBsaW5lMzsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzBdLCBoICsgR0JBVFsxXSkgPDwgMjsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTIgPDwgMzsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTEgPDwgNzsNCi0gICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYoYlZhbCkgew0KLSAgICAgICAgICAgICAgICAgICAgR0JSRUctPnNldFBpeGVsKHcsIGgsIGJWYWwpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGxpbmUxID0gKChsaW5lMSA8PCAxKSB8IEdCUkVHLT5nZXRQaXhlbCh3ICsgMiwgaCAtIDIpKSAmIDB4MDc7DQotICAgICAgICAgICAgICAgIGxpbmUyID0gKChsaW5lMiA8PCAxKSB8IEdCUkVHLT5nZXRQaXhlbCh3ICsgMiwgaCAtIDEpKSAmIDB4MGY7DQotICAgICAgICAgICAgICAgIGxpbmUzID0gKChsaW5lMyA8PCAxKSB8IGJWYWwpICYgMHgwMzsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEdCUkVHOw0KLX0NCi1DSkJpZzJfSW1hZ2UgKkNKQmlnMl9HUkRQcm9jOjpkZWNvZGVfQXJpdGhfVGVtcGxhdGUzX29wdChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpDQotew0KLSAgICBGWF9CT09MIExUUCwgU0xUUCwgYlZhbDsNCi0gICAgRlhfRFdPUkQgQ09OVEVYVDsNCi0gICAgQ0pCaWcyX0ltYWdlICpHQlJFRzsNCi0gICAgRlhfRFdPUkQgbGluZTEsIGxpbmUyOw0KLSAgICBMVFAgPSAwOw0KLSAgICBKQklHMl9BTExPQyhHQlJFRywgQ0pCaWcyX0ltYWdlKEdCVywgR0JIKSk7DQotICAgIEdCUkVHLT5maWxsKDApOw0KLSAgICBmb3IoRlhfRFdPUkQgaCA9IDA7IGggPCBHQkg7IGgrKykgew0KLSAgICAgICAgaWYoVFBHRE9OKSB7DQotICAgICAgICAgICAgU0xUUCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0WzB4MDE5NV0pOw0KLSAgICAgICAgICAgIExUUCA9IExUUCBeIFNMVFA7DQotICAgICAgICB9DQotICAgICAgICBpZihMVFAgPT0gMSkgew0KLSAgICAgICAgICAgIEdCUkVHLT5jb3B5TGluZShoLCBoIC0gMSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGxpbmUxID0gR0JSRUctPmdldFBpeGVsKDIsIGggLSAxKTsNCi0gICAgICAgICAgICBsaW5lMSB8PSBHQlJFRy0+Z2V0UGl4ZWwoMSwgaCAtIDEpIDw8IDE7DQotICAgICAgICAgICAgbGluZTEgfD0gR0JSRUctPmdldFBpeGVsKDAsIGggLSAxKSA8PCAyOw0KLSAgICAgICAgICAgIGxpbmUyID0gMDsNCi0gICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHQlc7IHcrKykgew0KLSAgICAgICAgICAgICAgICBpZihVU0VTS0lQICYmIFNLSVAtPmdldFBpeGVsKHcsIGgpKSB7DQotICAgICAgICAgICAgICAgICAgICBiVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSBsaW5lMjsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTEgPDwgNDsNCi0gICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYoYlZhbCkgew0KLSAgICAgICAgICAgICAgICAgICAgR0JSRUctPnNldFBpeGVsKHcsIGgsIGJWYWwpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGxpbmUxID0gKChsaW5lMSA8PCAxKSB8IEdCUkVHLT5nZXRQaXhlbCh3ICsgMywgaCAtIDEpKSAmIDB4M2Y7DQotICAgICAgICAgICAgICAgIGxpbmUyID0gKChsaW5lMiA8PCAxKSB8IGJWYWwpICYgMHgwZjsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEdCUkVHOw0KLX0NCi1DSkJpZzJfSW1hZ2UgKkNKQmlnMl9HUkRQcm9jOjpkZWNvZGVfQXJpdGhfVGVtcGxhdGUzX29wdDIoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KQ0KLXsNCi0gICAgRlhfQk9PTCBMVFAsIFNMVFAsIGJWYWw7DQotICAgIEZYX0RXT1JEIENPTlRFWFQ7DQotICAgIENKQmlnMl9JbWFnZSAqR0JSRUc7DQotICAgIEZYX0RXT1JEIGxpbmUxOw0KLSAgICBGWF9CWVRFICpwTGluZSwgY1ZhbDsNCi0gICAgRlhfSU5UUFRSIG5TdHJpZGUsIG5TdHJpZGUyOw0KLSAgICBGWF9JTlQzMiBuQml0cywgazsNCi0gICAgTFRQID0gMDsNCi0gICAgSkJJRzJfQUxMT0MoR0JSRUcsIENKQmlnMl9JbWFnZShHQlcsIEdCSCkpOw0KLSAgICBpZiAoR0JSRUctPm1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgZGVsZXRlIEdCUkVHOw0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiR2VuZXJpYyByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlOiBDcmVhdGUgSW1hZ2UgRmFpbGVkIHdpdGggd2lkdGggPSAlZCwgaGVpZ2h0ID0gJWRcbiIsIEdCVywgR0JIKTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHBMaW5lID0gR0JSRUctPm1fcERhdGE7DQotICAgIG5TdHJpZGUgPSBHQlJFRy0+bV9uU3RyaWRlOw0KLSAgICBuU3RyaWRlMiA9IG5TdHJpZGUgPDwgMTsNCi0gICAgZm9yKEZYX0RXT1JEIGggPSAwOyBoIDwgR0JIOyBoKyspIHsNCi0gICAgICAgIGlmKFRQR0RPTikgew0KLSAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFsweDAxOTVdKTsNCi0gICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoTFRQID09IDEpIHsNCi0gICAgICAgICAgICBHQlJFRy0+Y29weUxpbmUoaCwgaCAtIDEpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBsaW5lMSA9IChoID4gMCkgPyBwTGluZVstblN0cmlkZV0gOiAwOw0KLSAgICAgICAgICAgIENPTlRFWFQgPSAobGluZTEgPj4gMSkgJiAweDAzZjA7DQotICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR0JXOyB3ICs9IDgpIHsNCi0gICAgICAgICAgICAgICAgaWYodyArIDggPCBHQlcpIHsNCi0gICAgICAgICAgICAgICAgICAgIG5CaXRzID0gODsNCi0gICAgICAgICAgICAgICAgICAgIGlmKGggPiAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgPSAobGluZTEgPDwgOCkgfCAocExpbmVbLW5TdHJpZGUgKyAodyA+PiAzKSArIDFdKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIG5CaXRzID0gR0JXIC0gdzsNCi0gICAgICAgICAgICAgICAgICAgIGlmKGggPiAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgPDw9IDg7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgY1ZhbCA9IDA7DQotICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IG5CaXRzOyBrKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmKFVTRVNLSVAgJiYgU0tJUC0+Z2V0UGl4ZWwodywgaCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCAoNyAtIGspOw0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoQ09OVEVYVCAmIDB4MDFmNykgPDwgMSkgfCBiVmFsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUxID4+ICg4IC0gaykpICYgMHgwMDEwKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBwTGluZVt3ID4+IDNdID0gY1ZhbDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBwTGluZSArPSBuU3RyaWRlOw0KLSAgICB9DQotICAgIHJldHVybiBHQlJFRzsNCi19DQotQ0pCaWcyX0ltYWdlICpDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoX1RlbXBsYXRlM19vcHQzKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCkNCi17DQotICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOw0KLSAgICBGWF9EV09SRCBDT05URVhUOw0KLSAgICBDSkJpZzJfSW1hZ2UgKkdCUkVHOw0KLSAgICBGWF9EV09SRCBsaW5lMTsNCi0gICAgRlhfQllURSAqcExpbmUsICpwTGluZTEsIGNWYWw7DQotICAgIEZYX0lOVDMyIG5TdHJpZGUsIGs7DQotICAgIEZYX0lOVDMyIG5MaW5lQnl0ZXMsIG5CaXRzTGVmdCwgY2M7DQotICAgIExUUCA9IDA7DQotICAgIEpCSUcyX0FMTE9DKEdCUkVHLCBDSkJpZzJfSW1hZ2UoR0JXLCBHQkgpKTsNCi0gICAgaWYgKEdCUkVHLT5tX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIGRlbGV0ZSBHQlJFRzsNCi0gICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoIkdlbmVyaWMgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZTogQ3JlYXRlIEltYWdlIEZhaWxlZCB3aXRoIHdpZHRoID0gJWQsIGhlaWdodCA9ICVkXG4iLCBHQlcsIEdCSCk7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBwTGluZSA9IEdCUkVHLT5tX3BEYXRhOw0KLSAgICBuU3RyaWRlID0gR0JSRUctPm1fblN0cmlkZTsNCi0gICAgbkxpbmVCeXRlcyA9ICgoR0JXICsgNykgPj4gMykgLSAxOw0KLSAgICBuQml0c0xlZnQgPSBHQlcgLSAobkxpbmVCeXRlcyA8PCAzKTsNCi0gICAgZm9yKEZYX0RXT1JEIGggPSAwOyBoIDwgR0JIOyBoKyspIHsNCi0gICAgICAgIGlmKFRQR0RPTikgew0KLSAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFsweDAxOTVdKTsNCi0gICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoTFRQID09IDEpIHsNCi0gICAgICAgICAgICBHQlJFRy0+Y29weUxpbmUoaCwgaCAtIDEpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZihoID4gMCkgew0KLSAgICAgICAgICAgICAgICBwTGluZTEgPSBwTGluZSAtIG5TdHJpZGU7DQotICAgICAgICAgICAgICAgIGxpbmUxID0gKnBMaW5lMSsrOw0KLSAgICAgICAgICAgICAgICBDT05URVhUID0gKGxpbmUxID4+IDEpICYgMHgwM2YwOw0KLSAgICAgICAgICAgICAgICBmb3IoY2MgPSAwOyBjYyA8IG5MaW5lQnl0ZXM7IGNjKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGxpbmUxID0gKGxpbmUxIDw8IDgpIHwgKCpwTGluZTErKyk7DQotICAgICAgICAgICAgICAgICAgICBjVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIGZvcihrID0gNzsgayA+PSAwOyBrLS0pIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCBrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDAxZjcpIDw8IDEpIHwgYlZhbA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTEgPj4gKGsgKyAxKSkgJiAweDAwMTApOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgcExpbmVbY2NdID0gY1ZhbDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBsaW5lMSA8PD0gODsNCi0gICAgICAgICAgICAgICAgY1ZhbCA9IDA7DQotICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IG5CaXRzTGVmdDsgaysrKSB7DQotICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8ICg3IC0gayk7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKChDT05URVhUICYgMHgwMWY3KSA8PCAxKSB8IGJWYWwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTEgPj4gKDggLSBrKSkgJiAweDAwMTApOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHBMaW5lW25MaW5lQnl0ZXNdID0gY1ZhbDsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBDT05URVhUID0gMDsNCi0gICAgICAgICAgICAgICAgZm9yKGNjID0gMDsgY2MgPCBuTGluZUJ5dGVzOyBjYysrKSB7DQotICAgICAgICAgICAgICAgICAgICBjVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIGZvcihrID0gNzsgayA+PSAwOyBrLS0pIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCBrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDAxZjcpIDw8IDEpIHwgYlZhbDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIHBMaW5lW2NjXSA9IGNWYWw7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgY1ZhbCA9IDA7DQotICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IG5CaXRzTGVmdDsgaysrKSB7DQotICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8ICg3IC0gayk7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKChDT05URVhUICYgMHgwMWY3KSA8PCAxKSB8IGJWYWw7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcExpbmVbbkxpbmVCeXRlc10gPSBjVmFsOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHBMaW5lICs9IG5TdHJpZGU7DQotICAgIH0NCi0gICAgcmV0dXJuIEdCUkVHOw0KLX0NCi1DSkJpZzJfSW1hZ2UgKkNKQmlnMl9HUkRQcm9jOjpkZWNvZGVfQXJpdGhfVGVtcGxhdGUzX3Vub3B0KENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCkNCi17DQotICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOw0KLSAgICBGWF9EV09SRCBDT05URVhUOw0KLSAgICBDSkJpZzJfSW1hZ2UgKkdCUkVHOw0KLSAgICBGWF9EV09SRCBsaW5lMSwgbGluZTI7DQotICAgIExUUCA9IDA7DQotICAgIEpCSUcyX0FMTE9DKEdCUkVHLCBDSkJpZzJfSW1hZ2UoR0JXLCBHQkgpKTsNCi0gICAgR0JSRUctPmZpbGwoMCk7DQotICAgIGZvcihGWF9EV09SRCBoID0gMDsgaCA8IEdCSDsgaCsrKSB7DQotICAgICAgICBpZihUUEdET04pIHsNCi0gICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbMHgwMTk1XSk7DQotICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKExUUCA9PSAxKSB7DQotICAgICAgICAgICAgR0JSRUctPmNvcHlMaW5lKGgsIGggLSAxKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbGluZTEgPSBHQlJFRy0+Z2V0UGl4ZWwoMSwgaCAtIDEpOw0KLSAgICAgICAgICAgIGxpbmUxIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBoIC0gMSkgPDwgMTsNCi0gICAgICAgICAgICBsaW5lMiA9IDA7DQotICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR0JXOyB3KyspIHsNCi0gICAgICAgICAgICAgICAgaWYoVVNFU0tJUCAmJiBTS0lQLT5nZXRQaXhlbCh3LCBoKSkgew0KLSAgICAgICAgICAgICAgICAgICAgYlZhbCA9IDA7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gbGluZTI7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFswXSwgaCArIEdCQVRbMV0pIDw8IDQ7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUxIDw8IDU7DQotICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmKGJWYWwpIHsNCi0gICAgICAgICAgICAgICAgICAgIEdCUkVHLT5zZXRQaXhlbCh3LCBoLCBiVmFsKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBsaW5lMSA9ICgobGluZTEgPDwgMSkgfCBHQlJFRy0+Z2V0UGl4ZWwodyArIDIsIGggLSAxKSkgJiAweDFmOw0KLSAgICAgICAgICAgICAgICBsaW5lMiA9ICgobGluZTIgPDwgMSkgfCBiVmFsKSAmIDB4MGY7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBHQlJFRzsNCi19DQotQ0pCaWcyX0ltYWdlICpDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoX1YyKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCkNCi17DQotICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOw0KLSAgICBGWF9EV09SRCBDT05URVhUOw0KLSAgICBDSkJpZzJfSW1hZ2UgKkdCUkVHOw0KLSAgICBGWF9EV09SRCBsaW5lMSwgbGluZTIsIGxpbmUzOw0KLSAgICBMVFAgPSAwOw0KLSAgICBKQklHMl9BTExPQyhHQlJFRywgQ0pCaWcyX0ltYWdlKEdCVywgR0JIKSk7DQotICAgIEdCUkVHLT5maWxsKDApOw0KLSAgICBmb3IoRlhfRFdPUkQgaCA9IDA7IGggPCBHQkg7IGgrKykgew0KLSAgICAgICAgaWYoVFBHRE9OKSB7DQotICAgICAgICAgICAgc3dpdGNoKEdCVEVNUExBVEUpIHsNCi0gICAgICAgICAgICAgICAgY2FzZSAwOg0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IDB4OWIyNTsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDE6DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gMHgwNzk1Ow0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMjoNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAweDAwZTU7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAzOg0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IDB4MDE5NTsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgIExUUCA9IExUUCBeIFNMVFA7DQotICAgICAgICB9DQotICAgICAgICBpZihMVFAgPT0gMSkgew0KLSAgICAgICAgICAgIEdCUkVHLT5jb3B5TGluZShoLCBoIC0gMSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHN3aXRjaChHQlRFTVBMQVRFKSB7DQotICAgICAgICAgICAgICAgIGNhc2UgMDogew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxID0gR0JSRUctPmdldFBpeGVsKDEsIGggLSAyKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSB8PSBHQlJFRy0+Z2V0UGl4ZWwoMCwgaCAtIDIpIDw8IDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPSBHQlJFRy0+Z2V0UGl4ZWwoMiwgaCAtIDEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyIHw9IEdCUkVHLT5nZXRQaXhlbCgxLCBoIC0gMSkgPDwgMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiB8PSBHQlJFRy0+Z2V0UGl4ZWwoMCwgaCAtIDEpIDw8IDI7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTMgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdysrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKFVTRVNLSVAgJiYgU0tJUC0+Z2V0UGl4ZWwodywgaCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IGxpbmUzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMF0sIGggKyBHQkFUWzFdKSA8PCA0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMiA8PCA1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMl0sIGggKyBHQkFUWzNdKSA8PCAxMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzRdLCBoICsgR0JBVFs1XSkgPDwgMTE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUxIDw8IDEyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbNl0sIGggKyBHQkFUWzddKSA8PCAxNTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYlZhbCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0JSRUctPnNldFBpeGVsKHcsIGgsIGJWYWwpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxID0gKChsaW5lMSA8PCAxKSB8IEdCUkVHLT5nZXRQaXhlbCh3ICsgMiwgaCAtIDIpKSAmIDB4MDc7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyID0gKChsaW5lMiA8PCAxKSB8IEdCUkVHLT5nZXRQaXhlbCh3ICsgMywgaCAtIDEpKSAmIDB4MWY7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUzID0gKChsaW5lMyA8PCAxKSB8IGJWYWwpICYgMHgwZjsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAxOiB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgPSBHQlJFRy0+Z2V0UGl4ZWwoMiwgaCAtIDIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxIHw9IEdCUkVHLT5nZXRQaXhlbCgxLCBoIC0gMikgPDwgMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSB8PSBHQlJFRy0+Z2V0UGl4ZWwoMCwgaCAtIDIpIDw8IDI7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPSBHQlJFRy0+Z2V0UGl4ZWwoMiwgaCAtIDEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyIHw9IEdCUkVHLT5nZXRQaXhlbCgxLCBoIC0gMSkgPDwgMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiB8PSBHQlJFRy0+Z2V0UGl4ZWwoMCwgaCAtIDEpIDw8IDI7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTMgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdysrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKFVTRVNLSVAgJiYgU0tJUC0+Z2V0UGl4ZWwodywgaCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IGxpbmUzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMF0sIGggKyBHQkFUWzFdKSA8PCAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMiA8PCA0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMSA8PCA5Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihiVmFsKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQlJFRy0+c2V0UGl4ZWwodywgaCwgYlZhbCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgPSAoKGxpbmUxIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyAzLCBoIC0gMikpICYgMHgwZjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAoKGxpbmUyIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyAzLCBoIC0gMSkpICYgMHgxZjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTMgPSAoKGxpbmUzIDw8IDEpIHwgYlZhbCkgJiAweDA3Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDI6IHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSA9IEdCUkVHLT5nZXRQaXhlbCgxLCBoIC0gMik7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgfD0gR0JSRUctPmdldFBpeGVsKDAsIGggLSAyKSA8PCAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyID0gR0JSRUctPmdldFBpeGVsKDEsIGggLSAxKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiB8PSBHQlJFRy0+Z2V0UGl4ZWwoMCwgaCAtIDEpIDw8IDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTMgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdysrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKFVTRVNLSVAgJiYgU0tJUC0+Z2V0UGl4ZWwodywgaCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IGxpbmUzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMF0sIGggKyBHQkFUWzFdKSA8PCAyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMiA8PCAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMSA8PCA3Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihiVmFsKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQlJFRy0+c2V0UGl4ZWwodywgaCwgYlZhbCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgPSAoKGxpbmUxIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyAyLCBoIC0gMikpICYgMHgwNzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAoKGxpbmUyIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyAyLCBoIC0gMSkpICYgMHgwZjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTMgPSAoKGxpbmUzIDw8IDEpIHwgYlZhbCkgJiAweDAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDM6IHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSA9IEdCUkVHLT5nZXRQaXhlbCgxLCBoIC0gMSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgfD0gR0JSRUctPmdldFBpeGVsKDAsIGggLSAxKSA8PCAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHQlc7IHcrKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihVU0VTS0lQICYmIFNLSVAtPmdldFBpeGVsKHcsIGgpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSBsaW5lMjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzBdLCBoICsgR0JBVFsxXSkgPDwgNDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTEgPDwgNTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYlZhbCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0JSRUctPnNldFBpeGVsKHcsIGgsIGJWYWwpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxID0gKChsaW5lMSA8PCAxKSB8IEdCUkVHLT5nZXRQaXhlbCh3ICsgMiwgaCAtIDEpKSAmIDB4MWY7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyID0gKChsaW5lMiA8PCAxKSB8IGJWYWwpICYgMHgwZjsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEdCUkVHOw0KLX0NCi1DSkJpZzJfSW1hZ2UgKkNKQmlnMl9HUkRQcm9jOjpkZWNvZGVfQXJpdGhfVjEoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KQ0KLXsNCi0gICAgRlhfQk9PTCBMVFAsIFNMVFAsIGJWYWw7DQotICAgIEZYX0RXT1JEIENPTlRFWFQgPSAwOw0KLSAgICBDSkJpZzJfSW1hZ2UgKkdCUkVHOw0KLSAgICBMVFAgPSAwOw0KLSAgICBKQklHMl9BTExPQyhHQlJFRywgQ0pCaWcyX0ltYWdlKEdCVywgR0JIKSk7DQotICAgIEdCUkVHLT5maWxsKDApOw0KLSAgICBmb3IoRlhfRFdPUkQgaCA9IDA7IGggPCBHQkg7IGgrKykgew0KLSAgICAgICAgaWYoVFBHRE9OKSB7DQotICAgICAgICAgICAgc3dpdGNoKEdCVEVNUExBVEUpIHsNCi0gICAgICAgICAgICAgICAgY2FzZSAwOg0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IDB4OWIyNTsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDE6DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gMHgwNzk1Ow0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMjoNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAweDAwZTU7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAzOg0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IDB4MDE5NTsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgIExUUCA9IExUUCBeIFNMVFA7DQotICAgICAgICB9DQotICAgICAgICBpZihMVFAgPT0gMSkgew0KLSAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdysrKSB7DQotICAgICAgICAgICAgICAgIEdCUkVHLT5zZXRQaXhlbCh3LCBoLCBHQlJFRy0+Z2V0UGl4ZWwodywgaCAtIDEpKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdysrKSB7DQotICAgICAgICAgICAgICAgIGlmKFVTRVNLSVAgJiYgU0tJUC0+Z2V0UGl4ZWwodywgaCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIEdCUkVHLT5zZXRQaXhlbCh3LCBoLCAwKTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKEdCVEVNUExBVEUpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAxLCBoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDIsIGgpIDw8IDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAzLCBoKSA8PCAyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gNCwgaCkgPDwgMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMF0sIGggKyBHQkFUWzFdKSA8PCA0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgMiwgaCAtIDEpIDw8IDU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyAxLCBoIC0gMSkgPDwgNjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodywgaCAtIDEpIDw8IDc7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAxLCBoIC0gMSkgPDwgODsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDIsIGggLSAxKSA8PCA5Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFsyXSwgaCArIEdCQVRbM10pIDw8IDEwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFs0XSwgaCArIEdCQVRbNV0pIDw8IDExOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgMSwgaCAtIDIpIDw8IDEyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3LCBoIC0gMikgPDwgMTM7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAxLCBoIC0gMikgPDwgMTQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzZdLCBoICsgR0JBVFs3XSkgPDwgMTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDEsIGgpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMiwgaCkgPDwgMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDMsIGgpIDw8IDI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzBdLCBoICsgR0JBVFsxXSkgPDwgMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIDIsIGggLSAxKSA8PCA0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgMSwgaCAtIDEpIDw8IDU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcsIGggLSAxKSA8PCA2Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMSwgaCAtIDEpIDw8IDc7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAyLCBoIC0gMSkgPDwgODsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIDIsIGggLSAyKSA8PCA5Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgMSwgaCAtIDIpIDw8IDEwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3LCBoIC0gMikgPDwgMTE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAxLCBoIC0gMikgPDwgMTI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDEsIGgpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMiwgaCkgPDwgMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMF0sIGggKyBHQkFUWzFdKSA8PCAyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgMSwgaCAtIDEpIDw8IDM7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcsIGggLSAxKSA8PCA0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMSwgaCAtIDEpIDw8IDU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAyLCBoIC0gMSkgPDwgNjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIDEsIGggLSAyKSA8PCA3Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3LCBoIC0gMikgPDwgODsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDEsIGggLSAyKSA8PCA5Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAxLCBoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDIsIGgpIDw8IDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAzLCBoKSA8PCAyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gNCwgaCkgPDwgMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMF0sIGggKyBHQkFUWzFdKSA8PCA0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgMSwgaCAtIDEpIDw8IDU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcsIGggLSAxKSA8PCA2Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMSwgaCAtIDEpIDw8IDc7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAyLCBoIC0gMSkgPDwgODsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDMsIGggLSAxKSA8PCA5Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICBHQlJFRy0+c2V0UGl4ZWwodywgaCwgYlZhbCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEdCUkVHOw0KLX0NCi1DSkJpZzJfSW1hZ2UgKkNKQmlnMl9HUkRQcm9jOjpkZWNvZGVfTU1SKENKQmlnMl9CaXRTdHJlYW0gKnBTdHJlYW0pDQotew0KLSAgICBpbnQgYml0cG9zLCBpOw0KLSAgICBDSkJpZzJfSW1hZ2UgKnBJbWFnZTsNCi0gICAgSkJJRzJfQUxMT0MocEltYWdlLCBDSkJpZzJfSW1hZ2UoR0JXLCBHQkgpKTsNCi0gICAgaWYgKHBJbWFnZS0+bV9wRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICBkZWxldGUgcEltYWdlOw0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiR2VuZXJpYyByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlOiBDcmVhdGUgSW1hZ2UgRmFpbGVkIHdpdGggd2lkdGggPSAlZCwgaGVpZ2h0ID0gJWRcbiIsIEdCVywgR0JIKTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGJpdHBvcyA9IChpbnQpcFN0cmVhbS0+Z2V0Qml0UG9zKCk7DQotICAgIF9GYXhHNERlY29kZShtX3BNb2R1bGUsIHBTdHJlYW0tPmdldEJ1ZigpLCBwU3RyZWFtLT5nZXRMZW5ndGgoKSwgJmJpdHBvcywgcEltYWdlLT5tX3BEYXRhLCBHQlcsIEdCSCwgcEltYWdlLT5tX25TdHJpZGUpOw0KLSAgICBwU3RyZWFtLT5zZXRCaXRQb3MoYml0cG9zKTsNCi0gICAgZm9yKGkgPSAwOyAoRlhfRFdPUkQpaSA8IHBJbWFnZS0+bV9uU3RyaWRlICogR0JIOyBpKyspIHsNCi0gICAgICAgIHBJbWFnZS0+bV9wRGF0YVtpXSA9IH5wSW1hZ2UtPm1fcERhdGFbaV07DQotICAgIH0NCi0gICAgcmV0dXJuIHBJbWFnZTsNCi19DQotQ0pCaWcyX0ltYWdlICpDSkJpZzJfR1JSRFByb2M6OmRlY29kZShDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnckNvbnRleHQpDQotew0KLSAgICBpZiAoR1JXID09IDAgfHwgR1JIID09IDApIHsNCi0gICAgICAgIENKQmlnMl9JbWFnZSogcEltYWdlOw0KLSAgICAgICAgSkJJRzJfQUxMT0MocEltYWdlLCBDSkJpZzJfSW1hZ2UoR1JXLCBHUkgpKTsNCi0gICAgICAgIHJldHVybiBwSW1hZ2U7DQotICAgIH0NCi0gICAgaWYoR1JURU1QTEFURSA9PSAwKSB7DQotICAgICAgICBpZigoR1JBVFswXSA9PSAoc2lnbmVkIGNoYXIpIC0gMSkgJiYgKEdSQVRbMV0gPT0gKHNpZ25lZCBjaGFyKSAtIDEpDQotICAgICAgICAgICAgICAgICYmIChHUkFUWzJdID09IChzaWduZWQgY2hhcikgLSAxKSAmJiAoR1JBVFszXSA9PSAoc2lnbmVkIGNoYXIpIC0gMSkNCi0gICAgICAgICAgICAgICAgJiYgKEdSUkVGRVJFTkNFRFggPT0gMCkgJiYgKEdSVyA9PSAoRlhfRFdPUkQpR1JSRUZFUkVOQ0UtPm1fbldpZHRoKSkgew0KLSAgICAgICAgICAgIHJldHVybiBkZWNvZGVfVGVtcGxhdGUwX29wdChwQXJpdGhEZWNvZGVyLCBnckNvbnRleHQpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICByZXR1cm4gZGVjb2RlX1RlbXBsYXRlMF91bm9wdChwQXJpdGhEZWNvZGVyLCBnckNvbnRleHQpOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYoKEdSUkVGRVJFTkNFRFggPT0gMCkgJiYgKEdSVyA9PSAoRlhfRFdPUkQpR1JSRUZFUkVOQ0UtPm1fbldpZHRoKSkgew0KLSAgICAgICAgICAgIHJldHVybiBkZWNvZGVfVGVtcGxhdGUxX29wdChwQXJpdGhEZWNvZGVyLCBnckNvbnRleHQpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICByZXR1cm4gZGVjb2RlX1RlbXBsYXRlMV91bm9wdChwQXJpdGhEZWNvZGVyLCBnckNvbnRleHQpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLUNKQmlnMl9JbWFnZSAqQ0pCaWcyX0dSUkRQcm9jOjpkZWNvZGVfVGVtcGxhdGUwX3Vub3B0KENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdyQ29udGV4dCkNCi17DQotICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOw0KLSAgICBGWF9EV09SRCBDT05URVhUOw0KLSAgICBDSkJpZzJfSW1hZ2UgKkdSUkVHOw0KLSAgICBGWF9EV09SRCBsaW5lMSwgbGluZTIsIGxpbmUzLCBsaW5lNCwgbGluZTU7DQotICAgIExUUCA9IDA7DQotICAgIEpCSUcyX0FMTE9DKEdSUkVHLCBDSkJpZzJfSW1hZ2UoR1JXLCBHUkgpKTsNCi0gICAgR1JSRUctPmZpbGwoMCk7DQotICAgIGZvcihGWF9EV09SRCBoID0gMDsgaCA8IEdSSDsgaCsrKSB7DQotICAgICAgICBpZihUUEdST04pIHsNCi0gICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnckNvbnRleHRbMHgwMDEwXSk7DQotICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKExUUCA9PSAwKSB7DQotICAgICAgICAgICAgbGluZTEgPSBHUlJFRy0+Z2V0UGl4ZWwoMSwgaCAtIDEpOw0KLSAgICAgICAgICAgIGxpbmUxIHw9IEdSUkVHLT5nZXRQaXhlbCgwLCBoIC0gMSkgPDwgMTsNCi0gICAgICAgICAgICBsaW5lMiA9IDA7DQotICAgICAgICAgICAgbGluZTMgPSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwoLUdSUkVGRVJFTkNFRFggKyAxLCBoIC0gR1JSRUZFUkVOQ0VEWSAtIDEpOw0KLSAgICAgICAgICAgIGxpbmUzIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkgLSAxKSA8PCAxOw0KLSAgICAgICAgICAgIGxpbmU0ID0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKC1HUlJFRkVSRU5DRURYICsgMSwgaCAtIEdSUkVGRVJFTkNFRFkpOw0KLSAgICAgICAgICAgIGxpbmU0IHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkpIDw8IDE7DQotICAgICAgICAgICAgbGluZTQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKC1HUlJFRkVSRU5DRURYIC0gMSwgaCAtIEdSUkVGRVJFTkNFRFkpIDw8IDI7DQotICAgICAgICAgICAgbGluZTUgPSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwoLUdSUkVGRVJFTkNFRFggKyAxLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpOw0KLSAgICAgICAgICAgIGxpbmU1IHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkgKyAxKSA8PCAxOw0KLSAgICAgICAgICAgIGxpbmU1IHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCAtIDEsIGggLSBHUlJFRkVSRU5DRURZICsgMSkgPDwgMjsNCi0gICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHUlc7IHcrKykgew0KLSAgICAgICAgICAgICAgICBDT05URVhUID0gbGluZTU7DQotICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTQgPDwgMzsNCi0gICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMyA8PCA2Ow0KLSAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCArIEdSQVRbMl0sIGggLSBHUlJFRkVSRU5DRURZICsgR1JBVFszXSkgPDwgODsNCi0gICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMiA8PCA5Ow0KLSAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUxIDw8IDEwOw0KLSAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVHLT5nZXRQaXhlbCh3ICsgR1JBVFswXSwgaCArIEdSQVRbMV0pIDw8IDEyOw0KLSAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnckNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICBHUlJFRy0+c2V0UGl4ZWwodywgaCwgYlZhbCk7DQotICAgICAgICAgICAgICAgIGxpbmUxID0gKChsaW5lMSA8PCAxKSB8IEdSUkVHLT5nZXRQaXhlbCh3ICsgMiwgaCAtIDEpKSAmIDB4MDM7DQotICAgICAgICAgICAgICAgIGxpbmUyID0gKChsaW5lMiA8PCAxKSB8IGJWYWwpICYgMHgwMTsNCi0gICAgICAgICAgICAgICAgbGluZTMgPSAoKGxpbmUzIDw8IDEpIHwgR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYICsgMiwgaCAtIEdSUkVGRVJFTkNFRFkgLSAxKSkgJiAweDAzOw0KLSAgICAgICAgICAgICAgICBsaW5lNCA9ICgobGluZTQgPDwgMSkgfCBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggKyAyLCBoIC0gR1JSRUZFUkVOQ0VEWSkpICYgMHgwNzsNCi0gICAgICAgICAgICAgICAgbGluZTUgPSAoKGxpbmU1IDw8IDEpIHwgR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYICsgMiwgaCAtIEdSUkVGRVJFTkNFRFkgKyAxKSkgJiAweDA3Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbGluZTEgPSBHUlJFRy0+Z2V0UGl4ZWwoMSwgaCAtIDEpOw0KLSAgICAgICAgICAgIGxpbmUxIHw9IEdSUkVHLT5nZXRQaXhlbCgwLCBoIC0gMSkgPDwgMTsNCi0gICAgICAgICAgICBsaW5lMiA9IDA7DQotICAgICAgICAgICAgbGluZTMgPSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwoLUdSUkVGRVJFTkNFRFggKyAxLCBoIC0gR1JSRUZFUkVOQ0VEWSAtIDEpOw0KLSAgICAgICAgICAgIGxpbmUzIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkgLSAxKSA8PCAxOw0KLSAgICAgICAgICAgIGxpbmU0ID0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKC1HUlJFRkVSRU5DRURYICsgMSwgaCAtIEdSUkVGRVJFTkNFRFkpOw0KLSAgICAgICAgICAgIGxpbmU0IHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkpIDw8IDE7DQotICAgICAgICAgICAgbGluZTQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKC1HUlJFRkVSRU5DRURYIC0gMSwgaCAtIEdSUkVGRVJFTkNFRFkpIDw8IDI7DQotICAgICAgICAgICAgbGluZTUgPSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwoLUdSUkVGRVJFTkNFRFggKyAxLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpOw0KLSAgICAgICAgICAgIGxpbmU1IHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkgKyAxKSA8PCAxOw0KLSAgICAgICAgICAgIGxpbmU1IHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCAtIDEsIGggLSBHUlJFRkVSRU5DRURZICsgMSkgPDwgMjsNCi0gICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHUlc7IHcrKykgew0KLSAgICAgICAgICAgICAgICBiVmFsID0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcsIGgpOw0KLSAgICAgICAgICAgICAgICBpZighKFRQR1JPTiAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIDEsIGggLSAxKSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodywgaCAtIDEpKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3ICsgMSwgaCAtIDEpKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gMSwgaCkpDQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgKyAxLCBoKSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIDEsIGggKyAxKSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodywgaCArIDEpKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3ICsgMSwgaCArIDEpKSkpIHsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSBsaW5lNTsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTQgPDwgMzsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTMgPDwgNjsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYICsgR1JBVFsyXSwgaCAtIEdSUkVGRVJFTkNFRFkgKyBHUkFUWzNdKSA8PCA4Ow0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMiA8PCA5Ow0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMSA8PCAxMDsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUctPmdldFBpeGVsKHcgKyBHUkFUWzBdLCBoICsgR1JBVFsxXSkgPDwgMTI7DQotICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnckNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIEdSUkVHLT5zZXRQaXhlbCh3LCBoLCBiVmFsKTsNCi0gICAgICAgICAgICAgICAgbGluZTEgPSAoKGxpbmUxIDw8IDEpIHwgR1JSRUctPmdldFBpeGVsKHcgKyAyLCBoIC0gMSkpICYgMHgwMzsNCi0gICAgICAgICAgICAgICAgbGluZTIgPSAoKGxpbmUyIDw8IDEpIHwgYlZhbCkgJiAweDAxOw0KLSAgICAgICAgICAgICAgICBsaW5lMyA9ICgobGluZTMgPDwgMSkgfCBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggKyAyLCBoIC0gR1JSRUZFUkVOQ0VEWSAtIDEpKSAmIDB4MDM7DQotICAgICAgICAgICAgICAgIGxpbmU0ID0gKChsaW5lNCA8PCAxKSB8IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCArIDIsIGggLSBHUlJFRkVSRU5DRURZKSkgJiAweDA3Ow0KLSAgICAgICAgICAgICAgICBsaW5lNSA9ICgobGluZTUgPDwgMSkgfCBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggKyAyLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpKSAmIDB4MDc7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBHUlJFRzsNCi19DQotQ0pCaWcyX0ltYWdlICpDSkJpZzJfR1JSRFByb2M6OmRlY29kZV9UZW1wbGF0ZTBfb3B0KENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdyQ29udGV4dCkNCi17DQotICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOw0KLSAgICBGWF9EV09SRCBDT05URVhUOw0KLSAgICBDSkJpZzJfSW1hZ2UgKkdSUkVHOw0KLSAgICBGWF9EV09SRCBsaW5lMSwgbGluZTFfciwgbGluZTJfciwgbGluZTNfcjsNCi0gICAgRlhfQllURSAqcExpbmUsICpwTGluZVIsIGNWYWw7DQotICAgIEZYX0lOVFBUUiBuU3RyaWRlLCBuU3RyaWRlUiwgbk9mZnNldDsNCi0gICAgRlhfSU5UMzIgaywgbkJpdHM7DQotICAgIEZYX0lOVDMyIEdSV1IsIEdSSFI7DQotICAgIEZYX0lOVDMyIEdSVywgR1JIOw0KLSAgICBHUlcgPSAoRlhfSU5UMzIpQ0pCaWcyX0dSUkRQcm9jOjpHUlc7DQotICAgIEdSSCA9IChGWF9JTlQzMilDSkJpZzJfR1JSRFByb2M6OkdSSDsNCi0gICAgTFRQID0gMDsNCi0gICAgSkJJRzJfQUxMT0MoR1JSRUcsIENKQmlnMl9JbWFnZShHUlcsIEdSSCkpOw0KLSAgICBpZiAoR1JSRUctPm1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgZGVsZXRlIEdSUkVHOw0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiR2VuZXJpYyByZWZpbmVtZW50IHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmU6IENyZWF0ZSBJbWFnZSBGYWlsZWQgd2l0aCB3aWR0aCA9ICVkLCBoZWlnaHQgPSAlZFxuIiwgR1JXLCBHUkgpOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcExpbmUgPSBHUlJFRy0+bV9wRGF0YTsNCi0gICAgcExpbmVSID0gR1JSRUZFUkVOQ0UtPm1fcERhdGE7DQotICAgIG5TdHJpZGUgPSBHUlJFRy0+bV9uU3RyaWRlOw0KLSAgICBuU3RyaWRlUiA9IEdSUkVGRVJFTkNFLT5tX25TdHJpZGU7DQotICAgIEdSV1IgPSAoRlhfSU5UMzIpR1JSRUZFUkVOQ0UtPm1fbldpZHRoOw0KLSAgICBHUkhSID0gKEZYX0lOVDMyKUdSUkVGRVJFTkNFLT5tX25IZWlnaHQ7DQotICAgIGlmIChHUlJFRkVSRU5DRURZIDwgLUdSSFIgKyAxIHx8IEdSUkVGRVJFTkNFRFkgPiBHUkhSIC0gMSkgew0KLSAgICAgICAgR1JSRUZFUkVOQ0VEWSA9IDA7DQotICAgIH0NCi0gICAgbk9mZnNldCA9IC1HUlJFRkVSRU5DRURZICogblN0cmlkZVI7DQotICAgIGZvciAoRlhfSU5UMzIgaCA9IDA7IGggPCBHUkg7IGgrKykgew0KLSAgICAgICAgaWYoVFBHUk9OKSB7DQotICAgICAgICAgICAgU0xUUCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ3JDb250ZXh0WzB4MDAxMF0pOw0KLSAgICAgICAgICAgIExUUCA9IExUUCBeIFNMVFA7DQotICAgICAgICB9DQotICAgICAgICBsaW5lMSA9IChoID4gMCkgPyBwTGluZVstblN0cmlkZV0gPDwgNCA6IDA7DQotICAgICAgICBGWF9JTlQzMiByZWZlcmVuY2VfaCA9IGggLSBHUlJFRkVSRU5DRURZOw0KLSAgICAgICAgRlhfQk9PTCBsaW5lMV9yX29rID0gKHJlZmVyZW5jZV9oID4gMCAmJiByZWZlcmVuY2VfaCA8IEdSSFIgKyAxKTsNCi0gICAgICAgIEZYX0JPT0wgbGluZTJfcl9vayA9IChyZWZlcmVuY2VfaCA+IC0xICYmIHJlZmVyZW5jZV9oIDwgR1JIUik7DQotICAgICAgICBGWF9CT09MIGxpbmUzX3Jfb2sgPSAocmVmZXJlbmNlX2ggPiAtMiAmJiByZWZlcmVuY2VfaCA8IEdSSFIgLSAxKTsNCi0gICAgICAgIGxpbmUxX3IgPSBsaW5lMV9yX29rID8gcExpbmVSW25PZmZzZXQgLSBuU3RyaWRlUl0gOiAwOw0KLSAgICAgICAgbGluZTJfciA9IGxpbmUyX3Jfb2sgPyBwTGluZVJbbk9mZnNldF0gOiAwOw0KLSAgICAgICAgbGluZTNfciA9IGxpbmUzX3Jfb2sgPyBwTGluZVJbbk9mZnNldCArIG5TdHJpZGVSXSA6IDA7DQotICAgICAgICBpZihMVFAgPT0gMCkgew0KLSAgICAgICAgICAgIENPTlRFWFQgPSAobGluZTEgJiAweDFjMDApIHwgKGxpbmUxX3IgJiAweDAxYzApDQotICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMl9yID4+IDMpICYgMHgwMDM4KSB8ICgobGluZTNfciA+PiA2KSAmIDB4MDAwNyk7DQotICAgICAgICAgICAgZm9yIChGWF9JTlQzMiB3ID0gMDsgdyA8IEdSVzsgdyArPSA4KSB7DQotICAgICAgICAgICAgICAgIG5CaXRzID0gR1JXIC0gdyA+IDggPyA4IDogR1JXIC0gdzsNCi0gICAgICAgICAgICAgICAgaWYgKGggPiAwKQ0KLSAgICAgICAgICAgICAgICAgICAgbGluZTEgPSAobGluZTEgPDwgOCkgfA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAodyArIDggPCBHUlcgPyBwTGluZVstblN0cmlkZSArICh3ID4+IDMpICsgMV0gPDwgNCA6IDApOw0KLSAgICAgICAgICAgICAgICBpZiAoaCA+IEdSSFIgKyBHUlJFRkVSRU5DRURZICsgMSkgew0KLSAgICAgICAgICAgICAgICAgICAgbGluZTFfciA9IDA7DQotICAgICAgICAgICAgICAgICAgICBsaW5lMl9yICA9IDA7DQotICAgICAgICAgICAgICAgICAgICBsaW5lM19yID0gMDsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmKGxpbmUxX3Jfb2spDQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTFfciA9IChsaW5lMV9yIDw8IDgpIHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHcgKyA4IDwgR1JXUiA/IHBMaW5lUltuT2Zmc2V0IC0gblN0cmlkZVIgKyAodyA+PiAzKSArIDFdIDogMCk7DQotICAgICAgICAgICAgICAgICAgICBpZihsaW5lMl9yX29rKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyX3IgPSAobGluZTJfciA8PCA4KSB8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3ICsgOCA8IEdSV1IgPyBwTGluZVJbbk9mZnNldCArICh3ID4+IDMpICsgMV0gOiAwKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmKGxpbmUzX3Jfb2spDQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTNfciA9IChsaW5lM19yIDw8IDgpIHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHcgKyA4IDwgR1JXUiA/IHBMaW5lUltuT2Zmc2V0ICsgblN0cmlkZVIgKyAodyA+PiAzKSArIDFdIDogMCk7DQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lM19yID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBjVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IG5CaXRzOyBrKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdyQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgKDcgLSBrKTsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDBjZGIpIDw8IDEpIHwgKGJWYWwgPDwgOSkgfA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobGluZTEgPj4gKDcgLSBrKSkgJiAweDA0MDApIHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmUxX3IgPj4gKDcgLSBrKSkgJiAweDAwNDApIHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmUyX3IgPj4gKDEwIC0gaykpICYgMHgwMDA4KSB8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChsaW5lM19yID4+ICgxMyAtIGspKSAmIDB4MDAwMSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcExpbmVbdyA+PiAzXSA9IGNWYWw7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBDT05URVhUID0gKGxpbmUxICYgMHgxYzAwKSB8IChsaW5lMV9yICYgMHgwMWMwKQ0KLSAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTJfciA+PiAzKSAmIDB4MDAzOCkgfCAoKGxpbmUzX3IgPj4gNikgJiAweDAwMDcpOw0KLSAgICAgICAgICAgIGZvciAoRlhfSU5UMzIgdyA9IDA7IHcgPCBHUlc7IHcgKz0gOCkgew0KLSAgICAgICAgICAgICAgICBuQml0cyA9IEdSVyAtIHcgPiA4ID8gOCA6IEdSVyAtIHc7DQotICAgICAgICAgICAgICAgIGlmIChoID4gMCkNCi0gICAgICAgICAgICAgICAgICAgIGxpbmUxID0gKGxpbmUxIDw8IDgpIHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHcgKyA4IDwgR1JXID8gcExpbmVbLW5TdHJpZGUgKyAodyA+PiAzKSArIDFdIDw8IDQgOiAwKTsNCi0gICAgICAgICAgICAgICAgaWYobGluZTFfcl9vaykNCi0gICAgICAgICAgICAgICAgICAgIGxpbmUxX3IgPSAobGluZTFfciA8PCA4KSB8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHcgKyA4IDwgR1JXUiA/IHBMaW5lUltuT2Zmc2V0IC0gblN0cmlkZVIgKyAodyA+PiAzKSArIDFdIDogMCk7DQotICAgICAgICAgICAgICAgIGlmKGxpbmUyX3Jfb2spDQotICAgICAgICAgICAgICAgICAgICBsaW5lMl9yID0gKGxpbmUyX3IgPDwgOCkgfA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3ICsgOCA8IEdSV1IgPyBwTGluZVJbbk9mZnNldCArICh3ID4+IDMpICsgMV0gOiAwKTsNCi0gICAgICAgICAgICAgICAgaWYobGluZTNfcl9vaykNCi0gICAgICAgICAgICAgICAgICAgIGxpbmUzX3IgPSAobGluZTNfciA8PCA4KSB8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHcgKyA4IDwgR1JXUiA/IHBMaW5lUltuT2Zmc2V0ICsgblN0cmlkZVIgKyAodyA+PiAzKSArIDFdIDogMCk7DQotICAgICAgICAgICAgICAgIGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgbGluZTNfciA9IDA7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgY1ZhbCA9IDA7DQotICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBuQml0czsgaysrKSB7DQotICAgICAgICAgICAgICAgICAgICBiVmFsID0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgKyBrLCBoKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmKCEoVFBHUk9OICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3ICsgayAtIDEsIGggLSAxKSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgKyBrLCBoIC0gMSkpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3ICsgayArIDEsIGggLSAxKSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgKyBrIC0gMSwgaCkpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3ICsgayArIDEsIGgpKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyArIGsgLSAxLCBoICsgMSkpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3ICsgaywgaCArIDEpKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyArIGsgKyAxLCBoICsgMSkpKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdyQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgKDcgLSBrKTsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDBjZGIpIDw8IDEpIHwgKGJWYWwgPDwgOSkgfA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobGluZTEgPj4gKDcgLSBrKSkgJiAweDA0MDApIHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmUxX3IgPj4gKDcgLSBrKSkgJiAweDAwNDApIHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmUyX3IgPj4gKDEwIC0gaykpICYgMHgwMDA4KSB8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChsaW5lM19yID4+ICgxMyAtIGspKSAmIDB4MDAwMSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcExpbmVbdyA+PiAzXSA9IGNWYWw7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcExpbmUgKz0gblN0cmlkZTsNCi0gICAgICAgIGlmIChoIDwgR1JIUiArIEdSUkVGRVJFTkNFRFkpIHsNCi0gICAgICAgICAgICBwTGluZVIgKz0gblN0cmlkZVI7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEdSUkVHOw0KLX0NCi1DSkJpZzJfSW1hZ2UgKkNKQmlnMl9HUlJEUHJvYzo6ZGVjb2RlX1RlbXBsYXRlMV91bm9wdChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnckNvbnRleHQpDQotew0KLSAgICBGWF9CT09MIExUUCwgU0xUUCwgYlZhbDsNCi0gICAgRlhfRFdPUkQgQ09OVEVYVDsNCi0gICAgQ0pCaWcyX0ltYWdlICpHUlJFRzsNCi0gICAgRlhfRFdPUkQgbGluZTEsIGxpbmUyLCBsaW5lMywgbGluZTQsIGxpbmU1Ow0KLSAgICBMVFAgPSAwOw0KLSAgICBKQklHMl9BTExPQyhHUlJFRywgQ0pCaWcyX0ltYWdlKEdSVywgR1JIKSk7DQotICAgIEdSUkVHLT5maWxsKDApOw0KLSAgICBmb3IoRlhfRFdPUkQgaCA9IDA7IGggPCBHUkg7IGgrKykgew0KLSAgICAgICAgaWYoVFBHUk9OKSB7DQotICAgICAgICAgICAgU0xUUCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ3JDb250ZXh0WzB4MDAwOF0pOw0KLSAgICAgICAgICAgIExUUCA9IExUUCBeIFNMVFA7DQotICAgICAgICB9DQotICAgICAgICBpZihMVFAgPT0gMCkgew0KLSAgICAgICAgICAgIGxpbmUxID0gR1JSRUctPmdldFBpeGVsKDEsIGggLSAxKTsNCi0gICAgICAgICAgICBsaW5lMSB8PSBHUlJFRy0+Z2V0UGl4ZWwoMCwgaCAtIDEpIDw8IDE7DQotICAgICAgICAgICAgbGluZTEgfD0gR1JSRUctPmdldFBpeGVsKC0xLCBoIC0gMSkgPDwgMjsNCi0gICAgICAgICAgICBsaW5lMiA9IDA7DQotICAgICAgICAgICAgbGluZTMgPSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwoLUdSUkVGRVJFTkNFRFgsIGggLSBHUlJFRkVSRU5DRURZIC0gMSk7DQotICAgICAgICAgICAgbGluZTQgPSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwoLUdSUkVGRVJFTkNFRFggKyAxLCBoIC0gR1JSRUZFUkVOQ0VEWSk7DQotICAgICAgICAgICAgbGluZTQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKC1HUlJFRkVSRU5DRURYLCBoIC0gR1JSRUZFUkVOQ0VEWSkgPDwgMTsNCi0gICAgICAgICAgICBsaW5lNCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwoLUdSUkVGRVJFTkNFRFggLSAxLCBoIC0gR1JSRUZFUkVOQ0VEWSkgPDwgMjsNCi0gICAgICAgICAgICBsaW5lNSA9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCArIDEsIGggLSBHUlJFRkVSRU5DRURZICsgMSk7DQotICAgICAgICAgICAgbGluZTUgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKC1HUlJFRkVSRU5DRURYLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpIDw8IDE7DQotICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR1JXOyB3KyspIHsNCi0gICAgICAgICAgICAgICAgQ09OVEVYVCA9IGxpbmU1Ow0KLSAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmU0IDw8IDI7DQotICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTMgPDwgNTsNCi0gICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMiA8PCA2Ow0KLSAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUxIDw8IDc7DQotICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdyQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgIEdSUkVHLT5zZXRQaXhlbCh3LCBoLCBiVmFsKTsNCi0gICAgICAgICAgICAgICAgbGluZTEgPSAoKGxpbmUxIDw8IDEpIHwgR1JSRUctPmdldFBpeGVsKHcgKyAyLCBoIC0gMSkpICYgMHgwNzsNCi0gICAgICAgICAgICAgICAgbGluZTIgPSAoKGxpbmUyIDw8IDEpIHwgYlZhbCkgJiAweDAxOw0KLSAgICAgICAgICAgICAgICBsaW5lMyA9ICgobGluZTMgPDwgMSkgfCBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggKyAxLCBoIC0gR1JSRUZFUkVOQ0VEWSAtIDEpKSAmIDB4MDE7DQotICAgICAgICAgICAgICAgIGxpbmU0ID0gKChsaW5lNCA8PCAxKSB8IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCArIDIsIGggLSBHUlJFRkVSRU5DRURZKSkgJiAweDA3Ow0KLSAgICAgICAgICAgICAgICBsaW5lNSA9ICgobGluZTUgPDwgMSkgfCBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggKyAyLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpKSAmIDB4MDM7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBsaW5lMSA9IEdSUkVHLT5nZXRQaXhlbCgxLCBoIC0gMSk7DQotICAgICAgICAgICAgbGluZTEgfD0gR1JSRUctPmdldFBpeGVsKDAsIGggLSAxKSA8PCAxOw0KLSAgICAgICAgICAgIGxpbmUxIHw9IEdSUkVHLT5nZXRQaXhlbCgtMSwgaCAtIDEpIDw8IDI7DQotICAgICAgICAgICAgbGluZTIgPSAwOw0KLSAgICAgICAgICAgIGxpbmUzID0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKC1HUlJFRkVSRU5DRURYLCBoIC0gR1JSRUZFUkVOQ0VEWSAtIDEpOw0KLSAgICAgICAgICAgIGxpbmU0ID0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKC1HUlJFRkVSRU5DRURYICsgMSwgaCAtIEdSUkVGRVJFTkNFRFkpOw0KLSAgICAgICAgICAgIGxpbmU0IHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkpIDw8IDE7DQotICAgICAgICAgICAgbGluZTQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKC1HUlJFRkVSRU5DRURYIC0gMSwgaCAtIEdSUkVGRVJFTkNFRFkpIDw8IDI7DQotICAgICAgICAgICAgbGluZTUgPSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwoLUdSUkVGRVJFTkNFRFggKyAxLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpOw0KLSAgICAgICAgICAgIGxpbmU1IHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkgKyAxKSA8PCAxOw0KLSAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdSVzsgdysrKSB7DQotICAgICAgICAgICAgICAgIGJWYWwgPSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodywgaCk7DQotICAgICAgICAgICAgICAgIGlmKCEoVFBHUk9OICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gMSwgaCAtIDEpKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3LCBoIC0gMSkpDQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgKyAxLCBoIC0gMSkpDQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSAxLCBoKSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyArIDEsIGgpKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gMSwgaCArIDEpKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3LCBoICsgMSkpDQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgKyAxLCBoICsgMSkpKSkgew0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IGxpbmU1Ow0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lNCA8PCAyOw0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMyA8PCA1Ow0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMiA8PCA2Ow0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMSA8PCA3Ow0KLSAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ3JDb250ZXh0W0NPTlRFWFRdKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBHUlJFRy0+c2V0UGl4ZWwodywgaCwgYlZhbCk7DQotICAgICAgICAgICAgICAgIGxpbmUxID0gKChsaW5lMSA8PCAxKSB8IEdSUkVHLT5nZXRQaXhlbCh3ICsgMiwgaCAtIDEpKSAmIDB4MDc7DQotICAgICAgICAgICAgICAgIGxpbmUyID0gKChsaW5lMiA8PCAxKSB8IGJWYWwpICYgMHgwMTsNCi0gICAgICAgICAgICAgICAgbGluZTMgPSAoKGxpbmUzIDw8IDEpIHwgR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYICsgMSwgaCAtIEdSUkVGRVJFTkNFRFkgLSAxKSkgJiAweDAxOw0KLSAgICAgICAgICAgICAgICBsaW5lNCA9ICgobGluZTQgPDwgMSkgfCBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggKyAyLCBoIC0gR1JSRUZFUkVOQ0VEWSkpICYgMHgwNzsNCi0gICAgICAgICAgICAgICAgbGluZTUgPSAoKGxpbmU1IDw8IDEpIHwgR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYICsgMiwgaCAtIEdSUkVGRVJFTkNFRFkgKyAxKSkgJiAweDAzOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gR1JSRUc7DQotfQ0KLUNKQmlnMl9JbWFnZSAqQ0pCaWcyX0dSUkRQcm9jOjpkZWNvZGVfVGVtcGxhdGUxX29wdChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnckNvbnRleHQpDQotew0KLSAgICBGWF9CT09MIExUUCwgU0xUUCwgYlZhbDsNCi0gICAgRlhfRFdPUkQgQ09OVEVYVDsNCi0gICAgQ0pCaWcyX0ltYWdlICpHUlJFRzsNCi0gICAgRlhfRFdPUkQgbGluZTEsIGxpbmUxX3IsIGxpbmUyX3IsIGxpbmUzX3I7DQotICAgIEZYX0JZVEUgKnBMaW5lLCAqcExpbmVSLCBjVmFsOw0KLSAgICBGWF9JTlRQVFIgblN0cmlkZSwgblN0cmlkZVIsIG5PZmZzZXQ7DQotICAgIEZYX0lOVDMyIGssIG5CaXRzOw0KLSAgICBGWF9JTlQzMiBHUldSLCBHUkhSOw0KLSAgICBGWF9JTlQzMiBHUlcsIEdSSDsNCi0gICAgR1JXID0gKEZYX0lOVDMyKUNKQmlnMl9HUlJEUHJvYzo6R1JXOw0KLSAgICBHUkggPSAoRlhfSU5UMzIpQ0pCaWcyX0dSUkRQcm9jOjpHUkg7DQotICAgIExUUCA9IDA7DQotICAgIEpCSUcyX0FMTE9DKEdSUkVHLCBDSkJpZzJfSW1hZ2UoR1JXLCBHUkgpKTsNCi0gICAgaWYgKEdSUkVHLT5tX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIGRlbGV0ZSBHUlJFRzsNCi0gICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoIkdlbmVyaWMgcmVmaW5lbWVudCByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlOiBDcmVhdGUgSW1hZ2UgRmFpbGVkIHdpdGggd2lkdGggPSAlZCwgaGVpZ2h0ID0gJWRcbiIsIEdSVywgR1JIKTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHBMaW5lID0gR1JSRUctPm1fcERhdGE7DQotICAgIHBMaW5lUiA9IEdSUkVGRVJFTkNFLT5tX3BEYXRhOw0KLSAgICBuU3RyaWRlID0gR1JSRUctPm1fblN0cmlkZTsNCi0gICAgblN0cmlkZVIgPSBHUlJFRkVSRU5DRS0+bV9uU3RyaWRlOw0KLSAgICBHUldSID0gKEZYX0lOVDMyKUdSUkVGRVJFTkNFLT5tX25XaWR0aDsNCi0gICAgR1JIUiA9IChGWF9JTlQzMilHUlJFRkVSRU5DRS0+bV9uSGVpZ2h0Ow0KLSAgICBpZiAoR1JSRUZFUkVOQ0VEWSA8IC1HUkhSICsgMSB8fCBHUlJFRkVSRU5DRURZID4gR1JIUiAtIDEpIHsNCi0gICAgICAgIEdSUkVGRVJFTkNFRFkgPSAwOw0KLSAgICB9DQotICAgIG5PZmZzZXQgPSAtR1JSRUZFUkVOQ0VEWSAqIG5TdHJpZGVSOw0KLSAgICBmb3IgKEZYX0lOVDMyIGggPSAwOyBoIDwgR1JIOyBoKyspIHsNCi0gICAgICAgIGlmKFRQR1JPTikgew0KLSAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdyQ29udGV4dFsweDAwMDhdKTsNCi0gICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbGluZTEgPSAoaCA+IDApID8gcExpbmVbLW5TdHJpZGVdIDw8IDEgOiAwOw0KLSAgICAgICAgRlhfSU5UMzIgcmVmZXJlbmNlX2ggPSBoIC0gR1JSRUZFUkVOQ0VEWTsNCi0gICAgICAgIEZYX0JPT0wgbGluZTFfcl9vayA9IChyZWZlcmVuY2VfaCA+IDAgJiYgcmVmZXJlbmNlX2ggPCBHUkhSICsgMSk7DQotICAgICAgICBGWF9CT09MIGxpbmUyX3Jfb2sgPSAocmVmZXJlbmNlX2ggPiAtMSAmJiByZWZlcmVuY2VfaCA8IEdSSFIpOw0KLSAgICAgICAgRlhfQk9PTCBsaW5lM19yX29rID0gKHJlZmVyZW5jZV9oID4gLTIgJiYgcmVmZXJlbmNlX2ggPCBHUkhSIC0gMSk7DQotICAgICAgICBsaW5lMV9yID0gbGluZTFfcl9vayA/IHBMaW5lUltuT2Zmc2V0IC0gblN0cmlkZVJdIDogMDsNCi0gICAgICAgIGxpbmUyX3IgPSBsaW5lMl9yX29rID8gcExpbmVSW25PZmZzZXRdIDogMDsNCi0gICAgICAgIGxpbmUzX3IgPSBsaW5lM19yX29rID8gcExpbmVSW25PZmZzZXQgKyBuU3RyaWRlUl0gOiAwOw0KLSAgICAgICAgaWYoTFRQID09IDApIHsNCi0gICAgICAgICAgICBDT05URVhUID0gKGxpbmUxICYgMHgwMzgwKSB8ICgobGluZTFfciA+PiAyKSAmIDB4MDAyMCkNCi0gICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUyX3IgPj4gNCkgJiAweDAwMWMpIHwgKChsaW5lM19yID4+IDYpICYgMHgwMDAzKTsNCi0gICAgICAgICAgICBmb3IgKEZYX0lOVDMyIHcgPSAwOyB3IDwgR1JXOyB3ICs9IDgpIHsNCi0gICAgICAgICAgICAgICAgbkJpdHMgPSBHUlcgLSB3ID4gOCA/IDggOiBHUlcgLSB3Ow0KLSAgICAgICAgICAgICAgICBpZiAoaCA+IDApDQotICAgICAgICAgICAgICAgICAgICBsaW5lMSA9IChsaW5lMSA8PCA4KSB8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3ICsgOCA8IEdSVyA/IHBMaW5lWy1uU3RyaWRlICsgKHcgPj4gMykgKyAxXSA8PCAxIDogMCk7DQotICAgICAgICAgICAgICAgIGlmKGxpbmUxX3Jfb2spDQotICAgICAgICAgICAgICAgICAgICBsaW5lMV9yID0gKGxpbmUxX3IgPDwgOCkgfA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3ICsgOCA8IEdSV1IgPyBwTGluZVJbbk9mZnNldCAtIG5TdHJpZGVSICsgKHcgPj4gMykgKyAxXSA6IDApOw0KLSAgICAgICAgICAgICAgICBpZihsaW5lMl9yX29rKQ0KLSAgICAgICAgICAgICAgICAgICAgbGluZTJfciA9IChsaW5lMl9yIDw8IDgpIHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodyArIDggPCBHUldSID8gcExpbmVSW25PZmZzZXQgKyAodyA+PiAzKSArIDFdIDogMCk7DQotICAgICAgICAgICAgICAgIGlmKGxpbmUzX3Jfb2spDQotICAgICAgICAgICAgICAgICAgICBsaW5lM19yID0gKGxpbmUzX3IgPDwgOCkgfA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3ICsgOCA8IEdSV1IgPyBwTGluZVJbbk9mZnNldCArIG5TdHJpZGVSICsgKHcgPj4gMykgKyAxXSA6IDApOw0KLSAgICAgICAgICAgICAgICBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIGxpbmUzX3IgPSAwOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGNWYWwgPSAwOw0KLSAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbkJpdHM7IGsrKykgew0KLSAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ3JDb250ZXh0W0NPTlRFWFRdKTsNCi0gICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCAoNyAtIGspOw0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoQ09OVEVYVCAmIDB4MDE4ZCkgPDwgMSkgfCAoYlZhbCA8PCA2KSB8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChsaW5lMSA+PiAoNyAtIGspKSAmIDB4MDA4MCkgfA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobGluZTFfciA+PiAoOSAtIGspKSAmIDB4MDAyMCkgfA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobGluZTJfciA+PiAoMTEgLSBrKSkgJiAweDAwMDQpIHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmUzX3IgPj4gKDEzIC0gaykpICYgMHgwMDAxKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBwTGluZVt3ID4+IDNdID0gY1ZhbDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIENPTlRFWFQgPSAobGluZTEgJiAweDAzODApIHwgKChsaW5lMV9yID4+IDIpICYgMHgwMDIwKQ0KLSAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTJfciA+PiA0KSAmIDB4MDAxYykgfCAoKGxpbmUzX3IgPj4gNikgJiAweDAwMDMpOw0KLSAgICAgICAgICAgIGZvciAoRlhfSU5UMzIgdyA9IDA7IHcgPCBHUlc7IHcgKz0gOCkgew0KLSAgICAgICAgICAgICAgICBuQml0cyA9IEdSVyAtIHcgPiA4ID8gOCA6IEdSVyAtIHc7DQotICAgICAgICAgICAgICAgIGlmIChoID4gMCkNCi0gICAgICAgICAgICAgICAgICAgIGxpbmUxID0gKGxpbmUxIDw8IDgpIHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHcgKyA4IDwgR1JXID8gcExpbmVbLW5TdHJpZGUgKyAodyA+PiAzKSArIDFdIDw8IDEgOiAwKTsNCi0gICAgICAgICAgICAgICAgaWYobGluZTFfcl9vaykNCi0gICAgICAgICAgICAgICAgICAgIGxpbmUxX3IgPSAobGluZTFfciA8PCA4KSB8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHcgKyA4IDwgR1JXUiA/IHBMaW5lUltuT2Zmc2V0IC0gblN0cmlkZVIgKyAodyA+PiAzKSArIDFdIDogMCk7DQotICAgICAgICAgICAgICAgIGlmKGxpbmUyX3Jfb2spDQotICAgICAgICAgICAgICAgICAgICBsaW5lMl9yID0gKGxpbmUyX3IgPDwgOCkgfA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3ICsgOCA8IEdSV1IgPyBwTGluZVJbbk9mZnNldCArICh3ID4+IDMpICsgMV0gOiAwKTsNCi0gICAgICAgICAgICAgICAgaWYobGluZTNfcl9vaykNCi0gICAgICAgICAgICAgICAgICAgIGxpbmUzX3IgPSAobGluZTNfciA8PCA4KSB8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHcgKyA4IDwgR1JXUiA/IHBMaW5lUltuT2Zmc2V0ICsgblN0cmlkZVIgKyAodyA+PiAzKSArIDFdIDogMCk7DQotICAgICAgICAgICAgICAgIGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgbGluZTNfciA9IDA7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgY1ZhbCA9IDA7DQotICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBuQml0czsgaysrKSB7DQotICAgICAgICAgICAgICAgICAgICBiVmFsID0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgKyBrLCBoKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmKCEoVFBHUk9OICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3ICsgayAtIDEsIGggLSAxKSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgKyBrLCBoIC0gMSkpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3ICsgayArIDEsIGggLSAxKSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgKyBrIC0gMSwgaCkpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3ICsgayArIDEsIGgpKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyArIGsgLSAxLCBoICsgMSkpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3ICsgaywgaCArIDEpKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyArIGsgKyAxLCBoICsgMSkpKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdyQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgKDcgLSBrKTsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDAxOGQpIDw8IDEpIHwgKGJWYWwgPDwgNikgfA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobGluZTEgPj4gKDcgLSBrKSkgJiAweDAwODApIHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmUxX3IgPj4gKDkgLSBrKSkgJiAweDAwMjApIHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmUyX3IgPj4gKDExIC0gaykpICYgMHgwMDA0KSB8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChsaW5lM19yID4+ICgxMyAtIGspKSAmIDB4MDAwMSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcExpbmVbdyA+PiAzXSA9IGNWYWw7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcExpbmUgKz0gblN0cmlkZTsNCi0gICAgICAgIGlmIChoIDwgR1JIUiArIEdSUkVGRVJFTkNFRFkpIHsNCi0gICAgICAgICAgICBwTGluZVIgKz0gblN0cmlkZVI7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIEdSUkVHOw0KLX0NCi1DSkJpZzJfSW1hZ2UgKkNKQmlnMl9HUlJEUHJvYzo6ZGVjb2RlX1YxKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdyQ29udGV4dCkNCi17DQotICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOw0KLSAgICBGWF9CT09MIFRQR1JQSVgsIFRQR1JWQUw7DQotICAgIEZYX0RXT1JEIENPTlRFWFQ7DQotICAgIENKQmlnMl9JbWFnZSAqR1JSRUc7DQotICAgIExUUCA9IDA7DQotICAgIEpCSUcyX0FMTE9DKEdSUkVHLCBDSkJpZzJfSW1hZ2UoR1JXLCBHUkgpKTsNCi0gICAgR1JSRUctPmZpbGwoMCk7DQotICAgIGZvcihGWF9EV09SRCBoID0gMDsgaCA8IEdSSDsgaCsrKSB7DQotICAgICAgICBpZihUUEdST04pIHsNCi0gICAgICAgICAgICBzd2l0Y2goR1JURU1QTEFURSkgew0KLSAgICAgICAgICAgICAgICBjYXNlIDA6DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gMHgwMDEwOw0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMToNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAweDAwMDg7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgU0xUUCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ3JDb250ZXh0W0NPTlRFWFRdKTsNCi0gICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoTFRQID09IDApIHsNCi0gICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHUlc7IHcrKykgew0KLSAgICAgICAgICAgICAgICBDT05URVhUID0gMDsNCi0gICAgICAgICAgICAgICAgc3dpdGNoKEdSVEVNUExBVEUpIHsNCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgMDoNCi0gICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCArIDEsIGggLSBHUlJFRkVSRU5DRURZICsgMSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFgsIGggLSBHUlJFRkVSRU5DRURZICsgMSkgPDwgMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCAtIDEsIGggLSBHUlJFRkVSRU5DRURZICsgMSkgPDwgMjsNCi0gICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCArIDEsIGggLSBHUlJFRkVSRU5DRURZKSA8PCAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYLCBoIC0gR1JSRUZFUkVOQ0VEWSkgPDwgNDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCAtIDEsIGggLSBHUlJFRkVSRU5DRURZKSA8PCA1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYICsgMSwgaCAtIEdSUkVGRVJFTkNFRFkgLSAxKSA8PCA2Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYLCBoIC0gR1JSRUZFUkVOQ0VEWSAtIDEpIDw8IDc7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggKyBHUkFUWzJdLCBoIC0gR1JSRUZFUkVOQ0VEWSArIEdSQVRbM10pIDw8IDg7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRy0+Z2V0UGl4ZWwodyAtIDEsIGgpIDw8IDk7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRy0+Z2V0UGl4ZWwodyArIDEsIGggLSAxKSA8PCAxMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVHLT5nZXRQaXhlbCh3LCBoIC0gMSkgPDwgMTE7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRy0+Z2V0UGl4ZWwodyArIEdSQVRbMF0sIGggKyBHUkFUWzFdKSA8PCAxMjsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCi0gICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCArIDEsIGggLSBHUlJFRkVSRU5DRURZICsgMSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFgsIGggLSBHUlJFRkVSRU5DRURZICsgMSkgPDwgMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCArIDEsIGggLSBHUlJFRkVSRU5DRURZKSA8PCAyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYLCBoIC0gR1JSRUZFUkVOQ0VEWSkgPDwgMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCAtIDEsIGggLSBHUlJFRkVSRU5DRURZKSA8PCA0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYLCBoIC0gR1JSRUZFUkVOQ0VEWSAtIDEpIDw8IDU7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRy0+Z2V0UGl4ZWwodyAtIDEsIGgpIDw8IDY7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRy0+Z2V0UGl4ZWwodyArIDEsIGggLSAxKSA8PCA3Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUctPmdldFBpeGVsKHcsIGggLSAxKSA8PCA4Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUctPmdldFBpeGVsKHcgLSAxLCBoIC0gMSkgPDwgOTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnckNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICBHUlJFRy0+c2V0UGl4ZWwodywgaCwgYlZhbCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHUlc7IHcrKykgew0KLSAgICAgICAgICAgICAgICBiVmFsID0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcsIGgpOw0KLSAgICAgICAgICAgICAgICBpZihUUEdST04gJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSAxLCBoIC0gMSkpDQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcsIGggLSAxKSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyArIDEsIGggLSAxKSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIDEsIGgpKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3ICsgMSwgaCkpDQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSAxLCBoICsgMSkpDQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcsIGggKyAxKSkNCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyArIDEsIGggKyAxKSkpIHsNCi0gICAgICAgICAgICAgICAgICAgIFRQR1JQSVggPSAxOw0KLSAgICAgICAgICAgICAgICAgICAgVFBHUlZBTCA9IGJWYWw7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBUUEdSUElYID0gMDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZihUUEdSUElYKSB7DQotICAgICAgICAgICAgICAgICAgICBHUlJFRy0+c2V0UGl4ZWwodywgaCwgVFBHUlZBTCk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaChHUlRFTVBMQVRFKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCArIDEsIGggLSBHUlJFRkVSRU5DRURZICsgMSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpIDw8IDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYIC0gMSwgaCAtIEdSUkVGRVJFTkNFRFkgKyAxKSA8PCAyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCArIDEsIGggLSBHUlJFRkVSRU5DRURZKSA8PCAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkpIDw8IDQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYIC0gMSwgaCAtIEdSUkVGRVJFTkNFRFkpIDw8IDU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYICsgMSwgaCAtIEdSUkVGRVJFTkNFRFkgLSAxKSA8PCA2Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkgLSAxKSA8PCA3Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCArIEdSQVRbMl0sIGggLSBHUlJFRkVSRU5DRURZICsgR1JBVFszXSkgPDwgODsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRy0+Z2V0UGl4ZWwodyAtIDEsIGgpIDw8IDk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUctPmdldFBpeGVsKHcgKyAxLCBoIC0gMSkgPDwgMTA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUctPmdldFBpeGVsKHcsIGggLSAxKSA8PCAxMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRy0+Z2V0UGl4ZWwodyArIEdSQVRbMF0sIGggKyBHUkFUWzFdKSA8PCAxMjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCArIDEsIGggLSBHUlJFRkVSRU5DRURZICsgMSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpIDw8IDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYICsgMSwgaCAtIEdSUkVGRVJFTkNFRFkpIDw8IDI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYLCBoIC0gR1JSRUZFUkVOQ0VEWSkgPDwgMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggLSAxLCBoIC0gR1JSRUZFUkVOQ0VEWSkgPDwgNDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFgsIGggLSBHUlJFRkVSRU5DRURZIC0gMSkgPDwgNTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRy0+Z2V0UGl4ZWwodyAtIDEsIGgpIDw8IDY7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUctPmdldFBpeGVsKHcgKyAxLCBoIC0gMSkgPDwgNzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRy0+Z2V0UGl4ZWwodywgaCAtIDEpIDw8IDg7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUctPmdldFBpeGVsKHcgLSAxLCBoIC0gMSkgPDwgOTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnckNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICAgICAgR1JSRUctPnNldFBpeGVsKHcsIGgsIGJWYWwpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBHUlJFRzsNCi19DQotQ0pCaWcyX0ltYWdlICpDSkJpZzJfVFJEUHJvYzo6ZGVjb2RlX0h1ZmZtYW4oQ0pCaWcyX0JpdFN0cmVhbSAqcFN0cmVhbSwgSkJpZzJBcml0aEN0eCAqZ3JDb250ZXh0KQ0KLXsNCi0gICAgRlhfSU5UMzIgU1RSSVBULCBGSVJTVFM7DQotICAgIEZYX0RXT1JEIE5JTlNUQU5DRVM7DQotICAgIEZYX0lOVDMyIERULCBERlMsIENVUlM7DQotICAgIEZYX0JZVEUgQ1VSVDsNCi0gICAgRlhfSU5UMzIgU0ksIFRJOw0KLSAgICBGWF9EV09SRCBJREk7DQotICAgIENKQmlnMl9JbWFnZSAqSUJJOw0KLSAgICBGWF9EV09SRCBXSSwgSEk7DQotICAgIEZYX0lOVDMyIElEUzsNCi0gICAgRlhfQk9PTCBSSTsNCi0gICAgRlhfSU5UMzIgUkRXSSwgUkRISSwgUkRYSSwgUkRZSTsNCi0gICAgQ0pCaWcyX0ltYWdlICpJQk9JOw0KLSAgICBGWF9EV09SRCBXT0ksIEhPSTsNCi0gICAgQ0pCaWcyX0ltYWdlICpTQlJFRzsNCi0gICAgRlhfQk9PTCBiRmlyc3Q7DQotICAgIEZYX0RXT1JEIG5UbXA7DQotICAgIEZYX0lOVDMyIG5WYWwsIG5CaXRzOw0KLSAgICBDSkJpZzJfSHVmZm1hbkRlY29kZXIgKnBIdWZmbWFuRGVjb2RlcjsNCi0gICAgQ0pCaWcyX0dSUkRQcm9jICpwR1JSRDsNCi0gICAgQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlcjsNCi0gICAgSkJJRzJfQUxMT0MocEh1ZmZtYW5EZWNvZGVyLCBDSkJpZzJfSHVmZm1hbkRlY29kZXIocFN0cmVhbSkpOw0KLSAgICBKQklHMl9BTExPQyhTQlJFRywgQ0pCaWcyX0ltYWdlKFNCVywgU0JIKSk7DQotICAgIFNCUkVHLT5maWxsKFNCREVGUElYRUwpOw0KLSAgICBpZihwSHVmZm1hbkRlY29kZXItPmRlY29kZUFWYWx1ZShTQkhVRkZEVCwgJlNUUklQVCkgIT0gMCkgew0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigidGV4dCByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlIChodWZmbWFuKTogdG9vIHNob3J0LiIpOw0KLSAgICAgICAgZ290byBmYWlsZWQ7DQotICAgIH0NCi0gICAgU1RSSVBUICo9IFNCU1RSSVBTOw0KLSAgICBTVFJJUFQgPSAtU1RSSVBUOw0KLSAgICBGSVJTVFMgPSAwOw0KLSAgICBOSU5TVEFOQ0VTID0gMDsNCi0gICAgd2hpbGUoTklOU1RBTkNFUyA8IFNCTlVNSU5TVEFOQ0VTKSB7DQotICAgICAgICBpZihwSHVmZm1hbkRlY29kZXItPmRlY29kZUFWYWx1ZShTQkhVRkZEVCwgJkRUKSAhPSAwKSB7DQotICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigidGV4dCByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlIChodWZmbWFuKTogdG9vIHNob3J0LiIpOw0KLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRFQgKj0gU0JTVFJJUFM7DQotICAgICAgICBTVFJJUFQgPSBTVFJJUFQgKyBEVDsNCi0gICAgICAgIGJGaXJzdCA9IFRSVUU7DQotICAgICAgICBmb3IoOzspIHsNCi0gICAgICAgICAgICBpZihiRmlyc3QpIHsNCi0gICAgICAgICAgICAgICAgaWYocEh1ZmZtYW5EZWNvZGVyLT5kZWNvZGVBVmFsdWUoU0JIVUZGRlMsICZERlMpICE9IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZSAoaHVmZm1hbik6IHRvbyBzaG9ydC4iKTsNCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIEZJUlNUUyA9IEZJUlNUUyArIERGUzsNCi0gICAgICAgICAgICAgICAgQ1VSUyA9IEZJUlNUUzsNCi0gICAgICAgICAgICAgICAgYkZpcnN0ID0gRkFMU0U7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgblZhbCA9IHBIdWZmbWFuRGVjb2Rlci0+ZGVjb2RlQVZhbHVlKFNCSFVGRkRTLCAmSURTKTsNCi0gICAgICAgICAgICAgICAgaWYoblZhbCA9PSBKQklHMl9PT0IpIHsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYoblZhbCAhPSAwKSB7DQotICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmUgKGh1ZmZtYW4pOiB0b28gc2hvcnQuIik7DQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIENVUlMgPSBDVVJTICsgSURTICsgU0JEU09GRlNFVDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZihTQlNUUklQUyA9PSAxKSB7DQotICAgICAgICAgICAgICAgIENVUlQgPSAwOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIG5UbXAgPSAxOw0KLSAgICAgICAgICAgICAgICB3aGlsZSgoRlhfRFdPUkQpKDEgPDwgblRtcCkgPCBTQlNUUklQUykgew0KLSAgICAgICAgICAgICAgICAgICAgblRtcCArKzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZihwU3RyZWFtLT5yZWFkTkJpdHMoblRtcCwgJm5WYWwpICE9IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZSAoaHVmZm1hbik6IHRvbyBzaG9ydC4iKTsNCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIENVUlQgPSBuVmFsOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBUSSA9IFNUUklQVCArIENVUlQ7DQotICAgICAgICAgICAgblZhbCA9IDA7DQotICAgICAgICAgICAgbkJpdHMgPSAwOw0KLSAgICAgICAgICAgIGZvcig7Oykgew0KLSAgICAgICAgICAgICAgICBpZihwU3RyZWFtLT5yZWFkMUJpdCgmblRtcCkgIT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigidGV4dCByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlIChodWZmbWFuKTogdG9vIHNob3J0LiIpOw0KLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgblZhbCA9IChuVmFsIDw8IDEpIHwgblRtcDsNCi0gICAgICAgICAgICAgICAgbkJpdHMgKys7DQotICAgICAgICAgICAgICAgIGZvcihJREkgPSAwOyBJREkgPCBTQk5VTVNZTVM7IElESSsrKSB7DQotICAgICAgICAgICAgICAgICAgICBpZigobkJpdHMgPT0gU0JTWU1DT0RFU1tJREldLmNvZGVsZW4pICYmIChuVmFsID09IFNCU1lNQ09ERVNbSURJXS5jb2RlKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmKElESSA8IFNCTlVNU1lNUykgew0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYoU0JSRUZJTkUgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBSSSA9IDA7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgaWYocFN0cmVhbS0+cmVhZDFCaXQoJlJJKSAhPSAwKSB7DQotICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmUgKGh1ZmZtYW4pOiB0b28gc2hvcnQuIik7DQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZihSSSA9PSAwKSB7DQotICAgICAgICAgICAgICAgIElCSSA9IFNCU1lNU1tJREldOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGlmKChwSHVmZm1hbkRlY29kZXItPmRlY29kZUFWYWx1ZShTQkhVRkZSRFcsICZSRFdJKSAhPSAwKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IChwSHVmZm1hbkRlY29kZXItPmRlY29kZUFWYWx1ZShTQkhVRkZSREgsICZSREhJKSAhPSAwKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IChwSHVmZm1hbkRlY29kZXItPmRlY29kZUFWYWx1ZShTQkhVRkZSRFgsICZSRFhJKSAhPSAwKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IChwSHVmZm1hbkRlY29kZXItPmRlY29kZUFWYWx1ZShTQkhVRkZSRFksICZSRFlJKSAhPSAwKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IChwSHVmZm1hbkRlY29kZXItPmRlY29kZUFWYWx1ZShTQkhVRkZSU0laRSwgJm5WYWwpICE9IDApKSB7DQotICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmUgKGh1ZmZtYW4pOiB0b28gc2hvcnQuIik7DQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBwU3RyZWFtLT5hbGlnbkJ5dGUoKTsNCi0gICAgICAgICAgICAgICAgblRtcCA9IHBTdHJlYW0tPmdldE9mZnNldCgpOw0KLSAgICAgICAgICAgICAgICBJQk9JID0gU0JTWU1TW0lESV07DQotICAgICAgICAgICAgICAgIGlmICghSUJPSSkgew0KLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgV09JID0gSUJPSS0+bV9uV2lkdGg7DQotICAgICAgICAgICAgICAgIEhPSSA9IElCT0ktPm1fbkhlaWdodDsNCi0gICAgICAgICAgICAgICAgaWYgKChpbnQpKFdPSSArIFJEV0kpIDwgMCB8fCAoaW50KShIT0kgKyBSREhJKSA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZSAoaHVmZm1hbik6IEludmFsaWQgUkRXSSBvciBSREhJIHZhbHVlLiIpOw0KLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MocEdSUkQsIENKQmlnMl9HUlJEUHJvYygpKTsNCi0gICAgICAgICAgICAgICAgcEdSUkQtPkdSVyA9IFdPSSArIFJEV0k7DQotICAgICAgICAgICAgICAgIHBHUlJELT5HUkggPSBIT0kgKyBSREhJOw0KLSAgICAgICAgICAgICAgICBwR1JSRC0+R1JURU1QTEFURSA9IFNCUlRFTVBMQVRFOw0KLSAgICAgICAgICAgICAgICBwR1JSRC0+R1JSRUZFUkVOQ0UgPSBJQk9JOw0KLSAgICAgICAgICAgICAgICBwR1JSRC0+R1JSRUZFUkVOQ0VEWCA9IChSRFdJID4+IDIpICsgUkRYSTsNCi0gICAgICAgICAgICAgICAgcEdSUkQtPkdSUkVGRVJFTkNFRFkgPSAoUkRISSA+PiAyKSArIFJEWUk7DQotICAgICAgICAgICAgICAgIHBHUlJELT5UUEdST04gPSAwOw0KLSAgICAgICAgICAgICAgICBwR1JSRC0+R1JBVFswXSA9IFNCUkFUWzBdOw0KLSAgICAgICAgICAgICAgICBwR1JSRC0+R1JBVFsxXSA9IFNCUkFUWzFdOw0KLSAgICAgICAgICAgICAgICBwR1JSRC0+R1JBVFsyXSA9IFNCUkFUWzJdOw0KLSAgICAgICAgICAgICAgICBwR1JSRC0+R1JBVFszXSA9IFNCUkFUWzNdOw0KLSAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhwQXJpdGhEZWNvZGVyLCBDSkJpZzJfQXJpdGhEZWNvZGVyKHBTdHJlYW0pKTsNCi0gICAgICAgICAgICAgICAgSUJJID0gcEdSUkQtPmRlY29kZShwQXJpdGhEZWNvZGVyLCBnckNvbnRleHQpOw0KLSAgICAgICAgICAgICAgICBpZihJQkkgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBHUlJEOw0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBBcml0aERlY29kZXI7DQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBkZWxldGUgcEFyaXRoRGVjb2RlcjsNCi0gICAgICAgICAgICAgICAgcFN0cmVhbS0+YWxpZ25CeXRlKCk7DQotICAgICAgICAgICAgICAgIHBTdHJlYW0tPm9mZnNldCgyKTsNCi0gICAgICAgICAgICAgICAgaWYoKEZYX0RXT1JEKW5WYWwgIT0gKHBTdHJlYW0tPmdldE9mZnNldCgpIC0gblRtcCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBJQkk7DQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgcEdSUkQ7DQotICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmUgKGh1ZmZtYW4pOiINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5dGVzIHByb2Nlc3NlZCBieSBnZW5lcmljIHJlZmluZW1lbnQgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZSBkb2Vzbid0IGVxdWFsIFNCSFVGRlJTSVpFLiIpOw0KLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZGVsZXRlIHBHUlJEOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoIUlCSSkgew0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgV0kgPSBJQkktPm1fbldpZHRoOw0KLSAgICAgICAgICAgIEhJID0gSUJJLT5tX25IZWlnaHQ7DQotICAgICAgICAgICAgaWYoVFJBTlNQT1NFRCA9PSAwICYmICgoUkVGQ09STkVSID09IEpCSUcyX0NPUk5FUl9UT1BSSUdIVCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChSRUZDT1JORVIgPT0gSkJJRzJfQ09STkVSX0JPVFRPTVJJR0hUKSkpIHsNCi0gICAgICAgICAgICAgICAgQ1VSUyA9IENVUlMgKyBXSSAtIDE7DQotICAgICAgICAgICAgfSBlbHNlIGlmKFRSQU5TUE9TRUQgPT0gMSAmJiAoKFJFRkNPUk5FUiA9PSBKQklHMl9DT1JORVJfQk9UVE9NTEVGVCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoUkVGQ09STkVSID09IEpCSUcyX0NPUk5FUl9CT1RUT01SSUdIVCkpKSB7DQotICAgICAgICAgICAgICAgIENVUlMgPSBDVVJTICsgSEkgLSAxOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBTSSA9IENVUlM7DQotICAgICAgICAgICAgaWYoVFJBTlNQT1NFRCA9PSAwKSB7DQotICAgICAgICAgICAgICAgIHN3aXRjaChSRUZDT1JORVIpIHsNCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09STkVSX1RPUExFRlQ6DQotICAgICAgICAgICAgICAgICAgICAgICAgU0JSRUctPmNvbXBvc2VGcm9tKFNJLCBUSSwgSUJJLCBTQkNPTUJPUCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPUk5FUl9UT1BSSUdIVDoNCi0gICAgICAgICAgICAgICAgICAgICAgICBTQlJFRy0+Y29tcG9zZUZyb20oU0kgLSBXSSArIDEsIFRJLCBJQkksIFNCQ09NQk9QKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09STkVSX0JPVFRPTUxFRlQ6DQotICAgICAgICAgICAgICAgICAgICAgICAgU0JSRUctPmNvbXBvc2VGcm9tKFNJLCBUSSAtIEhJICsgMSwgSUJJLCBTQkNPTUJPUCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPUk5FUl9CT1RUT01SSUdIVDoNCi0gICAgICAgICAgICAgICAgICAgICAgICBTQlJFRy0+Y29tcG9zZUZyb20oU0kgLSBXSSArIDEsIFRJIC0gSEkgKyAxLCBJQkksIFNCQ09NQk9QKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHN3aXRjaChSRUZDT1JORVIpIHsNCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09STkVSX1RPUExFRlQ6DQotICAgICAgICAgICAgICAgICAgICAgICAgU0JSRUctPmNvbXBvc2VGcm9tKFRJLCBTSSwgSUJJLCBTQkNPTUJPUCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPUk5FUl9UT1BSSUdIVDoNCi0gICAgICAgICAgICAgICAgICAgICAgICBTQlJFRy0+Y29tcG9zZUZyb20oVEkgLSBXSSArIDEsIFNJLCBJQkksIFNCQ09NQk9QKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09STkVSX0JPVFRPTUxFRlQ6DQotICAgICAgICAgICAgICAgICAgICAgICAgU0JSRUctPmNvbXBvc2VGcm9tKFRJLCBTSSAtIEhJICsgMSwgSUJJLCBTQkNPTUJPUCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPUk5FUl9CT1RUT01SSUdIVDoNCi0gICAgICAgICAgICAgICAgICAgICAgICBTQlJFRy0+Y29tcG9zZUZyb20oVEkgLSBXSSArIDEsIFNJIC0gSEkgKyAxLCBJQkksIFNCQ09NQk9QKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZihSSSAhPSAwKSB7DQotICAgICAgICAgICAgICAgIGRlbGV0ZSBJQkk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmKFRSQU5TUE9TRUQgPT0gMCAmJiAoKFJFRkNPUk5FUiA9PSBKQklHMl9DT1JORVJfVE9QTEVGVCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChSRUZDT1JORVIgPT0gSkJJRzJfQ09STkVSX0JPVFRPTUxFRlQpKSkgew0KLSAgICAgICAgICAgICAgICBDVVJTID0gQ1VSUyArIFdJIC0gMTsNCi0gICAgICAgICAgICB9IGVsc2UgaWYoVFJBTlNQT1NFRCA9PSAxICYmICgoUkVGQ09STkVSID09IEpCSUcyX0NPUk5FUl9UT1BMRUZUKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChSRUZDT1JORVIgPT0gSkJJRzJfQ09STkVSX1RPUFJJR0hUKSkpIHsNCi0gICAgICAgICAgICAgICAgQ1VSUyA9IENVUlMgKyBISSAtIDE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIE5JTlNUQU5DRVMgPSBOSU5TVEFOQ0VTICsgMTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBkZWxldGUgcEh1ZmZtYW5EZWNvZGVyOw0KLSAgICByZXR1cm4gU0JSRUc7DQotZmFpbGVkOg0KLSAgICBkZWxldGUgcEh1ZmZtYW5EZWNvZGVyOw0KLSAgICBkZWxldGUgU0JSRUc7DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1DSkJpZzJfSW1hZ2UgKkNKQmlnMl9UUkRQcm9jOjpkZWNvZGVfQXJpdGgoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ3JDb250ZXh0LA0KLSAgICAgICAgSkJpZzJJbnREZWNvZGVyU3RhdGUgKnBJRFMpDQotew0KLSAgICBGWF9JTlQzMiBTVFJJUFQsIEZJUlNUUzsNCi0gICAgRlhfRFdPUkQgTklOU1RBTkNFUzsNCi0gICAgRlhfSU5UMzIgRFQsIERGUywgQ1VSUzsNCi0gICAgRlhfSU5UMzIgQ1VSVDsNCi0gICAgRlhfSU5UMzIgU0ksIFRJOw0KLSAgICBGWF9EV09SRCBJREk7DQotICAgIENKQmlnMl9JbWFnZSAqSUJJOw0KLSAgICBGWF9EV09SRCBXSSwgSEk7DQotICAgIEZYX0lOVDMyIElEUzsNCi0gICAgRlhfQk9PTCBSSTsNCi0gICAgRlhfSU5UMzIgUkRXSSwgUkRISSwgUkRYSSwgUkRZSTsNCi0gICAgQ0pCaWcyX0ltYWdlICpJQk9JOw0KLSAgICBGWF9EV09SRCBXT0ksIEhPSTsNCi0gICAgQ0pCaWcyX0ltYWdlICpTQlJFRzsNCi0gICAgRlhfQk9PTCBiRmlyc3Q7DQotICAgIEZYX0lOVDMyIG5SZXQsIG5WYWw7DQotICAgIEZYX0lOVDMyIGJSZXRhaW5lZDsNCi0gICAgQ0pCaWcyX0FyaXRoSW50RGVjb2RlciAqSUFEVCwgKklBRlMsICpJQURTLCAqSUFJVCwgKklBUkksICpJQVJEVywgKklBUkRILCAqSUFSRFgsICpJQVJEWTsNCi0gICAgQ0pCaWcyX0FyaXRoSWFpZERlY29kZXIgKklBSUQ7DQotICAgIENKQmlnMl9HUlJEUHJvYyAqcEdSUkQ7DQotICAgIGlmKHBJRFMpIHsNCi0gICAgICAgIElBRFQgPSBwSURTLT5JQURUOw0KLSAgICAgICAgSUFGUyA9IHBJRFMtPklBRlM7DQotICAgICAgICBJQURTID0gcElEUy0+SUFEUzsNCi0gICAgICAgIElBSVQgPSBwSURTLT5JQUlUOw0KLSAgICAgICAgSUFSSSA9IHBJRFMtPklBUkk7DQotICAgICAgICBJQVJEVyA9IHBJRFMtPklBUkRXOw0KLSAgICAgICAgSUFSREggPSBwSURTLT5JQVJESDsNCi0gICAgICAgIElBUkRYID0gcElEUy0+SUFSRFg7DQotICAgICAgICBJQVJEWSA9IHBJRFMtPklBUkRZOw0KLSAgICAgICAgSUFJRCA9IHBJRFMtPklBSUQ7DQotICAgICAgICBiUmV0YWluZWQgPSBUUlVFOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgSkJJRzJfQUxMT0MoSUFEVCwgQ0pCaWcyX0FyaXRoSW50RGVjb2RlcigpKTsNCi0gICAgICAgIEpCSUcyX0FMTE9DKElBRlMsIENKQmlnMl9Bcml0aEludERlY29kZXIoKSk7DQotICAgICAgICBKQklHMl9BTExPQyhJQURTLCBDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCkpOw0KLSAgICAgICAgSkJJRzJfQUxMT0MoSUFJVCwgQ0pCaWcyX0FyaXRoSW50RGVjb2RlcigpKTsNCi0gICAgICAgIEpCSUcyX0FMTE9DKElBUkksIENKQmlnMl9Bcml0aEludERlY29kZXIoKSk7DQotICAgICAgICBKQklHMl9BTExPQyhJQVJEVywgQ0pCaWcyX0FyaXRoSW50RGVjb2RlcigpKTsNCi0gICAgICAgIEpCSUcyX0FMTE9DKElBUkRILCBDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCkpOw0KLSAgICAgICAgSkJJRzJfQUxMT0MoSUFSRFgsIENKQmlnMl9Bcml0aEludERlY29kZXIoKSk7DQotICAgICAgICBKQklHMl9BTExPQyhJQVJEWSwgQ0pCaWcyX0FyaXRoSW50RGVjb2RlcigpKTsNCi0gICAgICAgIEpCSUcyX0FMTE9DKElBSUQgLCBDSkJpZzJfQXJpdGhJYWlkRGVjb2RlcihTQlNZTUNPREVMRU4pKTsNCi0gICAgICAgIGJSZXRhaW5lZCA9IEZBTFNFOw0KLSAgICB9DQotICAgIEpCSUcyX0FMTE9DKFNCUkVHLCBDSkJpZzJfSW1hZ2UoU0JXLCBTQkgpKTsNCi0gICAgU0JSRUctPmZpbGwoU0JERUZQSVhFTCk7DQotICAgIGlmKElBRFQtPmRlY29kZShwQXJpdGhEZWNvZGVyLCAmU1RSSVBUKSA9PSAtMSkgew0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigidGV4dCByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlIChhcml0aCk6IHRvbyBzaG9ydC4iKTsNCi0gICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICB9DQotICAgIFNUUklQVCAqPSBTQlNUUklQUzsNCi0gICAgU1RSSVBUID0gLVNUUklQVDsNCi0gICAgRklSU1RTID0gMDsNCi0gICAgTklOU1RBTkNFUyA9IDA7DQotICAgIHdoaWxlKE5JTlNUQU5DRVMgPCBTQk5VTUlOU1RBTkNFUykgew0KLSAgICAgICAgaWYoSUFEVC0+ZGVjb2RlKHBBcml0aERlY29kZXIsICZEVCkgPT0gLTEpIHsNCi0gICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmUgKGFyaXRoKTogdG9vIHNob3J0LiIpOw0KLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRFQgKj0gU0JTVFJJUFM7DQotICAgICAgICBTVFJJUFQgPSBTVFJJUFQgKyBEVDsNCi0gICAgICAgIGJGaXJzdCA9IFRSVUU7DQotICAgICAgICBmb3IoOzspIHsNCi0gICAgICAgICAgICBpZihiRmlyc3QpIHsNCi0gICAgICAgICAgICAgICAgaWYoSUFGUy0+ZGVjb2RlKHBBcml0aERlY29kZXIsICZERlMpID09IC0xKSB7DQotICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmUgKGFyaXRoKTogdG9vIHNob3J0LiIpOw0KLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgRklSU1RTID0gRklSU1RTICsgREZTOw0KLSAgICAgICAgICAgICAgICBDVVJTID0gRklSU1RTOw0KLSAgICAgICAgICAgICAgICBiRmlyc3QgPSBGQUxTRTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBuUmV0ID0gSUFEUy0+ZGVjb2RlKHBBcml0aERlY29kZXIsICZJRFMpOw0KLSAgICAgICAgICAgICAgICBpZihuUmV0ID09IEpCSUcyX09PQikgew0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZihuUmV0ICE9IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZSAoYXJpdGgpOiB0b28gc2hvcnQuIik7DQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIENVUlMgPSBDVVJTICsgSURTICsgU0JEU09GRlNFVDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoTklOU1RBTkNFUyA+PSBTQk5VTUlOU1RBTkNFUykgew0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYoU0JTVFJJUFMgPT0gMSkgew0KLSAgICAgICAgICAgICAgICBDVVJUID0gMDsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBpZihJQUlULT5kZWNvZGUocEFyaXRoRGVjb2RlciwgJm5WYWwpID09IC0xKSB7DQotICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmUgKGFyaXRoKTogdG9vIHNob3J0LiIpOw0KLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgQ1VSVCA9IG5WYWw7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIFRJID0gU1RSSVBUICsgQ1VSVDsNCi0gICAgICAgICAgICBpZihJQUlELT5kZWNvZGUocEFyaXRoRGVjb2RlciwgJm5WYWwpID09IC0xKSB7DQotICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZSAoYXJpdGgpOiB0b28gc2hvcnQuIik7DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBJREkgPSBuVmFsOw0KLSAgICAgICAgICAgIGlmKElESSA+PSBTQk5VTVNZTVMpIHsNCi0gICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigidGV4dCByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlIChhcml0aCk6IHN5bWJvbCBpZCBvdXQgb2YgcmFuZ2UuKCVkLyVkKSIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURJLCBTQk5VTVNZTVMpOw0KLSAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYoU0JSRUZJTkUgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBSSSA9IDA7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgaWYoSUFSSS0+ZGVjb2RlKHBBcml0aERlY29kZXIsICZSSSkgPT0gLTEpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZSAoYXJpdGgpOiB0b28gc2hvcnQuIik7DQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoIVNCU1lNU1tJREldKSB7DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZihSSSA9PSAwKSB7DQotICAgICAgICAgICAgICAgIElCSSA9IFNCU1lNU1tJREldOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGlmKChJQVJEVy0+ZGVjb2RlKHBBcml0aERlY29kZXIsICZSRFdJKSA9PSAtMSkNCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCAoSUFSREgtPmRlY29kZShwQXJpdGhEZWNvZGVyLCAmUkRISSkgPT0gLTEpDQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgKElBUkRYLT5kZWNvZGUocEFyaXRoRGVjb2RlciwgJlJEWEkpID09IC0xKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IChJQVJEWS0+ZGVjb2RlKHBBcml0aERlY29kZXIsICZSRFlJKSA9PSAtMSkpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZSAoYXJpdGgpOiB0b28gc2hvcnQuIik7DQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBJQk9JID0gU0JTWU1TW0lESV07DQotICAgICAgICAgICAgICAgIFdPSSA9IElCT0ktPm1fbldpZHRoOw0KLSAgICAgICAgICAgICAgICBIT0kgPSBJQk9JLT5tX25IZWlnaHQ7DQotICAgICAgICAgICAgICAgIGlmICgoaW50KShXT0kgKyBSRFdJKSA8IDAgfHwgKGludCkoSE9JICsgUkRISSkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmUgKGFyaXRoKTogSW52YWxpZCBSRFdJIG9yIFJESEkgdmFsdWUuIik7DQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhwR1JSRCwgQ0pCaWcyX0dSUkRQcm9jKCkpOw0KLSAgICAgICAgICAgICAgICBwR1JSRC0+R1JXID0gV09JICsgUkRXSTsNCi0gICAgICAgICAgICAgICAgcEdSUkQtPkdSSCA9IEhPSSArIFJESEk7DQotICAgICAgICAgICAgICAgIHBHUlJELT5HUlRFTVBMQVRFID0gU0JSVEVNUExBVEU7DQotICAgICAgICAgICAgICAgIHBHUlJELT5HUlJFRkVSRU5DRSA9IElCT0k7DQotICAgICAgICAgICAgICAgIHBHUlJELT5HUlJFRkVSRU5DRURYID0gKFJEV0kgPj4gMSkgKyBSRFhJOw0KLSAgICAgICAgICAgICAgICBwR1JSRC0+R1JSRUZFUkVOQ0VEWSA9IChSREhJID4+IDEpICsgUkRZSTsNCi0gICAgICAgICAgICAgICAgcEdSUkQtPlRQR1JPTiA9IDA7DQotICAgICAgICAgICAgICAgIHBHUlJELT5HUkFUWzBdID0gU0JSQVRbMF07DQotICAgICAgICAgICAgICAgIHBHUlJELT5HUkFUWzFdID0gU0JSQVRbMV07DQotICAgICAgICAgICAgICAgIHBHUlJELT5HUkFUWzJdID0gU0JSQVRbMl07DQotICAgICAgICAgICAgICAgIHBHUlJELT5HUkFUWzNdID0gU0JSQVRbM107DQotICAgICAgICAgICAgICAgIElCSSA9IHBHUlJELT5kZWNvZGUocEFyaXRoRGVjb2RlciwgZ3JDb250ZXh0KTsNCi0gICAgICAgICAgICAgICAgaWYoSUJJID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwR1JSRDsNCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGRlbGV0ZSBwR1JSRDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgV0kgPSBJQkktPm1fbldpZHRoOw0KLSAgICAgICAgICAgIEhJID0gSUJJLT5tX25IZWlnaHQ7DQotICAgICAgICAgICAgaWYoVFJBTlNQT1NFRCA9PSAwICYmICgoUkVGQ09STkVSID09IEpCSUcyX0NPUk5FUl9UT1BSSUdIVCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChSRUZDT1JORVIgPT0gSkJJRzJfQ09STkVSX0JPVFRPTVJJR0hUKSkpIHsNCi0gICAgICAgICAgICAgICAgQ1VSUyA9IENVUlMgKyBXSSAtIDE7DQotICAgICAgICAgICAgfSBlbHNlIGlmKFRSQU5TUE9TRUQgPT0gMSAmJiAoKFJFRkNPUk5FUiA9PSBKQklHMl9DT1JORVJfQk9UVE9NTEVGVCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoUkVGQ09STkVSID09IEpCSUcyX0NPUk5FUl9CT1RUT01SSUdIVCkpKSB7DQotICAgICAgICAgICAgICAgIENVUlMgPSBDVVJTICsgSEkgLSAxOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBTSSA9IENVUlM7DQotICAgICAgICAgICAgaWYoVFJBTlNQT1NFRCA9PSAwKSB7DQotICAgICAgICAgICAgICAgIHN3aXRjaChSRUZDT1JORVIpIHsNCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09STkVSX1RPUExFRlQ6DQotICAgICAgICAgICAgICAgICAgICAgICAgU0JSRUctPmNvbXBvc2VGcm9tKFNJLCBUSSwgSUJJLCBTQkNPTUJPUCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPUk5FUl9UT1BSSUdIVDoNCi0gICAgICAgICAgICAgICAgICAgICAgICBTQlJFRy0+Y29tcG9zZUZyb20oU0kgLSBXSSArIDEsIFRJLCBJQkksIFNCQ09NQk9QKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09STkVSX0JPVFRPTUxFRlQ6DQotICAgICAgICAgICAgICAgICAgICAgICAgU0JSRUctPmNvbXBvc2VGcm9tKFNJLCBUSSAtIEhJICsgMSwgSUJJLCBTQkNPTUJPUCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPUk5FUl9CT1RUT01SSUdIVDoNCi0gICAgICAgICAgICAgICAgICAgICAgICBTQlJFRy0+Y29tcG9zZUZyb20oU0kgLSBXSSArIDEsIFRJIC0gSEkgKyAxLCBJQkksIFNCQ09NQk9QKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHN3aXRjaChSRUZDT1JORVIpIHsNCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09STkVSX1RPUExFRlQ6DQotICAgICAgICAgICAgICAgICAgICAgICAgU0JSRUctPmNvbXBvc2VGcm9tKFRJLCBTSSwgSUJJLCBTQkNPTUJPUCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPUk5FUl9UT1BSSUdIVDoNCi0gICAgICAgICAgICAgICAgICAgICAgICBTQlJFRy0+Y29tcG9zZUZyb20oVEkgLSBXSSArIDEsIFNJLCBJQkksIFNCQ09NQk9QKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09STkVSX0JPVFRPTUxFRlQ6DQotICAgICAgICAgICAgICAgICAgICAgICAgU0JSRUctPmNvbXBvc2VGcm9tKFRJLCBTSSAtIEhJICsgMSwgSUJJLCBTQkNPTUJPUCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPUk5FUl9CT1RUT01SSUdIVDoNCi0gICAgICAgICAgICAgICAgICAgICAgICBTQlJFRy0+Y29tcG9zZUZyb20oVEkgLSBXSSArIDEsIFNJIC0gSEkgKyAxLCBJQkksIFNCQ09NQk9QKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZihSSSAhPSAwKSB7DQotICAgICAgICAgICAgICAgIGRlbGV0ZSBJQkk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmKFRSQU5TUE9TRUQgPT0gMCAmJiAoKFJFRkNPUk5FUiA9PSBKQklHMl9DT1JORVJfVE9QTEVGVCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChSRUZDT1JORVIgPT0gSkJJRzJfQ09STkVSX0JPVFRPTUxFRlQpKSkgew0KLSAgICAgICAgICAgICAgICBDVVJTID0gQ1VSUyArIFdJIC0gMTsNCi0gICAgICAgICAgICB9IGVsc2UgaWYoVFJBTlNQT1NFRCA9PSAxICYmICgoUkVGQ09STkVSID09IEpCSUcyX0NPUk5FUl9UT1BMRUZUKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChSRUZDT1JORVIgPT0gSkJJRzJfQ09STkVSX1RPUFJJR0hUKSkpIHsNCi0gICAgICAgICAgICAgICAgQ1VSUyA9IENVUlMgKyBISSAtIDE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIE5JTlNUQU5DRVMgPSBOSU5TVEFOQ0VTICsgMTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZihiUmV0YWluZWQgPT0gRkFMU0UpIHsNCi0gICAgICAgIGRlbGV0ZSBJQURUOw0KLSAgICAgICAgZGVsZXRlIElBRlM7DQotICAgICAgICBkZWxldGUgSUFEUzsNCi0gICAgICAgIGRlbGV0ZSBJQUlUOw0KLSAgICAgICAgZGVsZXRlIElBUkk7DQotICAgICAgICBkZWxldGUgSUFSRFc7DQotICAgICAgICBkZWxldGUgSUFSREg7DQotICAgICAgICBkZWxldGUgSUFSRFg7DQotICAgICAgICBkZWxldGUgSUFSRFk7DQotICAgICAgICBkZWxldGUgSUFJRDsNCi0gICAgfQ0KLSAgICByZXR1cm4gU0JSRUc7DQotZmFpbGVkOg0KLSAgICBpZihiUmV0YWluZWQgPT0gRkFMU0UpIHsNCi0gICAgICAgIGRlbGV0ZSBJQURUOw0KLSAgICAgICAgZGVsZXRlIElBRlM7DQotICAgICAgICBkZWxldGUgSUFEUzsNCi0gICAgICAgIGRlbGV0ZSBJQUlUOw0KLSAgICAgICAgZGVsZXRlIElBUkk7DQotICAgICAgICBkZWxldGUgSUFSRFc7DQotICAgICAgICBkZWxldGUgSUFSREg7DQotICAgICAgICBkZWxldGUgSUFSRFg7DQotICAgICAgICBkZWxldGUgSUFSRFk7DQotICAgICAgICBkZWxldGUgSUFJRDsNCi0gICAgfQ0KLSAgICBkZWxldGUgU0JSRUc7DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1DSkJpZzJfU3ltYm9sRGljdCAqQ0pCaWcyX1NERFByb2M6OmRlY29kZV9Bcml0aChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLA0KLSAgICAgICAgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0LCBKQmlnMkFyaXRoQ3R4ICpnckNvbnRleHQpDQotew0KLSAgICBDSkJpZzJfSW1hZ2UgKipTRE5FV1NZTVM7DQotICAgIEZYX0RXT1JEIEhDSEVJR0hULCBOU1lNU0RFQ09ERUQ7DQotICAgIEZYX0lOVDMyIEhDREg7DQotICAgIEZYX0RXT1JEIFNZTVdJRFRILCBUT1RXSURUSCwgSENGSVJTVFNZTTsNCi0gICAgRlhfSU5UMzIgRFc7DQotICAgIENKQmlnMl9JbWFnZSAqQlM7DQotICAgIEZYX0RXT1JEIEksIEosIFJFRkFHR05JTlNUOw0KLSAgICBGWF9CT09MICpFWEZMQUdTOw0KLSAgICBGWF9EV09SRCBFWElOREVYOw0KLSAgICBGWF9CT09MIENVUkVYRkxBRzsNCi0gICAgRlhfRFdPUkQgRVhSVU5MRU5HVEg7DQotICAgIEZYX0lOVDMyIG5WYWw7DQotICAgIEZYX0RXT1JEIG5UbXA7DQotICAgIEZYX0JPT0wgU0JIVUZGOw0KLSAgICBGWF9EV09SRCBTQk5VTVNZTVM7DQotICAgIEZYX0JZVEUgU0JTWU1DT0RFTEVOOw0KLSAgICBGWF9EV09SRCBJREk7DQotICAgIEZYX0lOVDMyIFJEWEksIFJEWUk7DQotICAgIENKQmlnMl9JbWFnZSAqKlNCU1lNUzsNCi0gICAgQ0pCaWcyX0h1ZmZtYW5UYWJsZSAqU0JIVUZGRlMsICpTQkhVRkZEUywgKlNCSFVGRkRULCAqU0JIVUZGUkRXLCAqU0JIVUZGUkRILCAqU0JIVUZGUkRYLCAqU0JIVUZGUkRZLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICpTQkhVRkZSU0laRTsNCi0gICAgQ0pCaWcyX0dSUkRQcm9jICpwR1JSRDsNCi0gICAgQ0pCaWcyX0dSRFByb2MgKnBHUkQ7DQotICAgIENKQmlnMl9Bcml0aEludERlY29kZXIgKklBREgsICpJQURXLCAqSUFBSSwgKklBUkRYLCAqSUFSRFksICpJQUVYLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICpJQURULCAqSUFGUywgKklBRFMsICpJQUlULCAqSUFSSSwgKklBUkRXLCAqSUFSREg7DQotICAgIENKQmlnMl9Bcml0aElhaWREZWNvZGVyICpJQUlEOw0KLSAgICBDSkJpZzJfU3ltYm9sRGljdCAqcERpY3Q7DQotICAgIEpCSUcyX0FMTE9DKElBREgsIENKQmlnMl9Bcml0aEludERlY29kZXIoKSk7DQotICAgIEpCSUcyX0FMTE9DKElBRFcsIENKQmlnMl9Bcml0aEludERlY29kZXIoKSk7DQotICAgIEpCSUcyX0FMTE9DKElBQUksIENKQmlnMl9Bcml0aEludERlY29kZXIoKSk7DQotICAgIEpCSUcyX0FMTE9DKElBUkRYLCBDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCkpOw0KLSAgICBKQklHMl9BTExPQyhJQVJEWSwgQ0pCaWcyX0FyaXRoSW50RGVjb2RlcigpKTsNCi0gICAgSkJJRzJfQUxMT0MoSUFFWCwgQ0pCaWcyX0FyaXRoSW50RGVjb2RlcigpKTsNCi0gICAgSkJJRzJfQUxMT0MoSUFEVCwgQ0pCaWcyX0FyaXRoSW50RGVjb2RlcigpKTsNCi0gICAgSkJJRzJfQUxMT0MoSUFGUywgQ0pCaWcyX0FyaXRoSW50RGVjb2RlcigpKTsNCi0gICAgSkJJRzJfQUxMT0MoSUFEUywgQ0pCaWcyX0FyaXRoSW50RGVjb2RlcigpKTsNCi0gICAgSkJJRzJfQUxMT0MoSUFJVCwgQ0pCaWcyX0FyaXRoSW50RGVjb2RlcigpKTsNCi0gICAgSkJJRzJfQUxMT0MoSUFSSSwgQ0pCaWcyX0FyaXRoSW50RGVjb2RlcigpKTsNCi0gICAgSkJJRzJfQUxMT0MoSUFSRFcsIENKQmlnMl9Bcml0aEludERlY29kZXIoKSk7DQotICAgIEpCSUcyX0FMTE9DKElBUkRILCBDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCkpOw0KLSAgICBuVG1wID0gMDsNCi0gICAgd2hpbGUoKEZYX0RXT1JEKSgxIDw8IG5UbXApIDwgKFNETlVNSU5TWU1TICsgU0ROVU1ORVdTWU1TKSkgew0KLSAgICAgICAgblRtcCArKzsNCi0gICAgfQ0KLSAgICBKQklHMl9BTExPQyhJQUlELCBDSkJpZzJfQXJpdGhJYWlkRGVjb2RlcigoRlhfQllURSluVG1wKSk7DQotICAgIFNETkVXU1lNUyA9IChDSkJpZzJfSW1hZ2UqKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoU0ROVU1ORVdTWU1TLCBzaXplb2YoQ0pCaWcyX0ltYWdlKikpOw0KLSAgICBGWFNZU19tZW1zZXQzMihTRE5FV1NZTVMsIDAgLCBTRE5VTU5FV1NZTVMgKiBzaXplb2YoQ0pCaWcyX0ltYWdlKikpOw0KLSAgICBIQ0hFSUdIVCA9IDA7DQotICAgIE5TWU1TREVDT0RFRCA9IDA7DQotICAgIHdoaWxlKE5TWU1TREVDT0RFRCA8IFNETlVNTkVXU1lNUykgew0KLSAgICAgICAgQlMgPSBOVUxMOw0KLSAgICAgICAgaWYoSUFESC0+ZGVjb2RlKHBBcml0aERlY29kZXIsICZIQ0RIKSA9PSAtMSkgew0KLSAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInN5bWJvbCBkaWN0aW9uYXJ5IGRlY29kaW5nIHByb2NlZHVyZSAoYXJpdGgpOiB0b28gc2hvcnQuIik7DQotICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICB9DQotICAgICAgICBIQ0hFSUdIVCA9IEhDSEVJR0hUICsgSENESDsNCi0gICAgICAgIGlmICgoaW50KUhDSEVJR0hUIDwgMCB8fCAoaW50KUhDSEVJR0hUID4gSkJJRzJfTUFYX0lNQUdFX1NJWkUpIHsNCi0gICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBkZWNvZGluZyBwcm9jZWR1cmUgKGFyaXRoKTogaW52YWxpZCBIQ0hFSUdIVCB2YWx1ZS4iKTsNCi0gICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgIH0NCi0gICAgICAgIFNZTVdJRFRIID0gMDsNCi0gICAgICAgIFRPVFdJRFRIID0gMDsNCi0gICAgICAgIEhDRklSU1RTWU0gPSBOU1lNU0RFQ09ERUQ7DQotICAgICAgICBmb3IoOzspIHsNCi0gICAgICAgICAgICBuVmFsID0gSUFEVy0+ZGVjb2RlKHBBcml0aERlY29kZXIsICZEVyk7DQotICAgICAgICAgICAgaWYoblZhbCA9PSBKQklHMl9PT0IpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfSBlbHNlIGlmKG5WYWwgIT0gMCkgew0KLSAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBkZWNvZGluZyBwcm9jZWR1cmUgKGFyaXRoKTogdG9vIHNob3J0LiIpOw0KLSAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBpZiAoTlNZTVNERUNPREVEID49IFNETlVNTkVXU1lNUykgew0KLSAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgZGVjb2RpbmcgcHJvY2VkdXJlIChhcml0aCk6IE5TWU1TREVDT0RFRCA+PSBTRE5VTU5FV1NZTVMuIik7DQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBTWU1XSURUSCA9IFNZTVdJRFRIICsgRFc7DQotICAgICAgICAgICAgICAgIGlmICgoaW50KVNZTVdJRFRIIDwgMCB8fCAoaW50KVNZTVdJRFRIID4gSkJJRzJfTUFYX0lNQUdFX1NJWkUpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInN5bWJvbCBkaWN0aW9uYXJ5IGRlY29kaW5nIHByb2NlZHVyZSAoYXJpdGgpOiBpbnZhbGlkIFNZTVdJRFRIIHZhbHVlLiIpOw0KLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoSENIRUlHSFQgPT0gMCB8fCBTWU1XSURUSCA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICBUT1RXSURUSCA9IFRPVFdJRFRIICsgU1lNV0lEVEg7DQotICAgICAgICAgICAgICAgICAgICBTRE5FV1NZTVNbTlNZTVNERUNPREVEXSA9IE5VTEw7DQotICAgICAgICAgICAgICAgICAgICBOU1lNU0RFQ09ERUQgPSBOU1lNU0RFQ09ERUQgKyAxOw0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgVE9UV0lEVEggPSBUT1RXSURUSCArIFNZTVdJRFRIOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZihTRFJFRkFHRyA9PSAwKSB7DQotICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKHBHUkQsIENKQmlnMl9HUkRQcm9jKCkpOw0KLSAgICAgICAgICAgICAgICBwR1JELT5NTVIgPSAwOw0KLSAgICAgICAgICAgICAgICBwR1JELT5HQlcgPSBTWU1XSURUSDsNCi0gICAgICAgICAgICAgICAgcEdSRC0+R0JIID0gSENIRUlHSFQ7DQotICAgICAgICAgICAgICAgIHBHUkQtPkdCVEVNUExBVEUgPSBTRFRFTVBMQVRFOw0KLSAgICAgICAgICAgICAgICBwR1JELT5UUEdET04gPSAwOw0KLSAgICAgICAgICAgICAgICBwR1JELT5VU0VTS0lQID0gMDsNCi0gICAgICAgICAgICAgICAgcEdSRC0+R0JBVFswXSA9IFNEQVRbMF07DQotICAgICAgICAgICAgICAgIHBHUkQtPkdCQVRbMV0gPSBTREFUWzFdOw0KLSAgICAgICAgICAgICAgICBwR1JELT5HQkFUWzJdID0gU0RBVFsyXTsNCi0gICAgICAgICAgICAgICAgcEdSRC0+R0JBVFszXSA9IFNEQVRbM107DQotICAgICAgICAgICAgICAgIHBHUkQtPkdCQVRbNF0gPSBTREFUWzRdOw0KLSAgICAgICAgICAgICAgICBwR1JELT5HQkFUWzVdID0gU0RBVFs1XTsNCi0gICAgICAgICAgICAgICAgcEdSRC0+R0JBVFs2XSA9IFNEQVRbNl07DQotICAgICAgICAgICAgICAgIHBHUkQtPkdCQVRbN10gPSBTREFUWzddOw0KLSAgICAgICAgICAgICAgICBCUyA9IHBHUkQtPmRlY29kZV9Bcml0aChwQXJpdGhEZWNvZGVyLCBnYkNvbnRleHQpOw0KLSAgICAgICAgICAgICAgICBpZihCUyA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgcEdSRDsNCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGRlbGV0ZSBwR1JEOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGlmKElBQUktPmRlY29kZShwQXJpdGhEZWNvZGVyLCAoaW50KikmUkVGQUdHTklOU1QpID09IC0xKSB7DQotICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBkZWNvZGluZyBwcm9jZWR1cmUgKGFyaXRoKTogdG9vIHNob3J0LiIpOw0KLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYoUkVGQUdHTklOU1QgPiAxKSB7DQotICAgICAgICAgICAgICAgICAgICBDSkJpZzJfVFJEUHJvYyAqcERlY29kZXI7DQotICAgICAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhwRGVjb2RlciwgQ0pCaWcyX1RSRFByb2MoKSk7DQotICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JIVUZGID0gU0RIVUZGOw0KLSAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCUkVGSU5FID0gMTsNCi0gICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQlcgPSBTWU1XSURUSDsNCi0gICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkggPSBIQ0hFSUdIVDsNCi0gICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQk5VTUlOU1RBTkNFUyA9IFJFRkFHR05JTlNUOw0KLSAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCU1RSSVBTID0gMTsNCi0gICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQk5VTVNZTVMgPSBTRE5VTUlOU1lNUyArIE5TWU1TREVDT0RFRDsNCi0gICAgICAgICAgICAgICAgICAgIFNCTlVNU1lNUyA9IHBEZWNvZGVyLT5TQk5VTVNZTVM7DQotICAgICAgICAgICAgICAgICAgICBuVG1wID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIHdoaWxlKChGWF9EV09SRCkoMSA8PCBuVG1wKSA8IFNCTlVNU1lNUykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5UbXAgKys7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBTQlNZTUNPREVMRU4gPSAoRlhfQllURSluVG1wOw0KLSAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCU1lNQ09ERUxFTiA9IFNCU1lNQ09ERUxFTjsNCi0gICAgICAgICAgICAgICAgICAgIFNCU1lNUyA9IChDSkJpZzJfSW1hZ2UqKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoU0JOVU1TWU1TLCBzaXplb2YoQ0pCaWcyX0ltYWdlKikpOw0KLSAgICAgICAgICAgICAgICAgICAgSkJJRzJfbWVtY3B5KFNCU1lNUywgU0RJTlNZTVMsIFNETlVNSU5TWU1TICogc2l6ZW9mKENKQmlnMl9JbWFnZSopKTsNCi0gICAgICAgICAgICAgICAgICAgIEpCSUcyX21lbWNweShTQlNZTVMgKyBTRE5VTUlOU1lNUywgU0RORVdTWU1TLCBOU1lNU0RFQ09ERUQgKiBzaXplb2YoQ0pCaWcyX0ltYWdlKikpOw0KLSAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCU1lNUyA9IFNCU1lNUzsNCi0gICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkRFRlBJWEVMID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkNPTUJPUCA9IEpCSUcyX0NPTVBPU0VfT1I7DQotICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+VFJBTlNQT1NFRCA9IDA7DQotICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+UkVGQ09STkVSID0gSkJJRzJfQ09STkVSX1RPUExFRlQ7DQotICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JEU09GRlNFVCA9IDA7DQotICAgICAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhTQkhVRkZGUywgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjYsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0I2KSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CNikpOw0KLSAgICAgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MoU0JIVUZGRFMsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0I4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9COCkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjgpKTsNCi0gICAgICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKFNCSFVGRkRULCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMTEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IxMSkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjExKSk7DQotICAgICAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhTQkhVRkZSRFcsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxNSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjE1KSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMTUpKTsNCi0gICAgICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKFNCSFVGRlJESCwgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjE1LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMTUpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0IxNSkpOw0KLSAgICAgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MoU0JIVUZGUkRYLCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMTUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IxNSkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjE1KSk7DQotICAgICAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhTQkhVRkZSRFksIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxNSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjE1KSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMTUpKTsNCi0gICAgICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKFNCSFVGRlJTSVpFLCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjEpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0IxKSk7DQotICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JIVUZGRlMgPSBTQkhVRkZGUzsNCi0gICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkhVRkZEUyA9IFNCSFVGRkRTOw0KLSAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCSFVGRkRUID0gU0JIVUZGRFQ7DQotICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JIVUZGUkRXID0gU0JIVUZGUkRXOw0KLSAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCSFVGRlJESCA9IFNCSFVGRlJESDsNCi0gICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkhVRkZSRFggPSBTQkhVRkZSRFg7DQotICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JIVUZGUkRZID0gU0JIVUZGUkRZOw0KLSAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCSFVGRlJTSVpFID0gU0JIVUZGUlNJWkU7DQotICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JSVEVNUExBVEUgPSBTRFJURU1QTEFURTsNCi0gICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQlJBVFswXSA9IFNEUkFUWzBdOw0KLSAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCUkFUWzFdID0gU0RSQVRbMV07DQotICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JSQVRbMl0gPSBTRFJBVFsyXTsNCi0gICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQlJBVFszXSA9IFNEUkFUWzNdOw0KLSAgICAgICAgICAgICAgICAgICAgSkJpZzJJbnREZWNvZGVyU3RhdGUgaWRzOw0KLSAgICAgICAgICAgICAgICAgICAgaWRzLklBRFQgPSBJQURUOw0KLSAgICAgICAgICAgICAgICAgICAgaWRzLklBRlMgPSBJQUZTOw0KLSAgICAgICAgICAgICAgICAgICAgaWRzLklBRFMgPSBJQURTOw0KLSAgICAgICAgICAgICAgICAgICAgaWRzLklBSVQgPSBJQUlUOw0KLSAgICAgICAgICAgICAgICAgICAgaWRzLklBUkkgPSBJQVJJOw0KLSAgICAgICAgICAgICAgICAgICAgaWRzLklBUkRXID0gSUFSRFc7DQotICAgICAgICAgICAgICAgICAgICBpZHMuSUFSREggPSBJQVJESDsNCi0gICAgICAgICAgICAgICAgICAgIGlkcy5JQVJEWCA9IElBUkRYOw0KLSAgICAgICAgICAgICAgICAgICAgaWRzLklBUkRZID0gSUFSRFk7DQotICAgICAgICAgICAgICAgICAgICBpZHMuSUFJRCA9IElBSUQ7DQotICAgICAgICAgICAgICAgICAgICBCUyA9IHBEZWNvZGVyLT5kZWNvZGVfQXJpdGgocEFyaXRoRGVjb2RlciwgZ3JDb250ZXh0LCAmaWRzKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmKEJTID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0JTWU1TKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGRlM7DQotICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFNCSFVGRkRTOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZEVDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGUkRXOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSREg7DQotICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFNCSFVGRlJEWDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGUkRZOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSU0laRTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcERlY29kZXI7DQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0JTWU1TKTsNCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZGUzsNCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZEUzsNCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZEVDsNCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSRFc7DQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGUkRIOw0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFNCSFVGRlJEWDsNCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSRFk7DQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGUlNJWkU7DQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgcERlY29kZXI7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZihSRUZBR0dOSU5TVCA9PSAxKSB7DQotICAgICAgICAgICAgICAgICAgICBTQkhVRkYgPSBTREhVRkY7DQotICAgICAgICAgICAgICAgICAgICBTQk5VTVNZTVMgPSBTRE5VTUlOU1lNUyArIE5TWU1TREVDT0RFRDsNCi0gICAgICAgICAgICAgICAgICAgIGlmKElBSUQtPmRlY29kZShwQXJpdGhEZWNvZGVyLCAoaW50KikmSURJKSA9PSAtMSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInN5bWJvbCBkaWN0aW9uYXJ5IGRlY29kaW5nIHByb2NlZHVyZSAoYXJpdGgpOiB0b28gc2hvcnQuIik7DQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBpZigoSUFSRFgtPmRlY29kZShwQXJpdGhEZWNvZGVyLCAmUkRYSSkgPT0gLTEpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChJQVJEWS0+ZGVjb2RlKHBBcml0aERlY29kZXIsICZSRFlJKSA9PSAtMSkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBkZWNvZGluZyBwcm9jZWR1cmUgKGFyaXRoKTogdG9vIHNob3J0LiIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaWYgKElESSA+PSBTQk5VTVNZTVMpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBkZWNvZGluZyBwcm9jZWR1cmUgKGFyaXRoKToiDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHJlZmluZW1lbnQgcmVmZXJlbmNlcyB1bmtub3duIHN5bWJvbCAlZCIsIElESSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBTQlNZTVMgPSAoQ0pCaWcyX0ltYWdlKiopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKFNCTlVNU1lNUywgc2l6ZW9mKENKQmlnMl9JbWFnZSopKTsNCi0gICAgICAgICAgICAgICAgICAgIEpCSUcyX21lbWNweShTQlNZTVMsIFNESU5TWU1TLCBTRE5VTUlOU1lNUyAqIHNpemVvZihDSkJpZzJfSW1hZ2UqKSk7DQotICAgICAgICAgICAgICAgICAgICBKQklHMl9tZW1jcHkoU0JTWU1TICsgU0ROVU1JTlNZTVMsIFNETkVXU1lNUywgTlNZTVNERUNPREVEICogc2l6ZW9mKENKQmlnMl9JbWFnZSopKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmICghU0JTWU1TW0lESV0pIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0JTWU1TKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKHBHUlJELCBDSkJpZzJfR1JSRFByb2MoKSk7DQotICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JXID0gU1lNV0lEVEg7DQotICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JIID0gSENIRUlHSFQ7DQotICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JURU1QTEFURSA9IFNEUlRFTVBMQVRFOw0KLSAgICAgICAgICAgICAgICAgICAgcEdSUkQtPkdSUkVGRVJFTkNFID0gU0JTWU1TW0lESV07DQotICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JSRUZFUkVOQ0VEWCA9IFJEWEk7DQotICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JSRUZFUkVOQ0VEWSA9IFJEWUk7DQotICAgICAgICAgICAgICAgICAgICBwR1JSRC0+VFBHUk9OID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIHBHUlJELT5HUkFUWzBdID0gU0RSQVRbMF07DQotICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JBVFsxXSA9IFNEUkFUWzFdOw0KLSAgICAgICAgICAgICAgICAgICAgcEdSUkQtPkdSQVRbMl0gPSBTRFJBVFsyXTsNCi0gICAgICAgICAgICAgICAgICAgIHBHUlJELT5HUkFUWzNdID0gU0RSQVRbM107DQotICAgICAgICAgICAgICAgICAgICBCUyA9IHBHUlJELT5kZWNvZGUocEFyaXRoRGVjb2RlciwgZ3JDb250ZXh0KTsNCi0gICAgICAgICAgICAgICAgICAgIGlmKEJTID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0JTWU1TKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcEdSUkQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0JTWU1TKTsNCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwR1JSRDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBTRE5FV1NZTVNbTlNZTVNERUNPREVEXSA9IEJTOw0KLSAgICAgICAgICAgIEJTID0gTlVMTDsNCi0gICAgICAgICAgICBOU1lNU0RFQ09ERUQgPSBOU1lNU0RFQ09ERUQgKyAxOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIEVYSU5ERVggPSAwOw0KLSAgICBDVVJFWEZMQUcgPSAwOw0KLSAgICBFWEZMQUdTID0gKEZYX0JPT0wqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihzaXplb2YoRlhfQk9PTCksIChTRE5VTUlOU1lNUyArIFNETlVNTkVXU1lNUykpOw0KLSAgICB3aGlsZShFWElOREVYIDwgU0ROVU1JTlNZTVMgKyBTRE5VTU5FV1NZTVMpIHsNCi0gICAgICAgIGlmKElBRVgtPmRlY29kZShwQXJpdGhEZWNvZGVyLCAoaW50KikmRVhSVU5MRU5HVEgpID09IC0xKSB7DQotICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKEVYRkxBR1MpOw0KLSAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInN5bWJvbCBkaWN0aW9uYXJ5IGRlY29kaW5nIHByb2NlZHVyZSAoYXJpdGgpOiB0b28gc2hvcnQuIik7DQotICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICB9DQotICAgICAgICBpZiAoRVhJTkRFWCArIEVYUlVOTEVOR1RIID4gU0ROVU1JTlNZTVMgKyBTRE5VTU5FV1NZTVMpIHsNCi0gICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoRVhGTEFHUyk7DQotICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgZGVjb2RpbmcgcHJvY2VkdXJlIChhcml0aCk6IEludmFsaWQgRVhSVU5MRU5HVEggdmFsdWUuIik7DQotICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICB9DQotICAgICAgICBpZihFWFJVTkxFTkdUSCAhPSAwKSB7DQotICAgICAgICAgICAgZm9yKEkgPSBFWElOREVYOyBJIDwgRVhJTkRFWCArIEVYUlVOTEVOR1RIOyBJKyspIHsNCi0gICAgICAgICAgICAgICAgRVhGTEFHU1tJXSA9IENVUkVYRkxBRzsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBFWElOREVYID0gRVhJTkRFWCArIEVYUlVOTEVOR1RIOw0KLSAgICAgICAgQ1VSRVhGTEFHID0gIUNVUkVYRkxBRzsNCi0gICAgfQ0KLSAgICBKQklHMl9BTExPQyhwRGljdCwgQ0pCaWcyX1N5bWJvbERpY3QoKSk7DQotICAgIHBEaWN0LT5TRE5VTUVYU1lNUyA9IFNETlVNRVhTWU1TOw0KLSAgICBwRGljdC0+U0RFWFNZTVMgPSAoQ0pCaWcyX0ltYWdlKiopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihDSkJpZzJfSW1hZ2UqKSwgU0ROVU1FWFNZTVMpOw0KLSAgICBJID0gSiA9IDA7DQotICAgIGZvcihJID0gMDsgSSA8IFNETlVNSU5TWU1TICsgU0ROVU1ORVdTWU1TOyBJKyspIHsNCi0gICAgICAgIGlmKEVYRkxBR1NbSV0gJiYgSiA8IFNETlVNRVhTWU1TKSB7DQotICAgICAgICAgICAgaWYoSSA8IFNETlVNSU5TWU1TKSB7DQotICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKHBEaWN0LT5TREVYU1lNU1tKXSwgQ0pCaWcyX0ltYWdlKCpTRElOU1lNU1tJXSkpOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHBEaWN0LT5TREVYU1lNU1tKXSA9IFNETkVXU1lNU1tJIC0gU0ROVU1JTlNZTVNdOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBKID0gSiArIDE7DQotICAgICAgICB9IGVsc2UgaWYgKCFFWEZMQUdTW0ldICYmIEkgPj0gU0ROVU1JTlNZTVMpIHsNCi0gICAgICAgICAgICBkZWxldGUgU0RORVdTWU1TW0kgLSBTRE5VTUlOU1lNU107DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKEogPCBTRE5VTUVYU1lNUykgew0KLSAgICAgICAgcERpY3QtPlNETlVNRVhTWU1TID0gSjsNCi0gICAgfQ0KLSAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoRVhGTEFHUyk7DQotICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShTRE5FV1NZTVMpOw0KLSAgICBkZWxldGUgSUFESDsNCi0gICAgZGVsZXRlIElBRFc7DQotICAgIGRlbGV0ZSBJQUFJOw0KLSAgICBkZWxldGUgSUFSRFg7DQotICAgIGRlbGV0ZSBJQVJEWTsNCi0gICAgZGVsZXRlIElBRVg7DQotICAgIGRlbGV0ZSBJQUlEOw0KLSAgICBkZWxldGUgSUFEVDsNCi0gICAgZGVsZXRlIElBRlM7DQotICAgIGRlbGV0ZSBJQURTOw0KLSAgICBkZWxldGUgSUFJVDsNCi0gICAgZGVsZXRlIElBUkk7DQotICAgIGRlbGV0ZSBJQVJEVzsNCi0gICAgZGVsZXRlIElBUkRIOw0KLSAgICByZXR1cm4gcERpY3Q7DQotZmFpbGVkOg0KLSAgICBmb3IoSSA9IDA7IEkgPCBOU1lNU0RFQ09ERUQ7IEkrKykgew0KLSAgICAgICAgaWYgKFNETkVXU1lNU1tJXSkgew0KLSAgICAgICAgICAgIGRlbGV0ZSBTRE5FV1NZTVNbSV07DQotICAgICAgICAgICAgU0RORVdTWU1TW0ldID0gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0RORVdTWU1TKTsNCi0gICAgZGVsZXRlIElBREg7DQotICAgIGRlbGV0ZSBJQURXOw0KLSAgICBkZWxldGUgSUFBSTsNCi0gICAgZGVsZXRlIElBUkRYOw0KLSAgICBkZWxldGUgSUFSRFk7DQotICAgIGRlbGV0ZSBJQUVYOw0KLSAgICBkZWxldGUgSUFJRDsNCi0gICAgZGVsZXRlIElBRFQ7DQotICAgIGRlbGV0ZSBJQUZTOw0KLSAgICBkZWxldGUgSUFEUzsNCi0gICAgZGVsZXRlIElBSVQ7DQotICAgIGRlbGV0ZSBJQVJJOw0KLSAgICBkZWxldGUgSUFSRFc7DQotICAgIGRlbGV0ZSBJQVJESDsNCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLUNKQmlnMl9TeW1ib2xEaWN0ICpDSkJpZzJfU0REUHJvYzo6ZGVjb2RlX0h1ZmZtYW4oQ0pCaWcyX0JpdFN0cmVhbSAqcFN0cmVhbSwNCi0gICAgICAgIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSkJpZzJBcml0aEN0eCAqZ3JDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIENKQmlnMl9JbWFnZSAqKlNETkVXU1lNUzsNCi0gICAgRlhfRFdPUkQgKlNETkVXU1lNV0lEVEhTOw0KLSAgICBGWF9EV09SRCBIQ0hFSUdIVCwgTlNZTVNERUNPREVEOw0KLSAgICBGWF9JTlQzMiBIQ0RIOw0KLSAgICBGWF9EV09SRCBTWU1XSURUSCwgVE9UV0lEVEgsIEhDRklSU1RTWU07DQotICAgIEZYX0lOVDMyIERXOw0KLSAgICBDSkJpZzJfSW1hZ2UgKkJTLCAqQkhDOw0KLSAgICBGWF9EV09SRCBJLCBKLCBSRUZBR0dOSU5TVDsNCi0gICAgRlhfQk9PTCAqRVhGTEFHUzsNCi0gICAgRlhfRFdPUkQgRVhJTkRFWDsNCi0gICAgRlhfQk9PTCBDVVJFWEZMQUc7DQotICAgIEZYX0RXT1JEIEVYUlVOTEVOR1RIOw0KLSAgICBGWF9JTlQzMiBuVmFsLCBuQml0czsNCi0gICAgRlhfRFdPUkQgblRtcDsNCi0gICAgRlhfQk9PTCBTQkhVRkY7DQotICAgIEZYX0RXT1JEIFNCTlVNU1lNUzsNCi0gICAgRlhfQllURSBTQlNZTUNPREVMRU47DQotICAgIEpCaWcySHVmZm1hbkNvZGUgKlNCU1lNQ09ERVM7DQotICAgIEZYX0RXT1JEIElESTsNCi0gICAgRlhfSU5UMzIgUkRYSSwgUkRZSTsNCi0gICAgRlhfRFdPUkQgQk1TSVpFOw0KLSAgICBGWF9EV09SRCBzdHJpZGU7DQotICAgIENKQmlnMl9JbWFnZSAqKlNCU1lNUzsNCi0gICAgQ0pCaWcyX0h1ZmZtYW5UYWJsZSAqU0JIVUZGRlMsICpTQkhVRkZEUywgKlNCSFVGRkRULCAqU0JIVUZGUkRXLCAqU0JIVUZGUkRILCAqU0JIVUZGUkRYLCAqU0JIVUZGUkRZLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICpTQkhVRkZSU0laRSwgKnBUYWJsZTsNCi0gICAgQ0pCaWcyX0h1ZmZtYW5EZWNvZGVyICpwSHVmZm1hbkRlY29kZXI7DQotICAgIENKQmlnMl9HUlJEUHJvYyAqcEdSUkQ7DQotICAgIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXI7DQotICAgIENKQmlnMl9HUkRQcm9jICpwR1JEOw0KLSAgICBDSkJpZzJfU3ltYm9sRGljdCAqcERpY3Q7DQotICAgIEpCSUcyX0FMTE9DKHBIdWZmbWFuRGVjb2RlciwgQ0pCaWcyX0h1ZmZtYW5EZWNvZGVyKHBTdHJlYW0pKTsNCi0gICAgU0RORVdTWU1TID0gKENKQmlnMl9JbWFnZSoqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihTRE5VTU5FV1NZTVMsIHNpemVvZihDSkJpZzJfSW1hZ2UqKSk7DQotICAgIEZYU1lTX21lbXNldDMyKFNETkVXU1lNUywgMCAsIFNETlVNTkVXU1lNUyAqIHNpemVvZihDSkJpZzJfSW1hZ2UqKSk7DQotICAgIFNETkVXU1lNV0lEVEhTID0gTlVMTDsNCi0gICAgQkhDID0gTlVMTDsNCi0gICAgaWYoU0RSRUZBR0cgPT0gMCkgew0KLSAgICAgICAgU0RORVdTWU1XSURUSFMgPSAoRlhfRFdPUkQgKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoU0ROVU1ORVdTWU1TLCBzaXplb2YoRlhfRFdPUkQpKTsNCi0gICAgICAgIEZYU1lTX21lbXNldDMyKFNETkVXU1lNV0lEVEhTLCAwICwgU0ROVU1ORVdTWU1TICogc2l6ZW9mKEZYX0RXT1JEKSk7DQotICAgIH0NCi0gICAgSENIRUlHSFQgPSAwOw0KLSAgICBOU1lNU0RFQ09ERUQgPSAwOw0KLSAgICBCUyA9IE5VTEw7DQotICAgIHdoaWxlKE5TWU1TREVDT0RFRCA8IFNETlVNTkVXU1lNUykgew0KLSAgICAgICAgaWYocEh1ZmZtYW5EZWNvZGVyLT5kZWNvZGVBVmFsdWUoU0RIVUZGREgsICZIQ0RIKSAhPSAwKSB7DQotICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgZGVjb2RpbmcgcHJvY2VkdXJlIChodWZmbWFuKTogdG9vIHNob3J0LiIpOw0KLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgfQ0KLSAgICAgICAgSENIRUlHSFQgPSBIQ0hFSUdIVCArIEhDREg7DQotICAgICAgICBpZiAoKGludClIQ0hFSUdIVCA8IDAgfHwgKGludClIQ0hFSUdIVCA+IEpCSUcyX01BWF9JTUFHRV9TSVpFKSB7DQotICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgZGVjb2RpbmcgcHJvY2VkdXJlIChodWZmbWFuKTogaW52YWxpZCBIQ0hFSUdIVCB2YWx1ZS4iKTsNCi0gICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgIH0NCi0gICAgICAgIFNZTVdJRFRIID0gMDsNCi0gICAgICAgIFRPVFdJRFRIID0gMDsNCi0gICAgICAgIEhDRklSU1RTWU0gPSBOU1lNU0RFQ09ERUQ7DQotICAgICAgICBmb3IoOzspIHsNCi0gICAgICAgICAgICBuVmFsID0gcEh1ZmZtYW5EZWNvZGVyLT5kZWNvZGVBVmFsdWUoU0RIVUZGRFcsICZEVyk7DQotICAgICAgICAgICAgaWYoblZhbCA9PSBKQklHMl9PT0IpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfSBlbHNlIGlmKG5WYWwgIT0gMCkgew0KLSAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBkZWNvZGluZyBwcm9jZWR1cmUgKGh1ZmZtYW4pOiB0b28gc2hvcnQuIik7DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGlmIChOU1lNU0RFQ09ERUQgPj0gU0ROVU1ORVdTWU1TKSB7DQotICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBkZWNvZGluZyBwcm9jZWR1cmUgKGh1ZmZtYW4pOiBOU1lNU0RFQ09ERUQgPj0gU0ROVU1ORVdTWU1TLiIpOw0KLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgU1lNV0lEVEggPSBTWU1XSURUSCArIERXOw0KLSAgICAgICAgICAgICAgICBpZiAoKGludClTWU1XSURUSCA8IDAgfHwgKGludClTWU1XSURUSCA+IEpCSUcyX01BWF9JTUFHRV9TSVpFKSB7DQotICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBkZWNvZGluZyBwcm9jZWR1cmUgKGh1ZmZtYW4pOiBpbnZhbGlkIFNZTVdJRFRIIHZhbHVlLiIpOw0KLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoSENIRUlHSFQgPT0gMCB8fCBTWU1XSURUSCA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICBUT1RXSURUSCA9IFRPVFdJRFRIICsgU1lNV0lEVEg7DQotICAgICAgICAgICAgICAgICAgICBTRE5FV1NZTVNbTlNZTVNERUNPREVEXSA9IE5VTEw7DQotICAgICAgICAgICAgICAgICAgICBOU1lNU0RFQ09ERUQgPSBOU1lNU0RFQ09ERUQgKyAxOw0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgVE9UV0lEVEggPSBUT1RXSURUSCArIFNZTVdJRFRIOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZihTRFJFRkFHRyA9PSAxKSB7DQotICAgICAgICAgICAgICAgIGlmKHBIdWZmbWFuRGVjb2Rlci0+ZGVjb2RlQVZhbHVlKFNESFVGRkFHR0lOU1QsIChpbnQqKSZSRUZBR0dOSU5TVCkgIT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgZGVjb2RpbmcgcHJvY2VkdXJlIChodWZmbWFuKTogdG9vIHNob3J0LiIpOw0KLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgQlMgPSBOVUxMOw0KLSAgICAgICAgICAgICAgICBpZihSRUZBR0dOSU5TVCA+IDEpIHsNCi0gICAgICAgICAgICAgICAgICAgIENKQmlnMl9UUkRQcm9jICpwRGVjb2RlcjsNCi0gICAgICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKHBEZWNvZGVyLCBDSkJpZzJfVFJEUHJvYygpKTsNCi0gICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkhVRkYgPSBTREhVRkY7DQotICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JSRUZJTkUgPSAxOw0KLSAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCVyA9IFNZTVdJRFRIOw0KLSAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCSCA9IEhDSEVJR0hUOw0KLSAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCTlVNSU5TVEFOQ0VTID0gUkVGQUdHTklOU1Q7DQotICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JTVFJJUFMgPSAxOw0KLSAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCTlVNU1lNUyA9IFNETlVNSU5TWU1TICsgTlNZTVNERUNPREVEOw0KLSAgICAgICAgICAgICAgICAgICAgU0JOVU1TWU1TID0gcERlY29kZXItPlNCTlVNU1lNUzsNCi0gICAgICAgICAgICAgICAgICAgIFNCU1lNQ09ERVMgPSAoSkJpZzJIdWZmbWFuQ29kZSopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKFNCTlVNU1lNUywgc2l6ZW9mKEpCaWcySHVmZm1hbkNvZGUpKTsNCi0gICAgICAgICAgICAgICAgICAgIG5UbXAgPSAxOw0KLSAgICAgICAgICAgICAgICAgICAgd2hpbGUoKEZYX0RXT1JEKSgxIDw8IG5UbXApIDwgU0JOVU1TWU1TKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgblRtcCArKzsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGZvcihJID0gMDsgSSA8IFNCTlVNU1lNUzsgSSsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgU0JTWU1DT0RFU1tJXS5jb2RlbGVuID0gblRtcDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBTQlNZTUNPREVTW0ldLmNvZGUgPSBJOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCU1lNQ09ERVMgPSBTQlNZTUNPREVTOw0KLSAgICAgICAgICAgICAgICAgICAgU0JTWU1TID0gKENKQmlnMl9JbWFnZSoqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihTQk5VTVNZTVMsIHNpemVvZihDSkJpZzJfSW1hZ2UqKSk7DQotICAgICAgICAgICAgICAgICAgICBKQklHMl9tZW1jcHkoU0JTWU1TLCBTRElOU1lNUywgU0ROVU1JTlNZTVMgKiBzaXplb2YoQ0pCaWcyX0ltYWdlKikpOw0KLSAgICAgICAgICAgICAgICAgICAgSkJJRzJfbWVtY3B5KFNCU1lNUyArIFNETlVNSU5TWU1TLCBTRE5FV1NZTVMsIE5TWU1TREVDT0RFRCAqIHNpemVvZihDSkJpZzJfSW1hZ2UqKSk7DQotICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JTWU1TID0gU0JTWU1TOw0KLSAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCREVGUElYRUwgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCQ09NQk9QID0gSkJJRzJfQ09NUE9TRV9PUjsNCi0gICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5UUkFOU1BPU0VEID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5SRUZDT1JORVIgPSBKQklHMl9DT1JORVJfVE9QTEVGVDsNCi0gICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkRTT0ZGU0VUID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKFNCSFVGRkZTLCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CNiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjYpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0I2KSk7DQotICAgICAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhTQkhVRkZEUywgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0I4KSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9COCkpOw0KLSAgICAgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MoU0JIVUZGRFQsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxMSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjExKSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMTEpKTsNCi0gICAgICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKFNCSFVGRlJEVywgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjE1LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMTUpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0IxNSkpOw0KLSAgICAgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MoU0JIVUZGUkRILCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMTUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IxNSkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjE1KSk7DQotICAgICAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhTQkhVRkZSRFgsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxNSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjE1KSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMTUpKTsNCi0gICAgICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKFNCSFVGRlJEWSwgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjE1LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMTUpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0IxNSkpOw0KLSAgICAgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MoU0JIVUZGUlNJWkUsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMSkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjEpKTsNCi0gICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkhVRkZGUyA9IFNCSFVGRkZTOw0KLSAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCSFVGRkRTID0gU0JIVUZGRFM7DQotICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JIVUZGRFQgPSBTQkhVRkZEVDsNCi0gICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkhVRkZSRFcgPSBTQkhVRkZSRFc7DQotICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JIVUZGUkRIID0gU0JIVUZGUkRIOw0KLSAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCSFVGRlJEWCA9IFNCSFVGRlJEWDsNCi0gICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkhVRkZSRFkgPSBTQkhVRkZSRFk7DQotICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JIVUZGUlNJWkUgPSBTQkhVRkZSU0laRTsNCi0gICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQlJURU1QTEFURSA9IFNEUlRFTVBMQVRFOw0KLSAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCUkFUWzBdID0gU0RSQVRbMF07DQotICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JSQVRbMV0gPSBTRFJBVFsxXTsNCi0gICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQlJBVFsyXSA9IFNEUkFUWzJdOw0KLSAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCUkFUWzNdID0gU0RSQVRbM107DQotICAgICAgICAgICAgICAgICAgICBCUyA9IHBEZWNvZGVyLT5kZWNvZGVfSHVmZm1hbihwU3RyZWFtLCBnckNvbnRleHQpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYoQlMgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShTQlNZTUNPREVTKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0JTWU1TKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGRlM7DQotICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFNCSFVGRkRTOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZEVDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGUkRXOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSREg7DQotICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFNCSFVGRlJEWDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGUkRZOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSU0laRTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcERlY29kZXI7DQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0JTWU1DT0RFUyk7DQotICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0JTWU1TKTsNCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZGUzsNCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZEUzsNCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZEVDsNCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSRFc7DQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGUkRIOw0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFNCSFVGRlJEWDsNCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSRFk7DQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGUlNJWkU7DQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgcERlY29kZXI7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZihSRUZBR0dOSU5TVCA9PSAxKSB7DQotICAgICAgICAgICAgICAgICAgICBTQkhVRkYgPSBTREhVRkY7DQotICAgICAgICAgICAgICAgICAgICBTQk5VTVNZTVMgPSBTRE5VTUlOU1lNUyArIFNETlVNTkVXU1lNUzsNCi0gICAgICAgICAgICAgICAgICAgIG5UbXAgPSAxOw0KLSAgICAgICAgICAgICAgICAgICAgd2hpbGUoKEZYX0RXT1JEKSgxIDw8IG5UbXApIDwgU0JOVU1TWU1TKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgblRtcCArKzsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIFNCU1lNQ09ERUxFTiA9IChGWF9CWVRFKW5UbXA7DQotICAgICAgICAgICAgICAgICAgICBTQlNZTUNPREVTID0gKEpCaWcySHVmZm1hbkNvZGUqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihTQk5VTVNZTVMsIHNpemVvZihKQmlnMkh1ZmZtYW5Db2RlKSk7DQotICAgICAgICAgICAgICAgICAgICBmb3IoSSA9IDA7IEkgPCBTQk5VTVNZTVM7IEkrKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNCU1lNQ09ERVNbSV0uY29kZWxlbiA9IFNCU1lNQ09ERUxFTjsNCi0gICAgICAgICAgICAgICAgICAgICAgICBTQlNZTUNPREVTW0ldLmNvZGUgPSBJOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgblZhbCA9IDA7DQotICAgICAgICAgICAgICAgICAgICBuQml0cyA9IDA7DQotICAgICAgICAgICAgICAgICAgICBmb3IoOzspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZihwU3RyZWFtLT5yZWFkMUJpdCgmblRtcCkgIT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0JTWU1DT0RFUyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInN5bWJvbCBkaWN0aW9uYXJ5IGRlY29kaW5nIHByb2NlZHVyZSAoaHVmZm1hbik6IHRvbyBzaG9ydC4iKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5WYWwgPSAoblZhbCA8PCAxKSB8IG5UbXA7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKElESSA9IDA7IElESSA8IFNCTlVNU1lNUzsgSURJKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoKG5WYWwgPT0gU0JTWU1DT0RFU1tJREldLmNvZGUpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKG5CaXRzID09IFNCU1lNQ09ERVNbSURJXS5jb2RlbGVuKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYoSURJIDwgU0JOVU1TWU1TKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShTQlNZTUNPREVTKTsNCi0gICAgICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKFNCSFVGRlJEWCwgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjE1LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMTUpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0IxNSkpOw0KLSAgICAgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MoU0JIVUZGUlNJWkUsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMSkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjEpKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmKChwSHVmZm1hbkRlY29kZXItPmRlY29kZUFWYWx1ZShTQkhVRkZSRFgsICZSRFhJKSAhPSAwKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAocEh1ZmZtYW5EZWNvZGVyLT5kZWNvZGVBVmFsdWUoU0JIVUZGUkRYLCAmUkRZSSkgIT0gMCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHBIdWZmbWFuRGVjb2Rlci0+ZGVjb2RlQVZhbHVlKFNCSFVGRlJTSVpFLCAmblZhbCkgIT0gMCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGUkRYOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSU0laRTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBkZWNvZGluZyBwcm9jZWR1cmUgKGh1ZmZtYW4pOiB0b28gc2hvcnQuIik7DQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGUkRYOw0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFNCSFVGRlJTSVpFOw0KLSAgICAgICAgICAgICAgICAgICAgcFN0cmVhbS0+YWxpZ25CeXRlKCk7DQotICAgICAgICAgICAgICAgICAgICBuVG1wID0gcFN0cmVhbS0+Z2V0T2Zmc2V0KCk7DQotICAgICAgICAgICAgICAgICAgICBTQlNZTVMgPSAoQ0pCaWcyX0ltYWdlKiopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKFNCTlVNU1lNUywgc2l6ZW9mKENKQmlnMl9JbWFnZSopKTsNCi0gICAgICAgICAgICAgICAgICAgIEpCSUcyX21lbWNweShTQlNZTVMsIFNESU5TWU1TLCBTRE5VTUlOU1lNUyAqIHNpemVvZihDSkJpZzJfSW1hZ2UqKSk7DQotICAgICAgICAgICAgICAgICAgICBKQklHMl9tZW1jcHkoU0JTWU1TICsgU0ROVU1JTlNZTVMsIFNETkVXU1lNUywgTlNZTVNERUNPREVEICogc2l6ZW9mKENKQmlnMl9JbWFnZSopKTsNCi0gICAgICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKHBHUlJELCBDSkJpZzJfR1JSRFByb2MoKSk7DQotICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JXID0gU1lNV0lEVEg7DQotICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JIID0gSENIRUlHSFQ7DQotICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JURU1QTEFURSA9IFNEUlRFTVBMQVRFOw0KLSAgICAgICAgICAgICAgICAgICAgcEdSUkQtPkdSUkVGRVJFTkNFID0gU0JTWU1TW0lESV07DQotICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JSRUZFUkVOQ0VEWCA9IFJEWEk7DQotICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JSRUZFUkVOQ0VEWSA9IFJEWUk7DQotICAgICAgICAgICAgICAgICAgICBwR1JSRC0+VFBHUk9OID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIHBHUlJELT5HUkFUWzBdID0gU0RSQVRbMF07DQotICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JBVFsxXSA9IFNEUkFUWzFdOw0KLSAgICAgICAgICAgICAgICAgICAgcEdSUkQtPkdSQVRbMl0gPSBTRFJBVFsyXTsNCi0gICAgICAgICAgICAgICAgICAgIHBHUlJELT5HUkFUWzNdID0gU0RSQVRbM107DQotICAgICAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhwQXJpdGhEZWNvZGVyLCBDSkJpZzJfQXJpdGhEZWNvZGVyKHBTdHJlYW0pKTsNCi0gICAgICAgICAgICAgICAgICAgIEJTID0gcEdSUkQtPmRlY29kZShwQXJpdGhEZWNvZGVyLCBnckNvbnRleHQpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYoQlMgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShTQlNZTVMpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwR1JSRDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcEFyaXRoRGVjb2RlcjsNCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIHBTdHJlYW0tPmFsaWduQnl0ZSgpOw0KLSAgICAgICAgICAgICAgICAgICAgcFN0cmVhbS0+b2Zmc2V0KDIpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYoKEZYX0RXT1JEKW5WYWwgIT0gKHBTdHJlYW0tPmdldE9mZnNldCgpIC0gblRtcCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgQlM7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKFNCU1lNUyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBHUlJEOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwQXJpdGhEZWNvZGVyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInN5bWJvbCBkaWN0aW9uYXJ5IGRlY29kaW5nIHByb2NlZHVyZSAoaHVmZm1hbik6Ig0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5dGVzIHByb2Nlc3NlZCBieSBnZW5lcmljIHJlZmluZW1lbnQgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZSBkb2Vzbid0IGVxdWFsIFNCSFVGRlJTSVpFLiIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKFNCU1lNUyk7DQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgcEdSUkQ7DQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgcEFyaXRoRGVjb2RlcjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBTRE5FV1NZTVNbTlNZTVNERUNPREVEXSA9IEJTOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZihTRFJFRkFHRyA9PSAwKSB7DQotICAgICAgICAgICAgICAgIFNETkVXU1lNV0lEVEhTW05TWU1TREVDT0RFRF0gPSBTWU1XSURUSDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgTlNZTVNERUNPREVEID0gTlNZTVNERUNPREVEICsgMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKFNEUkVGQUdHID09IDApIHsNCi0gICAgICAgICAgICBpZihwSHVmZm1hbkRlY29kZXItPmRlY29kZUFWYWx1ZShTREhVRkZCTVNJWkUsIChGWF9JTlQzMiopJkJNU0laRSkgIT0gMCkgew0KLSAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBkZWNvZGluZyBwcm9jZWR1cmUgKGh1ZmZtYW4pOiB0b28gc2hvcnQuIik7DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwU3RyZWFtLT5hbGlnbkJ5dGUoKTsNCi0gICAgICAgICAgICBpZihCTVNJWkUgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBzdHJpZGUgPSAoVE9UV0lEVEggKyA3KSA+PiAzOw0KLSAgICAgICAgICAgICAgICBpZihwU3RyZWFtLT5nZXRCeXRlTGVmdCgpID49IHN0cmlkZSAqIEhDSEVJR0hUKSB7DQotICAgICAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhCSEMsIENKQmlnMl9JbWFnZShUT1RXSURUSCwgSENIRUlHSFQpKTsNCi0gICAgICAgICAgICAgICAgICAgIGZvcihJID0gMDsgSSA8IEhDSEVJR0hUOyBJICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgSkJJRzJfbWVtY3B5KEJIQy0+bV9wRGF0YSArIEkgKiBCSEMtPm1fblN0cmlkZSwgcFN0cmVhbS0+Z2V0UG9pbnRlcigpLCBzdHJpZGUpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBTdHJlYW0tPm9mZnNldChzdHJpZGUpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgZGVjb2RpbmcgcHJvY2VkdXJlIChodWZmbWFuKTogdG9vIHNob3J0LiIpOw0KLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhwR1JELCBDSkJpZzJfR1JEUHJvYygpKTsNCi0gICAgICAgICAgICAgICAgcEdSRC0+TU1SID0gMTsNCi0gICAgICAgICAgICAgICAgcEdSRC0+R0JXID0gVE9UV0lEVEg7DQotICAgICAgICAgICAgICAgIHBHUkQtPkdCSCA9IEhDSEVJR0hUOw0KLSAgICAgICAgICAgICAgICBGWENPREVDX1NUQVRVUyBzdGF0dXMgPSBwR1JELT5TdGFydF9kZWNvZGVfTU1SKCZCSEMsIHBTdHJlYW0pOw0KLSAgICAgICAgICAgICAgICB3aGlsZShzdGF0dXMgPT0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRSkgew0KLSAgICAgICAgICAgICAgICAgICAgcEdSRC0+Q29udGludWVfZGVjb2RlKHBQYXVzZSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZGVsZXRlIHBHUkQ7DQotICAgICAgICAgICAgICAgIHBTdHJlYW0tPmFsaWduQnl0ZSgpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBuVG1wID0gMDsNCi0gICAgICAgICAgICBpZiAoIUJIQykgew0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZm9yKEkgPSBIQ0ZJUlNUU1lNOyBJIDwgTlNZTVNERUNPREVEOyBJKyspIHsNCi0gICAgICAgICAgICAgICAgU0RORVdTWU1TW0ldID0gQkhDLT5zdWJJbWFnZShuVG1wLCAwLCBTRE5FV1NZTVdJRFRIU1tJXSwgSENIRUlHSFQpOw0KLSAgICAgICAgICAgICAgICBuVG1wICs9IFNETkVXU1lNV0lEVEhTW0ldOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBkZWxldGUgQkhDOw0KLSAgICAgICAgICAgIEJIQyA9IE5VTEw7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRVhJTkRFWCA9IDA7DQotICAgIENVUkVYRkxBRyA9IDA7DQotICAgIEpCSUcyX0FMTE9DKHBUYWJsZSwgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IxKSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMSkpOw0KLSAgICBFWEZMQUdTID0gKEZYX0JPT0wqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihzaXplb2YoRlhfQk9PTCksIChTRE5VTUlOU1lNUyArIFNETlVNTkVXU1lNUykpOw0KLSAgICB3aGlsZShFWElOREVYIDwgU0ROVU1JTlNZTVMgKyBTRE5VTU5FV1NZTVMpIHsNCi0gICAgICAgIGlmKHBIdWZmbWFuRGVjb2Rlci0+ZGVjb2RlQVZhbHVlKHBUYWJsZSwgKGludCopJkVYUlVOTEVOR1RIKSAhPSAwKSB7DQotICAgICAgICAgICAgZGVsZXRlIHBUYWJsZTsNCi0gICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoRVhGTEFHUyk7DQotICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgZGVjb2RpbmcgcHJvY2VkdXJlIChodWZmbWFuKTogdG9vIHNob3J0LiIpOw0KLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKEVYSU5ERVggKyBFWFJVTkxFTkdUSCA+IFNETlVNSU5TWU1TICsgU0ROVU1ORVdTWU1TKSB7DQotICAgICAgICAgICAgZGVsZXRlIHBUYWJsZTsNCi0gICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoRVhGTEFHUyk7DQotICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgZGVjb2RpbmcgcHJvY2VkdXJlIChhcml0aCk6IEludmFsaWQgRVhSVU5MRU5HVEggdmFsdWUuIik7DQotICAgICAgICAgICAgZ290byBmYWlsZWQ7DQotICAgICAgICB9DQotICAgICAgICBpZihFWFJVTkxFTkdUSCAhPSAwKSB7DQotICAgICAgICAgICAgZm9yKEkgPSBFWElOREVYOyBJIDwgRVhJTkRFWCArIEVYUlVOTEVOR1RIOyBJKyspIHsNCi0gICAgICAgICAgICAgICAgRVhGTEFHU1tJXSA9IENVUkVYRkxBRzsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBFWElOREVYID0gRVhJTkRFWCArIEVYUlVOTEVOR1RIOw0KLSAgICAgICAgQ1VSRVhGTEFHID0gIUNVUkVYRkxBRzsNCi0gICAgfQ0KLSAgICBkZWxldGUgcFRhYmxlOw0KLSAgICBKQklHMl9BTExPQyhwRGljdCwgQ0pCaWcyX1N5bWJvbERpY3QoKSk7DQotICAgIHBEaWN0LT5TRE5VTUVYU1lNUyA9IFNETlVNRVhTWU1TOw0KLSAgICBwRGljdC0+U0RFWFNZTVMgPSAoQ0pCaWcyX0ltYWdlKiopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihDSkJpZzJfSW1hZ2UqKSwgU0ROVU1FWFNZTVMpOw0KLSAgICBJID0gSiA9IDA7DQotICAgIGZvcihJID0gMDsgSSA8IFNETlVNSU5TWU1TICsgU0ROVU1ORVdTWU1TOyBJKyspIHsNCi0gICAgICAgIGlmKEVYRkxBR1NbSV0gJiYgSiA8IFNETlVNRVhTWU1TKSB7DQotICAgICAgICAgICAgaWYoSSA8IFNETlVNSU5TWU1TKSB7DQotICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKHBEaWN0LT5TREVYU1lNU1tKXSwgQ0pCaWcyX0ltYWdlKCpTRElOU1lNU1tJXSkpOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHBEaWN0LT5TREVYU1lNU1tKXSA9IFNETkVXU1lNU1tJIC0gU0ROVU1JTlNZTVNdOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBKID0gSiArIDE7DQotICAgICAgICB9IGVsc2UgaWYgKCFFWEZMQUdTW0ldICYmIEkgPj0gU0ROVU1JTlNZTVMpIHsNCi0gICAgICAgICAgICBkZWxldGUgU0RORVdTWU1TW0kgLSBTRE5VTUlOU1lNU107DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKEogPCBTRE5VTUVYU1lNUykgew0KLSAgICAgICAgcERpY3QtPlNETlVNRVhTWU1TID0gSjsNCi0gICAgfQ0KLSAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoRVhGTEFHUyk7DQotICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShTRE5FV1NZTVMpOw0KLSAgICBpZihTRFJFRkFHRyA9PSAwKSB7DQotICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0RORVdTWU1XSURUSFMpOw0KLSAgICB9DQotICAgIGRlbGV0ZSBwSHVmZm1hbkRlY29kZXI7DQotICAgIHJldHVybiBwRGljdDsNCi1mYWlsZWQ6DQotICAgIGZvcihJID0gMDsgSSA8IE5TWU1TREVDT0RFRDsgSSsrKSB7DQotICAgICAgICBpZiAoU0RORVdTWU1TW0ldKSB7DQotICAgICAgICAgICAgZGVsZXRlIFNETkVXU1lNU1tJXTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0RORVdTWU1TKTsNCi0gICAgaWYoU0RSRUZBR0cgPT0gMCkgew0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKFNETkVXU1lNV0lEVEhTKTsNCi0gICAgfQ0KLSAgICBkZWxldGUgcEh1ZmZtYW5EZWNvZGVyOw0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotQ0pCaWcyX0ltYWdlICpDSkJpZzJfSFRSRFByb2M6OmRlY29kZV9Bcml0aChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLA0KLSAgICAgICAgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIEZYX0RXT1JEIG5nLCBtZzsNCi0gICAgRlhfSU5UMzIgeCwgeTsNCi0gICAgQ0pCaWcyX0ltYWdlICpIU0tJUDsNCi0gICAgRlhfRFdPUkQgSEJQUDsNCi0gICAgRlhfRFdPUkQgKkdJOw0KLSAgICBDSkJpZzJfSW1hZ2UgKkhUUkVHOw0KLSAgICBDSkJpZzJfR1NJRFByb2MgKnBHSUQ7DQotICAgIEpCSUcyX0FMTE9DKEhUUkVHLCBDSkJpZzJfSW1hZ2UoSEJXLCBIQkgpKTsNCi0gICAgSFRSRUctPmZpbGwoSERFRlBJWEVMKTsNCi0gICAgSFNLSVAgPSBOVUxMOw0KLSAgICBpZihIRU5BQkxFU0tJUCA9PSAxKSB7DQotICAgICAgICBKQklHMl9BTExPQyhIU0tJUCwgQ0pCaWcyX0ltYWdlKEhHVywgSEdIKSk7DQotICAgICAgICBmb3IobWcgPSAwOyBtZyA8IEhHSDsgbWcrKykgew0KLSAgICAgICAgICAgIGZvcihuZyA9IDA7IG5nIDwgSEdXOyBuZysrKSB7DQotICAgICAgICAgICAgICAgIHggPSAoSEdYICsgbWcgKiBIUlkgKyBuZyAqIEhSWCkgPj4gODsNCi0gICAgICAgICAgICAgICAgeSA9IChIR1kgKyBtZyAqIEhSWCAtIG5nICogSFJZKSA+PiA4Ow0KLSAgICAgICAgICAgICAgICBpZigoeCArIEhQVyA8PSAwKSB8ICh4ID49IChGWF9JTlQzMilIQlcpDQotICAgICAgICAgICAgICAgICAgICAgICAgfCAoeSArIEhQSCA8PSAwKSB8ICh5ID49IChGWF9JTlQzMilIUEgpKSB7DQotICAgICAgICAgICAgICAgICAgICBIU0tJUC0+c2V0UGl4ZWwobmcsIG1nLCAxKTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIEhTS0lQLT5zZXRQaXhlbChuZywgbWcsIDApOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIEhCUFAgPSAxOw0KLSAgICB3aGlsZSgoRlhfRFdPUkQpKDEgPDwgSEJQUCkgPCBITlVNUEFUUykgew0KLSAgICAgICAgSEJQUCArKzsNCi0gICAgfQ0KLSAgICBKQklHMl9BTExPQyhwR0lELCBDSkJpZzJfR1NJRFByb2MoKSk7DQotICAgIHBHSUQtPkdTTU1SID0gSE1NUjsNCi0gICAgcEdJRC0+R1NXID0gSEdXOw0KLSAgICBwR0lELT5HU0ggPSBIR0g7DQotICAgIHBHSUQtPkdTQlBQID0gKEZYX0JZVEUpSEJQUDsNCi0gICAgcEdJRC0+R1NVU0VTS0lQID0gSEVOQUJMRVNLSVA7DQotICAgIHBHSUQtPkdTS0lQID0gSFNLSVA7DQotICAgIHBHSUQtPkdTVEVNUExBVEUgPSBIVEVNUExBVEU7DQotICAgIEdJID0gcEdJRC0+ZGVjb2RlX0FyaXRoKHBBcml0aERlY29kZXIsIGdiQ29udGV4dCwgcFBhdXNlKTsNCi0gICAgaWYoR0kgPT0gTlVMTCkgew0KLSAgICAgICAgZ290byBmYWlsZWQ7DQotICAgIH0NCi0gICAgZm9yKG1nID0gMDsgbWcgPCBIR0g7IG1nKyspIHsNCi0gICAgICAgIGZvcihuZyA9IDA7IG5nIDwgSEdXOyBuZysrKSB7DQotICAgICAgICAgICAgeCA9IChIR1ggKyBtZyAqIEhSWSArIG5nICogSFJYKSA+PiA4Ow0KLSAgICAgICAgICAgIHkgPSAoSEdZICsgbWcgKiBIUlggLSBuZyAqIEhSWSkgPj4gODsNCi0gICAgICAgICAgICBGWF9EV09SRCBwYXRfaW5kZXggPSBHSVttZyAqIEhHVyArIG5nXTsNCi0gICAgICAgICAgICBpZiAocGF0X2luZGV4ID49IEhOVU1QQVRTKSB7DQotICAgICAgICAgICAgICAgIHBhdF9pbmRleCA9IEhOVU1QQVRTIC0gMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgSFRSRUctPmNvbXBvc2VGcm9tKHgsIHksIEhQQVRTW3BhdF9pbmRleF0sIEhDT01CT1ApOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShHSSk7DQotICAgIGlmKEhTS0lQKSB7DQotICAgICAgICBkZWxldGUgSFNLSVA7DQotICAgIH0NCi0gICAgZGVsZXRlIHBHSUQ7DQotICAgIHJldHVybiBIVFJFRzsNCi1mYWlsZWQ6DQotICAgIGlmKEhTS0lQKSB7DQotICAgICAgICBkZWxldGUgSFNLSVA7DQotICAgIH0NCi0gICAgZGVsZXRlIHBHSUQ7DQotICAgIGRlbGV0ZSBIVFJFRzsNCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLUNKQmlnMl9JbWFnZSAqQ0pCaWcyX0hUUkRQcm9jOjpkZWNvZGVfTU1SKENKQmlnMl9CaXRTdHJlYW0gKnBTdHJlYW0sIElGWF9QYXVzZSogcFBhdXNlKQ0KLXsNCi0gICAgRlhfRFdPUkQgbmcsIG1nOw0KLSAgICBGWF9JTlQzMiB4LCB5Ow0KLSAgICBGWF9EV09SRCBIQlBQOw0KLSAgICBGWF9EV09SRCAqR0k7DQotICAgIENKQmlnMl9JbWFnZSAqSFRSRUc7DQotICAgIENKQmlnMl9HU0lEUHJvYyAqcEdJRDsNCi0gICAgSkJJRzJfQUxMT0MoSFRSRUcsIENKQmlnMl9JbWFnZShIQlcsIEhCSCkpOw0KLSAgICBIVFJFRy0+ZmlsbChIREVGUElYRUwpOw0KLSAgICBIQlBQID0gMTsNCi0gICAgd2hpbGUoKEZYX0RXT1JEKSgxIDw8IEhCUFApIDwgSE5VTVBBVFMpIHsNCi0gICAgICAgIEhCUFAgKys7DQotICAgIH0NCi0gICAgSkJJRzJfQUxMT0MocEdJRCwgQ0pCaWcyX0dTSURQcm9jKCkpOw0KLSAgICBwR0lELT5HU01NUiA9IEhNTVI7DQotICAgIHBHSUQtPkdTVyA9IEhHVzsNCi0gICAgcEdJRC0+R1NIID0gSEdIOw0KLSAgICBwR0lELT5HU0JQUCA9IChGWF9CWVRFKUhCUFA7DQotICAgIHBHSUQtPkdTVVNFU0tJUCA9IDA7DQotICAgIEdJID0gcEdJRC0+ZGVjb2RlX01NUihwU3RyZWFtLCBwUGF1c2UpOw0KLSAgICBpZihHSSA9PSBOVUxMKSB7DQotICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgfQ0KLSAgICBmb3IobWcgPSAwOyBtZyA8IEhHSDsgbWcrKykgew0KLSAgICAgICAgZm9yKG5nID0gMDsgbmcgPCBIR1c7IG5nKyspIHsNCi0gICAgICAgICAgICB4ID0gKEhHWCArIG1nICogSFJZICsgbmcgKiBIUlgpID4+IDg7DQotICAgICAgICAgICAgeSA9IChIR1kgKyBtZyAqIEhSWCAtIG5nICogSFJZKSA+PiA4Ow0KLSAgICAgICAgICAgIEZYX0RXT1JEIHBhdF9pbmRleCA9IEdJW21nICogSEdXICsgbmddOw0KLSAgICAgICAgICAgIGlmIChwYXRfaW5kZXggPj0gSE5VTVBBVFMpIHsNCi0gICAgICAgICAgICAgICAgcGF0X2luZGV4ID0gSE5VTVBBVFMgLSAxOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBIVFJFRy0+Y29tcG9zZUZyb20oeCwgeSwgSFBBVFNbcGF0X2luZGV4XSwgSENPTUJPUCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKEdJKTsNCi0gICAgZGVsZXRlIHBHSUQ7DQotICAgIHJldHVybiBIVFJFRzsNCi1mYWlsZWQ6DQotICAgIGRlbGV0ZSBwR0lEOw0KLSAgICBkZWxldGUgSFRSRUc7DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1DSkJpZzJfUGF0dGVybkRpY3QgKkNKQmlnMl9QRERQcm9jOjpkZWNvZGVfQXJpdGgoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwNCi0gICAgICAgIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBGWF9EV09SRCBHUkFZOw0KLSAgICBDSkJpZzJfSW1hZ2UgKkJIREMgPSBOVUxMOw0KLSAgICBDSkJpZzJfUGF0dGVybkRpY3QgKnBEaWN0Ow0KLSAgICBDSkJpZzJfR1JEUHJvYyAqcEdSRDsNCi0gICAgSkJJRzJfQUxMT0MocERpY3QsIENKQmlnMl9QYXR0ZXJuRGljdCgpKTsNCi0gICAgcERpY3QtPk5VTVBBVFMgPSBHUkFZTUFYICsgMTsNCi0gICAgcERpY3QtPkhEUEFUUyA9IChDSkJpZzJfSW1hZ2UqKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKENKQmlnMl9JbWFnZSopLCBwRGljdC0+TlVNUEFUUyk7DQotICAgIEpCSUcyX21lbXNldChwRGljdC0+SERQQVRTLCAwLCBzaXplb2YoQ0pCaWcyX0ltYWdlKikqcERpY3QtPk5VTVBBVFMpOw0KLSAgICBKQklHMl9BTExPQyhwR1JELCBDSkJpZzJfR1JEUHJvYygpKTsNCi0gICAgcEdSRC0+TU1SID0gSERNTVI7DQotICAgIHBHUkQtPkdCVyA9IChHUkFZTUFYICsgMSkgKiBIRFBXOw0KLSAgICBwR1JELT5HQkggPSBIRFBIOw0KLSAgICBwR1JELT5HQlRFTVBMQVRFID0gSERURU1QTEFURTsNCi0gICAgcEdSRC0+VFBHRE9OID0gMDsNCi0gICAgcEdSRC0+VVNFU0tJUCA9IDA7DQotICAgIHBHUkQtPkdCQVRbMF0gPSAtKEZYX0lOVDMyKUhEUFc7DQotICAgIHBHUkQtPkdCQVRbMV0gPSAwOw0KLSAgICBpZihwR1JELT5HQlRFTVBMQVRFID09IDApIHsNCi0gICAgICAgIHBHUkQtPkdCQVRbMl0gPSAtMzsNCi0gICAgICAgIHBHUkQtPkdCQVRbM10gPSAtMTsNCi0gICAgICAgIHBHUkQtPkdCQVRbNF0gPSAyOw0KLSAgICAgICAgcEdSRC0+R0JBVFs1XSA9IC0yOw0KLSAgICAgICAgcEdSRC0+R0JBVFs2XSA9IC0yOw0KLSAgICAgICAgcEdSRC0+R0JBVFs3XSA9IC0yOw0KLSAgICB9DQotICAgIEZYQ09ERUNfU1RBVFVTIHN0YXR1cyA9IHBHUkQtPlN0YXJ0X2RlY29kZV9Bcml0aCgmQkhEQywgcEFyaXRoRGVjb2RlciwgZ2JDb250ZXh0KTsNCi0gICAgd2hpbGUoc3RhdHVzID09IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUUpIHsNCi0gICAgICAgIHBHUkQtPkNvbnRpbnVlX2RlY29kZShwUGF1c2UpOw0KLSAgICB9DQotICAgIGlmKEJIREMgPT0gTlVMTCkgew0KLSAgICAgICAgZGVsZXRlIHBHUkQ7DQotICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgfQ0KLSAgICBkZWxldGUgcEdSRDsNCi0gICAgR1JBWSA9IDA7DQotICAgIHdoaWxlKEdSQVkgPD0gR1JBWU1BWCkgew0KLSAgICAgICAgcERpY3QtPkhEUEFUU1tHUkFZXSA9IEJIREMtPnN1YkltYWdlKEhEUFcgKiBHUkFZLCAwLCBIRFBXLCBIRFBIKTsNCi0gICAgICAgIEdSQVkgPSBHUkFZICsgMTsNCi0gICAgfQ0KLSAgICBkZWxldGUgQkhEQzsNCi0gICAgcmV0dXJuIHBEaWN0Ow0KLWZhaWxlZDoNCi0gICAgZGVsZXRlIHBEaWN0Ow0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotDQotQ0pCaWcyX1BhdHRlcm5EaWN0ICpDSkJpZzJfUEREUHJvYzo6ZGVjb2RlX01NUihDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtLCBJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIEZYX0RXT1JEIEdSQVk7DQotICAgIENKQmlnMl9JbWFnZSAqQkhEQyA9IE5VTEw7DQotICAgIENKQmlnMl9QYXR0ZXJuRGljdCAqcERpY3Q7DQotICAgIENKQmlnMl9HUkRQcm9jICpwR1JEOw0KLSAgICBKQklHMl9BTExPQyhwRGljdCwgQ0pCaWcyX1BhdHRlcm5EaWN0KCkpOw0KLSAgICBwRGljdC0+TlVNUEFUUyA9IEdSQVlNQVggKyAxOw0KLSAgICBwRGljdC0+SERQQVRTID0gKENKQmlnMl9JbWFnZSoqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihzaXplb2YoQ0pCaWcyX0ltYWdlKiksIHBEaWN0LT5OVU1QQVRTKTsNCi0gICAgSkJJRzJfbWVtc2V0KHBEaWN0LT5IRFBBVFMsIDAsIHNpemVvZihDSkJpZzJfSW1hZ2UqKSpwRGljdC0+TlVNUEFUUyk7DQotICAgIEpCSUcyX0FMTE9DKHBHUkQsIENKQmlnMl9HUkRQcm9jKCkpOw0KLSAgICBwR1JELT5NTVIgPSBIRE1NUjsNCi0gICAgcEdSRC0+R0JXID0gKEdSQVlNQVggKyAxKSAqIEhEUFc7DQotICAgIHBHUkQtPkdCSCA9IEhEUEg7DQotICAgIEZYQ09ERUNfU1RBVFVTIHN0YXR1cyA9IHBHUkQtPlN0YXJ0X2RlY29kZV9NTVIoJkJIREMsIHBTdHJlYW0pOw0KLSAgICB3aGlsZShzdGF0dXMgPT0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRSkgew0KLSAgICAgICAgcEdSRC0+Q29udGludWVfZGVjb2RlKHBQYXVzZSk7DQotICAgIH0NCi0gICAgaWYoQkhEQyA9PSBOVUxMKSB7DQotICAgICAgICBkZWxldGUgcEdSRDsNCi0gICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICB9DQotICAgIGRlbGV0ZSBwR1JEOw0KLSAgICBHUkFZID0gMDsNCi0gICAgd2hpbGUoR1JBWSA8PSBHUkFZTUFYKSB7DQotICAgICAgICBwRGljdC0+SERQQVRTW0dSQVldID0gQkhEQy0+c3ViSW1hZ2UoSERQVyAqIEdSQVksIDAsIEhEUFcsIEhEUEgpOw0KLSAgICAgICAgR1JBWSA9IEdSQVkgKyAxOw0KLSAgICB9DQotICAgIGRlbGV0ZSBCSERDOw0KLSAgICByZXR1cm4gcERpY3Q7DQotZmFpbGVkOg0KLSAgICBkZWxldGUgcERpY3Q7DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1GWF9EV09SRCAqQ0pCaWcyX0dTSURQcm9jOjpkZWNvZGVfQXJpdGgoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIENKQmlnMl9JbWFnZSAqKkdTUExBTkVTOw0KLSAgICBGWF9JTlQzMiBKLCBLOw0KLSAgICBGWF9EV09SRCB4LCB5Ow0KLSAgICBGWF9EV09SRCAqR1NWQUxTOw0KLSAgICBDSkJpZzJfR1JEUHJvYyAqcEdSRDsNCi0gICAgR1NQTEFORVMgPSAoQ0pCaWcyX0ltYWdlICoqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihzaXplb2YoQ0pCaWcyX0ltYWdlKiksIEdTQlBQKTsNCi0gICAgaWYgKCFHU1BMQU5FUykgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgR1NWQUxTID0gKEZYX0RXT1JEKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzMoc2l6ZW9mKEZYX0RXT1JEKSwgR1NXLCBHU0gpOw0KLSAgICBpZiAoIUdTVkFMUykgew0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKEdTUExBTkVTKTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIEpCSUcyX21lbXNldChHU1BMQU5FUywgMCwgc2l6ZW9mKENKQmlnMl9JbWFnZSopKkdTQlBQKTsNCi0gICAgSkJJRzJfbWVtc2V0KEdTVkFMUywgMCwgc2l6ZW9mKEZYX0RXT1JEKSpHU1cgKiBHU0gpOw0KLSAgICBKQklHMl9BTExPQyhwR1JELCBDSkJpZzJfR1JEUHJvYygpKTsNCi0gICAgcEdSRC0+TU1SID0gR1NNTVI7DQotICAgIHBHUkQtPkdCVyA9IEdTVzsNCi0gICAgcEdSRC0+R0JIID0gR1NIOw0KLSAgICBwR1JELT5HQlRFTVBMQVRFID0gR1NURU1QTEFURTsNCi0gICAgcEdSRC0+VFBHRE9OID0gMDsNCi0gICAgcEdSRC0+VVNFU0tJUCA9IEdTVVNFU0tJUDsNCi0gICAgcEdSRC0+U0tJUCA9IEdTS0lQOw0KLSAgICBpZihHU1RFTVBMQVRFIDw9IDEpIHsNCi0gICAgICAgIHBHUkQtPkdCQVRbMF0gPSAzOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcEdSRC0+R0JBVFswXSA9IDI7DQotICAgIH0NCi0gICAgcEdSRC0+R0JBVFsxXSA9IC0xOw0KLSAgICBpZihwR1JELT5HQlRFTVBMQVRFID09IDApIHsNCi0gICAgICAgIHBHUkQtPkdCQVRbMl0gPSAtMzsNCi0gICAgICAgIHBHUkQtPkdCQVRbM10gPSAtMTsNCi0gICAgICAgIHBHUkQtPkdCQVRbNF0gPSAyOw0KLSAgICAgICAgcEdSRC0+R0JBVFs1XSA9IC0yOw0KLSAgICAgICAgcEdSRC0+R0JBVFs2XSA9IC0yOw0KLSAgICAgICAgcEdSRC0+R0JBVFs3XSA9IC0yOw0KLSAgICB9DQotICAgIEZYQ09ERUNfU1RBVFVTIHN0YXR1cyA9IHBHUkQtPlN0YXJ0X2RlY29kZV9Bcml0aCgmR1NQTEFORVNbR1NCUFAgLSAxXSwgcEFyaXRoRGVjb2RlciwgZ2JDb250ZXh0KTsNCi0gICAgd2hpbGUoc3RhdHVzID09IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUUpIHsNCi0gICAgICAgIHBHUkQtPkNvbnRpbnVlX2RlY29kZShwUGF1c2UpOw0KLSAgICB9DQotICAgIGlmKEdTUExBTkVTW0dTQlBQIC0gMV0gPT0gTlVMTCkgew0KLSAgICAgICAgZ290byBmYWlsZWQ7DQotICAgIH0NCi0gICAgSiA9IEdTQlBQIC0gMjsNCi0gICAgd2hpbGUoSiA+PSAwKSB7DQotICAgICAgICBGWENPREVDX1NUQVRVUyBzdGF0dXMgPSBwR1JELT5TdGFydF9kZWNvZGVfQXJpdGgoJkdTUExBTkVTW0pdLCBwQXJpdGhEZWNvZGVyLCBnYkNvbnRleHQpOw0KLSAgICAgICAgd2hpbGUoc3RhdHVzID09IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUUpIHsNCi0gICAgICAgICAgICBwR1JELT5Db250aW51ZV9kZWNvZGUocFBhdXNlKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKEdTUExBTkVTW0pdID09IE5VTEwpIHsNCi0gICAgICAgICAgICBmb3IoSyA9IEdTQlBQIC0gMTsgSyA+IEo7IEstLSkgew0KLSAgICAgICAgICAgICAgICBkZWxldGUgR1NQTEFORVNbS107DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIEdTUExBTkVTW0pdLT5jb21wb3NlRnJvbSgwLCAwLCBHU1BMQU5FU1tKICsgMV0sIEpCSUcyX0NPTVBPU0VfWE9SKTsNCi0gICAgICAgIEogPSBKIC0gMTsNCi0gICAgfQ0KLSAgICBmb3IoeSA9IDA7IHkgPCBHU0g7IHkrKykgew0KLSAgICAgICAgZm9yKHggPSAwOyB4IDwgR1NXOyB4KyspIHsNCi0gICAgICAgICAgICBmb3IoSiA9IDA7IEogPCBHU0JQUDsgSisrKSB7DQotICAgICAgICAgICAgICAgIEdTVkFMU1t5ICogR1NXICsgeF0gfD0gR1NQTEFORVNbSl0tPmdldFBpeGVsKHgsIHkpIDw8IEo7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGZvcihKID0gMDsgSiA8IEdTQlBQOyBKKyspIHsNCi0gICAgICAgIGRlbGV0ZSBHU1BMQU5FU1tKXTsNCi0gICAgfQ0KLSAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoR1NQTEFORVMpOw0KLSAgICBkZWxldGUgcEdSRDsNCi0gICAgcmV0dXJuIEdTVkFMUzsNCi1mYWlsZWQ6DQotICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShHU1BMQU5FUyk7DQotICAgIGRlbGV0ZSBwR1JEOw0KLSAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoR1NWQUxTKTsNCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLUZYX0RXT1JEICpDSkJpZzJfR1NJRFByb2M6OmRlY29kZV9NTVIoQ0pCaWcyX0JpdFN0cmVhbSAqcFN0cmVhbSwgSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBDSkJpZzJfSW1hZ2UgKipHU1BMQU5FUzsNCi0gICAgRlhfSU5UMzIgSiwgSzsNCi0gICAgRlhfRFdPUkQgeCwgeTsNCi0gICAgRlhfRFdPUkQgKkdTVkFMUzsNCi0gICAgQ0pCaWcyX0dSRFByb2MgKnBHUkQ7DQotICAgIEdTUExBTkVTID0gKENKQmlnMl9JbWFnZSAqKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKENKQmlnMl9JbWFnZSopLCBHU0JQUCk7DQotICAgIGlmICghR1NQTEFORVMpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIEdTVkFMUyA9IChGWF9EV09SRCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MzKHNpemVvZihGWF9EV09SRCksIEdTVywgR1NIKTsNCi0gICAgaWYgKCFHU1ZBTFMpIHsNCi0gICAgICAgIGlmIChHU1BMQU5FUykgew0KLSAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShHU1BMQU5FUyk7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBKQklHMl9tZW1zZXQoR1NQTEFORVMsIDAsIHNpemVvZihDSkJpZzJfSW1hZ2UqKSpHU0JQUCk7DQotICAgIEpCSUcyX21lbXNldChHU1ZBTFMsIDAsIHNpemVvZihGWF9EV09SRCkqR1NXICogR1NIKTsNCi0gICAgSkJJRzJfQUxMT0MocEdSRCwgQ0pCaWcyX0dSRFByb2MoKSk7DQotICAgIHBHUkQtPk1NUiA9IEdTTU1SOw0KLSAgICBwR1JELT5HQlcgPSBHU1c7DQotICAgIHBHUkQtPkdCSCA9IEdTSDsNCi0gICAgRlhDT0RFQ19TVEFUVVMgc3RhdHVzID0gcEdSRC0+U3RhcnRfZGVjb2RlX01NUigmR1NQTEFORVNbR1NCUFAgLSAxXSwgcFN0cmVhbSk7DQotICAgIHdoaWxlKHN0YXR1cyA9PSBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFKSB7DQotICAgICAgICBwR1JELT5Db250aW51ZV9kZWNvZGUocFBhdXNlKTsNCi0gICAgfQ0KLSAgICBpZihHU1BMQU5FU1tHU0JQUCAtIDFdID09IE5VTEwpIHsNCi0gICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICB9DQotICAgIHBTdHJlYW0tPmFsaWduQnl0ZSgpOw0KLSAgICBwU3RyZWFtLT5vZmZzZXQoMyk7DQotICAgIEogPSBHU0JQUCAtIDI7DQotICAgIHdoaWxlKEogPj0gMCkgew0KLSAgICAgICAgRlhDT0RFQ19TVEFUVVMgc3RhdHVzID0gcEdSRC0+U3RhcnRfZGVjb2RlX01NUigmR1NQTEFORVNbSl0sIHBTdHJlYW0pOw0KLSAgICAgICAgd2hpbGUoc3RhdHVzID09IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUUpIHsNCi0gICAgICAgICAgICBwR1JELT5Db250aW51ZV9kZWNvZGUocFBhdXNlKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKEdTUExBTkVTW0pdID09IE5VTEwpIHsNCi0gICAgICAgICAgICBmb3IoSyA9IEdTQlBQIC0gMTsgSyA+IEo7IEstLSkgew0KLSAgICAgICAgICAgICAgICBkZWxldGUgR1NQTEFORVNbS107DQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHBTdHJlYW0tPmFsaWduQnl0ZSgpOw0KLSAgICAgICAgcFN0cmVhbS0+b2Zmc2V0KDMpOw0KLSAgICAgICAgR1NQTEFORVNbSl0tPmNvbXBvc2VGcm9tKDAsIDAsIEdTUExBTkVTW0ogKyAxXSwgSkJJRzJfQ09NUE9TRV9YT1IpOw0KLSAgICAgICAgSiA9IEogLSAxOw0KLSAgICB9DQotICAgIGZvcih5ID0gMDsgeSA8IEdTSDsgeSsrKSB7DQotICAgICAgICBmb3IoeCA9IDA7IHggPCBHU1c7IHgrKykgew0KLSAgICAgICAgICAgIGZvcihKID0gMDsgSiA8IEdTQlBQOyBKKyspIHsNCi0gICAgICAgICAgICAgICAgR1NWQUxTW3kgKiBHU1cgKyB4XSB8PSBHU1BMQU5FU1tKXS0+Z2V0UGl4ZWwoeCwgeSkgPDwgSjsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgZm9yKEogPSAwOyBKIDwgR1NCUFA7IEorKykgew0KLSAgICAgICAgZGVsZXRlIEdTUExBTkVTW0pdOw0KLSAgICB9DQotICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShHU1BMQU5FUyk7DQotICAgIGRlbGV0ZSBwR1JEOw0KLSAgICByZXR1cm4gR1NWQUxTOw0KLWZhaWxlZDoNCi0gICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKEdTUExBTkVTKTsNCi0gICAgZGVsZXRlIHBHUkQ7DQotICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShHU1ZBTFMpOw0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotRlhDT0RFQ19TVEFUVVMgQ0pCaWcyX0dSRFByb2M6OlN0YXJ0X2RlY29kZV9Bcml0aChDSkJpZzJfSW1hZ2UqKiBwSW1hZ2UsIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBpZiAoR0JXID09IDAgfHwgR0JIID09IDApIHsNCi0gICAgICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOw0KLSAgICAgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7DQotICAgIH0NCi0gICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9SRUFEWTsNCi0gICAgbV9wUGF1c2UgPSBwUGF1c2U7DQotICAgIGlmKCpwSW1hZ2UgPT0gTlVMTCkgew0KLSAgICAgICAgSkJJRzJfQUxMT0MoKCpwSW1hZ2UpLCBDSkJpZzJfSW1hZ2UoR0JXLCBHQkgpKTsNCi0gICAgfQ0KLSAgICBpZiAoKCpwSW1hZ2UpLT5tX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIGRlbGV0ZSAqcEltYWdlOw0KLSAgICAgICAgKnBJbWFnZSA9IE5VTEw7DQotICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJHZW5lcmljIHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmU6IENyZWF0ZSBJbWFnZSBGYWlsZWQgd2l0aCB3aWR0aCA9ICVkLCBoZWlnaHQgPSAlZFxuIiwgR0JXLCBHQkgpOw0KLSAgICAgICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0VSUk9SOw0KLSAgICAgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0VSUk9SOw0KLSAgICB9DQotICAgIG1fRGVjb2RlVHlwZSA9IDE7DQotICAgIG1fcEltYWdlID0gcEltYWdlOw0KLSAgICAoKm1fcEltYWdlKS0+ZmlsbCgwKTsNCi0gICAgbV9wQXJpdGhEZWNvZGVyID0gcEFyaXRoRGVjb2RlcjsNCi0gICAgbV9nYkNvbnRleHQgPSBnYkNvbnRleHQ7DQotICAgIExUUCA9IDA7DQotICAgIG1fcExpbmUgPSBOVUxMOw0KLSAgICBtX2xvb3BJbmRleCA9IDA7DQotICAgIHJldHVybiBkZWNvZGVfQXJpdGgocFBhdXNlKTsNCi19DQotRlhDT0RFQ19TVEFUVVMgQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aChJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIGludCBpbGluZSA9IG1fbG9vcEluZGV4Ow0KLSAgICBDSkJpZzJfSW1hZ2UqIHBJbWFnZSA9ICptX3BJbWFnZTsNCi0gICAgaWYoR0JURU1QTEFURSA9PSAwKSB7DQotICAgICAgICBpZigoR0JBVFswXSA9PSAzKSAmJiAoR0JBVFsxXSA9PSAoc2lnbmVkIGNoYXIpIC0gMSkNCi0gICAgICAgICAgICAgICAgJiYgKEdCQVRbMl0gPT0gKHNpZ25lZCBjaGFyKSAtIDMpICYmIChHQkFUWzNdID09IChzaWduZWQgY2hhcikgLSAxKQ0KLSAgICAgICAgICAgICAgICAmJiAoR0JBVFs0XSA9PSAyKSAmJiAoR0JBVFs1XSA9PSAoc2lnbmVkIGNoYXIpIC0gMikNCi0gICAgICAgICAgICAgICAgJiYgKEdCQVRbNl0gPT0gKHNpZ25lZCBjaGFyKSAtIDIpICYmIChHQkFUWzddID09IChzaWduZWQgY2hhcikgLSAyKSkgew0KLSAgICAgICAgICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBkZWNvZGVfQXJpdGhfVGVtcGxhdGUwX29wdDMocEltYWdlLCBtX3BBcml0aERlY29kZXIsIG1fZ2JDb250ZXh0LCBwUGF1c2UpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBtX1Byb3NzaXZlU3RhdHVzID0gZGVjb2RlX0FyaXRoX1RlbXBsYXRlMF91bm9wdChwSW1hZ2UsIG1fcEFyaXRoRGVjb2RlciwgbV9nYkNvbnRleHQsIHBQYXVzZSk7DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZihHQlRFTVBMQVRFID09IDEpIHsNCi0gICAgICAgIGlmKChHQkFUWzBdID09IDMpICYmIChHQkFUWzFdID09IChzaWduZWQgY2hhcikgLSAxKSkgew0KLSAgICAgICAgICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBkZWNvZGVfQXJpdGhfVGVtcGxhdGUxX29wdDMocEltYWdlLCBtX3BBcml0aERlY29kZXIsIG1fZ2JDb250ZXh0LCBwUGF1c2UpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBtX1Byb3NzaXZlU3RhdHVzID0gZGVjb2RlX0FyaXRoX1RlbXBsYXRlMV91bm9wdChwSW1hZ2UsIG1fcEFyaXRoRGVjb2RlciwgbV9nYkNvbnRleHQsIHBQYXVzZSk7DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZihHQlRFTVBMQVRFID09IDIpIHsNCi0gICAgICAgIGlmKChHQkFUWzBdID09IDIpICYmIChHQkFUWzFdID09IChzaWduZWQgY2hhcikgLSAxKSkgew0KLSAgICAgICAgICAgIG1fUHJvc3NpdmVTdGF0dXMgPSAgZGVjb2RlX0FyaXRoX1RlbXBsYXRlMl9vcHQzKHBJbWFnZSwgbV9wQXJpdGhEZWNvZGVyLCBtX2diQ29udGV4dCwgcFBhdXNlKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbV9Qcm9zc2l2ZVN0YXR1cyA9ICBkZWNvZGVfQXJpdGhfVGVtcGxhdGUyX3Vub3B0KHBJbWFnZSwgbV9wQXJpdGhEZWNvZGVyLCBtX2diQ29udGV4dCwgcFBhdXNlKTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGlmKChHQkFUWzBdID09IDIpICYmIChHQkFUWzFdID09IChzaWduZWQgY2hhcikgLSAxKSkgew0KLSAgICAgICAgICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBkZWNvZGVfQXJpdGhfVGVtcGxhdGUzX29wdDMocEltYWdlLCBtX3BBcml0aERlY29kZXIsIG1fZ2JDb250ZXh0LCBwUGF1c2UpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBtX1Byb3NzaXZlU3RhdHVzID0gZGVjb2RlX0FyaXRoX1RlbXBsYXRlM191bm9wdChwSW1hZ2UsIG1fcEFyaXRoRGVjb2RlciwgbV9nYkNvbnRleHQsIHBQYXVzZSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9SZXBsYWNlUmVjdC5sZWZ0ID0gMDsNCi0gICAgbV9SZXBsYWNlUmVjdC5yaWdodCA9IHBJbWFnZS0+bV9uV2lkdGg7DQotICAgIG1fUmVwbGFjZVJlY3QudG9wID0gaWxpbmU7DQotICAgIG1fUmVwbGFjZVJlY3QuYm90dG9tID0gbV9sb29wSW5kZXg7DQotICAgIGlmKG1fUHJvc3NpdmVTdGF0dXMgPT0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSCkgew0KLSAgICAgICAgbV9sb29wSW5kZXggPSAwOw0KLSAgICB9DQotICAgIHJldHVybiBtX1Byb3NzaXZlU3RhdHVzOw0KLX0NCi1GWENPREVDX1NUQVRVUyBDSkJpZzJfR1JEUHJvYzo6U3RhcnRfZGVjb2RlX0FyaXRoX1YyKENKQmlnMl9JbWFnZSoqIHBJbWFnZSwgQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIGlmKEdCVyA9PSAwIHx8IEdCSCA9PSAwKSB7DQotICAgICAgICAqIHBJbWFnZSA9IE5VTEw7DQotICAgICAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsNCi0gICAgICAgIHJldHVybiBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOw0KLSAgICB9DQotICAgIGlmKCpwSW1hZ2UgPT0gTlVMTCkgew0KLSAgICAgICAgSkJJRzJfQUxMT0MoKCpwSW1hZ2UpLCBDSkJpZzJfSW1hZ2UoR0JXLCBHQkgpKTsNCi0gICAgfQ0KLSAgICBpZiAoKCpwSW1hZ2UpLT5tX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIGRlbGV0ZSAqcEltYWdlOw0KLSAgICAgICAgKnBJbWFnZSA9IE5VTEw7DQotICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJHZW5lcmljIHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmU6IENyZWF0ZSBJbWFnZSBGYWlsZWQgd2l0aCB3aWR0aCA9ICVkLCBoZWlnaHQgPSAlZFxuIiwgR0JXLCBHQkgpOw0KLSAgICAgICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0VSUk9SOw0KLSAgICAgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0VSUk9SOw0KLSAgICB9DQotICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfUkVBRFk7DQotICAgIG1fRGVjb2RlVHlwZSA9IDI7DQotICAgIG1fcFBhdXNlID0gcFBhdXNlOw0KLSAgICBtX3BJbWFnZSA9IHBJbWFnZTsNCi0gICAgKCptX3BJbWFnZSktPmZpbGwoMCk7DQotICAgIExUUCA9IDA7DQotICAgIG1fbG9vcEluZGV4ID0gMDsNCi0gICAgbV9wQXJpdGhEZWNvZGVyID0gcEFyaXRoRGVjb2RlcjsNCi0gICAgbV9nYkNvbnRleHQgPSBnYkNvbnRleHQ7DQotICAgIHJldHVybiBkZWNvZGVfQXJpdGhfVjIocFBhdXNlKTsNCi19DQotRlhDT0RFQ19TVEFUVVMgQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aF9WMihJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIEZYX0JPT0wgU0xUUCwgYlZhbDsNCi0gICAgRlhfRFdPUkQgQ09OVEVYVDsNCi0gICAgQ0pCaWcyX0ltYWdlICpHQlJFRyA9ICptX3BJbWFnZTsNCi0gICAgRlhfRFdPUkQgbGluZTEsIGxpbmUyLCBsaW5lMzsNCi0gICAgTFRQID0gMDsNCi0gICAgSkJJRzJfQUxMT0MoR0JSRUcsIENKQmlnMl9JbWFnZShHQlcsIEdCSCkpOw0KLSAgICBHQlJFRy0+ZmlsbCgwKTsNCi0gICAgZm9yKDsgbV9sb29wSW5kZXggPCBHQkg7IG1fbG9vcEluZGV4KyspIHsNCi0gICAgICAgIGlmKFRQR0RPTikgew0KLSAgICAgICAgICAgIHN3aXRjaChHQlRFTVBMQVRFKSB7DQotICAgICAgICAgICAgICAgIGNhc2UgMDoNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAweDliMjU7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAxOg0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IDB4MDc5NTsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDI6DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gMHgwMGU1Ow0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMzoNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAweDAxOTU7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgU0xUUCA9IG1fcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZtX2diQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKExUUCA9PSAxKSB7DQotICAgICAgICAgICAgR0JSRUctPmNvcHlMaW5lKG1fbG9vcEluZGV4LCBtX2xvb3BJbmRleCAtIDEpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBzd2l0Y2goR0JURU1QTEFURSkgew0KLSAgICAgICAgICAgICAgICBjYXNlIDA6IHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSA9IEdCUkVHLT5nZXRQaXhlbCgxLCBtX2xvb3BJbmRleCAtIDIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBtX2xvb3BJbmRleCAtIDIpIDw8IDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPSBHQlJFRy0+Z2V0UGl4ZWwoMiwgbV9sb29wSW5kZXggLSAxKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiB8PSBHQlJFRy0+Z2V0UGl4ZWwoMSwgbV9sb29wSW5kZXggLSAxKSA8PCAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBtX2xvb3BJbmRleCAtIDEpIDw8IDI7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTMgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdysrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKFVTRVNLSVAgJiYgU0tJUC0+Z2V0UGl4ZWwodywgbV9sb29wSW5kZXgpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSBsaW5lMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzBdLCBtX2xvb3BJbmRleCArIEdCQVRbMV0pIDw8IDQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUyIDw8IDU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFsyXSwgbV9sb29wSW5kZXggKyBHQkFUWzNdKSA8PCAxMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzRdLCBtX2xvb3BJbmRleCArIEdCQVRbNV0pIDw8IDExOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMSA8PCAxMjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzZdLCBtX2xvb3BJbmRleCArIEdCQVRbN10pIDw8IDE1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IG1fcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZtX2diQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYlZhbCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0JSRUctPnNldFBpeGVsKHcsIG1fbG9vcEluZGV4LCBiVmFsKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSA9ICgobGluZTEgPDwgMSkgfCBHQlJFRy0+Z2V0UGl4ZWwodyArIDIsIG1fbG9vcEluZGV4IC0gMikpICYgMHgwNzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAoKGxpbmUyIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyAzLCBtX2xvb3BJbmRleCAtIDEpKSAmIDB4MWY7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUzID0gKChsaW5lMyA8PCAxKSB8IGJWYWwpICYgMHgwZjsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAxOiB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgPSBHQlJFRy0+Z2V0UGl4ZWwoMiwgbV9sb29wSW5kZXggLSAyKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSB8PSBHQlJFRy0+Z2V0UGl4ZWwoMSwgbV9sb29wSW5kZXggLSAyKSA8PCAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBtX2xvb3BJbmRleCAtIDIpIDw8IDI7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPSBHQlJFRy0+Z2V0UGl4ZWwoMiwgbV9sb29wSW5kZXggLSAxKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiB8PSBHQlJFRy0+Z2V0UGl4ZWwoMSwgbV9sb29wSW5kZXggLSAxKSA8PCAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBtX2xvb3BJbmRleCAtIDEpIDw8IDI7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTMgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdysrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKFVTRVNLSVAgJiYgU0tJUC0+Z2V0UGl4ZWwodywgbV9sb29wSW5kZXgpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSBsaW5lMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzBdLCBtX2xvb3BJbmRleCArIEdCQVRbMV0pIDw8IDM7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUyIDw8IDQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUxIDw8IDk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gbV9wQXJpdGhEZWNvZGVyLT5ERUNPREUoJm1fZ2JDb250ZXh0W0NPTlRFWFRdKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihiVmFsKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQlJFRy0+c2V0UGl4ZWwodywgbV9sb29wSW5kZXgsIGJWYWwpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxID0gKChsaW5lMSA8PCAxKSB8IEdCUkVHLT5nZXRQaXhlbCh3ICsgMywgbV9sb29wSW5kZXggLSAyKSkgJiAweDBmOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiA9ICgobGluZTIgPDwgMSkgfCBHQlJFRy0+Z2V0UGl4ZWwodyArIDMsIG1fbG9vcEluZGV4IC0gMSkpICYgMHgxZjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTMgPSAoKGxpbmUzIDw8IDEpIHwgYlZhbCkgJiAweDA3Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDI6IHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSA9IEdCUkVHLT5nZXRQaXhlbCgxLCBtX2xvb3BJbmRleCAtIDIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBtX2xvb3BJbmRleCAtIDIpIDw8IDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPSBHQlJFRy0+Z2V0UGl4ZWwoMSwgbV9sb29wSW5kZXggLSAxKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiB8PSBHQlJFRy0+Z2V0UGl4ZWwoMCwgbV9sb29wSW5kZXggLSAxKSA8PCAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUzID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHQlc7IHcrKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihVU0VTS0lQICYmIFNLSVAtPmdldFBpeGVsKHcsIG1fbG9vcEluZGV4KSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gbGluZTM7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFswXSwgbV9sb29wSW5kZXggKyBHQkFUWzFdKSA8PCAyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMiA8PCAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMSA8PCA3Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IG1fcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZtX2diQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYlZhbCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0JSRUctPnNldFBpeGVsKHcsIG1fbG9vcEluZGV4LCBiVmFsKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSA9ICgobGluZTEgPDwgMSkgfCBHQlJFRy0+Z2V0UGl4ZWwodyArIDIsIG1fbG9vcEluZGV4IC0gMikpICYgMHgwNzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAoKGxpbmUyIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyAyLCBtX2xvb3BJbmRleCAtIDEpKSAmIDB4MGY7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUzID0gKChsaW5lMyA8PCAxKSB8IGJWYWwpICYgMHgwMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAzOiB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgPSBHQlJFRy0+Z2V0UGl4ZWwoMSwgbV9sb29wSW5kZXggLSAxKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSB8PSBHQlJFRy0+Z2V0UGl4ZWwoMCwgbV9sb29wSW5kZXggLSAxKSA8PCAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHQlc7IHcrKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihVU0VTS0lQICYmIFNLSVAtPmdldFBpeGVsKHcsIG1fbG9vcEluZGV4KSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gbGluZTI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFswXSwgbV9sb29wSW5kZXggKyBHQkFUWzFdKSA8PCA0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMSA8PCA1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IG1fcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZtX2diQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYlZhbCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0JSRUctPnNldFBpeGVsKHcsIG1fbG9vcEluZGV4LCBiVmFsKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSA9ICgobGluZTEgPDwgMSkgfCBHQlJFRy0+Z2V0UGl4ZWwodyArIDIsIG1fbG9vcEluZGV4IC0gMSkpICYgMHgxZjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAoKGxpbmUyIDw8IDEpIHwgYlZhbCkgJiAweDBmOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmKHBQYXVzZSAmJiBwUGF1c2UtPk5lZWRUb1BhdXNlTm93KCkpIHsNCi0gICAgICAgICAgICBtX2xvb3BJbmRleCArKzsNCi0gICAgICAgICAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRTsNCi0gICAgICAgICAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsNCi0gICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7DQotfQ0KLUZYQ09ERUNfU1RBVFVTIENKQmlnMl9HUkRQcm9jOjpTdGFydF9kZWNvZGVfQXJpdGhfVjEoQ0pCaWcyX0ltYWdlKiogcEltYWdlLCBDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQsIElGWF9QYXVzZSogcFBhdXNlKQ0KLXsNCi0gICAgaWYoR0JXID09IDAgfHwgR0JIID09IDApIHsNCi0gICAgICAgICogcEltYWdlID0gTlVMTDsNCi0gICAgICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOw0KLSAgICAgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7DQotICAgIH0NCi0gICAgaWYoKnBJbWFnZSA9PSBOVUxMKSB7DQotICAgICAgICBKQklHMl9BTExPQygoKnBJbWFnZSksIENKQmlnMl9JbWFnZShHQlcsIEdCSCkpOw0KLSAgICB9DQotICAgIGlmICgoKnBJbWFnZSktPm1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgZGVsZXRlICpwSW1hZ2U7DQotICAgICAgICAqcEltYWdlID0gTlVMTDsNCi0gICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoIkdlbmVyaWMgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZTogQ3JlYXRlIEltYWdlIEZhaWxlZCB3aXRoIHdpZHRoID0gJWQsIGhlaWdodCA9ICVkXG4iLCBHQlcsIEdCSCk7DQotICAgICAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfRVJST1I7DQotICAgICAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfRVJST1I7DQotICAgIH0NCi0gICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9SRUFEWTsNCi0gICAgbV9wUGF1c2UgPSBwUGF1c2U7DQotICAgIG1fcEltYWdlID0gcEltYWdlOw0KLSAgICBtX0RlY29kZVR5cGUgPSAzOw0KLSAgICAoKm1fcEltYWdlKS0+ZmlsbCgwKTsNCi0gICAgTFRQID0gMDsNCi0gICAgbV9sb29wSW5kZXggPSAwOw0KLSAgICBtX3BBcml0aERlY29kZXIgPSBwQXJpdGhEZWNvZGVyOw0KLSAgICBtX2diQ29udGV4dCA9IGdiQ29udGV4dDsNCi0gICAgcmV0dXJuIGRlY29kZV9Bcml0aF9WMShwUGF1c2UpOw0KLX0NCi1GWENPREVDX1NUQVRVUyBDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoX1YxKElGWF9QYXVzZSogcFBhdXNlKQ0KLXsNCi0gICAgRlhfQk9PTCBTTFRQLCBiVmFsOw0KLSAgICBGWF9EV09SRCBDT05URVhUID0gMDsNCi0gICAgQ0pCaWcyX0ltYWdlICpHQlJFRyA9ICgqbV9wSW1hZ2UpOw0KLSAgICBmb3IoOyBtX2xvb3BJbmRleCA8IEdCSDsgbV9sb29wSW5kZXgrKykgew0KLSAgICAgICAgaWYoVFBHRE9OKSB7DQotICAgICAgICAgICAgc3dpdGNoKEdCVEVNUExBVEUpIHsNCi0gICAgICAgICAgICAgICAgY2FzZSAwOg0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IDB4OWIyNTsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDE6DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gMHgwNzk1Ow0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMjoNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAweDAwZTU7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAzOg0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IDB4MDE5NTsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBTTFRQID0gbV9wQXJpdGhEZWNvZGVyLT5ERUNPREUoJm1fZ2JDb250ZXh0W0NPTlRFWFRdKTsNCi0gICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoTFRQID09IDEpIHsNCi0gICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHQlc7IHcrKykgew0KLSAgICAgICAgICAgICAgICBHQlJFRy0+c2V0UGl4ZWwodywgbV9sb29wSW5kZXgsIEdCUkVHLT5nZXRQaXhlbCh3LCBtX2xvb3BJbmRleCAtIDEpKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdysrKSB7DQotICAgICAgICAgICAgICAgIGlmKFVTRVNLSVAgJiYgU0tJUC0+Z2V0UGl4ZWwodywgbV9sb29wSW5kZXgpKSB7DQotICAgICAgICAgICAgICAgICAgICBHQlJFRy0+c2V0UGl4ZWwodywgbV9sb29wSW5kZXgsIDApOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IDA7DQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goR0JURU1QTEFURSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDEsIG1fbG9vcEluZGV4KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDIsIG1fbG9vcEluZGV4KSA8PCAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMywgbV9sb29wSW5kZXgpIDw8IDI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSA0LCBtX2xvb3BJbmRleCkgPDwgMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMF0sIG1fbG9vcEluZGV4ICsgR0JBVFsxXSkgPDwgNDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIDIsIG1fbG9vcEluZGV4IC0gMSkgPDwgNTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIDEsIG1fbG9vcEluZGV4IC0gMSkgPDwgNjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodywgbV9sb29wSW5kZXggLSAxKSA8PCA3Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMSwgbV9sb29wSW5kZXggLSAxKSA8PCA4Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMiwgbV9sb29wSW5kZXggLSAxKSA8PCA5Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFsyXSwgbV9sb29wSW5kZXggKyBHQkFUWzNdKSA8PCAxMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbNF0sIG1fbG9vcEluZGV4ICsgR0JBVFs1XSkgPDwgMTE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyAxLCBtX2xvb3BJbmRleCAtIDIpIDw8IDEyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3LCBtX2xvb3BJbmRleCAtIDIpIDw8IDEzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMSwgbV9sb29wSW5kZXggLSAyKSA8PCAxNDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbNl0sIG1fbG9vcEluZGV4ICsgR0JBVFs3XSkgPDwgMTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMToNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDEsIG1fbG9vcEluZGV4KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDIsIG1fbG9vcEluZGV4KSA8PCAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMywgbV9sb29wSW5kZXgpIDw8IDI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzBdLCBtX2xvb3BJbmRleCArIEdCQVRbMV0pIDw8IDM7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyAyLCBtX2xvb3BJbmRleCAtIDEpIDw8IDQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyAxLCBtX2xvb3BJbmRleCAtIDEpIDw8IDU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcsIG1fbG9vcEluZGV4IC0gMSkgPDwgNjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDEsIG1fbG9vcEluZGV4IC0gMSkgPDwgNzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDIsIG1fbG9vcEluZGV4IC0gMSkgPDwgODsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIDIsIG1fbG9vcEluZGV4IC0gMikgPDwgOTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIDEsIG1fbG9vcEluZGV4IC0gMikgPDwgMTA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcsIG1fbG9vcEluZGV4IC0gMikgPDwgMTE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAxLCBtX2xvb3BJbmRleCAtIDIpIDw8IDEyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAxLCBtX2xvb3BJbmRleCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAyLCBtX2xvb3BJbmRleCkgPDwgMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMF0sIG1fbG9vcEluZGV4ICsgR0JBVFsxXSkgPDwgMjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIDEsIG1fbG9vcEluZGV4IC0gMSkgPDwgMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodywgbV9sb29wSW5kZXggLSAxKSA8PCA0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMSwgbV9sb29wSW5kZXggLSAxKSA8PCA1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMiwgbV9sb29wSW5kZXggLSAxKSA8PCA2Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgMSwgbV9sb29wSW5kZXggLSAyKSA8PCA3Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3LCBtX2xvb3BJbmRleCAtIDIpIDw8IDg7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAxLCBtX2xvb3BJbmRleCAtIDIpIDw8IDk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDEsIG1fbG9vcEluZGV4KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDIsIG1fbG9vcEluZGV4KSA8PCAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMywgbV9sb29wSW5kZXgpIDw8IDI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSA0LCBtX2xvb3BJbmRleCkgPDwgMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMF0sIG1fbG9vcEluZGV4ICsgR0JBVFsxXSkgPDwgNDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIDEsIG1fbG9vcEluZGV4IC0gMSkgPDwgNTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodywgbV9sb29wSW5kZXggLSAxKSA8PCA2Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMSwgbV9sb29wSW5kZXggLSAxKSA8PCA3Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMiwgbV9sb29wSW5kZXggLSAxKSA8PCA4Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMywgbV9sb29wSW5kZXggLSAxKSA8PCA5Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJWYWwgPSBtX3BBcml0aERlY29kZXItPkRFQ09ERSgmbV9nYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICAgICAgR0JSRUctPnNldFBpeGVsKHcsIG1fbG9vcEluZGV4LCBiVmFsKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmKHBQYXVzZSAmJiBwUGF1c2UtPk5lZWRUb1BhdXNlTm93KCkpIHsNCi0gICAgICAgICAgICBtX2xvb3BJbmRleCArKzsNCi0gICAgICAgICAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRTsNCi0gICAgICAgICAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsNCi0gICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7DQotfQ0KLUZYQ09ERUNfU1RBVFVTIENKQmlnMl9HUkRQcm9jOjpTdGFydF9kZWNvZGVfTU1SKENKQmlnMl9JbWFnZSoqIHBJbWFnZSwgQ0pCaWcyX0JpdFN0cmVhbSAqcFN0cmVhbSwgSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBpbnQgYml0cG9zLCBpOw0KLSAgICBKQklHMl9BTExPQygoKiBwSW1hZ2UpLCBDSkJpZzJfSW1hZ2UoR0JXLCBHQkgpKTsNCi0gICAgaWYgKCgqIHBJbWFnZSktPm1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgZGVsZXRlICgqIHBJbWFnZSk7DQotICAgICAgICAoKiBwSW1hZ2UpID0gTlVMTDsNCi0gICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoIkdlbmVyaWMgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZTogQ3JlYXRlIEltYWdlIEZhaWxlZCB3aXRoIHdpZHRoID0gJWQsIGhlaWdodCA9ICVkXG4iLCBHQlcsIEdCSCk7DQotICAgICAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfRVJST1I7DQotICAgICAgICByZXR1cm4gbV9Qcm9zc2l2ZVN0YXR1czsNCi0gICAgfQ0KLSAgICBiaXRwb3MgPSAoaW50KXBTdHJlYW0tPmdldEJpdFBvcygpOw0KLSAgICBfRmF4RzREZWNvZGUobV9wTW9kdWxlLCBwU3RyZWFtLT5nZXRCdWYoKSwgcFN0cmVhbS0+Z2V0TGVuZ3RoKCksICZiaXRwb3MsICgqIHBJbWFnZSktPm1fcERhdGEsIEdCVywgR0JILCAoKiBwSW1hZ2UpLT5tX25TdHJpZGUpOw0KLSAgICBwU3RyZWFtLT5zZXRCaXRQb3MoYml0cG9zKTsNCi0gICAgZm9yKGkgPSAwOyAoRlhfRFdPUkQpaSA8ICgqIHBJbWFnZSktPm1fblN0cmlkZSAqIEdCSDsgaSsrKSB7DQotICAgICAgICAoKiBwSW1hZ2UpLT5tX3BEYXRhW2ldID0gfigqIHBJbWFnZSktPm1fcERhdGFbaV07DQotICAgIH0NCi0gICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7DQotICAgIHJldHVybiBtX1Byb3NzaXZlU3RhdHVzOw0KLX0NCi1GWENPREVDX1NUQVRVUyBDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX01NUigpDQotew0KLSAgICByZXR1cm4gbV9Qcm9zc2l2ZVN0YXR1czsNCi19DQotRlhDT0RFQ19TVEFUVVMgQ0pCaWcyX0dSRFByb2M6OkNvbnRpbnVlX2RlY29kZShJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIGlmKG1fUHJvc3NpdmVTdGF0dXMgIT0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRSkgew0KLSAgICAgICAgcmV0dXJuIG1fUHJvc3NpdmVTdGF0dXM7DQotICAgIH0NCi0gICAgc3dpdGNoIChtX0RlY29kZVR5cGUpIHsNCi0gICAgICAgIGNhc2UgMToNCi0gICAgICAgICAgICByZXR1cm4gZGVjb2RlX0FyaXRoKHBQYXVzZSk7DQotICAgICAgICBjYXNlIDI6DQotICAgICAgICAgICAgcmV0dXJuIGRlY29kZV9Bcml0aF9WMihwUGF1c2UpOw0KLSAgICAgICAgY2FzZSAzOg0KLSAgICAgICAgICAgIHJldHVybiBkZWNvZGVfQXJpdGhfVjEocFBhdXNlKTsNCi0gICAgICAgIGNhc2UgNDoNCi0gICAgICAgICAgICByZXR1cm4gZGVjb2RlX01NUigpOw0KLSAgICB9DQotICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19FUlJPUjsNCi0gICAgcmV0dXJuIG1fUHJvc3NpdmVTdGF0dXM7DQotfQ0KLUZYQ09ERUNfU1RBVFVTIENKQmlnMl9HUkRQcm9jOjpkZWNvZGVfQXJpdGhfVGVtcGxhdGUwX29wdDMoQ0pCaWcyX0ltYWdlICpwSW1hZ2UsIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBGWF9CT09MIFNMVFAsIGJWYWw7DQotICAgIEZYX0RXT1JEIENPTlRFWFQ7DQotICAgIEZYX0RXT1JEIGxpbmUxLCBsaW5lMjsNCi0gICAgRlhfQllURSAqcExpbmUxLCAqcExpbmUyLCBjVmFsOw0KLSAgICBGWF9JTlQzMiBuU3RyaWRlLCBuU3RyaWRlMiwgazsNCi0gICAgRlhfSU5UMzIgbkxpbmVCeXRlcywgbkJpdHNMZWZ0LCBjYzsNCi0gICAgaWYobV9wTGluZSA9PSBOVUxMKSB7DQotICAgICAgICBtX3BMaW5lID0gcEltYWdlLT5tX3BEYXRhOw0KLSAgICB9DQotICAgIG5TdHJpZGUgPSBwSW1hZ2UtPm1fblN0cmlkZTsNCi0gICAgblN0cmlkZTIgPSBuU3RyaWRlIDw8IDE7DQotICAgIG5MaW5lQnl0ZXMgPSAoKEdCVyArIDcpID4+IDMpIC0gMTsNCi0gICAgbkJpdHNMZWZ0ID0gR0JXIC0gKG5MaW5lQnl0ZXMgPDwgMyk7DQotICAgIEZYX0RXT1JEIGhlaWdodCA9IEdCSCAmIDB4N2ZmZmZmZmY7DQotICAgIGZvcig7IG1fbG9vcEluZGV4IDwgaGVpZ2h0OyBtX2xvb3BJbmRleCsrKSB7DQotICAgICAgICBpZihUUEdET04pIHsNCi0gICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbMHg5YjI1XSk7DQotICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKExUUCA9PSAxKSB7DQotICAgICAgICAgICAgcEltYWdlLT5jb3B5TGluZShtX2xvb3BJbmRleCwgbV9sb29wSW5kZXggLSAxKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYobV9sb29wSW5kZXggPiAxKSB7DQotICAgICAgICAgICAgICAgIHBMaW5lMSA9IG1fcExpbmUgLSBuU3RyaWRlMjsNCi0gICAgICAgICAgICAgICAgcExpbmUyID0gbV9wTGluZSAtIG5TdHJpZGU7DQotICAgICAgICAgICAgICAgIGxpbmUxID0gKCpwTGluZTErKykgPDwgNjsNCi0gICAgICAgICAgICAgICAgbGluZTIgPSAqcExpbmUyKys7DQotICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKGxpbmUxICYgMHhmODAwKSB8IChsaW5lMiAmIDB4MDdmMCkpOw0KLSAgICAgICAgICAgICAgICBmb3IoY2MgPSAwOyBjYyA8IG5MaW5lQnl0ZXM7IGNjKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGxpbmUxID0gKGxpbmUxIDw8IDgpIHwgKCgqcExpbmUxKyspIDw8IDYpOw0KLSAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAobGluZTIgPDwgOCkgfCAoKnBMaW5lMisrKTsNCi0gICAgICAgICAgICAgICAgICAgIGNWYWwgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgZm9yKGsgPSA3OyBrID49IDA7IGstLSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8IGs7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoKENPTlRFWFQgJiAweDdiZjcpIDw8IDEpIHwgYlZhbA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUxID4+IGspICYgMHgwODAwKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUyID4+IGspICYgMHgwMDEwKSk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBtX3BMaW5lW2NjXSA9IGNWYWw7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbGluZTEgPDw9IDg7DQotICAgICAgICAgICAgICAgIGxpbmUyIDw8PSA4Ow0KLSAgICAgICAgICAgICAgICBjVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgZm9yKGsgPSAwOyBrIDwgbkJpdHNMZWZ0OyBrKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgKDcgLSBrKTsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKChDT05URVhUICYgMHg3YmY3KSA8PCAxKSB8IGJWYWwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUxID4+ICg3IC0gaykpICYgMHgwODAwKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTIgPj4gKDcgLSBrKSkgJiAweDAwMTApKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBtX3BMaW5lW25MaW5lQnl0ZXNdID0gY1ZhbDsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBwTGluZTIgPSBtX3BMaW5lIC0gblN0cmlkZTsNCi0gICAgICAgICAgICAgICAgbGluZTIgPSAobV9sb29wSW5kZXggJiAxKSA/ICgqcExpbmUyKyspIDogMDsNCi0gICAgICAgICAgICAgICAgQ09OVEVYVCA9IChsaW5lMiAmIDB4MDdmMCk7DQotICAgICAgICAgICAgICAgIGZvcihjYyA9IDA7IGNjIDwgbkxpbmVCeXRlczsgY2MrKykgew0KLSAgICAgICAgICAgICAgICAgICAgaWYobV9sb29wSW5kZXggJiAxKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAobGluZTIgPDwgOCkgfCAoKnBMaW5lMisrKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGNWYWwgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgZm9yKGsgPSA3OyBrID49IDA7IGstLSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8IGs7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoKENPTlRFWFQgJiAweDdiZjcpIDw8IDEpIHwgYlZhbA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUyID4+IGspICYgMHgwMDEwKSk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBtX3BMaW5lW2NjXSA9IGNWYWw7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbGluZTIgPDw9IDg7DQotICAgICAgICAgICAgICAgIGNWYWwgPSAwOw0KLSAgICAgICAgICAgICAgICBmb3IoayA9IDA7IGsgPCBuQml0c0xlZnQ7IGsrKykgew0KLSAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsNCi0gICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCAoNyAtIGspOw0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoKENPTlRFWFQgJiAweDdiZjcpIDw8IDEpIHwgYlZhbA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTIgPj4gKDcgLSBrKSkgJiAweDAwMTApKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBtX3BMaW5lW25MaW5lQnl0ZXNdID0gY1ZhbDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBtX3BMaW5lICs9IG5TdHJpZGU7DQotICAgICAgICBpZihwUGF1c2UgJiYgcFBhdXNlLT5OZWVkVG9QYXVzZU5vdygpKSB7DQotICAgICAgICAgICAgbV9sb29wSW5kZXgrKzsNCi0gICAgICAgICAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRTsNCi0gICAgICAgICAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsNCi0gICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7DQotfQ0KLUZYQ09ERUNfU1RBVFVTIENKQmlnMl9HUkRQcm9jOjpkZWNvZGVfQXJpdGhfVGVtcGxhdGUwX3Vub3B0KENKQmlnMl9JbWFnZSAqIHBJbWFnZSwgQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIEZYX0JPT0wgU0xUUCwgYlZhbDsNCi0gICAgRlhfRFdPUkQgQ09OVEVYVDsNCi0gICAgRlhfRFdPUkQgbGluZTEsIGxpbmUyLCBsaW5lMzsNCi0gICAgZm9yKDsgbV9sb29wSW5kZXggPCBHQkg7IG1fbG9vcEluZGV4KyspIHsNCi0gICAgICAgIGlmKFRQR0RPTikgew0KLSAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFsweDliMjVdKTsNCi0gICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoTFRQID09IDEpIHsNCi0gICAgICAgICAgICBwSW1hZ2UtPmNvcHlMaW5lKG1fbG9vcEluZGV4LCBtX2xvb3BJbmRleCAtIDEpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBsaW5lMSA9IHBJbWFnZS0+Z2V0UGl4ZWwoMSwgbV9sb29wSW5kZXggLSAyKTsNCi0gICAgICAgICAgICBsaW5lMSB8PSBwSW1hZ2UtPmdldFBpeGVsKDAsIG1fbG9vcEluZGV4IC0gMikgPDwgMTsNCi0gICAgICAgICAgICBsaW5lMiA9IHBJbWFnZS0+Z2V0UGl4ZWwoMiwgbV9sb29wSW5kZXggLSAxKTsNCi0gICAgICAgICAgICBsaW5lMiB8PSBwSW1hZ2UtPmdldFBpeGVsKDEsIG1fbG9vcEluZGV4IC0gMSkgPDwgMTsNCi0gICAgICAgICAgICBsaW5lMiB8PSBwSW1hZ2UtPmdldFBpeGVsKDAsIG1fbG9vcEluZGV4IC0gMSkgPDwgMjsNCi0gICAgICAgICAgICBsaW5lMyA9IDA7DQotICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR0JXOyB3KyspIHsNCi0gICAgICAgICAgICAgICAgaWYoVVNFU0tJUCAmJiBTS0lQLT5nZXRQaXhlbCh3LCBtX2xvb3BJbmRleCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIGJWYWwgPSAwOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IGxpbmUzOw0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBwSW1hZ2UtPmdldFBpeGVsKHcgKyBHQkFUWzBdLCBtX2xvb3BJbmRleCArIEdCQVRbMV0pIDw8IDQ7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUyIDw8IDU7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IHBJbWFnZS0+Z2V0UGl4ZWwodyArIEdCQVRbMl0sIG1fbG9vcEluZGV4ICsgR0JBVFszXSkgPDwgMTA7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IHBJbWFnZS0+Z2V0UGl4ZWwodyArIEdCQVRbNF0sIG1fbG9vcEluZGV4ICsgR0JBVFs1XSkgPDwgMTE7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUxIDw8IDEyOw0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBwSW1hZ2UtPmdldFBpeGVsKHcgKyBHQkFUWzZdLCBtX2xvb3BJbmRleCArIEdCQVRbN10pIDw8IDE1Ow0KLSAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZihiVmFsKSB7DQotICAgICAgICAgICAgICAgICAgICBwSW1hZ2UtPnNldFBpeGVsKHcsIG1fbG9vcEluZGV4LCBiVmFsKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBsaW5lMSA9ICgobGluZTEgPDwgMSkgfCBwSW1hZ2UtPmdldFBpeGVsKHcgKyAyLCBtX2xvb3BJbmRleCAtIDIpKSAmIDB4MDc7DQotICAgICAgICAgICAgICAgIGxpbmUyID0gKChsaW5lMiA8PCAxKSB8IHBJbWFnZS0+Z2V0UGl4ZWwodyArIDMsIG1fbG9vcEluZGV4IC0gMSkpICYgMHgxZjsNCi0gICAgICAgICAgICAgICAgbGluZTMgPSAoKGxpbmUzIDw8IDEpIHwgYlZhbCkgJiAweDBmOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmKHBQYXVzZSAmJiBwUGF1c2UtPk5lZWRUb1BhdXNlTm93KCkpIHsNCi0gICAgICAgICAgICBtX2xvb3BJbmRleCsrOw0KLSAgICAgICAgICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFOw0KLSAgICAgICAgICAgIHJldHVybiBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOw0KLSAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsNCi19DQotRlhDT0RFQ19TVEFUVVMgQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aF9UZW1wbGF0ZTFfb3B0MyhDSkJpZzJfSW1hZ2UgKnBJbWFnZSwgQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIEZYX0JPT0wgU0xUUCwgYlZhbDsNCi0gICAgRlhfRFdPUkQgQ09OVEVYVDsNCi0gICAgRlhfRFdPUkQgbGluZTEsIGxpbmUyOw0KLSAgICBGWF9CWVRFICpwTGluZTEsICpwTGluZTIsIGNWYWw7DQotICAgIEZYX0lOVDMyIG5TdHJpZGUsIG5TdHJpZGUyLCBrOw0KLSAgICBGWF9JTlQzMiBuTGluZUJ5dGVzLCBuQml0c0xlZnQsIGNjOw0KLSAgICBpZiAoIW1fcExpbmUpIHsNCi0gICAgICAgIG1fcExpbmUgPSBwSW1hZ2UtPm1fcERhdGE7DQotICAgIH0NCi0gICAgblN0cmlkZSA9IHBJbWFnZS0+bV9uU3RyaWRlOw0KLSAgICBuU3RyaWRlMiA9IG5TdHJpZGUgPDwgMTsNCi0gICAgbkxpbmVCeXRlcyA9ICgoR0JXICsgNykgPj4gMykgLSAxOw0KLSAgICBuQml0c0xlZnQgPSBHQlcgLSAobkxpbmVCeXRlcyA8PCAzKTsNCi0gICAgZm9yKDsgbV9sb29wSW5kZXggPCBHQkg7IG1fbG9vcEluZGV4KyspIHsNCi0gICAgICAgIGlmKFRQR0RPTikgew0KLSAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFsweDA3OTVdKTsNCi0gICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoTFRQID09IDEpIHsNCi0gICAgICAgICAgICBwSW1hZ2UtPmNvcHlMaW5lKG1fbG9vcEluZGV4LCBtX2xvb3BJbmRleCAtIDEpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZihtX2xvb3BJbmRleCA+IDEpIHsNCi0gICAgICAgICAgICAgICAgcExpbmUxID0gbV9wTGluZSAtIG5TdHJpZGUyOw0KLSAgICAgICAgICAgICAgICBwTGluZTIgPSBtX3BMaW5lIC0gblN0cmlkZTsNCi0gICAgICAgICAgICAgICAgbGluZTEgPSAoKnBMaW5lMSsrKSA8PCA0Ow0KLSAgICAgICAgICAgICAgICBsaW5lMiA9ICpwTGluZTIrKzsNCi0gICAgICAgICAgICAgICAgQ09OVEVYVCA9IChsaW5lMSAmIDB4MWUwMCkgfCAoKGxpbmUyID4+IDEpICYgMHgwMWY4KTsNCi0gICAgICAgICAgICAgICAgZm9yKGNjID0gMDsgY2MgPCBuTGluZUJ5dGVzOyBjYysrKSB7DQotICAgICAgICAgICAgICAgICAgICBsaW5lMSA9IChsaW5lMSA8PCA4KSB8ICgoKnBMaW5lMSsrKSA8PCA0KTsNCi0gICAgICAgICAgICAgICAgICAgIGxpbmUyID0gKGxpbmUyIDw8IDgpIHwgKCpwTGluZTIrKyk7DQotICAgICAgICAgICAgICAgICAgICBjVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIGZvcihrID0gNzsgayA+PSAwOyBrLS0pIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCBrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDBlZmIpIDw8IDEpIHwgYlZhbA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTEgPj4gaykgJiAweDAyMDApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMiA+PiAoayArIDEpKSAmIDB4MDAwOCk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBtX3BMaW5lW2NjXSA9IGNWYWw7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbGluZTEgPDw9IDg7DQotICAgICAgICAgICAgICAgIGxpbmUyIDw8PSA4Ow0KLSAgICAgICAgICAgICAgICBjVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgZm9yKGsgPSAwOyBrIDwgbkJpdHNMZWZ0OyBrKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgKDcgLSBrKTsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDBlZmIpIDw8IDEpIHwgYlZhbA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMSA+PiAoNyAtIGspKSAmIDB4MDIwMCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTIgPj4gKDggLSBrKSkgJiAweDAwMDgpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG1fcExpbmVbbkxpbmVCeXRlc10gPSBjVmFsOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHBMaW5lMiA9IG1fcExpbmUgLSBuU3RyaWRlOw0KLSAgICAgICAgICAgICAgICBsaW5lMiA9IChtX2xvb3BJbmRleCAmIDEpID8gKCpwTGluZTIrKykgOiAwOw0KLSAgICAgICAgICAgICAgICBDT05URVhUID0gKGxpbmUyID4+IDEpICYgMHgwMWY4Ow0KLSAgICAgICAgICAgICAgICBmb3IoY2MgPSAwOyBjYyA8IG5MaW5lQnl0ZXM7IGNjKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmKG1fbG9vcEluZGV4ICYgMSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyID0gKGxpbmUyIDw8IDgpIHwgKCpwTGluZTIrKyk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBjVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIGZvcihrID0gNzsgayA+PSAwOyBrLS0pIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCBrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDBlZmIpIDw8IDEpIHwgYlZhbA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTIgPj4gKGsgKyAxKSkgJiAweDAwMDgpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgbV9wTGluZVtjY10gPSBjVmFsOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGxpbmUyIDw8PSA4Ow0KLSAgICAgICAgICAgICAgICBjVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgZm9yKGsgPSAwOyBrIDwgbkJpdHNMZWZ0OyBrKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgKDcgLSBrKTsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDBlZmIpIDw8IDEpIHwgYlZhbA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMiA+PiAoOCAtIGspKSAmIDB4MDAwOCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbV9wTGluZVtuTGluZUJ5dGVzXSA9IGNWYWw7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wTGluZSArPSBuU3RyaWRlOw0KLSAgICAgICAgaWYocFBhdXNlICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgew0KLSAgICAgICAgICAgIG1fbG9vcEluZGV4Kys7DQotICAgICAgICAgICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUU7DQotICAgICAgICAgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7DQotICAgIHJldHVybiBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOw0KLX0NCi1GWENPREVDX1NUQVRVUyBDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoX1RlbXBsYXRlMV91bm9wdChDSkJpZzJfSW1hZ2UgKiBwSW1hZ2UsIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBGWF9CT09MIFNMVFAsIGJWYWw7DQotICAgIEZYX0RXT1JEIENPTlRFWFQ7DQotICAgIEZYX0RXT1JEIGxpbmUxLCBsaW5lMiwgbGluZTM7DQotICAgIGZvcihGWF9EV09SRCBoID0gMDsgaCA8IEdCSDsgaCsrKSB7DQotICAgICAgICBpZihUUEdET04pIHsNCi0gICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbMHgwNzk1XSk7DQotICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKExUUCA9PSAxKSB7DQotICAgICAgICAgICAgcEltYWdlLT5jb3B5TGluZShoLCBoIC0gMSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGxpbmUxID0gcEltYWdlLT5nZXRQaXhlbCgyLCBoIC0gMik7DQotICAgICAgICAgICAgbGluZTEgfD0gcEltYWdlLT5nZXRQaXhlbCgxLCBoIC0gMikgPDwgMTsNCi0gICAgICAgICAgICBsaW5lMSB8PSBwSW1hZ2UtPmdldFBpeGVsKDAsIGggLSAyKSA8PCAyOw0KLSAgICAgICAgICAgIGxpbmUyID0gcEltYWdlLT5nZXRQaXhlbCgyLCBoIC0gMSk7DQotICAgICAgICAgICAgbGluZTIgfD0gcEltYWdlLT5nZXRQaXhlbCgxLCBoIC0gMSkgPDwgMTsNCi0gICAgICAgICAgICBsaW5lMiB8PSBwSW1hZ2UtPmdldFBpeGVsKDAsIGggLSAxKSA8PCAyOw0KLSAgICAgICAgICAgIGxpbmUzID0gMDsNCi0gICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHQlc7IHcrKykgew0KLSAgICAgICAgICAgICAgICBpZihVU0VTS0lQICYmIFNLSVAtPmdldFBpeGVsKHcsIGgpKSB7DQotICAgICAgICAgICAgICAgICAgICBiVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSBsaW5lMzsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gcEltYWdlLT5nZXRQaXhlbCh3ICsgR0JBVFswXSwgaCArIEdCQVRbMV0pIDw8IDM7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUyIDw8IDQ7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUxIDw8IDk7DQotICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmKGJWYWwpIHsNCi0gICAgICAgICAgICAgICAgICAgIHBJbWFnZS0+c2V0UGl4ZWwodywgaCwgYlZhbCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbGluZTEgPSAoKGxpbmUxIDw8IDEpIHwgcEltYWdlLT5nZXRQaXhlbCh3ICsgMywgaCAtIDIpKSAmIDB4MGY7DQotICAgICAgICAgICAgICAgIGxpbmUyID0gKChsaW5lMiA8PCAxKSB8IHBJbWFnZS0+Z2V0UGl4ZWwodyArIDMsIGggLSAxKSkgJiAweDFmOw0KLSAgICAgICAgICAgICAgICBsaW5lMyA9ICgobGluZTMgPDwgMSkgfCBiVmFsKSAmIDB4MDc7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYocFBhdXNlICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgew0KLSAgICAgICAgICAgIG1fbG9vcEluZGV4Kys7DQotICAgICAgICAgICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUU7DQotICAgICAgICAgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7DQotICAgIHJldHVybiBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOw0KLX0NCi1GWENPREVDX1NUQVRVUyBDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoX1RlbXBsYXRlMl9vcHQzKENKQmlnMl9JbWFnZSAqcEltYWdlLCBDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQsIElGWF9QYXVzZSogcFBhdXNlKQ0KLXsNCi0gICAgRlhfQk9PTCBTTFRQLCBiVmFsOw0KLSAgICBGWF9EV09SRCBDT05URVhUOw0KLSAgICBGWF9EV09SRCBsaW5lMSwgbGluZTI7DQotICAgIEZYX0JZVEUgKnBMaW5lMSwgKnBMaW5lMiwgY1ZhbDsNCi0gICAgRlhfSU5UMzIgblN0cmlkZSwgblN0cmlkZTIsIGs7DQotICAgIEZYX0lOVDMyIG5MaW5lQnl0ZXMsIG5CaXRzTGVmdCwgY2M7DQotICAgIGlmKCFtX3BMaW5lKSB7DQotICAgICAgICBtX3BMaW5lID0gcEltYWdlLT5tX3BEYXRhOw0KLSAgICB9DQotICAgIG5TdHJpZGUgPSBwSW1hZ2UtPm1fblN0cmlkZTsNCi0gICAgblN0cmlkZTIgPSBuU3RyaWRlIDw8IDE7DQotICAgIG5MaW5lQnl0ZXMgPSAoKEdCVyArIDcpID4+IDMpIC0gMTsNCi0gICAgbkJpdHNMZWZ0ID0gR0JXIC0gKG5MaW5lQnl0ZXMgPDwgMyk7DQotICAgIGZvcig7IG1fbG9vcEluZGV4IDwgR0JIOyBtX2xvb3BJbmRleCsrKSB7DQotICAgICAgICBpZihUUEdET04pIHsNCi0gICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbMHgwMGU1XSk7DQotICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKExUUCA9PSAxKSB7DQotICAgICAgICAgICAgcEltYWdlLT5jb3B5TGluZShtX2xvb3BJbmRleCwgbV9sb29wSW5kZXggLSAxKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYobV9sb29wSW5kZXggPiAxKSB7DQotICAgICAgICAgICAgICAgIHBMaW5lMSA9IG1fcExpbmUgLSBuU3RyaWRlMjsNCi0gICAgICAgICAgICAgICAgcExpbmUyID0gbV9wTGluZSAtIG5TdHJpZGU7DQotICAgICAgICAgICAgICAgIGxpbmUxID0gKCpwTGluZTErKykgPDwgMTsNCi0gICAgICAgICAgICAgICAgbGluZTIgPSAqcExpbmUyKys7DQotICAgICAgICAgICAgICAgIENPTlRFWFQgPSAobGluZTEgJiAweDAzODApIHwgKChsaW5lMiA+PiAzKSAmIDB4MDA3Yyk7DQotICAgICAgICAgICAgICAgIGZvcihjYyA9IDA7IGNjIDwgbkxpbmVCeXRlczsgY2MrKykgew0KLSAgICAgICAgICAgICAgICAgICAgbGluZTEgPSAobGluZTEgPDwgOCkgfCAoKCpwTGluZTErKykgPDwgMSk7DQotICAgICAgICAgICAgICAgICAgICBsaW5lMiA9IChsaW5lMiA8PCA4KSB8ICgqcExpbmUyKyspOw0KLSAgICAgICAgICAgICAgICAgICAgY1ZhbCA9IDA7DQotICAgICAgICAgICAgICAgICAgICBmb3IoayA9IDc7IGsgPj0gMDsgay0tKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKChDT05URVhUICYgMHgwMWJkKSA8PCAxKSB8IGJWYWwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUxID4+IGspICYgMHgwMDgwKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTIgPj4gKGsgKyAzKSkgJiAweDAwMDQpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgbV9wTGluZVtjY10gPSBjVmFsOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGxpbmUxIDw8PSA4Ow0KLSAgICAgICAgICAgICAgICBsaW5lMiA8PD0gODsNCi0gICAgICAgICAgICAgICAgY1ZhbCA9IDA7DQotICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IG5CaXRzTGVmdDsgaysrKSB7DQotICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8ICg3IC0gayk7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKChDT05URVhUICYgMHgwMWJkKSA8PCAxKSB8IGJWYWwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTEgPj4gKDcgLSBrKSkgJiAweDAwODApDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUyID4+ICgxMCAtIGspKSAmIDB4MDAwNCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbV9wTGluZVtuTGluZUJ5dGVzXSA9IGNWYWw7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgcExpbmUyID0gbV9wTGluZSAtIG5TdHJpZGU7DQotICAgICAgICAgICAgICAgIGxpbmUyID0gKG1fbG9vcEluZGV4ICYgMSkgPyAoKnBMaW5lMisrKSA6IDA7DQotICAgICAgICAgICAgICAgIENPTlRFWFQgPSAobGluZTIgPj4gMykgJiAweDAwN2M7DQotICAgICAgICAgICAgICAgIGZvcihjYyA9IDA7IGNjIDwgbkxpbmVCeXRlczsgY2MrKykgew0KLSAgICAgICAgICAgICAgICAgICAgaWYobV9sb29wSW5kZXggJiAxKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAobGluZTIgPDwgOCkgfCAoKnBMaW5lMisrKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGNWYWwgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgZm9yKGsgPSA3OyBrID49IDA7IGstLSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8IGs7DQotICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoQ09OVEVYVCAmIDB4MDFiZCkgPDwgMSkgfCBiVmFsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMiA+PiAoayArIDMpKSAmIDB4MDAwNCk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBtX3BMaW5lW2NjXSA9IGNWYWw7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbGluZTIgPDw9IDg7DQotICAgICAgICAgICAgICAgIGNWYWwgPSAwOw0KLSAgICAgICAgICAgICAgICBmb3IoayA9IDA7IGsgPCBuQml0c0xlZnQ7IGsrKykgew0KLSAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsNCi0gICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCAoNyAtIGspOw0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoQ09OVEVYVCAmIDB4MDFiZCkgPDwgMSkgfCBiVmFsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKChsaW5lMiA+PiAoMTAgLSBrKSkpICYgMHgwMDA0KTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBtX3BMaW5lW25MaW5lQnl0ZXNdID0gY1ZhbDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBtX3BMaW5lICs9IG5TdHJpZGU7DQotICAgICAgICBpZihwUGF1c2UgJiYgbV9sb29wSW5kZXggJSA1MCA9PSAwICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgew0KLSAgICAgICAgICAgIG1fbG9vcEluZGV4Kys7DQotICAgICAgICAgICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUU7DQotICAgICAgICAgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7DQotICAgIHJldHVybiBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOw0KLX0NCi1GWENPREVDX1NUQVRVUyBDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoX1RlbXBsYXRlMl91bm9wdChDSkJpZzJfSW1hZ2UgKiBwSW1hZ2UsIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBGWF9CT09MIFNMVFAsIGJWYWw7DQotICAgIEZYX0RXT1JEIENPTlRFWFQ7DQotICAgIEZYX0RXT1JEIGxpbmUxLCBsaW5lMiwgbGluZTM7DQotICAgIGZvcig7IG1fbG9vcEluZGV4IDwgR0JIOyBtX2xvb3BJbmRleCsrKSB7DQotICAgICAgICBpZihUUEdET04pIHsNCi0gICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbMHgwMGU1XSk7DQotICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKExUUCA9PSAxKSB7DQotICAgICAgICAgICAgcEltYWdlLT5jb3B5TGluZShtX2xvb3BJbmRleCwgbV9sb29wSW5kZXggLSAxKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbGluZTEgPSBwSW1hZ2UtPmdldFBpeGVsKDEsIG1fbG9vcEluZGV4IC0gMik7DQotICAgICAgICAgICAgbGluZTEgfD0gcEltYWdlLT5nZXRQaXhlbCgwLCBtX2xvb3BJbmRleCAtIDIpIDw8IDE7DQotICAgICAgICAgICAgbGluZTIgPSBwSW1hZ2UtPmdldFBpeGVsKDEsIG1fbG9vcEluZGV4IC0gMSk7DQotICAgICAgICAgICAgbGluZTIgfD0gcEltYWdlLT5nZXRQaXhlbCgwLCBtX2xvb3BJbmRleCAtIDEpIDw8IDE7DQotICAgICAgICAgICAgbGluZTMgPSAwOw0KLSAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdysrKSB7DQotICAgICAgICAgICAgICAgIGlmKFVTRVNLSVAgJiYgU0tJUC0+Z2V0UGl4ZWwodywgbV9sb29wSW5kZXgpKSB7DQotICAgICAgICAgICAgICAgICAgICBiVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSBsaW5lMzsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gcEltYWdlLT5nZXRQaXhlbCh3ICsgR0JBVFswXSwgbV9sb29wSW5kZXggKyBHQkFUWzFdKSA8PCAyOw0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMiA8PCAzOw0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMSA8PCA3Ow0KLSAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZihiVmFsKSB7DQotICAgICAgICAgICAgICAgICAgICBwSW1hZ2UtPnNldFBpeGVsKHcsIG1fbG9vcEluZGV4LCBiVmFsKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBsaW5lMSA9ICgobGluZTEgPDwgMSkgfCBwSW1hZ2UtPmdldFBpeGVsKHcgKyAyLCBtX2xvb3BJbmRleCAtIDIpKSAmIDB4MDc7DQotICAgICAgICAgICAgICAgIGxpbmUyID0gKChsaW5lMiA8PCAxKSB8IHBJbWFnZS0+Z2V0UGl4ZWwodyArIDIsIG1fbG9vcEluZGV4IC0gMSkpICYgMHgwZjsNCi0gICAgICAgICAgICAgICAgbGluZTMgPSAoKGxpbmUzIDw8IDEpIHwgYlZhbCkgJiAweDAzOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmKHBQYXVzZSAmJiBwUGF1c2UtPk5lZWRUb1BhdXNlTm93KCkpIHsNCi0gICAgICAgICAgICBtX2xvb3BJbmRleCsrOw0KLSAgICAgICAgICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFOw0KLSAgICAgICAgICAgIHJldHVybiBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOw0KLSAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsNCi19DQotRlhDT0RFQ19TVEFUVVMgQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aF9UZW1wbGF0ZTNfb3B0MyhDSkJpZzJfSW1hZ2UgKnBJbWFnZSwgQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIEZYX0JPT0wgU0xUUCwgYlZhbDsNCi0gICAgRlhfRFdPUkQgQ09OVEVYVDsNCi0gICAgRlhfRFdPUkQgbGluZTE7DQotICAgIEZYX0JZVEUgKnBMaW5lMSwgY1ZhbDsNCi0gICAgRlhfSU5UMzIgblN0cmlkZSwgazsNCi0gICAgRlhfSU5UMzIgbkxpbmVCeXRlcywgbkJpdHNMZWZ0LCBjYzsNCi0gICAgaWYgKCFtX3BMaW5lKSB7DQotICAgICAgICBtX3BMaW5lID0gcEltYWdlLT5tX3BEYXRhOw0KLSAgICB9DQotICAgIG5TdHJpZGUgPSBwSW1hZ2UtPm1fblN0cmlkZTsNCi0gICAgbkxpbmVCeXRlcyA9ICgoR0JXICsgNykgPj4gMykgLSAxOw0KLSAgICBuQml0c0xlZnQgPSBHQlcgLSAobkxpbmVCeXRlcyA8PCAzKTsNCi0gICAgZm9yKDsgbV9sb29wSW5kZXggPCBHQkg7IG1fbG9vcEluZGV4KyspIHsNCi0gICAgICAgIGlmKFRQR0RPTikgew0KLSAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFsweDAxOTVdKTsNCi0gICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoTFRQID09IDEpIHsNCi0gICAgICAgICAgICBwSW1hZ2UtPmNvcHlMaW5lKG1fbG9vcEluZGV4LCBtX2xvb3BJbmRleCAtIDEpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZihtX2xvb3BJbmRleCA+IDApIHsNCi0gICAgICAgICAgICAgICAgcExpbmUxID0gbV9wTGluZSAtIG5TdHJpZGU7DQotICAgICAgICAgICAgICAgIGxpbmUxID0gKnBMaW5lMSsrOw0KLSAgICAgICAgICAgICAgICBDT05URVhUID0gKGxpbmUxID4+IDEpICYgMHgwM2YwOw0KLSAgICAgICAgICAgICAgICBmb3IoY2MgPSAwOyBjYyA8IG5MaW5lQnl0ZXM7IGNjKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGxpbmUxID0gKGxpbmUxIDw8IDgpIHwgKCpwTGluZTErKyk7DQotICAgICAgICAgICAgICAgICAgICBjVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIGZvcihrID0gNzsgayA+PSAwOyBrLS0pIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCBrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDAxZjcpIDw8IDEpIHwgYlZhbA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTEgPj4gKGsgKyAxKSkgJiAweDAwMTApOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgbV9wTGluZVtjY10gPSBjVmFsOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGxpbmUxIDw8PSA4Ow0KLSAgICAgICAgICAgICAgICBjVmFsID0gMDsNCi0gICAgICAgICAgICAgICAgZm9yKGsgPSAwOyBrIDwgbkJpdHNMZWZ0OyBrKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7DQotICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgKDcgLSBrKTsNCi0gICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDAxZjcpIDw8IDEpIHwgYlZhbA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMSA+PiAoOCAtIGspKSAmIDB4MDAxMCk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbV9wTGluZVtuTGluZUJ5dGVzXSA9IGNWYWw7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgQ09OVEVYVCA9IDA7DQotICAgICAgICAgICAgICAgIGZvcihjYyA9IDA7IGNjIDwgbkxpbmVCeXRlczsgY2MrKykgew0KLSAgICAgICAgICAgICAgICAgICAgY1ZhbCA9IDA7DQotICAgICAgICAgICAgICAgICAgICBmb3IoayA9IDc7IGsgPj0gMDsgay0tKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKChDT05URVhUICYgMHgwMWY3KSA8PCAxKSB8IGJWYWw7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBtX3BMaW5lW2NjXSA9IGNWYWw7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgY1ZhbCA9IDA7DQotICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IG5CaXRzTGVmdDsgaysrKSB7DQotICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8ICg3IC0gayk7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKChDT05URVhUICYgMHgwMWY3KSA8PCAxKSB8IGJWYWw7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbV9wTGluZVtuTGluZUJ5dGVzXSA9IGNWYWw7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wTGluZSArPSBuU3RyaWRlOw0KLSAgICAgICAgaWYocFBhdXNlICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgew0KLSAgICAgICAgICAgIG1fbG9vcEluZGV4Kys7DQotICAgICAgICAgICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUU7DQotICAgICAgICAgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7DQotICAgIHJldHVybiBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOw0KLX0NCi1GWENPREVDX1NUQVRVUyBDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoX1RlbXBsYXRlM191bm9wdChDSkJpZzJfSW1hZ2UgKiBwSW1hZ2UsIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBGWF9CT09MIFNMVFAsIGJWYWw7DQotICAgIEZYX0RXT1JEIENPTlRFWFQ7DQotICAgIEZYX0RXT1JEIGxpbmUxLCBsaW5lMjsNCi0gICAgZm9yKDsgbV9sb29wSW5kZXggPCBHQkg7IG1fbG9vcEluZGV4KyspIHsNCi0gICAgICAgIGlmKFRQR0RPTikgew0KLSAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFsweDAxOTVdKTsNCi0gICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoTFRQID09IDEpIHsNCi0gICAgICAgICAgICBwSW1hZ2UtPmNvcHlMaW5lKG1fbG9vcEluZGV4LCBtX2xvb3BJbmRleCAtIDEpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBsaW5lMSA9IHBJbWFnZS0+Z2V0UGl4ZWwoMSwgbV9sb29wSW5kZXggLSAxKTsNCi0gICAgICAgICAgICBsaW5lMSB8PSBwSW1hZ2UtPmdldFBpeGVsKDAsIG1fbG9vcEluZGV4IC0gMSkgPDwgMTsNCi0gICAgICAgICAgICBsaW5lMiA9IDA7DQotICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR0JXOyB3KyspIHsNCi0gICAgICAgICAgICAgICAgaWYoVVNFU0tJUCAmJiBTS0lQLT5nZXRQaXhlbCh3LCBtX2xvb3BJbmRleCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIGJWYWwgPSAwOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IGxpbmUyOw0KLSAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBwSW1hZ2UtPmdldFBpeGVsKHcgKyBHQkFUWzBdLCBtX2xvb3BJbmRleCArIEdCQVRbMV0pIDw8IDQ7DQotICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUxIDw8IDU7DQotICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmKGJWYWwpIHsNCi0gICAgICAgICAgICAgICAgICAgIHBJbWFnZS0+c2V0UGl4ZWwodywgbV9sb29wSW5kZXgsIGJWYWwpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGxpbmUxID0gKChsaW5lMSA8PCAxKSB8IHBJbWFnZS0+Z2V0UGl4ZWwodyArIDIsIG1fbG9vcEluZGV4IC0gMSkpICYgMHgxZjsNCi0gICAgICAgICAgICAgICAgbGluZTIgPSAoKGxpbmUyIDw8IDEpIHwgYlZhbCkgJiAweDBmOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmKHBQYXVzZSAmJiBwUGF1c2UtPk5lZWRUb1BhdXNlTm93KCkpIHsNCi0gICAgICAgICAgICBtX2xvb3BJbmRleCsrOw0KLSAgICAgICAgICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFOw0KLSAgICAgICAgICAgIHJldHVybiBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOw0KLSAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIkpCaWcyX0dlbmVyYWxEZWNvZGVyLmgiCisjaW5jbHVkZSAiSkJpZzJfQXJpdGhEZWNvZGVyLmgiCisjaW5jbHVkZSAiSkJpZzJfQXJpdGhJbnREZWNvZGVyLmgiCisjaW5jbHVkZSAiSkJpZzJfSHVmZm1hbkRlY29kZXIuaCIKKyNpbmNsdWRlICJKQmlnMl9IdWZmbWFuVGFibGUuaCIKKyNpbmNsdWRlICJKQmlnMl9QYXR0ZXJuRGljdC5oIgorQ0pCaWcyX0ltYWdlICpDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCkKK3sKKyAgICBpZiAoR0JXID09IDAgfHwgR0JIID09IDApIHsKKyAgICAgICAgQ0pCaWcyX0ltYWdlKiBwSW1hZ2U7CisgICAgICAgIEpCSUcyX0FMTE9DKHBJbWFnZSwgQ0pCaWcyX0ltYWdlKEdCVywgR0JIKSk7CisgICAgICAgIHJldHVybiBwSW1hZ2U7CisgICAgfQorICAgIGlmKEdCVEVNUExBVEUgPT0gMCkgeworICAgICAgICBpZigoR0JBVFswXSA9PSAzKSAmJiAoR0JBVFsxXSA9PSAoc2lnbmVkIGNoYXIpIC0gMSkKKyAgICAgICAgICAgICAgICAmJiAoR0JBVFsyXSA9PSAoc2lnbmVkIGNoYXIpIC0gMykgJiYgKEdCQVRbM10gPT0gKHNpZ25lZCBjaGFyKSAtIDEpCisgICAgICAgICAgICAgICAgJiYgKEdCQVRbNF0gPT0gMikgJiYgKEdCQVRbNV0gPT0gKHNpZ25lZCBjaGFyKSAtIDIpCisgICAgICAgICAgICAgICAgJiYgKEdCQVRbNl0gPT0gKHNpZ25lZCBjaGFyKSAtIDIpICYmIChHQkFUWzddID09IChzaWduZWQgY2hhcikgLSAyKSkgeworICAgICAgICAgICAgcmV0dXJuIGRlY29kZV9Bcml0aF9UZW1wbGF0ZTBfb3B0MyhwQXJpdGhEZWNvZGVyLCBnYkNvbnRleHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGRlY29kZV9Bcml0aF9UZW1wbGF0ZTBfdW5vcHQocEFyaXRoRGVjb2RlciwgZ2JDb250ZXh0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZihHQlRFTVBMQVRFID09IDEpIHsKKyAgICAgICAgaWYoKEdCQVRbMF0gPT0gMykgJiYgKEdCQVRbMV0gPT0gKHNpZ25lZCBjaGFyKSAtIDEpKSB7CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlX0FyaXRoX1RlbXBsYXRlMV9vcHQzKHBBcml0aERlY29kZXIsIGdiQ29udGV4dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlX0FyaXRoX1RlbXBsYXRlMV91bm9wdChwQXJpdGhEZWNvZGVyLCBnYkNvbnRleHQpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmKEdCVEVNUExBVEUgPT0gMikgeworICAgICAgICBpZigoR0JBVFswXSA9PSAyKSAmJiAoR0JBVFsxXSA9PSAoc2lnbmVkIGNoYXIpIC0gMSkpIHsKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVfQXJpdGhfVGVtcGxhdGUyX29wdDMocEFyaXRoRGVjb2RlciwgZ2JDb250ZXh0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVfQXJpdGhfVGVtcGxhdGUyX3Vub3B0KHBBcml0aERlY29kZXIsIGdiQ29udGV4dCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZigoR0JBVFswXSA9PSAyKSAmJiAoR0JBVFsxXSA9PSAoc2lnbmVkIGNoYXIpIC0gMSkpIHsKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVfQXJpdGhfVGVtcGxhdGUzX29wdDMocEFyaXRoRGVjb2RlciwgZ2JDb250ZXh0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVfQXJpdGhfVGVtcGxhdGUzX3Vub3B0KHBBcml0aERlY29kZXIsIGdiQ29udGV4dCk7CisgICAgICAgIH0KKyAgICB9Cit9CitDSkJpZzJfSW1hZ2UgKkNKQmlnMl9HUkRQcm9jOjpkZWNvZGVfQXJpdGhfVGVtcGxhdGUwX29wdChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpCit7CisgICAgRlhfQk9PTCBMVFAsIFNMVFAsIGJWYWw7CisgICAgRlhfRFdPUkQgQ09OVEVYVDsKKyAgICBDSkJpZzJfSW1hZ2UgKkdCUkVHOworICAgIEZYX0RXT1JEIGxpbmUxLCBsaW5lMiwgbGluZTM7CisgICAgTFRQID0gMDsKKyAgICBKQklHMl9BTExPQyhHQlJFRywgQ0pCaWcyX0ltYWdlKEdCVywgR0JIKSk7CisgICAgR0JSRUctPmZpbGwoMCk7CisgICAgZm9yKEZYX0RXT1JEIGggPSAwOyBoIDwgR0JIOyBoKyspIHsKKyAgICAgICAgaWYoVFBHRE9OKSB7CisgICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbMHg5YjI1XSk7CisgICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOworICAgICAgICB9CisgICAgICAgIGlmKExUUCA9PSAxKSB7CisgICAgICAgICAgICBHQlJFRy0+Y29weUxpbmUoaCwgaCAtIDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGluZTEgPSBHQlJFRy0+Z2V0UGl4ZWwoMiwgaCAtIDIpOworICAgICAgICAgICAgbGluZTEgfD0gR0JSRUctPmdldFBpeGVsKDEsIGggLSAyKSA8PCAxOworICAgICAgICAgICAgbGluZTEgfD0gR0JSRUctPmdldFBpeGVsKDAsIGggLSAyKSA8PCAyOworICAgICAgICAgICAgbGluZTIgPSBHQlJFRy0+Z2V0UGl4ZWwoMywgaCAtIDEpOworICAgICAgICAgICAgbGluZTIgfD0gR0JSRUctPmdldFBpeGVsKDIsIGggLSAxKSA8PCAxOworICAgICAgICAgICAgbGluZTIgfD0gR0JSRUctPmdldFBpeGVsKDEsIGggLSAxKSA8PCAyOworICAgICAgICAgICAgbGluZTIgfD0gR0JSRUctPmdldFBpeGVsKDAsIGggLSAxKSA8PCAzOworICAgICAgICAgICAgbGluZTMgPSAwOworICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR0JXOyB3KyspIHsKKyAgICAgICAgICAgICAgICBpZihVU0VTS0lQICYmIFNLSVAtPmdldFBpeGVsKHcsIGgpKSB7CisgICAgICAgICAgICAgICAgICAgIGJWYWwgPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSBsaW5lMzsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMiA8PCA0OworICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUxIDw8IDExOworICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihiVmFsKSB7CisgICAgICAgICAgICAgICAgICAgIEdCUkVHLT5zZXRQaXhlbCh3LCBoLCBiVmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGluZTEgPSAoKGxpbmUxIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyAzLCBoIC0gMikpICYgMHgxZjsKKyAgICAgICAgICAgICAgICBsaW5lMiA9ICgobGluZTIgPDwgMSkgfCBHQlJFRy0+Z2V0UGl4ZWwodyArIDQsIGggLSAxKSkgJiAweDdmOworICAgICAgICAgICAgICAgIGxpbmUzID0gKChsaW5lMyA8PCAxKSB8IGJWYWwpICYgMHgwZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gR0JSRUc7Cit9CitDSkJpZzJfSW1hZ2UgKkNKQmlnMl9HUkRQcm9jOjpkZWNvZGVfQXJpdGhfVGVtcGxhdGUwX29wdDIoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KQoreworICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOworICAgIEZYX0RXT1JEIENPTlRFWFQ7CisgICAgQ0pCaWcyX0ltYWdlICpHQlJFRzsKKyAgICBGWF9EV09SRCBsaW5lMSwgbGluZTI7CisgICAgRlhfQllURSAqcExpbmUsIGNWYWw7CisgICAgRlhfSU5UUFRSIG5TdHJpZGUsIG5TdHJpZGUyOworICAgIEZYX0lOVDMyIG5CaXRzLCBrOworICAgIExUUCA9IDA7CisgICAgSkJJRzJfQUxMT0MoR0JSRUcsIENKQmlnMl9JbWFnZShHQlcsIEdCSCkpOworICAgIGlmIChHQlJFRy0+bV9wRGF0YSA9PSBOVUxMKSB7CisgICAgICAgIGRlbGV0ZSBHQlJFRzsKKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiR2VuZXJpYyByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlOiBDcmVhdGUgSW1hZ2UgRmFpbGVkIHdpdGggd2lkdGggPSAlZCwgaGVpZ2h0ID0gJWRcbiIsIEdCVywgR0JIKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBMaW5lID0gR0JSRUctPm1fcERhdGE7CisgICAgblN0cmlkZSA9IEdCUkVHLT5tX25TdHJpZGU7CisgICAgblN0cmlkZTIgPSBuU3RyaWRlIDw8IDE7CisgICAgZm9yKEZYX0RXT1JEIGggPSAwOyBoIDwgR0JIOyBoKyspIHsKKyAgICAgICAgaWYoVFBHRE9OKSB7CisgICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbMHg5YjI1XSk7CisgICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOworICAgICAgICB9CisgICAgICAgIGlmKExUUCA9PSAxKSB7CisgICAgICAgICAgICBHQlJFRy0+Y29weUxpbmUoaCwgaCAtIDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGluZTEgPSAoaCA+IDEpID8gcExpbmVbLW5TdHJpZGUyXSA8PCA2IDogMDsKKyAgICAgICAgICAgIGxpbmUyID0gKGggPiAwKSA/IHBMaW5lWy1uU3RyaWRlXSA6IDA7CisgICAgICAgICAgICBDT05URVhUID0gKGxpbmUxICYgMHhmODAwKSB8IChsaW5lMiAmIDB4MDdmMCk7CisgICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHQlc7IHcgKz0gOCkgeworICAgICAgICAgICAgICAgIGlmKHcgKyA4IDwgR0JXKSB7CisgICAgICAgICAgICAgICAgICAgIG5CaXRzID0gODsKKyAgICAgICAgICAgICAgICAgICAgaWYoaCA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxID0gKGxpbmUxIDw8IDgpIHwgKHBMaW5lWy1uU3RyaWRlMiArICh3ID4+IDMpICsgMV0gPDwgNik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYoaCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyID0gKGxpbmUyIDw8IDgpIHwgKHBMaW5lWy1uU3RyaWRlICsgKHcgPj4gMykgKyAxXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBuQml0cyA9IEdCVyAtIHc7CisgICAgICAgICAgICAgICAgICAgIGlmKGggPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSA8PD0gODsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZihoID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPDw9IDg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY1ZhbCA9IDA7CisgICAgICAgICAgICAgICAgZm9yKGsgPSAwOyBrIDwgbkJpdHM7IGsrKykgeworICAgICAgICAgICAgICAgICAgICBpZihVU0VTS0lQICYmIFNLSVAtPmdldFBpeGVsKHcsIGgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8ICg3IC0gayk7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDdiZjcpIDw8IDEpIHwgYlZhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUxID4+ICg3IC0gaykpICYgMHgwODAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUyID4+ICg3IC0gaykpICYgMHgwMDEwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcExpbmVbdyA+PiAzXSA9IGNWYWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcExpbmUgKz0gblN0cmlkZTsKKyAgICB9CisgICAgcmV0dXJuIEdCUkVHOworfQorQ0pCaWcyX0ltYWdlICpDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoX1RlbXBsYXRlMF9vcHQzKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCkKK3sKKyAgICBGWF9CT09MIExUUCwgU0xUUCwgYlZhbDsKKyAgICBGWF9EV09SRCBDT05URVhUOworICAgIENKQmlnMl9JbWFnZSAqR0JSRUc7CisgICAgRlhfRFdPUkQgbGluZTEsIGxpbmUyOworICAgIEZYX0JZVEUgKnBMaW5lLCAqcExpbmUxLCAqcExpbmUyLCBjVmFsOworICAgIEZYX0lOVDMyIG5TdHJpZGUsIG5TdHJpZGUyLCBrOworICAgIEZYX0lOVDMyIG5MaW5lQnl0ZXMsIG5CaXRzTGVmdCwgY2M7CisgICAgTFRQID0gMDsKKyAgICBKQklHMl9BTExPQyhHQlJFRywgQ0pCaWcyX0ltYWdlKEdCVywgR0JIKSk7CisgICAgaWYgKEdCUkVHLT5tX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgZGVsZXRlIEdCUkVHOworICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJHZW5lcmljIHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmU6IENyZWF0ZSBJbWFnZSBGYWlsZWQgd2l0aCB3aWR0aCA9ICVkLCBoZWlnaHQgPSAlZFxuIiwgR0JXLCBHQkgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcExpbmUgPSBHQlJFRy0+bV9wRGF0YTsKKyAgICBuU3RyaWRlID0gR0JSRUctPm1fblN0cmlkZTsKKyAgICBuU3RyaWRlMiA9IG5TdHJpZGUgPDwgMTsKKyAgICBuTGluZUJ5dGVzID0gKChHQlcgKyA3KSA+PiAzKSAtIDE7CisgICAgbkJpdHNMZWZ0ID0gR0JXIC0gKG5MaW5lQnl0ZXMgPDwgMyk7CisgICAgRlhfRFdPUkQgaGVpZ2h0ID0gR0JIICYgMHg3ZmZmZmZmZjsKKyAgICBmb3IoRlhfRFdPUkQgaCA9IDA7IGggPCBoZWlnaHQ7IGgrKykgeworICAgICAgICBpZihUUEdET04pIHsKKyAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFsweDliMjVdKTsKKyAgICAgICAgICAgIExUUCA9IExUUCBeIFNMVFA7CisgICAgICAgIH0KKyAgICAgICAgaWYoTFRQID09IDEpIHsKKyAgICAgICAgICAgIEdCUkVHLT5jb3B5TGluZShoLCBoIC0gMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZihoID4gMSkgeworICAgICAgICAgICAgICAgIHBMaW5lMSA9IHBMaW5lIC0gblN0cmlkZTI7CisgICAgICAgICAgICAgICAgcExpbmUyID0gcExpbmUgLSBuU3RyaWRlOworICAgICAgICAgICAgICAgIGxpbmUxID0gKCpwTGluZTErKykgPDwgNjsKKyAgICAgICAgICAgICAgICBsaW5lMiA9ICpwTGluZTIrKzsKKyAgICAgICAgICAgICAgICBDT05URVhUID0gKChsaW5lMSAmIDB4ZjgwMCkgfCAobGluZTIgJiAweDA3ZjApKTsKKyAgICAgICAgICAgICAgICBmb3IoY2MgPSAwOyBjYyA8IG5MaW5lQnl0ZXM7IGNjKyspIHsKKyAgICAgICAgICAgICAgICAgICAgbGluZTEgPSAobGluZTEgPDwgOCkgfCAoKCpwTGluZTErKykgPDwgNik7CisgICAgICAgICAgICAgICAgICAgIGxpbmUyID0gKGxpbmUyIDw8IDgpIHwgKCpwTGluZTIrKyk7CisgICAgICAgICAgICAgICAgICAgIGNWYWwgPSAwOworICAgICAgICAgICAgICAgICAgICBmb3IoayA9IDc7IGsgPj0gMDsgay0tKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOworICAgICAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8IGs7CisgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKCgoQ09OVEVYVCAmIDB4N2JmNykgPDwgMSkgfCBiVmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMSA+PiBrKSAmIDB4MDgwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUyID4+IGspICYgMHgwMDEwKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcExpbmVbY2NdID0gY1ZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGluZTEgPDw9IDg7CisgICAgICAgICAgICAgICAgbGluZTIgPDw9IDg7CisgICAgICAgICAgICAgICAgY1ZhbCA9IDA7CisgICAgICAgICAgICAgICAgZm9yKGsgPSAwOyBrIDwgbkJpdHNMZWZ0OyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8ICg3IC0gayk7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKChDT05URVhUICYgMHg3YmY3KSA8PCAxKSB8IGJWYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTEgPj4gKDcgLSBrKSkgJiAweDA4MDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUyID4+ICg3IC0gaykpICYgMHgwMDEwKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBMaW5lW25MaW5lQnl0ZXNdID0gY1ZhbDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcExpbmUyID0gcExpbmUgLSBuU3RyaWRlOworICAgICAgICAgICAgICAgIGxpbmUyID0gKGggJiAxKSA/ICgqcExpbmUyKyspIDogMDsKKyAgICAgICAgICAgICAgICBDT05URVhUID0gKGxpbmUyICYgMHgwN2YwKTsKKyAgICAgICAgICAgICAgICBmb3IoY2MgPSAwOyBjYyA8IG5MaW5lQnl0ZXM7IGNjKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoaCAmIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyID0gKGxpbmUyIDw8IDgpIHwgKCpwTGluZTIrKyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY1ZhbCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZvcihrID0gNzsgayA+PSAwOyBrLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgazsKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKChDT05URVhUICYgMHg3YmY3KSA8PCAxKSB8IGJWYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUyID4+IGspICYgMHgwMDEwKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcExpbmVbY2NdID0gY1ZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGluZTIgPDw9IDg7CisgICAgICAgICAgICAgICAgY1ZhbCA9IDA7CisgICAgICAgICAgICAgICAgZm9yKGsgPSAwOyBrIDwgbkJpdHNMZWZ0OyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8ICg3IC0gayk7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKChDT05URVhUICYgMHg3YmY3KSA8PCAxKSB8IGJWYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgoKGxpbmUyID4+ICg3IC0gaykpKSAmIDB4MDAxMCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwTGluZVtuTGluZUJ5dGVzXSA9IGNWYWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcExpbmUgKz0gblN0cmlkZTsKKyAgICB9CisgICAgcmV0dXJuIEdCUkVHOworfQorQ0pCaWcyX0ltYWdlICpDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoX1RlbXBsYXRlMF91bm9wdChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpCit7CisgICAgRlhfQk9PTCBMVFAsIFNMVFAsIGJWYWw7CisgICAgRlhfRFdPUkQgQ09OVEVYVDsKKyAgICBDSkJpZzJfSW1hZ2UgKkdCUkVHOworICAgIEZYX0RXT1JEIGxpbmUxLCBsaW5lMiwgbGluZTM7CisgICAgTFRQID0gMDsKKyAgICBKQklHMl9BTExPQyhHQlJFRywgQ0pCaWcyX0ltYWdlKEdCVywgR0JIKSk7CisgICAgR0JSRUctPmZpbGwoMCk7CisgICAgZm9yKEZYX0RXT1JEIGggPSAwOyBoIDwgR0JIOyBoKyspIHsKKyAgICAgICAgaWYoVFBHRE9OKSB7CisgICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbMHg5YjI1XSk7CisgICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOworICAgICAgICB9CisgICAgICAgIGlmKExUUCA9PSAxKSB7CisgICAgICAgICAgICBHQlJFRy0+Y29weUxpbmUoaCwgaCAtIDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGluZTEgPSBHQlJFRy0+Z2V0UGl4ZWwoMSwgaCAtIDIpOworICAgICAgICAgICAgbGluZTEgfD0gR0JSRUctPmdldFBpeGVsKDAsIGggLSAyKSA8PCAxOworICAgICAgICAgICAgbGluZTIgPSBHQlJFRy0+Z2V0UGl4ZWwoMiwgaCAtIDEpOworICAgICAgICAgICAgbGluZTIgfD0gR0JSRUctPmdldFBpeGVsKDEsIGggLSAxKSA8PCAxOworICAgICAgICAgICAgbGluZTIgfD0gR0JSRUctPmdldFBpeGVsKDAsIGggLSAxKSA8PCAyOworICAgICAgICAgICAgbGluZTMgPSAwOworICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR0JXOyB3KyspIHsKKyAgICAgICAgICAgICAgICBpZihVU0VTS0lQICYmIFNLSVAtPmdldFBpeGVsKHcsIGgpKSB7CisgICAgICAgICAgICAgICAgICAgIGJWYWwgPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSBsaW5lMzsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMF0sIGggKyBHQkFUWzFdKSA8PCA0OworICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUyIDw8IDU7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzJdLCBoICsgR0JBVFszXSkgPDwgMTA7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzRdLCBoICsgR0JBVFs1XSkgPDwgMTE7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTEgPDwgMTI7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzZdLCBoICsgR0JBVFs3XSkgPDwgMTU7CisgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmKGJWYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgR0JSRUctPnNldFBpeGVsKHcsIGgsIGJWYWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaW5lMSA9ICgobGluZTEgPDwgMSkgfCBHQlJFRy0+Z2V0UGl4ZWwodyArIDIsIGggLSAyKSkgJiAweDA3OworICAgICAgICAgICAgICAgIGxpbmUyID0gKChsaW5lMiA8PCAxKSB8IEdCUkVHLT5nZXRQaXhlbCh3ICsgMywgaCAtIDEpKSAmIDB4MWY7CisgICAgICAgICAgICAgICAgbGluZTMgPSAoKGxpbmUzIDw8IDEpIHwgYlZhbCkgJiAweDBmOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBHQlJFRzsKK30KK0NKQmlnMl9JbWFnZSAqQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aF9UZW1wbGF0ZTFfb3B0KENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCkKK3sKKyAgICBGWF9CT09MIExUUCwgU0xUUCwgYlZhbDsKKyAgICBGWF9EV09SRCBDT05URVhUOworICAgIENKQmlnMl9JbWFnZSAqR0JSRUc7CisgICAgRlhfRFdPUkQgbGluZTEsIGxpbmUyLCBsaW5lMzsKKyAgICBMVFAgPSAwOworICAgIEpCSUcyX0FMTE9DKEdCUkVHLCBDSkJpZzJfSW1hZ2UoR0JXLCBHQkgpKTsKKyAgICBHQlJFRy0+ZmlsbCgwKTsKKyAgICBmb3IoRlhfRFdPUkQgaCA9IDA7IGggPCBHQkg7IGgrKykgeworICAgICAgICBpZihUUEdET04pIHsKKyAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFsweDA3OTVdKTsKKyAgICAgICAgICAgIExUUCA9IExUUCBeIFNMVFA7CisgICAgICAgIH0KKyAgICAgICAgaWYoTFRQID09IDEpIHsKKyAgICAgICAgICAgIEdCUkVHLT5jb3B5TGluZShoLCBoIC0gMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaW5lMSA9IEdCUkVHLT5nZXRQaXhlbCgyLCBoIC0gMik7CisgICAgICAgICAgICBsaW5lMSB8PSBHQlJFRy0+Z2V0UGl4ZWwoMSwgaCAtIDIpIDw8IDE7CisgICAgICAgICAgICBsaW5lMSB8PSBHQlJFRy0+Z2V0UGl4ZWwoMCwgaCAtIDIpIDw8IDI7CisgICAgICAgICAgICBsaW5lMiA9IEdCUkVHLT5nZXRQaXhlbCgzLCBoIC0gMSk7CisgICAgICAgICAgICBsaW5lMiB8PSBHQlJFRy0+Z2V0UGl4ZWwoMiwgaCAtIDEpIDw8IDE7CisgICAgICAgICAgICBsaW5lMiB8PSBHQlJFRy0+Z2V0UGl4ZWwoMSwgaCAtIDEpIDw8IDI7CisgICAgICAgICAgICBsaW5lMiB8PSBHQlJFRy0+Z2V0UGl4ZWwoMCwgaCAtIDEpIDw8IDM7CisgICAgICAgICAgICBsaW5lMyA9IDA7CisgICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHQlc7IHcrKykgeworICAgICAgICAgICAgICAgIGlmKFVTRVNLSVAgJiYgU0tJUC0+Z2V0UGl4ZWwodywgaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYlZhbCA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IGxpbmUzOworICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUyIDw8IDM7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTEgPDwgOTsKKyAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoYlZhbCkgeworICAgICAgICAgICAgICAgICAgICBHQlJFRy0+c2V0UGl4ZWwodywgaCwgYlZhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmUxID0gKChsaW5lMSA8PCAxKSB8IEdCUkVHLT5nZXRQaXhlbCh3ICsgMywgaCAtIDIpKSAmIDB4MGY7CisgICAgICAgICAgICAgICAgbGluZTIgPSAoKGxpbmUyIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyA0LCBoIC0gMSkpICYgMHgzZjsKKyAgICAgICAgICAgICAgICBsaW5lMyA9ICgobGluZTMgPDwgMSkgfCBiVmFsKSAmIDB4MDc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEdCUkVHOworfQorQ0pCaWcyX0ltYWdlICpDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoX1RlbXBsYXRlMV9vcHQyKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCkKK3sKKyAgICBGWF9CT09MIExUUCwgU0xUUCwgYlZhbDsKKyAgICBGWF9EV09SRCBDT05URVhUOworICAgIENKQmlnMl9JbWFnZSAqR0JSRUc7CisgICAgRlhfRFdPUkQgbGluZTEsIGxpbmUyOworICAgIEZYX0JZVEUgKnBMaW5lLCBjVmFsOworICAgIEZYX0lOVFBUUiBuU3RyaWRlLCBuU3RyaWRlMjsKKyAgICBGWF9JTlQzMiBuQml0cywgazsKKyAgICBMVFAgPSAwOworICAgIEpCSUcyX0FMTE9DKEdCUkVHLCBDSkJpZzJfSW1hZ2UoR0JXLCBHQkgpKTsKKyAgICBpZiAoR0JSRUctPm1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICBkZWxldGUgR0JSRUc7CisgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoIkdlbmVyaWMgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZTogQ3JlYXRlIEltYWdlIEZhaWxlZCB3aXRoIHdpZHRoID0gJWQsIGhlaWdodCA9ICVkXG4iLCBHQlcsIEdCSCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwTGluZSA9IEdCUkVHLT5tX3BEYXRhOworICAgIG5TdHJpZGUgPSBHQlJFRy0+bV9uU3RyaWRlOworICAgIG5TdHJpZGUyID0gblN0cmlkZSA8PCAxOworICAgIGZvcihGWF9EV09SRCBoID0gMDsgaCA8IEdCSDsgaCsrKSB7CisgICAgICAgIGlmKFRQR0RPTikgeworICAgICAgICAgICAgU0xUUCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0WzB4MDc5NV0pOworICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsKKyAgICAgICAgfQorICAgICAgICBpZihMVFAgPT0gMSkgeworICAgICAgICAgICAgR0JSRUctPmNvcHlMaW5lKGgsIGggLSAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxpbmUxID0gKGggPiAxKSA/IHBMaW5lWy1uU3RyaWRlMl0gPDwgNCA6IDA7CisgICAgICAgICAgICBsaW5lMiA9IChoID4gMCkgPyBwTGluZVstblN0cmlkZV0gOiAwOworICAgICAgICAgICAgQ09OVEVYVCA9IChsaW5lMSAmIDB4MWUwMCkgfCAoKGxpbmUyID4+IDEpICYgMHgwMWY4KTsKKyAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdyArPSA4KSB7CisgICAgICAgICAgICAgICAgaWYodyArIDggPCBHQlcpIHsKKyAgICAgICAgICAgICAgICAgICAgbkJpdHMgPSA4OworICAgICAgICAgICAgICAgICAgICBpZihoID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgPSAobGluZTEgPDwgOCkgfCAocExpbmVbLW5TdHJpZGUyICsgKHcgPj4gMykgKyAxXSA8PCA0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZihoID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAobGluZTIgPDwgOCkgfCAocExpbmVbLW5TdHJpZGUgKyAodyA+PiAzKSArIDFdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG5CaXRzID0gR0JXIC0gdzsKKyAgICAgICAgICAgICAgICAgICAgaWYoaCA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxIDw8PSA4OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmKGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiA8PD0gODsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjVmFsID0gMDsKKyAgICAgICAgICAgICAgICBmb3IoayA9IDA7IGsgPCBuQml0czsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmKFVTRVNLSVAgJiYgU0tJUC0+Z2V0UGl4ZWwodywgaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSAwOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgKDcgLSBrKTsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoQ09OVEVYVCAmIDB4MGVmYikgPDwgMSkgfCBiVmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTEgPj4gKDcgLSBrKSkgJiAweDAyMDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTIgPj4gKDggLSBrKSkgJiAweDAwMDgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwTGluZVt3ID4+IDNdID0gY1ZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwTGluZSArPSBuU3RyaWRlOworICAgIH0KKyAgICByZXR1cm4gR0JSRUc7Cit9CitDSkJpZzJfSW1hZ2UgKkNKQmlnMl9HUkRQcm9jOjpkZWNvZGVfQXJpdGhfVGVtcGxhdGUxX29wdDMoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KQoreworICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOworICAgIEZYX0RXT1JEIENPTlRFWFQ7CisgICAgQ0pCaWcyX0ltYWdlICpHQlJFRzsKKyAgICBGWF9EV09SRCBsaW5lMSwgbGluZTI7CisgICAgRlhfQllURSAqcExpbmUsICpwTGluZTEsICpwTGluZTIsIGNWYWw7CisgICAgRlhfSU5UMzIgblN0cmlkZSwgblN0cmlkZTIsIGs7CisgICAgRlhfSU5UMzIgbkxpbmVCeXRlcywgbkJpdHNMZWZ0LCBjYzsKKyAgICBMVFAgPSAwOworICAgIEpCSUcyX0FMTE9DKEdCUkVHLCBDSkJpZzJfSW1hZ2UoR0JXLCBHQkgpKTsKKyAgICBpZiAoR0JSRUctPm1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICBkZWxldGUgR0JSRUc7CisgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoIkdlbmVyaWMgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZTogQ3JlYXRlIEltYWdlIEZhaWxlZCB3aXRoIHdpZHRoID0gJWQsIGhlaWdodCA9ICVkXG4iLCBHQlcsIEdCSCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwTGluZSA9IEdCUkVHLT5tX3BEYXRhOworICAgIG5TdHJpZGUgPSBHQlJFRy0+bV9uU3RyaWRlOworICAgIG5TdHJpZGUyID0gblN0cmlkZSA8PCAxOworICAgIG5MaW5lQnl0ZXMgPSAoKEdCVyArIDcpID4+IDMpIC0gMTsKKyAgICBuQml0c0xlZnQgPSBHQlcgLSAobkxpbmVCeXRlcyA8PCAzKTsKKyAgICBmb3IoRlhfRFdPUkQgaCA9IDA7IGggPCBHQkg7IGgrKykgeworICAgICAgICBpZihUUEdET04pIHsKKyAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFsweDA3OTVdKTsKKyAgICAgICAgICAgIExUUCA9IExUUCBeIFNMVFA7CisgICAgICAgIH0KKyAgICAgICAgaWYoTFRQID09IDEpIHsKKyAgICAgICAgICAgIEdCUkVHLT5jb3B5TGluZShoLCBoIC0gMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZihoID4gMSkgeworICAgICAgICAgICAgICAgIHBMaW5lMSA9IHBMaW5lIC0gblN0cmlkZTI7CisgICAgICAgICAgICAgICAgcExpbmUyID0gcExpbmUgLSBuU3RyaWRlOworICAgICAgICAgICAgICAgIGxpbmUxID0gKCpwTGluZTErKykgPDwgNDsKKyAgICAgICAgICAgICAgICBsaW5lMiA9ICpwTGluZTIrKzsKKyAgICAgICAgICAgICAgICBDT05URVhUID0gKGxpbmUxICYgMHgxZTAwKSB8ICgobGluZTIgPj4gMSkgJiAweDAxZjgpOworICAgICAgICAgICAgICAgIGZvcihjYyA9IDA7IGNjIDwgbkxpbmVCeXRlczsgY2MrKykgeworICAgICAgICAgICAgICAgICAgICBsaW5lMSA9IChsaW5lMSA8PCA4KSB8ICgoKnBMaW5lMSsrKSA8PCA0KTsKKyAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAobGluZTIgPDwgOCkgfCAoKnBMaW5lMisrKTsKKyAgICAgICAgICAgICAgICAgICAgY1ZhbCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZvcihrID0gNzsgayA+PSAwOyBrLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgazsKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDBlZmIpIDw8IDEpIHwgYlZhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMSA+PiBrKSAmIDB4MDIwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTIgPj4gKGsgKyAxKSkgJiAweDAwMDgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBMaW5lW2NjXSA9IGNWYWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmUxIDw8PSA4OworICAgICAgICAgICAgICAgIGxpbmUyIDw8PSA4OworICAgICAgICAgICAgICAgIGNWYWwgPSAwOworICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IG5CaXRzTGVmdDsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCAoNyAtIGspOworICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKChDT05URVhUICYgMHgwZWZiKSA8PCAxKSB8IGJWYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMSA+PiAoNyAtIGspKSAmIDB4MDIwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMiA+PiAoOCAtIGspKSAmIDB4MDAwOCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBMaW5lW25MaW5lQnl0ZXNdID0gY1ZhbDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcExpbmUyID0gcExpbmUgLSBuU3RyaWRlOworICAgICAgICAgICAgICAgIGxpbmUyID0gKGggJiAxKSA/ICgqcExpbmUyKyspIDogMDsKKyAgICAgICAgICAgICAgICBDT05URVhUID0gKGxpbmUyID4+IDEpICYgMHgwMWY4OworICAgICAgICAgICAgICAgIGZvcihjYyA9IDA7IGNjIDwgbkxpbmVCeXRlczsgY2MrKykgeworICAgICAgICAgICAgICAgICAgICBpZihoICYgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAobGluZTIgPDwgOCkgfCAoKnBMaW5lMisrKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjVmFsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGsgPSA3OyBrID49IDA7IGstLSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCBrOworICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoQ09OVEVYVCAmIDB4MGVmYikgPDwgMSkgfCBiVmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUyID4+IChrICsgMSkpICYgMHgwMDA4KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwTGluZVtjY10gPSBjVmFsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaW5lMiA8PD0gODsKKyAgICAgICAgICAgICAgICBjVmFsID0gMDsKKyAgICAgICAgICAgICAgICBmb3IoayA9IDA7IGsgPCBuQml0c0xlZnQ7IGsrKykgeworICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOworICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgKDcgLSBrKTsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoQ09OVEVYVCAmIDB4MGVmYikgPDwgMSkgfCBiVmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTIgPj4gKDggLSBrKSkgJiAweDAwMDgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwTGluZVtuTGluZUJ5dGVzXSA9IGNWYWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcExpbmUgKz0gblN0cmlkZTsKKyAgICB9CisgICAgcmV0dXJuIEdCUkVHOworfQorQ0pCaWcyX0ltYWdlICpDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoX1RlbXBsYXRlMV91bm9wdChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpCit7CisgICAgRlhfQk9PTCBMVFAsIFNMVFAsIGJWYWw7CisgICAgRlhfRFdPUkQgQ09OVEVYVDsKKyAgICBDSkJpZzJfSW1hZ2UgKkdCUkVHOworICAgIEZYX0RXT1JEIGxpbmUxLCBsaW5lMiwgbGluZTM7CisgICAgTFRQID0gMDsKKyAgICBKQklHMl9BTExPQyhHQlJFRywgQ0pCaWcyX0ltYWdlKEdCVywgR0JIKSk7CisgICAgR0JSRUctPmZpbGwoMCk7CisgICAgZm9yKEZYX0RXT1JEIGggPSAwOyBoIDwgR0JIOyBoKyspIHsKKyAgICAgICAgaWYoVFBHRE9OKSB7CisgICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbMHgwNzk1XSk7CisgICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOworICAgICAgICB9CisgICAgICAgIGlmKExUUCA9PSAxKSB7CisgICAgICAgICAgICBHQlJFRy0+Y29weUxpbmUoaCwgaCAtIDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGluZTEgPSBHQlJFRy0+Z2V0UGl4ZWwoMiwgaCAtIDIpOworICAgICAgICAgICAgbGluZTEgfD0gR0JSRUctPmdldFBpeGVsKDEsIGggLSAyKSA8PCAxOworICAgICAgICAgICAgbGluZTEgfD0gR0JSRUctPmdldFBpeGVsKDAsIGggLSAyKSA8PCAyOworICAgICAgICAgICAgbGluZTIgPSBHQlJFRy0+Z2V0UGl4ZWwoMiwgaCAtIDEpOworICAgICAgICAgICAgbGluZTIgfD0gR0JSRUctPmdldFBpeGVsKDEsIGggLSAxKSA8PCAxOworICAgICAgICAgICAgbGluZTIgfD0gR0JSRUctPmdldFBpeGVsKDAsIGggLSAxKSA8PCAyOworICAgICAgICAgICAgbGluZTMgPSAwOworICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR0JXOyB3KyspIHsKKyAgICAgICAgICAgICAgICBpZihVU0VTS0lQICYmIFNLSVAtPmdldFBpeGVsKHcsIGgpKSB7CisgICAgICAgICAgICAgICAgICAgIGJWYWwgPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSBsaW5lMzsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMF0sIGggKyBHQkFUWzFdKSA8PCAzOworICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUyIDw8IDQ7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTEgPDwgOTsKKyAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoYlZhbCkgeworICAgICAgICAgICAgICAgICAgICBHQlJFRy0+c2V0UGl4ZWwodywgaCwgYlZhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmUxID0gKChsaW5lMSA8PCAxKSB8IEdCUkVHLT5nZXRQaXhlbCh3ICsgMywgaCAtIDIpKSAmIDB4MGY7CisgICAgICAgICAgICAgICAgbGluZTIgPSAoKGxpbmUyIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyAzLCBoIC0gMSkpICYgMHgxZjsKKyAgICAgICAgICAgICAgICBsaW5lMyA9ICgobGluZTMgPDwgMSkgfCBiVmFsKSAmIDB4MDc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEdCUkVHOworfQorQ0pCaWcyX0ltYWdlICpDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoX1RlbXBsYXRlMl9vcHQoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KQoreworICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOworICAgIEZYX0RXT1JEIENPTlRFWFQ7CisgICAgQ0pCaWcyX0ltYWdlICpHQlJFRzsKKyAgICBGWF9EV09SRCBsaW5lMSwgbGluZTIsIGxpbmUzOworICAgIExUUCA9IDA7CisgICAgSkJJRzJfQUxMT0MoR0JSRUcsIENKQmlnMl9JbWFnZShHQlcsIEdCSCkpOworICAgIEdCUkVHLT5maWxsKDApOworICAgIGZvcihGWF9EV09SRCBoID0gMDsgaCA8IEdCSDsgaCsrKSB7CisgICAgICAgIGlmKFRQR0RPTikgeworICAgICAgICAgICAgU0xUUCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0WzB4MDBlNV0pOworICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsKKyAgICAgICAgfQorICAgICAgICBpZihMVFAgPT0gMSkgeworICAgICAgICAgICAgR0JSRUctPmNvcHlMaW5lKGgsIGggLSAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxpbmUxID0gR0JSRUctPmdldFBpeGVsKDEsIGggLSAyKTsKKyAgICAgICAgICAgIGxpbmUxIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBoIC0gMikgPDwgMTsKKyAgICAgICAgICAgIGxpbmUyID0gR0JSRUctPmdldFBpeGVsKDIsIGggLSAxKTsKKyAgICAgICAgICAgIGxpbmUyIHw9IEdCUkVHLT5nZXRQaXhlbCgxLCBoIC0gMSkgPDwgMTsKKyAgICAgICAgICAgIGxpbmUyIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBoIC0gMSkgPDwgMjsKKyAgICAgICAgICAgIGxpbmUzID0gMDsKKyAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdysrKSB7CisgICAgICAgICAgICAgICAgaWYoVVNFU0tJUCAmJiBTS0lQLT5nZXRQaXhlbCh3LCBoKSkgeworICAgICAgICAgICAgICAgICAgICBiVmFsID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gbGluZTM7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTIgPDwgMjsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMSA8PCA3OworICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihiVmFsKSB7CisgICAgICAgICAgICAgICAgICAgIEdCUkVHLT5zZXRQaXhlbCh3LCBoLCBiVmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGluZTEgPSAoKGxpbmUxIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyAyLCBoIC0gMikpICYgMHgwNzsKKyAgICAgICAgICAgICAgICBsaW5lMiA9ICgobGluZTIgPDwgMSkgfCBHQlJFRy0+Z2V0UGl4ZWwodyArIDMsIGggLSAxKSkgJiAweDFmOworICAgICAgICAgICAgICAgIGxpbmUzID0gKChsaW5lMyA8PCAxKSB8IGJWYWwpICYgMHgwMzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gR0JSRUc7Cit9CitDSkJpZzJfSW1hZ2UgKkNKQmlnMl9HUkRQcm9jOjpkZWNvZGVfQXJpdGhfVGVtcGxhdGUyX29wdDIoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KQoreworICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOworICAgIEZYX0RXT1JEIENPTlRFWFQ7CisgICAgQ0pCaWcyX0ltYWdlICpHQlJFRzsKKyAgICBGWF9EV09SRCBsaW5lMSwgbGluZTI7CisgICAgRlhfQllURSAqcExpbmUsIGNWYWw7CisgICAgRlhfSU5UUFRSIG5TdHJpZGUsIG5TdHJpZGUyOworICAgIEZYX0lOVDMyIG5CaXRzLCBrOworICAgIExUUCA9IDA7CisgICAgSkJJRzJfQUxMT0MoR0JSRUcsIENKQmlnMl9JbWFnZShHQlcsIEdCSCkpOworICAgIGlmIChHQlJFRy0+bV9wRGF0YSA9PSBOVUxMKSB7CisgICAgICAgIGRlbGV0ZSBHQlJFRzsKKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiR2VuZXJpYyByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlOiBDcmVhdGUgSW1hZ2UgRmFpbGVkIHdpdGggd2lkdGggPSAlZCwgaGVpZ2h0ID0gJWRcbiIsIEdCVywgR0JIKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBMaW5lID0gR0JSRUctPm1fcERhdGE7CisgICAgblN0cmlkZSA9IEdCUkVHLT5tX25TdHJpZGU7CisgICAgblN0cmlkZTIgPSBuU3RyaWRlIDw8IDE7CisgICAgZm9yKEZYX0RXT1JEIGggPSAwOyBoIDwgR0JIOyBoKyspIHsKKyAgICAgICAgaWYoVFBHRE9OKSB7CisgICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbMHgwMGU1XSk7CisgICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOworICAgICAgICB9CisgICAgICAgIGlmKExUUCA9PSAxKSB7CisgICAgICAgICAgICBHQlJFRy0+Y29weUxpbmUoaCwgaCAtIDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGluZTEgPSAoaCA+IDEpID8gcExpbmVbLW5TdHJpZGUyXSA8PCAxIDogMDsKKyAgICAgICAgICAgIGxpbmUyID0gKGggPiAwKSA/IHBMaW5lWy1uU3RyaWRlXSA6IDA7CisgICAgICAgICAgICBDT05URVhUID0gKGxpbmUxICYgMHgwMzgwKSB8ICgobGluZTIgPj4gMykgJiAweDAwN2MpOworICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR0JXOyB3ICs9IDgpIHsKKyAgICAgICAgICAgICAgICBpZih3ICsgOCA8IEdCVykgeworICAgICAgICAgICAgICAgICAgICBuQml0cyA9IDg7CisgICAgICAgICAgICAgICAgICAgIGlmKGggPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSA9IChsaW5lMSA8PCA4KSB8IChwTGluZVstblN0cmlkZTIgKyAodyA+PiAzKSArIDFdIDw8IDEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmKGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiA9IChsaW5lMiA8PCA4KSB8IChwTGluZVstblN0cmlkZSArICh3ID4+IDMpICsgMV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbkJpdHMgPSBHQlcgLSB3OworICAgICAgICAgICAgICAgICAgICBpZihoID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgPDw9IDg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYoaCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyIDw8PSA4OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNWYWwgPSAwOworICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IG5CaXRzOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoVVNFU0tJUCAmJiBTS0lQLT5nZXRQaXhlbCh3LCBoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCAoNyAtIGspOworICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKChDT05URVhUICYgMHgwMWJkKSA8PCAxKSB8IGJWYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMSA+PiAoNyAtIGspKSAmIDB4MDA4MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMiA+PiAoMTAgLSBrKSkgJiAweDAwMDQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwTGluZVt3ID4+IDNdID0gY1ZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwTGluZSArPSBuU3RyaWRlOworICAgIH0KKyAgICByZXR1cm4gR0JSRUc7Cit9CitDSkJpZzJfSW1hZ2UgKkNKQmlnMl9HUkRQcm9jOjpkZWNvZGVfQXJpdGhfVGVtcGxhdGUyX29wdDMoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KQoreworICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOworICAgIEZYX0RXT1JEIENPTlRFWFQ7CisgICAgQ0pCaWcyX0ltYWdlICpHQlJFRzsKKyAgICBGWF9EV09SRCBsaW5lMSwgbGluZTI7CisgICAgRlhfQllURSAqcExpbmUsICpwTGluZTEsICpwTGluZTIsIGNWYWw7CisgICAgRlhfSU5UMzIgblN0cmlkZSwgblN0cmlkZTIsIGs7CisgICAgRlhfSU5UMzIgbkxpbmVCeXRlcywgbkJpdHNMZWZ0LCBjYzsKKyAgICBMVFAgPSAwOworICAgIEpCSUcyX0FMTE9DKEdCUkVHLCBDSkJpZzJfSW1hZ2UoR0JXLCBHQkgpKTsKKyAgICBpZiAoR0JSRUctPm1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICBkZWxldGUgR0JSRUc7CisgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoIkdlbmVyaWMgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZTogQ3JlYXRlIEltYWdlIEZhaWxlZCB3aXRoIHdpZHRoID0gJWQsIGhlaWdodCA9ICVkXG4iLCBHQlcsIEdCSCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwTGluZSA9IEdCUkVHLT5tX3BEYXRhOworICAgIG5TdHJpZGUgPSBHQlJFRy0+bV9uU3RyaWRlOworICAgIG5TdHJpZGUyID0gblN0cmlkZSA8PCAxOworICAgIG5MaW5lQnl0ZXMgPSAoKEdCVyArIDcpID4+IDMpIC0gMTsKKyAgICBuQml0c0xlZnQgPSBHQlcgLSAobkxpbmVCeXRlcyA8PCAzKTsKKyAgICBmb3IoRlhfRFdPUkQgaCA9IDA7IGggPCBHQkg7IGgrKykgeworICAgICAgICBpZihUUEdET04pIHsKKyAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFsweDAwZTVdKTsKKyAgICAgICAgICAgIExUUCA9IExUUCBeIFNMVFA7CisgICAgICAgIH0KKyAgICAgICAgaWYoTFRQID09IDEpIHsKKyAgICAgICAgICAgIEdCUkVHLT5jb3B5TGluZShoLCBoIC0gMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZihoID4gMSkgeworICAgICAgICAgICAgICAgIHBMaW5lMSA9IHBMaW5lIC0gblN0cmlkZTI7CisgICAgICAgICAgICAgICAgcExpbmUyID0gcExpbmUgLSBuU3RyaWRlOworICAgICAgICAgICAgICAgIGxpbmUxID0gKCpwTGluZTErKykgPDwgMTsKKyAgICAgICAgICAgICAgICBsaW5lMiA9ICpwTGluZTIrKzsKKyAgICAgICAgICAgICAgICBDT05URVhUID0gKGxpbmUxICYgMHgwMzgwKSB8ICgobGluZTIgPj4gMykgJiAweDAwN2MpOworICAgICAgICAgICAgICAgIGZvcihjYyA9IDA7IGNjIDwgbkxpbmVCeXRlczsgY2MrKykgeworICAgICAgICAgICAgICAgICAgICBsaW5lMSA9IChsaW5lMSA8PCA4KSB8ICgoKnBMaW5lMSsrKSA8PCAxKTsKKyAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAobGluZTIgPDwgOCkgfCAoKnBMaW5lMisrKTsKKyAgICAgICAgICAgICAgICAgICAgY1ZhbCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZvcihrID0gNzsgayA+PSAwOyBrLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgazsKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDAxYmQpIDw8IDEpIHwgYlZhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMSA+PiBrKSAmIDB4MDA4MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTIgPj4gKGsgKyAzKSkgJiAweDAwMDQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBMaW5lW2NjXSA9IGNWYWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmUxIDw8PSA4OworICAgICAgICAgICAgICAgIGxpbmUyIDw8PSA4OworICAgICAgICAgICAgICAgIGNWYWwgPSAwOworICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IG5CaXRzTGVmdDsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCAoNyAtIGspOworICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKChDT05URVhUICYgMHgwMWJkKSA8PCAxKSB8IGJWYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMSA+PiAoNyAtIGspKSAmIDB4MDA4MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMiA+PiAoMTAgLSBrKSkgJiAweDAwMDQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwTGluZVtuTGluZUJ5dGVzXSA9IGNWYWw7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBMaW5lMiA9IHBMaW5lIC0gblN0cmlkZTsKKyAgICAgICAgICAgICAgICBsaW5lMiA9IChoICYgMSkgPyAoKnBMaW5lMisrKSA6IDA7CisgICAgICAgICAgICAgICAgQ09OVEVYVCA9IChsaW5lMiA+PiAzKSAmIDB4MDA3YzsKKyAgICAgICAgICAgICAgICBmb3IoY2MgPSAwOyBjYyA8IG5MaW5lQnl0ZXM7IGNjKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoaCAmIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyID0gKGxpbmUyIDw8IDgpIHwgKCpwTGluZTIrKyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY1ZhbCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZvcihrID0gNzsgayA+PSAwOyBrLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgazsKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDAxYmQpIDw8IDEpIHwgYlZhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMiA+PiAoayArIDMpKSAmIDB4MDAwNCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcExpbmVbY2NdID0gY1ZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGluZTIgPDw9IDg7CisgICAgICAgICAgICAgICAgY1ZhbCA9IDA7CisgICAgICAgICAgICAgICAgZm9yKGsgPSAwOyBrIDwgbkJpdHNMZWZ0OyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8ICg3IC0gayk7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDAxYmQpIDw8IDEpIHwgYlZhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKChsaW5lMiA+PiAoMTAgLSBrKSkpICYgMHgwMDA0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcExpbmVbbkxpbmVCeXRlc10gPSBjVmFsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBMaW5lICs9IG5TdHJpZGU7CisgICAgfQorICAgIHJldHVybiBHQlJFRzsKK30KK0NKQmlnMl9JbWFnZSAqQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aF9UZW1wbGF0ZTJfdW5vcHQoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KQoreworICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOworICAgIEZYX0RXT1JEIENPTlRFWFQ7CisgICAgQ0pCaWcyX0ltYWdlICpHQlJFRzsKKyAgICBGWF9EV09SRCBsaW5lMSwgbGluZTIsIGxpbmUzOworICAgIExUUCA9IDA7CisgICAgSkJJRzJfQUxMT0MoR0JSRUcsIENKQmlnMl9JbWFnZShHQlcsIEdCSCkpOworICAgIEdCUkVHLT5maWxsKDApOworICAgIGZvcihGWF9EV09SRCBoID0gMDsgaCA8IEdCSDsgaCsrKSB7CisgICAgICAgIGlmKFRQR0RPTikgeworICAgICAgICAgICAgU0xUUCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0WzB4MDBlNV0pOworICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsKKyAgICAgICAgfQorICAgICAgICBpZihMVFAgPT0gMSkgeworICAgICAgICAgICAgR0JSRUctPmNvcHlMaW5lKGgsIGggLSAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxpbmUxID0gR0JSRUctPmdldFBpeGVsKDEsIGggLSAyKTsKKyAgICAgICAgICAgIGxpbmUxIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBoIC0gMikgPDwgMTsKKyAgICAgICAgICAgIGxpbmUyID0gR0JSRUctPmdldFBpeGVsKDEsIGggLSAxKTsKKyAgICAgICAgICAgIGxpbmUyIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBoIC0gMSkgPDwgMTsKKyAgICAgICAgICAgIGxpbmUzID0gMDsKKyAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdysrKSB7CisgICAgICAgICAgICAgICAgaWYoVVNFU0tJUCAmJiBTS0lQLT5nZXRQaXhlbCh3LCBoKSkgeworICAgICAgICAgICAgICAgICAgICBiVmFsID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gbGluZTM7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzBdLCBoICsgR0JBVFsxXSkgPDwgMjsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMiA8PCAzOworICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUxIDw8IDc7CisgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmKGJWYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgR0JSRUctPnNldFBpeGVsKHcsIGgsIGJWYWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaW5lMSA9ICgobGluZTEgPDwgMSkgfCBHQlJFRy0+Z2V0UGl4ZWwodyArIDIsIGggLSAyKSkgJiAweDA3OworICAgICAgICAgICAgICAgIGxpbmUyID0gKChsaW5lMiA8PCAxKSB8IEdCUkVHLT5nZXRQaXhlbCh3ICsgMiwgaCAtIDEpKSAmIDB4MGY7CisgICAgICAgICAgICAgICAgbGluZTMgPSAoKGxpbmUzIDw8IDEpIHwgYlZhbCkgJiAweDAzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBHQlJFRzsKK30KK0NKQmlnMl9JbWFnZSAqQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aF9UZW1wbGF0ZTNfb3B0KENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCkKK3sKKyAgICBGWF9CT09MIExUUCwgU0xUUCwgYlZhbDsKKyAgICBGWF9EV09SRCBDT05URVhUOworICAgIENKQmlnMl9JbWFnZSAqR0JSRUc7CisgICAgRlhfRFdPUkQgbGluZTEsIGxpbmUyOworICAgIExUUCA9IDA7CisgICAgSkJJRzJfQUxMT0MoR0JSRUcsIENKQmlnMl9JbWFnZShHQlcsIEdCSCkpOworICAgIEdCUkVHLT5maWxsKDApOworICAgIGZvcihGWF9EV09SRCBoID0gMDsgaCA8IEdCSDsgaCsrKSB7CisgICAgICAgIGlmKFRQR0RPTikgeworICAgICAgICAgICAgU0xUUCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0WzB4MDE5NV0pOworICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsKKyAgICAgICAgfQorICAgICAgICBpZihMVFAgPT0gMSkgeworICAgICAgICAgICAgR0JSRUctPmNvcHlMaW5lKGgsIGggLSAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxpbmUxID0gR0JSRUctPmdldFBpeGVsKDIsIGggLSAxKTsKKyAgICAgICAgICAgIGxpbmUxIHw9IEdCUkVHLT5nZXRQaXhlbCgxLCBoIC0gMSkgPDwgMTsKKyAgICAgICAgICAgIGxpbmUxIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBoIC0gMSkgPDwgMjsKKyAgICAgICAgICAgIGxpbmUyID0gMDsKKyAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdysrKSB7CisgICAgICAgICAgICAgICAgaWYoVVNFU0tJUCAmJiBTS0lQLT5nZXRQaXhlbCh3LCBoKSkgeworICAgICAgICAgICAgICAgICAgICBiVmFsID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gbGluZTI7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTEgPDwgNDsKKyAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoYlZhbCkgeworICAgICAgICAgICAgICAgICAgICBHQlJFRy0+c2V0UGl4ZWwodywgaCwgYlZhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmUxID0gKChsaW5lMSA8PCAxKSB8IEdCUkVHLT5nZXRQaXhlbCh3ICsgMywgaCAtIDEpKSAmIDB4M2Y7CisgICAgICAgICAgICAgICAgbGluZTIgPSAoKGxpbmUyIDw8IDEpIHwgYlZhbCkgJiAweDBmOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBHQlJFRzsKK30KK0NKQmlnMl9JbWFnZSAqQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aF9UZW1wbGF0ZTNfb3B0MihDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpCit7CisgICAgRlhfQk9PTCBMVFAsIFNMVFAsIGJWYWw7CisgICAgRlhfRFdPUkQgQ09OVEVYVDsKKyAgICBDSkJpZzJfSW1hZ2UgKkdCUkVHOworICAgIEZYX0RXT1JEIGxpbmUxOworICAgIEZYX0JZVEUgKnBMaW5lLCBjVmFsOworICAgIEZYX0lOVFBUUiBuU3RyaWRlLCBuU3RyaWRlMjsKKyAgICBGWF9JTlQzMiBuQml0cywgazsKKyAgICBMVFAgPSAwOworICAgIEpCSUcyX0FMTE9DKEdCUkVHLCBDSkJpZzJfSW1hZ2UoR0JXLCBHQkgpKTsKKyAgICBpZiAoR0JSRUctPm1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICBkZWxldGUgR0JSRUc7CisgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoIkdlbmVyaWMgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZTogQ3JlYXRlIEltYWdlIEZhaWxlZCB3aXRoIHdpZHRoID0gJWQsIGhlaWdodCA9ICVkXG4iLCBHQlcsIEdCSCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwTGluZSA9IEdCUkVHLT5tX3BEYXRhOworICAgIG5TdHJpZGUgPSBHQlJFRy0+bV9uU3RyaWRlOworICAgIG5TdHJpZGUyID0gblN0cmlkZSA8PCAxOworICAgIGZvcihGWF9EV09SRCBoID0gMDsgaCA8IEdCSDsgaCsrKSB7CisgICAgICAgIGlmKFRQR0RPTikgeworICAgICAgICAgICAgU0xUUCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0WzB4MDE5NV0pOworICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsKKyAgICAgICAgfQorICAgICAgICBpZihMVFAgPT0gMSkgeworICAgICAgICAgICAgR0JSRUctPmNvcHlMaW5lKGgsIGggLSAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxpbmUxID0gKGggPiAwKSA/IHBMaW5lWy1uU3RyaWRlXSA6IDA7CisgICAgICAgICAgICBDT05URVhUID0gKGxpbmUxID4+IDEpICYgMHgwM2YwOworICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR0JXOyB3ICs9IDgpIHsKKyAgICAgICAgICAgICAgICBpZih3ICsgOCA8IEdCVykgeworICAgICAgICAgICAgICAgICAgICBuQml0cyA9IDg7CisgICAgICAgICAgICAgICAgICAgIGlmKGggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSA9IChsaW5lMSA8PCA4KSB8IChwTGluZVstblN0cmlkZSArICh3ID4+IDMpICsgMV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbkJpdHMgPSBHQlcgLSB3OworICAgICAgICAgICAgICAgICAgICBpZihoID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgPDw9IDg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY1ZhbCA9IDA7CisgICAgICAgICAgICAgICAgZm9yKGsgPSAwOyBrIDwgbkJpdHM7IGsrKykgeworICAgICAgICAgICAgICAgICAgICBpZihVU0VTS0lQICYmIFNLSVAtPmdldFBpeGVsKHcsIGgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8ICg3IC0gayk7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDAxZjcpIDw8IDEpIHwgYlZhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUxID4+ICg4IC0gaykpICYgMHgwMDEwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcExpbmVbdyA+PiAzXSA9IGNWYWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcExpbmUgKz0gblN0cmlkZTsKKyAgICB9CisgICAgcmV0dXJuIEdCUkVHOworfQorQ0pCaWcyX0ltYWdlICpDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoX1RlbXBsYXRlM19vcHQzKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCkKK3sKKyAgICBGWF9CT09MIExUUCwgU0xUUCwgYlZhbDsKKyAgICBGWF9EV09SRCBDT05URVhUOworICAgIENKQmlnMl9JbWFnZSAqR0JSRUc7CisgICAgRlhfRFdPUkQgbGluZTE7CisgICAgRlhfQllURSAqcExpbmUsICpwTGluZTEsIGNWYWw7CisgICAgRlhfSU5UMzIgblN0cmlkZSwgazsKKyAgICBGWF9JTlQzMiBuTGluZUJ5dGVzLCBuQml0c0xlZnQsIGNjOworICAgIExUUCA9IDA7CisgICAgSkJJRzJfQUxMT0MoR0JSRUcsIENKQmlnMl9JbWFnZShHQlcsIEdCSCkpOworICAgIGlmIChHQlJFRy0+bV9wRGF0YSA9PSBOVUxMKSB7CisgICAgICAgIGRlbGV0ZSBHQlJFRzsKKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiR2VuZXJpYyByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlOiBDcmVhdGUgSW1hZ2UgRmFpbGVkIHdpdGggd2lkdGggPSAlZCwgaGVpZ2h0ID0gJWRcbiIsIEdCVywgR0JIKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBMaW5lID0gR0JSRUctPm1fcERhdGE7CisgICAgblN0cmlkZSA9IEdCUkVHLT5tX25TdHJpZGU7CisgICAgbkxpbmVCeXRlcyA9ICgoR0JXICsgNykgPj4gMykgLSAxOworICAgIG5CaXRzTGVmdCA9IEdCVyAtIChuTGluZUJ5dGVzIDw8IDMpOworICAgIGZvcihGWF9EV09SRCBoID0gMDsgaCA8IEdCSDsgaCsrKSB7CisgICAgICAgIGlmKFRQR0RPTikgeworICAgICAgICAgICAgU0xUUCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0WzB4MDE5NV0pOworICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsKKyAgICAgICAgfQorICAgICAgICBpZihMVFAgPT0gMSkgeworICAgICAgICAgICAgR0JSRUctPmNvcHlMaW5lKGgsIGggLSAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmKGggPiAwKSB7CisgICAgICAgICAgICAgICAgcExpbmUxID0gcExpbmUgLSBuU3RyaWRlOworICAgICAgICAgICAgICAgIGxpbmUxID0gKnBMaW5lMSsrOworICAgICAgICAgICAgICAgIENPTlRFWFQgPSAobGluZTEgPj4gMSkgJiAweDAzZjA7CisgICAgICAgICAgICAgICAgZm9yKGNjID0gMDsgY2MgPCBuTGluZUJ5dGVzOyBjYysrKSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmUxID0gKGxpbmUxIDw8IDgpIHwgKCpwTGluZTErKyk7CisgICAgICAgICAgICAgICAgICAgIGNWYWwgPSAwOworICAgICAgICAgICAgICAgICAgICBmb3IoayA9IDc7IGsgPj0gMDsgay0tKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOworICAgICAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8IGs7CisgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKChDT05URVhUICYgMHgwMWY3KSA8PCAxKSB8IGJWYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTEgPj4gKGsgKyAxKSkgJiAweDAwMTApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBMaW5lW2NjXSA9IGNWYWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmUxIDw8PSA4OworICAgICAgICAgICAgICAgIGNWYWwgPSAwOworICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IG5CaXRzTGVmdDsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCAoNyAtIGspOworICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKChDT05URVhUICYgMHgwMWY3KSA8PCAxKSB8IGJWYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMSA+PiAoOCAtIGspKSAmIDB4MDAxMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBMaW5lW25MaW5lQnl0ZXNdID0gY1ZhbDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQ09OVEVYVCA9IDA7CisgICAgICAgICAgICAgICAgZm9yKGNjID0gMDsgY2MgPCBuTGluZUJ5dGVzOyBjYysrKSB7CisgICAgICAgICAgICAgICAgICAgIGNWYWwgPSAwOworICAgICAgICAgICAgICAgICAgICBmb3IoayA9IDc7IGsgPj0gMDsgay0tKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOworICAgICAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8IGs7CisgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKChDT05URVhUICYgMHgwMWY3KSA8PCAxKSB8IGJWYWw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcExpbmVbY2NdID0gY1ZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY1ZhbCA9IDA7CisgICAgICAgICAgICAgICAgZm9yKGsgPSAwOyBrIDwgbkJpdHNMZWZ0OyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8ICg3IC0gayk7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDAxZjcpIDw8IDEpIHwgYlZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcExpbmVbbkxpbmVCeXRlc10gPSBjVmFsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBMaW5lICs9IG5TdHJpZGU7CisgICAgfQorICAgIHJldHVybiBHQlJFRzsKK30KK0NKQmlnMl9JbWFnZSAqQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aF9UZW1wbGF0ZTNfdW5vcHQoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KQoreworICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOworICAgIEZYX0RXT1JEIENPTlRFWFQ7CisgICAgQ0pCaWcyX0ltYWdlICpHQlJFRzsKKyAgICBGWF9EV09SRCBsaW5lMSwgbGluZTI7CisgICAgTFRQID0gMDsKKyAgICBKQklHMl9BTExPQyhHQlJFRywgQ0pCaWcyX0ltYWdlKEdCVywgR0JIKSk7CisgICAgR0JSRUctPmZpbGwoMCk7CisgICAgZm9yKEZYX0RXT1JEIGggPSAwOyBoIDwgR0JIOyBoKyspIHsKKyAgICAgICAgaWYoVFBHRE9OKSB7CisgICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbMHgwMTk1XSk7CisgICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOworICAgICAgICB9CisgICAgICAgIGlmKExUUCA9PSAxKSB7CisgICAgICAgICAgICBHQlJFRy0+Y29weUxpbmUoaCwgaCAtIDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGluZTEgPSBHQlJFRy0+Z2V0UGl4ZWwoMSwgaCAtIDEpOworICAgICAgICAgICAgbGluZTEgfD0gR0JSRUctPmdldFBpeGVsKDAsIGggLSAxKSA8PCAxOworICAgICAgICAgICAgbGluZTIgPSAwOworICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR0JXOyB3KyspIHsKKyAgICAgICAgICAgICAgICBpZihVU0VTS0lQICYmIFNLSVAtPmdldFBpeGVsKHcsIGgpKSB7CisgICAgICAgICAgICAgICAgICAgIGJWYWwgPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSBsaW5lMjsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMF0sIGggKyBHQkFUWzFdKSA8PCA0OworICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUxIDw8IDU7CisgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmKGJWYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgR0JSRUctPnNldFBpeGVsKHcsIGgsIGJWYWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaW5lMSA9ICgobGluZTEgPDwgMSkgfCBHQlJFRy0+Z2V0UGl4ZWwodyArIDIsIGggLSAxKSkgJiAweDFmOworICAgICAgICAgICAgICAgIGxpbmUyID0gKChsaW5lMiA8PCAxKSB8IGJWYWwpICYgMHgwZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gR0JSRUc7Cit9CitDSkJpZzJfSW1hZ2UgKkNKQmlnMl9HUkRQcm9jOjpkZWNvZGVfQXJpdGhfVjIoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KQoreworICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOworICAgIEZYX0RXT1JEIENPTlRFWFQ7CisgICAgQ0pCaWcyX0ltYWdlICpHQlJFRzsKKyAgICBGWF9EV09SRCBsaW5lMSwgbGluZTIsIGxpbmUzOworICAgIExUUCA9IDA7CisgICAgSkJJRzJfQUxMT0MoR0JSRUcsIENKQmlnMl9JbWFnZShHQlcsIEdCSCkpOworICAgIEdCUkVHLT5maWxsKDApOworICAgIGZvcihGWF9EV09SRCBoID0gMDsgaCA8IEdCSDsgaCsrKSB7CisgICAgICAgIGlmKFRQR0RPTikgeworICAgICAgICAgICAgc3dpdGNoKEdCVEVNUExBVEUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAweDliMjU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IDB4MDc5NTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gMHgwMGU1OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAweDAxOTU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU0xUUCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgIExUUCA9IExUUCBeIFNMVFA7CisgICAgICAgIH0KKyAgICAgICAgaWYoTFRQID09IDEpIHsKKyAgICAgICAgICAgIEdCUkVHLT5jb3B5TGluZShoLCBoIC0gMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzd2l0Y2goR0JURU1QTEFURSkgeworICAgICAgICAgICAgICAgIGNhc2UgMDogeworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgPSBHQlJFRy0+Z2V0UGl4ZWwoMSwgaCAtIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgfD0gR0JSRUctPmdldFBpeGVsKDAsIGggLSAyKSA8PCAxOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPSBHQlJFRy0+Z2V0UGl4ZWwoMiwgaCAtIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgfD0gR0JSRUctPmdldFBpeGVsKDEsIGggLSAxKSA8PCAxOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgfD0gR0JSRUctPmdldFBpeGVsKDAsIGggLSAxKSA8PCAyOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTMgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR0JXOyB3KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihVU0VTS0lQICYmIFNLSVAtPmdldFBpeGVsKHcsIGgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSBsaW5lMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMF0sIGggKyBHQkFUWzFdKSA8PCA0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUyIDw8IDU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzJdLCBoICsgR0JBVFszXSkgPDwgMTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzRdLCBoICsgR0JBVFs1XSkgPDwgMTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTEgPDwgMTI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzZdLCBoICsgR0JBVFs3XSkgPDwgMTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGJWYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0JSRUctPnNldFBpeGVsKHcsIGgsIGJWYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSA9ICgobGluZTEgPDwgMSkgfCBHQlJFRy0+Z2V0UGl4ZWwodyArIDIsIGggLSAyKSkgJiAweDA3OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyID0gKChsaW5lMiA8PCAxKSB8IEdCUkVHLT5nZXRQaXhlbCh3ICsgMywgaCAtIDEpKSAmIDB4MWY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTMgPSAoKGxpbmUzIDw8IDEpIHwgYlZhbCkgJiAweDBmOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTogeworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgPSBHQlJFRy0+Z2V0UGl4ZWwoMiwgaCAtIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgfD0gR0JSRUctPmdldFBpeGVsKDEsIGggLSAyKSA8PCAxOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgfD0gR0JSRUctPmdldFBpeGVsKDAsIGggLSAyKSA8PCAyOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPSBHQlJFRy0+Z2V0UGl4ZWwoMiwgaCAtIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgfD0gR0JSRUctPmdldFBpeGVsKDEsIGggLSAxKSA8PCAxOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgfD0gR0JSRUctPmdldFBpeGVsKDAsIGggLSAxKSA8PCAyOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTMgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR0JXOyB3KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihVU0VTS0lQICYmIFNLSVAtPmdldFBpeGVsKHcsIGgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSBsaW5lMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMF0sIGggKyBHQkFUWzFdKSA8PCAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUyIDw8IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTEgPDwgOTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYlZhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQlJFRy0+c2V0UGl4ZWwodywgaCwgYlZhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxID0gKChsaW5lMSA8PCAxKSB8IEdCUkVHLT5nZXRQaXhlbCh3ICsgMywgaCAtIDIpKSAmIDB4MGY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAoKGxpbmUyIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyAzLCBoIC0gMSkpICYgMHgxZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMyA9ICgobGluZTMgPDwgMSkgfCBiVmFsKSAmIDB4MDc7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSA9IEdCUkVHLT5nZXRQaXhlbCgxLCBoIC0gMik7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSB8PSBHQlJFRy0+Z2V0UGl4ZWwoMCwgaCAtIDIpIDw8IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiA9IEdCUkVHLT5nZXRQaXhlbCgxLCBoIC0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiB8PSBHQlJFRy0+Z2V0UGl4ZWwoMCwgaCAtIDEpIDw8IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHQlc7IHcrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKFVTRVNLSVAgJiYgU0tJUC0+Z2V0UGl4ZWwodywgaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IGxpbmUzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFswXSwgaCArIEdCQVRbMV0pIDw8IDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTIgPDwgMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMSA8PCA3OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihiVmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdCUkVHLT5zZXRQaXhlbCh3LCBoLCBiVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgPSAoKGxpbmUxIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyAyLCBoIC0gMikpICYgMHgwNzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiA9ICgobGluZTIgPDwgMSkgfCBHQlJFRy0+Z2V0UGl4ZWwodyArIDIsIGggLSAxKSkgJiAweDBmOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUzID0gKChsaW5lMyA8PCAxKSB8IGJWYWwpICYgMHgwMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxID0gR0JSRUctPmdldFBpeGVsKDEsIGggLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBoIC0gMSkgPDwgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoVVNFU0tJUCAmJiBTS0lQLT5nZXRQaXhlbCh3LCBoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gbGluZTI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzBdLCBoICsgR0JBVFsxXSkgPDwgNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMSA8PCA1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihiVmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdCUkVHLT5zZXRQaXhlbCh3LCBoLCBiVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgPSAoKGxpbmUxIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyAyLCBoIC0gMSkpICYgMHgxZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiA9ICgobGluZTIgPDwgMSkgfCBiVmFsKSAmIDB4MGY7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEdCUkVHOworfQorQ0pCaWcyX0ltYWdlICpDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoX1YxKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCkKK3sKKyAgICBGWF9CT09MIExUUCwgU0xUUCwgYlZhbDsKKyAgICBGWF9EV09SRCBDT05URVhUID0gMDsKKyAgICBDSkJpZzJfSW1hZ2UgKkdCUkVHOworICAgIExUUCA9IDA7CisgICAgSkJJRzJfQUxMT0MoR0JSRUcsIENKQmlnMl9JbWFnZShHQlcsIEdCSCkpOworICAgIEdCUkVHLT5maWxsKDApOworICAgIGZvcihGWF9EV09SRCBoID0gMDsgaCA8IEdCSDsgaCsrKSB7CisgICAgICAgIGlmKFRQR0RPTikgeworICAgICAgICAgICAgc3dpdGNoKEdCVEVNUExBVEUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAweDliMjU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IDB4MDc5NTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gMHgwMGU1OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAweDAxOTU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU0xUUCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgIExUUCA9IExUUCBeIFNMVFA7CisgICAgICAgIH0KKyAgICAgICAgaWYoTFRQID09IDEpIHsKKyAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdysrKSB7CisgICAgICAgICAgICAgICAgR0JSRUctPnNldFBpeGVsKHcsIGgsIEdCUkVHLT5nZXRQaXhlbCh3LCBoIC0gMSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR0JXOyB3KyspIHsKKyAgICAgICAgICAgICAgICBpZihVU0VTS0lQICYmIFNLSVAtPmdldFBpeGVsKHcsIGgpKSB7CisgICAgICAgICAgICAgICAgICAgIEdCUkVHLT5zZXRQaXhlbCh3LCBoLCAwKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gMDsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKEdCVEVNUExBVEUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMSwgaCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDIsIGgpIDw8IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDMsIGgpIDw8IDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDQsIGgpIDw8IDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMF0sIGggKyBHQkFUWzFdKSA8PCA0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyAyLCBoIC0gMSkgPDwgNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgMSwgaCAtIDEpIDw8IDY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodywgaCAtIDEpIDw8IDc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDEsIGggLSAxKSA8PCA4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAyLCBoIC0gMSkgPDwgOTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFsyXSwgaCArIEdCQVRbM10pIDw8IDEwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzRdLCBoICsgR0JBVFs1XSkgPDwgMTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIDEsIGggLSAyKSA8PCAxMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3LCBoIC0gMikgPDwgMTM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDEsIGggLSAyKSA8PCAxNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFs2XSwgaCArIEdCQVRbN10pIDw8IDE1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAxLCBoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMiwgaCkgPDwgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMywgaCkgPDwgMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFswXSwgaCArIEdCQVRbMV0pIDw8IDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIDIsIGggLSAxKSA8PCA0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyAxLCBoIC0gMSkgPDwgNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3LCBoIC0gMSkgPDwgNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMSwgaCAtIDEpIDw8IDc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDIsIGggLSAxKSA8PCA4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyAyLCBoIC0gMikgPDwgOTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgMSwgaCAtIDIpIDw8IDEwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcsIGggLSAyKSA8PCAxMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMSwgaCAtIDIpIDw8IDEyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAxLCBoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMiwgaCkgPDwgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFswXSwgaCArIEdCQVRbMV0pIDw8IDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIDEsIGggLSAxKSA8PCAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcsIGggLSAxKSA8PCA0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAxLCBoIC0gMSkgPDwgNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMiwgaCAtIDEpIDw8IDY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIDEsIGggLSAyKSA8PCA3OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcsIGggLSAyKSA8PCA4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAxLCBoIC0gMikgPDwgOTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMSwgaCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDIsIGgpIDw8IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDMsIGgpIDw8IDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDQsIGgpIDw8IDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMF0sIGggKyBHQkFUWzFdKSA8PCA0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyAxLCBoIC0gMSkgPDwgNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3LCBoIC0gMSkgPDwgNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMSwgaCAtIDEpIDw8IDc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDIsIGggLSAxKSA8PCA4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAzLCBoIC0gMSkgPDwgOTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOworICAgICAgICAgICAgICAgICAgICBHQlJFRy0+c2V0UGl4ZWwodywgaCwgYlZhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBHQlJFRzsKK30KK0NKQmlnMl9JbWFnZSAqQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9NTVIoQ0pCaWcyX0JpdFN0cmVhbSAqcFN0cmVhbSkKK3sKKyAgICBpbnQgYml0cG9zLCBpOworICAgIENKQmlnMl9JbWFnZSAqcEltYWdlOworICAgIEpCSUcyX0FMTE9DKHBJbWFnZSwgQ0pCaWcyX0ltYWdlKEdCVywgR0JIKSk7CisgICAgaWYgKHBJbWFnZS0+bV9wRGF0YSA9PSBOVUxMKSB7CisgICAgICAgIGRlbGV0ZSBwSW1hZ2U7CisgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoIkdlbmVyaWMgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZTogQ3JlYXRlIEltYWdlIEZhaWxlZCB3aXRoIHdpZHRoID0gJWQsIGhlaWdodCA9ICVkXG4iLCBHQlcsIEdCSCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBiaXRwb3MgPSAoaW50KXBTdHJlYW0tPmdldEJpdFBvcygpOworICAgIF9GYXhHNERlY29kZShtX3BNb2R1bGUsIHBTdHJlYW0tPmdldEJ1ZigpLCBwU3RyZWFtLT5nZXRMZW5ndGgoKSwgJmJpdHBvcywgcEltYWdlLT5tX3BEYXRhLCBHQlcsIEdCSCwgcEltYWdlLT5tX25TdHJpZGUpOworICAgIHBTdHJlYW0tPnNldEJpdFBvcyhiaXRwb3MpOworICAgIGZvcihpID0gMDsgKEZYX0RXT1JEKWkgPCBwSW1hZ2UtPm1fblN0cmlkZSAqIEdCSDsgaSsrKSB7CisgICAgICAgIHBJbWFnZS0+bV9wRGF0YVtpXSA9IH5wSW1hZ2UtPm1fcERhdGFbaV07CisgICAgfQorICAgIHJldHVybiBwSW1hZ2U7Cit9CitDSkJpZzJfSW1hZ2UgKkNKQmlnMl9HUlJEUHJvYzo6ZGVjb2RlKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdyQ29udGV4dCkKK3sKKyAgICBpZiAoR1JXID09IDAgfHwgR1JIID09IDApIHsKKyAgICAgICAgQ0pCaWcyX0ltYWdlKiBwSW1hZ2U7CisgICAgICAgIEpCSUcyX0FMTE9DKHBJbWFnZSwgQ0pCaWcyX0ltYWdlKEdSVywgR1JIKSk7CisgICAgICAgIHJldHVybiBwSW1hZ2U7CisgICAgfQorICAgIGlmKEdSVEVNUExBVEUgPT0gMCkgeworICAgICAgICBpZigoR1JBVFswXSA9PSAoc2lnbmVkIGNoYXIpIC0gMSkgJiYgKEdSQVRbMV0gPT0gKHNpZ25lZCBjaGFyKSAtIDEpCisgICAgICAgICAgICAgICAgJiYgKEdSQVRbMl0gPT0gKHNpZ25lZCBjaGFyKSAtIDEpICYmIChHUkFUWzNdID09IChzaWduZWQgY2hhcikgLSAxKQorICAgICAgICAgICAgICAgICYmIChHUlJFRkVSRU5DRURYID09IDApICYmIChHUlcgPT0gKEZYX0RXT1JEKUdSUkVGRVJFTkNFLT5tX25XaWR0aCkpIHsKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVfVGVtcGxhdGUwX29wdChwQXJpdGhEZWNvZGVyLCBnckNvbnRleHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGRlY29kZV9UZW1wbGF0ZTBfdW5vcHQocEFyaXRoRGVjb2RlciwgZ3JDb250ZXh0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmKChHUlJFRkVSRU5DRURYID09IDApICYmIChHUlcgPT0gKEZYX0RXT1JEKUdSUkVGRVJFTkNFLT5tX25XaWR0aCkpIHsKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVfVGVtcGxhdGUxX29wdChwQXJpdGhEZWNvZGVyLCBnckNvbnRleHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGRlY29kZV9UZW1wbGF0ZTFfdW5vcHQocEFyaXRoRGVjb2RlciwgZ3JDb250ZXh0KTsKKyAgICAgICAgfQorICAgIH0KK30KK0NKQmlnMl9JbWFnZSAqQ0pCaWcyX0dSUkRQcm9jOjpkZWNvZGVfVGVtcGxhdGUwX3Vub3B0KENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdyQ29udGV4dCkKK3sKKyAgICBGWF9CT09MIExUUCwgU0xUUCwgYlZhbDsKKyAgICBGWF9EV09SRCBDT05URVhUOworICAgIENKQmlnMl9JbWFnZSAqR1JSRUc7CisgICAgRlhfRFdPUkQgbGluZTEsIGxpbmUyLCBsaW5lMywgbGluZTQsIGxpbmU1OworICAgIExUUCA9IDA7CisgICAgSkJJRzJfQUxMT0MoR1JSRUcsIENKQmlnMl9JbWFnZShHUlcsIEdSSCkpOworICAgIEdSUkVHLT5maWxsKDApOworICAgIGZvcihGWF9EV09SRCBoID0gMDsgaCA8IEdSSDsgaCsrKSB7CisgICAgICAgIGlmKFRQR1JPTikgeworICAgICAgICAgICAgU0xUUCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ3JDb250ZXh0WzB4MDAxMF0pOworICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsKKyAgICAgICAgfQorICAgICAgICBpZihMVFAgPT0gMCkgeworICAgICAgICAgICAgbGluZTEgPSBHUlJFRy0+Z2V0UGl4ZWwoMSwgaCAtIDEpOworICAgICAgICAgICAgbGluZTEgfD0gR1JSRUctPmdldFBpeGVsKDAsIGggLSAxKSA8PCAxOworICAgICAgICAgICAgbGluZTIgPSAwOworICAgICAgICAgICAgbGluZTMgPSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwoLUdSUkVGRVJFTkNFRFggKyAxLCBoIC0gR1JSRUZFUkVOQ0VEWSAtIDEpOworICAgICAgICAgICAgbGluZTMgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKC1HUlJFRkVSRU5DRURYLCBoIC0gR1JSRUZFUkVOQ0VEWSAtIDEpIDw8IDE7CisgICAgICAgICAgICBsaW5lNCA9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCArIDEsIGggLSBHUlJFRkVSRU5DRURZKTsKKyAgICAgICAgICAgIGxpbmU0IHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkpIDw8IDE7CisgICAgICAgICAgICBsaW5lNCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwoLUdSUkVGRVJFTkNFRFggLSAxLCBoIC0gR1JSRUZFUkVOQ0VEWSkgPDwgMjsKKyAgICAgICAgICAgIGxpbmU1ID0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKC1HUlJFRkVSRU5DRURYICsgMSwgaCAtIEdSUkVGRVJFTkNFRFkgKyAxKTsKKyAgICAgICAgICAgIGxpbmU1IHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkgKyAxKSA8PCAxOworICAgICAgICAgICAgbGluZTUgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKC1HUlJFRkVSRU5DRURYIC0gMSwgaCAtIEdSUkVGRVJFTkNFRFkgKyAxKSA8PCAyOworICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR1JXOyB3KyspIHsKKyAgICAgICAgICAgICAgICBDT05URVhUID0gbGluZTU7CisgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lNCA8PCAzOworICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTMgPDwgNjsKKyAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCArIEdSQVRbMl0sIGggLSBHUlJFRkVSRU5DRURZICsgR1JBVFszXSkgPDwgODsKKyAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUyIDw8IDk7CisgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMSA8PCAxMDsKKyAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVHLT5nZXRQaXhlbCh3ICsgR1JBVFswXSwgaCArIEdSQVRbMV0pIDw8IDEyOworICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdyQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgR1JSRUctPnNldFBpeGVsKHcsIGgsIGJWYWwpOworICAgICAgICAgICAgICAgIGxpbmUxID0gKChsaW5lMSA8PCAxKSB8IEdSUkVHLT5nZXRQaXhlbCh3ICsgMiwgaCAtIDEpKSAmIDB4MDM7CisgICAgICAgICAgICAgICAgbGluZTIgPSAoKGxpbmUyIDw8IDEpIHwgYlZhbCkgJiAweDAxOworICAgICAgICAgICAgICAgIGxpbmUzID0gKChsaW5lMyA8PCAxKSB8IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCArIDIsIGggLSBHUlJFRkVSRU5DRURZIC0gMSkpICYgMHgwMzsKKyAgICAgICAgICAgICAgICBsaW5lNCA9ICgobGluZTQgPDwgMSkgfCBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggKyAyLCBoIC0gR1JSRUZFUkVOQ0VEWSkpICYgMHgwNzsKKyAgICAgICAgICAgICAgICBsaW5lNSA9ICgobGluZTUgPDwgMSkgfCBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggKyAyLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpKSAmIDB4MDc7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaW5lMSA9IEdSUkVHLT5nZXRQaXhlbCgxLCBoIC0gMSk7CisgICAgICAgICAgICBsaW5lMSB8PSBHUlJFRy0+Z2V0UGl4ZWwoMCwgaCAtIDEpIDw8IDE7CisgICAgICAgICAgICBsaW5lMiA9IDA7CisgICAgICAgICAgICBsaW5lMyA9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCArIDEsIGggLSBHUlJFRkVSRU5DRURZIC0gMSk7CisgICAgICAgICAgICBsaW5lMyB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwoLUdSUkVGRVJFTkNFRFgsIGggLSBHUlJFRkVSRU5DRURZIC0gMSkgPDwgMTsKKyAgICAgICAgICAgIGxpbmU0ID0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKC1HUlJFRkVSRU5DRURYICsgMSwgaCAtIEdSUkVGRVJFTkNFRFkpOworICAgICAgICAgICAgbGluZTQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKC1HUlJFRkVSRU5DRURYLCBoIC0gR1JSRUZFUkVOQ0VEWSkgPDwgMTsKKyAgICAgICAgICAgIGxpbmU0IHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCAtIDEsIGggLSBHUlJFRkVSRU5DRURZKSA8PCAyOworICAgICAgICAgICAgbGluZTUgPSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwoLUdSUkVGRVJFTkNFRFggKyAxLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpOworICAgICAgICAgICAgbGluZTUgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKC1HUlJFRkVSRU5DRURYLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpIDw8IDE7CisgICAgICAgICAgICBsaW5lNSB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwoLUdSUkVGRVJFTkNFRFggLSAxLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpIDw8IDI7CisgICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHUlc7IHcrKykgeworICAgICAgICAgICAgICAgIGJWYWwgPSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodywgaCk7CisgICAgICAgICAgICAgICAgaWYoIShUUEdST04gJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSAxLCBoIC0gMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodywgaCAtIDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgKyAxLCBoIC0gMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIDEsIGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgKyAxLCBoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gMSwgaCArIDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcsIGggKyAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3ICsgMSwgaCArIDEpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IGxpbmU1OworICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmU0IDw8IDM7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTMgPDwgNjsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggKyBHUkFUWzJdLCBoIC0gR1JSRUZFUkVOQ0VEWSArIEdSQVRbM10pIDw8IDg7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTIgPDwgOTsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMSA8PCAxMDsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRy0+Z2V0UGl4ZWwodyArIEdSQVRbMF0sIGggKyBHUkFUWzFdKSA8PCAxMjsKKyAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ3JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgR1JSRUctPnNldFBpeGVsKHcsIGgsIGJWYWwpOworICAgICAgICAgICAgICAgIGxpbmUxID0gKChsaW5lMSA8PCAxKSB8IEdSUkVHLT5nZXRQaXhlbCh3ICsgMiwgaCAtIDEpKSAmIDB4MDM7CisgICAgICAgICAgICAgICAgbGluZTIgPSAoKGxpbmUyIDw8IDEpIHwgYlZhbCkgJiAweDAxOworICAgICAgICAgICAgICAgIGxpbmUzID0gKChsaW5lMyA8PCAxKSB8IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCArIDIsIGggLSBHUlJFRkVSRU5DRURZIC0gMSkpICYgMHgwMzsKKyAgICAgICAgICAgICAgICBsaW5lNCA9ICgobGluZTQgPDwgMSkgfCBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggKyAyLCBoIC0gR1JSRUZFUkVOQ0VEWSkpICYgMHgwNzsKKyAgICAgICAgICAgICAgICBsaW5lNSA9ICgobGluZTUgPDwgMSkgfCBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggKyAyLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpKSAmIDB4MDc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEdSUkVHOworfQorQ0pCaWcyX0ltYWdlICpDSkJpZzJfR1JSRFByb2M6OmRlY29kZV9UZW1wbGF0ZTBfb3B0KENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdyQ29udGV4dCkKK3sKKyAgICBGWF9CT09MIExUUCwgU0xUUCwgYlZhbDsKKyAgICBGWF9EV09SRCBDT05URVhUOworICAgIENKQmlnMl9JbWFnZSAqR1JSRUc7CisgICAgRlhfRFdPUkQgbGluZTEsIGxpbmUxX3IsIGxpbmUyX3IsIGxpbmUzX3I7CisgICAgRlhfQllURSAqcExpbmUsICpwTGluZVIsIGNWYWw7CisgICAgRlhfSU5UUFRSIG5TdHJpZGUsIG5TdHJpZGVSLCBuT2Zmc2V0OworICAgIEZYX0lOVDMyIGssIG5CaXRzOworICAgIEZYX0lOVDMyIEdSV1IsIEdSSFI7CisgICAgRlhfSU5UMzIgR1JXLCBHUkg7CisgICAgR1JXID0gKEZYX0lOVDMyKUNKQmlnMl9HUlJEUHJvYzo6R1JXOworICAgIEdSSCA9IChGWF9JTlQzMilDSkJpZzJfR1JSRFByb2M6OkdSSDsKKyAgICBMVFAgPSAwOworICAgIEpCSUcyX0FMTE9DKEdSUkVHLCBDSkJpZzJfSW1hZ2UoR1JXLCBHUkgpKTsKKyAgICBpZiAoR1JSRUctPm1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICBkZWxldGUgR1JSRUc7CisgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoIkdlbmVyaWMgcmVmaW5lbWVudCByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlOiBDcmVhdGUgSW1hZ2UgRmFpbGVkIHdpdGggd2lkdGggPSAlZCwgaGVpZ2h0ID0gJWRcbiIsIEdSVywgR1JIKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBMaW5lID0gR1JSRUctPm1fcERhdGE7CisgICAgcExpbmVSID0gR1JSRUZFUkVOQ0UtPm1fcERhdGE7CisgICAgblN0cmlkZSA9IEdSUkVHLT5tX25TdHJpZGU7CisgICAgblN0cmlkZVIgPSBHUlJFRkVSRU5DRS0+bV9uU3RyaWRlOworICAgIEdSV1IgPSAoRlhfSU5UMzIpR1JSRUZFUkVOQ0UtPm1fbldpZHRoOworICAgIEdSSFIgPSAoRlhfSU5UMzIpR1JSRUZFUkVOQ0UtPm1fbkhlaWdodDsKKyAgICBpZiAoR1JSRUZFUkVOQ0VEWSA8IC1HUkhSICsgMSB8fCBHUlJFRkVSRU5DRURZID4gR1JIUiAtIDEpIHsKKyAgICAgICAgR1JSRUZFUkVOQ0VEWSA9IDA7CisgICAgfQorICAgIG5PZmZzZXQgPSAtR1JSRUZFUkVOQ0VEWSAqIG5TdHJpZGVSOworICAgIGZvciAoRlhfSU5UMzIgaCA9IDA7IGggPCBHUkg7IGgrKykgeworICAgICAgICBpZihUUEdST04pIHsKKyAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdyQ29udGV4dFsweDAwMTBdKTsKKyAgICAgICAgICAgIExUUCA9IExUUCBeIFNMVFA7CisgICAgICAgIH0KKyAgICAgICAgbGluZTEgPSAoaCA+IDApID8gcExpbmVbLW5TdHJpZGVdIDw8IDQgOiAwOworICAgICAgICBGWF9JTlQzMiByZWZlcmVuY2VfaCA9IGggLSBHUlJFRkVSRU5DRURZOworICAgICAgICBGWF9CT09MIGxpbmUxX3Jfb2sgPSAocmVmZXJlbmNlX2ggPiAwICYmIHJlZmVyZW5jZV9oIDwgR1JIUiArIDEpOworICAgICAgICBGWF9CT09MIGxpbmUyX3Jfb2sgPSAocmVmZXJlbmNlX2ggPiAtMSAmJiByZWZlcmVuY2VfaCA8IEdSSFIpOworICAgICAgICBGWF9CT09MIGxpbmUzX3Jfb2sgPSAocmVmZXJlbmNlX2ggPiAtMiAmJiByZWZlcmVuY2VfaCA8IEdSSFIgLSAxKTsKKyAgICAgICAgbGluZTFfciA9IGxpbmUxX3Jfb2sgPyBwTGluZVJbbk9mZnNldCAtIG5TdHJpZGVSXSA6IDA7CisgICAgICAgIGxpbmUyX3IgPSBsaW5lMl9yX29rID8gcExpbmVSW25PZmZzZXRdIDogMDsKKyAgICAgICAgbGluZTNfciA9IGxpbmUzX3Jfb2sgPyBwTGluZVJbbk9mZnNldCArIG5TdHJpZGVSXSA6IDA7CisgICAgICAgIGlmKExUUCA9PSAwKSB7CisgICAgICAgICAgICBDT05URVhUID0gKGxpbmUxICYgMHgxYzAwKSB8IChsaW5lMV9yICYgMHgwMWMwKQorICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMl9yID4+IDMpICYgMHgwMDM4KSB8ICgobGluZTNfciA+PiA2KSAmIDB4MDAwNyk7CisgICAgICAgICAgICBmb3IgKEZYX0lOVDMyIHcgPSAwOyB3IDwgR1JXOyB3ICs9IDgpIHsKKyAgICAgICAgICAgICAgICBuQml0cyA9IEdSVyAtIHcgPiA4ID8gOCA6IEdSVyAtIHc7CisgICAgICAgICAgICAgICAgaWYgKGggPiAwKQorICAgICAgICAgICAgICAgICAgICBsaW5lMSA9IChsaW5lMSA8PCA4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHcgKyA4IDwgR1JXID8gcExpbmVbLW5TdHJpZGUgKyAodyA+PiAzKSArIDFdIDw8IDQgOiAwKTsKKyAgICAgICAgICAgICAgICBpZiAoaCA+IEdSSFIgKyBHUlJFRkVSRU5DRURZICsgMSkgeworICAgICAgICAgICAgICAgICAgICBsaW5lMV9yID0gMDsKKyAgICAgICAgICAgICAgICAgICAgbGluZTJfciAgPSAwOworICAgICAgICAgICAgICAgICAgICBsaW5lM19yID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZihsaW5lMV9yX29rKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZTFfciA9IChsaW5lMV9yIDw8IDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodyArIDggPCBHUldSID8gcExpbmVSW25PZmZzZXQgLSBuU3RyaWRlUiArICh3ID4+IDMpICsgMV0gOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYobGluZTJfcl9vaykKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyX3IgPSAobGluZTJfciA8PCA4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHcgKyA4IDwgR1JXUiA/IHBMaW5lUltuT2Zmc2V0ICsgKHcgPj4gMykgKyAxXSA6IDApOworICAgICAgICAgICAgICAgICAgICBpZihsaW5lM19yX29rKQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZTNfciA9IChsaW5lM19yIDw8IDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodyArIDggPCBHUldSID8gcExpbmVSW25PZmZzZXQgKyBuU3RyaWRlUiArICh3ID4+IDMpICsgMV0gOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lM19yID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjVmFsID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbkJpdHM7IGsrKykgeworICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnckNvbnRleHRbQ09OVEVYVF0pOworICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgKDcgLSBrKTsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoQ09OVEVYVCAmIDB4MGNkYikgPDwgMSkgfCAoYlZhbCA8PCA5KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmUxID4+ICg3IC0gaykpICYgMHgwNDAwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmUxX3IgPj4gKDcgLSBrKSkgJiAweDAwNDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobGluZTJfciA+PiAoMTAgLSBrKSkgJiAweDAwMDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobGluZTNfciA+PiAoMTMgLSBrKSkgJiAweDAwMDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwTGluZVt3ID4+IDNdID0gY1ZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIENPTlRFWFQgPSAobGluZTEgJiAweDFjMDApIHwgKGxpbmUxX3IgJiAweDAxYzApCisgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUyX3IgPj4gMykgJiAweDAwMzgpIHwgKChsaW5lM19yID4+IDYpICYgMHgwMDA3KTsKKyAgICAgICAgICAgIGZvciAoRlhfSU5UMzIgdyA9IDA7IHcgPCBHUlc7IHcgKz0gOCkgeworICAgICAgICAgICAgICAgIG5CaXRzID0gR1JXIC0gdyA+IDggPyA4IDogR1JXIC0gdzsKKyAgICAgICAgICAgICAgICBpZiAoaCA+IDApCisgICAgICAgICAgICAgICAgICAgIGxpbmUxID0gKGxpbmUxIDw8IDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodyArIDggPCBHUlcgPyBwTGluZVstblN0cmlkZSArICh3ID4+IDMpICsgMV0gPDwgNCA6IDApOworICAgICAgICAgICAgICAgIGlmKGxpbmUxX3Jfb2spCisgICAgICAgICAgICAgICAgICAgIGxpbmUxX3IgPSAobGluZTFfciA8PCA4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodyArIDggPCBHUldSID8gcExpbmVSW25PZmZzZXQgLSBuU3RyaWRlUiArICh3ID4+IDMpICsgMV0gOiAwKTsKKyAgICAgICAgICAgICAgICBpZihsaW5lMl9yX29rKQorICAgICAgICAgICAgICAgICAgICBsaW5lMl9yID0gKGxpbmUyX3IgPDwgOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHcgKyA4IDwgR1JXUiA/IHBMaW5lUltuT2Zmc2V0ICsgKHcgPj4gMykgKyAxXSA6IDApOworICAgICAgICAgICAgICAgIGlmKGxpbmUzX3Jfb2spCisgICAgICAgICAgICAgICAgICAgIGxpbmUzX3IgPSAobGluZTNfciA8PCA4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodyArIDggPCBHUldSID8gcExpbmVSW25PZmZzZXQgKyBuU3RyaWRlUiArICh3ID4+IDMpICsgMV0gOiAwKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbGluZTNfciA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNWYWwgPSAwOworICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBuQml0czsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyArIGssIGgpOworICAgICAgICAgICAgICAgICAgICBpZighKFRQR1JPTiAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyArIGsgLSAxLCBoIC0gMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgKyBrLCBoIC0gMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgKyBrICsgMSwgaCAtIDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3ICsgayAtIDEsIGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3ICsgayArIDEsIGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3ICsgayAtIDEsIGggKyAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyArIGssIGggKyAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyArIGsgKyAxLCBoICsgMSkpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ3JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgKDcgLSBrKTsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoQ09OVEVYVCAmIDB4MGNkYikgPDwgMSkgfCAoYlZhbCA8PCA5KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmUxID4+ICg3IC0gaykpICYgMHgwNDAwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmUxX3IgPj4gKDcgLSBrKSkgJiAweDAwNDApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobGluZTJfciA+PiAoMTAgLSBrKSkgJiAweDAwMDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobGluZTNfciA+PiAoMTMgLSBrKSkgJiAweDAwMDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwTGluZVt3ID4+IDNdID0gY1ZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwTGluZSArPSBuU3RyaWRlOworICAgICAgICBpZiAoaCA8IEdSSFIgKyBHUlJFRkVSRU5DRURZKSB7CisgICAgICAgICAgICBwTGluZVIgKz0gblN0cmlkZVI7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEdSUkVHOworfQorQ0pCaWcyX0ltYWdlICpDSkJpZzJfR1JSRFByb2M6OmRlY29kZV9UZW1wbGF0ZTFfdW5vcHQoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ3JDb250ZXh0KQoreworICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOworICAgIEZYX0RXT1JEIENPTlRFWFQ7CisgICAgQ0pCaWcyX0ltYWdlICpHUlJFRzsKKyAgICBGWF9EV09SRCBsaW5lMSwgbGluZTIsIGxpbmUzLCBsaW5lNCwgbGluZTU7CisgICAgTFRQID0gMDsKKyAgICBKQklHMl9BTExPQyhHUlJFRywgQ0pCaWcyX0ltYWdlKEdSVywgR1JIKSk7CisgICAgR1JSRUctPmZpbGwoMCk7CisgICAgZm9yKEZYX0RXT1JEIGggPSAwOyBoIDwgR1JIOyBoKyspIHsKKyAgICAgICAgaWYoVFBHUk9OKSB7CisgICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnckNvbnRleHRbMHgwMDA4XSk7CisgICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOworICAgICAgICB9CisgICAgICAgIGlmKExUUCA9PSAwKSB7CisgICAgICAgICAgICBsaW5lMSA9IEdSUkVHLT5nZXRQaXhlbCgxLCBoIC0gMSk7CisgICAgICAgICAgICBsaW5lMSB8PSBHUlJFRy0+Z2V0UGl4ZWwoMCwgaCAtIDEpIDw8IDE7CisgICAgICAgICAgICBsaW5lMSB8PSBHUlJFRy0+Z2V0UGl4ZWwoLTEsIGggLSAxKSA8PCAyOworICAgICAgICAgICAgbGluZTIgPSAwOworICAgICAgICAgICAgbGluZTMgPSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwoLUdSUkVGRVJFTkNFRFgsIGggLSBHUlJFRkVSRU5DRURZIC0gMSk7CisgICAgICAgICAgICBsaW5lNCA9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCArIDEsIGggLSBHUlJFRkVSRU5DRURZKTsKKyAgICAgICAgICAgIGxpbmU0IHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkpIDw8IDE7CisgICAgICAgICAgICBsaW5lNCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwoLUdSUkVGRVJFTkNFRFggLSAxLCBoIC0gR1JSRUZFUkVOQ0VEWSkgPDwgMjsKKyAgICAgICAgICAgIGxpbmU1ID0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKC1HUlJFRkVSRU5DRURYICsgMSwgaCAtIEdSUkVGRVJFTkNFRFkgKyAxKTsKKyAgICAgICAgICAgIGxpbmU1IHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkgKyAxKSA8PCAxOworICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR1JXOyB3KyspIHsKKyAgICAgICAgICAgICAgICBDT05URVhUID0gbGluZTU7CisgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lNCA8PCAyOworICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTMgPDwgNTsKKyAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUyIDw8IDY7CisgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMSA8PCA3OworICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdyQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgR1JSRUctPnNldFBpeGVsKHcsIGgsIGJWYWwpOworICAgICAgICAgICAgICAgIGxpbmUxID0gKChsaW5lMSA8PCAxKSB8IEdSUkVHLT5nZXRQaXhlbCh3ICsgMiwgaCAtIDEpKSAmIDB4MDc7CisgICAgICAgICAgICAgICAgbGluZTIgPSAoKGxpbmUyIDw8IDEpIHwgYlZhbCkgJiAweDAxOworICAgICAgICAgICAgICAgIGxpbmUzID0gKChsaW5lMyA8PCAxKSB8IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCArIDEsIGggLSBHUlJFRkVSRU5DRURZIC0gMSkpICYgMHgwMTsKKyAgICAgICAgICAgICAgICBsaW5lNCA9ICgobGluZTQgPDwgMSkgfCBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggKyAyLCBoIC0gR1JSRUZFUkVOQ0VEWSkpICYgMHgwNzsKKyAgICAgICAgICAgICAgICBsaW5lNSA9ICgobGluZTUgPDwgMSkgfCBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggKyAyLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpKSAmIDB4MDM7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsaW5lMSA9IEdSUkVHLT5nZXRQaXhlbCgxLCBoIC0gMSk7CisgICAgICAgICAgICBsaW5lMSB8PSBHUlJFRy0+Z2V0UGl4ZWwoMCwgaCAtIDEpIDw8IDE7CisgICAgICAgICAgICBsaW5lMSB8PSBHUlJFRy0+Z2V0UGl4ZWwoLTEsIGggLSAxKSA8PCAyOworICAgICAgICAgICAgbGluZTIgPSAwOworICAgICAgICAgICAgbGluZTMgPSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwoLUdSUkVGRVJFTkNFRFgsIGggLSBHUlJFRkVSRU5DRURZIC0gMSk7CisgICAgICAgICAgICBsaW5lNCA9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCArIDEsIGggLSBHUlJFRkVSRU5DRURZKTsKKyAgICAgICAgICAgIGxpbmU0IHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkpIDw8IDE7CisgICAgICAgICAgICBsaW5lNCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwoLUdSUkVGRVJFTkNFRFggLSAxLCBoIC0gR1JSRUZFUkVOQ0VEWSkgPDwgMjsKKyAgICAgICAgICAgIGxpbmU1ID0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKC1HUlJFRkVSRU5DRURYICsgMSwgaCAtIEdSUkVGRVJFTkNFRFkgKyAxKTsKKyAgICAgICAgICAgIGxpbmU1IHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCgtR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkgKyAxKSA8PCAxOworICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR1JXOyB3KyspIHsKKyAgICAgICAgICAgICAgICBiVmFsID0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcsIGgpOworICAgICAgICAgICAgICAgIGlmKCEoVFBHUk9OICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gMSwgaCAtIDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcsIGggLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3ICsgMSwgaCAtIDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSAxLCBoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3ICsgMSwgaCkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIDEsIGggKyAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3LCBoICsgMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyArIDEsIGggKyAxKSkpKSB7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSBsaW5lNTsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lNCA8PCAyOworICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUzIDw8IDU7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTIgPDwgNjsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMSA8PCA3OworICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnckNvbnRleHRbQ09OVEVYVF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBHUlJFRy0+c2V0UGl4ZWwodywgaCwgYlZhbCk7CisgICAgICAgICAgICAgICAgbGluZTEgPSAoKGxpbmUxIDw8IDEpIHwgR1JSRUctPmdldFBpeGVsKHcgKyAyLCBoIC0gMSkpICYgMHgwNzsKKyAgICAgICAgICAgICAgICBsaW5lMiA9ICgobGluZTIgPDwgMSkgfCBiVmFsKSAmIDB4MDE7CisgICAgICAgICAgICAgICAgbGluZTMgPSAoKGxpbmUzIDw8IDEpIHwgR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYICsgMSwgaCAtIEdSUkVGRVJFTkNFRFkgLSAxKSkgJiAweDAxOworICAgICAgICAgICAgICAgIGxpbmU0ID0gKChsaW5lNCA8PCAxKSB8IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCArIDIsIGggLSBHUlJFRkVSRU5DRURZKSkgJiAweDA3OworICAgICAgICAgICAgICAgIGxpbmU1ID0gKChsaW5lNSA8PCAxKSB8IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCArIDIsIGggLSBHUlJFRkVSRU5DRURZICsgMSkpICYgMHgwMzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gR1JSRUc7Cit9CitDSkJpZzJfSW1hZ2UgKkNKQmlnMl9HUlJEUHJvYzo6ZGVjb2RlX1RlbXBsYXRlMV9vcHQoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ3JDb250ZXh0KQoreworICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOworICAgIEZYX0RXT1JEIENPTlRFWFQ7CisgICAgQ0pCaWcyX0ltYWdlICpHUlJFRzsKKyAgICBGWF9EV09SRCBsaW5lMSwgbGluZTFfciwgbGluZTJfciwgbGluZTNfcjsKKyAgICBGWF9CWVRFICpwTGluZSwgKnBMaW5lUiwgY1ZhbDsKKyAgICBGWF9JTlRQVFIgblN0cmlkZSwgblN0cmlkZVIsIG5PZmZzZXQ7CisgICAgRlhfSU5UMzIgaywgbkJpdHM7CisgICAgRlhfSU5UMzIgR1JXUiwgR1JIUjsKKyAgICBGWF9JTlQzMiBHUlcsIEdSSDsKKyAgICBHUlcgPSAoRlhfSU5UMzIpQ0pCaWcyX0dSUkRQcm9jOjpHUlc7CisgICAgR1JIID0gKEZYX0lOVDMyKUNKQmlnMl9HUlJEUHJvYzo6R1JIOworICAgIExUUCA9IDA7CisgICAgSkJJRzJfQUxMT0MoR1JSRUcsIENKQmlnMl9JbWFnZShHUlcsIEdSSCkpOworICAgIGlmIChHUlJFRy0+bV9wRGF0YSA9PSBOVUxMKSB7CisgICAgICAgIGRlbGV0ZSBHUlJFRzsKKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigiR2VuZXJpYyByZWZpbmVtZW50IHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmU6IENyZWF0ZSBJbWFnZSBGYWlsZWQgd2l0aCB3aWR0aCA9ICVkLCBoZWlnaHQgPSAlZFxuIiwgR1JXLCBHUkgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcExpbmUgPSBHUlJFRy0+bV9wRGF0YTsKKyAgICBwTGluZVIgPSBHUlJFRkVSRU5DRS0+bV9wRGF0YTsKKyAgICBuU3RyaWRlID0gR1JSRUctPm1fblN0cmlkZTsKKyAgICBuU3RyaWRlUiA9IEdSUkVGRVJFTkNFLT5tX25TdHJpZGU7CisgICAgR1JXUiA9IChGWF9JTlQzMilHUlJFRkVSRU5DRS0+bV9uV2lkdGg7CisgICAgR1JIUiA9IChGWF9JTlQzMilHUlJFRkVSRU5DRS0+bV9uSGVpZ2h0OworICAgIGlmIChHUlJFRkVSRU5DRURZIDwgLUdSSFIgKyAxIHx8IEdSUkVGRVJFTkNFRFkgPiBHUkhSIC0gMSkgeworICAgICAgICBHUlJFRkVSRU5DRURZID0gMDsKKyAgICB9CisgICAgbk9mZnNldCA9IC1HUlJFRkVSRU5DRURZICogblN0cmlkZVI7CisgICAgZm9yIChGWF9JTlQzMiBoID0gMDsgaCA8IEdSSDsgaCsrKSB7CisgICAgICAgIGlmKFRQR1JPTikgeworICAgICAgICAgICAgU0xUUCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ3JDb250ZXh0WzB4MDAwOF0pOworICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsKKyAgICAgICAgfQorICAgICAgICBsaW5lMSA9IChoID4gMCkgPyBwTGluZVstblN0cmlkZV0gPDwgMSA6IDA7CisgICAgICAgIEZYX0lOVDMyIHJlZmVyZW5jZV9oID0gaCAtIEdSUkVGRVJFTkNFRFk7CisgICAgICAgIEZYX0JPT0wgbGluZTFfcl9vayA9IChyZWZlcmVuY2VfaCA+IDAgJiYgcmVmZXJlbmNlX2ggPCBHUkhSICsgMSk7CisgICAgICAgIEZYX0JPT0wgbGluZTJfcl9vayA9IChyZWZlcmVuY2VfaCA+IC0xICYmIHJlZmVyZW5jZV9oIDwgR1JIUik7CisgICAgICAgIEZYX0JPT0wgbGluZTNfcl9vayA9IChyZWZlcmVuY2VfaCA+IC0yICYmIHJlZmVyZW5jZV9oIDwgR1JIUiAtIDEpOworICAgICAgICBsaW5lMV9yID0gbGluZTFfcl9vayA/IHBMaW5lUltuT2Zmc2V0IC0gblN0cmlkZVJdIDogMDsKKyAgICAgICAgbGluZTJfciA9IGxpbmUyX3Jfb2sgPyBwTGluZVJbbk9mZnNldF0gOiAwOworICAgICAgICBsaW5lM19yID0gbGluZTNfcl9vayA/IHBMaW5lUltuT2Zmc2V0ICsgblN0cmlkZVJdIDogMDsKKyAgICAgICAgaWYoTFRQID09IDApIHsKKyAgICAgICAgICAgIENPTlRFWFQgPSAobGluZTEgJiAweDAzODApIHwgKChsaW5lMV9yID4+IDIpICYgMHgwMDIwKQorICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMl9yID4+IDQpICYgMHgwMDFjKSB8ICgobGluZTNfciA+PiA2KSAmIDB4MDAwMyk7CisgICAgICAgICAgICBmb3IgKEZYX0lOVDMyIHcgPSAwOyB3IDwgR1JXOyB3ICs9IDgpIHsKKyAgICAgICAgICAgICAgICBuQml0cyA9IEdSVyAtIHcgPiA4ID8gOCA6IEdSVyAtIHc7CisgICAgICAgICAgICAgICAgaWYgKGggPiAwKQorICAgICAgICAgICAgICAgICAgICBsaW5lMSA9IChsaW5lMSA8PCA4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHcgKyA4IDwgR1JXID8gcExpbmVbLW5TdHJpZGUgKyAodyA+PiAzKSArIDFdIDw8IDEgOiAwKTsKKyAgICAgICAgICAgICAgICBpZihsaW5lMV9yX29rKQorICAgICAgICAgICAgICAgICAgICBsaW5lMV9yID0gKGxpbmUxX3IgPDwgOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHcgKyA4IDwgR1JXUiA/IHBMaW5lUltuT2Zmc2V0IC0gblN0cmlkZVIgKyAodyA+PiAzKSArIDFdIDogMCk7CisgICAgICAgICAgICAgICAgaWYobGluZTJfcl9vaykKKyAgICAgICAgICAgICAgICAgICAgbGluZTJfciA9IChsaW5lMl9yIDw8IDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3ICsgOCA8IEdSV1IgPyBwTGluZVJbbk9mZnNldCArICh3ID4+IDMpICsgMV0gOiAwKTsKKyAgICAgICAgICAgICAgICBpZihsaW5lM19yX29rKQorICAgICAgICAgICAgICAgICAgICBsaW5lM19yID0gKGxpbmUzX3IgPDwgOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHcgKyA4IDwgR1JXUiA/IHBMaW5lUltuT2Zmc2V0ICsgblN0cmlkZVIgKyAodyA+PiAzKSArIDFdIDogMCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmUzX3IgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjVmFsID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbkJpdHM7IGsrKykgeworICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnckNvbnRleHRbQ09OVEVYVF0pOworICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgKDcgLSBrKTsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoQ09OVEVYVCAmIDB4MDE4ZCkgPDwgMSkgfCAoYlZhbCA8PCA2KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmUxID4+ICg3IC0gaykpICYgMHgwMDgwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmUxX3IgPj4gKDkgLSBrKSkgJiAweDAwMjApIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobGluZTJfciA+PiAoMTEgLSBrKSkgJiAweDAwMDQpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobGluZTNfciA+PiAoMTMgLSBrKSkgJiAweDAwMDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwTGluZVt3ID4+IDNdID0gY1ZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIENPTlRFWFQgPSAobGluZTEgJiAweDAzODApIHwgKChsaW5lMV9yID4+IDIpICYgMHgwMDIwKQorICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMl9yID4+IDQpICYgMHgwMDFjKSB8ICgobGluZTNfciA+PiA2KSAmIDB4MDAwMyk7CisgICAgICAgICAgICBmb3IgKEZYX0lOVDMyIHcgPSAwOyB3IDwgR1JXOyB3ICs9IDgpIHsKKyAgICAgICAgICAgICAgICBuQml0cyA9IEdSVyAtIHcgPiA4ID8gOCA6IEdSVyAtIHc7CisgICAgICAgICAgICAgICAgaWYgKGggPiAwKQorICAgICAgICAgICAgICAgICAgICBsaW5lMSA9IChsaW5lMSA8PCA4KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHcgKyA4IDwgR1JXID8gcExpbmVbLW5TdHJpZGUgKyAodyA+PiAzKSArIDFdIDw8IDEgOiAwKTsKKyAgICAgICAgICAgICAgICBpZihsaW5lMV9yX29rKQorICAgICAgICAgICAgICAgICAgICBsaW5lMV9yID0gKGxpbmUxX3IgPDwgOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHcgKyA4IDwgR1JXUiA/IHBMaW5lUltuT2Zmc2V0IC0gblN0cmlkZVIgKyAodyA+PiAzKSArIDFdIDogMCk7CisgICAgICAgICAgICAgICAgaWYobGluZTJfcl9vaykKKyAgICAgICAgICAgICAgICAgICAgbGluZTJfciA9IChsaW5lMl9yIDw8IDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3ICsgOCA8IEdSV1IgPyBwTGluZVJbbk9mZnNldCArICh3ID4+IDMpICsgMV0gOiAwKTsKKyAgICAgICAgICAgICAgICBpZihsaW5lM19yX29rKQorICAgICAgICAgICAgICAgICAgICBsaW5lM19yID0gKGxpbmUzX3IgPDwgOCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHcgKyA4IDwgR1JXUiA/IHBMaW5lUltuT2Zmc2V0ICsgblN0cmlkZVIgKyAodyA+PiAzKSArIDFdIDogMCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmUzX3IgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjVmFsID0gMDsKKyAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbkJpdHM7IGsrKykgeworICAgICAgICAgICAgICAgICAgICBiVmFsID0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgKyBrLCBoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYoIShUUEdST04gJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgKyBrIC0gMSwgaCAtIDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3ICsgaywgaCAtIDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3ICsgayArIDEsIGggLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyArIGsgLSAxLCBoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyArIGsgKyAxLCBoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyArIGsgLSAxLCBoICsgMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgKyBrLCBoICsgMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgKyBrICsgMSwgaCArIDEpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdyQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8ICg3IC0gayk7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDAxOGQpIDw8IDEpIHwgKGJWYWwgPDwgNikgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChsaW5lMSA+PiAoNyAtIGspKSAmIDB4MDA4MCkgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChsaW5lMV9yID4+ICg5IC0gaykpICYgMHgwMDIwKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmUyX3IgPj4gKDExIC0gaykpICYgMHgwMDA0KSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGxpbmUzX3IgPj4gKDEzIC0gaykpICYgMHgwMDAxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcExpbmVbdyA+PiAzXSA9IGNWYWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcExpbmUgKz0gblN0cmlkZTsKKyAgICAgICAgaWYgKGggPCBHUkhSICsgR1JSRUZFUkVOQ0VEWSkgeworICAgICAgICAgICAgcExpbmVSICs9IG5TdHJpZGVSOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBHUlJFRzsKK30KK0NKQmlnMl9JbWFnZSAqQ0pCaWcyX0dSUkRQcm9jOjpkZWNvZGVfVjEoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ3JDb250ZXh0KQoreworICAgIEZYX0JPT0wgTFRQLCBTTFRQLCBiVmFsOworICAgIEZYX0JPT0wgVFBHUlBJWCwgVFBHUlZBTDsKKyAgICBGWF9EV09SRCBDT05URVhUOworICAgIENKQmlnMl9JbWFnZSAqR1JSRUc7CisgICAgTFRQID0gMDsKKyAgICBKQklHMl9BTExPQyhHUlJFRywgQ0pCaWcyX0ltYWdlKEdSVywgR1JIKSk7CisgICAgR1JSRUctPmZpbGwoMCk7CisgICAgZm9yKEZYX0RXT1JEIGggPSAwOyBoIDwgR1JIOyBoKyspIHsKKyAgICAgICAgaWYoVFBHUk9OKSB7CisgICAgICAgICAgICBzd2l0Y2goR1JURU1QTEFURSkgeworICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IDB4MDAxMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gMHgwMDA4OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdyQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOworICAgICAgICB9CisgICAgICAgIGlmKExUUCA9PSAwKSB7CisgICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHUlc7IHcrKykgeworICAgICAgICAgICAgICAgIENPTlRFWFQgPSAwOworICAgICAgICAgICAgICAgIHN3aXRjaChHUlRFTVBMQVRFKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYICsgMSwgaCAtIEdSUkVGRVJFTkNFRFkgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpIDw8IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCAtIDEsIGggLSBHUlJFRkVSRU5DRURZICsgMSkgPDwgMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYICsgMSwgaCAtIEdSUkVGRVJFTkNFRFkpIDw8IDM7CisgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkpIDw8IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCAtIDEsIGggLSBHUlJFRkVSRU5DRURZKSA8PCA1OworICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggKyAxLCBoIC0gR1JSRUZFUkVOQ0VEWSAtIDEpIDw8IDY7CisgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkgLSAxKSA8PCA3OworICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggKyBHUkFUWzJdLCBoIC0gR1JSRUZFUkVOQ0VEWSArIEdSQVRbM10pIDw8IDg7CisgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVHLT5nZXRQaXhlbCh3IC0gMSwgaCkgPDwgOTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUctPmdldFBpeGVsKHcgKyAxLCBoIC0gMSkgPDwgMTA7CisgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVHLT5nZXRQaXhlbCh3LCBoIC0gMSkgPDwgMTE7CisgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVHLT5nZXRQaXhlbCh3ICsgR1JBVFswXSwgaCArIEdSQVRbMV0pIDw8IDEyOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYICsgMSwgaCAtIEdSUkVGRVJFTkNFRFkgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpIDw8IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCArIDEsIGggLSBHUlJFRkVSRU5DRURZKSA8PCAyOworICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFgsIGggLSBHUlJFRkVSRU5DRURZKSA8PCAzOworICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggLSAxLCBoIC0gR1JSRUZFUkVOQ0VEWSkgPDwgNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYLCBoIC0gR1JSRUZFUkVOQ0VEWSAtIDEpIDw8IDU7CisgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVHLT5nZXRQaXhlbCh3IC0gMSwgaCkgPDwgNjsKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUctPmdldFBpeGVsKHcgKyAxLCBoIC0gMSkgPDwgNzsKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUctPmdldFBpeGVsKHcsIGggLSAxKSA8PCA4OworICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRy0+Z2V0UGl4ZWwodyAtIDEsIGggLSAxKSA8PCA5OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdyQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgR1JSRUctPnNldFBpeGVsKHcsIGgsIGJWYWwpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR1JXOyB3KyspIHsKKyAgICAgICAgICAgICAgICBiVmFsID0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcsIGgpOworICAgICAgICAgICAgICAgIGlmKFRQR1JPTiAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIDEsIGggLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3LCBoIC0gMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyArIDEsIGggLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIChiVmFsID09IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gMSwgaCkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyArIDEsIGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSAxLCBoICsgMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAoYlZhbCA9PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodywgaCArIDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGJWYWwgPT0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgKyAxLCBoICsgMSkpKSB7CisgICAgICAgICAgICAgICAgICAgIFRQR1JQSVggPSAxOworICAgICAgICAgICAgICAgICAgICBUUEdSVkFMID0gYlZhbDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBUUEdSUElYID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoVFBHUlBJWCkgeworICAgICAgICAgICAgICAgICAgICBHUlJFRy0+c2V0UGl4ZWwodywgaCwgVFBHUlZBTCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaChHUlRFTVBMQVRFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggKyAxLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpIDw8IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggLSAxLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpIDw8IDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggKyAxLCBoIC0gR1JSRUZFUkVOQ0VEWSkgPDwgMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkpIDw8IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggLSAxLCBoIC0gR1JSRUZFUkVOQ0VEWSkgPDwgNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCArIDEsIGggLSBHUlJFRkVSRU5DRURZIC0gMSkgPDwgNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkgLSAxKSA8PCA3OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYICsgR1JBVFsyXSwgaCAtIEdSUkVGRVJFTkNFRFkgKyBHUkFUWzNdKSA8PCA4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUctPmdldFBpeGVsKHcgLSAxLCBoKSA8PCA5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUctPmdldFBpeGVsKHcgKyAxLCBoIC0gMSkgPDwgMTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRy0+Z2V0UGl4ZWwodywgaCAtIDEpIDw8IDExOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUctPmdldFBpeGVsKHcgKyBHUkFUWzBdLCBoICsgR1JBVFsxXSkgPDwgMTI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggKyAxLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUZFUkVOQ0UtPmdldFBpeGVsKHcgLSBHUlJFRkVSRU5DRURYLCBoIC0gR1JSRUZFUkVOQ0VEWSArIDEpIDw8IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggKyAxLCBoIC0gR1JSRUZFUkVOQ0VEWSkgPDwgMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkpIDw8IDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHUlJFRkVSRU5DRS0+Z2V0UGl4ZWwodyAtIEdSUkVGRVJFTkNFRFggLSAxLCBoIC0gR1JSRUZFUkVOQ0VEWSkgPDwgNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVGRVJFTkNFLT5nZXRQaXhlbCh3IC0gR1JSRUZFUkVOQ0VEWCwgaCAtIEdSUkVGRVJFTkNFRFkgLSAxKSA8PCA1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUctPmdldFBpeGVsKHcgLSAxLCBoKSA8PCA2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR1JSRUctPmdldFBpeGVsKHcgKyAxLCBoIC0gMSkgPDwgNzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVHLT5nZXRQaXhlbCh3LCBoIC0gMSkgPDwgODsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdSUkVHLT5nZXRQaXhlbCh3IC0gMSwgaCAtIDEpIDw8IDk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ3JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICAgICAgR1JSRUctPnNldFBpeGVsKHcsIGgsIGJWYWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gR1JSRUc7Cit9CitDSkJpZzJfSW1hZ2UgKkNKQmlnMl9UUkRQcm9jOjpkZWNvZGVfSHVmZm1hbihDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtLCBKQmlnMkFyaXRoQ3R4ICpnckNvbnRleHQpCit7CisgICAgRlhfSU5UMzIgU1RSSVBULCBGSVJTVFM7CisgICAgRlhfRFdPUkQgTklOU1RBTkNFUzsKKyAgICBGWF9JTlQzMiBEVCwgREZTLCBDVVJTOworICAgIEZYX0JZVEUgQ1VSVDsKKyAgICBGWF9JTlQzMiBTSSwgVEk7CisgICAgRlhfRFdPUkQgSURJOworICAgIENKQmlnMl9JbWFnZSAqSUJJOworICAgIEZYX0RXT1JEIFdJLCBISTsKKyAgICBGWF9JTlQzMiBJRFM7CisgICAgRlhfQk9PTCBSSTsKKyAgICBGWF9JTlQzMiBSRFdJLCBSREhJLCBSRFhJLCBSRFlJOworICAgIENKQmlnMl9JbWFnZSAqSUJPSTsKKyAgICBGWF9EV09SRCBXT0ksIEhPSTsKKyAgICBDSkJpZzJfSW1hZ2UgKlNCUkVHOworICAgIEZYX0JPT0wgYkZpcnN0OworICAgIEZYX0RXT1JEIG5UbXA7CisgICAgRlhfSU5UMzIgblZhbCwgbkJpdHM7CisgICAgQ0pCaWcyX0h1ZmZtYW5EZWNvZGVyICpwSHVmZm1hbkRlY29kZXI7CisgICAgQ0pCaWcyX0dSUkRQcm9jICpwR1JSRDsKKyAgICBDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyOworICAgIEpCSUcyX0FMTE9DKHBIdWZmbWFuRGVjb2RlciwgQ0pCaWcyX0h1ZmZtYW5EZWNvZGVyKHBTdHJlYW0pKTsKKyAgICBKQklHMl9BTExPQyhTQlJFRywgQ0pCaWcyX0ltYWdlKFNCVywgU0JIKSk7CisgICAgU0JSRUctPmZpbGwoU0JERUZQSVhFTCk7CisgICAgaWYocEh1ZmZtYW5EZWNvZGVyLT5kZWNvZGVBVmFsdWUoU0JIVUZGRFQsICZTVFJJUFQpICE9IDApIHsKKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigidGV4dCByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlIChodWZmbWFuKTogdG9vIHNob3J0LiIpOworICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9CisgICAgU1RSSVBUICo9IFNCU1RSSVBTOworICAgIFNUUklQVCA9IC1TVFJJUFQ7CisgICAgRklSU1RTID0gMDsKKyAgICBOSU5TVEFOQ0VTID0gMDsKKyAgICB3aGlsZShOSU5TVEFOQ0VTIDwgU0JOVU1JTlNUQU5DRVMpIHsKKyAgICAgICAgaWYocEh1ZmZtYW5EZWNvZGVyLT5kZWNvZGVBVmFsdWUoU0JIVUZGRFQsICZEVCkgIT0gMCkgeworICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigidGV4dCByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlIChodWZmbWFuKTogdG9vIHNob3J0LiIpOworICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIH0KKyAgICAgICAgRFQgKj0gU0JTVFJJUFM7CisgICAgICAgIFNUUklQVCA9IFNUUklQVCArIERUOworICAgICAgICBiRmlyc3QgPSBUUlVFOworICAgICAgICBmb3IoOzspIHsKKyAgICAgICAgICAgIGlmKGJGaXJzdCkgeworICAgICAgICAgICAgICAgIGlmKHBIdWZmbWFuRGVjb2Rlci0+ZGVjb2RlQVZhbHVlKFNCSFVGRkZTLCAmREZTKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZSAoaHVmZm1hbik6IHRvbyBzaG9ydC4iKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEZJUlNUUyA9IEZJUlNUUyArIERGUzsKKyAgICAgICAgICAgICAgICBDVVJTID0gRklSU1RTOworICAgICAgICAgICAgICAgIGJGaXJzdCA9IEZBTFNFOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBuVmFsID0gcEh1ZmZtYW5EZWNvZGVyLT5kZWNvZGVBVmFsdWUoU0JIVUZGRFMsICZJRFMpOworICAgICAgICAgICAgICAgIGlmKG5WYWwgPT0gSkJJRzJfT09CKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZihuVmFsICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigidGV4dCByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlIChodWZmbWFuKTogdG9vIHNob3J0LiIpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBDVVJTID0gQ1VSUyArIElEUyArIFNCRFNPRkZTRVQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoU0JTVFJJUFMgPT0gMSkgeworICAgICAgICAgICAgICAgIENVUlQgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBuVG1wID0gMTsKKyAgICAgICAgICAgICAgICB3aGlsZSgoRlhfRFdPUkQpKDEgPDwgblRtcCkgPCBTQlNUUklQUykgeworICAgICAgICAgICAgICAgICAgICBuVG1wICsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihwU3RyZWFtLT5yZWFkTkJpdHMoblRtcCwgJm5WYWwpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigidGV4dCByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlIChodWZmbWFuKTogdG9vIHNob3J0LiIpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ1VSVCA9IG5WYWw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBUSSA9IFNUUklQVCArIENVUlQ7CisgICAgICAgICAgICBuVmFsID0gMDsKKyAgICAgICAgICAgIG5CaXRzID0gMDsKKyAgICAgICAgICAgIGZvcig7OykgeworICAgICAgICAgICAgICAgIGlmKHBTdHJlYW0tPnJlYWQxQml0KCZuVG1wKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZSAoaHVmZm1hbik6IHRvbyBzaG9ydC4iKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5WYWwgPSAoblZhbCA8PCAxKSB8IG5UbXA7CisgICAgICAgICAgICAgICAgbkJpdHMgKys7CisgICAgICAgICAgICAgICAgZm9yKElESSA9IDA7IElESSA8IFNCTlVNU1lNUzsgSURJKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoKG5CaXRzID09IFNCU1lNQ09ERVNbSURJXS5jb2RlbGVuKSAmJiAoblZhbCA9PSBTQlNZTUNPREVTW0lESV0uY29kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmKElESSA8IFNCTlVNU1lNUykgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihTQlJFRklORSA9PSAwKSB7CisgICAgICAgICAgICAgICAgUkkgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZihwU3RyZWFtLT5yZWFkMUJpdCgmUkkpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigidGV4dCByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlIChodWZmbWFuKTogdG9vIHNob3J0LiIpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihSSSA9PSAwKSB7CisgICAgICAgICAgICAgICAgSUJJID0gU0JTWU1TW0lESV07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmKChwSHVmZm1hbkRlY29kZXItPmRlY29kZUFWYWx1ZShTQkhVRkZSRFcsICZSRFdJKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHBIdWZmbWFuRGVjb2Rlci0+ZGVjb2RlQVZhbHVlKFNCSFVGRlJESCwgJlJESEkpICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAocEh1ZmZtYW5EZWNvZGVyLT5kZWNvZGVBVmFsdWUoU0JIVUZGUkRYLCAmUkRYSSkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IChwSHVmZm1hbkRlY29kZXItPmRlY29kZUFWYWx1ZShTQkhVRkZSRFksICZSRFlJKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHBIdWZmbWFuRGVjb2Rlci0+ZGVjb2RlQVZhbHVlKFNCSFVGRlJTSVpFLCAmblZhbCkgIT0gMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigidGV4dCByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlIChodWZmbWFuKTogdG9vIHNob3J0LiIpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcFN0cmVhbS0+YWxpZ25CeXRlKCk7CisgICAgICAgICAgICAgICAgblRtcCA9IHBTdHJlYW0tPmdldE9mZnNldCgpOworICAgICAgICAgICAgICAgIElCT0kgPSBTQlNZTVNbSURJXTsKKyAgICAgICAgICAgICAgICBpZiAoIUlCT0kpIHsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFdPSSA9IElCT0ktPm1fbldpZHRoOworICAgICAgICAgICAgICAgIEhPSSA9IElCT0ktPm1fbkhlaWdodDsKKyAgICAgICAgICAgICAgICBpZiAoKGludCkoV09JICsgUkRXSSkgPCAwIHx8IChpbnQpKEhPSSArIFJESEkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmUgKGh1ZmZtYW4pOiBJbnZhbGlkIFJEV0kgb3IgUkRISSB2YWx1ZS4iKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKHBHUlJELCBDSkJpZzJfR1JSRFByb2MoKSk7CisgICAgICAgICAgICAgICAgcEdSUkQtPkdSVyA9IFdPSSArIFJEV0k7CisgICAgICAgICAgICAgICAgcEdSUkQtPkdSSCA9IEhPSSArIFJESEk7CisgICAgICAgICAgICAgICAgcEdSUkQtPkdSVEVNUExBVEUgPSBTQlJURU1QTEFURTsKKyAgICAgICAgICAgICAgICBwR1JSRC0+R1JSRUZFUkVOQ0UgPSBJQk9JOworICAgICAgICAgICAgICAgIHBHUlJELT5HUlJFRkVSRU5DRURYID0gKFJEV0kgPj4gMikgKyBSRFhJOworICAgICAgICAgICAgICAgIHBHUlJELT5HUlJFRkVSRU5DRURZID0gKFJESEkgPj4gMikgKyBSRFlJOworICAgICAgICAgICAgICAgIHBHUlJELT5UUEdST04gPSAwOworICAgICAgICAgICAgICAgIHBHUlJELT5HUkFUWzBdID0gU0JSQVRbMF07CisgICAgICAgICAgICAgICAgcEdSUkQtPkdSQVRbMV0gPSBTQlJBVFsxXTsKKyAgICAgICAgICAgICAgICBwR1JSRC0+R1JBVFsyXSA9IFNCUkFUWzJdOworICAgICAgICAgICAgICAgIHBHUlJELT5HUkFUWzNdID0gU0JSQVRbM107CisgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MocEFyaXRoRGVjb2RlciwgQ0pCaWcyX0FyaXRoRGVjb2RlcihwU3RyZWFtKSk7CisgICAgICAgICAgICAgICAgSUJJID0gcEdSUkQtPmRlY29kZShwQXJpdGhEZWNvZGVyLCBnckNvbnRleHQpOworICAgICAgICAgICAgICAgIGlmKElCSSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwR1JSRDsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBBcml0aERlY29kZXI7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZWxldGUgcEFyaXRoRGVjb2RlcjsKKyAgICAgICAgICAgICAgICBwU3RyZWFtLT5hbGlnbkJ5dGUoKTsKKyAgICAgICAgICAgICAgICBwU3RyZWFtLT5vZmZzZXQoMik7CisgICAgICAgICAgICAgICAgaWYoKEZYX0RXT1JEKW5WYWwgIT0gKHBTdHJlYW0tPmdldE9mZnNldCgpIC0gblRtcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIElCSTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBHUlJEOworICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmUgKGh1ZmZtYW4pOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnl0ZXMgcHJvY2Vzc2VkIGJ5IGdlbmVyaWMgcmVmaW5lbWVudCByZWdpb24gZGVjb2RpbmcgcHJvY2VkdXJlIGRvZXNuJ3QgZXF1YWwgU0JIVUZGUlNJWkUuIik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZWxldGUgcEdSUkQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIUlCSSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgV0kgPSBJQkktPm1fbldpZHRoOworICAgICAgICAgICAgSEkgPSBJQkktPm1fbkhlaWdodDsKKyAgICAgICAgICAgIGlmKFRSQU5TUE9TRUQgPT0gMCAmJiAoKFJFRkNPUk5FUiA9PSBKQklHMl9DT1JORVJfVE9QUklHSFQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChSRUZDT1JORVIgPT0gSkJJRzJfQ09STkVSX0JPVFRPTVJJR0hUKSkpIHsKKyAgICAgICAgICAgICAgICBDVVJTID0gQ1VSUyArIFdJIC0gMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZihUUkFOU1BPU0VEID09IDEgJiYgKChSRUZDT1JORVIgPT0gSkJJRzJfQ09STkVSX0JPVFRPTUxFRlQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoUkVGQ09STkVSID09IEpCSUcyX0NPUk5FUl9CT1RUT01SSUdIVCkpKSB7CisgICAgICAgICAgICAgICAgQ1VSUyA9IENVUlMgKyBISSAtIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTSSA9IENVUlM7CisgICAgICAgICAgICBpZihUUkFOU1BPU0VEID09IDApIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2goUkVGQ09STkVSKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09STkVSX1RPUExFRlQ6CisgICAgICAgICAgICAgICAgICAgICAgICBTQlJFRy0+Y29tcG9zZUZyb20oU0ksIFRJLCBJQkksIFNCQ09NQk9QKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPUk5FUl9UT1BSSUdIVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFNCUkVHLT5jb21wb3NlRnJvbShTSSAtIFdJICsgMSwgVEksIElCSSwgU0JDT01CT1ApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09STkVSX0JPVFRPTUxFRlQ6CisgICAgICAgICAgICAgICAgICAgICAgICBTQlJFRy0+Y29tcG9zZUZyb20oU0ksIFRJIC0gSEkgKyAxLCBJQkksIFNCQ09NQk9QKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPUk5FUl9CT1RUT01SSUdIVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFNCUkVHLT5jb21wb3NlRnJvbShTSSAtIFdJICsgMSwgVEkgLSBISSArIDEsIElCSSwgU0JDT01CT1ApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2goUkVGQ09STkVSKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09STkVSX1RPUExFRlQ6CisgICAgICAgICAgICAgICAgICAgICAgICBTQlJFRy0+Y29tcG9zZUZyb20oVEksIFNJLCBJQkksIFNCQ09NQk9QKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPUk5FUl9UT1BSSUdIVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFNCUkVHLT5jb21wb3NlRnJvbShUSSAtIFdJICsgMSwgU0ksIElCSSwgU0JDT01CT1ApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09STkVSX0JPVFRPTUxFRlQ6CisgICAgICAgICAgICAgICAgICAgICAgICBTQlJFRy0+Y29tcG9zZUZyb20oVEksIFNJIC0gSEkgKyAxLCBJQkksIFNCQ09NQk9QKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPUk5FUl9CT1RUT01SSUdIVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFNCUkVHLT5jb21wb3NlRnJvbShUSSAtIFdJICsgMSwgU0kgLSBISSArIDEsIElCSSwgU0JDT01CT1ApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoUkkgIT0gMCkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBJQkk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihUUkFOU1BPU0VEID09IDAgJiYgKChSRUZDT1JORVIgPT0gSkJJRzJfQ09STkVSX1RPUExFRlQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChSRUZDT1JORVIgPT0gSkJJRzJfQ09STkVSX0JPVFRPTUxFRlQpKSkgeworICAgICAgICAgICAgICAgIENVUlMgPSBDVVJTICsgV0kgLSAxOworICAgICAgICAgICAgfSBlbHNlIGlmKFRSQU5TUE9TRUQgPT0gMSAmJiAoKFJFRkNPUk5FUiA9PSBKQklHMl9DT1JORVJfVE9QTEVGVCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChSRUZDT1JORVIgPT0gSkJJRzJfQ09STkVSX1RPUFJJR0hUKSkpIHsKKyAgICAgICAgICAgICAgICBDVVJTID0gQ1VSUyArIEhJIC0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE5JTlNUQU5DRVMgPSBOSU5TVEFOQ0VTICsgMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBkZWxldGUgcEh1ZmZtYW5EZWNvZGVyOworICAgIHJldHVybiBTQlJFRzsKK2ZhaWxlZDoKKyAgICBkZWxldGUgcEh1ZmZtYW5EZWNvZGVyOworICAgIGRlbGV0ZSBTQlJFRzsKKyAgICByZXR1cm4gTlVMTDsKK30KK0NKQmlnMl9JbWFnZSAqQ0pCaWcyX1RSRFByb2M6OmRlY29kZV9Bcml0aChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnckNvbnRleHQsCisgICAgICAgIEpCaWcySW50RGVjb2RlclN0YXRlICpwSURTKQoreworICAgIEZYX0lOVDMyIFNUUklQVCwgRklSU1RTOworICAgIEZYX0RXT1JEIE5JTlNUQU5DRVM7CisgICAgRlhfSU5UMzIgRFQsIERGUywgQ1VSUzsKKyAgICBGWF9JTlQzMiBDVVJUOworICAgIEZYX0lOVDMyIFNJLCBUSTsKKyAgICBGWF9EV09SRCBJREk7CisgICAgQ0pCaWcyX0ltYWdlICpJQkk7CisgICAgRlhfRFdPUkQgV0ksIEhJOworICAgIEZYX0lOVDMyIElEUzsKKyAgICBGWF9CT09MIFJJOworICAgIEZYX0lOVDMyIFJEV0ksIFJESEksIFJEWEksIFJEWUk7CisgICAgQ0pCaWcyX0ltYWdlICpJQk9JOworICAgIEZYX0RXT1JEIFdPSSwgSE9JOworICAgIENKQmlnMl9JbWFnZSAqU0JSRUc7CisgICAgRlhfQk9PTCBiRmlyc3Q7CisgICAgRlhfSU5UMzIgblJldCwgblZhbDsKKyAgICBGWF9JTlQzMiBiUmV0YWluZWQ7CisgICAgQ0pCaWcyX0FyaXRoSW50RGVjb2RlciAqSUFEVCwgKklBRlMsICpJQURTLCAqSUFJVCwgKklBUkksICpJQVJEVywgKklBUkRILCAqSUFSRFgsICpJQVJEWTsKKyAgICBDSkJpZzJfQXJpdGhJYWlkRGVjb2RlciAqSUFJRDsKKyAgICBDSkJpZzJfR1JSRFByb2MgKnBHUlJEOworICAgIGlmKHBJRFMpIHsKKyAgICAgICAgSUFEVCA9IHBJRFMtPklBRFQ7CisgICAgICAgIElBRlMgPSBwSURTLT5JQUZTOworICAgICAgICBJQURTID0gcElEUy0+SUFEUzsKKyAgICAgICAgSUFJVCA9IHBJRFMtPklBSVQ7CisgICAgICAgIElBUkkgPSBwSURTLT5JQVJJOworICAgICAgICBJQVJEVyA9IHBJRFMtPklBUkRXOworICAgICAgICBJQVJESCA9IHBJRFMtPklBUkRIOworICAgICAgICBJQVJEWCA9IHBJRFMtPklBUkRYOworICAgICAgICBJQVJEWSA9IHBJRFMtPklBUkRZOworICAgICAgICBJQUlEID0gcElEUy0+SUFJRDsKKyAgICAgICAgYlJldGFpbmVkID0gVFJVRTsKKyAgICB9IGVsc2UgeworICAgICAgICBKQklHMl9BTExPQyhJQURULCBDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCkpOworICAgICAgICBKQklHMl9BTExPQyhJQUZTLCBDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCkpOworICAgICAgICBKQklHMl9BTExPQyhJQURTLCBDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCkpOworICAgICAgICBKQklHMl9BTExPQyhJQUlULCBDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCkpOworICAgICAgICBKQklHMl9BTExPQyhJQVJJLCBDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCkpOworICAgICAgICBKQklHMl9BTExPQyhJQVJEVywgQ0pCaWcyX0FyaXRoSW50RGVjb2RlcigpKTsKKyAgICAgICAgSkJJRzJfQUxMT0MoSUFSREgsIENKQmlnMl9Bcml0aEludERlY29kZXIoKSk7CisgICAgICAgIEpCSUcyX0FMTE9DKElBUkRYLCBDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCkpOworICAgICAgICBKQklHMl9BTExPQyhJQVJEWSwgQ0pCaWcyX0FyaXRoSW50RGVjb2RlcigpKTsKKyAgICAgICAgSkJJRzJfQUxMT0MoSUFJRCAsIENKQmlnMl9Bcml0aElhaWREZWNvZGVyKFNCU1lNQ09ERUxFTikpOworICAgICAgICBiUmV0YWluZWQgPSBGQUxTRTsKKyAgICB9CisgICAgSkJJRzJfQUxMT0MoU0JSRUcsIENKQmlnMl9JbWFnZShTQlcsIFNCSCkpOworICAgIFNCUkVHLT5maWxsKFNCREVGUElYRUwpOworICAgIGlmKElBRFQtPmRlY29kZShwQXJpdGhEZWNvZGVyLCAmU1RSSVBUKSA9PSAtMSkgeworICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmUgKGFyaXRoKTogdG9vIHNob3J0LiIpOworICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9CisgICAgU1RSSVBUICo9IFNCU1RSSVBTOworICAgIFNUUklQVCA9IC1TVFJJUFQ7CisgICAgRklSU1RTID0gMDsKKyAgICBOSU5TVEFOQ0VTID0gMDsKKyAgICB3aGlsZShOSU5TVEFOQ0VTIDwgU0JOVU1JTlNUQU5DRVMpIHsKKyAgICAgICAgaWYoSUFEVC0+ZGVjb2RlKHBBcml0aERlY29kZXIsICZEVCkgPT0gLTEpIHsKKyAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZSAoYXJpdGgpOiB0b28gc2hvcnQuIik7CisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgfQorICAgICAgICBEVCAqPSBTQlNUUklQUzsKKyAgICAgICAgU1RSSVBUID0gU1RSSVBUICsgRFQ7CisgICAgICAgIGJGaXJzdCA9IFRSVUU7CisgICAgICAgIGZvcig7OykgeworICAgICAgICAgICAgaWYoYkZpcnN0KSB7CisgICAgICAgICAgICAgICAgaWYoSUFGUy0+ZGVjb2RlKHBBcml0aERlY29kZXIsICZERlMpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZSAoYXJpdGgpOiB0b28gc2hvcnQuIik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBGSVJTVFMgPSBGSVJTVFMgKyBERlM7CisgICAgICAgICAgICAgICAgQ1VSUyA9IEZJUlNUUzsKKyAgICAgICAgICAgICAgICBiRmlyc3QgPSBGQUxTRTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgblJldCA9IElBRFMtPmRlY29kZShwQXJpdGhEZWNvZGVyLCAmSURTKTsKKyAgICAgICAgICAgICAgICBpZihuUmV0ID09IEpCSUcyX09PQikgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYoblJldCAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZSAoYXJpdGgpOiB0b28gc2hvcnQuIik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIENVUlMgPSBDVVJTICsgSURTICsgU0JEU09GRlNFVDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoTklOU1RBTkNFUyA+PSBTQk5VTUlOU1RBTkNFUykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoU0JTVFJJUFMgPT0gMSkgeworICAgICAgICAgICAgICAgIENVUlQgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZihJQUlULT5kZWNvZGUocEFyaXRoRGVjb2RlciwgJm5WYWwpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZSAoYXJpdGgpOiB0b28gc2hvcnQuIik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBDVVJUID0gblZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFRJID0gU1RSSVBUICsgQ1VSVDsKKyAgICAgICAgICAgIGlmKElBSUQtPmRlY29kZShwQXJpdGhEZWNvZGVyLCAmblZhbCkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmUgKGFyaXRoKTogdG9vIHNob3J0LiIpOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgSURJID0gblZhbDsKKyAgICAgICAgICAgIGlmKElESSA+PSBTQk5VTVNZTVMpIHsKKyAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmUgKGFyaXRoKTogc3ltYm9sIGlkIG91dCBvZiByYW5nZS4oJWQvJWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElESSwgU0JOVU1TWU1TKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKFNCUkVGSU5FID09IDApIHsKKyAgICAgICAgICAgICAgICBSSSA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmKElBUkktPmRlY29kZShwQXJpdGhEZWNvZGVyLCAmUkkpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInRleHQgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZSAoYXJpdGgpOiB0b28gc2hvcnQuIik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghU0JTWU1TW0lESV0pIHsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKFJJID09IDApIHsKKyAgICAgICAgICAgICAgICBJQkkgPSBTQlNZTVNbSURJXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYoKElBUkRXLT5kZWNvZGUocEFyaXRoRGVjb2RlciwgJlJEV0kpID09IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgKElBUkRILT5kZWNvZGUocEFyaXRoRGVjb2RlciwgJlJESEkpID09IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgKElBUkRYLT5kZWNvZGUocEFyaXRoRGVjb2RlciwgJlJEWEkpID09IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgKElBUkRZLT5kZWNvZGUocEFyaXRoRGVjb2RlciwgJlJEWUkpID09IC0xKSkgeworICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmUgKGFyaXRoKTogdG9vIHNob3J0LiIpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgSUJPSSA9IFNCU1lNU1tJREldOworICAgICAgICAgICAgICAgIFdPSSA9IElCT0ktPm1fbldpZHRoOworICAgICAgICAgICAgICAgIEhPSSA9IElCT0ktPm1fbkhlaWdodDsKKyAgICAgICAgICAgICAgICBpZiAoKGludCkoV09JICsgUkRXSSkgPCAwIHx8IChpbnQpKEhPSSArIFJESEkpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJ0ZXh0IHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmUgKGFyaXRoKTogSW52YWxpZCBSRFdJIG9yIFJESEkgdmFsdWUuIik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhwR1JSRCwgQ0pCaWcyX0dSUkRQcm9jKCkpOworICAgICAgICAgICAgICAgIHBHUlJELT5HUlcgPSBXT0kgKyBSRFdJOworICAgICAgICAgICAgICAgIHBHUlJELT5HUkggPSBIT0kgKyBSREhJOworICAgICAgICAgICAgICAgIHBHUlJELT5HUlRFTVBMQVRFID0gU0JSVEVNUExBVEU7CisgICAgICAgICAgICAgICAgcEdSUkQtPkdSUkVGRVJFTkNFID0gSUJPSTsKKyAgICAgICAgICAgICAgICBwR1JSRC0+R1JSRUZFUkVOQ0VEWCA9IChSRFdJID4+IDEpICsgUkRYSTsKKyAgICAgICAgICAgICAgICBwR1JSRC0+R1JSRUZFUkVOQ0VEWSA9IChSREhJID4+IDEpICsgUkRZSTsKKyAgICAgICAgICAgICAgICBwR1JSRC0+VFBHUk9OID0gMDsKKyAgICAgICAgICAgICAgICBwR1JSRC0+R1JBVFswXSA9IFNCUkFUWzBdOworICAgICAgICAgICAgICAgIHBHUlJELT5HUkFUWzFdID0gU0JSQVRbMV07CisgICAgICAgICAgICAgICAgcEdSUkQtPkdSQVRbMl0gPSBTQlJBVFsyXTsKKyAgICAgICAgICAgICAgICBwR1JSRC0+R1JBVFszXSA9IFNCUkFUWzNdOworICAgICAgICAgICAgICAgIElCSSA9IHBHUlJELT5kZWNvZGUocEFyaXRoRGVjb2RlciwgZ3JDb250ZXh0KTsKKyAgICAgICAgICAgICAgICBpZihJQkkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBkZWxldGUgcEdSUkQ7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZWxldGUgcEdSUkQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBXSSA9IElCSS0+bV9uV2lkdGg7CisgICAgICAgICAgICBISSA9IElCSS0+bV9uSGVpZ2h0OworICAgICAgICAgICAgaWYoVFJBTlNQT1NFRCA9PSAwICYmICgoUkVGQ09STkVSID09IEpCSUcyX0NPUk5FUl9UT1BSSUdIVCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKFJFRkNPUk5FUiA9PSBKQklHMl9DT1JORVJfQk9UVE9NUklHSFQpKSkgeworICAgICAgICAgICAgICAgIENVUlMgPSBDVVJTICsgV0kgLSAxOworICAgICAgICAgICAgfSBlbHNlIGlmKFRSQU5TUE9TRUQgPT0gMSAmJiAoKFJFRkNPUk5FUiA9PSBKQklHMl9DT1JORVJfQk9UVE9NTEVGVCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChSRUZDT1JORVIgPT0gSkJJRzJfQ09STkVSX0JPVFRPTVJJR0hUKSkpIHsKKyAgICAgICAgICAgICAgICBDVVJTID0gQ1VSUyArIEhJIC0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFNJID0gQ1VSUzsKKyAgICAgICAgICAgIGlmKFRSQU5TUE9TRUQgPT0gMCkgeworICAgICAgICAgICAgICAgIHN3aXRjaChSRUZDT1JORVIpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT1JORVJfVE9QTEVGVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFNCUkVHLT5jb21wb3NlRnJvbShTSSwgVEksIElCSSwgU0JDT01CT1ApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09STkVSX1RPUFJJR0hUOgorICAgICAgICAgICAgICAgICAgICAgICAgU0JSRUctPmNvbXBvc2VGcm9tKFNJIC0gV0kgKyAxLCBUSSwgSUJJLCBTQkNPTUJPUCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT1JORVJfQk9UVE9NTEVGVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFNCUkVHLT5jb21wb3NlRnJvbShTSSwgVEkgLSBISSArIDEsIElCSSwgU0JDT01CT1ApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09STkVSX0JPVFRPTVJJR0hUOgorICAgICAgICAgICAgICAgICAgICAgICAgU0JSRUctPmNvbXBvc2VGcm9tKFNJIC0gV0kgKyAxLCBUSSAtIEhJICsgMSwgSUJJLCBTQkNPTUJPUCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN3aXRjaChSRUZDT1JORVIpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT1JORVJfVE9QTEVGVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFNCUkVHLT5jb21wb3NlRnJvbShUSSwgU0ksIElCSSwgU0JDT01CT1ApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09STkVSX1RPUFJJR0hUOgorICAgICAgICAgICAgICAgICAgICAgICAgU0JSRUctPmNvbXBvc2VGcm9tKFRJIC0gV0kgKyAxLCBTSSwgSUJJLCBTQkNPTUJPUCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT1JORVJfQk9UVE9NTEVGVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFNCUkVHLT5jb21wb3NlRnJvbShUSSwgU0kgLSBISSArIDEsIElCSSwgU0JDT01CT1ApOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09STkVSX0JPVFRPTVJJR0hUOgorICAgICAgICAgICAgICAgICAgICAgICAgU0JSRUctPmNvbXBvc2VGcm9tKFRJIC0gV0kgKyAxLCBTSSAtIEhJICsgMSwgSUJJLCBTQkNPTUJPUCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihSSSAhPSAwKSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIElCSTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKFRSQU5TUE9TRUQgPT0gMCAmJiAoKFJFRkNPUk5FUiA9PSBKQklHMl9DT1JORVJfVE9QTEVGVCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKFJFRkNPUk5FUiA9PSBKQklHMl9DT1JORVJfQk9UVE9NTEVGVCkpKSB7CisgICAgICAgICAgICAgICAgQ1VSUyA9IENVUlMgKyBXSSAtIDE7CisgICAgICAgICAgICB9IGVsc2UgaWYoVFJBTlNQT1NFRCA9PSAxICYmICgoUkVGQ09STkVSID09IEpCSUcyX0NPUk5FUl9UT1BMRUZUKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKFJFRkNPUk5FUiA9PSBKQklHMl9DT1JORVJfVE9QUklHSFQpKSkgeworICAgICAgICAgICAgICAgIENVUlMgPSBDVVJTICsgSEkgLSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgTklOU1RBTkNFUyA9IE5JTlNUQU5DRVMgKyAxOworICAgICAgICB9CisgICAgfQorICAgIGlmKGJSZXRhaW5lZCA9PSBGQUxTRSkgeworICAgICAgICBkZWxldGUgSUFEVDsKKyAgICAgICAgZGVsZXRlIElBRlM7CisgICAgICAgIGRlbGV0ZSBJQURTOworICAgICAgICBkZWxldGUgSUFJVDsKKyAgICAgICAgZGVsZXRlIElBUkk7CisgICAgICAgIGRlbGV0ZSBJQVJEVzsKKyAgICAgICAgZGVsZXRlIElBUkRIOworICAgICAgICBkZWxldGUgSUFSRFg7CisgICAgICAgIGRlbGV0ZSBJQVJEWTsKKyAgICAgICAgZGVsZXRlIElBSUQ7CisgICAgfQorICAgIHJldHVybiBTQlJFRzsKK2ZhaWxlZDoKKyAgICBpZihiUmV0YWluZWQgPT0gRkFMU0UpIHsKKyAgICAgICAgZGVsZXRlIElBRFQ7CisgICAgICAgIGRlbGV0ZSBJQUZTOworICAgICAgICBkZWxldGUgSUFEUzsKKyAgICAgICAgZGVsZXRlIElBSVQ7CisgICAgICAgIGRlbGV0ZSBJQVJJOworICAgICAgICBkZWxldGUgSUFSRFc7CisgICAgICAgIGRlbGV0ZSBJQVJESDsKKyAgICAgICAgZGVsZXRlIElBUkRYOworICAgICAgICBkZWxldGUgSUFSRFk7CisgICAgICAgIGRlbGV0ZSBJQUlEOworICAgIH0KKyAgICBkZWxldGUgU0JSRUc7CisgICAgcmV0dXJuIE5VTEw7Cit9CitDSkJpZzJfU3ltYm9sRGljdCAqQ0pCaWcyX1NERFByb2M6OmRlY29kZV9Bcml0aChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLAorICAgICAgICBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQsIEpCaWcyQXJpdGhDdHggKmdyQ29udGV4dCkKK3sKKyAgICBDSkJpZzJfSW1hZ2UgKipTRE5FV1NZTVM7CisgICAgRlhfRFdPUkQgSENIRUlHSFQsIE5TWU1TREVDT0RFRDsKKyAgICBGWF9JTlQzMiBIQ0RIOworICAgIEZYX0RXT1JEIFNZTVdJRFRILCBUT1RXSURUSCwgSENGSVJTVFNZTTsKKyAgICBGWF9JTlQzMiBEVzsKKyAgICBDSkJpZzJfSW1hZ2UgKkJTOworICAgIEZYX0RXT1JEIEksIEosIFJFRkFHR05JTlNUOworICAgIEZYX0JPT0wgKkVYRkxBR1M7CisgICAgRlhfRFdPUkQgRVhJTkRFWDsKKyAgICBGWF9CT09MIENVUkVYRkxBRzsKKyAgICBGWF9EV09SRCBFWFJVTkxFTkdUSDsKKyAgICBGWF9JTlQzMiBuVmFsOworICAgIEZYX0RXT1JEIG5UbXA7CisgICAgRlhfQk9PTCBTQkhVRkY7CisgICAgRlhfRFdPUkQgU0JOVU1TWU1TOworICAgIEZYX0JZVEUgU0JTWU1DT0RFTEVOOworICAgIEZYX0RXT1JEIElESTsKKyAgICBGWF9JTlQzMiBSRFhJLCBSRFlJOworICAgIENKQmlnMl9JbWFnZSAqKlNCU1lNUzsKKyAgICBDSkJpZzJfSHVmZm1hblRhYmxlICpTQkhVRkZGUywgKlNCSFVGRkRTLCAqU0JIVUZGRFQsICpTQkhVRkZSRFcsICpTQkhVRkZSREgsICpTQkhVRkZSRFgsICpTQkhVRkZSRFksCisgICAgICAgICAgICAgICAgICAgICAgICAqU0JIVUZGUlNJWkU7CisgICAgQ0pCaWcyX0dSUkRQcm9jICpwR1JSRDsKKyAgICBDSkJpZzJfR1JEUHJvYyAqcEdSRDsKKyAgICBDSkJpZzJfQXJpdGhJbnREZWNvZGVyICpJQURILCAqSUFEVywgKklBQUksICpJQVJEWCwgKklBUkRZLCAqSUFFWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICpJQURULCAqSUFGUywgKklBRFMsICpJQUlULCAqSUFSSSwgKklBUkRXLCAqSUFSREg7CisgICAgQ0pCaWcyX0FyaXRoSWFpZERlY29kZXIgKklBSUQ7CisgICAgQ0pCaWcyX1N5bWJvbERpY3QgKnBEaWN0OworICAgIEpCSUcyX0FMTE9DKElBREgsIENKQmlnMl9Bcml0aEludERlY29kZXIoKSk7CisgICAgSkJJRzJfQUxMT0MoSUFEVywgQ0pCaWcyX0FyaXRoSW50RGVjb2RlcigpKTsKKyAgICBKQklHMl9BTExPQyhJQUFJLCBDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCkpOworICAgIEpCSUcyX0FMTE9DKElBUkRYLCBDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCkpOworICAgIEpCSUcyX0FMTE9DKElBUkRZLCBDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCkpOworICAgIEpCSUcyX0FMTE9DKElBRVgsIENKQmlnMl9Bcml0aEludERlY29kZXIoKSk7CisgICAgSkJJRzJfQUxMT0MoSUFEVCwgQ0pCaWcyX0FyaXRoSW50RGVjb2RlcigpKTsKKyAgICBKQklHMl9BTExPQyhJQUZTLCBDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCkpOworICAgIEpCSUcyX0FMTE9DKElBRFMsIENKQmlnMl9Bcml0aEludERlY29kZXIoKSk7CisgICAgSkJJRzJfQUxMT0MoSUFJVCwgQ0pCaWcyX0FyaXRoSW50RGVjb2RlcigpKTsKKyAgICBKQklHMl9BTExPQyhJQVJJLCBDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCkpOworICAgIEpCSUcyX0FMTE9DKElBUkRXLCBDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCkpOworICAgIEpCSUcyX0FMTE9DKElBUkRILCBDSkJpZzJfQXJpdGhJbnREZWNvZGVyKCkpOworICAgIG5UbXAgPSAwOworICAgIHdoaWxlKChGWF9EV09SRCkoMSA8PCBuVG1wKSA8IChTRE5VTUlOU1lNUyArIFNETlVNTkVXU1lNUykpIHsKKyAgICAgICAgblRtcCArKzsKKyAgICB9CisgICAgSkJJRzJfQUxMT0MoSUFJRCwgQ0pCaWcyX0FyaXRoSWFpZERlY29kZXIoKEZYX0JZVEUpblRtcCkpOworICAgIFNETkVXU1lNUyA9IChDSkJpZzJfSW1hZ2UqKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoU0ROVU1ORVdTWU1TLCBzaXplb2YoQ0pCaWcyX0ltYWdlKikpOworICAgIEZYU1lTX21lbXNldDMyKFNETkVXU1lNUywgMCAsIFNETlVNTkVXU1lNUyAqIHNpemVvZihDSkJpZzJfSW1hZ2UqKSk7CisgICAgSENIRUlHSFQgPSAwOworICAgIE5TWU1TREVDT0RFRCA9IDA7CisgICAgd2hpbGUoTlNZTVNERUNPREVEIDwgU0ROVU1ORVdTWU1TKSB7CisgICAgICAgIEJTID0gTlVMTDsKKyAgICAgICAgaWYoSUFESC0+ZGVjb2RlKHBBcml0aERlY29kZXIsICZIQ0RIKSA9PSAtMSkgeworICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgZGVjb2RpbmcgcHJvY2VkdXJlIChhcml0aCk6IHRvbyBzaG9ydC4iKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisgICAgICAgIEhDSEVJR0hUID0gSENIRUlHSFQgKyBIQ0RIOworICAgICAgICBpZiAoKGludClIQ0hFSUdIVCA8IDAgfHwgKGludClIQ0hFSUdIVCA+IEpCSUcyX01BWF9JTUFHRV9TSVpFKSB7CisgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBkZWNvZGluZyBwcm9jZWR1cmUgKGFyaXRoKTogaW52YWxpZCBIQ0hFSUdIVCB2YWx1ZS4iKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisgICAgICAgIFNZTVdJRFRIID0gMDsKKyAgICAgICAgVE9UV0lEVEggPSAwOworICAgICAgICBIQ0ZJUlNUU1lNID0gTlNZTVNERUNPREVEOworICAgICAgICBmb3IoOzspIHsKKyAgICAgICAgICAgIG5WYWwgPSBJQURXLT5kZWNvZGUocEFyaXRoRGVjb2RlciwgJkRXKTsKKyAgICAgICAgICAgIGlmKG5WYWwgPT0gSkJJRzJfT09CKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgaWYoblZhbCAhPSAwKSB7CisgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgZGVjb2RpbmcgcHJvY2VkdXJlIChhcml0aCk6IHRvbyBzaG9ydC4iKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKE5TWU1TREVDT0RFRCA+PSBTRE5VTU5FV1NZTVMpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgZGVjb2RpbmcgcHJvY2VkdXJlIChhcml0aCk6IE5TWU1TREVDT0RFRCA+PSBTRE5VTU5FV1NZTVMuIik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTWU1XSURUSCA9IFNZTVdJRFRIICsgRFc7CisgICAgICAgICAgICAgICAgaWYgKChpbnQpU1lNV0lEVEggPCAwIHx8IChpbnQpU1lNV0lEVEggPiBKQklHMl9NQVhfSU1BR0VfU0laRSkgeworICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBkZWNvZGluZyBwcm9jZWR1cmUgKGFyaXRoKTogaW52YWxpZCBTWU1XSURUSCB2YWx1ZS4iKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChIQ0hFSUdIVCA9PSAwIHx8IFNZTVdJRFRIID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgVE9UV0lEVEggPSBUT1RXSURUSCArIFNZTVdJRFRIOworICAgICAgICAgICAgICAgICAgICBTRE5FV1NZTVNbTlNZTVNERUNPREVEXSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIE5TWU1TREVDT0RFRCA9IE5TWU1TREVDT0RFRCArIDE7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBUT1RXSURUSCA9IFRPVFdJRFRIICsgU1lNV0lEVEg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZihTRFJFRkFHRyA9PSAwKSB7CisgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MocEdSRCwgQ0pCaWcyX0dSRFByb2MoKSk7CisgICAgICAgICAgICAgICAgcEdSRC0+TU1SID0gMDsKKyAgICAgICAgICAgICAgICBwR1JELT5HQlcgPSBTWU1XSURUSDsKKyAgICAgICAgICAgICAgICBwR1JELT5HQkggPSBIQ0hFSUdIVDsKKyAgICAgICAgICAgICAgICBwR1JELT5HQlRFTVBMQVRFID0gU0RURU1QTEFURTsKKyAgICAgICAgICAgICAgICBwR1JELT5UUEdET04gPSAwOworICAgICAgICAgICAgICAgIHBHUkQtPlVTRVNLSVAgPSAwOworICAgICAgICAgICAgICAgIHBHUkQtPkdCQVRbMF0gPSBTREFUWzBdOworICAgICAgICAgICAgICAgIHBHUkQtPkdCQVRbMV0gPSBTREFUWzFdOworICAgICAgICAgICAgICAgIHBHUkQtPkdCQVRbMl0gPSBTREFUWzJdOworICAgICAgICAgICAgICAgIHBHUkQtPkdCQVRbM10gPSBTREFUWzNdOworICAgICAgICAgICAgICAgIHBHUkQtPkdCQVRbNF0gPSBTREFUWzRdOworICAgICAgICAgICAgICAgIHBHUkQtPkdCQVRbNV0gPSBTREFUWzVdOworICAgICAgICAgICAgICAgIHBHUkQtPkdCQVRbNl0gPSBTREFUWzZdOworICAgICAgICAgICAgICAgIHBHUkQtPkdCQVRbN10gPSBTREFUWzddOworICAgICAgICAgICAgICAgIEJTID0gcEdSRC0+ZGVjb2RlX0FyaXRoKHBBcml0aERlY29kZXIsIGdiQ29udGV4dCk7CisgICAgICAgICAgICAgICAgaWYoQlMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBkZWxldGUgcEdSRDsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlbGV0ZSBwR1JEOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZihJQUFJLT5kZWNvZGUocEFyaXRoRGVjb2RlciwgKGludCopJlJFRkFHR05JTlNUKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBkZWNvZGluZyBwcm9jZWR1cmUgKGFyaXRoKTogdG9vIHNob3J0LiIpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoUkVGQUdHTklOU1QgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgIENKQmlnMl9UUkRQcm9jICpwRGVjb2RlcjsKKyAgICAgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MocERlY29kZXIsIENKQmlnMl9UUkRQcm9jKCkpOworICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JIVUZGID0gU0RIVUZGOworICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JSRUZJTkUgPSAxOworICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JXID0gU1lNV0lEVEg7CisgICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkggPSBIQ0hFSUdIVDsKKyAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCTlVNSU5TVEFOQ0VTID0gUkVGQUdHTklOU1Q7CisgICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQlNUUklQUyA9IDE7CisgICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQk5VTVNZTVMgPSBTRE5VTUlOU1lNUyArIE5TWU1TREVDT0RFRDsKKyAgICAgICAgICAgICAgICAgICAgU0JOVU1TWU1TID0gcERlY29kZXItPlNCTlVNU1lNUzsKKyAgICAgICAgICAgICAgICAgICAgblRtcCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlKChGWF9EV09SRCkoMSA8PCBuVG1wKSA8IFNCTlVNU1lNUykgeworICAgICAgICAgICAgICAgICAgICAgICAgblRtcCArKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBTQlNZTUNPREVMRU4gPSAoRlhfQllURSluVG1wOworICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JTWU1DT0RFTEVOID0gU0JTWU1DT0RFTEVOOworICAgICAgICAgICAgICAgICAgICBTQlNZTVMgPSAoQ0pCaWcyX0ltYWdlKiopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKFNCTlVNU1lNUywgc2l6ZW9mKENKQmlnMl9JbWFnZSopKTsKKyAgICAgICAgICAgICAgICAgICAgSkJJRzJfbWVtY3B5KFNCU1lNUywgU0RJTlNZTVMsIFNETlVNSU5TWU1TICogc2l6ZW9mKENKQmlnMl9JbWFnZSopKTsKKyAgICAgICAgICAgICAgICAgICAgSkJJRzJfbWVtY3B5KFNCU1lNUyArIFNETlVNSU5TWU1TLCBTRE5FV1NZTVMsIE5TWU1TREVDT0RFRCAqIHNpemVvZihDSkJpZzJfSW1hZ2UqKSk7CisgICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQlNZTVMgPSBTQlNZTVM7CisgICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkRFRlBJWEVMID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCQ09NQk9QID0gSkJJRzJfQ09NUE9TRV9PUjsKKyAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlRSQU5TUE9TRUQgPSAwOworICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+UkVGQ09STkVSID0gSkJJRzJfQ09STkVSX1RPUExFRlQ7CisgICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkRTT0ZGU0VUID0gMDsKKyAgICAgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MoU0JIVUZGRlMsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0I2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0I2KSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CNikpOworICAgICAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhTQkhVRkZEUywgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjgpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0I4KSk7CisgICAgICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKFNCSFVGRkRULCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjExKSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMTEpKTsKKyAgICAgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MoU0JIVUZGUkRXLCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjE1KSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMTUpKTsKKyAgICAgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MoU0JIVUZGUkRILCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjE1KSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMTUpKTsKKyAgICAgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MoU0JIVUZGUkRYLCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjE1KSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMTUpKTsKKyAgICAgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MoU0JIVUZGUkRZLCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjE1KSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMTUpKTsKKyAgICAgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MoU0JIVUZGUlNJWkUsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IxKSAvIHNpemVvZihKQmlnMlRhYmxlTGluZSksIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMSkpOworICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JIVUZGRlMgPSBTQkhVRkZGUzsKKyAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCSFVGRkRTID0gU0JIVUZGRFM7CisgICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkhVRkZEVCA9IFNCSFVGRkRUOworICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JIVUZGUkRXID0gU0JIVUZGUkRXOworICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JIVUZGUkRIID0gU0JIVUZGUkRIOworICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JIVUZGUkRYID0gU0JIVUZGUkRYOworICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JIVUZGUkRZID0gU0JIVUZGUkRZOworICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JIVUZGUlNJWkUgPSBTQkhVRkZSU0laRTsKKyAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCUlRFTVBMQVRFID0gU0RSVEVNUExBVEU7CisgICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQlJBVFswXSA9IFNEUkFUWzBdOworICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JSQVRbMV0gPSBTRFJBVFsxXTsKKyAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCUkFUWzJdID0gU0RSQVRbMl07CisgICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQlJBVFszXSA9IFNEUkFUWzNdOworICAgICAgICAgICAgICAgICAgICBKQmlnMkludERlY29kZXJTdGF0ZSBpZHM7CisgICAgICAgICAgICAgICAgICAgIGlkcy5JQURUID0gSUFEVDsKKyAgICAgICAgICAgICAgICAgICAgaWRzLklBRlMgPSBJQUZTOworICAgICAgICAgICAgICAgICAgICBpZHMuSUFEUyA9IElBRFM7CisgICAgICAgICAgICAgICAgICAgIGlkcy5JQUlUID0gSUFJVDsKKyAgICAgICAgICAgICAgICAgICAgaWRzLklBUkkgPSBJQVJJOworICAgICAgICAgICAgICAgICAgICBpZHMuSUFSRFcgPSBJQVJEVzsKKyAgICAgICAgICAgICAgICAgICAgaWRzLklBUkRIID0gSUFSREg7CisgICAgICAgICAgICAgICAgICAgIGlkcy5JQVJEWCA9IElBUkRYOworICAgICAgICAgICAgICAgICAgICBpZHMuSUFSRFkgPSBJQVJEWTsKKyAgICAgICAgICAgICAgICAgICAgaWRzLklBSUQgPSBJQUlEOworICAgICAgICAgICAgICAgICAgICBCUyA9IHBEZWNvZGVyLT5kZWNvZGVfQXJpdGgocEFyaXRoRGVjb2RlciwgZ3JDb250ZXh0LCAmaWRzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYoQlMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKFNCU1lNUyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGRlM7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGRFM7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGRFQ7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGUkRXOworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFNCSFVGRlJESDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSRFg7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGUkRZOworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFNCSFVGRlJTSVpFOworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBEZWNvZGVyOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKFNCU1lNUyk7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZGUzsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFNCSFVGRkRTOworICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGRFQ7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSRFc7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSREg7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSRFg7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSRFk7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSU0laRTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBEZWNvZGVyOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZihSRUZBR0dOSU5TVCA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIFNCSFVGRiA9IFNESFVGRjsKKyAgICAgICAgICAgICAgICAgICAgU0JOVU1TWU1TID0gU0ROVU1JTlNZTVMgKyBOU1lNU0RFQ09ERUQ7CisgICAgICAgICAgICAgICAgICAgIGlmKElBSUQtPmRlY29kZShwQXJpdGhEZWNvZGVyLCAoaW50KikmSURJKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgZGVjb2RpbmcgcHJvY2VkdXJlIChhcml0aCk6IHRvbyBzaG9ydC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmKChJQVJEWC0+ZGVjb2RlKHBBcml0aERlY29kZXIsICZSRFhJKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoSUFSRFktPmRlY29kZShwQXJpdGhEZWNvZGVyLCAmUkRZSSkgPT0gLTEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBkZWNvZGluZyBwcm9jZWR1cmUgKGFyaXRoKTogdG9vIHNob3J0LiIpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKElESSA+PSBTQk5VTVNZTVMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInN5bWJvbCBkaWN0aW9uYXJ5IGRlY29kaW5nIHByb2NlZHVyZSAoYXJpdGgpOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiByZWZpbmVtZW50IHJlZmVyZW5jZXMgdW5rbm93biBzeW1ib2wgJWQiLCBJREkpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgU0JTWU1TID0gKENKQmlnMl9JbWFnZSoqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihTQk5VTVNZTVMsIHNpemVvZihDSkJpZzJfSW1hZ2UqKSk7CisgICAgICAgICAgICAgICAgICAgIEpCSUcyX21lbWNweShTQlNZTVMsIFNESU5TWU1TLCBTRE5VTUlOU1lNUyAqIHNpemVvZihDSkJpZzJfSW1hZ2UqKSk7CisgICAgICAgICAgICAgICAgICAgIEpCSUcyX21lbWNweShTQlNZTVMgKyBTRE5VTUlOU1lNUywgU0RORVdTWU1TLCBOU1lNU0RFQ09ERUQgKiBzaXplb2YoQ0pCaWcyX0ltYWdlKikpOworICAgICAgICAgICAgICAgICAgICBpZiAoIVNCU1lNU1tJREldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0JTWU1TKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKHBHUlJELCBDSkJpZzJfR1JSRFByb2MoKSk7CisgICAgICAgICAgICAgICAgICAgIHBHUlJELT5HUlcgPSBTWU1XSURUSDsKKyAgICAgICAgICAgICAgICAgICAgcEdSUkQtPkdSSCA9IEhDSEVJR0hUOworICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JURU1QTEFURSA9IFNEUlRFTVBMQVRFOworICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JSRUZFUkVOQ0UgPSBTQlNZTVNbSURJXTsKKyAgICAgICAgICAgICAgICAgICAgcEdSUkQtPkdSUkVGRVJFTkNFRFggPSBSRFhJOworICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JSRUZFUkVOQ0VEWSA9IFJEWUk7CisgICAgICAgICAgICAgICAgICAgIHBHUlJELT5UUEdST04gPSAwOworICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JBVFswXSA9IFNEUkFUWzBdOworICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JBVFsxXSA9IFNEUkFUWzFdOworICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JBVFsyXSA9IFNEUkFUWzJdOworICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JBVFszXSA9IFNEUkFUWzNdOworICAgICAgICAgICAgICAgICAgICBCUyA9IHBHUlJELT5kZWNvZGUocEFyaXRoRGVjb2RlciwgZ3JDb250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYoQlMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKFNCU1lNUyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcEdSUkQ7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0JTWU1TKTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBHUlJEOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFNETkVXU1lNU1tOU1lNU0RFQ09ERURdID0gQlM7CisgICAgICAgICAgICBCUyA9IE5VTEw7CisgICAgICAgICAgICBOU1lNU0RFQ09ERUQgPSBOU1lNU0RFQ09ERUQgKyAxOworICAgICAgICB9CisgICAgfQorICAgIEVYSU5ERVggPSAwOworICAgIENVUkVYRkxBRyA9IDA7CisgICAgRVhGTEFHUyA9IChGWF9CT09MKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKEZYX0JPT0wpLCAoU0ROVU1JTlNZTVMgKyBTRE5VTU5FV1NZTVMpKTsKKyAgICB3aGlsZShFWElOREVYIDwgU0ROVU1JTlNZTVMgKyBTRE5VTU5FV1NZTVMpIHsKKyAgICAgICAgaWYoSUFFWC0+ZGVjb2RlKHBBcml0aERlY29kZXIsIChpbnQqKSZFWFJVTkxFTkdUSCkgPT0gLTEpIHsKKyAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShFWEZMQUdTKTsKKyAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInN5bWJvbCBkaWN0aW9uYXJ5IGRlY29kaW5nIHByb2NlZHVyZSAoYXJpdGgpOiB0b28gc2hvcnQuIik7CisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgfQorICAgICAgICBpZiAoRVhJTkRFWCArIEVYUlVOTEVOR1RIID4gU0ROVU1JTlNZTVMgKyBTRE5VTU5FV1NZTVMpIHsKKyAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShFWEZMQUdTKTsKKyAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInN5bWJvbCBkaWN0aW9uYXJ5IGRlY29kaW5nIHByb2NlZHVyZSAoYXJpdGgpOiBJbnZhbGlkIEVYUlVOTEVOR1RIIHZhbHVlLiIpOworICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIH0KKyAgICAgICAgaWYoRVhSVU5MRU5HVEggIT0gMCkgeworICAgICAgICAgICAgZm9yKEkgPSBFWElOREVYOyBJIDwgRVhJTkRFWCArIEVYUlVOTEVOR1RIOyBJKyspIHsKKyAgICAgICAgICAgICAgICBFWEZMQUdTW0ldID0gQ1VSRVhGTEFHOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEVYSU5ERVggPSBFWElOREVYICsgRVhSVU5MRU5HVEg7CisgICAgICAgIENVUkVYRkxBRyA9ICFDVVJFWEZMQUc7CisgICAgfQorICAgIEpCSUcyX0FMTE9DKHBEaWN0LCBDSkJpZzJfU3ltYm9sRGljdCgpKTsKKyAgICBwRGljdC0+U0ROVU1FWFNZTVMgPSBTRE5VTUVYU1lNUzsKKyAgICBwRGljdC0+U0RFWFNZTVMgPSAoQ0pCaWcyX0ltYWdlKiopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihDSkJpZzJfSW1hZ2UqKSwgU0ROVU1FWFNZTVMpOworICAgIEkgPSBKID0gMDsKKyAgICBmb3IoSSA9IDA7IEkgPCBTRE5VTUlOU1lNUyArIFNETlVNTkVXU1lNUzsgSSsrKSB7CisgICAgICAgIGlmKEVYRkxBR1NbSV0gJiYgSiA8IFNETlVNRVhTWU1TKSB7CisgICAgICAgICAgICBpZihJIDwgU0ROVU1JTlNZTVMpIHsKKyAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhwRGljdC0+U0RFWFNZTVNbSl0sIENKQmlnMl9JbWFnZSgqU0RJTlNZTVNbSV0pKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcERpY3QtPlNERVhTWU1TW0pdID0gU0RORVdTWU1TW0kgLSBTRE5VTUlOU1lNU107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBKID0gSiArIDE7CisgICAgICAgIH0gZWxzZSBpZiAoIUVYRkxBR1NbSV0gJiYgSSA+PSBTRE5VTUlOU1lNUykgeworICAgICAgICAgICAgZGVsZXRlIFNETkVXU1lNU1tJIC0gU0ROVU1JTlNZTVNdOworICAgICAgICB9CisgICAgfQorICAgIGlmIChKIDwgU0ROVU1FWFNZTVMpIHsKKyAgICAgICAgcERpY3QtPlNETlVNRVhTWU1TID0gSjsKKyAgICB9CisgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKEVYRkxBR1MpOworICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShTRE5FV1NZTVMpOworICAgIGRlbGV0ZSBJQURIOworICAgIGRlbGV0ZSBJQURXOworICAgIGRlbGV0ZSBJQUFJOworICAgIGRlbGV0ZSBJQVJEWDsKKyAgICBkZWxldGUgSUFSRFk7CisgICAgZGVsZXRlIElBRVg7CisgICAgZGVsZXRlIElBSUQ7CisgICAgZGVsZXRlIElBRFQ7CisgICAgZGVsZXRlIElBRlM7CisgICAgZGVsZXRlIElBRFM7CisgICAgZGVsZXRlIElBSVQ7CisgICAgZGVsZXRlIElBUkk7CisgICAgZGVsZXRlIElBUkRXOworICAgIGRlbGV0ZSBJQVJESDsKKyAgICByZXR1cm4gcERpY3Q7CitmYWlsZWQ6CisgICAgZm9yKEkgPSAwOyBJIDwgTlNZTVNERUNPREVEOyBJKyspIHsKKyAgICAgICAgaWYgKFNETkVXU1lNU1tJXSkgeworICAgICAgICAgICAgZGVsZXRlIFNETkVXU1lNU1tJXTsKKyAgICAgICAgICAgIFNETkVXU1lNU1tJXSA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKFNETkVXU1lNUyk7CisgICAgZGVsZXRlIElBREg7CisgICAgZGVsZXRlIElBRFc7CisgICAgZGVsZXRlIElBQUk7CisgICAgZGVsZXRlIElBUkRYOworICAgIGRlbGV0ZSBJQVJEWTsKKyAgICBkZWxldGUgSUFFWDsKKyAgICBkZWxldGUgSUFJRDsKKyAgICBkZWxldGUgSUFEVDsKKyAgICBkZWxldGUgSUFGUzsKKyAgICBkZWxldGUgSUFEUzsKKyAgICBkZWxldGUgSUFJVDsKKyAgICBkZWxldGUgSUFSSTsKKyAgICBkZWxldGUgSUFSRFc7CisgICAgZGVsZXRlIElBUkRIOworICAgIHJldHVybiBOVUxMOworfQorQ0pCaWcyX1N5bWJvbERpY3QgKkNKQmlnMl9TRERQcm9jOjpkZWNvZGVfSHVmZm1hbihDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtLAorICAgICAgICBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQsIEpCaWcyQXJpdGhDdHggKmdyQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgQ0pCaWcyX0ltYWdlICoqU0RORVdTWU1TOworICAgIEZYX0RXT1JEICpTRE5FV1NZTVdJRFRIUzsKKyAgICBGWF9EV09SRCBIQ0hFSUdIVCwgTlNZTVNERUNPREVEOworICAgIEZYX0lOVDMyIEhDREg7CisgICAgRlhfRFdPUkQgU1lNV0lEVEgsIFRPVFdJRFRILCBIQ0ZJUlNUU1lNOworICAgIEZYX0lOVDMyIERXOworICAgIENKQmlnMl9JbWFnZSAqQlMsICpCSEM7CisgICAgRlhfRFdPUkQgSSwgSiwgUkVGQUdHTklOU1Q7CisgICAgRlhfQk9PTCAqRVhGTEFHUzsKKyAgICBGWF9EV09SRCBFWElOREVYOworICAgIEZYX0JPT0wgQ1VSRVhGTEFHOworICAgIEZYX0RXT1JEIEVYUlVOTEVOR1RIOworICAgIEZYX0lOVDMyIG5WYWwsIG5CaXRzOworICAgIEZYX0RXT1JEIG5UbXA7CisgICAgRlhfQk9PTCBTQkhVRkY7CisgICAgRlhfRFdPUkQgU0JOVU1TWU1TOworICAgIEZYX0JZVEUgU0JTWU1DT0RFTEVOOworICAgIEpCaWcySHVmZm1hbkNvZGUgKlNCU1lNQ09ERVM7CisgICAgRlhfRFdPUkQgSURJOworICAgIEZYX0lOVDMyIFJEWEksIFJEWUk7CisgICAgRlhfRFdPUkQgQk1TSVpFOworICAgIEZYX0RXT1JEIHN0cmlkZTsKKyAgICBDSkJpZzJfSW1hZ2UgKipTQlNZTVM7CisgICAgQ0pCaWcyX0h1ZmZtYW5UYWJsZSAqU0JIVUZGRlMsICpTQkhVRkZEUywgKlNCSFVGRkRULCAqU0JIVUZGUkRXLCAqU0JIVUZGUkRILCAqU0JIVUZGUkRYLCAqU0JIVUZGUkRZLAorICAgICAgICAgICAgICAgICAgICAgICAgKlNCSFVGRlJTSVpFLCAqcFRhYmxlOworICAgIENKQmlnMl9IdWZmbWFuRGVjb2RlciAqcEh1ZmZtYW5EZWNvZGVyOworICAgIENKQmlnMl9HUlJEUHJvYyAqcEdSUkQ7CisgICAgQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlcjsKKyAgICBDSkJpZzJfR1JEUHJvYyAqcEdSRDsKKyAgICBDSkJpZzJfU3ltYm9sRGljdCAqcERpY3Q7CisgICAgSkJJRzJfQUxMT0MocEh1ZmZtYW5EZWNvZGVyLCBDSkJpZzJfSHVmZm1hbkRlY29kZXIocFN0cmVhbSkpOworICAgIFNETkVXU1lNUyA9IChDSkJpZzJfSW1hZ2UqKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoU0ROVU1ORVdTWU1TLCBzaXplb2YoQ0pCaWcyX0ltYWdlKikpOworICAgIEZYU1lTX21lbXNldDMyKFNETkVXU1lNUywgMCAsIFNETlVNTkVXU1lNUyAqIHNpemVvZihDSkJpZzJfSW1hZ2UqKSk7CisgICAgU0RORVdTWU1XSURUSFMgPSBOVUxMOworICAgIEJIQyA9IE5VTEw7CisgICAgaWYoU0RSRUZBR0cgPT0gMCkgeworICAgICAgICBTRE5FV1NZTVdJRFRIUyA9IChGWF9EV09SRCAqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihTRE5VTU5FV1NZTVMsIHNpemVvZihGWF9EV09SRCkpOworICAgICAgICBGWFNZU19tZW1zZXQzMihTRE5FV1NZTVdJRFRIUywgMCAsIFNETlVNTkVXU1lNUyAqIHNpemVvZihGWF9EV09SRCkpOworICAgIH0KKyAgICBIQ0hFSUdIVCA9IDA7CisgICAgTlNZTVNERUNPREVEID0gMDsKKyAgICBCUyA9IE5VTEw7CisgICAgd2hpbGUoTlNZTVNERUNPREVEIDwgU0ROVU1ORVdTWU1TKSB7CisgICAgICAgIGlmKHBIdWZmbWFuRGVjb2Rlci0+ZGVjb2RlQVZhbHVlKFNESFVGRkRILCAmSENESCkgIT0gMCkgeworICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgZGVjb2RpbmcgcHJvY2VkdXJlIChodWZmbWFuKTogdG9vIHNob3J0LiIpOworICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIH0KKyAgICAgICAgSENIRUlHSFQgPSBIQ0hFSUdIVCArIEhDREg7CisgICAgICAgIGlmICgoaW50KUhDSEVJR0hUIDwgMCB8fCAoaW50KUhDSEVJR0hUID4gSkJJRzJfTUFYX0lNQUdFX1NJWkUpIHsKKyAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInN5bWJvbCBkaWN0aW9uYXJ5IGRlY29kaW5nIHByb2NlZHVyZSAoaHVmZm1hbik6IGludmFsaWQgSENIRUlHSFQgdmFsdWUuIik7CisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgfQorICAgICAgICBTWU1XSURUSCA9IDA7CisgICAgICAgIFRPVFdJRFRIID0gMDsKKyAgICAgICAgSENGSVJTVFNZTSA9IE5TWU1TREVDT0RFRDsKKyAgICAgICAgZm9yKDs7KSB7CisgICAgICAgICAgICBuVmFsID0gcEh1ZmZtYW5EZWNvZGVyLT5kZWNvZGVBVmFsdWUoU0RIVUZGRFcsICZEVyk7CisgICAgICAgICAgICBpZihuVmFsID09IEpCSUcyX09PQikgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIGlmKG5WYWwgIT0gMCkgeworICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInN5bWJvbCBkaWN0aW9uYXJ5IGRlY29kaW5nIHByb2NlZHVyZSAoaHVmZm1hbik6IHRvbyBzaG9ydC4iKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKE5TWU1TREVDT0RFRCA+PSBTRE5VTU5FV1NZTVMpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgZGVjb2RpbmcgcHJvY2VkdXJlIChodWZmbWFuKTogTlNZTVNERUNPREVEID49IFNETlVNTkVXU1lNUy4iKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFNZTVdJRFRIID0gU1lNV0lEVEggKyBEVzsKKyAgICAgICAgICAgICAgICBpZiAoKGludClTWU1XSURUSCA8IDAgfHwgKGludClTWU1XSURUSCA+IEpCSUcyX01BWF9JTUFHRV9TSVpFKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInN5bWJvbCBkaWN0aW9uYXJ5IGRlY29kaW5nIHByb2NlZHVyZSAoaHVmZm1hbik6IGludmFsaWQgU1lNV0lEVEggdmFsdWUuIik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoSENIRUlHSFQgPT0gMCB8fCBTWU1XSURUSCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIFRPVFdJRFRIID0gVE9UV0lEVEggKyBTWU1XSURUSDsKKyAgICAgICAgICAgICAgICAgICAgU0RORVdTWU1TW05TWU1TREVDT0RFRF0gPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBOU1lNU0RFQ09ERUQgPSBOU1lNU0RFQ09ERUQgKyAxOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVE9UV0lEVEggPSBUT1RXSURUSCArIFNZTVdJRFRIOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoU0RSRUZBR0cgPT0gMSkgeworICAgICAgICAgICAgICAgIGlmKHBIdWZmbWFuRGVjb2Rlci0+ZGVjb2RlQVZhbHVlKFNESFVGRkFHR0lOU1QsIChpbnQqKSZSRUZBR0dOSU5TVCkgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBkZWNvZGluZyBwcm9jZWR1cmUgKGh1ZmZtYW4pOiB0b28gc2hvcnQuIik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBCUyA9IE5VTEw7CisgICAgICAgICAgICAgICAgaWYoUkVGQUdHTklOU1QgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgIENKQmlnMl9UUkRQcm9jICpwRGVjb2RlcjsKKyAgICAgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MocERlY29kZXIsIENKQmlnMl9UUkRQcm9jKCkpOworICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JIVUZGID0gU0RIVUZGOworICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JSRUZJTkUgPSAxOworICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JXID0gU1lNV0lEVEg7CisgICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkggPSBIQ0hFSUdIVDsKKyAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCTlVNSU5TVEFOQ0VTID0gUkVGQUdHTklOU1Q7CisgICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQlNUUklQUyA9IDE7CisgICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQk5VTVNZTVMgPSBTRE5VTUlOU1lNUyArIE5TWU1TREVDT0RFRDsKKyAgICAgICAgICAgICAgICAgICAgU0JOVU1TWU1TID0gcERlY29kZXItPlNCTlVNU1lNUzsKKyAgICAgICAgICAgICAgICAgICAgU0JTWU1DT0RFUyA9IChKQmlnMkh1ZmZtYW5Db2RlKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoU0JOVU1TWU1TLCBzaXplb2YoSkJpZzJIdWZmbWFuQ29kZSkpOworICAgICAgICAgICAgICAgICAgICBuVG1wID0gMTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUoKEZYX0RXT1JEKSgxIDw8IG5UbXApIDwgU0JOVU1TWU1TKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuVG1wICsrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZvcihJID0gMDsgSSA8IFNCTlVNU1lNUzsgSSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTQlNZTUNPREVTW0ldLmNvZGVsZW4gPSBuVG1wOworICAgICAgICAgICAgICAgICAgICAgICAgU0JTWU1DT0RFU1tJXS5jb2RlID0gSTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JTWU1DT0RFUyA9IFNCU1lNQ09ERVM7CisgICAgICAgICAgICAgICAgICAgIFNCU1lNUyA9IChDSkJpZzJfSW1hZ2UqKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoU0JOVU1TWU1TLCBzaXplb2YoQ0pCaWcyX0ltYWdlKikpOworICAgICAgICAgICAgICAgICAgICBKQklHMl9tZW1jcHkoU0JTWU1TLCBTRElOU1lNUywgU0ROVU1JTlNZTVMgKiBzaXplb2YoQ0pCaWcyX0ltYWdlKikpOworICAgICAgICAgICAgICAgICAgICBKQklHMl9tZW1jcHkoU0JTWU1TICsgU0ROVU1JTlNZTVMsIFNETkVXU1lNUywgTlNZTVNERUNPREVEICogc2l6ZW9mKENKQmlnMl9JbWFnZSopKTsKKyAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCU1lNUyA9IFNCU1lNUzsKKyAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCREVGUElYRUwgPSAwOworICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JDT01CT1AgPSBKQklHMl9DT01QT1NFX09SOworICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+VFJBTlNQT1NFRCA9IDA7CisgICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5SRUZDT1JORVIgPSBKQklHMl9DT1JORVJfVE9QTEVGVDsKKyAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCRFNPRkZTRVQgPSAwOworICAgICAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhTQkhVRkZGUywgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjYpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0I2KSk7CisgICAgICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKFNCSFVGRkRTLCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9COCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9COCkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjgpKTsKKyAgICAgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MoU0JIVUZGRFQsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMTEpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0IxMSkpOworICAgICAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhTQkhVRkZSRFcsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMTUpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0IxNSkpOworICAgICAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhTQkhVRkZSREgsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMTUpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0IxNSkpOworICAgICAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhTQkhVRkZSRFgsIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMTUpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0IxNSkpOworICAgICAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhTQkhVRkZSRFksIENKQmlnMl9IdWZmbWFuVGFibGUoSHVmZm1hblRhYmxlX0IxNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMTUpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0IxNSkpOworICAgICAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhTQkhVRkZSU0laRSwgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjEpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0IxKSk7CisgICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkhVRkZGUyA9IFNCSFVGRkZTOworICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JIVUZGRFMgPSBTQkhVRkZEUzsKKyAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCSFVGRkRUID0gU0JIVUZGRFQ7CisgICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkhVRkZSRFcgPSBTQkhVRkZSRFc7CisgICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkhVRkZSREggPSBTQkhVRkZSREg7CisgICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkhVRkZSRFggPSBTQkhVRkZSRFg7CisgICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkhVRkZSRFkgPSBTQkhVRkZSRFk7CisgICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQkhVRkZSU0laRSA9IFNCSFVGRlJTSVpFOworICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JSVEVNUExBVEUgPSBTRFJURU1QTEFURTsKKyAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCUkFUWzBdID0gU0RSQVRbMF07CisgICAgICAgICAgICAgICAgICAgIHBEZWNvZGVyLT5TQlJBVFsxXSA9IFNEUkFUWzFdOworICAgICAgICAgICAgICAgICAgICBwRGVjb2Rlci0+U0JSQVRbMl0gPSBTRFJBVFsyXTsKKyAgICAgICAgICAgICAgICAgICAgcERlY29kZXItPlNCUkFUWzNdID0gU0RSQVRbM107CisgICAgICAgICAgICAgICAgICAgIEJTID0gcERlY29kZXItPmRlY29kZV9IdWZmbWFuKHBTdHJlYW0sIGdyQ29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgIGlmKEJTID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShTQlNZTUNPREVTKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShTQlNZTVMpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFNCSFVGRkZTOworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFNCSFVGRkRTOworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFNCSFVGRkRUOworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFNCSFVGRlJEVzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSREg7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGUkRYOworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFNCSFVGRlJEWTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSU0laRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwRGVjb2RlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShTQlNZTUNPREVTKTsKKyAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKFNCU1lNUyk7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZGUzsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFNCSFVGRkRTOworICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGRFQ7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSRFc7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSREg7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSRFg7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSRFk7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSU0laRTsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBEZWNvZGVyOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZihSRUZBR0dOSU5TVCA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIFNCSFVGRiA9IFNESFVGRjsKKyAgICAgICAgICAgICAgICAgICAgU0JOVU1TWU1TID0gU0ROVU1JTlNZTVMgKyBTRE5VTU5FV1NZTVM7CisgICAgICAgICAgICAgICAgICAgIG5UbXAgPSAxOworICAgICAgICAgICAgICAgICAgICB3aGlsZSgoRlhfRFdPUkQpKDEgPDwgblRtcCkgPCBTQk5VTVNZTVMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5UbXAgKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgU0JTWU1DT0RFTEVOID0gKEZYX0JZVEUpblRtcDsKKyAgICAgICAgICAgICAgICAgICAgU0JTWU1DT0RFUyA9IChKQmlnMkh1ZmZtYW5Db2RlKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoU0JOVU1TWU1TLCBzaXplb2YoSkJpZzJIdWZmbWFuQ29kZSkpOworICAgICAgICAgICAgICAgICAgICBmb3IoSSA9IDA7IEkgPCBTQk5VTVNZTVM7IEkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgU0JTWU1DT0RFU1tJXS5jb2RlbGVuID0gU0JTWU1DT0RFTEVOOworICAgICAgICAgICAgICAgICAgICAgICAgU0JTWU1DT0RFU1tJXS5jb2RlID0gSTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBuVmFsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgbkJpdHMgPSAwOworICAgICAgICAgICAgICAgICAgICBmb3IoOzspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHBTdHJlYW0tPnJlYWQxQml0KCZuVG1wKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKFNCU1lNQ09ERVMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoInN5bWJvbCBkaWN0aW9uYXJ5IGRlY29kaW5nIHByb2NlZHVyZSAoaHVmZm1hbik6IHRvbyBzaG9ydC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG5WYWwgPSAoblZhbCA8PCAxKSB8IG5UbXA7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoSURJID0gMDsgSURJIDwgU0JOVU1TWU1TOyBJREkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKChuVmFsID09IFNCU1lNQ09ERVNbSURJXS5jb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKG5CaXRzID09IFNCU1lNQ09ERVNbSURJXS5jb2RlbGVuKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZihJREkgPCBTQk5VTVNZTVMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0JTWU1DT0RFUyk7CisgICAgICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKFNCSFVGRlJEWCwgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjE1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoSHVmZm1hblRhYmxlX0IxNSkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjE1KSk7CisgICAgICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKFNCSFVGRlJTSVpFLCBDSkJpZzJfSHVmZm1hblRhYmxlKEh1ZmZtYW5UYWJsZV9CMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEh1ZmZtYW5UYWJsZV9CMSkgLyBzaXplb2YoSkJpZzJUYWJsZUxpbmUpLCBIdWZmbWFuVGFibGVfSFRPT0JfQjEpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYoKHBIdWZmbWFuRGVjb2Rlci0+ZGVjb2RlQVZhbHVlKFNCSFVGRlJEWCwgJlJEWEkpICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHBIdWZmbWFuRGVjb2Rlci0+ZGVjb2RlQVZhbHVlKFNCSFVGRlJEWCwgJlJEWUkpICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHBIdWZmbWFuRGVjb2Rlci0+ZGVjb2RlQVZhbHVlKFNCSFVGRlJTSVpFLCAmblZhbCkgIT0gMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBTQkhVRkZSRFg7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGUlNJWkU7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBkZWNvZGluZyBwcm9jZWR1cmUgKGh1ZmZtYW4pOiB0b28gc2hvcnQuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGUkRYOworICAgICAgICAgICAgICAgICAgICBkZWxldGUgU0JIVUZGUlNJWkU7CisgICAgICAgICAgICAgICAgICAgIHBTdHJlYW0tPmFsaWduQnl0ZSgpOworICAgICAgICAgICAgICAgICAgICBuVG1wID0gcFN0cmVhbS0+Z2V0T2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIFNCU1lNUyA9IChDSkJpZzJfSW1hZ2UqKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoU0JOVU1TWU1TLCBzaXplb2YoQ0pCaWcyX0ltYWdlKikpOworICAgICAgICAgICAgICAgICAgICBKQklHMl9tZW1jcHkoU0JTWU1TLCBTRElOU1lNUywgU0ROVU1JTlNZTVMgKiBzaXplb2YoQ0pCaWcyX0ltYWdlKikpOworICAgICAgICAgICAgICAgICAgICBKQklHMl9tZW1jcHkoU0JTWU1TICsgU0ROVU1JTlNZTVMsIFNETkVXU1lNUywgTlNZTVNERUNPREVEICogc2l6ZW9mKENKQmlnMl9JbWFnZSopKTsKKyAgICAgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MocEdSUkQsIENKQmlnMl9HUlJEUHJvYygpKTsKKyAgICAgICAgICAgICAgICAgICAgcEdSUkQtPkdSVyA9IFNZTVdJRFRIOworICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JIID0gSENIRUlHSFQ7CisgICAgICAgICAgICAgICAgICAgIHBHUlJELT5HUlRFTVBMQVRFID0gU0RSVEVNUExBVEU7CisgICAgICAgICAgICAgICAgICAgIHBHUlJELT5HUlJFRkVSRU5DRSA9IFNCU1lNU1tJREldOworICAgICAgICAgICAgICAgICAgICBwR1JSRC0+R1JSRUZFUkVOQ0VEWCA9IFJEWEk7CisgICAgICAgICAgICAgICAgICAgIHBHUlJELT5HUlJFRkVSRU5DRURZID0gUkRZSTsKKyAgICAgICAgICAgICAgICAgICAgcEdSUkQtPlRQR1JPTiA9IDA7CisgICAgICAgICAgICAgICAgICAgIHBHUlJELT5HUkFUWzBdID0gU0RSQVRbMF07CisgICAgICAgICAgICAgICAgICAgIHBHUlJELT5HUkFUWzFdID0gU0RSQVRbMV07CisgICAgICAgICAgICAgICAgICAgIHBHUlJELT5HUkFUWzJdID0gU0RSQVRbMl07CisgICAgICAgICAgICAgICAgICAgIHBHUlJELT5HUkFUWzNdID0gU0RSQVRbM107CisgICAgICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKHBBcml0aERlY29kZXIsIENKQmlnMl9Bcml0aERlY29kZXIocFN0cmVhbSkpOworICAgICAgICAgICAgICAgICAgICBCUyA9IHBHUlJELT5kZWNvZGUocEFyaXRoRGVjb2RlciwgZ3JDb250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYoQlMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKFNCU1lNUyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcEdSUkQ7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcEFyaXRoRGVjb2RlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHBTdHJlYW0tPmFsaWduQnl0ZSgpOworICAgICAgICAgICAgICAgICAgICBwU3RyZWFtLT5vZmZzZXQoMik7CisgICAgICAgICAgICAgICAgICAgIGlmKChGWF9EV09SRCluVmFsICE9IChwU3RyZWFtLT5nZXRPZmZzZXQoKSAtIG5UbXApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgQlM7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0JTWU1TKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwR1JSRDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwQXJpdGhEZWNvZGVyOworICAgICAgICAgICAgICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9FcnJvcigic3ltYm9sIGRpY3Rpb25hcnkgZGVjb2RpbmcgcHJvY2VkdXJlIChodWZmbWFuKToiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJieXRlcyBwcm9jZXNzZWQgYnkgZ2VuZXJpYyByZWZpbmVtZW50IHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmUgZG9lc24ndCBlcXVhbCBTQkhVRkZSU0laRS4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShTQlNZTVMpOworICAgICAgICAgICAgICAgICAgICBkZWxldGUgcEdSUkQ7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwQXJpdGhEZWNvZGVyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTRE5FV1NZTVNbTlNZTVNERUNPREVEXSA9IEJTOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoU0RSRUZBR0cgPT0gMCkgeworICAgICAgICAgICAgICAgIFNETkVXU1lNV0lEVEhTW05TWU1TREVDT0RFRF0gPSBTWU1XSURUSDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE5TWU1TREVDT0RFRCA9IE5TWU1TREVDT0RFRCArIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYoU0RSRUZBR0cgPT0gMCkgeworICAgICAgICAgICAgaWYocEh1ZmZtYW5EZWNvZGVyLT5kZWNvZGVBVmFsdWUoU0RIVUZGQk1TSVpFLCAoRlhfSU5UMzIqKSZCTVNJWkUpICE9IDApIHsKKyAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBkZWNvZGluZyBwcm9jZWR1cmUgKGh1ZmZtYW4pOiB0b28gc2hvcnQuIik7CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwU3RyZWFtLT5hbGlnbkJ5dGUoKTsKKyAgICAgICAgICAgIGlmKEJNU0laRSA9PSAwKSB7CisgICAgICAgICAgICAgICAgc3RyaWRlID0gKFRPVFdJRFRIICsgNykgPj4gMzsKKyAgICAgICAgICAgICAgICBpZihwU3RyZWFtLT5nZXRCeXRlTGVmdCgpID49IHN0cmlkZSAqIEhDSEVJR0hUKSB7CisgICAgICAgICAgICAgICAgICAgIEpCSUcyX0FMTE9DKEJIQywgQ0pCaWcyX0ltYWdlKFRPVFdJRFRILCBIQ0hFSUdIVCkpOworICAgICAgICAgICAgICAgICAgICBmb3IoSSA9IDA7IEkgPCBIQ0hFSUdIVDsgSSArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgSkJJRzJfbWVtY3B5KEJIQy0+bV9wRGF0YSArIEkgKiBCSEMtPm1fblN0cmlkZSwgcFN0cmVhbS0+Z2V0UG9pbnRlcigpLCBzdHJpZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgcFN0cmVhbS0+b2Zmc2V0KHN0cmlkZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBkZWNvZGluZyBwcm9jZWR1cmUgKGh1ZmZtYW4pOiB0b28gc2hvcnQuIik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgSkJJRzJfQUxMT0MocEdSRCwgQ0pCaWcyX0dSRFByb2MoKSk7CisgICAgICAgICAgICAgICAgcEdSRC0+TU1SID0gMTsKKyAgICAgICAgICAgICAgICBwR1JELT5HQlcgPSBUT1RXSURUSDsKKyAgICAgICAgICAgICAgICBwR1JELT5HQkggPSBIQ0hFSUdIVDsKKyAgICAgICAgICAgICAgICBGWENPREVDX1NUQVRVUyBzdGF0dXMgPSBwR1JELT5TdGFydF9kZWNvZGVfTU1SKCZCSEMsIHBTdHJlYW0pOworICAgICAgICAgICAgICAgIHdoaWxlKHN0YXR1cyA9PSBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFKSB7CisgICAgICAgICAgICAgICAgICAgIHBHUkQtPkNvbnRpbnVlX2RlY29kZShwUGF1c2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZWxldGUgcEdSRDsKKyAgICAgICAgICAgICAgICBwU3RyZWFtLT5hbGlnbkJ5dGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5UbXAgPSAwOworICAgICAgICAgICAgaWYgKCFCSEMpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvcihJID0gSENGSVJTVFNZTTsgSSA8IE5TWU1TREVDT0RFRDsgSSsrKSB7CisgICAgICAgICAgICAgICAgU0RORVdTWU1TW0ldID0gQkhDLT5zdWJJbWFnZShuVG1wLCAwLCBTRE5FV1NZTVdJRFRIU1tJXSwgSENIRUlHSFQpOworICAgICAgICAgICAgICAgIG5UbXAgKz0gU0RORVdTWU1XSURUSFNbSV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWxldGUgQkhDOworICAgICAgICAgICAgQkhDID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBFWElOREVYID0gMDsKKyAgICBDVVJFWEZMQUcgPSAwOworICAgIEpCSUcyX0FMTE9DKHBUYWJsZSwgQ0pCaWcyX0h1ZmZtYW5UYWJsZShIdWZmbWFuVGFibGVfQjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihIdWZmbWFuVGFibGVfQjEpIC8gc2l6ZW9mKEpCaWcyVGFibGVMaW5lKSwgSHVmZm1hblRhYmxlX0hUT09CX0IxKSk7CisgICAgRVhGTEFHUyA9IChGWF9CT09MKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKEZYX0JPT0wpLCAoU0ROVU1JTlNZTVMgKyBTRE5VTU5FV1NZTVMpKTsKKyAgICB3aGlsZShFWElOREVYIDwgU0ROVU1JTlNZTVMgKyBTRE5VTU5FV1NZTVMpIHsKKyAgICAgICAgaWYocEh1ZmZtYW5EZWNvZGVyLT5kZWNvZGVBVmFsdWUocFRhYmxlLCAoaW50KikmRVhSVU5MRU5HVEgpICE9IDApIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwVGFibGU7CisgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoRVhGTEFHUyk7CisgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBkZWNvZGluZyBwcm9jZWR1cmUgKGh1ZmZtYW4pOiB0b28gc2hvcnQuIik7CisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgfQorICAgICAgICBpZiAoRVhJTkRFWCArIEVYUlVOTEVOR1RIID4gU0ROVU1JTlNZTVMgKyBTRE5VTU5FV1NZTVMpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwVGFibGU7CisgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoRVhGTEFHUyk7CisgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJzeW1ib2wgZGljdGlvbmFyeSBkZWNvZGluZyBwcm9jZWR1cmUgKGFyaXRoKTogSW52YWxpZCBFWFJVTkxFTkdUSCB2YWx1ZS4iKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICB9CisgICAgICAgIGlmKEVYUlVOTEVOR1RIICE9IDApIHsKKyAgICAgICAgICAgIGZvcihJID0gRVhJTkRFWDsgSSA8IEVYSU5ERVggKyBFWFJVTkxFTkdUSDsgSSsrKSB7CisgICAgICAgICAgICAgICAgRVhGTEFHU1tJXSA9IENVUkVYRkxBRzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBFWElOREVYID0gRVhJTkRFWCArIEVYUlVOTEVOR1RIOworICAgICAgICBDVVJFWEZMQUcgPSAhQ1VSRVhGTEFHOworICAgIH0KKyAgICBkZWxldGUgcFRhYmxlOworICAgIEpCSUcyX0FMTE9DKHBEaWN0LCBDSkJpZzJfU3ltYm9sRGljdCgpKTsKKyAgICBwRGljdC0+U0ROVU1FWFNZTVMgPSBTRE5VTUVYU1lNUzsKKyAgICBwRGljdC0+U0RFWFNZTVMgPSAoQ0pCaWcyX0ltYWdlKiopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihDSkJpZzJfSW1hZ2UqKSwgU0ROVU1FWFNZTVMpOworICAgIEkgPSBKID0gMDsKKyAgICBmb3IoSSA9IDA7IEkgPCBTRE5VTUlOU1lNUyArIFNETlVNTkVXU1lNUzsgSSsrKSB7CisgICAgICAgIGlmKEVYRkxBR1NbSV0gJiYgSiA8IFNETlVNRVhTWU1TKSB7CisgICAgICAgICAgICBpZihJIDwgU0ROVU1JTlNZTVMpIHsKKyAgICAgICAgICAgICAgICBKQklHMl9BTExPQyhwRGljdC0+U0RFWFNZTVNbSl0sIENKQmlnMl9JbWFnZSgqU0RJTlNZTVNbSV0pKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcERpY3QtPlNERVhTWU1TW0pdID0gU0RORVdTWU1TW0kgLSBTRE5VTUlOU1lNU107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBKID0gSiArIDE7CisgICAgICAgIH0gZWxzZSBpZiAoIUVYRkxBR1NbSV0gJiYgSSA+PSBTRE5VTUlOU1lNUykgeworICAgICAgICAgICAgZGVsZXRlIFNETkVXU1lNU1tJIC0gU0ROVU1JTlNZTVNdOworICAgICAgICB9CisgICAgfQorICAgIGlmIChKIDwgU0ROVU1FWFNZTVMpIHsKKyAgICAgICAgcERpY3QtPlNETlVNRVhTWU1TID0gSjsKKyAgICB9CisgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKEVYRkxBR1MpOworICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShTRE5FV1NZTVMpOworICAgIGlmKFNEUkVGQUdHID09IDApIHsKKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKFNETkVXU1lNV0lEVEhTKTsKKyAgICB9CisgICAgZGVsZXRlIHBIdWZmbWFuRGVjb2RlcjsKKyAgICByZXR1cm4gcERpY3Q7CitmYWlsZWQ6CisgICAgZm9yKEkgPSAwOyBJIDwgTlNZTVNERUNPREVEOyBJKyspIHsKKyAgICAgICAgaWYgKFNETkVXU1lNU1tJXSkgeworICAgICAgICAgICAgZGVsZXRlIFNETkVXU1lNU1tJXTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0RORVdTWU1TKTsKKyAgICBpZihTRFJFRkFHRyA9PSAwKSB7CisgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShTRE5FV1NZTVdJRFRIUyk7CisgICAgfQorICAgIGRlbGV0ZSBwSHVmZm1hbkRlY29kZXI7CisgICAgcmV0dXJuIE5VTEw7Cit9CitDSkJpZzJfSW1hZ2UgKkNKQmlnMl9IVFJEUHJvYzo6ZGVjb2RlX0FyaXRoKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsCisgICAgICAgIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgRlhfRFdPUkQgbmcsIG1nOworICAgIEZYX0lOVDMyIHgsIHk7CisgICAgQ0pCaWcyX0ltYWdlICpIU0tJUDsKKyAgICBGWF9EV09SRCBIQlBQOworICAgIEZYX0RXT1JEICpHSTsKKyAgICBDSkJpZzJfSW1hZ2UgKkhUUkVHOworICAgIENKQmlnMl9HU0lEUHJvYyAqcEdJRDsKKyAgICBKQklHMl9BTExPQyhIVFJFRywgQ0pCaWcyX0ltYWdlKEhCVywgSEJIKSk7CisgICAgSFRSRUctPmZpbGwoSERFRlBJWEVMKTsKKyAgICBIU0tJUCA9IE5VTEw7CisgICAgaWYoSEVOQUJMRVNLSVAgPT0gMSkgeworICAgICAgICBKQklHMl9BTExPQyhIU0tJUCwgQ0pCaWcyX0ltYWdlKEhHVywgSEdIKSk7CisgICAgICAgIGZvcihtZyA9IDA7IG1nIDwgSEdIOyBtZysrKSB7CisgICAgICAgICAgICBmb3IobmcgPSAwOyBuZyA8IEhHVzsgbmcrKykgeworICAgICAgICAgICAgICAgIHggPSAoSEdYICsgbWcgKiBIUlkgKyBuZyAqIEhSWCkgPj4gODsKKyAgICAgICAgICAgICAgICB5ID0gKEhHWSArIG1nICogSFJYIC0gbmcgKiBIUlkpID4+IDg7CisgICAgICAgICAgICAgICAgaWYoKHggKyBIUFcgPD0gMCkgfCAoeCA+PSAoRlhfSU5UMzIpSEJXKQorICAgICAgICAgICAgICAgICAgICAgICAgfCAoeSArIEhQSCA8PSAwKSB8ICh5ID49IChGWF9JTlQzMilIUEgpKSB7CisgICAgICAgICAgICAgICAgICAgIEhTS0lQLT5zZXRQaXhlbChuZywgbWcsIDEpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEhTS0lQLT5zZXRQaXhlbChuZywgbWcsIDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBIQlBQID0gMTsKKyAgICB3aGlsZSgoRlhfRFdPUkQpKDEgPDwgSEJQUCkgPCBITlVNUEFUUykgeworICAgICAgICBIQlBQICsrOworICAgIH0KKyAgICBKQklHMl9BTExPQyhwR0lELCBDSkJpZzJfR1NJRFByb2MoKSk7CisgICAgcEdJRC0+R1NNTVIgPSBITU1SOworICAgIHBHSUQtPkdTVyA9IEhHVzsKKyAgICBwR0lELT5HU0ggPSBIR0g7CisgICAgcEdJRC0+R1NCUFAgPSAoRlhfQllURSlIQlBQOworICAgIHBHSUQtPkdTVVNFU0tJUCA9IEhFTkFCTEVTS0lQOworICAgIHBHSUQtPkdTS0lQID0gSFNLSVA7CisgICAgcEdJRC0+R1NURU1QTEFURSA9IEhURU1QTEFURTsKKyAgICBHSSA9IHBHSUQtPmRlY29kZV9Bcml0aChwQXJpdGhEZWNvZGVyLCBnYkNvbnRleHQsIHBQYXVzZSk7CisgICAgaWYoR0kgPT0gTlVMTCkgeworICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9CisgICAgZm9yKG1nID0gMDsgbWcgPCBIR0g7IG1nKyspIHsKKyAgICAgICAgZm9yKG5nID0gMDsgbmcgPCBIR1c7IG5nKyspIHsKKyAgICAgICAgICAgIHggPSAoSEdYICsgbWcgKiBIUlkgKyBuZyAqIEhSWCkgPj4gODsKKyAgICAgICAgICAgIHkgPSAoSEdZICsgbWcgKiBIUlggLSBuZyAqIEhSWSkgPj4gODsKKyAgICAgICAgICAgIEZYX0RXT1JEIHBhdF9pbmRleCA9IEdJW21nICogSEdXICsgbmddOworICAgICAgICAgICAgaWYgKHBhdF9pbmRleCA+PSBITlVNUEFUUykgeworICAgICAgICAgICAgICAgIHBhdF9pbmRleCA9IEhOVU1QQVRTIC0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEhUUkVHLT5jb21wb3NlRnJvbSh4LCB5LCBIUEFUU1twYXRfaW5kZXhdLCBIQ09NQk9QKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoR0kpOworICAgIGlmKEhTS0lQKSB7CisgICAgICAgIGRlbGV0ZSBIU0tJUDsKKyAgICB9CisgICAgZGVsZXRlIHBHSUQ7CisgICAgcmV0dXJuIEhUUkVHOworZmFpbGVkOgorICAgIGlmKEhTS0lQKSB7CisgICAgICAgIGRlbGV0ZSBIU0tJUDsKKyAgICB9CisgICAgZGVsZXRlIHBHSUQ7CisgICAgZGVsZXRlIEhUUkVHOworICAgIHJldHVybiBOVUxMOworfQorQ0pCaWcyX0ltYWdlICpDSkJpZzJfSFRSRFByb2M6OmRlY29kZV9NTVIoQ0pCaWcyX0JpdFN0cmVhbSAqcFN0cmVhbSwgSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgRlhfRFdPUkQgbmcsIG1nOworICAgIEZYX0lOVDMyIHgsIHk7CisgICAgRlhfRFdPUkQgSEJQUDsKKyAgICBGWF9EV09SRCAqR0k7CisgICAgQ0pCaWcyX0ltYWdlICpIVFJFRzsKKyAgICBDSkJpZzJfR1NJRFByb2MgKnBHSUQ7CisgICAgSkJJRzJfQUxMT0MoSFRSRUcsIENKQmlnMl9JbWFnZShIQlcsIEhCSCkpOworICAgIEhUUkVHLT5maWxsKEhERUZQSVhFTCk7CisgICAgSEJQUCA9IDE7CisgICAgd2hpbGUoKEZYX0RXT1JEKSgxIDw8IEhCUFApIDwgSE5VTVBBVFMpIHsKKyAgICAgICAgSEJQUCArKzsKKyAgICB9CisgICAgSkJJRzJfQUxMT0MocEdJRCwgQ0pCaWcyX0dTSURQcm9jKCkpOworICAgIHBHSUQtPkdTTU1SID0gSE1NUjsKKyAgICBwR0lELT5HU1cgPSBIR1c7CisgICAgcEdJRC0+R1NIID0gSEdIOworICAgIHBHSUQtPkdTQlBQID0gKEZYX0JZVEUpSEJQUDsKKyAgICBwR0lELT5HU1VTRVNLSVAgPSAwOworICAgIEdJID0gcEdJRC0+ZGVjb2RlX01NUihwU3RyZWFtLCBwUGF1c2UpOworICAgIGlmKEdJID09IE5VTEwpIHsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIGZvcihtZyA9IDA7IG1nIDwgSEdIOyBtZysrKSB7CisgICAgICAgIGZvcihuZyA9IDA7IG5nIDwgSEdXOyBuZysrKSB7CisgICAgICAgICAgICB4ID0gKEhHWCArIG1nICogSFJZICsgbmcgKiBIUlgpID4+IDg7CisgICAgICAgICAgICB5ID0gKEhHWSArIG1nICogSFJYIC0gbmcgKiBIUlkpID4+IDg7CisgICAgICAgICAgICBGWF9EV09SRCBwYXRfaW5kZXggPSBHSVttZyAqIEhHVyArIG5nXTsKKyAgICAgICAgICAgIGlmIChwYXRfaW5kZXggPj0gSE5VTVBBVFMpIHsKKyAgICAgICAgICAgICAgICBwYXRfaW5kZXggPSBITlVNUEFUUyAtIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBIVFJFRy0+Y29tcG9zZUZyb20oeCwgeSwgSFBBVFNbcGF0X2luZGV4XSwgSENPTUJPUCk7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKEdJKTsKKyAgICBkZWxldGUgcEdJRDsKKyAgICByZXR1cm4gSFRSRUc7CitmYWlsZWQ6CisgICAgZGVsZXRlIHBHSUQ7CisgICAgZGVsZXRlIEhUUkVHOworICAgIHJldHVybiBOVUxMOworfQorQ0pCaWcyX1BhdHRlcm5EaWN0ICpDSkJpZzJfUEREUHJvYzo6ZGVjb2RlX0FyaXRoKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsCisgICAgICAgIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgRlhfRFdPUkQgR1JBWTsKKyAgICBDSkJpZzJfSW1hZ2UgKkJIREMgPSBOVUxMOworICAgIENKQmlnMl9QYXR0ZXJuRGljdCAqcERpY3Q7CisgICAgQ0pCaWcyX0dSRFByb2MgKnBHUkQ7CisgICAgSkJJRzJfQUxMT0MocERpY3QsIENKQmlnMl9QYXR0ZXJuRGljdCgpKTsKKyAgICBwRGljdC0+TlVNUEFUUyA9IEdSQVlNQVggKyAxOworICAgIHBEaWN0LT5IRFBBVFMgPSAoQ0pCaWcyX0ltYWdlKiopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihDSkJpZzJfSW1hZ2UqKSwgcERpY3QtPk5VTVBBVFMpOworICAgIEpCSUcyX21lbXNldChwRGljdC0+SERQQVRTLCAwLCBzaXplb2YoQ0pCaWcyX0ltYWdlKikqcERpY3QtPk5VTVBBVFMpOworICAgIEpCSUcyX0FMTE9DKHBHUkQsIENKQmlnMl9HUkRQcm9jKCkpOworICAgIHBHUkQtPk1NUiA9IEhETU1SOworICAgIHBHUkQtPkdCVyA9IChHUkFZTUFYICsgMSkgKiBIRFBXOworICAgIHBHUkQtPkdCSCA9IEhEUEg7CisgICAgcEdSRC0+R0JURU1QTEFURSA9IEhEVEVNUExBVEU7CisgICAgcEdSRC0+VFBHRE9OID0gMDsKKyAgICBwR1JELT5VU0VTS0lQID0gMDsKKyAgICBwR1JELT5HQkFUWzBdID0gLShGWF9JTlQzMilIRFBXOworICAgIHBHUkQtPkdCQVRbMV0gPSAwOworICAgIGlmKHBHUkQtPkdCVEVNUExBVEUgPT0gMCkgeworICAgICAgICBwR1JELT5HQkFUWzJdID0gLTM7CisgICAgICAgIHBHUkQtPkdCQVRbM10gPSAtMTsKKyAgICAgICAgcEdSRC0+R0JBVFs0XSA9IDI7CisgICAgICAgIHBHUkQtPkdCQVRbNV0gPSAtMjsKKyAgICAgICAgcEdSRC0+R0JBVFs2XSA9IC0yOworICAgICAgICBwR1JELT5HQkFUWzddID0gLTI7CisgICAgfQorICAgIEZYQ09ERUNfU1RBVFVTIHN0YXR1cyA9IHBHUkQtPlN0YXJ0X2RlY29kZV9Bcml0aCgmQkhEQywgcEFyaXRoRGVjb2RlciwgZ2JDb250ZXh0KTsKKyAgICB3aGlsZShzdGF0dXMgPT0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRSkgeworICAgICAgICBwR1JELT5Db250aW51ZV9kZWNvZGUocFBhdXNlKTsKKyAgICB9CisgICAgaWYoQkhEQyA9PSBOVUxMKSB7CisgICAgICAgIGRlbGV0ZSBwR1JEOworICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9CisgICAgZGVsZXRlIHBHUkQ7CisgICAgR1JBWSA9IDA7CisgICAgd2hpbGUoR1JBWSA8PSBHUkFZTUFYKSB7CisgICAgICAgIHBEaWN0LT5IRFBBVFNbR1JBWV0gPSBCSERDLT5zdWJJbWFnZShIRFBXICogR1JBWSwgMCwgSERQVywgSERQSCk7CisgICAgICAgIEdSQVkgPSBHUkFZICsgMTsKKyAgICB9CisgICAgZGVsZXRlIEJIREM7CisgICAgcmV0dXJuIHBEaWN0OworZmFpbGVkOgorICAgIGRlbGV0ZSBwRGljdDsKKyAgICByZXR1cm4gTlVMTDsKK30KKworQ0pCaWcyX1BhdHRlcm5EaWN0ICpDSkJpZzJfUEREUHJvYzo6ZGVjb2RlX01NUihDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtLCBJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBGWF9EV09SRCBHUkFZOworICAgIENKQmlnMl9JbWFnZSAqQkhEQyA9IE5VTEw7CisgICAgQ0pCaWcyX1BhdHRlcm5EaWN0ICpwRGljdDsKKyAgICBDSkJpZzJfR1JEUHJvYyAqcEdSRDsKKyAgICBKQklHMl9BTExPQyhwRGljdCwgQ0pCaWcyX1BhdHRlcm5EaWN0KCkpOworICAgIHBEaWN0LT5OVU1QQVRTID0gR1JBWU1BWCArIDE7CisgICAgcERpY3QtPkhEUEFUUyA9IChDSkJpZzJfSW1hZ2UqKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKENKQmlnMl9JbWFnZSopLCBwRGljdC0+TlVNUEFUUyk7CisgICAgSkJJRzJfbWVtc2V0KHBEaWN0LT5IRFBBVFMsIDAsIHNpemVvZihDSkJpZzJfSW1hZ2UqKSpwRGljdC0+TlVNUEFUUyk7CisgICAgSkJJRzJfQUxMT0MocEdSRCwgQ0pCaWcyX0dSRFByb2MoKSk7CisgICAgcEdSRC0+TU1SID0gSERNTVI7CisgICAgcEdSRC0+R0JXID0gKEdSQVlNQVggKyAxKSAqIEhEUFc7CisgICAgcEdSRC0+R0JIID0gSERQSDsKKyAgICBGWENPREVDX1NUQVRVUyBzdGF0dXMgPSBwR1JELT5TdGFydF9kZWNvZGVfTU1SKCZCSERDLCBwU3RyZWFtKTsKKyAgICB3aGlsZShzdGF0dXMgPT0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRSkgeworICAgICAgICBwR1JELT5Db250aW51ZV9kZWNvZGUocFBhdXNlKTsKKyAgICB9CisgICAgaWYoQkhEQyA9PSBOVUxMKSB7CisgICAgICAgIGRlbGV0ZSBwR1JEOworICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9CisgICAgZGVsZXRlIHBHUkQ7CisgICAgR1JBWSA9IDA7CisgICAgd2hpbGUoR1JBWSA8PSBHUkFZTUFYKSB7CisgICAgICAgIHBEaWN0LT5IRFBBVFNbR1JBWV0gPSBCSERDLT5zdWJJbWFnZShIRFBXICogR1JBWSwgMCwgSERQVywgSERQSCk7CisgICAgICAgIEdSQVkgPSBHUkFZICsgMTsKKyAgICB9CisgICAgZGVsZXRlIEJIREM7CisgICAgcmV0dXJuIHBEaWN0OworZmFpbGVkOgorICAgIGRlbGV0ZSBwRGljdDsKKyAgICByZXR1cm4gTlVMTDsKK30KK0ZYX0RXT1JEICpDSkJpZzJfR1NJRFByb2M6OmRlY29kZV9Bcml0aChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgQ0pCaWcyX0ltYWdlICoqR1NQTEFORVM7CisgICAgRlhfSU5UMzIgSiwgSzsKKyAgICBGWF9EV09SRCB4LCB5OworICAgIEZYX0RXT1JEICpHU1ZBTFM7CisgICAgQ0pCaWcyX0dSRFByb2MgKnBHUkQ7CisgICAgR1NQTEFORVMgPSAoQ0pCaWcyX0ltYWdlICoqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihzaXplb2YoQ0pCaWcyX0ltYWdlKiksIEdTQlBQKTsKKyAgICBpZiAoIUdTUExBTkVTKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBHU1ZBTFMgPSAoRlhfRFdPUkQqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMyhzaXplb2YoRlhfRFdPUkQpLCBHU1csIEdTSCk7CisgICAgaWYgKCFHU1ZBTFMpIHsKKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKEdTUExBTkVTKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIEpCSUcyX21lbXNldChHU1BMQU5FUywgMCwgc2l6ZW9mKENKQmlnMl9JbWFnZSopKkdTQlBQKTsKKyAgICBKQklHMl9tZW1zZXQoR1NWQUxTLCAwLCBzaXplb2YoRlhfRFdPUkQpKkdTVyAqIEdTSCk7CisgICAgSkJJRzJfQUxMT0MocEdSRCwgQ0pCaWcyX0dSRFByb2MoKSk7CisgICAgcEdSRC0+TU1SID0gR1NNTVI7CisgICAgcEdSRC0+R0JXID0gR1NXOworICAgIHBHUkQtPkdCSCA9IEdTSDsKKyAgICBwR1JELT5HQlRFTVBMQVRFID0gR1NURU1QTEFURTsKKyAgICBwR1JELT5UUEdET04gPSAwOworICAgIHBHUkQtPlVTRVNLSVAgPSBHU1VTRVNLSVA7CisgICAgcEdSRC0+U0tJUCA9IEdTS0lQOworICAgIGlmKEdTVEVNUExBVEUgPD0gMSkgeworICAgICAgICBwR1JELT5HQkFUWzBdID0gMzsKKyAgICB9IGVsc2UgeworICAgICAgICBwR1JELT5HQkFUWzBdID0gMjsKKyAgICB9CisgICAgcEdSRC0+R0JBVFsxXSA9IC0xOworICAgIGlmKHBHUkQtPkdCVEVNUExBVEUgPT0gMCkgeworICAgICAgICBwR1JELT5HQkFUWzJdID0gLTM7CisgICAgICAgIHBHUkQtPkdCQVRbM10gPSAtMTsKKyAgICAgICAgcEdSRC0+R0JBVFs0XSA9IDI7CisgICAgICAgIHBHUkQtPkdCQVRbNV0gPSAtMjsKKyAgICAgICAgcEdSRC0+R0JBVFs2XSA9IC0yOworICAgICAgICBwR1JELT5HQkFUWzddID0gLTI7CisgICAgfQorICAgIEZYQ09ERUNfU1RBVFVTIHN0YXR1cyA9IHBHUkQtPlN0YXJ0X2RlY29kZV9Bcml0aCgmR1NQTEFORVNbR1NCUFAgLSAxXSwgcEFyaXRoRGVjb2RlciwgZ2JDb250ZXh0KTsKKyAgICB3aGlsZShzdGF0dXMgPT0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRSkgeworICAgICAgICBwR1JELT5Db250aW51ZV9kZWNvZGUocFBhdXNlKTsKKyAgICB9CisgICAgaWYoR1NQTEFORVNbR1NCUFAgLSAxXSA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKyAgICBKID0gR1NCUFAgLSAyOworICAgIHdoaWxlKEogPj0gMCkgeworICAgICAgICBGWENPREVDX1NUQVRVUyBzdGF0dXMgPSBwR1JELT5TdGFydF9kZWNvZGVfQXJpdGgoJkdTUExBTkVTW0pdLCBwQXJpdGhEZWNvZGVyLCBnYkNvbnRleHQpOworICAgICAgICB3aGlsZShzdGF0dXMgPT0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRSkgeworICAgICAgICAgICAgcEdSRC0+Q29udGludWVfZGVjb2RlKHBQYXVzZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYoR1NQTEFORVNbSl0gPT0gTlVMTCkgeworICAgICAgICAgICAgZm9yKEsgPSBHU0JQUCAtIDE7IEsgPiBKOyBLLS0pIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgR1NQTEFORVNbS107CisgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgR1NQTEFORVNbSl0tPmNvbXBvc2VGcm9tKDAsIDAsIEdTUExBTkVTW0ogKyAxXSwgSkJJRzJfQ09NUE9TRV9YT1IpOworICAgICAgICBKID0gSiAtIDE7CisgICAgfQorICAgIGZvcih5ID0gMDsgeSA8IEdTSDsgeSsrKSB7CisgICAgICAgIGZvcih4ID0gMDsgeCA8IEdTVzsgeCsrKSB7CisgICAgICAgICAgICBmb3IoSiA9IDA7IEogPCBHU0JQUDsgSisrKSB7CisgICAgICAgICAgICAgICAgR1NWQUxTW3kgKiBHU1cgKyB4XSB8PSBHU1BMQU5FU1tKXS0+Z2V0UGl4ZWwoeCwgeSkgPDwgSjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IoSiA9IDA7IEogPCBHU0JQUDsgSisrKSB7CisgICAgICAgIGRlbGV0ZSBHU1BMQU5FU1tKXTsKKyAgICB9CisgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKEdTUExBTkVTKTsKKyAgICBkZWxldGUgcEdSRDsKKyAgICByZXR1cm4gR1NWQUxTOworZmFpbGVkOgorICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShHU1BMQU5FUyk7CisgICAgZGVsZXRlIHBHUkQ7CisgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKEdTVkFMUyk7CisgICAgcmV0dXJuIE5VTEw7Cit9CitGWF9EV09SRCAqQ0pCaWcyX0dTSURQcm9jOjpkZWNvZGVfTU1SKENKQmlnMl9CaXRTdHJlYW0gKnBTdHJlYW0sIElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIENKQmlnMl9JbWFnZSAqKkdTUExBTkVTOworICAgIEZYX0lOVDMyIEosIEs7CisgICAgRlhfRFdPUkQgeCwgeTsKKyAgICBGWF9EV09SRCAqR1NWQUxTOworICAgIENKQmlnMl9HUkRQcm9jICpwR1JEOworICAgIEdTUExBTkVTID0gKENKQmlnMl9JbWFnZSAqKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKENKQmlnMl9JbWFnZSopLCBHU0JQUCk7CisgICAgaWYgKCFHU1BMQU5FUykgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgR1NWQUxTID0gKEZYX0RXT1JEKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzMoc2l6ZW9mKEZYX0RXT1JEKSwgR1NXLCBHU0gpOworICAgIGlmICghR1NWQUxTKSB7CisgICAgICAgIGlmIChHU1BMQU5FUykgeworICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKEdTUExBTkVTKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgSkJJRzJfbWVtc2V0KEdTUExBTkVTLCAwLCBzaXplb2YoQ0pCaWcyX0ltYWdlKikqR1NCUFApOworICAgIEpCSUcyX21lbXNldChHU1ZBTFMsIDAsIHNpemVvZihGWF9EV09SRCkqR1NXICogR1NIKTsKKyAgICBKQklHMl9BTExPQyhwR1JELCBDSkJpZzJfR1JEUHJvYygpKTsKKyAgICBwR1JELT5NTVIgPSBHU01NUjsKKyAgICBwR1JELT5HQlcgPSBHU1c7CisgICAgcEdSRC0+R0JIID0gR1NIOworICAgIEZYQ09ERUNfU1RBVFVTIHN0YXR1cyA9IHBHUkQtPlN0YXJ0X2RlY29kZV9NTVIoJkdTUExBTkVTW0dTQlBQIC0gMV0sIHBTdHJlYW0pOworICAgIHdoaWxlKHN0YXR1cyA9PSBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFKSB7CisgICAgICAgIHBHUkQtPkNvbnRpbnVlX2RlY29kZShwUGF1c2UpOworICAgIH0KKyAgICBpZihHU1BMQU5FU1tHU0JQUCAtIDFdID09IE5VTEwpIHsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIHBTdHJlYW0tPmFsaWduQnl0ZSgpOworICAgIHBTdHJlYW0tPm9mZnNldCgzKTsKKyAgICBKID0gR1NCUFAgLSAyOworICAgIHdoaWxlKEogPj0gMCkgeworICAgICAgICBGWENPREVDX1NUQVRVUyBzdGF0dXMgPSBwR1JELT5TdGFydF9kZWNvZGVfTU1SKCZHU1BMQU5FU1tKXSwgcFN0cmVhbSk7CisgICAgICAgIHdoaWxlKHN0YXR1cyA9PSBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFKSB7CisgICAgICAgICAgICBwR1JELT5Db250aW51ZV9kZWNvZGUocFBhdXNlKTsKKyAgICAgICAgfQorICAgICAgICBpZihHU1BMQU5FU1tKXSA9PSBOVUxMKSB7CisgICAgICAgICAgICBmb3IoSyA9IEdTQlBQIC0gMTsgSyA+IEo7IEstLSkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBHU1BMQU5FU1tLXTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwU3RyZWFtLT5hbGlnbkJ5dGUoKTsKKyAgICAgICAgcFN0cmVhbS0+b2Zmc2V0KDMpOworICAgICAgICBHU1BMQU5FU1tKXS0+Y29tcG9zZUZyb20oMCwgMCwgR1NQTEFORVNbSiArIDFdLCBKQklHMl9DT01QT1NFX1hPUik7CisgICAgICAgIEogPSBKIC0gMTsKKyAgICB9CisgICAgZm9yKHkgPSAwOyB5IDwgR1NIOyB5KyspIHsKKyAgICAgICAgZm9yKHggPSAwOyB4IDwgR1NXOyB4KyspIHsKKyAgICAgICAgICAgIGZvcihKID0gMDsgSiA8IEdTQlBQOyBKKyspIHsKKyAgICAgICAgICAgICAgICBHU1ZBTFNbeSAqIEdTVyArIHhdIHw9IEdTUExBTkVTW0pdLT5nZXRQaXhlbCh4LCB5KSA8PCBKOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGZvcihKID0gMDsgSiA8IEdTQlBQOyBKKyspIHsKKyAgICAgICAgZGVsZXRlIEdTUExBTkVTW0pdOworICAgIH0KKyAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoR1NQTEFORVMpOworICAgIGRlbGV0ZSBwR1JEOworICAgIHJldHVybiBHU1ZBTFM7CitmYWlsZWQ6CisgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKEdTUExBTkVTKTsKKyAgICBkZWxldGUgcEdSRDsKKyAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoR1NWQUxTKTsKKyAgICByZXR1cm4gTlVMTDsKK30KK0ZYQ09ERUNfU1RBVFVTIENKQmlnMl9HUkRQcm9jOjpTdGFydF9kZWNvZGVfQXJpdGgoQ0pCaWcyX0ltYWdlKiogcEltYWdlLCBDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQsIElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIGlmIChHQlcgPT0gMCB8fCBHQkggPT0gMCkgeworICAgICAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsKKyAgICAgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7CisgICAgfQorICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfUkVBRFk7CisgICAgbV9wUGF1c2UgPSBwUGF1c2U7CisgICAgaWYoKnBJbWFnZSA9PSBOVUxMKSB7CisgICAgICAgIEpCSUcyX0FMTE9DKCgqcEltYWdlKSwgQ0pCaWcyX0ltYWdlKEdCVywgR0JIKSk7CisgICAgfQorICAgIGlmICgoKnBJbWFnZSktPm1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICBkZWxldGUgKnBJbWFnZTsKKyAgICAgICAgKnBJbWFnZSA9IE5VTEw7CisgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRXJyb3IoIkdlbmVyaWMgcmVnaW9uIGRlY29kaW5nIHByb2NlZHVyZTogQ3JlYXRlIEltYWdlIEZhaWxlZCB3aXRoIHdpZHRoID0gJWQsIGhlaWdodCA9ICVkXG4iLCBHQlcsIEdCSCk7CisgICAgICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19FUlJPUjsKKyAgICAgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0VSUk9SOworICAgIH0KKyAgICBtX0RlY29kZVR5cGUgPSAxOworICAgIG1fcEltYWdlID0gcEltYWdlOworICAgICgqbV9wSW1hZ2UpLT5maWxsKDApOworICAgIG1fcEFyaXRoRGVjb2RlciA9IHBBcml0aERlY29kZXI7CisgICAgbV9nYkNvbnRleHQgPSBnYkNvbnRleHQ7CisgICAgTFRQID0gMDsKKyAgICBtX3BMaW5lID0gTlVMTDsKKyAgICBtX2xvb3BJbmRleCA9IDA7CisgICAgcmV0dXJuIGRlY29kZV9Bcml0aChwUGF1c2UpOworfQorRlhDT0RFQ19TVEFUVVMgQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aChJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBpbnQgaWxpbmUgPSBtX2xvb3BJbmRleDsKKyAgICBDSkJpZzJfSW1hZ2UqIHBJbWFnZSA9ICptX3BJbWFnZTsKKyAgICBpZihHQlRFTVBMQVRFID09IDApIHsKKyAgICAgICAgaWYoKEdCQVRbMF0gPT0gMykgJiYgKEdCQVRbMV0gPT0gKHNpZ25lZCBjaGFyKSAtIDEpCisgICAgICAgICAgICAgICAgJiYgKEdCQVRbMl0gPT0gKHNpZ25lZCBjaGFyKSAtIDMpICYmIChHQkFUWzNdID09IChzaWduZWQgY2hhcikgLSAxKQorICAgICAgICAgICAgICAgICYmIChHQkFUWzRdID09IDIpICYmIChHQkFUWzVdID09IChzaWduZWQgY2hhcikgLSAyKQorICAgICAgICAgICAgICAgICYmIChHQkFUWzZdID09IChzaWduZWQgY2hhcikgLSAyKSAmJiAoR0JBVFs3XSA9PSAoc2lnbmVkIGNoYXIpIC0gMikpIHsKKyAgICAgICAgICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBkZWNvZGVfQXJpdGhfVGVtcGxhdGUwX29wdDMocEltYWdlLCBtX3BBcml0aERlY29kZXIsIG1fZ2JDb250ZXh0LCBwUGF1c2UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IGRlY29kZV9Bcml0aF9UZW1wbGF0ZTBfdW5vcHQocEltYWdlLCBtX3BBcml0aERlY29kZXIsIG1fZ2JDb250ZXh0LCBwUGF1c2UpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmKEdCVEVNUExBVEUgPT0gMSkgeworICAgICAgICBpZigoR0JBVFswXSA9PSAzKSAmJiAoR0JBVFsxXSA9PSAoc2lnbmVkIGNoYXIpIC0gMSkpIHsKKyAgICAgICAgICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBkZWNvZGVfQXJpdGhfVGVtcGxhdGUxX29wdDMocEltYWdlLCBtX3BBcml0aERlY29kZXIsIG1fZ2JDb250ZXh0LCBwUGF1c2UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IGRlY29kZV9Bcml0aF9UZW1wbGF0ZTFfdW5vcHQocEltYWdlLCBtX3BBcml0aERlY29kZXIsIG1fZ2JDb250ZXh0LCBwUGF1c2UpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmKEdCVEVNUExBVEUgPT0gMikgeworICAgICAgICBpZigoR0JBVFswXSA9PSAyKSAmJiAoR0JBVFsxXSA9PSAoc2lnbmVkIGNoYXIpIC0gMSkpIHsKKyAgICAgICAgICAgIG1fUHJvc3NpdmVTdGF0dXMgPSAgZGVjb2RlX0FyaXRoX1RlbXBsYXRlMl9vcHQzKHBJbWFnZSwgbV9wQXJpdGhEZWNvZGVyLCBtX2diQ29udGV4dCwgcFBhdXNlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fUHJvc3NpdmVTdGF0dXMgPSAgZGVjb2RlX0FyaXRoX1RlbXBsYXRlMl91bm9wdChwSW1hZ2UsIG1fcEFyaXRoRGVjb2RlciwgbV9nYkNvbnRleHQsIHBQYXVzZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZigoR0JBVFswXSA9PSAyKSAmJiAoR0JBVFsxXSA9PSAoc2lnbmVkIGNoYXIpIC0gMSkpIHsKKyAgICAgICAgICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBkZWNvZGVfQXJpdGhfVGVtcGxhdGUzX29wdDMocEltYWdlLCBtX3BBcml0aERlY29kZXIsIG1fZ2JDb250ZXh0LCBwUGF1c2UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IGRlY29kZV9Bcml0aF9UZW1wbGF0ZTNfdW5vcHQocEltYWdlLCBtX3BBcml0aERlY29kZXIsIG1fZ2JDb250ZXh0LCBwUGF1c2UpOworICAgICAgICB9CisgICAgfQorICAgIG1fUmVwbGFjZVJlY3QubGVmdCA9IDA7CisgICAgbV9SZXBsYWNlUmVjdC5yaWdodCA9IHBJbWFnZS0+bV9uV2lkdGg7CisgICAgbV9SZXBsYWNlUmVjdC50b3AgPSBpbGluZTsKKyAgICBtX1JlcGxhY2VSZWN0LmJvdHRvbSA9IG1fbG9vcEluZGV4OworICAgIGlmKG1fUHJvc3NpdmVTdGF0dXMgPT0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSCkgeworICAgICAgICBtX2xvb3BJbmRleCA9IDA7CisgICAgfQorICAgIHJldHVybiBtX1Byb3NzaXZlU3RhdHVzOworfQorRlhDT0RFQ19TVEFUVVMgQ0pCaWcyX0dSRFByb2M6OlN0YXJ0X2RlY29kZV9Bcml0aF9WMihDSkJpZzJfSW1hZ2UqKiBwSW1hZ2UsIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgaWYoR0JXID09IDAgfHwgR0JIID09IDApIHsKKyAgICAgICAgKiBwSW1hZ2UgPSBOVUxMOworICAgICAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsKKyAgICAgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7CisgICAgfQorICAgIGlmKCpwSW1hZ2UgPT0gTlVMTCkgeworICAgICAgICBKQklHMl9BTExPQygoKnBJbWFnZSksIENKQmlnMl9JbWFnZShHQlcsIEdCSCkpOworICAgIH0KKyAgICBpZiAoKCpwSW1hZ2UpLT5tX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgZGVsZXRlICpwSW1hZ2U7CisgICAgICAgICpwSW1hZ2UgPSBOVUxMOworICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJHZW5lcmljIHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmU6IENyZWF0ZSBJbWFnZSBGYWlsZWQgd2l0aCB3aWR0aCA9ICVkLCBoZWlnaHQgPSAlZFxuIiwgR0JXLCBHQkgpOworICAgICAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfRVJST1I7CisgICAgICAgIHJldHVybiBGWENPREVDX1NUQVRVU19FUlJPUjsKKyAgICB9CisgICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9SRUFEWTsKKyAgICBtX0RlY29kZVR5cGUgPSAyOworICAgIG1fcFBhdXNlID0gcFBhdXNlOworICAgIG1fcEltYWdlID0gcEltYWdlOworICAgICgqbV9wSW1hZ2UpLT5maWxsKDApOworICAgIExUUCA9IDA7CisgICAgbV9sb29wSW5kZXggPSAwOworICAgIG1fcEFyaXRoRGVjb2RlciA9IHBBcml0aERlY29kZXI7CisgICAgbV9nYkNvbnRleHQgPSBnYkNvbnRleHQ7CisgICAgcmV0dXJuIGRlY29kZV9Bcml0aF9WMihwUGF1c2UpOworfQorRlhDT0RFQ19TVEFUVVMgQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aF9WMihJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBGWF9CT09MIFNMVFAsIGJWYWw7CisgICAgRlhfRFdPUkQgQ09OVEVYVDsKKyAgICBDSkJpZzJfSW1hZ2UgKkdCUkVHID0gKm1fcEltYWdlOworICAgIEZYX0RXT1JEIGxpbmUxLCBsaW5lMiwgbGluZTM7CisgICAgTFRQID0gMDsKKyAgICBKQklHMl9BTExPQyhHQlJFRywgQ0pCaWcyX0ltYWdlKEdCVywgR0JIKSk7CisgICAgR0JSRUctPmZpbGwoMCk7CisgICAgZm9yKDsgbV9sb29wSW5kZXggPCBHQkg7IG1fbG9vcEluZGV4KyspIHsKKyAgICAgICAgaWYoVFBHRE9OKSB7CisgICAgICAgICAgICBzd2l0Y2goR0JURU1QTEFURSkgeworICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IDB4OWIyNTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gMHgwNzk1OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAweDAwZTU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IDB4MDE5NTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTTFRQID0gbV9wQXJpdGhEZWNvZGVyLT5ERUNPREUoJm1fZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgIExUUCA9IExUUCBeIFNMVFA7CisgICAgICAgIH0KKyAgICAgICAgaWYoTFRQID09IDEpIHsKKyAgICAgICAgICAgIEdCUkVHLT5jb3B5TGluZShtX2xvb3BJbmRleCwgbV9sb29wSW5kZXggLSAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN3aXRjaChHQlRFTVBMQVRFKSB7CisgICAgICAgICAgICAgICAgY2FzZSAwOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSA9IEdCUkVHLT5nZXRQaXhlbCgxLCBtX2xvb3BJbmRleCAtIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgfD0gR0JSRUctPmdldFBpeGVsKDAsIG1fbG9vcEluZGV4IC0gMikgPDwgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyID0gR0JSRUctPmdldFBpeGVsKDIsIG1fbG9vcEluZGV4IC0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiB8PSBHQlJFRy0+Z2V0UGl4ZWwoMSwgbV9sb29wSW5kZXggLSAxKSA8PCAxOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgfD0gR0JSRUctPmdldFBpeGVsKDAsIG1fbG9vcEluZGV4IC0gMSkgPDwgMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoVVNFU0tJUCAmJiBTS0lQLT5nZXRQaXhlbCh3LCBtX2xvb3BJbmRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IGxpbmUzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFswXSwgbV9sb29wSW5kZXggKyBHQkFUWzFdKSA8PCA0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUyIDw8IDU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzJdLCBtX2xvb3BJbmRleCArIEdCQVRbM10pIDw8IDEwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFs0XSwgbV9sb29wSW5kZXggKyBHQkFUWzVdKSA8PCAxMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMSA8PCAxMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbNl0sIG1fbG9vcEluZGV4ICsgR0JBVFs3XSkgPDwgMTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBtX3BBcml0aERlY29kZXItPkRFQ09ERSgmbV9nYkNvbnRleHRbQ09OVEVYVF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihiVmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdCUkVHLT5zZXRQaXhlbCh3LCBtX2xvb3BJbmRleCwgYlZhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxID0gKChsaW5lMSA8PCAxKSB8IEdCUkVHLT5nZXRQaXhlbCh3ICsgMiwgbV9sb29wSW5kZXggLSAyKSkgJiAweDA3OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyID0gKChsaW5lMiA8PCAxKSB8IEdCUkVHLT5nZXRQaXhlbCh3ICsgMywgbV9sb29wSW5kZXggLSAxKSkgJiAweDFmOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUzID0gKChsaW5lMyA8PCAxKSB8IGJWYWwpICYgMHgwZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxID0gR0JSRUctPmdldFBpeGVsKDIsIG1fbG9vcEluZGV4IC0gMik7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSB8PSBHQlJFRy0+Z2V0UGl4ZWwoMSwgbV9sb29wSW5kZXggLSAyKSA8PCAxOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgfD0gR0JSRUctPmdldFBpeGVsKDAsIG1fbG9vcEluZGV4IC0gMikgPDwgMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyID0gR0JSRUctPmdldFBpeGVsKDIsIG1fbG9vcEluZGV4IC0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiB8PSBHQlJFRy0+Z2V0UGl4ZWwoMSwgbV9sb29wSW5kZXggLSAxKSA8PCAxOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgfD0gR0JSRUctPmdldFBpeGVsKDAsIG1fbG9vcEluZGV4IC0gMSkgPDwgMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoVVNFU0tJUCAmJiBTS0lQLT5nZXRQaXhlbCh3LCBtX2xvb3BJbmRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IGxpbmUzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFswXSwgbV9sb29wSW5kZXggKyBHQkFUWzFdKSA8PCAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUyIDw8IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTEgPDwgOTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IG1fcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZtX2diQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGJWYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0JSRUctPnNldFBpeGVsKHcsIG1fbG9vcEluZGV4LCBiVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgPSAoKGxpbmUxIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyAzLCBtX2xvb3BJbmRleCAtIDIpKSAmIDB4MGY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAoKGxpbmUyIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyAzLCBtX2xvb3BJbmRleCAtIDEpKSAmIDB4MWY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTMgPSAoKGxpbmUzIDw8IDEpIHwgYlZhbCkgJiAweDA3OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjogeworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgPSBHQlJFRy0+Z2V0UGl4ZWwoMSwgbV9sb29wSW5kZXggLSAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBtX2xvb3BJbmRleCAtIDIpIDw8IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiA9IEdCUkVHLT5nZXRQaXhlbCgxLCBtX2xvb3BJbmRleCAtIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgfD0gR0JSRUctPmdldFBpeGVsKDAsIG1fbG9vcEluZGV4IC0gMSkgPDwgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdysrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoVVNFU0tJUCAmJiBTS0lQLT5nZXRQaXhlbCh3LCBtX2xvb3BJbmRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IGxpbmUzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFswXSwgbV9sb29wSW5kZXggKyBHQkFUWzFdKSA8PCAyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IGxpbmUyIDw8IDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTEgPDwgNzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IG1fcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZtX2diQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGJWYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0JSRUctPnNldFBpeGVsKHcsIG1fbG9vcEluZGV4LCBiVmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgPSAoKGxpbmUxIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyAyLCBtX2xvb3BJbmRleCAtIDIpKSAmIDB4MDc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAoKGxpbmUyIDw8IDEpIHwgR0JSRUctPmdldFBpeGVsKHcgKyAyLCBtX2xvb3BJbmRleCAtIDEpKSAmIDB4MGY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTMgPSAoKGxpbmUzIDw8IDEpIHwgYlZhbCkgJiAweDAzOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzogeworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTEgPSBHQlJFRy0+Z2V0UGl4ZWwoMSwgbV9sb29wSW5kZXggLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUxIHw9IEdCUkVHLT5nZXRQaXhlbCgwLCBtX2xvb3BJbmRleCAtIDEpIDw8IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHQlc7IHcrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKFVTRVNLSVAgJiYgU0tJUC0+Z2V0UGl4ZWwodywgbV9sb29wSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSBsaW5lMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMF0sIG1fbG9vcEluZGV4ICsgR0JBVFsxXSkgPDwgNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMSA8PCA1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gbV9wQXJpdGhEZWNvZGVyLT5ERUNPREUoJm1fZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYlZhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQlJFRy0+c2V0UGl4ZWwodywgbV9sb29wSW5kZXgsIGJWYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMSA9ICgobGluZTEgPDwgMSkgfCBHQlJFRy0+Z2V0UGl4ZWwodyArIDIsIG1fbG9vcEluZGV4IC0gMSkpICYgMHgxZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiA9ICgobGluZTIgPDwgMSkgfCBiVmFsKSAmIDB4MGY7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYocFBhdXNlICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgeworICAgICAgICAgICAgbV9sb29wSW5kZXggKys7CisgICAgICAgICAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRTsKKyAgICAgICAgICAgIHJldHVybiBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFOworICAgICAgICB9CisgICAgfQorICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOworICAgIHJldHVybiBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOworfQorRlhDT0RFQ19TVEFUVVMgQ0pCaWcyX0dSRFByb2M6OlN0YXJ0X2RlY29kZV9Bcml0aF9WMShDSkJpZzJfSW1hZ2UqKiBwSW1hZ2UsIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgaWYoR0JXID09IDAgfHwgR0JIID09IDApIHsKKyAgICAgICAgKiBwSW1hZ2UgPSBOVUxMOworICAgICAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsKKyAgICAgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7CisgICAgfQorICAgIGlmKCpwSW1hZ2UgPT0gTlVMTCkgeworICAgICAgICBKQklHMl9BTExPQygoKnBJbWFnZSksIENKQmlnMl9JbWFnZShHQlcsIEdCSCkpOworICAgIH0KKyAgICBpZiAoKCpwSW1hZ2UpLT5tX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgZGVsZXRlICpwSW1hZ2U7CisgICAgICAgICpwSW1hZ2UgPSBOVUxMOworICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJHZW5lcmljIHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmU6IENyZWF0ZSBJbWFnZSBGYWlsZWQgd2l0aCB3aWR0aCA9ICVkLCBoZWlnaHQgPSAlZFxuIiwgR0JXLCBHQkgpOworICAgICAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfRVJST1I7CisgICAgICAgIHJldHVybiBGWENPREVDX1NUQVRVU19FUlJPUjsKKyAgICB9CisgICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9SRUFEWTsKKyAgICBtX3BQYXVzZSA9IHBQYXVzZTsKKyAgICBtX3BJbWFnZSA9IHBJbWFnZTsKKyAgICBtX0RlY29kZVR5cGUgPSAzOworICAgICgqbV9wSW1hZ2UpLT5maWxsKDApOworICAgIExUUCA9IDA7CisgICAgbV9sb29wSW5kZXggPSAwOworICAgIG1fcEFyaXRoRGVjb2RlciA9IHBBcml0aERlY29kZXI7CisgICAgbV9nYkNvbnRleHQgPSBnYkNvbnRleHQ7CisgICAgcmV0dXJuIGRlY29kZV9Bcml0aF9WMShwUGF1c2UpOworfQorRlhDT0RFQ19TVEFUVVMgQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aF9WMShJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBGWF9CT09MIFNMVFAsIGJWYWw7CisgICAgRlhfRFdPUkQgQ09OVEVYVCA9IDA7CisgICAgQ0pCaWcyX0ltYWdlICpHQlJFRyA9ICgqbV9wSW1hZ2UpOworICAgIGZvcig7IG1fbG9vcEluZGV4IDwgR0JIOyBtX2xvb3BJbmRleCsrKSB7CisgICAgICAgIGlmKFRQR0RPTikgeworICAgICAgICAgICAgc3dpdGNoKEdCVEVNUExBVEUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAweDliMjU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9IDB4MDc5NTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gMHgwMGU1OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAweDAxOTU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU0xUUCA9IG1fcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZtX2diQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOworICAgICAgICB9CisgICAgICAgIGlmKExUUCA9PSAxKSB7CisgICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHQlc7IHcrKykgeworICAgICAgICAgICAgICAgIEdCUkVHLT5zZXRQaXhlbCh3LCBtX2xvb3BJbmRleCwgR0JSRUctPmdldFBpeGVsKHcsIG1fbG9vcEluZGV4IC0gMSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yKEZYX0RXT1JEIHcgPSAwOyB3IDwgR0JXOyB3KyspIHsKKyAgICAgICAgICAgICAgICBpZihVU0VTS0lQICYmIFNLSVAtPmdldFBpeGVsKHcsIG1fbG9vcEluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICBHQlJFRy0+c2V0UGl4ZWwodywgbV9sb29wSW5kZXgsIDApOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAwOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2goR0JURU1QTEFURSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAxLCBtX2xvb3BJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDIsIG1fbG9vcEluZGV4KSA8PCAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAzLCBtX2xvb3BJbmRleCkgPDwgMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gNCwgbV9sb29wSW5kZXgpIDw8IDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMF0sIG1fbG9vcEluZGV4ICsgR0JBVFsxXSkgPDwgNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgMiwgbV9sb29wSW5kZXggLSAxKSA8PCA1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyAxLCBtX2xvb3BJbmRleCAtIDEpIDw8IDY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodywgbV9sb29wSW5kZXggLSAxKSA8PCA3OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAxLCBtX2xvb3BJbmRleCAtIDEpIDw8IDg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDIsIG1fbG9vcEluZGV4IC0gMSkgPDwgOTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFsyXSwgbV9sb29wSW5kZXggKyBHQkFUWzNdKSA8PCAxMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFs0XSwgbV9sb29wSW5kZXggKyBHQkFUWzVdKSA8PCAxMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgMSwgbV9sb29wSW5kZXggLSAyKSA8PCAxMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3LCBtX2xvb3BJbmRleCAtIDIpIDw8IDEzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAxLCBtX2xvb3BJbmRleCAtIDIpIDw8IDE0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyBHQkFUWzZdLCBtX2xvb3BJbmRleCArIEdCQVRbN10pIDw8IDE1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAxLCBtX2xvb3BJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDIsIG1fbG9vcEluZGV4KSA8PCAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAzLCBtX2xvb3BJbmRleCkgPDwgMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFswXSwgbV9sb29wSW5kZXggKyBHQkFUWzFdKSA8PCAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyAyLCBtX2xvb3BJbmRleCAtIDEpIDw8IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIDEsIG1fbG9vcEluZGV4IC0gMSkgPDwgNTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3LCBtX2xvb3BJbmRleCAtIDEpIDw8IDY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDEsIG1fbG9vcEluZGV4IC0gMSkgPDwgNzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMiwgbV9sb29wSW5kZXggLSAxKSA8PCA4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyAyLCBtX2xvb3BJbmRleCAtIDIpIDw8IDk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIDEsIG1fbG9vcEluZGV4IC0gMikgPDwgMTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodywgbV9sb29wSW5kZXggLSAyKSA8PCAxMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMSwgbV9sb29wSW5kZXggLSAyKSA8PCAxMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMSwgbV9sb29wSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAyLCBtX2xvb3BJbmRleCkgPDwgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgR0JBVFswXSwgbV9sb29wSW5kZXggKyBHQkFUWzFdKSA8PCAyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgKyAxLCBtX2xvb3BJbmRleCAtIDEpIDw8IDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodywgbV9sb29wSW5kZXggLSAxKSA8PCA0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAxLCBtX2xvb3BJbmRleCAtIDEpIDw8IDU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDIsIG1fbG9vcEluZGV4IC0gMSkgPDwgNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgMSwgbV9sb29wSW5kZXggLSAyKSA8PCA3OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcsIG1fbG9vcEluZGV4IC0gMikgPDwgODsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMSwgbV9sb29wSW5kZXggLSAyKSA8PCA5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAxLCBtX2xvb3BJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDIsIG1fbG9vcEluZGV4KSA8PCAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAzLCBtX2xvb3BJbmRleCkgPDwgMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gNCwgbV9sb29wSW5kZXgpIDw8IDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyArIEdCQVRbMF0sIG1fbG9vcEluZGV4ICsgR0JBVFsxXSkgPDwgNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3ICsgMSwgbV9sb29wSW5kZXggLSAxKSA8PCA1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcsIG1fbG9vcEluZGV4IC0gMSkgPDwgNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IEdCUkVHLT5nZXRQaXhlbCh3IC0gMSwgbV9sb29wSW5kZXggLSAxKSA8PCA3OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gR0JSRUctPmdldFBpeGVsKHcgLSAyLCBtX2xvb3BJbmRleCAtIDEpIDw8IDg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBHQlJFRy0+Z2V0UGl4ZWwodyAtIDMsIG1fbG9vcEluZGV4IC0gMSkgPDwgOTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBiVmFsID0gbV9wQXJpdGhEZWNvZGVyLT5ERUNPREUoJm1fZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICAgICAgR0JSRUctPnNldFBpeGVsKHcsIG1fbG9vcEluZGV4LCBiVmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYocFBhdXNlICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgeworICAgICAgICAgICAgbV9sb29wSW5kZXggKys7CisgICAgICAgICAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRTsKKyAgICAgICAgICAgIHJldHVybiBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFOworICAgICAgICB9CisgICAgfQorICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOworICAgIHJldHVybiBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOworfQorRlhDT0RFQ19TVEFUVVMgQ0pCaWcyX0dSRFByb2M6OlN0YXJ0X2RlY29kZV9NTVIoQ0pCaWcyX0ltYWdlKiogcEltYWdlLCBDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtLCBJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBpbnQgYml0cG9zLCBpOworICAgIEpCSUcyX0FMTE9DKCgqIHBJbWFnZSksIENKQmlnMl9JbWFnZShHQlcsIEdCSCkpOworICAgIGlmICgoKiBwSW1hZ2UpLT5tX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgZGVsZXRlICgqIHBJbWFnZSk7CisgICAgICAgICgqIHBJbWFnZSkgPSBOVUxMOworICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0Vycm9yKCJHZW5lcmljIHJlZ2lvbiBkZWNvZGluZyBwcm9jZWR1cmU6IENyZWF0ZSBJbWFnZSBGYWlsZWQgd2l0aCB3aWR0aCA9ICVkLCBoZWlnaHQgPSAlZFxuIiwgR0JXLCBHQkgpOworICAgICAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfRVJST1I7CisgICAgICAgIHJldHVybiBtX1Byb3NzaXZlU3RhdHVzOworICAgIH0KKyAgICBiaXRwb3MgPSAoaW50KXBTdHJlYW0tPmdldEJpdFBvcygpOworICAgIF9GYXhHNERlY29kZShtX3BNb2R1bGUsIHBTdHJlYW0tPmdldEJ1ZigpLCBwU3RyZWFtLT5nZXRMZW5ndGgoKSwgJmJpdHBvcywgKCogcEltYWdlKS0+bV9wRGF0YSwgR0JXLCBHQkgsICgqIHBJbWFnZSktPm1fblN0cmlkZSk7CisgICAgcFN0cmVhbS0+c2V0Qml0UG9zKGJpdHBvcyk7CisgICAgZm9yKGkgPSAwOyAoRlhfRFdPUkQpaSA8ICgqIHBJbWFnZSktPm1fblN0cmlkZSAqIEdCSDsgaSsrKSB7CisgICAgICAgICgqIHBJbWFnZSktPm1fcERhdGFbaV0gPSB+KCogcEltYWdlKS0+bV9wRGF0YVtpXTsKKyAgICB9CisgICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7CisgICAgcmV0dXJuIG1fUHJvc3NpdmVTdGF0dXM7Cit9CitGWENPREVDX1NUQVRVUyBDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX01NUigpCit7CisgICAgcmV0dXJuIG1fUHJvc3NpdmVTdGF0dXM7Cit9CitGWENPREVDX1NUQVRVUyBDSkJpZzJfR1JEUHJvYzo6Q29udGludWVfZGVjb2RlKElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIGlmKG1fUHJvc3NpdmVTdGF0dXMgIT0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRSkgeworICAgICAgICByZXR1cm4gbV9Qcm9zc2l2ZVN0YXR1czsKKyAgICB9CisgICAgc3dpdGNoIChtX0RlY29kZVR5cGUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZV9Bcml0aChwUGF1c2UpOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICByZXR1cm4gZGVjb2RlX0FyaXRoX1YyKHBQYXVzZSk7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHJldHVybiBkZWNvZGVfQXJpdGhfVjEocFBhdXNlKTsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgcmV0dXJuIGRlY29kZV9NTVIoKTsKKyAgICB9CisgICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0VSUk9SOworICAgIHJldHVybiBtX1Byb3NzaXZlU3RhdHVzOworfQorRlhDT0RFQ19TVEFUVVMgQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aF9UZW1wbGF0ZTBfb3B0MyhDSkJpZzJfSW1hZ2UgKnBJbWFnZSwgQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBGWF9CT09MIFNMVFAsIGJWYWw7CisgICAgRlhfRFdPUkQgQ09OVEVYVDsKKyAgICBGWF9EV09SRCBsaW5lMSwgbGluZTI7CisgICAgRlhfQllURSAqcExpbmUxLCAqcExpbmUyLCBjVmFsOworICAgIEZYX0lOVDMyIG5TdHJpZGUsIG5TdHJpZGUyLCBrOworICAgIEZYX0lOVDMyIG5MaW5lQnl0ZXMsIG5CaXRzTGVmdCwgY2M7CisgICAgaWYobV9wTGluZSA9PSBOVUxMKSB7CisgICAgICAgIG1fcExpbmUgPSBwSW1hZ2UtPm1fcERhdGE7CisgICAgfQorICAgIG5TdHJpZGUgPSBwSW1hZ2UtPm1fblN0cmlkZTsKKyAgICBuU3RyaWRlMiA9IG5TdHJpZGUgPDwgMTsKKyAgICBuTGluZUJ5dGVzID0gKChHQlcgKyA3KSA+PiAzKSAtIDE7CisgICAgbkJpdHNMZWZ0ID0gR0JXIC0gKG5MaW5lQnl0ZXMgPDwgMyk7CisgICAgRlhfRFdPUkQgaGVpZ2h0ID0gR0JIICYgMHg3ZmZmZmZmZjsKKyAgICBmb3IoOyBtX2xvb3BJbmRleCA8IGhlaWdodDsgbV9sb29wSW5kZXgrKykgeworICAgICAgICBpZihUUEdET04pIHsKKyAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFsweDliMjVdKTsKKyAgICAgICAgICAgIExUUCA9IExUUCBeIFNMVFA7CisgICAgICAgIH0KKyAgICAgICAgaWYoTFRQID09IDEpIHsKKyAgICAgICAgICAgIHBJbWFnZS0+Y29weUxpbmUobV9sb29wSW5kZXgsIG1fbG9vcEluZGV4IC0gMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZihtX2xvb3BJbmRleCA+IDEpIHsKKyAgICAgICAgICAgICAgICBwTGluZTEgPSBtX3BMaW5lIC0gblN0cmlkZTI7CisgICAgICAgICAgICAgICAgcExpbmUyID0gbV9wTGluZSAtIG5TdHJpZGU7CisgICAgICAgICAgICAgICAgbGluZTEgPSAoKnBMaW5lMSsrKSA8PCA2OworICAgICAgICAgICAgICAgIGxpbmUyID0gKnBMaW5lMisrOworICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKGxpbmUxICYgMHhmODAwKSB8IChsaW5lMiAmIDB4MDdmMCkpOworICAgICAgICAgICAgICAgIGZvcihjYyA9IDA7IGNjIDwgbkxpbmVCeXRlczsgY2MrKykgeworICAgICAgICAgICAgICAgICAgICBsaW5lMSA9IChsaW5lMSA8PCA4KSB8ICgoKnBMaW5lMSsrKSA8PCA2KTsKKyAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAobGluZTIgPDwgOCkgfCAoKnBMaW5lMisrKTsKKyAgICAgICAgICAgICAgICAgICAgY1ZhbCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZvcihrID0gNzsgayA+PSAwOyBrLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgazsKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKChDT05URVhUICYgMHg3YmY3KSA8PCAxKSB8IGJWYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUxID4+IGspICYgMHgwODAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTIgPj4gaykgJiAweDAwMTApKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtX3BMaW5lW2NjXSA9IGNWYWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmUxIDw8PSA4OworICAgICAgICAgICAgICAgIGxpbmUyIDw8PSA4OworICAgICAgICAgICAgICAgIGNWYWwgPSAwOworICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IG5CaXRzTGVmdDsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCAoNyAtIGspOworICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKCgoQ09OVEVYVCAmIDB4N2JmNykgPDwgMSkgfCBiVmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUxID4+ICg3IC0gaykpICYgMHgwODAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMiA+PiAoNyAtIGspKSAmIDB4MDAxMCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX3BMaW5lW25MaW5lQnl0ZXNdID0gY1ZhbDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcExpbmUyID0gbV9wTGluZSAtIG5TdHJpZGU7CisgICAgICAgICAgICAgICAgbGluZTIgPSAobV9sb29wSW5kZXggJiAxKSA/ICgqcExpbmUyKyspIDogMDsKKyAgICAgICAgICAgICAgICBDT05URVhUID0gKGxpbmUyICYgMHgwN2YwKTsKKyAgICAgICAgICAgICAgICBmb3IoY2MgPSAwOyBjYyA8IG5MaW5lQnl0ZXM7IGNjKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYobV9sb29wSW5kZXggJiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lMiA9IChsaW5lMiA8PCA4KSB8ICgqcExpbmUyKyspOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNWYWwgPSAwOworICAgICAgICAgICAgICAgICAgICBmb3IoayA9IDc7IGsgPj0gMDsgay0tKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOworICAgICAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8IGs7CisgICAgICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKCgoQ09OVEVYVCAmIDB4N2JmNykgPDwgMSkgfCBiVmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMiA+PiBrKSAmIDB4MDAxMCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1fcExpbmVbY2NdID0gY1ZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGluZTIgPDw9IDg7CisgICAgICAgICAgICAgICAgY1ZhbCA9IDA7CisgICAgICAgICAgICAgICAgZm9yKGsgPSAwOyBrIDwgbkJpdHNMZWZ0OyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8ICg3IC0gayk7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKChDT05URVhUICYgMHg3YmY3KSA8PCAxKSB8IGJWYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTIgPj4gKDcgLSBrKSkgJiAweDAwMTApKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9wTGluZVtuTGluZUJ5dGVzXSA9IGNWYWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9wTGluZSArPSBuU3RyaWRlOworICAgICAgICBpZihwUGF1c2UgJiYgcFBhdXNlLT5OZWVkVG9QYXVzZU5vdygpKSB7CisgICAgICAgICAgICBtX2xvb3BJbmRleCsrOworICAgICAgICAgICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUU7CisgICAgICAgICAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsKKyAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsKK30KK0ZYQ09ERUNfU1RBVFVTIENKQmlnMl9HUkRQcm9jOjpkZWNvZGVfQXJpdGhfVGVtcGxhdGUwX3Vub3B0KENKQmlnMl9JbWFnZSAqIHBJbWFnZSwgQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBGWF9CT09MIFNMVFAsIGJWYWw7CisgICAgRlhfRFdPUkQgQ09OVEVYVDsKKyAgICBGWF9EV09SRCBsaW5lMSwgbGluZTIsIGxpbmUzOworICAgIGZvcig7IG1fbG9vcEluZGV4IDwgR0JIOyBtX2xvb3BJbmRleCsrKSB7CisgICAgICAgIGlmKFRQR0RPTikgeworICAgICAgICAgICAgU0xUUCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0WzB4OWIyNV0pOworICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsKKyAgICAgICAgfQorICAgICAgICBpZihMVFAgPT0gMSkgeworICAgICAgICAgICAgcEltYWdlLT5jb3B5TGluZShtX2xvb3BJbmRleCwgbV9sb29wSW5kZXggLSAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxpbmUxID0gcEltYWdlLT5nZXRQaXhlbCgxLCBtX2xvb3BJbmRleCAtIDIpOworICAgICAgICAgICAgbGluZTEgfD0gcEltYWdlLT5nZXRQaXhlbCgwLCBtX2xvb3BJbmRleCAtIDIpIDw8IDE7CisgICAgICAgICAgICBsaW5lMiA9IHBJbWFnZS0+Z2V0UGl4ZWwoMiwgbV9sb29wSW5kZXggLSAxKTsKKyAgICAgICAgICAgIGxpbmUyIHw9IHBJbWFnZS0+Z2V0UGl4ZWwoMSwgbV9sb29wSW5kZXggLSAxKSA8PCAxOworICAgICAgICAgICAgbGluZTIgfD0gcEltYWdlLT5nZXRQaXhlbCgwLCBtX2xvb3BJbmRleCAtIDEpIDw8IDI7CisgICAgICAgICAgICBsaW5lMyA9IDA7CisgICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHQlc7IHcrKykgeworICAgICAgICAgICAgICAgIGlmKFVTRVNLSVAgJiYgU0tJUC0+Z2V0UGl4ZWwodywgbV9sb29wSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgICAgIGJWYWwgPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSBsaW5lMzsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBwSW1hZ2UtPmdldFBpeGVsKHcgKyBHQkFUWzBdLCBtX2xvb3BJbmRleCArIEdCQVRbMV0pIDw8IDQ7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTIgPDwgNTsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBwSW1hZ2UtPmdldFBpeGVsKHcgKyBHQkFUWzJdLCBtX2xvb3BJbmRleCArIEdCQVRbM10pIDw8IDEwOworICAgICAgICAgICAgICAgICAgICBDT05URVhUIHw9IHBJbWFnZS0+Z2V0UGl4ZWwodyArIEdCQVRbNF0sIG1fbG9vcEluZGV4ICsgR0JBVFs1XSkgPDwgMTE7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTEgPDwgMTI7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gcEltYWdlLT5nZXRQaXhlbCh3ICsgR0JBVFs2XSwgbV9sb29wSW5kZXggKyBHQkFUWzddKSA8PCAxNTsKKyAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoYlZhbCkgeworICAgICAgICAgICAgICAgICAgICBwSW1hZ2UtPnNldFBpeGVsKHcsIG1fbG9vcEluZGV4LCBiVmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGluZTEgPSAoKGxpbmUxIDw8IDEpIHwgcEltYWdlLT5nZXRQaXhlbCh3ICsgMiwgbV9sb29wSW5kZXggLSAyKSkgJiAweDA3OworICAgICAgICAgICAgICAgIGxpbmUyID0gKChsaW5lMiA8PCAxKSB8IHBJbWFnZS0+Z2V0UGl4ZWwodyArIDMsIG1fbG9vcEluZGV4IC0gMSkpICYgMHgxZjsKKyAgICAgICAgICAgICAgICBsaW5lMyA9ICgobGluZTMgPDwgMSkgfCBiVmFsKSAmIDB4MGY7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYocFBhdXNlICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgeworICAgICAgICAgICAgbV9sb29wSW5kZXgrKzsKKyAgICAgICAgICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFOworICAgICAgICAgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7CisgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7Cit9CitGWENPREVDX1NUQVRVUyBDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoX1RlbXBsYXRlMV9vcHQzKENKQmlnMl9JbWFnZSAqcEltYWdlLCBDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQsIElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIEZYX0JPT0wgU0xUUCwgYlZhbDsKKyAgICBGWF9EV09SRCBDT05URVhUOworICAgIEZYX0RXT1JEIGxpbmUxLCBsaW5lMjsKKyAgICBGWF9CWVRFICpwTGluZTEsICpwTGluZTIsIGNWYWw7CisgICAgRlhfSU5UMzIgblN0cmlkZSwgblN0cmlkZTIsIGs7CisgICAgRlhfSU5UMzIgbkxpbmVCeXRlcywgbkJpdHNMZWZ0LCBjYzsKKyAgICBpZiAoIW1fcExpbmUpIHsKKyAgICAgICAgbV9wTGluZSA9IHBJbWFnZS0+bV9wRGF0YTsKKyAgICB9CisgICAgblN0cmlkZSA9IHBJbWFnZS0+bV9uU3RyaWRlOworICAgIG5TdHJpZGUyID0gblN0cmlkZSA8PCAxOworICAgIG5MaW5lQnl0ZXMgPSAoKEdCVyArIDcpID4+IDMpIC0gMTsKKyAgICBuQml0c0xlZnQgPSBHQlcgLSAobkxpbmVCeXRlcyA8PCAzKTsKKyAgICBmb3IoOyBtX2xvb3BJbmRleCA8IEdCSDsgbV9sb29wSW5kZXgrKykgeworICAgICAgICBpZihUUEdET04pIHsKKyAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFsweDA3OTVdKTsKKyAgICAgICAgICAgIExUUCA9IExUUCBeIFNMVFA7CisgICAgICAgIH0KKyAgICAgICAgaWYoTFRQID09IDEpIHsKKyAgICAgICAgICAgIHBJbWFnZS0+Y29weUxpbmUobV9sb29wSW5kZXgsIG1fbG9vcEluZGV4IC0gMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZihtX2xvb3BJbmRleCA+IDEpIHsKKyAgICAgICAgICAgICAgICBwTGluZTEgPSBtX3BMaW5lIC0gblN0cmlkZTI7CisgICAgICAgICAgICAgICAgcExpbmUyID0gbV9wTGluZSAtIG5TdHJpZGU7CisgICAgICAgICAgICAgICAgbGluZTEgPSAoKnBMaW5lMSsrKSA8PCA0OworICAgICAgICAgICAgICAgIGxpbmUyID0gKnBMaW5lMisrOworICAgICAgICAgICAgICAgIENPTlRFWFQgPSAobGluZTEgJiAweDFlMDApIHwgKChsaW5lMiA+PiAxKSAmIDB4MDFmOCk7CisgICAgICAgICAgICAgICAgZm9yKGNjID0gMDsgY2MgPCBuTGluZUJ5dGVzOyBjYysrKSB7CisgICAgICAgICAgICAgICAgICAgIGxpbmUxID0gKGxpbmUxIDw8IDgpIHwgKCgqcExpbmUxKyspIDw8IDQpOworICAgICAgICAgICAgICAgICAgICBsaW5lMiA9IChsaW5lMiA8PCA4KSB8ICgqcExpbmUyKyspOworICAgICAgICAgICAgICAgICAgICBjVmFsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGsgPSA3OyBrID49IDA7IGstLSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCBrOworICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoQ09OVEVYVCAmIDB4MGVmYikgPDwgMSkgfCBiVmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUxID4+IGspICYgMHgwMjAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMiA+PiAoayArIDEpKSAmIDB4MDAwOCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbV9wTGluZVtjY10gPSBjVmFsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaW5lMSA8PD0gODsKKyAgICAgICAgICAgICAgICBsaW5lMiA8PD0gODsKKyAgICAgICAgICAgICAgICBjVmFsID0gMDsKKyAgICAgICAgICAgICAgICBmb3IoayA9IDA7IGsgPCBuQml0c0xlZnQ7IGsrKykgeworICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOworICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgKDcgLSBrKTsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoQ09OVEVYVCAmIDB4MGVmYikgPDwgMSkgfCBiVmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTEgPj4gKDcgLSBrKSkgJiAweDAyMDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTIgPj4gKDggLSBrKSkgJiAweDAwMDgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX3BMaW5lW25MaW5lQnl0ZXNdID0gY1ZhbDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcExpbmUyID0gbV9wTGluZSAtIG5TdHJpZGU7CisgICAgICAgICAgICAgICAgbGluZTIgPSAobV9sb29wSW5kZXggJiAxKSA/ICgqcExpbmUyKyspIDogMDsKKyAgICAgICAgICAgICAgICBDT05URVhUID0gKGxpbmUyID4+IDEpICYgMHgwMWY4OworICAgICAgICAgICAgICAgIGZvcihjYyA9IDA7IGNjIDwgbkxpbmVCeXRlczsgY2MrKykgeworICAgICAgICAgICAgICAgICAgICBpZihtX2xvb3BJbmRleCAmIDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUyID0gKGxpbmUyIDw8IDgpIHwgKCpwTGluZTIrKyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY1ZhbCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZvcihrID0gNzsgayA+PSAwOyBrLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgazsKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDBlZmIpIDw8IDEpIHwgYlZhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMiA+PiAoayArIDEpKSAmIDB4MDAwOCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbV9wTGluZVtjY10gPSBjVmFsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaW5lMiA8PD0gODsKKyAgICAgICAgICAgICAgICBjVmFsID0gMDsKKyAgICAgICAgICAgICAgICBmb3IoayA9IDA7IGsgPCBuQml0c0xlZnQ7IGsrKykgeworICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOworICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgKDcgLSBrKTsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoQ09OVEVYVCAmIDB4MGVmYikgPDwgMSkgfCBiVmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTIgPj4gKDggLSBrKSkgJiAweDAwMDgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX3BMaW5lW25MaW5lQnl0ZXNdID0gY1ZhbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX3BMaW5lICs9IG5TdHJpZGU7CisgICAgICAgIGlmKHBQYXVzZSAmJiBwUGF1c2UtPk5lZWRUb1BhdXNlTm93KCkpIHsKKyAgICAgICAgICAgIG1fbG9vcEluZGV4Kys7CisgICAgICAgICAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRTsKKyAgICAgICAgICAgIHJldHVybiBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFOworICAgICAgICB9CisgICAgfQorICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOworICAgIHJldHVybiBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOworfQorRlhDT0RFQ19TVEFUVVMgQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aF9UZW1wbGF0ZTFfdW5vcHQoQ0pCaWcyX0ltYWdlICogcEltYWdlLCBDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQsIElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIEZYX0JPT0wgU0xUUCwgYlZhbDsKKyAgICBGWF9EV09SRCBDT05URVhUOworICAgIEZYX0RXT1JEIGxpbmUxLCBsaW5lMiwgbGluZTM7CisgICAgZm9yKEZYX0RXT1JEIGggPSAwOyBoIDwgR0JIOyBoKyspIHsKKyAgICAgICAgaWYoVFBHRE9OKSB7CisgICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbMHgwNzk1XSk7CisgICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOworICAgICAgICB9CisgICAgICAgIGlmKExUUCA9PSAxKSB7CisgICAgICAgICAgICBwSW1hZ2UtPmNvcHlMaW5lKGgsIGggLSAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxpbmUxID0gcEltYWdlLT5nZXRQaXhlbCgyLCBoIC0gMik7CisgICAgICAgICAgICBsaW5lMSB8PSBwSW1hZ2UtPmdldFBpeGVsKDEsIGggLSAyKSA8PCAxOworICAgICAgICAgICAgbGluZTEgfD0gcEltYWdlLT5nZXRQaXhlbCgwLCBoIC0gMikgPDwgMjsKKyAgICAgICAgICAgIGxpbmUyID0gcEltYWdlLT5nZXRQaXhlbCgyLCBoIC0gMSk7CisgICAgICAgICAgICBsaW5lMiB8PSBwSW1hZ2UtPmdldFBpeGVsKDEsIGggLSAxKSA8PCAxOworICAgICAgICAgICAgbGluZTIgfD0gcEltYWdlLT5nZXRQaXhlbCgwLCBoIC0gMSkgPDwgMjsKKyAgICAgICAgICAgIGxpbmUzID0gMDsKKyAgICAgICAgICAgIGZvcihGWF9EV09SRCB3ID0gMDsgdyA8IEdCVzsgdysrKSB7CisgICAgICAgICAgICAgICAgaWYoVVNFU0tJUCAmJiBTS0lQLT5nZXRQaXhlbCh3LCBoKSkgeworICAgICAgICAgICAgICAgICAgICBiVmFsID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gbGluZTM7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gcEltYWdlLT5nZXRQaXhlbCh3ICsgR0JBVFswXSwgaCArIEdCQVRbMV0pIDw8IDM7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTIgPDwgNDsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMSA8PCA5OworICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihiVmFsKSB7CisgICAgICAgICAgICAgICAgICAgIHBJbWFnZS0+c2V0UGl4ZWwodywgaCwgYlZhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmUxID0gKChsaW5lMSA8PCAxKSB8IHBJbWFnZS0+Z2V0UGl4ZWwodyArIDMsIGggLSAyKSkgJiAweDBmOworICAgICAgICAgICAgICAgIGxpbmUyID0gKChsaW5lMiA8PCAxKSB8IHBJbWFnZS0+Z2V0UGl4ZWwodyArIDMsIGggLSAxKSkgJiAweDFmOworICAgICAgICAgICAgICAgIGxpbmUzID0gKChsaW5lMyA8PCAxKSB8IGJWYWwpICYgMHgwNzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZihwUGF1c2UgJiYgcFBhdXNlLT5OZWVkVG9QYXVzZU5vdygpKSB7CisgICAgICAgICAgICBtX2xvb3BJbmRleCsrOworICAgICAgICAgICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUU7CisgICAgICAgICAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsKKyAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsKK30KK0ZYQ09ERUNfU1RBVFVTIENKQmlnMl9HUkRQcm9jOjpkZWNvZGVfQXJpdGhfVGVtcGxhdGUyX29wdDMoQ0pCaWcyX0ltYWdlICpwSW1hZ2UsIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgRlhfQk9PTCBTTFRQLCBiVmFsOworICAgIEZYX0RXT1JEIENPTlRFWFQ7CisgICAgRlhfRFdPUkQgbGluZTEsIGxpbmUyOworICAgIEZYX0JZVEUgKnBMaW5lMSwgKnBMaW5lMiwgY1ZhbDsKKyAgICBGWF9JTlQzMiBuU3RyaWRlLCBuU3RyaWRlMiwgazsKKyAgICBGWF9JTlQzMiBuTGluZUJ5dGVzLCBuQml0c0xlZnQsIGNjOworICAgIGlmKCFtX3BMaW5lKSB7CisgICAgICAgIG1fcExpbmUgPSBwSW1hZ2UtPm1fcERhdGE7CisgICAgfQorICAgIG5TdHJpZGUgPSBwSW1hZ2UtPm1fblN0cmlkZTsKKyAgICBuU3RyaWRlMiA9IG5TdHJpZGUgPDwgMTsKKyAgICBuTGluZUJ5dGVzID0gKChHQlcgKyA3KSA+PiAzKSAtIDE7CisgICAgbkJpdHNMZWZ0ID0gR0JXIC0gKG5MaW5lQnl0ZXMgPDwgMyk7CisgICAgZm9yKDsgbV9sb29wSW5kZXggPCBHQkg7IG1fbG9vcEluZGV4KyspIHsKKyAgICAgICAgaWYoVFBHRE9OKSB7CisgICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbMHgwMGU1XSk7CisgICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOworICAgICAgICB9CisgICAgICAgIGlmKExUUCA9PSAxKSB7CisgICAgICAgICAgICBwSW1hZ2UtPmNvcHlMaW5lKG1fbG9vcEluZGV4LCBtX2xvb3BJbmRleCAtIDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYobV9sb29wSW5kZXggPiAxKSB7CisgICAgICAgICAgICAgICAgcExpbmUxID0gbV9wTGluZSAtIG5TdHJpZGUyOworICAgICAgICAgICAgICAgIHBMaW5lMiA9IG1fcExpbmUgLSBuU3RyaWRlOworICAgICAgICAgICAgICAgIGxpbmUxID0gKCpwTGluZTErKykgPDwgMTsKKyAgICAgICAgICAgICAgICBsaW5lMiA9ICpwTGluZTIrKzsKKyAgICAgICAgICAgICAgICBDT05URVhUID0gKGxpbmUxICYgMHgwMzgwKSB8ICgobGluZTIgPj4gMykgJiAweDAwN2MpOworICAgICAgICAgICAgICAgIGZvcihjYyA9IDA7IGNjIDwgbkxpbmVCeXRlczsgY2MrKykgeworICAgICAgICAgICAgICAgICAgICBsaW5lMSA9IChsaW5lMSA8PCA4KSB8ICgoKnBMaW5lMSsrKSA8PCAxKTsKKyAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAobGluZTIgPDwgOCkgfCAoKnBMaW5lMisrKTsKKyAgICAgICAgICAgICAgICAgICAgY1ZhbCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZvcihrID0gNzsgayA+PSAwOyBrLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgazsKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDAxYmQpIDw8IDEpIHwgYlZhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMSA+PiBrKSAmIDB4MDA4MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgobGluZTIgPj4gKGsgKyAzKSkgJiAweDAwMDQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG1fcExpbmVbY2NdID0gY1ZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGluZTEgPDw9IDg7CisgICAgICAgICAgICAgICAgbGluZTIgPDw9IDg7CisgICAgICAgICAgICAgICAgY1ZhbCA9IDA7CisgICAgICAgICAgICAgICAgZm9yKGsgPSAwOyBrIDwgbkJpdHNMZWZ0OyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICAgICAgY1ZhbCB8PSBiVmFsIDw8ICg3IC0gayk7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDAxYmQpIDw8IDEpIHwgYlZhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUxID4+ICg3IC0gaykpICYgMHgwMDgwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUyID4+ICgxMCAtIGspKSAmIDB4MDAwNCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fcExpbmVbbkxpbmVCeXRlc10gPSBjVmFsOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwTGluZTIgPSBtX3BMaW5lIC0gblN0cmlkZTsKKyAgICAgICAgICAgICAgICBsaW5lMiA9IChtX2xvb3BJbmRleCAmIDEpID8gKCpwTGluZTIrKykgOiAwOworICAgICAgICAgICAgICAgIENPTlRFWFQgPSAobGluZTIgPj4gMykgJiAweDAwN2M7CisgICAgICAgICAgICAgICAgZm9yKGNjID0gMDsgY2MgPCBuTGluZUJ5dGVzOyBjYysrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmKG1fbG9vcEluZGV4ICYgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbGluZTIgPSAobGluZTIgPDwgOCkgfCAoKnBMaW5lMisrKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjVmFsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGsgPSA3OyBrID49IDA7IGstLSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCBrOworICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoQ09OVEVYVCAmIDB4MDFiZCkgPDwgMSkgfCBiVmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUyID4+IChrICsgMykpICYgMHgwMDA0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtX3BMaW5lW2NjXSA9IGNWYWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmUyIDw8PSA4OworICAgICAgICAgICAgICAgIGNWYWwgPSAwOworICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IG5CaXRzTGVmdDsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCAoNyAtIGspOworICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKChDT05URVhUICYgMHgwMWJkKSA8PCAxKSB8IGJWYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKCgobGluZTIgPj4gKDEwIC0gaykpKSAmIDB4MDAwNCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fcExpbmVbbkxpbmVCeXRlc10gPSBjVmFsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fcExpbmUgKz0gblN0cmlkZTsKKyAgICAgICAgaWYocFBhdXNlICYmIG1fbG9vcEluZGV4ICUgNTAgPT0gMCAmJiBwUGF1c2UtPk5lZWRUb1BhdXNlTm93KCkpIHsKKyAgICAgICAgICAgIG1fbG9vcEluZGV4Kys7CisgICAgICAgICAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRTsKKyAgICAgICAgICAgIHJldHVybiBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFOworICAgICAgICB9CisgICAgfQorICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOworICAgIHJldHVybiBGWENPREVDX1NUQVRVU19ERUNPREVfRklOSVNIOworfQorRlhDT0RFQ19TVEFUVVMgQ0pCaWcyX0dSRFByb2M6OmRlY29kZV9Bcml0aF9UZW1wbGF0ZTJfdW5vcHQoQ0pCaWcyX0ltYWdlICogcEltYWdlLCBDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQsIElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIEZYX0JPT0wgU0xUUCwgYlZhbDsKKyAgICBGWF9EV09SRCBDT05URVhUOworICAgIEZYX0RXT1JEIGxpbmUxLCBsaW5lMiwgbGluZTM7CisgICAgZm9yKDsgbV9sb29wSW5kZXggPCBHQkg7IG1fbG9vcEluZGV4KyspIHsKKyAgICAgICAgaWYoVFBHRE9OKSB7CisgICAgICAgICAgICBTTFRQID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbMHgwMGU1XSk7CisgICAgICAgICAgICBMVFAgPSBMVFAgXiBTTFRQOworICAgICAgICB9CisgICAgICAgIGlmKExUUCA9PSAxKSB7CisgICAgICAgICAgICBwSW1hZ2UtPmNvcHlMaW5lKG1fbG9vcEluZGV4LCBtX2xvb3BJbmRleCAtIDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGluZTEgPSBwSW1hZ2UtPmdldFBpeGVsKDEsIG1fbG9vcEluZGV4IC0gMik7CisgICAgICAgICAgICBsaW5lMSB8PSBwSW1hZ2UtPmdldFBpeGVsKDAsIG1fbG9vcEluZGV4IC0gMikgPDwgMTsKKyAgICAgICAgICAgIGxpbmUyID0gcEltYWdlLT5nZXRQaXhlbCgxLCBtX2xvb3BJbmRleCAtIDEpOworICAgICAgICAgICAgbGluZTIgfD0gcEltYWdlLT5nZXRQaXhlbCgwLCBtX2xvb3BJbmRleCAtIDEpIDw8IDE7CisgICAgICAgICAgICBsaW5lMyA9IDA7CisgICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHQlc7IHcrKykgeworICAgICAgICAgICAgICAgIGlmKFVTRVNLSVAgJiYgU0tJUC0+Z2V0UGl4ZWwodywgbV9sb29wSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgICAgIGJWYWwgPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSBsaW5lMzsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBwSW1hZ2UtPmdldFBpeGVsKHcgKyBHQkFUWzBdLCBtX2xvb3BJbmRleCArIEdCQVRbMV0pIDw8IDI7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTIgPDwgMzsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBsaW5lMSA8PCA3OworICAgICAgICAgICAgICAgICAgICBiVmFsID0gcEFyaXRoRGVjb2Rlci0+REVDT0RFKCZnYkNvbnRleHRbQ09OVEVYVF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihiVmFsKSB7CisgICAgICAgICAgICAgICAgICAgIHBJbWFnZS0+c2V0UGl4ZWwodywgbV9sb29wSW5kZXgsIGJWYWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaW5lMSA9ICgobGluZTEgPDwgMSkgfCBwSW1hZ2UtPmdldFBpeGVsKHcgKyAyLCBtX2xvb3BJbmRleCAtIDIpKSAmIDB4MDc7CisgICAgICAgICAgICAgICAgbGluZTIgPSAoKGxpbmUyIDw8IDEpIHwgcEltYWdlLT5nZXRQaXhlbCh3ICsgMiwgbV9sb29wSW5kZXggLSAxKSkgJiAweDBmOworICAgICAgICAgICAgICAgIGxpbmUzID0gKChsaW5lMyA8PCAxKSB8IGJWYWwpICYgMHgwMzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZihwUGF1c2UgJiYgcFBhdXNlLT5OZWVkVG9QYXVzZU5vdygpKSB7CisgICAgICAgICAgICBtX2xvb3BJbmRleCsrOworICAgICAgICAgICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUU7CisgICAgICAgICAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsKKyAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsKK30KK0ZYQ09ERUNfU1RBVFVTIENKQmlnMl9HUkRQcm9jOjpkZWNvZGVfQXJpdGhfVGVtcGxhdGUzX29wdDMoQ0pCaWcyX0ltYWdlICpwSW1hZ2UsIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgRlhfQk9PTCBTTFRQLCBiVmFsOworICAgIEZYX0RXT1JEIENPTlRFWFQ7CisgICAgRlhfRFdPUkQgbGluZTE7CisgICAgRlhfQllURSAqcExpbmUxLCBjVmFsOworICAgIEZYX0lOVDMyIG5TdHJpZGUsIGs7CisgICAgRlhfSU5UMzIgbkxpbmVCeXRlcywgbkJpdHNMZWZ0LCBjYzsKKyAgICBpZiAoIW1fcExpbmUpIHsKKyAgICAgICAgbV9wTGluZSA9IHBJbWFnZS0+bV9wRGF0YTsKKyAgICB9CisgICAgblN0cmlkZSA9IHBJbWFnZS0+bV9uU3RyaWRlOworICAgIG5MaW5lQnl0ZXMgPSAoKEdCVyArIDcpID4+IDMpIC0gMTsKKyAgICBuQml0c0xlZnQgPSBHQlcgLSAobkxpbmVCeXRlcyA8PCAzKTsKKyAgICBmb3IoOyBtX2xvb3BJbmRleCA8IEdCSDsgbV9sb29wSW5kZXgrKykgeworICAgICAgICBpZihUUEdET04pIHsKKyAgICAgICAgICAgIFNMVFAgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFsweDAxOTVdKTsKKyAgICAgICAgICAgIExUUCA9IExUUCBeIFNMVFA7CisgICAgICAgIH0KKyAgICAgICAgaWYoTFRQID09IDEpIHsKKyAgICAgICAgICAgIHBJbWFnZS0+Y29weUxpbmUobV9sb29wSW5kZXgsIG1fbG9vcEluZGV4IC0gMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZihtX2xvb3BJbmRleCA+IDApIHsKKyAgICAgICAgICAgICAgICBwTGluZTEgPSBtX3BMaW5lIC0gblN0cmlkZTsKKyAgICAgICAgICAgICAgICBsaW5lMSA9ICpwTGluZTErKzsKKyAgICAgICAgICAgICAgICBDT05URVhUID0gKGxpbmUxID4+IDEpICYgMHgwM2YwOworICAgICAgICAgICAgICAgIGZvcihjYyA9IDA7IGNjIDwgbkxpbmVCeXRlczsgY2MrKykgeworICAgICAgICAgICAgICAgICAgICBsaW5lMSA9IChsaW5lMSA8PCA4KSB8ICgqcExpbmUxKyspOworICAgICAgICAgICAgICAgICAgICBjVmFsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGsgPSA3OyBrID49IDA7IGstLSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCBrOworICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCA9ICgoQ09OVEVYVCAmIDB4MDFmNykgPDwgMSkgfCBiVmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGxpbmUxID4+IChrICsgMSkpICYgMHgwMDEwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtX3BMaW5lW2NjXSA9IGNWYWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmUxIDw8PSA4OworICAgICAgICAgICAgICAgIGNWYWwgPSAwOworICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IG5CaXRzTGVmdDsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCAoNyAtIGspOworICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKChDT05URVhUICYgMHgwMWY3KSA8PCAxKSB8IGJWYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKChsaW5lMSA+PiAoOCAtIGspKSAmIDB4MDAxMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fcExpbmVbbkxpbmVCeXRlc10gPSBjVmFsOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBDT05URVhUID0gMDsKKyAgICAgICAgICAgICAgICBmb3IoY2MgPSAwOyBjYyA8IG5MaW5lQnl0ZXM7IGNjKyspIHsKKyAgICAgICAgICAgICAgICAgICAgY1ZhbCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZvcihrID0gNzsgayA+PSAwOyBrLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjVmFsIHw9IGJWYWwgPDwgazsKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSAoKENPTlRFWFQgJiAweDAxZjcpIDw8IDEpIHwgYlZhbDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtX3BMaW5lW2NjXSA9IGNWYWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNWYWwgPSAwOworICAgICAgICAgICAgICAgIGZvcihrID0gMDsgayA8IG5CaXRzTGVmdDsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIGJWYWwgPSBwQXJpdGhEZWNvZGVyLT5ERUNPREUoJmdiQ29udGV4dFtDT05URVhUXSk7CisgICAgICAgICAgICAgICAgICAgIGNWYWwgfD0gYlZhbCA8PCAoNyAtIGspOworICAgICAgICAgICAgICAgICAgICBDT05URVhUID0gKChDT05URVhUICYgMHgwMWY3KSA8PCAxKSB8IGJWYWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fcExpbmVbbkxpbmVCeXRlc10gPSBjVmFsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fcExpbmUgKz0gblN0cmlkZTsKKyAgICAgICAgaWYocFBhdXNlICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgeworICAgICAgICAgICAgbV9sb29wSW5kZXgrKzsKKyAgICAgICAgICAgIG1fUHJvc3NpdmVTdGF0dXMgPSBGWENPREVDX1NUQVRVU19ERUNPREVfVE9CRUNPTlRJTlVFOworICAgICAgICAgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7CisgICAgcmV0dXJuIEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9GSU5JU0g7Cit9CitGWENPREVDX1NUQVRVUyBDSkJpZzJfR1JEUHJvYzo6ZGVjb2RlX0FyaXRoX1RlbXBsYXRlM191bm9wdChDSkJpZzJfSW1hZ2UgKiBwSW1hZ2UsIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgRlhfQk9PTCBTTFRQLCBiVmFsOworICAgIEZYX0RXT1JEIENPTlRFWFQ7CisgICAgRlhfRFdPUkQgbGluZTEsIGxpbmUyOworICAgIGZvcig7IG1fbG9vcEluZGV4IDwgR0JIOyBtX2xvb3BJbmRleCsrKSB7CisgICAgICAgIGlmKFRQR0RPTikgeworICAgICAgICAgICAgU0xUUCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0WzB4MDE5NV0pOworICAgICAgICAgICAgTFRQID0gTFRQIF4gU0xUUDsKKyAgICAgICAgfQorICAgICAgICBpZihMVFAgPT0gMSkgeworICAgICAgICAgICAgcEltYWdlLT5jb3B5TGluZShtX2xvb3BJbmRleCwgbV9sb29wSW5kZXggLSAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxpbmUxID0gcEltYWdlLT5nZXRQaXhlbCgxLCBtX2xvb3BJbmRleCAtIDEpOworICAgICAgICAgICAgbGluZTEgfD0gcEltYWdlLT5nZXRQaXhlbCgwLCBtX2xvb3BJbmRleCAtIDEpIDw8IDE7CisgICAgICAgICAgICBsaW5lMiA9IDA7CisgICAgICAgICAgICBmb3IoRlhfRFdPUkQgdyA9IDA7IHcgPCBHQlc7IHcrKykgeworICAgICAgICAgICAgICAgIGlmKFVTRVNLSVAgJiYgU0tJUC0+Z2V0UGl4ZWwodywgbV9sb29wSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgICAgIGJWYWwgPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgPSBsaW5lMjsKKyAgICAgICAgICAgICAgICAgICAgQ09OVEVYVCB8PSBwSW1hZ2UtPmdldFBpeGVsKHcgKyBHQkFUWzBdLCBtX2xvb3BJbmRleCArIEdCQVRbMV0pIDw8IDQ7CisgICAgICAgICAgICAgICAgICAgIENPTlRFWFQgfD0gbGluZTEgPDwgNTsKKyAgICAgICAgICAgICAgICAgICAgYlZhbCA9IHBBcml0aERlY29kZXItPkRFQ09ERSgmZ2JDb250ZXh0W0NPTlRFWFRdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoYlZhbCkgeworICAgICAgICAgICAgICAgICAgICBwSW1hZ2UtPnNldFBpeGVsKHcsIG1fbG9vcEluZGV4LCBiVmFsKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGluZTEgPSAoKGxpbmUxIDw8IDEpIHwgcEltYWdlLT5nZXRQaXhlbCh3ICsgMiwgbV9sb29wSW5kZXggLSAxKSkgJiAweDFmOworICAgICAgICAgICAgICAgIGxpbmUyID0gKChsaW5lMiA8PCAxKSB8IGJWYWwpICYgMHgwZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZihwUGF1c2UgJiYgcFBhdXNlLT5OZWVkVG9QYXVzZU5vdygpKSB7CisgICAgICAgICAgICBtX2xvb3BJbmRleCsrOworICAgICAgICAgICAgbV9Qcm9zc2l2ZVN0YXR1cyA9IEZYQ09ERUNfU1RBVFVTX0RFQ09ERV9UT0JFQ09OVElOVUU7CisgICAgICAgICAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfREVDT0RFX1RPQkVDT05USU5VRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX1Byb3NzaXZlU3RhdHVzID0gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsKKyAgICByZXR1cm4gRlhDT0RFQ19TVEFUVVNfREVDT0RFX0ZJTklTSDsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfR2VuZXJhbERlY29kZXIuaCBiL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfR2VuZXJhbERlY29kZXIuaAppbmRleCBhODlkMGQ2Li4zZjQzYzk3IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0dlbmVyYWxEZWNvZGVyLmgKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9HZW5lcmFsRGVjb2Rlci5oCkBAIC0xLDI3OCArMSwyNzggQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0pCSUcyX0dFTkVSQUxfREVDT0RFUl9IXw0KLSNkZWZpbmUgX0pCSUcyX0dFTkVSQUxfREVDT0RFUl9IXw0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWNfZGVmLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfYmFzaWMuaCINCi0jaW5jbHVkZSAiSkJpZzJfRGVmaW5lLmgiDQotI2luY2x1ZGUgIkpCaWcyX1N5bWJvbERpY3QuaCINCi0jaW5jbHVkZSAiSkJpZzJfQXJpdGhEZWNvZGVyLmgiDQotI2luY2x1ZGUgIkpCaWcyX0FyaXRoSW50RGVjb2Rlci5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2Nvb3JkaW5hdGVzLmgiDQotY2xhc3MgQ0pCaWcyX0h1ZmZtYW5UYWJsZTsNCi1jbGFzcyBDSkJpZzJfSW1hZ2U7DQotY2xhc3MgQ0pCaWcyX1BhdHRlcm5EaWN0Ow0KLXR5cGVkZWYgZW51bSB7DQotICAgIEpCSUcyX0NPUk5FUl9CT1RUT01MRUZUID0gMCwNCi0gICAgSkJJRzJfQ09STkVSX1RPUExFRlQJPSAxLA0KLSAgICBKQklHMl9DT1JORVJfQk9UVE9NUklHSFQgPSAyLA0KLSAgICBKQklHMl9DT1JORVJfVE9QUklHSFQJPSAzDQotfSBKQmlnMkNvcm5lcjsNCi1jbGFzcyBDSkJpZzJfR1JEUHJvYyA6IHB1YmxpYyBDSkJpZzJfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgQ0pCaWcyX0dSRFByb2MoKQ0KLSAgICB7DQotICAgICAgICBtX2xvb3BJbmRleCA9IDA7DQotICAgICAgICBtX3BMaW5lID0gTlVMTDsNCi0gICAgICAgIG1fcFBhdXNlID0gTlVMTDsNCi0gICAgICAgIG1fRGVjb2RlVHlwZSA9IDA7DQotICAgICAgICBMVFAgPSAwOw0KLSAgICAgICAgbV9SZXBsYWNlUmVjdC5sZWZ0ID0gMDsNCi0gICAgICAgIG1fUmVwbGFjZVJlY3QuYm90dG9tID0gMDsNCi0gICAgICAgIG1fUmVwbGFjZVJlY3QudG9wID0gMDsNCi0gICAgICAgIG1fUmVwbGFjZVJlY3QucmlnaHQgPSAwOw0KLSAgICB9DQotDQotICAgIENKQmlnMl9JbWFnZSAqZGVjb2RlX0FyaXRoKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCk7DQotDQotICAgIENKQmlnMl9JbWFnZSAqZGVjb2RlX0FyaXRoX1YyKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCk7DQotDQotICAgIENKQmlnMl9JbWFnZSAqZGVjb2RlX0FyaXRoX1YxKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCk7DQotDQotICAgIENKQmlnMl9JbWFnZSAqZGVjb2RlX01NUihDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtKTsNCi0gICAgRlhDT0RFQ19TVEFUVVMgU3RhcnRfZGVjb2RlX0FyaXRoKENKQmlnMl9JbWFnZSoqIHBJbWFnZSwgQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSA9IE5VTEwpOw0KLSAgICBGWENPREVDX1NUQVRVUyBTdGFydF9kZWNvZGVfQXJpdGhfVjIoQ0pCaWcyX0ltYWdlKiogcEltYWdlLCBDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQsIElGWF9QYXVzZSogcFBhdXNlID0gTlVMTCk7DQotICAgIEZYQ09ERUNfU1RBVFVTIFN0YXJ0X2RlY29kZV9Bcml0aF9WMShDSkJpZzJfSW1hZ2UqKiBwSW1hZ2UsIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UgPSBOVUxMKTsNCi0gICAgRlhDT0RFQ19TVEFUVVMgU3RhcnRfZGVjb2RlX01NUihDSkJpZzJfSW1hZ2UqKiBwSW1hZ2UsIENKQmlnMl9CaXRTdHJlYW0gKnBTdHJlYW0sIElGWF9QYXVzZSogcFBhdXNlID0gTlVMTCk7DQotICAgIEZYQ09ERUNfU1RBVFVTIENvbnRpbnVlX2RlY29kZShJRlhfUGF1c2UqIHBQYXVzZSk7DQotICAgIEZYX1JFQ1QJCSAgIEdldFJlcGxhY2VSZWN0KCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fUmVwbGFjZVJlY3Q7DQotICAgIH07DQotcHJpdmF0ZToNCi0gICAgRlhDT0RFQ19TVEFUVVMgZGVjb2RlX0FyaXRoKElGWF9QYXVzZSogcFBhdXNlKTsNCi0gICAgRlhDT0RFQ19TVEFUVVMgZGVjb2RlX0FyaXRoX1YyKElGWF9QYXVzZSogcFBhdXNlKTsNCi0gICAgRlhDT0RFQ19TVEFUVVMgZGVjb2RlX0FyaXRoX1YxKElGWF9QYXVzZSogcFBhdXNlKTsNCi0gICAgRlhDT0RFQ19TVEFUVVMgZGVjb2RlX01NUigpOw0KLSAgICBGWENPREVDX1NUQVRVUyBkZWNvZGVfQXJpdGhfVGVtcGxhdGUwX29wdDMoQ0pCaWcyX0ltYWdlKnBJbWFnZSwgQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSk7DQotICAgIEZYQ09ERUNfU1RBVFVTIGRlY29kZV9Bcml0aF9UZW1wbGF0ZTBfdW5vcHQoQ0pCaWcyX0ltYWdlICpwSW1hZ2UsIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpOw0KLSAgICBGWENPREVDX1NUQVRVUyBkZWNvZGVfQXJpdGhfVGVtcGxhdGUxX29wdDMoQ0pCaWcyX0ltYWdlICpwSW1hZ2UsIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpOw0KLSAgICBGWENPREVDX1NUQVRVUyBkZWNvZGVfQXJpdGhfVGVtcGxhdGUxX3Vub3B0KENKQmlnMl9JbWFnZSAqIHBJbWFnZSwgQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSk7DQotICAgIEZYQ09ERUNfU1RBVFVTIGRlY29kZV9Bcml0aF9UZW1wbGF0ZTJfb3B0MyhDSkJpZzJfSW1hZ2UgKnBJbWFnZSwgQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSk7DQotICAgIEZYQ09ERUNfU1RBVFVTIGRlY29kZV9Bcml0aF9UZW1wbGF0ZTJfdW5vcHQoQ0pCaWcyX0ltYWdlICogcEltYWdlLCBDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQsIElGWF9QYXVzZSogcFBhdXNlKTsNCi0gICAgRlhDT0RFQ19TVEFUVVMgZGVjb2RlX0FyaXRoX1RlbXBsYXRlM19vcHQzKENKQmlnMl9JbWFnZSAqcEltYWdlLCBDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQsIElGWF9QYXVzZSogcFBhdXNlKTsNCi0gICAgRlhDT0RFQ19TVEFUVVMgZGVjb2RlX0FyaXRoX1RlbXBsYXRlM191bm9wdChDSkJpZzJfSW1hZ2UgKiBwSW1hZ2UsIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpOw0KLSAgICBGWF9EV09SRAltX2xvb3BJbmRleDsNCi0gICAgRlhfQllURSAqCW1fcExpbmU7DQotICAgIElGWF9QYXVzZSoJbV9wUGF1c2U7DQotICAgIEZYQ09ERUNfU1RBVFVTCW1fUHJvc3NpdmVTdGF0dXM7DQotICAgIENKQmlnMl9JbWFnZSoqIG1fcEltYWdlOw0KLSAgICBDSkJpZzJfQXJpdGhEZWNvZGVyICptX3BBcml0aERlY29kZXI7DQotICAgIEpCaWcyQXJpdGhDdHggKm1fZ2JDb250ZXh0Ow0KLSAgICBGWF9XT1JECQltX0RlY29kZVR5cGU7DQotICAgIEZYX0JPT0wgTFRQOw0KLSAgICBGWF9SRUNUIG1fUmVwbGFjZVJlY3Q7DQotcHJpdmF0ZToNCi0NCi0gICAgQ0pCaWcyX0ltYWdlICpkZWNvZGVfQXJpdGhfVGVtcGxhdGUwX29wdChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpOw0KLQ0KLSAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9Bcml0aF9UZW1wbGF0ZTBfb3B0MihDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpOw0KLQ0KLSAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9Bcml0aF9UZW1wbGF0ZTBfb3B0MyhDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpOw0KLQ0KLSAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9Bcml0aF9UZW1wbGF0ZTBfdW5vcHQoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KTsNCi0NCi0gICAgQ0pCaWcyX0ltYWdlICpkZWNvZGVfQXJpdGhfVGVtcGxhdGUxX29wdChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpOw0KLQ0KLSAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9Bcml0aF9UZW1wbGF0ZTFfb3B0MihDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpOw0KLQ0KLSAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9Bcml0aF9UZW1wbGF0ZTFfb3B0MyhDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpOw0KLQ0KLSAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9Bcml0aF9UZW1wbGF0ZTFfdW5vcHQoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KTsNCi0NCi0gICAgQ0pCaWcyX0ltYWdlICpkZWNvZGVfQXJpdGhfVGVtcGxhdGUyX29wdChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpOw0KLQ0KLSAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9Bcml0aF9UZW1wbGF0ZTJfb3B0MihDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpOw0KLQ0KLSAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9Bcml0aF9UZW1wbGF0ZTJfb3B0MyhDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpOw0KLQ0KLSAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9Bcml0aF9UZW1wbGF0ZTJfdW5vcHQoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KTsNCi0NCi0gICAgQ0pCaWcyX0ltYWdlICpkZWNvZGVfQXJpdGhfVGVtcGxhdGUzX29wdChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpOw0KLQ0KLSAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9Bcml0aF9UZW1wbGF0ZTNfb3B0MihDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpOw0KLQ0KLSAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9Bcml0aF9UZW1wbGF0ZTNfb3B0MyhDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpOw0KLQ0KLSAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9Bcml0aF9UZW1wbGF0ZTNfdW5vcHQoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KTsNCi1wdWJsaWM6DQotICAgIEZYX0JPT0wgTU1SOw0KLSAgICBGWF9EV09SRCBHQlc7DQotICAgIEZYX0RXT1JEIEdCSDsNCi0gICAgRlhfQllURSBHQlRFTVBMQVRFOw0KLSAgICBGWF9CT09MIFRQR0RPTjsNCi0gICAgRlhfQk9PTCBVU0VTS0lQOw0KLSAgICBDSkJpZzJfSW1hZ2UgKiBTS0lQOw0KLSAgICBzaWduZWQgY2hhciBHQkFUWzhdOw0KLX07DQotY2xhc3MgQ0pCaWcyX0dSUkRQcm9jIDogcHVibGljIENKQmlnMl9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZShDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnckNvbnRleHQpOw0KLQ0KLSAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9UZW1wbGF0ZTBfdW5vcHQoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ3JDb250ZXh0KTsNCi0NCi0gICAgQ0pCaWcyX0ltYWdlICpkZWNvZGVfVGVtcGxhdGUwX29wdChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnckNvbnRleHQpOw0KLQ0KLSAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9UZW1wbGF0ZTFfdW5vcHQoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ3JDb250ZXh0KTsNCi0NCi0gICAgQ0pCaWcyX0ltYWdlICpkZWNvZGVfVGVtcGxhdGUxX29wdChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnckNvbnRleHQpOw0KLQ0KLSAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9WMShDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnckNvbnRleHQpOw0KLXB1YmxpYzoNCi0gICAgRlhfRFdPUkQgR1JXOw0KLSAgICBGWF9EV09SRCBHUkg7DQotICAgIEZYX0JPT0wgR1JURU1QTEFURTsNCi0gICAgQ0pCaWcyX0ltYWdlICpHUlJFRkVSRU5DRTsNCi0gICAgRlhfSU5UMzIgR1JSRUZFUkVOQ0VEWDsNCi0gICAgRlhfSU5UMzIgR1JSRUZFUkVOQ0VEWTsNCi0gICAgRlhfQk9PTCBUUEdST047DQotICAgIHNpZ25lZCBjaGFyCUdSQVRbNF07DQotfTsNCi10eXBlZGVmIHN0cnVjdCB7DQotICAgIENKQmlnMl9Bcml0aEludERlY29kZXIgKklBRFQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKklBRlMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKklBRFMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKklBSVQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKklBUkksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKklBUkRXLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICpJQVJESCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAqSUFSRFgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKklBUkRZOw0KLSAgICBDSkJpZzJfQXJpdGhJYWlkRGVjb2RlciAqSUFJRDsNCi19IEpCaWcySW50RGVjb2RlclN0YXRlOw0KLWNsYXNzIENKQmlnMl9UUkRQcm9jIDogcHVibGljIENKQmlnMl9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9IdWZmbWFuKENKQmlnMl9CaXRTdHJlYW0gKnBTdHJlYW0sIEpCaWcyQXJpdGhDdHggKmdyQ29udGV4dCk7DQotDQotICAgIENKQmlnMl9JbWFnZSAqZGVjb2RlX0FyaXRoKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdyQ29udGV4dCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkJpZzJJbnREZWNvZGVyU3RhdGUgKnBJRFMgPSBOVUxMKTsNCi1wdWJsaWM6DQotICAgIEZYX0JPT0wgU0JIVUZGOw0KLSAgICBGWF9CT09MIFNCUkVGSU5FOw0KLSAgICBGWF9EV09SRCBTQlc7DQotICAgIEZYX0RXT1JEIFNCSDsNCi0gICAgRlhfRFdPUkQgU0JOVU1JTlNUQU5DRVM7DQotICAgIEZYX0RXT1JEIFNCU1RSSVBTOw0KLSAgICBGWF9EV09SRCBTQk5VTVNZTVM7DQotDQotICAgIEpCaWcySHVmZm1hbkNvZGUgKlNCU1lNQ09ERVM7DQotICAgIEZYX0JZVEUgU0JTWU1DT0RFTEVOOw0KLQ0KLSAgICBDSkJpZzJfSW1hZ2UgKipTQlNZTVM7DQotICAgIEZYX0JPT0wgU0JERUZQSVhFTDsNCi0NCi0gICAgSkJpZzJDb21wb3NlT3AgU0JDT01CT1A7DQotICAgIEZYX0JPT0wgVFJBTlNQT1NFRDsNCi0NCi0gICAgSkJpZzJDb3JuZXIgUkVGQ09STkVSOw0KLSAgICBzaWduZWQgY2hhciBTQkRTT0ZGU0VUOw0KLSAgICBDSkJpZzJfSHVmZm1hblRhYmxlICpTQkhVRkZGUywNCi0gICAgICAgICAgICAgICAgICAgICAgICAqU0JIVUZGRFMsDQotICAgICAgICAgICAgICAgICAgICAgICAgKlNCSFVGRkRULA0KLSAgICAgICAgICAgICAgICAgICAgICAgICpTQkhVRkZSRFcsDQotICAgICAgICAgICAgICAgICAgICAgICAgKlNCSFVGRlJESCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAqU0JIVUZGUkRYLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICpTQkhVRkZSRFksDQotICAgICAgICAgICAgICAgICAgICAgICAgKlNCSFVGRlJTSVpFOw0KLSAgICBGWF9CT09MIFNCUlRFTVBMQVRFOw0KLSAgICBzaWduZWQgY2hhciBTQlJBVFs0XTsNCi19Ow0KLWNsYXNzIENKQmlnMl9TRERQcm9jIDogcHVibGljIENKQmlnMl9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDSkJpZzJfU3ltYm9sRGljdCAqZGVjb2RlX0FyaXRoKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSkJpZzJBcml0aEN0eCAqZ3JDb250ZXh0KTsNCi0NCi0gICAgQ0pCaWcyX1N5bWJvbERpY3QgKmRlY29kZV9IdWZmbWFuKENKQmlnMl9CaXRTdHJlYW0gKnBTdHJlYW0sIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSkJpZzJBcml0aEN0eCAqZ3JDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSk7DQotcHVibGljOg0KLSAgICBGWF9CT09MIFNESFVGRjsNCi0gICAgRlhfQk9PTCBTRFJFRkFHRzsNCi0gICAgRlhfRFdPUkQgU0ROVU1JTlNZTVM7DQotICAgIENKQmlnMl9JbWFnZSAqKiBTRElOU1lNUzsNCi0gICAgRlhfRFdPUkQgU0ROVU1ORVdTWU1TOw0KLSAgICBGWF9EV09SRCBTRE5VTUVYU1lNUzsNCi0gICAgQ0pCaWcyX0h1ZmZtYW5UYWJsZSAqU0RIVUZGREgsDQotICAgICAgICAgICAgICAgICAgICAgICAgKlNESFVGRkRXLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICpTREhVRkZCTVNJWkUsDQotICAgICAgICAgICAgICAgICAgICAgICAgKlNESFVGRkFHR0lOU1Q7DQotICAgIEZYX0JZVEUgU0RURU1QTEFURTsNCi0gICAgc2lnbmVkIGNoYXIgU0RBVFs4XTsNCi0gICAgRlhfQk9PTCBTRFJURU1QTEFURTsNCi0gICAgc2lnbmVkIGNoYXIgU0RSQVRbNF07DQotfTsNCi1jbGFzcyBDSkJpZzJfSFRSRFByb2MgOiBwdWJsaWMgQ0pCaWcyX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENKQmlnMl9JbWFnZSAqZGVjb2RlX0FyaXRoKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpOw0KLQ0KLSAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9NTVIoQ0pCaWcyX0JpdFN0cmVhbSAqcFN0cmVhbSwgSUZYX1BhdXNlKiBwUGF1c2UpOw0KLXB1YmxpYzoNCi0gICAgRlhfRFdPUkQgSEJXLA0KLSAgICAgICAgICAgICBIQkg7DQotICAgIEZYX0JPT0wgSE1NUjsNCi0gICAgRlhfQllURSBIVEVNUExBVEU7DQotICAgIEZYX0RXT1JEIEhOVU1QQVRTOw0KLSAgICBDSkJpZzJfSW1hZ2UgKipIUEFUUzsNCi0gICAgRlhfQk9PTCBIREVGUElYRUw7DQotICAgIEpCaWcyQ29tcG9zZU9wIEhDT01CT1A7DQotICAgIEZYX0JPT0wgSEVOQUJMRVNLSVA7DQotICAgIEZYX0RXT1JEIEhHVywNCi0gICAgICAgICAgICAgSEdIOw0KLSAgICBGWF9JTlQzMiBIR1gsDQotICAgICAgICAgICAgIEhHWTsNCi0gICAgRlhfV09SRCBIUlgsDQotICAgICAgICAgICAgSFJZOw0KLSAgICBGWF9CWVRFIEhQVywNCi0gICAgICAgICAgICBIUEg7DQotfTsNCi1jbGFzcyBDSkJpZzJfUEREUHJvYyA6IHB1YmxpYyBDSkJpZzJfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ0pCaWcyX1BhdHRlcm5EaWN0ICpkZWNvZGVfQXJpdGgoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSk7DQotDQotICAgIENKQmlnMl9QYXR0ZXJuRGljdCAqZGVjb2RlX01NUihDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtLCBJRlhfUGF1c2UqIHBQYXVzZSk7DQotcHVibGljOg0KLSAgICBGWF9CT09MIEhETU1SOw0KLSAgICBGWF9CWVRFIEhEUFcsDQotICAgICAgICAgICAgSERQSDsNCi0gICAgRlhfRFdPUkQgR1JBWU1BWDsNCi0gICAgRlhfQllURSBIRFRFTVBMQVRFOw0KLX07DQotY2xhc3MgQ0pCaWcyX0dTSURQcm9jIDogcHVibGljIENKQmlnMl9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBGWF9EV09SRCAqZGVjb2RlX0FyaXRoKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpOw0KLQ0KLSAgICBGWF9EV09SRCAqZGVjb2RlX01NUihDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtLCBJRlhfUGF1c2UqIHBQYXVzZSk7DQotcHVibGljOg0KLSAgICBGWF9CT09MIEdTTU1SOw0KLSAgICBGWF9CT09MIEdTVVNFU0tJUDsNCi0gICAgRlhfQllURSBHU0JQUDsNCi0gICAgRlhfRFdPUkQgR1NXLA0KLSAgICAgICAgICAgICBHU0g7DQotICAgIEZYX0JZVEUgR1NURU1QTEFURTsNCi0gICAgQ0pCaWcyX0ltYWdlICpHU0tJUDsNCi19Ow0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0pCSUcyX0dFTkVSQUxfREVDT0RFUl9IXworI2RlZmluZSBfSkJJRzJfR0VORVJBTF9ERUNPREVSX0hfCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjX2RlZi5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfYmFzaWMuaCIKKyNpbmNsdWRlICJKQmlnMl9EZWZpbmUuaCIKKyNpbmNsdWRlICJKQmlnMl9TeW1ib2xEaWN0LmgiCisjaW5jbHVkZSAiSkJpZzJfQXJpdGhEZWNvZGVyLmgiCisjaW5jbHVkZSAiSkJpZzJfQXJpdGhJbnREZWNvZGVyLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNydC9meF9jb29yZGluYXRlcy5oIgorY2xhc3MgQ0pCaWcyX0h1ZmZtYW5UYWJsZTsKK2NsYXNzIENKQmlnMl9JbWFnZTsKK2NsYXNzIENKQmlnMl9QYXR0ZXJuRGljdDsKK3R5cGVkZWYgZW51bSB7CisgICAgSkJJRzJfQ09STkVSX0JPVFRPTUxFRlQgPSAwLAorICAgIEpCSUcyX0NPUk5FUl9UT1BMRUZUCT0gMSwKKyAgICBKQklHMl9DT1JORVJfQk9UVE9NUklHSFQgPSAyLAorICAgIEpCSUcyX0NPUk5FUl9UT1BSSUdIVAk9IDMKK30gSkJpZzJDb3JuZXI7CitjbGFzcyBDSkJpZzJfR1JEUHJvYyA6IHB1YmxpYyBDSkJpZzJfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ0pCaWcyX0dSRFByb2MoKQorICAgIHsKKyAgICAgICAgbV9sb29wSW5kZXggPSAwOworICAgICAgICBtX3BMaW5lID0gTlVMTDsKKyAgICAgICAgbV9wUGF1c2UgPSBOVUxMOworICAgICAgICBtX0RlY29kZVR5cGUgPSAwOworICAgICAgICBMVFAgPSAwOworICAgICAgICBtX1JlcGxhY2VSZWN0LmxlZnQgPSAwOworICAgICAgICBtX1JlcGxhY2VSZWN0LmJvdHRvbSA9IDA7CisgICAgICAgIG1fUmVwbGFjZVJlY3QudG9wID0gMDsKKyAgICAgICAgbV9SZXBsYWNlUmVjdC5yaWdodCA9IDA7CisgICAgfQorCisgICAgQ0pCaWcyX0ltYWdlICpkZWNvZGVfQXJpdGgoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KTsKKworICAgIENKQmlnMl9JbWFnZSAqZGVjb2RlX0FyaXRoX1YyKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCk7CisKKyAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9Bcml0aF9WMShDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpOworCisgICAgQ0pCaWcyX0ltYWdlICpkZWNvZGVfTU1SKENKQmlnMl9CaXRTdHJlYW0gKnBTdHJlYW0pOworICAgIEZYQ09ERUNfU1RBVFVTIFN0YXJ0X2RlY29kZV9Bcml0aChDSkJpZzJfSW1hZ2UqKiBwSW1hZ2UsIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UgPSBOVUxMKTsKKyAgICBGWENPREVDX1NUQVRVUyBTdGFydF9kZWNvZGVfQXJpdGhfVjIoQ0pCaWcyX0ltYWdlKiogcEltYWdlLCBDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQsIElGWF9QYXVzZSogcFBhdXNlID0gTlVMTCk7CisgICAgRlhDT0RFQ19TVEFUVVMgU3RhcnRfZGVjb2RlX0FyaXRoX1YxKENKQmlnMl9JbWFnZSoqIHBJbWFnZSwgQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSA9IE5VTEwpOworICAgIEZYQ09ERUNfU1RBVFVTIFN0YXJ0X2RlY29kZV9NTVIoQ0pCaWcyX0ltYWdlKiogcEltYWdlLCBDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtLCBJRlhfUGF1c2UqIHBQYXVzZSA9IE5VTEwpOworICAgIEZYQ09ERUNfU1RBVFVTIENvbnRpbnVlX2RlY29kZShJRlhfUGF1c2UqIHBQYXVzZSk7CisgICAgRlhfUkVDVAkJICAgR2V0UmVwbGFjZVJlY3QoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fUmVwbGFjZVJlY3Q7CisgICAgfTsKK3ByaXZhdGU6CisgICAgRlhDT0RFQ19TVEFUVVMgZGVjb2RlX0FyaXRoKElGWF9QYXVzZSogcFBhdXNlKTsKKyAgICBGWENPREVDX1NUQVRVUyBkZWNvZGVfQXJpdGhfVjIoSUZYX1BhdXNlKiBwUGF1c2UpOworICAgIEZYQ09ERUNfU1RBVFVTIGRlY29kZV9Bcml0aF9WMShJRlhfUGF1c2UqIHBQYXVzZSk7CisgICAgRlhDT0RFQ19TVEFUVVMgZGVjb2RlX01NUigpOworICAgIEZYQ09ERUNfU1RBVFVTIGRlY29kZV9Bcml0aF9UZW1wbGF0ZTBfb3B0MyhDSkJpZzJfSW1hZ2UqcEltYWdlLCBDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQsIElGWF9QYXVzZSogcFBhdXNlKTsKKyAgICBGWENPREVDX1NUQVRVUyBkZWNvZGVfQXJpdGhfVGVtcGxhdGUwX3Vub3B0KENKQmlnMl9JbWFnZSAqcEltYWdlLCBDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQsIElGWF9QYXVzZSogcFBhdXNlKTsKKyAgICBGWENPREVDX1NUQVRVUyBkZWNvZGVfQXJpdGhfVGVtcGxhdGUxX29wdDMoQ0pCaWcyX0ltYWdlICpwSW1hZ2UsIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpOworICAgIEZYQ09ERUNfU1RBVFVTIGRlY29kZV9Bcml0aF9UZW1wbGF0ZTFfdW5vcHQoQ0pCaWcyX0ltYWdlICogcEltYWdlLCBDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQsIElGWF9QYXVzZSogcFBhdXNlKTsKKyAgICBGWENPREVDX1NUQVRVUyBkZWNvZGVfQXJpdGhfVGVtcGxhdGUyX29wdDMoQ0pCaWcyX0ltYWdlICpwSW1hZ2UsIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpOworICAgIEZYQ09ERUNfU1RBVFVTIGRlY29kZV9Bcml0aF9UZW1wbGF0ZTJfdW5vcHQoQ0pCaWcyX0ltYWdlICogcEltYWdlLCBDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQsIElGWF9QYXVzZSogcFBhdXNlKTsKKyAgICBGWENPREVDX1NUQVRVUyBkZWNvZGVfQXJpdGhfVGVtcGxhdGUzX29wdDMoQ0pCaWcyX0ltYWdlICpwSW1hZ2UsIENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpOworICAgIEZYQ09ERUNfU1RBVFVTIGRlY29kZV9Bcml0aF9UZW1wbGF0ZTNfdW5vcHQoQ0pCaWcyX0ltYWdlICogcEltYWdlLCBDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQsIElGWF9QYXVzZSogcFBhdXNlKTsKKyAgICBGWF9EV09SRAltX2xvb3BJbmRleDsKKyAgICBGWF9CWVRFICoJbV9wTGluZTsKKyAgICBJRlhfUGF1c2UqCW1fcFBhdXNlOworICAgIEZYQ09ERUNfU1RBVFVTCW1fUHJvc3NpdmVTdGF0dXM7CisgICAgQ0pCaWcyX0ltYWdlKiogbV9wSW1hZ2U7CisgICAgQ0pCaWcyX0FyaXRoRGVjb2RlciAqbV9wQXJpdGhEZWNvZGVyOworICAgIEpCaWcyQXJpdGhDdHggKm1fZ2JDb250ZXh0OworICAgIEZYX1dPUkQJCW1fRGVjb2RlVHlwZTsKKyAgICBGWF9CT09MIExUUDsKKyAgICBGWF9SRUNUIG1fUmVwbGFjZVJlY3Q7Citwcml2YXRlOgorCisgICAgQ0pCaWcyX0ltYWdlICpkZWNvZGVfQXJpdGhfVGVtcGxhdGUwX29wdChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpOworCisgICAgQ0pCaWcyX0ltYWdlICpkZWNvZGVfQXJpdGhfVGVtcGxhdGUwX29wdDIoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KTsKKworICAgIENKQmlnMl9JbWFnZSAqZGVjb2RlX0FyaXRoX1RlbXBsYXRlMF9vcHQzKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCk7CisKKyAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9Bcml0aF9UZW1wbGF0ZTBfdW5vcHQoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KTsKKworICAgIENKQmlnMl9JbWFnZSAqZGVjb2RlX0FyaXRoX1RlbXBsYXRlMV9vcHQoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KTsKKworICAgIENKQmlnMl9JbWFnZSAqZGVjb2RlX0FyaXRoX1RlbXBsYXRlMV9vcHQyKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCk7CisKKyAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9Bcml0aF9UZW1wbGF0ZTFfb3B0MyhDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpOworCisgICAgQ0pCaWcyX0ltYWdlICpkZWNvZGVfQXJpdGhfVGVtcGxhdGUxX3Vub3B0KENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCk7CisKKyAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9Bcml0aF9UZW1wbGF0ZTJfb3B0KENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCk7CisKKyAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9Bcml0aF9UZW1wbGF0ZTJfb3B0MihDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpOworCisgICAgQ0pCaWcyX0ltYWdlICpkZWNvZGVfQXJpdGhfVGVtcGxhdGUyX29wdDMoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KTsKKworICAgIENKQmlnMl9JbWFnZSAqZGVjb2RlX0FyaXRoX1RlbXBsYXRlMl91bm9wdChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpOworCisgICAgQ0pCaWcyX0ltYWdlICpkZWNvZGVfQXJpdGhfVGVtcGxhdGUzX29wdChDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnYkNvbnRleHQpOworCisgICAgQ0pCaWcyX0ltYWdlICpkZWNvZGVfQXJpdGhfVGVtcGxhdGUzX29wdDIoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KTsKKworICAgIENKQmlnMl9JbWFnZSAqZGVjb2RlX0FyaXRoX1RlbXBsYXRlM19vcHQzKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCk7CisKKyAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9Bcml0aF9UZW1wbGF0ZTNfdW5vcHQoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0KTsKK3B1YmxpYzoKKyAgICBGWF9CT09MIE1NUjsKKyAgICBGWF9EV09SRCBHQlc7CisgICAgRlhfRFdPUkQgR0JIOworICAgIEZYX0JZVEUgR0JURU1QTEFURTsKKyAgICBGWF9CT09MIFRQR0RPTjsKKyAgICBGWF9CT09MIFVTRVNLSVA7CisgICAgQ0pCaWcyX0ltYWdlICogU0tJUDsKKyAgICBzaWduZWQgY2hhciBHQkFUWzhdOworfTsKK2NsYXNzIENKQmlnMl9HUlJEUHJvYyA6IHB1YmxpYyBDSkJpZzJfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZShDSkJpZzJfQXJpdGhEZWNvZGVyICpwQXJpdGhEZWNvZGVyLCBKQmlnMkFyaXRoQ3R4ICpnckNvbnRleHQpOworCisgICAgQ0pCaWcyX0ltYWdlICpkZWNvZGVfVGVtcGxhdGUwX3Vub3B0KENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdyQ29udGV4dCk7CisKKyAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9UZW1wbGF0ZTBfb3B0KENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdyQ29udGV4dCk7CisKKyAgICBDSkJpZzJfSW1hZ2UgKmRlY29kZV9UZW1wbGF0ZTFfdW5vcHQoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ3JDb250ZXh0KTsKKworICAgIENKQmlnMl9JbWFnZSAqZGVjb2RlX1RlbXBsYXRlMV9vcHQoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ3JDb250ZXh0KTsKKworICAgIENKQmlnMl9JbWFnZSAqZGVjb2RlX1YxKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdyQ29udGV4dCk7CitwdWJsaWM6CisgICAgRlhfRFdPUkQgR1JXOworICAgIEZYX0RXT1JEIEdSSDsKKyAgICBGWF9CT09MIEdSVEVNUExBVEU7CisgICAgQ0pCaWcyX0ltYWdlICpHUlJFRkVSRU5DRTsKKyAgICBGWF9JTlQzMiBHUlJFRkVSRU5DRURYOworICAgIEZYX0lOVDMyIEdSUkVGRVJFTkNFRFk7CisgICAgRlhfQk9PTCBUUEdST047CisgICAgc2lnbmVkIGNoYXIJR1JBVFs0XTsKK307Cit0eXBlZGVmIHN0cnVjdCB7CisgICAgQ0pCaWcyX0FyaXRoSW50RGVjb2RlciAqSUFEVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICpJQUZTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKklBRFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAqSUFJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICpJQVJJLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKklBUkRXLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKklBUkRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKklBUkRYLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKklBUkRZOworICAgIENKQmlnMl9Bcml0aElhaWREZWNvZGVyICpJQUlEOworfSBKQmlnMkludERlY29kZXJTdGF0ZTsKK2NsYXNzIENKQmlnMl9UUkRQcm9jIDogcHVibGljIENKQmlnMl9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENKQmlnMl9JbWFnZSAqZGVjb2RlX0h1ZmZtYW4oQ0pCaWcyX0JpdFN0cmVhbSAqcFN0cmVhbSwgSkJpZzJBcml0aEN0eCAqZ3JDb250ZXh0KTsKKworICAgIENKQmlnMl9JbWFnZSAqZGVjb2RlX0FyaXRoKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdyQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQmlnMkludERlY29kZXJTdGF0ZSAqcElEUyA9IE5VTEwpOworcHVibGljOgorICAgIEZYX0JPT0wgU0JIVUZGOworICAgIEZYX0JPT0wgU0JSRUZJTkU7CisgICAgRlhfRFdPUkQgU0JXOworICAgIEZYX0RXT1JEIFNCSDsKKyAgICBGWF9EV09SRCBTQk5VTUlOU1RBTkNFUzsKKyAgICBGWF9EV09SRCBTQlNUUklQUzsKKyAgICBGWF9EV09SRCBTQk5VTVNZTVM7CisKKyAgICBKQmlnMkh1ZmZtYW5Db2RlICpTQlNZTUNPREVTOworICAgIEZYX0JZVEUgU0JTWU1DT0RFTEVOOworCisgICAgQ0pCaWcyX0ltYWdlICoqU0JTWU1TOworICAgIEZYX0JPT0wgU0JERUZQSVhFTDsKKworICAgIEpCaWcyQ29tcG9zZU9wIFNCQ09NQk9QOworICAgIEZYX0JPT0wgVFJBTlNQT1NFRDsKKworICAgIEpCaWcyQ29ybmVyIFJFRkNPUk5FUjsKKyAgICBzaWduZWQgY2hhciBTQkRTT0ZGU0VUOworICAgIENKQmlnMl9IdWZmbWFuVGFibGUgKlNCSFVGRkZTLAorICAgICAgICAgICAgICAgICAgICAgICAgKlNCSFVGRkRTLAorICAgICAgICAgICAgICAgICAgICAgICAgKlNCSFVGRkRULAorICAgICAgICAgICAgICAgICAgICAgICAgKlNCSFVGRlJEVywKKyAgICAgICAgICAgICAgICAgICAgICAgICpTQkhVRkZSREgsCisgICAgICAgICAgICAgICAgICAgICAgICAqU0JIVUZGUkRYLAorICAgICAgICAgICAgICAgICAgICAgICAgKlNCSFVGRlJEWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICpTQkhVRkZSU0laRTsKKyAgICBGWF9CT09MIFNCUlRFTVBMQVRFOworICAgIHNpZ25lZCBjaGFyIFNCUkFUWzRdOworfTsKK2NsYXNzIENKQmlnMl9TRERQcm9jIDogcHVibGljIENKQmlnMl9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENKQmlnMl9TeW1ib2xEaWN0ICpkZWNvZGVfQXJpdGgoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0LCBKQmlnMkFyaXRoQ3R4ICpnckNvbnRleHQpOworCisgICAgQ0pCaWcyX1N5bWJvbERpY3QgKmRlY29kZV9IdWZmbWFuKENKQmlnMl9CaXRTdHJlYW0gKnBTdHJlYW0sIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSkJpZzJBcml0aEN0eCAqZ3JDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSk7CitwdWJsaWM6CisgICAgRlhfQk9PTCBTREhVRkY7CisgICAgRlhfQk9PTCBTRFJFRkFHRzsKKyAgICBGWF9EV09SRCBTRE5VTUlOU1lNUzsKKyAgICBDSkJpZzJfSW1hZ2UgKiogU0RJTlNZTVM7CisgICAgRlhfRFdPUkQgU0ROVU1ORVdTWU1TOworICAgIEZYX0RXT1JEIFNETlVNRVhTWU1TOworICAgIENKQmlnMl9IdWZmbWFuVGFibGUgKlNESFVGRkRILAorICAgICAgICAgICAgICAgICAgICAgICAgKlNESFVGRkRXLAorICAgICAgICAgICAgICAgICAgICAgICAgKlNESFVGRkJNU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICpTREhVRkZBR0dJTlNUOworICAgIEZYX0JZVEUgU0RURU1QTEFURTsKKyAgICBzaWduZWQgY2hhciBTREFUWzhdOworICAgIEZYX0JPT0wgU0RSVEVNUExBVEU7CisgICAgc2lnbmVkIGNoYXIgU0RSQVRbNF07Cit9OworY2xhc3MgQ0pCaWcyX0hUUkRQcm9jIDogcHVibGljIENKQmlnMl9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENKQmlnMl9JbWFnZSAqZGVjb2RlX0FyaXRoKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpOworCisgICAgQ0pCaWcyX0ltYWdlICpkZWNvZGVfTU1SKENKQmlnMl9CaXRTdHJlYW0gKnBTdHJlYW0sIElGWF9QYXVzZSogcFBhdXNlKTsKK3B1YmxpYzoKKyAgICBGWF9EV09SRCBIQlcsCisgICAgICAgICAgICAgSEJIOworICAgIEZYX0JPT0wgSE1NUjsKKyAgICBGWF9CWVRFIEhURU1QTEFURTsKKyAgICBGWF9EV09SRCBITlVNUEFUUzsKKyAgICBDSkJpZzJfSW1hZ2UgKipIUEFUUzsKKyAgICBGWF9CT09MIEhERUZQSVhFTDsKKyAgICBKQmlnMkNvbXBvc2VPcCBIQ09NQk9QOworICAgIEZYX0JPT0wgSEVOQUJMRVNLSVA7CisgICAgRlhfRFdPUkQgSEdXLAorICAgICAgICAgICAgIEhHSDsKKyAgICBGWF9JTlQzMiBIR1gsCisgICAgICAgICAgICAgSEdZOworICAgIEZYX1dPUkQgSFJYLAorICAgICAgICAgICAgSFJZOworICAgIEZYX0JZVEUgSFBXLAorICAgICAgICAgICAgSFBIOworfTsKK2NsYXNzIENKQmlnMl9QRERQcm9jIDogcHVibGljIENKQmlnMl9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENKQmlnMl9QYXR0ZXJuRGljdCAqZGVjb2RlX0FyaXRoKENKQmlnMl9Bcml0aERlY29kZXIgKnBBcml0aERlY29kZXIsIEpCaWcyQXJpdGhDdHggKmdiQ29udGV4dCwgSUZYX1BhdXNlKiBwUGF1c2UpOworCisgICAgQ0pCaWcyX1BhdHRlcm5EaWN0ICpkZWNvZGVfTU1SKENKQmlnMl9CaXRTdHJlYW0gKnBTdHJlYW0sIElGWF9QYXVzZSogcFBhdXNlKTsKK3B1YmxpYzoKKyAgICBGWF9CT09MIEhETU1SOworICAgIEZYX0JZVEUgSERQVywKKyAgICAgICAgICAgIEhEUEg7CisgICAgRlhfRFdPUkQgR1JBWU1BWDsKKyAgICBGWF9CWVRFIEhEVEVNUExBVEU7Cit9OworY2xhc3MgQ0pCaWcyX0dTSURQcm9jIDogcHVibGljIENKQmlnMl9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIEZYX0RXT1JEICpkZWNvZGVfQXJpdGgoQ0pCaWcyX0FyaXRoRGVjb2RlciAqcEFyaXRoRGVjb2RlciwgSkJpZzJBcml0aEN0eCAqZ2JDb250ZXh0LCBJRlhfUGF1c2UqIHBQYXVzZSk7CisKKyAgICBGWF9EV09SRCAqZGVjb2RlX01NUihDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtLCBJRlhfUGF1c2UqIHBQYXVzZSk7CitwdWJsaWM6CisgICAgRlhfQk9PTCBHU01NUjsKKyAgICBGWF9CT09MIEdTVVNFU0tJUDsKKyAgICBGWF9CWVRFIEdTQlBQOworICAgIEZYX0RXT1JEIEdTVywKKyAgICAgICAgICAgICBHU0g7CisgICAgRlhfQllURSBHU1RFTVBMQVRFOworICAgIENKQmlnMl9JbWFnZSAqR1NLSVA7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0h1ZmZtYW5EZWNvZGVyLmNwcCBiL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfSHVmZm1hbkRlY29kZXIuY3BwCmluZGV4IDgxOTlmZTcuLmRkODIwYWUgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfSHVmZm1hbkRlY29kZXIuY3BwCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfSHVmZm1hbkRlY29kZXIuY3BwCkBAIC0xLDU1ICsxLDU1IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiSkJpZzJfSHVmZm1hbkRlY29kZXIuaCINCi1DSkJpZzJfSHVmZm1hbkRlY29kZXI6OkNKQmlnMl9IdWZmbWFuRGVjb2RlcihDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtKQ0KLXsNCi0gICAgbV9wU3RyZWFtID0gcFN0cmVhbTsNCi19DQotQ0pCaWcyX0h1ZmZtYW5EZWNvZGVyOjp+Q0pCaWcyX0h1ZmZtYW5EZWNvZGVyKCkNCi17DQotfQ0KLWludCBDSkJpZzJfSHVmZm1hbkRlY29kZXI6OmRlY29kZUFWYWx1ZShDSkJpZzJfSHVmZm1hblRhYmxlICpwVGFibGUsIGludCAqblJlc3VsdCkNCi17DQotICAgIGludCBuVmFsLCBuVG1wLCBpLCBuQml0czsNCi0gICAgblZhbCA9IDA7DQotICAgIG5CaXRzID0gMDsNCi0gICAgd2hpbGUoMSkgew0KLSAgICAgICAgaWYobV9wU3RyZWFtLT5yZWFkMUJpdCgmblRtcCkgPT0gLTEpIHsNCi0gICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICB9DQotICAgICAgICBuVmFsID0gKG5WYWwgPDwgMSkgfCBuVG1wOw0KLSAgICAgICAgbkJpdHMgKys7DQotICAgICAgICBmb3IoaSA9IDA7IGkgPCBwVGFibGUtPk5URU1QOyBpKyspIHsNCi0gICAgICAgICAgICBpZigocFRhYmxlLT5QUkVGTEVOW2ldID09IG5CaXRzKSAmJiAocFRhYmxlLT5DT0RFU1tpXSA9PSBuVmFsKSkgew0KLSAgICAgICAgICAgICAgICBpZigocFRhYmxlLT5IVE9PQiA9PSAxKSAmJiAoaSA9PSBwVGFibGUtPk5URU1QIC0gMSkpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKQklHMl9PT0I7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYobV9wU3RyZWFtLT5yZWFkTkJpdHMocFRhYmxlLT5SQU5HRUxFTltpXSwgJm5UbXApID09IC0xKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYocFRhYmxlLT5IVE9PQikgew0KLSAgICAgICAgICAgICAgICAgICAgaWYoaSA9PSBwVGFibGUtPk5URU1QIC0gMykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICpuUmVzdWx0ID0gcFRhYmxlLT5SQU5HRUxPV1tpXSAtIG5UbXA7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICpuUmVzdWx0ID0gcFRhYmxlLT5SQU5HRUxPV1tpXSArIG5UbXA7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBpZihpID09IHBUYWJsZS0+TlRFTVAgLSAyKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgKm5SZXN1bHQgPSBwVGFibGUtPlJBTkdFTE9XW2ldIC0gblRtcDsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgKm5SZXN1bHQgPSBwVGFibGUtPlJBTkdFTE9XW2ldICsgblRtcDsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gLTI7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICJKQmlnMl9IdWZmbWFuRGVjb2Rlci5oIgorQ0pCaWcyX0h1ZmZtYW5EZWNvZGVyOjpDSkJpZzJfSHVmZm1hbkRlY29kZXIoQ0pCaWcyX0JpdFN0cmVhbSAqcFN0cmVhbSkKK3sKKyAgICBtX3BTdHJlYW0gPSBwU3RyZWFtOworfQorQ0pCaWcyX0h1ZmZtYW5EZWNvZGVyOjp+Q0pCaWcyX0h1ZmZtYW5EZWNvZGVyKCkKK3sKK30KK2ludCBDSkJpZzJfSHVmZm1hbkRlY29kZXI6OmRlY29kZUFWYWx1ZShDSkJpZzJfSHVmZm1hblRhYmxlICpwVGFibGUsIGludCAqblJlc3VsdCkKK3sKKyAgICBpbnQgblZhbCwgblRtcCwgaSwgbkJpdHM7CisgICAgblZhbCA9IDA7CisgICAgbkJpdHMgPSAwOworICAgIHdoaWxlKDEpIHsKKyAgICAgICAgaWYobV9wU3RyZWFtLT5yZWFkMUJpdCgmblRtcCkgPT0gLTEpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBuVmFsID0gKG5WYWwgPDwgMSkgfCBuVG1wOworICAgICAgICBuQml0cyArKzsKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgcFRhYmxlLT5OVEVNUDsgaSsrKSB7CisgICAgICAgICAgICBpZigocFRhYmxlLT5QUkVGTEVOW2ldID09IG5CaXRzKSAmJiAocFRhYmxlLT5DT0RFU1tpXSA9PSBuVmFsKSkgeworICAgICAgICAgICAgICAgIGlmKChwVGFibGUtPkhUT09CID09IDEpICYmIChpID09IHBUYWJsZS0+TlRFTVAgLSAxKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gSkJJRzJfT09COworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihtX3BTdHJlYW0tPnJlYWROQml0cyhwVGFibGUtPlJBTkdFTEVOW2ldLCAmblRtcCkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihwVGFibGUtPkhUT09CKSB7CisgICAgICAgICAgICAgICAgICAgIGlmKGkgPT0gcFRhYmxlLT5OVEVNUCAtIDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpuUmVzdWx0ID0gcFRhYmxlLT5SQU5HRUxPV1tpXSAtIG5UbXA7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpuUmVzdWx0ID0gcFRhYmxlLT5SQU5HRUxPV1tpXSArIG5UbXA7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmKGkgPT0gcFRhYmxlLT5OVEVNUCAtIDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpuUmVzdWx0ID0gcFRhYmxlLT5SQU5HRUxPV1tpXSAtIG5UbXA7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpuUmVzdWx0ID0gcFRhYmxlLT5SQU5HRUxPV1tpXSArIG5UbXA7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gLTI7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0h1ZmZtYW5EZWNvZGVyLmggYi9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0h1ZmZtYW5EZWNvZGVyLmgKaW5kZXggMzhiMjAyMS4uNjBlYzI5MCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9IdWZmbWFuRGVjb2Rlci5oCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfSHVmZm1hbkRlY29kZXIuaApAQCAtMSwyNCArMSwyNCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfSkJJRzJfSFVGRk1BTl9ERUNPREVSX0hfDQotI2RlZmluZSBfSkJJRzJfSFVGRk1BTl9ERUNPREVSX0hfDQotI2luY2x1ZGUgIkpCaWcyX0JpdFN0cmVhbS5oIg0KLSNpbmNsdWRlICJKQmlnMl9IdWZmbWFuVGFibGUuaCINCi1jbGFzcyBDSkJpZzJfSHVmZm1hbkRlY29kZXIgOiBwdWJsaWMgQ0pCaWcyX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENKQmlnMl9IdWZmbWFuRGVjb2RlcihDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtKTsNCi0NCi0gICAgfkNKQmlnMl9IdWZmbWFuRGVjb2RlcigpOw0KLQ0KLSAgICBpbnQgZGVjb2RlQVZhbHVlKENKQmlnMl9IdWZmbWFuVGFibGUgKnBUYWJsZSwgaW50ICpuUmVzdWx0KTsNCi1wcml2YXRlOg0KLQ0KLSAgICBDSkJpZzJfQml0U3RyZWFtICptX3BTdHJlYW07DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9KQklHMl9IVUZGTUFOX0RFQ09ERVJfSF8KKyNkZWZpbmUgX0pCSUcyX0hVRkZNQU5fREVDT0RFUl9IXworI2luY2x1ZGUgIkpCaWcyX0JpdFN0cmVhbS5oIgorI2luY2x1ZGUgIkpCaWcyX0h1ZmZtYW5UYWJsZS5oIgorY2xhc3MgQ0pCaWcyX0h1ZmZtYW5EZWNvZGVyIDogcHVibGljIENKQmlnMl9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENKQmlnMl9IdWZmbWFuRGVjb2RlcihDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtKTsKKworICAgIH5DSkJpZzJfSHVmZm1hbkRlY29kZXIoKTsKKworICAgIGludCBkZWNvZGVBVmFsdWUoQ0pCaWcyX0h1ZmZtYW5UYWJsZSAqcFRhYmxlLCBpbnQgKm5SZXN1bHQpOworcHJpdmF0ZToKKworICAgIENKQmlnMl9CaXRTdHJlYW0gKm1fcFN0cmVhbTsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfSHVmZm1hblRhYmxlLmNwcCBiL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfSHVmZm1hblRhYmxlLmNwcAppbmRleCBhZjRhNTQ5Li4wYTViYzhlIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0h1ZmZtYW5UYWJsZS5jcHAKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9IdWZmbWFuVGFibGUuY3BwCkBAIC0xLDE5MyArMSwxOTMgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICJKQmlnMl9IdWZmbWFuVGFibGUuaCINCi0jaW5jbHVkZSAiSkJpZzJfQml0U3RyZWFtLmgiDQotI2luY2x1ZGUgPHN0cmluZy5oPg0KLQ0KLUNKQmlnMl9IdWZmbWFuVGFibGU6OkNKQmlnMl9IdWZmbWFuVGFibGUoY29uc3QgSkJpZzJUYWJsZUxpbmUgKnBUYWJsZSwgaW50IG5MaW5lcywNCi0gICAgICAgIEZYX0JPT0wgYkhUT09CKQ0KLXsNCi0gICAgaW5pdCgpOw0KLSAgICBtX2JPSyA9IHBhcnNlRnJvbVN0YW5kYXJkVGFibGUocFRhYmxlLCBuTGluZXMsIGJIVE9PQik7DQotfQ0KLQ0KLUNKQmlnMl9IdWZmbWFuVGFibGU6OkNKQmlnMl9IdWZmbWFuVGFibGUoQ0pCaWcyX0JpdFN0cmVhbSAqcFN0cmVhbSkNCi17DQotICAgIGluaXQoKTsNCi0gICAgbV9iT0sgPSBwYXJzZUZyb21Db2RlZEJ1ZmZlcihwU3RyZWFtKTsNCi19DQotDQotQ0pCaWcyX0h1ZmZtYW5UYWJsZTo6fkNKQmlnMl9IdWZmbWFuVGFibGUoKQ0KLXsNCi0gICAgaWYoQ09ERVMpIHsNCi0gICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShDT0RFUyk7DQotICAgIH0NCi0gICAgaWYoUFJFRkxFTikgew0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKFBSRUZMRU4pOw0KLSAgICB9DQotICAgIGlmKFJBTkdFTEVOKSB7DQotICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoUkFOR0VMRU4pOw0KLSAgICB9DQotICAgIGlmKFJBTkdFTE9XKSB7DQotICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoUkFOR0VMT1cpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0pCaWcyX0h1ZmZtYW5UYWJsZTo6aW5pdCgpDQotew0KLSAgICBIVE9PQiA9IEZBTFNFOw0KLSAgICBOVEVNUCA9IDA7DQotICAgIENPREVTID0gTlVMTDsNCi0gICAgUFJFRkxFTiA9IE5VTEw7DQotICAgIFJBTkdFTEVOID0gTlVMTDsNCi0gICAgUkFOR0VMT1cgPSBOVUxMOw0KLX0NCi1pbnQgQ0pCaWcyX0h1ZmZtYW5UYWJsZTo6cGFyc2VGcm9tU3RhbmRhcmRUYWJsZShjb25zdCBKQmlnMlRhYmxlTGluZSAqcFRhYmxlLCBpbnQgbkxpbmVzLCBGWF9CT09MIGJIVE9PQikNCi17DQotICAgIGludCBDVVJMRU4sIExFTk1BWCwgQ1VSQ09ERSwgQ1VSVEVNUCwgaTsNCi0gICAgaW50ICpMRU5DT1VOVDsNCi0gICAgaW50ICpGSVJTVENPREU7DQotICAgIEhUT09CID0gYkhUT09COw0KLSAgICBOVEVNUCA9IG5MaW5lczsNCi0gICAgQ09ERVMgPSAoaW50KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKGludCksIE5URU1QKTsNCi0gICAgUFJFRkxFTiA9IChpbnQqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihzaXplb2YoaW50KSwgTlRFTVApOw0KLSAgICBSQU5HRUxFTiA9IChpbnQqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihzaXplb2YoaW50KSwgTlRFTVApOw0KLSAgICBSQU5HRUxPVyA9IChpbnQqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihzaXplb2YoaW50KSwgTlRFTVApOw0KLSAgICBMRU5NQVggPSAwOw0KLSAgICBmb3IoaSA9IDA7IGkgPCBOVEVNUDsgaSsrKSB7DQotICAgICAgICBQUkVGTEVOW2ldID0gcFRhYmxlW2ldLlBSRUZMRU47DQotICAgICAgICBSQU5HRUxFTltpXSA9IHBUYWJsZVtpXS5SQU5ERUxFTjsNCi0gICAgICAgIFJBTkdFTE9XW2ldID0gcFRhYmxlW2ldLlJBTkdFTE9XOw0KLSAgICAgICAgaWYoUFJFRkxFTltpXSA+IExFTk1BWCkgew0KLSAgICAgICAgICAgIExFTk1BWCA9IFBSRUZMRU5baV07DQotICAgICAgICB9DQotICAgIH0NCi0gICAgTEVOQ09VTlQgPSAoaW50KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKGludCksIChMRU5NQVggKyAxKSk7DQotICAgIEpCSUcyX21lbXNldChMRU5DT1VOVCwgMCwgc2l6ZW9mKGludCkgKiAoTEVOTUFYICsgMSkpOw0KLSAgICBGSVJTVENPREUgPSAoaW50KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKGludCksIChMRU5NQVggKyAxKSk7DQotICAgIGZvcihpID0gMDsgaSA8IE5URU1QOyBpKyspIHsNCi0gICAgICAgIExFTkNPVU5UW1BSRUZMRU5baV1dICsrOw0KLSAgICB9DQotICAgIENVUkxFTiA9IDE7DQotICAgIEZJUlNUQ09ERVswXSA9IDA7DQotICAgIExFTkNPVU5UWzBdICA9IDA7DQotICAgIHdoaWxlKENVUkxFTiA8PSBMRU5NQVgpIHsNCi0gICAgICAgIEZJUlNUQ09ERVtDVVJMRU5dID0gKEZJUlNUQ09ERVtDVVJMRU4gLSAxXSArIExFTkNPVU5UW0NVUkxFTiAtIDFdKSA8PCAxOw0KLSAgICAgICAgQ1VSQ09ERSA9IEZJUlNUQ09ERVtDVVJMRU5dOw0KLSAgICAgICAgQ1VSVEVNUCA9IDA7DQotICAgICAgICB3aGlsZShDVVJURU1QIDwgTlRFTVApIHsNCi0gICAgICAgICAgICBpZihQUkVGTEVOW0NVUlRFTVBdID09IENVUkxFTikgew0KLSAgICAgICAgICAgICAgICBDT0RFU1tDVVJURU1QXSA9IENVUkNPREU7DQotICAgICAgICAgICAgICAgIENVUkNPREUgPSBDVVJDT0RFICsgMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgQ1VSVEVNUCA9IENVUlRFTVAgKyAxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1VSTEVOID0gQ1VSTEVOICsgMTsNCi0gICAgfQ0KLSAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoTEVOQ09VTlQpOw0KLSAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoRklSU1RDT0RFKTsNCi0gICAgcmV0dXJuIDE7DQotfQ0KLQ0KLSNkZWZpbmUgSFRfQ0hFQ0tfTUVNT1JZX0FESlVTVAkJCVwNCi0gICAgaWYoTlRFTVAgPj0gblNpemUpCVwNCi0gICAgewlcDQotICAgICAgICBuU2l6ZSArPSAxNjsJXA0KLSAgICAgICAgUFJFRkxFTiAgPSAoaW50KiltX3BNb2R1bGUtPkpCaWcyX1JlYWxsb2MoUFJFRkxFTixzaXplb2YoaW50KSpuU2l6ZSk7CVwNCi0gICAgICAgIFJBTkdFTEVOID0gKGludCopbV9wTW9kdWxlLT5KQmlnMl9SZWFsbG9jKFJBTkdFTEVOLHNpemVvZihpbnQpKm5TaXplKTsJXA0KLSAgICAgICAgUkFOR0VMT1cgPSAoaW50KiltX3BNb2R1bGUtPkpCaWcyX1JlYWxsb2MoUkFOR0VMT1csc2l6ZW9mKGludCkqblNpemUpOwlcDQotICAgIH0NCi1pbnQgQ0pCaWcyX0h1ZmZtYW5UYWJsZTo6cGFyc2VGcm9tQ29kZWRCdWZmZXIoQ0pCaWcyX0JpdFN0cmVhbSAqcFN0cmVhbSkNCi17DQotICAgIHVuc2lnbmVkIGNoYXIgSFRQUywgSFRSUzsNCi0gICAgaW50IEhUTE9XLCBIVEhJR0g7DQotICAgIGludCBDVVJSQU5HRUxPVzsNCi0gICAgaW50IG5TaXplID0gMTY7DQotICAgIGludCBDVVJMRU4sIExFTk1BWCwgQ1VSQ09ERSwgQ1VSVEVNUCwgaTsNCi0gICAgaW50ICpMRU5DT1VOVDsNCi0gICAgaW50ICpGSVJTVENPREU7DQotICAgIHVuc2lnbmVkIGNoYXIgY1RlbXA7DQotICAgIGlmKHBTdHJlYW0tPnJlYWQxQnl0ZSgmY1RlbXApID09IC0xKSB7DQotICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgfQ0KLSAgICBIVE9PQiA9IGNUZW1wICYgMHgwMTsNCi0gICAgSFRQUyAgPSAoKGNUZW1wID4+IDEpICYgMHgwNykgKyAxOw0KLSAgICBIVFJTICA9ICgoY1RlbXAgPj4gNCkgJiAweDA3KSArIDE7DQotICAgIGlmKHBTdHJlYW0tPnJlYWRJbnRlZ2VyKChGWF9EV09SRCopJkhUTE9XKSA9PSAtMSB8fA0KLSAgICAgICAgICAgIHBTdHJlYW0tPnJlYWRJbnRlZ2VyKChGWF9EV09SRCopJkhUSElHSCkgPT0gLTEpIHsNCi0gICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICB9DQotICAgIFBSRUZMRU4gID0gKGludCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihpbnQpLCBuU2l6ZSk7DQotICAgIFJBTkdFTEVOID0gKGludCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihpbnQpLCBuU2l6ZSk7DQotICAgIFJBTkdFTE9XID0gKGludCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihpbnQpLCBuU2l6ZSk7DQotICAgIENVUlJBTkdFTE9XID0gSFRMT1c7DQotICAgIE5URU1QID0gMDsNCi0gICAgZG8gew0KLSAgICAgICAgSFRfQ0hFQ0tfTUVNT1JZX0FESlVTVA0KLSAgICAgICAgaWYoKHBTdHJlYW0tPnJlYWROQml0cyhIVFBTLCAmUFJFRkxFTltOVEVNUF0pID09IC0xKQ0KLSAgICAgICAgICAgICAgICB8fCAocFN0cmVhbS0+cmVhZE5CaXRzKEhUUlMsICZSQU5HRUxFTltOVEVNUF0pID09IC0xKSkgew0KLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICAgICAgfQ0KLSAgICAgICAgUkFOR0VMT1dbTlRFTVBdID0gQ1VSUkFOR0VMT1c7DQotICAgICAgICBDVVJSQU5HRUxPVyA9IENVUlJBTkdFTE9XICsgKDEgPDwgUkFOR0VMRU5bTlRFTVBdKTsNCi0gICAgICAgIE5URU1QID0gTlRFTVAgKyAxOw0KLSAgICB9IHdoaWxlKENVUlJBTkdFTE9XIDwgSFRISUdIKTsNCi0gICAgSFRfQ0hFQ0tfTUVNT1JZX0FESlVTVA0KLSAgICBpZihwU3RyZWFtLT5yZWFkTkJpdHMoSFRQUywgJlBSRUZMRU5bTlRFTVBdKSA9PSAtMSkgew0KLSAgICAgICAgZ290byBmYWlsZWQ7DQotICAgIH0NCi0gICAgUkFOR0VMRU5bTlRFTVBdID0gMzI7DQotICAgIFJBTkdFTE9XW05URU1QXSA9IEhUTE9XIC0gMTsNCi0gICAgTlRFTVAgPSBOVEVNUCArIDE7DQotICAgIEhUX0NIRUNLX01FTU9SWV9BREpVU1QNCi0gICAgaWYocFN0cmVhbS0+cmVhZE5CaXRzKEhUUFMsICZQUkVGTEVOW05URU1QXSkgPT0gLTEpIHsNCi0gICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICB9DQotICAgIFJBTkdFTEVOW05URU1QXSA9IDMyOw0KLSAgICBSQU5HRUxPV1tOVEVNUF0gPSBIVEhJR0g7DQotICAgIE5URU1QID0gTlRFTVAgKyAxOw0KLSAgICBpZihIVE9PQikgew0KLSAgICAgICAgSFRfQ0hFQ0tfTUVNT1JZX0FESlVTVA0KLSAgICAgICAgaWYocFN0cmVhbS0+cmVhZE5CaXRzKEhUUFMsICZQUkVGTEVOW05URU1QXSkgPT0gLTEpIHsNCi0gICAgICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgICAgIH0NCi0gICAgICAgIE5URU1QID0gTlRFTVAgKyAxOw0KLSAgICB9DQotICAgIENPREVTID0gKGludCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihpbnQpLCBOVEVNUCk7DQotICAgIExFTk1BWCA9IDA7DQotICAgIGZvcihpID0gMDsgaSA8IE5URU1QOyBpKyspIHsNCi0gICAgICAgIGlmKFBSRUZMRU5baV0gPiBMRU5NQVgpIHsNCi0gICAgICAgICAgICBMRU5NQVggPSBQUkVGTEVOW2ldOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIExFTkNPVU5UID0gKGludCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihpbnQpLCAoTEVOTUFYICsgMSkpOw0KLSAgICBKQklHMl9tZW1zZXQoTEVOQ09VTlQsIDAsIHNpemVvZihpbnQpICogKExFTk1BWCArIDEpKTsNCi0gICAgRklSU1RDT0RFID0gKGludCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihpbnQpLCAoTEVOTUFYICsgMSkpOw0KLSAgICBmb3IoaSA9IDA7IGkgPCBOVEVNUDsgaSsrKSB7DQotICAgICAgICBMRU5DT1VOVFtQUkVGTEVOW2ldXSArKzsNCi0gICAgfQ0KLSAgICBDVVJMRU4gPSAxOw0KLSAgICBGSVJTVENPREVbMF0gPSAwOw0KLSAgICBMRU5DT1VOVFswXSAgPSAwOw0KLSAgICB3aGlsZShDVVJMRU4gPD0gTEVOTUFYKSB7DQotICAgICAgICBGSVJTVENPREVbQ1VSTEVOXSA9IChGSVJTVENPREVbQ1VSTEVOIC0gMV0gKyBMRU5DT1VOVFtDVVJMRU4gLSAxXSkgPDwgMTsNCi0gICAgICAgIENVUkNPREUgPSBGSVJTVENPREVbQ1VSTEVOXTsNCi0gICAgICAgIENVUlRFTVAgPSAwOw0KLSAgICAgICAgd2hpbGUoQ1VSVEVNUCA8IE5URU1QKSB7DQotICAgICAgICAgICAgaWYoUFJFRkxFTltDVVJURU1QXSA9PSBDVVJMRU4pIHsNCi0gICAgICAgICAgICAgICAgQ09ERVNbQ1VSVEVNUF0gPSBDVVJDT0RFOw0KLSAgICAgICAgICAgICAgICBDVVJDT0RFID0gQ1VSQ09ERSArIDE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIENVUlRFTVAgPSBDVVJURU1QICsgMTsNCi0gICAgICAgIH0NCi0gICAgICAgIENVUkxFTiA9IENVUkxFTiArIDE7DQotICAgIH0NCi0gICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKExFTkNPVU5UKTsNCi0gICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKEZJUlNUQ09ERSk7DQotICAgIHJldHVybiBUUlVFOw0KLWZhaWxlZDoNCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiSkJpZzJfSHVmZm1hblRhYmxlLmgiCisjaW5jbHVkZSAiSkJpZzJfQml0U3RyZWFtLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK0NKQmlnMl9IdWZmbWFuVGFibGU6OkNKQmlnMl9IdWZmbWFuVGFibGUoY29uc3QgSkJpZzJUYWJsZUxpbmUgKnBUYWJsZSwgaW50IG5MaW5lcywKKyAgICAgICAgRlhfQk9PTCBiSFRPT0IpCit7CisgICAgaW5pdCgpOworICAgIG1fYk9LID0gcGFyc2VGcm9tU3RhbmRhcmRUYWJsZShwVGFibGUsIG5MaW5lcywgYkhUT09CKTsKK30KKworQ0pCaWcyX0h1ZmZtYW5UYWJsZTo6Q0pCaWcyX0h1ZmZtYW5UYWJsZShDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtKQoreworICAgIGluaXQoKTsKKyAgICBtX2JPSyA9IHBhcnNlRnJvbUNvZGVkQnVmZmVyKHBTdHJlYW0pOworfQorCitDSkJpZzJfSHVmZm1hblRhYmxlOjp+Q0pCaWcyX0h1ZmZtYW5UYWJsZSgpCit7CisgICAgaWYoQ09ERVMpIHsKKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKENPREVTKTsKKyAgICB9CisgICAgaWYoUFJFRkxFTikgeworICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoUFJFRkxFTik7CisgICAgfQorICAgIGlmKFJBTkdFTEVOKSB7CisgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShSQU5HRUxFTik7CisgICAgfQorICAgIGlmKFJBTkdFTE9XKSB7CisgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShSQU5HRUxPVyk7CisgICAgfQorfQordm9pZCBDSkJpZzJfSHVmZm1hblRhYmxlOjppbml0KCkKK3sKKyAgICBIVE9PQiA9IEZBTFNFOworICAgIE5URU1QID0gMDsKKyAgICBDT0RFUyA9IE5VTEw7CisgICAgUFJFRkxFTiA9IE5VTEw7CisgICAgUkFOR0VMRU4gPSBOVUxMOworICAgIFJBTkdFTE9XID0gTlVMTDsKK30KK2ludCBDSkJpZzJfSHVmZm1hblRhYmxlOjpwYXJzZUZyb21TdGFuZGFyZFRhYmxlKGNvbnN0IEpCaWcyVGFibGVMaW5lICpwVGFibGUsIGludCBuTGluZXMsIEZYX0JPT0wgYkhUT09CKQoreworICAgIGludCBDVVJMRU4sIExFTk1BWCwgQ1VSQ09ERSwgQ1VSVEVNUCwgaTsKKyAgICBpbnQgKkxFTkNPVU5UOworICAgIGludCAqRklSU1RDT0RFOworICAgIEhUT09CID0gYkhUT09COworICAgIE5URU1QID0gbkxpbmVzOworICAgIENPREVTID0gKGludCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihpbnQpLCBOVEVNUCk7CisgICAgUFJFRkxFTiA9IChpbnQqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihzaXplb2YoaW50KSwgTlRFTVApOworICAgIFJBTkdFTEVOID0gKGludCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihpbnQpLCBOVEVNUCk7CisgICAgUkFOR0VMT1cgPSAoaW50KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKGludCksIE5URU1QKTsKKyAgICBMRU5NQVggPSAwOworICAgIGZvcihpID0gMDsgaSA8IE5URU1QOyBpKyspIHsKKyAgICAgICAgUFJFRkxFTltpXSA9IHBUYWJsZVtpXS5QUkVGTEVOOworICAgICAgICBSQU5HRUxFTltpXSA9IHBUYWJsZVtpXS5SQU5ERUxFTjsKKyAgICAgICAgUkFOR0VMT1dbaV0gPSBwVGFibGVbaV0uUkFOR0VMT1c7CisgICAgICAgIGlmKFBSRUZMRU5baV0gPiBMRU5NQVgpIHsKKyAgICAgICAgICAgIExFTk1BWCA9IFBSRUZMRU5baV07CisgICAgICAgIH0KKyAgICB9CisgICAgTEVOQ09VTlQgPSAoaW50KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKGludCksIChMRU5NQVggKyAxKSk7CisgICAgSkJJRzJfbWVtc2V0KExFTkNPVU5ULCAwLCBzaXplb2YoaW50KSAqIChMRU5NQVggKyAxKSk7CisgICAgRklSU1RDT0RFID0gKGludCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihpbnQpLCAoTEVOTUFYICsgMSkpOworICAgIGZvcihpID0gMDsgaSA8IE5URU1QOyBpKyspIHsKKyAgICAgICAgTEVOQ09VTlRbUFJFRkxFTltpXV0gKys7CisgICAgfQorICAgIENVUkxFTiA9IDE7CisgICAgRklSU1RDT0RFWzBdID0gMDsKKyAgICBMRU5DT1VOVFswXSAgPSAwOworICAgIHdoaWxlKENVUkxFTiA8PSBMRU5NQVgpIHsKKyAgICAgICAgRklSU1RDT0RFW0NVUkxFTl0gPSAoRklSU1RDT0RFW0NVUkxFTiAtIDFdICsgTEVOQ09VTlRbQ1VSTEVOIC0gMV0pIDw8IDE7CisgICAgICAgIENVUkNPREUgPSBGSVJTVENPREVbQ1VSTEVOXTsKKyAgICAgICAgQ1VSVEVNUCA9IDA7CisgICAgICAgIHdoaWxlKENVUlRFTVAgPCBOVEVNUCkgeworICAgICAgICAgICAgaWYoUFJFRkxFTltDVVJURU1QXSA9PSBDVVJMRU4pIHsKKyAgICAgICAgICAgICAgICBDT0RFU1tDVVJURU1QXSA9IENVUkNPREU7CisgICAgICAgICAgICAgICAgQ1VSQ09ERSA9IENVUkNPREUgKyAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQ1VSVEVNUCA9IENVUlRFTVAgKyAxOworICAgICAgICB9CisgICAgICAgIENVUkxFTiA9IENVUkxFTiArIDE7CisgICAgfQorICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShMRU5DT1VOVCk7CisgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKEZJUlNUQ09ERSk7CisgICAgcmV0dXJuIDE7Cit9CisKKyNkZWZpbmUgSFRfQ0hFQ0tfTUVNT1JZX0FESlVTVAkJCVwKKyAgICBpZihOVEVNUCA+PSBuU2l6ZSkJXAorICAgIHsJXAorICAgICAgICBuU2l6ZSArPSAxNjsJXAorICAgICAgICBQUkVGTEVOICA9IChpbnQqKW1fcE1vZHVsZS0+SkJpZzJfUmVhbGxvYyhQUkVGTEVOLHNpemVvZihpbnQpKm5TaXplKTsJXAorICAgICAgICBSQU5HRUxFTiA9IChpbnQqKW1fcE1vZHVsZS0+SkJpZzJfUmVhbGxvYyhSQU5HRUxFTixzaXplb2YoaW50KSpuU2l6ZSk7CVwKKyAgICAgICAgUkFOR0VMT1cgPSAoaW50KiltX3BNb2R1bGUtPkpCaWcyX1JlYWxsb2MoUkFOR0VMT1csc2l6ZW9mKGludCkqblNpemUpOwlcCisgICAgfQoraW50IENKQmlnMl9IdWZmbWFuVGFibGU6OnBhcnNlRnJvbUNvZGVkQnVmZmVyKENKQmlnMl9CaXRTdHJlYW0gKnBTdHJlYW0pCit7CisgICAgdW5zaWduZWQgY2hhciBIVFBTLCBIVFJTOworICAgIGludCBIVExPVywgSFRISUdIOworICAgIGludCBDVVJSQU5HRUxPVzsKKyAgICBpbnQgblNpemUgPSAxNjsKKyAgICBpbnQgQ1VSTEVOLCBMRU5NQVgsIENVUkNPREUsIENVUlRFTVAsIGk7CisgICAgaW50ICpMRU5DT1VOVDsKKyAgICBpbnQgKkZJUlNUQ09ERTsKKyAgICB1bnNpZ25lZCBjaGFyIGNUZW1wOworICAgIGlmKHBTdHJlYW0tPnJlYWQxQnl0ZSgmY1RlbXApID09IC0xKSB7CisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKyAgICBIVE9PQiA9IGNUZW1wICYgMHgwMTsKKyAgICBIVFBTICA9ICgoY1RlbXAgPj4gMSkgJiAweDA3KSArIDE7CisgICAgSFRSUyAgPSAoKGNUZW1wID4+IDQpICYgMHgwNykgKyAxOworICAgIGlmKHBTdHJlYW0tPnJlYWRJbnRlZ2VyKChGWF9EV09SRCopJkhUTE9XKSA9PSAtMSB8fAorICAgICAgICAgICAgcFN0cmVhbS0+cmVhZEludGVnZXIoKEZYX0RXT1JEKikmSFRISUdIKSA9PSAtMSkgeworICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9CisgICAgUFJFRkxFTiAgPSAoaW50KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKGludCksIG5TaXplKTsKKyAgICBSQU5HRUxFTiA9IChpbnQqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihzaXplb2YoaW50KSwgblNpemUpOworICAgIFJBTkdFTE9XID0gKGludCopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKHNpemVvZihpbnQpLCBuU2l6ZSk7CisgICAgQ1VSUkFOR0VMT1cgPSBIVExPVzsKKyAgICBOVEVNUCA9IDA7CisgICAgZG8geworICAgICAgICBIVF9DSEVDS19NRU1PUllfQURKVVNUCisgICAgICAgIGlmKChwU3RyZWFtLT5yZWFkTkJpdHMoSFRQUywgJlBSRUZMRU5bTlRFTVBdKSA9PSAtMSkKKyAgICAgICAgICAgICAgICB8fCAocFN0cmVhbS0+cmVhZE5CaXRzKEhUUlMsICZSQU5HRUxFTltOVEVNUF0pID09IC0xKSkgeworICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIH0KKyAgICAgICAgUkFOR0VMT1dbTlRFTVBdID0gQ1VSUkFOR0VMT1c7CisgICAgICAgIENVUlJBTkdFTE9XID0gQ1VSUkFOR0VMT1cgKyAoMSA8PCBSQU5HRUxFTltOVEVNUF0pOworICAgICAgICBOVEVNUCA9IE5URU1QICsgMTsKKyAgICB9IHdoaWxlKENVUlJBTkdFTE9XIDwgSFRISUdIKTsKKyAgICBIVF9DSEVDS19NRU1PUllfQURKVVNUCisgICAgaWYocFN0cmVhbS0+cmVhZE5CaXRzKEhUUFMsICZQUkVGTEVOW05URU1QXSkgPT0gLTEpIHsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIFJBTkdFTEVOW05URU1QXSA9IDMyOworICAgIFJBTkdFTE9XW05URU1QXSA9IEhUTE9XIC0gMTsKKyAgICBOVEVNUCA9IE5URU1QICsgMTsKKyAgICBIVF9DSEVDS19NRU1PUllfQURKVVNUCisgICAgaWYocFN0cmVhbS0+cmVhZE5CaXRzKEhUUFMsICZQUkVGTEVOW05URU1QXSkgPT0gLTEpIHsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIFJBTkdFTEVOW05URU1QXSA9IDMyOworICAgIFJBTkdFTE9XW05URU1QXSA9IEhUSElHSDsKKyAgICBOVEVNUCA9IE5URU1QICsgMTsKKyAgICBpZihIVE9PQikgeworICAgICAgICBIVF9DSEVDS19NRU1PUllfQURKVVNUCisgICAgICAgIGlmKHBTdHJlYW0tPnJlYWROQml0cyhIVFBTLCAmUFJFRkxFTltOVEVNUF0pID09IC0xKSB7CisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgfQorICAgICAgICBOVEVNUCA9IE5URU1QICsgMTsKKyAgICB9CisgICAgQ09ERVMgPSAoaW50KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKGludCksIE5URU1QKTsKKyAgICBMRU5NQVggPSAwOworICAgIGZvcihpID0gMDsgaSA8IE5URU1QOyBpKyspIHsKKyAgICAgICAgaWYoUFJFRkxFTltpXSA+IExFTk1BWCkgeworICAgICAgICAgICAgTEVOTUFYID0gUFJFRkxFTltpXTsKKyAgICAgICAgfQorICAgIH0KKyAgICBMRU5DT1VOVCA9IChpbnQqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihzaXplb2YoaW50KSwgKExFTk1BWCArIDEpKTsKKyAgICBKQklHMl9tZW1zZXQoTEVOQ09VTlQsIDAsIHNpemVvZihpbnQpICogKExFTk1BWCArIDEpKTsKKyAgICBGSVJTVENPREUgPSAoaW50KiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKGludCksIChMRU5NQVggKyAxKSk7CisgICAgZm9yKGkgPSAwOyBpIDwgTlRFTVA7IGkrKykgeworICAgICAgICBMRU5DT1VOVFtQUkVGTEVOW2ldXSArKzsKKyAgICB9CisgICAgQ1VSTEVOID0gMTsKKyAgICBGSVJTVENPREVbMF0gPSAwOworICAgIExFTkNPVU5UWzBdICA9IDA7CisgICAgd2hpbGUoQ1VSTEVOIDw9IExFTk1BWCkgeworICAgICAgICBGSVJTVENPREVbQ1VSTEVOXSA9IChGSVJTVENPREVbQ1VSTEVOIC0gMV0gKyBMRU5DT1VOVFtDVVJMRU4gLSAxXSkgPDwgMTsKKyAgICAgICAgQ1VSQ09ERSA9IEZJUlNUQ09ERVtDVVJMRU5dOworICAgICAgICBDVVJURU1QID0gMDsKKyAgICAgICAgd2hpbGUoQ1VSVEVNUCA8IE5URU1QKSB7CisgICAgICAgICAgICBpZihQUkVGTEVOW0NVUlRFTVBdID09IENVUkxFTikgeworICAgICAgICAgICAgICAgIENPREVTW0NVUlRFTVBdID0gQ1VSQ09ERTsKKyAgICAgICAgICAgICAgICBDVVJDT0RFID0gQ1VSQ09ERSArIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDVVJURU1QID0gQ1VSVEVNUCArIDE7CisgICAgICAgIH0KKyAgICAgICAgQ1VSTEVOID0gQ1VSTEVOICsgMTsKKyAgICB9CisgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKExFTkNPVU5UKTsKKyAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoRklSU1RDT0RFKTsKKyAgICByZXR1cm4gVFJVRTsKK2ZhaWxlZDoKKyAgICByZXR1cm4gRkFMU0U7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0h1ZmZtYW5UYWJsZS5oIGIvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9IdWZmbWFuVGFibGUuaAppbmRleCBkZjA1MWMyLi5kNjhjZWQyIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0h1ZmZtYW5UYWJsZS5oCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfSHVmZm1hblRhYmxlLmgKQEAgLTEsNDIgKzEsNDIgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0pCSUcyX0hVRkZNQU5fVEFCTEVfSF8NCi0jZGVmaW5lIF9KQklHMl9IVUZGTUFOX1RBQkxFX0hfDQotI2luY2x1ZGUgIkpCaWcyX01vZHVsZS5oIg0KLSNpbmNsdWRlICJKQmlnMl9IdWZmbWFuVGFibGVfU3RhbmRhcmQuaCINCi0jaW5jbHVkZSAiSkJpZzJfQml0U3RyZWFtLmgiDQotY2xhc3MgQ0pCaWcyX0h1ZmZtYW5UYWJsZSA6IHB1YmxpYyBDSkJpZzJfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ0pCaWcyX0h1ZmZtYW5UYWJsZShjb25zdCBKQmlnMlRhYmxlTGluZSAqcFRhYmxlLCBpbnQgbkxpbmVzLCBGWF9CT09MIGJIVE9PQik7DQotDQotICAgIENKQmlnMl9IdWZmbWFuVGFibGUoQ0pCaWcyX0JpdFN0cmVhbSAqcFN0cmVhbSk7DQotDQotICAgIH5DSkJpZzJfSHVmZm1hblRhYmxlKCk7DQotDQotICAgIHZvaWQgaW5pdCgpOw0KLQ0KLSAgICBpbnQgcGFyc2VGcm9tU3RhbmRhcmRUYWJsZShjb25zdCBKQmlnMlRhYmxlTGluZSAqcFRhYmxlLCBpbnQgbkxpbmVzLCBGWF9CT09MIGJIVE9PQik7DQotDQotICAgIGludCBwYXJzZUZyb21Db2RlZEJ1ZmZlcihDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtKTsNCi0NCi0gICAgRlhfQk9PTCBpc09LKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fYk9LOw0KLSAgICB9DQotcHJpdmF0ZToNCi0gICAgRlhfQk9PTCBIVE9PQjsNCi0gICAgaW50IE5URU1QOw0KLSAgICBpbnQgKkNPREVTOw0KLSAgICBpbnQgKlBSRUZMRU47DQotICAgIGludCAqUkFOR0VMRU47DQotICAgIGludCAqUkFOR0VMT1c7DQotICAgIEZYX0JPT0wgbV9iT0s7DQotICAgIGZyaWVuZCBjbGFzcyBDSkJpZzJfSHVmZm1hbkRlY29kZXI7DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9KQklHMl9IVUZGTUFOX1RBQkxFX0hfCisjZGVmaW5lIF9KQklHMl9IVUZGTUFOX1RBQkxFX0hfCisjaW5jbHVkZSAiSkJpZzJfTW9kdWxlLmgiCisjaW5jbHVkZSAiSkJpZzJfSHVmZm1hblRhYmxlX1N0YW5kYXJkLmgiCisjaW5jbHVkZSAiSkJpZzJfQml0U3RyZWFtLmgiCitjbGFzcyBDSkJpZzJfSHVmZm1hblRhYmxlIDogcHVibGljIENKQmlnMl9PYmplY3QKK3sKK3B1YmxpYzoKKworICAgIENKQmlnMl9IdWZmbWFuVGFibGUoY29uc3QgSkJpZzJUYWJsZUxpbmUgKnBUYWJsZSwgaW50IG5MaW5lcywgRlhfQk9PTCBiSFRPT0IpOworCisgICAgQ0pCaWcyX0h1ZmZtYW5UYWJsZShDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtKTsKKworICAgIH5DSkJpZzJfSHVmZm1hblRhYmxlKCk7CisKKyAgICB2b2lkIGluaXQoKTsKKworICAgIGludCBwYXJzZUZyb21TdGFuZGFyZFRhYmxlKGNvbnN0IEpCaWcyVGFibGVMaW5lICpwVGFibGUsIGludCBuTGluZXMsIEZYX0JPT0wgYkhUT09CKTsKKworICAgIGludCBwYXJzZUZyb21Db2RlZEJ1ZmZlcihDSkJpZzJfQml0U3RyZWFtICpwU3RyZWFtKTsKKworICAgIEZYX0JPT0wgaXNPSygpCisgICAgeworICAgICAgICByZXR1cm4gbV9iT0s7CisgICAgfQorcHJpdmF0ZToKKyAgICBGWF9CT09MIEhUT09COworICAgIGludCBOVEVNUDsKKyAgICBpbnQgKkNPREVTOworICAgIGludCAqUFJFRkxFTjsKKyAgICBpbnQgKlJBTkdFTEVOOworICAgIGludCAqUkFOR0VMT1c7CisgICAgRlhfQk9PTCBtX2JPSzsKKyAgICBmcmllbmQgY2xhc3MgQ0pCaWcyX0h1ZmZtYW5EZWNvZGVyOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9IdWZmbWFuVGFibGVfU3RhbmRhcmQuaCBiL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfSHVmZm1hblRhYmxlX1N0YW5kYXJkLmgKaW5kZXggZjYxMTQzNi4uNDI4YjJjMyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9IdWZmbWFuVGFibGVfU3RhbmRhcmQuaAorKysgYi9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0h1ZmZtYW5UYWJsZV9TdGFuZGFyZC5oCkBAIC0xLDI1MSArMSwyNTEgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0pCSUcyX0hVRkZNQU5fVEFCTEVfU1RBTkRBUkRfSF8NCi0jZGVmaW5lIF9KQklHMl9IVUZGTUFOX1RBQkxFX1NUQU5EQVJEX0hfDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgICBpbnQgUFJFRkxFTjsNCi0gICAgaW50IFJBTkRFTEVOOw0KLSAgICBpbnQgUkFOR0VMT1c7DQotfSBKQmlnMlRhYmxlTGluZTsNCi1jb25zdCBGWF9CT09MIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMSA9IEZBTFNFOw0KLWNvbnN0IEpCaWcyVGFibGVMaW5lIEh1ZmZtYW5UYWJsZV9CMVtdID0gew0KLSAgICB7IDEsCTQsCQkwIH0sDQotICAgIHsgMiwJOCwJICAgMTYgfSwNCi0gICAgeyAzLCAgIDE2LAkgIDI3MiB9LA0KLSAgICB7IDAsICAgMzIsCSAgIC0xIH0sDQotICAgIHsgMywgICAzMiwJNjU4MDggfQ0KLX07DQotY29uc3QgRlhfQk9PTCBIdWZmbWFuVGFibGVfSFRPT0JfQjIgPSBUUlVFOw0KLWNvbnN0IEpCaWcyVGFibGVMaW5lIEh1ZmZtYW5UYWJsZV9CMltdID0gew0KLSAgICB7IDEsCTAsCQkwIH0sDQotICAgIHsgMiwJMCwJCTEgfSwNCi0gICAgeyAzLAkwLAkJMiB9LA0KLSAgICB7IDQsCTMsCQkzIH0sDQotICAgIHsgNSwJNiwJICAgMTEgfSwNCi0gICAgeyAwLCAgIDMyLAkgICAtMSB9LA0KLSAgICB7IDYsICAgMzIsICAgICA3NSB9LA0KLSAgICB7IDYsCTAsICAgICAgMCB9DQotfTsNCi1jb25zdCBGWF9CT09MIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMyA9IFRSVUU7DQotY29uc3QgSkJpZzJUYWJsZUxpbmUgSHVmZm1hblRhYmxlX0IzW10gPSB7DQotICAgIHsgOCwJOCwgICAtMjU2IH0sDQotICAgIHsgMSwJMCwJCTAgfSwNCi0gICAgeyAyLAkwLAkJMSB9LA0KLSAgICB7IDMsCTAsCQkyIH0sDQotICAgIHsgNCwJMywJCTMgfSwNCi0gICAgeyA1LAk2LAkgICAxMSB9LA0KLSAgICB7IDgsICAgMzIsICAgLTI1NyB9LA0KLSAgICB7IDcsICAgMzIsICAgICA3NSB9LA0KLSAgICB7IDYsCTAsCQkwIH0NCi19Ow0KLWNvbnN0IEZYX0JPT0wgSHVmZm1hblRhYmxlX0hUT09CX0I0ID0gRkFMU0U7DQotY29uc3QgSkJpZzJUYWJsZUxpbmUgSHVmZm1hblRhYmxlX0I0W10gPSB7DQotICAgIHsgMSwJMCwJCTEgfSwNCi0gICAgeyAyLAkwLAkJMiB9LA0KLSAgICB7IDMsCTAsCQkzIH0sDQotICAgIHsgNCwJMywJCTQgfSwNCi0gICAgeyA1LAk2LAkgICAxMiB9LA0KLSAgICB7IDAsICAgMzIsICAgICAtMSB9LA0KLSAgICB7IDUsICAgMzIsCSAgIDc2IH0sDQotfTsNCi1jb25zdCBGWF9CT09MIEh1ZmZtYW5UYWJsZV9IVE9PQl9CNSA9IEZBTFNFOw0KLWNvbnN0IEpCaWcyVGFibGVMaW5lIEh1ZmZtYW5UYWJsZV9CNVtdID0gew0KLSAgICB7IDcsCTgsCSAtMjU1IH0sDQotICAgIHsgMSwJMCwJICAgIDEgfSwNCi0gICAgeyAyLAkwLAkgICAgMiB9LA0KLSAgICB7IDMsICAgIDAsICAgICAgMyB9LA0KLSAgICB7IDQsCTMsCSAgICA0IH0sDQotICAgIHsgNSwJNiwJICAgMTIgfSwNCi0gICAgeyA3LCAgIDMyLCAgIC0yNTYgfSwNCi0gICAgeyA2LCAgIDMyLCAgICAgNzYgfQ0KLX07DQotY29uc3QgRlhfQk9PTCBIdWZmbWFuVGFibGVfSFRPT0JfQjYgPSBGQUxTRTsNCi1jb25zdCBKQmlnMlRhYmxlTGluZSBIdWZmbWFuVGFibGVfQjZbXSA9IHsNCi0gICAgeyA1LCAgIDEwLAktMjA0OCB9LA0KLSAgICB7IDQsICAgIDksCS0xMDI0IH0sDQotICAgIHsgNCwJOCwJIC01MTIgfSwNCi0gICAgeyA0LAk3LAkgLTI1NiB9LA0KLSAgICB7IDUsCTYsCSAtMTI4IH0sDQotICAgIHsgNSwJNSwJICAtNjQgfSwNCi0gICAgeyA0LAk1LAkgIC0zMiB9LA0KLSAgICB7IDIsCTcsCQkwIH0sDQotICAgIHsgMywJNywJICAxMjggfSwNCi0gICAgeyAzLAk4LAkgIDI1NiB9LA0KLSAgICB7IDQsCTksCSAgNTEyIH0sDQotICAgIHsgNCwgICAxMCwJIDEwMjQgfSwNCi0gICAgeyA2LCAgIDMyLAktMjA0OSB9LA0KLSAgICB7IDYsICAgMzIsCSAyMDQ4IH0NCi19Ow0KLWNvbnN0IEZYX0JPT0wgSHVmZm1hblRhYmxlX0hUT09CX0I3ID0gRkFMU0U7DQotY29uc3QgSkJpZzJUYWJsZUxpbmUgSHVmZm1hblRhYmxlX0I3W10gPSB7DQotICAgIHsgNCwJOSwJLTEwMjQgfSwNCi0gICAgeyAzLAk4LAkgLTUxMiB9LA0KLSAgICB7IDQsCTcsCSAtMjU2IH0sDQotICAgIHsgNSwJNiwJIC0xMjggfSwNCi0gICAgeyA1LAk1LAkgIC02NCB9LA0KLSAgICB7IDQsCTUsCSAgLTMyIH0sDQotICAgIHsgNCwJNSwJCTAgfSwNCi0gICAgeyA1LAk1LAkgICAzMiB9LA0KLSAgICB7IDUsCTYsCSAgIDY0IH0sDQotICAgIHsgNCwJNywJICAxMjggfSwNCi0gICAgeyAzLAk4LAkgIDI1NiB9LA0KLSAgICB7IDMsCTksCSAgNTEyIH0sDQotICAgIHsgMywgICAxMCwJIDEwMjQgfSwNCi0gICAgeyA1LCAgIDMyLAktMTAyNSB9LA0KLSAgICB7IDUsICAgMzIsCSAyMDQ4IH0sDQotfTsNCi1jb25zdCBGWF9CT09MIEh1ZmZtYW5UYWJsZV9IVE9PQl9COCA9IFRSVUU7DQotY29uc3QgSkJpZzJUYWJsZUxpbmUgSHVmZm1hblRhYmxlX0I4W10gPSB7DQotICAgIHsgOCwJMywJICAtMTUgfSwNCi0gICAgeyA5LAkxLAkgICAtNyB9LA0KLSAgICB7IDgsCTEsCSAgIC01IH0sDQotICAgIHsgOSwJMCwJICAgLTMgfSwNCi0gICAgeyA3LAkwLAkgICAtMiB9LA0KLSAgICB7IDQsCTAsCSAgIC0xIH0sDQotICAgIHsgMiwJMSwJCTAgfSwNCi0gICAgeyA1LAkwLAkJMiB9LA0KLSAgICB7IDYsCTAsCQkzIH0sDQotICAgIHsgMywJNCwJCTQgfSwNCi0gICAgeyA2LAkxLAkgICAyMCB9LA0KLSAgICB7IDQsCTQsCSAgIDIyIH0sDQotICAgIHsgNCwJNSwJICAgMzggfSwNCi0gICAgeyA1LAk2LAkgICA3MCB9LA0KLSAgICB7IDUsCTcsCSAgMTM0IH0sDQotICAgIHsgNiwJNywJICAyNjIgfSwNCi0gICAgeyA3LAk4LAkgIDM5MCB9LA0KLSAgICB7IDYsICAgMTAsCSAgNjQ2IH0sDQotICAgIHsgOSwgICAzMiwJICAtMTYgfSwNCi0gICAgeyA5LCAgIDMyLAkgMTY3MCB9LA0KLSAgICB7IDIsCTAsCQkwIH0NCi19Ow0KLWNvbnN0IEZYX0JPT0wgSHVmZm1hblRhYmxlX0hUT09CX0I5ID0gVFJVRTsNCi1jb25zdCBKQmlnMlRhYmxlTGluZSBIdWZmbWFuVGFibGVfQjlbXSA9IHsNCi0gICAgeyA4LAk0LAkgIC0zMSB9LA0KLSAgICB7IDksCTIsCSAgLTE1IH0sDQotICAgIHsgOCwJMiwJICAtMTEgfSwNCi0gICAgeyA5LAkxLAkgICAtNyB9LA0KLSAgICB7IDcsCTEsCSAgIC01IH0sDQotICAgIHsgNCwJMSwJICAgLTMgfSwNCi0gICAgeyAzLAkxLAkgICAtMSB9LA0KLSAgICB7IDMsCTEsCQkxIH0sDQotICAgIHsgNSwJMSwJCTMgfSwNCi0gICAgeyA2LAkxLAkJNSB9LA0KLSAgICB7IDMsCTUsCQk3IH0sDQotICAgIHsgNiwJMiwJICAgMzkgfSwNCi0gICAgeyA0LAk1LAkgICA0MyB9LA0KLSAgICB7IDQsCTYsCSAgIDc1IH0sDQotICAgIHsgNSwJNywJICAxMzkgfSwNCi0gICAgeyA1LAk4LAkgIDI2NyB9LA0KLSAgICB7IDYsCTgsCSAgNTIzIH0sDQotICAgIHsgNywJOSwJICA3NzkgfSwNCi0gICAgeyA2LCAgIDExLAkgMTI5MSB9LA0KLSAgICB7IDksICAgMzIsCSAgLTMyIH0sDQotICAgIHsgOSwgICAzMiwJIDMzMzkgfSwNCi0gICAgeyAyLAkwLAkJMCB9DQotfTsNCi1jb25zdCBGWF9CT09MIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMTAgPSBUUlVFOw0KLWNvbnN0IEpCaWcyVGFibGVMaW5lIEh1ZmZtYW5UYWJsZV9CMTBbXSA9IHsNCi0gICAgeyA3LAk0LAkgIC0yMSB9LA0KLSAgICB7IDgsCTAsCSAgIC01IH0sDQotICAgIHsgNywJMCwJICAgLTQgfSwNCi0gICAgeyA1LAkwLAkgICAtMyB9LA0KLSAgICB7IDIsCTIsCSAgIC0yIH0sDQotICAgIHsgNSwJMCwJCTIgfSwNCi0gICAgeyA2LAkwLAkJMyB9LA0KLSAgICB7IDcsCTAsCQk0IH0sDQotICAgIHsgOCwJMCwJCTUgfSwNCi0gICAgeyAyLAk2LAkJNiB9LA0KLSAgICB7IDUsCTUsCSAgIDcwIH0sDQotICAgIHsgNiwJNSwJICAxMDIgfSwNCi0gICAgeyA2LAk2LAkgIDEzNCB9LA0KLSAgICB7IDYsCTcsCSAgMTk4IH0sDQotICAgIHsgNiwJOCwJICAzMjYgfSwNCi0gICAgeyA2LAk5LAkgIDU4MiB9LA0KLSAgICB7IDYsICAgMTAsCSAxMDk0IH0sDQotICAgIHsgNywgICAxMSwJIDIxMTggfSwNCi0gICAgeyA4LCAgIDMyLAkgIC0yMiB9LA0KLSAgICB7IDgsICAgMzIsCSA0MTY2IH0sDQotICAgIHsgMiwJMCwJCTAgfQ0KLX07DQotY29uc3QgRlhfQk9PTCBIdWZmbWFuVGFibGVfSFRPT0JfQjExID0gRkFMU0U7DQotY29uc3QgSkJpZzJUYWJsZUxpbmUgSHVmZm1hblRhYmxlX0IxMVtdID0gew0KLSAgICB7IDEsCTAsCQkxIH0sDQotICAgIHsgMiwJMSwJCTIgfSwNCi0gICAgeyA0LAkwLAkJNCB9LA0KLSAgICB7IDQsCTEsCQk1IH0sDQotICAgIHsgNSwJMSwJCTcgfSwNCi0gICAgeyA1LAkyLAkJOSB9LA0KLSAgICB7IDYsCTIsCSAgIDEzIH0sDQotICAgIHsgNywJMiwJICAgMTcgfSwNCi0gICAgeyA3LAkzLAkgICAyMSB9LA0KLSAgICB7IDcsCTQsCSAgIDI5IH0sDQotICAgIHsgNywJNSwJICAgNDUgfSwNCi0gICAgeyA3LAk2LAkgICA3NyB9LA0KLSAgICB7IDAsICAgMzIsCQkwIH0sDQotICAgIHsgNywgICAzMiwJICAxNDEgfQ0KLX07DQotY29uc3QgRlhfQk9PTCBIdWZmbWFuVGFibGVfSFRPT0JfQjEyID0gRkFMU0U7DQotY29uc3QgSkJpZzJUYWJsZUxpbmUgSHVmZm1hblRhYmxlX0IxMltdID0gew0KLSAgICB7IDEsCTAsCQkxIH0sDQotICAgIHsgMiwJMCwJCTIgfSwNCi0gICAgeyAzLAkxLAkJMyB9LA0KLSAgICB7IDUsCTAsCQk1IH0sDQotICAgIHsgNSwJMSwJCTYgfSwNCi0gICAgeyA2LAkxLAkJOCB9LA0KLSAgICB7IDcsCTAsCSAgIDEwIH0sDQotICAgIHsgNywJMSwJICAgMTEgfSwNCi0gICAgeyA3LAkyLAkgICAxMyB9LA0KLSAgICB7IDcsCTMsCSAgIDE3IH0sDQotICAgIHsgNywJNCwJICAgMjUgfSwNCi0gICAgeyA4LAk1LAkgICA0MSB9LA0KLSAgICB7IDAsICAgMzIsCQkwIH0sDQotICAgIHsgOCwgICAzMiwJICAgNzMgfQ0KLX07DQotY29uc3QgRlhfQk9PTCBIdWZmbWFuVGFibGVfSFRPT0JfQjEzID0gRkFMU0U7DQotY29uc3QgSkJpZzJUYWJsZUxpbmUgSHVmZm1hblRhYmxlX0IxM1tdID0gew0KLSAgICB7IDEsCTAsCQkxIH0sDQotICAgIHsgMywJMCwJCTIgfSwNCi0gICAgeyA0LAkwLAkJMyB9LA0KLSAgICB7IDUsCTAsCQk0IH0sDQotICAgIHsgNCwJMSwJCTUgfSwNCi0gICAgeyAzLAkzLAkJNyB9LA0KLSAgICB7IDYsCTEsCSAgIDE1IH0sDQotICAgIHsgNiwJMiwJICAgMTcgfSwNCi0gICAgeyA2LAkzLAkgICAyMSB9LA0KLSAgICB7IDYsCTQsCSAgIDI5IH0sDQotICAgIHsgNiwJNSwJICAgNDUgfSwNCi0gICAgeyA3LAk2LAkgICA3NyB9LA0KLSAgICB7IDAsICAgMzIsCQkwIH0sDQotICAgIHsgNywgICAzMiwJICAxNDEgfQ0KLX07DQotY29uc3QgRlhfQk9PTCBIdWZmbWFuVGFibGVfSFRPT0JfQjE0ID0gRkFMU0U7DQotY29uc3QgSkJpZzJUYWJsZUxpbmUgSHVmZm1hblRhYmxlX0IxNFtdID0gew0KLSAgICB7IDMsCTAsCSAgIC0yIH0sDQotICAgIHsgMywJMCwJICAgLTEgfSwNCi0gICAgeyAxLAkwLAkJMCB9LA0KLSAgICB7IDMsCTAsCQkxIH0sDQotICAgIHsgMywJMCwJCTIgfSwNCi0gICAgeyAwLCAgIDMyLAkgICAtMyB9LA0KLSAgICB7IDAsICAgMzIsCQkzIH0NCi19Ow0KLWNvbnN0IEZYX0JPT0wgSHVmZm1hblRhYmxlX0hUT09CX0IxNSA9IEZBTFNFOw0KLWNvbnN0IEpCaWcyVGFibGVMaW5lIEh1ZmZtYW5UYWJsZV9CMTVbXSA9IHsNCi0gICAgeyA3LAk0LAkgIC0yNCB9LA0KLSAgICB7IDYsCTIsCSAgIC04IH0sDQotICAgIHsgNSwJMSwJICAgLTQgfSwNCi0gICAgeyA0LAkwLAkgICAtMiB9LA0KLSAgICB7IDMsCTAsCSAgIC0xIH0sDQotICAgIHsgMSwJMCwJCTAgfSwNCi0gICAgeyAzLAkwLAkJMSB9LA0KLSAgICB7IDQsCTAsCQkyIH0sDQotICAgIHsgNSwJMSwJCTMgfSwNCi0gICAgeyA2LAkyLAkJNSB9LA0KLSAgICB7IDcsCTQsCQk5IH0sDQotICAgIHsgNywgICAzMiwJICAtMjUgfSwNCi0gICAgeyA3LCAgIDMyLAkgICAyNSB9DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9KQklHMl9IVUZGTUFOX1RBQkxFX1NUQU5EQVJEX0hfCisjZGVmaW5lIF9KQklHMl9IVUZGTUFOX1RBQkxFX1NUQU5EQVJEX0hfCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50IFBSRUZMRU47CisgICAgaW50IFJBTkRFTEVOOworICAgIGludCBSQU5HRUxPVzsKK30gSkJpZzJUYWJsZUxpbmU7Citjb25zdCBGWF9CT09MIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMSA9IEZBTFNFOworY29uc3QgSkJpZzJUYWJsZUxpbmUgSHVmZm1hblRhYmxlX0IxW10gPSB7CisgICAgeyAxLAk0LAkJMCB9LAorICAgIHsgMiwJOCwJICAgMTYgfSwKKyAgICB7IDMsICAgMTYsCSAgMjcyIH0sCisgICAgeyAwLCAgIDMyLAkgICAtMSB9LAorICAgIHsgMywgICAzMiwJNjU4MDggfQorfTsKK2NvbnN0IEZYX0JPT0wgSHVmZm1hblRhYmxlX0hUT09CX0IyID0gVFJVRTsKK2NvbnN0IEpCaWcyVGFibGVMaW5lIEh1ZmZtYW5UYWJsZV9CMltdID0geworICAgIHsgMSwJMCwJCTAgfSwKKyAgICB7IDIsCTAsCQkxIH0sCisgICAgeyAzLAkwLAkJMiB9LAorICAgIHsgNCwJMywJCTMgfSwKKyAgICB7IDUsCTYsCSAgIDExIH0sCisgICAgeyAwLCAgIDMyLAkgICAtMSB9LAorICAgIHsgNiwgICAzMiwgICAgIDc1IH0sCisgICAgeyA2LAkwLCAgICAgIDAgfQorfTsKK2NvbnN0IEZYX0JPT0wgSHVmZm1hblRhYmxlX0hUT09CX0IzID0gVFJVRTsKK2NvbnN0IEpCaWcyVGFibGVMaW5lIEh1ZmZtYW5UYWJsZV9CM1tdID0geworICAgIHsgOCwJOCwgICAtMjU2IH0sCisgICAgeyAxLAkwLAkJMCB9LAorICAgIHsgMiwJMCwJCTEgfSwKKyAgICB7IDMsCTAsCQkyIH0sCisgICAgeyA0LAkzLAkJMyB9LAorICAgIHsgNSwJNiwJICAgMTEgfSwKKyAgICB7IDgsICAgMzIsICAgLTI1NyB9LAorICAgIHsgNywgICAzMiwgICAgIDc1IH0sCisgICAgeyA2LAkwLAkJMCB9Cit9OworY29uc3QgRlhfQk9PTCBIdWZmbWFuVGFibGVfSFRPT0JfQjQgPSBGQUxTRTsKK2NvbnN0IEpCaWcyVGFibGVMaW5lIEh1ZmZtYW5UYWJsZV9CNFtdID0geworICAgIHsgMSwJMCwJCTEgfSwKKyAgICB7IDIsCTAsCQkyIH0sCisgICAgeyAzLAkwLAkJMyB9LAorICAgIHsgNCwJMywJCTQgfSwKKyAgICB7IDUsCTYsCSAgIDEyIH0sCisgICAgeyAwLCAgIDMyLCAgICAgLTEgfSwKKyAgICB7IDUsICAgMzIsCSAgIDc2IH0sCit9OworY29uc3QgRlhfQk9PTCBIdWZmbWFuVGFibGVfSFRPT0JfQjUgPSBGQUxTRTsKK2NvbnN0IEpCaWcyVGFibGVMaW5lIEh1ZmZtYW5UYWJsZV9CNVtdID0geworICAgIHsgNywJOCwJIC0yNTUgfSwKKyAgICB7IDEsCTAsCSAgICAxIH0sCisgICAgeyAyLAkwLAkgICAgMiB9LAorICAgIHsgMywgICAgMCwgICAgICAzIH0sCisgICAgeyA0LAkzLAkgICAgNCB9LAorICAgIHsgNSwJNiwJICAgMTIgfSwKKyAgICB7IDcsICAgMzIsICAgLTI1NiB9LAorICAgIHsgNiwgICAzMiwgICAgIDc2IH0KK307Citjb25zdCBGWF9CT09MIEh1ZmZtYW5UYWJsZV9IVE9PQl9CNiA9IEZBTFNFOworY29uc3QgSkJpZzJUYWJsZUxpbmUgSHVmZm1hblRhYmxlX0I2W10gPSB7CisgICAgeyA1LCAgIDEwLAktMjA0OCB9LAorICAgIHsgNCwgICAgOSwJLTEwMjQgfSwKKyAgICB7IDQsCTgsCSAtNTEyIH0sCisgICAgeyA0LAk3LAkgLTI1NiB9LAorICAgIHsgNSwJNiwJIC0xMjggfSwKKyAgICB7IDUsCTUsCSAgLTY0IH0sCisgICAgeyA0LAk1LAkgIC0zMiB9LAorICAgIHsgMiwJNywJCTAgfSwKKyAgICB7IDMsCTcsCSAgMTI4IH0sCisgICAgeyAzLAk4LAkgIDI1NiB9LAorICAgIHsgNCwJOSwJICA1MTIgfSwKKyAgICB7IDQsICAgMTAsCSAxMDI0IH0sCisgICAgeyA2LCAgIDMyLAktMjA0OSB9LAorICAgIHsgNiwgICAzMiwJIDIwNDggfQorfTsKK2NvbnN0IEZYX0JPT0wgSHVmZm1hblRhYmxlX0hUT09CX0I3ID0gRkFMU0U7Citjb25zdCBKQmlnMlRhYmxlTGluZSBIdWZmbWFuVGFibGVfQjdbXSA9IHsKKyAgICB7IDQsCTksCS0xMDI0IH0sCisgICAgeyAzLAk4LAkgLTUxMiB9LAorICAgIHsgNCwJNywJIC0yNTYgfSwKKyAgICB7IDUsCTYsCSAtMTI4IH0sCisgICAgeyA1LAk1LAkgIC02NCB9LAorICAgIHsgNCwJNSwJICAtMzIgfSwKKyAgICB7IDQsCTUsCQkwIH0sCisgICAgeyA1LAk1LAkgICAzMiB9LAorICAgIHsgNSwJNiwJICAgNjQgfSwKKyAgICB7IDQsCTcsCSAgMTI4IH0sCisgICAgeyAzLAk4LAkgIDI1NiB9LAorICAgIHsgMywJOSwJICA1MTIgfSwKKyAgICB7IDMsICAgMTAsCSAxMDI0IH0sCisgICAgeyA1LCAgIDMyLAktMTAyNSB9LAorICAgIHsgNSwgICAzMiwJIDIwNDggfSwKK307Citjb25zdCBGWF9CT09MIEh1ZmZtYW5UYWJsZV9IVE9PQl9COCA9IFRSVUU7Citjb25zdCBKQmlnMlRhYmxlTGluZSBIdWZmbWFuVGFibGVfQjhbXSA9IHsKKyAgICB7IDgsCTMsCSAgLTE1IH0sCisgICAgeyA5LAkxLAkgICAtNyB9LAorICAgIHsgOCwJMSwJICAgLTUgfSwKKyAgICB7IDksCTAsCSAgIC0zIH0sCisgICAgeyA3LAkwLAkgICAtMiB9LAorICAgIHsgNCwJMCwJICAgLTEgfSwKKyAgICB7IDIsCTEsCQkwIH0sCisgICAgeyA1LAkwLAkJMiB9LAorICAgIHsgNiwJMCwJCTMgfSwKKyAgICB7IDMsCTQsCQk0IH0sCisgICAgeyA2LAkxLAkgICAyMCB9LAorICAgIHsgNCwJNCwJICAgMjIgfSwKKyAgICB7IDQsCTUsCSAgIDM4IH0sCisgICAgeyA1LAk2LAkgICA3MCB9LAorICAgIHsgNSwJNywJICAxMzQgfSwKKyAgICB7IDYsCTcsCSAgMjYyIH0sCisgICAgeyA3LAk4LAkgIDM5MCB9LAorICAgIHsgNiwgICAxMCwJICA2NDYgfSwKKyAgICB7IDksICAgMzIsCSAgLTE2IH0sCisgICAgeyA5LCAgIDMyLAkgMTY3MCB9LAorICAgIHsgMiwJMCwJCTAgfQorfTsKK2NvbnN0IEZYX0JPT0wgSHVmZm1hblRhYmxlX0hUT09CX0I5ID0gVFJVRTsKK2NvbnN0IEpCaWcyVGFibGVMaW5lIEh1ZmZtYW5UYWJsZV9COVtdID0geworICAgIHsgOCwJNCwJICAtMzEgfSwKKyAgICB7IDksCTIsCSAgLTE1IH0sCisgICAgeyA4LAkyLAkgIC0xMSB9LAorICAgIHsgOSwJMSwJICAgLTcgfSwKKyAgICB7IDcsCTEsCSAgIC01IH0sCisgICAgeyA0LAkxLAkgICAtMyB9LAorICAgIHsgMywJMSwJICAgLTEgfSwKKyAgICB7IDMsCTEsCQkxIH0sCisgICAgeyA1LAkxLAkJMyB9LAorICAgIHsgNiwJMSwJCTUgfSwKKyAgICB7IDMsCTUsCQk3IH0sCisgICAgeyA2LAkyLAkgICAzOSB9LAorICAgIHsgNCwJNSwJICAgNDMgfSwKKyAgICB7IDQsCTYsCSAgIDc1IH0sCisgICAgeyA1LAk3LAkgIDEzOSB9LAorICAgIHsgNSwJOCwJICAyNjcgfSwKKyAgICB7IDYsCTgsCSAgNTIzIH0sCisgICAgeyA3LAk5LAkgIDc3OSB9LAorICAgIHsgNiwgICAxMSwJIDEyOTEgfSwKKyAgICB7IDksICAgMzIsCSAgLTMyIH0sCisgICAgeyA5LCAgIDMyLAkgMzMzOSB9LAorICAgIHsgMiwJMCwJCTAgfQorfTsKK2NvbnN0IEZYX0JPT0wgSHVmZm1hblRhYmxlX0hUT09CX0IxMCA9IFRSVUU7Citjb25zdCBKQmlnMlRhYmxlTGluZSBIdWZmbWFuVGFibGVfQjEwW10gPSB7CisgICAgeyA3LAk0LAkgIC0yMSB9LAorICAgIHsgOCwJMCwJICAgLTUgfSwKKyAgICB7IDcsCTAsCSAgIC00IH0sCisgICAgeyA1LAkwLAkgICAtMyB9LAorICAgIHsgMiwJMiwJICAgLTIgfSwKKyAgICB7IDUsCTAsCQkyIH0sCisgICAgeyA2LAkwLAkJMyB9LAorICAgIHsgNywJMCwJCTQgfSwKKyAgICB7IDgsCTAsCQk1IH0sCisgICAgeyAyLAk2LAkJNiB9LAorICAgIHsgNSwJNSwJICAgNzAgfSwKKyAgICB7IDYsCTUsCSAgMTAyIH0sCisgICAgeyA2LAk2LAkgIDEzNCB9LAorICAgIHsgNiwJNywJICAxOTggfSwKKyAgICB7IDYsCTgsCSAgMzI2IH0sCisgICAgeyA2LAk5LAkgIDU4MiB9LAorICAgIHsgNiwgICAxMCwJIDEwOTQgfSwKKyAgICB7IDcsICAgMTEsCSAyMTE4IH0sCisgICAgeyA4LCAgIDMyLAkgIC0yMiB9LAorICAgIHsgOCwgICAzMiwJIDQxNjYgfSwKKyAgICB7IDIsCTAsCQkwIH0KK307Citjb25zdCBGWF9CT09MIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMTEgPSBGQUxTRTsKK2NvbnN0IEpCaWcyVGFibGVMaW5lIEh1ZmZtYW5UYWJsZV9CMTFbXSA9IHsKKyAgICB7IDEsCTAsCQkxIH0sCisgICAgeyAyLAkxLAkJMiB9LAorICAgIHsgNCwJMCwJCTQgfSwKKyAgICB7IDQsCTEsCQk1IH0sCisgICAgeyA1LAkxLAkJNyB9LAorICAgIHsgNSwJMiwJCTkgfSwKKyAgICB7IDYsCTIsCSAgIDEzIH0sCisgICAgeyA3LAkyLAkgICAxNyB9LAorICAgIHsgNywJMywJICAgMjEgfSwKKyAgICB7IDcsCTQsCSAgIDI5IH0sCisgICAgeyA3LAk1LAkgICA0NSB9LAorICAgIHsgNywJNiwJICAgNzcgfSwKKyAgICB7IDAsICAgMzIsCQkwIH0sCisgICAgeyA3LCAgIDMyLAkgIDE0MSB9Cit9OworY29uc3QgRlhfQk9PTCBIdWZmbWFuVGFibGVfSFRPT0JfQjEyID0gRkFMU0U7Citjb25zdCBKQmlnMlRhYmxlTGluZSBIdWZmbWFuVGFibGVfQjEyW10gPSB7CisgICAgeyAxLAkwLAkJMSB9LAorICAgIHsgMiwJMCwJCTIgfSwKKyAgICB7IDMsCTEsCQkzIH0sCisgICAgeyA1LAkwLAkJNSB9LAorICAgIHsgNSwJMSwJCTYgfSwKKyAgICB7IDYsCTEsCQk4IH0sCisgICAgeyA3LAkwLAkgICAxMCB9LAorICAgIHsgNywJMSwJICAgMTEgfSwKKyAgICB7IDcsCTIsCSAgIDEzIH0sCisgICAgeyA3LAkzLAkgICAxNyB9LAorICAgIHsgNywJNCwJICAgMjUgfSwKKyAgICB7IDgsCTUsCSAgIDQxIH0sCisgICAgeyAwLCAgIDMyLAkJMCB9LAorICAgIHsgOCwgICAzMiwJICAgNzMgfQorfTsKK2NvbnN0IEZYX0JPT0wgSHVmZm1hblRhYmxlX0hUT09CX0IxMyA9IEZBTFNFOworY29uc3QgSkJpZzJUYWJsZUxpbmUgSHVmZm1hblRhYmxlX0IxM1tdID0geworICAgIHsgMSwJMCwJCTEgfSwKKyAgICB7IDMsCTAsCQkyIH0sCisgICAgeyA0LAkwLAkJMyB9LAorICAgIHsgNSwJMCwJCTQgfSwKKyAgICB7IDQsCTEsCQk1IH0sCisgICAgeyAzLAkzLAkJNyB9LAorICAgIHsgNiwJMSwJICAgMTUgfSwKKyAgICB7IDYsCTIsCSAgIDE3IH0sCisgICAgeyA2LAkzLAkgICAyMSB9LAorICAgIHsgNiwJNCwJICAgMjkgfSwKKyAgICB7IDYsCTUsCSAgIDQ1IH0sCisgICAgeyA3LAk2LAkgICA3NyB9LAorICAgIHsgMCwgICAzMiwJCTAgfSwKKyAgICB7IDcsICAgMzIsCSAgMTQxIH0KK307Citjb25zdCBGWF9CT09MIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMTQgPSBGQUxTRTsKK2NvbnN0IEpCaWcyVGFibGVMaW5lIEh1ZmZtYW5UYWJsZV9CMTRbXSA9IHsKKyAgICB7IDMsCTAsCSAgIC0yIH0sCisgICAgeyAzLAkwLAkgICAtMSB9LAorICAgIHsgMSwJMCwJCTAgfSwKKyAgICB7IDMsCTAsCQkxIH0sCisgICAgeyAzLAkwLAkJMiB9LAorICAgIHsgMCwgICAzMiwJICAgLTMgfSwKKyAgICB7IDAsICAgMzIsCQkzIH0KK307Citjb25zdCBGWF9CT09MIEh1ZmZtYW5UYWJsZV9IVE9PQl9CMTUgPSBGQUxTRTsKK2NvbnN0IEpCaWcyVGFibGVMaW5lIEh1ZmZtYW5UYWJsZV9CMTVbXSA9IHsKKyAgICB7IDcsCTQsCSAgLTI0IH0sCisgICAgeyA2LAkyLAkgICAtOCB9LAorICAgIHsgNSwJMSwJICAgLTQgfSwKKyAgICB7IDQsCTAsCSAgIC0yIH0sCisgICAgeyAzLAkwLAkgICAtMSB9LAorICAgIHsgMSwJMCwJCTAgfSwKKyAgICB7IDMsCTAsCQkxIH0sCisgICAgeyA0LAkwLAkJMiB9LAorICAgIHsgNSwJMSwJCTMgfSwKKyAgICB7IDYsCTIsCQk1IH0sCisgICAgeyA3LAk0LAkJOSB9LAorICAgIHsgNywgICAzMiwJICAtMjUgfSwKKyAgICB7IDcsICAgMzIsCSAgIDI1IH0KK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfSW1hZ2UuY3BwIGIvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9JbWFnZS5jcHAKaW5kZXggMTcxOTAyOC4uMDkzNTNjMCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9JbWFnZS5jcHAKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9JbWFnZS5jcHAKQEAgLTEsMTYxOSArMSwxNjE5IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiSkJpZzJfSW1hZ2UuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNydC9meF9iYXNpYy5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2Nvb3JkaW5hdGVzLmgiDQotI2luY2x1ZGUgPGxpbWl0cy5oPg0KLUNKQmlnMl9JbWFnZTo6Q0pCaWcyX0ltYWdlKEZYX0lOVDMyIHcsIEZYX0lOVDMyIGgpDQotew0KLSAgICBtX25XaWR0aAk9IHc7DQotICAgIG1fbkhlaWdodAk9IGg7DQotICAgIGlmIChtX25XaWR0aCA8PSAwIHx8IG1fbkhlaWdodCA8PSAwIHx8IG1fbldpZHRoID4gSU5UX01BWCAtIDMxKSB7DQotICAgICAgICBtX3BEYXRhID0gTlVMTDsNCi0gICAgICAgIG1fYk5lZWRGcmVlID0gRkFMU0U7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbV9uU3RyaWRlICA9ICgodyArIDMxKSA+PiA1KSA8PCAyOw0KLSAgICBpZiAobV9uU3RyaWRlICogbV9uSGVpZ2h0ID4gMCAmJiAxMDQ4NTc2MDAgLyAoaW50KW1fblN0cmlkZSA+IG1fbkhlaWdodCkgew0KLSAgICAgICAgbV9wRGF0YSA9IChGWF9CWVRFICopbV9wTW9kdWxlLT5KQmlnMl9NYWxsb2MyKG1fblN0cmlkZSwgbV9uSGVpZ2h0KTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1fcERhdGEgPSBOVUxMOw0KLSAgICB9DQotICAgIG1fYk5lZWRGcmVlID0gVFJVRTsNCi19DQotQ0pCaWcyX0ltYWdlOjpDSkJpZzJfSW1hZ2UoRlhfSU5UMzIgdywgRlhfSU5UMzIgaCwgRlhfSU5UMzIgc3RyaWRlLCBGWF9CWVRFKnBCdWYpDQotew0KLSAgICBtX25XaWR0aCA9IHc7DQotICAgIG1fbkhlaWdodCA9IGg7DQotICAgIG1fblN0cmlkZSA9IHN0cmlkZTsNCi0gICAgbV9wRGF0YSA9IHBCdWY7DQotICAgIG1fYk5lZWRGcmVlID0gRkFMU0U7DQotfQ0KLUNKQmlnMl9JbWFnZTo6Q0pCaWcyX0ltYWdlKENKQmlnMl9JbWFnZSAmaW0pDQotew0KLSAgICBtX3BNb2R1bGUgPSBpbS5tX3BNb2R1bGU7DQotICAgIG1fbldpZHRoCT0gaW0ubV9uV2lkdGg7DQotICAgIG1fbkhlaWdodAk9IGltLm1fbkhlaWdodDsNCi0gICAgbV9uU3RyaWRlCT0gaW0ubV9uU3RyaWRlOw0KLSAgICBpZiAoaW0ubV9wRGF0YSkgew0KLSAgICAgICAgbV9wRGF0YSA9IChGWF9CWVRFKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIobV9uU3RyaWRlLCBtX25IZWlnaHQpOw0KLSAgICAgICAgSkJJRzJfbWVtY3B5KG1fcERhdGEsIGltLm1fcERhdGEsIG1fblN0cmlkZSAqIG1fbkhlaWdodCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX3BEYXRhID0gTlVMTDsNCi0gICAgfQ0KLSAgICBtX2JOZWVkRnJlZSA9IFRSVUU7DQotfQ0KLUNKQmlnMl9JbWFnZTo6fkNKQmlnMl9JbWFnZSgpDQotew0KLSAgICBpZihtX2JOZWVkRnJlZSAmJiBtX3BEYXRhKSB7DQotICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUobV9wRGF0YSk7DQotICAgIH0NCi19DQotRlhfQk9PTCBDSkJpZzJfSW1hZ2U6OmdldFBpeGVsKEZYX0lOVDMyIHgsIEZYX0lOVDMyIHkpDQotew0KLSAgICBpZiAoIW1fcERhdGEpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIEZYX0lOVDMyIG0sIG47DQotICAgIGlmKHggPCAwIHx8IHggPj0gbV9uV2lkdGgpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGlmKHkgPCAwIHx8IHkgPj0gbV9uSGVpZ2h0KSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBtID0geSAqIG1fblN0cmlkZSArICh4ID4+IDMpOw0KLSAgICBuID0geCAmIDc7DQotICAgIHJldHVybiAoKG1fcERhdGFbbV0gPj4gKDcgLSBuKSkgJiAxKTsNCi19DQotDQotRlhfSU5UMzIgQ0pCaWcyX0ltYWdlOjpzZXRQaXhlbChGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBGWF9CT09MIHYpDQotew0KLSAgICBpZiAoIW1fcERhdGEpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIEZYX0lOVDMyIG0sIG47DQotICAgIGlmKHggPCAwIHx8IHggPj0gbV9uV2lkdGgpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGlmKHkgPCAwIHx8IHkgPj0gbV9uSGVpZ2h0KSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBtID0geSAqIG1fblN0cmlkZSArICh4ID4+IDMpOw0KLSAgICBuID0geCAmIDc7DQotICAgIGlmKHYpIHsNCi0gICAgICAgIG1fcERhdGFbbV0gfD0gMSA8PCAoNyAtIG4pOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wRGF0YVttXSAmPSB+KDEgPDwgKDcgLSBuKSk7DQotICAgIH0NCi0gICAgcmV0dXJuIDE7DQotfQ0KLXZvaWQgQ0pCaWcyX0ltYWdlOjpjb3B5TGluZShGWF9JTlQzMiBoVG8sIEZYX0lOVDMyIGhGcm9tKQ0KLXsNCi0gICAgaWYgKCFtX3BEYXRhKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYoaEZyb20gPCAwIHx8IGhGcm9tID49IG1fbkhlaWdodCkgew0KLSAgICAgICAgSkJJRzJfbWVtc2V0KG1fcERhdGEgKyBoVG8gKiBtX25TdHJpZGUsIDAsIG1fblN0cmlkZSk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBKQklHMl9tZW1jcHkobV9wRGF0YSArIGhUbyAqIG1fblN0cmlkZSwgbV9wRGF0YSArIGhGcm9tICogbV9uU3RyaWRlLCBtX25TdHJpZGUpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0pCaWcyX0ltYWdlOjpmaWxsKEZYX0JPT0wgdikNCi17DQotICAgIGlmICghbV9wRGF0YSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEpCSUcyX21lbXNldChtX3BEYXRhLCB2ID8gMHhmZiA6IDAsIG1fblN0cmlkZSAqIG1fbkhlaWdodCk7DQotfQ0KLUZYX0JPT0wgQ0pCaWcyX0ltYWdlOjpjb21wb3NlVG8oQ0pCaWcyX0ltYWdlICpwRHN0LCBGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBKQmlnMkNvbXBvc2VPcCBvcCkNCi17DQotICAgIGlmICghbV9wRGF0YSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHJldHVybiBjb21wb3NlVG9fb3B0MihwRHN0LCB4LCB5LCBvcCk7DQotfQ0KLUZYX0JPT0wgQ0pCaWcyX0ltYWdlOjpjb21wb3NlVG8oQ0pCaWcyX0ltYWdlICpwRHN0LCBGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBKQmlnMkNvbXBvc2VPcCBvcCwgY29uc3QgRlhfUkVDVCogcFNyY1JlY3QpDQotew0KLSAgICBpZiAoIW1fcERhdGEpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoTlVMTCA9PSBwU3JjUmVjdCB8fCAqcFNyY1JlY3QgPT0gRlhfUkVDVCgwLCAwLCBtX25XaWR0aCwgbV9uSGVpZ2h0KSkgew0KLSAgICAgICAgcmV0dXJuIGNvbXBvc2VUb19vcHQyKHBEc3QsIHgsIHksIG9wKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gY29tcG9zZVRvX29wdDIocERzdCwgeCwgeSwgb3AsIHBTcmNSZWN0KTsNCi19DQotRlhfQk9PTCBDSkJpZzJfSW1hZ2U6OmNvbXBvc2VUb191bm9wdChDSkJpZzJfSW1hZ2UgKnBEc3QsIEZYX0lOVDMyIHgsIEZYX0lOVDMyIHksIEpCaWcyQ29tcG9zZU9wIG9wKQ0KLXsNCi0gICAgRlhfSU5UMzIgdywgaCwgZHgsIGR5Ow0KLSAgICBGWF9JTlQzMiBpLCBqOw0KLSAgICB3ID0gbV9uV2lkdGg7DQotICAgIGggPSBtX25IZWlnaHQ7DQotICAgIGR4ID0gZHkgPSAwOw0KLSAgICBpZih4IDwgMCkgew0KLSAgICAgICAgZHggKz0gLXg7DQotICAgICAgICB3ICAtPSAteDsNCi0gICAgICAgIHggPSAwOw0KLSAgICB9DQotICAgIGlmKHkgPCAwKSB7DQotICAgICAgICBkeSArPSAteTsNCi0gICAgICAgIGggIC09IC15Ow0KLSAgICAgICAgeSA9IDA7DQotICAgIH0NCi0gICAgaWYoeCArIHcgPiBwRHN0LT5tX25XaWR0aCkgew0KLSAgICAgICAgdyA9IHBEc3QtPm1fbldpZHRoIC0geDsNCi0gICAgfQ0KLSAgICBpZih5ICsgaCA+IHBEc3QtPm1fbkhlaWdodCkgew0KLSAgICAgICAgaCA9IHBEc3QtPm1fbkhlaWdodCAtIHk7DQotICAgIH0NCi0gICAgc3dpdGNoKG9wKSB7DQotICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfT1I6DQotICAgICAgICAgICAgZm9yKGogPSAwOyBqIDwgaDsgaisrKSB7DQotICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IHc7IGkrKykgew0KLSAgICAgICAgICAgICAgICAgICAgcERzdC0+c2V0UGl4ZWwoeCArIGksIHkgKyBqLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdldFBpeGVsKGkgKyBkeCwgaiArIGR5KSB8IHBEc3QtPmdldFBpeGVsKHggKyBpLCB5ICsgaikpICYgMSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfQU5EOg0KLSAgICAgICAgICAgIGZvcihqID0gMDsgaiA8IGg7IGorKykgew0KLSAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCB3OyBpKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIHBEc3QtPnNldFBpeGVsKHggKyBpLCB5ICsgaiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXRQaXhlbChpICsgZHgsIGogKyBkeSkgJiBwRHN0LT5nZXRQaXhlbCh4ICsgaSwgeSArIGopKSAmIDEpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hPUjoNCi0gICAgICAgICAgICBmb3IoaiA9IDA7IGogPCBoOyBqKyspIHsNCi0gICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgdzsgaSsrKSB7DQotICAgICAgICAgICAgICAgICAgICBwRHN0LT5zZXRQaXhlbCh4ICsgaSwgeSArIGosDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2V0UGl4ZWwoaSArIGR4LCBqICsgZHkpIF4gcERzdC0+Z2V0UGl4ZWwoeCArIGksIHkgKyBqKSkgJiAxKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOg0KLSAgICAgICAgICAgIGZvcihqID0gMDsgaiA8IGg7IGorKykgew0KLSAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCB3OyBpKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIHBEc3QtPnNldFBpeGVsKHggKyBpLCB5ICsgaiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh+KGdldFBpeGVsKGkgKyBkeCwgaiArIGR5KSBeIHBEc3QtPmdldFBpeGVsKHggKyBpLCB5ICsgaikpKSAmIDEpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1JFUExBQ0U6DQotICAgICAgICAgICAgZm9yKGogPSAwOyBqIDwgaDsgaisrKSB7DQotICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IHc7IGkrKykgew0KLSAgICAgICAgICAgICAgICAgICAgcERzdC0+c2V0UGl4ZWwoeCArIGksIHkgKyBqLCBnZXRQaXhlbChpICsgZHgsIGogKyBkeSkpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIENKQmlnMl9JbWFnZTo6Y29tcG9zZVRvX29wdChDSkJpZzJfSW1hZ2UgKnBEc3QsIEZYX0lOVDMyIHgsIEZYX0lOVDMyIHksIEpCaWcyQ29tcG9zZU9wIG9wKQ0KLXsNCi0gICAgRlhfSU5UMzIgeDAsIHgxLCB5MCwgeTEsIHh4LCB5eTsNCi0gICAgRlhfQllURSAqcExpbmVTcmMsICpwTGluZURzdCwgKnNyY1B0ciwgKmRlc3RQdHI7DQotICAgIEZYX0RXT1JEIHNyYzAsIHNyYzEsIHNyYywgZGVzdCwgczEsIHMyLCBtMSwgbTIsIG0zOw0KLSAgICBGWF9CT09MIG9uZUJ5dGU7DQotICAgIGlmICghbV9wRGF0YSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmICh5IDwgMCkgew0KLSAgICAgICAgeTAgPSAteTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHkwID0gMDsNCi0gICAgfQ0KLSAgICBpZiAoeSArIG1fbkhlaWdodCA+IHBEc3QtPm1fbkhlaWdodCkgew0KLSAgICAgICAgeTEgPSBwRHN0LT5tX25IZWlnaHQgLSB5Ow0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgeTEgPSBtX25IZWlnaHQ7DQotICAgIH0NCi0gICAgaWYgKHkwID49IHkxKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKHggPj0gMCkgew0KLSAgICAgICAgeDAgPSB4ICYgfjc7DQotICAgIH0gZWxzZSB7DQotICAgICAgICB4MCA9IDA7DQotICAgIH0NCi0gICAgeDEgPSB4ICsgbV9uV2lkdGg7DQotICAgIGlmICh4MSA+IHBEc3QtPm1fbldpZHRoKSB7DQotICAgICAgICB4MSA9IHBEc3QtPm1fbldpZHRoOw0KLSAgICB9DQotICAgIGlmICh4MCA+PSB4MSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHMxID0geCAmIDc7DQotICAgIHMyID0gOCAtIHMxOw0KLSAgICBtMSA9IDB4ZmYgPj4gKHgxICYgNyk7DQotICAgIG0yID0gMHhmZiA8PCAoKCh4MSAmIDcpID09IDApID8gMCA6IDggLSAoeDEgJiA3KSk7DQotICAgIG0zID0gKDB4ZmYgPj4gczEpICYgbTI7DQotICAgIG9uZUJ5dGUgPSB4MCA9PSAoKHgxIC0gMSkgJiB+Nyk7DQotICAgIHBMaW5lRHN0ID0gcERzdC0+bV9wRGF0YSArIHkgKiBwRHN0LT5tX25TdHJpZGU7DQotICAgIHBMaW5lU3JjID0gbV9wRGF0YSArIHkwICogbV9uU3RyaWRlOw0KLSAgICBpZihvbmVCeXRlKSB7DQotICAgICAgICBpZih4ID49IDApIHsNCi0gICAgICAgICAgICBzd2l0Y2gob3ApIHsNCi0gICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOiB7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh5eSA9IHkwOyB5eSA8IHkxOyArK3l5KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQdHIgPSBwTGluZURzdCArICh4ID4+IDMpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNQdHIgPSBwTGluZVNyYzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0IHw9ICgqc3JjUHRyID4+IHMxKSAmIG0yOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0ciA9IChGWF9CWVRFKWRlc3Q7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVTcmMgKz0gbV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfQU5EOiB7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh5eSA9IHkwOyB5eSA8IHkxOyArK3l5KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQdHIgPSBwTGluZURzdCArICh4ID4+IDMpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNQdHIgPSBwTGluZVNyYzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICY9ICgoMHhmZjAwIHwgKnNyY1B0cikgPj4gczEpIHwgbTE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyID0gKEZYX0JZVEUpZGVzdDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZVNyYyArPSBtX25TdHJpZGU7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6IHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHl5ID0geTA7IHl5IDwgeTE7ICsreXkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFB0ciA9IHBMaW5lRHN0ICsgKHggPj4gMyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1B0ciA9IHBMaW5lU3JjOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gKmRlc3RQdHI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgXj0gKCpzcmNQdHIgPj4gczEpICYgbTI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyID0gKEZYX0JZVEUpZGVzdDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZVNyYyArPSBtX25TdHJpZGU7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOiB7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh5eSA9IHkwOyB5eSA8IHkxOyArK3l5KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQdHIgPSBwTGluZURzdCArICh4ID4+IDMpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNQdHIgPSBwTGluZVNyYzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0IF49ICgoKnNyY1B0ciBeIDB4ZmYpID4+IHMxKSAmIG0yOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0ciA9IChGWF9CWVRFKWRlc3Q7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVTcmMgKz0gbV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfUkVQTEFDRTogew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeXkgPSB5MDsgeXkgPCB5MTsgKyt5eSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UHRyID0gcExpbmVEc3QgKyAoeCA+PiAzKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUHRyID0gcExpbmVTcmM7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9IChkZXN0ICYgfm0zKSB8ICgoKnNyY1B0ciA+PiBzMSkgJiBtMyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyID0gKEZYX0JZVEUpZGVzdDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZVNyYyArPSBtX25TdHJpZGU7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBzd2l0Y2gob3ApIHsNCi0gICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOiB7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHl5ID0geTA7IHl5IDwgeTE7ICsreXkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFB0ciA9IHBMaW5lRHN0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNQdHIgPSBwTGluZVNyYyArICgteCA+PiAzKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0IHw9ICpzcmNQdHIgJiBtMjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIgPSAoRlhfQllURSlkZXN0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZURzdCArPSBwRHN0LT5tX25TdHJpZGU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lU3JjICs9IG1fblN0cmlkZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDogew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcih5eSA9IHkwOyB5eSA8IHkxOyArK3l5KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQdHIgPSBwTGluZURzdDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUHRyID0gcExpbmVTcmMgKyAoLXggPj4gMyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCAmPSAqc3JjUHRyIHwgbTE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyID0gKEZYX0JZVEUpZGVzdDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZVNyYyArPSBtX25TdHJpZGU7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6IHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoeXkgPSB5MDsgeXkgPCB5MTsgKyt5eSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UHRyID0gcExpbmVEc3Q7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1B0ciA9IHBMaW5lU3JjICsgKC14ID4+IDMpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gKmRlc3RQdHI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgXj0gKnNyY1B0ciAmIG0yOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0ciA9IChGWF9CWVRFKWRlc3Q7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVTcmMgKz0gbV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjogew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcih5eSA9IHkwOyB5eSA8IHkxOyArK3l5KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQdHIgPSBwTGluZURzdDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUHRyID0gcExpbmVTcmMgKyAoLXggPj4gMyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCBePSAoKnNyY1B0ciBeIDB4ZmYpICYgbTI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyID0gKEZYX0JZVEUpZGVzdDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZVNyYyArPSBtX25TdHJpZGU7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOiB7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHl5ID0geTA7IHl5IDwgeTE7ICsreXkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFB0ciA9IHBMaW5lRHN0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNQdHIgPSBwTGluZVNyYyArICgteCA+PiAzKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gKCpzcmNQdHIgJiBtMikgfCAoZGVzdCAmIG0xKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIgPSAoRlhfQllURSlkZXN0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZURzdCArPSBwRHN0LT5tX25TdHJpZGU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lU3JjICs9IG1fblN0cmlkZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZih4ID49IDApIHsNCi0gICAgICAgICAgICBzd2l0Y2gob3ApIHsNCi0gICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOiB7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHl5ID0geTA7IHl5IDwgeTE7ICsreXkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFB0ciA9IHBMaW5lRHN0ICsgKHggPj4gMyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1B0ciA9IHBMaW5lU3JjOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gKmRlc3RQdHI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgfD0gc3JjMSA+PiBzMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIrKyA9IChGWF9CWVRFKWRlc3Q7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4ID0geDAgKyA4Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgeHggPCB4MSAtIDg7IHh4ICs9IDgpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzAgPSBzcmMxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9ICpzcmNQdHIrKzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9ICgoKHNyYzAgPDwgOCkgfCBzcmMxKSA+PiBzMSkgJiAweGZmOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCB8PSBzcmM7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0cisrID0gKEZYX0JZVEUpZGVzdDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gKmRlc3RQdHI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzAgPSBzcmMxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzcmNQdHIgLSBwTGluZVNyYyA8IG1fblN0cmlkZSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9ICpzcmNQdHIrKzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9ICgoKHNyYzAgPDwgOCkgfCBzcmMxKSA+PiBzMSkgJiAweGZmOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0IHw9IHNyYyAmIG0yOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0ciA9IChGWF9CWVRFKWRlc3Q7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVTcmMgKz0gbV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfQU5EOiB7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHl5ID0geTA7IHl5IDwgeTE7ICsreXkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFB0ciA9IHBMaW5lRHN0ICsgKHggPj4gMyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1B0ciA9IHBMaW5lU3JjOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gKmRlc3RQdHI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgJj0gKDB4ZmYwMCB8IHNyYzEpID4+IHMxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0cisrID0gKEZYX0JZVEUpZGVzdDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeHggPSB4MCArIDg7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB4eCA8IHgxIC0gODsgeHggKz0gOCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMCA9IHNyYzE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gKCgoc3JjMCA8PCA4KSB8IHNyYzEpID4+IHMxKSAmIDB4ZmY7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICY9IHNyYzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyKysgPSAoRlhfQllURSlkZXN0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMCA9IHNyYzE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNyY1B0ciAtIHBMaW5lU3JjIDwgbV9uU3RyaWRlKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gKCgoc3JjMCA8PCA4KSB8IHNyYzEpID4+IHMxKSAmIDB4ZmY7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgJj0gc3JjIHwgbTE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyID0gKEZYX0JZVEUpZGVzdDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZVNyYyArPSBtX25TdHJpZGU7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6IHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoeXkgPSB5MDsgeXkgPCB5MTsgKyt5eSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UHRyID0gcExpbmVEc3QgKyAoeCA+PiAzKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUHRyID0gcExpbmVTcmM7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCBePSBzcmMxID4+IHMxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0cisrID0gKEZYX0JZVEUpZGVzdDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeHggPSB4MCArIDg7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB4eCA8IHgxIC0gODsgeHggKz0gOCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMCA9IHNyYzE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gKCgoc3JjMCA8PCA4KSB8IHNyYzEpID4+IHMxKSAmIDB4ZmY7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0IF49IHNyYzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyKysgPSAoRlhfQllURSlkZXN0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMCA9IHNyYzE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNyY1B0ciAtIHBMaW5lU3JjIDwgbV9uU3RyaWRlKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gKCgoc3JjMCA8PCA4KSB8IHNyYzEpID4+IHMxKSAmIDB4ZmY7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgXj0gc3JjICYgbTI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyID0gKEZYX0JZVEUpZGVzdDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZVNyYyArPSBtX25TdHJpZGU7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOiB7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHl5ID0geTA7IHl5IDwgeTE7ICsreXkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFB0ciA9IHBMaW5lRHN0ICsgKHggPj4gMyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1B0ciA9IHBMaW5lU3JjOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gKmRlc3RQdHI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgXj0gKHNyYzEgXiAweGZmKSA+PiBzMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIrKyA9IChGWF9CWVRFKWRlc3Q7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4ID0geDAgKyA4Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgeHggPCB4MSAtIDg7IHh4ICs9IDgpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzAgPSBzcmMxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9ICpzcmNQdHIrKzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9ICgoKHNyYzAgPDwgOCkgfCBzcmMxKSA+PiBzMSkgJiAweGZmOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCBePSBzcmMgXiAweGZmOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIrKyA9IChGWF9CWVRFKWRlc3Q7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMwID0gc3JjMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3JjUHRyIC0gcExpbmVTcmMgPCBtX25TdHJpZGUpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMgPSAoKChzcmMwIDw8IDgpIHwgc3JjMSkgPj4gczEpICYgMHhmZjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCBePSAoc3JjIF4gMHhmZikgJiBtMjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIgPSAoRlhfQllURSlkZXN0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZURzdCArPSBwRHN0LT5tX25TdHJpZGU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lU3JjICs9IG1fblN0cmlkZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1JFUExBQ0U6IHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoeXkgPSB5MDsgeXkgPCB5MTsgKyt5eSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UHRyID0gcExpbmVEc3QgKyAoeCA+PiAzKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUHRyID0gcExpbmVTcmM7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9IChkZXN0ICYgKDB4ZmYgPDwgczIpKSB8IChzcmMxID4+IHMxKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIrKyA9IChGWF9CWVRFKWRlc3Q7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4ID0geDAgKyA4Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgeHggPCB4MSAtIDg7IHh4ICs9IDgpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzAgPSBzcmMxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9ICpzcmNQdHIrKzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9ICgoKHNyYzAgPDwgOCkgfCBzcmMxKSA+PiBzMSkgJiAweGZmOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9IHNyYzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyKysgPSAoRlhfQllURSlkZXN0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMCA9IHNyYzE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNyY1B0ciAtIHBMaW5lU3JjIDwgbV9uU3RyaWRlKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gKCgoc3JjMCA8PCA4KSB8IHNyYzEpID4+IHMxKSAmIDB4ZmY7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAoc3JjICYgbTIpIHwgKGRlc3QgJiBtMSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyID0gKEZYX0JZVEUpZGVzdDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZVNyYyArPSBtX25TdHJpZGU7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBzd2l0Y2gob3ApIHsNCi0gICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOiB7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHl5ID0geTA7IHl5IDwgeTE7ICsreXkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFB0ciA9IHBMaW5lRHN0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNQdHIgPSBwTGluZVNyYyArICgteCA+PiAzKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9ICpzcmNQdHIrKzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeHggPSB4MDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHh4IDwgeDEgLSA4OyB4eCArPSA4KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gKmRlc3RQdHI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMwID0gc3JjMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMgPSAoKChzcmMwIDw8IDgpIHwgc3JjMSkgPj4gczEpICYgMHhmZjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgfD0gc3JjOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIrKyA9IChGWF9CWVRFKWRlc3Q7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMwID0gc3JjMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3JjUHRyIC0gcExpbmVTcmMgPCBtX25TdHJpZGUpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMgPSAoKChzcmMwIDw8IDgpIHwgc3JjMSkgPj4gczEpICYgMHhmZjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCB8PSBzcmMgJiBtMjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIgPSAoRlhfQllURSlkZXN0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZURzdCArPSBwRHN0LT5tX25TdHJpZGU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lU3JjICs9IG1fblN0cmlkZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDogew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcih5eSA9IHkwOyB5eSA8IHkxOyArK3l5KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQdHIgPSBwTGluZURzdDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUHRyID0gcExpbmVTcmMgKyAoLXggPj4gMyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4ID0geDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB4eCA8IHgxIC0gODsgeHggKz0gOCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMCA9IHNyYzE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gKCgoc3JjMCA8PCA4KSB8IHNyYzEpID4+IHMxKSAmIDB4ZmY7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICY9IHNyYzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyKysgPSAoRlhfQllURSlkZXN0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMCA9IHNyYzE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNyY1B0ciAtIHBMaW5lU3JjIDwgbV9uU3RyaWRlKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gKCgoc3JjMCA8PCA4KSB8IHNyYzEpID4+IHMxKSAmIDB4ZmY7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgJj0gc3JjIHwgbTE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyID0gKEZYX0JZVEUpZGVzdDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZVNyYyArPSBtX25TdHJpZGU7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6IHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IoeXkgPSB5MDsgeXkgPCB5MTsgKyt5eSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UHRyID0gcExpbmVEc3Q7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1B0ciA9IHBMaW5lU3JjICsgKC14ID4+IDMpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eCA9IHgwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgeHggPCB4MSAtIDg7IHh4ICs9IDgpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzAgPSBzcmMxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9ICpzcmNQdHIrKzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9ICgoKHNyYzAgPDwgOCkgfCBzcmMxKSA+PiBzMSkgJiAweGZmOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCBePSBzcmM7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0cisrID0gKEZYX0JZVEUpZGVzdDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gKmRlc3RQdHI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzAgPSBzcmMxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzcmNQdHIgLSBwTGluZVNyYyA8IG1fblN0cmlkZSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9ICpzcmNQdHIrKzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9ICgoKHNyYzAgPDwgOCkgfCBzcmMxKSA+PiBzMSkgJiAweGZmOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0IF49IHNyYyAmIG0yOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0ciA9IChGWF9CWVRFKWRlc3Q7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVTcmMgKz0gbV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjogew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcih5eSA9IHkwOyB5eSA8IHkxOyArK3l5KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQdHIgPSBwTGluZURzdDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUHRyID0gcExpbmVTcmMgKyAoLXggPj4gMyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4ID0geDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB4eCA8IHgxIC0gODsgeHggKz0gOCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMCA9IHNyYzE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gKCgoc3JjMCA8PCA4KSB8IHNyYzEpID4+IHMxKSAmIDB4ZmY7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0IF49IHNyYyBeIDB4ZmY7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0cisrID0gKEZYX0JZVEUpZGVzdDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gKmRlc3RQdHI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzAgPSBzcmMxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzcmNQdHIgLSBwTGluZVNyYyA8IG1fblN0cmlkZSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9ICpzcmNQdHIrKzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9ICgoKHNyYzAgPDwgOCkgfCBzcmMxKSA+PiBzMSkgJiAweGZmOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0IF49IChzcmMgXiAweGZmKSAmIG0yOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0ciA9IChGWF9CWVRFKWRlc3Q7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVTcmMgKz0gbV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfUkVQTEFDRTogew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcih5eSA9IHkwOyB5eSA8IHkxOyArK3l5KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQdHIgPSBwTGluZURzdDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUHRyID0gcExpbmVTcmMgKyAoLXggPj4gMyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4ID0geDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB4eCA8IHgxIC0gODsgeHggKz0gOCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMCA9IHNyYzE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gKCgoc3JjMCA8PCA4KSB8IHNyYzEpID4+IHMxKSAmIDB4ZmY7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gc3JjOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIrKyA9IChGWF9CWVRFKWRlc3Q7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMwID0gc3JjMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3JjUHRyIC0gcExpbmVTcmMgPCBtX25TdHJpZGUpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMgPSAoKChzcmMwIDw8IDgpIHwgc3JjMSkgPj4gczEpICYgMHhmZjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9IChzcmMgJiBtMikgfCAoZGVzdCAmIG0xKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIgPSAoRlhfQllURSlkZXN0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZURzdCArPSBwRHN0LT5tX25TdHJpZGU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lU3JjICs9IG1fblN0cmlkZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ0pCaWcyX0ltYWdlOjpjb21wb3NlRnJvbShGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBDSkJpZzJfSW1hZ2UgKnBTcmMsIEpCaWcyQ29tcG9zZU9wIG9wKQ0KLXsNCi0gICAgaWYgKCFtX3BEYXRhKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgcmV0dXJuIHBTcmMtPmNvbXBvc2VUbyh0aGlzLCB4LCB5LCBvcCk7DQotfQ0KLUZYX0JPT0wgQ0pCaWcyX0ltYWdlOjpjb21wb3NlRnJvbShGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBDSkJpZzJfSW1hZ2UgKnBTcmMsIEpCaWcyQ29tcG9zZU9wIG9wLCBjb25zdCBGWF9SRUNUKiBwU3JjUmVjdCkNCi17DQotICAgIGlmICghbV9wRGF0YSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHJldHVybiBwU3JjLT5jb21wb3NlVG8odGhpcywgeCwgeSwgb3AsIHBTcmNSZWN0KTsNCi19DQotQ0pCaWcyX0ltYWdlICpDSkJpZzJfSW1hZ2U6OnN1YkltYWdlX3Vub3B0KEZYX0lOVDMyIHgsIEZYX0lOVDMyIHksIEZYX0lOVDMyIHcsIEZYX0lOVDMyIGgpDQotew0KLSAgICBDSkJpZzJfSW1hZ2UgKnBJbWFnZTsNCi0gICAgRlhfSU5UMzIgaSwgajsNCi0gICAgSkJJRzJfQUxMT0MocEltYWdlLCBDSkJpZzJfSW1hZ2UodywgaCkpOw0KLSAgICBmb3IoaiA9IDA7IGogPCBoOyBqKyspIHsNCi0gICAgICAgIGZvcihpID0gMDsgaSA8IHc7IGkrKykgew0KLSAgICAgICAgICAgIHBJbWFnZS0+c2V0UGl4ZWwoaSwgaiwgZ2V0UGl4ZWwoeCArIGksIHkgKyBqKSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIHBJbWFnZTsNCi19DQotI2RlZmluZSBKQklHMl9HRVREV09SRChidWYpCSgoRlhfRFdPUkQpKCgoYnVmKVswXSA8PCAyNCkgfCAoKGJ1ZilbMV0gPDwgMTYpIHwgKChidWYpWzJdIDw8IDgpIHwgKGJ1ZilbM10pKQ0KLUNKQmlnMl9JbWFnZSAqQ0pCaWcyX0ltYWdlOjpzdWJJbWFnZShGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBGWF9JTlQzMiB3LCBGWF9JTlQzMiBoKQ0KLXsNCi0gICAgQ0pCaWcyX0ltYWdlICpwSW1hZ2U7DQotICAgIEZYX0lOVDMyIG0sIG4sIGo7DQotICAgIEZYX0JZVEUgKnBMaW5lU3JjLCAqcExpbmVEc3Q7DQotICAgIEZYX0RXT1JEIHdUbXA7DQotICAgIEZYX0JZVEUgKnBTcmMsICpwU3JjRW5kLCAqcERzdCwgKnBEc3RFbmQ7DQotICAgIGlmICh3ID09IDAgfHwgaCA9PSAwKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBKQklHMl9BTExPQyhwSW1hZ2UsIENKQmlnMl9JbWFnZSh3LCBoKSk7DQotICAgIGlmICghbV9wRGF0YSkgew0KLSAgICAgICAgcEltYWdlLT5maWxsKDApOw0KLSAgICAgICAgcmV0dXJuIHBJbWFnZTsNCi0gICAgfQ0KLSAgICBpZiAoIXBJbWFnZS0+bV9wRGF0YSkgew0KLSAgICAgICAgcmV0dXJuIHBJbWFnZTsNCi0gICAgfQ0KLSAgICBwTGluZVNyYyA9IG1fcERhdGEgKyBtX25TdHJpZGUgKiB5Ow0KLSAgICBwTGluZURzdCA9IHBJbWFnZS0+bV9wRGF0YTsNCi0gICAgbSA9ICh4ID4+IDUpIDw8IDI7DQotICAgIG4gPSB4ICYgMzE7DQotICAgIGlmKG4gPT0gMCkgew0KLSAgICAgICAgZm9yKGogPSAwOyBqIDwgaDsgaisrKSB7DQotICAgICAgICAgICAgcFNyYyA9IHBMaW5lU3JjICsgbTsNCi0gICAgICAgICAgICBwU3JjRW5kID0gcExpbmVTcmMgKyBtX25TdHJpZGU7DQotICAgICAgICAgICAgcERzdCA9IHBMaW5lRHN0Ow0KLSAgICAgICAgICAgIHBEc3RFbmQgPSBwTGluZURzdCArIHBJbWFnZS0+bV9uU3RyaWRlOw0KLSAgICAgICAgICAgIGZvcig7IHBEc3QgPCBwRHN0RW5kOyBwU3JjICs9IDQsIHBEc3QgKz0gNCkgew0KLSAgICAgICAgICAgICAgICAqKChGWF9EV09SRCAqKXBEc3QpID0gKigoRlhfRFdPUkQgKilwU3JjKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcExpbmVTcmMgKz0gbV9uU3RyaWRlOw0KLSAgICAgICAgICAgIHBMaW5lRHN0ICs9IHBJbWFnZS0+bV9uU3RyaWRlOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZm9yKGogPSAwOyBqIDwgaDsgaisrKSB7DQotICAgICAgICAgICAgcFNyYyA9IHBMaW5lU3JjICsgbTsNCi0gICAgICAgICAgICBwU3JjRW5kID0gcExpbmVTcmMgKyBtX25TdHJpZGU7DQotICAgICAgICAgICAgcERzdCA9IHBMaW5lRHN0Ow0KLSAgICAgICAgICAgIHBEc3RFbmQgPSBwTGluZURzdCArIHBJbWFnZS0+bV9uU3RyaWRlOw0KLSAgICAgICAgICAgIGZvcig7IHBEc3QgPCBwRHN0RW5kOyBwU3JjICs9IDQsIHBEc3QgKz0gNCkgew0KLSAgICAgICAgICAgICAgICBpZihwU3JjICsgNCA8IHBTcmNFbmQpIHsNCi0gICAgICAgICAgICAgICAgICAgIHdUbXAgPSAoSkJJRzJfR0VURFdPUkQocFNyYykgPDwgbikgfCAoSkJJRzJfR0VURFdPUkQocFNyYyArIDQpID4+ICgzMiAtIG4pKTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIHdUbXAgPSBKQklHMl9HRVREV09SRChwU3JjKSA8PCBuOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHBEc3RbMF0gPSAoRlhfQllURSkod1RtcCA+PiAyNCk7DQotICAgICAgICAgICAgICAgIHBEc3RbMV0gPSAoRlhfQllURSkod1RtcCA+PiAxNik7DQotICAgICAgICAgICAgICAgIHBEc3RbMl0gPSAoRlhfQllURSkod1RtcCA+PiA4KTsNCi0gICAgICAgICAgICAgICAgcERzdFszXSA9IChGWF9CWVRFKXdUbXA7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHBMaW5lU3JjICs9IG1fblN0cmlkZTsNCi0gICAgICAgICAgICBwTGluZURzdCArPSBwSW1hZ2UtPm1fblN0cmlkZTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gcEltYWdlOw0KLX0NCi12b2lkIENKQmlnMl9JbWFnZTo6ZXhwYW5kKEZYX0lOVDMyIGgsIEZYX0JPT0wgdikNCi17DQotICAgIGlmICghbV9wRGF0YSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fcERhdGEgPSAoRlhfQllURSopbV9wTW9kdWxlLT5KQmlnMl9SZWFsbG9jKG1fcERhdGEsIGggKiBtX25TdHJpZGUpOw0KLSAgICBpZihoID4gbV9uSGVpZ2h0KSB7DQotICAgICAgICBKQklHMl9tZW1zZXQobV9wRGF0YSArIG1fbkhlaWdodCAqIG1fblN0cmlkZSwgdiA/IDB4ZmYgOiAwLCAoaCAtIG1fbkhlaWdodCkqbV9uU3RyaWRlKTsNCi0gICAgfQ0KLSAgICBtX25IZWlnaHQgPSBoOw0KLX0NCi1GWF9CT09MIENKQmlnMl9JbWFnZTo6Y29tcG9zZVRvX29wdDIoQ0pCaWcyX0ltYWdlICpwRHN0LCBGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBKQmlnMkNvbXBvc2VPcCBvcCkNCi17DQotICAgIEZYX0lOVDMyIHhzMCwgeXMwLCB4czEsIHlzMSwgeGQwLCB5ZDAsIHhkMSwgeWQxLCB4eCwgeXksIHcsIGgsIG1pZGRsZUR3b3JkcywgbGluZUxlZnQ7DQotICAgIEZYX0RXT1JEIHMxLCBkMSwgZDIsIHNoaWZ0LCBzaGlmdDEsIHNoaWZ0MiwgdG1wLCB0bXAxLCB0bXAyLCBtYXNrTCwgbWFza1IsIG1hc2tNOw0KLSAgICBGWF9CWVRFICpsaW5lU3JjLCAqbGluZURzdCwgKnNwLCAqZHA7DQotICAgIGlmICghbV9wRGF0YSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmICh4IDwgLTEwNDg1NzYgfHwgeCA+IDEwNDg1NzYgfHwgeSA8IC0xMDQ4NTc2IHx8IHkgPiAxMDQ4NTc2KSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYoeSA8IDApIHsNCi0gICAgICAgIHlzMCA9IC15Ow0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgeXMwID0gMDsNCi0gICAgfQ0KLSAgICBpZih5ICsgbV9uSGVpZ2h0ID4gcERzdC0+bV9uSGVpZ2h0KSB7DQotICAgICAgICB5czEgPSBwRHN0LT5tX25IZWlnaHQgLSB5Ow0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgeXMxID0gbV9uSGVpZ2h0Ow0KLSAgICB9DQotICAgIGlmKHggPCAwKSB7DQotICAgICAgICB4czAgPSAteDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHhzMCA9IDA7DQotICAgIH0NCi0gICAgaWYoeCArIG1fbldpZHRoID4gcERzdC0+bV9uV2lkdGgpIHsNCi0gICAgICAgIHhzMSA9IHBEc3QtPm1fbldpZHRoIC0geDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHhzMSA9IG1fbldpZHRoOw0KLSAgICB9DQotICAgIGlmKCh5czAgPj0geXMxKSB8fCAoeHMwID49IHhzMSkpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIHcgPSB4czEgLSB4czA7DQotICAgIGggPSB5czEgLSB5czA7DQotICAgIGlmKHkgPCAwKSB7DQotICAgICAgICB5ZDAgPSAwOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgeWQwID0geTsNCi0gICAgfQ0KLSAgICBpZih4IDwgMCkgew0KLSAgICAgICAgeGQwID0gMDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHhkMCA9IHg7DQotICAgIH0NCi0gICAgeGQxID0geGQwICsgdzsNCi0gICAgeWQxID0geWQwICsgaDsNCi0gICAgZDEgPSB4ZDAgJiAzMTsNCi0gICAgZDIgPSB4ZDEgJiAzMTsNCi0gICAgczEgPSB4czAgJiAzMTsNCi0gICAgbWFza0wgPSAweGZmZmZmZmZmID4+IGQxOw0KLSAgICBtYXNrUiA9IDB4ZmZmZmZmZmYgPDwgKCgzMiAtICh4ZDEgJiAzMSkpICUgMzIpOw0KLSAgICBtYXNrTSA9IG1hc2tMICYgbWFza1I7DQotICAgIGxpbmVTcmMgPSBtX3BEYXRhICsgeXMwICogbV9uU3RyaWRlICsgKCh4czAgPj4gNSkgPDwgMik7DQotICAgIGxpbmVMZWZ0ID0gbV9uU3RyaWRlIC0gKCh4czAgPj4gNSkgPDwgMik7DQotICAgIGxpbmVEc3QgPSBwRHN0LT5tX3BEYXRhICsgeWQwICogcERzdC0+bV9uU3RyaWRlICsgKCh4ZDAgPj4gNSkgPDwgMik7DQotICAgIGlmKCh4ZDAgJiB+MzEpID09ICgoeGQxIC0gMSkgJiB+MzEpKSB7DQotICAgICAgICBpZigoeHMwICYgfjMxKSA9PSAoKHhzMSAtIDEpICYgfjMxKSkgew0KLSAgICAgICAgICAgIGlmKHMxID4gZDEpIHsNCi0gICAgICAgICAgICAgICAgc2hpZnQgPSBzMSAtIGQxOw0KLSAgICAgICAgICAgICAgICBmb3IoeXkgPSB5ZDA7IHl5IDwgeWQxOyB5eSsrKSB7DQotICAgICAgICAgICAgICAgICAgICB0bXAxID0gSkJJRzJfR0VURFdPUkQobGluZVNyYykgPDwgc2hpZnQ7DQotICAgICAgICAgICAgICAgICAgICB0bXAyID0gSkJJRzJfR0VURFdPUkQobGluZURzdCk7DQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2gob3ApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tNKSB8ICgodG1wMSB8IHRtcDIpICYgbWFza00pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfQU5EOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAoKHRtcDEgJiB0bXAyKSAmIG1hc2tNKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hPUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza00pIHwgKCh0bXAxIF4gdG1wMikgJiBtYXNrTSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAoKH4odG1wMSBeIHRtcDIpKSAmIG1hc2tNKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1JFUExBQ0U6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tNKSB8ICh0bXAxICYgbWFza00pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGxpbmVEc3RbMF0gPSAoRlhfQllURSkodG1wID4+IDI0KTsNCi0gICAgICAgICAgICAgICAgICAgIGxpbmVEc3RbMV0gPSAoRlhfQllURSkodG1wID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgICAgIGxpbmVEc3RbMl0gPSAoRlhfQllURSkodG1wID4+IDgpOw0KLSAgICAgICAgICAgICAgICAgICAgbGluZURzdFszXSA9IChGWF9CWVRFKXRtcDsNCi0gICAgICAgICAgICAgICAgICAgIGxpbmVTcmMgKz0gbV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICAgICAgbGluZURzdCArPSBwRHN0LT5tX25TdHJpZGU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBzaGlmdCA9IGQxIC0gczE7DQotICAgICAgICAgICAgICAgIGZvcih5eSA9IHlkMDsgeXkgPCB5ZDE7IHl5KyspIHsNCi0gICAgICAgICAgICAgICAgICAgIHRtcDEgPSBKQklHMl9HRVREV09SRChsaW5lU3JjKSA+PiBzaGlmdDsNCi0gICAgICAgICAgICAgICAgICAgIHRtcDIgPSBKQklHMl9HRVREV09SRChsaW5lRHN0KTsNCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaChvcCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9PUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza00pIHwgKCh0bXAxIHwgdG1wMikgJiBtYXNrTSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9BTkQ6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tNKSB8ICgodG1wMSAmIHRtcDIpICYgbWFza00pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE9SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAoKHRtcDEgXiB0bXAyKSAmIG1hc2tNKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hOT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tNKSB8ICgofih0bXAxIF4gdG1wMikpICYgbWFza00pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfUkVQTEFDRToNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza00pIHwgKHRtcDEgJiBtYXNrTSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgbGluZURzdFswXSA9IChGWF9CWVRFKSh0bXAgPj4gMjQpOw0KLSAgICAgICAgICAgICAgICAgICAgbGluZURzdFsxXSA9IChGWF9CWVRFKSh0bXAgPj4gMTYpOw0KLSAgICAgICAgICAgICAgICAgICAgbGluZURzdFsyXSA9IChGWF9CWVRFKSh0bXAgPj4gOCk7DQotICAgICAgICAgICAgICAgICAgICBsaW5lRHN0WzNdID0gKEZYX0JZVEUpdG1wOw0KLSAgICAgICAgICAgICAgICAgICAgbGluZVNyYyArPSBtX25TdHJpZGU7DQotICAgICAgICAgICAgICAgICAgICBsaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc2hpZnQxID0gczEgLSBkMTsNCi0gICAgICAgICAgICBzaGlmdDIgPSAzMiAtIHNoaWZ0MTsNCi0gICAgICAgICAgICBmb3IoeXkgPSB5ZDA7IHl5IDwgeWQxOyB5eSsrKSB7DQotICAgICAgICAgICAgICAgIHRtcDEgPSAoSkJJRzJfR0VURFdPUkQobGluZVNyYykgPDwgc2hpZnQxKSB8IChKQklHMl9HRVREV09SRChsaW5lU3JjICsgNCkgPj4gc2hpZnQyKTsNCi0gICAgICAgICAgICAgICAgdG1wMiA9IEpCSUcyX0dFVERXT1JEKGxpbmVEc3QpOw0KLSAgICAgICAgICAgICAgICBzd2l0Y2gob3ApIHsNCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9PUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAoKHRtcDEgfCB0bXAyKSAmIG1hc2tNKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9BTkQ6DQotICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza00pIHwgKCh0bXAxICYgdG1wMikgJiBtYXNrTSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE9SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tNKSB8ICgodG1wMSBeIHRtcDIpICYgbWFza00pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hOT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza00pIHwgKCh+KHRtcDEgXiB0bXAyKSkgJiBtYXNrTSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfUkVQTEFDRToNCi0gICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAodG1wMSAmIG1hc2tNKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBsaW5lRHN0WzBdID0gKEZYX0JZVEUpKHRtcCA+PiAyNCk7DQotICAgICAgICAgICAgICAgIGxpbmVEc3RbMV0gPSAoRlhfQllURSkodG1wID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgbGluZURzdFsyXSA9IChGWF9CWVRFKSh0bXAgPj4gOCk7DQotICAgICAgICAgICAgICAgIGxpbmVEc3RbM10gPSAoRlhfQllURSl0bXA7DQotICAgICAgICAgICAgICAgIGxpbmVTcmMgKz0gbV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICBsaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZihzMSA+IGQxKSB7DQotICAgICAgICAgICAgc2hpZnQxID0gczEgLSBkMTsNCi0gICAgICAgICAgICBzaGlmdDIgPSAzMiAtIHNoaWZ0MTsNCi0gICAgICAgICAgICBtaWRkbGVEd29yZHMgPSAoeGQxID4+IDUpIC0gKCh4ZDAgKyAzMSkgPj4gNSk7DQotICAgICAgICAgICAgZm9yKHl5ID0geWQwOyB5eSA8IHlkMTsgeXkrKykgew0KLSAgICAgICAgICAgICAgICBzcCA9IGxpbmVTcmM7DQotICAgICAgICAgICAgICAgIGRwID0gbGluZURzdDsNCi0gICAgICAgICAgICAgICAgaWYoZDEgIT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgdG1wMSA9IChKQklHMl9HRVREV09SRChzcCkgPDwgc2hpZnQxKSB8IChKQklHMl9HRVREV09SRChzcCArIDQpID4+IHNoaWZ0Mik7DQotICAgICAgICAgICAgICAgICAgICB0bXAyID0gSkJJRzJfR0VURFdPUkQoZHApOw0KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKG9wKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTCkgfCAoKHRtcDEgfCB0bXAyKSAmIG1hc2tMKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza0wpIHwgKCh0bXAxICYgdG1wMikgJiBtYXNrTCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICgodG1wMSBeIHRtcDIpICYgbWFza0wpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza0wpIHwgKCh+KHRtcDEgXiB0bXAyKSkgJiBtYXNrTCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTCkgfCAodG1wMSAmIG1hc2tMKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBkcFswXSA9IChGWF9CWVRFKSh0bXAgPj4gMjQpOw0KLSAgICAgICAgICAgICAgICAgICAgZHBbMV0gPSAoRlhfQllURSkodG1wID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgICAgIGRwWzJdID0gKEZYX0JZVEUpKHRtcCA+PiA4KTsNCi0gICAgICAgICAgICAgICAgICAgIGRwWzNdID0gKEZYX0JZVEUpdG1wOw0KLSAgICAgICAgICAgICAgICAgICAgc3AgKz0gNDsNCi0gICAgICAgICAgICAgICAgICAgIGRwICs9IDQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZm9yKHh4ID0gMDsgeHggPCBtaWRkbGVEd29yZHM7IHh4KyspIHsNCi0gICAgICAgICAgICAgICAgICAgIHRtcDEgPSAoSkJJRzJfR0VURFdPUkQoc3ApIDw8IHNoaWZ0MSkgfCAoSkJJRzJfR0VURFdPUkQoc3AgKyA0KSA+PiBzaGlmdDIpOw0KLSAgICAgICAgICAgICAgICAgICAgdG1wMiA9IEpCSUcyX0dFVERXT1JEKGRwKTsNCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaChvcCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9PUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wMSB8IHRtcDI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9BTkQ6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHRtcDEgJiB0bXAyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE9SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXAxIF4gdG1wMjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hOT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IH4odG1wMSBeIHRtcDIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfUkVQTEFDRToNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBkcFswXSA9IChGWF9CWVRFKSh0bXAgPj4gMjQpOw0KLSAgICAgICAgICAgICAgICAgICAgZHBbMV0gPSAoRlhfQllURSkodG1wID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgICAgIGRwWzJdID0gKEZYX0JZVEUpKHRtcCA+PiA4KTsNCi0gICAgICAgICAgICAgICAgICAgIGRwWzNdID0gKEZYX0JZVEUpdG1wOw0KLSAgICAgICAgICAgICAgICAgICAgc3AgKz0gNDsNCi0gICAgICAgICAgICAgICAgICAgIGRwICs9IDQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYoZDIgIT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgdG1wMSA9IChKQklHMl9HRVREV09SRChzcCkgPDwgc2hpZnQxKSB8ICgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzcCArIDQpIDwgbGluZVNyYyArIGxpbmVMZWZ0ID8gSkJJRzJfR0VURFdPUkQoc3AgKyA0KSA6IDApID4+IHNoaWZ0Mik7DQotICAgICAgICAgICAgICAgICAgICB0bXAyID0gSkJJRzJfR0VURFdPUkQoZHApOw0KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKG9wKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAoKHRtcDEgfCB0bXAyKSAmIG1hc2tSKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza1IpIHwgKCh0bXAxICYgdG1wMikgJiBtYXNrUik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tSKSB8ICgodG1wMSBeIHRtcDIpICYgbWFza1IpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza1IpIHwgKCh+KHRtcDEgXiB0bXAyKSkgJiBtYXNrUik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAodG1wMSAmIG1hc2tSKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBkcFswXSA9IChGWF9CWVRFKSh0bXAgPj4gMjQpOw0KLSAgICAgICAgICAgICAgICAgICAgZHBbMV0gPSAoRlhfQllURSkodG1wID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgICAgIGRwWzJdID0gKEZYX0JZVEUpKHRtcCA+PiA4KTsNCi0gICAgICAgICAgICAgICAgICAgIGRwWzNdID0gKEZYX0JZVEUpdG1wOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGxpbmVTcmMgKz0gbV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICBsaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2UgaWYoczEgPT0gZDEpIHsNCi0gICAgICAgICAgICBtaWRkbGVEd29yZHMgPSAoeGQxID4+IDUpIC0gKCh4ZDAgKyAzMSkgPj4gNSk7DQotICAgICAgICAgICAgZm9yKHl5ID0geWQwOyB5eSA8IHlkMTsgeXkrKykgew0KLSAgICAgICAgICAgICAgICBzcCA9IGxpbmVTcmM7DQotICAgICAgICAgICAgICAgIGRwID0gbGluZURzdDsNCi0gICAgICAgICAgICAgICAgaWYoZDEgIT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgdG1wMSA9IEpCSUcyX0dFVERXT1JEKHNwKTsNCi0gICAgICAgICAgICAgICAgICAgIHRtcDIgPSBKQklHMl9HRVREV09SRChkcCk7DQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2gob3ApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICgodG1wMSB8IHRtcDIpICYgbWFza0wpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfQU5EOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTCkgfCAoKHRtcDEgJiB0bXAyKSAmIG1hc2tMKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hPUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza0wpIHwgKCh0bXAxIF4gdG1wMikgJiBtYXNrTCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTCkgfCAoKH4odG1wMSBeIHRtcDIpKSAmIG1hc2tMKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1JFUExBQ0U6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICh0bXAxICYgbWFza0wpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGRwWzBdID0gKEZYX0JZVEUpKHRtcCA+PiAyNCk7DQotICAgICAgICAgICAgICAgICAgICBkcFsxXSA9IChGWF9CWVRFKSh0bXAgPj4gMTYpOw0KLSAgICAgICAgICAgICAgICAgICAgZHBbMl0gPSAoRlhfQllURSkodG1wID4+IDgpOw0KLSAgICAgICAgICAgICAgICAgICAgZHBbM10gPSAoRlhfQllURSl0bXA7DQotICAgICAgICAgICAgICAgICAgICBzcCArPSA0Ow0KLSAgICAgICAgICAgICAgICAgICAgZHAgKz0gNDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBmb3IoeHggPSAwOyB4eCA8IG1pZGRsZUR3b3JkczsgeHgrKykgew0KLSAgICAgICAgICAgICAgICAgICAgdG1wMSA9IEpCSUcyX0dFVERXT1JEKHNwKTsNCi0gICAgICAgICAgICAgICAgICAgIHRtcDIgPSBKQklHMl9HRVREV09SRChkcCk7DQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2gob3ApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHRtcDEgfCB0bXAyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfQU5EOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXAxICYgdG1wMjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hPUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wMSBeIHRtcDI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB+KHRtcDEgXiB0bXAyKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1JFUExBQ0U6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHRtcDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgZHBbMF0gPSAoRlhfQllURSkodG1wID4+IDI0KTsNCi0gICAgICAgICAgICAgICAgICAgIGRwWzFdID0gKEZYX0JZVEUpKHRtcCA+PiAxNik7DQotICAgICAgICAgICAgICAgICAgICBkcFsyXSA9IChGWF9CWVRFKSh0bXAgPj4gOCk7DQotICAgICAgICAgICAgICAgICAgICBkcFszXSA9IChGWF9CWVRFKXRtcDsNCi0gICAgICAgICAgICAgICAgICAgIHNwICs9IDQ7DQotICAgICAgICAgICAgICAgICAgICBkcCArPSA0Ow0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmKGQyICE9IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHRtcDEgPSBKQklHMl9HRVREV09SRChzcCk7DQotICAgICAgICAgICAgICAgICAgICB0bXAyID0gSkJJRzJfR0VURFdPUkQoZHApOw0KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKG9wKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAoKHRtcDEgfCB0bXAyKSAmIG1hc2tSKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza1IpIHwgKCh0bXAxICYgdG1wMikgJiBtYXNrUik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tSKSB8ICgodG1wMSBeIHRtcDIpICYgbWFza1IpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza1IpIHwgKCh+KHRtcDEgXiB0bXAyKSkgJiBtYXNrUik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAodG1wMSAmIG1hc2tSKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBkcFswXSA9IChGWF9CWVRFKSh0bXAgPj4gMjQpOw0KLSAgICAgICAgICAgICAgICAgICAgZHBbMV0gPSAoRlhfQllURSkodG1wID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgICAgIGRwWzJdID0gKEZYX0JZVEUpKHRtcCA+PiA4KTsNCi0gICAgICAgICAgICAgICAgICAgIGRwWzNdID0gKEZYX0JZVEUpdG1wOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGxpbmVTcmMgKz0gbV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICBsaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHNoaWZ0MSA9IGQxIC0gczE7DQotICAgICAgICAgICAgc2hpZnQyID0gMzIgLSBzaGlmdDE7DQotICAgICAgICAgICAgbWlkZGxlRHdvcmRzID0gKHhkMSA+PiA1KSAtICgoeGQwICsgMzEpID4+IDUpOw0KLSAgICAgICAgICAgIGZvcih5eSA9IHlkMDsgeXkgPCB5ZDE7IHl5KyspIHsNCi0gICAgICAgICAgICAgICAgc3AgPSBsaW5lU3JjOw0KLSAgICAgICAgICAgICAgICBkcCA9IGxpbmVEc3Q7DQotICAgICAgICAgICAgICAgIGlmKGQxICE9IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHRtcDEgPSBKQklHMl9HRVREV09SRChzcCkgPj4gc2hpZnQxOw0KLSAgICAgICAgICAgICAgICAgICAgdG1wMiA9IEpCSUcyX0dFVERXT1JEKGRwKTsNCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaChvcCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9PUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza0wpIHwgKCh0bXAxIHwgdG1wMikgJiBtYXNrTCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9BTkQ6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICgodG1wMSAmIHRtcDIpICYgbWFza0wpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE9SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTCkgfCAoKHRtcDEgXiB0bXAyKSAmIG1hc2tMKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hOT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICgofih0bXAxIF4gdG1wMikpICYgbWFza0wpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfUkVQTEFDRToNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza0wpIHwgKHRtcDEgJiBtYXNrTCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgZHBbMF0gPSAoRlhfQllURSkodG1wID4+IDI0KTsNCi0gICAgICAgICAgICAgICAgICAgIGRwWzFdID0gKEZYX0JZVEUpKHRtcCA+PiAxNik7DQotICAgICAgICAgICAgICAgICAgICBkcFsyXSA9IChGWF9CWVRFKSh0bXAgPj4gOCk7DQotICAgICAgICAgICAgICAgICAgICBkcFszXSA9IChGWF9CWVRFKXRtcDsNCi0gICAgICAgICAgICAgICAgICAgIGRwICs9IDQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZm9yKHh4ID0gMDsgeHggPCBtaWRkbGVEd29yZHM7IHh4KyspIHsNCi0gICAgICAgICAgICAgICAgICAgIHRtcDEgPSAoSkJJRzJfR0VURFdPUkQoc3ApIDw8IHNoaWZ0MikgfCAoKEpCSUcyX0dFVERXT1JEKHNwICsgNCkpID4+IHNoaWZ0MSk7DQotICAgICAgICAgICAgICAgICAgICB0bXAyID0gSkJJRzJfR0VURFdPUkQoZHApOw0KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKG9wKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXAxIHwgdG1wMjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wMSAmIHRtcDI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHRtcDEgXiB0bXAyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gfih0bXAxIF4gdG1wMik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGRwWzBdID0gKEZYX0JZVEUpKHRtcCA+PiAyNCk7DQotICAgICAgICAgICAgICAgICAgICBkcFsxXSA9IChGWF9CWVRFKSh0bXAgPj4gMTYpOw0KLSAgICAgICAgICAgICAgICAgICAgZHBbMl0gPSAoRlhfQllURSkodG1wID4+IDgpOw0KLSAgICAgICAgICAgICAgICAgICAgZHBbM10gPSAoRlhfQllURSl0bXA7DQotICAgICAgICAgICAgICAgICAgICBzcCArPSA0Ow0KLSAgICAgICAgICAgICAgICAgICAgZHAgKz0gNDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZihkMiAhPSAwKSB7DQotICAgICAgICAgICAgICAgICAgICB0bXAxID0gKEpCSUcyX0dFVERXT1JEKHNwKSA8PCBzaGlmdDIpIHwgKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHNwICsgNCkgPCBsaW5lU3JjICsgbGluZUxlZnQgPyBKQklHMl9HRVREV09SRChzcCArIDQpIDogMCkgPj4gc2hpZnQxKTsNCi0gICAgICAgICAgICAgICAgICAgIHRtcDIgPSBKQklHMl9HRVREV09SRChkcCk7DQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2gob3ApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tSKSB8ICgodG1wMSB8IHRtcDIpICYgbWFza1IpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfQU5EOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAoKHRtcDEgJiB0bXAyKSAmIG1hc2tSKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hPUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza1IpIHwgKCh0bXAxIF4gdG1wMikgJiBtYXNrUik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAoKH4odG1wMSBeIHRtcDIpKSAmIG1hc2tSKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1JFUExBQ0U6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tSKSB8ICh0bXAxICYgbWFza1IpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGRwWzBdID0gKEZYX0JZVEUpKHRtcCA+PiAyNCk7DQotICAgICAgICAgICAgICAgICAgICBkcFsxXSA9IChGWF9CWVRFKSh0bXAgPj4gMTYpOw0KLSAgICAgICAgICAgICAgICAgICAgZHBbMl0gPSAoRlhfQllURSkodG1wID4+IDgpOw0KLSAgICAgICAgICAgICAgICAgICAgZHBbM10gPSAoRlhfQllURSl0bXA7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbGluZVNyYyArPSBtX25TdHJpZGU7DQotICAgICAgICAgICAgICAgIGxpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gMTsNCi19DQotRlhfQk9PTCBDSkJpZzJfSW1hZ2U6OmNvbXBvc2VUb19vcHQyKENKQmlnMl9JbWFnZSAqcERzdCwgRlhfSU5UMzIgeCwgRlhfSU5UMzIgeSwgSkJpZzJDb21wb3NlT3Agb3AsIGNvbnN0IEZYX1JFQ1QqIHBTcmNSZWN0KQ0KLXsNCi0gICAgRlhfSU5UMzIgeHMwLCB5czAsIHhzMSwgeXMxLCB4ZDAsIHlkMCwgeGQxLCB5ZDEsIHh4LCB5eSwgdywgaCwgbWlkZGxlRHdvcmRzLCBsaW5lTGVmdDsNCi0gICAgRlhfRFdPUkQgczEsIGQxLCBkMiwgc2hpZnQsIHNoaWZ0MSwgc2hpZnQyLCB0bXAsIHRtcDEsIHRtcDIsIG1hc2tMLCBtYXNrUiwgbWFza007DQotICAgIEZYX0JZVEUgKmxpbmVTcmMsICpsaW5lRHN0LCAqc3AsICpkcDsNCi0gICAgRlhfSU5UMzIgc3csIHNoOw0KLSAgICBpZiAoIW1fcERhdGEpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoeCA8IC0xMDQ4NTc2IHx8IHggPiAxMDQ4NTc2IHx8IHkgPCAtMTA0ODU3NiB8fCB5ID4gMTA0ODU3Nikgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHN3ID0gcFNyY1JlY3QtPldpZHRoKCk7DQotICAgIHNoID0gcFNyY1JlY3QtPkhlaWdodCgpOw0KLSAgICBpZih5IDwgMCkgew0KLSAgICAgICAgeXMwID0gLXk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICB5czAgPSAwOw0KLSAgICB9DQotICAgIGlmKHkgKyBzaCA+IHBEc3QtPm1fbkhlaWdodCkgew0KLSAgICAgICAgeXMxID0gcERzdC0+bV9uSGVpZ2h0IC0geTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHlzMSA9IHNoOw0KLSAgICB9DQotICAgIGlmKHggPCAwKSB7DQotICAgICAgICB4czAgPSAteDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHhzMCA9IDA7DQotICAgIH0NCi0gICAgaWYoeCArIHN3ID4gcERzdC0+bV9uV2lkdGgpIHsNCi0gICAgICAgIHhzMSA9IHBEc3QtPm1fbldpZHRoIC0geDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHhzMSA9IHN3Ow0KLSAgICB9DQotICAgIGlmKCh5czAgPj0geXMxKSB8fCAoeHMwID49IHhzMSkpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIHcgPSB4czEgLSB4czA7DQotICAgIGggPSB5czEgLSB5czA7DQotICAgIGlmKHkgPCAwKSB7DQotICAgICAgICB5ZDAgPSAwOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgeWQwID0geTsNCi0gICAgfQ0KLSAgICBpZih4IDwgMCkgew0KLSAgICAgICAgeGQwID0gMDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHhkMCA9IHg7DQotICAgIH0NCi0gICAgeGQxID0geGQwICsgdzsNCi0gICAgeWQxID0geWQwICsgaDsNCi0gICAgZDEgPSB4ZDAgJiAzMTsNCi0gICAgZDIgPSB4ZDEgJiAzMTsNCi0gICAgczEgPSB4czAgJiAzMTsNCi0gICAgbWFza0wgPSAweGZmZmZmZmZmID4+IGQxOw0KLSAgICBtYXNrUiA9IDB4ZmZmZmZmZmYgPDwgKCgzMiAtICh4ZDEgJiAzMSkpICUgMzIpOw0KLSAgICBtYXNrTSA9IG1hc2tMICYgbWFza1I7DQotICAgIGxpbmVTcmMgPSBtX3BEYXRhICsgKHBTcmNSZWN0LT50b3AgKyB5czApICogbV9uU3RyaWRlICsgKCgoeHMwICsgcFNyY1JlY3QtPmxlZnQpID4+IDUpIDw8IDIpOw0KLSAgICBsaW5lTGVmdCA9IG1fblN0cmlkZSAtICgoeHMwID4+IDUpIDw8IDIpOw0KLSAgICBsaW5lRHN0ID0gcERzdC0+bV9wRGF0YSArIHlkMCAqIHBEc3QtPm1fblN0cmlkZSArICgoeGQwID4+IDUpIDw8IDIpOw0KLSAgICBpZigoeGQwICYgfjMxKSA9PSAoKHhkMSAtIDEpICYgfjMxKSkgew0KLSAgICAgICAgaWYoKHhzMCAmIH4zMSkgPT0gKCh4czEgLSAxKSAmIH4zMSkpIHsNCi0gICAgICAgICAgICBpZihzMSA+IGQxKSB7DQotICAgICAgICAgICAgICAgIHNoaWZ0ID0gczEgLSBkMTsNCi0gICAgICAgICAgICAgICAgZm9yKHl5ID0geWQwOyB5eSA8IHlkMTsgeXkrKykgew0KLSAgICAgICAgICAgICAgICAgICAgdG1wMSA9IEpCSUcyX0dFVERXT1JEKGxpbmVTcmMpIDw8IHNoaWZ0Ow0KLSAgICAgICAgICAgICAgICAgICAgdG1wMiA9IEpCSUcyX0dFVERXT1JEKGxpbmVEc3QpOw0KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKG9wKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAoKHRtcDEgfCB0bXAyKSAmIG1hc2tNKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza00pIHwgKCh0bXAxICYgdG1wMikgJiBtYXNrTSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tNKSB8ICgodG1wMSBeIHRtcDIpICYgbWFza00pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza00pIHwgKCh+KHRtcDEgXiB0bXAyKSkgJiBtYXNrTSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAodG1wMSAmIG1hc2tNKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBsaW5lRHN0WzBdID0gKEZYX0JZVEUpKHRtcCA+PiAyNCk7DQotICAgICAgICAgICAgICAgICAgICBsaW5lRHN0WzFdID0gKEZYX0JZVEUpKHRtcCA+PiAxNik7DQotICAgICAgICAgICAgICAgICAgICBsaW5lRHN0WzJdID0gKEZYX0JZVEUpKHRtcCA+PiA4KTsNCi0gICAgICAgICAgICAgICAgICAgIGxpbmVEc3RbM10gPSAoRlhfQllURSl0bXA7DQotICAgICAgICAgICAgICAgICAgICBsaW5lU3JjICs9IG1fblN0cmlkZTsNCi0gICAgICAgICAgICAgICAgICAgIGxpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgc2hpZnQgPSBkMSAtIHMxOw0KLSAgICAgICAgICAgICAgICBmb3IoeXkgPSB5ZDA7IHl5IDwgeWQxOyB5eSsrKSB7DQotICAgICAgICAgICAgICAgICAgICB0bXAxID0gSkJJRzJfR0VURFdPUkQobGluZVNyYykgPj4gc2hpZnQ7DQotICAgICAgICAgICAgICAgICAgICB0bXAyID0gSkJJRzJfR0VURFdPUkQobGluZURzdCk7DQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2gob3ApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tNKSB8ICgodG1wMSB8IHRtcDIpICYgbWFza00pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfQU5EOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAoKHRtcDEgJiB0bXAyKSAmIG1hc2tNKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hPUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza00pIHwgKCh0bXAxIF4gdG1wMikgJiBtYXNrTSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAoKH4odG1wMSBeIHRtcDIpKSAmIG1hc2tNKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1JFUExBQ0U6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tNKSB8ICh0bXAxICYgbWFza00pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGxpbmVEc3RbMF0gPSAoRlhfQllURSkodG1wID4+IDI0KTsNCi0gICAgICAgICAgICAgICAgICAgIGxpbmVEc3RbMV0gPSAoRlhfQllURSkodG1wID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgICAgIGxpbmVEc3RbMl0gPSAoRlhfQllURSkodG1wID4+IDgpOw0KLSAgICAgICAgICAgICAgICAgICAgbGluZURzdFszXSA9IChGWF9CWVRFKXRtcDsNCi0gICAgICAgICAgICAgICAgICAgIGxpbmVTcmMgKz0gbV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICAgICAgbGluZURzdCArPSBwRHN0LT5tX25TdHJpZGU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHNoaWZ0MSA9IHMxIC0gZDE7DQotICAgICAgICAgICAgc2hpZnQyID0gMzIgLSBzaGlmdDE7DQotICAgICAgICAgICAgZm9yKHl5ID0geWQwOyB5eSA8IHlkMTsgeXkrKykgew0KLSAgICAgICAgICAgICAgICB0bXAxID0gKEpCSUcyX0dFVERXT1JEKGxpbmVTcmMpIDw8IHNoaWZ0MSkgfCAoSkJJRzJfR0VURFdPUkQobGluZVNyYyArIDQpID4+IHNoaWZ0Mik7DQotICAgICAgICAgICAgICAgIHRtcDIgPSBKQklHMl9HRVREV09SRChsaW5lRHN0KTsNCi0gICAgICAgICAgICAgICAgc3dpdGNoKG9wKSB7DQotICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza00pIHwgKCh0bXAxIHwgdG1wMikgJiBtYXNrTSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfQU5EOg0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tNKSB8ICgodG1wMSAmIHRtcDIpICYgbWFza00pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hPUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAoKHRtcDEgXiB0bXAyKSAmIG1hc2tNKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tNKSB8ICgofih0bXAxIF4gdG1wMikpICYgbWFza00pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1JFUExBQ0U6DQotICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza00pIHwgKHRtcDEgJiBtYXNrTSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbGluZURzdFswXSA9IChGWF9CWVRFKSh0bXAgPj4gMjQpOw0KLSAgICAgICAgICAgICAgICBsaW5lRHN0WzFdID0gKEZYX0JZVEUpKHRtcCA+PiAxNik7DQotICAgICAgICAgICAgICAgIGxpbmVEc3RbMl0gPSAoRlhfQllURSkodG1wID4+IDgpOw0KLSAgICAgICAgICAgICAgICBsaW5lRHN0WzNdID0gKEZYX0JZVEUpdG1wOw0KLSAgICAgICAgICAgICAgICBsaW5lU3JjICs9IG1fblN0cmlkZTsNCi0gICAgICAgICAgICAgICAgbGluZURzdCArPSBwRHN0LT5tX25TdHJpZGU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYoczEgPiBkMSkgew0KLSAgICAgICAgICAgIHNoaWZ0MSA9IHMxIC0gZDE7DQotICAgICAgICAgICAgc2hpZnQyID0gMzIgLSBzaGlmdDE7DQotICAgICAgICAgICAgbWlkZGxlRHdvcmRzID0gKHhkMSA+PiA1KSAtICgoeGQwICsgMzEpID4+IDUpOw0KLSAgICAgICAgICAgIGZvcih5eSA9IHlkMDsgeXkgPCB5ZDE7IHl5KyspIHsNCi0gICAgICAgICAgICAgICAgc3AgPSBsaW5lU3JjOw0KLSAgICAgICAgICAgICAgICBkcCA9IGxpbmVEc3Q7DQotICAgICAgICAgICAgICAgIGlmKGQxICE9IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHRtcDEgPSAoSkJJRzJfR0VURFdPUkQoc3ApIDw8IHNoaWZ0MSkgfCAoSkJJRzJfR0VURFdPUkQoc3AgKyA0KSA+PiBzaGlmdDIpOw0KLSAgICAgICAgICAgICAgICAgICAgdG1wMiA9IEpCSUcyX0dFVERXT1JEKGRwKTsNCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaChvcCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9PUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza0wpIHwgKCh0bXAxIHwgdG1wMikgJiBtYXNrTCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9BTkQ6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICgodG1wMSAmIHRtcDIpICYgbWFza0wpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE9SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTCkgfCAoKHRtcDEgXiB0bXAyKSAmIG1hc2tMKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hOT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICgofih0bXAxIF4gdG1wMikpICYgbWFza0wpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfUkVQTEFDRToNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza0wpIHwgKHRtcDEgJiBtYXNrTCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgZHBbMF0gPSAoRlhfQllURSkodG1wID4+IDI0KTsNCi0gICAgICAgICAgICAgICAgICAgIGRwWzFdID0gKEZYX0JZVEUpKHRtcCA+PiAxNik7DQotICAgICAgICAgICAgICAgICAgICBkcFsyXSA9IChGWF9CWVRFKSh0bXAgPj4gOCk7DQotICAgICAgICAgICAgICAgICAgICBkcFszXSA9IChGWF9CWVRFKXRtcDsNCi0gICAgICAgICAgICAgICAgICAgIHNwICs9IDQ7DQotICAgICAgICAgICAgICAgICAgICBkcCArPSA0Ow0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGZvcih4eCA9IDA7IHh4IDwgbWlkZGxlRHdvcmRzOyB4eCsrKSB7DQotICAgICAgICAgICAgICAgICAgICB0bXAxID0gKEpCSUcyX0dFVERXT1JEKHNwKSA8PCBzaGlmdDEpIHwgKEpCSUcyX0dFVERXT1JEKHNwICsgNCkgPj4gc2hpZnQyKTsNCi0gICAgICAgICAgICAgICAgICAgIHRtcDIgPSBKQklHMl9HRVREV09SRChkcCk7DQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2gob3ApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHRtcDEgfCB0bXAyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfQU5EOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXAxICYgdG1wMjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hPUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wMSBeIHRtcDI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB+KHRtcDEgXiB0bXAyKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1JFUExBQ0U6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHRtcDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgZHBbMF0gPSAoRlhfQllURSkodG1wID4+IDI0KTsNCi0gICAgICAgICAgICAgICAgICAgIGRwWzFdID0gKEZYX0JZVEUpKHRtcCA+PiAxNik7DQotICAgICAgICAgICAgICAgICAgICBkcFsyXSA9IChGWF9CWVRFKSh0bXAgPj4gOCk7DQotICAgICAgICAgICAgICAgICAgICBkcFszXSA9IChGWF9CWVRFKXRtcDsNCi0gICAgICAgICAgICAgICAgICAgIHNwICs9IDQ7DQotICAgICAgICAgICAgICAgICAgICBkcCArPSA0Ow0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmKGQyICE9IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHRtcDEgPSAoSkJJRzJfR0VURFdPUkQoc3ApIDw8IHNoaWZ0MSkgfCAoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoc3AgKyA0KSA8IGxpbmVTcmMgKyBsaW5lTGVmdCA/IEpCSUcyX0dFVERXT1JEKHNwICsgNCkgOiAwKSA+PiBzaGlmdDIpOw0KLSAgICAgICAgICAgICAgICAgICAgdG1wMiA9IEpCSUcyX0dFVERXT1JEKGRwKTsNCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaChvcCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9PUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza1IpIHwgKCh0bXAxIHwgdG1wMikgJiBtYXNrUik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9BTkQ6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tSKSB8ICgodG1wMSAmIHRtcDIpICYgbWFza1IpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE9SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAoKHRtcDEgXiB0bXAyKSAmIG1hc2tSKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hOT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tSKSB8ICgofih0bXAxIF4gdG1wMikpICYgbWFza1IpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfUkVQTEFDRToNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza1IpIHwgKHRtcDEgJiBtYXNrUik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgZHBbMF0gPSAoRlhfQllURSkodG1wID4+IDI0KTsNCi0gICAgICAgICAgICAgICAgICAgIGRwWzFdID0gKEZYX0JZVEUpKHRtcCA+PiAxNik7DQotICAgICAgICAgICAgICAgICAgICBkcFsyXSA9IChGWF9CWVRFKSh0bXAgPj4gOCk7DQotICAgICAgICAgICAgICAgICAgICBkcFszXSA9IChGWF9CWVRFKXRtcDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBsaW5lU3JjICs9IG1fblN0cmlkZTsNCi0gICAgICAgICAgICAgICAgbGluZURzdCArPSBwRHN0LT5tX25TdHJpZGU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIGlmKHMxID09IGQxKSB7DQotICAgICAgICAgICAgbWlkZGxlRHdvcmRzID0gKHhkMSA+PiA1KSAtICgoeGQwICsgMzEpID4+IDUpOw0KLSAgICAgICAgICAgIGZvcih5eSA9IHlkMDsgeXkgPCB5ZDE7IHl5KyspIHsNCi0gICAgICAgICAgICAgICAgc3AgPSBsaW5lU3JjOw0KLSAgICAgICAgICAgICAgICBkcCA9IGxpbmVEc3Q7DQotICAgICAgICAgICAgICAgIGlmKGQxICE9IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIHRtcDEgPSBKQklHMl9HRVREV09SRChzcCk7DQotICAgICAgICAgICAgICAgICAgICB0bXAyID0gSkJJRzJfR0VURFdPUkQoZHApOw0KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKG9wKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTCkgfCAoKHRtcDEgfCB0bXAyKSAmIG1hc2tMKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza0wpIHwgKCh0bXAxICYgdG1wMikgJiBtYXNrTCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICgodG1wMSBeIHRtcDIpICYgbWFza0wpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza0wpIHwgKCh+KHRtcDEgXiB0bXAyKSkgJiBtYXNrTCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTCkgfCAodG1wMSAmIG1hc2tMKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBkcFswXSA9IChGWF9CWVRFKSh0bXAgPj4gMjQpOw0KLSAgICAgICAgICAgICAgICAgICAgZHBbMV0gPSAoRlhfQllURSkodG1wID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgICAgIGRwWzJdID0gKEZYX0JZVEUpKHRtcCA+PiA4KTsNCi0gICAgICAgICAgICAgICAgICAgIGRwWzNdID0gKEZYX0JZVEUpdG1wOw0KLSAgICAgICAgICAgICAgICAgICAgc3AgKz0gNDsNCi0gICAgICAgICAgICAgICAgICAgIGRwICs9IDQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZm9yKHh4ID0gMDsgeHggPCBtaWRkbGVEd29yZHM7IHh4KyspIHsNCi0gICAgICAgICAgICAgICAgICAgIHRtcDEgPSBKQklHMl9HRVREV09SRChzcCk7DQotICAgICAgICAgICAgICAgICAgICB0bXAyID0gSkJJRzJfR0VURFdPUkQoZHApOw0KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKG9wKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXAxIHwgdG1wMjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wMSAmIHRtcDI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHRtcDEgXiB0bXAyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gfih0bXAxIF4gdG1wMik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGRwWzBdID0gKEZYX0JZVEUpKHRtcCA+PiAyNCk7DQotICAgICAgICAgICAgICAgICAgICBkcFsxXSA9IChGWF9CWVRFKSh0bXAgPj4gMTYpOw0KLSAgICAgICAgICAgICAgICAgICAgZHBbMl0gPSAoRlhfQllURSkodG1wID4+IDgpOw0KLSAgICAgICAgICAgICAgICAgICAgZHBbM10gPSAoRlhfQllURSl0bXA7DQotICAgICAgICAgICAgICAgICAgICBzcCArPSA0Ow0KLSAgICAgICAgICAgICAgICAgICAgZHAgKz0gNDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZihkMiAhPSAwKSB7DQotICAgICAgICAgICAgICAgICAgICB0bXAxID0gSkJJRzJfR0VURFdPUkQoc3ApOw0KLSAgICAgICAgICAgICAgICAgICAgdG1wMiA9IEpCSUcyX0dFVERXT1JEKGRwKTsNCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaChvcCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9PUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza1IpIHwgKCh0bXAxIHwgdG1wMikgJiBtYXNrUik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9BTkQ6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tSKSB8ICgodG1wMSAmIHRtcDIpICYgbWFza1IpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE9SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAoKHRtcDEgXiB0bXAyKSAmIG1hc2tSKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hOT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tSKSB8ICgofih0bXAxIF4gdG1wMikpICYgbWFza1IpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfUkVQTEFDRToNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza1IpIHwgKHRtcDEgJiBtYXNrUik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgZHBbMF0gPSAoRlhfQllURSkodG1wID4+IDI0KTsNCi0gICAgICAgICAgICAgICAgICAgIGRwWzFdID0gKEZYX0JZVEUpKHRtcCA+PiAxNik7DQotICAgICAgICAgICAgICAgICAgICBkcFsyXSA9IChGWF9CWVRFKSh0bXAgPj4gOCk7DQotICAgICAgICAgICAgICAgICAgICBkcFszXSA9IChGWF9CWVRFKXRtcDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBsaW5lU3JjICs9IG1fblN0cmlkZTsNCi0gICAgICAgICAgICAgICAgbGluZURzdCArPSBwRHN0LT5tX25TdHJpZGU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBzaGlmdDEgPSBkMSAtIHMxOw0KLSAgICAgICAgICAgIHNoaWZ0MiA9IDMyIC0gc2hpZnQxOw0KLSAgICAgICAgICAgIG1pZGRsZUR3b3JkcyA9ICh4ZDEgPj4gNSkgLSAoKHhkMCArIDMxKSA+PiA1KTsNCi0gICAgICAgICAgICBmb3IoeXkgPSB5ZDA7IHl5IDwgeWQxOyB5eSsrKSB7DQotICAgICAgICAgICAgICAgIHNwID0gbGluZVNyYzsNCi0gICAgICAgICAgICAgICAgZHAgPSBsaW5lRHN0Ow0KLSAgICAgICAgICAgICAgICBpZihkMSAhPSAwKSB7DQotICAgICAgICAgICAgICAgICAgICB0bXAxID0gSkJJRzJfR0VURFdPUkQoc3ApID4+IHNoaWZ0MTsNCi0gICAgICAgICAgICAgICAgICAgIHRtcDIgPSBKQklHMl9HRVREV09SRChkcCk7DQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2gob3ApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICgodG1wMSB8IHRtcDIpICYgbWFza0wpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfQU5EOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTCkgfCAoKHRtcDEgJiB0bXAyKSAmIG1hc2tMKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hPUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza0wpIHwgKCh0bXAxIF4gdG1wMikgJiBtYXNrTCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTCkgfCAoKH4odG1wMSBeIHRtcDIpKSAmIG1hc2tMKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1JFUExBQ0U6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICh0bXAxICYgbWFza0wpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGRwWzBdID0gKEZYX0JZVEUpKHRtcCA+PiAyNCk7DQotICAgICAgICAgICAgICAgICAgICBkcFsxXSA9IChGWF9CWVRFKSh0bXAgPj4gMTYpOw0KLSAgICAgICAgICAgICAgICAgICAgZHBbMl0gPSAoRlhfQllURSkodG1wID4+IDgpOw0KLSAgICAgICAgICAgICAgICAgICAgZHBbM10gPSAoRlhfQllURSl0bXA7DQotICAgICAgICAgICAgICAgICAgICBkcCArPSA0Ow0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGZvcih4eCA9IDA7IHh4IDwgbWlkZGxlRHdvcmRzOyB4eCsrKSB7DQotICAgICAgICAgICAgICAgICAgICB0bXAxID0gKEpCSUcyX0dFVERXT1JEKHNwKSA8PCBzaGlmdDIpIHwgKChKQklHMl9HRVREV09SRChzcCArIDQpKSA+PiBzaGlmdDEpOw0KLSAgICAgICAgICAgICAgICAgICAgdG1wMiA9IEpCSUcyX0dFVERXT1JEKGRwKTsNCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaChvcCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9PUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wMSB8IHRtcDI7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9BTkQ6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHRtcDEgJiB0bXAyOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE9SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXAxIF4gdG1wMjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hOT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IH4odG1wMSBeIHRtcDIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfUkVQTEFDRToNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBkcFswXSA9IChGWF9CWVRFKSh0bXAgPj4gMjQpOw0KLSAgICAgICAgICAgICAgICAgICAgZHBbMV0gPSAoRlhfQllURSkodG1wID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgICAgIGRwWzJdID0gKEZYX0JZVEUpKHRtcCA+PiA4KTsNCi0gICAgICAgICAgICAgICAgICAgIGRwWzNdID0gKEZYX0JZVEUpdG1wOw0KLSAgICAgICAgICAgICAgICAgICAgc3AgKz0gNDsNCi0gICAgICAgICAgICAgICAgICAgIGRwICs9IDQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYoZDIgIT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgdG1wMSA9IChKQklHMl9HRVREV09SRChzcCkgPDwgc2hpZnQyKSB8ICgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzcCArIDQpIDwgbGluZVNyYyArIGxpbmVMZWZ0ID8gSkJJRzJfR0VURFdPUkQoc3AgKyA0KSA6IDApID4+IHNoaWZ0MSk7DQotICAgICAgICAgICAgICAgICAgICB0bXAyID0gSkJJRzJfR0VURFdPUkQoZHApOw0KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKG9wKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAoKHRtcDEgfCB0bXAyKSAmIG1hc2tSKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza1IpIHwgKCh0bXAxICYgdG1wMikgJiBtYXNrUik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tSKSB8ICgodG1wMSBeIHRtcDIpICYgbWFza1IpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza1IpIHwgKCh+KHRtcDEgXiB0bXAyKSkgJiBtYXNrUik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAodG1wMSAmIG1hc2tSKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBkcFswXSA9IChGWF9CWVRFKSh0bXAgPj4gMjQpOw0KLSAgICAgICAgICAgICAgICAgICAgZHBbMV0gPSAoRlhfQllURSkodG1wID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgICAgIGRwWzJdID0gKEZYX0JZVEUpKHRtcCA+PiA4KTsNCi0gICAgICAgICAgICAgICAgICAgIGRwWzNdID0gKEZYX0JZVEUpdG1wOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGxpbmVTcmMgKz0gbV9uU3RyaWRlOw0KLSAgICAgICAgICAgICAgICBsaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIDE7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICJKQmlnMl9JbWFnZS5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfYmFzaWMuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2Nvb3JkaW5hdGVzLmgiCisjaW5jbHVkZSA8bGltaXRzLmg+CitDSkJpZzJfSW1hZ2U6OkNKQmlnMl9JbWFnZShGWF9JTlQzMiB3LCBGWF9JTlQzMiBoKQoreworICAgIG1fbldpZHRoCT0gdzsKKyAgICBtX25IZWlnaHQJPSBoOworICAgIGlmIChtX25XaWR0aCA8PSAwIHx8IG1fbkhlaWdodCA8PSAwIHx8IG1fbldpZHRoID4gSU5UX01BWCAtIDMxKSB7CisgICAgICAgIG1fcERhdGEgPSBOVUxMOworICAgICAgICBtX2JOZWVkRnJlZSA9IEZBTFNFOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fblN0cmlkZSAgPSAoKHcgKyAzMSkgPj4gNSkgPDwgMjsKKyAgICBpZiAobV9uU3RyaWRlICogbV9uSGVpZ2h0ID4gMCAmJiAxMDQ4NTc2MDAgLyAoaW50KW1fblN0cmlkZSA+IG1fbkhlaWdodCkgeworICAgICAgICBtX3BEYXRhID0gKEZYX0JZVEUgKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIobV9uU3RyaWRlLCBtX25IZWlnaHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcERhdGEgPSBOVUxMOworICAgIH0KKyAgICBtX2JOZWVkRnJlZSA9IFRSVUU7Cit9CitDSkJpZzJfSW1hZ2U6OkNKQmlnMl9JbWFnZShGWF9JTlQzMiB3LCBGWF9JTlQzMiBoLCBGWF9JTlQzMiBzdHJpZGUsIEZYX0JZVEUqcEJ1ZikKK3sKKyAgICBtX25XaWR0aCA9IHc7CisgICAgbV9uSGVpZ2h0ID0gaDsKKyAgICBtX25TdHJpZGUgPSBzdHJpZGU7CisgICAgbV9wRGF0YSA9IHBCdWY7CisgICAgbV9iTmVlZEZyZWUgPSBGQUxTRTsKK30KK0NKQmlnMl9JbWFnZTo6Q0pCaWcyX0ltYWdlKENKQmlnMl9JbWFnZSAmaW0pCit7CisgICAgbV9wTW9kdWxlID0gaW0ubV9wTW9kdWxlOworICAgIG1fbldpZHRoCT0gaW0ubV9uV2lkdGg7CisgICAgbV9uSGVpZ2h0CT0gaW0ubV9uSGVpZ2h0OworICAgIG1fblN0cmlkZQk9IGltLm1fblN0cmlkZTsKKyAgICBpZiAoaW0ubV9wRGF0YSkgeworICAgICAgICBtX3BEYXRhID0gKEZYX0JZVEUqKW1fcE1vZHVsZS0+SkJpZzJfTWFsbG9jMihtX25TdHJpZGUsIG1fbkhlaWdodCk7CisgICAgICAgIEpCSUcyX21lbWNweShtX3BEYXRhLCBpbS5tX3BEYXRhLCBtX25TdHJpZGUgKiBtX25IZWlnaHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcERhdGEgPSBOVUxMOworICAgIH0KKyAgICBtX2JOZWVkRnJlZSA9IFRSVUU7Cit9CitDSkJpZzJfSW1hZ2U6On5DSkJpZzJfSW1hZ2UoKQoreworICAgIGlmKG1fYk5lZWRGcmVlICYmIG1fcERhdGEpIHsKKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKG1fcERhdGEpOworICAgIH0KK30KK0ZYX0JPT0wgQ0pCaWcyX0ltYWdlOjpnZXRQaXhlbChGWF9JTlQzMiB4LCBGWF9JTlQzMiB5KQoreworICAgIGlmICghbV9wRGF0YSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgRlhfSU5UMzIgbSwgbjsKKyAgICBpZih4IDwgMCB8fCB4ID49IG1fbldpZHRoKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZih5IDwgMCB8fCB5ID49IG1fbkhlaWdodCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgbSA9IHkgKiBtX25TdHJpZGUgKyAoeCA+PiAzKTsKKyAgICBuID0geCAmIDc7CisgICAgcmV0dXJuICgobV9wRGF0YVttXSA+PiAoNyAtIG4pKSAmIDEpOworfQorCitGWF9JTlQzMiBDSkJpZzJfSW1hZ2U6OnNldFBpeGVsKEZYX0lOVDMyIHgsIEZYX0lOVDMyIHksIEZYX0JPT0wgdikKK3sKKyAgICBpZiAoIW1fcERhdGEpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEZYX0lOVDMyIG0sIG47CisgICAgaWYoeCA8IDAgfHwgeCA+PSBtX25XaWR0aCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYoeSA8IDAgfHwgeSA+PSBtX25IZWlnaHQpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIG0gPSB5ICogbV9uU3RyaWRlICsgKHggPj4gMyk7CisgICAgbiA9IHggJiA3OworICAgIGlmKHYpIHsKKyAgICAgICAgbV9wRGF0YVttXSB8PSAxIDw8ICg3IC0gbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wRGF0YVttXSAmPSB+KDEgPDwgKDcgLSBuKSk7CisgICAgfQorICAgIHJldHVybiAxOworfQordm9pZCBDSkJpZzJfSW1hZ2U6OmNvcHlMaW5lKEZYX0lOVDMyIGhUbywgRlhfSU5UMzIgaEZyb20pCit7CisgICAgaWYgKCFtX3BEYXRhKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYoaEZyb20gPCAwIHx8IGhGcm9tID49IG1fbkhlaWdodCkgeworICAgICAgICBKQklHMl9tZW1zZXQobV9wRGF0YSArIGhUbyAqIG1fblN0cmlkZSwgMCwgbV9uU3RyaWRlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBKQklHMl9tZW1jcHkobV9wRGF0YSArIGhUbyAqIG1fblN0cmlkZSwgbV9wRGF0YSArIGhGcm9tICogbV9uU3RyaWRlLCBtX25TdHJpZGUpOworICAgIH0KK30KK3ZvaWQgQ0pCaWcyX0ltYWdlOjpmaWxsKEZYX0JPT0wgdikKK3sKKyAgICBpZiAoIW1fcERhdGEpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBKQklHMl9tZW1zZXQobV9wRGF0YSwgdiA/IDB4ZmYgOiAwLCBtX25TdHJpZGUgKiBtX25IZWlnaHQpOworfQorRlhfQk9PTCBDSkJpZzJfSW1hZ2U6OmNvbXBvc2VUbyhDSkJpZzJfSW1hZ2UgKnBEc3QsIEZYX0lOVDMyIHgsIEZYX0lOVDMyIHksIEpCaWcyQ29tcG9zZU9wIG9wKQoreworICAgIGlmICghbV9wRGF0YSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBjb21wb3NlVG9fb3B0MihwRHN0LCB4LCB5LCBvcCk7Cit9CitGWF9CT09MIENKQmlnMl9JbWFnZTo6Y29tcG9zZVRvKENKQmlnMl9JbWFnZSAqcERzdCwgRlhfSU5UMzIgeCwgRlhfSU5UMzIgeSwgSkJpZzJDb21wb3NlT3Agb3AsIGNvbnN0IEZYX1JFQ1QqIHBTcmNSZWN0KQoreworICAgIGlmICghbV9wRGF0YSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChOVUxMID09IHBTcmNSZWN0IHx8ICpwU3JjUmVjdCA9PSBGWF9SRUNUKDAsIDAsIG1fbldpZHRoLCBtX25IZWlnaHQpKSB7CisgICAgICAgIHJldHVybiBjb21wb3NlVG9fb3B0MihwRHN0LCB4LCB5LCBvcCk7CisgICAgfQorICAgIHJldHVybiBjb21wb3NlVG9fb3B0MihwRHN0LCB4LCB5LCBvcCwgcFNyY1JlY3QpOworfQorRlhfQk9PTCBDSkJpZzJfSW1hZ2U6OmNvbXBvc2VUb191bm9wdChDSkJpZzJfSW1hZ2UgKnBEc3QsIEZYX0lOVDMyIHgsIEZYX0lOVDMyIHksIEpCaWcyQ29tcG9zZU9wIG9wKQoreworICAgIEZYX0lOVDMyIHcsIGgsIGR4LCBkeTsKKyAgICBGWF9JTlQzMiBpLCBqOworICAgIHcgPSBtX25XaWR0aDsKKyAgICBoID0gbV9uSGVpZ2h0OworICAgIGR4ID0gZHkgPSAwOworICAgIGlmKHggPCAwKSB7CisgICAgICAgIGR4ICs9IC14OworICAgICAgICB3ICAtPSAteDsKKyAgICAgICAgeCA9IDA7CisgICAgfQorICAgIGlmKHkgPCAwKSB7CisgICAgICAgIGR5ICs9IC15OworICAgICAgICBoICAtPSAteTsKKyAgICAgICAgeSA9IDA7CisgICAgfQorICAgIGlmKHggKyB3ID4gcERzdC0+bV9uV2lkdGgpIHsKKyAgICAgICAgdyA9IHBEc3QtPm1fbldpZHRoIC0geDsKKyAgICB9CisgICAgaWYoeSArIGggPiBwRHN0LT5tX25IZWlnaHQpIHsKKyAgICAgICAgaCA9IHBEc3QtPm1fbkhlaWdodCAtIHk7CisgICAgfQorICAgIHN3aXRjaChvcCkgeworICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfT1I6CisgICAgICAgICAgICBmb3IoaiA9IDA7IGogPCBoOyBqKyspIHsKKyAgICAgICAgICAgICAgICBmb3IoaSA9IDA7IGkgPCB3OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcERzdC0+c2V0UGl4ZWwoeCArIGksIHkgKyBqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2V0UGl4ZWwoaSArIGR4LCBqICsgZHkpIHwgcERzdC0+Z2V0UGl4ZWwoeCArIGksIHkgKyBqKSkgJiAxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDoKKyAgICAgICAgICAgIGZvcihqID0gMDsgaiA8IGg7IGorKykgeworICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IHc7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBwRHN0LT5zZXRQaXhlbCh4ICsgaSwgeSArIGosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZXRQaXhlbChpICsgZHgsIGogKyBkeSkgJiBwRHN0LT5nZXRQaXhlbCh4ICsgaSwgeSArIGopKSAmIDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE9SOgorICAgICAgICAgICAgZm9yKGogPSAwOyBqIDwgaDsgaisrKSB7CisgICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgdzsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHBEc3QtPnNldFBpeGVsKHggKyBpLCB5ICsgaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdldFBpeGVsKGkgKyBkeCwgaiArIGR5KSBeIHBEc3QtPmdldFBpeGVsKHggKyBpLCB5ICsgaikpICYgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOgorICAgICAgICAgICAgZm9yKGogPSAwOyBqIDwgaDsgaisrKSB7CisgICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgdzsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHBEc3QtPnNldFBpeGVsKHggKyBpLCB5ICsgaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKH4oZ2V0UGl4ZWwoaSArIGR4LCBqICsgZHkpIF4gcERzdC0+Z2V0UGl4ZWwoeCArIGksIHkgKyBqKSkpICYgMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOgorICAgICAgICAgICAgZm9yKGogPSAwOyBqIDwgaDsgaisrKSB7CisgICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgdzsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHBEc3QtPnNldFBpeGVsKHggKyBpLCB5ICsgaiwgZ2V0UGl4ZWwoaSArIGR4LCBqICsgZHkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgQ0pCaWcyX0ltYWdlOjpjb21wb3NlVG9fb3B0KENKQmlnMl9JbWFnZSAqcERzdCwgRlhfSU5UMzIgeCwgRlhfSU5UMzIgeSwgSkJpZzJDb21wb3NlT3Agb3ApCit7CisgICAgRlhfSU5UMzIgeDAsIHgxLCB5MCwgeTEsIHh4LCB5eTsKKyAgICBGWF9CWVRFICpwTGluZVNyYywgKnBMaW5lRHN0LCAqc3JjUHRyLCAqZGVzdFB0cjsKKyAgICBGWF9EV09SRCBzcmMwLCBzcmMxLCBzcmMsIGRlc3QsIHMxLCBzMiwgbTEsIG0yLCBtMzsKKyAgICBGWF9CT09MIG9uZUJ5dGU7CisgICAgaWYgKCFtX3BEYXRhKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKHkgPCAwKSB7CisgICAgICAgIHkwID0gLXk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgeTAgPSAwOworICAgIH0KKyAgICBpZiAoeSArIG1fbkhlaWdodCA+IHBEc3QtPm1fbkhlaWdodCkgeworICAgICAgICB5MSA9IHBEc3QtPm1fbkhlaWdodCAtIHk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgeTEgPSBtX25IZWlnaHQ7CisgICAgfQorICAgIGlmICh5MCA+PSB5MSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmICh4ID49IDApIHsKKyAgICAgICAgeDAgPSB4ICYgfjc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgeDAgPSAwOworICAgIH0KKyAgICB4MSA9IHggKyBtX25XaWR0aDsKKyAgICBpZiAoeDEgPiBwRHN0LT5tX25XaWR0aCkgeworICAgICAgICB4MSA9IHBEc3QtPm1fbldpZHRoOworICAgIH0KKyAgICBpZiAoeDAgPj0geDEpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBzMSA9IHggJiA3OworICAgIHMyID0gOCAtIHMxOworICAgIG0xID0gMHhmZiA+PiAoeDEgJiA3KTsKKyAgICBtMiA9IDB4ZmYgPDwgKCgoeDEgJiA3KSA9PSAwKSA/IDAgOiA4IC0gKHgxICYgNykpOworICAgIG0zID0gKDB4ZmYgPj4gczEpICYgbTI7CisgICAgb25lQnl0ZSA9IHgwID09ICgoeDEgLSAxKSAmIH43KTsKKyAgICBwTGluZURzdCA9IHBEc3QtPm1fcERhdGEgKyB5ICogcERzdC0+bV9uU3RyaWRlOworICAgIHBMaW5lU3JjID0gbV9wRGF0YSArIHkwICogbV9uU3RyaWRlOworICAgIGlmKG9uZUJ5dGUpIHsKKyAgICAgICAgaWYoeCA+PSAwKSB7CisgICAgICAgICAgICBzd2l0Y2gob3ApIHsKKyAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfT1I6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeXkgPSB5MDsgeXkgPCB5MTsgKyt5eSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQdHIgPSBwTGluZURzdCArICh4ID4+IDMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1B0ciA9IHBMaW5lU3JjOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0IHw9ICgqc3JjUHRyID4+IHMxKSAmIG0yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyID0gKEZYX0JZVEUpZGVzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZURzdCArPSBwRHN0LT5tX25TdHJpZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVTcmMgKz0gbV9uU3RyaWRlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9BTkQ6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeXkgPSB5MDsgeXkgPCB5MTsgKyt5eSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQdHIgPSBwTGluZURzdCArICh4ID4+IDMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1B0ciA9IHBMaW5lU3JjOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICY9ICgoMHhmZjAwIHwgKnNyY1B0cikgPj4gczEpIHwgbTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIgPSAoRlhfQllURSlkZXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZVNyYyArPSBtX25TdHJpZGU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hPUjogeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh5eSA9IHkwOyB5eSA8IHkxOyArK3l5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFB0ciA9IHBMaW5lRHN0ICsgKHggPj4gMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUHRyID0gcExpbmVTcmM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgXj0gKCpzcmNQdHIgPj4gczEpICYgbTI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIgPSAoRlhfQllURSlkZXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZVNyYyArPSBtX25TdHJpZGU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hOT1I6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeXkgPSB5MDsgeXkgPCB5MTsgKyt5eSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQdHIgPSBwTGluZURzdCArICh4ID4+IDMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1B0ciA9IHBMaW5lU3JjOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0IF49ICgoKnNyY1B0ciBeIDB4ZmYpID4+IHMxKSAmIG0yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyID0gKEZYX0JZVEUpZGVzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZURzdCArPSBwRHN0LT5tX25TdHJpZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVTcmMgKz0gbV9uU3RyaWRlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHl5ID0geTA7IHl5IDwgeTE7ICsreXkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UHRyID0gcExpbmVEc3QgKyAoeCA+PiAzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNQdHIgPSBwTGluZVNyYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gKmRlc3RQdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9IChkZXN0ICYgfm0zKSB8ICgoKnNyY1B0ciA+PiBzMSkgJiBtMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIgPSAoRlhfQllURSlkZXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZVNyYyArPSBtX25TdHJpZGU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzd2l0Y2gob3ApIHsKKyAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfT1I6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcih5eSA9IHkwOyB5eSA8IHkxOyArK3l5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFB0ciA9IHBMaW5lRHN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1B0ciA9IHBMaW5lU3JjICsgKC14ID4+IDMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0IHw9ICpzcmNQdHIgJiBtMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0ciA9IChGWF9CWVRFKWRlc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lU3JjICs9IG1fblN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfQU5EOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoeXkgPSB5MDsgeXkgPCB5MTsgKyt5eSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQdHIgPSBwTGluZURzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNQdHIgPSBwTGluZVNyYyArICgteCA+PiAzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gKmRlc3RQdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCAmPSAqc3JjUHRyIHwgbTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIgPSAoRlhfQllURSlkZXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZVNyYyArPSBtX25TdHJpZGU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hPUjogeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHl5ID0geTA7IHl5IDwgeTE7ICsreXkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UHRyID0gcExpbmVEc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUHRyID0gcExpbmVTcmMgKyAoLXggPj4gMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgXj0gKnNyY1B0ciAmIG0yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyID0gKEZYX0JZVEUpZGVzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZURzdCArPSBwRHN0LT5tX25TdHJpZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVTcmMgKz0gbV9uU3RyaWRlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoeXkgPSB5MDsgeXkgPCB5MTsgKyt5eSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQdHIgPSBwTGluZURzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNQdHIgPSBwTGluZVNyYyArICgteCA+PiAzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gKmRlc3RQdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCBePSAoKnNyY1B0ciBeIDB4ZmYpICYgbTI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIgPSAoRlhfQllURSlkZXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZVNyYyArPSBtX25TdHJpZGU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1JFUExBQ0U6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcih5eSA9IHkwOyB5eSA8IHkxOyArK3l5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFB0ciA9IHBMaW5lRHN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1B0ciA9IHBMaW5lU3JjICsgKC14ID4+IDMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gKCpzcmNQdHIgJiBtMikgfCAoZGVzdCAmIG0xKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0ciA9IChGWF9CWVRFKWRlc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lU3JjICs9IG1fblN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmKHggPj0gMCkgeworICAgICAgICAgICAgc3dpdGNoKG9wKSB7CisgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoeXkgPSB5MDsgeXkgPCB5MTsgKyt5eSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQdHIgPSBwTGluZURzdCArICh4ID4+IDMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1B0ciA9IHBMaW5lU3JjOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgfD0gc3JjMSA+PiBzMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0cisrID0gKEZYX0JZVEUpZGVzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eCA9IHgwICsgODsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgeHggPCB4MSAtIDg7IHh4ICs9IDgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMwID0gc3JjMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9ICpzcmNQdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gKCgoc3JjMCA8PCA4KSB8IHNyYzEpID4+IHMxKSAmIDB4ZmY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgfD0gc3JjOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0cisrID0gKEZYX0JZVEUpZGVzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzAgPSBzcmMxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNyY1B0ciAtIHBMaW5lU3JjIDwgbV9uU3RyaWRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9ICgoKHNyYzAgPDwgOCkgfCBzcmMxKSA+PiBzMSkgJiAweGZmOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgfD0gc3JjICYgbTI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIgPSAoRlhfQllURSlkZXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZVNyYyArPSBtX25TdHJpZGU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDogeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHl5ID0geTA7IHl5IDwgeTE7ICsreXkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UHRyID0gcExpbmVEc3QgKyAoeCA+PiAzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNQdHIgPSBwTGluZVNyYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ICY9ICgweGZmMDAgfCBzcmMxKSA+PiBzMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0cisrID0gKEZYX0JZVEUpZGVzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eCA9IHgwICsgODsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgeHggPCB4MSAtIDg7IHh4ICs9IDgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMwID0gc3JjMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9ICpzcmNQdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gKCgoc3JjMCA8PCA4KSB8IHNyYzEpID4+IHMxKSAmIDB4ZmY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgJj0gc3JjOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0cisrID0gKEZYX0JZVEUpZGVzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzAgPSBzcmMxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNyY1B0ciAtIHBMaW5lU3JjIDwgbV9uU3RyaWRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9ICgoKHNyYzAgPDwgOCkgfCBzcmMxKSA+PiBzMSkgJiAweGZmOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgJj0gc3JjIHwgbTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIgPSAoRlhfQllURSlkZXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZVNyYyArPSBtX25TdHJpZGU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hPUjogeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHl5ID0geTA7IHl5IDwgeTE7ICsreXkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UHRyID0gcExpbmVEc3QgKyAoeCA+PiAzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNQdHIgPSBwTGluZVNyYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0IF49IHNyYzEgPj4gczE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIrKyA9IChGWF9CWVRFKWRlc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHggPSB4MCArIDg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHh4IDwgeDEgLSA4OyB4eCArPSA4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMCA9IHNyYzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9ICgoKHNyYzAgPDwgOCkgfCBzcmMxKSA+PiBzMSkgJiAweGZmOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0IF49IHNyYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIrKyA9IChGWF9CWVRFKWRlc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMwID0gc3JjMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzcmNQdHIgLSBwTGluZVNyYyA8IG1fblN0cmlkZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMgPSAoKChzcmMwIDw8IDgpIHwgc3JjMSkgPj4gczEpICYgMHhmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0IF49IHNyYyAmIG0yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyID0gKEZYX0JZVEUpZGVzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZURzdCArPSBwRHN0LT5tX25TdHJpZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVTcmMgKz0gbV9uU3RyaWRlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoeXkgPSB5MDsgeXkgPCB5MTsgKyt5eSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQdHIgPSBwTGluZURzdCArICh4ID4+IDMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1B0ciA9IHBMaW5lU3JjOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgXj0gKHNyYzEgXiAweGZmKSA+PiBzMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0cisrID0gKEZYX0JZVEUpZGVzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eCA9IHgwICsgODsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgeHggPCB4MSAtIDg7IHh4ICs9IDgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMwID0gc3JjMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9ICpzcmNQdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gKCgoc3JjMCA8PCA4KSB8IHNyYzEpID4+IHMxKSAmIDB4ZmY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgXj0gc3JjIF4gMHhmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIrKyA9IChGWF9CWVRFKWRlc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMwID0gc3JjMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzcmNQdHIgLSBwTGluZVNyYyA8IG1fblN0cmlkZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMgPSAoKChzcmMwIDw8IDgpIHwgc3JjMSkgPj4gczEpICYgMHhmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0IF49IChzcmMgXiAweGZmKSAmIG0yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyID0gKEZYX0JZVEUpZGVzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZURzdCArPSBwRHN0LT5tX25TdHJpZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVTcmMgKz0gbV9uU3RyaWRlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoeXkgPSB5MDsgeXkgPCB5MTsgKyt5eSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQdHIgPSBwTGluZURzdCArICh4ID4+IDMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1B0ciA9IHBMaW5lU3JjOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAoZGVzdCAmICgweGZmIDw8IHMyKSkgfCAoc3JjMSA+PiBzMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIrKyA9IChGWF9CWVRFKWRlc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHggPSB4MCArIDg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHh4IDwgeDEgLSA4OyB4eCArPSA4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMCA9IHNyYzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9ICgoKHNyYzAgPDwgOCkgfCBzcmMxKSA+PiBzMSkgJiAweGZmOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gc3JjOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0cisrID0gKEZYX0JZVEUpZGVzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzAgPSBzcmMxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNyY1B0ciAtIHBMaW5lU3JjIDwgbV9uU3RyaWRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9ICgoKHNyYzAgPDwgOCkgfCBzcmMxKSA+PiBzMSkgJiAweGZmOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAoc3JjICYgbTIpIHwgKGRlc3QgJiBtMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIgPSAoRlhfQllURSlkZXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZVNyYyArPSBtX25TdHJpZGU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzd2l0Y2gob3ApIHsKKyAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfT1I6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcih5eSA9IHkwOyB5eSA8IHkxOyArK3l5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFB0ciA9IHBMaW5lRHN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1B0ciA9IHBMaW5lU3JjICsgKC14ID4+IDMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHggPSB4MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgeHggPCB4MSAtIDg7IHh4ICs9IDgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMwID0gc3JjMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9ICpzcmNQdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gKCgoc3JjMCA8PCA4KSB8IHNyYzEpID4+IHMxKSAmIDB4ZmY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgfD0gc3JjOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0cisrID0gKEZYX0JZVEUpZGVzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9ICpkZXN0UHRyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzAgPSBzcmMxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNyY1B0ciAtIHBMaW5lU3JjIDwgbV9uU3RyaWRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9ICgoKHNyYzAgPDwgOCkgfCBzcmMxKSA+PiBzMSkgJiAweGZmOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgfD0gc3JjICYgbTI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIgPSAoRlhfQllURSlkZXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZVNyYyArPSBtX25TdHJpZGU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDogeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHl5ID0geTA7IHl5IDwgeTE7ICsreXkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UHRyID0gcExpbmVEc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUHRyID0gcExpbmVTcmMgKyAoLXggPj4gMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9ICpzcmNQdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eCA9IHgwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB4eCA8IHgxIC0gODsgeHggKz0gOCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gKmRlc3RQdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzAgPSBzcmMxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMgPSAoKChzcmMwIDw8IDgpIHwgc3JjMSkgPj4gczEpICYgMHhmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCAmPSBzcmM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyKysgPSAoRlhfQllURSlkZXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gKmRlc3RQdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMCA9IHNyYzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3JjUHRyIC0gcExpbmVTcmMgPCBtX25TdHJpZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9ICpzcmNQdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gKCgoc3JjMCA8PCA4KSB8IHNyYzEpID4+IHMxKSAmIDB4ZmY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCAmPSBzcmMgfCBtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0ciA9IChGWF9CWVRFKWRlc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lU3JjICs9IG1fblN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE9SOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoeXkgPSB5MDsgeXkgPCB5MTsgKyt5eSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQdHIgPSBwTGluZURzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNQdHIgPSBwTGluZVNyYyArICgteCA+PiAzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4ID0geDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHh4IDwgeDEgLSA4OyB4eCArPSA4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMCA9IHNyYzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9ICgoKHNyYzAgPDwgOCkgfCBzcmMxKSA+PiBzMSkgJiAweGZmOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0IF49IHNyYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIrKyA9IChGWF9CWVRFKWRlc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMwID0gc3JjMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzcmNQdHIgLSBwTGluZVNyYyA8IG1fblN0cmlkZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMgPSAoKChzcmMwIDw8IDgpIHwgc3JjMSkgPj4gczEpICYgMHhmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0IF49IHNyYyAmIG0yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyID0gKEZYX0JZVEUpZGVzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZURzdCArPSBwRHN0LT5tX25TdHJpZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVTcmMgKz0gbV9uU3RyaWRlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IoeXkgPSB5MDsgeXkgPCB5MTsgKyt5eSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQdHIgPSBwTGluZURzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNQdHIgPSBwTGluZVNyYyArICgteCA+PiAzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4ID0geDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHh4IDwgeDEgLSA4OyB4eCArPSA4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMCA9IHNyYzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAqc3JjUHRyKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYyA9ICgoKHNyYzAgPDwgOCkgfCBzcmMxKSA+PiBzMSkgJiAweGZmOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0IF49IHNyYyBeIDB4ZmY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyKysgPSAoRlhfQllURSlkZXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gKmRlc3RQdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMCA9IHNyYzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3JjUHRyIC0gcExpbmVTcmMgPCBtX25TdHJpZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9ICpzcmNQdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gKCgoc3JjMCA8PCA4KSB8IHNyYzEpID4+IHMxKSAmIDB4ZmY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCBePSAoc3JjIF4gMHhmZikgJiBtMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdFB0ciA9IChGWF9CWVRFKWRlc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBMaW5lU3JjICs9IG1fblN0cmlkZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfUkVQTEFDRTogeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yKHl5ID0geTA7IHl5IDwgeTE7ICsreXkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UHRyID0gcExpbmVEc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUHRyID0gcExpbmVTcmMgKyAoLXggPj4gMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjMSA9ICpzcmNQdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eCA9IHgwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB4eCA8IHgxIC0gODsgeHggKz0gOCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gKmRlc3RQdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzAgPSBzcmMxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMgPSAoKChzcmMwIDw8IDgpIHwgc3JjMSkgPj4gczEpICYgMHhmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9IHNyYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RQdHIrKyA9IChGWF9CWVRFKWRlc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSAqZGVzdFB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMwID0gc3JjMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzcmNQdHIgLSBwTGluZVNyYyA8IG1fblN0cmlkZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMxID0gKnNyY1B0cisrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzEgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMgPSAoKChzcmMwIDw8IDgpIHwgc3JjMSkgPj4gczEpICYgMHhmZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gKHNyYyAmIG0yKSB8IChkZXN0ICYgbTEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0UHRyID0gKEZYX0JZVEUpZGVzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwTGluZURzdCArPSBwRHN0LT5tX25TdHJpZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcExpbmVTcmMgKz0gbV9uU3RyaWRlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDSkJpZzJfSW1hZ2U6OmNvbXBvc2VGcm9tKEZYX0lOVDMyIHgsIEZYX0lOVDMyIHksIENKQmlnMl9JbWFnZSAqcFNyYywgSkJpZzJDb21wb3NlT3Agb3ApCit7CisgICAgaWYgKCFtX3BEYXRhKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIHBTcmMtPmNvbXBvc2VUbyh0aGlzLCB4LCB5LCBvcCk7Cit9CitGWF9CT09MIENKQmlnMl9JbWFnZTo6Y29tcG9zZUZyb20oRlhfSU5UMzIgeCwgRlhfSU5UMzIgeSwgQ0pCaWcyX0ltYWdlICpwU3JjLCBKQmlnMkNvbXBvc2VPcCBvcCwgY29uc3QgRlhfUkVDVCogcFNyY1JlY3QpCit7CisgICAgaWYgKCFtX3BEYXRhKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIHBTcmMtPmNvbXBvc2VUbyh0aGlzLCB4LCB5LCBvcCwgcFNyY1JlY3QpOworfQorQ0pCaWcyX0ltYWdlICpDSkJpZzJfSW1hZ2U6OnN1YkltYWdlX3Vub3B0KEZYX0lOVDMyIHgsIEZYX0lOVDMyIHksIEZYX0lOVDMyIHcsIEZYX0lOVDMyIGgpCit7CisgICAgQ0pCaWcyX0ltYWdlICpwSW1hZ2U7CisgICAgRlhfSU5UMzIgaSwgajsKKyAgICBKQklHMl9BTExPQyhwSW1hZ2UsIENKQmlnMl9JbWFnZSh3LCBoKSk7CisgICAgZm9yKGogPSAwOyBqIDwgaDsgaisrKSB7CisgICAgICAgIGZvcihpID0gMDsgaSA8IHc7IGkrKykgeworICAgICAgICAgICAgcEltYWdlLT5zZXRQaXhlbChpLCBqLCBnZXRQaXhlbCh4ICsgaSwgeSArIGopKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcEltYWdlOworfQorI2RlZmluZSBKQklHMl9HRVREV09SRChidWYpCSgoRlhfRFdPUkQpKCgoYnVmKVswXSA8PCAyNCkgfCAoKGJ1ZilbMV0gPDwgMTYpIHwgKChidWYpWzJdIDw8IDgpIHwgKGJ1ZilbM10pKQorQ0pCaWcyX0ltYWdlICpDSkJpZzJfSW1hZ2U6OnN1YkltYWdlKEZYX0lOVDMyIHgsIEZYX0lOVDMyIHksIEZYX0lOVDMyIHcsIEZYX0lOVDMyIGgpCit7CisgICAgQ0pCaWcyX0ltYWdlICpwSW1hZ2U7CisgICAgRlhfSU5UMzIgbSwgbiwgajsKKyAgICBGWF9CWVRFICpwTGluZVNyYywgKnBMaW5lRHN0OworICAgIEZYX0RXT1JEIHdUbXA7CisgICAgRlhfQllURSAqcFNyYywgKnBTcmNFbmQsICpwRHN0LCAqcERzdEVuZDsKKyAgICBpZiAodyA9PSAwIHx8IGggPT0gMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgSkJJRzJfQUxMT0MocEltYWdlLCBDSkJpZzJfSW1hZ2UodywgaCkpOworICAgIGlmICghbV9wRGF0YSkgeworICAgICAgICBwSW1hZ2UtPmZpbGwoMCk7CisgICAgICAgIHJldHVybiBwSW1hZ2U7CisgICAgfQorICAgIGlmICghcEltYWdlLT5tX3BEYXRhKSB7CisgICAgICAgIHJldHVybiBwSW1hZ2U7CisgICAgfQorICAgIHBMaW5lU3JjID0gbV9wRGF0YSArIG1fblN0cmlkZSAqIHk7CisgICAgcExpbmVEc3QgPSBwSW1hZ2UtPm1fcERhdGE7CisgICAgbSA9ICh4ID4+IDUpIDw8IDI7CisgICAgbiA9IHggJiAzMTsKKyAgICBpZihuID09IDApIHsKKyAgICAgICAgZm9yKGogPSAwOyBqIDwgaDsgaisrKSB7CisgICAgICAgICAgICBwU3JjID0gcExpbmVTcmMgKyBtOworICAgICAgICAgICAgcFNyY0VuZCA9IHBMaW5lU3JjICsgbV9uU3RyaWRlOworICAgICAgICAgICAgcERzdCA9IHBMaW5lRHN0OworICAgICAgICAgICAgcERzdEVuZCA9IHBMaW5lRHN0ICsgcEltYWdlLT5tX25TdHJpZGU7CisgICAgICAgICAgICBmb3IoOyBwRHN0IDwgcERzdEVuZDsgcFNyYyArPSA0LCBwRHN0ICs9IDQpIHsKKyAgICAgICAgICAgICAgICAqKChGWF9EV09SRCAqKXBEc3QpID0gKigoRlhfRFdPUkQgKilwU3JjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBMaW5lU3JjICs9IG1fblN0cmlkZTsKKyAgICAgICAgICAgIHBMaW5lRHN0ICs9IHBJbWFnZS0+bV9uU3RyaWRlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yKGogPSAwOyBqIDwgaDsgaisrKSB7CisgICAgICAgICAgICBwU3JjID0gcExpbmVTcmMgKyBtOworICAgICAgICAgICAgcFNyY0VuZCA9IHBMaW5lU3JjICsgbV9uU3RyaWRlOworICAgICAgICAgICAgcERzdCA9IHBMaW5lRHN0OworICAgICAgICAgICAgcERzdEVuZCA9IHBMaW5lRHN0ICsgcEltYWdlLT5tX25TdHJpZGU7CisgICAgICAgICAgICBmb3IoOyBwRHN0IDwgcERzdEVuZDsgcFNyYyArPSA0LCBwRHN0ICs9IDQpIHsKKyAgICAgICAgICAgICAgICBpZihwU3JjICsgNCA8IHBTcmNFbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgd1RtcCA9IChKQklHMl9HRVREV09SRChwU3JjKSA8PCBuKSB8IChKQklHMl9HRVREV09SRChwU3JjICsgNCkgPj4gKDMyIC0gbikpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHdUbXAgPSBKQklHMl9HRVREV09SRChwU3JjKSA8PCBuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwRHN0WzBdID0gKEZYX0JZVEUpKHdUbXAgPj4gMjQpOworICAgICAgICAgICAgICAgIHBEc3RbMV0gPSAoRlhfQllURSkod1RtcCA+PiAxNik7CisgICAgICAgICAgICAgICAgcERzdFsyXSA9IChGWF9CWVRFKSh3VG1wID4+IDgpOworICAgICAgICAgICAgICAgIHBEc3RbM10gPSAoRlhfQllURSl3VG1wOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcExpbmVTcmMgKz0gbV9uU3RyaWRlOworICAgICAgICAgICAgcExpbmVEc3QgKz0gcEltYWdlLT5tX25TdHJpZGU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBJbWFnZTsKK30KK3ZvaWQgQ0pCaWcyX0ltYWdlOjpleHBhbmQoRlhfSU5UMzIgaCwgRlhfQk9PTCB2KQoreworICAgIGlmICghbV9wRGF0YSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcERhdGEgPSAoRlhfQllURSopbV9wTW9kdWxlLT5KQmlnMl9SZWFsbG9jKG1fcERhdGEsIGggKiBtX25TdHJpZGUpOworICAgIGlmKGggPiBtX25IZWlnaHQpIHsKKyAgICAgICAgSkJJRzJfbWVtc2V0KG1fcERhdGEgKyBtX25IZWlnaHQgKiBtX25TdHJpZGUsIHYgPyAweGZmIDogMCwgKGggLSBtX25IZWlnaHQpKm1fblN0cmlkZSk7CisgICAgfQorICAgIG1fbkhlaWdodCA9IGg7Cit9CitGWF9CT09MIENKQmlnMl9JbWFnZTo6Y29tcG9zZVRvX29wdDIoQ0pCaWcyX0ltYWdlICpwRHN0LCBGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBKQmlnMkNvbXBvc2VPcCBvcCkKK3sKKyAgICBGWF9JTlQzMiB4czAsIHlzMCwgeHMxLCB5czEsIHhkMCwgeWQwLCB4ZDEsIHlkMSwgeHgsIHl5LCB3LCBoLCBtaWRkbGVEd29yZHMsIGxpbmVMZWZ0OworICAgIEZYX0RXT1JEIHMxLCBkMSwgZDIsIHNoaWZ0LCBzaGlmdDEsIHNoaWZ0MiwgdG1wLCB0bXAxLCB0bXAyLCBtYXNrTCwgbWFza1IsIG1hc2tNOworICAgIEZYX0JZVEUgKmxpbmVTcmMsICpsaW5lRHN0LCAqc3AsICpkcDsKKyAgICBpZiAoIW1fcERhdGEpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoeCA8IC0xMDQ4NTc2IHx8IHggPiAxMDQ4NTc2IHx8IHkgPCAtMTA0ODU3NiB8fCB5ID4gMTA0ODU3NikgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmKHkgPCAwKSB7CisgICAgICAgIHlzMCA9IC15OworICAgIH0gZWxzZSB7CisgICAgICAgIHlzMCA9IDA7CisgICAgfQorICAgIGlmKHkgKyBtX25IZWlnaHQgPiBwRHN0LT5tX25IZWlnaHQpIHsKKyAgICAgICAgeXMxID0gcERzdC0+bV9uSGVpZ2h0IC0geTsKKyAgICB9IGVsc2UgeworICAgICAgICB5czEgPSBtX25IZWlnaHQ7CisgICAgfQorICAgIGlmKHggPCAwKSB7CisgICAgICAgIHhzMCA9IC14OworICAgIH0gZWxzZSB7CisgICAgICAgIHhzMCA9IDA7CisgICAgfQorICAgIGlmKHggKyBtX25XaWR0aCA+IHBEc3QtPm1fbldpZHRoKSB7CisgICAgICAgIHhzMSA9IHBEc3QtPm1fbldpZHRoIC0geDsKKyAgICB9IGVsc2UgeworICAgICAgICB4czEgPSBtX25XaWR0aDsKKyAgICB9CisgICAgaWYoKHlzMCA+PSB5czEpIHx8ICh4czAgPj0geHMxKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgdyA9IHhzMSAtIHhzMDsKKyAgICBoID0geXMxIC0geXMwOworICAgIGlmKHkgPCAwKSB7CisgICAgICAgIHlkMCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgeWQwID0geTsKKyAgICB9CisgICAgaWYoeCA8IDApIHsKKyAgICAgICAgeGQwID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICB4ZDAgPSB4OworICAgIH0KKyAgICB4ZDEgPSB4ZDAgKyB3OworICAgIHlkMSA9IHlkMCArIGg7CisgICAgZDEgPSB4ZDAgJiAzMTsKKyAgICBkMiA9IHhkMSAmIDMxOworICAgIHMxID0geHMwICYgMzE7CisgICAgbWFza0wgPSAweGZmZmZmZmZmID4+IGQxOworICAgIG1hc2tSID0gMHhmZmZmZmZmZiA8PCAoKDMyIC0gKHhkMSAmIDMxKSkgJSAzMik7CisgICAgbWFza00gPSBtYXNrTCAmIG1hc2tSOworICAgIGxpbmVTcmMgPSBtX3BEYXRhICsgeXMwICogbV9uU3RyaWRlICsgKCh4czAgPj4gNSkgPDwgMik7CisgICAgbGluZUxlZnQgPSBtX25TdHJpZGUgLSAoKHhzMCA+PiA1KSA8PCAyKTsKKyAgICBsaW5lRHN0ID0gcERzdC0+bV9wRGF0YSArIHlkMCAqIHBEc3QtPm1fblN0cmlkZSArICgoeGQwID4+IDUpIDw8IDIpOworICAgIGlmKCh4ZDAgJiB+MzEpID09ICgoeGQxIC0gMSkgJiB+MzEpKSB7CisgICAgICAgIGlmKCh4czAgJiB+MzEpID09ICgoeHMxIC0gMSkgJiB+MzEpKSB7CisgICAgICAgICAgICBpZihzMSA+IGQxKSB7CisgICAgICAgICAgICAgICAgc2hpZnQgPSBzMSAtIGQxOworICAgICAgICAgICAgICAgIGZvcih5eSA9IHlkMDsgeXkgPCB5ZDE7IHl5KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdG1wMSA9IEpCSUcyX0dFVERXT1JEKGxpbmVTcmMpIDw8IHNoaWZ0OworICAgICAgICAgICAgICAgICAgICB0bXAyID0gSkJJRzJfR0VURFdPUkQobGluZURzdCk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaChvcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tNKSB8ICgodG1wMSB8IHRtcDIpICYgbWFza00pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAoKHRtcDEgJiB0bXAyKSAmIG1hc2tNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza00pIHwgKCh0bXAxIF4gdG1wMikgJiBtYXNrTSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAoKH4odG1wMSBeIHRtcDIpKSAmIG1hc2tNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tNKSB8ICh0bXAxICYgbWFza00pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGxpbmVEc3RbMF0gPSAoRlhfQllURSkodG1wID4+IDI0KTsKKyAgICAgICAgICAgICAgICAgICAgbGluZURzdFsxXSA9IChGWF9CWVRFKSh0bXAgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICBsaW5lRHN0WzJdID0gKEZYX0JZVEUpKHRtcCA+PiA4KTsKKyAgICAgICAgICAgICAgICAgICAgbGluZURzdFszXSA9IChGWF9CWVRFKXRtcDsKKyAgICAgICAgICAgICAgICAgICAgbGluZVNyYyArPSBtX25TdHJpZGU7CisgICAgICAgICAgICAgICAgICAgIGxpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2hpZnQgPSBkMSAtIHMxOworICAgICAgICAgICAgICAgIGZvcih5eSA9IHlkMDsgeXkgPCB5ZDE7IHl5KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdG1wMSA9IEpCSUcyX0dFVERXT1JEKGxpbmVTcmMpID4+IHNoaWZ0OworICAgICAgICAgICAgICAgICAgICB0bXAyID0gSkJJRzJfR0VURFdPUkQobGluZURzdCk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaChvcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tNKSB8ICgodG1wMSB8IHRtcDIpICYgbWFza00pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAoKHRtcDEgJiB0bXAyKSAmIG1hc2tNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza00pIHwgKCh0bXAxIF4gdG1wMikgJiBtYXNrTSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAoKH4odG1wMSBeIHRtcDIpKSAmIG1hc2tNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tNKSB8ICh0bXAxICYgbWFza00pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGxpbmVEc3RbMF0gPSAoRlhfQllURSkodG1wID4+IDI0KTsKKyAgICAgICAgICAgICAgICAgICAgbGluZURzdFsxXSA9IChGWF9CWVRFKSh0bXAgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICBsaW5lRHN0WzJdID0gKEZYX0JZVEUpKHRtcCA+PiA4KTsKKyAgICAgICAgICAgICAgICAgICAgbGluZURzdFszXSA9IChGWF9CWVRFKXRtcDsKKyAgICAgICAgICAgICAgICAgICAgbGluZVNyYyArPSBtX25TdHJpZGU7CisgICAgICAgICAgICAgICAgICAgIGxpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNoaWZ0MSA9IHMxIC0gZDE7CisgICAgICAgICAgICBzaGlmdDIgPSAzMiAtIHNoaWZ0MTsKKyAgICAgICAgICAgIGZvcih5eSA9IHlkMDsgeXkgPCB5ZDE7IHl5KyspIHsKKyAgICAgICAgICAgICAgICB0bXAxID0gKEpCSUcyX0dFVERXT1JEKGxpbmVTcmMpIDw8IHNoaWZ0MSkgfCAoSkJJRzJfR0VURFdPUkQobGluZVNyYyArIDQpID4+IHNoaWZ0Mik7CisgICAgICAgICAgICAgICAgdG1wMiA9IEpCSUcyX0dFVERXT1JEKGxpbmVEc3QpOworICAgICAgICAgICAgICAgIHN3aXRjaChvcCkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfT1I6CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAoKHRtcDEgfCB0bXAyKSAmIG1hc2tNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfQU5EOgorICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza00pIHwgKCh0bXAxICYgdG1wMikgJiBtYXNrTSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hPUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tNKSB8ICgodG1wMSBeIHRtcDIpICYgbWFza00pOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOgorICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza00pIHwgKCh+KHRtcDEgXiB0bXAyKSkgJiBtYXNrTSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1JFUExBQ0U6CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAodG1wMSAmIG1hc2tNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaW5lRHN0WzBdID0gKEZYX0JZVEUpKHRtcCA+PiAyNCk7CisgICAgICAgICAgICAgICAgbGluZURzdFsxXSA9IChGWF9CWVRFKSh0bXAgPj4gMTYpOworICAgICAgICAgICAgICAgIGxpbmVEc3RbMl0gPSAoRlhfQllURSkodG1wID4+IDgpOworICAgICAgICAgICAgICAgIGxpbmVEc3RbM10gPSAoRlhfQllURSl0bXA7CisgICAgICAgICAgICAgICAgbGluZVNyYyArPSBtX25TdHJpZGU7CisgICAgICAgICAgICAgICAgbGluZURzdCArPSBwRHN0LT5tX25TdHJpZGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZihzMSA+IGQxKSB7CisgICAgICAgICAgICBzaGlmdDEgPSBzMSAtIGQxOworICAgICAgICAgICAgc2hpZnQyID0gMzIgLSBzaGlmdDE7CisgICAgICAgICAgICBtaWRkbGVEd29yZHMgPSAoeGQxID4+IDUpIC0gKCh4ZDAgKyAzMSkgPj4gNSk7CisgICAgICAgICAgICBmb3IoeXkgPSB5ZDA7IHl5IDwgeWQxOyB5eSsrKSB7CisgICAgICAgICAgICAgICAgc3AgPSBsaW5lU3JjOworICAgICAgICAgICAgICAgIGRwID0gbGluZURzdDsKKyAgICAgICAgICAgICAgICBpZihkMSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRtcDEgPSAoSkJJRzJfR0VURFdPUkQoc3ApIDw8IHNoaWZ0MSkgfCAoSkJJRzJfR0VURFdPUkQoc3AgKyA0KSA+PiBzaGlmdDIpOworICAgICAgICAgICAgICAgICAgICB0bXAyID0gSkJJRzJfR0VURFdPUkQoZHApOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2gob3ApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9PUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTCkgfCAoKHRtcDEgfCB0bXAyKSAmIG1hc2tMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9BTkQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza0wpIHwgKCh0bXAxICYgdG1wMikgJiBtYXNrTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE9SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICgodG1wMSBeIHRtcDIpICYgbWFza0wpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hOT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza0wpIHwgKCh+KHRtcDEgXiB0bXAyKSkgJiBtYXNrTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfUkVQTEFDRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTCkgfCAodG1wMSAmIG1hc2tMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkcFswXSA9IChGWF9CWVRFKSh0bXAgPj4gMjQpOworICAgICAgICAgICAgICAgICAgICBkcFsxXSA9IChGWF9CWVRFKSh0bXAgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICBkcFsyXSA9IChGWF9CWVRFKSh0bXAgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgIGRwWzNdID0gKEZYX0JZVEUpdG1wOworICAgICAgICAgICAgICAgICAgICBzcCArPSA0OworICAgICAgICAgICAgICAgICAgICBkcCArPSA0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IoeHggPSAwOyB4eCA8IG1pZGRsZUR3b3JkczsgeHgrKykgeworICAgICAgICAgICAgICAgICAgICB0bXAxID0gKEpCSUcyX0dFVERXT1JEKHNwKSA8PCBzaGlmdDEpIHwgKEpCSUcyX0dFVERXT1JEKHNwICsgNCkgPj4gc2hpZnQyKTsKKyAgICAgICAgICAgICAgICAgICAgdG1wMiA9IEpCSUcyX0dFVERXT1JEKGRwKTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKG9wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wMSB8IHRtcDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfQU5EOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHRtcDEgJiB0bXAyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hPUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXAxIF4gdG1wMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IH4odG1wMSBeIHRtcDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1JFUExBQ0U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkcFswXSA9IChGWF9CWVRFKSh0bXAgPj4gMjQpOworICAgICAgICAgICAgICAgICAgICBkcFsxXSA9IChGWF9CWVRFKSh0bXAgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICBkcFsyXSA9IChGWF9CWVRFKSh0bXAgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgIGRwWzNdID0gKEZYX0JZVEUpdG1wOworICAgICAgICAgICAgICAgICAgICBzcCArPSA0OworICAgICAgICAgICAgICAgICAgICBkcCArPSA0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihkMiAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRtcDEgPSAoSkJJRzJfR0VURFdPUkQoc3ApIDw8IHNoaWZ0MSkgfCAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzcCArIDQpIDwgbGluZVNyYyArIGxpbmVMZWZ0ID8gSkJJRzJfR0VURFdPUkQoc3AgKyA0KSA6IDApID4+IHNoaWZ0Mik7CisgICAgICAgICAgICAgICAgICAgIHRtcDIgPSBKQklHMl9HRVREV09SRChkcCk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaChvcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tSKSB8ICgodG1wMSB8IHRtcDIpICYgbWFza1IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAoKHRtcDEgJiB0bXAyKSAmIG1hc2tSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza1IpIHwgKCh0bXAxIF4gdG1wMikgJiBtYXNrUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAoKH4odG1wMSBeIHRtcDIpKSAmIG1hc2tSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tSKSB8ICh0bXAxICYgbWFza1IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRwWzBdID0gKEZYX0JZVEUpKHRtcCA+PiAyNCk7CisgICAgICAgICAgICAgICAgICAgIGRwWzFdID0gKEZYX0JZVEUpKHRtcCA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgIGRwWzJdID0gKEZYX0JZVEUpKHRtcCA+PiA4KTsKKyAgICAgICAgICAgICAgICAgICAgZHBbM10gPSAoRlhfQllURSl0bXA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmVTcmMgKz0gbV9uU3RyaWRlOworICAgICAgICAgICAgICAgIGxpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYoczEgPT0gZDEpIHsKKyAgICAgICAgICAgIG1pZGRsZUR3b3JkcyA9ICh4ZDEgPj4gNSkgLSAoKHhkMCArIDMxKSA+PiA1KTsKKyAgICAgICAgICAgIGZvcih5eSA9IHlkMDsgeXkgPCB5ZDE7IHl5KyspIHsKKyAgICAgICAgICAgICAgICBzcCA9IGxpbmVTcmM7CisgICAgICAgICAgICAgICAgZHAgPSBsaW5lRHN0OworICAgICAgICAgICAgICAgIGlmKGQxICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdG1wMSA9IEpCSUcyX0dFVERXT1JEKHNwKTsKKyAgICAgICAgICAgICAgICAgICAgdG1wMiA9IEpCSUcyX0dFVERXT1JEKGRwKTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKG9wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza0wpIHwgKCh0bXAxIHwgdG1wMikgJiBtYXNrTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfQU5EOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICgodG1wMSAmIHRtcDIpICYgbWFza0wpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hPUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTCkgfCAoKHRtcDEgXiB0bXAyKSAmIG1hc2tMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICgofih0bXAxIF4gdG1wMikpICYgbWFza0wpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1JFUExBQ0U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza0wpIHwgKHRtcDEgJiBtYXNrTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZHBbMF0gPSAoRlhfQllURSkodG1wID4+IDI0KTsKKyAgICAgICAgICAgICAgICAgICAgZHBbMV0gPSAoRlhfQllURSkodG1wID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgZHBbMl0gPSAoRlhfQllURSkodG1wID4+IDgpOworICAgICAgICAgICAgICAgICAgICBkcFszXSA9IChGWF9CWVRFKXRtcDsKKyAgICAgICAgICAgICAgICAgICAgc3AgKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgZHAgKz0gNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yKHh4ID0gMDsgeHggPCBtaWRkbGVEd29yZHM7IHh4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdG1wMSA9IEpCSUcyX0dFVERXT1JEKHNwKTsKKyAgICAgICAgICAgICAgICAgICAgdG1wMiA9IEpCSUcyX0dFVERXT1JEKGRwKTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKG9wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wMSB8IHRtcDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfQU5EOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHRtcDEgJiB0bXAyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hPUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXAxIF4gdG1wMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IH4odG1wMSBeIHRtcDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1JFUExBQ0U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkcFswXSA9IChGWF9CWVRFKSh0bXAgPj4gMjQpOworICAgICAgICAgICAgICAgICAgICBkcFsxXSA9IChGWF9CWVRFKSh0bXAgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICBkcFsyXSA9IChGWF9CWVRFKSh0bXAgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgIGRwWzNdID0gKEZYX0JZVEUpdG1wOworICAgICAgICAgICAgICAgICAgICBzcCArPSA0OworICAgICAgICAgICAgICAgICAgICBkcCArPSA0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihkMiAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRtcDEgPSBKQklHMl9HRVREV09SRChzcCk7CisgICAgICAgICAgICAgICAgICAgIHRtcDIgPSBKQklHMl9HRVREV09SRChkcCk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaChvcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tSKSB8ICgodG1wMSB8IHRtcDIpICYgbWFza1IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAoKHRtcDEgJiB0bXAyKSAmIG1hc2tSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza1IpIHwgKCh0bXAxIF4gdG1wMikgJiBtYXNrUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAoKH4odG1wMSBeIHRtcDIpKSAmIG1hc2tSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tSKSB8ICh0bXAxICYgbWFza1IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRwWzBdID0gKEZYX0JZVEUpKHRtcCA+PiAyNCk7CisgICAgICAgICAgICAgICAgICAgIGRwWzFdID0gKEZYX0JZVEUpKHRtcCA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgIGRwWzJdID0gKEZYX0JZVEUpKHRtcCA+PiA4KTsKKyAgICAgICAgICAgICAgICAgICAgZHBbM10gPSAoRlhfQllURSl0bXA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmVTcmMgKz0gbV9uU3RyaWRlOworICAgICAgICAgICAgICAgIGxpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2hpZnQxID0gZDEgLSBzMTsKKyAgICAgICAgICAgIHNoaWZ0MiA9IDMyIC0gc2hpZnQxOworICAgICAgICAgICAgbWlkZGxlRHdvcmRzID0gKHhkMSA+PiA1KSAtICgoeGQwICsgMzEpID4+IDUpOworICAgICAgICAgICAgZm9yKHl5ID0geWQwOyB5eSA8IHlkMTsgeXkrKykgeworICAgICAgICAgICAgICAgIHNwID0gbGluZVNyYzsKKyAgICAgICAgICAgICAgICBkcCA9IGxpbmVEc3Q7CisgICAgICAgICAgICAgICAgaWYoZDEgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICB0bXAxID0gSkJJRzJfR0VURFdPUkQoc3ApID4+IHNoaWZ0MTsKKyAgICAgICAgICAgICAgICAgICAgdG1wMiA9IEpCSUcyX0dFVERXT1JEKGRwKTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKG9wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza0wpIHwgKCh0bXAxIHwgdG1wMikgJiBtYXNrTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfQU5EOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICgodG1wMSAmIHRtcDIpICYgbWFza0wpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hPUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTCkgfCAoKHRtcDEgXiB0bXAyKSAmIG1hc2tMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICgofih0bXAxIF4gdG1wMikpICYgbWFza0wpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1JFUExBQ0U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza0wpIHwgKHRtcDEgJiBtYXNrTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZHBbMF0gPSAoRlhfQllURSkodG1wID4+IDI0KTsKKyAgICAgICAgICAgICAgICAgICAgZHBbMV0gPSAoRlhfQllURSkodG1wID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgZHBbMl0gPSAoRlhfQllURSkodG1wID4+IDgpOworICAgICAgICAgICAgICAgICAgICBkcFszXSA9IChGWF9CWVRFKXRtcDsKKyAgICAgICAgICAgICAgICAgICAgZHAgKz0gNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yKHh4ID0gMDsgeHggPCBtaWRkbGVEd29yZHM7IHh4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdG1wMSA9IChKQklHMl9HRVREV09SRChzcCkgPDwgc2hpZnQyKSB8ICgoSkJJRzJfR0VURFdPUkQoc3AgKyA0KSkgPj4gc2hpZnQxKTsKKyAgICAgICAgICAgICAgICAgICAgdG1wMiA9IEpCSUcyX0dFVERXT1JEKGRwKTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKG9wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wMSB8IHRtcDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfQU5EOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHRtcDEgJiB0bXAyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hPUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXAxIF4gdG1wMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IH4odG1wMSBeIHRtcDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1JFUExBQ0U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkcFswXSA9IChGWF9CWVRFKSh0bXAgPj4gMjQpOworICAgICAgICAgICAgICAgICAgICBkcFsxXSA9IChGWF9CWVRFKSh0bXAgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICBkcFsyXSA9IChGWF9CWVRFKSh0bXAgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgIGRwWzNdID0gKEZYX0JZVEUpdG1wOworICAgICAgICAgICAgICAgICAgICBzcCArPSA0OworICAgICAgICAgICAgICAgICAgICBkcCArPSA0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihkMiAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRtcDEgPSAoSkJJRzJfR0VURFdPUkQoc3ApIDw8IHNoaWZ0MikgfCAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzcCArIDQpIDwgbGluZVNyYyArIGxpbmVMZWZ0ID8gSkJJRzJfR0VURFdPUkQoc3AgKyA0KSA6IDApID4+IHNoaWZ0MSk7CisgICAgICAgICAgICAgICAgICAgIHRtcDIgPSBKQklHMl9HRVREV09SRChkcCk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaChvcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tSKSB8ICgodG1wMSB8IHRtcDIpICYgbWFza1IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAoKHRtcDEgJiB0bXAyKSAmIG1hc2tSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza1IpIHwgKCh0bXAxIF4gdG1wMikgJiBtYXNrUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAoKH4odG1wMSBeIHRtcDIpKSAmIG1hc2tSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tSKSB8ICh0bXAxICYgbWFza1IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRwWzBdID0gKEZYX0JZVEUpKHRtcCA+PiAyNCk7CisgICAgICAgICAgICAgICAgICAgIGRwWzFdID0gKEZYX0JZVEUpKHRtcCA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgIGRwWzJdID0gKEZYX0JZVEUpKHRtcCA+PiA4KTsKKyAgICAgICAgICAgICAgICAgICAgZHBbM10gPSAoRlhfQllURSl0bXA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmVTcmMgKz0gbV9uU3RyaWRlOworICAgICAgICAgICAgICAgIGxpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAxOworfQorRlhfQk9PTCBDSkJpZzJfSW1hZ2U6OmNvbXBvc2VUb19vcHQyKENKQmlnMl9JbWFnZSAqcERzdCwgRlhfSU5UMzIgeCwgRlhfSU5UMzIgeSwgSkJpZzJDb21wb3NlT3Agb3AsIGNvbnN0IEZYX1JFQ1QqIHBTcmNSZWN0KQoreworICAgIEZYX0lOVDMyIHhzMCwgeXMwLCB4czEsIHlzMSwgeGQwLCB5ZDAsIHhkMSwgeWQxLCB4eCwgeXksIHcsIGgsIG1pZGRsZUR3b3JkcywgbGluZUxlZnQ7CisgICAgRlhfRFdPUkQgczEsIGQxLCBkMiwgc2hpZnQsIHNoaWZ0MSwgc2hpZnQyLCB0bXAsIHRtcDEsIHRtcDIsIG1hc2tMLCBtYXNrUiwgbWFza007CisgICAgRlhfQllURSAqbGluZVNyYywgKmxpbmVEc3QsICpzcCwgKmRwOworICAgIEZYX0lOVDMyIHN3LCBzaDsKKyAgICBpZiAoIW1fcERhdGEpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoeCA8IC0xMDQ4NTc2IHx8IHggPiAxMDQ4NTc2IHx8IHkgPCAtMTA0ODU3NiB8fCB5ID4gMTA0ODU3NikgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHN3ID0gcFNyY1JlY3QtPldpZHRoKCk7CisgICAgc2ggPSBwU3JjUmVjdC0+SGVpZ2h0KCk7CisgICAgaWYoeSA8IDApIHsKKyAgICAgICAgeXMwID0gLXk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgeXMwID0gMDsKKyAgICB9CisgICAgaWYoeSArIHNoID4gcERzdC0+bV9uSGVpZ2h0KSB7CisgICAgICAgIHlzMSA9IHBEc3QtPm1fbkhlaWdodCAtIHk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgeXMxID0gc2g7CisgICAgfQorICAgIGlmKHggPCAwKSB7CisgICAgICAgIHhzMCA9IC14OworICAgIH0gZWxzZSB7CisgICAgICAgIHhzMCA9IDA7CisgICAgfQorICAgIGlmKHggKyBzdyA+IHBEc3QtPm1fbldpZHRoKSB7CisgICAgICAgIHhzMSA9IHBEc3QtPm1fbldpZHRoIC0geDsKKyAgICB9IGVsc2UgeworICAgICAgICB4czEgPSBzdzsKKyAgICB9CisgICAgaWYoKHlzMCA+PSB5czEpIHx8ICh4czAgPj0geHMxKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgdyA9IHhzMSAtIHhzMDsKKyAgICBoID0geXMxIC0geXMwOworICAgIGlmKHkgPCAwKSB7CisgICAgICAgIHlkMCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgeWQwID0geTsKKyAgICB9CisgICAgaWYoeCA8IDApIHsKKyAgICAgICAgeGQwID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICB4ZDAgPSB4OworICAgIH0KKyAgICB4ZDEgPSB4ZDAgKyB3OworICAgIHlkMSA9IHlkMCArIGg7CisgICAgZDEgPSB4ZDAgJiAzMTsKKyAgICBkMiA9IHhkMSAmIDMxOworICAgIHMxID0geHMwICYgMzE7CisgICAgbWFza0wgPSAweGZmZmZmZmZmID4+IGQxOworICAgIG1hc2tSID0gMHhmZmZmZmZmZiA8PCAoKDMyIC0gKHhkMSAmIDMxKSkgJSAzMik7CisgICAgbWFza00gPSBtYXNrTCAmIG1hc2tSOworICAgIGxpbmVTcmMgPSBtX3BEYXRhICsgKHBTcmNSZWN0LT50b3AgKyB5czApICogbV9uU3RyaWRlICsgKCgoeHMwICsgcFNyY1JlY3QtPmxlZnQpID4+IDUpIDw8IDIpOworICAgIGxpbmVMZWZ0ID0gbV9uU3RyaWRlIC0gKCh4czAgPj4gNSkgPDwgMik7CisgICAgbGluZURzdCA9IHBEc3QtPm1fcERhdGEgKyB5ZDAgKiBwRHN0LT5tX25TdHJpZGUgKyAoKHhkMCA+PiA1KSA8PCAyKTsKKyAgICBpZigoeGQwICYgfjMxKSA9PSAoKHhkMSAtIDEpICYgfjMxKSkgeworICAgICAgICBpZigoeHMwICYgfjMxKSA9PSAoKHhzMSAtIDEpICYgfjMxKSkgeworICAgICAgICAgICAgaWYoczEgPiBkMSkgeworICAgICAgICAgICAgICAgIHNoaWZ0ID0gczEgLSBkMTsKKyAgICAgICAgICAgICAgICBmb3IoeXkgPSB5ZDA7IHl5IDwgeWQxOyB5eSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRtcDEgPSBKQklHMl9HRVREV09SRChsaW5lU3JjKSA8PCBzaGlmdDsKKyAgICAgICAgICAgICAgICAgICAgdG1wMiA9IEpCSUcyX0dFVERXT1JEKGxpbmVEc3QpOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2gob3ApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9PUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAoKHRtcDEgfCB0bXAyKSAmIG1hc2tNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9BTkQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza00pIHwgKCh0bXAxICYgdG1wMikgJiBtYXNrTSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE9SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tNKSB8ICgodG1wMSBeIHRtcDIpICYgbWFza00pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hOT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza00pIHwgKCh+KHRtcDEgXiB0bXAyKSkgJiBtYXNrTSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfUkVQTEFDRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAodG1wMSAmIG1hc2tNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBsaW5lRHN0WzBdID0gKEZYX0JZVEUpKHRtcCA+PiAyNCk7CisgICAgICAgICAgICAgICAgICAgIGxpbmVEc3RbMV0gPSAoRlhfQllURSkodG1wID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgbGluZURzdFsyXSA9IChGWF9CWVRFKSh0bXAgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgIGxpbmVEc3RbM10gPSAoRlhfQllURSl0bXA7CisgICAgICAgICAgICAgICAgICAgIGxpbmVTcmMgKz0gbV9uU3RyaWRlOworICAgICAgICAgICAgICAgICAgICBsaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNoaWZ0ID0gZDEgLSBzMTsKKyAgICAgICAgICAgICAgICBmb3IoeXkgPSB5ZDA7IHl5IDwgeWQxOyB5eSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRtcDEgPSBKQklHMl9HRVREV09SRChsaW5lU3JjKSA+PiBzaGlmdDsKKyAgICAgICAgICAgICAgICAgICAgdG1wMiA9IEpCSUcyX0dFVERXT1JEKGxpbmVEc3QpOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2gob3ApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9PUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAoKHRtcDEgfCB0bXAyKSAmIG1hc2tNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9BTkQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza00pIHwgKCh0bXAxICYgdG1wMikgJiBtYXNrTSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE9SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tNKSB8ICgodG1wMSBeIHRtcDIpICYgbWFza00pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hOT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza00pIHwgKCh+KHRtcDEgXiB0bXAyKSkgJiBtYXNrTSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfUkVQTEFDRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAodG1wMSAmIG1hc2tNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBsaW5lRHN0WzBdID0gKEZYX0JZVEUpKHRtcCA+PiAyNCk7CisgICAgICAgICAgICAgICAgICAgIGxpbmVEc3RbMV0gPSAoRlhfQllURSkodG1wID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgbGluZURzdFsyXSA9IChGWF9CWVRFKSh0bXAgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgIGxpbmVEc3RbM10gPSAoRlhfQllURSl0bXA7CisgICAgICAgICAgICAgICAgICAgIGxpbmVTcmMgKz0gbV9uU3RyaWRlOworICAgICAgICAgICAgICAgICAgICBsaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzaGlmdDEgPSBzMSAtIGQxOworICAgICAgICAgICAgc2hpZnQyID0gMzIgLSBzaGlmdDE7CisgICAgICAgICAgICBmb3IoeXkgPSB5ZDA7IHl5IDwgeWQxOyB5eSsrKSB7CisgICAgICAgICAgICAgICAgdG1wMSA9IChKQklHMl9HRVREV09SRChsaW5lU3JjKSA8PCBzaGlmdDEpIHwgKEpCSUcyX0dFVERXT1JEKGxpbmVTcmMgKyA0KSA+PiBzaGlmdDIpOworICAgICAgICAgICAgICAgIHRtcDIgPSBKQklHMl9HRVREV09SRChsaW5lRHN0KTsKKyAgICAgICAgICAgICAgICBzd2l0Y2gob3ApIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOgorICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza00pIHwgKCh0bXAxIHwgdG1wMikgJiBtYXNrTSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tNKSB8ICgodG1wMSAmIHRtcDIpICYgbWFza00pOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6CisgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTSkgfCAoKHRtcDEgXiB0bXAyKSAmIG1hc2tNKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tNKSB8ICgofih0bXAxIF4gdG1wMikpICYgbWFza00pOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza00pIHwgKHRtcDEgJiBtYXNrTSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGluZURzdFswXSA9IChGWF9CWVRFKSh0bXAgPj4gMjQpOworICAgICAgICAgICAgICAgIGxpbmVEc3RbMV0gPSAoRlhfQllURSkodG1wID4+IDE2KTsKKyAgICAgICAgICAgICAgICBsaW5lRHN0WzJdID0gKEZYX0JZVEUpKHRtcCA+PiA4KTsKKyAgICAgICAgICAgICAgICBsaW5lRHN0WzNdID0gKEZYX0JZVEUpdG1wOworICAgICAgICAgICAgICAgIGxpbmVTcmMgKz0gbV9uU3RyaWRlOworICAgICAgICAgICAgICAgIGxpbmVEc3QgKz0gcERzdC0+bV9uU3RyaWRlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYoczEgPiBkMSkgeworICAgICAgICAgICAgc2hpZnQxID0gczEgLSBkMTsKKyAgICAgICAgICAgIHNoaWZ0MiA9IDMyIC0gc2hpZnQxOworICAgICAgICAgICAgbWlkZGxlRHdvcmRzID0gKHhkMSA+PiA1KSAtICgoeGQwICsgMzEpID4+IDUpOworICAgICAgICAgICAgZm9yKHl5ID0geWQwOyB5eSA8IHlkMTsgeXkrKykgeworICAgICAgICAgICAgICAgIHNwID0gbGluZVNyYzsKKyAgICAgICAgICAgICAgICBkcCA9IGxpbmVEc3Q7CisgICAgICAgICAgICAgICAgaWYoZDEgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICB0bXAxID0gKEpCSUcyX0dFVERXT1JEKHNwKSA8PCBzaGlmdDEpIHwgKEpCSUcyX0dFVERXT1JEKHNwICsgNCkgPj4gc2hpZnQyKTsKKyAgICAgICAgICAgICAgICAgICAgdG1wMiA9IEpCSUcyX0dFVERXT1JEKGRwKTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoKG9wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza0wpIHwgKCh0bXAxIHwgdG1wMikgJiBtYXNrTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfQU5EOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICgodG1wMSAmIHRtcDIpICYgbWFza0wpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hPUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTCkgfCAoKHRtcDEgXiB0bXAyKSAmIG1hc2tMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YTk9SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICgofih0bXAxIF4gdG1wMikpICYgbWFza0wpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1JFUExBQ0U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza0wpIHwgKHRtcDEgJiBtYXNrTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZHBbMF0gPSAoRlhfQllURSkodG1wID4+IDI0KTsKKyAgICAgICAgICAgICAgICAgICAgZHBbMV0gPSAoRlhfQllURSkodG1wID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgZHBbMl0gPSAoRlhfQllURSkodG1wID4+IDgpOworICAgICAgICAgICAgICAgICAgICBkcFszXSA9IChGWF9CWVRFKXRtcDsKKyAgICAgICAgICAgICAgICAgICAgc3AgKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgZHAgKz0gNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yKHh4ID0gMDsgeHggPCBtaWRkbGVEd29yZHM7IHh4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdG1wMSA9IChKQklHMl9HRVREV09SRChzcCkgPDwgc2hpZnQxKSB8IChKQklHMl9HRVREV09SRChzcCArIDQpID4+IHNoaWZ0Mik7CisgICAgICAgICAgICAgICAgICAgIHRtcDIgPSBKQklHMl9HRVREV09SRChkcCk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaChvcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHRtcDEgfCB0bXAyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXAxICYgdG1wMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wMSBeIHRtcDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB+KHRtcDEgXiB0bXAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHRtcDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZHBbMF0gPSAoRlhfQllURSkodG1wID4+IDI0KTsKKyAgICAgICAgICAgICAgICAgICAgZHBbMV0gPSAoRlhfQllURSkodG1wID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgZHBbMl0gPSAoRlhfQllURSkodG1wID4+IDgpOworICAgICAgICAgICAgICAgICAgICBkcFszXSA9IChGWF9CWVRFKXRtcDsKKyAgICAgICAgICAgICAgICAgICAgc3AgKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgZHAgKz0gNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoZDIgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICB0bXAxID0gKEpCSUcyX0dFVERXT1JEKHNwKSA8PCBzaGlmdDEpIHwgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoc3AgKyA0KSA8IGxpbmVTcmMgKyBsaW5lTGVmdCA/IEpCSUcyX0dFVERXT1JEKHNwICsgNCkgOiAwKSA+PiBzaGlmdDIpOworICAgICAgICAgICAgICAgICAgICB0bXAyID0gSkJJRzJfR0VURFdPUkQoZHApOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2gob3ApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9PUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAoKHRtcDEgfCB0bXAyKSAmIG1hc2tSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9BTkQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza1IpIHwgKCh0bXAxICYgdG1wMikgJiBtYXNrUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE9SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tSKSB8ICgodG1wMSBeIHRtcDIpICYgbWFza1IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hOT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza1IpIHwgKCh+KHRtcDEgXiB0bXAyKSkgJiBtYXNrUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfUkVQTEFDRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAodG1wMSAmIG1hc2tSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkcFswXSA9IChGWF9CWVRFKSh0bXAgPj4gMjQpOworICAgICAgICAgICAgICAgICAgICBkcFsxXSA9IChGWF9CWVRFKSh0bXAgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICBkcFsyXSA9IChGWF9CWVRFKSh0bXAgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgIGRwWzNdID0gKEZYX0JZVEUpdG1wOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaW5lU3JjICs9IG1fblN0cmlkZTsKKyAgICAgICAgICAgICAgICBsaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmKHMxID09IGQxKSB7CisgICAgICAgICAgICBtaWRkbGVEd29yZHMgPSAoeGQxID4+IDUpIC0gKCh4ZDAgKyAzMSkgPj4gNSk7CisgICAgICAgICAgICBmb3IoeXkgPSB5ZDA7IHl5IDwgeWQxOyB5eSsrKSB7CisgICAgICAgICAgICAgICAgc3AgPSBsaW5lU3JjOworICAgICAgICAgICAgICAgIGRwID0gbGluZURzdDsKKyAgICAgICAgICAgICAgICBpZihkMSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRtcDEgPSBKQklHMl9HRVREV09SRChzcCk7CisgICAgICAgICAgICAgICAgICAgIHRtcDIgPSBKQklHMl9HRVREV09SRChkcCk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaChvcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICgodG1wMSB8IHRtcDIpICYgbWFza0wpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTCkgfCAoKHRtcDEgJiB0bXAyKSAmIG1hc2tMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza0wpIHwgKCh0bXAxIF4gdG1wMikgJiBtYXNrTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTCkgfCAoKH4odG1wMSBeIHRtcDIpKSAmIG1hc2tMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICh0bXAxICYgbWFza0wpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRwWzBdID0gKEZYX0JZVEUpKHRtcCA+PiAyNCk7CisgICAgICAgICAgICAgICAgICAgIGRwWzFdID0gKEZYX0JZVEUpKHRtcCA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgIGRwWzJdID0gKEZYX0JZVEUpKHRtcCA+PiA4KTsKKyAgICAgICAgICAgICAgICAgICAgZHBbM10gPSAoRlhfQllURSl0bXA7CisgICAgICAgICAgICAgICAgICAgIHNwICs9IDQ7CisgICAgICAgICAgICAgICAgICAgIGRwICs9IDQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvcih4eCA9IDA7IHh4IDwgbWlkZGxlRHdvcmRzOyB4eCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRtcDEgPSBKQklHMl9HRVREV09SRChzcCk7CisgICAgICAgICAgICAgICAgICAgIHRtcDIgPSBKQklHMl9HRVREV09SRChkcCk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaChvcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHRtcDEgfCB0bXAyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXAxICYgdG1wMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wMSBeIHRtcDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB+KHRtcDEgXiB0bXAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHRtcDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZHBbMF0gPSAoRlhfQllURSkodG1wID4+IDI0KTsKKyAgICAgICAgICAgICAgICAgICAgZHBbMV0gPSAoRlhfQllURSkodG1wID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgZHBbMl0gPSAoRlhfQllURSkodG1wID4+IDgpOworICAgICAgICAgICAgICAgICAgICBkcFszXSA9IChGWF9CWVRFKXRtcDsKKyAgICAgICAgICAgICAgICAgICAgc3AgKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgZHAgKz0gNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoZDIgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICB0bXAxID0gSkJJRzJfR0VURFdPUkQoc3ApOworICAgICAgICAgICAgICAgICAgICB0bXAyID0gSkJJRzJfR0VURFdPUkQoZHApOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2gob3ApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9PUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAoKHRtcDEgfCB0bXAyKSAmIG1hc2tSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9BTkQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza1IpIHwgKCh0bXAxICYgdG1wMikgJiBtYXNrUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE9SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tSKSB8ICgodG1wMSBeIHRtcDIpICYgbWFza1IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hOT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza1IpIHwgKCh+KHRtcDEgXiB0bXAyKSkgJiBtYXNrUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfUkVQTEFDRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAodG1wMSAmIG1hc2tSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkcFswXSA9IChGWF9CWVRFKSh0bXAgPj4gMjQpOworICAgICAgICAgICAgICAgICAgICBkcFsxXSA9IChGWF9CWVRFKSh0bXAgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICBkcFsyXSA9IChGWF9CWVRFKSh0bXAgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgIGRwWzNdID0gKEZYX0JZVEUpdG1wOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaW5lU3JjICs9IG1fblN0cmlkZTsKKyAgICAgICAgICAgICAgICBsaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNoaWZ0MSA9IGQxIC0gczE7CisgICAgICAgICAgICBzaGlmdDIgPSAzMiAtIHNoaWZ0MTsKKyAgICAgICAgICAgIG1pZGRsZUR3b3JkcyA9ICh4ZDEgPj4gNSkgLSAoKHhkMCArIDMxKSA+PiA1KTsKKyAgICAgICAgICAgIGZvcih5eSA9IHlkMDsgeXkgPCB5ZDE7IHl5KyspIHsKKyAgICAgICAgICAgICAgICBzcCA9IGxpbmVTcmM7CisgICAgICAgICAgICAgICAgZHAgPSBsaW5lRHN0OworICAgICAgICAgICAgICAgIGlmKGQxICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdG1wMSA9IEpCSUcyX0dFVERXT1JEKHNwKSA+PiBzaGlmdDE7CisgICAgICAgICAgICAgICAgICAgIHRtcDIgPSBKQklHMl9HRVREV09SRChkcCk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaChvcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICgodG1wMSB8IHRtcDIpICYgbWFza0wpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTCkgfCAoKHRtcDEgJiB0bXAyKSAmIG1hc2tMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza0wpIHwgKCh0bXAxIF4gdG1wMikgJiBtYXNrTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrTCkgfCAoKH4odG1wMSBeIHRtcDIpKSAmIG1hc2tMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tMKSB8ICh0bXAxICYgbWFza0wpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRwWzBdID0gKEZYX0JZVEUpKHRtcCA+PiAyNCk7CisgICAgICAgICAgICAgICAgICAgIGRwWzFdID0gKEZYX0JZVEUpKHRtcCA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgIGRwWzJdID0gKEZYX0JZVEUpKHRtcCA+PiA4KTsKKyAgICAgICAgICAgICAgICAgICAgZHBbM10gPSAoRlhfQllURSl0bXA7CisgICAgICAgICAgICAgICAgICAgIGRwICs9IDQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvcih4eCA9IDA7IHh4IDwgbWlkZGxlRHdvcmRzOyB4eCsrKSB7CisgICAgICAgICAgICAgICAgICAgIHRtcDEgPSAoSkJJRzJfR0VURFdPUkQoc3ApIDw8IHNoaWZ0MikgfCAoKEpCSUcyX0dFVERXT1JEKHNwICsgNCkpID4+IHNoaWZ0MSk7CisgICAgICAgICAgICAgICAgICAgIHRtcDIgPSBKQklHMl9HRVREV09SRChkcCk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaChvcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX09SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHRtcDEgfCB0bXAyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX0FORDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXAxICYgdG1wMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9YT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wMSBeIHRtcDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE5PUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB+KHRtcDEgXiB0bXAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9SRVBMQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHRtcDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZHBbMF0gPSAoRlhfQllURSkodG1wID4+IDI0KTsKKyAgICAgICAgICAgICAgICAgICAgZHBbMV0gPSAoRlhfQllURSkodG1wID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgZHBbMl0gPSAoRlhfQllURSkodG1wID4+IDgpOworICAgICAgICAgICAgICAgICAgICBkcFszXSA9IChGWF9CWVRFKXRtcDsKKyAgICAgICAgICAgICAgICAgICAgc3AgKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgZHAgKz0gNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoZDIgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICB0bXAxID0gKEpCSUcyX0dFVERXT1JEKHNwKSA8PCBzaGlmdDIpIHwgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoc3AgKyA0KSA8IGxpbmVTcmMgKyBsaW5lTGVmdCA/IEpCSUcyX0dFVERXT1JEKHNwICsgNCkgOiAwKSA+PiBzaGlmdDEpOworICAgICAgICAgICAgICAgICAgICB0bXAyID0gSkJJRzJfR0VURFdPUkQoZHApOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2gob3ApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9PUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAoKHRtcDEgfCB0bXAyKSAmIG1hc2tSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSkJJRzJfQ09NUE9TRV9BTkQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza1IpIHwgKCh0bXAxICYgdG1wMikgJiBtYXNrUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfWE9SOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9ICh0bXAyICYgfm1hc2tSKSB8ICgodG1wMSBeIHRtcDIpICYgbWFza1IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKQklHMl9DT01QT1NFX1hOT1I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gKHRtcDIgJiB+bWFza1IpIHwgKCh+KHRtcDEgXiB0bXAyKSkgJiBtYXNrUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEpCSUcyX0NPTVBPU0VfUkVQTEFDRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSAodG1wMiAmIH5tYXNrUikgfCAodG1wMSAmIG1hc2tSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkcFswXSA9IChGWF9CWVRFKSh0bXAgPj4gMjQpOworICAgICAgICAgICAgICAgICAgICBkcFsxXSA9IChGWF9CWVRFKSh0bXAgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICBkcFsyXSA9IChGWF9CWVRFKSh0bXAgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgIGRwWzNdID0gKEZYX0JZVEUpdG1wOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaW5lU3JjICs9IG1fblN0cmlkZTsKKyAgICAgICAgICAgICAgICBsaW5lRHN0ICs9IHBEc3QtPm1fblN0cmlkZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfSW1hZ2UuaCBiL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfSW1hZ2UuaAppbmRleCAzYzY5ZjY0Li41ZDA2Njk1IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0ltYWdlLmgKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9JbWFnZS5oCkBAIC0xLDY4ICsxLDY4IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9KQklHMl9JTUFHRV9IXw0KLSNkZWZpbmUgX0pCSUcyX0lNQUdFX0hfDQotI2luY2x1ZGUgIkpCaWcyX0RlZmluZS5oIg0KLSNpbmNsdWRlICJKQmlnMl9Nb2R1bGUuaCINCi10eXBlZGVmIGVudW0gew0KLSAgICBKQklHMl9DT01QT1NFX09SCQk9IDAsDQotICAgIEpCSUcyX0NPTVBPU0VfQU5ECQk9IDEsDQotICAgIEpCSUcyX0NPTVBPU0VfWE9SCQk9IDIsDQotICAgIEpCSUcyX0NPTVBPU0VfWE5PUgkJPSAzLA0KLSAgICBKQklHMl9DT01QT1NFX1JFUExBQ0UJPSA0DQotfSBKQmlnMkNvbXBvc2VPcDsNCi1zdHJ1Y3QgRlhfUkVDVDsNCi1jbGFzcyBDSkJpZzJfSW1hZ2UgOiBwdWJsaWMgQ0pCaWcyX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENKQmlnMl9JbWFnZShGWF9JTlQzMiB3LCBGWF9JTlQzMiBoKTsNCi0NCi0gICAgQ0pCaWcyX0ltYWdlKEZYX0lOVDMyIHcsIEZYX0lOVDMyIGgsIEZYX0lOVDMyIHN0cmlkZSwgRlhfQllURSpwQnVmKTsNCi0NCi0gICAgQ0pCaWcyX0ltYWdlKENKQmlnMl9JbWFnZSAmaW0pOw0KLQ0KLSAgICB+Q0pCaWcyX0ltYWdlKCk7DQotDQotICAgIEZYX0JPT0wgZ2V0UGl4ZWwoRlhfSU5UMzIgeCwgRlhfSU5UMzIgeSk7DQotDQotICAgIEZYX0lOVDMyIHNldFBpeGVsKEZYX0lOVDMyIHgsIEZYX0lOVDMyIHksIEZYX0JPT0wgdik7DQotDQotICAgIHZvaWQgY29weUxpbmUoRlhfSU5UMzIgaFRvLCBGWF9JTlQzMiBoRnJvbSk7DQotDQotICAgIHZvaWQgZmlsbChGWF9CT09MIHYpOw0KLQ0KLSAgICBGWF9CT09MIGNvbXBvc2VUbyhDSkJpZzJfSW1hZ2UgKnBEc3QsIEZYX0lOVDMyIHgsIEZYX0lOVDMyIHksIEpCaWcyQ29tcG9zZU9wIG9wKTsNCi0gICAgRlhfQk9PTCBjb21wb3NlVG8oQ0pCaWcyX0ltYWdlICpwRHN0LCBGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBKQmlnMkNvbXBvc2VPcCBvcCwgY29uc3QgRlhfUkVDVCogcFNyY1JlY3QpOw0KLQ0KLSAgICBGWF9CT09MIGNvbXBvc2VUb191bm9wdChDSkJpZzJfSW1hZ2UgKnBEc3QsIEZYX0lOVDMyIHgsIEZYX0lOVDMyIHksIEpCaWcyQ29tcG9zZU9wIG9wKTsNCi0NCi0gICAgRlhfQk9PTCBjb21wb3NlVG9fb3B0KENKQmlnMl9JbWFnZSAqcERzdCwgRlhfSU5UMzIgeCwgRlhfSU5UMzIgeSwgSkJpZzJDb21wb3NlT3Agb3ApOw0KLQ0KLSAgICBGWF9CT09MIGNvbXBvc2VUb19vcHQyKENKQmlnMl9JbWFnZSAqcERzdCwgRlhfSU5UMzIgeCwgRlhfSU5UMzIgeSwgSkJpZzJDb21wb3NlT3Agb3ApOw0KLSAgICBGWF9CT09MIGNvbXBvc2VUb19vcHQyKENKQmlnMl9JbWFnZSAqcERzdCwgRlhfSU5UMzIgeCwgRlhfSU5UMzIgeSwgSkJpZzJDb21wb3NlT3Agb3AsIGNvbnN0IEZYX1JFQ1QqIHBTcmNSZWN0KTsNCi0NCi0gICAgRlhfQk9PTCBjb21wb3NlRnJvbShGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBDSkJpZzJfSW1hZ2UgKnBTcmMsIEpCaWcyQ29tcG9zZU9wIG9wKTsNCi0gICAgRlhfQk9PTCBjb21wb3NlRnJvbShGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBDSkJpZzJfSW1hZ2UgKnBTcmMsIEpCaWcyQ29tcG9zZU9wIG9wLCBjb25zdCBGWF9SRUNUKiBwU3JjUmVjdCk7DQotICAgIENKQmlnMl9JbWFnZSAqc3ViSW1hZ2VfdW5vcHQoRlhfSU5UMzIgeCwgRlhfSU5UMzIgeSwgRlhfSU5UMzIgdywgRlhfSU5UMzIgaCk7DQotDQotICAgIENKQmlnMl9JbWFnZSAqc3ViSW1hZ2UoRlhfSU5UMzIgeCwgRlhfSU5UMzIgeSwgRlhfSU5UMzIgdywgRlhfSU5UMzIgaCk7DQotDQotICAgIHZvaWQgZXhwYW5kKEZYX0lOVDMyIGgsIEZYX0JPT0wgdik7DQotcHVibGljOg0KLQ0KLSAgICBGWF9JTlQzMiBtX25XaWR0aDsNCi0NCi0gICAgRlhfSU5UMzIgbV9uSGVpZ2h0Ow0KLQ0KLSAgICBGWF9JTlQzMiBtX25TdHJpZGU7DQotDQotICAgIEZYX0JZVEUgKm1fcERhdGE7DQotDQotICAgIEZYX0JPT0wgbV9iTmVlZEZyZWU7DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9KQklHMl9JTUFHRV9IXworI2RlZmluZSBfSkJJRzJfSU1BR0VfSF8KKyNpbmNsdWRlICJKQmlnMl9EZWZpbmUuaCIKKyNpbmNsdWRlICJKQmlnMl9Nb2R1bGUuaCIKK3R5cGVkZWYgZW51bSB7CisgICAgSkJJRzJfQ09NUE9TRV9PUgkJPSAwLAorICAgIEpCSUcyX0NPTVBPU0VfQU5ECQk9IDEsCisgICAgSkJJRzJfQ09NUE9TRV9YT1IJCT0gMiwKKyAgICBKQklHMl9DT01QT1NFX1hOT1IJCT0gMywKKyAgICBKQklHMl9DT01QT1NFX1JFUExBQ0UJPSA0Cit9IEpCaWcyQ29tcG9zZU9wOworc3RydWN0IEZYX1JFQ1Q7CitjbGFzcyBDSkJpZzJfSW1hZ2UgOiBwdWJsaWMgQ0pCaWcyX09iamVjdAoreworcHVibGljOgorCisgICAgQ0pCaWcyX0ltYWdlKEZYX0lOVDMyIHcsIEZYX0lOVDMyIGgpOworCisgICAgQ0pCaWcyX0ltYWdlKEZYX0lOVDMyIHcsIEZYX0lOVDMyIGgsIEZYX0lOVDMyIHN0cmlkZSwgRlhfQllURSpwQnVmKTsKKworICAgIENKQmlnMl9JbWFnZShDSkJpZzJfSW1hZ2UgJmltKTsKKworICAgIH5DSkJpZzJfSW1hZ2UoKTsKKworICAgIEZYX0JPT0wgZ2V0UGl4ZWwoRlhfSU5UMzIgeCwgRlhfSU5UMzIgeSk7CisKKyAgICBGWF9JTlQzMiBzZXRQaXhlbChGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBGWF9CT09MIHYpOworCisgICAgdm9pZCBjb3B5TGluZShGWF9JTlQzMiBoVG8sIEZYX0lOVDMyIGhGcm9tKTsKKworICAgIHZvaWQgZmlsbChGWF9CT09MIHYpOworCisgICAgRlhfQk9PTCBjb21wb3NlVG8oQ0pCaWcyX0ltYWdlICpwRHN0LCBGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBKQmlnMkNvbXBvc2VPcCBvcCk7CisgICAgRlhfQk9PTCBjb21wb3NlVG8oQ0pCaWcyX0ltYWdlICpwRHN0LCBGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBKQmlnMkNvbXBvc2VPcCBvcCwgY29uc3QgRlhfUkVDVCogcFNyY1JlY3QpOworCisgICAgRlhfQk9PTCBjb21wb3NlVG9fdW5vcHQoQ0pCaWcyX0ltYWdlICpwRHN0LCBGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBKQmlnMkNvbXBvc2VPcCBvcCk7CisKKyAgICBGWF9CT09MIGNvbXBvc2VUb19vcHQoQ0pCaWcyX0ltYWdlICpwRHN0LCBGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBKQmlnMkNvbXBvc2VPcCBvcCk7CisKKyAgICBGWF9CT09MIGNvbXBvc2VUb19vcHQyKENKQmlnMl9JbWFnZSAqcERzdCwgRlhfSU5UMzIgeCwgRlhfSU5UMzIgeSwgSkJpZzJDb21wb3NlT3Agb3ApOworICAgIEZYX0JPT0wgY29tcG9zZVRvX29wdDIoQ0pCaWcyX0ltYWdlICpwRHN0LCBGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBKQmlnMkNvbXBvc2VPcCBvcCwgY29uc3QgRlhfUkVDVCogcFNyY1JlY3QpOworCisgICAgRlhfQk9PTCBjb21wb3NlRnJvbShGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBDSkJpZzJfSW1hZ2UgKnBTcmMsIEpCaWcyQ29tcG9zZU9wIG9wKTsKKyAgICBGWF9CT09MIGNvbXBvc2VGcm9tKEZYX0lOVDMyIHgsIEZYX0lOVDMyIHksIENKQmlnMl9JbWFnZSAqcFNyYywgSkJpZzJDb21wb3NlT3Agb3AsIGNvbnN0IEZYX1JFQ1QqIHBTcmNSZWN0KTsKKyAgICBDSkJpZzJfSW1hZ2UgKnN1YkltYWdlX3Vub3B0KEZYX0lOVDMyIHgsIEZYX0lOVDMyIHksIEZYX0lOVDMyIHcsIEZYX0lOVDMyIGgpOworCisgICAgQ0pCaWcyX0ltYWdlICpzdWJJbWFnZShGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBGWF9JTlQzMiB3LCBGWF9JTlQzMiBoKTsKKworICAgIHZvaWQgZXhwYW5kKEZYX0lOVDMyIGgsIEZYX0JPT0wgdik7CitwdWJsaWM6CisKKyAgICBGWF9JTlQzMiBtX25XaWR0aDsKKworICAgIEZYX0lOVDMyIG1fbkhlaWdodDsKKworICAgIEZYX0lOVDMyIG1fblN0cmlkZTsKKworICAgIEZYX0JZVEUgKm1fcERhdGE7CisKKyAgICBGWF9CT09MIG1fYk5lZWRGcmVlOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9MaXN0LmggYi9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0xpc3QuaAppbmRleCBhNzM3ZDllLi45MjkyNzI0IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0xpc3QuaAorKysgYi9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX0xpc3QuaApAQCAtMSw2NyArMSw2NyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfSkJJRzJfTElTVF9IXw0KLSNkZWZpbmUgX0pCSUcyX0xJU1RfSF8NCi0jaW5jbHVkZSAiSkJpZzJfRGVmaW5lLmgiDQotI2luY2x1ZGUgIkpCaWcyX09iamVjdC5oIg0KLXRlbXBsYXRlIDxjbGFzcyBUWVBFPg0KLWNsYXNzIENKQmlnMl9MaXN0IDogcHVibGljIENKQmlnMl9PYmplY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICBDSkJpZzJfTGlzdChGWF9JTlQzMiBuU2l6ZSA9IDgpDQotICAgIHsNCi0gICAgICAgIG1fblNpemUgPSBuU2l6ZTsNCi0gICAgICAgIG1fcEFycmF5ID0gKFRZUEUqKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKFRZUEUqKSwgblNpemUpOw0KLSAgICAgICAgbV9uTGVuZ3RoID0gMDsNCi0gICAgfQ0KLQ0KLSAgICB+Q0pCaWcyX0xpc3QoKQ0KLSAgICB7DQotICAgICAgICBjbGVhcigpOw0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKG1fcEFycmF5KTsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkIGNsZWFyKCkNCi0gICAgew0KLSAgICAgICAgRlhfSU5UMzIgaTsNCi0gICAgICAgIGZvcihpID0gMDsgaSA8IG1fbkxlbmd0aDsgaSsrKSB7DQotICAgICAgICAgICAgZGVsZXRlIG1fcEFycmF5W2ldOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9uTGVuZ3RoID0gMDsNCi0gICAgfQ0KLQ0KLSAgICB2b2lkIGFkZEl0ZW0oVFlQRSAqcEl0ZW0pDQotICAgIHsNCi0gICAgICAgIGlmKG1fbkxlbmd0aCA+PSBtX25TaXplKSB7DQotICAgICAgICAgICAgbV9uU2l6ZSArPSA4Ow0KLSAgICAgICAgICAgIG1fcEFycmF5ID0gKFRZUEUqKiltX3BNb2R1bGUtPkpCaWcyX1JlYWxsb2MobV9wQXJyYXksIHNpemVvZihUWVBFKikqbV9uU2l6ZSk7DQotICAgICAgICB9DQotICAgICAgICBtX3BBcnJheVttX25MZW5ndGgrK10gPSBwSXRlbTsNCi0gICAgfQ0KLQ0KLQ0KLSAgICBGWF9JTlQzMiBnZXRMZW5ndGgoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9uTGVuZ3RoOw0KLSAgICB9DQotDQotICAgIFRZUEUgKmdldEF0KEZYX0lOVDMyIG5JbmRleCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcEFycmF5W25JbmRleF07DQotICAgIH0NCi0NCi0gICAgVFlQRSAqZ2V0TGFzdCgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BBcnJheVttX25MZW5ndGggLSAxXTsNCi0gICAgfQ0KLXByaXZhdGU6DQotICAgIEZYX0lOVDMyIG1fblNpemU7DQotICAgIFRZUEUgKiptX3BBcnJheTsNCi0gICAgRlhfSU5UMzIgbV9uTGVuZ3RoOw0KLX07DQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfSkJJRzJfTElTVF9IXworI2RlZmluZSBfSkJJRzJfTElTVF9IXworI2luY2x1ZGUgIkpCaWcyX0RlZmluZS5oIgorI2luY2x1ZGUgIkpCaWcyX09iamVjdC5oIgordGVtcGxhdGUgPGNsYXNzIFRZUEU+CitjbGFzcyBDSkJpZzJfTGlzdCA6IHB1YmxpYyBDSkJpZzJfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDSkJpZzJfTGlzdChGWF9JTlQzMiBuU2l6ZSA9IDgpCisgICAgeworICAgICAgICBtX25TaXplID0gblNpemU7CisgICAgICAgIG1fcEFycmF5ID0gKFRZUEUqKiltX3BNb2R1bGUtPkpCaWcyX01hbGxvYzIoc2l6ZW9mKFRZUEUqKSwgblNpemUpOworICAgICAgICBtX25MZW5ndGggPSAwOworICAgIH0KKworICAgIH5DSkJpZzJfTGlzdCgpCisgICAgeworICAgICAgICBjbGVhcigpOworICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUobV9wQXJyYXkpOworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgRlhfSU5UMzIgaTsKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgbV9uTGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGRlbGV0ZSBtX3BBcnJheVtpXTsKKyAgICAgICAgfQorICAgICAgICBtX25MZW5ndGggPSAwOworICAgIH0KKworICAgIHZvaWQgYWRkSXRlbShUWVBFICpwSXRlbSkKKyAgICB7CisgICAgICAgIGlmKG1fbkxlbmd0aCA+PSBtX25TaXplKSB7CisgICAgICAgICAgICBtX25TaXplICs9IDg7CisgICAgICAgICAgICBtX3BBcnJheSA9IChUWVBFKiopbV9wTW9kdWxlLT5KQmlnMl9SZWFsbG9jKG1fcEFycmF5LCBzaXplb2YoVFlQRSopKm1fblNpemUpOworICAgICAgICB9CisgICAgICAgIG1fcEFycmF5W21fbkxlbmd0aCsrXSA9IHBJdGVtOworICAgIH0KKworCisgICAgRlhfSU5UMzIgZ2V0TGVuZ3RoKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX25MZW5ndGg7CisgICAgfQorCisgICAgVFlQRSAqZ2V0QXQoRlhfSU5UMzIgbkluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcEFycmF5W25JbmRleF07CisgICAgfQorCisgICAgVFlQRSAqZ2V0TGFzdCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9wQXJyYXlbbV9uTGVuZ3RoIC0gMV07CisgICAgfQorcHJpdmF0ZToKKyAgICBGWF9JTlQzMiBtX25TaXplOworICAgIFRZUEUgKiptX3BBcnJheTsKKyAgICBGWF9JTlQzMiBtX25MZW5ndGg7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX01vZHVsZS5oIGIvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9Nb2R1bGUuaAppbmRleCBjY2RlNWFkLi4zYTAxZWIwIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX01vZHVsZS5oCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfTW9kdWxlLmgKQEAgLTEsMzIgKzEsMzIgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0pCSUcyX01PRFVMRV9IXw0KLSNkZWZpbmUgX0pCSUcyX01PRFVMRV9IXw0KLSNpbmNsdWRlICJKQmlnMl9EZWZpbmUuaCINCi1jbGFzcyBDSkJpZzJfTW9kdWxlDQotew0KLXB1YmxpYzoNCi0NCi0gICAgdmlydHVhbCB2b2lkICpKQmlnMl9NYWxsb2MoRlhfRFdPUkQgZHdTaXplKSA9IDA7DQotDQotICAgIHZpcnR1YWwgdm9pZCAqSkJpZzJfTWFsbG9jMihGWF9EV09SRCBudW0sIEZYX0RXT1JEIGR3U2l6ZSkgPSAwOw0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQgKkpCaWcyX01hbGxvYzMoRlhfRFdPUkQgbnVtLCBGWF9EV09SRCBkd1NpemUsIEZYX0RXT1JEIGR3U2l6ZTIpID0gMDsNCi0NCi0gICAgdmlydHVhbCB2b2lkICpKQmlnMl9SZWFsbG9jKEZYX0xQVk9JRCBwTWVtLCBGWF9EV09SRCBkd1NpemUpID0gMDsNCi0NCi0gICAgdmlydHVhbCB2b2lkIEpCaWcyX0ZyZWUoRlhfTFBWT0lEIHBNZW0pID0gMDsNCi0NCi0gICAgdmlydHVhbCB2b2lkIEpCaWcyX0Fzc2VydChGWF9JTlQzMiBuRXhwcmVzc2lvbikge307DQotDQotICAgIHZpcnR1YWwJdm9pZCBKQmlnMl9FcnJvcihGWF9MUENTVFIgZm9ybWF0LCAuLi4pIHt9Ow0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQgSkJpZzJfV2FybihGWF9MUENTVFIgZm9ybWF0LCAuLi4pIHt9Ow0KLQ0KLSAgICB2aXJ0dWFsIHZvaWQgSkJpZzJfTG9nKEZYX0xQQ1NUUiBmb3JtYXQsIC4uLikge307DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9KQklHMl9NT0RVTEVfSF8KKyNkZWZpbmUgX0pCSUcyX01PRFVMRV9IXworI2luY2x1ZGUgIkpCaWcyX0RlZmluZS5oIgorY2xhc3MgQ0pCaWcyX01vZHVsZQoreworcHVibGljOgorCisgICAgdmlydHVhbCB2b2lkICpKQmlnMl9NYWxsb2MoRlhfRFdPUkQgZHdTaXplKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgKkpCaWcyX01hbGxvYzIoRlhfRFdPUkQgbnVtLCBGWF9EV09SRCBkd1NpemUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCAqSkJpZzJfTWFsbG9jMyhGWF9EV09SRCBudW0sIEZYX0RXT1JEIGR3U2l6ZSwgRlhfRFdPUkQgZHdTaXplMikgPSAwOworCisgICAgdmlydHVhbCB2b2lkICpKQmlnMl9SZWFsbG9jKEZYX0xQVk9JRCBwTWVtLCBGWF9EV09SRCBkd1NpemUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBKQmlnMl9GcmVlKEZYX0xQVk9JRCBwTWVtKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgSkJpZzJfQXNzZXJ0KEZYX0lOVDMyIG5FeHByZXNzaW9uKSB7fTsKKworICAgIHZpcnR1YWwJdm9pZCBKQmlnMl9FcnJvcihGWF9MUENTVFIgZm9ybWF0LCAuLi4pIHt9OworCisgICAgdmlydHVhbCB2b2lkIEpCaWcyX1dhcm4oRlhfTFBDU1RSIGZvcm1hdCwgLi4uKSB7fTsKKworICAgIHZpcnR1YWwgdm9pZCBKQmlnMl9Mb2coRlhfTFBDU1RSIGZvcm1hdCwgLi4uKSB7fTsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfT2JqZWN0LmNwcCBiL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfT2JqZWN0LmNwcAppbmRleCAzYTk0ZjBlLi4yYmIyNjdiIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX09iamVjdC5jcHAKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9PYmplY3QuY3BwCkBAIC0xLDcyICsxLDcyIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiSkJpZzJfT2JqZWN0LmgiDQotI2luY2x1ZGUgIkpCaWcyX01vZHVsZS5oIg0KLXZvaWQgKkNKQmlnMl9PYmplY3Q6Om9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgQ0pCaWcyX01vZHVsZSAqcE1vZHVsZSwgRlhfTFBDU1RSIGZpbGVuYW1lLCBpbnQgbGluZSkNCi17DQotICAgIENKQmlnMl9PYmplY3QgKnA7DQotICAgIHAgPSAoQ0pCaWcyX09iamVjdCAqKXBNb2R1bGUtPkpCaWcyX01hbGxvYygoRlhfRFdPUkQpc2l6ZSk7DQotICAgIHAtPm1fcE1vZHVsZSA9IHBNb2R1bGU7DQotICAgIHJldHVybiBwOw0KLX0NCi12b2lkIENKQmlnMl9PYmplY3Q6Om9wZXJhdG9yIGRlbGV0ZSh2b2lkICpwLCBDSkJpZzJfTW9kdWxlICpwTW9kdWxlLCBGWF9MUENTVFIgZmlsZW5hbWUsIGludCBsaW5lKQ0KLXsNCi0gICAgcE1vZHVsZS0+SkJpZzJfRnJlZShwKTsNCi19DQotdm9pZCAqQ0pCaWcyX09iamVjdDo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBDSkJpZzJfTW9kdWxlICpwTW9kdWxlKQ0KLXsNCi0gICAgQ0pCaWcyX09iamVjdCAqcDsNCi0gICAgcCA9IChDSkJpZzJfT2JqZWN0ICopcE1vZHVsZS0+SkJpZzJfTWFsbG9jKChGWF9EV09SRClzaXplKTsNCi0gICAgcC0+bV9wTW9kdWxlID0gcE1vZHVsZTsNCi0gICAgcmV0dXJuIHA7DQotfQ0KLXZvaWQgQ0pCaWcyX09iamVjdDo6b3BlcmF0b3IgZGVsZXRlKHZvaWQgKnApDQotew0KLSAgICAoKENKQmlnMl9PYmplY3QgKilwKS0+bV9wTW9kdWxlLT5KQmlnMl9GcmVlKHApOw0KLX0NCi12b2lkIENKQmlnMl9PYmplY3Q6Om9wZXJhdG9yIGRlbGV0ZSh2b2lkICpwLCBDSkJpZzJfTW9kdWxlICpwTW9kdWxlKQ0KLXsNCi0gICAgcE1vZHVsZS0+SkJpZzJfRnJlZShwKTsNCi19DQotdm9pZCAqQ0pCaWcyX09iamVjdDo6b3BlcmF0b3IgbmV3W10oc2l6ZV90IHNpemUsIENKQmlnMl9Nb2R1bGUgKnBNb2R1bGUsIHNpemVfdCB1bml0X3NpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBDU1RSIGZpbGVuYW1lLCBpbnQgbGluZSkNCi17DQotICAgIHZvaWQgKnA7DQotICAgIEZYX0JZVEUgKnBDdXIsICpwRW5kOw0KLSAgICBwID0gKEZYX0JZVEUgKilwTW9kdWxlLT5KQmlnMl9NYWxsb2MoKEZYX0RXT1JEKXNpemUpOw0KLSAgICBwQ3VyID0gKEZYX0JZVEUgKilwOw0KLSAgICBwRW5kID0gcEN1ciArIHNpemU7DQotICAgIGZvcig7IHBDdXIgPCBwRW5kOyBwQ3VyICs9IHVuaXRfc2l6ZSkgew0KLSAgICAgICAgKChDSkJpZzJfT2JqZWN0ICopcEN1ciktPm1fcE1vZHVsZSA9IHBNb2R1bGU7DQotICAgIH0NCi0gICAgcmV0dXJuIHA7DQotfQ0KLXZvaWQgQ0pCaWcyX09iamVjdDo6b3BlcmF0b3IgZGVsZXRlW10odm9pZCAqcCwgQ0pCaWcyX01vZHVsZSAqcE1vZHVsZSwgc2l6ZV90IHVuaXRfc2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ1NUUiBmaWxlbmFtZSwgaW50IGxpbmUpDQotew0KLSAgICBwTW9kdWxlLT5KQmlnMl9GcmVlKHApOw0KLX0NCi12b2lkICpDSkJpZzJfT2JqZWN0OjpvcGVyYXRvciBuZXdbXShzaXplX3Qgc2l6ZSwgQ0pCaWcyX01vZHVsZSAqcE1vZHVsZSwgc2l6ZV90IHVuaXRfc2l6ZSkNCi17DQotICAgIHZvaWQgKnA7DQotICAgIEZYX0JZVEUgKnBDdXIsICpwRW5kOw0KLSAgICBwID0gKEZYX0JZVEUgKilwTW9kdWxlLT5KQmlnMl9NYWxsb2MoKEZYX0RXT1JEKXNpemUpOw0KLSAgICBwQ3VyID0gKEZYX0JZVEUgKilwOw0KLSAgICBwRW5kID0gcEN1ciArIHNpemU7DQotICAgIGZvcig7IHBDdXIgPCBwRW5kOyBwQ3VyICs9IHVuaXRfc2l6ZSkgew0KLSAgICAgICAgKChDSkJpZzJfT2JqZWN0ICopcEN1ciktPm1fcE1vZHVsZSA9IHBNb2R1bGU7DQotICAgIH0NCi0gICAgcmV0dXJuIHA7DQotfQ0KLXZvaWQgQ0pCaWcyX09iamVjdDo6b3BlcmF0b3IgZGVsZXRlW10odm9pZCogcCkNCi17DQotICAgICgoQ0pCaWcyX09iamVjdCAqKXApLT5tX3BNb2R1bGUtPkpCaWcyX0ZyZWUocCk7DQotfQ0KLXZvaWQgQ0pCaWcyX09iamVjdDo6b3BlcmF0b3IgZGVsZXRlW10odm9pZCAqcCwgQ0pCaWcyX01vZHVsZSAqcE1vZHVsZSwgc2l6ZV90IHVuaXRfc2l6ZSkNCi17DQotICAgIHBNb2R1bGUtPkpCaWcyX0ZyZWUocCk7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICJKQmlnMl9PYmplY3QuaCIKKyNpbmNsdWRlICJKQmlnMl9Nb2R1bGUuaCIKK3ZvaWQgKkNKQmlnMl9PYmplY3Q6Om9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgQ0pCaWcyX01vZHVsZSAqcE1vZHVsZSwgRlhfTFBDU1RSIGZpbGVuYW1lLCBpbnQgbGluZSkKK3sKKyAgICBDSkJpZzJfT2JqZWN0ICpwOworICAgIHAgPSAoQ0pCaWcyX09iamVjdCAqKXBNb2R1bGUtPkpCaWcyX01hbGxvYygoRlhfRFdPUkQpc2l6ZSk7CisgICAgcC0+bV9wTW9kdWxlID0gcE1vZHVsZTsKKyAgICByZXR1cm4gcDsKK30KK3ZvaWQgQ0pCaWcyX09iamVjdDo6b3BlcmF0b3IgZGVsZXRlKHZvaWQgKnAsIENKQmlnMl9Nb2R1bGUgKnBNb2R1bGUsIEZYX0xQQ1NUUiBmaWxlbmFtZSwgaW50IGxpbmUpCit7CisgICAgcE1vZHVsZS0+SkJpZzJfRnJlZShwKTsKK30KK3ZvaWQgKkNKQmlnMl9PYmplY3Q6Om9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgQ0pCaWcyX01vZHVsZSAqcE1vZHVsZSkKK3sKKyAgICBDSkJpZzJfT2JqZWN0ICpwOworICAgIHAgPSAoQ0pCaWcyX09iamVjdCAqKXBNb2R1bGUtPkpCaWcyX01hbGxvYygoRlhfRFdPUkQpc2l6ZSk7CisgICAgcC0+bV9wTW9kdWxlID0gcE1vZHVsZTsKKyAgICByZXR1cm4gcDsKK30KK3ZvaWQgQ0pCaWcyX09iamVjdDo6b3BlcmF0b3IgZGVsZXRlKHZvaWQgKnApCit7CisgICAgKChDSkJpZzJfT2JqZWN0ICopcCktPm1fcE1vZHVsZS0+SkJpZzJfRnJlZShwKTsKK30KK3ZvaWQgQ0pCaWcyX09iamVjdDo6b3BlcmF0b3IgZGVsZXRlKHZvaWQgKnAsIENKQmlnMl9Nb2R1bGUgKnBNb2R1bGUpCit7CisgICAgcE1vZHVsZS0+SkJpZzJfRnJlZShwKTsKK30KK3ZvaWQgKkNKQmlnMl9PYmplY3Q6Om9wZXJhdG9yIG5ld1tdKHNpemVfdCBzaXplLCBDSkJpZzJfTW9kdWxlICpwTW9kdWxlLCBzaXplX3QgdW5pdF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBDU1RSIGZpbGVuYW1lLCBpbnQgbGluZSkKK3sKKyAgICB2b2lkICpwOworICAgIEZYX0JZVEUgKnBDdXIsICpwRW5kOworICAgIHAgPSAoRlhfQllURSAqKXBNb2R1bGUtPkpCaWcyX01hbGxvYygoRlhfRFdPUkQpc2l6ZSk7CisgICAgcEN1ciA9IChGWF9CWVRFICopcDsKKyAgICBwRW5kID0gcEN1ciArIHNpemU7CisgICAgZm9yKDsgcEN1ciA8IHBFbmQ7IHBDdXIgKz0gdW5pdF9zaXplKSB7CisgICAgICAgICgoQ0pCaWcyX09iamVjdCAqKXBDdXIpLT5tX3BNb2R1bGUgPSBwTW9kdWxlOworICAgIH0KKyAgICByZXR1cm4gcDsKK30KK3ZvaWQgQ0pCaWcyX09iamVjdDo6b3BlcmF0b3IgZGVsZXRlW10odm9pZCAqcCwgQ0pCaWcyX01vZHVsZSAqcE1vZHVsZSwgc2l6ZV90IHVuaXRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBDU1RSIGZpbGVuYW1lLCBpbnQgbGluZSkKK3sKKyAgICBwTW9kdWxlLT5KQmlnMl9GcmVlKHApOworfQordm9pZCAqQ0pCaWcyX09iamVjdDo6b3BlcmF0b3IgbmV3W10oc2l6ZV90IHNpemUsIENKQmlnMl9Nb2R1bGUgKnBNb2R1bGUsIHNpemVfdCB1bml0X3NpemUpCit7CisgICAgdm9pZCAqcDsKKyAgICBGWF9CWVRFICpwQ3VyLCAqcEVuZDsKKyAgICBwID0gKEZYX0JZVEUgKilwTW9kdWxlLT5KQmlnMl9NYWxsb2MoKEZYX0RXT1JEKXNpemUpOworICAgIHBDdXIgPSAoRlhfQllURSAqKXA7CisgICAgcEVuZCA9IHBDdXIgKyBzaXplOworICAgIGZvcig7IHBDdXIgPCBwRW5kOyBwQ3VyICs9IHVuaXRfc2l6ZSkgeworICAgICAgICAoKENKQmlnMl9PYmplY3QgKilwQ3VyKS0+bV9wTW9kdWxlID0gcE1vZHVsZTsKKyAgICB9CisgICAgcmV0dXJuIHA7Cit9Cit2b2lkIENKQmlnMl9PYmplY3Q6Om9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqIHApCit7CisgICAgKChDSkJpZzJfT2JqZWN0ICopcCktPm1fcE1vZHVsZS0+SkJpZzJfRnJlZShwKTsKK30KK3ZvaWQgQ0pCaWcyX09iamVjdDo6b3BlcmF0b3IgZGVsZXRlW10odm9pZCAqcCwgQ0pCaWcyX01vZHVsZSAqcE1vZHVsZSwgc2l6ZV90IHVuaXRfc2l6ZSkKK3sKKyAgICBwTW9kdWxlLT5KQmlnMl9GcmVlKHApOworfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9PYmplY3QuaCBiL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfT2JqZWN0LmgKaW5kZXggN2ZlZjFhMi4uMjNlZWNiZiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9PYmplY3QuaAorKysgYi9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX09iamVjdC5oCkBAIC0xLDQzICsxLDQzIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9KQklHMl9PQkpFQ1RfSF8NCi0jZGVmaW5lIF9KQklHMl9PQkpFQ1RfSF8NCi0jaW5jbHVkZSAiSkJpZzJfRGVmaW5lLmgiDQotY2xhc3MgQ0pCaWcyX01vZHVsZTsNCi0jZGVmaW5lIF9KQklHMl9OT19FWFBFQ1RJT05fDQotY2xhc3MgQ0pCaWcyX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIHZvaWQgKm9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgQ0pCaWcyX01vZHVsZSAqcE1vZHVsZSwgRlhfTFBDU1RSIGZpbGVuYW1lLCBpbnQgbGluZSk7DQotDQotICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKnAsIENKQmlnMl9Nb2R1bGUgKnBNb2R1bGUsIEZYX0xQQ1NUUiBmaWxlbmFtZSwgaW50IGxpbmUpOw0KLQ0KLSAgICB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIENKQmlnMl9Nb2R1bGUgKnBNb2R1bGUpOw0KLQ0KLSAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICpwKTsNCi0NCi0gICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqcCwgQ0pCaWcyX01vZHVsZSAqcE1vZHVsZSk7DQotDQotICAgIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHNpemVfdCBzaXplLCBDSkJpZzJfTW9kdWxlICpwTW9kdWxlLCBzaXplX3QgdW5pdF9zaXplLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUENTVFIgZmlsZW5hbWUsIGludCBsaW5lKTsNCi0NCi0gICAgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICpwLCBDSkJpZzJfTW9kdWxlICpwTW9kdWxlLCBzaXplX3QgdW5pdF9zaXplLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ1NUUiBmaWxlbmFtZSwgaW50IGxpbmUpOw0KLQ0KLSAgICB2b2lkICpvcGVyYXRvciBuZXdbXShzaXplX3Qgc2l6ZSwgQ0pCaWcyX01vZHVsZSAqcE1vZHVsZSwgc2l6ZV90IHVuaXRfc2l6ZSk7DQotDQotICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCogcCk7DQotDQotICAgIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCAqcCwgQ0pCaWcyX01vZHVsZSAqcE1vZHVsZSwgc2l6ZV90IHVuaXRfc2l6ZSk7DQotcHVibGljOg0KLQ0KLSAgICBDSkJpZzJfTW9kdWxlICptX3BNb2R1bGU7DQotfTsNCi0jZGVmaW5lIEpCSUcyX05FVyBuZXcobV9wTW9kdWxlKQ0KLSNkZWZpbmUgSkJJRzJfQUxMT0MocCwgYSkgcCA9IEpCSUcyX05FVyBhOyBwLT5tX3BNb2R1bGUgPSBtX3BNb2R1bGU7DQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfSkJJRzJfT0JKRUNUX0hfCisjZGVmaW5lIF9KQklHMl9PQkpFQ1RfSF8KKyNpbmNsdWRlICJKQmlnMl9EZWZpbmUuaCIKK2NsYXNzIENKQmlnMl9Nb2R1bGU7CisjZGVmaW5lIF9KQklHMl9OT19FWFBFQ1RJT05fCitjbGFzcyBDSkJpZzJfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIENKQmlnMl9Nb2R1bGUgKnBNb2R1bGUsIEZYX0xQQ1NUUiBmaWxlbmFtZSwgaW50IGxpbmUpOworCisgICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqcCwgQ0pCaWcyX01vZHVsZSAqcE1vZHVsZSwgRlhfTFBDU1RSIGZpbGVuYW1lLCBpbnQgbGluZSk7CisKKyAgICB2b2lkICpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIENKQmlnMl9Nb2R1bGUgKnBNb2R1bGUpOworCisgICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqcCk7CisKKyAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICpwLCBDSkJpZzJfTW9kdWxlICpwTW9kdWxlKTsKKworICAgIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHNpemVfdCBzaXplLCBDSkJpZzJfTW9kdWxlICpwTW9kdWxlLCBzaXplX3QgdW5pdF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ1NUUiBmaWxlbmFtZSwgaW50IGxpbmUpOworCisgICAgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICpwLCBDSkJpZzJfTW9kdWxlICpwTW9kdWxlLCBzaXplX3QgdW5pdF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBDU1RSIGZpbGVuYW1lLCBpbnQgbGluZSk7CisKKyAgICB2b2lkICpvcGVyYXRvciBuZXdbXShzaXplX3Qgc2l6ZSwgQ0pCaWcyX01vZHVsZSAqcE1vZHVsZSwgc2l6ZV90IHVuaXRfc2l6ZSk7CisKKyAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqIHApOworCisgICAgdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICpwLCBDSkJpZzJfTW9kdWxlICpwTW9kdWxlLCBzaXplX3QgdW5pdF9zaXplKTsKK3B1YmxpYzoKKworICAgIENKQmlnMl9Nb2R1bGUgKm1fcE1vZHVsZTsKK307CisjZGVmaW5lIEpCSUcyX05FVyBuZXcobV9wTW9kdWxlKQorI2RlZmluZSBKQklHMl9BTExPQyhwLCBhKSBwID0gSkJJRzJfTkVXIGE7IHAtPm1fcE1vZHVsZSA9IG1fcE1vZHVsZTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9QYWdlLmggYi9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX1BhZ2UuaAppbmRleCA0OTA3MDU0Li5kNzM5OWJkIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX1BhZ2UuaAorKysgYi9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX1BhZ2UuaApAQCAtMSwxOSArMSwxOSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfSkJJRzJfUEFHRV9IXw0KLSNkZWZpbmUgX0pCSUcyX1BBR0VfSF8NCi0jaW5jbHVkZSAiSkJpZzJfSW1hZ2UuaCINCi1zdHJ1Y3QgSkJpZzJQYWdlSW5mbyA6IHB1YmxpYyBDSkJpZzJfT2JqZWN0IHsNCi0gICAgRlhfRFdPUkQgbV9kd1dpZHRoLA0KLSAgICAgICAgICAgICBtX2R3SGVpZ2h0Ow0KLSAgICBGWF9EV09SRCBtX2R3UmVzb2x1dGlvblgsDQotICAgICAgICAgICAgIG1fZHdSZXNvbHV0aW9uWTsNCi0gICAgRlhfQllURSBtX2NGbGFnczsNCi0gICAgRlhfQk9PTCBtX2JJc1N0cmlwZWQ7DQotICAgIEZYX1dPUkQgbV93TWF4U3RyaXBlU2l6ZTsNCi19Ow0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0pCSUcyX1BBR0VfSF8KKyNkZWZpbmUgX0pCSUcyX1BBR0VfSF8KKyNpbmNsdWRlICJKQmlnMl9JbWFnZS5oIgorc3RydWN0IEpCaWcyUGFnZUluZm8gOiBwdWJsaWMgQ0pCaWcyX09iamVjdCB7CisgICAgRlhfRFdPUkQgbV9kd1dpZHRoLAorICAgICAgICAgICAgIG1fZHdIZWlnaHQ7CisgICAgRlhfRFdPUkQgbV9kd1Jlc29sdXRpb25YLAorICAgICAgICAgICAgIG1fZHdSZXNvbHV0aW9uWTsKKyAgICBGWF9CWVRFIG1fY0ZsYWdzOworICAgIEZYX0JPT0wgbV9iSXNTdHJpcGVkOworICAgIEZYX1dPUkQgbV93TWF4U3RyaXBlU2l6ZTsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfUGF0dGVybkRpY3QuY3BwIGIvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9QYXR0ZXJuRGljdC5jcHAKaW5kZXggNThjNTJhNS4uMGM2ZTViZSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9QYXR0ZXJuRGljdC5jcHAKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9QYXR0ZXJuRGljdC5jcHAKQEAgLTEsMjQgKzEsMjQgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICJKQmlnMl9QYXR0ZXJuRGljdC5oIg0KLUNKQmlnMl9QYXR0ZXJuRGljdDo6Q0pCaWcyX1BhdHRlcm5EaWN0KCkNCi17DQotICAgIE5VTVBBVFMgPSAwOw0KLSAgICBIRFBBVFMgPSBOVUxMOw0KLX0NCi0NCi1DSkJpZzJfUGF0dGVybkRpY3Q6On5DSkJpZzJfUGF0dGVybkRpY3QoKQ0KLXsNCi0gICAgaWYoSERQQVRTKSB7DQotICAgICAgICBmb3IoRlhfRFdPUkQgaSA9IDA7IGkgPCBOVU1QQVRTOyBpKyspIHsNCi0gICAgICAgICAgICBpZihIRFBBVFNbaV0pIHsNCi0gICAgICAgICAgICAgICAgZGVsZXRlIEhEUEFUU1tpXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoSERQQVRTKTsNCi0gICAgfQ0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiSkJpZzJfUGF0dGVybkRpY3QuaCIKK0NKQmlnMl9QYXR0ZXJuRGljdDo6Q0pCaWcyX1BhdHRlcm5EaWN0KCkKK3sKKyAgICBOVU1QQVRTID0gMDsKKyAgICBIRFBBVFMgPSBOVUxMOworfQorCitDSkJpZzJfUGF0dGVybkRpY3Q6On5DSkJpZzJfUGF0dGVybkRpY3QoKQoreworICAgIGlmKEhEUEFUUykgeworICAgICAgICBmb3IoRlhfRFdPUkQgaSA9IDA7IGkgPCBOVU1QQVRTOyBpKyspIHsKKyAgICAgICAgICAgIGlmKEhEUEFUU1tpXSkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBIRFBBVFNbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKEhEUEFUUyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9QYXR0ZXJuRGljdC5oIGIvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9QYXR0ZXJuRGljdC5oCmluZGV4IGM4Njg2NTAuLmI3NWNiZGUgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfUGF0dGVybkRpY3QuaAorKysgYi9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX1BhdHRlcm5EaWN0LmgKQEAgLTEsMjIgKzEsMjIgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0pCSUcyX1BBVFRFUk5fRElDVF9IXw0KLSNkZWZpbmUgX0pCSUcyX1BBVFRFUk5fRElDVF9IXw0KLSNpbmNsdWRlICJKQmlnMl9EZWZpbmUuaCINCi0jaW5jbHVkZSAiSkJpZzJfSW1hZ2UuaCINCi1jbGFzcyBDSkJpZzJfUGF0dGVybkRpY3QgOiBwdWJsaWMgQ0pCaWcyX09iamVjdA0KLXsNCi1wdWJsaWM6DQotDQotICAgIENKQmlnMl9QYXR0ZXJuRGljdCgpOw0KLQ0KLSAgICB+Q0pCaWcyX1BhdHRlcm5EaWN0KCk7DQotcHVibGljOg0KLSAgICBGWF9EV09SRCBOVU1QQVRTOw0KLSAgICBDSkJpZzJfSW1hZ2UgKipIRFBBVFM7DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9KQklHMl9QQVRURVJOX0RJQ1RfSF8KKyNkZWZpbmUgX0pCSUcyX1BBVFRFUk5fRElDVF9IXworI2luY2x1ZGUgIkpCaWcyX0RlZmluZS5oIgorI2luY2x1ZGUgIkpCaWcyX0ltYWdlLmgiCitjbGFzcyBDSkJpZzJfUGF0dGVybkRpY3QgOiBwdWJsaWMgQ0pCaWcyX09iamVjdAoreworcHVibGljOgorCisgICAgQ0pCaWcyX1BhdHRlcm5EaWN0KCk7CisKKyAgICB+Q0pCaWcyX1BhdHRlcm5EaWN0KCk7CitwdWJsaWM6CisgICAgRlhfRFdPUkQgTlVNUEFUUzsKKyAgICBDSkJpZzJfSW1hZ2UgKipIRFBBVFM7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX1NlZ21lbnQuY3BwIGIvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9TZWdtZW50LmNwcAppbmRleCA3ODgyMDdkLi5iN2VlZDM1IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX1NlZ21lbnQuY3BwCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfU2VnbWVudC5jcHAKQEAgLTEsNTMgKzEsNTMgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICJKQmlnMl9TZWdtZW50LmgiDQotQ0pCaWcyX1NlZ21lbnQ6OkNKQmlnMl9TZWdtZW50KCkNCi17DQotICAgIGluaXQoKTsNCi19DQotQ0pCaWcyX1NlZ21lbnQ6On5DSkJpZzJfU2VnbWVudCgpDQotew0KLSAgICBjbGVhbigpOw0KLX0NCi12b2lkIENKQmlnMl9TZWdtZW50Ojppbml0KCkNCi17DQotICAgIG1fZHdOdW1iZXIgPSAwOw0KLSAgICBtX2NGbGFncy5jID0gMDsNCi0gICAgbV9uUmVmZXJyZWRfdG9fc2VnbWVudF9jb3VudCA9IDA7DQotICAgIG1fcFJlZmVycmVkX3RvX3NlZ21lbnRfbnVtYmVycyA9IE5VTEw7DQotICAgIG1fZHdQYWdlX2Fzc29jaWF0aW9uID0gMDsNCi0gICAgbV9kd0RhdGFfbGVuZ3RoID0gMDsNCi0gICAgbV9kd0hlYWRlcl9MZW5ndGggPSAwOw0KLSAgICBtX3BEYXRhID0gTlVMTDsNCi0gICAgbV9TdGF0ZSA9IEpCSUcyX1NFR01FTlRfSEVBREVSX1VOUEFSU0VEOw0KLSAgICBtX25SZXN1bHRUeXBlID0gSkJJRzJfVk9JRF9QT0lOVEVSOw0KLSAgICBtX1Jlc3VsdC52ZCA9IE5VTEw7DQotfQ0KLXZvaWQgQ0pCaWcyX1NlZ21lbnQ6OmNsZWFuKCkNCi17DQotICAgIGlmKG1fcFJlZmVycmVkX3RvX3NlZ21lbnRfbnVtYmVycykgew0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKG1fcFJlZmVycmVkX3RvX3NlZ21lbnRfbnVtYmVycyk7DQotICAgIH0NCi0gICAgaWYobV9SZXN1bHQudmQpIHsNCi0gICAgICAgIHN3aXRjaChtX25SZXN1bHRUeXBlKSB7DQotICAgICAgICAgICAgY2FzZSBKQklHMl9JTUFHRV9QT0lOVEVSOg0KLSAgICAgICAgICAgICAgICBkZWxldGUgbV9SZXN1bHQuaW07DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgSkJJRzJfU1lNQk9MX0RJQ1RfUE9JTlRFUjoNCi0gICAgICAgICAgICAgICAgZGVsZXRlIG1fUmVzdWx0LnNkOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIEpCSUcyX1BBVFRFUk5fRElDVF9QT0lOVEVSOg0KLSAgICAgICAgICAgICAgICBkZWxldGUgbV9SZXN1bHQucGQ7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgSkJJRzJfSFVGRk1BTl9UQUJMRV9QT0lOVEVSOg0KLSAgICAgICAgICAgICAgICBkZWxldGUgbV9SZXN1bHQuaHQ7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShtX1Jlc3VsdC52ZCk7DQotICAgICAgICB9DQotICAgIH0NCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIkpCaWcyX1NlZ21lbnQuaCIKK0NKQmlnMl9TZWdtZW50OjpDSkJpZzJfU2VnbWVudCgpCit7CisgICAgaW5pdCgpOworfQorQ0pCaWcyX1NlZ21lbnQ6On5DSkJpZzJfU2VnbWVudCgpCit7CisgICAgY2xlYW4oKTsKK30KK3ZvaWQgQ0pCaWcyX1NlZ21lbnQ6OmluaXQoKQoreworICAgIG1fZHdOdW1iZXIgPSAwOworICAgIG1fY0ZsYWdzLmMgPSAwOworICAgIG1fblJlZmVycmVkX3RvX3NlZ21lbnRfY291bnQgPSAwOworICAgIG1fcFJlZmVycmVkX3RvX3NlZ21lbnRfbnVtYmVycyA9IE5VTEw7CisgICAgbV9kd1BhZ2VfYXNzb2NpYXRpb24gPSAwOworICAgIG1fZHdEYXRhX2xlbmd0aCA9IDA7CisgICAgbV9kd0hlYWRlcl9MZW5ndGggPSAwOworICAgIG1fcERhdGEgPSBOVUxMOworICAgIG1fU3RhdGUgPSBKQklHMl9TRUdNRU5UX0hFQURFUl9VTlBBUlNFRDsKKyAgICBtX25SZXN1bHRUeXBlID0gSkJJRzJfVk9JRF9QT0lOVEVSOworICAgIG1fUmVzdWx0LnZkID0gTlVMTDsKK30KK3ZvaWQgQ0pCaWcyX1NlZ21lbnQ6OmNsZWFuKCkKK3sKKyAgICBpZihtX3BSZWZlcnJlZF90b19zZWdtZW50X251bWJlcnMpIHsKKyAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKG1fcFJlZmVycmVkX3RvX3NlZ21lbnRfbnVtYmVycyk7CisgICAgfQorICAgIGlmKG1fUmVzdWx0LnZkKSB7CisgICAgICAgIHN3aXRjaChtX25SZXN1bHRUeXBlKSB7CisgICAgICAgICAgICBjYXNlIEpCSUcyX0lNQUdFX1BPSU5URVI6CisgICAgICAgICAgICAgICAgZGVsZXRlIG1fUmVzdWx0LmltOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKQklHMl9TWU1CT0xfRElDVF9QT0lOVEVSOgorICAgICAgICAgICAgICAgIGRlbGV0ZSBtX1Jlc3VsdC5zZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSkJJRzJfUEFUVEVSTl9ESUNUX1BPSU5URVI6CisgICAgICAgICAgICAgICAgZGVsZXRlIG1fUmVzdWx0LnBkOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBKQklHMl9IVUZGTUFOX1RBQkxFX1BPSU5URVI6CisgICAgICAgICAgICAgICAgZGVsZXRlIG1fUmVzdWx0Lmh0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUobV9SZXN1bHQudmQpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9TZWdtZW50LmggYi9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX1NlZ21lbnQuaAppbmRleCA0OGMzMWIxLi4zM2VlNzIxIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX1NlZ21lbnQuaAorKysgYi9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX1NlZ21lbnQuaApAQCAtMSw2OCArMSw2OCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfSkJJRzJfU0VHTUVOVF9IXw0KLSNkZWZpbmUgX0pCSUcyX1NFR01FTlRfSF8NCi0jaW5jbHVkZSAiSkJpZzJfRGVmaW5lLmgiDQotI2luY2x1ZGUgIkpCaWcyX1N5bWJvbERpY3QuaCINCi0jaW5jbHVkZSAiSkJpZzJfUGF0dGVybkRpY3QuaCINCi0jaW5jbHVkZSAiSkJpZzJfTW9kdWxlLmgiDQotI2luY2x1ZGUgIkpCaWcyX0h1ZmZtYW5UYWJsZS5oIg0KLSNkZWZpbmUgSkJJRzJfR0VUX0lOVDMyKGJ1ZikgKCgoYnVmKVswXTw8MjQpIHwgKChidWYpWzFdPDwxNikgfCAoKGJ1ZilbMl08PDgpIHwgKGJ1ZilbM10pDQotI2RlZmluZSBKQklHMl9HRVRfSU5UMTYoYnVmKSAoKChidWYpWzBdPDw4KSB8IChidWYpWzFdKQ0KLXR5cGVkZWYgZW51bSB7DQotICAgIEpCSUcyX1NFR01FTlRfSEVBREVSX1VOUEFSU0VELA0KLSAgICBKQklHMl9TRUdNRU5UX0RBVEFfVU5QQVJTRUQsDQotICAgIEpCSUcyX1NFR01FTlRfUEFSU0VfQ09NUExFVEUsDQotICAgIEpCSUcyX1NFR01FTlRfUEFVU0VELA0KLSAgICBKQklHMl9TRUdNRU5UX0VSUk9SDQotfSBKQmlnMl9TZWdtZW50U3RhdGU7DQotdHlwZWRlZiBlbnVtIHsNCi0gICAgSkJJRzJfVk9JRF9QT0lOVEVSCT0gMCwNCi0gICAgSkJJRzJfSU1BR0VfUE9JTlRFUiwNCi0gICAgSkJJRzJfU1lNQk9MX0RJQ1RfUE9JTlRFUiwNCi0gICAgSkJJRzJfUEFUVEVSTl9ESUNUX1BPSU5URVIsDQotICAgIEpCSUcyX0hVRkZNQU5fVEFCTEVfUE9JTlRFUg0KLX0gSkJpZzJfUmVzdWx0VHlwZTsNCi1jbGFzcyBDSkJpZzJfU2VnbWVudCA6IHB1YmxpYyBDSkJpZzJfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ0pCaWcyX1NlZ21lbnQoKTsNCi0NCi0gICAgfkNKQmlnMl9TZWdtZW50KCk7DQotDQotICAgIHZvaWQgaW5pdCgpOw0KLQ0KLSAgICB2b2lkIGNsZWFuKCk7DQotcHVibGljOg0KLSAgICBGWF9EV09SRCBtX2R3TnVtYmVyOw0KLSAgICB1bmlvbiB7DQotICAgICAgICBzdHJ1Y3Qgew0KLSAgICAgICAgICAgIEZYX0JZVEUgdHlwZQkJCQkJOgk2Ow0KLSAgICAgICAgICAgIEZYX0JZVEUgcGFnZV9hc3NvY2lhdGlvbl9zaXplCToJMTsNCi0gICAgICAgICAgICBGWF9CWVRFIGRlZmVycmVkX25vbl9yZXRhaW4JCToJMTsNCi0gICAgICAgIH0gczsNCi0gICAgICAgIEZYX0JZVEUgYzsNCi0gICAgfSBtX2NGbGFnczsNCi0gICAgRlhfSU5UMzIgbV9uUmVmZXJyZWRfdG9fc2VnbWVudF9jb3VudDsNCi0gICAgRlhfRFdPUkQgKiBtX3BSZWZlcnJlZF90b19zZWdtZW50X251bWJlcnM7DQotICAgIEZYX0RXT1JEIG1fZHdQYWdlX2Fzc29jaWF0aW9uOw0KLSAgICBGWF9EV09SRCBtX2R3RGF0YV9sZW5ndGg7DQotDQotICAgIEZYX0RXT1JEIG1fZHdIZWFkZXJfTGVuZ3RoOw0KLSAgICBGWF9CWVRFICAqbV9wRGF0YTsNCi0gICAgSkJpZzJfU2VnbWVudFN0YXRlIG1fU3RhdGU7DQotICAgIEpCaWcyX1Jlc3VsdFR5cGUgbV9uUmVzdWx0VHlwZTsNCi0gICAgdW5pb24gew0KLSAgICAgICAgQ0pCaWcyX1N5bWJvbERpY3QJKnNkOw0KLSAgICAgICAgQ0pCaWcyX1BhdHRlcm5EaWN0CSpwZDsNCi0gICAgICAgIENKQmlnMl9JbWFnZQkJKmltOw0KLSAgICAgICAgQ0pCaWcyX0h1ZmZtYW5UYWJsZQkqaHQ7DQotICAgICAgICBGWF9MUFZPSUQJCQkgdmQ7DQotICAgIH0gbV9SZXN1bHQ7DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9KQklHMl9TRUdNRU5UX0hfCisjZGVmaW5lIF9KQklHMl9TRUdNRU5UX0hfCisjaW5jbHVkZSAiSkJpZzJfRGVmaW5lLmgiCisjaW5jbHVkZSAiSkJpZzJfU3ltYm9sRGljdC5oIgorI2luY2x1ZGUgIkpCaWcyX1BhdHRlcm5EaWN0LmgiCisjaW5jbHVkZSAiSkJpZzJfTW9kdWxlLmgiCisjaW5jbHVkZSAiSkJpZzJfSHVmZm1hblRhYmxlLmgiCisjZGVmaW5lIEpCSUcyX0dFVF9JTlQzMihidWYpICgoKGJ1ZilbMF08PDI0KSB8ICgoYnVmKVsxXTw8MTYpIHwgKChidWYpWzJdPDw4KSB8IChidWYpWzNdKQorI2RlZmluZSBKQklHMl9HRVRfSU5UMTYoYnVmKSAoKChidWYpWzBdPDw4KSB8IChidWYpWzFdKQordHlwZWRlZiBlbnVtIHsKKyAgICBKQklHMl9TRUdNRU5UX0hFQURFUl9VTlBBUlNFRCwKKyAgICBKQklHMl9TRUdNRU5UX0RBVEFfVU5QQVJTRUQsCisgICAgSkJJRzJfU0VHTUVOVF9QQVJTRV9DT01QTEVURSwKKyAgICBKQklHMl9TRUdNRU5UX1BBVVNFRCwKKyAgICBKQklHMl9TRUdNRU5UX0VSUk9SCit9IEpCaWcyX1NlZ21lbnRTdGF0ZTsKK3R5cGVkZWYgZW51bSB7CisgICAgSkJJRzJfVk9JRF9QT0lOVEVSCT0gMCwKKyAgICBKQklHMl9JTUFHRV9QT0lOVEVSLAorICAgIEpCSUcyX1NZTUJPTF9ESUNUX1BPSU5URVIsCisgICAgSkJJRzJfUEFUVEVSTl9ESUNUX1BPSU5URVIsCisgICAgSkJJRzJfSFVGRk1BTl9UQUJMRV9QT0lOVEVSCit9IEpCaWcyX1Jlc3VsdFR5cGU7CitjbGFzcyBDSkJpZzJfU2VnbWVudCA6IHB1YmxpYyBDSkJpZzJfT2JqZWN0Cit7CitwdWJsaWM6CisKKyAgICBDSkJpZzJfU2VnbWVudCgpOworCisgICAgfkNKQmlnMl9TZWdtZW50KCk7CisKKyAgICB2b2lkIGluaXQoKTsKKworICAgIHZvaWQgY2xlYW4oKTsKK3B1YmxpYzoKKyAgICBGWF9EV09SRCBtX2R3TnVtYmVyOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIEZYX0JZVEUgdHlwZQkJCQkJOgk2OworICAgICAgICAgICAgRlhfQllURSBwYWdlX2Fzc29jaWF0aW9uX3NpemUJOgkxOworICAgICAgICAgICAgRlhfQllURSBkZWZlcnJlZF9ub25fcmV0YWluCQk6CTE7CisgICAgICAgIH0gczsKKyAgICAgICAgRlhfQllURSBjOworICAgIH0gbV9jRmxhZ3M7CisgICAgRlhfSU5UMzIgbV9uUmVmZXJyZWRfdG9fc2VnbWVudF9jb3VudDsKKyAgICBGWF9EV09SRCAqIG1fcFJlZmVycmVkX3RvX3NlZ21lbnRfbnVtYmVyczsKKyAgICBGWF9EV09SRCBtX2R3UGFnZV9hc3NvY2lhdGlvbjsKKyAgICBGWF9EV09SRCBtX2R3RGF0YV9sZW5ndGg7CisKKyAgICBGWF9EV09SRCBtX2R3SGVhZGVyX0xlbmd0aDsKKyAgICBGWF9CWVRFICAqbV9wRGF0YTsKKyAgICBKQmlnMl9TZWdtZW50U3RhdGUgbV9TdGF0ZTsKKyAgICBKQmlnMl9SZXN1bHRUeXBlIG1fblJlc3VsdFR5cGU7CisgICAgdW5pb24geworICAgICAgICBDSkJpZzJfU3ltYm9sRGljdAkqc2Q7CisgICAgICAgIENKQmlnMl9QYXR0ZXJuRGljdAkqcGQ7CisgICAgICAgIENKQmlnMl9JbWFnZQkJKmltOworICAgICAgICBDSkJpZzJfSHVmZm1hblRhYmxlCSpodDsKKyAgICAgICAgRlhfTFBWT0lECQkJIHZkOworICAgIH0gbV9SZXN1bHQ7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX1N5bWJvbERpY3QuY3BwIGIvY29yZS9zcmMvZnhjb2RlYy9qYmlnMi9KQmlnMl9TeW1ib2xEaWN0LmNwcAppbmRleCA4NTE2YzA0Li42N2U1NGMwIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX1N5bWJvbERpY3QuY3BwCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfU3ltYm9sRGljdC5jcHAKQEAgLTEsMzQgKzEsMzQgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICJKQmlnMl9TeW1ib2xEaWN0LmgiDQotQ0pCaWcyX1N5bWJvbERpY3Q6OkNKQmlnMl9TeW1ib2xEaWN0KCkNCi17DQotICAgIFNETlVNRVhTWU1TID0gMDsNCi0gICAgU0RFWFNZTVMgPSBOVUxMOw0KLSAgICBtX2JDb250ZXh0UmV0YWluZWQgPSBGQUxTRTsNCi0gICAgbV9nYkNvbnRleHQgPSBtX2dyQ29udGV4dCA9IE5VTEw7DQotfQ0KLQ0KLUNKQmlnMl9TeW1ib2xEaWN0Ojp+Q0pCaWcyX1N5bWJvbERpY3QoKQ0KLXsNCi0gICAgaWYoU0RFWFNZTVMpIHsNCi0gICAgICAgIGZvcihGWF9EV09SRCBpID0gMDsgaSA8IFNETlVNRVhTWU1TOyBpKyspIHsNCi0gICAgICAgICAgICBpZihTREVYU1lNU1tpXSkgew0KLSAgICAgICAgICAgICAgICBkZWxldGUgU0RFWFNZTVNbaV07DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKFNERVhTWU1TKTsNCi0gICAgfQ0KLSAgICBpZihtX2JDb250ZXh0UmV0YWluZWQpIHsNCi0gICAgICAgIGlmKG1fZ2JDb250ZXh0KSB7DQotICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKG1fZ2JDb250ZXh0KTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmKG1fZ3JDb250ZXh0KSB7DQotICAgICAgICAgICAgbV9wTW9kdWxlLT5KQmlnMl9GcmVlKG1fZ3JDb250ZXh0KTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiSkJpZzJfU3ltYm9sRGljdC5oIgorQ0pCaWcyX1N5bWJvbERpY3Q6OkNKQmlnMl9TeW1ib2xEaWN0KCkKK3sKKyAgICBTRE5VTUVYU1lNUyA9IDA7CisgICAgU0RFWFNZTVMgPSBOVUxMOworICAgIG1fYkNvbnRleHRSZXRhaW5lZCA9IEZBTFNFOworICAgIG1fZ2JDb250ZXh0ID0gbV9nckNvbnRleHQgPSBOVUxMOworfQorCitDSkJpZzJfU3ltYm9sRGljdDo6fkNKQmlnMl9TeW1ib2xEaWN0KCkKK3sKKyAgICBpZihTREVYU1lNUykgeworICAgICAgICBmb3IoRlhfRFdPUkQgaSA9IDA7IGkgPCBTRE5VTUVYU1lNUzsgaSsrKSB7CisgICAgICAgICAgICBpZihTREVYU1lNU1tpXSkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBTREVYU1lNU1tpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX3BNb2R1bGUtPkpCaWcyX0ZyZWUoU0RFWFNZTVMpOworICAgIH0KKyAgICBpZihtX2JDb250ZXh0UmV0YWluZWQpIHsKKyAgICAgICAgaWYobV9nYkNvbnRleHQpIHsKKyAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShtX2diQ29udGV4dCk7CisgICAgICAgIH0KKyAgICAgICAgaWYobV9nckNvbnRleHQpIHsKKyAgICAgICAgICAgIG1fcE1vZHVsZS0+SkJpZzJfRnJlZShtX2dyQ29udGV4dCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2piaWcyL0pCaWcyX1N5bWJvbERpY3QuaCBiL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfU3ltYm9sRGljdC5oCmluZGV4IGNiOTdhMTYuLmNmZTc1ZGIgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfU3ltYm9sRGljdC5oCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvamJpZzIvSkJpZzJfU3ltYm9sRGljdC5oCkBAIC0xLDI2ICsxLDI2IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9KQklHMl9TWU1CT0xfRElDVF9IXw0KLSNkZWZpbmUgX0pCSUcyX1NZTUJPTF9ESUNUX0hfDQotI2luY2x1ZGUgIkpCaWcyX0RlZmluZS5oIg0KLSNpbmNsdWRlICJKQmlnMl9Bcml0aERlY29kZXIuaCINCi0jaW5jbHVkZSAiSkJpZzJfSW1hZ2UuaCINCi1jbGFzcyBDSkJpZzJfU3ltYm9sRGljdCA6IHB1YmxpYyBDSkJpZzJfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ0pCaWcyX1N5bWJvbERpY3QoKTsNCi0NCi0gICAgfkNKQmlnMl9TeW1ib2xEaWN0KCk7DQotcHVibGljOg0KLSAgICBGWF9EV09SRCBTRE5VTUVYU1lNUzsNCi0gICAgQ0pCaWcyX0ltYWdlICoqU0RFWFNZTVM7DQotICAgIEZYX0JPT0wgbV9iQ29udGV4dFJldGFpbmVkOw0KLSAgICBKQmlnMkFyaXRoQ3R4ICptX2diQ29udGV4dCwNCi0gICAgICAgICAgICAgICAgICAqbV9nckNvbnRleHQ7DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9KQklHMl9TWU1CT0xfRElDVF9IXworI2RlZmluZSBfSkJJRzJfU1lNQk9MX0RJQ1RfSF8KKyNpbmNsdWRlICJKQmlnMl9EZWZpbmUuaCIKKyNpbmNsdWRlICJKQmlnMl9Bcml0aERlY29kZXIuaCIKKyNpbmNsdWRlICJKQmlnMl9JbWFnZS5oIgorY2xhc3MgQ0pCaWcyX1N5bWJvbERpY3QgOiBwdWJsaWMgQ0pCaWcyX09iamVjdAoreworcHVibGljOgorCisgICAgQ0pCaWcyX1N5bWJvbERpY3QoKTsKKworICAgIH5DSkJpZzJfU3ltYm9sRGljdCgpOworcHVibGljOgorICAgIEZYX0RXT1JEIFNETlVNRVhTWU1TOworICAgIENKQmlnMl9JbWFnZSAqKlNERVhTWU1TOworICAgIEZYX0JPT0wgbV9iQ29udGV4dFJldGFpbmVkOworICAgIEpCaWcyQXJpdGhDdHggKm1fZ2JDb250ZXh0LAorICAgICAgICAgICAgICAgICAgKm1fZ3JDb250ZXh0OworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9pbmNsdWRlL2Z4X2xjbXMyLmggYi9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL2luY2x1ZGUvZnhfbGNtczIuaAppbmRleCA1MzAzODMyLi5lNjQxMzE4IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL2luY2x1ZGUvZnhfbGNtczIuaAorKysgYi9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL2luY2x1ZGUvZnhfbGNtczIuaApAQCAtMSwxMCArMSwxMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlhfTENNUzJfSF8NCi0jZGVmaW5lIF9GWF9MQ01TMl9IXw0KLSNpbmNsdWRlICIuLi9sY21zMi0yLjYvaW5jbHVkZS9sY21zMi5oIg0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZYX0xDTVMyX0hfCisjZGVmaW5lIF9GWF9MQ01TMl9IXworI2luY2x1ZGUgIi4uL2xjbXMyLTIuNi9pbmNsdWRlL2xjbXMyLmgiCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvaW5jbHVkZS9meF9sY21zMl9wbHVnaW4uaCBiL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvaW5jbHVkZS9meF9sY21zMl9wbHVnaW4uaAppbmRleCAxMTAzYjdmLi40YWI1Nzc1IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL2luY2x1ZGUvZnhfbGNtczJfcGx1Z2luLmgKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9pbmNsdWRlL2Z4X2xjbXMyX3BsdWdpbi5oCkBAIC0xLDEwICsxLDEwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GWF9MQ01TMl9IXw0KLSNkZWZpbmUgX0ZYX0xDTVMyX0hfDQotI2luY2x1ZGUgIi4uL2xjbXMyLTIuNi9pbmNsdWRlL2xjbXMyX3BsdWdpbi5oIg0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZYX0xDTVMyX0hfCisjZGVmaW5lIF9GWF9MQ01TMl9IXworI2luY2x1ZGUgIi4uL2xjbXMyLTIuNi9pbmNsdWRlL2xjbXMyX3BsdWdpbi5oIgorI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL2xjbXMyLTIuNi9zcmMvY21zZXJyLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL2xjbXMyLTIuNi9zcmMvY21zZXJyLmMKaW5kZXggNzQ1MjM4Yy4uODdjNjMyMCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9sY21zMi0yLjYvc3JjL2Ntc2Vyci5jCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvbGNtczItMi42L3NyYy9jbXNlcnIuYwpAQCAtMjYwLDUwICsyNjAsNTAgQEAKIH0KIAogLy8gR2VuZXJpYyBhbGxvY2F0ZQotdm9pZCogQ01TRVhQT1JUIF9jbXNNYWxsb2MoY21zQ29udGV4dCBDb250ZXh0SUQsIGNtc1VJbnQzMk51bWJlciBzaXplKQ0KLXsNCi0gICAgcmV0dXJuIEZYTUVNX0RlZmF1bHRBbGxvYyhzaXplLCBGWE1FTV9OT05MRUFWRSk7DQotfQ0KLQ0KLS8vIEdlbmVyaWMgYWxsb2NhdGUgJiB6ZXJvDQotdm9pZCogQ01TRVhQT1JUIF9jbXNNYWxsb2NaZXJvKGNtc0NvbnRleHQgQ29udGV4dElELCBjbXNVSW50MzJOdW1iZXIgc2l6ZSkNCi17DQotCXZvaWQqIHAgPSBGWE1FTV9EZWZhdWx0QWxsb2Moc2l6ZSwgRlhNRU1fTk9OTEVBVkUpOw0KLQlpZiAocCkgRlhTWVNfbWVtc2V0MzIocCwgMCwgc2l6ZSk7DQotCXJldHVybiBwOw0KLX0NCi0NCi0vLyBHZW5lcmljIGNhbGxvYw0KLXZvaWQqIENNU0VYUE9SVCBfY21zQ2FsbG9jKGNtc0NvbnRleHQgQ29udGV4dElELCBjbXNVSW50MzJOdW1iZXIgbnVtLCBjbXNVSW50MzJOdW1iZXIgc2l6ZSkNCi17DQotCWNtc1VJbnQzMk51bWJlciB0b3RhbCA9IG51bSAqIHNpemU7DQotCWlmICh0b3RhbCA9PSAwIHx8IHRvdGFsIC8gc2l6ZSAhPSBudW0gfHwgdG90YWwgPj0gNTEyICogMTAyNCAqIDEwMjQpDQotCQlyZXR1cm4gTlVMTDsNCi0NCi0JcmV0dXJuIF9jbXNNYWxsb2NaZXJvKENvbnRleHRJRCwgbnVtICogc2l6ZSk7DQotfQ0KLQ0KLS8vIEdlbmVyaWMgcmVhbGxvY2F0ZQ0KLXZvaWQqIENNU0VYUE9SVCBfY21zUmVhbGxvYyhjbXNDb250ZXh0IENvbnRleHRJRCwgdm9pZCogUHRyLCBjbXNVSW50MzJOdW1iZXIgc2l6ZSkNCi17DQotCXJldHVybiBGWE1FTV9EZWZhdWx0UmVhbGxvYyhQdHIsIHNpemUsIEZYTUVNX05PTkxFQVZFKTsNCi19DQotDQotLy8gR2VuZXJpYyBmcmVlIG1lbW9yeQ0KLXZvaWQgQ01TRVhQT1JUIF9jbXNGcmVlKGNtc0NvbnRleHQgQ29udGV4dElELCB2b2lkKiBQdHIpDQotew0KLQlpZiAoUHRyICE9IE5VTEwpIEZYTUVNX0RlZmF1bHRGcmVlKFB0ciwgMCk7DQotfQ0KLQ0KLS8vIEdlbmVyaWMgYmxvY2sgZHVwbGljYXRpb24NCi12b2lkKiBDTVNFWFBPUlQgX2Ntc0R1cE1lbShjbXNDb250ZXh0IENvbnRleHRJRCwgY29uc3Qgdm9pZCogT3JnLCBjbXNVSW50MzJOdW1iZXIgc2l6ZSkNCi17DQotCXZvaWQqIHAgPSBGWE1FTV9EZWZhdWx0QWxsb2Moc2l6ZSwgRlhNRU1fTk9OTEVBVkUpOw0KLQlGWFNZU19tZW1tb3ZlMzIocCwgT3JnLCBzaXplKTsNCi0JcmV0dXJuIHA7DQordm9pZCogQ01TRVhQT1JUIF9jbXNNYWxsb2MoY21zQ29udGV4dCBDb250ZXh0SUQsIGNtc1VJbnQzMk51bWJlciBzaXplKQoreworICAgIHJldHVybiBGWE1FTV9EZWZhdWx0QWxsb2Moc2l6ZSwgRlhNRU1fTk9OTEVBVkUpOwogfQogCi1fY21zTWVtUGx1Z2luQ2h1bmtUeXBlIF9jbXNNZW1QbHVnaW5DaHVuayA9IHtfY21zTWFsbG9jLCBfY21zTWFsbG9jWmVybywgX2Ntc0ZyZWUsIA0KKy8vIEdlbmVyaWMgYWxsb2NhdGUgJiB6ZXJvCit2b2lkKiBDTVNFWFBPUlQgX2Ntc01hbGxvY1plcm8oY21zQ29udGV4dCBDb250ZXh0SUQsIGNtc1VJbnQzMk51bWJlciBzaXplKQoreworCXZvaWQqIHAgPSBGWE1FTV9EZWZhdWx0QWxsb2Moc2l6ZSwgRlhNRU1fTk9OTEVBVkUpOworCWlmIChwKSBGWFNZU19tZW1zZXQzMihwLCAwLCBzaXplKTsKKwlyZXR1cm4gcDsKK30KKworLy8gR2VuZXJpYyBjYWxsb2MKK3ZvaWQqIENNU0VYUE9SVCBfY21zQ2FsbG9jKGNtc0NvbnRleHQgQ29udGV4dElELCBjbXNVSW50MzJOdW1iZXIgbnVtLCBjbXNVSW50MzJOdW1iZXIgc2l6ZSkKK3sKKwljbXNVSW50MzJOdW1iZXIgdG90YWwgPSBudW0gKiBzaXplOworCWlmICh0b3RhbCA9PSAwIHx8IHRvdGFsIC8gc2l6ZSAhPSBudW0gfHwgdG90YWwgPj0gNTEyICogMTAyNCAqIDEwMjQpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIF9jbXNNYWxsb2NaZXJvKENvbnRleHRJRCwgbnVtICogc2l6ZSk7Cit9CisKKy8vIEdlbmVyaWMgcmVhbGxvY2F0ZQordm9pZCogQ01TRVhQT1JUIF9jbXNSZWFsbG9jKGNtc0NvbnRleHQgQ29udGV4dElELCB2b2lkKiBQdHIsIGNtc1VJbnQzMk51bWJlciBzaXplKQoreworCXJldHVybiBGWE1FTV9EZWZhdWx0UmVhbGxvYyhQdHIsIHNpemUsIEZYTUVNX05PTkxFQVZFKTsKK30KKworLy8gR2VuZXJpYyBmcmVlIG1lbW9yeQordm9pZCBDTVNFWFBPUlQgX2Ntc0ZyZWUoY21zQ29udGV4dCBDb250ZXh0SUQsIHZvaWQqIFB0cikKK3sKKwlpZiAoUHRyICE9IE5VTEwpIEZYTUVNX0RlZmF1bHRGcmVlKFB0ciwgMCk7Cit9CisKKy8vIEdlbmVyaWMgYmxvY2sgZHVwbGljYXRpb24KK3ZvaWQqIENNU0VYUE9SVCBfY21zRHVwTWVtKGNtc0NvbnRleHQgQ29udGV4dElELCBjb25zdCB2b2lkKiBPcmcsIGNtc1VJbnQzMk51bWJlciBzaXplKQoreworCXZvaWQqIHAgPSBGWE1FTV9EZWZhdWx0QWxsb2Moc2l6ZSwgRlhNRU1fTk9OTEVBVkUpOworCUZYU1lTX21lbW1vdmUzMihwLCBPcmcsIHNpemUpOworCXJldHVybiBwOworfQorCitfY21zTWVtUGx1Z2luQ2h1bmtUeXBlIF9jbXNNZW1QbHVnaW5DaHVuayA9IHtfY21zTWFsbG9jLCBfY21zTWFsbG9jWmVybywgX2Ntc0ZyZWUsIAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Ntc1JlYWxsb2MsIF9jbXNDYWxsb2MsICAgIF9jbXNEdXBNZW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKIApkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9sY21zMi0yLjYvc3JjL2Ntc2dtdC5jIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9sY21zMi0yLjYvc3JjL2Ntc2dtdC5jCmluZGV4IDA5NDI3NjUuLjExMDMzNjMgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvbGNtczItMi42L3NyYy9jbXNnbXQuYworKysgYi9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL2xjbXMyLTIuNi9zcmMvY21zZ210LmMKQEAgLTEsNTkwICsxLDU5MCBAQAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLw0KLS8vICBMaXR0bGUgQ29sb3IgTWFuYWdlbWVudCBTeXN0ZW0NCi0vLyAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMTIgTWFydGkgTWFyaWEgU2FndWVyDQotLy8NCi0vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcNCi0vLyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksDQotLy8gdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbg0KLS8vIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLA0KLS8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZQ0KLS8vIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQotLy8NCi0vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbg0KLS8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KLS8vDQotLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsDQotLy8gRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPDQotLy8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQNCi0vLyBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFDQotLy8gTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTg0KLS8vIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTg0KLS8vIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLg0KLS8vDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLw0KLQ0KLSNpbmNsdWRlICJsY21zMl9pbnRlcm5hbC5oIg0KLQ0KLQ0KLS8vIEF1eGlsaWFyOiBhcHBlbmQgYSBMYWIgaWRlbnRpdHkgYWZ0ZXIgdGhlIGdpdmVuIHNlcXVlbmNlIG9mIHByb2ZpbGVzDQotLy8gYW5kIHJldHVybiB0aGUgdHJhbnNmb3JtLiBMYWIgcHJvZmlsZSBpcyBjbG9zZWQsIHJlc3Qgb2YgcHJvZmlsZXMgYXJlIGtlcHQgb3Blbi4NCi1jbXNIVFJBTlNGT1JNIF9jbXNDaGFpbjJMYWIoY21zQ29udGV4dCAgICAgICAgICAgIENvbnRleHRJRCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY21zVUludDMyTnVtYmVyICAgICAgICBuUHJvZmlsZXMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc1VJbnQzMk51bWJlciAgICAgICAgSW5wdXRGb3JtYXQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc1VJbnQzMk51bWJlciAgICAgICAgT3V0cHV0Rm9ybWF0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbXNVSW50MzJOdW1iZXIgIEludGVudHNbXSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21zSFBST0ZJTEUgICAgICBoUHJvZmlsZXNbXSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21zQm9vbCAgICAgICAgICBCUENbXSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21zRmxvYXQ2NE51bWJlciBBZGFwdGF0aW9uU3RhdGVzW10sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc1VJbnQzMk51bWJlciAgICAgICAgZHdGbGFncykNCi17DQotICAgIGNtc0hUUkFOU0ZPUk0geGZvcm07DQotICAgIGNtc0hQUk9GSUxFICAgaExhYjsNCi0gICAgY21zSFBST0ZJTEUgICBQcm9maWxlTGlzdFsyNTZdOw0KLSAgICBjbXNCb29sICAgICAgIEJQQ0xpc3RbMjU2XTsNCi0gICAgY21zRmxvYXQ2NE51bWJlciBBZGFwdGF0aW9uTGlzdFsyNTZdOw0KLSAgICBjbXNVSW50MzJOdW1iZXIgSW50ZW50TGlzdFsyNTZdOw0KLSAgICBjbXNVSW50MzJOdW1iZXIgaTsNCi0NCi0gICAgLy8gVGhpcyBpcyBhIHJhdGhlciBiaWcgbnVtYmVyIGFuZCB0aGVyZSBpcyBubyBuZWVkIG9mIGR5bmFtaWMgbWVtb3J5DQotICAgIC8vIHNpbmNlIHdlIGFyZSBhZGRpbmcgYSBwcm9maWxlLCAyNTQgKyAxID0gMjU1IGFuZCB0aGlzIGlzIHRoZSBsaW1pdA0KLSAgICBpZiAoblByb2ZpbGVzID4gMjU0KSByZXR1cm4gTlVMTDsNCi0NCi0gICAgLy8gVGhlIG91dHB1dCBzcGFjZQ0KLSAgICBoTGFiID0gY21zQ3JlYXRlTGFiNFByb2ZpbGVUSFIoQ29udGV4dElELCBOVUxMKTsNCi0gICAgaWYgKGhMYWIgPT0gTlVMTCkgcmV0dXJuIE5VTEw7DQotDQotICAgIC8vIENyZWF0ZSBhIGNvcHkgb2YgcGFyYW1ldGVycw0KLSAgICBmb3IgKGk9MDsgaSA8IG5Qcm9maWxlczsgaSsrKSB7DQotDQotICAgICAgICBQcm9maWxlTGlzdFtpXSAgICA9IGhQcm9maWxlc1tpXTsNCi0gICAgICAgIEJQQ0xpc3RbaV0gICAgICAgID0gQlBDW2ldOw0KLSAgICAgICAgQWRhcHRhdGlvbkxpc3RbaV0gPSBBZGFwdGF0aW9uU3RhdGVzW2ldOw0KLSAgICAgICAgSW50ZW50TGlzdFtpXSAgICAgPSBJbnRlbnRzW2ldOw0KLSAgICB9DQotDQotICAgIC8vIFBsYWNlIExhYiBpZGVudGl0eSBhdCBjaGFpbidzIGVuZC4NCi0gICAgUHJvZmlsZUxpc3RbblByb2ZpbGVzXSAgICA9IGhMYWI7DQotICAgIEJQQ0xpc3RbblByb2ZpbGVzXSAgICAgICAgPSAwOw0KLSAgICBBZGFwdGF0aW9uTGlzdFtuUHJvZmlsZXNdID0gMS4wOw0KLSAgICBJbnRlbnRMaXN0W25Qcm9maWxlc10gICAgID0gSU5URU5UX1JFTEFUSVZFX0NPTE9SSU1FVFJJQzsNCi0NCi0gICAgLy8gQ3JlYXRlIHRoZSB0cmFuc2Zvcm0NCi0gICAgeGZvcm0gPSBjbXNDcmVhdGVFeHRlbmRlZFRyYW5zZm9ybShDb250ZXh0SUQsIG5Qcm9maWxlcyArIDEsIFByb2ZpbGVMaXN0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJQQ0xpc3QsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZW50TGlzdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGFwdGF0aW9uTGlzdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0Rm9ybWF0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dEZvcm1hdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkd0ZsYWdzKTsNCi0NCi0gICAgY21zQ2xvc2VQcm9maWxlKGhMYWIpOw0KLQ0KLSAgICByZXR1cm4geGZvcm07DQotfQ0KLQ0KLQ0KLS8vIENvbXB1dGUgSyAtPiBMKiByZWxhdGlvbnNoaXAuIEZsYWdzIG1heSBpbmNsdWRlIGJsYWNrIHBvaW50IGNvbXBlbnNhdGlvbi4gSW4gdGhpcyBjYXNlLA0KLS8vIHRoZSByZWxhdGlvbnNoaXAgaXMgYXNzdW1lZCBmcm9tIHRoZSBwcm9maWxlIHdpdGggQlBDIHRvIGEgYmxhY2sgcG9pbnQgemVyby4NCi1zdGF0aWMNCi1jbXNUb25lQ3VydmUqIENvbXB1dGVLVG9Mc3RhcihjbXNDb250ZXh0ICAgICAgICAgICAgQ29udGV4dElELA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNVSW50MzJOdW1iZXIgICAgICAgblBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21zVUludDMyTnVtYmVyICAgICAgIG5Qcm9maWxlcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21zVUludDMyTnVtYmVyIEludGVudHNbXSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21zSFBST0ZJTEUgICAgIGhQcm9maWxlc1tdLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbXNCb29sICAgICAgICAgQlBDW10sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtc0Zsb2F0NjROdW1iZXIgQWRhcHRhdGlvblN0YXRlc1tdLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNVSW50MzJOdW1iZXIgZHdGbGFncykNCi17DQotICAgIGNtc1RvbmVDdXJ2ZSogb3V0ID0gTlVMTDsNCi0gICAgY21zVUludDMyTnVtYmVyIGk7DQotICAgIGNtc0hUUkFOU0ZPUk0geGZvcm07DQotICAgIGNtc0NJRUxhYiBMYWI7DQotICAgIGNtc0Zsb2F0MzJOdW1iZXIgY215a1s0XTsNCi0gICAgY21zRmxvYXQzMk51bWJlciogU2FtcGxlZFBvaW50czsNCi0NCi0gICAgeGZvcm0gPSBfY21zQ2hhaW4yTGFiKENvbnRleHRJRCwgblByb2ZpbGVzLCBUWVBFX0NNWUtfRkxULCBUWVBFX0xhYl9EQkwsIEludGVudHMsIGhQcm9maWxlcywgQlBDLCBBZGFwdGF0aW9uU3RhdGVzLCBkd0ZsYWdzKTsNCi0gICAgaWYgKHhmb3JtID09IE5VTEwpIHJldHVybiBOVUxMOw0KLQ0KLSAgICBTYW1wbGVkUG9pbnRzID0gKGNtc0Zsb2F0MzJOdW1iZXIqKSBfY21zQ2FsbG9jKENvbnRleHRJRCwgblBvaW50cywgc2l6ZW9mKGNtc0Zsb2F0MzJOdW1iZXIpKTsNCi0gICAgaWYgKFNhbXBsZWRQb2ludHMgID09IE5VTEwpIGdvdG8gRXJyb3I7DQotDQotICAgIGZvciAoaT0wOyBpIDwgblBvaW50czsgaSsrKSB7DQotDQotICAgICAgICBjbXlrWzBdID0gMDsNCi0gICAgICAgIGNteWtbMV0gPSAwOw0KLSAgICAgICAgY215a1syXSA9IDA7DQotICAgICAgICBjbXlrWzNdID0gKGNtc0Zsb2F0MzJOdW1iZXIpICgoaSAqIDEwMC4wKSAvIChuUG9pbnRzLTEpKTsNCi0NCi0gICAgICAgIGNtc0RvVHJhbnNmb3JtKHhmb3JtLCBjbXlrLCAmTGFiLCAxKTsNCi0gICAgICAgIFNhbXBsZWRQb2ludHNbaV09IChjbXNGbG9hdDMyTnVtYmVyKSAoMS4wIC0gTGFiLkwgLyAxMDAuMCk7IC8vIE5lZ2F0ZSBLIGZvciBlYXNpZXIgb3BlcmF0aW9uDQotICAgIH0NCi0NCi0gICAgb3V0ID0gY21zQnVpbGRUYWJ1bGF0ZWRUb25lQ3VydmVGbG9hdChDb250ZXh0SUQsIG5Qb2ludHMsIFNhbXBsZWRQb2ludHMpOw0KLQ0KLUVycm9yOg0KLQ0KLSAgICBjbXNEZWxldGVUcmFuc2Zvcm0oeGZvcm0pOw0KLSAgICBpZiAoU2FtcGxlZFBvaW50cykgX2Ntc0ZyZWUoQ29udGV4dElELCBTYW1wbGVkUG9pbnRzKTsNCi0NCi0gICAgcmV0dXJuIG91dDsNCi19DQotDQotDQotLy8gQ29tcHV0ZSBCbGFjayB0b25lIGN1cnZlIG9uIGEgQ01ZSyAtPiBDTVlLIHRyYW5zZm9ybS4gVGhpcyBpcyBkb25lIGJ5DQotLy8gdXNpbmcgdGhlIHByb29mIGRpcmVjdGlvbiBvbiBib3RoIHByb2ZpbGVzIHRvIGZpbmQgSy0+TCogcmVsYXRpb25zaGlwDQotLy8gdGhlbiBqb2luaW5nIGJvdGggY3VydmVzLiBkd0ZsYWdzIG1heSBpbmNsdWRlIGJsYWNrIHBvaW50IGNvbXBlbnNhdGlvbi4NCi1jbXNUb25lQ3VydmUqIF9jbXNCdWlsZEtUb25lQ3VydmUoY21zQ29udGV4dCAgICAgICAgQ29udGV4dElELA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21zVUludDMyTnVtYmVyICAgblBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc1VJbnQzMk51bWJlciAgIG5Qcm9maWxlcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtc1VJbnQzMk51bWJlciBJbnRlbnRzW10sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbXNIUFJPRklMRSBoUHJvZmlsZXNbXSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtc0Jvb2wgICAgIEJQQ1tdLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21zRmxvYXQ2NE51bWJlciBBZGFwdGF0aW9uU3RhdGVzW10sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNVSW50MzJOdW1iZXIgICBkd0ZsYWdzKQ0KLXsNCi0gICAgY21zVG9uZUN1cnZlICppbiwgKm91dCwgKktUb25lOw0KLQ0KLSAgICAvLyBNYWtlIHN1cmUgQ01ZSyAtPiBDTVlLDQotICAgIGlmIChjbXNHZXRDb2xvclNwYWNlKGhQcm9maWxlc1swXSkgIT0gY21zU2lnQ215a0RhdGEgfHwNCi0gICAgICAgIGNtc0dldENvbG9yU3BhY2UoaFByb2ZpbGVzW25Qcm9maWxlcy0xXSkhPSBjbXNTaWdDbXlrRGF0YSkgcmV0dXJuIE5VTEw7DQotDQotDQotICAgIC8vIE1ha2Ugc3VyZSBsYXN0IGlzIGFuIG91dHB1dCBwcm9maWxlDQotICAgIGlmIChjbXNHZXREZXZpY2VDbGFzcyhoUHJvZmlsZXNbblByb2ZpbGVzIC0gMV0pICE9IGNtc1NpZ091dHB1dENsYXNzKSByZXR1cm4gTlVMTDsNCi0NCi0gICAgLy8gQ3JlYXRlIGluZGl2aWR1YWwgY3VydmVzLiBCUEMgd29ya3MgYWxzbyBhcyBlYWNoIEsgdG8gTCogaXMNCi0gICAgLy8gY29tcHV0ZWQgYXMgYSBCUEMgdG8gemVybyBibGFjayBwb2ludCBpbiBjYXNlIG9mIEwqDQotICAgIGluICA9IENvbXB1dGVLVG9Mc3RhcihDb250ZXh0SUQsIG5Qb2ludHMsIG5Qcm9maWxlcyAtIDEsIEludGVudHMsIGhQcm9maWxlcywgQlBDLCBBZGFwdGF0aW9uU3RhdGVzLCBkd0ZsYWdzKTsNCi0gICAgaWYgKGluID09IE5VTEwpIHJldHVybiBOVUxMOw0KLQ0KLSAgICBvdXQgPSBDb21wdXRlS1RvTHN0YXIoQ29udGV4dElELCBuUG9pbnRzLCAxLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbnRzICsgKG5Qcm9maWxlcyAtIDEpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaFByb2ZpbGVzIFtuUHJvZmlsZXMgLSAxXSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQlBDICsgKG5Qcm9maWxlcyAtIDEpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGFwdGF0aW9uU3RhdGVzICsgKG5Qcm9maWxlcyAtIDEpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkd0ZsYWdzKTsNCi0gICAgaWYgKG91dCA9PSBOVUxMKSB7DQotICAgICAgICBjbXNGcmVlVG9uZUN1cnZlKGluKTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotDQotICAgIC8vIEJ1aWxkIHRoZSByZWxhdGlvbnNoaXAuIFRoaXMgZWZmZWN0aXZlbHkgbGltaXRzIHRoZSBtYXhpbXVtIGFjY3VyYWN5IHRvIDE2IGJpdHMsIGJ1dA0KLSAgICAvLyBzaW5jZSB0aGlzIGlzIHVzZWQgb24gYmxhY2stcHJlc2VydmluZyBMVVRzLCB3ZSBhcmUgbm90IGxvb3NpbmcgIGFjY3VyYWN5IGluIGFueSBjYXNlDQotICAgIEtUb25lID0gY21zSm9pblRvbmVDdXJ2ZShDb250ZXh0SUQsIGluLCBvdXQsIG5Qb2ludHMpOw0KLQ0KLSAgICAvLyBHZXQgcmlkIG9mIGNvbXBvbmVudHMNCi0gICAgY21zRnJlZVRvbmVDdXJ2ZShpbik7IGNtc0ZyZWVUb25lQ3VydmUob3V0KTsNCi0NCi0gICAgLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcuLi4NCi0gICAgaWYgKEtUb25lID09IE5VTEwpIHJldHVybiBOVUxMOw0KLQ0KLSAgICAvLyBNYWtlIHN1cmUgaXQgaXMgbW9ub3RvbmljDQotICAgIGlmICghY21zSXNUb25lQ3VydmVNb25vdG9uaWMoS1RvbmUpKSB7DQotICAgICAgICBjbXNGcmVlVG9uZUN1cnZlKEtUb25lKTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotDQotICAgIHJldHVybiBLVG9uZTsNCi19DQotDQotDQotLy8gR2FtdXQgTFVUIENyZWF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotLy8gVXNlZCBieSBnYW11dCAmIHNvZnRwcm9vZmluZw0KLQ0KLXR5cGVkZWYgc3RydWN0IHsNCi0NCi0gICAgY21zSFRSQU5TRk9STSBoSW5wdXQ7ICAgICAgICAgICAgICAgLy8gRnJvbSB3aGF0ZXZlciBpbnB1dCBjb2xvciBzcGFjZS4gMTYgYml0cyB0byBEQkwNCi0gICAgY21zSFRSQU5TRk9STSBoRm9yd2FyZCwgaFJldmVyc2U7ICAgLy8gVHJhbnNmb3JtcyBnb2luZyBmcm9tIExhYiB0byBjb2xvcmFudCBhbmQgYmFjaw0KLSAgICBjbXNGbG9hdDY0TnVtYmVyIFRoZXJlc2hvbGQ7ICAgICAgICAvLyBUaGUgdGhlcmVzaG9sZCBhZnRlciB3aGljaCBpcyBjb25zaWRlcmVkIG91dCBvZiBnYW11dA0KLQ0KLSAgICB9IEdBTVVUQ0hBSU47DQotDQotLy8gVGhpcyBzYW1wbGVyIGRvZXMgY29tcHV0ZSBnYW11dCBib3VuZGFyaWVzIGJ5IGNvbXBhcmluZyBvcmlnaW5hbA0KLS8vIHZhbHVlcyB3aXRoIGEgdHJhbnNmb3JtIGdvaW5nIGJhY2sgYW5kIGZvcnRoLiBWYWx1ZXMgYWJvdmUgRVJSX1RIRVJFU0hPTEQNCi0vLyBvZiBtYXhpbXVtIGFyZSBjb25zaWRlcmVkIG91dCBvZiBnYW11dC4NCi0NCi0jZGVmaW5lIEVSUl9USEVSRVNIT0xEICAgICAgNQ0KLQ0KLQ0KLXN0YXRpYw0KLWludCBHYW11dFNhbXBsZXIocmVnaXN0ZXIgY29uc3QgY21zVUludDE2TnVtYmVyIEluW10sIHJlZ2lzdGVyIGNtc1VJbnQxNk51bWJlciBPdXRbXSwgcmVnaXN0ZXIgdm9pZCogQ2FyZ28pDQotew0KLSAgICBHQU1VVENIQUlOKiAgdCA9IChHQU1VVENIQUlOKiApIENhcmdvOw0KLSAgICBjbXNDSUVMYWIgTGFiSW4xLCBMYWJPdXQxOw0KLSAgICBjbXNDSUVMYWIgTGFiSW4yLCBMYWJPdXQyOw0KLSAgICBjbXNVSW50MTZOdW1iZXIgUHJvb2ZbY21zTUFYQ0hBTk5FTFNdLCBQcm9vZjJbY21zTUFYQ0hBTk5FTFNdOw0KLSAgICBjbXNGbG9hdDY0TnVtYmVyIGRFMSwgZEUyLCBFcnJvclJhdGlvOw0KLQ0KLSAgICAvLyBBc3N1bWUgaW4tZ2FtdXQgYnkgZGVmYXVsdC4NCi0gICAgRXJyb3JSYXRpbyA9IDEuMDsNCi0NCi0gICAgLy8gQ29udmVydCBpbnB1dCB0byBMYWINCi0gICAgY21zRG9UcmFuc2Zvcm0odCAtPiBoSW5wdXQsIEluLCAmTGFiSW4xLCAxKTsNCi0NCi0gICAgLy8gY29udmVydHMgZnJvbSBQQ1MgdG8gY29sb3JhbnQuIFRoaXMgYWx3YXlzDQotICAgIC8vIGRvZXMgcmV0dXJuIGluLWdhbXV0IHZhbHVlcywNCi0gICAgY21zRG9UcmFuc2Zvcm0odCAtPiBoRm9yd2FyZCwgJkxhYkluMSwgUHJvb2YsIDEpOw0KLQ0KLSAgICAvLyBOb3csIGRvIHRoZSBpbnZlcnNlLCBmcm9tIGNvbG9yYW50IHRvIFBDUy4NCi0gICAgY21zRG9UcmFuc2Zvcm0odCAtPiBoUmV2ZXJzZSwgUHJvb2YsICZMYWJPdXQxLCAxKTsNCi0NCi0gICAgbWVtbW92ZSgmTGFiSW4yLCAmTGFiT3V0MSwgc2l6ZW9mKGNtc0NJRUxhYikpOw0KLQ0KLSAgICAvLyBUcnkgYWdhaW4sIGJ1dCB0aGlzIHRpbWUgdGFraW5nIENoZWNrIGFzIGlucHV0DQotICAgIGNtc0RvVHJhbnNmb3JtKHQgLT4gaEZvcndhcmQsICZMYWJPdXQxLCBQcm9vZjIsIDEpOw0KLSAgICBjbXNEb1RyYW5zZm9ybSh0IC0+IGhSZXZlcnNlLCBQcm9vZjIsICZMYWJPdXQyLCAxKTsNCi0NCi0gICAgLy8gVGFrZSBkaWZmZXJlbmNlIG9mIGRpcmVjdCB2YWx1ZQ0KLSAgICBkRTEgPSBjbXNEZWx0YUUoJkxhYkluMSwgJkxhYk91dDEpOw0KLQ0KLSAgICAvLyBUYWtlIGRpZmZlcmVuY2Ugb2YgY29udmVydGVkIHZhbHVlDQotICAgIGRFMiA9IGNtc0RlbHRhRSgmTGFiSW4yLCAmTGFiT3V0Mik7DQotDQotDQotICAgIC8vIGlmIGRFMSBpcyBzbWFsbCBhbmQgZEUyIGlzIHNtYWxsLCB2YWx1ZSBpcyBsaWtlbHkgdG8gYmUgaW4gZ2FtdXQNCi0gICAgaWYgKGRFMSA8IHQtPlRoZXJlc2hvbGQgJiYgZEUyIDwgdC0+VGhlcmVzaG9sZCkNCi0gICAgICAgIE91dFswXSA9IDA7DQotICAgIGVsc2Ugew0KLQ0KLSAgICAgICAgLy8gaWYgZEUxIGlzIHNtYWxsIGFuZCBkRTIgaXMgYmlnLCB1bmRlZmluZWQuIEFzc3VtZSBpbiBnYW11dA0KLSAgICAgICAgaWYgKGRFMSA8IHQtPlRoZXJlc2hvbGQgJiYgZEUyID4gdC0+VGhlcmVzaG9sZCkNCi0gICAgICAgICAgICBPdXRbMF0gPSAwOw0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgIC8vIGRFMSBpcyBiaWcgYW5kIGRFMiBpcyBzbWFsbCwgY2xlYXJseSBvdXQgb2YgZ2FtdXQNCi0gICAgICAgICAgICBpZiAoZEUxID4gdC0+VGhlcmVzaG9sZCAmJiBkRTIgPCB0LT5UaGVyZXNob2xkKQ0KLSAgICAgICAgICAgICAgICBPdXRbMF0gPSAoY21zVUludDE2TnVtYmVyKSBfY21zUXVpY2tGbG9vcigoZEUxIC0gdC0+VGhlcmVzaG9sZCkgKyAuNSk7DQotICAgICAgICAgICAgZWxzZSAgew0KLQ0KLSAgICAgICAgICAgICAgICAvLyBkRTEgaXMgYmlnIGFuZCBkRTIgaXMgYWxzbyBiaWcsIGNvdWxkIGJlIGR1ZSB0byBwZXJjZXB0dWFsIG1hcHBpbmcNCi0gICAgICAgICAgICAgICAgLy8gc28gdGFrZSBlcnJvciByYXRpbw0KLSAgICAgICAgICAgICAgICBpZiAoZEUyID09IDAuMCkNCi0gICAgICAgICAgICAgICAgICAgIEVycm9yUmF0aW8gPSBkRTE7DQotICAgICAgICAgICAgICAgIGVsc2UNCi0gICAgICAgICAgICAgICAgICAgIEVycm9yUmF0aW8gPSBkRTEgLyBkRTI7DQotDQotICAgICAgICAgICAgICAgIGlmIChFcnJvclJhdGlvID4gdC0+VGhlcmVzaG9sZCkNCi0gICAgICAgICAgICAgICAgICAgIE91dFswXSA9IChjbXNVSW50MTZOdW1iZXIpICBfY21zUXVpY2tGbG9vcigoRXJyb3JSYXRpbyAtIHQtPlRoZXJlc2hvbGQpICsgLjUpOw0KLSAgICAgICAgICAgICAgICBlbHNlDQotICAgICAgICAgICAgICAgICAgICBPdXRbMF0gPSAwOw0KLSAgICAgICAgICAgIH0NCi0gICAgfQ0KLQ0KLQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotDQotLy8gRG9lcyBjb21wdXRlIGEgZ2FtdXQgTFVUIGdvaW5nIGJhY2sgYW5kIGZvcnRoIGFjcm9zcyBwY3MgLT4gcmVsYXRpdi4gY29sb3JpbWV0cmljIGludGVudCAtPiBwY3MNCi0vLyB0aGUgZEUgb2J0YWluZWQgaXMgdGhlbiBhbm5vdGF0ZWQgb24gdGhlIExVVC4gVmFsdWVzIHRydWVseSBvdXQgb2YgZ2FtdXQgYXJlIGNsaXBwZWQgdG8gZEUgPSAweEZGRkUNCi0vLyBhbmQgdmFsdWVzIGNoYW5nZWQgYXJlIHN1cHBvc2VkIHRvIGJlIGhhbmRsZWQgYnkgYW55IGdhbXV0IHJlbWFwcGluZywgc28sIGFyZSBvdXQgb2YgZ2FtdXQgYXMgd2VsbC4NCi0vLw0KLS8vICoqV0FSTklORzogVGhpcyBhbGdvcml0aG0gZG9lcyBhc3N1bWUgdGhhdCBnYW11dCByZW1hcHBpbmcgYWxnb3JpdGhtcyBkb2VzIE5PVCBtb3ZlIGluLWdhbXV0IGNvbG9ycywNCi0vLyBvZiBjb3Vyc2UsIG1hbnkgcGVyY2VwdHVhbCBhbmQgc2F0dXJhdGlvbiBpbnRlbnRzIGRvZXMgbm90IHdvcmsgaW4gc3VjaCB3YXksIGJ1dCByZWxhdGl2LiBvbmVzIHNob3VsZC4NCi0NCi1jbXNQaXBlbGluZSogX2Ntc0NyZWF0ZUdhbXV0Q2hlY2tQaXBlbGluZShjbXNDb250ZXh0IENvbnRleHRJRCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNIUFJPRklMRSBoUHJvZmlsZXNbXSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNCb29sICBCUENbXSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNVSW50MzJOdW1iZXIgSW50ZW50c1tdLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc0Zsb2F0NjROdW1iZXIgQWRhcHRhdGlvblN0YXRlc1tdLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc1VJbnQzMk51bWJlciBuR2FtdXRQQ1Nwb3NpdGlvbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNIUFJPRklMRSBoR2FtdXQpDQotew0KLSAgICBjbXNIUFJPRklMRSBoTGFiOw0KLSAgICBjbXNQaXBlbGluZSogR2FtdXQ7DQotICAgIGNtc1N0YWdlKiBDTFVUOw0KLSAgICBjbXNVSW50MzJOdW1iZXIgZHdGb3JtYXQ7DQotICAgIEdBTVVUQ0hBSU4gQ2hhaW47DQotICAgIGludCBuQ2hhbm5lbHMsIG5HcmlkcG9pbnRzOw0KLSAgICBjbXNDb2xvclNwYWNlU2lnbmF0dXJlIENvbG9yU3BhY2U7DQotICAgIGNtc1VJbnQzMk51bWJlciBpOw0KLSAgICBjbXNIUFJPRklMRSBQcm9maWxlTGlzdFsyNTZdOw0KLSAgICBjbXNCb29sICAgICBCUENMaXN0WzI1Nl07DQotICAgIGNtc0Zsb2F0NjROdW1iZXIgQWRhcHRhdGlvbkxpc3RbMjU2XTsNCi0gICAgY21zVUludDMyTnVtYmVyIEludGVudExpc3RbMjU2XTsNCi0NCi0gICAgbWVtc2V0KCZDaGFpbiwgMCwgc2l6ZW9mKEdBTVVUQ0hBSU4pKTsNCi0NCi0NCi0gICAgaWYgKG5HYW11dFBDU3Bvc2l0aW9uIDw9IDAgfHwgbkdhbXV0UENTcG9zaXRpb24gPiAyNTUpIHsNCi0gICAgICAgIGNtc1NpZ25hbEVycm9yKENvbnRleHRJRCwgY21zRVJST1JfUkFOR0UsICJXcm9uZyBwb3NpdGlvbiBvZiBQQ1MuIDEuLjI1NSBleHBlY3RlZCwgJWQgZm91bmQuIiwgbkdhbXV0UENTcG9zaXRpb24pOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0NCi0gICAgaExhYiA9IGNtc0NyZWF0ZUxhYjRQcm9maWxlVEhSKENvbnRleHRJRCwgTlVMTCk7DQotICAgIGlmIChoTGFiID09IE5VTEwpIHJldHVybiBOVUxMOw0KLQ0KLQ0KLSAgICAvLyBUaGUgZmlndXJlIG9mIG1lcml0LiBPbiBtYXRyaXgtc2hhcGVyIHByb2ZpbGVzLCBzaG91bGQgYmUgYWxtb3N0IHplcm8gYXMNCi0gICAgLy8gdGhlIGNvbnZlcnNpb24gaXMgcHJldHR5IGV4YWN0LiBPbiBMVVQgYmFzZWQgcHJvZmlsZXMsIGRpZmZlcmVudCByZXNvbHV0aW9ucw0KLSAgICAvLyBvZiBpbnB1dCBhbmQgb3V0cHV0IENMVVQgbWF5IHJlc3VsdCBpbiBkaWZmZXJlbmNlcy4NCi0NCi0gICAgaWYgKGNtc0lzTWF0cml4U2hhcGVyKGhHYW11dCkpIHsNCi0NCi0gICAgICAgIENoYWluLlRoZXJlc2hvbGQgPSAxLjA7DQotICAgIH0NCi0gICAgZWxzZSB7DQotICAgICAgICBDaGFpbi5UaGVyZXNob2xkID0gRVJSX1RIRVJFU0hPTEQ7DQotICAgIH0NCi0NCi0NCi0gICAgLy8gQ3JlYXRlIGEgY29weSBvZiBwYXJhbWV0ZXJzDQotICAgIGZvciAoaT0wOyBpIDwgbkdhbXV0UENTcG9zaXRpb247IGkrKykgew0KLSAgICAgICAgUHJvZmlsZUxpc3RbaV0gICAgPSBoUHJvZmlsZXNbaV07DQotICAgICAgICBCUENMaXN0W2ldICAgICAgICA9IEJQQ1tpXTsNCi0gICAgICAgIEFkYXB0YXRpb25MaXN0W2ldID0gQWRhcHRhdGlvblN0YXRlc1tpXTsNCi0gICAgICAgIEludGVudExpc3RbaV0gICAgID0gSW50ZW50c1tpXTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBGaWxsIExhYiBpZGVudGl0eQ0KLSAgICBQcm9maWxlTGlzdFtuR2FtdXRQQ1Nwb3NpdGlvbl0gPSBoTGFiOw0KLSAgICBCUENMaXN0W25HYW11dFBDU3Bvc2l0aW9uXSA9IDA7DQotICAgIEFkYXB0YXRpb25MaXN0W25HYW11dFBDU3Bvc2l0aW9uXSA9IDEuMDsNCi0gICAgSW50ZW50TGlzdFtuR2FtdXRQQ1Nwb3NpdGlvbl0gPSBJTlRFTlRfUkVMQVRJVkVfQ09MT1JJTUVUUklDOw0KLQ0KLQ0KLSAgICBDb2xvclNwYWNlICA9IGNtc0dldENvbG9yU3BhY2UoaEdhbXV0KTsNCi0NCi0gICAgbkNoYW5uZWxzICAgPSBjbXNDaGFubmVsc09mKENvbG9yU3BhY2UpOw0KLSAgICBuR3JpZHBvaW50cyA9IF9jbXNSZWFzb25hYmxlR3JpZHBvaW50c0J5Q29sb3JzcGFjZShDb2xvclNwYWNlLCBjbXNGTEFHU19ISUdIUkVTUFJFQ0FMQyk7DQotICAgIGR3Rm9ybWF0ICAgID0gKENIQU5ORUxTX1NIKG5DaGFubmVscyl8QllURVNfU0goMikpOw0KLQ0KLSAgICAvLyAxNiBiaXRzIHRvIExhYiBkb3VibGUNCi0gICAgQ2hhaW4uaElucHV0ID0gY21zQ3JlYXRlRXh0ZW5kZWRUcmFuc2Zvcm0oQ29udGV4dElELA0KLSAgICAgICAgbkdhbXV0UENTcG9zaXRpb24gKyAxLA0KLSAgICAgICAgUHJvZmlsZUxpc3QsDQotICAgICAgICBCUENMaXN0LA0KLSAgICAgICAgSW50ZW50TGlzdCwNCi0gICAgICAgIEFkYXB0YXRpb25MaXN0LA0KLSAgICAgICAgTlVMTCwgMCwNCi0gICAgICAgIGR3Rm9ybWF0LCBUWVBFX0xhYl9EQkwsDQotICAgICAgICBjbXNGTEFHU19OT0NBQ0hFKTsNCi0NCi0NCi0gICAgLy8gRG9lcyBjcmVhdGUgdGhlIGZvcndhcmQgc3RlcC4gTGFiIGRvdWJsZSB0byBkZXZpY2UNCi0gICAgZHdGb3JtYXQgICAgPSAoQ0hBTk5FTFNfU0gobkNoYW5uZWxzKXxCWVRFU19TSCgyKSk7DQotICAgIENoYWluLmhGb3J3YXJkID0gY21zQ3JlYXRlVHJhbnNmb3JtVEhSKENvbnRleHRJRCwNCi0gICAgICAgIGhMYWIsIFRZUEVfTGFiX0RCTCwNCi0gICAgICAgIGhHYW11dCwgZHdGb3JtYXQsDQotICAgICAgICBJTlRFTlRfUkVMQVRJVkVfQ09MT1JJTUVUUklDLA0KLSAgICAgICAgY21zRkxBR1NfTk9DQUNIRSk7DQotDQotICAgIC8vIERvZXMgY3JlYXRlIHRoZSBiYWNrd2FyZHMgc3RlcA0KLSAgICBDaGFpbi5oUmV2ZXJzZSA9IGNtc0NyZWF0ZVRyYW5zZm9ybVRIUihDb250ZXh0SUQsIGhHYW11dCwgZHdGb3JtYXQsDQotICAgICAgICBoTGFiLCBUWVBFX0xhYl9EQkwsDQotICAgICAgICBJTlRFTlRfUkVMQVRJVkVfQ09MT1JJTUVUUklDLA0KLSAgICAgICAgY21zRkxBR1NfTk9DQUNIRSk7DQotDQotDQotICAgIC8vIEFsbCBvaz8NCi0gICAgaWYgKENoYWluLmhJbnB1dCAmJiBDaGFpbi5oRm9yd2FyZCAmJiBDaGFpbi5oUmV2ZXJzZSkgew0KLQ0KLSAgICAgICAgLy8gR28gb24sIHRyeSB0byBjb21wdXRlIGdhbXV0IExVVCBmcm9tIFBDUy4gVGhpcyBjb25zaXN0IG9uIGEgc2luZ2xlIGNoYW5uZWwgY29udGFpbmluZw0KLSAgICAgICAgLy8gZEUgd2hlbiBkb2luZyBhIHRyYW5zZm9ybSBiYWNrIGFuZCBmb3J0aCBvbiB0aGUgY29sb3JpbWV0cmljIGludGVudC4NCi0NCi0gICAgICAgIEdhbXV0ID0gY21zUGlwZWxpbmVBbGxvYyhDb250ZXh0SUQsIDMsIDEpOw0KLSAgICAgICAgaWYgKEdhbXV0ICE9IE5VTEwpIHsNCi0NCi0gICAgICAgICAgICBDTFVUID0gY21zU3RhZ2VBbGxvY0NMdXQxNmJpdChDb250ZXh0SUQsIG5HcmlkcG9pbnRzLCBuQ2hhbm5lbHMsIDEsIE5VTEwpOw0KLSAgICAgICAgICAgIGlmICghY21zUGlwZWxpbmVJbnNlcnRTdGFnZShHYW11dCwgY21zQVRfQkVHSU4sIENMVVQpKSB7DQotICAgICAgICAgICAgICAgIGNtc1BpcGVsaW5lRnJlZShHYW11dCk7DQotICAgICAgICAgICAgICAgIEdhbXV0ID0gTlVMTDsNCi0gICAgICAgICAgICB9IA0KLSAgICAgICAgICAgIGVsc2Ugew0KLSAgICAgICAgICAgICAgICBjbXNTdGFnZVNhbXBsZUNMdXQxNmJpdChDTFVULCBHYW11dFNhbXBsZXIsICh2b2lkKikgJkNoYWluLCAwKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgZWxzZQ0KLSAgICAgICAgR2FtdXQgPSBOVUxMOyAgIC8vIERpZG4ndCB3b3JrLi4uDQotDQotICAgIC8vIEZyZWUgYWxsIG5lZWRlZCBzdHVmZi4NCi0gICAgaWYgKENoYWluLmhJbnB1dCkgICBjbXNEZWxldGVUcmFuc2Zvcm0oQ2hhaW4uaElucHV0KTsNCi0gICAgaWYgKENoYWluLmhGb3J3YXJkKSBjbXNEZWxldGVUcmFuc2Zvcm0oQ2hhaW4uaEZvcndhcmQpOw0KLSAgICBpZiAoQ2hhaW4uaFJldmVyc2UpIGNtc0RlbGV0ZVRyYW5zZm9ybShDaGFpbi5oUmV2ZXJzZSk7DQotICAgIGlmIChoTGFiKSBjbXNDbG9zZVByb2ZpbGUoaExhYik7DQotDQotICAgIC8vIEFuZCByZXR1cm4gY29tcHV0ZWQgaHVsbA0KLSAgICByZXR1cm4gR2FtdXQ7DQotfQ0KLQ0KLS8vIFRvdGFsIEFyZWEgQ292ZXJhZ2UgZXN0aW1hdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgICBjbXNVSW50MzJOdW1iZXIgIG5PdXRwdXRDaGFuczsNCi0gICAgY21zSFRSQU5TRk9STSAgICBoUm91bmRUcmlwOw0KLSAgICBjbXNGbG9hdDMyTnVtYmVyIE1heFRBQzsNCi0gICAgY21zRmxvYXQzMk51bWJlciBNYXhJbnB1dFtjbXNNQVhDSEFOTkVMU107DQotDQotfSBjbXNUQUNlc3RpbWF0b3I7DQotDQotDQotLy8gVGhpcyBjYWxsYmFjayBqdXN0IGFjY291bnRzIHRoZSBtYXhpbXVtIGluayBkcm9wcGVkIGluIHRoZSBnaXZlbiBub2RlLiBJdCBkb2VzIG5vdCBwb3B1bGF0ZSBhbnkNCi0vLyBtZW1vcnksIGFzIHRoZSBkZXN0aW5hdGlvbiB0YWJsZSBpcyBOVUxMLiBJdHMgb25seSBwdXJwb3NlIGl0IHRvIGtub3cgdGhlIGdsb2JhbCBtYXhpbXVtLg0KLXN0YXRpYw0KLWludCBFc3RpbWF0ZVRBQyhyZWdpc3RlciBjb25zdCBjbXNVSW50MTZOdW1iZXIgSW5bXSwgcmVnaXN0ZXIgY21zVUludDE2TnVtYmVyIE91dFtdLCByZWdpc3RlciB2b2lkICogQ2FyZ28pDQotew0KLSAgICBjbXNUQUNlc3RpbWF0b3IqIGJwID0gKGNtc1RBQ2VzdGltYXRvciopIENhcmdvOw0KLSAgICBjbXNGbG9hdDMyTnVtYmVyIFJvdW5kVHJpcFtjbXNNQVhDSEFOTkVMU107DQotICAgIGNtc1VJbnQzMk51bWJlciBpOw0KLSAgICBjbXNGbG9hdDMyTnVtYmVyIFN1bTsNCi0NCi0NCi0gICAgLy8gRXZhbHVhdGUgdGhlIHhmb3JtDQotICAgIGNtc0RvVHJhbnNmb3JtKGJwLT5oUm91bmRUcmlwLCBJbiwgUm91bmRUcmlwLCAxKTsNCi0NCi0gICAgLy8gQWxsIGFsbCBhbW91bnRzIG9mIGluaw0KLSAgICBmb3IgKFN1bT0wLCBpPTA7IGkgPCBicCAtPm5PdXRwdXRDaGFuczsgaSsrKQ0KLSAgICAgICAgICAgIFN1bSArPSBSb3VuZFRyaXBbaV07DQotDQotICAgIC8vIElmIGFib3ZlIG1heGltdW0sIGtlZXAgdHJhY2sgb2YgaW5wdXQgdmFsdWVzDQotICAgIGlmIChTdW0gPiBicCAtPk1heFRBQykgew0KLQ0KLSAgICAgICAgICAgIGJwIC0+TWF4VEFDID0gU3VtOw0KLQ0KLSAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgYnAgLT5uT3V0cHV0Q2hhbnM7IGkrKykgew0KLSAgICAgICAgICAgICAgICBicCAtPk1heElucHV0W2ldID0gSW5baV07DQotICAgICAgICAgICAgfQ0KLSAgICB9DQotDQotICAgIHJldHVybiBUUlVFOw0KLQ0KLSAgICBjbXNVTlVTRURfUEFSQU1FVEVSKE91dCk7DQotfQ0KLQ0KLQ0KLS8vIERldGVjdCBUb3RhbCBhcmVhIGNvdmVyYWdlIG9mIHRoZSBwcm9maWxlDQotY21zRmxvYXQ2NE51bWJlciBDTVNFWFBPUlQgY21zRGV0ZWN0VEFDKGNtc0hQUk9GSUxFIGhQcm9maWxlKQ0KLXsNCi0gICAgY21zVEFDZXN0aW1hdG9yIGJwOw0KLSAgICBjbXNVSW50MzJOdW1iZXIgZHdGb3JtYXR0ZXI7DQotICAgIGNtc1VJbnQzMk51bWJlciBHcmlkUG9pbnRzW01BWF9JTlBVVF9ESU1FTlNJT05TXTsNCi0gICAgY21zSFBST0ZJTEUgaExhYjsNCi0gICAgY21zQ29udGV4dCBDb250ZXh0SUQgPSBjbXNHZXRQcm9maWxlQ29udGV4dElEKGhQcm9maWxlKTsNCi0NCi0gICAgLy8gVEFDIG9ubHkgd29ya3Mgb24gb3V0cHV0IHByb2ZpbGVzDQotICAgIGlmIChjbXNHZXREZXZpY2VDbGFzcyhoUHJvZmlsZSkgIT0gY21zU2lnT3V0cHV0Q2xhc3MpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotDQotICAgIC8vIENyZWF0ZSBhIGZha2UgZm9ybWF0dGVyIGZvciByZXN1bHQNCi0gICAgZHdGb3JtYXR0ZXIgPSBjbXNGb3JtYXR0ZXJGb3JDb2xvcnNwYWNlT2ZQcm9maWxlKGhQcm9maWxlLCA0LCBUUlVFKTsNCi0NCi0gICAgYnAubk91dHB1dENoYW5zID0gVF9DSEFOTkVMUyhkd0Zvcm1hdHRlcik7DQotICAgIGJwLk1heFRBQyA9IDA7ICAgIC8vIEluaXRpYWwgVEFDIGlzIDANCi0NCi0gICAgLy8gIGZvciBzYWZldHkNCi0gICAgaWYgKGJwLm5PdXRwdXRDaGFucyA+PSBjbXNNQVhDSEFOTkVMUykgcmV0dXJuIDA7DQotDQotICAgIGhMYWIgPSBjbXNDcmVhdGVMYWI0UHJvZmlsZVRIUihDb250ZXh0SUQsIE5VTEwpOw0KLSAgICBpZiAoaExhYiA9PSBOVUxMKSByZXR1cm4gMDsNCi0gICAgLy8gU2V0dXAgYSByb3VuZHRyaXAgb24gcGVyY2VwdHVhbCBpbnRlbnQgaW4gb3V0cHV0IHByb2ZpbGUgZm9yIFRBQyBlc3RpbWF0aW9uDQotICAgIGJwLmhSb3VuZFRyaXAgPSBjbXNDcmVhdGVUcmFuc2Zvcm1USFIoQ29udGV4dElELCBoTGFiLCBUWVBFX0xhYl8xNiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoUHJvZmlsZSwgZHdGb3JtYXR0ZXIsIElOVEVOVF9QRVJDRVBUVUFMLCBjbXNGTEFHU19OT09QVElNSVpFfGNtc0ZMQUdTX05PQ0FDSEUpOw0KLQ0KLSAgICBjbXNDbG9zZVByb2ZpbGUoaExhYik7DQotICAgIGlmIChicC5oUm91bmRUcmlwID09IE5VTEwpIHJldHVybiAwOw0KLQ0KLSAgICAvLyBGb3IgTCogd2Ugb25seSBuZWVkIGJsYWNrIGFuZCB3aGl0ZS4gRm9yIEMqIHdlIG5lZWQgbWFueSBwb2ludHMNCi0gICAgR3JpZFBvaW50c1swXSA9IDY7DQotICAgIEdyaWRQb2ludHNbMV0gPSA3NDsNCi0gICAgR3JpZFBvaW50c1syXSA9IDc0Ow0KLQ0KLQ0KLSAgICBpZiAoIWNtc1NsaWNlU3BhY2UxNigzLCBHcmlkUG9pbnRzLCBFc3RpbWF0ZVRBQywgJmJwKSkgew0KLSAgICAgICAgYnAuTWF4VEFDID0gMDsNCi0gICAgfQ0KLQ0KLSAgICBjbXNEZWxldGVUcmFuc2Zvcm0oYnAuaFJvdW5kVHJpcCk7DQotDQotICAgIC8vIFJlc3VsdHMgaW4gJQ0KLSAgICByZXR1cm4gYnAuTWF4VEFDOw0KLX0NCi0NCi0NCi0vLyBDYXJlZnVsbHksICBjbGFtcCBvbiBDSUVMYWIgc3BhY2UuDQotDQotY21zQm9vbCBDTVNFWFBPUlQgY21zRGVzYXR1cmF0ZUxhYihjbXNDSUVMYWIqIExhYiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhbWF4LCBkb3VibGUgYW1pbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBibWF4LCBkb3VibGUgYm1pbikNCi17DQotDQotICAgIC8vIFdob2xlIEx1bWEgc3VyZmFjZSB0byB6ZXJvDQotDQotICAgIGlmIChMYWIgLT4gTCA8IDApIHsNCi0NCi0gICAgICAgIExhYi0+IEwgPSBMYWItPmEgPSBMYWItPiBiID0gMC4wOw0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotDQotICAgIC8vIENsYW1wIHdoaXRlLCBESVNDQVJEIEhJR0hMSUdIVFMuIFRoaXMgaXMgZG9uZQ0KLSAgICAvLyBpbiBzdWNoIHdheSBiZWNhdXNlIGljYyBzcGVjIGRvZXNuJ3QgYWxsb3cgdGhlDQotICAgIC8vIHVzZSBvZiBMPjEwMCBhcyBhIGhpZ2hsaWdodCBtZWFucy4NCi0NCi0gICAgaWYgKExhYi0+TCA+IDEwMCkNCi0gICAgICAgIExhYiAtPiBMID0gMTAwOw0KLQ0KLSAgICAvLyBDaGVjayBvdXQgZ2FtdXQgcHJpc20sIG9uIGEsIGIgZmFjZXMNCi0NCi0gICAgaWYgKExhYiAtPiBhIDwgYW1pbiB8fCBMYWItPmEgPiBhbWF4fHwNCi0gICAgICAgIExhYiAtPiBiIDwgYm1pbiB8fCBMYWItPmIgPiBibWF4KSB7DQotDQotICAgICAgICAgICAgY21zQ0lFTENoIExDaDsNCi0gICAgICAgICAgICBkb3VibGUgaCwgc2xvcGU7DQotDQotICAgICAgICAgICAgLy8gRmFsbHMgb3V0c2lkZSBhLCBiIGxpbWl0cy4gVHJhbnNwb3J0cyB0byBMQ2ggc3BhY2UsDQotICAgICAgICAgICAgLy8gYW5kIHRoZW4gZG8gdGhlIGNsaXBwaW5nDQotDQotDQotICAgICAgICAgICAgaWYgKExhYiAtPiBhID09IDAuMCkgeyAvLyBJcyBodWUgZXhhY3RseSA5MD8NCi0NCi0gICAgICAgICAgICAgICAgLy8gYXRhbiB3aWxsIG5vdCB3b3JrLCBzbyBjbGFtcCBoZXJlDQotICAgICAgICAgICAgICAgIExhYiAtPiBiID0gTGFiLT5iIDwgMCA/IGJtaW4gOiBibWF4Ow0KLSAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgY21zTGFiMkxDaCgmTENoLCBMYWIpOw0KLQ0KLSAgICAgICAgICAgIHNsb3BlID0gTGFiIC0+IGIgLyBMYWIgLT4gYTsNCi0gICAgICAgICAgICBoID0gTENoLmg7DQotDQotICAgICAgICAgICAgLy8gVGhlcmUgYXJlIDQgem9uZXMNCi0NCi0gICAgICAgICAgICBpZiAoKGggPj0gMC4gJiYgaCA8IDQ1LikgfHwNCi0gICAgICAgICAgICAgICAgKGggPj0gMzE1ICYmIGggPD0gMzYwLikpIHsNCi0NCi0gICAgICAgICAgICAgICAgICAgIC8vIGNsaXAgYnkgYW1heA0KLSAgICAgICAgICAgICAgICAgICAgTGFiIC0+IGEgPSBhbWF4Ow0KLSAgICAgICAgICAgICAgICAgICAgTGFiIC0+IGIgPSBhbWF4ICogc2xvcGU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGVsc2UNCi0gICAgICAgICAgICAgICAgaWYgKGggPj0gNDUuICYmIGggPCAxMzUuKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAvLyBjbGlwIGJ5IGJtYXgNCi0gICAgICAgICAgICAgICAgICAgIExhYiAtPiBiID0gYm1heDsNCi0gICAgICAgICAgICAgICAgICAgIExhYiAtPiBhID0gYm1heCAvIHNsb3BlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGVsc2UNCi0gICAgICAgICAgICAgICAgICAgIGlmIChoID49IDEzNS4gJiYgaCA8IDIyNS4pIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjbGlwIGJ5IGFtaW4NCi0gICAgICAgICAgICAgICAgICAgICAgICBMYWIgLT4gYSA9IGFtaW47DQotICAgICAgICAgICAgICAgICAgICAgICAgTGFiIC0+IGIgPSBhbWluICogc2xvcGU7DQotDQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBlbHNlDQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPj0gMjI1LiAmJiBoIDwgMzE1Likgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbGlwIGJ5IGJtaW4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGFiIC0+IGIgPSBibWluOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWIgLT4gYSA9IGJtaW4gLyBzbG9wZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNTaWduYWxFcnJvcigwLCBjbXNFUlJPUl9SQU5HRSwgIkludmFsaWQgYW5nbGUiKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0NCi0gICAgfQ0KLQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisvLyAgTGl0dGxlIENvbG9yIE1hbmFnZW1lbnQgU3lzdGVtCisvLyAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMTIgTWFydGkgTWFyaWEgU2FndWVyCisvLworLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisvLyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisvLyB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisvLyB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKy8vIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZQorLy8gaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKy8vCisvLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisvLworLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisvLyBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8KKy8vIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisvLyBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFCisvLyBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisvLyBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKy8vIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworCisjaW5jbHVkZSAibGNtczJfaW50ZXJuYWwuaCIKKworCisvLyBBdXhpbGlhcjogYXBwZW5kIGEgTGFiIGlkZW50aXR5IGFmdGVyIHRoZSBnaXZlbiBzZXF1ZW5jZSBvZiBwcm9maWxlcworLy8gYW5kIHJldHVybiB0aGUgdHJhbnNmb3JtLiBMYWIgcHJvZmlsZSBpcyBjbG9zZWQsIHJlc3Qgb2YgcHJvZmlsZXMgYXJlIGtlcHQgb3Blbi4KK2Ntc0hUUkFOU0ZPUk0gX2Ntc0NoYWluMkxhYihjbXNDb250ZXh0ICAgICAgICAgICAgQ29udGV4dElELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc1VJbnQzMk51bWJlciAgICAgICAgblByb2ZpbGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc1VJbnQzMk51bWJlciAgICAgICAgSW5wdXRGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21zVUludDMyTnVtYmVyICAgICAgICBPdXRwdXRGb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21zVUludDMyTnVtYmVyICBJbnRlbnRzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21zSFBST0ZJTEUgICAgICBoUHJvZmlsZXNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbXNCb29sICAgICAgICAgIEJQQ1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtc0Zsb2F0NjROdW1iZXIgQWRhcHRhdGlvblN0YXRlc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc1VJbnQzMk51bWJlciAgICAgICAgZHdGbGFncykKK3sKKyAgICBjbXNIVFJBTlNGT1JNIHhmb3JtOworICAgIGNtc0hQUk9GSUxFICAgaExhYjsKKyAgICBjbXNIUFJPRklMRSAgIFByb2ZpbGVMaXN0WzI1Nl07CisgICAgY21zQm9vbCAgICAgICBCUENMaXN0WzI1Nl07CisgICAgY21zRmxvYXQ2NE51bWJlciBBZGFwdGF0aW9uTGlzdFsyNTZdOworICAgIGNtc1VJbnQzMk51bWJlciBJbnRlbnRMaXN0WzI1Nl07CisgICAgY21zVUludDMyTnVtYmVyIGk7CisKKyAgICAvLyBUaGlzIGlzIGEgcmF0aGVyIGJpZyBudW1iZXIgYW5kIHRoZXJlIGlzIG5vIG5lZWQgb2YgZHluYW1pYyBtZW1vcnkKKyAgICAvLyBzaW5jZSB3ZSBhcmUgYWRkaW5nIGEgcHJvZmlsZSwgMjU0ICsgMSA9IDI1NSBhbmQgdGhpcyBpcyB0aGUgbGltaXQKKyAgICBpZiAoblByb2ZpbGVzID4gMjU0KSByZXR1cm4gTlVMTDsKKworICAgIC8vIFRoZSBvdXRwdXQgc3BhY2UKKyAgICBoTGFiID0gY21zQ3JlYXRlTGFiNFByb2ZpbGVUSFIoQ29udGV4dElELCBOVUxMKTsKKyAgICBpZiAoaExhYiA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKworICAgIC8vIENyZWF0ZSBhIGNvcHkgb2YgcGFyYW1ldGVycworICAgIGZvciAoaT0wOyBpIDwgblByb2ZpbGVzOyBpKyspIHsKKworICAgICAgICBQcm9maWxlTGlzdFtpXSAgICA9IGhQcm9maWxlc1tpXTsKKyAgICAgICAgQlBDTGlzdFtpXSAgICAgICAgPSBCUENbaV07CisgICAgICAgIEFkYXB0YXRpb25MaXN0W2ldID0gQWRhcHRhdGlvblN0YXRlc1tpXTsKKyAgICAgICAgSW50ZW50TGlzdFtpXSAgICAgPSBJbnRlbnRzW2ldOworICAgIH0KKworICAgIC8vIFBsYWNlIExhYiBpZGVudGl0eSBhdCBjaGFpbidzIGVuZC4KKyAgICBQcm9maWxlTGlzdFtuUHJvZmlsZXNdICAgID0gaExhYjsKKyAgICBCUENMaXN0W25Qcm9maWxlc10gICAgICAgID0gMDsKKyAgICBBZGFwdGF0aW9uTGlzdFtuUHJvZmlsZXNdID0gMS4wOworICAgIEludGVudExpc3RbblByb2ZpbGVzXSAgICAgPSBJTlRFTlRfUkVMQVRJVkVfQ09MT1JJTUVUUklDOworCisgICAgLy8gQ3JlYXRlIHRoZSB0cmFuc2Zvcm0KKyAgICB4Zm9ybSA9IGNtc0NyZWF0ZUV4dGVuZGVkVHJhbnNmb3JtKENvbnRleHRJRCwgblByb2ZpbGVzICsgMSwgUHJvZmlsZUxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUENMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZW50TGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0YXRpb25MaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0Rm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHdGbGFncyk7CisKKyAgICBjbXNDbG9zZVByb2ZpbGUoaExhYik7CisKKyAgICByZXR1cm4geGZvcm07Cit9CisKKworLy8gQ29tcHV0ZSBLIC0+IEwqIHJlbGF0aW9uc2hpcC4gRmxhZ3MgbWF5IGluY2x1ZGUgYmxhY2sgcG9pbnQgY29tcGVuc2F0aW9uLiBJbiB0aGlzIGNhc2UsCisvLyB0aGUgcmVsYXRpb25zaGlwIGlzIGFzc3VtZWQgZnJvbSB0aGUgcHJvZmlsZSB3aXRoIEJQQyB0byBhIGJsYWNrIHBvaW50IHplcm8uCitzdGF0aWMKK2Ntc1RvbmVDdXJ2ZSogQ29tcHV0ZUtUb0xzdGFyKGNtc0NvbnRleHQgICAgICAgICAgICBDb250ZXh0SUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21zVUludDMyTnVtYmVyICAgICAgIG5Qb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21zVUludDMyTnVtYmVyICAgICAgIG5Qcm9maWxlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbXNVSW50MzJOdW1iZXIgSW50ZW50c1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtc0hQUk9GSUxFICAgICBoUHJvZmlsZXNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbXNCb29sICAgICAgICAgQlBDW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21zRmxvYXQ2NE51bWJlciBBZGFwdGF0aW9uU3RhdGVzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21zVUludDMyTnVtYmVyIGR3RmxhZ3MpCit7CisgICAgY21zVG9uZUN1cnZlKiBvdXQgPSBOVUxMOworICAgIGNtc1VJbnQzMk51bWJlciBpOworICAgIGNtc0hUUkFOU0ZPUk0geGZvcm07CisgICAgY21zQ0lFTGFiIExhYjsKKyAgICBjbXNGbG9hdDMyTnVtYmVyIGNteWtbNF07CisgICAgY21zRmxvYXQzMk51bWJlciogU2FtcGxlZFBvaW50czsKKworICAgIHhmb3JtID0gX2Ntc0NoYWluMkxhYihDb250ZXh0SUQsIG5Qcm9maWxlcywgVFlQRV9DTVlLX0ZMVCwgVFlQRV9MYWJfREJMLCBJbnRlbnRzLCBoUHJvZmlsZXMsIEJQQywgQWRhcHRhdGlvblN0YXRlcywgZHdGbGFncyk7CisgICAgaWYgKHhmb3JtID09IE5VTEwpIHJldHVybiBOVUxMOworCisgICAgU2FtcGxlZFBvaW50cyA9IChjbXNGbG9hdDMyTnVtYmVyKikgX2Ntc0NhbGxvYyhDb250ZXh0SUQsIG5Qb2ludHMsIHNpemVvZihjbXNGbG9hdDMyTnVtYmVyKSk7CisgICAgaWYgKFNhbXBsZWRQb2ludHMgID09IE5VTEwpIGdvdG8gRXJyb3I7CisKKyAgICBmb3IgKGk9MDsgaSA8IG5Qb2ludHM7IGkrKykgeworCisgICAgICAgIGNteWtbMF0gPSAwOworICAgICAgICBjbXlrWzFdID0gMDsKKyAgICAgICAgY215a1syXSA9IDA7CisgICAgICAgIGNteWtbM10gPSAoY21zRmxvYXQzMk51bWJlcikgKChpICogMTAwLjApIC8gKG5Qb2ludHMtMSkpOworCisgICAgICAgIGNtc0RvVHJhbnNmb3JtKHhmb3JtLCBjbXlrLCAmTGFiLCAxKTsKKyAgICAgICAgU2FtcGxlZFBvaW50c1tpXT0gKGNtc0Zsb2F0MzJOdW1iZXIpICgxLjAgLSBMYWIuTCAvIDEwMC4wKTsgLy8gTmVnYXRlIEsgZm9yIGVhc2llciBvcGVyYXRpb24KKyAgICB9CisKKyAgICBvdXQgPSBjbXNCdWlsZFRhYnVsYXRlZFRvbmVDdXJ2ZUZsb2F0KENvbnRleHRJRCwgblBvaW50cywgU2FtcGxlZFBvaW50cyk7CisKK0Vycm9yOgorCisgICAgY21zRGVsZXRlVHJhbnNmb3JtKHhmb3JtKTsKKyAgICBpZiAoU2FtcGxlZFBvaW50cykgX2Ntc0ZyZWUoQ29udGV4dElELCBTYW1wbGVkUG9pbnRzKTsKKworICAgIHJldHVybiBvdXQ7Cit9CisKKworLy8gQ29tcHV0ZSBCbGFjayB0b25lIGN1cnZlIG9uIGEgQ01ZSyAtPiBDTVlLIHRyYW5zZm9ybS4gVGhpcyBpcyBkb25lIGJ5CisvLyB1c2luZyB0aGUgcHJvb2YgZGlyZWN0aW9uIG9uIGJvdGggcHJvZmlsZXMgdG8gZmluZCBLLT5MKiByZWxhdGlvbnNoaXAKKy8vIHRoZW4gam9pbmluZyBib3RoIGN1cnZlcy4gZHdGbGFncyBtYXkgaW5jbHVkZSBibGFjayBwb2ludCBjb21wZW5zYXRpb24uCitjbXNUb25lQ3VydmUqIF9jbXNCdWlsZEtUb25lQ3VydmUoY21zQ29udGV4dCAgICAgICAgQ29udGV4dElELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNVSW50MzJOdW1iZXIgICBuUG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNVSW50MzJOdW1iZXIgICBuUHJvZmlsZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtc1VJbnQzMk51bWJlciBJbnRlbnRzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNtc0hQUk9GSUxFIGhQcm9maWxlc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbXNCb29sICAgICBCUENbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY21zRmxvYXQ2NE51bWJlciBBZGFwdGF0aW9uU3RhdGVzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc1VJbnQzMk51bWJlciAgIGR3RmxhZ3MpCit7CisgICAgY21zVG9uZUN1cnZlICppbiwgKm91dCwgKktUb25lOworCisgICAgLy8gTWFrZSBzdXJlIENNWUsgLT4gQ01ZSworICAgIGlmIChjbXNHZXRDb2xvclNwYWNlKGhQcm9maWxlc1swXSkgIT0gY21zU2lnQ215a0RhdGEgfHwKKyAgICAgICAgY21zR2V0Q29sb3JTcGFjZShoUHJvZmlsZXNbblByb2ZpbGVzLTFdKSE9IGNtc1NpZ0NteWtEYXRhKSByZXR1cm4gTlVMTDsKKworCisgICAgLy8gTWFrZSBzdXJlIGxhc3QgaXMgYW4gb3V0cHV0IHByb2ZpbGUKKyAgICBpZiAoY21zR2V0RGV2aWNlQ2xhc3MoaFByb2ZpbGVzW25Qcm9maWxlcyAtIDFdKSAhPSBjbXNTaWdPdXRwdXRDbGFzcykgcmV0dXJuIE5VTEw7CisKKyAgICAvLyBDcmVhdGUgaW5kaXZpZHVhbCBjdXJ2ZXMuIEJQQyB3b3JrcyBhbHNvIGFzIGVhY2ggSyB0byBMKiBpcworICAgIC8vIGNvbXB1dGVkIGFzIGEgQlBDIHRvIHplcm8gYmxhY2sgcG9pbnQgaW4gY2FzZSBvZiBMKgorICAgIGluICA9IENvbXB1dGVLVG9Mc3RhcihDb250ZXh0SUQsIG5Qb2ludHMsIG5Qcm9maWxlcyAtIDEsIEludGVudHMsIGhQcm9maWxlcywgQlBDLCBBZGFwdGF0aW9uU3RhdGVzLCBkd0ZsYWdzKTsKKyAgICBpZiAoaW4gPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisKKyAgICBvdXQgPSBDb21wdXRlS1RvTHN0YXIoQ29udGV4dElELCBuUG9pbnRzLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVudHMgKyAoblByb2ZpbGVzIC0gMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhQcm9maWxlcyBbblByb2ZpbGVzIC0gMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlBDICsgKG5Qcm9maWxlcyAtIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0YXRpb25TdGF0ZXMgKyAoblByb2ZpbGVzIC0gMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHdGbGFncyk7CisgICAgaWYgKG91dCA9PSBOVUxMKSB7CisgICAgICAgIGNtc0ZyZWVUb25lQ3VydmUoaW4pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvLyBCdWlsZCB0aGUgcmVsYXRpb25zaGlwLiBUaGlzIGVmZmVjdGl2ZWx5IGxpbWl0cyB0aGUgbWF4aW11bSBhY2N1cmFjeSB0byAxNiBiaXRzLCBidXQKKyAgICAvLyBzaW5jZSB0aGlzIGlzIHVzZWQgb24gYmxhY2stcHJlc2VydmluZyBMVVRzLCB3ZSBhcmUgbm90IGxvb3NpbmcgIGFjY3VyYWN5IGluIGFueSBjYXNlCisgICAgS1RvbmUgPSBjbXNKb2luVG9uZUN1cnZlKENvbnRleHRJRCwgaW4sIG91dCwgblBvaW50cyk7CisKKyAgICAvLyBHZXQgcmlkIG9mIGNvbXBvbmVudHMKKyAgICBjbXNGcmVlVG9uZUN1cnZlKGluKTsgY21zRnJlZVRvbmVDdXJ2ZShvdXQpOworCisgICAgLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcuLi4KKyAgICBpZiAoS1RvbmUgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisKKyAgICAvLyBNYWtlIHN1cmUgaXQgaXMgbW9ub3RvbmljCisgICAgaWYgKCFjbXNJc1RvbmVDdXJ2ZU1vbm90b25pYyhLVG9uZSkpIHsKKyAgICAgICAgY21zRnJlZVRvbmVDdXJ2ZShLVG9uZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBLVG9uZTsKK30KKworCisvLyBHYW11dCBMVVQgQ3JlYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gVXNlZCBieSBnYW11dCAmIHNvZnRwcm9vZmluZworCit0eXBlZGVmIHN0cnVjdCB7CisKKyAgICBjbXNIVFJBTlNGT1JNIGhJbnB1dDsgICAgICAgICAgICAgICAvLyBGcm9tIHdoYXRldmVyIGlucHV0IGNvbG9yIHNwYWNlLiAxNiBiaXRzIHRvIERCTAorICAgIGNtc0hUUkFOU0ZPUk0gaEZvcndhcmQsIGhSZXZlcnNlOyAgIC8vIFRyYW5zZm9ybXMgZ29pbmcgZnJvbSBMYWIgdG8gY29sb3JhbnQgYW5kIGJhY2sKKyAgICBjbXNGbG9hdDY0TnVtYmVyIFRoZXJlc2hvbGQ7ICAgICAgICAvLyBUaGUgdGhlcmVzaG9sZCBhZnRlciB3aGljaCBpcyBjb25zaWRlcmVkIG91dCBvZiBnYW11dAorCisgICAgfSBHQU1VVENIQUlOOworCisvLyBUaGlzIHNhbXBsZXIgZG9lcyBjb21wdXRlIGdhbXV0IGJvdW5kYXJpZXMgYnkgY29tcGFyaW5nIG9yaWdpbmFsCisvLyB2YWx1ZXMgd2l0aCBhIHRyYW5zZm9ybSBnb2luZyBiYWNrIGFuZCBmb3J0aC4gVmFsdWVzIGFib3ZlIEVSUl9USEVSRVNIT0xECisvLyBvZiBtYXhpbXVtIGFyZSBjb25zaWRlcmVkIG91dCBvZiBnYW11dC4KKworI2RlZmluZSBFUlJfVEhFUkVTSE9MRCAgICAgIDUKKworCitzdGF0aWMKK2ludCBHYW11dFNhbXBsZXIocmVnaXN0ZXIgY29uc3QgY21zVUludDE2TnVtYmVyIEluW10sIHJlZ2lzdGVyIGNtc1VJbnQxNk51bWJlciBPdXRbXSwgcmVnaXN0ZXIgdm9pZCogQ2FyZ28pCit7CisgICAgR0FNVVRDSEFJTiogIHQgPSAoR0FNVVRDSEFJTiogKSBDYXJnbzsKKyAgICBjbXNDSUVMYWIgTGFiSW4xLCBMYWJPdXQxOworICAgIGNtc0NJRUxhYiBMYWJJbjIsIExhYk91dDI7CisgICAgY21zVUludDE2TnVtYmVyIFByb29mW2Ntc01BWENIQU5ORUxTXSwgUHJvb2YyW2Ntc01BWENIQU5ORUxTXTsKKyAgICBjbXNGbG9hdDY0TnVtYmVyIGRFMSwgZEUyLCBFcnJvclJhdGlvOworCisgICAgLy8gQXNzdW1lIGluLWdhbXV0IGJ5IGRlZmF1bHQuCisgICAgRXJyb3JSYXRpbyA9IDEuMDsKKworICAgIC8vIENvbnZlcnQgaW5wdXQgdG8gTGFiCisgICAgY21zRG9UcmFuc2Zvcm0odCAtPiBoSW5wdXQsIEluLCAmTGFiSW4xLCAxKTsKKworICAgIC8vIGNvbnZlcnRzIGZyb20gUENTIHRvIGNvbG9yYW50LiBUaGlzIGFsd2F5cworICAgIC8vIGRvZXMgcmV0dXJuIGluLWdhbXV0IHZhbHVlcywKKyAgICBjbXNEb1RyYW5zZm9ybSh0IC0+IGhGb3J3YXJkLCAmTGFiSW4xLCBQcm9vZiwgMSk7CisKKyAgICAvLyBOb3csIGRvIHRoZSBpbnZlcnNlLCBmcm9tIGNvbG9yYW50IHRvIFBDUy4KKyAgICBjbXNEb1RyYW5zZm9ybSh0IC0+IGhSZXZlcnNlLCBQcm9vZiwgJkxhYk91dDEsIDEpOworCisgICAgbWVtbW92ZSgmTGFiSW4yLCAmTGFiT3V0MSwgc2l6ZW9mKGNtc0NJRUxhYikpOworCisgICAgLy8gVHJ5IGFnYWluLCBidXQgdGhpcyB0aW1lIHRha2luZyBDaGVjayBhcyBpbnB1dAorICAgIGNtc0RvVHJhbnNmb3JtKHQgLT4gaEZvcndhcmQsICZMYWJPdXQxLCBQcm9vZjIsIDEpOworICAgIGNtc0RvVHJhbnNmb3JtKHQgLT4gaFJldmVyc2UsIFByb29mMiwgJkxhYk91dDIsIDEpOworCisgICAgLy8gVGFrZSBkaWZmZXJlbmNlIG9mIGRpcmVjdCB2YWx1ZQorICAgIGRFMSA9IGNtc0RlbHRhRSgmTGFiSW4xLCAmTGFiT3V0MSk7CisKKyAgICAvLyBUYWtlIGRpZmZlcmVuY2Ugb2YgY29udmVydGVkIHZhbHVlCisgICAgZEUyID0gY21zRGVsdGFFKCZMYWJJbjIsICZMYWJPdXQyKTsKKworCisgICAgLy8gaWYgZEUxIGlzIHNtYWxsIGFuZCBkRTIgaXMgc21hbGwsIHZhbHVlIGlzIGxpa2VseSB0byBiZSBpbiBnYW11dAorICAgIGlmIChkRTEgPCB0LT5UaGVyZXNob2xkICYmIGRFMiA8IHQtPlRoZXJlc2hvbGQpCisgICAgICAgIE91dFswXSA9IDA7CisgICAgZWxzZSB7CisKKyAgICAgICAgLy8gaWYgZEUxIGlzIHNtYWxsIGFuZCBkRTIgaXMgYmlnLCB1bmRlZmluZWQuIEFzc3VtZSBpbiBnYW11dAorICAgICAgICBpZiAoZEUxIDwgdC0+VGhlcmVzaG9sZCAmJiBkRTIgPiB0LT5UaGVyZXNob2xkKQorICAgICAgICAgICAgT3V0WzBdID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgLy8gZEUxIGlzIGJpZyBhbmQgZEUyIGlzIHNtYWxsLCBjbGVhcmx5IG91dCBvZiBnYW11dAorICAgICAgICAgICAgaWYgKGRFMSA+IHQtPlRoZXJlc2hvbGQgJiYgZEUyIDwgdC0+VGhlcmVzaG9sZCkKKyAgICAgICAgICAgICAgICBPdXRbMF0gPSAoY21zVUludDE2TnVtYmVyKSBfY21zUXVpY2tGbG9vcigoZEUxIC0gdC0+VGhlcmVzaG9sZCkgKyAuNSk7CisgICAgICAgICAgICBlbHNlICB7CisKKyAgICAgICAgICAgICAgICAvLyBkRTEgaXMgYmlnIGFuZCBkRTIgaXMgYWxzbyBiaWcsIGNvdWxkIGJlIGR1ZSB0byBwZXJjZXB0dWFsIG1hcHBpbmcKKyAgICAgICAgICAgICAgICAvLyBzbyB0YWtlIGVycm9yIHJhdGlvCisgICAgICAgICAgICAgICAgaWYgKGRFMiA9PSAwLjApCisgICAgICAgICAgICAgICAgICAgIEVycm9yUmF0aW8gPSBkRTE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBFcnJvclJhdGlvID0gZEUxIC8gZEUyOworCisgICAgICAgICAgICAgICAgaWYgKEVycm9yUmF0aW8gPiB0LT5UaGVyZXNob2xkKQorICAgICAgICAgICAgICAgICAgICBPdXRbMF0gPSAoY21zVUludDE2TnVtYmVyKSAgX2Ntc1F1aWNrRmxvb3IoKEVycm9yUmF0aW8gLSB0LT5UaGVyZXNob2xkKSArIC41KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIE91dFswXSA9IDA7CisgICAgICAgICAgICB9CisgICAgfQorCisKKyAgICByZXR1cm4gVFJVRTsKK30KKworLy8gRG9lcyBjb21wdXRlIGEgZ2FtdXQgTFVUIGdvaW5nIGJhY2sgYW5kIGZvcnRoIGFjcm9zcyBwY3MgLT4gcmVsYXRpdi4gY29sb3JpbWV0cmljIGludGVudCAtPiBwY3MKKy8vIHRoZSBkRSBvYnRhaW5lZCBpcyB0aGVuIGFubm90YXRlZCBvbiB0aGUgTFVULiBWYWx1ZXMgdHJ1ZWx5IG91dCBvZiBnYW11dCBhcmUgY2xpcHBlZCB0byBkRSA9IDB4RkZGRQorLy8gYW5kIHZhbHVlcyBjaGFuZ2VkIGFyZSBzdXBwb3NlZCB0byBiZSBoYW5kbGVkIGJ5IGFueSBnYW11dCByZW1hcHBpbmcsIHNvLCBhcmUgb3V0IG9mIGdhbXV0IGFzIHdlbGwuCisvLworLy8gKipXQVJOSU5HOiBUaGlzIGFsZ29yaXRobSBkb2VzIGFzc3VtZSB0aGF0IGdhbXV0IHJlbWFwcGluZyBhbGdvcml0aG1zIGRvZXMgTk9UIG1vdmUgaW4tZ2FtdXQgY29sb3JzLAorLy8gb2YgY291cnNlLCBtYW55IHBlcmNlcHR1YWwgYW5kIHNhdHVyYXRpb24gaW50ZW50cyBkb2VzIG5vdCB3b3JrIGluIHN1Y2ggd2F5LCBidXQgcmVsYXRpdi4gb25lcyBzaG91bGQuCisKK2Ntc1BpcGVsaW5lKiBfY21zQ3JlYXRlR2FtdXRDaGVja1BpcGVsaW5lKGNtc0NvbnRleHQgQ29udGV4dElELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21zSFBST0ZJTEUgaFByb2ZpbGVzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNCb29sICBCUENbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc1VJbnQzMk51bWJlciBJbnRlbnRzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNGbG9hdDY0TnVtYmVyIEFkYXB0YXRpb25TdGF0ZXNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc1VJbnQzMk51bWJlciBuR2FtdXRQQ1Nwb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtc0hQUk9GSUxFIGhHYW11dCkKK3sKKyAgICBjbXNIUFJPRklMRSBoTGFiOworICAgIGNtc1BpcGVsaW5lKiBHYW11dDsKKyAgICBjbXNTdGFnZSogQ0xVVDsKKyAgICBjbXNVSW50MzJOdW1iZXIgZHdGb3JtYXQ7CisgICAgR0FNVVRDSEFJTiBDaGFpbjsKKyAgICBpbnQgbkNoYW5uZWxzLCBuR3JpZHBvaW50czsKKyAgICBjbXNDb2xvclNwYWNlU2lnbmF0dXJlIENvbG9yU3BhY2U7CisgICAgY21zVUludDMyTnVtYmVyIGk7CisgICAgY21zSFBST0ZJTEUgUHJvZmlsZUxpc3RbMjU2XTsKKyAgICBjbXNCb29sICAgICBCUENMaXN0WzI1Nl07CisgICAgY21zRmxvYXQ2NE51bWJlciBBZGFwdGF0aW9uTGlzdFsyNTZdOworICAgIGNtc1VJbnQzMk51bWJlciBJbnRlbnRMaXN0WzI1Nl07CisKKyAgICBtZW1zZXQoJkNoYWluLCAwLCBzaXplb2YoR0FNVVRDSEFJTikpOworCisKKyAgICBpZiAobkdhbXV0UENTcG9zaXRpb24gPD0gMCB8fCBuR2FtdXRQQ1Nwb3NpdGlvbiA+IDI1NSkgeworICAgICAgICBjbXNTaWduYWxFcnJvcihDb250ZXh0SUQsIGNtc0VSUk9SX1JBTkdFLCAiV3JvbmcgcG9zaXRpb24gb2YgUENTLiAxLi4yNTUgZXhwZWN0ZWQsICVkIGZvdW5kLiIsIG5HYW11dFBDU3Bvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaExhYiA9IGNtc0NyZWF0ZUxhYjRQcm9maWxlVEhSKENvbnRleHRJRCwgTlVMTCk7CisgICAgaWYgKGhMYWIgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisKKworICAgIC8vIFRoZSBmaWd1cmUgb2YgbWVyaXQuIE9uIG1hdHJpeC1zaGFwZXIgcHJvZmlsZXMsIHNob3VsZCBiZSBhbG1vc3QgemVybyBhcworICAgIC8vIHRoZSBjb252ZXJzaW9uIGlzIHByZXR0eSBleGFjdC4gT24gTFVUIGJhc2VkIHByb2ZpbGVzLCBkaWZmZXJlbnQgcmVzb2x1dGlvbnMKKyAgICAvLyBvZiBpbnB1dCBhbmQgb3V0cHV0IENMVVQgbWF5IHJlc3VsdCBpbiBkaWZmZXJlbmNlcy4KKworICAgIGlmIChjbXNJc01hdHJpeFNoYXBlcihoR2FtdXQpKSB7CisKKyAgICAgICAgQ2hhaW4uVGhlcmVzaG9sZCA9IDEuMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIENoYWluLlRoZXJlc2hvbGQgPSBFUlJfVEhFUkVTSE9MRDsKKyAgICB9CisKKworICAgIC8vIENyZWF0ZSBhIGNvcHkgb2YgcGFyYW1ldGVycworICAgIGZvciAoaT0wOyBpIDwgbkdhbXV0UENTcG9zaXRpb247IGkrKykgeworICAgICAgICBQcm9maWxlTGlzdFtpXSAgICA9IGhQcm9maWxlc1tpXTsKKyAgICAgICAgQlBDTGlzdFtpXSAgICAgICAgPSBCUENbaV07CisgICAgICAgIEFkYXB0YXRpb25MaXN0W2ldID0gQWRhcHRhdGlvblN0YXRlc1tpXTsKKyAgICAgICAgSW50ZW50TGlzdFtpXSAgICAgPSBJbnRlbnRzW2ldOworICAgIH0KKworICAgIC8vIEZpbGwgTGFiIGlkZW50aXR5CisgICAgUHJvZmlsZUxpc3RbbkdhbXV0UENTcG9zaXRpb25dID0gaExhYjsKKyAgICBCUENMaXN0W25HYW11dFBDU3Bvc2l0aW9uXSA9IDA7CisgICAgQWRhcHRhdGlvbkxpc3RbbkdhbXV0UENTcG9zaXRpb25dID0gMS4wOworICAgIEludGVudExpc3RbbkdhbXV0UENTcG9zaXRpb25dID0gSU5URU5UX1JFTEFUSVZFX0NPTE9SSU1FVFJJQzsKKworCisgICAgQ29sb3JTcGFjZSAgPSBjbXNHZXRDb2xvclNwYWNlKGhHYW11dCk7CisKKyAgICBuQ2hhbm5lbHMgICA9IGNtc0NoYW5uZWxzT2YoQ29sb3JTcGFjZSk7CisgICAgbkdyaWRwb2ludHMgPSBfY21zUmVhc29uYWJsZUdyaWRwb2ludHNCeUNvbG9yc3BhY2UoQ29sb3JTcGFjZSwgY21zRkxBR1NfSElHSFJFU1BSRUNBTEMpOworICAgIGR3Rm9ybWF0ICAgID0gKENIQU5ORUxTX1NIKG5DaGFubmVscyl8QllURVNfU0goMikpOworCisgICAgLy8gMTYgYml0cyB0byBMYWIgZG91YmxlCisgICAgQ2hhaW4uaElucHV0ID0gY21zQ3JlYXRlRXh0ZW5kZWRUcmFuc2Zvcm0oQ29udGV4dElELAorICAgICAgICBuR2FtdXRQQ1Nwb3NpdGlvbiArIDEsCisgICAgICAgIFByb2ZpbGVMaXN0LAorICAgICAgICBCUENMaXN0LAorICAgICAgICBJbnRlbnRMaXN0LAorICAgICAgICBBZGFwdGF0aW9uTGlzdCwKKyAgICAgICAgTlVMTCwgMCwKKyAgICAgICAgZHdGb3JtYXQsIFRZUEVfTGFiX0RCTCwKKyAgICAgICAgY21zRkxBR1NfTk9DQUNIRSk7CisKKworICAgIC8vIERvZXMgY3JlYXRlIHRoZSBmb3J3YXJkIHN0ZXAuIExhYiBkb3VibGUgdG8gZGV2aWNlCisgICAgZHdGb3JtYXQgICAgPSAoQ0hBTk5FTFNfU0gobkNoYW5uZWxzKXxCWVRFU19TSCgyKSk7CisgICAgQ2hhaW4uaEZvcndhcmQgPSBjbXNDcmVhdGVUcmFuc2Zvcm1USFIoQ29udGV4dElELAorICAgICAgICBoTGFiLCBUWVBFX0xhYl9EQkwsCisgICAgICAgIGhHYW11dCwgZHdGb3JtYXQsCisgICAgICAgIElOVEVOVF9SRUxBVElWRV9DT0xPUklNRVRSSUMsCisgICAgICAgIGNtc0ZMQUdTX05PQ0FDSEUpOworCisgICAgLy8gRG9lcyBjcmVhdGUgdGhlIGJhY2t3YXJkcyBzdGVwCisgICAgQ2hhaW4uaFJldmVyc2UgPSBjbXNDcmVhdGVUcmFuc2Zvcm1USFIoQ29udGV4dElELCBoR2FtdXQsIGR3Rm9ybWF0LAorICAgICAgICBoTGFiLCBUWVBFX0xhYl9EQkwsCisgICAgICAgIElOVEVOVF9SRUxBVElWRV9DT0xPUklNRVRSSUMsCisgICAgICAgIGNtc0ZMQUdTX05PQ0FDSEUpOworCisKKyAgICAvLyBBbGwgb2s/CisgICAgaWYgKENoYWluLmhJbnB1dCAmJiBDaGFpbi5oRm9yd2FyZCAmJiBDaGFpbi5oUmV2ZXJzZSkgeworCisgICAgICAgIC8vIEdvIG9uLCB0cnkgdG8gY29tcHV0ZSBnYW11dCBMVVQgZnJvbSBQQ1MuIFRoaXMgY29uc2lzdCBvbiBhIHNpbmdsZSBjaGFubmVsIGNvbnRhaW5pbmcKKyAgICAgICAgLy8gZEUgd2hlbiBkb2luZyBhIHRyYW5zZm9ybSBiYWNrIGFuZCBmb3J0aCBvbiB0aGUgY29sb3JpbWV0cmljIGludGVudC4KKworICAgICAgICBHYW11dCA9IGNtc1BpcGVsaW5lQWxsb2MoQ29udGV4dElELCAzLCAxKTsKKyAgICAgICAgaWYgKEdhbXV0ICE9IE5VTEwpIHsKKworICAgICAgICAgICAgQ0xVVCA9IGNtc1N0YWdlQWxsb2NDTHV0MTZiaXQoQ29udGV4dElELCBuR3JpZHBvaW50cywgbkNoYW5uZWxzLCAxLCBOVUxMKTsKKyAgICAgICAgICAgIGlmICghY21zUGlwZWxpbmVJbnNlcnRTdGFnZShHYW11dCwgY21zQVRfQkVHSU4sIENMVVQpKSB7CisgICAgICAgICAgICAgICAgY21zUGlwZWxpbmVGcmVlKEdhbXV0KTsKKyAgICAgICAgICAgICAgICBHYW11dCA9IE5VTEw7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY21zU3RhZ2VTYW1wbGVDTHV0MTZiaXQoQ0xVVCwgR2FtdXRTYW1wbGVyLCAodm9pZCopICZDaGFpbiwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgICAgICBHYW11dCA9IE5VTEw7ICAgLy8gRGlkbid0IHdvcmsuLi4KKworICAgIC8vIEZyZWUgYWxsIG5lZWRlZCBzdHVmZi4KKyAgICBpZiAoQ2hhaW4uaElucHV0KSAgIGNtc0RlbGV0ZVRyYW5zZm9ybShDaGFpbi5oSW5wdXQpOworICAgIGlmIChDaGFpbi5oRm9yd2FyZCkgY21zRGVsZXRlVHJhbnNmb3JtKENoYWluLmhGb3J3YXJkKTsKKyAgICBpZiAoQ2hhaW4uaFJldmVyc2UpIGNtc0RlbGV0ZVRyYW5zZm9ybShDaGFpbi5oUmV2ZXJzZSk7CisgICAgaWYgKGhMYWIpIGNtc0Nsb3NlUHJvZmlsZShoTGFiKTsKKworICAgIC8vIEFuZCByZXR1cm4gY29tcHV0ZWQgaHVsbAorICAgIHJldHVybiBHYW11dDsKK30KKworLy8gVG90YWwgQXJlYSBDb3ZlcmFnZSBlc3RpbWF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNtc1VJbnQzMk51bWJlciAgbk91dHB1dENoYW5zOworICAgIGNtc0hUUkFOU0ZPUk0gICAgaFJvdW5kVHJpcDsKKyAgICBjbXNGbG9hdDMyTnVtYmVyIE1heFRBQzsKKyAgICBjbXNGbG9hdDMyTnVtYmVyIE1heElucHV0W2Ntc01BWENIQU5ORUxTXTsKKworfSBjbXNUQUNlc3RpbWF0b3I7CisKKworLy8gVGhpcyBjYWxsYmFjayBqdXN0IGFjY291bnRzIHRoZSBtYXhpbXVtIGluayBkcm9wcGVkIGluIHRoZSBnaXZlbiBub2RlLiBJdCBkb2VzIG5vdCBwb3B1bGF0ZSBhbnkKKy8vIG1lbW9yeSwgYXMgdGhlIGRlc3RpbmF0aW9uIHRhYmxlIGlzIE5VTEwuIEl0cyBvbmx5IHB1cnBvc2UgaXQgdG8ga25vdyB0aGUgZ2xvYmFsIG1heGltdW0uCitzdGF0aWMKK2ludCBFc3RpbWF0ZVRBQyhyZWdpc3RlciBjb25zdCBjbXNVSW50MTZOdW1iZXIgSW5bXSwgcmVnaXN0ZXIgY21zVUludDE2TnVtYmVyIE91dFtdLCByZWdpc3RlciB2b2lkICogQ2FyZ28pCit7CisgICAgY21zVEFDZXN0aW1hdG9yKiBicCA9IChjbXNUQUNlc3RpbWF0b3IqKSBDYXJnbzsKKyAgICBjbXNGbG9hdDMyTnVtYmVyIFJvdW5kVHJpcFtjbXNNQVhDSEFOTkVMU107CisgICAgY21zVUludDMyTnVtYmVyIGk7CisgICAgY21zRmxvYXQzMk51bWJlciBTdW07CisKKworICAgIC8vIEV2YWx1YXRlIHRoZSB4Zm9ybQorICAgIGNtc0RvVHJhbnNmb3JtKGJwLT5oUm91bmRUcmlwLCBJbiwgUm91bmRUcmlwLCAxKTsKKworICAgIC8vIEFsbCBhbGwgYW1vdW50cyBvZiBpbmsKKyAgICBmb3IgKFN1bT0wLCBpPTA7IGkgPCBicCAtPm5PdXRwdXRDaGFuczsgaSsrKQorICAgICAgICAgICAgU3VtICs9IFJvdW5kVHJpcFtpXTsKKworICAgIC8vIElmIGFib3ZlIG1heGltdW0sIGtlZXAgdHJhY2sgb2YgaW5wdXQgdmFsdWVzCisgICAgaWYgKFN1bSA+IGJwIC0+TWF4VEFDKSB7CisKKyAgICAgICAgICAgIGJwIC0+TWF4VEFDID0gU3VtOworCisgICAgICAgICAgICBmb3IgKGk9MDsgaSA8IGJwIC0+bk91dHB1dENoYW5zOyBpKyspIHsKKyAgICAgICAgICAgICAgICBicCAtPk1heElucHV0W2ldID0gSW5baV07CisgICAgICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7CisKKyAgICBjbXNVTlVTRURfUEFSQU1FVEVSKE91dCk7Cit9CisKKworLy8gRGV0ZWN0IFRvdGFsIGFyZWEgY292ZXJhZ2Ugb2YgdGhlIHByb2ZpbGUKK2Ntc0Zsb2F0NjROdW1iZXIgQ01TRVhQT1JUIGNtc0RldGVjdFRBQyhjbXNIUFJPRklMRSBoUHJvZmlsZSkKK3sKKyAgICBjbXNUQUNlc3RpbWF0b3IgYnA7CisgICAgY21zVUludDMyTnVtYmVyIGR3Rm9ybWF0dGVyOworICAgIGNtc1VJbnQzMk51bWJlciBHcmlkUG9pbnRzW01BWF9JTlBVVF9ESU1FTlNJT05TXTsKKyAgICBjbXNIUFJPRklMRSBoTGFiOworICAgIGNtc0NvbnRleHQgQ29udGV4dElEID0gY21zR2V0UHJvZmlsZUNvbnRleHRJRChoUHJvZmlsZSk7CisKKyAgICAvLyBUQUMgb25seSB3b3JrcyBvbiBvdXRwdXQgcHJvZmlsZXMKKyAgICBpZiAoY21zR2V0RGV2aWNlQ2xhc3MoaFByb2ZpbGUpICE9IGNtc1NpZ091dHB1dENsYXNzKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIENyZWF0ZSBhIGZha2UgZm9ybWF0dGVyIGZvciByZXN1bHQKKyAgICBkd0Zvcm1hdHRlciA9IGNtc0Zvcm1hdHRlckZvckNvbG9yc3BhY2VPZlByb2ZpbGUoaFByb2ZpbGUsIDQsIFRSVUUpOworCisgICAgYnAubk91dHB1dENoYW5zID0gVF9DSEFOTkVMUyhkd0Zvcm1hdHRlcik7CisgICAgYnAuTWF4VEFDID0gMDsgICAgLy8gSW5pdGlhbCBUQUMgaXMgMAorCisgICAgLy8gIGZvciBzYWZldHkKKyAgICBpZiAoYnAubk91dHB1dENoYW5zID49IGNtc01BWENIQU5ORUxTKSByZXR1cm4gMDsKKworICAgIGhMYWIgPSBjbXNDcmVhdGVMYWI0UHJvZmlsZVRIUihDb250ZXh0SUQsIE5VTEwpOworICAgIGlmIChoTGFiID09IE5VTEwpIHJldHVybiAwOworICAgIC8vIFNldHVwIGEgcm91bmR0cmlwIG9uIHBlcmNlcHR1YWwgaW50ZW50IGluIG91dHB1dCBwcm9maWxlIGZvciBUQUMgZXN0aW1hdGlvbgorICAgIGJwLmhSb3VuZFRyaXAgPSBjbXNDcmVhdGVUcmFuc2Zvcm1USFIoQ29udGV4dElELCBoTGFiLCBUWVBFX0xhYl8xNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhQcm9maWxlLCBkd0Zvcm1hdHRlciwgSU5URU5UX1BFUkNFUFRVQUwsIGNtc0ZMQUdTX05PT1BUSU1JWkV8Y21zRkxBR1NfTk9DQUNIRSk7CisKKyAgICBjbXNDbG9zZVByb2ZpbGUoaExhYik7CisgICAgaWYgKGJwLmhSb3VuZFRyaXAgPT0gTlVMTCkgcmV0dXJuIDA7CisKKyAgICAvLyBGb3IgTCogd2Ugb25seSBuZWVkIGJsYWNrIGFuZCB3aGl0ZS4gRm9yIEMqIHdlIG5lZWQgbWFueSBwb2ludHMKKyAgICBHcmlkUG9pbnRzWzBdID0gNjsKKyAgICBHcmlkUG9pbnRzWzFdID0gNzQ7CisgICAgR3JpZFBvaW50c1syXSA9IDc0OworCisKKyAgICBpZiAoIWNtc1NsaWNlU3BhY2UxNigzLCBHcmlkUG9pbnRzLCBFc3RpbWF0ZVRBQywgJmJwKSkgeworICAgICAgICBicC5NYXhUQUMgPSAwOworICAgIH0KKworICAgIGNtc0RlbGV0ZVRyYW5zZm9ybShicC5oUm91bmRUcmlwKTsKKworICAgIC8vIFJlc3VsdHMgaW4gJQorICAgIHJldHVybiBicC5NYXhUQUM7Cit9CisKKworLy8gQ2FyZWZ1bGx5LCAgY2xhbXAgb24gQ0lFTGFiIHNwYWNlLgorCitjbXNCb29sIENNU0VYUE9SVCBjbXNEZXNhdHVyYXRlTGFiKGNtc0NJRUxhYiogTGFiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgYW1heCwgZG91YmxlIGFtaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBibWF4LCBkb3VibGUgYm1pbikKK3sKKworICAgIC8vIFdob2xlIEx1bWEgc3VyZmFjZSB0byB6ZXJvCisKKyAgICBpZiAoTGFiIC0+IEwgPCAwKSB7CisKKyAgICAgICAgTGFiLT4gTCA9IExhYi0+YSA9IExhYi0+IGIgPSAwLjA7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICAvLyBDbGFtcCB3aGl0ZSwgRElTQ0FSRCBISUdITElHSFRTLiBUaGlzIGlzIGRvbmUKKyAgICAvLyBpbiBzdWNoIHdheSBiZWNhdXNlIGljYyBzcGVjIGRvZXNuJ3QgYWxsb3cgdGhlCisgICAgLy8gdXNlIG9mIEw+MTAwIGFzIGEgaGlnaGxpZ2h0IG1lYW5zLgorCisgICAgaWYgKExhYi0+TCA+IDEwMCkKKyAgICAgICAgTGFiIC0+IEwgPSAxMDA7CisKKyAgICAvLyBDaGVjayBvdXQgZ2FtdXQgcHJpc20sIG9uIGEsIGIgZmFjZXMKKworICAgIGlmIChMYWIgLT4gYSA8IGFtaW4gfHwgTGFiLT5hID4gYW1heHx8CisgICAgICAgIExhYiAtPiBiIDwgYm1pbiB8fCBMYWItPmIgPiBibWF4KSB7CisKKyAgICAgICAgICAgIGNtc0NJRUxDaCBMQ2g7CisgICAgICAgICAgICBkb3VibGUgaCwgc2xvcGU7CisKKyAgICAgICAgICAgIC8vIEZhbGxzIG91dHNpZGUgYSwgYiBsaW1pdHMuIFRyYW5zcG9ydHMgdG8gTENoIHNwYWNlLAorICAgICAgICAgICAgLy8gYW5kIHRoZW4gZG8gdGhlIGNsaXBwaW5nCisKKworICAgICAgICAgICAgaWYgKExhYiAtPiBhID09IDAuMCkgeyAvLyBJcyBodWUgZXhhY3RseSA5MD8KKworICAgICAgICAgICAgICAgIC8vIGF0YW4gd2lsbCBub3Qgd29yaywgc28gY2xhbXAgaGVyZQorICAgICAgICAgICAgICAgIExhYiAtPiBiID0gTGFiLT5iIDwgMCA/IGJtaW4gOiBibWF4OworICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjbXNMYWIyTENoKCZMQ2gsIExhYik7CisKKyAgICAgICAgICAgIHNsb3BlID0gTGFiIC0+IGIgLyBMYWIgLT4gYTsKKyAgICAgICAgICAgIGggPSBMQ2guaDsKKworICAgICAgICAgICAgLy8gVGhlcmUgYXJlIDQgem9uZXMKKworICAgICAgICAgICAgaWYgKChoID49IDAuICYmIGggPCA0NS4pIHx8CisgICAgICAgICAgICAgICAgKGggPj0gMzE1ICYmIGggPD0gMzYwLikpIHsKKworICAgICAgICAgICAgICAgICAgICAvLyBjbGlwIGJ5IGFtYXgKKyAgICAgICAgICAgICAgICAgICAgTGFiIC0+IGEgPSBhbWF4OworICAgICAgICAgICAgICAgICAgICBMYWIgLT4gYiA9IGFtYXggKiBzbG9wZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpZiAoaCA+PSA0NS4gJiYgaCA8IDEzNS4pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyBjbGlwIGJ5IGJtYXgKKyAgICAgICAgICAgICAgICAgICAgTGFiIC0+IGIgPSBibWF4OworICAgICAgICAgICAgICAgICAgICBMYWIgLT4gYSA9IGJtYXggLyBzbG9wZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBpZiAoaCA+PSAxMzUuICYmIGggPCAyMjUuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbGlwIGJ5IGFtaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIExhYiAtPiBhID0gYW1pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIExhYiAtPiBiID0gYW1pbiAqIHNsb3BlOworCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGggPj0gMjI1LiAmJiBoIDwgMzE1LikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsaXAgYnkgYm1pbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhYiAtPiBiID0gYm1pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWIgLT4gYSA9IGJtaW4gLyBzbG9wZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbXNTaWduYWxFcnJvcigwLCBjbXNFUlJPUl9SQU5HRSwgIkludmFsaWQgYW5nbGUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc2NhbTAyLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL3NyYy9meF9jbXNjYW0wMi5jCmluZGV4IDA1NTg0YWEuLjMyNjg0MjQgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc2NhbTAyLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zY2FtMDIuYwpAQCAtMSw3ICsxLDcgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi9sY21zMi0yLjYvc3JjL2Ntc2NhbTAyLmMiDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uL2xjbXMyLTIuNi9zcmMvY21zY2FtMDIuYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc2NnYXRzLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL3NyYy9meF9jbXNjZ2F0cy5jCmluZGV4IDgwZGNiYTcuLjllMDBmZTYgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc2NnYXRzLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zY2dhdHMuYwpAQCAtMSw3ICsxLDcgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi9sY21zMi0yLjYvc3JjL2Ntc2NnYXRzLmMiDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uL2xjbXMyLTIuNi9zcmMvY21zY2dhdHMuYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc2NudnJ0LmMgYi9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL3NyYy9meF9jbXNjbnZydC5jCmluZGV4IDliOGEyOTIuLjliOWViOTkgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc2NudnJ0LmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zY252cnQuYwpAQCAtMSw3ICsxLDcgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi9sY21zMi0yLjYvc3JjL2Ntc2NudnJ0LmMiDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uL2xjbXMyLTIuNi9zcmMvY21zY252cnQuYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc2Vyci5jIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zZXJyLmMKaW5kZXggNjkyOWU3Yi4uMjdkMDY5NiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zZXJyLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zZXJyLmMKQEAgLTEsNyArMSw3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vbGNtczItMi42L3NyYy9jbXNlcnIuYyINCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vbGNtczItMi42L3NyYy9jbXNlcnIuYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc2dhbW1hLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL3NyYy9meF9jbXNnYW1tYS5jCmluZGV4IGY1YmI2OTAuLjk5MzZjNjIgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc2dhbW1hLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zZ2FtbWEuYwpAQCAtMSw3ICsxLDcgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi9sY21zMi0yLjYvc3JjL2Ntc2dhbW1hLmMiDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uL2xjbXMyLTIuNi9zcmMvY21zZ2FtbWEuYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc2dtdC5jIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zZ210LmMKaW5kZXggZWE4MmIxNS4uZGZlNGNjOCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zZ210LmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zZ210LmMKQEAgLTEsNyArMSw3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vbGNtczItMi42L3NyYy9jbXNnbXQuYyINCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vbGNtczItMi42L3NyYy9jbXNnbXQuYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc2hhbGYuYyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc2hhbGYuYwppbmRleCA2ZWQ2YjJiLi45YzdlMDdjIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL3NyYy9meF9jbXNoYWxmLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zaGFsZi5jCkBAIC0xLDcgKzEsNyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uL2xjbXMyLTIuNi9zcmMvY21zaGFsZi5jIg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi9sY21zMi0yLjYvc3JjL2Ntc2hhbGYuYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc2ludHJwLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL3NyYy9meF9jbXNpbnRycC5jCmluZGV4IGFmZmNhNTMuLjhlYWNkNTUgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc2ludHJwLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zaW50cnAuYwpAQCAtMSw3ICsxLDcgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi9sY21zMi0yLjYvc3JjL2Ntc2ludHJwLmMiDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uL2xjbXMyLTIuNi9zcmMvY21zaW50cnAuYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc2lvMC5jIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zaW8wLmMKaW5kZXggMmI2YmM2OC4uYTRhZWQyMyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zaW8wLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zaW8wLmMKQEAgLTEsNyArMSw3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vbGNtczItMi42L3NyYy9jbXNpbzAuYyINCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vbGNtczItMi42L3NyYy9jbXNpbzAuYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc2lvMS5jIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zaW8xLmMKaW5kZXggMTkyZTg3OS4uMzRjZTkyNyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zaW8xLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zaW8xLmMKQEAgLTEsNyArMSw3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vbGNtczItMi42L3NyYy9jbXNpbzEuYyINCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vbGNtczItMi42L3NyYy9jbXNpbzEuYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc2x1dC5jIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zbHV0LmMKaW5kZXggZDlhMzE5Yy4uZDAzMmUzYiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zbHV0LmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zbHV0LmMKQEAgLTEsNyArMSw3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vbGNtczItMi42L3NyYy9jbXNsdXQuYyINCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vbGNtczItMi42L3NyYy9jbXNsdXQuYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc21kNS5jIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zbWQ1LmMKaW5kZXggM2EzYTk5Ny4uMDI4ZGI0YSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zbWQ1LmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zbWQ1LmMKQEAgLTEsNyArMSw3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vbGNtczItMi42L3NyYy9jbXNtZDUuYyINCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vbGNtczItMi42L3NyYy9jbXNtZDUuYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc210cnguYyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc210cnguYwppbmRleCA2NjdhYzFmLi5hZDA0ZGNjIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL3NyYy9meF9jbXNtdHJ4LmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zbXRyeC5jCkBAIC0xLDcgKzEsNyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uL2xjbXMyLTIuNi9zcmMvY21zbXRyeC5jIg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi9sY21zMi0yLjYvc3JjL2Ntc210cnguYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc25hbWVkLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL3NyYy9meF9jbXNuYW1lZC5jCmluZGV4IDVlMWIwMjguLjkzYTAxMzIgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc25hbWVkLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zbmFtZWQuYwpAQCAtMSw3ICsxLDcgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi9sY21zMi0yLjYvc3JjL2Ntc25hbWVkLmMiDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uL2xjbXMyLTIuNi9zcmMvY21zbmFtZWQuYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc29wdC5jIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zb3B0LmMKaW5kZXggZjEyNDI5Yy4uZTE2YzczNSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zb3B0LmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zb3B0LmMKQEAgLTEsNyArMSw3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vbGNtczItMi42L3NyYy9jbXNvcHQuYyINCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vbGNtczItMi42L3NyYy9jbXNvcHQuYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc3BhY2suYyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc3BhY2suYwppbmRleCA2ZTA2NDA5Li5kMTI1ZDMzIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL3NyYy9meF9jbXNwYWNrLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zcGFjay5jCkBAIC0xLDcgKzEsNyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uL2xjbXMyLTIuNi9zcmMvY21zcGFjay5jIg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi9sY21zMi0yLjYvc3JjL2Ntc3BhY2suYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc3Bjcy5jIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zcGNzLmMKaW5kZXggNDhjZTM5ZC4uMmE5ZDZkZCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zcGNzLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zcGNzLmMKQEAgLTEsNyArMSw3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vbGNtczItMi42L3NyYy9jbXNwY3MuYyINCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vbGNtczItMi42L3NyYy9jbXNwY3MuYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc3BsdWdpbi5jIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zcGx1Z2luLmMKaW5kZXggMzkyNjZjMi4uYWI3ZTZjMyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zcGx1Z2luLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zcGx1Z2luLmMKQEAgLTEsNyArMSw3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vbGNtczItMi42L3NyYy9jbXNwbHVnaW4uYyINCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vbGNtczItMi42L3NyYy9jbXNwbHVnaW4uYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc3BzMi5jIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zcHMyLmMKaW5kZXggZGNmNTU0MC4uYjZhMWVhOSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zcHMyLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zcHMyLmMKQEAgLTEsNyArMSw3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vbGNtczItMi42L3NyYy9jbXNwczIuYyINCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vbGNtczItMi42L3NyYy9jbXNwczIuYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc3NhbXAuYyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc3NhbXAuYwppbmRleCBmMTQ2OGZlLi41ZTVjMDMxIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL3NyYy9meF9jbXNzYW1wLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zc2FtcC5jCkBAIC0xLDcgKzEsNyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uL2xjbXMyLTIuNi9zcmMvY21zc2FtcC5jIg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi9sY21zMi0yLjYvc3JjL2Ntc3NhbXAuYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc3NtLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL3NyYy9meF9jbXNzbS5jCmluZGV4IGE1M2FkNzEuLmI4YzcxNjAgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc3NtLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zc20uYwpAQCAtMSw3ICsxLDcgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi9sY21zMi0yLjYvc3JjL2Ntc3NtLmMiDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uL2xjbXMyLTIuNi9zcmMvY21zc20uYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc3R5cGVzLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL3NyYy9meF9jbXN0eXBlcy5jCmluZGV4IDE5ZjllNzAuLmNmNjRhNjEgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc3R5cGVzLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zdHlwZXMuYwpAQCAtMSw3ICsxLDcgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi9sY21zMi0yLjYvc3JjL2Ntc3R5cGVzLmMiDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uL2xjbXMyLTIuNi9zcmMvY21zdHlwZXMuYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc3ZpcnQuYyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc3ZpcnQuYwppbmRleCAzZTUzOTdmLi5jYzYwZDFmIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL3NyYy9meF9jbXN2aXJ0LmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zdmlydC5jCkBAIC0xLDcgKzEsNyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uL2xjbXMyLTIuNi9zcmMvY21zdmlydC5jIg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi9sY21zMi0yLjYvc3JjL2Ntc3ZpcnQuYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc3d0cG50LmMgYi9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL3NyYy9meF9jbXN3dHBudC5jCmluZGV4IGMxMWFmZDYuLmQ0NmM2MGEgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc3d0cG50LmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zd3RwbnQuYwpAQCAtMSw3ICsxLDcgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi9sY21zMi0yLjYvc3JjL2Ntc3d0cG50LmMiDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uL2xjbXMyLTIuNi9zcmMvY21zd3RwbnQuYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc3hmb3JtLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xjbXMyL3NyYy9meF9jbXN4Zm9ybS5jCmluZGV4IGE0YjZkODUuLmU4Y2Q4M2EgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGNtczIvc3JjL2Z4X2Ntc3hmb3JtLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9sY21zMi9zcmMvZnhfY21zeGZvcm0uYwpAQCAtMSw3ICsxLDcgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi9sY21zMi0yLjYvc3JjL2Ntc3hmb3JtLmMiDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uL2xjbXMyLTIuNi9zcmMvY21zeGZvcm0uYyIKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9jZGVycm9yLmggYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvY2RlcnJvci5oCmluZGV4IGMxOWQzOGYuLjcwNDM1ZTEgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9jZGVycm9yLmgKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2NkZXJyb3IuaApAQCAtMSwxMzIgKzEsMTMyIEBACi0vKg0KLSAqIGNkZXJyb3IuaA0KLSAqDQotICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTcsIFRob21hcyBHLiBMYW5lLg0KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuDQotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLg0KLSAqDQotICogVGhpcyBmaWxlIGRlZmluZXMgdGhlIGVycm9yIGFuZCBtZXNzYWdlIGNvZGVzIGZvciB0aGUgY2pwZWcvZGpwZWcNCi0gKiBhcHBsaWNhdGlvbnMuICBUaGVzZSBzdHJpbmdzIGFyZSBub3QgbmVlZGVkIGFzIHBhcnQgb2YgdGhlIEpQRUcgbGlicmFyeQ0KLSAqIHByb3Blci4NCi0gKiBFZGl0IHRoaXMgZmlsZSB0byBhZGQgbmV3IGNvZGVzLCBvciB0byB0cmFuc2xhdGUgdGhlIG1lc3NhZ2Ugc3RyaW5ncyB0bw0KLSAqIHNvbWUgb3RoZXIgbGFuZ3VhZ2UuDQotICovDQotDQotLyoNCi0gKiBUbyBkZWZpbmUgdGhlIGVudW0gbGlzdCBvZiBtZXNzYWdlIGNvZGVzLCBpbmNsdWRlIHRoaXMgZmlsZSB3aXRob3V0DQotICogZGVmaW5pbmcgbWFjcm8gSk1FU1NBR0UuICBUbyBjcmVhdGUgYSBtZXNzYWdlIHN0cmluZyB0YWJsZSwgaW5jbHVkZSBpdA0KLSAqIGFnYWluIHdpdGggYSBzdWl0YWJsZSBKTUVTU0FHRSBkZWZpbml0aW9uIChzZWUgamVycm9yLmMgZm9yIGFuIGV4YW1wbGUpLg0KLSAqLw0KLSNpZm5kZWYgSk1FU1NBR0UNCi0jaWZuZGVmIENERVJST1JfSA0KLSNkZWZpbmUgQ0RFUlJPUl9IDQotLyogRmlyc3QgdGltZSB0aHJvdWdoLCBkZWZpbmUgdGhlIGVudW0gbGlzdCAqLw0KLSNkZWZpbmUgSk1BS0VfRU5VTV9MSVNUDQotI2Vsc2UNCi0vKiBSZXBlYXRlZCBpbmNsdXNpb25zIG9mIHRoaXMgZmlsZSBhcmUgbm8tb3BzIHVubGVzcyBKTUVTU0FHRSBpcyBkZWZpbmVkICovDQotI2RlZmluZSBKTUVTU0FHRShjb2RlLHN0cmluZykNCi0jZW5kaWYgLyogQ0RFUlJPUl9IICovDQotI2VuZGlmIC8qIEpNRVNTQUdFICovDQotDQotI2lmZGVmIEpNQUtFX0VOVU1fTElTVA0KLQ0KLXR5cGVkZWYgZW51bSB7DQotDQotI2RlZmluZSBKTUVTU0FHRShjb2RlLHN0cmluZykJY29kZSAsDQotDQotI2VuZGlmIC8qIEpNQUtFX0VOVU1fTElTVCAqLw0KLQ0KLUpNRVNTQUdFKEpNU0dfRklSU1RBRERPTkNPREU9MTAwMCwgTlVMTCkgLyogTXVzdCBiZSBmaXJzdCBlbnRyeSEgKi8NCi0NCi0jaWZkZWYgQk1QX1NVUFBPUlRFRA0KLUpNRVNTQUdFKEpFUlJfQk1QX0JBRENNQVAsICJVbnN1cHBvcnRlZCBCTVAgY29sb3JtYXAgZm9ybWF0IikNCi1KTUVTU0FHRShKRVJSX0JNUF9CQURERVBUSCwgIk9ubHkgOC0gYW5kIDI0LWJpdCBCTVAgZmlsZXMgYXJlIHN1cHBvcnRlZCIpDQotSk1FU1NBR0UoSkVSUl9CTVBfQkFESEVBREVSLCAiSW52YWxpZCBCTVAgZmlsZTogYmFkIGhlYWRlciBsZW5ndGgiKQ0KLUpNRVNTQUdFKEpFUlJfQk1QX0JBRFBMQU5FUywgIkludmFsaWQgQk1QIGZpbGU6IGJpUGxhbmVzIG5vdCBlcXVhbCB0byAxIikNCi1KTUVTU0FHRShKRVJSX0JNUF9DT0xPUlNQQUNFLCAiQk1QIG91dHB1dCBtdXN0IGJlIGdyYXlzY2FsZSBvciBSR0IiKQ0KLUpNRVNTQUdFKEpFUlJfQk1QX0NPTVBSRVNTRUQsICJTb3JyeSwgY29tcHJlc3NlZCBCTVBzIG5vdCB5ZXQgc3VwcG9ydGVkIikNCi1KTUVTU0FHRShKRVJSX0JNUF9OT1QsICJOb3QgYSBCTVAgZmlsZSAtIGRvZXMgbm90IHN0YXJ0IHdpdGggQk0iKQ0KLUpNRVNTQUdFKEpUUkNfQk1QLCAiJXV4JXUgMjQtYml0IEJNUCBpbWFnZSIpDQotSk1FU1NBR0UoSlRSQ19CTVBfTUFQUEVELCAiJXV4JXUgOC1iaXQgY29sb3JtYXBwZWQgQk1QIGltYWdlIikNCi1KTUVTU0FHRShKVFJDX0JNUF9PUzIsICIldXgldSAyNC1iaXQgT1MyIEJNUCBpbWFnZSIpDQotSk1FU1NBR0UoSlRSQ19CTVBfT1MyX01BUFBFRCwgIiV1eCV1IDgtYml0IGNvbG9ybWFwcGVkIE9TMiBCTVAgaW1hZ2UiKQ0KLSNlbmRpZiAvKiBCTVBfU1VQUE9SVEVEICovDQotDQotI2lmZGVmIEdJRl9TVVBQT1JURUQNCi1KTUVTU0FHRShKRVJSX0dJRl9CVUcsICJHSUYgb3V0cHV0IGdvdCBjb25mdXNlZCIpDQotSk1FU1NBR0UoSkVSUl9HSUZfQ09ERVNJWkUsICJCb2d1cyBHSUYgY29kZXNpemUgJWQiKQ0KLUpNRVNTQUdFKEpFUlJfR0lGX0NPTE9SU1BBQ0UsICJHSUYgb3V0cHV0IG11c3QgYmUgZ3JheXNjYWxlIG9yIFJHQiIpDQotSk1FU1NBR0UoSkVSUl9HSUZfSU1BR0VOT1RGT1VORCwgIlRvbyBmZXcgaW1hZ2VzIGluIEdJRiBmaWxlIikNCi1KTUVTU0FHRShKRVJSX0dJRl9OT1QsICJOb3QgYSBHSUYgZmlsZSIpDQotSk1FU1NBR0UoSlRSQ19HSUYsICIldXgldXglZCBHSUYgaW1hZ2UiKQ0KLUpNRVNTQUdFKEpUUkNfR0lGX0JBRFZFUlNJT04sDQotCSAiV2FybmluZzogdW5leHBlY3RlZCBHSUYgdmVyc2lvbiBudW1iZXIgJyVjJWMlYyciKQ0KLUpNRVNTQUdFKEpUUkNfR0lGX0VYVEVOU0lPTiwgIklnbm9yaW5nIEdJRiBleHRlbnNpb24gYmxvY2sgb2YgdHlwZSAweCUwMngiKQ0KLUpNRVNTQUdFKEpUUkNfR0lGX05PTlNRVUFSRSwgIkNhdXRpb246IG5vbnNxdWFyZSBwaXhlbHMgaW4gaW5wdXQiKQ0KLUpNRVNTQUdFKEpXUk5fR0lGX0JBRERBVEEsICJDb3JydXB0IGRhdGEgaW4gR0lGIGZpbGUiKQ0KLUpNRVNTQUdFKEpXUk5fR0lGX0NIQVIsICJCb2d1cyBjaGFyIDB4JTAyeCBpbiBHSUYgZmlsZSwgaWdub3JpbmciKQ0KLUpNRVNTQUdFKEpXUk5fR0lGX0VORENPREUsICJQcmVtYXR1cmUgZW5kIG9mIEdJRiBpbWFnZSIpDQotSk1FU1NBR0UoSldSTl9HSUZfTk9NT1JFREFUQSwgIlJhbiBvdXQgb2YgR0lGIGJpdHMiKQ0KLSNlbmRpZiAvKiBHSUZfU1VQUE9SVEVEICovDQotDQotI2lmZGVmIFBQTV9TVVBQT1JURUQNCi1KTUVTU0FHRShKRVJSX1BQTV9DT0xPUlNQQUNFLCAiUFBNIG91dHB1dCBtdXN0IGJlIGdyYXlzY2FsZSBvciBSR0IiKQ0KLUpNRVNTQUdFKEpFUlJfUFBNX05PTk5VTUVSSUMsICJOb25udW1lcmljIGRhdGEgaW4gUFBNIGZpbGUiKQ0KLUpNRVNTQUdFKEpFUlJfUFBNX05PVCwgIk5vdCBhIFBQTS9QR00gZmlsZSIpDQotSk1FU1NBR0UoSlRSQ19QR00sICIldXgldSBQR00gaW1hZ2UiKQ0KLUpNRVNTQUdFKEpUUkNfUEdNX1RFWFQsICIldXgldSB0ZXh0IFBHTSBpbWFnZSIpDQotSk1FU1NBR0UoSlRSQ19QUE0sICIldXgldSBQUE0gaW1hZ2UiKQ0KLUpNRVNTQUdFKEpUUkNfUFBNX1RFWFQsICIldXgldSB0ZXh0IFBQTSBpbWFnZSIpDQotI2VuZGlmIC8qIFBQTV9TVVBQT1JURUQgKi8NCi0NCi0jaWZkZWYgUkxFX1NVUFBPUlRFRA0KLUpNRVNTQUdFKEpFUlJfUkxFX0JBREVSUk9SLCAiQm9ndXMgZXJyb3IgY29kZSBmcm9tIFJMRSBsaWJyYXJ5IikNCi1KTUVTU0FHRShKRVJSX1JMRV9DT0xPUlNQQUNFLCAiUkxFIG91dHB1dCBtdXN0IGJlIGdyYXlzY2FsZSBvciBSR0IiKQ0KLUpNRVNTQUdFKEpFUlJfUkxFX0RJTUVOU0lPTlMsICJJbWFnZSBkaW1lbnNpb25zICgldXgldSkgdG9vIGxhcmdlIGZvciBSTEUiKQ0KLUpNRVNTQUdFKEpFUlJfUkxFX0VNUFRZLCAiRW1wdHkgUkxFIGZpbGUiKQ0KLUpNRVNTQUdFKEpFUlJfUkxFX0VPRiwgIlByZW1hdHVyZSBFT0YgaW4gUkxFIGhlYWRlciIpDQotSk1FU1NBR0UoSkVSUl9STEVfTUVNLCAiSW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgUkxFIGhlYWRlciIpDQotSk1FU1NBR0UoSkVSUl9STEVfTk9ULCAiTm90IGFuIFJMRSBmaWxlIikNCi1KTUVTU0FHRShKRVJSX1JMRV9UT09NQU5ZQ0hBTk5FTFMsICJDYW5ub3QgaGFuZGxlICVkIG91dHB1dCBjaGFubmVscyBmb3IgUkxFIikNCi1KTUVTU0FHRShKRVJSX1JMRV9VTlNVUFBPUlRFRCwgIkNhbm5vdCBoYW5kbGUgdGhpcyBSTEUgc2V0dXAiKQ0KLUpNRVNTQUdFKEpUUkNfUkxFLCAiJXV4JXUgZnVsbC1jb2xvciBSTEUgZmlsZSIpDQotSk1FU1NBR0UoSlRSQ19STEVfRlVMTE1BUCwgIiV1eCV1IGZ1bGwtY29sb3IgUkxFIGZpbGUgd2l0aCBtYXAgb2YgbGVuZ3RoICVkIikNCi1KTUVTU0FHRShKVFJDX1JMRV9HUkFZLCAiJXV4JXUgZ3JheXNjYWxlIFJMRSBmaWxlIikNCi1KTUVTU0FHRShKVFJDX1JMRV9NQVBHUkFZLCAiJXV4JXUgZ3JheXNjYWxlIFJMRSBmaWxlIHdpdGggbWFwIG9mIGxlbmd0aCAlZCIpDQotSk1FU1NBR0UoSlRSQ19STEVfTUFQUEVELCAiJXV4JXUgY29sb3JtYXBwZWQgUkxFIGZpbGUgd2l0aCBtYXAgb2YgbGVuZ3RoICVkIikNCi0jZW5kaWYgLyogUkxFX1NVUFBPUlRFRCAqLw0KLQ0KLSNpZmRlZiBUQVJHQV9TVVBQT1JURUQNCi1KTUVTU0FHRShKRVJSX1RHQV9CQURDTUFQLCAiVW5zdXBwb3J0ZWQgVGFyZ2EgY29sb3JtYXAgZm9ybWF0IikNCi1KTUVTU0FHRShKRVJSX1RHQV9CQURQQVJNUywgIkludmFsaWQgb3IgdW5zdXBwb3J0ZWQgVGFyZ2EgZmlsZSIpDQotSk1FU1NBR0UoSkVSUl9UR0FfQ09MT1JTUEFDRSwgIlRhcmdhIG91dHB1dCBtdXN0IGJlIGdyYXlzY2FsZSBvciBSR0IiKQ0KLUpNRVNTQUdFKEpUUkNfVEdBLCAiJXV4JXUgUkdCIFRhcmdhIGltYWdlIikNCi1KTUVTU0FHRShKVFJDX1RHQV9HUkFZLCAiJXV4JXUgZ3JheXNjYWxlIFRhcmdhIGltYWdlIikNCi1KTUVTU0FHRShKVFJDX1RHQV9NQVBQRUQsICIldXgldSBjb2xvcm1hcHBlZCBUYXJnYSBpbWFnZSIpDQotI2Vsc2UNCi1KTUVTU0FHRShKRVJSX1RHQV9OT1RDT01QLCAiVGFyZ2Egc3VwcG9ydCB3YXMgbm90IGNvbXBpbGVkIikNCi0jZW5kaWYgLyogVEFSR0FfU1VQUE9SVEVEICovDQotDQotSk1FU1NBR0UoSkVSUl9CQURfQ01BUF9GSUxFLA0KLQkgIkNvbG9yIG1hcCBmaWxlIGlzIGludmFsaWQgb3Igb2YgdW5zdXBwb3J0ZWQgZm9ybWF0IikNCi1KTUVTU0FHRShKRVJSX1RPT19NQU5ZX0NPTE9SUywNCi0JICJPdXRwdXQgZmlsZSBmb3JtYXQgY2Fubm90IGhhbmRsZSAlZCBjb2xvcm1hcCBlbnRyaWVzIikNCi1KTUVTU0FHRShKRVJSX1VOR0VUQ19GQUlMRUQsICJ1bmdldGMgZmFpbGVkIikNCi0jaWZkZWYgVEFSR0FfU1VQUE9SVEVEDQotSk1FU1NBR0UoSkVSUl9VTktOT1dOX0ZPUk1BVCwNCi0JICJVbnJlY29nbml6ZWQgaW5wdXQgZmlsZSBmb3JtYXQgLS0tIHBlcmhhcHMgeW91IG5lZWQgLXRhcmdhIikNCi0jZWxzZQ0KLUpNRVNTQUdFKEpFUlJfVU5LTk9XTl9GT1JNQVQsICJVbnJlY29nbml6ZWQgaW5wdXQgZmlsZSBmb3JtYXQiKQ0KLSNlbmRpZg0KLUpNRVNTQUdFKEpFUlJfVU5TVVBQT1JURURfRk9STUFULCAiVW5zdXBwb3J0ZWQgb3V0cHV0IGZpbGUgZm9ybWF0IikNCi0NCi0jaWZkZWYgSk1BS0VfRU5VTV9MSVNUDQotDQotICBKTVNHX0xBU1RBRERPTkNPREUNCi19IEFERE9OX01FU1NBR0VfQ09ERTsNCi0NCi0jdW5kZWYgSk1BS0VfRU5VTV9MSVNUDQotI2VuZGlmIC8qIEpNQUtFX0VOVU1fTElTVCAqLw0KLQ0KLS8qIFphcCBKTUVTU0FHRSBtYWNybyBzbyB0aGF0IGZ1dHVyZSByZS1pbmNsdXNpb25zIGRvIG5vdGhpbmcgYnkgZGVmYXVsdCAqLw0KLSN1bmRlZiBKTUVTU0FHRQ0KKy8qCisgKiBjZGVycm9yLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBlcnJvciBhbmQgbWVzc2FnZSBjb2RlcyBmb3IgdGhlIGNqcGVnL2RqcGVnCisgKiBhcHBsaWNhdGlvbnMuICBUaGVzZSBzdHJpbmdzIGFyZSBub3QgbmVlZGVkIGFzIHBhcnQgb2YgdGhlIEpQRUcgbGlicmFyeQorICogcHJvcGVyLgorICogRWRpdCB0aGlzIGZpbGUgdG8gYWRkIG5ldyBjb2Rlcywgb3IgdG8gdHJhbnNsYXRlIHRoZSBtZXNzYWdlIHN0cmluZ3MgdG8KKyAqIHNvbWUgb3RoZXIgbGFuZ3VhZ2UuCisgKi8KKworLyoKKyAqIFRvIGRlZmluZSB0aGUgZW51bSBsaXN0IG9mIG1lc3NhZ2UgY29kZXMsIGluY2x1ZGUgdGhpcyBmaWxlIHdpdGhvdXQKKyAqIGRlZmluaW5nIG1hY3JvIEpNRVNTQUdFLiAgVG8gY3JlYXRlIGEgbWVzc2FnZSBzdHJpbmcgdGFibGUsIGluY2x1ZGUgaXQKKyAqIGFnYWluIHdpdGggYSBzdWl0YWJsZSBKTUVTU0FHRSBkZWZpbml0aW9uIChzZWUgamVycm9yLmMgZm9yIGFuIGV4YW1wbGUpLgorICovCisjaWZuZGVmIEpNRVNTQUdFCisjaWZuZGVmIENERVJST1JfSAorI2RlZmluZSBDREVSUk9SX0gKKy8qIEZpcnN0IHRpbWUgdGhyb3VnaCwgZGVmaW5lIHRoZSBlbnVtIGxpc3QgKi8KKyNkZWZpbmUgSk1BS0VfRU5VTV9MSVNUCisjZWxzZQorLyogUmVwZWF0ZWQgaW5jbHVzaW9ucyBvZiB0aGlzIGZpbGUgYXJlIG5vLW9wcyB1bmxlc3MgSk1FU1NBR0UgaXMgZGVmaW5lZCAqLworI2RlZmluZSBKTUVTU0FHRShjb2RlLHN0cmluZykKKyNlbmRpZiAvKiBDREVSUk9SX0ggKi8KKyNlbmRpZiAvKiBKTUVTU0FHRSAqLworCisjaWZkZWYgSk1BS0VfRU5VTV9MSVNUCisKK3R5cGVkZWYgZW51bSB7CisKKyNkZWZpbmUgSk1FU1NBR0UoY29kZSxzdHJpbmcpCWNvZGUgLAorCisjZW5kaWYgLyogSk1BS0VfRU5VTV9MSVNUICovCisKK0pNRVNTQUdFKEpNU0dfRklSU1RBRERPTkNPREU9MTAwMCwgTlVMTCkgLyogTXVzdCBiZSBmaXJzdCBlbnRyeSEgKi8KKworI2lmZGVmIEJNUF9TVVBQT1JURUQKK0pNRVNTQUdFKEpFUlJfQk1QX0JBRENNQVAsICJVbnN1cHBvcnRlZCBCTVAgY29sb3JtYXAgZm9ybWF0IikKK0pNRVNTQUdFKEpFUlJfQk1QX0JBRERFUFRILCAiT25seSA4LSBhbmQgMjQtYml0IEJNUCBmaWxlcyBhcmUgc3VwcG9ydGVkIikKK0pNRVNTQUdFKEpFUlJfQk1QX0JBREhFQURFUiwgIkludmFsaWQgQk1QIGZpbGU6IGJhZCBoZWFkZXIgbGVuZ3RoIikKK0pNRVNTQUdFKEpFUlJfQk1QX0JBRFBMQU5FUywgIkludmFsaWQgQk1QIGZpbGU6IGJpUGxhbmVzIG5vdCBlcXVhbCB0byAxIikKK0pNRVNTQUdFKEpFUlJfQk1QX0NPTE9SU1BBQ0UsICJCTVAgb3V0cHV0IG11c3QgYmUgZ3JheXNjYWxlIG9yIFJHQiIpCitKTUVTU0FHRShKRVJSX0JNUF9DT01QUkVTU0VELCAiU29ycnksIGNvbXByZXNzZWQgQk1QcyBub3QgeWV0IHN1cHBvcnRlZCIpCitKTUVTU0FHRShKRVJSX0JNUF9OT1QsICJOb3QgYSBCTVAgZmlsZSAtIGRvZXMgbm90IHN0YXJ0IHdpdGggQk0iKQorSk1FU1NBR0UoSlRSQ19CTVAsICIldXgldSAyNC1iaXQgQk1QIGltYWdlIikKK0pNRVNTQUdFKEpUUkNfQk1QX01BUFBFRCwgIiV1eCV1IDgtYml0IGNvbG9ybWFwcGVkIEJNUCBpbWFnZSIpCitKTUVTU0FHRShKVFJDX0JNUF9PUzIsICIldXgldSAyNC1iaXQgT1MyIEJNUCBpbWFnZSIpCitKTUVTU0FHRShKVFJDX0JNUF9PUzJfTUFQUEVELCAiJXV4JXUgOC1iaXQgY29sb3JtYXBwZWQgT1MyIEJNUCBpbWFnZSIpCisjZW5kaWYgLyogQk1QX1NVUFBPUlRFRCAqLworCisjaWZkZWYgR0lGX1NVUFBPUlRFRAorSk1FU1NBR0UoSkVSUl9HSUZfQlVHLCAiR0lGIG91dHB1dCBnb3QgY29uZnVzZWQiKQorSk1FU1NBR0UoSkVSUl9HSUZfQ09ERVNJWkUsICJCb2d1cyBHSUYgY29kZXNpemUgJWQiKQorSk1FU1NBR0UoSkVSUl9HSUZfQ09MT1JTUEFDRSwgIkdJRiBvdXRwdXQgbXVzdCBiZSBncmF5c2NhbGUgb3IgUkdCIikKK0pNRVNTQUdFKEpFUlJfR0lGX0lNQUdFTk9URk9VTkQsICJUb28gZmV3IGltYWdlcyBpbiBHSUYgZmlsZSIpCitKTUVTU0FHRShKRVJSX0dJRl9OT1QsICJOb3QgYSBHSUYgZmlsZSIpCitKTUVTU0FHRShKVFJDX0dJRiwgIiV1eCV1eCVkIEdJRiBpbWFnZSIpCitKTUVTU0FHRShKVFJDX0dJRl9CQURWRVJTSU9OLAorCSAiV2FybmluZzogdW5leHBlY3RlZCBHSUYgdmVyc2lvbiBudW1iZXIgJyVjJWMlYyciKQorSk1FU1NBR0UoSlRSQ19HSUZfRVhURU5TSU9OLCAiSWdub3JpbmcgR0lGIGV4dGVuc2lvbiBibG9jayBvZiB0eXBlIDB4JTAyeCIpCitKTUVTU0FHRShKVFJDX0dJRl9OT05TUVVBUkUsICJDYXV0aW9uOiBub25zcXVhcmUgcGl4ZWxzIGluIGlucHV0IikKK0pNRVNTQUdFKEpXUk5fR0lGX0JBRERBVEEsICJDb3JydXB0IGRhdGEgaW4gR0lGIGZpbGUiKQorSk1FU1NBR0UoSldSTl9HSUZfQ0hBUiwgIkJvZ3VzIGNoYXIgMHglMDJ4IGluIEdJRiBmaWxlLCBpZ25vcmluZyIpCitKTUVTU0FHRShKV1JOX0dJRl9FTkRDT0RFLCAiUHJlbWF0dXJlIGVuZCBvZiBHSUYgaW1hZ2UiKQorSk1FU1NBR0UoSldSTl9HSUZfTk9NT1JFREFUQSwgIlJhbiBvdXQgb2YgR0lGIGJpdHMiKQorI2VuZGlmIC8qIEdJRl9TVVBQT1JURUQgKi8KKworI2lmZGVmIFBQTV9TVVBQT1JURUQKK0pNRVNTQUdFKEpFUlJfUFBNX0NPTE9SU1BBQ0UsICJQUE0gb3V0cHV0IG11c3QgYmUgZ3JheXNjYWxlIG9yIFJHQiIpCitKTUVTU0FHRShKRVJSX1BQTV9OT05OVU1FUklDLCAiTm9ubnVtZXJpYyBkYXRhIGluIFBQTSBmaWxlIikKK0pNRVNTQUdFKEpFUlJfUFBNX05PVCwgIk5vdCBhIFBQTS9QR00gZmlsZSIpCitKTUVTU0FHRShKVFJDX1BHTSwgIiV1eCV1IFBHTSBpbWFnZSIpCitKTUVTU0FHRShKVFJDX1BHTV9URVhULCAiJXV4JXUgdGV4dCBQR00gaW1hZ2UiKQorSk1FU1NBR0UoSlRSQ19QUE0sICIldXgldSBQUE0gaW1hZ2UiKQorSk1FU1NBR0UoSlRSQ19QUE1fVEVYVCwgIiV1eCV1IHRleHQgUFBNIGltYWdlIikKKyNlbmRpZiAvKiBQUE1fU1VQUE9SVEVEICovCisKKyNpZmRlZiBSTEVfU1VQUE9SVEVECitKTUVTU0FHRShKRVJSX1JMRV9CQURFUlJPUiwgIkJvZ3VzIGVycm9yIGNvZGUgZnJvbSBSTEUgbGlicmFyeSIpCitKTUVTU0FHRShKRVJSX1JMRV9DT0xPUlNQQUNFLCAiUkxFIG91dHB1dCBtdXN0IGJlIGdyYXlzY2FsZSBvciBSR0IiKQorSk1FU1NBR0UoSkVSUl9STEVfRElNRU5TSU9OUywgIkltYWdlIGRpbWVuc2lvbnMgKCV1eCV1KSB0b28gbGFyZ2UgZm9yIFJMRSIpCitKTUVTU0FHRShKRVJSX1JMRV9FTVBUWSwgIkVtcHR5IFJMRSBmaWxlIikKK0pNRVNTQUdFKEpFUlJfUkxFX0VPRiwgIlByZW1hdHVyZSBFT0YgaW4gUkxFIGhlYWRlciIpCitKTUVTU0FHRShKRVJSX1JMRV9NRU0sICJJbnN1ZmZpY2llbnQgbWVtb3J5IGZvciBSTEUgaGVhZGVyIikKK0pNRVNTQUdFKEpFUlJfUkxFX05PVCwgIk5vdCBhbiBSTEUgZmlsZSIpCitKTUVTU0FHRShKRVJSX1JMRV9UT09NQU5ZQ0hBTk5FTFMsICJDYW5ub3QgaGFuZGxlICVkIG91dHB1dCBjaGFubmVscyBmb3IgUkxFIikKK0pNRVNTQUdFKEpFUlJfUkxFX1VOU1VQUE9SVEVELCAiQ2Fubm90IGhhbmRsZSB0aGlzIFJMRSBzZXR1cCIpCitKTUVTU0FHRShKVFJDX1JMRSwgIiV1eCV1IGZ1bGwtY29sb3IgUkxFIGZpbGUiKQorSk1FU1NBR0UoSlRSQ19STEVfRlVMTE1BUCwgIiV1eCV1IGZ1bGwtY29sb3IgUkxFIGZpbGUgd2l0aCBtYXAgb2YgbGVuZ3RoICVkIikKK0pNRVNTQUdFKEpUUkNfUkxFX0dSQVksICIldXgldSBncmF5c2NhbGUgUkxFIGZpbGUiKQorSk1FU1NBR0UoSlRSQ19STEVfTUFQR1JBWSwgIiV1eCV1IGdyYXlzY2FsZSBSTEUgZmlsZSB3aXRoIG1hcCBvZiBsZW5ndGggJWQiKQorSk1FU1NBR0UoSlRSQ19STEVfTUFQUEVELCAiJXV4JXUgY29sb3JtYXBwZWQgUkxFIGZpbGUgd2l0aCBtYXAgb2YgbGVuZ3RoICVkIikKKyNlbmRpZiAvKiBSTEVfU1VQUE9SVEVEICovCisKKyNpZmRlZiBUQVJHQV9TVVBQT1JURUQKK0pNRVNTQUdFKEpFUlJfVEdBX0JBRENNQVAsICJVbnN1cHBvcnRlZCBUYXJnYSBjb2xvcm1hcCBmb3JtYXQiKQorSk1FU1NBR0UoSkVSUl9UR0FfQkFEUEFSTVMsICJJbnZhbGlkIG9yIHVuc3VwcG9ydGVkIFRhcmdhIGZpbGUiKQorSk1FU1NBR0UoSkVSUl9UR0FfQ09MT1JTUEFDRSwgIlRhcmdhIG91dHB1dCBtdXN0IGJlIGdyYXlzY2FsZSBvciBSR0IiKQorSk1FU1NBR0UoSlRSQ19UR0EsICIldXgldSBSR0IgVGFyZ2EgaW1hZ2UiKQorSk1FU1NBR0UoSlRSQ19UR0FfR1JBWSwgIiV1eCV1IGdyYXlzY2FsZSBUYXJnYSBpbWFnZSIpCitKTUVTU0FHRShKVFJDX1RHQV9NQVBQRUQsICIldXgldSBjb2xvcm1hcHBlZCBUYXJnYSBpbWFnZSIpCisjZWxzZQorSk1FU1NBR0UoSkVSUl9UR0FfTk9UQ09NUCwgIlRhcmdhIHN1cHBvcnQgd2FzIG5vdCBjb21waWxlZCIpCisjZW5kaWYgLyogVEFSR0FfU1VQUE9SVEVEICovCisKK0pNRVNTQUdFKEpFUlJfQkFEX0NNQVBfRklMRSwKKwkgIkNvbG9yIG1hcCBmaWxlIGlzIGludmFsaWQgb3Igb2YgdW5zdXBwb3J0ZWQgZm9ybWF0IikKK0pNRVNTQUdFKEpFUlJfVE9PX01BTllfQ09MT1JTLAorCSAiT3V0cHV0IGZpbGUgZm9ybWF0IGNhbm5vdCBoYW5kbGUgJWQgY29sb3JtYXAgZW50cmllcyIpCitKTUVTU0FHRShKRVJSX1VOR0VUQ19GQUlMRUQsICJ1bmdldGMgZmFpbGVkIikKKyNpZmRlZiBUQVJHQV9TVVBQT1JURUQKK0pNRVNTQUdFKEpFUlJfVU5LTk9XTl9GT1JNQVQsCisJICJVbnJlY29nbml6ZWQgaW5wdXQgZmlsZSBmb3JtYXQgLS0tIHBlcmhhcHMgeW91IG5lZWQgLXRhcmdhIikKKyNlbHNlCitKTUVTU0FHRShKRVJSX1VOS05PV05fRk9STUFULCAiVW5yZWNvZ25pemVkIGlucHV0IGZpbGUgZm9ybWF0IikKKyNlbmRpZgorSk1FU1NBR0UoSkVSUl9VTlNVUFBPUlRFRF9GT1JNQVQsICJVbnN1cHBvcnRlZCBvdXRwdXQgZmlsZSBmb3JtYXQiKQorCisjaWZkZWYgSk1BS0VfRU5VTV9MSVNUCisKKyAgSk1TR19MQVNUQURET05DT0RFCit9IEFERE9OX01FU1NBR0VfQ09ERTsKKworI3VuZGVmIEpNQUtFX0VOVU1fTElTVAorI2VuZGlmIC8qIEpNQUtFX0VOVU1fTElTVCAqLworCisvKiBaYXAgSk1FU1NBR0UgbWFjcm8gc28gdGhhdCBmdXR1cmUgcmUtaW5jbHVzaW9ucyBkbyBub3RoaW5nIGJ5IGRlZmF1bHQgKi8KKyN1bmRlZiBKTUVTU0FHRQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2NkanBlZy5oIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2NkanBlZy5oCmluZGV4IGJlMTIyNzguLjNkNzI4ZWUgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9jZGpwZWcuaAorKysgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvY2RqcGVnLmgKQEAgLTEsMTg0ICsxLDE4NCBAQAotLyoNCi0gKiBjZGpwZWcuaA0KLSAqDQotICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTcsIFRob21hcyBHLiBMYW5lLg0KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuDQotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLg0KLSAqDQotICogVGhpcyBmaWxlIGNvbnRhaW5zIGNvbW1vbiBkZWNsYXJhdGlvbnMgZm9yIHRoZSBzYW1wbGUgYXBwbGljYXRpb25zDQotICogY2pwZWcgYW5kIGRqcGVnLiAgSXQgaXMgTk9UIHVzZWQgYnkgdGhlIGNvcmUgSlBFRyBsaWJyYXJ5Lg0KLSAqLw0KLQ0KLSNkZWZpbmUgSlBFR19DSlBFR19ESlBFRwkvKiBkZWZpbmUgcHJvcGVyIG9wdGlvbnMgaW4gamNvbmZpZy5oICovDQotI2RlZmluZSBKUEVHX0lOVEVSTkFMX09QVElPTlMJLyogY2pwZWcuYyxkanBlZy5jIG5lZWQgdG8gc2VlIHh4eF9TVVBQT1JURUQgKi8NCi0jaW5jbHVkZSAiamluY2x1ZGUuaCINCi0jaW5jbHVkZSAianBlZ2xpYi5oIg0KLSNpbmNsdWRlICJqZXJyb3IuaCIJCS8qIGdldCBsaWJyYXJ5IGVycm9yIGNvZGVzIHRvbyAqLw0KLSNpbmNsdWRlICJjZGVycm9yLmgiCQkvKiBnZXQgYXBwbGljYXRpb24tc3BlY2lmaWMgZXJyb3IgY29kZXMgKi8NCi0NCi0NCi0vKg0KLSAqIE9iamVjdCBpbnRlcmZhY2UgZm9yIGNqcGVnJ3Mgc291cmNlIGZpbGUgZGVjb2RpbmcgbW9kdWxlcw0KLSAqLw0KLQ0KLXR5cGVkZWYgc3RydWN0IGNqcGVnX3NvdXJjZV9zdHJ1Y3QgKiBjanBlZ19zb3VyY2VfcHRyOw0KLQ0KLXN0cnVjdCBjanBlZ19zb3VyY2Vfc3RydWN0IHsNCi0gIEpNRVRIT0Qodm9pZCwgc3RhcnRfaW5wdXQsIChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkgICAgICBjanBlZ19zb3VyY2VfcHRyIHNpbmZvKSk7DQotICBKTUVUSE9EKEpESU1FTlNJT04sIGdldF9waXhlbF9yb3dzLCAoal9jb21wcmVzc19wdHIgY2luZm8sDQotCQkJCSAgICAgICBjanBlZ19zb3VyY2VfcHRyIHNpbmZvKSk7DQotICBKTUVUSE9EKHZvaWQsIGZpbmlzaF9pbnB1dCwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCSAgICAgICBjanBlZ19zb3VyY2VfcHRyIHNpbmZvKSk7DQotDQotICBGWFNZU19GSUxFICppbnB1dF9maWxlOw0KLQ0KLSAgSlNBTVBBUlJBWSBidWZmZXI7DQotICBKRElNRU5TSU9OIGJ1ZmZlcl9oZWlnaHQ7DQotfTsNCi0NCi0NCi0vKg0KLSAqIE9iamVjdCBpbnRlcmZhY2UgZm9yIGRqcGVnJ3Mgb3V0cHV0IGZpbGUgZW5jb2RpbmcgbW9kdWxlcw0KLSAqLw0KLQ0KLXR5cGVkZWYgc3RydWN0IGRqcGVnX2Rlc3Rfc3RydWN0ICogZGpwZWdfZGVzdF9wdHI7DQotDQotc3RydWN0IGRqcGVnX2Rlc3Rfc3RydWN0IHsNCi0gIC8qIHN0YXJ0X291dHB1dCBpcyBjYWxsZWQgYWZ0ZXIganBlZ19zdGFydF9kZWNvbXByZXNzIGZpbmlzaGVzLg0KLSAgICogVGhlIGNvbG9yIG1hcCB3aWxsIGJlIHJlYWR5IGF0IHRoaXMgdGltZSwgaWYgb25lIGlzIG5lZWRlZC4NCi0gICAqLw0KLSAgSk1FVEhPRCh2b2lkLCBzdGFydF9vdXRwdXQsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCSAgICAgICBkanBlZ19kZXN0X3B0ciBkaW5mbykpOw0KLSAgLyogRW1pdCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBwaXhlbCByb3dzIGZyb20gdGhlIGJ1ZmZlci4gKi8NCi0gIEpNRVRIT0Qodm9pZCwgcHV0X3BpeGVsX3Jvd3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQkgZGpwZWdfZGVzdF9wdHIgZGluZm8sDQotCQkJCSBKRElNRU5TSU9OIHJvd3Nfc3VwcGxpZWQpKTsNCi0gIC8qIEZpbmlzaCB1cCBhdCB0aGUgZW5kIG9mIHRoZSBpbWFnZS4gKi8NCi0gIEpNRVRIT0Qodm9pZCwgZmluaXNoX291dHB1dCwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sDQotCQkJCWRqcGVnX2Rlc3RfcHRyIGRpbmZvKSk7DQotDQotICAvKiBUYXJnZXQgZmlsZSBzcGVjOyBmaWxsZWQgaW4gYnkgZGpwZWcuYyBhZnRlciBvYmplY3QgaXMgY3JlYXRlZC4gKi8NCi0gIEZYU1lTX0ZJTEUgKiBvdXRwdXRfZmlsZTsNCi0NCi0gIC8qIE91dHB1dCBwaXhlbC1yb3cgYnVmZmVyLiAgQ3JlYXRlZCBieSBtb2R1bGUgaW5pdCBvciBzdGFydF9vdXRwdXQuDQotICAgKiBXaWR0aCBpcyBjaW5mby0+b3V0cHV0X3dpZHRoICogY2luZm8tPm91dHB1dF9jb21wb25lbnRzOw0KLSAgICogaGVpZ2h0IGlzIGJ1ZmZlcl9oZWlnaHQuDQotICAgKi8NCi0gIEpTQU1QQVJSQVkgYnVmZmVyOw0KLSAgSkRJTUVOU0lPTiBidWZmZXJfaGVpZ2h0Ow0KLX07DQotDQotDQotLyoNCi0gKiBjanBlZy9kanBlZyBtYXkgbmVlZCB0byBwZXJmb3JtIGV4dHJhIHBhc3NlcyB0byBjb252ZXJ0IHRvIG9yIGZyb20NCi0gKiB0aGUgc291cmNlL2Rlc3RpbmF0aW9uIGZpbGUgZm9ybWF0LiAgVGhlIEpQRUcgbGlicmFyeSBkb2VzIG5vdCBrbm93DQotICogYWJvdXQgdGhlc2UgcGFzc2VzLCBidXQgd2UnZCBsaWtlIHRoZW0gdG8gYmUgY291bnRlZCBieSB0aGUgcHJvZ3Jlc3MNCi0gKiBtb25pdG9yLiAgV2UgdXNlIGFuIGV4cGFuZGVkIHByb2dyZXNzIG1vbml0b3Igb2JqZWN0IHRvIGhvbGQgdGhlDQotICogYWRkaXRpb25hbCBwYXNzIGNvdW50Lg0KLSAqLw0KLQ0KLXN0cnVjdCBjZGpwZWdfcHJvZ3Jlc3NfbWdyIHsNCi0gIHN0cnVjdCBqcGVnX3Byb2dyZXNzX21nciBwdWI7CS8qIGZpZWxkcyBrbm93biB0byBKUEVHIGxpYnJhcnkgKi8NCi0gIGludCBjb21wbGV0ZWRfZXh0cmFfcGFzc2VzOwkvKiBleHRyYSBwYXNzZXMgY29tcGxldGVkICovDQotICBpbnQgdG90YWxfZXh0cmFfcGFzc2VzOwkvKiB0b3RhbCBleHRyYSAqLw0KLSAgLyogbGFzdCBwcmludGVkIHBlcmNlbnRhZ2Ugc3RvcmVkIGhlcmUgdG8gYXZvaWQgbXVsdGlwbGUgcHJpbnRvdXRzICovDQotICBpbnQgcGVyY2VudF9kb25lOw0KLX07DQotDQotdHlwZWRlZiBzdHJ1Y3QgY2RqcGVnX3Byb2dyZXNzX21nciAqIGNkX3Byb2dyZXNzX3B0cjsNCi0NCi0NCi0vKiBTaG9ydCBmb3JtcyBvZiBleHRlcm5hbCBuYW1lcyBmb3Igc3lzdGVtcyB3aXRoIGJyYWluLWRhbWFnZWQgbGlua2Vycy4gKi8NCi0NCi0jaWZkZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUw0KLSNkZWZpbmUgamluaXRfcmVhZF9ibXAJCWpJUmRCTVANCi0jZGVmaW5lIGppbml0X3dyaXRlX2JtcAkJaklXckJNUA0KLSNkZWZpbmUgamluaXRfcmVhZF9naWYJCWpJUmRHSUYNCi0jZGVmaW5lIGppbml0X3dyaXRlX2dpZgkJaklXckdJRg0KLSNkZWZpbmUgamluaXRfcmVhZF9wcG0JCWpJUmRQUE0NCi0jZGVmaW5lIGppbml0X3dyaXRlX3BwbQkJaklXclBQTQ0KLSNkZWZpbmUgamluaXRfcmVhZF9ybGUJCWpJUmRSTEUNCi0jZGVmaW5lIGppbml0X3dyaXRlX3JsZQkJaklXclJMRQ0KLSNkZWZpbmUgamluaXRfcmVhZF90YXJnYQlqSVJkVGFyZ2ENCi0jZGVmaW5lIGppbml0X3dyaXRlX3RhcmdhCWpJV3JUYXJnYQ0KLSNkZWZpbmUgcmVhZF9xdWFudF90YWJsZXMJUmRRVGFibGVzDQotI2RlZmluZSByZWFkX3NjYW5fc2NyaXB0CVJkU2NuU2NyaXB0DQotI2RlZmluZSBzZXRfcXVhbnRfc2xvdHMJCVNldFFTbG90cw0KLSNkZWZpbmUgc2V0X3NhbXBsZV9mYWN0b3JzCVNldFNGYWN0cw0KLSNkZWZpbmUgcmVhZF9jb2xvcl9tYXAJCVJkQ01hcA0KLSNkZWZpbmUgZW5hYmxlX3NpZ25hbF9jYXRjaGVyCUVuU2lnQ2F0Y2hlcg0KLSNkZWZpbmUgc3RhcnRfcHJvZ3Jlc3NfbW9uaXRvcglTdFByb2dNb24NCi0jZGVmaW5lIGVuZF9wcm9ncmVzc19tb25pdG9yCUVuUHJvZ01vbg0KLSNkZWZpbmUgcmVhZF9zdGRpbgkJUmRTdGRpbg0KLSNkZWZpbmUgd3JpdGVfc3Rkb3V0CQlXclN0ZG91dA0KLSNlbmRpZiAvKiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTICovDQotDQotLyogTW9kdWxlIHNlbGVjdGlvbiByb3V0aW5lcyBmb3IgSS9PIG1vZHVsZXMuICovDQotDQotRVhURVJOKGNqcGVnX3NvdXJjZV9wdHIpIGppbml0X3JlYWRfYm1wIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4oZGpwZWdfZGVzdF9wdHIpIGppbml0X3dyaXRlX2JtcCBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sDQotCQkJCQkgICAgYm9vbGVhbiBpc19vczIpKTsNCi1FWFRFUk4oY2pwZWdfc291cmNlX3B0cikgamluaXRfcmVhZF9naWYgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOw0KLUVYVEVSTihkanBlZ19kZXN0X3B0cikgamluaXRfd3JpdGVfZ2lmIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLUVYVEVSTihjanBlZ19zb3VyY2VfcHRyKSBqaW5pdF9yZWFkX3BwbSBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotRVhURVJOKGRqcGVnX2Rlc3RfcHRyKSBqaW5pdF93cml0ZV9wcG0gSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotRVhURVJOKGNqcGVnX3NvdXJjZV9wdHIpIGppbml0X3JlYWRfcmxlIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4oZGpwZWdfZGVzdF9wdHIpIGppbml0X3dyaXRlX3JsZSBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4oY2pwZWdfc291cmNlX3B0cikgamluaXRfcmVhZF90YXJnYSBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotRVhURVJOKGRqcGVnX2Rlc3RfcHRyKSBqaW5pdF93cml0ZV90YXJnYSBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi0NCi0vKiBjanBlZyBzdXBwb3J0IHJvdXRpbmVzIChpbiByZHN3aXRjaC5jKSAqLw0KLQ0KLUVYVEVSTihib29sZWFuKSByZWFkX3F1YW50X3RhYmxlcyBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjaGFyICogZmlsZW5hbWUsDQotCQkJCSAgICBpbnQgc2NhbGVfZmFjdG9yLCBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKSk7DQotRVhURVJOKGJvb2xlYW4pIHJlYWRfc2Nhbl9zY3JpcHQgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgY2hhciAqIGZpbGVuYW1lKSk7DQotRVhURVJOKGJvb2xlYW4pIHNldF9xdWFudF9zbG90cyBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjaGFyICphcmcpKTsNCi1FWFRFUk4oYm9vbGVhbikgc2V0X3NhbXBsZV9mYWN0b3JzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGNoYXIgKmFyZykpOw0KLQ0KLS8qIGRqcGVnIHN1cHBvcnQgcm91dGluZXMgKGluIHJkY29sbWFwLmMpICovDQotDQotRVhURVJOKHZvaWQpIHJlYWRfY29sb3JfbWFwIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgRlhTWVNfRklMRSAqIGluZmlsZSkpOw0KLQ0KLS8qIGNvbW1vbiBzdXBwb3J0IHJvdXRpbmVzIChpbiBjZGpwZWcuYykgKi8NCi0NCi1FWFRFUk4odm9pZCkgZW5hYmxlX3NpZ25hbF9jYXRjaGVyIEpQUCgoal9jb21tb25fcHRyIGNpbmZvKSk7DQotRVhURVJOKHZvaWQpIHN0YXJ0X3Byb2dyZXNzX21vbml0b3IgSlBQKChqX2NvbW1vbl9wdHIgY2luZm8sDQotCQkJCQkgY2RfcHJvZ3Jlc3NfcHRyIHByb2dyZXNzKSk7DQotRVhURVJOKHZvaWQpIGVuZF9wcm9ncmVzc19tb25pdG9yIEpQUCgoal9jb21tb25fcHRyIGNpbmZvKSk7DQotRVhURVJOKGJvb2xlYW4pIGtleW1hdGNoIEpQUCgoY2hhciAqIGFyZywgY29uc3QgY2hhciAqIGtleXdvcmQsIGludCBtaW5jaGFycykpOw0KLUVYVEVSTihGWFNZU19GSUxFICopIHJlYWRfc3RkaW4gSlBQKCh2b2lkKSk7DQotRVhURVJOKEZYU1lTX0ZJTEUgKikgd3JpdGVfc3Rkb3V0IEpQUCgodm9pZCkpOw0KLQ0KLS8qIG1pc2NlbGxhbmVvdXMgdXNlZnVsIG1hY3JvcyAqLw0KLQ0KLSNpZmRlZiBET05UX1VTRV9CX01PREUJCS8qIGRlZmluZSBtb2RlIHBhcmFtZXRlcnMgZm9yIGZvcGVuKCkgKi8NCi0jZGVmaW5lIFJFQURfQklOQVJZCSJyIg0KLSNkZWZpbmUgV1JJVEVfQklOQVJZCSJ3Ig0KLSNlbHNlDQotI2lmZGVmIFZNUwkJCS8qIFZNUyBpcyB2ZXJ5IG5vbnN0YW5kYXJkICovDQotI2RlZmluZSBSRUFEX0JJTkFSWQkicmIiLCAiY3R4PXN0bSINCi0jZGVmaW5lIFdSSVRFX0JJTkFSWQkid2IiLCAiY3R4PXN0bSINCi0jZWxzZQkJCQkvKiBzdGFuZGFyZCBBTlNJLWNvbXBsaWFudCBjYXNlICovDQotI2RlZmluZSBSRUFEX0JJTkFSWQkicmIiDQotI2RlZmluZSBXUklURV9CSU5BUlkJIndiIg0KLSNlbmRpZg0KLSNlbmRpZg0KLQ0KLSNpZm5kZWYgRVhJVF9GQUlMVVJFCQkvKiBkZWZpbmUgZXhpdCgpIGNvZGVzIGlmIG5vdCBwcm92aWRlZCAqLw0KLSNkZWZpbmUgRVhJVF9GQUlMVVJFICAxDQotI2VuZGlmDQotI2lmbmRlZiBFWElUX1NVQ0NFU1MNCi0jaWZkZWYgVk1TDQotI2RlZmluZSBFWElUX1NVQ0NFU1MgIDEJCS8qIFZNUyBpcyB2ZXJ5IG5vbnN0YW5kYXJkICovDQotI2Vsc2UNCi0jZGVmaW5lIEVYSVRfU1VDQ0VTUyAgMA0KLSNlbmRpZg0KLSNlbmRpZg0KLSNpZm5kZWYgRVhJVF9XQVJOSU5HDQotI2lmZGVmIFZNUw0KLSNkZWZpbmUgRVhJVF9XQVJOSU5HICAxCQkvKiBWTVMgaXMgdmVyeSBub25zdGFuZGFyZCAqLw0KLSNlbHNlDQotI2RlZmluZSBFWElUX1dBUk5JTkcgIDINCi0jZW5kaWYNCi0jZW5kaWYNCisvKgorICogY2RqcGVnLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBjb21tb24gZGVjbGFyYXRpb25zIGZvciB0aGUgc2FtcGxlIGFwcGxpY2F0aW9ucworICogY2pwZWcgYW5kIGRqcGVnLiAgSXQgaXMgTk9UIHVzZWQgYnkgdGhlIGNvcmUgSlBFRyBsaWJyYXJ5LgorICovCisKKyNkZWZpbmUgSlBFR19DSlBFR19ESlBFRwkvKiBkZWZpbmUgcHJvcGVyIG9wdGlvbnMgaW4gamNvbmZpZy5oICovCisjZGVmaW5lIEpQRUdfSU5URVJOQUxfT1BUSU9OUwkvKiBjanBlZy5jLGRqcGVnLmMgbmVlZCB0byBzZWUgeHh4X1NVUFBPUlRFRCAqLworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgImplcnJvci5oIgkJLyogZ2V0IGxpYnJhcnkgZXJyb3IgY29kZXMgdG9vICovCisjaW5jbHVkZSAiY2RlcnJvci5oIgkJLyogZ2V0IGFwcGxpY2F0aW9uLXNwZWNpZmljIGVycm9yIGNvZGVzICovCisKKworLyoKKyAqIE9iamVjdCBpbnRlcmZhY2UgZm9yIGNqcGVnJ3Mgc291cmNlIGZpbGUgZGVjb2RpbmcgbW9kdWxlcworICovCisKK3R5cGVkZWYgc3RydWN0IGNqcGVnX3NvdXJjZV9zdHJ1Y3QgKiBjanBlZ19zb3VyY2VfcHRyOworCitzdHJ1Y3QgY2pwZWdfc291cmNlX3N0cnVjdCB7CisgIEpNRVRIT0Qodm9pZCwgc3RhcnRfaW5wdXQsIChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCSAgICAgIGNqcGVnX3NvdXJjZV9wdHIgc2luZm8pKTsKKyAgSk1FVEhPRChKRElNRU5TSU9OLCBnZXRfcGl4ZWxfcm93cywgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCSAgICAgICBjanBlZ19zb3VyY2VfcHRyIHNpbmZvKSk7CisgIEpNRVRIT0Qodm9pZCwgZmluaXNoX2lucHV0LCAoal9jb21wcmVzc19wdHIgY2luZm8sCisJCQkgICAgICAgY2pwZWdfc291cmNlX3B0ciBzaW5mbykpOworCisgIEZYU1lTX0ZJTEUgKmlucHV0X2ZpbGU7CisKKyAgSlNBTVBBUlJBWSBidWZmZXI7CisgIEpESU1FTlNJT04gYnVmZmVyX2hlaWdodDsKK307CisKKworLyoKKyAqIE9iamVjdCBpbnRlcmZhY2UgZm9yIGRqcGVnJ3Mgb3V0cHV0IGZpbGUgZW5jb2RpbmcgbW9kdWxlcworICovCisKK3R5cGVkZWYgc3RydWN0IGRqcGVnX2Rlc3Rfc3RydWN0ICogZGpwZWdfZGVzdF9wdHI7CisKK3N0cnVjdCBkanBlZ19kZXN0X3N0cnVjdCB7CisgIC8qIHN0YXJ0X291dHB1dCBpcyBjYWxsZWQgYWZ0ZXIganBlZ19zdGFydF9kZWNvbXByZXNzIGZpbmlzaGVzLgorICAgKiBUaGUgY29sb3IgbWFwIHdpbGwgYmUgcmVhZHkgYXQgdGhpcyB0aW1lLCBpZiBvbmUgaXMgbmVlZGVkLgorICAgKi8KKyAgSk1FVEhPRCh2b2lkLCBzdGFydF9vdXRwdXQsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJICAgICAgIGRqcGVnX2Rlc3RfcHRyIGRpbmZvKSk7CisgIC8qIEVtaXQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcGl4ZWwgcm93cyBmcm9tIHRoZSBidWZmZXIuICovCisgIEpNRVRIT0Qodm9pZCwgcHV0X3BpeGVsX3Jvd3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCSBkanBlZ19kZXN0X3B0ciBkaW5mbywKKwkJCQkgSkRJTUVOU0lPTiByb3dzX3N1cHBsaWVkKSk7CisgIC8qIEZpbmlzaCB1cCBhdCB0aGUgZW5kIG9mIHRoZSBpbWFnZS4gKi8KKyAgSk1FVEhPRCh2b2lkLCBmaW5pc2hfb3V0cHV0LCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCQlkanBlZ19kZXN0X3B0ciBkaW5mbykpOworCisgIC8qIFRhcmdldCBmaWxlIHNwZWM7IGZpbGxlZCBpbiBieSBkanBlZy5jIGFmdGVyIG9iamVjdCBpcyBjcmVhdGVkLiAqLworICBGWFNZU19GSUxFICogb3V0cHV0X2ZpbGU7CisKKyAgLyogT3V0cHV0IHBpeGVsLXJvdyBidWZmZXIuICBDcmVhdGVkIGJ5IG1vZHVsZSBpbml0IG9yIHN0YXJ0X291dHB1dC4KKyAgICogV2lkdGggaXMgY2luZm8tPm91dHB1dF93aWR0aCAqIGNpbmZvLT5vdXRwdXRfY29tcG9uZW50czsKKyAgICogaGVpZ2h0IGlzIGJ1ZmZlcl9oZWlnaHQuCisgICAqLworICBKU0FNUEFSUkFZIGJ1ZmZlcjsKKyAgSkRJTUVOU0lPTiBidWZmZXJfaGVpZ2h0OworfTsKKworCisvKgorICogY2pwZWcvZGpwZWcgbWF5IG5lZWQgdG8gcGVyZm9ybSBleHRyYSBwYXNzZXMgdG8gY29udmVydCB0byBvciBmcm9tCisgKiB0aGUgc291cmNlL2Rlc3RpbmF0aW9uIGZpbGUgZm9ybWF0LiAgVGhlIEpQRUcgbGlicmFyeSBkb2VzIG5vdCBrbm93CisgKiBhYm91dCB0aGVzZSBwYXNzZXMsIGJ1dCB3ZSdkIGxpa2UgdGhlbSB0byBiZSBjb3VudGVkIGJ5IHRoZSBwcm9ncmVzcworICogbW9uaXRvci4gIFdlIHVzZSBhbiBleHBhbmRlZCBwcm9ncmVzcyBtb25pdG9yIG9iamVjdCB0byBob2xkIHRoZQorICogYWRkaXRpb25hbCBwYXNzIGNvdW50LgorICovCisKK3N0cnVjdCBjZGpwZWdfcHJvZ3Jlc3NfbWdyIHsKKyAgc3RydWN0IGpwZWdfcHJvZ3Jlc3NfbWdyIHB1YjsJLyogZmllbGRzIGtub3duIHRvIEpQRUcgbGlicmFyeSAqLworICBpbnQgY29tcGxldGVkX2V4dHJhX3Bhc3NlczsJLyogZXh0cmEgcGFzc2VzIGNvbXBsZXRlZCAqLworICBpbnQgdG90YWxfZXh0cmFfcGFzc2VzOwkvKiB0b3RhbCBleHRyYSAqLworICAvKiBsYXN0IHByaW50ZWQgcGVyY2VudGFnZSBzdG9yZWQgaGVyZSB0byBhdm9pZCBtdWx0aXBsZSBwcmludG91dHMgKi8KKyAgaW50IHBlcmNlbnRfZG9uZTsKK307CisKK3R5cGVkZWYgc3RydWN0IGNkanBlZ19wcm9ncmVzc19tZ3IgKiBjZF9wcm9ncmVzc19wdHI7CisKKworLyogU2hvcnQgZm9ybXMgb2YgZXh0ZXJuYWwgbmFtZXMgZm9yIHN5c3RlbXMgd2l0aCBicmFpbi1kYW1hZ2VkIGxpbmtlcnMuICovCisKKyNpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCisjZGVmaW5lIGppbml0X3JlYWRfYm1wCQlqSVJkQk1QCisjZGVmaW5lIGppbml0X3dyaXRlX2JtcAkJaklXckJNUAorI2RlZmluZSBqaW5pdF9yZWFkX2dpZgkJaklSZEdJRgorI2RlZmluZSBqaW5pdF93cml0ZV9naWYJCWpJV3JHSUYKKyNkZWZpbmUgamluaXRfcmVhZF9wcG0JCWpJUmRQUE0KKyNkZWZpbmUgamluaXRfd3JpdGVfcHBtCQlqSVdyUFBNCisjZGVmaW5lIGppbml0X3JlYWRfcmxlCQlqSVJkUkxFCisjZGVmaW5lIGppbml0X3dyaXRlX3JsZQkJaklXclJMRQorI2RlZmluZSBqaW5pdF9yZWFkX3RhcmdhCWpJUmRUYXJnYQorI2RlZmluZSBqaW5pdF93cml0ZV90YXJnYQlqSVdyVGFyZ2EKKyNkZWZpbmUgcmVhZF9xdWFudF90YWJsZXMJUmRRVGFibGVzCisjZGVmaW5lIHJlYWRfc2Nhbl9zY3JpcHQJUmRTY25TY3JpcHQKKyNkZWZpbmUgc2V0X3F1YW50X3Nsb3RzCQlTZXRRU2xvdHMKKyNkZWZpbmUgc2V0X3NhbXBsZV9mYWN0b3JzCVNldFNGYWN0cworI2RlZmluZSByZWFkX2NvbG9yX21hcAkJUmRDTWFwCisjZGVmaW5lIGVuYWJsZV9zaWduYWxfY2F0Y2hlcglFblNpZ0NhdGNoZXIKKyNkZWZpbmUgc3RhcnRfcHJvZ3Jlc3NfbW9uaXRvcglTdFByb2dNb24KKyNkZWZpbmUgZW5kX3Byb2dyZXNzX21vbml0b3IJRW5Qcm9nTW9uCisjZGVmaW5lIHJlYWRfc3RkaW4JCVJkU3RkaW4KKyNkZWZpbmUgd3JpdGVfc3Rkb3V0CQlXclN0ZG91dAorI2VuZGlmIC8qIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMgKi8KKworLyogTW9kdWxlIHNlbGVjdGlvbiByb3V0aW5lcyBmb3IgSS9PIG1vZHVsZXMuICovCisKK0VYVEVSTihjanBlZ19zb3VyY2VfcHRyKSBqaW5pdF9yZWFkX2JtcCBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CitFWFRFUk4oZGpwZWdfZGVzdF9wdHIpIGppbml0X3dyaXRlX2JtcCBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisJCQkJCSAgICBib29sZWFuIGlzX29zMikpOworRVhURVJOKGNqcGVnX3NvdXJjZV9wdHIpIGppbml0X3JlYWRfZ2lmIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTihkanBlZ19kZXN0X3B0cikgamluaXRfd3JpdGVfZ2lmIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKGNqcGVnX3NvdXJjZV9wdHIpIGppbml0X3JlYWRfcHBtIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTihkanBlZ19kZXN0X3B0cikgamluaXRfd3JpdGVfcHBtIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKGNqcGVnX3NvdXJjZV9wdHIpIGppbml0X3JlYWRfcmxlIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTihkanBlZ19kZXN0X3B0cikgamluaXRfd3JpdGVfcmxlIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKGNqcGVnX3NvdXJjZV9wdHIpIGppbml0X3JlYWRfdGFyZ2EgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKGRqcGVnX2Rlc3RfcHRyKSBqaW5pdF93cml0ZV90YXJnYSBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKKworLyogY2pwZWcgc3VwcG9ydCByb3V0aW5lcyAoaW4gcmRzd2l0Y2guYykgKi8KKworRVhURVJOKGJvb2xlYW4pIHJlYWRfcXVhbnRfdGFibGVzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGNoYXIgKiBmaWxlbmFtZSwKKwkJCQkgICAgaW50IHNjYWxlX2ZhY3RvciwgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkpOworRVhURVJOKGJvb2xlYW4pIHJlYWRfc2Nhbl9zY3JpcHQgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgY2hhciAqIGZpbGVuYW1lKSk7CitFWFRFUk4oYm9vbGVhbikgc2V0X3F1YW50X3Nsb3RzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGNoYXIgKmFyZykpOworRVhURVJOKGJvb2xlYW4pIHNldF9zYW1wbGVfZmFjdG9ycyBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjaGFyICphcmcpKTsKKworLyogZGpwZWcgc3VwcG9ydCByb3V0aW5lcyAoaW4gcmRjb2xtYXAuYykgKi8KKworRVhURVJOKHZvaWQpIHJlYWRfY29sb3JfbWFwIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgRlhTWVNfRklMRSAqIGluZmlsZSkpOworCisvKiBjb21tb24gc3VwcG9ydCByb3V0aW5lcyAoaW4gY2RqcGVnLmMpICovCisKK0VYVEVSTih2b2lkKSBlbmFibGVfc2lnbmFsX2NhdGNoZXIgSlBQKChqX2NvbW1vbl9wdHIgY2luZm8pKTsKK0VYVEVSTih2b2lkKSBzdGFydF9wcm9ncmVzc19tb25pdG9yIEpQUCgoal9jb21tb25fcHRyIGNpbmZvLAorCQkJCQkgY2RfcHJvZ3Jlc3NfcHRyIHByb2dyZXNzKSk7CitFWFRFUk4odm9pZCkgZW5kX3Byb2dyZXNzX21vbml0b3IgSlBQKChqX2NvbW1vbl9wdHIgY2luZm8pKTsKK0VYVEVSTihib29sZWFuKSBrZXltYXRjaCBKUFAoKGNoYXIgKiBhcmcsIGNvbnN0IGNoYXIgKiBrZXl3b3JkLCBpbnQgbWluY2hhcnMpKTsKK0VYVEVSTihGWFNZU19GSUxFICopIHJlYWRfc3RkaW4gSlBQKCh2b2lkKSk7CitFWFRFUk4oRlhTWVNfRklMRSAqKSB3cml0ZV9zdGRvdXQgSlBQKCh2b2lkKSk7CisKKy8qIG1pc2NlbGxhbmVvdXMgdXNlZnVsIG1hY3JvcyAqLworCisjaWZkZWYgRE9OVF9VU0VfQl9NT0RFCQkvKiBkZWZpbmUgbW9kZSBwYXJhbWV0ZXJzIGZvciBmb3BlbigpICovCisjZGVmaW5lIFJFQURfQklOQVJZCSJyIgorI2RlZmluZSBXUklURV9CSU5BUlkJInciCisjZWxzZQorI2lmZGVmIFZNUwkJCS8qIFZNUyBpcyB2ZXJ5IG5vbnN0YW5kYXJkICovCisjZGVmaW5lIFJFQURfQklOQVJZCSJyYiIsICJjdHg9c3RtIgorI2RlZmluZSBXUklURV9CSU5BUlkJIndiIiwgImN0eD1zdG0iCisjZWxzZQkJCQkvKiBzdGFuZGFyZCBBTlNJLWNvbXBsaWFudCBjYXNlICovCisjZGVmaW5lIFJFQURfQklOQVJZCSJyYiIKKyNkZWZpbmUgV1JJVEVfQklOQVJZCSJ3YiIKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgRVhJVF9GQUlMVVJFCQkvKiBkZWZpbmUgZXhpdCgpIGNvZGVzIGlmIG5vdCBwcm92aWRlZCAqLworI2RlZmluZSBFWElUX0ZBSUxVUkUgIDEKKyNlbmRpZgorI2lmbmRlZiBFWElUX1NVQ0NFU1MKKyNpZmRlZiBWTVMKKyNkZWZpbmUgRVhJVF9TVUNDRVNTICAxCQkvKiBWTVMgaXMgdmVyeSBub25zdGFuZGFyZCAqLworI2Vsc2UKKyNkZWZpbmUgRVhJVF9TVUNDRVNTICAwCisjZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBFWElUX1dBUk5JTkcKKyNpZmRlZiBWTVMKKyNkZWZpbmUgRVhJVF9XQVJOSU5HICAxCQkvKiBWTVMgaXMgdmVyeSBub25zdGFuZGFyZCAqLworI2Vsc2UKKyNkZWZpbmUgRVhJVF9XQVJOSU5HICAyCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamNhcGltaW4uYyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pjYXBpbWluLmMKaW5kZXggZWM4OGNmZi4uZWMwNGZkMiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamNhcGltaW4uYworKysgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY2FwaW1pbi5jCkBAIC0xLDI4MyArMSwyODMgQEAKLSNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pDQotLyoNCi0gKiBqY2FwaW1pbi5jDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OCwgVGhvbWFzIEcuIExhbmUuDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4NCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuDQotICoNCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgYXBwbGljYXRpb24gaW50ZXJmYWNlIGNvZGUgZm9yIHRoZSBjb21wcmVzc2lvbiBoYWxmDQotICogb2YgdGhlIEpQRUcgbGlicmFyeS4gIFRoZXNlIGFyZSB0aGUgIm1pbmltdW0iIEFQSSByb3V0aW5lcyB0aGF0IG1heSBiZQ0KLSAqIG5lZWRlZCBpbiBlaXRoZXIgdGhlIG5vcm1hbCBmdWxsLWNvbXByZXNzaW9uIGNhc2Ugb3IgdGhlIHRyYW5zY29kaW5nLW9ubHkNCi0gKiBjYXNlLg0KLSAqDQotICogTW9zdCBvZiB0aGUgcm91dGluZXMgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IGFuIGFwcGxpY2F0aW9uDQotICogYXJlIGluIHRoaXMgZmlsZSBvciBpbiBqY2FwaXN0ZC5jLiAgQnV0IGFsc28gc2VlIGpjcGFyYW0uYyBmb3INCi0gKiBwYXJhbWV0ZXItc2V0dXAgaGVscGVyIHJvdXRpbmVzLCBqY29tYXBpLmMgZm9yIHJvdXRpbmVzIHNoYXJlZCBieQ0KLSAqIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uLCBhbmQgamN0cmFucy5jIGZvciB0aGUgdHJhbnNjb2RpbmcgY2FzZS4NCi0gKi8NCi0NCi0jZGVmaW5lIEpQRUdfSU5URVJOQUxTDQotI2luY2x1ZGUgImppbmNsdWRlLmgiDQotI2luY2x1ZGUgImpwZWdsaWIuaCINCi0NCi0NCi0vKg0KLSAqIEluaXRpYWxpemF0aW9uIG9mIGEgSlBFRyBjb21wcmVzc2lvbiBvYmplY3QuDQotICogVGhlIGVycm9yIG1hbmFnZXIgbXVzdCBhbHJlYWR5IGJlIHNldCB1cCAoaW4gY2FzZSBtZW1vcnkgbWFuYWdlciBmYWlscykuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotanBlZ19DcmVhdGVDb21wcmVzcyAoal9jb21wcmVzc19wdHIgY2luZm8sIGludCB2ZXJzaW9uLCBzaXplX3Qgc3RydWN0c2l6ZSkNCi17DQotICBpbnQgaTsNCi0NCi0gIC8qIEd1YXJkIGFnYWluc3QgdmVyc2lvbiBtaXNtYXRjaGVzIGJldHdlZW4gbGlicmFyeSBhbmQgY2FsbGVyLiAqLw0KLSAgY2luZm8tPm1lbSA9IE5VTEw7CQkvKiBzbyBqcGVnX2Rlc3Ryb3kga25vd3MgbWVtIG1nciBub3QgY2FsbGVkICovDQotICBpZiAodmVyc2lvbiAhPSBKUEVHX0xJQl9WRVJTSU9OKQ0KLSAgICBFUlJFWElUMihjaW5mbywgSkVSUl9CQURfTElCX1ZFUlNJT04sIEpQRUdfTElCX1ZFUlNJT04sIHZlcnNpb24pOw0KLSAgaWYgKHN0cnVjdHNpemUgIT0gU0laRU9GKHN0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCkpDQotICAgIEVSUkVYSVQyKGNpbmZvLCBKRVJSX0JBRF9TVFJVQ1RfU0laRSwgDQotCSAgICAgKGludCkgU0laRU9GKHN0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCksIChpbnQpIHN0cnVjdHNpemUpOw0KLQ0KLSAgLyogRm9yIGRlYnVnZ2luZyBwdXJwb3Nlcywgd2UgemVybyB0aGUgd2hvbGUgbWFzdGVyIHN0cnVjdHVyZS4NCi0gICAqIEJ1dCB0aGUgYXBwbGljYXRpb24gaGFzIGFscmVhZHkgc2V0IHRoZSBlcnIgcG9pbnRlciwgYW5kIG1heSBoYXZlIHNldA0KLSAgICogY2xpZW50X2RhdGEsIHNvIHdlIGhhdmUgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aG9zZSBmaWVsZHMuDQotICAgKiBOb3RlOiBpZiBhcHBsaWNhdGlvbiBoYXNuJ3Qgc2V0IGNsaWVudF9kYXRhLCB0b29scyBsaWtlIFB1cmlmeSBtYXkNCi0gICAqIGNvbXBsYWluIGhlcmUuDQotICAgKi8NCi0gIHsNCi0gICAgc3RydWN0IGpwZWdfZXJyb3JfbWdyICogZXJyID0gY2luZm8tPmVycjsNCi0gICAgdm9pZCAqIGNsaWVudF9kYXRhID0gY2luZm8tPmNsaWVudF9kYXRhOyAvKiBpZ25vcmUgUHVyaWZ5IGNvbXBsYWludCBoZXJlICovDQotICAgIE1FTVpFUk8oY2luZm8sIFNJWkVPRihzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3QpKTsNCi0gICAgY2luZm8tPmVyciA9IGVycjsNCi0gICAgY2luZm8tPmNsaWVudF9kYXRhID0gY2xpZW50X2RhdGE7DQotICB9DQotICBjaW5mby0+aXNfZGVjb21wcmVzc29yID0gRkFMU0U7DQotDQotICAvKiBJbml0aWFsaXplIGEgbWVtb3J5IG1hbmFnZXIgaW5zdGFuY2UgZm9yIHRoaXMgb2JqZWN0ICovDQotICBqaW5pdF9tZW1vcnlfbWdyKChqX2NvbW1vbl9wdHIpIGNpbmZvKTsNCi0NCi0gIC8qIFplcm8gb3V0IHBvaW50ZXJzIHRvIHBlcm1hbmVudCBzdHJ1Y3R1cmVzLiAqLw0KLSAgY2luZm8tPnByb2dyZXNzID0gTlVMTDsNCi0gIGNpbmZvLT5kZXN0ID0gTlVMTDsNCi0NCi0gIGNpbmZvLT5jb21wX2luZm8gPSBOVUxMOw0KLQ0KLSAgZm9yIChpID0gMDsgaSA8IE5VTV9RVUFOVF9UQkxTOyBpKyspDQotICAgIGNpbmZvLT5xdWFudF90YmxfcHRyc1tpXSA9IE5VTEw7DQotDQotICBmb3IgKGkgPSAwOyBpIDwgTlVNX0hVRkZfVEJMUzsgaSsrKSB7DQotICAgIGNpbmZvLT5kY19odWZmX3RibF9wdHJzW2ldID0gTlVMTDsNCi0gICAgY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbaV0gPSBOVUxMOw0KLSAgfQ0KLQ0KLSAgY2luZm8tPnNjcmlwdF9zcGFjZSA9IE5VTEw7DQotDQotICBjaW5mby0+aW5wdXRfZ2FtbWEgPSAxLjA7CS8qIGluIGNhc2UgYXBwbGljYXRpb24gZm9yZ2V0cyAqLw0KLQ0KLSAgLyogT0ssIEknbSByZWFkeSAqLw0KLSAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IENTVEFURV9TVEFSVDsNCi19DQotDQotDQotLyoNCi0gKiBEZXN0cnVjdGlvbiBvZiBhIEpQRUcgY29tcHJlc3Npb24gb2JqZWN0DQotICovDQotDQotR0xPQkFMKHZvaWQpDQotanBlZ19kZXN0cm95X2NvbXByZXNzIChqX2NvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBqcGVnX2Rlc3Ryb3koKGpfY29tbW9uX3B0cikgY2luZm8pOyAvKiB1c2UgY29tbW9uIHJvdXRpbmUgKi8NCi19DQotDQotDQotLyoNCi0gKiBBYm9ydCBwcm9jZXNzaW5nIG9mIGEgSlBFRyBjb21wcmVzc2lvbiBvcGVyYXRpb24sDQotICogYnV0IGRvbid0IGRlc3Ryb3kgdGhlIG9iamVjdCBpdHNlbGYuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotanBlZ19hYm9ydF9jb21wcmVzcyAoal9jb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAganBlZ19hYm9ydCgoal9jb21tb25fcHRyKSBjaW5mbyk7IC8qIHVzZSBjb21tb24gcm91dGluZSAqLw0KLX0NCi0NCi0NCi0vKg0KLSAqIEZvcmNpYmx5IHN1cHByZXNzIG9yIHVuLXN1cHByZXNzIGFsbCBxdWFudGl6YXRpb24gYW5kIEh1ZmZtYW4gdGFibGVzLg0KLSAqIE1hcmtzIGFsbCBjdXJyZW50bHkgZGVmaW5lZCB0YWJsZXMgYXMgYWxyZWFkeSB3cml0dGVuIChpZiBzdXBwcmVzcykNCi0gKiBvciBub3Qgd3JpdHRlbiAoaWYgIXN1cHByZXNzKS4gIFRoaXMgd2lsbCBjb250cm9sIHdoZXRoZXIgdGhleSBnZXQgZW1pdHRlZA0KLSAqIGJ5IGEgc3Vic2VxdWVudCBqcGVnX3N0YXJ0X2NvbXByZXNzIGNhbGwuDQotICoNCi0gKiBUaGlzIHJvdXRpbmUgaXMgZXhwb3J0ZWQgZm9yIHVzZSBieSBhcHBsaWNhdGlvbnMgdGhhdCB3YW50IHRvIHByb2R1Y2UNCi0gKiBhYmJyZXZpYXRlZCBKUEVHIGRhdGFzdHJlYW1zLiAgSXQgbG9naWNhbGx5IGJlbG9uZ3MgaW4gamNwYXJhbS5jLCBidXQNCi0gKiBzaW5jZSBpdCBpcyBjYWxsZWQgYnkganBlZ19zdGFydF9jb21wcmVzcywgd2UgcHV0IGl0IGhlcmUgLS0tIG90aGVyd2lzZQ0KLSAqIGpjcGFyYW0ubyB3b3VsZCBiZSBsaW5rZWQgd2hldGhlciB0aGUgYXBwbGljYXRpb24gdXNlZCBpdCBvciBub3QuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotanBlZ19zdXBwcmVzc190YWJsZXMgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIHN1cHByZXNzKQ0KLXsNCi0gIGludCBpOw0KLSAgSlFVQU5UX1RCTCAqIHF0Ymw7DQotICBKSFVGRl9UQkwgKiBodGJsOw0KLQ0KLSAgZm9yIChpID0gMDsgaSA8IE5VTV9RVUFOVF9UQkxTOyBpKyspIHsNCi0gICAgaWYgKChxdGJsID0gY2luZm8tPnF1YW50X3RibF9wdHJzW2ldKSAhPSBOVUxMKQ0KLSAgICAgIHF0YmwtPnNlbnRfdGFibGUgPSBzdXBwcmVzczsNCi0gIH0NCi0NCi0gIGZvciAoaSA9IDA7IGkgPCBOVU1fSFVGRl9UQkxTOyBpKyspIHsNCi0gICAgaWYgKChodGJsID0gY2luZm8tPmRjX2h1ZmZfdGJsX3B0cnNbaV0pICE9IE5VTEwpDQotICAgICAgaHRibC0+c2VudF90YWJsZSA9IHN1cHByZXNzOw0KLSAgICBpZiAoKGh0YmwgPSBjaW5mby0+YWNfaHVmZl90YmxfcHRyc1tpXSkgIT0gTlVMTCkNCi0gICAgICBodGJsLT5zZW50X3RhYmxlID0gc3VwcHJlc3M7DQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogRmluaXNoIEpQRUcgY29tcHJlc3Npb24uDQotICoNCi0gKiBJZiBhIG11bHRpcGFzcyBvcGVyYXRpbmcgbW9kZSB3YXMgc2VsZWN0ZWQsIHRoaXMgbWF5IGRvIGEgZ3JlYXQgZGVhbCBvZg0KLSAqIHdvcmsgaW5jbHVkaW5nIG1vc3Qgb2YgdGhlIGFjdHVhbCBvdXRwdXQuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotanBlZ19maW5pc2hfY29tcHJlc3MgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIEpESU1FTlNJT04gaU1DVV9yb3c7DQotDQotICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSA9PSBDU1RBVEVfU0NBTk5JTkcgfHwNCi0gICAgICBjaW5mby0+Z2xvYmFsX3N0YXRlID09IENTVEFURV9SQVdfT0spIHsNCi0gICAgLyogVGVybWluYXRlIGZpcnN0IHBhc3MgKi8NCi0gICAgaWYgKGNpbmZvLT5uZXh0X3NjYW5saW5lIDwgY2luZm8tPmltYWdlX2hlaWdodCkNCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1RPT19MSVRUTEVfREFUQSk7DQotICAgICgqY2luZm8tPm1hc3Rlci0+ZmluaXNoX3Bhc3MpIChjaW5mbyk7DQotICB9IGVsc2UgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gQ1NUQVRFX1dSQ09FRlMpDQotICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7DQotICAvKiBQZXJmb3JtIGFueSByZW1haW5pbmcgcGFzc2VzICovDQotICB3aGlsZSAoISBjaW5mby0+bWFzdGVyLT5pc19sYXN0X3Bhc3MpIHsNCi0gICAgKCpjaW5mby0+bWFzdGVyLT5wcmVwYXJlX2Zvcl9wYXNzKSAoY2luZm8pOw0KLSAgICBmb3IgKGlNQ1Vfcm93ID0gMDsgaU1DVV9yb3cgPCBjaW5mby0+dG90YWxfaU1DVV9yb3dzOyBpTUNVX3JvdysrKSB7DQotICAgICAgaWYgKGNpbmZvLT5wcm9ncmVzcyAhPSBOVUxMKSB7DQotCWNpbmZvLT5wcm9ncmVzcy0+cGFzc19jb3VudGVyID0gKGxvbmcpIGlNQ1Vfcm93Ow0KLQljaW5mby0+cHJvZ3Jlc3MtPnBhc3NfbGltaXQgPSAobG9uZykgY2luZm8tPnRvdGFsX2lNQ1Vfcm93czsNCi0JKCpjaW5mby0+cHJvZ3Jlc3MtPnByb2dyZXNzX21vbml0b3IpICgoal9jb21tb25fcHRyKSBjaW5mbyk7DQotICAgICAgfQ0KLSAgICAgIC8qIFdlIGJ5cGFzcyB0aGUgbWFpbiBjb250cm9sbGVyIGFuZCBpbnZva2UgY29lZiBjb250cm9sbGVyIGRpcmVjdGx5Ow0KLSAgICAgICAqIGFsbCB3b3JrIGlzIGJlaW5nIGRvbmUgZnJvbSB0aGUgY29lZmZpY2llbnQgYnVmZmVyLg0KLSAgICAgICAqLw0KLSAgICAgIGlmICghICgqY2luZm8tPmNvZWYtPmNvbXByZXNzX2RhdGEpIChjaW5mbywgKEpTQU1QSU1BR0UpIE5VTEwpKQ0KLQlFUlJFWElUKGNpbmZvLCBKRVJSX0NBTlRfU1VTUEVORCk7DQotICAgIH0NCi0gICAgKCpjaW5mby0+bWFzdGVyLT5maW5pc2hfcGFzcykgKGNpbmZvKTsNCi0gIH0NCi0gIC8qIFdyaXRlIEVPSSwgZG8gZmluYWwgY2xlYW51cCAqLw0KLSAgKCpjaW5mby0+bWFya2VyLT53cml0ZV9maWxlX3RyYWlsZXIpIChjaW5mbyk7DQotICAoKmNpbmZvLT5kZXN0LT50ZXJtX2Rlc3RpbmF0aW9uKSAoY2luZm8pOw0KLSAgLyogV2UgY2FuIHVzZSBqcGVnX2Fib3J0IHRvIHJlbGVhc2UgbWVtb3J5IGFuZCByZXNldCBnbG9iYWxfc3RhdGUgKi8NCi0gIGpwZWdfYWJvcnQoKGpfY29tbW9uX3B0cikgY2luZm8pOw0KLX0NCi0NCi0NCi0vKg0KLSAqIFdyaXRlIGEgc3BlY2lhbCBtYXJrZXIuDQotICogVGhpcyBpcyBvbmx5IHJlY29tbWVuZGVkIGZvciB3cml0aW5nIENPTSBvciBBUFBuIG1hcmtlcnMuDQotICogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIganBlZ19zdGFydF9jb21wcmVzcygpIGFuZCBiZWZvcmUNCi0gKiBmaXJzdCBjYWxsIHRvIGpwZWdfd3JpdGVfc2NhbmxpbmVzKCkgb3IganBlZ193cml0ZV9yYXdfZGF0YSgpLg0KLSAqLw0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWpwZWdfd3JpdGVfbWFya2VyIChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IG1hcmtlciwNCi0JCSAgIGNvbnN0IEpPQ1RFVCAqZGF0YXB0ciwgdW5zaWduZWQgaW50IGRhdGFsZW4pDQotew0KLSAgSk1FVEhPRCh2b2lkLCB3cml0ZV9tYXJrZXJfYnl0ZSwgKGpfY29tcHJlc3NfcHRyIGluZm8sIGludCB2YWwpKTsNCi0NCi0gIGlmIChjaW5mby0+bmV4dF9zY2FubGluZSAhPSAwIHx8DQotICAgICAgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gQ1NUQVRFX1NDQU5OSU5HICYmDQotICAgICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gQ1NUQVRFX1JBV19PSyAmJg0KLSAgICAgICBjaW5mby0+Z2xvYmFsX3N0YXRlICE9IENTVEFURV9XUkNPRUZTKSkNCi0gICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsNCi0NCi0gICgqY2luZm8tPm1hcmtlci0+d3JpdGVfbWFya2VyX2hlYWRlcikgKGNpbmZvLCBtYXJrZXIsIGRhdGFsZW4pOw0KLSAgd3JpdGVfbWFya2VyX2J5dGUgPSBjaW5mby0+bWFya2VyLT53cml0ZV9tYXJrZXJfYnl0ZTsJLyogY29weSBmb3Igc3BlZWQgKi8NCi0gIHdoaWxlIChkYXRhbGVuLS0pIHsNCi0gICAgKCp3cml0ZV9tYXJrZXJfYnl0ZSkgKGNpbmZvLCAqZGF0YXB0cik7DQotICAgIGRhdGFwdHIrKzsNCi0gIH0NCi19DQotDQotLyogU2FtZSwgYnV0IHBpZWNlbWVhbC4gKi8NCi0NCi1HTE9CQUwodm9pZCkNCi1qcGVnX3dyaXRlX21faGVhZGVyIChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IG1hcmtlciwgdW5zaWduZWQgaW50IGRhdGFsZW4pDQotew0KLSAgaWYgKGNpbmZvLT5uZXh0X3NjYW5saW5lICE9IDAgfHwNCi0gICAgICAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBDU1RBVEVfU0NBTk5JTkcgJiYNCi0gICAgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBDU1RBVEVfUkFXX09LICYmDQotICAgICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gQ1NUQVRFX1dSQ09FRlMpKQ0KLSAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOw0KLQ0KLSAgKCpjaW5mby0+bWFya2VyLT53cml0ZV9tYXJrZXJfaGVhZGVyKSAoY2luZm8sIG1hcmtlciwgZGF0YWxlbik7DQotfQ0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWpwZWdfd3JpdGVfbV9ieXRlIChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IHZhbCkNCi17DQotICAoKmNpbmZvLT5tYXJrZXItPndyaXRlX21hcmtlcl9ieXRlKSAoY2luZm8sIHZhbCk7DQotfQ0KLQ0KLQ0KLS8qDQotICogQWx0ZXJuYXRlIGNvbXByZXNzaW9uIGZ1bmN0aW9uOiBqdXN0IHdyaXRlIGFuIGFiYnJldmlhdGVkIHRhYmxlIGZpbGUuDQotICogQmVmb3JlIGNhbGxpbmcgdGhpcywgYWxsIHBhcmFtZXRlcnMgYW5kIGEgZGF0YSBkZXN0aW5hdGlvbiBtdXN0IGJlIHNldCB1cC4NCi0gKg0KLSAqIFRvIHByb2R1Y2UgYSBwYWlyIG9mIGZpbGVzIGNvbnRhaW5pbmcgYWJicmV2aWF0ZWQgdGFibGVzIGFuZCBhYmJyZXZpYXRlZA0KLSAqIGltYWdlIGRhdGEsIG9uZSB3b3VsZCBwcm9jZWVkIGFzIGZvbGxvd3M6DQotICoNCi0gKgkJaW5pdGlhbGl6ZSBKUEVHIG9iamVjdA0KLSAqCQlzZXQgSlBFRyBwYXJhbWV0ZXJzDQotICoJCXNldCBkZXN0aW5hdGlvbiB0byB0YWJsZSBmaWxlDQotICoJCWpwZWdfd3JpdGVfdGFibGVzKGNpbmZvKTsNCi0gKgkJc2V0IGRlc3RpbmF0aW9uIHRvIGltYWdlIGZpbGUNCi0gKgkJanBlZ19zdGFydF9jb21wcmVzcyhjaW5mbywgRkFMU0UpOw0KLSAqCQl3cml0ZSBkYXRhLi4uDQotICoJCWpwZWdfZmluaXNoX2NvbXByZXNzKGNpbmZvKTsNCi0gKg0KLSAqIGpwZWdfd3JpdGVfdGFibGVzIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YgbWFya2luZyBhbGwgdGFibGVzIHdyaXR0ZW4NCi0gKiAoc2FtZSBhcyBqcGVnX3N1cHByZXNzX3RhYmxlcyguLi4sIFRSVUUpKS4gIFRodXMgYSBzdWJzZXF1ZW50IHN0YXJ0X2NvbXByZXNzDQotICogd2lsbCBub3QgcmUtZW1pdCB0aGUgdGFibGVzIHVubGVzcyBpdCBpcyBwYXNzZWQgd3JpdGVfYWxsX3RhYmxlcz1UUlVFLg0KLSAqLw0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWpwZWdfd3JpdGVfdGFibGVzIChqX2NvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBDU1RBVEVfU1RBUlQpDQotICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7DQotDQotICAvKiAoUmUpaW5pdGlhbGl6ZSBlcnJvciBtZ3IgYW5kIGRlc3RpbmF0aW9uIG1vZHVsZXMgKi8NCi0gICgqY2luZm8tPmVyci0+cmVzZXRfZXJyb3JfbWdyKSAoKGpfY29tbW9uX3B0cikgY2luZm8pOw0KLSAgKCpjaW5mby0+ZGVzdC0+aW5pdF9kZXN0aW5hdGlvbikgKGNpbmZvKTsNCi0gIC8qIEluaXRpYWxpemUgdGhlIG1hcmtlciB3cml0ZXIgLi4uIGJpdCBvZiBhIGNyb2NrIHRvIGRvIGl0IGhlcmUuICovDQotICBqaW5pdF9tYXJrZXJfd3JpdGVyKGNpbmZvKTsNCi0gIC8qIFdyaXRlIHRoZW0gdGFibGVzISAqLw0KLSAgKCpjaW5mby0+bWFya2VyLT53cml0ZV90YWJsZXNfb25seSkgKGNpbmZvKTsNCi0gIC8qIEFuZCBjbGVhbiB1cC4gKi8NCi0gICgqY2luZm8tPmRlc3QtPnRlcm1fZGVzdGluYXRpb24pIChjaW5mbyk7DQotICAvKg0KLSAgICogSW4gbGlicmFyeSByZWxlYXNlcyB1cCB0aHJvdWdoIHY2YSwgd2UgY2FsbGVkIGpwZWdfYWJvcnQoKSBoZXJlIHRvIGZyZWUNCi0gICAqIGFueSB3b3JraW5nIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlIGRlc3RpbmF0aW9uIG1hbmFnZXIgYW5kIG1hcmtlcg0KLSAgICogd3JpdGVyLiAgU29tZSBhcHBsaWNhdGlvbnMgaGFkIGEgcHJvYmxlbSB3aXRoIHRoYXQ6IHRoZXkgYWxsb2NhdGVkIHNwYWNlDQotICAgKiBvZiB0aGVpciBvd24gZnJvbSB0aGUgbGlicmFyeSBtZW1vcnkgbWFuYWdlciwgYW5kIGRpZG4ndCB3YW50IGl0IHRvIGdvDQotICAgKiBhd2F5IGR1cmluZyB3cml0ZV90YWJsZXMuICBTbyBub3cgd2UgZG8gbm90aGluZy4gIFRoaXMgd2lsbCBjYXVzZSBhDQotICAgKiBtZW1vcnkgbGVhayBpZiBhbiBhcHAgY2FsbHMgd3JpdGVfdGFibGVzIHJlcGVhdGVkbHkgd2l0aG91dCBkb2luZyBhIGZ1bGwNCi0gICAqIGNvbXByZXNzaW9uIGN5Y2xlIG9yIG90aGVyd2lzZSByZXNldHRpbmcgdGhlIEpQRUcgb2JqZWN0LiAgSG93ZXZlciwgdGhhdA0KLSAgICogc2VlbXMgbGVzcyBiYWQgdGhhbiB1bmV4cGVjdGVkbHkgZnJlZWluZyBtZW1vcnkgaW4gdGhlIG5vcm1hbCBjYXNlLg0KLSAgICogQW4gYXBwIHRoYXQgcHJlZmVycyB0aGUgb2xkIGJlaGF2aW9yIGNhbiBjYWxsIGpwZWdfYWJvcnQgZm9yIGl0c2VsZiBhZnRlcg0KLSAgICogZWFjaCBjYWxsIHRvIGpwZWdfd3JpdGVfdGFibGVzKCkuDQotICAgKi8NCi19DQotDQotI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fDQorI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykKKy8qCisgKiBqY2FwaW1pbi5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTgsIFRob21hcyBHLiBMYW5lLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYXBwbGljYXRpb24gaW50ZXJmYWNlIGNvZGUgZm9yIHRoZSBjb21wcmVzc2lvbiBoYWxmCisgKiBvZiB0aGUgSlBFRyBsaWJyYXJ5LiAgVGhlc2UgYXJlIHRoZSAibWluaW11bSIgQVBJIHJvdXRpbmVzIHRoYXQgbWF5IGJlCisgKiBuZWVkZWQgaW4gZWl0aGVyIHRoZSBub3JtYWwgZnVsbC1jb21wcmVzc2lvbiBjYXNlIG9yIHRoZSB0cmFuc2NvZGluZy1vbmx5CisgKiBjYXNlLgorICoKKyAqIE1vc3Qgb2YgdGhlIHJvdXRpbmVzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBkaXJlY3RseSBieSBhbiBhcHBsaWNhdGlvbgorICogYXJlIGluIHRoaXMgZmlsZSBvciBpbiBqY2FwaXN0ZC5jLiAgQnV0IGFsc28gc2VlIGpjcGFyYW0uYyBmb3IKKyAqIHBhcmFtZXRlci1zZXR1cCBoZWxwZXIgcm91dGluZXMsIGpjb21hcGkuYyBmb3Igcm91dGluZXMgc2hhcmVkIGJ5CisgKiBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiwgYW5kIGpjdHJhbnMuYyBmb3IgdGhlIHRyYW5zY29kaW5nIGNhc2UuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorCisKKy8qCisgKiBJbml0aWFsaXphdGlvbiBvZiBhIEpQRUcgY29tcHJlc3Npb24gb2JqZWN0LgorICogVGhlIGVycm9yIG1hbmFnZXIgbXVzdCBhbHJlYWR5IGJlIHNldCB1cCAoaW4gY2FzZSBtZW1vcnkgbWFuYWdlciBmYWlscykuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX0NyZWF0ZUNvbXByZXNzIChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IHZlcnNpb24sIHNpemVfdCBzdHJ1Y3RzaXplKQoreworICBpbnQgaTsKKworICAvKiBHdWFyZCBhZ2FpbnN0IHZlcnNpb24gbWlzbWF0Y2hlcyBiZXR3ZWVuIGxpYnJhcnkgYW5kIGNhbGxlci4gKi8KKyAgY2luZm8tPm1lbSA9IE5VTEw7CQkvKiBzbyBqcGVnX2Rlc3Ryb3kga25vd3MgbWVtIG1nciBub3QgY2FsbGVkICovCisgIGlmICh2ZXJzaW9uICE9IEpQRUdfTElCX1ZFUlNJT04pCisgICAgRVJSRVhJVDIoY2luZm8sIEpFUlJfQkFEX0xJQl9WRVJTSU9OLCBKUEVHX0xJQl9WRVJTSU9OLCB2ZXJzaW9uKTsKKyAgaWYgKHN0cnVjdHNpemUgIT0gU0laRU9GKHN0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCkpCisgICAgRVJSRVhJVDIoY2luZm8sIEpFUlJfQkFEX1NUUlVDVF9TSVpFLCAKKwkgICAgIChpbnQpIFNJWkVPRihzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3QpLCAoaW50KSBzdHJ1Y3RzaXplKTsKKworICAvKiBGb3IgZGVidWdnaW5nIHB1cnBvc2VzLCB3ZSB6ZXJvIHRoZSB3aG9sZSBtYXN0ZXIgc3RydWN0dXJlLgorICAgKiBCdXQgdGhlIGFwcGxpY2F0aW9uIGhhcyBhbHJlYWR5IHNldCB0aGUgZXJyIHBvaW50ZXIsIGFuZCBtYXkgaGF2ZSBzZXQKKyAgICogY2xpZW50X2RhdGEsIHNvIHdlIGhhdmUgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aG9zZSBmaWVsZHMuCisgICAqIE5vdGU6IGlmIGFwcGxpY2F0aW9uIGhhc24ndCBzZXQgY2xpZW50X2RhdGEsIHRvb2xzIGxpa2UgUHVyaWZ5IG1heQorICAgKiBjb21wbGFpbiBoZXJlLgorICAgKi8KKyAgeworICAgIHN0cnVjdCBqcGVnX2Vycm9yX21nciAqIGVyciA9IGNpbmZvLT5lcnI7CisgICAgdm9pZCAqIGNsaWVudF9kYXRhID0gY2luZm8tPmNsaWVudF9kYXRhOyAvKiBpZ25vcmUgUHVyaWZ5IGNvbXBsYWludCBoZXJlICovCisgICAgTUVNWkVSTyhjaW5mbywgU0laRU9GKHN0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCkpOworICAgIGNpbmZvLT5lcnIgPSBlcnI7CisgICAgY2luZm8tPmNsaWVudF9kYXRhID0gY2xpZW50X2RhdGE7CisgIH0KKyAgY2luZm8tPmlzX2RlY29tcHJlc3NvciA9IEZBTFNFOworCisgIC8qIEluaXRpYWxpemUgYSBtZW1vcnkgbWFuYWdlciBpbnN0YW5jZSBmb3IgdGhpcyBvYmplY3QgKi8KKyAgamluaXRfbWVtb3J5X21ncigoal9jb21tb25fcHRyKSBjaW5mbyk7CisKKyAgLyogWmVybyBvdXQgcG9pbnRlcnMgdG8gcGVybWFuZW50IHN0cnVjdHVyZXMuICovCisgIGNpbmZvLT5wcm9ncmVzcyA9IE5VTEw7CisgIGNpbmZvLT5kZXN0ID0gTlVMTDsKKworICBjaW5mby0+Y29tcF9pbmZvID0gTlVMTDsKKworICBmb3IgKGkgPSAwOyBpIDwgTlVNX1FVQU5UX1RCTFM7IGkrKykKKyAgICBjaW5mby0+cXVhbnRfdGJsX3B0cnNbaV0gPSBOVUxMOworCisgIGZvciAoaSA9IDA7IGkgPCBOVU1fSFVGRl9UQkxTOyBpKyspIHsKKyAgICBjaW5mby0+ZGNfaHVmZl90YmxfcHRyc1tpXSA9IE5VTEw7CisgICAgY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbaV0gPSBOVUxMOworICB9CisKKyAgY2luZm8tPnNjcmlwdF9zcGFjZSA9IE5VTEw7CisKKyAgY2luZm8tPmlucHV0X2dhbW1hID0gMS4wOwkvKiBpbiBjYXNlIGFwcGxpY2F0aW9uIGZvcmdldHMgKi8KKworICAvKiBPSywgSSdtIHJlYWR5ICovCisgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBDU1RBVEVfU1RBUlQ7Cit9CisKKworLyoKKyAqIERlc3RydWN0aW9uIG9mIGEgSlBFRyBjb21wcmVzc2lvbiBvYmplY3QKKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfZGVzdHJveV9jb21wcmVzcyAoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIGpwZWdfZGVzdHJveSgoal9jb21tb25fcHRyKSBjaW5mbyk7IC8qIHVzZSBjb21tb24gcm91dGluZSAqLworfQorCisKKy8qCisgKiBBYm9ydCBwcm9jZXNzaW5nIG9mIGEgSlBFRyBjb21wcmVzc2lvbiBvcGVyYXRpb24sCisgKiBidXQgZG9uJ3QgZGVzdHJveSB0aGUgb2JqZWN0IGl0c2VsZi4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfYWJvcnRfY29tcHJlc3MgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBqcGVnX2Fib3J0KChqX2NvbW1vbl9wdHIpIGNpbmZvKTsgLyogdXNlIGNvbW1vbiByb3V0aW5lICovCit9CisKKworLyoKKyAqIEZvcmNpYmx5IHN1cHByZXNzIG9yIHVuLXN1cHByZXNzIGFsbCBxdWFudGl6YXRpb24gYW5kIEh1ZmZtYW4gdGFibGVzLgorICogTWFya3MgYWxsIGN1cnJlbnRseSBkZWZpbmVkIHRhYmxlcyBhcyBhbHJlYWR5IHdyaXR0ZW4gKGlmIHN1cHByZXNzKQorICogb3Igbm90IHdyaXR0ZW4gKGlmICFzdXBwcmVzcykuICBUaGlzIHdpbGwgY29udHJvbCB3aGV0aGVyIHRoZXkgZ2V0IGVtaXR0ZWQKKyAqIGJ5IGEgc3Vic2VxdWVudCBqcGVnX3N0YXJ0X2NvbXByZXNzIGNhbGwuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGV4cG9ydGVkIGZvciB1c2UgYnkgYXBwbGljYXRpb25zIHRoYXQgd2FudCB0byBwcm9kdWNlCisgKiBhYmJyZXZpYXRlZCBKUEVHIGRhdGFzdHJlYW1zLiAgSXQgbG9naWNhbGx5IGJlbG9uZ3MgaW4gamNwYXJhbS5jLCBidXQKKyAqIHNpbmNlIGl0IGlzIGNhbGxlZCBieSBqcGVnX3N0YXJ0X2NvbXByZXNzLCB3ZSBwdXQgaXQgaGVyZSAtLS0gb3RoZXJ3aXNlCisgKiBqY3BhcmFtLm8gd291bGQgYmUgbGlua2VkIHdoZXRoZXIgdGhlIGFwcGxpY2F0aW9uIHVzZWQgaXQgb3Igbm90LgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19zdXBwcmVzc190YWJsZXMgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIHN1cHByZXNzKQoreworICBpbnQgaTsKKyAgSlFVQU5UX1RCTCAqIHF0Ymw7CisgIEpIVUZGX1RCTCAqIGh0Ymw7CisKKyAgZm9yIChpID0gMDsgaSA8IE5VTV9RVUFOVF9UQkxTOyBpKyspIHsKKyAgICBpZiAoKHF0YmwgPSBjaW5mby0+cXVhbnRfdGJsX3B0cnNbaV0pICE9IE5VTEwpCisgICAgICBxdGJsLT5zZW50X3RhYmxlID0gc3VwcHJlc3M7CisgIH0KKworICBmb3IgKGkgPSAwOyBpIDwgTlVNX0hVRkZfVEJMUzsgaSsrKSB7CisgICAgaWYgKChodGJsID0gY2luZm8tPmRjX2h1ZmZfdGJsX3B0cnNbaV0pICE9IE5VTEwpCisgICAgICBodGJsLT5zZW50X3RhYmxlID0gc3VwcHJlc3M7CisgICAgaWYgKChodGJsID0gY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbaV0pICE9IE5VTEwpCisgICAgICBodGJsLT5zZW50X3RhYmxlID0gc3VwcHJlc3M7CisgIH0KK30KKworCisvKgorICogRmluaXNoIEpQRUcgY29tcHJlc3Npb24uCisgKgorICogSWYgYSBtdWx0aXBhc3Mgb3BlcmF0aW5nIG1vZGUgd2FzIHNlbGVjdGVkLCB0aGlzIG1heSBkbyBhIGdyZWF0IGRlYWwgb2YKKyAqIHdvcmsgaW5jbHVkaW5nIG1vc3Qgb2YgdGhlIGFjdHVhbCBvdXRwdXQuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2ZpbmlzaF9jb21wcmVzcyAoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIEpESU1FTlNJT04gaU1DVV9yb3c7CisKKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgPT0gQ1NUQVRFX1NDQU5OSU5HIHx8CisgICAgICBjaW5mby0+Z2xvYmFsX3N0YXRlID09IENTVEFURV9SQVdfT0spIHsKKyAgICAvKiBUZXJtaW5hdGUgZmlyc3QgcGFzcyAqLworICAgIGlmIChjaW5mby0+bmV4dF9zY2FubGluZSA8IGNpbmZvLT5pbWFnZV9oZWlnaHQpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1RPT19MSVRUTEVfREFUQSk7CisgICAgKCpjaW5mby0+bWFzdGVyLT5maW5pc2hfcGFzcykgKGNpbmZvKTsKKyAgfSBlbHNlIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IENTVEFURV9XUkNPRUZTKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CisgIC8qIFBlcmZvcm0gYW55IHJlbWFpbmluZyBwYXNzZXMgKi8KKyAgd2hpbGUgKCEgY2luZm8tPm1hc3Rlci0+aXNfbGFzdF9wYXNzKSB7CisgICAgKCpjaW5mby0+bWFzdGVyLT5wcmVwYXJlX2Zvcl9wYXNzKSAoY2luZm8pOworICAgIGZvciAoaU1DVV9yb3cgPSAwOyBpTUNVX3JvdyA8IGNpbmZvLT50b3RhbF9pTUNVX3Jvd3M7IGlNQ1Vfcm93KyspIHsKKyAgICAgIGlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCkgeworCWNpbmZvLT5wcm9ncmVzcy0+cGFzc19jb3VudGVyID0gKGxvbmcpIGlNQ1Vfcm93OworCWNpbmZvLT5wcm9ncmVzcy0+cGFzc19saW1pdCA9IChsb25nKSBjaW5mby0+dG90YWxfaU1DVV9yb3dzOworCSgqY2luZm8tPnByb2dyZXNzLT5wcm9ncmVzc19tb25pdG9yKSAoKGpfY29tbW9uX3B0cikgY2luZm8pOworICAgICAgfQorICAgICAgLyogV2UgYnlwYXNzIHRoZSBtYWluIGNvbnRyb2xsZXIgYW5kIGludm9rZSBjb2VmIGNvbnRyb2xsZXIgZGlyZWN0bHk7CisgICAgICAgKiBhbGwgd29yayBpcyBiZWluZyBkb25lIGZyb20gdGhlIGNvZWZmaWNpZW50IGJ1ZmZlci4KKyAgICAgICAqLworICAgICAgaWYgKCEgKCpjaW5mby0+Y29lZi0+Y29tcHJlc3NfZGF0YSkgKGNpbmZvLCAoSlNBTVBJTUFHRSkgTlVMTCkpCisJRVJSRVhJVChjaW5mbywgSkVSUl9DQU5UX1NVU1BFTkQpOworICAgIH0KKyAgICAoKmNpbmZvLT5tYXN0ZXItPmZpbmlzaF9wYXNzKSAoY2luZm8pOworICB9CisgIC8qIFdyaXRlIEVPSSwgZG8gZmluYWwgY2xlYW51cCAqLworICAoKmNpbmZvLT5tYXJrZXItPndyaXRlX2ZpbGVfdHJhaWxlcikgKGNpbmZvKTsKKyAgKCpjaW5mby0+ZGVzdC0+dGVybV9kZXN0aW5hdGlvbikgKGNpbmZvKTsKKyAgLyogV2UgY2FuIHVzZSBqcGVnX2Fib3J0IHRvIHJlbGVhc2UgbWVtb3J5IGFuZCByZXNldCBnbG9iYWxfc3RhdGUgKi8KKyAganBlZ19hYm9ydCgoal9jb21tb25fcHRyKSBjaW5mbyk7Cit9CisKKworLyoKKyAqIFdyaXRlIGEgc3BlY2lhbCBtYXJrZXIuCisgKiBUaGlzIGlzIG9ubHkgcmVjb21tZW5kZWQgZm9yIHdyaXRpbmcgQ09NIG9yIEFQUG4gbWFya2Vycy4KKyAqIE11c3QgYmUgY2FsbGVkIGFmdGVyIGpwZWdfc3RhcnRfY29tcHJlc3MoKSBhbmQgYmVmb3JlCisgKiBmaXJzdCBjYWxsIHRvIGpwZWdfd3JpdGVfc2NhbmxpbmVzKCkgb3IganBlZ193cml0ZV9yYXdfZGF0YSgpLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ193cml0ZV9tYXJrZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyLAorCQkgICBjb25zdCBKT0NURVQgKmRhdGFwdHIsIHVuc2lnbmVkIGludCBkYXRhbGVuKQoreworICBKTUVUSE9EKHZvaWQsIHdyaXRlX21hcmtlcl9ieXRlLCAoal9jb21wcmVzc19wdHIgaW5mbywgaW50IHZhbCkpOworCisgIGlmIChjaW5mby0+bmV4dF9zY2FubGluZSAhPSAwIHx8CisgICAgICAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBDU1RBVEVfU0NBTk5JTkcgJiYKKyAgICAgICBjaW5mby0+Z2xvYmFsX3N0YXRlICE9IENTVEFURV9SQVdfT0sgJiYKKyAgICAgICBjaW5mby0+Z2xvYmFsX3N0YXRlICE9IENTVEFURV9XUkNPRUZTKSkKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOworCisgICgqY2luZm8tPm1hcmtlci0+d3JpdGVfbWFya2VyX2hlYWRlcikgKGNpbmZvLCBtYXJrZXIsIGRhdGFsZW4pOworICB3cml0ZV9tYXJrZXJfYnl0ZSA9IGNpbmZvLT5tYXJrZXItPndyaXRlX21hcmtlcl9ieXRlOwkvKiBjb3B5IGZvciBzcGVlZCAqLworICB3aGlsZSAoZGF0YWxlbi0tKSB7CisgICAgKCp3cml0ZV9tYXJrZXJfYnl0ZSkgKGNpbmZvLCAqZGF0YXB0cik7CisgICAgZGF0YXB0cisrOworICB9Cit9CisKKy8qIFNhbWUsIGJ1dCBwaWVjZW1lYWwuICovCisKK0dMT0JBTCh2b2lkKQoranBlZ193cml0ZV9tX2hlYWRlciAoal9jb21wcmVzc19wdHIgY2luZm8sIGludCBtYXJrZXIsIHVuc2lnbmVkIGludCBkYXRhbGVuKQoreworICBpZiAoY2luZm8tPm5leHRfc2NhbmxpbmUgIT0gMCB8fAorICAgICAgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gQ1NUQVRFX1NDQU5OSU5HICYmCisgICAgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBDU1RBVEVfUkFXX09LICYmCisgICAgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBDU1RBVEVfV1JDT0VGUykpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKKworICAoKmNpbmZvLT5tYXJrZXItPndyaXRlX21hcmtlcl9oZWFkZXIpIChjaW5mbywgbWFya2VyLCBkYXRhbGVuKTsKK30KKworR0xPQkFMKHZvaWQpCitqcGVnX3dyaXRlX21fYnl0ZSAoal9jb21wcmVzc19wdHIgY2luZm8sIGludCB2YWwpCit7CisgICgqY2luZm8tPm1hcmtlci0+d3JpdGVfbWFya2VyX2J5dGUpIChjaW5mbywgdmFsKTsKK30KKworCisvKgorICogQWx0ZXJuYXRlIGNvbXByZXNzaW9uIGZ1bmN0aW9uOiBqdXN0IHdyaXRlIGFuIGFiYnJldmlhdGVkIHRhYmxlIGZpbGUuCisgKiBCZWZvcmUgY2FsbGluZyB0aGlzLCBhbGwgcGFyYW1ldGVycyBhbmQgYSBkYXRhIGRlc3RpbmF0aW9uIG11c3QgYmUgc2V0IHVwLgorICoKKyAqIFRvIHByb2R1Y2UgYSBwYWlyIG9mIGZpbGVzIGNvbnRhaW5pbmcgYWJicmV2aWF0ZWQgdGFibGVzIGFuZCBhYmJyZXZpYXRlZAorICogaW1hZ2UgZGF0YSwgb25lIHdvdWxkIHByb2NlZWQgYXMgZm9sbG93czoKKyAqCisgKgkJaW5pdGlhbGl6ZSBKUEVHIG9iamVjdAorICoJCXNldCBKUEVHIHBhcmFtZXRlcnMKKyAqCQlzZXQgZGVzdGluYXRpb24gdG8gdGFibGUgZmlsZQorICoJCWpwZWdfd3JpdGVfdGFibGVzKGNpbmZvKTsKKyAqCQlzZXQgZGVzdGluYXRpb24gdG8gaW1hZ2UgZmlsZQorICoJCWpwZWdfc3RhcnRfY29tcHJlc3MoY2luZm8sIEZBTFNFKTsKKyAqCQl3cml0ZSBkYXRhLi4uCisgKgkJanBlZ19maW5pc2hfY29tcHJlc3MoY2luZm8pOworICoKKyAqIGpwZWdfd3JpdGVfdGFibGVzIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YgbWFya2luZyBhbGwgdGFibGVzIHdyaXR0ZW4KKyAqIChzYW1lIGFzIGpwZWdfc3VwcHJlc3NfdGFibGVzKC4uLiwgVFJVRSkpLiAgVGh1cyBhIHN1YnNlcXVlbnQgc3RhcnRfY29tcHJlc3MKKyAqIHdpbGwgbm90IHJlLWVtaXQgdGhlIHRhYmxlcyB1bmxlc3MgaXQgaXMgcGFzc2VkIHdyaXRlX2FsbF90YWJsZXM9VFJVRS4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfd3JpdGVfdGFibGVzIChqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gQ1NUQVRFX1NUQVJUKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CisKKyAgLyogKFJlKWluaXRpYWxpemUgZXJyb3IgbWdyIGFuZCBkZXN0aW5hdGlvbiBtb2R1bGVzICovCisgICgqY2luZm8tPmVyci0+cmVzZXRfZXJyb3JfbWdyKSAoKGpfY29tbW9uX3B0cikgY2luZm8pOworICAoKmNpbmZvLT5kZXN0LT5pbml0X2Rlc3RpbmF0aW9uKSAoY2luZm8pOworICAvKiBJbml0aWFsaXplIHRoZSBtYXJrZXIgd3JpdGVyIC4uLiBiaXQgb2YgYSBjcm9jayB0byBkbyBpdCBoZXJlLiAqLworICBqaW5pdF9tYXJrZXJfd3JpdGVyKGNpbmZvKTsKKyAgLyogV3JpdGUgdGhlbSB0YWJsZXMhICovCisgICgqY2luZm8tPm1hcmtlci0+d3JpdGVfdGFibGVzX29ubHkpIChjaW5mbyk7CisgIC8qIEFuZCBjbGVhbiB1cC4gKi8KKyAgKCpjaW5mby0+ZGVzdC0+dGVybV9kZXN0aW5hdGlvbikgKGNpbmZvKTsKKyAgLyoKKyAgICogSW4gbGlicmFyeSByZWxlYXNlcyB1cCB0aHJvdWdoIHY2YSwgd2UgY2FsbGVkIGpwZWdfYWJvcnQoKSBoZXJlIHRvIGZyZWUKKyAgICogYW55IHdvcmtpbmcgbWVtb3J5IGFsbG9jYXRlZCBieSB0aGUgZGVzdGluYXRpb24gbWFuYWdlciBhbmQgbWFya2VyCisgICAqIHdyaXRlci4gIFNvbWUgYXBwbGljYXRpb25zIGhhZCBhIHByb2JsZW0gd2l0aCB0aGF0OiB0aGV5IGFsbG9jYXRlZCBzcGFjZQorICAgKiBvZiB0aGVpciBvd24gZnJvbSB0aGUgbGlicmFyeSBtZW1vcnkgbWFuYWdlciwgYW5kIGRpZG4ndCB3YW50IGl0IHRvIGdvCisgICAqIGF3YXkgZHVyaW5nIHdyaXRlX3RhYmxlcy4gIFNvIG5vdyB3ZSBkbyBub3RoaW5nLiAgVGhpcyB3aWxsIGNhdXNlIGEKKyAgICogbWVtb3J5IGxlYWsgaWYgYW4gYXBwIGNhbGxzIHdyaXRlX3RhYmxlcyByZXBlYXRlZGx5IHdpdGhvdXQgZG9pbmcgYSBmdWxsCisgICAqIGNvbXByZXNzaW9uIGN5Y2xlIG9yIG90aGVyd2lzZSByZXNldHRpbmcgdGhlIEpQRUcgb2JqZWN0LiAgSG93ZXZlciwgdGhhdAorICAgKiBzZWVtcyBsZXNzIGJhZCB0aGFuIHVuZXhwZWN0ZWRseSBmcmVlaW5nIG1lbW9yeSBpbiB0aGUgbm9ybWFsIGNhc2UuCisgICAqIEFuIGFwcCB0aGF0IHByZWZlcnMgdGhlIG9sZCBiZWhhdmlvciBjYW4gY2FsbCBqcGVnX2Fib3J0IGZvciBpdHNlbGYgYWZ0ZXIKKyAgICogZWFjaCBjYWxsIHRvIGpwZWdfd3JpdGVfdGFibGVzKCkuCisgICAqLworfQorCisjZW5kaWYgLy9fRlhfSlBFR19UVVJCT18KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pjYXBpc3RkLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY2FwaXN0ZC5jCmluZGV4IGJmMTM1NDIuLjlkNzY1ZTYgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pjYXBpc3RkLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamNhcGlzdGQuYwpAQCAtMSwxNjQgKzEsMTY0IEBACi0jaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQ0KLS8qDQotICogamNhcGlzdGQuYw0KLSAqDQotICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLg0KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuDQotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLg0KLSAqDQotICogVGhpcyBmaWxlIGNvbnRhaW5zIGFwcGxpY2F0aW9uIGludGVyZmFjZSBjb2RlIGZvciB0aGUgY29tcHJlc3Npb24gaGFsZg0KLSAqIG9mIHRoZSBKUEVHIGxpYnJhcnkuICBUaGVzZSBhcmUgdGhlICJzdGFuZGFyZCIgQVBJIHJvdXRpbmVzIHRoYXQgYXJlDQotICogdXNlZCBpbiB0aGUgbm9ybWFsIGZ1bGwtY29tcHJlc3Npb24gY2FzZS4gIFRoZXkgYXJlIG5vdCB1c2VkIGJ5IGENCi0gKiB0cmFuc2NvZGluZy1vbmx5IGFwcGxpY2F0aW9uLiAgTm90ZSB0aGF0IGlmIGFuIGFwcGxpY2F0aW9uIGxpbmtzIGluDQotICoganBlZ19zdGFydF9jb21wcmVzcywgaXQgd2lsbCBlbmQgdXAgbGlua2luZyBpbiB0aGUgZW50aXJlIGNvbXByZXNzb3IuDQotICogV2UgdGh1cyBtdXN0IHNlcGFyYXRlIHRoaXMgZmlsZSBmcm9tIGpjYXBpbWluLmMgdG8gYXZvaWQgbGlua2luZyB0aGUNCi0gKiB3aG9sZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGludG8gYSB0cmFuc2NvZGVyLg0KLSAqLw0KLQ0KLSNkZWZpbmUgSlBFR19JTlRFUk5BTFMNCi0jaW5jbHVkZSAiamluY2x1ZGUuaCINCi0jaW5jbHVkZSAianBlZ2xpYi5oIg0KLQ0KLQ0KLS8qDQotICogQ29tcHJlc3Npb24gaW5pdGlhbGl6YXRpb24uDQotICogQmVmb3JlIGNhbGxpbmcgdGhpcywgYWxsIHBhcmFtZXRlcnMgYW5kIGEgZGF0YSBkZXN0aW5hdGlvbiBtdXN0IGJlIHNldCB1cC4NCi0gKg0KLSAqIFdlIHJlcXVpcmUgYSB3cml0ZV9hbGxfdGFibGVzIHBhcmFtZXRlciBhcyBhIGZhaWxzYWZlIGNoZWNrIHdoZW4gd3JpdGluZw0KLSAqIG11bHRpcGxlIGRhdGFzdHJlYW1zIGZyb20gdGhlIHNhbWUgY29tcHJlc3Npb24gb2JqZWN0LiAgU2luY2UgcHJpb3IgcnVucw0KLSAqIHdpbGwgaGF2ZSBsZWZ0IGFsbCB0aGUgdGFibGVzIG1hcmtlZCBzZW50X3RhYmxlPVRSVUUsIGEgc3Vic2VxdWVudCBydW4NCi0gKiB3b3VsZCBlbWl0IGFuIGFiYnJldmlhdGVkIHN0cmVhbSAobm8gdGFibGVzKSBieSBkZWZhdWx0LiAgVGhpcyBtYXkgYmUgd2hhdA0KLSAqIGlzIHdhbnRlZCwgYnV0IGZvciBzYWZldHkncyBzYWtlIGl0IHNob3VsZCBub3QgYmUgdGhlIGRlZmF1bHQgYmVoYXZpb3I6DQotICogcHJvZ3JhbW1lcnMgc2hvdWxkIGhhdmUgdG8gbWFrZSBhIGRlbGliZXJhdGUgY2hvaWNlIHRvIGVtaXQgYWJicmV2aWF0ZWQNCi0gKiBpbWFnZXMuICBUaGVyZWZvcmUgdGhlIGRvY3VtZW50YXRpb24gYW5kIGV4YW1wbGVzIHNob3VsZCBlbmNvdXJhZ2UgcGVvcGxlDQotICogdG8gcGFzcyB3cml0ZV9hbGxfdGFibGVzPVRSVUU7IHRoZW4gaXQgd2lsbCB0YWtlIGFjdGl2ZSB0aG91Z2h0IHRvIGRvIHRoZQ0KLSAqIHdyb25nIHRoaW5nLg0KLSAqLw0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWpwZWdfc3RhcnRfY29tcHJlc3MgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIHdyaXRlX2FsbF90YWJsZXMpDQotew0KLSAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gQ1NUQVRFX1NUQVJUKQ0KLSAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOw0KLQ0KLSAgaWYgKHdyaXRlX2FsbF90YWJsZXMpDQotICAgIGpwZWdfc3VwcHJlc3NfdGFibGVzKGNpbmZvLCBGQUxTRSk7CS8qIG1hcmsgYWxsIHRhYmxlcyB0byBiZSB3cml0dGVuICovDQotDQotICAvKiAoUmUpaW5pdGlhbGl6ZSBlcnJvciBtZ3IgYW5kIGRlc3RpbmF0aW9uIG1vZHVsZXMgKi8NCi0gICgqY2luZm8tPmVyci0+cmVzZXRfZXJyb3JfbWdyKSAoKGpfY29tbW9uX3B0cikgY2luZm8pOw0KLSAgKCpjaW5mby0+ZGVzdC0+aW5pdF9kZXN0aW5hdGlvbikgKGNpbmZvKTsNCi0gIC8qIFBlcmZvcm0gbWFzdGVyIHNlbGVjdGlvbiBvZiBhY3RpdmUgbW9kdWxlcyAqLw0KLSAgamluaXRfY29tcHJlc3NfbWFzdGVyKGNpbmZvKTsNCi0gIC8qIFNldCB1cCBmb3IgdGhlIGZpcnN0IHBhc3MgKi8NCi0gICgqY2luZm8tPm1hc3Rlci0+cHJlcGFyZV9mb3JfcGFzcykgKGNpbmZvKTsNCi0gIC8qIFJlYWR5IGZvciBhcHBsaWNhdGlvbiB0byBkcml2ZSBmaXJzdCBwYXNzIHRocm91Z2gganBlZ193cml0ZV9zY2FubGluZXMNCi0gICAqIG9yIGpwZWdfd3JpdGVfcmF3X2RhdGEuDQotICAgKi8NCi0gIGNpbmZvLT5uZXh0X3NjYW5saW5lID0gMDsNCi0gIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSAoY2luZm8tPnJhd19kYXRhX2luID8gQ1NUQVRFX1JBV19PSyA6IENTVEFURV9TQ0FOTklORyk7DQotfQ0KLQ0KLQ0KLS8qDQotICogV3JpdGUgc29tZSBzY2FubGluZXMgb2YgZGF0YSB0byB0aGUgSlBFRyBjb21wcmVzc29yLg0KLSAqDQotICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHRoZSBudW1iZXIgb2YgbGluZXMgYWN0dWFsbHkgd3JpdHRlbi4NCi0gKiBUaGlzIHNob3VsZCBiZSBsZXNzIHRoYW4gdGhlIHN1cHBsaWVkIG51bV9saW5lcyBvbmx5IGluIGNhc2UgdGhhdA0KLSAqIHRoZSBkYXRhIGRlc3RpbmF0aW9uIG1vZHVsZSBoYXMgcmVxdWVzdGVkIHN1c3BlbnNpb24gb2YgdGhlIGNvbXByZXNzb3IsDQotICogb3IgaWYgbW9yZSB0aGFuIGltYWdlX2hlaWdodCBzY2FubGluZXMgYXJlIHBhc3NlZCBpbi4NCi0gKg0KLSAqIE5vdGU6IHdlIHdhcm4gYWJvdXQgZXhjZXNzIGNhbGxzIHRvIGpwZWdfd3JpdGVfc2NhbmxpbmVzKCkgc2luY2UNCi0gKiB0aGlzIGxpa2VseSBzaWduYWxzIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1tZXIgZXJyb3IuICBIb3dldmVyLA0KLSAqIGV4Y2VzcyBzY2FubGluZXMgcGFzc2VkIGluIHRoZSBsYXN0IHZhbGlkIGNhbGwgYXJlICpzaWxlbnRseSogaWdub3JlZCwNCi0gKiBzbyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBuZWVkIG5vdCBhZGp1c3QgbnVtX2xpbmVzIGZvciBlbmQtb2YtaW1hZ2UNCi0gKiB3aGVuIHVzaW5nIGEgbXVsdGlwbGUtc2NhbmxpbmUgYnVmZmVyLg0KLSAqLw0KLQ0KLUdMT0JBTChKRElNRU5TSU9OKQ0KLWpwZWdfd3JpdGVfc2NhbmxpbmVzIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBBUlJBWSBzY2FubGluZXMsDQotCQkgICAgICBKRElNRU5TSU9OIG51bV9saW5lcykNCi17DQotICBKRElNRU5TSU9OIHJvd19jdHIsIHJvd3NfbGVmdDsNCi0NCi0gIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IENTVEFURV9TQ0FOTklORykNCi0gICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsNCi0gIGlmIChjaW5mby0+bmV4dF9zY2FubGluZSA+PSBjaW5mby0+aW1hZ2VfaGVpZ2h0KQ0KLSAgICBXQVJOTVMoY2luZm8sIEpXUk5fVE9PX01VQ0hfREFUQSk7DQotDQotICAvKiBDYWxsIHByb2dyZXNzIG1vbml0b3IgaG9vayBpZiBwcmVzZW50ICovDQotICBpZiAoY2luZm8tPnByb2dyZXNzICE9IE5VTEwpIHsNCi0gICAgY2luZm8tPnByb2dyZXNzLT5wYXNzX2NvdW50ZXIgPSAobG9uZykgY2luZm8tPm5leHRfc2NhbmxpbmU7DQotICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19saW1pdCA9IChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0Ow0KLSAgICAoKmNpbmZvLT5wcm9ncmVzcy0+cHJvZ3Jlc3NfbW9uaXRvcikgKChqX2NvbW1vbl9wdHIpIGNpbmZvKTsNCi0gIH0NCi0NCi0gIC8qIEdpdmUgbWFzdGVyIGNvbnRyb2wgbW9kdWxlIGFub3RoZXIgY2hhbmNlIGlmIHRoaXMgaXMgZmlyc3QgY2FsbCB0bw0KLSAgICoganBlZ193cml0ZV9zY2FubGluZXMuICBUaGlzIGxldHMgb3V0cHV0IG9mIHRoZSBmcmFtZS9zY2FuIGhlYWRlcnMgYmUNCi0gICAqIGRlbGF5ZWQgc28gdGhhdCBhcHBsaWNhdGlvbiBjYW4gd3JpdGUgQ09NLCBldGMsIG1hcmtlcnMgYmV0d2Vlbg0KLSAgICoganBlZ19zdGFydF9jb21wcmVzcyBhbmQganBlZ193cml0ZV9zY2FubGluZXMuDQotICAgKi8NCi0gIGlmIChjaW5mby0+bWFzdGVyLT5jYWxsX3Bhc3Nfc3RhcnR1cCkNCi0gICAgKCpjaW5mby0+bWFzdGVyLT5wYXNzX3N0YXJ0dXApIChjaW5mbyk7DQotDQotICAvKiBJZ25vcmUgYW55IGV4dHJhIHNjYW5saW5lcyBhdCBib3R0b20gb2YgaW1hZ2UuICovDQotICByb3dzX2xlZnQgPSBjaW5mby0+aW1hZ2VfaGVpZ2h0IC0gY2luZm8tPm5leHRfc2NhbmxpbmU7DQotICBpZiAobnVtX2xpbmVzID4gcm93c19sZWZ0KQ0KLSAgICBudW1fbGluZXMgPSByb3dzX2xlZnQ7DQotDQotICByb3dfY3RyID0gMDsNCi0gICgqY2luZm8tPm1haW4tPnByb2Nlc3NfZGF0YSkgKGNpbmZvLCBzY2FubGluZXMsICZyb3dfY3RyLCBudW1fbGluZXMpOw0KLSAgY2luZm8tPm5leHRfc2NhbmxpbmUgKz0gcm93X2N0cjsNCi0gIHJldHVybiByb3dfY3RyOw0KLX0NCi0NCi0NCi0vKg0KLSAqIEFsdGVybmF0ZSBlbnRyeSBwb2ludCB0byB3cml0ZSByYXcgZGF0YS4NCi0gKiBQcm9jZXNzZXMgZXhhY3RseSBvbmUgaU1DVSByb3cgcGVyIGNhbGwsIHVubGVzcyBzdXNwZW5kZWQuDQotICovDQotDQotR0xPQkFMKEpESU1FTlNJT04pDQotanBlZ193cml0ZV9yYXdfZGF0YSAoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgZGF0YSwNCi0JCSAgICAgSkRJTUVOU0lPTiBudW1fbGluZXMpDQotew0KLSAgSkRJTUVOU0lPTiBsaW5lc19wZXJfaU1DVV9yb3c7DQotDQotICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBDU1RBVEVfUkFXX09LKQ0KLSAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOw0KLSAgaWYgKGNpbmZvLT5uZXh0X3NjYW5saW5lID49IGNpbmZvLT5pbWFnZV9oZWlnaHQpIHsNCi0gICAgV0FSTk1TKGNpbmZvLCBKV1JOX1RPT19NVUNIX0RBVEEpOw0KLSAgICByZXR1cm4gMDsNCi0gIH0NCi0NCi0gIC8qIENhbGwgcHJvZ3Jlc3MgbW9uaXRvciBob29rIGlmIHByZXNlbnQgKi8NCi0gIGlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCkgew0KLSAgICBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfY291bnRlciA9IChsb25nKSBjaW5mby0+bmV4dF9zY2FubGluZTsNCi0gICAgY2luZm8tPnByb2dyZXNzLT5wYXNzX2xpbWl0ID0gKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQ7DQotICAgICgqY2luZm8tPnByb2dyZXNzLT5wcm9ncmVzc19tb25pdG9yKSAoKGpfY29tbW9uX3B0cikgY2luZm8pOw0KLSAgfQ0KLQ0KLSAgLyogR2l2ZSBtYXN0ZXIgY29udHJvbCBtb2R1bGUgYW5vdGhlciBjaGFuY2UgaWYgdGhpcyBpcyBmaXJzdCBjYWxsIHRvDQotICAgKiBqcGVnX3dyaXRlX3Jhd19kYXRhLiAgVGhpcyBsZXRzIG91dHB1dCBvZiB0aGUgZnJhbWUvc2NhbiBoZWFkZXJzIGJlDQotICAgKiBkZWxheWVkIHNvIHRoYXQgYXBwbGljYXRpb24gY2FuIHdyaXRlIENPTSwgZXRjLCBtYXJrZXJzIGJldHdlZW4NCi0gICAqIGpwZWdfc3RhcnRfY29tcHJlc3MgYW5kIGpwZWdfd3JpdGVfcmF3X2RhdGEuDQotICAgKi8NCi0gIGlmIChjaW5mby0+bWFzdGVyLT5jYWxsX3Bhc3Nfc3RhcnR1cCkNCi0gICAgKCpjaW5mby0+bWFzdGVyLT5wYXNzX3N0YXJ0dXApIChjaW5mbyk7DQotDQotICAvKiBWZXJpZnkgdGhhdCBhdCBsZWFzdCBvbmUgaU1DVSByb3cgaGFzIGJlZW4gcGFzc2VkLiAqLw0KLSAgbGluZXNfcGVyX2lNQ1Vfcm93ID0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogRENUU0laRTsNCi0gIGlmIChudW1fbGluZXMgPCBsaW5lc19wZXJfaU1DVV9yb3cpDQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQlVGRkVSX1NJWkUpOw0KLQ0KLSAgLyogRGlyZWN0bHkgY29tcHJlc3MgdGhlIHJvdy4gKi8NCi0gIGlmICghICgqY2luZm8tPmNvZWYtPmNvbXByZXNzX2RhdGEpIChjaW5mbywgZGF0YSkpIHsNCi0gICAgLyogSWYgY29tcHJlc3NvciBkaWQgbm90IGNvbnN1bWUgdGhlIHdob2xlIHJvdywgc3VzcGVuZCBwcm9jZXNzaW5nLiAqLw0KLSAgICByZXR1cm4gMDsNCi0gIH0NCi0NCi0gIC8qIE9LLCB3ZSBwcm9jZXNzZWQgb25lIGlNQ1Ugcm93LiAqLw0KLSAgY2luZm8tPm5leHRfc2NhbmxpbmUgKz0gbGluZXNfcGVyX2lNQ1Vfcm93Ow0KLSAgcmV0dXJuIGxpbmVzX3Blcl9pTUNVX3JvdzsNCi19DQotDQotI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fDQorI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykKKy8qCisgKiBqY2FwaXN0ZC5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYXBwbGljYXRpb24gaW50ZXJmYWNlIGNvZGUgZm9yIHRoZSBjb21wcmVzc2lvbiBoYWxmCisgKiBvZiB0aGUgSlBFRyBsaWJyYXJ5LiAgVGhlc2UgYXJlIHRoZSAic3RhbmRhcmQiIEFQSSByb3V0aW5lcyB0aGF0IGFyZQorICogdXNlZCBpbiB0aGUgbm9ybWFsIGZ1bGwtY29tcHJlc3Npb24gY2FzZS4gIFRoZXkgYXJlIG5vdCB1c2VkIGJ5IGEKKyAqIHRyYW5zY29kaW5nLW9ubHkgYXBwbGljYXRpb24uICBOb3RlIHRoYXQgaWYgYW4gYXBwbGljYXRpb24gbGlua3MgaW4KKyAqIGpwZWdfc3RhcnRfY29tcHJlc3MsIGl0IHdpbGwgZW5kIHVwIGxpbmtpbmcgaW4gdGhlIGVudGlyZSBjb21wcmVzc29yLgorICogV2UgdGh1cyBtdXN0IHNlcGFyYXRlIHRoaXMgZmlsZSBmcm9tIGpjYXBpbWluLmMgdG8gYXZvaWQgbGlua2luZyB0aGUKKyAqIHdob2xlIGNvbXByZXNzaW9uIGxpYnJhcnkgaW50byBhIHRyYW5zY29kZXIuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorCisKKy8qCisgKiBDb21wcmVzc2lvbiBpbml0aWFsaXphdGlvbi4KKyAqIEJlZm9yZSBjYWxsaW5nIHRoaXMsIGFsbCBwYXJhbWV0ZXJzIGFuZCBhIGRhdGEgZGVzdGluYXRpb24gbXVzdCBiZSBzZXQgdXAuCisgKgorICogV2UgcmVxdWlyZSBhIHdyaXRlX2FsbF90YWJsZXMgcGFyYW1ldGVyIGFzIGEgZmFpbHNhZmUgY2hlY2sgd2hlbiB3cml0aW5nCisgKiBtdWx0aXBsZSBkYXRhc3RyZWFtcyBmcm9tIHRoZSBzYW1lIGNvbXByZXNzaW9uIG9iamVjdC4gIFNpbmNlIHByaW9yIHJ1bnMKKyAqIHdpbGwgaGF2ZSBsZWZ0IGFsbCB0aGUgdGFibGVzIG1hcmtlZCBzZW50X3RhYmxlPVRSVUUsIGEgc3Vic2VxdWVudCBydW4KKyAqIHdvdWxkIGVtaXQgYW4gYWJicmV2aWF0ZWQgc3RyZWFtIChubyB0YWJsZXMpIGJ5IGRlZmF1bHQuICBUaGlzIG1heSBiZSB3aGF0CisgKiBpcyB3YW50ZWQsIGJ1dCBmb3Igc2FmZXR5J3Mgc2FrZSBpdCBzaG91bGQgbm90IGJlIHRoZSBkZWZhdWx0IGJlaGF2aW9yOgorICogcHJvZ3JhbW1lcnMgc2hvdWxkIGhhdmUgdG8gbWFrZSBhIGRlbGliZXJhdGUgY2hvaWNlIHRvIGVtaXQgYWJicmV2aWF0ZWQKKyAqIGltYWdlcy4gIFRoZXJlZm9yZSB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgZXhhbXBsZXMgc2hvdWxkIGVuY291cmFnZSBwZW9wbGUKKyAqIHRvIHBhc3Mgd3JpdGVfYWxsX3RhYmxlcz1UUlVFOyB0aGVuIGl0IHdpbGwgdGFrZSBhY3RpdmUgdGhvdWdodCB0byBkbyB0aGUKKyAqIHdyb25nIHRoaW5nLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19zdGFydF9jb21wcmVzcyAoal9jb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gd3JpdGVfYWxsX3RhYmxlcykKK3sKKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gQ1NUQVRFX1NUQVJUKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CisKKyAgaWYgKHdyaXRlX2FsbF90YWJsZXMpCisgICAganBlZ19zdXBwcmVzc190YWJsZXMoY2luZm8sIEZBTFNFKTsJLyogbWFyayBhbGwgdGFibGVzIHRvIGJlIHdyaXR0ZW4gKi8KKworICAvKiAoUmUpaW5pdGlhbGl6ZSBlcnJvciBtZ3IgYW5kIGRlc3RpbmF0aW9uIG1vZHVsZXMgKi8KKyAgKCpjaW5mby0+ZXJyLT5yZXNldF9lcnJvcl9tZ3IpICgoal9jb21tb25fcHRyKSBjaW5mbyk7CisgICgqY2luZm8tPmRlc3QtPmluaXRfZGVzdGluYXRpb24pIChjaW5mbyk7CisgIC8qIFBlcmZvcm0gbWFzdGVyIHNlbGVjdGlvbiBvZiBhY3RpdmUgbW9kdWxlcyAqLworICBqaW5pdF9jb21wcmVzc19tYXN0ZXIoY2luZm8pOworICAvKiBTZXQgdXAgZm9yIHRoZSBmaXJzdCBwYXNzICovCisgICgqY2luZm8tPm1hc3Rlci0+cHJlcGFyZV9mb3JfcGFzcykgKGNpbmZvKTsKKyAgLyogUmVhZHkgZm9yIGFwcGxpY2F0aW9uIHRvIGRyaXZlIGZpcnN0IHBhc3MgdGhyb3VnaCBqcGVnX3dyaXRlX3NjYW5saW5lcworICAgKiBvciBqcGVnX3dyaXRlX3Jhd19kYXRhLgorICAgKi8KKyAgY2luZm8tPm5leHRfc2NhbmxpbmUgPSAwOworICBjaW5mby0+Z2xvYmFsX3N0YXRlID0gKGNpbmZvLT5yYXdfZGF0YV9pbiA/IENTVEFURV9SQVdfT0sgOiBDU1RBVEVfU0NBTk5JTkcpOworfQorCisKKy8qCisgKiBXcml0ZSBzb21lIHNjYW5saW5lcyBvZiBkYXRhIHRvIHRoZSBKUEVHIGNvbXByZXNzb3IuCisgKgorICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHRoZSBudW1iZXIgb2YgbGluZXMgYWN0dWFsbHkgd3JpdHRlbi4KKyAqIFRoaXMgc2hvdWxkIGJlIGxlc3MgdGhhbiB0aGUgc3VwcGxpZWQgbnVtX2xpbmVzIG9ubHkgaW4gY2FzZSB0aGF0CisgKiB0aGUgZGF0YSBkZXN0aW5hdGlvbiBtb2R1bGUgaGFzIHJlcXVlc3RlZCBzdXNwZW5zaW9uIG9mIHRoZSBjb21wcmVzc29yLAorICogb3IgaWYgbW9yZSB0aGFuIGltYWdlX2hlaWdodCBzY2FubGluZXMgYXJlIHBhc3NlZCBpbi4KKyAqCisgKiBOb3RlOiB3ZSB3YXJuIGFib3V0IGV4Y2VzcyBjYWxscyB0byBqcGVnX3dyaXRlX3NjYW5saW5lcygpIHNpbmNlCisgKiB0aGlzIGxpa2VseSBzaWduYWxzIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1tZXIgZXJyb3IuICBIb3dldmVyLAorICogZXhjZXNzIHNjYW5saW5lcyBwYXNzZWQgaW4gdGhlIGxhc3QgdmFsaWQgY2FsbCBhcmUgKnNpbGVudGx5KiBpZ25vcmVkLAorICogc28gdGhhdCB0aGUgYXBwbGljYXRpb24gbmVlZCBub3QgYWRqdXN0IG51bV9saW5lcyBmb3IgZW5kLW9mLWltYWdlCisgKiB3aGVuIHVzaW5nIGEgbXVsdGlwbGUtc2NhbmxpbmUgYnVmZmVyLgorICovCisKK0dMT0JBTChKRElNRU5TSU9OKQoranBlZ193cml0ZV9zY2FubGluZXMgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIHNjYW5saW5lcywKKwkJICAgICAgSkRJTUVOU0lPTiBudW1fbGluZXMpCit7CisgIEpESU1FTlNJT04gcm93X2N0ciwgcm93c19sZWZ0OworCisgIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IENTVEFURV9TQ0FOTklORykKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOworICBpZiAoY2luZm8tPm5leHRfc2NhbmxpbmUgPj0gY2luZm8tPmltYWdlX2hlaWdodCkKKyAgICBXQVJOTVMoY2luZm8sIEpXUk5fVE9PX01VQ0hfREFUQSk7CisKKyAgLyogQ2FsbCBwcm9ncmVzcyBtb25pdG9yIGhvb2sgaWYgcHJlc2VudCAqLworICBpZiAoY2luZm8tPnByb2dyZXNzICE9IE5VTEwpIHsKKyAgICBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfY291bnRlciA9IChsb25nKSBjaW5mby0+bmV4dF9zY2FubGluZTsKKyAgICBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfbGltaXQgPSAobG9uZykgY2luZm8tPmltYWdlX2hlaWdodDsKKyAgICAoKmNpbmZvLT5wcm9ncmVzcy0+cHJvZ3Jlc3NfbW9uaXRvcikgKChqX2NvbW1vbl9wdHIpIGNpbmZvKTsKKyAgfQorCisgIC8qIEdpdmUgbWFzdGVyIGNvbnRyb2wgbW9kdWxlIGFub3RoZXIgY2hhbmNlIGlmIHRoaXMgaXMgZmlyc3QgY2FsbCB0bworICAgKiBqcGVnX3dyaXRlX3NjYW5saW5lcy4gIFRoaXMgbGV0cyBvdXRwdXQgb2YgdGhlIGZyYW1lL3NjYW4gaGVhZGVycyBiZQorICAgKiBkZWxheWVkIHNvIHRoYXQgYXBwbGljYXRpb24gY2FuIHdyaXRlIENPTSwgZXRjLCBtYXJrZXJzIGJldHdlZW4KKyAgICoganBlZ19zdGFydF9jb21wcmVzcyBhbmQganBlZ193cml0ZV9zY2FubGluZXMuCisgICAqLworICBpZiAoY2luZm8tPm1hc3Rlci0+Y2FsbF9wYXNzX3N0YXJ0dXApCisgICAgKCpjaW5mby0+bWFzdGVyLT5wYXNzX3N0YXJ0dXApIChjaW5mbyk7CisKKyAgLyogSWdub3JlIGFueSBleHRyYSBzY2FubGluZXMgYXQgYm90dG9tIG9mIGltYWdlLiAqLworICByb3dzX2xlZnQgPSBjaW5mby0+aW1hZ2VfaGVpZ2h0IC0gY2luZm8tPm5leHRfc2NhbmxpbmU7CisgIGlmIChudW1fbGluZXMgPiByb3dzX2xlZnQpCisgICAgbnVtX2xpbmVzID0gcm93c19sZWZ0OworCisgIHJvd19jdHIgPSAwOworICAoKmNpbmZvLT5tYWluLT5wcm9jZXNzX2RhdGEpIChjaW5mbywgc2NhbmxpbmVzLCAmcm93X2N0ciwgbnVtX2xpbmVzKTsKKyAgY2luZm8tPm5leHRfc2NhbmxpbmUgKz0gcm93X2N0cjsKKyAgcmV0dXJuIHJvd19jdHI7Cit9CisKKworLyoKKyAqIEFsdGVybmF0ZSBlbnRyeSBwb2ludCB0byB3cml0ZSByYXcgZGF0YS4KKyAqIFByb2Nlc3NlcyBleGFjdGx5IG9uZSBpTUNVIHJvdyBwZXIgY2FsbCwgdW5sZXNzIHN1c3BlbmRlZC4KKyAqLworCitHTE9CQUwoSkRJTUVOU0lPTikKK2pwZWdfd3JpdGVfcmF3X2RhdGEgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGRhdGEsCisJCSAgICAgSkRJTUVOU0lPTiBudW1fbGluZXMpCit7CisgIEpESU1FTlNJT04gbGluZXNfcGVyX2lNQ1Vfcm93OworCisgIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IENTVEFURV9SQVdfT0spCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKKyAgaWYgKGNpbmZvLT5uZXh0X3NjYW5saW5lID49IGNpbmZvLT5pbWFnZV9oZWlnaHQpIHsKKyAgICBXQVJOTVMoY2luZm8sIEpXUk5fVE9PX01VQ0hfREFUQSk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBDYWxsIHByb2dyZXNzIG1vbml0b3IgaG9vayBpZiBwcmVzZW50ICovCisgIGlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCkgeworICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19jb3VudGVyID0gKGxvbmcpIGNpbmZvLT5uZXh0X3NjYW5saW5lOworICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19saW1pdCA9IChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0OworICAgICgqY2luZm8tPnByb2dyZXNzLT5wcm9ncmVzc19tb25pdG9yKSAoKGpfY29tbW9uX3B0cikgY2luZm8pOworICB9CisKKyAgLyogR2l2ZSBtYXN0ZXIgY29udHJvbCBtb2R1bGUgYW5vdGhlciBjaGFuY2UgaWYgdGhpcyBpcyBmaXJzdCBjYWxsIHRvCisgICAqIGpwZWdfd3JpdGVfcmF3X2RhdGEuICBUaGlzIGxldHMgb3V0cHV0IG9mIHRoZSBmcmFtZS9zY2FuIGhlYWRlcnMgYmUKKyAgICogZGVsYXllZCBzbyB0aGF0IGFwcGxpY2F0aW9uIGNhbiB3cml0ZSBDT00sIGV0YywgbWFya2VycyBiZXR3ZWVuCisgICAqIGpwZWdfc3RhcnRfY29tcHJlc3MgYW5kIGpwZWdfd3JpdGVfcmF3X2RhdGEuCisgICAqLworICBpZiAoY2luZm8tPm1hc3Rlci0+Y2FsbF9wYXNzX3N0YXJ0dXApCisgICAgKCpjaW5mby0+bWFzdGVyLT5wYXNzX3N0YXJ0dXApIChjaW5mbyk7CisKKyAgLyogVmVyaWZ5IHRoYXQgYXQgbGVhc3Qgb25lIGlNQ1Ugcm93IGhhcyBiZWVuIHBhc3NlZC4gKi8KKyAgbGluZXNfcGVyX2lNQ1Vfcm93ID0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogRENUU0laRTsKKyAgaWYgKG51bV9saW5lcyA8IGxpbmVzX3Blcl9pTUNVX3JvdykKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JVRkZFUl9TSVpFKTsKKworICAvKiBEaXJlY3RseSBjb21wcmVzcyB0aGUgcm93LiAqLworICBpZiAoISAoKmNpbmZvLT5jb2VmLT5jb21wcmVzc19kYXRhKSAoY2luZm8sIGRhdGEpKSB7CisgICAgLyogSWYgY29tcHJlc3NvciBkaWQgbm90IGNvbnN1bWUgdGhlIHdob2xlIHJvdywgc3VzcGVuZCBwcm9jZXNzaW5nLiAqLworICAgIHJldHVybiAwOworICB9CisKKyAgLyogT0ssIHdlIHByb2Nlc3NlZCBvbmUgaU1DVSByb3cuICovCisgIGNpbmZvLT5uZXh0X3NjYW5saW5lICs9IGxpbmVzX3Blcl9pTUNVX3JvdzsKKyAgcmV0dXJuIGxpbmVzX3Blcl9pTUNVX3JvdzsKK30KKworI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY2NvZWZjdC5jIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamNjb2VmY3QuYwppbmRleCBlYTJhNGE2Li4wODkxMGVmIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY2NvZWZjdC5jCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pjY29lZmN0LmMKQEAgLTEsNDUyICsxLDQ1MiBAQAotI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykNCi0vKg0KLSAqIGpjY29lZmN0LmMNCi0gKg0KLSAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk3LCBUaG9tYXMgRy4gTGFuZS4NCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLg0KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4NCi0gKg0KLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgY29lZmZpY2llbnQgYnVmZmVyIGNvbnRyb2xsZXIgZm9yIGNvbXByZXNzaW9uLg0KLSAqIFRoaXMgY29udHJvbGxlciBpcyB0aGUgdG9wIGxldmVsIG9mIHRoZSBKUEVHIGNvbXByZXNzb3IgcHJvcGVyLg0KLSAqIFRoZSBjb2VmZmljaWVudCBidWZmZXIgbGllcyBiZXR3ZWVuIGZvcndhcmQtRENUIGFuZCBlbnRyb3B5IGVuY29kaW5nIHN0ZXBzLg0KLSAqLw0KLQ0KLSNkZWZpbmUgSlBFR19JTlRFUk5BTFMNCi0jaW5jbHVkZSAiamluY2x1ZGUuaCINCi0jaW5jbHVkZSAianBlZ2xpYi5oIg0KLQ0KLQ0KLS8qIFdlIHVzZSBhIGZ1bGwtaW1hZ2UgY29lZmZpY2llbnQgYnVmZmVyIHdoZW4gZG9pbmcgSHVmZm1hbiBvcHRpbWl6YXRpb24sDQotICogYW5kIGFsc28gZm9yIHdyaXRpbmcgbXVsdGlwbGUtc2NhbiBKUEVHIGZpbGVzLiAgSW4gYWxsIGNhc2VzLCB0aGUgRENUDQotICogc3RlcCBpcyBydW4gZHVyaW5nIHRoZSBmaXJzdCBwYXNzLCBhbmQgc3Vic2VxdWVudCBwYXNzZXMgbmVlZCBvbmx5IHJlYWQNCi0gKiB0aGUgYnVmZmVyZWQgY29lZmZpY2llbnRzLg0KLSAqLw0KLSNpZmRlZiBFTlRST1BZX09QVF9TVVBQT1JURUQNCi0jZGVmaW5lIEZVTExfQ09FRl9CVUZGRVJfU1VQUE9SVEVEDQotI2Vsc2UNCi0jaWZkZWYgQ19NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVEDQotI2RlZmluZSBGVUxMX0NPRUZfQlVGRkVSX1NVUFBPUlRFRA0KLSNlbmRpZg0KLSNlbmRpZg0KLQ0KLQ0KLS8qIFByaXZhdGUgYnVmZmVyIGNvbnRyb2xsZXIgb2JqZWN0ICovDQotDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgc3RydWN0IGpwZWdfY19jb2VmX2NvbnRyb2xsZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovDQotDQotICBKRElNRU5TSU9OIGlNQ1Vfcm93X251bTsJLyogaU1DVSByb3cgIyB3aXRoaW4gaW1hZ2UgKi8NCi0gIEpESU1FTlNJT04gbWN1X2N0cjsJCS8qIGNvdW50cyBNQ1VzIHByb2Nlc3NlZCBpbiBjdXJyZW50IHJvdyAqLw0KLSAgaW50IE1DVV92ZXJ0X29mZnNldDsJCS8qIGNvdW50cyBNQ1Ugcm93cyB3aXRoaW4gaU1DVSByb3cgKi8NCi0gIGludCBNQ1Vfcm93c19wZXJfaU1DVV9yb3c7CS8qIG51bWJlciBvZiBzdWNoIHJvd3MgbmVlZGVkICovDQotDQotICAvKiBGb3Igc2luZ2xlLXBhc3MgY29tcHJlc3Npb24sIGl0J3Mgc3VmZmljaWVudCB0byBidWZmZXIganVzdCBvbmUgTUNVDQotICAgKiAoYWx0aG91Z2ggdGhpcyBtYXkgcHJvdmUgYSBiaXQgc2xvdyBpbiBwcmFjdGljZSkuICBXZSBhbGxvY2F0ZSBhDQotICAgKiB3b3Jrc3BhY2Ugb2YgQ19NQVhfQkxPQ0tTX0lOX01DVSBjb2VmZmljaWVudCBibG9ja3MsIGFuZCByZXVzZSBpdCBmb3IgZWFjaA0KLSAgICogTUNVIGNvbnN0cnVjdGVkIGFuZCBzZW50LiAgKE9uIDgweDg2LCB0aGUgd29ya3NwYWNlIGlzIEZBUiBldmVuIHRob3VnaA0KLSAgICogaXQncyBub3QgcmVhbGx5IHZlcnkgYmlnOyB0aGlzIGlzIHRvIGtlZXAgdGhlIG1vZHVsZSBpbnRlcmZhY2VzIHVuY2hhbmdlZA0KLSAgICogd2hlbiBhIGxhcmdlIGNvZWZmaWNpZW50IGJ1ZmZlciBpcyBuZWNlc3NhcnkuKQ0KLSAgICogSW4gbXVsdGktcGFzcyBtb2RlcywgdGhpcyBhcnJheSBwb2ludHMgdG8gdGhlIGN1cnJlbnQgTUNVJ3MgYmxvY2tzDQotICAgKiB3aXRoaW4gdGhlIHZpcnR1YWwgYXJyYXlzLg0KLSAgICovDQotICBKQkxPQ0tST1cgTUNVX2J1ZmZlcltDX01BWF9CTE9DS1NfSU5fTUNVXTsNCi0NCi0gIC8qIEluIG11bHRpLXBhc3MgbW9kZXMsIHdlIG5lZWQgYSB2aXJ0dWFsIGJsb2NrIGFycmF5IGZvciBlYWNoIGNvbXBvbmVudC4gKi8NCi0gIGp2aXJ0X2JhcnJheV9wdHIgd2hvbGVfaW1hZ2VbTUFYX0NPTVBPTkVOVFNdOw0KLX0gbXlfY29lZl9jb250cm9sbGVyOw0KLQ0KLXR5cGVkZWYgbXlfY29lZl9jb250cm9sbGVyICogbXlfY29lZl9wdHI7DQotDQotDQotLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8NCi1NRVRIT0RERUYoYm9vbGVhbikgY29tcHJlc3NfZGF0YQ0KLSAgICBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZikpOw0KLSNpZmRlZiBGVUxMX0NPRUZfQlVGRkVSX1NVUFBPUlRFRA0KLU1FVEhPRERFRihib29sZWFuKSBjb21wcmVzc19maXJzdF9wYXNzDQotICAgIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmKSk7DQotTUVUSE9EREVGKGJvb2xlYW4pIGNvbXByZXNzX291dHB1dA0KLSAgICBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZikpOw0KLSNlbmRpZg0KLQ0KLQ0KLUxPQ0FMKHZvaWQpDQotc3RhcnRfaU1DVV9yb3cgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQ0KLS8qIFJlc2V0IHdpdGhpbi1pTUNVLXJvdyBjb3VudGVycyBmb3IgYSBuZXcgcm93ICovDQotew0KLSAgbXlfY29lZl9wdHIgY29lZiA9IChteV9jb2VmX3B0cikgY2luZm8tPmNvZWY7DQotDQotICAvKiBJbiBhbiBpbnRlcmxlYXZlZCBzY2FuLCBhbiBNQ1Ugcm93IGlzIHRoZSBzYW1lIGFzIGFuIGlNQ1Ugcm93Lg0KLSAgICogSW4gYSBub25pbnRlcmxlYXZlZCBzY2FuLCBhbiBpTUNVIHJvdyBoYXMgdl9zYW1wX2ZhY3RvciBNQ1Ugcm93cy4NCi0gICAqIEJ1dCBhdCB0aGUgYm90dG9tIG9mIHRoZSBpbWFnZSwgcHJvY2VzcyBvbmx5IHdoYXQncyBsZWZ0Lg0KLSAgICovDQotICBpZiAoY2luZm8tPmNvbXBzX2luX3NjYW4gPiAxKSB7DQotICAgIGNvZWYtPk1DVV9yb3dzX3Blcl9pTUNVX3JvdyA9IDE7DQotICB9IGVsc2Ugew0KLSAgICBpZiAoY29lZi0+aU1DVV9yb3dfbnVtIDwgKGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MtMSkpDQotICAgICAgY29lZi0+TUNVX3Jvd3NfcGVyX2lNQ1Vfcm93ID0gY2luZm8tPmN1cl9jb21wX2luZm9bMF0tPnZfc2FtcF9mYWN0b3I7DQotICAgIGVsc2UNCi0gICAgICBjb2VmLT5NQ1Vfcm93c19wZXJfaU1DVV9yb3cgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1swXS0+bGFzdF9yb3dfaGVpZ2h0Ow0KLSAgfQ0KLQ0KLSAgY29lZi0+bWN1X2N0ciA9IDA7DQotICBjb2VmLT5NQ1VfdmVydF9vZmZzZXQgPSAwOw0KLX0NCi0NCi0NCi0vKg0KLSAqIEluaXRpYWxpemUgZm9yIGEgcHJvY2Vzc2luZyBwYXNzLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXN0YXJ0X3Bhc3NfY29lZiAoal9jb21wcmVzc19wdHIgY2luZm8sIEpfQlVGX01PREUgcGFzc19tb2RlKQ0KLXsNCi0gIG15X2NvZWZfcHRyIGNvZWYgPSAobXlfY29lZl9wdHIpIGNpbmZvLT5jb2VmOw0KLQ0KLSAgY29lZi0+aU1DVV9yb3dfbnVtID0gMDsNCi0gIHN0YXJ0X2lNQ1Vfcm93KGNpbmZvKTsNCi0NCi0gIHN3aXRjaCAocGFzc19tb2RlKSB7DQotICBjYXNlIEpCVUZfUEFTU19USFJVOg0KLSAgICBpZiAoY29lZi0+d2hvbGVfaW1hZ2VbMF0gIT0gTlVMTCkNCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7DQotICAgIGNvZWYtPnB1Yi5jb21wcmVzc19kYXRhID0gY29tcHJlc3NfZGF0YTsNCi0gICAgYnJlYWs7DQotI2lmZGVmIEZVTExfQ09FRl9CVUZGRVJfU1VQUE9SVEVEDQotICBjYXNlIEpCVUZfU0FWRV9BTkRfUEFTUzoNCi0gICAgaWYgKGNvZWYtPndob2xlX2ltYWdlWzBdID09IE5VTEwpDQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOw0KLSAgICBjb2VmLT5wdWIuY29tcHJlc3NfZGF0YSA9IGNvbXByZXNzX2ZpcnN0X3Bhc3M7DQotICAgIGJyZWFrOw0KLSAgY2FzZSBKQlVGX0NSQU5LX0RFU1Q6DQotICAgIGlmIChjb2VmLT53aG9sZV9pbWFnZVswXSA9PSBOVUxMKQ0KLSAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0JVRkZFUl9NT0RFKTsNCi0gICAgY29lZi0+cHViLmNvbXByZXNzX2RhdGEgPSBjb21wcmVzc19vdXRwdXQ7DQotICAgIGJyZWFrOw0KLSNlbmRpZg0KLSAgZGVmYXVsdDoNCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOw0KLSAgICBicmVhazsNCi0gIH0NCi19DQotDQotDQotLyoNCi0gKiBQcm9jZXNzIHNvbWUgZGF0YSBpbiB0aGUgc2luZ2xlLXBhc3MgY2FzZS4NCi0gKiBXZSBwcm9jZXNzIHRoZSBlcXVpdmFsZW50IG9mIG9uZSBmdWxseSBpbnRlcmxlYXZlZCBNQ1Ugcm93ICgiaU1DVSIgcm93KQ0KLSAqIHBlciBjYWxsLCBpZSwgdl9zYW1wX2ZhY3RvciBibG9jayByb3dzIGZvciBlYWNoIGNvbXBvbmVudCBpbiB0aGUgaW1hZ2UuDQotICogUmV0dXJucyBUUlVFIGlmIHRoZSBpTUNVIHJvdyBpcyBjb21wbGV0ZWQsIEZBTFNFIGlmIHN1c3BlbmRlZC4NCi0gKg0KLSAqIE5COiBpbnB1dF9idWYgY29udGFpbnMgYSBwbGFuZSBmb3IgZWFjaCBjb21wb25lbnQgaW4gaW1hZ2UsDQotICogd2hpY2ggd2UgaW5kZXggYWNjb3JkaW5nIHRvIHRoZSBjb21wb25lbnQncyBTT0YgcG9zaXRpb24uDQotICovDQotDQotTUVUSE9EREVGKGJvb2xlYW4pDQotY29tcHJlc3NfZGF0YSAoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmKQ0KLXsNCi0gIG15X2NvZWZfcHRyIGNvZWYgPSAobXlfY29lZl9wdHIpIGNpbmZvLT5jb2VmOw0KLSAgSkRJTUVOU0lPTiBNQ1VfY29sX251bTsJLyogaW5kZXggb2YgY3VycmVudCBNQ1Ugd2l0aGluIHJvdyAqLw0KLSAgSkRJTUVOU0lPTiBsYXN0X01DVV9jb2wgPSBjaW5mby0+TUNVc19wZXJfcm93IC0gMTsNCi0gIEpESU1FTlNJT04gbGFzdF9pTUNVX3JvdyA9IGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MgLSAxOw0KLSAgaW50IGJsa24sIGJpLCBjaSwgeWluZGV4LCB5b2Zmc2V0LCBibG9ja2NudDsNCi0gIEpESU1FTlNJT04geXBvcywgeHBvczsNCi0gIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7DQotDQotICAvKiBMb29wIHRvIHdyaXRlIGFzIG11Y2ggYXMgb25lIHdob2xlIGlNQ1Ugcm93ICovDQotICBmb3IgKHlvZmZzZXQgPSBjb2VmLT5NQ1VfdmVydF9vZmZzZXQ7IHlvZmZzZXQgPCBjb2VmLT5NQ1Vfcm93c19wZXJfaU1DVV9yb3c7DQotICAgICAgIHlvZmZzZXQrKykgew0KLSAgICBmb3IgKE1DVV9jb2xfbnVtID0gY29lZi0+bWN1X2N0cjsgTUNVX2NvbF9udW0gPD0gbGFzdF9NQ1VfY29sOw0KLQkgTUNVX2NvbF9udW0rKykgew0KLSAgICAgIC8qIERldGVybWluZSB3aGVyZSBkYXRhIGNvbWVzIGZyb20gaW4gaW5wdXRfYnVmIGFuZCBkbyB0aGUgRENUIHRoaW5nLg0KLSAgICAgICAqIEVhY2ggY2FsbCBvbiBmb3J3YXJkX0RDVCBwcm9jZXNzZXMgYSBob3Jpem9udGFsIHJvdyBvZiBEQ1QgYmxvY2tzDQotICAgICAgICogYXMgd2lkZSBhcyBhbiBNQ1U7IHdlIHJlbHkgb24gaGF2aW5nIGFsbG9jYXRlZCB0aGUgTUNVX2J1ZmZlcltdIGJsb2Nrcw0KLSAgICAgICAqIHNlcXVlbnRpYWxseS4gIER1bW15IGJsb2NrcyBhdCB0aGUgcmlnaHQgb3IgYm90dG9tIGVkZ2UgYXJlIGZpbGxlZCBpbg0KLSAgICAgICAqIHNwZWNpYWxseS4gIFRoZSBkYXRhIGluIHRoZW0gZG9lcyBub3QgbWF0dGVyIGZvciBpbWFnZSByZWNvbnN0cnVjdGlvbiwNCi0gICAgICAgKiBzbyB3ZSBmaWxsIHRoZW0gd2l0aCB2YWx1ZXMgdGhhdCB3aWxsIGVuY29kZSB0byB0aGUgc21hbGxlc3QgYW1vdW50IG9mDQotICAgICAgICogZGF0YSwgdml6OiBhbGwgemVyb2VzIGluIHRoZSBBQyBlbnRyaWVzLCBEQyBlbnRyaWVzIGVxdWFsIHRvIHByZXZpb3VzDQotICAgICAgICogYmxvY2sncyBEQyB2YWx1ZS4gIChUaGFua3MgdG8gVGhvbWFzIEtpbnNtYW4gZm9yIHRoaXMgaWRlYS4pDQotICAgICAgICovDQotICAgICAgYmxrbiA9IDA7DQotICAgICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspIHsNCi0JY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsNCi0JYmxvY2tjbnQgPSAoTUNVX2NvbF9udW0gPCBsYXN0X01DVV9jb2wpID8gY29tcHB0ci0+TUNVX3dpZHRoDQotCQkJCQkJOiBjb21wcHRyLT5sYXN0X2NvbF93aWR0aDsNCi0JeHBvcyA9IE1DVV9jb2xfbnVtICogY29tcHB0ci0+TUNVX3NhbXBsZV93aWR0aDsNCi0JeXBvcyA9IHlvZmZzZXQgKiBEQ1RTSVpFOyAvKiB5cG9zID09ICh5b2Zmc2V0K3lpbmRleCkgKiBEQ1RTSVpFICovDQotCWZvciAoeWluZGV4ID0gMDsgeWluZGV4IDwgY29tcHB0ci0+TUNVX2hlaWdodDsgeWluZGV4KyspIHsNCi0JICBpZiAoY29lZi0+aU1DVV9yb3dfbnVtIDwgbGFzdF9pTUNVX3JvdyB8fA0KLQkgICAgICB5b2Zmc2V0K3lpbmRleCA8IGNvbXBwdHItPmxhc3Rfcm93X2hlaWdodCkgew0KLQkgICAgKCpjaW5mby0+ZmRjdC0+Zm9yd2FyZF9EQ1QpIChjaW5mbywgY29tcHB0ciwNCi0JCQkJCSBpbnB1dF9idWZbY29tcHB0ci0+Y29tcG9uZW50X2luZGV4XSwNCi0JCQkJCSBjb2VmLT5NQ1VfYnVmZmVyW2Jsa25dLA0KLQkJCQkJIHlwb3MsIHhwb3MsIChKRElNRU5TSU9OKSBibG9ja2NudCk7DQotCSAgICBpZiAoYmxvY2tjbnQgPCBjb21wcHRyLT5NQ1Vfd2lkdGgpIHsNCi0JICAgICAgLyogQ3JlYXRlIHNvbWUgZHVtbXkgYmxvY2tzIGF0IHRoZSByaWdodCBlZGdlIG9mIHRoZSBpbWFnZS4gKi8NCi0JICAgICAganplcm9fZmFyKCh2b2lkIEZBUiAqKSBjb2VmLT5NQ1VfYnVmZmVyW2Jsa24gKyBibG9ja2NudF0sDQotCQkJKGNvbXBwdHItPk1DVV93aWR0aCAtIGJsb2NrY250KSAqIFNJWkVPRihKQkxPQ0spKTsNCi0JICAgICAgZm9yIChiaSA9IGJsb2NrY250OyBiaSA8IGNvbXBwdHItPk1DVV93aWR0aDsgYmkrKykgew0KLQkJY29lZi0+TUNVX2J1ZmZlcltibGtuK2JpXVswXVswXSA9IGNvZWYtPk1DVV9idWZmZXJbYmxrbitiaS0xXVswXVswXTsNCi0JICAgICAgfQ0KLQkgICAgfQ0KLQkgIH0gZWxzZSB7DQotCSAgICAvKiBDcmVhdGUgYSByb3cgb2YgZHVtbXkgYmxvY2tzIGF0IHRoZSBib3R0b20gb2YgdGhlIGltYWdlLiAqLw0KLQkgICAganplcm9fZmFyKCh2b2lkIEZBUiAqKSBjb2VmLT5NQ1VfYnVmZmVyW2Jsa25dLA0KLQkJICAgICAgY29tcHB0ci0+TUNVX3dpZHRoICogU0laRU9GKEpCTE9DSykpOw0KLQkgICAgZm9yIChiaSA9IDA7IGJpIDwgY29tcHB0ci0+TUNVX3dpZHRoOyBiaSsrKSB7DQotCSAgICAgIGNvZWYtPk1DVV9idWZmZXJbYmxrbitiaV1bMF1bMF0gPSBjb2VmLT5NQ1VfYnVmZmVyW2Jsa24tMV1bMF1bMF07DQotCSAgICB9DQotCSAgfQ0KLQkgIGJsa24gKz0gY29tcHB0ci0+TUNVX3dpZHRoOw0KLQkgIHlwb3MgKz0gRENUU0laRTsNCi0JfQ0KLSAgICAgIH0NCi0gICAgICAvKiBUcnkgdG8gd3JpdGUgdGhlIE1DVS4gIEluIGV2ZW50IG9mIGEgc3VzcGVuc2lvbiBmYWlsdXJlLCB3ZSB3aWxsDQotICAgICAgICogcmUtRENUIHRoZSBNQ1Ugb24gcmVzdGFydCAoYSBiaXQgaW5lZmZpY2llbnQsIGNvdWxkIGJlIGZpeGVkLi4uKQ0KLSAgICAgICAqLw0KLSAgICAgIGlmICghICgqY2luZm8tPmVudHJvcHktPmVuY29kZV9tY3UpIChjaW5mbywgY29lZi0+TUNVX2J1ZmZlcikpIHsNCi0JLyogU3VzcGVuc2lvbiBmb3JjZWQ7IHVwZGF0ZSBzdGF0ZSBjb3VudGVycyBhbmQgZXhpdCAqLw0KLQljb2VmLT5NQ1VfdmVydF9vZmZzZXQgPSB5b2Zmc2V0Ow0KLQljb2VmLT5tY3VfY3RyID0gTUNVX2NvbF9udW07DQotCXJldHVybiBGQUxTRTsNCi0gICAgICB9DQotICAgIH0NCi0gICAgLyogQ29tcGxldGVkIGFuIE1DVSByb3csIGJ1dCBwZXJoYXBzIG5vdCBhbiBpTUNVIHJvdyAqLw0KLSAgICBjb2VmLT5tY3VfY3RyID0gMDsNCi0gIH0NCi0gIC8qIENvbXBsZXRlZCB0aGUgaU1DVSByb3csIGFkdmFuY2UgY291bnRlcnMgZm9yIG5leHQgb25lICovDQotICBjb2VmLT5pTUNVX3Jvd19udW0rKzsNCi0gIHN0YXJ0X2lNQ1Vfcm93KGNpbmZvKTsNCi0gIHJldHVybiBUUlVFOw0KLX0NCi0NCi0NCi0jaWZkZWYgRlVMTF9DT0VGX0JVRkZFUl9TVVBQT1JURUQNCi0NCi0vKg0KLSAqIFByb2Nlc3Mgc29tZSBkYXRhIGluIHRoZSBmaXJzdCBwYXNzIG9mIGEgbXVsdGktcGFzcyBjYXNlLg0KLSAqIFdlIHByb2Nlc3MgdGhlIGVxdWl2YWxlbnQgb2Ygb25lIGZ1bGx5IGludGVybGVhdmVkIE1DVSByb3cgKCJpTUNVIiByb3cpDQotICogcGVyIGNhbGwsIGllLCB2X3NhbXBfZmFjdG9yIGJsb2NrIHJvd3MgZm9yIGVhY2ggY29tcG9uZW50IGluIHRoZSBpbWFnZS4NCi0gKiBUaGlzIGFtb3VudCBvZiBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgc291cmNlIGJ1ZmZlciwgRENUJ2QgYW5kIHF1YW50aXplZCwNCi0gKiBhbmQgc2F2ZWQgaW50byB0aGUgdmlydHVhbCBhcnJheXMuICBXZSBhbHNvIGdlbmVyYXRlIHN1aXRhYmxlIGR1bW15IGJsb2Nrcw0KLSAqIGFzIG5lZWRlZCBhdCB0aGUgcmlnaHQgYW5kIGxvd2VyIGVkZ2VzLiAgKFRoZSBkdW1teSBibG9ja3MgYXJlIGNvbnN0cnVjdGVkDQotICogaW4gdGhlIHZpcnR1YWwgYXJyYXlzLCB3aGljaCBoYXZlIGJlZW4gcGFkZGVkIGFwcHJvcHJpYXRlbHkuKSAgVGhpcyBtYWtlcw0KLSAqIGl0IHBvc3NpYmxlIGZvciBzdWJzZXF1ZW50IHBhc3NlcyBub3QgdG8gd29ycnkgYWJvdXQgcmVhbCB2cy4gZHVtbXkgYmxvY2tzLg0KLSAqDQotICogV2UgbXVzdCBhbHNvIGVtaXQgdGhlIGRhdGEgdG8gdGhlIGVudHJvcHkgZW5jb2Rlci4gIFRoaXMgaXMgY29udmVuaWVudGx5DQotICogZG9uZSBieSBjYWxsaW5nIGNvbXByZXNzX291dHB1dCgpIGFmdGVyIHdlJ3ZlIGxvYWRlZCB0aGUgY3VycmVudCBzdHJpcA0KLSAqIG9mIHRoZSB2aXJ0dWFsIGFycmF5cy4NCi0gKg0KLSAqIE5COiBpbnB1dF9idWYgY29udGFpbnMgYSBwbGFuZSBmb3IgZWFjaCBjb21wb25lbnQgaW4gaW1hZ2UuICBBbGwNCi0gKiBjb21wb25lbnRzIGFyZSBEQ1QnZCBhbmQgbG9hZGVkIGludG8gdGhlIHZpcnR1YWwgYXJyYXlzIGluIHRoaXMgcGFzcy4NCi0gKiBIb3dldmVyLCBpdCBtYXkgYmUgdGhhdCBvbmx5IGEgc3Vic2V0IG9mIHRoZSBjb21wb25lbnRzIGFyZSBlbWl0dGVkIHRvDQotICogdGhlIGVudHJvcHkgZW5jb2RlciBkdXJpbmcgdGhpcyBmaXJzdCBwYXNzOyBiZSBjYXJlZnVsIGFib3V0IGxvb2tpbmcNCi0gKiBhdCB0aGUgc2Nhbi1kZXBlbmRlbnQgdmFyaWFibGVzIChNQ1UgZGltZW5zaW9ucywgZXRjKS4NCi0gKi8NCi0NCi1NRVRIT0RERUYoYm9vbGVhbikNCi1jb21wcmVzc19maXJzdF9wYXNzIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYpDQotew0KLSAgbXlfY29lZl9wdHIgY29lZiA9IChteV9jb2VmX3B0cikgY2luZm8tPmNvZWY7DQotICBKRElNRU5TSU9OIGxhc3RfaU1DVV9yb3cgPSBjaW5mby0+dG90YWxfaU1DVV9yb3dzIC0gMTsNCi0gIEpESU1FTlNJT04gYmxvY2tzX2Fjcm9zcywgTUNVc19hY3Jvc3MsIE1DVWluZGV4Ow0KLSAgaW50IGJpLCBjaSwgaF9zYW1wX2ZhY3RvciwgYmxvY2tfcm93LCBibG9ja19yb3dzLCBuZHVtbXk7DQotICBKQ09FRiBsYXN0REM7DQotICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOw0KLSAgSkJMT0NLQVJSQVkgYnVmZmVyOw0KLSAgSkJMT0NLUk9XIHRoaXNibG9ja3JvdywgbGFzdGJsb2Nrcm93Ow0KLQ0KLSAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsNCi0gICAgICAgY2krKywgY29tcHB0cisrKSB7DQotICAgIC8qIEFsaWduIHRoZSB2aXJ0dWFsIGJ1ZmZlciBmb3IgdGhpcyBjb21wb25lbnQuICovDQotICAgIGJ1ZmZlciA9ICgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQ0KLSAgICAgICgoal9jb21tb25fcHRyKSBjaW5mbywgY29lZi0+d2hvbGVfaW1hZ2VbY2ldLA0KLSAgICAgICBjb2VmLT5pTUNVX3Jvd19udW0gKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yLA0KLSAgICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgVFJVRSk7DQotICAgIC8qIENvdW50IG5vbi1kdW1teSBEQ1QgYmxvY2sgcm93cyBpbiB0aGlzIGlNQ1Ugcm93LiAqLw0KLSAgICBpZiAoY29lZi0+aU1DVV9yb3dfbnVtIDwgbGFzdF9pTUNVX3JvdykNCi0gICAgICBibG9ja19yb3dzID0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsNCi0gICAgZWxzZSB7DQotICAgICAgLyogTkI6IGNhbid0IHVzZSBsYXN0X3Jvd19oZWlnaHQgaGVyZSwgc2luY2UgbWF5IG5vdCBiZSBzZXQhICovDQotICAgICAgYmxvY2tfcm93cyA9IChpbnQpIChjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzICUgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcik7DQotICAgICAgaWYgKGJsb2NrX3Jvd3MgPT0gMCkgYmxvY2tfcm93cyA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7DQotICAgIH0NCi0gICAgYmxvY2tzX2Fjcm9zcyA9IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrczsNCi0gICAgaF9zYW1wX2ZhY3RvciA9IGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7DQotICAgIC8qIENvdW50IG51bWJlciBvZiBkdW1teSBibG9ja3MgdG8gYmUgYWRkZWQgYXQgdGhlIHJpZ2h0IG1hcmdpbi4gKi8NCi0gICAgbmR1bW15ID0gKGludCkgKGJsb2Nrc19hY3Jvc3MgJSBoX3NhbXBfZmFjdG9yKTsNCi0gICAgaWYgKG5kdW1teSA+IDApDQotICAgICAgbmR1bW15ID0gaF9zYW1wX2ZhY3RvciAtIG5kdW1teTsNCi0gICAgLyogUGVyZm9ybSBEQ1QgZm9yIGFsbCBub24tZHVtbXkgYmxvY2tzIGluIHRoaXMgaU1DVSByb3cuICBFYWNoIGNhbGwNCi0gICAgICogb24gZm9yd2FyZF9EQ1QgcHJvY2Vzc2VzIGEgY29tcGxldGUgaG9yaXpvbnRhbCByb3cgb2YgRENUIGJsb2Nrcy4NCi0gICAgICovDQotICAgIGZvciAoYmxvY2tfcm93ID0gMDsgYmxvY2tfcm93IDwgYmxvY2tfcm93czsgYmxvY2tfcm93KyspIHsNCi0gICAgICB0aGlzYmxvY2tyb3cgPSBidWZmZXJbYmxvY2tfcm93XTsNCi0gICAgICAoKmNpbmZvLT5mZGN0LT5mb3J3YXJkX0RDVCkgKGNpbmZvLCBjb21wcHRyLA0KLQkJCQkgICBpbnB1dF9idWZbY2ldLCB0aGlzYmxvY2tyb3csDQotCQkJCSAgIChKRElNRU5TSU9OKSAoYmxvY2tfcm93ICogRENUU0laRSksDQotCQkJCSAgIChKRElNRU5TSU9OKSAwLCBibG9ja3NfYWNyb3NzKTsNCi0gICAgICBpZiAobmR1bW15ID4gMCkgew0KLQkvKiBDcmVhdGUgZHVtbXkgYmxvY2tzIGF0IHRoZSByaWdodCBlZGdlIG9mIHRoZSBpbWFnZS4gKi8NCi0JdGhpc2Jsb2Nrcm93ICs9IGJsb2Nrc19hY3Jvc3M7IC8qID0+IGZpcnN0IGR1bW15IGJsb2NrICovDQotCWp6ZXJvX2Zhcigodm9pZCBGQVIgKikgdGhpc2Jsb2Nrcm93LCBuZHVtbXkgKiBTSVpFT0YoSkJMT0NLKSk7DQotCWxhc3REQyA9IHRoaXNibG9ja3Jvd1stMV1bMF07DQotCWZvciAoYmkgPSAwOyBiaSA8IG5kdW1teTsgYmkrKykgew0KLQkgIHRoaXNibG9ja3Jvd1tiaV1bMF0gPSBsYXN0REM7DQotCX0NCi0gICAgICB9DQotICAgIH0NCi0gICAgLyogSWYgYXQgZW5kIG9mIGltYWdlLCBjcmVhdGUgZHVtbXkgYmxvY2sgcm93cyBhcyBuZWVkZWQuDQotICAgICAqIFRoZSB0cmlja3kgcGFydCBoZXJlIGlzIHRoYXQgd2l0aGluIGVhY2ggTUNVLCB3ZSB3YW50IHRoZSBEQyB2YWx1ZXMNCi0gICAgICogb2YgdGhlIGR1bW15IGJsb2NrcyB0byBtYXRjaCB0aGUgbGFzdCByZWFsIGJsb2NrJ3MgREMgdmFsdWUuDQotICAgICAqIFRoaXMgc3F1ZWV6ZXMgYSBmZXcgbW9yZSBieXRlcyBvdXQgb2YgdGhlIHJlc3VsdGluZyBmaWxlLi4uDQotICAgICAqLw0KLSAgICBpZiAoY29lZi0+aU1DVV9yb3dfbnVtID09IGxhc3RfaU1DVV9yb3cpIHsNCi0gICAgICBibG9ja3NfYWNyb3NzICs9IG5kdW1teTsJLyogaW5jbHVkZSBsb3dlciByaWdodCBjb3JuZXIgKi8NCi0gICAgICBNQ1VzX2Fjcm9zcyA9IGJsb2Nrc19hY3Jvc3MgLyBoX3NhbXBfZmFjdG9yOw0KLSAgICAgIGZvciAoYmxvY2tfcm93ID0gYmxvY2tfcm93czsgYmxvY2tfcm93IDwgY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsNCi0JICAgYmxvY2tfcm93KyspIHsNCi0JdGhpc2Jsb2Nrcm93ID0gYnVmZmVyW2Jsb2NrX3Jvd107DQotCWxhc3RibG9ja3JvdyA9IGJ1ZmZlcltibG9ja19yb3ctMV07DQotCWp6ZXJvX2Zhcigodm9pZCBGQVIgKikgdGhpc2Jsb2Nrcm93LA0KLQkJICAoc2l6ZV90KSAoYmxvY2tzX2Fjcm9zcyAqIFNJWkVPRihKQkxPQ0spKSk7DQotCWZvciAoTUNVaW5kZXggPSAwOyBNQ1VpbmRleCA8IE1DVXNfYWNyb3NzOyBNQ1VpbmRleCsrKSB7DQotCSAgbGFzdERDID0gbGFzdGJsb2Nrcm93W2hfc2FtcF9mYWN0b3ItMV1bMF07DQotCSAgZm9yIChiaSA9IDA7IGJpIDwgaF9zYW1wX2ZhY3RvcjsgYmkrKykgew0KLQkgICAgdGhpc2Jsb2Nrcm93W2JpXVswXSA9IGxhc3REQzsNCi0JICB9DQotCSAgdGhpc2Jsb2Nrcm93ICs9IGhfc2FtcF9mYWN0b3I7IC8qIGFkdmFuY2UgdG8gbmV4dCBNQ1UgaW4gcm93ICovDQotCSAgbGFzdGJsb2Nrcm93ICs9IGhfc2FtcF9mYWN0b3I7DQotCX0NCi0gICAgICB9DQotICAgIH0NCi0gIH0NCi0gIC8qIE5COiBjb21wcmVzc19vdXRwdXQgd2lsbCBpbmNyZW1lbnQgaU1DVV9yb3dfbnVtIGlmIHN1Y2Nlc3NmdWwuDQotICAgKiBBIHN1c3BlbnNpb24gcmV0dXJuIHdpbGwgcmVzdWx0IGluIHJlZG9pbmcgYWxsIHRoZSB3b3JrIGFib3ZlIG5leHQgdGltZS4NCi0gICAqLw0KLQ0KLSAgLyogRW1pdCBkYXRhIHRvIHRoZSBlbnRyb3B5IGVuY29kZXIsIHNoYXJpbmcgY29kZSB3aXRoIHN1YnNlcXVlbnQgcGFzc2VzICovDQotICByZXR1cm4gY29tcHJlc3Nfb3V0cHV0KGNpbmZvLCBpbnB1dF9idWYpOw0KLX0NCi0NCi0NCi0vKg0KLSAqIFByb2Nlc3Mgc29tZSBkYXRhIGluIHN1YnNlcXVlbnQgcGFzc2VzIG9mIGEgbXVsdGktcGFzcyBjYXNlLg0KLSAqIFdlIHByb2Nlc3MgdGhlIGVxdWl2YWxlbnQgb2Ygb25lIGZ1bGx5IGludGVybGVhdmVkIE1DVSByb3cgKCJpTUNVIiByb3cpDQotICogcGVyIGNhbGwsIGllLCB2X3NhbXBfZmFjdG9yIGJsb2NrIHJvd3MgZm9yIGVhY2ggY29tcG9uZW50IGluIHRoZSBzY2FuLg0KLSAqIFRoZSBkYXRhIGlzIG9idGFpbmVkIGZyb20gdGhlIHZpcnR1YWwgYXJyYXlzIGFuZCBmZWQgdG8gdGhlIGVudHJvcHkgY29kZXIuDQotICogUmV0dXJucyBUUlVFIGlmIHRoZSBpTUNVIHJvdyBpcyBjb21wbGV0ZWQsIEZBTFNFIGlmIHN1c3BlbmRlZC4NCi0gKg0KLSAqIE5COiBpbnB1dF9idWYgaXMgaWdub3JlZDsgaXQgaXMgbGlrZWx5IHRvIGJlIGEgTlVMTCBwb2ludGVyLg0KLSAqLw0KLQ0KLU1FVEhPRERFRihib29sZWFuKQ0KLWNvbXByZXNzX291dHB1dCAoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmKQ0KLXsNCi0gIG15X2NvZWZfcHRyIGNvZWYgPSAobXlfY29lZl9wdHIpIGNpbmZvLT5jb2VmOw0KLSAgSkRJTUVOU0lPTiBNQ1VfY29sX251bTsJLyogaW5kZXggb2YgY3VycmVudCBNQ1Ugd2l0aGluIHJvdyAqLw0KLSAgaW50IGJsa24sIGNpLCB4aW5kZXgsIHlpbmRleCwgeW9mZnNldDsNCi0gIEpESU1FTlNJT04gc3RhcnRfY29sOw0KLSAgSkJMT0NLQVJSQVkgYnVmZmVyW01BWF9DT01QU19JTl9TQ0FOXTsNCi0gIEpCTE9DS1JPVyBidWZmZXJfcHRyOw0KLSAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsNCi0NCi0gIC8qIEFsaWduIHRoZSB2aXJ0dWFsIGJ1ZmZlcnMgZm9yIHRoZSBjb21wb25lbnRzIHVzZWQgaW4gdGhpcyBzY2FuLg0KLSAgICogTkI6IGR1cmluZyBmaXJzdCBwYXNzLCB0aGlzIGlzIHNhZmUgb25seSBiZWNhdXNlIHRoZSBidWZmZXJzIHdpbGwNCi0gICAqIGFscmVhZHkgYmUgYWxpZ25lZCBwcm9wZXJseSwgc28gam1lbW1nci5jIHdvbid0IG5lZWQgdG8gZG8gYW55IEkvTy4NCi0gICAqLw0KLSAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspIHsNCi0gICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsNCi0gICAgYnVmZmVyW2NpXSA9ICgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQ0KLSAgICAgICgoal9jb21tb25fcHRyKSBjaW5mbywgY29lZi0+d2hvbGVfaW1hZ2VbY29tcHB0ci0+Y29tcG9uZW50X2luZGV4XSwNCi0gICAgICAgY29lZi0+aU1DVV9yb3dfbnVtICogY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwNCi0gICAgICAgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIEZBTFNFKTsNCi0gIH0NCi0NCi0gIC8qIExvb3AgdG8gcHJvY2VzcyBvbmUgd2hvbGUgaU1DVSByb3cgKi8NCi0gIGZvciAoeW9mZnNldCA9IGNvZWYtPk1DVV92ZXJ0X29mZnNldDsgeW9mZnNldCA8IGNvZWYtPk1DVV9yb3dzX3Blcl9pTUNVX3JvdzsNCi0gICAgICAgeW9mZnNldCsrKSB7DQotICAgIGZvciAoTUNVX2NvbF9udW0gPSBjb2VmLT5tY3VfY3RyOyBNQ1VfY29sX251bSA8IGNpbmZvLT5NQ1VzX3Blcl9yb3c7DQotCSBNQ1VfY29sX251bSsrKSB7DQotICAgICAgLyogQ29uc3RydWN0IGxpc3Qgb2YgcG9pbnRlcnMgdG8gRENUIGJsb2NrcyBiZWxvbmdpbmcgdG8gdGhpcyBNQ1UgKi8NCi0gICAgICBibGtuID0gMDsJCQkvKiBpbmRleCBvZiBjdXJyZW50IERDVCBibG9jayB3aXRoaW4gTUNVICovDQotICAgICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspIHsNCi0JY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsNCi0Jc3RhcnRfY29sID0gTUNVX2NvbF9udW0gKiBjb21wcHRyLT5NQ1Vfd2lkdGg7DQotCWZvciAoeWluZGV4ID0gMDsgeWluZGV4IDwgY29tcHB0ci0+TUNVX2hlaWdodDsgeWluZGV4KyspIHsNCi0JICBidWZmZXJfcHRyID0gYnVmZmVyW2NpXVt5aW5kZXgreW9mZnNldF0gKyBzdGFydF9jb2w7DQotCSAgZm9yICh4aW5kZXggPSAwOyB4aW5kZXggPCBjb21wcHRyLT5NQ1Vfd2lkdGg7IHhpbmRleCsrKSB7DQotCSAgICBjb2VmLT5NQ1VfYnVmZmVyW2Jsa24rK10gPSBidWZmZXJfcHRyKys7DQotCSAgfQ0KLQl9DQotICAgICAgfQ0KLSAgICAgIC8qIFRyeSB0byB3cml0ZSB0aGUgTUNVLiAqLw0KLSAgICAgIGlmICghICgqY2luZm8tPmVudHJvcHktPmVuY29kZV9tY3UpIChjaW5mbywgY29lZi0+TUNVX2J1ZmZlcikpIHsNCi0JLyogU3VzcGVuc2lvbiBmb3JjZWQ7IHVwZGF0ZSBzdGF0ZSBjb3VudGVycyBhbmQgZXhpdCAqLw0KLQljb2VmLT5NQ1VfdmVydF9vZmZzZXQgPSB5b2Zmc2V0Ow0KLQljb2VmLT5tY3VfY3RyID0gTUNVX2NvbF9udW07DQotCXJldHVybiBGQUxTRTsNCi0gICAgICB9DQotICAgIH0NCi0gICAgLyogQ29tcGxldGVkIGFuIE1DVSByb3csIGJ1dCBwZXJoYXBzIG5vdCBhbiBpTUNVIHJvdyAqLw0KLSAgICBjb2VmLT5tY3VfY3RyID0gMDsNCi0gIH0NCi0gIC8qIENvbXBsZXRlZCB0aGUgaU1DVSByb3csIGFkdmFuY2UgY291bnRlcnMgZm9yIG5leHQgb25lICovDQotICBjb2VmLT5pTUNVX3Jvd19udW0rKzsNCi0gIHN0YXJ0X2lNQ1Vfcm93KGNpbmZvKTsNCi0gIHJldHVybiBUUlVFOw0KLX0NCi0NCi0jZW5kaWYgLyogRlVMTF9DT0VGX0JVRkZFUl9TVVBQT1JURUQgKi8NCi0NCi0NCi0vKg0KLSAqIEluaXRpYWxpemUgY29lZmZpY2llbnQgYnVmZmVyIGNvbnRyb2xsZXIuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotamluaXRfY19jb2VmX2NvbnRyb2xsZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpDQotew0KLSAgbXlfY29lZl9wdHIgY29lZjsNCi0NCi0gIGNvZWYgPSAobXlfY29lZl9wdHIpDQotICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsDQotCQkJCVNJWkVPRihteV9jb2VmX2NvbnRyb2xsZXIpKTsNCi0gIGNpbmZvLT5jb2VmID0gKHN0cnVjdCBqcGVnX2NfY29lZl9jb250cm9sbGVyICopIGNvZWY7DQotICBjb2VmLT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfY29lZjsNCi0NCi0gIC8qIENyZWF0ZSB0aGUgY29lZmZpY2llbnQgYnVmZmVyLiAqLw0KLSAgaWYgKG5lZWRfZnVsbF9idWZmZXIpIHsNCi0jaWZkZWYgRlVMTF9DT0VGX0JVRkZFUl9TVVBQT1JURUQNCi0gICAgLyogQWxsb2NhdGUgYSBmdWxsLWltYWdlIHZpcnR1YWwgYXJyYXkgZm9yIGVhY2ggY29tcG9uZW50LCAqLw0KLSAgICAvKiBwYWRkZWQgdG8gYSBtdWx0aXBsZSBvZiBzYW1wX2ZhY3RvciBEQ1QgYmxvY2tzIGluIGVhY2ggZGlyZWN0aW9uLiAqLw0KLSAgICBpbnQgY2k7DQotICAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7DQotDQotICAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7DQotCSBjaSsrLCBjb21wcHRyKyspIHsNCi0gICAgICBjb2VmLT53aG9sZV9pbWFnZVtjaV0gPSAoKmNpbmZvLT5tZW0tPnJlcXVlc3RfdmlydF9iYXJyYXkpDQotCSgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsIEZBTFNFLA0KLQkgKEpESU1FTlNJT04pIGpyb3VuZF91cCgobG9uZykgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzLA0KLQkJCQkobG9uZykgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciksDQotCSAoSkRJTUVOU0lPTikganJvdW5kX3VwKChsb25nKSBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzLA0KLQkJCQkobG9uZykgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciksDQotCSAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcik7DQotICAgIH0NCi0jZWxzZQ0KLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7DQotI2VuZGlmDQotICB9IGVsc2Ugew0KLSAgICAvKiBXZSBvbmx5IG5lZWQgYSBzaW5nbGUtTUNVIGJ1ZmZlci4gKi8NCi0gICAgSkJMT0NLUk9XIGJ1ZmZlcjsNCi0gICAgaW50IGk7DQotDQotICAgIGJ1ZmZlciA9IChKQkxPQ0tST1cpDQotICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19sYXJnZSkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwNCi0JCQkJICBDX01BWF9CTE9DS1NfSU5fTUNVICogU0laRU9GKEpCTE9DSykpOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgQ19NQVhfQkxPQ0tTX0lOX01DVTsgaSsrKSB7DQotICAgICAgY29lZi0+TUNVX2J1ZmZlcltpXSA9IGJ1ZmZlciArIGk7DQotICAgIH0NCi0gICAgY29lZi0+d2hvbGVfaW1hZ2VbMF0gPSBOVUxMOyAvKiBmbGFnIGZvciBubyB2aXJ0dWFsIGFycmF5cyAqLw0KLSAgfQ0KLX0NCi0NCi0jZW5kaWYgLy9fRlhfSlBFR19UVVJCT18NCisjaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQorLyoKKyAqIGpjY29lZmN0LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgY29lZmZpY2llbnQgYnVmZmVyIGNvbnRyb2xsZXIgZm9yIGNvbXByZXNzaW9uLgorICogVGhpcyBjb250cm9sbGVyIGlzIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIEpQRUcgY29tcHJlc3NvciBwcm9wZXIuCisgKiBUaGUgY29lZmZpY2llbnQgYnVmZmVyIGxpZXMgYmV0d2VlbiBmb3J3YXJkLURDVCBhbmQgZW50cm9weSBlbmNvZGluZyBzdGVwcy4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisKKworLyogV2UgdXNlIGEgZnVsbC1pbWFnZSBjb2VmZmljaWVudCBidWZmZXIgd2hlbiBkb2luZyBIdWZmbWFuIG9wdGltaXphdGlvbiwKKyAqIGFuZCBhbHNvIGZvciB3cml0aW5nIG11bHRpcGxlLXNjYW4gSlBFRyBmaWxlcy4gIEluIGFsbCBjYXNlcywgdGhlIERDVAorICogc3RlcCBpcyBydW4gZHVyaW5nIHRoZSBmaXJzdCBwYXNzLCBhbmQgc3Vic2VxdWVudCBwYXNzZXMgbmVlZCBvbmx5IHJlYWQKKyAqIHRoZSBidWZmZXJlZCBjb2VmZmljaWVudHMuCisgKi8KKyNpZmRlZiBFTlRST1BZX09QVF9TVVBQT1JURUQKKyNkZWZpbmUgRlVMTF9DT0VGX0JVRkZFUl9TVVBQT1JURUQKKyNlbHNlCisjaWZkZWYgQ19NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVECisjZGVmaW5lIEZVTExfQ09FRl9CVUZGRVJfU1VQUE9SVEVECisjZW5kaWYKKyNlbmRpZgorCisKKy8qIFByaXZhdGUgYnVmZmVyIGNvbnRyb2xsZXIgb2JqZWN0ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IGpwZWdfY19jb2VmX2NvbnRyb2xsZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCisKKyAgSkRJTUVOU0lPTiBpTUNVX3Jvd19udW07CS8qIGlNQ1Ugcm93ICMgd2l0aGluIGltYWdlICovCisgIEpESU1FTlNJT04gbWN1X2N0cjsJCS8qIGNvdW50cyBNQ1VzIHByb2Nlc3NlZCBpbiBjdXJyZW50IHJvdyAqLworICBpbnQgTUNVX3ZlcnRfb2Zmc2V0OwkJLyogY291bnRzIE1DVSByb3dzIHdpdGhpbiBpTUNVIHJvdyAqLworICBpbnQgTUNVX3Jvd3NfcGVyX2lNQ1Vfcm93OwkvKiBudW1iZXIgb2Ygc3VjaCByb3dzIG5lZWRlZCAqLworCisgIC8qIEZvciBzaW5nbGUtcGFzcyBjb21wcmVzc2lvbiwgaXQncyBzdWZmaWNpZW50IHRvIGJ1ZmZlciBqdXN0IG9uZSBNQ1UKKyAgICogKGFsdGhvdWdoIHRoaXMgbWF5IHByb3ZlIGEgYml0IHNsb3cgaW4gcHJhY3RpY2UpLiAgV2UgYWxsb2NhdGUgYQorICAgKiB3b3Jrc3BhY2Ugb2YgQ19NQVhfQkxPQ0tTX0lOX01DVSBjb2VmZmljaWVudCBibG9ja3MsIGFuZCByZXVzZSBpdCBmb3IgZWFjaAorICAgKiBNQ1UgY29uc3RydWN0ZWQgYW5kIHNlbnQuICAoT24gODB4ODYsIHRoZSB3b3Jrc3BhY2UgaXMgRkFSIGV2ZW4gdGhvdWdoCisgICAqIGl0J3Mgbm90IHJlYWxseSB2ZXJ5IGJpZzsgdGhpcyBpcyB0byBrZWVwIHRoZSBtb2R1bGUgaW50ZXJmYWNlcyB1bmNoYW5nZWQKKyAgICogd2hlbiBhIGxhcmdlIGNvZWZmaWNpZW50IGJ1ZmZlciBpcyBuZWNlc3NhcnkuKQorICAgKiBJbiBtdWx0aS1wYXNzIG1vZGVzLCB0aGlzIGFycmF5IHBvaW50cyB0byB0aGUgY3VycmVudCBNQ1UncyBibG9ja3MKKyAgICogd2l0aGluIHRoZSB2aXJ0dWFsIGFycmF5cy4KKyAgICovCisgIEpCTE9DS1JPVyBNQ1VfYnVmZmVyW0NfTUFYX0JMT0NLU19JTl9NQ1VdOworCisgIC8qIEluIG11bHRpLXBhc3MgbW9kZXMsIHdlIG5lZWQgYSB2aXJ0dWFsIGJsb2NrIGFycmF5IGZvciBlYWNoIGNvbXBvbmVudC4gKi8KKyAganZpcnRfYmFycmF5X3B0ciB3aG9sZV9pbWFnZVtNQVhfQ09NUE9ORU5UU107Cit9IG15X2NvZWZfY29udHJvbGxlcjsKKwordHlwZWRlZiBteV9jb2VmX2NvbnRyb2xsZXIgKiBteV9jb2VmX3B0cjsKKworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworTUVUSE9EREVGKGJvb2xlYW4pIGNvbXByZXNzX2RhdGEKKyAgICBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZikpOworI2lmZGVmIEZVTExfQ09FRl9CVUZGRVJfU1VQUE9SVEVECitNRVRIT0RERUYoYm9vbGVhbikgY29tcHJlc3NfZmlyc3RfcGFzcworICAgIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmKSk7CitNRVRIT0RERUYoYm9vbGVhbikgY29tcHJlc3Nfb3V0cHV0CisgICAgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYpKTsKKyNlbmRpZgorCisKK0xPQ0FMKHZvaWQpCitzdGFydF9pTUNVX3JvdyAoal9jb21wcmVzc19wdHIgY2luZm8pCisvKiBSZXNldCB3aXRoaW4taU1DVS1yb3cgY291bnRlcnMgZm9yIGEgbmV3IHJvdyAqLworeworICBteV9jb2VmX3B0ciBjb2VmID0gKG15X2NvZWZfcHRyKSBjaW5mby0+Y29lZjsKKworICAvKiBJbiBhbiBpbnRlcmxlYXZlZCBzY2FuLCBhbiBNQ1Ugcm93IGlzIHRoZSBzYW1lIGFzIGFuIGlNQ1Ugcm93LgorICAgKiBJbiBhIG5vbmludGVybGVhdmVkIHNjYW4sIGFuIGlNQ1Ugcm93IGhhcyB2X3NhbXBfZmFjdG9yIE1DVSByb3dzLgorICAgKiBCdXQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgaW1hZ2UsIHByb2Nlc3Mgb25seSB3aGF0J3MgbGVmdC4KKyAgICovCisgIGlmIChjaW5mby0+Y29tcHNfaW5fc2NhbiA+IDEpIHsKKyAgICBjb2VmLT5NQ1Vfcm93c19wZXJfaU1DVV9yb3cgPSAxOworICB9IGVsc2UgeworICAgIGlmIChjb2VmLT5pTUNVX3Jvd19udW0gPCAoY2luZm8tPnRvdGFsX2lNQ1Vfcm93cy0xKSkKKyAgICAgIGNvZWYtPk1DVV9yb3dzX3Blcl9pTUNVX3JvdyA9IGNpbmZvLT5jdXJfY29tcF9pbmZvWzBdLT52X3NhbXBfZmFjdG9yOworICAgIGVsc2UKKyAgICAgIGNvZWYtPk1DVV9yb3dzX3Blcl9pTUNVX3JvdyA9IGNpbmZvLT5jdXJfY29tcF9pbmZvWzBdLT5sYXN0X3Jvd19oZWlnaHQ7CisgIH0KKworICBjb2VmLT5tY3VfY3RyID0gMDsKKyAgY29lZi0+TUNVX3ZlcnRfb2Zmc2V0ID0gMDsKK30KKworCisvKgorICogSW5pdGlhbGl6ZSBmb3IgYSBwcm9jZXNzaW5nIHBhc3MuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9wYXNzX2NvZWYgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKX0JVRl9NT0RFIHBhc3NfbW9kZSkKK3sKKyAgbXlfY29lZl9wdHIgY29lZiA9IChteV9jb2VmX3B0cikgY2luZm8tPmNvZWY7CisKKyAgY29lZi0+aU1DVV9yb3dfbnVtID0gMDsKKyAgc3RhcnRfaU1DVV9yb3coY2luZm8pOworCisgIHN3aXRjaCAocGFzc19tb2RlKSB7CisgIGNhc2UgSkJVRl9QQVNTX1RIUlU6CisgICAgaWYgKGNvZWYtPndob2xlX2ltYWdlWzBdICE9IE5VTEwpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7CisgICAgY29lZi0+cHViLmNvbXByZXNzX2RhdGEgPSBjb21wcmVzc19kYXRhOworICAgIGJyZWFrOworI2lmZGVmIEZVTExfQ09FRl9CVUZGRVJfU1VQUE9SVEVECisgIGNhc2UgSkJVRl9TQVZFX0FORF9QQVNTOgorICAgIGlmIChjb2VmLT53aG9sZV9pbWFnZVswXSA9PSBOVUxMKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOworICAgIGNvZWYtPnB1Yi5jb21wcmVzc19kYXRhID0gY29tcHJlc3NfZmlyc3RfcGFzczsKKyAgICBicmVhazsKKyAgY2FzZSBKQlVGX0NSQU5LX0RFU1Q6CisgICAgaWYgKGNvZWYtPndob2xlX2ltYWdlWzBdID09IE5VTEwpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7CisgICAgY29lZi0+cHViLmNvbXByZXNzX2RhdGEgPSBjb21wcmVzc19vdXRwdXQ7CisgICAgYnJlYWs7CisjZW5kaWYKKyAgZGVmYXVsdDoKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7CisgICAgYnJlYWs7CisgIH0KK30KKworCisvKgorICogUHJvY2VzcyBzb21lIGRhdGEgaW4gdGhlIHNpbmdsZS1wYXNzIGNhc2UuCisgKiBXZSBwcm9jZXNzIHRoZSBlcXVpdmFsZW50IG9mIG9uZSBmdWxseSBpbnRlcmxlYXZlZCBNQ1Ugcm93ICgiaU1DVSIgcm93KQorICogcGVyIGNhbGwsIGllLCB2X3NhbXBfZmFjdG9yIGJsb2NrIHJvd3MgZm9yIGVhY2ggY29tcG9uZW50IGluIHRoZSBpbWFnZS4KKyAqIFJldHVybnMgVFJVRSBpZiB0aGUgaU1DVSByb3cgaXMgY29tcGxldGVkLCBGQUxTRSBpZiBzdXNwZW5kZWQuCisgKgorICogTkI6IGlucHV0X2J1ZiBjb250YWlucyBhIHBsYW5lIGZvciBlYWNoIGNvbXBvbmVudCBpbiBpbWFnZSwKKyAqIHdoaWNoIHdlIGluZGV4IGFjY29yZGluZyB0byB0aGUgY29tcG9uZW50J3MgU09GIHBvc2l0aW9uLgorICovCisKK01FVEhPRERFRihib29sZWFuKQorY29tcHJlc3NfZGF0YSAoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmKQoreworICBteV9jb2VmX3B0ciBjb2VmID0gKG15X2NvZWZfcHRyKSBjaW5mby0+Y29lZjsKKyAgSkRJTUVOU0lPTiBNQ1VfY29sX251bTsJLyogaW5kZXggb2YgY3VycmVudCBNQ1Ugd2l0aGluIHJvdyAqLworICBKRElNRU5TSU9OIGxhc3RfTUNVX2NvbCA9IGNpbmZvLT5NQ1VzX3Blcl9yb3cgLSAxOworICBKRElNRU5TSU9OIGxhc3RfaU1DVV9yb3cgPSBjaW5mby0+dG90YWxfaU1DVV9yb3dzIC0gMTsKKyAgaW50IGJsa24sIGJpLCBjaSwgeWluZGV4LCB5b2Zmc2V0LCBibG9ja2NudDsKKyAgSkRJTUVOU0lPTiB5cG9zLCB4cG9zOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgIC8qIExvb3AgdG8gd3JpdGUgYXMgbXVjaCBhcyBvbmUgd2hvbGUgaU1DVSByb3cgKi8KKyAgZm9yICh5b2Zmc2V0ID0gY29lZi0+TUNVX3ZlcnRfb2Zmc2V0OyB5b2Zmc2V0IDwgY29lZi0+TUNVX3Jvd3NfcGVyX2lNQ1Vfcm93OworICAgICAgIHlvZmZzZXQrKykgeworICAgIGZvciAoTUNVX2NvbF9udW0gPSBjb2VmLT5tY3VfY3RyOyBNQ1VfY29sX251bSA8PSBsYXN0X01DVV9jb2w7CisJIE1DVV9jb2xfbnVtKyspIHsKKyAgICAgIC8qIERldGVybWluZSB3aGVyZSBkYXRhIGNvbWVzIGZyb20gaW4gaW5wdXRfYnVmIGFuZCBkbyB0aGUgRENUIHRoaW5nLgorICAgICAgICogRWFjaCBjYWxsIG9uIGZvcndhcmRfRENUIHByb2Nlc3NlcyBhIGhvcml6b250YWwgcm93IG9mIERDVCBibG9ja3MKKyAgICAgICAqIGFzIHdpZGUgYXMgYW4gTUNVOyB3ZSByZWx5IG9uIGhhdmluZyBhbGxvY2F0ZWQgdGhlIE1DVV9idWZmZXJbXSBibG9ja3MKKyAgICAgICAqIHNlcXVlbnRpYWxseS4gIER1bW15IGJsb2NrcyBhdCB0aGUgcmlnaHQgb3IgYm90dG9tIGVkZ2UgYXJlIGZpbGxlZCBpbgorICAgICAgICogc3BlY2lhbGx5LiAgVGhlIGRhdGEgaW4gdGhlbSBkb2VzIG5vdCBtYXR0ZXIgZm9yIGltYWdlIHJlY29uc3RydWN0aW9uLAorICAgICAgICogc28gd2UgZmlsbCB0aGVtIHdpdGggdmFsdWVzIHRoYXQgd2lsbCBlbmNvZGUgdG8gdGhlIHNtYWxsZXN0IGFtb3VudCBvZgorICAgICAgICogZGF0YSwgdml6OiBhbGwgemVyb2VzIGluIHRoZSBBQyBlbnRyaWVzLCBEQyBlbnRyaWVzIGVxdWFsIHRvIHByZXZpb3VzCisgICAgICAgKiBibG9jaydzIERDIHZhbHVlLiAgKFRoYW5rcyB0byBUaG9tYXMgS2luc21hbiBmb3IgdGhpcyBpZGVhLikKKyAgICAgICAqLworICAgICAgYmxrbiA9IDA7CisgICAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworCWNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07CisJYmxvY2tjbnQgPSAoTUNVX2NvbF9udW0gPCBsYXN0X01DVV9jb2wpID8gY29tcHB0ci0+TUNVX3dpZHRoCisJCQkJCQk6IGNvbXBwdHItPmxhc3RfY29sX3dpZHRoOworCXhwb3MgPSBNQ1VfY29sX251bSAqIGNvbXBwdHItPk1DVV9zYW1wbGVfd2lkdGg7CisJeXBvcyA9IHlvZmZzZXQgKiBEQ1RTSVpFOyAvKiB5cG9zID09ICh5b2Zmc2V0K3lpbmRleCkgKiBEQ1RTSVpFICovCisJZm9yICh5aW5kZXggPSAwOyB5aW5kZXggPCBjb21wcHRyLT5NQ1VfaGVpZ2h0OyB5aW5kZXgrKykgeworCSAgaWYgKGNvZWYtPmlNQ1Vfcm93X251bSA8IGxhc3RfaU1DVV9yb3cgfHwKKwkgICAgICB5b2Zmc2V0K3lpbmRleCA8IGNvbXBwdHItPmxhc3Rfcm93X2hlaWdodCkgeworCSAgICAoKmNpbmZvLT5mZGN0LT5mb3J3YXJkX0RDVCkgKGNpbmZvLCBjb21wcHRyLAorCQkJCQkgaW5wdXRfYnVmW2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF0sCisJCQkJCSBjb2VmLT5NQ1VfYnVmZmVyW2Jsa25dLAorCQkJCQkgeXBvcywgeHBvcywgKEpESU1FTlNJT04pIGJsb2NrY250KTsKKwkgICAgaWYgKGJsb2NrY250IDwgY29tcHB0ci0+TUNVX3dpZHRoKSB7CisJICAgICAgLyogQ3JlYXRlIHNvbWUgZHVtbXkgYmxvY2tzIGF0IHRoZSByaWdodCBlZGdlIG9mIHRoZSBpbWFnZS4gKi8KKwkgICAgICBqemVyb19mYXIoKHZvaWQgRkFSICopIGNvZWYtPk1DVV9idWZmZXJbYmxrbiArIGJsb2NrY250XSwKKwkJCShjb21wcHRyLT5NQ1Vfd2lkdGggLSBibG9ja2NudCkgKiBTSVpFT0YoSkJMT0NLKSk7CisJICAgICAgZm9yIChiaSA9IGJsb2NrY250OyBiaSA8IGNvbXBwdHItPk1DVV93aWR0aDsgYmkrKykgeworCQljb2VmLT5NQ1VfYnVmZmVyW2Jsa24rYmldWzBdWzBdID0gY29lZi0+TUNVX2J1ZmZlcltibGtuK2JpLTFdWzBdWzBdOworCSAgICAgIH0KKwkgICAgfQorCSAgfSBlbHNlIHsKKwkgICAgLyogQ3JlYXRlIGEgcm93IG9mIGR1bW15IGJsb2NrcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBpbWFnZS4gKi8KKwkgICAganplcm9fZmFyKCh2b2lkIEZBUiAqKSBjb2VmLT5NQ1VfYnVmZmVyW2Jsa25dLAorCQkgICAgICBjb21wcHRyLT5NQ1Vfd2lkdGggKiBTSVpFT0YoSkJMT0NLKSk7CisJICAgIGZvciAoYmkgPSAwOyBiaSA8IGNvbXBwdHItPk1DVV93aWR0aDsgYmkrKykgeworCSAgICAgIGNvZWYtPk1DVV9idWZmZXJbYmxrbitiaV1bMF1bMF0gPSBjb2VmLT5NQ1VfYnVmZmVyW2Jsa24tMV1bMF1bMF07CisJICAgIH0KKwkgIH0KKwkgIGJsa24gKz0gY29tcHB0ci0+TUNVX3dpZHRoOworCSAgeXBvcyArPSBEQ1RTSVpFOworCX0KKyAgICAgIH0KKyAgICAgIC8qIFRyeSB0byB3cml0ZSB0aGUgTUNVLiAgSW4gZXZlbnQgb2YgYSBzdXNwZW5zaW9uIGZhaWx1cmUsIHdlIHdpbGwKKyAgICAgICAqIHJlLURDVCB0aGUgTUNVIG9uIHJlc3RhcnQgKGEgYml0IGluZWZmaWNpZW50LCBjb3VsZCBiZSBmaXhlZC4uLikKKyAgICAgICAqLworICAgICAgaWYgKCEgKCpjaW5mby0+ZW50cm9weS0+ZW5jb2RlX21jdSkgKGNpbmZvLCBjb2VmLT5NQ1VfYnVmZmVyKSkgeworCS8qIFN1c3BlbnNpb24gZm9yY2VkOyB1cGRhdGUgc3RhdGUgY291bnRlcnMgYW5kIGV4aXQgKi8KKwljb2VmLT5NQ1VfdmVydF9vZmZzZXQgPSB5b2Zmc2V0OworCWNvZWYtPm1jdV9jdHIgPSBNQ1VfY29sX251bTsKKwlyZXR1cm4gRkFMU0U7CisgICAgICB9CisgICAgfQorICAgIC8qIENvbXBsZXRlZCBhbiBNQ1Ugcm93LCBidXQgcGVyaGFwcyBub3QgYW4gaU1DVSByb3cgKi8KKyAgICBjb2VmLT5tY3VfY3RyID0gMDsKKyAgfQorICAvKiBDb21wbGV0ZWQgdGhlIGlNQ1Ugcm93LCBhZHZhbmNlIGNvdW50ZXJzIGZvciBuZXh0IG9uZSAqLworICBjb2VmLT5pTUNVX3Jvd19udW0rKzsKKyAgc3RhcnRfaU1DVV9yb3coY2luZm8pOworICByZXR1cm4gVFJVRTsKK30KKworCisjaWZkZWYgRlVMTF9DT0VGX0JVRkZFUl9TVVBQT1JURUQKKworLyoKKyAqIFByb2Nlc3Mgc29tZSBkYXRhIGluIHRoZSBmaXJzdCBwYXNzIG9mIGEgbXVsdGktcGFzcyBjYXNlLgorICogV2UgcHJvY2VzcyB0aGUgZXF1aXZhbGVudCBvZiBvbmUgZnVsbHkgaW50ZXJsZWF2ZWQgTUNVIHJvdyAoImlNQ1UiIHJvdykKKyAqIHBlciBjYWxsLCBpZSwgdl9zYW1wX2ZhY3RvciBibG9jayByb3dzIGZvciBlYWNoIGNvbXBvbmVudCBpbiB0aGUgaW1hZ2UuCisgKiBUaGlzIGFtb3VudCBvZiBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgc291cmNlIGJ1ZmZlciwgRENUJ2QgYW5kIHF1YW50aXplZCwKKyAqIGFuZCBzYXZlZCBpbnRvIHRoZSB2aXJ0dWFsIGFycmF5cy4gIFdlIGFsc28gZ2VuZXJhdGUgc3VpdGFibGUgZHVtbXkgYmxvY2tzCisgKiBhcyBuZWVkZWQgYXQgdGhlIHJpZ2h0IGFuZCBsb3dlciBlZGdlcy4gIChUaGUgZHVtbXkgYmxvY2tzIGFyZSBjb25zdHJ1Y3RlZAorICogaW4gdGhlIHZpcnR1YWwgYXJyYXlzLCB3aGljaCBoYXZlIGJlZW4gcGFkZGVkIGFwcHJvcHJpYXRlbHkuKSAgVGhpcyBtYWtlcworICogaXQgcG9zc2libGUgZm9yIHN1YnNlcXVlbnQgcGFzc2VzIG5vdCB0byB3b3JyeSBhYm91dCByZWFsIHZzLiBkdW1teSBibG9ja3MuCisgKgorICogV2UgbXVzdCBhbHNvIGVtaXQgdGhlIGRhdGEgdG8gdGhlIGVudHJvcHkgZW5jb2Rlci4gIFRoaXMgaXMgY29udmVuaWVudGx5CisgKiBkb25lIGJ5IGNhbGxpbmcgY29tcHJlc3Nfb3V0cHV0KCkgYWZ0ZXIgd2UndmUgbG9hZGVkIHRoZSBjdXJyZW50IHN0cmlwCisgKiBvZiB0aGUgdmlydHVhbCBhcnJheXMuCisgKgorICogTkI6IGlucHV0X2J1ZiBjb250YWlucyBhIHBsYW5lIGZvciBlYWNoIGNvbXBvbmVudCBpbiBpbWFnZS4gIEFsbAorICogY29tcG9uZW50cyBhcmUgRENUJ2QgYW5kIGxvYWRlZCBpbnRvIHRoZSB2aXJ0dWFsIGFycmF5cyBpbiB0aGlzIHBhc3MuCisgKiBIb3dldmVyLCBpdCBtYXkgYmUgdGhhdCBvbmx5IGEgc3Vic2V0IG9mIHRoZSBjb21wb25lbnRzIGFyZSBlbWl0dGVkIHRvCisgKiB0aGUgZW50cm9weSBlbmNvZGVyIGR1cmluZyB0aGlzIGZpcnN0IHBhc3M7IGJlIGNhcmVmdWwgYWJvdXQgbG9va2luZworICogYXQgdGhlIHNjYW4tZGVwZW5kZW50IHZhcmlhYmxlcyAoTUNVIGRpbWVuc2lvbnMsIGV0YykuCisgKi8KKworTUVUSE9EREVGKGJvb2xlYW4pCitjb21wcmVzc19maXJzdF9wYXNzIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBpbnB1dF9idWYpCit7CisgIG15X2NvZWZfcHRyIGNvZWYgPSAobXlfY29lZl9wdHIpIGNpbmZvLT5jb2VmOworICBKRElNRU5TSU9OIGxhc3RfaU1DVV9yb3cgPSBjaW5mby0+dG90YWxfaU1DVV9yb3dzIC0gMTsKKyAgSkRJTUVOU0lPTiBibG9ja3NfYWNyb3NzLCBNQ1VzX2Fjcm9zcywgTUNVaW5kZXg7CisgIGludCBiaSwgY2ksIGhfc2FtcF9mYWN0b3IsIGJsb2NrX3JvdywgYmxvY2tfcm93cywgbmR1bW15OworICBKQ09FRiBsYXN0REM7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIEpCTE9DS0FSUkFZIGJ1ZmZlcjsKKyAgSkJMT0NLUk9XIHRoaXNibG9ja3JvdywgbGFzdGJsb2Nrcm93OworCisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgLyogQWxpZ24gdGhlIHZpcnR1YWwgYnVmZmVyIGZvciB0aGlzIGNvbXBvbmVudC4gKi8KKyAgICBidWZmZXIgPSAoKmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKKyAgICAgICgoal9jb21tb25fcHRyKSBjaW5mbywgY29lZi0+d2hvbGVfaW1hZ2VbY2ldLAorICAgICAgIGNvZWYtPmlNQ1Vfcm93X251bSAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCisgICAgICAgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIFRSVUUpOworICAgIC8qIENvdW50IG5vbi1kdW1teSBEQ1QgYmxvY2sgcm93cyBpbiB0aGlzIGlNQ1Ugcm93LiAqLworICAgIGlmIChjb2VmLT5pTUNVX3Jvd19udW0gPCBsYXN0X2lNQ1Vfcm93KQorICAgICAgYmxvY2tfcm93cyA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisgICAgZWxzZSB7CisgICAgICAvKiBOQjogY2FuJ3QgdXNlIGxhc3Rfcm93X2hlaWdodCBoZXJlLCBzaW5jZSBtYXkgbm90IGJlIHNldCEgKi8KKyAgICAgIGJsb2NrX3Jvd3MgPSAoaW50KSAoY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrcyAlIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpOworICAgICAgaWYgKGJsb2NrX3Jvd3MgPT0gMCkgYmxvY2tfcm93cyA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisgICAgfQorICAgIGJsb2Nrc19hY3Jvc3MgPSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3M7CisgICAgaF9zYW1wX2ZhY3RvciA9IGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7CisgICAgLyogQ291bnQgbnVtYmVyIG9mIGR1bW15IGJsb2NrcyB0byBiZSBhZGRlZCBhdCB0aGUgcmlnaHQgbWFyZ2luLiAqLworICAgIG5kdW1teSA9IChpbnQpIChibG9ja3NfYWNyb3NzICUgaF9zYW1wX2ZhY3Rvcik7CisgICAgaWYgKG5kdW1teSA+IDApCisgICAgICBuZHVtbXkgPSBoX3NhbXBfZmFjdG9yIC0gbmR1bW15OworICAgIC8qIFBlcmZvcm0gRENUIGZvciBhbGwgbm9uLWR1bW15IGJsb2NrcyBpbiB0aGlzIGlNQ1Ugcm93LiAgRWFjaCBjYWxsCisgICAgICogb24gZm9yd2FyZF9EQ1QgcHJvY2Vzc2VzIGEgY29tcGxldGUgaG9yaXpvbnRhbCByb3cgb2YgRENUIGJsb2Nrcy4KKyAgICAgKi8KKyAgICBmb3IgKGJsb2NrX3JvdyA9IDA7IGJsb2NrX3JvdyA8IGJsb2NrX3Jvd3M7IGJsb2NrX3JvdysrKSB7CisgICAgICB0aGlzYmxvY2tyb3cgPSBidWZmZXJbYmxvY2tfcm93XTsKKyAgICAgICgqY2luZm8tPmZkY3QtPmZvcndhcmRfRENUKSAoY2luZm8sIGNvbXBwdHIsCisJCQkJICAgaW5wdXRfYnVmW2NpXSwgdGhpc2Jsb2Nrcm93LAorCQkJCSAgIChKRElNRU5TSU9OKSAoYmxvY2tfcm93ICogRENUU0laRSksCisJCQkJICAgKEpESU1FTlNJT04pIDAsIGJsb2Nrc19hY3Jvc3MpOworICAgICAgaWYgKG5kdW1teSA+IDApIHsKKwkvKiBDcmVhdGUgZHVtbXkgYmxvY2tzIGF0IHRoZSByaWdodCBlZGdlIG9mIHRoZSBpbWFnZS4gKi8KKwl0aGlzYmxvY2tyb3cgKz0gYmxvY2tzX2Fjcm9zczsgLyogPT4gZmlyc3QgZHVtbXkgYmxvY2sgKi8KKwlqemVyb19mYXIoKHZvaWQgRkFSICopIHRoaXNibG9ja3JvdywgbmR1bW15ICogU0laRU9GKEpCTE9DSykpOworCWxhc3REQyA9IHRoaXNibG9ja3Jvd1stMV1bMF07CisJZm9yIChiaSA9IDA7IGJpIDwgbmR1bW15OyBiaSsrKSB7CisJICB0aGlzYmxvY2tyb3dbYmldWzBdID0gbGFzdERDOworCX0KKyAgICAgIH0KKyAgICB9CisgICAgLyogSWYgYXQgZW5kIG9mIGltYWdlLCBjcmVhdGUgZHVtbXkgYmxvY2sgcm93cyBhcyBuZWVkZWQuCisgICAgICogVGhlIHRyaWNreSBwYXJ0IGhlcmUgaXMgdGhhdCB3aXRoaW4gZWFjaCBNQ1UsIHdlIHdhbnQgdGhlIERDIHZhbHVlcworICAgICAqIG9mIHRoZSBkdW1teSBibG9ja3MgdG8gbWF0Y2ggdGhlIGxhc3QgcmVhbCBibG9jaydzIERDIHZhbHVlLgorICAgICAqIFRoaXMgc3F1ZWV6ZXMgYSBmZXcgbW9yZSBieXRlcyBvdXQgb2YgdGhlIHJlc3VsdGluZyBmaWxlLi4uCisgICAgICovCisgICAgaWYgKGNvZWYtPmlNQ1Vfcm93X251bSA9PSBsYXN0X2lNQ1Vfcm93KSB7CisgICAgICBibG9ja3NfYWNyb3NzICs9IG5kdW1teTsJLyogaW5jbHVkZSBsb3dlciByaWdodCBjb3JuZXIgKi8KKyAgICAgIE1DVXNfYWNyb3NzID0gYmxvY2tzX2Fjcm9zcyAvIGhfc2FtcF9mYWN0b3I7CisgICAgICBmb3IgKGJsb2NrX3JvdyA9IGJsb2NrX3Jvd3M7IGJsb2NrX3JvdyA8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisJICAgYmxvY2tfcm93KyspIHsKKwl0aGlzYmxvY2tyb3cgPSBidWZmZXJbYmxvY2tfcm93XTsKKwlsYXN0YmxvY2tyb3cgPSBidWZmZXJbYmxvY2tfcm93LTFdOworCWp6ZXJvX2Zhcigodm9pZCBGQVIgKikgdGhpc2Jsb2Nrcm93LAorCQkgIChzaXplX3QpIChibG9ja3NfYWNyb3NzICogU0laRU9GKEpCTE9DSykpKTsKKwlmb3IgKE1DVWluZGV4ID0gMDsgTUNVaW5kZXggPCBNQ1VzX2Fjcm9zczsgTUNVaW5kZXgrKykgeworCSAgbGFzdERDID0gbGFzdGJsb2Nrcm93W2hfc2FtcF9mYWN0b3ItMV1bMF07CisJICBmb3IgKGJpID0gMDsgYmkgPCBoX3NhbXBfZmFjdG9yOyBiaSsrKSB7CisJICAgIHRoaXNibG9ja3Jvd1tiaV1bMF0gPSBsYXN0REM7CisJICB9CisJICB0aGlzYmxvY2tyb3cgKz0gaF9zYW1wX2ZhY3RvcjsgLyogYWR2YW5jZSB0byBuZXh0IE1DVSBpbiByb3cgKi8KKwkgIGxhc3RibG9ja3JvdyArPSBoX3NhbXBfZmFjdG9yOworCX0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgLyogTkI6IGNvbXByZXNzX291dHB1dCB3aWxsIGluY3JlbWVudCBpTUNVX3Jvd19udW0gaWYgc3VjY2Vzc2Z1bC4KKyAgICogQSBzdXNwZW5zaW9uIHJldHVybiB3aWxsIHJlc3VsdCBpbiByZWRvaW5nIGFsbCB0aGUgd29yayBhYm92ZSBuZXh0IHRpbWUuCisgICAqLworCisgIC8qIEVtaXQgZGF0YSB0byB0aGUgZW50cm9weSBlbmNvZGVyLCBzaGFyaW5nIGNvZGUgd2l0aCBzdWJzZXF1ZW50IHBhc3NlcyAqLworICByZXR1cm4gY29tcHJlc3Nfb3V0cHV0KGNpbmZvLCBpbnB1dF9idWYpOworfQorCisKKy8qCisgKiBQcm9jZXNzIHNvbWUgZGF0YSBpbiBzdWJzZXF1ZW50IHBhc3NlcyBvZiBhIG11bHRpLXBhc3MgY2FzZS4KKyAqIFdlIHByb2Nlc3MgdGhlIGVxdWl2YWxlbnQgb2Ygb25lIGZ1bGx5IGludGVybGVhdmVkIE1DVSByb3cgKCJpTUNVIiByb3cpCisgKiBwZXIgY2FsbCwgaWUsIHZfc2FtcF9mYWN0b3IgYmxvY2sgcm93cyBmb3IgZWFjaCBjb21wb25lbnQgaW4gdGhlIHNjYW4uCisgKiBUaGUgZGF0YSBpcyBvYnRhaW5lZCBmcm9tIHRoZSB2aXJ0dWFsIGFycmF5cyBhbmQgZmVkIHRvIHRoZSBlbnRyb3B5IGNvZGVyLgorICogUmV0dXJucyBUUlVFIGlmIHRoZSBpTUNVIHJvdyBpcyBjb21wbGV0ZWQsIEZBTFNFIGlmIHN1c3BlbmRlZC4KKyAqCisgKiBOQjogaW5wdXRfYnVmIGlzIGlnbm9yZWQ7IGl0IGlzIGxpa2VseSB0byBiZSBhIE5VTEwgcG9pbnRlci4KKyAqLworCitNRVRIT0RERUYoYm9vbGVhbikKK2NvbXByZXNzX291dHB1dCAoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmKQoreworICBteV9jb2VmX3B0ciBjb2VmID0gKG15X2NvZWZfcHRyKSBjaW5mby0+Y29lZjsKKyAgSkRJTUVOU0lPTiBNQ1VfY29sX251bTsJLyogaW5kZXggb2YgY3VycmVudCBNQ1Ugd2l0aGluIHJvdyAqLworICBpbnQgYmxrbiwgY2ksIHhpbmRleCwgeWluZGV4LCB5b2Zmc2V0OworICBKRElNRU5TSU9OIHN0YXJ0X2NvbDsKKyAgSkJMT0NLQVJSQVkgYnVmZmVyW01BWF9DT01QU19JTl9TQ0FOXTsKKyAgSkJMT0NLUk9XIGJ1ZmZlcl9wdHI7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisKKyAgLyogQWxpZ24gdGhlIHZpcnR1YWwgYnVmZmVycyBmb3IgdGhlIGNvbXBvbmVudHMgdXNlZCBpbiB0aGlzIHNjYW4uCisgICAqIE5COiBkdXJpbmcgZmlyc3QgcGFzcywgdGhpcyBpcyBzYWZlIG9ubHkgYmVjYXVzZSB0aGUgYnVmZmVycyB3aWxsCisgICAqIGFscmVhZHkgYmUgYWxpZ25lZCBwcm9wZXJseSwgc28gam1lbW1nci5jIHdvbid0IG5lZWQgdG8gZG8gYW55IEkvTy4KKyAgICovCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICBidWZmZXJbY2ldID0gKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCisgICAgICAoKGpfY29tbW9uX3B0cikgY2luZm8sIGNvZWYtPndob2xlX2ltYWdlW2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF0sCisgICAgICAgY29lZi0+aU1DVV9yb3dfbnVtICogY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwKKyAgICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgRkFMU0UpOworICB9CisKKyAgLyogTG9vcCB0byBwcm9jZXNzIG9uZSB3aG9sZSBpTUNVIHJvdyAqLworICBmb3IgKHlvZmZzZXQgPSBjb2VmLT5NQ1VfdmVydF9vZmZzZXQ7IHlvZmZzZXQgPCBjb2VmLT5NQ1Vfcm93c19wZXJfaU1DVV9yb3c7CisgICAgICAgeW9mZnNldCsrKSB7CisgICAgZm9yIChNQ1VfY29sX251bSA9IGNvZWYtPm1jdV9jdHI7IE1DVV9jb2xfbnVtIDwgY2luZm8tPk1DVXNfcGVyX3JvdzsKKwkgTUNVX2NvbF9udW0rKykgeworICAgICAgLyogQ29uc3RydWN0IGxpc3Qgb2YgcG9pbnRlcnMgdG8gRENUIGJsb2NrcyBiZWxvbmdpbmcgdG8gdGhpcyBNQ1UgKi8KKyAgICAgIGJsa24gPSAwOwkJCS8qIGluZGV4IG9mIGN1cnJlbnQgRENUIGJsb2NrIHdpdGhpbiBNQ1UgKi8KKyAgICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisJY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKwlzdGFydF9jb2wgPSBNQ1VfY29sX251bSAqIGNvbXBwdHItPk1DVV93aWR0aDsKKwlmb3IgKHlpbmRleCA9IDA7IHlpbmRleCA8IGNvbXBwdHItPk1DVV9oZWlnaHQ7IHlpbmRleCsrKSB7CisJICBidWZmZXJfcHRyID0gYnVmZmVyW2NpXVt5aW5kZXgreW9mZnNldF0gKyBzdGFydF9jb2w7CisJICBmb3IgKHhpbmRleCA9IDA7IHhpbmRleCA8IGNvbXBwdHItPk1DVV93aWR0aDsgeGluZGV4KyspIHsKKwkgICAgY29lZi0+TUNVX2J1ZmZlcltibGtuKytdID0gYnVmZmVyX3B0cisrOworCSAgfQorCX0KKyAgICAgIH0KKyAgICAgIC8qIFRyeSB0byB3cml0ZSB0aGUgTUNVLiAqLworICAgICAgaWYgKCEgKCpjaW5mby0+ZW50cm9weS0+ZW5jb2RlX21jdSkgKGNpbmZvLCBjb2VmLT5NQ1VfYnVmZmVyKSkgeworCS8qIFN1c3BlbnNpb24gZm9yY2VkOyB1cGRhdGUgc3RhdGUgY291bnRlcnMgYW5kIGV4aXQgKi8KKwljb2VmLT5NQ1VfdmVydF9vZmZzZXQgPSB5b2Zmc2V0OworCWNvZWYtPm1jdV9jdHIgPSBNQ1VfY29sX251bTsKKwlyZXR1cm4gRkFMU0U7CisgICAgICB9CisgICAgfQorICAgIC8qIENvbXBsZXRlZCBhbiBNQ1Ugcm93LCBidXQgcGVyaGFwcyBub3QgYW4gaU1DVSByb3cgKi8KKyAgICBjb2VmLT5tY3VfY3RyID0gMDsKKyAgfQorICAvKiBDb21wbGV0ZWQgdGhlIGlNQ1Ugcm93LCBhZHZhbmNlIGNvdW50ZXJzIGZvciBuZXh0IG9uZSAqLworICBjb2VmLT5pTUNVX3Jvd19udW0rKzsKKyAgc3RhcnRfaU1DVV9yb3coY2luZm8pOworICByZXR1cm4gVFJVRTsKK30KKworI2VuZGlmIC8qIEZVTExfQ09FRl9CVUZGRVJfU1VQUE9SVEVEICovCisKKworLyoKKyAqIEluaXRpYWxpemUgY29lZmZpY2llbnQgYnVmZmVyIGNvbnRyb2xsZXIuCisgKi8KKworR0xPQkFMKHZvaWQpCitqaW5pdF9jX2NvZWZfY29udHJvbGxlciAoal9jb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gbmVlZF9mdWxsX2J1ZmZlcikKK3sKKyAgbXlfY29lZl9wdHIgY29lZjsKKworICBjb2VmID0gKG15X2NvZWZfcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJU0laRU9GKG15X2NvZWZfY29udHJvbGxlcikpOworICBjaW5mby0+Y29lZiA9IChzdHJ1Y3QganBlZ19jX2NvZWZfY29udHJvbGxlciAqKSBjb2VmOworICBjb2VmLT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfY29lZjsKKworICAvKiBDcmVhdGUgdGhlIGNvZWZmaWNpZW50IGJ1ZmZlci4gKi8KKyAgaWYgKG5lZWRfZnVsbF9idWZmZXIpIHsKKyNpZmRlZiBGVUxMX0NPRUZfQlVGRkVSX1NVUFBPUlRFRAorICAgIC8qIEFsbG9jYXRlIGEgZnVsbC1pbWFnZSB2aXJ0dWFsIGFycmF5IGZvciBlYWNoIGNvbXBvbmVudCwgKi8KKyAgICAvKiBwYWRkZWQgdG8gYSBtdWx0aXBsZSBvZiBzYW1wX2ZhY3RvciBEQ1QgYmxvY2tzIGluIGVhY2ggZGlyZWN0aW9uLiAqLworICAgIGludCBjaTsKKyAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgICAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKwkgY2krKywgY29tcHB0cisrKSB7CisgICAgICBjb2VmLT53aG9sZV9pbWFnZVtjaV0gPSAoKmNpbmZvLT5tZW0tPnJlcXVlc3RfdmlydF9iYXJyYXkpCisJKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwgRkFMU0UsCisJIChKRElNRU5TSU9OKSBqcm91bmRfdXAoKGxvbmcpIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcywKKwkJCQkobG9uZykgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciksCisJIChKRElNRU5TSU9OKSBqcm91bmRfdXAoKGxvbmcpIGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3MsCisJCQkJKGxvbmcpIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpLAorCSAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcik7CisgICAgfQorI2Vsc2UKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7CisjZW5kaWYKKyAgfSBlbHNlIHsKKyAgICAvKiBXZSBvbmx5IG5lZWQgYSBzaW5nbGUtTUNVIGJ1ZmZlci4gKi8KKyAgICBKQkxPQ0tST1cgYnVmZmVyOworICAgIGludCBpOworCisgICAgYnVmZmVyID0gKEpCTE9DS1JPVykKKyAgICAgICgqY2luZm8tPm1lbS0+YWxsb2NfbGFyZ2UpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJICBDX01BWF9CTE9DS1NfSU5fTUNVICogU0laRU9GKEpCTE9DSykpOworICAgIGZvciAoaSA9IDA7IGkgPCBDX01BWF9CTE9DS1NfSU5fTUNVOyBpKyspIHsKKyAgICAgIGNvZWYtPk1DVV9idWZmZXJbaV0gPSBidWZmZXIgKyBpOworICAgIH0KKyAgICBjb2VmLT53aG9sZV9pbWFnZVswXSA9IE5VTEw7IC8qIGZsYWcgZm9yIG5vIHZpcnR1YWwgYXJyYXlzICovCisgIH0KK30KKworI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY2NvbG9yLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY2NvbG9yLmMKaW5kZXggOGZmODYzYS4uODA5YTA1YiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamNjb2xvci5jCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pjY29sb3IuYwpAQCAtMSw0NjIgKzEsNDYyIEBACi0jaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQ0KLS8qDQotICogamNjb2xvci5jDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NiwgVGhvbWFzIEcuIExhbmUuDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4NCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuDQotICoNCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgaW5wdXQgY29sb3JzcGFjZSBjb252ZXJzaW9uIHJvdXRpbmVzLg0KLSAqLw0KLQ0KLSNkZWZpbmUgSlBFR19JTlRFUk5BTFMNCi0jaW5jbHVkZSAiamluY2x1ZGUuaCINCi0jaW5jbHVkZSAianBlZ2xpYi5oIg0KLQ0KLQ0KLS8qIFByaXZhdGUgc3Vib2JqZWN0ICovDQotDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgc3RydWN0IGpwZWdfY29sb3JfY29udmVydGVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLw0KLQ0KLSAgLyogUHJpdmF0ZSBzdGF0ZSBmb3IgUkdCLT5ZQ0MgY29udmVyc2lvbiAqLw0KLSAgSU5UMzIgKiByZ2JfeWNjX3RhYjsJCS8qID0+IHRhYmxlIGZvciBSR0IgdG8gWUNiQ3IgY29udmVyc2lvbiAqLw0KLX0gbXlfY29sb3JfY29udmVydGVyOw0KLQ0KLXR5cGVkZWYgbXlfY29sb3JfY29udmVydGVyICogbXlfY2NvbnZlcnRfcHRyOw0KLQ0KLQ0KLS8qKioqKioqKioqKioqKioqIFJHQiAtPiBZQ2JDciBjb252ZXJzaW9uOiBtb3N0IGNvbW1vbiBjYXNlICoqKioqKioqKioqKioqLw0KLQ0KLS8qDQotICogWUNiQ3IgaXMgZGVmaW5lZCBwZXIgQ0NJUiA2MDEtMSwgZXhjZXB0IHRoYXQgQ2IgYW5kIENyIGFyZQ0KLSAqIG5vcm1hbGl6ZWQgdG8gdGhlIHJhbmdlIDAuLk1BWEpTQU1QTEUgcmF0aGVyIHRoYW4gLTAuNSAuLiAwLjUuDQotICogVGhlIGNvbnZlcnNpb24gZXF1YXRpb25zIHRvIGJlIGltcGxlbWVudGVkIGFyZSB0aGVyZWZvcmUNCi0gKglZICA9ICAwLjI5OTAwICogUiArIDAuNTg3MDAgKiBHICsgMC4xMTQwMCAqIEINCi0gKglDYiA9IC0wLjE2ODc0ICogUiAtIDAuMzMxMjYgKiBHICsgMC41MDAwMCAqIEIgICsgQ0VOVEVSSlNBTVBMRQ0KLSAqCUNyID0gIDAuNTAwMDAgKiBSIC0gMC40MTg2OSAqIEcgLSAwLjA4MTMxICogQiAgKyBDRU5URVJKU0FNUExFDQotICogKFRoZXNlIG51bWJlcnMgYXJlIGRlcml2ZWQgZnJvbSBUSUZGIDYuMCBzZWN0aW9uIDIxLCBkYXRlZCAzLUp1bmUtOTIuKQ0KLSAqIE5vdGU6IG9sZGVyIHZlcnNpb25zIG9mIHRoZSBJSkcgY29kZSB1c2VkIGEgemVybyBvZmZzZXQgb2YgTUFYSlNBTVBMRS8yLA0KLSAqIHJhdGhlciB0aGFuIENFTlRFUkpTQU1QTEUsIGZvciBDYiBhbmQgQ3IuICBUaGlzIGdhdmUgZXF1YWwgcG9zaXRpdmUgYW5kDQotICogbmVnYXRpdmUgc3dpbmdzIGZvciBDYi9DciwgYnV0IG1lYW50IHRoYXQgZ3JheXNjYWxlIHZhbHVlcyAoQ2I9Q3I9MCkNCi0gKiB3ZXJlIG5vdCByZXByZXNlbnRlZCBleGFjdGx5LiAgTm93IHdlIHNhY3JpZmljZSBleGFjdCByZXByZXNlbnRhdGlvbiBvZg0KLSAqIG1heGltdW0gcmVkIGFuZCBtYXhpbXVtIGJsdWUgaW4gb3JkZXIgdG8gZ2V0IGV4YWN0IGdyYXlzY2FsZXMuDQotICoNCi0gKiBUbyBhdm9pZCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLCB3ZSByZXByZXNlbnQgdGhlIGZyYWN0aW9uYWwgY29uc3RhbnRzDQotICogYXMgaW50ZWdlcnMgc2NhbGVkIHVwIGJ5IDJeMTYgKGFib3V0IDQgZGlnaXRzIHByZWNpc2lvbik7IHdlIGhhdmUgdG8gZGl2aWRlDQotICogdGhlIHByb2R1Y3RzIGJ5IDJeMTYsIHdpdGggYXBwcm9wcmlhdGUgcm91bmRpbmcsIHRvIGdldCB0aGUgY29ycmVjdCBhbnN3ZXIuDQotICoNCi0gKiBGb3IgZXZlbiBtb3JlIHNwZWVkLCB3ZSBhdm9pZCBkb2luZyBhbnkgbXVsdGlwbGljYXRpb25zIGluIHRoZSBpbm5lciBsb29wDQotICogYnkgcHJlY2FsY3VsYXRpbmcgdGhlIGNvbnN0YW50cyB0aW1lcyBSLEcsQiBmb3IgYWxsIHBvc3NpYmxlIHZhbHVlcy4NCi0gKiBGb3IgOC1iaXQgSlNBTVBMRXMgdGhpcyBpcyB2ZXJ5IHJlYXNvbmFibGUgKG9ubHkgMjU2IGVudHJpZXMgcGVyIHRhYmxlKTsNCi0gKiBmb3IgMTItYml0IHNhbXBsZXMgaXQgaXMgc3RpbGwgYWNjZXB0YWJsZS4gIEl0J3Mgbm90IHZlcnkgcmVhc29uYWJsZSBmb3INCi0gKiAxNi1iaXQgc2FtcGxlcywgYnV0IGlmIHlvdSB3YW50IGxvc3NsZXNzIHN0b3JhZ2UgeW91IHNob3VsZG4ndCBiZSBjaGFuZ2luZw0KLSAqIGNvbG9yc3BhY2UgYW55d2F5Lg0KLSAqIFRoZSBDRU5URVJKU0FNUExFIG9mZnNldHMgYW5kIHRoZSByb3VuZGluZyBmdWRnZS1mYWN0b3Igb2YgMC41IGFyZSBpbmNsdWRlZA0KLSAqIGluIHRoZSB0YWJsZXMgdG8gc2F2ZSBhZGRpbmcgdGhlbSBzZXBhcmF0ZWx5IGluIHRoZSBpbm5lciBsb29wLg0KLSAqLw0KLQ0KLSNkZWZpbmUgU0NBTEVCSVRTCTE2CS8qIHNwZWVkaWVzdCByaWdodC1zaGlmdCBvbiBzb21lIG1hY2hpbmVzICovDQotI2RlZmluZSBDQkNSX09GRlNFVAkoKElOVDMyKSBDRU5URVJKU0FNUExFIDw8IFNDQUxFQklUUykNCi0jZGVmaW5lIE9ORV9IQUxGCSgoSU5UMzIpIDEgPDwgKFNDQUxFQklUUy0xKSkNCi0jZGVmaW5lIEZJWCh4KQkJKChJTlQzMikgKCh4KSAqICgxTDw8U0NBTEVCSVRTKSArIDAuNSkpDQotDQotLyogV2UgYWxsb2NhdGUgb25lIGJpZyB0YWJsZSBhbmQgZGl2aWRlIGl0IHVwIGludG8gZWlnaHQgcGFydHMsIGluc3RlYWQgb2YNCi0gKiBkb2luZyBlaWdodCBhbGxvY19zbWFsbCByZXF1ZXN0cy4gIFRoaXMgbGV0cyB1cyB1c2UgYSBzaW5nbGUgdGFibGUgYmFzZQ0KLSAqIGFkZHJlc3MsIHdoaWNoIGNhbiBiZSBoZWxkIGluIGEgcmVnaXN0ZXIgaW4gdGhlIGlubmVyIGxvb3BzIG9uIG1hbnkNCi0gKiBtYWNoaW5lcyAobW9yZSB0aGFuIGNhbiBob2xkIGFsbCBlaWdodCBhZGRyZXNzZXMsIGFueXdheSkuDQotICovDQotDQotI2RlZmluZSBSX1lfT0ZGCQkwCQkJLyogb2Zmc2V0IHRvIFIgPT4gWSBzZWN0aW9uICovDQotI2RlZmluZSBHX1lfT0ZGCQkoMSooTUFYSlNBTVBMRSsxKSkJLyogb2Zmc2V0IHRvIEcgPT4gWSBzZWN0aW9uICovDQotI2RlZmluZSBCX1lfT0ZGCQkoMiooTUFYSlNBTVBMRSsxKSkJLyogZXRjLiAqLw0KLSNkZWZpbmUgUl9DQl9PRkYJKDMqKE1BWEpTQU1QTEUrMSkpDQotI2RlZmluZSBHX0NCX09GRgkoNCooTUFYSlNBTVBMRSsxKSkNCi0jZGVmaW5lIEJfQ0JfT0ZGCSg1KihNQVhKU0FNUExFKzEpKQ0KLSNkZWZpbmUgUl9DUl9PRkYJQl9DQl9PRkYJCS8qIEI9PkNiLCBSPT5DciBhcmUgdGhlIHNhbWUgKi8NCi0jZGVmaW5lIEdfQ1JfT0ZGCSg2KihNQVhKU0FNUExFKzEpKQ0KLSNkZWZpbmUgQl9DUl9PRkYJKDcqKE1BWEpTQU1QTEUrMSkpDQotI2RlZmluZSBUQUJMRV9TSVpFCSg4KihNQVhKU0FNUExFKzEpKQ0KLQ0KLQ0KLS8qDQotICogSW5pdGlhbGl6ZSBmb3IgUkdCLT5ZQ0MgY29sb3JzcGFjZSBjb252ZXJzaW9uLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXJnYl95Y2Nfc3RhcnQgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIG15X2Njb252ZXJ0X3B0ciBjY29udmVydCA9IChteV9jY29udmVydF9wdHIpIGNpbmZvLT5jY29udmVydDsNCi0gIElOVDMyICogcmdiX3ljY190YWI7DQotICBJTlQzMiBpOw0KLQ0KLSAgLyogQWxsb2NhdGUgYW5kIGZpbGwgaW4gdGhlIGNvbnZlcnNpb24gdGFibGVzLiAqLw0KLSAgY2NvbnZlcnQtPnJnYl95Y2NfdGFiID0gcmdiX3ljY190YWIgPSAoSU5UMzIgKikNCi0gICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwNCi0JCQkJKFRBQkxFX1NJWkUgKiBTSVpFT0YoSU5UMzIpKSk7DQotDQotICBmb3IgKGkgPSAwOyBpIDw9IE1BWEpTQU1QTEU7IGkrKykgew0KLSAgICByZ2JfeWNjX3RhYltpK1JfWV9PRkZdID0gRklYKDAuMjk5MDApICogaTsNCi0gICAgcmdiX3ljY190YWJbaStHX1lfT0ZGXSA9IEZJWCgwLjU4NzAwKSAqIGk7DQotICAgIHJnYl95Y2NfdGFiW2krQl9ZX09GRl0gPSBGSVgoMC4xMTQwMCkgKiBpICAgICArIE9ORV9IQUxGOw0KLSAgICByZ2JfeWNjX3RhYltpK1JfQ0JfT0ZGXSA9ICgtRklYKDAuMTY4NzQpKSAqIGk7DQotICAgIHJnYl95Y2NfdGFiW2krR19DQl9PRkZdID0gKC1GSVgoMC4zMzEyNikpICogaTsNCi0gICAgLyogV2UgdXNlIGEgcm91bmRpbmcgZnVkZ2UtZmFjdG9yIG9mIDAuNS1lcHNpbG9uIGZvciBDYiBhbmQgQ3IuDQotICAgICAqIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBtYXhpbXVtIG91dHB1dCB3aWxsIHJvdW5kIHRvIE1BWEpTQU1QTEUNCi0gICAgICogbm90IE1BWEpTQU1QTEUrMSwgYW5kIHRodXMgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHJhbmdlLWxpbWl0Lg0KLSAgICAgKi8NCi0gICAgcmdiX3ljY190YWJbaStCX0NCX09GRl0gPSBGSVgoMC41MDAwMCkgKiBpICAgICsgQ0JDUl9PRkZTRVQgKyBPTkVfSEFMRi0xOw0KLS8qICBCPT5DYiBhbmQgUj0+Q3IgdGFibGVzIGFyZSB0aGUgc2FtZQ0KLSAgICByZ2JfeWNjX3RhYltpK1JfQ1JfT0ZGXSA9IEZJWCgwLjUwMDAwKSAqIGkgICAgKyBDQkNSX09GRlNFVCArIE9ORV9IQUxGLTE7DQotKi8NCi0gICAgcmdiX3ljY190YWJbaStHX0NSX09GRl0gPSAoLUZJWCgwLjQxODY5KSkgKiBpOw0KLSAgICByZ2JfeWNjX3RhYltpK0JfQ1JfT0ZGXSA9ICgtRklYKDAuMDgxMzEpKSAqIGk7DQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogQ29udmVydCBzb21lIHJvd3Mgb2Ygc2FtcGxlcyB0byB0aGUgSlBFRyBjb2xvcnNwYWNlLg0KLSAqDQotICogTm90ZSB0aGF0IHdlIGNoYW5nZSBmcm9tIHRoZSBhcHBsaWNhdGlvbidzIGludGVybGVhdmVkLXBpeGVsIGZvcm1hdA0KLSAqIHRvIG91ciBpbnRlcm5hbCBub25pbnRlcmxlYXZlZCwgb25lLXBsYW5lLXBlci1jb21wb25lbnQgZm9ybWF0Lg0KLSAqIFRoZSBpbnB1dCBidWZmZXIgaXMgdGhlcmVmb3JlIHRocmVlIHRpbWVzIGFzIHdpZGUgYXMgdGhlIG91dHB1dCBidWZmZXIuDQotICoNCi0gKiBBIHN0YXJ0aW5nIHJvdyBvZmZzZXQgaXMgcHJvdmlkZWQgb25seSBmb3IgdGhlIG91dHB1dCBidWZmZXIuICBUaGUgY2FsbGVyDQotICogY2FuIGVhc2lseSBhZGp1c3QgdGhlIHBhc3NlZCBpbnB1dF9idWYgdmFsdWUgdG8gYWNjb21tb2RhdGUgYW55IHJvdw0KLSAqIG9mZnNldCByZXF1aXJlZCBvbiB0aGF0IHNpZGUuDQotICovDQotDQotTUVUSE9EREVGKHZvaWQpDQotcmdiX3ljY19jb252ZXJ0IChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCSBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLA0KLQkJIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKQ0KLXsNCi0gIG15X2Njb252ZXJ0X3B0ciBjY29udmVydCA9IChteV9jY29udmVydF9wdHIpIGNpbmZvLT5jY29udmVydDsNCi0gIHJlZ2lzdGVyIGludCByLCBnLCBiOw0KLSAgcmVnaXN0ZXIgSU5UMzIgKiBjdGFiID0gY2NvbnZlcnQtPnJnYl95Y2NfdGFiOw0KLSAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHI7DQotICByZWdpc3RlciBKU0FNUFJPVyBvdXRwdHIwLCBvdXRwdHIxLCBvdXRwdHIyOw0KLSAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7DQotICBKRElNRU5TSU9OIG51bV9jb2xzID0gY2luZm8tPmltYWdlX3dpZHRoOw0KLQ0KLSAgd2hpbGUgKC0tbnVtX3Jvd3MgPj0gMCkgew0KLSAgICBpbnB0ciA9ICppbnB1dF9idWYrKzsNCi0gICAgb3V0cHRyMCA9IG91dHB1dF9idWZbMF1bb3V0cHV0X3Jvd107DQotICAgIG91dHB0cjEgPSBvdXRwdXRfYnVmWzFdW291dHB1dF9yb3ddOw0KLSAgICBvdXRwdHIyID0gb3V0cHV0X2J1ZlsyXVtvdXRwdXRfcm93XTsNCi0gICAgb3V0cHV0X3JvdysrOw0KLSAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IG51bV9jb2xzOyBjb2wrKykgew0KLSAgICAgIHIgPSBHRVRKU0FNUExFKGlucHRyW1JHQl9SRURdKTsNCi0gICAgICBnID0gR0VUSlNBTVBMRShpbnB0cltSR0JfR1JFRU5dKTsNCi0gICAgICBiID0gR0VUSlNBTVBMRShpbnB0cltSR0JfQkxVRV0pOw0KLSAgICAgIGlucHRyICs9IFJHQl9QSVhFTFNJWkU7DQotICAgICAgLyogSWYgdGhlIGlucHV0cyBhcmUgMC4uTUFYSlNBTVBMRSwgdGhlIG91dHB1dHMgb2YgdGhlc2UgZXF1YXRpb25zDQotICAgICAgICogbXVzdCBiZSB0b287IHdlIGRvIG5vdCBuZWVkIGFuIGV4cGxpY2l0IHJhbmdlLWxpbWl0aW5nIG9wZXJhdGlvbi4NCi0gICAgICAgKiBIZW5jZSB0aGUgdmFsdWUgYmVpbmcgc2hpZnRlZCBpcyBuZXZlciBuZWdhdGl2ZSwgYW5kIHdlIGRvbid0DQotICAgICAgICogbmVlZCB0aGUgZ2VuZXJhbCBSSUdIVF9TSElGVCBtYWNyby4NCi0gICAgICAgKi8NCi0gICAgICAvKiBZICovDQotICAgICAgb3V0cHRyMFtjb2xdID0gKEpTQU1QTEUpDQotCQkoKGN0YWJbcitSX1lfT0ZGXSArIGN0YWJbZytHX1lfT0ZGXSArIGN0YWJbYitCX1lfT0ZGXSkNCi0JCSA+PiBTQ0FMRUJJVFMpOw0KLSAgICAgIC8qIENiICovDQotICAgICAgb3V0cHRyMVtjb2xdID0gKEpTQU1QTEUpDQotCQkoKGN0YWJbcitSX0NCX09GRl0gKyBjdGFiW2crR19DQl9PRkZdICsgY3RhYltiK0JfQ0JfT0ZGXSkNCi0JCSA+PiBTQ0FMRUJJVFMpOw0KLSAgICAgIC8qIENyICovDQotICAgICAgb3V0cHRyMltjb2xdID0gKEpTQU1QTEUpDQotCQkoKGN0YWJbcitSX0NSX09GRl0gKyBjdGFiW2crR19DUl9PRkZdICsgY3RhYltiK0JfQ1JfT0ZGXSkNCi0JCSA+PiBTQ0FMRUJJVFMpOw0KLSAgICB9DQotICB9DQotfQ0KLQ0KLQ0KLS8qKioqKioqKioqKioqKioqIENhc2VzIG90aGVyIHRoYW4gUkdCIC0+IFlDYkNyICoqKioqKioqKioqKioqLw0KLQ0KLQ0KLS8qDQotICogQ29udmVydCBzb21lIHJvd3Mgb2Ygc2FtcGxlcyB0byB0aGUgSlBFRyBjb2xvcnNwYWNlLg0KLSAqIFRoaXMgdmVyc2lvbiBoYW5kbGVzIFJHQi0+Z3JheXNjYWxlIGNvbnZlcnNpb24sIHdoaWNoIGlzIHRoZSBzYW1lDQotICogYXMgdGhlIFJHQi0+WSBwb3J0aW9uIG9mIFJHQi0+WUNiQ3IuDQotICogV2UgYXNzdW1lIHJnYl95Y2Nfc3RhcnQgaGFzIGJlZW4gY2FsbGVkICh3ZSBvbmx5IHVzZSB0aGUgWSB0YWJsZXMpLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXJnYl9ncmF5X2NvbnZlcnQgKGpfY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLA0KLQkJICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykNCi17DQotICBteV9jY29udmVydF9wdHIgY2NvbnZlcnQgPSAobXlfY2NvbnZlcnRfcHRyKSBjaW5mby0+Y2NvbnZlcnQ7DQotICByZWdpc3RlciBpbnQgciwgZywgYjsNCi0gIHJlZ2lzdGVyIElOVDMyICogY3RhYiA9IGNjb252ZXJ0LT5yZ2JfeWNjX3RhYjsNCi0gIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyOw0KLSAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHRyOw0KLSAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7DQotICBKRElNRU5TSU9OIG51bV9jb2xzID0gY2luZm8tPmltYWdlX3dpZHRoOw0KLQ0KLSAgd2hpbGUgKC0tbnVtX3Jvd3MgPj0gMCkgew0KLSAgICBpbnB0ciA9ICppbnB1dF9idWYrKzsNCi0gICAgb3V0cHRyID0gb3V0cHV0X2J1ZlswXVtvdXRwdXRfcm93XTsNCi0gICAgb3V0cHV0X3JvdysrOw0KLSAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IG51bV9jb2xzOyBjb2wrKykgew0KLSAgICAgIHIgPSBHRVRKU0FNUExFKGlucHRyW1JHQl9SRURdKTsNCi0gICAgICBnID0gR0VUSlNBTVBMRShpbnB0cltSR0JfR1JFRU5dKTsNCi0gICAgICBiID0gR0VUSlNBTVBMRShpbnB0cltSR0JfQkxVRV0pOw0KLSAgICAgIGlucHRyICs9IFJHQl9QSVhFTFNJWkU7DQotICAgICAgLyogWSAqLw0KLSAgICAgIG91dHB0cltjb2xdID0gKEpTQU1QTEUpDQotCQkoKGN0YWJbcitSX1lfT0ZGXSArIGN0YWJbZytHX1lfT0ZGXSArIGN0YWJbYitCX1lfT0ZGXSkNCi0JCSA+PiBTQ0FMRUJJVFMpOw0KLSAgICB9DQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogQ29udmVydCBzb21lIHJvd3Mgb2Ygc2FtcGxlcyB0byB0aGUgSlBFRyBjb2xvcnNwYWNlLg0KLSAqIFRoaXMgdmVyc2lvbiBoYW5kbGVzIEFkb2JlLXN0eWxlIENNWUstPllDQ0sgY29udmVyc2lvbiwNCi0gKiB3aGVyZSB3ZSBjb252ZXJ0IFI9MS1DLCBHPTEtTSwgYW5kIEI9MS1ZIHRvIFlDYkNyIHVzaW5nIHRoZSBzYW1lDQotICogY29udmVyc2lvbiBhcyBhYm92ZSwgd2hpbGUgcGFzc2luZyBLIChibGFjaykgdW5jaGFuZ2VkLg0KLSAqIFdlIGFzc3VtZSByZ2JfeWNjX3N0YXJ0IGhhcyBiZWVuIGNhbGxlZC4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1jbXlrX3ljY2tfY29udmVydCAoal9jb21wcmVzc19wdHIgY2luZm8sDQotCQkgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLA0KLQkJICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpDQotew0KLSAgbXlfY2NvbnZlcnRfcHRyIGNjb252ZXJ0ID0gKG15X2Njb252ZXJ0X3B0cikgY2luZm8tPmNjb252ZXJ0Ow0KLSAgcmVnaXN0ZXIgaW50IHIsIGcsIGI7DQotICByZWdpc3RlciBJTlQzMiAqIGN0YWIgPSBjY29udmVydC0+cmdiX3ljY190YWI7DQotICByZWdpc3RlciBKU0FNUFJPVyBpbnB0cjsNCi0gIHJlZ2lzdGVyIEpTQU1QUk9XIG91dHB0cjAsIG91dHB0cjEsIG91dHB0cjIsIG91dHB0cjM7DQotICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsNCi0gIEpESU1FTlNJT04gbnVtX2NvbHMgPSBjaW5mby0+aW1hZ2Vfd2lkdGg7DQotDQotICB3aGlsZSAoLS1udW1fcm93cyA+PSAwKSB7DQotICAgIGlucHRyID0gKmlucHV0X2J1ZisrOw0KLSAgICBvdXRwdHIwID0gb3V0cHV0X2J1ZlswXVtvdXRwdXRfcm93XTsNCi0gICAgb3V0cHRyMSA9IG91dHB1dF9idWZbMV1bb3V0cHV0X3Jvd107DQotICAgIG91dHB0cjIgPSBvdXRwdXRfYnVmWzJdW291dHB1dF9yb3ddOw0KLSAgICBvdXRwdHIzID0gb3V0cHV0X2J1ZlszXVtvdXRwdXRfcm93XTsNCi0gICAgb3V0cHV0X3JvdysrOw0KLSAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IG51bV9jb2xzOyBjb2wrKykgew0KLSAgICAgIHIgPSBNQVhKU0FNUExFIC0gR0VUSlNBTVBMRShpbnB0clswXSk7DQotICAgICAgZyA9IE1BWEpTQU1QTEUgLSBHRVRKU0FNUExFKGlucHRyWzFdKTsNCi0gICAgICBiID0gTUFYSlNBTVBMRSAtIEdFVEpTQU1QTEUoaW5wdHJbMl0pOw0KLSAgICAgIC8qIEsgcGFzc2VzIHRocm91Z2ggYXMtaXMgKi8NCi0gICAgICBvdXRwdHIzW2NvbF0gPSBpbnB0clszXTsJLyogZG9uJ3QgbmVlZCBHRVRKU0FNUExFIGhlcmUgKi8NCi0gICAgICBpbnB0ciArPSA0Ow0KLSAgICAgIC8qIElmIHRoZSBpbnB1dHMgYXJlIDAuLk1BWEpTQU1QTEUsIHRoZSBvdXRwdXRzIG9mIHRoZXNlIGVxdWF0aW9ucw0KLSAgICAgICAqIG11c3QgYmUgdG9vOyB3ZSBkbyBub3QgbmVlZCBhbiBleHBsaWNpdCByYW5nZS1saW1pdGluZyBvcGVyYXRpb24uDQotICAgICAgICogSGVuY2UgdGhlIHZhbHVlIGJlaW5nIHNoaWZ0ZWQgaXMgbmV2ZXIgbmVnYXRpdmUsIGFuZCB3ZSBkb24ndA0KLSAgICAgICAqIG5lZWQgdGhlIGdlbmVyYWwgUklHSFRfU0hJRlQgbWFjcm8uDQotICAgICAgICovDQotICAgICAgLyogWSAqLw0KLSAgICAgIG91dHB0cjBbY29sXSA9IChKU0FNUExFKQ0KLQkJKChjdGFiW3IrUl9ZX09GRl0gKyBjdGFiW2crR19ZX09GRl0gKyBjdGFiW2IrQl9ZX09GRl0pDQotCQkgPj4gU0NBTEVCSVRTKTsNCi0gICAgICAvKiBDYiAqLw0KLSAgICAgIG91dHB0cjFbY29sXSA9IChKU0FNUExFKQ0KLQkJKChjdGFiW3IrUl9DQl9PRkZdICsgY3RhYltnK0dfQ0JfT0ZGXSArIGN0YWJbYitCX0NCX09GRl0pDQotCQkgPj4gU0NBTEVCSVRTKTsNCi0gICAgICAvKiBDciAqLw0KLSAgICAgIG91dHB0cjJbY29sXSA9IChKU0FNUExFKQ0KLQkJKChjdGFiW3IrUl9DUl9PRkZdICsgY3RhYltnK0dfQ1JfT0ZGXSArIGN0YWJbYitCX0NSX09GRl0pDQotCQkgPj4gU0NBTEVCSVRTKTsNCi0gICAgfQ0KLSAgfQ0KLX0NCi0NCi0NCi0vKg0KLSAqIENvbnZlcnQgc29tZSByb3dzIG9mIHNhbXBsZXMgdG8gdGhlIEpQRUcgY29sb3JzcGFjZS4NCi0gKiBUaGlzIHZlcnNpb24gaGFuZGxlcyBncmF5c2NhbGUgb3V0cHV0IHdpdGggbm8gY29udmVyc2lvbi4NCi0gKiBUaGUgc291cmNlIGNhbiBiZSBlaXRoZXIgcGxhaW4gZ3JheXNjYWxlIG9yIFlDYkNyIChzaW5jZSBZID09IGdyYXkpLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLWdyYXlzY2FsZV9jb252ZXJ0IChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCSAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsDQotCQkgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykNCi17DQotICByZWdpc3RlciBKU0FNUFJPVyBpbnB0cjsNCi0gIHJlZ2lzdGVyIEpTQU1QUk9XIG91dHB0cjsNCi0gIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sOw0KLSAgSkRJTUVOU0lPTiBudW1fY29scyA9IGNpbmZvLT5pbWFnZV93aWR0aDsNCi0gIGludCBpbnN0cmlkZSA9IGNpbmZvLT5pbnB1dF9jb21wb25lbnRzOw0KLQ0KLSAgd2hpbGUgKC0tbnVtX3Jvd3MgPj0gMCkgew0KLSAgICBpbnB0ciA9ICppbnB1dF9idWYrKzsNCi0gICAgb3V0cHRyID0gb3V0cHV0X2J1ZlswXVtvdXRwdXRfcm93XTsNCi0gICAgb3V0cHV0X3JvdysrOw0KLSAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IG51bV9jb2xzOyBjb2wrKykgew0KLSAgICAgIG91dHB0cltjb2xdID0gaW5wdHJbMF07CS8qIGRvbid0IG5lZWQgR0VUSlNBTVBMRSgpIGhlcmUgKi8NCi0gICAgICBpbnB0ciArPSBpbnN0cmlkZTsNCi0gICAgfQ0KLSAgfQ0KLX0NCi0NCi0NCi0vKg0KLSAqIENvbnZlcnQgc29tZSByb3dzIG9mIHNhbXBsZXMgdG8gdGhlIEpQRUcgY29sb3JzcGFjZS4NCi0gKiBUaGlzIHZlcnNpb24gaGFuZGxlcyBtdWx0aS1jb21wb25lbnQgY29sb3JzcGFjZXMgd2l0aG91dCBjb252ZXJzaW9uLg0KLSAqIFdlIGFzc3VtZSBpbnB1dF9jb21wb25lbnRzID09IG51bV9jb21wb25lbnRzLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLW51bGxfY29udmVydCAoal9jb21wcmVzc19wdHIgY2luZm8sDQotCSAgICAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsDQotCSAgICAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKQ0KLXsNCi0gIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyOw0KLSAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHRyOw0KLSAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7DQotICByZWdpc3RlciBpbnQgY2k7DQotICBpbnQgbmMgPSBjaW5mby0+bnVtX2NvbXBvbmVudHM7DQotICBKRElNRU5TSU9OIG51bV9jb2xzID0gY2luZm8tPmltYWdlX3dpZHRoOw0KLQ0KLSAgd2hpbGUgKC0tbnVtX3Jvd3MgPj0gMCkgew0KLSAgICAvKiBJdCBzZWVtcyBmYXN0ZXN0IHRvIG1ha2UgYSBzZXBhcmF0ZSBwYXNzIGZvciBlYWNoIGNvbXBvbmVudC4gKi8NCi0gICAgZm9yIChjaSA9IDA7IGNpIDwgbmM7IGNpKyspIHsNCi0gICAgICBpbnB0ciA9ICppbnB1dF9idWY7DQotICAgICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjaV1bb3V0cHV0X3Jvd107DQotICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBudW1fY29sczsgY29sKyspIHsNCi0Jb3V0cHRyW2NvbF0gPSBpbnB0cltjaV07IC8qIGRvbid0IG5lZWQgR0VUSlNBTVBMRSgpIGhlcmUgKi8NCi0JaW5wdHIgKz0gbmM7DQotICAgICAgfQ0KLSAgICB9DQotICAgIGlucHV0X2J1ZisrOw0KLSAgICBvdXRwdXRfcm93Kys7DQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogRW1wdHkgbWV0aG9kIGZvciBzdGFydF9wYXNzLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLW51bGxfbWV0aG9kIChqX2NvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICAvKiBubyB3b3JrIG5lZWRlZCAqLw0KLX0NCi0NCi0NCi0vKg0KLSAqIE1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciBpbnB1dCBjb2xvcnNwYWNlIGNvbnZlcnNpb24uDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotamluaXRfY29sb3JfY29udmVydGVyIChqX2NvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBteV9jY29udmVydF9wdHIgY2NvbnZlcnQ7DQotDQotICBjY29udmVydCA9IChteV9jY29udmVydF9wdHIpDQotICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsDQotCQkJCVNJWkVPRihteV9jb2xvcl9jb252ZXJ0ZXIpKTsNCi0gIGNpbmZvLT5jY29udmVydCA9IChzdHJ1Y3QganBlZ19jb2xvcl9jb252ZXJ0ZXIgKikgY2NvbnZlcnQ7DQotICAvKiBzZXQgc3RhcnRfcGFzcyB0byBudWxsIG1ldGhvZCB1bnRpbCB3ZSBmaW5kIG91dCBkaWZmZXJlbnRseSAqLw0KLSAgY2NvbnZlcnQtPnB1Yi5zdGFydF9wYXNzID0gbnVsbF9tZXRob2Q7DQotDQotICAvKiBNYWtlIHN1cmUgaW5wdXRfY29tcG9uZW50cyBhZ3JlZXMgd2l0aCBpbl9jb2xvcl9zcGFjZSAqLw0KLSAgc3dpdGNoIChjaW5mby0+aW5fY29sb3Jfc3BhY2UpIHsNCi0gIGNhc2UgSkNTX0dSQVlTQ0FMRToNCi0gICAgaWYgKGNpbmZvLT5pbnB1dF9jb21wb25lbnRzICE9IDEpDQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSU5fQ09MT1JTUEFDRSk7DQotICAgIGJyZWFrOw0KLQ0KLSAgY2FzZSBKQ1NfUkdCOg0KLSNpZiBSR0JfUElYRUxTSVpFICE9IDMNCi0gICAgaWYgKGNpbmZvLT5pbnB1dF9jb21wb25lbnRzICE9IFJHQl9QSVhFTFNJWkUpDQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSU5fQ09MT1JTUEFDRSk7DQotICAgIGJyZWFrOw0KLSNlbmRpZiAvKiBlbHNlIHNoYXJlIGNvZGUgd2l0aCBZQ2JDciAqLw0KLQ0KLSAgY2FzZSBKQ1NfWUNiQ3I6DQotICAgIGlmIChjaW5mby0+aW5wdXRfY29tcG9uZW50cyAhPSAzKQ0KLSAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0lOX0NPTE9SU1BBQ0UpOw0KLSAgICBicmVhazsNCi0NCi0gIGNhc2UgSkNTX0NNWUs6DQotICBjYXNlIEpDU19ZQ0NLOg0KLSAgICBpZiAoY2luZm8tPmlucHV0X2NvbXBvbmVudHMgIT0gNCkNCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9JTl9DT0xPUlNQQUNFKTsNCi0gICAgYnJlYWs7DQotDQotICBkZWZhdWx0OgkJCS8qIEpDU19VTktOT1dOIGNhbiBiZSBhbnl0aGluZyAqLw0KLSAgICBpZiAoY2luZm8tPmlucHV0X2NvbXBvbmVudHMgPCAxKQ0KLSAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0lOX0NPTE9SU1BBQ0UpOw0KLSAgICBicmVhazsNCi0gIH0NCi0NCi0gIC8qIENoZWNrIG51bV9jb21wb25lbnRzLCBzZXQgY29udmVyc2lvbiBtZXRob2QgYmFzZWQgb24gcmVxdWVzdGVkIHNwYWNlICovDQotICBzd2l0Y2ggKGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlKSB7DQotICBjYXNlIEpDU19HUkFZU0NBTEU6DQotICAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgIT0gMSkNCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9KX0NPTE9SU1BBQ0UpOw0KLSAgICBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19HUkFZU0NBTEUpDQotICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gZ3JheXNjYWxlX2NvbnZlcnQ7DQotICAgIGVsc2UgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCKSB7DQotICAgICAgY2NvbnZlcnQtPnB1Yi5zdGFydF9wYXNzID0gcmdiX3ljY19zdGFydDsNCi0gICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSByZ2JfZ3JheV9jb252ZXJ0Ow0KLSAgICB9IGVsc2UgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfWUNiQ3IpDQotICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gZ3JheXNjYWxlX2NvbnZlcnQ7DQotICAgIGVsc2UNCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NPTlZFUlNJT05fTk9USU1QTCk7DQotICAgIGJyZWFrOw0KLQ0KLSAgY2FzZSBKQ1NfUkdCOg0KLSAgICBpZiAoY2luZm8tPm51bV9jb21wb25lbnRzICE9IDMpDQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSl9DT0xPUlNQQUNFKTsNCi0gICAgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCICYmIFJHQl9QSVhFTFNJWkUgPT0gMykNCi0gICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSBudWxsX2NvbnZlcnQ7DQotICAgIGVsc2UNCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NPTlZFUlNJT05fTk9USU1QTCk7DQotICAgIGJyZWFrOw0KLQ0KLSAgY2FzZSBKQ1NfWUNiQ3I6DQotICAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgIT0gMykNCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9KX0NPTE9SU1BBQ0UpOw0KLSAgICBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19SR0IpIHsNCi0gICAgICBjY29udmVydC0+cHViLnN0YXJ0X3Bhc3MgPSByZ2JfeWNjX3N0YXJ0Ow0KLSAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IHJnYl95Y2NfY29udmVydDsNCi0gICAgfSBlbHNlIGlmIChjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX1lDYkNyKQ0KLSAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IG51bGxfY29udmVydDsNCi0gICAgZWxzZQ0KLSAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQ09OVkVSU0lPTl9OT1RJTVBMKTsNCi0gICAgYnJlYWs7DQotDQotICBjYXNlIEpDU19DTVlLOg0KLSAgICBpZiAoY2luZm8tPm51bV9jb21wb25lbnRzICE9IDQpDQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSl9DT0xPUlNQQUNFKTsNCi0gICAgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfQ01ZSykNCi0gICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSBudWxsX2NvbnZlcnQ7DQotICAgIGVsc2UNCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NPTlZFUlNJT05fTk9USU1QTCk7DQotICAgIGJyZWFrOw0KLQ0KLSAgY2FzZSBKQ1NfWUNDSzoNCi0gICAgaWYgKGNpbmZvLT5udW1fY29tcG9uZW50cyAhPSA0KQ0KLSAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0pfQ09MT1JTUEFDRSk7DQotICAgIGlmIChjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX0NNWUspIHsNCi0gICAgICBjY29udmVydC0+cHViLnN0YXJ0X3Bhc3MgPSByZ2JfeWNjX3N0YXJ0Ow0KLSAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IGNteWtfeWNja19jb252ZXJ0Ow0KLSAgICB9IGVsc2UgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfWUNDSykNCi0gICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSBudWxsX2NvbnZlcnQ7DQotICAgIGVsc2UNCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NPTlZFUlNJT05fTk9USU1QTCk7DQotICAgIGJyZWFrOw0KLQ0KLSAgZGVmYXVsdDoJCQkvKiBhbGxvdyBudWxsIGNvbnZlcnNpb24gb2YgSkNTX1VOS05PV04gKi8NCi0gICAgaWYgKGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlICE9IGNpbmZvLT5pbl9jb2xvcl9zcGFjZSB8fA0KLQljaW5mby0+bnVtX2NvbXBvbmVudHMgIT0gY2luZm8tPmlucHV0X2NvbXBvbmVudHMpDQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DT05WRVJTSU9OX05PVElNUEwpOw0KLSAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSBudWxsX2NvbnZlcnQ7DQotICAgIGJyZWFrOw0KLSAgfQ0KLX0NCi0NCi0jZW5kaWYgLy9fRlhfSlBFR19UVVJCT18NCisjaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQorLyoKKyAqIGpjY29sb3IuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGlucHV0IGNvbG9yc3BhY2UgY29udmVyc2lvbiByb3V0aW5lcy4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisKKworLyogUHJpdmF0ZSBzdWJvYmplY3QgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QganBlZ19jb2xvcl9jb252ZXJ0ZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCisKKyAgLyogUHJpdmF0ZSBzdGF0ZSBmb3IgUkdCLT5ZQ0MgY29udmVyc2lvbiAqLworICBJTlQzMiAqIHJnYl95Y2NfdGFiOwkJLyogPT4gdGFibGUgZm9yIFJHQiB0byBZQ2JDciBjb252ZXJzaW9uICovCit9IG15X2NvbG9yX2NvbnZlcnRlcjsKKwordHlwZWRlZiBteV9jb2xvcl9jb252ZXJ0ZXIgKiBteV9jY29udmVydF9wdHI7CisKKworLyoqKioqKioqKioqKioqKiogUkdCIC0+IFlDYkNyIGNvbnZlcnNpb246IG1vc3QgY29tbW9uIGNhc2UgKioqKioqKioqKioqKiovCisKKy8qCisgKiBZQ2JDciBpcyBkZWZpbmVkIHBlciBDQ0lSIDYwMS0xLCBleGNlcHQgdGhhdCBDYiBhbmQgQ3IgYXJlCisgKiBub3JtYWxpemVkIHRvIHRoZSByYW5nZSAwLi5NQVhKU0FNUExFIHJhdGhlciB0aGFuIC0wLjUgLi4gMC41LgorICogVGhlIGNvbnZlcnNpb24gZXF1YXRpb25zIHRvIGJlIGltcGxlbWVudGVkIGFyZSB0aGVyZWZvcmUKKyAqCVkgID0gIDAuMjk5MDAgKiBSICsgMC41ODcwMCAqIEcgKyAwLjExNDAwICogQgorICoJQ2IgPSAtMC4xNjg3NCAqIFIgLSAwLjMzMTI2ICogRyArIDAuNTAwMDAgKiBCICArIENFTlRFUkpTQU1QTEUKKyAqCUNyID0gIDAuNTAwMDAgKiBSIC0gMC40MTg2OSAqIEcgLSAwLjA4MTMxICogQiAgKyBDRU5URVJKU0FNUExFCisgKiAoVGhlc2UgbnVtYmVycyBhcmUgZGVyaXZlZCBmcm9tIFRJRkYgNi4wIHNlY3Rpb24gMjEsIGRhdGVkIDMtSnVuZS05Mi4pCisgKiBOb3RlOiBvbGRlciB2ZXJzaW9ucyBvZiB0aGUgSUpHIGNvZGUgdXNlZCBhIHplcm8gb2Zmc2V0IG9mIE1BWEpTQU1QTEUvMiwKKyAqIHJhdGhlciB0aGFuIENFTlRFUkpTQU1QTEUsIGZvciBDYiBhbmQgQ3IuICBUaGlzIGdhdmUgZXF1YWwgcG9zaXRpdmUgYW5kCisgKiBuZWdhdGl2ZSBzd2luZ3MgZm9yIENiL0NyLCBidXQgbWVhbnQgdGhhdCBncmF5c2NhbGUgdmFsdWVzIChDYj1Dcj0wKQorICogd2VyZSBub3QgcmVwcmVzZW50ZWQgZXhhY3RseS4gIE5vdyB3ZSBzYWNyaWZpY2UgZXhhY3QgcmVwcmVzZW50YXRpb24gb2YKKyAqIG1heGltdW0gcmVkIGFuZCBtYXhpbXVtIGJsdWUgaW4gb3JkZXIgdG8gZ2V0IGV4YWN0IGdyYXlzY2FsZXMuCisgKgorICogVG8gYXZvaWQgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYywgd2UgcmVwcmVzZW50IHRoZSBmcmFjdGlvbmFsIGNvbnN0YW50cworICogYXMgaW50ZWdlcnMgc2NhbGVkIHVwIGJ5IDJeMTYgKGFib3V0IDQgZGlnaXRzIHByZWNpc2lvbik7IHdlIGhhdmUgdG8gZGl2aWRlCisgKiB0aGUgcHJvZHVjdHMgYnkgMl4xNiwgd2l0aCBhcHByb3ByaWF0ZSByb3VuZGluZywgdG8gZ2V0IHRoZSBjb3JyZWN0IGFuc3dlci4KKyAqCisgKiBGb3IgZXZlbiBtb3JlIHNwZWVkLCB3ZSBhdm9pZCBkb2luZyBhbnkgbXVsdGlwbGljYXRpb25zIGluIHRoZSBpbm5lciBsb29wCisgKiBieSBwcmVjYWxjdWxhdGluZyB0aGUgY29uc3RhbnRzIHRpbWVzIFIsRyxCIGZvciBhbGwgcG9zc2libGUgdmFsdWVzLgorICogRm9yIDgtYml0IEpTQU1QTEVzIHRoaXMgaXMgdmVyeSByZWFzb25hYmxlIChvbmx5IDI1NiBlbnRyaWVzIHBlciB0YWJsZSk7CisgKiBmb3IgMTItYml0IHNhbXBsZXMgaXQgaXMgc3RpbGwgYWNjZXB0YWJsZS4gIEl0J3Mgbm90IHZlcnkgcmVhc29uYWJsZSBmb3IKKyAqIDE2LWJpdCBzYW1wbGVzLCBidXQgaWYgeW91IHdhbnQgbG9zc2xlc3Mgc3RvcmFnZSB5b3Ugc2hvdWxkbid0IGJlIGNoYW5naW5nCisgKiBjb2xvcnNwYWNlIGFueXdheS4KKyAqIFRoZSBDRU5URVJKU0FNUExFIG9mZnNldHMgYW5kIHRoZSByb3VuZGluZyBmdWRnZS1mYWN0b3Igb2YgMC41IGFyZSBpbmNsdWRlZAorICogaW4gdGhlIHRhYmxlcyB0byBzYXZlIGFkZGluZyB0aGVtIHNlcGFyYXRlbHkgaW4gdGhlIGlubmVyIGxvb3AuCisgKi8KKworI2RlZmluZSBTQ0FMRUJJVFMJMTYJLyogc3BlZWRpZXN0IHJpZ2h0LXNoaWZ0IG9uIHNvbWUgbWFjaGluZXMgKi8KKyNkZWZpbmUgQ0JDUl9PRkZTRVQJKChJTlQzMikgQ0VOVEVSSlNBTVBMRSA8PCBTQ0FMRUJJVFMpCisjZGVmaW5lIE9ORV9IQUxGCSgoSU5UMzIpIDEgPDwgKFNDQUxFQklUUy0xKSkKKyNkZWZpbmUgRklYKHgpCQkoKElOVDMyKSAoKHgpICogKDFMPDxTQ0FMRUJJVFMpICsgMC41KSkKKworLyogV2UgYWxsb2NhdGUgb25lIGJpZyB0YWJsZSBhbmQgZGl2aWRlIGl0IHVwIGludG8gZWlnaHQgcGFydHMsIGluc3RlYWQgb2YKKyAqIGRvaW5nIGVpZ2h0IGFsbG9jX3NtYWxsIHJlcXVlc3RzLiAgVGhpcyBsZXRzIHVzIHVzZSBhIHNpbmdsZSB0YWJsZSBiYXNlCisgKiBhZGRyZXNzLCB3aGljaCBjYW4gYmUgaGVsZCBpbiBhIHJlZ2lzdGVyIGluIHRoZSBpbm5lciBsb29wcyBvbiBtYW55CisgKiBtYWNoaW5lcyAobW9yZSB0aGFuIGNhbiBob2xkIGFsbCBlaWdodCBhZGRyZXNzZXMsIGFueXdheSkuCisgKi8KKworI2RlZmluZSBSX1lfT0ZGCQkwCQkJLyogb2Zmc2V0IHRvIFIgPT4gWSBzZWN0aW9uICovCisjZGVmaW5lIEdfWV9PRkYJCSgxKihNQVhKU0FNUExFKzEpKQkvKiBvZmZzZXQgdG8gRyA9PiBZIHNlY3Rpb24gKi8KKyNkZWZpbmUgQl9ZX09GRgkJKDIqKE1BWEpTQU1QTEUrMSkpCS8qIGV0Yy4gKi8KKyNkZWZpbmUgUl9DQl9PRkYJKDMqKE1BWEpTQU1QTEUrMSkpCisjZGVmaW5lIEdfQ0JfT0ZGCSg0KihNQVhKU0FNUExFKzEpKQorI2RlZmluZSBCX0NCX09GRgkoNSooTUFYSlNBTVBMRSsxKSkKKyNkZWZpbmUgUl9DUl9PRkYJQl9DQl9PRkYJCS8qIEI9PkNiLCBSPT5DciBhcmUgdGhlIHNhbWUgKi8KKyNkZWZpbmUgR19DUl9PRkYJKDYqKE1BWEpTQU1QTEUrMSkpCisjZGVmaW5lIEJfQ1JfT0ZGCSg3KihNQVhKU0FNUExFKzEpKQorI2RlZmluZSBUQUJMRV9TSVpFCSg4KihNQVhKU0FNUExFKzEpKQorCisKKy8qCisgKiBJbml0aWFsaXplIGZvciBSR0ItPllDQyBjb2xvcnNwYWNlIGNvbnZlcnNpb24uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCityZ2JfeWNjX3N0YXJ0IChqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfY2NvbnZlcnRfcHRyIGNjb252ZXJ0ID0gKG15X2Njb252ZXJ0X3B0cikgY2luZm8tPmNjb252ZXJ0OworICBJTlQzMiAqIHJnYl95Y2NfdGFiOworICBJTlQzMiBpOworCisgIC8qIEFsbG9jYXRlIGFuZCBmaWxsIGluIHRoZSBjb252ZXJzaW9uIHRhYmxlcy4gKi8KKyAgY2NvbnZlcnQtPnJnYl95Y2NfdGFiID0gcmdiX3ljY190YWIgPSAoSU5UMzIgKikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCShUQUJMRV9TSVpFICogU0laRU9GKElOVDMyKSkpOworCisgIGZvciAoaSA9IDA7IGkgPD0gTUFYSlNBTVBMRTsgaSsrKSB7CisgICAgcmdiX3ljY190YWJbaStSX1lfT0ZGXSA9IEZJWCgwLjI5OTAwKSAqIGk7CisgICAgcmdiX3ljY190YWJbaStHX1lfT0ZGXSA9IEZJWCgwLjU4NzAwKSAqIGk7CisgICAgcmdiX3ljY190YWJbaStCX1lfT0ZGXSA9IEZJWCgwLjExNDAwKSAqIGkgICAgICsgT05FX0hBTEY7CisgICAgcmdiX3ljY190YWJbaStSX0NCX09GRl0gPSAoLUZJWCgwLjE2ODc0KSkgKiBpOworICAgIHJnYl95Y2NfdGFiW2krR19DQl9PRkZdID0gKC1GSVgoMC4zMzEyNikpICogaTsKKyAgICAvKiBXZSB1c2UgYSByb3VuZGluZyBmdWRnZS1mYWN0b3Igb2YgMC41LWVwc2lsb24gZm9yIENiIGFuZCBDci4KKyAgICAgKiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgbWF4aW11bSBvdXRwdXQgd2lsbCByb3VuZCB0byBNQVhKU0FNUExFCisgICAgICogbm90IE1BWEpTQU1QTEUrMSwgYW5kIHRodXMgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHJhbmdlLWxpbWl0LgorICAgICAqLworICAgIHJnYl95Y2NfdGFiW2krQl9DQl9PRkZdID0gRklYKDAuNTAwMDApICogaSAgICArIENCQ1JfT0ZGU0VUICsgT05FX0hBTEYtMTsKKy8qICBCPT5DYiBhbmQgUj0+Q3IgdGFibGVzIGFyZSB0aGUgc2FtZQorICAgIHJnYl95Y2NfdGFiW2krUl9DUl9PRkZdID0gRklYKDAuNTAwMDApICogaSAgICArIENCQ1JfT0ZGU0VUICsgT05FX0hBTEYtMTsKKyovCisgICAgcmdiX3ljY190YWJbaStHX0NSX09GRl0gPSAoLUZJWCgwLjQxODY5KSkgKiBpOworICAgIHJnYl95Y2NfdGFiW2krQl9DUl9PRkZdID0gKC1GSVgoMC4wODEzMSkpICogaTsKKyAgfQorfQorCisKKy8qCisgKiBDb252ZXJ0IHNvbWUgcm93cyBvZiBzYW1wbGVzIHRvIHRoZSBKUEVHIGNvbG9yc3BhY2UuCisgKgorICogTm90ZSB0aGF0IHdlIGNoYW5nZSBmcm9tIHRoZSBhcHBsaWNhdGlvbidzIGludGVybGVhdmVkLXBpeGVsIGZvcm1hdAorICogdG8gb3VyIGludGVybmFsIG5vbmludGVybGVhdmVkLCBvbmUtcGxhbmUtcGVyLWNvbXBvbmVudCBmb3JtYXQuCisgKiBUaGUgaW5wdXQgYnVmZmVyIGlzIHRoZXJlZm9yZSB0aHJlZSB0aW1lcyBhcyB3aWRlIGFzIHRoZSBvdXRwdXQgYnVmZmVyLgorICoKKyAqIEEgc3RhcnRpbmcgcm93IG9mZnNldCBpcyBwcm92aWRlZCBvbmx5IGZvciB0aGUgb3V0cHV0IGJ1ZmZlci4gIFRoZSBjYWxsZXIKKyAqIGNhbiBlYXNpbHkgYWRqdXN0IHRoZSBwYXNzZWQgaW5wdXRfYnVmIHZhbHVlIHRvIGFjY29tbW9kYXRlIGFueSByb3cKKyAqIG9mZnNldCByZXF1aXJlZCBvbiB0aGF0IHNpZGUuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCityZ2JfeWNjX2NvbnZlcnQgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorCQkgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKwkJIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKQoreworICBteV9jY29udmVydF9wdHIgY2NvbnZlcnQgPSAobXlfY2NvbnZlcnRfcHRyKSBjaW5mby0+Y2NvbnZlcnQ7CisgIHJlZ2lzdGVyIGludCByLCBnLCBiOworICByZWdpc3RlciBJTlQzMiAqIGN0YWIgPSBjY29udmVydC0+cmdiX3ljY190YWI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyOworICByZWdpc3RlciBKU0FNUFJPVyBvdXRwdHIwLCBvdXRwdHIxLCBvdXRwdHIyOworICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsKKyAgSkRJTUVOU0lPTiBudW1fY29scyA9IGNpbmZvLT5pbWFnZV93aWR0aDsKKworICB3aGlsZSAoLS1udW1fcm93cyA+PSAwKSB7CisgICAgaW5wdHIgPSAqaW5wdXRfYnVmKys7CisgICAgb3V0cHRyMCA9IG91dHB1dF9idWZbMF1bb3V0cHV0X3Jvd107CisgICAgb3V0cHRyMSA9IG91dHB1dF9idWZbMV1bb3V0cHV0X3Jvd107CisgICAgb3V0cHRyMiA9IG91dHB1dF9idWZbMl1bb3V0cHV0X3Jvd107CisgICAgb3V0cHV0X3JvdysrOworICAgIGZvciAoY29sID0gMDsgY29sIDwgbnVtX2NvbHM7IGNvbCsrKSB7CisgICAgICByID0gR0VUSlNBTVBMRShpbnB0cltSR0JfUkVEXSk7CisgICAgICBnID0gR0VUSlNBTVBMRShpbnB0cltSR0JfR1JFRU5dKTsKKyAgICAgIGIgPSBHRVRKU0FNUExFKGlucHRyW1JHQl9CTFVFXSk7CisgICAgICBpbnB0ciArPSBSR0JfUElYRUxTSVpFOworICAgICAgLyogSWYgdGhlIGlucHV0cyBhcmUgMC4uTUFYSlNBTVBMRSwgdGhlIG91dHB1dHMgb2YgdGhlc2UgZXF1YXRpb25zCisgICAgICAgKiBtdXN0IGJlIHRvbzsgd2UgZG8gbm90IG5lZWQgYW4gZXhwbGljaXQgcmFuZ2UtbGltaXRpbmcgb3BlcmF0aW9uLgorICAgICAgICogSGVuY2UgdGhlIHZhbHVlIGJlaW5nIHNoaWZ0ZWQgaXMgbmV2ZXIgbmVnYXRpdmUsIGFuZCB3ZSBkb24ndAorICAgICAgICogbmVlZCB0aGUgZ2VuZXJhbCBSSUdIVF9TSElGVCBtYWNyby4KKyAgICAgICAqLworICAgICAgLyogWSAqLworICAgICAgb3V0cHRyMFtjb2xdID0gKEpTQU1QTEUpCisJCSgoY3RhYltyK1JfWV9PRkZdICsgY3RhYltnK0dfWV9PRkZdICsgY3RhYltiK0JfWV9PRkZdKQorCQkgPj4gU0NBTEVCSVRTKTsKKyAgICAgIC8qIENiICovCisgICAgICBvdXRwdHIxW2NvbF0gPSAoSlNBTVBMRSkKKwkJKChjdGFiW3IrUl9DQl9PRkZdICsgY3RhYltnK0dfQ0JfT0ZGXSArIGN0YWJbYitCX0NCX09GRl0pCisJCSA+PiBTQ0FMRUJJVFMpOworICAgICAgLyogQ3IgKi8KKyAgICAgIG91dHB0cjJbY29sXSA9IChKU0FNUExFKQorCQkoKGN0YWJbcitSX0NSX09GRl0gKyBjdGFiW2crR19DUl9PRkZdICsgY3RhYltiK0JfQ1JfT0ZGXSkKKwkJID4+IFNDQUxFQklUUyk7CisgICAgfQorICB9Cit9CisKKworLyoqKioqKioqKioqKioqKiogQ2FzZXMgb3RoZXIgdGhhbiBSR0IgLT4gWUNiQ3IgKioqKioqKioqKioqKiovCisKKworLyoKKyAqIENvbnZlcnQgc29tZSByb3dzIG9mIHNhbXBsZXMgdG8gdGhlIEpQRUcgY29sb3JzcGFjZS4KKyAqIFRoaXMgdmVyc2lvbiBoYW5kbGVzIFJHQi0+Z3JheXNjYWxlIGNvbnZlcnNpb24sIHdoaWNoIGlzIHRoZSBzYW1lCisgKiBhcyB0aGUgUkdCLT5ZIHBvcnRpb24gb2YgUkdCLT5ZQ2JDci4KKyAqIFdlIGFzc3VtZSByZ2JfeWNjX3N0YXJ0IGhhcyBiZWVuIGNhbGxlZCAod2Ugb25seSB1c2UgdGhlIFkgdGFibGVzKS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3JnYl9ncmF5X2NvbnZlcnQgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorCQkgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisJCSAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpCit7CisgIG15X2Njb252ZXJ0X3B0ciBjY29udmVydCA9IChteV9jY29udmVydF9wdHIpIGNpbmZvLT5jY29udmVydDsKKyAgcmVnaXN0ZXIgaW50IHIsIGcsIGI7CisgIHJlZ2lzdGVyIElOVDMyICogY3RhYiA9IGNjb252ZXJ0LT5yZ2JfeWNjX3RhYjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIG91dHB0cjsKKyAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7CisgIEpESU1FTlNJT04gbnVtX2NvbHMgPSBjaW5mby0+aW1hZ2Vfd2lkdGg7CisKKyAgd2hpbGUgKC0tbnVtX3Jvd3MgPj0gMCkgeworICAgIGlucHRyID0gKmlucHV0X2J1ZisrOworICAgIG91dHB0ciA9IG91dHB1dF9idWZbMF1bb3V0cHV0X3Jvd107CisgICAgb3V0cHV0X3JvdysrOworICAgIGZvciAoY29sID0gMDsgY29sIDwgbnVtX2NvbHM7IGNvbCsrKSB7CisgICAgICByID0gR0VUSlNBTVBMRShpbnB0cltSR0JfUkVEXSk7CisgICAgICBnID0gR0VUSlNBTVBMRShpbnB0cltSR0JfR1JFRU5dKTsKKyAgICAgIGIgPSBHRVRKU0FNUExFKGlucHRyW1JHQl9CTFVFXSk7CisgICAgICBpbnB0ciArPSBSR0JfUElYRUxTSVpFOworICAgICAgLyogWSAqLworICAgICAgb3V0cHRyW2NvbF0gPSAoSlNBTVBMRSkKKwkJKChjdGFiW3IrUl9ZX09GRl0gKyBjdGFiW2crR19ZX09GRl0gKyBjdGFiW2IrQl9ZX09GRl0pCisJCSA+PiBTQ0FMRUJJVFMpOworICAgIH0KKyAgfQorfQorCisKKy8qCisgKiBDb252ZXJ0IHNvbWUgcm93cyBvZiBzYW1wbGVzIHRvIHRoZSBKUEVHIGNvbG9yc3BhY2UuCisgKiBUaGlzIHZlcnNpb24gaGFuZGxlcyBBZG9iZS1zdHlsZSBDTVlLLT5ZQ0NLIGNvbnZlcnNpb24sCisgKiB3aGVyZSB3ZSBjb252ZXJ0IFI9MS1DLCBHPTEtTSwgYW5kIEI9MS1ZIHRvIFlDYkNyIHVzaW5nIHRoZSBzYW1lCisgKiBjb252ZXJzaW9uIGFzIGFib3ZlLCB3aGlsZSBwYXNzaW5nIEsgKGJsYWNrKSB1bmNoYW5nZWQuCisgKiBXZSBhc3N1bWUgcmdiX3ljY19zdGFydCBoYXMgYmVlbiBjYWxsZWQuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitjbXlrX3ljY2tfY29udmVydCAoal9jb21wcmVzc19wdHIgY2luZm8sCisJCSAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisJCSAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKQoreworICBteV9jY29udmVydF9wdHIgY2NvbnZlcnQgPSAobXlfY2NvbnZlcnRfcHRyKSBjaW5mby0+Y2NvbnZlcnQ7CisgIHJlZ2lzdGVyIGludCByLCBnLCBiOworICByZWdpc3RlciBJTlQzMiAqIGN0YWIgPSBjY29udmVydC0+cmdiX3ljY190YWI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyOworICByZWdpc3RlciBKU0FNUFJPVyBvdXRwdHIwLCBvdXRwdHIxLCBvdXRwdHIyLCBvdXRwdHIzOworICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsKKyAgSkRJTUVOU0lPTiBudW1fY29scyA9IGNpbmZvLT5pbWFnZV93aWR0aDsKKworICB3aGlsZSAoLS1udW1fcm93cyA+PSAwKSB7CisgICAgaW5wdHIgPSAqaW5wdXRfYnVmKys7CisgICAgb3V0cHRyMCA9IG91dHB1dF9idWZbMF1bb3V0cHV0X3Jvd107CisgICAgb3V0cHRyMSA9IG91dHB1dF9idWZbMV1bb3V0cHV0X3Jvd107CisgICAgb3V0cHRyMiA9IG91dHB1dF9idWZbMl1bb3V0cHV0X3Jvd107CisgICAgb3V0cHRyMyA9IG91dHB1dF9idWZbM11bb3V0cHV0X3Jvd107CisgICAgb3V0cHV0X3JvdysrOworICAgIGZvciAoY29sID0gMDsgY29sIDwgbnVtX2NvbHM7IGNvbCsrKSB7CisgICAgICByID0gTUFYSlNBTVBMRSAtIEdFVEpTQU1QTEUoaW5wdHJbMF0pOworICAgICAgZyA9IE1BWEpTQU1QTEUgLSBHRVRKU0FNUExFKGlucHRyWzFdKTsKKyAgICAgIGIgPSBNQVhKU0FNUExFIC0gR0VUSlNBTVBMRShpbnB0clsyXSk7CisgICAgICAvKiBLIHBhc3NlcyB0aHJvdWdoIGFzLWlzICovCisgICAgICBvdXRwdHIzW2NvbF0gPSBpbnB0clszXTsJLyogZG9uJ3QgbmVlZCBHRVRKU0FNUExFIGhlcmUgKi8KKyAgICAgIGlucHRyICs9IDQ7CisgICAgICAvKiBJZiB0aGUgaW5wdXRzIGFyZSAwLi5NQVhKU0FNUExFLCB0aGUgb3V0cHV0cyBvZiB0aGVzZSBlcXVhdGlvbnMKKyAgICAgICAqIG11c3QgYmUgdG9vOyB3ZSBkbyBub3QgbmVlZCBhbiBleHBsaWNpdCByYW5nZS1saW1pdGluZyBvcGVyYXRpb24uCisgICAgICAgKiBIZW5jZSB0aGUgdmFsdWUgYmVpbmcgc2hpZnRlZCBpcyBuZXZlciBuZWdhdGl2ZSwgYW5kIHdlIGRvbid0CisgICAgICAgKiBuZWVkIHRoZSBnZW5lcmFsIFJJR0hUX1NISUZUIG1hY3JvLgorICAgICAgICovCisgICAgICAvKiBZICovCisgICAgICBvdXRwdHIwW2NvbF0gPSAoSlNBTVBMRSkKKwkJKChjdGFiW3IrUl9ZX09GRl0gKyBjdGFiW2crR19ZX09GRl0gKyBjdGFiW2IrQl9ZX09GRl0pCisJCSA+PiBTQ0FMRUJJVFMpOworICAgICAgLyogQ2IgKi8KKyAgICAgIG91dHB0cjFbY29sXSA9IChKU0FNUExFKQorCQkoKGN0YWJbcitSX0NCX09GRl0gKyBjdGFiW2crR19DQl9PRkZdICsgY3RhYltiK0JfQ0JfT0ZGXSkKKwkJID4+IFNDQUxFQklUUyk7CisgICAgICAvKiBDciAqLworICAgICAgb3V0cHRyMltjb2xdID0gKEpTQU1QTEUpCisJCSgoY3RhYltyK1JfQ1JfT0ZGXSArIGN0YWJbZytHX0NSX09GRl0gKyBjdGFiW2IrQl9DUl9PRkZdKQorCQkgPj4gU0NBTEVCSVRTKTsKKyAgICB9CisgIH0KK30KKworCisvKgorICogQ29udmVydCBzb21lIHJvd3Mgb2Ygc2FtcGxlcyB0byB0aGUgSlBFRyBjb2xvcnNwYWNlLgorICogVGhpcyB2ZXJzaW9uIGhhbmRsZXMgZ3JheXNjYWxlIG91dHB1dCB3aXRoIG5vIGNvbnZlcnNpb24uCisgKiBUaGUgc291cmNlIGNhbiBiZSBlaXRoZXIgcGxhaW4gZ3JheXNjYWxlIG9yIFlDYkNyIChzaW5jZSBZID09IGdyYXkpLgorICovCisKK01FVEhPRERFRih2b2lkKQorZ3JheXNjYWxlX2NvbnZlcnQgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorCQkgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorCQkgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykKK3sKKyAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIG91dHB0cjsKKyAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7CisgIEpESU1FTlNJT04gbnVtX2NvbHMgPSBjaW5mby0+aW1hZ2Vfd2lkdGg7CisgIGludCBpbnN0cmlkZSA9IGNpbmZvLT5pbnB1dF9jb21wb25lbnRzOworCisgIHdoaWxlICgtLW51bV9yb3dzID49IDApIHsKKyAgICBpbnB0ciA9ICppbnB1dF9idWYrKzsKKyAgICBvdXRwdHIgPSBvdXRwdXRfYnVmWzBdW291dHB1dF9yb3ddOworICAgIG91dHB1dF9yb3crKzsKKyAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IG51bV9jb2xzOyBjb2wrKykgeworICAgICAgb3V0cHRyW2NvbF0gPSBpbnB0clswXTsJLyogZG9uJ3QgbmVlZCBHRVRKU0FNUExFKCkgaGVyZSAqLworICAgICAgaW5wdHIgKz0gaW5zdHJpZGU7CisgICAgfQorICB9Cit9CisKKworLyoKKyAqIENvbnZlcnQgc29tZSByb3dzIG9mIHNhbXBsZXMgdG8gdGhlIEpQRUcgY29sb3JzcGFjZS4KKyAqIFRoaXMgdmVyc2lvbiBoYW5kbGVzIG11bHRpLWNvbXBvbmVudCBjb2xvcnNwYWNlcyB3aXRob3V0IGNvbnZlcnNpb24uCisgKiBXZSBhc3N1bWUgaW5wdXRfY29tcG9uZW50cyA9PSBudW1fY29tcG9uZW50cy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK251bGxfY29udmVydCAoal9jb21wcmVzc19wdHIgY2luZm8sCisJICAgICAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKwkgICAgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykKK3sKKyAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIG91dHB0cjsKKyAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7CisgIHJlZ2lzdGVyIGludCBjaTsKKyAgaW50IG5jID0gY2luZm8tPm51bV9jb21wb25lbnRzOworICBKRElNRU5TSU9OIG51bV9jb2xzID0gY2luZm8tPmltYWdlX3dpZHRoOworCisgIHdoaWxlICgtLW51bV9yb3dzID49IDApIHsKKyAgICAvKiBJdCBzZWVtcyBmYXN0ZXN0IHRvIG1ha2UgYSBzZXBhcmF0ZSBwYXNzIGZvciBlYWNoIGNvbXBvbmVudC4gKi8KKyAgICBmb3IgKGNpID0gMDsgY2kgPCBuYzsgY2krKykgeworICAgICAgaW5wdHIgPSAqaW5wdXRfYnVmOworICAgICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjaV1bb3V0cHV0X3Jvd107CisgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IG51bV9jb2xzOyBjb2wrKykgeworCW91dHB0cltjb2xdID0gaW5wdHJbY2ldOyAvKiBkb24ndCBuZWVkIEdFVEpTQU1QTEUoKSBoZXJlICovCisJaW5wdHIgKz0gbmM7CisgICAgICB9CisgICAgfQorICAgIGlucHV0X2J1ZisrOworICAgIG91dHB1dF9yb3crKzsKKyAgfQorfQorCisKKy8qCisgKiBFbXB0eSBtZXRob2QgZm9yIHN0YXJ0X3Bhc3MuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitudWxsX21ldGhvZCAoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIC8qIG5vIHdvcmsgbmVlZGVkICovCit9CisKKworLyoKKyAqIE1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciBpbnB1dCBjb2xvcnNwYWNlIGNvbnZlcnNpb24uCisgKi8KKworR0xPQkFMKHZvaWQpCitqaW5pdF9jb2xvcl9jb252ZXJ0ZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9jY29udmVydF9wdHIgY2NvbnZlcnQ7CisKKyAgY2NvbnZlcnQgPSAobXlfY2NvbnZlcnRfcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJU0laRU9GKG15X2NvbG9yX2NvbnZlcnRlcikpOworICBjaW5mby0+Y2NvbnZlcnQgPSAoc3RydWN0IGpwZWdfY29sb3JfY29udmVydGVyICopIGNjb252ZXJ0OworICAvKiBzZXQgc3RhcnRfcGFzcyB0byBudWxsIG1ldGhvZCB1bnRpbCB3ZSBmaW5kIG91dCBkaWZmZXJlbnRseSAqLworICBjY29udmVydC0+cHViLnN0YXJ0X3Bhc3MgPSBudWxsX21ldGhvZDsKKworICAvKiBNYWtlIHN1cmUgaW5wdXRfY29tcG9uZW50cyBhZ3JlZXMgd2l0aCBpbl9jb2xvcl9zcGFjZSAqLworICBzd2l0Y2ggKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSkgeworICBjYXNlIEpDU19HUkFZU0NBTEU6CisgICAgaWYgKGNpbmZvLT5pbnB1dF9jb21wb25lbnRzICE9IDEpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9JTl9DT0xPUlNQQUNFKTsKKyAgICBicmVhazsKKworICBjYXNlIEpDU19SR0I6CisjaWYgUkdCX1BJWEVMU0laRSAhPSAzCisgICAgaWYgKGNpbmZvLT5pbnB1dF9jb21wb25lbnRzICE9IFJHQl9QSVhFTFNJWkUpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9JTl9DT0xPUlNQQUNFKTsKKyAgICBicmVhazsKKyNlbmRpZiAvKiBlbHNlIHNoYXJlIGNvZGUgd2l0aCBZQ2JDciAqLworCisgIGNhc2UgSkNTX1lDYkNyOgorICAgIGlmIChjaW5mby0+aW5wdXRfY29tcG9uZW50cyAhPSAzKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSU5fQ09MT1JTUEFDRSk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBKQ1NfQ01ZSzoKKyAgY2FzZSBKQ1NfWUNDSzoKKyAgICBpZiAoY2luZm8tPmlucHV0X2NvbXBvbmVudHMgIT0gNCkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0lOX0NPTE9SU1BBQ0UpOworICAgIGJyZWFrOworCisgIGRlZmF1bHQ6CQkJLyogSkNTX1VOS05PV04gY2FuIGJlIGFueXRoaW5nICovCisgICAgaWYgKGNpbmZvLT5pbnB1dF9jb21wb25lbnRzIDwgMSkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0lOX0NPTE9SU1BBQ0UpOworICAgIGJyZWFrOworICB9CisKKyAgLyogQ2hlY2sgbnVtX2NvbXBvbmVudHMsIHNldCBjb252ZXJzaW9uIG1ldGhvZCBiYXNlZCBvbiByZXF1ZXN0ZWQgc3BhY2UgKi8KKyAgc3dpdGNoIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSkgeworICBjYXNlIEpDU19HUkFZU0NBTEU6CisgICAgaWYgKGNpbmZvLT5udW1fY29tcG9uZW50cyAhPSAxKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSl9DT0xPUlNQQUNFKTsKKyAgICBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19HUkFZU0NBTEUpCisgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSBncmF5c2NhbGVfY29udmVydDsKKyAgICBlbHNlIGlmIChjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX1JHQikgeworICAgICAgY2NvbnZlcnQtPnB1Yi5zdGFydF9wYXNzID0gcmdiX3ljY19zdGFydDsKKyAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IHJnYl9ncmF5X2NvbnZlcnQ7CisgICAgfSBlbHNlIGlmIChjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX1lDYkNyKQorICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gZ3JheXNjYWxlX2NvbnZlcnQ7CisgICAgZWxzZQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DT05WRVJTSU9OX05PVElNUEwpOworICAgIGJyZWFrOworCisgIGNhc2UgSkNTX1JHQjoKKyAgICBpZiAoY2luZm8tPm51bV9jb21wb25lbnRzICE9IDMpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9KX0NPTE9SU1BBQ0UpOworICAgIGlmIChjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX1JHQiAmJiBSR0JfUElYRUxTSVpFID09IDMpCisgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSBudWxsX2NvbnZlcnQ7CisgICAgZWxzZQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DT05WRVJTSU9OX05PVElNUEwpOworICAgIGJyZWFrOworCisgIGNhc2UgSkNTX1lDYkNyOgorICAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgIT0gMykKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0pfQ09MT1JTUEFDRSk7CisgICAgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCKSB7CisgICAgICBjY29udmVydC0+cHViLnN0YXJ0X3Bhc3MgPSByZ2JfeWNjX3N0YXJ0OworICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gcmdiX3ljY19jb252ZXJ0OworICAgIH0gZWxzZSBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19ZQ2JDcikKKyAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IG51bGxfY29udmVydDsKKyAgICBlbHNlCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NPTlZFUlNJT05fTk9USU1QTCk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBKQ1NfQ01ZSzoKKyAgICBpZiAoY2luZm8tPm51bV9jb21wb25lbnRzICE9IDQpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9KX0NPTE9SU1BBQ0UpOworICAgIGlmIChjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX0NNWUspCisgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSBudWxsX2NvbnZlcnQ7CisgICAgZWxzZQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DT05WRVJTSU9OX05PVElNUEwpOworICAgIGJyZWFrOworCisgIGNhc2UgSkNTX1lDQ0s6CisgICAgaWYgKGNpbmZvLT5udW1fY29tcG9uZW50cyAhPSA0KQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSl9DT0xPUlNQQUNFKTsKKyAgICBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19DTVlLKSB7CisgICAgICBjY29udmVydC0+cHViLnN0YXJ0X3Bhc3MgPSByZ2JfeWNjX3N0YXJ0OworICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gY215a195Y2NrX2NvbnZlcnQ7CisgICAgfSBlbHNlIGlmIChjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX1lDQ0spCisgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSBudWxsX2NvbnZlcnQ7CisgICAgZWxzZQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DT05WRVJTSU9OX05PVElNUEwpOworICAgIGJyZWFrOworCisgIGRlZmF1bHQ6CQkJLyogYWxsb3cgbnVsbCBjb252ZXJzaW9uIG9mIEpDU19VTktOT1dOICovCisgICAgaWYgKGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlICE9IGNpbmZvLT5pbl9jb2xvcl9zcGFjZSB8fAorCWNpbmZvLT5udW1fY29tcG9uZW50cyAhPSBjaW5mby0+aW5wdXRfY29tcG9uZW50cykKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQ09OVkVSU0lPTl9OT1RJTVBMKTsKKyAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSBudWxsX2NvbnZlcnQ7CisgICAgYnJlYWs7CisgIH0KK30KKworI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY2RjdG1nci5jIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamNkY3RtZ3IuYwppbmRleCBkNDA4MjA0Li5jYmQ3ZDExIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY2RjdG1nci5jCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pjZGN0bWdyLmMKQEAgLTEsMzkwICsxLDM5MCBAQAotI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykNCi0vKg0KLSAqIGpjZGN0bWdyLmMNCi0gKg0KLSAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2LCBUaG9tYXMgRy4gTGFuZS4NCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLg0KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4NCi0gKg0KLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZm9yd2FyZC1EQ1QgbWFuYWdlbWVudCBsb2dpYy4NCi0gKiBUaGlzIGNvZGUgc2VsZWN0cyBhIHBhcnRpY3VsYXIgRENUIGltcGxlbWVudGF0aW9uIHRvIGJlIHVzZWQsDQotICogYW5kIGl0IHBlcmZvcm1zIHJlbGF0ZWQgaG91c2VrZWVwaW5nIGNob3JlcyBpbmNsdWRpbmcgY29lZmZpY2llbnQNCi0gKiBxdWFudGl6YXRpb24uDQotICovDQotDQotI2RlZmluZSBKUEVHX0lOVEVSTkFMUw0KLSNpbmNsdWRlICJqaW5jbHVkZS5oIg0KLSNpbmNsdWRlICJqcGVnbGliLmgiDQotI2luY2x1ZGUgImpkY3QuaCIJCS8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovDQotDQotDQotLyogUHJpdmF0ZSBzdWJvYmplY3QgZm9yIHRoaXMgbW9kdWxlICovDQotDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgc3RydWN0IGpwZWdfZm9yd2FyZF9kY3QgcHViOwkvKiBwdWJsaWMgZmllbGRzICovDQotDQotICAvKiBQb2ludGVyIHRvIHRoZSBEQ1Qgcm91dGluZSBhY3R1YWxseSBpbiB1c2UgKi8NCi0gIGZvcndhcmRfRENUX21ldGhvZF9wdHIgZG9fZGN0Ow0KLQ0KLSAgLyogVGhlIGFjdHVhbCBwb3N0LURDVCBkaXZpc29ycyAtLS0gbm90IGlkZW50aWNhbCB0byB0aGUgcXVhbnQgdGFibGUNCi0gICAqIGVudHJpZXMsIGJlY2F1c2Ugb2Ygc2NhbGluZyAoZXNwZWNpYWxseSBmb3IgYW4gdW5ub3JtYWxpemVkIERDVCkuDQotICAgKiBFYWNoIHRhYmxlIGlzIGdpdmVuIGluIG5vcm1hbCBhcnJheSBvcmRlci4NCi0gICAqLw0KLSAgRENURUxFTSAqIGRpdmlzb3JzW05VTV9RVUFOVF9UQkxTXTsNCi0NCi0jaWZkZWYgRENUX0ZMT0FUX1NVUFBPUlRFRA0KLSAgLyogU2FtZSBhcyBhYm92ZSBmb3IgdGhlIGZsb2F0aW5nLXBvaW50IGNhc2UuICovDQotICBmbG9hdF9EQ1RfbWV0aG9kX3B0ciBkb19mbG9hdF9kY3Q7DQotICBGQVNUX0ZMT0FUICogZmxvYXRfZGl2aXNvcnNbTlVNX1FVQU5UX1RCTFNdOw0KLSNlbmRpZg0KLX0gbXlfZmRjdF9jb250cm9sbGVyOw0KLQ0KLXR5cGVkZWYgbXlfZmRjdF9jb250cm9sbGVyICogbXlfZmRjdF9wdHI7DQotDQotDQotLyoNCi0gKiBJbml0aWFsaXplIGZvciBhIHByb2Nlc3NpbmcgcGFzcy4NCi0gKiBWZXJpZnkgdGhhdCBhbGwgcmVmZXJlbmNlZCBRLXRhYmxlcyBhcmUgcHJlc2VudCwgYW5kIHNldCB1cA0KLSAqIHRoZSBkaXZpc29yIHRhYmxlIGZvciBlYWNoIG9uZS4NCi0gKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgRENUIG9mIGFsbCBjb21wb25lbnRzIGlzIGRvbmUgZHVyaW5nDQotICogdGhlIGZpcnN0IHBhc3MsIGV2ZW4gaWYgb25seSBzb21lIGNvbXBvbmVudHMgd2lsbCBiZSBvdXRwdXQgaW4gdGhlDQotICogZmlyc3Qgc2Nhbi4gIEhlbmNlIGFsbCBjb21wb25lbnRzIHNob3VsZCBiZSBleGFtaW5lZCBoZXJlLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXN0YXJ0X3Bhc3NfZmRjdG1nciAoal9jb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAgbXlfZmRjdF9wdHIgZmRjdCA9IChteV9mZGN0X3B0cikgY2luZm8tPmZkY3Q7DQotICBpbnQgY2ksIHF0YmxubywgaTsNCi0gIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7DQotICBKUVVBTlRfVEJMICogcXRibDsNCi0gIERDVEVMRU0gKiBkdGJsOw0KLQ0KLSAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsNCi0gICAgICAgY2krKywgY29tcHB0cisrKSB7DQotICAgIHF0YmxubyA9IGNvbXBwdHItPnF1YW50X3RibF9ubzsNCi0gICAgLyogTWFrZSBzdXJlIHNwZWNpZmllZCBxdWFudGl6YXRpb24gdGFibGUgaXMgcHJlc2VudCAqLw0KLSAgICBpZiAocXRibG5vIDwgMCB8fCBxdGJsbm8gPj0gTlVNX1FVQU5UX1RCTFMgfHwNCi0JY2luZm8tPnF1YW50X3RibF9wdHJzW3F0Ymxub10gPT0gTlVMTCkNCi0gICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9OT19RVUFOVF9UQUJMRSwgcXRibG5vKTsNCi0gICAgcXRibCA9IGNpbmZvLT5xdWFudF90YmxfcHRyc1txdGJsbm9dOw0KLSAgICAvKiBDb21wdXRlIGRpdmlzb3JzIGZvciB0aGlzIHF1YW50IHRhYmxlICovDQotICAgIC8qIFdlIG1heSBkbyB0aGlzIG1vcmUgdGhhbiBvbmNlIGZvciBzYW1lIHRhYmxlLCBidXQgaXQncyBub3QgYSBiaWcgZGVhbCAqLw0KLSAgICBzd2l0Y2ggKGNpbmZvLT5kY3RfbWV0aG9kKSB7DQotI2lmZGVmIERDVF9JU0xPV19TVVBQT1JURUQNCi0gICAgY2FzZSBKRENUX0lTTE9XOg0KLSAgICAgIC8qIEZvciBMTCZNIElEQ1QgbWV0aG9kLCBkaXZpc29ycyBhcmUgZXF1YWwgdG8gcmF3IHF1YW50aXphdGlvbg0KLSAgICAgICAqIGNvZWZmaWNpZW50cyBtdWx0aXBsaWVkIGJ5IDggKHRvIGNvdW50ZXJhY3Qgc2NhbGluZykuDQotICAgICAgICovDQotICAgICAgaWYgKGZkY3QtPmRpdmlzb3JzW3F0Ymxub10gPT0gTlVMTCkgew0KLQlmZGN0LT5kaXZpc29yc1txdGJsbm9dID0gKERDVEVMRU0gKikNCi0JICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQkgICAgICBEQ1RTSVpFMiAqIFNJWkVPRihEQ1RFTEVNKSk7DQotICAgICAgfQ0KLSAgICAgIGR0YmwgPSBmZGN0LT5kaXZpc29yc1txdGJsbm9dOw0KLSAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFMjsgaSsrKSB7DQotCWR0YmxbaV0gPSAoKERDVEVMRU0pIHF0YmwtPnF1YW50dmFsW2ldKSA8PCAzOw0KLSAgICAgIH0NCi0gICAgICBicmVhazsNCi0jZW5kaWYNCi0jaWZkZWYgRENUX0lGQVNUX1NVUFBPUlRFRA0KLSAgICBjYXNlIEpEQ1RfSUZBU1Q6DQotICAgICAgew0KLQkvKiBGb3IgQUEmTiBJRENUIG1ldGhvZCwgZGl2aXNvcnMgYXJlIGVxdWFsIHRvIHF1YW50aXphdGlvbg0KLQkgKiBjb2VmZmljaWVudHMgc2NhbGVkIGJ5IHNjYWxlZmFjdG9yW3Jvd10qc2NhbGVmYWN0b3JbY29sXSwgd2hlcmUNCi0JICogICBzY2FsZWZhY3RvclswXSA9IDENCi0JICogICBzY2FsZWZhY3RvcltrXSA9IGNvcyhrKlBJLzE2KSAqIHNxcnQoMikgICAgZm9yIGs9MS4uNw0KLQkgKiBXZSBhcHBseSBhIGZ1cnRoZXIgc2NhbGUgZmFjdG9yIG9mIDguDQotCSAqLw0KLSNkZWZpbmUgQ09OU1RfQklUUyAxNA0KLQlzdGF0aWMgY29uc3QgSU5UMTYgYWFuc2NhbGVzW0RDVFNJWkUyXSA9IHsNCi0JICAvKiBwcmVjb21wdXRlZCB2YWx1ZXMgc2NhbGVkIHVwIGJ5IDE0IGJpdHMgKi8NCi0JICAxNjM4NCwgMjI3MjUsIDIxNDA3LCAxOTI2NiwgMTYzODQsIDEyODczLCAgODg2NywgIDQ1MjAsDQotCSAgMjI3MjUsIDMxNTIxLCAyOTY5MiwgMjY3MjIsIDIyNzI1LCAxNzg1NSwgMTIyOTksICA2MjcwLA0KLQkgIDIxNDA3LCAyOTY5MiwgMjc5NjksIDI1MTcyLCAyMTQwNywgMTY4MTksIDExNTg1LCAgNTkwNiwNCi0JICAxOTI2NiwgMjY3MjIsIDI1MTcyLCAyMjY1NCwgMTkyNjYsIDE1MTM3LCAxMDQyNiwgIDUzMTUsDQotCSAgMTYzODQsIDIyNzI1LCAyMTQwNywgMTkyNjYsIDE2Mzg0LCAxMjg3MywgIDg4NjcsICA0NTIwLA0KLQkgIDEyODczLCAxNzg1NSwgMTY4MTksIDE1MTM3LCAxMjg3MywgMTAxMTQsICA2OTY3LCAgMzU1MiwNCi0JICAgODg2NywgMTIyOTksIDExNTg1LCAxMDQyNiwgIDg4NjcsICA2OTY3LCAgNDc5OSwgIDI0NDYsDQotCSAgIDQ1MjAsICA2MjcwLCAgNTkwNiwgIDUzMTUsICA0NTIwLCAgMzU1MiwgIDI0NDYsICAxMjQ3DQotCX07DQotCVNISUZUX1RFTVBTDQotDQotCWlmIChmZGN0LT5kaXZpc29yc1txdGJsbm9dID09IE5VTEwpIHsNCi0JICBmZGN0LT5kaXZpc29yc1txdGJsbm9dID0gKERDVEVMRU0gKikNCi0JICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsDQotCQkJCQlEQ1RTSVpFMiAqIFNJWkVPRihEQ1RFTEVNKSk7DQotCX0NCi0JZHRibCA9IGZkY3QtPmRpdmlzb3JzW3F0Ymxub107DQotCWZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFMjsgaSsrKSB7DQotCSAgZHRibFtpXSA9IChEQ1RFTEVNKQ0KLQkgICAgREVTQ0FMRShNVUxUSVBMWTE2VjE2KChJTlQzMikgcXRibC0+cXVhbnR2YWxbaV0sDQotCQkJCSAgKElOVDMyKSBhYW5zY2FsZXNbaV0pLA0KLQkJICAgIENPTlNUX0JJVFMtMyk7DQotCX0NCi0gICAgICB9DQotICAgICAgYnJlYWs7DQotI2VuZGlmDQotI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQNCi0gICAgY2FzZSBKRENUX0ZMT0FUOg0KLSAgICAgIHsNCi0JLyogRm9yIGZsb2F0IEFBJk4gSURDVCBtZXRob2QsIGRpdmlzb3JzIGFyZSBlcXVhbCB0byBxdWFudGl6YXRpb24NCi0JICogY29lZmZpY2llbnRzIHNjYWxlZCBieSBzY2FsZWZhY3Rvcltyb3ddKnNjYWxlZmFjdG9yW2NvbF0sIHdoZXJlDQotCSAqICAgc2NhbGVmYWN0b3JbMF0gPSAxDQotCSAqICAgc2NhbGVmYWN0b3Jba10gPSBjb3MoaypQSS8xNikgKiBzcXJ0KDIpICAgIGZvciBrPTEuLjcNCi0JICogV2UgYXBwbHkgYSBmdXJ0aGVyIHNjYWxlIGZhY3RvciBvZiA4Lg0KLQkgKiBXaGF0J3MgYWN0dWFsbHkgc3RvcmVkIGlzIDEvZGl2aXNvciBzbyB0aGF0IHRoZSBpbm5lciBsb29wIGNhbg0KLQkgKiB1c2UgYSBtdWx0aXBsaWNhdGlvbiByYXRoZXIgdGhhbiBhIGRpdmlzaW9uLg0KLQkgKi8NCi0JRkFTVF9GTE9BVCAqIGZkdGJsOw0KLQlpbnQgcm93LCBjb2w7DQotCXN0YXRpYyBjb25zdCBkb3VibGUgYWFuc2NhbGVmYWN0b3JbRENUU0laRV0gPSB7DQotCSAgMS4wLCAxLjM4NzAzOTg0NSwgMS4zMDY1NjI5NjUsIDEuMTc1ODc1NjAyLA0KLQkgIDEuMCwgMC43ODU2OTQ5NTgsIDAuNTQxMTk2MTAwLCAwLjI3NTg5OTM3OQ0KLQl9Ow0KLQ0KLQlpZiAoZmRjdC0+ZmxvYXRfZGl2aXNvcnNbcXRibG5vXSA9PSBOVUxMKSB7DQotCSAgZmRjdC0+ZmxvYXRfZGl2aXNvcnNbcXRibG5vXSA9IChGQVNUX0ZMT0FUICopDQotCSAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQkJRENUU0laRTIgKiBTSVpFT0YoRkFTVF9GTE9BVCkpOw0KLQl9DQotCWZkdGJsID0gZmRjdC0+ZmxvYXRfZGl2aXNvcnNbcXRibG5vXTsNCi0JaSA9IDA7DQotCWZvciAocm93ID0gMDsgcm93IDwgRENUU0laRTsgcm93KyspIHsNCi0JICBmb3IgKGNvbCA9IDA7IGNvbCA8IERDVFNJWkU7IGNvbCsrKSB7DQotCSAgICBmZHRibFtpXSA9IChGQVNUX0ZMT0FUKQ0KLQkgICAgICAoMS4wIC8gKCgoZG91YmxlKSBxdGJsLT5xdWFudHZhbFtpXSAqDQotCQkgICAgICAgYWFuc2NhbGVmYWN0b3Jbcm93XSAqIGFhbnNjYWxlZmFjdG9yW2NvbF0gKiA4LjApKSk7DQotCSAgICBpKys7DQotCSAgfQ0KLQl9DQotICAgICAgfQ0KLSAgICAgIGJyZWFrOw0KLSNlbmRpZg0KLSAgICBkZWZhdWx0Og0KLSAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsNCi0gICAgICBicmVhazsNCi0gICAgfQ0KLSAgfQ0KLX0NCi0NCi0NCi0vKg0KLSAqIFBlcmZvcm0gZm9yd2FyZCBEQ1Qgb24gb25lIG9yIG1vcmUgYmxvY2tzIG9mIGEgY29tcG9uZW50Lg0KLSAqDQotICogVGhlIGlucHV0IHNhbXBsZXMgYXJlIHRha2VuIGZyb20gdGhlIHNhbXBsZV9kYXRhW10gYXJyYXkgc3RhcnRpbmcgYXQNCi0gKiBwb3NpdGlvbiBzdGFydF9yb3cvc3RhcnRfY29sLCBhbmQgbW92aW5nIHRvIHRoZSByaWdodCBmb3IgYW55IGFkZGl0aW9uYWwNCi0gKiBibG9ja3MuIFRoZSBxdWFudGl6ZWQgY29lZmZpY2llbnRzIGFyZSByZXR1cm5lZCBpbiBjb2VmX2Jsb2Nrc1tdLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLWZvcndhcmRfRENUIChqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsDQotCSAgICAgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkJMT0NLUk9XIGNvZWZfYmxvY2tzLA0KLQkgICAgIEpESU1FTlNJT04gc3RhcnRfcm93LCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwNCi0JICAgICBKRElNRU5TSU9OIG51bV9ibG9ja3MpDQotLyogVGhpcyB2ZXJzaW9uIGlzIHVzZWQgZm9yIGludGVnZXIgRENUIGltcGxlbWVudGF0aW9ucy4gKi8NCi17DQotICAvKiBUaGlzIHJvdXRpbmUgaXMgaGVhdmlseSB1c2VkLCBzbyBpdCdzIHdvcnRoIGNvZGluZyBpdCB0aWdodGx5LiAqLw0KLSAgbXlfZmRjdF9wdHIgZmRjdCA9IChteV9mZGN0X3B0cikgY2luZm8tPmZkY3Q7DQotICBmb3J3YXJkX0RDVF9tZXRob2RfcHRyIGRvX2RjdCA9IGZkY3QtPmRvX2RjdDsNCi0gIERDVEVMRU0gKiBkaXZpc29ycyA9IGZkY3QtPmRpdmlzb3JzW2NvbXBwdHItPnF1YW50X3RibF9ub107DQotICBEQ1RFTEVNIHdvcmtzcGFjZVtEQ1RTSVpFMl07CS8qIHdvcmsgYXJlYSBmb3IgRkRDVCBzdWJyb3V0aW5lICovDQotICBKRElNRU5TSU9OIGJpOw0KLQ0KLSAgc2FtcGxlX2RhdGEgKz0gc3RhcnRfcm93OwkvKiBmb2xkIGluIHRoZSB2ZXJ0aWNhbCBvZmZzZXQgb25jZSAqLw0KLQ0KLSAgZm9yIChiaSA9IDA7IGJpIDwgbnVtX2Jsb2NrczsgYmkrKywgc3RhcnRfY29sICs9IERDVFNJWkUpIHsNCi0gICAgLyogTG9hZCBkYXRhIGludG8gd29ya3NwYWNlLCBhcHBseWluZyB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24gKi8NCi0gICAgeyByZWdpc3RlciBEQ1RFTEVNICp3b3Jrc3BhY2VwdHI7DQotICAgICAgcmVnaXN0ZXIgSlNBTVBST1cgZWxlbXB0cjsNCi0gICAgICByZWdpc3RlciBpbnQgZWxlbXI7DQotDQotICAgICAgd29ya3NwYWNlcHRyID0gd29ya3NwYWNlOw0KLSAgICAgIGZvciAoZWxlbXIgPSAwOyBlbGVtciA8IERDVFNJWkU7IGVsZW1yKyspIHsNCi0JZWxlbXB0ciA9IHNhbXBsZV9kYXRhW2VsZW1yXSArIHN0YXJ0X2NvbDsNCi0jaWYgRENUU0laRSA9PSA4CQkvKiB1bnJvbGwgdGhlIGlubmVyIGxvb3AgKi8NCi0JKndvcmtzcGFjZXB0cisrID0gR0VUSlNBTVBMRSgqZWxlbXB0cisrKSAtIENFTlRFUkpTQU1QTEU7DQotCSp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOw0KLQkqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsNCi0JKndvcmtzcGFjZXB0cisrID0gR0VUSlNBTVBMRSgqZWxlbXB0cisrKSAtIENFTlRFUkpTQU1QTEU7DQotCSp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOw0KLQkqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsNCi0JKndvcmtzcGFjZXB0cisrID0gR0VUSlNBTVBMRSgqZWxlbXB0cisrKSAtIENFTlRFUkpTQU1QTEU7DQotCSp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOw0KLSNlbHNlDQotCXsgcmVnaXN0ZXIgaW50IGVsZW1jOw0KLQkgIGZvciAoZWxlbWMgPSBEQ1RTSVpFOyBlbGVtYyA+IDA7IGVsZW1jLS0pIHsNCi0JICAgICp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOw0KLQkgIH0NCi0JfQ0KLSNlbmRpZg0KLSAgICAgIH0NCi0gICAgfQ0KLQ0KLSAgICAvKiBQZXJmb3JtIHRoZSBEQ1QgKi8NCi0gICAgKCpkb19kY3QpICh3b3Jrc3BhY2UpOw0KLQ0KLSAgICAvKiBRdWFudGl6ZS9kZXNjYWxlIHRoZSBjb2VmZmljaWVudHMsIGFuZCBzdG9yZSBpbnRvIGNvZWZfYmxvY2tzW10gKi8NCi0gICAgeyByZWdpc3RlciBEQ1RFTEVNIHRlbXAsIHF2YWw7DQotICAgICAgcmVnaXN0ZXIgaW50IGk7DQotICAgICAgcmVnaXN0ZXIgSkNPRUZQVFIgb3V0cHV0X3B0ciA9IGNvZWZfYmxvY2tzW2JpXTsNCi0NCi0gICAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykgew0KLQlxdmFsID0gZGl2aXNvcnNbaV07DQotCXRlbXAgPSB3b3Jrc3BhY2VbaV07DQotCS8qIERpdmlkZSB0aGUgY29lZmZpY2llbnQgdmFsdWUgYnkgcXZhbCwgZW5zdXJpbmcgcHJvcGVyIHJvdW5kaW5nLg0KLQkgKiBTaW5jZSBDIGRvZXMgbm90IHNwZWNpZnkgdGhlIGRpcmVjdGlvbiBvZiByb3VuZGluZyBmb3IgbmVnYXRpdmUNCi0JICogcXVvdGllbnRzLCB3ZSBoYXZlIHRvIGZvcmNlIHRoZSBkaXZpZGVuZCBwb3NpdGl2ZSBmb3IgcG9ydGFiaWxpdHkuDQotCSAqDQotCSAqIEluIG1vc3QgZmlsZXMsIGF0IGxlYXN0IGhhbGYgb2YgdGhlIG91dHB1dCB2YWx1ZXMgd2lsbCBiZSB6ZXJvDQotCSAqIChhdCBkZWZhdWx0IHF1YW50aXphdGlvbiBzZXR0aW5ncywgbW9yZSBsaWtlIHRocmVlLXF1YXJ0ZXJzLi4uKQ0KLQkgKiBzbyB3ZSBzaG91bGQgZW5zdXJlIHRoYXQgdGhpcyBjYXNlIGlzIGZhc3QuICBPbiBtYW55IG1hY2hpbmVzLA0KLQkgKiBhIGNvbXBhcmlzb24gaXMgZW5vdWdoIGNoZWFwZXIgdGhhbiBhIGRpdmlkZSB0byBtYWtlIGEgc3BlY2lhbCB0ZXN0DQotCSAqIGEgd2luLiAgU2luY2UgYm90aCBpbnB1dHMgd2lsbCBiZSBub25uZWdhdGl2ZSwgd2UgbmVlZCBvbmx5IHRlc3QNCi0JICogZm9yIGEgPCBiIHRvIGRpc2NvdmVyIHdoZXRoZXIgYS9iIGlzIDAuDQotCSAqIElmIHlvdXIgbWFjaGluZSdzIGRpdmlzaW9uIGlzIGZhc3QgZW5vdWdoLCBkZWZpbmUgRkFTVF9ESVZJREUuDQotCSAqLw0KLSNpZmRlZiBGQVNUX0RJVklERQ0KLSNkZWZpbmUgRElWSURFX0JZKGEsYikJYSAvPSBiDQotI2Vsc2UNCi0jZGVmaW5lIERJVklERV9CWShhLGIpCWlmIChhID49IGIpIGEgLz0gYjsgZWxzZSBhID0gMA0KLSNlbmRpZg0KLQlpZiAodGVtcCA8IDApIHsNCi0JICB0ZW1wID0gLXRlbXA7DQotCSAgdGVtcCArPSBxdmFsPj4xOwkvKiBmb3Igcm91bmRpbmcgKi8NCi0JICBESVZJREVfQlkodGVtcCwgcXZhbCk7DQotCSAgdGVtcCA9IC10ZW1wOw0KLQl9IGVsc2Ugew0KLQkgIHRlbXAgKz0gcXZhbD4+MTsJLyogZm9yIHJvdW5kaW5nICovDQotCSAgRElWSURFX0JZKHRlbXAsIHF2YWwpOw0KLQl9DQotCW91dHB1dF9wdHJbaV0gPSAoSkNPRUYpIHRlbXA7DQotICAgICAgfQ0KLSAgICB9DQotICB9DQotfQ0KLQ0KLQ0KLSNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVEDQotDQotTUVUSE9EREVGKHZvaWQpDQotZm9yd2FyZF9EQ1RfZmxvYXQgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwNCi0JCSAgIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpCTE9DS1JPVyBjb2VmX2Jsb2NrcywNCi0JCSAgIEpESU1FTlNJT04gc3RhcnRfcm93LCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwNCi0JCSAgIEpESU1FTlNJT04gbnVtX2Jsb2NrcykNCi0vKiBUaGlzIHZlcnNpb24gaXMgdXNlZCBmb3IgZmxvYXRpbmctcG9pbnQgRENUIGltcGxlbWVudGF0aW9ucy4gKi8NCi17DQotICAvKiBUaGlzIHJvdXRpbmUgaXMgaGVhdmlseSB1c2VkLCBzbyBpdCdzIHdvcnRoIGNvZGluZyBpdCB0aWdodGx5LiAqLw0KLSAgbXlfZmRjdF9wdHIgZmRjdCA9IChteV9mZGN0X3B0cikgY2luZm8tPmZkY3Q7DQotICBmbG9hdF9EQ1RfbWV0aG9kX3B0ciBkb19kY3QgPSBmZGN0LT5kb19mbG9hdF9kY3Q7DQotICBGQVNUX0ZMT0FUICogZGl2aXNvcnMgPSBmZGN0LT5mbG9hdF9kaXZpc29yc1tjb21wcHRyLT5xdWFudF90Ymxfbm9dOw0KLSAgRkFTVF9GTE9BVCB3b3Jrc3BhY2VbRENUU0laRTJdOyAvKiB3b3JrIGFyZWEgZm9yIEZEQ1Qgc3Vicm91dGluZSAqLw0KLSAgSkRJTUVOU0lPTiBiaTsNCi0NCi0gIHNhbXBsZV9kYXRhICs9IHN0YXJ0X3JvdzsJLyogZm9sZCBpbiB0aGUgdmVydGljYWwgb2Zmc2V0IG9uY2UgKi8NCi0NCi0gIGZvciAoYmkgPSAwOyBiaSA8IG51bV9ibG9ja3M7IGJpKyssIHN0YXJ0X2NvbCArPSBEQ1RTSVpFKSB7DQotICAgIC8qIExvYWQgZGF0YSBpbnRvIHdvcmtzcGFjZSwgYXBwbHlpbmcgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uICovDQotICAgIHsgcmVnaXN0ZXIgRkFTVF9GTE9BVCAqd29ya3NwYWNlcHRyOw0KLSAgICAgIHJlZ2lzdGVyIEpTQU1QUk9XIGVsZW1wdHI7DQotICAgICAgcmVnaXN0ZXIgaW50IGVsZW1yOw0KLQ0KLSAgICAgIHdvcmtzcGFjZXB0ciA9IHdvcmtzcGFjZTsNCi0gICAgICBmb3IgKGVsZW1yID0gMDsgZWxlbXIgPCBEQ1RTSVpFOyBlbGVtcisrKSB7DQotCWVsZW1wdHIgPSBzYW1wbGVfZGF0YVtlbGVtcl0gKyBzdGFydF9jb2w7DQotI2lmIERDVFNJWkUgPT0gOAkJLyogdW5yb2xsIHRoZSBpbm5lciBsb29wICovDQotCSp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKShHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7DQotCSp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKShHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7DQotCSp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKShHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7DQotCSp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKShHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7DQotCSp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKShHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7DQotCSp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKShHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7DQotCSp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKShHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7DQotCSp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKShHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7DQotI2Vsc2UNCi0JeyByZWdpc3RlciBpbnQgZWxlbWM7DQotCSAgZm9yIChlbGVtYyA9IERDVFNJWkU7IGVsZW1jID4gMDsgZWxlbWMtLSkgew0KLQkgICAgKndvcmtzcGFjZXB0cisrID0gKEZBU1RfRkxPQVQpDQotCSAgICAgIChHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7DQotCSAgfQ0KLQl9DQotI2VuZGlmDQotICAgICAgfQ0KLSAgICB9DQotDQotICAgIC8qIFBlcmZvcm0gdGhlIERDVCAqLw0KLSAgICAoKmRvX2RjdCkgKHdvcmtzcGFjZSk7DQotDQotICAgIC8qIFF1YW50aXplL2Rlc2NhbGUgdGhlIGNvZWZmaWNpZW50cywgYW5kIHN0b3JlIGludG8gY29lZl9ibG9ja3NbXSAqLw0KLSAgICB7IHJlZ2lzdGVyIEZBU1RfRkxPQVQgdGVtcDsNCi0gICAgICByZWdpc3RlciBpbnQgaTsNCi0gICAgICByZWdpc3RlciBKQ09FRlBUUiBvdXRwdXRfcHRyID0gY29lZl9ibG9ja3NbYmldOw0KLQ0KLSAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFMjsgaSsrKSB7DQotCS8qIEFwcGx5IHRoZSBxdWFudGl6YXRpb24gYW5kIHNjYWxpbmcgZmFjdG9yICovDQotCXRlbXAgPSB3b3Jrc3BhY2VbaV0gKiBkaXZpc29yc1tpXTsNCi0JLyogUm91bmQgdG8gbmVhcmVzdCBpbnRlZ2VyLg0KLQkgKiBTaW5jZSBDIGRvZXMgbm90IHNwZWNpZnkgdGhlIGRpcmVjdGlvbiBvZiByb3VuZGluZyBmb3IgbmVnYXRpdmUNCi0JICogcXVvdGllbnRzLCB3ZSBoYXZlIHRvIGZvcmNlIHRoZSBkaXZpZGVuZCBwb3NpdGl2ZSBmb3IgcG9ydGFiaWxpdHkuDQotCSAqIFRoZSBtYXhpbXVtIGNvZWZmaWNpZW50IHNpemUgaXMgKy0xNksgKGZvciAxMi1iaXQgZGF0YSksIHNvIHRoaXMNCi0JICogY29kZSBzaG91bGQgd29yayBmb3IgZWl0aGVyIDE2LWJpdCBvciAzMi1iaXQgaW50cy4NCi0JICovDQotCW91dHB1dF9wdHJbaV0gPSAoSkNPRUYpICgoaW50KSAodGVtcCArIChGQVNUX0ZMT0FUKSAxNjM4NC41KSAtIDE2Mzg0KTsNCi0gICAgICB9DQotICAgIH0NCi0gIH0NCi19DQotDQotI2VuZGlmIC8qIERDVF9GTE9BVF9TVVBQT1JURUQgKi8NCi0NCi0NCi0vKg0KLSAqIEluaXRpYWxpemUgRkRDVCBtYW5hZ2VyLg0KLSAqLw0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWppbml0X2ZvcndhcmRfZGN0IChqX2NvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBteV9mZGN0X3B0ciBmZGN0Ow0KLSAgaW50IGk7DQotDQotICBmZGN0ID0gKG15X2ZkY3RfcHRyKQ0KLSAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQlTSVpFT0YobXlfZmRjdF9jb250cm9sbGVyKSk7DQotICBjaW5mby0+ZmRjdCA9IChzdHJ1Y3QganBlZ19mb3J3YXJkX2RjdCAqKSBmZGN0Ow0KLSAgZmRjdC0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX2ZkY3RtZ3I7DQotDQotICBzd2l0Y2ggKGNpbmZvLT5kY3RfbWV0aG9kKSB7DQotI2lmZGVmIERDVF9JU0xPV19TVVBQT1JURUQNCi0gIGNhc2UgSkRDVF9JU0xPVzoNCi0gICAgZmRjdC0+cHViLmZvcndhcmRfRENUID0gZm9yd2FyZF9EQ1Q7DQotICAgIGZkY3QtPmRvX2RjdCA9IGpwZWdfZmRjdF9pc2xvdzsNCi0gICAgYnJlYWs7DQotI2VuZGlmDQotI2lmZGVmIERDVF9JRkFTVF9TVVBQT1JURUQNCi0gIGNhc2UgSkRDVF9JRkFTVDoNCi0gICAgZmRjdC0+cHViLmZvcndhcmRfRENUID0gZm9yd2FyZF9EQ1Q7DQotICAgIGZkY3QtPmRvX2RjdCA9IGpwZWdfZmRjdF9pZmFzdDsNCi0gICAgYnJlYWs7DQotI2VuZGlmDQotI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQNCi0gIGNhc2UgSkRDVF9GTE9BVDoNCi0gICAgZmRjdC0+cHViLmZvcndhcmRfRENUID0gZm9yd2FyZF9EQ1RfZmxvYXQ7DQotICAgIGZkY3QtPmRvX2Zsb2F0X2RjdCA9IGpwZWdfZmRjdF9mbG9hdDsNCi0gICAgYnJlYWs7DQotI2VuZGlmDQotICBkZWZhdWx0Og0KLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7DQotICAgIGJyZWFrOw0KLSAgfQ0KLQ0KLSAgLyogTWFyayBkaXZpc29yIHRhYmxlcyB1bmFsbG9jYXRlZCAqLw0KLSAgZm9yIChpID0gMDsgaSA8IE5VTV9RVUFOVF9UQkxTOyBpKyspIHsNCi0gICAgZmRjdC0+ZGl2aXNvcnNbaV0gPSBOVUxMOw0KLSNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVEDQotICAgIGZkY3QtPmZsb2F0X2Rpdmlzb3JzW2ldID0gTlVMTDsNCi0jZW5kaWYNCi0gIH0NCi19DQotDQotI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fDQorI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykKKy8qCisgKiBqY2RjdG1nci5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGZvcndhcmQtRENUIG1hbmFnZW1lbnQgbG9naWMuCisgKiBUaGlzIGNvZGUgc2VsZWN0cyBhIHBhcnRpY3VsYXIgRENUIGltcGxlbWVudGF0aW9uIHRvIGJlIHVzZWQsCisgKiBhbmQgaXQgcGVyZm9ybXMgcmVsYXRlZCBob3VzZWtlZXBpbmcgY2hvcmVzIGluY2x1ZGluZyBjb2VmZmljaWVudAorICogcXVhbnRpemF0aW9uLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqZGN0LmgiCQkvKiBQcml2YXRlIGRlY2xhcmF0aW9ucyBmb3IgRENUIHN1YnN5c3RlbSAqLworCisKKy8qIFByaXZhdGUgc3Vib2JqZWN0IGZvciB0aGlzIG1vZHVsZSAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX2ZvcndhcmRfZGN0IHB1YjsJLyogcHVibGljIGZpZWxkcyAqLworCisgIC8qIFBvaW50ZXIgdG8gdGhlIERDVCByb3V0aW5lIGFjdHVhbGx5IGluIHVzZSAqLworICBmb3J3YXJkX0RDVF9tZXRob2RfcHRyIGRvX2RjdDsKKworICAvKiBUaGUgYWN0dWFsIHBvc3QtRENUIGRpdmlzb3JzIC0tLSBub3QgaWRlbnRpY2FsIHRvIHRoZSBxdWFudCB0YWJsZQorICAgKiBlbnRyaWVzLCBiZWNhdXNlIG9mIHNjYWxpbmcgKGVzcGVjaWFsbHkgZm9yIGFuIHVubm9ybWFsaXplZCBEQ1QpLgorICAgKiBFYWNoIHRhYmxlIGlzIGdpdmVuIGluIG5vcm1hbCBhcnJheSBvcmRlci4KKyAgICovCisgIERDVEVMRU0gKiBkaXZpc29yc1tOVU1fUVVBTlRfVEJMU107CisKKyNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECisgIC8qIFNhbWUgYXMgYWJvdmUgZm9yIHRoZSBmbG9hdGluZy1wb2ludCBjYXNlLiAqLworICBmbG9hdF9EQ1RfbWV0aG9kX3B0ciBkb19mbG9hdF9kY3Q7CisgIEZBU1RfRkxPQVQgKiBmbG9hdF9kaXZpc29yc1tOVU1fUVVBTlRfVEJMU107CisjZW5kaWYKK30gbXlfZmRjdF9jb250cm9sbGVyOworCit0eXBlZGVmIG15X2ZkY3RfY29udHJvbGxlciAqIG15X2ZkY3RfcHRyOworCisKKy8qCisgKiBJbml0aWFsaXplIGZvciBhIHByb2Nlc3NpbmcgcGFzcy4KKyAqIFZlcmlmeSB0aGF0IGFsbCByZWZlcmVuY2VkIFEtdGFibGVzIGFyZSBwcmVzZW50LCBhbmQgc2V0IHVwCisgKiB0aGUgZGl2aXNvciB0YWJsZSBmb3IgZWFjaCBvbmUuCisgKiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgRENUIG9mIGFsbCBjb21wb25lbnRzIGlzIGRvbmUgZHVyaW5nCisgKiB0aGUgZmlyc3QgcGFzcywgZXZlbiBpZiBvbmx5IHNvbWUgY29tcG9uZW50cyB3aWxsIGJlIG91dHB1dCBpbiB0aGUKKyAqIGZpcnN0IHNjYW4uICBIZW5jZSBhbGwgY29tcG9uZW50cyBzaG91bGQgYmUgZXhhbWluZWQgaGVyZS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3N0YXJ0X3Bhc3NfZmRjdG1nciAoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X2ZkY3RfcHRyIGZkY3QgPSAobXlfZmRjdF9wdHIpIGNpbmZvLT5mZGN0OworICBpbnQgY2ksIHF0YmxubywgaTsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKyAgSlFVQU5UX1RCTCAqIHF0Ymw7CisgIERDVEVMRU0gKiBkdGJsOworCisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgcXRibG5vID0gY29tcHB0ci0+cXVhbnRfdGJsX25vOworICAgIC8qIE1ha2Ugc3VyZSBzcGVjaWZpZWQgcXVhbnRpemF0aW9uIHRhYmxlIGlzIHByZXNlbnQgKi8KKyAgICBpZiAocXRibG5vIDwgMCB8fCBxdGJsbm8gPj0gTlVNX1FVQU5UX1RCTFMgfHwKKwljaW5mby0+cXVhbnRfdGJsX3B0cnNbcXRibG5vXSA9PSBOVUxMKQorICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fUVVBTlRfVEFCTEUsIHF0Ymxubyk7CisgICAgcXRibCA9IGNpbmZvLT5xdWFudF90YmxfcHRyc1txdGJsbm9dOworICAgIC8qIENvbXB1dGUgZGl2aXNvcnMgZm9yIHRoaXMgcXVhbnQgdGFibGUgKi8KKyAgICAvKiBXZSBtYXkgZG8gdGhpcyBtb3JlIHRoYW4gb25jZSBmb3Igc2FtZSB0YWJsZSwgYnV0IGl0J3Mgbm90IGEgYmlnIGRlYWwgKi8KKyAgICBzd2l0Y2ggKGNpbmZvLT5kY3RfbWV0aG9kKSB7CisjaWZkZWYgRENUX0lTTE9XX1NVUFBPUlRFRAorICAgIGNhc2UgSkRDVF9JU0xPVzoKKyAgICAgIC8qIEZvciBMTCZNIElEQ1QgbWV0aG9kLCBkaXZpc29ycyBhcmUgZXF1YWwgdG8gcmF3IHF1YW50aXphdGlvbgorICAgICAgICogY29lZmZpY2llbnRzIG11bHRpcGxpZWQgYnkgOCAodG8gY291bnRlcmFjdCBzY2FsaW5nKS4KKyAgICAgICAqLworICAgICAgaWYgKGZkY3QtPmRpdmlzb3JzW3F0Ymxub10gPT0gTlVMTCkgeworCWZkY3QtPmRpdmlzb3JzW3F0Ymxub10gPSAoRENURUxFTSAqKQorCSAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkJCQkgICAgICBEQ1RTSVpFMiAqIFNJWkVPRihEQ1RFTEVNKSk7CisgICAgICB9CisgICAgICBkdGJsID0gZmRjdC0+ZGl2aXNvcnNbcXRibG5vXTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFMjsgaSsrKSB7CisJZHRibFtpXSA9ICgoRENURUxFTSkgcXRibC0+cXVhbnR2YWxbaV0pIDw8IDM7CisgICAgICB9CisgICAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIERDVF9JRkFTVF9TVVBQT1JURUQKKyAgICBjYXNlIEpEQ1RfSUZBU1Q6CisgICAgICB7CisJLyogRm9yIEFBJk4gSURDVCBtZXRob2QsIGRpdmlzb3JzIGFyZSBlcXVhbCB0byBxdWFudGl6YXRpb24KKwkgKiBjb2VmZmljaWVudHMgc2NhbGVkIGJ5IHNjYWxlZmFjdG9yW3Jvd10qc2NhbGVmYWN0b3JbY29sXSwgd2hlcmUKKwkgKiAgIHNjYWxlZmFjdG9yWzBdID0gMQorCSAqICAgc2NhbGVmYWN0b3Jba10gPSBjb3MoaypQSS8xNikgKiBzcXJ0KDIpICAgIGZvciBrPTEuLjcKKwkgKiBXZSBhcHBseSBhIGZ1cnRoZXIgc2NhbGUgZmFjdG9yIG9mIDguCisJICovCisjZGVmaW5lIENPTlNUX0JJVFMgMTQKKwlzdGF0aWMgY29uc3QgSU5UMTYgYWFuc2NhbGVzW0RDVFNJWkUyXSA9IHsKKwkgIC8qIHByZWNvbXB1dGVkIHZhbHVlcyBzY2FsZWQgdXAgYnkgMTQgYml0cyAqLworCSAgMTYzODQsIDIyNzI1LCAyMTQwNywgMTkyNjYsIDE2Mzg0LCAxMjg3MywgIDg4NjcsICA0NTIwLAorCSAgMjI3MjUsIDMxNTIxLCAyOTY5MiwgMjY3MjIsIDIyNzI1LCAxNzg1NSwgMTIyOTksICA2MjcwLAorCSAgMjE0MDcsIDI5NjkyLCAyNzk2OSwgMjUxNzIsIDIxNDA3LCAxNjgxOSwgMTE1ODUsICA1OTA2LAorCSAgMTkyNjYsIDI2NzIyLCAyNTE3MiwgMjI2NTQsIDE5MjY2LCAxNTEzNywgMTA0MjYsICA1MzE1LAorCSAgMTYzODQsIDIyNzI1LCAyMTQwNywgMTkyNjYsIDE2Mzg0LCAxMjg3MywgIDg4NjcsICA0NTIwLAorCSAgMTI4NzMsIDE3ODU1LCAxNjgxOSwgMTUxMzcsIDEyODczLCAxMDExNCwgIDY5NjcsICAzNTUyLAorCSAgIDg4NjcsIDEyMjk5LCAxMTU4NSwgMTA0MjYsICA4ODY3LCAgNjk2NywgIDQ3OTksICAyNDQ2LAorCSAgIDQ1MjAsICA2MjcwLCAgNTkwNiwgIDUzMTUsICA0NTIwLCAgMzU1MiwgIDI0NDYsICAxMjQ3CisJfTsKKwlTSElGVF9URU1QUworCisJaWYgKGZkY3QtPmRpdmlzb3JzW3F0Ymxub10gPT0gTlVMTCkgeworCSAgZmRjdC0+ZGl2aXNvcnNbcXRibG5vXSA9IChEQ1RFTEVNICopCisJICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJCURDVFNJWkUyICogU0laRU9GKERDVEVMRU0pKTsKKwl9CisJZHRibCA9IGZkY3QtPmRpdmlzb3JzW3F0Ymxub107CisJZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsKKwkgIGR0YmxbaV0gPSAoRENURUxFTSkKKwkgICAgREVTQ0FMRShNVUxUSVBMWTE2VjE2KChJTlQzMikgcXRibC0+cXVhbnR2YWxbaV0sCisJCQkJICAoSU5UMzIpIGFhbnNjYWxlc1tpXSksCisJCSAgICBDT05TVF9CSVRTLTMpOworCX0KKyAgICAgIH0KKyAgICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgRENUX0ZMT0FUX1NVUFBPUlRFRAorICAgIGNhc2UgSkRDVF9GTE9BVDoKKyAgICAgIHsKKwkvKiBGb3IgZmxvYXQgQUEmTiBJRENUIG1ldGhvZCwgZGl2aXNvcnMgYXJlIGVxdWFsIHRvIHF1YW50aXphdGlvbgorCSAqIGNvZWZmaWNpZW50cyBzY2FsZWQgYnkgc2NhbGVmYWN0b3Jbcm93XSpzY2FsZWZhY3Rvcltjb2xdLCB3aGVyZQorCSAqICAgc2NhbGVmYWN0b3JbMF0gPSAxCisJICogICBzY2FsZWZhY3RvcltrXSA9IGNvcyhrKlBJLzE2KSAqIHNxcnQoMikgICAgZm9yIGs9MS4uNworCSAqIFdlIGFwcGx5IGEgZnVydGhlciBzY2FsZSBmYWN0b3Igb2YgOC4KKwkgKiBXaGF0J3MgYWN0dWFsbHkgc3RvcmVkIGlzIDEvZGl2aXNvciBzbyB0aGF0IHRoZSBpbm5lciBsb29wIGNhbgorCSAqIHVzZSBhIG11bHRpcGxpY2F0aW9uIHJhdGhlciB0aGFuIGEgZGl2aXNpb24uCisJICovCisJRkFTVF9GTE9BVCAqIGZkdGJsOworCWludCByb3csIGNvbDsKKwlzdGF0aWMgY29uc3QgZG91YmxlIGFhbnNjYWxlZmFjdG9yW0RDVFNJWkVdID0geworCSAgMS4wLCAxLjM4NzAzOTg0NSwgMS4zMDY1NjI5NjUsIDEuMTc1ODc1NjAyLAorCSAgMS4wLCAwLjc4NTY5NDk1OCwgMC41NDExOTYxMDAsIDAuMjc1ODk5Mzc5CisJfTsKKworCWlmIChmZGN0LT5mbG9hdF9kaXZpc29yc1txdGJsbm9dID09IE5VTEwpIHsKKwkgIGZkY3QtPmZsb2F0X2Rpdmlzb3JzW3F0Ymxub10gPSAoRkFTVF9GTE9BVCAqKQorCSAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCQlEQ1RTSVpFMiAqIFNJWkVPRihGQVNUX0ZMT0FUKSk7CisJfQorCWZkdGJsID0gZmRjdC0+ZmxvYXRfZGl2aXNvcnNbcXRibG5vXTsKKwlpID0gMDsKKwlmb3IgKHJvdyA9IDA7IHJvdyA8IERDVFNJWkU7IHJvdysrKSB7CisJICBmb3IgKGNvbCA9IDA7IGNvbCA8IERDVFNJWkU7IGNvbCsrKSB7CisJICAgIGZkdGJsW2ldID0gKEZBU1RfRkxPQVQpCisJICAgICAgKDEuMCAvICgoKGRvdWJsZSkgcXRibC0+cXVhbnR2YWxbaV0gKgorCQkgICAgICAgYWFuc2NhbGVmYWN0b3Jbcm93XSAqIGFhbnNjYWxlZmFjdG9yW2NvbF0gKiA4LjApKSk7CisJICAgIGkrKzsKKwkgIH0KKwl9CisgICAgICB9CisgICAgICBicmVhazsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KK30KKworCisvKgorICogUGVyZm9ybSBmb3J3YXJkIERDVCBvbiBvbmUgb3IgbW9yZSBibG9ja3Mgb2YgYSBjb21wb25lbnQuCisgKgorICogVGhlIGlucHV0IHNhbXBsZXMgYXJlIHRha2VuIGZyb20gdGhlIHNhbXBsZV9kYXRhW10gYXJyYXkgc3RhcnRpbmcgYXQKKyAqIHBvc2l0aW9uIHN0YXJ0X3Jvdy9zdGFydF9jb2wsIGFuZCBtb3ZpbmcgdG8gdGhlIHJpZ2h0IGZvciBhbnkgYWRkaXRpb25hbAorICogYmxvY2tzLiBUaGUgcXVhbnRpemVkIGNvZWZmaWNpZW50cyBhcmUgcmV0dXJuZWQgaW4gY29lZl9ibG9ja3NbXS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2ZvcndhcmRfRENUIChqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJICAgICBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKQkxPQ0tST1cgY29lZl9ibG9ja3MsCisJICAgICBKRElNRU5TSU9OIHN0YXJ0X3JvdywgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisJICAgICBKRElNRU5TSU9OIG51bV9ibG9ja3MpCisvKiBUaGlzIHZlcnNpb24gaXMgdXNlZCBmb3IgaW50ZWdlciBEQ1QgaW1wbGVtZW50YXRpb25zLiAqLworeworICAvKiBUaGlzIHJvdXRpbmUgaXMgaGVhdmlseSB1c2VkLCBzbyBpdCdzIHdvcnRoIGNvZGluZyBpdCB0aWdodGx5LiAqLworICBteV9mZGN0X3B0ciBmZGN0ID0gKG15X2ZkY3RfcHRyKSBjaW5mby0+ZmRjdDsKKyAgZm9yd2FyZF9EQ1RfbWV0aG9kX3B0ciBkb19kY3QgPSBmZGN0LT5kb19kY3Q7CisgIERDVEVMRU0gKiBkaXZpc29ycyA9IGZkY3QtPmRpdmlzb3JzW2NvbXBwdHItPnF1YW50X3RibF9ub107CisgIERDVEVMRU0gd29ya3NwYWNlW0RDVFNJWkUyXTsJLyogd29yayBhcmVhIGZvciBGRENUIHN1YnJvdXRpbmUgKi8KKyAgSkRJTUVOU0lPTiBiaTsKKworICBzYW1wbGVfZGF0YSArPSBzdGFydF9yb3c7CS8qIGZvbGQgaW4gdGhlIHZlcnRpY2FsIG9mZnNldCBvbmNlICovCisKKyAgZm9yIChiaSA9IDA7IGJpIDwgbnVtX2Jsb2NrczsgYmkrKywgc3RhcnRfY29sICs9IERDVFNJWkUpIHsKKyAgICAvKiBMb2FkIGRhdGEgaW50byB3b3Jrc3BhY2UsIGFwcGx5aW5nIHVuc2lnbmVkLT5zaWduZWQgY29udmVyc2lvbiAqLworICAgIHsgcmVnaXN0ZXIgRENURUxFTSAqd29ya3NwYWNlcHRyOworICAgICAgcmVnaXN0ZXIgSlNBTVBST1cgZWxlbXB0cjsKKyAgICAgIHJlZ2lzdGVyIGludCBlbGVtcjsKKworICAgICAgd29ya3NwYWNlcHRyID0gd29ya3NwYWNlOworICAgICAgZm9yIChlbGVtciA9IDA7IGVsZW1yIDwgRENUU0laRTsgZWxlbXIrKykgeworCWVsZW1wdHIgPSBzYW1wbGVfZGF0YVtlbGVtcl0gKyBzdGFydF9jb2w7CisjaWYgRENUU0laRSA9PSA4CQkvKiB1bnJvbGwgdGhlIGlubmVyIGxvb3AgKi8KKwkqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKKwkqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKKwkqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKKwkqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKKwkqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKKwkqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKKwkqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKKwkqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKKyNlbHNlCisJeyByZWdpc3RlciBpbnQgZWxlbWM7CisJICBmb3IgKGVsZW1jID0gRENUU0laRTsgZWxlbWMgPiAwOyBlbGVtYy0tKSB7CisJICAgICp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOworCSAgfQorCX0KKyNlbmRpZgorICAgICAgfQorICAgIH0KKworICAgIC8qIFBlcmZvcm0gdGhlIERDVCAqLworICAgICgqZG9fZGN0KSAod29ya3NwYWNlKTsKKworICAgIC8qIFF1YW50aXplL2Rlc2NhbGUgdGhlIGNvZWZmaWNpZW50cywgYW5kIHN0b3JlIGludG8gY29lZl9ibG9ja3NbXSAqLworICAgIHsgcmVnaXN0ZXIgRENURUxFTSB0ZW1wLCBxdmFsOworICAgICAgcmVnaXN0ZXIgaW50IGk7CisgICAgICByZWdpc3RlciBKQ09FRlBUUiBvdXRwdXRfcHRyID0gY29lZl9ibG9ja3NbYmldOworCisgICAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykgeworCXF2YWwgPSBkaXZpc29yc1tpXTsKKwl0ZW1wID0gd29ya3NwYWNlW2ldOworCS8qIERpdmlkZSB0aGUgY29lZmZpY2llbnQgdmFsdWUgYnkgcXZhbCwgZW5zdXJpbmcgcHJvcGVyIHJvdW5kaW5nLgorCSAqIFNpbmNlIEMgZG9lcyBub3Qgc3BlY2lmeSB0aGUgZGlyZWN0aW9uIG9mIHJvdW5kaW5nIGZvciBuZWdhdGl2ZQorCSAqIHF1b3RpZW50cywgd2UgaGF2ZSB0byBmb3JjZSB0aGUgZGl2aWRlbmQgcG9zaXRpdmUgZm9yIHBvcnRhYmlsaXR5LgorCSAqCisJICogSW4gbW9zdCBmaWxlcywgYXQgbGVhc3QgaGFsZiBvZiB0aGUgb3V0cHV0IHZhbHVlcyB3aWxsIGJlIHplcm8KKwkgKiAoYXQgZGVmYXVsdCBxdWFudGl6YXRpb24gc2V0dGluZ3MsIG1vcmUgbGlrZSB0aHJlZS1xdWFydGVycy4uLikKKwkgKiBzbyB3ZSBzaG91bGQgZW5zdXJlIHRoYXQgdGhpcyBjYXNlIGlzIGZhc3QuICBPbiBtYW55IG1hY2hpbmVzLAorCSAqIGEgY29tcGFyaXNvbiBpcyBlbm91Z2ggY2hlYXBlciB0aGFuIGEgZGl2aWRlIHRvIG1ha2UgYSBzcGVjaWFsIHRlc3QKKwkgKiBhIHdpbi4gIFNpbmNlIGJvdGggaW5wdXRzIHdpbGwgYmUgbm9ubmVnYXRpdmUsIHdlIG5lZWQgb25seSB0ZXN0CisJICogZm9yIGEgPCBiIHRvIGRpc2NvdmVyIHdoZXRoZXIgYS9iIGlzIDAuCisJICogSWYgeW91ciBtYWNoaW5lJ3MgZGl2aXNpb24gaXMgZmFzdCBlbm91Z2gsIGRlZmluZSBGQVNUX0RJVklERS4KKwkgKi8KKyNpZmRlZiBGQVNUX0RJVklERQorI2RlZmluZSBESVZJREVfQlkoYSxiKQlhIC89IGIKKyNlbHNlCisjZGVmaW5lIERJVklERV9CWShhLGIpCWlmIChhID49IGIpIGEgLz0gYjsgZWxzZSBhID0gMAorI2VuZGlmCisJaWYgKHRlbXAgPCAwKSB7CisJICB0ZW1wID0gLXRlbXA7CisJICB0ZW1wICs9IHF2YWw+PjE7CS8qIGZvciByb3VuZGluZyAqLworCSAgRElWSURFX0JZKHRlbXAsIHF2YWwpOworCSAgdGVtcCA9IC10ZW1wOworCX0gZWxzZSB7CisJICB0ZW1wICs9IHF2YWw+PjE7CS8qIGZvciByb3VuZGluZyAqLworCSAgRElWSURFX0JZKHRlbXAsIHF2YWwpOworCX0KKwlvdXRwdXRfcHRyW2ldID0gKEpDT0VGKSB0ZW1wOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisKKyNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECisKK01FVEhPRERFRih2b2lkKQorZm9yd2FyZF9EQ1RfZmxvYXQgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkJICAgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkJMT0NLUk9XIGNvZWZfYmxvY2tzLAorCQkgICBKRElNRU5TSU9OIHN0YXJ0X3JvdywgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisJCSAgIEpESU1FTlNJT04gbnVtX2Jsb2NrcykKKy8qIFRoaXMgdmVyc2lvbiBpcyB1c2VkIGZvciBmbG9hdGluZy1wb2ludCBEQ1QgaW1wbGVtZW50YXRpb25zLiAqLworeworICAvKiBUaGlzIHJvdXRpbmUgaXMgaGVhdmlseSB1c2VkLCBzbyBpdCdzIHdvcnRoIGNvZGluZyBpdCB0aWdodGx5LiAqLworICBteV9mZGN0X3B0ciBmZGN0ID0gKG15X2ZkY3RfcHRyKSBjaW5mby0+ZmRjdDsKKyAgZmxvYXRfRENUX21ldGhvZF9wdHIgZG9fZGN0ID0gZmRjdC0+ZG9fZmxvYXRfZGN0OworICBGQVNUX0ZMT0FUICogZGl2aXNvcnMgPSBmZGN0LT5mbG9hdF9kaXZpc29yc1tjb21wcHRyLT5xdWFudF90Ymxfbm9dOworICBGQVNUX0ZMT0FUIHdvcmtzcGFjZVtEQ1RTSVpFMl07IC8qIHdvcmsgYXJlYSBmb3IgRkRDVCBzdWJyb3V0aW5lICovCisgIEpESU1FTlNJT04gYmk7CisKKyAgc2FtcGxlX2RhdGEgKz0gc3RhcnRfcm93OwkvKiBmb2xkIGluIHRoZSB2ZXJ0aWNhbCBvZmZzZXQgb25jZSAqLworCisgIGZvciAoYmkgPSAwOyBiaSA8IG51bV9ibG9ja3M7IGJpKyssIHN0YXJ0X2NvbCArPSBEQ1RTSVpFKSB7CisgICAgLyogTG9hZCBkYXRhIGludG8gd29ya3NwYWNlLCBhcHBseWluZyB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24gKi8KKyAgICB7IHJlZ2lzdGVyIEZBU1RfRkxPQVQgKndvcmtzcGFjZXB0cjsKKyAgICAgIHJlZ2lzdGVyIEpTQU1QUk9XIGVsZW1wdHI7CisgICAgICByZWdpc3RlciBpbnQgZWxlbXI7CisKKyAgICAgIHdvcmtzcGFjZXB0ciA9IHdvcmtzcGFjZTsKKyAgICAgIGZvciAoZWxlbXIgPSAwOyBlbGVtciA8IERDVFNJWkU7IGVsZW1yKyspIHsKKwllbGVtcHRyID0gc2FtcGxlX2RhdGFbZWxlbXJdICsgc3RhcnRfY29sOworI2lmIERDVFNJWkUgPT0gOAkJLyogdW5yb2xsIHRoZSBpbm5lciBsb29wICovCisJKndvcmtzcGFjZXB0cisrID0gKEZBU1RfRkxPQVQpKEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFKTsKKwkqd29ya3NwYWNlcHRyKysgPSAoRkFTVF9GTE9BVCkoR0VUSlNBTVBMRSgqZWxlbXB0cisrKSAtIENFTlRFUkpTQU1QTEUpOworCSp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKShHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7CisJKndvcmtzcGFjZXB0cisrID0gKEZBU1RfRkxPQVQpKEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFKTsKKwkqd29ya3NwYWNlcHRyKysgPSAoRkFTVF9GTE9BVCkoR0VUSlNBTVBMRSgqZWxlbXB0cisrKSAtIENFTlRFUkpTQU1QTEUpOworCSp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKShHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7CisJKndvcmtzcGFjZXB0cisrID0gKEZBU1RfRkxPQVQpKEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFKTsKKwkqd29ya3NwYWNlcHRyKysgPSAoRkFTVF9GTE9BVCkoR0VUSlNBTVBMRSgqZWxlbXB0cisrKSAtIENFTlRFUkpTQU1QTEUpOworI2Vsc2UKKwl7IHJlZ2lzdGVyIGludCBlbGVtYzsKKwkgIGZvciAoZWxlbWMgPSBEQ1RTSVpFOyBlbGVtYyA+IDA7IGVsZW1jLS0pIHsKKwkgICAgKndvcmtzcGFjZXB0cisrID0gKEZBU1RfRkxPQVQpCisJICAgICAgKEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFKTsKKwkgIH0KKwl9CisjZW5kaWYKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBQZXJmb3JtIHRoZSBEQ1QgKi8KKyAgICAoKmRvX2RjdCkgKHdvcmtzcGFjZSk7CisKKyAgICAvKiBRdWFudGl6ZS9kZXNjYWxlIHRoZSBjb2VmZmljaWVudHMsIGFuZCBzdG9yZSBpbnRvIGNvZWZfYmxvY2tzW10gKi8KKyAgICB7IHJlZ2lzdGVyIEZBU1RfRkxPQVQgdGVtcDsKKyAgICAgIHJlZ2lzdGVyIGludCBpOworICAgICAgcmVnaXN0ZXIgSkNPRUZQVFIgb3V0cHV0X3B0ciA9IGNvZWZfYmxvY2tzW2JpXTsKKworICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsKKwkvKiBBcHBseSB0aGUgcXVhbnRpemF0aW9uIGFuZCBzY2FsaW5nIGZhY3RvciAqLworCXRlbXAgPSB3b3Jrc3BhY2VbaV0gKiBkaXZpc29yc1tpXTsKKwkvKiBSb3VuZCB0byBuZWFyZXN0IGludGVnZXIuCisJICogU2luY2UgQyBkb2VzIG5vdCBzcGVjaWZ5IHRoZSBkaXJlY3Rpb24gb2Ygcm91bmRpbmcgZm9yIG5lZ2F0aXZlCisJICogcXVvdGllbnRzLCB3ZSBoYXZlIHRvIGZvcmNlIHRoZSBkaXZpZGVuZCBwb3NpdGl2ZSBmb3IgcG9ydGFiaWxpdHkuCisJICogVGhlIG1heGltdW0gY29lZmZpY2llbnQgc2l6ZSBpcyArLTE2SyAoZm9yIDEyLWJpdCBkYXRhKSwgc28gdGhpcworCSAqIGNvZGUgc2hvdWxkIHdvcmsgZm9yIGVpdGhlciAxNi1iaXQgb3IgMzItYml0IGludHMuCisJICovCisJb3V0cHV0X3B0cltpXSA9IChKQ09FRikgKChpbnQpICh0ZW1wICsgKEZBU1RfRkxPQVQpIDE2Mzg0LjUpIC0gMTYzODQpOworICAgICAgfQorICAgIH0KKyAgfQorfQorCisjZW5kaWYgLyogRENUX0ZMT0FUX1NVUFBPUlRFRCAqLworCisKKy8qCisgKiBJbml0aWFsaXplIEZEQ1QgbWFuYWdlci4KKyAqLworCitHTE9CQUwodm9pZCkKK2ppbml0X2ZvcndhcmRfZGN0IChqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfZmRjdF9wdHIgZmRjdDsKKyAgaW50IGk7CisKKyAgZmRjdCA9IChteV9mZGN0X3B0cikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCVNJWkVPRihteV9mZGN0X2NvbnRyb2xsZXIpKTsKKyAgY2luZm8tPmZkY3QgPSAoc3RydWN0IGpwZWdfZm9yd2FyZF9kY3QgKikgZmRjdDsKKyAgZmRjdC0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX2ZkY3RtZ3I7CisKKyAgc3dpdGNoIChjaW5mby0+ZGN0X21ldGhvZCkgeworI2lmZGVmIERDVF9JU0xPV19TVVBQT1JURUQKKyAgY2FzZSBKRENUX0lTTE9XOgorICAgIGZkY3QtPnB1Yi5mb3J3YXJkX0RDVCA9IGZvcndhcmRfRENUOworICAgIGZkY3QtPmRvX2RjdCA9IGpwZWdfZmRjdF9pc2xvdzsKKyAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIERDVF9JRkFTVF9TVVBQT1JURUQKKyAgY2FzZSBKRENUX0lGQVNUOgorICAgIGZkY3QtPnB1Yi5mb3J3YXJkX0RDVCA9IGZvcndhcmRfRENUOworICAgIGZkY3QtPmRvX2RjdCA9IGpwZWdfZmRjdF9pZmFzdDsKKyAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKKyAgY2FzZSBKRENUX0ZMT0FUOgorICAgIGZkY3QtPnB1Yi5mb3J3YXJkX0RDVCA9IGZvcndhcmRfRENUX2Zsb2F0OworICAgIGZkY3QtPmRvX2Zsb2F0X2RjdCA9IGpwZWdfZmRjdF9mbG9hdDsKKyAgICBicmVhazsKKyNlbmRpZgorICBkZWZhdWx0OgorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsKKyAgICBicmVhazsKKyAgfQorCisgIC8qIE1hcmsgZGl2aXNvciB0YWJsZXMgdW5hbGxvY2F0ZWQgKi8KKyAgZm9yIChpID0gMDsgaSA8IE5VTV9RVUFOVF9UQkxTOyBpKyspIHsKKyAgICBmZGN0LT5kaXZpc29yc1tpXSA9IE5VTEw7CisjaWZkZWYgRENUX0ZMT0FUX1NVUFBPUlRFRAorICAgIGZkY3QtPmZsb2F0X2Rpdmlzb3JzW2ldID0gTlVMTDsKKyNlbmRpZgorICB9Cit9CisKKyNlbmRpZiAvL19GWF9KUEVHX1RVUkJPXwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamNodWZmLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY2h1ZmYuYwppbmRleCA5ZWQxZmU2Li4yYTY1YWEyIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY2h1ZmYuYworKysgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY2h1ZmYuYwpAQCAtMSw5MTUgKzEsOTE1IEBACi0jaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQ0KLS8qDQotICogamNodWZmLmMNCi0gKg0KLSAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4NCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLg0KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4NCi0gKg0KLSAqIFRoaXMgZmlsZSBjb250YWlucyBIdWZmbWFuIGVudHJvcHkgZW5jb2Rpbmcgcm91dGluZXMuDQotICoNCi0gKiBNdWNoIG9mIHRoZSBjb21wbGV4aXR5IGhlcmUgaGFzIHRvIGRvIHdpdGggc3VwcG9ydGluZyBvdXRwdXQgc3VzcGVuc2lvbi4NCi0gKiBJZiB0aGUgZGF0YSBkZXN0aW5hdGlvbiBtb2R1bGUgZGVtYW5kcyBzdXNwZW5zaW9uLCB3ZSB3YW50IHRvIGJlIGFibGUgdG8NCi0gKiBiYWNrIHVwIHRvIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBNQ1UuICBUbyBkbyB0aGlzLCB3ZSBjb3B5IHN0YXRlDQotICogdmFyaWFibGVzIGludG8gbG9jYWwgd29ya2luZyBzdG9yYWdlLCBhbmQgdXBkYXRlIHRoZW0gYmFjayB0byB0aGUNCi0gKiBwZXJtYW5lbnQgSlBFRyBvYmplY3RzIG9ubHkgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgYW4gTUNVLg0KLSAqLw0KLQ0KLSNkZWZpbmUgSlBFR19JTlRFUk5BTFMNCi0jaW5jbHVkZSAiamluY2x1ZGUuaCINCi0jaW5jbHVkZSAianBlZ2xpYi5oIg0KLSNpbmNsdWRlICJqY2h1ZmYuaCIJCS8qIERlY2xhcmF0aW9ucyBzaGFyZWQgd2l0aCBqY3BodWZmLmMgKi8NCi0NCi0jaWZkZWYgX0ZYX01BTkFHRURfQ09ERV8NCi0jZGVmaW5lIHNhdmFibGVfc3RhdGUJc2F2YWJsZV9zdGF0ZV9jDQotI2VuZGlmDQotDQotLyogRXhwYW5kZWQgZW50cm9weSBlbmNvZGVyIG9iamVjdCBmb3IgSHVmZm1hbiBlbmNvZGluZy4NCi0gKg0KLSAqIFRoZSBzYXZhYmxlX3N0YXRlIHN1YnJlY29yZCBjb250YWlucyBmaWVsZHMgdGhhdCBjaGFuZ2Ugd2l0aGluIGFuIE1DVSwNCi0gKiBidXQgbXVzdCBub3QgYmUgdXBkYXRlZCBwZXJtYW5lbnRseSB1bnRpbCB3ZSBjb21wbGV0ZSB0aGUgTUNVLg0KLSAqLw0KLQ0KLXR5cGVkZWYgc3RydWN0IHsNCi0gIElOVDMyIHB1dF9idWZmZXI7CQkvKiBjdXJyZW50IGJpdC1hY2N1bXVsYXRpb24gYnVmZmVyICovDQotICBpbnQgcHV0X2JpdHM7CQkJLyogIyBvZiBiaXRzIG5vdyBpbiBpdCAqLw0KLSAgaW50IGxhc3RfZGNfdmFsW01BWF9DT01QU19JTl9TQ0FOXTsgLyogbGFzdCBEQyBjb2VmIGZvciBlYWNoIGNvbXBvbmVudCAqLw0KLX0gc2F2YWJsZV9zdGF0ZTsNCi0NCi0vKiBUaGlzIG1hY3JvIGlzIHRvIHdvcmsgYXJvdW5kIGNvbXBpbGVycyB3aXRoIG1pc3Npbmcgb3IgYnJva2VuDQotICogc3RydWN0dXJlIGFzc2lnbm1lbnQuICBZb3UnbGwgbmVlZCB0byBmaXggdGhpcyBjb2RlIGlmIHlvdSBoYXZlDQotICogc3VjaCBhIGNvbXBpbGVyIGFuZCB5b3UgY2hhbmdlIE1BWF9DT01QU19JTl9TQ0FOLg0KLSAqLw0KLQ0KLSNpZm5kZWYgTk9fU1RSVUNUX0FTU0lHTg0KLSNkZWZpbmUgQVNTSUdOX1NUQVRFKGRlc3Qsc3JjKSAgKChkZXN0KSA9IChzcmMpKQ0KLSNlbHNlDQotI2lmIE1BWF9DT01QU19JTl9TQ0FOID09IDQNCi0jZGVmaW5lIEFTU0lHTl9TVEFURShkZXN0LHNyYykgIFwNCi0JKChkZXN0KS5wdXRfYnVmZmVyID0gKHNyYykucHV0X2J1ZmZlciwgXA0KLQkgKGRlc3QpLnB1dF9iaXRzID0gKHNyYykucHV0X2JpdHMsIFwNCi0JIChkZXN0KS5sYXN0X2RjX3ZhbFswXSA9IChzcmMpLmxhc3RfZGNfdmFsWzBdLCBcDQotCSAoZGVzdCkubGFzdF9kY192YWxbMV0gPSAoc3JjKS5sYXN0X2RjX3ZhbFsxXSwgXA0KLQkgKGRlc3QpLmxhc3RfZGNfdmFsWzJdID0gKHNyYykubGFzdF9kY192YWxbMl0sIFwNCi0JIChkZXN0KS5sYXN0X2RjX3ZhbFszXSA9IChzcmMpLmxhc3RfZGNfdmFsWzNdKQ0KLSNlbmRpZg0KLSNlbmRpZg0KLQ0KLQ0KLXR5cGVkZWYgc3RydWN0IHsNCi0gIHN0cnVjdCBqcGVnX2VudHJvcHlfZW5jb2RlciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8NCi0NCi0gIHNhdmFibGVfc3RhdGUgc2F2ZWQ7CQkvKiBCaXQgYnVmZmVyICYgREMgc3RhdGUgYXQgc3RhcnQgb2YgTUNVICovDQotDQotICAvKiBUaGVzZSBmaWVsZHMgYXJlIE5PVCBsb2FkZWQgaW50byBsb2NhbCB3b3JraW5nIHN0YXRlLiAqLw0KLSAgdW5zaWduZWQgaW50IHJlc3RhcnRzX3RvX2dvOwkvKiBNQ1VzIGxlZnQgaW4gdGhpcyByZXN0YXJ0IGludGVydmFsICovDQotICBpbnQgbmV4dF9yZXN0YXJ0X251bTsJCS8qIG5leHQgcmVzdGFydCBudW1iZXIgdG8gd3JpdGUgKDAtNykgKi8NCi0NCi0gIC8qIFBvaW50ZXJzIHRvIGRlcml2ZWQgdGFibGVzICh0aGVzZSB3b3Jrc3BhY2VzIGhhdmUgaW1hZ2UgbGlmZXNwYW4pICovDQotICBjX2Rlcml2ZWRfdGJsICogZGNfZGVyaXZlZF90YmxzW05VTV9IVUZGX1RCTFNdOw0KLSAgY19kZXJpdmVkX3RibCAqIGFjX2Rlcml2ZWRfdGJsc1tOVU1fSFVGRl9UQkxTXTsNCi0NCi0jaWZkZWYgRU5UUk9QWV9PUFRfU1VQUE9SVEVECS8qIFN0YXRpc3RpY3MgdGFibGVzIGZvciBvcHRpbWl6YXRpb24gKi8NCi0gIGxvbmcgKiBkY19jb3VudF9wdHJzW05VTV9IVUZGX1RCTFNdOw0KLSAgbG9uZyAqIGFjX2NvdW50X3B0cnNbTlVNX0hVRkZfVEJMU107DQotI2VuZGlmDQotfSBodWZmX2VudHJvcHlfZW5jb2RlcjsNCi0NCi10eXBlZGVmIGh1ZmZfZW50cm9weV9lbmNvZGVyICogaHVmZl9lbnRyb3B5X3B0cjsNCi0NCi0vKiBXb3JraW5nIHN0YXRlIHdoaWxlIHdyaXRpbmcgYW4gTUNVLg0KLSAqIFRoaXMgc3RydWN0IGNvbnRhaW5zIGFsbCB0aGUgZmllbGRzIHRoYXQgYXJlIG5lZWRlZCBieSBzdWJyb3V0aW5lcy4NCi0gKi8NCi0NCi10eXBlZGVmIHN0cnVjdCB7DQotICBKT0NURVQgKiBuZXh0X291dHB1dF9ieXRlOwkvKiA9PiBuZXh0IGJ5dGUgdG8gd3JpdGUgaW4gYnVmZmVyICovDQotICBzaXplX3QgZnJlZV9pbl9idWZmZXI7CS8qICMgb2YgYnl0ZSBzcGFjZXMgcmVtYWluaW5nIGluIGJ1ZmZlciAqLw0KLSAgc2F2YWJsZV9zdGF0ZSBjdXI7CQkvKiBDdXJyZW50IGJpdCBidWZmZXIgJiBEQyBzdGF0ZSAqLw0KLSAgal9jb21wcmVzc19wdHIgY2luZm87CQkvKiBkdW1wX2J1ZmZlciBuZWVkcyBhY2Nlc3MgdG8gdGhpcyAqLw0KLX0gd29ya2luZ19zdGF0ZTsNCi0NCi0NCi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLw0KLU1FVEhPRERFRihib29sZWFuKSBlbmNvZGVfbWN1X2h1ZmYgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJCUpCTE9DS1JPVyAqTUNVX2RhdGEpKTsNCi1NRVRIT0RERUYodm9pZCkgZmluaXNoX3Bhc3NfaHVmZiBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotI2lmZGVmIEVOVFJPUFlfT1BUX1NVUFBPUlRFRA0KLU1FVEhPRERFRihib29sZWFuKSBlbmNvZGVfbWN1X2dhdGhlciBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQkJICBKQkxPQ0tST1cgKk1DVV9kYXRhKSk7DQotTUVUSE9EREVGKHZvaWQpIGZpbmlzaF9wYXNzX2dhdGhlciBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotI2VuZGlmDQotDQotDQotLyoNCi0gKiBJbml0aWFsaXplIGZvciBhIEh1ZmZtYW4tY29tcHJlc3NlZCBzY2FuLg0KLSAqIElmIGdhdGhlcl9zdGF0aXN0aWNzIGlzIFRSVUUsIHdlIGRvIG5vdCBvdXRwdXQgYW55dGhpbmcgZHVyaW5nIHRoZSBzY2FuLA0KLSAqIGp1c3QgY291bnQgdGhlIEh1ZmZtYW4gc3ltYm9scyB1c2VkIGFuZCBnZW5lcmF0ZSBIdWZmbWFuIGNvZGUgdGFibGVzLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXN0YXJ0X3Bhc3NfaHVmZiAoal9jb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gZ2F0aGVyX3N0YXRpc3RpY3MpDQotew0KLSAgaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5Ow0KLSAgaW50IGNpLCBkY3RibCwgYWN0Ymw7DQotICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cjsNCi0NCi0gIGlmIChnYXRoZXJfc3RhdGlzdGljcykgew0KLSNpZmRlZiBFTlRST1BZX09QVF9TVVBQT1JURUQNCi0gICAgZW50cm9weS0+cHViLmVuY29kZV9tY3UgPSBlbmNvZGVfbWN1X2dhdGhlcjsNCi0gICAgZW50cm9weS0+cHViLmZpbmlzaF9wYXNzID0gZmluaXNoX3Bhc3NfZ2F0aGVyOw0KLSNlbHNlDQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsNCi0jZW5kaWYNCi0gIH0gZWxzZSB7DQotICAgIGVudHJvcHktPnB1Yi5lbmNvZGVfbWN1ID0gZW5jb2RlX21jdV9odWZmOw0KLSAgICBlbnRyb3B5LT5wdWIuZmluaXNoX3Bhc3MgPSBmaW5pc2hfcGFzc19odWZmOw0KLSAgfQ0KLQ0KLSAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspIHsNCi0gICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsNCi0gICAgZGN0YmwgPSBjb21wcHRyLT5kY190Ymxfbm87DQotICAgIGFjdGJsID0gY29tcHB0ci0+YWNfdGJsX25vOw0KLSAgICBpZiAoZ2F0aGVyX3N0YXRpc3RpY3MpIHsNCi0jaWZkZWYgRU5UUk9QWV9PUFRfU1VQUE9SVEVEDQotICAgICAgLyogQ2hlY2sgZm9yIGludmFsaWQgdGFibGUgaW5kZXhlcyAqLw0KLSAgICAgIC8qIChtYWtlX2NfZGVyaXZlZF90YmwgZG9lcyB0aGlzIGluIHRoZSBvdGhlciBwYXRoKSAqLw0KLSAgICAgIGlmIChkY3RibCA8IDAgfHwgZGN0YmwgPj0gTlVNX0hVRkZfVEJMUykNCi0JRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fSFVGRl9UQUJMRSwgZGN0YmwpOw0KLSAgICAgIGlmIChhY3RibCA8IDAgfHwgYWN0YmwgPj0gTlVNX0hVRkZfVEJMUykNCi0JRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fSFVGRl9UQUJMRSwgYWN0YmwpOw0KLSAgICAgIC8qIEFsbG9jYXRlIGFuZCB6ZXJvIHRoZSBzdGF0aXN0aWNzIHRhYmxlcyAqLw0KLSAgICAgIC8qIE5vdGUgdGhhdCBqcGVnX2dlbl9vcHRpbWFsX3RhYmxlIGV4cGVjdHMgMjU3IGVudHJpZXMgaW4gZWFjaCB0YWJsZSEgKi8NCi0gICAgICBpZiAoZW50cm9weS0+ZGNfY291bnRfcHRyc1tkY3RibF0gPT0gTlVMTCkNCi0JZW50cm9weS0+ZGNfY291bnRfcHRyc1tkY3RibF0gPSAobG9uZyAqKQ0KLQkgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsDQotCQkJCSAgICAgIDI1NyAqIFNJWkVPRihsb25nKSk7DQotICAgICAgTUVNWkVSTyhlbnRyb3B5LT5kY19jb3VudF9wdHJzW2RjdGJsXSwgMjU3ICogU0laRU9GKGxvbmcpKTsNCi0gICAgICBpZiAoZW50cm9weS0+YWNfY291bnRfcHRyc1thY3RibF0gPT0gTlVMTCkNCi0JZW50cm9weS0+YWNfY291bnRfcHRyc1thY3RibF0gPSAobG9uZyAqKQ0KLQkgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsDQotCQkJCSAgICAgIDI1NyAqIFNJWkVPRihsb25nKSk7DQotICAgICAgTUVNWkVSTyhlbnRyb3B5LT5hY19jb3VudF9wdHJzW2FjdGJsXSwgMjU3ICogU0laRU9GKGxvbmcpKTsNCi0jZW5kaWYNCi0gICAgfSBlbHNlIHsNCi0gICAgICAvKiBDb21wdXRlIGRlcml2ZWQgdmFsdWVzIGZvciBIdWZmbWFuIHRhYmxlcyAqLw0KLSAgICAgIC8qIFdlIG1heSBkbyB0aGlzIG1vcmUgdGhhbiBvbmNlIGZvciBhIHRhYmxlLCBidXQgaXQncyBub3QgZXhwZW5zaXZlICovDQotICAgICAganBlZ19tYWtlX2NfZGVyaXZlZF90YmwoY2luZm8sIFRSVUUsIGRjdGJsLA0KLQkJCSAgICAgICYgZW50cm9weS0+ZGNfZGVyaXZlZF90YmxzW2RjdGJsXSk7DQotICAgICAganBlZ19tYWtlX2NfZGVyaXZlZF90YmwoY2luZm8sIEZBTFNFLCBhY3RibCwNCi0JCQkgICAgICAmIGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsc1thY3RibF0pOw0KLSAgICB9DQotICAgIC8qIEluaXRpYWxpemUgREMgcHJlZGljdGlvbnMgdG8gMCAqLw0KLSAgICBlbnRyb3B5LT5zYXZlZC5sYXN0X2RjX3ZhbFtjaV0gPSAwOw0KLSAgfQ0KLQ0KLSAgLyogSW5pdGlhbGl6ZSBiaXQgYnVmZmVyIHRvIGVtcHR5ICovDQotICBlbnRyb3B5LT5zYXZlZC5wdXRfYnVmZmVyID0gMDsNCi0gIGVudHJvcHktPnNhdmVkLnB1dF9iaXRzID0gMDsNCi0NCi0gIC8qIEluaXRpYWxpemUgcmVzdGFydCBzdHVmZiAqLw0KLSAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPSBjaW5mby0+cmVzdGFydF9pbnRlcnZhbDsNCi0gIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0gPSAwOw0KLX0NCi0NCi0NCi0vKg0KLSAqIENvbXB1dGUgdGhlIGRlcml2ZWQgdmFsdWVzIGZvciBhIEh1ZmZtYW4gdGFibGUuDQotICogVGhpcyByb3V0aW5lIGFsc28gcGVyZm9ybXMgc29tZSB2YWxpZGF0aW9uIGNoZWNrcyBvbiB0aGUgdGFibGUuDQotICoNCi0gKiBOb3RlIHRoaXMgaXMgYWxzbyB1c2VkIGJ5IGpjcGh1ZmYuYy4NCi0gKi8NCi0NCi1HTE9CQUwodm9pZCkNCi1qcGVnX21ha2VfY19kZXJpdmVkX3RibCAoal9jb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gaXNEQywgaW50IHRibG5vLA0KLQkJCSBjX2Rlcml2ZWRfdGJsICoqIHBkdGJsKQ0KLXsNCi0gIEpIVUZGX1RCTCAqaHRibDsNCi0gIGNfZGVyaXZlZF90YmwgKmR0Ymw7DQotICBpbnQgcCwgaSwgbCwgbGFzdHAsIF9zaSwgbWF4c3ltYm9sOw0KLSAgY2hhciBodWZmc2l6ZVsyNTddOw0KLSAgdW5zaWduZWQgaW50IGh1ZmZjb2RlWzI1N107DQotICB1bnNpZ25lZCBpbnQgY29kZTsNCi0NCi0gIC8qIE5vdGUgdGhhdCBodWZmc2l6ZVtdIGFuZCBodWZmY29kZVtdIGFyZSBmaWxsZWQgaW4gY29kZS1sZW5ndGggb3JkZXIsDQotICAgKiBwYXJhbGxlbGluZyB0aGUgb3JkZXIgb2YgdGhlIHN5bWJvbHMgdGhlbXNlbHZlcyBpbiBodGJsLT5odWZmdmFsW10uDQotICAgKi8NCi0NCi0gIC8qIEZpbmQgdGhlIGlucHV0IEh1ZmZtYW4gdGFibGUgKi8NCi0gIGlmICh0YmxubyA8IDAgfHwgdGJsbm8gPj0gTlVNX0hVRkZfVEJMUykNCi0gICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fSFVGRl9UQUJMRSwgdGJsbm8pOw0KLSAgaHRibCA9DQotICAgIGlzREMgPyBjaW5mby0+ZGNfaHVmZl90YmxfcHRyc1t0Ymxub10gOiBjaW5mby0+YWNfaHVmZl90YmxfcHRyc1t0Ymxub107DQotICBpZiAoaHRibCA9PSBOVUxMKQ0KLSAgICBFUlJFWElUMShjaW5mbywgSkVSUl9OT19IVUZGX1RBQkxFLCB0Ymxubyk7DQotDQotICAvKiBBbGxvY2F0ZSBhIHdvcmtzcGFjZSBpZiB3ZSBoYXZlbid0IGFscmVhZHkgZG9uZSBzby4gKi8NCi0gIGlmICgqcGR0YmwgPT0gTlVMTCkNCi0gICAgKnBkdGJsID0gKGNfZGVyaXZlZF90YmwgKikNCi0gICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQkgIFNJWkVPRihjX2Rlcml2ZWRfdGJsKSk7DQotICBkdGJsID0gKnBkdGJsOw0KLSAgDQotICAvKiBGaWd1cmUgQy4xOiBtYWtlIHRhYmxlIG9mIEh1ZmZtYW4gY29kZSBsZW5ndGggZm9yIGVhY2ggc3ltYm9sICovDQotDQotICBwID0gMDsNCi0gIGZvciAobCA9IDE7IGwgPD0gMTY7IGwrKykgew0KLSAgICBpID0gKGludCkgaHRibC0+Yml0c1tsXTsNCi0gICAgaWYgKGkgPCAwIHx8IHAgKyBpID4gMjU2KQkvKiBwcm90ZWN0IGFnYWluc3QgdGFibGUgb3ZlcnJ1biAqLw0KLSAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0hVRkZfVEFCTEUpOw0KLSAgICB3aGlsZSAoaS0tKQ0KLSAgICAgIGh1ZmZzaXplW3ArK10gPSAoY2hhcikgbDsNCi0gIH0NCi0gIGh1ZmZzaXplW3BdID0gMDsNCi0gIGxhc3RwID0gcDsNCi0gIA0KLSAgLyogRmlndXJlIEMuMjogZ2VuZXJhdGUgdGhlIGNvZGVzIHRoZW1zZWx2ZXMgKi8NCi0gIC8qIFdlIGFsc28gdmFsaWRhdGUgdGhhdCB0aGUgY291bnRzIHJlcHJlc2VudCBhIGxlZ2FsIEh1ZmZtYW4gY29kZSB0cmVlLiAqLw0KLQ0KLSAgY29kZSA9IDA7DQotICBfc2kgPSBodWZmc2l6ZVswXTsNCi0gIHAgPSAwOw0KLSAgd2hpbGUgKGh1ZmZzaXplW3BdKSB7DQotICAgIHdoaWxlICgoKGludCkgaHVmZnNpemVbcF0pID09IF9zaSkgew0KLSAgICAgIGh1ZmZjb2RlW3ArK10gPSBjb2RlOw0KLSAgICAgIGNvZGUrKzsNCi0gICAgfQ0KLSAgICAvKiBjb2RlIGlzIG5vdyAxIG1vcmUgdGhhbiB0aGUgbGFzdCBjb2RlIHVzZWQgZm9yIGNvZGVsZW5ndGggc2k7IGJ1dA0KLSAgICAgKiBpdCBtdXN0IHN0aWxsIGZpdCBpbiBzaSBiaXRzLCBzaW5jZSBubyBjb2RlIGlzIGFsbG93ZWQgdG8gYmUgYWxsIG9uZXMuDQotICAgICAqLw0KLSAgICBpZiAoKChJTlQzMikgY29kZSkgPj0gKCgoSU5UMzIpIDEpIDw8IF9zaSkpDQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSFVGRl9UQUJMRSk7DQotICAgIGNvZGUgPDw9IDE7DQotICAgIF9zaSsrOw0KLSAgfQ0KLSAgDQotICAvKiBGaWd1cmUgQy4zOiBnZW5lcmF0ZSBlbmNvZGluZyB0YWJsZXMgKi8NCi0gIC8qIFRoZXNlIGFyZSBjb2RlIGFuZCBzaXplIGluZGV4ZWQgYnkgc3ltYm9sIHZhbHVlICovDQotDQotICAvKiBTZXQgYWxsIGNvZGVsZXNzIHN5bWJvbHMgdG8gaGF2ZSBjb2RlIGxlbmd0aCAwOw0KLSAgICogdGhpcyBsZXRzIHVzIGRldGVjdCBkdXBsaWNhdGUgVkFMIGVudHJpZXMgaGVyZSwgYW5kIGxhdGVyDQotICAgKiBhbGxvd3MgZW1pdF9iaXRzIHRvIGRldGVjdCBhbnkgYXR0ZW1wdCB0byBlbWl0IHN1Y2ggc3ltYm9scy4NCi0gICAqLw0KLSAgTUVNWkVSTyhkdGJsLT5laHVmc2ksIFNJWkVPRihkdGJsLT5laHVmc2kpKTsNCi0NCi0gIC8qIFRoaXMgaXMgYWxzbyBhIGNvbnZlbmllbnQgcGxhY2UgdG8gY2hlY2sgZm9yIG91dC1vZi1yYW5nZQ0KLSAgICogYW5kIGR1cGxpY2F0ZWQgVkFMIGVudHJpZXMuICBXZSBhbGxvdyAwLi4yNTUgZm9yIEFDIHN5bWJvbHMNCi0gICAqIGJ1dCBvbmx5IDAuLjE1IGZvciBEQy4gIChXZSBjb3VsZCBjb25zdHJhaW4gdGhlbSBmdXJ0aGVyDQotICAgKiBiYXNlZCBvbiBkYXRhIGRlcHRoIGFuZCBtb2RlLCBidXQgdGhpcyBzZWVtcyBlbm91Z2guKQ0KLSAgICovDQotICBtYXhzeW1ib2wgPSBpc0RDID8gMTUgOiAyNTU7DQotDQotICBmb3IgKHAgPSAwOyBwIDwgbGFzdHA7IHArKykgew0KLSAgICBpID0gaHRibC0+aHVmZnZhbFtwXTsNCi0gICAgaWYgKGkgPCAwIHx8IGkgPiBtYXhzeW1ib2wgfHwgZHRibC0+ZWh1ZnNpW2ldKQ0KLSAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0hVRkZfVEFCTEUpOw0KLSAgICBkdGJsLT5laHVmY29baV0gPSBodWZmY29kZVtwXTsNCi0gICAgZHRibC0+ZWh1ZnNpW2ldID0gaHVmZnNpemVbcF07DQotICB9DQotfQ0KLQ0KLQ0KLS8qIE91dHB1dHRpbmcgYnl0ZXMgdG8gdGhlIGZpbGUgKi8NCi0NCi0vKiBFbWl0IGEgYnl0ZSwgdGFraW5nICdhY3Rpb24nIGlmIG11c3Qgc3VzcGVuZC4gKi8NCi0jZGVmaW5lIGVtaXRfYnl0ZShzdGF0ZSx2YWwsYWN0aW9uKSAgXA0KLQl7ICooc3RhdGUpLT5uZXh0X291dHB1dF9ieXRlKysgPSAoSk9DVEVUKSAodmFsKTsgIFwNCi0JICBpZiAoLS0oc3RhdGUpLT5mcmVlX2luX2J1ZmZlciA9PSAwKSAgXA0KLQkgICAgaWYgKCEgZHVtcF9idWZmZXIoc3RhdGUpKSAgXA0KLQkgICAgICB7IGFjdGlvbjsgfSB9DQotDQotDQotTE9DQUwoYm9vbGVhbikNCi1kdW1wX2J1ZmZlciAod29ya2luZ19zdGF0ZSAqIHN0YXRlKQ0KLS8qIEVtcHR5IHRoZSBvdXRwdXQgYnVmZmVyOyByZXR1cm4gVFJVRSBpZiBzdWNjZXNzZnVsLCBGQUxTRSBpZiBtdXN0IHN1c3BlbmQgKi8NCi17DQotICBzdHJ1Y3QganBlZ19kZXN0aW5hdGlvbl9tZ3IgKiBkZXN0ID0gc3RhdGUtPmNpbmZvLT5kZXN0Ow0KLQ0KLSAgaWYgKCEgKCpkZXN0LT5lbXB0eV9vdXRwdXRfYnVmZmVyKSAoc3RhdGUtPmNpbmZvKSkNCi0gICAgcmV0dXJuIEZBTFNFOw0KLSAgLyogQWZ0ZXIgYSBzdWNjZXNzZnVsIGJ1ZmZlciBkdW1wLCBtdXN0IHJlc2V0IGJ1ZmZlciBwb2ludGVycyAqLw0KLSAgc3RhdGUtPm5leHRfb3V0cHV0X2J5dGUgPSBkZXN0LT5uZXh0X291dHB1dF9ieXRlOw0KLSAgc3RhdGUtPmZyZWVfaW5fYnVmZmVyID0gZGVzdC0+ZnJlZV9pbl9idWZmZXI7DQotICByZXR1cm4gVFJVRTsNCi19DQotDQotDQotLyogT3V0cHV0dGluZyBiaXRzIHRvIHRoZSBmaWxlICovDQotDQotLyogT25seSB0aGUgcmlnaHQgMjQgYml0cyBvZiBwdXRfYnVmZmVyIGFyZSB1c2VkOyB0aGUgdmFsaWQgYml0cyBhcmUNCi0gKiBsZWZ0LWp1c3RpZmllZCBpbiB0aGlzIHBhcnQuICBBdCBtb3N0IDE2IGJpdHMgY2FuIGJlIHBhc3NlZCB0byBlbWl0X2JpdHMNCi0gKiBpbiBvbmUgY2FsbCwgYW5kIHdlIG5ldmVyIHJldGFpbiBtb3JlIHRoYW4gNyBiaXRzIGluIHB1dF9idWZmZXINCi0gKiBiZXR3ZWVuIGNhbGxzLCBzbyAyNCBiaXRzIGFyZSBzdWZmaWNpZW50Lg0KLSAqLw0KLQ0KLUlOTElORQ0KLUxPQ0FMKGJvb2xlYW4pDQotZW1pdF9iaXRzICh3b3JraW5nX3N0YXRlICogc3RhdGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgc2l6ZSkNCi0vKiBFbWl0IHNvbWUgYml0czsgcmV0dXJuIFRSVUUgaWYgc3VjY2Vzc2Z1bCwgRkFMU0UgaWYgbXVzdCBzdXNwZW5kICovDQotew0KLSAgLyogVGhpcyByb3V0aW5lIGlzIGhlYXZpbHkgdXNlZCwgc28gaXQncyB3b3J0aCBjb2RpbmcgdGlnaHRseS4gKi8NCi0gIHJlZ2lzdGVyIElOVDMyIHB1dF9idWZmZXIgPSAoSU5UMzIpIGNvZGU7DQotICByZWdpc3RlciBpbnQgcHV0X2JpdHMgPSBzdGF0ZS0+Y3VyLnB1dF9iaXRzOw0KLQ0KLSAgLyogaWYgc2l6ZSBpcyAwLCBjYWxsZXIgdXNlZCBhbiBpbnZhbGlkIEh1ZmZtYW4gdGFibGUgZW50cnkgKi8NCi0gIGlmIChzaXplID09IDApDQotICAgIEVSUkVYSVQoc3RhdGUtPmNpbmZvLCBKRVJSX0hVRkZfTUlTU0lOR19DT0RFKTsNCi0NCi0gIHB1dF9idWZmZXIgJj0gKCgoSU5UMzIpIDEpPDxzaXplKSAtIDE7IC8qIG1hc2sgb2ZmIGFueSBleHRyYSBiaXRzIGluIGNvZGUgKi8NCi0gIA0KLSAgcHV0X2JpdHMgKz0gc2l6ZTsJCS8qIG5ldyBudW1iZXIgb2YgYml0cyBpbiBidWZmZXIgKi8NCi0gIA0KLSAgcHV0X2J1ZmZlciA8PD0gMjQgLSBwdXRfYml0czsgLyogYWxpZ24gaW5jb21pbmcgYml0cyAqLw0KLQ0KLSAgcHV0X2J1ZmZlciB8PSBzdGF0ZS0+Y3VyLnB1dF9idWZmZXI7IC8qIGFuZCBtZXJnZSB3aXRoIG9sZCBidWZmZXIgY29udGVudHMgKi8NCi0gIA0KLSAgd2hpbGUgKHB1dF9iaXRzID49IDgpIHsNCi0gICAgaW50IGMgPSAoaW50KSAoKHB1dF9idWZmZXIgPj4gMTYpICYgMHhGRik7DQotICAgIA0KLSAgICBlbWl0X2J5dGUoc3RhdGUsIGMsIHJldHVybiBGQUxTRSk7DQotICAgIGlmIChjID09IDB4RkYpIHsJCS8qIG5lZWQgdG8gc3R1ZmYgYSB6ZXJvIGJ5dGU/ICovDQotICAgICAgZW1pdF9ieXRlKHN0YXRlLCAwLCByZXR1cm4gRkFMU0UpOw0KLSAgICB9DQotICAgIHB1dF9idWZmZXIgPDw9IDg7DQotICAgIHB1dF9iaXRzIC09IDg7DQotICB9DQotDQotICBzdGF0ZS0+Y3VyLnB1dF9idWZmZXIgPSBwdXRfYnVmZmVyOyAvKiB1cGRhdGUgc3RhdGUgdmFyaWFibGVzICovDQotICBzdGF0ZS0+Y3VyLnB1dF9iaXRzID0gcHV0X2JpdHM7DQotDQotICByZXR1cm4gVFJVRTsNCi19DQotDQotDQotTE9DQUwoYm9vbGVhbikNCi1mbHVzaF9iaXRzICh3b3JraW5nX3N0YXRlICogc3RhdGUpDQotew0KLSAgaWYgKCEgZW1pdF9iaXRzKHN0YXRlLCAweDdGLCA3KSkgLyogZmlsbCBhbnkgcGFydGlhbCBieXRlIHdpdGggb25lcyAqLw0KLSAgICByZXR1cm4gRkFMU0U7DQotICBzdGF0ZS0+Y3VyLnB1dF9idWZmZXIgPSAwOwkvKiBhbmQgcmVzZXQgYml0LWJ1ZmZlciB0byBlbXB0eSAqLw0KLSAgc3RhdGUtPmN1ci5wdXRfYml0cyA9IDA7DQotICByZXR1cm4gVFJVRTsNCi19DQotDQotDQotLyogRW5jb2RlIGEgc2luZ2xlIGJsb2NrJ3Mgd29ydGggb2YgY29lZmZpY2llbnRzICovDQotDQotTE9DQUwoYm9vbGVhbikNCi1lbmNvZGVfb25lX2Jsb2NrICh3b3JraW5nX3N0YXRlICogc3RhdGUsIEpDT0VGUFRSIGJsb2NrLCBpbnQgbGFzdF9kY192YWwsDQotCQkgIGNfZGVyaXZlZF90YmwgKmRjdGJsLCBjX2Rlcml2ZWRfdGJsICphY3RibCkNCi17DQotICByZWdpc3RlciBpbnQgdGVtcCwgdGVtcDI7DQotICByZWdpc3RlciBpbnQgbmJpdHM7DQotICByZWdpc3RlciBpbnQgaywgciwgaTsNCi0gIA0KLSAgLyogRW5jb2RlIHRoZSBEQyBjb2VmZmljaWVudCBkaWZmZXJlbmNlIHBlciBzZWN0aW9uIEYuMS4yLjEgKi8NCi0gIA0KLSAgdGVtcCA9IHRlbXAyID0gYmxvY2tbMF0gLSBsYXN0X2RjX3ZhbDsNCi0NCi0gIGlmICh0ZW1wIDwgMCkgew0KLSAgICB0ZW1wID0gLXRlbXA7CQkvKiB0ZW1wIGlzIGFicyB2YWx1ZSBvZiBpbnB1dCAqLw0KLSAgICAvKiBGb3IgYSBuZWdhdGl2ZSBpbnB1dCwgd2FudCB0ZW1wMiA9IGJpdHdpc2UgY29tcGxlbWVudCBvZiBhYnMoaW5wdXQpICovDQotICAgIC8qIFRoaXMgY29kZSBhc3N1bWVzIHdlIGFyZSBvbiBhIHR3bydzIGNvbXBsZW1lbnQgbWFjaGluZSAqLw0KLSAgICB0ZW1wMi0tOw0KLSAgfQ0KLSAgDQotICAvKiBGaW5kIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgZm9yIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGNvZWZmaWNpZW50ICovDQotICBuYml0cyA9IDA7DQotICB3aGlsZSAodGVtcCkgew0KLSAgICBuYml0cysrOw0KLSAgICB0ZW1wID4+PSAxOw0KLSAgfQ0KLSAgLyogQ2hlY2sgZm9yIG91dC1vZi1yYW5nZSBjb2VmZmljaWVudCB2YWx1ZXMuDQotICAgKiBTaW5jZSB3ZSdyZSBlbmNvZGluZyBhIGRpZmZlcmVuY2UsIHRoZSByYW5nZSBsaW1pdCBpcyB0d2ljZSBhcyBtdWNoLg0KLSAgICovDQotICBpZiAobmJpdHMgPiBNQVhfQ09FRl9CSVRTKzEpDQotICAgIEVSUkVYSVQoc3RhdGUtPmNpbmZvLCBKRVJSX0JBRF9EQ1RfQ09FRik7DQotICANCi0gIC8qIEVtaXQgdGhlIEh1ZmZtYW4tY29kZWQgc3ltYm9sIGZvciB0aGUgbnVtYmVyIG9mIGJpdHMgKi8NCi0gIGlmICghIGVtaXRfYml0cyhzdGF0ZSwgZGN0YmwtPmVodWZjb1tuYml0c10sIGRjdGJsLT5laHVmc2lbbmJpdHNdKSkNCi0gICAgcmV0dXJuIEZBTFNFOw0KLQ0KLSAgLyogRW1pdCB0aGF0IG51bWJlciBvZiBiaXRzIG9mIHRoZSB2YWx1ZSwgaWYgcG9zaXRpdmUsICovDQotICAvKiBvciB0aGUgY29tcGxlbWVudCBvZiBpdHMgbWFnbml0dWRlLCBpZiBuZWdhdGl2ZS4gKi8NCi0gIGlmIChuYml0cykJCQkvKiBlbWl0X2JpdHMgcmVqZWN0cyBjYWxscyB3aXRoIHNpemUgMCAqLw0KLSAgICBpZiAoISBlbWl0X2JpdHMoc3RhdGUsICh1bnNpZ25lZCBpbnQpIHRlbXAyLCBuYml0cykpDQotICAgICAgcmV0dXJuIEZBTFNFOw0KLQ0KLSAgLyogRW5jb2RlIHRoZSBBQyBjb2VmZmljaWVudHMgcGVyIHNlY3Rpb24gRi4xLjIuMiAqLw0KLSAgDQotICByID0gMDsJCQkvKiByID0gcnVuIGxlbmd0aCBvZiB6ZXJvcyAqLw0KLSAgDQotICBmb3IgKGsgPSAxOyBrIDwgRENUU0laRTI7IGsrKykgew0KLSAgICBpZiAoKHRlbXAgPSBibG9ja1tqcGVnX25hdHVyYWxfb3JkZXJba11dKSA9PSAwKSB7DQotICAgICAgcisrOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgIC8qIGlmIHJ1biBsZW5ndGggPiAxNSwgbXVzdCBlbWl0IHNwZWNpYWwgcnVuLWxlbmd0aC0xNiBjb2RlcyAoMHhGMCkgKi8NCi0gICAgICB3aGlsZSAociA+IDE1KSB7DQotCWlmICghIGVtaXRfYml0cyhzdGF0ZSwgYWN0YmwtPmVodWZjb1sweEYwXSwgYWN0YmwtPmVodWZzaVsweEYwXSkpDQotCSAgcmV0dXJuIEZBTFNFOw0KLQlyIC09IDE2Ow0KLSAgICAgIH0NCi0NCi0gICAgICB0ZW1wMiA9IHRlbXA7DQotICAgICAgaWYgKHRlbXAgPCAwKSB7DQotCXRlbXAgPSAtdGVtcDsJCS8qIHRlbXAgaXMgYWJzIHZhbHVlIG9mIGlucHV0ICovDQotCS8qIFRoaXMgY29kZSBhc3N1bWVzIHdlIGFyZSBvbiBhIHR3bydzIGNvbXBsZW1lbnQgbWFjaGluZSAqLw0KLQl0ZW1wMi0tOw0KLSAgICAgIH0NCi0gICAgICANCi0gICAgICAvKiBGaW5kIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgZm9yIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGNvZWZmaWNpZW50ICovDQotICAgICAgbmJpdHMgPSAxOwkJLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgMSBiaXQgKi8NCi0gICAgICB3aGlsZSAoKHRlbXAgPj49IDEpKQ0KLQluYml0cysrOw0KLSAgICAgIC8qIENoZWNrIGZvciBvdXQtb2YtcmFuZ2UgY29lZmZpY2llbnQgdmFsdWVzICovDQotICAgICAgaWYgKG5iaXRzID4gTUFYX0NPRUZfQklUUykNCi0JRVJSRVhJVChzdGF0ZS0+Y2luZm8sIEpFUlJfQkFEX0RDVF9DT0VGKTsNCi0gICAgICANCi0gICAgICAvKiBFbWl0IEh1ZmZtYW4gc3ltYm9sIGZvciBydW4gbGVuZ3RoIC8gbnVtYmVyIG9mIGJpdHMgKi8NCi0gICAgICBpID0gKHIgPDwgNCkgKyBuYml0czsNCi0gICAgICBpZiAoISBlbWl0X2JpdHMoc3RhdGUsIGFjdGJsLT5laHVmY29baV0sIGFjdGJsLT5laHVmc2lbaV0pKQ0KLQlyZXR1cm4gRkFMU0U7DQotDQotICAgICAgLyogRW1pdCB0aGF0IG51bWJlciBvZiBiaXRzIG9mIHRoZSB2YWx1ZSwgaWYgcG9zaXRpdmUsICovDQotICAgICAgLyogb3IgdGhlIGNvbXBsZW1lbnQgb2YgaXRzIG1hZ25pdHVkZSwgaWYgbmVnYXRpdmUuICovDQotICAgICAgaWYgKCEgZW1pdF9iaXRzKHN0YXRlLCAodW5zaWduZWQgaW50KSB0ZW1wMiwgbmJpdHMpKQ0KLQlyZXR1cm4gRkFMU0U7DQotICAgICAgDQotICAgICAgciA9IDA7DQotICAgIH0NCi0gIH0NCi0NCi0gIC8qIElmIHRoZSBsYXN0IGNvZWYocykgd2VyZSB6ZXJvLCBlbWl0IGFuIGVuZC1vZi1ibG9jayBjb2RlICovDQotICBpZiAociA+IDApDQotICAgIGlmICghIGVtaXRfYml0cyhzdGF0ZSwgYWN0YmwtPmVodWZjb1swXSwgYWN0YmwtPmVodWZzaVswXSkpDQotICAgICAgcmV0dXJuIEZBTFNFOw0KLQ0KLSAgcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLQ0KLS8qDQotICogRW1pdCBhIHJlc3RhcnQgbWFya2VyICYgcmVzeW5jaHJvbml6ZSBwcmVkaWN0aW9ucy4NCi0gKi8NCi0NCi1MT0NBTChib29sZWFuKQ0KLWVtaXRfcmVzdGFydCAod29ya2luZ19zdGF0ZSAqIHN0YXRlLCBpbnQgcmVzdGFydF9udW0pDQotew0KLSAgaW50IGNpOw0KLQ0KLSAgaWYgKCEgZmx1c2hfYml0cyhzdGF0ZSkpDQotICAgIHJldHVybiBGQUxTRTsNCi0NCi0gIGVtaXRfYnl0ZShzdGF0ZSwgMHhGRiwgcmV0dXJuIEZBTFNFKTsNCi0gIGVtaXRfYnl0ZShzdGF0ZSwgSlBFR19SU1QwICsgcmVzdGFydF9udW0sIHJldHVybiBGQUxTRSk7DQotDQotICAvKiBSZS1pbml0aWFsaXplIERDIHByZWRpY3Rpb25zIHRvIDAgKi8NCi0gIGZvciAoY2kgPSAwOyBjaSA8IHN0YXRlLT5jaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykNCi0gICAgc3RhdGUtPmN1ci5sYXN0X2RjX3ZhbFtjaV0gPSAwOw0KLQ0KLSAgLyogVGhlIHJlc3RhcnQgY291bnRlciBpcyBub3QgdXBkYXRlZCB1bnRpbCB3ZSBzdWNjZXNzZnVsbHkgd3JpdGUgdGhlIE1DVS4gKi8NCi0NCi0gIHJldHVybiBUUlVFOw0KLX0NCi0NCi0NCi0vKg0KLSAqIEVuY29kZSBhbmQgb3V0cHV0IG9uZSBNQ1UncyB3b3J0aCBvZiBIdWZmbWFuLWNvbXByZXNzZWQgY29lZmZpY2llbnRzLg0KLSAqLw0KLQ0KLU1FVEhPRERFRihib29sZWFuKQ0KLWVuY29kZV9tY3VfaHVmZiAoal9jb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpDQotew0KLSAgaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5Ow0KLSAgd29ya2luZ19zdGF0ZSBzdGF0ZTsNCi0gIGludCBibGtuLCBjaTsNCi0gIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyOw0KLQ0KLSAgLyogTG9hZCB1cCB3b3JraW5nIHN0YXRlICovDQotICBzdGF0ZS5uZXh0X291dHB1dF9ieXRlID0gY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGU7DQotICBzdGF0ZS5mcmVlX2luX2J1ZmZlciA9IGNpbmZvLT5kZXN0LT5mcmVlX2luX2J1ZmZlcjsNCi0gIEFTU0lHTl9TVEFURShzdGF0ZS5jdXIsIGVudHJvcHktPnNhdmVkKTsNCi0gIHN0YXRlLmNpbmZvID0gY2luZm87DQotDQotICAvKiBFbWl0IHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZCAqLw0KLSAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7DQotICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQ0KLSAgICAgIGlmICghIGVtaXRfcmVzdGFydCgmc3RhdGUsIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0pKQ0KLQlyZXR1cm4gRkFMU0U7DQotICB9DQotDQotICAvKiBFbmNvZGUgdGhlIE1DVSBkYXRhIGJsb2NrcyAqLw0KLSAgZm9yIChibGtuID0gMDsgYmxrbiA8IGNpbmZvLT5ibG9ja3NfaW5fTUNVOyBibGtuKyspIHsNCi0gICAgY2kgPSBjaW5mby0+TUNVX21lbWJlcnNoaXBbYmxrbl07DQotICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07DQotICAgIGlmICghIGVuY29kZV9vbmVfYmxvY2soJnN0YXRlLA0KLQkJCSAgIE1DVV9kYXRhW2Jsa25dWzBdLCBzdGF0ZS5jdXIubGFzdF9kY192YWxbY2ldLA0KLQkJCSAgIGVudHJvcHktPmRjX2Rlcml2ZWRfdGJsc1tjb21wcHRyLT5kY190Ymxfbm9dLA0KLQkJCSAgIGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsc1tjb21wcHRyLT5hY190Ymxfbm9dKSkNCi0gICAgICByZXR1cm4gRkFMU0U7DQotICAgIC8qIFVwZGF0ZSBsYXN0X2RjX3ZhbCAqLw0KLSAgICBzdGF0ZS5jdXIubGFzdF9kY192YWxbY2ldID0gTUNVX2RhdGFbYmxrbl1bMF1bMF07DQotICB9DQotDQotICAvKiBDb21wbGV0ZWQgTUNVLCBzbyB1cGRhdGUgc3RhdGUgKi8NCi0gIGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlID0gc3RhdGUubmV4dF9vdXRwdXRfYnl0ZTsNCi0gIGNpbmZvLT5kZXN0LT5mcmVlX2luX2J1ZmZlciA9IHN0YXRlLmZyZWVfaW5fYnVmZmVyOw0KLSAgQVNTSUdOX1NUQVRFKGVudHJvcHktPnNhdmVkLCBzdGF0ZS5jdXIpOw0KLQ0KLSAgLyogVXBkYXRlIHJlc3RhcnQtaW50ZXJ2YWwgc3RhdGUgdG9vICovDQotICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsNCi0gICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApIHsNCi0gICAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOw0KLSAgICAgIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0rKzsNCi0gICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtICY9IDc7DQotICAgIH0NCi0gICAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsNCi0gIH0NCi0NCi0gIHJldHVybiBUUlVFOw0KLX0NCi0NCi0NCi0vKg0KLSAqIEZpbmlzaCB1cCBhdCB0aGUgZW5kIG9mIGEgSHVmZm1hbi1jb21wcmVzc2VkIHNjYW4uDQotICovDQotDQotTUVUSE9EREVGKHZvaWQpDQotZmluaXNoX3Bhc3NfaHVmZiAoal9jb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAgaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5Ow0KLSAgd29ya2luZ19zdGF0ZSBzdGF0ZTsNCi0NCi0gIC8qIExvYWQgdXAgd29ya2luZyBzdGF0ZSAuLi4gZmx1c2hfYml0cyBuZWVkcyBpdCAqLw0KLSAgc3RhdGUubmV4dF9vdXRwdXRfYnl0ZSA9IGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlOw0KLSAgc3RhdGUuZnJlZV9pbl9idWZmZXIgPSBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXI7DQotICBBU1NJR05fU1RBVEUoc3RhdGUuY3VyLCBlbnRyb3B5LT5zYXZlZCk7DQotICBzdGF0ZS5jaW5mbyA9IGNpbmZvOw0KLQ0KLSAgLyogRmx1c2ggb3V0IHRoZSBsYXN0IGRhdGEgKi8NCi0gIGlmICghIGZsdXNoX2JpdHMoJnN0YXRlKSkNCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9DQU5UX1NVU1BFTkQpOw0KLQ0KLSAgLyogVXBkYXRlIHN0YXRlICovDQotICBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZSA9IHN0YXRlLm5leHRfb3V0cHV0X2J5dGU7DQotICBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXIgPSBzdGF0ZS5mcmVlX2luX2J1ZmZlcjsNCi0gIEFTU0lHTl9TVEFURShlbnRyb3B5LT5zYXZlZCwgc3RhdGUuY3VyKTsNCi19DQotDQotDQotLyoNCi0gKiBIdWZmbWFuIGNvZGluZyBvcHRpbWl6YXRpb24uDQotICoNCi0gKiBXZSBmaXJzdCBzY2FuIHRoZSBzdXBwbGllZCBkYXRhIGFuZCBjb3VudCB0aGUgbnVtYmVyIG9mIHVzZXMgb2YgZWFjaCBzeW1ib2wNCi0gKiB0aGF0IGlzIHRvIGJlIEh1ZmZtYW4tY29kZWQuIChUaGlzIHByb2Nlc3MgTVVTVCBhZ3JlZSB3aXRoIHRoZSBjb2RlIGFib3ZlLikNCi0gKiBUaGVuIHdlIGJ1aWxkIGEgSHVmZm1hbiBjb2RpbmcgdHJlZSBmb3IgdGhlIG9ic2VydmVkIGNvdW50cy4NCi0gKiBTeW1ib2xzIHdoaWNoIGFyZSBub3QgbmVlZGVkIGF0IGFsbCBmb3IgdGhlIHBhcnRpY3VsYXIgaW1hZ2UgYXJlIG5vdA0KLSAqIGFzc2lnbmVkIGFueSBjb2RlLCB3aGljaCBzYXZlcyBzcGFjZSBpbiB0aGUgREhUIG1hcmtlciBhcyB3ZWxsIGFzIGluDQotICogdGhlIGNvbXByZXNzZWQgZGF0YS4NCi0gKi8NCi0NCi0jaWZkZWYgRU5UUk9QWV9PUFRfU1VQUE9SVEVEDQotDQotDQotLyogUHJvY2VzcyBhIHNpbmdsZSBibG9jaydzIHdvcnRoIG9mIGNvZWZmaWNpZW50cyAqLw0KLQ0KLUxPQ0FMKHZvaWQpDQotaHRlc3Rfb25lX2Jsb2NrIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSkNPRUZQVFIgYmxvY2ssIGludCBsYXN0X2RjX3ZhbCwNCi0JCSBsb25nIGRjX2NvdW50c1tdLCBsb25nIGFjX2NvdW50c1tdKQ0KLXsNCi0gIHJlZ2lzdGVyIGludCB0ZW1wOw0KLSAgcmVnaXN0ZXIgaW50IG5iaXRzOw0KLSAgcmVnaXN0ZXIgaW50IGssIHI7DQotICANCi0gIC8qIEVuY29kZSB0aGUgREMgY29lZmZpY2llbnQgZGlmZmVyZW5jZSBwZXIgc2VjdGlvbiBGLjEuMi4xICovDQotICANCi0gIHRlbXAgPSBibG9ja1swXSAtIGxhc3RfZGNfdmFsOw0KLSAgaWYgKHRlbXAgPCAwKQ0KLSAgICB0ZW1wID0gLXRlbXA7DQotICANCi0gIC8qIEZpbmQgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCBmb3IgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29lZmZpY2llbnQgKi8NCi0gIG5iaXRzID0gMDsNCi0gIHdoaWxlICh0ZW1wKSB7DQotICAgIG5iaXRzKys7DQotICAgIHRlbXAgPj49IDE7DQotICB9DQotICAvKiBDaGVjayBmb3Igb3V0LW9mLXJhbmdlIGNvZWZmaWNpZW50IHZhbHVlcy4NCi0gICAqIFNpbmNlIHdlJ3JlIGVuY29kaW5nIGEgZGlmZmVyZW5jZSwgdGhlIHJhbmdlIGxpbWl0IGlzIHR3aWNlIGFzIG11Y2guDQotICAgKi8NCi0gIGlmIChuYml0cyA+IE1BWF9DT0VGX0JJVFMrMSkNCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfRENUX0NPRUYpOw0KLQ0KLSAgLyogQ291bnQgdGhlIEh1ZmZtYW4gc3ltYm9sIGZvciB0aGUgbnVtYmVyIG9mIGJpdHMgKi8NCi0gIGRjX2NvdW50c1tuYml0c10rKzsNCi0gIA0KLSAgLyogRW5jb2RlIHRoZSBBQyBjb2VmZmljaWVudHMgcGVyIHNlY3Rpb24gRi4xLjIuMiAqLw0KLSAgDQotICByID0gMDsJCQkvKiByID0gcnVuIGxlbmd0aCBvZiB6ZXJvcyAqLw0KLSAgDQotICBmb3IgKGsgPSAxOyBrIDwgRENUU0laRTI7IGsrKykgew0KLSAgICBpZiAoKHRlbXAgPSBibG9ja1tqcGVnX25hdHVyYWxfb3JkZXJba11dKSA9PSAwKSB7DQotICAgICAgcisrOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgIC8qIGlmIHJ1biBsZW5ndGggPiAxNSwgbXVzdCBlbWl0IHNwZWNpYWwgcnVuLWxlbmd0aC0xNiBjb2RlcyAoMHhGMCkgKi8NCi0gICAgICB3aGlsZSAociA+IDE1KSB7DQotCWFjX2NvdW50c1sweEYwXSsrOw0KLQlyIC09IDE2Ow0KLSAgICAgIH0NCi0gICAgICANCi0gICAgICAvKiBGaW5kIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgZm9yIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGNvZWZmaWNpZW50ICovDQotICAgICAgaWYgKHRlbXAgPCAwKQ0KLQl0ZW1wID0gLXRlbXA7DQotICAgICAgDQotICAgICAgLyogRmluZCB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIGZvciB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb2VmZmljaWVudCAqLw0KLSAgICAgIG5iaXRzID0gMTsJCS8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIDEgYml0ICovDQotICAgICAgd2hpbGUgKCh0ZW1wID4+PSAxKSkNCi0JbmJpdHMrKzsNCi0gICAgICAvKiBDaGVjayBmb3Igb3V0LW9mLXJhbmdlIGNvZWZmaWNpZW50IHZhbHVlcyAqLw0KLSAgICAgIGlmIChuYml0cyA+IE1BWF9DT0VGX0JJVFMpDQotCUVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0RDVF9DT0VGKTsNCi0gICAgICANCi0gICAgICAvKiBDb3VudCBIdWZmbWFuIHN5bWJvbCBmb3IgcnVuIGxlbmd0aCAvIG51bWJlciBvZiBiaXRzICovDQotICAgICAgYWNfY291bnRzWyhyIDw8IDQpICsgbmJpdHNdKys7DQotICAgICAgDQotICAgICAgciA9IDA7DQotICAgIH0NCi0gIH0NCi0NCi0gIC8qIElmIHRoZSBsYXN0IGNvZWYocykgd2VyZSB6ZXJvLCBlbWl0IGFuIGVuZC1vZi1ibG9jayBjb2RlICovDQotICBpZiAociA+IDApDQotICAgIGFjX2NvdW50c1swXSsrOw0KLX0NCi0NCi0NCi0vKg0KLSAqIFRyaWFsLWVuY29kZSBvbmUgTUNVJ3Mgd29ydGggb2YgSHVmZm1hbi1jb21wcmVzc2VkIGNvZWZmaWNpZW50cy4NCi0gKiBObyBkYXRhIGlzIGFjdHVhbGx5IG91dHB1dCwgc28gbm8gc3VzcGVuc2lvbiByZXR1cm4gaXMgcG9zc2libGUuDQotICovDQotDQotTUVUSE9EREVGKGJvb2xlYW4pDQotZW5jb2RlX21jdV9nYXRoZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQ0KLXsNCi0gIGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsNCi0gIGludCBibGtuLCBjaTsNCi0gIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyOw0KLQ0KLSAgLyogVGFrZSBjYXJlIG9mIHJlc3RhcnQgaW50ZXJ2YWxzIGlmIG5lZWRlZCAqLw0KLSAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7DQotICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKSB7DQotICAgICAgLyogUmUtaW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovDQotICAgICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspDQotCWVudHJvcHktPnNhdmVkLmxhc3RfZGNfdmFsW2NpXSA9IDA7DQotICAgICAgLyogVXBkYXRlIHJlc3RhcnQgc3RhdGUgKi8NCi0gICAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOw0KLSAgICB9DQotICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07DQotICB9DQotDQotICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgew0KLSAgICBjaSA9IGNpbmZvLT5NQ1VfbWVtYmVyc2hpcFtibGtuXTsNCi0gICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsNCi0gICAgaHRlc3Rfb25lX2Jsb2NrKGNpbmZvLCBNQ1VfZGF0YVtibGtuXVswXSwgZW50cm9weS0+c2F2ZWQubGFzdF9kY192YWxbY2ldLA0KLQkJICAgIGVudHJvcHktPmRjX2NvdW50X3B0cnNbY29tcHB0ci0+ZGNfdGJsX25vXSwNCi0JCSAgICBlbnRyb3B5LT5hY19jb3VudF9wdHJzW2NvbXBwdHItPmFjX3RibF9ub10pOw0KLSAgICBlbnRyb3B5LT5zYXZlZC5sYXN0X2RjX3ZhbFtjaV0gPSBNQ1VfZGF0YVtibGtuXVswXVswXTsNCi0gIH0NCi0NCi0gIHJldHVybiBUUlVFOw0KLX0NCi0NCi0NCi0vKg0KLSAqIEdlbmVyYXRlIHRoZSBiZXN0IEh1ZmZtYW4gY29kZSB0YWJsZSBmb3IgdGhlIGdpdmVuIGNvdW50cywgZmlsbCBodGJsLg0KLSAqIE5vdGUgdGhpcyBpcyBhbHNvIHVzZWQgYnkgamNwaHVmZi5jLg0KLSAqDQotICogVGhlIEpQRUcgc3RhbmRhcmQgcmVxdWlyZXMgdGhhdCBubyBzeW1ib2wgYmUgYXNzaWduZWQgYSBjb2Rld29yZCBvZiBhbGwNCi0gKiBvbmUgYml0cyAoc28gdGhhdCBwYWRkaW5nIGJpdHMgYWRkZWQgYXQgdGhlIGVuZCBvZiBhIGNvbXByZXNzZWQgc2VnbWVudA0KLSAqIGNhbid0IGxvb2sgbGlrZSBhIHZhbGlkIGNvZGUpLiAgQmVjYXVzZSBvZiB0aGUgY2Fub25pY2FsIG9yZGVyaW5nIG9mDQotICogY29kZXdvcmRzLCB0aGlzIGp1c3QgbWVhbnMgdGhhdCB0aGVyZSBtdXN0IGJlIGFuIHVudXNlZCBzbG90IGluIHRoZQ0KLSAqIGxvbmdlc3QgY29kZXdvcmQgbGVuZ3RoIGNhdGVnb3J5LiAgU2VjdGlvbiBLLjIgb2YgdGhlIEpQRUcgc3BlYyBzdWdnZXN0cw0KLSAqIHJlc2VydmluZyBzdWNoIGEgc2xvdCBieSBwcmV0ZW5kaW5nIHRoYXQgc3ltYm9sIDI1NiBpcyBhIHZhbGlkIHN5bWJvbA0KLSAqIHdpdGggY291bnQgMS4gIEluIHRoZW9yeSB0aGF0J3Mgbm90IG9wdGltYWw7IGdpdmluZyBpdCBjb3VudCB6ZXJvIGJ1dA0KLSAqIGluY2x1ZGluZyBpdCBpbiB0aGUgc3ltYm9sIHNldCBhbnl3YXkgc2hvdWxkIGdpdmUgYSBiZXR0ZXIgSHVmZm1hbiBjb2RlLg0KLSAqIEJ1dCB0aGUgdGhlb3JldGljYWxseSBiZXR0ZXIgY29kZSBhY3R1YWxseSBzZWVtcyB0byBjb21lIG91dCB3b3JzZSBpbg0KLSAqIHByYWN0aWNlLCBiZWNhdXNlIGl0IHByb2R1Y2VzIG1vcmUgYWxsLW9uZXMgYnl0ZXMgKHdoaWNoIGluY3VyIHN0dWZmZWQNCi0gKiB6ZXJvIGJ5dGVzIGluIHRoZSBmaW5hbCBmaWxlKS4gIEluIGFueSBjYXNlIHRoZSBkaWZmZXJlbmNlIGlzIHRpbnkuDQotICoNCi0gKiBUaGUgSlBFRyBzdGFuZGFyZCByZXF1aXJlcyBIdWZmbWFuIGNvZGVzIHRvIGJlIG5vIG1vcmUgdGhhbiAxNiBiaXRzIGxvbmcuDQotICogSWYgc29tZSBzeW1ib2xzIGhhdmUgYSB2ZXJ5IHNtYWxsIGJ1dCBub256ZXJvIHByb2JhYmlsaXR5LCB0aGUgSHVmZm1hbiB0cmVlDQotICogbXVzdCBiZSBhZGp1c3RlZCB0byBtZWV0IHRoZSBjb2RlIGxlbmd0aCByZXN0cmljdGlvbi4gIFdlIGN1cnJlbnRseSB1c2UNCi0gKiB0aGUgYWRqdXN0bWVudCBtZXRob2Qgc3VnZ2VzdGVkIGluIEpQRUcgc2VjdGlvbiBLLjIuICBUaGlzIG1ldGhvZCBpcyAqbm90Kg0KLSAqIG9wdGltYWw7IGl0IG1heSBub3QgY2hvb3NlIHRoZSBiZXN0IHBvc3NpYmxlIGxpbWl0ZWQtbGVuZ3RoIGNvZGUuICBCdXQNCi0gKiB0eXBpY2FsbHkgb25seSB2ZXJ5LWxvdy1mcmVxdWVuY3kgc3ltYm9scyB3aWxsIGJlIGdpdmVuIGxlc3MtdGhhbi1vcHRpbWFsDQotICogbGVuZ3Rocywgc28gdGhlIGNvZGUgaXMgYWxtb3N0IG9wdGltYWwuICBFeHBlcmltZW50YWwgY29tcGFyaXNvbnMgYWdhaW5zdA0KLSAqIGFuIG9wdGltYWwgbGltaXRlZC1sZW5ndGgtY29kZSBhbGdvcml0aG0gaW5kaWNhdGUgdGhhdCB0aGUgZGlmZmVyZW5jZSBpcw0KLSAqIG1pY3Jvc2NvcGljIC0tLSB1c3VhbGx5IGxlc3MgdGhhbiBhIGh1bmRyZWR0aCBvZiBhIHBlcmNlbnQgb2YgdG90YWwgc2l6ZS4NCi0gKiBTbyB0aGUgZXh0cmEgY29tcGxleGl0eSBvZiBhbiBvcHRpbWFsIGFsZ29yaXRobSBkb2Vzbid0IHNlZW0gd29ydGh3aGlsZS4NCi0gKi8NCi0NCi1HTE9CQUwodm9pZCkNCi1qcGVnX2dlbl9vcHRpbWFsX3RhYmxlIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSkhVRkZfVEJMICogaHRibCwgbG9uZyBmcmVxW10pDQotew0KLSNkZWZpbmUgTUFYX0NMRU4gMzIJCS8qIGFzc3VtZWQgbWF4aW11bSBpbml0aWFsIGNvZGUgbGVuZ3RoICovDQotICBVSU5UOCBiaXRzW01BWF9DTEVOKzFdOwkvKiBiaXRzW2tdID0gIyBvZiBzeW1ib2xzIHdpdGggY29kZSBsZW5ndGggayAqLw0KLSAgaW50IGNvZGVzaXplWzI1N107CQkvKiBjb2Rlc2l6ZVtrXSA9IGNvZGUgbGVuZ3RoIG9mIHN5bWJvbCBrICovDQotICBpbnQgb3RoZXJzWzI1N107CQkvKiBuZXh0IHN5bWJvbCBpbiBjdXJyZW50IGJyYW5jaCBvZiB0cmVlICovDQotICBpbnQgYzEsIGMyOw0KLSAgaW50IHAsIGksIGo7DQotICBsb25nIHY7DQotDQotICAvKiBUaGlzIGFsZ29yaXRobSBpcyBleHBsYWluZWQgaW4gc2VjdGlvbiBLLjIgb2YgdGhlIEpQRUcgc3RhbmRhcmQgKi8NCi0NCi0gIE1FTVpFUk8oYml0cywgU0laRU9GKGJpdHMpKTsNCi0gIE1FTVpFUk8oY29kZXNpemUsIFNJWkVPRihjb2Rlc2l6ZSkpOw0KLSAgZm9yIChpID0gMDsgaSA8IDI1NzsgaSsrKQ0KLSAgICBvdGhlcnNbaV0gPSAtMTsJCS8qIGluaXQgbGlua3MgdG8gZW1wdHkgKi8NCi0gIA0KLSAgZnJlcVsyNTZdID0gMTsJCS8qIG1ha2Ugc3VyZSAyNTYgaGFzIGEgbm9uemVybyBjb3VudCAqLw0KLSAgLyogSW5jbHVkaW5nIHRoZSBwc2V1ZG8tc3ltYm9sIDI1NiBpbiB0aGUgSHVmZm1hbiBwcm9jZWR1cmUgZ3VhcmFudGVlcw0KLSAgICogdGhhdCBubyByZWFsIHN5bWJvbCBpcyBnaXZlbiBjb2RlLXZhbHVlIG9mIGFsbCBvbmVzLCBiZWNhdXNlIDI1Ng0KLSAgICogd2lsbCBiZSBwbGFjZWQgbGFzdCBpbiB0aGUgbGFyZ2VzdCBjb2Rld29yZCBjYXRlZ29yeS4NCi0gICAqLw0KLQ0KLSAgLyogSHVmZm1hbidzIGJhc2ljIGFsZ29yaXRobSB0byBhc3NpZ24gb3B0aW1hbCBjb2RlIGxlbmd0aHMgdG8gc3ltYm9scyAqLw0KLQ0KLSAgZm9yICg7Oykgew0KLSAgICAvKiBGaW5kIHRoZSBzbWFsbGVzdCBub256ZXJvIGZyZXF1ZW5jeSwgc2V0IGMxID0gaXRzIHN5bWJvbCAqLw0KLSAgICAvKiBJbiBjYXNlIG9mIHRpZXMsIHRha2UgdGhlIGxhcmdlciBzeW1ib2wgbnVtYmVyICovDQotICAgIGMxID0gLTE7DQotICAgIHYgPSAxMDAwMDAwMDAwTDsNCi0gICAgZm9yIChpID0gMDsgaSA8PSAyNTY7IGkrKykgew0KLSAgICAgIGlmIChmcmVxW2ldICYmIGZyZXFbaV0gPD0gdikgew0KLQl2ID0gZnJlcVtpXTsNCi0JYzEgPSBpOw0KLSAgICAgIH0NCi0gICAgfQ0KLQ0KLSAgICAvKiBGaW5kIHRoZSBuZXh0IHNtYWxsZXN0IG5vbnplcm8gZnJlcXVlbmN5LCBzZXQgYzIgPSBpdHMgc3ltYm9sICovDQotICAgIC8qIEluIGNhc2Ugb2YgdGllcywgdGFrZSB0aGUgbGFyZ2VyIHN5bWJvbCBudW1iZXIgKi8NCi0gICAgYzIgPSAtMTsNCi0gICAgdiA9IDEwMDAwMDAwMDBMOw0KLSAgICBmb3IgKGkgPSAwOyBpIDw9IDI1NjsgaSsrKSB7DQotICAgICAgaWYgKGZyZXFbaV0gJiYgZnJlcVtpXSA8PSB2ICYmIGkgIT0gYzEpIHsNCi0JdiA9IGZyZXFbaV07DQotCWMyID0gaTsNCi0gICAgICB9DQotICAgIH0NCi0NCi0gICAgLyogRG9uZSBpZiB3ZSd2ZSBtZXJnZWQgZXZlcnl0aGluZyBpbnRvIG9uZSBmcmVxdWVuY3kgKi8NCi0gICAgaWYgKGMyIDwgMCkNCi0gICAgICBicmVhazsNCi0gICAgDQotICAgIC8qIEVsc2UgbWVyZ2UgdGhlIHR3byBjb3VudHMvdHJlZXMgKi8NCi0gICAgZnJlcVtjMV0gKz0gZnJlcVtjMl07DQotICAgIGZyZXFbYzJdID0gMDsNCi0NCi0gICAgLyogSW5jcmVtZW50IHRoZSBjb2Rlc2l6ZSBvZiBldmVyeXRoaW5nIGluIGMxJ3MgdHJlZSBicmFuY2ggKi8NCi0gICAgY29kZXNpemVbYzFdKys7DQotICAgIHdoaWxlIChvdGhlcnNbYzFdID49IDApIHsNCi0gICAgICBjMSA9IG90aGVyc1tjMV07DQotICAgICAgY29kZXNpemVbYzFdKys7DQotICAgIH0NCi0gICAgDQotICAgIG90aGVyc1tjMV0gPSBjMjsJCS8qIGNoYWluIGMyIG9udG8gYzEncyB0cmVlIGJyYW5jaCAqLw0KLSAgICANCi0gICAgLyogSW5jcmVtZW50IHRoZSBjb2Rlc2l6ZSBvZiBldmVyeXRoaW5nIGluIGMyJ3MgdHJlZSBicmFuY2ggKi8NCi0gICAgY29kZXNpemVbYzJdKys7DQotICAgIHdoaWxlIChvdGhlcnNbYzJdID49IDApIHsNCi0gICAgICBjMiA9IG90aGVyc1tjMl07DQotICAgICAgY29kZXNpemVbYzJdKys7DQotICAgIH0NCi0gIH0NCi0NCi0gIC8qIE5vdyBjb3VudCB0aGUgbnVtYmVyIG9mIHN5bWJvbHMgb2YgZWFjaCBjb2RlIGxlbmd0aCAqLw0KLSAgZm9yIChpID0gMDsgaSA8PSAyNTY7IGkrKykgew0KLSAgICBpZiAoY29kZXNpemVbaV0pIHsNCi0gICAgICAvKiBUaGUgSlBFRyBzdGFuZGFyZCBzZWVtcyB0byB0aGluayB0aGF0IHRoaXMgY2FuJ3QgaGFwcGVuLCAqLw0KLSAgICAgIC8qIGJ1dCBJJ20gcGFyYW5vaWQuLi4gKi8NCi0gICAgICBpZiAoY29kZXNpemVbaV0gPiBNQVhfQ0xFTikNCi0JRVJSRVhJVChjaW5mbywgSkVSUl9IVUZGX0NMRU5fT1ZFUkZMT1cpOw0KLQ0KLSAgICAgIGJpdHNbY29kZXNpemVbaV1dKys7DQotICAgIH0NCi0gIH0NCi0NCi0gIC8qIEpQRUcgZG9lc24ndCBhbGxvdyBzeW1ib2xzIHdpdGggY29kZSBsZW5ndGhzIG92ZXIgMTYgYml0cywgc28gaWYgdGhlIHB1cmUNCi0gICAqIEh1ZmZtYW4gcHJvY2VkdXJlIGFzc2lnbmVkIGFueSBzdWNoIGxlbmd0aHMsIHdlIG11c3QgYWRqdXN0IHRoZSBjb2RpbmcuDQotICAgKiBIZXJlIGlzIHdoYXQgdGhlIEpQRUcgc3BlYyBzYXlzIGFib3V0IGhvdyB0aGlzIG5leHQgYml0IHdvcmtzOg0KLSAgICogU2luY2Ugc3ltYm9scyBhcmUgcGFpcmVkIGZvciB0aGUgbG9uZ2VzdCBIdWZmbWFuIGNvZGUsIHRoZSBzeW1ib2xzIGFyZQ0KLSAgICogcmVtb3ZlZCBmcm9tIHRoaXMgbGVuZ3RoIGNhdGVnb3J5IHR3byBhdCBhIHRpbWUuICBUaGUgcHJlZml4IGZvciB0aGUgcGFpcg0KLSAgICogKHdoaWNoIGlzIG9uZSBiaXQgc2hvcnRlcikgaXMgYWxsb2NhdGVkIHRvIG9uZSBvZiB0aGUgcGFpcjsgdGhlbiwNCi0gICAqIHNraXBwaW5nIHRoZSBCSVRTIGVudHJ5IGZvciB0aGF0IHByZWZpeCBsZW5ndGgsIGEgY29kZSB3b3JkIGZyb20gdGhlIG5leHQNCi0gICAqIHNob3J0ZXN0IG5vbnplcm8gQklUUyBlbnRyeSBpcyBjb252ZXJ0ZWQgaW50byBhIHByZWZpeCBmb3IgdHdvIGNvZGUgd29yZHMNCi0gICAqIG9uZSBiaXQgbG9uZ2VyLg0KLSAgICovDQotICANCi0gIGZvciAoaSA9IE1BWF9DTEVOOyBpID4gMTY7IGktLSkgew0KLSAgICB3aGlsZSAoYml0c1tpXSA+IDApIHsNCi0gICAgICBqID0gaSAtIDI7CQkvKiBmaW5kIGxlbmd0aCBvZiBuZXcgcHJlZml4IHRvIGJlIHVzZWQgKi8NCi0gICAgICB3aGlsZSAoYml0c1tqXSA9PSAwKQ0KLQlqLS07DQotICAgICAgDQotICAgICAgYml0c1tpXSAtPSAyOwkJLyogcmVtb3ZlIHR3byBzeW1ib2xzICovDQotICAgICAgYml0c1tpLTFdKys7CQkvKiBvbmUgZ29lcyBpbiB0aGlzIGxlbmd0aCAqLw0KLSAgICAgIGJpdHNbaisxXSArPSAyOwkJLyogdHdvIG5ldyBzeW1ib2xzIGluIHRoaXMgbGVuZ3RoICovDQotICAgICAgYml0c1tqXS0tOwkJLyogc3ltYm9sIG9mIHRoaXMgbGVuZ3RoIGlzIG5vdyBhIHByZWZpeCAqLw0KLSAgICB9DQotICB9DQotDQotICAvKiBSZW1vdmUgdGhlIGNvdW50IGZvciB0aGUgcHNldWRvLXN5bWJvbCAyNTYgZnJvbSB0aGUgbGFyZ2VzdCBjb2RlbGVuZ3RoICovDQotICB3aGlsZSAoYml0c1tpXSA9PSAwKQkJLyogZmluZCBsYXJnZXN0IGNvZGVsZW5ndGggc3RpbGwgaW4gdXNlICovDQotICAgIGktLTsNCi0gIGJpdHNbaV0tLTsNCi0gIA0KLSAgLyogUmV0dXJuIGZpbmFsIHN5bWJvbCBjb3VudHMgKG9ubHkgZm9yIGxlbmd0aHMgMC4uMTYpICovDQotICBNRU1DT1BZKGh0YmwtPmJpdHMsIGJpdHMsIFNJWkVPRihodGJsLT5iaXRzKSk7DQotICANCi0gIC8qIFJldHVybiBhIGxpc3Qgb2YgdGhlIHN5bWJvbHMgc29ydGVkIGJ5IGNvZGUgbGVuZ3RoICovDQotICAvKiBJdCdzIG5vdCByZWFsIGNsZWFyIHRvIG1lIHdoeSB3ZSBkb24ndCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBjb2RlbGVuZ3RoDQotICAgKiBjaGFuZ2VzIG1hZGUgYWJvdmUsIGJ1dCB0aGUgSlBFRyBzcGVjIHNlZW1zIHRvIHRoaW5rIHRoaXMgd29ya3MuDQotICAgKi8NCi0gIHAgPSAwOw0KLSAgZm9yIChpID0gMTsgaSA8PSBNQVhfQ0xFTjsgaSsrKSB7DQotICAgIGZvciAoaiA9IDA7IGogPD0gMjU1OyBqKyspIHsNCi0gICAgICBpZiAoY29kZXNpemVbal0gPT0gaSkgew0KLQlodGJsLT5odWZmdmFsW3BdID0gKFVJTlQ4KSBqOw0KLQlwKys7DQotICAgICAgfQ0KLSAgICB9DQotICB9DQotDQotICAvKiBTZXQgc2VudF90YWJsZSBGQUxTRSBzbyB1cGRhdGVkIHRhYmxlIHdpbGwgYmUgd3JpdHRlbiB0byBKUEVHIGZpbGUuICovDQotICBodGJsLT5zZW50X3RhYmxlID0gRkFMU0U7DQotfQ0KLQ0KLQ0KLS8qDQotICogRmluaXNoIHVwIGEgc3RhdGlzdGljcy1nYXRoZXJpbmcgcGFzcyBhbmQgY3JlYXRlIHRoZSBuZXcgSHVmZm1hbiB0YWJsZXMuDQotICovDQotDQotTUVUSE9EREVGKHZvaWQpDQotZmluaXNoX3Bhc3NfZ2F0aGVyIChqX2NvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAoaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7DQotICBpbnQgY2ksIGRjdGJsLCBhY3RibDsNCi0gIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyOw0KLSAgSkhVRkZfVEJMICoqaHRibHB0cjsNCi0gIGJvb2xlYW4gZGlkX2RjW05VTV9IVUZGX1RCTFNdOw0KLSAgYm9vbGVhbiBkaWRfYWNbTlVNX0hVRkZfVEJMU107DQotDQotICAvKiBJdCdzIGltcG9ydGFudCBub3QgdG8gYXBwbHkganBlZ19nZW5fb3B0aW1hbF90YWJsZSBtb3JlIHRoYW4gb25jZQ0KLSAgICogcGVyIHRhYmxlLCBiZWNhdXNlIGl0IGNsb2JiZXJzIHRoZSBpbnB1dCBmcmVxdWVuY3kgY291bnRzIQ0KLSAgICovDQotICBNRU1aRVJPKGRpZF9kYywgU0laRU9GKGRpZF9kYykpOw0KLSAgTUVNWkVSTyhkaWRfYWMsIFNJWkVPRihkaWRfYWMpKTsNCi0NCi0gIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7DQotICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07DQotICAgIGRjdGJsID0gY29tcHB0ci0+ZGNfdGJsX25vOw0KLSAgICBhY3RibCA9IGNvbXBwdHItPmFjX3RibF9ubzsNCi0gICAgaWYgKCEgZGlkX2RjW2RjdGJsXSkgew0KLSAgICAgIGh0YmxwdHIgPSAmIGNpbmZvLT5kY19odWZmX3RibF9wdHJzW2RjdGJsXTsNCi0gICAgICBpZiAoKmh0YmxwdHIgPT0gTlVMTCkNCi0JKmh0YmxwdHIgPSBqcGVnX2FsbG9jX2h1ZmZfdGFibGUoKGpfY29tbW9uX3B0cikgY2luZm8pOw0KLSAgICAgIGpwZWdfZ2VuX29wdGltYWxfdGFibGUoY2luZm8sICpodGJscHRyLCBlbnRyb3B5LT5kY19jb3VudF9wdHJzW2RjdGJsXSk7DQotICAgICAgZGlkX2RjW2RjdGJsXSA9IFRSVUU7DQotICAgIH0NCi0gICAgaWYgKCEgZGlkX2FjW2FjdGJsXSkgew0KLSAgICAgIGh0YmxwdHIgPSAmIGNpbmZvLT5hY19odWZmX3RibF9wdHJzW2FjdGJsXTsNCi0gICAgICBpZiAoKmh0YmxwdHIgPT0gTlVMTCkNCi0JKmh0YmxwdHIgPSBqcGVnX2FsbG9jX2h1ZmZfdGFibGUoKGpfY29tbW9uX3B0cikgY2luZm8pOw0KLSAgICAgIGpwZWdfZ2VuX29wdGltYWxfdGFibGUoY2luZm8sICpodGJscHRyLCBlbnRyb3B5LT5hY19jb3VudF9wdHJzW2FjdGJsXSk7DQotICAgICAgZGlkX2FjW2FjdGJsXSA9IFRSVUU7DQotICAgIH0NCi0gIH0NCi19DQotDQotDQotI2VuZGlmIC8qIEVOVFJPUFlfT1BUX1NVUFBPUlRFRCAqLw0KLQ0KLQ0KLS8qDQotICogTW9kdWxlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIEh1ZmZtYW4gZW50cm9weSBlbmNvZGluZy4NCi0gKi8NCi0NCi1HTE9CQUwodm9pZCkNCi1qaW5pdF9odWZmX2VuY29kZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIGh1ZmZfZW50cm9weV9wdHIgZW50cm9weTsNCi0gIGludCBpOw0KLQ0KLSAgZW50cm9weSA9IChodWZmX2VudHJvcHlfcHRyKQ0KLSAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQlTSVpFT0YoaHVmZl9lbnRyb3B5X2VuY29kZXIpKTsNCi0gIGNpbmZvLT5lbnRyb3B5ID0gKHN0cnVjdCBqcGVnX2VudHJvcHlfZW5jb2RlciAqKSBlbnRyb3B5Ow0KLSAgZW50cm9weS0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX2h1ZmY7DQotDQotICAvKiBNYXJrIHRhYmxlcyB1bmFsbG9jYXRlZCAqLw0KLSAgZm9yIChpID0gMDsgaSA8IE5VTV9IVUZGX1RCTFM7IGkrKykgew0KLSAgICBlbnRyb3B5LT5kY19kZXJpdmVkX3RibHNbaV0gPSBlbnRyb3B5LT5hY19kZXJpdmVkX3RibHNbaV0gPSBOVUxMOw0KLSNpZmRlZiBFTlRST1BZX09QVF9TVVBQT1JURUQNCi0gICAgZW50cm9weS0+ZGNfY291bnRfcHRyc1tpXSA9IGVudHJvcHktPmFjX2NvdW50X3B0cnNbaV0gPSBOVUxMOw0KLSNlbmRpZg0KLSAgfQ0KLX0NCi0NCi0jZW5kaWYgLy9fRlhfSlBFR19UVVJCT18NCisjaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQorLyoKKyAqIGpjaHVmZi5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgSHVmZm1hbiBlbnRyb3B5IGVuY29kaW5nIHJvdXRpbmVzLgorICoKKyAqIE11Y2ggb2YgdGhlIGNvbXBsZXhpdHkgaGVyZSBoYXMgdG8gZG8gd2l0aCBzdXBwb3J0aW5nIG91dHB1dCBzdXNwZW5zaW9uLgorICogSWYgdGhlIGRhdGEgZGVzdGluYXRpb24gbW9kdWxlIGRlbWFuZHMgc3VzcGVuc2lvbiwgd2Ugd2FudCB0byBiZSBhYmxlIHRvCisgKiBiYWNrIHVwIHRvIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBNQ1UuICBUbyBkbyB0aGlzLCB3ZSBjb3B5IHN0YXRlCisgKiB2YXJpYWJsZXMgaW50byBsb2NhbCB3b3JraW5nIHN0b3JhZ2UsIGFuZCB1cGRhdGUgdGhlbSBiYWNrIHRvIHRoZQorICogcGVybWFuZW50IEpQRUcgb2JqZWN0cyBvbmx5IHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGFuIE1DVS4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAiamNodWZmLmgiCQkvKiBEZWNsYXJhdGlvbnMgc2hhcmVkIHdpdGggamNwaHVmZi5jICovCisKKyNpZmRlZiBfRlhfTUFOQUdFRF9DT0RFXworI2RlZmluZSBzYXZhYmxlX3N0YXRlCXNhdmFibGVfc3RhdGVfYworI2VuZGlmCisKKy8qIEV4cGFuZGVkIGVudHJvcHkgZW5jb2RlciBvYmplY3QgZm9yIEh1ZmZtYW4gZW5jb2RpbmcuCisgKgorICogVGhlIHNhdmFibGVfc3RhdGUgc3VicmVjb3JkIGNvbnRhaW5zIGZpZWxkcyB0aGF0IGNoYW5nZSB3aXRoaW4gYW4gTUNVLAorICogYnV0IG11c3Qgbm90IGJlIHVwZGF0ZWQgcGVybWFuZW50bHkgdW50aWwgd2UgY29tcGxldGUgdGhlIE1DVS4KKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIElOVDMyIHB1dF9idWZmZXI7CQkvKiBjdXJyZW50IGJpdC1hY2N1bXVsYXRpb24gYnVmZmVyICovCisgIGludCBwdXRfYml0czsJCQkvKiAjIG9mIGJpdHMgbm93IGluIGl0ICovCisgIGludCBsYXN0X2RjX3ZhbFtNQVhfQ09NUFNfSU5fU0NBTl07IC8qIGxhc3QgREMgY29lZiBmb3IgZWFjaCBjb21wb25lbnQgKi8KK30gc2F2YWJsZV9zdGF0ZTsKKworLyogVGhpcyBtYWNybyBpcyB0byB3b3JrIGFyb3VuZCBjb21waWxlcnMgd2l0aCBtaXNzaW5nIG9yIGJyb2tlbgorICogc3RydWN0dXJlIGFzc2lnbm1lbnQuICBZb3UnbGwgbmVlZCB0byBmaXggdGhpcyBjb2RlIGlmIHlvdSBoYXZlCisgKiBzdWNoIGEgY29tcGlsZXIgYW5kIHlvdSBjaGFuZ2UgTUFYX0NPTVBTX0lOX1NDQU4uCisgKi8KKworI2lmbmRlZiBOT19TVFJVQ1RfQVNTSUdOCisjZGVmaW5lIEFTU0lHTl9TVEFURShkZXN0LHNyYykgICgoZGVzdCkgPSAoc3JjKSkKKyNlbHNlCisjaWYgTUFYX0NPTVBTX0lOX1NDQU4gPT0gNAorI2RlZmluZSBBU1NJR05fU1RBVEUoZGVzdCxzcmMpICBcCisJKChkZXN0KS5wdXRfYnVmZmVyID0gKHNyYykucHV0X2J1ZmZlciwgXAorCSAoZGVzdCkucHV0X2JpdHMgPSAoc3JjKS5wdXRfYml0cywgXAorCSAoZGVzdCkubGFzdF9kY192YWxbMF0gPSAoc3JjKS5sYXN0X2RjX3ZhbFswXSwgXAorCSAoZGVzdCkubGFzdF9kY192YWxbMV0gPSAoc3JjKS5sYXN0X2RjX3ZhbFsxXSwgXAorCSAoZGVzdCkubGFzdF9kY192YWxbMl0gPSAoc3JjKS5sYXN0X2RjX3ZhbFsyXSwgXAorCSAoZGVzdCkubGFzdF9kY192YWxbM10gPSAoc3JjKS5sYXN0X2RjX3ZhbFszXSkKKyNlbmRpZgorI2VuZGlmCisKKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QganBlZ19lbnRyb3B5X2VuY29kZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCisKKyAgc2F2YWJsZV9zdGF0ZSBzYXZlZDsJCS8qIEJpdCBidWZmZXIgJiBEQyBzdGF0ZSBhdCBzdGFydCBvZiBNQ1UgKi8KKworICAvKiBUaGVzZSBmaWVsZHMgYXJlIE5PVCBsb2FkZWQgaW50byBsb2NhbCB3b3JraW5nIHN0YXRlLiAqLworICB1bnNpZ25lZCBpbnQgcmVzdGFydHNfdG9fZ287CS8qIE1DVXMgbGVmdCBpbiB0aGlzIHJlc3RhcnQgaW50ZXJ2YWwgKi8KKyAgaW50IG5leHRfcmVzdGFydF9udW07CQkvKiBuZXh0IHJlc3RhcnQgbnVtYmVyIHRvIHdyaXRlICgwLTcpICovCisKKyAgLyogUG9pbnRlcnMgdG8gZGVyaXZlZCB0YWJsZXMgKHRoZXNlIHdvcmtzcGFjZXMgaGF2ZSBpbWFnZSBsaWZlc3BhbikgKi8KKyAgY19kZXJpdmVkX3RibCAqIGRjX2Rlcml2ZWRfdGJsc1tOVU1fSFVGRl9UQkxTXTsKKyAgY19kZXJpdmVkX3RibCAqIGFjX2Rlcml2ZWRfdGJsc1tOVU1fSFVGRl9UQkxTXTsKKworI2lmZGVmIEVOVFJPUFlfT1BUX1NVUFBPUlRFRAkvKiBTdGF0aXN0aWNzIHRhYmxlcyBmb3Igb3B0aW1pemF0aW9uICovCisgIGxvbmcgKiBkY19jb3VudF9wdHJzW05VTV9IVUZGX1RCTFNdOworICBsb25nICogYWNfY291bnRfcHRyc1tOVU1fSFVGRl9UQkxTXTsKKyNlbmRpZgorfSBodWZmX2VudHJvcHlfZW5jb2RlcjsKKwordHlwZWRlZiBodWZmX2VudHJvcHlfZW5jb2RlciAqIGh1ZmZfZW50cm9weV9wdHI7CisKKy8qIFdvcmtpbmcgc3RhdGUgd2hpbGUgd3JpdGluZyBhbiBNQ1UuCisgKiBUaGlzIHN0cnVjdCBjb250YWlucyBhbGwgdGhlIGZpZWxkcyB0aGF0IGFyZSBuZWVkZWQgYnkgc3Vicm91dGluZXMuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBKT0NURVQgKiBuZXh0X291dHB1dF9ieXRlOwkvKiA9PiBuZXh0IGJ5dGUgdG8gd3JpdGUgaW4gYnVmZmVyICovCisgIHNpemVfdCBmcmVlX2luX2J1ZmZlcjsJLyogIyBvZiBieXRlIHNwYWNlcyByZW1haW5pbmcgaW4gYnVmZmVyICovCisgIHNhdmFibGVfc3RhdGUgY3VyOwkJLyogQ3VycmVudCBiaXQgYnVmZmVyICYgREMgc3RhdGUgKi8KKyAgal9jb21wcmVzc19wdHIgY2luZm87CQkvKiBkdW1wX2J1ZmZlciBuZWVkcyBhY2Nlc3MgdG8gdGhpcyAqLworfSB3b3JraW5nX3N0YXRlOworCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitNRVRIT0RERUYoYm9vbGVhbikgZW5jb2RlX21jdV9odWZmIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCisJCQkJCUpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKK01FVEhPRERFRih2b2lkKSBmaW5pc2hfcGFzc19odWZmIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKKyNpZmRlZiBFTlRST1BZX09QVF9TVVBQT1JURUQKK01FVEhPRERFRihib29sZWFuKSBlbmNvZGVfbWN1X2dhdGhlciBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCQkgIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKK01FVEhPRERFRih2b2lkKSBmaW5pc2hfcGFzc19nYXRoZXIgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworI2VuZGlmCisKKworLyoKKyAqIEluaXRpYWxpemUgZm9yIGEgSHVmZm1hbi1jb21wcmVzc2VkIHNjYW4uCisgKiBJZiBnYXRoZXJfc3RhdGlzdGljcyBpcyBUUlVFLCB3ZSBkbyBub3Qgb3V0cHV0IGFueXRoaW5nIGR1cmluZyB0aGUgc2NhbiwKKyAqIGp1c3QgY291bnQgdGhlIEh1ZmZtYW4gc3ltYm9scyB1c2VkIGFuZCBnZW5lcmF0ZSBIdWZmbWFuIGNvZGUgdGFibGVzLgorICovCisKK01FVEhPRERFRih2b2lkKQorc3RhcnRfcGFzc19odWZmIChqX2NvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBnYXRoZXJfc3RhdGlzdGljcykKK3sKKyAgaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5OworICBpbnQgY2ksIGRjdGJsLCBhY3RibDsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7CisKKyAgaWYgKGdhdGhlcl9zdGF0aXN0aWNzKSB7CisjaWZkZWYgRU5UUk9QWV9PUFRfU1VQUE9SVEVECisgICAgZW50cm9weS0+cHViLmVuY29kZV9tY3UgPSBlbmNvZGVfbWN1X2dhdGhlcjsKKyAgICBlbnRyb3B5LT5wdWIuZmluaXNoX3Bhc3MgPSBmaW5pc2hfcGFzc19nYXRoZXI7CisjZWxzZQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsKKyNlbmRpZgorICB9IGVsc2UgeworICAgIGVudHJvcHktPnB1Yi5lbmNvZGVfbWN1ID0gZW5jb2RlX21jdV9odWZmOworICAgIGVudHJvcHktPnB1Yi5maW5pc2hfcGFzcyA9IGZpbmlzaF9wYXNzX2h1ZmY7CisgIH0KKworICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07CisgICAgZGN0YmwgPSBjb21wcHRyLT5kY190Ymxfbm87CisgICAgYWN0YmwgPSBjb21wcHRyLT5hY190Ymxfbm87CisgICAgaWYgKGdhdGhlcl9zdGF0aXN0aWNzKSB7CisjaWZkZWYgRU5UUk9QWV9PUFRfU1VQUE9SVEVECisgICAgICAvKiBDaGVjayBmb3IgaW52YWxpZCB0YWJsZSBpbmRleGVzICovCisgICAgICAvKiAobWFrZV9jX2Rlcml2ZWRfdGJsIGRvZXMgdGhpcyBpbiB0aGUgb3RoZXIgcGF0aCkgKi8KKyAgICAgIGlmIChkY3RibCA8IDAgfHwgZGN0YmwgPj0gTlVNX0hVRkZfVEJMUykKKwlFUlJFWElUMShjaW5mbywgSkVSUl9OT19IVUZGX1RBQkxFLCBkY3RibCk7CisgICAgICBpZiAoYWN0YmwgPCAwIHx8IGFjdGJsID49IE5VTV9IVUZGX1RCTFMpCisJRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fSFVGRl9UQUJMRSwgYWN0YmwpOworICAgICAgLyogQWxsb2NhdGUgYW5kIHplcm8gdGhlIHN0YXRpc3RpY3MgdGFibGVzICovCisgICAgICAvKiBOb3RlIHRoYXQganBlZ19nZW5fb3B0aW1hbF90YWJsZSBleHBlY3RzIDI1NyBlbnRyaWVzIGluIGVhY2ggdGFibGUhICovCisgICAgICBpZiAoZW50cm9weS0+ZGNfY291bnRfcHRyc1tkY3RibF0gPT0gTlVMTCkKKwllbnRyb3B5LT5kY19jb3VudF9wdHJzW2RjdGJsXSA9IChsb25nICopCisJICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCSAgICAgIDI1NyAqIFNJWkVPRihsb25nKSk7CisgICAgICBNRU1aRVJPKGVudHJvcHktPmRjX2NvdW50X3B0cnNbZGN0YmxdLCAyNTcgKiBTSVpFT0YobG9uZykpOworICAgICAgaWYgKGVudHJvcHktPmFjX2NvdW50X3B0cnNbYWN0YmxdID09IE5VTEwpCisJZW50cm9weS0+YWNfY291bnRfcHRyc1thY3RibF0gPSAobG9uZyAqKQorCSAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkJCQkgICAgICAyNTcgKiBTSVpFT0YobG9uZykpOworICAgICAgTUVNWkVSTyhlbnRyb3B5LT5hY19jb3VudF9wdHJzW2FjdGJsXSwgMjU3ICogU0laRU9GKGxvbmcpKTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAvKiBDb21wdXRlIGRlcml2ZWQgdmFsdWVzIGZvciBIdWZmbWFuIHRhYmxlcyAqLworICAgICAgLyogV2UgbWF5IGRvIHRoaXMgbW9yZSB0aGFuIG9uY2UgZm9yIGEgdGFibGUsIGJ1dCBpdCdzIG5vdCBleHBlbnNpdmUgKi8KKyAgICAgIGpwZWdfbWFrZV9jX2Rlcml2ZWRfdGJsKGNpbmZvLCBUUlVFLCBkY3RibCwKKwkJCSAgICAgICYgZW50cm9weS0+ZGNfZGVyaXZlZF90YmxzW2RjdGJsXSk7CisgICAgICBqcGVnX21ha2VfY19kZXJpdmVkX3RibChjaW5mbywgRkFMU0UsIGFjdGJsLAorCQkJICAgICAgJiBlbnRyb3B5LT5hY19kZXJpdmVkX3RibHNbYWN0YmxdKTsKKyAgICB9CisgICAgLyogSW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovCisgICAgZW50cm9weS0+c2F2ZWQubGFzdF9kY192YWxbY2ldID0gMDsKKyAgfQorCisgIC8qIEluaXRpYWxpemUgYml0IGJ1ZmZlciB0byBlbXB0eSAqLworICBlbnRyb3B5LT5zYXZlZC5wdXRfYnVmZmVyID0gMDsKKyAgZW50cm9weS0+c2F2ZWQucHV0X2JpdHMgPSAwOworCisgIC8qIEluaXRpYWxpemUgcmVzdGFydCBzdHVmZiAqLworICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOworICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtID0gMDsKK30KKworCisvKgorICogQ29tcHV0ZSB0aGUgZGVyaXZlZCB2YWx1ZXMgZm9yIGEgSHVmZm1hbiB0YWJsZS4KKyAqIFRoaXMgcm91dGluZSBhbHNvIHBlcmZvcm1zIHNvbWUgdmFsaWRhdGlvbiBjaGVja3Mgb24gdGhlIHRhYmxlLgorICoKKyAqIE5vdGUgdGhpcyBpcyBhbHNvIHVzZWQgYnkgamNwaHVmZi5jLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19tYWtlX2NfZGVyaXZlZF90YmwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIGlzREMsIGludCB0YmxubywKKwkJCSBjX2Rlcml2ZWRfdGJsICoqIHBkdGJsKQoreworICBKSFVGRl9UQkwgKmh0Ymw7CisgIGNfZGVyaXZlZF90YmwgKmR0Ymw7CisgIGludCBwLCBpLCBsLCBsYXN0cCwgX3NpLCBtYXhzeW1ib2w7CisgIGNoYXIgaHVmZnNpemVbMjU3XTsKKyAgdW5zaWduZWQgaW50IGh1ZmZjb2RlWzI1N107CisgIHVuc2lnbmVkIGludCBjb2RlOworCisgIC8qIE5vdGUgdGhhdCBodWZmc2l6ZVtdIGFuZCBodWZmY29kZVtdIGFyZSBmaWxsZWQgaW4gY29kZS1sZW5ndGggb3JkZXIsCisgICAqIHBhcmFsbGVsaW5nIHRoZSBvcmRlciBvZiB0aGUgc3ltYm9scyB0aGVtc2VsdmVzIGluIGh0YmwtPmh1ZmZ2YWxbXS4KKyAgICovCisKKyAgLyogRmluZCB0aGUgaW5wdXQgSHVmZm1hbiB0YWJsZSAqLworICBpZiAodGJsbm8gPCAwIHx8IHRibG5vID49IE5VTV9IVUZGX1RCTFMpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fSFVGRl9UQUJMRSwgdGJsbm8pOworICBodGJsID0KKyAgICBpc0RDID8gY2luZm8tPmRjX2h1ZmZfdGJsX3B0cnNbdGJsbm9dIDogY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbdGJsbm9dOworICBpZiAoaHRibCA9PSBOVUxMKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX05PX0hVRkZfVEFCTEUsIHRibG5vKTsKKworICAvKiBBbGxvY2F0ZSBhIHdvcmtzcGFjZSBpZiB3ZSBoYXZlbid0IGFscmVhZHkgZG9uZSBzby4gKi8KKyAgaWYgKCpwZHRibCA9PSBOVUxMKQorICAgICpwZHRibCA9IChjX2Rlcml2ZWRfdGJsICopCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCSAgU0laRU9GKGNfZGVyaXZlZF90YmwpKTsKKyAgZHRibCA9ICpwZHRibDsKKyAgCisgIC8qIEZpZ3VyZSBDLjE6IG1ha2UgdGFibGUgb2YgSHVmZm1hbiBjb2RlIGxlbmd0aCBmb3IgZWFjaCBzeW1ib2wgKi8KKworICBwID0gMDsKKyAgZm9yIChsID0gMTsgbCA8PSAxNjsgbCsrKSB7CisgICAgaSA9IChpbnQpIGh0YmwtPmJpdHNbbF07CisgICAgaWYgKGkgPCAwIHx8IHAgKyBpID4gMjU2KQkvKiBwcm90ZWN0IGFnYWluc3QgdGFibGUgb3ZlcnJ1biAqLworICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSFVGRl9UQUJMRSk7CisgICAgd2hpbGUgKGktLSkKKyAgICAgIGh1ZmZzaXplW3ArK10gPSAoY2hhcikgbDsKKyAgfQorICBodWZmc2l6ZVtwXSA9IDA7CisgIGxhc3RwID0gcDsKKyAgCisgIC8qIEZpZ3VyZSBDLjI6IGdlbmVyYXRlIHRoZSBjb2RlcyB0aGVtc2VsdmVzICovCisgIC8qIFdlIGFsc28gdmFsaWRhdGUgdGhhdCB0aGUgY291bnRzIHJlcHJlc2VudCBhIGxlZ2FsIEh1ZmZtYW4gY29kZSB0cmVlLiAqLworCisgIGNvZGUgPSAwOworICBfc2kgPSBodWZmc2l6ZVswXTsKKyAgcCA9IDA7CisgIHdoaWxlIChodWZmc2l6ZVtwXSkgeworICAgIHdoaWxlICgoKGludCkgaHVmZnNpemVbcF0pID09IF9zaSkgeworICAgICAgaHVmZmNvZGVbcCsrXSA9IGNvZGU7CisgICAgICBjb2RlKys7CisgICAgfQorICAgIC8qIGNvZGUgaXMgbm93IDEgbW9yZSB0aGFuIHRoZSBsYXN0IGNvZGUgdXNlZCBmb3IgY29kZWxlbmd0aCBzaTsgYnV0CisgICAgICogaXQgbXVzdCBzdGlsbCBmaXQgaW4gc2kgYml0cywgc2luY2Ugbm8gY29kZSBpcyBhbGxvd2VkIHRvIGJlIGFsbCBvbmVzLgorICAgICAqLworICAgIGlmICgoKElOVDMyKSBjb2RlKSA+PSAoKChJTlQzMikgMSkgPDwgX3NpKSkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0hVRkZfVEFCTEUpOworICAgIGNvZGUgPDw9IDE7CisgICAgX3NpKys7CisgIH0KKyAgCisgIC8qIEZpZ3VyZSBDLjM6IGdlbmVyYXRlIGVuY29kaW5nIHRhYmxlcyAqLworICAvKiBUaGVzZSBhcmUgY29kZSBhbmQgc2l6ZSBpbmRleGVkIGJ5IHN5bWJvbCB2YWx1ZSAqLworCisgIC8qIFNldCBhbGwgY29kZWxlc3Mgc3ltYm9scyB0byBoYXZlIGNvZGUgbGVuZ3RoIDA7CisgICAqIHRoaXMgbGV0cyB1cyBkZXRlY3QgZHVwbGljYXRlIFZBTCBlbnRyaWVzIGhlcmUsIGFuZCBsYXRlcgorICAgKiBhbGxvd3MgZW1pdF9iaXRzIHRvIGRldGVjdCBhbnkgYXR0ZW1wdCB0byBlbWl0IHN1Y2ggc3ltYm9scy4KKyAgICovCisgIE1FTVpFUk8oZHRibC0+ZWh1ZnNpLCBTSVpFT0YoZHRibC0+ZWh1ZnNpKSk7CisKKyAgLyogVGhpcyBpcyBhbHNvIGEgY29udmVuaWVudCBwbGFjZSB0byBjaGVjayBmb3Igb3V0LW9mLXJhbmdlCisgICAqIGFuZCBkdXBsaWNhdGVkIFZBTCBlbnRyaWVzLiAgV2UgYWxsb3cgMC4uMjU1IGZvciBBQyBzeW1ib2xzCisgICAqIGJ1dCBvbmx5IDAuLjE1IGZvciBEQy4gIChXZSBjb3VsZCBjb25zdHJhaW4gdGhlbSBmdXJ0aGVyCisgICAqIGJhc2VkIG9uIGRhdGEgZGVwdGggYW5kIG1vZGUsIGJ1dCB0aGlzIHNlZW1zIGVub3VnaC4pCisgICAqLworICBtYXhzeW1ib2wgPSBpc0RDID8gMTUgOiAyNTU7CisKKyAgZm9yIChwID0gMDsgcCA8IGxhc3RwOyBwKyspIHsKKyAgICBpID0gaHRibC0+aHVmZnZhbFtwXTsKKyAgICBpZiAoaSA8IDAgfHwgaSA+IG1heHN5bWJvbCB8fCBkdGJsLT5laHVmc2lbaV0pCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9IVUZGX1RBQkxFKTsKKyAgICBkdGJsLT5laHVmY29baV0gPSBodWZmY29kZVtwXTsKKyAgICBkdGJsLT5laHVmc2lbaV0gPSBodWZmc2l6ZVtwXTsKKyAgfQorfQorCisKKy8qIE91dHB1dHRpbmcgYnl0ZXMgdG8gdGhlIGZpbGUgKi8KKworLyogRW1pdCBhIGJ5dGUsIHRha2luZyAnYWN0aW9uJyBpZiBtdXN0IHN1c3BlbmQuICovCisjZGVmaW5lIGVtaXRfYnl0ZShzdGF0ZSx2YWwsYWN0aW9uKSAgXAorCXsgKihzdGF0ZSktPm5leHRfb3V0cHV0X2J5dGUrKyA9IChKT0NURVQpICh2YWwpOyAgXAorCSAgaWYgKC0tKHN0YXRlKS0+ZnJlZV9pbl9idWZmZXIgPT0gMCkgIFwKKwkgICAgaWYgKCEgZHVtcF9idWZmZXIoc3RhdGUpKSAgXAorCSAgICAgIHsgYWN0aW9uOyB9IH0KKworCitMT0NBTChib29sZWFuKQorZHVtcF9idWZmZXIgKHdvcmtpbmdfc3RhdGUgKiBzdGF0ZSkKKy8qIEVtcHR5IHRoZSBvdXRwdXQgYnVmZmVyOyByZXR1cm4gVFJVRSBpZiBzdWNjZXNzZnVsLCBGQUxTRSBpZiBtdXN0IHN1c3BlbmQgKi8KK3sKKyAgc3RydWN0IGpwZWdfZGVzdGluYXRpb25fbWdyICogZGVzdCA9IHN0YXRlLT5jaW5mby0+ZGVzdDsKKworICBpZiAoISAoKmRlc3QtPmVtcHR5X291dHB1dF9idWZmZXIpIChzdGF0ZS0+Y2luZm8pKQorICAgIHJldHVybiBGQUxTRTsKKyAgLyogQWZ0ZXIgYSBzdWNjZXNzZnVsIGJ1ZmZlciBkdW1wLCBtdXN0IHJlc2V0IGJ1ZmZlciBwb2ludGVycyAqLworICBzdGF0ZS0+bmV4dF9vdXRwdXRfYnl0ZSA9IGRlc3QtPm5leHRfb3V0cHV0X2J5dGU7CisgIHN0YXRlLT5mcmVlX2luX2J1ZmZlciA9IGRlc3QtPmZyZWVfaW5fYnVmZmVyOworICByZXR1cm4gVFJVRTsKK30KKworCisvKiBPdXRwdXR0aW5nIGJpdHMgdG8gdGhlIGZpbGUgKi8KKworLyogT25seSB0aGUgcmlnaHQgMjQgYml0cyBvZiBwdXRfYnVmZmVyIGFyZSB1c2VkOyB0aGUgdmFsaWQgYml0cyBhcmUKKyAqIGxlZnQtanVzdGlmaWVkIGluIHRoaXMgcGFydC4gIEF0IG1vc3QgMTYgYml0cyBjYW4gYmUgcGFzc2VkIHRvIGVtaXRfYml0cworICogaW4gb25lIGNhbGwsIGFuZCB3ZSBuZXZlciByZXRhaW4gbW9yZSB0aGFuIDcgYml0cyBpbiBwdXRfYnVmZmVyCisgKiBiZXR3ZWVuIGNhbGxzLCBzbyAyNCBiaXRzIGFyZSBzdWZmaWNpZW50LgorICovCisKK0lOTElORQorTE9DQUwoYm9vbGVhbikKK2VtaXRfYml0cyAod29ya2luZ19zdGF0ZSAqIHN0YXRlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHNpemUpCisvKiBFbWl0IHNvbWUgYml0czsgcmV0dXJuIFRSVUUgaWYgc3VjY2Vzc2Z1bCwgRkFMU0UgaWYgbXVzdCBzdXNwZW5kICovCit7CisgIC8qIFRoaXMgcm91dGluZSBpcyBoZWF2aWx5IHVzZWQsIHNvIGl0J3Mgd29ydGggY29kaW5nIHRpZ2h0bHkuICovCisgIHJlZ2lzdGVyIElOVDMyIHB1dF9idWZmZXIgPSAoSU5UMzIpIGNvZGU7CisgIHJlZ2lzdGVyIGludCBwdXRfYml0cyA9IHN0YXRlLT5jdXIucHV0X2JpdHM7CisKKyAgLyogaWYgc2l6ZSBpcyAwLCBjYWxsZXIgdXNlZCBhbiBpbnZhbGlkIEh1ZmZtYW4gdGFibGUgZW50cnkgKi8KKyAgaWYgKHNpemUgPT0gMCkKKyAgICBFUlJFWElUKHN0YXRlLT5jaW5mbywgSkVSUl9IVUZGX01JU1NJTkdfQ09ERSk7CisKKyAgcHV0X2J1ZmZlciAmPSAoKChJTlQzMikgMSk8PHNpemUpIC0gMTsgLyogbWFzayBvZmYgYW55IGV4dHJhIGJpdHMgaW4gY29kZSAqLworICAKKyAgcHV0X2JpdHMgKz0gc2l6ZTsJCS8qIG5ldyBudW1iZXIgb2YgYml0cyBpbiBidWZmZXIgKi8KKyAgCisgIHB1dF9idWZmZXIgPDw9IDI0IC0gcHV0X2JpdHM7IC8qIGFsaWduIGluY29taW5nIGJpdHMgKi8KKworICBwdXRfYnVmZmVyIHw9IHN0YXRlLT5jdXIucHV0X2J1ZmZlcjsgLyogYW5kIG1lcmdlIHdpdGggb2xkIGJ1ZmZlciBjb250ZW50cyAqLworICAKKyAgd2hpbGUgKHB1dF9iaXRzID49IDgpIHsKKyAgICBpbnQgYyA9IChpbnQpICgocHV0X2J1ZmZlciA+PiAxNikgJiAweEZGKTsKKyAgICAKKyAgICBlbWl0X2J5dGUoc3RhdGUsIGMsIHJldHVybiBGQUxTRSk7CisgICAgaWYgKGMgPT0gMHhGRikgewkJLyogbmVlZCB0byBzdHVmZiBhIHplcm8gYnl0ZT8gKi8KKyAgICAgIGVtaXRfYnl0ZShzdGF0ZSwgMCwgcmV0dXJuIEZBTFNFKTsKKyAgICB9CisgICAgcHV0X2J1ZmZlciA8PD0gODsKKyAgICBwdXRfYml0cyAtPSA4OworICB9CisKKyAgc3RhdGUtPmN1ci5wdXRfYnVmZmVyID0gcHV0X2J1ZmZlcjsgLyogdXBkYXRlIHN0YXRlIHZhcmlhYmxlcyAqLworICBzdGF0ZS0+Y3VyLnB1dF9iaXRzID0gcHV0X2JpdHM7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworTE9DQUwoYm9vbGVhbikKK2ZsdXNoX2JpdHMgKHdvcmtpbmdfc3RhdGUgKiBzdGF0ZSkKK3sKKyAgaWYgKCEgZW1pdF9iaXRzKHN0YXRlLCAweDdGLCA3KSkgLyogZmlsbCBhbnkgcGFydGlhbCBieXRlIHdpdGggb25lcyAqLworICAgIHJldHVybiBGQUxTRTsKKyAgc3RhdGUtPmN1ci5wdXRfYnVmZmVyID0gMDsJLyogYW5kIHJlc2V0IGJpdC1idWZmZXIgdG8gZW1wdHkgKi8KKyAgc3RhdGUtPmN1ci5wdXRfYml0cyA9IDA7CisgIHJldHVybiBUUlVFOworfQorCisKKy8qIEVuY29kZSBhIHNpbmdsZSBibG9jaydzIHdvcnRoIG9mIGNvZWZmaWNpZW50cyAqLworCitMT0NBTChib29sZWFuKQorZW5jb2RlX29uZV9ibG9jayAod29ya2luZ19zdGF0ZSAqIHN0YXRlLCBKQ09FRlBUUiBibG9jaywgaW50IGxhc3RfZGNfdmFsLAorCQkgIGNfZGVyaXZlZF90YmwgKmRjdGJsLCBjX2Rlcml2ZWRfdGJsICphY3RibCkKK3sKKyAgcmVnaXN0ZXIgaW50IHRlbXAsIHRlbXAyOworICByZWdpc3RlciBpbnQgbmJpdHM7CisgIHJlZ2lzdGVyIGludCBrLCByLCBpOworICAKKyAgLyogRW5jb2RlIHRoZSBEQyBjb2VmZmljaWVudCBkaWZmZXJlbmNlIHBlciBzZWN0aW9uIEYuMS4yLjEgKi8KKyAgCisgIHRlbXAgPSB0ZW1wMiA9IGJsb2NrWzBdIC0gbGFzdF9kY192YWw7CisKKyAgaWYgKHRlbXAgPCAwKSB7CisgICAgdGVtcCA9IC10ZW1wOwkJLyogdGVtcCBpcyBhYnMgdmFsdWUgb2YgaW5wdXQgKi8KKyAgICAvKiBGb3IgYSBuZWdhdGl2ZSBpbnB1dCwgd2FudCB0ZW1wMiA9IGJpdHdpc2UgY29tcGxlbWVudCBvZiBhYnMoaW5wdXQpICovCisgICAgLyogVGhpcyBjb2RlIGFzc3VtZXMgd2UgYXJlIG9uIGEgdHdvJ3MgY29tcGxlbWVudCBtYWNoaW5lICovCisgICAgdGVtcDItLTsKKyAgfQorICAKKyAgLyogRmluZCB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIGZvciB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb2VmZmljaWVudCAqLworICBuYml0cyA9IDA7CisgIHdoaWxlICh0ZW1wKSB7CisgICAgbmJpdHMrKzsKKyAgICB0ZW1wID4+PSAxOworICB9CisgIC8qIENoZWNrIGZvciBvdXQtb2YtcmFuZ2UgY29lZmZpY2llbnQgdmFsdWVzLgorICAgKiBTaW5jZSB3ZSdyZSBlbmNvZGluZyBhIGRpZmZlcmVuY2UsIHRoZSByYW5nZSBsaW1pdCBpcyB0d2ljZSBhcyBtdWNoLgorICAgKi8KKyAgaWYgKG5iaXRzID4gTUFYX0NPRUZfQklUUysxKQorICAgIEVSUkVYSVQoc3RhdGUtPmNpbmZvLCBKRVJSX0JBRF9EQ1RfQ09FRik7CisgIAorICAvKiBFbWl0IHRoZSBIdWZmbWFuLWNvZGVkIHN5bWJvbCBmb3IgdGhlIG51bWJlciBvZiBiaXRzICovCisgIGlmICghIGVtaXRfYml0cyhzdGF0ZSwgZGN0YmwtPmVodWZjb1tuYml0c10sIGRjdGJsLT5laHVmc2lbbmJpdHNdKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgLyogRW1pdCB0aGF0IG51bWJlciBvZiBiaXRzIG9mIHRoZSB2YWx1ZSwgaWYgcG9zaXRpdmUsICovCisgIC8qIG9yIHRoZSBjb21wbGVtZW50IG9mIGl0cyBtYWduaXR1ZGUsIGlmIG5lZ2F0aXZlLiAqLworICBpZiAobmJpdHMpCQkJLyogZW1pdF9iaXRzIHJlamVjdHMgY2FsbHMgd2l0aCBzaXplIDAgKi8KKyAgICBpZiAoISBlbWl0X2JpdHMoc3RhdGUsICh1bnNpZ25lZCBpbnQpIHRlbXAyLCBuYml0cykpCisgICAgICByZXR1cm4gRkFMU0U7CisKKyAgLyogRW5jb2RlIHRoZSBBQyBjb2VmZmljaWVudHMgcGVyIHNlY3Rpb24gRi4xLjIuMiAqLworICAKKyAgciA9IDA7CQkJLyogciA9IHJ1biBsZW5ndGggb2YgemVyb3MgKi8KKyAgCisgIGZvciAoayA9IDE7IGsgPCBEQ1RTSVpFMjsgaysrKSB7CisgICAgaWYgKCh0ZW1wID0gYmxvY2tbanBlZ19uYXR1cmFsX29yZGVyW2tdXSkgPT0gMCkgeworICAgICAgcisrOworICAgIH0gZWxzZSB7CisgICAgICAvKiBpZiBydW4gbGVuZ3RoID4gMTUsIG11c3QgZW1pdCBzcGVjaWFsIHJ1bi1sZW5ndGgtMTYgY29kZXMgKDB4RjApICovCisgICAgICB3aGlsZSAociA+IDE1KSB7CisJaWYgKCEgZW1pdF9iaXRzKHN0YXRlLCBhY3RibC0+ZWh1ZmNvWzB4RjBdLCBhY3RibC0+ZWh1ZnNpWzB4RjBdKSkKKwkgIHJldHVybiBGQUxTRTsKKwlyIC09IDE2OworICAgICAgfQorCisgICAgICB0ZW1wMiA9IHRlbXA7CisgICAgICBpZiAodGVtcCA8IDApIHsKKwl0ZW1wID0gLXRlbXA7CQkvKiB0ZW1wIGlzIGFicyB2YWx1ZSBvZiBpbnB1dCAqLworCS8qIFRoaXMgY29kZSBhc3N1bWVzIHdlIGFyZSBvbiBhIHR3bydzIGNvbXBsZW1lbnQgbWFjaGluZSAqLworCXRlbXAyLS07CisgICAgICB9CisgICAgICAKKyAgICAgIC8qIEZpbmQgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCBmb3IgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29lZmZpY2llbnQgKi8KKyAgICAgIG5iaXRzID0gMTsJCS8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIDEgYml0ICovCisgICAgICB3aGlsZSAoKHRlbXAgPj49IDEpKQorCW5iaXRzKys7CisgICAgICAvKiBDaGVjayBmb3Igb3V0LW9mLXJhbmdlIGNvZWZmaWNpZW50IHZhbHVlcyAqLworICAgICAgaWYgKG5iaXRzID4gTUFYX0NPRUZfQklUUykKKwlFUlJFWElUKHN0YXRlLT5jaW5mbywgSkVSUl9CQURfRENUX0NPRUYpOworICAgICAgCisgICAgICAvKiBFbWl0IEh1ZmZtYW4gc3ltYm9sIGZvciBydW4gbGVuZ3RoIC8gbnVtYmVyIG9mIGJpdHMgKi8KKyAgICAgIGkgPSAociA8PCA0KSArIG5iaXRzOworICAgICAgaWYgKCEgZW1pdF9iaXRzKHN0YXRlLCBhY3RibC0+ZWh1ZmNvW2ldLCBhY3RibC0+ZWh1ZnNpW2ldKSkKKwlyZXR1cm4gRkFMU0U7CisKKyAgICAgIC8qIEVtaXQgdGhhdCBudW1iZXIgb2YgYml0cyBvZiB0aGUgdmFsdWUsIGlmIHBvc2l0aXZlLCAqLworICAgICAgLyogb3IgdGhlIGNvbXBsZW1lbnQgb2YgaXRzIG1hZ25pdHVkZSwgaWYgbmVnYXRpdmUuICovCisgICAgICBpZiAoISBlbWl0X2JpdHMoc3RhdGUsICh1bnNpZ25lZCBpbnQpIHRlbXAyLCBuYml0cykpCisJcmV0dXJuIEZBTFNFOworICAgICAgCisgICAgICByID0gMDsKKyAgICB9CisgIH0KKworICAvKiBJZiB0aGUgbGFzdCBjb2VmKHMpIHdlcmUgemVybywgZW1pdCBhbiBlbmQtb2YtYmxvY2sgY29kZSAqLworICBpZiAociA+IDApCisgICAgaWYgKCEgZW1pdF9iaXRzKHN0YXRlLCBhY3RibC0+ZWh1ZmNvWzBdLCBhY3RibC0+ZWh1ZnNpWzBdKSkKKyAgICAgIHJldHVybiBGQUxTRTsKKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogRW1pdCBhIHJlc3RhcnQgbWFya2VyICYgcmVzeW5jaHJvbml6ZSBwcmVkaWN0aW9ucy4KKyAqLworCitMT0NBTChib29sZWFuKQorZW1pdF9yZXN0YXJ0ICh3b3JraW5nX3N0YXRlICogc3RhdGUsIGludCByZXN0YXJ0X251bSkKK3sKKyAgaW50IGNpOworCisgIGlmICghIGZsdXNoX2JpdHMoc3RhdGUpKQorICAgIHJldHVybiBGQUxTRTsKKworICBlbWl0X2J5dGUoc3RhdGUsIDB4RkYsIHJldHVybiBGQUxTRSk7CisgIGVtaXRfYnl0ZShzdGF0ZSwgSlBFR19SU1QwICsgcmVzdGFydF9udW0sIHJldHVybiBGQUxTRSk7CisKKyAgLyogUmUtaW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovCisgIGZvciAoY2kgPSAwOyBjaSA8IHN0YXRlLT5jaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykKKyAgICBzdGF0ZS0+Y3VyLmxhc3RfZGNfdmFsW2NpXSA9IDA7CisKKyAgLyogVGhlIHJlc3RhcnQgY291bnRlciBpcyBub3QgdXBkYXRlZCB1bnRpbCB3ZSBzdWNjZXNzZnVsbHkgd3JpdGUgdGhlIE1DVS4gKi8KKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogRW5jb2RlIGFuZCBvdXRwdXQgb25lIE1DVSdzIHdvcnRoIG9mIEh1ZmZtYW4tY29tcHJlc3NlZCBjb2VmZmljaWVudHMuCisgKi8KKworTUVUSE9EREVGKGJvb2xlYW4pCitlbmNvZGVfbWN1X2h1ZmYgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoreworICBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAoaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7CisgIHdvcmtpbmdfc3RhdGUgc3RhdGU7CisgIGludCBibGtuLCBjaTsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7CisKKyAgLyogTG9hZCB1cCB3b3JraW5nIHN0YXRlICovCisgIHN0YXRlLm5leHRfb3V0cHV0X2J5dGUgPSBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZTsKKyAgc3RhdGUuZnJlZV9pbl9idWZmZXIgPSBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXI7CisgIEFTU0lHTl9TVEFURShzdGF0ZS5jdXIsIGVudHJvcHktPnNhdmVkKTsKKyAgc3RhdGUuY2luZm8gPSBjaW5mbzsKKworICAvKiBFbWl0IHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZCAqLworICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKKyAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkKKyAgICAgIGlmICghIGVtaXRfcmVzdGFydCgmc3RhdGUsIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0pKQorCXJldHVybiBGQUxTRTsKKyAgfQorCisgIC8qIEVuY29kZSB0aGUgTUNVIGRhdGEgYmxvY2tzICovCisgIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7CisgICAgY2kgPSBjaW5mby0+TUNVX21lbWJlcnNoaXBbYmxrbl07CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICBpZiAoISBlbmNvZGVfb25lX2Jsb2NrKCZzdGF0ZSwKKwkJCSAgIE1DVV9kYXRhW2Jsa25dWzBdLCBzdGF0ZS5jdXIubGFzdF9kY192YWxbY2ldLAorCQkJICAgZW50cm9weS0+ZGNfZGVyaXZlZF90YmxzW2NvbXBwdHItPmRjX3RibF9ub10sCisJCQkgICBlbnRyb3B5LT5hY19kZXJpdmVkX3RibHNbY29tcHB0ci0+YWNfdGJsX25vXSkpCisgICAgICByZXR1cm4gRkFMU0U7CisgICAgLyogVXBkYXRlIGxhc3RfZGNfdmFsICovCisgICAgc3RhdGUuY3VyLmxhc3RfZGNfdmFsW2NpXSA9IE1DVV9kYXRhW2Jsa25dWzBdWzBdOworICB9CisKKyAgLyogQ29tcGxldGVkIE1DVSwgc28gdXBkYXRlIHN0YXRlICovCisgIGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlID0gc3RhdGUubmV4dF9vdXRwdXRfYnl0ZTsKKyAgY2luZm8tPmRlc3QtPmZyZWVfaW5fYnVmZmVyID0gc3RhdGUuZnJlZV9pbl9idWZmZXI7CisgIEFTU0lHTl9TVEFURShlbnRyb3B5LT5zYXZlZCwgc3RhdGUuY3VyKTsKKworICAvKiBVcGRhdGUgcmVzdGFydC1pbnRlcnZhbCBzdGF0ZSB0b28gKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7CisgICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApIHsKKyAgICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKys7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtICY9IDc7CisgICAgfQorICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07CisgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogRmluaXNoIHVwIGF0IHRoZSBlbmQgb2YgYSBIdWZmbWFuLWNvbXByZXNzZWQgc2Nhbi4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2ZpbmlzaF9wYXNzX2h1ZmYgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAoaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7CisgIHdvcmtpbmdfc3RhdGUgc3RhdGU7CisKKyAgLyogTG9hZCB1cCB3b3JraW5nIHN0YXRlIC4uLiBmbHVzaF9iaXRzIG5lZWRzIGl0ICovCisgIHN0YXRlLm5leHRfb3V0cHV0X2J5dGUgPSBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZTsKKyAgc3RhdGUuZnJlZV9pbl9idWZmZXIgPSBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXI7CisgIEFTU0lHTl9TVEFURShzdGF0ZS5jdXIsIGVudHJvcHktPnNhdmVkKTsKKyAgc3RhdGUuY2luZm8gPSBjaW5mbzsKKworICAvKiBGbHVzaCBvdXQgdGhlIGxhc3QgZGF0YSAqLworICBpZiAoISBmbHVzaF9iaXRzKCZzdGF0ZSkpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DQU5UX1NVU1BFTkQpOworCisgIC8qIFVwZGF0ZSBzdGF0ZSAqLworICBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZSA9IHN0YXRlLm5leHRfb3V0cHV0X2J5dGU7CisgIGNpbmZvLT5kZXN0LT5mcmVlX2luX2J1ZmZlciA9IHN0YXRlLmZyZWVfaW5fYnVmZmVyOworICBBU1NJR05fU1RBVEUoZW50cm9weS0+c2F2ZWQsIHN0YXRlLmN1cik7Cit9CisKKworLyoKKyAqIEh1ZmZtYW4gY29kaW5nIG9wdGltaXphdGlvbi4KKyAqCisgKiBXZSBmaXJzdCBzY2FuIHRoZSBzdXBwbGllZCBkYXRhIGFuZCBjb3VudCB0aGUgbnVtYmVyIG9mIHVzZXMgb2YgZWFjaCBzeW1ib2wKKyAqIHRoYXQgaXMgdG8gYmUgSHVmZm1hbi1jb2RlZC4gKFRoaXMgcHJvY2VzcyBNVVNUIGFncmVlIHdpdGggdGhlIGNvZGUgYWJvdmUuKQorICogVGhlbiB3ZSBidWlsZCBhIEh1ZmZtYW4gY29kaW5nIHRyZWUgZm9yIHRoZSBvYnNlcnZlZCBjb3VudHMuCisgKiBTeW1ib2xzIHdoaWNoIGFyZSBub3QgbmVlZGVkIGF0IGFsbCBmb3IgdGhlIHBhcnRpY3VsYXIgaW1hZ2UgYXJlIG5vdAorICogYXNzaWduZWQgYW55IGNvZGUsIHdoaWNoIHNhdmVzIHNwYWNlIGluIHRoZSBESFQgbWFya2VyIGFzIHdlbGwgYXMgaW4KKyAqIHRoZSBjb21wcmVzc2VkIGRhdGEuCisgKi8KKworI2lmZGVmIEVOVFJPUFlfT1BUX1NVUFBPUlRFRAorCisKKy8qIFByb2Nlc3MgYSBzaW5nbGUgYmxvY2sncyB3b3J0aCBvZiBjb2VmZmljaWVudHMgKi8KKworTE9DQUwodm9pZCkKK2h0ZXN0X29uZV9ibG9jayAoal9jb21wcmVzc19wdHIgY2luZm8sIEpDT0VGUFRSIGJsb2NrLCBpbnQgbGFzdF9kY192YWwsCisJCSBsb25nIGRjX2NvdW50c1tdLCBsb25nIGFjX2NvdW50c1tdKQoreworICByZWdpc3RlciBpbnQgdGVtcDsKKyAgcmVnaXN0ZXIgaW50IG5iaXRzOworICByZWdpc3RlciBpbnQgaywgcjsKKyAgCisgIC8qIEVuY29kZSB0aGUgREMgY29lZmZpY2llbnQgZGlmZmVyZW5jZSBwZXIgc2VjdGlvbiBGLjEuMi4xICovCisgIAorICB0ZW1wID0gYmxvY2tbMF0gLSBsYXN0X2RjX3ZhbDsKKyAgaWYgKHRlbXAgPCAwKQorICAgIHRlbXAgPSAtdGVtcDsKKyAgCisgIC8qIEZpbmQgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCBmb3IgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29lZmZpY2llbnQgKi8KKyAgbmJpdHMgPSAwOworICB3aGlsZSAodGVtcCkgeworICAgIG5iaXRzKys7CisgICAgdGVtcCA+Pj0gMTsKKyAgfQorICAvKiBDaGVjayBmb3Igb3V0LW9mLXJhbmdlIGNvZWZmaWNpZW50IHZhbHVlcy4KKyAgICogU2luY2Ugd2UncmUgZW5jb2RpbmcgYSBkaWZmZXJlbmNlLCB0aGUgcmFuZ2UgbGltaXQgaXMgdHdpY2UgYXMgbXVjaC4KKyAgICovCisgIGlmIChuYml0cyA+IE1BWF9DT0VGX0JJVFMrMSkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9EQ1RfQ09FRik7CisKKyAgLyogQ291bnQgdGhlIEh1ZmZtYW4gc3ltYm9sIGZvciB0aGUgbnVtYmVyIG9mIGJpdHMgKi8KKyAgZGNfY291bnRzW25iaXRzXSsrOworICAKKyAgLyogRW5jb2RlIHRoZSBBQyBjb2VmZmljaWVudHMgcGVyIHNlY3Rpb24gRi4xLjIuMiAqLworICAKKyAgciA9IDA7CQkJLyogciA9IHJ1biBsZW5ndGggb2YgemVyb3MgKi8KKyAgCisgIGZvciAoayA9IDE7IGsgPCBEQ1RTSVpFMjsgaysrKSB7CisgICAgaWYgKCh0ZW1wID0gYmxvY2tbanBlZ19uYXR1cmFsX29yZGVyW2tdXSkgPT0gMCkgeworICAgICAgcisrOworICAgIH0gZWxzZSB7CisgICAgICAvKiBpZiBydW4gbGVuZ3RoID4gMTUsIG11c3QgZW1pdCBzcGVjaWFsIHJ1bi1sZW5ndGgtMTYgY29kZXMgKDB4RjApICovCisgICAgICB3aGlsZSAociA+IDE1KSB7CisJYWNfY291bnRzWzB4RjBdKys7CisJciAtPSAxNjsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLyogRmluZCB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIGZvciB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb2VmZmljaWVudCAqLworICAgICAgaWYgKHRlbXAgPCAwKQorCXRlbXAgPSAtdGVtcDsKKyAgICAgIAorICAgICAgLyogRmluZCB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIGZvciB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb2VmZmljaWVudCAqLworICAgICAgbmJpdHMgPSAxOwkJLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgMSBiaXQgKi8KKyAgICAgIHdoaWxlICgodGVtcCA+Pj0gMSkpCisJbmJpdHMrKzsKKyAgICAgIC8qIENoZWNrIGZvciBvdXQtb2YtcmFuZ2UgY29lZmZpY2llbnQgdmFsdWVzICovCisgICAgICBpZiAobmJpdHMgPiBNQVhfQ09FRl9CSVRTKQorCUVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0RDVF9DT0VGKTsKKyAgICAgIAorICAgICAgLyogQ291bnQgSHVmZm1hbiBzeW1ib2wgZm9yIHJ1biBsZW5ndGggLyBudW1iZXIgb2YgYml0cyAqLworICAgICAgYWNfY291bnRzWyhyIDw8IDQpICsgbmJpdHNdKys7CisgICAgICAKKyAgICAgIHIgPSAwOworICAgIH0KKyAgfQorCisgIC8qIElmIHRoZSBsYXN0IGNvZWYocykgd2VyZSB6ZXJvLCBlbWl0IGFuIGVuZC1vZi1ibG9jayBjb2RlICovCisgIGlmIChyID4gMCkKKyAgICBhY19jb3VudHNbMF0rKzsKK30KKworCisvKgorICogVHJpYWwtZW5jb2RlIG9uZSBNQ1UncyB3b3J0aCBvZiBIdWZmbWFuLWNvbXByZXNzZWQgY29lZmZpY2llbnRzLgorICogTm8gZGF0YSBpcyBhY3R1YWxseSBvdXRwdXQsIHNvIG5vIHN1c3BlbnNpb24gcmV0dXJuIGlzIHBvc3NpYmxlLgorICovCisKK01FVEhPRERFRihib29sZWFuKQorZW5jb2RlX21jdV9nYXRoZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoreworICBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAoaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7CisgIGludCBibGtuLCBjaTsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7CisKKyAgLyogVGFrZSBjYXJlIG9mIHJlc3RhcnQgaW50ZXJ2YWxzIGlmIG5lZWRlZCAqLworICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKKyAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkgeworICAgICAgLyogUmUtaW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovCisgICAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykKKwllbnRyb3B5LT5zYXZlZC5sYXN0X2RjX3ZhbFtjaV0gPSAwOworICAgICAgLyogVXBkYXRlIHJlc3RhcnQgc3RhdGUgKi8KKyAgICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7CisgICAgfQorICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07CisgIH0KKworICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgeworICAgIGNpID0gY2luZm8tPk1DVV9tZW1iZXJzaGlwW2Jsa25dOworICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07CisgICAgaHRlc3Rfb25lX2Jsb2NrKGNpbmZvLCBNQ1VfZGF0YVtibGtuXVswXSwgZW50cm9weS0+c2F2ZWQubGFzdF9kY192YWxbY2ldLAorCQkgICAgZW50cm9weS0+ZGNfY291bnRfcHRyc1tjb21wcHRyLT5kY190Ymxfbm9dLAorCQkgICAgZW50cm9weS0+YWNfY291bnRfcHRyc1tjb21wcHRyLT5hY190Ymxfbm9dKTsKKyAgICBlbnRyb3B5LT5zYXZlZC5sYXN0X2RjX3ZhbFtjaV0gPSBNQ1VfZGF0YVtibGtuXVswXVswXTsKKyAgfQorCisgIHJldHVybiBUUlVFOworfQorCisKKy8qCisgKiBHZW5lcmF0ZSB0aGUgYmVzdCBIdWZmbWFuIGNvZGUgdGFibGUgZm9yIHRoZSBnaXZlbiBjb3VudHMsIGZpbGwgaHRibC4KKyAqIE5vdGUgdGhpcyBpcyBhbHNvIHVzZWQgYnkgamNwaHVmZi5jLgorICoKKyAqIFRoZSBKUEVHIHN0YW5kYXJkIHJlcXVpcmVzIHRoYXQgbm8gc3ltYm9sIGJlIGFzc2lnbmVkIGEgY29kZXdvcmQgb2YgYWxsCisgKiBvbmUgYml0cyAoc28gdGhhdCBwYWRkaW5nIGJpdHMgYWRkZWQgYXQgdGhlIGVuZCBvZiBhIGNvbXByZXNzZWQgc2VnbWVudAorICogY2FuJ3QgbG9vayBsaWtlIGEgdmFsaWQgY29kZSkuICBCZWNhdXNlIG9mIHRoZSBjYW5vbmljYWwgb3JkZXJpbmcgb2YKKyAqIGNvZGV3b3JkcywgdGhpcyBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgbXVzdCBiZSBhbiB1bnVzZWQgc2xvdCBpbiB0aGUKKyAqIGxvbmdlc3QgY29kZXdvcmQgbGVuZ3RoIGNhdGVnb3J5LiAgU2VjdGlvbiBLLjIgb2YgdGhlIEpQRUcgc3BlYyBzdWdnZXN0cworICogcmVzZXJ2aW5nIHN1Y2ggYSBzbG90IGJ5IHByZXRlbmRpbmcgdGhhdCBzeW1ib2wgMjU2IGlzIGEgdmFsaWQgc3ltYm9sCisgKiB3aXRoIGNvdW50IDEuICBJbiB0aGVvcnkgdGhhdCdzIG5vdCBvcHRpbWFsOyBnaXZpbmcgaXQgY291bnQgemVybyBidXQKKyAqIGluY2x1ZGluZyBpdCBpbiB0aGUgc3ltYm9sIHNldCBhbnl3YXkgc2hvdWxkIGdpdmUgYSBiZXR0ZXIgSHVmZm1hbiBjb2RlLgorICogQnV0IHRoZSB0aGVvcmV0aWNhbGx5IGJldHRlciBjb2RlIGFjdHVhbGx5IHNlZW1zIHRvIGNvbWUgb3V0IHdvcnNlIGluCisgKiBwcmFjdGljZSwgYmVjYXVzZSBpdCBwcm9kdWNlcyBtb3JlIGFsbC1vbmVzIGJ5dGVzICh3aGljaCBpbmN1ciBzdHVmZmVkCisgKiB6ZXJvIGJ5dGVzIGluIHRoZSBmaW5hbCBmaWxlKS4gIEluIGFueSBjYXNlIHRoZSBkaWZmZXJlbmNlIGlzIHRpbnkuCisgKgorICogVGhlIEpQRUcgc3RhbmRhcmQgcmVxdWlyZXMgSHVmZm1hbiBjb2RlcyB0byBiZSBubyBtb3JlIHRoYW4gMTYgYml0cyBsb25nLgorICogSWYgc29tZSBzeW1ib2xzIGhhdmUgYSB2ZXJ5IHNtYWxsIGJ1dCBub256ZXJvIHByb2JhYmlsaXR5LCB0aGUgSHVmZm1hbiB0cmVlCisgKiBtdXN0IGJlIGFkanVzdGVkIHRvIG1lZXQgdGhlIGNvZGUgbGVuZ3RoIHJlc3RyaWN0aW9uLiAgV2UgY3VycmVudGx5IHVzZQorICogdGhlIGFkanVzdG1lbnQgbWV0aG9kIHN1Z2dlc3RlZCBpbiBKUEVHIHNlY3Rpb24gSy4yLiAgVGhpcyBtZXRob2QgaXMgKm5vdCoKKyAqIG9wdGltYWw7IGl0IG1heSBub3QgY2hvb3NlIHRoZSBiZXN0IHBvc3NpYmxlIGxpbWl0ZWQtbGVuZ3RoIGNvZGUuICBCdXQKKyAqIHR5cGljYWxseSBvbmx5IHZlcnktbG93LWZyZXF1ZW5jeSBzeW1ib2xzIHdpbGwgYmUgZ2l2ZW4gbGVzcy10aGFuLW9wdGltYWwKKyAqIGxlbmd0aHMsIHNvIHRoZSBjb2RlIGlzIGFsbW9zdCBvcHRpbWFsLiAgRXhwZXJpbWVudGFsIGNvbXBhcmlzb25zIGFnYWluc3QKKyAqIGFuIG9wdGltYWwgbGltaXRlZC1sZW5ndGgtY29kZSBhbGdvcml0aG0gaW5kaWNhdGUgdGhhdCB0aGUgZGlmZmVyZW5jZSBpcworICogbWljcm9zY29waWMgLS0tIHVzdWFsbHkgbGVzcyB0aGFuIGEgaHVuZHJlZHRoIG9mIGEgcGVyY2VudCBvZiB0b3RhbCBzaXplLgorICogU28gdGhlIGV4dHJhIGNvbXBsZXhpdHkgb2YgYW4gb3B0aW1hbCBhbGdvcml0aG0gZG9lc24ndCBzZWVtIHdvcnRod2hpbGUuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2dlbl9vcHRpbWFsX3RhYmxlIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSkhVRkZfVEJMICogaHRibCwgbG9uZyBmcmVxW10pCit7CisjZGVmaW5lIE1BWF9DTEVOIDMyCQkvKiBhc3N1bWVkIG1heGltdW0gaW5pdGlhbCBjb2RlIGxlbmd0aCAqLworICBVSU5UOCBiaXRzW01BWF9DTEVOKzFdOwkvKiBiaXRzW2tdID0gIyBvZiBzeW1ib2xzIHdpdGggY29kZSBsZW5ndGggayAqLworICBpbnQgY29kZXNpemVbMjU3XTsJCS8qIGNvZGVzaXplW2tdID0gY29kZSBsZW5ndGggb2Ygc3ltYm9sIGsgKi8KKyAgaW50IG90aGVyc1syNTddOwkJLyogbmV4dCBzeW1ib2wgaW4gY3VycmVudCBicmFuY2ggb2YgdHJlZSAqLworICBpbnQgYzEsIGMyOworICBpbnQgcCwgaSwgajsKKyAgbG9uZyB2OworCisgIC8qIFRoaXMgYWxnb3JpdGhtIGlzIGV4cGxhaW5lZCBpbiBzZWN0aW9uIEsuMiBvZiB0aGUgSlBFRyBzdGFuZGFyZCAqLworCisgIE1FTVpFUk8oYml0cywgU0laRU9GKGJpdHMpKTsKKyAgTUVNWkVSTyhjb2Rlc2l6ZSwgU0laRU9GKGNvZGVzaXplKSk7CisgIGZvciAoaSA9IDA7IGkgPCAyNTc7IGkrKykKKyAgICBvdGhlcnNbaV0gPSAtMTsJCS8qIGluaXQgbGlua3MgdG8gZW1wdHkgKi8KKyAgCisgIGZyZXFbMjU2XSA9IDE7CQkvKiBtYWtlIHN1cmUgMjU2IGhhcyBhIG5vbnplcm8gY291bnQgKi8KKyAgLyogSW5jbHVkaW5nIHRoZSBwc2V1ZG8tc3ltYm9sIDI1NiBpbiB0aGUgSHVmZm1hbiBwcm9jZWR1cmUgZ3VhcmFudGVlcworICAgKiB0aGF0IG5vIHJlYWwgc3ltYm9sIGlzIGdpdmVuIGNvZGUtdmFsdWUgb2YgYWxsIG9uZXMsIGJlY2F1c2UgMjU2CisgICAqIHdpbGwgYmUgcGxhY2VkIGxhc3QgaW4gdGhlIGxhcmdlc3QgY29kZXdvcmQgY2F0ZWdvcnkuCisgICAqLworCisgIC8qIEh1ZmZtYW4ncyBiYXNpYyBhbGdvcml0aG0gdG8gYXNzaWduIG9wdGltYWwgY29kZSBsZW5ndGhzIHRvIHN5bWJvbHMgKi8KKworICBmb3IgKDs7KSB7CisgICAgLyogRmluZCB0aGUgc21hbGxlc3Qgbm9uemVybyBmcmVxdWVuY3ksIHNldCBjMSA9IGl0cyBzeW1ib2wgKi8KKyAgICAvKiBJbiBjYXNlIG9mIHRpZXMsIHRha2UgdGhlIGxhcmdlciBzeW1ib2wgbnVtYmVyICovCisgICAgYzEgPSAtMTsKKyAgICB2ID0gMTAwMDAwMDAwMEw7CisgICAgZm9yIChpID0gMDsgaSA8PSAyNTY7IGkrKykgeworICAgICAgaWYgKGZyZXFbaV0gJiYgZnJlcVtpXSA8PSB2KSB7CisJdiA9IGZyZXFbaV07CisJYzEgPSBpOworICAgICAgfQorICAgIH0KKworICAgIC8qIEZpbmQgdGhlIG5leHQgc21hbGxlc3Qgbm9uemVybyBmcmVxdWVuY3ksIHNldCBjMiA9IGl0cyBzeW1ib2wgKi8KKyAgICAvKiBJbiBjYXNlIG9mIHRpZXMsIHRha2UgdGhlIGxhcmdlciBzeW1ib2wgbnVtYmVyICovCisgICAgYzIgPSAtMTsKKyAgICB2ID0gMTAwMDAwMDAwMEw7CisgICAgZm9yIChpID0gMDsgaSA8PSAyNTY7IGkrKykgeworICAgICAgaWYgKGZyZXFbaV0gJiYgZnJlcVtpXSA8PSB2ICYmIGkgIT0gYzEpIHsKKwl2ID0gZnJlcVtpXTsKKwljMiA9IGk7CisgICAgICB9CisgICAgfQorCisgICAgLyogRG9uZSBpZiB3ZSd2ZSBtZXJnZWQgZXZlcnl0aGluZyBpbnRvIG9uZSBmcmVxdWVuY3kgKi8KKyAgICBpZiAoYzIgPCAwKQorICAgICAgYnJlYWs7CisgICAgCisgICAgLyogRWxzZSBtZXJnZSB0aGUgdHdvIGNvdW50cy90cmVlcyAqLworICAgIGZyZXFbYzFdICs9IGZyZXFbYzJdOworICAgIGZyZXFbYzJdID0gMDsKKworICAgIC8qIEluY3JlbWVudCB0aGUgY29kZXNpemUgb2YgZXZlcnl0aGluZyBpbiBjMSdzIHRyZWUgYnJhbmNoICovCisgICAgY29kZXNpemVbYzFdKys7CisgICAgd2hpbGUgKG90aGVyc1tjMV0gPj0gMCkgeworICAgICAgYzEgPSBvdGhlcnNbYzFdOworICAgICAgY29kZXNpemVbYzFdKys7CisgICAgfQorICAgIAorICAgIG90aGVyc1tjMV0gPSBjMjsJCS8qIGNoYWluIGMyIG9udG8gYzEncyB0cmVlIGJyYW5jaCAqLworICAgIAorICAgIC8qIEluY3JlbWVudCB0aGUgY29kZXNpemUgb2YgZXZlcnl0aGluZyBpbiBjMidzIHRyZWUgYnJhbmNoICovCisgICAgY29kZXNpemVbYzJdKys7CisgICAgd2hpbGUgKG90aGVyc1tjMl0gPj0gMCkgeworICAgICAgYzIgPSBvdGhlcnNbYzJdOworICAgICAgY29kZXNpemVbYzJdKys7CisgICAgfQorICB9CisKKyAgLyogTm93IGNvdW50IHRoZSBudW1iZXIgb2Ygc3ltYm9scyBvZiBlYWNoIGNvZGUgbGVuZ3RoICovCisgIGZvciAoaSA9IDA7IGkgPD0gMjU2OyBpKyspIHsKKyAgICBpZiAoY29kZXNpemVbaV0pIHsKKyAgICAgIC8qIFRoZSBKUEVHIHN0YW5kYXJkIHNlZW1zIHRvIHRoaW5rIHRoYXQgdGhpcyBjYW4ndCBoYXBwZW4sICovCisgICAgICAvKiBidXQgSSdtIHBhcmFub2lkLi4uICovCisgICAgICBpZiAoY29kZXNpemVbaV0gPiBNQVhfQ0xFTikKKwlFUlJFWElUKGNpbmZvLCBKRVJSX0hVRkZfQ0xFTl9PVkVSRkxPVyk7CisKKyAgICAgIGJpdHNbY29kZXNpemVbaV1dKys7CisgICAgfQorICB9CisKKyAgLyogSlBFRyBkb2Vzbid0IGFsbG93IHN5bWJvbHMgd2l0aCBjb2RlIGxlbmd0aHMgb3ZlciAxNiBiaXRzLCBzbyBpZiB0aGUgcHVyZQorICAgKiBIdWZmbWFuIHByb2NlZHVyZSBhc3NpZ25lZCBhbnkgc3VjaCBsZW5ndGhzLCB3ZSBtdXN0IGFkanVzdCB0aGUgY29kaW5nLgorICAgKiBIZXJlIGlzIHdoYXQgdGhlIEpQRUcgc3BlYyBzYXlzIGFib3V0IGhvdyB0aGlzIG5leHQgYml0IHdvcmtzOgorICAgKiBTaW5jZSBzeW1ib2xzIGFyZSBwYWlyZWQgZm9yIHRoZSBsb25nZXN0IEh1ZmZtYW4gY29kZSwgdGhlIHN5bWJvbHMgYXJlCisgICAqIHJlbW92ZWQgZnJvbSB0aGlzIGxlbmd0aCBjYXRlZ29yeSB0d28gYXQgYSB0aW1lLiAgVGhlIHByZWZpeCBmb3IgdGhlIHBhaXIKKyAgICogKHdoaWNoIGlzIG9uZSBiaXQgc2hvcnRlcikgaXMgYWxsb2NhdGVkIHRvIG9uZSBvZiB0aGUgcGFpcjsgdGhlbiwKKyAgICogc2tpcHBpbmcgdGhlIEJJVFMgZW50cnkgZm9yIHRoYXQgcHJlZml4IGxlbmd0aCwgYSBjb2RlIHdvcmQgZnJvbSB0aGUgbmV4dAorICAgKiBzaG9ydGVzdCBub256ZXJvIEJJVFMgZW50cnkgaXMgY29udmVydGVkIGludG8gYSBwcmVmaXggZm9yIHR3byBjb2RlIHdvcmRzCisgICAqIG9uZSBiaXQgbG9uZ2VyLgorICAgKi8KKyAgCisgIGZvciAoaSA9IE1BWF9DTEVOOyBpID4gMTY7IGktLSkgeworICAgIHdoaWxlIChiaXRzW2ldID4gMCkgeworICAgICAgaiA9IGkgLSAyOwkJLyogZmluZCBsZW5ndGggb2YgbmV3IHByZWZpeCB0byBiZSB1c2VkICovCisgICAgICB3aGlsZSAoYml0c1tqXSA9PSAwKQorCWotLTsKKyAgICAgIAorICAgICAgYml0c1tpXSAtPSAyOwkJLyogcmVtb3ZlIHR3byBzeW1ib2xzICovCisgICAgICBiaXRzW2ktMV0rKzsJCS8qIG9uZSBnb2VzIGluIHRoaXMgbGVuZ3RoICovCisgICAgICBiaXRzW2orMV0gKz0gMjsJCS8qIHR3byBuZXcgc3ltYm9scyBpbiB0aGlzIGxlbmd0aCAqLworICAgICAgYml0c1tqXS0tOwkJLyogc3ltYm9sIG9mIHRoaXMgbGVuZ3RoIGlzIG5vdyBhIHByZWZpeCAqLworICAgIH0KKyAgfQorCisgIC8qIFJlbW92ZSB0aGUgY291bnQgZm9yIHRoZSBwc2V1ZG8tc3ltYm9sIDI1NiBmcm9tIHRoZSBsYXJnZXN0IGNvZGVsZW5ndGggKi8KKyAgd2hpbGUgKGJpdHNbaV0gPT0gMCkJCS8qIGZpbmQgbGFyZ2VzdCBjb2RlbGVuZ3RoIHN0aWxsIGluIHVzZSAqLworICAgIGktLTsKKyAgYml0c1tpXS0tOworICAKKyAgLyogUmV0dXJuIGZpbmFsIHN5bWJvbCBjb3VudHMgKG9ubHkgZm9yIGxlbmd0aHMgMC4uMTYpICovCisgIE1FTUNPUFkoaHRibC0+Yml0cywgYml0cywgU0laRU9GKGh0YmwtPmJpdHMpKTsKKyAgCisgIC8qIFJldHVybiBhIGxpc3Qgb2YgdGhlIHN5bWJvbHMgc29ydGVkIGJ5IGNvZGUgbGVuZ3RoICovCisgIC8qIEl0J3Mgbm90IHJlYWwgY2xlYXIgdG8gbWUgd2h5IHdlIGRvbid0IG5lZWQgdG8gY29uc2lkZXIgdGhlIGNvZGVsZW5ndGgKKyAgICogY2hhbmdlcyBtYWRlIGFib3ZlLCBidXQgdGhlIEpQRUcgc3BlYyBzZWVtcyB0byB0aGluayB0aGlzIHdvcmtzLgorICAgKi8KKyAgcCA9IDA7CisgIGZvciAoaSA9IDE7IGkgPD0gTUFYX0NMRU47IGkrKykgeworICAgIGZvciAoaiA9IDA7IGogPD0gMjU1OyBqKyspIHsKKyAgICAgIGlmIChjb2Rlc2l6ZVtqXSA9PSBpKSB7CisJaHRibC0+aHVmZnZhbFtwXSA9IChVSU5UOCkgajsKKwlwKys7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLyogU2V0IHNlbnRfdGFibGUgRkFMU0Ugc28gdXBkYXRlZCB0YWJsZSB3aWxsIGJlIHdyaXR0ZW4gdG8gSlBFRyBmaWxlLiAqLworICBodGJsLT5zZW50X3RhYmxlID0gRkFMU0U7Cit9CisKKworLyoKKyAqIEZpbmlzaCB1cCBhIHN0YXRpc3RpY3MtZ2F0aGVyaW5nIHBhc3MgYW5kIGNyZWF0ZSB0aGUgbmV3IEh1ZmZtYW4gdGFibGVzLgorICovCisKK01FVEhPRERFRih2b2lkKQorZmluaXNoX3Bhc3NfZ2F0aGVyIChqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5OworICBpbnQgY2ksIGRjdGJsLCBhY3RibDsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7CisgIEpIVUZGX1RCTCAqKmh0YmxwdHI7CisgIGJvb2xlYW4gZGlkX2RjW05VTV9IVUZGX1RCTFNdOworICBib29sZWFuIGRpZF9hY1tOVU1fSFVGRl9UQkxTXTsKKworICAvKiBJdCdzIGltcG9ydGFudCBub3QgdG8gYXBwbHkganBlZ19nZW5fb3B0aW1hbF90YWJsZSBtb3JlIHRoYW4gb25jZQorICAgKiBwZXIgdGFibGUsIGJlY2F1c2UgaXQgY2xvYmJlcnMgdGhlIGlucHV0IGZyZXF1ZW5jeSBjb3VudHMhCisgICAqLworICBNRU1aRVJPKGRpZF9kYywgU0laRU9GKGRpZF9kYykpOworICBNRU1aRVJPKGRpZF9hYywgU0laRU9GKGRpZF9hYykpOworCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICBkY3RibCA9IGNvbXBwdHItPmRjX3RibF9ubzsKKyAgICBhY3RibCA9IGNvbXBwdHItPmFjX3RibF9ubzsKKyAgICBpZiAoISBkaWRfZGNbZGN0YmxdKSB7CisgICAgICBodGJscHRyID0gJiBjaW5mby0+ZGNfaHVmZl90YmxfcHRyc1tkY3RibF07CisgICAgICBpZiAoKmh0YmxwdHIgPT0gTlVMTCkKKwkqaHRibHB0ciA9IGpwZWdfYWxsb2NfaHVmZl90YWJsZSgoal9jb21tb25fcHRyKSBjaW5mbyk7CisgICAgICBqcGVnX2dlbl9vcHRpbWFsX3RhYmxlKGNpbmZvLCAqaHRibHB0ciwgZW50cm9weS0+ZGNfY291bnRfcHRyc1tkY3RibF0pOworICAgICAgZGlkX2RjW2RjdGJsXSA9IFRSVUU7CisgICAgfQorICAgIGlmICghIGRpZF9hY1thY3RibF0pIHsKKyAgICAgIGh0YmxwdHIgPSAmIGNpbmZvLT5hY19odWZmX3RibF9wdHJzW2FjdGJsXTsKKyAgICAgIGlmICgqaHRibHB0ciA9PSBOVUxMKQorCSpodGJscHRyID0ganBlZ19hbGxvY19odWZmX3RhYmxlKChqX2NvbW1vbl9wdHIpIGNpbmZvKTsKKyAgICAgIGpwZWdfZ2VuX29wdGltYWxfdGFibGUoY2luZm8sICpodGJscHRyLCBlbnRyb3B5LT5hY19jb3VudF9wdHJzW2FjdGJsXSk7CisgICAgICBkaWRfYWNbYWN0YmxdID0gVFJVRTsKKyAgICB9CisgIH0KK30KKworCisjZW5kaWYgLyogRU5UUk9QWV9PUFRfU1VQUE9SVEVEICovCisKKworLyoKKyAqIE1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciBIdWZmbWFuIGVudHJvcHkgZW5jb2RpbmcuCisgKi8KKworR0xPQkFMKHZvaWQpCitqaW5pdF9odWZmX2VuY29kZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBodWZmX2VudHJvcHlfcHRyIGVudHJvcHk7CisgIGludCBpOworCisgIGVudHJvcHkgPSAoaHVmZl9lbnRyb3B5X3B0cikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCVNJWkVPRihodWZmX2VudHJvcHlfZW5jb2RlcikpOworICBjaW5mby0+ZW50cm9weSA9IChzdHJ1Y3QganBlZ19lbnRyb3B5X2VuY29kZXIgKikgZW50cm9weTsKKyAgZW50cm9weS0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX2h1ZmY7CisKKyAgLyogTWFyayB0YWJsZXMgdW5hbGxvY2F0ZWQgKi8KKyAgZm9yIChpID0gMDsgaSA8IE5VTV9IVUZGX1RCTFM7IGkrKykgeworICAgIGVudHJvcHktPmRjX2Rlcml2ZWRfdGJsc1tpXSA9IGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsc1tpXSA9IE5VTEw7CisjaWZkZWYgRU5UUk9QWV9PUFRfU1VQUE9SVEVECisgICAgZW50cm9weS0+ZGNfY291bnRfcHRyc1tpXSA9IGVudHJvcHktPmFjX2NvdW50X3B0cnNbaV0gPSBOVUxMOworI2VuZGlmCisgIH0KK30KKworI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY2luaXQuYyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pjaW5pdC5jCmluZGV4IGEwZDhmODEuLjU4ZTVkMTggMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pjaW5pdC5jCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pjaW5pdC5jCkBAIC0xLDc1ICsxLDc1IEBACi0jaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQ0KLS8qDQotICogamNpbml0LmMNCi0gKg0KLSAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4NCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLg0KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4NCi0gKg0KLSAqIFRoaXMgZmlsZSBjb250YWlucyBpbml0aWFsaXphdGlvbiBsb2dpYyBmb3IgdGhlIEpQRUcgY29tcHJlc3Nvci4NCi0gKiBUaGlzIHJvdXRpbmUgaXMgaW4gY2hhcmdlIG9mIHNlbGVjdGluZyB0aGUgbW9kdWxlcyB0byBiZSBleGVjdXRlZCBhbmQNCi0gKiBtYWtpbmcgYW4gaW5pdGlhbGl6YXRpb24gY2FsbCB0byBlYWNoIG9uZS4NCi0gKg0KLSAqIExvZ2ljYWxseSwgdGhpcyBjb2RlIGJlbG9uZ3MgaW4gamNtYXN0ZXIuYy4gIEl0J3Mgc3BsaXQgb3V0IGJlY2F1c2UNCi0gKiBsaW5raW5nIHRoaXMgcm91dGluZSBpbXBsaWVzIGxpbmtpbmcgdGhlIGVudGlyZSBjb21wcmVzc2lvbiBsaWJyYXJ5Lg0KLSAqIEZvciBhIHRyYW5zY29kaW5nLW9ubHkgYXBwbGljYXRpb24sIHdlIHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgamNtYXN0ZXIuYw0KLSAqIHdpdGhvdXQgbGlua2luZyBpbiB0aGUgd2hvbGUgbGlicmFyeS4NCi0gKi8NCi0NCi0jZGVmaW5lIEpQRUdfSU5URVJOQUxTDQotI2luY2x1ZGUgImppbmNsdWRlLmgiDQotI2luY2x1ZGUgImpwZWdsaWIuaCINCi0NCi0NCi0vKg0KLSAqIE1hc3RlciBzZWxlY3Rpb24gb2YgY29tcHJlc3Npb24gbW9kdWxlcy4NCi0gKiBUaGlzIGlzIGRvbmUgb25jZSBhdCB0aGUgc3RhcnQgb2YgcHJvY2Vzc2luZyBhbiBpbWFnZS4gIFdlIGRldGVybWluZQ0KLSAqIHdoaWNoIG1vZHVsZXMgd2lsbCBiZSB1c2VkIGFuZCBnaXZlIHRoZW0gYXBwcm9wcmlhdGUgaW5pdGlhbGl6YXRpb24gY2FsbHMuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotamluaXRfY29tcHJlc3NfbWFzdGVyIChqX2NvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICAvKiBJbml0aWFsaXplIG1hc3RlciBjb250cm9sIChpbmNsdWRlcyBwYXJhbWV0ZXIgY2hlY2tpbmcvcHJvY2Vzc2luZykgKi8NCi0gIGppbml0X2NfbWFzdGVyX2NvbnRyb2woY2luZm8sIEZBTFNFIC8qIGZ1bGwgY29tcHJlc3Npb24gKi8pOw0KLQ0KLSAgLyogUHJlcHJvY2Vzc2luZyAqLw0KLSAgaWYgKCEgY2luZm8tPnJhd19kYXRhX2luKSB7DQotICAgIGppbml0X2NvbG9yX2NvbnZlcnRlcihjaW5mbyk7DQotICAgIGppbml0X2Rvd25zYW1wbGVyKGNpbmZvKTsNCi0gICAgamluaXRfY19wcmVwX2NvbnRyb2xsZXIoY2luZm8sIEZBTFNFIC8qIG5ldmVyIG5lZWQgZnVsbCBidWZmZXIgaGVyZSAqLyk7DQotICB9DQotICAvKiBGb3J3YXJkIERDVCAqLw0KLSAgamluaXRfZm9yd2FyZF9kY3QoY2luZm8pOw0KLSAgLyogRW50cm9weSBlbmNvZGluZzogZWl0aGVyIEh1ZmZtYW4gb3IgYXJpdGhtZXRpYyBjb2RpbmcuICovDQotICBpZiAoY2luZm8tPmFyaXRoX2NvZGUpIHsNCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9BUklUSF9OT1RJTVBMKTsNCi0gIH0gZWxzZSB7DQotICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkgew0KLSNpZmRlZiBDX1BST0dSRVNTSVZFX1NVUFBPUlRFRA0KLSAgICAgIGppbml0X3BodWZmX2VuY29kZXIoY2luZm8pOw0KLSNlbHNlDQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOw0KLSNlbmRpZg0KLSAgICB9IGVsc2UNCi0gICAgICBqaW5pdF9odWZmX2VuY29kZXIoY2luZm8pOw0KLSAgfQ0KLQ0KLSAgLyogTmVlZCBhIGZ1bGwtaW1hZ2UgY29lZmZpY2llbnQgYnVmZmVyIGluIGFueSBtdWx0aS1wYXNzIG1vZGUuICovDQotICBqaW5pdF9jX2NvZWZfY29udHJvbGxlcihjaW5mbywNCi0JCShib29sZWFuKSAoY2luZm8tPm51bV9zY2FucyA+IDEgfHwgY2luZm8tPm9wdGltaXplX2NvZGluZykpOw0KLSAgamluaXRfY19tYWluX2NvbnRyb2xsZXIoY2luZm8sIEZBTFNFIC8qIG5ldmVyIG5lZWQgZnVsbCBidWZmZXIgaGVyZSAqLyk7DQotDQotICBqaW5pdF9tYXJrZXJfd3JpdGVyKGNpbmZvKTsNCi0NCi0gIC8qIFdlIGNhbiBub3cgdGVsbCB0aGUgbWVtb3J5IG1hbmFnZXIgdG8gYWxsb2NhdGUgdmlydHVhbCBhcnJheXMuICovDQotICAoKmNpbmZvLT5tZW0tPnJlYWxpemVfdmlydF9hcnJheXMpICgoal9jb21tb25fcHRyKSBjaW5mbyk7DQotDQotICAvKiBXcml0ZSB0aGUgZGF0YXN0cmVhbSBoZWFkZXIgKFNPSSkgaW1tZWRpYXRlbHkuDQotICAgKiBGcmFtZSBhbmQgc2NhbiBoZWFkZXJzIGFyZSBwb3N0cG9uZWQgdGlsbCBsYXRlci4NCi0gICAqIFRoaXMgbGV0cyBhcHBsaWNhdGlvbiBpbnNlcnQgc3BlY2lhbCBtYXJrZXJzIGFmdGVyIHRoZSBTT0kuDQotICAgKi8NCi0gICgqY2luZm8tPm1hcmtlci0+d3JpdGVfZmlsZV9oZWFkZXIpIChjaW5mbyk7DQotfQ0KLQ0KLSNlbmRpZiAvL19GWF9KUEVHX1RVUkJPXw0KKyNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pCisvKgorICogamNpbml0LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBpbml0aWFsaXphdGlvbiBsb2dpYyBmb3IgdGhlIEpQRUcgY29tcHJlc3Nvci4KKyAqIFRoaXMgcm91dGluZSBpcyBpbiBjaGFyZ2Ugb2Ygc2VsZWN0aW5nIHRoZSBtb2R1bGVzIHRvIGJlIGV4ZWN1dGVkIGFuZAorICogbWFraW5nIGFuIGluaXRpYWxpemF0aW9uIGNhbGwgdG8gZWFjaCBvbmUuCisgKgorICogTG9naWNhbGx5LCB0aGlzIGNvZGUgYmVsb25ncyBpbiBqY21hc3Rlci5jLiAgSXQncyBzcGxpdCBvdXQgYmVjYXVzZQorICogbGlua2luZyB0aGlzIHJvdXRpbmUgaW1wbGllcyBsaW5raW5nIHRoZSBlbnRpcmUgY29tcHJlc3Npb24gbGlicmFyeS4KKyAqIEZvciBhIHRyYW5zY29kaW5nLW9ubHkgYXBwbGljYXRpb24sIHdlIHdhbnQgdG8gYmUgYWJsZSB0byB1c2UgamNtYXN0ZXIuYworICogd2l0aG91dCBsaW5raW5nIGluIHRoZSB3aG9sZSBsaWJyYXJ5LgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKworCisvKgorICogTWFzdGVyIHNlbGVjdGlvbiBvZiBjb21wcmVzc2lvbiBtb2R1bGVzLgorICogVGhpcyBpcyBkb25lIG9uY2UgYXQgdGhlIHN0YXJ0IG9mIHByb2Nlc3NpbmcgYW4gaW1hZ2UuICBXZSBkZXRlcm1pbmUKKyAqIHdoaWNoIG1vZHVsZXMgd2lsbCBiZSB1c2VkIGFuZCBnaXZlIHRoZW0gYXBwcm9wcmlhdGUgaW5pdGlhbGl6YXRpb24gY2FsbHMuCisgKi8KKworR0xPQkFMKHZvaWQpCitqaW5pdF9jb21wcmVzc19tYXN0ZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICAvKiBJbml0aWFsaXplIG1hc3RlciBjb250cm9sIChpbmNsdWRlcyBwYXJhbWV0ZXIgY2hlY2tpbmcvcHJvY2Vzc2luZykgKi8KKyAgamluaXRfY19tYXN0ZXJfY29udHJvbChjaW5mbywgRkFMU0UgLyogZnVsbCBjb21wcmVzc2lvbiAqLyk7CisKKyAgLyogUHJlcHJvY2Vzc2luZyAqLworICBpZiAoISBjaW5mby0+cmF3X2RhdGFfaW4pIHsKKyAgICBqaW5pdF9jb2xvcl9jb252ZXJ0ZXIoY2luZm8pOworICAgIGppbml0X2Rvd25zYW1wbGVyKGNpbmZvKTsKKyAgICBqaW5pdF9jX3ByZXBfY29udHJvbGxlcihjaW5mbywgRkFMU0UgLyogbmV2ZXIgbmVlZCBmdWxsIGJ1ZmZlciBoZXJlICovKTsKKyAgfQorICAvKiBGb3J3YXJkIERDVCAqLworICBqaW5pdF9mb3J3YXJkX2RjdChjaW5mbyk7CisgIC8qIEVudHJvcHkgZW5jb2Rpbmc6IGVpdGhlciBIdWZmbWFuIG9yIGFyaXRobWV0aWMgY29kaW5nLiAqLworICBpZiAoY2luZm8tPmFyaXRoX2NvZGUpIHsKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0FSSVRIX05PVElNUEwpOworICB9IGVsc2UgeworICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkgeworI2lmZGVmIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVECisgICAgICBqaW5pdF9waHVmZl9lbmNvZGVyKGNpbmZvKTsKKyNlbHNlCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisjZW5kaWYKKyAgICB9IGVsc2UKKyAgICAgIGppbml0X2h1ZmZfZW5jb2RlcihjaW5mbyk7CisgIH0KKworICAvKiBOZWVkIGEgZnVsbC1pbWFnZSBjb2VmZmljaWVudCBidWZmZXIgaW4gYW55IG11bHRpLXBhc3MgbW9kZS4gKi8KKyAgamluaXRfY19jb2VmX2NvbnRyb2xsZXIoY2luZm8sCisJCShib29sZWFuKSAoY2luZm8tPm51bV9zY2FucyA+IDEgfHwgY2luZm8tPm9wdGltaXplX2NvZGluZykpOworICBqaW5pdF9jX21haW5fY29udHJvbGxlcihjaW5mbywgRkFMU0UgLyogbmV2ZXIgbmVlZCBmdWxsIGJ1ZmZlciBoZXJlICovKTsKKworICBqaW5pdF9tYXJrZXJfd3JpdGVyKGNpbmZvKTsKKworICAvKiBXZSBjYW4gbm93IHRlbGwgdGhlIG1lbW9yeSBtYW5hZ2VyIHRvIGFsbG9jYXRlIHZpcnR1YWwgYXJyYXlzLiAqLworICAoKmNpbmZvLT5tZW0tPnJlYWxpemVfdmlydF9hcnJheXMpICgoal9jb21tb25fcHRyKSBjaW5mbyk7CisKKyAgLyogV3JpdGUgdGhlIGRhdGFzdHJlYW0gaGVhZGVyIChTT0kpIGltbWVkaWF0ZWx5LgorICAgKiBGcmFtZSBhbmQgc2NhbiBoZWFkZXJzIGFyZSBwb3N0cG9uZWQgdGlsbCBsYXRlci4KKyAgICogVGhpcyBsZXRzIGFwcGxpY2F0aW9uIGluc2VydCBzcGVjaWFsIG1hcmtlcnMgYWZ0ZXIgdGhlIFNPSS4KKyAgICovCisgICgqY2luZm8tPm1hcmtlci0+d3JpdGVfZmlsZV9oZWFkZXIpIChjaW5mbyk7Cit9CisKKyNlbmRpZiAvL19GWF9KUEVHX1RVUkJPXwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamNtYWluY3QuYyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pjbWFpbmN0LmMKaW5kZXggMjVkNjFmMi4uNGJmMmM0MCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamNtYWluY3QuYworKysgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY21haW5jdC5jCkBAIC0xLDI5NiArMSwyOTYgQEAKLSNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pDQotLyoNCi0gKiBqY21haW5jdC5jDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgVGhvbWFzIEcuIExhbmUuDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4NCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuDQotICoNCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIG1haW4gYnVmZmVyIGNvbnRyb2xsZXIgZm9yIGNvbXByZXNzaW9uLg0KLSAqIFRoZSBtYWluIGJ1ZmZlciBsaWVzIGJldHdlZW4gdGhlIHByZS1wcm9jZXNzb3IgYW5kIHRoZSBKUEVHDQotICogY29tcHJlc3NvciBwcm9wZXI7IGl0IGhvbGRzIGRvd25zYW1wbGVkIGRhdGEgaW4gdGhlIEpQRUcgY29sb3JzcGFjZS4NCi0gKi8NCi0NCi0jZGVmaW5lIEpQRUdfSU5URVJOQUxTDQotI2luY2x1ZGUgImppbmNsdWRlLmgiDQotI2luY2x1ZGUgImpwZWdsaWIuaCINCi0NCi0NCi0vKiBOb3RlOiBjdXJyZW50bHksIHRoZXJlIGlzIG5vIG9wZXJhdGluZyBtb2RlIGluIHdoaWNoIGEgZnVsbC1pbWFnZSBidWZmZXINCi0gKiBpcyBuZWVkZWQgYXQgdGhpcyBzdGVwLiAgSWYgdGhlcmUgd2VyZSwgdGhhdCBtb2RlIGNvdWxkIG5vdCBiZSB1c2VkIHdpdGgNCi0gKiAicmF3IGRhdGEiIGlucHV0LCBzaW5jZSB0aGlzIG1vZHVsZSBpcyBieXBhc3NlZCBpbiB0aGF0IGNhc2UuICBIb3dldmVyLA0KLSAqIHdlJ3ZlIGxlZnQgdGhlIGNvZGUgaGVyZSBmb3IgcG9zc2libGUgdXNlIGluIHNwZWNpYWwgYXBwbGljYXRpb25zLg0KLSAqLw0KLSN1bmRlZiBGVUxMX01BSU5fQlVGRkVSX1NVUFBPUlRFRA0KLQ0KLQ0KLS8qIFByaXZhdGUgYnVmZmVyIGNvbnRyb2xsZXIgb2JqZWN0ICovDQotDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgc3RydWN0IGpwZWdfY19tYWluX2NvbnRyb2xsZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovDQotDQotICBKRElNRU5TSU9OIGN1cl9pTUNVX3JvdzsJLyogbnVtYmVyIG9mIGN1cnJlbnQgaU1DVSByb3cgKi8NCi0gIEpESU1FTlNJT04gcm93Z3JvdXBfY3RyOwkvKiBjb3VudHMgcm93IGdyb3VwcyByZWNlaXZlZCBpbiBpTUNVIHJvdyAqLw0KLSAgYm9vbGVhbiBzdXNwZW5kZWQ7CQkvKiByZW1lbWJlciBpZiB3ZSBzdXNwZW5kZWQgb3V0cHV0ICovDQotICBKX0JVRl9NT0RFIHBhc3NfbW9kZTsJCS8qIGN1cnJlbnQgb3BlcmF0aW5nIG1vZGUgKi8NCi0NCi0gIC8qIElmIHVzaW5nIGp1c3QgYSBzdHJpcCBidWZmZXIsIHRoaXMgcG9pbnRzIHRvIHRoZSBlbnRpcmUgc2V0IG9mIGJ1ZmZlcnMNCi0gICAqICh3ZSBhbGxvY2F0ZSBvbmUgZm9yIGVhY2ggY29tcG9uZW50KS4gIEluIHRoZSBmdWxsLWltYWdlIGNhc2UsIHRoaXMNCi0gICAqIHBvaW50cyB0byB0aGUgY3VycmVudGx5IGFjY2Vzc2libGUgc3RyaXBzIG9mIHRoZSB2aXJ0dWFsIGFycmF5cy4NCi0gICAqLw0KLSAgSlNBTVBBUlJBWSBidWZmZXJbTUFYX0NPTVBPTkVOVFNdOw0KLQ0KLSNpZmRlZiBGVUxMX01BSU5fQlVGRkVSX1NVUFBPUlRFRA0KLSAgLyogSWYgdXNpbmcgZnVsbC1pbWFnZSBzdG9yYWdlLCB0aGlzIGFycmF5IGhvbGRzIHBvaW50ZXJzIHRvIHZpcnR1YWwtYXJyYXkNCi0gICAqIGNvbnRyb2wgYmxvY2tzIGZvciBlYWNoIGNvbXBvbmVudC4gIFVudXNlZCBpZiBub3QgZnVsbC1pbWFnZSBzdG9yYWdlLg0KLSAgICovDQotICBqdmlydF9zYXJyYXlfcHRyIHdob2xlX2ltYWdlW01BWF9DT01QT05FTlRTXTsNCi0jZW5kaWYNCi19IG15X21haW5fY29udHJvbGxlcjsNCi0NCi10eXBlZGVmIG15X21haW5fY29udHJvbGxlciAqIG15X21haW5fcHRyOw0KLQ0KLQ0KLS8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovDQotTUVUSE9EREVGKHZvaWQpIHByb2Nlc3NfZGF0YV9zaW1wbGVfbWFpbg0KLQlKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwNCi0JICAgICBKRElNRU5TSU9OICppbl9yb3dfY3RyLCBKRElNRU5TSU9OIGluX3Jvd3NfYXZhaWwpKTsNCi0jaWZkZWYgRlVMTF9NQUlOX0JVRkZFUl9TVVBQT1JURUQNCi1NRVRIT0RERUYodm9pZCkgcHJvY2Vzc19kYXRhX2J1ZmZlcl9tYWluDQotCUpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLA0KLQkgICAgIEpESU1FTlNJT04gKmluX3Jvd19jdHIsIEpESU1FTlNJT04gaW5fcm93c19hdmFpbCkpOw0KLSNlbmRpZg0KLQ0KLQ0KLS8qDQotICogSW5pdGlhbGl6ZSBmb3IgYSBwcm9jZXNzaW5nIHBhc3MuDQotICovDQotDQotTUVUSE9EREVGKHZvaWQpDQotc3RhcnRfcGFzc19tYWluIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSl9CVUZfTU9ERSBwYXNzX21vZGUpDQotew0KLSAgbXlfbWFpbl9wdHIgbWFpbiA9IChteV9tYWluX3B0cikgY2luZm8tPm1haW47DQotDQotICAvKiBEbyBub3RoaW5nIGluIHJhdy1kYXRhIG1vZGUuICovDQotICBpZiAoY2luZm8tPnJhd19kYXRhX2luKQ0KLSAgICByZXR1cm47DQotDQotICBtYWluLT5jdXJfaU1DVV9yb3cgPSAwOwkvKiBpbml0aWFsaXplIGNvdW50ZXJzICovDQotICBtYWluLT5yb3dncm91cF9jdHIgPSAwOw0KLSAgbWFpbi0+c3VzcGVuZGVkID0gRkFMU0U7DQotICBtYWluLT5wYXNzX21vZGUgPSBwYXNzX21vZGU7CS8qIHNhdmUgbW9kZSBmb3IgdXNlIGJ5IHByb2Nlc3NfZGF0YSAqLw0KLQ0KLSAgc3dpdGNoIChwYXNzX21vZGUpIHsNCi0gIGNhc2UgSkJVRl9QQVNTX1RIUlU6DQotI2lmZGVmIEZVTExfTUFJTl9CVUZGRVJfU1VQUE9SVEVEDQotICAgIGlmIChtYWluLT53aG9sZV9pbWFnZVswXSAhPSBOVUxMKQ0KLSAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0JVRkZFUl9NT0RFKTsNCi0jZW5kaWYNCi0gICAgbWFpbi0+cHViLnByb2Nlc3NfZGF0YSA9IHByb2Nlc3NfZGF0YV9zaW1wbGVfbWFpbjsNCi0gICAgYnJlYWs7DQotI2lmZGVmIEZVTExfTUFJTl9CVUZGRVJfU1VQUE9SVEVEDQotICBjYXNlIEpCVUZfU0FWRV9TT1VSQ0U6DQotICBjYXNlIEpCVUZfQ1JBTktfREVTVDoNCi0gIGNhc2UgSkJVRl9TQVZFX0FORF9QQVNTOg0KLSAgICBpZiAobWFpbi0+d2hvbGVfaW1hZ2VbMF0gPT0gTlVMTCkNCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7DQotICAgIG1haW4tPnB1Yi5wcm9jZXNzX2RhdGEgPSBwcm9jZXNzX2RhdGFfYnVmZmVyX21haW47DQotICAgIGJyZWFrOw0KLSNlbmRpZg0KLSAgZGVmYXVsdDoNCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOw0KLSAgICBicmVhazsNCi0gIH0NCi19DQotDQotDQotLyoNCi0gKiBQcm9jZXNzIHNvbWUgZGF0YS4NCi0gKiBUaGlzIHJvdXRpbmUgaGFuZGxlcyB0aGUgc2ltcGxlIHBhc3MtdGhyb3VnaCBtb2RlLA0KLSAqIHdoZXJlIHdlIGhhdmUgb25seSBhIHN0cmlwIGJ1ZmZlci4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1wcm9jZXNzX2RhdGFfc2ltcGxlX21haW4gKGpfY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCSAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpESU1FTlNJT04gKmluX3Jvd19jdHIsDQotCQkJICBKRElNRU5TSU9OIGluX3Jvd3NfYXZhaWwpDQotew0KLSAgbXlfbWFpbl9wdHIgbWFpbiA9IChteV9tYWluX3B0cikgY2luZm8tPm1haW47DQotDQotICB3aGlsZSAobWFpbi0+Y3VyX2lNQ1Vfcm93IDwgY2luZm8tPnRvdGFsX2lNQ1Vfcm93cykgew0KLSAgICAvKiBSZWFkIGlucHV0IGRhdGEgaWYgd2UgaGF2ZW4ndCBmaWxsZWQgdGhlIG1haW4gYnVmZmVyIHlldCAqLw0KLSAgICBpZiAobWFpbi0+cm93Z3JvdXBfY3RyIDwgRENUU0laRSkNCi0gICAgICAoKmNpbmZvLT5wcmVwLT5wcmVfcHJvY2Vzc19kYXRhKSAoY2luZm8sDQotCQkJCQlpbnB1dF9idWYsIGluX3Jvd19jdHIsIGluX3Jvd3NfYXZhaWwsDQotCQkJCQltYWluLT5idWZmZXIsICZtYWluLT5yb3dncm91cF9jdHIsDQotCQkJCQkoSkRJTUVOU0lPTikgRENUU0laRSk7DQotDQotICAgIC8qIElmIHdlIGRvbid0IGhhdmUgYSBmdWxsIGlNQ1Ugcm93IGJ1ZmZlcmVkLCByZXR1cm4gdG8gYXBwbGljYXRpb24gZm9yDQotICAgICAqIG1vcmUgZGF0YS4gIE5vdGUgdGhhdCBwcmVwcm9jZXNzb3Igd2lsbCBhbHdheXMgcGFkIHRvIGZpbGwgdGhlIGlNQ1Ugcm93DQotICAgICAqIGF0IHRoZSBib3R0b20gb2YgdGhlIGltYWdlLg0KLSAgICAgKi8NCi0gICAgaWYgKG1haW4tPnJvd2dyb3VwX2N0ciAhPSBEQ1RTSVpFKQ0KLSAgICAgIHJldHVybjsNCi0NCi0gICAgLyogU2VuZCB0aGUgY29tcGxldGVkIHJvdyB0byB0aGUgY29tcHJlc3NvciAqLw0KLSAgICBpZiAoISAoKmNpbmZvLT5jb2VmLT5jb21wcmVzc19kYXRhKSAoY2luZm8sIG1haW4tPmJ1ZmZlcikpIHsNCi0gICAgICAvKiBJZiBjb21wcmVzc29yIGRpZCBub3QgY29uc3VtZSB0aGUgd2hvbGUgcm93LCB0aGVuIHdlIG11c3QgbmVlZCB0bw0KLSAgICAgICAqIHN1c3BlbmQgcHJvY2Vzc2luZyBhbmQgcmV0dXJuIHRvIHRoZSBhcHBsaWNhdGlvbi4gIEluIHRoaXMgc2l0dWF0aW9uDQotICAgICAgICogd2UgcHJldGVuZCB3ZSBkaWRuJ3QgeWV0IGNvbnN1bWUgdGhlIGxhc3QgaW5wdXQgcm93OyBvdGhlcndpc2UsIGlmDQotICAgICAgICogaXQgaGFwcGVuZWQgdG8gYmUgdGhlIGxhc3Qgcm93IG9mIHRoZSBpbWFnZSwgdGhlIGFwcGxpY2F0aW9uIHdvdWxkDQotICAgICAgICogdGhpbmsgd2Ugd2VyZSBkb25lLg0KLSAgICAgICAqLw0KLSAgICAgIGlmICghIG1haW4tPnN1c3BlbmRlZCkgew0KLQkoKmluX3Jvd19jdHIpLS07DQotCW1haW4tPnN1c3BlbmRlZCA9IFRSVUU7DQotICAgICAgfQ0KLSAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICAvKiBXZSBkaWQgZmluaXNoIHRoZSByb3cuICBVbmRvIG91ciBsaXR0bGUgc3VzcGVuc2lvbiBoYWNrIGlmIGEgcHJldmlvdXMNCi0gICAgICogY2FsbCBzdXNwZW5kZWQ7IHRoZW4gbWFyayB0aGUgbWFpbiBidWZmZXIgZW1wdHkuDQotICAgICAqLw0KLSAgICBpZiAobWFpbi0+c3VzcGVuZGVkKSB7DQotICAgICAgKCppbl9yb3dfY3RyKSsrOw0KLSAgICAgIG1haW4tPnN1c3BlbmRlZCA9IEZBTFNFOw0KLSAgICB9DQotICAgIG1haW4tPnJvd2dyb3VwX2N0ciA9IDA7DQotICAgIG1haW4tPmN1cl9pTUNVX3JvdysrOw0KLSAgfQ0KLX0NCi0NCi0NCi0jaWZkZWYgRlVMTF9NQUlOX0JVRkZFUl9TVVBQT1JURUQNCi0NCi0vKg0KLSAqIFByb2Nlc3Mgc29tZSBkYXRhLg0KLSAqIFRoaXMgcm91dGluZSBoYW5kbGVzIGFsbCBvZiB0aGUgbW9kZXMgdGhhdCB1c2UgYSBmdWxsLXNpemUgYnVmZmVyLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXByb2Nlc3NfZGF0YV9idWZmZXJfbWFpbiAoal9jb21wcmVzc19wdHIgY2luZm8sDQotCQkJICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2N0ciwNCi0JCQkgIEpESU1FTlNJT04gaW5fcm93c19hdmFpbCkNCi17DQotICBteV9tYWluX3B0ciBtYWluID0gKG15X21haW5fcHRyKSBjaW5mby0+bWFpbjsNCi0gIGludCBjaTsNCi0gIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7DQotICBib29sZWFuIHdyaXRpbmcgPSAobWFpbi0+cGFzc19tb2RlICE9IEpCVUZfQ1JBTktfREVTVCk7DQotDQotICB3aGlsZSAobWFpbi0+Y3VyX2lNQ1Vfcm93IDwgY2luZm8tPnRvdGFsX2lNQ1Vfcm93cykgew0KLSAgICAvKiBSZWFsaWduIHRoZSB2aXJ0dWFsIGJ1ZmZlcnMgaWYgYXQgdGhlIHN0YXJ0IG9mIGFuIGlNQ1Ugcm93LiAqLw0KLSAgICBpZiAobWFpbi0+cm93Z3JvdXBfY3RyID09IDApIHsNCi0gICAgICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOw0KLQkgICBjaSsrLCBjb21wcHRyKyspIHsNCi0JbWFpbi0+YnVmZmVyW2NpXSA9ICgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfc2FycmF5KQ0KLQkgICgoal9jb21tb25fcHRyKSBjaW5mbywgbWFpbi0+d2hvbGVfaW1hZ2VbY2ldLA0KLQkgICBtYWluLT5jdXJfaU1DVV9yb3cgKiAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpLA0KLQkgICAoSkRJTUVOU0lPTikgKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSwgd3JpdGluZyk7DQotICAgICAgfQ0KLSAgICAgIC8qIEluIGEgcmVhZCBwYXNzLCBwcmV0ZW5kIHdlIGp1c3QgcmVhZCBzb21lIHNvdXJjZSBkYXRhLiAqLw0KLSAgICAgIGlmICghIHdyaXRpbmcpIHsNCi0JKmluX3Jvd19jdHIgKz0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogRENUU0laRTsNCi0JbWFpbi0+cm93Z3JvdXBfY3RyID0gRENUU0laRTsNCi0gICAgICB9DQotICAgIH0NCi0NCi0gICAgLyogSWYgYSB3cml0ZSBwYXNzLCByZWFkIGlucHV0IGRhdGEgdW50aWwgdGhlIGN1cnJlbnQgaU1DVSByb3cgaXMgZnVsbC4gKi8NCi0gICAgLyogTm90ZTogcHJlcHJvY2Vzc29yIHdpbGwgcGFkIGlmIG5lY2Vzc2FyeSB0byBmaWxsIHRoZSBsYXN0IGlNQ1Ugcm93LiAqLw0KLSAgICBpZiAod3JpdGluZykgew0KLSAgICAgICgqY2luZm8tPnByZXAtPnByZV9wcm9jZXNzX2RhdGEpIChjaW5mbywNCi0JCQkJCWlucHV0X2J1ZiwgaW5fcm93X2N0ciwgaW5fcm93c19hdmFpbCwNCi0JCQkJCW1haW4tPmJ1ZmZlciwgJm1haW4tPnJvd2dyb3VwX2N0ciwNCi0JCQkJCShKRElNRU5TSU9OKSBEQ1RTSVpFKTsNCi0gICAgICAvKiBSZXR1cm4gdG8gYXBwbGljYXRpb24gaWYgd2UgbmVlZCBtb3JlIGRhdGEgdG8gZmlsbCB0aGUgaU1DVSByb3cuICovDQotICAgICAgaWYgKG1haW4tPnJvd2dyb3VwX2N0ciA8IERDVFNJWkUpDQotCXJldHVybjsNCi0gICAgfQ0KLQ0KLSAgICAvKiBFbWl0IGRhdGEsIHVubGVzcyB0aGlzIGlzIGEgc2luay1vbmx5IHBhc3MuICovDQotICAgIGlmIChtYWluLT5wYXNzX21vZGUgIT0gSkJVRl9TQVZFX1NPVVJDRSkgew0KLSAgICAgIGlmICghICgqY2luZm8tPmNvZWYtPmNvbXByZXNzX2RhdGEpIChjaW5mbywgbWFpbi0+YnVmZmVyKSkgew0KLQkvKiBJZiBjb21wcmVzc29yIGRpZCBub3QgY29uc3VtZSB0aGUgd2hvbGUgcm93LCB0aGVuIHdlIG11c3QgbmVlZCB0bw0KLQkgKiBzdXNwZW5kIHByb2Nlc3NpbmcgYW5kIHJldHVybiB0byB0aGUgYXBwbGljYXRpb24uICBJbiB0aGlzIHNpdHVhdGlvbg0KLQkgKiB3ZSBwcmV0ZW5kIHdlIGRpZG4ndCB5ZXQgY29uc3VtZSB0aGUgbGFzdCBpbnB1dCByb3c7IG90aGVyd2lzZSwgaWYNCi0JICogaXQgaGFwcGVuZWQgdG8gYmUgdGhlIGxhc3Qgcm93IG9mIHRoZSBpbWFnZSwgdGhlIGFwcGxpY2F0aW9uIHdvdWxkDQotCSAqIHRoaW5rIHdlIHdlcmUgZG9uZS4NCi0JICovDQotCWlmICghIG1haW4tPnN1c3BlbmRlZCkgew0KLQkgICgqaW5fcm93X2N0ciktLTsNCi0JICBtYWluLT5zdXNwZW5kZWQgPSBUUlVFOw0KLQl9DQotCXJldHVybjsNCi0gICAgICB9DQotICAgICAgLyogV2UgZGlkIGZpbmlzaCB0aGUgcm93LiAgVW5kbyBvdXIgbGl0dGxlIHN1c3BlbnNpb24gaGFjayBpZiBhIHByZXZpb3VzDQotICAgICAgICogY2FsbCBzdXNwZW5kZWQ7IHRoZW4gbWFyayB0aGUgbWFpbiBidWZmZXIgZW1wdHkuDQotICAgICAgICovDQotICAgICAgaWYgKG1haW4tPnN1c3BlbmRlZCkgew0KLQkoKmluX3Jvd19jdHIpKys7DQotCW1haW4tPnN1c3BlbmRlZCA9IEZBTFNFOw0KLSAgICAgIH0NCi0gICAgfQ0KLQ0KLSAgICAvKiBJZiBnZXQgaGVyZSwgd2UgYXJlIGRvbmUgd2l0aCB0aGlzIGlNQ1Ugcm93LiAgTWFyayBidWZmZXIgZW1wdHkuICovDQotICAgIG1haW4tPnJvd2dyb3VwX2N0ciA9IDA7DQotICAgIG1haW4tPmN1cl9pTUNVX3JvdysrOw0KLSAgfQ0KLX0NCi0NCi0jZW5kaWYgLyogRlVMTF9NQUlOX0JVRkZFUl9TVVBQT1JURUQgKi8NCi0NCi0NCi0vKg0KLSAqIEluaXRpYWxpemUgbWFpbiBidWZmZXIgY29udHJvbGxlci4NCi0gKi8NCi0NCi1HTE9CQUwodm9pZCkNCi1qaW5pdF9jX21haW5fY29udHJvbGxlciAoal9jb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gbmVlZF9mdWxsX2J1ZmZlcikNCi17DQotICBteV9tYWluX3B0ciBtYWluOw0KLSAgaW50IGNpOw0KLSAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsNCi0NCi0gIG1haW4gPSAobXlfbWFpbl9wdHIpDQotICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsDQotCQkJCVNJWkVPRihteV9tYWluX2NvbnRyb2xsZXIpKTsNCi0gIGNpbmZvLT5tYWluID0gKHN0cnVjdCBqcGVnX2NfbWFpbl9jb250cm9sbGVyICopIG1haW47DQotICBtYWluLT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfbWFpbjsNCi0NCi0gIC8qIFdlIGRvbid0IG5lZWQgdG8gY3JlYXRlIGEgYnVmZmVyIGluIHJhdy1kYXRhIG1vZGUuICovDQotICBpZiAoY2luZm8tPnJhd19kYXRhX2luKQ0KLSAgICByZXR1cm47DQotDQotICAvKiBDcmVhdGUgdGhlIGJ1ZmZlci4gIEl0IGhvbGRzIGRvd25zYW1wbGVkIGRhdGEsIHNvIGVhY2ggY29tcG9uZW50DQotICAgKiBtYXkgYmUgb2YgYSBkaWZmZXJlbnQgc2l6ZS4NCi0gICAqLw0KLSAgaWYgKG5lZWRfZnVsbF9idWZmZXIpIHsNCi0jaWZkZWYgRlVMTF9NQUlOX0JVRkZFUl9TVVBQT1JURUQNCi0gICAgLyogQWxsb2NhdGUgYSBmdWxsLWltYWdlIHZpcnR1YWwgYXJyYXkgZm9yIGVhY2ggY29tcG9uZW50ICovDQotICAgIC8qIE5vdGUgd2UgcGFkIHRoZSBib3R0b20gdG8gYSBtdWx0aXBsZSBvZiB0aGUgaU1DVSBoZWlnaHQgKi8NCi0gICAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsNCi0JIGNpKyssIGNvbXBwdHIrKykgew0KLSAgICAgIG1haW4tPndob2xlX2ltYWdlW2NpXSA9ICgqY2luZm8tPm1lbS0+cmVxdWVzdF92aXJ0X3NhcnJheSkNCi0JKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwgRkFMU0UsDQotCSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBEQ1RTSVpFLA0KLQkgKEpESU1FTlNJT04pIGpyb3VuZF91cCgobG9uZykgY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrcywNCi0JCQkJKGxvbmcpIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpICogRENUU0laRSwNCi0JIChKRElNRU5TSU9OKSAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsNCi0gICAgfQ0KLSNlbHNlDQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0JVRkZFUl9NT0RFKTsNCi0jZW5kaWYNCi0gIH0gZWxzZSB7DQotI2lmZGVmIEZVTExfTUFJTl9CVUZGRVJfU1VQUE9SVEVEDQotICAgIG1haW4tPndob2xlX2ltYWdlWzBdID0gTlVMTDsgLyogZmxhZyBmb3Igbm8gdmlydHVhbCBhcnJheXMgKi8NCi0jZW5kaWYNCi0gICAgLyogQWxsb2NhdGUgYSBzdHJpcCBidWZmZXIgZm9yIGVhY2ggY29tcG9uZW50ICovDQotICAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7DQotCSBjaSsrLCBjb21wcHRyKyspIHsNCi0gICAgICBtYWluLT5idWZmZXJbY2ldID0gKCpjaW5mby0+bWVtLT5hbGxvY19zYXJyYXkpDQotCSgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsDQotCSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBEQ1RTSVpFLA0KLQkgKEpESU1FTlNJT04pIChjb21wcHRyLT52X3NhbXBfZmFjdG9yICogRENUU0laRSkpOw0KLSAgICB9DQotICB9DQotfQ0KLQ0KLSNlbmRpZiAvL19GWF9KUEVHX1RVUkJPXw0KKyNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pCisvKgorICogamNtYWluY3QuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBtYWluIGJ1ZmZlciBjb250cm9sbGVyIGZvciBjb21wcmVzc2lvbi4KKyAqIFRoZSBtYWluIGJ1ZmZlciBsaWVzIGJldHdlZW4gdGhlIHByZS1wcm9jZXNzb3IgYW5kIHRoZSBKUEVHCisgKiBjb21wcmVzc29yIHByb3BlcjsgaXQgaG9sZHMgZG93bnNhbXBsZWQgZGF0YSBpbiB0aGUgSlBFRyBjb2xvcnNwYWNlLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKworCisvKiBOb3RlOiBjdXJyZW50bHksIHRoZXJlIGlzIG5vIG9wZXJhdGluZyBtb2RlIGluIHdoaWNoIGEgZnVsbC1pbWFnZSBidWZmZXIKKyAqIGlzIG5lZWRlZCBhdCB0aGlzIHN0ZXAuICBJZiB0aGVyZSB3ZXJlLCB0aGF0IG1vZGUgY291bGQgbm90IGJlIHVzZWQgd2l0aAorICogInJhdyBkYXRhIiBpbnB1dCwgc2luY2UgdGhpcyBtb2R1bGUgaXMgYnlwYXNzZWQgaW4gdGhhdCBjYXNlLiAgSG93ZXZlciwKKyAqIHdlJ3ZlIGxlZnQgdGhlIGNvZGUgaGVyZSBmb3IgcG9zc2libGUgdXNlIGluIHNwZWNpYWwgYXBwbGljYXRpb25zLgorICovCisjdW5kZWYgRlVMTF9NQUlOX0JVRkZFUl9TVVBQT1JURUQKKworCisvKiBQcml2YXRlIGJ1ZmZlciBjb250cm9sbGVyIG9iamVjdCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX2NfbWFpbl9jb250cm9sbGVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLworCisgIEpESU1FTlNJT04gY3VyX2lNQ1Vfcm93OwkvKiBudW1iZXIgb2YgY3VycmVudCBpTUNVIHJvdyAqLworICBKRElNRU5TSU9OIHJvd2dyb3VwX2N0cjsJLyogY291bnRzIHJvdyBncm91cHMgcmVjZWl2ZWQgaW4gaU1DVSByb3cgKi8KKyAgYm9vbGVhbiBzdXNwZW5kZWQ7CQkvKiByZW1lbWJlciBpZiB3ZSBzdXNwZW5kZWQgb3V0cHV0ICovCisgIEpfQlVGX01PREUgcGFzc19tb2RlOwkJLyogY3VycmVudCBvcGVyYXRpbmcgbW9kZSAqLworCisgIC8qIElmIHVzaW5nIGp1c3QgYSBzdHJpcCBidWZmZXIsIHRoaXMgcG9pbnRzIHRvIHRoZSBlbnRpcmUgc2V0IG9mIGJ1ZmZlcnMKKyAgICogKHdlIGFsbG9jYXRlIG9uZSBmb3IgZWFjaCBjb21wb25lbnQpLiAgSW4gdGhlIGZ1bGwtaW1hZ2UgY2FzZSwgdGhpcworICAgKiBwb2ludHMgdG8gdGhlIGN1cnJlbnRseSBhY2Nlc3NpYmxlIHN0cmlwcyBvZiB0aGUgdmlydHVhbCBhcnJheXMuCisgICAqLworICBKU0FNUEFSUkFZIGJ1ZmZlcltNQVhfQ09NUE9ORU5UU107CisKKyNpZmRlZiBGVUxMX01BSU5fQlVGRkVSX1NVUFBPUlRFRAorICAvKiBJZiB1c2luZyBmdWxsLWltYWdlIHN0b3JhZ2UsIHRoaXMgYXJyYXkgaG9sZHMgcG9pbnRlcnMgdG8gdmlydHVhbC1hcnJheQorICAgKiBjb250cm9sIGJsb2NrcyBmb3IgZWFjaCBjb21wb25lbnQuICBVbnVzZWQgaWYgbm90IGZ1bGwtaW1hZ2Ugc3RvcmFnZS4KKyAgICovCisgIGp2aXJ0X3NhcnJheV9wdHIgd2hvbGVfaW1hZ2VbTUFYX0NPTVBPTkVOVFNdOworI2VuZGlmCit9IG15X21haW5fY29udHJvbGxlcjsKKwordHlwZWRlZiBteV9tYWluX2NvbnRyb2xsZXIgKiBteV9tYWluX3B0cjsKKworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworTUVUSE9EREVGKHZvaWQpIHByb2Nlc3NfZGF0YV9zaW1wbGVfbWFpbgorCUpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgaW5wdXRfYnVmLAorCSAgICAgSkRJTUVOU0lPTiAqaW5fcm93X2N0ciwgSkRJTUVOU0lPTiBpbl9yb3dzX2F2YWlsKSk7CisjaWZkZWYgRlVMTF9NQUlOX0JVRkZFUl9TVVBQT1JURUQKK01FVEhPRERFRih2b2lkKSBwcm9jZXNzX2RhdGFfYnVmZmVyX21haW4KKwlKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKwkgICAgIEpESU1FTlNJT04gKmluX3Jvd19jdHIsIEpESU1FTlNJT04gaW5fcm93c19hdmFpbCkpOworI2VuZGlmCisKKworLyoKKyAqIEluaXRpYWxpemUgZm9yIGEgcHJvY2Vzc2luZyBwYXNzLgorICovCisKK01FVEhPRERFRih2b2lkKQorc3RhcnRfcGFzc19tYWluIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSl9CVUZfTU9ERSBwYXNzX21vZGUpCit7CisgIG15X21haW5fcHRyIG1haW4gPSAobXlfbWFpbl9wdHIpIGNpbmZvLT5tYWluOworCisgIC8qIERvIG5vdGhpbmcgaW4gcmF3LWRhdGEgbW9kZS4gKi8KKyAgaWYgKGNpbmZvLT5yYXdfZGF0YV9pbikKKyAgICByZXR1cm47CisKKyAgbWFpbi0+Y3VyX2lNQ1Vfcm93ID0gMDsJLyogaW5pdGlhbGl6ZSBjb3VudGVycyAqLworICBtYWluLT5yb3dncm91cF9jdHIgPSAwOworICBtYWluLT5zdXNwZW5kZWQgPSBGQUxTRTsKKyAgbWFpbi0+cGFzc19tb2RlID0gcGFzc19tb2RlOwkvKiBzYXZlIG1vZGUgZm9yIHVzZSBieSBwcm9jZXNzX2RhdGEgKi8KKworICBzd2l0Y2ggKHBhc3NfbW9kZSkgeworICBjYXNlIEpCVUZfUEFTU19USFJVOgorI2lmZGVmIEZVTExfTUFJTl9CVUZGRVJfU1VQUE9SVEVECisgICAgaWYgKG1haW4tPndob2xlX2ltYWdlWzBdICE9IE5VTEwpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7CisjZW5kaWYKKyAgICBtYWluLT5wdWIucHJvY2Vzc19kYXRhID0gcHJvY2Vzc19kYXRhX3NpbXBsZV9tYWluOworICAgIGJyZWFrOworI2lmZGVmIEZVTExfTUFJTl9CVUZGRVJfU1VQUE9SVEVECisgIGNhc2UgSkJVRl9TQVZFX1NPVVJDRToKKyAgY2FzZSBKQlVGX0NSQU5LX0RFU1Q6CisgIGNhc2UgSkJVRl9TQVZFX0FORF9QQVNTOgorICAgIGlmIChtYWluLT53aG9sZV9pbWFnZVswXSA9PSBOVUxMKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOworICAgIG1haW4tPnB1Yi5wcm9jZXNzX2RhdGEgPSBwcm9jZXNzX2RhdGFfYnVmZmVyX21haW47CisgICAgYnJlYWs7CisjZW5kaWYKKyAgZGVmYXVsdDoKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7CisgICAgYnJlYWs7CisgIH0KK30KKworCisvKgorICogUHJvY2VzcyBzb21lIGRhdGEuCisgKiBUaGlzIHJvdXRpbmUgaGFuZGxlcyB0aGUgc2ltcGxlIHBhc3MtdGhyb3VnaCBtb2RlLAorICogd2hlcmUgd2UgaGF2ZSBvbmx5IGEgc3RyaXAgYnVmZmVyLgorICovCisKK01FVEhPRERFRih2b2lkKQorcHJvY2Vzc19kYXRhX3NpbXBsZV9tYWluIChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCSAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpESU1FTlNJT04gKmluX3Jvd19jdHIsCisJCQkgIEpESU1FTlNJT04gaW5fcm93c19hdmFpbCkKK3sKKyAgbXlfbWFpbl9wdHIgbWFpbiA9IChteV9tYWluX3B0cikgY2luZm8tPm1haW47CisKKyAgd2hpbGUgKG1haW4tPmN1cl9pTUNVX3JvdyA8IGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MpIHsKKyAgICAvKiBSZWFkIGlucHV0IGRhdGEgaWYgd2UgaGF2ZW4ndCBmaWxsZWQgdGhlIG1haW4gYnVmZmVyIHlldCAqLworICAgIGlmIChtYWluLT5yb3dncm91cF9jdHIgPCBEQ1RTSVpFKQorICAgICAgKCpjaW5mby0+cHJlcC0+cHJlX3Byb2Nlc3NfZGF0YSkgKGNpbmZvLAorCQkJCQlpbnB1dF9idWYsIGluX3Jvd19jdHIsIGluX3Jvd3NfYXZhaWwsCisJCQkJCW1haW4tPmJ1ZmZlciwgJm1haW4tPnJvd2dyb3VwX2N0ciwKKwkJCQkJKEpESU1FTlNJT04pIERDVFNJWkUpOworCisgICAgLyogSWYgd2UgZG9uJ3QgaGF2ZSBhIGZ1bGwgaU1DVSByb3cgYnVmZmVyZWQsIHJldHVybiB0byBhcHBsaWNhdGlvbiBmb3IKKyAgICAgKiBtb3JlIGRhdGEuICBOb3RlIHRoYXQgcHJlcHJvY2Vzc29yIHdpbGwgYWx3YXlzIHBhZCB0byBmaWxsIHRoZSBpTUNVIHJvdworICAgICAqIGF0IHRoZSBib3R0b20gb2YgdGhlIGltYWdlLgorICAgICAqLworICAgIGlmIChtYWluLT5yb3dncm91cF9jdHIgIT0gRENUU0laRSkKKyAgICAgIHJldHVybjsKKworICAgIC8qIFNlbmQgdGhlIGNvbXBsZXRlZCByb3cgdG8gdGhlIGNvbXByZXNzb3IgKi8KKyAgICBpZiAoISAoKmNpbmZvLT5jb2VmLT5jb21wcmVzc19kYXRhKSAoY2luZm8sIG1haW4tPmJ1ZmZlcikpIHsKKyAgICAgIC8qIElmIGNvbXByZXNzb3IgZGlkIG5vdCBjb25zdW1lIHRoZSB3aG9sZSByb3csIHRoZW4gd2UgbXVzdCBuZWVkIHRvCisgICAgICAgKiBzdXNwZW5kIHByb2Nlc3NpbmcgYW5kIHJldHVybiB0byB0aGUgYXBwbGljYXRpb24uICBJbiB0aGlzIHNpdHVhdGlvbgorICAgICAgICogd2UgcHJldGVuZCB3ZSBkaWRuJ3QgeWV0IGNvbnN1bWUgdGhlIGxhc3QgaW5wdXQgcm93OyBvdGhlcndpc2UsIGlmCisgICAgICAgKiBpdCBoYXBwZW5lZCB0byBiZSB0aGUgbGFzdCByb3cgb2YgdGhlIGltYWdlLCB0aGUgYXBwbGljYXRpb24gd291bGQKKyAgICAgICAqIHRoaW5rIHdlIHdlcmUgZG9uZS4KKyAgICAgICAqLworICAgICAgaWYgKCEgbWFpbi0+c3VzcGVuZGVkKSB7CisJKCppbl9yb3dfY3RyKS0tOworCW1haW4tPnN1c3BlbmRlZCA9IFRSVUU7CisgICAgICB9CisgICAgICByZXR1cm47CisgICAgfQorICAgIC8qIFdlIGRpZCBmaW5pc2ggdGhlIHJvdy4gIFVuZG8gb3VyIGxpdHRsZSBzdXNwZW5zaW9uIGhhY2sgaWYgYSBwcmV2aW91cworICAgICAqIGNhbGwgc3VzcGVuZGVkOyB0aGVuIG1hcmsgdGhlIG1haW4gYnVmZmVyIGVtcHR5LgorICAgICAqLworICAgIGlmIChtYWluLT5zdXNwZW5kZWQpIHsKKyAgICAgICgqaW5fcm93X2N0cikrKzsKKyAgICAgIG1haW4tPnN1c3BlbmRlZCA9IEZBTFNFOworICAgIH0KKyAgICBtYWluLT5yb3dncm91cF9jdHIgPSAwOworICAgIG1haW4tPmN1cl9pTUNVX3JvdysrOworICB9Cit9CisKKworI2lmZGVmIEZVTExfTUFJTl9CVUZGRVJfU1VQUE9SVEVECisKKy8qCisgKiBQcm9jZXNzIHNvbWUgZGF0YS4KKyAqIFRoaXMgcm91dGluZSBoYW5kbGVzIGFsbCBvZiB0aGUgbW9kZXMgdGhhdCB1c2UgYSBmdWxsLXNpemUgYnVmZmVyLgorICovCisKK01FVEhPRERFRih2b2lkKQorcHJvY2Vzc19kYXRhX2J1ZmZlcl9tYWluIChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCSAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpESU1FTlNJT04gKmluX3Jvd19jdHIsCisJCQkgIEpESU1FTlNJT04gaW5fcm93c19hdmFpbCkKK3sKKyAgbXlfbWFpbl9wdHIgbWFpbiA9IChteV9tYWluX3B0cikgY2luZm8tPm1haW47CisgIGludCBjaTsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKyAgYm9vbGVhbiB3cml0aW5nID0gKG1haW4tPnBhc3NfbW9kZSAhPSBKQlVGX0NSQU5LX0RFU1QpOworCisgIHdoaWxlIChtYWluLT5jdXJfaU1DVV9yb3cgPCBjaW5mby0+dG90YWxfaU1DVV9yb3dzKSB7CisgICAgLyogUmVhbGlnbiB0aGUgdmlydHVhbCBidWZmZXJzIGlmIGF0IHRoZSBzdGFydCBvZiBhbiBpTUNVIHJvdy4gKi8KKyAgICBpZiAobWFpbi0+cm93Z3JvdXBfY3RyID09IDApIHsKKyAgICAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisJICAgY2krKywgY29tcHB0cisrKSB7CisJbWFpbi0+YnVmZmVyW2NpXSA9ICgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfc2FycmF5KQorCSAgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBtYWluLT53aG9sZV9pbWFnZVtjaV0sCisJICAgbWFpbi0+Y3VyX2lNQ1Vfcm93ICogKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSwKKwkgICAoSkRJTUVOU0lPTikgKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSwgd3JpdGluZyk7CisgICAgICB9CisgICAgICAvKiBJbiBhIHJlYWQgcGFzcywgcHJldGVuZCB3ZSBqdXN0IHJlYWQgc29tZSBzb3VyY2UgZGF0YS4gKi8KKyAgICAgIGlmICghIHdyaXRpbmcpIHsKKwkqaW5fcm93X2N0ciArPSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFOworCW1haW4tPnJvd2dyb3VwX2N0ciA9IERDVFNJWkU7CisgICAgICB9CisgICAgfQorCisgICAgLyogSWYgYSB3cml0ZSBwYXNzLCByZWFkIGlucHV0IGRhdGEgdW50aWwgdGhlIGN1cnJlbnQgaU1DVSByb3cgaXMgZnVsbC4gKi8KKyAgICAvKiBOb3RlOiBwcmVwcm9jZXNzb3Igd2lsbCBwYWQgaWYgbmVjZXNzYXJ5IHRvIGZpbGwgdGhlIGxhc3QgaU1DVSByb3cuICovCisgICAgaWYgKHdyaXRpbmcpIHsKKyAgICAgICgqY2luZm8tPnByZXAtPnByZV9wcm9jZXNzX2RhdGEpIChjaW5mbywKKwkJCQkJaW5wdXRfYnVmLCBpbl9yb3dfY3RyLCBpbl9yb3dzX2F2YWlsLAorCQkJCQltYWluLT5idWZmZXIsICZtYWluLT5yb3dncm91cF9jdHIsCisJCQkJCShKRElNRU5TSU9OKSBEQ1RTSVpFKTsKKyAgICAgIC8qIFJldHVybiB0byBhcHBsaWNhdGlvbiBpZiB3ZSBuZWVkIG1vcmUgZGF0YSB0byBmaWxsIHRoZSBpTUNVIHJvdy4gKi8KKyAgICAgIGlmIChtYWluLT5yb3dncm91cF9jdHIgPCBEQ1RTSVpFKQorCXJldHVybjsKKyAgICB9CisKKyAgICAvKiBFbWl0IGRhdGEsIHVubGVzcyB0aGlzIGlzIGEgc2luay1vbmx5IHBhc3MuICovCisgICAgaWYgKG1haW4tPnBhc3NfbW9kZSAhPSBKQlVGX1NBVkVfU09VUkNFKSB7CisgICAgICBpZiAoISAoKmNpbmZvLT5jb2VmLT5jb21wcmVzc19kYXRhKSAoY2luZm8sIG1haW4tPmJ1ZmZlcikpIHsKKwkvKiBJZiBjb21wcmVzc29yIGRpZCBub3QgY29uc3VtZSB0aGUgd2hvbGUgcm93LCB0aGVuIHdlIG11c3QgbmVlZCB0bworCSAqIHN1c3BlbmQgcHJvY2Vzc2luZyBhbmQgcmV0dXJuIHRvIHRoZSBhcHBsaWNhdGlvbi4gIEluIHRoaXMgc2l0dWF0aW9uCisJICogd2UgcHJldGVuZCB3ZSBkaWRuJ3QgeWV0IGNvbnN1bWUgdGhlIGxhc3QgaW5wdXQgcm93OyBvdGhlcndpc2UsIGlmCisJICogaXQgaGFwcGVuZWQgdG8gYmUgdGhlIGxhc3Qgcm93IG9mIHRoZSBpbWFnZSwgdGhlIGFwcGxpY2F0aW9uIHdvdWxkCisJICogdGhpbmsgd2Ugd2VyZSBkb25lLgorCSAqLworCWlmICghIG1haW4tPnN1c3BlbmRlZCkgeworCSAgKCppbl9yb3dfY3RyKS0tOworCSAgbWFpbi0+c3VzcGVuZGVkID0gVFJVRTsKKwl9CisJcmV0dXJuOworICAgICAgfQorICAgICAgLyogV2UgZGlkIGZpbmlzaCB0aGUgcm93LiAgVW5kbyBvdXIgbGl0dGxlIHN1c3BlbnNpb24gaGFjayBpZiBhIHByZXZpb3VzCisgICAgICAgKiBjYWxsIHN1c3BlbmRlZDsgdGhlbiBtYXJrIHRoZSBtYWluIGJ1ZmZlciBlbXB0eS4KKyAgICAgICAqLworICAgICAgaWYgKG1haW4tPnN1c3BlbmRlZCkgeworCSgqaW5fcm93X2N0cikrKzsKKwltYWluLT5zdXNwZW5kZWQgPSBGQUxTRTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBJZiBnZXQgaGVyZSwgd2UgYXJlIGRvbmUgd2l0aCB0aGlzIGlNQ1Ugcm93LiAgTWFyayBidWZmZXIgZW1wdHkuICovCisgICAgbWFpbi0+cm93Z3JvdXBfY3RyID0gMDsKKyAgICBtYWluLT5jdXJfaU1DVV9yb3crKzsKKyAgfQorfQorCisjZW5kaWYgLyogRlVMTF9NQUlOX0JVRkZFUl9TVVBQT1JURUQgKi8KKworCisvKgorICogSW5pdGlhbGl6ZSBtYWluIGJ1ZmZlciBjb250cm9sbGVyLgorICovCisKK0dMT0JBTCh2b2lkKQoramluaXRfY19tYWluX2NvbnRyb2xsZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpCit7CisgIG15X21haW5fcHRyIG1haW47CisgIGludCBjaTsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKworICBtYWluID0gKG15X21haW5fcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJU0laRU9GKG15X21haW5fY29udHJvbGxlcikpOworICBjaW5mby0+bWFpbiA9IChzdHJ1Y3QganBlZ19jX21haW5fY29udHJvbGxlciAqKSBtYWluOworICBtYWluLT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfbWFpbjsKKworICAvKiBXZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBhIGJ1ZmZlciBpbiByYXctZGF0YSBtb2RlLiAqLworICBpZiAoY2luZm8tPnJhd19kYXRhX2luKQorICAgIHJldHVybjsKKworICAvKiBDcmVhdGUgdGhlIGJ1ZmZlci4gIEl0IGhvbGRzIGRvd25zYW1wbGVkIGRhdGEsIHNvIGVhY2ggY29tcG9uZW50CisgICAqIG1heSBiZSBvZiBhIGRpZmZlcmVudCBzaXplLgorICAgKi8KKyAgaWYgKG5lZWRfZnVsbF9idWZmZXIpIHsKKyNpZmRlZiBGVUxMX01BSU5fQlVGRkVSX1NVUFBPUlRFRAorICAgIC8qIEFsbG9jYXRlIGEgZnVsbC1pbWFnZSB2aXJ0dWFsIGFycmF5IGZvciBlYWNoIGNvbXBvbmVudCAqLworICAgIC8qIE5vdGUgd2UgcGFkIHRoZSBib3R0b20gdG8gYSBtdWx0aXBsZSBvZiB0aGUgaU1DVSBoZWlnaHQgKi8KKyAgICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOworCSBjaSsrLCBjb21wcHRyKyspIHsKKyAgICAgIG1haW4tPndob2xlX2ltYWdlW2NpXSA9ICgqY2luZm8tPm1lbS0+cmVxdWVzdF92aXJ0X3NhcnJheSkKKwkoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLCBGQUxTRSwKKwkgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRSwKKwkgKEpESU1FTlNJT04pIGpyb3VuZF91cCgobG9uZykgY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrcywKKwkJCQkobG9uZykgY29tcHB0ci0+dl9zYW1wX2ZhY3RvcikgKiBEQ1RTSVpFLAorCSAoSkRJTUVOU0lPTikgKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSk7CisgICAgfQorI2Vsc2UKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7CisjZW5kaWYKKyAgfSBlbHNlIHsKKyNpZmRlZiBGVUxMX01BSU5fQlVGRkVSX1NVUFBPUlRFRAorICAgIG1haW4tPndob2xlX2ltYWdlWzBdID0gTlVMTDsgLyogZmxhZyBmb3Igbm8gdmlydHVhbCBhcnJheXMgKi8KKyNlbmRpZgorICAgIC8qIEFsbG9jYXRlIGEgc3RyaXAgYnVmZmVyIGZvciBlYWNoIGNvbXBvbmVudCAqLworICAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisJIGNpKyssIGNvbXBwdHIrKykgeworICAgICAgbWFpbi0+YnVmZmVyW2NpXSA9ICgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQorCSgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkUsCisJIChKRElNRU5TSU9OKSAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsKKyAgICB9CisgIH0KK30KKworI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY21hcmtlci5jIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamNtYXJrZXIuYwppbmRleCBkMGE5ZTg3Li5mMWM4OWQ5IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY21hcmtlci5jCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pjbWFya2VyLmMKQEAgLTEsNjY3ICsxLDY2NyBAQAotI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykNCi0vKg0KLSAqIGpjbWFya2VyLmMNCi0gKg0KLSAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk4LCBUaG9tYXMgRy4gTGFuZS4NCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLg0KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4NCi0gKg0KLSAqIFRoaXMgZmlsZSBjb250YWlucyByb3V0aW5lcyB0byB3cml0ZSBKUEVHIGRhdGFzdHJlYW0gbWFya2Vycy4NCi0gKi8NCi0NCi0jZGVmaW5lIEpQRUdfSU5URVJOQUxTDQotI2luY2x1ZGUgImppbmNsdWRlLmgiDQotI2luY2x1ZGUgImpwZWdsaWIuaCINCi0NCi0NCi10eXBlZGVmIGVudW0gewkJCS8qIEpQRUcgbWFya2VyIGNvZGVzICovDQotICBNX1NPRjAgID0gMHhjMCwNCi0gIE1fU09GMSAgPSAweGMxLA0KLSAgTV9TT0YyICA9IDB4YzIsDQotICBNX1NPRjMgID0gMHhjMywNCi0gIA0KLSAgTV9TT0Y1ICA9IDB4YzUsDQotICBNX1NPRjYgID0gMHhjNiwNCi0gIE1fU09GNyAgPSAweGM3LA0KLSAgDQotICBNX0pQRyAgID0gMHhjOCwNCi0gIE1fU09GOSAgPSAweGM5LA0KLSAgTV9TT0YxMCA9IDB4Y2EsDQotICBNX1NPRjExID0gMHhjYiwNCi0gIA0KLSAgTV9TT0YxMyA9IDB4Y2QsDQotICBNX1NPRjE0ID0gMHhjZSwNCi0gIE1fU09GMTUgPSAweGNmLA0KLSAgDQotICBNX0RIVCAgID0gMHhjNCwNCi0gIA0KLSAgTV9EQUMgICA9IDB4Y2MsDQotICANCi0gIE1fUlNUMCAgPSAweGQwLA0KLSAgTV9SU1QxICA9IDB4ZDEsDQotICBNX1JTVDIgID0gMHhkMiwNCi0gIE1fUlNUMyAgPSAweGQzLA0KLSAgTV9SU1Q0ICA9IDB4ZDQsDQotICBNX1JTVDUgID0gMHhkNSwNCi0gIE1fUlNUNiAgPSAweGQ2LA0KLSAgTV9SU1Q3ICA9IDB4ZDcsDQotICANCi0gIE1fU09JICAgPSAweGQ4LA0KLSAgTV9FT0kgICA9IDB4ZDksDQotICBNX1NPUyAgID0gMHhkYSwNCi0gIE1fRFFUICAgPSAweGRiLA0KLSAgTV9ETkwgICA9IDB4ZGMsDQotICBNX0RSSSAgID0gMHhkZCwNCi0gIE1fREhQICAgPSAweGRlLA0KLSAgTV9FWFAgICA9IDB4ZGYsDQotICANCi0gIE1fQVBQMCAgPSAweGUwLA0KLSAgTV9BUFAxICA9IDB4ZTEsDQotICBNX0FQUDIgID0gMHhlMiwNCi0gIE1fQVBQMyAgPSAweGUzLA0KLSAgTV9BUFA0ICA9IDB4ZTQsDQotICBNX0FQUDUgID0gMHhlNSwNCi0gIE1fQVBQNiAgPSAweGU2LA0KLSAgTV9BUFA3ICA9IDB4ZTcsDQotICBNX0FQUDggID0gMHhlOCwNCi0gIE1fQVBQOSAgPSAweGU5LA0KLSAgTV9BUFAxMCA9IDB4ZWEsDQotICBNX0FQUDExID0gMHhlYiwNCi0gIE1fQVBQMTIgPSAweGVjLA0KLSAgTV9BUFAxMyA9IDB4ZWQsDQotICBNX0FQUDE0ID0gMHhlZSwNCi0gIE1fQVBQMTUgPSAweGVmLA0KLSAgDQotICBNX0pQRzAgID0gMHhmMCwNCi0gIE1fSlBHMTMgPSAweGZkLA0KLSAgTV9DT00gICA9IDB4ZmUsDQotICANCi0gIE1fVEVNICAgPSAweDAxLA0KLSAgDQotICBNX0VSUk9SID0gMHgxMDANCi19IEpQRUdfTUFSS0VSOw0KLQ0KLQ0KLS8qIFByaXZhdGUgc3RhdGUgKi8NCi0NCi10eXBlZGVmIHN0cnVjdCB7DQotICBzdHJ1Y3QganBlZ19tYXJrZXJfd3JpdGVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLw0KLQ0KLSAgdW5zaWduZWQgaW50IGxhc3RfcmVzdGFydF9pbnRlcnZhbDsgLyogbGFzdCBEUkkgdmFsdWUgZW1pdHRlZDsgMCBhZnRlciBTT0kgKi8NCi19IG15X21hcmtlcl93cml0ZXI7DQotDQotdHlwZWRlZiBteV9tYXJrZXJfd3JpdGVyICogbXlfbWFya2VyX3B0cjsNCi0NCi0NCi0vKg0KLSAqIEJhc2ljIG91dHB1dCByb3V0aW5lcy4NCi0gKg0KLSAqIE5vdGUgdGhhdCB3ZSBkbyBub3Qgc3VwcG9ydCBzdXNwZW5zaW9uIHdoaWxlIHdyaXRpbmcgYSBtYXJrZXIuDQotICogVGhlcmVmb3JlLCBhbiBhcHBsaWNhdGlvbiB1c2luZyBzdXNwZW5zaW9uIG11c3QgZW5zdXJlIHRoYXQgdGhlcmUgaXMNCi0gKiBlbm91Z2ggYnVmZmVyIHNwYWNlIGZvciB0aGUgaW5pdGlhbCBtYXJrZXJzICh0eXAuIDYwMC03MDAgYnl0ZXMpIGJlZm9yZQ0KLSAqIGNhbGxpbmcganBlZ19zdGFydF9jb21wcmVzcywgYW5kIGVub3VnaCBzcGFjZSB0byB3cml0ZSB0aGUgdHJhaWxpbmcgRU9JDQotICogKGEgZmV3IGJ5dGVzKSBiZWZvcmUgY2FsbGluZyBqcGVnX2ZpbmlzaF9jb21wcmVzcy4gIE11bHRpcGFzcyBjb21wcmVzc2lvbg0KLSAqIG1vZGVzIGFyZSBub3Qgc3VwcG9ydGVkIGF0IGFsbCB3aXRoIHN1c3BlbnNpb24sIHNvIHRob3NlIHR3byBhcmUgdGhlIG9ubHkNCi0gKiBwb2ludHMgd2hlcmUgbWFya2VycyB3aWxsIGJlIHdyaXR0ZW4uDQotICovDQotDQotTE9DQUwodm9pZCkNCi1lbWl0X2J5dGUgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgdmFsKQ0KLS8qIEVtaXQgYSBieXRlICovDQotew0KLSAgc3RydWN0IGpwZWdfZGVzdGluYXRpb25fbWdyICogZGVzdCA9IGNpbmZvLT5kZXN0Ow0KLQ0KLSAgKihkZXN0LT5uZXh0X291dHB1dF9ieXRlKSsrID0gKEpPQ1RFVCkgdmFsOw0KLSAgaWYgKC0tZGVzdC0+ZnJlZV9pbl9idWZmZXIgPT0gMCkgew0KLSAgICBpZiAoISAoKmRlc3QtPmVtcHR5X291dHB1dF9idWZmZXIpIChjaW5mbykpDQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DQU5UX1NVU1BFTkQpOw0KLSAgfQ0KLX0NCi0NCi0NCi1MT0NBTCh2b2lkKQ0KLWVtaXRfbWFya2VyIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSlBFR19NQVJLRVIgbWFyaykNCi0vKiBFbWl0IGEgbWFya2VyIGNvZGUgKi8NCi17DQotICBlbWl0X2J5dGUoY2luZm8sIDB4RkYpOw0KLSAgZW1pdF9ieXRlKGNpbmZvLCAoaW50KSBtYXJrKTsNCi19DQotDQotDQotTE9DQUwodm9pZCkNCi1lbWl0XzJieXRlcyAoal9jb21wcmVzc19wdHIgY2luZm8sIGludCB2YWx1ZSkNCi0vKiBFbWl0IGEgMi1ieXRlIGludGVnZXI7IHRoZXNlIGFyZSBhbHdheXMgTVNCIGZpcnN0IGluIEpQRUcgZmlsZXMgKi8NCi17DQotICBlbWl0X2J5dGUoY2luZm8sICh2YWx1ZSA+PiA4KSAmIDB4RkYpOw0KLSAgZW1pdF9ieXRlKGNpbmZvLCB2YWx1ZSAmIDB4RkYpOw0KLX0NCi0NCi0NCi0vKg0KLSAqIFJvdXRpbmVzIHRvIHdyaXRlIHNwZWNpZmljIG1hcmtlciB0eXBlcy4NCi0gKi8NCi0NCi1MT0NBTChpbnQpDQotZW1pdF9kcXQgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgaW5kZXgpDQotLyogRW1pdCBhIERRVCBtYXJrZXIgKi8NCi0vKiBSZXR1cm5zIHRoZSBwcmVjaXNpb24gdXNlZCAoMCA9IDhiaXRzLCAxID0gMTZiaXRzKSBmb3IgYmFzZWxpbmUgY2hlY2tpbmcgKi8NCi17DQotICBKUVVBTlRfVEJMICogcXRibCA9IGNpbmZvLT5xdWFudF90YmxfcHRyc1tpbmRleF07DQotICBpbnQgcHJlYzsNCi0gIGludCBpOw0KLQ0KLSAgaWYgKHF0YmwgPT0gTlVMTCkNCi0gICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fUVVBTlRfVEFCTEUsIGluZGV4KTsNCi0NCi0gIHByZWMgPSAwOw0KLSAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsNCi0gICAgaWYgKHF0YmwtPnF1YW50dmFsW2ldID4gMjU1KQ0KLSAgICAgIHByZWMgPSAxOw0KLSAgfQ0KLQ0KLSAgaWYgKCEgcXRibC0+c2VudF90YWJsZSkgew0KLSAgICBlbWl0X21hcmtlcihjaW5mbywgTV9EUVQpOw0KLQ0KLSAgICBlbWl0XzJieXRlcyhjaW5mbywgcHJlYyA/IERDVFNJWkUyKjIgKyAxICsgMiA6IERDVFNJWkUyICsgMSArIDIpOw0KLQ0KLSAgICBlbWl0X2J5dGUoY2luZm8sIGluZGV4ICsgKHByZWM8PDQpKTsNCi0NCi0gICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsNCi0gICAgICAvKiBUaGUgdGFibGUgZW50cmllcyBtdXN0IGJlIGVtaXR0ZWQgaW4gemlnemFnIG9yZGVyLiAqLw0KLSAgICAgIHVuc2lnbmVkIGludCBxdmFsID0gcXRibC0+cXVhbnR2YWxbanBlZ19uYXR1cmFsX29yZGVyW2ldXTsNCi0gICAgICBpZiAocHJlYykNCi0JZW1pdF9ieXRlKGNpbmZvLCAoaW50KSAocXZhbCA+PiA4KSk7DQotICAgICAgZW1pdF9ieXRlKGNpbmZvLCAoaW50KSAocXZhbCAmIDB4RkYpKTsNCi0gICAgfQ0KLQ0KLSAgICBxdGJsLT5zZW50X3RhYmxlID0gVFJVRTsNCi0gIH0NCi0NCi0gIHJldHVybiBwcmVjOw0KLX0NCi0NCi0NCi1MT0NBTCh2b2lkKQ0KLWVtaXRfZGh0IChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IGluZGV4LCBib29sZWFuIGlzX2FjKQ0KLS8qIEVtaXQgYSBESFQgbWFya2VyICovDQotew0KLSAgSkhVRkZfVEJMICogaHRibDsNCi0gIGludCBsZW5ndGgsIGk7DQotICANCi0gIGlmIChpc19hYykgew0KLSAgICBodGJsID0gY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbaW5kZXhdOw0KLSAgICBpbmRleCArPSAweDEwOwkJLyogb3V0cHV0IGluZGV4IGhhcyBBQyBiaXQgc2V0ICovDQotICB9IGVsc2Ugew0KLSAgICBodGJsID0gY2luZm8tPmRjX2h1ZmZfdGJsX3B0cnNbaW5kZXhdOw0KLSAgfQ0KLQ0KLSAgaWYgKGh0YmwgPT0gTlVMTCkNCi0gICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fSFVGRl9UQUJMRSwgaW5kZXgpOw0KLSAgDQotICBpZiAoISBodGJsLT5zZW50X3RhYmxlKSB7DQotICAgIGVtaXRfbWFya2VyKGNpbmZvLCBNX0RIVCk7DQotICAgIA0KLSAgICBsZW5ndGggPSAwOw0KLSAgICBmb3IgKGkgPSAxOyBpIDw9IDE2OyBpKyspDQotICAgICAgbGVuZ3RoICs9IGh0YmwtPmJpdHNbaV07DQotICAgIA0KLSAgICBlbWl0XzJieXRlcyhjaW5mbywgbGVuZ3RoICsgMiArIDEgKyAxNik7DQotICAgIGVtaXRfYnl0ZShjaW5mbywgaW5kZXgpOw0KLSAgICANCi0gICAgZm9yIChpID0gMTsgaSA8PSAxNjsgaSsrKQ0KLSAgICAgIGVtaXRfYnl0ZShjaW5mbywgaHRibC0+Yml0c1tpXSk7DQotICAgIA0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspDQotICAgICAgZW1pdF9ieXRlKGNpbmZvLCBodGJsLT5odWZmdmFsW2ldKTsNCi0gICAgDQotICAgIGh0YmwtPnNlbnRfdGFibGUgPSBUUlVFOw0KLSAgfQ0KLX0NCi0NCi0NCi1MT0NBTCh2b2lkKQ0KLWVtaXRfZGFjIChqX2NvbXByZXNzX3B0ciBjaW5mbykNCi0vKiBFbWl0IGEgREFDIG1hcmtlciAqLw0KLS8qIFNpbmNlIHRoZSB1c2VmdWwgaW5mbyBpcyBzbyBzbWFsbCwgd2Ugd2FudCB0byBlbWl0IGFsbCB0aGUgdGFibGVzIGluICovDQotLyogb25lIERBQyBtYXJrZXIuICBUaGVyZWZvcmUgdGhpcyByb3V0aW5lIGRvZXMgaXRzIG93biBzY2FuIG9mIHRoZSB0YWJsZS4gKi8NCi17DQotI2lmZGVmIENfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRA0KLSAgY2hhciBkY19pbl91c2VbTlVNX0FSSVRIX1RCTFNdOw0KLSAgY2hhciBhY19pbl91c2VbTlVNX0FSSVRIX1RCTFNdOw0KLSAgaW50IGxlbmd0aCwgaTsNCi0gIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7DQotICANCi0gIGZvciAoaSA9IDA7IGkgPCBOVU1fQVJJVEhfVEJMUzsgaSsrKQ0KLSAgICBkY19pbl91c2VbaV0gPSBhY19pbl91c2VbaV0gPSAwOw0KLSAgDQotICBmb3IgKGkgPSAwOyBpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGkrKykgew0KLSAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9baV07DQotICAgIGRjX2luX3VzZVtjb21wcHRyLT5kY190Ymxfbm9dID0gMTsNCi0gICAgYWNfaW5fdXNlW2NvbXBwdHItPmFjX3RibF9ub10gPSAxOw0KLSAgfQ0KLSAgDQotICBsZW5ndGggPSAwOw0KLSAgZm9yIChpID0gMDsgaSA8IE5VTV9BUklUSF9UQkxTOyBpKyspDQotICAgIGxlbmd0aCArPSBkY19pbl91c2VbaV0gKyBhY19pbl91c2VbaV07DQotICANCi0gIGVtaXRfbWFya2VyKGNpbmZvLCBNX0RBQyk7DQotICANCi0gIGVtaXRfMmJ5dGVzKGNpbmZvLCBsZW5ndGgqMiArIDIpOw0KLSAgDQotICBmb3IgKGkgPSAwOyBpIDwgTlVNX0FSSVRIX1RCTFM7IGkrKykgew0KLSAgICBpZiAoZGNfaW5fdXNlW2ldKSB7DQotICAgICAgZW1pdF9ieXRlKGNpbmZvLCBpKTsNCi0gICAgICBlbWl0X2J5dGUoY2luZm8sIGNpbmZvLT5hcml0aF9kY19MW2ldICsgKGNpbmZvLT5hcml0aF9kY19VW2ldPDw0KSk7DQotICAgIH0NCi0gICAgaWYgKGFjX2luX3VzZVtpXSkgew0KLSAgICAgIGVtaXRfYnl0ZShjaW5mbywgaSArIDB4MTApOw0KLSAgICAgIGVtaXRfYnl0ZShjaW5mbywgY2luZm8tPmFyaXRoX2FjX0tbaV0pOw0KLSAgICB9DQotICB9DQotI2VuZGlmIC8qIENfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRCAqLw0KLX0NCi0NCi0NCi1MT0NBTCh2b2lkKQ0KLWVtaXRfZHJpIChqX2NvbXByZXNzX3B0ciBjaW5mbykNCi0vKiBFbWl0IGEgRFJJIG1hcmtlciAqLw0KLXsNCi0gIGVtaXRfbWFya2VyKGNpbmZvLCBNX0RSSSk7DQotICANCi0gIGVtaXRfMmJ5dGVzKGNpbmZvLCA0KTsJLyogZml4ZWQgbGVuZ3RoICovDQotDQotICBlbWl0XzJieXRlcyhjaW5mbywgKGludCkgY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpOw0KLX0NCi0NCi0NCi1MT0NBTCh2b2lkKQ0KLWVtaXRfc29mIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSlBFR19NQVJLRVIgY29kZSkNCi0vKiBFbWl0IGEgU09GIG1hcmtlciAqLw0KLXsNCi0gIGludCBjaTsNCi0gIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7DQotICANCi0gIGVtaXRfbWFya2VyKGNpbmZvLCBjb2RlKTsNCi0gIA0KLSAgZW1pdF8yYnl0ZXMoY2luZm8sIDMgKiBjaW5mby0+bnVtX2NvbXBvbmVudHMgKyAyICsgNSArIDEpOyAvKiBsZW5ndGggKi8NCi0NCi0gIC8qIE1ha2Ugc3VyZSBpbWFnZSBpc24ndCBiaWdnZXIgdGhhbiBTT0YgZmllbGQgY2FuIGhhbmRsZSAqLw0KLSAgaWYgKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ID4gNjU1MzVMIHx8DQotICAgICAgKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCA+IDY1NTM1TCkNCi0gICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfSU1BR0VfVE9PX0JJRywgKHVuc2lnbmVkIGludCkgNjU1MzUpOw0KLQ0KLSAgZW1pdF9ieXRlKGNpbmZvLCBjaW5mby0+ZGF0YV9wcmVjaXNpb24pOw0KLSAgZW1pdF8yYnl0ZXMoY2luZm8sIChpbnQpIGNpbmZvLT5pbWFnZV9oZWlnaHQpOw0KLSAgZW1pdF8yYnl0ZXMoY2luZm8sIChpbnQpIGNpbmZvLT5pbWFnZV93aWR0aCk7DQotDQotICBlbWl0X2J5dGUoY2luZm8sIGNpbmZvLT5udW1fY29tcG9uZW50cyk7DQotDQotICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOw0KLSAgICAgICBjaSsrLCBjb21wcHRyKyspIHsNCi0gICAgZW1pdF9ieXRlKGNpbmZvLCBjb21wcHRyLT5jb21wb25lbnRfaWQpOw0KLSAgICBlbWl0X2J5dGUoY2luZm8sIChjb21wcHRyLT5oX3NhbXBfZmFjdG9yIDw8IDQpICsgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcik7DQotICAgIGVtaXRfYnl0ZShjaW5mbywgY29tcHB0ci0+cXVhbnRfdGJsX25vKTsNCi0gIH0NCi19DQotDQotDQotTE9DQUwodm9pZCkNCi1lbWl0X3NvcyAoal9jb21wcmVzc19wdHIgY2luZm8pDQotLyogRW1pdCBhIFNPUyBtYXJrZXIgKi8NCi17DQotICBpbnQgaSwgdGQsIHRhOw0KLSAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsNCi0gIA0KLSAgZW1pdF9tYXJrZXIoY2luZm8sIE1fU09TKTsNCi0gIA0KLSAgZW1pdF8yYnl0ZXMoY2luZm8sIDIgKiBjaW5mby0+Y29tcHNfaW5fc2NhbiArIDIgKyAxICsgMyk7IC8qIGxlbmd0aCAqLw0KLSAgDQotICBlbWl0X2J5dGUoY2luZm8sIGNpbmZvLT5jb21wc19pbl9zY2FuKTsNCi0gIA0KLSAgZm9yIChpID0gMDsgaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBpKyspIHsNCi0gICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2ldOw0KLSAgICBlbWl0X2J5dGUoY2luZm8sIGNvbXBwdHItPmNvbXBvbmVudF9pZCk7DQotICAgIHRkID0gY29tcHB0ci0+ZGNfdGJsX25vOw0KLSAgICB0YSA9IGNvbXBwdHItPmFjX3RibF9ubzsNCi0gICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKSB7DQotICAgICAgLyogUHJvZ3Jlc3NpdmUgbW9kZTogb25seSBEQyBvciBvbmx5IEFDIHRhYmxlcyBhcmUgdXNlZCBpbiBvbmUgc2NhbjsNCi0gICAgICAgKiBmdXJ0aGVybW9yZSwgSHVmZm1hbiBjb2Rpbmcgb2YgREMgcmVmaW5lbWVudCB1c2VzIG5vIHRhYmxlIGF0IGFsbC4NCi0gICAgICAgKiBXZSBlbWl0IDAgZm9yIHVudXNlZCBmaWVsZChzKTsgdGhpcyBpcyByZWNvbW1lbmRlZCBieSB0aGUgUCZNIHRleHQNCi0gICAgICAgKiBidXQgZG9lcyBub3Qgc2VlbSB0byBiZSBzcGVjaWZpZWQgaW4gdGhlIHN0YW5kYXJkLg0KLSAgICAgICAqLw0KLSAgICAgIGlmIChjaW5mby0+U3MgPT0gMCkgew0KLQl0YSA9IDA7CQkJLyogREMgc2NhbiAqLw0KLQlpZiAoY2luZm8tPkFoICE9IDAgJiYgIWNpbmZvLT5hcml0aF9jb2RlKQ0KLQkgIHRkID0gMDsJCS8qIG5vIERDIHRhYmxlIGVpdGhlciAqLw0KLSAgICAgIH0gZWxzZSB7DQotCXRkID0gMDsJCQkvKiBBQyBzY2FuICovDQotICAgICAgfQ0KLSAgICB9DQotICAgIGVtaXRfYnl0ZShjaW5mbywgKHRkIDw8IDQpICsgdGEpOw0KLSAgfQ0KLQ0KLSAgZW1pdF9ieXRlKGNpbmZvLCBjaW5mby0+U3MpOw0KLSAgZW1pdF9ieXRlKGNpbmZvLCBjaW5mby0+U2UpOw0KLSAgZW1pdF9ieXRlKGNpbmZvLCAoY2luZm8tPkFoIDw8IDQpICsgY2luZm8tPkFsKTsNCi19DQotDQotDQotTE9DQUwodm9pZCkNCi1lbWl0X2pmaWZfYXBwMCAoal9jb21wcmVzc19wdHIgY2luZm8pDQotLyogRW1pdCBhIEpGSUYtY29tcGxpYW50IEFQUDAgbWFya2VyICovDQotew0KLSAgLyoNCi0gICAqIExlbmd0aCBvZiBBUFAwIGJsb2NrCSgyIGJ5dGVzKQ0KLSAgICogQmxvY2sgSUQJCQkoNCBieXRlcyAtIEFTQ0lJICJKRklGIikNCi0gICAqIFplcm8gYnl0ZQkJCSgxIGJ5dGUgdG8gdGVybWluYXRlIHRoZSBJRCBzdHJpbmcpDQotICAgKiBWZXJzaW9uIE1ham9yLCBNaW5vcgkoMiBieXRlcyAtIG1ham9yIGZpcnN0KQ0KLSAgICogVW5pdHMJCQkoMSBieXRlIC0gMHgwMCA9IG5vbmUsIDB4MDEgPSBpbmNoLCAweDAyID0gY20pDQotICAgKiBYZHB1CQkJKDIgYnl0ZXMgLSBkb3RzIHBlciB1bml0IGhvcml6b250YWwpDQotICAgKiBZZHB1CQkJKDIgYnl0ZXMgLSBkb3RzIHBlciB1bml0IHZlcnRpY2FsKQ0KLSAgICogVGh1bWJuYWlsIFggc2l6ZQkJKDEgYnl0ZSkNCi0gICAqIFRodW1ibmFpbCBZIHNpemUJCSgxIGJ5dGUpDQotICAgKi8NCi0gIA0KLSAgZW1pdF9tYXJrZXIoY2luZm8sIE1fQVBQMCk7DQotICANCi0gIGVtaXRfMmJ5dGVzKGNpbmZvLCAyICsgNCArIDEgKyAyICsgMSArIDIgKyAyICsgMSArIDEpOyAvKiBsZW5ndGggKi8NCi0NCi0gIGVtaXRfYnl0ZShjaW5mbywgMHg0QSk7CS8qIElkZW50aWZpZXI6IEFTQ0lJICJKRklGIiAqLw0KLSAgZW1pdF9ieXRlKGNpbmZvLCAweDQ2KTsNCi0gIGVtaXRfYnl0ZShjaW5mbywgMHg0OSk7DQotICBlbWl0X2J5dGUoY2luZm8sIDB4NDYpOw0KLSAgZW1pdF9ieXRlKGNpbmZvLCAwKTsNCi0gIGVtaXRfYnl0ZShjaW5mbywgY2luZm8tPkpGSUZfbWFqb3JfdmVyc2lvbik7IC8qIFZlcnNpb24gZmllbGRzICovDQotICBlbWl0X2J5dGUoY2luZm8sIGNpbmZvLT5KRklGX21pbm9yX3ZlcnNpb24pOw0KLSAgZW1pdF9ieXRlKGNpbmZvLCBjaW5mby0+ZGVuc2l0eV91bml0KTsgLyogUGl4ZWwgc2l6ZSBpbmZvcm1hdGlvbiAqLw0KLSAgZW1pdF8yYnl0ZXMoY2luZm8sIChpbnQpIGNpbmZvLT5YX2RlbnNpdHkpOw0KLSAgZW1pdF8yYnl0ZXMoY2luZm8sIChpbnQpIGNpbmZvLT5ZX2RlbnNpdHkpOw0KLSAgZW1pdF9ieXRlKGNpbmZvLCAwKTsJCS8qIE5vIHRodW1ibmFpbCBpbWFnZSAqLw0KLSAgZW1pdF9ieXRlKGNpbmZvLCAwKTsNCi19DQotDQotDQotTE9DQUwodm9pZCkNCi1lbWl0X2Fkb2JlX2FwcDE0IChqX2NvbXByZXNzX3B0ciBjaW5mbykNCi0vKiBFbWl0IGFuIEFkb2JlIEFQUDE0IG1hcmtlciAqLw0KLXsNCi0gIC8qDQotICAgKiBMZW5ndGggb2YgQVBQMTQgYmxvY2sJKDIgYnl0ZXMpDQotICAgKiBCbG9jayBJRAkJCSg1IGJ5dGVzIC0gQVNDSUkgIkFkb2JlIikNCi0gICAqIFZlcnNpb24gTnVtYmVyCQkoMiBieXRlcyAtIGN1cnJlbnRseSAxMDApDQotICAgKiBGbGFnczAJCQkoMiBieXRlcyAtIGN1cnJlbnRseSAwKQ0KLSAgICogRmxhZ3MxCQkJKDIgYnl0ZXMgLSBjdXJyZW50bHkgMCkNCi0gICAqIENvbG9yIHRyYW5zZm9ybQkJKDEgYnl0ZSkNCi0gICAqDQotICAgKiBBbHRob3VnaCBBZG9iZSBUTiA1MTE2IG1lbnRpb25zIFZlcnNpb24gPSAxMDEsIGFsbCB0aGUgQWRvYmUgZmlsZXMNCi0gICAqIG5vdyBpbiBjaXJjdWxhdGlvbiBzZWVtIHRvIHVzZSBWZXJzaW9uID0gMTAwLCBzbyB0aGF0J3Mgd2hhdCB3ZSB3cml0ZS4NCi0gICAqDQotICAgKiBXZSB3cml0ZSB0aGUgY29sb3IgdHJhbnNmb3JtIGJ5dGUgYXMgMSBpZiB0aGUgSlBFRyBjb2xvciBzcGFjZSBpcw0KLSAgICogWUNiQ3IsIDIgaWYgaXQncyBZQ0NLLCAwIG90aGVyd2lzZS4gIEFkb2JlJ3MgZGVmaW5pdGlvbiBoYXMgdG8gZG8gd2l0aA0KLSAgICogd2hldGhlciB0aGUgZW5jb2RlciBwZXJmb3JtZWQgYSB0cmFuc2Zvcm1hdGlvbiwgd2hpY2ggaXMgcHJldHR5IHVzZWxlc3MuDQotICAgKi8NCi0gIA0KLSAgZW1pdF9tYXJrZXIoY2luZm8sIE1fQVBQMTQpOw0KLSAgDQotICBlbWl0XzJieXRlcyhjaW5mbywgMiArIDUgKyAyICsgMiArIDIgKyAxKTsgLyogbGVuZ3RoICovDQotDQotICBlbWl0X2J5dGUoY2luZm8sIDB4NDEpOwkvKiBJZGVudGlmaWVyOiBBU0NJSSAiQWRvYmUiICovDQotICBlbWl0X2J5dGUoY2luZm8sIDB4NjQpOw0KLSAgZW1pdF9ieXRlKGNpbmZvLCAweDZGKTsNCi0gIGVtaXRfYnl0ZShjaW5mbywgMHg2Mik7DQotICBlbWl0X2J5dGUoY2luZm8sIDB4NjUpOw0KLSAgZW1pdF8yYnl0ZXMoY2luZm8sIDEwMCk7CS8qIFZlcnNpb24gKi8NCi0gIGVtaXRfMmJ5dGVzKGNpbmZvLCAwKTsJLyogRmxhZ3MwICovDQotICBlbWl0XzJieXRlcyhjaW5mbywgMCk7CS8qIEZsYWdzMSAqLw0KLSAgc3dpdGNoIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSkgew0KLSAgY2FzZSBKQ1NfWUNiQ3I6DQotICAgIGVtaXRfYnl0ZShjaW5mbywgMSk7CS8qIENvbG9yIHRyYW5zZm9ybSA9IDEgKi8NCi0gICAgYnJlYWs7DQotICBjYXNlIEpDU19ZQ0NLOg0KLSAgICBlbWl0X2J5dGUoY2luZm8sIDIpOwkvKiBDb2xvciB0cmFuc2Zvcm0gPSAyICovDQotICAgIGJyZWFrOw0KLSAgZGVmYXVsdDoNCi0gICAgZW1pdF9ieXRlKGNpbmZvLCAwKTsJLyogQ29sb3IgdHJhbnNmb3JtID0gMCAqLw0KLSAgICBicmVhazsNCi0gIH0NCi19DQotDQotDQotLyoNCi0gKiBUaGVzZSByb3V0aW5lcyBhbGxvdyB3cml0aW5nIGFuIGFyYml0cmFyeSBtYXJrZXIgd2l0aCBwYXJhbWV0ZXJzLg0KLSAqIFRoZSBvbmx5IGludGVuZGVkIHVzZSBpcyB0byBlbWl0IENPTSBvciBBUFBuIG1hcmtlcnMgYWZ0ZXIgY2FsbGluZw0KLSAqIHdyaXRlX2ZpbGVfaGVhZGVyIGFuZCBiZWZvcmUgY2FsbGluZyB3cml0ZV9mcmFtZV9oZWFkZXIuDQotICogT3RoZXIgdXNlcyBhcmUgbm90IGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBkZXNpcmFibGUgcmVzdWx0cy4NCi0gKiBDb3VudGluZyB0aGUgcGFyYW1ldGVyIGJ5dGVzIHByb3Blcmx5IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eS4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi13cml0ZV9tYXJrZXJfaGVhZGVyIChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IG1hcmtlciwgdW5zaWduZWQgaW50IGRhdGFsZW4pDQotLyogRW1pdCBhbiBhcmJpdHJhcnkgbWFya2VyIGhlYWRlciAqLw0KLXsNCi0gIGlmIChkYXRhbGVuID4gKHVuc2lnbmVkIGludCkgNjU1MzMpCQkvKiBzYWZldHkgY2hlY2sgKi8NCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfTEVOR1RIKTsNCi0NCi0gIGVtaXRfbWFya2VyKGNpbmZvLCAoSlBFR19NQVJLRVIpIG1hcmtlcik7DQotDQotICBlbWl0XzJieXRlcyhjaW5mbywgKGludCkgKGRhdGFsZW4gKyAyKSk7CS8qIHRvdGFsIGxlbmd0aCAqLw0KLX0NCi0NCi1NRVRIT0RERUYodm9pZCkNCi13cml0ZV9tYXJrZXJfYnl0ZSAoal9jb21wcmVzc19wdHIgY2luZm8sIGludCB2YWwpDQotLyogRW1pdCBvbmUgYnl0ZSBvZiBtYXJrZXIgcGFyYW1ldGVycyBmb2xsb3dpbmcgd3JpdGVfbWFya2VyX2hlYWRlciAqLw0KLXsNCi0gIGVtaXRfYnl0ZShjaW5mbywgdmFsKTsNCi19DQotDQotDQotLyoNCi0gKiBXcml0ZSBkYXRhc3RyZWFtIGhlYWRlci4NCi0gKiBUaGlzIGNvbnNpc3RzIG9mIGFuIFNPSSBhbmQgb3B0aW9uYWwgQVBQbiBtYXJrZXJzLg0KLSAqIFdlIHJlY29tbWVuZCB1c2Ugb2YgdGhlIEpGSUYgbWFya2VyLCBidXQgbm90IHRoZSBBZG9iZSBtYXJrZXIsDQotICogd2hlbiB1c2luZyBZQ2JDciBvciBncmF5c2NhbGUgZGF0YS4gIFRoZSBKRklGIG1hcmtlciBzaG91bGQgTk9UDQotICogYmUgdXNlZCBmb3IgYW55IG90aGVyIEpQRUcgY29sb3JzcGFjZS4gIFRoZSBBZG9iZSBtYXJrZXIgaXMgaGVscGZ1bA0KLSAqIHRvIGRpc3Rpbmd1aXNoIFJHQiwgQ01ZSywgYW5kIFlDQ0sgY29sb3JzcGFjZXMuDQotICogTm90ZSB0aGF0IGFuIGFwcGxpY2F0aW9uIGNhbiB3cml0ZSBhZGRpdGlvbmFsIGhlYWRlciBtYXJrZXJzIGFmdGVyDQotICoganBlZ19zdGFydF9jb21wcmVzcyByZXR1cm5zLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXdyaXRlX2ZpbGVfaGVhZGVyIChqX2NvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBteV9tYXJrZXJfcHRyIG1hcmtlciA9IChteV9tYXJrZXJfcHRyKSBjaW5mby0+bWFya2VyOw0KLQ0KLSAgZW1pdF9tYXJrZXIoY2luZm8sIE1fU09JKTsJLyogZmlyc3QgdGhlIFNPSSAqLw0KLQ0KLSAgLyogU09JIGlzIGRlZmluZWQgdG8gcmVzZXQgcmVzdGFydCBpbnRlcnZhbCB0byAwICovDQotICBtYXJrZXItPmxhc3RfcmVzdGFydF9pbnRlcnZhbCA9IDA7DQotDQotICBpZiAoY2luZm8tPndyaXRlX0pGSUZfaGVhZGVyKQkvKiBuZXh0IGFuIG9wdGlvbmFsIEpGSUYgQVBQMCAqLw0KLSAgICBlbWl0X2pmaWZfYXBwMChjaW5mbyk7DQotICBpZiAoY2luZm8tPndyaXRlX0Fkb2JlX21hcmtlcikgLyogbmV4dCBhbiBvcHRpb25hbCBBZG9iZSBBUFAxNCAqLw0KLSAgICBlbWl0X2Fkb2JlX2FwcDE0KGNpbmZvKTsNCi19DQotDQotDQotLyoNCi0gKiBXcml0ZSBmcmFtZSBoZWFkZXIuDQotICogVGhpcyBjb25zaXN0cyBvZiBEUVQgYW5kIFNPRm4gbWFya2Vycy4NCi0gKiBOb3RlIHRoYXQgd2UgZG8gbm90IGVtaXQgdGhlIFNPRiB1bnRpbCB3ZSBoYXZlIGVtaXR0ZWQgdGhlIERRVChzKS4NCi0gKiBUaGlzIGF2b2lkcyBjb21wYXRpYmlsaXR5IHByb2JsZW1zIHdpdGggaW5jb3JyZWN0IGltcGxlbWVudGF0aW9ucyB0aGF0DQotICogdHJ5IHRvIGVycm9yLWNoZWNrIHRoZSBxdWFudCB0YWJsZSBudW1iZXJzIGFzIHNvb24gYXMgdGhleSBzZWUgdGhlIFNPRi4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi13cml0ZV9mcmFtZV9oZWFkZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIGludCBjaSwgcHJlYzsNCi0gIGJvb2xlYW4gaXNfYmFzZWxpbmU7DQotICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOw0KLSAgDQotICAvKiBFbWl0IERRVCBmb3IgZWFjaCBxdWFudGl6YXRpb24gdGFibGUuDQotICAgKiBOb3RlIHRoYXQgZW1pdF9kcXQoKSBzdXBwcmVzc2VzIGFueSBkdXBsaWNhdGUgdGFibGVzLg0KLSAgICovDQotICBwcmVjID0gMDsNCi0gIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7DQotICAgICAgIGNpKyssIGNvbXBwdHIrKykgew0KLSAgICBwcmVjICs9IGVtaXRfZHF0KGNpbmZvLCBjb21wcHRyLT5xdWFudF90Ymxfbm8pOw0KLSAgfQ0KLSAgLyogbm93IHByZWMgaXMgbm9uemVybyBpZmYgdGhlcmUgYXJlIGFueSAxNi1iaXQgcXVhbnQgdGFibGVzLiAqLw0KLQ0KLSAgLyogQ2hlY2sgZm9yIGEgbm9uLWJhc2VsaW5lIHNwZWNpZmljYXRpb24uDQotICAgKiBOb3RlIHdlIGFzc3VtZSB0aGF0IEh1ZmZtYW4gdGFibGUgbnVtYmVycyB3b24ndCBiZSBjaGFuZ2VkIGxhdGVyLg0KLSAgICovDQotICBpZiAoY2luZm8tPmFyaXRoX2NvZGUgfHwgY2luZm8tPnByb2dyZXNzaXZlX21vZGUgfHwNCi0gICAgICBjaW5mby0+ZGF0YV9wcmVjaXNpb24gIT0gOCkgew0KLSAgICBpc19iYXNlbGluZSA9IEZBTFNFOw0KLSAgfSBlbHNlIHsNCi0gICAgaXNfYmFzZWxpbmUgPSBUUlVFOw0KLSAgICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOw0KLQkgY2krKywgY29tcHB0cisrKSB7DQotICAgICAgaWYgKGNvbXBwdHItPmRjX3RibF9ubyA+IDEgfHwgY29tcHB0ci0+YWNfdGJsX25vID4gMSkNCi0JaXNfYmFzZWxpbmUgPSBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAocHJlYyAmJiBpc19iYXNlbGluZSkgew0KLSAgICAgIGlzX2Jhc2VsaW5lID0gRkFMU0U7DQotICAgICAgLyogSWYgaXQncyBiYXNlbGluZSBleGNlcHQgZm9yIHF1YW50aXplciBzaXplLCB3YXJuIHRoZSB1c2VyICovDQotICAgICAgVFJBQ0VNUyhjaW5mbywgMCwgSlRSQ18xNkJJVF9UQUJMRVMpOw0KLSAgICB9DQotICB9DQotDQotICAvKiBFbWl0IHRoZSBwcm9wZXIgU09GIG1hcmtlciAqLw0KLSAgaWYgKGNpbmZvLT5hcml0aF9jb2RlKSB7DQotICAgIGVtaXRfc29mKGNpbmZvLCBNX1NPRjkpOwkvKiBTT0YgY29kZSBmb3IgYXJpdGhtZXRpYyBjb2RpbmcgKi8NCi0gIH0gZWxzZSB7DQotICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkNCi0gICAgICBlbWl0X3NvZihjaW5mbywgTV9TT0YyKTsJLyogU09GIGNvZGUgZm9yIHByb2dyZXNzaXZlIEh1ZmZtYW4gKi8NCi0gICAgZWxzZSBpZiAoaXNfYmFzZWxpbmUpDQotICAgICAgZW1pdF9zb2YoY2luZm8sIE1fU09GMCk7CS8qIFNPRiBjb2RlIGZvciBiYXNlbGluZSBpbXBsZW1lbnRhdGlvbiAqLw0KLSAgICBlbHNlDQotICAgICAgZW1pdF9zb2YoY2luZm8sIE1fU09GMSk7CS8qIFNPRiBjb2RlIGZvciBub24tYmFzZWxpbmUgSHVmZm1hbiBmaWxlICovDQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogV3JpdGUgc2NhbiBoZWFkZXIuDQotICogVGhpcyBjb25zaXN0cyBvZiBESFQgb3IgREFDIG1hcmtlcnMsIG9wdGlvbmFsIERSSSwgYW5kIFNPUy4NCi0gKiBDb21wcmVzc2VkIGRhdGEgd2lsbCBiZSB3cml0dGVuIGZvbGxvd2luZyB0aGUgU09TLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXdyaXRlX3NjYW5faGVhZGVyIChqX2NvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBteV9tYXJrZXJfcHRyIG1hcmtlciA9IChteV9tYXJrZXJfcHRyKSBjaW5mby0+bWFya2VyOw0KLSAgaW50IGk7DQotICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOw0KLQ0KLSAgaWYgKGNpbmZvLT5hcml0aF9jb2RlKSB7DQotICAgIC8qIEVtaXQgYXJpdGggY29uZGl0aW9uaW5nIGluZm8uICBXZSBtYXkgaGF2ZSBzb21lIGR1cGxpY2F0aW9uDQotICAgICAqIGlmIHRoZSBmaWxlIGhhcyBtdWx0aXBsZSBzY2FucywgYnV0IGl0J3Mgc28gc21hbGwgaXQncyBoYXJkbHkNCi0gICAgICogd29ydGggd29ycnlpbmcgYWJvdXQuDQotICAgICAqLw0KLSAgICBlbWl0X2RhYyhjaW5mbyk7DQotICB9IGVsc2Ugew0KLSAgICAvKiBFbWl0IEh1ZmZtYW4gdGFibGVzLg0KLSAgICAgKiBOb3RlIHRoYXQgZW1pdF9kaHQoKSBzdXBwcmVzc2VzIGFueSBkdXBsaWNhdGUgdGFibGVzLg0KLSAgICAgKi8NCi0gICAgZm9yIChpID0gMDsgaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBpKyspIHsNCi0gICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9baV07DQotICAgICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKSB7DQotCS8qIFByb2dyZXNzaXZlIG1vZGU6IG9ubHkgREMgb3Igb25seSBBQyB0YWJsZXMgYXJlIHVzZWQgaW4gb25lIHNjYW4gKi8NCi0JaWYgKGNpbmZvLT5TcyA9PSAwKSB7DQotCSAgaWYgKGNpbmZvLT5BaCA9PSAwKQkvKiBEQyBuZWVkcyBubyB0YWJsZSBmb3IgcmVmaW5lbWVudCBzY2FuICovDQotCSAgICBlbWl0X2RodChjaW5mbywgY29tcHB0ci0+ZGNfdGJsX25vLCBGQUxTRSk7DQotCX0gZWxzZSB7DQotCSAgZW1pdF9kaHQoY2luZm8sIGNvbXBwdHItPmFjX3RibF9ubywgVFJVRSk7DQotCX0NCi0gICAgICB9IGVsc2Ugew0KLQkvKiBTZXF1ZW50aWFsIG1vZGU6IG5lZWQgYm90aCBEQyBhbmQgQUMgdGFibGVzICovDQotCWVtaXRfZGh0KGNpbmZvLCBjb21wcHRyLT5kY190Ymxfbm8sIEZBTFNFKTsNCi0JZW1pdF9kaHQoY2luZm8sIGNvbXBwdHItPmFjX3RibF9ubywgVFJVRSk7DQotICAgICAgfQ0KLSAgICB9DQotICB9DQotDQotICAvKiBFbWl0IERSSSBpZiByZXF1aXJlZCAtLS0gbm90ZSB0aGF0IERSSSB2YWx1ZSBjb3VsZCBjaGFuZ2UgZm9yIGVhY2ggc2Nhbi4NCi0gICAqIFdlIGF2b2lkIHdhc3Rpbmcgc3BhY2Ugd2l0aCB1bm5lY2Vzc2FyeSBEUklzLCBob3dldmVyLg0KLSAgICovDQotICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwgIT0gbWFya2VyLT5sYXN0X3Jlc3RhcnRfaW50ZXJ2YWwpIHsNCi0gICAgZW1pdF9kcmkoY2luZm8pOw0KLSAgICBtYXJrZXItPmxhc3RfcmVzdGFydF9pbnRlcnZhbCA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOw0KLSAgfQ0KLQ0KLSAgZW1pdF9zb3MoY2luZm8pOw0KLX0NCi0NCi0NCi0vKg0KLSAqIFdyaXRlIGRhdGFzdHJlYW0gdHJhaWxlci4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi13cml0ZV9maWxlX3RyYWlsZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIGVtaXRfbWFya2VyKGNpbmZvLCBNX0VPSSk7DQotfQ0KLQ0KLQ0KLS8qDQotICogV3JpdGUgYW4gYWJicmV2aWF0ZWQgdGFibGUtc3BlY2lmaWNhdGlvbiBkYXRhc3RyZWFtLg0KLSAqIFRoaXMgY29uc2lzdHMgb2YgU09JLCBEUVQgYW5kIERIVCB0YWJsZXMsIGFuZCBFT0kuDQotICogQW55IHRhYmxlIHRoYXQgaXMgZGVmaW5lZCBhbmQgbm90IG1hcmtlZCBzZW50X3RhYmxlID0gVFJVRSB3aWxsIGJlDQotICogZW1pdHRlZC4gIE5vdGUgdGhhdCBhbGwgdGFibGVzIHdpbGwgYmUgbWFya2VkIHNlbnRfdGFibGUgPSBUUlVFIGF0IGV4aXQuDQotICovDQotDQotTUVUSE9EREVGKHZvaWQpDQotd3JpdGVfdGFibGVzX29ubHkgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIGludCBpOw0KLQ0KLSAgZW1pdF9tYXJrZXIoY2luZm8sIE1fU09JKTsNCi0NCi0gIGZvciAoaSA9IDA7IGkgPCBOVU1fUVVBTlRfVEJMUzsgaSsrKSB7DQotICAgIGlmIChjaW5mby0+cXVhbnRfdGJsX3B0cnNbaV0gIT0gTlVMTCkNCi0gICAgICAodm9pZCkgZW1pdF9kcXQoY2luZm8sIGkpOw0KLSAgfQ0KLQ0KLSAgaWYgKCEgY2luZm8tPmFyaXRoX2NvZGUpIHsNCi0gICAgZm9yIChpID0gMDsgaSA8IE5VTV9IVUZGX1RCTFM7IGkrKykgew0KLSAgICAgIGlmIChjaW5mby0+ZGNfaHVmZl90YmxfcHRyc1tpXSAhPSBOVUxMKQ0KLQllbWl0X2RodChjaW5mbywgaSwgRkFMU0UpOw0KLSAgICAgIGlmIChjaW5mby0+YWNfaHVmZl90YmxfcHRyc1tpXSAhPSBOVUxMKQ0KLQllbWl0X2RodChjaW5mbywgaSwgVFJVRSk7DQotICAgIH0NCi0gIH0NCi0NCi0gIGVtaXRfbWFya2VyKGNpbmZvLCBNX0VPSSk7DQotfQ0KLQ0KLQ0KLS8qDQotICogSW5pdGlhbGl6ZSB0aGUgbWFya2VyIHdyaXRlciBtb2R1bGUuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotamluaXRfbWFya2VyX3dyaXRlciAoal9jb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAgbXlfbWFya2VyX3B0ciBtYXJrZXI7DQotDQotICAvKiBDcmVhdGUgdGhlIHN1Ym9iamVjdCAqLw0KLSAgbWFya2VyID0gKG15X21hcmtlcl9wdHIpDQotICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsDQotCQkJCVNJWkVPRihteV9tYXJrZXJfd3JpdGVyKSk7DQotICBjaW5mby0+bWFya2VyID0gKHN0cnVjdCBqcGVnX21hcmtlcl93cml0ZXIgKikgbWFya2VyOw0KLSAgLyogSW5pdGlhbGl6ZSBtZXRob2QgcG9pbnRlcnMgKi8NCi0gIG1hcmtlci0+cHViLndyaXRlX2ZpbGVfaGVhZGVyID0gd3JpdGVfZmlsZV9oZWFkZXI7DQotICBtYXJrZXItPnB1Yi53cml0ZV9mcmFtZV9oZWFkZXIgPSB3cml0ZV9mcmFtZV9oZWFkZXI7DQotICBtYXJrZXItPnB1Yi53cml0ZV9zY2FuX2hlYWRlciA9IHdyaXRlX3NjYW5faGVhZGVyOw0KLSAgbWFya2VyLT5wdWIud3JpdGVfZmlsZV90cmFpbGVyID0gd3JpdGVfZmlsZV90cmFpbGVyOw0KLSAgbWFya2VyLT5wdWIud3JpdGVfdGFibGVzX29ubHkgPSB3cml0ZV90YWJsZXNfb25seTsNCi0gIG1hcmtlci0+cHViLndyaXRlX21hcmtlcl9oZWFkZXIgPSB3cml0ZV9tYXJrZXJfaGVhZGVyOw0KLSAgbWFya2VyLT5wdWIud3JpdGVfbWFya2VyX2J5dGUgPSB3cml0ZV9tYXJrZXJfYnl0ZTsNCi0gIC8qIEluaXRpYWxpemUgcHJpdmF0ZSBzdGF0ZSAqLw0KLSAgbWFya2VyLT5sYXN0X3Jlc3RhcnRfaW50ZXJ2YWwgPSAwOw0KLX0NCi0NCi0jZW5kaWYgLy9fRlhfSlBFR19UVVJCT18NCisjaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQorLyoKKyAqIGpjbWFya2VyLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5OCwgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyByb3V0aW5lcyB0byB3cml0ZSBKUEVHIGRhdGFzdHJlYW0gbWFya2Vycy4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisKKwordHlwZWRlZiBlbnVtIHsJCQkvKiBKUEVHIG1hcmtlciBjb2RlcyAqLworICBNX1NPRjAgID0gMHhjMCwKKyAgTV9TT0YxICA9IDB4YzEsCisgIE1fU09GMiAgPSAweGMyLAorICBNX1NPRjMgID0gMHhjMywKKyAgCisgIE1fU09GNSAgPSAweGM1LAorICBNX1NPRjYgID0gMHhjNiwKKyAgTV9TT0Y3ICA9IDB4YzcsCisgIAorICBNX0pQRyAgID0gMHhjOCwKKyAgTV9TT0Y5ICA9IDB4YzksCisgIE1fU09GMTAgPSAweGNhLAorICBNX1NPRjExID0gMHhjYiwKKyAgCisgIE1fU09GMTMgPSAweGNkLAorICBNX1NPRjE0ID0gMHhjZSwKKyAgTV9TT0YxNSA9IDB4Y2YsCisgIAorICBNX0RIVCAgID0gMHhjNCwKKyAgCisgIE1fREFDICAgPSAweGNjLAorICAKKyAgTV9SU1QwICA9IDB4ZDAsCisgIE1fUlNUMSAgPSAweGQxLAorICBNX1JTVDIgID0gMHhkMiwKKyAgTV9SU1QzICA9IDB4ZDMsCisgIE1fUlNUNCAgPSAweGQ0LAorICBNX1JTVDUgID0gMHhkNSwKKyAgTV9SU1Q2ICA9IDB4ZDYsCisgIE1fUlNUNyAgPSAweGQ3LAorICAKKyAgTV9TT0kgICA9IDB4ZDgsCisgIE1fRU9JICAgPSAweGQ5LAorICBNX1NPUyAgID0gMHhkYSwKKyAgTV9EUVQgICA9IDB4ZGIsCisgIE1fRE5MICAgPSAweGRjLAorICBNX0RSSSAgID0gMHhkZCwKKyAgTV9ESFAgICA9IDB4ZGUsCisgIE1fRVhQICAgPSAweGRmLAorICAKKyAgTV9BUFAwICA9IDB4ZTAsCisgIE1fQVBQMSAgPSAweGUxLAorICBNX0FQUDIgID0gMHhlMiwKKyAgTV9BUFAzICA9IDB4ZTMsCisgIE1fQVBQNCAgPSAweGU0LAorICBNX0FQUDUgID0gMHhlNSwKKyAgTV9BUFA2ICA9IDB4ZTYsCisgIE1fQVBQNyAgPSAweGU3LAorICBNX0FQUDggID0gMHhlOCwKKyAgTV9BUFA5ICA9IDB4ZTksCisgIE1fQVBQMTAgPSAweGVhLAorICBNX0FQUDExID0gMHhlYiwKKyAgTV9BUFAxMiA9IDB4ZWMsCisgIE1fQVBQMTMgPSAweGVkLAorICBNX0FQUDE0ID0gMHhlZSwKKyAgTV9BUFAxNSA9IDB4ZWYsCisgIAorICBNX0pQRzAgID0gMHhmMCwKKyAgTV9KUEcxMyA9IDB4ZmQsCisgIE1fQ09NICAgPSAweGZlLAorICAKKyAgTV9URU0gICA9IDB4MDEsCisgIAorICBNX0VSUk9SID0gMHgxMDAKK30gSlBFR19NQVJLRVI7CisKKworLyogUHJpdmF0ZSBzdGF0ZSAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX21hcmtlcl93cml0ZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCisKKyAgdW5zaWduZWQgaW50IGxhc3RfcmVzdGFydF9pbnRlcnZhbDsgLyogbGFzdCBEUkkgdmFsdWUgZW1pdHRlZDsgMCBhZnRlciBTT0kgKi8KK30gbXlfbWFya2VyX3dyaXRlcjsKKwordHlwZWRlZiBteV9tYXJrZXJfd3JpdGVyICogbXlfbWFya2VyX3B0cjsKKworCisvKgorICogQmFzaWMgb3V0cHV0IHJvdXRpbmVzLgorICoKKyAqIE5vdGUgdGhhdCB3ZSBkbyBub3Qgc3VwcG9ydCBzdXNwZW5zaW9uIHdoaWxlIHdyaXRpbmcgYSBtYXJrZXIuCisgKiBUaGVyZWZvcmUsIGFuIGFwcGxpY2F0aW9uIHVzaW5nIHN1c3BlbnNpb24gbXVzdCBlbnN1cmUgdGhhdCB0aGVyZSBpcworICogZW5vdWdoIGJ1ZmZlciBzcGFjZSBmb3IgdGhlIGluaXRpYWwgbWFya2VycyAodHlwLiA2MDAtNzAwIGJ5dGVzKSBiZWZvcmUKKyAqIGNhbGxpbmcganBlZ19zdGFydF9jb21wcmVzcywgYW5kIGVub3VnaCBzcGFjZSB0byB3cml0ZSB0aGUgdHJhaWxpbmcgRU9JCisgKiAoYSBmZXcgYnl0ZXMpIGJlZm9yZSBjYWxsaW5nIGpwZWdfZmluaXNoX2NvbXByZXNzLiAgTXVsdGlwYXNzIGNvbXByZXNzaW9uCisgKiBtb2RlcyBhcmUgbm90IHN1cHBvcnRlZCBhdCBhbGwgd2l0aCBzdXNwZW5zaW9uLCBzbyB0aG9zZSB0d28gYXJlIHRoZSBvbmx5CisgKiBwb2ludHMgd2hlcmUgbWFya2VycyB3aWxsIGJlIHdyaXR0ZW4uCisgKi8KKworTE9DQUwodm9pZCkKK2VtaXRfYnl0ZSAoal9jb21wcmVzc19wdHIgY2luZm8sIGludCB2YWwpCisvKiBFbWl0IGEgYnl0ZSAqLworeworICBzdHJ1Y3QganBlZ19kZXN0aW5hdGlvbl9tZ3IgKiBkZXN0ID0gY2luZm8tPmRlc3Q7CisKKyAgKihkZXN0LT5uZXh0X291dHB1dF9ieXRlKSsrID0gKEpPQ1RFVCkgdmFsOworICBpZiAoLS1kZXN0LT5mcmVlX2luX2J1ZmZlciA9PSAwKSB7CisgICAgaWYgKCEgKCpkZXN0LT5lbXB0eV9vdXRwdXRfYnVmZmVyKSAoY2luZm8pKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DQU5UX1NVU1BFTkQpOworICB9Cit9CisKKworTE9DQUwodm9pZCkKK2VtaXRfbWFya2VyIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSlBFR19NQVJLRVIgbWFyaykKKy8qIEVtaXQgYSBtYXJrZXIgY29kZSAqLworeworICBlbWl0X2J5dGUoY2luZm8sIDB4RkYpOworICBlbWl0X2J5dGUoY2luZm8sIChpbnQpIG1hcmspOworfQorCisKK0xPQ0FMKHZvaWQpCitlbWl0XzJieXRlcyAoal9jb21wcmVzc19wdHIgY2luZm8sIGludCB2YWx1ZSkKKy8qIEVtaXQgYSAyLWJ5dGUgaW50ZWdlcjsgdGhlc2UgYXJlIGFsd2F5cyBNU0IgZmlyc3QgaW4gSlBFRyBmaWxlcyAqLworeworICBlbWl0X2J5dGUoY2luZm8sICh2YWx1ZSA+PiA4KSAmIDB4RkYpOworICBlbWl0X2J5dGUoY2luZm8sIHZhbHVlICYgMHhGRik7Cit9CisKKworLyoKKyAqIFJvdXRpbmVzIHRvIHdyaXRlIHNwZWNpZmljIG1hcmtlciB0eXBlcy4KKyAqLworCitMT0NBTChpbnQpCitlbWl0X2RxdCAoal9jb21wcmVzc19wdHIgY2luZm8sIGludCBpbmRleCkKKy8qIEVtaXQgYSBEUVQgbWFya2VyICovCisvKiBSZXR1cm5zIHRoZSBwcmVjaXNpb24gdXNlZCAoMCA9IDhiaXRzLCAxID0gMTZiaXRzKSBmb3IgYmFzZWxpbmUgY2hlY2tpbmcgKi8KK3sKKyAgSlFVQU5UX1RCTCAqIHF0YmwgPSBjaW5mby0+cXVhbnRfdGJsX3B0cnNbaW5kZXhdOworICBpbnQgcHJlYzsKKyAgaW50IGk7CisKKyAgaWYgKHF0YmwgPT0gTlVMTCkKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9OT19RVUFOVF9UQUJMRSwgaW5kZXgpOworCisgIHByZWMgPSAwOworICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykgeworICAgIGlmIChxdGJsLT5xdWFudHZhbFtpXSA+IDI1NSkKKyAgICAgIHByZWMgPSAxOworICB9CisKKyAgaWYgKCEgcXRibC0+c2VudF90YWJsZSkgeworICAgIGVtaXRfbWFya2VyKGNpbmZvLCBNX0RRVCk7CisKKyAgICBlbWl0XzJieXRlcyhjaW5mbywgcHJlYyA/IERDVFNJWkUyKjIgKyAxICsgMiA6IERDVFNJWkUyICsgMSArIDIpOworCisgICAgZW1pdF9ieXRlKGNpbmZvLCBpbmRleCArIChwcmVjPDw0KSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykgeworICAgICAgLyogVGhlIHRhYmxlIGVudHJpZXMgbXVzdCBiZSBlbWl0dGVkIGluIHppZ3phZyBvcmRlci4gKi8KKyAgICAgIHVuc2lnbmVkIGludCBxdmFsID0gcXRibC0+cXVhbnR2YWxbanBlZ19uYXR1cmFsX29yZGVyW2ldXTsKKyAgICAgIGlmIChwcmVjKQorCWVtaXRfYnl0ZShjaW5mbywgKGludCkgKHF2YWwgPj4gOCkpOworICAgICAgZW1pdF9ieXRlKGNpbmZvLCAoaW50KSAocXZhbCAmIDB4RkYpKTsKKyAgICB9CisKKyAgICBxdGJsLT5zZW50X3RhYmxlID0gVFJVRTsKKyAgfQorCisgIHJldHVybiBwcmVjOworfQorCisKK0xPQ0FMKHZvaWQpCitlbWl0X2RodCAoal9jb21wcmVzc19wdHIgY2luZm8sIGludCBpbmRleCwgYm9vbGVhbiBpc19hYykKKy8qIEVtaXQgYSBESFQgbWFya2VyICovCit7CisgIEpIVUZGX1RCTCAqIGh0Ymw7CisgIGludCBsZW5ndGgsIGk7CisgIAorICBpZiAoaXNfYWMpIHsKKyAgICBodGJsID0gY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbaW5kZXhdOworICAgIGluZGV4ICs9IDB4MTA7CQkvKiBvdXRwdXQgaW5kZXggaGFzIEFDIGJpdCBzZXQgKi8KKyAgfSBlbHNlIHsKKyAgICBodGJsID0gY2luZm8tPmRjX2h1ZmZfdGJsX3B0cnNbaW5kZXhdOworICB9CisKKyAgaWYgKGh0YmwgPT0gTlVMTCkKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9OT19IVUZGX1RBQkxFLCBpbmRleCk7CisgIAorICBpZiAoISBodGJsLT5zZW50X3RhYmxlKSB7CisgICAgZW1pdF9tYXJrZXIoY2luZm8sIE1fREhUKTsKKyAgICAKKyAgICBsZW5ndGggPSAwOworICAgIGZvciAoaSA9IDE7IGkgPD0gMTY7IGkrKykKKyAgICAgIGxlbmd0aCArPSBodGJsLT5iaXRzW2ldOworICAgIAorICAgIGVtaXRfMmJ5dGVzKGNpbmZvLCBsZW5ndGggKyAyICsgMSArIDE2KTsKKyAgICBlbWl0X2J5dGUoY2luZm8sIGluZGV4KTsKKyAgICAKKyAgICBmb3IgKGkgPSAxOyBpIDw9IDE2OyBpKyspCisgICAgICBlbWl0X2J5dGUoY2luZm8sIGh0YmwtPmJpdHNbaV0pOworICAgIAorICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKyAgICAgIGVtaXRfYnl0ZShjaW5mbywgaHRibC0+aHVmZnZhbFtpXSk7CisgICAgCisgICAgaHRibC0+c2VudF90YWJsZSA9IFRSVUU7CisgIH0KK30KKworCitMT0NBTCh2b2lkKQorZW1pdF9kYWMgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQorLyogRW1pdCBhIERBQyBtYXJrZXIgKi8KKy8qIFNpbmNlIHRoZSB1c2VmdWwgaW5mbyBpcyBzbyBzbWFsbCwgd2Ugd2FudCB0byBlbWl0IGFsbCB0aGUgdGFibGVzIGluICovCisvKiBvbmUgREFDIG1hcmtlci4gIFRoZXJlZm9yZSB0aGlzIHJvdXRpbmUgZG9lcyBpdHMgb3duIHNjYW4gb2YgdGhlIHRhYmxlLiAqLworeworI2lmZGVmIENfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRAorICBjaGFyIGRjX2luX3VzZVtOVU1fQVJJVEhfVEJMU107CisgIGNoYXIgYWNfaW5fdXNlW05VTV9BUklUSF9UQkxTXTsKKyAgaW50IGxlbmd0aCwgaTsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKyAgCisgIGZvciAoaSA9IDA7IGkgPCBOVU1fQVJJVEhfVEJMUzsgaSsrKQorICAgIGRjX2luX3VzZVtpXSA9IGFjX2luX3VzZVtpXSA9IDA7CisgIAorICBmb3IgKGkgPSAwOyBpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGkrKykgeworICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tpXTsKKyAgICBkY19pbl91c2VbY29tcHB0ci0+ZGNfdGJsX25vXSA9IDE7CisgICAgYWNfaW5fdXNlW2NvbXBwdHItPmFjX3RibF9ub10gPSAxOworICB9CisgIAorICBsZW5ndGggPSAwOworICBmb3IgKGkgPSAwOyBpIDwgTlVNX0FSSVRIX1RCTFM7IGkrKykKKyAgICBsZW5ndGggKz0gZGNfaW5fdXNlW2ldICsgYWNfaW5fdXNlW2ldOworICAKKyAgZW1pdF9tYXJrZXIoY2luZm8sIE1fREFDKTsKKyAgCisgIGVtaXRfMmJ5dGVzKGNpbmZvLCBsZW5ndGgqMiArIDIpOworICAKKyAgZm9yIChpID0gMDsgaSA8IE5VTV9BUklUSF9UQkxTOyBpKyspIHsKKyAgICBpZiAoZGNfaW5fdXNlW2ldKSB7CisgICAgICBlbWl0X2J5dGUoY2luZm8sIGkpOworICAgICAgZW1pdF9ieXRlKGNpbmZvLCBjaW5mby0+YXJpdGhfZGNfTFtpXSArIChjaW5mby0+YXJpdGhfZGNfVVtpXTw8NCkpOworICAgIH0KKyAgICBpZiAoYWNfaW5fdXNlW2ldKSB7CisgICAgICBlbWl0X2J5dGUoY2luZm8sIGkgKyAweDEwKTsKKyAgICAgIGVtaXRfYnl0ZShjaW5mbywgY2luZm8tPmFyaXRoX2FjX0tbaV0pOworICAgIH0KKyAgfQorI2VuZGlmIC8qIENfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRCAqLworfQorCisKK0xPQ0FMKHZvaWQpCitlbWl0X2RyaSAoal9jb21wcmVzc19wdHIgY2luZm8pCisvKiBFbWl0IGEgRFJJIG1hcmtlciAqLworeworICBlbWl0X21hcmtlcihjaW5mbywgTV9EUkkpOworICAKKyAgZW1pdF8yYnl0ZXMoY2luZm8sIDQpOwkvKiBmaXhlZCBsZW5ndGggKi8KKworICBlbWl0XzJieXRlcyhjaW5mbywgKGludCkgY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpOworfQorCisKK0xPQ0FMKHZvaWQpCitlbWl0X3NvZiAoal9jb21wcmVzc19wdHIgY2luZm8sIEpQRUdfTUFSS0VSIGNvZGUpCisvKiBFbWl0IGEgU09GIG1hcmtlciAqLworeworICBpbnQgY2k7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIAorICBlbWl0X21hcmtlcihjaW5mbywgY29kZSk7CisgIAorICBlbWl0XzJieXRlcyhjaW5mbywgMyAqIGNpbmZvLT5udW1fY29tcG9uZW50cyArIDIgKyA1ICsgMSk7IC8qIGxlbmd0aCAqLworCisgIC8qIE1ha2Ugc3VyZSBpbWFnZSBpc24ndCBiaWdnZXIgdGhhbiBTT0YgZmllbGQgY2FuIGhhbmRsZSAqLworICBpZiAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgPiA2NTUzNUwgfHwKKyAgICAgIChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggPiA2NTUzNUwpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfSU1BR0VfVE9PX0JJRywgKHVuc2lnbmVkIGludCkgNjU1MzUpOworCisgIGVtaXRfYnl0ZShjaW5mbywgY2luZm8tPmRhdGFfcHJlY2lzaW9uKTsKKyAgZW1pdF8yYnl0ZXMoY2luZm8sIChpbnQpIGNpbmZvLT5pbWFnZV9oZWlnaHQpOworICBlbWl0XzJieXRlcyhjaW5mbywgKGludCkgY2luZm8tPmltYWdlX3dpZHRoKTsKKworICBlbWl0X2J5dGUoY2luZm8sIGNpbmZvLT5udW1fY29tcG9uZW50cyk7CisKKyAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKKyAgICBlbWl0X2J5dGUoY2luZm8sIGNvbXBwdHItPmNvbXBvbmVudF9pZCk7CisgICAgZW1pdF9ieXRlKGNpbmZvLCAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciA8PCA0KSArIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpOworICAgIGVtaXRfYnl0ZShjaW5mbywgY29tcHB0ci0+cXVhbnRfdGJsX25vKTsKKyAgfQorfQorCisKK0xPQ0FMKHZvaWQpCitlbWl0X3NvcyAoal9jb21wcmVzc19wdHIgY2luZm8pCisvKiBFbWl0IGEgU09TIG1hcmtlciAqLworeworICBpbnQgaSwgdGQsIHRhOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworICAKKyAgZW1pdF9tYXJrZXIoY2luZm8sIE1fU09TKTsKKyAgCisgIGVtaXRfMmJ5dGVzKGNpbmZvLCAyICogY2luZm8tPmNvbXBzX2luX3NjYW4gKyAyICsgMSArIDMpOyAvKiBsZW5ndGggKi8KKyAgCisgIGVtaXRfYnl0ZShjaW5mbywgY2luZm8tPmNvbXBzX2luX3NjYW4pOworICAKKyAgZm9yIChpID0gMDsgaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBpKyspIHsKKyAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9baV07CisgICAgZW1pdF9ieXRlKGNpbmZvLCBjb21wcHRyLT5jb21wb25lbnRfaWQpOworICAgIHRkID0gY29tcHB0ci0+ZGNfdGJsX25vOworICAgIHRhID0gY29tcHB0ci0+YWNfdGJsX25vOworICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkgeworICAgICAgLyogUHJvZ3Jlc3NpdmUgbW9kZTogb25seSBEQyBvciBvbmx5IEFDIHRhYmxlcyBhcmUgdXNlZCBpbiBvbmUgc2NhbjsKKyAgICAgICAqIGZ1cnRoZXJtb3JlLCBIdWZmbWFuIGNvZGluZyBvZiBEQyByZWZpbmVtZW50IHVzZXMgbm8gdGFibGUgYXQgYWxsLgorICAgICAgICogV2UgZW1pdCAwIGZvciB1bnVzZWQgZmllbGQocyk7IHRoaXMgaXMgcmVjb21tZW5kZWQgYnkgdGhlIFAmTSB0ZXh0CisgICAgICAgKiBidXQgZG9lcyBub3Qgc2VlbSB0byBiZSBzcGVjaWZpZWQgaW4gdGhlIHN0YW5kYXJkLgorICAgICAgICovCisgICAgICBpZiAoY2luZm8tPlNzID09IDApIHsKKwl0YSA9IDA7CQkJLyogREMgc2NhbiAqLworCWlmIChjaW5mby0+QWggIT0gMCAmJiAhY2luZm8tPmFyaXRoX2NvZGUpCisJICB0ZCA9IDA7CQkvKiBubyBEQyB0YWJsZSBlaXRoZXIgKi8KKyAgICAgIH0gZWxzZSB7CisJdGQgPSAwOwkJCS8qIEFDIHNjYW4gKi8KKyAgICAgIH0KKyAgICB9CisgICAgZW1pdF9ieXRlKGNpbmZvLCAodGQgPDwgNCkgKyB0YSk7CisgIH0KKworICBlbWl0X2J5dGUoY2luZm8sIGNpbmZvLT5Tcyk7CisgIGVtaXRfYnl0ZShjaW5mbywgY2luZm8tPlNlKTsKKyAgZW1pdF9ieXRlKGNpbmZvLCAoY2luZm8tPkFoIDw8IDQpICsgY2luZm8tPkFsKTsKK30KKworCitMT0NBTCh2b2lkKQorZW1pdF9qZmlmX2FwcDAgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQorLyogRW1pdCBhIEpGSUYtY29tcGxpYW50IEFQUDAgbWFya2VyICovCit7CisgIC8qCisgICAqIExlbmd0aCBvZiBBUFAwIGJsb2NrCSgyIGJ5dGVzKQorICAgKiBCbG9jayBJRAkJCSg0IGJ5dGVzIC0gQVNDSUkgIkpGSUYiKQorICAgKiBaZXJvIGJ5dGUJCQkoMSBieXRlIHRvIHRlcm1pbmF0ZSB0aGUgSUQgc3RyaW5nKQorICAgKiBWZXJzaW9uIE1ham9yLCBNaW5vcgkoMiBieXRlcyAtIG1ham9yIGZpcnN0KQorICAgKiBVbml0cwkJCSgxIGJ5dGUgLSAweDAwID0gbm9uZSwgMHgwMSA9IGluY2gsIDB4MDIgPSBjbSkKKyAgICogWGRwdQkJCSgyIGJ5dGVzIC0gZG90cyBwZXIgdW5pdCBob3Jpem9udGFsKQorICAgKiBZZHB1CQkJKDIgYnl0ZXMgLSBkb3RzIHBlciB1bml0IHZlcnRpY2FsKQorICAgKiBUaHVtYm5haWwgWCBzaXplCQkoMSBieXRlKQorICAgKiBUaHVtYm5haWwgWSBzaXplCQkoMSBieXRlKQorICAgKi8KKyAgCisgIGVtaXRfbWFya2VyKGNpbmZvLCBNX0FQUDApOworICAKKyAgZW1pdF8yYnl0ZXMoY2luZm8sIDIgKyA0ICsgMSArIDIgKyAxICsgMiArIDIgKyAxICsgMSk7IC8qIGxlbmd0aCAqLworCisgIGVtaXRfYnl0ZShjaW5mbywgMHg0QSk7CS8qIElkZW50aWZpZXI6IEFTQ0lJICJKRklGIiAqLworICBlbWl0X2J5dGUoY2luZm8sIDB4NDYpOworICBlbWl0X2J5dGUoY2luZm8sIDB4NDkpOworICBlbWl0X2J5dGUoY2luZm8sIDB4NDYpOworICBlbWl0X2J5dGUoY2luZm8sIDApOworICBlbWl0X2J5dGUoY2luZm8sIGNpbmZvLT5KRklGX21ham9yX3ZlcnNpb24pOyAvKiBWZXJzaW9uIGZpZWxkcyAqLworICBlbWl0X2J5dGUoY2luZm8sIGNpbmZvLT5KRklGX21pbm9yX3ZlcnNpb24pOworICBlbWl0X2J5dGUoY2luZm8sIGNpbmZvLT5kZW5zaXR5X3VuaXQpOyAvKiBQaXhlbCBzaXplIGluZm9ybWF0aW9uICovCisgIGVtaXRfMmJ5dGVzKGNpbmZvLCAoaW50KSBjaW5mby0+WF9kZW5zaXR5KTsKKyAgZW1pdF8yYnl0ZXMoY2luZm8sIChpbnQpIGNpbmZvLT5ZX2RlbnNpdHkpOworICBlbWl0X2J5dGUoY2luZm8sIDApOwkJLyogTm8gdGh1bWJuYWlsIGltYWdlICovCisgIGVtaXRfYnl0ZShjaW5mbywgMCk7Cit9CisKKworTE9DQUwodm9pZCkKK2VtaXRfYWRvYmVfYXBwMTQgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQorLyogRW1pdCBhbiBBZG9iZSBBUFAxNCBtYXJrZXIgKi8KK3sKKyAgLyoKKyAgICogTGVuZ3RoIG9mIEFQUDE0IGJsb2NrCSgyIGJ5dGVzKQorICAgKiBCbG9jayBJRAkJCSg1IGJ5dGVzIC0gQVNDSUkgIkFkb2JlIikKKyAgICogVmVyc2lvbiBOdW1iZXIJCSgyIGJ5dGVzIC0gY3VycmVudGx5IDEwMCkKKyAgICogRmxhZ3MwCQkJKDIgYnl0ZXMgLSBjdXJyZW50bHkgMCkKKyAgICogRmxhZ3MxCQkJKDIgYnl0ZXMgLSBjdXJyZW50bHkgMCkKKyAgICogQ29sb3IgdHJhbnNmb3JtCQkoMSBieXRlKQorICAgKgorICAgKiBBbHRob3VnaCBBZG9iZSBUTiA1MTE2IG1lbnRpb25zIFZlcnNpb24gPSAxMDEsIGFsbCB0aGUgQWRvYmUgZmlsZXMKKyAgICogbm93IGluIGNpcmN1bGF0aW9uIHNlZW0gdG8gdXNlIFZlcnNpb24gPSAxMDAsIHNvIHRoYXQncyB3aGF0IHdlIHdyaXRlLgorICAgKgorICAgKiBXZSB3cml0ZSB0aGUgY29sb3IgdHJhbnNmb3JtIGJ5dGUgYXMgMSBpZiB0aGUgSlBFRyBjb2xvciBzcGFjZSBpcworICAgKiBZQ2JDciwgMiBpZiBpdCdzIFlDQ0ssIDAgb3RoZXJ3aXNlLiAgQWRvYmUncyBkZWZpbml0aW9uIGhhcyB0byBkbyB3aXRoCisgICAqIHdoZXRoZXIgdGhlIGVuY29kZXIgcGVyZm9ybWVkIGEgdHJhbnNmb3JtYXRpb24sIHdoaWNoIGlzIHByZXR0eSB1c2VsZXNzLgorICAgKi8KKyAgCisgIGVtaXRfbWFya2VyKGNpbmZvLCBNX0FQUDE0KTsKKyAgCisgIGVtaXRfMmJ5dGVzKGNpbmZvLCAyICsgNSArIDIgKyAyICsgMiArIDEpOyAvKiBsZW5ndGggKi8KKworICBlbWl0X2J5dGUoY2luZm8sIDB4NDEpOwkvKiBJZGVudGlmaWVyOiBBU0NJSSAiQWRvYmUiICovCisgIGVtaXRfYnl0ZShjaW5mbywgMHg2NCk7CisgIGVtaXRfYnl0ZShjaW5mbywgMHg2Rik7CisgIGVtaXRfYnl0ZShjaW5mbywgMHg2Mik7CisgIGVtaXRfYnl0ZShjaW5mbywgMHg2NSk7CisgIGVtaXRfMmJ5dGVzKGNpbmZvLCAxMDApOwkvKiBWZXJzaW9uICovCisgIGVtaXRfMmJ5dGVzKGNpbmZvLCAwKTsJLyogRmxhZ3MwICovCisgIGVtaXRfMmJ5dGVzKGNpbmZvLCAwKTsJLyogRmxhZ3MxICovCisgIHN3aXRjaCAoY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UpIHsKKyAgY2FzZSBKQ1NfWUNiQ3I6CisgICAgZW1pdF9ieXRlKGNpbmZvLCAxKTsJLyogQ29sb3IgdHJhbnNmb3JtID0gMSAqLworICAgIGJyZWFrOworICBjYXNlIEpDU19ZQ0NLOgorICAgIGVtaXRfYnl0ZShjaW5mbywgMik7CS8qIENvbG9yIHRyYW5zZm9ybSA9IDIgKi8KKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBlbWl0X2J5dGUoY2luZm8sIDApOwkvKiBDb2xvciB0cmFuc2Zvcm0gPSAwICovCisgICAgYnJlYWs7CisgIH0KK30KKworCisvKgorICogVGhlc2Ugcm91dGluZXMgYWxsb3cgd3JpdGluZyBhbiBhcmJpdHJhcnkgbWFya2VyIHdpdGggcGFyYW1ldGVycy4KKyAqIFRoZSBvbmx5IGludGVuZGVkIHVzZSBpcyB0byBlbWl0IENPTSBvciBBUFBuIG1hcmtlcnMgYWZ0ZXIgY2FsbGluZworICogd3JpdGVfZmlsZV9oZWFkZXIgYW5kIGJlZm9yZSBjYWxsaW5nIHdyaXRlX2ZyYW1lX2hlYWRlci4KKyAqIE90aGVyIHVzZXMgYXJlIG5vdCBndWFyYW50ZWVkIHRvIHByb2R1Y2UgZGVzaXJhYmxlIHJlc3VsdHMuCisgKiBDb3VudGluZyB0aGUgcGFyYW1ldGVyIGJ5dGVzIHByb3Blcmx5IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3dyaXRlX21hcmtlcl9oZWFkZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyLCB1bnNpZ25lZCBpbnQgZGF0YWxlbikKKy8qIEVtaXQgYW4gYXJiaXRyYXJ5IG1hcmtlciBoZWFkZXIgKi8KK3sKKyAgaWYgKGRhdGFsZW4gPiAodW5zaWduZWQgaW50KSA2NTUzMykJCS8qIHNhZmV0eSBjaGVjayAqLworICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0xFTkdUSCk7CisKKyAgZW1pdF9tYXJrZXIoY2luZm8sIChKUEVHX01BUktFUikgbWFya2VyKTsKKworICBlbWl0XzJieXRlcyhjaW5mbywgKGludCkgKGRhdGFsZW4gKyAyKSk7CS8qIHRvdGFsIGxlbmd0aCAqLworfQorCitNRVRIT0RERUYodm9pZCkKK3dyaXRlX21hcmtlcl9ieXRlIChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IHZhbCkKKy8qIEVtaXQgb25lIGJ5dGUgb2YgbWFya2VyIHBhcmFtZXRlcnMgZm9sbG93aW5nIHdyaXRlX21hcmtlcl9oZWFkZXIgKi8KK3sKKyAgZW1pdF9ieXRlKGNpbmZvLCB2YWwpOworfQorCisKKy8qCisgKiBXcml0ZSBkYXRhc3RyZWFtIGhlYWRlci4KKyAqIFRoaXMgY29uc2lzdHMgb2YgYW4gU09JIGFuZCBvcHRpb25hbCBBUFBuIG1hcmtlcnMuCisgKiBXZSByZWNvbW1lbmQgdXNlIG9mIHRoZSBKRklGIG1hcmtlciwgYnV0IG5vdCB0aGUgQWRvYmUgbWFya2VyLAorICogd2hlbiB1c2luZyBZQ2JDciBvciBncmF5c2NhbGUgZGF0YS4gIFRoZSBKRklGIG1hcmtlciBzaG91bGQgTk9UCisgKiBiZSB1c2VkIGZvciBhbnkgb3RoZXIgSlBFRyBjb2xvcnNwYWNlLiAgVGhlIEFkb2JlIG1hcmtlciBpcyBoZWxwZnVsCisgKiB0byBkaXN0aW5ndWlzaCBSR0IsIENNWUssIGFuZCBZQ0NLIGNvbG9yc3BhY2VzLgorICogTm90ZSB0aGF0IGFuIGFwcGxpY2F0aW9uIGNhbiB3cml0ZSBhZGRpdGlvbmFsIGhlYWRlciBtYXJrZXJzIGFmdGVyCisgKiBqcGVnX3N0YXJ0X2NvbXByZXNzIHJldHVybnMuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCit3cml0ZV9maWxlX2hlYWRlciAoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X21hcmtlcl9wdHIgbWFya2VyID0gKG15X21hcmtlcl9wdHIpIGNpbmZvLT5tYXJrZXI7CisKKyAgZW1pdF9tYXJrZXIoY2luZm8sIE1fU09JKTsJLyogZmlyc3QgdGhlIFNPSSAqLworCisgIC8qIFNPSSBpcyBkZWZpbmVkIHRvIHJlc2V0IHJlc3RhcnQgaW50ZXJ2YWwgdG8gMCAqLworICBtYXJrZXItPmxhc3RfcmVzdGFydF9pbnRlcnZhbCA9IDA7CisKKyAgaWYgKGNpbmZvLT53cml0ZV9KRklGX2hlYWRlcikJLyogbmV4dCBhbiBvcHRpb25hbCBKRklGIEFQUDAgKi8KKyAgICBlbWl0X2pmaWZfYXBwMChjaW5mbyk7CisgIGlmIChjaW5mby0+d3JpdGVfQWRvYmVfbWFya2VyKSAvKiBuZXh0IGFuIG9wdGlvbmFsIEFkb2JlIEFQUDE0ICovCisgICAgZW1pdF9hZG9iZV9hcHAxNChjaW5mbyk7Cit9CisKKworLyoKKyAqIFdyaXRlIGZyYW1lIGhlYWRlci4KKyAqIFRoaXMgY29uc2lzdHMgb2YgRFFUIGFuZCBTT0ZuIG1hcmtlcnMuCisgKiBOb3RlIHRoYXQgd2UgZG8gbm90IGVtaXQgdGhlIFNPRiB1bnRpbCB3ZSBoYXZlIGVtaXR0ZWQgdGhlIERRVChzKS4KKyAqIFRoaXMgYXZvaWRzIGNvbXBhdGliaWxpdHkgcHJvYmxlbXMgd2l0aCBpbmNvcnJlY3QgaW1wbGVtZW50YXRpb25zIHRoYXQKKyAqIHRyeSB0byBlcnJvci1jaGVjayB0aGUgcXVhbnQgdGFibGUgbnVtYmVycyBhcyBzb29uIGFzIHRoZXkgc2VlIHRoZSBTT0YuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCit3cml0ZV9mcmFtZV9oZWFkZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBpbnQgY2ksIHByZWM7CisgIGJvb2xlYW4gaXNfYmFzZWxpbmU7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIAorICAvKiBFbWl0IERRVCBmb3IgZWFjaCBxdWFudGl6YXRpb24gdGFibGUuCisgICAqIE5vdGUgdGhhdCBlbWl0X2RxdCgpIHN1cHByZXNzZXMgYW55IGR1cGxpY2F0ZSB0YWJsZXMuCisgICAqLworICBwcmVjID0gMDsKKyAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKKyAgICBwcmVjICs9IGVtaXRfZHF0KGNpbmZvLCBjb21wcHRyLT5xdWFudF90Ymxfbm8pOworICB9CisgIC8qIG5vdyBwcmVjIGlzIG5vbnplcm8gaWZmIHRoZXJlIGFyZSBhbnkgMTYtYml0IHF1YW50IHRhYmxlcy4gKi8KKworICAvKiBDaGVjayBmb3IgYSBub24tYmFzZWxpbmUgc3BlY2lmaWNhdGlvbi4KKyAgICogTm90ZSB3ZSBhc3N1bWUgdGhhdCBIdWZmbWFuIHRhYmxlIG51bWJlcnMgd29uJ3QgYmUgY2hhbmdlZCBsYXRlci4KKyAgICovCisgIGlmIChjaW5mby0+YXJpdGhfY29kZSB8fCBjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSB8fAorICAgICAgY2luZm8tPmRhdGFfcHJlY2lzaW9uICE9IDgpIHsKKyAgICBpc19iYXNlbGluZSA9IEZBTFNFOworICB9IGVsc2UgeworICAgIGlzX2Jhc2VsaW5lID0gVFJVRTsKKyAgICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOworCSBjaSsrLCBjb21wcHRyKyspIHsKKyAgICAgIGlmIChjb21wcHRyLT5kY190Ymxfbm8gPiAxIHx8IGNvbXBwdHItPmFjX3RibF9ubyA+IDEpCisJaXNfYmFzZWxpbmUgPSBGQUxTRTsKKyAgICB9CisgICAgaWYgKHByZWMgJiYgaXNfYmFzZWxpbmUpIHsKKyAgICAgIGlzX2Jhc2VsaW5lID0gRkFMU0U7CisgICAgICAvKiBJZiBpdCdzIGJhc2VsaW5lIGV4Y2VwdCBmb3IgcXVhbnRpemVyIHNpemUsIHdhcm4gdGhlIHVzZXIgKi8KKyAgICAgIFRSQUNFTVMoY2luZm8sIDAsIEpUUkNfMTZCSVRfVEFCTEVTKTsKKyAgICB9CisgIH0KKworICAvKiBFbWl0IHRoZSBwcm9wZXIgU09GIG1hcmtlciAqLworICBpZiAoY2luZm8tPmFyaXRoX2NvZGUpIHsKKyAgICBlbWl0X3NvZihjaW5mbywgTV9TT0Y5KTsJLyogU09GIGNvZGUgZm9yIGFyaXRobWV0aWMgY29kaW5nICovCisgIH0gZWxzZSB7CisgICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKQorICAgICAgZW1pdF9zb2YoY2luZm8sIE1fU09GMik7CS8qIFNPRiBjb2RlIGZvciBwcm9ncmVzc2l2ZSBIdWZmbWFuICovCisgICAgZWxzZSBpZiAoaXNfYmFzZWxpbmUpCisgICAgICBlbWl0X3NvZihjaW5mbywgTV9TT0YwKTsJLyogU09GIGNvZGUgZm9yIGJhc2VsaW5lIGltcGxlbWVudGF0aW9uICovCisgICAgZWxzZQorICAgICAgZW1pdF9zb2YoY2luZm8sIE1fU09GMSk7CS8qIFNPRiBjb2RlIGZvciBub24tYmFzZWxpbmUgSHVmZm1hbiBmaWxlICovCisgIH0KK30KKworCisvKgorICogV3JpdGUgc2NhbiBoZWFkZXIuCisgKiBUaGlzIGNvbnNpc3RzIG9mIERIVCBvciBEQUMgbWFya2Vycywgb3B0aW9uYWwgRFJJLCBhbmQgU09TLgorICogQ29tcHJlc3NlZCBkYXRhIHdpbGwgYmUgd3JpdHRlbiBmb2xsb3dpbmcgdGhlIFNPUy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3dyaXRlX3NjYW5faGVhZGVyIChqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfbWFya2VyX3B0ciBtYXJrZXIgPSAobXlfbWFya2VyX3B0cikgY2luZm8tPm1hcmtlcjsKKyAgaW50IGk7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisKKyAgaWYgKGNpbmZvLT5hcml0aF9jb2RlKSB7CisgICAgLyogRW1pdCBhcml0aCBjb25kaXRpb25pbmcgaW5mby4gIFdlIG1heSBoYXZlIHNvbWUgZHVwbGljYXRpb24KKyAgICAgKiBpZiB0aGUgZmlsZSBoYXMgbXVsdGlwbGUgc2NhbnMsIGJ1dCBpdCdzIHNvIHNtYWxsIGl0J3MgaGFyZGx5CisgICAgICogd29ydGggd29ycnlpbmcgYWJvdXQuCisgICAgICovCisgICAgZW1pdF9kYWMoY2luZm8pOworICB9IGVsc2UgeworICAgIC8qIEVtaXQgSHVmZm1hbiB0YWJsZXMuCisgICAgICogTm90ZSB0aGF0IGVtaXRfZGh0KCkgc3VwcHJlc3NlcyBhbnkgZHVwbGljYXRlIHRhYmxlcy4KKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGkrKykgeworICAgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2ldOworICAgICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKSB7CisJLyogUHJvZ3Jlc3NpdmUgbW9kZTogb25seSBEQyBvciBvbmx5IEFDIHRhYmxlcyBhcmUgdXNlZCBpbiBvbmUgc2NhbiAqLworCWlmIChjaW5mby0+U3MgPT0gMCkgeworCSAgaWYgKGNpbmZvLT5BaCA9PSAwKQkvKiBEQyBuZWVkcyBubyB0YWJsZSBmb3IgcmVmaW5lbWVudCBzY2FuICovCisJICAgIGVtaXRfZGh0KGNpbmZvLCBjb21wcHRyLT5kY190Ymxfbm8sIEZBTFNFKTsKKwl9IGVsc2UgeworCSAgZW1pdF9kaHQoY2luZm8sIGNvbXBwdHItPmFjX3RibF9ubywgVFJVRSk7CisJfQorICAgICAgfSBlbHNlIHsKKwkvKiBTZXF1ZW50aWFsIG1vZGU6IG5lZWQgYm90aCBEQyBhbmQgQUMgdGFibGVzICovCisJZW1pdF9kaHQoY2luZm8sIGNvbXBwdHItPmRjX3RibF9ubywgRkFMU0UpOworCWVtaXRfZGh0KGNpbmZvLCBjb21wcHRyLT5hY190Ymxfbm8sIFRSVUUpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIC8qIEVtaXQgRFJJIGlmIHJlcXVpcmVkIC0tLSBub3RlIHRoYXQgRFJJIHZhbHVlIGNvdWxkIGNoYW5nZSBmb3IgZWFjaCBzY2FuLgorICAgKiBXZSBhdm9pZCB3YXN0aW5nIHNwYWNlIHdpdGggdW5uZWNlc3NhcnkgRFJJcywgaG93ZXZlci4KKyAgICovCisgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCAhPSBtYXJrZXItPmxhc3RfcmVzdGFydF9pbnRlcnZhbCkgeworICAgIGVtaXRfZHJpKGNpbmZvKTsKKyAgICBtYXJrZXItPmxhc3RfcmVzdGFydF9pbnRlcnZhbCA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOworICB9CisKKyAgZW1pdF9zb3MoY2luZm8pOworfQorCisKKy8qCisgKiBXcml0ZSBkYXRhc3RyZWFtIHRyYWlsZXIuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCit3cml0ZV9maWxlX3RyYWlsZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBlbWl0X21hcmtlcihjaW5mbywgTV9FT0kpOworfQorCisKKy8qCisgKiBXcml0ZSBhbiBhYmJyZXZpYXRlZCB0YWJsZS1zcGVjaWZpY2F0aW9uIGRhdGFzdHJlYW0uCisgKiBUaGlzIGNvbnNpc3RzIG9mIFNPSSwgRFFUIGFuZCBESFQgdGFibGVzLCBhbmQgRU9JLgorICogQW55IHRhYmxlIHRoYXQgaXMgZGVmaW5lZCBhbmQgbm90IG1hcmtlZCBzZW50X3RhYmxlID0gVFJVRSB3aWxsIGJlCisgKiBlbWl0dGVkLiAgTm90ZSB0aGF0IGFsbCB0YWJsZXMgd2lsbCBiZSBtYXJrZWQgc2VudF90YWJsZSA9IFRSVUUgYXQgZXhpdC4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3dyaXRlX3RhYmxlc19vbmx5IChqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgaW50IGk7CisKKyAgZW1pdF9tYXJrZXIoY2luZm8sIE1fU09JKTsKKworICBmb3IgKGkgPSAwOyBpIDwgTlVNX1FVQU5UX1RCTFM7IGkrKykgeworICAgIGlmIChjaW5mby0+cXVhbnRfdGJsX3B0cnNbaV0gIT0gTlVMTCkKKyAgICAgICh2b2lkKSBlbWl0X2RxdChjaW5mbywgaSk7CisgIH0KKworICBpZiAoISBjaW5mby0+YXJpdGhfY29kZSkgeworICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fSFVGRl9UQkxTOyBpKyspIHsKKyAgICAgIGlmIChjaW5mby0+ZGNfaHVmZl90YmxfcHRyc1tpXSAhPSBOVUxMKQorCWVtaXRfZGh0KGNpbmZvLCBpLCBGQUxTRSk7CisgICAgICBpZiAoY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbaV0gIT0gTlVMTCkKKwllbWl0X2RodChjaW5mbywgaSwgVFJVRSk7CisgICAgfQorICB9CisKKyAgZW1pdF9tYXJrZXIoY2luZm8sIE1fRU9JKTsKK30KKworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgbWFya2VyIHdyaXRlciBtb2R1bGUuCisgKi8KKworR0xPQkFMKHZvaWQpCitqaW5pdF9tYXJrZXJfd3JpdGVyIChqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfbWFya2VyX3B0ciBtYXJrZXI7CisKKyAgLyogQ3JlYXRlIHRoZSBzdWJvYmplY3QgKi8KKyAgbWFya2VyID0gKG15X21hcmtlcl9wdHIpCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkJCQlTSVpFT0YobXlfbWFya2VyX3dyaXRlcikpOworICBjaW5mby0+bWFya2VyID0gKHN0cnVjdCBqcGVnX21hcmtlcl93cml0ZXIgKikgbWFya2VyOworICAvKiBJbml0aWFsaXplIG1ldGhvZCBwb2ludGVycyAqLworICBtYXJrZXItPnB1Yi53cml0ZV9maWxlX2hlYWRlciA9IHdyaXRlX2ZpbGVfaGVhZGVyOworICBtYXJrZXItPnB1Yi53cml0ZV9mcmFtZV9oZWFkZXIgPSB3cml0ZV9mcmFtZV9oZWFkZXI7CisgIG1hcmtlci0+cHViLndyaXRlX3NjYW5faGVhZGVyID0gd3JpdGVfc2Nhbl9oZWFkZXI7CisgIG1hcmtlci0+cHViLndyaXRlX2ZpbGVfdHJhaWxlciA9IHdyaXRlX2ZpbGVfdHJhaWxlcjsKKyAgbWFya2VyLT5wdWIud3JpdGVfdGFibGVzX29ubHkgPSB3cml0ZV90YWJsZXNfb25seTsKKyAgbWFya2VyLT5wdWIud3JpdGVfbWFya2VyX2hlYWRlciA9IHdyaXRlX21hcmtlcl9oZWFkZXI7CisgIG1hcmtlci0+cHViLndyaXRlX21hcmtlcl9ieXRlID0gd3JpdGVfbWFya2VyX2J5dGU7CisgIC8qIEluaXRpYWxpemUgcHJpdmF0ZSBzdGF0ZSAqLworICBtYXJrZXItPmxhc3RfcmVzdGFydF9pbnRlcnZhbCA9IDA7Cit9CisKKyNlbmRpZiAvL19GWF9KUEVHX1RVUkJPXwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamNtYXN0ZXIuYyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pjbWFzdGVyLmMKaW5kZXggODcwZjc3NS4uNDUzMjJhNSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamNtYXN0ZXIuYworKysgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY21hc3Rlci5jCkBAIC0xLDU5MyArMSw1OTMgQEAKLSNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pDQotLyoNCi0gKiBqY21hc3Rlci5jDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4NCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuDQotICoNCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgbWFzdGVyIGNvbnRyb2wgbG9naWMgZm9yIHRoZSBKUEVHIGNvbXByZXNzb3IuDQotICogVGhlc2Ugcm91dGluZXMgYXJlIGNvbmNlcm5lZCB3aXRoIHBhcmFtZXRlciB2YWxpZGF0aW9uLCBpbml0aWFsIHNldHVwLA0KLSAqIGFuZCBpbnRlci1wYXNzIGNvbnRyb2wgKGRldGVybWluaW5nIHRoZSBudW1iZXIgb2YgcGFzc2VzIGFuZCB0aGUgd29yayANCi0gKiB0byBiZSBkb25lIGluIGVhY2ggcGFzcykuDQotICovDQotDQotI2RlZmluZSBKUEVHX0lOVEVSTkFMUw0KLSNpbmNsdWRlICJqaW5jbHVkZS5oIg0KLSNpbmNsdWRlICJqcGVnbGliLmgiDQotDQotDQotLyogUHJpdmF0ZSBzdGF0ZSAqLw0KLQ0KLXR5cGVkZWYgZW51bSB7DQotCW1haW5fcGFzcywJCS8qIGlucHV0IGRhdGEsIGFsc28gZG8gZmlyc3Qgb3V0cHV0IHN0ZXAgKi8NCi0JaHVmZl9vcHRfcGFzcywJCS8qIEh1ZmZtYW4gY29kZSBvcHRpbWl6YXRpb24gcGFzcyAqLw0KLQlvdXRwdXRfcGFzcwkJLyogZGF0YSBvdXRwdXQgcGFzcyAqLw0KLX0gY19wYXNzX3R5cGU7DQotDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgc3RydWN0IGpwZWdfY29tcF9tYXN0ZXIgcHViOwkvKiBwdWJsaWMgZmllbGRzICovDQotDQotICBjX3Bhc3NfdHlwZSBwYXNzX3R5cGU7CS8qIHRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IHBhc3MgKi8NCi0NCi0gIGludCBwYXNzX251bWJlcjsJCS8qICMgb2YgcGFzc2VzIGNvbXBsZXRlZCAqLw0KLSAgaW50IHRvdGFsX3Bhc3NlczsJCS8qIHRvdGFsICMgb2YgcGFzc2VzIG5lZWRlZCAqLw0KLQ0KLSAgaW50IHNjYW5fbnVtYmVyOwkJLyogY3VycmVudCBpbmRleCBpbiBzY2FuX2luZm9bXSAqLw0KLX0gbXlfY29tcF9tYXN0ZXI7DQotDQotdHlwZWRlZiBteV9jb21wX21hc3RlciAqIG15X21hc3Rlcl9wdHI7DQotDQotDQotLyoNCi0gKiBTdXBwb3J0IHJvdXRpbmVzIHRoYXQgZG8gdmFyaW91cyBlc3NlbnRpYWwgY2FsY3VsYXRpb25zLg0KLSAqLw0KLQ0KLUxPQ0FMKHZvaWQpDQotaW5pdGlhbF9zZXR1cCAoal9jb21wcmVzc19wdHIgY2luZm8pDQotLyogRG8gY29tcHV0YXRpb25zIHRoYXQgYXJlIG5lZWRlZCBiZWZvcmUgbWFzdGVyIHNlbGVjdGlvbiBwaGFzZSAqLw0KLXsNCi0gIGludCBjaTsNCi0gIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7DQotICBsb25nIHNhbXBsZXNwZXJyb3c7DQotICBKRElNRU5TSU9OIGpkX3NhbXBsZXNwZXJyb3c7DQotDQotICAvKiBTYW5pdHkgY2hlY2sgb24gaW1hZ2UgZGltZW5zaW9ucyAqLw0KLSAgaWYgKGNpbmZvLT5pbWFnZV9oZWlnaHQgPD0gMCB8fCBjaW5mby0+aW1hZ2Vfd2lkdGggPD0gMA0KLSAgICAgIHx8IGNpbmZvLT5udW1fY29tcG9uZW50cyA8PSAwIHx8IGNpbmZvLT5pbnB1dF9jb21wb25lbnRzIDw9IDApDQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfRU1QVFlfSU1BR0UpOw0KLQ0KLSAgLyogTWFrZSBzdXJlIGltYWdlIGlzbid0IGJpZ2dlciB0aGFuIEkgY2FuIGhhbmRsZSAqLw0KLSAgaWYgKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ID4gKGxvbmcpIEpQRUdfTUFYX0RJTUVOU0lPTiB8fA0KLSAgICAgIChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggPiAobG9uZykgSlBFR19NQVhfRElNRU5TSU9OKQ0KLSAgICBFUlJFWElUMShjaW5mbywgSkVSUl9JTUFHRV9UT09fQklHLCAodW5zaWduZWQgaW50KSBKUEVHX01BWF9ESU1FTlNJT04pOw0KLQ0KLSAgLyogV2lkdGggb2YgYW4gaW5wdXQgc2NhbmxpbmUgbXVzdCBiZSByZXByZXNlbnRhYmxlIGFzIEpESU1FTlNJT04uICovDQotICBzYW1wbGVzcGVycm93ID0gKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqIChsb25nKSBjaW5mby0+aW5wdXRfY29tcG9uZW50czsNCi0gIGpkX3NhbXBsZXNwZXJyb3cgPSAoSkRJTUVOU0lPTikgc2FtcGxlc3BlcnJvdzsNCi0gIGlmICgobG9uZykgamRfc2FtcGxlc3BlcnJvdyAhPSBzYW1wbGVzcGVycm93KQ0KLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1dJRFRIX09WRVJGTE9XKTsNCi0NCi0gIC8qIEZvciBub3csIHByZWNpc2lvbiBtdXN0IG1hdGNoIGNvbXBpbGVkLWluIHZhbHVlLi4uICovDQotICBpZiAoY2luZm8tPmRhdGFfcHJlY2lzaW9uICE9IEJJVFNfSU5fSlNBTVBMRSkNCi0gICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BSRUNJU0lPTiwgY2luZm8tPmRhdGFfcHJlY2lzaW9uKTsNCi0NCi0gIC8qIENoZWNrIHRoYXQgbnVtYmVyIG9mIGNvbXBvbmVudHMgd29uJ3QgZXhjZWVkIGludGVybmFsIGFycmF5IHNpemVzICovDQotICBpZiAoY2luZm8tPm51bV9jb21wb25lbnRzID4gTUFYX0NPTVBPTkVOVFMpDQotICAgIEVSUkVYSVQyKGNpbmZvLCBKRVJSX0NPTVBPTkVOVF9DT1VOVCwgY2luZm8tPm51bV9jb21wb25lbnRzLA0KLQkgICAgIE1BWF9DT01QT05FTlRTKTsNCi0NCi0gIC8qIENvbXB1dGUgbWF4aW11bSBzYW1wbGluZyBmYWN0b3JzOyBjaGVjayBmYWN0b3IgdmFsaWRpdHkgKi8NCi0gIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciA9IDE7DQotICBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgPSAxOw0KLSAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsNCi0gICAgICAgY2krKywgY29tcHB0cisrKSB7DQotICAgIGlmIChjb21wcHRyLT5oX3NhbXBfZmFjdG9yPD0wIHx8IGNvbXBwdHItPmhfc2FtcF9mYWN0b3I+TUFYX1NBTVBfRkFDVE9SIHx8DQotCWNvbXBwdHItPnZfc2FtcF9mYWN0b3I8PTAgfHwgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcj5NQVhfU0FNUF9GQUNUT1IpDQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfU0FNUExJTkcpOw0KLSAgICBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgPSBNQVgoY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yLA0KLQkJCQkgICBjb21wcHRyLT5oX3NhbXBfZmFjdG9yKTsNCi0gICAgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yID0gTUFYKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwNCi0JCQkJICAgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcik7DQotICB9DQotDQotICAvKiBDb21wdXRlIGRpbWVuc2lvbnMgb2YgY29tcG9uZW50cyAqLw0KLSAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsNCi0gICAgICAgY2krKywgY29tcHB0cisrKSB7DQotICAgIC8qIEZpbGwgaW4gdGhlIGNvcnJlY3QgY29tcG9uZW50X2luZGV4IHZhbHVlOyBkb24ndCByZWx5IG9uIGFwcGxpY2F0aW9uICovDQotICAgIGNvbXBwdHItPmNvbXBvbmVudF9pbmRleCA9IGNpOw0KLSAgICAvKiBGb3IgY29tcHJlc3Npb24sIHdlIG5ldmVyIGRvIERDVCBzY2FsaW5nLiAqLw0KLSAgICBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemUgPSBEQ1RTSVpFOw0KLSAgICAvKiBTaXplIGluIERDVCBibG9ja3MgKi8NCi0gICAgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzID0gKEpESU1FTlNJT04pDQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICogKGxvbmcpIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IsDQotCQkgICAgKGxvbmcpIChjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSk7DQotICAgIGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3MgPSAoSkRJTUVOU0lPTikNCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogKGxvbmcpIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsDQotCQkgICAgKGxvbmcpIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSk7DQotICAgIC8qIFNpemUgaW4gc2FtcGxlcyAqLw0KLSAgICBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCA9IChKRElNRU5TSU9OKQ0KLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqIChsb25nKSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yLA0KLQkJICAgIChsb25nKSBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IpOw0KLSAgICBjb21wcHRyLT5kb3duc2FtcGxlZF9oZWlnaHQgPSAoSkRJTUVOU0lPTikNCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogKGxvbmcpIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsDQotCQkgICAgKGxvbmcpIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcik7DQotICAgIC8qIE1hcmsgY29tcG9uZW50IG5lZWRlZCAodGhpcyBmbGFnIGlzbid0IGFjdHVhbGx5IHVzZWQgZm9yIGNvbXByZXNzaW9uKSAqLw0KLSAgICBjb21wcHRyLT5jb21wb25lbnRfbmVlZGVkID0gVFJVRTsNCi0gIH0NCi0NCi0gIC8qIENvbXB1dGUgbnVtYmVyIG9mIGZ1bGx5IGludGVybGVhdmVkIE1DVSByb3dzIChudW1iZXIgb2YgdGltZXMgdGhhdA0KLSAgICogbWFpbiBjb250cm9sbGVyIHdpbGwgY2FsbCBjb2VmZmljaWVudCBjb250cm9sbGVyKS4NCi0gICAqLw0KLSAgY2luZm8tPnRvdGFsX2lNQ1Vfcm93cyA9IChKRElNRU5TSU9OKQ0KLSAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0LA0KLQkJICAobG9uZykgKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcipEQ1RTSVpFKSk7DQotfQ0KLQ0KLQ0KLSNpZmRlZiBDX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQNCi0NCi1MT0NBTCh2b2lkKQ0KLXZhbGlkYXRlX3NjcmlwdCAoal9jb21wcmVzc19wdHIgY2luZm8pDQotLyogVmVyaWZ5IHRoYXQgdGhlIHNjYW4gc2NyaXB0IGluIGNpbmZvLT5zY2FuX2luZm9bXSBpcyB2YWxpZDsgYWxzbw0KLSAqIGRldGVybWluZSB3aGV0aGVyIGl0IHVzZXMgcHJvZ3Jlc3NpdmUgSlBFRywgYW5kIHNldCBjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZS4NCi0gKi8NCi17DQotICBjb25zdCBqcGVnX3NjYW5faW5mbyAqIHNjYW5wdHI7DQotICBpbnQgc2Nhbm5vLCBuY29tcHMsIGNpLCBjb2VmaSwgdGhpc2k7DQotICBpbnQgU3MsIFNlLCBBaCwgQWw7DQotICBib29sZWFuIGNvbXBvbmVudF9zZW50W01BWF9DT01QT05FTlRTXTsNCi0jaWZkZWYgQ19QUk9HUkVTU0lWRV9TVVBQT1JURUQNCi0gIGludCAqIGxhc3RfYml0cG9zX3B0cjsNCi0gIGludCBsYXN0X2JpdHBvc1tNQVhfQ09NUE9ORU5UU11bRENUU0laRTJdOw0KLSAgLyogLTEgdW50aWwgdGhhdCBjb2VmZmljaWVudCBoYXMgYmVlbiBzZWVuOyB0aGVuIGxhc3QgQWwgZm9yIGl0ICovDQotI2VuZGlmDQotDQotICBpZiAoY2luZm8tPm51bV9zY2FucyA8PSAwKQ0KLSAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU0NBTl9TQ1JJUFQsIDApOw0KLQ0KLSAgLyogRm9yIHNlcXVlbnRpYWwgSlBFRywgYWxsIHNjYW5zIG11c3QgaGF2ZSBTcz0wLCBTZT1EQ1RTSVpFMi0xOw0KLSAgICogZm9yIHByb2dyZXNzaXZlIEpQRUcsIG5vIHNjYW4gY2FuIGhhdmUgdGhpcy4NCi0gICAqLw0KLSAgc2NhbnB0ciA9IGNpbmZvLT5zY2FuX2luZm87DQotICBpZiAoc2NhbnB0ci0+U3MgIT0gMCB8fCBzY2FucHRyLT5TZSAhPSBEQ1RTSVpFMi0xKSB7DQotI2lmZGVmIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVEDQotICAgIGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlID0gVFJVRTsNCi0gICAgbGFzdF9iaXRwb3NfcHRyID0gJiBsYXN0X2JpdHBvc1swXVswXTsNCi0gICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKSANCi0gICAgICBmb3IgKGNvZWZpID0gMDsgY29lZmkgPCBEQ1RTSVpFMjsgY29lZmkrKykNCi0JKmxhc3RfYml0cG9zX3B0cisrID0gLTE7DQotI2Vsc2UNCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOw0KLSNlbmRpZg0KLSAgfSBlbHNlIHsNCi0gICAgY2luZm8tPnByb2dyZXNzaXZlX21vZGUgPSBGQUxTRTsNCi0gICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKSANCi0gICAgICBjb21wb25lbnRfc2VudFtjaV0gPSBGQUxTRTsNCi0gIH0NCi0NCi0gIGZvciAoc2Nhbm5vID0gMTsgc2Nhbm5vIDw9IGNpbmZvLT5udW1fc2NhbnM7IHNjYW5wdHIrKywgc2Nhbm5vKyspIHsNCi0gICAgLyogVmFsaWRhdGUgY29tcG9uZW50IGluZGV4ZXMgKi8NCi0gICAgbmNvbXBzID0gc2NhbnB0ci0+Y29tcHNfaW5fc2NhbjsNCi0gICAgaWYgKG5jb21wcyA8PSAwIHx8IG5jb21wcyA+IE1BWF9DT01QU19JTl9TQ0FOKQ0KLSAgICAgIEVSUkVYSVQyKGNpbmZvLCBKRVJSX0NPTVBPTkVOVF9DT1VOVCwgbmNvbXBzLCBNQVhfQ09NUFNfSU5fU0NBTik7DQotICAgIGZvciAoY2kgPSAwOyBjaSA8IG5jb21wczsgY2krKykgew0KLSAgICAgIHRoaXNpID0gc2NhbnB0ci0+Y29tcG9uZW50X2luZGV4W2NpXTsNCi0gICAgICBpZiAodGhpc2kgPCAwIHx8IHRoaXNpID49IGNpbmZvLT5udW1fY29tcG9uZW50cykNCi0JRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NDQU5fU0NSSVBULCBzY2Fubm8pOw0KLSAgICAgIC8qIENvbXBvbmVudHMgbXVzdCBhcHBlYXIgaW4gU09GIG9yZGVyIHdpdGhpbiBlYWNoIHNjYW4gKi8NCi0gICAgICBpZiAoY2kgPiAwICYmIHRoaXNpIDw9IHNjYW5wdHItPmNvbXBvbmVudF9pbmRleFtjaS0xXSkNCi0JRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NDQU5fU0NSSVBULCBzY2Fubm8pOw0KLSAgICB9DQotICAgIC8qIFZhbGlkYXRlIHByb2dyZXNzaW9uIHBhcmFtZXRlcnMgKi8NCi0gICAgU3MgPSBzY2FucHRyLT5TczsNCi0gICAgU2UgPSBzY2FucHRyLT5TZTsNCi0gICAgQWggPSBzY2FucHRyLT5BaDsNCi0gICAgQWwgPSBzY2FucHRyLT5BbDsNCi0gICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKSB7DQotI2lmZGVmIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVEDQotICAgICAgLyogVGhlIEpQRUcgc3BlYyBzaW1wbHkgZ2l2ZXMgdGhlIHJhbmdlcyAwLi4xMyBmb3IgQWggYW5kIEFsLCBidXQgdGhhdA0KLSAgICAgICAqIHNlZW1zIHdyb25nOiB0aGUgdXBwZXIgYm91bmQgb3VnaHQgdG8gZGVwZW5kIG9uIGRhdGEgcHJlY2lzaW9uLg0KLSAgICAgICAqIFBlcmhhcHMgdGhleSByZWFsbHkgbWVhbnQgMC4uTisxIGZvciBOLWJpdCBwcmVjaXNpb24uDQotICAgICAgICogSGVyZSB3ZSBhbGxvdyAwLi4xMCBmb3IgOC1iaXQgZGF0YTsgQWwgbGFyZ2VyIHRoYW4gMTAgcmVzdWx0cyBpbg0KLSAgICAgICAqIG91dC1vZi1yYW5nZSByZWNvbnN0cnVjdGVkIERDIHZhbHVlcyBkdXJpbmcgdGhlIGZpcnN0IERDIHNjYW4sDQotICAgICAgICogd2hpY2ggbWlnaHQgY2F1c2UgcHJvYmxlbXMgZm9yIHNvbWUgZGVjb2RlcnMuDQotICAgICAgICovDQotI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4DQotI2RlZmluZSBNQVhfQUhfQUwgMTANCi0jZWxzZQ0KLSNkZWZpbmUgTUFYX0FIX0FMIDEzDQotI2VuZGlmDQotICAgICAgaWYgKFNzIDwgMCB8fCBTcyA+PSBEQ1RTSVpFMiB8fCBTZSA8IFNzIHx8IFNlID49IERDVFNJWkUyIHx8DQotCSAgQWggPCAwIHx8IEFoID4gTUFYX0FIX0FMIHx8IEFsIDwgMCB8fCBBbCA+IE1BWF9BSF9BTCkNCi0JRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BST0dfU0NSSVBULCBzY2Fubm8pOw0KLSAgICAgIGlmIChTcyA9PSAwKSB7DQotCWlmIChTZSAhPSAwKQkJLyogREMgYW5kIEFDIHRvZ2V0aGVyIG5vdCBPSyAqLw0KLQkgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QUk9HX1NDUklQVCwgc2Nhbm5vKTsNCi0gICAgICB9IGVsc2Ugew0KLQlpZiAobmNvbXBzICE9IDEpCS8qIEFDIHNjYW5zIG11c3QgYmUgZm9yIG9ubHkgb25lIGNvbXBvbmVudCAqLw0KLQkgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QUk9HX1NDUklQVCwgc2Nhbm5vKTsNCi0gICAgICB9DQotICAgICAgZm9yIChjaSA9IDA7IGNpIDwgbmNvbXBzOyBjaSsrKSB7DQotCWxhc3RfYml0cG9zX3B0ciA9ICYgbGFzdF9iaXRwb3Nbc2NhbnB0ci0+Y29tcG9uZW50X2luZGV4W2NpXV1bMF07DQotCWlmIChTcyAhPSAwICYmIGxhc3RfYml0cG9zX3B0clswXSA8IDApIC8qIEFDIHdpdGhvdXQgcHJpb3IgREMgc2NhbiAqLw0KLQkgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QUk9HX1NDUklQVCwgc2Nhbm5vKTsNCi0JZm9yIChjb2VmaSA9IFNzOyBjb2VmaSA8PSBTZTsgY29lZmkrKykgew0KLQkgIGlmIChsYXN0X2JpdHBvc19wdHJbY29lZmldIDwgMCkgew0KLQkgICAgLyogZmlyc3Qgc2NhbiBvZiB0aGlzIGNvZWZmaWNpZW50ICovDQotCSAgICBpZiAoQWggIT0gMCkNCi0JICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BST0dfU0NSSVBULCBzY2Fubm8pOw0KLQkgIH0gZWxzZSB7DQotCSAgICAvKiBub3QgZmlyc3Qgc2NhbiAqLw0KLQkgICAgaWYgKEFoICE9IGxhc3RfYml0cG9zX3B0cltjb2VmaV0gfHwgQWwgIT0gQWgtMSkNCi0JICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BST0dfU0NSSVBULCBzY2Fubm8pOw0KLQkgIH0NCi0JICBsYXN0X2JpdHBvc19wdHJbY29lZmldID0gQWw7DQotCX0NCi0gICAgICB9DQotI2VuZGlmDQotICAgIH0gZWxzZSB7DQotICAgICAgLyogRm9yIHNlcXVlbnRpYWwgSlBFRywgYWxsIHByb2dyZXNzaW9uIHBhcmFtZXRlcnMgbXVzdCBiZSB0aGVzZTogKi8NCi0gICAgICBpZiAoU3MgIT0gMCB8fCBTZSAhPSBEQ1RTSVpFMi0xIHx8IEFoICE9IDAgfHwgQWwgIT0gMCkNCi0JRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BST0dfU0NSSVBULCBzY2Fubm8pOw0KLSAgICAgIC8qIE1ha2Ugc3VyZSBjb21wb25lbnRzIGFyZSBub3Qgc2VudCB0d2ljZSAqLw0KLSAgICAgIGZvciAoY2kgPSAwOyBjaSA8IG5jb21wczsgY2krKykgew0KLQl0aGlzaSA9IHNjYW5wdHItPmNvbXBvbmVudF9pbmRleFtjaV07DQotCWlmIChjb21wb25lbnRfc2VudFt0aGlzaV0pDQotCSAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NDQU5fU0NSSVBULCBzY2Fubm8pOw0KLQljb21wb25lbnRfc2VudFt0aGlzaV0gPSBUUlVFOw0KLSAgICAgIH0NCi0gICAgfQ0KLSAgfQ0KLQ0KLSAgLyogTm93IHZlcmlmeSB0aGF0IGV2ZXJ5dGhpbmcgZ290IHNlbnQuICovDQotICBpZiAoY2luZm8tPnByb2dyZXNzaXZlX21vZGUpIHsNCi0jaWZkZWYgQ19QUk9HUkVTU0lWRV9TVVBQT1JURUQNCi0gICAgLyogRm9yIHByb2dyZXNzaXZlIG1vZGUsIHdlIG9ubHkgY2hlY2sgdGhhdCBhdCBsZWFzdCBzb21lIERDIGRhdGENCi0gICAgICogZ290IHNlbnQgZm9yIGVhY2ggY29tcG9uZW50OyB0aGUgc3BlYyBkb2VzIG5vdCByZXF1aXJlIHRoYXQgYWxsIGJpdHMNCi0gICAgICogb2YgYWxsIGNvZWZmaWNpZW50cyBiZSB0cmFuc21pdHRlZC4gIFdvdWxkIGl0IGJlIHdpc2VyIHRvIGVuZm9yY2UNCi0gICAgICogdHJhbnNtaXNzaW9uIG9mIGFsbCBjb2VmZmljaWVudCBiaXRzPz8NCi0gICAgICovDQotICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgew0KLSAgICAgIGlmIChsYXN0X2JpdHBvc1tjaV1bMF0gPCAwKQ0KLQlFUlJFWElUKGNpbmZvLCBKRVJSX01JU1NJTkdfREFUQSk7DQotICAgIH0NCi0jZW5kaWYNCi0gIH0gZWxzZSB7DQotICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgew0KLSAgICAgIGlmICghIGNvbXBvbmVudF9zZW50W2NpXSkNCi0JRVJSRVhJVChjaW5mbywgSkVSUl9NSVNTSU5HX0RBVEEpOw0KLSAgICB9DQotICB9DQotfQ0KLQ0KLSNlbmRpZiAvKiBDX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQgKi8NCi0NCi0NCi1MT0NBTCh2b2lkKQ0KLXNlbGVjdF9zY2FuX3BhcmFtZXRlcnMgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQ0KLS8qIFNldCB1cCB0aGUgc2NhbiBwYXJhbWV0ZXJzIGZvciB0aGUgY3VycmVudCBzY2FuICovDQotew0KLSAgaW50IGNpOw0KLQ0KLSNpZmRlZiBDX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQNCi0gIGlmIChjaW5mby0+c2Nhbl9pbmZvICE9IE5VTEwpIHsNCi0gICAgLyogUHJlcGFyZSBmb3IgY3VycmVudCBzY2FuIC0tLSB0aGUgc2NyaXB0IGlzIGFscmVhZHkgdmFsaWRhdGVkICovDQotICAgIG15X21hc3Rlcl9wdHIgbWFzdGVyID0gKG15X21hc3Rlcl9wdHIpIGNpbmZvLT5tYXN0ZXI7DQotICAgIGNvbnN0IGpwZWdfc2Nhbl9pbmZvICogc2NhbnB0ciA9IGNpbmZvLT5zY2FuX2luZm8gKyBtYXN0ZXItPnNjYW5fbnVtYmVyOw0KLQ0KLSAgICBjaW5mby0+Y29tcHNfaW5fc2NhbiA9IHNjYW5wdHItPmNvbXBzX2luX3NjYW47DQotICAgIGZvciAoY2kgPSAwOyBjaSA8IHNjYW5wdHItPmNvbXBzX2luX3NjYW47IGNpKyspIHsNCi0gICAgICBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV0gPQ0KLQkmY2luZm8tPmNvbXBfaW5mb1tzY2FucHRyLT5jb21wb25lbnRfaW5kZXhbY2ldXTsNCi0gICAgfQ0KLSAgICBjaW5mby0+U3MgPSBzY2FucHRyLT5TczsNCi0gICAgY2luZm8tPlNlID0gc2NhbnB0ci0+U2U7DQotICAgIGNpbmZvLT5BaCA9IHNjYW5wdHItPkFoOw0KLSAgICBjaW5mby0+QWwgPSBzY2FucHRyLT5BbDsNCi0gIH0NCi0gIGVsc2UNCi0jZW5kaWYNCi0gIHsNCi0gICAgLyogUHJlcGFyZSBmb3Igc2luZ2xlIHNlcXVlbnRpYWwtSlBFRyBzY2FuIGNvbnRhaW5pbmcgYWxsIGNvbXBvbmVudHMgKi8NCi0gICAgaWYgKGNpbmZvLT5udW1fY29tcG9uZW50cyA+IE1BWF9DT01QU19JTl9TQ0FOKQ0KLSAgICAgIEVSUkVYSVQyKGNpbmZvLCBKRVJSX0NPTVBPTkVOVF9DT1VOVCwgY2luZm8tPm51bV9jb21wb25lbnRzLA0KLQkgICAgICAgTUFYX0NPTVBTX0lOX1NDQU4pOw0KLSAgICBjaW5mby0+Y29tcHNfaW5fc2NhbiA9IGNpbmZvLT5udW1fY29tcG9uZW50czsNCi0gICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKSB7DQotICAgICAgY2luZm8tPmN1cl9jb21wX2luZm9bY2ldID0gJmNpbmZvLT5jb21wX2luZm9bY2ldOw0KLSAgICB9DQotICAgIGNpbmZvLT5TcyA9IDA7DQotICAgIGNpbmZvLT5TZSA9IERDVFNJWkUyLTE7DQotICAgIGNpbmZvLT5BaCA9IDA7DQotICAgIGNpbmZvLT5BbCA9IDA7DQotICB9DQotfQ0KLQ0KLQ0KLUxPQ0FMKHZvaWQpDQotcGVyX3NjYW5fc2V0dXAgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQ0KLS8qIERvIGNvbXB1dGF0aW9ucyB0aGF0IGFyZSBuZWVkZWQgYmVmb3JlIHByb2Nlc3NpbmcgYSBKUEVHIHNjYW4gKi8NCi0vKiBjaW5mby0+Y29tcHNfaW5fc2NhbiBhbmQgY2luZm8tPmN1cl9jb21wX2luZm9bXSBhcmUgYWxyZWFkeSBzZXQgKi8NCi17DQotICBpbnQgY2ksIG1jdWJsa3MsIHRtcDsNCi0gIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7DQotICANCi0gIGlmIChjaW5mby0+Y29tcHNfaW5fc2NhbiA9PSAxKSB7DQotICAgIA0KLSAgICAvKiBOb25pbnRlcmxlYXZlZCAoc2luZ2xlLWNvbXBvbmVudCkgc2NhbiAqLw0KLSAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bMF07DQotICAgIA0KLSAgICAvKiBPdmVyYWxsIGltYWdlIHNpemUgaW4gTUNVcyAqLw0KLSAgICBjaW5mby0+TUNVc19wZXJfcm93ID0gY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzOw0KLSAgICBjaW5mby0+TUNVX3Jvd3NfaW5fc2NhbiA9IGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3M7DQotICAgIA0KLSAgICAvKiBGb3Igbm9uaW50ZXJsZWF2ZWQgc2NhbiwgYWx3YXlzIG9uZSBibG9jayBwZXIgTUNVICovDQotICAgIGNvbXBwdHItPk1DVV93aWR0aCA9IDE7DQotICAgIGNvbXBwdHItPk1DVV9oZWlnaHQgPSAxOw0KLSAgICBjb21wcHRyLT5NQ1VfYmxvY2tzID0gMTsNCi0gICAgY29tcHB0ci0+TUNVX3NhbXBsZV93aWR0aCA9IERDVFNJWkU7DQotICAgIGNvbXBwdHItPmxhc3RfY29sX3dpZHRoID0gMTsNCi0gICAgLyogRm9yIG5vbmludGVybGVhdmVkIHNjYW5zLCBpdCBpcyBjb252ZW5pZW50IHRvIGRlZmluZSBsYXN0X3Jvd19oZWlnaHQNCi0gICAgICogYXMgdGhlIG51bWJlciBvZiBibG9jayByb3dzIHByZXNlbnQgaW4gdGhlIGxhc3QgaU1DVSByb3cuDQotICAgICAqLw0KLSAgICB0bXAgPSAoaW50KSAoY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrcyAlIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpOw0KLSAgICBpZiAodG1wID09IDApIHRtcCA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7DQotICAgIGNvbXBwdHItPmxhc3Rfcm93X2hlaWdodCA9IHRtcDsNCi0gICAgDQotICAgIC8qIFByZXBhcmUgYXJyYXkgZGVzY3JpYmluZyBNQ1UgY29tcG9zaXRpb24gKi8NCi0gICAgY2luZm8tPmJsb2Nrc19pbl9NQ1UgPSAxOw0KLSAgICBjaW5mby0+TUNVX21lbWJlcnNoaXBbMF0gPSAwOw0KLSAgICANCi0gIH0gZWxzZSB7DQotICAgIA0KLSAgICAvKiBJbnRlcmxlYXZlZCAobXVsdGktY29tcG9uZW50KSBzY2FuICovDQotICAgIGlmIChjaW5mby0+Y29tcHNfaW5fc2NhbiA8PSAwIHx8IGNpbmZvLT5jb21wc19pbl9zY2FuID4gTUFYX0NPTVBTX0lOX1NDQU4pDQotICAgICAgRVJSRVhJVDIoY2luZm8sIEpFUlJfQ09NUE9ORU5UX0NPVU5ULCBjaW5mby0+Y29tcHNfaW5fc2NhbiwNCi0JICAgICAgIE1BWF9DT01QU19JTl9TQ0FOKTsNCi0gICAgDQotICAgIC8qIE92ZXJhbGwgaW1hZ2Ugc2l6ZSBpbiBNQ1VzICovDQotICAgIGNpbmZvLT5NQ1VzX3Blcl9yb3cgPSAoSkRJTUVOU0lPTikNCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGgsDQotCQkgICAgKGxvbmcpIChjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IqRENUU0laRSkpOw0KLSAgICBjaW5mby0+TUNVX3Jvd3NfaW5fc2NhbiA9IChKRElNRU5TSU9OKQ0KLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQsDQotCQkgICAgKGxvbmcpIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IqRENUU0laRSkpOw0KLSAgICANCi0gICAgY2luZm8tPmJsb2Nrc19pbl9NQ1UgPSAwOw0KLSAgICANCi0gICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspIHsNCi0gICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOw0KLSAgICAgIC8qIFNhbXBsaW5nIGZhY3RvcnMgZ2l2ZSAjIG9mIGJsb2NrcyBvZiBjb21wb25lbnQgaW4gZWFjaCBNQ1UgKi8NCi0gICAgICBjb21wcHRyLT5NQ1Vfd2lkdGggPSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOw0KLSAgICAgIGNvbXBwdHItPk1DVV9oZWlnaHQgPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yOw0KLSAgICAgIGNvbXBwdHItPk1DVV9ibG9ja3MgPSBjb21wcHRyLT5NQ1Vfd2lkdGggKiBjb21wcHRyLT5NQ1VfaGVpZ2h0Ow0KLSAgICAgIGNvbXBwdHItPk1DVV9zYW1wbGVfd2lkdGggPSBjb21wcHRyLT5NQ1Vfd2lkdGggKiBEQ1RTSVpFOw0KLSAgICAgIC8qIEZpZ3VyZSBudW1iZXIgb2Ygbm9uLWR1bW15IGJsb2NrcyBpbiBsYXN0IE1DVSBjb2x1bW4gJiByb3cgKi8NCi0gICAgICB0bXAgPSAoaW50KSAoY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICUgY29tcHB0ci0+TUNVX3dpZHRoKTsNCi0gICAgICBpZiAodG1wID09IDApIHRtcCA9IGNvbXBwdHItPk1DVV93aWR0aDsNCi0gICAgICBjb21wcHRyLT5sYXN0X2NvbF93aWR0aCA9IHRtcDsNCi0gICAgICB0bXAgPSAoaW50KSAoY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrcyAlIGNvbXBwdHItPk1DVV9oZWlnaHQpOw0KLSAgICAgIGlmICh0bXAgPT0gMCkgdG1wID0gY29tcHB0ci0+TUNVX2hlaWdodDsNCi0gICAgICBjb21wcHRyLT5sYXN0X3Jvd19oZWlnaHQgPSB0bXA7DQotICAgICAgLyogUHJlcGFyZSBhcnJheSBkZXNjcmliaW5nIE1DVSBjb21wb3NpdGlvbiAqLw0KLSAgICAgIG1jdWJsa3MgPSBjb21wcHRyLT5NQ1VfYmxvY2tzOw0KLSAgICAgIGlmIChjaW5mby0+YmxvY2tzX2luX01DVSArIG1jdWJsa3MgPiBDX01BWF9CTE9DS1NfSU5fTUNVKQ0KLQlFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9NQ1VfU0laRSk7DQotICAgICAgd2hpbGUgKG1jdWJsa3MtLSA+IDApIHsNCi0JY2luZm8tPk1DVV9tZW1iZXJzaGlwW2NpbmZvLT5ibG9ja3NfaW5fTUNVKytdID0gY2k7DQotICAgICAgfQ0KLSAgICB9DQotICAgIA0KLSAgfQ0KLQ0KLSAgLyogQ29udmVydCByZXN0YXJ0IHNwZWNpZmllZCBpbiByb3dzIHRvIGFjdHVhbCBNQ1UgY291bnQuICovDQotICAvKiBOb3RlIHRoYXQgY291bnQgbXVzdCBmaXQgaW4gMTYgYml0cywgc28gd2UgcHJvdmlkZSBsaW1pdGluZy4gKi8NCi0gIGlmIChjaW5mby0+cmVzdGFydF9pbl9yb3dzID4gMCkgew0KLSAgICBsb25nIG5vbWluYWwgPSAobG9uZykgY2luZm8tPnJlc3RhcnRfaW5fcm93cyAqIChsb25nKSBjaW5mby0+TUNVc19wZXJfcm93Ow0KLSAgICBjaW5mby0+cmVzdGFydF9pbnRlcnZhbCA9ICh1bnNpZ25lZCBpbnQpIE1JTihub21pbmFsLCA2NTUzNUwpOw0KLSAgfQ0KLX0NCi0NCi0NCi0vKg0KLSAqIFBlci1wYXNzIHNldHVwLg0KLSAqIFRoaXMgaXMgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBwYXNzLiAgV2UgZGV0ZXJtaW5lIHdoaWNoIG1vZHVsZXMNCi0gKiB3aWxsIGJlIGFjdGl2ZSBkdXJpbmcgdGhpcyBwYXNzIGFuZCBnaXZlIHRoZW0gYXBwcm9wcmlhdGUgc3RhcnRfcGFzcyBjYWxscy4NCi0gKiBXZSBhbHNvIHNldCBpc19sYXN0X3Bhc3MgdG8gaW5kaWNhdGUgd2hldGhlciBhbnkgbW9yZSBwYXNzZXMgd2lsbCBiZQ0KLSAqIHJlcXVpcmVkLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXByZXBhcmVfZm9yX3Bhc3MgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIG15X21hc3Rlcl9wdHIgbWFzdGVyID0gKG15X21hc3Rlcl9wdHIpIGNpbmZvLT5tYXN0ZXI7DQotDQotICBzd2l0Y2ggKG1hc3Rlci0+cGFzc190eXBlKSB7DQotICBjYXNlIG1haW5fcGFzczoNCi0gICAgLyogSW5pdGlhbCBwYXNzOiB3aWxsIGNvbGxlY3QgaW5wdXQgZGF0YSwgYW5kIGRvIGVpdGhlciBIdWZmbWFuDQotICAgICAqIG9wdGltaXphdGlvbiBvciBkYXRhIG91dHB1dCBmb3IgdGhlIGZpcnN0IHNjYW4uDQotICAgICAqLw0KLSAgICBzZWxlY3Rfc2Nhbl9wYXJhbWV0ZXJzKGNpbmZvKTsNCi0gICAgcGVyX3NjYW5fc2V0dXAoY2luZm8pOw0KLSAgICBpZiAoISBjaW5mby0+cmF3X2RhdGFfaW4pIHsNCi0gICAgICAoKmNpbmZvLT5jY29udmVydC0+c3RhcnRfcGFzcykgKGNpbmZvKTsNCi0gICAgICAoKmNpbmZvLT5kb3duc2FtcGxlLT5zdGFydF9wYXNzKSAoY2luZm8pOw0KLSAgICAgICgqY2luZm8tPnByZXAtPnN0YXJ0X3Bhc3MpIChjaW5mbywgSkJVRl9QQVNTX1RIUlUpOw0KLSAgICB9DQotICAgICgqY2luZm8tPmZkY3QtPnN0YXJ0X3Bhc3MpIChjaW5mbyk7DQotICAgICgqY2luZm8tPmVudHJvcHktPnN0YXJ0X3Bhc3MpIChjaW5mbywgY2luZm8tPm9wdGltaXplX2NvZGluZyk7DQotICAgICgqY2luZm8tPmNvZWYtPnN0YXJ0X3Bhc3MpIChjaW5mbywNCi0JCQkJKG1hc3Rlci0+dG90YWxfcGFzc2VzID4gMSA/DQotCQkJCSBKQlVGX1NBVkVfQU5EX1BBU1MgOiBKQlVGX1BBU1NfVEhSVSkpOw0KLSAgICAoKmNpbmZvLT5tYWluLT5zdGFydF9wYXNzKSAoY2luZm8sIEpCVUZfUEFTU19USFJVKTsNCi0gICAgaWYgKGNpbmZvLT5vcHRpbWl6ZV9jb2RpbmcpIHsNCi0gICAgICAvKiBObyBpbW1lZGlhdGUgZGF0YSBvdXRwdXQ7IHBvc3Rwb25lIHdyaXRpbmcgZnJhbWUvc2NhbiBoZWFkZXJzICovDQotICAgICAgbWFzdGVyLT5wdWIuY2FsbF9wYXNzX3N0YXJ0dXAgPSBGQUxTRTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAvKiBXaWxsIHdyaXRlIGZyYW1lL3NjYW4gaGVhZGVycyBhdCBmaXJzdCBqcGVnX3dyaXRlX3NjYW5saW5lcyBjYWxsICovDQotICAgICAgbWFzdGVyLT5wdWIuY2FsbF9wYXNzX3N0YXJ0dXAgPSBUUlVFOw0KLSAgICB9DQotICAgIGJyZWFrOw0KLSNpZmRlZiBFTlRST1BZX09QVF9TVVBQT1JURUQNCi0gIGNhc2UgaHVmZl9vcHRfcGFzczoNCi0gICAgLyogRG8gSHVmZm1hbiBvcHRpbWl6YXRpb24gZm9yIGEgc2NhbiBhZnRlciB0aGUgZmlyc3Qgb25lLiAqLw0KLSAgICBzZWxlY3Rfc2Nhbl9wYXJhbWV0ZXJzKGNpbmZvKTsNCi0gICAgcGVyX3NjYW5fc2V0dXAoY2luZm8pOw0KLSAgICBpZiAoY2luZm8tPlNzICE9IDAgfHwgY2luZm8tPkFoID09IDAgfHwgY2luZm8tPmFyaXRoX2NvZGUpIHsNCi0gICAgICAoKmNpbmZvLT5lbnRyb3B5LT5zdGFydF9wYXNzKSAoY2luZm8sIFRSVUUpOw0KLSAgICAgICgqY2luZm8tPmNvZWYtPnN0YXJ0X3Bhc3MpIChjaW5mbywgSkJVRl9DUkFOS19ERVNUKTsNCi0gICAgICBtYXN0ZXItPnB1Yi5jYWxsX3Bhc3Nfc3RhcnR1cCA9IEZBTFNFOw0KLSAgICAgIGJyZWFrOw0KLSAgICB9DQotICAgIC8qIFNwZWNpYWwgY2FzZTogSHVmZm1hbiBEQyByZWZpbmVtZW50IHNjYW5zIG5lZWQgbm8gSHVmZm1hbiB0YWJsZQ0KLSAgICAgKiBhbmQgdGhlcmVmb3JlIHdlIGNhbiBza2lwIHRoZSBvcHRpbWl6YXRpb24gcGFzcyBmb3IgdGhlbS4NCi0gICAgICovDQotICAgIG1hc3Rlci0+cGFzc190eXBlID0gb3V0cHV0X3Bhc3M7DQotICAgIG1hc3Rlci0+cGFzc19udW1iZXIrKzsNCi0gICAgLypGQUxMVEhST1VHSCovDQotI2VuZGlmDQotICBjYXNlIG91dHB1dF9wYXNzOg0KLSAgICAvKiBEbyBhIGRhdGEtb3V0cHV0IHBhc3MuICovDQotICAgIC8qIFdlIG5lZWQgbm90IHJlcGVhdCBwZXItc2NhbiBzZXR1cCBpZiBwcmlvciBvcHRpbWl6YXRpb24gcGFzcyBkaWQgaXQuICovDQotICAgIGlmICghIGNpbmZvLT5vcHRpbWl6ZV9jb2RpbmcpIHsNCi0gICAgICBzZWxlY3Rfc2Nhbl9wYXJhbWV0ZXJzKGNpbmZvKTsNCi0gICAgICBwZXJfc2Nhbl9zZXR1cChjaW5mbyk7DQotICAgIH0NCi0gICAgKCpjaW5mby0+ZW50cm9weS0+c3RhcnRfcGFzcykgKGNpbmZvLCBGQUxTRSk7DQotICAgICgqY2luZm8tPmNvZWYtPnN0YXJ0X3Bhc3MpIChjaW5mbywgSkJVRl9DUkFOS19ERVNUKTsNCi0gICAgLyogV2UgZW1pdCBmcmFtZS9zY2FuIGhlYWRlcnMgbm93ICovDQotICAgIGlmIChtYXN0ZXItPnNjYW5fbnVtYmVyID09IDApDQotICAgICAgKCpjaW5mby0+bWFya2VyLT53cml0ZV9mcmFtZV9oZWFkZXIpIChjaW5mbyk7DQotICAgICgqY2luZm8tPm1hcmtlci0+d3JpdGVfc2Nhbl9oZWFkZXIpIChjaW5mbyk7DQotICAgIG1hc3Rlci0+cHViLmNhbGxfcGFzc19zdGFydHVwID0gRkFMU0U7DQotICAgIGJyZWFrOw0KLSAgZGVmYXVsdDoNCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOw0KLSAgfQ0KLQ0KLSAgbWFzdGVyLT5wdWIuaXNfbGFzdF9wYXNzID0gKG1hc3Rlci0+cGFzc19udW1iZXIgPT0gbWFzdGVyLT50b3RhbF9wYXNzZXMtMSk7DQotDQotICAvKiBTZXQgdXAgcHJvZ3Jlc3MgbW9uaXRvcidzIHBhc3MgaW5mbyBpZiBwcmVzZW50ICovDQotICBpZiAoY2luZm8tPnByb2dyZXNzICE9IE5VTEwpIHsNCi0gICAgY2luZm8tPnByb2dyZXNzLT5jb21wbGV0ZWRfcGFzc2VzID0gbWFzdGVyLT5wYXNzX251bWJlcjsNCi0gICAgY2luZm8tPnByb2dyZXNzLT50b3RhbF9wYXNzZXMgPSBtYXN0ZXItPnRvdGFsX3Bhc3NlczsNCi0gIH0NCi19DQotDQotDQotLyoNCi0gKiBTcGVjaWFsIHN0YXJ0LW9mLXBhc3MgaG9vay4NCi0gKiBUaGlzIGlzIGNhbGxlZCBieSBqcGVnX3dyaXRlX3NjYW5saW5lcyBpZiBjYWxsX3Bhc3Nfc3RhcnR1cCBpcyBUUlVFLg0KLSAqIEluIHNpbmdsZS1wYXNzIHByb2Nlc3NpbmcsIHdlIG5lZWQgdGhpcyBob29rIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0bw0KLSAqIHdyaXRlIGZyYW1lL3NjYW4gaGVhZGVycyBkdXJpbmcganBlZ19zdGFydF9jb21wcmVzczsgd2Ugd2FudCB0byBsZXQgdGhlDQotICogYXBwbGljYXRpb24gd3JpdGUgQ09NIG1hcmtlcnMgZXRjLiBiZXR3ZWVuIGpwZWdfc3RhcnRfY29tcHJlc3MgYW5kIHRoZQ0KLSAqIGpwZWdfd3JpdGVfc2NhbmxpbmVzIGxvb3AuDQotICogSW4gbXVsdGktcGFzcyBwcm9jZXNzaW5nLCB0aGlzIHJvdXRpbmUgaXMgbm90IHVzZWQuDQotICovDQotDQotTUVUSE9EREVGKHZvaWQpDQotcGFzc19zdGFydHVwIChqX2NvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBjaW5mby0+bWFzdGVyLT5jYWxsX3Bhc3Nfc3RhcnR1cCA9IEZBTFNFOyAvKiByZXNldCBmbGFnIHNvIGNhbGwgb25seSBvbmNlICovDQotDQotICAoKmNpbmZvLT5tYXJrZXItPndyaXRlX2ZyYW1lX2hlYWRlcikgKGNpbmZvKTsNCi0gICgqY2luZm8tPm1hcmtlci0+d3JpdGVfc2Nhbl9oZWFkZXIpIChjaW5mbyk7DQotfQ0KLQ0KLQ0KLS8qDQotICogRmluaXNoIHVwIGF0IGVuZCBvZiBwYXNzLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLWZpbmlzaF9wYXNzX21hc3RlciAoal9jb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAgbXlfbWFzdGVyX3B0ciBtYXN0ZXIgPSAobXlfbWFzdGVyX3B0cikgY2luZm8tPm1hc3RlcjsNCi0NCi0gIC8qIFRoZSBlbnRyb3B5IGNvZGVyIGFsd2F5cyBuZWVkcyBhbiBlbmQtb2YtcGFzcyBjYWxsLA0KLSAgICogZWl0aGVyIHRvIGFuYWx5emUgc3RhdGlzdGljcyBvciB0byBmbHVzaCBpdHMgb3V0cHV0IGJ1ZmZlci4NCi0gICAqLw0KLSAgKCpjaW5mby0+ZW50cm9weS0+ZmluaXNoX3Bhc3MpIChjaW5mbyk7DQotDQotICAvKiBVcGRhdGUgc3RhdGUgZm9yIG5leHQgcGFzcyAqLw0KLSAgc3dpdGNoIChtYXN0ZXItPnBhc3NfdHlwZSkgew0KLSAgY2FzZSBtYWluX3Bhc3M6DQotICAgIC8qIG5leHQgcGFzcyBpcyBlaXRoZXIgb3V0cHV0IG9mIHNjYW4gMCAoYWZ0ZXIgb3B0aW1pemF0aW9uKQ0KLSAgICAgKiBvciBvdXRwdXQgb2Ygc2NhbiAxIChpZiBubyBvcHRpbWl6YXRpb24pLg0KLSAgICAgKi8NCi0gICAgbWFzdGVyLT5wYXNzX3R5cGUgPSBvdXRwdXRfcGFzczsNCi0gICAgaWYgKCEgY2luZm8tPm9wdGltaXplX2NvZGluZykNCi0gICAgICBtYXN0ZXItPnNjYW5fbnVtYmVyKys7DQotICAgIGJyZWFrOw0KLSAgY2FzZSBodWZmX29wdF9wYXNzOg0KLSAgICAvKiBuZXh0IHBhc3MgaXMgYWx3YXlzIG91dHB1dCBvZiBjdXJyZW50IHNjYW4gKi8NCi0gICAgbWFzdGVyLT5wYXNzX3R5cGUgPSBvdXRwdXRfcGFzczsNCi0gICAgYnJlYWs7DQotICBjYXNlIG91dHB1dF9wYXNzOg0KLSAgICAvKiBuZXh0IHBhc3MgaXMgZWl0aGVyIG9wdGltaXphdGlvbiBvciBvdXRwdXQgb2YgbmV4dCBzY2FuICovDQotICAgIGlmIChjaW5mby0+b3B0aW1pemVfY29kaW5nKQ0KLSAgICAgIG1hc3Rlci0+cGFzc190eXBlID0gaHVmZl9vcHRfcGFzczsNCi0gICAgbWFzdGVyLT5zY2FuX251bWJlcisrOw0KLSAgICBicmVhazsNCi0gIH0NCi0NCi0gIG1hc3Rlci0+cGFzc19udW1iZXIrKzsNCi19DQotDQotDQotLyoNCi0gKiBJbml0aWFsaXplIG1hc3RlciBjb21wcmVzc2lvbiBjb250cm9sLg0KLSAqLw0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWppbml0X2NfbWFzdGVyX2NvbnRyb2wgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIHRyYW5zY29kZV9vbmx5KQ0KLXsNCi0gIG15X21hc3Rlcl9wdHIgbWFzdGVyOw0KLQ0KLSAgbWFzdGVyID0gKG15X21hc3Rlcl9wdHIpDQotICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwNCi0JCQkJICBTSVpFT0YobXlfY29tcF9tYXN0ZXIpKTsNCi0gIGNpbmZvLT5tYXN0ZXIgPSAoc3RydWN0IGpwZWdfY29tcF9tYXN0ZXIgKikgbWFzdGVyOw0KLSAgbWFzdGVyLT5wdWIucHJlcGFyZV9mb3JfcGFzcyA9IHByZXBhcmVfZm9yX3Bhc3M7DQotICBtYXN0ZXItPnB1Yi5wYXNzX3N0YXJ0dXAgPSBwYXNzX3N0YXJ0dXA7DQotICBtYXN0ZXItPnB1Yi5maW5pc2hfcGFzcyA9IGZpbmlzaF9wYXNzX21hc3RlcjsNCi0gIG1hc3Rlci0+cHViLmlzX2xhc3RfcGFzcyA9IEZBTFNFOw0KLQ0KLSAgLyogVmFsaWRhdGUgcGFyYW1ldGVycywgZGV0ZXJtaW5lIGRlcml2ZWQgdmFsdWVzICovDQotICBpbml0aWFsX3NldHVwKGNpbmZvKTsNCi0NCi0gIGlmIChjaW5mby0+c2Nhbl9pbmZvICE9IE5VTEwpIHsNCi0jaWZkZWYgQ19NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVEDQotICAgIHZhbGlkYXRlX3NjcmlwdChjaW5mbyk7DQotI2Vsc2UNCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOw0KLSNlbmRpZg0KLSAgfSBlbHNlIHsNCi0gICAgY2luZm8tPnByb2dyZXNzaXZlX21vZGUgPSBGQUxTRTsNCi0gICAgY2luZm8tPm51bV9zY2FucyA9IDE7DQotICB9DQotDQotICBpZiAoY2luZm8tPnByb2dyZXNzaXZlX21vZGUpCS8qICBURU1QT1JBUlkgSEFDSyA/Pz8gKi8NCi0gICAgY2luZm8tPm9wdGltaXplX2NvZGluZyA9IFRSVUU7IC8qIGFzc3VtZSBkZWZhdWx0IHRhYmxlcyBubyBnb29kIGZvciBwcm9ncmVzc2l2ZSBtb2RlICovDQotDQotICAvKiBJbml0aWFsaXplIG15IHByaXZhdGUgc3RhdGUgKi8NCi0gIGlmICh0cmFuc2NvZGVfb25seSkgew0KLSAgICAvKiBubyBtYWluIHBhc3MgaW4gdHJhbnNjb2RpbmcgKi8NCi0gICAgaWYgKGNpbmZvLT5vcHRpbWl6ZV9jb2RpbmcpDQotICAgICAgbWFzdGVyLT5wYXNzX3R5cGUgPSBodWZmX29wdF9wYXNzOw0KLSAgICBlbHNlDQotICAgICAgbWFzdGVyLT5wYXNzX3R5cGUgPSBvdXRwdXRfcGFzczsNCi0gIH0gZWxzZSB7DQotICAgIC8qIGZvciBub3JtYWwgY29tcHJlc3Npb24sIGZpcnN0IHBhc3MgaXMgYWx3YXlzIHRoaXMgdHlwZTogKi8NCi0gICAgbWFzdGVyLT5wYXNzX3R5cGUgPSBtYWluX3Bhc3M7DQotICB9DQotICBtYXN0ZXItPnNjYW5fbnVtYmVyID0gMDsNCi0gIG1hc3Rlci0+cGFzc19udW1iZXIgPSAwOw0KLSAgaWYgKGNpbmZvLT5vcHRpbWl6ZV9jb2RpbmcpDQotICAgIG1hc3Rlci0+dG90YWxfcGFzc2VzID0gY2luZm8tPm51bV9zY2FucyAqIDI7DQotICBlbHNlDQotICAgIG1hc3Rlci0+dG90YWxfcGFzc2VzID0gY2luZm8tPm51bV9zY2FuczsNCi19DQotDQotI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fDQorI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykKKy8qCisgKiBqY21hc3Rlci5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgbWFzdGVyIGNvbnRyb2wgbG9naWMgZm9yIHRoZSBKUEVHIGNvbXByZXNzb3IuCisgKiBUaGVzZSByb3V0aW5lcyBhcmUgY29uY2VybmVkIHdpdGggcGFyYW1ldGVyIHZhbGlkYXRpb24sIGluaXRpYWwgc2V0dXAsCisgKiBhbmQgaW50ZXItcGFzcyBjb250cm9sIChkZXRlcm1pbmluZyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBhbmQgdGhlIHdvcmsgCisgKiB0byBiZSBkb25lIGluIGVhY2ggcGFzcykuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorCisKKy8qIFByaXZhdGUgc3RhdGUgKi8KKwordHlwZWRlZiBlbnVtIHsKKwltYWluX3Bhc3MsCQkvKiBpbnB1dCBkYXRhLCBhbHNvIGRvIGZpcnN0IG91dHB1dCBzdGVwICovCisJaHVmZl9vcHRfcGFzcywJCS8qIEh1ZmZtYW4gY29kZSBvcHRpbWl6YXRpb24gcGFzcyAqLworCW91dHB1dF9wYXNzCQkvKiBkYXRhIG91dHB1dCBwYXNzICovCit9IGNfcGFzc190eXBlOworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX2NvbXBfbWFzdGVyIHB1YjsJLyogcHVibGljIGZpZWxkcyAqLworCisgIGNfcGFzc190eXBlIHBhc3NfdHlwZTsJLyogdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgcGFzcyAqLworCisgIGludCBwYXNzX251bWJlcjsJCS8qICMgb2YgcGFzc2VzIGNvbXBsZXRlZCAqLworICBpbnQgdG90YWxfcGFzc2VzOwkJLyogdG90YWwgIyBvZiBwYXNzZXMgbmVlZGVkICovCisKKyAgaW50IHNjYW5fbnVtYmVyOwkJLyogY3VycmVudCBpbmRleCBpbiBzY2FuX2luZm9bXSAqLworfSBteV9jb21wX21hc3RlcjsKKwordHlwZWRlZiBteV9jb21wX21hc3RlciAqIG15X21hc3Rlcl9wdHI7CisKKworLyoKKyAqIFN1cHBvcnQgcm91dGluZXMgdGhhdCBkbyB2YXJpb3VzIGVzc2VudGlhbCBjYWxjdWxhdGlvbnMuCisgKi8KKworTE9DQUwodm9pZCkKK2luaXRpYWxfc2V0dXAgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQorLyogRG8gY29tcHV0YXRpb25zIHRoYXQgYXJlIG5lZWRlZCBiZWZvcmUgbWFzdGVyIHNlbGVjdGlvbiBwaGFzZSAqLworeworICBpbnQgY2k7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIGxvbmcgc2FtcGxlc3BlcnJvdzsKKyAgSkRJTUVOU0lPTiBqZF9zYW1wbGVzcGVycm93OworCisgIC8qIFNhbml0eSBjaGVjayBvbiBpbWFnZSBkaW1lbnNpb25zICovCisgIGlmIChjaW5mby0+aW1hZ2VfaGVpZ2h0IDw9IDAgfHwgY2luZm8tPmltYWdlX3dpZHRoIDw9IDAKKyAgICAgIHx8IGNpbmZvLT5udW1fY29tcG9uZW50cyA8PSAwIHx8IGNpbmZvLT5pbnB1dF9jb21wb25lbnRzIDw9IDApCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9FTVBUWV9JTUFHRSk7CisKKyAgLyogTWFrZSBzdXJlIGltYWdlIGlzbid0IGJpZ2dlciB0aGFuIEkgY2FuIGhhbmRsZSAqLworICBpZiAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgPiAobG9uZykgSlBFR19NQVhfRElNRU5TSU9OIHx8CisgICAgICAobG9uZykgY2luZm8tPmltYWdlX3dpZHRoID4gKGxvbmcpIEpQRUdfTUFYX0RJTUVOU0lPTikKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9JTUFHRV9UT09fQklHLCAodW5zaWduZWQgaW50KSBKUEVHX01BWF9ESU1FTlNJT04pOworCisgIC8qIFdpZHRoIG9mIGFuIGlucHV0IHNjYW5saW5lIG11c3QgYmUgcmVwcmVzZW50YWJsZSBhcyBKRElNRU5TSU9OLiAqLworICBzYW1wbGVzcGVycm93ID0gKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqIChsb25nKSBjaW5mby0+aW5wdXRfY29tcG9uZW50czsKKyAgamRfc2FtcGxlc3BlcnJvdyA9IChKRElNRU5TSU9OKSBzYW1wbGVzcGVycm93OworICBpZiAoKGxvbmcpIGpkX3NhbXBsZXNwZXJyb3cgIT0gc2FtcGxlc3BlcnJvdykKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1dJRFRIX09WRVJGTE9XKTsKKworICAvKiBGb3Igbm93LCBwcmVjaXNpb24gbXVzdCBtYXRjaCBjb21waWxlZC1pbiB2YWx1ZS4uLiAqLworICBpZiAoY2luZm8tPmRhdGFfcHJlY2lzaW9uICE9IEJJVFNfSU5fSlNBTVBMRSkKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUFJFQ0lTSU9OLCBjaW5mby0+ZGF0YV9wcmVjaXNpb24pOworCisgIC8qIENoZWNrIHRoYXQgbnVtYmVyIG9mIGNvbXBvbmVudHMgd29uJ3QgZXhjZWVkIGludGVybmFsIGFycmF5IHNpemVzICovCisgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgPiBNQVhfQ09NUE9ORU5UUykKKyAgICBFUlJFWElUMihjaW5mbywgSkVSUl9DT01QT05FTlRfQ09VTlQsIGNpbmZvLT5udW1fY29tcG9uZW50cywKKwkgICAgIE1BWF9DT01QT05FTlRTKTsKKworICAvKiBDb21wdXRlIG1heGltdW0gc2FtcGxpbmcgZmFjdG9yczsgY2hlY2sgZmFjdG9yIHZhbGlkaXR5ICovCisgIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciA9IDE7CisgIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciA9IDE7CisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgaWYgKGNvbXBwdHItPmhfc2FtcF9mYWN0b3I8PTAgfHwgY29tcHB0ci0+aF9zYW1wX2ZhY3Rvcj5NQVhfU0FNUF9GQUNUT1IgfHwKKwljb21wcHRyLT52X3NhbXBfZmFjdG9yPD0wIHx8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I+TUFYX1NBTVBfRkFDVE9SKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfU0FNUExJTkcpOworICAgIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciA9IE1BWChjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IsCisJCQkJICAgY29tcHB0ci0+aF9zYW1wX2ZhY3Rvcik7CisgICAgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yID0gTUFYKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKwkJCQkgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yKTsKKyAgfQorCisgIC8qIENvbXB1dGUgZGltZW5zaW9ucyBvZiBjb21wb25lbnRzICovCisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgLyogRmlsbCBpbiB0aGUgY29ycmVjdCBjb21wb25lbnRfaW5kZXggdmFsdWU7IGRvbid0IHJlbHkgb24gYXBwbGljYXRpb24gKi8KKyAgICBjb21wcHRyLT5jb21wb25lbnRfaW5kZXggPSBjaTsKKyAgICAvKiBGb3IgY29tcHJlc3Npb24sIHdlIG5ldmVyIGRvIERDVCBzY2FsaW5nLiAqLworICAgIGNvbXBwdHItPkRDVF9zY2FsZWRfc2l6ZSA9IERDVFNJWkU7CisgICAgLyogU2l6ZSBpbiBEQ1QgYmxvY2tzICovCisgICAgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggKiAobG9uZykgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwKKwkJICAgIChsb25nKSAoY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICogRENUU0laRSkpOworICAgIGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3MgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiAobG9uZykgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwKKwkJICAgIChsb25nKSAoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogRENUU0laRSkpOworICAgIC8qIFNpemUgaW4gc2FtcGxlcyAqLworICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggKiAobG9uZykgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwKKwkJICAgIChsb25nKSBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IpOworICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX2hlaWdodCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCAqIChsb25nKSBjb21wcHRyLT52X3NhbXBfZmFjdG9yLAorCQkgICAgKGxvbmcpIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcik7CisgICAgLyogTWFyayBjb21wb25lbnQgbmVlZGVkICh0aGlzIGZsYWcgaXNuJ3QgYWN0dWFsbHkgdXNlZCBmb3IgY29tcHJlc3Npb24pICovCisgICAgY29tcHB0ci0+Y29tcG9uZW50X25lZWRlZCA9IFRSVUU7CisgIH0KKworICAvKiBDb21wdXRlIG51bWJlciBvZiBmdWxseSBpbnRlcmxlYXZlZCBNQ1Ugcm93cyAobnVtYmVyIG9mIHRpbWVzIHRoYXQKKyAgICogbWFpbiBjb250cm9sbGVyIHdpbGwgY2FsbCBjb2VmZmljaWVudCBjb250cm9sbGVyKS4KKyAgICovCisgIGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MgPSAoSkRJTUVOU0lPTikKKyAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0LAorCQkgIChsb25nKSAoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKkRDVFNJWkUpKTsKK30KKworCisjaWZkZWYgQ19NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVECisKK0xPQ0FMKHZvaWQpCit2YWxpZGF0ZV9zY3JpcHQgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQorLyogVmVyaWZ5IHRoYXQgdGhlIHNjYW4gc2NyaXB0IGluIGNpbmZvLT5zY2FuX2luZm9bXSBpcyB2YWxpZDsgYWxzbworICogZGV0ZXJtaW5lIHdoZXRoZXIgaXQgdXNlcyBwcm9ncmVzc2l2ZSBKUEVHLCBhbmQgc2V0IGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlLgorICovCit7CisgIGNvbnN0IGpwZWdfc2Nhbl9pbmZvICogc2NhbnB0cjsKKyAgaW50IHNjYW5ubywgbmNvbXBzLCBjaSwgY29lZmksIHRoaXNpOworICBpbnQgU3MsIFNlLCBBaCwgQWw7CisgIGJvb2xlYW4gY29tcG9uZW50X3NlbnRbTUFYX0NPTVBPTkVOVFNdOworI2lmZGVmIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVECisgIGludCAqIGxhc3RfYml0cG9zX3B0cjsKKyAgaW50IGxhc3RfYml0cG9zW01BWF9DT01QT05FTlRTXVtEQ1RTSVpFMl07CisgIC8qIC0xIHVudGlsIHRoYXQgY29lZmZpY2llbnQgaGFzIGJlZW4gc2VlbjsgdGhlbiBsYXN0IEFsIGZvciBpdCAqLworI2VuZGlmCisKKyAgaWYgKGNpbmZvLT5udW1fc2NhbnMgPD0gMCkKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU0NBTl9TQ1JJUFQsIDApOworCisgIC8qIEZvciBzZXF1ZW50aWFsIEpQRUcsIGFsbCBzY2FucyBtdXN0IGhhdmUgU3M9MCwgU2U9RENUU0laRTItMTsKKyAgICogZm9yIHByb2dyZXNzaXZlIEpQRUcsIG5vIHNjYW4gY2FuIGhhdmUgdGhpcy4KKyAgICovCisgIHNjYW5wdHIgPSBjaW5mby0+c2Nhbl9pbmZvOworICBpZiAoc2NhbnB0ci0+U3MgIT0gMCB8fCBzY2FucHRyLT5TZSAhPSBEQ1RTSVpFMi0xKSB7CisjaWZkZWYgQ19QUk9HUkVTU0lWRV9TVVBQT1JURUQKKyAgICBjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSA9IFRSVUU7CisgICAgbGFzdF9iaXRwb3NfcHRyID0gJiBsYXN0X2JpdHBvc1swXVswXTsKKyAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIAorICAgICAgZm9yIChjb2VmaSA9IDA7IGNvZWZpIDwgRENUU0laRTI7IGNvZWZpKyspCisJKmxhc3RfYml0cG9zX3B0cisrID0gLTE7CisjZWxzZQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsKKyNlbmRpZgorICB9IGVsc2UgeworICAgIGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlID0gRkFMU0U7CisgICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKSAKKyAgICAgIGNvbXBvbmVudF9zZW50W2NpXSA9IEZBTFNFOworICB9CisKKyAgZm9yIChzY2Fubm8gPSAxOyBzY2Fubm8gPD0gY2luZm8tPm51bV9zY2Fuczsgc2NhbnB0cisrLCBzY2Fubm8rKykgeworICAgIC8qIFZhbGlkYXRlIGNvbXBvbmVudCBpbmRleGVzICovCisgICAgbmNvbXBzID0gc2NhbnB0ci0+Y29tcHNfaW5fc2NhbjsKKyAgICBpZiAobmNvbXBzIDw9IDAgfHwgbmNvbXBzID4gTUFYX0NPTVBTX0lOX1NDQU4pCisgICAgICBFUlJFWElUMihjaW5mbywgSkVSUl9DT01QT05FTlRfQ09VTlQsIG5jb21wcywgTUFYX0NPTVBTX0lOX1NDQU4pOworICAgIGZvciAoY2kgPSAwOyBjaSA8IG5jb21wczsgY2krKykgeworICAgICAgdGhpc2kgPSBzY2FucHRyLT5jb21wb25lbnRfaW5kZXhbY2ldOworICAgICAgaWYgKHRoaXNpIDwgMCB8fCB0aGlzaSA+PSBjaW5mby0+bnVtX2NvbXBvbmVudHMpCisJRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NDQU5fU0NSSVBULCBzY2Fubm8pOworICAgICAgLyogQ29tcG9uZW50cyBtdXN0IGFwcGVhciBpbiBTT0Ygb3JkZXIgd2l0aGluIGVhY2ggc2NhbiAqLworICAgICAgaWYgKGNpID4gMCAmJiB0aGlzaSA8PSBzY2FucHRyLT5jb21wb25lbnRfaW5kZXhbY2ktMV0pCisJRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NDQU5fU0NSSVBULCBzY2Fubm8pOworICAgIH0KKyAgICAvKiBWYWxpZGF0ZSBwcm9ncmVzc2lvbiBwYXJhbWV0ZXJzICovCisgICAgU3MgPSBzY2FucHRyLT5TczsKKyAgICBTZSA9IHNjYW5wdHItPlNlOworICAgIEFoID0gc2NhbnB0ci0+QWg7CisgICAgQWwgPSBzY2FucHRyLT5BbDsKKyAgICBpZiAoY2luZm8tPnByb2dyZXNzaXZlX21vZGUpIHsKKyNpZmRlZiBDX1BST0dSRVNTSVZFX1NVUFBPUlRFRAorICAgICAgLyogVGhlIEpQRUcgc3BlYyBzaW1wbHkgZ2l2ZXMgdGhlIHJhbmdlcyAwLi4xMyBmb3IgQWggYW5kIEFsLCBidXQgdGhhdAorICAgICAgICogc2VlbXMgd3Jvbmc6IHRoZSB1cHBlciBib3VuZCBvdWdodCB0byBkZXBlbmQgb24gZGF0YSBwcmVjaXNpb24uCisgICAgICAgKiBQZXJoYXBzIHRoZXkgcmVhbGx5IG1lYW50IDAuLk4rMSBmb3IgTi1iaXQgcHJlY2lzaW9uLgorICAgICAgICogSGVyZSB3ZSBhbGxvdyAwLi4xMCBmb3IgOC1iaXQgZGF0YTsgQWwgbGFyZ2VyIHRoYW4gMTAgcmVzdWx0cyBpbgorICAgICAgICogb3V0LW9mLXJhbmdlIHJlY29uc3RydWN0ZWQgREMgdmFsdWVzIGR1cmluZyB0aGUgZmlyc3QgREMgc2NhbiwKKyAgICAgICAqIHdoaWNoIG1pZ2h0IGNhdXNlIHByb2JsZW1zIGZvciBzb21lIGRlY29kZXJzLgorICAgICAgICovCisjaWYgQklUU19JTl9KU0FNUExFID09IDgKKyNkZWZpbmUgTUFYX0FIX0FMIDEwCisjZWxzZQorI2RlZmluZSBNQVhfQUhfQUwgMTMKKyNlbmRpZgorICAgICAgaWYgKFNzIDwgMCB8fCBTcyA+PSBEQ1RTSVpFMiB8fCBTZSA8IFNzIHx8IFNlID49IERDVFNJWkUyIHx8CisJICBBaCA8IDAgfHwgQWggPiBNQVhfQUhfQUwgfHwgQWwgPCAwIHx8IEFsID4gTUFYX0FIX0FMKQorCUVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QUk9HX1NDUklQVCwgc2Nhbm5vKTsKKyAgICAgIGlmIChTcyA9PSAwKSB7CisJaWYgKFNlICE9IDApCQkvKiBEQyBhbmQgQUMgdG9nZXRoZXIgbm90IE9LICovCisJICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUFJPR19TQ1JJUFQsIHNjYW5ubyk7CisgICAgICB9IGVsc2UgeworCWlmIChuY29tcHMgIT0gMSkJLyogQUMgc2NhbnMgbXVzdCBiZSBmb3Igb25seSBvbmUgY29tcG9uZW50ICovCisJICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUFJPR19TQ1JJUFQsIHNjYW5ubyk7CisgICAgICB9CisgICAgICBmb3IgKGNpID0gMDsgY2kgPCBuY29tcHM7IGNpKyspIHsKKwlsYXN0X2JpdHBvc19wdHIgPSAmIGxhc3RfYml0cG9zW3NjYW5wdHItPmNvbXBvbmVudF9pbmRleFtjaV1dWzBdOworCWlmIChTcyAhPSAwICYmIGxhc3RfYml0cG9zX3B0clswXSA8IDApIC8qIEFDIHdpdGhvdXQgcHJpb3IgREMgc2NhbiAqLworCSAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BST0dfU0NSSVBULCBzY2Fubm8pOworCWZvciAoY29lZmkgPSBTczsgY29lZmkgPD0gU2U7IGNvZWZpKyspIHsKKwkgIGlmIChsYXN0X2JpdHBvc19wdHJbY29lZmldIDwgMCkgeworCSAgICAvKiBmaXJzdCBzY2FuIG9mIHRoaXMgY29lZmZpY2llbnQgKi8KKwkgICAgaWYgKEFoICE9IDApCisJICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BST0dfU0NSSVBULCBzY2Fubm8pOworCSAgfSBlbHNlIHsKKwkgICAgLyogbm90IGZpcnN0IHNjYW4gKi8KKwkgICAgaWYgKEFoICE9IGxhc3RfYml0cG9zX3B0cltjb2VmaV0gfHwgQWwgIT0gQWgtMSkKKwkgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUFJPR19TQ1JJUFQsIHNjYW5ubyk7CisJICB9CisJICBsYXN0X2JpdHBvc19wdHJbY29lZmldID0gQWw7CisJfQorICAgICAgfQorI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgIC8qIEZvciBzZXF1ZW50aWFsIEpQRUcsIGFsbCBwcm9ncmVzc2lvbiBwYXJhbWV0ZXJzIG11c3QgYmUgdGhlc2U6ICovCisgICAgICBpZiAoU3MgIT0gMCB8fCBTZSAhPSBEQ1RTSVpFMi0xIHx8IEFoICE9IDAgfHwgQWwgIT0gMCkKKwlFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUFJPR19TQ1JJUFQsIHNjYW5ubyk7CisgICAgICAvKiBNYWtlIHN1cmUgY29tcG9uZW50cyBhcmUgbm90IHNlbnQgdHdpY2UgKi8KKyAgICAgIGZvciAoY2kgPSAwOyBjaSA8IG5jb21wczsgY2krKykgeworCXRoaXNpID0gc2NhbnB0ci0+Y29tcG9uZW50X2luZGV4W2NpXTsKKwlpZiAoY29tcG9uZW50X3NlbnRbdGhpc2ldKQorCSAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NDQU5fU0NSSVBULCBzY2Fubm8pOworCWNvbXBvbmVudF9zZW50W3RoaXNpXSA9IFRSVUU7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLyogTm93IHZlcmlmeSB0aGF0IGV2ZXJ5dGhpbmcgZ290IHNlbnQuICovCisgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkgeworI2lmZGVmIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVECisgICAgLyogRm9yIHByb2dyZXNzaXZlIG1vZGUsIHdlIG9ubHkgY2hlY2sgdGhhdCBhdCBsZWFzdCBzb21lIERDIGRhdGEKKyAgICAgKiBnb3Qgc2VudCBmb3IgZWFjaCBjb21wb25lbnQ7IHRoZSBzcGVjIGRvZXMgbm90IHJlcXVpcmUgdGhhdCBhbGwgYml0cworICAgICAqIG9mIGFsbCBjb2VmZmljaWVudHMgYmUgdHJhbnNtaXR0ZWQuICBXb3VsZCBpdCBiZSB3aXNlciB0byBlbmZvcmNlCisgICAgICogdHJhbnNtaXNzaW9uIG9mIGFsbCBjb2VmZmljaWVudCBiaXRzPz8KKyAgICAgKi8KKyAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKKyAgICAgIGlmIChsYXN0X2JpdHBvc1tjaV1bMF0gPCAwKQorCUVSUkVYSVQoY2luZm8sIEpFUlJfTUlTU0lOR19EQVRBKTsKKyAgICB9CisjZW5kaWYKKyAgfSBlbHNlIHsKKyAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKKyAgICAgIGlmICghIGNvbXBvbmVudF9zZW50W2NpXSkKKwlFUlJFWElUKGNpbmZvLCBKRVJSX01JU1NJTkdfREFUQSk7CisgICAgfQorICB9Cit9CisKKyNlbmRpZiAvKiBDX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQgKi8KKworCitMT0NBTCh2b2lkKQorc2VsZWN0X3NjYW5fcGFyYW1ldGVycyAoal9jb21wcmVzc19wdHIgY2luZm8pCisvKiBTZXQgdXAgdGhlIHNjYW4gcGFyYW1ldGVycyBmb3IgdGhlIGN1cnJlbnQgc2NhbiAqLworeworICBpbnQgY2k7CisKKyNpZmRlZiBDX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQKKyAgaWYgKGNpbmZvLT5zY2FuX2luZm8gIT0gTlVMTCkgeworICAgIC8qIFByZXBhcmUgZm9yIGN1cnJlbnQgc2NhbiAtLS0gdGhlIHNjcmlwdCBpcyBhbHJlYWR5IHZhbGlkYXRlZCAqLworICAgIG15X21hc3Rlcl9wdHIgbWFzdGVyID0gKG15X21hc3Rlcl9wdHIpIGNpbmZvLT5tYXN0ZXI7CisgICAgY29uc3QganBlZ19zY2FuX2luZm8gKiBzY2FucHRyID0gY2luZm8tPnNjYW5faW5mbyArIG1hc3Rlci0+c2Nhbl9udW1iZXI7CisKKyAgICBjaW5mby0+Y29tcHNfaW5fc2NhbiA9IHNjYW5wdHItPmNvbXBzX2luX3NjYW47CisgICAgZm9yIChjaSA9IDA7IGNpIDwgc2NhbnB0ci0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworICAgICAgY2luZm8tPmN1cl9jb21wX2luZm9bY2ldID0KKwkmY2luZm8tPmNvbXBfaW5mb1tzY2FucHRyLT5jb21wb25lbnRfaW5kZXhbY2ldXTsKKyAgICB9CisgICAgY2luZm8tPlNzID0gc2NhbnB0ci0+U3M7CisgICAgY2luZm8tPlNlID0gc2NhbnB0ci0+U2U7CisgICAgY2luZm8tPkFoID0gc2NhbnB0ci0+QWg7CisgICAgY2luZm8tPkFsID0gc2NhbnB0ci0+QWw7CisgIH0KKyAgZWxzZQorI2VuZGlmCisgIHsKKyAgICAvKiBQcmVwYXJlIGZvciBzaW5nbGUgc2VxdWVudGlhbC1KUEVHIHNjYW4gY29udGFpbmluZyBhbGwgY29tcG9uZW50cyAqLworICAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgPiBNQVhfQ09NUFNfSU5fU0NBTikKKyAgICAgIEVSUkVYSVQyKGNpbmZvLCBKRVJSX0NPTVBPTkVOVF9DT1VOVCwgY2luZm8tPm51bV9jb21wb25lbnRzLAorCSAgICAgICBNQVhfQ09NUFNfSU5fU0NBTik7CisgICAgY2luZm8tPmNvbXBzX2luX3NjYW4gPSBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKSB7CisgICAgICBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV0gPSAmY2luZm8tPmNvbXBfaW5mb1tjaV07CisgICAgfQorICAgIGNpbmZvLT5TcyA9IDA7CisgICAgY2luZm8tPlNlID0gRENUU0laRTItMTsKKyAgICBjaW5mby0+QWggPSAwOworICAgIGNpbmZvLT5BbCA9IDA7CisgIH0KK30KKworCitMT0NBTCh2b2lkKQorcGVyX3NjYW5fc2V0dXAgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQorLyogRG8gY29tcHV0YXRpb25zIHRoYXQgYXJlIG5lZWRlZCBiZWZvcmUgcHJvY2Vzc2luZyBhIEpQRUcgc2NhbiAqLworLyogY2luZm8tPmNvbXBzX2luX3NjYW4gYW5kIGNpbmZvLT5jdXJfY29tcF9pbmZvW10gYXJlIGFscmVhZHkgc2V0ICovCit7CisgIGludCBjaSwgbWN1YmxrcywgdG1wOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworICAKKyAgaWYgKGNpbmZvLT5jb21wc19pbl9zY2FuID09IDEpIHsKKyAgICAKKyAgICAvKiBOb25pbnRlcmxlYXZlZCAoc2luZ2xlLWNvbXBvbmVudCkgc2NhbiAqLworICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1swXTsKKyAgICAKKyAgICAvKiBPdmVyYWxsIGltYWdlIHNpemUgaW4gTUNVcyAqLworICAgIGNpbmZvLT5NQ1VzX3Blcl9yb3cgPSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3M7CisgICAgY2luZm8tPk1DVV9yb3dzX2luX3NjYW4gPSBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzOworICAgIAorICAgIC8qIEZvciBub25pbnRlcmxlYXZlZCBzY2FuLCBhbHdheXMgb25lIGJsb2NrIHBlciBNQ1UgKi8KKyAgICBjb21wcHRyLT5NQ1Vfd2lkdGggPSAxOworICAgIGNvbXBwdHItPk1DVV9oZWlnaHQgPSAxOworICAgIGNvbXBwdHItPk1DVV9ibG9ja3MgPSAxOworICAgIGNvbXBwdHItPk1DVV9zYW1wbGVfd2lkdGggPSBEQ1RTSVpFOworICAgIGNvbXBwdHItPmxhc3RfY29sX3dpZHRoID0gMTsKKyAgICAvKiBGb3Igbm9uaW50ZXJsZWF2ZWQgc2NhbnMsIGl0IGlzIGNvbnZlbmllbnQgdG8gZGVmaW5lIGxhc3Rfcm93X2hlaWdodAorICAgICAqIGFzIHRoZSBudW1iZXIgb2YgYmxvY2sgcm93cyBwcmVzZW50IGluIHRoZSBsYXN0IGlNQ1Ugcm93LgorICAgICAqLworICAgIHRtcCA9IChpbnQpIChjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzICUgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcik7CisgICAgaWYgKHRtcCA9PSAwKSB0bXAgPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yOworICAgIGNvbXBwdHItPmxhc3Rfcm93X2hlaWdodCA9IHRtcDsKKyAgICAKKyAgICAvKiBQcmVwYXJlIGFycmF5IGRlc2NyaWJpbmcgTUNVIGNvbXBvc2l0aW9uICovCisgICAgY2luZm8tPmJsb2Nrc19pbl9NQ1UgPSAxOworICAgIGNpbmZvLT5NQ1VfbWVtYmVyc2hpcFswXSA9IDA7CisgICAgCisgIH0gZWxzZSB7CisgICAgCisgICAgLyogSW50ZXJsZWF2ZWQgKG11bHRpLWNvbXBvbmVudCkgc2NhbiAqLworICAgIGlmIChjaW5mby0+Y29tcHNfaW5fc2NhbiA8PSAwIHx8IGNpbmZvLT5jb21wc19pbl9zY2FuID4gTUFYX0NPTVBTX0lOX1NDQU4pCisgICAgICBFUlJFWElUMihjaW5mbywgSkVSUl9DT01QT05FTlRfQ09VTlQsIGNpbmZvLT5jb21wc19pbl9zY2FuLAorCSAgICAgICBNQVhfQ09NUFNfSU5fU0NBTik7CisgICAgCisgICAgLyogT3ZlcmFsbCBpbWFnZSBzaXplIGluIE1DVXMgKi8KKyAgICBjaW5mby0+TUNVc19wZXJfcm93ID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGgsCisJCSAgICAobG9uZykgKGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvcipEQ1RTSVpFKSk7CisgICAgY2luZm8tPk1DVV9yb3dzX2luX3NjYW4gPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQsCisJCSAgICAobG9uZykgKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcipEQ1RTSVpFKSk7CisgICAgCisgICAgY2luZm8tPmJsb2Nrc19pbl9NQ1UgPSAwOworICAgIAorICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOworICAgICAgLyogU2FtcGxpbmcgZmFjdG9ycyBnaXZlICMgb2YgYmxvY2tzIG9mIGNvbXBvbmVudCBpbiBlYWNoIE1DVSAqLworICAgICAgY29tcHB0ci0+TUNVX3dpZHRoID0gY29tcHB0ci0+aF9zYW1wX2ZhY3RvcjsKKyAgICAgIGNvbXBwdHItPk1DVV9oZWlnaHQgPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yOworICAgICAgY29tcHB0ci0+TUNVX2Jsb2NrcyA9IGNvbXBwdHItPk1DVV93aWR0aCAqIGNvbXBwdHItPk1DVV9oZWlnaHQ7CisgICAgICBjb21wcHRyLT5NQ1Vfc2FtcGxlX3dpZHRoID0gY29tcHB0ci0+TUNVX3dpZHRoICogRENUU0laRTsKKyAgICAgIC8qIEZpZ3VyZSBudW1iZXIgb2Ygbm9uLWR1bW15IGJsb2NrcyBpbiBsYXN0IE1DVSBjb2x1bW4gJiByb3cgKi8KKyAgICAgIHRtcCA9IChpbnQpIChjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgJSBjb21wcHRyLT5NQ1Vfd2lkdGgpOworICAgICAgaWYgKHRtcCA9PSAwKSB0bXAgPSBjb21wcHRyLT5NQ1Vfd2lkdGg7CisgICAgICBjb21wcHRyLT5sYXN0X2NvbF93aWR0aCA9IHRtcDsKKyAgICAgIHRtcCA9IChpbnQpIChjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzICUgY29tcHB0ci0+TUNVX2hlaWdodCk7CisgICAgICBpZiAodG1wID09IDApIHRtcCA9IGNvbXBwdHItPk1DVV9oZWlnaHQ7CisgICAgICBjb21wcHRyLT5sYXN0X3Jvd19oZWlnaHQgPSB0bXA7CisgICAgICAvKiBQcmVwYXJlIGFycmF5IGRlc2NyaWJpbmcgTUNVIGNvbXBvc2l0aW9uICovCisgICAgICBtY3VibGtzID0gY29tcHB0ci0+TUNVX2Jsb2NrczsKKyAgICAgIGlmIChjaW5mby0+YmxvY2tzX2luX01DVSArIG1jdWJsa3MgPiBDX01BWF9CTE9DS1NfSU5fTUNVKQorCUVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX01DVV9TSVpFKTsKKyAgICAgIHdoaWxlIChtY3VibGtzLS0gPiAwKSB7CisJY2luZm8tPk1DVV9tZW1iZXJzaGlwW2NpbmZvLT5ibG9ja3NfaW5fTUNVKytdID0gY2k7CisgICAgICB9CisgICAgfQorICAgIAorICB9CisKKyAgLyogQ29udmVydCByZXN0YXJ0IHNwZWNpZmllZCBpbiByb3dzIHRvIGFjdHVhbCBNQ1UgY291bnQuICovCisgIC8qIE5vdGUgdGhhdCBjb3VudCBtdXN0IGZpdCBpbiAxNiBiaXRzLCBzbyB3ZSBwcm92aWRlIGxpbWl0aW5nLiAqLworICBpZiAoY2luZm8tPnJlc3RhcnRfaW5fcm93cyA+IDApIHsKKyAgICBsb25nIG5vbWluYWwgPSAobG9uZykgY2luZm8tPnJlc3RhcnRfaW5fcm93cyAqIChsb25nKSBjaW5mby0+TUNVc19wZXJfcm93OworICAgIGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsID0gKHVuc2lnbmVkIGludCkgTUlOKG5vbWluYWwsIDY1NTM1TCk7CisgIH0KK30KKworCisvKgorICogUGVyLXBhc3Mgc2V0dXAuCisgKiBUaGlzIGlzIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcGFzcy4gIFdlIGRldGVybWluZSB3aGljaCBtb2R1bGVzCisgKiB3aWxsIGJlIGFjdGl2ZSBkdXJpbmcgdGhpcyBwYXNzIGFuZCBnaXZlIHRoZW0gYXBwcm9wcmlhdGUgc3RhcnRfcGFzcyBjYWxscy4KKyAqIFdlIGFsc28gc2V0IGlzX2xhc3RfcGFzcyB0byBpbmRpY2F0ZSB3aGV0aGVyIGFueSBtb3JlIHBhc3NlcyB3aWxsIGJlCisgKiByZXF1aXJlZC4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3ByZXBhcmVfZm9yX3Bhc3MgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9tYXN0ZXJfcHRyIG1hc3RlciA9IChteV9tYXN0ZXJfcHRyKSBjaW5mby0+bWFzdGVyOworCisgIHN3aXRjaCAobWFzdGVyLT5wYXNzX3R5cGUpIHsKKyAgY2FzZSBtYWluX3Bhc3M6CisgICAgLyogSW5pdGlhbCBwYXNzOiB3aWxsIGNvbGxlY3QgaW5wdXQgZGF0YSwgYW5kIGRvIGVpdGhlciBIdWZmbWFuCisgICAgICogb3B0aW1pemF0aW9uIG9yIGRhdGEgb3V0cHV0IGZvciB0aGUgZmlyc3Qgc2Nhbi4KKyAgICAgKi8KKyAgICBzZWxlY3Rfc2Nhbl9wYXJhbWV0ZXJzKGNpbmZvKTsKKyAgICBwZXJfc2Nhbl9zZXR1cChjaW5mbyk7CisgICAgaWYgKCEgY2luZm8tPnJhd19kYXRhX2luKSB7CisgICAgICAoKmNpbmZvLT5jY29udmVydC0+c3RhcnRfcGFzcykgKGNpbmZvKTsKKyAgICAgICgqY2luZm8tPmRvd25zYW1wbGUtPnN0YXJ0X3Bhc3MpIChjaW5mbyk7CisgICAgICAoKmNpbmZvLT5wcmVwLT5zdGFydF9wYXNzKSAoY2luZm8sIEpCVUZfUEFTU19USFJVKTsKKyAgICB9CisgICAgKCpjaW5mby0+ZmRjdC0+c3RhcnRfcGFzcykgKGNpbmZvKTsKKyAgICAoKmNpbmZvLT5lbnRyb3B5LT5zdGFydF9wYXNzKSAoY2luZm8sIGNpbmZvLT5vcHRpbWl6ZV9jb2RpbmcpOworICAgICgqY2luZm8tPmNvZWYtPnN0YXJ0X3Bhc3MpIChjaW5mbywKKwkJCQkobWFzdGVyLT50b3RhbF9wYXNzZXMgPiAxID8KKwkJCQkgSkJVRl9TQVZFX0FORF9QQVNTIDogSkJVRl9QQVNTX1RIUlUpKTsKKyAgICAoKmNpbmZvLT5tYWluLT5zdGFydF9wYXNzKSAoY2luZm8sIEpCVUZfUEFTU19USFJVKTsKKyAgICBpZiAoY2luZm8tPm9wdGltaXplX2NvZGluZykgeworICAgICAgLyogTm8gaW1tZWRpYXRlIGRhdGEgb3V0cHV0OyBwb3N0cG9uZSB3cml0aW5nIGZyYW1lL3NjYW4gaGVhZGVycyAqLworICAgICAgbWFzdGVyLT5wdWIuY2FsbF9wYXNzX3N0YXJ0dXAgPSBGQUxTRTsKKyAgICB9IGVsc2UgeworICAgICAgLyogV2lsbCB3cml0ZSBmcmFtZS9zY2FuIGhlYWRlcnMgYXQgZmlyc3QganBlZ193cml0ZV9zY2FubGluZXMgY2FsbCAqLworICAgICAgbWFzdGVyLT5wdWIuY2FsbF9wYXNzX3N0YXJ0dXAgPSBUUlVFOworICAgIH0KKyAgICBicmVhazsKKyNpZmRlZiBFTlRST1BZX09QVF9TVVBQT1JURUQKKyAgY2FzZSBodWZmX29wdF9wYXNzOgorICAgIC8qIERvIEh1ZmZtYW4gb3B0aW1pemF0aW9uIGZvciBhIHNjYW4gYWZ0ZXIgdGhlIGZpcnN0IG9uZS4gKi8KKyAgICBzZWxlY3Rfc2Nhbl9wYXJhbWV0ZXJzKGNpbmZvKTsKKyAgICBwZXJfc2Nhbl9zZXR1cChjaW5mbyk7CisgICAgaWYgKGNpbmZvLT5TcyAhPSAwIHx8IGNpbmZvLT5BaCA9PSAwIHx8IGNpbmZvLT5hcml0aF9jb2RlKSB7CisgICAgICAoKmNpbmZvLT5lbnRyb3B5LT5zdGFydF9wYXNzKSAoY2luZm8sIFRSVUUpOworICAgICAgKCpjaW5mby0+Y29lZi0+c3RhcnRfcGFzcykgKGNpbmZvLCBKQlVGX0NSQU5LX0RFU1QpOworICAgICAgbWFzdGVyLT5wdWIuY2FsbF9wYXNzX3N0YXJ0dXAgPSBGQUxTRTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgICAvKiBTcGVjaWFsIGNhc2U6IEh1ZmZtYW4gREMgcmVmaW5lbWVudCBzY2FucyBuZWVkIG5vIEh1ZmZtYW4gdGFibGUKKyAgICAgKiBhbmQgdGhlcmVmb3JlIHdlIGNhbiBza2lwIHRoZSBvcHRpbWl6YXRpb24gcGFzcyBmb3IgdGhlbS4KKyAgICAgKi8KKyAgICBtYXN0ZXItPnBhc3NfdHlwZSA9IG91dHB1dF9wYXNzOworICAgIG1hc3Rlci0+cGFzc19udW1iZXIrKzsKKyAgICAvKkZBTExUSFJPVUdIKi8KKyNlbmRpZgorICBjYXNlIG91dHB1dF9wYXNzOgorICAgIC8qIERvIGEgZGF0YS1vdXRwdXQgcGFzcy4gKi8KKyAgICAvKiBXZSBuZWVkIG5vdCByZXBlYXQgcGVyLXNjYW4gc2V0dXAgaWYgcHJpb3Igb3B0aW1pemF0aW9uIHBhc3MgZGlkIGl0LiAqLworICAgIGlmICghIGNpbmZvLT5vcHRpbWl6ZV9jb2RpbmcpIHsKKyAgICAgIHNlbGVjdF9zY2FuX3BhcmFtZXRlcnMoY2luZm8pOworICAgICAgcGVyX3NjYW5fc2V0dXAoY2luZm8pOworICAgIH0KKyAgICAoKmNpbmZvLT5lbnRyb3B5LT5zdGFydF9wYXNzKSAoY2luZm8sIEZBTFNFKTsKKyAgICAoKmNpbmZvLT5jb2VmLT5zdGFydF9wYXNzKSAoY2luZm8sIEpCVUZfQ1JBTktfREVTVCk7CisgICAgLyogV2UgZW1pdCBmcmFtZS9zY2FuIGhlYWRlcnMgbm93ICovCisgICAgaWYgKG1hc3Rlci0+c2Nhbl9udW1iZXIgPT0gMCkKKyAgICAgICgqY2luZm8tPm1hcmtlci0+d3JpdGVfZnJhbWVfaGVhZGVyKSAoY2luZm8pOworICAgICgqY2luZm8tPm1hcmtlci0+d3JpdGVfc2Nhbl9oZWFkZXIpIChjaW5mbyk7CisgICAgbWFzdGVyLT5wdWIuY2FsbF9wYXNzX3N0YXJ0dXAgPSBGQUxTRTsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisgIH0KKworICBtYXN0ZXItPnB1Yi5pc19sYXN0X3Bhc3MgPSAobWFzdGVyLT5wYXNzX251bWJlciA9PSBtYXN0ZXItPnRvdGFsX3Bhc3Nlcy0xKTsKKworICAvKiBTZXQgdXAgcHJvZ3Jlc3MgbW9uaXRvcidzIHBhc3MgaW5mbyBpZiBwcmVzZW50ICovCisgIGlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCkgeworICAgIGNpbmZvLT5wcm9ncmVzcy0+Y29tcGxldGVkX3Bhc3NlcyA9IG1hc3Rlci0+cGFzc19udW1iZXI7CisgICAgY2luZm8tPnByb2dyZXNzLT50b3RhbF9wYXNzZXMgPSBtYXN0ZXItPnRvdGFsX3Bhc3NlczsKKyAgfQorfQorCisKKy8qCisgKiBTcGVjaWFsIHN0YXJ0LW9mLXBhc3MgaG9vay4KKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IGpwZWdfd3JpdGVfc2NhbmxpbmVzIGlmIGNhbGxfcGFzc19zdGFydHVwIGlzIFRSVUUuCisgKiBJbiBzaW5nbGUtcGFzcyBwcm9jZXNzaW5nLCB3ZSBuZWVkIHRoaXMgaG9vayBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8KKyAqIHdyaXRlIGZyYW1lL3NjYW4gaGVhZGVycyBkdXJpbmcganBlZ19zdGFydF9jb21wcmVzczsgd2Ugd2FudCB0byBsZXQgdGhlCisgKiBhcHBsaWNhdGlvbiB3cml0ZSBDT00gbWFya2VycyBldGMuIGJldHdlZW4ganBlZ19zdGFydF9jb21wcmVzcyBhbmQgdGhlCisgKiBqcGVnX3dyaXRlX3NjYW5saW5lcyBsb29wLgorICogSW4gbXVsdGktcGFzcyBwcm9jZXNzaW5nLCB0aGlzIHJvdXRpbmUgaXMgbm90IHVzZWQuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitwYXNzX3N0YXJ0dXAgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBjaW5mby0+bWFzdGVyLT5jYWxsX3Bhc3Nfc3RhcnR1cCA9IEZBTFNFOyAvKiByZXNldCBmbGFnIHNvIGNhbGwgb25seSBvbmNlICovCisKKyAgKCpjaW5mby0+bWFya2VyLT53cml0ZV9mcmFtZV9oZWFkZXIpIChjaW5mbyk7CisgICgqY2luZm8tPm1hcmtlci0+d3JpdGVfc2Nhbl9oZWFkZXIpIChjaW5mbyk7Cit9CisKKworLyoKKyAqIEZpbmlzaCB1cCBhdCBlbmQgb2YgcGFzcy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2ZpbmlzaF9wYXNzX21hc3RlciAoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X21hc3Rlcl9wdHIgbWFzdGVyID0gKG15X21hc3Rlcl9wdHIpIGNpbmZvLT5tYXN0ZXI7CisKKyAgLyogVGhlIGVudHJvcHkgY29kZXIgYWx3YXlzIG5lZWRzIGFuIGVuZC1vZi1wYXNzIGNhbGwsCisgICAqIGVpdGhlciB0byBhbmFseXplIHN0YXRpc3RpY3Mgb3IgdG8gZmx1c2ggaXRzIG91dHB1dCBidWZmZXIuCisgICAqLworICAoKmNpbmZvLT5lbnRyb3B5LT5maW5pc2hfcGFzcykgKGNpbmZvKTsKKworICAvKiBVcGRhdGUgc3RhdGUgZm9yIG5leHQgcGFzcyAqLworICBzd2l0Y2ggKG1hc3Rlci0+cGFzc190eXBlKSB7CisgIGNhc2UgbWFpbl9wYXNzOgorICAgIC8qIG5leHQgcGFzcyBpcyBlaXRoZXIgb3V0cHV0IG9mIHNjYW4gMCAoYWZ0ZXIgb3B0aW1pemF0aW9uKQorICAgICAqIG9yIG91dHB1dCBvZiBzY2FuIDEgKGlmIG5vIG9wdGltaXphdGlvbikuCisgICAgICovCisgICAgbWFzdGVyLT5wYXNzX3R5cGUgPSBvdXRwdXRfcGFzczsKKyAgICBpZiAoISBjaW5mby0+b3B0aW1pemVfY29kaW5nKQorICAgICAgbWFzdGVyLT5zY2FuX251bWJlcisrOworICAgIGJyZWFrOworICBjYXNlIGh1ZmZfb3B0X3Bhc3M6CisgICAgLyogbmV4dCBwYXNzIGlzIGFsd2F5cyBvdXRwdXQgb2YgY3VycmVudCBzY2FuICovCisgICAgbWFzdGVyLT5wYXNzX3R5cGUgPSBvdXRwdXRfcGFzczsKKyAgICBicmVhazsKKyAgY2FzZSBvdXRwdXRfcGFzczoKKyAgICAvKiBuZXh0IHBhc3MgaXMgZWl0aGVyIG9wdGltaXphdGlvbiBvciBvdXRwdXQgb2YgbmV4dCBzY2FuICovCisgICAgaWYgKGNpbmZvLT5vcHRpbWl6ZV9jb2RpbmcpCisgICAgICBtYXN0ZXItPnBhc3NfdHlwZSA9IGh1ZmZfb3B0X3Bhc3M7CisgICAgbWFzdGVyLT5zY2FuX251bWJlcisrOworICAgIGJyZWFrOworICB9CisKKyAgbWFzdGVyLT5wYXNzX251bWJlcisrOworfQorCisKKy8qCisgKiBJbml0aWFsaXplIG1hc3RlciBjb21wcmVzc2lvbiBjb250cm9sLgorICovCisKK0dMT0JBTCh2b2lkKQoramluaXRfY19tYXN0ZXJfY29udHJvbCAoal9jb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gdHJhbnNjb2RlX29ubHkpCit7CisgIG15X21hc3Rlcl9wdHIgbWFzdGVyOworCisgIG1hc3RlciA9IChteV9tYXN0ZXJfcHRyKQorICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkJCQkgIFNJWkVPRihteV9jb21wX21hc3RlcikpOworICBjaW5mby0+bWFzdGVyID0gKHN0cnVjdCBqcGVnX2NvbXBfbWFzdGVyICopIG1hc3RlcjsKKyAgbWFzdGVyLT5wdWIucHJlcGFyZV9mb3JfcGFzcyA9IHByZXBhcmVfZm9yX3Bhc3M7CisgIG1hc3Rlci0+cHViLnBhc3Nfc3RhcnR1cCA9IHBhc3Nfc3RhcnR1cDsKKyAgbWFzdGVyLT5wdWIuZmluaXNoX3Bhc3MgPSBmaW5pc2hfcGFzc19tYXN0ZXI7CisgIG1hc3Rlci0+cHViLmlzX2xhc3RfcGFzcyA9IEZBTFNFOworCisgIC8qIFZhbGlkYXRlIHBhcmFtZXRlcnMsIGRldGVybWluZSBkZXJpdmVkIHZhbHVlcyAqLworICBpbml0aWFsX3NldHVwKGNpbmZvKTsKKworICBpZiAoY2luZm8tPnNjYW5faW5mbyAhPSBOVUxMKSB7CisjaWZkZWYgQ19NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVECisgICAgdmFsaWRhdGVfc2NyaXB0KGNpbmZvKTsKKyNlbHNlCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOworI2VuZGlmCisgIH0gZWxzZSB7CisgICAgY2luZm8tPnByb2dyZXNzaXZlX21vZGUgPSBGQUxTRTsKKyAgICBjaW5mby0+bnVtX3NjYW5zID0gMTsKKyAgfQorCisgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkJLyogIFRFTVBPUkFSWSBIQUNLID8/PyAqLworICAgIGNpbmZvLT5vcHRpbWl6ZV9jb2RpbmcgPSBUUlVFOyAvKiBhc3N1bWUgZGVmYXVsdCB0YWJsZXMgbm8gZ29vZCBmb3IgcHJvZ3Jlc3NpdmUgbW9kZSAqLworCisgIC8qIEluaXRpYWxpemUgbXkgcHJpdmF0ZSBzdGF0ZSAqLworICBpZiAodHJhbnNjb2RlX29ubHkpIHsKKyAgICAvKiBubyBtYWluIHBhc3MgaW4gdHJhbnNjb2RpbmcgKi8KKyAgICBpZiAoY2luZm8tPm9wdGltaXplX2NvZGluZykKKyAgICAgIG1hc3Rlci0+cGFzc190eXBlID0gaHVmZl9vcHRfcGFzczsKKyAgICBlbHNlCisgICAgICBtYXN0ZXItPnBhc3NfdHlwZSA9IG91dHB1dF9wYXNzOworICB9IGVsc2UgeworICAgIC8qIGZvciBub3JtYWwgY29tcHJlc3Npb24sIGZpcnN0IHBhc3MgaXMgYWx3YXlzIHRoaXMgdHlwZTogKi8KKyAgICBtYXN0ZXItPnBhc3NfdHlwZSA9IG1haW5fcGFzczsKKyAgfQorICBtYXN0ZXItPnNjYW5fbnVtYmVyID0gMDsKKyAgbWFzdGVyLT5wYXNzX251bWJlciA9IDA7CisgIGlmIChjaW5mby0+b3B0aW1pemVfY29kaW5nKQorICAgIG1hc3Rlci0+dG90YWxfcGFzc2VzID0gY2luZm8tPm51bV9zY2FucyAqIDI7CisgIGVsc2UKKyAgICBtYXN0ZXItPnRvdGFsX3Bhc3NlcyA9IGNpbmZvLT5udW1fc2NhbnM7Cit9CisKKyNlbmRpZiAvL19GWF9KUEVHX1RVUkJPXwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamNvbWFwaS5jIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamNvbWFwaS5jCmluZGV4IDk2NDkwOWEuLmFhZDM3ZDggMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pjb21hcGkuYworKysgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY29tYXBpLmMKQEAgLTEsMTA5ICsxLDEwOSBAQAotI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykNCi0vKg0KLSAqIGpjb21hcGkuYw0KLSAqDQotICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTcsIFRob21hcyBHLiBMYW5lLg0KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuDQotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLg0KLSAqDQotICogVGhpcyBmaWxlIGNvbnRhaW5zIGFwcGxpY2F0aW9uIGludGVyZmFjZSByb3V0aW5lcyB0aGF0IGFyZSB1c2VkIGZvciBib3RoDQotICogY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24uDQotICovDQotDQotI2RlZmluZSBKUEVHX0lOVEVSTkFMUw0KLSNpbmNsdWRlICJqaW5jbHVkZS5oIg0KLSNpbmNsdWRlICJqcGVnbGliLmgiDQotDQotDQotLyoNCi0gKiBBYm9ydCBwcm9jZXNzaW5nIG9mIGEgSlBFRyBjb21wcmVzc2lvbiBvciBkZWNvbXByZXNzaW9uIG9wZXJhdGlvbiwNCi0gKiBidXQgZG9uJ3QgZGVzdHJveSB0aGUgb2JqZWN0IGl0c2VsZi4NCi0gKg0KLSAqIEZvciB0aGlzLCB3ZSBtZXJlbHkgY2xlYW4gdXAgYWxsIHRoZSBub25wZXJtYW5lbnQgbWVtb3J5IHBvb2xzLg0KLSAqIE5vdGUgdGhhdCB0ZW1wIGZpbGVzICh2aXJ0dWFsIGFycmF5cykgYXJlIG5vdCBhbGxvd2VkIHRvIGJlbG9uZyB0bw0KLSAqIHRoZSBwZXJtYW5lbnQgcG9vbCwgc28gd2Ugd2lsbCBiZSBhYmxlIHRvIGNsb3NlIGFsbCB0ZW1wIGZpbGVzIGhlcmUuDQotICogQ2xvc2luZyBhIGRhdGEgc291cmNlIG9yIGRlc3RpbmF0aW9uLCBpZiBuZWNlc3NhcnksIGlzIHRoZSBhcHBsaWNhdGlvbidzDQotICogcmVzcG9uc2liaWxpdHkuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotanBlZ19hYm9ydCAoal9jb21tb25fcHRyIGNpbmZvKQ0KLXsNCi0gIGludCBwb29sOw0KLQ0KLSAgLyogRG8gbm90aGluZyBpZiBjYWxsZWQgb24gYSBub3QtaW5pdGlhbGl6ZWQgb3IgZGVzdHJveWVkIEpQRUcgb2JqZWN0LiAqLw0KLSAgaWYgKGNpbmZvLT5tZW0gPT0gTlVMTCkNCi0gICAgcmV0dXJuOw0KLQ0KLSAgLyogUmVsZWFzaW5nIHBvb2xzIGluIHJldmVyc2Ugb3JkZXIgbWlnaHQgaGVscCBhdm9pZCBmcmFnbWVudGF0aW9uDQotICAgKiB3aXRoIHNvbWUgKGJyYWluLWRhbWFnZWQpIG1hbGxvYyBsaWJyYXJpZXMuDQotICAgKi8NCi0gIGZvciAocG9vbCA9IEpQT09MX05VTVBPT0xTLTE7IHBvb2wgPiBKUE9PTF9QRVJNQU5FTlQ7IHBvb2wtLSkgew0KLSAgICAoKmNpbmZvLT5tZW0tPmZyZWVfcG9vbCkgKGNpbmZvLCBwb29sKTsNCi0gIH0NCi0NCi0gIC8qIFJlc2V0IG92ZXJhbGwgc3RhdGUgZm9yIHBvc3NpYmxlIHJldXNlIG9mIG9iamVjdCAqLw0KLSAgaWYgKGNpbmZvLT5pc19kZWNvbXByZXNzb3IpIHsNCi0gICAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IERTVEFURV9TVEFSVDsNCi0gICAgLyogVHJ5IHRvIGtlZXAgYXBwbGljYXRpb24gZnJvbSBhY2Nlc3Npbmcgbm93LWRlbGV0ZWQgbWFya2VyIGxpc3QuDQotICAgICAqIEEgYml0IGtsdWRneSB0byBkbyBpdCBoZXJlLCBidXQgdGhpcyBpcyB0aGUgbW9zdCBjZW50cmFsIHBsYWNlLg0KLSAgICAgKi8NCi0gICAgKChqX2RlY29tcHJlc3NfcHRyKSBjaW5mbyktPm1hcmtlcl9saXN0ID0gTlVMTDsNCi0gIH0gZWxzZSB7DQotICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBDU1RBVEVfU1RBUlQ7DQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogRGVzdHJ1Y3Rpb24gb2YgYSBKUEVHIG9iamVjdC4NCi0gKg0KLSAqIEV2ZXJ5dGhpbmcgZ2V0cyBkZWFsbG9jYXRlZCBleGNlcHQgdGhlIG1hc3RlciBqcGVnX2NvbXByZXNzX3N0cnVjdCBpdHNlbGYNCi0gKiBhbmQgdGhlIGVycm9yIG1hbmFnZXIgc3RydWN0LiAgQm90aCBvZiB0aGVzZSBhcmUgc3VwcGxpZWQgYnkgdGhlIGFwcGxpY2F0aW9uDQotICogYW5kIG11c3QgYmUgZnJlZWQsIGlmIG5lY2Vzc2FyeSwgYnkgdGhlIGFwcGxpY2F0aW9uLiAgKE9mdGVuIHRoZXkgYXJlIG9uDQotICogdGhlIHN0YWNrIGFuZCBzbyBkb24ndCBuZWVkIHRvIGJlIGZyZWVkIGFueXdheS4pDQotICogQ2xvc2luZyBhIGRhdGEgc291cmNlIG9yIGRlc3RpbmF0aW9uLCBpZiBuZWNlc3NhcnksIGlzIHRoZSBhcHBsaWNhdGlvbidzDQotICogcmVzcG9uc2liaWxpdHkuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotanBlZ19kZXN0cm95IChqX2NvbW1vbl9wdHIgY2luZm8pDQotew0KLSAgLyogV2UgbmVlZCBvbmx5IHRlbGwgdGhlIG1lbW9yeSBtYW5hZ2VyIHRvIHJlbGVhc2UgZXZlcnl0aGluZy4gKi8NCi0gIC8qIE5COiBtZW0gcG9pbnRlciBpcyBOVUxMIGlmIG1lbW9yeSBtZ3IgZmFpbGVkIHRvIGluaXRpYWxpemUuICovDQotICBpZiAoY2luZm8tPm1lbSAhPSBOVUxMKQ0KLSAgICAoKmNpbmZvLT5tZW0tPnNlbGZfZGVzdHJ1Y3QpIChjaW5mbyk7DQotICBjaW5mby0+bWVtID0gTlVMTDsJCS8qIGJlIHNhZmUgaWYganBlZ19kZXN0cm95IGlzIGNhbGxlZCB0d2ljZSAqLw0KLSAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IDA7CS8qIG1hcmsgaXQgZGVzdHJveWVkICovDQotfQ0KLQ0KLQ0KLS8qDQotICogQ29udmVuaWVuY2Ugcm91dGluZXMgZm9yIGFsbG9jYXRpbmcgcXVhbnRpemF0aW9uIGFuZCBIdWZmbWFuIHRhYmxlcy4NCi0gKiAoV291bGQganV0aWxzLmMgYmUgYSBtb3JlIHJlYXNvbmFibGUgcGxhY2UgdG8gcHV0IHRoZXNlPykNCi0gKi8NCi0NCi1HTE9CQUwoSlFVQU5UX1RCTCAqKQ0KLWpwZWdfYWxsb2NfcXVhbnRfdGFibGUgKGpfY29tbW9uX3B0ciBjaW5mbykNCi17DQotICBKUVVBTlRfVEJMICp0Ymw7DQotDQotICB0YmwgPSAoSlFVQU5UX1RCTCAqKQ0KLSAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoY2luZm8sIEpQT09MX1BFUk1BTkVOVCwgU0laRU9GKEpRVUFOVF9UQkwpKTsNCi0gIHRibC0+c2VudF90YWJsZSA9IEZBTFNFOwkvKiBtYWtlIHN1cmUgdGhpcyBpcyBmYWxzZSBpbiBhbnkgbmV3IHRhYmxlICovDQotICByZXR1cm4gdGJsOw0KLX0NCi0NCi0NCi1HTE9CQUwoSkhVRkZfVEJMICopDQotanBlZ19hbGxvY19odWZmX3RhYmxlIChqX2NvbW1vbl9wdHIgY2luZm8pDQotew0KLSAgSkhVRkZfVEJMICp0Ymw7DQotDQotICB0YmwgPSAoSkhVRkZfVEJMICopDQotICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpIChjaW5mbywgSlBPT0xfUEVSTUFORU5ULCBTSVpFT0YoSkhVRkZfVEJMKSk7DQotICB0YmwtPnNlbnRfdGFibGUgPSBGQUxTRTsJLyogbWFrZSBzdXJlIHRoaXMgaXMgZmFsc2UgaW4gYW55IG5ldyB0YWJsZSAqLw0KLSAgcmV0dXJuIHRibDsNCi19DQotDQotI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fDQorI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykKKy8qCisgKiBqY29tYXBpLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhcHBsaWNhdGlvbiBpbnRlcmZhY2Ugcm91dGluZXMgdGhhdCBhcmUgdXNlZCBmb3IgYm90aAorICogY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24uCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorCisKKy8qCisgKiBBYm9ydCBwcm9jZXNzaW5nIG9mIGEgSlBFRyBjb21wcmVzc2lvbiBvciBkZWNvbXByZXNzaW9uIG9wZXJhdGlvbiwKKyAqIGJ1dCBkb24ndCBkZXN0cm95IHRoZSBvYmplY3QgaXRzZWxmLgorICoKKyAqIEZvciB0aGlzLCB3ZSBtZXJlbHkgY2xlYW4gdXAgYWxsIHRoZSBub25wZXJtYW5lbnQgbWVtb3J5IHBvb2xzLgorICogTm90ZSB0aGF0IHRlbXAgZmlsZXMgKHZpcnR1YWwgYXJyYXlzKSBhcmUgbm90IGFsbG93ZWQgdG8gYmVsb25nIHRvCisgKiB0aGUgcGVybWFuZW50IHBvb2wsIHNvIHdlIHdpbGwgYmUgYWJsZSB0byBjbG9zZSBhbGwgdGVtcCBmaWxlcyBoZXJlLgorICogQ2xvc2luZyBhIGRhdGEgc291cmNlIG9yIGRlc3RpbmF0aW9uLCBpZiBuZWNlc3NhcnksIGlzIHRoZSBhcHBsaWNhdGlvbidzCisgKiByZXNwb25zaWJpbGl0eS4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfYWJvcnQgKGpfY29tbW9uX3B0ciBjaW5mbykKK3sKKyAgaW50IHBvb2w7CisKKyAgLyogRG8gbm90aGluZyBpZiBjYWxsZWQgb24gYSBub3QtaW5pdGlhbGl6ZWQgb3IgZGVzdHJveWVkIEpQRUcgb2JqZWN0LiAqLworICBpZiAoY2luZm8tPm1lbSA9PSBOVUxMKQorICAgIHJldHVybjsKKworICAvKiBSZWxlYXNpbmcgcG9vbHMgaW4gcmV2ZXJzZSBvcmRlciBtaWdodCBoZWxwIGF2b2lkIGZyYWdtZW50YXRpb24KKyAgICogd2l0aCBzb21lIChicmFpbi1kYW1hZ2VkKSBtYWxsb2MgbGlicmFyaWVzLgorICAgKi8KKyAgZm9yIChwb29sID0gSlBPT0xfTlVNUE9PTFMtMTsgcG9vbCA+IEpQT09MX1BFUk1BTkVOVDsgcG9vbC0tKSB7CisgICAgKCpjaW5mby0+bWVtLT5mcmVlX3Bvb2wpIChjaW5mbywgcG9vbCk7CisgIH0KKworICAvKiBSZXNldCBvdmVyYWxsIHN0YXRlIGZvciBwb3NzaWJsZSByZXVzZSBvZiBvYmplY3QgKi8KKyAgaWYgKGNpbmZvLT5pc19kZWNvbXByZXNzb3IpIHsKKyAgICBjaW5mby0+Z2xvYmFsX3N0YXRlID0gRFNUQVRFX1NUQVJUOworICAgIC8qIFRyeSB0byBrZWVwIGFwcGxpY2F0aW9uIGZyb20gYWNjZXNzaW5nIG5vdy1kZWxldGVkIG1hcmtlciBsaXN0LgorICAgICAqIEEgYml0IGtsdWRneSB0byBkbyBpdCBoZXJlLCBidXQgdGhpcyBpcyB0aGUgbW9zdCBjZW50cmFsIHBsYWNlLgorICAgICAqLworICAgICgoal9kZWNvbXByZXNzX3B0cikgY2luZm8pLT5tYXJrZXJfbGlzdCA9IE5VTEw7CisgIH0gZWxzZSB7CisgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IENTVEFURV9TVEFSVDsKKyAgfQorfQorCisKKy8qCisgKiBEZXN0cnVjdGlvbiBvZiBhIEpQRUcgb2JqZWN0LgorICoKKyAqIEV2ZXJ5dGhpbmcgZ2V0cyBkZWFsbG9jYXRlZCBleGNlcHQgdGhlIG1hc3RlciBqcGVnX2NvbXByZXNzX3N0cnVjdCBpdHNlbGYKKyAqIGFuZCB0aGUgZXJyb3IgbWFuYWdlciBzdHJ1Y3QuICBCb3RoIG9mIHRoZXNlIGFyZSBzdXBwbGllZCBieSB0aGUgYXBwbGljYXRpb24KKyAqIGFuZCBtdXN0IGJlIGZyZWVkLCBpZiBuZWNlc3NhcnksIGJ5IHRoZSBhcHBsaWNhdGlvbi4gIChPZnRlbiB0aGV5IGFyZSBvbgorICogdGhlIHN0YWNrIGFuZCBzbyBkb24ndCBuZWVkIHRvIGJlIGZyZWVkIGFueXdheS4pCisgKiBDbG9zaW5nIGEgZGF0YSBzb3VyY2Ugb3IgZGVzdGluYXRpb24sIGlmIG5lY2Vzc2FyeSwgaXMgdGhlIGFwcGxpY2F0aW9uJ3MKKyAqIHJlc3BvbnNpYmlsaXR5LgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19kZXN0cm95IChqX2NvbW1vbl9wdHIgY2luZm8pCit7CisgIC8qIFdlIG5lZWQgb25seSB0ZWxsIHRoZSBtZW1vcnkgbWFuYWdlciB0byByZWxlYXNlIGV2ZXJ5dGhpbmcuICovCisgIC8qIE5COiBtZW0gcG9pbnRlciBpcyBOVUxMIGlmIG1lbW9yeSBtZ3IgZmFpbGVkIHRvIGluaXRpYWxpemUuICovCisgIGlmIChjaW5mby0+bWVtICE9IE5VTEwpCisgICAgKCpjaW5mby0+bWVtLT5zZWxmX2Rlc3RydWN0KSAoY2luZm8pOworICBjaW5mby0+bWVtID0gTlVMTDsJCS8qIGJlIHNhZmUgaWYganBlZ19kZXN0cm95IGlzIGNhbGxlZCB0d2ljZSAqLworICBjaW5mby0+Z2xvYmFsX3N0YXRlID0gMDsJLyogbWFyayBpdCBkZXN0cm95ZWQgKi8KK30KKworCisvKgorICogQ29udmVuaWVuY2Ugcm91dGluZXMgZm9yIGFsbG9jYXRpbmcgcXVhbnRpemF0aW9uIGFuZCBIdWZmbWFuIHRhYmxlcy4KKyAqIChXb3VsZCBqdXRpbHMuYyBiZSBhIG1vcmUgcmVhc29uYWJsZSBwbGFjZSB0byBwdXQgdGhlc2U/KQorICovCisKK0dMT0JBTChKUVVBTlRfVEJMICopCitqcGVnX2FsbG9jX3F1YW50X3RhYmxlIChqX2NvbW1vbl9wdHIgY2luZm8pCit7CisgIEpRVUFOVF9UQkwgKnRibDsKKworICB0YmwgPSAoSlFVQU5UX1RCTCAqKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpIChjaW5mbywgSlBPT0xfUEVSTUFORU5ULCBTSVpFT0YoSlFVQU5UX1RCTCkpOworICB0YmwtPnNlbnRfdGFibGUgPSBGQUxTRTsJLyogbWFrZSBzdXJlIHRoaXMgaXMgZmFsc2UgaW4gYW55IG5ldyB0YWJsZSAqLworICByZXR1cm4gdGJsOworfQorCisKK0dMT0JBTChKSFVGRl9UQkwgKikKK2pwZWdfYWxsb2NfaHVmZl90YWJsZSAoal9jb21tb25fcHRyIGNpbmZvKQoreworICBKSFVGRl9UQkwgKnRibDsKKworICB0YmwgPSAoSkhVRkZfVEJMICopCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKGNpbmZvLCBKUE9PTF9QRVJNQU5FTlQsIFNJWkVPRihKSFVGRl9UQkwpKTsKKyAgdGJsLT5zZW50X3RhYmxlID0gRkFMU0U7CS8qIG1ha2Ugc3VyZSB0aGlzIGlzIGZhbHNlIGluIGFueSBuZXcgdGFibGUgKi8KKyAgcmV0dXJuIHRibDsKK30KKworI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY3BhcmFtLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY3BhcmFtLmMKaW5kZXggOGIxYjliOS4uZjNlYTEwOSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamNwYXJhbS5jCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pjcGFyYW0uYwpAQCAtMSw2MTMgKzEsNjEzIEBACi0jaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQ0KLS8qDQotICogamNwYXJhbS5jDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5OCwgVGhvbWFzIEcuIExhbmUuDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4NCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuDQotICoNCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgb3B0aW9uYWwgZGVmYXVsdC1zZXR0aW5nIGNvZGUgZm9yIHRoZSBKUEVHIGNvbXByZXNzb3IuDQotICogQXBwbGljYXRpb25zIGRvIG5vdCBoYXZlIHRvIHVzZSB0aGlzIGZpbGUsIGJ1dCB0aG9zZSB0aGF0IGRvbid0IHVzZSBpdA0KLSAqIG11c3Qga25vdyBhIGxvdCBtb3JlIGFib3V0IHRoZSBpbm5hcmRzIG9mIHRoZSBKUEVHIGNvZGUuDQotICovDQotDQotI2RlZmluZSBKUEVHX0lOVEVSTkFMUw0KLSNpbmNsdWRlICJqaW5jbHVkZS5oIg0KLSNpbmNsdWRlICJqcGVnbGliLmgiDQotDQotDQotLyoNCi0gKiBRdWFudGl6YXRpb24gdGFibGUgc2V0dXAgcm91dGluZXMNCi0gKi8NCi0NCi1HTE9CQUwodm9pZCkNCi1qcGVnX2FkZF9xdWFudF90YWJsZSAoal9jb21wcmVzc19wdHIgY2luZm8sIGludCB3aGljaF90YmwsDQotCQkgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKmJhc2ljX3RhYmxlLA0KLQkJICAgICAgaW50IHNjYWxlX2ZhY3RvciwgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkNCi0vKiBEZWZpbmUgYSBxdWFudGl6YXRpb24gdGFibGUgZXF1YWwgdG8gdGhlIGJhc2ljX3RhYmxlIHRpbWVzDQotICogYSBzY2FsZSBmYWN0b3IgKGdpdmVuIGFzIGEgcGVyY2VudGFnZSkuDQotICogSWYgZm9yY2VfYmFzZWxpbmUgaXMgVFJVRSwgdGhlIGNvbXB1dGVkIHF1YW50aXphdGlvbiB0YWJsZSBlbnRyaWVzDQotICogYXJlIGxpbWl0ZWQgdG8gMS4uMjU1IGZvciBKUEVHIGJhc2VsaW5lIGNvbXBhdGliaWxpdHkuDQotICovDQotew0KLSAgSlFVQU5UX1RCTCAqKiBxdGJscHRyOw0KLSAgaW50IGk7DQotICBsb25nIHRlbXA7DQotDQotICAvKiBTYWZldHkgY2hlY2sgdG8gZW5zdXJlIHN0YXJ0X2NvbXByZXNzIG5vdCBjYWxsZWQgeWV0LiAqLw0KLSAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gQ1NUQVRFX1NUQVJUKQ0KLSAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOw0KLQ0KLSAgaWYgKHdoaWNoX3RibCA8IDAgfHwgd2hpY2hfdGJsID49IE5VTV9RVUFOVF9UQkxTKQ0KLSAgICBFUlJFWElUMShjaW5mbywgSkVSUl9EUVRfSU5ERVgsIHdoaWNoX3RibCk7DQotDQotICBxdGJscHRyID0gJiBjaW5mby0+cXVhbnRfdGJsX3B0cnNbd2hpY2hfdGJsXTsNCi0NCi0gIGlmICgqcXRibHB0ciA9PSBOVUxMKQ0KLSAgICAqcXRibHB0ciA9IGpwZWdfYWxsb2NfcXVhbnRfdGFibGUoKGpfY29tbW9uX3B0cikgY2luZm8pOw0KLQ0KLSAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsNCi0gICAgdGVtcCA9ICgobG9uZykgYmFzaWNfdGFibGVbaV0gKiBzY2FsZV9mYWN0b3IgKyA1MEwpIC8gMTAwTDsNCi0gICAgLyogbGltaXQgdGhlIHZhbHVlcyB0byB0aGUgdmFsaWQgcmFuZ2UgKi8NCi0gICAgaWYgKHRlbXAgPD0gMEwpIHRlbXAgPSAxTDsNCi0gICAgaWYgKHRlbXAgPiAzMjc2N0wpIHRlbXAgPSAzMjc2N0w7IC8qIG1heCBxdWFudGl6ZXIgbmVlZGVkIGZvciAxMiBiaXRzICovDQotICAgIGlmIChmb3JjZV9iYXNlbGluZSAmJiB0ZW1wID4gMjU1TCkNCi0gICAgICB0ZW1wID0gMjU1TDsJCS8qIGxpbWl0IHRvIGJhc2VsaW5lIHJhbmdlIGlmIHJlcXVlc3RlZCAqLw0KLSAgICAoKnF0YmxwdHIpLT5xdWFudHZhbFtpXSA9IChVSU5UMTYpIHRlbXA7DQotICB9DQotDQotICAvKiBJbml0aWFsaXplIHNlbnRfdGFibGUgRkFMU0Ugc28gdGFibGUgd2lsbCBiZSB3cml0dGVuIHRvIEpQRUcgZmlsZS4gKi8NCi0gICgqcXRibHB0ciktPnNlbnRfdGFibGUgPSBGQUxTRTsNCi19DQotDQotDQotR0xPQkFMKHZvaWQpDQotanBlZ19zZXRfbGluZWFyX3F1YWxpdHkgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgc2NhbGVfZmFjdG9yLA0KLQkJCSBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKQ0KLS8qIFNldCBvciBjaGFuZ2UgdGhlICdxdWFsaXR5JyAocXVhbnRpemF0aW9uKSBzZXR0aW5nLCB1c2luZyBkZWZhdWx0IHRhYmxlcw0KLSAqIGFuZCBhIHN0cmFpZ2h0IHBlcmNlbnRhZ2Utc2NhbGluZyBxdWFsaXR5IHNjYWxlLiAgSW4gbW9zdCBjYXNlcyBpdCdzIGJldHRlcg0KLSAqIHRvIHVzZSBqcGVnX3NldF9xdWFsaXR5IChiZWxvdyk7IHRoaXMgZW50cnkgcG9pbnQgaXMgcHJvdmlkZWQgZm9yDQotICogYXBwbGljYXRpb25zIHRoYXQgaW5zaXN0IG9uIGEgbGluZWFyIHBlcmNlbnRhZ2Ugc2NhbGluZy4NCi0gKi8NCi17DQotICAvKiBUaGVzZSBhcmUgdGhlIHNhbXBsZSBxdWFudGl6YXRpb24gdGFibGVzIGdpdmVuIGluIEpQRUcgc3BlYyBzZWN0aW9uIEsuMS4NCi0gICAqIFRoZSBzcGVjIHNheXMgdGhhdCB0aGUgdmFsdWVzIGdpdmVuIHByb2R1Y2UgImdvb2QiIHF1YWxpdHksIGFuZA0KLSAgICogd2hlbiBkaXZpZGVkIGJ5IDIsICJ2ZXJ5IGdvb2QiIHF1YWxpdHkuDQotICAgKi8NCi0gIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3RkX2x1bWluYW5jZV9xdWFudF90YmxbRENUU0laRTJdID0gew0KLSAgICAxNiwgIDExLCAgMTAsICAxNiwgIDI0LCAgNDAsICA1MSwgIDYxLA0KLSAgICAxMiwgIDEyLCAgMTQsICAxOSwgIDI2LCAgNTgsICA2MCwgIDU1LA0KLSAgICAxNCwgIDEzLCAgMTYsICAyNCwgIDQwLCAgNTcsICA2OSwgIDU2LA0KLSAgICAxNCwgIDE3LCAgMjIsICAyOSwgIDUxLCAgODcsICA4MCwgIDYyLA0KLSAgICAxOCwgIDIyLCAgMzcsICA1NiwgIDY4LCAxMDksIDEwMywgIDc3LA0KLSAgICAyNCwgIDM1LCAgNTUsICA2NCwgIDgxLCAxMDQsIDExMywgIDkyLA0KLSAgICA0OSwgIDY0LCAgNzgsICA4NywgMTAzLCAxMjEsIDEyMCwgMTAxLA0KLSAgICA3MiwgIDkyLCAgOTUsICA5OCwgMTEyLCAxMDAsIDEwMywgIDk5DQotICB9Ow0KLSAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzdGRfY2hyb21pbmFuY2VfcXVhbnRfdGJsW0RDVFNJWkUyXSA9IHsNCi0gICAgMTcsICAxOCwgIDI0LCAgNDcsICA5OSwgIDk5LCAgOTksICA5OSwNCi0gICAgMTgsICAyMSwgIDI2LCAgNjYsICA5OSwgIDk5LCAgOTksICA5OSwNCi0gICAgMjQsICAyNiwgIDU2LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwNCi0gICAgNDcsICA2NiwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwNCi0gICAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwNCi0gICAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwNCi0gICAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwNCi0gICAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OQ0KLSAgfTsNCi0NCi0gIC8qIFNldCB1cCB0d28gcXVhbnRpemF0aW9uIHRhYmxlcyB1c2luZyB0aGUgc3BlY2lmaWVkIHNjYWxpbmcgKi8NCi0gIGpwZWdfYWRkX3F1YW50X3RhYmxlKGNpbmZvLCAwLCBzdGRfbHVtaW5hbmNlX3F1YW50X3RibCwNCi0JCSAgICAgICBzY2FsZV9mYWN0b3IsIGZvcmNlX2Jhc2VsaW5lKTsNCi0gIGpwZWdfYWRkX3F1YW50X3RhYmxlKGNpbmZvLCAxLCBzdGRfY2hyb21pbmFuY2VfcXVhbnRfdGJsLA0KLQkJICAgICAgIHNjYWxlX2ZhY3RvciwgZm9yY2VfYmFzZWxpbmUpOw0KLX0NCi0NCi0NCi1HTE9CQUwoaW50KQ0KLWpwZWdfcXVhbGl0eV9zY2FsaW5nIChpbnQgcXVhbGl0eSkNCi0vKiBDb252ZXJ0IGEgdXNlci1zcGVjaWZpZWQgcXVhbGl0eSByYXRpbmcgdG8gYSBwZXJjZW50YWdlIHNjYWxpbmcgZmFjdG9yDQotICogZm9yIGFuIHVuZGVybHlpbmcgcXVhbnRpemF0aW9uIHRhYmxlLCB1c2luZyBvdXIgcmVjb21tZW5kZWQgc2NhbGluZyBjdXJ2ZS4NCi0gKiBUaGUgaW5wdXQgJ3F1YWxpdHknIGZhY3RvciBzaG91bGQgYmUgMCAodGVycmlibGUpIHRvIDEwMCAodmVyeSBnb29kKS4NCi0gKi8NCi17DQotICAvKiBTYWZldHkgbGltaXQgb24gcXVhbGl0eSBmYWN0b3IuICBDb252ZXJ0IDAgdG8gMSB0byBhdm9pZCB6ZXJvIGRpdmlkZS4gKi8NCi0gIGlmIChxdWFsaXR5IDw9IDApIHF1YWxpdHkgPSAxOw0KLSAgaWYgKHF1YWxpdHkgPiAxMDApIHF1YWxpdHkgPSAxMDA7DQotDQotICAvKiBUaGUgYmFzaWMgdGFibGUgaXMgdXNlZCBhcy1pcyAoc2NhbGluZyAxMDApIGZvciBhIHF1YWxpdHkgb2YgNTAuDQotICAgKiBRdWFsaXRpZXMgNTAuLjEwMCBhcmUgY29udmVydGVkIHRvIHNjYWxpbmcgcGVyY2VudGFnZSAyMDAgLSAyKlE7DQotICAgKiBub3RlIHRoYXQgYXQgUT0xMDAgdGhlIHNjYWxpbmcgaXMgMCwgd2hpY2ggd2lsbCBjYXVzZSBqcGVnX2FkZF9xdWFudF90YWJsZQ0KLSAgICogdG8gbWFrZSBhbGwgdGhlIHRhYmxlIGVudHJpZXMgMSAoaGVuY2UsIG1pbmltdW0gcXVhbnRpemF0aW9uIGxvc3MpLg0KLSAgICogUXVhbGl0aWVzIDEuLjUwIGFyZSBjb252ZXJ0ZWQgdG8gc2NhbGluZyBwZXJjZW50YWdlIDUwMDAvUS4NCi0gICAqLw0KLSAgaWYgKHF1YWxpdHkgPCA1MCkNCi0gICAgcXVhbGl0eSA9IDUwMDAgLyBxdWFsaXR5Ow0KLSAgZWxzZQ0KLSAgICBxdWFsaXR5ID0gMjAwIC0gcXVhbGl0eSoyOw0KLQ0KLSAgcmV0dXJuIHF1YWxpdHk7DQotfQ0KLQ0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWpwZWdfc2V0X3F1YWxpdHkgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgcXVhbGl0eSwgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkNCi0vKiBTZXQgb3IgY2hhbmdlIHRoZSAncXVhbGl0eScgKHF1YW50aXphdGlvbikgc2V0dGluZywgdXNpbmcgZGVmYXVsdCB0YWJsZXMuDQotICogVGhpcyBpcyB0aGUgc3RhbmRhcmQgcXVhbGl0eS1hZGp1c3RpbmcgZW50cnkgcG9pbnQgZm9yIHR5cGljYWwgdXNlcg0KLSAqIGludGVyZmFjZXM7IG9ubHkgdGhvc2Ugd2hvIHdhbnQgZGV0YWlsZWQgY29udHJvbCBvdmVyIHF1YW50aXphdGlvbiB0YWJsZXMNCi0gKiB3b3VsZCB1c2UgdGhlIHByZWNlZGluZyB0aHJlZSByb3V0aW5lcyBkaXJlY3RseS4NCi0gKi8NCi17DQotICAvKiBDb252ZXJ0IHVzZXIgMC0xMDAgcmF0aW5nIHRvIHBlcmNlbnRhZ2Ugc2NhbGluZyAqLw0KLSAgcXVhbGl0eSA9IGpwZWdfcXVhbGl0eV9zY2FsaW5nKHF1YWxpdHkpOw0KLQ0KLSAgLyogU2V0IHVwIHN0YW5kYXJkIHF1YWxpdHkgdGFibGVzICovDQotICBqcGVnX3NldF9saW5lYXJfcXVhbGl0eShjaW5mbywgcXVhbGl0eSwgZm9yY2VfYmFzZWxpbmUpOw0KLX0NCi0NCi0NCi0vKg0KLSAqIEh1ZmZtYW4gdGFibGUgc2V0dXAgcm91dGluZXMNCi0gKi8NCi0NCi1MT0NBTCh2b2lkKQ0KLWFkZF9odWZmX3RhYmxlIChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCUpIVUZGX1RCTCAqKmh0YmxwdHIsIGNvbnN0IFVJTlQ4ICpiaXRzLCBjb25zdCBVSU5UOCAqdmFsKQ0KLS8qIERlZmluZSBhIEh1ZmZtYW4gdGFibGUgKi8NCi17DQotICBpbnQgbnN5bWJvbHMsIGxlbjsNCi0NCi0gIGlmICgqaHRibHB0ciA9PSBOVUxMKQ0KLSAgICAqaHRibHB0ciA9IGpwZWdfYWxsb2NfaHVmZl90YWJsZSgoal9jb21tb25fcHRyKSBjaW5mbyk7DQotDQotICAvKiBDb3B5IHRoZSBudW1iZXItb2Ytc3ltYm9scy1vZi1lYWNoLWNvZGUtbGVuZ3RoIGNvdW50cyAqLw0KLSAgTUVNQ09QWSgoKmh0YmxwdHIpLT5iaXRzLCBiaXRzLCBTSVpFT0YoKCpodGJscHRyKS0+Yml0cykpOw0KLQ0KLSAgLyogVmFsaWRhdGUgdGhlIGNvdW50cy4gIFdlIGRvIHRoaXMgaGVyZSBtYWlubHkgc28gd2UgY2FuIGNvcHkgdGhlIHJpZ2h0DQotICAgKiBudW1iZXIgb2Ygc3ltYm9scyBmcm9tIHRoZSB2YWxbXSBhcnJheSwgd2l0aG91dCByaXNraW5nIG1hcmNoaW5nIG9mZg0KLSAgICogdGhlIGVuZCBvZiBtZW1vcnkuICBqY2h1ZmYuYyB3aWxsIGRvIGEgbW9yZSB0aG9yb3VnaCB0ZXN0IGxhdGVyLg0KLSAgICovDQotICBuc3ltYm9scyA9IDA7DQotICBmb3IgKGxlbiA9IDE7IGxlbiA8PSAxNjsgbGVuKyspDQotICAgIG5zeW1ib2xzICs9IGJpdHNbbGVuXTsNCi0gIGlmIChuc3ltYm9scyA8IDEgfHwgbnN5bWJvbHMgPiAyNTYpDQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0hVRkZfVEFCTEUpOw0KLQ0KLSAgTUVNQ09QWSgoKmh0YmxwdHIpLT5odWZmdmFsLCB2YWwsIG5zeW1ib2xzICogU0laRU9GKFVJTlQ4KSk7DQotDQotICAvKiBJbml0aWFsaXplIHNlbnRfdGFibGUgRkFMU0Ugc28gdGFibGUgd2lsbCBiZSB3cml0dGVuIHRvIEpQRUcgZmlsZS4gKi8NCi0gICgqaHRibHB0ciktPnNlbnRfdGFibGUgPSBGQUxTRTsNCi19DQotDQotDQotTE9DQUwodm9pZCkNCi1zdGRfaHVmZl90YWJsZXMgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQ0KLS8qIFNldCB1cCB0aGUgc3RhbmRhcmQgSHVmZm1hbiB0YWJsZXMgKGNmLiBKUEVHIHN0YW5kYXJkIHNlY3Rpb24gSy4zKSAqLw0KLS8qIElNUE9SVEFOVDogdGhlc2UgYXJlIG9ubHkgdmFsaWQgZm9yIDgtYml0IGRhdGEgcHJlY2lzaW9uISAqLw0KLXsNCi0gIHN0YXRpYyBjb25zdCBVSU5UOCBiaXRzX2RjX2x1bWluYW5jZVsxN10gPQ0KLSAgICB7IC8qIDAtYmFzZSAqLyAwLCAwLCAxLCA1LCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07DQotICBzdGF0aWMgY29uc3QgVUlOVDggdmFsX2RjX2x1bWluYW5jZVtdID0NCi0gICAgeyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEgfTsNCi0gIA0KLSAgc3RhdGljIGNvbnN0IFVJTlQ4IGJpdHNfZGNfY2hyb21pbmFuY2VbMTddID0NCi0gICAgeyAvKiAwLWJhc2UgKi8gMCwgMCwgMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCB9Ow0KLSAgc3RhdGljIGNvbnN0IFVJTlQ4IHZhbF9kY19jaHJvbWluYW5jZVtdID0NCi0gICAgeyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEgfTsNCi0gIA0KLSAgc3RhdGljIGNvbnN0IFVJTlQ4IGJpdHNfYWNfbHVtaW5hbmNlWzE3XSA9DQotICAgIHsgLyogMC1iYXNlICovIDAsIDAsIDIsIDEsIDMsIDMsIDIsIDQsIDMsIDUsIDUsIDQsIDQsIDAsIDAsIDEsIDB4N2QgfTsNCi0gIHN0YXRpYyBjb25zdCBVSU5UOCB2YWxfYWNfbHVtaW5hbmNlW10gPQ0KLSAgICB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDAsIDB4MDQsIDB4MTEsIDB4MDUsIDB4MTIsDQotICAgICAgMHgyMSwgMHgzMSwgMHg0MSwgMHgwNiwgMHgxMywgMHg1MSwgMHg2MSwgMHgwNywNCi0gICAgICAweDIyLCAweDcxLCAweDE0LCAweDMyLCAweDgxLCAweDkxLCAweGExLCAweDA4LA0KLSAgICAgIDB4MjMsIDB4NDIsIDB4YjEsIDB4YzEsIDB4MTUsIDB4NTIsIDB4ZDEsIDB4ZjAsDQotICAgICAgMHgyNCwgMHgzMywgMHg2MiwgMHg3MiwgMHg4MiwgMHgwOSwgMHgwYSwgMHgxNiwNCi0gICAgICAweDE3LCAweDE4LCAweDE5LCAweDFhLCAweDI1LCAweDI2LCAweDI3LCAweDI4LA0KLSAgICAgIDB4MjksIDB4MmEsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4MzksDQotICAgICAgMHgzYSwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywgMHg0OCwgMHg0OSwNCi0gICAgICAweDRhLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LCAweDU4LCAweDU5LA0KLSAgICAgIDB4NWEsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsIDB4NjksDQotICAgICAgMHg2YSwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCwgMHg3OSwNCi0gICAgICAweDdhLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LCAweDg4LCAweDg5LA0KLSAgICAgIDB4OGEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsIDB4OTgsDQotICAgICAgMHg5OSwgMHg5YSwgMHhhMiwgMHhhMywgMHhhNCwgMHhhNSwgMHhhNiwgMHhhNywNCi0gICAgICAweGE4LCAweGE5LCAweGFhLCAweGIyLCAweGIzLCAweGI0LCAweGI1LCAweGI2LA0KLSAgICAgIDB4YjcsIDB4YjgsIDB4YjksIDB4YmEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsDQotICAgICAgMHhjNiwgMHhjNywgMHhjOCwgMHhjOSwgMHhjYSwgMHhkMiwgMHhkMywgMHhkNCwNCi0gICAgICAweGQ1LCAweGQ2LCAweGQ3LCAweGQ4LCAweGQ5LCAweGRhLCAweGUxLCAweGUyLA0KLSAgICAgIDB4ZTMsIDB4ZTQsIDB4ZTUsIDB4ZTYsIDB4ZTcsIDB4ZTgsIDB4ZTksIDB4ZWEsDQotICAgICAgMHhmMSwgMHhmMiwgMHhmMywgMHhmNCwgMHhmNSwgMHhmNiwgMHhmNywgMHhmOCwNCi0gICAgICAweGY5LCAweGZhIH07DQotICANCi0gIHN0YXRpYyBjb25zdCBVSU5UOCBiaXRzX2FjX2Nocm9taW5hbmNlWzE3XSA9DQotICAgIHsgLyogMC1iYXNlICovIDAsIDAsIDIsIDEsIDIsIDQsIDQsIDMsIDQsIDcsIDUsIDQsIDQsIDAsIDEsIDIsIDB4NzcgfTsNCi0gIHN0YXRpYyBjb25zdCBVSU5UOCB2YWxfYWNfY2hyb21pbmFuY2VbXSA9DQotICAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgxMSwgMHgwNCwgMHgwNSwgMHgyMSwNCi0gICAgICAweDMxLCAweDA2LCAweDEyLCAweDQxLCAweDUxLCAweDA3LCAweDYxLCAweDcxLA0KLSAgICAgIDB4MTMsIDB4MjIsIDB4MzIsIDB4ODEsIDB4MDgsIDB4MTQsIDB4NDIsIDB4OTEsDQotICAgICAgMHhhMSwgMHhiMSwgMHhjMSwgMHgwOSwgMHgyMywgMHgzMywgMHg1MiwgMHhmMCwNCi0gICAgICAweDE1LCAweDYyLCAweDcyLCAweGQxLCAweDBhLCAweDE2LCAweDI0LCAweDM0LA0KLSAgICAgIDB4ZTEsIDB4MjUsIDB4ZjEsIDB4MTcsIDB4MTgsIDB4MTksIDB4MWEsIDB4MjYsDQotICAgICAgMHgyNywgMHgyOCwgMHgyOSwgMHgyYSwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwNCi0gICAgICAweDM5LCAweDNhLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LA0KLSAgICAgIDB4NDksIDB4NGEsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsDQotICAgICAgMHg1OSwgMHg1YSwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywgMHg2OCwNCi0gICAgICAweDY5LCAweDZhLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LCAweDc4LA0KLSAgICAgIDB4NzksIDB4N2EsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsDQotICAgICAgMHg4OCwgMHg4OSwgMHg4YSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwNCi0gICAgICAweDk3LCAweDk4LCAweDk5LCAweDlhLCAweGEyLCAweGEzLCAweGE0LCAweGE1LA0KLSAgICAgIDB4YTYsIDB4YTcsIDB4YTgsIDB4YTksIDB4YWEsIDB4YjIsIDB4YjMsIDB4YjQsDQotICAgICAgMHhiNSwgMHhiNiwgMHhiNywgMHhiOCwgMHhiOSwgMHhiYSwgMHhjMiwgMHhjMywNCi0gICAgICAweGM0LCAweGM1LCAweGM2LCAweGM3LCAweGM4LCAweGM5LCAweGNhLCAweGQyLA0KLSAgICAgIDB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsIDB4ZDgsIDB4ZDksIDB4ZGEsDQotICAgICAgMHhlMiwgMHhlMywgMHhlNCwgMHhlNSwgMHhlNiwgMHhlNywgMHhlOCwgMHhlOSwNCi0gICAgICAweGVhLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LCAweGY4LA0KLSAgICAgIDB4ZjksIDB4ZmEgfTsNCi0gIA0KLSAgYWRkX2h1ZmZfdGFibGUoY2luZm8sICZjaW5mby0+ZGNfaHVmZl90YmxfcHRyc1swXSwNCi0JCSBiaXRzX2RjX2x1bWluYW5jZSwgdmFsX2RjX2x1bWluYW5jZSk7DQotICBhZGRfaHVmZl90YWJsZShjaW5mbywgJmNpbmZvLT5hY19odWZmX3RibF9wdHJzWzBdLA0KLQkJIGJpdHNfYWNfbHVtaW5hbmNlLCB2YWxfYWNfbHVtaW5hbmNlKTsNCi0gIGFkZF9odWZmX3RhYmxlKGNpbmZvLCAmY2luZm8tPmRjX2h1ZmZfdGJsX3B0cnNbMV0sDQotCQkgYml0c19kY19jaHJvbWluYW5jZSwgdmFsX2RjX2Nocm9taW5hbmNlKTsNCi0gIGFkZF9odWZmX3RhYmxlKGNpbmZvLCAmY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbMV0sDQotCQkgYml0c19hY19jaHJvbWluYW5jZSwgdmFsX2FjX2Nocm9taW5hbmNlKTsNCi19DQotDQotDQotLyoNCi0gKiBEZWZhdWx0IHBhcmFtZXRlciBzZXR1cCBmb3IgY29tcHJlc3Npb24uDQotICoNCi0gKiBBcHBsaWNhdGlvbnMgdGhhdCBkb24ndCBjaG9vc2UgdG8gdXNlIHRoaXMgcm91dGluZSBtdXN0IGRvIHRoZWlyDQotICogb3duIHNldHVwIG9mIGFsbCB0aGVzZSBwYXJhbWV0ZXJzLiAgQWx0ZXJuYXRlbHksIHlvdSBjYW4gY2FsbCB0aGlzDQotICogdG8gZXN0YWJsaXNoIGRlZmF1bHRzIGFuZCB0aGVuIGFsdGVyIHBhcmFtZXRlcnMgc2VsZWN0aXZlbHkuICBUaGlzDQotICogaXMgdGhlIHJlY29tbWVuZGVkIGFwcHJvYWNoIHNpbmNlLCBpZiB3ZSBhZGQgYW55IG5ldyBwYXJhbWV0ZXJzLA0KLSAqIHlvdXIgY29kZSB3aWxsIHN0aWxsIHdvcmsgKHRoZXknbGwgYmUgc2V0IHRvIHJlYXNvbmFibGUgZGVmYXVsdHMpLg0KLSAqLw0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWpwZWdfc2V0X2RlZmF1bHRzIChqX2NvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBpbnQgaTsNCi0NCi0gIC8qIFNhZmV0eSBjaGVjayB0byBlbnN1cmUgc3RhcnRfY29tcHJlc3Mgbm90IGNhbGxlZCB5ZXQuICovDQotICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBDU1RBVEVfU1RBUlQpDQotICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7DQotDQotICAvKiBBbGxvY2F0ZSBjb21wX2luZm8gYXJyYXkgbGFyZ2UgZW5vdWdoIGZvciBtYXhpbXVtIGNvbXBvbmVudCBjb3VudC4NCi0gICAqIEFycmF5IGlzIG1hZGUgcGVybWFuZW50IGluIGNhc2UgYXBwbGljYXRpb24gd2FudHMgdG8gY29tcHJlc3MNCi0gICAqIG11bHRpcGxlIGltYWdlcyBhdCBzYW1lIHBhcmFtIHNldHRpbmdzLg0KLSAgICovDQotICBpZiAoY2luZm8tPmNvbXBfaW5mbyA9PSBOVUxMKQ0KLSAgICBjaW5mby0+Y29tcF9pbmZvID0gKGpwZWdfY29tcG9uZW50X2luZm8gKikNCi0gICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX1BFUk1BTkVOVCwNCi0JCQkJICBNQVhfQ09NUE9ORU5UUyAqIFNJWkVPRihqcGVnX2NvbXBvbmVudF9pbmZvKSk7DQotDQotICAvKiBJbml0aWFsaXplIGV2ZXJ5dGhpbmcgbm90IGRlcGVuZGVudCBvbiB0aGUgY29sb3Igc3BhY2UgKi8NCi0NCi0gIGNpbmZvLT5kYXRhX3ByZWNpc2lvbiA9IEJJVFNfSU5fSlNBTVBMRTsNCi0gIC8qIFNldCB1cCB0d28gcXVhbnRpemF0aW9uIHRhYmxlcyB1c2luZyBkZWZhdWx0IHF1YWxpdHkgb2YgNzUgKi8NCi0gIGpwZWdfc2V0X3F1YWxpdHkoY2luZm8sIDc1LCBUUlVFKTsNCi0gIC8qIFNldCB1cCB0d28gSHVmZm1hbiB0YWJsZXMgKi8NCi0gIHN0ZF9odWZmX3RhYmxlcyhjaW5mbyk7DQotDQotICAvKiBJbml0aWFsaXplIGRlZmF1bHQgYXJpdGhtZXRpYyBjb2RpbmcgY29uZGl0aW9uaW5nICovDQotICBmb3IgKGkgPSAwOyBpIDwgTlVNX0FSSVRIX1RCTFM7IGkrKykgew0KLSAgICBjaW5mby0+YXJpdGhfZGNfTFtpXSA9IDA7DQotICAgIGNpbmZvLT5hcml0aF9kY19VW2ldID0gMTsNCi0gICAgY2luZm8tPmFyaXRoX2FjX0tbaV0gPSA1Ow0KLSAgfQ0KLQ0KLSAgLyogRGVmYXVsdCBpcyBubyBtdWx0aXBsZS1zY2FuIG91dHB1dCAqLw0KLSAgY2luZm8tPnNjYW5faW5mbyA9IE5VTEw7DQotICBjaW5mby0+bnVtX3NjYW5zID0gMDsNCi0NCi0gIC8qIEV4cGVjdCBub3JtYWwgc291cmNlIGltYWdlLCBub3QgcmF3IGRvd25zYW1wbGVkIGRhdGEgKi8NCi0gIGNpbmZvLT5yYXdfZGF0YV9pbiA9IEZBTFNFOw0KLQ0KLSAgLyogVXNlIEh1ZmZtYW4gY29kaW5nLCBub3QgYXJpdGhtZXRpYyBjb2RpbmcsIGJ5IGRlZmF1bHQgKi8NCi0gIGNpbmZvLT5hcml0aF9jb2RlID0gRkFMU0U7DQotDQotICAvKiBCeSBkZWZhdWx0LCBkb24ndCBkbyBleHRyYSBwYXNzZXMgdG8gb3B0aW1pemUgZW50cm9weSBjb2RpbmcgKi8NCi0gIGNpbmZvLT5vcHRpbWl6ZV9jb2RpbmcgPSBGQUxTRTsNCi0gIC8qIFRoZSBzdGFuZGFyZCBIdWZmbWFuIHRhYmxlcyBhcmUgb25seSB2YWxpZCBmb3IgOC1iaXQgZGF0YSBwcmVjaXNpb24uDQotICAgKiBJZiB0aGUgcHJlY2lzaW9uIGlzIGhpZ2hlciwgZm9yY2Ugb3B0aW1pemF0aW9uIG9uIHNvIHRoYXQgdXNhYmxlDQotICAgKiB0YWJsZXMgd2lsbCBiZSBjb21wdXRlZC4gIFRoaXMgdGVzdCBjYW4gYmUgcmVtb3ZlZCBpZiBkZWZhdWx0IHRhYmxlcw0KLSAgICogYXJlIHN1cHBsaWVkIHRoYXQgYXJlIHZhbGlkIGZvciB0aGUgZGVzaXJlZCBwcmVjaXNpb24uDQotICAgKi8NCi0gIGlmIChjaW5mby0+ZGF0YV9wcmVjaXNpb24gPiA4KQ0KLSAgICBjaW5mby0+b3B0aW1pemVfY29kaW5nID0gVFJVRTsNCi0NCi0gIC8qIEJ5IGRlZmF1bHQsIHVzZSB0aGUgc2ltcGxlciBub24tY29zaXRlZCBzYW1wbGluZyBhbGlnbm1lbnQgKi8NCi0gIGNpbmZvLT5DQ0lSNjAxX3NhbXBsaW5nID0gRkFMU0U7DQotDQotICAvKiBObyBpbnB1dCBzbW9vdGhpbmcgKi8NCi0gIGNpbmZvLT5zbW9vdGhpbmdfZmFjdG9yID0gMDsNCi0NCi0gIC8qIERDVCBhbGdvcml0aG0gcHJlZmVyZW5jZSAqLw0KLSAgY2luZm8tPmRjdF9tZXRob2QgPSBKRENUX0RFRkFVTFQ7DQotDQotICAvKiBObyByZXN0YXJ0IG1hcmtlcnMgKi8NCi0gIGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsID0gMDsNCi0gIGNpbmZvLT5yZXN0YXJ0X2luX3Jvd3MgPSAwOw0KLQ0KLSAgLyogRmlsbCBpbiBkZWZhdWx0IEpGSUYgbWFya2VyIHBhcmFtZXRlcnMuICBOb3RlIHRoYXQgd2hldGhlciB0aGUgbWFya2VyDQotICAgKiB3aWxsIGFjdHVhbGx5IGJlIHdyaXR0ZW4gaXMgZGV0ZXJtaW5lZCBieSBqcGVnX3NldF9jb2xvcnNwYWNlLg0KLSAgICoNCi0gICAqIEJ5IGRlZmF1bHQsIHRoZSBsaWJyYXJ5IGVtaXRzIEpGSUYgdmVyc2lvbiBjb2RlIDEuMDEuDQotICAgKiBBbiBhcHBsaWNhdGlvbiB0aGF0IHdhbnRzIHRvIGVtaXQgSkZJRiAxLjAyIGV4dGVuc2lvbiBtYXJrZXJzIHNob3VsZCBzZXQNCi0gICAqIEpGSUZfbWlub3JfdmVyc2lvbiB0byAyLiAgV2UgY291bGQgcHJvYmFibHkgZ2V0IGF3YXkgd2l0aCBqdXN0IGRlZmF1bHRpbmcNCi0gICAqIHRvIDEuMDIsIGJ1dCB0aGVyZSBtYXkgc3RpbGwgYmUgc29tZSBkZWNvZGVycyBpbiB1c2UgdGhhdCB3aWxsIGNvbXBsYWluDQotICAgKiBhYm91dCB0aGF0OyBzYXlpbmcgMS4wMSBzaG91bGQgbWluaW1pemUgY29tcGF0aWJpbGl0eSBwcm9ibGVtcy4NCi0gICAqLw0KLSAgY2luZm8tPkpGSUZfbWFqb3JfdmVyc2lvbiA9IDE7IC8qIERlZmF1bHQgSkZJRiB2ZXJzaW9uID0gMS4wMSAqLw0KLSAgY2luZm8tPkpGSUZfbWlub3JfdmVyc2lvbiA9IDE7DQotICBjaW5mby0+ZGVuc2l0eV91bml0ID0gMDsJLyogUGl4ZWwgc2l6ZSBpcyB1bmtub3duIGJ5IGRlZmF1bHQgKi8NCi0gIGNpbmZvLT5YX2RlbnNpdHkgPSAxOwkJLyogUGl4ZWwgYXNwZWN0IHJhdGlvIGlzIHNxdWFyZSBieSBkZWZhdWx0ICovDQotICBjaW5mby0+WV9kZW5zaXR5ID0gMTsNCi0NCi0gIC8qIENob29zZSBKUEVHIGNvbG9yc3BhY2UgYmFzZWQgb24gaW5wdXQgc3BhY2UsIHNldCBkZWZhdWx0cyBhY2NvcmRpbmdseSAqLw0KLQ0KLSAganBlZ19kZWZhdWx0X2NvbG9yc3BhY2UoY2luZm8pOw0KLX0NCi0NCi0NCi0vKg0KLSAqIFNlbGVjdCBhbiBhcHByb3ByaWF0ZSBKUEVHIGNvbG9yc3BhY2UgZm9yIGluX2NvbG9yX3NwYWNlLg0KLSAqLw0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWpwZWdfZGVmYXVsdF9jb2xvcnNwYWNlIChqX2NvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBzd2l0Y2ggKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSkgew0KLSAgY2FzZSBKQ1NfR1JBWVNDQUxFOg0KLSAgICBqcGVnX3NldF9jb2xvcnNwYWNlKGNpbmZvLCBKQ1NfR1JBWVNDQUxFKTsNCi0gICAgYnJlYWs7DQotICBjYXNlIEpDU19SR0I6DQotICAgIGpwZWdfc2V0X2NvbG9yc3BhY2UoY2luZm8sIEpDU19ZQ2JDcik7DQotICAgIGJyZWFrOw0KLSAgY2FzZSBKQ1NfWUNiQ3I6DQotICAgIGpwZWdfc2V0X2NvbG9yc3BhY2UoY2luZm8sIEpDU19ZQ2JDcik7DQotICAgIGJyZWFrOw0KLSAgY2FzZSBKQ1NfQ01ZSzoNCi0gICAganBlZ19zZXRfY29sb3JzcGFjZShjaW5mbywgSkNTX0NNWUspOyAvKiBCeSBkZWZhdWx0LCBubyB0cmFuc2xhdGlvbiAqLw0KLSAgICBicmVhazsNCi0gIGNhc2UgSkNTX1lDQ0s6DQotICAgIGpwZWdfc2V0X2NvbG9yc3BhY2UoY2luZm8sIEpDU19ZQ0NLKTsNCi0gICAgYnJlYWs7DQotICBjYXNlIEpDU19VTktOT1dOOg0KLSAgICBqcGVnX3NldF9jb2xvcnNwYWNlKGNpbmZvLCBKQ1NfVU5LTk9XTik7DQotICAgIGJyZWFrOw0KLSAgZGVmYXVsdDoNCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSU5fQ09MT1JTUEFDRSk7DQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogU2V0IHRoZSBKUEVHIGNvbG9yc3BhY2UsIGFuZCBjaG9vc2UgY29sb3JzcGFjZS1kZXBlbmRlbnQgZGVmYXVsdCB2YWx1ZXMuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotanBlZ19zZXRfY29sb3JzcGFjZSAoal9jb21wcmVzc19wdHIgY2luZm8sIEpfQ09MT1JfU1BBQ0UgY29sb3JzcGFjZSkNCi17DQotICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cjsNCi0gIGludCBjaTsNCi0NCi0jZGVmaW5lIFNFVF9DT01QKGluZGV4LGlkLGhzYW1wLHZzYW1wLHF1YW50LGRjdGJsLGFjdGJsKSAgXA0KLSAgKGNvbXBwdHIgPSAmY2luZm8tPmNvbXBfaW5mb1tpbmRleF0sIFwNCi0gICBjb21wcHRyLT5jb21wb25lbnRfaWQgPSAoaWQpLCBcDQotICAgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciA9IChoc2FtcCksIFwNCi0gICBjb21wcHRyLT52X3NhbXBfZmFjdG9yID0gKHZzYW1wKSwgXA0KLSAgIGNvbXBwdHItPnF1YW50X3RibF9ubyA9IChxdWFudCksIFwNCi0gICBjb21wcHRyLT5kY190Ymxfbm8gPSAoZGN0YmwpLCBcDQotICAgY29tcHB0ci0+YWNfdGJsX25vID0gKGFjdGJsKSApDQotDQotICAvKiBTYWZldHkgY2hlY2sgdG8gZW5zdXJlIHN0YXJ0X2NvbXByZXNzIG5vdCBjYWxsZWQgeWV0LiAqLw0KLSAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gQ1NUQVRFX1NUQVJUKQ0KLSAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOw0KLQ0KLSAgLyogRm9yIGFsbCBjb2xvcnNwYWNlcywgd2UgdXNlIFEgYW5kIEh1ZmYgdGFibGVzIDAgZm9yIGx1bWluYW5jZSBjb21wb25lbnRzLA0KLSAgICogdGFibGVzIDEgZm9yIGNocm9taW5hbmNlIGNvbXBvbmVudHMuDQotICAgKi8NCi0NCi0gIGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gY29sb3JzcGFjZTsNCi0NCi0gIGNpbmZvLT53cml0ZV9KRklGX2hlYWRlciA9IEZBTFNFOyAvKiBObyBtYXJrZXIgZm9yIG5vbi1KRklGIGNvbG9yc3BhY2VzICovDQotICBjaW5mby0+d3JpdGVfQWRvYmVfbWFya2VyID0gRkFMU0U7IC8qIHdyaXRlIG5vIEFkb2JlIG1hcmtlciBieSBkZWZhdWx0ICovDQotDQotICBzd2l0Y2ggKGNvbG9yc3BhY2UpIHsNCi0gIGNhc2UgSkNTX0dSQVlTQ0FMRToNCi0gICAgY2luZm8tPndyaXRlX0pGSUZfaGVhZGVyID0gVFJVRTsgLyogV3JpdGUgYSBKRklGIG1hcmtlciAqLw0KLSAgICBjaW5mby0+bnVtX2NvbXBvbmVudHMgPSAxOw0KLSAgICAvKiBKRklGIHNwZWNpZmllcyBjb21wb25lbnQgSUQgMSAqLw0KLSAgICBTRVRfQ09NUCgwLCAxLCAxLDEsIDAsIDAsMCk7DQotICAgIGJyZWFrOw0KLSAgY2FzZSBKQ1NfUkdCOg0KLSAgICBjaW5mby0+d3JpdGVfQWRvYmVfbWFya2VyID0gVFJVRTsgLyogd3JpdGUgQWRvYmUgbWFya2VyIHRvIGZsYWcgUkdCICovDQotICAgIGNpbmZvLT5udW1fY29tcG9uZW50cyA9IDM7DQotICAgIFNFVF9DT01QKDAsIDB4NTIgLyogJ1InICovLCAxLDEsIDAsIDAsMCk7DQotICAgIFNFVF9DT01QKDEsIDB4NDcgLyogJ0cnICovLCAxLDEsIDAsIDAsMCk7DQotICAgIFNFVF9DT01QKDIsIDB4NDIgLyogJ0InICovLCAxLDEsIDAsIDAsMCk7DQotICAgIGJyZWFrOw0KLSAgY2FzZSBKQ1NfWUNiQ3I6DQotICAgIGNpbmZvLT53cml0ZV9KRklGX2hlYWRlciA9IFRSVUU7IC8qIFdyaXRlIGEgSkZJRiBtYXJrZXIgKi8NCi0gICAgY2luZm8tPm51bV9jb21wb25lbnRzID0gMzsNCi0gICAgLyogSkZJRiBzcGVjaWZpZXMgY29tcG9uZW50IElEcyAxLDIsMyAqLw0KLSAgICAvKiBXZSBkZWZhdWx0IHRvIDJ4MiBzdWJzYW1wbGVzIG9mIGNocm9taW5hbmNlICovDQotICAgIFNFVF9DT01QKDAsIDEsIDIsMiwgMCwgMCwwKTsNCi0gICAgU0VUX0NPTVAoMSwgMiwgMSwxLCAxLCAxLDEpOw0KLSAgICBTRVRfQ09NUCgyLCAzLCAxLDEsIDEsIDEsMSk7DQotICAgIGJyZWFrOw0KLSAgY2FzZSBKQ1NfQ01ZSzoNCi0gICAgY2luZm8tPndyaXRlX0Fkb2JlX21hcmtlciA9IFRSVUU7IC8qIHdyaXRlIEFkb2JlIG1hcmtlciB0byBmbGFnIENNWUsgKi8NCi0gICAgY2luZm8tPm51bV9jb21wb25lbnRzID0gNDsNCi0gICAgU0VUX0NPTVAoMCwgMHg0MyAvKiAnQycgKi8sIDEsMSwgMCwgMCwwKTsNCi0gICAgU0VUX0NPTVAoMSwgMHg0RCAvKiAnTScgKi8sIDEsMSwgMCwgMCwwKTsNCi0gICAgU0VUX0NPTVAoMiwgMHg1OSAvKiAnWScgKi8sIDEsMSwgMCwgMCwwKTsNCi0gICAgU0VUX0NPTVAoMywgMHg0QiAvKiAnSycgKi8sIDEsMSwgMCwgMCwwKTsNCi0gICAgYnJlYWs7DQotICBjYXNlIEpDU19ZQ0NLOg0KLSAgICBjaW5mby0+d3JpdGVfQWRvYmVfbWFya2VyID0gVFJVRTsgLyogd3JpdGUgQWRvYmUgbWFya2VyIHRvIGZsYWcgWUNDSyAqLw0KLSAgICBjaW5mby0+bnVtX2NvbXBvbmVudHMgPSA0Ow0KLSAgICBTRVRfQ09NUCgwLCAxLCAyLDIsIDAsIDAsMCk7DQotICAgIFNFVF9DT01QKDEsIDIsIDEsMSwgMSwgMSwxKTsNCi0gICAgU0VUX0NPTVAoMiwgMywgMSwxLCAxLCAxLDEpOw0KLSAgICBTRVRfQ09NUCgzLCA0LCAyLDIsIDAsIDAsMCk7DQotICAgIGJyZWFrOw0KLSAgY2FzZSBKQ1NfVU5LTk9XTjoNCi0gICAgY2luZm8tPm51bV9jb21wb25lbnRzID0gY2luZm8tPmlucHV0X2NvbXBvbmVudHM7DQotICAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgPCAxIHx8IGNpbmZvLT5udW1fY29tcG9uZW50cyA+IE1BWF9DT01QT05FTlRTKQ0KLSAgICAgIEVSUkVYSVQyKGNpbmZvLCBKRVJSX0NPTVBPTkVOVF9DT1VOVCwgY2luZm8tPm51bV9jb21wb25lbnRzLA0KLQkgICAgICAgTUFYX0NPTVBPTkVOVFMpOw0KLSAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsNCi0gICAgICBTRVRfQ09NUChjaSwgY2ksIDEsMSwgMCwgMCwwKTsNCi0gICAgfQ0KLSAgICBicmVhazsNCi0gIGRlZmF1bHQ6DQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0pfQ09MT1JTUEFDRSk7DQotICB9DQotfQ0KLQ0KLQ0KLSNpZmRlZiBDX1BST0dSRVNTSVZFX1NVUFBPUlRFRA0KLQ0KLUxPQ0FMKGpwZWdfc2Nhbl9pbmZvICopDQotZmlsbF9hX3NjYW4gKGpwZWdfc2Nhbl9pbmZvICogc2NhbnB0ciwgaW50IGNpLA0KLQkgICAgIGludCBTcywgaW50IFNlLCBpbnQgQWgsIGludCBBbCkNCi0vKiBTdXBwb3J0IHJvdXRpbmU6IGdlbmVyYXRlIG9uZSBzY2FuIGZvciBzcGVjaWZpZWQgY29tcG9uZW50ICovDQotew0KLSAgc2NhbnB0ci0+Y29tcHNfaW5fc2NhbiA9IDE7DQotICBzY2FucHRyLT5jb21wb25lbnRfaW5kZXhbMF0gPSBjaTsNCi0gIHNjYW5wdHItPlNzID0gU3M7DQotICBzY2FucHRyLT5TZSA9IFNlOw0KLSAgc2NhbnB0ci0+QWggPSBBaDsNCi0gIHNjYW5wdHItPkFsID0gQWw7DQotICBzY2FucHRyKys7DQotICByZXR1cm4gc2NhbnB0cjsNCi19DQotDQotTE9DQUwoanBlZ19zY2FuX2luZm8gKikNCi1maWxsX3NjYW5zIChqcGVnX3NjYW5faW5mbyAqIHNjYW5wdHIsIGludCBuY29tcHMsDQotCSAgICBpbnQgU3MsIGludCBTZSwgaW50IEFoLCBpbnQgQWwpDQotLyogU3VwcG9ydCByb3V0aW5lOiBnZW5lcmF0ZSBvbmUgc2NhbiBmb3IgZWFjaCBjb21wb25lbnQgKi8NCi17DQotICBpbnQgY2k7DQotDQotICBmb3IgKGNpID0gMDsgY2kgPCBuY29tcHM7IGNpKyspIHsNCi0gICAgc2NhbnB0ci0+Y29tcHNfaW5fc2NhbiA9IDE7DQotICAgIHNjYW5wdHItPmNvbXBvbmVudF9pbmRleFswXSA9IGNpOw0KLSAgICBzY2FucHRyLT5TcyA9IFNzOw0KLSAgICBzY2FucHRyLT5TZSA9IFNlOw0KLSAgICBzY2FucHRyLT5BaCA9IEFoOw0KLSAgICBzY2FucHRyLT5BbCA9IEFsOw0KLSAgICBzY2FucHRyKys7DQotICB9DQotICByZXR1cm4gc2NhbnB0cjsNCi19DQotDQotTE9DQUwoanBlZ19zY2FuX2luZm8gKikNCi1maWxsX2RjX3NjYW5zIChqcGVnX3NjYW5faW5mbyAqIHNjYW5wdHIsIGludCBuY29tcHMsIGludCBBaCwgaW50IEFsKQ0KLS8qIFN1cHBvcnQgcm91dGluZTogZ2VuZXJhdGUgaW50ZXJsZWF2ZWQgREMgc2NhbiBpZiBwb3NzaWJsZSwgZWxzZSBOIHNjYW5zICovDQotew0KLSAgaW50IGNpOw0KLQ0KLSAgaWYgKG5jb21wcyA8PSBNQVhfQ09NUFNfSU5fU0NBTikgew0KLSAgICAvKiBTaW5nbGUgaW50ZXJsZWF2ZWQgREMgc2NhbiAqLw0KLSAgICBzY2FucHRyLT5jb21wc19pbl9zY2FuID0gbmNvbXBzOw0KLSAgICBmb3IgKGNpID0gMDsgY2kgPCBuY29tcHM7IGNpKyspDQotICAgICAgc2NhbnB0ci0+Y29tcG9uZW50X2luZGV4W2NpXSA9IGNpOw0KLSAgICBzY2FucHRyLT5TcyA9IHNjYW5wdHItPlNlID0gMDsNCi0gICAgc2NhbnB0ci0+QWggPSBBaDsNCi0gICAgc2NhbnB0ci0+QWwgPSBBbDsNCi0gICAgc2NhbnB0cisrOw0KLSAgfSBlbHNlIHsNCi0gICAgLyogTm9uaW50ZXJsZWF2ZWQgREMgc2NhbiBmb3IgZWFjaCBjb21wb25lbnQgKi8NCi0gICAgc2NhbnB0ciA9IGZpbGxfc2NhbnMoc2NhbnB0ciwgbmNvbXBzLCAwLCAwLCBBaCwgQWwpOw0KLSAgfQ0KLSAgcmV0dXJuIHNjYW5wdHI7DQotfQ0KLQ0KLQ0KLS8qDQotICogQ3JlYXRlIGEgcmVjb21tZW5kZWQgcHJvZ3Jlc3NpdmUtSlBFRyBzY3JpcHQuDQotICogY2luZm8tPm51bV9jb21wb25lbnRzIGFuZCBjaW5mby0+anBlZ19jb2xvcl9zcGFjZSBtdXN0IGJlIGNvcnJlY3QuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotanBlZ19zaW1wbGVfcHJvZ3Jlc3Npb24gKGpfY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIGludCBuY29tcHMgPSBjaW5mby0+bnVtX2NvbXBvbmVudHM7DQotICBpbnQgbnNjYW5zOw0KLSAganBlZ19zY2FuX2luZm8gKiBzY2FucHRyOw0KLQ0KLSAgLyogU2FmZXR5IGNoZWNrIHRvIGVuc3VyZSBzdGFydF9jb21wcmVzcyBub3QgY2FsbGVkIHlldC4gKi8NCi0gIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IENTVEFURV9TVEFSVCkNCi0gICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsNCi0NCi0gIC8qIEZpZ3VyZSBzcGFjZSBuZWVkZWQgZm9yIHNjcmlwdC4gIENhbGN1bGF0aW9uIG11c3QgbWF0Y2ggY29kZSBiZWxvdyEgKi8NCi0gIGlmIChuY29tcHMgPT0gMyAmJiBjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfWUNiQ3IpIHsNCi0gICAgLyogQ3VzdG9tIHNjcmlwdCBmb3IgWUNiQ3IgY29sb3IgaW1hZ2VzLiAqLw0KLSAgICBuc2NhbnMgPSAxMDsNCi0gIH0gZWxzZSB7DQotICAgIC8qIEFsbC1wdXJwb3NlIHNjcmlwdCBmb3Igb3RoZXIgY29sb3Igc3BhY2VzLiAqLw0KLSAgICBpZiAobmNvbXBzID4gTUFYX0NPTVBTX0lOX1NDQU4pDQotICAgICAgbnNjYW5zID0gNiAqIG5jb21wczsJLyogMiBEQyArIDQgQUMgc2NhbnMgcGVyIGNvbXBvbmVudCAqLw0KLSAgICBlbHNlDQotICAgICAgbnNjYW5zID0gMiArIDQgKiBuY29tcHM7CS8qIDIgREMgc2NhbnM7IDQgQUMgc2NhbnMgcGVyIGNvbXBvbmVudCAqLw0KLSAgfQ0KLQ0KLSAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHNjcmlwdC4NCi0gICAqIFdlIG5lZWQgdG8gcHV0IGl0IGluIHRoZSBwZXJtYW5lbnQgcG9vbCBpbiBjYXNlIHRoZSBhcHBsaWNhdGlvbiBwZXJmb3Jtcw0KLSAgICogbXVsdGlwbGUgY29tcHJlc3Npb25zIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHNldHRpbmdzLiAgVG8gYXZvaWQgYSBtZW1vcnkNCi0gICAqIGxlYWsgaWYganBlZ19zaW1wbGVfcHJvZ3Jlc3Npb24gaXMgY2FsbGVkIHJlcGVhdGVkbHkgZm9yIHRoZSBzYW1lIEpQRUcNCi0gICAqIG9iamVjdCwgd2UgdHJ5IHRvIHJlLXVzZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBzcGFjZSwgYW5kIHdlIGFsbG9jYXRlDQotICAgKiBlbm91Z2ggc3BhY2UgdG8gaGFuZGxlIFlDYkNyIGV2ZW4gaWYgaW5pdGlhbGx5IGFza2VkIGZvciBncmF5c2NhbGUuDQotICAgKi8NCi0gIGlmIChjaW5mby0+c2NyaXB0X3NwYWNlID09IE5VTEwgfHwgY2luZm8tPnNjcmlwdF9zcGFjZV9zaXplIDwgbnNjYW5zKSB7DQotICAgIGNpbmZvLT5zY3JpcHRfc3BhY2Vfc2l6ZSA9IE1BWChuc2NhbnMsIDEwKTsNCi0gICAgY2luZm8tPnNjcmlwdF9zcGFjZSA9IChqcGVnX3NjYW5faW5mbyAqKQ0KLSAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfUEVSTUFORU5ULA0KLQkJCWNpbmZvLT5zY3JpcHRfc3BhY2Vfc2l6ZSAqIFNJWkVPRihqcGVnX3NjYW5faW5mbykpOw0KLSAgfQ0KLSAgc2NhbnB0ciA9IGNpbmZvLT5zY3JpcHRfc3BhY2U7DQotICBjaW5mby0+c2Nhbl9pbmZvID0gc2NhbnB0cjsNCi0gIGNpbmZvLT5udW1fc2NhbnMgPSBuc2NhbnM7DQotDQotICBpZiAobmNvbXBzID09IDMgJiYgY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX1lDYkNyKSB7DQotICAgIC8qIEN1c3RvbSBzY3JpcHQgZm9yIFlDYkNyIGNvbG9yIGltYWdlcy4gKi8NCi0gICAgLyogSW5pdGlhbCBEQyBzY2FuICovDQotICAgIHNjYW5wdHIgPSBmaWxsX2RjX3NjYW5zKHNjYW5wdHIsIG5jb21wcywgMCwgMSk7DQotICAgIC8qIEluaXRpYWwgQUMgc2NhbjogZ2V0IHNvbWUgbHVtYSBkYXRhIG91dCBpbiBhIGh1cnJ5ICovDQotICAgIHNjYW5wdHIgPSBmaWxsX2Ffc2NhbihzY2FucHRyLCAwLCAxLCA1LCAwLCAyKTsNCi0gICAgLyogQ2hyb21hIGRhdGEgaXMgdG9vIHNtYWxsIHRvIGJlIHdvcnRoIGV4cGVuZGluZyBtYW55IHNjYW5zIG9uICovDQotICAgIHNjYW5wdHIgPSBmaWxsX2Ffc2NhbihzY2FucHRyLCAyLCAxLCA2MywgMCwgMSk7DQotICAgIHNjYW5wdHIgPSBmaWxsX2Ffc2NhbihzY2FucHRyLCAxLCAxLCA2MywgMCwgMSk7DQotICAgIC8qIENvbXBsZXRlIHNwZWN0cmFsIHNlbGVjdGlvbiBmb3IgbHVtYSBBQyAqLw0KLSAgICBzY2FucHRyID0gZmlsbF9hX3NjYW4oc2NhbnB0ciwgMCwgNiwgNjMsIDAsIDIpOw0KLSAgICAvKiBSZWZpbmUgbmV4dCBiaXQgb2YgbHVtYSBBQyAqLw0KLSAgICBzY2FucHRyID0gZmlsbF9hX3NjYW4oc2NhbnB0ciwgMCwgMSwgNjMsIDIsIDEpOw0KLSAgICAvKiBGaW5pc2ggREMgc3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uICovDQotICAgIHNjYW5wdHIgPSBmaWxsX2RjX3NjYW5zKHNjYW5wdHIsIG5jb21wcywgMSwgMCk7DQotICAgIC8qIEZpbmlzaCBBQyBzdWNjZXNzaXZlIGFwcHJveGltYXRpb24gKi8NCi0gICAgc2NhbnB0ciA9IGZpbGxfYV9zY2FuKHNjYW5wdHIsIDIsIDEsIDYzLCAxLCAwKTsNCi0gICAgc2NhbnB0ciA9IGZpbGxfYV9zY2FuKHNjYW5wdHIsIDEsIDEsIDYzLCAxLCAwKTsNCi0gICAgLyogTHVtYSBib3R0b20gYml0IGNvbWVzIGxhc3Qgc2luY2UgaXQncyB1c3VhbGx5IGxhcmdlc3Qgc2NhbiAqLw0KLSAgICBzY2FucHRyID0gZmlsbF9hX3NjYW4oc2NhbnB0ciwgMCwgMSwgNjMsIDEsIDApOw0KLSAgfSBlbHNlIHsNCi0gICAgLyogQWxsLXB1cnBvc2Ugc2NyaXB0IGZvciBvdGhlciBjb2xvciBzcGFjZXMuICovDQotICAgIC8qIFN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbiBmaXJzdCBwYXNzICovDQotICAgIHNjYW5wdHIgPSBmaWxsX2RjX3NjYW5zKHNjYW5wdHIsIG5jb21wcywgMCwgMSk7DQotICAgIHNjYW5wdHIgPSBmaWxsX3NjYW5zKHNjYW5wdHIsIG5jb21wcywgMSwgNSwgMCwgMik7DQotICAgIHNjYW5wdHIgPSBmaWxsX3NjYW5zKHNjYW5wdHIsIG5jb21wcywgNiwgNjMsIDAsIDIpOw0KLSAgICAvKiBTdWNjZXNzaXZlIGFwcHJveGltYXRpb24gc2Vjb25kIHBhc3MgKi8NCi0gICAgc2NhbnB0ciA9IGZpbGxfc2NhbnMoc2NhbnB0ciwgbmNvbXBzLCAxLCA2MywgMiwgMSk7DQotICAgIC8qIFN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbiBmaW5hbCBwYXNzICovDQotICAgIHNjYW5wdHIgPSBmaWxsX2RjX3NjYW5zKHNjYW5wdHIsIG5jb21wcywgMSwgMCk7DQotICAgIHNjYW5wdHIgPSBmaWxsX3NjYW5zKHNjYW5wdHIsIG5jb21wcywgMSwgNjMsIDEsIDApOw0KLSAgfQ0KLX0NCi0NCi0jZW5kaWYgLyogQ19QUk9HUkVTU0lWRV9TVVBQT1JURUQgKi8NCi0NCi0jZW5kaWYgLy9fRlhfSlBFR19UVVJCT18NCisjaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQorLyoKKyAqIGpjcGFyYW0uYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk4LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIG9wdGlvbmFsIGRlZmF1bHQtc2V0dGluZyBjb2RlIGZvciB0aGUgSlBFRyBjb21wcmVzc29yLgorICogQXBwbGljYXRpb25zIGRvIG5vdCBoYXZlIHRvIHVzZSB0aGlzIGZpbGUsIGJ1dCB0aG9zZSB0aGF0IGRvbid0IHVzZSBpdAorICogbXVzdCBrbm93IGEgbG90IG1vcmUgYWJvdXQgdGhlIGlubmFyZHMgb2YgdGhlIEpQRUcgY29kZS4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisKKworLyoKKyAqIFF1YW50aXphdGlvbiB0YWJsZSBzZXR1cCByb3V0aW5lcworICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19hZGRfcXVhbnRfdGFibGUgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgd2hpY2hfdGJsLAorCQkgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKmJhc2ljX3RhYmxlLAorCQkgICAgICBpbnQgc2NhbGVfZmFjdG9yLCBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKQorLyogRGVmaW5lIGEgcXVhbnRpemF0aW9uIHRhYmxlIGVxdWFsIHRvIHRoZSBiYXNpY190YWJsZSB0aW1lcworICogYSBzY2FsZSBmYWN0b3IgKGdpdmVuIGFzIGEgcGVyY2VudGFnZSkuCisgKiBJZiBmb3JjZV9iYXNlbGluZSBpcyBUUlVFLCB0aGUgY29tcHV0ZWQgcXVhbnRpemF0aW9uIHRhYmxlIGVudHJpZXMKKyAqIGFyZSBsaW1pdGVkIHRvIDEuLjI1NSBmb3IgSlBFRyBiYXNlbGluZSBjb21wYXRpYmlsaXR5LgorICovCit7CisgIEpRVUFOVF9UQkwgKiogcXRibHB0cjsKKyAgaW50IGk7CisgIGxvbmcgdGVtcDsKKworICAvKiBTYWZldHkgY2hlY2sgdG8gZW5zdXJlIHN0YXJ0X2NvbXByZXNzIG5vdCBjYWxsZWQgeWV0LiAqLworICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBDU1RBVEVfU1RBUlQpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKKworICBpZiAod2hpY2hfdGJsIDwgMCB8fCB3aGljaF90YmwgPj0gTlVNX1FVQU5UX1RCTFMpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfRFFUX0lOREVYLCB3aGljaF90YmwpOworCisgIHF0YmxwdHIgPSAmIGNpbmZvLT5xdWFudF90YmxfcHRyc1t3aGljaF90YmxdOworCisgIGlmICgqcXRibHB0ciA9PSBOVUxMKQorICAgICpxdGJscHRyID0ganBlZ19hbGxvY19xdWFudF90YWJsZSgoal9jb21tb25fcHRyKSBjaW5mbyk7CisKKyAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsKKyAgICB0ZW1wID0gKChsb25nKSBiYXNpY190YWJsZVtpXSAqIHNjYWxlX2ZhY3RvciArIDUwTCkgLyAxMDBMOworICAgIC8qIGxpbWl0IHRoZSB2YWx1ZXMgdG8gdGhlIHZhbGlkIHJhbmdlICovCisgICAgaWYgKHRlbXAgPD0gMEwpIHRlbXAgPSAxTDsKKyAgICBpZiAodGVtcCA+IDMyNzY3TCkgdGVtcCA9IDMyNzY3TDsgLyogbWF4IHF1YW50aXplciBuZWVkZWQgZm9yIDEyIGJpdHMgKi8KKyAgICBpZiAoZm9yY2VfYmFzZWxpbmUgJiYgdGVtcCA+IDI1NUwpCisgICAgICB0ZW1wID0gMjU1TDsJCS8qIGxpbWl0IHRvIGJhc2VsaW5lIHJhbmdlIGlmIHJlcXVlc3RlZCAqLworICAgICgqcXRibHB0ciktPnF1YW50dmFsW2ldID0gKFVJTlQxNikgdGVtcDsKKyAgfQorCisgIC8qIEluaXRpYWxpemUgc2VudF90YWJsZSBGQUxTRSBzbyB0YWJsZSB3aWxsIGJlIHdyaXR0ZW4gdG8gSlBFRyBmaWxlLiAqLworICAoKnF0YmxwdHIpLT5zZW50X3RhYmxlID0gRkFMU0U7Cit9CisKKworR0xPQkFMKHZvaWQpCitqcGVnX3NldF9saW5lYXJfcXVhbGl0eSAoal9jb21wcmVzc19wdHIgY2luZm8sIGludCBzY2FsZV9mYWN0b3IsCisJCQkgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkKKy8qIFNldCBvciBjaGFuZ2UgdGhlICdxdWFsaXR5JyAocXVhbnRpemF0aW9uKSBzZXR0aW5nLCB1c2luZyBkZWZhdWx0IHRhYmxlcworICogYW5kIGEgc3RyYWlnaHQgcGVyY2VudGFnZS1zY2FsaW5nIHF1YWxpdHkgc2NhbGUuICBJbiBtb3N0IGNhc2VzIGl0J3MgYmV0dGVyCisgKiB0byB1c2UganBlZ19zZXRfcXVhbGl0eSAoYmVsb3cpOyB0aGlzIGVudHJ5IHBvaW50IGlzIHByb3ZpZGVkIGZvcgorICogYXBwbGljYXRpb25zIHRoYXQgaW5zaXN0IG9uIGEgbGluZWFyIHBlcmNlbnRhZ2Ugc2NhbGluZy4KKyAqLworeworICAvKiBUaGVzZSBhcmUgdGhlIHNhbXBsZSBxdWFudGl6YXRpb24gdGFibGVzIGdpdmVuIGluIEpQRUcgc3BlYyBzZWN0aW9uIEsuMS4KKyAgICogVGhlIHNwZWMgc2F5cyB0aGF0IHRoZSB2YWx1ZXMgZ2l2ZW4gcHJvZHVjZSAiZ29vZCIgcXVhbGl0eSwgYW5kCisgICAqIHdoZW4gZGl2aWRlZCBieSAyLCAidmVyeSBnb29kIiBxdWFsaXR5LgorICAgKi8KKyAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzdGRfbHVtaW5hbmNlX3F1YW50X3RibFtEQ1RTSVpFMl0gPSB7CisgICAgMTYsICAxMSwgIDEwLCAgMTYsICAyNCwgIDQwLCAgNTEsICA2MSwKKyAgICAxMiwgIDEyLCAgMTQsICAxOSwgIDI2LCAgNTgsICA2MCwgIDU1LAorICAgIDE0LCAgMTMsICAxNiwgIDI0LCAgNDAsICA1NywgIDY5LCAgNTYsCisgICAgMTQsICAxNywgIDIyLCAgMjksICA1MSwgIDg3LCAgODAsICA2MiwKKyAgICAxOCwgIDIyLCAgMzcsICA1NiwgIDY4LCAxMDksIDEwMywgIDc3LAorICAgIDI0LCAgMzUsICA1NSwgIDY0LCAgODEsIDEwNCwgMTEzLCAgOTIsCisgICAgNDksICA2NCwgIDc4LCAgODcsIDEwMywgMTIxLCAxMjAsIDEwMSwKKyAgICA3MiwgIDkyLCAgOTUsICA5OCwgMTEyLCAxMDAsIDEwMywgIDk5CisgIH07CisgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3RkX2Nocm9taW5hbmNlX3F1YW50X3RibFtEQ1RTSVpFMl0gPSB7CisgICAgMTcsICAxOCwgIDI0LCAgNDcsICA5OSwgIDk5LCAgOTksICA5OSwKKyAgICAxOCwgIDIxLCAgMjYsICA2NiwgIDk5LCAgOTksICA5OSwgIDk5LAorICAgIDI0LCAgMjYsICA1NiwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksCisgICAgNDcsICA2NiwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKKyAgICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LAorICAgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksCisgICAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKKyAgICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5CisgIH07CisKKyAgLyogU2V0IHVwIHR3byBxdWFudGl6YXRpb24gdGFibGVzIHVzaW5nIHRoZSBzcGVjaWZpZWQgc2NhbGluZyAqLworICBqcGVnX2FkZF9xdWFudF90YWJsZShjaW5mbywgMCwgc3RkX2x1bWluYW5jZV9xdWFudF90YmwsCisJCSAgICAgICBzY2FsZV9mYWN0b3IsIGZvcmNlX2Jhc2VsaW5lKTsKKyAganBlZ19hZGRfcXVhbnRfdGFibGUoY2luZm8sIDEsIHN0ZF9jaHJvbWluYW5jZV9xdWFudF90YmwsCisJCSAgICAgICBzY2FsZV9mYWN0b3IsIGZvcmNlX2Jhc2VsaW5lKTsKK30KKworCitHTE9CQUwoaW50KQoranBlZ19xdWFsaXR5X3NjYWxpbmcgKGludCBxdWFsaXR5KQorLyogQ29udmVydCBhIHVzZXItc3BlY2lmaWVkIHF1YWxpdHkgcmF0aW5nIHRvIGEgcGVyY2VudGFnZSBzY2FsaW5nIGZhY3RvcgorICogZm9yIGFuIHVuZGVybHlpbmcgcXVhbnRpemF0aW9uIHRhYmxlLCB1c2luZyBvdXIgcmVjb21tZW5kZWQgc2NhbGluZyBjdXJ2ZS4KKyAqIFRoZSBpbnB1dCAncXVhbGl0eScgZmFjdG9yIHNob3VsZCBiZSAwICh0ZXJyaWJsZSkgdG8gMTAwICh2ZXJ5IGdvb2QpLgorICovCit7CisgIC8qIFNhZmV0eSBsaW1pdCBvbiBxdWFsaXR5IGZhY3Rvci4gIENvbnZlcnQgMCB0byAxIHRvIGF2b2lkIHplcm8gZGl2aWRlLiAqLworICBpZiAocXVhbGl0eSA8PSAwKSBxdWFsaXR5ID0gMTsKKyAgaWYgKHF1YWxpdHkgPiAxMDApIHF1YWxpdHkgPSAxMDA7CisKKyAgLyogVGhlIGJhc2ljIHRhYmxlIGlzIHVzZWQgYXMtaXMgKHNjYWxpbmcgMTAwKSBmb3IgYSBxdWFsaXR5IG9mIDUwLgorICAgKiBRdWFsaXRpZXMgNTAuLjEwMCBhcmUgY29udmVydGVkIHRvIHNjYWxpbmcgcGVyY2VudGFnZSAyMDAgLSAyKlE7CisgICAqIG5vdGUgdGhhdCBhdCBRPTEwMCB0aGUgc2NhbGluZyBpcyAwLCB3aGljaCB3aWxsIGNhdXNlIGpwZWdfYWRkX3F1YW50X3RhYmxlCisgICAqIHRvIG1ha2UgYWxsIHRoZSB0YWJsZSBlbnRyaWVzIDEgKGhlbmNlLCBtaW5pbXVtIHF1YW50aXphdGlvbiBsb3NzKS4KKyAgICogUXVhbGl0aWVzIDEuLjUwIGFyZSBjb252ZXJ0ZWQgdG8gc2NhbGluZyBwZXJjZW50YWdlIDUwMDAvUS4KKyAgICovCisgIGlmIChxdWFsaXR5IDwgNTApCisgICAgcXVhbGl0eSA9IDUwMDAgLyBxdWFsaXR5OworICBlbHNlCisgICAgcXVhbGl0eSA9IDIwMCAtIHF1YWxpdHkqMjsKKworICByZXR1cm4gcXVhbGl0eTsKK30KKworCitHTE9CQUwodm9pZCkKK2pwZWdfc2V0X3F1YWxpdHkgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgcXVhbGl0eSwgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkKKy8qIFNldCBvciBjaGFuZ2UgdGhlICdxdWFsaXR5JyAocXVhbnRpemF0aW9uKSBzZXR0aW5nLCB1c2luZyBkZWZhdWx0IHRhYmxlcy4KKyAqIFRoaXMgaXMgdGhlIHN0YW5kYXJkIHF1YWxpdHktYWRqdXN0aW5nIGVudHJ5IHBvaW50IGZvciB0eXBpY2FsIHVzZXIKKyAqIGludGVyZmFjZXM7IG9ubHkgdGhvc2Ugd2hvIHdhbnQgZGV0YWlsZWQgY29udHJvbCBvdmVyIHF1YW50aXphdGlvbiB0YWJsZXMKKyAqIHdvdWxkIHVzZSB0aGUgcHJlY2VkaW5nIHRocmVlIHJvdXRpbmVzIGRpcmVjdGx5LgorICovCit7CisgIC8qIENvbnZlcnQgdXNlciAwLTEwMCByYXRpbmcgdG8gcGVyY2VudGFnZSBzY2FsaW5nICovCisgIHF1YWxpdHkgPSBqcGVnX3F1YWxpdHlfc2NhbGluZyhxdWFsaXR5KTsKKworICAvKiBTZXQgdXAgc3RhbmRhcmQgcXVhbGl0eSB0YWJsZXMgKi8KKyAganBlZ19zZXRfbGluZWFyX3F1YWxpdHkoY2luZm8sIHF1YWxpdHksIGZvcmNlX2Jhc2VsaW5lKTsKK30KKworCisvKgorICogSHVmZm1hbiB0YWJsZSBzZXR1cCByb3V0aW5lcworICovCisKK0xPQ0FMKHZvaWQpCithZGRfaHVmZl90YWJsZSAoal9jb21wcmVzc19wdHIgY2luZm8sCisJCUpIVUZGX1RCTCAqKmh0YmxwdHIsIGNvbnN0IFVJTlQ4ICpiaXRzLCBjb25zdCBVSU5UOCAqdmFsKQorLyogRGVmaW5lIGEgSHVmZm1hbiB0YWJsZSAqLworeworICBpbnQgbnN5bWJvbHMsIGxlbjsKKworICBpZiAoKmh0YmxwdHIgPT0gTlVMTCkKKyAgICAqaHRibHB0ciA9IGpwZWdfYWxsb2NfaHVmZl90YWJsZSgoal9jb21tb25fcHRyKSBjaW5mbyk7CisKKyAgLyogQ29weSB0aGUgbnVtYmVyLW9mLXN5bWJvbHMtb2YtZWFjaC1jb2RlLWxlbmd0aCBjb3VudHMgKi8KKyAgTUVNQ09QWSgoKmh0YmxwdHIpLT5iaXRzLCBiaXRzLCBTSVpFT0YoKCpodGJscHRyKS0+Yml0cykpOworCisgIC8qIFZhbGlkYXRlIHRoZSBjb3VudHMuICBXZSBkbyB0aGlzIGhlcmUgbWFpbmx5IHNvIHdlIGNhbiBjb3B5IHRoZSByaWdodAorICAgKiBudW1iZXIgb2Ygc3ltYm9scyBmcm9tIHRoZSB2YWxbXSBhcnJheSwgd2l0aG91dCByaXNraW5nIG1hcmNoaW5nIG9mZgorICAgKiB0aGUgZW5kIG9mIG1lbW9yeS4gIGpjaHVmZi5jIHdpbGwgZG8gYSBtb3JlIHRob3JvdWdoIHRlc3QgbGF0ZXIuCisgICAqLworICBuc3ltYm9scyA9IDA7CisgIGZvciAobGVuID0gMTsgbGVuIDw9IDE2OyBsZW4rKykKKyAgICBuc3ltYm9scyArPSBiaXRzW2xlbl07CisgIGlmIChuc3ltYm9scyA8IDEgfHwgbnN5bWJvbHMgPiAyNTYpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSFVGRl9UQUJMRSk7CisKKyAgTUVNQ09QWSgoKmh0YmxwdHIpLT5odWZmdmFsLCB2YWwsIG5zeW1ib2xzICogU0laRU9GKFVJTlQ4KSk7CisKKyAgLyogSW5pdGlhbGl6ZSBzZW50X3RhYmxlIEZBTFNFIHNvIHRhYmxlIHdpbGwgYmUgd3JpdHRlbiB0byBKUEVHIGZpbGUuICovCisgICgqaHRibHB0ciktPnNlbnRfdGFibGUgPSBGQUxTRTsKK30KKworCitMT0NBTCh2b2lkKQorc3RkX2h1ZmZfdGFibGVzIChqX2NvbXByZXNzX3B0ciBjaW5mbykKKy8qIFNldCB1cCB0aGUgc3RhbmRhcmQgSHVmZm1hbiB0YWJsZXMgKGNmLiBKUEVHIHN0YW5kYXJkIHNlY3Rpb24gSy4zKSAqLworLyogSU1QT1JUQU5UOiB0aGVzZSBhcmUgb25seSB2YWxpZCBmb3IgOC1iaXQgZGF0YSBwcmVjaXNpb24hICovCit7CisgIHN0YXRpYyBjb25zdCBVSU5UOCBiaXRzX2RjX2x1bWluYW5jZVsxN10gPQorICAgIHsgLyogMC1iYXNlICovIDAsIDAsIDEsIDUsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKKyAgc3RhdGljIGNvbnN0IFVJTlQ4IHZhbF9kY19sdW1pbmFuY2VbXSA9CisgICAgeyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEgfTsKKyAgCisgIHN0YXRpYyBjb25zdCBVSU5UOCBiaXRzX2RjX2Nocm9taW5hbmNlWzE3XSA9CisgICAgeyAvKiAwLWJhc2UgKi8gMCwgMCwgMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCB9OworICBzdGF0aWMgY29uc3QgVUlOVDggdmFsX2RjX2Nocm9taW5hbmNlW10gPQorICAgIHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExIH07CisgIAorICBzdGF0aWMgY29uc3QgVUlOVDggYml0c19hY19sdW1pbmFuY2VbMTddID0KKyAgICB7IC8qIDAtYmFzZSAqLyAwLCAwLCAyLCAxLCAzLCAzLCAyLCA0LCAzLCA1LCA1LCA0LCA0LCAwLCAwLCAxLCAweDdkIH07CisgIHN0YXRpYyBjb25zdCBVSU5UOCB2YWxfYWNfbHVtaW5hbmNlW10gPQorICAgIHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwMCwgMHgwNCwgMHgxMSwgMHgwNSwgMHgxMiwKKyAgICAgIDB4MjEsIDB4MzEsIDB4NDEsIDB4MDYsIDB4MTMsIDB4NTEsIDB4NjEsIDB4MDcsCisgICAgICAweDIyLCAweDcxLCAweDE0LCAweDMyLCAweDgxLCAweDkxLCAweGExLCAweDA4LAorICAgICAgMHgyMywgMHg0MiwgMHhiMSwgMHhjMSwgMHgxNSwgMHg1MiwgMHhkMSwgMHhmMCwKKyAgICAgIDB4MjQsIDB4MzMsIDB4NjIsIDB4NzIsIDB4ODIsIDB4MDksIDB4MGEsIDB4MTYsCisgICAgICAweDE3LCAweDE4LCAweDE5LCAweDFhLCAweDI1LCAweDI2LCAweDI3LCAweDI4LAorICAgICAgMHgyOSwgMHgyYSwgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwKKyAgICAgIDB4M2EsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsIDB4NDgsIDB4NDksCisgICAgICAweDRhLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LCAweDU4LCAweDU5LAorICAgICAgMHg1YSwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywgMHg2OCwgMHg2OSwKKyAgICAgIDB4NmEsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsIDB4NzksCisgICAgICAweDdhLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LCAweDg4LCAweDg5LAorICAgICAgMHg4YSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywgMHg5OCwKKyAgICAgIDB4OTksIDB4OWEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsIDB4YTYsIDB4YTcsCisgICAgICAweGE4LCAweGE5LCAweGFhLCAweGIyLCAweGIzLCAweGI0LCAweGI1LCAweGI2LAorICAgICAgMHhiNywgMHhiOCwgMHhiOSwgMHhiYSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwKKyAgICAgIDB4YzYsIDB4YzcsIDB4YzgsIDB4YzksIDB4Y2EsIDB4ZDIsIDB4ZDMsIDB4ZDQsCisgICAgICAweGQ1LCAweGQ2LCAweGQ3LCAweGQ4LCAweGQ5LCAweGRhLCAweGUxLCAweGUyLAorICAgICAgMHhlMywgMHhlNCwgMHhlNSwgMHhlNiwgMHhlNywgMHhlOCwgMHhlOSwgMHhlYSwKKyAgICAgIDB4ZjEsIDB4ZjIsIDB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcsIDB4ZjgsCisgICAgICAweGY5LCAweGZhIH07CisgIAorICBzdGF0aWMgY29uc3QgVUlOVDggYml0c19hY19jaHJvbWluYW5jZVsxN10gPQorICAgIHsgLyogMC1iYXNlICovIDAsIDAsIDIsIDEsIDIsIDQsIDQsIDMsIDQsIDcsIDUsIDQsIDQsIDAsIDEsIDIsIDB4NzcgfTsKKyAgc3RhdGljIGNvbnN0IFVJTlQ4IHZhbF9hY19jaHJvbWluYW5jZVtdID0KKyAgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MTEsIDB4MDQsIDB4MDUsIDB4MjEsCisgICAgICAweDMxLCAweDA2LCAweDEyLCAweDQxLCAweDUxLCAweDA3LCAweDYxLCAweDcxLAorICAgICAgMHgxMywgMHgyMiwgMHgzMiwgMHg4MSwgMHgwOCwgMHgxNCwgMHg0MiwgMHg5MSwKKyAgICAgIDB4YTEsIDB4YjEsIDB4YzEsIDB4MDksIDB4MjMsIDB4MzMsIDB4NTIsIDB4ZjAsCisgICAgICAweDE1LCAweDYyLCAweDcyLCAweGQxLCAweDBhLCAweDE2LCAweDI0LCAweDM0LAorICAgICAgMHhlMSwgMHgyNSwgMHhmMSwgMHgxNywgMHgxOCwgMHgxOSwgMHgxYSwgMHgyNiwKKyAgICAgIDB4MjcsIDB4MjgsIDB4MjksIDB4MmEsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsCisgICAgICAweDM5LCAweDNhLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAorICAgICAgMHg0OSwgMHg0YSwgMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwKKyAgICAgIDB4NTksIDB4NWEsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsCisgICAgICAweDY5LCAweDZhLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LCAweDc4LAorICAgICAgMHg3OSwgMHg3YSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKKyAgICAgIDB4ODgsIDB4ODksIDB4OGEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsCisgICAgICAweDk3LCAweDk4LCAweDk5LCAweDlhLCAweGEyLCAweGEzLCAweGE0LCAweGE1LAorICAgICAgMHhhNiwgMHhhNywgMHhhOCwgMHhhOSwgMHhhYSwgMHhiMiwgMHhiMywgMHhiNCwKKyAgICAgIDB4YjUsIDB4YjYsIDB4YjcsIDB4YjgsIDB4YjksIDB4YmEsIDB4YzIsIDB4YzMsCisgICAgICAweGM0LCAweGM1LCAweGM2LCAweGM3LCAweGM4LCAweGM5LCAweGNhLCAweGQyLAorICAgICAgMHhkMywgMHhkNCwgMHhkNSwgMHhkNiwgMHhkNywgMHhkOCwgMHhkOSwgMHhkYSwKKyAgICAgIDB4ZTIsIDB4ZTMsIDB4ZTQsIDB4ZTUsIDB4ZTYsIDB4ZTcsIDB4ZTgsIDB4ZTksCisgICAgICAweGVhLCAweGYyLCAweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LCAweGY4LAorICAgICAgMHhmOSwgMHhmYSB9OworICAKKyAgYWRkX2h1ZmZfdGFibGUoY2luZm8sICZjaW5mby0+ZGNfaHVmZl90YmxfcHRyc1swXSwKKwkJIGJpdHNfZGNfbHVtaW5hbmNlLCB2YWxfZGNfbHVtaW5hbmNlKTsKKyAgYWRkX2h1ZmZfdGFibGUoY2luZm8sICZjaW5mby0+YWNfaHVmZl90YmxfcHRyc1swXSwKKwkJIGJpdHNfYWNfbHVtaW5hbmNlLCB2YWxfYWNfbHVtaW5hbmNlKTsKKyAgYWRkX2h1ZmZfdGFibGUoY2luZm8sICZjaW5mby0+ZGNfaHVmZl90YmxfcHRyc1sxXSwKKwkJIGJpdHNfZGNfY2hyb21pbmFuY2UsIHZhbF9kY19jaHJvbWluYW5jZSk7CisgIGFkZF9odWZmX3RhYmxlKGNpbmZvLCAmY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbMV0sCisJCSBiaXRzX2FjX2Nocm9taW5hbmNlLCB2YWxfYWNfY2hyb21pbmFuY2UpOworfQorCisKKy8qCisgKiBEZWZhdWx0IHBhcmFtZXRlciBzZXR1cCBmb3IgY29tcHJlc3Npb24uCisgKgorICogQXBwbGljYXRpb25zIHRoYXQgZG9uJ3QgY2hvb3NlIHRvIHVzZSB0aGlzIHJvdXRpbmUgbXVzdCBkbyB0aGVpcgorICogb3duIHNldHVwIG9mIGFsbCB0aGVzZSBwYXJhbWV0ZXJzLiAgQWx0ZXJuYXRlbHksIHlvdSBjYW4gY2FsbCB0aGlzCisgKiB0byBlc3RhYmxpc2ggZGVmYXVsdHMgYW5kIHRoZW4gYWx0ZXIgcGFyYW1ldGVycyBzZWxlY3RpdmVseS4gIFRoaXMKKyAqIGlzIHRoZSByZWNvbW1lbmRlZCBhcHByb2FjaCBzaW5jZSwgaWYgd2UgYWRkIGFueSBuZXcgcGFyYW1ldGVycywKKyAqIHlvdXIgY29kZSB3aWxsIHN0aWxsIHdvcmsgKHRoZXknbGwgYmUgc2V0IHRvIHJlYXNvbmFibGUgZGVmYXVsdHMpLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19zZXRfZGVmYXVsdHMgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBpbnQgaTsKKworICAvKiBTYWZldHkgY2hlY2sgdG8gZW5zdXJlIHN0YXJ0X2NvbXByZXNzIG5vdCBjYWxsZWQgeWV0LiAqLworICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBDU1RBVEVfU1RBUlQpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKKworICAvKiBBbGxvY2F0ZSBjb21wX2luZm8gYXJyYXkgbGFyZ2UgZW5vdWdoIGZvciBtYXhpbXVtIGNvbXBvbmVudCBjb3VudC4KKyAgICogQXJyYXkgaXMgbWFkZSBwZXJtYW5lbnQgaW4gY2FzZSBhcHBsaWNhdGlvbiB3YW50cyB0byBjb21wcmVzcworICAgKiBtdWx0aXBsZSBpbWFnZXMgYXQgc2FtZSBwYXJhbSBzZXR0aW5ncy4KKyAgICovCisgIGlmIChjaW5mby0+Y29tcF9pbmZvID09IE5VTEwpCisgICAgY2luZm8tPmNvbXBfaW5mbyA9IChqcGVnX2NvbXBvbmVudF9pbmZvICopCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX1BFUk1BTkVOVCwKKwkJCQkgIE1BWF9DT01QT05FTlRTICogU0laRU9GKGpwZWdfY29tcG9uZW50X2luZm8pKTsKKworICAvKiBJbml0aWFsaXplIGV2ZXJ5dGhpbmcgbm90IGRlcGVuZGVudCBvbiB0aGUgY29sb3Igc3BhY2UgKi8KKworICBjaW5mby0+ZGF0YV9wcmVjaXNpb24gPSBCSVRTX0lOX0pTQU1QTEU7CisgIC8qIFNldCB1cCB0d28gcXVhbnRpemF0aW9uIHRhYmxlcyB1c2luZyBkZWZhdWx0IHF1YWxpdHkgb2YgNzUgKi8KKyAganBlZ19zZXRfcXVhbGl0eShjaW5mbywgNzUsIFRSVUUpOworICAvKiBTZXQgdXAgdHdvIEh1ZmZtYW4gdGFibGVzICovCisgIHN0ZF9odWZmX3RhYmxlcyhjaW5mbyk7CisKKyAgLyogSW5pdGlhbGl6ZSBkZWZhdWx0IGFyaXRobWV0aWMgY29kaW5nIGNvbmRpdGlvbmluZyAqLworICBmb3IgKGkgPSAwOyBpIDwgTlVNX0FSSVRIX1RCTFM7IGkrKykgeworICAgIGNpbmZvLT5hcml0aF9kY19MW2ldID0gMDsKKyAgICBjaW5mby0+YXJpdGhfZGNfVVtpXSA9IDE7CisgICAgY2luZm8tPmFyaXRoX2FjX0tbaV0gPSA1OworICB9CisKKyAgLyogRGVmYXVsdCBpcyBubyBtdWx0aXBsZS1zY2FuIG91dHB1dCAqLworICBjaW5mby0+c2Nhbl9pbmZvID0gTlVMTDsKKyAgY2luZm8tPm51bV9zY2FucyA9IDA7CisKKyAgLyogRXhwZWN0IG5vcm1hbCBzb3VyY2UgaW1hZ2UsIG5vdCByYXcgZG93bnNhbXBsZWQgZGF0YSAqLworICBjaW5mby0+cmF3X2RhdGFfaW4gPSBGQUxTRTsKKworICAvKiBVc2UgSHVmZm1hbiBjb2RpbmcsIG5vdCBhcml0aG1ldGljIGNvZGluZywgYnkgZGVmYXVsdCAqLworICBjaW5mby0+YXJpdGhfY29kZSA9IEZBTFNFOworCisgIC8qIEJ5IGRlZmF1bHQsIGRvbid0IGRvIGV4dHJhIHBhc3NlcyB0byBvcHRpbWl6ZSBlbnRyb3B5IGNvZGluZyAqLworICBjaW5mby0+b3B0aW1pemVfY29kaW5nID0gRkFMU0U7CisgIC8qIFRoZSBzdGFuZGFyZCBIdWZmbWFuIHRhYmxlcyBhcmUgb25seSB2YWxpZCBmb3IgOC1iaXQgZGF0YSBwcmVjaXNpb24uCisgICAqIElmIHRoZSBwcmVjaXNpb24gaXMgaGlnaGVyLCBmb3JjZSBvcHRpbWl6YXRpb24gb24gc28gdGhhdCB1c2FibGUKKyAgICogdGFibGVzIHdpbGwgYmUgY29tcHV0ZWQuICBUaGlzIHRlc3QgY2FuIGJlIHJlbW92ZWQgaWYgZGVmYXVsdCB0YWJsZXMKKyAgICogYXJlIHN1cHBsaWVkIHRoYXQgYXJlIHZhbGlkIGZvciB0aGUgZGVzaXJlZCBwcmVjaXNpb24uCisgICAqLworICBpZiAoY2luZm8tPmRhdGFfcHJlY2lzaW9uID4gOCkKKyAgICBjaW5mby0+b3B0aW1pemVfY29kaW5nID0gVFJVRTsKKworICAvKiBCeSBkZWZhdWx0LCB1c2UgdGhlIHNpbXBsZXIgbm9uLWNvc2l0ZWQgc2FtcGxpbmcgYWxpZ25tZW50ICovCisgIGNpbmZvLT5DQ0lSNjAxX3NhbXBsaW5nID0gRkFMU0U7CisKKyAgLyogTm8gaW5wdXQgc21vb3RoaW5nICovCisgIGNpbmZvLT5zbW9vdGhpbmdfZmFjdG9yID0gMDsKKworICAvKiBEQ1QgYWxnb3JpdGhtIHByZWZlcmVuY2UgKi8KKyAgY2luZm8tPmRjdF9tZXRob2QgPSBKRENUX0RFRkFVTFQ7CisKKyAgLyogTm8gcmVzdGFydCBtYXJrZXJzICovCisgIGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsID0gMDsKKyAgY2luZm8tPnJlc3RhcnRfaW5fcm93cyA9IDA7CisKKyAgLyogRmlsbCBpbiBkZWZhdWx0IEpGSUYgbWFya2VyIHBhcmFtZXRlcnMuICBOb3RlIHRoYXQgd2hldGhlciB0aGUgbWFya2VyCisgICAqIHdpbGwgYWN0dWFsbHkgYmUgd3JpdHRlbiBpcyBkZXRlcm1pbmVkIGJ5IGpwZWdfc2V0X2NvbG9yc3BhY2UuCisgICAqCisgICAqIEJ5IGRlZmF1bHQsIHRoZSBsaWJyYXJ5IGVtaXRzIEpGSUYgdmVyc2lvbiBjb2RlIDEuMDEuCisgICAqIEFuIGFwcGxpY2F0aW9uIHRoYXQgd2FudHMgdG8gZW1pdCBKRklGIDEuMDIgZXh0ZW5zaW9uIG1hcmtlcnMgc2hvdWxkIHNldAorICAgKiBKRklGX21pbm9yX3ZlcnNpb24gdG8gMi4gIFdlIGNvdWxkIHByb2JhYmx5IGdldCBhd2F5IHdpdGgganVzdCBkZWZhdWx0aW5nCisgICAqIHRvIDEuMDIsIGJ1dCB0aGVyZSBtYXkgc3RpbGwgYmUgc29tZSBkZWNvZGVycyBpbiB1c2UgdGhhdCB3aWxsIGNvbXBsYWluCisgICAqIGFib3V0IHRoYXQ7IHNheWluZyAxLjAxIHNob3VsZCBtaW5pbWl6ZSBjb21wYXRpYmlsaXR5IHByb2JsZW1zLgorICAgKi8KKyAgY2luZm8tPkpGSUZfbWFqb3JfdmVyc2lvbiA9IDE7IC8qIERlZmF1bHQgSkZJRiB2ZXJzaW9uID0gMS4wMSAqLworICBjaW5mby0+SkZJRl9taW5vcl92ZXJzaW9uID0gMTsKKyAgY2luZm8tPmRlbnNpdHlfdW5pdCA9IDA7CS8qIFBpeGVsIHNpemUgaXMgdW5rbm93biBieSBkZWZhdWx0ICovCisgIGNpbmZvLT5YX2RlbnNpdHkgPSAxOwkJLyogUGl4ZWwgYXNwZWN0IHJhdGlvIGlzIHNxdWFyZSBieSBkZWZhdWx0ICovCisgIGNpbmZvLT5ZX2RlbnNpdHkgPSAxOworCisgIC8qIENob29zZSBKUEVHIGNvbG9yc3BhY2UgYmFzZWQgb24gaW5wdXQgc3BhY2UsIHNldCBkZWZhdWx0cyBhY2NvcmRpbmdseSAqLworCisgIGpwZWdfZGVmYXVsdF9jb2xvcnNwYWNlKGNpbmZvKTsKK30KKworCisvKgorICogU2VsZWN0IGFuIGFwcHJvcHJpYXRlIEpQRUcgY29sb3JzcGFjZSBmb3IgaW5fY29sb3Jfc3BhY2UuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2RlZmF1bHRfY29sb3JzcGFjZSAoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIHN3aXRjaCAoY2luZm8tPmluX2NvbG9yX3NwYWNlKSB7CisgIGNhc2UgSkNTX0dSQVlTQ0FMRToKKyAgICBqcGVnX3NldF9jb2xvcnNwYWNlKGNpbmZvLCBKQ1NfR1JBWVNDQUxFKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfUkdCOgorICAgIGpwZWdfc2V0X2NvbG9yc3BhY2UoY2luZm8sIEpDU19ZQ2JDcik7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX1lDYkNyOgorICAgIGpwZWdfc2V0X2NvbG9yc3BhY2UoY2luZm8sIEpDU19ZQ2JDcik7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0NNWUs6CisgICAganBlZ19zZXRfY29sb3JzcGFjZShjaW5mbywgSkNTX0NNWUspOyAvKiBCeSBkZWZhdWx0LCBubyB0cmFuc2xhdGlvbiAqLworICAgIGJyZWFrOworICBjYXNlIEpDU19ZQ0NLOgorICAgIGpwZWdfc2V0X2NvbG9yc3BhY2UoY2luZm8sIEpDU19ZQ0NLKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfVU5LTk9XTjoKKyAgICBqcGVnX3NldF9jb2xvcnNwYWNlKGNpbmZvLCBKQ1NfVU5LTk9XTik7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSU5fQ09MT1JTUEFDRSk7CisgIH0KK30KKworCisvKgorICogU2V0IHRoZSBKUEVHIGNvbG9yc3BhY2UsIGFuZCBjaG9vc2UgY29sb3JzcGFjZS1kZXBlbmRlbnQgZGVmYXVsdCB2YWx1ZXMuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX3NldF9jb2xvcnNwYWNlIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSl9DT0xPUl9TUEFDRSBjb2xvcnNwYWNlKQoreworICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cjsKKyAgaW50IGNpOworCisjZGVmaW5lIFNFVF9DT01QKGluZGV4LGlkLGhzYW1wLHZzYW1wLHF1YW50LGRjdGJsLGFjdGJsKSAgXAorICAoY29tcHB0ciA9ICZjaW5mby0+Y29tcF9pbmZvW2luZGV4XSwgXAorICAgY29tcHB0ci0+Y29tcG9uZW50X2lkID0gKGlkKSwgXAorICAgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciA9IChoc2FtcCksIFwKKyAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgPSAodnNhbXApLCBcCisgICBjb21wcHRyLT5xdWFudF90Ymxfbm8gPSAocXVhbnQpLCBcCisgICBjb21wcHRyLT5kY190Ymxfbm8gPSAoZGN0YmwpLCBcCisgICBjb21wcHRyLT5hY190Ymxfbm8gPSAoYWN0YmwpICkKKworICAvKiBTYWZldHkgY2hlY2sgdG8gZW5zdXJlIHN0YXJ0X2NvbXByZXNzIG5vdCBjYWxsZWQgeWV0LiAqLworICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBDU1RBVEVfU1RBUlQpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKKworICAvKiBGb3IgYWxsIGNvbG9yc3BhY2VzLCB3ZSB1c2UgUSBhbmQgSHVmZiB0YWJsZXMgMCBmb3IgbHVtaW5hbmNlIGNvbXBvbmVudHMsCisgICAqIHRhYmxlcyAxIGZvciBjaHJvbWluYW5jZSBjb21wb25lbnRzLgorICAgKi8KKworICBjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9IGNvbG9yc3BhY2U7CisKKyAgY2luZm8tPndyaXRlX0pGSUZfaGVhZGVyID0gRkFMU0U7IC8qIE5vIG1hcmtlciBmb3Igbm9uLUpGSUYgY29sb3JzcGFjZXMgKi8KKyAgY2luZm8tPndyaXRlX0Fkb2JlX21hcmtlciA9IEZBTFNFOyAvKiB3cml0ZSBubyBBZG9iZSBtYXJrZXIgYnkgZGVmYXVsdCAqLworCisgIHN3aXRjaCAoY29sb3JzcGFjZSkgeworICBjYXNlIEpDU19HUkFZU0NBTEU6CisgICAgY2luZm8tPndyaXRlX0pGSUZfaGVhZGVyID0gVFJVRTsgLyogV3JpdGUgYSBKRklGIG1hcmtlciAqLworICAgIGNpbmZvLT5udW1fY29tcG9uZW50cyA9IDE7CisgICAgLyogSkZJRiBzcGVjaWZpZXMgY29tcG9uZW50IElEIDEgKi8KKyAgICBTRVRfQ09NUCgwLCAxLCAxLDEsIDAsIDAsMCk7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX1JHQjoKKyAgICBjaW5mby0+d3JpdGVfQWRvYmVfbWFya2VyID0gVFJVRTsgLyogd3JpdGUgQWRvYmUgbWFya2VyIHRvIGZsYWcgUkdCICovCisgICAgY2luZm8tPm51bV9jb21wb25lbnRzID0gMzsKKyAgICBTRVRfQ09NUCgwLCAweDUyIC8qICdSJyAqLywgMSwxLCAwLCAwLDApOworICAgIFNFVF9DT01QKDEsIDB4NDcgLyogJ0cnICovLCAxLDEsIDAsIDAsMCk7CisgICAgU0VUX0NPTVAoMiwgMHg0MiAvKiAnQicgKi8sIDEsMSwgMCwgMCwwKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfWUNiQ3I6CisgICAgY2luZm8tPndyaXRlX0pGSUZfaGVhZGVyID0gVFJVRTsgLyogV3JpdGUgYSBKRklGIG1hcmtlciAqLworICAgIGNpbmZvLT5udW1fY29tcG9uZW50cyA9IDM7CisgICAgLyogSkZJRiBzcGVjaWZpZXMgY29tcG9uZW50IElEcyAxLDIsMyAqLworICAgIC8qIFdlIGRlZmF1bHQgdG8gMngyIHN1YnNhbXBsZXMgb2YgY2hyb21pbmFuY2UgKi8KKyAgICBTRVRfQ09NUCgwLCAxLCAyLDIsIDAsIDAsMCk7CisgICAgU0VUX0NPTVAoMSwgMiwgMSwxLCAxLCAxLDEpOworICAgIFNFVF9DT01QKDIsIDMsIDEsMSwgMSwgMSwxKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfQ01ZSzoKKyAgICBjaW5mby0+d3JpdGVfQWRvYmVfbWFya2VyID0gVFJVRTsgLyogd3JpdGUgQWRvYmUgbWFya2VyIHRvIGZsYWcgQ01ZSyAqLworICAgIGNpbmZvLT5udW1fY29tcG9uZW50cyA9IDQ7CisgICAgU0VUX0NPTVAoMCwgMHg0MyAvKiAnQycgKi8sIDEsMSwgMCwgMCwwKTsKKyAgICBTRVRfQ09NUCgxLCAweDREIC8qICdNJyAqLywgMSwxLCAwLCAwLDApOworICAgIFNFVF9DT01QKDIsIDB4NTkgLyogJ1knICovLCAxLDEsIDAsIDAsMCk7CisgICAgU0VUX0NPTVAoMywgMHg0QiAvKiAnSycgKi8sIDEsMSwgMCwgMCwwKTsKKyAgICBicmVhazsKKyAgY2FzZSBKQ1NfWUNDSzoKKyAgICBjaW5mby0+d3JpdGVfQWRvYmVfbWFya2VyID0gVFJVRTsgLyogd3JpdGUgQWRvYmUgbWFya2VyIHRvIGZsYWcgWUNDSyAqLworICAgIGNpbmZvLT5udW1fY29tcG9uZW50cyA9IDQ7CisgICAgU0VUX0NPTVAoMCwgMSwgMiwyLCAwLCAwLDApOworICAgIFNFVF9DT01QKDEsIDIsIDEsMSwgMSwgMSwxKTsKKyAgICBTRVRfQ09NUCgyLCAzLCAxLDEsIDEsIDEsMSk7CisgICAgU0VUX0NPTVAoMywgNCwgMiwyLCAwLCAwLDApOworICAgIGJyZWFrOworICBjYXNlIEpDU19VTktOT1dOOgorICAgIGNpbmZvLT5udW1fY29tcG9uZW50cyA9IGNpbmZvLT5pbnB1dF9jb21wb25lbnRzOworICAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgPCAxIHx8IGNpbmZvLT5udW1fY29tcG9uZW50cyA+IE1BWF9DT01QT05FTlRTKQorICAgICAgRVJSRVhJVDIoY2luZm8sIEpFUlJfQ09NUE9ORU5UX0NPVU5ULCBjaW5mby0+bnVtX2NvbXBvbmVudHMsCisJICAgICAgIE1BWF9DT01QT05FTlRTKTsKKyAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKKyAgICAgIFNFVF9DT01QKGNpLCBjaSwgMSwxLCAwLCAwLDApOworICAgIH0KKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9KX0NPTE9SU1BBQ0UpOworICB9Cit9CisKKworI2lmZGVmIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVECisKK0xPQ0FMKGpwZWdfc2Nhbl9pbmZvICopCitmaWxsX2Ffc2NhbiAoanBlZ19zY2FuX2luZm8gKiBzY2FucHRyLCBpbnQgY2ksCisJICAgICBpbnQgU3MsIGludCBTZSwgaW50IEFoLCBpbnQgQWwpCisvKiBTdXBwb3J0IHJvdXRpbmU6IGdlbmVyYXRlIG9uZSBzY2FuIGZvciBzcGVjaWZpZWQgY29tcG9uZW50ICovCit7CisgIHNjYW5wdHItPmNvbXBzX2luX3NjYW4gPSAxOworICBzY2FucHRyLT5jb21wb25lbnRfaW5kZXhbMF0gPSBjaTsKKyAgc2NhbnB0ci0+U3MgPSBTczsKKyAgc2NhbnB0ci0+U2UgPSBTZTsKKyAgc2NhbnB0ci0+QWggPSBBaDsKKyAgc2NhbnB0ci0+QWwgPSBBbDsKKyAgc2NhbnB0cisrOworICByZXR1cm4gc2NhbnB0cjsKK30KKworTE9DQUwoanBlZ19zY2FuX2luZm8gKikKK2ZpbGxfc2NhbnMgKGpwZWdfc2Nhbl9pbmZvICogc2NhbnB0ciwgaW50IG5jb21wcywKKwkgICAgaW50IFNzLCBpbnQgU2UsIGludCBBaCwgaW50IEFsKQorLyogU3VwcG9ydCByb3V0aW5lOiBnZW5lcmF0ZSBvbmUgc2NhbiBmb3IgZWFjaCBjb21wb25lbnQgKi8KK3sKKyAgaW50IGNpOworCisgIGZvciAoY2kgPSAwOyBjaSA8IG5jb21wczsgY2krKykgeworICAgIHNjYW5wdHItPmNvbXBzX2luX3NjYW4gPSAxOworICAgIHNjYW5wdHItPmNvbXBvbmVudF9pbmRleFswXSA9IGNpOworICAgIHNjYW5wdHItPlNzID0gU3M7CisgICAgc2NhbnB0ci0+U2UgPSBTZTsKKyAgICBzY2FucHRyLT5BaCA9IEFoOworICAgIHNjYW5wdHItPkFsID0gQWw7CisgICAgc2NhbnB0cisrOworICB9CisgIHJldHVybiBzY2FucHRyOworfQorCitMT0NBTChqcGVnX3NjYW5faW5mbyAqKQorZmlsbF9kY19zY2FucyAoanBlZ19zY2FuX2luZm8gKiBzY2FucHRyLCBpbnQgbmNvbXBzLCBpbnQgQWgsIGludCBBbCkKKy8qIFN1cHBvcnQgcm91dGluZTogZ2VuZXJhdGUgaW50ZXJsZWF2ZWQgREMgc2NhbiBpZiBwb3NzaWJsZSwgZWxzZSBOIHNjYW5zICovCit7CisgIGludCBjaTsKKworICBpZiAobmNvbXBzIDw9IE1BWF9DT01QU19JTl9TQ0FOKSB7CisgICAgLyogU2luZ2xlIGludGVybGVhdmVkIERDIHNjYW4gKi8KKyAgICBzY2FucHRyLT5jb21wc19pbl9zY2FuID0gbmNvbXBzOworICAgIGZvciAoY2kgPSAwOyBjaSA8IG5jb21wczsgY2krKykKKyAgICAgIHNjYW5wdHItPmNvbXBvbmVudF9pbmRleFtjaV0gPSBjaTsKKyAgICBzY2FucHRyLT5TcyA9IHNjYW5wdHItPlNlID0gMDsKKyAgICBzY2FucHRyLT5BaCA9IEFoOworICAgIHNjYW5wdHItPkFsID0gQWw7CisgICAgc2NhbnB0cisrOworICB9IGVsc2UgeworICAgIC8qIE5vbmludGVybGVhdmVkIERDIHNjYW4gZm9yIGVhY2ggY29tcG9uZW50ICovCisgICAgc2NhbnB0ciA9IGZpbGxfc2NhbnMoc2NhbnB0ciwgbmNvbXBzLCAwLCAwLCBBaCwgQWwpOworICB9CisgIHJldHVybiBzY2FucHRyOworfQorCisKKy8qCisgKiBDcmVhdGUgYSByZWNvbW1lbmRlZCBwcm9ncmVzc2l2ZS1KUEVHIHNjcmlwdC4KKyAqIGNpbmZvLT5udW1fY29tcG9uZW50cyBhbmQgY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgbXVzdCBiZSBjb3JyZWN0LgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19zaW1wbGVfcHJvZ3Jlc3Npb24gKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBpbnQgbmNvbXBzID0gY2luZm8tPm51bV9jb21wb25lbnRzOworICBpbnQgbnNjYW5zOworICBqcGVnX3NjYW5faW5mbyAqIHNjYW5wdHI7CisKKyAgLyogU2FmZXR5IGNoZWNrIHRvIGVuc3VyZSBzdGFydF9jb21wcmVzcyBub3QgY2FsbGVkIHlldC4gKi8KKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gQ1NUQVRFX1NUQVJUKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CisKKyAgLyogRmlndXJlIHNwYWNlIG5lZWRlZCBmb3Igc2NyaXB0LiAgQ2FsY3VsYXRpb24gbXVzdCBtYXRjaCBjb2RlIGJlbG93ISAqLworICBpZiAobmNvbXBzID09IDMgJiYgY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX1lDYkNyKSB7CisgICAgLyogQ3VzdG9tIHNjcmlwdCBmb3IgWUNiQ3IgY29sb3IgaW1hZ2VzLiAqLworICAgIG5zY2FucyA9IDEwOworICB9IGVsc2UgeworICAgIC8qIEFsbC1wdXJwb3NlIHNjcmlwdCBmb3Igb3RoZXIgY29sb3Igc3BhY2VzLiAqLworICAgIGlmIChuY29tcHMgPiBNQVhfQ09NUFNfSU5fU0NBTikKKyAgICAgIG5zY2FucyA9IDYgKiBuY29tcHM7CS8qIDIgREMgKyA0IEFDIHNjYW5zIHBlciBjb21wb25lbnQgKi8KKyAgICBlbHNlCisgICAgICBuc2NhbnMgPSAyICsgNCAqIG5jb21wczsJLyogMiBEQyBzY2FuczsgNCBBQyBzY2FucyBwZXIgY29tcG9uZW50ICovCisgIH0KKworICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3Igc2NyaXB0LgorICAgKiBXZSBuZWVkIHRvIHB1dCBpdCBpbiB0aGUgcGVybWFuZW50IHBvb2wgaW4gY2FzZSB0aGUgYXBwbGljYXRpb24gcGVyZm9ybXMKKyAgICogbXVsdGlwbGUgY29tcHJlc3Npb25zIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHNldHRpbmdzLiAgVG8gYXZvaWQgYSBtZW1vcnkKKyAgICogbGVhayBpZiBqcGVnX3NpbXBsZV9wcm9ncmVzc2lvbiBpcyBjYWxsZWQgcmVwZWF0ZWRseSBmb3IgdGhlIHNhbWUgSlBFRworICAgKiBvYmplY3QsIHdlIHRyeSB0byByZS11c2UgcHJldmlvdXNseSBhbGxvY2F0ZWQgc3BhY2UsIGFuZCB3ZSBhbGxvY2F0ZQorICAgKiBlbm91Z2ggc3BhY2UgdG8gaGFuZGxlIFlDYkNyIGV2ZW4gaWYgaW5pdGlhbGx5IGFza2VkIGZvciBncmF5c2NhbGUuCisgICAqLworICBpZiAoY2luZm8tPnNjcmlwdF9zcGFjZSA9PSBOVUxMIHx8IGNpbmZvLT5zY3JpcHRfc3BhY2Vfc2l6ZSA8IG5zY2FucykgeworICAgIGNpbmZvLT5zY3JpcHRfc3BhY2Vfc2l6ZSA9IE1BWChuc2NhbnMsIDEwKTsKKyAgICBjaW5mby0+c2NyaXB0X3NwYWNlID0gKGpwZWdfc2Nhbl9pbmZvICopCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX1BFUk1BTkVOVCwKKwkJCWNpbmZvLT5zY3JpcHRfc3BhY2Vfc2l6ZSAqIFNJWkVPRihqcGVnX3NjYW5faW5mbykpOworICB9CisgIHNjYW5wdHIgPSBjaW5mby0+c2NyaXB0X3NwYWNlOworICBjaW5mby0+c2Nhbl9pbmZvID0gc2NhbnB0cjsKKyAgY2luZm8tPm51bV9zY2FucyA9IG5zY2FuczsKKworICBpZiAobmNvbXBzID09IDMgJiYgY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX1lDYkNyKSB7CisgICAgLyogQ3VzdG9tIHNjcmlwdCBmb3IgWUNiQ3IgY29sb3IgaW1hZ2VzLiAqLworICAgIC8qIEluaXRpYWwgREMgc2NhbiAqLworICAgIHNjYW5wdHIgPSBmaWxsX2RjX3NjYW5zKHNjYW5wdHIsIG5jb21wcywgMCwgMSk7CisgICAgLyogSW5pdGlhbCBBQyBzY2FuOiBnZXQgc29tZSBsdW1hIGRhdGEgb3V0IGluIGEgaHVycnkgKi8KKyAgICBzY2FucHRyID0gZmlsbF9hX3NjYW4oc2NhbnB0ciwgMCwgMSwgNSwgMCwgMik7CisgICAgLyogQ2hyb21hIGRhdGEgaXMgdG9vIHNtYWxsIHRvIGJlIHdvcnRoIGV4cGVuZGluZyBtYW55IHNjYW5zIG9uICovCisgICAgc2NhbnB0ciA9IGZpbGxfYV9zY2FuKHNjYW5wdHIsIDIsIDEsIDYzLCAwLCAxKTsKKyAgICBzY2FucHRyID0gZmlsbF9hX3NjYW4oc2NhbnB0ciwgMSwgMSwgNjMsIDAsIDEpOworICAgIC8qIENvbXBsZXRlIHNwZWN0cmFsIHNlbGVjdGlvbiBmb3IgbHVtYSBBQyAqLworICAgIHNjYW5wdHIgPSBmaWxsX2Ffc2NhbihzY2FucHRyLCAwLCA2LCA2MywgMCwgMik7CisgICAgLyogUmVmaW5lIG5leHQgYml0IG9mIGx1bWEgQUMgKi8KKyAgICBzY2FucHRyID0gZmlsbF9hX3NjYW4oc2NhbnB0ciwgMCwgMSwgNjMsIDIsIDEpOworICAgIC8qIEZpbmlzaCBEQyBzdWNjZXNzaXZlIGFwcHJveGltYXRpb24gKi8KKyAgICBzY2FucHRyID0gZmlsbF9kY19zY2FucyhzY2FucHRyLCBuY29tcHMsIDEsIDApOworICAgIC8qIEZpbmlzaCBBQyBzdWNjZXNzaXZlIGFwcHJveGltYXRpb24gKi8KKyAgICBzY2FucHRyID0gZmlsbF9hX3NjYW4oc2NhbnB0ciwgMiwgMSwgNjMsIDEsIDApOworICAgIHNjYW5wdHIgPSBmaWxsX2Ffc2NhbihzY2FucHRyLCAxLCAxLCA2MywgMSwgMCk7CisgICAgLyogTHVtYSBib3R0b20gYml0IGNvbWVzIGxhc3Qgc2luY2UgaXQncyB1c3VhbGx5IGxhcmdlc3Qgc2NhbiAqLworICAgIHNjYW5wdHIgPSBmaWxsX2Ffc2NhbihzY2FucHRyLCAwLCAxLCA2MywgMSwgMCk7CisgIH0gZWxzZSB7CisgICAgLyogQWxsLXB1cnBvc2Ugc2NyaXB0IGZvciBvdGhlciBjb2xvciBzcGFjZXMuICovCisgICAgLyogU3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uIGZpcnN0IHBhc3MgKi8KKyAgICBzY2FucHRyID0gZmlsbF9kY19zY2FucyhzY2FucHRyLCBuY29tcHMsIDAsIDEpOworICAgIHNjYW5wdHIgPSBmaWxsX3NjYW5zKHNjYW5wdHIsIG5jb21wcywgMSwgNSwgMCwgMik7CisgICAgc2NhbnB0ciA9IGZpbGxfc2NhbnMoc2NhbnB0ciwgbmNvbXBzLCA2LCA2MywgMCwgMik7CisgICAgLyogU3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uIHNlY29uZCBwYXNzICovCisgICAgc2NhbnB0ciA9IGZpbGxfc2NhbnMoc2NhbnB0ciwgbmNvbXBzLCAxLCA2MywgMiwgMSk7CisgICAgLyogU3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uIGZpbmFsIHBhc3MgKi8KKyAgICBzY2FucHRyID0gZmlsbF9kY19zY2FucyhzY2FucHRyLCBuY29tcHMsIDEsIDApOworICAgIHNjYW5wdHIgPSBmaWxsX3NjYW5zKHNjYW5wdHIsIG5jb21wcywgMSwgNjMsIDEsIDApOworICB9Cit9CisKKyNlbmRpZiAvKiBDX1BST0dSRVNTSVZFX1NVUFBPUlRFRCAqLworCisjZW5kaWYgLy9fRlhfSlBFR19UVVJCT18KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pjcGh1ZmYuYyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pjcGh1ZmYuYwppbmRleCBjMjY1NWZiLi42ZDg5YjZiIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY3BodWZmLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamNwaHVmZi5jCkBAIC0xLDgzNiArMSw4MzYgQEAKLSNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pDQotLyoNCi0gKiBqY3BodWZmLmMNCi0gKg0KLSAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4NCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLg0KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4NCi0gKg0KLSAqIFRoaXMgZmlsZSBjb250YWlucyBIdWZmbWFuIGVudHJvcHkgZW5jb2Rpbmcgcm91dGluZXMgZm9yIHByb2dyZXNzaXZlIEpQRUcuDQotICoNCi0gKiBXZSBkbyBub3Qgc3VwcG9ydCBvdXRwdXQgc3VzcGVuc2lvbiBpbiB0aGlzIG1vZHVsZSwgc2luY2UgdGhlIGxpYnJhcnkNCi0gKiBjdXJyZW50bHkgZG9lcyBub3QgYWxsb3cgbXVsdGlwbGUtc2NhbiBmaWxlcyB0byBiZSB3cml0dGVuIHdpdGggb3V0cHV0DQotICogc3VzcGVuc2lvbi4NCi0gKi8NCi0NCi0jZGVmaW5lIEpQRUdfSU5URVJOQUxTDQotI2luY2x1ZGUgImppbmNsdWRlLmgiDQotI2luY2x1ZGUgImpwZWdsaWIuaCINCi0jaW5jbHVkZSAiamNodWZmLmgiCQkvKiBEZWNsYXJhdGlvbnMgc2hhcmVkIHdpdGggamNodWZmLmMgKi8NCi0NCi0jaWZkZWYgQ19QUk9HUkVTU0lWRV9TVVBQT1JURUQNCi0NCi0vKiBFeHBhbmRlZCBlbnRyb3B5IGVuY29kZXIgb2JqZWN0IGZvciBwcm9ncmVzc2l2ZSBIdWZmbWFuIGVuY29kaW5nLiAqLw0KLQ0KLXR5cGVkZWYgc3RydWN0IHsNCi0gIHN0cnVjdCBqcGVnX2VudHJvcHlfZW5jb2RlciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8NCi0NCi0gIC8qIE1vZGUgZmxhZzogVFJVRSBmb3Igb3B0aW1pemF0aW9uLCBGQUxTRSBmb3IgYWN0dWFsIGRhdGEgb3V0cHV0ICovDQotICBib29sZWFuIGdhdGhlcl9zdGF0aXN0aWNzOw0KLQ0KLSAgLyogQml0LWxldmVsIGNvZGluZyBzdGF0dXMuDQotICAgKiBuZXh0X291dHB1dF9ieXRlL2ZyZWVfaW5fYnVmZmVyIGFyZSBsb2NhbCBjb3BpZXMgb2YgY2luZm8tPmRlc3QgZmllbGRzLg0KLSAgICovDQotICBKT0NURVQgKiBuZXh0X291dHB1dF9ieXRlOwkvKiA9PiBuZXh0IGJ5dGUgdG8gd3JpdGUgaW4gYnVmZmVyICovDQotICBzaXplX3QgZnJlZV9pbl9idWZmZXI7CS8qICMgb2YgYnl0ZSBzcGFjZXMgcmVtYWluaW5nIGluIGJ1ZmZlciAqLw0KLSAgSU5UMzIgcHV0X2J1ZmZlcjsJCS8qIGN1cnJlbnQgYml0LWFjY3VtdWxhdGlvbiBidWZmZXIgKi8NCi0gIGludCBwdXRfYml0czsJCQkvKiAjIG9mIGJpdHMgbm93IGluIGl0ICovDQotICBqX2NvbXByZXNzX3B0ciBjaW5mbzsJCS8qIGxpbmsgdG8gY2luZm8gKG5lZWRlZCBmb3IgZHVtcF9idWZmZXIpICovDQotDQotICAvKiBDb2Rpbmcgc3RhdHVzIGZvciBEQyBjb21wb25lbnRzICovDQotICBpbnQgbGFzdF9kY192YWxbTUFYX0NPTVBTX0lOX1NDQU5dOyAvKiBsYXN0IERDIGNvZWYgZm9yIGVhY2ggY29tcG9uZW50ICovDQotDQotICAvKiBDb2Rpbmcgc3RhdHVzIGZvciBBQyBjb21wb25lbnRzICovDQotICBpbnQgYWNfdGJsX25vOwkJLyogdGhlIHRhYmxlIG51bWJlciBvZiB0aGUgc2luZ2xlIGNvbXBvbmVudCAqLw0KLSAgdW5zaWduZWQgaW50IEVPQlJVTjsJCS8qIHJ1biBsZW5ndGggb2YgRU9CcyAqLw0KLSAgdW5zaWduZWQgaW50IEJFOwkJLyogIyBvZiBidWZmZXJlZCBjb3JyZWN0aW9uIGJpdHMgYmVmb3JlIE1DVSAqLw0KLSAgY2hhciAqIGJpdF9idWZmZXI7CQkvKiBidWZmZXIgZm9yIGNvcnJlY3Rpb24gYml0cyAoMSBwZXIgY2hhcikgKi8NCi0gIC8qIHBhY2tpbmcgY29ycmVjdGlvbiBiaXRzIHRpZ2h0bHkgd291bGQgc2F2ZSBzb21lIHNwYWNlIGJ1dCBjb3N0IHRpbWUuLi4gKi8NCi0NCi0gIHVuc2lnbmVkIGludCByZXN0YXJ0c190b19nbzsJLyogTUNVcyBsZWZ0IGluIHRoaXMgcmVzdGFydCBpbnRlcnZhbCAqLw0KLSAgaW50IG5leHRfcmVzdGFydF9udW07CQkvKiBuZXh0IHJlc3RhcnQgbnVtYmVyIHRvIHdyaXRlICgwLTcpICovDQotDQotICAvKiBQb2ludGVycyB0byBkZXJpdmVkIHRhYmxlcyAodGhlc2Ugd29ya3NwYWNlcyBoYXZlIGltYWdlIGxpZmVzcGFuKS4NCi0gICAqIFNpbmNlIGFueSBvbmUgc2NhbiBjb2RlcyBvbmx5IERDIG9yIG9ubHkgQUMsIHdlIG9ubHkgbmVlZCBvbmUgc2V0DQotICAgKiBvZiB0YWJsZXMsIG5vdCBvbmUgZm9yIERDIGFuZCBvbmUgZm9yIEFDLg0KLSAgICovDQotICBjX2Rlcml2ZWRfdGJsICogZGVyaXZlZF90YmxzW05VTV9IVUZGX1RCTFNdOw0KLQ0KLSAgLyogU3RhdGlzdGljcyB0YWJsZXMgZm9yIG9wdGltaXphdGlvbjsgYWdhaW4sIG9uZSBzZXQgaXMgZW5vdWdoICovDQotICBsb25nICogY291bnRfcHRyc1tOVU1fSFVGRl9UQkxTXTsNCi19IHBodWZmX2VudHJvcHlfZW5jb2RlcjsNCi0NCi10eXBlZGVmIHBodWZmX2VudHJvcHlfZW5jb2RlciAqIHBodWZmX2VudHJvcHlfcHRyOw0KLQ0KLS8qIE1BWF9DT1JSX0JJVFMgaXMgdGhlIG51bWJlciBvZiBiaXRzIHRoZSBBQyByZWZpbmVtZW50IGNvcnJlY3Rpb24tYml0DQotICogYnVmZmVyIGNhbiBob2xkLiAgTGFyZ2VyIHNpemVzIG1heSBzbGlnaHRseSBpbXByb3ZlIGNvbXByZXNzaW9uLCBidXQNCi0gKiAxMDAwIGlzIGFscmVhZHkgd2VsbCBpbnRvIHRoZSByZWFsbSBvZiBvdmVya2lsbC4NCi0gKiBUaGUgbWluaW11bSBzYWZlIHNpemUgaXMgNjQgYml0cy4NCi0gKi8NCi0NCi0jZGVmaW5lIE1BWF9DT1JSX0JJVFMgIDEwMDAJLyogTWF4ICMgb2YgY29ycmVjdGlvbiBiaXRzIEkgY2FuIGJ1ZmZlciAqLw0KLQ0KLS8qIElSSUdIVF9TSElGVCBpcyBsaWtlIFJJR0hUX1NISUZULCBidXQgd29ya3Mgb24gaW50IHJhdGhlciB0aGFuIElOVDMyLg0KLSAqIFdlIGFzc3VtZSB0aGF0IGludCByaWdodCBzaGlmdCBpcyB1bnNpZ25lZCBpZiBJTlQzMiByaWdodCBzaGlmdCBpcywNCi0gKiB3aGljaCBzaG91bGQgYmUgc2FmZS4NCi0gKi8NCi0NCi0jaWZkZWYgUklHSFRfU0hJRlRfSVNfVU5TSUdORUQNCi0jZGVmaW5lIElTSElGVF9URU1QUwlpbnQgaXNoaWZ0X3RlbXA7DQotI2RlZmluZSBJUklHSFRfU0hJRlQoeCxzaGZ0KSAgXA0KLQkoKGlzaGlmdF90ZW1wID0gKHgpKSA8IDAgPyBcDQotCSAoaXNoaWZ0X3RlbXAgPj4gKHNoZnQpKSB8ICgofjApIDw8ICgxNi0oc2hmdCkpKSA6IFwNCi0JIChpc2hpZnRfdGVtcCA+PiAoc2hmdCkpKQ0KLSNlbHNlDQotI2RlZmluZSBJU0hJRlRfVEVNUFMNCi0jZGVmaW5lIElSSUdIVF9TSElGVCh4LHNoZnQpCSgoeCkgPj4gKHNoZnQpKQ0KLSNlbmRpZg0KLQ0KLS8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovDQotTUVUSE9EREVGKGJvb2xlYW4pIGVuY29kZV9tY3VfRENfZmlyc3QgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJCSAgICBKQkxPQ0tST1cgKk1DVV9kYXRhKSk7DQotTUVUSE9EREVGKGJvb2xlYW4pIGVuY29kZV9tY3VfQUNfZmlyc3QgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJCSAgICBKQkxPQ0tST1cgKk1DVV9kYXRhKSk7DQotTUVUSE9EREVGKGJvb2xlYW4pIGVuY29kZV9tY3VfRENfcmVmaW5lIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sDQotCQkJCQkgICAgIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsNCi1NRVRIT0RERUYoYm9vbGVhbikgZW5jb2RlX21jdV9BQ19yZWZpbmUgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJCSAgICAgSkJMT0NLUk9XICpNQ1VfZGF0YSkpOw0KLU1FVEhPRERFRih2b2lkKSBmaW5pc2hfcGFzc19waHVmZiBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotTUVUSE9EREVGKHZvaWQpIGZpbmlzaF9wYXNzX2dhdGhlcl9waHVmZiBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotDQotDQotLyoNCi0gKiBJbml0aWFsaXplIGZvciBhIEh1ZmZtYW4tY29tcHJlc3NlZCBzY2FuIHVzaW5nIHByb2dyZXNzaXZlIEpQRUcuDQotICovDQotDQotTUVUSE9EREVGKHZvaWQpDQotc3RhcnRfcGFzc19waHVmZiAoal9jb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gZ2F0aGVyX3N0YXRpc3RpY3MpDQoteyAgDQotICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsNCi0gIGJvb2xlYW4gaXNfRENfYmFuZDsNCi0gIGludCBjaSwgdGJsOw0KLSAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7DQotDQotICBlbnRyb3B5LT5jaW5mbyA9IGNpbmZvOw0KLSAgZW50cm9weS0+Z2F0aGVyX3N0YXRpc3RpY3MgPSBnYXRoZXJfc3RhdGlzdGljczsNCi0NCi0gIGlzX0RDX2JhbmQgPSAoY2luZm8tPlNzID09IDApOw0KLQ0KLSAgLyogV2UgYXNzdW1lIGpjbWFzdGVyLmMgYWxyZWFkeSB2YWxpZGF0ZWQgdGhlIHNjYW4gcGFyYW1ldGVycy4gKi8NCi0NCi0gIC8qIFNlbGVjdCBleGVjdXRpb24gcm91dGluZXMgKi8NCi0gIGlmIChjaW5mby0+QWggPT0gMCkgew0KLSAgICBpZiAoaXNfRENfYmFuZCkNCi0gICAgICBlbnRyb3B5LT5wdWIuZW5jb2RlX21jdSA9IGVuY29kZV9tY3VfRENfZmlyc3Q7DQotICAgIGVsc2UNCi0gICAgICBlbnRyb3B5LT5wdWIuZW5jb2RlX21jdSA9IGVuY29kZV9tY3VfQUNfZmlyc3Q7DQotICB9IGVsc2Ugew0KLSAgICBpZiAoaXNfRENfYmFuZCkNCi0gICAgICBlbnRyb3B5LT5wdWIuZW5jb2RlX21jdSA9IGVuY29kZV9tY3VfRENfcmVmaW5lOw0KLSAgICBlbHNlIHsNCi0gICAgICBlbnRyb3B5LT5wdWIuZW5jb2RlX21jdSA9IGVuY29kZV9tY3VfQUNfcmVmaW5lOw0KLSAgICAgIC8qIEFDIHJlZmluZW1lbnQgbmVlZHMgYSBjb3JyZWN0aW9uIGJpdCBidWZmZXIgKi8NCi0gICAgICBpZiAoZW50cm9weS0+Yml0X2J1ZmZlciA9PSBOVUxMKQ0KLQllbnRyb3B5LT5iaXRfYnVmZmVyID0gKGNoYXIgKikNCi0JICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQkgICAgICBNQVhfQ09SUl9CSVRTICogU0laRU9GKGNoYXIpKTsNCi0gICAgfQ0KLSAgfQ0KLSAgaWYgKGdhdGhlcl9zdGF0aXN0aWNzKQ0KLSAgICBlbnRyb3B5LT5wdWIuZmluaXNoX3Bhc3MgPSBmaW5pc2hfcGFzc19nYXRoZXJfcGh1ZmY7DQotICBlbHNlDQotICAgIGVudHJvcHktPnB1Yi5maW5pc2hfcGFzcyA9IGZpbmlzaF9wYXNzX3BodWZmOw0KLQ0KLSAgLyogT25seSBEQyBjb2VmZmljaWVudHMgbWF5IGJlIGludGVybGVhdmVkLCBzbyBjaW5mby0+Y29tcHNfaW5fc2NhbiA9IDENCi0gICAqIGZvciBBQyBjb2VmZmljaWVudHMuDQotICAgKi8NCi0gIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7DQotICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07DQotICAgIC8qIEluaXRpYWxpemUgREMgcHJlZGljdGlvbnMgdG8gMCAqLw0KLSAgICBlbnRyb3B5LT5sYXN0X2RjX3ZhbFtjaV0gPSAwOw0KLSAgICAvKiBHZXQgdGFibGUgaW5kZXggKi8NCi0gICAgaWYgKGlzX0RDX2JhbmQpIHsNCi0gICAgICBpZiAoY2luZm8tPkFoICE9IDApCS8qIERDIHJlZmluZW1lbnQgbmVlZHMgbm8gdGFibGUgKi8NCi0JY29udGludWU7DQotICAgICAgdGJsID0gY29tcHB0ci0+ZGNfdGJsX25vOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgIGVudHJvcHktPmFjX3RibF9ubyA9IHRibCA9IGNvbXBwdHItPmFjX3RibF9ubzsNCi0gICAgfQ0KLSAgICBpZiAoZ2F0aGVyX3N0YXRpc3RpY3MpIHsNCi0gICAgICAvKiBDaGVjayBmb3IgaW52YWxpZCB0YWJsZSBpbmRleCAqLw0KLSAgICAgIC8qIChtYWtlX2NfZGVyaXZlZF90YmwgZG9lcyB0aGlzIGluIHRoZSBvdGhlciBwYXRoKSAqLw0KLSAgICAgIGlmICh0YmwgPCAwIHx8IHRibCA+PSBOVU1fSFVGRl9UQkxTKQ0KLSAgICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fSFVGRl9UQUJMRSwgdGJsKTsNCi0gICAgICAvKiBBbGxvY2F0ZSBhbmQgemVybyB0aGUgc3RhdGlzdGljcyB0YWJsZXMgKi8NCi0gICAgICAvKiBOb3RlIHRoYXQganBlZ19nZW5fb3B0aW1hbF90YWJsZSBleHBlY3RzIDI1NyBlbnRyaWVzIGluIGVhY2ggdGFibGUhICovDQotICAgICAgaWYgKGVudHJvcHktPmNvdW50X3B0cnNbdGJsXSA9PSBOVUxMKQ0KLQllbnRyb3B5LT5jb3VudF9wdHJzW3RibF0gPSAobG9uZyAqKQ0KLQkgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsDQotCQkJCSAgICAgIDI1NyAqIFNJWkVPRihsb25nKSk7DQotICAgICAgTUVNWkVSTyhlbnRyb3B5LT5jb3VudF9wdHJzW3RibF0sIDI1NyAqIFNJWkVPRihsb25nKSk7DQotICAgIH0gZWxzZSB7DQotICAgICAgLyogQ29tcHV0ZSBkZXJpdmVkIHZhbHVlcyBmb3IgSHVmZm1hbiB0YWJsZSAqLw0KLSAgICAgIC8qIFdlIG1heSBkbyB0aGlzIG1vcmUgdGhhbiBvbmNlIGZvciBhIHRhYmxlLCBidXQgaXQncyBub3QgZXhwZW5zaXZlICovDQotICAgICAganBlZ19tYWtlX2NfZGVyaXZlZF90YmwoY2luZm8sIGlzX0RDX2JhbmQsIHRibCwNCi0JCQkgICAgICAmIGVudHJvcHktPmRlcml2ZWRfdGJsc1t0YmxdKTsNCi0gICAgfQ0KLSAgfQ0KLQ0KLSAgLyogSW5pdGlhbGl6ZSBBQyBzdHVmZiAqLw0KLSAgZW50cm9weS0+RU9CUlVOID0gMDsNCi0gIGVudHJvcHktPkJFID0gMDsNCi0NCi0gIC8qIEluaXRpYWxpemUgYml0IGJ1ZmZlciB0byBlbXB0eSAqLw0KLSAgZW50cm9weS0+cHV0X2J1ZmZlciA9IDA7DQotICBlbnRyb3B5LT5wdXRfYml0cyA9IDA7DQotDQotICAvKiBJbml0aWFsaXplIHJlc3RhcnQgc3R1ZmYgKi8NCi0gIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7DQotICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtID0gMDsNCi19DQotDQotDQotLyogT3V0cHV0dGluZyBieXRlcyB0byB0aGUgZmlsZS4NCi0gKiBOQjogdGhlc2UgbXVzdCBiZSBjYWxsZWQgb25seSB3aGVuIGFjdHVhbGx5IG91dHB1dHRpbmcsDQotICogdGhhdCBpcywgZW50cm9weS0+Z2F0aGVyX3N0YXRpc3RpY3MgPT0gRkFMU0UuDQotICovDQotDQotLyogRW1pdCBhIGJ5dGUgKi8NCi0jZGVmaW5lIGVtaXRfYnl0ZShlbnRyb3B5LHZhbCkgIFwNCi0JeyAqKGVudHJvcHkpLT5uZXh0X291dHB1dF9ieXRlKysgPSAoSk9DVEVUKSAodmFsKTsgIFwNCi0JICBpZiAoLS0oZW50cm9weSktPmZyZWVfaW5fYnVmZmVyID09IDApICBcDQotCSAgICBkdW1wX2J1ZmZlcihlbnRyb3B5KTsgfQ0KLQ0KLQ0KLUxPQ0FMKHZvaWQpDQotZHVtcF9idWZmZXIgKHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkpDQotLyogRW1wdHkgdGhlIG91dHB1dCBidWZmZXI7IHdlIGRvIG5vdCBzdXBwb3J0IHN1c3BlbnNpb24gaW4gdGhpcyBtb2R1bGUuICovDQotew0KLSAgc3RydWN0IGpwZWdfZGVzdGluYXRpb25fbWdyICogZGVzdCA9IGVudHJvcHktPmNpbmZvLT5kZXN0Ow0KLQ0KLSAgaWYgKCEgKCpkZXN0LT5lbXB0eV9vdXRwdXRfYnVmZmVyKSAoZW50cm9weS0+Y2luZm8pKQ0KLSAgICBFUlJFWElUKGVudHJvcHktPmNpbmZvLCBKRVJSX0NBTlRfU1VTUEVORCk7DQotICAvKiBBZnRlciBhIHN1Y2Nlc3NmdWwgYnVmZmVyIGR1bXAsIG11c3QgcmVzZXQgYnVmZmVyIHBvaW50ZXJzICovDQotICBlbnRyb3B5LT5uZXh0X291dHB1dF9ieXRlID0gZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZTsNCi0gIGVudHJvcHktPmZyZWVfaW5fYnVmZmVyID0gZGVzdC0+ZnJlZV9pbl9idWZmZXI7DQotfQ0KLQ0KLQ0KLS8qIE91dHB1dHRpbmcgYml0cyB0byB0aGUgZmlsZSAqLw0KLQ0KLS8qIE9ubHkgdGhlIHJpZ2h0IDI0IGJpdHMgb2YgcHV0X2J1ZmZlciBhcmUgdXNlZDsgdGhlIHZhbGlkIGJpdHMgYXJlDQotICogbGVmdC1qdXN0aWZpZWQgaW4gdGhpcyBwYXJ0LiAgQXQgbW9zdCAxNiBiaXRzIGNhbiBiZSBwYXNzZWQgdG8gZW1pdF9iaXRzDQotICogaW4gb25lIGNhbGwsIGFuZCB3ZSBuZXZlciByZXRhaW4gbW9yZSB0aGFuIDcgYml0cyBpbiBwdXRfYnVmZmVyDQotICogYmV0d2VlbiBjYWxscywgc28gMjQgYml0cyBhcmUgc3VmZmljaWVudC4NCi0gKi8NCi0NCi1JTkxJTkUNCi1MT0NBTCh2b2lkKQ0KLWVtaXRfYml0cyAocGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSwgdW5zaWduZWQgaW50IGNvZGUsIGludCBzaXplKQ0KLS8qIEVtaXQgc29tZSBiaXRzLCB1bmxlc3Mgd2UgYXJlIGluIGdhdGhlciBtb2RlICovDQotew0KLSAgLyogVGhpcyByb3V0aW5lIGlzIGhlYXZpbHkgdXNlZCwgc28gaXQncyB3b3J0aCBjb2RpbmcgdGlnaHRseS4gKi8NCi0gIHJlZ2lzdGVyIElOVDMyIHB1dF9idWZmZXIgPSAoSU5UMzIpIGNvZGU7DQotICByZWdpc3RlciBpbnQgcHV0X2JpdHMgPSBlbnRyb3B5LT5wdXRfYml0czsNCi0NCi0gIC8qIGlmIHNpemUgaXMgMCwgY2FsbGVyIHVzZWQgYW4gaW52YWxpZCBIdWZmbWFuIHRhYmxlIGVudHJ5ICovDQotICBpZiAoc2l6ZSA9PSAwKQ0KLSAgICBFUlJFWElUKGVudHJvcHktPmNpbmZvLCBKRVJSX0hVRkZfTUlTU0lOR19DT0RFKTsNCi0NCi0gIGlmIChlbnRyb3B5LT5nYXRoZXJfc3RhdGlzdGljcykNCi0gICAgcmV0dXJuOwkJCS8qIGRvIG5vdGhpbmcgaWYgd2UncmUgb25seSBnZXR0aW5nIHN0YXRzICovDQotDQotICBwdXRfYnVmZmVyICY9ICgoKElOVDMyKSAxKTw8c2l6ZSkgLSAxOyAvKiBtYXNrIG9mZiBhbnkgZXh0cmEgYml0cyBpbiBjb2RlICovDQotICANCi0gIHB1dF9iaXRzICs9IHNpemU7CQkvKiBuZXcgbnVtYmVyIG9mIGJpdHMgaW4gYnVmZmVyICovDQotICANCi0gIHB1dF9idWZmZXIgPDw9IDI0IC0gcHV0X2JpdHM7IC8qIGFsaWduIGluY29taW5nIGJpdHMgKi8NCi0NCi0gIHB1dF9idWZmZXIgfD0gZW50cm9weS0+cHV0X2J1ZmZlcjsgLyogYW5kIG1lcmdlIHdpdGggb2xkIGJ1ZmZlciBjb250ZW50cyAqLw0KLQ0KLSAgd2hpbGUgKHB1dF9iaXRzID49IDgpIHsNCi0gICAgaW50IGMgPSAoaW50KSAoKHB1dF9idWZmZXIgPj4gMTYpICYgMHhGRik7DQotICAgIA0KLSAgICBlbWl0X2J5dGUoZW50cm9weSwgYyk7DQotICAgIGlmIChjID09IDB4RkYpIHsJCS8qIG5lZWQgdG8gc3R1ZmYgYSB6ZXJvIGJ5dGU/ICovDQotICAgICAgZW1pdF9ieXRlKGVudHJvcHksIDApOw0KLSAgICB9DQotICAgIHB1dF9idWZmZXIgPDw9IDg7DQotICAgIHB1dF9iaXRzIC09IDg7DQotICB9DQotDQotICBlbnRyb3B5LT5wdXRfYnVmZmVyID0gcHV0X2J1ZmZlcjsgLyogdXBkYXRlIHZhcmlhYmxlcyAqLw0KLSAgZW50cm9weS0+cHV0X2JpdHMgPSBwdXRfYml0czsNCi19DQotDQotDQotTE9DQUwodm9pZCkNCi1mbHVzaF9iaXRzIChwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5KQ0KLXsNCi0gIGVtaXRfYml0cyhlbnRyb3B5LCAweDdGLCA3KTsgLyogZmlsbCBhbnkgcGFydGlhbCBieXRlIHdpdGggb25lcyAqLw0KLSAgZW50cm9weS0+cHV0X2J1ZmZlciA9IDA7ICAgICAvKiBhbmQgcmVzZXQgYml0LWJ1ZmZlciB0byBlbXB0eSAqLw0KLSAgZW50cm9weS0+cHV0X2JpdHMgPSAwOw0KLX0NCi0NCi0NCi0vKg0KLSAqIEVtaXQgKG9yIGp1c3QgY291bnQpIGEgSHVmZm1hbiBzeW1ib2wuDQotICovDQotDQotSU5MSU5FDQotTE9DQUwodm9pZCkNCi1lbWl0X3N5bWJvbCAocGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSwgaW50IHRibF9ubywgaW50IHN5bWJvbCkNCi17DQotICBpZiAoZW50cm9weS0+Z2F0aGVyX3N0YXRpc3RpY3MpDQotICAgIGVudHJvcHktPmNvdW50X3B0cnNbdGJsX25vXVtzeW1ib2xdKys7DQotICBlbHNlIHsNCi0gICAgY19kZXJpdmVkX3RibCAqIHRibCA9IGVudHJvcHktPmRlcml2ZWRfdGJsc1t0Ymxfbm9dOw0KLSAgICBlbWl0X2JpdHMoZW50cm9weSwgdGJsLT5laHVmY29bc3ltYm9sXSwgdGJsLT5laHVmc2lbc3ltYm9sXSk7DQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogRW1pdCBiaXRzIGZyb20gYSBjb3JyZWN0aW9uIGJpdCBidWZmZXIuDQotICovDQotDQotTE9DQUwodm9pZCkNCi1lbWl0X2J1ZmZlcmVkX2JpdHMgKHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHksIGNoYXIgKiBidWZzdGFydCwNCi0JCSAgICB1bnNpZ25lZCBpbnQgbmJpdHMpDQotew0KLSAgaWYgKGVudHJvcHktPmdhdGhlcl9zdGF0aXN0aWNzKQ0KLSAgICByZXR1cm47CQkJLyogbm8gcmVhbCB3b3JrICovDQotDQotICB3aGlsZSAobmJpdHMgPiAwKSB7DQotICAgIGVtaXRfYml0cyhlbnRyb3B5LCAodW5zaWduZWQgaW50KSAoKmJ1ZnN0YXJ0KSwgMSk7DQotICAgIGJ1ZnN0YXJ0Kys7DQotICAgIG5iaXRzLS07DQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogRW1pdCBhbnkgcGVuZGluZyBFT0JSVU4gc3ltYm9sLg0KLSAqLw0KLQ0KLUxPQ0FMKHZvaWQpDQotZW1pdF9lb2JydW4gKHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkpDQotew0KLSAgcmVnaXN0ZXIgaW50IHRlbXAsIG5iaXRzOw0KLQ0KLSAgaWYgKGVudHJvcHktPkVPQlJVTiA+IDApIHsJLyogaWYgdGhlcmUgaXMgYW55IHBlbmRpbmcgRU9CUlVOICovDQotICAgIHRlbXAgPSBlbnRyb3B5LT5FT0JSVU47DQotICAgIG5iaXRzID0gMDsNCi0gICAgd2hpbGUgKCh0ZW1wID4+PSAxKSkNCi0gICAgICBuYml0cysrOw0KLSAgICAvKiBzYWZldHkgY2hlY2s6IHNob3VsZG4ndCBoYXBwZW4gZ2l2ZW4gbGltaXRlZCBjb3JyZWN0aW9uLWJpdCBidWZmZXIgKi8NCi0gICAgaWYgKG5iaXRzID4gMTQpDQotICAgICAgRVJSRVhJVChlbnRyb3B5LT5jaW5mbywgSkVSUl9IVUZGX01JU1NJTkdfQ09ERSk7DQotDQotICAgIGVtaXRfc3ltYm9sKGVudHJvcHksIGVudHJvcHktPmFjX3RibF9ubywgbmJpdHMgPDwgNCk7DQotICAgIGlmIChuYml0cykNCi0gICAgICBlbWl0X2JpdHMoZW50cm9weSwgZW50cm9weS0+RU9CUlVOLCBuYml0cyk7DQotDQotICAgIGVudHJvcHktPkVPQlJVTiA9IDA7DQotDQotICAgIC8qIEVtaXQgYW55IGJ1ZmZlcmVkIGNvcnJlY3Rpb24gYml0cyAqLw0KLSAgICBlbWl0X2J1ZmZlcmVkX2JpdHMoZW50cm9weSwgZW50cm9weS0+Yml0X2J1ZmZlciwgZW50cm9weS0+QkUpOw0KLSAgICBlbnRyb3B5LT5CRSA9IDA7DQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogRW1pdCBhIHJlc3RhcnQgbWFya2VyICYgcmVzeW5jaHJvbml6ZSBwcmVkaWN0aW9ucy4NCi0gKi8NCi0NCi1MT0NBTCh2b2lkKQ0KLWVtaXRfcmVzdGFydCAocGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSwgaW50IHJlc3RhcnRfbnVtKQ0KLXsNCi0gIGludCBjaTsNCi0NCi0gIGVtaXRfZW9icnVuKGVudHJvcHkpOw0KLQ0KLSAgaWYgKCEgZW50cm9weS0+Z2F0aGVyX3N0YXRpc3RpY3MpIHsNCi0gICAgZmx1c2hfYml0cyhlbnRyb3B5KTsNCi0gICAgZW1pdF9ieXRlKGVudHJvcHksIDB4RkYpOw0KLSAgICBlbWl0X2J5dGUoZW50cm9weSwgSlBFR19SU1QwICsgcmVzdGFydF9udW0pOw0KLSAgfQ0KLQ0KLSAgaWYgKGVudHJvcHktPmNpbmZvLT5TcyA9PSAwKSB7DQotICAgIC8qIFJlLWluaXRpYWxpemUgREMgcHJlZGljdGlvbnMgdG8gMCAqLw0KLSAgICBmb3IgKGNpID0gMDsgY2kgPCBlbnRyb3B5LT5jaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykNCi0gICAgICBlbnRyb3B5LT5sYXN0X2RjX3ZhbFtjaV0gPSAwOw0KLSAgfSBlbHNlIHsNCi0gICAgLyogUmUtaW5pdGlhbGl6ZSBhbGwgQUMtcmVsYXRlZCBmaWVsZHMgdG8gMCAqLw0KLSAgICBlbnRyb3B5LT5FT0JSVU4gPSAwOw0KLSAgICBlbnRyb3B5LT5CRSA9IDA7DQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogTUNVIGVuY29kaW5nIGZvciBEQyBpbml0aWFsIHNjYW4gKGVpdGhlciBzcGVjdHJhbCBzZWxlY3Rpb24sDQotICogb3IgZmlyc3QgcGFzcyBvZiBzdWNjZXNzaXZlIGFwcHJveGltYXRpb24pLg0KLSAqLw0KLQ0KLU1FVEhPRERFRihib29sZWFuKQ0KLWVuY29kZV9tY3VfRENfZmlyc3QgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQ0KLXsNCi0gIHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAocGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5Ow0KLSAgcmVnaXN0ZXIgaW50IHRlbXAsIHRlbXAyOw0KLSAgcmVnaXN0ZXIgaW50IG5iaXRzOw0KLSAgaW50IGJsa24sIGNpOw0KLSAgaW50IEFsID0gY2luZm8tPkFsOw0KLSAgSkJMT0NLUk9XIGJsb2NrOw0KLSAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7DQotICBJU0hJRlRfVEVNUFMNCi0NCi0gIGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGUgPSBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZTsNCi0gIGVudHJvcHktPmZyZWVfaW5fYnVmZmVyID0gY2luZm8tPmRlc3QtPmZyZWVfaW5fYnVmZmVyOw0KLQ0KLSAgLyogRW1pdCByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQgKi8NCi0gIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkNCi0gICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApDQotICAgICAgZW1pdF9yZXN0YXJ0KGVudHJvcHksIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0pOw0KLQ0KLSAgLyogRW5jb2RlIHRoZSBNQ1UgZGF0YSBibG9ja3MgKi8NCi0gIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7DQotICAgIGJsb2NrID0gTUNVX2RhdGFbYmxrbl07DQotICAgIGNpID0gY2luZm8tPk1DVV9tZW1iZXJzaGlwW2Jsa25dOw0KLSAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOw0KLQ0KLSAgICAvKiBDb21wdXRlIHRoZSBEQyB2YWx1ZSBhZnRlciB0aGUgcmVxdWlyZWQgcG9pbnQgdHJhbnNmb3JtIGJ5IEFsLg0KLSAgICAgKiBUaGlzIGlzIHNpbXBseSBhbiBhcml0aG1ldGljIHJpZ2h0IHNoaWZ0Lg0KLSAgICAgKi8NCi0gICAgdGVtcDIgPSBJUklHSFRfU0hJRlQoKGludCkgKCgqYmxvY2spWzBdKSwgQWwpOw0KLQ0KLSAgICAvKiBEQyBkaWZmZXJlbmNlcyBhcmUgZmlndXJlZCBvbiB0aGUgcG9pbnQtdHJhbnNmb3JtZWQgdmFsdWVzLiAqLw0KLSAgICB0ZW1wID0gdGVtcDIgLSBlbnRyb3B5LT5sYXN0X2RjX3ZhbFtjaV07DQotICAgIGVudHJvcHktPmxhc3RfZGNfdmFsW2NpXSA9IHRlbXAyOw0KLQ0KLSAgICAvKiBFbmNvZGUgdGhlIERDIGNvZWZmaWNpZW50IGRpZmZlcmVuY2UgcGVyIHNlY3Rpb24gRy4xLjIuMSAqLw0KLSAgICB0ZW1wMiA9IHRlbXA7DQotICAgIGlmICh0ZW1wIDwgMCkgew0KLSAgICAgIHRlbXAgPSAtdGVtcDsJCS8qIHRlbXAgaXMgYWJzIHZhbHVlIG9mIGlucHV0ICovDQotICAgICAgLyogRm9yIGEgbmVnYXRpdmUgaW5wdXQsIHdhbnQgdGVtcDIgPSBiaXR3aXNlIGNvbXBsZW1lbnQgb2YgYWJzKGlucHV0KSAqLw0KLSAgICAgIC8qIFRoaXMgY29kZSBhc3N1bWVzIHdlIGFyZSBvbiBhIHR3bydzIGNvbXBsZW1lbnQgbWFjaGluZSAqLw0KLSAgICAgIHRlbXAyLS07DQotICAgIH0NCi0gICAgDQotICAgIC8qIEZpbmQgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCBmb3IgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29lZmZpY2llbnQgKi8NCi0gICAgbmJpdHMgPSAwOw0KLSAgICB3aGlsZSAodGVtcCkgew0KLSAgICAgIG5iaXRzKys7DQotICAgICAgdGVtcCA+Pj0gMTsNCi0gICAgfQ0KLSAgICAvKiBDaGVjayBmb3Igb3V0LW9mLXJhbmdlIGNvZWZmaWNpZW50IHZhbHVlcy4NCi0gICAgICogU2luY2Ugd2UncmUgZW5jb2RpbmcgYSBkaWZmZXJlbmNlLCB0aGUgcmFuZ2UgbGltaXQgaXMgdHdpY2UgYXMgbXVjaC4NCi0gICAgICovDQotICAgIGlmIChuYml0cyA+IE1BWF9DT0VGX0JJVFMrMSkNCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9EQ1RfQ09FRik7DQotICAgIA0KLSAgICAvKiBDb3VudC9lbWl0IHRoZSBIdWZmbWFuLWNvZGVkIHN5bWJvbCBmb3IgdGhlIG51bWJlciBvZiBiaXRzICovDQotICAgIGVtaXRfc3ltYm9sKGVudHJvcHksIGNvbXBwdHItPmRjX3RibF9ubywgbmJpdHMpOw0KLSAgICANCi0gICAgLyogRW1pdCB0aGF0IG51bWJlciBvZiBiaXRzIG9mIHRoZSB2YWx1ZSwgaWYgcG9zaXRpdmUsICovDQotICAgIC8qIG9yIHRoZSBjb21wbGVtZW50IG9mIGl0cyBtYWduaXR1ZGUsIGlmIG5lZ2F0aXZlLiAqLw0KLSAgICBpZiAobmJpdHMpCQkJLyogZW1pdF9iaXRzIHJlamVjdHMgY2FsbHMgd2l0aCBzaXplIDAgKi8NCi0gICAgICBlbWl0X2JpdHMoZW50cm9weSwgKHVuc2lnbmVkIGludCkgdGVtcDIsIG5iaXRzKTsNCi0gIH0NCi0NCi0gIGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlID0gZW50cm9weS0+bmV4dF9vdXRwdXRfYnl0ZTsNCi0gIGNpbmZvLT5kZXN0LT5mcmVlX2luX2J1ZmZlciA9IGVudHJvcHktPmZyZWVfaW5fYnVmZmVyOw0KLQ0KLSAgLyogVXBkYXRlIHJlc3RhcnQtaW50ZXJ2YWwgc3RhdGUgdG9vICovDQotICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsNCi0gICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApIHsNCi0gICAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOw0KLSAgICAgIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0rKzsNCi0gICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtICY9IDc7DQotICAgIH0NCi0gICAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsNCi0gIH0NCi0NCi0gIHJldHVybiBUUlVFOw0KLX0NCi0NCi0NCi0vKg0KLSAqIE1DVSBlbmNvZGluZyBmb3IgQUMgaW5pdGlhbCBzY2FuIChlaXRoZXIgc3BlY3RyYWwgc2VsZWN0aW9uLA0KLSAqIG9yIGZpcnN0IHBhc3Mgb2Ygc3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uKS4NCi0gKi8NCi0NCi1NRVRIT0RERUYoYm9vbGVhbikNCi1lbmNvZGVfbWN1X0FDX2ZpcnN0IChqX2NvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkNCi17DQotICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsNCi0gIHJlZ2lzdGVyIGludCB0ZW1wLCB0ZW1wMjsNCi0gIHJlZ2lzdGVyIGludCBuYml0czsNCi0gIHJlZ2lzdGVyIGludCByLCBrOw0KLSAgaW50IFNlID0gY2luZm8tPlNlOw0KLSAgaW50IEFsID0gY2luZm8tPkFsOw0KLSAgSkJMT0NLUk9XIGJsb2NrOw0KLQ0KLSAgZW50cm9weS0+bmV4dF9vdXRwdXRfYnl0ZSA9IGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlOw0KLSAgZW50cm9weS0+ZnJlZV9pbl9idWZmZXIgPSBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXI7DQotDQotICAvKiBFbWl0IHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZCAqLw0KLSAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKQ0KLSAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkNCi0gICAgICBlbWl0X3Jlc3RhcnQoZW50cm9weSwgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSk7DQotDQotICAvKiBFbmNvZGUgdGhlIE1DVSBkYXRhIGJsb2NrICovDQotICBibG9jayA9IE1DVV9kYXRhWzBdOw0KLQ0KLSAgLyogRW5jb2RlIHRoZSBBQyBjb2VmZmljaWVudHMgcGVyIHNlY3Rpb24gRy4xLjIuMiwgZmlnLiBHLjMgKi8NCi0gIA0KLSAgciA9IDA7CQkJLyogciA9IHJ1biBsZW5ndGggb2YgemVyb3MgKi8NCi0gICANCi0gIGZvciAoayA9IGNpbmZvLT5TczsgayA8PSBTZTsgaysrKSB7DQotICAgIGlmICgodGVtcCA9ICgqYmxvY2spW2pwZWdfbmF0dXJhbF9vcmRlcltrXV0pID09IDApIHsNCi0gICAgICByKys7DQotICAgICAgY29udGludWU7DQotICAgIH0NCi0gICAgLyogV2UgbXVzdCBhcHBseSB0aGUgcG9pbnQgdHJhbnNmb3JtIGJ5IEFsLiAgRm9yIEFDIGNvZWZmaWNpZW50cyB0aGlzDQotICAgICAqIGlzIGFuIGludGVnZXIgZGl2aXNpb24gd2l0aCByb3VuZGluZyB0b3dhcmRzIDAuICBUbyBkbyB0aGlzIHBvcnRhYmx5DQotICAgICAqIGluIEMsIHdlIHNoaWZ0IGFmdGVyIG9idGFpbmluZyB0aGUgYWJzb2x1dGUgdmFsdWU7IHNvIHRoZSBjb2RlIGlzDQotICAgICAqIGludGVyd292ZW4gd2l0aCBmaW5kaW5nIHRoZSBhYnMgdmFsdWUgKHRlbXApIGFuZCBvdXRwdXQgYml0cyAodGVtcDIpLg0KLSAgICAgKi8NCi0gICAgaWYgKHRlbXAgPCAwKSB7DQotICAgICAgdGVtcCA9IC10ZW1wOwkJLyogdGVtcCBpcyBhYnMgdmFsdWUgb2YgaW5wdXQgKi8NCi0gICAgICB0ZW1wID4+PSBBbDsJCS8qIGFwcGx5IHRoZSBwb2ludCB0cmFuc2Zvcm0gKi8NCi0gICAgICAvKiBGb3IgYSBuZWdhdGl2ZSBjb2VmLCB3YW50IHRlbXAyID0gYml0d2lzZSBjb21wbGVtZW50IG9mIGFicyhjb2VmKSAqLw0KLSAgICAgIHRlbXAyID0gfnRlbXA7DQotICAgIH0gZWxzZSB7DQotICAgICAgdGVtcCA+Pj0gQWw7CQkvKiBhcHBseSB0aGUgcG9pbnQgdHJhbnNmb3JtICovDQotICAgICAgdGVtcDIgPSB0ZW1wOw0KLSAgICB9DQotICAgIC8qIFdhdGNoIG91dCBmb3IgY2FzZSB0aGF0IG5vbnplcm8gY29lZiBpcyB6ZXJvIGFmdGVyIHBvaW50IHRyYW5zZm9ybSAqLw0KLSAgICBpZiAodGVtcCA9PSAwKSB7DQotICAgICAgcisrOw0KLSAgICAgIGNvbnRpbnVlOw0KLSAgICB9DQotDQotICAgIC8qIEVtaXQgYW55IHBlbmRpbmcgRU9CUlVOICovDQotICAgIGlmIChlbnRyb3B5LT5FT0JSVU4gPiAwKQ0KLSAgICAgIGVtaXRfZW9icnVuKGVudHJvcHkpOw0KLSAgICAvKiBpZiBydW4gbGVuZ3RoID4gMTUsIG11c3QgZW1pdCBzcGVjaWFsIHJ1bi1sZW5ndGgtMTYgY29kZXMgKDB4RjApICovDQotICAgIHdoaWxlIChyID4gMTUpIHsNCi0gICAgICBlbWl0X3N5bWJvbChlbnRyb3B5LCBlbnRyb3B5LT5hY190Ymxfbm8sIDB4RjApOw0KLSAgICAgIHIgLT0gMTY7DQotICAgIH0NCi0NCi0gICAgLyogRmluZCB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIGZvciB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb2VmZmljaWVudCAqLw0KLSAgICBuYml0cyA9IDE7CQkJLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgMSBiaXQgKi8NCi0gICAgd2hpbGUgKCh0ZW1wID4+PSAxKSkNCi0gICAgICBuYml0cysrOw0KLSAgICAvKiBDaGVjayBmb3Igb3V0LW9mLXJhbmdlIGNvZWZmaWNpZW50IHZhbHVlcyAqLw0KLSAgICBpZiAobmJpdHMgPiBNQVhfQ09FRl9CSVRTKQ0KLSAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0RDVF9DT0VGKTsNCi0NCi0gICAgLyogQ291bnQvZW1pdCBIdWZmbWFuIHN5bWJvbCBmb3IgcnVuIGxlbmd0aCAvIG51bWJlciBvZiBiaXRzICovDQotICAgIGVtaXRfc3ltYm9sKGVudHJvcHksIGVudHJvcHktPmFjX3RibF9ubywgKHIgPDwgNCkgKyBuYml0cyk7DQotDQotICAgIC8qIEVtaXQgdGhhdCBudW1iZXIgb2YgYml0cyBvZiB0aGUgdmFsdWUsIGlmIHBvc2l0aXZlLCAqLw0KLSAgICAvKiBvciB0aGUgY29tcGxlbWVudCBvZiBpdHMgbWFnbml0dWRlLCBpZiBuZWdhdGl2ZS4gKi8NCi0gICAgZW1pdF9iaXRzKGVudHJvcHksICh1bnNpZ25lZCBpbnQpIHRlbXAyLCBuYml0cyk7DQotDQotICAgIHIgPSAwOwkJCS8qIHJlc2V0IHplcm8gcnVuIGxlbmd0aCAqLw0KLSAgfQ0KLQ0KLSAgaWYgKHIgPiAwKSB7CQkJLyogSWYgdGhlcmUgYXJlIHRyYWlsaW5nIHplcm9lcywgKi8NCi0gICAgZW50cm9weS0+RU9CUlVOKys7CQkvKiBjb3VudCBhbiBFT0IgKi8NCi0gICAgaWYgKGVudHJvcHktPkVPQlJVTiA9PSAweDdGRkYpDQotICAgICAgZW1pdF9lb2JydW4oZW50cm9weSk7CS8qIGZvcmNlIGl0IG91dCB0byBhdm9pZCBvdmVyZmxvdyAqLw0KLSAgfQ0KLQ0KLSAgY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGUgPSBlbnRyb3B5LT5uZXh0X291dHB1dF9ieXRlOw0KLSAgY2luZm8tPmRlc3QtPmZyZWVfaW5fYnVmZmVyID0gZW50cm9weS0+ZnJlZV9pbl9idWZmZXI7DQotDQotICAvKiBVcGRhdGUgcmVzdGFydC1pbnRlcnZhbCBzdGF0ZSB0b28gKi8NCi0gIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgew0KLSAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkgew0KLSAgICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7DQotICAgICAgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSsrOw0KLSAgICAgIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0gJj0gNzsNCi0gICAgfQ0KLSAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOw0KLSAgfQ0KLQ0KLSAgcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLQ0KLS8qDQotICogTUNVIGVuY29kaW5nIGZvciBEQyBzdWNjZXNzaXZlIGFwcHJveGltYXRpb24gcmVmaW5lbWVudCBzY2FuLg0KLSAqIE5vdGU6IHdlIGFzc3VtZSBzdWNoIHNjYW5zIGNhbiBiZSBtdWx0aS1jb21wb25lbnQsIGFsdGhvdWdoIHRoZSBzcGVjDQotICogaXMgbm90IHZlcnkgY2xlYXIgb24gdGhlIHBvaW50Lg0KLSAqLw0KLQ0KLU1FVEhPRERFRihib29sZWFuKQ0KLWVuY29kZV9tY3VfRENfcmVmaW5lIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkNCi17DQotICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsNCi0gIHJlZ2lzdGVyIGludCB0ZW1wOw0KLSAgaW50IGJsa247DQotICBpbnQgQWwgPSBjaW5mby0+QWw7DQotICBKQkxPQ0tST1cgYmxvY2s7DQotDQotICBlbnRyb3B5LT5uZXh0X291dHB1dF9ieXRlID0gY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGU7DQotICBlbnRyb3B5LT5mcmVlX2luX2J1ZmZlciA9IGNpbmZvLT5kZXN0LT5mcmVlX2luX2J1ZmZlcjsNCi0NCi0gIC8qIEVtaXQgcmVzdGFydCBtYXJrZXIgaWYgbmVlZGVkICovDQotICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpDQotICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQ0KLSAgICAgIGVtaXRfcmVzdGFydChlbnRyb3B5LCBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKTsNCi0NCi0gIC8qIEVuY29kZSB0aGUgTUNVIGRhdGEgYmxvY2tzICovDQotICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgew0KLSAgICBibG9jayA9IE1DVV9kYXRhW2Jsa25dOw0KLQ0KLSAgICAvKiBXZSBzaW1wbHkgZW1pdCB0aGUgQWwndGggYml0IG9mIHRoZSBEQyBjb2VmZmljaWVudCB2YWx1ZS4gKi8NCi0gICAgdGVtcCA9ICgqYmxvY2spWzBdOw0KLSAgICBlbWl0X2JpdHMoZW50cm9weSwgKHVuc2lnbmVkIGludCkgKHRlbXAgPj4gQWwpLCAxKTsNCi0gIH0NCi0NCi0gIGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlID0gZW50cm9weS0+bmV4dF9vdXRwdXRfYnl0ZTsNCi0gIGNpbmZvLT5kZXN0LT5mcmVlX2luX2J1ZmZlciA9IGVudHJvcHktPmZyZWVfaW5fYnVmZmVyOw0KLQ0KLSAgLyogVXBkYXRlIHJlc3RhcnQtaW50ZXJ2YWwgc3RhdGUgdG9vICovDQotICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsNCi0gICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApIHsNCi0gICAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOw0KLSAgICAgIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0rKzsNCi0gICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtICY9IDc7DQotICAgIH0NCi0gICAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsNCi0gIH0NCi0NCi0gIHJldHVybiBUUlVFOw0KLX0NCi0NCi0NCi0vKg0KLSAqIE1DVSBlbmNvZGluZyBmb3IgQUMgc3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uIHJlZmluZW1lbnQgc2Nhbi4NCi0gKi8NCi0NCi1NRVRIT0RERUYoYm9vbGVhbikNCi1lbmNvZGVfbWN1X0FDX3JlZmluZSAoal9jb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpDQotew0KLSAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7DQotICByZWdpc3RlciBpbnQgdGVtcDsNCi0gIHJlZ2lzdGVyIGludCByLCBrOw0KLSAgaW50IEVPQjsNCi0gIGNoYXIgKkJSX2J1ZmZlcjsNCi0gIHVuc2lnbmVkIGludCBCUjsNCi0gIGludCBTZSA9IGNpbmZvLT5TZTsNCi0gIGludCBBbCA9IGNpbmZvLT5BbDsNCi0gIEpCTE9DS1JPVyBibG9jazsNCi0gIGludCBhYnN2YWx1ZXNbRENUU0laRTJdOw0KLQ0KLSAgZW50cm9weS0+bmV4dF9vdXRwdXRfYnl0ZSA9IGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlOw0KLSAgZW50cm9weS0+ZnJlZV9pbl9idWZmZXIgPSBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXI7DQotDQotICAvKiBFbWl0IHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZCAqLw0KLSAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKQ0KLSAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkNCi0gICAgICBlbWl0X3Jlc3RhcnQoZW50cm9weSwgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSk7DQotDQotICAvKiBFbmNvZGUgdGhlIE1DVSBkYXRhIGJsb2NrICovDQotICBibG9jayA9IE1DVV9kYXRhWzBdOw0KLQ0KLSAgLyogSXQgaXMgY29udmVuaWVudCB0byBtYWtlIGEgcHJlLXBhc3MgdG8gZGV0ZXJtaW5lIHRoZSB0cmFuc2Zvcm1lZA0KLSAgICogY29lZmZpY2llbnRzJyBhYnNvbHV0ZSB2YWx1ZXMgYW5kIHRoZSBFT0IgcG9zaXRpb24uDQotICAgKi8NCi0gIEVPQiA9IDA7DQotICBmb3IgKGsgPSBjaW5mby0+U3M7IGsgPD0gU2U7IGsrKykgew0KLSAgICB0ZW1wID0gKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tdXTsNCi0gICAgLyogV2UgbXVzdCBhcHBseSB0aGUgcG9pbnQgdHJhbnNmb3JtIGJ5IEFsLiAgRm9yIEFDIGNvZWZmaWNpZW50cyB0aGlzDQotICAgICAqIGlzIGFuIGludGVnZXIgZGl2aXNpb24gd2l0aCByb3VuZGluZyB0b3dhcmRzIDAuICBUbyBkbyB0aGlzIHBvcnRhYmx5DQotICAgICAqIGluIEMsIHdlIHNoaWZ0IGFmdGVyIG9idGFpbmluZyB0aGUgYWJzb2x1dGUgdmFsdWUuDQotICAgICAqLw0KLSAgICBpZiAodGVtcCA8IDApDQotICAgICAgdGVtcCA9IC10ZW1wOwkJLyogdGVtcCBpcyBhYnMgdmFsdWUgb2YgaW5wdXQgKi8NCi0gICAgdGVtcCA+Pj0gQWw7CQkvKiBhcHBseSB0aGUgcG9pbnQgdHJhbnNmb3JtICovDQotICAgIGFic3ZhbHVlc1trXSA9IHRlbXA7CS8qIHNhdmUgYWJzIHZhbHVlIGZvciBtYWluIHBhc3MgKi8NCi0gICAgaWYgKHRlbXAgPT0gMSkNCi0gICAgICBFT0IgPSBrOwkJCS8qIEVPQiA9IGluZGV4IG9mIGxhc3QgbmV3bHktbm9uemVybyBjb2VmICovDQotICB9DQotDQotICAvKiBFbmNvZGUgdGhlIEFDIGNvZWZmaWNpZW50cyBwZXIgc2VjdGlvbiBHLjEuMi4zLCBmaWcuIEcuNyAqLw0KLSAgDQotICByID0gMDsJCQkvKiByID0gcnVuIGxlbmd0aCBvZiB6ZXJvcyAqLw0KLSAgQlIgPSAwOwkJCS8qIEJSID0gY291bnQgb2YgYnVmZmVyZWQgYml0cyBhZGRlZCBub3cgKi8NCi0gIEJSX2J1ZmZlciA9IGVudHJvcHktPmJpdF9idWZmZXIgKyBlbnRyb3B5LT5CRTsgLyogQXBwZW5kIGJpdHMgdG8gYnVmZmVyICovDQotDQotICBmb3IgKGsgPSBjaW5mby0+U3M7IGsgPD0gU2U7IGsrKykgew0KLSAgICBpZiAoKHRlbXAgPSBhYnN2YWx1ZXNba10pID09IDApIHsNCi0gICAgICByKys7DQotICAgICAgY29udGludWU7DQotICAgIH0NCi0NCi0gICAgLyogRW1pdCBhbnkgcmVxdWlyZWQgWlJMcywgYnV0IG5vdCBpZiB0aGV5IGNhbiBiZSBmb2xkZWQgaW50byBFT0IgKi8NCi0gICAgd2hpbGUgKHIgPiAxNSAmJiBrIDw9IEVPQikgew0KLSAgICAgIC8qIGVtaXQgYW55IHBlbmRpbmcgRU9CUlVOIGFuZCB0aGUgQkUgY29ycmVjdGlvbiBiaXRzICovDQotICAgICAgZW1pdF9lb2JydW4oZW50cm9weSk7DQotICAgICAgLyogRW1pdCBaUkwgKi8NCi0gICAgICBlbWl0X3N5bWJvbChlbnRyb3B5LCBlbnRyb3B5LT5hY190Ymxfbm8sIDB4RjApOw0KLSAgICAgIHIgLT0gMTY7DQotICAgICAgLyogRW1pdCBidWZmZXJlZCBjb3JyZWN0aW9uIGJpdHMgdGhhdCBtdXN0IGJlIGFzc29jaWF0ZWQgd2l0aCBaUkwgKi8NCi0gICAgICBlbWl0X2J1ZmZlcmVkX2JpdHMoZW50cm9weSwgQlJfYnVmZmVyLCBCUik7DQotICAgICAgQlJfYnVmZmVyID0gZW50cm9weS0+Yml0X2J1ZmZlcjsgLyogQkUgYml0cyBhcmUgZ29uZSBub3cgKi8NCi0gICAgICBCUiA9IDA7DQotICAgIH0NCi0NCi0gICAgLyogSWYgdGhlIGNvZWYgd2FzIHByZXZpb3VzbHkgbm9uemVybywgaXQgb25seSBuZWVkcyBhIGNvcnJlY3Rpb24gYml0Lg0KLSAgICAgKiBOT1RFOiBhIHN0cmFpZ2h0IHRyYW5zbGF0aW9uIG9mIHRoZSBzcGVjJ3MgZmlndXJlIEcuNyB3b3VsZCBzdWdnZXN0DQotICAgICAqIHRoYXQgd2UgYWxzbyBuZWVkIHRvIHRlc3QgciA+IDE1LiAgQnV0IGlmIHIgPiAxNSwgd2UgY2FuIG9ubHkgZ2V0IGhlcmUNCi0gICAgICogaWYgayA+IEVPQiwgd2hpY2ggaW1wbGllcyB0aGF0IHRoaXMgY29lZmZpY2llbnQgaXMgbm90IDEuDQotICAgICAqLw0KLSAgICBpZiAodGVtcCA+IDEpIHsNCi0gICAgICAvKiBUaGUgY29ycmVjdGlvbiBiaXQgaXMgdGhlIG5leHQgYml0IG9mIHRoZSBhYnNvbHV0ZSB2YWx1ZS4gKi8NCi0gICAgICBCUl9idWZmZXJbQlIrK10gPSAoY2hhcikgKHRlbXAgJiAxKTsNCi0gICAgICBjb250aW51ZTsNCi0gICAgfQ0KLQ0KLSAgICAvKiBFbWl0IGFueSBwZW5kaW5nIEVPQlJVTiBhbmQgdGhlIEJFIGNvcnJlY3Rpb24gYml0cyAqLw0KLSAgICBlbWl0X2VvYnJ1bihlbnRyb3B5KTsNCi0NCi0gICAgLyogQ291bnQvZW1pdCBIdWZmbWFuIHN5bWJvbCBmb3IgcnVuIGxlbmd0aCAvIG51bWJlciBvZiBiaXRzICovDQotICAgIGVtaXRfc3ltYm9sKGVudHJvcHksIGVudHJvcHktPmFjX3RibF9ubywgKHIgPDwgNCkgKyAxKTsNCi0NCi0gICAgLyogRW1pdCBvdXRwdXQgYml0IGZvciBuZXdseS1ub256ZXJvIGNvZWYgKi8NCi0gICAgdGVtcCA9ICgoKmJsb2NrKVtqcGVnX25hdHVyYWxfb3JkZXJba11dIDwgMCkgPyAwIDogMTsNCi0gICAgZW1pdF9iaXRzKGVudHJvcHksICh1bnNpZ25lZCBpbnQpIHRlbXAsIDEpOw0KLQ0KLSAgICAvKiBFbWl0IGJ1ZmZlcmVkIGNvcnJlY3Rpb24gYml0cyB0aGF0IG11c3QgYmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29kZSAqLw0KLSAgICBlbWl0X2J1ZmZlcmVkX2JpdHMoZW50cm9weSwgQlJfYnVmZmVyLCBCUik7DQotICAgIEJSX2J1ZmZlciA9IGVudHJvcHktPmJpdF9idWZmZXI7IC8qIEJFIGJpdHMgYXJlIGdvbmUgbm93ICovDQotICAgIEJSID0gMDsNCi0gICAgciA9IDA7CQkJLyogcmVzZXQgemVybyBydW4gbGVuZ3RoICovDQotICB9DQotDQotICBpZiAociA+IDAgfHwgQlIgPiAwKSB7CS8qIElmIHRoZXJlIGFyZSB0cmFpbGluZyB6ZXJvZXMsICovDQotICAgIGVudHJvcHktPkVPQlJVTisrOwkJLyogY291bnQgYW4gRU9CICovDQotICAgIGVudHJvcHktPkJFICs9IEJSOwkJLyogY29uY2F0IG15IGNvcnJlY3Rpb24gYml0cyB0byBvbGRlciBvbmVzICovDQotICAgIC8qIFdlIGZvcmNlIG91dCB0aGUgRU9CIGlmIHdlIHJpc2sgZWl0aGVyOg0KLSAgICAgKiAxLiBvdmVyZmxvdyBvZiB0aGUgRU9CIGNvdW50ZXI7DQotICAgICAqIDIuIG92ZXJmbG93IG9mIHRoZSBjb3JyZWN0aW9uIGJpdCBidWZmZXIgZHVyaW5nIHRoZSBuZXh0IE1DVS4NCi0gICAgICovDQotICAgIGlmIChlbnRyb3B5LT5FT0JSVU4gPT0gMHg3RkZGIHx8IGVudHJvcHktPkJFID4gKE1BWF9DT1JSX0JJVFMtRENUU0laRTIrMSkpDQotICAgICAgZW1pdF9lb2JydW4oZW50cm9weSk7DQotICB9DQotDQotICBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZSA9IGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGU7DQotICBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXIgPSBlbnRyb3B5LT5mcmVlX2luX2J1ZmZlcjsNCi0NCi0gIC8qIFVwZGF0ZSByZXN0YXJ0LWludGVydmFsIHN0YXRlIHRvbyAqLw0KLSAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7DQotICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKSB7DQotICAgICAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPSBjaW5mby0+cmVzdGFydF9pbnRlcnZhbDsNCi0gICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKys7DQotICAgICAgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSAmPSA3Ow0KLSAgICB9DQotICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07DQotICB9DQotDQotICByZXR1cm4gVFJVRTsNCi19DQotDQotDQotLyoNCi0gKiBGaW5pc2ggdXAgYXQgdGhlIGVuZCBvZiBhIEh1ZmZtYW4tY29tcHJlc3NlZCBwcm9ncmVzc2l2ZSBzY2FuLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLWZpbmlzaF9wYXNzX3BodWZmIChqX2NvbXByZXNzX3B0ciBjaW5mbykNCi17ICAgDQotICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsNCi0NCi0gIGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGUgPSBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZTsNCi0gIGVudHJvcHktPmZyZWVfaW5fYnVmZmVyID0gY2luZm8tPmRlc3QtPmZyZWVfaW5fYnVmZmVyOw0KLQ0KLSAgLyogRmx1c2ggb3V0IGFueSBidWZmZXJlZCBkYXRhICovDQotICBlbWl0X2VvYnJ1bihlbnRyb3B5KTsNCi0gIGZsdXNoX2JpdHMoZW50cm9weSk7DQotDQotICBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZSA9IGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGU7DQotICBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXIgPSBlbnRyb3B5LT5mcmVlX2luX2J1ZmZlcjsNCi19DQotDQotDQotLyoNCi0gKiBGaW5pc2ggdXAgYSBzdGF0aXN0aWNzLWdhdGhlcmluZyBwYXNzIGFuZCBjcmVhdGUgdGhlIG5ldyBIdWZmbWFuIHRhYmxlcy4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1maW5pc2hfcGFzc19nYXRoZXJfcGh1ZmYgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAocGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5Ow0KLSAgYm9vbGVhbiBpc19EQ19iYW5kOw0KLSAgaW50IGNpLCB0Ymw7DQotICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cjsNCi0gIEpIVUZGX1RCTCAqKmh0YmxwdHI7DQotICBib29sZWFuIGRpZFtOVU1fSFVGRl9UQkxTXTsNCi0NCi0gIC8qIEZsdXNoIG91dCBidWZmZXJlZCBkYXRhIChhbGwgd2UgY2FyZSBhYm91dCBpcyBjb3VudGluZyB0aGUgRU9CIHN5bWJvbCkgKi8NCi0gIGVtaXRfZW9icnVuKGVudHJvcHkpOw0KLQ0KLSAgaXNfRENfYmFuZCA9IChjaW5mby0+U3MgPT0gMCk7DQotDQotICAvKiBJdCdzIGltcG9ydGFudCBub3QgdG8gYXBwbHkganBlZ19nZW5fb3B0aW1hbF90YWJsZSBtb3JlIHRoYW4gb25jZQ0KLSAgICogcGVyIHRhYmxlLCBiZWNhdXNlIGl0IGNsb2JiZXJzIHRoZSBpbnB1dCBmcmVxdWVuY3kgY291bnRzIQ0KLSAgICovDQotICBNRU1aRVJPKGRpZCwgU0laRU9GKGRpZCkpOw0KLQ0KLSAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspIHsNCi0gICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsNCi0gICAgaWYgKGlzX0RDX2JhbmQpIHsNCi0gICAgICBpZiAoY2luZm8tPkFoICE9IDApCS8qIERDIHJlZmluZW1lbnQgbmVlZHMgbm8gdGFibGUgKi8NCi0JY29udGludWU7DQotICAgICAgdGJsID0gY29tcHB0ci0+ZGNfdGJsX25vOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgIHRibCA9IGNvbXBwdHItPmFjX3RibF9ubzsNCi0gICAgfQ0KLSAgICBpZiAoISBkaWRbdGJsXSkgew0KLSAgICAgIGlmIChpc19EQ19iYW5kKQ0KLSAgICAgICAgaHRibHB0ciA9ICYgY2luZm8tPmRjX2h1ZmZfdGJsX3B0cnNbdGJsXTsNCi0gICAgICBlbHNlDQotICAgICAgICBodGJscHRyID0gJiBjaW5mby0+YWNfaHVmZl90YmxfcHRyc1t0YmxdOw0KLSAgICAgIGlmICgqaHRibHB0ciA9PSBOVUxMKQ0KLSAgICAgICAgKmh0YmxwdHIgPSBqcGVnX2FsbG9jX2h1ZmZfdGFibGUoKGpfY29tbW9uX3B0cikgY2luZm8pOw0KLSAgICAgIGpwZWdfZ2VuX29wdGltYWxfdGFibGUoY2luZm8sICpodGJscHRyLCBlbnRyb3B5LT5jb3VudF9wdHJzW3RibF0pOw0KLSAgICAgIGRpZFt0YmxdID0gVFJVRTsNCi0gICAgfQ0KLSAgfQ0KLX0NCi0NCi0NCi0vKg0KLSAqIE1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciBwcm9ncmVzc2l2ZSBIdWZmbWFuIGVudHJvcHkgZW5jb2RpbmcuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotamluaXRfcGh1ZmZfZW5jb2RlciAoal9jb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weTsNCi0gIGludCBpOw0KLQ0KLSAgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0cikNCi0gICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwNCi0JCQkJU0laRU9GKHBodWZmX2VudHJvcHlfZW5jb2RlcikpOw0KLSAgY2luZm8tPmVudHJvcHkgPSAoc3RydWN0IGpwZWdfZW50cm9weV9lbmNvZGVyICopIGVudHJvcHk7DQotICBlbnRyb3B5LT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfcGh1ZmY7DQotDQotICAvKiBNYXJrIHRhYmxlcyB1bmFsbG9jYXRlZCAqLw0KLSAgZm9yIChpID0gMDsgaSA8IE5VTV9IVUZGX1RCTFM7IGkrKykgew0KLSAgICBlbnRyb3B5LT5kZXJpdmVkX3RibHNbaV0gPSBOVUxMOw0KLSAgICBlbnRyb3B5LT5jb3VudF9wdHJzW2ldID0gTlVMTDsNCi0gIH0NCi0gIGVudHJvcHktPmJpdF9idWZmZXIgPSBOVUxMOwkvKiBuZWVkZWQgb25seSBpbiBBQyByZWZpbmVtZW50IHNjYW4gKi8NCi19DQotDQotI2VuZGlmIC8qIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVEICovDQotDQotI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fDQorI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykKKy8qCisgKiBqY3BodWZmLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBIdWZmbWFuIGVudHJvcHkgZW5jb2Rpbmcgcm91dGluZXMgZm9yIHByb2dyZXNzaXZlIEpQRUcuCisgKgorICogV2UgZG8gbm90IHN1cHBvcnQgb3V0cHV0IHN1c3BlbnNpb24gaW4gdGhpcyBtb2R1bGUsIHNpbmNlIHRoZSBsaWJyYXJ5CisgKiBjdXJyZW50bHkgZG9lcyBub3QgYWxsb3cgbXVsdGlwbGUtc2NhbiBmaWxlcyB0byBiZSB3cml0dGVuIHdpdGggb3V0cHV0CisgKiBzdXNwZW5zaW9uLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqY2h1ZmYuaCIJCS8qIERlY2xhcmF0aW9ucyBzaGFyZWQgd2l0aCBqY2h1ZmYuYyAqLworCisjaWZkZWYgQ19QUk9HUkVTU0lWRV9TVVBQT1JURUQKKworLyogRXhwYW5kZWQgZW50cm9weSBlbmNvZGVyIG9iamVjdCBmb3IgcHJvZ3Jlc3NpdmUgSHVmZm1hbiBlbmNvZGluZy4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QganBlZ19lbnRyb3B5X2VuY29kZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCisKKyAgLyogTW9kZSBmbGFnOiBUUlVFIGZvciBvcHRpbWl6YXRpb24sIEZBTFNFIGZvciBhY3R1YWwgZGF0YSBvdXRwdXQgKi8KKyAgYm9vbGVhbiBnYXRoZXJfc3RhdGlzdGljczsKKworICAvKiBCaXQtbGV2ZWwgY29kaW5nIHN0YXR1cy4KKyAgICogbmV4dF9vdXRwdXRfYnl0ZS9mcmVlX2luX2J1ZmZlciBhcmUgbG9jYWwgY29waWVzIG9mIGNpbmZvLT5kZXN0IGZpZWxkcy4KKyAgICovCisgIEpPQ1RFVCAqIG5leHRfb3V0cHV0X2J5dGU7CS8qID0+IG5leHQgYnl0ZSB0byB3cml0ZSBpbiBidWZmZXIgKi8KKyAgc2l6ZV90IGZyZWVfaW5fYnVmZmVyOwkvKiAjIG9mIGJ5dGUgc3BhY2VzIHJlbWFpbmluZyBpbiBidWZmZXIgKi8KKyAgSU5UMzIgcHV0X2J1ZmZlcjsJCS8qIGN1cnJlbnQgYml0LWFjY3VtdWxhdGlvbiBidWZmZXIgKi8KKyAgaW50IHB1dF9iaXRzOwkJCS8qICMgb2YgYml0cyBub3cgaW4gaXQgKi8KKyAgal9jb21wcmVzc19wdHIgY2luZm87CQkvKiBsaW5rIHRvIGNpbmZvIChuZWVkZWQgZm9yIGR1bXBfYnVmZmVyKSAqLworCisgIC8qIENvZGluZyBzdGF0dXMgZm9yIERDIGNvbXBvbmVudHMgKi8KKyAgaW50IGxhc3RfZGNfdmFsW01BWF9DT01QU19JTl9TQ0FOXTsgLyogbGFzdCBEQyBjb2VmIGZvciBlYWNoIGNvbXBvbmVudCAqLworCisgIC8qIENvZGluZyBzdGF0dXMgZm9yIEFDIGNvbXBvbmVudHMgKi8KKyAgaW50IGFjX3RibF9ubzsJCS8qIHRoZSB0YWJsZSBudW1iZXIgb2YgdGhlIHNpbmdsZSBjb21wb25lbnQgKi8KKyAgdW5zaWduZWQgaW50IEVPQlJVTjsJCS8qIHJ1biBsZW5ndGggb2YgRU9CcyAqLworICB1bnNpZ25lZCBpbnQgQkU7CQkvKiAjIG9mIGJ1ZmZlcmVkIGNvcnJlY3Rpb24gYml0cyBiZWZvcmUgTUNVICovCisgIGNoYXIgKiBiaXRfYnVmZmVyOwkJLyogYnVmZmVyIGZvciBjb3JyZWN0aW9uIGJpdHMgKDEgcGVyIGNoYXIpICovCisgIC8qIHBhY2tpbmcgY29ycmVjdGlvbiBiaXRzIHRpZ2h0bHkgd291bGQgc2F2ZSBzb21lIHNwYWNlIGJ1dCBjb3N0IHRpbWUuLi4gKi8KKworICB1bnNpZ25lZCBpbnQgcmVzdGFydHNfdG9fZ287CS8qIE1DVXMgbGVmdCBpbiB0aGlzIHJlc3RhcnQgaW50ZXJ2YWwgKi8KKyAgaW50IG5leHRfcmVzdGFydF9udW07CQkvKiBuZXh0IHJlc3RhcnQgbnVtYmVyIHRvIHdyaXRlICgwLTcpICovCisKKyAgLyogUG9pbnRlcnMgdG8gZGVyaXZlZCB0YWJsZXMgKHRoZXNlIHdvcmtzcGFjZXMgaGF2ZSBpbWFnZSBsaWZlc3BhbikuCisgICAqIFNpbmNlIGFueSBvbmUgc2NhbiBjb2RlcyBvbmx5IERDIG9yIG9ubHkgQUMsIHdlIG9ubHkgbmVlZCBvbmUgc2V0CisgICAqIG9mIHRhYmxlcywgbm90IG9uZSBmb3IgREMgYW5kIG9uZSBmb3IgQUMuCisgICAqLworICBjX2Rlcml2ZWRfdGJsICogZGVyaXZlZF90YmxzW05VTV9IVUZGX1RCTFNdOworCisgIC8qIFN0YXRpc3RpY3MgdGFibGVzIGZvciBvcHRpbWl6YXRpb247IGFnYWluLCBvbmUgc2V0IGlzIGVub3VnaCAqLworICBsb25nICogY291bnRfcHRyc1tOVU1fSFVGRl9UQkxTXTsKK30gcGh1ZmZfZW50cm9weV9lbmNvZGVyOworCit0eXBlZGVmIHBodWZmX2VudHJvcHlfZW5jb2RlciAqIHBodWZmX2VudHJvcHlfcHRyOworCisvKiBNQVhfQ09SUl9CSVRTIGlzIHRoZSBudW1iZXIgb2YgYml0cyB0aGUgQUMgcmVmaW5lbWVudCBjb3JyZWN0aW9uLWJpdAorICogYnVmZmVyIGNhbiBob2xkLiAgTGFyZ2VyIHNpemVzIG1heSBzbGlnaHRseSBpbXByb3ZlIGNvbXByZXNzaW9uLCBidXQKKyAqIDEwMDAgaXMgYWxyZWFkeSB3ZWxsIGludG8gdGhlIHJlYWxtIG9mIG92ZXJraWxsLgorICogVGhlIG1pbmltdW0gc2FmZSBzaXplIGlzIDY0IGJpdHMuCisgKi8KKworI2RlZmluZSBNQVhfQ09SUl9CSVRTICAxMDAwCS8qIE1heCAjIG9mIGNvcnJlY3Rpb24gYml0cyBJIGNhbiBidWZmZXIgKi8KKworLyogSVJJR0hUX1NISUZUIGlzIGxpa2UgUklHSFRfU0hJRlQsIGJ1dCB3b3JrcyBvbiBpbnQgcmF0aGVyIHRoYW4gSU5UMzIuCisgKiBXZSBhc3N1bWUgdGhhdCBpbnQgcmlnaHQgc2hpZnQgaXMgdW5zaWduZWQgaWYgSU5UMzIgcmlnaHQgc2hpZnQgaXMsCisgKiB3aGljaCBzaG91bGQgYmUgc2FmZS4KKyAqLworCisjaWZkZWYgUklHSFRfU0hJRlRfSVNfVU5TSUdORUQKKyNkZWZpbmUgSVNISUZUX1RFTVBTCWludCBpc2hpZnRfdGVtcDsKKyNkZWZpbmUgSVJJR0hUX1NISUZUKHgsc2hmdCkgIFwKKwkoKGlzaGlmdF90ZW1wID0gKHgpKSA8IDAgPyBcCisJIChpc2hpZnRfdGVtcCA+PiAoc2hmdCkpIHwgKCh+MCkgPDwgKDE2LShzaGZ0KSkpIDogXAorCSAoaXNoaWZ0X3RlbXAgPj4gKHNoZnQpKSkKKyNlbHNlCisjZGVmaW5lIElTSElGVF9URU1QUworI2RlZmluZSBJUklHSFRfU0hJRlQoeCxzaGZ0KQkoKHgpID4+IChzaGZ0KSkKKyNlbmRpZgorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworTUVUSE9EREVGKGJvb2xlYW4pIGVuY29kZV9tY3VfRENfZmlyc3QgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJICAgIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKK01FVEhPRERFRihib29sZWFuKSBlbmNvZGVfbWN1X0FDX2ZpcnN0IEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCisJCQkJCSAgICBKQkxPQ0tST1cgKk1DVV9kYXRhKSk7CitNRVRIT0RERUYoYm9vbGVhbikgZW5jb2RlX21jdV9EQ19yZWZpbmUgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJICAgICBKQkxPQ0tST1cgKk1DVV9kYXRhKSk7CitNRVRIT0RERUYoYm9vbGVhbikgZW5jb2RlX21jdV9BQ19yZWZpbmUgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJICAgICBKQkxPQ0tST1cgKk1DVV9kYXRhKSk7CitNRVRIT0RERUYodm9pZCkgZmluaXNoX3Bhc3NfcGh1ZmYgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworTUVUSE9EREVGKHZvaWQpIGZpbmlzaF9wYXNzX2dhdGhlcl9waHVmZiBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CisKKworLyoKKyAqIEluaXRpYWxpemUgZm9yIGEgSHVmZm1hbi1jb21wcmVzc2VkIHNjYW4gdXNpbmcgcHJvZ3Jlc3NpdmUgSlBFRy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3N0YXJ0X3Bhc3NfcGh1ZmYgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIGdhdGhlcl9zdGF0aXN0aWNzKQoreyAgCisgIHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAocGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5OworICBib29sZWFuIGlzX0RDX2JhbmQ7CisgIGludCBjaSwgdGJsOworICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cjsKKworICBlbnRyb3B5LT5jaW5mbyA9IGNpbmZvOworICBlbnRyb3B5LT5nYXRoZXJfc3RhdGlzdGljcyA9IGdhdGhlcl9zdGF0aXN0aWNzOworCisgIGlzX0RDX2JhbmQgPSAoY2luZm8tPlNzID09IDApOworCisgIC8qIFdlIGFzc3VtZSBqY21hc3Rlci5jIGFscmVhZHkgdmFsaWRhdGVkIHRoZSBzY2FuIHBhcmFtZXRlcnMuICovCisKKyAgLyogU2VsZWN0IGV4ZWN1dGlvbiByb3V0aW5lcyAqLworICBpZiAoY2luZm8tPkFoID09IDApIHsKKyAgICBpZiAoaXNfRENfYmFuZCkKKyAgICAgIGVudHJvcHktPnB1Yi5lbmNvZGVfbWN1ID0gZW5jb2RlX21jdV9EQ19maXJzdDsKKyAgICBlbHNlCisgICAgICBlbnRyb3B5LT5wdWIuZW5jb2RlX21jdSA9IGVuY29kZV9tY3VfQUNfZmlyc3Q7CisgIH0gZWxzZSB7CisgICAgaWYgKGlzX0RDX2JhbmQpCisgICAgICBlbnRyb3B5LT5wdWIuZW5jb2RlX21jdSA9IGVuY29kZV9tY3VfRENfcmVmaW5lOworICAgIGVsc2UgeworICAgICAgZW50cm9weS0+cHViLmVuY29kZV9tY3UgPSBlbmNvZGVfbWN1X0FDX3JlZmluZTsKKyAgICAgIC8qIEFDIHJlZmluZW1lbnQgbmVlZHMgYSBjb3JyZWN0aW9uIGJpdCBidWZmZXIgKi8KKyAgICAgIGlmIChlbnRyb3B5LT5iaXRfYnVmZmVyID09IE5VTEwpCisJZW50cm9weS0+Yml0X2J1ZmZlciA9IChjaGFyICopCisJICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCSAgICAgIE1BWF9DT1JSX0JJVFMgKiBTSVpFT0YoY2hhcikpOworICAgIH0KKyAgfQorICBpZiAoZ2F0aGVyX3N0YXRpc3RpY3MpCisgICAgZW50cm9weS0+cHViLmZpbmlzaF9wYXNzID0gZmluaXNoX3Bhc3NfZ2F0aGVyX3BodWZmOworICBlbHNlCisgICAgZW50cm9weS0+cHViLmZpbmlzaF9wYXNzID0gZmluaXNoX3Bhc3NfcGh1ZmY7CisKKyAgLyogT25seSBEQyBjb2VmZmljaWVudHMgbWF5IGJlIGludGVybGVhdmVkLCBzbyBjaW5mby0+Y29tcHNfaW5fc2NhbiA9IDEKKyAgICogZm9yIEFDIGNvZWZmaWNpZW50cy4KKyAgICovCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICAvKiBJbml0aWFsaXplIERDIHByZWRpY3Rpb25zIHRvIDAgKi8KKyAgICBlbnRyb3B5LT5sYXN0X2RjX3ZhbFtjaV0gPSAwOworICAgIC8qIEdldCB0YWJsZSBpbmRleCAqLworICAgIGlmIChpc19EQ19iYW5kKSB7CisgICAgICBpZiAoY2luZm8tPkFoICE9IDApCS8qIERDIHJlZmluZW1lbnQgbmVlZHMgbm8gdGFibGUgKi8KKwljb250aW51ZTsKKyAgICAgIHRibCA9IGNvbXBwdHItPmRjX3RibF9ubzsKKyAgICB9IGVsc2UgeworICAgICAgZW50cm9weS0+YWNfdGJsX25vID0gdGJsID0gY29tcHB0ci0+YWNfdGJsX25vOworICAgIH0KKyAgICBpZiAoZ2F0aGVyX3N0YXRpc3RpY3MpIHsKKyAgICAgIC8qIENoZWNrIGZvciBpbnZhbGlkIHRhYmxlIGluZGV4ICovCisgICAgICAvKiAobWFrZV9jX2Rlcml2ZWRfdGJsIGRvZXMgdGhpcyBpbiB0aGUgb3RoZXIgcGF0aCkgKi8KKyAgICAgIGlmICh0YmwgPCAwIHx8IHRibCA+PSBOVU1fSFVGRl9UQkxTKQorICAgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9OT19IVUZGX1RBQkxFLCB0YmwpOworICAgICAgLyogQWxsb2NhdGUgYW5kIHplcm8gdGhlIHN0YXRpc3RpY3MgdGFibGVzICovCisgICAgICAvKiBOb3RlIHRoYXQganBlZ19nZW5fb3B0aW1hbF90YWJsZSBleHBlY3RzIDI1NyBlbnRyaWVzIGluIGVhY2ggdGFibGUhICovCisgICAgICBpZiAoZW50cm9weS0+Y291bnRfcHRyc1t0YmxdID09IE5VTEwpCisJZW50cm9weS0+Y291bnRfcHRyc1t0YmxdID0gKGxvbmcgKikKKwkgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJICAgICAgMjU3ICogU0laRU9GKGxvbmcpKTsKKyAgICAgIE1FTVpFUk8oZW50cm9weS0+Y291bnRfcHRyc1t0YmxdLCAyNTcgKiBTSVpFT0YobG9uZykpOworICAgIH0gZWxzZSB7CisgICAgICAvKiBDb21wdXRlIGRlcml2ZWQgdmFsdWVzIGZvciBIdWZmbWFuIHRhYmxlICovCisgICAgICAvKiBXZSBtYXkgZG8gdGhpcyBtb3JlIHRoYW4gb25jZSBmb3IgYSB0YWJsZSwgYnV0IGl0J3Mgbm90IGV4cGVuc2l2ZSAqLworICAgICAganBlZ19tYWtlX2NfZGVyaXZlZF90YmwoY2luZm8sIGlzX0RDX2JhbmQsIHRibCwKKwkJCSAgICAgICYgZW50cm9weS0+ZGVyaXZlZF90YmxzW3RibF0pOworICAgIH0KKyAgfQorCisgIC8qIEluaXRpYWxpemUgQUMgc3R1ZmYgKi8KKyAgZW50cm9weS0+RU9CUlVOID0gMDsKKyAgZW50cm9weS0+QkUgPSAwOworCisgIC8qIEluaXRpYWxpemUgYml0IGJ1ZmZlciB0byBlbXB0eSAqLworICBlbnRyb3B5LT5wdXRfYnVmZmVyID0gMDsKKyAgZW50cm9weS0+cHV0X2JpdHMgPSAwOworCisgIC8qIEluaXRpYWxpemUgcmVzdGFydCBzdHVmZiAqLworICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOworICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtID0gMDsKK30KKworCisvKiBPdXRwdXR0aW5nIGJ5dGVzIHRvIHRoZSBmaWxlLgorICogTkI6IHRoZXNlIG11c3QgYmUgY2FsbGVkIG9ubHkgd2hlbiBhY3R1YWxseSBvdXRwdXR0aW5nLAorICogdGhhdCBpcywgZW50cm9weS0+Z2F0aGVyX3N0YXRpc3RpY3MgPT0gRkFMU0UuCisgKi8KKworLyogRW1pdCBhIGJ5dGUgKi8KKyNkZWZpbmUgZW1pdF9ieXRlKGVudHJvcHksdmFsKSAgXAorCXsgKihlbnRyb3B5KS0+bmV4dF9vdXRwdXRfYnl0ZSsrID0gKEpPQ1RFVCkgKHZhbCk7ICBcCisJICBpZiAoLS0oZW50cm9weSktPmZyZWVfaW5fYnVmZmVyID09IDApICBcCisJICAgIGR1bXBfYnVmZmVyKGVudHJvcHkpOyB9CisKKworTE9DQUwodm9pZCkKK2R1bXBfYnVmZmVyIChwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5KQorLyogRW1wdHkgdGhlIG91dHB1dCBidWZmZXI7IHdlIGRvIG5vdCBzdXBwb3J0IHN1c3BlbnNpb24gaW4gdGhpcyBtb2R1bGUuICovCit7CisgIHN0cnVjdCBqcGVnX2Rlc3RpbmF0aW9uX21nciAqIGRlc3QgPSBlbnRyb3B5LT5jaW5mby0+ZGVzdDsKKworICBpZiAoISAoKmRlc3QtPmVtcHR5X291dHB1dF9idWZmZXIpIChlbnRyb3B5LT5jaW5mbykpCisgICAgRVJSRVhJVChlbnRyb3B5LT5jaW5mbywgSkVSUl9DQU5UX1NVU1BFTkQpOworICAvKiBBZnRlciBhIHN1Y2Nlc3NmdWwgYnVmZmVyIGR1bXAsIG11c3QgcmVzZXQgYnVmZmVyIHBvaW50ZXJzICovCisgIGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGUgPSBkZXN0LT5uZXh0X291dHB1dF9ieXRlOworICBlbnRyb3B5LT5mcmVlX2luX2J1ZmZlciA9IGRlc3QtPmZyZWVfaW5fYnVmZmVyOworfQorCisKKy8qIE91dHB1dHRpbmcgYml0cyB0byB0aGUgZmlsZSAqLworCisvKiBPbmx5IHRoZSByaWdodCAyNCBiaXRzIG9mIHB1dF9idWZmZXIgYXJlIHVzZWQ7IHRoZSB2YWxpZCBiaXRzIGFyZQorICogbGVmdC1qdXN0aWZpZWQgaW4gdGhpcyBwYXJ0LiAgQXQgbW9zdCAxNiBiaXRzIGNhbiBiZSBwYXNzZWQgdG8gZW1pdF9iaXRzCisgKiBpbiBvbmUgY2FsbCwgYW5kIHdlIG5ldmVyIHJldGFpbiBtb3JlIHRoYW4gNyBiaXRzIGluIHB1dF9idWZmZXIKKyAqIGJldHdlZW4gY2FsbHMsIHNvIDI0IGJpdHMgYXJlIHN1ZmZpY2llbnQuCisgKi8KKworSU5MSU5FCitMT0NBTCh2b2lkKQorZW1pdF9iaXRzIChwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5LCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHNpemUpCisvKiBFbWl0IHNvbWUgYml0cywgdW5sZXNzIHdlIGFyZSBpbiBnYXRoZXIgbW9kZSAqLworeworICAvKiBUaGlzIHJvdXRpbmUgaXMgaGVhdmlseSB1c2VkLCBzbyBpdCdzIHdvcnRoIGNvZGluZyB0aWdodGx5LiAqLworICByZWdpc3RlciBJTlQzMiBwdXRfYnVmZmVyID0gKElOVDMyKSBjb2RlOworICByZWdpc3RlciBpbnQgcHV0X2JpdHMgPSBlbnRyb3B5LT5wdXRfYml0czsKKworICAvKiBpZiBzaXplIGlzIDAsIGNhbGxlciB1c2VkIGFuIGludmFsaWQgSHVmZm1hbiB0YWJsZSBlbnRyeSAqLworICBpZiAoc2l6ZSA9PSAwKQorICAgIEVSUkVYSVQoZW50cm9weS0+Y2luZm8sIEpFUlJfSFVGRl9NSVNTSU5HX0NPREUpOworCisgIGlmIChlbnRyb3B5LT5nYXRoZXJfc3RhdGlzdGljcykKKyAgICByZXR1cm47CQkJLyogZG8gbm90aGluZyBpZiB3ZSdyZSBvbmx5IGdldHRpbmcgc3RhdHMgKi8KKworICBwdXRfYnVmZmVyICY9ICgoKElOVDMyKSAxKTw8c2l6ZSkgLSAxOyAvKiBtYXNrIG9mZiBhbnkgZXh0cmEgYml0cyBpbiBjb2RlICovCisgIAorICBwdXRfYml0cyArPSBzaXplOwkJLyogbmV3IG51bWJlciBvZiBiaXRzIGluIGJ1ZmZlciAqLworICAKKyAgcHV0X2J1ZmZlciA8PD0gMjQgLSBwdXRfYml0czsgLyogYWxpZ24gaW5jb21pbmcgYml0cyAqLworCisgIHB1dF9idWZmZXIgfD0gZW50cm9weS0+cHV0X2J1ZmZlcjsgLyogYW5kIG1lcmdlIHdpdGggb2xkIGJ1ZmZlciBjb250ZW50cyAqLworCisgIHdoaWxlIChwdXRfYml0cyA+PSA4KSB7CisgICAgaW50IGMgPSAoaW50KSAoKHB1dF9idWZmZXIgPj4gMTYpICYgMHhGRik7CisgICAgCisgICAgZW1pdF9ieXRlKGVudHJvcHksIGMpOworICAgIGlmIChjID09IDB4RkYpIHsJCS8qIG5lZWQgdG8gc3R1ZmYgYSB6ZXJvIGJ5dGU/ICovCisgICAgICBlbWl0X2J5dGUoZW50cm9weSwgMCk7CisgICAgfQorICAgIHB1dF9idWZmZXIgPDw9IDg7CisgICAgcHV0X2JpdHMgLT0gODsKKyAgfQorCisgIGVudHJvcHktPnB1dF9idWZmZXIgPSBwdXRfYnVmZmVyOyAvKiB1cGRhdGUgdmFyaWFibGVzICovCisgIGVudHJvcHktPnB1dF9iaXRzID0gcHV0X2JpdHM7Cit9CisKKworTE9DQUwodm9pZCkKK2ZsdXNoX2JpdHMgKHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkpCit7CisgIGVtaXRfYml0cyhlbnRyb3B5LCAweDdGLCA3KTsgLyogZmlsbCBhbnkgcGFydGlhbCBieXRlIHdpdGggb25lcyAqLworICBlbnRyb3B5LT5wdXRfYnVmZmVyID0gMDsgICAgIC8qIGFuZCByZXNldCBiaXQtYnVmZmVyIHRvIGVtcHR5ICovCisgIGVudHJvcHktPnB1dF9iaXRzID0gMDsKK30KKworCisvKgorICogRW1pdCAob3IganVzdCBjb3VudCkgYSBIdWZmbWFuIHN5bWJvbC4KKyAqLworCitJTkxJTkUKK0xPQ0FMKHZvaWQpCitlbWl0X3N5bWJvbCAocGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSwgaW50IHRibF9ubywgaW50IHN5bWJvbCkKK3sKKyAgaWYgKGVudHJvcHktPmdhdGhlcl9zdGF0aXN0aWNzKQorICAgIGVudHJvcHktPmNvdW50X3B0cnNbdGJsX25vXVtzeW1ib2xdKys7CisgIGVsc2UgeworICAgIGNfZGVyaXZlZF90YmwgKiB0YmwgPSBlbnRyb3B5LT5kZXJpdmVkX3RibHNbdGJsX25vXTsKKyAgICBlbWl0X2JpdHMoZW50cm9weSwgdGJsLT5laHVmY29bc3ltYm9sXSwgdGJsLT5laHVmc2lbc3ltYm9sXSk7CisgIH0KK30KKworCisvKgorICogRW1pdCBiaXRzIGZyb20gYSBjb3JyZWN0aW9uIGJpdCBidWZmZXIuCisgKi8KKworTE9DQUwodm9pZCkKK2VtaXRfYnVmZmVyZWRfYml0cyAocGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSwgY2hhciAqIGJ1ZnN0YXJ0LAorCQkgICAgdW5zaWduZWQgaW50IG5iaXRzKQoreworICBpZiAoZW50cm9weS0+Z2F0aGVyX3N0YXRpc3RpY3MpCisgICAgcmV0dXJuOwkJCS8qIG5vIHJlYWwgd29yayAqLworCisgIHdoaWxlIChuYml0cyA+IDApIHsKKyAgICBlbWl0X2JpdHMoZW50cm9weSwgKHVuc2lnbmVkIGludCkgKCpidWZzdGFydCksIDEpOworICAgIGJ1ZnN0YXJ0Kys7CisgICAgbmJpdHMtLTsKKyAgfQorfQorCisKKy8qCisgKiBFbWl0IGFueSBwZW5kaW5nIEVPQlJVTiBzeW1ib2wuCisgKi8KKworTE9DQUwodm9pZCkKK2VtaXRfZW9icnVuIChwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5KQoreworICByZWdpc3RlciBpbnQgdGVtcCwgbmJpdHM7CisKKyAgaWYgKGVudHJvcHktPkVPQlJVTiA+IDApIHsJLyogaWYgdGhlcmUgaXMgYW55IHBlbmRpbmcgRU9CUlVOICovCisgICAgdGVtcCA9IGVudHJvcHktPkVPQlJVTjsKKyAgICBuYml0cyA9IDA7CisgICAgd2hpbGUgKCh0ZW1wID4+PSAxKSkKKyAgICAgIG5iaXRzKys7CisgICAgLyogc2FmZXR5IGNoZWNrOiBzaG91bGRuJ3QgaGFwcGVuIGdpdmVuIGxpbWl0ZWQgY29ycmVjdGlvbi1iaXQgYnVmZmVyICovCisgICAgaWYgKG5iaXRzID4gMTQpCisgICAgICBFUlJFWElUKGVudHJvcHktPmNpbmZvLCBKRVJSX0hVRkZfTUlTU0lOR19DT0RFKTsKKworICAgIGVtaXRfc3ltYm9sKGVudHJvcHksIGVudHJvcHktPmFjX3RibF9ubywgbmJpdHMgPDwgNCk7CisgICAgaWYgKG5iaXRzKQorICAgICAgZW1pdF9iaXRzKGVudHJvcHksIGVudHJvcHktPkVPQlJVTiwgbmJpdHMpOworCisgICAgZW50cm9weS0+RU9CUlVOID0gMDsKKworICAgIC8qIEVtaXQgYW55IGJ1ZmZlcmVkIGNvcnJlY3Rpb24gYml0cyAqLworICAgIGVtaXRfYnVmZmVyZWRfYml0cyhlbnRyb3B5LCBlbnRyb3B5LT5iaXRfYnVmZmVyLCBlbnRyb3B5LT5CRSk7CisgICAgZW50cm9weS0+QkUgPSAwOworICB9Cit9CisKKworLyoKKyAqIEVtaXQgYSByZXN0YXJ0IG1hcmtlciAmIHJlc3luY2hyb25pemUgcHJlZGljdGlvbnMuCisgKi8KKworTE9DQUwodm9pZCkKK2VtaXRfcmVzdGFydCAocGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSwgaW50IHJlc3RhcnRfbnVtKQoreworICBpbnQgY2k7CisKKyAgZW1pdF9lb2JydW4oZW50cm9weSk7CisKKyAgaWYgKCEgZW50cm9weS0+Z2F0aGVyX3N0YXRpc3RpY3MpIHsKKyAgICBmbHVzaF9iaXRzKGVudHJvcHkpOworICAgIGVtaXRfYnl0ZShlbnRyb3B5LCAweEZGKTsKKyAgICBlbWl0X2J5dGUoZW50cm9weSwgSlBFR19SU1QwICsgcmVzdGFydF9udW0pOworICB9CisKKyAgaWYgKGVudHJvcHktPmNpbmZvLT5TcyA9PSAwKSB7CisgICAgLyogUmUtaW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovCisgICAgZm9yIChjaSA9IDA7IGNpIDwgZW50cm9weS0+Y2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspCisgICAgICBlbnRyb3B5LT5sYXN0X2RjX3ZhbFtjaV0gPSAwOworICB9IGVsc2UgeworICAgIC8qIFJlLWluaXRpYWxpemUgYWxsIEFDLXJlbGF0ZWQgZmllbGRzIHRvIDAgKi8KKyAgICBlbnRyb3B5LT5FT0JSVU4gPSAwOworICAgIGVudHJvcHktPkJFID0gMDsKKyAgfQorfQorCisKKy8qCisgKiBNQ1UgZW5jb2RpbmcgZm9yIERDIGluaXRpYWwgc2NhbiAoZWl0aGVyIHNwZWN0cmFsIHNlbGVjdGlvbiwKKyAqIG9yIGZpcnN0IHBhc3Mgb2Ygc3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uKS4KKyAqLworCitNRVRIT0RERUYoYm9vbGVhbikKK2VuY29kZV9tY3VfRENfZmlyc3QgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoreworICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsKKyAgcmVnaXN0ZXIgaW50IHRlbXAsIHRlbXAyOworICByZWdpc3RlciBpbnQgbmJpdHM7CisgIGludCBibGtuLCBjaTsKKyAgaW50IEFsID0gY2luZm8tPkFsOworICBKQkxPQ0tST1cgYmxvY2s7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyOworICBJU0hJRlRfVEVNUFMKKworICBlbnRyb3B5LT5uZXh0X291dHB1dF9ieXRlID0gY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGU7CisgIGVudHJvcHktPmZyZWVfaW5fYnVmZmVyID0gY2luZm8tPmRlc3QtPmZyZWVfaW5fYnVmZmVyOworCisgIC8qIEVtaXQgcmVzdGFydCBtYXJrZXIgaWYgbmVlZGVkICovCisgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkKKyAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkKKyAgICAgIGVtaXRfcmVzdGFydChlbnRyb3B5LCBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKTsKKworICAvKiBFbmNvZGUgdGhlIE1DVSBkYXRhIGJsb2NrcyAqLworICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgeworICAgIGJsb2NrID0gTUNVX2RhdGFbYmxrbl07CisgICAgY2kgPSBjaW5mby0+TUNVX21lbWJlcnNoaXBbYmxrbl07CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKworICAgIC8qIENvbXB1dGUgdGhlIERDIHZhbHVlIGFmdGVyIHRoZSByZXF1aXJlZCBwb2ludCB0cmFuc2Zvcm0gYnkgQWwuCisgICAgICogVGhpcyBpcyBzaW1wbHkgYW4gYXJpdGhtZXRpYyByaWdodCBzaGlmdC4KKyAgICAgKi8KKyAgICB0ZW1wMiA9IElSSUdIVF9TSElGVCgoaW50KSAoKCpibG9jaylbMF0pLCBBbCk7CisKKyAgICAvKiBEQyBkaWZmZXJlbmNlcyBhcmUgZmlndXJlZCBvbiB0aGUgcG9pbnQtdHJhbnNmb3JtZWQgdmFsdWVzLiAqLworICAgIHRlbXAgPSB0ZW1wMiAtIGVudHJvcHktPmxhc3RfZGNfdmFsW2NpXTsKKyAgICBlbnRyb3B5LT5sYXN0X2RjX3ZhbFtjaV0gPSB0ZW1wMjsKKworICAgIC8qIEVuY29kZSB0aGUgREMgY29lZmZpY2llbnQgZGlmZmVyZW5jZSBwZXIgc2VjdGlvbiBHLjEuMi4xICovCisgICAgdGVtcDIgPSB0ZW1wOworICAgIGlmICh0ZW1wIDwgMCkgeworICAgICAgdGVtcCA9IC10ZW1wOwkJLyogdGVtcCBpcyBhYnMgdmFsdWUgb2YgaW5wdXQgKi8KKyAgICAgIC8qIEZvciBhIG5lZ2F0aXZlIGlucHV0LCB3YW50IHRlbXAyID0gYml0d2lzZSBjb21wbGVtZW50IG9mIGFicyhpbnB1dCkgKi8KKyAgICAgIC8qIFRoaXMgY29kZSBhc3N1bWVzIHdlIGFyZSBvbiBhIHR3bydzIGNvbXBsZW1lbnQgbWFjaGluZSAqLworICAgICAgdGVtcDItLTsKKyAgICB9CisgICAgCisgICAgLyogRmluZCB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIGZvciB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb2VmZmljaWVudCAqLworICAgIG5iaXRzID0gMDsKKyAgICB3aGlsZSAodGVtcCkgeworICAgICAgbmJpdHMrKzsKKyAgICAgIHRlbXAgPj49IDE7CisgICAgfQorICAgIC8qIENoZWNrIGZvciBvdXQtb2YtcmFuZ2UgY29lZmZpY2llbnQgdmFsdWVzLgorICAgICAqIFNpbmNlIHdlJ3JlIGVuY29kaW5nIGEgZGlmZmVyZW5jZSwgdGhlIHJhbmdlIGxpbWl0IGlzIHR3aWNlIGFzIG11Y2guCisgICAgICovCisgICAgaWYgKG5iaXRzID4gTUFYX0NPRUZfQklUUysxKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfRENUX0NPRUYpOworICAgIAorICAgIC8qIENvdW50L2VtaXQgdGhlIEh1ZmZtYW4tY29kZWQgc3ltYm9sIGZvciB0aGUgbnVtYmVyIG9mIGJpdHMgKi8KKyAgICBlbWl0X3N5bWJvbChlbnRyb3B5LCBjb21wcHRyLT5kY190Ymxfbm8sIG5iaXRzKTsKKyAgICAKKyAgICAvKiBFbWl0IHRoYXQgbnVtYmVyIG9mIGJpdHMgb2YgdGhlIHZhbHVlLCBpZiBwb3NpdGl2ZSwgKi8KKyAgICAvKiBvciB0aGUgY29tcGxlbWVudCBvZiBpdHMgbWFnbml0dWRlLCBpZiBuZWdhdGl2ZS4gKi8KKyAgICBpZiAobmJpdHMpCQkJLyogZW1pdF9iaXRzIHJlamVjdHMgY2FsbHMgd2l0aCBzaXplIDAgKi8KKyAgICAgIGVtaXRfYml0cyhlbnRyb3B5LCAodW5zaWduZWQgaW50KSB0ZW1wMiwgbmJpdHMpOworICB9CisKKyAgY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGUgPSBlbnRyb3B5LT5uZXh0X291dHB1dF9ieXRlOworICBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXIgPSBlbnRyb3B5LT5mcmVlX2luX2J1ZmZlcjsKKworICAvKiBVcGRhdGUgcmVzdGFydC1pbnRlcnZhbCBzdGF0ZSB0b28gKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7CisgICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApIHsKKyAgICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKys7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtICY9IDc7CisgICAgfQorICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07CisgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogTUNVIGVuY29kaW5nIGZvciBBQyBpbml0aWFsIHNjYW4gKGVpdGhlciBzcGVjdHJhbCBzZWxlY3Rpb24sCisgKiBvciBmaXJzdCBwYXNzIG9mIHN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbikuCisgKi8KKworTUVUSE9EREVGKGJvb2xlYW4pCitlbmNvZGVfbWN1X0FDX2ZpcnN0IChqX2NvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkKK3sKKyAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7CisgIHJlZ2lzdGVyIGludCB0ZW1wLCB0ZW1wMjsKKyAgcmVnaXN0ZXIgaW50IG5iaXRzOworICByZWdpc3RlciBpbnQgciwgazsKKyAgaW50IFNlID0gY2luZm8tPlNlOworICBpbnQgQWwgPSBjaW5mby0+QWw7CisgIEpCTE9DS1JPVyBibG9jazsKKworICBlbnRyb3B5LT5uZXh0X291dHB1dF9ieXRlID0gY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGU7CisgIGVudHJvcHktPmZyZWVfaW5fYnVmZmVyID0gY2luZm8tPmRlc3QtPmZyZWVfaW5fYnVmZmVyOworCisgIC8qIEVtaXQgcmVzdGFydCBtYXJrZXIgaWYgbmVlZGVkICovCisgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkKKyAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkKKyAgICAgIGVtaXRfcmVzdGFydChlbnRyb3B5LCBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKTsKKworICAvKiBFbmNvZGUgdGhlIE1DVSBkYXRhIGJsb2NrICovCisgIGJsb2NrID0gTUNVX2RhdGFbMF07CisKKyAgLyogRW5jb2RlIHRoZSBBQyBjb2VmZmljaWVudHMgcGVyIHNlY3Rpb24gRy4xLjIuMiwgZmlnLiBHLjMgKi8KKyAgCisgIHIgPSAwOwkJCS8qIHIgPSBydW4gbGVuZ3RoIG9mIHplcm9zICovCisgICAKKyAgZm9yIChrID0gY2luZm8tPlNzOyBrIDw9IFNlOyBrKyspIHsKKyAgICBpZiAoKHRlbXAgPSAoKmJsb2NrKVtqcGVnX25hdHVyYWxfb3JkZXJba11dKSA9PSAwKSB7CisgICAgICByKys7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgLyogV2UgbXVzdCBhcHBseSB0aGUgcG9pbnQgdHJhbnNmb3JtIGJ5IEFsLiAgRm9yIEFDIGNvZWZmaWNpZW50cyB0aGlzCisgICAgICogaXMgYW4gaW50ZWdlciBkaXZpc2lvbiB3aXRoIHJvdW5kaW5nIHRvd2FyZHMgMC4gIFRvIGRvIHRoaXMgcG9ydGFibHkKKyAgICAgKiBpbiBDLCB3ZSBzaGlmdCBhZnRlciBvYnRhaW5pbmcgdGhlIGFic29sdXRlIHZhbHVlOyBzbyB0aGUgY29kZSBpcworICAgICAqIGludGVyd292ZW4gd2l0aCBmaW5kaW5nIHRoZSBhYnMgdmFsdWUgKHRlbXApIGFuZCBvdXRwdXQgYml0cyAodGVtcDIpLgorICAgICAqLworICAgIGlmICh0ZW1wIDwgMCkgeworICAgICAgdGVtcCA9IC10ZW1wOwkJLyogdGVtcCBpcyBhYnMgdmFsdWUgb2YgaW5wdXQgKi8KKyAgICAgIHRlbXAgPj49IEFsOwkJLyogYXBwbHkgdGhlIHBvaW50IHRyYW5zZm9ybSAqLworICAgICAgLyogRm9yIGEgbmVnYXRpdmUgY29lZiwgd2FudCB0ZW1wMiA9IGJpdHdpc2UgY29tcGxlbWVudCBvZiBhYnMoY29lZikgKi8KKyAgICAgIHRlbXAyID0gfnRlbXA7CisgICAgfSBlbHNlIHsKKyAgICAgIHRlbXAgPj49IEFsOwkJLyogYXBwbHkgdGhlIHBvaW50IHRyYW5zZm9ybSAqLworICAgICAgdGVtcDIgPSB0ZW1wOworICAgIH0KKyAgICAvKiBXYXRjaCBvdXQgZm9yIGNhc2UgdGhhdCBub256ZXJvIGNvZWYgaXMgemVybyBhZnRlciBwb2ludCB0cmFuc2Zvcm0gKi8KKyAgICBpZiAodGVtcCA9PSAwKSB7CisgICAgICByKys7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBFbWl0IGFueSBwZW5kaW5nIEVPQlJVTiAqLworICAgIGlmIChlbnRyb3B5LT5FT0JSVU4gPiAwKQorICAgICAgZW1pdF9lb2JydW4oZW50cm9weSk7CisgICAgLyogaWYgcnVuIGxlbmd0aCA+IDE1LCBtdXN0IGVtaXQgc3BlY2lhbCBydW4tbGVuZ3RoLTE2IGNvZGVzICgweEYwKSAqLworICAgIHdoaWxlIChyID4gMTUpIHsKKyAgICAgIGVtaXRfc3ltYm9sKGVudHJvcHksIGVudHJvcHktPmFjX3RibF9ubywgMHhGMCk7CisgICAgICByIC09IDE2OworICAgIH0KKworICAgIC8qIEZpbmQgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCBmb3IgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29lZmZpY2llbnQgKi8KKyAgICBuYml0cyA9IDE7CQkJLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgMSBiaXQgKi8KKyAgICB3aGlsZSAoKHRlbXAgPj49IDEpKQorICAgICAgbmJpdHMrKzsKKyAgICAvKiBDaGVjayBmb3Igb3V0LW9mLXJhbmdlIGNvZWZmaWNpZW50IHZhbHVlcyAqLworICAgIGlmIChuYml0cyA+IE1BWF9DT0VGX0JJVFMpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9EQ1RfQ09FRik7CisKKyAgICAvKiBDb3VudC9lbWl0IEh1ZmZtYW4gc3ltYm9sIGZvciBydW4gbGVuZ3RoIC8gbnVtYmVyIG9mIGJpdHMgKi8KKyAgICBlbWl0X3N5bWJvbChlbnRyb3B5LCBlbnRyb3B5LT5hY190Ymxfbm8sIChyIDw8IDQpICsgbmJpdHMpOworCisgICAgLyogRW1pdCB0aGF0IG51bWJlciBvZiBiaXRzIG9mIHRoZSB2YWx1ZSwgaWYgcG9zaXRpdmUsICovCisgICAgLyogb3IgdGhlIGNvbXBsZW1lbnQgb2YgaXRzIG1hZ25pdHVkZSwgaWYgbmVnYXRpdmUuICovCisgICAgZW1pdF9iaXRzKGVudHJvcHksICh1bnNpZ25lZCBpbnQpIHRlbXAyLCBuYml0cyk7CisKKyAgICByID0gMDsJCQkvKiByZXNldCB6ZXJvIHJ1biBsZW5ndGggKi8KKyAgfQorCisgIGlmIChyID4gMCkgewkJCS8qIElmIHRoZXJlIGFyZSB0cmFpbGluZyB6ZXJvZXMsICovCisgICAgZW50cm9weS0+RU9CUlVOKys7CQkvKiBjb3VudCBhbiBFT0IgKi8KKyAgICBpZiAoZW50cm9weS0+RU9CUlVOID09IDB4N0ZGRikKKyAgICAgIGVtaXRfZW9icnVuKGVudHJvcHkpOwkvKiBmb3JjZSBpdCBvdXQgdG8gYXZvaWQgb3ZlcmZsb3cgKi8KKyAgfQorCisgIGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlID0gZW50cm9weS0+bmV4dF9vdXRwdXRfYnl0ZTsKKyAgY2luZm8tPmRlc3QtPmZyZWVfaW5fYnVmZmVyID0gZW50cm9weS0+ZnJlZV9pbl9idWZmZXI7CisKKyAgLyogVXBkYXRlIHJlc3RhcnQtaW50ZXJ2YWwgc3RhdGUgdG9vICovCisgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgeworICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKSB7CisgICAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOworICAgICAgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSsrOworICAgICAgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSAmPSA3OworICAgIH0KKyAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIE1DVSBlbmNvZGluZyBmb3IgREMgc3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uIHJlZmluZW1lbnQgc2Nhbi4KKyAqIE5vdGU6IHdlIGFzc3VtZSBzdWNoIHNjYW5zIGNhbiBiZSBtdWx0aS1jb21wb25lbnQsIGFsdGhvdWdoIHRoZSBzcGVjCisgKiBpcyBub3QgdmVyeSBjbGVhciBvbiB0aGUgcG9pbnQuCisgKi8KKworTUVUSE9EREVGKGJvb2xlYW4pCitlbmNvZGVfbWN1X0RDX3JlZmluZSAoal9jb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpCit7CisgIHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAocGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5OworICByZWdpc3RlciBpbnQgdGVtcDsKKyAgaW50IGJsa247CisgIGludCBBbCA9IGNpbmZvLT5BbDsKKyAgSkJMT0NLUk9XIGJsb2NrOworCisgIGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGUgPSBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZTsKKyAgZW50cm9weS0+ZnJlZV9pbl9idWZmZXIgPSBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXI7CisKKyAgLyogRW1pdCByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQgKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKQorICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQorICAgICAgZW1pdF9yZXN0YXJ0KGVudHJvcHksIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0pOworCisgIC8qIEVuY29kZSB0aGUgTUNVIGRhdGEgYmxvY2tzICovCisgIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7CisgICAgYmxvY2sgPSBNQ1VfZGF0YVtibGtuXTsKKworICAgIC8qIFdlIHNpbXBseSBlbWl0IHRoZSBBbCd0aCBiaXQgb2YgdGhlIERDIGNvZWZmaWNpZW50IHZhbHVlLiAqLworICAgIHRlbXAgPSAoKmJsb2NrKVswXTsKKyAgICBlbWl0X2JpdHMoZW50cm9weSwgKHVuc2lnbmVkIGludCkgKHRlbXAgPj4gQWwpLCAxKTsKKyAgfQorCisgIGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlID0gZW50cm9weS0+bmV4dF9vdXRwdXRfYnl0ZTsKKyAgY2luZm8tPmRlc3QtPmZyZWVfaW5fYnVmZmVyID0gZW50cm9weS0+ZnJlZV9pbl9idWZmZXI7CisKKyAgLyogVXBkYXRlIHJlc3RhcnQtaW50ZXJ2YWwgc3RhdGUgdG9vICovCisgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgeworICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKSB7CisgICAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOworICAgICAgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSsrOworICAgICAgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSAmPSA3OworICAgIH0KKyAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIE1DVSBlbmNvZGluZyBmb3IgQUMgc3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uIHJlZmluZW1lbnQgc2Nhbi4KKyAqLworCitNRVRIT0RERUYoYm9vbGVhbikKK2VuY29kZV9tY3VfQUNfcmVmaW5lIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkKK3sKKyAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7CisgIHJlZ2lzdGVyIGludCB0ZW1wOworICByZWdpc3RlciBpbnQgciwgazsKKyAgaW50IEVPQjsKKyAgY2hhciAqQlJfYnVmZmVyOworICB1bnNpZ25lZCBpbnQgQlI7CisgIGludCBTZSA9IGNpbmZvLT5TZTsKKyAgaW50IEFsID0gY2luZm8tPkFsOworICBKQkxPQ0tST1cgYmxvY2s7CisgIGludCBhYnN2YWx1ZXNbRENUU0laRTJdOworCisgIGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGUgPSBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZTsKKyAgZW50cm9weS0+ZnJlZV9pbl9idWZmZXIgPSBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXI7CisKKyAgLyogRW1pdCByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQgKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKQorICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQorICAgICAgZW1pdF9yZXN0YXJ0KGVudHJvcHksIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0pOworCisgIC8qIEVuY29kZSB0aGUgTUNVIGRhdGEgYmxvY2sgKi8KKyAgYmxvY2sgPSBNQ1VfZGF0YVswXTsKKworICAvKiBJdCBpcyBjb252ZW5pZW50IHRvIG1ha2UgYSBwcmUtcGFzcyB0byBkZXRlcm1pbmUgdGhlIHRyYW5zZm9ybWVkCisgICAqIGNvZWZmaWNpZW50cycgYWJzb2x1dGUgdmFsdWVzIGFuZCB0aGUgRU9CIHBvc2l0aW9uLgorICAgKi8KKyAgRU9CID0gMDsKKyAgZm9yIChrID0gY2luZm8tPlNzOyBrIDw9IFNlOyBrKyspIHsKKyAgICB0ZW1wID0gKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tdXTsKKyAgICAvKiBXZSBtdXN0IGFwcGx5IHRoZSBwb2ludCB0cmFuc2Zvcm0gYnkgQWwuICBGb3IgQUMgY29lZmZpY2llbnRzIHRoaXMKKyAgICAgKiBpcyBhbiBpbnRlZ2VyIGRpdmlzaW9uIHdpdGggcm91bmRpbmcgdG93YXJkcyAwLiAgVG8gZG8gdGhpcyBwb3J0YWJseQorICAgICAqIGluIEMsIHdlIHNoaWZ0IGFmdGVyIG9idGFpbmluZyB0aGUgYWJzb2x1dGUgdmFsdWUuCisgICAgICovCisgICAgaWYgKHRlbXAgPCAwKQorICAgICAgdGVtcCA9IC10ZW1wOwkJLyogdGVtcCBpcyBhYnMgdmFsdWUgb2YgaW5wdXQgKi8KKyAgICB0ZW1wID4+PSBBbDsJCS8qIGFwcGx5IHRoZSBwb2ludCB0cmFuc2Zvcm0gKi8KKyAgICBhYnN2YWx1ZXNba10gPSB0ZW1wOwkvKiBzYXZlIGFicyB2YWx1ZSBmb3IgbWFpbiBwYXNzICovCisgICAgaWYgKHRlbXAgPT0gMSkKKyAgICAgIEVPQiA9IGs7CQkJLyogRU9CID0gaW5kZXggb2YgbGFzdCBuZXdseS1ub256ZXJvIGNvZWYgKi8KKyAgfQorCisgIC8qIEVuY29kZSB0aGUgQUMgY29lZmZpY2llbnRzIHBlciBzZWN0aW9uIEcuMS4yLjMsIGZpZy4gRy43ICovCisgIAorICByID0gMDsJCQkvKiByID0gcnVuIGxlbmd0aCBvZiB6ZXJvcyAqLworICBCUiA9IDA7CQkJLyogQlIgPSBjb3VudCBvZiBidWZmZXJlZCBiaXRzIGFkZGVkIG5vdyAqLworICBCUl9idWZmZXIgPSBlbnRyb3B5LT5iaXRfYnVmZmVyICsgZW50cm9weS0+QkU7IC8qIEFwcGVuZCBiaXRzIHRvIGJ1ZmZlciAqLworCisgIGZvciAoayA9IGNpbmZvLT5TczsgayA8PSBTZTsgaysrKSB7CisgICAgaWYgKCh0ZW1wID0gYWJzdmFsdWVzW2tdKSA9PSAwKSB7CisgICAgICByKys7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBFbWl0IGFueSByZXF1aXJlZCBaUkxzLCBidXQgbm90IGlmIHRoZXkgY2FuIGJlIGZvbGRlZCBpbnRvIEVPQiAqLworICAgIHdoaWxlIChyID4gMTUgJiYgayA8PSBFT0IpIHsKKyAgICAgIC8qIGVtaXQgYW55IHBlbmRpbmcgRU9CUlVOIGFuZCB0aGUgQkUgY29ycmVjdGlvbiBiaXRzICovCisgICAgICBlbWl0X2VvYnJ1bihlbnRyb3B5KTsKKyAgICAgIC8qIEVtaXQgWlJMICovCisgICAgICBlbWl0X3N5bWJvbChlbnRyb3B5LCBlbnRyb3B5LT5hY190Ymxfbm8sIDB4RjApOworICAgICAgciAtPSAxNjsKKyAgICAgIC8qIEVtaXQgYnVmZmVyZWQgY29ycmVjdGlvbiBiaXRzIHRoYXQgbXVzdCBiZSBhc3NvY2lhdGVkIHdpdGggWlJMICovCisgICAgICBlbWl0X2J1ZmZlcmVkX2JpdHMoZW50cm9weSwgQlJfYnVmZmVyLCBCUik7CisgICAgICBCUl9idWZmZXIgPSBlbnRyb3B5LT5iaXRfYnVmZmVyOyAvKiBCRSBiaXRzIGFyZSBnb25lIG5vdyAqLworICAgICAgQlIgPSAwOworICAgIH0KKworICAgIC8qIElmIHRoZSBjb2VmIHdhcyBwcmV2aW91c2x5IG5vbnplcm8sIGl0IG9ubHkgbmVlZHMgYSBjb3JyZWN0aW9uIGJpdC4KKyAgICAgKiBOT1RFOiBhIHN0cmFpZ2h0IHRyYW5zbGF0aW9uIG9mIHRoZSBzcGVjJ3MgZmlndXJlIEcuNyB3b3VsZCBzdWdnZXN0CisgICAgICogdGhhdCB3ZSBhbHNvIG5lZWQgdG8gdGVzdCByID4gMTUuICBCdXQgaWYgciA+IDE1LCB3ZSBjYW4gb25seSBnZXQgaGVyZQorICAgICAqIGlmIGsgPiBFT0IsIHdoaWNoIGltcGxpZXMgdGhhdCB0aGlzIGNvZWZmaWNpZW50IGlzIG5vdCAxLgorICAgICAqLworICAgIGlmICh0ZW1wID4gMSkgeworICAgICAgLyogVGhlIGNvcnJlY3Rpb24gYml0IGlzIHRoZSBuZXh0IGJpdCBvZiB0aGUgYWJzb2x1dGUgdmFsdWUuICovCisgICAgICBCUl9idWZmZXJbQlIrK10gPSAoY2hhcikgKHRlbXAgJiAxKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8qIEVtaXQgYW55IHBlbmRpbmcgRU9CUlVOIGFuZCB0aGUgQkUgY29ycmVjdGlvbiBiaXRzICovCisgICAgZW1pdF9lb2JydW4oZW50cm9weSk7CisKKyAgICAvKiBDb3VudC9lbWl0IEh1ZmZtYW4gc3ltYm9sIGZvciBydW4gbGVuZ3RoIC8gbnVtYmVyIG9mIGJpdHMgKi8KKyAgICBlbWl0X3N5bWJvbChlbnRyb3B5LCBlbnRyb3B5LT5hY190Ymxfbm8sIChyIDw8IDQpICsgMSk7CisKKyAgICAvKiBFbWl0IG91dHB1dCBiaXQgZm9yIG5ld2x5LW5vbnplcm8gY29lZiAqLworICAgIHRlbXAgPSAoKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tdXSA8IDApID8gMCA6IDE7CisgICAgZW1pdF9iaXRzKGVudHJvcHksICh1bnNpZ25lZCBpbnQpIHRlbXAsIDEpOworCisgICAgLyogRW1pdCBidWZmZXJlZCBjb3JyZWN0aW9uIGJpdHMgdGhhdCBtdXN0IGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvZGUgKi8KKyAgICBlbWl0X2J1ZmZlcmVkX2JpdHMoZW50cm9weSwgQlJfYnVmZmVyLCBCUik7CisgICAgQlJfYnVmZmVyID0gZW50cm9weS0+Yml0X2J1ZmZlcjsgLyogQkUgYml0cyBhcmUgZ29uZSBub3cgKi8KKyAgICBCUiA9IDA7CisgICAgciA9IDA7CQkJLyogcmVzZXQgemVybyBydW4gbGVuZ3RoICovCisgIH0KKworICBpZiAociA+IDAgfHwgQlIgPiAwKSB7CS8qIElmIHRoZXJlIGFyZSB0cmFpbGluZyB6ZXJvZXMsICovCisgICAgZW50cm9weS0+RU9CUlVOKys7CQkvKiBjb3VudCBhbiBFT0IgKi8KKyAgICBlbnRyb3B5LT5CRSArPSBCUjsJCS8qIGNvbmNhdCBteSBjb3JyZWN0aW9uIGJpdHMgdG8gb2xkZXIgb25lcyAqLworICAgIC8qIFdlIGZvcmNlIG91dCB0aGUgRU9CIGlmIHdlIHJpc2sgZWl0aGVyOgorICAgICAqIDEuIG92ZXJmbG93IG9mIHRoZSBFT0IgY291bnRlcjsKKyAgICAgKiAyLiBvdmVyZmxvdyBvZiB0aGUgY29ycmVjdGlvbiBiaXQgYnVmZmVyIGR1cmluZyB0aGUgbmV4dCBNQ1UuCisgICAgICovCisgICAgaWYgKGVudHJvcHktPkVPQlJVTiA9PSAweDdGRkYgfHwgZW50cm9weS0+QkUgPiAoTUFYX0NPUlJfQklUUy1EQ1RTSVpFMisxKSkKKyAgICAgIGVtaXRfZW9icnVuKGVudHJvcHkpOworICB9CisKKyAgY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGUgPSBlbnRyb3B5LT5uZXh0X291dHB1dF9ieXRlOworICBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXIgPSBlbnRyb3B5LT5mcmVlX2luX2J1ZmZlcjsKKworICAvKiBVcGRhdGUgcmVzdGFydC1pbnRlcnZhbCBzdGF0ZSB0b28gKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7CisgICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApIHsKKyAgICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKys7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtICY9IDc7CisgICAgfQorICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07CisgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogRmluaXNoIHVwIGF0IHRoZSBlbmQgb2YgYSBIdWZmbWFuLWNvbXByZXNzZWQgcHJvZ3Jlc3NpdmUgc2Nhbi4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2ZpbmlzaF9wYXNzX3BodWZmIChqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sgICAKKyAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7CisKKyAgZW50cm9weS0+bmV4dF9vdXRwdXRfYnl0ZSA9IGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlOworICBlbnRyb3B5LT5mcmVlX2luX2J1ZmZlciA9IGNpbmZvLT5kZXN0LT5mcmVlX2luX2J1ZmZlcjsKKworICAvKiBGbHVzaCBvdXQgYW55IGJ1ZmZlcmVkIGRhdGEgKi8KKyAgZW1pdF9lb2JydW4oZW50cm9weSk7CisgIGZsdXNoX2JpdHMoZW50cm9weSk7CisKKyAgY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGUgPSBlbnRyb3B5LT5uZXh0X291dHB1dF9ieXRlOworICBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXIgPSBlbnRyb3B5LT5mcmVlX2luX2J1ZmZlcjsKK30KKworCisvKgorICogRmluaXNoIHVwIGEgc3RhdGlzdGljcy1nYXRoZXJpbmcgcGFzcyBhbmQgY3JlYXRlIHRoZSBuZXcgSHVmZm1hbiB0YWJsZXMuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitmaW5pc2hfcGFzc19nYXRoZXJfcGh1ZmYgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsKKyAgYm9vbGVhbiBpc19EQ19iYW5kOworICBpbnQgY2ksIHRibDsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7CisgIEpIVUZGX1RCTCAqKmh0YmxwdHI7CisgIGJvb2xlYW4gZGlkW05VTV9IVUZGX1RCTFNdOworCisgIC8qIEZsdXNoIG91dCBidWZmZXJlZCBkYXRhIChhbGwgd2UgY2FyZSBhYm91dCBpcyBjb3VudGluZyB0aGUgRU9CIHN5bWJvbCkgKi8KKyAgZW1pdF9lb2JydW4oZW50cm9weSk7CisKKyAgaXNfRENfYmFuZCA9IChjaW5mby0+U3MgPT0gMCk7CisKKyAgLyogSXQncyBpbXBvcnRhbnQgbm90IHRvIGFwcGx5IGpwZWdfZ2VuX29wdGltYWxfdGFibGUgbW9yZSB0aGFuIG9uY2UKKyAgICogcGVyIHRhYmxlLCBiZWNhdXNlIGl0IGNsb2JiZXJzIHRoZSBpbnB1dCBmcmVxdWVuY3kgY291bnRzIQorICAgKi8KKyAgTUVNWkVSTyhkaWQsIFNJWkVPRihkaWQpKTsKKworICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07CisgICAgaWYgKGlzX0RDX2JhbmQpIHsKKyAgICAgIGlmIChjaW5mby0+QWggIT0gMCkJLyogREMgcmVmaW5lbWVudCBuZWVkcyBubyB0YWJsZSAqLworCWNvbnRpbnVlOworICAgICAgdGJsID0gY29tcHB0ci0+ZGNfdGJsX25vOworICAgIH0gZWxzZSB7CisgICAgICB0YmwgPSBjb21wcHRyLT5hY190Ymxfbm87CisgICAgfQorICAgIGlmICghIGRpZFt0YmxdKSB7CisgICAgICBpZiAoaXNfRENfYmFuZCkKKyAgICAgICAgaHRibHB0ciA9ICYgY2luZm8tPmRjX2h1ZmZfdGJsX3B0cnNbdGJsXTsKKyAgICAgIGVsc2UKKyAgICAgICAgaHRibHB0ciA9ICYgY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbdGJsXTsKKyAgICAgIGlmICgqaHRibHB0ciA9PSBOVUxMKQorICAgICAgICAqaHRibHB0ciA9IGpwZWdfYWxsb2NfaHVmZl90YWJsZSgoal9jb21tb25fcHRyKSBjaW5mbyk7CisgICAgICBqcGVnX2dlbl9vcHRpbWFsX3RhYmxlKGNpbmZvLCAqaHRibHB0ciwgZW50cm9weS0+Y291bnRfcHRyc1t0YmxdKTsKKyAgICAgIGRpZFt0YmxdID0gVFJVRTsKKyAgICB9CisgIH0KK30KKworCisvKgorICogTW9kdWxlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIHByb2dyZXNzaXZlIEh1ZmZtYW4gZW50cm9weSBlbmNvZGluZy4KKyAqLworCitHTE9CQUwodm9pZCkKK2ppbml0X3BodWZmX2VuY29kZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5OworICBpbnQgaTsKKworICBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJU0laRU9GKHBodWZmX2VudHJvcHlfZW5jb2RlcikpOworICBjaW5mby0+ZW50cm9weSA9IChzdHJ1Y3QganBlZ19lbnRyb3B5X2VuY29kZXIgKikgZW50cm9weTsKKyAgZW50cm9weS0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX3BodWZmOworCisgIC8qIE1hcmsgdGFibGVzIHVuYWxsb2NhdGVkICovCisgIGZvciAoaSA9IDA7IGkgPCBOVU1fSFVGRl9UQkxTOyBpKyspIHsKKyAgICBlbnRyb3B5LT5kZXJpdmVkX3RibHNbaV0gPSBOVUxMOworICAgIGVudHJvcHktPmNvdW50X3B0cnNbaV0gPSBOVUxMOworICB9CisgIGVudHJvcHktPmJpdF9idWZmZXIgPSBOVUxMOwkvKiBuZWVkZWQgb25seSBpbiBBQyByZWZpbmVtZW50IHNjYW4gKi8KK30KKworI2VuZGlmIC8qIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVEICovCisKKyNlbmRpZiAvL19GWF9KUEVHX1RVUkJPXwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamNwcmVwY3QuYyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pjcHJlcGN0LmMKaW5kZXggNTM5ZDg3Yi4uNTdmM2ZjMSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamNwcmVwY3QuYworKysgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY3ByZXBjdC5jCkBAIC0xLDM1NyArMSwzNTcgQEAKLSNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pDQotLyoNCi0gKiBqY3ByZXBjdC5jDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgVGhvbWFzIEcuIExhbmUuDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4NCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuDQotICoNCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvbXByZXNzaW9uIHByZXByb2Nlc3NpbmcgY29udHJvbGxlci4NCi0gKiBUaGlzIGNvbnRyb2xsZXIgbWFuYWdlcyB0aGUgY29sb3IgY29udmVyc2lvbiwgZG93bnNhbXBsaW5nLA0KLSAqIGFuZCBlZGdlIGV4cGFuc2lvbiBzdGVwcy4NCi0gKg0KLSAqIE1vc3Qgb2YgdGhlIGNvbXBsZXhpdHkgaGVyZSBpcyBhc3NvY2lhdGVkIHdpdGggYnVmZmVyaW5nIGlucHV0IHJvd3MNCi0gKiBhcyByZXF1aXJlZCBieSB0aGUgZG93bnNhbXBsZXIuICBTZWUgdGhlIGNvbW1lbnRzIGF0IHRoZSBoZWFkIG9mDQotICogamNzYW1wbGUuYyBmb3IgdGhlIGRvd25zYW1wbGVyJ3MgbmVlZHMuDQotICovDQotDQotI2RlZmluZSBKUEVHX0lOVEVSTkFMUw0KLSNpbmNsdWRlICJqaW5jbHVkZS5oIg0KLSNpbmNsdWRlICJqcGVnbGliLmgiDQotDQotDQotLyogQXQgcHJlc2VudCwgamNzYW1wbGUuYyBjYW4gcmVxdWVzdCBjb250ZXh0IHJvd3Mgb25seSBmb3Igc21vb3RoaW5nLg0KLSAqIEluIHRoZSBmdXR1cmUsIHdlIG1pZ2h0IGFsc28gbmVlZCBjb250ZXh0IHJvd3MgZm9yIENDSVI2MDEgc2FtcGxpbmcNCi0gKiBvciBvdGhlciBtb3JlLWNvbXBsZXggZG93bnNhbXBsaW5nIHByb2NlZHVyZXMuICBUaGUgY29kZSB0byBzdXBwb3J0DQotICogY29udGV4dCByb3dzIHNob3VsZCBiZSBjb21waWxlZCBvbmx5IGlmIG5lZWRlZC4NCi0gKi8NCi0jaWZkZWYgSU5QVVRfU01PT1RISU5HX1NVUFBPUlRFRA0KLSNkZWZpbmUgQ09OVEVYVF9ST1dTX1NVUFBPUlRFRA0KLSNlbmRpZg0KLQ0KLQ0KLS8qDQotICogRm9yIHRoZSBzaW1wbGUgKG5vLWNvbnRleHQtcm93KSBjYXNlLCB3ZSBqdXN0IG5lZWQgdG8gYnVmZmVyIG9uZQ0KLSAqIHJvdyBncm91cCdzIHdvcnRoIG9mIHBpeGVscyBmb3IgdGhlIGRvd25zYW1wbGluZyBzdGVwLiAgQXQgdGhlIGJvdHRvbSBvZg0KLSAqIHRoZSBpbWFnZSwgd2UgcGFkIHRvIGEgZnVsbCByb3cgZ3JvdXAgYnkgcmVwbGljYXRpbmcgdGhlIGxhc3QgcGl4ZWwgcm93Lg0KLSAqIFRoZSBkb3duc2FtcGxlcidzIGxhc3Qgb3V0cHV0IHJvdyBpcyB0aGVuIHJlcGxpY2F0ZWQgaWYgbmVlZGVkIHRvIHBhZA0KLSAqIG91dCB0byBhIGZ1bGwgaU1DVSByb3cuDQotICoNCi0gKiBXaGVuIHByb3ZpZGluZyBjb250ZXh0IHJvd3MsIHdlIG11c3QgYnVmZmVyIHRocmVlIHJvdyBncm91cHMnIHdvcnRoIG9mDQotICogcGl4ZWxzLiAgVGhyZWUgcm93IGdyb3VwcyBhcmUgcGh5c2ljYWxseSBhbGxvY2F0ZWQsIGJ1dCB0aGUgcm93IHBvaW50ZXINCi0gKiBhcnJheXMgYXJlIG1hZGUgZml2ZSByb3cgZ3JvdXBzIGhpZ2gsIHdpdGggdGhlIGV4dHJhIHBvaW50ZXJzIGFib3ZlIGFuZA0KLSAqIGJlbG93ICJ3cmFwcGluZyBhcm91bmQiIHRvIHBvaW50IHRvIHRoZSBsYXN0IGFuZCBmaXJzdCByZWFsIHJvdyBncm91cHMuDQotICogVGhpcyBhbGxvd3MgdGhlIGRvd25zYW1wbGVyIHRvIGFjY2VzcyB0aGUgcHJvcGVyIGNvbnRleHQgcm93cy4NCi0gKiBBdCB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGhlIGltYWdlLCB3ZSBjcmVhdGUgZHVtbXkgY29udGV4dCByb3dzIGJ5DQotICogY29weWluZyB0aGUgZmlyc3Qgb3IgbGFzdCByZWFsIHBpeGVsIHJvdy4gIFRoaXMgY29weWluZyBjb3VsZCBiZSBhdm9pZGVkDQotICogYnkgcG9pbnRlciBoYWNraW5nIGFzIGlzIGRvbmUgaW4gamRtYWluY3QuYywgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCB0aGUNCi0gKiB0cm91YmxlIG9uIHRoZSBjb21wcmVzc2lvbiBzaWRlLg0KLSAqLw0KLQ0KLQ0KLS8qIFByaXZhdGUgYnVmZmVyIGNvbnRyb2xsZXIgb2JqZWN0ICovDQotDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgc3RydWN0IGpwZWdfY19wcmVwX2NvbnRyb2xsZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovDQotDQotICAvKiBEb3duc2FtcGxpbmcgaW5wdXQgYnVmZmVyLiAgVGhpcyBidWZmZXIgaG9sZHMgY29sb3ItY29udmVydGVkIGRhdGENCi0gICAqIHVudGlsIHdlIGhhdmUgZW5vdWdoIHRvIGRvIGEgZG93bnNhbXBsZSBzdGVwLg0KLSAgICovDQotICBKU0FNUEFSUkFZIGNvbG9yX2J1ZltNQVhfQ09NUE9ORU5UU107DQotDQotICBKRElNRU5TSU9OIHJvd3NfdG9fZ287CS8qIGNvdW50cyByb3dzIHJlbWFpbmluZyBpbiBzb3VyY2UgaW1hZ2UgKi8NCi0gIGludCBuZXh0X2J1Zl9yb3c7CQkvKiBpbmRleCBvZiBuZXh0IHJvdyB0byBzdG9yZSBpbiBjb2xvcl9idWYgKi8NCi0NCi0jaWZkZWYgQ09OVEVYVF9ST1dTX1NVUFBPUlRFRAkvKiBvbmx5IG5lZWRlZCBmb3IgY29udGV4dCBjYXNlICovDQotICBpbnQgdGhpc19yb3dfZ3JvdXA7CQkvKiBzdGFydGluZyByb3cgaW5kZXggb2YgZ3JvdXAgdG8gcHJvY2VzcyAqLw0KLSAgaW50IG5leHRfYnVmX3N0b3A7CQkvKiBkb3duc2FtcGxlIHdoZW4gd2UgcmVhY2ggdGhpcyBpbmRleCAqLw0KLSNlbmRpZg0KLX0gbXlfcHJlcF9jb250cm9sbGVyOw0KLQ0KLXR5cGVkZWYgbXlfcHJlcF9jb250cm9sbGVyICogbXlfcHJlcF9wdHI7DQotDQotDQotLyoNCi0gKiBJbml0aWFsaXplIGZvciBhIHByb2Nlc3NpbmcgcGFzcy4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1zdGFydF9wYXNzX3ByZXAgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKX0JVRl9NT0RFIHBhc3NfbW9kZSkNCi17DQotICBteV9wcmVwX3B0ciBwcmVwID0gKG15X3ByZXBfcHRyKSBjaW5mby0+cHJlcDsNCi0NCi0gIGlmIChwYXNzX21vZGUgIT0gSkJVRl9QQVNTX1RIUlUpDQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0JVRkZFUl9NT0RFKTsNCi0NCi0gIC8qIEluaXRpYWxpemUgdG90YWwtaGVpZ2h0IGNvdW50ZXIgZm9yIGRldGVjdGluZyBib3R0b20gb2YgaW1hZ2UgKi8NCi0gIHByZXAtPnJvd3NfdG9fZ28gPSBjaW5mby0+aW1hZ2VfaGVpZ2h0Ow0KLSAgLyogTWFyayB0aGUgY29udmVyc2lvbiBidWZmZXIgZW1wdHkgKi8NCi0gIHByZXAtPm5leHRfYnVmX3JvdyA9IDA7DQotI2lmZGVmIENPTlRFWFRfUk9XU19TVVBQT1JURUQNCi0gIC8qIFByZXNldCBhZGRpdGlvbmFsIHN0YXRlIHZhcmlhYmxlcyBmb3IgY29udGV4dCBtb2RlLg0KLSAgICogVGhlc2UgYXJlbid0IHVzZWQgaW4gbm9uLWNvbnRleHQgbW9kZSwgc28gd2UgbmVlZG4ndCB0ZXN0IHdoaWNoIG1vZGUuDQotICAgKi8NCi0gIHByZXAtPnRoaXNfcm93X2dyb3VwID0gMDsNCi0gIC8qIFNldCBuZXh0X2J1Zl9zdG9wIHRvIHN0b3AgYWZ0ZXIgdHdvIHJvdyBncm91cHMgaGF2ZSBiZWVuIHJlYWQgaW4uICovDQotICBwcmVwLT5uZXh0X2J1Zl9zdG9wID0gMiAqIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcjsNCi0jZW5kaWYNCi19DQotDQotDQotLyoNCi0gKiBFeHBhbmQgYW4gaW1hZ2UgdmVydGljYWxseSBmcm9tIGhlaWdodCBpbnB1dF9yb3dzIHRvIGhlaWdodCBvdXRwdXRfcm93cywNCi0gKiBieSBkdXBsaWNhdGluZyB0aGUgYm90dG9tIHJvdy4NCi0gKi8NCi0NCi1MT0NBTCh2b2lkKQ0KLWV4cGFuZF9ib3R0b21fZWRnZSAoSlNBTVBBUlJBWSBpbWFnZV9kYXRhLCBKRElNRU5TSU9OIG51bV9jb2xzLA0KLQkJICAgIGludCBpbnB1dF9yb3dzLCBpbnQgb3V0cHV0X3Jvd3MpDQotew0KLSAgcmVnaXN0ZXIgaW50IHJvdzsNCi0NCi0gIGZvciAocm93ID0gaW5wdXRfcm93czsgcm93IDwgb3V0cHV0X3Jvd3M7IHJvdysrKSB7DQotICAgIGpjb3B5X3NhbXBsZV9yb3dzKGltYWdlX2RhdGEsIGlucHV0X3Jvd3MtMSwgaW1hZ2VfZGF0YSwgcm93LA0KLQkJICAgICAgMSwgbnVtX2NvbHMpOw0KLSAgfQ0KLX0NCi0NCi0NCi0vKg0KLSAqIFByb2Nlc3Mgc29tZSBkYXRhIGluIHRoZSBzaW1wbGUgbm8tY29udGV4dCBjYXNlLg0KLSAqDQotICogUHJlcHJvY2Vzc29yIG91dHB1dCBkYXRhIGlzIGNvdW50ZWQgaW4gInJvdyBncm91cHMiLiAgQSByb3cgZ3JvdXANCi0gKiBpcyBkZWZpbmVkIHRvIGJlIHZfc2FtcF9mYWN0b3Igc2FtcGxlIHJvd3Mgb2YgZWFjaCBjb21wb25lbnQuDQotICogRG93bnNhbXBsaW5nIHdpbGwgcHJvZHVjZSB0aGlzIG11Y2ggZGF0YSBmcm9tIGVhY2ggbWF4X3Zfc2FtcF9mYWN0b3INCi0gKiBpbnB1dCByb3dzLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXByZV9wcm9jZXNzX2RhdGEgKGpfY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2N0ciwNCi0JCSAgSkRJTUVOU0lPTiBpbl9yb3dzX2F2YWlsLA0KLQkJICBKU0FNUElNQUdFIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfZ3JvdXBfY3RyLA0KLQkJICBKRElNRU5TSU9OIG91dF9yb3dfZ3JvdXBzX2F2YWlsKQ0KLXsNCi0gIG15X3ByZXBfcHRyIHByZXAgPSAobXlfcHJlcF9wdHIpIGNpbmZvLT5wcmVwOw0KLSAgaW50IG51bXJvd3MsIGNpOw0KLSAgSkRJTUVOU0lPTiBpbnJvd3M7DQotICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cjsNCi0NCi0gIHdoaWxlICgqaW5fcm93X2N0ciA8IGluX3Jvd3NfYXZhaWwgJiYNCi0JICpvdXRfcm93X2dyb3VwX2N0ciA8IG91dF9yb3dfZ3JvdXBzX2F2YWlsKSB7DQotICAgIC8qIERvIGNvbG9yIGNvbnZlcnNpb24gdG8gZmlsbCB0aGUgY29udmVyc2lvbiBidWZmZXIuICovDQotICAgIGlucm93cyA9IGluX3Jvd3NfYXZhaWwgLSAqaW5fcm93X2N0cjsNCi0gICAgbnVtcm93cyA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAtIHByZXAtPm5leHRfYnVmX3JvdzsNCi0gICAgbnVtcm93cyA9IChpbnQpIE1JTigoSkRJTUVOU0lPTikgbnVtcm93cywgaW5yb3dzKTsNCi0gICAgKCpjaW5mby0+Y2NvbnZlcnQtPmNvbG9yX2NvbnZlcnQpIChjaW5mbywgaW5wdXRfYnVmICsgKmluX3Jvd19jdHIsDQotCQkJCSAgICAgICBwcmVwLT5jb2xvcl9idWYsDQotCQkJCSAgICAgICAoSkRJTUVOU0lPTikgcHJlcC0+bmV4dF9idWZfcm93LA0KLQkJCQkgICAgICAgbnVtcm93cyk7DQotICAgICppbl9yb3dfY3RyICs9IG51bXJvd3M7DQotICAgIHByZXAtPm5leHRfYnVmX3JvdyArPSBudW1yb3dzOw0KLSAgICBwcmVwLT5yb3dzX3RvX2dvIC09IG51bXJvd3M7DQotICAgIC8qIElmIGF0IGJvdHRvbSBvZiBpbWFnZSwgcGFkIHRvIGZpbGwgdGhlIGNvbnZlcnNpb24gYnVmZmVyLiAqLw0KLSAgICBpZiAocHJlcC0+cm93c190b19nbyA9PSAwICYmDQotCXByZXAtPm5leHRfYnVmX3JvdyA8IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcikgew0KLSAgICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgew0KLQlleHBhbmRfYm90dG9tX2VkZ2UocHJlcC0+Y29sb3JfYnVmW2NpXSwgY2luZm8tPmltYWdlX3dpZHRoLA0KLQkJCSAgIHByZXAtPm5leHRfYnVmX3JvdywgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKTsNCi0gICAgICB9DQotICAgICAgcHJlcC0+bmV4dF9idWZfcm93ID0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yOw0KLSAgICB9DQotICAgIC8qIElmIHdlJ3ZlIGZpbGxlZCB0aGUgY29udmVyc2lvbiBidWZmZXIsIGVtcHR5IGl0LiAqLw0KLSAgICBpZiAocHJlcC0+bmV4dF9idWZfcm93ID09IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcikgew0KLSAgICAgICgqY2luZm8tPmRvd25zYW1wbGUtPmRvd25zYW1wbGUpIChjaW5mbywNCi0JCQkJCXByZXAtPmNvbG9yX2J1ZiwgKEpESU1FTlNJT04pIDAsDQotCQkJCQlvdXRwdXRfYnVmLCAqb3V0X3Jvd19ncm91cF9jdHIpOw0KLSAgICAgIHByZXAtPm5leHRfYnVmX3JvdyA9IDA7DQotICAgICAgKCpvdXRfcm93X2dyb3VwX2N0cikrKzsNCi0gICAgfQ0KLSAgICAvKiBJZiBhdCBib3R0b20gb2YgaW1hZ2UsIHBhZCB0aGUgb3V0cHV0IHRvIGEgZnVsbCBpTUNVIGhlaWdodC4NCi0gICAgICogTm90ZSB3ZSBhc3N1bWUgdGhlIGNhbGxlciBpcyBwcm92aWRpbmcgYSBvbmUtaU1DVS1oZWlnaHQgb3V0cHV0IGJ1ZmZlciENCi0gICAgICovDQotICAgIGlmIChwcmVwLT5yb3dzX3RvX2dvID09IDAgJiYNCi0JKm91dF9yb3dfZ3JvdXBfY3RyIDwgb3V0X3Jvd19ncm91cHNfYXZhaWwpIHsNCi0gICAgICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOw0KLQkgICBjaSsrLCBjb21wcHRyKyspIHsNCi0JZXhwYW5kX2JvdHRvbV9lZGdlKG91dHB1dF9idWZbY2ldLA0KLQkJCSAgIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkUsDQotCQkJICAgKGludCkgKCpvdXRfcm93X2dyb3VwX2N0ciAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpLA0KLQkJCSAgIChpbnQpIChvdXRfcm93X2dyb3Vwc19hdmFpbCAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpKTsNCi0gICAgICB9DQotICAgICAgKm91dF9yb3dfZ3JvdXBfY3RyID0gb3V0X3Jvd19ncm91cHNfYXZhaWw7DQotICAgICAgYnJlYWs7CQkJLyogY2FuIGV4aXQgb3V0ZXIgbG9vcCB3aXRob3V0IHRlc3QgKi8NCi0gICAgfQ0KLSAgfQ0KLX0NCi0NCi0NCi0jaWZkZWYgQ09OVEVYVF9ST1dTX1NVUFBPUlRFRA0KLQ0KLS8qDQotICogUHJvY2VzcyBzb21lIGRhdGEgaW4gdGhlIGNvbnRleHQgY2FzZS4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1wcmVfcHJvY2Vzc19jb250ZXh0IChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCSAgICAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpESU1FTlNJT04gKmluX3Jvd19jdHIsDQotCQkgICAgIEpESU1FTlNJT04gaW5fcm93c19hdmFpbCwNCi0JCSAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OICpvdXRfcm93X2dyb3VwX2N0ciwNCi0JCSAgICAgSkRJTUVOU0lPTiBvdXRfcm93X2dyb3Vwc19hdmFpbCkNCi17DQotICBteV9wcmVwX3B0ciBwcmVwID0gKG15X3ByZXBfcHRyKSBjaW5mby0+cHJlcDsNCi0gIGludCBudW1yb3dzLCBjaTsNCi0gIGludCBidWZfaGVpZ2h0ID0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogMzsNCi0gIEpESU1FTlNJT04gaW5yb3dzOw0KLQ0KLSAgd2hpbGUgKCpvdXRfcm93X2dyb3VwX2N0ciA8IG91dF9yb3dfZ3JvdXBzX2F2YWlsKSB7DQotICAgIGlmICgqaW5fcm93X2N0ciA8IGluX3Jvd3NfYXZhaWwpIHsNCi0gICAgICAvKiBEbyBjb2xvciBjb252ZXJzaW9uIHRvIGZpbGwgdGhlIGNvbnZlcnNpb24gYnVmZmVyLiAqLw0KLSAgICAgIGlucm93cyA9IGluX3Jvd3NfYXZhaWwgLSAqaW5fcm93X2N0cjsNCi0gICAgICBudW1yb3dzID0gcHJlcC0+bmV4dF9idWZfc3RvcCAtIHByZXAtPm5leHRfYnVmX3JvdzsNCi0gICAgICBudW1yb3dzID0gKGludCkgTUlOKChKRElNRU5TSU9OKSBudW1yb3dzLCBpbnJvd3MpOw0KLSAgICAgICgqY2luZm8tPmNjb252ZXJ0LT5jb2xvcl9jb252ZXJ0KSAoY2luZm8sIGlucHV0X2J1ZiArICppbl9yb3dfY3RyLA0KLQkJCQkJIHByZXAtPmNvbG9yX2J1ZiwNCi0JCQkJCSAoSkRJTUVOU0lPTikgcHJlcC0+bmV4dF9idWZfcm93LA0KLQkJCQkJIG51bXJvd3MpOw0KLSAgICAgIC8qIFBhZCBhdCB0b3Agb2YgaW1hZ2UsIGlmIGZpcnN0IHRpbWUgdGhyb3VnaCAqLw0KLSAgICAgIGlmIChwcmVwLT5yb3dzX3RvX2dvID09IGNpbmZvLT5pbWFnZV9oZWlnaHQpIHsNCi0JZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKSB7DQotCSAgaW50IHJvdzsNCi0JICBmb3IgKHJvdyA9IDE7IHJvdyA8PSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7IHJvdysrKSB7DQotCSAgICBqY29weV9zYW1wbGVfcm93cyhwcmVwLT5jb2xvcl9idWZbY2ldLCAwLA0KLQkJCSAgICAgIHByZXAtPmNvbG9yX2J1ZltjaV0sIC1yb3csDQotCQkJICAgICAgMSwgY2luZm8tPmltYWdlX3dpZHRoKTsNCi0JICB9DQotCX0NCi0gICAgICB9DQotICAgICAgKmluX3Jvd19jdHIgKz0gbnVtcm93czsNCi0gICAgICBwcmVwLT5uZXh0X2J1Zl9yb3cgKz0gbnVtcm93czsNCi0gICAgICBwcmVwLT5yb3dzX3RvX2dvIC09IG51bXJvd3M7DQotICAgIH0gZWxzZSB7DQotICAgICAgLyogUmV0dXJuIGZvciBtb3JlIGRhdGEsIHVubGVzcyB3ZSBhcmUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgaW1hZ2UuICovDQotICAgICAgaWYgKHByZXAtPnJvd3NfdG9fZ28gIT0gMCkNCi0JYnJlYWs7DQotICAgICAgLyogV2hlbiBhdCBib3R0b20gb2YgaW1hZ2UsIHBhZCB0byBmaWxsIHRoZSBjb252ZXJzaW9uIGJ1ZmZlci4gKi8NCi0gICAgICBpZiAocHJlcC0+bmV4dF9idWZfcm93IDwgcHJlcC0+bmV4dF9idWZfc3RvcCkgew0KLQlmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsNCi0JICBleHBhbmRfYm90dG9tX2VkZ2UocHJlcC0+Y29sb3JfYnVmW2NpXSwgY2luZm8tPmltYWdlX3dpZHRoLA0KLQkJCSAgICAgcHJlcC0+bmV4dF9idWZfcm93LCBwcmVwLT5uZXh0X2J1Zl9zdG9wKTsNCi0JfQ0KLQlwcmVwLT5uZXh0X2J1Zl9yb3cgPSBwcmVwLT5uZXh0X2J1Zl9zdG9wOw0KLSAgICAgIH0NCi0gICAgfQ0KLSAgICAvKiBJZiB3ZSd2ZSBnb3R0ZW4gZW5vdWdoIGRhdGEsIGRvd25zYW1wbGUgYSByb3cgZ3JvdXAuICovDQotICAgIGlmIChwcmVwLT5uZXh0X2J1Zl9yb3cgPT0gcHJlcC0+bmV4dF9idWZfc3RvcCkgew0KLSAgICAgICgqY2luZm8tPmRvd25zYW1wbGUtPmRvd25zYW1wbGUpIChjaW5mbywNCi0JCQkJCXByZXAtPmNvbG9yX2J1ZiwNCi0JCQkJCShKRElNRU5TSU9OKSBwcmVwLT50aGlzX3Jvd19ncm91cCwNCi0JCQkJCW91dHB1dF9idWYsICpvdXRfcm93X2dyb3VwX2N0cik7DQotICAgICAgKCpvdXRfcm93X2dyb3VwX2N0cikrKzsNCi0gICAgICAvKiBBZHZhbmNlIHBvaW50ZXJzIHdpdGggd3JhcGFyb3VuZCBhcyBuZWNlc3NhcnkuICovDQotICAgICAgcHJlcC0+dGhpc19yb3dfZ3JvdXAgKz0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yOw0KLSAgICAgIGlmIChwcmVwLT50aGlzX3Jvd19ncm91cCA+PSBidWZfaGVpZ2h0KQ0KLQlwcmVwLT50aGlzX3Jvd19ncm91cCA9IDA7DQotICAgICAgaWYgKHByZXAtPm5leHRfYnVmX3JvdyA+PSBidWZfaGVpZ2h0KQ0KLQlwcmVwLT5uZXh0X2J1Zl9yb3cgPSAwOw0KLSAgICAgIHByZXAtPm5leHRfYnVmX3N0b3AgPSBwcmVwLT5uZXh0X2J1Zl9yb3cgKyBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7DQotICAgIH0NCi0gIH0NCi19DQotDQotDQotLyoNCi0gKiBDcmVhdGUgdGhlIHdyYXBwZWQtYXJvdW5kIGRvd25zYW1wbGluZyBpbnB1dCBidWZmZXIgbmVlZGVkIGZvciBjb250ZXh0IG1vZGUuDQotICovDQotDQotTE9DQUwodm9pZCkNCi1jcmVhdGVfY29udGV4dF9idWZmZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIG15X3ByZXBfcHRyIHByZXAgPSAobXlfcHJlcF9wdHIpIGNpbmZvLT5wcmVwOw0KLSAgaW50IHJncm91cF9oZWlnaHQgPSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7DQotICBpbnQgY2ksIGk7DQotICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cjsNCi0gIEpTQU1QQVJSQVkgdHJ1ZV9idWZmZXIsIGZha2VfYnVmZmVyOw0KLQ0KLSAgLyogR3JhYiBlbm91Z2ggc3BhY2UgZm9yIGZha2Ugcm93IHBvaW50ZXJzIGZvciBhbGwgdGhlIGNvbXBvbmVudHM7DQotICAgKiB3ZSBuZWVkIGZpdmUgcm93IGdyb3Vwcycgd29ydGggb2YgcG9pbnRlcnMgZm9yIGVhY2ggY29tcG9uZW50Lg0KLSAgICovDQotICBmYWtlX2J1ZmZlciA9IChKU0FNUEFSUkFZKQ0KLSAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQkoY2luZm8tPm51bV9jb21wb25lbnRzICogNSAqIHJncm91cF9oZWlnaHQpICoNCi0JCQkJU0laRU9GKEpTQU1QUk9XKSk7DQotDQotICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOw0KLSAgICAgICBjaSsrLCBjb21wcHRyKyspIHsNCi0gICAgLyogQWxsb2NhdGUgdGhlIGFjdHVhbCBidWZmZXIgc3BhY2UgKDMgcm93IGdyb3VwcykgZm9yIHRoaXMgY29tcG9uZW50Lg0KLSAgICAgKiBXZSBtYWtlIHRoZSBidWZmZXIgd2lkZSBlbm91Z2ggdG8gYWxsb3cgdGhlIGRvd25zYW1wbGVyIHRvIGVkZ2UtZXhwYW5kDQotICAgICAqIGhvcml6b250YWxseSB3aXRoaW4gdGhlIGJ1ZmZlciwgaWYgaXQgc28gY2hvb3Nlcy4NCi0gICAgICovDQotICAgIHRydWVfYnVmZmVyID0gKCpjaW5mby0+bWVtLT5hbGxvY19zYXJyYXkpDQotICAgICAgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwNCi0gICAgICAgKEpESU1FTlNJT04pICgoKGxvbmcpIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkUgKg0KLQkJICAgICAgY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yKSAvIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IpLA0KLSAgICAgICAoSkRJTUVOU0lPTikgKDMgKiByZ3JvdXBfaGVpZ2h0KSk7DQotICAgIC8qIENvcHkgdHJ1ZSBidWZmZXIgcm93IHBvaW50ZXJzIGludG8gdGhlIG1pZGRsZSBvZiB0aGUgZmFrZSByb3cgYXJyYXkgKi8NCi0gICAgTUVNQ09QWShmYWtlX2J1ZmZlciArIHJncm91cF9oZWlnaHQsIHRydWVfYnVmZmVyLA0KLQkgICAgMyAqIHJncm91cF9oZWlnaHQgKiBTSVpFT0YoSlNBTVBST1cpKTsNCi0gICAgLyogRmlsbCBpbiB0aGUgYWJvdmUgYW5kIGJlbG93IHdyYXBhcm91bmQgcG9pbnRlcnMgKi8NCi0gICAgZm9yIChpID0gMDsgaSA8IHJncm91cF9oZWlnaHQ7IGkrKykgew0KLSAgICAgIGZha2VfYnVmZmVyW2ldID0gdHJ1ZV9idWZmZXJbMiAqIHJncm91cF9oZWlnaHQgKyBpXTsNCi0gICAgICBmYWtlX2J1ZmZlcls0ICogcmdyb3VwX2hlaWdodCArIGldID0gdHJ1ZV9idWZmZXJbaV07DQotICAgIH0NCi0gICAgcHJlcC0+Y29sb3JfYnVmW2NpXSA9IGZha2VfYnVmZmVyICsgcmdyb3VwX2hlaWdodDsNCi0gICAgZmFrZV9idWZmZXIgKz0gNSAqIHJncm91cF9oZWlnaHQ7IC8qIHBvaW50IHRvIHNwYWNlIGZvciBuZXh0IGNvbXBvbmVudCAqLw0KLSAgfQ0KLX0NCi0NCi0jZW5kaWYgLyogQ09OVEVYVF9ST1dTX1NVUFBPUlRFRCAqLw0KLQ0KLQ0KLS8qDQotICogSW5pdGlhbGl6ZSBwcmVwcm9jZXNzaW5nIGNvbnRyb2xsZXIuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotamluaXRfY19wcmVwX2NvbnRyb2xsZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpDQotew0KLSAgbXlfcHJlcF9wdHIgcHJlcDsNCi0gIGludCBjaTsNCi0gIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyOw0KLQ0KLSAgaWYgKG5lZWRfZnVsbF9idWZmZXIpCQkvKiBzYWZldHkgY2hlY2sgKi8NCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOw0KLQ0KLSAgcHJlcCA9IChteV9wcmVwX3B0cikNCi0gICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwNCi0JCQkJU0laRU9GKG15X3ByZXBfY29udHJvbGxlcikpOw0KLSAgY2luZm8tPnByZXAgPSAoc3RydWN0IGpwZWdfY19wcmVwX2NvbnRyb2xsZXIgKikgcHJlcDsNCi0gIHByZXAtPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzc19wcmVwOw0KLQ0KLSAgLyogQWxsb2NhdGUgdGhlIGNvbG9yIGNvbnZlcnNpb24gYnVmZmVyLg0KLSAgICogV2UgbWFrZSB0aGUgYnVmZmVyIHdpZGUgZW5vdWdoIHRvIGFsbG93IHRoZSBkb3duc2FtcGxlciB0byBlZGdlLWV4cGFuZA0KLSAgICogaG9yaXpvbnRhbGx5IHdpdGhpbiB0aGUgYnVmZmVyLCBpZiBpdCBzbyBjaG9vc2VzLg0KLSAgICovDQotICBpZiAoY2luZm8tPmRvd25zYW1wbGUtPm5lZWRfY29udGV4dF9yb3dzKSB7DQotICAgIC8qIFNldCB1cCB0byBwcm92aWRlIGNvbnRleHQgcm93cyAqLw0KLSNpZmRlZiBDT05URVhUX1JPV1NfU1VQUE9SVEVEDQotICAgIHByZXAtPnB1Yi5wcmVfcHJvY2Vzc19kYXRhID0gcHJlX3Byb2Nlc3NfY29udGV4dDsNCi0gICAgY3JlYXRlX2NvbnRleHRfYnVmZmVyKGNpbmZvKTsNCi0jZWxzZQ0KLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7DQotI2VuZGlmDQotICB9IGVsc2Ugew0KLSAgICAvKiBObyBjb250ZXh0LCBqdXN0IG1ha2UgaXQgdGFsbCBlbm91Z2ggZm9yIG9uZSByb3cgZ3JvdXAgKi8NCi0gICAgcHJlcC0+cHViLnByZV9wcm9jZXNzX2RhdGEgPSBwcmVfcHJvY2Vzc19kYXRhOw0KLSAgICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOw0KLQkgY2krKywgY29tcHB0cisrKSB7DQotICAgICAgcHJlcC0+Y29sb3JfYnVmW2NpXSA9ICgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQ0KLQkoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkgKEpESU1FTlNJT04pICgoKGxvbmcpIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkUgKg0KLQkJCWNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvcikgLyBjb21wcHRyLT5oX3NhbXBfZmFjdG9yKSwNCi0JIChKRElNRU5TSU9OKSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpOw0KLSAgICB9DQotICB9DQotfQ0KLQ0KLSNlbmRpZiAvL19GWF9KUEVHX1RVUkJPXw0KKyNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pCisvKgorICogamNwcmVwY3QuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb21wcmVzc2lvbiBwcmVwcm9jZXNzaW5nIGNvbnRyb2xsZXIuCisgKiBUaGlzIGNvbnRyb2xsZXIgbWFuYWdlcyB0aGUgY29sb3IgY29udmVyc2lvbiwgZG93bnNhbXBsaW5nLAorICogYW5kIGVkZ2UgZXhwYW5zaW9uIHN0ZXBzLgorICoKKyAqIE1vc3Qgb2YgdGhlIGNvbXBsZXhpdHkgaGVyZSBpcyBhc3NvY2lhdGVkIHdpdGggYnVmZmVyaW5nIGlucHV0IHJvd3MKKyAqIGFzIHJlcXVpcmVkIGJ5IHRoZSBkb3duc2FtcGxlci4gIFNlZSB0aGUgY29tbWVudHMgYXQgdGhlIGhlYWQgb2YKKyAqIGpjc2FtcGxlLmMgZm9yIHRoZSBkb3duc2FtcGxlcidzIG5lZWRzLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKworCisvKiBBdCBwcmVzZW50LCBqY3NhbXBsZS5jIGNhbiByZXF1ZXN0IGNvbnRleHQgcm93cyBvbmx5IGZvciBzbW9vdGhpbmcuCisgKiBJbiB0aGUgZnV0dXJlLCB3ZSBtaWdodCBhbHNvIG5lZWQgY29udGV4dCByb3dzIGZvciBDQ0lSNjAxIHNhbXBsaW5nCisgKiBvciBvdGhlciBtb3JlLWNvbXBsZXggZG93bnNhbXBsaW5nIHByb2NlZHVyZXMuICBUaGUgY29kZSB0byBzdXBwb3J0CisgKiBjb250ZXh0IHJvd3Mgc2hvdWxkIGJlIGNvbXBpbGVkIG9ubHkgaWYgbmVlZGVkLgorICovCisjaWZkZWYgSU5QVVRfU01PT1RISU5HX1NVUFBPUlRFRAorI2RlZmluZSBDT05URVhUX1JPV1NfU1VQUE9SVEVECisjZW5kaWYKKworCisvKgorICogRm9yIHRoZSBzaW1wbGUgKG5vLWNvbnRleHQtcm93KSBjYXNlLCB3ZSBqdXN0IG5lZWQgdG8gYnVmZmVyIG9uZQorICogcm93IGdyb3VwJ3Mgd29ydGggb2YgcGl4ZWxzIGZvciB0aGUgZG93bnNhbXBsaW5nIHN0ZXAuICBBdCB0aGUgYm90dG9tIG9mCisgKiB0aGUgaW1hZ2UsIHdlIHBhZCB0byBhIGZ1bGwgcm93IGdyb3VwIGJ5IHJlcGxpY2F0aW5nIHRoZSBsYXN0IHBpeGVsIHJvdy4KKyAqIFRoZSBkb3duc2FtcGxlcidzIGxhc3Qgb3V0cHV0IHJvdyBpcyB0aGVuIHJlcGxpY2F0ZWQgaWYgbmVlZGVkIHRvIHBhZAorICogb3V0IHRvIGEgZnVsbCBpTUNVIHJvdy4KKyAqCisgKiBXaGVuIHByb3ZpZGluZyBjb250ZXh0IHJvd3MsIHdlIG11c3QgYnVmZmVyIHRocmVlIHJvdyBncm91cHMnIHdvcnRoIG9mCisgKiBwaXhlbHMuICBUaHJlZSByb3cgZ3JvdXBzIGFyZSBwaHlzaWNhbGx5IGFsbG9jYXRlZCwgYnV0IHRoZSByb3cgcG9pbnRlcgorICogYXJyYXlzIGFyZSBtYWRlIGZpdmUgcm93IGdyb3VwcyBoaWdoLCB3aXRoIHRoZSBleHRyYSBwb2ludGVycyBhYm92ZSBhbmQKKyAqIGJlbG93ICJ3cmFwcGluZyBhcm91bmQiIHRvIHBvaW50IHRvIHRoZSBsYXN0IGFuZCBmaXJzdCByZWFsIHJvdyBncm91cHMuCisgKiBUaGlzIGFsbG93cyB0aGUgZG93bnNhbXBsZXIgdG8gYWNjZXNzIHRoZSBwcm9wZXIgY29udGV4dCByb3dzLgorICogQXQgdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRoZSBpbWFnZSwgd2UgY3JlYXRlIGR1bW15IGNvbnRleHQgcm93cyBieQorICogY29weWluZyB0aGUgZmlyc3Qgb3IgbGFzdCByZWFsIHBpeGVsIHJvdy4gIFRoaXMgY29weWluZyBjb3VsZCBiZSBhdm9pZGVkCisgKiBieSBwb2ludGVyIGhhY2tpbmcgYXMgaXMgZG9uZSBpbiBqZG1haW5jdC5jLCBidXQgaXQgZG9lc24ndCBzZWVtIHdvcnRoIHRoZQorICogdHJvdWJsZSBvbiB0aGUgY29tcHJlc3Npb24gc2lkZS4KKyAqLworCisKKy8qIFByaXZhdGUgYnVmZmVyIGNvbnRyb2xsZXIgb2JqZWN0ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IGpwZWdfY19wcmVwX2NvbnRyb2xsZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCisKKyAgLyogRG93bnNhbXBsaW5nIGlucHV0IGJ1ZmZlci4gIFRoaXMgYnVmZmVyIGhvbGRzIGNvbG9yLWNvbnZlcnRlZCBkYXRhCisgICAqIHVudGlsIHdlIGhhdmUgZW5vdWdoIHRvIGRvIGEgZG93bnNhbXBsZSBzdGVwLgorICAgKi8KKyAgSlNBTVBBUlJBWSBjb2xvcl9idWZbTUFYX0NPTVBPTkVOVFNdOworCisgIEpESU1FTlNJT04gcm93c190b19nbzsJLyogY291bnRzIHJvd3MgcmVtYWluaW5nIGluIHNvdXJjZSBpbWFnZSAqLworICBpbnQgbmV4dF9idWZfcm93OwkJLyogaW5kZXggb2YgbmV4dCByb3cgdG8gc3RvcmUgaW4gY29sb3JfYnVmICovCisKKyNpZmRlZiBDT05URVhUX1JPV1NfU1VQUE9SVEVECS8qIG9ubHkgbmVlZGVkIGZvciBjb250ZXh0IGNhc2UgKi8KKyAgaW50IHRoaXNfcm93X2dyb3VwOwkJLyogc3RhcnRpbmcgcm93IGluZGV4IG9mIGdyb3VwIHRvIHByb2Nlc3MgKi8KKyAgaW50IG5leHRfYnVmX3N0b3A7CQkvKiBkb3duc2FtcGxlIHdoZW4gd2UgcmVhY2ggdGhpcyBpbmRleCAqLworI2VuZGlmCit9IG15X3ByZXBfY29udHJvbGxlcjsKKwordHlwZWRlZiBteV9wcmVwX2NvbnRyb2xsZXIgKiBteV9wcmVwX3B0cjsKKworCisvKgorICogSW5pdGlhbGl6ZSBmb3IgYSBwcm9jZXNzaW5nIHBhc3MuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9wYXNzX3ByZXAgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKX0JVRl9NT0RFIHBhc3NfbW9kZSkKK3sKKyAgbXlfcHJlcF9wdHIgcHJlcCA9IChteV9wcmVwX3B0cikgY2luZm8tPnByZXA7CisKKyAgaWYgKHBhc3NfbW9kZSAhPSBKQlVGX1BBU1NfVEhSVSkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7CisKKyAgLyogSW5pdGlhbGl6ZSB0b3RhbC1oZWlnaHQgY291bnRlciBmb3IgZGV0ZWN0aW5nIGJvdHRvbSBvZiBpbWFnZSAqLworICBwcmVwLT5yb3dzX3RvX2dvID0gY2luZm8tPmltYWdlX2hlaWdodDsKKyAgLyogTWFyayB0aGUgY29udmVyc2lvbiBidWZmZXIgZW1wdHkgKi8KKyAgcHJlcC0+bmV4dF9idWZfcm93ID0gMDsKKyNpZmRlZiBDT05URVhUX1JPV1NfU1VQUE9SVEVECisgIC8qIFByZXNldCBhZGRpdGlvbmFsIHN0YXRlIHZhcmlhYmxlcyBmb3IgY29udGV4dCBtb2RlLgorICAgKiBUaGVzZSBhcmVuJ3QgdXNlZCBpbiBub24tY29udGV4dCBtb2RlLCBzbyB3ZSBuZWVkbid0IHRlc3Qgd2hpY2ggbW9kZS4KKyAgICovCisgIHByZXAtPnRoaXNfcm93X2dyb3VwID0gMDsKKyAgLyogU2V0IG5leHRfYnVmX3N0b3AgdG8gc3RvcCBhZnRlciB0d28gcm93IGdyb3VwcyBoYXZlIGJlZW4gcmVhZCBpbi4gKi8KKyAgcHJlcC0+bmV4dF9idWZfc3RvcCA9IDIgKiBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7CisjZW5kaWYKK30KKworCisvKgorICogRXhwYW5kIGFuIGltYWdlIHZlcnRpY2FsbHkgZnJvbSBoZWlnaHQgaW5wdXRfcm93cyB0byBoZWlnaHQgb3V0cHV0X3Jvd3MsCisgKiBieSBkdXBsaWNhdGluZyB0aGUgYm90dG9tIHJvdy4KKyAqLworCitMT0NBTCh2b2lkKQorZXhwYW5kX2JvdHRvbV9lZGdlIChKU0FNUEFSUkFZIGltYWdlX2RhdGEsIEpESU1FTlNJT04gbnVtX2NvbHMsCisJCSAgICBpbnQgaW5wdXRfcm93cywgaW50IG91dHB1dF9yb3dzKQoreworICByZWdpc3RlciBpbnQgcm93OworCisgIGZvciAocm93ID0gaW5wdXRfcm93czsgcm93IDwgb3V0cHV0X3Jvd3M7IHJvdysrKSB7CisgICAgamNvcHlfc2FtcGxlX3Jvd3MoaW1hZ2VfZGF0YSwgaW5wdXRfcm93cy0xLCBpbWFnZV9kYXRhLCByb3csCisJCSAgICAgIDEsIG51bV9jb2xzKTsKKyAgfQorfQorCisKKy8qCisgKiBQcm9jZXNzIHNvbWUgZGF0YSBpbiB0aGUgc2ltcGxlIG5vLWNvbnRleHQgY2FzZS4KKyAqCisgKiBQcmVwcm9jZXNzb3Igb3V0cHV0IGRhdGEgaXMgY291bnRlZCBpbiAicm93IGdyb3VwcyIuICBBIHJvdyBncm91cAorICogaXMgZGVmaW5lZCB0byBiZSB2X3NhbXBfZmFjdG9yIHNhbXBsZSByb3dzIG9mIGVhY2ggY29tcG9uZW50LgorICogRG93bnNhbXBsaW5nIHdpbGwgcHJvZHVjZSB0aGlzIG11Y2ggZGF0YSBmcm9tIGVhY2ggbWF4X3Zfc2FtcF9mYWN0b3IKKyAqIGlucHV0IHJvd3MuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitwcmVfcHJvY2Vzc19kYXRhIChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2N0ciwKKwkJICBKRElNRU5TSU9OIGluX3Jvd3NfYXZhaWwsCisJCSAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OICpvdXRfcm93X2dyb3VwX2N0ciwKKwkJICBKRElNRU5TSU9OIG91dF9yb3dfZ3JvdXBzX2F2YWlsKQoreworICBteV9wcmVwX3B0ciBwcmVwID0gKG15X3ByZXBfcHRyKSBjaW5mby0+cHJlcDsKKyAgaW50IG51bXJvd3MsIGNpOworICBKRElNRU5TSU9OIGlucm93czsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7CisKKyAgd2hpbGUgKCppbl9yb3dfY3RyIDwgaW5fcm93c19hdmFpbCAmJgorCSAqb3V0X3Jvd19ncm91cF9jdHIgPCBvdXRfcm93X2dyb3Vwc19hdmFpbCkgeworICAgIC8qIERvIGNvbG9yIGNvbnZlcnNpb24gdG8gZmlsbCB0aGUgY29udmVyc2lvbiBidWZmZXIuICovCisgICAgaW5yb3dzID0gaW5fcm93c19hdmFpbCAtICppbl9yb3dfY3RyOworICAgIG51bXJvd3MgPSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgLSBwcmVwLT5uZXh0X2J1Zl9yb3c7CisgICAgbnVtcm93cyA9IChpbnQpIE1JTigoSkRJTUVOU0lPTikgbnVtcm93cywgaW5yb3dzKTsKKyAgICAoKmNpbmZvLT5jY29udmVydC0+Y29sb3JfY29udmVydCkgKGNpbmZvLCBpbnB1dF9idWYgKyAqaW5fcm93X2N0ciwKKwkJCQkgICAgICAgcHJlcC0+Y29sb3JfYnVmLAorCQkJCSAgICAgICAoSkRJTUVOU0lPTikgcHJlcC0+bmV4dF9idWZfcm93LAorCQkJCSAgICAgICBudW1yb3dzKTsKKyAgICAqaW5fcm93X2N0ciArPSBudW1yb3dzOworICAgIHByZXAtPm5leHRfYnVmX3JvdyArPSBudW1yb3dzOworICAgIHByZXAtPnJvd3NfdG9fZ28gLT0gbnVtcm93czsKKyAgICAvKiBJZiBhdCBib3R0b20gb2YgaW1hZ2UsIHBhZCB0byBmaWxsIHRoZSBjb252ZXJzaW9uIGJ1ZmZlci4gKi8KKyAgICBpZiAocHJlcC0+cm93c190b19nbyA9PSAwICYmCisJcHJlcC0+bmV4dF9idWZfcm93IDwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKSB7CisgICAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKKwlleHBhbmRfYm90dG9tX2VkZ2UocHJlcC0+Y29sb3JfYnVmW2NpXSwgY2luZm8tPmltYWdlX3dpZHRoLAorCQkJICAgcHJlcC0+bmV4dF9idWZfcm93LCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpOworICAgICAgfQorICAgICAgcHJlcC0+bmV4dF9idWZfcm93ID0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yOworICAgIH0KKyAgICAvKiBJZiB3ZSd2ZSBmaWxsZWQgdGhlIGNvbnZlcnNpb24gYnVmZmVyLCBlbXB0eSBpdC4gKi8KKyAgICBpZiAocHJlcC0+bmV4dF9idWZfcm93ID09IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcikgeworICAgICAgKCpjaW5mby0+ZG93bnNhbXBsZS0+ZG93bnNhbXBsZSkgKGNpbmZvLAorCQkJCQlwcmVwLT5jb2xvcl9idWYsIChKRElNRU5TSU9OKSAwLAorCQkJCQlvdXRwdXRfYnVmLCAqb3V0X3Jvd19ncm91cF9jdHIpOworICAgICAgcHJlcC0+bmV4dF9idWZfcm93ID0gMDsKKyAgICAgICgqb3V0X3Jvd19ncm91cF9jdHIpKys7CisgICAgfQorICAgIC8qIElmIGF0IGJvdHRvbSBvZiBpbWFnZSwgcGFkIHRoZSBvdXRwdXQgdG8gYSBmdWxsIGlNQ1UgaGVpZ2h0LgorICAgICAqIE5vdGUgd2UgYXNzdW1lIHRoZSBjYWxsZXIgaXMgcHJvdmlkaW5nIGEgb25lLWlNQ1UtaGVpZ2h0IG91dHB1dCBidWZmZXIhCisgICAgICovCisgICAgaWYgKHByZXAtPnJvd3NfdG9fZ28gPT0gMCAmJgorCSpvdXRfcm93X2dyb3VwX2N0ciA8IG91dF9yb3dfZ3JvdXBzX2F2YWlsKSB7CisgICAgICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOworCSAgIGNpKyssIGNvbXBwdHIrKykgeworCWV4cGFuZF9ib3R0b21fZWRnZShvdXRwdXRfYnVmW2NpXSwKKwkJCSAgIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkUsCisJCQkgICAoaW50KSAoKm91dF9yb3dfZ3JvdXBfY3RyICogY29tcHB0ci0+dl9zYW1wX2ZhY3RvciksCisJCQkgICAoaW50KSAob3V0X3Jvd19ncm91cHNfYXZhaWwgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSk7CisgICAgICB9CisgICAgICAqb3V0X3Jvd19ncm91cF9jdHIgPSBvdXRfcm93X2dyb3Vwc19hdmFpbDsKKyAgICAgIGJyZWFrOwkJCS8qIGNhbiBleGl0IG91dGVyIGxvb3Agd2l0aG91dCB0ZXN0ICovCisgICAgfQorICB9Cit9CisKKworI2lmZGVmIENPTlRFWFRfUk9XU19TVVBQT1JURUQKKworLyoKKyAqIFByb2Nlc3Mgc29tZSBkYXRhIGluIHRoZSBjb250ZXh0IGNhc2UuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitwcmVfcHJvY2Vzc19jb250ZXh0IChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJICAgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2N0ciwKKwkJICAgICBKRElNRU5TSU9OIGluX3Jvd3NfYXZhaWwsCisJCSAgICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OICpvdXRfcm93X2dyb3VwX2N0ciwKKwkJICAgICBKRElNRU5TSU9OIG91dF9yb3dfZ3JvdXBzX2F2YWlsKQoreworICBteV9wcmVwX3B0ciBwcmVwID0gKG15X3ByZXBfcHRyKSBjaW5mby0+cHJlcDsKKyAgaW50IG51bXJvd3MsIGNpOworICBpbnQgYnVmX2hlaWdodCA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIDM7CisgIEpESU1FTlNJT04gaW5yb3dzOworCisgIHdoaWxlICgqb3V0X3Jvd19ncm91cF9jdHIgPCBvdXRfcm93X2dyb3Vwc19hdmFpbCkgeworICAgIGlmICgqaW5fcm93X2N0ciA8IGluX3Jvd3NfYXZhaWwpIHsKKyAgICAgIC8qIERvIGNvbG9yIGNvbnZlcnNpb24gdG8gZmlsbCB0aGUgY29udmVyc2lvbiBidWZmZXIuICovCisgICAgICBpbnJvd3MgPSBpbl9yb3dzX2F2YWlsIC0gKmluX3Jvd19jdHI7CisgICAgICBudW1yb3dzID0gcHJlcC0+bmV4dF9idWZfc3RvcCAtIHByZXAtPm5leHRfYnVmX3JvdzsKKyAgICAgIG51bXJvd3MgPSAoaW50KSBNSU4oKEpESU1FTlNJT04pIG51bXJvd3MsIGlucm93cyk7CisgICAgICAoKmNpbmZvLT5jY29udmVydC0+Y29sb3JfY29udmVydCkgKGNpbmZvLCBpbnB1dF9idWYgKyAqaW5fcm93X2N0ciwKKwkJCQkJIHByZXAtPmNvbG9yX2J1ZiwKKwkJCQkJIChKRElNRU5TSU9OKSBwcmVwLT5uZXh0X2J1Zl9yb3csCisJCQkJCSBudW1yb3dzKTsKKyAgICAgIC8qIFBhZCBhdCB0b3Agb2YgaW1hZ2UsIGlmIGZpcnN0IHRpbWUgdGhyb3VnaCAqLworICAgICAgaWYgKHByZXAtPnJvd3NfdG9fZ28gPT0gY2luZm8tPmltYWdlX2hlaWdodCkgeworCWZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgeworCSAgaW50IHJvdzsKKwkgIGZvciAocm93ID0gMTsgcm93IDw9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcjsgcm93KyspIHsKKwkgICAgamNvcHlfc2FtcGxlX3Jvd3MocHJlcC0+Y29sb3JfYnVmW2NpXSwgMCwKKwkJCSAgICAgIHByZXAtPmNvbG9yX2J1ZltjaV0sIC1yb3csCisJCQkgICAgICAxLCBjaW5mby0+aW1hZ2Vfd2lkdGgpOworCSAgfQorCX0KKyAgICAgIH0KKyAgICAgICppbl9yb3dfY3RyICs9IG51bXJvd3M7CisgICAgICBwcmVwLT5uZXh0X2J1Zl9yb3cgKz0gbnVtcm93czsKKyAgICAgIHByZXAtPnJvd3NfdG9fZ28gLT0gbnVtcm93czsKKyAgICB9IGVsc2UgeworICAgICAgLyogUmV0dXJuIGZvciBtb3JlIGRhdGEsIHVubGVzcyB3ZSBhcmUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgaW1hZ2UuICovCisgICAgICBpZiAocHJlcC0+cm93c190b19nbyAhPSAwKQorCWJyZWFrOworICAgICAgLyogV2hlbiBhdCBib3R0b20gb2YgaW1hZ2UsIHBhZCB0byBmaWxsIHRoZSBjb252ZXJzaW9uIGJ1ZmZlci4gKi8KKyAgICAgIGlmIChwcmVwLT5uZXh0X2J1Zl9yb3cgPCBwcmVwLT5uZXh0X2J1Zl9zdG9wKSB7CisJZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKSB7CisJICBleHBhbmRfYm90dG9tX2VkZ2UocHJlcC0+Y29sb3JfYnVmW2NpXSwgY2luZm8tPmltYWdlX3dpZHRoLAorCQkJICAgICBwcmVwLT5uZXh0X2J1Zl9yb3csIHByZXAtPm5leHRfYnVmX3N0b3ApOworCX0KKwlwcmVwLT5uZXh0X2J1Zl9yb3cgPSBwcmVwLT5uZXh0X2J1Zl9zdG9wOworICAgICAgfQorICAgIH0KKyAgICAvKiBJZiB3ZSd2ZSBnb3R0ZW4gZW5vdWdoIGRhdGEsIGRvd25zYW1wbGUgYSByb3cgZ3JvdXAuICovCisgICAgaWYgKHByZXAtPm5leHRfYnVmX3JvdyA9PSBwcmVwLT5uZXh0X2J1Zl9zdG9wKSB7CisgICAgICAoKmNpbmZvLT5kb3duc2FtcGxlLT5kb3duc2FtcGxlKSAoY2luZm8sCisJCQkJCXByZXAtPmNvbG9yX2J1ZiwKKwkJCQkJKEpESU1FTlNJT04pIHByZXAtPnRoaXNfcm93X2dyb3VwLAorCQkJCQlvdXRwdXRfYnVmLCAqb3V0X3Jvd19ncm91cF9jdHIpOworICAgICAgKCpvdXRfcm93X2dyb3VwX2N0cikrKzsKKyAgICAgIC8qIEFkdmFuY2UgcG9pbnRlcnMgd2l0aCB3cmFwYXJvdW5kIGFzIG5lY2Vzc2FyeS4gKi8KKyAgICAgIHByZXAtPnRoaXNfcm93X2dyb3VwICs9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcjsKKyAgICAgIGlmIChwcmVwLT50aGlzX3Jvd19ncm91cCA+PSBidWZfaGVpZ2h0KQorCXByZXAtPnRoaXNfcm93X2dyb3VwID0gMDsKKyAgICAgIGlmIChwcmVwLT5uZXh0X2J1Zl9yb3cgPj0gYnVmX2hlaWdodCkKKwlwcmVwLT5uZXh0X2J1Zl9yb3cgPSAwOworICAgICAgcHJlcC0+bmV4dF9idWZfc3RvcCA9IHByZXAtPm5leHRfYnVmX3JvdyArIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcjsKKyAgICB9CisgIH0KK30KKworCisvKgorICogQ3JlYXRlIHRoZSB3cmFwcGVkLWFyb3VuZCBkb3duc2FtcGxpbmcgaW5wdXQgYnVmZmVyIG5lZWRlZCBmb3IgY29udGV4dCBtb2RlLgorICovCisKK0xPQ0FMKHZvaWQpCitjcmVhdGVfY29udGV4dF9idWZmZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9wcmVwX3B0ciBwcmVwID0gKG15X3ByZXBfcHRyKSBjaW5mby0+cHJlcDsKKyAgaW50IHJncm91cF9oZWlnaHQgPSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7CisgIGludCBjaSwgaTsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7CisgIEpTQU1QQVJSQVkgdHJ1ZV9idWZmZXIsIGZha2VfYnVmZmVyOworCisgIC8qIEdyYWIgZW5vdWdoIHNwYWNlIGZvciBmYWtlIHJvdyBwb2ludGVycyBmb3IgYWxsIHRoZSBjb21wb25lbnRzOworICAgKiB3ZSBuZWVkIGZpdmUgcm93IGdyb3Vwcycgd29ydGggb2YgcG9pbnRlcnMgZm9yIGVhY2ggY29tcG9uZW50LgorICAgKi8KKyAgZmFrZV9idWZmZXIgPSAoSlNBTVBBUlJBWSkKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCShjaW5mby0+bnVtX2NvbXBvbmVudHMgKiA1ICogcmdyb3VwX2hlaWdodCkgKgorCQkJCVNJWkVPRihKU0FNUFJPVykpOworCisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgLyogQWxsb2NhdGUgdGhlIGFjdHVhbCBidWZmZXIgc3BhY2UgKDMgcm93IGdyb3VwcykgZm9yIHRoaXMgY29tcG9uZW50LgorICAgICAqIFdlIG1ha2UgdGhlIGJ1ZmZlciB3aWRlIGVub3VnaCB0byBhbGxvdyB0aGUgZG93bnNhbXBsZXIgdG8gZWRnZS1leHBhbmQKKyAgICAgKiBob3Jpem9udGFsbHkgd2l0aGluIHRoZSBidWZmZXIsIGlmIGl0IHNvIGNob29zZXMuCisgICAgICovCisgICAgdHJ1ZV9idWZmZXIgPSAoKmNpbmZvLT5tZW0tPmFsbG9jX3NhcnJheSkKKyAgICAgICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgKEpESU1FTlNJT04pICgoKGxvbmcpIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkUgKgorCQkgICAgICBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IpIC8gY29tcHB0ci0+aF9zYW1wX2ZhY3RvciksCisgICAgICAgKEpESU1FTlNJT04pICgzICogcmdyb3VwX2hlaWdodCkpOworICAgIC8qIENvcHkgdHJ1ZSBidWZmZXIgcm93IHBvaW50ZXJzIGludG8gdGhlIG1pZGRsZSBvZiB0aGUgZmFrZSByb3cgYXJyYXkgKi8KKyAgICBNRU1DT1BZKGZha2VfYnVmZmVyICsgcmdyb3VwX2hlaWdodCwgdHJ1ZV9idWZmZXIsCisJICAgIDMgKiByZ3JvdXBfaGVpZ2h0ICogU0laRU9GKEpTQU1QUk9XKSk7CisgICAgLyogRmlsbCBpbiB0aGUgYWJvdmUgYW5kIGJlbG93IHdyYXBhcm91bmQgcG9pbnRlcnMgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgcmdyb3VwX2hlaWdodDsgaSsrKSB7CisgICAgICBmYWtlX2J1ZmZlcltpXSA9IHRydWVfYnVmZmVyWzIgKiByZ3JvdXBfaGVpZ2h0ICsgaV07CisgICAgICBmYWtlX2J1ZmZlcls0ICogcmdyb3VwX2hlaWdodCArIGldID0gdHJ1ZV9idWZmZXJbaV07CisgICAgfQorICAgIHByZXAtPmNvbG9yX2J1ZltjaV0gPSBmYWtlX2J1ZmZlciArIHJncm91cF9oZWlnaHQ7CisgICAgZmFrZV9idWZmZXIgKz0gNSAqIHJncm91cF9oZWlnaHQ7IC8qIHBvaW50IHRvIHNwYWNlIGZvciBuZXh0IGNvbXBvbmVudCAqLworICB9Cit9CisKKyNlbmRpZiAvKiBDT05URVhUX1JPV1NfU1VQUE9SVEVEICovCisKKworLyoKKyAqIEluaXRpYWxpemUgcHJlcHJvY2Vzc2luZyBjb250cm9sbGVyLgorICovCisKK0dMT0JBTCh2b2lkKQoramluaXRfY19wcmVwX2NvbnRyb2xsZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpCit7CisgIG15X3ByZXBfcHRyIHByZXA7CisgIGludCBjaTsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7CisKKyAgaWYgKG5lZWRfZnVsbF9idWZmZXIpCQkvKiBzYWZldHkgY2hlY2sgKi8KKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7CisKKyAgcHJlcCA9IChteV9wcmVwX3B0cikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCVNJWkVPRihteV9wcmVwX2NvbnRyb2xsZXIpKTsKKyAgY2luZm8tPnByZXAgPSAoc3RydWN0IGpwZWdfY19wcmVwX2NvbnRyb2xsZXIgKikgcHJlcDsKKyAgcHJlcC0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX3ByZXA7CisKKyAgLyogQWxsb2NhdGUgdGhlIGNvbG9yIGNvbnZlcnNpb24gYnVmZmVyLgorICAgKiBXZSBtYWtlIHRoZSBidWZmZXIgd2lkZSBlbm91Z2ggdG8gYWxsb3cgdGhlIGRvd25zYW1wbGVyIHRvIGVkZ2UtZXhwYW5kCisgICAqIGhvcml6b250YWxseSB3aXRoaW4gdGhlIGJ1ZmZlciwgaWYgaXQgc28gY2hvb3Nlcy4KKyAgICovCisgIGlmIChjaW5mby0+ZG93bnNhbXBsZS0+bmVlZF9jb250ZXh0X3Jvd3MpIHsKKyAgICAvKiBTZXQgdXAgdG8gcHJvdmlkZSBjb250ZXh0IHJvd3MgKi8KKyNpZmRlZiBDT05URVhUX1JPV1NfU1VQUE9SVEVECisgICAgcHJlcC0+cHViLnByZV9wcm9jZXNzX2RhdGEgPSBwcmVfcHJvY2Vzc19jb250ZXh0OworICAgIGNyZWF0ZV9jb250ZXh0X2J1ZmZlcihjaW5mbyk7CisjZWxzZQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsKKyNlbmRpZgorICB9IGVsc2UgeworICAgIC8qIE5vIGNvbnRleHQsIGp1c3QgbWFrZSBpdCB0YWxsIGVub3VnaCBmb3Igb25lIHJvdyBncm91cCAqLworICAgIHByZXAtPnB1Yi5wcmVfcHJvY2Vzc19kYXRhID0gcHJlX3Byb2Nlc3NfZGF0YTsKKyAgICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOworCSBjaSsrLCBjb21wcHRyKyspIHsKKyAgICAgIHByZXAtPmNvbG9yX2J1ZltjaV0gPSAoKmNpbmZvLT5tZW0tPmFsbG9jX3NhcnJheSkKKwkoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCSAoSkRJTUVOU0lPTikgKCgobG9uZykgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRSAqCisJCQljaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IpIC8gY29tcHB0ci0+aF9zYW1wX2ZhY3RvciksCisJIChKRElNRU5TSU9OKSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpOworICAgIH0KKyAgfQorfQorCisjZW5kaWYgLy9fRlhfSlBFR19UVVJCT18KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pjc2FtcGxlLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY3NhbXBsZS5jCmluZGV4IDcyNTZiZDcuLjVlMWU4MjggMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pjc2FtcGxlLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamNzYW1wbGUuYwpAQCAtMSw1MjIgKzEsNTIyIEBACi0jaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQ0KLS8qDQotICogamNzYW1wbGUuYw0KLSAqDQotICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTYsIFRob21hcyBHLiBMYW5lLg0KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuDQotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLg0KLSAqDQotICogVGhpcyBmaWxlIGNvbnRhaW5zIGRvd25zYW1wbGluZyByb3V0aW5lcy4NCi0gKg0KLSAqIERvd25zYW1wbGluZyBpbnB1dCBkYXRhIGlzIGNvdW50ZWQgaW4gInJvdyBncm91cHMiLiAgQSByb3cgZ3JvdXANCi0gKiBpcyBkZWZpbmVkIHRvIGJlIG1heF92X3NhbXBfZmFjdG9yIHBpeGVsIHJvd3Mgb2YgZWFjaCBjb21wb25lbnQsDQotICogZnJvbSB3aGljaCB0aGUgZG93bnNhbXBsZXIgcHJvZHVjZXMgdl9zYW1wX2ZhY3RvciBzYW1wbGUgcm93cy4NCi0gKiBBIHNpbmdsZSByb3cgZ3JvdXAgaXMgcHJvY2Vzc2VkIGluIGVhY2ggY2FsbCB0byB0aGUgZG93bnNhbXBsZXIgbW9kdWxlLg0KLSAqDQotICogVGhlIGRvd25zYW1wbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBlZGdlLWV4cGFuc2lvbiBvZiBpdHMgb3V0cHV0IGRhdGENCi0gKiB0byBmaWxsIGFuIGludGVncmFsIG51bWJlciBvZiBEQ1QgYmxvY2tzIGhvcml6b250YWxseS4gIFRoZSBzb3VyY2UgYnVmZmVyDQotICogbWF5IGJlIG1vZGlmaWVkIGlmIGl0IGlzIGhlbHBmdWwgZm9yIHRoaXMgcHVycG9zZSAodGhlIHNvdXJjZSBidWZmZXIgaXMNCi0gKiBhbGxvY2F0ZWQgd2lkZSBlbm91Z2ggdG8gY29ycmVzcG9uZCB0byB0aGUgZGVzaXJlZCBvdXRwdXQgd2lkdGgpLg0KLSAqIFRoZSBjYWxsZXIgKHRoZSBwcmVwIGNvbnRyb2xsZXIpIGlzIHJlc3BvbnNpYmxlIGZvciB2ZXJ0aWNhbCBwYWRkaW5nLg0KLSAqDQotICogVGhlIGRvd25zYW1wbGVyIG1heSByZXF1ZXN0ICJjb250ZXh0IHJvd3MiIGJ5IHNldHRpbmcgbmVlZF9jb250ZXh0X3Jvd3MNCi0gKiBkdXJpbmcgc3RhcnR1cC4gIEluIHRoaXMgY2FzZSwgdGhlIGlucHV0IGFycmF5cyB3aWxsIGNvbnRhaW4gYXQgbGVhc3QNCi0gKiBvbmUgcm93IGdyb3VwJ3Mgd29ydGggb2YgcGl4ZWxzIGFib3ZlIGFuZCBiZWxvdyB0aGUgcGFzc2VkLWluIGRhdGE7DQotICogdGhlIGNhbGxlciB3aWxsIGNyZWF0ZSBkdW1teSByb3dzIGF0IGltYWdlIHRvcCBhbmQgYm90dG9tIGJ5IHJlcGxpY2F0aW5nDQotICogdGhlIGZpcnN0IG9yIGxhc3QgcmVhbCBwaXhlbCByb3cuDQotICoNCi0gKiBBbiBleGNlbGxlbnQgcmVmZXJlbmNlIGZvciBpbWFnZSByZXNhbXBsaW5nIGlzDQotICogICBEaWdpdGFsIEltYWdlIFdhcnBpbmcsIEdlb3JnZSBXb2xiZXJnLCAxOTkwLg0KLSAqICAgUHViLiBieSBJRUVFIENvbXB1dGVyIFNvY2lldHkgUHJlc3MsIExvcyBBbGFtaXRvcywgQ0EuIElTQk4gMC04MTg2LTg5NDQtNy4NCi0gKg0KLSAqIFRoZSBkb3duc2FtcGxpbmcgYWxnb3JpdGhtIHVzZWQgaGVyZSBpcyBhIHNpbXBsZSBhdmVyYWdlIG9mIHRoZSBzb3VyY2UNCi0gKiBwaXhlbHMgY292ZXJlZCBieSB0aGUgb3V0cHV0IHBpeGVsLiAgVGhlIGhpLWZhbHV0aW4gc2FtcGxpbmcgbGl0ZXJhdHVyZQ0KLSAqIHJlZmVycyB0byB0aGlzIGFzIGEgImJveCBmaWx0ZXIiLiAgSW4gZ2VuZXJhbCB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIGEgYm94DQotICogZmlsdGVyIGFyZSBub3QgdmVyeSBnb29kLCBidXQgZm9yIHRoZSBzcGVjaWZpYyBjYXNlcyB3ZSBub3JtYWxseSB1c2UgKDE6MQ0KLSAqIGFuZCAyOjEgcmF0aW9zKSB0aGUgYm94IGlzIGVxdWl2YWxlbnQgdG8gYSAidHJpYW5nbGUgZmlsdGVyIiB3aGljaCBpcyBub3QNCi0gKiBuZWFybHkgc28gYmFkLiAgSWYgeW91IGludGVuZCB0byB1c2Ugb3RoZXIgc2FtcGxpbmcgcmF0aW9zLCB5b3UnZCBiZSB3ZWxsDQotICogYWR2aXNlZCB0byBpbXByb3ZlIHRoaXMgY29kZS4NCi0gKg0KLSAqIEEgc2ltcGxlIGlucHV0LXNtb290aGluZyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkLiAgVGhpcyBpcyBtYWlubHkgaW50ZW5kZWQNCi0gKiBmb3IgY2xlYW5pbmcgdXAgY29sb3ItZGl0aGVyZWQgR0lGIGlucHV0IGZpbGVzIChpZiB5b3UgZmluZCBpdCBpbmFkZXF1YXRlLA0KLSAqIHdlIHN1Z2dlc3QgdXNpbmcgYW4gZXh0ZXJuYWwgZmlsdGVyaW5nIHByb2dyYW0gc3VjaCBhcyBwbm1jb252b2wpLiAgV2hlbg0KLSAqIGVuYWJsZWQsIGVhY2ggaW5wdXQgcGl4ZWwgUCBpcyByZXBsYWNlZCBieSBhIHdlaWdodGVkIHN1bSBvZiBpdHNlbGYgYW5kIGl0cw0KLSAqIGVpZ2h0IG5laWdoYm9ycy4gIFAncyB3ZWlnaHQgaXMgMS04KlNGIGFuZCBlYWNoIG5laWdoYm9yJ3Mgd2VpZ2h0IGlzIFNGLA0KLSAqIHdoZXJlIFNGID0gKHNtb290aGluZ19mYWN0b3IgLyAxMDI0KS4NCi0gKiBDdXJyZW50bHksIHNtb290aGluZyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgMmgydiBzYW1wbGluZyBmYWN0b3JzLg0KLSAqLw0KLQ0KLSNkZWZpbmUgSlBFR19JTlRFUk5BTFMNCi0jaW5jbHVkZSAiamluY2x1ZGUuaCINCi0jaW5jbHVkZSAianBlZ2xpYi5oIg0KLQ0KLQ0KLS8qIFBvaW50ZXIgdG8gcm91dGluZSB0byBkb3duc2FtcGxlIGEgc2luZ2xlIGNvbXBvbmVudCAqLw0KLXR5cGVkZWYgSk1FVEhPRCh2b2lkLCBkb3duc2FtcGxlMV9wdHIsDQotCQkoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLA0KLQkJIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkpOw0KLQ0KLS8qIFByaXZhdGUgc3Vib2JqZWN0ICovDQotDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgc3RydWN0IGpwZWdfZG93bnNhbXBsZXIgcHViOwkvKiBwdWJsaWMgZmllbGRzICovDQotDQotICAvKiBEb3duc2FtcGxpbmcgbWV0aG9kIHBvaW50ZXJzLCBvbmUgcGVyIGNvbXBvbmVudCAqLw0KLSAgZG93bnNhbXBsZTFfcHRyIG1ldGhvZHNbTUFYX0NPTVBPTkVOVFNdOw0KLX0gbXlfZG93bnNhbXBsZXI7DQotDQotdHlwZWRlZiBteV9kb3duc2FtcGxlciAqIG15X2Rvd25zYW1wbGVfcHRyOw0KLQ0KLQ0KLS8qDQotICogSW5pdGlhbGl6ZSBmb3IgYSBkb3duc2FtcGxpbmcgcGFzcy4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1zdGFydF9wYXNzX2Rvd25zYW1wbGUgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIC8qIG5vIHdvcmsgZm9yIG5vdyAqLw0KLX0NCi0NCi0NCi0vKg0KLSAqIEV4cGFuZCBhIGNvbXBvbmVudCBob3Jpem9udGFsbHkgZnJvbSB3aWR0aCBpbnB1dF9jb2xzIHRvIHdpZHRoIG91dHB1dF9jb2xzLA0KLSAqIGJ5IGR1cGxpY2F0aW5nIHRoZSByaWdodG1vc3Qgc2FtcGxlcy4NCi0gKi8NCi0NCi1MT0NBTCh2b2lkKQ0KLWV4cGFuZF9yaWdodF9lZGdlIChKU0FNUEFSUkFZIGltYWdlX2RhdGEsIGludCBudW1fcm93cywNCi0JCSAgIEpESU1FTlNJT04gaW5wdXRfY29scywgSkRJTUVOU0lPTiBvdXRwdXRfY29scykNCi17DQotICByZWdpc3RlciBKU0FNUFJPVyBwdHI7DQotICByZWdpc3RlciBKU0FNUExFIHBpeHZhbDsNCi0gIHJlZ2lzdGVyIGludCBjb3VudDsNCi0gIGludCByb3c7DQotICBpbnQgbnVtY29scyA9IChpbnQpIChvdXRwdXRfY29scyAtIGlucHV0X2NvbHMpOw0KLQ0KLSAgaWYgKG51bWNvbHMgPiAwKSB7DQotICAgIGZvciAocm93ID0gMDsgcm93IDwgbnVtX3Jvd3M7IHJvdysrKSB7DQotICAgICAgcHRyID0gaW1hZ2VfZGF0YVtyb3ddICsgaW5wdXRfY29sczsNCi0gICAgICBwaXh2YWwgPSBwdHJbLTFdOwkJLyogZG9uJ3QgbmVlZCBHRVRKU0FNUExFKCkgaGVyZSAqLw0KLSAgICAgIGZvciAoY291bnQgPSBudW1jb2xzOyBjb3VudCA+IDA7IGNvdW50LS0pDQotCSpwdHIrKyA9IHBpeHZhbDsNCi0gICAgfQ0KLSAgfQ0KLX0NCi0NCi0NCi0vKg0KLSAqIERvIGRvd25zYW1wbGluZyBmb3IgYSB3aG9sZSByb3cgZ3JvdXAgKGFsbCBjb21wb25lbnRzKS4NCi0gKg0KLSAqIEluIHRoaXMgdmVyc2lvbiB3ZSBzaW1wbHkgZG93bnNhbXBsZSBlYWNoIGNvbXBvbmVudCBpbmRlcGVuZGVudGx5Lg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXNlcF9kb3duc2FtcGxlIChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCUpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19pbmRleCwNCi0JCUpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRfcm93X2dyb3VwX2luZGV4KQ0KLXsNCi0gIG15X2Rvd25zYW1wbGVfcHRyIGRvd25zYW1wbGUgPSAobXlfZG93bnNhbXBsZV9wdHIpIGNpbmZvLT5kb3duc2FtcGxlOw0KLSAgaW50IGNpOw0KLSAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7DQotICBKU0FNUEFSUkFZIGluX3B0ciwgb3V0X3B0cjsNCi0NCi0gIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7DQotICAgICAgIGNpKyssIGNvbXBwdHIrKykgew0KLSAgICBpbl9wdHIgPSBpbnB1dF9idWZbY2ldICsgaW5fcm93X2luZGV4Ow0KLSAgICBvdXRfcHRyID0gb3V0cHV0X2J1ZltjaV0gKyAob3V0X3Jvd19ncm91cF9pbmRleCAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpOw0KLSAgICAoKmRvd25zYW1wbGUtPm1ldGhvZHNbY2ldKSAoY2luZm8sIGNvbXBwdHIsIGluX3B0ciwgb3V0X3B0cik7DQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogRG93bnNhbXBsZSBwaXhlbCB2YWx1ZXMgb2YgYSBzaW5nbGUgY29tcG9uZW50Lg0KLSAqIE9uZSByb3cgZ3JvdXAgaXMgcHJvY2Vzc2VkIHBlciBjYWxsLg0KLSAqIFRoaXMgdmVyc2lvbiBoYW5kbGVzIGFyYml0cmFyeSBpbnRlZ3JhbCBzYW1wbGluZyByYXRpb3MsIHdpdGhvdXQgc21vb3RoaW5nLg0KLSAqIE5vdGUgdGhhdCB0aGlzIHZlcnNpb24gaXMgbm90IGFjdHVhbGx5IHVzZWQgZm9yIGN1c3RvbWFyeSBzYW1wbGluZyByYXRpb3MuDQotICovDQotDQotTUVUSE9EREVGKHZvaWQpDQotaW50X2Rvd25zYW1wbGUgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwNCi0JCUpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkNCi17DQotICBpbnQgaW5yb3csIG91dHJvdywgaF9leHBhbmQsIHZfZXhwYW5kLCBudW1waXgsIG51bXBpeDIsIGgsIHY7DQotICBKRElNRU5TSU9OIG91dGNvbCwgb3V0Y29sX2g7CS8qIG91dGNvbF9oID09IG91dGNvbCpoX2V4cGFuZCAqLw0KLSAgSkRJTUVOU0lPTiBvdXRwdXRfY29scyA9IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkU7DQotICBKU0FNUFJPVyBpbnB0ciwgb3V0cHRyOw0KLSAgSU5UMzIgb3V0dmFsdWU7DQotDQotICBoX2V4cGFuZCA9IGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAvIGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7DQotICB2X2V4cGFuZCA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAvIGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7DQotICBudW1waXggPSBoX2V4cGFuZCAqIHZfZXhwYW5kOw0KLSAgbnVtcGl4MiA9IG51bXBpeC8yOw0KLQ0KLSAgLyogRXhwYW5kIGlucHV0IGRhdGEgZW5vdWdoIHRvIGxldCBhbGwgdGhlIG91dHB1dCBzYW1wbGVzIGJlIGdlbmVyYXRlZA0KLSAgICogYnkgdGhlIHN0YW5kYXJkIGxvb3AuICBTcGVjaWFsLWNhc2luZyBwYWRkZWQgb3V0cHV0IHdvdWxkIGJlIG1vcmUNCi0gICAqIGVmZmljaWVudC4NCi0gICAqLw0KLSAgZXhwYW5kX3JpZ2h0X2VkZ2UoaW5wdXRfZGF0YSwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLA0KLQkJICAgIGNpbmZvLT5pbWFnZV93aWR0aCwgb3V0cHV0X2NvbHMgKiBoX2V4cGFuZCk7DQotDQotICBpbnJvdyA9IDA7DQotICBmb3IgKG91dHJvdyA9IDA7IG91dHJvdyA8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IG91dHJvdysrKSB7DQotICAgIG91dHB0ciA9IG91dHB1dF9kYXRhW291dHJvd107DQotICAgIGZvciAob3V0Y29sID0gMCwgb3V0Y29sX2ggPSAwOyBvdXRjb2wgPCBvdXRwdXRfY29sczsNCi0JIG91dGNvbCsrLCBvdXRjb2xfaCArPSBoX2V4cGFuZCkgew0KLSAgICAgIG91dHZhbHVlID0gMDsNCi0gICAgICBmb3IgKHYgPSAwOyB2IDwgdl9leHBhbmQ7IHYrKykgew0KLQlpbnB0ciA9IGlucHV0X2RhdGFbaW5yb3crdl0gKyBvdXRjb2xfaDsNCi0JZm9yIChoID0gMDsgaCA8IGhfZXhwYW5kOyBoKyspIHsNCi0JICBvdXR2YWx1ZSArPSAoSU5UMzIpIEdFVEpTQU1QTEUoKmlucHRyKyspOw0KLQl9DQotICAgICAgfQ0KLSAgICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSAoKG91dHZhbHVlICsgbnVtcGl4MikgLyBudW1waXgpOw0KLSAgICB9DQotICAgIGlucm93ICs9IHZfZXhwYW5kOw0KLSAgfQ0KLX0NCi0NCi0NCi0vKg0KLSAqIERvd25zYW1wbGUgcGl4ZWwgdmFsdWVzIG9mIGEgc2luZ2xlIGNvbXBvbmVudC4NCi0gKiBUaGlzIHZlcnNpb24gaGFuZGxlcyB0aGUgc3BlY2lhbCBjYXNlIG9mIGEgZnVsbC1zaXplIGNvbXBvbmVudCwNCi0gKiB3aXRob3V0IHNtb290aGluZy4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1mdWxsc2l6ZV9kb3duc2FtcGxlIChqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsDQotCQkgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkNCi17DQotICAvKiBDb3B5IHRoZSBkYXRhICovDQotICBqY29weV9zYW1wbGVfcm93cyhpbnB1dF9kYXRhLCAwLCBvdXRwdXRfZGF0YSwgMCwNCi0JCSAgICBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsIGNpbmZvLT5pbWFnZV93aWR0aCk7DQotICAvKiBFZGdlLWV4cGFuZCAqLw0KLSAgZXhwYW5kX3JpZ2h0X2VkZ2Uob3V0cHV0X2RhdGEsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwNCi0JCSAgICBjaW5mby0+aW1hZ2Vfd2lkdGgsIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkUpOw0KLX0NCi0NCi0NCi0vKg0KLSAqIERvd25zYW1wbGUgcGl4ZWwgdmFsdWVzIG9mIGEgc2luZ2xlIGNvbXBvbmVudC4NCi0gKiBUaGlzIHZlcnNpb24gaGFuZGxlcyB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbCwNCi0gKiB3aXRob3V0IHNtb290aGluZy4NCi0gKg0KLSAqIEEgbm90ZSBhYm91dCB0aGUgImJpYXMiIGNhbGN1bGF0aW9uczogd2hlbiByb3VuZGluZyBmcmFjdGlvbmFsIHZhbHVlcyB0bw0KLSAqIGludGVnZXIsIHdlIGRvIG5vdCB3YW50IHRvIGFsd2F5cyByb3VuZCAwLjUgdXAgdG8gdGhlIG5leHQgaW50ZWdlci4NCi0gKiBJZiB3ZSBkaWQgdGhhdCwgd2UnZCBpbnRyb2R1Y2UgYSBub3RpY2VhYmxlIGJpYXMgdG93YXJkcyBsYXJnZXIgdmFsdWVzLg0KLSAqIEluc3RlYWQsIHRoaXMgY29kZSBpcyBhcnJhbmdlZCBzbyB0aGF0IDAuNSB3aWxsIGJlIHJvdW5kZWQgdXAgb3IgZG93biBhdA0KLSAqIGFsdGVybmF0ZSBwaXhlbCBsb2NhdGlvbnMgKGEgc2ltcGxlIG9yZGVyZWQgZGl0aGVyIHBhdHRlcm4pLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLWgydjFfZG93bnNhbXBsZSAoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLA0KLQkJIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkNCi17DQotICBpbnQgb3V0cm93Ow0KLSAgSkRJTUVOU0lPTiBvdXRjb2w7DQotICBKRElNRU5TSU9OIG91dHB1dF9jb2xzID0gY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRTsNCi0gIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyLCBvdXRwdHI7DQotICByZWdpc3RlciBpbnQgYmlhczsNCi0NCi0gIC8qIEV4cGFuZCBpbnB1dCBkYXRhIGVub3VnaCB0byBsZXQgYWxsIHRoZSBvdXRwdXQgc2FtcGxlcyBiZSBnZW5lcmF0ZWQNCi0gICAqIGJ5IHRoZSBzdGFuZGFyZCBsb29wLiAgU3BlY2lhbC1jYXNpbmcgcGFkZGVkIG91dHB1dCB3b3VsZCBiZSBtb3JlDQotICAgKiBlZmZpY2llbnQuDQotICAgKi8NCi0gIGV4cGFuZF9yaWdodF9lZGdlKGlucHV0X2RhdGEsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwNCi0JCSAgICBjaW5mby0+aW1hZ2Vfd2lkdGgsIG91dHB1dF9jb2xzICogMik7DQotDQotICBmb3IgKG91dHJvdyA9IDA7IG91dHJvdyA8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IG91dHJvdysrKSB7DQotICAgIG91dHB0ciA9IG91dHB1dF9kYXRhW291dHJvd107DQotICAgIGlucHRyID0gaW5wdXRfZGF0YVtvdXRyb3ddOw0KLSAgICBiaWFzID0gMDsJCQkvKiBiaWFzID0gMCwxLDAsMSwuLi4gZm9yIHN1Y2Nlc3NpdmUgc2FtcGxlcyAqLw0KLSAgICBmb3IgKG91dGNvbCA9IDA7IG91dGNvbCA8IG91dHB1dF9jb2xzOyBvdXRjb2wrKykgew0KLSAgICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSAoKEdFVEpTQU1QTEUoKmlucHRyKSArIEdFVEpTQU1QTEUoaW5wdHJbMV0pDQotCQkJICAgICAgKyBiaWFzKSA+PiAxKTsNCi0gICAgICBiaWFzIF49IDE7CQkvKiAwPT4xLCAxPT4wICovDQotICAgICAgaW5wdHIgKz0gMjsNCi0gICAgfQ0KLSAgfQ0KLX0NCi0NCi0NCi0vKg0KLSAqIERvd25zYW1wbGUgcGl4ZWwgdmFsdWVzIG9mIGEgc2luZ2xlIGNvbXBvbmVudC4NCi0gKiBUaGlzIHZlcnNpb24gaGFuZGxlcyB0aGUgc3RhbmRhcmQgY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMjoxIHZlcnRpY2FsLA0KLSAqIHdpdGhvdXQgc21vb3RoaW5nLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLWgydjJfZG93bnNhbXBsZSAoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLA0KLQkJIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkNCi17DQotICBpbnQgaW5yb3csIG91dHJvdzsNCi0gIEpESU1FTlNJT04gb3V0Y29sOw0KLSAgSkRJTUVOU0lPTiBvdXRwdXRfY29scyA9IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkU7DQotICByZWdpc3RlciBKU0FNUFJPVyBpbnB0cjAsIGlucHRyMSwgb3V0cHRyOw0KLSAgcmVnaXN0ZXIgaW50IGJpYXM7DQotDQotICAvKiBFeHBhbmQgaW5wdXQgZGF0YSBlbm91Z2ggdG8gbGV0IGFsbCB0aGUgb3V0cHV0IHNhbXBsZXMgYmUgZ2VuZXJhdGVkDQotICAgKiBieSB0aGUgc3RhbmRhcmQgbG9vcC4gIFNwZWNpYWwtY2FzaW5nIHBhZGRlZCBvdXRwdXQgd291bGQgYmUgbW9yZQ0KLSAgICogZWZmaWNpZW50Lg0KLSAgICovDQotICBleHBhbmRfcmlnaHRfZWRnZShpbnB1dF9kYXRhLCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsDQotCQkgICAgY2luZm8tPmltYWdlX3dpZHRoLCBvdXRwdXRfY29scyAqIDIpOw0KLQ0KLSAgaW5yb3cgPSAwOw0KLSAgZm9yIChvdXRyb3cgPSAwOyBvdXRyb3cgPCBjb21wcHRyLT52X3NhbXBfZmFjdG9yOyBvdXRyb3crKykgew0KLSAgICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtvdXRyb3ddOw0KLSAgICBpbnB0cjAgPSBpbnB1dF9kYXRhW2lucm93XTsNCi0gICAgaW5wdHIxID0gaW5wdXRfZGF0YVtpbnJvdysxXTsNCi0gICAgYmlhcyA9IDE7CQkJLyogYmlhcyA9IDEsMiwxLDIsLi4uIGZvciBzdWNjZXNzaXZlIHNhbXBsZXMgKi8NCi0gICAgZm9yIChvdXRjb2wgPSAwOyBvdXRjb2wgPCBvdXRwdXRfY29sczsgb3V0Y29sKyspIHsNCi0gICAgICAqb3V0cHRyKysgPSAoSlNBTVBMRSkgKChHRVRKU0FNUExFKCppbnB0cjApICsgR0VUSlNBTVBMRShpbnB0cjBbMV0pICsNCi0JCQkgICAgICBHRVRKU0FNUExFKCppbnB0cjEpICsgR0VUSlNBTVBMRShpbnB0cjFbMV0pDQotCQkJICAgICAgKyBiaWFzKSA+PiAyKTsNCi0gICAgICBiaWFzIF49IDM7CQkvKiAxPT4yLCAyPT4xICovDQotICAgICAgaW5wdHIwICs9IDI7IGlucHRyMSArPSAyOw0KLSAgICB9DQotICAgIGlucm93ICs9IDI7DQotICB9DQotfQ0KLQ0KLQ0KLSNpZmRlZiBJTlBVVF9TTU9PVEhJTkdfU1VQUE9SVEVEDQotDQotLyoNCi0gKiBEb3duc2FtcGxlIHBpeGVsIHZhbHVlcyBvZiBhIHNpbmdsZSBjb21wb25lbnQuDQotICogVGhpcyB2ZXJzaW9uIGhhbmRsZXMgdGhlIHN0YW5kYXJkIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbCwNCi0gKiB3aXRoIHNtb290aGluZy4gIE9uZSByb3cgb2YgY29udGV4dCBpcyByZXF1aXJlZC4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1oMnYyX3Ntb290aF9kb3duc2FtcGxlIChqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsDQotCQkJSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKQ0KLXsNCi0gIGludCBpbnJvdywgb3V0cm93Ow0KLSAgSkRJTUVOU0lPTiBjb2xjdHI7DQotICBKRElNRU5TSU9OIG91dHB1dF9jb2xzID0gY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRTsNCi0gIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyMCwgaW5wdHIxLCBhYm92ZV9wdHIsIGJlbG93X3B0ciwgb3V0cHRyOw0KLSAgSU5UMzIgbWVtYmVyc3VtLCBuZWlnaHN1bSwgbWVtYmVyc2NhbGUsIG5laWdoc2NhbGU7DQotDQotICAvKiBFeHBhbmQgaW5wdXQgZGF0YSBlbm91Z2ggdG8gbGV0IGFsbCB0aGUgb3V0cHV0IHNhbXBsZXMgYmUgZ2VuZXJhdGVkDQotICAgKiBieSB0aGUgc3RhbmRhcmQgbG9vcC4gIFNwZWNpYWwtY2FzaW5nIHBhZGRlZCBvdXRwdXQgd291bGQgYmUgbW9yZQ0KLSAgICogZWZmaWNpZW50Lg0KLSAgICovDQotICBleHBhbmRfcmlnaHRfZWRnZShpbnB1dF9kYXRhIC0gMSwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICsgMiwNCi0JCSAgICBjaW5mby0+aW1hZ2Vfd2lkdGgsIG91dHB1dF9jb2xzICogMik7DQotDQotICAvKiBXZSBkb24ndCBib3RoZXIgdG8gZm9ybSB0aGUgaW5kaXZpZHVhbCAic21vb3RoZWQiIGlucHV0IHBpeGVsIHZhbHVlczsNCi0gICAqIHdlIGNhbiBkaXJlY3RseSBjb21wdXRlIHRoZSBvdXRwdXQgd2hpY2ggaXMgdGhlIGF2ZXJhZ2Ugb2YgdGhlIGZvdXINCi0gICAqIHNtb290aGVkIHZhbHVlcy4gIEVhY2ggb2YgdGhlIGZvdXIgbWVtYmVyIHBpeGVscyBjb250cmlidXRlcyBhIGZyYWN0aW9uDQotICAgKiAoMS04KlNGKSB0byBpdHMgb3duIHNtb290aGVkIGltYWdlIGFuZCBhIGZyYWN0aW9uIFNGIHRvIGVhY2ggb2YgdGhlIHRocmVlDQotICAgKiBvdGhlciBzbW9vdGhlZCBwaXhlbHMsIHRoZXJlZm9yZSBhIHRvdGFsIGZyYWN0aW9uICgxLTUqU0YpLzQgdG8gdGhlIGZpbmFsDQotICAgKiBvdXRwdXQuICBUaGUgZm91ciBjb3JuZXItYWRqYWNlbnQgbmVpZ2hib3IgcGl4ZWxzIGNvbnRyaWJ1dGUgYSBmcmFjdGlvbg0KLSAgICogU0YgdG8ganVzdCBvbmUgc21vb3RoZWQgcGl4ZWwsIG9yIFNGLzQgdG8gdGhlIGZpbmFsIG91dHB1dDsgd2hpbGUgdGhlDQotICAgKiBlaWdodCBlZGdlLWFkamFjZW50IG5laWdoYm9ycyBjb250cmlidXRlIFNGIHRvIGVhY2ggb2YgdHdvIHNtb290aGVkDQotICAgKiBwaXhlbHMsIG9yIFNGLzIgb3ZlcmFsbC4gIEluIG9yZGVyIHRvIHVzZSBpbnRlZ2VyIGFyaXRobWV0aWMsIHRoZXNlDQotICAgKiBmYWN0b3JzIGFyZSBzY2FsZWQgYnkgMl4xNiA9IDY1NTM2Lg0KLSAgICogQWxzbyByZWNhbGwgdGhhdCBTRiA9IHNtb290aGluZ19mYWN0b3IgLyAxMDI0Lg0KLSAgICovDQotDQotICBtZW1iZXJzY2FsZSA9IDE2Mzg0IC0gY2luZm8tPnNtb290aGluZ19mYWN0b3IgKiA4MDsgLyogc2NhbGVkICgxLTUqU0YpLzQgKi8NCi0gIG5laWdoc2NhbGUgPSBjaW5mby0+c21vb3RoaW5nX2ZhY3RvciAqIDE2OyAvKiBzY2FsZWQgU0YvNCAqLw0KLQ0KLSAgaW5yb3cgPSAwOw0KLSAgZm9yIChvdXRyb3cgPSAwOyBvdXRyb3cgPCBjb21wcHRyLT52X3NhbXBfZmFjdG9yOyBvdXRyb3crKykgew0KLSAgICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtvdXRyb3ddOw0KLSAgICBpbnB0cjAgPSBpbnB1dF9kYXRhW2lucm93XTsNCi0gICAgaW5wdHIxID0gaW5wdXRfZGF0YVtpbnJvdysxXTsNCi0gICAgYWJvdmVfcHRyID0gaW5wdXRfZGF0YVtpbnJvdy0xXTsNCi0gICAgYmVsb3dfcHRyID0gaW5wdXRfZGF0YVtpbnJvdysyXTsNCi0NCi0gICAgLyogU3BlY2lhbCBjYXNlIGZvciBmaXJzdCBjb2x1bW46IHByZXRlbmQgY29sdW1uIC0xIGlzIHNhbWUgYXMgY29sdW1uIDAgKi8NCi0gICAgbWVtYmVyc3VtID0gR0VUSlNBTVBMRSgqaW5wdHIwKSArIEdFVEpTQU1QTEUoaW5wdHIwWzFdKSArDQotCQlHRVRKU0FNUExFKCppbnB0cjEpICsgR0VUSlNBTVBMRShpbnB0cjFbMV0pOw0KLSAgICBuZWlnaHN1bSA9IEdFVEpTQU1QTEUoKmFib3ZlX3B0cikgKyBHRVRKU0FNUExFKGFib3ZlX3B0clsxXSkgKw0KLQkgICAgICAgR0VUSlNBTVBMRSgqYmVsb3dfcHRyKSArIEdFVEpTQU1QTEUoYmVsb3dfcHRyWzFdKSArDQotCSAgICAgICBHRVRKU0FNUExFKCppbnB0cjApICsgR0VUSlNBTVBMRShpbnB0cjBbMl0pICsNCi0JICAgICAgIEdFVEpTQU1QTEUoKmlucHRyMSkgKyBHRVRKU0FNUExFKGlucHRyMVsyXSk7DQotICAgIG5laWdoc3VtICs9IG5laWdoc3VtOw0KLSAgICBuZWlnaHN1bSArPSBHRVRKU0FNUExFKCphYm92ZV9wdHIpICsgR0VUSlNBTVBMRShhYm92ZV9wdHJbMl0pICsNCi0JCUdFVEpTQU1QTEUoKmJlbG93X3B0cikgKyBHRVRKU0FNUExFKGJlbG93X3B0clsyXSk7DQotICAgIG1lbWJlcnN1bSA9IG1lbWJlcnN1bSAqIG1lbWJlcnNjYWxlICsgbmVpZ2hzdW0gKiBuZWlnaHNjYWxlOw0KLSAgICAqb3V0cHRyKysgPSAoSlNBTVBMRSkgKChtZW1iZXJzdW0gKyAzMjc2OCkgPj4gMTYpOw0KLSAgICBpbnB0cjAgKz0gMjsgaW5wdHIxICs9IDI7IGFib3ZlX3B0ciArPSAyOyBiZWxvd19wdHIgKz0gMjsNCi0NCi0gICAgZm9yIChjb2xjdHIgPSBvdXRwdXRfY29scyAtIDI7IGNvbGN0ciA+IDA7IGNvbGN0ci0tKSB7DQotICAgICAgLyogc3VtIG9mIHBpeGVscyBkaXJlY3RseSBtYXBwZWQgdG8gdGhpcyBvdXRwdXQgZWxlbWVudCAqLw0KLSAgICAgIG1lbWJlcnN1bSA9IEdFVEpTQU1QTEUoKmlucHRyMCkgKyBHRVRKU0FNUExFKGlucHRyMFsxXSkgKw0KLQkJICBHRVRKU0FNUExFKCppbnB0cjEpICsgR0VUSlNBTVBMRShpbnB0cjFbMV0pOw0KLSAgICAgIC8qIHN1bSBvZiBlZGdlLW5laWdoYm9yIHBpeGVscyAqLw0KLSAgICAgIG5laWdoc3VtID0gR0VUSlNBTVBMRSgqYWJvdmVfcHRyKSArIEdFVEpTQU1QTEUoYWJvdmVfcHRyWzFdKSArDQotCQkgR0VUSlNBTVBMRSgqYmVsb3dfcHRyKSArIEdFVEpTQU1QTEUoYmVsb3dfcHRyWzFdKSArDQotCQkgR0VUSlNBTVBMRShpbnB0cjBbLTFdKSArIEdFVEpTQU1QTEUoaW5wdHIwWzJdKSArDQotCQkgR0VUSlNBTVBMRShpbnB0cjFbLTFdKSArIEdFVEpTQU1QTEUoaW5wdHIxWzJdKTsNCi0gICAgICAvKiBUaGUgZWRnZS1uZWlnaGJvcnMgY291bnQgdHdpY2UgYXMgbXVjaCBhcyBjb3JuZXItbmVpZ2hib3JzICovDQotICAgICAgbmVpZ2hzdW0gKz0gbmVpZ2hzdW07DQotICAgICAgLyogQWRkIGluIHRoZSBjb3JuZXItbmVpZ2hib3JzICovDQotICAgICAgbmVpZ2hzdW0gKz0gR0VUSlNBTVBMRShhYm92ZV9wdHJbLTFdKSArIEdFVEpTQU1QTEUoYWJvdmVfcHRyWzJdKSArDQotCQkgIEdFVEpTQU1QTEUoYmVsb3dfcHRyWy0xXSkgKyBHRVRKU0FNUExFKGJlbG93X3B0clsyXSk7DQotICAgICAgLyogZm9ybSBmaW5hbCBvdXRwdXQgc2NhbGVkIHVwIGJ5IDJeMTYgKi8NCi0gICAgICBtZW1iZXJzdW0gPSBtZW1iZXJzdW0gKiBtZW1iZXJzY2FsZSArIG5laWdoc3VtICogbmVpZ2hzY2FsZTsNCi0gICAgICAvKiByb3VuZCwgZGVzY2FsZSBhbmQgb3V0cHV0IGl0ICovDQotICAgICAgKm91dHB0cisrID0gKEpTQU1QTEUpICgobWVtYmVyc3VtICsgMzI3NjgpID4+IDE2KTsNCi0gICAgICBpbnB0cjAgKz0gMjsgaW5wdHIxICs9IDI7IGFib3ZlX3B0ciArPSAyOyBiZWxvd19wdHIgKz0gMjsNCi0gICAgfQ0KLQ0KLSAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIGxhc3QgY29sdW1uICovDQotICAgIG1lbWJlcnN1bSA9IEdFVEpTQU1QTEUoKmlucHRyMCkgKyBHRVRKU0FNUExFKGlucHRyMFsxXSkgKw0KLQkJR0VUSlNBTVBMRSgqaW5wdHIxKSArIEdFVEpTQU1QTEUoaW5wdHIxWzFdKTsNCi0gICAgbmVpZ2hzdW0gPSBHRVRKU0FNUExFKCphYm92ZV9wdHIpICsgR0VUSlNBTVBMRShhYm92ZV9wdHJbMV0pICsNCi0JICAgICAgIEdFVEpTQU1QTEUoKmJlbG93X3B0cikgKyBHRVRKU0FNUExFKGJlbG93X3B0clsxXSkgKw0KLQkgICAgICAgR0VUSlNBTVBMRShpbnB0cjBbLTFdKSArIEdFVEpTQU1QTEUoaW5wdHIwWzFdKSArDQotCSAgICAgICBHRVRKU0FNUExFKGlucHRyMVstMV0pICsgR0VUSlNBTVBMRShpbnB0cjFbMV0pOw0KLSAgICBuZWlnaHN1bSArPSBuZWlnaHN1bTsNCi0gICAgbmVpZ2hzdW0gKz0gR0VUSlNBTVBMRShhYm92ZV9wdHJbLTFdKSArIEdFVEpTQU1QTEUoYWJvdmVfcHRyWzFdKSArDQotCQlHRVRKU0FNUExFKGJlbG93X3B0clstMV0pICsgR0VUSlNBTVBMRShiZWxvd19wdHJbMV0pOw0KLSAgICBtZW1iZXJzdW0gPSBtZW1iZXJzdW0gKiBtZW1iZXJzY2FsZSArIG5laWdoc3VtICogbmVpZ2hzY2FsZTsNCi0gICAgKm91dHB0ciA9IChKU0FNUExFKSAoKG1lbWJlcnN1bSArIDMyNzY4KSA+PiAxNik7DQotDQotICAgIGlucm93ICs9IDI7DQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogRG93bnNhbXBsZSBwaXhlbCB2YWx1ZXMgb2YgYSBzaW5nbGUgY29tcG9uZW50Lg0KLSAqIFRoaXMgdmVyc2lvbiBoYW5kbGVzIHRoZSBzcGVjaWFsIGNhc2Ugb2YgYSBmdWxsLXNpemUgY29tcG9uZW50LA0KLSAqIHdpdGggc21vb3RoaW5nLiAgT25lIHJvdyBvZiBjb250ZXh0IGlzIHJlcXVpcmVkLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLWZ1bGxzaXplX3Ntb290aF9kb3duc2FtcGxlIChqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0ciwNCi0JCQkgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKQ0KLXsNCi0gIGludCBvdXRyb3c7DQotICBKRElNRU5TSU9OIGNvbGN0cjsNCi0gIEpESU1FTlNJT04gb3V0cHV0X2NvbHMgPSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBEQ1RTSVpFOw0KLSAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHIsIGFib3ZlX3B0ciwgYmVsb3dfcHRyLCBvdXRwdHI7DQotICBJTlQzMiBtZW1iZXJzdW0sIG5laWdoc3VtLCBtZW1iZXJzY2FsZSwgbmVpZ2hzY2FsZTsNCi0gIGludCBjb2xzdW0sIGxhc3Rjb2xzdW0sIG5leHRjb2xzdW07DQotDQotICAvKiBFeHBhbmQgaW5wdXQgZGF0YSBlbm91Z2ggdG8gbGV0IGFsbCB0aGUgb3V0cHV0IHNhbXBsZXMgYmUgZ2VuZXJhdGVkDQotICAgKiBieSB0aGUgc3RhbmRhcmQgbG9vcC4gIFNwZWNpYWwtY2FzaW5nIHBhZGRlZCBvdXRwdXQgd291bGQgYmUgbW9yZQ0KLSAgICogZWZmaWNpZW50Lg0KLSAgICovDQotICBleHBhbmRfcmlnaHRfZWRnZShpbnB1dF9kYXRhIC0gMSwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICsgMiwNCi0JCSAgICBjaW5mby0+aW1hZ2Vfd2lkdGgsIG91dHB1dF9jb2xzKTsNCi0NCi0gIC8qIEVhY2ggb2YgdGhlIGVpZ2h0IG5laWdoYm9yIHBpeGVscyBjb250cmlidXRlcyBhIGZyYWN0aW9uIFNGIHRvIHRoZQ0KLSAgICogc21vb3RoZWQgcGl4ZWwsIHdoaWxlIHRoZSBtYWluIHBpeGVsIGNvbnRyaWJ1dGVzICgxLTgqU0YpLiAgSW4gb3JkZXINCi0gICAqIHRvIHVzZSBpbnRlZ2VyIGFyaXRobWV0aWMsIHRoZXNlIGZhY3RvcnMgYXJlIG11bHRpcGxpZWQgYnkgMl4xNiA9IDY1NTM2Lg0KLSAgICogQWxzbyByZWNhbGwgdGhhdCBTRiA9IHNtb290aGluZ19mYWN0b3IgLyAxMDI0Lg0KLSAgICovDQotDQotICBtZW1iZXJzY2FsZSA9IDY1NTM2TCAtIGNpbmZvLT5zbW9vdGhpbmdfZmFjdG9yICogNTEyTDsgLyogc2NhbGVkIDEtOCpTRiAqLw0KLSAgbmVpZ2hzY2FsZSA9IGNpbmZvLT5zbW9vdGhpbmdfZmFjdG9yICogNjQ7IC8qIHNjYWxlZCBTRiAqLw0KLQ0KLSAgZm9yIChvdXRyb3cgPSAwOyBvdXRyb3cgPCBjb21wcHRyLT52X3NhbXBfZmFjdG9yOyBvdXRyb3crKykgew0KLSAgICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtvdXRyb3ddOw0KLSAgICBpbnB0ciA9IGlucHV0X2RhdGFbb3V0cm93XTsNCi0gICAgYWJvdmVfcHRyID0gaW5wdXRfZGF0YVtvdXRyb3ctMV07DQotICAgIGJlbG93X3B0ciA9IGlucHV0X2RhdGFbb3V0cm93KzFdOw0KLQ0KLSAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIGZpcnN0IGNvbHVtbiAqLw0KLSAgICBjb2xzdW0gPSBHRVRKU0FNUExFKCphYm92ZV9wdHIrKykgKyBHRVRKU0FNUExFKCpiZWxvd19wdHIrKykgKw0KLQkgICAgIEdFVEpTQU1QTEUoKmlucHRyKTsNCi0gICAgbWVtYmVyc3VtID0gR0VUSlNBTVBMRSgqaW5wdHIrKyk7DQotICAgIG5leHRjb2xzdW0gPSBHRVRKU0FNUExFKCphYm92ZV9wdHIpICsgR0VUSlNBTVBMRSgqYmVsb3dfcHRyKSArDQotCQkgR0VUSlNBTVBMRSgqaW5wdHIpOw0KLSAgICBuZWlnaHN1bSA9IGNvbHN1bSArIChjb2xzdW0gLSBtZW1iZXJzdW0pICsgbmV4dGNvbHN1bTsNCi0gICAgbWVtYmVyc3VtID0gbWVtYmVyc3VtICogbWVtYmVyc2NhbGUgKyBuZWlnaHN1bSAqIG5laWdoc2NhbGU7DQotICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSAoKG1lbWJlcnN1bSArIDMyNzY4KSA+PiAxNik7DQotICAgIGxhc3Rjb2xzdW0gPSBjb2xzdW07IGNvbHN1bSA9IG5leHRjb2xzdW07DQotDQotICAgIGZvciAoY29sY3RyID0gb3V0cHV0X2NvbHMgLSAyOyBjb2xjdHIgPiAwOyBjb2xjdHItLSkgew0KLSAgICAgIG1lbWJlcnN1bSA9IEdFVEpTQU1QTEUoKmlucHRyKyspOw0KLSAgICAgIGFib3ZlX3B0cisrOyBiZWxvd19wdHIrKzsNCi0gICAgICBuZXh0Y29sc3VtID0gR0VUSlNBTVBMRSgqYWJvdmVfcHRyKSArIEdFVEpTQU1QTEUoKmJlbG93X3B0cikgKw0KLQkJICAgR0VUSlNBTVBMRSgqaW5wdHIpOw0KLSAgICAgIG5laWdoc3VtID0gbGFzdGNvbHN1bSArIChjb2xzdW0gLSBtZW1iZXJzdW0pICsgbmV4dGNvbHN1bTsNCi0gICAgICBtZW1iZXJzdW0gPSBtZW1iZXJzdW0gKiBtZW1iZXJzY2FsZSArIG5laWdoc3VtICogbmVpZ2hzY2FsZTsNCi0gICAgICAqb3V0cHRyKysgPSAoSlNBTVBMRSkgKChtZW1iZXJzdW0gKyAzMjc2OCkgPj4gMTYpOw0KLSAgICAgIGxhc3Rjb2xzdW0gPSBjb2xzdW07IGNvbHN1bSA9IG5leHRjb2xzdW07DQotICAgIH0NCi0NCi0gICAgLyogU3BlY2lhbCBjYXNlIGZvciBsYXN0IGNvbHVtbiAqLw0KLSAgICBtZW1iZXJzdW0gPSBHRVRKU0FNUExFKCppbnB0cik7DQotICAgIG5laWdoc3VtID0gbGFzdGNvbHN1bSArIChjb2xzdW0gLSBtZW1iZXJzdW0pICsgY29sc3VtOw0KLSAgICBtZW1iZXJzdW0gPSBtZW1iZXJzdW0gKiBtZW1iZXJzY2FsZSArIG5laWdoc3VtICogbmVpZ2hzY2FsZTsNCi0gICAgKm91dHB0ciA9IChKU0FNUExFKSAoKG1lbWJlcnN1bSArIDMyNzY4KSA+PiAxNik7DQotDQotICB9DQotfQ0KLQ0KLSNlbmRpZiAvKiBJTlBVVF9TTU9PVEhJTkdfU1VQUE9SVEVEICovDQotDQotDQotLyoNCi0gKiBNb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgZG93bnNhbXBsaW5nLg0KLSAqIE5vdGUgdGhhdCB3ZSBtdXN0IHNlbGVjdCBhIHJvdXRpbmUgZm9yIGVhY2ggY29tcG9uZW50Lg0KLSAqLw0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWppbml0X2Rvd25zYW1wbGVyIChqX2NvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBteV9kb3duc2FtcGxlX3B0ciBkb3duc2FtcGxlOw0KLSAgaW50IGNpOw0KLSAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7DQotICBib29sZWFuIHNtb290aG9rID0gVFJVRTsNCi0NCi0gIGRvd25zYW1wbGUgPSAobXlfZG93bnNhbXBsZV9wdHIpDQotICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsDQotCQkJCVNJWkVPRihteV9kb3duc2FtcGxlcikpOw0KLSAgY2luZm8tPmRvd25zYW1wbGUgPSAoc3RydWN0IGpwZWdfZG93bnNhbXBsZXIgKikgZG93bnNhbXBsZTsNCi0gIGRvd25zYW1wbGUtPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzc19kb3duc2FtcGxlOw0KLSAgZG93bnNhbXBsZS0+cHViLmRvd25zYW1wbGUgPSBzZXBfZG93bnNhbXBsZTsNCi0gIGRvd25zYW1wbGUtPnB1Yi5uZWVkX2NvbnRleHRfcm93cyA9IEZBTFNFOw0KLQ0KLSAgaWYgKGNpbmZvLT5DQ0lSNjAxX3NhbXBsaW5nKQ0KLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NDSVI2MDFfTk9USU1QTCk7DQotDQotICAvKiBWZXJpZnkgd2UgY2FuIGhhbmRsZSB0aGUgc2FtcGxpbmcgZmFjdG9ycywgYW5kIHNldCB1cCBtZXRob2QgcG9pbnRlcnMgKi8NCi0gIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7DQotICAgICAgIGNpKyssIGNvbXBwdHIrKykgew0KLSAgICBpZiAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciA9PSBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgJiYNCi0JY29tcHB0ci0+dl9zYW1wX2ZhY3RvciA9PSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpIHsNCi0jaWZkZWYgSU5QVVRfU01PT1RISU5HX1NVUFBPUlRFRA0KLSAgICAgIGlmIChjaW5mby0+c21vb3RoaW5nX2ZhY3Rvcikgew0KLQlkb3duc2FtcGxlLT5tZXRob2RzW2NpXSA9IGZ1bGxzaXplX3Ntb290aF9kb3duc2FtcGxlOw0KLQlkb3duc2FtcGxlLT5wdWIubmVlZF9jb250ZXh0X3Jvd3MgPSBUUlVFOw0KLSAgICAgIH0gZWxzZQ0KLSNlbmRpZg0KLQlkb3duc2FtcGxlLT5tZXRob2RzW2NpXSA9IGZ1bGxzaXplX2Rvd25zYW1wbGU7DQotICAgIH0gZWxzZSBpZiAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciAqIDIgPT0gY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICYmDQotCSAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yID09IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcikgew0KLSAgICAgIHNtb290aG9rID0gRkFMU0U7DQotICAgICAgZG93bnNhbXBsZS0+bWV0aG9kc1tjaV0gPSBoMnYxX2Rvd25zYW1wbGU7DQotICAgIH0gZWxzZSBpZiAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciAqIDIgPT0gY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICYmDQotCSAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yICogMiA9PSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpIHsNCi0jaWZkZWYgSU5QVVRfU01PT1RISU5HX1NVUFBPUlRFRA0KLSAgICAgIGlmIChjaW5mby0+c21vb3RoaW5nX2ZhY3Rvcikgew0KLQlkb3duc2FtcGxlLT5tZXRob2RzW2NpXSA9IGgydjJfc21vb3RoX2Rvd25zYW1wbGU7DQotCWRvd25zYW1wbGUtPnB1Yi5uZWVkX2NvbnRleHRfcm93cyA9IFRSVUU7DQotICAgICAgfSBlbHNlDQotI2VuZGlmDQotCWRvd25zYW1wbGUtPm1ldGhvZHNbY2ldID0gaDJ2Ml9kb3duc2FtcGxlOw0KLSAgICB9IGVsc2UgaWYgKChjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgJSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yKSA9PSAwICYmDQotCSAgICAgICAoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICUgY29tcHB0ci0+dl9zYW1wX2ZhY3RvcikgPT0gMCkgew0KLSAgICAgIHNtb290aG9rID0gRkFMU0U7DQotICAgICAgZG93bnNhbXBsZS0+bWV0aG9kc1tjaV0gPSBpbnRfZG93bnNhbXBsZTsNCi0gICAgfSBlbHNlDQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9GUkFDVF9TQU1QTEVfTk9USU1QTCk7DQotICB9DQotDQotI2lmZGVmIElOUFVUX1NNT09USElOR19TVVBQT1JURUQNCi0gIGlmIChjaW5mby0+c21vb3RoaW5nX2ZhY3RvciAmJiAhc21vb3Rob2spDQotICAgIFRSQUNFTVMoY2luZm8sIDAsIEpUUkNfU01PT1RIX05PVElNUEwpOw0KLSNlbmRpZg0KLX0NCi0NCi0jZW5kaWYgLy9fRlhfSlBFR19UVVJCT18NCisjaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQorLyoKKyAqIGpjc2FtcGxlLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NiwgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBkb3duc2FtcGxpbmcgcm91dGluZXMuCisgKgorICogRG93bnNhbXBsaW5nIGlucHV0IGRhdGEgaXMgY291bnRlZCBpbiAicm93IGdyb3VwcyIuICBBIHJvdyBncm91cAorICogaXMgZGVmaW5lZCB0byBiZSBtYXhfdl9zYW1wX2ZhY3RvciBwaXhlbCByb3dzIG9mIGVhY2ggY29tcG9uZW50LAorICogZnJvbSB3aGljaCB0aGUgZG93bnNhbXBsZXIgcHJvZHVjZXMgdl9zYW1wX2ZhY3RvciBzYW1wbGUgcm93cy4KKyAqIEEgc2luZ2xlIHJvdyBncm91cCBpcyBwcm9jZXNzZWQgaW4gZWFjaCBjYWxsIHRvIHRoZSBkb3duc2FtcGxlciBtb2R1bGUuCisgKgorICogVGhlIGRvd25zYW1wbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBlZGdlLWV4cGFuc2lvbiBvZiBpdHMgb3V0cHV0IGRhdGEKKyAqIHRvIGZpbGwgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIERDVCBibG9ja3MgaG9yaXpvbnRhbGx5LiAgVGhlIHNvdXJjZSBidWZmZXIKKyAqIG1heSBiZSBtb2RpZmllZCBpZiBpdCBpcyBoZWxwZnVsIGZvciB0aGlzIHB1cnBvc2UgKHRoZSBzb3VyY2UgYnVmZmVyIGlzCisgKiBhbGxvY2F0ZWQgd2lkZSBlbm91Z2ggdG8gY29ycmVzcG9uZCB0byB0aGUgZGVzaXJlZCBvdXRwdXQgd2lkdGgpLgorICogVGhlIGNhbGxlciAodGhlIHByZXAgY29udHJvbGxlcikgaXMgcmVzcG9uc2libGUgZm9yIHZlcnRpY2FsIHBhZGRpbmcuCisgKgorICogVGhlIGRvd25zYW1wbGVyIG1heSByZXF1ZXN0ICJjb250ZXh0IHJvd3MiIGJ5IHNldHRpbmcgbmVlZF9jb250ZXh0X3Jvd3MKKyAqIGR1cmluZyBzdGFydHVwLiAgSW4gdGhpcyBjYXNlLCB0aGUgaW5wdXQgYXJyYXlzIHdpbGwgY29udGFpbiBhdCBsZWFzdAorICogb25lIHJvdyBncm91cCdzIHdvcnRoIG9mIHBpeGVscyBhYm92ZSBhbmQgYmVsb3cgdGhlIHBhc3NlZC1pbiBkYXRhOworICogdGhlIGNhbGxlciB3aWxsIGNyZWF0ZSBkdW1teSByb3dzIGF0IGltYWdlIHRvcCBhbmQgYm90dG9tIGJ5IHJlcGxpY2F0aW5nCisgKiB0aGUgZmlyc3Qgb3IgbGFzdCByZWFsIHBpeGVsIHJvdy4KKyAqCisgKiBBbiBleGNlbGxlbnQgcmVmZXJlbmNlIGZvciBpbWFnZSByZXNhbXBsaW5nIGlzCisgKiAgIERpZ2l0YWwgSW1hZ2UgV2FycGluZywgR2VvcmdlIFdvbGJlcmcsIDE5OTAuCisgKiAgIFB1Yi4gYnkgSUVFRSBDb21wdXRlciBTb2NpZXR5IFByZXNzLCBMb3MgQWxhbWl0b3MsIENBLiBJU0JOIDAtODE4Ni04OTQ0LTcuCisgKgorICogVGhlIGRvd25zYW1wbGluZyBhbGdvcml0aG0gdXNlZCBoZXJlIGlzIGEgc2ltcGxlIGF2ZXJhZ2Ugb2YgdGhlIHNvdXJjZQorICogcGl4ZWxzIGNvdmVyZWQgYnkgdGhlIG91dHB1dCBwaXhlbC4gIFRoZSBoaS1mYWx1dGluIHNhbXBsaW5nIGxpdGVyYXR1cmUKKyAqIHJlZmVycyB0byB0aGlzIGFzIGEgImJveCBmaWx0ZXIiLiAgSW4gZ2VuZXJhbCB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIGEgYm94CisgKiBmaWx0ZXIgYXJlIG5vdCB2ZXJ5IGdvb2QsIGJ1dCBmb3IgdGhlIHNwZWNpZmljIGNhc2VzIHdlIG5vcm1hbGx5IHVzZSAoMToxCisgKiBhbmQgMjoxIHJhdGlvcykgdGhlIGJveCBpcyBlcXVpdmFsZW50IHRvIGEgInRyaWFuZ2xlIGZpbHRlciIgd2hpY2ggaXMgbm90CisgKiBuZWFybHkgc28gYmFkLiAgSWYgeW91IGludGVuZCB0byB1c2Ugb3RoZXIgc2FtcGxpbmcgcmF0aW9zLCB5b3UnZCBiZSB3ZWxsCisgKiBhZHZpc2VkIHRvIGltcHJvdmUgdGhpcyBjb2RlLgorICoKKyAqIEEgc2ltcGxlIGlucHV0LXNtb290aGluZyBjYXBhYmlsaXR5IGlzIHByb3ZpZGVkLiAgVGhpcyBpcyBtYWlubHkgaW50ZW5kZWQKKyAqIGZvciBjbGVhbmluZyB1cCBjb2xvci1kaXRoZXJlZCBHSUYgaW5wdXQgZmlsZXMgKGlmIHlvdSBmaW5kIGl0IGluYWRlcXVhdGUsCisgKiB3ZSBzdWdnZXN0IHVzaW5nIGFuIGV4dGVybmFsIGZpbHRlcmluZyBwcm9ncmFtIHN1Y2ggYXMgcG5tY29udm9sKS4gIFdoZW4KKyAqIGVuYWJsZWQsIGVhY2ggaW5wdXQgcGl4ZWwgUCBpcyByZXBsYWNlZCBieSBhIHdlaWdodGVkIHN1bSBvZiBpdHNlbGYgYW5kIGl0cworICogZWlnaHQgbmVpZ2hib3JzLiAgUCdzIHdlaWdodCBpcyAxLTgqU0YgYW5kIGVhY2ggbmVpZ2hib3IncyB3ZWlnaHQgaXMgU0YsCisgKiB3aGVyZSBTRiA9IChzbW9vdGhpbmdfZmFjdG9yIC8gMTAyNCkuCisgKiBDdXJyZW50bHksIHNtb290aGluZyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgMmgydiBzYW1wbGluZyBmYWN0b3JzLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKworCisvKiBQb2ludGVyIHRvIHJvdXRpbmUgdG8gZG93bnNhbXBsZSBhIHNpbmdsZSBjb21wb25lbnQgKi8KK3R5cGVkZWYgSk1FVEhPRCh2b2lkLCBkb3duc2FtcGxlMV9wdHIsCisJCShqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJCSBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpKTsKKworLyogUHJpdmF0ZSBzdWJvYmplY3QgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QganBlZ19kb3duc2FtcGxlciBwdWI7CS8qIHB1YmxpYyBmaWVsZHMgKi8KKworICAvKiBEb3duc2FtcGxpbmcgbWV0aG9kIHBvaW50ZXJzLCBvbmUgcGVyIGNvbXBvbmVudCAqLworICBkb3duc2FtcGxlMV9wdHIgbWV0aG9kc1tNQVhfQ09NUE9ORU5UU107Cit9IG15X2Rvd25zYW1wbGVyOworCit0eXBlZGVmIG15X2Rvd25zYW1wbGVyICogbXlfZG93bnNhbXBsZV9wdHI7CisKKworLyoKKyAqIEluaXRpYWxpemUgZm9yIGEgZG93bnNhbXBsaW5nIHBhc3MuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9wYXNzX2Rvd25zYW1wbGUgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICAvKiBubyB3b3JrIGZvciBub3cgKi8KK30KKworCisvKgorICogRXhwYW5kIGEgY29tcG9uZW50IGhvcml6b250YWxseSBmcm9tIHdpZHRoIGlucHV0X2NvbHMgdG8gd2lkdGggb3V0cHV0X2NvbHMsCisgKiBieSBkdXBsaWNhdGluZyB0aGUgcmlnaHRtb3N0IHNhbXBsZXMuCisgKi8KKworTE9DQUwodm9pZCkKK2V4cGFuZF9yaWdodF9lZGdlIChKU0FNUEFSUkFZIGltYWdlX2RhdGEsIGludCBudW1fcm93cywKKwkJICAgSkRJTUVOU0lPTiBpbnB1dF9jb2xzLCBKRElNRU5TSU9OIG91dHB1dF9jb2xzKQoreworICByZWdpc3RlciBKU0FNUFJPVyBwdHI7CisgIHJlZ2lzdGVyIEpTQU1QTEUgcGl4dmFsOworICByZWdpc3RlciBpbnQgY291bnQ7CisgIGludCByb3c7CisgIGludCBudW1jb2xzID0gKGludCkgKG91dHB1dF9jb2xzIC0gaW5wdXRfY29scyk7CisKKyAgaWYgKG51bWNvbHMgPiAwKSB7CisgICAgZm9yIChyb3cgPSAwOyByb3cgPCBudW1fcm93czsgcm93KyspIHsKKyAgICAgIHB0ciA9IGltYWdlX2RhdGFbcm93XSArIGlucHV0X2NvbHM7CisgICAgICBwaXh2YWwgPSBwdHJbLTFdOwkJLyogZG9uJ3QgbmVlZCBHRVRKU0FNUExFKCkgaGVyZSAqLworICAgICAgZm9yIChjb3VudCA9IG51bWNvbHM7IGNvdW50ID4gMDsgY291bnQtLSkKKwkqcHRyKysgPSBwaXh2YWw7CisgICAgfQorICB9Cit9CisKKworLyoKKyAqIERvIGRvd25zYW1wbGluZyBmb3IgYSB3aG9sZSByb3cgZ3JvdXAgKGFsbCBjb21wb25lbnRzKS4KKyAqCisgKiBJbiB0aGlzIHZlcnNpb24gd2Ugc2ltcGx5IGRvd25zYW1wbGUgZWFjaCBjb21wb25lbnQgaW5kZXBlbmRlbnRseS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3NlcF9kb3duc2FtcGxlIChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2luZGV4LAorCQlKU0FNUElNQUdFIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0X3Jvd19ncm91cF9pbmRleCkKK3sKKyAgbXlfZG93bnNhbXBsZV9wdHIgZG93bnNhbXBsZSA9IChteV9kb3duc2FtcGxlX3B0cikgY2luZm8tPmRvd25zYW1wbGU7CisgIGludCBjaTsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7CisgIEpTQU1QQVJSQVkgaW5fcHRyLCBvdXRfcHRyOworCisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgaW5fcHRyID0gaW5wdXRfYnVmW2NpXSArIGluX3Jvd19pbmRleDsKKyAgICBvdXRfcHRyID0gb3V0cHV0X2J1ZltjaV0gKyAob3V0X3Jvd19ncm91cF9pbmRleCAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpOworICAgICgqZG93bnNhbXBsZS0+bWV0aG9kc1tjaV0pIChjaW5mbywgY29tcHB0ciwgaW5fcHRyLCBvdXRfcHRyKTsKKyAgfQorfQorCisKKy8qCisgKiBEb3duc2FtcGxlIHBpeGVsIHZhbHVlcyBvZiBhIHNpbmdsZSBjb21wb25lbnQuCisgKiBPbmUgcm93IGdyb3VwIGlzIHByb2Nlc3NlZCBwZXIgY2FsbC4KKyAqIFRoaXMgdmVyc2lvbiBoYW5kbGVzIGFyYml0cmFyeSBpbnRlZ3JhbCBzYW1wbGluZyByYXRpb3MsIHdpdGhvdXQgc21vb3RoaW5nLgorICogTm90ZSB0aGF0IHRoaXMgdmVyc2lvbiBpcyBub3QgYWN0dWFsbHkgdXNlZCBmb3IgY3VzdG9tYXJ5IHNhbXBsaW5nIHJhdGlvcy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2ludF9kb3duc2FtcGxlIChqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJCUpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkKK3sKKyAgaW50IGlucm93LCBvdXRyb3csIGhfZXhwYW5kLCB2X2V4cGFuZCwgbnVtcGl4LCBudW1waXgyLCBoLCB2OworICBKRElNRU5TSU9OIG91dGNvbCwgb3V0Y29sX2g7CS8qIG91dGNvbF9oID09IG91dGNvbCpoX2V4cGFuZCAqLworICBKRElNRU5TSU9OIG91dHB1dF9jb2xzID0gY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRTsKKyAgSlNBTVBST1cgaW5wdHIsIG91dHB0cjsKKyAgSU5UMzIgb3V0dmFsdWU7CisKKyAgaF9leHBhbmQgPSBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgLyBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOworICB2X2V4cGFuZCA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAvIGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisgIG51bXBpeCA9IGhfZXhwYW5kICogdl9leHBhbmQ7CisgIG51bXBpeDIgPSBudW1waXgvMjsKKworICAvKiBFeHBhbmQgaW5wdXQgZGF0YSBlbm91Z2ggdG8gbGV0IGFsbCB0aGUgb3V0cHV0IHNhbXBsZXMgYmUgZ2VuZXJhdGVkCisgICAqIGJ5IHRoZSBzdGFuZGFyZCBsb29wLiAgU3BlY2lhbC1jYXNpbmcgcGFkZGVkIG91dHB1dCB3b3VsZCBiZSBtb3JlCisgICAqIGVmZmljaWVudC4KKyAgICovCisgIGV4cGFuZF9yaWdodF9lZGdlKGlucHV0X2RhdGEsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKwkJICAgIGNpbmZvLT5pbWFnZV93aWR0aCwgb3V0cHV0X2NvbHMgKiBoX2V4cGFuZCk7CisKKyAgaW5yb3cgPSAwOworICBmb3IgKG91dHJvdyA9IDA7IG91dHJvdyA8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IG91dHJvdysrKSB7CisgICAgb3V0cHRyID0gb3V0cHV0X2RhdGFbb3V0cm93XTsKKyAgICBmb3IgKG91dGNvbCA9IDAsIG91dGNvbF9oID0gMDsgb3V0Y29sIDwgb3V0cHV0X2NvbHM7CisJIG91dGNvbCsrLCBvdXRjb2xfaCArPSBoX2V4cGFuZCkgeworICAgICAgb3V0dmFsdWUgPSAwOworICAgICAgZm9yICh2ID0gMDsgdiA8IHZfZXhwYW5kOyB2KyspIHsKKwlpbnB0ciA9IGlucHV0X2RhdGFbaW5yb3crdl0gKyBvdXRjb2xfaDsKKwlmb3IgKGggPSAwOyBoIDwgaF9leHBhbmQ7IGgrKykgeworCSAgb3V0dmFsdWUgKz0gKElOVDMyKSBHRVRKU0FNUExFKCppbnB0cisrKTsKKwl9CisgICAgICB9CisgICAgICAqb3V0cHRyKysgPSAoSlNBTVBMRSkgKChvdXR2YWx1ZSArIG51bXBpeDIpIC8gbnVtcGl4KTsKKyAgICB9CisgICAgaW5yb3cgKz0gdl9leHBhbmQ7CisgIH0KK30KKworCisvKgorICogRG93bnNhbXBsZSBwaXhlbCB2YWx1ZXMgb2YgYSBzaW5nbGUgY29tcG9uZW50LgorICogVGhpcyB2ZXJzaW9uIGhhbmRsZXMgdGhlIHNwZWNpYWwgY2FzZSBvZiBhIGZ1bGwtc2l6ZSBjb21wb25lbnQsCisgKiB3aXRob3V0IHNtb290aGluZy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2Z1bGxzaXplX2Rvd25zYW1wbGUgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkJICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCit7CisgIC8qIENvcHkgdGhlIGRhdGEgKi8KKyAgamNvcHlfc2FtcGxlX3Jvd3MoaW5wdXRfZGF0YSwgMCwgb3V0cHV0X2RhdGEsIDAsCisJCSAgICBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsIGNpbmZvLT5pbWFnZV93aWR0aCk7CisgIC8qIEVkZ2UtZXhwYW5kICovCisgIGV4cGFuZF9yaWdodF9lZGdlKG91dHB1dF9kYXRhLCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisJCSAgICBjaW5mby0+aW1hZ2Vfd2lkdGgsIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkUpOworfQorCisKKy8qCisgKiBEb3duc2FtcGxlIHBpeGVsIHZhbHVlcyBvZiBhIHNpbmdsZSBjb21wb25lbnQuCisgKiBUaGlzIHZlcnNpb24gaGFuZGxlcyB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbCwKKyAqIHdpdGhvdXQgc21vb3RoaW5nLgorICoKKyAqIEEgbm90ZSBhYm91dCB0aGUgImJpYXMiIGNhbGN1bGF0aW9uczogd2hlbiByb3VuZGluZyBmcmFjdGlvbmFsIHZhbHVlcyB0bworICogaW50ZWdlciwgd2UgZG8gbm90IHdhbnQgdG8gYWx3YXlzIHJvdW5kIDAuNSB1cCB0byB0aGUgbmV4dCBpbnRlZ2VyLgorICogSWYgd2UgZGlkIHRoYXQsIHdlJ2QgaW50cm9kdWNlIGEgbm90aWNlYWJsZSBiaWFzIHRvd2FyZHMgbGFyZ2VyIHZhbHVlcy4KKyAqIEluc3RlYWQsIHRoaXMgY29kZSBpcyBhcnJhbmdlZCBzbyB0aGF0IDAuNSB3aWxsIGJlIHJvdW5kZWQgdXAgb3IgZG93biBhdAorICogYWx0ZXJuYXRlIHBpeGVsIGxvY2F0aW9ucyAoYSBzaW1wbGUgb3JkZXJlZCBkaXRoZXIgcGF0dGVybikuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitoMnYxX2Rvd25zYW1wbGUgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkJIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkKK3sKKyAgaW50IG91dHJvdzsKKyAgSkRJTUVOU0lPTiBvdXRjb2w7CisgIEpESU1FTlNJT04gb3V0cHV0X2NvbHMgPSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBEQ1RTSVpFOworICByZWdpc3RlciBKU0FNUFJPVyBpbnB0ciwgb3V0cHRyOworICByZWdpc3RlciBpbnQgYmlhczsKKworICAvKiBFeHBhbmQgaW5wdXQgZGF0YSBlbm91Z2ggdG8gbGV0IGFsbCB0aGUgb3V0cHV0IHNhbXBsZXMgYmUgZ2VuZXJhdGVkCisgICAqIGJ5IHRoZSBzdGFuZGFyZCBsb29wLiAgU3BlY2lhbC1jYXNpbmcgcGFkZGVkIG91dHB1dCB3b3VsZCBiZSBtb3JlCisgICAqIGVmZmljaWVudC4KKyAgICovCisgIGV4cGFuZF9yaWdodF9lZGdlKGlucHV0X2RhdGEsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKwkJICAgIGNpbmZvLT5pbWFnZV93aWR0aCwgb3V0cHV0X2NvbHMgKiAyKTsKKworICBmb3IgKG91dHJvdyA9IDA7IG91dHJvdyA8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IG91dHJvdysrKSB7CisgICAgb3V0cHRyID0gb3V0cHV0X2RhdGFbb3V0cm93XTsKKyAgICBpbnB0ciA9IGlucHV0X2RhdGFbb3V0cm93XTsKKyAgICBiaWFzID0gMDsJCQkvKiBiaWFzID0gMCwxLDAsMSwuLi4gZm9yIHN1Y2Nlc3NpdmUgc2FtcGxlcyAqLworICAgIGZvciAob3V0Y29sID0gMDsgb3V0Y29sIDwgb3V0cHV0X2NvbHM7IG91dGNvbCsrKSB7CisgICAgICAqb3V0cHRyKysgPSAoSlNBTVBMRSkgKChHRVRKU0FNUExFKCppbnB0cikgKyBHRVRKU0FNUExFKGlucHRyWzFdKQorCQkJICAgICAgKyBiaWFzKSA+PiAxKTsKKyAgICAgIGJpYXMgXj0gMTsJCS8qIDA9PjEsIDE9PjAgKi8KKyAgICAgIGlucHRyICs9IDI7CisgICAgfQorICB9Cit9CisKKworLyoKKyAqIERvd25zYW1wbGUgcGl4ZWwgdmFsdWVzIG9mIGEgc2luZ2xlIGNvbXBvbmVudC4KKyAqIFRoaXMgdmVyc2lvbiBoYW5kbGVzIHRoZSBzdGFuZGFyZCBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwsCisgKiB3aXRob3V0IHNtb290aGluZy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2gydjJfZG93bnNhbXBsZSAoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCQkgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKQoreworICBpbnQgaW5yb3csIG91dHJvdzsKKyAgSkRJTUVOU0lPTiBvdXRjb2w7CisgIEpESU1FTlNJT04gb3V0cHV0X2NvbHMgPSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBEQ1RTSVpFOworICByZWdpc3RlciBKU0FNUFJPVyBpbnB0cjAsIGlucHRyMSwgb3V0cHRyOworICByZWdpc3RlciBpbnQgYmlhczsKKworICAvKiBFeHBhbmQgaW5wdXQgZGF0YSBlbm91Z2ggdG8gbGV0IGFsbCB0aGUgb3V0cHV0IHNhbXBsZXMgYmUgZ2VuZXJhdGVkCisgICAqIGJ5IHRoZSBzdGFuZGFyZCBsb29wLiAgU3BlY2lhbC1jYXNpbmcgcGFkZGVkIG91dHB1dCB3b3VsZCBiZSBtb3JlCisgICAqIGVmZmljaWVudC4KKyAgICovCisgIGV4cGFuZF9yaWdodF9lZGdlKGlucHV0X2RhdGEsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKwkJICAgIGNpbmZvLT5pbWFnZV93aWR0aCwgb3V0cHV0X2NvbHMgKiAyKTsKKworICBpbnJvdyA9IDA7CisgIGZvciAob3V0cm93ID0gMDsgb3V0cm93IDwgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcjsgb3V0cm93KyspIHsKKyAgICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtvdXRyb3ddOworICAgIGlucHRyMCA9IGlucHV0X2RhdGFbaW5yb3ddOworICAgIGlucHRyMSA9IGlucHV0X2RhdGFbaW5yb3crMV07CisgICAgYmlhcyA9IDE7CQkJLyogYmlhcyA9IDEsMiwxLDIsLi4uIGZvciBzdWNjZXNzaXZlIHNhbXBsZXMgKi8KKyAgICBmb3IgKG91dGNvbCA9IDA7IG91dGNvbCA8IG91dHB1dF9jb2xzOyBvdXRjb2wrKykgeworICAgICAgKm91dHB0cisrID0gKEpTQU1QTEUpICgoR0VUSlNBTVBMRSgqaW5wdHIwKSArIEdFVEpTQU1QTEUoaW5wdHIwWzFdKSArCisJCQkgICAgICBHRVRKU0FNUExFKCppbnB0cjEpICsgR0VUSlNBTVBMRShpbnB0cjFbMV0pCisJCQkgICAgICArIGJpYXMpID4+IDIpOworICAgICAgYmlhcyBePSAzOwkJLyogMT0+MiwgMj0+MSAqLworICAgICAgaW5wdHIwICs9IDI7IGlucHRyMSArPSAyOworICAgIH0KKyAgICBpbnJvdyArPSAyOworICB9Cit9CisKKworI2lmZGVmIElOUFVUX1NNT09USElOR19TVVBQT1JURUQKKworLyoKKyAqIERvd25zYW1wbGUgcGl4ZWwgdmFsdWVzIG9mIGEgc2luZ2xlIGNvbXBvbmVudC4KKyAqIFRoaXMgdmVyc2lvbiBoYW5kbGVzIHRoZSBzdGFuZGFyZCBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwsCisgKiB3aXRoIHNtb290aGluZy4gIE9uZSByb3cgb2YgY29udGV4dCBpcyByZXF1aXJlZC4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2gydjJfc21vb3RoX2Rvd25zYW1wbGUgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkJCUpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkKK3sKKyAgaW50IGlucm93LCBvdXRyb3c7CisgIEpESU1FTlNJT04gY29sY3RyOworICBKRElNRU5TSU9OIG91dHB1dF9jb2xzID0gY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRTsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHIwLCBpbnB0cjEsIGFib3ZlX3B0ciwgYmVsb3dfcHRyLCBvdXRwdHI7CisgIElOVDMyIG1lbWJlcnN1bSwgbmVpZ2hzdW0sIG1lbWJlcnNjYWxlLCBuZWlnaHNjYWxlOworCisgIC8qIEV4cGFuZCBpbnB1dCBkYXRhIGVub3VnaCB0byBsZXQgYWxsIHRoZSBvdXRwdXQgc2FtcGxlcyBiZSBnZW5lcmF0ZWQKKyAgICogYnkgdGhlIHN0YW5kYXJkIGxvb3AuICBTcGVjaWFsLWNhc2luZyBwYWRkZWQgb3V0cHV0IHdvdWxkIGJlIG1vcmUKKyAgICogZWZmaWNpZW50LgorICAgKi8KKyAgZXhwYW5kX3JpZ2h0X2VkZ2UoaW5wdXRfZGF0YSAtIDEsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciArIDIsCisJCSAgICBjaW5mby0+aW1hZ2Vfd2lkdGgsIG91dHB1dF9jb2xzICogMik7CisKKyAgLyogV2UgZG9uJ3QgYm90aGVyIHRvIGZvcm0gdGhlIGluZGl2aWR1YWwgInNtb290aGVkIiBpbnB1dCBwaXhlbCB2YWx1ZXM7CisgICAqIHdlIGNhbiBkaXJlY3RseSBjb21wdXRlIHRoZSBvdXRwdXQgd2hpY2ggaXMgdGhlIGF2ZXJhZ2Ugb2YgdGhlIGZvdXIKKyAgICogc21vb3RoZWQgdmFsdWVzLiAgRWFjaCBvZiB0aGUgZm91ciBtZW1iZXIgcGl4ZWxzIGNvbnRyaWJ1dGVzIGEgZnJhY3Rpb24KKyAgICogKDEtOCpTRikgdG8gaXRzIG93biBzbW9vdGhlZCBpbWFnZSBhbmQgYSBmcmFjdGlvbiBTRiB0byBlYWNoIG9mIHRoZSB0aHJlZQorICAgKiBvdGhlciBzbW9vdGhlZCBwaXhlbHMsIHRoZXJlZm9yZSBhIHRvdGFsIGZyYWN0aW9uICgxLTUqU0YpLzQgdG8gdGhlIGZpbmFsCisgICAqIG91dHB1dC4gIFRoZSBmb3VyIGNvcm5lci1hZGphY2VudCBuZWlnaGJvciBwaXhlbHMgY29udHJpYnV0ZSBhIGZyYWN0aW9uCisgICAqIFNGIHRvIGp1c3Qgb25lIHNtb290aGVkIHBpeGVsLCBvciBTRi80IHRvIHRoZSBmaW5hbCBvdXRwdXQ7IHdoaWxlIHRoZQorICAgKiBlaWdodCBlZGdlLWFkamFjZW50IG5laWdoYm9ycyBjb250cmlidXRlIFNGIHRvIGVhY2ggb2YgdHdvIHNtb290aGVkCisgICAqIHBpeGVscywgb3IgU0YvMiBvdmVyYWxsLiAgSW4gb3JkZXIgdG8gdXNlIGludGVnZXIgYXJpdGhtZXRpYywgdGhlc2UKKyAgICogZmFjdG9ycyBhcmUgc2NhbGVkIGJ5IDJeMTYgPSA2NTUzNi4KKyAgICogQWxzbyByZWNhbGwgdGhhdCBTRiA9IHNtb290aGluZ19mYWN0b3IgLyAxMDI0LgorICAgKi8KKworICBtZW1iZXJzY2FsZSA9IDE2Mzg0IC0gY2luZm8tPnNtb290aGluZ19mYWN0b3IgKiA4MDsgLyogc2NhbGVkICgxLTUqU0YpLzQgKi8KKyAgbmVpZ2hzY2FsZSA9IGNpbmZvLT5zbW9vdGhpbmdfZmFjdG9yICogMTY7IC8qIHNjYWxlZCBTRi80ICovCisKKyAgaW5yb3cgPSAwOworICBmb3IgKG91dHJvdyA9IDA7IG91dHJvdyA8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IG91dHJvdysrKSB7CisgICAgb3V0cHRyID0gb3V0cHV0X2RhdGFbb3V0cm93XTsKKyAgICBpbnB0cjAgPSBpbnB1dF9kYXRhW2lucm93XTsKKyAgICBpbnB0cjEgPSBpbnB1dF9kYXRhW2lucm93KzFdOworICAgIGFib3ZlX3B0ciA9IGlucHV0X2RhdGFbaW5yb3ctMV07CisgICAgYmVsb3dfcHRyID0gaW5wdXRfZGF0YVtpbnJvdysyXTsKKworICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgZmlyc3QgY29sdW1uOiBwcmV0ZW5kIGNvbHVtbiAtMSBpcyBzYW1lIGFzIGNvbHVtbiAwICovCisgICAgbWVtYmVyc3VtID0gR0VUSlNBTVBMRSgqaW5wdHIwKSArIEdFVEpTQU1QTEUoaW5wdHIwWzFdKSArCisJCUdFVEpTQU1QTEUoKmlucHRyMSkgKyBHRVRKU0FNUExFKGlucHRyMVsxXSk7CisgICAgbmVpZ2hzdW0gPSBHRVRKU0FNUExFKCphYm92ZV9wdHIpICsgR0VUSlNBTVBMRShhYm92ZV9wdHJbMV0pICsKKwkgICAgICAgR0VUSlNBTVBMRSgqYmVsb3dfcHRyKSArIEdFVEpTQU1QTEUoYmVsb3dfcHRyWzFdKSArCisJICAgICAgIEdFVEpTQU1QTEUoKmlucHRyMCkgKyBHRVRKU0FNUExFKGlucHRyMFsyXSkgKworCSAgICAgICBHRVRKU0FNUExFKCppbnB0cjEpICsgR0VUSlNBTVBMRShpbnB0cjFbMl0pOworICAgIG5laWdoc3VtICs9IG5laWdoc3VtOworICAgIG5laWdoc3VtICs9IEdFVEpTQU1QTEUoKmFib3ZlX3B0cikgKyBHRVRKU0FNUExFKGFib3ZlX3B0clsyXSkgKworCQlHRVRKU0FNUExFKCpiZWxvd19wdHIpICsgR0VUSlNBTVBMRShiZWxvd19wdHJbMl0pOworICAgIG1lbWJlcnN1bSA9IG1lbWJlcnN1bSAqIG1lbWJlcnNjYWxlICsgbmVpZ2hzdW0gKiBuZWlnaHNjYWxlOworICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSAoKG1lbWJlcnN1bSArIDMyNzY4KSA+PiAxNik7CisgICAgaW5wdHIwICs9IDI7IGlucHRyMSArPSAyOyBhYm92ZV9wdHIgKz0gMjsgYmVsb3dfcHRyICs9IDI7CisKKyAgICBmb3IgKGNvbGN0ciA9IG91dHB1dF9jb2xzIC0gMjsgY29sY3RyID4gMDsgY29sY3RyLS0pIHsKKyAgICAgIC8qIHN1bSBvZiBwaXhlbHMgZGlyZWN0bHkgbWFwcGVkIHRvIHRoaXMgb3V0cHV0IGVsZW1lbnQgKi8KKyAgICAgIG1lbWJlcnN1bSA9IEdFVEpTQU1QTEUoKmlucHRyMCkgKyBHRVRKU0FNUExFKGlucHRyMFsxXSkgKworCQkgIEdFVEpTQU1QTEUoKmlucHRyMSkgKyBHRVRKU0FNUExFKGlucHRyMVsxXSk7CisgICAgICAvKiBzdW0gb2YgZWRnZS1uZWlnaGJvciBwaXhlbHMgKi8KKyAgICAgIG5laWdoc3VtID0gR0VUSlNBTVBMRSgqYWJvdmVfcHRyKSArIEdFVEpTQU1QTEUoYWJvdmVfcHRyWzFdKSArCisJCSBHRVRKU0FNUExFKCpiZWxvd19wdHIpICsgR0VUSlNBTVBMRShiZWxvd19wdHJbMV0pICsKKwkJIEdFVEpTQU1QTEUoaW5wdHIwWy0xXSkgKyBHRVRKU0FNUExFKGlucHRyMFsyXSkgKworCQkgR0VUSlNBTVBMRShpbnB0cjFbLTFdKSArIEdFVEpTQU1QTEUoaW5wdHIxWzJdKTsKKyAgICAgIC8qIFRoZSBlZGdlLW5laWdoYm9ycyBjb3VudCB0d2ljZSBhcyBtdWNoIGFzIGNvcm5lci1uZWlnaGJvcnMgKi8KKyAgICAgIG5laWdoc3VtICs9IG5laWdoc3VtOworICAgICAgLyogQWRkIGluIHRoZSBjb3JuZXItbmVpZ2hib3JzICovCisgICAgICBuZWlnaHN1bSArPSBHRVRKU0FNUExFKGFib3ZlX3B0clstMV0pICsgR0VUSlNBTVBMRShhYm92ZV9wdHJbMl0pICsKKwkJICBHRVRKU0FNUExFKGJlbG93X3B0clstMV0pICsgR0VUSlNBTVBMRShiZWxvd19wdHJbMl0pOworICAgICAgLyogZm9ybSBmaW5hbCBvdXRwdXQgc2NhbGVkIHVwIGJ5IDJeMTYgKi8KKyAgICAgIG1lbWJlcnN1bSA9IG1lbWJlcnN1bSAqIG1lbWJlcnNjYWxlICsgbmVpZ2hzdW0gKiBuZWlnaHNjYWxlOworICAgICAgLyogcm91bmQsIGRlc2NhbGUgYW5kIG91dHB1dCBpdCAqLworICAgICAgKm91dHB0cisrID0gKEpTQU1QTEUpICgobWVtYmVyc3VtICsgMzI3NjgpID4+IDE2KTsKKyAgICAgIGlucHRyMCArPSAyOyBpbnB0cjEgKz0gMjsgYWJvdmVfcHRyICs9IDI7IGJlbG93X3B0ciArPSAyOworICAgIH0KKworICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgbGFzdCBjb2x1bW4gKi8KKyAgICBtZW1iZXJzdW0gPSBHRVRKU0FNUExFKCppbnB0cjApICsgR0VUSlNBTVBMRShpbnB0cjBbMV0pICsKKwkJR0VUSlNBTVBMRSgqaW5wdHIxKSArIEdFVEpTQU1QTEUoaW5wdHIxWzFdKTsKKyAgICBuZWlnaHN1bSA9IEdFVEpTQU1QTEUoKmFib3ZlX3B0cikgKyBHRVRKU0FNUExFKGFib3ZlX3B0clsxXSkgKworCSAgICAgICBHRVRKU0FNUExFKCpiZWxvd19wdHIpICsgR0VUSlNBTVBMRShiZWxvd19wdHJbMV0pICsKKwkgICAgICAgR0VUSlNBTVBMRShpbnB0cjBbLTFdKSArIEdFVEpTQU1QTEUoaW5wdHIwWzFdKSArCisJICAgICAgIEdFVEpTQU1QTEUoaW5wdHIxWy0xXSkgKyBHRVRKU0FNUExFKGlucHRyMVsxXSk7CisgICAgbmVpZ2hzdW0gKz0gbmVpZ2hzdW07CisgICAgbmVpZ2hzdW0gKz0gR0VUSlNBTVBMRShhYm92ZV9wdHJbLTFdKSArIEdFVEpTQU1QTEUoYWJvdmVfcHRyWzFdKSArCisJCUdFVEpTQU1QTEUoYmVsb3dfcHRyWy0xXSkgKyBHRVRKU0FNUExFKGJlbG93X3B0clsxXSk7CisgICAgbWVtYmVyc3VtID0gbWVtYmVyc3VtICogbWVtYmVyc2NhbGUgKyBuZWlnaHN1bSAqIG5laWdoc2NhbGU7CisgICAgKm91dHB0ciA9IChKU0FNUExFKSAoKG1lbWJlcnN1bSArIDMyNzY4KSA+PiAxNik7CisKKyAgICBpbnJvdyArPSAyOworICB9Cit9CisKKworLyoKKyAqIERvd25zYW1wbGUgcGl4ZWwgdmFsdWVzIG9mIGEgc2luZ2xlIGNvbXBvbmVudC4KKyAqIFRoaXMgdmVyc2lvbiBoYW5kbGVzIHRoZSBzcGVjaWFsIGNhc2Ugb2YgYSBmdWxsLXNpemUgY29tcG9uZW50LAorICogd2l0aCBzbW9vdGhpbmcuICBPbmUgcm93IG9mIGNvbnRleHQgaXMgcmVxdWlyZWQuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitmdWxsc2l6ZV9zbW9vdGhfZG93bnNhbXBsZSAoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHIsCisJCQkgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKQoreworICBpbnQgb3V0cm93OworICBKRElNRU5TSU9OIGNvbGN0cjsKKyAgSkRJTUVOU0lPTiBvdXRwdXRfY29scyA9IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkU7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyLCBhYm92ZV9wdHIsIGJlbG93X3B0ciwgb3V0cHRyOworICBJTlQzMiBtZW1iZXJzdW0sIG5laWdoc3VtLCBtZW1iZXJzY2FsZSwgbmVpZ2hzY2FsZTsKKyAgaW50IGNvbHN1bSwgbGFzdGNvbHN1bSwgbmV4dGNvbHN1bTsKKworICAvKiBFeHBhbmQgaW5wdXQgZGF0YSBlbm91Z2ggdG8gbGV0IGFsbCB0aGUgb3V0cHV0IHNhbXBsZXMgYmUgZ2VuZXJhdGVkCisgICAqIGJ5IHRoZSBzdGFuZGFyZCBsb29wLiAgU3BlY2lhbC1jYXNpbmcgcGFkZGVkIG91dHB1dCB3b3VsZCBiZSBtb3JlCisgICAqIGVmZmljaWVudC4KKyAgICovCisgIGV4cGFuZF9yaWdodF9lZGdlKGlucHV0X2RhdGEgLSAxLCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKyAyLAorCQkgICAgY2luZm8tPmltYWdlX3dpZHRoLCBvdXRwdXRfY29scyk7CisKKyAgLyogRWFjaCBvZiB0aGUgZWlnaHQgbmVpZ2hib3IgcGl4ZWxzIGNvbnRyaWJ1dGVzIGEgZnJhY3Rpb24gU0YgdG8gdGhlCisgICAqIHNtb290aGVkIHBpeGVsLCB3aGlsZSB0aGUgbWFpbiBwaXhlbCBjb250cmlidXRlcyAoMS04KlNGKS4gIEluIG9yZGVyCisgICAqIHRvIHVzZSBpbnRlZ2VyIGFyaXRobWV0aWMsIHRoZXNlIGZhY3RvcnMgYXJlIG11bHRpcGxpZWQgYnkgMl4xNiA9IDY1NTM2LgorICAgKiBBbHNvIHJlY2FsbCB0aGF0IFNGID0gc21vb3RoaW5nX2ZhY3RvciAvIDEwMjQuCisgICAqLworCisgIG1lbWJlcnNjYWxlID0gNjU1MzZMIC0gY2luZm8tPnNtb290aGluZ19mYWN0b3IgKiA1MTJMOyAvKiBzY2FsZWQgMS04KlNGICovCisgIG5laWdoc2NhbGUgPSBjaW5mby0+c21vb3RoaW5nX2ZhY3RvciAqIDY0OyAvKiBzY2FsZWQgU0YgKi8KKworICBmb3IgKG91dHJvdyA9IDA7IG91dHJvdyA8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IG91dHJvdysrKSB7CisgICAgb3V0cHRyID0gb3V0cHV0X2RhdGFbb3V0cm93XTsKKyAgICBpbnB0ciA9IGlucHV0X2RhdGFbb3V0cm93XTsKKyAgICBhYm92ZV9wdHIgPSBpbnB1dF9kYXRhW291dHJvdy0xXTsKKyAgICBiZWxvd19wdHIgPSBpbnB1dF9kYXRhW291dHJvdysxXTsKKworICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgZmlyc3QgY29sdW1uICovCisgICAgY29sc3VtID0gR0VUSlNBTVBMRSgqYWJvdmVfcHRyKyspICsgR0VUSlNBTVBMRSgqYmVsb3dfcHRyKyspICsKKwkgICAgIEdFVEpTQU1QTEUoKmlucHRyKTsKKyAgICBtZW1iZXJzdW0gPSBHRVRKU0FNUExFKCppbnB0cisrKTsKKyAgICBuZXh0Y29sc3VtID0gR0VUSlNBTVBMRSgqYWJvdmVfcHRyKSArIEdFVEpTQU1QTEUoKmJlbG93X3B0cikgKworCQkgR0VUSlNBTVBMRSgqaW5wdHIpOworICAgIG5laWdoc3VtID0gY29sc3VtICsgKGNvbHN1bSAtIG1lbWJlcnN1bSkgKyBuZXh0Y29sc3VtOworICAgIG1lbWJlcnN1bSA9IG1lbWJlcnN1bSAqIG1lbWJlcnNjYWxlICsgbmVpZ2hzdW0gKiBuZWlnaHNjYWxlOworICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSAoKG1lbWJlcnN1bSArIDMyNzY4KSA+PiAxNik7CisgICAgbGFzdGNvbHN1bSA9IGNvbHN1bTsgY29sc3VtID0gbmV4dGNvbHN1bTsKKworICAgIGZvciAoY29sY3RyID0gb3V0cHV0X2NvbHMgLSAyOyBjb2xjdHIgPiAwOyBjb2xjdHItLSkgeworICAgICAgbWVtYmVyc3VtID0gR0VUSlNBTVBMRSgqaW5wdHIrKyk7CisgICAgICBhYm92ZV9wdHIrKzsgYmVsb3dfcHRyKys7CisgICAgICBuZXh0Y29sc3VtID0gR0VUSlNBTVBMRSgqYWJvdmVfcHRyKSArIEdFVEpTQU1QTEUoKmJlbG93X3B0cikgKworCQkgICBHRVRKU0FNUExFKCppbnB0cik7CisgICAgICBuZWlnaHN1bSA9IGxhc3Rjb2xzdW0gKyAoY29sc3VtIC0gbWVtYmVyc3VtKSArIG5leHRjb2xzdW07CisgICAgICBtZW1iZXJzdW0gPSBtZW1iZXJzdW0gKiBtZW1iZXJzY2FsZSArIG5laWdoc3VtICogbmVpZ2hzY2FsZTsKKyAgICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSAoKG1lbWJlcnN1bSArIDMyNzY4KSA+PiAxNik7CisgICAgICBsYXN0Y29sc3VtID0gY29sc3VtOyBjb2xzdW0gPSBuZXh0Y29sc3VtOworICAgIH0KKworICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgbGFzdCBjb2x1bW4gKi8KKyAgICBtZW1iZXJzdW0gPSBHRVRKU0FNUExFKCppbnB0cik7CisgICAgbmVpZ2hzdW0gPSBsYXN0Y29sc3VtICsgKGNvbHN1bSAtIG1lbWJlcnN1bSkgKyBjb2xzdW07CisgICAgbWVtYmVyc3VtID0gbWVtYmVyc3VtICogbWVtYmVyc2NhbGUgKyBuZWlnaHN1bSAqIG5laWdoc2NhbGU7CisgICAgKm91dHB0ciA9IChKU0FNUExFKSAoKG1lbWJlcnN1bSArIDMyNzY4KSA+PiAxNik7CisKKyAgfQorfQorCisjZW5kaWYgLyogSU5QVVRfU01PT1RISU5HX1NVUFBPUlRFRCAqLworCisKKy8qCisgKiBNb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgZG93bnNhbXBsaW5nLgorICogTm90ZSB0aGF0IHdlIG11c3Qgc2VsZWN0IGEgcm91dGluZSBmb3IgZWFjaCBjb21wb25lbnQuCisgKi8KKworR0xPQkFMKHZvaWQpCitqaW5pdF9kb3duc2FtcGxlciAoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X2Rvd25zYW1wbGVfcHRyIGRvd25zYW1wbGU7CisgIGludCBjaTsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7CisgIGJvb2xlYW4gc21vb3Rob2sgPSBUUlVFOworCisgIGRvd25zYW1wbGUgPSAobXlfZG93bnNhbXBsZV9wdHIpCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkJCQlTSVpFT0YobXlfZG93bnNhbXBsZXIpKTsKKyAgY2luZm8tPmRvd25zYW1wbGUgPSAoc3RydWN0IGpwZWdfZG93bnNhbXBsZXIgKikgZG93bnNhbXBsZTsKKyAgZG93bnNhbXBsZS0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX2Rvd25zYW1wbGU7CisgIGRvd25zYW1wbGUtPnB1Yi5kb3duc2FtcGxlID0gc2VwX2Rvd25zYW1wbGU7CisgIGRvd25zYW1wbGUtPnB1Yi5uZWVkX2NvbnRleHRfcm93cyA9IEZBTFNFOworCisgIGlmIChjaW5mby0+Q0NJUjYwMV9zYW1wbGluZykKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NDSVI2MDFfTk9USU1QTCk7CisKKyAgLyogVmVyaWZ5IHdlIGNhbiBoYW5kbGUgdGhlIHNhbXBsaW5nIGZhY3RvcnMsIGFuZCBzZXQgdXAgbWV0aG9kIHBvaW50ZXJzICovCisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgaWYgKGNvbXBwdHItPmhfc2FtcF9mYWN0b3IgPT0gY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICYmCisJY29tcHB0ci0+dl9zYW1wX2ZhY3RvciA9PSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpIHsKKyNpZmRlZiBJTlBVVF9TTU9PVEhJTkdfU1VQUE9SVEVECisgICAgICBpZiAoY2luZm8tPnNtb290aGluZ19mYWN0b3IpIHsKKwlkb3duc2FtcGxlLT5tZXRob2RzW2NpXSA9IGZ1bGxzaXplX3Ntb290aF9kb3duc2FtcGxlOworCWRvd25zYW1wbGUtPnB1Yi5uZWVkX2NvbnRleHRfcm93cyA9IFRSVUU7CisgICAgICB9IGVsc2UKKyNlbmRpZgorCWRvd25zYW1wbGUtPm1ldGhvZHNbY2ldID0gZnVsbHNpemVfZG93bnNhbXBsZTsKKyAgICB9IGVsc2UgaWYgKGNvbXBwdHItPmhfc2FtcF9mYWN0b3IgKiAyID09IGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAmJgorCSAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yID09IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcikgeworICAgICAgc21vb3Rob2sgPSBGQUxTRTsKKyAgICAgIGRvd25zYW1wbGUtPm1ldGhvZHNbY2ldID0gaDJ2MV9kb3duc2FtcGxlOworICAgIH0gZWxzZSBpZiAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciAqIDIgPT0gY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICYmCisJICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiAyID09IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcikgeworI2lmZGVmIElOUFVUX1NNT09USElOR19TVVBQT1JURUQKKyAgICAgIGlmIChjaW5mby0+c21vb3RoaW5nX2ZhY3RvcikgeworCWRvd25zYW1wbGUtPm1ldGhvZHNbY2ldID0gaDJ2Ml9zbW9vdGhfZG93bnNhbXBsZTsKKwlkb3duc2FtcGxlLT5wdWIubmVlZF9jb250ZXh0X3Jvd3MgPSBUUlVFOworICAgICAgfSBlbHNlCisjZW5kaWYKKwlkb3duc2FtcGxlLT5tZXRob2RzW2NpXSA9IGgydjJfZG93bnNhbXBsZTsKKyAgICB9IGVsc2UgaWYgKChjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgJSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yKSA9PSAwICYmCisJICAgICAgIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgJSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSA9PSAwKSB7CisgICAgICBzbW9vdGhvayA9IEZBTFNFOworICAgICAgZG93bnNhbXBsZS0+bWV0aG9kc1tjaV0gPSBpbnRfZG93bnNhbXBsZTsKKyAgICB9IGVsc2UKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfRlJBQ1RfU0FNUExFX05PVElNUEwpOworICB9CisKKyNpZmRlZiBJTlBVVF9TTU9PVEhJTkdfU1VQUE9SVEVECisgIGlmIChjaW5mby0+c21vb3RoaW5nX2ZhY3RvciAmJiAhc21vb3Rob2spCisgICAgVFJBQ0VNUyhjaW5mbywgMCwgSlRSQ19TTU9PVEhfTk9USU1QTCk7CisjZW5kaWYKK30KKworI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY3RyYW5zLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qY3RyYW5zLmMKaW5kZXggZWQ1NDExNS4uNDBkMTY2NyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamN0cmFucy5jCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pjdHJhbnMuYwpAQCAtMSwzOTEgKzEsMzkxIEBACi0jaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQ0KLS8qDQotICogamN0cmFucy5jDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCwgVGhvbWFzIEcuIExhbmUuDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4NCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuDQotICoNCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgbGlicmFyeSByb3V0aW5lcyBmb3IgdHJhbnNjb2RpbmcgY29tcHJlc3Npb24sDQotICogdGhhdCBpcywgd3JpdGluZyByYXcgRENUIGNvZWZmaWNpZW50IGFycmF5cyB0byBhbiBvdXRwdXQgSlBFRyBmaWxlLg0KLSAqIFRoZSByb3V0aW5lcyBpbiBqY2FwaW1pbi5jIHdpbGwgYWxzbyBiZSBuZWVkZWQgYnkgYSB0cmFuc2NvZGVyLg0KLSAqLw0KLQ0KLSNkZWZpbmUgSlBFR19JTlRFUk5BTFMNCi0jaW5jbHVkZSAiamluY2x1ZGUuaCINCi0jaW5jbHVkZSAianBlZ2xpYi5oIg0KLQ0KLQ0KLS8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovDQotTE9DQUwodm9pZCkgdHJhbnNlbmNvZGVfbWFzdGVyX3NlbGVjdGlvbg0KLQlKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqdmlydF9iYXJyYXlfcHRyICogY29lZl9hcnJheXMpKTsNCi1MT0NBTCh2b2lkKSB0cmFuc2VuY29kZV9jb2VmX2NvbnRyb2xsZXINCi0JSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywganZpcnRfYmFycmF5X3B0ciAqIGNvZWZfYXJyYXlzKSk7DQotDQotDQotLyoNCi0gKiBDb21wcmVzc2lvbiBpbml0aWFsaXphdGlvbiBmb3Igd3JpdGluZyByYXctY29lZmZpY2llbnQgZGF0YS4NCi0gKiBCZWZvcmUgY2FsbGluZyB0aGlzLCBhbGwgcGFyYW1ldGVycyBhbmQgYSBkYXRhIGRlc3RpbmF0aW9uIG11c3QgYmUgc2V0IHVwLg0KLSAqIENhbGwganBlZ19maW5pc2hfY29tcHJlc3MoKSB0byBhY3R1YWxseSB3cml0ZSB0aGUgZGF0YS4NCi0gKg0KLSAqIFRoZSBudW1iZXIgb2YgcGFzc2VkIHZpcnR1YWwgYXJyYXlzIG11c3QgbWF0Y2ggY2luZm8tPm51bV9jb21wb25lbnRzLg0KLSAqIE5vdGUgdGhhdCB0aGUgdmlydHVhbCBhcnJheXMgbmVlZCBub3QgYmUgZmlsbGVkIG9yIGV2ZW4gcmVhbGl6ZWQgYXQNCi0gKiB0aGUgdGltZSB3cml0ZV9jb2VmZmljaWVudHMgaXMgY2FsbGVkOyBpbmRlZWQsIGlmIHRoZSB2aXJ0dWFsIGFycmF5cw0KLSAqIHdlcmUgcmVxdWVzdGVkIGZyb20gdGhpcyBjb21wcmVzc2lvbiBvYmplY3QncyBtZW1vcnkgbWFuYWdlciwgdGhleQ0KLSAqIHR5cGljYWxseSB3aWxsIGJlIHJlYWxpemVkIGR1cmluZyB0aGlzIHJvdXRpbmUgYW5kIGZpbGxlZCBhZnRlcndhcmRzLg0KLSAqLw0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWpwZWdfd3JpdGVfY29lZmZpY2llbnRzIChqX2NvbXByZXNzX3B0ciBjaW5mbywganZpcnRfYmFycmF5X3B0ciAqIGNvZWZfYXJyYXlzKQ0KLXsNCi0gIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IENTVEFURV9TVEFSVCkNCi0gICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsNCi0gIC8qIE1hcmsgYWxsIHRhYmxlcyB0byBiZSB3cml0dGVuICovDQotICBqcGVnX3N1cHByZXNzX3RhYmxlcyhjaW5mbywgRkFMU0UpOw0KLSAgLyogKFJlKWluaXRpYWxpemUgZXJyb3IgbWdyIGFuZCBkZXN0aW5hdGlvbiBtb2R1bGVzICovDQotICAoKmNpbmZvLT5lcnItPnJlc2V0X2Vycm9yX21ncikgKChqX2NvbW1vbl9wdHIpIGNpbmZvKTsNCi0gICgqY2luZm8tPmRlc3QtPmluaXRfZGVzdGluYXRpb24pIChjaW5mbyk7DQotICAvKiBQZXJmb3JtIG1hc3RlciBzZWxlY3Rpb24gb2YgYWN0aXZlIG1vZHVsZXMgKi8NCi0gIHRyYW5zZW5jb2RlX21hc3Rlcl9zZWxlY3Rpb24oY2luZm8sIGNvZWZfYXJyYXlzKTsNCi0gIC8qIFdhaXQgZm9yIGpwZWdfZmluaXNoX2NvbXByZXNzKCkgY2FsbCAqLw0KLSAgY2luZm8tPm5leHRfc2NhbmxpbmUgPSAwOwkvKiBzbyBqcGVnX3dyaXRlX21hcmtlciB3b3JrcyAqLw0KLSAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IENTVEFURV9XUkNPRUZTOw0KLX0NCi0NCi0NCi0vKg0KLSAqIEluaXRpYWxpemUgdGhlIGNvbXByZXNzaW9uIG9iamVjdCB3aXRoIGRlZmF1bHQgcGFyYW1ldGVycywNCi0gKiB0aGVuIGNvcHkgZnJvbSB0aGUgc291cmNlIG9iamVjdCBhbGwgcGFyYW1ldGVycyBuZWVkZWQgZm9yIGxvc3NsZXNzDQotICogdHJhbnNjb2RpbmcuICBQYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIHZhcmllZCB3aXRob3V0IGxvc3MgKHN1Y2ggYXMNCi0gKiBzY2FuIHNjcmlwdCBhbmQgSHVmZm1hbiBvcHRpbWl6YXRpb24pIGFyZSBsZWZ0IGluIHRoZWlyIGRlZmF1bHQgc3RhdGVzLg0KLSAqLw0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWpwZWdfY29weV9jcml0aWNhbF9wYXJhbWV0ZXJzIChqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8sDQotCQkJICAgICAgIGpfY29tcHJlc3NfcHRyIGRzdGluZm8pDQotew0KLSAgSlFVQU5UX1RCTCAqKiBxdGJscHRyOw0KLSAganBlZ19jb21wb25lbnRfaW5mbyAqaW5jb21wLCAqb3V0Y29tcDsNCi0gIEpRVUFOVF9UQkwgKmNfcXVhbnQsICpzbG90X3F1YW50Ow0KLSAgaW50IHRibG5vLCBjaSwgY29lZmk7DQotDQotICAvKiBTYWZldHkgY2hlY2sgdG8gZW5zdXJlIHN0YXJ0X2NvbXByZXNzIG5vdCBjYWxsZWQgeWV0LiAqLw0KLSAgaWYgKGRzdGluZm8tPmdsb2JhbF9zdGF0ZSAhPSBDU1RBVEVfU1RBUlQpDQotICAgIEVSUkVYSVQxKGRzdGluZm8sIEpFUlJfQkFEX1NUQVRFLCBkc3RpbmZvLT5nbG9iYWxfc3RhdGUpOw0KLSAgLyogQ29weSBmdW5kYW1lbnRhbCBpbWFnZSBkaW1lbnNpb25zICovDQotICBkc3RpbmZvLT5pbWFnZV93aWR0aCA9IHNyY2luZm8tPmltYWdlX3dpZHRoOw0KLSAgZHN0aW5mby0+aW1hZ2VfaGVpZ2h0ID0gc3JjaW5mby0+aW1hZ2VfaGVpZ2h0Ow0KLSAgZHN0aW5mby0+aW5wdXRfY29tcG9uZW50cyA9IHNyY2luZm8tPm51bV9jb21wb25lbnRzOw0KLSAgZHN0aW5mby0+aW5fY29sb3Jfc3BhY2UgPSBzcmNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlOw0KLSAgLyogSW5pdGlhbGl6ZSBhbGwgcGFyYW1ldGVycyB0byBkZWZhdWx0IHZhbHVlcyAqLw0KLSAganBlZ19zZXRfZGVmYXVsdHMoZHN0aW5mbyk7DQotICAvKiBqcGVnX3NldF9kZWZhdWx0cyBtYXkgY2hvb3NlIHdyb25nIGNvbG9yc3BhY2UsIGVnIFlDYkNyIGlmIGlucHV0IGlzIFJHQi4NCi0gICAqIEZpeCBpdCB0byBnZXQgdGhlIHJpZ2h0IGhlYWRlciBtYXJrZXJzIGZvciB0aGUgaW1hZ2UgY29sb3JzcGFjZS4NCi0gICAqLw0KLSAganBlZ19zZXRfY29sb3JzcGFjZShkc3RpbmZvLCBzcmNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlKTsNCi0gIGRzdGluZm8tPmRhdGFfcHJlY2lzaW9uID0gc3JjaW5mby0+ZGF0YV9wcmVjaXNpb247DQotICBkc3RpbmZvLT5DQ0lSNjAxX3NhbXBsaW5nID0gc3JjaW5mby0+Q0NJUjYwMV9zYW1wbGluZzsNCi0gIC8qIENvcHkgdGhlIHNvdXJjZSdzIHF1YW50aXphdGlvbiB0YWJsZXMuICovDQotICBmb3IgKHRibG5vID0gMDsgdGJsbm8gPCBOVU1fUVVBTlRfVEJMUzsgdGJsbm8rKykgew0KLSAgICBpZiAoc3JjaW5mby0+cXVhbnRfdGJsX3B0cnNbdGJsbm9dICE9IE5VTEwpIHsNCi0gICAgICBxdGJscHRyID0gJiBkc3RpbmZvLT5xdWFudF90YmxfcHRyc1t0Ymxub107DQotICAgICAgaWYgKCpxdGJscHRyID09IE5VTEwpDQotCSpxdGJscHRyID0ganBlZ19hbGxvY19xdWFudF90YWJsZSgoal9jb21tb25fcHRyKSBkc3RpbmZvKTsNCi0gICAgICBNRU1DT1BZKCgqcXRibHB0ciktPnF1YW50dmFsLA0KLQkgICAgICBzcmNpbmZvLT5xdWFudF90YmxfcHRyc1t0Ymxub10tPnF1YW50dmFsLA0KLQkgICAgICBTSVpFT0YoKCpxdGJscHRyKS0+cXVhbnR2YWwpKTsNCi0gICAgICAoKnF0YmxwdHIpLT5zZW50X3RhYmxlID0gRkFMU0U7DQotICAgIH0NCi0gIH0NCi0gIC8qIENvcHkgdGhlIHNvdXJjZSdzIHBlci1jb21wb25lbnQgaW5mby4NCi0gICAqIE5vdGUgd2UgYXNzdW1lIGpwZWdfc2V0X2RlZmF1bHRzIGhhcyBhbGxvY2F0ZWQgdGhlIGRlc3QgY29tcF9pbmZvIGFycmF5Lg0KLSAgICovDQotICBkc3RpbmZvLT5udW1fY29tcG9uZW50cyA9IHNyY2luZm8tPm51bV9jb21wb25lbnRzOw0KLSAgaWYgKGRzdGluZm8tPm51bV9jb21wb25lbnRzIDwgMSB8fCBkc3RpbmZvLT5udW1fY29tcG9uZW50cyA+IE1BWF9DT01QT05FTlRTKQ0KLSAgICBFUlJFWElUMihkc3RpbmZvLCBKRVJSX0NPTVBPTkVOVF9DT1VOVCwgZHN0aW5mby0+bnVtX2NvbXBvbmVudHMsDQotCSAgICAgTUFYX0NPTVBPTkVOVFMpOw0KLSAgZm9yIChjaSA9IDAsIGluY29tcCA9IHNyY2luZm8tPmNvbXBfaW5mbywgb3V0Y29tcCA9IGRzdGluZm8tPmNvbXBfaW5mbzsNCi0gICAgICAgY2kgPCBkc3RpbmZvLT5udW1fY29tcG9uZW50czsgY2krKywgaW5jb21wKyssIG91dGNvbXArKykgew0KLSAgICBvdXRjb21wLT5jb21wb25lbnRfaWQgPSBpbmNvbXAtPmNvbXBvbmVudF9pZDsNCi0gICAgb3V0Y29tcC0+aF9zYW1wX2ZhY3RvciA9IGluY29tcC0+aF9zYW1wX2ZhY3RvcjsNCi0gICAgb3V0Y29tcC0+dl9zYW1wX2ZhY3RvciA9IGluY29tcC0+dl9zYW1wX2ZhY3RvcjsNCi0gICAgb3V0Y29tcC0+cXVhbnRfdGJsX25vID0gaW5jb21wLT5xdWFudF90Ymxfbm87DQotICAgIC8qIE1ha2Ugc3VyZSBzYXZlZCBxdWFudGl6YXRpb24gdGFibGUgZm9yIGNvbXBvbmVudCBtYXRjaGVzIHRoZSBxdGFibGUNCi0gICAgICogc2xvdC4gIElmIG5vdCwgdGhlIGlucHV0IGZpbGUgcmUtdXNlZCB0aGlzIHF0YWJsZSBzbG90Lg0KLSAgICAgKiBJSkcgZW5jb2RlciBjdXJyZW50bHkgY2Fubm90IGR1cGxpY2F0ZSB0aGlzLg0KLSAgICAgKi8NCi0gICAgdGJsbm8gPSBvdXRjb21wLT5xdWFudF90Ymxfbm87DQotICAgIGlmICh0YmxubyA8IDAgfHwgdGJsbm8gPj0gTlVNX1FVQU5UX1RCTFMgfHwNCi0Jc3JjaW5mby0+cXVhbnRfdGJsX3B0cnNbdGJsbm9dID09IE5VTEwpDQotICAgICAgRVJSRVhJVDEoZHN0aW5mbywgSkVSUl9OT19RVUFOVF9UQUJMRSwgdGJsbm8pOw0KLSAgICBzbG90X3F1YW50ID0gc3JjaW5mby0+cXVhbnRfdGJsX3B0cnNbdGJsbm9dOw0KLSAgICBjX3F1YW50ID0gaW5jb21wLT5xdWFudF90YWJsZTsNCi0gICAgaWYgKGNfcXVhbnQgIT0gTlVMTCkgew0KLSAgICAgIGZvciAoY29lZmkgPSAwOyBjb2VmaSA8IERDVFNJWkUyOyBjb2VmaSsrKSB7DQotCWlmIChjX3F1YW50LT5xdWFudHZhbFtjb2VmaV0gIT0gc2xvdF9xdWFudC0+cXVhbnR2YWxbY29lZmldKQ0KLQkgIEVSUkVYSVQxKGRzdGluZm8sIEpFUlJfTUlTTUFUQ0hFRF9RVUFOVF9UQUJMRSwgdGJsbm8pOw0KLSAgICAgIH0NCi0gICAgfQ0KLSAgICAvKiBOb3RlOiB3ZSBkbyBub3QgY29weSB0aGUgc291cmNlJ3MgSHVmZm1hbiB0YWJsZSBhc3NpZ25tZW50czsNCi0gICAgICogaW5zdGVhZCB3ZSByZWx5IG9uIGpwZWdfc2V0X2NvbG9yc3BhY2UgdG8gaGF2ZSBtYWRlIGEgc3VpdGFibGUgY2hvaWNlLg0KLSAgICAgKi8NCi0gIH0NCi0gIC8qIEFsc28gY29weSBKRklGIHZlcnNpb24gYW5kIHJlc29sdXRpb24gaW5mb3JtYXRpb24sIGlmIGF2YWlsYWJsZS4NCi0gICAqIFN0cmljdGx5IHNwZWFraW5nIHRoaXMgaXNuJ3QgImNyaXRpY2FsIiBpbmZvLCBidXQgaXQncyBuZWFybHkNCi0gICAqIGFsd2F5cyBhcHByb3ByaWF0ZSB0byBjb3B5IGl0IGlmIGF2YWlsYWJsZS4gIEluIHBhcnRpY3VsYXIsDQotICAgKiBpZiB0aGUgYXBwbGljYXRpb24gY2hvb3NlcyB0byBjb3B5IEpGSUYgMS4wMiBleHRlbnNpb24gbWFya2VycyBmcm9tDQotICAgKiB0aGUgc291cmNlIGZpbGUsIHdlIG5lZWQgdG8gY29weSB0aGUgdmVyc2lvbiB0byBtYWtlIHN1cmUgd2UgZG9uJ3QNCi0gICAqIGVtaXQgYSBmaWxlIHRoYXQgaGFzIDEuMDIgZXh0ZW5zaW9ucyBidXQgYSBjbGFpbWVkIHZlcnNpb24gb2YgMS4wMS4NCi0gICAqIFdlIHdpbGwgKm5vdCosIGhvd2V2ZXIsIGNvcHkgdmVyc2lvbiBpbmZvIGZyb20gbWlzbGFiZWxlZCAiMi4wMSIgZmlsZXMuDQotICAgKi8NCi0gIGlmIChzcmNpbmZvLT5zYXdfSkZJRl9tYXJrZXIpIHsNCi0gICAgaWYgKHNyY2luZm8tPkpGSUZfbWFqb3JfdmVyc2lvbiA9PSAxKSB7DQotICAgICAgZHN0aW5mby0+SkZJRl9tYWpvcl92ZXJzaW9uID0gc3JjaW5mby0+SkZJRl9tYWpvcl92ZXJzaW9uOw0KLSAgICAgIGRzdGluZm8tPkpGSUZfbWlub3JfdmVyc2lvbiA9IHNyY2luZm8tPkpGSUZfbWlub3JfdmVyc2lvbjsNCi0gICAgfQ0KLSAgICBkc3RpbmZvLT5kZW5zaXR5X3VuaXQgPSBzcmNpbmZvLT5kZW5zaXR5X3VuaXQ7DQotICAgIGRzdGluZm8tPlhfZGVuc2l0eSA9IHNyY2luZm8tPlhfZGVuc2l0eTsNCi0gICAgZHN0aW5mby0+WV9kZW5zaXR5ID0gc3JjaW5mby0+WV9kZW5zaXR5Ow0KLSAgfQ0KLX0NCi0NCi0NCi0vKg0KLSAqIE1hc3RlciBzZWxlY3Rpb24gb2YgY29tcHJlc3Npb24gbW9kdWxlcyBmb3IgdHJhbnNjb2RpbmcuDQotICogVGhpcyBzdWJzdGl0dXRlcyBmb3IgamNpbml0LmMncyBpbml0aWFsaXphdGlvbiBvZiB0aGUgZnVsbCBjb21wcmVzc29yLg0KLSAqLw0KLQ0KLUxPQ0FMKHZvaWQpDQotdHJhbnNlbmNvZGVfbWFzdGVyX3NlbGVjdGlvbiAoal9jb21wcmVzc19wdHIgY2luZm8sDQotCQkJICAgICAganZpcnRfYmFycmF5X3B0ciAqIGNvZWZfYXJyYXlzKQ0KLXsNCi0gIC8qIEFsdGhvdWdoIHdlIGRvbid0IGFjdHVhbGx5IHVzZSBpbnB1dF9jb21wb25lbnRzIGZvciB0cmFuc2NvZGluZywNCi0gICAqIGpjbWFzdGVyLmMncyBpbml0aWFsX3NldHVwIHdpbGwgY29tcGxhaW4gaWYgaW5wdXRfY29tcG9uZW50cyBpcyAwLg0KLSAgICovDQotICBjaW5mby0+aW5wdXRfY29tcG9uZW50cyA9IDE7DQotICAvKiBJbml0aWFsaXplIG1hc3RlciBjb250cm9sIChpbmNsdWRlcyBwYXJhbWV0ZXIgY2hlY2tpbmcvcHJvY2Vzc2luZykgKi8NCi0gIGppbml0X2NfbWFzdGVyX2NvbnRyb2woY2luZm8sIFRSVUUgLyogdHJhbnNjb2RlIG9ubHkgKi8pOw0KLQ0KLSAgLyogRW50cm9weSBlbmNvZGluZzogZWl0aGVyIEh1ZmZtYW4gb3IgYXJpdGhtZXRpYyBjb2RpbmcuICovDQotICBpZiAoY2luZm8tPmFyaXRoX2NvZGUpIHsNCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9BUklUSF9OT1RJTVBMKTsNCi0gIH0gZWxzZSB7DQotICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkgew0KLSNpZmRlZiBDX1BST0dSRVNTSVZFX1NVUFBPUlRFRA0KLSAgICAgIGppbml0X3BodWZmX2VuY29kZXIoY2luZm8pOw0KLSNlbHNlDQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOw0KLSNlbmRpZg0KLSAgICB9IGVsc2UNCi0gICAgICBqaW5pdF9odWZmX2VuY29kZXIoY2luZm8pOw0KLSAgfQ0KLQ0KLSAgLyogV2UgbmVlZCBhIHNwZWNpYWwgY29lZmZpY2llbnQgYnVmZmVyIGNvbnRyb2xsZXIuICovDQotICB0cmFuc2VuY29kZV9jb2VmX2NvbnRyb2xsZXIoY2luZm8sIGNvZWZfYXJyYXlzKTsNCi0NCi0gIGppbml0X21hcmtlcl93cml0ZXIoY2luZm8pOw0KLQ0KLSAgLyogV2UgY2FuIG5vdyB0ZWxsIHRoZSBtZW1vcnkgbWFuYWdlciB0byBhbGxvY2F0ZSB2aXJ0dWFsIGFycmF5cy4gKi8NCi0gICgqY2luZm8tPm1lbS0+cmVhbGl6ZV92aXJ0X2FycmF5cykgKChqX2NvbW1vbl9wdHIpIGNpbmZvKTsNCi0NCi0gIC8qIFdyaXRlIHRoZSBkYXRhc3RyZWFtIGhlYWRlciAoU09JLCBKRklGKSBpbW1lZGlhdGVseS4NCi0gICAqIEZyYW1lIGFuZCBzY2FuIGhlYWRlcnMgYXJlIHBvc3Rwb25lZCB0aWxsIGxhdGVyLg0KLSAgICogVGhpcyBsZXRzIGFwcGxpY2F0aW9uIGluc2VydCBzcGVjaWFsIG1hcmtlcnMgYWZ0ZXIgdGhlIFNPSS4NCi0gICAqLw0KLSAgKCpjaW5mby0+bWFya2VyLT53cml0ZV9maWxlX2hlYWRlcikgKGNpbmZvKTsNCi19DQotDQotDQotLyoNCi0gKiBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgaXMgYSBzcGVjaWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjb2VmZmljaWVudA0KLSAqIGJ1ZmZlciBjb250cm9sbGVyLiAgVGhpcyBpcyBzaW1pbGFyIHRvIGpjY29lZmN0LmMsIGJ1dCBpdCBoYW5kbGVzIG9ubHkNCi0gKiBvdXRwdXQgZnJvbSBwcmVzdXBwbGllZCB2aXJ0dWFsIGFycmF5cy4gIEZ1cnRoZXJtb3JlLCB3ZSBnZW5lcmF0ZSBhbnkNCi0gKiBkdW1teSBwYWRkaW5nIGJsb2NrcyBvbi10aGUtZmx5IHJhdGhlciB0aGFuIGV4cGVjdGluZyB0aGVtIHRvIGJlIHByZXNlbnQNCi0gKiBpbiB0aGUgYXJyYXlzLg0KLSAqLw0KLQ0KLS8qIFByaXZhdGUgYnVmZmVyIGNvbnRyb2xsZXIgb2JqZWN0ICovDQotDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgc3RydWN0IGpwZWdfY19jb2VmX2NvbnRyb2xsZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovDQotDQotICBKRElNRU5TSU9OIGlNQ1Vfcm93X251bTsJLyogaU1DVSByb3cgIyB3aXRoaW4gaW1hZ2UgKi8NCi0gIEpESU1FTlNJT04gbWN1X2N0cjsJCS8qIGNvdW50cyBNQ1VzIHByb2Nlc3NlZCBpbiBjdXJyZW50IHJvdyAqLw0KLSAgaW50IE1DVV92ZXJ0X29mZnNldDsJCS8qIGNvdW50cyBNQ1Ugcm93cyB3aXRoaW4gaU1DVSByb3cgKi8NCi0gIGludCBNQ1Vfcm93c19wZXJfaU1DVV9yb3c7CS8qIG51bWJlciBvZiBzdWNoIHJvd3MgbmVlZGVkICovDQotDQotICAvKiBWaXJ0dWFsIGJsb2NrIGFycmF5IGZvciBlYWNoIGNvbXBvbmVudC4gKi8NCi0gIGp2aXJ0X2JhcnJheV9wdHIgKiB3aG9sZV9pbWFnZTsNCi0NCi0gIC8qIFdvcmtzcGFjZSBmb3IgY29uc3RydWN0aW5nIGR1bW15IGJsb2NrcyBhdCByaWdodC9ib3R0b20gZWRnZXMuICovDQotICBKQkxPQ0tST1cgZHVtbXlfYnVmZmVyW0NfTUFYX0JMT0NLU19JTl9NQ1VdOw0KLX0gbXlfY29lZl9jb250cm9sbGVyOw0KLQ0KLXR5cGVkZWYgbXlfY29lZl9jb250cm9sbGVyICogbXlfY29lZl9wdHI7DQotDQotDQotTE9DQUwodm9pZCkNCi1zdGFydF9pTUNVX3JvdyAoal9jb21wcmVzc19wdHIgY2luZm8pDQotLyogUmVzZXQgd2l0aGluLWlNQ1Utcm93IGNvdW50ZXJzIGZvciBhIG5ldyByb3cgKi8NCi17DQotICBteV9jb2VmX3B0ciBjb2VmID0gKG15X2NvZWZfcHRyKSBjaW5mby0+Y29lZjsNCi0NCi0gIC8qIEluIGFuIGludGVybGVhdmVkIHNjYW4sIGFuIE1DVSByb3cgaXMgdGhlIHNhbWUgYXMgYW4gaU1DVSByb3cuDQotICAgKiBJbiBhIG5vbmludGVybGVhdmVkIHNjYW4sIGFuIGlNQ1Ugcm93IGhhcyB2X3NhbXBfZmFjdG9yIE1DVSByb3dzLg0KLSAgICogQnV0IGF0IHRoZSBib3R0b20gb2YgdGhlIGltYWdlLCBwcm9jZXNzIG9ubHkgd2hhdCdzIGxlZnQuDQotICAgKi8NCi0gIGlmIChjaW5mby0+Y29tcHNfaW5fc2NhbiA+IDEpIHsNCi0gICAgY29lZi0+TUNVX3Jvd3NfcGVyX2lNQ1Vfcm93ID0gMTsNCi0gIH0gZWxzZSB7DQotICAgIGlmIChjb2VmLT5pTUNVX3Jvd19udW0gPCAoY2luZm8tPnRvdGFsX2lNQ1Vfcm93cy0xKSkNCi0gICAgICBjb2VmLT5NQ1Vfcm93c19wZXJfaU1DVV9yb3cgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1swXS0+dl9zYW1wX2ZhY3RvcjsNCi0gICAgZWxzZQ0KLSAgICAgIGNvZWYtPk1DVV9yb3dzX3Blcl9pTUNVX3JvdyA9IGNpbmZvLT5jdXJfY29tcF9pbmZvWzBdLT5sYXN0X3Jvd19oZWlnaHQ7DQotICB9DQotDQotICBjb2VmLT5tY3VfY3RyID0gMDsNCi0gIGNvZWYtPk1DVV92ZXJ0X29mZnNldCA9IDA7DQotfQ0KLQ0KLQ0KLS8qDQotICogSW5pdGlhbGl6ZSBmb3IgYSBwcm9jZXNzaW5nIHBhc3MuDQotICovDQotDQotTUVUSE9EREVGKHZvaWQpDQotc3RhcnRfcGFzc19jb2VmIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSl9CVUZfTU9ERSBwYXNzX21vZGUpDQotew0KLSAgbXlfY29lZl9wdHIgY29lZiA9IChteV9jb2VmX3B0cikgY2luZm8tPmNvZWY7DQotDQotICBpZiAocGFzc19tb2RlICE9IEpCVUZfQ1JBTktfREVTVCkNCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOw0KLQ0KLSAgY29lZi0+aU1DVV9yb3dfbnVtID0gMDsNCi0gIHN0YXJ0X2lNQ1Vfcm93KGNpbmZvKTsNCi19DQotDQotDQotLyoNCi0gKiBQcm9jZXNzIHNvbWUgZGF0YS4NCi0gKiBXZSBwcm9jZXNzIHRoZSBlcXVpdmFsZW50IG9mIG9uZSBmdWxseSBpbnRlcmxlYXZlZCBNQ1Ugcm93ICgiaU1DVSIgcm93KQ0KLSAqIHBlciBjYWxsLCBpZSwgdl9zYW1wX2ZhY3RvciBibG9jayByb3dzIGZvciBlYWNoIGNvbXBvbmVudCBpbiB0aGUgc2Nhbi4NCi0gKiBUaGUgZGF0YSBpcyBvYnRhaW5lZCBmcm9tIHRoZSB2aXJ0dWFsIGFycmF5cyBhbmQgZmVkIHRvIHRoZSBlbnRyb3B5IGNvZGVyLg0KLSAqIFJldHVybnMgVFJVRSBpZiB0aGUgaU1DVSByb3cgaXMgY29tcGxldGVkLCBGQUxTRSBpZiBzdXNwZW5kZWQuDQotICoNCi0gKiBOQjogaW5wdXRfYnVmIGlzIGlnbm9yZWQ7IGl0IGlzIGxpa2VseSB0byBiZSBhIE5VTEwgcG9pbnRlci4NCi0gKi8NCi0NCi1NRVRIT0RERUYoYm9vbGVhbikNCi1jb21wcmVzc19vdXRwdXQgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIGlucHV0X2J1ZikNCi17DQotICBteV9jb2VmX3B0ciBjb2VmID0gKG15X2NvZWZfcHRyKSBjaW5mby0+Y29lZjsNCi0gIEpESU1FTlNJT04gTUNVX2NvbF9udW07CS8qIGluZGV4IG9mIGN1cnJlbnQgTUNVIHdpdGhpbiByb3cgKi8NCi0gIEpESU1FTlNJT04gbGFzdF9NQ1VfY29sID0gY2luZm8tPk1DVXNfcGVyX3JvdyAtIDE7DQotICBKRElNRU5TSU9OIGxhc3RfaU1DVV9yb3cgPSBjaW5mby0+dG90YWxfaU1DVV9yb3dzIC0gMTsNCi0gIGludCBibGtuLCBjaSwgeGluZGV4LCB5aW5kZXgsIHlvZmZzZXQsIGJsb2NrY250Ow0KLSAgSkRJTUVOU0lPTiBzdGFydF9jb2w7DQotICBKQkxPQ0tBUlJBWSBidWZmZXJbTUFYX0NPTVBTX0lOX1NDQU5dOw0KLSAgSkJMT0NLUk9XIE1DVV9idWZmZXJbQ19NQVhfQkxPQ0tTX0lOX01DVV07DQotICBKQkxPQ0tST1cgYnVmZmVyX3B0cjsNCi0gIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7DQotDQotICAvKiBBbGlnbiB0aGUgdmlydHVhbCBidWZmZXJzIGZvciB0aGUgY29tcG9uZW50cyB1c2VkIGluIHRoaXMgc2Nhbi4gKi8NCi0gIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7DQotICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07DQotICAgIGJ1ZmZlcltjaV0gPSAoKmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkNCi0gICAgICAoKGpfY29tbW9uX3B0cikgY2luZm8sIGNvZWYtPndob2xlX2ltYWdlW2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF0sDQotICAgICAgIGNvZWYtPmlNQ1Vfcm93X251bSAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsDQotICAgICAgIChKRElNRU5TSU9OKSBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBGQUxTRSk7DQotICB9DQotDQotICAvKiBMb29wIHRvIHByb2Nlc3Mgb25lIHdob2xlIGlNQ1Ugcm93ICovDQotICBmb3IgKHlvZmZzZXQgPSBjb2VmLT5NQ1VfdmVydF9vZmZzZXQ7IHlvZmZzZXQgPCBjb2VmLT5NQ1Vfcm93c19wZXJfaU1DVV9yb3c7DQotICAgICAgIHlvZmZzZXQrKykgew0KLSAgICBmb3IgKE1DVV9jb2xfbnVtID0gY29lZi0+bWN1X2N0cjsgTUNVX2NvbF9udW0gPCBjaW5mby0+TUNVc19wZXJfcm93Ow0KLQkgTUNVX2NvbF9udW0rKykgew0KLSAgICAgIC8qIENvbnN0cnVjdCBsaXN0IG9mIHBvaW50ZXJzIHRvIERDVCBibG9ja3MgYmVsb25naW5nIHRvIHRoaXMgTUNVICovDQotICAgICAgYmxrbiA9IDA7CQkJLyogaW5kZXggb2YgY3VycmVudCBEQ1QgYmxvY2sgd2l0aGluIE1DVSAqLw0KLSAgICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7DQotCWNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07DQotCXN0YXJ0X2NvbCA9IE1DVV9jb2xfbnVtICogY29tcHB0ci0+TUNVX3dpZHRoOw0KLQlibG9ja2NudCA9IChNQ1VfY29sX251bSA8IGxhc3RfTUNVX2NvbCkgPyBjb21wcHRyLT5NQ1Vfd2lkdGgNCi0JCQkJCQk6IGNvbXBwdHItPmxhc3RfY29sX3dpZHRoOw0KLQlmb3IgKHlpbmRleCA9IDA7IHlpbmRleCA8IGNvbXBwdHItPk1DVV9oZWlnaHQ7IHlpbmRleCsrKSB7DQotCSAgaWYgKGNvZWYtPmlNQ1Vfcm93X251bSA8IGxhc3RfaU1DVV9yb3cgfHwNCi0JICAgICAgeWluZGV4K3lvZmZzZXQgPCBjb21wcHRyLT5sYXN0X3Jvd19oZWlnaHQpIHsNCi0JICAgIC8qIEZpbGwgaW4gcG9pbnRlcnMgdG8gcmVhbCBibG9ja3MgaW4gdGhpcyByb3cgKi8NCi0JICAgIGJ1ZmZlcl9wdHIgPSBidWZmZXJbY2ldW3lpbmRleCt5b2Zmc2V0XSArIHN0YXJ0X2NvbDsNCi0JICAgIGZvciAoeGluZGV4ID0gMDsgeGluZGV4IDwgYmxvY2tjbnQ7IHhpbmRleCsrKQ0KLQkgICAgICBNQ1VfYnVmZmVyW2Jsa24rK10gPSBidWZmZXJfcHRyKys7DQotCSAgfSBlbHNlIHsNCi0JICAgIC8qIEF0IGJvdHRvbSBvZiBpbWFnZSwgbmVlZCBhIHdob2xlIHJvdyBvZiBkdW1teSBibG9ja3MgKi8NCi0JICAgIHhpbmRleCA9IDA7DQotCSAgfQ0KLQkgIC8qIEZpbGwgaW4gYW55IGR1bW15IGJsb2NrcyBuZWVkZWQgaW4gdGhpcyByb3cuDQotCSAgICogRHVtbXkgYmxvY2tzIGFyZSBmaWxsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGluIGpjY29lZmN0LmM6DQotCSAgICogYWxsIHplcm9lcyBpbiB0aGUgQUMgZW50cmllcywgREMgZW50cmllcyBlcXVhbCB0byBwcmV2aW91cw0KLQkgICAqIGJsb2NrJ3MgREMgdmFsdWUuICBUaGUgaW5pdCByb3V0aW5lIGhhcyBhbHJlYWR5IHplcm9lZCB0aGUNCi0JICAgKiBBQyBlbnRyaWVzLCBzbyB3ZSBuZWVkIG9ubHkgc2V0IHRoZSBEQyBlbnRyaWVzIGNvcnJlY3RseS4NCi0JICAgKi8NCi0JICBmb3IgKDsgeGluZGV4IDwgY29tcHB0ci0+TUNVX3dpZHRoOyB4aW5kZXgrKykgew0KLQkgICAgTUNVX2J1ZmZlcltibGtuXSA9IGNvZWYtPmR1bW15X2J1ZmZlcltibGtuXTsNCi0JICAgIE1DVV9idWZmZXJbYmxrbl1bMF1bMF0gPSBNQ1VfYnVmZmVyW2Jsa24tMV1bMF1bMF07DQotCSAgICBibGtuKys7DQotCSAgfQ0KLQl9DQotICAgICAgfQ0KLSAgICAgIC8qIFRyeSB0byB3cml0ZSB0aGUgTUNVLiAqLw0KLSAgICAgIGlmICghICgqY2luZm8tPmVudHJvcHktPmVuY29kZV9tY3UpIChjaW5mbywgTUNVX2J1ZmZlcikpIHsNCi0JLyogU3VzcGVuc2lvbiBmb3JjZWQ7IHVwZGF0ZSBzdGF0ZSBjb3VudGVycyBhbmQgZXhpdCAqLw0KLQljb2VmLT5NQ1VfdmVydF9vZmZzZXQgPSB5b2Zmc2V0Ow0KLQljb2VmLT5tY3VfY3RyID0gTUNVX2NvbF9udW07DQotCXJldHVybiBGQUxTRTsNCi0gICAgICB9DQotICAgIH0NCi0gICAgLyogQ29tcGxldGVkIGFuIE1DVSByb3csIGJ1dCBwZXJoYXBzIG5vdCBhbiBpTUNVIHJvdyAqLw0KLSAgICBjb2VmLT5tY3VfY3RyID0gMDsNCi0gIH0NCi0gIC8qIENvbXBsZXRlZCB0aGUgaU1DVSByb3csIGFkdmFuY2UgY291bnRlcnMgZm9yIG5leHQgb25lICovDQotICBjb2VmLT5pTUNVX3Jvd19udW0rKzsNCi0gIHN0YXJ0X2lNQ1Vfcm93KGNpbmZvKTsNCi0gIHJldHVybiBUUlVFOw0KLX0NCi0NCi0NCi0vKg0KLSAqIEluaXRpYWxpemUgY29lZmZpY2llbnQgYnVmZmVyIGNvbnRyb2xsZXIuDQotICoNCi0gKiBFYWNoIHBhc3NlZCBjb2VmZmljaWVudCBhcnJheSBtdXN0IGJlIHRoZSByaWdodCBzaXplIGZvciB0aGF0DQotICogY29lZmZpY2llbnQ6IHdpZHRoX2luX2Jsb2NrcyB3aWRlIGFuZCBoZWlnaHRfaW5fYmxvY2tzIGhpZ2gsDQotICogd2l0aCB1bml0aGVpZ2h0IGF0IGxlYXN0IHZfc2FtcF9mYWN0b3IuDQotICovDQotDQotTE9DQUwodm9pZCkNCi10cmFuc2VuY29kZV9jb2VmX2NvbnRyb2xsZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCSAgICAganZpcnRfYmFycmF5X3B0ciAqIGNvZWZfYXJyYXlzKQ0KLXsNCi0gIG15X2NvZWZfcHRyIGNvZWY7DQotICBKQkxPQ0tST1cgYnVmZmVyOw0KLSAgaW50IGk7DQotDQotICBjb2VmID0gKG15X2NvZWZfcHRyKQ0KLSAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQlTSVpFT0YobXlfY29lZl9jb250cm9sbGVyKSk7DQotICBjaW5mby0+Y29lZiA9IChzdHJ1Y3QganBlZ19jX2NvZWZfY29udHJvbGxlciAqKSBjb2VmOw0KLSAgY29lZi0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX2NvZWY7DQotICBjb2VmLT5wdWIuY29tcHJlc3NfZGF0YSA9IGNvbXByZXNzX291dHB1dDsNCi0NCi0gIC8qIFNhdmUgcG9pbnRlciB0byB2aXJ0dWFsIGFycmF5cyAqLw0KLSAgY29lZi0+d2hvbGVfaW1hZ2UgPSBjb2VmX2FycmF5czsNCi0NCi0gIC8qIEFsbG9jYXRlIGFuZCBwcmUtemVybyBzcGFjZSBmb3IgZHVtbXkgRENUIGJsb2Nrcy4gKi8NCi0gIGJ1ZmZlciA9IChKQkxPQ0tST1cpDQotICAgICgqY2luZm8tPm1lbS0+YWxsb2NfbGFyZ2UpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsDQotCQkJCUNfTUFYX0JMT0NLU19JTl9NQ1UgKiBTSVpFT0YoSkJMT0NLKSk7DQotICBqemVyb19mYXIoKHZvaWQgRkFSICopIGJ1ZmZlciwgQ19NQVhfQkxPQ0tTX0lOX01DVSAqIFNJWkVPRihKQkxPQ0spKTsNCi0gIGZvciAoaSA9IDA7IGkgPCBDX01BWF9CTE9DS1NfSU5fTUNVOyBpKyspIHsNCi0gICAgY29lZi0+ZHVtbXlfYnVmZmVyW2ldID0gYnVmZmVyICsgaTsNCi0gIH0NCi19DQotDQotI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fDQorI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykKKy8qCisgKiBqY3RyYW5zLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCwgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBsaWJyYXJ5IHJvdXRpbmVzIGZvciB0cmFuc2NvZGluZyBjb21wcmVzc2lvbiwKKyAqIHRoYXQgaXMsIHdyaXRpbmcgcmF3IERDVCBjb2VmZmljaWVudCBhcnJheXMgdG8gYW4gb3V0cHV0IEpQRUcgZmlsZS4KKyAqIFRoZSByb3V0aW5lcyBpbiBqY2FwaW1pbi5jIHdpbGwgYWxzbyBiZSBuZWVkZWQgYnkgYSB0cmFuc2NvZGVyLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworTE9DQUwodm9pZCkgdHJhbnNlbmNvZGVfbWFzdGVyX3NlbGVjdGlvbgorCUpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGp2aXJ0X2JhcnJheV9wdHIgKiBjb2VmX2FycmF5cykpOworTE9DQUwodm9pZCkgdHJhbnNlbmNvZGVfY29lZl9jb250cm9sbGVyCisJSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywganZpcnRfYmFycmF5X3B0ciAqIGNvZWZfYXJyYXlzKSk7CisKKworLyoKKyAqIENvbXByZXNzaW9uIGluaXRpYWxpemF0aW9uIGZvciB3cml0aW5nIHJhdy1jb2VmZmljaWVudCBkYXRhLgorICogQmVmb3JlIGNhbGxpbmcgdGhpcywgYWxsIHBhcmFtZXRlcnMgYW5kIGEgZGF0YSBkZXN0aW5hdGlvbiBtdXN0IGJlIHNldCB1cC4KKyAqIENhbGwganBlZ19maW5pc2hfY29tcHJlc3MoKSB0byBhY3R1YWxseSB3cml0ZSB0aGUgZGF0YS4KKyAqCisgKiBUaGUgbnVtYmVyIG9mIHBhc3NlZCB2aXJ0dWFsIGFycmF5cyBtdXN0IG1hdGNoIGNpbmZvLT5udW1fY29tcG9uZW50cy4KKyAqIE5vdGUgdGhhdCB0aGUgdmlydHVhbCBhcnJheXMgbmVlZCBub3QgYmUgZmlsbGVkIG9yIGV2ZW4gcmVhbGl6ZWQgYXQKKyAqIHRoZSB0aW1lIHdyaXRlX2NvZWZmaWNpZW50cyBpcyBjYWxsZWQ7IGluZGVlZCwgaWYgdGhlIHZpcnR1YWwgYXJyYXlzCisgKiB3ZXJlIHJlcXVlc3RlZCBmcm9tIHRoaXMgY29tcHJlc3Npb24gb2JqZWN0J3MgbWVtb3J5IG1hbmFnZXIsIHRoZXkKKyAqIHR5cGljYWxseSB3aWxsIGJlIHJlYWxpemVkIGR1cmluZyB0aGlzIHJvdXRpbmUgYW5kIGZpbGxlZCBhZnRlcndhcmRzLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ193cml0ZV9jb2VmZmljaWVudHMgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqdmlydF9iYXJyYXlfcHRyICogY29lZl9hcnJheXMpCit7CisgIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IENTVEFURV9TVEFSVCkKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOworICAvKiBNYXJrIGFsbCB0YWJsZXMgdG8gYmUgd3JpdHRlbiAqLworICBqcGVnX3N1cHByZXNzX3RhYmxlcyhjaW5mbywgRkFMU0UpOworICAvKiAoUmUpaW5pdGlhbGl6ZSBlcnJvciBtZ3IgYW5kIGRlc3RpbmF0aW9uIG1vZHVsZXMgKi8KKyAgKCpjaW5mby0+ZXJyLT5yZXNldF9lcnJvcl9tZ3IpICgoal9jb21tb25fcHRyKSBjaW5mbyk7CisgICgqY2luZm8tPmRlc3QtPmluaXRfZGVzdGluYXRpb24pIChjaW5mbyk7CisgIC8qIFBlcmZvcm0gbWFzdGVyIHNlbGVjdGlvbiBvZiBhY3RpdmUgbW9kdWxlcyAqLworICB0cmFuc2VuY29kZV9tYXN0ZXJfc2VsZWN0aW9uKGNpbmZvLCBjb2VmX2FycmF5cyk7CisgIC8qIFdhaXQgZm9yIGpwZWdfZmluaXNoX2NvbXByZXNzKCkgY2FsbCAqLworICBjaW5mby0+bmV4dF9zY2FubGluZSA9IDA7CS8qIHNvIGpwZWdfd3JpdGVfbWFya2VyIHdvcmtzICovCisgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBDU1RBVEVfV1JDT0VGUzsKK30KKworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgY29tcHJlc3Npb24gb2JqZWN0IHdpdGggZGVmYXVsdCBwYXJhbWV0ZXJzLAorICogdGhlbiBjb3B5IGZyb20gdGhlIHNvdXJjZSBvYmplY3QgYWxsIHBhcmFtZXRlcnMgbmVlZGVkIGZvciBsb3NzbGVzcworICogdHJhbnNjb2RpbmcuICBQYXJhbWV0ZXJzIHRoYXQgY2FuIGJlIHZhcmllZCB3aXRob3V0IGxvc3MgKHN1Y2ggYXMKKyAqIHNjYW4gc2NyaXB0IGFuZCBIdWZmbWFuIG9wdGltaXphdGlvbikgYXJlIGxlZnQgaW4gdGhlaXIgZGVmYXVsdCBzdGF0ZXMuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2NvcHlfY3JpdGljYWxfcGFyYW1ldGVycyAoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLAorCQkJICAgICAgIGpfY29tcHJlc3NfcHRyIGRzdGluZm8pCit7CisgIEpRVUFOVF9UQkwgKiogcXRibHB0cjsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqaW5jb21wLCAqb3V0Y29tcDsKKyAgSlFVQU5UX1RCTCAqY19xdWFudCwgKnNsb3RfcXVhbnQ7CisgIGludCB0YmxubywgY2ksIGNvZWZpOworCisgIC8qIFNhZmV0eSBjaGVjayB0byBlbnN1cmUgc3RhcnRfY29tcHJlc3Mgbm90IGNhbGxlZCB5ZXQuICovCisgIGlmIChkc3RpbmZvLT5nbG9iYWxfc3RhdGUgIT0gQ1NUQVRFX1NUQVJUKQorICAgIEVSUkVYSVQxKGRzdGluZm8sIEpFUlJfQkFEX1NUQVRFLCBkc3RpbmZvLT5nbG9iYWxfc3RhdGUpOworICAvKiBDb3B5IGZ1bmRhbWVudGFsIGltYWdlIGRpbWVuc2lvbnMgKi8KKyAgZHN0aW5mby0+aW1hZ2Vfd2lkdGggPSBzcmNpbmZvLT5pbWFnZV93aWR0aDsKKyAgZHN0aW5mby0+aW1hZ2VfaGVpZ2h0ID0gc3JjaW5mby0+aW1hZ2VfaGVpZ2h0OworICBkc3RpbmZvLT5pbnB1dF9jb21wb25lbnRzID0gc3JjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgIGRzdGluZm8tPmluX2NvbG9yX3NwYWNlID0gc3JjaW5mby0+anBlZ19jb2xvcl9zcGFjZTsKKyAgLyogSW5pdGlhbGl6ZSBhbGwgcGFyYW1ldGVycyB0byBkZWZhdWx0IHZhbHVlcyAqLworICBqcGVnX3NldF9kZWZhdWx0cyhkc3RpbmZvKTsKKyAgLyoganBlZ19zZXRfZGVmYXVsdHMgbWF5IGNob29zZSB3cm9uZyBjb2xvcnNwYWNlLCBlZyBZQ2JDciBpZiBpbnB1dCBpcyBSR0IuCisgICAqIEZpeCBpdCB0byBnZXQgdGhlIHJpZ2h0IGhlYWRlciBtYXJrZXJzIGZvciB0aGUgaW1hZ2UgY29sb3JzcGFjZS4KKyAgICovCisgIGpwZWdfc2V0X2NvbG9yc3BhY2UoZHN0aW5mbywgc3JjaW5mby0+anBlZ19jb2xvcl9zcGFjZSk7CisgIGRzdGluZm8tPmRhdGFfcHJlY2lzaW9uID0gc3JjaW5mby0+ZGF0YV9wcmVjaXNpb247CisgIGRzdGluZm8tPkNDSVI2MDFfc2FtcGxpbmcgPSBzcmNpbmZvLT5DQ0lSNjAxX3NhbXBsaW5nOworICAvKiBDb3B5IHRoZSBzb3VyY2UncyBxdWFudGl6YXRpb24gdGFibGVzLiAqLworICBmb3IgKHRibG5vID0gMDsgdGJsbm8gPCBOVU1fUVVBTlRfVEJMUzsgdGJsbm8rKykgeworICAgIGlmIChzcmNpbmZvLT5xdWFudF90YmxfcHRyc1t0Ymxub10gIT0gTlVMTCkgeworICAgICAgcXRibHB0ciA9ICYgZHN0aW5mby0+cXVhbnRfdGJsX3B0cnNbdGJsbm9dOworICAgICAgaWYgKCpxdGJscHRyID09IE5VTEwpCisJKnF0YmxwdHIgPSBqcGVnX2FsbG9jX3F1YW50X3RhYmxlKChqX2NvbW1vbl9wdHIpIGRzdGluZm8pOworICAgICAgTUVNQ09QWSgoKnF0YmxwdHIpLT5xdWFudHZhbCwKKwkgICAgICBzcmNpbmZvLT5xdWFudF90YmxfcHRyc1t0Ymxub10tPnF1YW50dmFsLAorCSAgICAgIFNJWkVPRigoKnF0YmxwdHIpLT5xdWFudHZhbCkpOworICAgICAgKCpxdGJscHRyKS0+c2VudF90YWJsZSA9IEZBTFNFOworICAgIH0KKyAgfQorICAvKiBDb3B5IHRoZSBzb3VyY2UncyBwZXItY29tcG9uZW50IGluZm8uCisgICAqIE5vdGUgd2UgYXNzdW1lIGpwZWdfc2V0X2RlZmF1bHRzIGhhcyBhbGxvY2F0ZWQgdGhlIGRlc3QgY29tcF9pbmZvIGFycmF5LgorICAgKi8KKyAgZHN0aW5mby0+bnVtX2NvbXBvbmVudHMgPSBzcmNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgaWYgKGRzdGluZm8tPm51bV9jb21wb25lbnRzIDwgMSB8fCBkc3RpbmZvLT5udW1fY29tcG9uZW50cyA+IE1BWF9DT01QT05FTlRTKQorICAgIEVSUkVYSVQyKGRzdGluZm8sIEpFUlJfQ09NUE9ORU5UX0NPVU5ULCBkc3RpbmZvLT5udW1fY29tcG9uZW50cywKKwkgICAgIE1BWF9DT01QT05FTlRTKTsKKyAgZm9yIChjaSA9IDAsIGluY29tcCA9IHNyY2luZm8tPmNvbXBfaW5mbywgb3V0Y29tcCA9IGRzdGluZm8tPmNvbXBfaW5mbzsKKyAgICAgICBjaSA8IGRzdGluZm8tPm51bV9jb21wb25lbnRzOyBjaSsrLCBpbmNvbXArKywgb3V0Y29tcCsrKSB7CisgICAgb3V0Y29tcC0+Y29tcG9uZW50X2lkID0gaW5jb21wLT5jb21wb25lbnRfaWQ7CisgICAgb3V0Y29tcC0+aF9zYW1wX2ZhY3RvciA9IGluY29tcC0+aF9zYW1wX2ZhY3RvcjsKKyAgICBvdXRjb21wLT52X3NhbXBfZmFjdG9yID0gaW5jb21wLT52X3NhbXBfZmFjdG9yOworICAgIG91dGNvbXAtPnF1YW50X3RibF9ubyA9IGluY29tcC0+cXVhbnRfdGJsX25vOworICAgIC8qIE1ha2Ugc3VyZSBzYXZlZCBxdWFudGl6YXRpb24gdGFibGUgZm9yIGNvbXBvbmVudCBtYXRjaGVzIHRoZSBxdGFibGUKKyAgICAgKiBzbG90LiAgSWYgbm90LCB0aGUgaW5wdXQgZmlsZSByZS11c2VkIHRoaXMgcXRhYmxlIHNsb3QuCisgICAgICogSUpHIGVuY29kZXIgY3VycmVudGx5IGNhbm5vdCBkdXBsaWNhdGUgdGhpcy4KKyAgICAgKi8KKyAgICB0YmxubyA9IG91dGNvbXAtPnF1YW50X3RibF9ubzsKKyAgICBpZiAodGJsbm8gPCAwIHx8IHRibG5vID49IE5VTV9RVUFOVF9UQkxTIHx8CisJc3JjaW5mby0+cXVhbnRfdGJsX3B0cnNbdGJsbm9dID09IE5VTEwpCisgICAgICBFUlJFWElUMShkc3RpbmZvLCBKRVJSX05PX1FVQU5UX1RBQkxFLCB0Ymxubyk7CisgICAgc2xvdF9xdWFudCA9IHNyY2luZm8tPnF1YW50X3RibF9wdHJzW3RibG5vXTsKKyAgICBjX3F1YW50ID0gaW5jb21wLT5xdWFudF90YWJsZTsKKyAgICBpZiAoY19xdWFudCAhPSBOVUxMKSB7CisgICAgICBmb3IgKGNvZWZpID0gMDsgY29lZmkgPCBEQ1RTSVpFMjsgY29lZmkrKykgeworCWlmIChjX3F1YW50LT5xdWFudHZhbFtjb2VmaV0gIT0gc2xvdF9xdWFudC0+cXVhbnR2YWxbY29lZmldKQorCSAgRVJSRVhJVDEoZHN0aW5mbywgSkVSUl9NSVNNQVRDSEVEX1FVQU5UX1RBQkxFLCB0Ymxubyk7CisgICAgICB9CisgICAgfQorICAgIC8qIE5vdGU6IHdlIGRvIG5vdCBjb3B5IHRoZSBzb3VyY2UncyBIdWZmbWFuIHRhYmxlIGFzc2lnbm1lbnRzOworICAgICAqIGluc3RlYWQgd2UgcmVseSBvbiBqcGVnX3NldF9jb2xvcnNwYWNlIHRvIGhhdmUgbWFkZSBhIHN1aXRhYmxlIGNob2ljZS4KKyAgICAgKi8KKyAgfQorICAvKiBBbHNvIGNvcHkgSkZJRiB2ZXJzaW9uIGFuZCByZXNvbHV0aW9uIGluZm9ybWF0aW9uLCBpZiBhdmFpbGFibGUuCisgICAqIFN0cmljdGx5IHNwZWFraW5nIHRoaXMgaXNuJ3QgImNyaXRpY2FsIiBpbmZvLCBidXQgaXQncyBuZWFybHkKKyAgICogYWx3YXlzIGFwcHJvcHJpYXRlIHRvIGNvcHkgaXQgaWYgYXZhaWxhYmxlLiAgSW4gcGFydGljdWxhciwKKyAgICogaWYgdGhlIGFwcGxpY2F0aW9uIGNob29zZXMgdG8gY29weSBKRklGIDEuMDIgZXh0ZW5zaW9uIG1hcmtlcnMgZnJvbQorICAgKiB0aGUgc291cmNlIGZpbGUsIHdlIG5lZWQgdG8gY29weSB0aGUgdmVyc2lvbiB0byBtYWtlIHN1cmUgd2UgZG9uJ3QKKyAgICogZW1pdCBhIGZpbGUgdGhhdCBoYXMgMS4wMiBleHRlbnNpb25zIGJ1dCBhIGNsYWltZWQgdmVyc2lvbiBvZiAxLjAxLgorICAgKiBXZSB3aWxsICpub3QqLCBob3dldmVyLCBjb3B5IHZlcnNpb24gaW5mbyBmcm9tIG1pc2xhYmVsZWQgIjIuMDEiIGZpbGVzLgorICAgKi8KKyAgaWYgKHNyY2luZm8tPnNhd19KRklGX21hcmtlcikgeworICAgIGlmIChzcmNpbmZvLT5KRklGX21ham9yX3ZlcnNpb24gPT0gMSkgeworICAgICAgZHN0aW5mby0+SkZJRl9tYWpvcl92ZXJzaW9uID0gc3JjaW5mby0+SkZJRl9tYWpvcl92ZXJzaW9uOworICAgICAgZHN0aW5mby0+SkZJRl9taW5vcl92ZXJzaW9uID0gc3JjaW5mby0+SkZJRl9taW5vcl92ZXJzaW9uOworICAgIH0KKyAgICBkc3RpbmZvLT5kZW5zaXR5X3VuaXQgPSBzcmNpbmZvLT5kZW5zaXR5X3VuaXQ7CisgICAgZHN0aW5mby0+WF9kZW5zaXR5ID0gc3JjaW5mby0+WF9kZW5zaXR5OworICAgIGRzdGluZm8tPllfZGVuc2l0eSA9IHNyY2luZm8tPllfZGVuc2l0eTsKKyAgfQorfQorCisKKy8qCisgKiBNYXN0ZXIgc2VsZWN0aW9uIG9mIGNvbXByZXNzaW9uIG1vZHVsZXMgZm9yIHRyYW5zY29kaW5nLgorICogVGhpcyBzdWJzdGl0dXRlcyBmb3IgamNpbml0LmMncyBpbml0aWFsaXphdGlvbiBvZiB0aGUgZnVsbCBjb21wcmVzc29yLgorICovCisKK0xPQ0FMKHZvaWQpCit0cmFuc2VuY29kZV9tYXN0ZXJfc2VsZWN0aW9uIChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCSAgICAgIGp2aXJ0X2JhcnJheV9wdHIgKiBjb2VmX2FycmF5cykKK3sKKyAgLyogQWx0aG91Z2ggd2UgZG9uJ3QgYWN0dWFsbHkgdXNlIGlucHV0X2NvbXBvbmVudHMgZm9yIHRyYW5zY29kaW5nLAorICAgKiBqY21hc3Rlci5jJ3MgaW5pdGlhbF9zZXR1cCB3aWxsIGNvbXBsYWluIGlmIGlucHV0X2NvbXBvbmVudHMgaXMgMC4KKyAgICovCisgIGNpbmZvLT5pbnB1dF9jb21wb25lbnRzID0gMTsKKyAgLyogSW5pdGlhbGl6ZSBtYXN0ZXIgY29udHJvbCAoaW5jbHVkZXMgcGFyYW1ldGVyIGNoZWNraW5nL3Byb2Nlc3NpbmcpICovCisgIGppbml0X2NfbWFzdGVyX2NvbnRyb2woY2luZm8sIFRSVUUgLyogdHJhbnNjb2RlIG9ubHkgKi8pOworCisgIC8qIEVudHJvcHkgZW5jb2Rpbmc6IGVpdGhlciBIdWZmbWFuIG9yIGFyaXRobWV0aWMgY29kaW5nLiAqLworICBpZiAoY2luZm8tPmFyaXRoX2NvZGUpIHsKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0FSSVRIX05PVElNUEwpOworICB9IGVsc2UgeworICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkgeworI2lmZGVmIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVECisgICAgICBqaW5pdF9waHVmZl9lbmNvZGVyKGNpbmZvKTsKKyNlbHNlCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisjZW5kaWYKKyAgICB9IGVsc2UKKyAgICAgIGppbml0X2h1ZmZfZW5jb2RlcihjaW5mbyk7CisgIH0KKworICAvKiBXZSBuZWVkIGEgc3BlY2lhbCBjb2VmZmljaWVudCBidWZmZXIgY29udHJvbGxlci4gKi8KKyAgdHJhbnNlbmNvZGVfY29lZl9jb250cm9sbGVyKGNpbmZvLCBjb2VmX2FycmF5cyk7CisKKyAgamluaXRfbWFya2VyX3dyaXRlcihjaW5mbyk7CisKKyAgLyogV2UgY2FuIG5vdyB0ZWxsIHRoZSBtZW1vcnkgbWFuYWdlciB0byBhbGxvY2F0ZSB2aXJ0dWFsIGFycmF5cy4gKi8KKyAgKCpjaW5mby0+bWVtLT5yZWFsaXplX3ZpcnRfYXJyYXlzKSAoKGpfY29tbW9uX3B0cikgY2luZm8pOworCisgIC8qIFdyaXRlIHRoZSBkYXRhc3RyZWFtIGhlYWRlciAoU09JLCBKRklGKSBpbW1lZGlhdGVseS4KKyAgICogRnJhbWUgYW5kIHNjYW4gaGVhZGVycyBhcmUgcG9zdHBvbmVkIHRpbGwgbGF0ZXIuCisgICAqIFRoaXMgbGV0cyBhcHBsaWNhdGlvbiBpbnNlcnQgc3BlY2lhbCBtYXJrZXJzIGFmdGVyIHRoZSBTT0kuCisgICAqLworICAoKmNpbmZvLT5tYXJrZXItPndyaXRlX2ZpbGVfaGVhZGVyKSAoY2luZm8pOworfQorCisKKy8qCisgKiBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgaXMgYSBzcGVjaWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjb2VmZmljaWVudAorICogYnVmZmVyIGNvbnRyb2xsZXIuICBUaGlzIGlzIHNpbWlsYXIgdG8gamNjb2VmY3QuYywgYnV0IGl0IGhhbmRsZXMgb25seQorICogb3V0cHV0IGZyb20gcHJlc3VwcGxpZWQgdmlydHVhbCBhcnJheXMuICBGdXJ0aGVybW9yZSwgd2UgZ2VuZXJhdGUgYW55CisgKiBkdW1teSBwYWRkaW5nIGJsb2NrcyBvbi10aGUtZmx5IHJhdGhlciB0aGFuIGV4cGVjdGluZyB0aGVtIHRvIGJlIHByZXNlbnQKKyAqIGluIHRoZSBhcnJheXMuCisgKi8KKworLyogUHJpdmF0ZSBidWZmZXIgY29udHJvbGxlciBvYmplY3QgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QganBlZ19jX2NvZWZfY29udHJvbGxlciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICBKRElNRU5TSU9OIGlNQ1Vfcm93X251bTsJLyogaU1DVSByb3cgIyB3aXRoaW4gaW1hZ2UgKi8KKyAgSkRJTUVOU0lPTiBtY3VfY3RyOwkJLyogY291bnRzIE1DVXMgcHJvY2Vzc2VkIGluIGN1cnJlbnQgcm93ICovCisgIGludCBNQ1VfdmVydF9vZmZzZXQ7CQkvKiBjb3VudHMgTUNVIHJvd3Mgd2l0aGluIGlNQ1Ugcm93ICovCisgIGludCBNQ1Vfcm93c19wZXJfaU1DVV9yb3c7CS8qIG51bWJlciBvZiBzdWNoIHJvd3MgbmVlZGVkICovCisKKyAgLyogVmlydHVhbCBibG9jayBhcnJheSBmb3IgZWFjaCBjb21wb25lbnQuICovCisgIGp2aXJ0X2JhcnJheV9wdHIgKiB3aG9sZV9pbWFnZTsKKworICAvKiBXb3Jrc3BhY2UgZm9yIGNvbnN0cnVjdGluZyBkdW1teSBibG9ja3MgYXQgcmlnaHQvYm90dG9tIGVkZ2VzLiAqLworICBKQkxPQ0tST1cgZHVtbXlfYnVmZmVyW0NfTUFYX0JMT0NLU19JTl9NQ1VdOworfSBteV9jb2VmX2NvbnRyb2xsZXI7CisKK3R5cGVkZWYgbXlfY29lZl9jb250cm9sbGVyICogbXlfY29lZl9wdHI7CisKKworTE9DQUwodm9pZCkKK3N0YXJ0X2lNQ1Vfcm93IChqX2NvbXByZXNzX3B0ciBjaW5mbykKKy8qIFJlc2V0IHdpdGhpbi1pTUNVLXJvdyBjb3VudGVycyBmb3IgYSBuZXcgcm93ICovCit7CisgIG15X2NvZWZfcHRyIGNvZWYgPSAobXlfY29lZl9wdHIpIGNpbmZvLT5jb2VmOworCisgIC8qIEluIGFuIGludGVybGVhdmVkIHNjYW4sIGFuIE1DVSByb3cgaXMgdGhlIHNhbWUgYXMgYW4gaU1DVSByb3cuCisgICAqIEluIGEgbm9uaW50ZXJsZWF2ZWQgc2NhbiwgYW4gaU1DVSByb3cgaGFzIHZfc2FtcF9mYWN0b3IgTUNVIHJvd3MuCisgICAqIEJ1dCBhdCB0aGUgYm90dG9tIG9mIHRoZSBpbWFnZSwgcHJvY2VzcyBvbmx5IHdoYXQncyBsZWZ0LgorICAgKi8KKyAgaWYgKGNpbmZvLT5jb21wc19pbl9zY2FuID4gMSkgeworICAgIGNvZWYtPk1DVV9yb3dzX3Blcl9pTUNVX3JvdyA9IDE7CisgIH0gZWxzZSB7CisgICAgaWYgKGNvZWYtPmlNQ1Vfcm93X251bSA8IChjaW5mby0+dG90YWxfaU1DVV9yb3dzLTEpKQorICAgICAgY29lZi0+TUNVX3Jvd3NfcGVyX2lNQ1Vfcm93ID0gY2luZm8tPmN1cl9jb21wX2luZm9bMF0tPnZfc2FtcF9mYWN0b3I7CisgICAgZWxzZQorICAgICAgY29lZi0+TUNVX3Jvd3NfcGVyX2lNQ1Vfcm93ID0gY2luZm8tPmN1cl9jb21wX2luZm9bMF0tPmxhc3Rfcm93X2hlaWdodDsKKyAgfQorCisgIGNvZWYtPm1jdV9jdHIgPSAwOworICBjb2VmLT5NQ1VfdmVydF9vZmZzZXQgPSAwOworfQorCisKKy8qCisgKiBJbml0aWFsaXplIGZvciBhIHByb2Nlc3NpbmcgcGFzcy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3N0YXJ0X3Bhc3NfY29lZiAoal9jb21wcmVzc19wdHIgY2luZm8sIEpfQlVGX01PREUgcGFzc19tb2RlKQoreworICBteV9jb2VmX3B0ciBjb2VmID0gKG15X2NvZWZfcHRyKSBjaW5mby0+Y29lZjsKKworICBpZiAocGFzc19tb2RlICE9IEpCVUZfQ1JBTktfREVTVCkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7CisKKyAgY29lZi0+aU1DVV9yb3dfbnVtID0gMDsKKyAgc3RhcnRfaU1DVV9yb3coY2luZm8pOworfQorCisKKy8qCisgKiBQcm9jZXNzIHNvbWUgZGF0YS4KKyAqIFdlIHByb2Nlc3MgdGhlIGVxdWl2YWxlbnQgb2Ygb25lIGZ1bGx5IGludGVybGVhdmVkIE1DVSByb3cgKCJpTUNVIiByb3cpCisgKiBwZXIgY2FsbCwgaWUsIHZfc2FtcF9mYWN0b3IgYmxvY2sgcm93cyBmb3IgZWFjaCBjb21wb25lbnQgaW4gdGhlIHNjYW4uCisgKiBUaGUgZGF0YSBpcyBvYnRhaW5lZCBmcm9tIHRoZSB2aXJ0dWFsIGFycmF5cyBhbmQgZmVkIHRvIHRoZSBlbnRyb3B5IGNvZGVyLgorICogUmV0dXJucyBUUlVFIGlmIHRoZSBpTUNVIHJvdyBpcyBjb21wbGV0ZWQsIEZBTFNFIGlmIHN1c3BlbmRlZC4KKyAqCisgKiBOQjogaW5wdXRfYnVmIGlzIGlnbm9yZWQ7IGl0IGlzIGxpa2VseSB0byBiZSBhIE5VTEwgcG9pbnRlci4KKyAqLworCitNRVRIT0RERUYoYm9vbGVhbikKK2NvbXByZXNzX291dHB1dCAoal9jb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgaW5wdXRfYnVmKQoreworICBteV9jb2VmX3B0ciBjb2VmID0gKG15X2NvZWZfcHRyKSBjaW5mby0+Y29lZjsKKyAgSkRJTUVOU0lPTiBNQ1VfY29sX251bTsJLyogaW5kZXggb2YgY3VycmVudCBNQ1Ugd2l0aGluIHJvdyAqLworICBKRElNRU5TSU9OIGxhc3RfTUNVX2NvbCA9IGNpbmZvLT5NQ1VzX3Blcl9yb3cgLSAxOworICBKRElNRU5TSU9OIGxhc3RfaU1DVV9yb3cgPSBjaW5mby0+dG90YWxfaU1DVV9yb3dzIC0gMTsKKyAgaW50IGJsa24sIGNpLCB4aW5kZXgsIHlpbmRleCwgeW9mZnNldCwgYmxvY2tjbnQ7CisgIEpESU1FTlNJT04gc3RhcnRfY29sOworICBKQkxPQ0tBUlJBWSBidWZmZXJbTUFYX0NPTVBTX0lOX1NDQU5dOworICBKQkxPQ0tST1cgTUNVX2J1ZmZlcltDX01BWF9CTE9DS1NfSU5fTUNVXTsKKyAgSkJMT0NLUk9XIGJ1ZmZlcl9wdHI7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisKKyAgLyogQWxpZ24gdGhlIHZpcnR1YWwgYnVmZmVycyBmb3IgdGhlIGNvbXBvbmVudHMgdXNlZCBpbiB0aGlzIHNjYW4uICovCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICBidWZmZXJbY2ldID0gKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCisgICAgICAoKGpfY29tbW9uX3B0cikgY2luZm8sIGNvZWYtPndob2xlX2ltYWdlW2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF0sCisgICAgICAgY29lZi0+aU1DVV9yb3dfbnVtICogY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwKKyAgICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgRkFMU0UpOworICB9CisKKyAgLyogTG9vcCB0byBwcm9jZXNzIG9uZSB3aG9sZSBpTUNVIHJvdyAqLworICBmb3IgKHlvZmZzZXQgPSBjb2VmLT5NQ1VfdmVydF9vZmZzZXQ7IHlvZmZzZXQgPCBjb2VmLT5NQ1Vfcm93c19wZXJfaU1DVV9yb3c7CisgICAgICAgeW9mZnNldCsrKSB7CisgICAgZm9yIChNQ1VfY29sX251bSA9IGNvZWYtPm1jdV9jdHI7IE1DVV9jb2xfbnVtIDwgY2luZm8tPk1DVXNfcGVyX3JvdzsKKwkgTUNVX2NvbF9udW0rKykgeworICAgICAgLyogQ29uc3RydWN0IGxpc3Qgb2YgcG9pbnRlcnMgdG8gRENUIGJsb2NrcyBiZWxvbmdpbmcgdG8gdGhpcyBNQ1UgKi8KKyAgICAgIGJsa24gPSAwOwkJCS8qIGluZGV4IG9mIGN1cnJlbnQgRENUIGJsb2NrIHdpdGhpbiBNQ1UgKi8KKyAgICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisJY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKwlzdGFydF9jb2wgPSBNQ1VfY29sX251bSAqIGNvbXBwdHItPk1DVV93aWR0aDsKKwlibG9ja2NudCA9IChNQ1VfY29sX251bSA8IGxhc3RfTUNVX2NvbCkgPyBjb21wcHRyLT5NQ1Vfd2lkdGgKKwkJCQkJCTogY29tcHB0ci0+bGFzdF9jb2xfd2lkdGg7CisJZm9yICh5aW5kZXggPSAwOyB5aW5kZXggPCBjb21wcHRyLT5NQ1VfaGVpZ2h0OyB5aW5kZXgrKykgeworCSAgaWYgKGNvZWYtPmlNQ1Vfcm93X251bSA8IGxhc3RfaU1DVV9yb3cgfHwKKwkgICAgICB5aW5kZXgreW9mZnNldCA8IGNvbXBwdHItPmxhc3Rfcm93X2hlaWdodCkgeworCSAgICAvKiBGaWxsIGluIHBvaW50ZXJzIHRvIHJlYWwgYmxvY2tzIGluIHRoaXMgcm93ICovCisJICAgIGJ1ZmZlcl9wdHIgPSBidWZmZXJbY2ldW3lpbmRleCt5b2Zmc2V0XSArIHN0YXJ0X2NvbDsKKwkgICAgZm9yICh4aW5kZXggPSAwOyB4aW5kZXggPCBibG9ja2NudDsgeGluZGV4KyspCisJICAgICAgTUNVX2J1ZmZlcltibGtuKytdID0gYnVmZmVyX3B0cisrOworCSAgfSBlbHNlIHsKKwkgICAgLyogQXQgYm90dG9tIG9mIGltYWdlLCBuZWVkIGEgd2hvbGUgcm93IG9mIGR1bW15IGJsb2NrcyAqLworCSAgICB4aW5kZXggPSAwOworCSAgfQorCSAgLyogRmlsbCBpbiBhbnkgZHVtbXkgYmxvY2tzIG5lZWRlZCBpbiB0aGlzIHJvdy4KKwkgICAqIER1bW15IGJsb2NrcyBhcmUgZmlsbGVkIGluIHRoZSBzYW1lIHdheSBhcyBpbiBqY2NvZWZjdC5jOgorCSAgICogYWxsIHplcm9lcyBpbiB0aGUgQUMgZW50cmllcywgREMgZW50cmllcyBlcXVhbCB0byBwcmV2aW91cworCSAgICogYmxvY2sncyBEQyB2YWx1ZS4gIFRoZSBpbml0IHJvdXRpbmUgaGFzIGFscmVhZHkgemVyb2VkIHRoZQorCSAgICogQUMgZW50cmllcywgc28gd2UgbmVlZCBvbmx5IHNldCB0aGUgREMgZW50cmllcyBjb3JyZWN0bHkuCisJICAgKi8KKwkgIGZvciAoOyB4aW5kZXggPCBjb21wcHRyLT5NQ1Vfd2lkdGg7IHhpbmRleCsrKSB7CisJICAgIE1DVV9idWZmZXJbYmxrbl0gPSBjb2VmLT5kdW1teV9idWZmZXJbYmxrbl07CisJICAgIE1DVV9idWZmZXJbYmxrbl1bMF1bMF0gPSBNQ1VfYnVmZmVyW2Jsa24tMV1bMF1bMF07CisJICAgIGJsa24rKzsKKwkgIH0KKwl9CisgICAgICB9CisgICAgICAvKiBUcnkgdG8gd3JpdGUgdGhlIE1DVS4gKi8KKyAgICAgIGlmICghICgqY2luZm8tPmVudHJvcHktPmVuY29kZV9tY3UpIChjaW5mbywgTUNVX2J1ZmZlcikpIHsKKwkvKiBTdXNwZW5zaW9uIGZvcmNlZDsgdXBkYXRlIHN0YXRlIGNvdW50ZXJzIGFuZCBleGl0ICovCisJY29lZi0+TUNVX3ZlcnRfb2Zmc2V0ID0geW9mZnNldDsKKwljb2VmLT5tY3VfY3RyID0gTUNVX2NvbF9udW07CisJcmV0dXJuIEZBTFNFOworICAgICAgfQorICAgIH0KKyAgICAvKiBDb21wbGV0ZWQgYW4gTUNVIHJvdywgYnV0IHBlcmhhcHMgbm90IGFuIGlNQ1Ugcm93ICovCisgICAgY29lZi0+bWN1X2N0ciA9IDA7CisgIH0KKyAgLyogQ29tcGxldGVkIHRoZSBpTUNVIHJvdywgYWR2YW5jZSBjb3VudGVycyBmb3IgbmV4dCBvbmUgKi8KKyAgY29lZi0+aU1DVV9yb3dfbnVtKys7CisgIHN0YXJ0X2lNQ1Vfcm93KGNpbmZvKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIEluaXRpYWxpemUgY29lZmZpY2llbnQgYnVmZmVyIGNvbnRyb2xsZXIuCisgKgorICogRWFjaCBwYXNzZWQgY29lZmZpY2llbnQgYXJyYXkgbXVzdCBiZSB0aGUgcmlnaHQgc2l6ZSBmb3IgdGhhdAorICogY29lZmZpY2llbnQ6IHdpZHRoX2luX2Jsb2NrcyB3aWRlIGFuZCBoZWlnaHRfaW5fYmxvY2tzIGhpZ2gsCisgKiB3aXRoIHVuaXRoZWlnaHQgYXQgbGVhc3Qgdl9zYW1wX2ZhY3Rvci4KKyAqLworCitMT0NBTCh2b2lkKQordHJhbnNlbmNvZGVfY29lZl9jb250cm9sbGVyIChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCSAgICAganZpcnRfYmFycmF5X3B0ciAqIGNvZWZfYXJyYXlzKQoreworICBteV9jb2VmX3B0ciBjb2VmOworICBKQkxPQ0tST1cgYnVmZmVyOworICBpbnQgaTsKKworICBjb2VmID0gKG15X2NvZWZfcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJU0laRU9GKG15X2NvZWZfY29udHJvbGxlcikpOworICBjaW5mby0+Y29lZiA9IChzdHJ1Y3QganBlZ19jX2NvZWZfY29udHJvbGxlciAqKSBjb2VmOworICBjb2VmLT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfY29lZjsKKyAgY29lZi0+cHViLmNvbXByZXNzX2RhdGEgPSBjb21wcmVzc19vdXRwdXQ7CisKKyAgLyogU2F2ZSBwb2ludGVyIHRvIHZpcnR1YWwgYXJyYXlzICovCisgIGNvZWYtPndob2xlX2ltYWdlID0gY29lZl9hcnJheXM7CisKKyAgLyogQWxsb2NhdGUgYW5kIHByZS16ZXJvIHNwYWNlIGZvciBkdW1teSBEQ1QgYmxvY2tzLiAqLworICBidWZmZXIgPSAoSkJMT0NLUk9XKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2NfbGFyZ2UpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJQ19NQVhfQkxPQ0tTX0lOX01DVSAqIFNJWkVPRihKQkxPQ0spKTsKKyAganplcm9fZmFyKCh2b2lkIEZBUiAqKSBidWZmZXIsIENfTUFYX0JMT0NLU19JTl9NQ1UgKiBTSVpFT0YoSkJMT0NLKSk7CisgIGZvciAoaSA9IDA7IGkgPCBDX01BWF9CTE9DS1NfSU5fTUNVOyBpKyspIHsKKyAgICBjb2VmLT5kdW1teV9idWZmZXJbaV0gPSBidWZmZXIgKyBpOworICB9Cit9CisKKyNlbmRpZiAvL19GWF9KUEVHX1RVUkJPXwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamRhcGltaW4uYyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pkYXBpbWluLmMKaW5kZXggMWIyNGI3MC4uODBjNTJjZCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamRhcGltaW4uYworKysgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZGFwaW1pbi5jCkBAIC0xLDM5OCArMSwzOTggQEAKLSNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pDQotLyoNCi0gKiBqZGFwaW1pbi5jDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OCwgVGhvbWFzIEcuIExhbmUuDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4NCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuDQotICoNCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgYXBwbGljYXRpb24gaW50ZXJmYWNlIGNvZGUgZm9yIHRoZSBkZWNvbXByZXNzaW9uIGhhbGYNCi0gKiBvZiB0aGUgSlBFRyBsaWJyYXJ5LiAgVGhlc2UgYXJlIHRoZSAibWluaW11bSIgQVBJIHJvdXRpbmVzIHRoYXQgbWF5IGJlDQotICogbmVlZGVkIGluIGVpdGhlciB0aGUgbm9ybWFsIGZ1bGwtZGVjb21wcmVzc2lvbiBjYXNlIG9yIHRoZQ0KLSAqIHRyYW5zY29kaW5nLW9ubHkgY2FzZS4NCi0gKg0KLSAqIE1vc3Qgb2YgdGhlIHJvdXRpbmVzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBkaXJlY3RseSBieSBhbiBhcHBsaWNhdGlvbg0KLSAqIGFyZSBpbiB0aGlzIGZpbGUgb3IgaW4gamRhcGlzdGQuYy4gIEJ1dCBhbHNvIHNlZSBqY29tYXBpLmMgZm9yIHJvdXRpbmVzDQotICogc2hhcmVkIGJ5IGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uLCBhbmQgamR0cmFucy5jIGZvciB0aGUgdHJhbnNjb2RpbmcNCi0gKiBjYXNlLg0KLSAqLw0KLQ0KLSNkZWZpbmUgSlBFR19JTlRFUk5BTFMNCi0jaW5jbHVkZSAiamluY2x1ZGUuaCINCi0jaW5jbHVkZSAianBlZ2xpYi5oIg0KLQ0KLQ0KLS8qDQotICogSW5pdGlhbGl6YXRpb24gb2YgYSBKUEVHIGRlY29tcHJlc3Npb24gb2JqZWN0Lg0KLSAqIFRoZSBlcnJvciBtYW5hZ2VyIG11c3QgYWxyZWFkeSBiZSBzZXQgdXAgKGluIGNhc2UgbWVtb3J5IG1hbmFnZXIgZmFpbHMpLg0KLSAqLw0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWpwZWdfQ3JlYXRlRGVjb21wcmVzcyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IHZlcnNpb24sIHNpemVfdCBzdHJ1Y3RzaXplKQ0KLXsNCi0gIGludCBpOw0KLQ0KLSAgLyogR3VhcmQgYWdhaW5zdCB2ZXJzaW9uIG1pc21hdGNoZXMgYmV0d2VlbiBsaWJyYXJ5IGFuZCBjYWxsZXIuICovDQotICBjaW5mby0+bWVtID0gTlVMTDsJCS8qIHNvIGpwZWdfZGVzdHJveSBrbm93cyBtZW0gbWdyIG5vdCBjYWxsZWQgKi8NCi0gIGlmICh2ZXJzaW9uICE9IEpQRUdfTElCX1ZFUlNJT04pDQotICAgIEVSUkVYSVQyKGNpbmZvLCBKRVJSX0JBRF9MSUJfVkVSU0lPTiwgSlBFR19MSUJfVkVSU0lPTiwgdmVyc2lvbik7DQotICBpZiAoc3RydWN0c2l6ZSAhPSBTSVpFT0Yoc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QpKQ0KLSAgICBFUlJFWElUMihjaW5mbywgSkVSUl9CQURfU1RSVUNUX1NJWkUsIA0KLQkgICAgIChpbnQpIFNJWkVPRihzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCksIChpbnQpIHN0cnVjdHNpemUpOw0KLQ0KLSAgLyogRm9yIGRlYnVnZ2luZyBwdXJwb3Nlcywgd2UgemVybyB0aGUgd2hvbGUgbWFzdGVyIHN0cnVjdHVyZS4NCi0gICAqIEJ1dCB0aGUgYXBwbGljYXRpb24gaGFzIGFscmVhZHkgc2V0IHRoZSBlcnIgcG9pbnRlciwgYW5kIG1heSBoYXZlIHNldA0KLSAgICogY2xpZW50X2RhdGEsIHNvIHdlIGhhdmUgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aG9zZSBmaWVsZHMuDQotICAgKiBOb3RlOiBpZiBhcHBsaWNhdGlvbiBoYXNuJ3Qgc2V0IGNsaWVudF9kYXRhLCB0b29scyBsaWtlIFB1cmlmeSBtYXkNCi0gICAqIGNvbXBsYWluIGhlcmUuDQotICAgKi8NCi0gIHsNCi0gICAgc3RydWN0IGpwZWdfZXJyb3JfbWdyICogZXJyID0gY2luZm8tPmVycjsNCi0gICAgdm9pZCAqIGNsaWVudF9kYXRhID0gY2luZm8tPmNsaWVudF9kYXRhOyAvKiBpZ25vcmUgUHVyaWZ5IGNvbXBsYWludCBoZXJlICovDQotICAgIE1FTVpFUk8oY2luZm8sIFNJWkVPRihzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCkpOw0KLSAgICBjaW5mby0+ZXJyID0gZXJyOw0KLSAgICBjaW5mby0+Y2xpZW50X2RhdGEgPSBjbGllbnRfZGF0YTsNCi0gIH0NCi0gIGNpbmZvLT5pc19kZWNvbXByZXNzb3IgPSBUUlVFOw0KLQ0KLSAgLyogSW5pdGlhbGl6ZSBhIG1lbW9yeSBtYW5hZ2VyIGluc3RhbmNlIGZvciB0aGlzIG9iamVjdCAqLw0KLSAgamluaXRfbWVtb3J5X21ncigoal9jb21tb25fcHRyKSBjaW5mbyk7DQotDQotICAvKiBaZXJvIG91dCBwb2ludGVycyB0byBwZXJtYW5lbnQgc3RydWN0dXJlcy4gKi8NCi0gIGNpbmZvLT5wcm9ncmVzcyA9IE5VTEw7DQotICBjaW5mby0+c3JjID0gTlVMTDsNCi0NCi0gIGZvciAoaSA9IDA7IGkgPCBOVU1fUVVBTlRfVEJMUzsgaSsrKQ0KLSAgICBjaW5mby0+cXVhbnRfdGJsX3B0cnNbaV0gPSBOVUxMOw0KLQ0KLSAgZm9yIChpID0gMDsgaSA8IE5VTV9IVUZGX1RCTFM7IGkrKykgew0KLSAgICBjaW5mby0+ZGNfaHVmZl90YmxfcHRyc1tpXSA9IE5VTEw7DQotICAgIGNpbmZvLT5hY19odWZmX3RibF9wdHJzW2ldID0gTlVMTDsNCi0gIH0NCi0NCi0gIC8qIEluaXRpYWxpemUgbWFya2VyIHByb2Nlc3NvciBzbyBhcHBsaWNhdGlvbiBjYW4gb3ZlcnJpZGUgbWV0aG9kcw0KLSAgICogZm9yIENPTSwgQVBQbiBtYXJrZXJzIGJlZm9yZSBjYWxsaW5nIGpwZWdfcmVhZF9oZWFkZXIuDQotICAgKi8NCi0gIGNpbmZvLT5tYXJrZXJfbGlzdCA9IE5VTEw7DQotICBqaW5pdF9tYXJrZXJfcmVhZGVyKGNpbmZvKTsNCi0NCi0gIC8qIEFuZCBpbml0aWFsaXplIHRoZSBvdmVyYWxsIGlucHV0IGNvbnRyb2xsZXIuICovDQotICBqaW5pdF9pbnB1dF9jb250cm9sbGVyKGNpbmZvKTsNCi0NCi0gIC8qIE9LLCBJJ20gcmVhZHkgKi8NCi0gIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBEU1RBVEVfU1RBUlQ7DQotfQ0KLQ0KLQ0KLS8qDQotICogRGVzdHJ1Y3Rpb24gb2YgYSBKUEVHIGRlY29tcHJlc3Npb24gb2JqZWN0DQotICovDQotDQotR0xPQkFMKHZvaWQpDQotanBlZ19kZXN0cm95X2RlY29tcHJlc3MgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAganBlZ19kZXN0cm95KChqX2NvbW1vbl9wdHIpIGNpbmZvKTsgLyogdXNlIGNvbW1vbiByb3V0aW5lICovDQotfQ0KLQ0KLQ0KLS8qDQotICogQWJvcnQgcHJvY2Vzc2luZyBvZiBhIEpQRUcgZGVjb21wcmVzc2lvbiBvcGVyYXRpb24sDQotICogYnV0IGRvbid0IGRlc3Ryb3kgdGhlIG9iamVjdCBpdHNlbGYuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotanBlZ19hYm9ydF9kZWNvbXByZXNzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIGpwZWdfYWJvcnQoKGpfY29tbW9uX3B0cikgY2luZm8pOyAvKiB1c2UgY29tbW9uIHJvdXRpbmUgKi8NCi19DQotDQotDQotLyoNCi0gKiBTZXQgZGVmYXVsdCBkZWNvbXByZXNzaW9uIHBhcmFtZXRlcnMuDQotICovDQotDQotTE9DQUwodm9pZCkNCi1kZWZhdWx0X2RlY29tcHJlc3NfcGFybXMgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAgLyogR3Vlc3MgdGhlIGlucHV0IGNvbG9yc3BhY2UsIGFuZCBzZXQgb3V0cHV0IGNvbG9yc3BhY2UgYWNjb3JkaW5nbHkuICovDQotICAvKiAoV2lzaCBKUEVHIGNvbW1pdHRlZSBoYWQgcHJvdmlkZWQgYSByZWFsIHdheSB0byBzcGVjaWZ5IHRoaXMuLi4pICovDQotICAvKiBOb3RlIGFwcGxpY2F0aW9uIG1heSBvdmVycmlkZSBvdXIgZ3Vlc3Nlcy4gKi8NCi0gIHN3aXRjaCAoY2luZm8tPm51bV9jb21wb25lbnRzKSB7DQotICBjYXNlIDE6DQotICAgIGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX0dSQVlTQ0FMRTsNCi0gICAgY2luZm8tPm91dF9jb2xvcl9zcGFjZSA9IEpDU19HUkFZU0NBTEU7DQotICAgIGJyZWFrOw0KLSAgICANCi0gIGNhc2UgMzoNCi0gICAgaWYgKGNpbmZvLT5zYXdfSkZJRl9tYXJrZXIpIHsNCi0gICAgICBjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9IEpDU19ZQ2JDcjsgLyogSkZJRiBpbXBsaWVzIFlDYkNyICovDQotICAgIH0gZWxzZSBpZiAoY2luZm8tPnNhd19BZG9iZV9tYXJrZXIpIHsNCi0gICAgICBzd2l0Y2ggKGNpbmZvLT5BZG9iZV90cmFuc2Zvcm0pIHsNCi0gICAgICBjYXNlIDA6DQotCWNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX1JHQjsNCi0JYnJlYWs7DQotICAgICAgY2FzZSAxOg0KLQljaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9IEpDU19ZQ2JDcjsNCi0JYnJlYWs7DQotICAgICAgZGVmYXVsdDoNCi0JV0FSTk1TMShjaW5mbywgSldSTl9BRE9CRV9YRk9STSwgY2luZm8tPkFkb2JlX3RyYW5zZm9ybSk7DQotCWNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX1lDYkNyOyAvKiBhc3N1bWUgaXQncyBZQ2JDciAqLw0KLQlicmVhazsNCi0gICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgLyogU2F3IG5vIHNwZWNpYWwgbWFya2VycywgdHJ5IHRvIGd1ZXNzIGZyb20gdGhlIGNvbXBvbmVudCBJRHMgKi8NCi0gICAgICBpbnQgY2lkMCA9IGNpbmZvLT5jb21wX2luZm9bMF0uY29tcG9uZW50X2lkOw0KLSAgICAgIGludCBjaWQxID0gY2luZm8tPmNvbXBfaW5mb1sxXS5jb21wb25lbnRfaWQ7DQotICAgICAgaW50IGNpZDIgPSBjaW5mby0+Y29tcF9pbmZvWzJdLmNvbXBvbmVudF9pZDsNCi0NCi0gICAgICBpZiAoY2lkMCA9PSAxICYmIGNpZDEgPT0gMiAmJiBjaWQyID09IDMpDQotCWNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX1lDYkNyOyAvKiBhc3N1bWUgSkZJRiB3L291dCBtYXJrZXIgKi8NCi0gICAgICBlbHNlIGlmIChjaWQwID09IDgyICYmIGNpZDEgPT0gNzEgJiYgY2lkMiA9PSA2NikNCi0JY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPSBKQ1NfUkdCOyAvKiBBU0NJSSAnUicsICdHJywgJ0InICovDQotICAgICAgZWxzZSB7DQotCVRSQUNFTVMzKGNpbmZvLCAxLCBKVFJDX1VOS05PV05fSURTLCBjaWQwLCBjaWQxLCBjaWQyKTsNCi0JY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPSBKQ1NfWUNiQ3I7IC8qIGFzc3VtZSBpdCdzIFlDYkNyICovDQotICAgICAgfQ0KLSAgICB9DQotICAgIC8qIEFsd2F5cyBndWVzcyBSR0IgaXMgcHJvcGVyIG91dHB1dCBjb2xvcnNwYWNlLiAqLw0KLSAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlID0gSkNTX1JHQjsNCi0gICAgYnJlYWs7DQotICAgIA0KLSAgY2FzZSA0Og0KLSAgICBpZiAoY2luZm8tPnNhd19BZG9iZV9tYXJrZXIpIHsNCi0gICAgICBzd2l0Y2ggKGNpbmZvLT5BZG9iZV90cmFuc2Zvcm0pIHsNCi0gICAgICBjYXNlIDA6DQotCWNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX0NNWUs7DQotCWJyZWFrOw0KLSAgICAgIGNhc2UgMjoNCi0JY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPSBKQ1NfWUNDSzsNCi0JYnJlYWs7DQotICAgICAgZGVmYXVsdDoNCi0JV0FSTk1TMShjaW5mbywgSldSTl9BRE9CRV9YRk9STSwgY2luZm8tPkFkb2JlX3RyYW5zZm9ybSk7DQotCWNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX1lDQ0s7IC8qIGFzc3VtZSBpdCdzIFlDQ0sgKi8NCi0JYnJlYWs7DQotICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgIC8qIE5vIHNwZWNpYWwgbWFya2VycywgYXNzdW1lIHN0cmFpZ2h0IENNWUsuICovDQotICAgICAgY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPSBKQ1NfQ01ZSzsNCi0gICAgfQ0KLSAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlID0gSkNTX0NNWUs7DQotICAgIGJyZWFrOw0KLSAgICANCi0gIGRlZmF1bHQ6DQotICAgIGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX1VOS05PV047DQotICAgIGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPSBKQ1NfVU5LTk9XTjsNCi0gICAgYnJlYWs7DQotICB9DQotDQotICAvKiBTZXQgZGVmYXVsdHMgZm9yIG90aGVyIGRlY29tcHJlc3Npb24gcGFyYW1ldGVycy4gKi8NCi0gIGNpbmZvLT5zY2FsZV9udW0gPSAxOwkJLyogMToxIHNjYWxpbmcgKi8NCi0gIGNpbmZvLT5zY2FsZV9kZW5vbSA9IDE7DQotICBjaW5mby0+b3V0cHV0X2dhbW1hID0gMS4wOw0KLSAgY2luZm8tPmJ1ZmZlcmVkX2ltYWdlID0gRkFMU0U7DQotICBjaW5mby0+cmF3X2RhdGFfb3V0ID0gRkFMU0U7DQotICBjaW5mby0+ZGN0X21ldGhvZCA9IEpEQ1RfREVGQVVMVDsNCi0gIGNpbmZvLT5kb19mYW5jeV91cHNhbXBsaW5nID0gVFJVRTsNCi0gIGNpbmZvLT5kb19ibG9ja19zbW9vdGhpbmcgPSBUUlVFOw0KLSAgY2luZm8tPnF1YW50aXplX2NvbG9ycyA9IEZBTFNFOw0KLSAgLyogV2Ugc2V0IHRoZXNlIGluIGNhc2UgYXBwbGljYXRpb24gb25seSBzZXRzIHF1YW50aXplX2NvbG9ycy4gKi8NCi0gIGNpbmZvLT5kaXRoZXJfbW9kZSA9IEpESVRIRVJfRlM7DQotI2lmZGVmIFFVQU5UXzJQQVNTX1NVUFBPUlRFRA0KLSAgY2luZm8tPnR3b19wYXNzX3F1YW50aXplID0gVFJVRTsNCi0jZWxzZQ0KLSAgY2luZm8tPnR3b19wYXNzX3F1YW50aXplID0gRkFMU0U7DQotI2VuZGlmDQotICBjaW5mby0+ZGVzaXJlZF9udW1iZXJfb2ZfY29sb3JzID0gMjU2Ow0KLSAgY2luZm8tPmNvbG9ybWFwID0gTlVMTDsNCi0gIC8qIEluaXRpYWxpemUgZm9yIG5vIG1vZGUgY2hhbmdlIGluIGJ1ZmZlcmVkLWltYWdlIG1vZGUuICovDQotICBjaW5mby0+ZW5hYmxlXzFwYXNzX3F1YW50ID0gRkFMU0U7DQotICBjaW5mby0+ZW5hYmxlX2V4dGVybmFsX3F1YW50ID0gRkFMU0U7DQotICBjaW5mby0+ZW5hYmxlXzJwYXNzX3F1YW50ID0gRkFMU0U7DQotfQ0KLQ0KLQ0KLS8qDQotICogRGVjb21wcmVzc2lvbiBzdGFydHVwOiByZWFkIHN0YXJ0IG9mIEpQRUcgZGF0YXN0cmVhbSB0byBzZWUgd2hhdCdzIHRoZXJlLg0KLSAqIE5lZWQgb25seSBpbml0aWFsaXplIEpQRUcgb2JqZWN0IGFuZCBzdXBwbHkgYSBkYXRhIHNvdXJjZSBiZWZvcmUgY2FsbGluZy4NCi0gKg0KLSAqIFRoaXMgcm91dGluZSB3aWxsIHJlYWQgYXMgZmFyIGFzIHRoZSBmaXJzdCBTT1MgbWFya2VyIChpZSwgYWN0dWFsIHN0YXJ0IG9mDQotICogY29tcHJlc3NlZCBkYXRhKSwgYW5kIHdpbGwgc2F2ZSBhbGwgdGFibGVzIGFuZCBwYXJhbWV0ZXJzIGluIHRoZSBKUEVHDQotICogb2JqZWN0LiAgSXQgd2lsbCBhbHNvIGluaXRpYWxpemUgdGhlIGRlY29tcHJlc3Npb24gcGFyYW1ldGVycyB0byBkZWZhdWx0DQotICogdmFsdWVzLCBhbmQgZmluYWxseSByZXR1cm4gSlBFR19IRUFERVJfT0suICBPbiByZXR1cm4sIHRoZSBhcHBsaWNhdGlvbiBtYXkNCi0gKiBhZGp1c3QgdGhlIGRlY29tcHJlc3Npb24gcGFyYW1ldGVycyBhbmQgdGhlbiBjYWxsIGpwZWdfc3RhcnRfZGVjb21wcmVzcy4NCi0gKiAoT3IsIGlmIHRoZSBhcHBsaWNhdGlvbiBvbmx5IHdhbnRlZCB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHBhcmFtZXRlcnMsDQotICogdGhlIGRhdGEgbmVlZCBub3QgYmUgZGVjb21wcmVzc2VkLiAgSW4gdGhhdCBjYXNlLCBjYWxsIGpwZWdfYWJvcnQgb3INCi0gKiBqcGVnX2Rlc3Ryb3kgdG8gcmVsZWFzZSBhbnkgdGVtcG9yYXJ5IHNwYWNlLikNCi0gKiBJZiBhbiBhYmJyZXZpYXRlZCAodGFibGVzIG9ubHkpIGRhdGFzdHJlYW0gaXMgcHJlc2VudGVkLCB0aGUgcm91dGluZSB3aWxsDQotICogcmV0dXJuIEpQRUdfSEVBREVSX1RBQkxFU19PTkxZIHVwb24gcmVhY2hpbmcgRU9JLiAgVGhlIGFwcGxpY2F0aW9uIG1heSB0aGVuDQotICogcmUtdXNlIHRoZSBKUEVHIG9iamVjdCB0byByZWFkIHRoZSBhYmJyZXZpYXRlZCBpbWFnZSBkYXRhc3RyZWFtKHMpLg0KLSAqIEl0IGlzIHVubmVjZXNzYXJ5IChidXQgT0spIHRvIGNhbGwganBlZ19hYm9ydCBpbiB0aGlzIGNhc2UuDQotICogVGhlIEpQRUdfU1VTUEVOREVEIHJldHVybiBjb2RlIG9ubHkgb2NjdXJzIGlmIHRoZSBkYXRhIHNvdXJjZSBtb2R1bGUNCi0gKiByZXF1ZXN0cyBzdXNwZW5zaW9uIG9mIHRoZSBkZWNvbXByZXNzb3IuICBJbiB0aGlzIGNhc2UgdGhlIGFwcGxpY2F0aW9uDQotICogc2hvdWxkIGxvYWQgbW9yZSBzb3VyY2UgZGF0YSBhbmQgdGhlbiByZS1jYWxsIGpwZWdfcmVhZF9oZWFkZXIgdG8gcmVzdW1lDQotICogcHJvY2Vzc2luZy4NCi0gKiBJZiBhIG5vbi1zdXNwZW5kaW5nIGRhdGEgc291cmNlIGlzIHVzZWQgYW5kIHJlcXVpcmVfaW1hZ2UgaXMgVFJVRSwgdGhlbiB0aGUNCi0gKiByZXR1cm4gY29kZSBuZWVkIG5vdCBiZSBpbnNwZWN0ZWQgc2luY2Ugb25seSBKUEVHX0hFQURFUl9PSyBpcyBwb3NzaWJsZS4NCi0gKg0KLSAqIFRoaXMgcm91dGluZSBpcyBub3cganVzdCBhIGZyb250IGVuZCB0byBqcGVnX2NvbnN1bWVfaW5wdXQsIHdpdGggc29tZQ0KLSAqIGV4dHJhIGVycm9yIGNoZWNraW5nLg0KLSAqLw0KLQ0KLUdMT0JBTChpbnQpDQotanBlZ19yZWFkX2hlYWRlciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiByZXF1aXJlX2ltYWdlKQ0KLXsNCi0gIGludCByZXRjb2RlOw0KLQ0KLSAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gRFNUQVRFX1NUQVJUICYmDQotICAgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBEU1RBVEVfSU5IRUFERVIpDQotICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7DQotDQotICByZXRjb2RlID0ganBlZ19jb25zdW1lX2lucHV0KGNpbmZvKTsNCi0NCi0gIHN3aXRjaCAocmV0Y29kZSkgew0KLSAgY2FzZSBKUEVHX1JFQUNIRURfU09TOg0KLSAgICByZXRjb2RlID0gSlBFR19IRUFERVJfT0s7DQotICAgIGJyZWFrOw0KLSAgY2FzZSBKUEVHX1JFQUNIRURfRU9JOg0KLSAgICBpZiAocmVxdWlyZV9pbWFnZSkJCS8qIENvbXBsYWluIGlmIGFwcGxpY2F0aW9uIHdhbnRlZCBhbiBpbWFnZSAqLw0KLSAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9fSU1BR0UpOw0KLSAgICAvKiBSZXNldCB0byBzdGFydCBzdGF0ZTsgaXQgd291bGQgYmUgc2FmZXIgdG8gcmVxdWlyZSB0aGUgYXBwbGljYXRpb24gdG8NCi0gICAgICogY2FsbCBqcGVnX2Fib3J0LCBidXQgd2UgY2FuJ3QgY2hhbmdlIGl0IG5vdyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLg0KLSAgICAgKiBBIHNpZGUgZWZmZWN0IGlzIHRvIGZyZWUgYW55IHRlbXBvcmFyeSBtZW1vcnkgKHRoZXJlIHNob3VsZG4ndCBiZSBhbnkpLg0KLSAgICAgKi8NCi0gICAganBlZ19hYm9ydCgoal9jb21tb25fcHRyKSBjaW5mbyk7IC8qIHNldHMgc3RhdGUgPSBEU1RBVEVfU1RBUlQgKi8NCi0gICAgcmV0Y29kZSA9IEpQRUdfSEVBREVSX1RBQkxFU19PTkxZOw0KLSAgICBicmVhazsNCi0gIGNhc2UgSlBFR19TVVNQRU5ERUQ6DQotICAgIC8qIG5vIHdvcmsgKi8NCi0gICAgYnJlYWs7DQotICB9DQotDQotICByZXR1cm4gcmV0Y29kZTsNCi19DQotDQotDQotLyoNCi0gKiBDb25zdW1lIGRhdGEgaW4gYWR2YW5jZSBvZiB3aGF0IHRoZSBkZWNvbXByZXNzb3IgcmVxdWlyZXMuDQotICogVGhpcyBjYW4gYmUgY2FsbGVkIGF0IGFueSB0aW1lIG9uY2UgdGhlIGRlY29tcHJlc3NvciBvYmplY3QgaGFzDQotICogYmVlbiBjcmVhdGVkIGFuZCBhIGRhdGEgc291cmNlIGhhcyBiZWVuIHNldCB1cC4NCi0gKg0KLSAqIFRoaXMgcm91dGluZSBpcyBlc3NlbnRpYWxseSBhIHN0YXRlIG1hY2hpbmUgdGhhdCBoYW5kbGVzIGEgY291cGxlDQotICogb2YgY3JpdGljYWwgc3RhdGUtdHJhbnNpdGlvbiBhY3Rpb25zLCBuYW1lbHkgaW5pdGlhbCBzZXR1cCBhbmQNCi0gKiB0cmFuc2l0aW9uIGZyb20gaGVhZGVyIHNjYW5uaW5nIHRvIHJlYWR5LWZvci1zdGFydF9kZWNvbXByZXNzLg0KLSAqIEFsbCB0aGUgYWN0dWFsIGlucHV0IGlzIGRvbmUgdmlhIHRoZSBpbnB1dCBjb250cm9sbGVyJ3MgY29uc3VtZV9pbnB1dA0KLSAqIG1ldGhvZC4NCi0gKi8NCi0NCi1HTE9CQUwoaW50KQ0KLWpwZWdfY29uc3VtZV9pbnB1dCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBpbnQgcmV0Y29kZSA9IEpQRUdfU1VTUEVOREVEOw0KLQ0KLSAgLyogTkI6IGV2ZXJ5IHBvc3NpYmxlIERTVEFURSB2YWx1ZSBzaG91bGQgYmUgbGlzdGVkIGluIHRoaXMgc3dpdGNoICovDQotICBzd2l0Y2ggKGNpbmZvLT5nbG9iYWxfc3RhdGUpIHsNCi0gIGNhc2UgRFNUQVRFX1NUQVJUOg0KLSAgICAvKiBTdGFydC1vZi1kYXRhc3RyZWFtIGFjdGlvbnM6IHJlc2V0IGFwcHJvcHJpYXRlIG1vZHVsZXMgKi8NCi0gICAgKCpjaW5mby0+aW5wdXRjdGwtPnJlc2V0X2lucHV0X2NvbnRyb2xsZXIpIChjaW5mbyk7DQotICAgIC8qIEluaXRpYWxpemUgYXBwbGljYXRpb24ncyBkYXRhIHNvdXJjZSBtb2R1bGUgKi8NCi0gICAgKCpjaW5mby0+c3JjLT5pbml0X3NvdXJjZSkgKGNpbmZvKTsNCi0gICAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IERTVEFURV9JTkhFQURFUjsNCi0gICAgLypGQUxMVEhST1VHSCovDQotICBjYXNlIERTVEFURV9JTkhFQURFUjoNCi0gICAgcmV0Y29kZSA9ICgqY2luZm8tPmlucHV0Y3RsLT5jb25zdW1lX2lucHV0KSAoY2luZm8pOw0KLSAgICBpZiAocmV0Y29kZSA9PSBKUEVHX1JFQUNIRURfU09TKSB7IC8qIEZvdW5kIFNPUywgcHJlcGFyZSB0byBkZWNvbXByZXNzICovDQotICAgICAgLyogU2V0IHVwIGRlZmF1bHQgcGFyYW1ldGVycyBiYXNlZCBvbiBoZWFkZXIgZGF0YSAqLw0KLSAgICAgIGRlZmF1bHRfZGVjb21wcmVzc19wYXJtcyhjaW5mbyk7DQotICAgICAgLyogU2V0IGdsb2JhbCBzdGF0ZTogcmVhZHkgZm9yIHN0YXJ0X2RlY29tcHJlc3MgKi8NCi0gICAgICBjaW5mby0+Z2xvYmFsX3N0YXRlID0gRFNUQVRFX1JFQURZOw0KLSAgICB9DQotICAgIGJyZWFrOw0KLSAgY2FzZSBEU1RBVEVfUkVBRFk6DQotICAgIC8qIENhbid0IGFkdmFuY2UgcGFzdCBmaXJzdCBTT1MgdW50aWwgc3RhcnRfZGVjb21wcmVzcyBpcyBjYWxsZWQgKi8NCi0gICAgcmV0Y29kZSA9IEpQRUdfUkVBQ0hFRF9TT1M7DQotICAgIGJyZWFrOw0KLSAgY2FzZSBEU1RBVEVfUFJFTE9BRDoNCi0gIGNhc2UgRFNUQVRFX1BSRVNDQU46DQotICBjYXNlIERTVEFURV9TQ0FOTklORzoNCi0gIGNhc2UgRFNUQVRFX1JBV19PSzoNCi0gIGNhc2UgRFNUQVRFX0JVRklNQUdFOg0KLSAgY2FzZSBEU1RBVEVfQlVGUE9TVDoNCi0gIGNhc2UgRFNUQVRFX1NUT1BQSU5HOg0KLSAgICByZXRjb2RlID0gKCpjaW5mby0+aW5wdXRjdGwtPmNvbnN1bWVfaW5wdXQpIChjaW5mbyk7DQotICAgIGJyZWFrOw0KLSAgZGVmYXVsdDoNCi0gICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsNCi0gIH0NCi0gIHJldHVybiByZXRjb2RlOw0KLX0NCi0NCi0NCi0vKg0KLSAqIEhhdmUgd2UgZmluaXNoZWQgcmVhZGluZyB0aGUgaW5wdXQgZmlsZT8NCi0gKi8NCi0NCi1HTE9CQUwoYm9vbGVhbikNCi1qcGVnX2lucHV0X2NvbXBsZXRlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIC8qIENoZWNrIGZvciB2YWxpZCBqcGVnIG9iamVjdCAqLw0KLSAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgPCBEU1RBVEVfU1RBUlQgfHwNCi0gICAgICBjaW5mby0+Z2xvYmFsX3N0YXRlID4gRFNUQVRFX1NUT1BQSU5HKQ0KLSAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOw0KLSAgcmV0dXJuIGNpbmZvLT5pbnB1dGN0bC0+ZW9pX3JlYWNoZWQ7DQotfQ0KLQ0KLQ0KLS8qDQotICogSXMgdGhlcmUgbW9yZSB0aGFuIG9uZSBzY2FuPw0KLSAqLw0KLQ0KLUdMT0JBTChib29sZWFuKQ0KLWpwZWdfaGFzX211bHRpcGxlX3NjYW5zIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIC8qIE9ubHkgdmFsaWQgYWZ0ZXIganBlZ19yZWFkX2hlYWRlciBjb21wbGV0ZXMgKi8NCi0gIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlIDwgRFNUQVRFX1JFQURZIHx8DQotICAgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSA+IERTVEFURV9TVE9QUElORykNCi0gICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsNCi0gIHJldHVybiBjaW5mby0+aW5wdXRjdGwtPmhhc19tdWx0aXBsZV9zY2FuczsNCi19DQotDQotDQotLyoNCi0gKiBGaW5pc2ggSlBFRyBkZWNvbXByZXNzaW9uLg0KLSAqDQotICogVGhpcyB3aWxsIG5vcm1hbGx5IGp1c3QgdmVyaWZ5IHRoZSBmaWxlIHRyYWlsZXIgYW5kIHJlbGVhc2UgdGVtcCBzdG9yYWdlLg0KLSAqDQotICogUmV0dXJucyBGQUxTRSBpZiBzdXNwZW5kZWQuICBUaGUgcmV0dXJuIHZhbHVlIG5lZWQgYmUgaW5zcGVjdGVkIG9ubHkgaWYNCi0gKiBhIHN1c3BlbmRpbmcgZGF0YSBzb3VyY2UgaXMgdXNlZC4NCi0gKi8NCi0NCi1HTE9CQUwoYm9vbGVhbikNCi1qcGVnX2ZpbmlzaF9kZWNvbXByZXNzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIGlmICgoY2luZm8tPmdsb2JhbF9zdGF0ZSA9PSBEU1RBVEVfU0NBTk5JTkcgfHwNCi0gICAgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9PSBEU1RBVEVfUkFXX09LKSAmJiAhIGNpbmZvLT5idWZmZXJlZF9pbWFnZSkgew0KLSAgICAvKiBUZXJtaW5hdGUgZmluYWwgcGFzcyBvZiBub24tYnVmZmVyZWQgbW9kZSAqLw0KLSAgICBpZiAoY2luZm8tPm91dHB1dF9zY2FubGluZSA8IGNpbmZvLT5vdXRwdXRfaGVpZ2h0KQ0KLSAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfVE9PX0xJVFRMRV9EQVRBKTsNCi0gICAgKCpjaW5mby0+bWFzdGVyLT5maW5pc2hfb3V0cHV0X3Bhc3MpIChjaW5mbyk7DQotICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBEU1RBVEVfU1RPUFBJTkc7DQotICB9IGVsc2UgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgPT0gRFNUQVRFX0JVRklNQUdFKSB7DQotICAgIC8qIEZpbmlzaGluZyBhZnRlciBhIGJ1ZmZlcmVkLWltYWdlIG9wZXJhdGlvbiAqLw0KLSAgICBjaW5mby0+Z2xvYmFsX3N0YXRlID0gRFNUQVRFX1NUT1BQSU5HOw0KLSAgfSBlbHNlIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IERTVEFURV9TVE9QUElORykgew0KLSAgICAvKiBTVE9QUElORyA9IHJlcGVhdCBjYWxsIGFmdGVyIGEgc3VzcGVuc2lvbiwgYW55dGhpbmcgZWxzZSBpcyBlcnJvciAqLw0KLSAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOw0KLSAgfQ0KLSAgLyogUmVhZCB1bnRpbCBFT0kgKi8NCi0gIHdoaWxlICghIGNpbmZvLT5pbnB1dGN0bC0+ZW9pX3JlYWNoZWQpIHsNCi0gICAgaWYgKCgqY2luZm8tPmlucHV0Y3RsLT5jb25zdW1lX2lucHV0KSAoY2luZm8pID09IEpQRUdfU1VTUEVOREVEKQ0KLSAgICAgIHJldHVybiBGQUxTRTsJCS8qIFN1c3BlbmQsIGNvbWUgYmFjayBsYXRlciAqLw0KLSAgfQ0KLSAgLyogRG8gZmluYWwgY2xlYW51cCAqLw0KLSAgKCpjaW5mby0+c3JjLT50ZXJtX3NvdXJjZSkgKGNpbmZvKTsNCi0gIC8qIFdlIGNhbiB1c2UganBlZ19hYm9ydCB0byByZWxlYXNlIG1lbW9yeSBhbmQgcmVzZXQgZ2xvYmFsX3N0YXRlICovDQotICBqcGVnX2Fib3J0KChqX2NvbW1vbl9wdHIpIGNpbmZvKTsNCi0gIHJldHVybiBUUlVFOw0KLX0NCi0NCi0jZW5kaWYgLy9fRlhfSlBFR19UVVJCT18NCisjaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQorLyoKKyAqIGpkYXBpbWluLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OCwgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhcHBsaWNhdGlvbiBpbnRlcmZhY2UgY29kZSBmb3IgdGhlIGRlY29tcHJlc3Npb24gaGFsZgorICogb2YgdGhlIEpQRUcgbGlicmFyeS4gIFRoZXNlIGFyZSB0aGUgIm1pbmltdW0iIEFQSSByb3V0aW5lcyB0aGF0IG1heSBiZQorICogbmVlZGVkIGluIGVpdGhlciB0aGUgbm9ybWFsIGZ1bGwtZGVjb21wcmVzc2lvbiBjYXNlIG9yIHRoZQorICogdHJhbnNjb2Rpbmctb25seSBjYXNlLgorICoKKyAqIE1vc3Qgb2YgdGhlIHJvdXRpbmVzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBkaXJlY3RseSBieSBhbiBhcHBsaWNhdGlvbgorICogYXJlIGluIHRoaXMgZmlsZSBvciBpbiBqZGFwaXN0ZC5jLiAgQnV0IGFsc28gc2VlIGpjb21hcGkuYyBmb3Igcm91dGluZXMKKyAqIHNoYXJlZCBieSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiwgYW5kIGpkdHJhbnMuYyBmb3IgdGhlIHRyYW5zY29kaW5nCisgKiBjYXNlLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKworCisvKgorICogSW5pdGlhbGl6YXRpb24gb2YgYSBKUEVHIGRlY29tcHJlc3Npb24gb2JqZWN0LgorICogVGhlIGVycm9yIG1hbmFnZXIgbXVzdCBhbHJlYWR5IGJlIHNldCB1cCAoaW4gY2FzZSBtZW1vcnkgbWFuYWdlciBmYWlscykuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX0NyZWF0ZURlY29tcHJlc3MgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGludCB2ZXJzaW9uLCBzaXplX3Qgc3RydWN0c2l6ZSkKK3sKKyAgaW50IGk7CisKKyAgLyogR3VhcmQgYWdhaW5zdCB2ZXJzaW9uIG1pc21hdGNoZXMgYmV0d2VlbiBsaWJyYXJ5IGFuZCBjYWxsZXIuICovCisgIGNpbmZvLT5tZW0gPSBOVUxMOwkJLyogc28ganBlZ19kZXN0cm95IGtub3dzIG1lbSBtZ3Igbm90IGNhbGxlZCAqLworICBpZiAodmVyc2lvbiAhPSBKUEVHX0xJQl9WRVJTSU9OKQorICAgIEVSUkVYSVQyKGNpbmZvLCBKRVJSX0JBRF9MSUJfVkVSU0lPTiwgSlBFR19MSUJfVkVSU0lPTiwgdmVyc2lvbik7CisgIGlmIChzdHJ1Y3RzaXplICE9IFNJWkVPRihzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCkpCisgICAgRVJSRVhJVDIoY2luZm8sIEpFUlJfQkFEX1NUUlVDVF9TSVpFLCAKKwkgICAgIChpbnQpIFNJWkVPRihzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCksIChpbnQpIHN0cnVjdHNpemUpOworCisgIC8qIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIHdlIHplcm8gdGhlIHdob2xlIG1hc3RlciBzdHJ1Y3R1cmUuCisgICAqIEJ1dCB0aGUgYXBwbGljYXRpb24gaGFzIGFscmVhZHkgc2V0IHRoZSBlcnIgcG9pbnRlciwgYW5kIG1heSBoYXZlIHNldAorICAgKiBjbGllbnRfZGF0YSwgc28gd2UgaGF2ZSB0byBzYXZlIGFuZCByZXN0b3JlIHRob3NlIGZpZWxkcy4KKyAgICogTm90ZTogaWYgYXBwbGljYXRpb24gaGFzbid0IHNldCBjbGllbnRfZGF0YSwgdG9vbHMgbGlrZSBQdXJpZnkgbWF5CisgICAqIGNvbXBsYWluIGhlcmUuCisgICAqLworICB7CisgICAgc3RydWN0IGpwZWdfZXJyb3JfbWdyICogZXJyID0gY2luZm8tPmVycjsKKyAgICB2b2lkICogY2xpZW50X2RhdGEgPSBjaW5mby0+Y2xpZW50X2RhdGE7IC8qIGlnbm9yZSBQdXJpZnkgY29tcGxhaW50IGhlcmUgKi8KKyAgICBNRU1aRVJPKGNpbmZvLCBTSVpFT0Yoc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QpKTsKKyAgICBjaW5mby0+ZXJyID0gZXJyOworICAgIGNpbmZvLT5jbGllbnRfZGF0YSA9IGNsaWVudF9kYXRhOworICB9CisgIGNpbmZvLT5pc19kZWNvbXByZXNzb3IgPSBUUlVFOworCisgIC8qIEluaXRpYWxpemUgYSBtZW1vcnkgbWFuYWdlciBpbnN0YW5jZSBmb3IgdGhpcyBvYmplY3QgKi8KKyAgamluaXRfbWVtb3J5X21ncigoal9jb21tb25fcHRyKSBjaW5mbyk7CisKKyAgLyogWmVybyBvdXQgcG9pbnRlcnMgdG8gcGVybWFuZW50IHN0cnVjdHVyZXMuICovCisgIGNpbmZvLT5wcm9ncmVzcyA9IE5VTEw7CisgIGNpbmZvLT5zcmMgPSBOVUxMOworCisgIGZvciAoaSA9IDA7IGkgPCBOVU1fUVVBTlRfVEJMUzsgaSsrKQorICAgIGNpbmZvLT5xdWFudF90YmxfcHRyc1tpXSA9IE5VTEw7CisKKyAgZm9yIChpID0gMDsgaSA8IE5VTV9IVUZGX1RCTFM7IGkrKykgeworICAgIGNpbmZvLT5kY19odWZmX3RibF9wdHJzW2ldID0gTlVMTDsKKyAgICBjaW5mby0+YWNfaHVmZl90YmxfcHRyc1tpXSA9IE5VTEw7CisgIH0KKworICAvKiBJbml0aWFsaXplIG1hcmtlciBwcm9jZXNzb3Igc28gYXBwbGljYXRpb24gY2FuIG92ZXJyaWRlIG1ldGhvZHMKKyAgICogZm9yIENPTSwgQVBQbiBtYXJrZXJzIGJlZm9yZSBjYWxsaW5nIGpwZWdfcmVhZF9oZWFkZXIuCisgICAqLworICBjaW5mby0+bWFya2VyX2xpc3QgPSBOVUxMOworICBqaW5pdF9tYXJrZXJfcmVhZGVyKGNpbmZvKTsKKworICAvKiBBbmQgaW5pdGlhbGl6ZSB0aGUgb3ZlcmFsbCBpbnB1dCBjb250cm9sbGVyLiAqLworICBqaW5pdF9pbnB1dF9jb250cm9sbGVyKGNpbmZvKTsKKworICAvKiBPSywgSSdtIHJlYWR5ICovCisgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBEU1RBVEVfU1RBUlQ7Cit9CisKKworLyoKKyAqIERlc3RydWN0aW9uIG9mIGEgSlBFRyBkZWNvbXByZXNzaW9uIG9iamVjdAorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19kZXN0cm95X2RlY29tcHJlc3MgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIGpwZWdfZGVzdHJveSgoal9jb21tb25fcHRyKSBjaW5mbyk7IC8qIHVzZSBjb21tb24gcm91dGluZSAqLworfQorCisKKy8qCisgKiBBYm9ydCBwcm9jZXNzaW5nIG9mIGEgSlBFRyBkZWNvbXByZXNzaW9uIG9wZXJhdGlvbiwKKyAqIGJ1dCBkb24ndCBkZXN0cm95IHRoZSBvYmplY3QgaXRzZWxmLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19hYm9ydF9kZWNvbXByZXNzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBqcGVnX2Fib3J0KChqX2NvbW1vbl9wdHIpIGNpbmZvKTsgLyogdXNlIGNvbW1vbiByb3V0aW5lICovCit9CisKKworLyoKKyAqIFNldCBkZWZhdWx0IGRlY29tcHJlc3Npb24gcGFyYW1ldGVycy4KKyAqLworCitMT0NBTCh2b2lkKQorZGVmYXVsdF9kZWNvbXByZXNzX3Bhcm1zIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICAvKiBHdWVzcyB0aGUgaW5wdXQgY29sb3JzcGFjZSwgYW5kIHNldCBvdXRwdXQgY29sb3JzcGFjZSBhY2NvcmRpbmdseS4gKi8KKyAgLyogKFdpc2ggSlBFRyBjb21taXR0ZWUgaGFkIHByb3ZpZGVkIGEgcmVhbCB3YXkgdG8gc3BlY2lmeSB0aGlzLi4uKSAqLworICAvKiBOb3RlIGFwcGxpY2F0aW9uIG1heSBvdmVycmlkZSBvdXIgZ3Vlc3Nlcy4gKi8KKyAgc3dpdGNoIChjaW5mby0+bnVtX2NvbXBvbmVudHMpIHsKKyAgY2FzZSAxOgorICAgIGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX0dSQVlTQ0FMRTsKKyAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlID0gSkNTX0dSQVlTQ0FMRTsKKyAgICBicmVhazsKKyAgICAKKyAgY2FzZSAzOgorICAgIGlmIChjaW5mby0+c2F3X0pGSUZfbWFya2VyKSB7CisgICAgICBjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9IEpDU19ZQ2JDcjsgLyogSkZJRiBpbXBsaWVzIFlDYkNyICovCisgICAgfSBlbHNlIGlmIChjaW5mby0+c2F3X0Fkb2JlX21hcmtlcikgeworICAgICAgc3dpdGNoIChjaW5mby0+QWRvYmVfdHJhbnNmb3JtKSB7CisgICAgICBjYXNlIDA6CisJY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPSBKQ1NfUkdCOworCWJyZWFrOworICAgICAgY2FzZSAxOgorCWNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX1lDYkNyOworCWJyZWFrOworICAgICAgZGVmYXVsdDoKKwlXQVJOTVMxKGNpbmZvLCBKV1JOX0FET0JFX1hGT1JNLCBjaW5mby0+QWRvYmVfdHJhbnNmb3JtKTsKKwljaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9IEpDU19ZQ2JDcjsgLyogYXNzdW1lIGl0J3MgWUNiQ3IgKi8KKwlicmVhazsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLyogU2F3IG5vIHNwZWNpYWwgbWFya2VycywgdHJ5IHRvIGd1ZXNzIGZyb20gdGhlIGNvbXBvbmVudCBJRHMgKi8KKyAgICAgIGludCBjaWQwID0gY2luZm8tPmNvbXBfaW5mb1swXS5jb21wb25lbnRfaWQ7CisgICAgICBpbnQgY2lkMSA9IGNpbmZvLT5jb21wX2luZm9bMV0uY29tcG9uZW50X2lkOworICAgICAgaW50IGNpZDIgPSBjaW5mby0+Y29tcF9pbmZvWzJdLmNvbXBvbmVudF9pZDsKKworICAgICAgaWYgKGNpZDAgPT0gMSAmJiBjaWQxID09IDIgJiYgY2lkMiA9PSAzKQorCWNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX1lDYkNyOyAvKiBhc3N1bWUgSkZJRiB3L291dCBtYXJrZXIgKi8KKyAgICAgIGVsc2UgaWYgKGNpZDAgPT0gODIgJiYgY2lkMSA9PSA3MSAmJiBjaWQyID09IDY2KQorCWNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX1JHQjsgLyogQVNDSUkgJ1InLCAnRycsICdCJyAqLworICAgICAgZWxzZSB7CisJVFJBQ0VNUzMoY2luZm8sIDEsIEpUUkNfVU5LTk9XTl9JRFMsIGNpZDAsIGNpZDEsIGNpZDIpOworCWNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX1lDYkNyOyAvKiBhc3N1bWUgaXQncyBZQ2JDciAqLworICAgICAgfQorICAgIH0KKyAgICAvKiBBbHdheXMgZ3Vlc3MgUkdCIGlzIHByb3BlciBvdXRwdXQgY29sb3JzcGFjZS4gKi8KKyAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlID0gSkNTX1JHQjsKKyAgICBicmVhazsKKyAgICAKKyAgY2FzZSA0OgorICAgIGlmIChjaW5mby0+c2F3X0Fkb2JlX21hcmtlcikgeworICAgICAgc3dpdGNoIChjaW5mby0+QWRvYmVfdHJhbnNmb3JtKSB7CisgICAgICBjYXNlIDA6CisJY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPSBKQ1NfQ01ZSzsKKwlicmVhazsKKyAgICAgIGNhc2UgMjoKKwljaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9IEpDU19ZQ0NLOworCWJyZWFrOworICAgICAgZGVmYXVsdDoKKwlXQVJOTVMxKGNpbmZvLCBKV1JOX0FET0JFX1hGT1JNLCBjaW5mby0+QWRvYmVfdHJhbnNmb3JtKTsKKwljaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9IEpDU19ZQ0NLOyAvKiBhc3N1bWUgaXQncyBZQ0NLICovCisJYnJlYWs7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIE5vIHNwZWNpYWwgbWFya2VycywgYXNzdW1lIHN0cmFpZ2h0IENNWUsuICovCisgICAgICBjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9IEpDU19DTVlLOworICAgIH0KKyAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlID0gSkNTX0NNWUs7CisgICAgYnJlYWs7CisgICAgCisgIGRlZmF1bHQ6CisgICAgY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPSBKQ1NfVU5LTk9XTjsKKyAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlID0gSkNTX1VOS05PV047CisgICAgYnJlYWs7CisgIH0KKworICAvKiBTZXQgZGVmYXVsdHMgZm9yIG90aGVyIGRlY29tcHJlc3Npb24gcGFyYW1ldGVycy4gKi8KKyAgY2luZm8tPnNjYWxlX251bSA9IDE7CQkvKiAxOjEgc2NhbGluZyAqLworICBjaW5mby0+c2NhbGVfZGVub20gPSAxOworICBjaW5mby0+b3V0cHV0X2dhbW1hID0gMS4wOworICBjaW5mby0+YnVmZmVyZWRfaW1hZ2UgPSBGQUxTRTsKKyAgY2luZm8tPnJhd19kYXRhX291dCA9IEZBTFNFOworICBjaW5mby0+ZGN0X21ldGhvZCA9IEpEQ1RfREVGQVVMVDsKKyAgY2luZm8tPmRvX2ZhbmN5X3Vwc2FtcGxpbmcgPSBUUlVFOworICBjaW5mby0+ZG9fYmxvY2tfc21vb3RoaW5nID0gVFJVRTsKKyAgY2luZm8tPnF1YW50aXplX2NvbG9ycyA9IEZBTFNFOworICAvKiBXZSBzZXQgdGhlc2UgaW4gY2FzZSBhcHBsaWNhdGlvbiBvbmx5IHNldHMgcXVhbnRpemVfY29sb3JzLiAqLworICBjaW5mby0+ZGl0aGVyX21vZGUgPSBKRElUSEVSX0ZTOworI2lmZGVmIFFVQU5UXzJQQVNTX1NVUFBPUlRFRAorICBjaW5mby0+dHdvX3Bhc3NfcXVhbnRpemUgPSBUUlVFOworI2Vsc2UKKyAgY2luZm8tPnR3b19wYXNzX3F1YW50aXplID0gRkFMU0U7CisjZW5kaWYKKyAgY2luZm8tPmRlc2lyZWRfbnVtYmVyX29mX2NvbG9ycyA9IDI1NjsKKyAgY2luZm8tPmNvbG9ybWFwID0gTlVMTDsKKyAgLyogSW5pdGlhbGl6ZSBmb3Igbm8gbW9kZSBjaGFuZ2UgaW4gYnVmZmVyZWQtaW1hZ2UgbW9kZS4gKi8KKyAgY2luZm8tPmVuYWJsZV8xcGFzc19xdWFudCA9IEZBTFNFOworICBjaW5mby0+ZW5hYmxlX2V4dGVybmFsX3F1YW50ID0gRkFMU0U7CisgIGNpbmZvLT5lbmFibGVfMnBhc3NfcXVhbnQgPSBGQUxTRTsKK30KKworCisvKgorICogRGVjb21wcmVzc2lvbiBzdGFydHVwOiByZWFkIHN0YXJ0IG9mIEpQRUcgZGF0YXN0cmVhbSB0byBzZWUgd2hhdCdzIHRoZXJlLgorICogTmVlZCBvbmx5IGluaXRpYWxpemUgSlBFRyBvYmplY3QgYW5kIHN1cHBseSBhIGRhdGEgc291cmNlIGJlZm9yZSBjYWxsaW5nLgorICoKKyAqIFRoaXMgcm91dGluZSB3aWxsIHJlYWQgYXMgZmFyIGFzIHRoZSBmaXJzdCBTT1MgbWFya2VyIChpZSwgYWN0dWFsIHN0YXJ0IG9mCisgKiBjb21wcmVzc2VkIGRhdGEpLCBhbmQgd2lsbCBzYXZlIGFsbCB0YWJsZXMgYW5kIHBhcmFtZXRlcnMgaW4gdGhlIEpQRUcKKyAqIG9iamVjdC4gIEl0IHdpbGwgYWxzbyBpbml0aWFsaXplIHRoZSBkZWNvbXByZXNzaW9uIHBhcmFtZXRlcnMgdG8gZGVmYXVsdAorICogdmFsdWVzLCBhbmQgZmluYWxseSByZXR1cm4gSlBFR19IRUFERVJfT0suICBPbiByZXR1cm4sIHRoZSBhcHBsaWNhdGlvbiBtYXkKKyAqIGFkanVzdCB0aGUgZGVjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGFuZCB0aGVuIGNhbGwganBlZ19zdGFydF9kZWNvbXByZXNzLgorICogKE9yLCBpZiB0aGUgYXBwbGljYXRpb24gb25seSB3YW50ZWQgdG8gZGV0ZXJtaW5lIHRoZSBpbWFnZSBwYXJhbWV0ZXJzLAorICogdGhlIGRhdGEgbmVlZCBub3QgYmUgZGVjb21wcmVzc2VkLiAgSW4gdGhhdCBjYXNlLCBjYWxsIGpwZWdfYWJvcnQgb3IKKyAqIGpwZWdfZGVzdHJveSB0byByZWxlYXNlIGFueSB0ZW1wb3Jhcnkgc3BhY2UuKQorICogSWYgYW4gYWJicmV2aWF0ZWQgKHRhYmxlcyBvbmx5KSBkYXRhc3RyZWFtIGlzIHByZXNlbnRlZCwgdGhlIHJvdXRpbmUgd2lsbAorICogcmV0dXJuIEpQRUdfSEVBREVSX1RBQkxFU19PTkxZIHVwb24gcmVhY2hpbmcgRU9JLiAgVGhlIGFwcGxpY2F0aW9uIG1heSB0aGVuCisgKiByZS11c2UgdGhlIEpQRUcgb2JqZWN0IHRvIHJlYWQgdGhlIGFiYnJldmlhdGVkIGltYWdlIGRhdGFzdHJlYW0ocykuCisgKiBJdCBpcyB1bm5lY2Vzc2FyeSAoYnV0IE9LKSB0byBjYWxsIGpwZWdfYWJvcnQgaW4gdGhpcyBjYXNlLgorICogVGhlIEpQRUdfU1VTUEVOREVEIHJldHVybiBjb2RlIG9ubHkgb2NjdXJzIGlmIHRoZSBkYXRhIHNvdXJjZSBtb2R1bGUKKyAqIHJlcXVlc3RzIHN1c3BlbnNpb24gb2YgdGhlIGRlY29tcHJlc3Nvci4gIEluIHRoaXMgY2FzZSB0aGUgYXBwbGljYXRpb24KKyAqIHNob3VsZCBsb2FkIG1vcmUgc291cmNlIGRhdGEgYW5kIHRoZW4gcmUtY2FsbCBqcGVnX3JlYWRfaGVhZGVyIHRvIHJlc3VtZQorICogcHJvY2Vzc2luZy4KKyAqIElmIGEgbm9uLXN1c3BlbmRpbmcgZGF0YSBzb3VyY2UgaXMgdXNlZCBhbmQgcmVxdWlyZV9pbWFnZSBpcyBUUlVFLCB0aGVuIHRoZQorICogcmV0dXJuIGNvZGUgbmVlZCBub3QgYmUgaW5zcGVjdGVkIHNpbmNlIG9ubHkgSlBFR19IRUFERVJfT0sgaXMgcG9zc2libGUuCisgKgorICogVGhpcyByb3V0aW5lIGlzIG5vdyBqdXN0IGEgZnJvbnQgZW5kIHRvIGpwZWdfY29uc3VtZV9pbnB1dCwgd2l0aCBzb21lCisgKiBleHRyYSBlcnJvciBjaGVja2luZy4KKyAqLworCitHTE9CQUwoaW50KQoranBlZ19yZWFkX2hlYWRlciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiByZXF1aXJlX2ltYWdlKQoreworICBpbnQgcmV0Y29kZTsKKworICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBEU1RBVEVfU1RBUlQgJiYKKyAgICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gRFNUQVRFX0lOSEVBREVSKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CisKKyAgcmV0Y29kZSA9IGpwZWdfY29uc3VtZV9pbnB1dChjaW5mbyk7CisKKyAgc3dpdGNoIChyZXRjb2RlKSB7CisgIGNhc2UgSlBFR19SRUFDSEVEX1NPUzoKKyAgICByZXRjb2RlID0gSlBFR19IRUFERVJfT0s7CisgICAgYnJlYWs7CisgIGNhc2UgSlBFR19SRUFDSEVEX0VPSToKKyAgICBpZiAocmVxdWlyZV9pbWFnZSkJCS8qIENvbXBsYWluIGlmIGFwcGxpY2F0aW9uIHdhbnRlZCBhbiBpbWFnZSAqLworICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT19JTUFHRSk7CisgICAgLyogUmVzZXQgdG8gc3RhcnQgc3RhdGU7IGl0IHdvdWxkIGJlIHNhZmVyIHRvIHJlcXVpcmUgdGhlIGFwcGxpY2F0aW9uIHRvCisgICAgICogY2FsbCBqcGVnX2Fib3J0LCBidXQgd2UgY2FuJ3QgY2hhbmdlIGl0IG5vdyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLgorICAgICAqIEEgc2lkZSBlZmZlY3QgaXMgdG8gZnJlZSBhbnkgdGVtcG9yYXJ5IG1lbW9yeSAodGhlcmUgc2hvdWxkbid0IGJlIGFueSkuCisgICAgICovCisgICAganBlZ19hYm9ydCgoal9jb21tb25fcHRyKSBjaW5mbyk7IC8qIHNldHMgc3RhdGUgPSBEU1RBVEVfU1RBUlQgKi8KKyAgICByZXRjb2RlID0gSlBFR19IRUFERVJfVEFCTEVTX09OTFk7CisgICAgYnJlYWs7CisgIGNhc2UgSlBFR19TVVNQRU5ERUQ6CisgICAgLyogbm8gd29yayAqLworICAgIGJyZWFrOworICB9CisKKyAgcmV0dXJuIHJldGNvZGU7Cit9CisKKworLyoKKyAqIENvbnN1bWUgZGF0YSBpbiBhZHZhbmNlIG9mIHdoYXQgdGhlIGRlY29tcHJlc3NvciByZXF1aXJlcy4KKyAqIFRoaXMgY2FuIGJlIGNhbGxlZCBhdCBhbnkgdGltZSBvbmNlIHRoZSBkZWNvbXByZXNzb3Igb2JqZWN0IGhhcworICogYmVlbiBjcmVhdGVkIGFuZCBhIGRhdGEgc291cmNlIGhhcyBiZWVuIHNldCB1cC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgZXNzZW50aWFsbHkgYSBzdGF0ZSBtYWNoaW5lIHRoYXQgaGFuZGxlcyBhIGNvdXBsZQorICogb2YgY3JpdGljYWwgc3RhdGUtdHJhbnNpdGlvbiBhY3Rpb25zLCBuYW1lbHkgaW5pdGlhbCBzZXR1cCBhbmQKKyAqIHRyYW5zaXRpb24gZnJvbSBoZWFkZXIgc2Nhbm5pbmcgdG8gcmVhZHktZm9yLXN0YXJ0X2RlY29tcHJlc3MuCisgKiBBbGwgdGhlIGFjdHVhbCBpbnB1dCBpcyBkb25lIHZpYSB0aGUgaW5wdXQgY29udHJvbGxlcidzIGNvbnN1bWVfaW5wdXQKKyAqIG1ldGhvZC4KKyAqLworCitHTE9CQUwoaW50KQoranBlZ19jb25zdW1lX2lucHV0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBpbnQgcmV0Y29kZSA9IEpQRUdfU1VTUEVOREVEOworCisgIC8qIE5COiBldmVyeSBwb3NzaWJsZSBEU1RBVEUgdmFsdWUgc2hvdWxkIGJlIGxpc3RlZCBpbiB0aGlzIHN3aXRjaCAqLworICBzd2l0Y2ggKGNpbmZvLT5nbG9iYWxfc3RhdGUpIHsKKyAgY2FzZSBEU1RBVEVfU1RBUlQ6CisgICAgLyogU3RhcnQtb2YtZGF0YXN0cmVhbSBhY3Rpb25zOiByZXNldCBhcHByb3ByaWF0ZSBtb2R1bGVzICovCisgICAgKCpjaW5mby0+aW5wdXRjdGwtPnJlc2V0X2lucHV0X2NvbnRyb2xsZXIpIChjaW5mbyk7CisgICAgLyogSW5pdGlhbGl6ZSBhcHBsaWNhdGlvbidzIGRhdGEgc291cmNlIG1vZHVsZSAqLworICAgICgqY2luZm8tPnNyYy0+aW5pdF9zb3VyY2UpIChjaW5mbyk7CisgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IERTVEFURV9JTkhFQURFUjsKKyAgICAvKkZBTExUSFJPVUdIKi8KKyAgY2FzZSBEU1RBVEVfSU5IRUFERVI6CisgICAgcmV0Y29kZSA9ICgqY2luZm8tPmlucHV0Y3RsLT5jb25zdW1lX2lucHV0KSAoY2luZm8pOworICAgIGlmIChyZXRjb2RlID09IEpQRUdfUkVBQ0hFRF9TT1MpIHsgLyogRm91bmQgU09TLCBwcmVwYXJlIHRvIGRlY29tcHJlc3MgKi8KKyAgICAgIC8qIFNldCB1cCBkZWZhdWx0IHBhcmFtZXRlcnMgYmFzZWQgb24gaGVhZGVyIGRhdGEgKi8KKyAgICAgIGRlZmF1bHRfZGVjb21wcmVzc19wYXJtcyhjaW5mbyk7CisgICAgICAvKiBTZXQgZ2xvYmFsIHN0YXRlOiByZWFkeSBmb3Igc3RhcnRfZGVjb21wcmVzcyAqLworICAgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IERTVEFURV9SRUFEWTsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgRFNUQVRFX1JFQURZOgorICAgIC8qIENhbid0IGFkdmFuY2UgcGFzdCBmaXJzdCBTT1MgdW50aWwgc3RhcnRfZGVjb21wcmVzcyBpcyBjYWxsZWQgKi8KKyAgICByZXRjb2RlID0gSlBFR19SRUFDSEVEX1NPUzsKKyAgICBicmVhazsKKyAgY2FzZSBEU1RBVEVfUFJFTE9BRDoKKyAgY2FzZSBEU1RBVEVfUFJFU0NBTjoKKyAgY2FzZSBEU1RBVEVfU0NBTk5JTkc6CisgIGNhc2UgRFNUQVRFX1JBV19PSzoKKyAgY2FzZSBEU1RBVEVfQlVGSU1BR0U6CisgIGNhc2UgRFNUQVRFX0JVRlBPU1Q6CisgIGNhc2UgRFNUQVRFX1NUT1BQSU5HOgorICAgIHJldGNvZGUgPSAoKmNpbmZvLT5pbnB1dGN0bC0+Y29uc3VtZV9pbnB1dCkgKGNpbmZvKTsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOworICB9CisgIHJldHVybiByZXRjb2RlOworfQorCisKKy8qCisgKiBIYXZlIHdlIGZpbmlzaGVkIHJlYWRpbmcgdGhlIGlucHV0IGZpbGU/CisgKi8KKworR0xPQkFMKGJvb2xlYW4pCitqcGVnX2lucHV0X2NvbXBsZXRlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICAvKiBDaGVjayBmb3IgdmFsaWQganBlZyBvYmplY3QgKi8KKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgPCBEU1RBVEVfU1RBUlQgfHwKKyAgICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPiBEU1RBVEVfU1RPUFBJTkcpCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKKyAgcmV0dXJuIGNpbmZvLT5pbnB1dGN0bC0+ZW9pX3JlYWNoZWQ7Cit9CisKKworLyoKKyAqIElzIHRoZXJlIG1vcmUgdGhhbiBvbmUgc2Nhbj8KKyAqLworCitHTE9CQUwoYm9vbGVhbikKK2pwZWdfaGFzX211bHRpcGxlX3NjYW5zIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICAvKiBPbmx5IHZhbGlkIGFmdGVyIGpwZWdfcmVhZF9oZWFkZXIgY29tcGxldGVzICovCisgIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlIDwgRFNUQVRFX1JFQURZIHx8CisgICAgICBjaW5mby0+Z2xvYmFsX3N0YXRlID4gRFNUQVRFX1NUT1BQSU5HKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CisgIHJldHVybiBjaW5mby0+aW5wdXRjdGwtPmhhc19tdWx0aXBsZV9zY2FuczsKK30KKworCisvKgorICogRmluaXNoIEpQRUcgZGVjb21wcmVzc2lvbi4KKyAqCisgKiBUaGlzIHdpbGwgbm9ybWFsbHkganVzdCB2ZXJpZnkgdGhlIGZpbGUgdHJhaWxlciBhbmQgcmVsZWFzZSB0ZW1wIHN0b3JhZ2UuCisgKgorICogUmV0dXJucyBGQUxTRSBpZiBzdXNwZW5kZWQuICBUaGUgcmV0dXJuIHZhbHVlIG5lZWQgYmUgaW5zcGVjdGVkIG9ubHkgaWYKKyAqIGEgc3VzcGVuZGluZyBkYXRhIHNvdXJjZSBpcyB1c2VkLgorICovCisKK0dMT0JBTChib29sZWFuKQoranBlZ19maW5pc2hfZGVjb21wcmVzcyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgaWYgKChjaW5mby0+Z2xvYmFsX3N0YXRlID09IERTVEFURV9TQ0FOTklORyB8fAorICAgICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPT0gRFNUQVRFX1JBV19PSykgJiYgISBjaW5mby0+YnVmZmVyZWRfaW1hZ2UpIHsKKyAgICAvKiBUZXJtaW5hdGUgZmluYWwgcGFzcyBvZiBub24tYnVmZmVyZWQgbW9kZSAqLworICAgIGlmIChjaW5mby0+b3V0cHV0X3NjYW5saW5lIDwgY2luZm8tPm91dHB1dF9oZWlnaHQpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1RPT19MSVRUTEVfREFUQSk7CisgICAgKCpjaW5mby0+bWFzdGVyLT5maW5pc2hfb3V0cHV0X3Bhc3MpIChjaW5mbyk7CisgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IERTVEFURV9TVE9QUElORzsKKyAgfSBlbHNlIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlID09IERTVEFURV9CVUZJTUFHRSkgeworICAgIC8qIEZpbmlzaGluZyBhZnRlciBhIGJ1ZmZlcmVkLWltYWdlIG9wZXJhdGlvbiAqLworICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBEU1RBVEVfU1RPUFBJTkc7CisgIH0gZWxzZSBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBEU1RBVEVfU1RPUFBJTkcpIHsKKyAgICAvKiBTVE9QUElORyA9IHJlcGVhdCBjYWxsIGFmdGVyIGEgc3VzcGVuc2lvbiwgYW55dGhpbmcgZWxzZSBpcyBlcnJvciAqLworICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CisgIH0KKyAgLyogUmVhZCB1bnRpbCBFT0kgKi8KKyAgd2hpbGUgKCEgY2luZm8tPmlucHV0Y3RsLT5lb2lfcmVhY2hlZCkgeworICAgIGlmICgoKmNpbmZvLT5pbnB1dGN0bC0+Y29uc3VtZV9pbnB1dCkgKGNpbmZvKSA9PSBKUEVHX1NVU1BFTkRFRCkKKyAgICAgIHJldHVybiBGQUxTRTsJCS8qIFN1c3BlbmQsIGNvbWUgYmFjayBsYXRlciAqLworICB9CisgIC8qIERvIGZpbmFsIGNsZWFudXAgKi8KKyAgKCpjaW5mby0+c3JjLT50ZXJtX3NvdXJjZSkgKGNpbmZvKTsKKyAgLyogV2UgY2FuIHVzZSBqcGVnX2Fib3J0IHRvIHJlbGVhc2UgbWVtb3J5IGFuZCByZXNldCBnbG9iYWxfc3RhdGUgKi8KKyAganBlZ19hYm9ydCgoal9jb21tb25fcHRyKSBjaW5mbyk7CisgIHJldHVybiBUUlVFOworfQorCisjZW5kaWYgLy9fRlhfSlBFR19UVVJCT18KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pkYXBpc3RkLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZGFwaXN0ZC5jCmluZGV4IDhjOTY5ZWIuLjRjMzFmNzYgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pkYXBpc3RkLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamRhcGlzdGQuYwpAQCAtMSwyNzkgKzEsMjc5IEBACi0jaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQ0KLS8qDQotICogamRhcGlzdGQuYw0KLSAqDQotICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLg0KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuDQotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLg0KLSAqDQotICogVGhpcyBmaWxlIGNvbnRhaW5zIGFwcGxpY2F0aW9uIGludGVyZmFjZSBjb2RlIGZvciB0aGUgZGVjb21wcmVzc2lvbiBoYWxmDQotICogb2YgdGhlIEpQRUcgbGlicmFyeS4gIFRoZXNlIGFyZSB0aGUgInN0YW5kYXJkIiBBUEkgcm91dGluZXMgdGhhdCBhcmUNCi0gKiB1c2VkIGluIHRoZSBub3JtYWwgZnVsbC1kZWNvbXByZXNzaW9uIGNhc2UuICBUaGV5IGFyZSBub3QgdXNlZCBieSBhDQotICogdHJhbnNjb2Rpbmctb25seSBhcHBsaWNhdGlvbi4gIE5vdGUgdGhhdCBpZiBhbiBhcHBsaWNhdGlvbiBsaW5rcyBpbg0KLSAqIGpwZWdfc3RhcnRfZGVjb21wcmVzcywgaXQgd2lsbCBlbmQgdXAgbGlua2luZyBpbiB0aGUgZW50aXJlIGRlY29tcHJlc3Nvci4NCi0gKiBXZSB0aHVzIG11c3Qgc2VwYXJhdGUgdGhpcyBmaWxlIGZyb20gamRhcGltaW4uYyB0byBhdm9pZCBsaW5raW5nIHRoZQ0KLSAqIHdob2xlIGRlY29tcHJlc3Npb24gbGlicmFyeSBpbnRvIGEgdHJhbnNjb2Rlci4NCi0gKi8NCi0NCi0jZGVmaW5lIEpQRUdfSU5URVJOQUxTDQotI2luY2x1ZGUgImppbmNsdWRlLmgiDQotI2luY2x1ZGUgImpwZWdsaWIuaCINCi0NCi0NCi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLw0KLUxPQ0FMKGJvb2xlYW4pIG91dHB1dF9wYXNzX3NldHVwIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLQ0KLQ0KLS8qDQotICogRGVjb21wcmVzc2lvbiBpbml0aWFsaXphdGlvbi4NCi0gKiBqcGVnX3JlYWRfaGVhZGVyIG11c3QgYmUgY29tcGxldGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMuDQotICoNCi0gKiBJZiBhIG11bHRpcGFzcyBvcGVyYXRpbmcgbW9kZSB3YXMgc2VsZWN0ZWQsIHRoaXMgd2lsbCBkbyBhbGwgYnV0IHRoZQ0KLSAqIGxhc3QgcGFzcywgYW5kIHRodXMgbWF5IHRha2UgYSBncmVhdCBkZWFsIG9mIHRpbWUuDQotICoNCi0gKiBSZXR1cm5zIEZBTFNFIGlmIHN1c3BlbmRlZC4gIFRoZSByZXR1cm4gdmFsdWUgbmVlZCBiZSBpbnNwZWN0ZWQgb25seSBpZg0KLSAqIGEgc3VzcGVuZGluZyBkYXRhIHNvdXJjZSBpcyB1c2VkLg0KLSAqLw0KLQ0KLUdMT0JBTChib29sZWFuKQ0KLWpwZWdfc3RhcnRfZGVjb21wcmVzcyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSA9PSBEU1RBVEVfUkVBRFkpIHsNCi0gICAgLyogRmlyc3QgY2FsbDogaW5pdGlhbGl6ZSBtYXN0ZXIgY29udHJvbCwgc2VsZWN0IGFjdGl2ZSBtb2R1bGVzICovDQotICAgIGppbml0X21hc3Rlcl9kZWNvbXByZXNzKGNpbmZvKTsNCi0gICAgaWYgKGNpbmZvLT5idWZmZXJlZF9pbWFnZSkgew0KLSAgICAgIC8qIE5vIG1vcmUgd29yayBoZXJlOyBleHBlY3RpbmcganBlZ19zdGFydF9vdXRwdXQgbmV4dCAqLw0KLSAgICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBEU1RBVEVfQlVGSU1BR0U7DQotICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IERTVEFURV9QUkVMT0FEOw0KLSAgfQ0KLSAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgPT0gRFNUQVRFX1BSRUxPQUQpIHsNCi0gICAgLyogSWYgZmlsZSBoYXMgbXVsdGlwbGUgc2NhbnMsIGFic29yYiB0aGVtIGFsbCBpbnRvIHRoZSBjb2VmIGJ1ZmZlciAqLw0KLSAgICBpZiAoY2luZm8tPmlucHV0Y3RsLT5oYXNfbXVsdGlwbGVfc2NhbnMpIHsNCi0jaWZkZWYgRF9NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVEDQotICAgICAgZm9yICg7Oykgew0KLQlpbnQgcmV0Y29kZTsNCi0JLyogQ2FsbCBwcm9ncmVzcyBtb25pdG9yIGhvb2sgaWYgcHJlc2VudCAqLw0KLQlpZiAoY2luZm8tPnByb2dyZXNzICE9IE5VTEwpDQotCSAgKCpjaW5mby0+cHJvZ3Jlc3MtPnByb2dyZXNzX21vbml0b3IpICgoal9jb21tb25fcHRyKSBjaW5mbyk7DQotCS8qIEFic29yYiBzb21lIG1vcmUgaW5wdXQgKi8NCi0JcmV0Y29kZSA9ICgqY2luZm8tPmlucHV0Y3RsLT5jb25zdW1lX2lucHV0KSAoY2luZm8pOw0KLQlpZiAocmV0Y29kZSA9PSBKUEVHX1NVU1BFTkRFRCkNCi0JICByZXR1cm4gRkFMU0U7DQotCWlmIChyZXRjb2RlID09IEpQRUdfUkVBQ0hFRF9FT0kpDQotCSAgYnJlYWs7DQotCS8qIEFkdmFuY2UgcHJvZ3Jlc3MgY291bnRlciBpZiBhcHByb3ByaWF0ZSAqLw0KLQlpZiAoY2luZm8tPnByb2dyZXNzICE9IE5VTEwgJiYNCi0JICAgIChyZXRjb2RlID09IEpQRUdfUk9XX0NPTVBMRVRFRCB8fCByZXRjb2RlID09IEpQRUdfUkVBQ0hFRF9TT1MpKSB7DQotCSAgaWYgKCsrY2luZm8tPnByb2dyZXNzLT5wYXNzX2NvdW50ZXIgPj0gY2luZm8tPnByb2dyZXNzLT5wYXNzX2xpbWl0KSB7DQotCSAgICAvKiBqZG1hc3RlciB1bmRlcmVzdGltYXRlZCBudW1iZXIgb2Ygc2NhbnM7IHJhdGNoZXQgdXAgb25lIHNjYW4gKi8NCi0JICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19saW1pdCArPSAobG9uZykgY2luZm8tPnRvdGFsX2lNQ1Vfcm93czsNCi0JICB9DQotCX0NCi0gICAgICB9DQotI2Vsc2UNCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7DQotI2VuZGlmIC8qIERfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRCAqLw0KLSAgICB9DQotICAgIGNpbmZvLT5vdXRwdXRfc2Nhbl9udW1iZXIgPSBjaW5mby0+aW5wdXRfc2Nhbl9udW1iZXI7DQotICB9IGVsc2UgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gRFNUQVRFX1BSRVNDQU4pDQotICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7DQotICAvKiBQZXJmb3JtIGFueSBkdW1teSBvdXRwdXQgcGFzc2VzLCBhbmQgc2V0IHVwIGZvciB0aGUgZmluYWwgcGFzcyAqLw0KLSAgcmV0dXJuIG91dHB1dF9wYXNzX3NldHVwKGNpbmZvKTsNCi19DQotDQotDQotLyoNCi0gKiBTZXQgdXAgZm9yIGFuIG91dHB1dCBwYXNzLCBhbmQgcGVyZm9ybSBhbnkgZHVtbXkgcGFzcyhlcykgbmVlZGVkLg0KLSAqIENvbW1vbiBzdWJyb3V0aW5lIGZvciBqcGVnX3N0YXJ0X2RlY29tcHJlc3MgYW5kIGpwZWdfc3RhcnRfb3V0cHV0Lg0KLSAqIEVudHJ5OiBnbG9iYWxfc3RhdGUgPSBEU1RBVEVfUFJFU0NBTiBvbmx5IGlmIHByZXZpb3VzbHkgc3VzcGVuZGVkLg0KLSAqIEV4aXQ6IElmIGRvbmUsIHJldHVybnMgVFJVRSBhbmQgc2V0cyBnbG9iYWxfc3RhdGUgZm9yIHByb3BlciBvdXRwdXQgbW9kZS4NCi0gKiAgICAgICBJZiBzdXNwZW5kZWQsIHJldHVybnMgRkFMU0UgYW5kIHNldHMgZ2xvYmFsX3N0YXRlID0gRFNUQVRFX1BSRVNDQU4uDQotICovDQotDQotTE9DQUwoYm9vbGVhbikNCi1vdXRwdXRfcGFzc19zZXR1cCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBEU1RBVEVfUFJFU0NBTikgew0KLSAgICAvKiBGaXJzdCBjYWxsOiBkbyBwYXNzIHNldHVwICovDQotICAgICgqY2luZm8tPm1hc3Rlci0+cHJlcGFyZV9mb3Jfb3V0cHV0X3Bhc3MpIChjaW5mbyk7DQotICAgIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmUgPSAwOw0KLSAgICBjaW5mby0+Z2xvYmFsX3N0YXRlID0gRFNUQVRFX1BSRVNDQU47DQotICB9DQotICAvKiBMb29wIG92ZXIgYW55IHJlcXVpcmVkIGR1bW15IHBhc3NlcyAqLw0KLSAgd2hpbGUgKGNpbmZvLT5tYXN0ZXItPmlzX2R1bW15X3Bhc3MpIHsNCi0jaWZkZWYgUVVBTlRfMlBBU1NfU1VQUE9SVEVEDQotICAgIC8qIENyYW5rIHRocm91Z2ggdGhlIGR1bW15IHBhc3MgKi8NCi0gICAgd2hpbGUgKGNpbmZvLT5vdXRwdXRfc2NhbmxpbmUgPCBjaW5mby0+b3V0cHV0X2hlaWdodCkgew0KLSAgICAgIEpESU1FTlNJT04gbGFzdF9zY2FubGluZTsNCi0gICAgICAvKiBDYWxsIHByb2dyZXNzIG1vbml0b3IgaG9vayBpZiBwcmVzZW50ICovDQotICAgICAgaWYgKGNpbmZvLT5wcm9ncmVzcyAhPSBOVUxMKSB7DQotCWNpbmZvLT5wcm9ncmVzcy0+cGFzc19jb3VudGVyID0gKGxvbmcpIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmU7DQotCWNpbmZvLT5wcm9ncmVzcy0+cGFzc19saW1pdCA9IChsb25nKSBjaW5mby0+b3V0cHV0X2hlaWdodDsNCi0JKCpjaW5mby0+cHJvZ3Jlc3MtPnByb2dyZXNzX21vbml0b3IpICgoal9jb21tb25fcHRyKSBjaW5mbyk7DQotICAgICAgfQ0KLSAgICAgIC8qIFByb2Nlc3Mgc29tZSBkYXRhICovDQotICAgICAgbGFzdF9zY2FubGluZSA9IGNpbmZvLT5vdXRwdXRfc2NhbmxpbmU7DQotICAgICAgKCpjaW5mby0+bWFpbi0+cHJvY2Vzc19kYXRhKSAoY2luZm8sIChKU0FNUEFSUkFZKSBOVUxMLA0KLQkJCQkgICAgJmNpbmZvLT5vdXRwdXRfc2NhbmxpbmUsIChKRElNRU5TSU9OKSAwKTsNCi0gICAgICBpZiAoY2luZm8tPm91dHB1dF9zY2FubGluZSA9PSBsYXN0X3NjYW5saW5lKQ0KLQlyZXR1cm4gRkFMU0U7CQkvKiBObyBwcm9ncmVzcyBtYWRlLCBtdXN0IHN1c3BlbmQgKi8NCi0gICAgfQ0KLSAgICAvKiBGaW5pc2ggdXAgZHVtbXkgcGFzcywgYW5kIHNldCB1cCBmb3IgYW5vdGhlciBvbmUgKi8NCi0gICAgKCpjaW5mby0+bWFzdGVyLT5maW5pc2hfb3V0cHV0X3Bhc3MpIChjaW5mbyk7DQotICAgICgqY2luZm8tPm1hc3Rlci0+cHJlcGFyZV9mb3Jfb3V0cHV0X3Bhc3MpIChjaW5mbyk7DQotICAgIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmUgPSAwOw0KLSNlbHNlDQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsNCi0jZW5kaWYgLyogUVVBTlRfMlBBU1NfU1VQUE9SVEVEICovDQotICB9DQotICAvKiBSZWFkeSBmb3IgYXBwbGljYXRpb24gdG8gZHJpdmUgb3V0cHV0IHBhc3MgdGhyb3VnaA0KLSAgICoganBlZ19yZWFkX3NjYW5saW5lcyBvciBqcGVnX3JlYWRfcmF3X2RhdGEuDQotICAgKi8NCi0gIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBjaW5mby0+cmF3X2RhdGFfb3V0ID8gRFNUQVRFX1JBV19PSyA6IERTVEFURV9TQ0FOTklORzsNCi0gIHJldHVybiBUUlVFOw0KLX0NCi0NCi0NCi0vKg0KLSAqIFJlYWQgc29tZSBzY2FubGluZXMgb2YgZGF0YSBmcm9tIHRoZSBKUEVHIGRlY29tcHJlc3Nvci4NCi0gKg0KLSAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB0aGUgbnVtYmVyIG9mIGxpbmVzIGFjdHVhbGx5IHJlYWQuDQotICogVGhpcyBtYXkgYmUgbGVzcyB0aGFuIHRoZSBudW1iZXIgcmVxdWVzdGVkIGluIHNldmVyYWwgY2FzZXMsDQotICogaW5jbHVkaW5nIGJvdHRvbSBvZiBpbWFnZSwgZGF0YSBzb3VyY2Ugc3VzcGVuc2lvbiwgYW5kIG9wZXJhdGluZw0KLSAqIG1vZGVzIHRoYXQgZW1pdCBtdWx0aXBsZSBzY2FubGluZXMgYXQgYSB0aW1lLg0KLSAqDQotICogTm90ZTogd2Ugd2FybiBhYm91dCBleGNlc3MgY2FsbHMgdG8ganBlZ19yZWFkX3NjYW5saW5lcygpIHNpbmNlDQotICogdGhpcyBsaWtlbHkgc2lnbmFscyBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWVyIGVycm9yLiAgSG93ZXZlciwNCi0gKiBhbiBvdmVyc2l6ZSBidWZmZXIgKG1heF9saW5lcyA+IHNjYW5saW5lcyByZW1haW5pbmcpIGlzIG5vdCBhbiBlcnJvci4NCi0gKi8NCi0NCi1HTE9CQUwoSkRJTUVOU0lPTikNCi1qcGVnX3JlYWRfc2NhbmxpbmVzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIHNjYW5saW5lcywNCi0JCSAgICAgSkRJTUVOU0lPTiBtYXhfbGluZXMpDQotew0KLSAgSkRJTUVOU0lPTiByb3dfY3RyOw0KLQ0KLSAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gRFNUQVRFX1NDQU5OSU5HKQ0KLQkgIHJldHVybiAwOyAvKiBYWVEgMjAxMC02LTI3OiBkb24ndCB0aHJvdyBleGNlcHRpb24gaGVyZSAqLw0KLS8qICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7ICovDQotICBpZiAoY2luZm8tPm91dHB1dF9zY2FubGluZSA+PSBjaW5mby0+b3V0cHV0X2hlaWdodCkgew0KLSAgICBXQVJOTVMoY2luZm8sIEpXUk5fVE9PX01VQ0hfREFUQSk7DQotICAgIHJldHVybiAwOw0KLSAgfQ0KLQ0KLSAgLyogQ2FsbCBwcm9ncmVzcyBtb25pdG9yIGhvb2sgaWYgcHJlc2VudCAqLw0KLSAgaWYgKGNpbmZvLT5wcm9ncmVzcyAhPSBOVUxMKSB7DQotICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19jb3VudGVyID0gKGxvbmcpIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmU7DQotICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19saW1pdCA9IChsb25nKSBjaW5mby0+b3V0cHV0X2hlaWdodDsNCi0gICAgKCpjaW5mby0+cHJvZ3Jlc3MtPnByb2dyZXNzX21vbml0b3IpICgoal9jb21tb25fcHRyKSBjaW5mbyk7DQotICB9DQotDQotICAvKiBQcm9jZXNzIHNvbWUgZGF0YSAqLw0KLSAgcm93X2N0ciA9IDA7DQotICAoKmNpbmZvLT5tYWluLT5wcm9jZXNzX2RhdGEpIChjaW5mbywgc2NhbmxpbmVzLCAmcm93X2N0ciwgbWF4X2xpbmVzKTsNCi0gIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmUgKz0gcm93X2N0cjsNCi0gIHJldHVybiByb3dfY3RyOw0KLX0NCi0NCi0NCi0vKg0KLSAqIEFsdGVybmF0ZSBlbnRyeSBwb2ludCB0byByZWFkIHJhdyBkYXRhLg0KLSAqIFByb2Nlc3NlcyBleGFjdGx5IG9uZSBpTUNVIHJvdyBwZXIgY2FsbCwgdW5sZXNzIHN1c3BlbmRlZC4NCi0gKi8NCi0NCi1HTE9CQUwoSkRJTUVOU0lPTikNCi1qcGVnX3JlYWRfcmF3X2RhdGEgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0UgZGF0YSwNCi0JCSAgICBKRElNRU5TSU9OIG1heF9saW5lcykNCi17DQotICBKRElNRU5TSU9OIGxpbmVzX3Blcl9pTUNVX3JvdzsNCi0NCi0gIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IERTVEFURV9SQVdfT0spDQotICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7DQotICBpZiAoY2luZm8tPm91dHB1dF9zY2FubGluZSA+PSBjaW5mby0+b3V0cHV0X2hlaWdodCkgew0KLSAgICBXQVJOTVMoY2luZm8sIEpXUk5fVE9PX01VQ0hfREFUQSk7DQotICAgIHJldHVybiAwOw0KLSAgfQ0KLQ0KLSAgLyogQ2FsbCBwcm9ncmVzcyBtb25pdG9yIGhvb2sgaWYgcHJlc2VudCAqLw0KLSAgaWYgKGNpbmZvLT5wcm9ncmVzcyAhPSBOVUxMKSB7DQotICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19jb3VudGVyID0gKGxvbmcpIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmU7DQotICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19saW1pdCA9IChsb25nKSBjaW5mby0+b3V0cHV0X2hlaWdodDsNCi0gICAgKCpjaW5mby0+cHJvZ3Jlc3MtPnByb2dyZXNzX21vbml0b3IpICgoal9jb21tb25fcHRyKSBjaW5mbyk7DQotICB9DQotDQotICAvKiBWZXJpZnkgdGhhdCBhdCBsZWFzdCBvbmUgaU1DVSByb3cgY2FuIGJlIHJldHVybmVkLiAqLw0KLSAgbGluZXNfcGVyX2lNQ1Vfcm93ID0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemU7DQotICBpZiAobWF4X2xpbmVzIDwgbGluZXNfcGVyX2lNQ1Vfcm93KQ0KLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JVRkZFUl9TSVpFKTsNCi0NCi0gIC8qIERlY29tcHJlc3MgZGlyZWN0bHkgaW50byB1c2VyJ3MgYnVmZmVyLiAqLw0KLSAgaWYgKCEgKCpjaW5mby0+Y29lZi0+ZGVjb21wcmVzc19kYXRhKSAoY2luZm8sIGRhdGEpKQ0KLSAgICByZXR1cm4gMDsJCQkvKiBzdXNwZW5zaW9uIGZvcmNlZCwgY2FuIGRvIG5vdGhpbmcgbW9yZSAqLw0KLQ0KLSAgLyogT0ssIHdlIHByb2Nlc3NlZCBvbmUgaU1DVSByb3cuICovDQotICBjaW5mby0+b3V0cHV0X3NjYW5saW5lICs9IGxpbmVzX3Blcl9pTUNVX3JvdzsNCi0gIHJldHVybiBsaW5lc19wZXJfaU1DVV9yb3c7DQotfQ0KLQ0KLQ0KLS8qIEFkZGl0aW9uYWwgZW50cnkgcG9pbnRzIGZvciBidWZmZXJlZC1pbWFnZSBtb2RlLiAqLw0KLQ0KLSNpZmRlZiBEX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQNCi0NCi0vKg0KLSAqIEluaXRpYWxpemUgZm9yIGFuIG91dHB1dCBwYXNzIGluIGJ1ZmZlcmVkLWltYWdlIG1vZGUuDQotICovDQotDQotR0xPQkFMKGJvb2xlYW4pDQotanBlZ19zdGFydF9vdXRwdXQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGludCBzY2FuX251bWJlcikNCi17DQotICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBEU1RBVEVfQlVGSU1BR0UgJiYNCi0gICAgICBjaW5mby0+Z2xvYmFsX3N0YXRlICE9IERTVEFURV9QUkVTQ0FOKQ0KLSAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOw0KLSAgLyogTGltaXQgc2NhbiBudW1iZXIgdG8gdmFsaWQgcmFuZ2UgKi8NCi0gIGlmIChzY2FuX251bWJlciA8PSAwKQ0KLSAgICBzY2FuX251bWJlciA9IDE7DQotICBpZiAoY2luZm8tPmlucHV0Y3RsLT5lb2lfcmVhY2hlZCAmJg0KLSAgICAgIHNjYW5fbnVtYmVyID4gY2luZm8tPmlucHV0X3NjYW5fbnVtYmVyKQ0KLSAgICBzY2FuX251bWJlciA9IGNpbmZvLT5pbnB1dF9zY2FuX251bWJlcjsNCi0gIGNpbmZvLT5vdXRwdXRfc2Nhbl9udW1iZXIgPSBzY2FuX251bWJlcjsNCi0gIC8qIFBlcmZvcm0gYW55IGR1bW15IG91dHB1dCBwYXNzZXMsIGFuZCBzZXQgdXAgZm9yIHRoZSByZWFsIHBhc3MgKi8NCi0gIHJldHVybiBvdXRwdXRfcGFzc19zZXR1cChjaW5mbyk7DQotfQ0KLQ0KLQ0KLS8qDQotICogRmluaXNoIHVwIGFmdGVyIGFuIG91dHB1dCBwYXNzIGluIGJ1ZmZlcmVkLWltYWdlIG1vZGUuDQotICoNCi0gKiBSZXR1cm5zIEZBTFNFIGlmIHN1c3BlbmRlZC4gIFRoZSByZXR1cm4gdmFsdWUgbmVlZCBiZSBpbnNwZWN0ZWQgb25seSBpZg0KLSAqIGEgc3VzcGVuZGluZyBkYXRhIHNvdXJjZSBpcyB1c2VkLg0KLSAqLw0KLQ0KLUdMT0JBTChib29sZWFuKQ0KLWpwZWdfZmluaXNoX291dHB1dCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBpZiAoKGNpbmZvLT5nbG9iYWxfc3RhdGUgPT0gRFNUQVRFX1NDQU5OSU5HIHx8DQotICAgICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPT0gRFNUQVRFX1JBV19PSykgJiYgY2luZm8tPmJ1ZmZlcmVkX2ltYWdlKSB7DQotICAgIC8qIFRlcm1pbmF0ZSB0aGlzIHBhc3MuICovDQotICAgIC8qIFdlIGRvIG5vdCByZXF1aXJlIHRoZSB3aG9sZSBwYXNzIHRvIGhhdmUgYmVlbiBjb21wbGV0ZWQuICovDQotICAgICgqY2luZm8tPm1hc3Rlci0+ZmluaXNoX291dHB1dF9wYXNzKSAoY2luZm8pOw0KLSAgICBjaW5mby0+Z2xvYmFsX3N0YXRlID0gRFNUQVRFX0JVRlBPU1Q7DQotICB9IGVsc2UgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gRFNUQVRFX0JVRlBPU1QpIHsNCi0gICAgLyogQlVGUE9TVCA9IHJlcGVhdCBjYWxsIGFmdGVyIGEgc3VzcGVuc2lvbiwgYW55dGhpbmcgZWxzZSBpcyBlcnJvciAqLw0KLSAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOw0KLSAgfQ0KLSAgLyogUmVhZCBtYXJrZXJzIGxvb2tpbmcgZm9yIFNPUyBvciBFT0kgKi8NCi0gIHdoaWxlIChjaW5mby0+aW5wdXRfc2Nhbl9udW1iZXIgPD0gY2luZm8tPm91dHB1dF9zY2FuX251bWJlciAmJg0KLQkgISBjaW5mby0+aW5wdXRjdGwtPmVvaV9yZWFjaGVkKSB7DQotICAgIGlmICgoKmNpbmZvLT5pbnB1dGN0bC0+Y29uc3VtZV9pbnB1dCkgKGNpbmZvKSA9PSBKUEVHX1NVU1BFTkRFRCkNCi0gICAgICByZXR1cm4gRkFMU0U7CQkvKiBTdXNwZW5kLCBjb21lIGJhY2sgbGF0ZXIgKi8NCi0gIH0NCi0gIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBEU1RBVEVfQlVGSU1BR0U7DQotICByZXR1cm4gVFJVRTsNCi19DQotDQotI2VuZGlmIC8qIERfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRCAqLw0KLQ0KLSNlbmRpZiAvL19GWF9KUEVHX1RVUkJPXw0KKyNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pCisvKgorICogamRhcGlzdGQuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGFwcGxpY2F0aW9uIGludGVyZmFjZSBjb2RlIGZvciB0aGUgZGVjb21wcmVzc2lvbiBoYWxmCisgKiBvZiB0aGUgSlBFRyBsaWJyYXJ5LiAgVGhlc2UgYXJlIHRoZSAic3RhbmRhcmQiIEFQSSByb3V0aW5lcyB0aGF0IGFyZQorICogdXNlZCBpbiB0aGUgbm9ybWFsIGZ1bGwtZGVjb21wcmVzc2lvbiBjYXNlLiAgVGhleSBhcmUgbm90IHVzZWQgYnkgYQorICogdHJhbnNjb2Rpbmctb25seSBhcHBsaWNhdGlvbi4gIE5vdGUgdGhhdCBpZiBhbiBhcHBsaWNhdGlvbiBsaW5rcyBpbgorICoganBlZ19zdGFydF9kZWNvbXByZXNzLCBpdCB3aWxsIGVuZCB1cCBsaW5raW5nIGluIHRoZSBlbnRpcmUgZGVjb21wcmVzc29yLgorICogV2UgdGh1cyBtdXN0IHNlcGFyYXRlIHRoaXMgZmlsZSBmcm9tIGpkYXBpbWluLmMgdG8gYXZvaWQgbGlua2luZyB0aGUKKyAqIHdob2xlIGRlY29tcHJlc3Npb24gbGlicmFyeSBpbnRvIGEgdHJhbnNjb2Rlci4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK0xPQ0FMKGJvb2xlYW4pIG91dHB1dF9wYXNzX3NldHVwIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworCisKKy8qCisgKiBEZWNvbXByZXNzaW9uIGluaXRpYWxpemF0aW9uLgorICoganBlZ19yZWFkX2hlYWRlciBtdXN0IGJlIGNvbXBsZXRlZCBiZWZvcmUgY2FsbGluZyB0aGlzLgorICoKKyAqIElmIGEgbXVsdGlwYXNzIG9wZXJhdGluZyBtb2RlIHdhcyBzZWxlY3RlZCwgdGhpcyB3aWxsIGRvIGFsbCBidXQgdGhlCisgKiBsYXN0IHBhc3MsIGFuZCB0aHVzIG1heSB0YWtlIGEgZ3JlYXQgZGVhbCBvZiB0aW1lLgorICoKKyAqIFJldHVybnMgRkFMU0UgaWYgc3VzcGVuZGVkLiAgVGhlIHJldHVybiB2YWx1ZSBuZWVkIGJlIGluc3BlY3RlZCBvbmx5IGlmCisgKiBhIHN1c3BlbmRpbmcgZGF0YSBzb3VyY2UgaXMgdXNlZC4KKyAqLworCitHTE9CQUwoYm9vbGVhbikKK2pwZWdfc3RhcnRfZGVjb21wcmVzcyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgPT0gRFNUQVRFX1JFQURZKSB7CisgICAgLyogRmlyc3QgY2FsbDogaW5pdGlhbGl6ZSBtYXN0ZXIgY29udHJvbCwgc2VsZWN0IGFjdGl2ZSBtb2R1bGVzICovCisgICAgamluaXRfbWFzdGVyX2RlY29tcHJlc3MoY2luZm8pOworICAgIGlmIChjaW5mby0+YnVmZmVyZWRfaW1hZ2UpIHsKKyAgICAgIC8qIE5vIG1vcmUgd29yayBoZXJlOyBleHBlY3RpbmcganBlZ19zdGFydF9vdXRwdXQgbmV4dCAqLworICAgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IERTVEFURV9CVUZJTUFHRTsKKyAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBjaW5mby0+Z2xvYmFsX3N0YXRlID0gRFNUQVRFX1BSRUxPQUQ7CisgIH0KKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgPT0gRFNUQVRFX1BSRUxPQUQpIHsKKyAgICAvKiBJZiBmaWxlIGhhcyBtdWx0aXBsZSBzY2FucywgYWJzb3JiIHRoZW0gYWxsIGludG8gdGhlIGNvZWYgYnVmZmVyICovCisgICAgaWYgKGNpbmZvLT5pbnB1dGN0bC0+aGFzX211bHRpcGxlX3NjYW5zKSB7CisjaWZkZWYgRF9NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVECisgICAgICBmb3IgKDs7KSB7CisJaW50IHJldGNvZGU7CisJLyogQ2FsbCBwcm9ncmVzcyBtb25pdG9yIGhvb2sgaWYgcHJlc2VudCAqLworCWlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCkKKwkgICgqY2luZm8tPnByb2dyZXNzLT5wcm9ncmVzc19tb25pdG9yKSAoKGpfY29tbW9uX3B0cikgY2luZm8pOworCS8qIEFic29yYiBzb21lIG1vcmUgaW5wdXQgKi8KKwlyZXRjb2RlID0gKCpjaW5mby0+aW5wdXRjdGwtPmNvbnN1bWVfaW5wdXQpIChjaW5mbyk7CisJaWYgKHJldGNvZGUgPT0gSlBFR19TVVNQRU5ERUQpCisJICByZXR1cm4gRkFMU0U7CisJaWYgKHJldGNvZGUgPT0gSlBFR19SRUFDSEVEX0VPSSkKKwkgIGJyZWFrOworCS8qIEFkdmFuY2UgcHJvZ3Jlc3MgY291bnRlciBpZiBhcHByb3ByaWF0ZSAqLworCWlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCAmJgorCSAgICAocmV0Y29kZSA9PSBKUEVHX1JPV19DT01QTEVURUQgfHwgcmV0Y29kZSA9PSBKUEVHX1JFQUNIRURfU09TKSkgeworCSAgaWYgKCsrY2luZm8tPnByb2dyZXNzLT5wYXNzX2NvdW50ZXIgPj0gY2luZm8tPnByb2dyZXNzLT5wYXNzX2xpbWl0KSB7CisJICAgIC8qIGpkbWFzdGVyIHVuZGVyZXN0aW1hdGVkIG51bWJlciBvZiBzY2FuczsgcmF0Y2hldCB1cCBvbmUgc2NhbiAqLworCSAgICBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfbGltaXQgKz0gKGxvbmcpIGNpbmZvLT50b3RhbF9pTUNVX3Jvd3M7CisJICB9CisJfQorICAgICAgfQorI2Vsc2UKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsKKyNlbmRpZiAvKiBEX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQgKi8KKyAgICB9CisgICAgY2luZm8tPm91dHB1dF9zY2FuX251bWJlciA9IGNpbmZvLT5pbnB1dF9zY2FuX251bWJlcjsKKyAgfSBlbHNlIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IERTVEFURV9QUkVTQ0FOKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CisgIC8qIFBlcmZvcm0gYW55IGR1bW15IG91dHB1dCBwYXNzZXMsIGFuZCBzZXQgdXAgZm9yIHRoZSBmaW5hbCBwYXNzICovCisgIHJldHVybiBvdXRwdXRfcGFzc19zZXR1cChjaW5mbyk7Cit9CisKKworLyoKKyAqIFNldCB1cCBmb3IgYW4gb3V0cHV0IHBhc3MsIGFuZCBwZXJmb3JtIGFueSBkdW1teSBwYXNzKGVzKSBuZWVkZWQuCisgKiBDb21tb24gc3Vicm91dGluZSBmb3IganBlZ19zdGFydF9kZWNvbXByZXNzIGFuZCBqcGVnX3N0YXJ0X291dHB1dC4KKyAqIEVudHJ5OiBnbG9iYWxfc3RhdGUgPSBEU1RBVEVfUFJFU0NBTiBvbmx5IGlmIHByZXZpb3VzbHkgc3VzcGVuZGVkLgorICogRXhpdDogSWYgZG9uZSwgcmV0dXJucyBUUlVFIGFuZCBzZXRzIGdsb2JhbF9zdGF0ZSBmb3IgcHJvcGVyIG91dHB1dCBtb2RlLgorICogICAgICAgSWYgc3VzcGVuZGVkLCByZXR1cm5zIEZBTFNFIGFuZCBzZXRzIGdsb2JhbF9zdGF0ZSA9IERTVEFURV9QUkVTQ0FOLgorICovCisKK0xPQ0FMKGJvb2xlYW4pCitvdXRwdXRfcGFzc19zZXR1cCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gRFNUQVRFX1BSRVNDQU4pIHsKKyAgICAvKiBGaXJzdCBjYWxsOiBkbyBwYXNzIHNldHVwICovCisgICAgKCpjaW5mby0+bWFzdGVyLT5wcmVwYXJlX2Zvcl9vdXRwdXRfcGFzcykgKGNpbmZvKTsKKyAgICBjaW5mby0+b3V0cHV0X3NjYW5saW5lID0gMDsKKyAgICBjaW5mby0+Z2xvYmFsX3N0YXRlID0gRFNUQVRFX1BSRVNDQU47CisgIH0KKyAgLyogTG9vcCBvdmVyIGFueSByZXF1aXJlZCBkdW1teSBwYXNzZXMgKi8KKyAgd2hpbGUgKGNpbmZvLT5tYXN0ZXItPmlzX2R1bW15X3Bhc3MpIHsKKyNpZmRlZiBRVUFOVF8yUEFTU19TVVBQT1JURUQKKyAgICAvKiBDcmFuayB0aHJvdWdoIHRoZSBkdW1teSBwYXNzICovCisgICAgd2hpbGUgKGNpbmZvLT5vdXRwdXRfc2NhbmxpbmUgPCBjaW5mby0+b3V0cHV0X2hlaWdodCkgeworICAgICAgSkRJTUVOU0lPTiBsYXN0X3NjYW5saW5lOworICAgICAgLyogQ2FsbCBwcm9ncmVzcyBtb25pdG9yIGhvb2sgaWYgcHJlc2VudCAqLworICAgICAgaWYgKGNpbmZvLT5wcm9ncmVzcyAhPSBOVUxMKSB7CisJY2luZm8tPnByb2dyZXNzLT5wYXNzX2NvdW50ZXIgPSAobG9uZykgY2luZm8tPm91dHB1dF9zY2FubGluZTsKKwljaW5mby0+cHJvZ3Jlc3MtPnBhc3NfbGltaXQgPSAobG9uZykgY2luZm8tPm91dHB1dF9oZWlnaHQ7CisJKCpjaW5mby0+cHJvZ3Jlc3MtPnByb2dyZXNzX21vbml0b3IpICgoal9jb21tb25fcHRyKSBjaW5mbyk7CisgICAgICB9CisgICAgICAvKiBQcm9jZXNzIHNvbWUgZGF0YSAqLworICAgICAgbGFzdF9zY2FubGluZSA9IGNpbmZvLT5vdXRwdXRfc2NhbmxpbmU7CisgICAgICAoKmNpbmZvLT5tYWluLT5wcm9jZXNzX2RhdGEpIChjaW5mbywgKEpTQU1QQVJSQVkpIE5VTEwsCisJCQkJICAgICZjaW5mby0+b3V0cHV0X3NjYW5saW5lLCAoSkRJTUVOU0lPTikgMCk7CisgICAgICBpZiAoY2luZm8tPm91dHB1dF9zY2FubGluZSA9PSBsYXN0X3NjYW5saW5lKQorCXJldHVybiBGQUxTRTsJCS8qIE5vIHByb2dyZXNzIG1hZGUsIG11c3Qgc3VzcGVuZCAqLworICAgIH0KKyAgICAvKiBGaW5pc2ggdXAgZHVtbXkgcGFzcywgYW5kIHNldCB1cCBmb3IgYW5vdGhlciBvbmUgKi8KKyAgICAoKmNpbmZvLT5tYXN0ZXItPmZpbmlzaF9vdXRwdXRfcGFzcykgKGNpbmZvKTsKKyAgICAoKmNpbmZvLT5tYXN0ZXItPnByZXBhcmVfZm9yX291dHB1dF9wYXNzKSAoY2luZm8pOworICAgIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmUgPSAwOworI2Vsc2UKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisjZW5kaWYgLyogUVVBTlRfMlBBU1NfU1VQUE9SVEVEICovCisgIH0KKyAgLyogUmVhZHkgZm9yIGFwcGxpY2F0aW9uIHRvIGRyaXZlIG91dHB1dCBwYXNzIHRocm91Z2gKKyAgICoganBlZ19yZWFkX3NjYW5saW5lcyBvciBqcGVnX3JlYWRfcmF3X2RhdGEuCisgICAqLworICBjaW5mby0+Z2xvYmFsX3N0YXRlID0gY2luZm8tPnJhd19kYXRhX291dCA/IERTVEFURV9SQVdfT0sgOiBEU1RBVEVfU0NBTk5JTkc7CisgIHJldHVybiBUUlVFOworfQorCisKKy8qCisgKiBSZWFkIHNvbWUgc2NhbmxpbmVzIG9mIGRhdGEgZnJvbSB0aGUgSlBFRyBkZWNvbXByZXNzb3IuCisgKgorICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHRoZSBudW1iZXIgb2YgbGluZXMgYWN0dWFsbHkgcmVhZC4KKyAqIFRoaXMgbWF5IGJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZCBpbiBzZXZlcmFsIGNhc2VzLAorICogaW5jbHVkaW5nIGJvdHRvbSBvZiBpbWFnZSwgZGF0YSBzb3VyY2Ugc3VzcGVuc2lvbiwgYW5kIG9wZXJhdGluZworICogbW9kZXMgdGhhdCBlbWl0IG11bHRpcGxlIHNjYW5saW5lcyBhdCBhIHRpbWUuCisgKgorICogTm90ZTogd2Ugd2FybiBhYm91dCBleGNlc3MgY2FsbHMgdG8ganBlZ19yZWFkX3NjYW5saW5lcygpIHNpbmNlCisgKiB0aGlzIGxpa2VseSBzaWduYWxzIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1tZXIgZXJyb3IuICBIb3dldmVyLAorICogYW4gb3ZlcnNpemUgYnVmZmVyIChtYXhfbGluZXMgPiBzY2FubGluZXMgcmVtYWluaW5nKSBpcyBub3QgYW4gZXJyb3IuCisgKi8KKworR0xPQkFMKEpESU1FTlNJT04pCitqcGVnX3JlYWRfc2NhbmxpbmVzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIHNjYW5saW5lcywKKwkJICAgICBKRElNRU5TSU9OIG1heF9saW5lcykKK3sKKyAgSkRJTUVOU0lPTiByb3dfY3RyOworCisgIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IERTVEFURV9TQ0FOTklORykKKwkgIHJldHVybiAwOyAvKiBYWVEgMjAxMC02LTI3OiBkb24ndCB0aHJvdyBleGNlcHRpb24gaGVyZSAqLworLyogICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsgKi8KKyAgaWYgKGNpbmZvLT5vdXRwdXRfc2NhbmxpbmUgPj0gY2luZm8tPm91dHB1dF9oZWlnaHQpIHsKKyAgICBXQVJOTVMoY2luZm8sIEpXUk5fVE9PX01VQ0hfREFUQSk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBDYWxsIHByb2dyZXNzIG1vbml0b3IgaG9vayBpZiBwcmVzZW50ICovCisgIGlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCkgeworICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19jb3VudGVyID0gKGxvbmcpIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmU7CisgICAgY2luZm8tPnByb2dyZXNzLT5wYXNzX2xpbWl0ID0gKGxvbmcpIGNpbmZvLT5vdXRwdXRfaGVpZ2h0OworICAgICgqY2luZm8tPnByb2dyZXNzLT5wcm9ncmVzc19tb25pdG9yKSAoKGpfY29tbW9uX3B0cikgY2luZm8pOworICB9CisKKyAgLyogUHJvY2VzcyBzb21lIGRhdGEgKi8KKyAgcm93X2N0ciA9IDA7CisgICgqY2luZm8tPm1haW4tPnByb2Nlc3NfZGF0YSkgKGNpbmZvLCBzY2FubGluZXMsICZyb3dfY3RyLCBtYXhfbGluZXMpOworICBjaW5mby0+b3V0cHV0X3NjYW5saW5lICs9IHJvd19jdHI7CisgIHJldHVybiByb3dfY3RyOworfQorCisKKy8qCisgKiBBbHRlcm5hdGUgZW50cnkgcG9pbnQgdG8gcmVhZCByYXcgZGF0YS4KKyAqIFByb2Nlc3NlcyBleGFjdGx5IG9uZSBpTUNVIHJvdyBwZXIgY2FsbCwgdW5sZXNzIHN1c3BlbmRlZC4KKyAqLworCitHTE9CQUwoSkRJTUVOU0lPTikKK2pwZWdfcmVhZF9yYXdfZGF0YSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBkYXRhLAorCQkgICAgSkRJTUVOU0lPTiBtYXhfbGluZXMpCit7CisgIEpESU1FTlNJT04gbGluZXNfcGVyX2lNQ1Vfcm93OworCisgIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IERTVEFURV9SQVdfT0spCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKKyAgaWYgKGNpbmZvLT5vdXRwdXRfc2NhbmxpbmUgPj0gY2luZm8tPm91dHB1dF9oZWlnaHQpIHsKKyAgICBXQVJOTVMoY2luZm8sIEpXUk5fVE9PX01VQ0hfREFUQSk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBDYWxsIHByb2dyZXNzIG1vbml0b3IgaG9vayBpZiBwcmVzZW50ICovCisgIGlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCkgeworICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19jb3VudGVyID0gKGxvbmcpIGNpbmZvLT5vdXRwdXRfc2NhbmxpbmU7CisgICAgY2luZm8tPnByb2dyZXNzLT5wYXNzX2xpbWl0ID0gKGxvbmcpIGNpbmZvLT5vdXRwdXRfaGVpZ2h0OworICAgICgqY2luZm8tPnByb2dyZXNzLT5wcm9ncmVzc19tb25pdG9yKSAoKGpfY29tbW9uX3B0cikgY2luZm8pOworICB9CisKKyAgLyogVmVyaWZ5IHRoYXQgYXQgbGVhc3Qgb25lIGlNQ1Ugcm93IGNhbiBiZSByZXR1cm5lZC4gKi8KKyAgbGluZXNfcGVyX2lNQ1Vfcm93ID0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemU7CisgIGlmIChtYXhfbGluZXMgPCBsaW5lc19wZXJfaU1DVV9yb3cpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CVUZGRVJfU0laRSk7CisKKyAgLyogRGVjb21wcmVzcyBkaXJlY3RseSBpbnRvIHVzZXIncyBidWZmZXIuICovCisgIGlmICghICgqY2luZm8tPmNvZWYtPmRlY29tcHJlc3NfZGF0YSkgKGNpbmZvLCBkYXRhKSkKKyAgICByZXR1cm4gMDsJCQkvKiBzdXNwZW5zaW9uIGZvcmNlZCwgY2FuIGRvIG5vdGhpbmcgbW9yZSAqLworCisgIC8qIE9LLCB3ZSBwcm9jZXNzZWQgb25lIGlNQ1Ugcm93LiAqLworICBjaW5mby0+b3V0cHV0X3NjYW5saW5lICs9IGxpbmVzX3Blcl9pTUNVX3JvdzsKKyAgcmV0dXJuIGxpbmVzX3Blcl9pTUNVX3JvdzsKK30KKworCisvKiBBZGRpdGlvbmFsIGVudHJ5IHBvaW50cyBmb3IgYnVmZmVyZWQtaW1hZ2UgbW9kZS4gKi8KKworI2lmZGVmIERfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRAorCisvKgorICogSW5pdGlhbGl6ZSBmb3IgYW4gb3V0cHV0IHBhc3MgaW4gYnVmZmVyZWQtaW1hZ2UgbW9kZS4KKyAqLworCitHTE9CQUwoYm9vbGVhbikKK2pwZWdfc3RhcnRfb3V0cHV0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgc2Nhbl9udW1iZXIpCit7CisgIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IERTVEFURV9CVUZJTUFHRSAmJgorICAgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBEU1RBVEVfUFJFU0NBTikKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOworICAvKiBMaW1pdCBzY2FuIG51bWJlciB0byB2YWxpZCByYW5nZSAqLworICBpZiAoc2Nhbl9udW1iZXIgPD0gMCkKKyAgICBzY2FuX251bWJlciA9IDE7CisgIGlmIChjaW5mby0+aW5wdXRjdGwtPmVvaV9yZWFjaGVkICYmCisgICAgICBzY2FuX251bWJlciA+IGNpbmZvLT5pbnB1dF9zY2FuX251bWJlcikKKyAgICBzY2FuX251bWJlciA9IGNpbmZvLT5pbnB1dF9zY2FuX251bWJlcjsKKyAgY2luZm8tPm91dHB1dF9zY2FuX251bWJlciA9IHNjYW5fbnVtYmVyOworICAvKiBQZXJmb3JtIGFueSBkdW1teSBvdXRwdXQgcGFzc2VzLCBhbmQgc2V0IHVwIGZvciB0aGUgcmVhbCBwYXNzICovCisgIHJldHVybiBvdXRwdXRfcGFzc19zZXR1cChjaW5mbyk7Cit9CisKKworLyoKKyAqIEZpbmlzaCB1cCBhZnRlciBhbiBvdXRwdXQgcGFzcyBpbiBidWZmZXJlZC1pbWFnZSBtb2RlLgorICoKKyAqIFJldHVybnMgRkFMU0UgaWYgc3VzcGVuZGVkLiAgVGhlIHJldHVybiB2YWx1ZSBuZWVkIGJlIGluc3BlY3RlZCBvbmx5IGlmCisgKiBhIHN1c3BlbmRpbmcgZGF0YSBzb3VyY2UgaXMgdXNlZC4KKyAqLworCitHTE9CQUwoYm9vbGVhbikKK2pwZWdfZmluaXNoX291dHB1dCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgaWYgKChjaW5mby0+Z2xvYmFsX3N0YXRlID09IERTVEFURV9TQ0FOTklORyB8fAorICAgICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPT0gRFNUQVRFX1JBV19PSykgJiYgY2luZm8tPmJ1ZmZlcmVkX2ltYWdlKSB7CisgICAgLyogVGVybWluYXRlIHRoaXMgcGFzcy4gKi8KKyAgICAvKiBXZSBkbyBub3QgcmVxdWlyZSB0aGUgd2hvbGUgcGFzcyB0byBoYXZlIGJlZW4gY29tcGxldGVkLiAqLworICAgICgqY2luZm8tPm1hc3Rlci0+ZmluaXNoX291dHB1dF9wYXNzKSAoY2luZm8pOworICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBEU1RBVEVfQlVGUE9TVDsKKyAgfSBlbHNlIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IERTVEFURV9CVUZQT1NUKSB7CisgICAgLyogQlVGUE9TVCA9IHJlcGVhdCBjYWxsIGFmdGVyIGEgc3VzcGVuc2lvbiwgYW55dGhpbmcgZWxzZSBpcyBlcnJvciAqLworICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CisgIH0KKyAgLyogUmVhZCBtYXJrZXJzIGxvb2tpbmcgZm9yIFNPUyBvciBFT0kgKi8KKyAgd2hpbGUgKGNpbmZvLT5pbnB1dF9zY2FuX251bWJlciA8PSBjaW5mby0+b3V0cHV0X3NjYW5fbnVtYmVyICYmCisJICEgY2luZm8tPmlucHV0Y3RsLT5lb2lfcmVhY2hlZCkgeworICAgIGlmICgoKmNpbmZvLT5pbnB1dGN0bC0+Y29uc3VtZV9pbnB1dCkgKGNpbmZvKSA9PSBKUEVHX1NVU1BFTkRFRCkKKyAgICAgIHJldHVybiBGQUxTRTsJCS8qIFN1c3BlbmQsIGNvbWUgYmFjayBsYXRlciAqLworICB9CisgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBEU1RBVEVfQlVGSU1BR0U7CisgIHJldHVybiBUUlVFOworfQorCisjZW5kaWYgLyogRF9NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVEICovCisKKyNlbmRpZiAvL19GWF9KUEVHX1RVUkJPXwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamRjb2VmY3QuYyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pkY29lZmN0LmMKaW5kZXggODkwNDFmMy4uMDk5ODMzYSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamRjb2VmY3QuYworKysgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZGNvZWZjdC5jCkBAIC0xLDczOSArMSw3MzkgQEAKLSNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pDQotLyoNCi0gKiBqZGNvZWZjdC5jDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NywgVGhvbWFzIEcuIExhbmUuDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4NCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuDQotICoNCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvZWZmaWNpZW50IGJ1ZmZlciBjb250cm9sbGVyIGZvciBkZWNvbXByZXNzaW9uLg0KLSAqIFRoaXMgY29udHJvbGxlciBpcyB0aGUgdG9wIGxldmVsIG9mIHRoZSBKUEVHIGRlY29tcHJlc3NvciBwcm9wZXIuDQotICogVGhlIGNvZWZmaWNpZW50IGJ1ZmZlciBsaWVzIGJldHdlZW4gZW50cm9weSBkZWNvZGluZyBhbmQgaW52ZXJzZS1EQ1Qgc3RlcHMuDQotICoNCi0gKiBJbiBidWZmZXJlZC1pbWFnZSBtb2RlLCB0aGlzIGNvbnRyb2xsZXIgaXMgdGhlIGludGVyZmFjZSBiZXR3ZWVuDQotICogaW5wdXQtb3JpZW50ZWQgcHJvY2Vzc2luZyBhbmQgb3V0cHV0LW9yaWVudGVkIHByb2Nlc3NpbmcuDQotICogQWxzbywgdGhlIGlucHV0IHNpZGUgKG9ubHkpIGlzIHVzZWQgd2hlbiByZWFkaW5nIGEgZmlsZSBmb3IgdHJhbnNjb2RpbmcuDQotICovDQotDQotI2RlZmluZSBKUEVHX0lOVEVSTkFMUw0KLSNpbmNsdWRlICJqaW5jbHVkZS5oIg0KLSNpbmNsdWRlICJqcGVnbGliLmgiDQotDQotLyogQmxvY2sgc21vb3RoaW5nIGlzIG9ubHkgYXBwbGljYWJsZSBmb3IgcHJvZ3Jlc3NpdmUgSlBFRywgc286ICovDQotI2lmbmRlZiBEX1BST0dSRVNTSVZFX1NVUFBPUlRFRA0KLSN1bmRlZiBCTE9DS19TTU9PVEhJTkdfU1VQUE9SVEVEDQotI2VuZGlmDQotDQotLyogUHJpdmF0ZSBidWZmZXIgY29udHJvbGxlciBvYmplY3QgKi8NCi0NCi10eXBlZGVmIHN0cnVjdCB7DQotICBzdHJ1Y3QganBlZ19kX2NvZWZfY29udHJvbGxlciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8NCi0NCi0gIC8qIFRoZXNlIHZhcmlhYmxlcyBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IGxvY2F0aW9uIG9mIHRoZSBpbnB1dCBzaWRlLiAqLw0KLSAgLyogY2luZm8tPmlucHV0X2lNQ1Vfcm93IGlzIGFsc28gdXNlZCBmb3IgdGhpcy4gKi8NCi0gIEpESU1FTlNJT04gTUNVX2N0cjsJCS8qIGNvdW50cyBNQ1VzIHByb2Nlc3NlZCBpbiBjdXJyZW50IHJvdyAqLw0KLSAgaW50IE1DVV92ZXJ0X29mZnNldDsJCS8qIGNvdW50cyBNQ1Ugcm93cyB3aXRoaW4gaU1DVSByb3cgKi8NCi0gIGludCBNQ1Vfcm93c19wZXJfaU1DVV9yb3c7CS8qIG51bWJlciBvZiBzdWNoIHJvd3MgbmVlZGVkICovDQotDQotICAvKiBUaGUgb3V0cHV0IHNpZGUncyBsb2NhdGlvbiBpcyByZXByZXNlbnRlZCBieSBjaW5mby0+b3V0cHV0X2lNQ1Vfcm93LiAqLw0KLQ0KLSAgLyogSW4gc2luZ2xlLXBhc3MgbW9kZXMsIGl0J3Mgc3VmZmljaWVudCB0byBidWZmZXIganVzdCBvbmUgTUNVLg0KLSAgICogV2UgYWxsb2NhdGUgYSB3b3Jrc3BhY2Ugb2YgRF9NQVhfQkxPQ0tTX0lOX01DVSBjb2VmZmljaWVudCBibG9ja3MsDQotICAgKiBhbmQgbGV0IHRoZSBlbnRyb3B5IGRlY29kZXIgd3JpdGUgaW50byB0aGF0IHdvcmtzcGFjZSBlYWNoIHRpbWUuDQotICAgKiAoT24gODB4ODYsIHRoZSB3b3Jrc3BhY2UgaXMgRkFSIGV2ZW4gdGhvdWdoIGl0J3Mgbm90IHJlYWxseSB2ZXJ5IGJpZzsNCi0gICAqIHRoaXMgaXMgdG8ga2VlcCB0aGUgbW9kdWxlIGludGVyZmFjZXMgdW5jaGFuZ2VkIHdoZW4gYSBsYXJnZSBjb2VmZmljaWVudA0KLSAgICogYnVmZmVyIGlzIG5lY2Vzc2FyeS4pDQotICAgKiBJbiBtdWx0aS1wYXNzIG1vZGVzLCB0aGlzIGFycmF5IHBvaW50cyB0byB0aGUgY3VycmVudCBNQ1UncyBibG9ja3MNCi0gICAqIHdpdGhpbiB0aGUgdmlydHVhbCBhcnJheXM7IGl0IGlzIHVzZWQgb25seSBieSB0aGUgaW5wdXQgc2lkZS4NCi0gICAqLw0KLSAgSkJMT0NLUk9XIE1DVV9idWZmZXJbRF9NQVhfQkxPQ0tTX0lOX01DVV07DQotDQotI2lmZGVmIERfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRA0KLSAgLyogSW4gbXVsdGktcGFzcyBtb2Rlcywgd2UgbmVlZCBhIHZpcnR1YWwgYmxvY2sgYXJyYXkgZm9yIGVhY2ggY29tcG9uZW50LiAqLw0KLSAganZpcnRfYmFycmF5X3B0ciB3aG9sZV9pbWFnZVtNQVhfQ09NUE9ORU5UU107DQotI2VuZGlmDQotDQotI2lmZGVmIEJMT0NLX1NNT09USElOR19TVVBQT1JURUQNCi0gIC8qIFdoZW4gZG9pbmcgYmxvY2sgc21vb3RoaW5nLCB3ZSBsYXRjaCBjb2VmZmljaWVudCBBbCB2YWx1ZXMgaGVyZSAqLw0KLSAgaW50ICogY29lZl9iaXRzX2xhdGNoOw0KLSNkZWZpbmUgU0FWRURfQ09FRlMgIDYJCS8qIHdlIHNhdmUgY29lZl9iaXRzWzAuLjVdICovDQotI2VuZGlmDQotfSBteV9jb2VmX2NvbnRyb2xsZXI7DQotDQotdHlwZWRlZiBteV9jb2VmX2NvbnRyb2xsZXIgKiBteV9jb2VmX3B0cjsNCi0NCi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLw0KLU1FVEhPRERFRihpbnQpIGRlY29tcHJlc3Nfb25lcGFzcw0KLQlKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZikpOw0KLSNpZmRlZiBEX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQNCi1NRVRIT0RERUYoaW50KSBkZWNvbXByZXNzX2RhdGENCi0JSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIG91dHB1dF9idWYpKTsNCi0jZW5kaWYNCi0jaWZkZWYgQkxPQ0tfU01PT1RISU5HX1NVUFBPUlRFRA0KLUxPQ0FMKGJvb2xlYW4pIHNtb290aGluZ19vayBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi1NRVRIT0RERUYoaW50KSBkZWNvbXByZXNzX3Ntb290aF9kYXRhDQotCUpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBvdXRwdXRfYnVmKSk7DQotI2VuZGlmDQotDQotDQotTE9DQUwodm9pZCkNCi1zdGFydF9pTUNVX3JvdyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi0vKiBSZXNldCB3aXRoaW4taU1DVS1yb3cgY291bnRlcnMgZm9yIGEgbmV3IHJvdyAoaW5wdXQgc2lkZSkgKi8NCi17DQotICBteV9jb2VmX3B0ciBjb2VmID0gKG15X2NvZWZfcHRyKSBjaW5mby0+Y29lZjsNCi0NCi0gIC8qIEluIGFuIGludGVybGVhdmVkIHNjYW4sIGFuIE1DVSByb3cgaXMgdGhlIHNhbWUgYXMgYW4gaU1DVSByb3cuDQotICAgKiBJbiBhIG5vbmludGVybGVhdmVkIHNjYW4sIGFuIGlNQ1Ugcm93IGhhcyB2X3NhbXBfZmFjdG9yIE1DVSByb3dzLg0KLSAgICogQnV0IGF0IHRoZSBib3R0b20gb2YgdGhlIGltYWdlLCBwcm9jZXNzIG9ubHkgd2hhdCdzIGxlZnQuDQotICAgKi8NCi0gIGlmIChjaW5mby0+Y29tcHNfaW5fc2NhbiA+IDEpIHsNCi0gICAgY29lZi0+TUNVX3Jvd3NfcGVyX2lNQ1Vfcm93ID0gMTsNCi0gIH0gZWxzZSB7DQotICAgIGlmIChjaW5mby0+aW5wdXRfaU1DVV9yb3cgPCAoY2luZm8tPnRvdGFsX2lNQ1Vfcm93cy0xKSkNCi0gICAgICBjb2VmLT5NQ1Vfcm93c19wZXJfaU1DVV9yb3cgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1swXS0+dl9zYW1wX2ZhY3RvcjsNCi0gICAgZWxzZQ0KLSAgICAgIGNvZWYtPk1DVV9yb3dzX3Blcl9pTUNVX3JvdyA9IGNpbmZvLT5jdXJfY29tcF9pbmZvWzBdLT5sYXN0X3Jvd19oZWlnaHQ7DQotICB9DQotDQotICBjb2VmLT5NQ1VfY3RyID0gMDsNCi0gIGNvZWYtPk1DVV92ZXJ0X29mZnNldCA9IDA7DQotfQ0KLQ0KLQ0KLS8qDQotICogSW5pdGlhbGl6ZSBmb3IgYW4gaW5wdXQgcHJvY2Vzc2luZyBwYXNzLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXN0YXJ0X2lucHV0X3Bhc3MgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAgY2luZm8tPmlucHV0X2lNQ1Vfcm93ID0gMDsNCi0gIHN0YXJ0X2lNQ1Vfcm93KGNpbmZvKTsNCi19DQotDQotDQotLyoNCi0gKiBJbml0aWFsaXplIGZvciBhbiBvdXRwdXQgcHJvY2Vzc2luZyBwYXNzLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXN0YXJ0X291dHB1dF9wYXNzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0jaWZkZWYgQkxPQ0tfU01PT1RISU5HX1NVUFBPUlRFRA0KLSAgbXlfY29lZl9wdHIgY29lZiA9IChteV9jb2VmX3B0cikgY2luZm8tPmNvZWY7DQotDQotICAvKiBJZiBtdWx0aXBhc3MsIGNoZWNrIHRvIHNlZSB3aGV0aGVyIHRvIHVzZSBibG9jayBzbW9vdGhpbmcgb24gdGhpcyBwYXNzICovDQotICBpZiAoY29lZi0+cHViLmNvZWZfYXJyYXlzICE9IE5VTEwpIHsNCi0gICAgaWYgKGNpbmZvLT5kb19ibG9ja19zbW9vdGhpbmcgJiYgc21vb3RoaW5nX29rKGNpbmZvKSkNCi0gICAgICBjb2VmLT5wdWIuZGVjb21wcmVzc19kYXRhID0gZGVjb21wcmVzc19zbW9vdGhfZGF0YTsNCi0gICAgZWxzZQ0KLSAgICAgIGNvZWYtPnB1Yi5kZWNvbXByZXNzX2RhdGEgPSBkZWNvbXByZXNzX2RhdGE7DQotICB9DQotI2VuZGlmDQotICBjaW5mby0+b3V0cHV0X2lNQ1Vfcm93ID0gMDsNCi19DQotDQotDQotLyoNCi0gKiBEZWNvbXByZXNzIGFuZCByZXR1cm4gc29tZSBkYXRhIGluIHRoZSBzaW5nbGUtcGFzcyBjYXNlLg0KLSAqIEFsd2F5cyBhdHRlbXB0cyB0byBlbWl0IG9uZSBmdWxseSBpbnRlcmxlYXZlZCBNQ1Ugcm93ICgiaU1DVSIgcm93KS4NCi0gKiBJbnB1dCBhbmQgb3V0cHV0IG11c3QgcnVuIGluIGxvY2tzdGVwIHNpbmNlIHdlIGhhdmUgb25seSBhIG9uZS1NQ1UgYnVmZmVyLg0KLSAqIFJldHVybiB2YWx1ZSBpcyBKUEVHX1JPV19DT01QTEVURUQsIEpQRUdfU0NBTl9DT01QTEVURUQsIG9yIEpQRUdfU1VTUEVOREVELg0KLSAqDQotICogTkI6IG91dHB1dF9idWYgY29udGFpbnMgYSBwbGFuZSBmb3IgZWFjaCBjb21wb25lbnQgaW4gaW1hZ2UsDQotICogd2hpY2ggd2UgaW5kZXggYWNjb3JkaW5nIHRvIHRoZSBjb21wb25lbnQncyBTT0YgcG9zaXRpb24uDQotICovDQotDQotTUVUSE9EREVGKGludCkNCi1kZWNvbXByZXNzX29uZXBhc3MgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZikNCi17DQotICBteV9jb2VmX3B0ciBjb2VmID0gKG15X2NvZWZfcHRyKSBjaW5mby0+Y29lZjsNCi0gIEpESU1FTlNJT04gTUNVX2NvbF9udW07CS8qIGluZGV4IG9mIGN1cnJlbnQgTUNVIHdpdGhpbiByb3cgKi8NCi0gIEpESU1FTlNJT04gbGFzdF9NQ1VfY29sID0gY2luZm8tPk1DVXNfcGVyX3JvdyAtIDE7DQotICBKRElNRU5TSU9OIGxhc3RfaU1DVV9yb3cgPSBjaW5mby0+dG90YWxfaU1DVV9yb3dzIC0gMTsNCi0gIGludCBibGtuLCBjaSwgeGluZGV4LCB5aW5kZXgsIHlvZmZzZXQsIHVzZWZ1bF93aWR0aDsNCi0gIEpTQU1QQVJSQVkgb3V0cHV0X3B0cjsNCi0gIEpESU1FTlNJT04gc3RhcnRfY29sLCBvdXRwdXRfY29sOw0KLSAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsNCi0gIGludmVyc2VfRENUX21ldGhvZF9wdHIgaW52ZXJzZV9EQ1Q7DQotDQotICAvKiBMb29wIHRvIHByb2Nlc3MgYXMgbXVjaCBhcyBvbmUgd2hvbGUgaU1DVSByb3cgKi8NCi0gIGZvciAoeW9mZnNldCA9IGNvZWYtPk1DVV92ZXJ0X29mZnNldDsgeW9mZnNldCA8IGNvZWYtPk1DVV9yb3dzX3Blcl9pTUNVX3JvdzsNCi0gICAgICAgeW9mZnNldCsrKSB7DQotICAgIGZvciAoTUNVX2NvbF9udW0gPSBjb2VmLT5NQ1VfY3RyOyBNQ1VfY29sX251bSA8PSBsYXN0X01DVV9jb2w7DQotCSBNQ1VfY29sX251bSsrKSB7DQotICAgICAgLyogVHJ5IHRvIGZldGNoIGFuIE1DVS4gIEVudHJvcHkgZGVjb2RlciBleHBlY3RzIGJ1ZmZlciB0byBiZSB6ZXJvZWQuICovDQotICAgICAganplcm9fZmFyKCh2b2lkIEZBUiAqKSBjb2VmLT5NQ1VfYnVmZmVyWzBdLA0KLQkJKHNpemVfdCkgKGNpbmZvLT5ibG9ja3NfaW5fTUNVICogU0laRU9GKEpCTE9DSykpKTsNCi0gICAgICBpZiAoISAoKmNpbmZvLT5lbnRyb3B5LT5kZWNvZGVfbWN1KSAoY2luZm8sIGNvZWYtPk1DVV9idWZmZXIpKSB7DQotCS8qIFN1c3BlbnNpb24gZm9yY2VkOyB1cGRhdGUgc3RhdGUgY291bnRlcnMgYW5kIGV4aXQgKi8NCi0JY29lZi0+TUNVX3ZlcnRfb2Zmc2V0ID0geW9mZnNldDsNCi0JY29lZi0+TUNVX2N0ciA9IE1DVV9jb2xfbnVtOw0KLQlyZXR1cm4gSlBFR19TVVNQRU5ERUQ7DQotICAgICAgfQ0KLSAgICAgIC8qIERldGVybWluZSB3aGVyZSBkYXRhIHNob3VsZCBnbyBpbiBvdXRwdXRfYnVmIGFuZCBkbyB0aGUgSURDVCB0aGluZy4NCi0gICAgICAgKiBXZSBza2lwIGR1bW15IGJsb2NrcyBhdCB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlcyAoYnV0IGJsa24gZ2V0cw0KLSAgICAgICAqIGluY3JlbWVudGVkIHBhc3QgdGhlbSEpLiAgTm90ZSB0aGUgaW5uZXIgbG9vcCByZWxpZXMgb24gaGF2aW5nDQotICAgICAgICogYWxsb2NhdGVkIHRoZSBNQ1VfYnVmZmVyW10gYmxvY2tzIHNlcXVlbnRpYWxseS4NCi0gICAgICAgKi8NCi0gICAgICBibGtuID0gMDsJCQkvKiBpbmRleCBvZiBjdXJyZW50IERDVCBibG9jayB3aXRoaW4gTUNVICovDQotICAgICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspIHsNCi0JY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsNCi0JLyogRG9uJ3QgYm90aGVyIHRvIElEQ1QgYW4gdW5pbnRlcmVzdGluZyBjb21wb25lbnQuICovDQotCWlmICghIGNvbXBwdHItPmNvbXBvbmVudF9uZWVkZWQpIHsNCi0JICBibGtuICs9IGNvbXBwdHItPk1DVV9ibG9ja3M7DQotCSAgY29udGludWU7DQotCX0NCi0JaW52ZXJzZV9EQ1QgPSBjaW5mby0+aWRjdC0+aW52ZXJzZV9EQ1RbY29tcHB0ci0+Y29tcG9uZW50X2luZGV4XTsNCi0JdXNlZnVsX3dpZHRoID0gKE1DVV9jb2xfbnVtIDwgbGFzdF9NQ1VfY29sKSA/IGNvbXBwdHItPk1DVV93aWR0aA0KLQkJCQkJCSAgICA6IGNvbXBwdHItPmxhc3RfY29sX3dpZHRoOw0KLQlvdXRwdXRfcHRyID0gb3V0cHV0X2J1Zltjb21wcHRyLT5jb21wb25lbnRfaW5kZXhdICsNCi0JICB5b2Zmc2V0ICogY29tcHB0ci0+RENUX3NjYWxlZF9zaXplOw0KLQlzdGFydF9jb2wgPSBNQ1VfY29sX251bSAqIGNvbXBwdHItPk1DVV9zYW1wbGVfd2lkdGg7DQotCWZvciAoeWluZGV4ID0gMDsgeWluZGV4IDwgY29tcHB0ci0+TUNVX2hlaWdodDsgeWluZGV4KyspIHsNCi0JICBpZiAoY2luZm8tPmlucHV0X2lNQ1Vfcm93IDwgbGFzdF9pTUNVX3JvdyB8fA0KLQkgICAgICB5b2Zmc2V0K3lpbmRleCA8IGNvbXBwdHItPmxhc3Rfcm93X2hlaWdodCkgew0KLQkgICAgb3V0cHV0X2NvbCA9IHN0YXJ0X2NvbDsNCi0JICAgIGZvciAoeGluZGV4ID0gMDsgeGluZGV4IDwgdXNlZnVsX3dpZHRoOyB4aW5kZXgrKykgew0KLQkgICAgICAoKmludmVyc2VfRENUKSAoY2luZm8sIGNvbXBwdHIsDQotCQkJICAgICAgKEpDT0VGUFRSKSBjb2VmLT5NQ1VfYnVmZmVyW2Jsa24reGluZGV4XSwNCi0JCQkgICAgICBvdXRwdXRfcHRyLCBvdXRwdXRfY29sKTsNCi0JICAgICAgb3V0cHV0X2NvbCArPSBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemU7DQotCSAgICB9DQotCSAgfQ0KLQkgIGJsa24gKz0gY29tcHB0ci0+TUNVX3dpZHRoOw0KLQkgIG91dHB1dF9wdHIgKz0gY29tcHB0ci0+RENUX3NjYWxlZF9zaXplOw0KLQl9DQotICAgICAgfQ0KLSAgICB9DQotICAgIC8qIENvbXBsZXRlZCBhbiBNQ1Ugcm93LCBidXQgcGVyaGFwcyBub3QgYW4gaU1DVSByb3cgKi8NCi0gICAgY29lZi0+TUNVX2N0ciA9IDA7DQotICB9DQotICAvKiBDb21wbGV0ZWQgdGhlIGlNQ1Ugcm93LCBhZHZhbmNlIGNvdW50ZXJzIGZvciBuZXh0IG9uZSAqLw0KLSAgY2luZm8tPm91dHB1dF9pTUNVX3JvdysrOw0KLSAgaWYgKCsrKGNpbmZvLT5pbnB1dF9pTUNVX3JvdykgPCBjaW5mby0+dG90YWxfaU1DVV9yb3dzKSB7DQotICAgIHN0YXJ0X2lNQ1Vfcm93KGNpbmZvKTsNCi0gICAgcmV0dXJuIEpQRUdfUk9XX0NPTVBMRVRFRDsNCi0gIH0NCi0gIC8qIENvbXBsZXRlZCB0aGUgc2NhbiAqLw0KLSAgKCpjaW5mby0+aW5wdXRjdGwtPmZpbmlzaF9pbnB1dF9wYXNzKSAoY2luZm8pOw0KLSAgcmV0dXJuIEpQRUdfU0NBTl9DT01QTEVURUQ7DQotfQ0KLQ0KLQ0KLS8qDQotICogRHVtbXkgY29uc3VtZS1pbnB1dCByb3V0aW5lIGZvciBzaW5nbGUtcGFzcyBvcGVyYXRpb24uDQotICovDQotDQotTUVUSE9EREVGKGludCkNCi1kdW1teV9jb25zdW1lX2RhdGEgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOwkvKiBBbHdheXMgaW5kaWNhdGUgbm90aGluZyB3YXMgZG9uZSAqLw0KLX0NCi0NCi0NCi0jaWZkZWYgRF9NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVEDQotDQotLyoNCi0gKiBDb25zdW1lIGlucHV0IGRhdGEgYW5kIHN0b3JlIGl0IGluIHRoZSBmdWxsLWltYWdlIGNvZWZmaWNpZW50IGJ1ZmZlci4NCi0gKiBXZSByZWFkIGFzIG11Y2ggYXMgb25lIGZ1bGx5IGludGVybGVhdmVkIE1DVSByb3cgKCJpTUNVIiByb3cpIHBlciBjYWxsLA0KLSAqIGllLCB2X3NhbXBfZmFjdG9yIGJsb2NrIHJvd3MgZm9yIGVhY2ggY29tcG9uZW50IGluIHRoZSBzY2FuLg0KLSAqIFJldHVybiB2YWx1ZSBpcyBKUEVHX1JPV19DT01QTEVURUQsIEpQRUdfU0NBTl9DT01QTEVURUQsIG9yIEpQRUdfU1VTUEVOREVELg0KLSAqLw0KLQ0KLU1FVEhPRERFRihpbnQpDQotY29uc3VtZV9kYXRhIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIG15X2NvZWZfcHRyIGNvZWYgPSAobXlfY29lZl9wdHIpIGNpbmZvLT5jb2VmOw0KLSAgSkRJTUVOU0lPTiBNQ1VfY29sX251bTsJLyogaW5kZXggb2YgY3VycmVudCBNQ1Ugd2l0aGluIHJvdyAqLw0KLSAgaW50IGJsa24sIGNpLCB4aW5kZXgsIHlpbmRleCwgeW9mZnNldDsNCi0gIEpESU1FTlNJT04gc3RhcnRfY29sOw0KLSAgSkJMT0NLQVJSQVkgYnVmZmVyW01BWF9DT01QU19JTl9TQ0FOXTsNCi0gIEpCTE9DS1JPVyBidWZmZXJfcHRyOw0KLSAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsNCi0NCi0gIC8qIEFsaWduIHRoZSB2aXJ0dWFsIGJ1ZmZlcnMgZm9yIHRoZSBjb21wb25lbnRzIHVzZWQgaW4gdGhpcyBzY2FuLiAqLw0KLSAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspIHsNCi0gICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsNCi0gICAgYnVmZmVyW2NpXSA9ICgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQ0KLSAgICAgICgoal9jb21tb25fcHRyKSBjaW5mbywgY29lZi0+d2hvbGVfaW1hZ2VbY29tcHB0ci0+Y29tcG9uZW50X2luZGV4XSwNCi0gICAgICAgY2luZm8tPmlucHV0X2lNQ1Vfcm93ICogY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwNCi0gICAgICAgKEpESU1FTlNJT04pIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIFRSVUUpOw0KLSAgICAvKiBOb3RlOiBlbnRyb3B5IGRlY29kZXIgZXhwZWN0cyBidWZmZXIgdG8gYmUgemVyb2VkLA0KLSAgICAgKiBidXQgdGhpcyBpcyBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIG1lbW9yeSBtYW5hZ2VyDQotICAgICAqIGJlY2F1c2Ugd2UgcmVxdWVzdGVkIGEgcHJlLXplcm9lZCBhcnJheS4NCi0gICAgICovDQotICB9DQotDQotICAvKiBMb29wIHRvIHByb2Nlc3Mgb25lIHdob2xlIGlNQ1Ugcm93ICovDQotICBmb3IgKHlvZmZzZXQgPSBjb2VmLT5NQ1VfdmVydF9vZmZzZXQ7IHlvZmZzZXQgPCBjb2VmLT5NQ1Vfcm93c19wZXJfaU1DVV9yb3c7DQotICAgICAgIHlvZmZzZXQrKykgew0KLSAgICBmb3IgKE1DVV9jb2xfbnVtID0gY29lZi0+TUNVX2N0cjsgTUNVX2NvbF9udW0gPCBjaW5mby0+TUNVc19wZXJfcm93Ow0KLQkgTUNVX2NvbF9udW0rKykgew0KLSAgICAgIC8qIENvbnN0cnVjdCBsaXN0IG9mIHBvaW50ZXJzIHRvIERDVCBibG9ja3MgYmVsb25naW5nIHRvIHRoaXMgTUNVICovDQotICAgICAgYmxrbiA9IDA7CQkJLyogaW5kZXggb2YgY3VycmVudCBEQ1QgYmxvY2sgd2l0aGluIE1DVSAqLw0KLSAgICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7DQotCWNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07DQotCXN0YXJ0X2NvbCA9IE1DVV9jb2xfbnVtICogY29tcHB0ci0+TUNVX3dpZHRoOw0KLQlmb3IgKHlpbmRleCA9IDA7IHlpbmRleCA8IGNvbXBwdHItPk1DVV9oZWlnaHQ7IHlpbmRleCsrKSB7DQotCSAgYnVmZmVyX3B0ciA9IGJ1ZmZlcltjaV1beWluZGV4K3lvZmZzZXRdICsgc3RhcnRfY29sOw0KLQkgIGZvciAoeGluZGV4ID0gMDsgeGluZGV4IDwgY29tcHB0ci0+TUNVX3dpZHRoOyB4aW5kZXgrKykgew0KLQkgICAgY29lZi0+TUNVX2J1ZmZlcltibGtuKytdID0gYnVmZmVyX3B0cisrOw0KLQkgIH0NCi0JfQ0KLSAgICAgIH0NCi0gICAgICAvKiBUcnkgdG8gZmV0Y2ggdGhlIE1DVS4gKi8NCi0gICAgICBpZiAoISAoKmNpbmZvLT5lbnRyb3B5LT5kZWNvZGVfbWN1KSAoY2luZm8sIGNvZWYtPk1DVV9idWZmZXIpKSB7DQotCS8qIFN1c3BlbnNpb24gZm9yY2VkOyB1cGRhdGUgc3RhdGUgY291bnRlcnMgYW5kIGV4aXQgKi8NCi0JY29lZi0+TUNVX3ZlcnRfb2Zmc2V0ID0geW9mZnNldDsNCi0JY29lZi0+TUNVX2N0ciA9IE1DVV9jb2xfbnVtOw0KLQlyZXR1cm4gSlBFR19TVVNQRU5ERUQ7DQotICAgICAgfQ0KLSAgICB9DQotICAgIC8qIENvbXBsZXRlZCBhbiBNQ1Ugcm93LCBidXQgcGVyaGFwcyBub3QgYW4gaU1DVSByb3cgKi8NCi0gICAgY29lZi0+TUNVX2N0ciA9IDA7DQotICB9DQotICAvKiBDb21wbGV0ZWQgdGhlIGlNQ1Ugcm93LCBhZHZhbmNlIGNvdW50ZXJzIGZvciBuZXh0IG9uZSAqLw0KLSAgaWYgKCsrKGNpbmZvLT5pbnB1dF9pTUNVX3JvdykgPCBjaW5mby0+dG90YWxfaU1DVV9yb3dzKSB7DQotICAgIHN0YXJ0X2lNQ1Vfcm93KGNpbmZvKTsNCi0gICAgcmV0dXJuIEpQRUdfUk9XX0NPTVBMRVRFRDsNCi0gIH0NCi0gIC8qIENvbXBsZXRlZCB0aGUgc2NhbiAqLw0KLSAgKCpjaW5mby0+aW5wdXRjdGwtPmZpbmlzaF9pbnB1dF9wYXNzKSAoY2luZm8pOw0KLSAgcmV0dXJuIEpQRUdfU0NBTl9DT01QTEVURUQ7DQotfQ0KLQ0KLQ0KLS8qDQotICogRGVjb21wcmVzcyBhbmQgcmV0dXJuIHNvbWUgZGF0YSBpbiB0aGUgbXVsdGktcGFzcyBjYXNlLg0KLSAqIEFsd2F5cyBhdHRlbXB0cyB0byBlbWl0IG9uZSBmdWxseSBpbnRlcmxlYXZlZCBNQ1Ugcm93ICgiaU1DVSIgcm93KS4NCi0gKiBSZXR1cm4gdmFsdWUgaXMgSlBFR19ST1dfQ09NUExFVEVELCBKUEVHX1NDQU5fQ09NUExFVEVELCBvciBKUEVHX1NVU1BFTkRFRC4NCi0gKg0KLSAqIE5COiBvdXRwdXRfYnVmIGNvbnRhaW5zIGEgcGxhbmUgZm9yIGVhY2ggY29tcG9uZW50IGluIGltYWdlLg0KLSAqLw0KLQ0KLU1FVEhPRERFRihpbnQpDQotZGVjb21wcmVzc19kYXRhIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIG91dHB1dF9idWYpDQotew0KLSAgbXlfY29lZl9wdHIgY29lZiA9IChteV9jb2VmX3B0cikgY2luZm8tPmNvZWY7DQotICBKRElNRU5TSU9OIGxhc3RfaU1DVV9yb3cgPSBjaW5mby0+dG90YWxfaU1DVV9yb3dzIC0gMTsNCi0gIEpESU1FTlNJT04gYmxvY2tfbnVtOw0KLSAgaW50IGNpLCBibG9ja19yb3csIGJsb2NrX3Jvd3M7DQotICBKQkxPQ0tBUlJBWSBidWZmZXI7DQotICBKQkxPQ0tST1cgYnVmZmVyX3B0cjsNCi0gIEpTQU1QQVJSQVkgb3V0cHV0X3B0cjsNCi0gIEpESU1FTlNJT04gb3V0cHV0X2NvbDsNCi0gIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7DQotICBpbnZlcnNlX0RDVF9tZXRob2RfcHRyIGludmVyc2VfRENUOw0KLQ0KLSAgLyogRm9yY2Ugc29tZSBpbnB1dCB0byBiZSBkb25lIGlmIHdlIGFyZSBnZXR0aW5nIGFoZWFkIG9mIHRoZSBpbnB1dC4gKi8NCi0gIHdoaWxlIChjaW5mby0+aW5wdXRfc2Nhbl9udW1iZXIgPCBjaW5mby0+b3V0cHV0X3NjYW5fbnVtYmVyIHx8DQotCSAoY2luZm8tPmlucHV0X3NjYW5fbnVtYmVyID09IGNpbmZvLT5vdXRwdXRfc2Nhbl9udW1iZXIgJiYNCi0JICBjaW5mby0+aW5wdXRfaU1DVV9yb3cgPD0gY2luZm8tPm91dHB1dF9pTUNVX3JvdykpIHsNCi0gICAgaWYgKCgqY2luZm8tPmlucHV0Y3RsLT5jb25zdW1lX2lucHV0KShjaW5mbykgPT0gSlBFR19TVVNQRU5ERUQpDQotICAgICAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOw0KLSAgfQ0KLQ0KLSAgLyogT0ssIG91dHB1dCBmcm9tIHRoZSB2aXJ0dWFsIGFycmF5cy4gKi8NCi0gIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7DQotICAgICAgIGNpKyssIGNvbXBwdHIrKykgew0KLSAgICAvKiBEb24ndCBib3RoZXIgdG8gSURDVCBhbiB1bmludGVyZXN0aW5nIGNvbXBvbmVudC4gKi8NCi0gICAgaWYgKCEgY29tcHB0ci0+Y29tcG9uZW50X25lZWRlZCkNCi0gICAgICBjb250aW51ZTsNCi0gICAgLyogQWxpZ24gdGhlIHZpcnR1YWwgYnVmZmVyIGZvciB0aGlzIGNvbXBvbmVudC4gKi8NCi0gICAgYnVmZmVyID0gKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpDQotICAgICAgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBjb2VmLT53aG9sZV9pbWFnZVtjaV0sDQotICAgICAgIGNpbmZvLT5vdXRwdXRfaU1DVV9yb3cgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yLA0KLSAgICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgRkFMU0UpOw0KLSAgICAvKiBDb3VudCBub24tZHVtbXkgRENUIGJsb2NrIHJvd3MgaW4gdGhpcyBpTUNVIHJvdy4gKi8NCi0gICAgaWYgKGNpbmZvLT5vdXRwdXRfaU1DVV9yb3cgPCBsYXN0X2lNQ1Vfcm93KQ0KLSAgICAgIGJsb2NrX3Jvd3MgPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yOw0KLSAgICBlbHNlIHsNCi0gICAgICAvKiBOQjogY2FuJ3QgdXNlIGxhc3Rfcm93X2hlaWdodCBoZXJlOyBpdCBpcyBpbnB1dC1zaWRlLWRlcGVuZGVudCEgKi8NCi0gICAgICBibG9ja19yb3dzID0gKGludCkgKGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3MgJSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKTsNCi0gICAgICBpZiAoYmxvY2tfcm93cyA9PSAwKSBibG9ja19yb3dzID0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsNCi0gICAgfQ0KLSAgICBpbnZlcnNlX0RDVCA9IGNpbmZvLT5pZGN0LT5pbnZlcnNlX0RDVFtjaV07DQotICAgIG91dHB1dF9wdHIgPSBvdXRwdXRfYnVmW2NpXTsNCi0gICAgLyogTG9vcCBvdmVyIGFsbCBEQ1QgYmxvY2tzIHRvIGJlIHByb2Nlc3NlZC4gKi8NCi0gICAgZm9yIChibG9ja19yb3cgPSAwOyBibG9ja19yb3cgPCBibG9ja19yb3dzOyBibG9ja19yb3crKykgew0KLSAgICAgIGJ1ZmZlcl9wdHIgPSBidWZmZXJbYmxvY2tfcm93XTsNCi0gICAgICBvdXRwdXRfY29sID0gMDsNCi0gICAgICBmb3IgKGJsb2NrX251bSA9IDA7IGJsb2NrX251bSA8IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrczsgYmxvY2tfbnVtKyspIHsNCi0JKCppbnZlcnNlX0RDVCkgKGNpbmZvLCBjb21wcHRyLCAoSkNPRUZQVFIpIGJ1ZmZlcl9wdHIsDQotCQkJb3V0cHV0X3B0ciwgb3V0cHV0X2NvbCk7DQotCWJ1ZmZlcl9wdHIrKzsNCi0Jb3V0cHV0X2NvbCArPSBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemU7DQotICAgICAgfQ0KLSAgICAgIG91dHB1dF9wdHIgKz0gY29tcHB0ci0+RENUX3NjYWxlZF9zaXplOw0KLSAgICB9DQotICB9DQotDQotICBpZiAoKysoY2luZm8tPm91dHB1dF9pTUNVX3JvdykgPCBjaW5mby0+dG90YWxfaU1DVV9yb3dzKQ0KLSAgICByZXR1cm4gSlBFR19ST1dfQ09NUExFVEVEOw0KLSAgcmV0dXJuIEpQRUdfU0NBTl9DT01QTEVURUQ7DQotfQ0KLQ0KLSNlbmRpZiAvKiBEX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQgKi8NCi0NCi0NCi0jaWZkZWYgQkxPQ0tfU01PT1RISU5HX1NVUFBPUlRFRA0KLQ0KLS8qDQotICogVGhpcyBjb2RlIGFwcGxpZXMgaW50ZXJibG9jayBzbW9vdGhpbmcgYXMgZGVzY3JpYmVkIGJ5IHNlY3Rpb24gSy44DQotICogb2YgdGhlIEpQRUcgc3RhbmRhcmQ6IHRoZSBmaXJzdCA1IEFDIGNvZWZmaWNpZW50cyBhcmUgZXN0aW1hdGVkIGZyb20NCi0gKiB0aGUgREMgdmFsdWVzIG9mIGEgRENUIGJsb2NrIGFuZCBpdHMgOCBuZWlnaGJvcmluZyBibG9ja3MuDQotICogV2UgYXBwbHkgc21vb3RoaW5nIG9ubHkgZm9yIHByb2dyZXNzaXZlIEpQRUcgZGVjb2RpbmcsIGFuZCBvbmx5IGlmDQotICogdGhlIGNvZWZmaWNpZW50cyBpdCBjYW4gZXN0aW1hdGUgYXJlIG5vdCB5ZXQga25vd24gdG8gZnVsbCBwcmVjaXNpb24uDQotICovDQotDQotLyogTmF0dXJhbC1vcmRlciBhcnJheSBwb3NpdGlvbnMgb2YgdGhlIGZpcnN0IDUgemlnemFnLW9yZGVyIGNvZWZmaWNpZW50cyAqLw0KLSNkZWZpbmUgUTAxX1BPUyAgMQ0KLSNkZWZpbmUgUTEwX1BPUyAgOA0KLSNkZWZpbmUgUTIwX1BPUyAgMTYNCi0jZGVmaW5lIFExMV9QT1MgIDkNCi0jZGVmaW5lIFEwMl9QT1MgIDINCi0NCi0vKg0KLSAqIERldGVybWluZSB3aGV0aGVyIGJsb2NrIHNtb290aGluZyBpcyBhcHBsaWNhYmxlIGFuZCBzYWZlLg0KLSAqIFdlIGFsc28gbGF0Y2ggdGhlIGN1cnJlbnQgc3RhdGVzIG9mIHRoZSBjb2VmX2JpdHNbXSBlbnRyaWVzIGZvciB0aGUNCi0gKiBBQyBjb2VmZmljaWVudHM7IG90aGVyd2lzZSwgaWYgdGhlIGlucHV0IHNpZGUgb2YgdGhlIGRlY29tcHJlc3Nvcg0KLSAqIGFkdmFuY2VzIGludG8gYSBuZXcgc2Nhbiwgd2UgbWlnaHQgdGhpbmsgdGhlIGNvZWZmaWNpZW50cyBhcmUga25vd24NCi0gKiBtb3JlIGFjY3VyYXRlbHkgdGhhbiB0aGV5IHJlYWxseSBhcmUuDQotICovDQotDQotTE9DQUwoYm9vbGVhbikNCi1zbW9vdGhpbmdfb2sgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAgbXlfY29lZl9wdHIgY29lZiA9IChteV9jb2VmX3B0cikgY2luZm8tPmNvZWY7DQotICBib29sZWFuIHNtb290aGluZ191c2VmdWwgPSBGQUxTRTsNCi0gIGludCBjaSwgY29lZmk7DQotICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOw0KLSAgSlFVQU5UX1RCTCAqIHF0YWJsZTsNCi0gIGludCAqIGNvZWZfYml0czsNCi0gIGludCAqIGNvZWZfYml0c19sYXRjaDsNCi0NCi0gIGlmICghIGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlIHx8IGNpbmZvLT5jb2VmX2JpdHMgPT0gTlVMTCkNCi0gICAgcmV0dXJuIEZBTFNFOw0KLQ0KLSAgLyogQWxsb2NhdGUgbGF0Y2ggYXJlYSBpZiBub3QgYWxyZWFkeSBkb25lICovDQotICBpZiAoY29lZi0+Y29lZl9iaXRzX2xhdGNoID09IE5VTEwpDQotICAgIGNvZWYtPmNvZWZfYml0c19sYXRjaCA9IChpbnQgKikNCi0gICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQkgIGNpbmZvLT5udW1fY29tcG9uZW50cyAqDQotCQkJCSAgKFNBVkVEX0NPRUZTICogU0laRU9GKGludCkpKTsNCi0gIGNvZWZfYml0c19sYXRjaCA9IGNvZWYtPmNvZWZfYml0c19sYXRjaDsNCi0NCi0gIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7DQotICAgICAgIGNpKyssIGNvbXBwdHIrKykgew0KLSAgICAvKiBBbGwgY29tcG9uZW50cycgcXVhbnRpemF0aW9uIHZhbHVlcyBtdXN0IGFscmVhZHkgYmUgbGF0Y2hlZC4gKi8NCi0gICAgaWYgKChxdGFibGUgPSBjb21wcHRyLT5xdWFudF90YWJsZSkgPT0gTlVMTCkNCi0gICAgICByZXR1cm4gRkFMU0U7DQotICAgIC8qIFZlcmlmeSBEQyAmIGZpcnN0IDUgQUMgcXVhbnRpemVycyBhcmUgbm9uemVybyB0byBhdm9pZCB6ZXJvLWRpdmlkZS4gKi8NCi0gICAgaWYgKHF0YWJsZS0+cXVhbnR2YWxbMF0gPT0gMCB8fA0KLQlxdGFibGUtPnF1YW50dmFsW1EwMV9QT1NdID09IDAgfHwNCi0JcXRhYmxlLT5xdWFudHZhbFtRMTBfUE9TXSA9PSAwIHx8DQotCXF0YWJsZS0+cXVhbnR2YWxbUTIwX1BPU10gPT0gMCB8fA0KLQlxdGFibGUtPnF1YW50dmFsW1ExMV9QT1NdID09IDAgfHwNCi0JcXRhYmxlLT5xdWFudHZhbFtRMDJfUE9TXSA9PSAwKQ0KLSAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgLyogREMgdmFsdWVzIG11c3QgYmUgYXQgbGVhc3QgcGFydGx5IGtub3duIGZvciBhbGwgY29tcG9uZW50cy4gKi8NCi0gICAgY29lZl9iaXRzID0gY2luZm8tPmNvZWZfYml0c1tjaV07DQotICAgIGlmIChjb2VmX2JpdHNbMF0gPCAwKQ0KLSAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgLyogQmxvY2sgc21vb3RoaW5nIGlzIGhlbHBmdWwgaWYgc29tZSBBQyBjb2VmZmljaWVudHMgcmVtYWluIGluYWNjdXJhdGUuICovDQotICAgIGZvciAoY29lZmkgPSAxOyBjb2VmaSA8PSA1OyBjb2VmaSsrKSB7DQotICAgICAgY29lZl9iaXRzX2xhdGNoW2NvZWZpXSA9IGNvZWZfYml0c1tjb2VmaV07DQotICAgICAgaWYgKGNvZWZfYml0c1tjb2VmaV0gIT0gMCkNCi0Jc21vb3RoaW5nX3VzZWZ1bCA9IFRSVUU7DQotICAgIH0NCi0gICAgY29lZl9iaXRzX2xhdGNoICs9IFNBVkVEX0NPRUZTOw0KLSAgfQ0KLQ0KLSAgcmV0dXJuIHNtb290aGluZ191c2VmdWw7DQotfQ0KLQ0KLQ0KLS8qDQotICogVmFyaWFudCBvZiBkZWNvbXByZXNzX2RhdGEgZm9yIHVzZSB3aGVuIGRvaW5nIGJsb2NrIHNtb290aGluZy4NCi0gKi8NCi0NCi1NRVRIT0RERUYoaW50KQ0KLWRlY29tcHJlc3Nfc21vb3RoX2RhdGEgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZikNCi17DQotICBteV9jb2VmX3B0ciBjb2VmID0gKG15X2NvZWZfcHRyKSBjaW5mby0+Y29lZjsNCi0gIEpESU1FTlNJT04gbGFzdF9pTUNVX3JvdyA9IGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MgLSAxOw0KLSAgSkRJTUVOU0lPTiBibG9ja19udW0sIGxhc3RfYmxvY2tfY29sdW1uOw0KLSAgaW50IGNpLCBibG9ja19yb3csIGJsb2NrX3Jvd3MsIGFjY2Vzc19yb3dzOw0KLSAgSkJMT0NLQVJSQVkgYnVmZmVyOw0KLSAgSkJMT0NLUk9XIGJ1ZmZlcl9wdHIsIHByZXZfYmxvY2tfcm93LCBuZXh0X2Jsb2NrX3JvdzsNCi0gIEpTQU1QQVJSQVkgb3V0cHV0X3B0cjsNCi0gIEpESU1FTlNJT04gb3V0cHV0X2NvbDsNCi0gIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7DQotICBpbnZlcnNlX0RDVF9tZXRob2RfcHRyIGludmVyc2VfRENUOw0KLSAgYm9vbGVhbiBmaXJzdF9yb3csIGxhc3Rfcm93Ow0KLSAgSkJMT0NLIHdvcmtzcGFjZTsNCi0gIGludCAqY29lZl9iaXRzOw0KLSAgSlFVQU5UX1RCTCAqcXVhbnR0Ymw7DQotICBJTlQzMiBRMDAsUTAxLFEwMixRMTAsUTExLFEyMCwgbnVtOw0KLSAgaW50IERDMSxEQzIsREMzLERDNCxEQzUsREM2LERDNyxEQzgsREM5Ow0KLSAgaW50IEFsLCBwcmVkOw0KLQ0KLSAgLyogRm9yY2Ugc29tZSBpbnB1dCB0byBiZSBkb25lIGlmIHdlIGFyZSBnZXR0aW5nIGFoZWFkIG9mIHRoZSBpbnB1dC4gKi8NCi0gIHdoaWxlIChjaW5mby0+aW5wdXRfc2Nhbl9udW1iZXIgPD0gY2luZm8tPm91dHB1dF9zY2FuX251bWJlciAmJg0KLQkgISBjaW5mby0+aW5wdXRjdGwtPmVvaV9yZWFjaGVkKSB7DQotICAgIGlmIChjaW5mby0+aW5wdXRfc2Nhbl9udW1iZXIgPT0gY2luZm8tPm91dHB1dF9zY2FuX251bWJlcikgew0KLSAgICAgIC8qIElmIGlucHV0IGlzIHdvcmtpbmcgb24gY3VycmVudCBzY2FuLCB3ZSBvcmRpbmFyaWx5IHdhbnQgaXQgdG8NCi0gICAgICAgKiBoYXZlIGNvbXBsZXRlZCB0aGUgY3VycmVudCByb3cuICBCdXQgaWYgaW5wdXQgc2NhbiBpcyBEQywNCi0gICAgICAgKiB3ZSB3YW50IGl0IHRvIGtlZXAgb25lIHJvdyBhaGVhZCBzbyB0aGF0IG5leHQgYmxvY2sgcm93J3MgREMNCi0gICAgICAgKiB2YWx1ZXMgYXJlIHVwIHRvIGRhdGUuDQotICAgICAgICovDQotICAgICAgSkRJTUVOU0lPTiBkZWx0YSA9IChjaW5mby0+U3MgPT0gMCkgPyAxIDogMDsNCi0gICAgICBpZiAoY2luZm8tPmlucHV0X2lNQ1Vfcm93ID4gY2luZm8tPm91dHB1dF9pTUNVX3JvdytkZWx0YSkNCi0JYnJlYWs7DQotICAgIH0NCi0gICAgaWYgKCgqY2luZm8tPmlucHV0Y3RsLT5jb25zdW1lX2lucHV0KShjaW5mbykgPT0gSlBFR19TVVNQRU5ERUQpDQotICAgICAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOw0KLSAgfQ0KLQ0KLSAgLyogT0ssIG91dHB1dCBmcm9tIHRoZSB2aXJ0dWFsIGFycmF5cy4gKi8NCi0gIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7DQotICAgICAgIGNpKyssIGNvbXBwdHIrKykgew0KLSAgICAvKiBEb24ndCBib3RoZXIgdG8gSURDVCBhbiB1bmludGVyZXN0aW5nIGNvbXBvbmVudC4gKi8NCi0gICAgaWYgKCEgY29tcHB0ci0+Y29tcG9uZW50X25lZWRlZCkNCi0gICAgICBjb250aW51ZTsNCi0gICAgLyogQ291bnQgbm9uLWR1bW15IERDVCBibG9jayByb3dzIGluIHRoaXMgaU1DVSByb3cuICovDQotICAgIGlmIChjaW5mby0+b3V0cHV0X2lNQ1Vfcm93IDwgbGFzdF9pTUNVX3Jvdykgew0KLSAgICAgIGJsb2NrX3Jvd3MgPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yOw0KLSAgICAgIGFjY2Vzc19yb3dzID0gYmxvY2tfcm93cyAqIDI7IC8qIHRoaXMgYW5kIG5leHQgaU1DVSByb3cgKi8NCi0gICAgICBsYXN0X3JvdyA9IEZBTFNFOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgIC8qIE5COiBjYW4ndCB1c2UgbGFzdF9yb3dfaGVpZ2h0IGhlcmU7IGl0IGlzIGlucHV0LXNpZGUtZGVwZW5kZW50ISAqLw0KLSAgICAgIGJsb2NrX3Jvd3MgPSAoaW50KSAoY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrcyAlIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpOw0KLSAgICAgIGlmIChibG9ja19yb3dzID09IDApIGJsb2NrX3Jvd3MgPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yOw0KLSAgICAgIGFjY2Vzc19yb3dzID0gYmxvY2tfcm93czsgLyogdGhpcyBpTUNVIHJvdyBvbmx5ICovDQotICAgICAgbGFzdF9yb3cgPSBUUlVFOw0KLSAgICB9DQotICAgIC8qIEFsaWduIHRoZSB2aXJ0dWFsIGJ1ZmZlciBmb3IgdGhpcyBjb21wb25lbnQuICovDQotICAgIGlmIChjaW5mby0+b3V0cHV0X2lNQ1Vfcm93ID4gMCkgew0KLSAgICAgIGFjY2Vzc19yb3dzICs9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IC8qIHByaW9yIGlNQ1Ugcm93IHRvbyAqLw0KLSAgICAgIGJ1ZmZlciA9ICgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfYmFycmF5KQ0KLQkoKGpfY29tbW9uX3B0cikgY2luZm8sIGNvZWYtPndob2xlX2ltYWdlW2NpXSwNCi0JIChjaW5mby0+b3V0cHV0X2lNQ1Vfcm93IC0gMSkgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yLA0KLQkgKEpESU1FTlNJT04pIGFjY2Vzc19yb3dzLCBGQUxTRSk7DQotICAgICAgYnVmZmVyICs9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CS8qIHBvaW50IHRvIGN1cnJlbnQgaU1DVSByb3cgKi8NCi0gICAgICBmaXJzdF9yb3cgPSBGQUxTRTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICBidWZmZXIgPSAoKmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkNCi0JKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBjb2VmLT53aG9sZV9pbWFnZVtjaV0sDQotCSAoSkRJTUVOU0lPTikgMCwgKEpESU1FTlNJT04pIGFjY2Vzc19yb3dzLCBGQUxTRSk7DQotICAgICAgZmlyc3Rfcm93ID0gVFJVRTsNCi0gICAgfQ0KLSAgICAvKiBGZXRjaCBjb21wb25lbnQtZGVwZW5kZW50IGluZm8gKi8NCi0gICAgY29lZl9iaXRzID0gY29lZi0+Y29lZl9iaXRzX2xhdGNoICsgKGNpICogU0FWRURfQ09FRlMpOw0KLSAgICBxdWFudHRibCA9IGNvbXBwdHItPnF1YW50X3RhYmxlOw0KLSAgICBRMDAgPSBxdWFudHRibC0+cXVhbnR2YWxbMF07DQotICAgIFEwMSA9IHF1YW50dGJsLT5xdWFudHZhbFtRMDFfUE9TXTsNCi0gICAgUTEwID0gcXVhbnR0YmwtPnF1YW50dmFsW1ExMF9QT1NdOw0KLSAgICBRMjAgPSBxdWFudHRibC0+cXVhbnR2YWxbUTIwX1BPU107DQotICAgIFExMSA9IHF1YW50dGJsLT5xdWFudHZhbFtRMTFfUE9TXTsNCi0gICAgUTAyID0gcXVhbnR0YmwtPnF1YW50dmFsW1EwMl9QT1NdOw0KLSAgICBpbnZlcnNlX0RDVCA9IGNpbmZvLT5pZGN0LT5pbnZlcnNlX0RDVFtjaV07DQotICAgIG91dHB1dF9wdHIgPSBvdXRwdXRfYnVmW2NpXTsNCi0gICAgLyogTG9vcCBvdmVyIGFsbCBEQ1QgYmxvY2tzIHRvIGJlIHByb2Nlc3NlZC4gKi8NCi0gICAgZm9yIChibG9ja19yb3cgPSAwOyBibG9ja19yb3cgPCBibG9ja19yb3dzOyBibG9ja19yb3crKykgew0KLSAgICAgIGJ1ZmZlcl9wdHIgPSBidWZmZXJbYmxvY2tfcm93XTsNCi0gICAgICBpZiAoZmlyc3Rfcm93ICYmIGJsb2NrX3JvdyA9PSAwKQ0KLQlwcmV2X2Jsb2NrX3JvdyA9IGJ1ZmZlcl9wdHI7DQotICAgICAgZWxzZQ0KLQlwcmV2X2Jsb2NrX3JvdyA9IGJ1ZmZlcltibG9ja19yb3ctMV07DQotICAgICAgaWYgKGxhc3Rfcm93ICYmIGJsb2NrX3JvdyA9PSBibG9ja19yb3dzLTEpDQotCW5leHRfYmxvY2tfcm93ID0gYnVmZmVyX3B0cjsNCi0gICAgICBlbHNlDQotCW5leHRfYmxvY2tfcm93ID0gYnVmZmVyW2Jsb2NrX3JvdysxXTsNCi0gICAgICAvKiBXZSBmZXRjaCB0aGUgc3Vycm91bmRpbmcgREMgdmFsdWVzIHVzaW5nIGEgc2xpZGluZy1yZWdpc3RlciBhcHByb2FjaC4NCi0gICAgICAgKiBJbml0aWFsaXplIGFsbCBuaW5lIGhlcmUgc28gYXMgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIG9uIG5hcnJvdyBwaWNzLg0KLSAgICAgICAqLw0KLSAgICAgIERDMSA9IERDMiA9IERDMyA9IChpbnQpIHByZXZfYmxvY2tfcm93WzBdWzBdOw0KLSAgICAgIERDNCA9IERDNSA9IERDNiA9IChpbnQpIGJ1ZmZlcl9wdHJbMF1bMF07DQotICAgICAgREM3ID0gREM4ID0gREM5ID0gKGludCkgbmV4dF9ibG9ja19yb3dbMF1bMF07DQotICAgICAgb3V0cHV0X2NvbCA9IDA7DQotICAgICAgbGFzdF9ibG9ja19jb2x1bW4gPSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgLSAxOw0KLSAgICAgIGZvciAoYmxvY2tfbnVtID0gMDsgYmxvY2tfbnVtIDw9IGxhc3RfYmxvY2tfY29sdW1uOyBibG9ja19udW0rKykgew0KLQkvKiBGZXRjaCBjdXJyZW50IERDVCBibG9jayBpbnRvIHdvcmtzcGFjZSBzbyB3ZSBjYW4gbW9kaWZ5IGl0LiAqLw0KLQlqY29weV9ibG9ja19yb3coYnVmZmVyX3B0ciwgKEpCTE9DS1JPVykgd29ya3NwYWNlLCAoSkRJTUVOU0lPTikgMSk7DQotCS8qIFVwZGF0ZSBEQyB2YWx1ZXMgKi8NCi0JaWYgKGJsb2NrX251bSA8IGxhc3RfYmxvY2tfY29sdW1uKSB7DQotCSAgREMzID0gKGludCkgcHJldl9ibG9ja19yb3dbMV1bMF07DQotCSAgREM2ID0gKGludCkgYnVmZmVyX3B0clsxXVswXTsNCi0JICBEQzkgPSAoaW50KSBuZXh0X2Jsb2NrX3Jvd1sxXVswXTsNCi0JfQ0KLQkvKiBDb21wdXRlIGNvZWZmaWNpZW50IGVzdGltYXRlcyBwZXIgSy44Lg0KLQkgKiBBbiBlc3RpbWF0ZSBpcyBhcHBsaWVkIG9ubHkgaWYgY29lZmZpY2llbnQgaXMgc3RpbGwgemVybywNCi0JICogYW5kIGlzIG5vdCBrbm93biB0byBiZSBmdWxseSBhY2N1cmF0ZS4NCi0JICovDQotCS8qIEFDMDEgKi8NCi0JaWYgKChBbD1jb2VmX2JpdHNbMV0pICE9IDAgJiYgd29ya3NwYWNlWzFdID09IDApIHsNCi0JICBudW0gPSAzNiAqIFEwMCAqIChEQzQgLSBEQzYpOw0KLQkgIGlmIChudW0gPj0gMCkgew0KLQkgICAgcHJlZCA9IChpbnQpICgoKFEwMTw8NykgKyBudW0pIC8gKFEwMTw8OCkpOw0KLQkgICAgaWYgKEFsID4gMCAmJiBwcmVkID49ICgxPDxBbCkpDQotCSAgICAgIHByZWQgPSAoMTw8QWwpLTE7DQotCSAgfSBlbHNlIHsNCi0JICAgIHByZWQgPSAoaW50KSAoKChRMDE8PDcpIC0gbnVtKSAvIChRMDE8PDgpKTsNCi0JICAgIGlmIChBbCA+IDAgJiYgcHJlZCA+PSAoMTw8QWwpKQ0KLQkgICAgICBwcmVkID0gKDE8PEFsKS0xOw0KLQkgICAgcHJlZCA9IC1wcmVkOw0KLQkgIH0NCi0JICB3b3Jrc3BhY2VbMV0gPSAoSkNPRUYpIHByZWQ7DQotCX0NCi0JLyogQUMxMCAqLw0KLQlpZiAoKEFsPWNvZWZfYml0c1syXSkgIT0gMCAmJiB3b3Jrc3BhY2VbOF0gPT0gMCkgew0KLQkgIG51bSA9IDM2ICogUTAwICogKERDMiAtIERDOCk7DQotCSAgaWYgKG51bSA+PSAwKSB7DQotCSAgICBwcmVkID0gKGludCkgKCgoUTEwPDw3KSArIG51bSkgLyAoUTEwPDw4KSk7DQotCSAgICBpZiAoQWwgPiAwICYmIHByZWQgPj0gKDE8PEFsKSkNCi0JICAgICAgcHJlZCA9ICgxPDxBbCktMTsNCi0JICB9IGVsc2Ugew0KLQkgICAgcHJlZCA9IChpbnQpICgoKFExMDw8NykgLSBudW0pIC8gKFExMDw8OCkpOw0KLQkgICAgaWYgKEFsID4gMCAmJiBwcmVkID49ICgxPDxBbCkpDQotCSAgICAgIHByZWQgPSAoMTw8QWwpLTE7DQotCSAgICBwcmVkID0gLXByZWQ7DQotCSAgfQ0KLQkgIHdvcmtzcGFjZVs4XSA9IChKQ09FRikgcHJlZDsNCi0JfQ0KLQkvKiBBQzIwICovDQotCWlmICgoQWw9Y29lZl9iaXRzWzNdKSAhPSAwICYmIHdvcmtzcGFjZVsxNl0gPT0gMCkgew0KLQkgIG51bSA9IDkgKiBRMDAgKiAoREMyICsgREM4IC0gMipEQzUpOw0KLQkgIGlmIChudW0gPj0gMCkgew0KLQkgICAgcHJlZCA9IChpbnQpICgoKFEyMDw8NykgKyBudW0pIC8gKFEyMDw8OCkpOw0KLQkgICAgaWYgKEFsID4gMCAmJiBwcmVkID49ICgxPDxBbCkpDQotCSAgICAgIHByZWQgPSAoMTw8QWwpLTE7DQotCSAgfSBlbHNlIHsNCi0JICAgIHByZWQgPSAoaW50KSAoKChRMjA8PDcpIC0gbnVtKSAvIChRMjA8PDgpKTsNCi0JICAgIGlmIChBbCA+IDAgJiYgcHJlZCA+PSAoMTw8QWwpKQ0KLQkgICAgICBwcmVkID0gKDE8PEFsKS0xOw0KLQkgICAgcHJlZCA9IC1wcmVkOw0KLQkgIH0NCi0JICB3b3Jrc3BhY2VbMTZdID0gKEpDT0VGKSBwcmVkOw0KLQl9DQotCS8qIEFDMTEgKi8NCi0JaWYgKChBbD1jb2VmX2JpdHNbNF0pICE9IDAgJiYgd29ya3NwYWNlWzldID09IDApIHsNCi0JICBudW0gPSA1ICogUTAwICogKERDMSAtIERDMyAtIERDNyArIERDOSk7DQotCSAgaWYgKG51bSA+PSAwKSB7DQotCSAgICBwcmVkID0gKGludCkgKCgoUTExPDw3KSArIG51bSkgLyAoUTExPDw4KSk7DQotCSAgICBpZiAoQWwgPiAwICYmIHByZWQgPj0gKDE8PEFsKSkNCi0JICAgICAgcHJlZCA9ICgxPDxBbCktMTsNCi0JICB9IGVsc2Ugew0KLQkgICAgcHJlZCA9IChpbnQpICgoKFExMTw8NykgLSBudW0pIC8gKFExMTw8OCkpOw0KLQkgICAgaWYgKEFsID4gMCAmJiBwcmVkID49ICgxPDxBbCkpDQotCSAgICAgIHByZWQgPSAoMTw8QWwpLTE7DQotCSAgICBwcmVkID0gLXByZWQ7DQotCSAgfQ0KLQkgIHdvcmtzcGFjZVs5XSA9IChKQ09FRikgcHJlZDsNCi0JfQ0KLQkvKiBBQzAyICovDQotCWlmICgoQWw9Y29lZl9iaXRzWzVdKSAhPSAwICYmIHdvcmtzcGFjZVsyXSA9PSAwKSB7DQotCSAgbnVtID0gOSAqIFEwMCAqIChEQzQgKyBEQzYgLSAyKkRDNSk7DQotCSAgaWYgKG51bSA+PSAwKSB7DQotCSAgICBwcmVkID0gKGludCkgKCgoUTAyPDw3KSArIG51bSkgLyAoUTAyPDw4KSk7DQotCSAgICBpZiAoQWwgPiAwICYmIHByZWQgPj0gKDE8PEFsKSkNCi0JICAgICAgcHJlZCA9ICgxPDxBbCktMTsNCi0JICB9IGVsc2Ugew0KLQkgICAgcHJlZCA9IChpbnQpICgoKFEwMjw8NykgLSBudW0pIC8gKFEwMjw8OCkpOw0KLQkgICAgaWYgKEFsID4gMCAmJiBwcmVkID49ICgxPDxBbCkpDQotCSAgICAgIHByZWQgPSAoMTw8QWwpLTE7DQotCSAgICBwcmVkID0gLXByZWQ7DQotCSAgfQ0KLQkgIHdvcmtzcGFjZVsyXSA9IChKQ09FRikgcHJlZDsNCi0JfQ0KLQkvKiBPSywgZG8gdGhlIElEQ1QgKi8NCi0JKCppbnZlcnNlX0RDVCkgKGNpbmZvLCBjb21wcHRyLCAoSkNPRUZQVFIpIHdvcmtzcGFjZSwNCi0JCQlvdXRwdXRfcHRyLCBvdXRwdXRfY29sKTsNCi0JLyogQWR2YW5jZSBmb3IgbmV4dCBjb2x1bW4gKi8NCi0JREMxID0gREMyOyBEQzIgPSBEQzM7DQotCURDNCA9IERDNTsgREM1ID0gREM2Ow0KLQlEQzcgPSBEQzg7IERDOCA9IERDOTsNCi0JYnVmZmVyX3B0cisrLCBwcmV2X2Jsb2NrX3JvdysrLCBuZXh0X2Jsb2NrX3JvdysrOw0KLQlvdXRwdXRfY29sICs9IGNvbXBwdHItPkRDVF9zY2FsZWRfc2l6ZTsNCi0gICAgICB9DQotICAgICAgb3V0cHV0X3B0ciArPSBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemU7DQotICAgIH0NCi0gIH0NCi0NCi0gIGlmICgrKyhjaW5mby0+b3V0cHV0X2lNQ1Vfcm93KSA8IGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MpDQotICAgIHJldHVybiBKUEVHX1JPV19DT01QTEVURUQ7DQotICByZXR1cm4gSlBFR19TQ0FOX0NPTVBMRVRFRDsNCi19DQotDQotI2VuZGlmIC8qIEJMT0NLX1NNT09USElOR19TVVBQT1JURUQgKi8NCi0NCi0NCi0vKg0KLSAqIEluaXRpYWxpemUgY29lZmZpY2llbnQgYnVmZmVyIGNvbnRyb2xsZXIuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotamluaXRfZF9jb2VmX2NvbnRyb2xsZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gbmVlZF9mdWxsX2J1ZmZlcikNCi17DQotICBteV9jb2VmX3B0ciBjb2VmOw0KLQ0KLSAgY29lZiA9IChteV9jb2VmX3B0cikNCi0gICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwNCi0JCQkJU0laRU9GKG15X2NvZWZfY29udHJvbGxlcikpOw0KLSAgY2luZm8tPmNvZWYgPSAoc3RydWN0IGpwZWdfZF9jb2VmX2NvbnRyb2xsZXIgKikgY29lZjsNCi0gIGNvZWYtPnB1Yi5zdGFydF9pbnB1dF9wYXNzID0gc3RhcnRfaW5wdXRfcGFzczsNCi0gIGNvZWYtPnB1Yi5zdGFydF9vdXRwdXRfcGFzcyA9IHN0YXJ0X291dHB1dF9wYXNzOw0KLSNpZmRlZiBCTE9DS19TTU9PVEhJTkdfU1VQUE9SVEVEDQotICBjb2VmLT5jb2VmX2JpdHNfbGF0Y2ggPSBOVUxMOw0KLSNlbmRpZg0KLQ0KLSAgLyogQ3JlYXRlIHRoZSBjb2VmZmljaWVudCBidWZmZXIuICovDQotICBpZiAobmVlZF9mdWxsX2J1ZmZlcikgew0KLSNpZmRlZiBEX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQNCi0gICAgLyogQWxsb2NhdGUgYSBmdWxsLWltYWdlIHZpcnR1YWwgYXJyYXkgZm9yIGVhY2ggY29tcG9uZW50LCAqLw0KLSAgICAvKiBwYWRkZWQgdG8gYSBtdWx0aXBsZSBvZiBzYW1wX2ZhY3RvciBEQ1QgYmxvY2tzIGluIGVhY2ggZGlyZWN0aW9uLiAqLw0KLSAgICAvKiBOb3RlIHdlIGFzayBmb3IgYSBwcmUtemVyb2VkIGFycmF5LiAqLw0KLSAgICBpbnQgY2ksIGFjY2Vzc19yb3dzOw0KLSAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOw0KLQ0KLSAgICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOw0KLQkgY2krKywgY29tcHB0cisrKSB7DQotICAgICAgYWNjZXNzX3Jvd3MgPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yOw0KLSNpZmRlZiBCTE9DS19TTU9PVEhJTkdfU1VQUE9SVEVEDQotICAgICAgLyogSWYgYmxvY2sgc21vb3RoaW5nIGNvdWxkIGJlIHVzZWQsIG5lZWQgYSBiaWdnZXIgd2luZG93ICovDQotICAgICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKQ0KLQlhY2Nlc3Nfcm93cyAqPSAzOw0KLSNlbmRpZg0KLSAgICAgIGNvZWYtPndob2xlX2ltYWdlW2NpXSA9ICgqY2luZm8tPm1lbS0+cmVxdWVzdF92aXJ0X2JhcnJheSkNCi0JKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwgVFJVRSwNCi0JIChKRElNRU5TSU9OKSBqcm91bmRfdXAoKGxvbmcpIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcywNCi0JCQkJKGxvbmcpIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IpLA0KLQkgKEpESU1FTlNJT04pIGpyb3VuZF91cCgobG9uZykgY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrcywNCi0JCQkJKGxvbmcpIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpLA0KLQkgKEpESU1FTlNJT04pIGFjY2Vzc19yb3dzKTsNCi0gICAgfQ0KLSAgICBjb2VmLT5wdWIuY29uc3VtZV9kYXRhID0gY29uc3VtZV9kYXRhOw0KLSAgICBjb2VmLT5wdWIuZGVjb21wcmVzc19kYXRhID0gZGVjb21wcmVzc19kYXRhOw0KLSAgICBjb2VmLT5wdWIuY29lZl9hcnJheXMgPSBjb2VmLT53aG9sZV9pbWFnZTsgLyogbGluayB0byB2aXJ0dWFsIGFycmF5cyAqLw0KLSNlbHNlDQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsNCi0jZW5kaWYNCi0gIH0gZWxzZSB7DQotICAgIC8qIFdlIG9ubHkgbmVlZCBhIHNpbmdsZS1NQ1UgYnVmZmVyLiAqLw0KLSAgICBKQkxPQ0tST1cgYnVmZmVyOw0KLSAgICBpbnQgaTsNCi0NCi0gICAgYnVmZmVyID0gKEpCTE9DS1JPVykNCi0gICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX2xhcmdlKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQkgIERfTUFYX0JMT0NLU19JTl9NQ1UgKiBTSVpFT0YoSkJMT0NLKSk7DQotICAgIGZvciAoaSA9IDA7IGkgPCBEX01BWF9CTE9DS1NfSU5fTUNVOyBpKyspIHsNCi0gICAgICBjb2VmLT5NQ1VfYnVmZmVyW2ldID0gYnVmZmVyICsgaTsNCi0gICAgfQ0KLSAgICBjb2VmLT5wdWIuY29uc3VtZV9kYXRhID0gZHVtbXlfY29uc3VtZV9kYXRhOw0KLSAgICBjb2VmLT5wdWIuZGVjb21wcmVzc19kYXRhID0gZGVjb21wcmVzc19vbmVwYXNzOw0KLSAgICBjb2VmLT5wdWIuY29lZl9hcnJheXMgPSBOVUxMOyAvKiBmbGFnIGZvciBubyB2aXJ0dWFsIGFycmF5cyAqLw0KLSAgfQ0KLX0NCi0NCi0jZW5kaWYgLy9fRlhfSlBFR19UVVJCT18NCisjaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQorLyoKKyAqIGpkY29lZmN0LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgY29lZmZpY2llbnQgYnVmZmVyIGNvbnRyb2xsZXIgZm9yIGRlY29tcHJlc3Npb24uCisgKiBUaGlzIGNvbnRyb2xsZXIgaXMgdGhlIHRvcCBsZXZlbCBvZiB0aGUgSlBFRyBkZWNvbXByZXNzb3IgcHJvcGVyLgorICogVGhlIGNvZWZmaWNpZW50IGJ1ZmZlciBsaWVzIGJldHdlZW4gZW50cm9weSBkZWNvZGluZyBhbmQgaW52ZXJzZS1EQ1Qgc3RlcHMuCisgKgorICogSW4gYnVmZmVyZWQtaW1hZ2UgbW9kZSwgdGhpcyBjb250cm9sbGVyIGlzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbgorICogaW5wdXQtb3JpZW50ZWQgcHJvY2Vzc2luZyBhbmQgb3V0cHV0LW9yaWVudGVkIHByb2Nlc3NpbmcuCisgKiBBbHNvLCB0aGUgaW5wdXQgc2lkZSAob25seSkgaXMgdXNlZCB3aGVuIHJlYWRpbmcgYSBmaWxlIGZvciB0cmFuc2NvZGluZy4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisKKy8qIEJsb2NrIHNtb290aGluZyBpcyBvbmx5IGFwcGxpY2FibGUgZm9yIHByb2dyZXNzaXZlIEpQRUcsIHNvOiAqLworI2lmbmRlZiBEX1BST0dSRVNTSVZFX1NVUFBPUlRFRAorI3VuZGVmIEJMT0NLX1NNT09USElOR19TVVBQT1JURUQKKyNlbmRpZgorCisvKiBQcml2YXRlIGJ1ZmZlciBjb250cm9sbGVyIG9iamVjdCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX2RfY29lZl9jb250cm9sbGVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLworCisgIC8qIFRoZXNlIHZhcmlhYmxlcyBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IGxvY2F0aW9uIG9mIHRoZSBpbnB1dCBzaWRlLiAqLworICAvKiBjaW5mby0+aW5wdXRfaU1DVV9yb3cgaXMgYWxzbyB1c2VkIGZvciB0aGlzLiAqLworICBKRElNRU5TSU9OIE1DVV9jdHI7CQkvKiBjb3VudHMgTUNVcyBwcm9jZXNzZWQgaW4gY3VycmVudCByb3cgKi8KKyAgaW50IE1DVV92ZXJ0X29mZnNldDsJCS8qIGNvdW50cyBNQ1Ugcm93cyB3aXRoaW4gaU1DVSByb3cgKi8KKyAgaW50IE1DVV9yb3dzX3Blcl9pTUNVX3JvdzsJLyogbnVtYmVyIG9mIHN1Y2ggcm93cyBuZWVkZWQgKi8KKworICAvKiBUaGUgb3V0cHV0IHNpZGUncyBsb2NhdGlvbiBpcyByZXByZXNlbnRlZCBieSBjaW5mby0+b3V0cHV0X2lNQ1Vfcm93LiAqLworCisgIC8qIEluIHNpbmdsZS1wYXNzIG1vZGVzLCBpdCdzIHN1ZmZpY2llbnQgdG8gYnVmZmVyIGp1c3Qgb25lIE1DVS4KKyAgICogV2UgYWxsb2NhdGUgYSB3b3Jrc3BhY2Ugb2YgRF9NQVhfQkxPQ0tTX0lOX01DVSBjb2VmZmljaWVudCBibG9ja3MsCisgICAqIGFuZCBsZXQgdGhlIGVudHJvcHkgZGVjb2RlciB3cml0ZSBpbnRvIHRoYXQgd29ya3NwYWNlIGVhY2ggdGltZS4KKyAgICogKE9uIDgweDg2LCB0aGUgd29ya3NwYWNlIGlzIEZBUiBldmVuIHRob3VnaCBpdCdzIG5vdCByZWFsbHkgdmVyeSBiaWc7CisgICAqIHRoaXMgaXMgdG8ga2VlcCB0aGUgbW9kdWxlIGludGVyZmFjZXMgdW5jaGFuZ2VkIHdoZW4gYSBsYXJnZSBjb2VmZmljaWVudAorICAgKiBidWZmZXIgaXMgbmVjZXNzYXJ5LikKKyAgICogSW4gbXVsdGktcGFzcyBtb2RlcywgdGhpcyBhcnJheSBwb2ludHMgdG8gdGhlIGN1cnJlbnQgTUNVJ3MgYmxvY2tzCisgICAqIHdpdGhpbiB0aGUgdmlydHVhbCBhcnJheXM7IGl0IGlzIHVzZWQgb25seSBieSB0aGUgaW5wdXQgc2lkZS4KKyAgICovCisgIEpCTE9DS1JPVyBNQ1VfYnVmZmVyW0RfTUFYX0JMT0NLU19JTl9NQ1VdOworCisjaWZkZWYgRF9NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVECisgIC8qIEluIG11bHRpLXBhc3MgbW9kZXMsIHdlIG5lZWQgYSB2aXJ0dWFsIGJsb2NrIGFycmF5IGZvciBlYWNoIGNvbXBvbmVudC4gKi8KKyAganZpcnRfYmFycmF5X3B0ciB3aG9sZV9pbWFnZVtNQVhfQ09NUE9ORU5UU107CisjZW5kaWYKKworI2lmZGVmIEJMT0NLX1NNT09USElOR19TVVBQT1JURUQKKyAgLyogV2hlbiBkb2luZyBibG9jayBzbW9vdGhpbmcsIHdlIGxhdGNoIGNvZWZmaWNpZW50IEFsIHZhbHVlcyBoZXJlICovCisgIGludCAqIGNvZWZfYml0c19sYXRjaDsKKyNkZWZpbmUgU0FWRURfQ09FRlMgIDYJCS8qIHdlIHNhdmUgY29lZl9iaXRzWzAuLjVdICovCisjZW5kaWYKK30gbXlfY29lZl9jb250cm9sbGVyOworCit0eXBlZGVmIG15X2NvZWZfY29udHJvbGxlciAqIG15X2NvZWZfcHRyOworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworTUVUSE9EREVGKGludCkgZGVjb21wcmVzc19vbmVwYXNzCisJSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIG91dHB1dF9idWYpKTsKKyNpZmRlZiBEX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQKK01FVEhPRERFRihpbnQpIGRlY29tcHJlc3NfZGF0YQorCUpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBvdXRwdXRfYnVmKSk7CisjZW5kaWYKKyNpZmRlZiBCTE9DS19TTU9PVEhJTkdfU1VQUE9SVEVECitMT0NBTChib29sZWFuKSBzbW9vdGhpbmdfb2sgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CitNRVRIT0RERUYoaW50KSBkZWNvbXByZXNzX3Ntb290aF9kYXRhCisJSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIG91dHB1dF9idWYpKTsKKyNlbmRpZgorCisKK0xPQ0FMKHZvaWQpCitzdGFydF9pTUNVX3JvdyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKKy8qIFJlc2V0IHdpdGhpbi1pTUNVLXJvdyBjb3VudGVycyBmb3IgYSBuZXcgcm93IChpbnB1dCBzaWRlKSAqLworeworICBteV9jb2VmX3B0ciBjb2VmID0gKG15X2NvZWZfcHRyKSBjaW5mby0+Y29lZjsKKworICAvKiBJbiBhbiBpbnRlcmxlYXZlZCBzY2FuLCBhbiBNQ1Ugcm93IGlzIHRoZSBzYW1lIGFzIGFuIGlNQ1Ugcm93LgorICAgKiBJbiBhIG5vbmludGVybGVhdmVkIHNjYW4sIGFuIGlNQ1Ugcm93IGhhcyB2X3NhbXBfZmFjdG9yIE1DVSByb3dzLgorICAgKiBCdXQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgaW1hZ2UsIHByb2Nlc3Mgb25seSB3aGF0J3MgbGVmdC4KKyAgICovCisgIGlmIChjaW5mby0+Y29tcHNfaW5fc2NhbiA+IDEpIHsKKyAgICBjb2VmLT5NQ1Vfcm93c19wZXJfaU1DVV9yb3cgPSAxOworICB9IGVsc2UgeworICAgIGlmIChjaW5mby0+aW5wdXRfaU1DVV9yb3cgPCAoY2luZm8tPnRvdGFsX2lNQ1Vfcm93cy0xKSkKKyAgICAgIGNvZWYtPk1DVV9yb3dzX3Blcl9pTUNVX3JvdyA9IGNpbmZvLT5jdXJfY29tcF9pbmZvWzBdLT52X3NhbXBfZmFjdG9yOworICAgIGVsc2UKKyAgICAgIGNvZWYtPk1DVV9yb3dzX3Blcl9pTUNVX3JvdyA9IGNpbmZvLT5jdXJfY29tcF9pbmZvWzBdLT5sYXN0X3Jvd19oZWlnaHQ7CisgIH0KKworICBjb2VmLT5NQ1VfY3RyID0gMDsKKyAgY29lZi0+TUNVX3ZlcnRfb2Zmc2V0ID0gMDsKK30KKworCisvKgorICogSW5pdGlhbGl6ZSBmb3IgYW4gaW5wdXQgcHJvY2Vzc2luZyBwYXNzLgorICovCisKK01FVEhPRERFRih2b2lkKQorc3RhcnRfaW5wdXRfcGFzcyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgY2luZm8tPmlucHV0X2lNQ1Vfcm93ID0gMDsKKyAgc3RhcnRfaU1DVV9yb3coY2luZm8pOworfQorCisKKy8qCisgKiBJbml0aWFsaXplIGZvciBhbiBvdXRwdXQgcHJvY2Vzc2luZyBwYXNzLgorICovCisKK01FVEhPRERFRih2b2lkKQorc3RhcnRfb3V0cHV0X3Bhc3MgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisjaWZkZWYgQkxPQ0tfU01PT1RISU5HX1NVUFBPUlRFRAorICBteV9jb2VmX3B0ciBjb2VmID0gKG15X2NvZWZfcHRyKSBjaW5mby0+Y29lZjsKKworICAvKiBJZiBtdWx0aXBhc3MsIGNoZWNrIHRvIHNlZSB3aGV0aGVyIHRvIHVzZSBibG9jayBzbW9vdGhpbmcgb24gdGhpcyBwYXNzICovCisgIGlmIChjb2VmLT5wdWIuY29lZl9hcnJheXMgIT0gTlVMTCkgeworICAgIGlmIChjaW5mby0+ZG9fYmxvY2tfc21vb3RoaW5nICYmIHNtb290aGluZ19vayhjaW5mbykpCisgICAgICBjb2VmLT5wdWIuZGVjb21wcmVzc19kYXRhID0gZGVjb21wcmVzc19zbW9vdGhfZGF0YTsKKyAgICBlbHNlCisgICAgICBjb2VmLT5wdWIuZGVjb21wcmVzc19kYXRhID0gZGVjb21wcmVzc19kYXRhOworICB9CisjZW5kaWYKKyAgY2luZm8tPm91dHB1dF9pTUNVX3JvdyA9IDA7Cit9CisKKworLyoKKyAqIERlY29tcHJlc3MgYW5kIHJldHVybiBzb21lIGRhdGEgaW4gdGhlIHNpbmdsZS1wYXNzIGNhc2UuCisgKiBBbHdheXMgYXR0ZW1wdHMgdG8gZW1pdCBvbmUgZnVsbHkgaW50ZXJsZWF2ZWQgTUNVIHJvdyAoImlNQ1UiIHJvdykuCisgKiBJbnB1dCBhbmQgb3V0cHV0IG11c3QgcnVuIGluIGxvY2tzdGVwIHNpbmNlIHdlIGhhdmUgb25seSBhIG9uZS1NQ1UgYnVmZmVyLgorICogUmV0dXJuIHZhbHVlIGlzIEpQRUdfUk9XX0NPTVBMRVRFRCwgSlBFR19TQ0FOX0NPTVBMRVRFRCwgb3IgSlBFR19TVVNQRU5ERUQuCisgKgorICogTkI6IG91dHB1dF9idWYgY29udGFpbnMgYSBwbGFuZSBmb3IgZWFjaCBjb21wb25lbnQgaW4gaW1hZ2UsCisgKiB3aGljaCB3ZSBpbmRleCBhY2NvcmRpbmcgdG8gdGhlIGNvbXBvbmVudCdzIFNPRiBwb3NpdGlvbi4KKyAqLworCitNRVRIT0RERUYoaW50KQorZGVjb21wcmVzc19vbmVwYXNzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUElNQUdFIG91dHB1dF9idWYpCit7CisgIG15X2NvZWZfcHRyIGNvZWYgPSAobXlfY29lZl9wdHIpIGNpbmZvLT5jb2VmOworICBKRElNRU5TSU9OIE1DVV9jb2xfbnVtOwkvKiBpbmRleCBvZiBjdXJyZW50IE1DVSB3aXRoaW4gcm93ICovCisgIEpESU1FTlNJT04gbGFzdF9NQ1VfY29sID0gY2luZm8tPk1DVXNfcGVyX3JvdyAtIDE7CisgIEpESU1FTlNJT04gbGFzdF9pTUNVX3JvdyA9IGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MgLSAxOworICBpbnQgYmxrbiwgY2ksIHhpbmRleCwgeWluZGV4LCB5b2Zmc2V0LCB1c2VmdWxfd2lkdGg7CisgIEpTQU1QQVJSQVkgb3V0cHV0X3B0cjsKKyAgSkRJTUVOU0lPTiBzdGFydF9jb2wsIG91dHB1dF9jb2w7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIGludmVyc2VfRENUX21ldGhvZF9wdHIgaW52ZXJzZV9EQ1Q7CisKKyAgLyogTG9vcCB0byBwcm9jZXNzIGFzIG11Y2ggYXMgb25lIHdob2xlIGlNQ1Ugcm93ICovCisgIGZvciAoeW9mZnNldCA9IGNvZWYtPk1DVV92ZXJ0X29mZnNldDsgeW9mZnNldCA8IGNvZWYtPk1DVV9yb3dzX3Blcl9pTUNVX3JvdzsKKyAgICAgICB5b2Zmc2V0KyspIHsKKyAgICBmb3IgKE1DVV9jb2xfbnVtID0gY29lZi0+TUNVX2N0cjsgTUNVX2NvbF9udW0gPD0gbGFzdF9NQ1VfY29sOworCSBNQ1VfY29sX251bSsrKSB7CisgICAgICAvKiBUcnkgdG8gZmV0Y2ggYW4gTUNVLiAgRW50cm9weSBkZWNvZGVyIGV4cGVjdHMgYnVmZmVyIHRvIGJlIHplcm9lZC4gKi8KKyAgICAgIGp6ZXJvX2Zhcigodm9pZCBGQVIgKikgY29lZi0+TUNVX2J1ZmZlclswXSwKKwkJKHNpemVfdCkgKGNpbmZvLT5ibG9ja3NfaW5fTUNVICogU0laRU9GKEpCTE9DSykpKTsKKyAgICAgIGlmICghICgqY2luZm8tPmVudHJvcHktPmRlY29kZV9tY3UpIChjaW5mbywgY29lZi0+TUNVX2J1ZmZlcikpIHsKKwkvKiBTdXNwZW5zaW9uIGZvcmNlZDsgdXBkYXRlIHN0YXRlIGNvdW50ZXJzIGFuZCBleGl0ICovCisJY29lZi0+TUNVX3ZlcnRfb2Zmc2V0ID0geW9mZnNldDsKKwljb2VmLT5NQ1VfY3RyID0gTUNVX2NvbF9udW07CisJcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgfQorICAgICAgLyogRGV0ZXJtaW5lIHdoZXJlIGRhdGEgc2hvdWxkIGdvIGluIG91dHB1dF9idWYgYW5kIGRvIHRoZSBJRENUIHRoaW5nLgorICAgICAgICogV2Ugc2tpcCBkdW1teSBibG9ja3MgYXQgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZXMgKGJ1dCBibGtuIGdldHMKKyAgICAgICAqIGluY3JlbWVudGVkIHBhc3QgdGhlbSEpLiAgTm90ZSB0aGUgaW5uZXIgbG9vcCByZWxpZXMgb24gaGF2aW5nCisgICAgICAgKiBhbGxvY2F0ZWQgdGhlIE1DVV9idWZmZXJbXSBibG9ja3Mgc2VxdWVudGlhbGx5LgorICAgICAgICovCisgICAgICBibGtuID0gMDsJCQkvKiBpbmRleCBvZiBjdXJyZW50IERDVCBibG9jayB3aXRoaW4gTUNVICovCisgICAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworCWNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07CisJLyogRG9uJ3QgYm90aGVyIHRvIElEQ1QgYW4gdW5pbnRlcmVzdGluZyBjb21wb25lbnQuICovCisJaWYgKCEgY29tcHB0ci0+Y29tcG9uZW50X25lZWRlZCkgeworCSAgYmxrbiArPSBjb21wcHRyLT5NQ1VfYmxvY2tzOworCSAgY29udGludWU7CisJfQorCWludmVyc2VfRENUID0gY2luZm8tPmlkY3QtPmludmVyc2VfRENUW2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF07CisJdXNlZnVsX3dpZHRoID0gKE1DVV9jb2xfbnVtIDwgbGFzdF9NQ1VfY29sKSA/IGNvbXBwdHItPk1DVV93aWR0aAorCQkJCQkJICAgIDogY29tcHB0ci0+bGFzdF9jb2xfd2lkdGg7CisJb3V0cHV0X3B0ciA9IG91dHB1dF9idWZbY29tcHB0ci0+Y29tcG9uZW50X2luZGV4XSArCisJICB5b2Zmc2V0ICogY29tcHB0ci0+RENUX3NjYWxlZF9zaXplOworCXN0YXJ0X2NvbCA9IE1DVV9jb2xfbnVtICogY29tcHB0ci0+TUNVX3NhbXBsZV93aWR0aDsKKwlmb3IgKHlpbmRleCA9IDA7IHlpbmRleCA8IGNvbXBwdHItPk1DVV9oZWlnaHQ7IHlpbmRleCsrKSB7CisJICBpZiAoY2luZm8tPmlucHV0X2lNQ1Vfcm93IDwgbGFzdF9pTUNVX3JvdyB8fAorCSAgICAgIHlvZmZzZXQreWluZGV4IDwgY29tcHB0ci0+bGFzdF9yb3dfaGVpZ2h0KSB7CisJICAgIG91dHB1dF9jb2wgPSBzdGFydF9jb2w7CisJICAgIGZvciAoeGluZGV4ID0gMDsgeGluZGV4IDwgdXNlZnVsX3dpZHRoOyB4aW5kZXgrKykgeworCSAgICAgICgqaW52ZXJzZV9EQ1QpIChjaW5mbywgY29tcHB0ciwKKwkJCSAgICAgIChKQ09FRlBUUikgY29lZi0+TUNVX2J1ZmZlcltibGtuK3hpbmRleF0sCisJCQkgICAgICBvdXRwdXRfcHRyLCBvdXRwdXRfY29sKTsKKwkgICAgICBvdXRwdXRfY29sICs9IGNvbXBwdHItPkRDVF9zY2FsZWRfc2l6ZTsKKwkgICAgfQorCSAgfQorCSAgYmxrbiArPSBjb21wcHRyLT5NQ1Vfd2lkdGg7CisJICBvdXRwdXRfcHRyICs9IGNvbXBwdHItPkRDVF9zY2FsZWRfc2l6ZTsKKwl9CisgICAgICB9CisgICAgfQorICAgIC8qIENvbXBsZXRlZCBhbiBNQ1Ugcm93LCBidXQgcGVyaGFwcyBub3QgYW4gaU1DVSByb3cgKi8KKyAgICBjb2VmLT5NQ1VfY3RyID0gMDsKKyAgfQorICAvKiBDb21wbGV0ZWQgdGhlIGlNQ1Ugcm93LCBhZHZhbmNlIGNvdW50ZXJzIGZvciBuZXh0IG9uZSAqLworICBjaW5mby0+b3V0cHV0X2lNQ1Vfcm93Kys7CisgIGlmICgrKyhjaW5mby0+aW5wdXRfaU1DVV9yb3cpIDwgY2luZm8tPnRvdGFsX2lNQ1Vfcm93cykgeworICAgIHN0YXJ0X2lNQ1Vfcm93KGNpbmZvKTsKKyAgICByZXR1cm4gSlBFR19ST1dfQ09NUExFVEVEOworICB9CisgIC8qIENvbXBsZXRlZCB0aGUgc2NhbiAqLworICAoKmNpbmZvLT5pbnB1dGN0bC0+ZmluaXNoX2lucHV0X3Bhc3MpIChjaW5mbyk7CisgIHJldHVybiBKUEVHX1NDQU5fQ09NUExFVEVEOworfQorCisKKy8qCisgKiBEdW1teSBjb25zdW1lLWlucHV0IHJvdXRpbmUgZm9yIHNpbmdsZS1wYXNzIG9wZXJhdGlvbi4KKyAqLworCitNRVRIT0RERUYoaW50KQorZHVtbXlfY29uc3VtZV9kYXRhIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICByZXR1cm4gSlBFR19TVVNQRU5ERUQ7CS8qIEFsd2F5cyBpbmRpY2F0ZSBub3RoaW5nIHdhcyBkb25lICovCit9CisKKworI2lmZGVmIERfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRAorCisvKgorICogQ29uc3VtZSBpbnB1dCBkYXRhIGFuZCBzdG9yZSBpdCBpbiB0aGUgZnVsbC1pbWFnZSBjb2VmZmljaWVudCBidWZmZXIuCisgKiBXZSByZWFkIGFzIG11Y2ggYXMgb25lIGZ1bGx5IGludGVybGVhdmVkIE1DVSByb3cgKCJpTUNVIiByb3cpIHBlciBjYWxsLAorICogaWUsIHZfc2FtcF9mYWN0b3IgYmxvY2sgcm93cyBmb3IgZWFjaCBjb21wb25lbnQgaW4gdGhlIHNjYW4uCisgKiBSZXR1cm4gdmFsdWUgaXMgSlBFR19ST1dfQ09NUExFVEVELCBKUEVHX1NDQU5fQ09NUExFVEVELCBvciBKUEVHX1NVU1BFTkRFRC4KKyAqLworCitNRVRIT0RERUYoaW50KQorY29uc3VtZV9kYXRhIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9jb2VmX3B0ciBjb2VmID0gKG15X2NvZWZfcHRyKSBjaW5mby0+Y29lZjsKKyAgSkRJTUVOU0lPTiBNQ1VfY29sX251bTsJLyogaW5kZXggb2YgY3VycmVudCBNQ1Ugd2l0aGluIHJvdyAqLworICBpbnQgYmxrbiwgY2ksIHhpbmRleCwgeWluZGV4LCB5b2Zmc2V0OworICBKRElNRU5TSU9OIHN0YXJ0X2NvbDsKKyAgSkJMT0NLQVJSQVkgYnVmZmVyW01BWF9DT01QU19JTl9TQ0FOXTsKKyAgSkJMT0NLUk9XIGJ1ZmZlcl9wdHI7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisKKyAgLyogQWxpZ24gdGhlIHZpcnR1YWwgYnVmZmVycyBmb3IgdGhlIGNvbXBvbmVudHMgdXNlZCBpbiB0aGlzIHNjYW4uICovCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICBidWZmZXJbY2ldID0gKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCisgICAgICAoKGpfY29tbW9uX3B0cikgY2luZm8sIGNvZWYtPndob2xlX2ltYWdlW2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF0sCisgICAgICAgY2luZm8tPmlucHV0X2lNQ1Vfcm93ICogY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwKKyAgICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgVFJVRSk7CisgICAgLyogTm90ZTogZW50cm9weSBkZWNvZGVyIGV4cGVjdHMgYnVmZmVyIHRvIGJlIHplcm9lZCwKKyAgICAgKiBidXQgdGhpcyBpcyBoYW5kbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIG1lbW9yeSBtYW5hZ2VyCisgICAgICogYmVjYXVzZSB3ZSByZXF1ZXN0ZWQgYSBwcmUtemVyb2VkIGFycmF5LgorICAgICAqLworICB9CisKKyAgLyogTG9vcCB0byBwcm9jZXNzIG9uZSB3aG9sZSBpTUNVIHJvdyAqLworICBmb3IgKHlvZmZzZXQgPSBjb2VmLT5NQ1VfdmVydF9vZmZzZXQ7IHlvZmZzZXQgPCBjb2VmLT5NQ1Vfcm93c19wZXJfaU1DVV9yb3c7CisgICAgICAgeW9mZnNldCsrKSB7CisgICAgZm9yIChNQ1VfY29sX251bSA9IGNvZWYtPk1DVV9jdHI7IE1DVV9jb2xfbnVtIDwgY2luZm8tPk1DVXNfcGVyX3JvdzsKKwkgTUNVX2NvbF9udW0rKykgeworICAgICAgLyogQ29uc3RydWN0IGxpc3Qgb2YgcG9pbnRlcnMgdG8gRENUIGJsb2NrcyBiZWxvbmdpbmcgdG8gdGhpcyBNQ1UgKi8KKyAgICAgIGJsa24gPSAwOwkJCS8qIGluZGV4IG9mIGN1cnJlbnQgRENUIGJsb2NrIHdpdGhpbiBNQ1UgKi8KKyAgICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisJY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKwlzdGFydF9jb2wgPSBNQ1VfY29sX251bSAqIGNvbXBwdHItPk1DVV93aWR0aDsKKwlmb3IgKHlpbmRleCA9IDA7IHlpbmRleCA8IGNvbXBwdHItPk1DVV9oZWlnaHQ7IHlpbmRleCsrKSB7CisJICBidWZmZXJfcHRyID0gYnVmZmVyW2NpXVt5aW5kZXgreW9mZnNldF0gKyBzdGFydF9jb2w7CisJICBmb3IgKHhpbmRleCA9IDA7IHhpbmRleCA8IGNvbXBwdHItPk1DVV93aWR0aDsgeGluZGV4KyspIHsKKwkgICAgY29lZi0+TUNVX2J1ZmZlcltibGtuKytdID0gYnVmZmVyX3B0cisrOworCSAgfQorCX0KKyAgICAgIH0KKyAgICAgIC8qIFRyeSB0byBmZXRjaCB0aGUgTUNVLiAqLworICAgICAgaWYgKCEgKCpjaW5mby0+ZW50cm9weS0+ZGVjb2RlX21jdSkgKGNpbmZvLCBjb2VmLT5NQ1VfYnVmZmVyKSkgeworCS8qIFN1c3BlbnNpb24gZm9yY2VkOyB1cGRhdGUgc3RhdGUgY291bnRlcnMgYW5kIGV4aXQgKi8KKwljb2VmLT5NQ1VfdmVydF9vZmZzZXQgPSB5b2Zmc2V0OworCWNvZWYtPk1DVV9jdHIgPSBNQ1VfY29sX251bTsKKwlyZXR1cm4gSlBFR19TVVNQRU5ERUQ7CisgICAgICB9CisgICAgfQorICAgIC8qIENvbXBsZXRlZCBhbiBNQ1Ugcm93LCBidXQgcGVyaGFwcyBub3QgYW4gaU1DVSByb3cgKi8KKyAgICBjb2VmLT5NQ1VfY3RyID0gMDsKKyAgfQorICAvKiBDb21wbGV0ZWQgdGhlIGlNQ1Ugcm93LCBhZHZhbmNlIGNvdW50ZXJzIGZvciBuZXh0IG9uZSAqLworICBpZiAoKysoY2luZm8tPmlucHV0X2lNQ1Vfcm93KSA8IGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MpIHsKKyAgICBzdGFydF9pTUNVX3JvdyhjaW5mbyk7CisgICAgcmV0dXJuIEpQRUdfUk9XX0NPTVBMRVRFRDsKKyAgfQorICAvKiBDb21wbGV0ZWQgdGhlIHNjYW4gKi8KKyAgKCpjaW5mby0+aW5wdXRjdGwtPmZpbmlzaF9pbnB1dF9wYXNzKSAoY2luZm8pOworICByZXR1cm4gSlBFR19TQ0FOX0NPTVBMRVRFRDsKK30KKworCisvKgorICogRGVjb21wcmVzcyBhbmQgcmV0dXJuIHNvbWUgZGF0YSBpbiB0aGUgbXVsdGktcGFzcyBjYXNlLgorICogQWx3YXlzIGF0dGVtcHRzIHRvIGVtaXQgb25lIGZ1bGx5IGludGVybGVhdmVkIE1DVSByb3cgKCJpTUNVIiByb3cpLgorICogUmV0dXJuIHZhbHVlIGlzIEpQRUdfUk9XX0NPTVBMRVRFRCwgSlBFR19TQ0FOX0NPTVBMRVRFRCwgb3IgSlBFR19TVVNQRU5ERUQuCisgKgorICogTkI6IG91dHB1dF9idWYgY29udGFpbnMgYSBwbGFuZSBmb3IgZWFjaCBjb21wb25lbnQgaW4gaW1hZ2UuCisgKi8KKworTUVUSE9EREVGKGludCkKK2RlY29tcHJlc3NfZGF0YSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBvdXRwdXRfYnVmKQoreworICBteV9jb2VmX3B0ciBjb2VmID0gKG15X2NvZWZfcHRyKSBjaW5mby0+Y29lZjsKKyAgSkRJTUVOU0lPTiBsYXN0X2lNQ1Vfcm93ID0gY2luZm8tPnRvdGFsX2lNQ1Vfcm93cyAtIDE7CisgIEpESU1FTlNJT04gYmxvY2tfbnVtOworICBpbnQgY2ksIGJsb2NrX3JvdywgYmxvY2tfcm93czsKKyAgSkJMT0NLQVJSQVkgYnVmZmVyOworICBKQkxPQ0tST1cgYnVmZmVyX3B0cjsKKyAgSlNBTVBBUlJBWSBvdXRwdXRfcHRyOworICBKRElNRU5TSU9OIG91dHB1dF9jb2w7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIGludmVyc2VfRENUX21ldGhvZF9wdHIgaW52ZXJzZV9EQ1Q7CisKKyAgLyogRm9yY2Ugc29tZSBpbnB1dCB0byBiZSBkb25lIGlmIHdlIGFyZSBnZXR0aW5nIGFoZWFkIG9mIHRoZSBpbnB1dC4gKi8KKyAgd2hpbGUgKGNpbmZvLT5pbnB1dF9zY2FuX251bWJlciA8IGNpbmZvLT5vdXRwdXRfc2Nhbl9udW1iZXIgfHwKKwkgKGNpbmZvLT5pbnB1dF9zY2FuX251bWJlciA9PSBjaW5mby0+b3V0cHV0X3NjYW5fbnVtYmVyICYmCisJICBjaW5mby0+aW5wdXRfaU1DVV9yb3cgPD0gY2luZm8tPm91dHB1dF9pTUNVX3JvdykpIHsKKyAgICBpZiAoKCpjaW5mby0+aW5wdXRjdGwtPmNvbnN1bWVfaW5wdXQpKGNpbmZvKSA9PSBKUEVHX1NVU1BFTkRFRCkKKyAgICAgIHJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgfQorCisgIC8qIE9LLCBvdXRwdXQgZnJvbSB0aGUgdmlydHVhbCBhcnJheXMuICovCisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgLyogRG9uJ3QgYm90aGVyIHRvIElEQ1QgYW4gdW5pbnRlcmVzdGluZyBjb21wb25lbnQuICovCisgICAgaWYgKCEgY29tcHB0ci0+Y29tcG9uZW50X25lZWRlZCkKKyAgICAgIGNvbnRpbnVlOworICAgIC8qIEFsaWduIHRoZSB2aXJ0dWFsIGJ1ZmZlciBmb3IgdGhpcyBjb21wb25lbnQuICovCisgICAgYnVmZmVyID0gKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9iYXJyYXkpCisgICAgICAoKGpfY29tbW9uX3B0cikgY2luZm8sIGNvZWYtPndob2xlX2ltYWdlW2NpXSwKKyAgICAgICBjaW5mby0+b3V0cHV0X2lNQ1Vfcm93ICogY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwKKyAgICAgICAoSkRJTUVOU0lPTikgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgRkFMU0UpOworICAgIC8qIENvdW50IG5vbi1kdW1teSBEQ1QgYmxvY2sgcm93cyBpbiB0aGlzIGlNQ1Ugcm93LiAqLworICAgIGlmIChjaW5mby0+b3V0cHV0X2lNQ1Vfcm93IDwgbGFzdF9pTUNVX3JvdykKKyAgICAgIGJsb2NrX3Jvd3MgPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yOworICAgIGVsc2UgeworICAgICAgLyogTkI6IGNhbid0IHVzZSBsYXN0X3Jvd19oZWlnaHQgaGVyZTsgaXQgaXMgaW5wdXQtc2lkZS1kZXBlbmRlbnQhICovCisgICAgICBibG9ja19yb3dzID0gKGludCkgKGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3MgJSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKTsKKyAgICAgIGlmIChibG9ja19yb3dzID09IDApIGJsb2NrX3Jvd3MgPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yOworICAgIH0KKyAgICBpbnZlcnNlX0RDVCA9IGNpbmZvLT5pZGN0LT5pbnZlcnNlX0RDVFtjaV07CisgICAgb3V0cHV0X3B0ciA9IG91dHB1dF9idWZbY2ldOworICAgIC8qIExvb3Agb3ZlciBhbGwgRENUIGJsb2NrcyB0byBiZSBwcm9jZXNzZWQuICovCisgICAgZm9yIChibG9ja19yb3cgPSAwOyBibG9ja19yb3cgPCBibG9ja19yb3dzOyBibG9ja19yb3crKykgeworICAgICAgYnVmZmVyX3B0ciA9IGJ1ZmZlcltibG9ja19yb3ddOworICAgICAgb3V0cHV0X2NvbCA9IDA7CisgICAgICBmb3IgKGJsb2NrX251bSA9IDA7IGJsb2NrX251bSA8IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrczsgYmxvY2tfbnVtKyspIHsKKwkoKmludmVyc2VfRENUKSAoY2luZm8sIGNvbXBwdHIsIChKQ09FRlBUUikgYnVmZmVyX3B0ciwKKwkJCW91dHB1dF9wdHIsIG91dHB1dF9jb2wpOworCWJ1ZmZlcl9wdHIrKzsKKwlvdXRwdXRfY29sICs9IGNvbXBwdHItPkRDVF9zY2FsZWRfc2l6ZTsKKyAgICAgIH0KKyAgICAgIG91dHB1dF9wdHIgKz0gY29tcHB0ci0+RENUX3NjYWxlZF9zaXplOworICAgIH0KKyAgfQorCisgIGlmICgrKyhjaW5mby0+b3V0cHV0X2lNQ1Vfcm93KSA8IGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MpCisgICAgcmV0dXJuIEpQRUdfUk9XX0NPTVBMRVRFRDsKKyAgcmV0dXJuIEpQRUdfU0NBTl9DT01QTEVURUQ7Cit9CisKKyNlbmRpZiAvKiBEX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQgKi8KKworCisjaWZkZWYgQkxPQ0tfU01PT1RISU5HX1NVUFBPUlRFRAorCisvKgorICogVGhpcyBjb2RlIGFwcGxpZXMgaW50ZXJibG9jayBzbW9vdGhpbmcgYXMgZGVzY3JpYmVkIGJ5IHNlY3Rpb24gSy44CisgKiBvZiB0aGUgSlBFRyBzdGFuZGFyZDogdGhlIGZpcnN0IDUgQUMgY29lZmZpY2llbnRzIGFyZSBlc3RpbWF0ZWQgZnJvbQorICogdGhlIERDIHZhbHVlcyBvZiBhIERDVCBibG9jayBhbmQgaXRzIDggbmVpZ2hib3JpbmcgYmxvY2tzLgorICogV2UgYXBwbHkgc21vb3RoaW5nIG9ubHkgZm9yIHByb2dyZXNzaXZlIEpQRUcgZGVjb2RpbmcsIGFuZCBvbmx5IGlmCisgKiB0aGUgY29lZmZpY2llbnRzIGl0IGNhbiBlc3RpbWF0ZSBhcmUgbm90IHlldCBrbm93biB0byBmdWxsIHByZWNpc2lvbi4KKyAqLworCisvKiBOYXR1cmFsLW9yZGVyIGFycmF5IHBvc2l0aW9ucyBvZiB0aGUgZmlyc3QgNSB6aWd6YWctb3JkZXIgY29lZmZpY2llbnRzICovCisjZGVmaW5lIFEwMV9QT1MgIDEKKyNkZWZpbmUgUTEwX1BPUyAgOAorI2RlZmluZSBRMjBfUE9TICAxNgorI2RlZmluZSBRMTFfUE9TICA5CisjZGVmaW5lIFEwMl9QT1MgIDIKKworLyoKKyAqIERldGVybWluZSB3aGV0aGVyIGJsb2NrIHNtb290aGluZyBpcyBhcHBsaWNhYmxlIGFuZCBzYWZlLgorICogV2UgYWxzbyBsYXRjaCB0aGUgY3VycmVudCBzdGF0ZXMgb2YgdGhlIGNvZWZfYml0c1tdIGVudHJpZXMgZm9yIHRoZQorICogQUMgY29lZmZpY2llbnRzOyBvdGhlcndpc2UsIGlmIHRoZSBpbnB1dCBzaWRlIG9mIHRoZSBkZWNvbXByZXNzb3IKKyAqIGFkdmFuY2VzIGludG8gYSBuZXcgc2Nhbiwgd2UgbWlnaHQgdGhpbmsgdGhlIGNvZWZmaWNpZW50cyBhcmUga25vd24KKyAqIG1vcmUgYWNjdXJhdGVseSB0aGFuIHRoZXkgcmVhbGx5IGFyZS4KKyAqLworCitMT0NBTChib29sZWFuKQorc21vb3RoaW5nX29rIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9jb2VmX3B0ciBjb2VmID0gKG15X2NvZWZfcHRyKSBjaW5mby0+Y29lZjsKKyAgYm9vbGVhbiBzbW9vdGhpbmdfdXNlZnVsID0gRkFMU0U7CisgIGludCBjaSwgY29lZmk7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIEpRVUFOVF9UQkwgKiBxdGFibGU7CisgIGludCAqIGNvZWZfYml0czsKKyAgaW50ICogY29lZl9iaXRzX2xhdGNoOworCisgIGlmICghIGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlIHx8IGNpbmZvLT5jb2VmX2JpdHMgPT0gTlVMTCkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgLyogQWxsb2NhdGUgbGF0Y2ggYXJlYSBpZiBub3QgYWxyZWFkeSBkb25lICovCisgIGlmIChjb2VmLT5jb2VmX2JpdHNfbGF0Y2ggPT0gTlVMTCkKKyAgICBjb2VmLT5jb2VmX2JpdHNfbGF0Y2ggPSAoaW50ICopCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCSAgY2luZm8tPm51bV9jb21wb25lbnRzICoKKwkJCQkgIChTQVZFRF9DT0VGUyAqIFNJWkVPRihpbnQpKSk7CisgIGNvZWZfYml0c19sYXRjaCA9IGNvZWYtPmNvZWZfYml0c19sYXRjaDsKKworICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOworICAgICAgIGNpKyssIGNvbXBwdHIrKykgeworICAgIC8qIEFsbCBjb21wb25lbnRzJyBxdWFudGl6YXRpb24gdmFsdWVzIG11c3QgYWxyZWFkeSBiZSBsYXRjaGVkLiAqLworICAgIGlmICgocXRhYmxlID0gY29tcHB0ci0+cXVhbnRfdGFibGUpID09IE5VTEwpCisgICAgICByZXR1cm4gRkFMU0U7CisgICAgLyogVmVyaWZ5IERDICYgZmlyc3QgNSBBQyBxdWFudGl6ZXJzIGFyZSBub256ZXJvIHRvIGF2b2lkIHplcm8tZGl2aWRlLiAqLworICAgIGlmIChxdGFibGUtPnF1YW50dmFsWzBdID09IDAgfHwKKwlxdGFibGUtPnF1YW50dmFsW1EwMV9QT1NdID09IDAgfHwKKwlxdGFibGUtPnF1YW50dmFsW1ExMF9QT1NdID09IDAgfHwKKwlxdGFibGUtPnF1YW50dmFsW1EyMF9QT1NdID09IDAgfHwKKwlxdGFibGUtPnF1YW50dmFsW1ExMV9QT1NdID09IDAgfHwKKwlxdGFibGUtPnF1YW50dmFsW1EwMl9QT1NdID09IDApCisgICAgICByZXR1cm4gRkFMU0U7CisgICAgLyogREMgdmFsdWVzIG11c3QgYmUgYXQgbGVhc3QgcGFydGx5IGtub3duIGZvciBhbGwgY29tcG9uZW50cy4gKi8KKyAgICBjb2VmX2JpdHMgPSBjaW5mby0+Y29lZl9iaXRzW2NpXTsKKyAgICBpZiAoY29lZl9iaXRzWzBdIDwgMCkKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICAvKiBCbG9jayBzbW9vdGhpbmcgaXMgaGVscGZ1bCBpZiBzb21lIEFDIGNvZWZmaWNpZW50cyByZW1haW4gaW5hY2N1cmF0ZS4gKi8KKyAgICBmb3IgKGNvZWZpID0gMTsgY29lZmkgPD0gNTsgY29lZmkrKykgeworICAgICAgY29lZl9iaXRzX2xhdGNoW2NvZWZpXSA9IGNvZWZfYml0c1tjb2VmaV07CisgICAgICBpZiAoY29lZl9iaXRzW2NvZWZpXSAhPSAwKQorCXNtb290aGluZ191c2VmdWwgPSBUUlVFOworICAgIH0KKyAgICBjb2VmX2JpdHNfbGF0Y2ggKz0gU0FWRURfQ09FRlM7CisgIH0KKworICByZXR1cm4gc21vb3RoaW5nX3VzZWZ1bDsKK30KKworCisvKgorICogVmFyaWFudCBvZiBkZWNvbXByZXNzX2RhdGEgZm9yIHVzZSB3aGVuIGRvaW5nIGJsb2NrIHNtb290aGluZy4KKyAqLworCitNRVRIT0RERUYoaW50KQorZGVjb21wcmVzc19zbW9vdGhfZGF0YSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBJTUFHRSBvdXRwdXRfYnVmKQoreworICBteV9jb2VmX3B0ciBjb2VmID0gKG15X2NvZWZfcHRyKSBjaW5mby0+Y29lZjsKKyAgSkRJTUVOU0lPTiBsYXN0X2lNQ1Vfcm93ID0gY2luZm8tPnRvdGFsX2lNQ1Vfcm93cyAtIDE7CisgIEpESU1FTlNJT04gYmxvY2tfbnVtLCBsYXN0X2Jsb2NrX2NvbHVtbjsKKyAgaW50IGNpLCBibG9ja19yb3csIGJsb2NrX3Jvd3MsIGFjY2Vzc19yb3dzOworICBKQkxPQ0tBUlJBWSBidWZmZXI7CisgIEpCTE9DS1JPVyBidWZmZXJfcHRyLCBwcmV2X2Jsb2NrX3JvdywgbmV4dF9ibG9ja19yb3c7CisgIEpTQU1QQVJSQVkgb3V0cHV0X3B0cjsKKyAgSkRJTUVOU0lPTiBvdXRwdXRfY29sOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworICBpbnZlcnNlX0RDVF9tZXRob2RfcHRyIGludmVyc2VfRENUOworICBib29sZWFuIGZpcnN0X3JvdywgbGFzdF9yb3c7CisgIEpCTE9DSyB3b3Jrc3BhY2U7CisgIGludCAqY29lZl9iaXRzOworICBKUVVBTlRfVEJMICpxdWFudHRibDsKKyAgSU5UMzIgUTAwLFEwMSxRMDIsUTEwLFExMSxRMjAsIG51bTsKKyAgaW50IERDMSxEQzIsREMzLERDNCxEQzUsREM2LERDNyxEQzgsREM5OworICBpbnQgQWwsIHByZWQ7CisKKyAgLyogRm9yY2Ugc29tZSBpbnB1dCB0byBiZSBkb25lIGlmIHdlIGFyZSBnZXR0aW5nIGFoZWFkIG9mIHRoZSBpbnB1dC4gKi8KKyAgd2hpbGUgKGNpbmZvLT5pbnB1dF9zY2FuX251bWJlciA8PSBjaW5mby0+b3V0cHV0X3NjYW5fbnVtYmVyICYmCisJICEgY2luZm8tPmlucHV0Y3RsLT5lb2lfcmVhY2hlZCkgeworICAgIGlmIChjaW5mby0+aW5wdXRfc2Nhbl9udW1iZXIgPT0gY2luZm8tPm91dHB1dF9zY2FuX251bWJlcikgeworICAgICAgLyogSWYgaW5wdXQgaXMgd29ya2luZyBvbiBjdXJyZW50IHNjYW4sIHdlIG9yZGluYXJpbHkgd2FudCBpdCB0bworICAgICAgICogaGF2ZSBjb21wbGV0ZWQgdGhlIGN1cnJlbnQgcm93LiAgQnV0IGlmIGlucHV0IHNjYW4gaXMgREMsCisgICAgICAgKiB3ZSB3YW50IGl0IHRvIGtlZXAgb25lIHJvdyBhaGVhZCBzbyB0aGF0IG5leHQgYmxvY2sgcm93J3MgREMKKyAgICAgICAqIHZhbHVlcyBhcmUgdXAgdG8gZGF0ZS4KKyAgICAgICAqLworICAgICAgSkRJTUVOU0lPTiBkZWx0YSA9IChjaW5mby0+U3MgPT0gMCkgPyAxIDogMDsKKyAgICAgIGlmIChjaW5mby0+aW5wdXRfaU1DVV9yb3cgPiBjaW5mby0+b3V0cHV0X2lNQ1Vfcm93K2RlbHRhKQorCWJyZWFrOworICAgIH0KKyAgICBpZiAoKCpjaW5mby0+aW5wdXRjdGwtPmNvbnN1bWVfaW5wdXQpKGNpbmZvKSA9PSBKUEVHX1NVU1BFTkRFRCkKKyAgICAgIHJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgfQorCisgIC8qIE9LLCBvdXRwdXQgZnJvbSB0aGUgdmlydHVhbCBhcnJheXMuICovCisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgLyogRG9uJ3QgYm90aGVyIHRvIElEQ1QgYW4gdW5pbnRlcmVzdGluZyBjb21wb25lbnQuICovCisgICAgaWYgKCEgY29tcHB0ci0+Y29tcG9uZW50X25lZWRlZCkKKyAgICAgIGNvbnRpbnVlOworICAgIC8qIENvdW50IG5vbi1kdW1teSBEQ1QgYmxvY2sgcm93cyBpbiB0aGlzIGlNQ1Ugcm93LiAqLworICAgIGlmIChjaW5mby0+b3V0cHV0X2lNQ1Vfcm93IDwgbGFzdF9pTUNVX3JvdykgeworICAgICAgYmxvY2tfcm93cyA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisgICAgICBhY2Nlc3Nfcm93cyA9IGJsb2NrX3Jvd3MgKiAyOyAvKiB0aGlzIGFuZCBuZXh0IGlNQ1Ugcm93ICovCisgICAgICBsYXN0X3JvdyA9IEZBTFNFOworICAgIH0gZWxzZSB7CisgICAgICAvKiBOQjogY2FuJ3QgdXNlIGxhc3Rfcm93X2hlaWdodCBoZXJlOyBpdCBpcyBpbnB1dC1zaWRlLWRlcGVuZGVudCEgKi8KKyAgICAgIGJsb2NrX3Jvd3MgPSAoaW50KSAoY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrcyAlIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpOworICAgICAgaWYgKGJsb2NrX3Jvd3MgPT0gMCkgYmxvY2tfcm93cyA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisgICAgICBhY2Nlc3Nfcm93cyA9IGJsb2NrX3Jvd3M7IC8qIHRoaXMgaU1DVSByb3cgb25seSAqLworICAgICAgbGFzdF9yb3cgPSBUUlVFOworICAgIH0KKyAgICAvKiBBbGlnbiB0aGUgdmlydHVhbCBidWZmZXIgZm9yIHRoaXMgY29tcG9uZW50LiAqLworICAgIGlmIChjaW5mby0+b3V0cHV0X2lNQ1Vfcm93ID4gMCkgeworICAgICAgYWNjZXNzX3Jvd3MgKz0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsgLyogcHJpb3IgaU1DVSByb3cgdG9vICovCisgICAgICBidWZmZXIgPSAoKmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKKwkoKGpfY29tbW9uX3B0cikgY2luZm8sIGNvZWYtPndob2xlX2ltYWdlW2NpXSwKKwkgKGNpbmZvLT5vdXRwdXRfaU1DVV9yb3cgLSAxKSAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCisJIChKRElNRU5TSU9OKSBhY2Nlc3Nfcm93cywgRkFMU0UpOworICAgICAgYnVmZmVyICs9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CS8qIHBvaW50IHRvIGN1cnJlbnQgaU1DVSByb3cgKi8KKyAgICAgIGZpcnN0X3JvdyA9IEZBTFNFOworICAgIH0gZWxzZSB7CisgICAgICBidWZmZXIgPSAoKmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X2JhcnJheSkKKwkoKGpfY29tbW9uX3B0cikgY2luZm8sIGNvZWYtPndob2xlX2ltYWdlW2NpXSwKKwkgKEpESU1FTlNJT04pIDAsIChKRElNRU5TSU9OKSBhY2Nlc3Nfcm93cywgRkFMU0UpOworICAgICAgZmlyc3Rfcm93ID0gVFJVRTsKKyAgICB9CisgICAgLyogRmV0Y2ggY29tcG9uZW50LWRlcGVuZGVudCBpbmZvICovCisgICAgY29lZl9iaXRzID0gY29lZi0+Y29lZl9iaXRzX2xhdGNoICsgKGNpICogU0FWRURfQ09FRlMpOworICAgIHF1YW50dGJsID0gY29tcHB0ci0+cXVhbnRfdGFibGU7CisgICAgUTAwID0gcXVhbnR0YmwtPnF1YW50dmFsWzBdOworICAgIFEwMSA9IHF1YW50dGJsLT5xdWFudHZhbFtRMDFfUE9TXTsKKyAgICBRMTAgPSBxdWFudHRibC0+cXVhbnR2YWxbUTEwX1BPU107CisgICAgUTIwID0gcXVhbnR0YmwtPnF1YW50dmFsW1EyMF9QT1NdOworICAgIFExMSA9IHF1YW50dGJsLT5xdWFudHZhbFtRMTFfUE9TXTsKKyAgICBRMDIgPSBxdWFudHRibC0+cXVhbnR2YWxbUTAyX1BPU107CisgICAgaW52ZXJzZV9EQ1QgPSBjaW5mby0+aWRjdC0+aW52ZXJzZV9EQ1RbY2ldOworICAgIG91dHB1dF9wdHIgPSBvdXRwdXRfYnVmW2NpXTsKKyAgICAvKiBMb29wIG92ZXIgYWxsIERDVCBibG9ja3MgdG8gYmUgcHJvY2Vzc2VkLiAqLworICAgIGZvciAoYmxvY2tfcm93ID0gMDsgYmxvY2tfcm93IDwgYmxvY2tfcm93czsgYmxvY2tfcm93KyspIHsKKyAgICAgIGJ1ZmZlcl9wdHIgPSBidWZmZXJbYmxvY2tfcm93XTsKKyAgICAgIGlmIChmaXJzdF9yb3cgJiYgYmxvY2tfcm93ID09IDApCisJcHJldl9ibG9ja19yb3cgPSBidWZmZXJfcHRyOworICAgICAgZWxzZQorCXByZXZfYmxvY2tfcm93ID0gYnVmZmVyW2Jsb2NrX3Jvdy0xXTsKKyAgICAgIGlmIChsYXN0X3JvdyAmJiBibG9ja19yb3cgPT0gYmxvY2tfcm93cy0xKQorCW5leHRfYmxvY2tfcm93ID0gYnVmZmVyX3B0cjsKKyAgICAgIGVsc2UKKwluZXh0X2Jsb2NrX3JvdyA9IGJ1ZmZlcltibG9ja19yb3crMV07CisgICAgICAvKiBXZSBmZXRjaCB0aGUgc3Vycm91bmRpbmcgREMgdmFsdWVzIHVzaW5nIGEgc2xpZGluZy1yZWdpc3RlciBhcHByb2FjaC4KKyAgICAgICAqIEluaXRpYWxpemUgYWxsIG5pbmUgaGVyZSBzbyBhcyB0byBkbyB0aGUgcmlnaHQgdGhpbmcgb24gbmFycm93IHBpY3MuCisgICAgICAgKi8KKyAgICAgIERDMSA9IERDMiA9IERDMyA9IChpbnQpIHByZXZfYmxvY2tfcm93WzBdWzBdOworICAgICAgREM0ID0gREM1ID0gREM2ID0gKGludCkgYnVmZmVyX3B0clswXVswXTsKKyAgICAgIERDNyA9IERDOCA9IERDOSA9IChpbnQpIG5leHRfYmxvY2tfcm93WzBdWzBdOworICAgICAgb3V0cHV0X2NvbCA9IDA7CisgICAgICBsYXN0X2Jsb2NrX2NvbHVtbiA9IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAtIDE7CisgICAgICBmb3IgKGJsb2NrX251bSA9IDA7IGJsb2NrX251bSA8PSBsYXN0X2Jsb2NrX2NvbHVtbjsgYmxvY2tfbnVtKyspIHsKKwkvKiBGZXRjaCBjdXJyZW50IERDVCBibG9jayBpbnRvIHdvcmtzcGFjZSBzbyB3ZSBjYW4gbW9kaWZ5IGl0LiAqLworCWpjb3B5X2Jsb2NrX3JvdyhidWZmZXJfcHRyLCAoSkJMT0NLUk9XKSB3b3Jrc3BhY2UsIChKRElNRU5TSU9OKSAxKTsKKwkvKiBVcGRhdGUgREMgdmFsdWVzICovCisJaWYgKGJsb2NrX251bSA8IGxhc3RfYmxvY2tfY29sdW1uKSB7CisJICBEQzMgPSAoaW50KSBwcmV2X2Jsb2NrX3Jvd1sxXVswXTsKKwkgIERDNiA9IChpbnQpIGJ1ZmZlcl9wdHJbMV1bMF07CisJICBEQzkgPSAoaW50KSBuZXh0X2Jsb2NrX3Jvd1sxXVswXTsKKwl9CisJLyogQ29tcHV0ZSBjb2VmZmljaWVudCBlc3RpbWF0ZXMgcGVyIEsuOC4KKwkgKiBBbiBlc3RpbWF0ZSBpcyBhcHBsaWVkIG9ubHkgaWYgY29lZmZpY2llbnQgaXMgc3RpbGwgemVybywKKwkgKiBhbmQgaXMgbm90IGtub3duIHRvIGJlIGZ1bGx5IGFjY3VyYXRlLgorCSAqLworCS8qIEFDMDEgKi8KKwlpZiAoKEFsPWNvZWZfYml0c1sxXSkgIT0gMCAmJiB3b3Jrc3BhY2VbMV0gPT0gMCkgeworCSAgbnVtID0gMzYgKiBRMDAgKiAoREM0IC0gREM2KTsKKwkgIGlmIChudW0gPj0gMCkgeworCSAgICBwcmVkID0gKGludCkgKCgoUTAxPDw3KSArIG51bSkgLyAoUTAxPDw4KSk7CisJICAgIGlmIChBbCA+IDAgJiYgcHJlZCA+PSAoMTw8QWwpKQorCSAgICAgIHByZWQgPSAoMTw8QWwpLTE7CisJICB9IGVsc2UgeworCSAgICBwcmVkID0gKGludCkgKCgoUTAxPDw3KSAtIG51bSkgLyAoUTAxPDw4KSk7CisJICAgIGlmIChBbCA+IDAgJiYgcHJlZCA+PSAoMTw8QWwpKQorCSAgICAgIHByZWQgPSAoMTw8QWwpLTE7CisJICAgIHByZWQgPSAtcHJlZDsKKwkgIH0KKwkgIHdvcmtzcGFjZVsxXSA9IChKQ09FRikgcHJlZDsKKwl9CisJLyogQUMxMCAqLworCWlmICgoQWw9Y29lZl9iaXRzWzJdKSAhPSAwICYmIHdvcmtzcGFjZVs4XSA9PSAwKSB7CisJICBudW0gPSAzNiAqIFEwMCAqIChEQzIgLSBEQzgpOworCSAgaWYgKG51bSA+PSAwKSB7CisJICAgIHByZWQgPSAoaW50KSAoKChRMTA8PDcpICsgbnVtKSAvIChRMTA8PDgpKTsKKwkgICAgaWYgKEFsID4gMCAmJiBwcmVkID49ICgxPDxBbCkpCisJICAgICAgcHJlZCA9ICgxPDxBbCktMTsKKwkgIH0gZWxzZSB7CisJICAgIHByZWQgPSAoaW50KSAoKChRMTA8PDcpIC0gbnVtKSAvIChRMTA8PDgpKTsKKwkgICAgaWYgKEFsID4gMCAmJiBwcmVkID49ICgxPDxBbCkpCisJICAgICAgcHJlZCA9ICgxPDxBbCktMTsKKwkgICAgcHJlZCA9IC1wcmVkOworCSAgfQorCSAgd29ya3NwYWNlWzhdID0gKEpDT0VGKSBwcmVkOworCX0KKwkvKiBBQzIwICovCisJaWYgKChBbD1jb2VmX2JpdHNbM10pICE9IDAgJiYgd29ya3NwYWNlWzE2XSA9PSAwKSB7CisJICBudW0gPSA5ICogUTAwICogKERDMiArIERDOCAtIDIqREM1KTsKKwkgIGlmIChudW0gPj0gMCkgeworCSAgICBwcmVkID0gKGludCkgKCgoUTIwPDw3KSArIG51bSkgLyAoUTIwPDw4KSk7CisJICAgIGlmIChBbCA+IDAgJiYgcHJlZCA+PSAoMTw8QWwpKQorCSAgICAgIHByZWQgPSAoMTw8QWwpLTE7CisJICB9IGVsc2UgeworCSAgICBwcmVkID0gKGludCkgKCgoUTIwPDw3KSAtIG51bSkgLyAoUTIwPDw4KSk7CisJICAgIGlmIChBbCA+IDAgJiYgcHJlZCA+PSAoMTw8QWwpKQorCSAgICAgIHByZWQgPSAoMTw8QWwpLTE7CisJICAgIHByZWQgPSAtcHJlZDsKKwkgIH0KKwkgIHdvcmtzcGFjZVsxNl0gPSAoSkNPRUYpIHByZWQ7CisJfQorCS8qIEFDMTEgKi8KKwlpZiAoKEFsPWNvZWZfYml0c1s0XSkgIT0gMCAmJiB3b3Jrc3BhY2VbOV0gPT0gMCkgeworCSAgbnVtID0gNSAqIFEwMCAqIChEQzEgLSBEQzMgLSBEQzcgKyBEQzkpOworCSAgaWYgKG51bSA+PSAwKSB7CisJICAgIHByZWQgPSAoaW50KSAoKChRMTE8PDcpICsgbnVtKSAvIChRMTE8PDgpKTsKKwkgICAgaWYgKEFsID4gMCAmJiBwcmVkID49ICgxPDxBbCkpCisJICAgICAgcHJlZCA9ICgxPDxBbCktMTsKKwkgIH0gZWxzZSB7CisJICAgIHByZWQgPSAoaW50KSAoKChRMTE8PDcpIC0gbnVtKSAvIChRMTE8PDgpKTsKKwkgICAgaWYgKEFsID4gMCAmJiBwcmVkID49ICgxPDxBbCkpCisJICAgICAgcHJlZCA9ICgxPDxBbCktMTsKKwkgICAgcHJlZCA9IC1wcmVkOworCSAgfQorCSAgd29ya3NwYWNlWzldID0gKEpDT0VGKSBwcmVkOworCX0KKwkvKiBBQzAyICovCisJaWYgKChBbD1jb2VmX2JpdHNbNV0pICE9IDAgJiYgd29ya3NwYWNlWzJdID09IDApIHsKKwkgIG51bSA9IDkgKiBRMDAgKiAoREM0ICsgREM2IC0gMipEQzUpOworCSAgaWYgKG51bSA+PSAwKSB7CisJICAgIHByZWQgPSAoaW50KSAoKChRMDI8PDcpICsgbnVtKSAvIChRMDI8PDgpKTsKKwkgICAgaWYgKEFsID4gMCAmJiBwcmVkID49ICgxPDxBbCkpCisJICAgICAgcHJlZCA9ICgxPDxBbCktMTsKKwkgIH0gZWxzZSB7CisJICAgIHByZWQgPSAoaW50KSAoKChRMDI8PDcpIC0gbnVtKSAvIChRMDI8PDgpKTsKKwkgICAgaWYgKEFsID4gMCAmJiBwcmVkID49ICgxPDxBbCkpCisJICAgICAgcHJlZCA9ICgxPDxBbCktMTsKKwkgICAgcHJlZCA9IC1wcmVkOworCSAgfQorCSAgd29ya3NwYWNlWzJdID0gKEpDT0VGKSBwcmVkOworCX0KKwkvKiBPSywgZG8gdGhlIElEQ1QgKi8KKwkoKmludmVyc2VfRENUKSAoY2luZm8sIGNvbXBwdHIsIChKQ09FRlBUUikgd29ya3NwYWNlLAorCQkJb3V0cHV0X3B0ciwgb3V0cHV0X2NvbCk7CisJLyogQWR2YW5jZSBmb3IgbmV4dCBjb2x1bW4gKi8KKwlEQzEgPSBEQzI7IERDMiA9IERDMzsKKwlEQzQgPSBEQzU7IERDNSA9IERDNjsKKwlEQzcgPSBEQzg7IERDOCA9IERDOTsKKwlidWZmZXJfcHRyKyssIHByZXZfYmxvY2tfcm93KyssIG5leHRfYmxvY2tfcm93Kys7CisJb3V0cHV0X2NvbCArPSBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemU7CisgICAgICB9CisgICAgICBvdXRwdXRfcHRyICs9IGNvbXBwdHItPkRDVF9zY2FsZWRfc2l6ZTsKKyAgICB9CisgIH0KKworICBpZiAoKysoY2luZm8tPm91dHB1dF9pTUNVX3JvdykgPCBjaW5mby0+dG90YWxfaU1DVV9yb3dzKQorICAgIHJldHVybiBKUEVHX1JPV19DT01QTEVURUQ7CisgIHJldHVybiBKUEVHX1NDQU5fQ09NUExFVEVEOworfQorCisjZW5kaWYgLyogQkxPQ0tfU01PT1RISU5HX1NVUFBPUlRFRCAqLworCisKKy8qCisgKiBJbml0aWFsaXplIGNvZWZmaWNpZW50IGJ1ZmZlciBjb250cm9sbGVyLgorICovCisKK0dMT0JBTCh2b2lkKQoramluaXRfZF9jb2VmX2NvbnRyb2xsZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gbmVlZF9mdWxsX2J1ZmZlcikKK3sKKyAgbXlfY29lZl9wdHIgY29lZjsKKworICBjb2VmID0gKG15X2NvZWZfcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJU0laRU9GKG15X2NvZWZfY29udHJvbGxlcikpOworICBjaW5mby0+Y29lZiA9IChzdHJ1Y3QganBlZ19kX2NvZWZfY29udHJvbGxlciAqKSBjb2VmOworICBjb2VmLT5wdWIuc3RhcnRfaW5wdXRfcGFzcyA9IHN0YXJ0X2lucHV0X3Bhc3M7CisgIGNvZWYtPnB1Yi5zdGFydF9vdXRwdXRfcGFzcyA9IHN0YXJ0X291dHB1dF9wYXNzOworI2lmZGVmIEJMT0NLX1NNT09USElOR19TVVBQT1JURUQKKyAgY29lZi0+Y29lZl9iaXRzX2xhdGNoID0gTlVMTDsKKyNlbmRpZgorCisgIC8qIENyZWF0ZSB0aGUgY29lZmZpY2llbnQgYnVmZmVyLiAqLworICBpZiAobmVlZF9mdWxsX2J1ZmZlcikgeworI2lmZGVmIERfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRAorICAgIC8qIEFsbG9jYXRlIGEgZnVsbC1pbWFnZSB2aXJ0dWFsIGFycmF5IGZvciBlYWNoIGNvbXBvbmVudCwgKi8KKyAgICAvKiBwYWRkZWQgdG8gYSBtdWx0aXBsZSBvZiBzYW1wX2ZhY3RvciBEQ1QgYmxvY2tzIGluIGVhY2ggZGlyZWN0aW9uLiAqLworICAgIC8qIE5vdGUgd2UgYXNrIGZvciBhIHByZS16ZXJvZWQgYXJyYXkuICovCisgICAgaW50IGNpLCBhY2Nlc3Nfcm93czsKKyAgICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgICAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKwkgY2krKywgY29tcHB0cisrKSB7CisgICAgICBhY2Nlc3Nfcm93cyA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisjaWZkZWYgQkxPQ0tfU01PT1RISU5HX1NVUFBPUlRFRAorICAgICAgLyogSWYgYmxvY2sgc21vb3RoaW5nIGNvdWxkIGJlIHVzZWQsIG5lZWQgYSBiaWdnZXIgd2luZG93ICovCisgICAgICBpZiAoY2luZm8tPnByb2dyZXNzaXZlX21vZGUpCisJYWNjZXNzX3Jvd3MgKj0gMzsKKyNlbmRpZgorICAgICAgY29lZi0+d2hvbGVfaW1hZ2VbY2ldID0gKCpjaW5mby0+bWVtLT5yZXF1ZXN0X3ZpcnRfYmFycmF5KQorCSgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsIFRSVUUsCisJIChKRElNRU5TSU9OKSBqcm91bmRfdXAoKGxvbmcpIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcywKKwkJCQkobG9uZykgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciksCisJIChKRElNRU5TSU9OKSBqcm91bmRfdXAoKGxvbmcpIGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3MsCisJCQkJKGxvbmcpIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpLAorCSAoSkRJTUVOU0lPTikgYWNjZXNzX3Jvd3MpOworICAgIH0KKyAgICBjb2VmLT5wdWIuY29uc3VtZV9kYXRhID0gY29uc3VtZV9kYXRhOworICAgIGNvZWYtPnB1Yi5kZWNvbXByZXNzX2RhdGEgPSBkZWNvbXByZXNzX2RhdGE7CisgICAgY29lZi0+cHViLmNvZWZfYXJyYXlzID0gY29lZi0+d2hvbGVfaW1hZ2U7IC8qIGxpbmsgdG8gdmlydHVhbCBhcnJheXMgKi8KKyNlbHNlCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOworI2VuZGlmCisgIH0gZWxzZSB7CisgICAgLyogV2Ugb25seSBuZWVkIGEgc2luZ2xlLU1DVSBidWZmZXIuICovCisgICAgSkJMT0NLUk9XIGJ1ZmZlcjsKKyAgICBpbnQgaTsKKworICAgIGJ1ZmZlciA9IChKQkxPQ0tST1cpCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX2xhcmdlKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCSAgRF9NQVhfQkxPQ0tTX0lOX01DVSAqIFNJWkVPRihKQkxPQ0spKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgRF9NQVhfQkxPQ0tTX0lOX01DVTsgaSsrKSB7CisgICAgICBjb2VmLT5NQ1VfYnVmZmVyW2ldID0gYnVmZmVyICsgaTsKKyAgICB9CisgICAgY29lZi0+cHViLmNvbnN1bWVfZGF0YSA9IGR1bW15X2NvbnN1bWVfZGF0YTsKKyAgICBjb2VmLT5wdWIuZGVjb21wcmVzc19kYXRhID0gZGVjb21wcmVzc19vbmVwYXNzOworICAgIGNvZWYtPnB1Yi5jb2VmX2FycmF5cyA9IE5VTEw7IC8qIGZsYWcgZm9yIG5vIHZpcnR1YWwgYXJyYXlzICovCisgIH0KK30KKworI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZGNvbG9yLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZGNvbG9yLmMKaW5kZXggNWNkMzVmNS4uYzE3MzI5YiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamRjb2xvci5jCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pkY29sb3IuYwpAQCAtMSwzOTkgKzEsMzk5IEBACi0jaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQ0KLS8qDQotICogamRjb2xvci5jDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4NCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuDQotICoNCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgb3V0cHV0IGNvbG9yc3BhY2UgY29udmVyc2lvbiByb3V0aW5lcy4NCi0gKi8NCi0NCi0jZGVmaW5lIEpQRUdfSU5URVJOQUxTDQotI2luY2x1ZGUgImppbmNsdWRlLmgiDQotI2luY2x1ZGUgImpwZWdsaWIuaCINCi0NCi0NCi0vKiBQcml2YXRlIHN1Ym9iamVjdCAqLw0KLQ0KLXR5cGVkZWYgc3RydWN0IHsNCi0gIHN0cnVjdCBqcGVnX2NvbG9yX2RlY29udmVydGVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLw0KLQ0KLSAgLyogUHJpdmF0ZSBzdGF0ZSBmb3IgWUNDLT5SR0IgY29udmVyc2lvbiAqLw0KLSAgaW50ICogQ3Jfcl90YWI7CQkvKiA9PiB0YWJsZSBmb3IgQ3IgdG8gUiBjb252ZXJzaW9uICovDQotICBpbnQgKiBDYl9iX3RhYjsJCS8qID0+IHRhYmxlIGZvciBDYiB0byBCIGNvbnZlcnNpb24gKi8NCi0gIElOVDMyICogQ3JfZ190YWI7CQkvKiA9PiB0YWJsZSBmb3IgQ3IgdG8gRyBjb252ZXJzaW9uICovDQotICBJTlQzMiAqIENiX2dfdGFiOwkJLyogPT4gdGFibGUgZm9yIENiIHRvIEcgY29udmVyc2lvbiAqLw0KLX0gbXlfY29sb3JfZGVjb252ZXJ0ZXI7DQotDQotdHlwZWRlZiBteV9jb2xvcl9kZWNvbnZlcnRlciAqIG15X2Njb252ZXJ0X3B0cjsNCi0NCi0NCi0vKioqKioqKioqKioqKioqKiBZQ2JDciAtPiBSR0IgY29udmVyc2lvbjogbW9zdCBjb21tb24gY2FzZSAqKioqKioqKioqKioqKi8NCi0NCi0vKg0KLSAqIFlDYkNyIGlzIGRlZmluZWQgcGVyIENDSVIgNjAxLTEsIGV4Y2VwdCB0aGF0IENiIGFuZCBDciBhcmUNCi0gKiBub3JtYWxpemVkIHRvIHRoZSByYW5nZSAwLi5NQVhKU0FNUExFIHJhdGhlciB0aGFuIC0wLjUgLi4gMC41Lg0KLSAqIFRoZSBjb252ZXJzaW9uIGVxdWF0aW9ucyB0byBiZSBpbXBsZW1lbnRlZCBhcmUgdGhlcmVmb3JlDQotICoJUiA9IFkgICAgICAgICAgICAgICAgKyAxLjQwMjAwICogQ3INCi0gKglHID0gWSAtIDAuMzQ0MTQgKiBDYiAtIDAuNzE0MTQgKiBDcg0KLSAqCUIgPSBZICsgMS43NzIwMCAqIENiDQotICogd2hlcmUgQ2IgYW5kIENyIHJlcHJlc2VudCB0aGUgaW5jb21pbmcgdmFsdWVzIGxlc3MgQ0VOVEVSSlNBTVBMRS4NCi0gKiAoVGhlc2UgbnVtYmVycyBhcmUgZGVyaXZlZCBmcm9tIFRJRkYgNi4wIHNlY3Rpb24gMjEsIGRhdGVkIDMtSnVuZS05Mi4pDQotICoNCi0gKiBUbyBhdm9pZCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLCB3ZSByZXByZXNlbnQgdGhlIGZyYWN0aW9uYWwgY29uc3RhbnRzDQotICogYXMgaW50ZWdlcnMgc2NhbGVkIHVwIGJ5IDJeMTYgKGFib3V0IDQgZGlnaXRzIHByZWNpc2lvbik7IHdlIGhhdmUgdG8gZGl2aWRlDQotICogdGhlIHByb2R1Y3RzIGJ5IDJeMTYsIHdpdGggYXBwcm9wcmlhdGUgcm91bmRpbmcsIHRvIGdldCB0aGUgY29ycmVjdCBhbnN3ZXIuDQotICogTm90aWNlIHRoYXQgWSwgYmVpbmcgYW4gaW50ZWdyYWwgaW5wdXQsIGRvZXMgbm90IGNvbnRyaWJ1dGUgYW55IGZyYWN0aW9uDQotICogc28gaXQgbmVlZCBub3QgcGFydGljaXBhdGUgaW4gdGhlIHJvdW5kaW5nLg0KLSAqDQotICogRm9yIGV2ZW4gbW9yZSBzcGVlZCwgd2UgYXZvaWQgZG9pbmcgYW55IG11bHRpcGxpY2F0aW9ucyBpbiB0aGUgaW5uZXIgbG9vcA0KLSAqIGJ5IHByZWNhbGN1bGF0aW5nIHRoZSBjb25zdGFudHMgdGltZXMgQ2IgYW5kIENyIGZvciBhbGwgcG9zc2libGUgdmFsdWVzLg0KLSAqIEZvciA4LWJpdCBKU0FNUExFcyB0aGlzIGlzIHZlcnkgcmVhc29uYWJsZSAob25seSAyNTYgZW50cmllcyBwZXIgdGFibGUpOw0KLSAqIGZvciAxMi1iaXQgc2FtcGxlcyBpdCBpcyBzdGlsbCBhY2NlcHRhYmxlLiAgSXQncyBub3QgdmVyeSByZWFzb25hYmxlIGZvcg0KLSAqIDE2LWJpdCBzYW1wbGVzLCBidXQgaWYgeW91IHdhbnQgbG9zc2xlc3Mgc3RvcmFnZSB5b3Ugc2hvdWxkbid0IGJlIGNoYW5naW5nDQotICogY29sb3JzcGFjZSBhbnl3YXkuDQotICogVGhlIENyPT5SIGFuZCBDYj0+QiB2YWx1ZXMgY2FuIGJlIHJvdW5kZWQgdG8gaW50ZWdlcnMgaW4gYWR2YW5jZTsgdGhlDQotICogdmFsdWVzIGZvciB0aGUgRyBjYWxjdWxhdGlvbiBhcmUgbGVmdCBzY2FsZWQgdXAsIHNpbmNlIHdlIG11c3QgYWRkIHRoZW0NCi0gKiB0b2dldGhlciBiZWZvcmUgcm91bmRpbmcuDQotICovDQotDQotI2RlZmluZSBTQ0FMRUJJVFMJMTYJLyogc3BlZWRpZXN0IHJpZ2h0LXNoaWZ0IG9uIHNvbWUgbWFjaGluZXMgKi8NCi0jZGVmaW5lIE9ORV9IQUxGCSgoSU5UMzIpIDEgPDwgKFNDQUxFQklUUy0xKSkNCi0jZGVmaW5lIEZJWCh4KQkJKChJTlQzMikgKCh4KSAqICgxTDw8U0NBTEVCSVRTKSArIDAuNSkpDQotDQotDQotLyoNCi0gKiBJbml0aWFsaXplIHRhYmxlcyBmb3IgWUNDLT5SR0IgY29sb3JzcGFjZSBjb252ZXJzaW9uLg0KLSAqLw0KLQ0KLUxPQ0FMKHZvaWQpDQotYnVpbGRfeWNjX3JnYl90YWJsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBteV9jY29udmVydF9wdHIgY2NvbnZlcnQgPSAobXlfY2NvbnZlcnRfcHRyKSBjaW5mby0+Y2NvbnZlcnQ7DQotICBpbnQgaTsNCi0gIElOVDMyIHg7DQotICBTSElGVF9URU1QUw0KLQ0KLSAgY2NvbnZlcnQtPkNyX3JfdGFiID0gKGludCAqKQ0KLSAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQkoTUFYSlNBTVBMRSsxKSAqIFNJWkVPRihpbnQpKTsNCi0gIGNjb252ZXJ0LT5DYl9iX3RhYiA9IChpbnQgKikNCi0gICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwNCi0JCQkJKE1BWEpTQU1QTEUrMSkgKiBTSVpFT0YoaW50KSk7DQotICBjY29udmVydC0+Q3JfZ190YWIgPSAoSU5UMzIgKikNCi0gICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwNCi0JCQkJKE1BWEpTQU1QTEUrMSkgKiBTSVpFT0YoSU5UMzIpKTsNCi0gIGNjb252ZXJ0LT5DYl9nX3RhYiA9IChJTlQzMiAqKQ0KLSAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQkoTUFYSlNBTVBMRSsxKSAqIFNJWkVPRihJTlQzMikpOw0KLQ0KLSAgZm9yIChpID0gMCwgeCA9IC1DRU5URVJKU0FNUExFOyBpIDw9IE1BWEpTQU1QTEU7IGkrKywgeCsrKSB7DQotICAgIC8qIGkgaXMgdGhlIGFjdHVhbCBpbnB1dCBwaXhlbCB2YWx1ZSwgaW4gdGhlIHJhbmdlIDAuLk1BWEpTQU1QTEUgKi8NCi0gICAgLyogVGhlIENiIG9yIENyIHZhbHVlIHdlIGFyZSB0aGlua2luZyBvZiBpcyB4ID0gaSAtIENFTlRFUkpTQU1QTEUgKi8NCi0gICAgLyogQ3I9PlIgdmFsdWUgaXMgbmVhcmVzdCBpbnQgdG8gMS40MDIwMCAqIHggKi8NCi0gICAgY2NvbnZlcnQtPkNyX3JfdGFiW2ldID0gKGludCkNCi0JCSAgICBSSUdIVF9TSElGVChGSVgoMS40MDIwMCkgKiB4ICsgT05FX0hBTEYsIFNDQUxFQklUUyk7DQotICAgIC8qIENiPT5CIHZhbHVlIGlzIG5lYXJlc3QgaW50IHRvIDEuNzcyMDAgKiB4ICovDQotICAgIGNjb252ZXJ0LT5DYl9iX3RhYltpXSA9IChpbnQpDQotCQkgICAgUklHSFRfU0hJRlQoRklYKDEuNzcyMDApICogeCArIE9ORV9IQUxGLCBTQ0FMRUJJVFMpOw0KLSAgICAvKiBDcj0+RyB2YWx1ZSBpcyBzY2FsZWQtdXAgLTAuNzE0MTQgKiB4ICovDQotICAgIGNjb252ZXJ0LT5Dcl9nX3RhYltpXSA9ICgtIEZJWCgwLjcxNDE0KSkgKiB4Ow0KLSAgICAvKiBDYj0+RyB2YWx1ZSBpcyBzY2FsZWQtdXAgLTAuMzQ0MTQgKiB4ICovDQotICAgIC8qIFdlIGFsc28gYWRkIGluIE9ORV9IQUxGIHNvIHRoYXQgbmVlZCBub3QgZG8gaXQgaW4gaW5uZXIgbG9vcCAqLw0KLSAgICBjY29udmVydC0+Q2JfZ190YWJbaV0gPSAoLSBGSVgoMC4zNDQxNCkpICogeCArIE9ORV9IQUxGOw0KLSAgfQ0KLX0NCi0NCi0NCi0vKg0KLSAqIENvbnZlcnQgc29tZSByb3dzIG9mIHNhbXBsZXMgdG8gdGhlIG91dHB1dCBjb2xvcnNwYWNlLg0KLSAqDQotICogTm90ZSB0aGF0IHdlIGNoYW5nZSBmcm9tIG5vbmludGVybGVhdmVkLCBvbmUtcGxhbmUtcGVyLWNvbXBvbmVudCBmb3JtYXQNCi0gKiB0byBpbnRlcmxlYXZlZC1waXhlbCBmb3JtYXQuICBUaGUgb3V0cHV0IGJ1ZmZlciBpcyB0aGVyZWZvcmUgdGhyZWUgdGltZXMNCi0gKiBhcyB3aWRlIGFzIHRoZSBpbnB1dCBidWZmZXIuDQotICogQSBzdGFydGluZyByb3cgb2Zmc2V0IGlzIHByb3ZpZGVkIG9ubHkgZm9yIHRoZSBpbnB1dCBidWZmZXIuICBUaGUgY2FsbGVyDQotICogY2FuIGVhc2lseSBhZGp1c3QgdGhlIHBhc3NlZCBvdXRwdXRfYnVmIHZhbHVlIHRvIGFjY29tbW9kYXRlIGFueSByb3cNCi0gKiBvZmZzZXQgcmVxdWlyZWQgb24gdGhhdCBzaWRlLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXljY19yZ2JfY29udmVydCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCSBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csDQotCQkgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpDQotew0KLSAgbXlfY2NvbnZlcnRfcHRyIGNjb252ZXJ0ID0gKG15X2Njb252ZXJ0X3B0cikgY2luZm8tPmNjb252ZXJ0Ow0KLSAgcmVnaXN0ZXIgaW50IHksIGNiLCBjcjsNCi0gIHJlZ2lzdGVyIEpTQU1QUk9XIG91dHB0cjsNCi0gIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyMCwgaW5wdHIxLCBpbnB0cjI7DQotICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsNCi0gIEpESU1FTlNJT04gbnVtX2NvbHMgPSBjaW5mby0+b3V0cHV0X3dpZHRoOw0KLSAgLyogY29weSB0aGVzZSBwb2ludGVycyBpbnRvIHJlZ2lzdGVycyBpZiBwb3NzaWJsZSAqLw0KLSAgcmVnaXN0ZXIgSlNBTVBMRSAqIHJhbmdlX2xpbWl0ID0gY2luZm8tPnNhbXBsZV9yYW5nZV9saW1pdDsNCi0gIHJlZ2lzdGVyIGludCAqIENycnRhYiA9IGNjb252ZXJ0LT5Dcl9yX3RhYjsNCi0gIHJlZ2lzdGVyIGludCAqIENiYnRhYiA9IGNjb252ZXJ0LT5DYl9iX3RhYjsNCi0gIHJlZ2lzdGVyIElOVDMyICogQ3JndGFiID0gY2NvbnZlcnQtPkNyX2dfdGFiOw0KLSAgcmVnaXN0ZXIgSU5UMzIgKiBDYmd0YWIgPSBjY29udmVydC0+Q2JfZ190YWI7DQotICBTSElGVF9URU1QUw0KLQ0KLSAgd2hpbGUgKC0tbnVtX3Jvd3MgPj0gMCkgew0KLSAgICBpbnB0cjAgPSBpbnB1dF9idWZbMF1baW5wdXRfcm93XTsNCi0gICAgaW5wdHIxID0gaW5wdXRfYnVmWzFdW2lucHV0X3Jvd107DQotICAgIGlucHRyMiA9IGlucHV0X2J1ZlsyXVtpbnB1dF9yb3ddOw0KLSAgICBpbnB1dF9yb3crKzsNCi0gICAgb3V0cHRyID0gKm91dHB1dF9idWYrKzsNCi0gICAgZm9yIChjb2wgPSAwOyBjb2wgPCBudW1fY29sczsgY29sKyspIHsNCi0gICAgICB5ICA9IEdFVEpTQU1QTEUoaW5wdHIwW2NvbF0pOw0KLSAgICAgIGNiID0gR0VUSlNBTVBMRShpbnB0cjFbY29sXSk7DQotICAgICAgY3IgPSBHRVRKU0FNUExFKGlucHRyMltjb2xdKTsNCi0gICAgICAvKiBSYW5nZS1saW1pdGluZyBpcyBlc3NlbnRpYWwgZHVlIHRvIG5vaXNlIGludHJvZHVjZWQgYnkgRENUIGxvc3Nlcy4gKi8NCi0gICAgICBvdXRwdHJbUkdCX1JFRF0gPSAgIHJhbmdlX2xpbWl0W3kgKyBDcnJ0YWJbY3JdXTsNCi0gICAgICBvdXRwdHJbUkdCX0dSRUVOXSA9IHJhbmdlX2xpbWl0W3kgKw0KLQkJCSAgICAgICgoaW50KSBSSUdIVF9TSElGVChDYmd0YWJbY2JdICsgQ3JndGFiW2NyXSwNCi0JCQkJCQkgU0NBTEVCSVRTKSldOw0KLSAgICAgIG91dHB0cltSR0JfQkxVRV0gPSAgcmFuZ2VfbGltaXRbeSArIENiYnRhYltjYl1dOw0KLSAgICAgIG91dHB0ciArPSBSR0JfUElYRUxTSVpFOw0KLSAgICB9DQotICB9DQotfQ0KLQ0KLQ0KLS8qKioqKioqKioqKioqKioqIENhc2VzIG90aGVyIHRoYW4gWUNiQ3IgLT4gUkdCICoqKioqKioqKioqKioqLw0KLQ0KLQ0KLS8qDQotICogQ29sb3IgY29udmVyc2lvbiBmb3Igbm8gY29sb3JzcGFjZSBjaGFuZ2U6IGp1c3QgY29weSB0aGUgZGF0YSwNCi0gKiBjb252ZXJ0aW5nIGZyb20gc2VwYXJhdGUtcGxhbmVzIHRvIGludGVybGVhdmVkIHJlcHJlc2VudGF0aW9uLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLW51bGxfY29udmVydCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LA0KLQkgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykNCi17DQotICByZWdpc3RlciBKU0FNUFJPVyBpbnB0ciwgb3V0cHRyOw0KLSAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb3VudDsNCi0gIHJlZ2lzdGVyIGludCBudW1fY29tcG9uZW50cyA9IGNpbmZvLT5udW1fY29tcG9uZW50czsNCi0gIEpESU1FTlNJT04gbnVtX2NvbHMgPSBjaW5mby0+b3V0cHV0X3dpZHRoOw0KLSAgaW50IGNpOw0KLQ0KLSAgd2hpbGUgKC0tbnVtX3Jvd3MgPj0gMCkgew0KLSAgICBmb3IgKGNpID0gMDsgY2kgPCBudW1fY29tcG9uZW50czsgY2krKykgew0KLSAgICAgIGlucHRyID0gaW5wdXRfYnVmW2NpXVtpbnB1dF9yb3ddOw0KLSAgICAgIG91dHB0ciA9IG91dHB1dF9idWZbMF0gKyBjaTsNCi0gICAgICBmb3IgKGNvdW50ID0gbnVtX2NvbHM7IGNvdW50ID4gMDsgY291bnQtLSkgew0KLQkqb3V0cHRyID0gKmlucHRyKys7CS8qIG5lZWRuJ3QgYm90aGVyIHdpdGggR0VUSlNBTVBMRSgpIGhlcmUgKi8NCi0Jb3V0cHRyICs9IG51bV9jb21wb25lbnRzOw0KLSAgICAgIH0NCi0gICAgfQ0KLSAgICBpbnB1dF9yb3crKzsNCi0gICAgb3V0cHV0X2J1ZisrOw0KLSAgfQ0KLX0NCi0NCi0NCi0vKg0KLSAqIENvbG9yIGNvbnZlcnNpb24gZm9yIGdyYXlzY2FsZToganVzdCBjb3B5IHRoZSBkYXRhLg0KLSAqIFRoaXMgYWxzbyB3b3JrcyBmb3IgWUNiQ3IgLT4gZ3JheXNjYWxlIGNvbnZlcnNpb24sIGluIHdoaWNoDQotICogd2UganVzdCBjb3B5IHRoZSBZIChsdW1pbmFuY2UpIGNvbXBvbmVudCBhbmQgaWdub3JlIGNocm9taW5hbmNlLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLWdyYXlzY2FsZV9jb252ZXJ0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LA0KLQkJICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpDQotew0KLSAgamNvcHlfc2FtcGxlX3Jvd3MoaW5wdXRfYnVmWzBdLCAoaW50KSBpbnB1dF9yb3csIG91dHB1dF9idWYsIDAsDQotCQkgICAgbnVtX3Jvd3MsIGNpbmZvLT5vdXRwdXRfd2lkdGgpOw0KLX0NCi0NCi0NCi0vKg0KLSAqIENvbnZlcnQgZ3JheXNjYWxlIHRvIFJHQjoganVzdCBkdXBsaWNhdGUgdGhlIGdyYXlsZXZlbCB0aHJlZSB0aW1lcy4NCi0gKiBUaGlzIGlzIHByb3ZpZGVkIHRvIHN1cHBvcnQgYXBwbGljYXRpb25zIHRoYXQgZG9uJ3Qgd2FudCB0byBjb3BlDQotICogd2l0aCBncmF5c2NhbGUgYXMgYSBzZXBhcmF0ZSBjYXNlLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLWdyYXlfcmdiX2NvbnZlcnQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sDQotCQkgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywNCi0JCSAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpDQotew0KLSAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHIsIG91dHB0cjsNCi0gIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sOw0KLSAgSkRJTUVOU0lPTiBudW1fY29scyA9IGNpbmZvLT5vdXRwdXRfd2lkdGg7DQotDQotICB3aGlsZSAoLS1udW1fcm93cyA+PSAwKSB7DQotICAgIGlucHRyID0gaW5wdXRfYnVmWzBdW2lucHV0X3JvdysrXTsNCi0gICAgb3V0cHRyID0gKm91dHB1dF9idWYrKzsNCi0gICAgZm9yIChjb2wgPSAwOyBjb2wgPCBudW1fY29sczsgY29sKyspIHsNCi0gICAgICAvKiBXZSBjYW4gZGlzcGVuc2Ugd2l0aCBHRVRKU0FNUExFKCkgaGVyZSAqLw0KLSAgICAgIG91dHB0cltSR0JfUkVEXSA9IG91dHB0cltSR0JfR1JFRU5dID0gb3V0cHRyW1JHQl9CTFVFXSA9IGlucHRyW2NvbF07DQotICAgICAgb3V0cHRyICs9IFJHQl9QSVhFTFNJWkU7DQotICAgIH0NCi0gIH0NCi19DQotDQotDQotLyoNCi0gKiBBZG9iZS1zdHlsZSBZQ0NLLT5DTVlLIGNvbnZlcnNpb24uDQotICogV2UgY29udmVydCBZQ2JDciB0byBSPTEtQywgRz0xLU0sIGFuZCBCPTEtWSB1c2luZyB0aGUgc2FtZQ0KLSAqIGNvbnZlcnNpb24gYXMgYWJvdmUsIHdoaWxlIHBhc3NpbmcgSyAoYmxhY2spIHVuY2hhbmdlZC4NCi0gKiBXZSBhc3N1bWUgYnVpbGRfeWNjX3JnYl90YWJsZSBoYXMgYmVlbiBjYWxsZWQuDQotICovDQotDQotTUVUSE9EREVGKHZvaWQpDQoteWNja19jbXlrX2NvbnZlcnQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sDQotCQkgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csDQotCQkgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykNCi17DQotICBteV9jY29udmVydF9wdHIgY2NvbnZlcnQgPSAobXlfY2NvbnZlcnRfcHRyKSBjaW5mby0+Y2NvbnZlcnQ7DQotICByZWdpc3RlciBpbnQgeSwgY2IsIGNyOw0KLSAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHRyOw0KLSAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHIwLCBpbnB0cjEsIGlucHRyMiwgaW5wdHIzOw0KLSAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7DQotICBKRElNRU5TSU9OIG51bV9jb2xzID0gY2luZm8tPm91dHB1dF93aWR0aDsNCi0gIC8qIGNvcHkgdGhlc2UgcG9pbnRlcnMgaW50byByZWdpc3RlcnMgaWYgcG9zc2libGUgKi8NCi0gIHJlZ2lzdGVyIEpTQU1QTEUgKiByYW5nZV9saW1pdCA9IGNpbmZvLT5zYW1wbGVfcmFuZ2VfbGltaXQ7DQotICByZWdpc3RlciBpbnQgKiBDcnJ0YWIgPSBjY29udmVydC0+Q3Jfcl90YWI7DQotICByZWdpc3RlciBpbnQgKiBDYmJ0YWIgPSBjY29udmVydC0+Q2JfYl90YWI7DQotICByZWdpc3RlciBJTlQzMiAqIENyZ3RhYiA9IGNjb252ZXJ0LT5Dcl9nX3RhYjsNCi0gIHJlZ2lzdGVyIElOVDMyICogQ2JndGFiID0gY2NvbnZlcnQtPkNiX2dfdGFiOw0KLSAgU0hJRlRfVEVNUFMNCi0NCi0gIHdoaWxlICgtLW51bV9yb3dzID49IDApIHsNCi0gICAgaW5wdHIwID0gaW5wdXRfYnVmWzBdW2lucHV0X3Jvd107DQotICAgIGlucHRyMSA9IGlucHV0X2J1ZlsxXVtpbnB1dF9yb3ddOw0KLSAgICBpbnB0cjIgPSBpbnB1dF9idWZbMl1baW5wdXRfcm93XTsNCi0gICAgaW5wdHIzID0gaW5wdXRfYnVmWzNdW2lucHV0X3Jvd107DQotICAgIGlucHV0X3JvdysrOw0KLSAgICBvdXRwdHIgPSAqb3V0cHV0X2J1ZisrOw0KLSAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IG51bV9jb2xzOyBjb2wrKykgew0KLSAgICAgIHkgID0gR0VUSlNBTVBMRShpbnB0cjBbY29sXSk7DQotICAgICAgY2IgPSBHRVRKU0FNUExFKGlucHRyMVtjb2xdKTsNCi0gICAgICBjciA9IEdFVEpTQU1QTEUoaW5wdHIyW2NvbF0pOw0KLSAgICAgIC8qIFJhbmdlLWxpbWl0aW5nIGlzIGVzc2VudGlhbCBkdWUgdG8gbm9pc2UgaW50cm9kdWNlZCBieSBEQ1QgbG9zc2VzLiAqLw0KLSAgICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0W01BWEpTQU1QTEUgLSAoeSArIENycnRhYltjcl0pXTsJLyogcmVkICovDQotICAgICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbTUFYSlNBTVBMRSAtICh5ICsJCQkvKiBncmVlbiAqLw0KLQkJCSAgICAgICgoaW50KSBSSUdIVF9TSElGVChDYmd0YWJbY2JdICsgQ3JndGFiW2NyXSwNCi0JCQkJCQkgU0NBTEVCSVRTKSkpXTsNCi0gICAgICBvdXRwdHJbMl0gPSByYW5nZV9saW1pdFtNQVhKU0FNUExFIC0gKHkgKyBDYmJ0YWJbY2JdKV07CS8qIGJsdWUgKi8NCi0gICAgICAvKiBLIHBhc3NlcyB0aHJvdWdoIHVuY2hhbmdlZCAqLw0KLSAgICAgIG91dHB0clszXSA9IGlucHRyM1tjb2xdOwkvKiBkb24ndCBuZWVkIEdFVEpTQU1QTEUgaGVyZSAqLw0KLSAgICAgIG91dHB0ciArPSA0Ow0KLSAgICB9DQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogRW1wdHkgbWV0aG9kIGZvciBzdGFydF9wYXNzLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXN0YXJ0X3Bhc3NfZGNvbG9yIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIC8qIG5vIHdvcmsgbmVlZGVkICovDQotfQ0KLQ0KLQ0KLS8qDQotICogTW9kdWxlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIG91dHB1dCBjb2xvcnNwYWNlIGNvbnZlcnNpb24uDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotamluaXRfY29sb3JfZGVjb252ZXJ0ZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAgbXlfY2NvbnZlcnRfcHRyIGNjb252ZXJ0Ow0KLSAgaW50IGNpOw0KLQ0KLSAgY2NvbnZlcnQgPSAobXlfY2NvbnZlcnRfcHRyKQ0KLSAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQlTSVpFT0YobXlfY29sb3JfZGVjb252ZXJ0ZXIpKTsNCi0gIGNpbmZvLT5jY29udmVydCA9IChzdHJ1Y3QganBlZ19jb2xvcl9kZWNvbnZlcnRlciAqKSBjY29udmVydDsNCi0gIGNjb252ZXJ0LT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfZGNvbG9yOw0KLQ0KLSAgLyogTWFrZSBzdXJlIG51bV9jb21wb25lbnRzIGFncmVlcyB3aXRoIGpwZWdfY29sb3Jfc3BhY2UgKi8NCi0gIHN3aXRjaCAoY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UpIHsNCi0gIGNhc2UgSkNTX0dSQVlTQ0FMRToNCi0gICAgaWYgKGNpbmZvLT5udW1fY29tcG9uZW50cyAhPSAxKQ0KLSAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0pfQ09MT1JTUEFDRSk7DQotICAgIGJyZWFrOw0KLQ0KLSAgY2FzZSBKQ1NfUkdCOg0KLSAgY2FzZSBKQ1NfWUNiQ3I6DQotICAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgIT0gMykNCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9KX0NPTE9SU1BBQ0UpOw0KLSAgICBicmVhazsNCi0NCi0gIGNhc2UgSkNTX0NNWUs6DQotICBjYXNlIEpDU19ZQ0NLOg0KLSAgICBpZiAoY2luZm8tPm51bV9jb21wb25lbnRzICE9IDQpDQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSl9DT0xPUlNQQUNFKTsNCi0gICAgYnJlYWs7DQotDQotICBkZWZhdWx0OgkJCS8qIEpDU19VTktOT1dOIGNhbiBiZSBhbnl0aGluZyAqLw0KLSAgICBpZiAoY2luZm8tPm51bV9jb21wb25lbnRzIDwgMSkNCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9KX0NPTE9SU1BBQ0UpOw0KLSAgICBicmVhazsNCi0gIH0NCi0NCi0gIC8qIFNldCBvdXRfY29sb3JfY29tcG9uZW50cyBhbmQgY29udmVyc2lvbiBtZXRob2QgYmFzZWQgb24gcmVxdWVzdGVkIHNwYWNlLg0KLSAgICogQWxzbyBjbGVhciB0aGUgY29tcG9uZW50X25lZWRlZCBmbGFncyBmb3IgYW55IHVudXNlZCBjb21wb25lbnRzLA0KLSAgICogc28gdGhhdCBlYXJsaWVyIHBpcGVsaW5lIHN0YWdlcyBjYW4gYXZvaWQgdXNlbGVzcyBjb21wdXRhdGlvbi4NCi0gICAqLw0KLQ0KLSAgc3dpdGNoIChjaW5mby0+b3V0X2NvbG9yX3NwYWNlKSB7DQotICBjYXNlIEpDU19HUkFZU0NBTEU6DQotICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyA9IDE7DQotICAgIGlmIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfR1JBWVNDQUxFIHx8DQotCWNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19ZQ2JDcikgew0KLSAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IGdyYXlzY2FsZV9jb252ZXJ0Ow0KLSAgICAgIC8qIEZvciBjb2xvci0+Z3JheXNjYWxlIGNvbnZlcnNpb24sIG9ubHkgdGhlIFkgKDApIGNvbXBvbmVudCBpcyBuZWVkZWQgKi8NCi0gICAgICBmb3IgKGNpID0gMTsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspDQotCWNpbmZvLT5jb21wX2luZm9bY2ldLmNvbXBvbmVudF9uZWVkZWQgPSBGQUxTRTsNCi0gICAgfSBlbHNlDQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DT05WRVJTSU9OX05PVElNUEwpOw0KLSAgICBicmVhazsNCi0NCi0gIGNhc2UgSkNTX1JHQjoNCi0gICAgY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzID0gUkdCX1BJWEVMU0laRTsNCi0gICAgaWYgKGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19ZQ2JDcikgew0KLSAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IHljY19yZ2JfY29udmVydDsNCi0gICAgICBidWlsZF95Y2NfcmdiX3RhYmxlKGNpbmZvKTsNCi0gICAgfSBlbHNlIGlmIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfR1JBWVNDQUxFKSB7DQotICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gZ3JheV9yZ2JfY29udmVydDsNCi0gICAgfSBlbHNlIGlmIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCICYmIFJHQl9QSVhFTFNJWkUgPT0gMykgew0KLSAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IG51bGxfY29udmVydDsNCi0gICAgfSBlbHNlDQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DT05WRVJTSU9OX05PVElNUEwpOw0KLSAgICBicmVhazsNCi0NCi0gIGNhc2UgSkNTX0NNWUs6DQotICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyA9IDQ7DQotICAgIGlmIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfWUNDSykgew0KLSAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IHljY2tfY215a19jb252ZXJ0Ow0KLSAgICAgIGJ1aWxkX3ljY19yZ2JfdGFibGUoY2luZm8pOw0KLSAgICB9IGVsc2UgaWYgKGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19DTVlLKSB7DQotICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gbnVsbF9jb252ZXJ0Ow0KLSAgICB9IGVsc2UNCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NPTlZFUlNJT05fTk9USU1QTCk7DQotICAgIGJyZWFrOw0KLQ0KLSAgZGVmYXVsdDoNCi0gICAgLyogUGVybWl0IG51bGwgY29udmVyc2lvbiB0byBzYW1lIG91dHB1dCBzcGFjZSAqLw0KLSAgICBpZiAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSA9PSBjaW5mby0+anBlZ19jb2xvcl9zcGFjZSkgew0KLSAgICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyA9IGNpbmZvLT5udW1fY29tcG9uZW50czsNCi0gICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSBudWxsX2NvbnZlcnQ7DQotICAgIH0gZWxzZQkJCS8qIHVuc3VwcG9ydGVkIG5vbi1udWxsIGNvbnZlcnNpb24gKi8NCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NPTlZFUlNJT05fTk9USU1QTCk7DQotICAgIGJyZWFrOw0KLSAgfQ0KLQ0KLSAgaWYgKGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMpDQotICAgIGNpbmZvLT5vdXRwdXRfY29tcG9uZW50cyA9IDE7IC8qIHNpbmdsZSBjb2xvcm1hcHBlZCBvdXRwdXQgY29tcG9uZW50ICovDQotICBlbHNlDQotICAgIGNpbmZvLT5vdXRwdXRfY29tcG9uZW50cyA9IGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50czsNCi19DQotDQotI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fDQorI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykKKy8qCisgKiBqZGNvbG9yLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBvdXRwdXQgY29sb3JzcGFjZSBjb252ZXJzaW9uIHJvdXRpbmVzLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKworCisvKiBQcml2YXRlIHN1Ym9iamVjdCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX2NvbG9yX2RlY29udmVydGVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLworCisgIC8qIFByaXZhdGUgc3RhdGUgZm9yIFlDQy0+UkdCIGNvbnZlcnNpb24gKi8KKyAgaW50ICogQ3Jfcl90YWI7CQkvKiA9PiB0YWJsZSBmb3IgQ3IgdG8gUiBjb252ZXJzaW9uICovCisgIGludCAqIENiX2JfdGFiOwkJLyogPT4gdGFibGUgZm9yIENiIHRvIEIgY29udmVyc2lvbiAqLworICBJTlQzMiAqIENyX2dfdGFiOwkJLyogPT4gdGFibGUgZm9yIENyIHRvIEcgY29udmVyc2lvbiAqLworICBJTlQzMiAqIENiX2dfdGFiOwkJLyogPT4gdGFibGUgZm9yIENiIHRvIEcgY29udmVyc2lvbiAqLworfSBteV9jb2xvcl9kZWNvbnZlcnRlcjsKKwordHlwZWRlZiBteV9jb2xvcl9kZWNvbnZlcnRlciAqIG15X2Njb252ZXJ0X3B0cjsKKworCisvKioqKioqKioqKioqKioqKiBZQ2JDciAtPiBSR0IgY29udmVyc2lvbjogbW9zdCBjb21tb24gY2FzZSAqKioqKioqKioqKioqKi8KKworLyoKKyAqIFlDYkNyIGlzIGRlZmluZWQgcGVyIENDSVIgNjAxLTEsIGV4Y2VwdCB0aGF0IENiIGFuZCBDciBhcmUKKyAqIG5vcm1hbGl6ZWQgdG8gdGhlIHJhbmdlIDAuLk1BWEpTQU1QTEUgcmF0aGVyIHRoYW4gLTAuNSAuLiAwLjUuCisgKiBUaGUgY29udmVyc2lvbiBlcXVhdGlvbnMgdG8gYmUgaW1wbGVtZW50ZWQgYXJlIHRoZXJlZm9yZQorICoJUiA9IFkgICAgICAgICAgICAgICAgKyAxLjQwMjAwICogQ3IKKyAqCUcgPSBZIC0gMC4zNDQxNCAqIENiIC0gMC43MTQxNCAqIENyCisgKglCID0gWSArIDEuNzcyMDAgKiBDYgorICogd2hlcmUgQ2IgYW5kIENyIHJlcHJlc2VudCB0aGUgaW5jb21pbmcgdmFsdWVzIGxlc3MgQ0VOVEVSSlNBTVBMRS4KKyAqIChUaGVzZSBudW1iZXJzIGFyZSBkZXJpdmVkIGZyb20gVElGRiA2LjAgc2VjdGlvbiAyMSwgZGF0ZWQgMy1KdW5lLTkyLikKKyAqCisgKiBUbyBhdm9pZCBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljLCB3ZSByZXByZXNlbnQgdGhlIGZyYWN0aW9uYWwgY29uc3RhbnRzCisgKiBhcyBpbnRlZ2VycyBzY2FsZWQgdXAgYnkgMl4xNiAoYWJvdXQgNCBkaWdpdHMgcHJlY2lzaW9uKTsgd2UgaGF2ZSB0byBkaXZpZGUKKyAqIHRoZSBwcm9kdWN0cyBieSAyXjE2LCB3aXRoIGFwcHJvcHJpYXRlIHJvdW5kaW5nLCB0byBnZXQgdGhlIGNvcnJlY3QgYW5zd2VyLgorICogTm90aWNlIHRoYXQgWSwgYmVpbmcgYW4gaW50ZWdyYWwgaW5wdXQsIGRvZXMgbm90IGNvbnRyaWJ1dGUgYW55IGZyYWN0aW9uCisgKiBzbyBpdCBuZWVkIG5vdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgcm91bmRpbmcuCisgKgorICogRm9yIGV2ZW4gbW9yZSBzcGVlZCwgd2UgYXZvaWQgZG9pbmcgYW55IG11bHRpcGxpY2F0aW9ucyBpbiB0aGUgaW5uZXIgbG9vcAorICogYnkgcHJlY2FsY3VsYXRpbmcgdGhlIGNvbnN0YW50cyB0aW1lcyBDYiBhbmQgQ3IgZm9yIGFsbCBwb3NzaWJsZSB2YWx1ZXMuCisgKiBGb3IgOC1iaXQgSlNBTVBMRXMgdGhpcyBpcyB2ZXJ5IHJlYXNvbmFibGUgKG9ubHkgMjU2IGVudHJpZXMgcGVyIHRhYmxlKTsKKyAqIGZvciAxMi1iaXQgc2FtcGxlcyBpdCBpcyBzdGlsbCBhY2NlcHRhYmxlLiAgSXQncyBub3QgdmVyeSByZWFzb25hYmxlIGZvcgorICogMTYtYml0IHNhbXBsZXMsIGJ1dCBpZiB5b3Ugd2FudCBsb3NzbGVzcyBzdG9yYWdlIHlvdSBzaG91bGRuJ3QgYmUgY2hhbmdpbmcKKyAqIGNvbG9yc3BhY2UgYW55d2F5LgorICogVGhlIENyPT5SIGFuZCBDYj0+QiB2YWx1ZXMgY2FuIGJlIHJvdW5kZWQgdG8gaW50ZWdlcnMgaW4gYWR2YW5jZTsgdGhlCisgKiB2YWx1ZXMgZm9yIHRoZSBHIGNhbGN1bGF0aW9uIGFyZSBsZWZ0IHNjYWxlZCB1cCwgc2luY2Ugd2UgbXVzdCBhZGQgdGhlbQorICogdG9nZXRoZXIgYmVmb3JlIHJvdW5kaW5nLgorICovCisKKyNkZWZpbmUgU0NBTEVCSVRTCTE2CS8qIHNwZWVkaWVzdCByaWdodC1zaGlmdCBvbiBzb21lIG1hY2hpbmVzICovCisjZGVmaW5lIE9ORV9IQUxGCSgoSU5UMzIpIDEgPDwgKFNDQUxFQklUUy0xKSkKKyNkZWZpbmUgRklYKHgpCQkoKElOVDMyKSAoKHgpICogKDFMPDxTQ0FMRUJJVFMpICsgMC41KSkKKworCisvKgorICogSW5pdGlhbGl6ZSB0YWJsZXMgZm9yIFlDQy0+UkdCIGNvbG9yc3BhY2UgY29udmVyc2lvbi4KKyAqLworCitMT0NBTCh2b2lkKQorYnVpbGRfeWNjX3JnYl90YWJsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfY2NvbnZlcnRfcHRyIGNjb252ZXJ0ID0gKG15X2Njb252ZXJ0X3B0cikgY2luZm8tPmNjb252ZXJ0OworICBpbnQgaTsKKyAgSU5UMzIgeDsKKyAgU0hJRlRfVEVNUFMKKworICBjY29udmVydC0+Q3Jfcl90YWIgPSAoaW50ICopCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkJCQkoTUFYSlNBTVBMRSsxKSAqIFNJWkVPRihpbnQpKTsKKyAgY2NvbnZlcnQtPkNiX2JfdGFiID0gKGludCAqKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJKE1BWEpTQU1QTEUrMSkgKiBTSVpFT0YoaW50KSk7CisgIGNjb252ZXJ0LT5Dcl9nX3RhYiA9IChJTlQzMiAqKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJKE1BWEpTQU1QTEUrMSkgKiBTSVpFT0YoSU5UMzIpKTsKKyAgY2NvbnZlcnQtPkNiX2dfdGFiID0gKElOVDMyICopCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkJCQkoTUFYSlNBTVBMRSsxKSAqIFNJWkVPRihJTlQzMikpOworCisgIGZvciAoaSA9IDAsIHggPSAtQ0VOVEVSSlNBTVBMRTsgaSA8PSBNQVhKU0FNUExFOyBpKyssIHgrKykgeworICAgIC8qIGkgaXMgdGhlIGFjdHVhbCBpbnB1dCBwaXhlbCB2YWx1ZSwgaW4gdGhlIHJhbmdlIDAuLk1BWEpTQU1QTEUgKi8KKyAgICAvKiBUaGUgQ2Igb3IgQ3IgdmFsdWUgd2UgYXJlIHRoaW5raW5nIG9mIGlzIHggPSBpIC0gQ0VOVEVSSlNBTVBMRSAqLworICAgIC8qIENyPT5SIHZhbHVlIGlzIG5lYXJlc3QgaW50IHRvIDEuNDAyMDAgKiB4ICovCisgICAgY2NvbnZlcnQtPkNyX3JfdGFiW2ldID0gKGludCkKKwkJICAgIFJJR0hUX1NISUZUKEZJWCgxLjQwMjAwKSAqIHggKyBPTkVfSEFMRiwgU0NBTEVCSVRTKTsKKyAgICAvKiBDYj0+QiB2YWx1ZSBpcyBuZWFyZXN0IGludCB0byAxLjc3MjAwICogeCAqLworICAgIGNjb252ZXJ0LT5DYl9iX3RhYltpXSA9IChpbnQpCisJCSAgICBSSUdIVF9TSElGVChGSVgoMS43NzIwMCkgKiB4ICsgT05FX0hBTEYsIFNDQUxFQklUUyk7CisgICAgLyogQ3I9PkcgdmFsdWUgaXMgc2NhbGVkLXVwIC0wLjcxNDE0ICogeCAqLworICAgIGNjb252ZXJ0LT5Dcl9nX3RhYltpXSA9ICgtIEZJWCgwLjcxNDE0KSkgKiB4OworICAgIC8qIENiPT5HIHZhbHVlIGlzIHNjYWxlZC11cCAtMC4zNDQxNCAqIHggKi8KKyAgICAvKiBXZSBhbHNvIGFkZCBpbiBPTkVfSEFMRiBzbyB0aGF0IG5lZWQgbm90IGRvIGl0IGluIGlubmVyIGxvb3AgKi8KKyAgICBjY29udmVydC0+Q2JfZ190YWJbaV0gPSAoLSBGSVgoMC4zNDQxNCkpICogeCArIE9ORV9IQUxGOworICB9Cit9CisKKworLyoKKyAqIENvbnZlcnQgc29tZSByb3dzIG9mIHNhbXBsZXMgdG8gdGhlIG91dHB1dCBjb2xvcnNwYWNlLgorICoKKyAqIE5vdGUgdGhhdCB3ZSBjaGFuZ2UgZnJvbSBub25pbnRlcmxlYXZlZCwgb25lLXBsYW5lLXBlci1jb21wb25lbnQgZm9ybWF0CisgKiB0byBpbnRlcmxlYXZlZC1waXhlbCBmb3JtYXQuICBUaGUgb3V0cHV0IGJ1ZmZlciBpcyB0aGVyZWZvcmUgdGhyZWUgdGltZXMKKyAqIGFzIHdpZGUgYXMgdGhlIGlucHV0IGJ1ZmZlci4KKyAqIEEgc3RhcnRpbmcgcm93IG9mZnNldCBpcyBwcm92aWRlZCBvbmx5IGZvciB0aGUgaW5wdXQgYnVmZmVyLiAgVGhlIGNhbGxlcgorICogY2FuIGVhc2lseSBhZGp1c3QgdGhlIHBhc3NlZCBvdXRwdXRfYnVmIHZhbHVlIHRvIGFjY29tbW9kYXRlIGFueSByb3cKKyAqIG9mZnNldCByZXF1aXJlZCBvbiB0aGF0IHNpZGUuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCit5Y2NfcmdiX2NvbnZlcnQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisJCSBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisJCSBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKK3sKKyAgbXlfY2NvbnZlcnRfcHRyIGNjb252ZXJ0ID0gKG15X2Njb252ZXJ0X3B0cikgY2luZm8tPmNjb252ZXJ0OworICByZWdpc3RlciBpbnQgeSwgY2IsIGNyOworICByZWdpc3RlciBKU0FNUFJPVyBvdXRwdHI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyMCwgaW5wdHIxLCBpbnB0cjI7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sOworICBKRElNRU5TSU9OIG51bV9jb2xzID0gY2luZm8tPm91dHB1dF93aWR0aDsKKyAgLyogY29weSB0aGVzZSBwb2ludGVycyBpbnRvIHJlZ2lzdGVycyBpZiBwb3NzaWJsZSAqLworICByZWdpc3RlciBKU0FNUExFICogcmFuZ2VfbGltaXQgPSBjaW5mby0+c2FtcGxlX3JhbmdlX2xpbWl0OworICByZWdpc3RlciBpbnQgKiBDcnJ0YWIgPSBjY29udmVydC0+Q3Jfcl90YWI7CisgIHJlZ2lzdGVyIGludCAqIENiYnRhYiA9IGNjb252ZXJ0LT5DYl9iX3RhYjsKKyAgcmVnaXN0ZXIgSU5UMzIgKiBDcmd0YWIgPSBjY29udmVydC0+Q3JfZ190YWI7CisgIHJlZ2lzdGVyIElOVDMyICogQ2JndGFiID0gY2NvbnZlcnQtPkNiX2dfdGFiOworICBTSElGVF9URU1QUworCisgIHdoaWxlICgtLW51bV9yb3dzID49IDApIHsKKyAgICBpbnB0cjAgPSBpbnB1dF9idWZbMF1baW5wdXRfcm93XTsKKyAgICBpbnB0cjEgPSBpbnB1dF9idWZbMV1baW5wdXRfcm93XTsKKyAgICBpbnB0cjIgPSBpbnB1dF9idWZbMl1baW5wdXRfcm93XTsKKyAgICBpbnB1dF9yb3crKzsKKyAgICBvdXRwdHIgPSAqb3V0cHV0X2J1ZisrOworICAgIGZvciAoY29sID0gMDsgY29sIDwgbnVtX2NvbHM7IGNvbCsrKSB7CisgICAgICB5ICA9IEdFVEpTQU1QTEUoaW5wdHIwW2NvbF0pOworICAgICAgY2IgPSBHRVRKU0FNUExFKGlucHRyMVtjb2xdKTsKKyAgICAgIGNyID0gR0VUSlNBTVBMRShpbnB0cjJbY29sXSk7CisgICAgICAvKiBSYW5nZS1saW1pdGluZyBpcyBlc3NlbnRpYWwgZHVlIHRvIG5vaXNlIGludHJvZHVjZWQgYnkgRENUIGxvc3Nlcy4gKi8KKyAgICAgIG91dHB0cltSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIENycnRhYltjcl1dOworICAgICAgb3V0cHRyW1JHQl9HUkVFTl0gPSByYW5nZV9saW1pdFt5ICsKKwkJCSAgICAgICgoaW50KSBSSUdIVF9TSElGVChDYmd0YWJbY2JdICsgQ3JndGFiW2NyXSwKKwkJCQkJCSBTQ0FMRUJJVFMpKV07CisgICAgICBvdXRwdHJbUkdCX0JMVUVdID0gIHJhbmdlX2xpbWl0W3kgKyBDYmJ0YWJbY2JdXTsKKyAgICAgIG91dHB0ciArPSBSR0JfUElYRUxTSVpFOworICAgIH0KKyAgfQorfQorCisKKy8qKioqKioqKioqKioqKioqIENhc2VzIG90aGVyIHRoYW4gWUNiQ3IgLT4gUkdCICoqKioqKioqKioqKioqLworCisKKy8qCisgKiBDb2xvciBjb252ZXJzaW9uIGZvciBubyBjb2xvcnNwYWNlIGNoYW5nZToganVzdCBjb3B5IHRoZSBkYXRhLAorICogY29udmVydGluZyBmcm9tIHNlcGFyYXRlLXBsYW5lcyB0byBpbnRlcmxlYXZlZCByZXByZXNlbnRhdGlvbi4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK251bGxfY29udmVydCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisJICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpCit7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyLCBvdXRwdHI7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY291bnQ7CisgIHJlZ2lzdGVyIGludCBudW1fY29tcG9uZW50cyA9IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgSkRJTUVOU0lPTiBudW1fY29scyA9IGNpbmZvLT5vdXRwdXRfd2lkdGg7CisgIGludCBjaTsKKworICB3aGlsZSAoLS1udW1fcm93cyA+PSAwKSB7CisgICAgZm9yIChjaSA9IDA7IGNpIDwgbnVtX2NvbXBvbmVudHM7IGNpKyspIHsKKyAgICAgIGlucHRyID0gaW5wdXRfYnVmW2NpXVtpbnB1dF9yb3ddOworICAgICAgb3V0cHRyID0gb3V0cHV0X2J1ZlswXSArIGNpOworICAgICAgZm9yIChjb3VudCA9IG51bV9jb2xzOyBjb3VudCA+IDA7IGNvdW50LS0pIHsKKwkqb3V0cHRyID0gKmlucHRyKys7CS8qIG5lZWRuJ3QgYm90aGVyIHdpdGggR0VUSlNBTVBMRSgpIGhlcmUgKi8KKwlvdXRwdHIgKz0gbnVtX2NvbXBvbmVudHM7CisgICAgICB9CisgICAgfQorICAgIGlucHV0X3JvdysrOworICAgIG91dHB1dF9idWYrKzsKKyAgfQorfQorCisKKy8qCisgKiBDb2xvciBjb252ZXJzaW9uIGZvciBncmF5c2NhbGU6IGp1c3QgY29weSB0aGUgZGF0YS4KKyAqIFRoaXMgYWxzbyB3b3JrcyBmb3IgWUNiQ3IgLT4gZ3JheXNjYWxlIGNvbnZlcnNpb24sIGluIHdoaWNoCisgKiB3ZSBqdXN0IGNvcHkgdGhlIFkgKGx1bWluYW5jZSkgY29tcG9uZW50IGFuZCBpZ25vcmUgY2hyb21pbmFuY2UuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitncmF5c2NhbGVfY29udmVydCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorCQkgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKK3sKKyAgamNvcHlfc2FtcGxlX3Jvd3MoaW5wdXRfYnVmWzBdLCAoaW50KSBpbnB1dF9yb3csIG91dHB1dF9idWYsIDAsCisJCSAgICBudW1fcm93cywgY2luZm8tPm91dHB1dF93aWR0aCk7Cit9CisKKworLyoKKyAqIENvbnZlcnQgZ3JheXNjYWxlIHRvIFJHQjoganVzdCBkdXBsaWNhdGUgdGhlIGdyYXlsZXZlbCB0aHJlZSB0aW1lcy4KKyAqIFRoaXMgaXMgcHJvdmlkZWQgdG8gc3VwcG9ydCBhcHBsaWNhdGlvbnMgdGhhdCBkb24ndCB3YW50IHRvIGNvcGUKKyAqIHdpdGggZ3JheXNjYWxlIGFzIGEgc2VwYXJhdGUgY2FzZS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2dyYXlfcmdiX2NvbnZlcnQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisJCSAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorCQkgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQoreworICByZWdpc3RlciBKU0FNUFJPVyBpbnB0ciwgb3V0cHRyOworICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsKKyAgSkRJTUVOU0lPTiBudW1fY29scyA9IGNpbmZvLT5vdXRwdXRfd2lkdGg7CisKKyAgd2hpbGUgKC0tbnVtX3Jvd3MgPj0gMCkgeworICAgIGlucHRyID0gaW5wdXRfYnVmWzBdW2lucHV0X3JvdysrXTsKKyAgICBvdXRwdHIgPSAqb3V0cHV0X2J1ZisrOworICAgIGZvciAoY29sID0gMDsgY29sIDwgbnVtX2NvbHM7IGNvbCsrKSB7CisgICAgICAvKiBXZSBjYW4gZGlzcGVuc2Ugd2l0aCBHRVRKU0FNUExFKCkgaGVyZSAqLworICAgICAgb3V0cHRyW1JHQl9SRURdID0gb3V0cHRyW1JHQl9HUkVFTl0gPSBvdXRwdHJbUkdCX0JMVUVdID0gaW5wdHJbY29sXTsKKyAgICAgIG91dHB0ciArPSBSR0JfUElYRUxTSVpFOworICAgIH0KKyAgfQorfQorCisKKy8qCisgKiBBZG9iZS1zdHlsZSBZQ0NLLT5DTVlLIGNvbnZlcnNpb24uCisgKiBXZSBjb252ZXJ0IFlDYkNyIHRvIFI9MS1DLCBHPTEtTSwgYW5kIEI9MS1ZIHVzaW5nIHRoZSBzYW1lCisgKiBjb252ZXJzaW9uIGFzIGFib3ZlLCB3aGlsZSBwYXNzaW5nIEsgKGJsYWNrKSB1bmNoYW5nZWQuCisgKiBXZSBhc3N1bWUgYnVpbGRfeWNjX3JnYl90YWJsZSBoYXMgYmVlbiBjYWxsZWQuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCit5Y2NrX2NteWtfY29udmVydCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorCQkgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKK3sKKyAgbXlfY2NvbnZlcnRfcHRyIGNjb252ZXJ0ID0gKG15X2Njb252ZXJ0X3B0cikgY2luZm8tPmNjb252ZXJ0OworICByZWdpc3RlciBpbnQgeSwgY2IsIGNyOworICByZWdpc3RlciBKU0FNUFJPVyBvdXRwdHI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyMCwgaW5wdHIxLCBpbnB0cjIsIGlucHRyMzsKKyAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7CisgIEpESU1FTlNJT04gbnVtX2NvbHMgPSBjaW5mby0+b3V0cHV0X3dpZHRoOworICAvKiBjb3B5IHRoZXNlIHBvaW50ZXJzIGludG8gcmVnaXN0ZXJzIGlmIHBvc3NpYmxlICovCisgIHJlZ2lzdGVyIEpTQU1QTEUgKiByYW5nZV9saW1pdCA9IGNpbmZvLT5zYW1wbGVfcmFuZ2VfbGltaXQ7CisgIHJlZ2lzdGVyIGludCAqIENycnRhYiA9IGNjb252ZXJ0LT5Dcl9yX3RhYjsKKyAgcmVnaXN0ZXIgaW50ICogQ2JidGFiID0gY2NvbnZlcnQtPkNiX2JfdGFiOworICByZWdpc3RlciBJTlQzMiAqIENyZ3RhYiA9IGNjb252ZXJ0LT5Dcl9nX3RhYjsKKyAgcmVnaXN0ZXIgSU5UMzIgKiBDYmd0YWIgPSBjY29udmVydC0+Q2JfZ190YWI7CisgIFNISUZUX1RFTVBTCisKKyAgd2hpbGUgKC0tbnVtX3Jvd3MgPj0gMCkgeworICAgIGlucHRyMCA9IGlucHV0X2J1ZlswXVtpbnB1dF9yb3ddOworICAgIGlucHRyMSA9IGlucHV0X2J1ZlsxXVtpbnB1dF9yb3ddOworICAgIGlucHRyMiA9IGlucHV0X2J1ZlsyXVtpbnB1dF9yb3ddOworICAgIGlucHRyMyA9IGlucHV0X2J1ZlszXVtpbnB1dF9yb3ddOworICAgIGlucHV0X3JvdysrOworICAgIG91dHB0ciA9ICpvdXRwdXRfYnVmKys7CisgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBudW1fY29sczsgY29sKyspIHsKKyAgICAgIHkgID0gR0VUSlNBTVBMRShpbnB0cjBbY29sXSk7CisgICAgICBjYiA9IEdFVEpTQU1QTEUoaW5wdHIxW2NvbF0pOworICAgICAgY3IgPSBHRVRKU0FNUExFKGlucHRyMltjb2xdKTsKKyAgICAgIC8qIFJhbmdlLWxpbWl0aW5nIGlzIGVzc2VudGlhbCBkdWUgdG8gbm9pc2UgaW50cm9kdWNlZCBieSBEQ1QgbG9zc2VzLiAqLworICAgICAgb3V0cHRyWzBdID0gcmFuZ2VfbGltaXRbTUFYSlNBTVBMRSAtICh5ICsgQ3JydGFiW2NyXSldOwkvKiByZWQgKi8KKyAgICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0W01BWEpTQU1QTEUgLSAoeSArCQkJLyogZ3JlZW4gKi8KKwkJCSAgICAgICgoaW50KSBSSUdIVF9TSElGVChDYmd0YWJbY2JdICsgQ3JndGFiW2NyXSwKKwkJCQkJCSBTQ0FMRUJJVFMpKSldOworICAgICAgb3V0cHRyWzJdID0gcmFuZ2VfbGltaXRbTUFYSlNBTVBMRSAtICh5ICsgQ2JidGFiW2NiXSldOwkvKiBibHVlICovCisgICAgICAvKiBLIHBhc3NlcyB0aHJvdWdoIHVuY2hhbmdlZCAqLworICAgICAgb3V0cHRyWzNdID0gaW5wdHIzW2NvbF07CS8qIGRvbid0IG5lZWQgR0VUSlNBTVBMRSBoZXJlICovCisgICAgICBvdXRwdHIgKz0gNDsKKyAgICB9CisgIH0KK30KKworCisvKgorICogRW1wdHkgbWV0aG9kIGZvciBzdGFydF9wYXNzLgorICovCisKK01FVEhPRERFRih2b2lkKQorc3RhcnRfcGFzc19kY29sb3IgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIC8qIG5vIHdvcmsgbmVlZGVkICovCit9CisKKworLyoKKyAqIE1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciBvdXRwdXQgY29sb3JzcGFjZSBjb252ZXJzaW9uLgorICovCisKK0dMT0JBTCh2b2lkKQoramluaXRfY29sb3JfZGVjb252ZXJ0ZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X2Njb252ZXJ0X3B0ciBjY29udmVydDsKKyAgaW50IGNpOworCisgIGNjb252ZXJ0ID0gKG15X2Njb252ZXJ0X3B0cikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCVNJWkVPRihteV9jb2xvcl9kZWNvbnZlcnRlcikpOworICBjaW5mby0+Y2NvbnZlcnQgPSAoc3RydWN0IGpwZWdfY29sb3JfZGVjb252ZXJ0ZXIgKikgY2NvbnZlcnQ7CisgIGNjb252ZXJ0LT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfZGNvbG9yOworCisgIC8qIE1ha2Ugc3VyZSBudW1fY29tcG9uZW50cyBhZ3JlZXMgd2l0aCBqcGVnX2NvbG9yX3NwYWNlICovCisgIHN3aXRjaCAoY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UpIHsKKyAgY2FzZSBKQ1NfR1JBWVNDQUxFOgorICAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgIT0gMSkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0pfQ09MT1JTUEFDRSk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBKQ1NfUkdCOgorICBjYXNlIEpDU19ZQ2JDcjoKKyAgICBpZiAoY2luZm8tPm51bV9jb21wb25lbnRzICE9IDMpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9KX0NPTE9SU1BBQ0UpOworICAgIGJyZWFrOworCisgIGNhc2UgSkNTX0NNWUs6CisgIGNhc2UgSkNTX1lDQ0s6CisgICAgaWYgKGNpbmZvLT5udW1fY29tcG9uZW50cyAhPSA0KQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSl9DT0xPUlNQQUNFKTsKKyAgICBicmVhazsKKworICBkZWZhdWx0OgkJCS8qIEpDU19VTktOT1dOIGNhbiBiZSBhbnl0aGluZyAqLworICAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgPCAxKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSl9DT0xPUlNQQUNFKTsKKyAgICBicmVhazsKKyAgfQorCisgIC8qIFNldCBvdXRfY29sb3JfY29tcG9uZW50cyBhbmQgY29udmVyc2lvbiBtZXRob2QgYmFzZWQgb24gcmVxdWVzdGVkIHNwYWNlLgorICAgKiBBbHNvIGNsZWFyIHRoZSBjb21wb25lbnRfbmVlZGVkIGZsYWdzIGZvciBhbnkgdW51c2VkIGNvbXBvbmVudHMsCisgICAqIHNvIHRoYXQgZWFybGllciBwaXBlbGluZSBzdGFnZXMgY2FuIGF2b2lkIHVzZWxlc3MgY29tcHV0YXRpb24uCisgICAqLworCisgIHN3aXRjaCAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSkgeworICBjYXNlIEpDU19HUkFZU0NBTEU6CisgICAgY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzID0gMTsKKyAgICBpZiAoY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX0dSQVlTQ0FMRSB8fAorCWNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19ZQ2JDcikgeworICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gZ3JheXNjYWxlX2NvbnZlcnQ7CisgICAgICAvKiBGb3IgY29sb3ItPmdyYXlzY2FsZSBjb252ZXJzaW9uLCBvbmx5IHRoZSBZICgwKSBjb21wb25lbnQgaXMgbmVlZGVkICovCisgICAgICBmb3IgKGNpID0gMTsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspCisJY2luZm8tPmNvbXBfaW5mb1tjaV0uY29tcG9uZW50X25lZWRlZCA9IEZBTFNFOworICAgIH0gZWxzZQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DT05WRVJTSU9OX05PVElNUEwpOworICAgIGJyZWFrOworCisgIGNhc2UgSkNTX1JHQjoKKyAgICBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgPSBSR0JfUElYRUxTSVpFOworICAgIGlmIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfWUNiQ3IpIHsKKyAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IHljY19yZ2JfY29udmVydDsKKyAgICAgIGJ1aWxkX3ljY19yZ2JfdGFibGUoY2luZm8pOworICAgIH0gZWxzZSBpZiAoY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX0dSQVlTQ0FMRSkgeworICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gZ3JheV9yZ2JfY29udmVydDsKKyAgICB9IGVsc2UgaWYgKGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19SR0IgJiYgUkdCX1BJWEVMU0laRSA9PSAzKSB7CisgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSBudWxsX2NvbnZlcnQ7CisgICAgfSBlbHNlCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NPTlZFUlNJT05fTk9USU1QTCk7CisgICAgYnJlYWs7CisKKyAgY2FzZSBKQ1NfQ01ZSzoKKyAgICBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgPSA0OworICAgIGlmIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfWUNDSykgeworICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0geWNja19jbXlrX2NvbnZlcnQ7CisgICAgICBidWlsZF95Y2NfcmdiX3RhYmxlKGNpbmZvKTsKKyAgICB9IGVsc2UgaWYgKGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19DTVlLKSB7CisgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSBudWxsX2NvbnZlcnQ7CisgICAgfSBlbHNlCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NPTlZFUlNJT05fTk9USU1QTCk7CisgICAgYnJlYWs7CisKKyAgZGVmYXVsdDoKKyAgICAvKiBQZXJtaXQgbnVsbCBjb252ZXJzaW9uIHRvIHNhbWUgb3V0cHV0IHNwYWNlICovCisgICAgaWYgKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgPT0gY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UpIHsKKyAgICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyA9IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IG51bGxfY29udmVydDsKKyAgICB9IGVsc2UJCQkvKiB1bnN1cHBvcnRlZCBub24tbnVsbCBjb252ZXJzaW9uICovCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NPTlZFUlNJT05fTk9USU1QTCk7CisgICAgYnJlYWs7CisgIH0KKworICBpZiAoY2luZm8tPnF1YW50aXplX2NvbG9ycykKKyAgICBjaW5mby0+b3V0cHV0X2NvbXBvbmVudHMgPSAxOyAvKiBzaW5nbGUgY29sb3JtYXBwZWQgb3V0cHV0IGNvbXBvbmVudCAqLworICBlbHNlCisgICAgY2luZm8tPm91dHB1dF9jb21wb25lbnRzID0gY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzOworfQorCisjZW5kaWYgLy9fRlhfSlBFR19UVVJCT18KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pkZGN0bWdyLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZGRjdG1nci5jCmluZGV4IDgxMWQ1MWQuLjUyMjY0NTYgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pkZGN0bWdyLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamRkY3RtZ3IuYwpAQCAtMSwyNzIgKzEsMjcyIEBACi0jaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQ0KLS8qDQotICogamRkY3RtZ3IuYw0KLSAqDQotICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLg0KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuDQotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLg0KLSAqDQotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBpbnZlcnNlLURDVCBtYW5hZ2VtZW50IGxvZ2ljLg0KLSAqIFRoaXMgY29kZSBzZWxlY3RzIGEgcGFydGljdWxhciBJRENUIGltcGxlbWVudGF0aW9uIHRvIGJlIHVzZWQsDQotICogYW5kIGl0IHBlcmZvcm1zIHJlbGF0ZWQgaG91c2VrZWVwaW5nIGNob3Jlcy4gIE5vIGNvZGUgaW4gdGhpcyBmaWxlDQotICogaXMgZXhlY3V0ZWQgcGVyIElEQ1Qgc3RlcCwgb25seSBkdXJpbmcgb3V0cHV0IHBhc3Mgc2V0dXAuDQotICoNCi0gKiBOb3RlIHRoYXQgdGhlIElEQ1Qgcm91dGluZXMgYXJlIHJlc3BvbnNpYmxlIGZvciBwZXJmb3JtaW5nIGNvZWZmaWNpZW50DQotICogZGVxdWFudGl6YXRpb24gYXMgd2VsbCBhcyB0aGUgSURDVCBwcm9wZXIuICBUaGlzIG1vZHVsZSBzZXRzIHVwIHRoZQ0KLSAqIGRlcXVhbnRpemF0aW9uIG11bHRpcGxpZXIgdGFibGUgbmVlZGVkIGJ5IHRoZSBJRENUIHJvdXRpbmUuDQotICovDQotDQotI2RlZmluZSBKUEVHX0lOVEVSTkFMUw0KLSNpbmNsdWRlICJqaW5jbHVkZS5oIg0KLSNpbmNsdWRlICJqcGVnbGliLmgiDQotI2luY2x1ZGUgImpkY3QuaCIJCS8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovDQotDQotDQotLyoNCi0gKiBUaGUgZGVjb21wcmVzc29yIGlucHV0IHNpZGUgKGpkaW5wdXQuYykgc2F2ZXMgYXdheSB0aGUgYXBwcm9wcmlhdGUNCi0gKiBxdWFudGl6YXRpb24gdGFibGUgZm9yIGVhY2ggY29tcG9uZW50IGF0IHRoZSBzdGFydCBvZiB0aGUgZmlyc3Qgc2Nhbg0KLSAqIGludm9sdmluZyB0aGF0IGNvbXBvbmVudC4gIChUaGlzIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byBjb3JyZWN0bHkNCi0gKiBkZWNvZGUgZmlsZXMgdGhhdCByZXVzZSBRLXRhYmxlIHNsb3RzLikNCi0gKiBXaGVuIHdlIGFyZSByZWFkeSB0byBtYWtlIGFuIG91dHB1dCBwYXNzLCB0aGUgc2F2ZWQgUS10YWJsZSBpcyBjb252ZXJ0ZWQNCi0gKiB0byBhIG11bHRpcGxpZXIgdGFibGUgdGhhdCB3aWxsIGFjdHVhbGx5IGJlIHVzZWQgYnkgdGhlIElEQ1Qgcm91dGluZS4NCi0gKiBUaGUgbXVsdGlwbGllciB0YWJsZSBjb250ZW50cyBhcmUgSURDVC1tZXRob2QtZGVwZW5kZW50LiAgVG8gc3VwcG9ydA0KLSAqIGFwcGxpY2F0aW9uIGNoYW5nZXMgaW4gSURDVCBtZXRob2QgYmV0d2VlbiBzY2Fucywgd2UgY2FuIHJlbWFrZSB0aGUNCi0gKiBtdWx0aXBsaWVyIHRhYmxlcyBpZiBuZWNlc3NhcnkuDQotICogSW4gYnVmZmVyZWQtaW1hZ2UgbW9kZSwgdGhlIGZpcnN0IG91dHB1dCBwYXNzIG1heSBvY2N1ciBiZWZvcmUgYW55IGRhdGENCi0gKiBoYXMgYmVlbiBzZWVuIGZvciBzb21lIGNvbXBvbmVudHMsIGFuZCB0aHVzIGJlZm9yZSB0aGVpciBRLXRhYmxlcyBoYXZlDQotICogYmVlbiBzYXZlZCBhd2F5LiAgVG8gaGFuZGxlIHRoaXMgY2FzZSwgbXVsdGlwbGllciB0YWJsZXMgYXJlIHByZXNldA0KLSAqIHRvIHplcm9lczsgdGhlIHJlc3VsdCBvZiB0aGUgSURDVCB3aWxsIGJlIGEgbmV1dHJhbCBncmF5IGxldmVsLg0KLSAqLw0KLQ0KLQ0KLS8qIFByaXZhdGUgc3Vib2JqZWN0IGZvciB0aGlzIG1vZHVsZSAqLw0KLQ0KLXR5cGVkZWYgc3RydWN0IHsNCi0gIHN0cnVjdCBqcGVnX2ludmVyc2VfZGN0IHB1YjsJLyogcHVibGljIGZpZWxkcyAqLw0KLQ0KLSAgLyogVGhpcyBhcnJheSBjb250YWlucyB0aGUgSURDVCBtZXRob2QgY29kZSB0aGF0IGVhY2ggbXVsdGlwbGllciB0YWJsZQ0KLSAgICogaXMgY3VycmVudGx5IHNldCB1cCBmb3IsIG9yIC0xIGlmIGl0J3Mgbm90IHlldCBzZXQgdXAuDQotICAgKiBUaGUgYWN0dWFsIG11bHRpcGxpZXIgdGFibGVzIGFyZSBwb2ludGVkIHRvIGJ5IGRjdF90YWJsZSBpbiB0aGUNCi0gICAqIHBlci1jb21wb25lbnQgY29tcF9pbmZvIHN0cnVjdHVyZXMuDQotICAgKi8NCi0gIGludCBjdXJfbWV0aG9kW01BWF9DT01QT05FTlRTXTsNCi19IG15X2lkY3RfY29udHJvbGxlcjsNCi0NCi10eXBlZGVmIG15X2lkY3RfY29udHJvbGxlciAqIG15X2lkY3RfcHRyOw0KLQ0KLQ0KLS8qIEFsbG9jYXRlZCBtdWx0aXBsaWVyIHRhYmxlczogYmlnIGVub3VnaCBmb3IgYW55IHN1cHBvcnRlZCB2YXJpYW50ICovDQotDQotdHlwZWRlZiB1bmlvbiB7DQotICBJU0xPV19NVUxUX1RZUEUgaXNsb3dfYXJyYXlbRENUU0laRTJdOw0KLSNpZmRlZiBEQ1RfSUZBU1RfU1VQUE9SVEVEDQotICBJRkFTVF9NVUxUX1RZUEUgaWZhc3RfYXJyYXlbRENUU0laRTJdOw0KLSNlbmRpZg0KLSNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVEDQotICBGTE9BVF9NVUxUX1RZUEUgZmxvYXRfYXJyYXlbRENUU0laRTJdOw0KLSNlbmRpZg0KLX0gbXVsdGlwbGllcl90YWJsZTsNCi0NCi0NCi0vKiBUaGUgY3VycmVudCBzY2FsZWQtSURDVCByb3V0aW5lcyByZXF1aXJlIElTTE9XLXN0eWxlIG11bHRpcGxpZXIgdGFibGVzLA0KLSAqIHNvIGJlIHN1cmUgdG8gY29tcGlsZSB0aGF0IGNvZGUgaWYgZWl0aGVyIElTTE9XIG9yIFNDQUxJTkcgaXMgcmVxdWVzdGVkLg0KLSAqLw0KLSNpZmRlZiBEQ1RfSVNMT1dfU1VQUE9SVEVEDQotI2RlZmluZSBQUk9WSURFX0lTTE9XX1RBQkxFUw0KLSNlbHNlDQotI2lmZGVmIElEQ1RfU0NBTElOR19TVVBQT1JURUQNCi0jZGVmaW5lIFBST1ZJREVfSVNMT1dfVEFCTEVTDQotI2VuZGlmDQotI2VuZGlmDQotDQotDQotLyoNCi0gKiBQcmVwYXJlIGZvciBhbiBvdXRwdXQgcGFzcy4NCi0gKiBIZXJlIHdlIHNlbGVjdCB0aGUgcHJvcGVyIElEQ1Qgcm91dGluZSBmb3IgZWFjaCBjb21wb25lbnQgYW5kIGJ1aWxkDQotICogYSBtYXRjaGluZyBtdWx0aXBsaWVyIHRhYmxlLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXN0YXJ0X3Bhc3MgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAgbXlfaWRjdF9wdHIgaWRjdCA9IChteV9pZGN0X3B0cikgY2luZm8tPmlkY3Q7DQotICBpbnQgY2ksIGk7DQotICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOw0KLSAgaW50IG1ldGhvZCA9IDA7DQotICBpbnZlcnNlX0RDVF9tZXRob2RfcHRyIG1ldGhvZF9wdHIgPSBOVUxMOw0KLSAgSlFVQU5UX1RCTCAqIHF0Ymw7DQotDQotICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOw0KLSAgICAgICBjaSsrLCBjb21wcHRyKyspIHsNCi0gICAgLyogU2VsZWN0IHRoZSBwcm9wZXIgSURDVCByb3V0aW5lIGZvciB0aGlzIGNvbXBvbmVudCdzIHNjYWxpbmcgKi8NCi0gICAgc3dpdGNoIChjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemUpIHsNCi0jaWZkZWYgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRA0KLSAgICBjYXNlIDE6DQotICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF8xeDE7DQotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamlkY3RyZWQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLw0KLSAgICAgIGJyZWFrOw0KLSAgICBjYXNlIDI6DQotICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF8yeDI7DQotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamlkY3RyZWQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLw0KLSAgICAgIGJyZWFrOw0KLSAgICBjYXNlIDQ6DQotICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF80eDQ7DQotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamlkY3RyZWQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLw0KLSAgICAgIGJyZWFrOw0KLSNlbmRpZg0KLSAgICBjYXNlIERDVFNJWkU6DQotICAgICAgc3dpdGNoIChjaW5mby0+ZGN0X21ldGhvZCkgew0KLSNpZmRlZiBEQ1RfSVNMT1dfU1VQUE9SVEVEDQotICAgICAgY2FzZSBKRENUX0lTTE9XOg0KLQltZXRob2RfcHRyID0ganBlZ19pZGN0X2lzbG93Ow0KLQltZXRob2QgPSBKRENUX0lTTE9XOw0KLQlicmVhazsNCi0jZW5kaWYNCi0jaWZkZWYgRENUX0lGQVNUX1NVUFBPUlRFRA0KLSAgICAgIGNhc2UgSkRDVF9JRkFTVDoNCi0JbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF9pZmFzdDsNCi0JbWV0aG9kID0gSkRDVF9JRkFTVDsNCi0JYnJlYWs7DQotI2VuZGlmDQotI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQNCi0gICAgICBjYXNlIEpEQ1RfRkxPQVQ6DQotCW1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfZmxvYXQ7DQotCW1ldGhvZCA9IEpEQ1RfRkxPQVQ7DQotCWJyZWFrOw0KLSNlbmRpZg0KLSAgICAgIGRlZmF1bHQ6DQotCUVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsNCi0JYnJlYWs7DQotICAgICAgfQ0KLSAgICAgIGJyZWFrOw0KLSAgICBkZWZhdWx0Og0KLSAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9EQ1RTSVpFLCBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemUpOw0KLSAgICAgIGJyZWFrOw0KLSAgICB9DQotICAgIGlkY3QtPnB1Yi5pbnZlcnNlX0RDVFtjaV0gPSBtZXRob2RfcHRyOw0KLSAgICAvKiBDcmVhdGUgbXVsdGlwbGllciB0YWJsZSBmcm9tIHF1YW50IHRhYmxlLg0KLSAgICAgKiBIb3dldmVyLCB3ZSBjYW4gc2tpcCB0aGlzIGlmIHRoZSBjb21wb25lbnQgaXMgdW5pbnRlcmVzdGluZw0KLSAgICAgKiBvciBpZiB3ZSBhbHJlYWR5IGJ1aWx0IHRoZSB0YWJsZS4gIEFsc28sIGlmIG5vIHF1YW50IHRhYmxlDQotICAgICAqIGhhcyB5ZXQgYmVlbiBzYXZlZCBmb3IgdGhlIGNvbXBvbmVudCwgd2UgbGVhdmUgdGhlDQotICAgICAqIG11bHRpcGxpZXIgdGFibGUgYWxsLXplcm87IHdlJ2xsIGJlIHJlYWRpbmcgemVyb2VzIGZyb20gdGhlDQotICAgICAqIGNvZWZmaWNpZW50IGNvbnRyb2xsZXIncyBidWZmZXIgYW55d2F5Lg0KLSAgICAgKi8NCi0gICAgaWYgKCEgY29tcHB0ci0+Y29tcG9uZW50X25lZWRlZCB8fCBpZGN0LT5jdXJfbWV0aG9kW2NpXSA9PSBtZXRob2QpDQotICAgICAgY29udGludWU7DQotICAgIHF0YmwgPSBjb21wcHRyLT5xdWFudF90YWJsZTsNCi0gICAgaWYgKHF0YmwgPT0gTlVMTCkJCS8qIGhhcHBlbnMgaWYgbm8gZGF0YSB5ZXQgZm9yIGNvbXBvbmVudCAqLw0KLSAgICAgIGNvbnRpbnVlOw0KLSAgICBpZGN0LT5jdXJfbWV0aG9kW2NpXSA9IG1ldGhvZDsNCi0gICAgc3dpdGNoIChtZXRob2QpIHsNCi0jaWZkZWYgUFJPVklERV9JU0xPV19UQUJMRVMNCi0gICAgY2FzZSBKRENUX0lTTE9XOg0KLSAgICAgIHsNCi0JLyogRm9yIExMJk0gSURDVCBtZXRob2QsIG11bHRpcGxpZXJzIGFyZSBlcXVhbCB0byByYXcgcXVhbnRpemF0aW9uDQotCSAqIGNvZWZmaWNpZW50cywgYnV0IGFyZSBzdG9yZWQgYXMgaW50cyB0byBlbnN1cmUgYWNjZXNzIGVmZmljaWVuY3kuDQotCSAqLw0KLQlJU0xPV19NVUxUX1RZUEUgKiBpc210YmwgPSAoSVNMT1dfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsNCi0JZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsNCi0JICBpc210YmxbaV0gPSAoSVNMT1dfTVVMVF9UWVBFKSBxdGJsLT5xdWFudHZhbFtpXTsNCi0JfQ0KLSAgICAgIH0NCi0gICAgICBicmVhazsNCi0jZW5kaWYNCi0jaWZkZWYgRENUX0lGQVNUX1NVUFBPUlRFRA0KLSAgICBjYXNlIEpEQ1RfSUZBU1Q6DQotICAgICAgew0KLQkvKiBGb3IgQUEmTiBJRENUIG1ldGhvZCwgbXVsdGlwbGllcnMgYXJlIGVxdWFsIHRvIHF1YW50aXphdGlvbg0KLQkgKiBjb2VmZmljaWVudHMgc2NhbGVkIGJ5IHNjYWxlZmFjdG9yW3Jvd10qc2NhbGVmYWN0b3JbY29sXSwgd2hlcmUNCi0JICogICBzY2FsZWZhY3RvclswXSA9IDENCi0JICogICBzY2FsZWZhY3RvcltrXSA9IGNvcyhrKlBJLzE2KSAqIHNxcnQoMikgICAgZm9yIGs9MS4uNw0KLQkgKiBGb3IgaW50ZWdlciBvcGVyYXRpb24sIHRoZSBtdWx0aXBsaWVyIHRhYmxlIGlzIHRvIGJlIHNjYWxlZCBieQ0KLQkgKiBJRkFTVF9TQ0FMRV9CSVRTLg0KLQkgKi8NCi0JSUZBU1RfTVVMVF9UWVBFICogaWZtdGJsID0gKElGQVNUX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7DQotI2RlZmluZSBDT05TVF9CSVRTIDE0DQotCXN0YXRpYyBjb25zdCBJTlQxNiBhYW5zY2FsZXNbRENUU0laRTJdID0gew0KLQkgIC8qIHByZWNvbXB1dGVkIHZhbHVlcyBzY2FsZWQgdXAgYnkgMTQgYml0cyAqLw0KLQkgIDE2Mzg0LCAyMjcyNSwgMjE0MDcsIDE5MjY2LCAxNjM4NCwgMTI4NzMsICA4ODY3LCAgNDUyMCwNCi0JICAyMjcyNSwgMzE1MjEsIDI5NjkyLCAyNjcyMiwgMjI3MjUsIDE3ODU1LCAxMjI5OSwgIDYyNzAsDQotCSAgMjE0MDcsIDI5NjkyLCAyNzk2OSwgMjUxNzIsIDIxNDA3LCAxNjgxOSwgMTE1ODUsICA1OTA2LA0KLQkgIDE5MjY2LCAyNjcyMiwgMjUxNzIsIDIyNjU0LCAxOTI2NiwgMTUxMzcsIDEwNDI2LCAgNTMxNSwNCi0JICAxNjM4NCwgMjI3MjUsIDIxNDA3LCAxOTI2NiwgMTYzODQsIDEyODczLCAgODg2NywgIDQ1MjAsDQotCSAgMTI4NzMsIDE3ODU1LCAxNjgxOSwgMTUxMzcsIDEyODczLCAxMDExNCwgIDY5NjcsICAzNTUyLA0KLQkgICA4ODY3LCAxMjI5OSwgMTE1ODUsIDEwNDI2LCAgODg2NywgIDY5NjcsICA0Nzk5LCAgMjQ0NiwNCi0JICAgNDUyMCwgIDYyNzAsICA1OTA2LCAgNTMxNSwgIDQ1MjAsICAzNTUyLCAgMjQ0NiwgIDEyNDcNCi0JfTsNCi0JU0hJRlRfVEVNUFMNCi0NCi0JZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsNCi0JICBpZm10YmxbaV0gPSAoSUZBU1RfTVVMVF9UWVBFKQ0KLQkgICAgREVTQ0FMRShNVUxUSVBMWTE2VjE2KChJTlQzMikgcXRibC0+cXVhbnR2YWxbaV0sDQotCQkJCSAgKElOVDMyKSBhYW5zY2FsZXNbaV0pLA0KLQkJICAgIENPTlNUX0JJVFMtSUZBU1RfU0NBTEVfQklUUyk7DQotCX0NCi0gICAgICB9DQotICAgICAgYnJlYWs7DQotI2VuZGlmDQotI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQNCi0gICAgY2FzZSBKRENUX0ZMT0FUOg0KLSAgICAgIHsNCi0JLyogRm9yIGZsb2F0IEFBJk4gSURDVCBtZXRob2QsIG11bHRpcGxpZXJzIGFyZSBlcXVhbCB0byBxdWFudGl6YXRpb24NCi0JICogY29lZmZpY2llbnRzIHNjYWxlZCBieSBzY2FsZWZhY3Rvcltyb3ddKnNjYWxlZmFjdG9yW2NvbF0sIHdoZXJlDQotCSAqICAgc2NhbGVmYWN0b3JbMF0gPSAxDQotCSAqICAgc2NhbGVmYWN0b3Jba10gPSBjb3MoaypQSS8xNikgKiBzcXJ0KDIpICAgIGZvciBrPTEuLjcNCi0JICovDQotCUZMT0FUX01VTFRfVFlQRSAqIGZtdGJsID0gKEZMT0FUX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7DQotCWludCByb3csIGNvbDsNCi0Jc3RhdGljIGNvbnN0IGRvdWJsZSBhYW5zY2FsZWZhY3RvcltEQ1RTSVpFXSA9IHsNCi0JICAxLjAsIDEuMzg3MDM5ODQ1LCAxLjMwNjU2Mjk2NSwgMS4xNzU4NzU2MDIsDQotCSAgMS4wLCAwLjc4NTY5NDk1OCwgMC41NDExOTYxMDAsIDAuMjc1ODk5Mzc5DQotCX07DQotDQotCWkgPSAwOw0KLQlmb3IgKHJvdyA9IDA7IHJvdyA8IERDVFNJWkU7IHJvdysrKSB7DQotCSAgZm9yIChjb2wgPSAwOyBjb2wgPCBEQ1RTSVpFOyBjb2wrKykgew0KLQkgICAgZm10YmxbaV0gPSAoRkxPQVRfTVVMVF9UWVBFKQ0KLQkgICAgICAoKGRvdWJsZSkgcXRibC0+cXVhbnR2YWxbaV0gKg0KLQkgICAgICAgYWFuc2NhbGVmYWN0b3Jbcm93XSAqIGFhbnNjYWxlZmFjdG9yW2NvbF0pOw0KLQkgICAgaSsrOw0KLQkgIH0NCi0JfQ0KLSAgICAgIH0NCi0gICAgICBicmVhazsNCi0jZW5kaWYNCi0gICAgZGVmYXVsdDoNCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7DQotICAgICAgYnJlYWs7DQotICAgIH0NCi0gIH0NCi19DQotDQotDQotLyoNCi0gKiBJbml0aWFsaXplIElEQ1QgbWFuYWdlci4NCi0gKi8NCi0NCi1HTE9CQUwodm9pZCkNCi1qaW5pdF9pbnZlcnNlX2RjdCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBteV9pZGN0X3B0ciBpZGN0Ow0KLSAgaW50IGNpOw0KLSAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsNCi0NCi0gIGlkY3QgPSAobXlfaWRjdF9wdHIpDQotICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsDQotCQkJCVNJWkVPRihteV9pZGN0X2NvbnRyb2xsZXIpKTsNCi0gIGNpbmZvLT5pZGN0ID0gKHN0cnVjdCBqcGVnX2ludmVyc2VfZGN0ICopIGlkY3Q7DQotICBpZGN0LT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3M7DQotDQotICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOw0KLSAgICAgICBjaSsrLCBjb21wcHRyKyspIHsNCi0gICAgLyogQWxsb2NhdGUgYW5kIHByZS16ZXJvIGEgbXVsdGlwbGllciB0YWJsZSBmb3IgZWFjaCBjb21wb25lbnQgKi8NCi0gICAgY29tcHB0ci0+ZGN0X3RhYmxlID0NCi0gICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQkgIFNJWkVPRihtdWx0aXBsaWVyX3RhYmxlKSk7DQotICAgIE1FTVpFUk8oY29tcHB0ci0+ZGN0X3RhYmxlLCBTSVpFT0YobXVsdGlwbGllcl90YWJsZSkpOw0KLSAgICAvKiBNYXJrIG11bHRpcGxpZXIgdGFibGUgbm90IHlldCBzZXQgdXAgZm9yIGFueSBtZXRob2QgKi8NCi0gICAgaWRjdC0+Y3VyX21ldGhvZFtjaV0gPSAtMTsNCi0gIH0NCi19DQotDQotI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fDQorI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykKKy8qCisgKiBqZGRjdG1nci5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGludmVyc2UtRENUIG1hbmFnZW1lbnQgbG9naWMuCisgKiBUaGlzIGNvZGUgc2VsZWN0cyBhIHBhcnRpY3VsYXIgSURDVCBpbXBsZW1lbnRhdGlvbiB0byBiZSB1c2VkLAorICogYW5kIGl0IHBlcmZvcm1zIHJlbGF0ZWQgaG91c2VrZWVwaW5nIGNob3Jlcy4gIE5vIGNvZGUgaW4gdGhpcyBmaWxlCisgKiBpcyBleGVjdXRlZCBwZXIgSURDVCBzdGVwLCBvbmx5IGR1cmluZyBvdXRwdXQgcGFzcyBzZXR1cC4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIElEQ1Qgcm91dGluZXMgYXJlIHJlc3BvbnNpYmxlIGZvciBwZXJmb3JtaW5nIGNvZWZmaWNpZW50CisgKiBkZXF1YW50aXphdGlvbiBhcyB3ZWxsIGFzIHRoZSBJRENUIHByb3Blci4gIFRoaXMgbW9kdWxlIHNldHMgdXAgdGhlCisgKiBkZXF1YW50aXphdGlvbiBtdWx0aXBsaWVyIHRhYmxlIG5lZWRlZCBieSB0aGUgSURDVCByb3V0aW5lLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqZGN0LmgiCQkvKiBQcml2YXRlIGRlY2xhcmF0aW9ucyBmb3IgRENUIHN1YnN5c3RlbSAqLworCisKKy8qCisgKiBUaGUgZGVjb21wcmVzc29yIGlucHV0IHNpZGUgKGpkaW5wdXQuYykgc2F2ZXMgYXdheSB0aGUgYXBwcm9wcmlhdGUKKyAqIHF1YW50aXphdGlvbiB0YWJsZSBmb3IgZWFjaCBjb21wb25lbnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBzY2FuCisgKiBpbnZvbHZpbmcgdGhhdCBjb21wb25lbnQuICAoVGhpcyBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gY29ycmVjdGx5CisgKiBkZWNvZGUgZmlsZXMgdGhhdCByZXVzZSBRLXRhYmxlIHNsb3RzLikKKyAqIFdoZW4gd2UgYXJlIHJlYWR5IHRvIG1ha2UgYW4gb3V0cHV0IHBhc3MsIHRoZSBzYXZlZCBRLXRhYmxlIGlzIGNvbnZlcnRlZAorICogdG8gYSBtdWx0aXBsaWVyIHRhYmxlIHRoYXQgd2lsbCBhY3R1YWxseSBiZSB1c2VkIGJ5IHRoZSBJRENUIHJvdXRpbmUuCisgKiBUaGUgbXVsdGlwbGllciB0YWJsZSBjb250ZW50cyBhcmUgSURDVC1tZXRob2QtZGVwZW5kZW50LiAgVG8gc3VwcG9ydAorICogYXBwbGljYXRpb24gY2hhbmdlcyBpbiBJRENUIG1ldGhvZCBiZXR3ZWVuIHNjYW5zLCB3ZSBjYW4gcmVtYWtlIHRoZQorICogbXVsdGlwbGllciB0YWJsZXMgaWYgbmVjZXNzYXJ5LgorICogSW4gYnVmZmVyZWQtaW1hZ2UgbW9kZSwgdGhlIGZpcnN0IG91dHB1dCBwYXNzIG1heSBvY2N1ciBiZWZvcmUgYW55IGRhdGEKKyAqIGhhcyBiZWVuIHNlZW4gZm9yIHNvbWUgY29tcG9uZW50cywgYW5kIHRodXMgYmVmb3JlIHRoZWlyIFEtdGFibGVzIGhhdmUKKyAqIGJlZW4gc2F2ZWQgYXdheS4gIFRvIGhhbmRsZSB0aGlzIGNhc2UsIG11bHRpcGxpZXIgdGFibGVzIGFyZSBwcmVzZXQKKyAqIHRvIHplcm9lczsgdGhlIHJlc3VsdCBvZiB0aGUgSURDVCB3aWxsIGJlIGEgbmV1dHJhbCBncmF5IGxldmVsLgorICovCisKKworLyogUHJpdmF0ZSBzdWJvYmplY3QgZm9yIHRoaXMgbW9kdWxlICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IGpwZWdfaW52ZXJzZV9kY3QgcHViOwkvKiBwdWJsaWMgZmllbGRzICovCisKKyAgLyogVGhpcyBhcnJheSBjb250YWlucyB0aGUgSURDVCBtZXRob2QgY29kZSB0aGF0IGVhY2ggbXVsdGlwbGllciB0YWJsZQorICAgKiBpcyBjdXJyZW50bHkgc2V0IHVwIGZvciwgb3IgLTEgaWYgaXQncyBub3QgeWV0IHNldCB1cC4KKyAgICogVGhlIGFjdHVhbCBtdWx0aXBsaWVyIHRhYmxlcyBhcmUgcG9pbnRlZCB0byBieSBkY3RfdGFibGUgaW4gdGhlCisgICAqIHBlci1jb21wb25lbnQgY29tcF9pbmZvIHN0cnVjdHVyZXMuCisgICAqLworICBpbnQgY3VyX21ldGhvZFtNQVhfQ09NUE9ORU5UU107Cit9IG15X2lkY3RfY29udHJvbGxlcjsKKwordHlwZWRlZiBteV9pZGN0X2NvbnRyb2xsZXIgKiBteV9pZGN0X3B0cjsKKworCisvKiBBbGxvY2F0ZWQgbXVsdGlwbGllciB0YWJsZXM6IGJpZyBlbm91Z2ggZm9yIGFueSBzdXBwb3J0ZWQgdmFyaWFudCAqLworCit0eXBlZGVmIHVuaW9uIHsKKyAgSVNMT1dfTVVMVF9UWVBFIGlzbG93X2FycmF5W0RDVFNJWkUyXTsKKyNpZmRlZiBEQ1RfSUZBU1RfU1VQUE9SVEVECisgIElGQVNUX01VTFRfVFlQRSBpZmFzdF9hcnJheVtEQ1RTSVpFMl07CisjZW5kaWYKKyNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECisgIEZMT0FUX01VTFRfVFlQRSBmbG9hdF9hcnJheVtEQ1RTSVpFMl07CisjZW5kaWYKK30gbXVsdGlwbGllcl90YWJsZTsKKworCisvKiBUaGUgY3VycmVudCBzY2FsZWQtSURDVCByb3V0aW5lcyByZXF1aXJlIElTTE9XLXN0eWxlIG11bHRpcGxpZXIgdGFibGVzLAorICogc28gYmUgc3VyZSB0byBjb21waWxlIHRoYXQgY29kZSBpZiBlaXRoZXIgSVNMT1cgb3IgU0NBTElORyBpcyByZXF1ZXN0ZWQuCisgKi8KKyNpZmRlZiBEQ1RfSVNMT1dfU1VQUE9SVEVECisjZGVmaW5lIFBST1ZJREVfSVNMT1dfVEFCTEVTCisjZWxzZQorI2lmZGVmIElEQ1RfU0NBTElOR19TVVBQT1JURUQKKyNkZWZpbmUgUFJPVklERV9JU0xPV19UQUJMRVMKKyNlbmRpZgorI2VuZGlmCisKKworLyoKKyAqIFByZXBhcmUgZm9yIGFuIG91dHB1dCBwYXNzLgorICogSGVyZSB3ZSBzZWxlY3QgdGhlIHByb3BlciBJRENUIHJvdXRpbmUgZm9yIGVhY2ggY29tcG9uZW50IGFuZCBidWlsZAorICogYSBtYXRjaGluZyBtdWx0aXBsaWVyIHRhYmxlLgorICovCisKK01FVEhPRERFRih2b2lkKQorc3RhcnRfcGFzcyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfaWRjdF9wdHIgaWRjdCA9IChteV9pZGN0X3B0cikgY2luZm8tPmlkY3Q7CisgIGludCBjaSwgaTsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKyAgaW50IG1ldGhvZCA9IDA7CisgIGludmVyc2VfRENUX21ldGhvZF9wdHIgbWV0aG9kX3B0ciA9IE5VTEw7CisgIEpRVUFOVF9UQkwgKiBxdGJsOworCisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgLyogU2VsZWN0IHRoZSBwcm9wZXIgSURDVCByb3V0aW5lIGZvciB0aGlzIGNvbXBvbmVudCdzIHNjYWxpbmcgKi8KKyAgICBzd2l0Y2ggKGNvbXBwdHItPkRDVF9zY2FsZWRfc2l6ZSkgeworI2lmZGVmIElEQ1RfU0NBTElOR19TVVBQT1JURUQKKyAgICBjYXNlIDE6CisgICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzF4MTsKKyAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGppZGN0cmVkIHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfMngyOworICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamlkY3RyZWQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF80eDQ7CisgICAgICBtZXRob2QgPSBKRENUX0lTTE9XOwkvKiBqaWRjdHJlZCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCisgICAgICBicmVhazsKKyNlbmRpZgorICAgIGNhc2UgRENUU0laRToKKyAgICAgIHN3aXRjaCAoY2luZm8tPmRjdF9tZXRob2QpIHsKKyNpZmRlZiBEQ1RfSVNMT1dfU1VQUE9SVEVECisgICAgICBjYXNlIEpEQ1RfSVNMT1c6CisJbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF9pc2xvdzsKKwltZXRob2QgPSBKRENUX0lTTE9XOworCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRENUX0lGQVNUX1NVUFBPUlRFRAorICAgICAgY2FzZSBKRENUX0lGQVNUOgorCW1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfaWZhc3Q7CisJbWV0aG9kID0gSkRDVF9JRkFTVDsKKwlicmVhazsKKyNlbmRpZgorI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKKyAgICAgIGNhc2UgSkRDVF9GTE9BVDoKKwltZXRob2RfcHRyID0ganBlZ19pZGN0X2Zsb2F0OworCW1ldGhvZCA9IEpEQ1RfRkxPQVQ7CisJYnJlYWs7CisjZW5kaWYKKyAgICAgIGRlZmF1bHQ6CisJRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOworCWJyZWFrOworICAgICAgfQorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9EQ1RTSVpFLCBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemUpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGlkY3QtPnB1Yi5pbnZlcnNlX0RDVFtjaV0gPSBtZXRob2RfcHRyOworICAgIC8qIENyZWF0ZSBtdWx0aXBsaWVyIHRhYmxlIGZyb20gcXVhbnQgdGFibGUuCisgICAgICogSG93ZXZlciwgd2UgY2FuIHNraXAgdGhpcyBpZiB0aGUgY29tcG9uZW50IGlzIHVuaW50ZXJlc3RpbmcKKyAgICAgKiBvciBpZiB3ZSBhbHJlYWR5IGJ1aWx0IHRoZSB0YWJsZS4gIEFsc28sIGlmIG5vIHF1YW50IHRhYmxlCisgICAgICogaGFzIHlldCBiZWVuIHNhdmVkIGZvciB0aGUgY29tcG9uZW50LCB3ZSBsZWF2ZSB0aGUKKyAgICAgKiBtdWx0aXBsaWVyIHRhYmxlIGFsbC16ZXJvOyB3ZSdsbCBiZSByZWFkaW5nIHplcm9lcyBmcm9tIHRoZQorICAgICAqIGNvZWZmaWNpZW50IGNvbnRyb2xsZXIncyBidWZmZXIgYW55d2F5LgorICAgICAqLworICAgIGlmICghIGNvbXBwdHItPmNvbXBvbmVudF9uZWVkZWQgfHwgaWRjdC0+Y3VyX21ldGhvZFtjaV0gPT0gbWV0aG9kKQorICAgICAgY29udGludWU7CisgICAgcXRibCA9IGNvbXBwdHItPnF1YW50X3RhYmxlOworICAgIGlmIChxdGJsID09IE5VTEwpCQkvKiBoYXBwZW5zIGlmIG5vIGRhdGEgeWV0IGZvciBjb21wb25lbnQgKi8KKyAgICAgIGNvbnRpbnVlOworICAgIGlkY3QtPmN1cl9tZXRob2RbY2ldID0gbWV0aG9kOworICAgIHN3aXRjaCAobWV0aG9kKSB7CisjaWZkZWYgUFJPVklERV9JU0xPV19UQUJMRVMKKyAgICBjYXNlIEpEQ1RfSVNMT1c6CisgICAgICB7CisJLyogRm9yIExMJk0gSURDVCBtZXRob2QsIG11bHRpcGxpZXJzIGFyZSBlcXVhbCB0byByYXcgcXVhbnRpemF0aW9uCisJICogY29lZmZpY2llbnRzLCBidXQgYXJlIHN0b3JlZCBhcyBpbnRzIHRvIGVuc3VyZSBhY2Nlc3MgZWZmaWNpZW5jeS4KKwkgKi8KKwlJU0xPV19NVUxUX1RZUEUgKiBpc210YmwgPSAoSVNMT1dfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsKKwlmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykgeworCSAgaXNtdGJsW2ldID0gKElTTE9XX01VTFRfVFlQRSkgcXRibC0+cXVhbnR2YWxbaV07CisJfQorICAgICAgfQorICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBEQ1RfSUZBU1RfU1VQUE9SVEVECisgICAgY2FzZSBKRENUX0lGQVNUOgorICAgICAgeworCS8qIEZvciBBQSZOIElEQ1QgbWV0aG9kLCBtdWx0aXBsaWVycyBhcmUgZXF1YWwgdG8gcXVhbnRpemF0aW9uCisJICogY29lZmZpY2llbnRzIHNjYWxlZCBieSBzY2FsZWZhY3Rvcltyb3ddKnNjYWxlZmFjdG9yW2NvbF0sIHdoZXJlCisJICogICBzY2FsZWZhY3RvclswXSA9IDEKKwkgKiAgIHNjYWxlZmFjdG9yW2tdID0gY29zKGsqUEkvMTYpICogc3FydCgyKSAgICBmb3Igaz0xLi43CisJICogRm9yIGludGVnZXIgb3BlcmF0aW9uLCB0aGUgbXVsdGlwbGllciB0YWJsZSBpcyB0byBiZSBzY2FsZWQgYnkKKwkgKiBJRkFTVF9TQ0FMRV9CSVRTLgorCSAqLworCUlGQVNUX01VTFRfVFlQRSAqIGlmbXRibCA9IChJRkFTVF9NVUxUX1RZUEUgKikgY29tcHB0ci0+ZGN0X3RhYmxlOworI2RlZmluZSBDT05TVF9CSVRTIDE0CisJc3RhdGljIGNvbnN0IElOVDE2IGFhbnNjYWxlc1tEQ1RTSVpFMl0gPSB7CisJICAvKiBwcmVjb21wdXRlZCB2YWx1ZXMgc2NhbGVkIHVwIGJ5IDE0IGJpdHMgKi8KKwkgIDE2Mzg0LCAyMjcyNSwgMjE0MDcsIDE5MjY2LCAxNjM4NCwgMTI4NzMsICA4ODY3LCAgNDUyMCwKKwkgIDIyNzI1LCAzMTUyMSwgMjk2OTIsIDI2NzIyLCAyMjcyNSwgMTc4NTUsIDEyMjk5LCAgNjI3MCwKKwkgIDIxNDA3LCAyOTY5MiwgMjc5NjksIDI1MTcyLCAyMTQwNywgMTY4MTksIDExNTg1LCAgNTkwNiwKKwkgIDE5MjY2LCAyNjcyMiwgMjUxNzIsIDIyNjU0LCAxOTI2NiwgMTUxMzcsIDEwNDI2LCAgNTMxNSwKKwkgIDE2Mzg0LCAyMjcyNSwgMjE0MDcsIDE5MjY2LCAxNjM4NCwgMTI4NzMsICA4ODY3LCAgNDUyMCwKKwkgIDEyODczLCAxNzg1NSwgMTY4MTksIDE1MTM3LCAxMjg3MywgMTAxMTQsICA2OTY3LCAgMzU1MiwKKwkgICA4ODY3LCAxMjI5OSwgMTE1ODUsIDEwNDI2LCAgODg2NywgIDY5NjcsICA0Nzk5LCAgMjQ0NiwKKwkgICA0NTIwLCAgNjI3MCwgIDU5MDYsICA1MzE1LCAgNDUyMCwgIDM1NTIsICAyNDQ2LCAgMTI0NworCX07CisJU0hJRlRfVEVNUFMKKworCWZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFMjsgaSsrKSB7CisJICBpZm10YmxbaV0gPSAoSUZBU1RfTVVMVF9UWVBFKQorCSAgICBERVNDQUxFKE1VTFRJUExZMTZWMTYoKElOVDMyKSBxdGJsLT5xdWFudHZhbFtpXSwKKwkJCQkgIChJTlQzMikgYWFuc2NhbGVzW2ldKSwKKwkJICAgIENPTlNUX0JJVFMtSUZBU1RfU0NBTEVfQklUUyk7CisJfQorICAgICAgfQorICAgICAgYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECisgICAgY2FzZSBKRENUX0ZMT0FUOgorICAgICAgeworCS8qIEZvciBmbG9hdCBBQSZOIElEQ1QgbWV0aG9kLCBtdWx0aXBsaWVycyBhcmUgZXF1YWwgdG8gcXVhbnRpemF0aW9uCisJICogY29lZmZpY2llbnRzIHNjYWxlZCBieSBzY2FsZWZhY3Rvcltyb3ddKnNjYWxlZmFjdG9yW2NvbF0sIHdoZXJlCisJICogICBzY2FsZWZhY3RvclswXSA9IDEKKwkgKiAgIHNjYWxlZmFjdG9yW2tdID0gY29zKGsqUEkvMTYpICogc3FydCgyKSAgICBmb3Igaz0xLi43CisJICovCisJRkxPQVRfTVVMVF9UWVBFICogZm10YmwgPSAoRkxPQVRfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsKKwlpbnQgcm93LCBjb2w7CisJc3RhdGljIGNvbnN0IGRvdWJsZSBhYW5zY2FsZWZhY3RvcltEQ1RTSVpFXSA9IHsKKwkgIDEuMCwgMS4zODcwMzk4NDUsIDEuMzA2NTYyOTY1LCAxLjE3NTg3NTYwMiwKKwkgIDEuMCwgMC43ODU2OTQ5NTgsIDAuNTQxMTk2MTAwLCAwLjI3NTg5OTM3OQorCX07CisKKwlpID0gMDsKKwlmb3IgKHJvdyA9IDA7IHJvdyA8IERDVFNJWkU7IHJvdysrKSB7CisJICBmb3IgKGNvbCA9IDA7IGNvbCA8IERDVFNJWkU7IGNvbCsrKSB7CisJICAgIGZtdGJsW2ldID0gKEZMT0FUX01VTFRfVFlQRSkKKwkgICAgICAoKGRvdWJsZSkgcXRibC0+cXVhbnR2YWxbaV0gKgorCSAgICAgICBhYW5zY2FsZWZhY3Rvcltyb3ddICogYWFuc2NhbGVmYWN0b3JbY29sXSk7CisJICAgIGkrKzsKKwkgIH0KKwl9CisgICAgICB9CisgICAgICBicmVhazsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KK30KKworCisvKgorICogSW5pdGlhbGl6ZSBJRENUIG1hbmFnZXIuCisgKi8KKworR0xPQkFMKHZvaWQpCitqaW5pdF9pbnZlcnNlX2RjdCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfaWRjdF9wdHIgaWRjdDsKKyAgaW50IGNpOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgIGlkY3QgPSAobXlfaWRjdF9wdHIpCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkJCQlTSVpFT0YobXlfaWRjdF9jb250cm9sbGVyKSk7CisgIGNpbmZvLT5pZGN0ID0gKHN0cnVjdCBqcGVnX2ludmVyc2VfZGN0ICopIGlkY3Q7CisgIGlkY3QtPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzczsKKworICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOworICAgICAgIGNpKyssIGNvbXBwdHIrKykgeworICAgIC8qIEFsbG9jYXRlIGFuZCBwcmUtemVybyBhIG11bHRpcGxpZXIgdGFibGUgZm9yIGVhY2ggY29tcG9uZW50ICovCisgICAgY29tcHB0ci0+ZGN0X3RhYmxlID0KKyAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJICBTSVpFT0YobXVsdGlwbGllcl90YWJsZSkpOworICAgIE1FTVpFUk8oY29tcHB0ci0+ZGN0X3RhYmxlLCBTSVpFT0YobXVsdGlwbGllcl90YWJsZSkpOworICAgIC8qIE1hcmsgbXVsdGlwbGllciB0YWJsZSBub3QgeWV0IHNldCB1cCBmb3IgYW55IG1ldGhvZCAqLworICAgIGlkY3QtPmN1cl9tZXRob2RbY2ldID0gLTE7CisgIH0KK30KKworI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZGh1ZmYuYyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pkaHVmZi5jCmluZGV4IGI3MjRkNTIuLmRjMzdkYjUgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pkaHVmZi5jCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pkaHVmZi5jCkBAIC0xLDY1NyArMSw2NTcgQEAKLSNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pDQotLyoNCi0gKiBqZGh1ZmYuYw0KLSAqDQotICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTcsIFRob21hcyBHLiBMYW5lLg0KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuDQotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLg0KLSAqDQotICogVGhpcyBmaWxlIGNvbnRhaW5zIEh1ZmZtYW4gZW50cm9weSBkZWNvZGluZyByb3V0aW5lcy4NCi0gKg0KLSAqIE11Y2ggb2YgdGhlIGNvbXBsZXhpdHkgaGVyZSBoYXMgdG8gZG8gd2l0aCBzdXBwb3J0aW5nIGlucHV0IHN1c3BlbnNpb24uDQotICogSWYgdGhlIGRhdGEgc291cmNlIG1vZHVsZSBkZW1hbmRzIHN1c3BlbnNpb24sIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBiYWNrDQotICogdXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IE1DVS4gIFRvIGRvIHRoaXMsIHdlIGNvcHkgc3RhdGUgdmFyaWFibGVzDQotICogaW50byBsb2NhbCB3b3JraW5nIHN0b3JhZ2UsIGFuZCB1cGRhdGUgdGhlbSBiYWNrIHRvIHRoZSBwZXJtYW5lbnQNCi0gKiBzdG9yYWdlIG9ubHkgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgYW4gTUNVLg0KLSAqLw0KLQ0KLSNkZWZpbmUgSlBFR19JTlRFUk5BTFMNCi0jaW5jbHVkZSAiamluY2x1ZGUuaCINCi0jaW5jbHVkZSAianBlZ2xpYi5oIg0KLSNpbmNsdWRlICJqZGh1ZmYuaCIJCS8qIERlY2xhcmF0aW9ucyBzaGFyZWQgd2l0aCBqZHBodWZmLmMgKi8NCi0NCi0jaWZkZWYgX0ZYX01BTkFHRURfQ09ERV8NCi0jZGVmaW5lIHNhdmFibGVfc3RhdGUJc2F2YWJsZV9zdGF0ZV9kDQotI2VuZGlmDQotDQotLyoNCi0gKiBFeHBhbmRlZCBlbnRyb3B5IGRlY29kZXIgb2JqZWN0IGZvciBIdWZmbWFuIGRlY29kaW5nLg0KLSAqDQotICogVGhlIHNhdmFibGVfc3RhdGUgc3VicmVjb3JkIGNvbnRhaW5zIGZpZWxkcyB0aGF0IGNoYW5nZSB3aXRoaW4gYW4gTUNVLA0KLSAqIGJ1dCBtdXN0IG5vdCBiZSB1cGRhdGVkIHBlcm1hbmVudGx5IHVudGlsIHdlIGNvbXBsZXRlIHRoZSBNQ1UuDQotICovDQotDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgaW50IGxhc3RfZGNfdmFsW01BWF9DT01QU19JTl9TQ0FOXTsgLyogbGFzdCBEQyBjb2VmIGZvciBlYWNoIGNvbXBvbmVudCAqLw0KLX0gc2F2YWJsZV9zdGF0ZTsNCi0NCi0vKiBUaGlzIG1hY3JvIGlzIHRvIHdvcmsgYXJvdW5kIGNvbXBpbGVycyB3aXRoIG1pc3Npbmcgb3IgYnJva2VuDQotICogc3RydWN0dXJlIGFzc2lnbm1lbnQuICBZb3UnbGwgbmVlZCB0byBmaXggdGhpcyBjb2RlIGlmIHlvdSBoYXZlDQotICogc3VjaCBhIGNvbXBpbGVyIGFuZCB5b3UgY2hhbmdlIE1BWF9DT01QU19JTl9TQ0FOLg0KLSAqLw0KLQ0KLSNpZm5kZWYgTk9fU1RSVUNUX0FTU0lHTg0KLSNkZWZpbmUgQVNTSUdOX1NUQVRFKGRlc3Qsc3JjKSAgKChkZXN0KSA9IChzcmMpKQ0KLSNlbHNlDQotI2lmIE1BWF9DT01QU19JTl9TQ0FOID09IDQNCi0jZGVmaW5lIEFTU0lHTl9TVEFURShkZXN0LHNyYykgIFwNCi0JKChkZXN0KS5sYXN0X2RjX3ZhbFswXSA9IChzcmMpLmxhc3RfZGNfdmFsWzBdLCBcDQotCSAoZGVzdCkubGFzdF9kY192YWxbMV0gPSAoc3JjKS5sYXN0X2RjX3ZhbFsxXSwgXA0KLQkgKGRlc3QpLmxhc3RfZGNfdmFsWzJdID0gKHNyYykubGFzdF9kY192YWxbMl0sIFwNCi0JIChkZXN0KS5sYXN0X2RjX3ZhbFszXSA9IChzcmMpLmxhc3RfZGNfdmFsWzNdKQ0KLSNlbmRpZg0KLSNlbmRpZg0KLQ0KLQ0KLXR5cGVkZWYgc3RydWN0IHsNCi0gIHN0cnVjdCBqcGVnX2VudHJvcHlfZGVjb2RlciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8NCi0NCi0gIC8qIFRoZXNlIGZpZWxkcyBhcmUgbG9hZGVkIGludG8gbG9jYWwgdmFyaWFibGVzIGF0IHN0YXJ0IG9mIGVhY2ggTUNVLg0KLSAgICogSW4gY2FzZSBvZiBzdXNwZW5zaW9uLCB3ZSBleGl0IFdJVEhPVVQgdXBkYXRpbmcgdGhlbS4NCi0gICAqLw0KLSAgYml0cmVhZF9wZXJtX3N0YXRlIGJpdHN0YXRlOwkvKiBCaXQgYnVmZmVyIGF0IHN0YXJ0IG9mIE1DVSAqLw0KLSAgc2F2YWJsZV9zdGF0ZSBzYXZlZDsJCS8qIE90aGVyIHN0YXRlIGF0IHN0YXJ0IG9mIE1DVSAqLw0KLQ0KLSAgLyogVGhlc2UgZmllbGRzIGFyZSBOT1QgbG9hZGVkIGludG8gbG9jYWwgd29ya2luZyBzdGF0ZS4gKi8NCi0gIHVuc2lnbmVkIGludCByZXN0YXJ0c190b19nbzsJLyogTUNVcyBsZWZ0IGluIHRoaXMgcmVzdGFydCBpbnRlcnZhbCAqLw0KLQ0KLSAgLyogUG9pbnRlcnMgdG8gZGVyaXZlZCB0YWJsZXMgKHRoZXNlIHdvcmtzcGFjZXMgaGF2ZSBpbWFnZSBsaWZlc3BhbikgKi8NCi0gIGRfZGVyaXZlZF90YmwgKiBkY19kZXJpdmVkX3RibHNbTlVNX0hVRkZfVEJMU107DQotICBkX2Rlcml2ZWRfdGJsICogYWNfZGVyaXZlZF90YmxzW05VTV9IVUZGX1RCTFNdOw0KLQ0KLSAgLyogUHJlY2FsY3VsYXRlZCBpbmZvIHNldCB1cCBieSBzdGFydF9wYXNzIGZvciB1c2UgaW4gZGVjb2RlX21jdTogKi8NCi0NCi0gIC8qIFBvaW50ZXJzIHRvIGRlcml2ZWQgdGFibGVzIHRvIGJlIHVzZWQgZm9yIGVhY2ggYmxvY2sgd2l0aGluIGFuIE1DVSAqLw0KLSAgZF9kZXJpdmVkX3RibCAqIGRjX2N1cl90YmxzW0RfTUFYX0JMT0NLU19JTl9NQ1VdOw0KLSAgZF9kZXJpdmVkX3RibCAqIGFjX2N1cl90YmxzW0RfTUFYX0JMT0NLU19JTl9NQ1VdOw0KLSAgLyogV2hldGhlciB3ZSBjYXJlIGFib3V0IHRoZSBEQyBhbmQgQUMgY29lZmZpY2llbnQgdmFsdWVzIGZvciBlYWNoIGJsb2NrICovDQotICBib29sZWFuIGRjX25lZWRlZFtEX01BWF9CTE9DS1NfSU5fTUNVXTsNCi0gIGJvb2xlYW4gYWNfbmVlZGVkW0RfTUFYX0JMT0NLU19JTl9NQ1VdOw0KLX0gaHVmZl9lbnRyb3B5X2RlY29kZXI7DQotDQotdHlwZWRlZiBodWZmX2VudHJvcHlfZGVjb2RlciAqIGh1ZmZfZW50cm9weV9wdHI7DQotDQotDQotLyoNCi0gKiBJbml0aWFsaXplIGZvciBhIEh1ZmZtYW4tY29tcHJlc3NlZCBzY2FuLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXN0YXJ0X3Bhc3NfaHVmZl9kZWNvZGVyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsNCi0gIGludCBjaSwgYmxrbiwgZGN0YmwsIGFjdGJsOw0KLSAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7DQotDQotICAvKiBDaGVjayB0aGF0IHRoZSBzY2FuIHBhcmFtZXRlcnMgU3MsIFNlLCBBaC9BbCBhcmUgT0sgZm9yIHNlcXVlbnRpYWwgSlBFRy4NCi0gICAqIFRoaXMgb3VnaHQgdG8gYmUgYW4gZXJyb3IgY29uZGl0aW9uLCBidXQgd2UgbWFrZSBpdCBhIHdhcm5pbmcgYmVjYXVzZQ0KLSAgICogdGhlcmUgYXJlIHNvbWUgYmFzZWxpbmUgZmlsZXMgb3V0IHRoZXJlIHdpdGggYWxsIHplcm9lcyBpbiB0aGVzZSBieXRlcy4NCi0gICAqLw0KLSAgaWYgKGNpbmZvLT5TcyAhPSAwIHx8IGNpbmZvLT5TZSAhPSBEQ1RTSVpFMi0xIHx8DQotICAgICAgY2luZm8tPkFoICE9IDAgfHwgY2luZm8tPkFsICE9IDApDQotICAgIFdBUk5NUyhjaW5mbywgSldSTl9OT1RfU0VRVUVOVElBTCk7DQotDQotICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgew0KLSAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOw0KLSAgICBkY3RibCA9IGNvbXBwdHItPmRjX3RibF9ubzsNCi0gICAgYWN0YmwgPSBjb21wcHRyLT5hY190Ymxfbm87DQotICAgIC8qIENvbXB1dGUgZGVyaXZlZCB2YWx1ZXMgZm9yIEh1ZmZtYW4gdGFibGVzICovDQotICAgIC8qIFdlIG1heSBkbyB0aGlzIG1vcmUgdGhhbiBvbmNlIGZvciBhIHRhYmxlLCBidXQgaXQncyBub3QgZXhwZW5zaXZlICovDQotICAgIGpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsKGNpbmZvLCBUUlVFLCBkY3RibCwNCi0JCQkgICAgJiBlbnRyb3B5LT5kY19kZXJpdmVkX3RibHNbZGN0YmxdKTsNCi0gICAganBlZ19tYWtlX2RfZGVyaXZlZF90YmwoY2luZm8sIEZBTFNFLCBhY3RibCwNCi0JCQkgICAgJiBlbnRyb3B5LT5hY19kZXJpdmVkX3RibHNbYWN0YmxdKTsNCi0gICAgLyogSW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovDQotICAgIGVudHJvcHktPnNhdmVkLmxhc3RfZGNfdmFsW2NpXSA9IDA7DQotICB9DQotDQotICAvKiBQcmVjYWxjdWxhdGUgZGVjb2RpbmcgaW5mbyBmb3IgZWFjaCBibG9jayBpbiBhbiBNQ1Ugb2YgdGhpcyBzY2FuICovDQotICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgew0KLSAgICBjaSA9IGNpbmZvLT5NQ1VfbWVtYmVyc2hpcFtibGtuXTsNCi0gICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsNCi0gICAgLyogUHJlY2FsY3VsYXRlIHdoaWNoIHRhYmxlIHRvIHVzZSBmb3IgZWFjaCBibG9jayAqLw0KLSAgICBlbnRyb3B5LT5kY19jdXJfdGJsc1tibGtuXSA9IGVudHJvcHktPmRjX2Rlcml2ZWRfdGJsc1tjb21wcHRyLT5kY190Ymxfbm9dOw0KLSAgICBlbnRyb3B5LT5hY19jdXJfdGJsc1tibGtuXSA9IGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsc1tjb21wcHRyLT5hY190Ymxfbm9dOw0KLSAgICAvKiBEZWNpZGUgd2hldGhlciB3ZSByZWFsbHkgY2FyZSBhYm91dCB0aGUgY29lZmZpY2llbnQgdmFsdWVzICovDQotICAgIGlmIChjb21wcHRyLT5jb21wb25lbnRfbmVlZGVkKSB7DQotICAgICAgZW50cm9weS0+ZGNfbmVlZGVkW2Jsa25dID0gVFJVRTsNCi0gICAgICAvKiB3ZSBkb24ndCBuZWVkIHRoZSBBQ3MgaWYgcHJvZHVjaW5nIGEgMS84dGgtc2l6ZSBpbWFnZSAqLw0KLSAgICAgIGVudHJvcHktPmFjX25lZWRlZFtibGtuXSA9IChjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemUgPiAxKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICBlbnRyb3B5LT5kY19uZWVkZWRbYmxrbl0gPSBlbnRyb3B5LT5hY19uZWVkZWRbYmxrbl0gPSBGQUxTRTsNCi0gICAgfQ0KLSAgfQ0KLQ0KLSAgLyogSW5pdGlhbGl6ZSBiaXRyZWFkIHN0YXRlIHZhcmlhYmxlcyAqLw0KLSAgZW50cm9weS0+Yml0c3RhdGUuYml0c19sZWZ0ID0gMDsNCi0gIGVudHJvcHktPmJpdHN0YXRlLmdldF9idWZmZXIgPSAwOyAvKiB1bm5lY2Vzc2FyeSwgYnV0IGtlZXBzIFB1cmlmeSBxdWlldCAqLw0KLSAgZW50cm9weS0+cHViLmluc3VmZmljaWVudF9kYXRhID0gRkFMU0U7DQotDQotICAvKiBJbml0aWFsaXplIHJlc3RhcnQgY291bnRlciAqLw0KLSAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPSBjaW5mby0+cmVzdGFydF9pbnRlcnZhbDsNCi19DQotDQotDQotLyoNCi0gKiBDb21wdXRlIHRoZSBkZXJpdmVkIHZhbHVlcyBmb3IgYSBIdWZmbWFuIHRhYmxlLg0KLSAqIFRoaXMgcm91dGluZSBhbHNvIHBlcmZvcm1zIHNvbWUgdmFsaWRhdGlvbiBjaGVja3Mgb24gdGhlIHRhYmxlLg0KLSAqDQotICogTm90ZSB0aGlzIGlzIGFsc28gdXNlZCBieSBqZHBodWZmLmMuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotanBlZ19tYWtlX2RfZGVyaXZlZF90YmwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gaXNEQywgaW50IHRibG5vLA0KLQkJCSBkX2Rlcml2ZWRfdGJsICoqIHBkdGJsKQ0KLXsNCi0gIEpIVUZGX1RCTCAqaHRibDsNCi0gIGRfZGVyaXZlZF90YmwgKmR0Ymw7DQotICBpbnQgcCwgaSwgbCwgX3NpLCBudW1zeW1ib2xzOw0KLSAgaW50IGxvb2tiaXRzLCBjdHI7DQotICBjaGFyIGh1ZmZzaXplWzI1N107DQotICB1bnNpZ25lZCBpbnQgaHVmZmNvZGVbMjU3XTsNCi0gIHVuc2lnbmVkIGludCBjb2RlOw0KLQ0KLSAgLyogTm90ZSB0aGF0IGh1ZmZzaXplW10gYW5kIGh1ZmZjb2RlW10gYXJlIGZpbGxlZCBpbiBjb2RlLWxlbmd0aCBvcmRlciwNCi0gICAqIHBhcmFsbGVsaW5nIHRoZSBvcmRlciBvZiB0aGUgc3ltYm9scyB0aGVtc2VsdmVzIGluIGh0YmwtPmh1ZmZ2YWxbXS4NCi0gICAqLw0KLQ0KLSAgLyogRmluZCB0aGUgaW5wdXQgSHVmZm1hbiB0YWJsZSAqLw0KLSAgaWYgKHRibG5vIDwgMCB8fCB0YmxubyA+PSBOVU1fSFVGRl9UQkxTKQ0KLSAgICBFUlJFWElUMShjaW5mbywgSkVSUl9OT19IVUZGX1RBQkxFLCB0Ymxubyk7DQotICBodGJsID0NCi0gICAgaXNEQyA/IGNpbmZvLT5kY19odWZmX3RibF9wdHJzW3RibG5vXSA6IGNpbmZvLT5hY19odWZmX3RibF9wdHJzW3RibG5vXTsNCi0gIGlmIChodGJsID09IE5VTEwpDQotICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX05PX0hVRkZfVEFCTEUsIHRibG5vKTsNCi0NCi0gIC8qIEFsbG9jYXRlIGEgd29ya3NwYWNlIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSBkb25lIHNvLiAqLw0KLSAgaWYgKCpwZHRibCA9PSBOVUxMKQ0KLSAgICAqcGR0YmwgPSAoZF9kZXJpdmVkX3RibCAqKQ0KLSAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsDQotCQkJCSAgU0laRU9GKGRfZGVyaXZlZF90YmwpKTsNCi0gIGR0YmwgPSAqcGR0Ymw7DQotICBkdGJsLT5wdWIgPSBodGJsOwkJLyogZmlsbCBpbiBiYWNrIGxpbmsgKi8NCi0gIA0KLSAgLyogRmlndXJlIEMuMTogbWFrZSB0YWJsZSBvZiBIdWZmbWFuIGNvZGUgbGVuZ3RoIGZvciBlYWNoIHN5bWJvbCAqLw0KLQ0KLSAgcCA9IDA7DQotICBmb3IgKGwgPSAxOyBsIDw9IDE2OyBsKyspIHsNCi0gICAgaSA9IChpbnQpIGh0YmwtPmJpdHNbbF07DQotICAgIGlmIChpIDwgMCB8fCBwICsgaSA+IDI1NikJLyogcHJvdGVjdCBhZ2FpbnN0IHRhYmxlIG92ZXJydW4gKi8NCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9IVUZGX1RBQkxFKTsNCi0gICAgd2hpbGUgKGktLSkNCi0gICAgICBodWZmc2l6ZVtwKytdID0gKGNoYXIpIGw7DQotICB9DQotICBodWZmc2l6ZVtwXSA9IDA7DQotICBudW1zeW1ib2xzID0gcDsNCi0gIA0KLSAgLyogRmlndXJlIEMuMjogZ2VuZXJhdGUgdGhlIGNvZGVzIHRoZW1zZWx2ZXMgKi8NCi0gIC8qIFdlIGFsc28gdmFsaWRhdGUgdGhhdCB0aGUgY291bnRzIHJlcHJlc2VudCBhIGxlZ2FsIEh1ZmZtYW4gY29kZSB0cmVlLiAqLw0KLSAgDQotICBjb2RlID0gMDsNCi0gIF9zaSA9IGh1ZmZzaXplWzBdOw0KLSAgcCA9IDA7DQotICB3aGlsZSAoaHVmZnNpemVbcF0pIHsNCi0gICAgd2hpbGUgKCgoaW50KSBodWZmc2l6ZVtwXSkgPT0gX3NpKSB7DQotICAgICAgaHVmZmNvZGVbcCsrXSA9IGNvZGU7DQotICAgICAgY29kZSsrOw0KLSAgICB9DQotICAgIC8qIGNvZGUgaXMgbm93IDEgbW9yZSB0aGFuIHRoZSBsYXN0IGNvZGUgdXNlZCBmb3IgY29kZWxlbmd0aCBzaTsgYnV0DQotICAgICAqIGl0IG11c3Qgc3RpbGwgZml0IGluIHNpIGJpdHMsIHNpbmNlIG5vIGNvZGUgaXMgYWxsb3dlZCB0byBiZSBhbGwgb25lcy4NCi0gICAgICovDQotICAgIGlmICgoKElOVDMyKSBjb2RlKSA+PSAoKChJTlQzMikgMSkgPDwgX3NpKSkNCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9IVUZGX1RBQkxFKTsNCi0gICAgY29kZSA8PD0gMTsNCi0gICAgX3NpKys7DQotICB9DQotDQotICAvKiBGaWd1cmUgRi4xNTogZ2VuZXJhdGUgZGVjb2RpbmcgdGFibGVzIGZvciBiaXQtc2VxdWVudGlhbCBkZWNvZGluZyAqLw0KLQ0KLSAgcCA9IDA7DQotICBmb3IgKGwgPSAxOyBsIDw9IDE2OyBsKyspIHsNCi0gICAgaWYgKGh0YmwtPmJpdHNbbF0pIHsNCi0gICAgICAvKiB2YWxvZmZzZXRbbF0gPSBodWZmdmFsW10gaW5kZXggb2YgMXN0IHN5bWJvbCBvZiBjb2RlIGxlbmd0aCBsLA0KLSAgICAgICAqIG1pbnVzIHRoZSBtaW5pbXVtIGNvZGUgb2YgbGVuZ3RoIGwNCi0gICAgICAgKi8NCi0gICAgICBkdGJsLT52YWxvZmZzZXRbbF0gPSAoSU5UMzIpIHAgLSAoSU5UMzIpIGh1ZmZjb2RlW3BdOw0KLSAgICAgIHAgKz0gaHRibC0+Yml0c1tsXTsNCi0gICAgICBkdGJsLT5tYXhjb2RlW2xdID0gaHVmZmNvZGVbcC0xXTsgLyogbWF4aW11bSBjb2RlIG9mIGxlbmd0aCBsICovDQotICAgIH0gZWxzZSB7DQotICAgICAgZHRibC0+bWF4Y29kZVtsXSA9IC0xOwkvKiAtMSBpZiBubyBjb2RlcyBvZiB0aGlzIGxlbmd0aCAqLw0KLSAgICB9DQotICB9DQotICBkdGJsLT5tYXhjb2RlWzE3XSA9IDB4RkZGRkZMOyAvKiBlbnN1cmVzIGpwZWdfaHVmZl9kZWNvZGUgdGVybWluYXRlcyAqLw0KLQ0KLSAgLyogQ29tcHV0ZSBsb29rYWhlYWQgdGFibGVzIHRvIHNwZWVkIHVwIGRlY29kaW5nLg0KLSAgICogRmlyc3Qgd2Ugc2V0IGFsbCB0aGUgdGFibGUgZW50cmllcyB0byAwLCBpbmRpY2F0aW5nICJ0b28gbG9uZyI7DQotICAgKiB0aGVuIHdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgSHVmZm1hbiBjb2RlcyB0aGF0IGFyZSBzaG9ydCBlbm91Z2ggYW5kDQotICAgKiBmaWxsIGluIGFsbCB0aGUgZW50cmllcyB0aGF0IGNvcnJlc3BvbmQgdG8gYml0IHNlcXVlbmNlcyBzdGFydGluZw0KLSAgICogd2l0aCB0aGF0IGNvZGUuDQotICAgKi8NCi0NCi0gIE1FTVpFUk8oZHRibC0+bG9va19uYml0cywgU0laRU9GKGR0YmwtPmxvb2tfbmJpdHMpKTsNCi0NCi0gIHAgPSAwOw0KLSAgZm9yIChsID0gMTsgbCA8PSBIVUZGX0xPT0tBSEVBRDsgbCsrKSB7DQotICAgIGZvciAoaSA9IDE7IGkgPD0gKGludCkgaHRibC0+Yml0c1tsXTsgaSsrLCBwKyspIHsNCi0gICAgICAvKiBsID0gY3VycmVudCBjb2RlJ3MgbGVuZ3RoLCBwID0gaXRzIGluZGV4IGluIGh1ZmZjb2RlW10gJiBodWZmdmFsW10uICovDQotICAgICAgLyogR2VuZXJhdGUgbGVmdC1qdXN0aWZpZWQgY29kZSBmb2xsb3dlZCBieSBhbGwgcG9zc2libGUgYml0IHNlcXVlbmNlcyAqLw0KLSAgICAgIGxvb2tiaXRzID0gaHVmZmNvZGVbcF0gPDwgKEhVRkZfTE9PS0FIRUFELWwpOw0KLSAgICAgIGZvciAoY3RyID0gMSA8PCAoSFVGRl9MT09LQUhFQUQtbCk7IGN0ciA+IDA7IGN0ci0tKSB7DQotCWR0YmwtPmxvb2tfbmJpdHNbbG9va2JpdHNdID0gbDsNCi0JZHRibC0+bG9va19zeW1bbG9va2JpdHNdID0gaHRibC0+aHVmZnZhbFtwXTsNCi0JbG9va2JpdHMrKzsNCi0gICAgICB9DQotICAgIH0NCi0gIH0NCi0NCi0gIC8qIFZhbGlkYXRlIHN5bWJvbHMgYXMgYmVpbmcgcmVhc29uYWJsZS4NCi0gICAqIEZvciBBQyB0YWJsZXMsIHdlIG1ha2Ugbm8gY2hlY2ssIGJ1dCBhY2NlcHQgYWxsIGJ5dGUgdmFsdWVzIDAuLjI1NS4NCi0gICAqIEZvciBEQyB0YWJsZXMsIHdlIHJlcXVpcmUgdGhlIHN5bWJvbHMgdG8gYmUgaW4gcmFuZ2UgMC4uMTUuDQotICAgKiAoVGlnaHRlciBib3VuZHMgY291bGQgYmUgYXBwbGllZCBkZXBlbmRpbmcgb24gdGhlIGRhdGEgZGVwdGggYW5kIG1vZGUsDQotICAgKiBidXQgdGhpcyBpcyBzdWZmaWNpZW50IHRvIGVuc3VyZSBzYWZlIGRlY29kaW5nLikNCi0gICAqLw0KLSAgaWYgKGlzREMpIHsNCi0gICAgZm9yIChpID0gMDsgaSA8IG51bXN5bWJvbHM7IGkrKykgew0KLSAgICAgIGludCBzeW0gPSBodGJsLT5odWZmdmFsW2ldOw0KLSAgICAgIGlmIChzeW0gPCAwIHx8IHN5bSA+IDE1KQ0KLQlFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9IVUZGX1RBQkxFKTsNCi0gICAgfQ0KLSAgfQ0KLX0NCi0NCi0NCi0vKg0KLSAqIE91dC1vZi1saW5lIGNvZGUgZm9yIGJpdCBmZXRjaGluZyAoc2hhcmVkIHdpdGggamRwaHVmZi5jKS4NCi0gKiBTZWUgamRodWZmLmggZm9yIGluZm8gYWJvdXQgdXNhZ2UuDQotICogTm90ZTogY3VycmVudCB2YWx1ZXMgb2YgZ2V0X2J1ZmZlciBhbmQgYml0c19sZWZ0IGFyZSBwYXNzZWQgYXMgcGFyYW1ldGVycywNCi0gKiBidXQgYXJlIHJldHVybmVkIGluIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkcyBvZiB0aGUgc3RhdGUgc3RydWN0Lg0KLSAqDQotICogT24gbW9zdCBtYWNoaW5lcyBNSU5fR0VUX0JJVFMgc2hvdWxkIGJlIDI1IHRvIGFsbG93IHRoZSBmdWxsIDMyLWJpdCB3aWR0aA0KLSAqIG9mIGdldF9idWZmZXIgdG8gYmUgdXNlZC4gIChPbiBtYWNoaW5lcyB3aXRoIHdpZGVyIHdvcmRzLCBhbiBldmVuIGxhcmdlcg0KLSAqIGJ1ZmZlciBjb3VsZCBiZSB1c2VkLikgIEhvd2V2ZXIsIG9uIHNvbWUgbWFjaGluZXMgMzItYml0IHNoaWZ0cyBhcmUNCi0gKiBxdWl0ZSBzbG93IGFuZCB0YWtlIHRpbWUgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2YgcGxhY2VzIHNoaWZ0ZWQuDQotICogKFRoaXMgaXMgdHJ1ZSB3aXRoIG1vc3QgUEMgY29tcGlsZXJzLCBmb3IgaW5zdGFuY2UuKSAgSW4gdGhpcyBjYXNlIGl0IG1heQ0KLSAqIGJlIGEgd2luIHRvIHNldCBNSU5fR0VUX0JJVFMgdG8gdGhlIG1pbmltdW0gdmFsdWUgb2YgMTUuICBUaGlzIHJlZHVjZXMgdGhlDQotICogYXZlcmFnZSBzaGlmdCBkaXN0YW5jZSBhdCB0aGUgY29zdCBvZiBtb3JlIGNhbGxzIHRvIGpwZWdfZmlsbF9iaXRfYnVmZmVyLg0KLSAqLw0KLQ0KLSNpZmRlZiBTTE9XX1NISUZUXzMyDQotI2RlZmluZSBNSU5fR0VUX0JJVFMgIDE1CS8qIG1pbmltdW0gYWxsb3dhYmxlIHZhbHVlICovDQotI2Vsc2UNCi0jZGVmaW5lIE1JTl9HRVRfQklUUyAgKEJJVF9CVUZfU0laRS03KQ0KLSNlbmRpZg0KLQ0KLQ0KLUdMT0JBTChib29sZWFuKQ0KLWpwZWdfZmlsbF9iaXRfYnVmZmVyIChiaXRyZWFkX3dvcmtpbmdfc3RhdGUgKiBzdGF0ZSwNCi0JCSAgICAgIHJlZ2lzdGVyIGJpdF9idWZfdHlwZSBnZXRfYnVmZmVyLCByZWdpc3RlciBpbnQgYml0c19sZWZ0LA0KLQkJICAgICAgaW50IG5iaXRzKQ0KLS8qIExvYWQgdXAgdGhlIGJpdCBidWZmZXIgdG8gYSBkZXB0aCBvZiBhdCBsZWFzdCBuYml0cyAqLw0KLXsNCi0gIC8qIENvcHkgaGVhdmlseSB1c2VkIHN0YXRlIGZpZWxkcyBpbnRvIGxvY2FscyAoaG9wZWZ1bGx5IHJlZ2lzdGVycykgKi8NCi0gIHJlZ2lzdGVyIGNvbnN0IEpPQ1RFVCAqIG5leHRfaW5wdXRfYnl0ZSA9IHN0YXRlLT5uZXh0X2lucHV0X2J5dGU7DQotICByZWdpc3RlciBzaXplX3QgYnl0ZXNfaW5fYnVmZmVyID0gc3RhdGUtPmJ5dGVzX2luX2J1ZmZlcjsNCi0gIGpfZGVjb21wcmVzc19wdHIgY2luZm8gPSBzdGF0ZS0+Y2luZm87DQotDQotICAvKiBBdHRlbXB0IHRvIGxvYWQgYXQgbGVhc3QgTUlOX0dFVF9CSVRTIGJpdHMgaW50byBnZXRfYnVmZmVyLiAqLw0KLSAgLyogKEl0IGlzIGFzc3VtZWQgdGhhdCBubyByZXF1ZXN0IHdpbGwgYmUgZm9yIG1vcmUgdGhhbiB0aGF0IG1hbnkgYml0cy4pICovDQotICAvKiBXZSBmYWlsIHRvIGRvIHNvIG9ubHkgaWYgd2UgaGl0IGEgbWFya2VyIG9yIGFyZSBmb3JjZWQgdG8gc3VzcGVuZC4gKi8NCi0NCi0gIGlmIChjaW5mby0+dW5yZWFkX21hcmtlciA9PSAwKSB7CS8qIGNhbm5vdCBhZHZhbmNlIHBhc3QgYSBtYXJrZXIgKi8NCi0gICAgd2hpbGUgKGJpdHNfbGVmdCA8IE1JTl9HRVRfQklUUykgew0KLSAgICAgIHJlZ2lzdGVyIGludCBjOw0KLQ0KLSAgICAgIC8qIEF0dGVtcHQgdG8gcmVhZCBhIGJ5dGUgKi8NCi0gICAgICBpZiAoYnl0ZXNfaW5fYnVmZmVyID09IDApIHsNCi0JaWYgKCEgKCpjaW5mby0+c3JjLT5maWxsX2lucHV0X2J1ZmZlcikgKGNpbmZvKSkNCi0JICByZXR1cm4gRkFMU0U7DQotCW5leHRfaW5wdXRfYnl0ZSA9IGNpbmZvLT5zcmMtPm5leHRfaW5wdXRfYnl0ZTsNCi0JYnl0ZXNfaW5fYnVmZmVyID0gY2luZm8tPnNyYy0+Ynl0ZXNfaW5fYnVmZmVyOw0KLSAgICAgIH0NCi0gICAgICBieXRlc19pbl9idWZmZXItLTsNCi0gICAgICBjID0gR0VUSk9DVEVUKCpuZXh0X2lucHV0X2J5dGUrKyk7DQotDQotICAgICAgLyogSWYgaXQncyAweEZGLCBjaGVjayBhbmQgZGlzY2FyZCBzdHVmZmVkIHplcm8gYnl0ZSAqLw0KLSAgICAgIGlmIChjID09IDB4RkYpIHsNCi0JLyogTG9vcCBoZXJlIHRvIGRpc2NhcmQgYW55IHBhZGRpbmcgRkYncyBvbiB0ZXJtaW5hdGluZyBtYXJrZXIsDQotCSAqIHNvIHRoYXQgd2UgY2FuIHNhdmUgYSB2YWxpZCB1bnJlYWRfbWFya2VyIHZhbHVlLiAgTk9URTogd2Ugd2lsbA0KLQkgKiBhY2NlcHQgbXVsdGlwbGUgRkYncyBmb2xsb3dlZCBieSBhIDAgYXMgbWVhbmluZyBhIHNpbmdsZSBGRiBkYXRhDQotCSAqIGJ5dGUuICBUaGlzIGRhdGEgcGF0dGVybiBpcyBub3QgdmFsaWQgYWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZC4NCi0JICovDQotCWRvIHsNCi0JICBpZiAoYnl0ZXNfaW5fYnVmZmVyID09IDApIHsNCi0JICAgIGlmICghICgqY2luZm8tPnNyYy0+ZmlsbF9pbnB1dF9idWZmZXIpIChjaW5mbykpDQotCSAgICAgIHJldHVybiBGQUxTRTsNCi0JICAgIG5leHRfaW5wdXRfYnl0ZSA9IGNpbmZvLT5zcmMtPm5leHRfaW5wdXRfYnl0ZTsNCi0JICAgIGJ5dGVzX2luX2J1ZmZlciA9IGNpbmZvLT5zcmMtPmJ5dGVzX2luX2J1ZmZlcjsNCi0JICB9DQotCSAgYnl0ZXNfaW5fYnVmZmVyLS07DQotCSAgYyA9IEdFVEpPQ1RFVCgqbmV4dF9pbnB1dF9ieXRlKyspOw0KLQl9IHdoaWxlIChjID09IDB4RkYpOw0KLQ0KLQlpZiAoYyA9PSAwKSB7DQotCSAgLyogRm91bmQgRkYvMDAsIHdoaWNoIHJlcHJlc2VudHMgYW4gRkYgZGF0YSBieXRlICovDQotCSAgYyA9IDB4RkY7DQotCX0gZWxzZSB7DQotCSAgLyogT29wcywgaXQncyBhY3R1YWxseSBhIG1hcmtlciBpbmRpY2F0aW5nIGVuZCBvZiBjb21wcmVzc2VkIGRhdGEuDQotCSAgICogU2F2ZSB0aGUgbWFya2VyIGNvZGUgZm9yIGxhdGVyIHVzZS4NCi0JICAgKiBGaW5lIHBvaW50OiBpdCBtaWdodCBhcHBlYXIgdGhhdCB3ZSBzaG91bGQgc2F2ZSB0aGUgbWFya2VyIGludG8NCi0JICAgKiBiaXRyZWFkIHdvcmtpbmcgc3RhdGUsIG5vdCBzdHJhaWdodCBpbnRvIHBlcm1hbmVudCBzdGF0ZS4gIEJ1dA0KLQkgICAqIG9uY2Ugd2UgaGF2ZSBoaXQgYSBtYXJrZXIsIHdlIGNhbm5vdCBuZWVkIHRvIHN1c3BlbmQgd2l0aGluIHRoZQ0KLQkgICAqIGN1cnJlbnQgTUNVLCBiZWNhdXNlIHdlIHdpbGwgcmVhZCBubyBtb3JlIGJ5dGVzIGZyb20gdGhlIGRhdGENCi0JICAgKiBzb3VyY2UuICBTbyBpdCBpcyBPSyB0byB1cGRhdGUgcGVybWFuZW50IHN0YXRlIHJpZ2h0IGF3YXkuDQotCSAgICovDQotCSAgY2luZm8tPnVucmVhZF9tYXJrZXIgPSBjOw0KLQkgIC8qIFNlZSBpZiB3ZSBuZWVkIHRvIGluc2VydCBzb21lIGZha2UgemVybyBiaXRzLiAqLw0KLQkgIGdvdG8gbm9fbW9yZV9ieXRlczsNCi0JfQ0KLSAgICAgIH0NCi0NCi0gICAgICAvKiBPSywgbG9hZCBjIGludG8gZ2V0X2J1ZmZlciAqLw0KLSAgICAgIGdldF9idWZmZXIgPSAoZ2V0X2J1ZmZlciA8PCA4KSB8IGM7DQotICAgICAgYml0c19sZWZ0ICs9IDg7DQotICAgIH0gLyogZW5kIHdoaWxlICovDQotICB9IGVsc2Ugew0KLSAgbm9fbW9yZV9ieXRlczoNCi0gICAgLyogV2UgZ2V0IGhlcmUgaWYgd2UndmUgcmVhZCB0aGUgbWFya2VyIHRoYXQgdGVybWluYXRlcyB0aGUgY29tcHJlc3NlZA0KLSAgICAgKiBkYXRhIHNlZ21lbnQuICBUaGVyZSBzaG91bGQgYmUgZW5vdWdoIGJpdHMgaW4gdGhlIGJ1ZmZlciByZWdpc3Rlcg0KLSAgICAgKiB0byBzYXRpc2Z5IHRoZSByZXF1ZXN0OyBpZiBzbywgbm8gcHJvYmxlbS4NCi0gICAgICovDQotICAgIGlmIChuYml0cyA+IGJpdHNfbGVmdCkgew0KLSAgICAgIC8qIFVoLW9oLiAgUmVwb3J0IGNvcnJ1cHRlZCBkYXRhIHRvIHVzZXIgYW5kIHN0dWZmIHplcm9lcyBpbnRvDQotICAgICAgICogdGhlIGRhdGEgc3RyZWFtLCBzbyB0aGF0IHdlIGNhbiBwcm9kdWNlIHNvbWUga2luZCBvZiBpbWFnZS4NCi0gICAgICAgKiBXZSB1c2UgYSBub252b2xhdGlsZSBmbGFnIHRvIGVuc3VyZSB0aGF0IG9ubHkgb25lIHdhcm5pbmcgbWVzc2FnZQ0KLSAgICAgICAqIGFwcGVhcnMgcGVyIGRhdGEgc2VnbWVudC4NCi0gICAgICAgKi8NCi0gICAgICBpZiAoISBjaW5mby0+ZW50cm9weS0+aW5zdWZmaWNpZW50X2RhdGEpIHsNCi0JV0FSTk1TKGNpbmZvLCBKV1JOX0hJVF9NQVJLRVIpOw0KLQljaW5mby0+ZW50cm9weS0+aW5zdWZmaWNpZW50X2RhdGEgPSBUUlVFOw0KLSAgICAgIH0NCi0gICAgICAvKiBGaWxsIHRoZSBidWZmZXIgd2l0aCB6ZXJvIGJpdHMgKi8NCi0gICAgICBnZXRfYnVmZmVyIDw8PSBNSU5fR0VUX0JJVFMgLSBiaXRzX2xlZnQ7DQotICAgICAgYml0c19sZWZ0ID0gTUlOX0dFVF9CSVRTOw0KLSAgICB9DQotICB9DQotDQotICAvKiBVbmxvYWQgdGhlIGxvY2FsIHJlZ2lzdGVycyAqLw0KLSAgc3RhdGUtPm5leHRfaW5wdXRfYnl0ZSA9IG5leHRfaW5wdXRfYnl0ZTsNCi0gIHN0YXRlLT5ieXRlc19pbl9idWZmZXIgPSBieXRlc19pbl9idWZmZXI7DQotICBzdGF0ZS0+Z2V0X2J1ZmZlciA9IGdldF9idWZmZXI7DQotICBzdGF0ZS0+Yml0c19sZWZ0ID0gYml0c19sZWZ0Ow0KLQ0KLSAgcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLQ0KLS8qDQotICogT3V0LW9mLWxpbmUgY29kZSBmb3IgSHVmZm1hbiBjb2RlIGRlY29kaW5nLg0KLSAqIFNlZSBqZGh1ZmYuaCBmb3IgaW5mbyBhYm91dCB1c2FnZS4NCi0gKi8NCi0NCi1HTE9CQUwoaW50KQ0KLWpwZWdfaHVmZl9kZWNvZGUgKGJpdHJlYWRfd29ya2luZ19zdGF0ZSAqIHN0YXRlLA0KLQkJICByZWdpc3RlciBiaXRfYnVmX3R5cGUgZ2V0X2J1ZmZlciwgcmVnaXN0ZXIgaW50IGJpdHNfbGVmdCwNCi0JCSAgZF9kZXJpdmVkX3RibCAqIGh0YmwsIGludCBtaW5fYml0cykNCi17DQotICByZWdpc3RlciBpbnQgbCA9IG1pbl9iaXRzOw0KLSAgcmVnaXN0ZXIgSU5UMzIgY29kZTsNCi0NCi0gIC8qIEhVRkZfREVDT0RFIGhhcyBkZXRlcm1pbmVkIHRoYXQgdGhlIGNvZGUgaXMgYXQgbGVhc3QgbWluX2JpdHMgKi8NCi0gIC8qIGJpdHMgbG9uZywgc28gZmV0Y2ggdGhhdCBtYW55IGJpdHMgaW4gb25lIHN3b29wLiAqLw0KLQ0KLSAgQ0hFQ0tfQklUX0JVRkZFUigqc3RhdGUsIGwsIHJldHVybiAtMSk7DQotICBjb2RlID0gR0VUX0JJVFMobCk7DQotDQotICAvKiBDb2xsZWN0IHRoZSByZXN0IG9mIHRoZSBIdWZmbWFuIGNvZGUgb25lIGJpdCBhdCBhIHRpbWUuICovDQotICAvKiBUaGlzIGlzIHBlciBGaWd1cmUgRi4xNiBpbiB0aGUgSlBFRyBzcGVjLiAqLw0KLQ0KLSAgd2hpbGUgKGNvZGUgPiBodGJsLT5tYXhjb2RlW2xdKSB7DQotICAgIGNvZGUgPDw9IDE7DQotICAgIENIRUNLX0JJVF9CVUZGRVIoKnN0YXRlLCAxLCByZXR1cm4gLTEpOw0KLSAgICBjb2RlIHw9IEdFVF9CSVRTKDEpOw0KLSAgICBsKys7DQotICB9DQotDQotICAvKiBVbmxvYWQgdGhlIGxvY2FsIHJlZ2lzdGVycyAqLw0KLSAgc3RhdGUtPmdldF9idWZmZXIgPSBnZXRfYnVmZmVyOw0KLSAgc3RhdGUtPmJpdHNfbGVmdCA9IGJpdHNfbGVmdDsNCi0NCi0gIC8qIFdpdGggZ2FyYmFnZSBpbnB1dCB3ZSBtYXkgcmVhY2ggdGhlIHNlbnRpbmVsIHZhbHVlIGwgPSAxNy4gKi8NCi0NCi0gIGlmIChsID4gMTYpIHsNCi0gICAgV0FSTk1TKHN0YXRlLT5jaW5mbywgSldSTl9IVUZGX0JBRF9DT0RFKTsNCi0gICAgcmV0dXJuIDA7CQkJLyogZmFrZSBhIHplcm8gYXMgdGhlIHNhZmVzdCByZXN1bHQgKi8NCi0gIH0NCi0NCi0gIHJldHVybiBodGJsLT5wdWItPmh1ZmZ2YWxbIChpbnQpIChjb2RlICsgaHRibC0+dmFsb2Zmc2V0W2xdKSBdOw0KLX0NCi0NCi0NCi0vKg0KLSAqIEZpZ3VyZSBGLjEyOiBleHRlbmQgc2lnbiBiaXQuDQotICogT24gc29tZSBtYWNoaW5lcywgYSBzaGlmdCBhbmQgYWRkIHdpbGwgYmUgZmFzdGVyIHRoYW4gYSB0YWJsZSBsb29rdXAuDQotICovDQotDQotI2lmZGVmIEFWT0lEX1RBQkxFUw0KLQ0KLSNkZWZpbmUgSFVGRl9FWFRFTkQoeCxzKSAgKCh4KSA8ICgxPDwoKHMpLTEpKSA/ICh4KSArICgoKC0xKTw8KHMpKSArIDEpIDogKHgpKQ0KLQ0KLSNlbHNlDQotDQotI2RlZmluZSBIVUZGX0VYVEVORCh4LHMpICAoKHgpIDwgZXh0ZW5kX3Rlc3Rbc10gPyAoeCkgKyBleHRlbmRfb2Zmc2V0W3NdIDogKHgpKQ0KLQ0KLXN0YXRpYyBjb25zdCBpbnQgZXh0ZW5kX3Rlc3RbMTZdID0gICAvKiBlbnRyeSBuIGlzIDIqKihuLTEpICovDQotICB7IDAsIDB4MDAwMSwgMHgwMDAyLCAweDAwMDQsIDB4MDAwOCwgMHgwMDEwLCAweDAwMjAsIDB4MDA0MCwgMHgwMDgwLA0KLSAgICAweDAxMDAsIDB4MDIwMCwgMHgwNDAwLCAweDA4MDAsIDB4MTAwMCwgMHgyMDAwLCAweDQwMDAgfTsNCi0NCi1zdGF0aWMgY29uc3QgaW50IGV4dGVuZF9vZmZzZXRbMTZdID0gLyogZW50cnkgbiBpcyAoLTEgPDwgbikgKyAxICovDQotICB7IDAsICgoLTEpPDwxKSArIDEsICgoLTEpPDwyKSArIDEsICgoLTEpPDwzKSArIDEsICgoLTEpPDw0KSArIDEsDQotICAgICgoLTEpPDw1KSArIDEsICgoLTEpPDw2KSArIDEsICgoLTEpPDw3KSArIDEsICgoLTEpPDw4KSArIDEsDQotICAgICgoLTEpPDw5KSArIDEsICgoLTEpPDwxMCkgKyAxLCAoKC0xKTw8MTEpICsgMSwgKCgtMSk8PDEyKSArIDEsDQotICAgICgoLTEpPDwxMykgKyAxLCAoKC0xKTw8MTQpICsgMSwgKCgtMSk8PDE1KSArIDEgfTsNCi0NCi0jZW5kaWYgLyogQVZPSURfVEFCTEVTICovDQotDQotDQotLyoNCi0gKiBDaGVjayBmb3IgYSByZXN0YXJ0IG1hcmtlciAmIHJlc3luY2hyb25pemUgZGVjb2Rlci4NCi0gKiBSZXR1cm5zIEZBTFNFIGlmIG11c3Qgc3VzcGVuZC4NCi0gKi8NCi0NCi1MT0NBTChib29sZWFuKQ0KLXByb2Nlc3NfcmVzdGFydCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAoaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7DQotICBpbnQgY2k7DQotDQotICAvKiBUaHJvdyBhd2F5IGFueSB1bnVzZWQgYml0cyByZW1haW5pbmcgaW4gYml0IGJ1ZmZlcjsgKi8NCi0gIC8qIGluY2x1ZGUgYW55IGZ1bGwgYnl0ZXMgaW4gbmV4dF9tYXJrZXIncyBjb3VudCBvZiBkaXNjYXJkZWQgYnl0ZXMgKi8NCi0gIGNpbmZvLT5tYXJrZXItPmRpc2NhcmRlZF9ieXRlcyArPSBlbnRyb3B5LT5iaXRzdGF0ZS5iaXRzX2xlZnQgLyA4Ow0KLSAgZW50cm9weS0+Yml0c3RhdGUuYml0c19sZWZ0ID0gMDsNCi0NCi0gIC8qIEFkdmFuY2UgcGFzdCB0aGUgUlNUbiBtYXJrZXIgKi8NCi0gIGlmICghICgqY2luZm8tPm1hcmtlci0+cmVhZF9yZXN0YXJ0X21hcmtlcikgKGNpbmZvKSkNCi0gICAgcmV0dXJuIEZBTFNFOw0KLQ0KLSAgLyogUmUtaW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovDQotICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykNCi0gICAgZW50cm9weS0+c2F2ZWQubGFzdF9kY192YWxbY2ldID0gMDsNCi0NCi0gIC8qIFJlc2V0IHJlc3RhcnQgY291bnRlciAqLw0KLSAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPSBjaW5mby0+cmVzdGFydF9pbnRlcnZhbDsNCi0NCi0gIC8qIFJlc2V0IG91dC1vZi1kYXRhIGZsYWcsIHVubGVzcyByZWFkX3Jlc3RhcnRfbWFya2VyIGxlZnQgdXMgc21hY2sgdXANCi0gICAqIGFnYWluc3QgYSBtYXJrZXIuICBJbiB0aGF0IGNhc2Ugd2Ugd2lsbCBlbmQgdXAgdHJlYXRpbmcgdGhlIG5leHQgZGF0YQ0KLSAgICogc2VnbWVudCBhcyBlbXB0eSwgYW5kIHdlIGNhbiBhdm9pZCBwcm9kdWNpbmcgYm9ndXMgb3V0cHV0IHBpeGVscyBieQ0KLSAgICogbGVhdmluZyB0aGUgZmxhZyBzZXQuDQotICAgKi8NCi0gIGlmIChjaW5mby0+dW5yZWFkX21hcmtlciA9PSAwKQ0KLSAgICBlbnRyb3B5LT5wdWIuaW5zdWZmaWNpZW50X2RhdGEgPSBGQUxTRTsNCi0NCi0gIHJldHVybiBUUlVFOw0KLX0NCi0NCi0NCi0vKg0KLSAqIERlY29kZSBhbmQgcmV0dXJuIG9uZSBNQ1UncyB3b3J0aCBvZiBIdWZmbWFuLWNvbXByZXNzZWQgY29lZmZpY2llbnRzLg0KLSAqIFRoZSBjb2VmZmljaWVudHMgYXJlIHJlb3JkZXJlZCBmcm9tIHppZ3phZyBvcmRlciBpbnRvIG5hdHVyYWwgYXJyYXkgb3JkZXIsDQotICogYnV0IGFyZSBub3QgZGVxdWFudGl6ZWQuDQotICoNCi0gKiBUaGUgaSd0aCBibG9jayBvZiB0aGUgTUNVIGlzIHN0b3JlZCBpbnRvIHRoZSBibG9jayBwb2ludGVkIHRvIGJ5DQotICogTUNVX2RhdGFbaV0uICBXRSBBU1NVTUUgVEhJUyBBUkVBIEhBUyBCRUVOIFpFUk9FRCBCWSBUSEUgQ0FMTEVSLg0KLSAqIChXaG9sZXNhbGUgemVyb2luZyBpcyB1c3VhbGx5IGEgbGl0dGxlIGZhc3RlciB0aGFuIHJldGFpbC4uLikNCi0gKg0KLSAqIFJldHVybnMgRkFMU0UgaWYgZGF0YSBzb3VyY2UgcmVxdWVzdGVkIHN1c3BlbnNpb24uICBJbiB0aGF0IGNhc2Ugbm8NCi0gKiBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIHBlcm1hbmVudCBzdGF0ZS4gIChFeGNlcHRpb246IHNvbWUgb3V0cHV0DQotICogY29lZmZpY2llbnRzIG1heSBhbHJlYWR5IGhhdmUgYmVlbiBhc3NpZ25lZC4gIFRoaXMgaXMgaGFybWxlc3MgZm9yDQotICogdGhpcyBtb2R1bGUsIHNpbmNlIHdlJ2xsIGp1c3QgcmUtYXNzaWduIHRoZW0gb24gdGhlIG5leHQgY2FsbC4pDQotICovDQotDQotTUVUSE9EREVGKGJvb2xlYW4pDQotZGVjb2RlX21jdSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkNCi17DQotICBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAoaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7DQotICBpbnQgYmxrbjsNCi0gIEJJVFJFQURfU1RBVEVfVkFSUzsNCi0gIHNhdmFibGVfc3RhdGUgc3RhdGU7DQotDQotICAvKiBQcm9jZXNzIHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZDsgbWF5IGhhdmUgdG8gc3VzcGVuZCAqLw0KLSAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7DQotICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQ0KLSAgICAgIGlmICghIHByb2Nlc3NfcmVzdGFydChjaW5mbykpDQotCXJldHVybiBGQUxTRTsNCi0gIH0NCi0NCi0gIC8qIElmIHdlJ3ZlIHJ1biBvdXQgb2YgZGF0YSwganVzdCBsZWF2ZSB0aGUgTUNVIHNldCB0byB6ZXJvZXMuDQotICAgKiBUaGlzIHdheSwgd2UgcmV0dXJuIHVuaWZvcm0gZ3JheSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgc2VnbWVudC4NCi0gICAqLw0KLSAgaWYgKCEgZW50cm9weS0+cHViLmluc3VmZmljaWVudF9kYXRhKSB7DQotDQotICAgIC8qIExvYWQgdXAgd29ya2luZyBzdGF0ZSAqLw0KLSAgICBCSVRSRUFEX0xPQURfU1RBVEUoY2luZm8sZW50cm9weS0+Yml0c3RhdGUpOw0KLSAgICBBU1NJR05fU1RBVEUoc3RhdGUsIGVudHJvcHktPnNhdmVkKTsNCi0NCi0gICAgLyogT3V0ZXIgbG9vcCBoYW5kbGVzIGVhY2ggYmxvY2sgaW4gdGhlIE1DVSAqLw0KLQ0KLSAgICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgew0KLSAgICAgIEpCTE9DS1JPVyBibG9jayA9IE1DVV9kYXRhW2Jsa25dOw0KLSAgICAgIGRfZGVyaXZlZF90YmwgKiBkY3RibCA9IGVudHJvcHktPmRjX2N1cl90YmxzW2Jsa25dOw0KLSAgICAgIGRfZGVyaXZlZF90YmwgKiBhY3RibCA9IGVudHJvcHktPmFjX2N1cl90YmxzW2Jsa25dOw0KLSAgICAgIHJlZ2lzdGVyIGludCBzLCBrLCByOw0KLQ0KLSAgICAgIC8qIERlY29kZSBhIHNpbmdsZSBibG9jaydzIHdvcnRoIG9mIGNvZWZmaWNpZW50cyAqLw0KLQ0KLSAgICAgIC8qIFNlY3Rpb24gRi4yLjIuMTogZGVjb2RlIHRoZSBEQyBjb2VmZmljaWVudCBkaWZmZXJlbmNlICovDQotICAgICAgSFVGRl9ERUNPREUocywgYnJfc3RhdGUsIGRjdGJsLCByZXR1cm4gRkFMU0UsIGxhYmVsMSk7DQotICAgICAgaWYgKHMpIHsNCi0JQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgcywgcmV0dXJuIEZBTFNFKTsNCi0JciA9IEdFVF9CSVRTKHMpOw0KLQlzID0gSFVGRl9FWFRFTkQociwgcyk7DQotICAgICAgfQ0KLQ0KLSAgICAgIGlmIChlbnRyb3B5LT5kY19uZWVkZWRbYmxrbl0pIHsNCi0JLyogQ29udmVydCBEQyBkaWZmZXJlbmNlIHRvIGFjdHVhbCB2YWx1ZSwgdXBkYXRlIGxhc3RfZGNfdmFsICovDQotCWludCBjaSA9IGNpbmZvLT5NQ1VfbWVtYmVyc2hpcFtibGtuXTsNCi0JcyArPSBzdGF0ZS5sYXN0X2RjX3ZhbFtjaV07DQotCXN0YXRlLmxhc3RfZGNfdmFsW2NpXSA9IHM7DQotCS8qIE91dHB1dCB0aGUgREMgY29lZmZpY2llbnQgKGFzc3VtZXMganBlZ19uYXR1cmFsX29yZGVyWzBdID0gMCkgKi8NCi0JKCpibG9jaylbMF0gPSAoSkNPRUYpIHM7DQotICAgICAgfQ0KLQ0KLSAgICAgIGlmIChlbnRyb3B5LT5hY19uZWVkZWRbYmxrbl0pIHsNCi0NCi0JLyogU2VjdGlvbiBGLjIuMi4yOiBkZWNvZGUgdGhlIEFDIGNvZWZmaWNpZW50cyAqLw0KLQkvKiBTaW5jZSB6ZXJvZXMgYXJlIHNraXBwZWQsIG91dHB1dCBhcmVhIG11c3QgYmUgY2xlYXJlZCBiZWZvcmVoYW5kICovDQotCWZvciAoayA9IDE7IGsgPCBEQ1RTSVpFMjsgaysrKSB7DQotCSAgSFVGRl9ERUNPREUocywgYnJfc3RhdGUsIGFjdGJsLCByZXR1cm4gRkFMU0UsIGxhYmVsMik7DQotICAgICAgDQotCSAgciA9IHMgPj4gNDsNCi0JICBzICY9IDE1Ow0KLSAgICAgIA0KLQkgIGlmIChzKSB7DQotCSAgICBrICs9IHI7DQotCSAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCBzLCByZXR1cm4gRkFMU0UpOw0KLQkgICAgciA9IEdFVF9CSVRTKHMpOw0KLQkgICAgcyA9IEhVRkZfRVhURU5EKHIsIHMpOw0KLQkgICAgLyogT3V0cHV0IGNvZWZmaWNpZW50IGluIG5hdHVyYWwgKGRlemlnemFnZ2VkKSBvcmRlci4NCi0JICAgICAqIE5vdGU6IHRoZSBleHRyYSBlbnRyaWVzIGluIGpwZWdfbmF0dXJhbF9vcmRlcltdIHdpbGwgc2F2ZSB1cw0KLQkgICAgICogaWYgayA+PSBEQ1RTSVpFMiwgd2hpY2ggY291bGQgaGFwcGVuIGlmIHRoZSBkYXRhIGlzIGNvcnJ1cHRlZC4NCi0JICAgICAqLw0KLQkgICAgKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tdXSA9IChKQ09FRikgczsNCi0JICB9IGVsc2Ugew0KLQkgICAgaWYgKHIgIT0gMTUpDQotCSAgICAgIGJyZWFrOw0KLQkgICAgayArPSAxNTsNCi0JICB9DQotCX0NCi0NCi0gICAgICB9IGVsc2Ugew0KLQ0KLQkvKiBTZWN0aW9uIEYuMi4yLjI6IGRlY29kZSB0aGUgQUMgY29lZmZpY2llbnRzICovDQotCS8qIEluIHRoaXMgcGF0aCB3ZSBqdXN0IGRpc2NhcmQgdGhlIHZhbHVlcyAqLw0KLQlmb3IgKGsgPSAxOyBrIDwgRENUU0laRTI7IGsrKykgew0KLQkgIEhVRkZfREVDT0RFKHMsIGJyX3N0YXRlLCBhY3RibCwgcmV0dXJuIEZBTFNFLCBsYWJlbDMpOw0KLSAgICAgIA0KLQkgIHIgPSBzID4+IDQ7DQotCSAgcyAmPSAxNTsNCi0gICAgICANCi0JICBpZiAocykgew0KLQkgICAgayArPSByOw0KLQkgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgcywgcmV0dXJuIEZBTFNFKTsNCi0JICAgIERST1BfQklUUyhzKTsNCi0JICB9IGVsc2Ugew0KLQkgICAgaWYgKHIgIT0gMTUpDQotCSAgICAgIGJyZWFrOw0KLQkgICAgayArPSAxNTsNCi0JICB9DQotCX0NCi0NCi0gICAgICB9DQotICAgIH0NCi0NCi0gICAgLyogQ29tcGxldGVkIE1DVSwgc28gdXBkYXRlIHN0YXRlICovDQotICAgIEJJVFJFQURfU0FWRV9TVEFURShjaW5mbyxlbnRyb3B5LT5iaXRzdGF0ZSk7DQotICAgIEFTU0lHTl9TVEFURShlbnRyb3B5LT5zYXZlZCwgc3RhdGUpOw0KLSAgfQ0KLQ0KLSAgLyogQWNjb3VudCBmb3IgcmVzdGFydCBpbnRlcnZhbCAobm8tb3AgaWYgbm90IHVzaW5nIHJlc3RhcnRzKSAqLw0KLSAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsNCi0NCi0gIHJldHVybiBUUlVFOw0KLX0NCi0NCi0NCi0vKg0KLSAqIE1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciBIdWZmbWFuIGVudHJvcHkgZGVjb2RpbmcuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotamluaXRfaHVmZl9kZWNvZGVyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIGh1ZmZfZW50cm9weV9wdHIgZW50cm9weTsNCi0gIGludCBpOw0KLQ0KLSAgZW50cm9weSA9IChodWZmX2VudHJvcHlfcHRyKQ0KLSAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQlTSVpFT0YoaHVmZl9lbnRyb3B5X2RlY29kZXIpKTsNCi0gIGNpbmZvLT5lbnRyb3B5ID0gKHN0cnVjdCBqcGVnX2VudHJvcHlfZGVjb2RlciAqKSBlbnRyb3B5Ow0KLSAgZW50cm9weS0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX2h1ZmZfZGVjb2RlcjsNCi0gIGVudHJvcHktPnB1Yi5kZWNvZGVfbWN1ID0gZGVjb2RlX21jdTsNCi0NCi0gIC8qIE1hcmsgdGFibGVzIHVuYWxsb2NhdGVkICovDQotICBmb3IgKGkgPSAwOyBpIDwgTlVNX0hVRkZfVEJMUzsgaSsrKSB7DQotICAgIGVudHJvcHktPmRjX2Rlcml2ZWRfdGJsc1tpXSA9IGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsc1tpXSA9IE5VTEw7DQotICB9DQotfQ0KLQ0KLSNlbmRpZiAvL19GWF9KUEVHX1RVUkJPXw0KKyNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pCisvKgorICogamRodWZmLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBIdWZmbWFuIGVudHJvcHkgZGVjb2Rpbmcgcm91dGluZXMuCisgKgorICogTXVjaCBvZiB0aGUgY29tcGxleGl0eSBoZXJlIGhhcyB0byBkbyB3aXRoIHN1cHBvcnRpbmcgaW5wdXQgc3VzcGVuc2lvbi4KKyAqIElmIHRoZSBkYXRhIHNvdXJjZSBtb2R1bGUgZGVtYW5kcyBzdXNwZW5zaW9uLCB3ZSB3YW50IHRvIGJlIGFibGUgdG8gYmFjaworICogdXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IE1DVS4gIFRvIGRvIHRoaXMsIHdlIGNvcHkgc3RhdGUgdmFyaWFibGVzCisgKiBpbnRvIGxvY2FsIHdvcmtpbmcgc3RvcmFnZSwgYW5kIHVwZGF0ZSB0aGVtIGJhY2sgdG8gdGhlIHBlcm1hbmVudAorICogc3RvcmFnZSBvbmx5IHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIGFuIE1DVS4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAiamRodWZmLmgiCQkvKiBEZWNsYXJhdGlvbnMgc2hhcmVkIHdpdGggamRwaHVmZi5jICovCisKKyNpZmRlZiBfRlhfTUFOQUdFRF9DT0RFXworI2RlZmluZSBzYXZhYmxlX3N0YXRlCXNhdmFibGVfc3RhdGVfZAorI2VuZGlmCisKKy8qCisgKiBFeHBhbmRlZCBlbnRyb3B5IGRlY29kZXIgb2JqZWN0IGZvciBIdWZmbWFuIGRlY29kaW5nLgorICoKKyAqIFRoZSBzYXZhYmxlX3N0YXRlIHN1YnJlY29yZCBjb250YWlucyBmaWVsZHMgdGhhdCBjaGFuZ2Ugd2l0aGluIGFuIE1DVSwKKyAqIGJ1dCBtdXN0IG5vdCBiZSB1cGRhdGVkIHBlcm1hbmVudGx5IHVudGlsIHdlIGNvbXBsZXRlIHRoZSBNQ1UuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBpbnQgbGFzdF9kY192YWxbTUFYX0NPTVBTX0lOX1NDQU5dOyAvKiBsYXN0IERDIGNvZWYgZm9yIGVhY2ggY29tcG9uZW50ICovCit9IHNhdmFibGVfc3RhdGU7CisKKy8qIFRoaXMgbWFjcm8gaXMgdG8gd29yayBhcm91bmQgY29tcGlsZXJzIHdpdGggbWlzc2luZyBvciBicm9rZW4KKyAqIHN0cnVjdHVyZSBhc3NpZ25tZW50LiAgWW91J2xsIG5lZWQgdG8gZml4IHRoaXMgY29kZSBpZiB5b3UgaGF2ZQorICogc3VjaCBhIGNvbXBpbGVyIGFuZCB5b3UgY2hhbmdlIE1BWF9DT01QU19JTl9TQ0FOLgorICovCisKKyNpZm5kZWYgTk9fU1RSVUNUX0FTU0lHTgorI2RlZmluZSBBU1NJR05fU1RBVEUoZGVzdCxzcmMpICAoKGRlc3QpID0gKHNyYykpCisjZWxzZQorI2lmIE1BWF9DT01QU19JTl9TQ0FOID09IDQKKyNkZWZpbmUgQVNTSUdOX1NUQVRFKGRlc3Qsc3JjKSAgXAorCSgoZGVzdCkubGFzdF9kY192YWxbMF0gPSAoc3JjKS5sYXN0X2RjX3ZhbFswXSwgXAorCSAoZGVzdCkubGFzdF9kY192YWxbMV0gPSAoc3JjKS5sYXN0X2RjX3ZhbFsxXSwgXAorCSAoZGVzdCkubGFzdF9kY192YWxbMl0gPSAoc3JjKS5sYXN0X2RjX3ZhbFsyXSwgXAorCSAoZGVzdCkubGFzdF9kY192YWxbM10gPSAoc3JjKS5sYXN0X2RjX3ZhbFszXSkKKyNlbmRpZgorI2VuZGlmCisKKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QganBlZ19lbnRyb3B5X2RlY29kZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCisKKyAgLyogVGhlc2UgZmllbGRzIGFyZSBsb2FkZWQgaW50byBsb2NhbCB2YXJpYWJsZXMgYXQgc3RhcnQgb2YgZWFjaCBNQ1UuCisgICAqIEluIGNhc2Ugb2Ygc3VzcGVuc2lvbiwgd2UgZXhpdCBXSVRIT1VUIHVwZGF0aW5nIHRoZW0uCisgICAqLworICBiaXRyZWFkX3Blcm1fc3RhdGUgYml0c3RhdGU7CS8qIEJpdCBidWZmZXIgYXQgc3RhcnQgb2YgTUNVICovCisgIHNhdmFibGVfc3RhdGUgc2F2ZWQ7CQkvKiBPdGhlciBzdGF0ZSBhdCBzdGFydCBvZiBNQ1UgKi8KKworICAvKiBUaGVzZSBmaWVsZHMgYXJlIE5PVCBsb2FkZWQgaW50byBsb2NhbCB3b3JraW5nIHN0YXRlLiAqLworICB1bnNpZ25lZCBpbnQgcmVzdGFydHNfdG9fZ287CS8qIE1DVXMgbGVmdCBpbiB0aGlzIHJlc3RhcnQgaW50ZXJ2YWwgKi8KKworICAvKiBQb2ludGVycyB0byBkZXJpdmVkIHRhYmxlcyAodGhlc2Ugd29ya3NwYWNlcyBoYXZlIGltYWdlIGxpZmVzcGFuKSAqLworICBkX2Rlcml2ZWRfdGJsICogZGNfZGVyaXZlZF90YmxzW05VTV9IVUZGX1RCTFNdOworICBkX2Rlcml2ZWRfdGJsICogYWNfZGVyaXZlZF90YmxzW05VTV9IVUZGX1RCTFNdOworCisgIC8qIFByZWNhbGN1bGF0ZWQgaW5mbyBzZXQgdXAgYnkgc3RhcnRfcGFzcyBmb3IgdXNlIGluIGRlY29kZV9tY3U6ICovCisKKyAgLyogUG9pbnRlcnMgdG8gZGVyaXZlZCB0YWJsZXMgdG8gYmUgdXNlZCBmb3IgZWFjaCBibG9jayB3aXRoaW4gYW4gTUNVICovCisgIGRfZGVyaXZlZF90YmwgKiBkY19jdXJfdGJsc1tEX01BWF9CTE9DS1NfSU5fTUNVXTsKKyAgZF9kZXJpdmVkX3RibCAqIGFjX2N1cl90YmxzW0RfTUFYX0JMT0NLU19JTl9NQ1VdOworICAvKiBXaGV0aGVyIHdlIGNhcmUgYWJvdXQgdGhlIERDIGFuZCBBQyBjb2VmZmljaWVudCB2YWx1ZXMgZm9yIGVhY2ggYmxvY2sgKi8KKyAgYm9vbGVhbiBkY19uZWVkZWRbRF9NQVhfQkxPQ0tTX0lOX01DVV07CisgIGJvb2xlYW4gYWNfbmVlZGVkW0RfTUFYX0JMT0NLU19JTl9NQ1VdOworfSBodWZmX2VudHJvcHlfZGVjb2RlcjsKKwordHlwZWRlZiBodWZmX2VudHJvcHlfZGVjb2RlciAqIGh1ZmZfZW50cm9weV9wdHI7CisKKworLyoKKyAqIEluaXRpYWxpemUgZm9yIGEgSHVmZm1hbi1jb21wcmVzc2VkIHNjYW4uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9wYXNzX2h1ZmZfZGVjb2RlciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5OworICBpbnQgY2ksIGJsa24sIGRjdGJsLCBhY3RibDsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7CisKKyAgLyogQ2hlY2sgdGhhdCB0aGUgc2NhbiBwYXJhbWV0ZXJzIFNzLCBTZSwgQWgvQWwgYXJlIE9LIGZvciBzZXF1ZW50aWFsIEpQRUcuCisgICAqIFRoaXMgb3VnaHQgdG8gYmUgYW4gZXJyb3IgY29uZGl0aW9uLCBidXQgd2UgbWFrZSBpdCBhIHdhcm5pbmcgYmVjYXVzZQorICAgKiB0aGVyZSBhcmUgc29tZSBiYXNlbGluZSBmaWxlcyBvdXQgdGhlcmUgd2l0aCBhbGwgemVyb2VzIGluIHRoZXNlIGJ5dGVzLgorICAgKi8KKyAgaWYgKGNpbmZvLT5TcyAhPSAwIHx8IGNpbmZvLT5TZSAhPSBEQ1RTSVpFMi0xIHx8CisgICAgICBjaW5mby0+QWggIT0gMCB8fCBjaW5mby0+QWwgIT0gMCkKKyAgICBXQVJOTVMoY2luZm8sIEpXUk5fTk9UX1NFUVVFTlRJQUwpOworCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICBkY3RibCA9IGNvbXBwdHItPmRjX3RibF9ubzsKKyAgICBhY3RibCA9IGNvbXBwdHItPmFjX3RibF9ubzsKKyAgICAvKiBDb21wdXRlIGRlcml2ZWQgdmFsdWVzIGZvciBIdWZmbWFuIHRhYmxlcyAqLworICAgIC8qIFdlIG1heSBkbyB0aGlzIG1vcmUgdGhhbiBvbmNlIGZvciBhIHRhYmxlLCBidXQgaXQncyBub3QgZXhwZW5zaXZlICovCisgICAganBlZ19tYWtlX2RfZGVyaXZlZF90YmwoY2luZm8sIFRSVUUsIGRjdGJsLAorCQkJICAgICYgZW50cm9weS0+ZGNfZGVyaXZlZF90YmxzW2RjdGJsXSk7CisgICAganBlZ19tYWtlX2RfZGVyaXZlZF90YmwoY2luZm8sIEZBTFNFLCBhY3RibCwKKwkJCSAgICAmIGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsc1thY3RibF0pOworICAgIC8qIEluaXRpYWxpemUgREMgcHJlZGljdGlvbnMgdG8gMCAqLworICAgIGVudHJvcHktPnNhdmVkLmxhc3RfZGNfdmFsW2NpXSA9IDA7CisgIH0KKworICAvKiBQcmVjYWxjdWxhdGUgZGVjb2RpbmcgaW5mbyBmb3IgZWFjaCBibG9jayBpbiBhbiBNQ1Ugb2YgdGhpcyBzY2FuICovCisgIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7CisgICAgY2kgPSBjaW5mby0+TUNVX21lbWJlcnNoaXBbYmxrbl07CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICAvKiBQcmVjYWxjdWxhdGUgd2hpY2ggdGFibGUgdG8gdXNlIGZvciBlYWNoIGJsb2NrICovCisgICAgZW50cm9weS0+ZGNfY3VyX3RibHNbYmxrbl0gPSBlbnRyb3B5LT5kY19kZXJpdmVkX3RibHNbY29tcHB0ci0+ZGNfdGJsX25vXTsKKyAgICBlbnRyb3B5LT5hY19jdXJfdGJsc1tibGtuXSA9IGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsc1tjb21wcHRyLT5hY190Ymxfbm9dOworICAgIC8qIERlY2lkZSB3aGV0aGVyIHdlIHJlYWxseSBjYXJlIGFib3V0IHRoZSBjb2VmZmljaWVudCB2YWx1ZXMgKi8KKyAgICBpZiAoY29tcHB0ci0+Y29tcG9uZW50X25lZWRlZCkgeworICAgICAgZW50cm9weS0+ZGNfbmVlZGVkW2Jsa25dID0gVFJVRTsKKyAgICAgIC8qIHdlIGRvbid0IG5lZWQgdGhlIEFDcyBpZiBwcm9kdWNpbmcgYSAxLzh0aC1zaXplIGltYWdlICovCisgICAgICBlbnRyb3B5LT5hY19uZWVkZWRbYmxrbl0gPSAoY29tcHB0ci0+RENUX3NjYWxlZF9zaXplID4gMSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGVudHJvcHktPmRjX25lZWRlZFtibGtuXSA9IGVudHJvcHktPmFjX25lZWRlZFtibGtuXSA9IEZBTFNFOworICAgIH0KKyAgfQorCisgIC8qIEluaXRpYWxpemUgYml0cmVhZCBzdGF0ZSB2YXJpYWJsZXMgKi8KKyAgZW50cm9weS0+Yml0c3RhdGUuYml0c19sZWZ0ID0gMDsKKyAgZW50cm9weS0+Yml0c3RhdGUuZ2V0X2J1ZmZlciA9IDA7IC8qIHVubmVjZXNzYXJ5LCBidXQga2VlcHMgUHVyaWZ5IHF1aWV0ICovCisgIGVudHJvcHktPnB1Yi5pbnN1ZmZpY2llbnRfZGF0YSA9IEZBTFNFOworCisgIC8qIEluaXRpYWxpemUgcmVzdGFydCBjb3VudGVyICovCisgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7Cit9CisKKworLyoKKyAqIENvbXB1dGUgdGhlIGRlcml2ZWQgdmFsdWVzIGZvciBhIEh1ZmZtYW4gdGFibGUuCisgKiBUaGlzIHJvdXRpbmUgYWxzbyBwZXJmb3JtcyBzb21lIHZhbGlkYXRpb24gY2hlY2tzIG9uIHRoZSB0YWJsZS4KKyAqCisgKiBOb3RlIHRoaXMgaXMgYWxzbyB1c2VkIGJ5IGpkcGh1ZmYuYy4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIGlzREMsIGludCB0YmxubywKKwkJCSBkX2Rlcml2ZWRfdGJsICoqIHBkdGJsKQoreworICBKSFVGRl9UQkwgKmh0Ymw7CisgIGRfZGVyaXZlZF90YmwgKmR0Ymw7CisgIGludCBwLCBpLCBsLCBfc2ksIG51bXN5bWJvbHM7CisgIGludCBsb29rYml0cywgY3RyOworICBjaGFyIGh1ZmZzaXplWzI1N107CisgIHVuc2lnbmVkIGludCBodWZmY29kZVsyNTddOworICB1bnNpZ25lZCBpbnQgY29kZTsKKworICAvKiBOb3RlIHRoYXQgaHVmZnNpemVbXSBhbmQgaHVmZmNvZGVbXSBhcmUgZmlsbGVkIGluIGNvZGUtbGVuZ3RoIG9yZGVyLAorICAgKiBwYXJhbGxlbGluZyB0aGUgb3JkZXIgb2YgdGhlIHN5bWJvbHMgdGhlbXNlbHZlcyBpbiBodGJsLT5odWZmdmFsW10uCisgICAqLworCisgIC8qIEZpbmQgdGhlIGlucHV0IEh1ZmZtYW4gdGFibGUgKi8KKyAgaWYgKHRibG5vIDwgMCB8fCB0YmxubyA+PSBOVU1fSFVGRl9UQkxTKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX05PX0hVRkZfVEFCTEUsIHRibG5vKTsKKyAgaHRibCA9CisgICAgaXNEQyA/IGNpbmZvLT5kY19odWZmX3RibF9wdHJzW3RibG5vXSA6IGNpbmZvLT5hY19odWZmX3RibF9wdHJzW3RibG5vXTsKKyAgaWYgKGh0YmwgPT0gTlVMTCkKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9OT19IVUZGX1RBQkxFLCB0Ymxubyk7CisKKyAgLyogQWxsb2NhdGUgYSB3b3Jrc3BhY2UgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IGRvbmUgc28uICovCisgIGlmICgqcGR0YmwgPT0gTlVMTCkKKyAgICAqcGR0YmwgPSAoZF9kZXJpdmVkX3RibCAqKQorICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkJCQkgIFNJWkVPRihkX2Rlcml2ZWRfdGJsKSk7CisgIGR0YmwgPSAqcGR0Ymw7CisgIGR0YmwtPnB1YiA9IGh0Ymw7CQkvKiBmaWxsIGluIGJhY2sgbGluayAqLworICAKKyAgLyogRmlndXJlIEMuMTogbWFrZSB0YWJsZSBvZiBIdWZmbWFuIGNvZGUgbGVuZ3RoIGZvciBlYWNoIHN5bWJvbCAqLworCisgIHAgPSAwOworICBmb3IgKGwgPSAxOyBsIDw9IDE2OyBsKyspIHsKKyAgICBpID0gKGludCkgaHRibC0+Yml0c1tsXTsKKyAgICBpZiAoaSA8IDAgfHwgcCArIGkgPiAyNTYpCS8qIHByb3RlY3QgYWdhaW5zdCB0YWJsZSBvdmVycnVuICovCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9IVUZGX1RBQkxFKTsKKyAgICB3aGlsZSAoaS0tKQorICAgICAgaHVmZnNpemVbcCsrXSA9IChjaGFyKSBsOworICB9CisgIGh1ZmZzaXplW3BdID0gMDsKKyAgbnVtc3ltYm9scyA9IHA7CisgIAorICAvKiBGaWd1cmUgQy4yOiBnZW5lcmF0ZSB0aGUgY29kZXMgdGhlbXNlbHZlcyAqLworICAvKiBXZSBhbHNvIHZhbGlkYXRlIHRoYXQgdGhlIGNvdW50cyByZXByZXNlbnQgYSBsZWdhbCBIdWZmbWFuIGNvZGUgdHJlZS4gKi8KKyAgCisgIGNvZGUgPSAwOworICBfc2kgPSBodWZmc2l6ZVswXTsKKyAgcCA9IDA7CisgIHdoaWxlIChodWZmc2l6ZVtwXSkgeworICAgIHdoaWxlICgoKGludCkgaHVmZnNpemVbcF0pID09IF9zaSkgeworICAgICAgaHVmZmNvZGVbcCsrXSA9IGNvZGU7CisgICAgICBjb2RlKys7CisgICAgfQorICAgIC8qIGNvZGUgaXMgbm93IDEgbW9yZSB0aGFuIHRoZSBsYXN0IGNvZGUgdXNlZCBmb3IgY29kZWxlbmd0aCBzaTsgYnV0CisgICAgICogaXQgbXVzdCBzdGlsbCBmaXQgaW4gc2kgYml0cywgc2luY2Ugbm8gY29kZSBpcyBhbGxvd2VkIHRvIGJlIGFsbCBvbmVzLgorICAgICAqLworICAgIGlmICgoKElOVDMyKSBjb2RlKSA+PSAoKChJTlQzMikgMSkgPDwgX3NpKSkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0hVRkZfVEFCTEUpOworICAgIGNvZGUgPDw9IDE7CisgICAgX3NpKys7CisgIH0KKworICAvKiBGaWd1cmUgRi4xNTogZ2VuZXJhdGUgZGVjb2RpbmcgdGFibGVzIGZvciBiaXQtc2VxdWVudGlhbCBkZWNvZGluZyAqLworCisgIHAgPSAwOworICBmb3IgKGwgPSAxOyBsIDw9IDE2OyBsKyspIHsKKyAgICBpZiAoaHRibC0+Yml0c1tsXSkgeworICAgICAgLyogdmFsb2Zmc2V0W2xdID0gaHVmZnZhbFtdIGluZGV4IG9mIDFzdCBzeW1ib2wgb2YgY29kZSBsZW5ndGggbCwKKyAgICAgICAqIG1pbnVzIHRoZSBtaW5pbXVtIGNvZGUgb2YgbGVuZ3RoIGwKKyAgICAgICAqLworICAgICAgZHRibC0+dmFsb2Zmc2V0W2xdID0gKElOVDMyKSBwIC0gKElOVDMyKSBodWZmY29kZVtwXTsKKyAgICAgIHAgKz0gaHRibC0+Yml0c1tsXTsKKyAgICAgIGR0YmwtPm1heGNvZGVbbF0gPSBodWZmY29kZVtwLTFdOyAvKiBtYXhpbXVtIGNvZGUgb2YgbGVuZ3RoIGwgKi8KKyAgICB9IGVsc2UgeworICAgICAgZHRibC0+bWF4Y29kZVtsXSA9IC0xOwkvKiAtMSBpZiBubyBjb2RlcyBvZiB0aGlzIGxlbmd0aCAqLworICAgIH0KKyAgfQorICBkdGJsLT5tYXhjb2RlWzE3XSA9IDB4RkZGRkZMOyAvKiBlbnN1cmVzIGpwZWdfaHVmZl9kZWNvZGUgdGVybWluYXRlcyAqLworCisgIC8qIENvbXB1dGUgbG9va2FoZWFkIHRhYmxlcyB0byBzcGVlZCB1cCBkZWNvZGluZy4KKyAgICogRmlyc3Qgd2Ugc2V0IGFsbCB0aGUgdGFibGUgZW50cmllcyB0byAwLCBpbmRpY2F0aW5nICJ0b28gbG9uZyI7CisgICAqIHRoZW4gd2UgaXRlcmF0ZSB0aHJvdWdoIHRoZSBIdWZmbWFuIGNvZGVzIHRoYXQgYXJlIHNob3J0IGVub3VnaCBhbmQKKyAgICogZmlsbCBpbiBhbGwgdGhlIGVudHJpZXMgdGhhdCBjb3JyZXNwb25kIHRvIGJpdCBzZXF1ZW5jZXMgc3RhcnRpbmcKKyAgICogd2l0aCB0aGF0IGNvZGUuCisgICAqLworCisgIE1FTVpFUk8oZHRibC0+bG9va19uYml0cywgU0laRU9GKGR0YmwtPmxvb2tfbmJpdHMpKTsKKworICBwID0gMDsKKyAgZm9yIChsID0gMTsgbCA8PSBIVUZGX0xPT0tBSEVBRDsgbCsrKSB7CisgICAgZm9yIChpID0gMTsgaSA8PSAoaW50KSBodGJsLT5iaXRzW2xdOyBpKyssIHArKykgeworICAgICAgLyogbCA9IGN1cnJlbnQgY29kZSdzIGxlbmd0aCwgcCA9IGl0cyBpbmRleCBpbiBodWZmY29kZVtdICYgaHVmZnZhbFtdLiAqLworICAgICAgLyogR2VuZXJhdGUgbGVmdC1qdXN0aWZpZWQgY29kZSBmb2xsb3dlZCBieSBhbGwgcG9zc2libGUgYml0IHNlcXVlbmNlcyAqLworICAgICAgbG9va2JpdHMgPSBodWZmY29kZVtwXSA8PCAoSFVGRl9MT09LQUhFQUQtbCk7CisgICAgICBmb3IgKGN0ciA9IDEgPDwgKEhVRkZfTE9PS0FIRUFELWwpOyBjdHIgPiAwOyBjdHItLSkgeworCWR0YmwtPmxvb2tfbmJpdHNbbG9va2JpdHNdID0gbDsKKwlkdGJsLT5sb29rX3N5bVtsb29rYml0c10gPSBodGJsLT5odWZmdmFsW3BdOworCWxvb2tiaXRzKys7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLyogVmFsaWRhdGUgc3ltYm9scyBhcyBiZWluZyByZWFzb25hYmxlLgorICAgKiBGb3IgQUMgdGFibGVzLCB3ZSBtYWtlIG5vIGNoZWNrLCBidXQgYWNjZXB0IGFsbCBieXRlIHZhbHVlcyAwLi4yNTUuCisgICAqIEZvciBEQyB0YWJsZXMsIHdlIHJlcXVpcmUgdGhlIHN5bWJvbHMgdG8gYmUgaW4gcmFuZ2UgMC4uMTUuCisgICAqIChUaWdodGVyIGJvdW5kcyBjb3VsZCBiZSBhcHBsaWVkIGRlcGVuZGluZyBvbiB0aGUgZGF0YSBkZXB0aCBhbmQgbW9kZSwKKyAgICogYnV0IHRoaXMgaXMgc3VmZmljaWVudCB0byBlbnN1cmUgc2FmZSBkZWNvZGluZy4pCisgICAqLworICBpZiAoaXNEQykgeworICAgIGZvciAoaSA9IDA7IGkgPCBudW1zeW1ib2xzOyBpKyspIHsKKyAgICAgIGludCBzeW0gPSBodGJsLT5odWZmdmFsW2ldOworICAgICAgaWYgKHN5bSA8IDAgfHwgc3ltID4gMTUpCisJRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSFVGRl9UQUJMRSk7CisgICAgfQorICB9Cit9CisKKworLyoKKyAqIE91dC1vZi1saW5lIGNvZGUgZm9yIGJpdCBmZXRjaGluZyAoc2hhcmVkIHdpdGggamRwaHVmZi5jKS4KKyAqIFNlZSBqZGh1ZmYuaCBmb3IgaW5mbyBhYm91dCB1c2FnZS4KKyAqIE5vdGU6IGN1cnJlbnQgdmFsdWVzIG9mIGdldF9idWZmZXIgYW5kIGJpdHNfbGVmdCBhcmUgcGFzc2VkIGFzIHBhcmFtZXRlcnMsCisgKiBidXQgYXJlIHJldHVybmVkIGluIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkcyBvZiB0aGUgc3RhdGUgc3RydWN0LgorICoKKyAqIE9uIG1vc3QgbWFjaGluZXMgTUlOX0dFVF9CSVRTIHNob3VsZCBiZSAyNSB0byBhbGxvdyB0aGUgZnVsbCAzMi1iaXQgd2lkdGgKKyAqIG9mIGdldF9idWZmZXIgdG8gYmUgdXNlZC4gIChPbiBtYWNoaW5lcyB3aXRoIHdpZGVyIHdvcmRzLCBhbiBldmVuIGxhcmdlcgorICogYnVmZmVyIGNvdWxkIGJlIHVzZWQuKSAgSG93ZXZlciwgb24gc29tZSBtYWNoaW5lcyAzMi1iaXQgc2hpZnRzIGFyZQorICogcXVpdGUgc2xvdyBhbmQgdGFrZSB0aW1lIHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIHBsYWNlcyBzaGlmdGVkLgorICogKFRoaXMgaXMgdHJ1ZSB3aXRoIG1vc3QgUEMgY29tcGlsZXJzLCBmb3IgaW5zdGFuY2UuKSAgSW4gdGhpcyBjYXNlIGl0IG1heQorICogYmUgYSB3aW4gdG8gc2V0IE1JTl9HRVRfQklUUyB0byB0aGUgbWluaW11bSB2YWx1ZSBvZiAxNS4gIFRoaXMgcmVkdWNlcyB0aGUKKyAqIGF2ZXJhZ2Ugc2hpZnQgZGlzdGFuY2UgYXQgdGhlIGNvc3Qgb2YgbW9yZSBjYWxscyB0byBqcGVnX2ZpbGxfYml0X2J1ZmZlci4KKyAqLworCisjaWZkZWYgU0xPV19TSElGVF8zMgorI2RlZmluZSBNSU5fR0VUX0JJVFMgIDE1CS8qIG1pbmltdW0gYWxsb3dhYmxlIHZhbHVlICovCisjZWxzZQorI2RlZmluZSBNSU5fR0VUX0JJVFMgIChCSVRfQlVGX1NJWkUtNykKKyNlbmRpZgorCisKK0dMT0JBTChib29sZWFuKQoranBlZ19maWxsX2JpdF9idWZmZXIgKGJpdHJlYWRfd29ya2luZ19zdGF0ZSAqIHN0YXRlLAorCQkgICAgICByZWdpc3RlciBiaXRfYnVmX3R5cGUgZ2V0X2J1ZmZlciwgcmVnaXN0ZXIgaW50IGJpdHNfbGVmdCwKKwkJICAgICAgaW50IG5iaXRzKQorLyogTG9hZCB1cCB0aGUgYml0IGJ1ZmZlciB0byBhIGRlcHRoIG9mIGF0IGxlYXN0IG5iaXRzICovCit7CisgIC8qIENvcHkgaGVhdmlseSB1c2VkIHN0YXRlIGZpZWxkcyBpbnRvIGxvY2FscyAoaG9wZWZ1bGx5IHJlZ2lzdGVycykgKi8KKyAgcmVnaXN0ZXIgY29uc3QgSk9DVEVUICogbmV4dF9pbnB1dF9ieXRlID0gc3RhdGUtPm5leHRfaW5wdXRfYnl0ZTsKKyAgcmVnaXN0ZXIgc2l6ZV90IGJ5dGVzX2luX2J1ZmZlciA9IHN0YXRlLT5ieXRlc19pbl9idWZmZXI7CisgIGpfZGVjb21wcmVzc19wdHIgY2luZm8gPSBzdGF0ZS0+Y2luZm87CisKKyAgLyogQXR0ZW1wdCB0byBsb2FkIGF0IGxlYXN0IE1JTl9HRVRfQklUUyBiaXRzIGludG8gZ2V0X2J1ZmZlci4gKi8KKyAgLyogKEl0IGlzIGFzc3VtZWQgdGhhdCBubyByZXF1ZXN0IHdpbGwgYmUgZm9yIG1vcmUgdGhhbiB0aGF0IG1hbnkgYml0cy4pICovCisgIC8qIFdlIGZhaWwgdG8gZG8gc28gb25seSBpZiB3ZSBoaXQgYSBtYXJrZXIgb3IgYXJlIGZvcmNlZCB0byBzdXNwZW5kLiAqLworCisgIGlmIChjaW5mby0+dW5yZWFkX21hcmtlciA9PSAwKSB7CS8qIGNhbm5vdCBhZHZhbmNlIHBhc3QgYSBtYXJrZXIgKi8KKyAgICB3aGlsZSAoYml0c19sZWZ0IDwgTUlOX0dFVF9CSVRTKSB7CisgICAgICByZWdpc3RlciBpbnQgYzsKKworICAgICAgLyogQXR0ZW1wdCB0byByZWFkIGEgYnl0ZSAqLworICAgICAgaWYgKGJ5dGVzX2luX2J1ZmZlciA9PSAwKSB7CisJaWYgKCEgKCpjaW5mby0+c3JjLT5maWxsX2lucHV0X2J1ZmZlcikgKGNpbmZvKSkKKwkgIHJldHVybiBGQUxTRTsKKwluZXh0X2lucHV0X2J5dGUgPSBjaW5mby0+c3JjLT5uZXh0X2lucHV0X2J5dGU7CisJYnl0ZXNfaW5fYnVmZmVyID0gY2luZm8tPnNyYy0+Ynl0ZXNfaW5fYnVmZmVyOworICAgICAgfQorICAgICAgYnl0ZXNfaW5fYnVmZmVyLS07CisgICAgICBjID0gR0VUSk9DVEVUKCpuZXh0X2lucHV0X2J5dGUrKyk7CisKKyAgICAgIC8qIElmIGl0J3MgMHhGRiwgY2hlY2sgYW5kIGRpc2NhcmQgc3R1ZmZlZCB6ZXJvIGJ5dGUgKi8KKyAgICAgIGlmIChjID09IDB4RkYpIHsKKwkvKiBMb29wIGhlcmUgdG8gZGlzY2FyZCBhbnkgcGFkZGluZyBGRidzIG9uIHRlcm1pbmF0aW5nIG1hcmtlciwKKwkgKiBzbyB0aGF0IHdlIGNhbiBzYXZlIGEgdmFsaWQgdW5yZWFkX21hcmtlciB2YWx1ZS4gIE5PVEU6IHdlIHdpbGwKKwkgKiBhY2NlcHQgbXVsdGlwbGUgRkYncyBmb2xsb3dlZCBieSBhIDAgYXMgbWVhbmluZyBhIHNpbmdsZSBGRiBkYXRhCisJICogYnl0ZS4gIFRoaXMgZGF0YSBwYXR0ZXJuIGlzIG5vdCB2YWxpZCBhY2NvcmRpbmcgdG8gdGhlIHN0YW5kYXJkLgorCSAqLworCWRvIHsKKwkgIGlmIChieXRlc19pbl9idWZmZXIgPT0gMCkgeworCSAgICBpZiAoISAoKmNpbmZvLT5zcmMtPmZpbGxfaW5wdXRfYnVmZmVyKSAoY2luZm8pKQorCSAgICAgIHJldHVybiBGQUxTRTsKKwkgICAgbmV4dF9pbnB1dF9ieXRlID0gY2luZm8tPnNyYy0+bmV4dF9pbnB1dF9ieXRlOworCSAgICBieXRlc19pbl9idWZmZXIgPSBjaW5mby0+c3JjLT5ieXRlc19pbl9idWZmZXI7CisJICB9CisJICBieXRlc19pbl9idWZmZXItLTsKKwkgIGMgPSBHRVRKT0NURVQoKm5leHRfaW5wdXRfYnl0ZSsrKTsKKwl9IHdoaWxlIChjID09IDB4RkYpOworCisJaWYgKGMgPT0gMCkgeworCSAgLyogRm91bmQgRkYvMDAsIHdoaWNoIHJlcHJlc2VudHMgYW4gRkYgZGF0YSBieXRlICovCisJICBjID0gMHhGRjsKKwl9IGVsc2UgeworCSAgLyogT29wcywgaXQncyBhY3R1YWxseSBhIG1hcmtlciBpbmRpY2F0aW5nIGVuZCBvZiBjb21wcmVzc2VkIGRhdGEuCisJICAgKiBTYXZlIHRoZSBtYXJrZXIgY29kZSBmb3IgbGF0ZXIgdXNlLgorCSAgICogRmluZSBwb2ludDogaXQgbWlnaHQgYXBwZWFyIHRoYXQgd2Ugc2hvdWxkIHNhdmUgdGhlIG1hcmtlciBpbnRvCisJICAgKiBiaXRyZWFkIHdvcmtpbmcgc3RhdGUsIG5vdCBzdHJhaWdodCBpbnRvIHBlcm1hbmVudCBzdGF0ZS4gIEJ1dAorCSAgICogb25jZSB3ZSBoYXZlIGhpdCBhIG1hcmtlciwgd2UgY2Fubm90IG5lZWQgdG8gc3VzcGVuZCB3aXRoaW4gdGhlCisJICAgKiBjdXJyZW50IE1DVSwgYmVjYXVzZSB3ZSB3aWxsIHJlYWQgbm8gbW9yZSBieXRlcyBmcm9tIHRoZSBkYXRhCisJICAgKiBzb3VyY2UuICBTbyBpdCBpcyBPSyB0byB1cGRhdGUgcGVybWFuZW50IHN0YXRlIHJpZ2h0IGF3YXkuCisJICAgKi8KKwkgIGNpbmZvLT51bnJlYWRfbWFya2VyID0gYzsKKwkgIC8qIFNlZSBpZiB3ZSBuZWVkIHRvIGluc2VydCBzb21lIGZha2UgemVybyBiaXRzLiAqLworCSAgZ290byBub19tb3JlX2J5dGVzOworCX0KKyAgICAgIH0KKworICAgICAgLyogT0ssIGxvYWQgYyBpbnRvIGdldF9idWZmZXIgKi8KKyAgICAgIGdldF9idWZmZXIgPSAoZ2V0X2J1ZmZlciA8PCA4KSB8IGM7CisgICAgICBiaXRzX2xlZnQgKz0gODsKKyAgICB9IC8qIGVuZCB3aGlsZSAqLworICB9IGVsc2UgeworICBub19tb3JlX2J5dGVzOgorICAgIC8qIFdlIGdldCBoZXJlIGlmIHdlJ3ZlIHJlYWQgdGhlIG1hcmtlciB0aGF0IHRlcm1pbmF0ZXMgdGhlIGNvbXByZXNzZWQKKyAgICAgKiBkYXRhIHNlZ21lbnQuICBUaGVyZSBzaG91bGQgYmUgZW5vdWdoIGJpdHMgaW4gdGhlIGJ1ZmZlciByZWdpc3RlcgorICAgICAqIHRvIHNhdGlzZnkgdGhlIHJlcXVlc3Q7IGlmIHNvLCBubyBwcm9ibGVtLgorICAgICAqLworICAgIGlmIChuYml0cyA+IGJpdHNfbGVmdCkgeworICAgICAgLyogVWgtb2guICBSZXBvcnQgY29ycnVwdGVkIGRhdGEgdG8gdXNlciBhbmQgc3R1ZmYgemVyb2VzIGludG8KKyAgICAgICAqIHRoZSBkYXRhIHN0cmVhbSwgc28gdGhhdCB3ZSBjYW4gcHJvZHVjZSBzb21lIGtpbmQgb2YgaW1hZ2UuCisgICAgICAgKiBXZSB1c2UgYSBub252b2xhdGlsZSBmbGFnIHRvIGVuc3VyZSB0aGF0IG9ubHkgb25lIHdhcm5pbmcgbWVzc2FnZQorICAgICAgICogYXBwZWFycyBwZXIgZGF0YSBzZWdtZW50LgorICAgICAgICovCisgICAgICBpZiAoISBjaW5mby0+ZW50cm9weS0+aW5zdWZmaWNpZW50X2RhdGEpIHsKKwlXQVJOTVMoY2luZm8sIEpXUk5fSElUX01BUktFUik7CisJY2luZm8tPmVudHJvcHktPmluc3VmZmljaWVudF9kYXRhID0gVFJVRTsKKyAgICAgIH0KKyAgICAgIC8qIEZpbGwgdGhlIGJ1ZmZlciB3aXRoIHplcm8gYml0cyAqLworICAgICAgZ2V0X2J1ZmZlciA8PD0gTUlOX0dFVF9CSVRTIC0gYml0c19sZWZ0OworICAgICAgYml0c19sZWZ0ID0gTUlOX0dFVF9CSVRTOworICAgIH0KKyAgfQorCisgIC8qIFVubG9hZCB0aGUgbG9jYWwgcmVnaXN0ZXJzICovCisgIHN0YXRlLT5uZXh0X2lucHV0X2J5dGUgPSBuZXh0X2lucHV0X2J5dGU7CisgIHN0YXRlLT5ieXRlc19pbl9idWZmZXIgPSBieXRlc19pbl9idWZmZXI7CisgIHN0YXRlLT5nZXRfYnVmZmVyID0gZ2V0X2J1ZmZlcjsKKyAgc3RhdGUtPmJpdHNfbGVmdCA9IGJpdHNfbGVmdDsKKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogT3V0LW9mLWxpbmUgY29kZSBmb3IgSHVmZm1hbiBjb2RlIGRlY29kaW5nLgorICogU2VlIGpkaHVmZi5oIGZvciBpbmZvIGFib3V0IHVzYWdlLgorICovCisKK0dMT0JBTChpbnQpCitqcGVnX2h1ZmZfZGVjb2RlIChiaXRyZWFkX3dvcmtpbmdfc3RhdGUgKiBzdGF0ZSwKKwkJICByZWdpc3RlciBiaXRfYnVmX3R5cGUgZ2V0X2J1ZmZlciwgcmVnaXN0ZXIgaW50IGJpdHNfbGVmdCwKKwkJICBkX2Rlcml2ZWRfdGJsICogaHRibCwgaW50IG1pbl9iaXRzKQoreworICByZWdpc3RlciBpbnQgbCA9IG1pbl9iaXRzOworICByZWdpc3RlciBJTlQzMiBjb2RlOworCisgIC8qIEhVRkZfREVDT0RFIGhhcyBkZXRlcm1pbmVkIHRoYXQgdGhlIGNvZGUgaXMgYXQgbGVhc3QgbWluX2JpdHMgKi8KKyAgLyogYml0cyBsb25nLCBzbyBmZXRjaCB0aGF0IG1hbnkgYml0cyBpbiBvbmUgc3dvb3AuICovCisKKyAgQ0hFQ0tfQklUX0JVRkZFUigqc3RhdGUsIGwsIHJldHVybiAtMSk7CisgIGNvZGUgPSBHRVRfQklUUyhsKTsKKworICAvKiBDb2xsZWN0IHRoZSByZXN0IG9mIHRoZSBIdWZmbWFuIGNvZGUgb25lIGJpdCBhdCBhIHRpbWUuICovCisgIC8qIFRoaXMgaXMgcGVyIEZpZ3VyZSBGLjE2IGluIHRoZSBKUEVHIHNwZWMuICovCisKKyAgd2hpbGUgKGNvZGUgPiBodGJsLT5tYXhjb2RlW2xdKSB7CisgICAgY29kZSA8PD0gMTsKKyAgICBDSEVDS19CSVRfQlVGRkVSKCpzdGF0ZSwgMSwgcmV0dXJuIC0xKTsKKyAgICBjb2RlIHw9IEdFVF9CSVRTKDEpOworICAgIGwrKzsKKyAgfQorCisgIC8qIFVubG9hZCB0aGUgbG9jYWwgcmVnaXN0ZXJzICovCisgIHN0YXRlLT5nZXRfYnVmZmVyID0gZ2V0X2J1ZmZlcjsKKyAgc3RhdGUtPmJpdHNfbGVmdCA9IGJpdHNfbGVmdDsKKworICAvKiBXaXRoIGdhcmJhZ2UgaW5wdXQgd2UgbWF5IHJlYWNoIHRoZSBzZW50aW5lbCB2YWx1ZSBsID0gMTcuICovCisKKyAgaWYgKGwgPiAxNikgeworICAgIFdBUk5NUyhzdGF0ZS0+Y2luZm8sIEpXUk5fSFVGRl9CQURfQ09ERSk7CisgICAgcmV0dXJuIDA7CQkJLyogZmFrZSBhIHplcm8gYXMgdGhlIHNhZmVzdCByZXN1bHQgKi8KKyAgfQorCisgIHJldHVybiBodGJsLT5wdWItPmh1ZmZ2YWxbIChpbnQpIChjb2RlICsgaHRibC0+dmFsb2Zmc2V0W2xdKSBdOworfQorCisKKy8qCisgKiBGaWd1cmUgRi4xMjogZXh0ZW5kIHNpZ24gYml0LgorICogT24gc29tZSBtYWNoaW5lcywgYSBzaGlmdCBhbmQgYWRkIHdpbGwgYmUgZmFzdGVyIHRoYW4gYSB0YWJsZSBsb29rdXAuCisgKi8KKworI2lmZGVmIEFWT0lEX1RBQkxFUworCisjZGVmaW5lIEhVRkZfRVhURU5EKHgscykgICgoeCkgPCAoMTw8KChzKS0xKSkgPyAoeCkgKyAoKCgtMSk8PChzKSkgKyAxKSA6ICh4KSkKKworI2Vsc2UKKworI2RlZmluZSBIVUZGX0VYVEVORCh4LHMpICAoKHgpIDwgZXh0ZW5kX3Rlc3Rbc10gPyAoeCkgKyBleHRlbmRfb2Zmc2V0W3NdIDogKHgpKQorCitzdGF0aWMgY29uc3QgaW50IGV4dGVuZF90ZXN0WzE2XSA9ICAgLyogZW50cnkgbiBpcyAyKioobi0xKSAqLworICB7IDAsIDB4MDAwMSwgMHgwMDAyLCAweDAwMDQsIDB4MDAwOCwgMHgwMDEwLCAweDAwMjAsIDB4MDA0MCwgMHgwMDgwLAorICAgIDB4MDEwMCwgMHgwMjAwLCAweDA0MDAsIDB4MDgwMCwgMHgxMDAwLCAweDIwMDAsIDB4NDAwMCB9OworCitzdGF0aWMgY29uc3QgaW50IGV4dGVuZF9vZmZzZXRbMTZdID0gLyogZW50cnkgbiBpcyAoLTEgPDwgbikgKyAxICovCisgIHsgMCwgKCgtMSk8PDEpICsgMSwgKCgtMSk8PDIpICsgMSwgKCgtMSk8PDMpICsgMSwgKCgtMSk8PDQpICsgMSwKKyAgICAoKC0xKTw8NSkgKyAxLCAoKC0xKTw8NikgKyAxLCAoKC0xKTw8NykgKyAxLCAoKC0xKTw8OCkgKyAxLAorICAgICgoLTEpPDw5KSArIDEsICgoLTEpPDwxMCkgKyAxLCAoKC0xKTw8MTEpICsgMSwgKCgtMSk8PDEyKSArIDEsCisgICAgKCgtMSk8PDEzKSArIDEsICgoLTEpPDwxNCkgKyAxLCAoKC0xKTw8MTUpICsgMSB9OworCisjZW5kaWYgLyogQVZPSURfVEFCTEVTICovCisKKworLyoKKyAqIENoZWNrIGZvciBhIHJlc3RhcnQgbWFya2VyICYgcmVzeW5jaHJvbml6ZSBkZWNvZGVyLgorICogUmV0dXJucyBGQUxTRSBpZiBtdXN0IHN1c3BlbmQuCisgKi8KKworTE9DQUwoYm9vbGVhbikKK3Byb2Nlc3NfcmVzdGFydCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5OworICBpbnQgY2k7CisKKyAgLyogVGhyb3cgYXdheSBhbnkgdW51c2VkIGJpdHMgcmVtYWluaW5nIGluIGJpdCBidWZmZXI7ICovCisgIC8qIGluY2x1ZGUgYW55IGZ1bGwgYnl0ZXMgaW4gbmV4dF9tYXJrZXIncyBjb3VudCBvZiBkaXNjYXJkZWQgYnl0ZXMgKi8KKyAgY2luZm8tPm1hcmtlci0+ZGlzY2FyZGVkX2J5dGVzICs9IGVudHJvcHktPmJpdHN0YXRlLmJpdHNfbGVmdCAvIDg7CisgIGVudHJvcHktPmJpdHN0YXRlLmJpdHNfbGVmdCA9IDA7CisKKyAgLyogQWR2YW5jZSBwYXN0IHRoZSBSU1RuIG1hcmtlciAqLworICBpZiAoISAoKmNpbmZvLT5tYXJrZXItPnJlYWRfcmVzdGFydF9tYXJrZXIpIChjaW5mbykpCisgICAgcmV0dXJuIEZBTFNFOworCisgIC8qIFJlLWluaXRpYWxpemUgREMgcHJlZGljdGlvbnMgdG8gMCAqLworICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykKKyAgICBlbnRyb3B5LT5zYXZlZC5sYXN0X2RjX3ZhbFtjaV0gPSAwOworCisgIC8qIFJlc2V0IHJlc3RhcnQgY291bnRlciAqLworICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOworCisgIC8qIFJlc2V0IG91dC1vZi1kYXRhIGZsYWcsIHVubGVzcyByZWFkX3Jlc3RhcnRfbWFya2VyIGxlZnQgdXMgc21hY2sgdXAKKyAgICogYWdhaW5zdCBhIG1hcmtlci4gIEluIHRoYXQgY2FzZSB3ZSB3aWxsIGVuZCB1cCB0cmVhdGluZyB0aGUgbmV4dCBkYXRhCisgICAqIHNlZ21lbnQgYXMgZW1wdHksIGFuZCB3ZSBjYW4gYXZvaWQgcHJvZHVjaW5nIGJvZ3VzIG91dHB1dCBwaXhlbHMgYnkKKyAgICogbGVhdmluZyB0aGUgZmxhZyBzZXQuCisgICAqLworICBpZiAoY2luZm8tPnVucmVhZF9tYXJrZXIgPT0gMCkKKyAgICBlbnRyb3B5LT5wdWIuaW5zdWZmaWNpZW50X2RhdGEgPSBGQUxTRTsKKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogRGVjb2RlIGFuZCByZXR1cm4gb25lIE1DVSdzIHdvcnRoIG9mIEh1ZmZtYW4tY29tcHJlc3NlZCBjb2VmZmljaWVudHMuCisgKiBUaGUgY29lZmZpY2llbnRzIGFyZSByZW9yZGVyZWQgZnJvbSB6aWd6YWcgb3JkZXIgaW50byBuYXR1cmFsIGFycmF5IG9yZGVyLAorICogYnV0IGFyZSBub3QgZGVxdWFudGl6ZWQuCisgKgorICogVGhlIGkndGggYmxvY2sgb2YgdGhlIE1DVSBpcyBzdG9yZWQgaW50byB0aGUgYmxvY2sgcG9pbnRlZCB0byBieQorICogTUNVX2RhdGFbaV0uICBXRSBBU1NVTUUgVEhJUyBBUkVBIEhBUyBCRUVOIFpFUk9FRCBCWSBUSEUgQ0FMTEVSLgorICogKFdob2xlc2FsZSB6ZXJvaW5nIGlzIHVzdWFsbHkgYSBsaXR0bGUgZmFzdGVyIHRoYW4gcmV0YWlsLi4uKQorICoKKyAqIFJldHVybnMgRkFMU0UgaWYgZGF0YSBzb3VyY2UgcmVxdWVzdGVkIHN1c3BlbnNpb24uICBJbiB0aGF0IGNhc2Ugbm8KKyAqIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gcGVybWFuZW50IHN0YXRlLiAgKEV4Y2VwdGlvbjogc29tZSBvdXRwdXQKKyAqIGNvZWZmaWNpZW50cyBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gYXNzaWduZWQuICBUaGlzIGlzIGhhcm1sZXNzIGZvcgorICogdGhpcyBtb2R1bGUsIHNpbmNlIHdlJ2xsIGp1c3QgcmUtYXNzaWduIHRoZW0gb24gdGhlIG5leHQgY2FsbC4pCisgKi8KKworTUVUSE9EREVGKGJvb2xlYW4pCitkZWNvZGVfbWN1IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoreworICBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAoaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7CisgIGludCBibGtuOworICBCSVRSRUFEX1NUQVRFX1ZBUlM7CisgIHNhdmFibGVfc3RhdGUgc3RhdGU7CisKKyAgLyogUHJvY2VzcyByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQ7IG1heSBoYXZlIHRvIHN1c3BlbmQgKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7CisgICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApCisgICAgICBpZiAoISBwcm9jZXNzX3Jlc3RhcnQoY2luZm8pKQorCXJldHVybiBGQUxTRTsKKyAgfQorCisgIC8qIElmIHdlJ3ZlIHJ1biBvdXQgb2YgZGF0YSwganVzdCBsZWF2ZSB0aGUgTUNVIHNldCB0byB6ZXJvZXMuCisgICAqIFRoaXMgd2F5LCB3ZSByZXR1cm4gdW5pZm9ybSBncmF5IGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBzZWdtZW50LgorICAgKi8KKyAgaWYgKCEgZW50cm9weS0+cHViLmluc3VmZmljaWVudF9kYXRhKSB7CisKKyAgICAvKiBMb2FkIHVwIHdvcmtpbmcgc3RhdGUgKi8KKyAgICBCSVRSRUFEX0xPQURfU1RBVEUoY2luZm8sZW50cm9weS0+Yml0c3RhdGUpOworICAgIEFTU0lHTl9TVEFURShzdGF0ZSwgZW50cm9weS0+c2F2ZWQpOworCisgICAgLyogT3V0ZXIgbG9vcCBoYW5kbGVzIGVhY2ggYmxvY2sgaW4gdGhlIE1DVSAqLworCisgICAgZm9yIChibGtuID0gMDsgYmxrbiA8IGNpbmZvLT5ibG9ja3NfaW5fTUNVOyBibGtuKyspIHsKKyAgICAgIEpCTE9DS1JPVyBibG9jayA9IE1DVV9kYXRhW2Jsa25dOworICAgICAgZF9kZXJpdmVkX3RibCAqIGRjdGJsID0gZW50cm9weS0+ZGNfY3VyX3RibHNbYmxrbl07CisgICAgICBkX2Rlcml2ZWRfdGJsICogYWN0YmwgPSBlbnRyb3B5LT5hY19jdXJfdGJsc1tibGtuXTsKKyAgICAgIHJlZ2lzdGVyIGludCBzLCBrLCByOworCisgICAgICAvKiBEZWNvZGUgYSBzaW5nbGUgYmxvY2sncyB3b3J0aCBvZiBjb2VmZmljaWVudHMgKi8KKworICAgICAgLyogU2VjdGlvbiBGLjIuMi4xOiBkZWNvZGUgdGhlIERDIGNvZWZmaWNpZW50IGRpZmZlcmVuY2UgKi8KKyAgICAgIEhVRkZfREVDT0RFKHMsIGJyX3N0YXRlLCBkY3RibCwgcmV0dXJuIEZBTFNFLCBsYWJlbDEpOworICAgICAgaWYgKHMpIHsKKwlDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCBzLCByZXR1cm4gRkFMU0UpOworCXIgPSBHRVRfQklUUyhzKTsKKwlzID0gSFVGRl9FWFRFTkQociwgcyk7CisgICAgICB9CisKKyAgICAgIGlmIChlbnRyb3B5LT5kY19uZWVkZWRbYmxrbl0pIHsKKwkvKiBDb252ZXJ0IERDIGRpZmZlcmVuY2UgdG8gYWN0dWFsIHZhbHVlLCB1cGRhdGUgbGFzdF9kY192YWwgKi8KKwlpbnQgY2kgPSBjaW5mby0+TUNVX21lbWJlcnNoaXBbYmxrbl07CisJcyArPSBzdGF0ZS5sYXN0X2RjX3ZhbFtjaV07CisJc3RhdGUubGFzdF9kY192YWxbY2ldID0gczsKKwkvKiBPdXRwdXQgdGhlIERDIGNvZWZmaWNpZW50IChhc3N1bWVzIGpwZWdfbmF0dXJhbF9vcmRlclswXSA9IDApICovCisJKCpibG9jaylbMF0gPSAoSkNPRUYpIHM7CisgICAgICB9CisKKyAgICAgIGlmIChlbnRyb3B5LT5hY19uZWVkZWRbYmxrbl0pIHsKKworCS8qIFNlY3Rpb24gRi4yLjIuMjogZGVjb2RlIHRoZSBBQyBjb2VmZmljaWVudHMgKi8KKwkvKiBTaW5jZSB6ZXJvZXMgYXJlIHNraXBwZWQsIG91dHB1dCBhcmVhIG11c3QgYmUgY2xlYXJlZCBiZWZvcmVoYW5kICovCisJZm9yIChrID0gMTsgayA8IERDVFNJWkUyOyBrKyspIHsKKwkgIEhVRkZfREVDT0RFKHMsIGJyX3N0YXRlLCBhY3RibCwgcmV0dXJuIEZBTFNFLCBsYWJlbDIpOworICAgICAgCisJICByID0gcyA+PiA0OworCSAgcyAmPSAxNTsKKyAgICAgIAorCSAgaWYgKHMpIHsKKwkgICAgayArPSByOworCSAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCBzLCByZXR1cm4gRkFMU0UpOworCSAgICByID0gR0VUX0JJVFMocyk7CisJICAgIHMgPSBIVUZGX0VYVEVORChyLCBzKTsKKwkgICAgLyogT3V0cHV0IGNvZWZmaWNpZW50IGluIG5hdHVyYWwgKGRlemlnemFnZ2VkKSBvcmRlci4KKwkgICAgICogTm90ZTogdGhlIGV4dHJhIGVudHJpZXMgaW4ganBlZ19uYXR1cmFsX29yZGVyW10gd2lsbCBzYXZlIHVzCisJICAgICAqIGlmIGsgPj0gRENUU0laRTIsIHdoaWNoIGNvdWxkIGhhcHBlbiBpZiB0aGUgZGF0YSBpcyBjb3JydXB0ZWQuCisJICAgICAqLworCSAgICAoKmJsb2NrKVtqcGVnX25hdHVyYWxfb3JkZXJba11dID0gKEpDT0VGKSBzOworCSAgfSBlbHNlIHsKKwkgICAgaWYgKHIgIT0gMTUpCisJICAgICAgYnJlYWs7CisJICAgIGsgKz0gMTU7CisJICB9CisJfQorCisgICAgICB9IGVsc2UgeworCisJLyogU2VjdGlvbiBGLjIuMi4yOiBkZWNvZGUgdGhlIEFDIGNvZWZmaWNpZW50cyAqLworCS8qIEluIHRoaXMgcGF0aCB3ZSBqdXN0IGRpc2NhcmQgdGhlIHZhbHVlcyAqLworCWZvciAoayA9IDE7IGsgPCBEQ1RTSVpFMjsgaysrKSB7CisJICBIVUZGX0RFQ09ERShzLCBicl9zdGF0ZSwgYWN0YmwsIHJldHVybiBGQUxTRSwgbGFiZWwzKTsKKyAgICAgIAorCSAgciA9IHMgPj4gNDsKKwkgIHMgJj0gMTU7CisgICAgICAKKwkgIGlmIChzKSB7CisJICAgIGsgKz0gcjsKKwkgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgcywgcmV0dXJuIEZBTFNFKTsKKwkgICAgRFJPUF9CSVRTKHMpOworCSAgfSBlbHNlIHsKKwkgICAgaWYgKHIgIT0gMTUpCisJICAgICAgYnJlYWs7CisJICAgIGsgKz0gMTU7CisJICB9CisJfQorCisgICAgICB9CisgICAgfQorCisgICAgLyogQ29tcGxldGVkIE1DVSwgc28gdXBkYXRlIHN0YXRlICovCisgICAgQklUUkVBRF9TQVZFX1NUQVRFKGNpbmZvLGVudHJvcHktPmJpdHN0YXRlKTsKKyAgICBBU1NJR05fU1RBVEUoZW50cm9weS0+c2F2ZWQsIHN0YXRlKTsKKyAgfQorCisgIC8qIEFjY291bnQgZm9yIHJlc3RhcnQgaW50ZXJ2YWwgKG5vLW9wIGlmIG5vdCB1c2luZyByZXN0YXJ0cykgKi8KKyAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsKKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogTW9kdWxlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIEh1ZmZtYW4gZW50cm9weSBkZWNvZGluZy4KKyAqLworCitHTE9CQUwodm9pZCkKK2ppbml0X2h1ZmZfZGVjb2RlciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5OworICBpbnQgaTsKKworICBlbnRyb3B5ID0gKGh1ZmZfZW50cm9weV9wdHIpCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkJCQlTSVpFT0YoaHVmZl9lbnRyb3B5X2RlY29kZXIpKTsKKyAgY2luZm8tPmVudHJvcHkgPSAoc3RydWN0IGpwZWdfZW50cm9weV9kZWNvZGVyICopIGVudHJvcHk7CisgIGVudHJvcHktPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzc19odWZmX2RlY29kZXI7CisgIGVudHJvcHktPnB1Yi5kZWNvZGVfbWN1ID0gZGVjb2RlX21jdTsKKworICAvKiBNYXJrIHRhYmxlcyB1bmFsbG9jYXRlZCAqLworICBmb3IgKGkgPSAwOyBpIDwgTlVNX0hVRkZfVEJMUzsgaSsrKSB7CisgICAgZW50cm9weS0+ZGNfZGVyaXZlZF90YmxzW2ldID0gZW50cm9weS0+YWNfZGVyaXZlZF90YmxzW2ldID0gTlVMTDsKKyAgfQorfQorCisjZW5kaWYgLy9fRlhfSlBFR19UVVJCT18KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pkaW5wdXQuYyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pkaW5wdXQuYwppbmRleCA0NmE3ZWZjLi42ZTcxNGU5IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZGlucHV0LmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamRpbnB1dC5jCkBAIC0xLDM4NCArMSwzODQgQEAKLSNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pDQotLyoNCi0gKiBqZGlucHV0LmMNCi0gKg0KLSAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4NCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLg0KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4NCi0gKg0KLSAqIFRoaXMgZmlsZSBjb250YWlucyBpbnB1dCBjb250cm9sIGxvZ2ljIGZvciB0aGUgSlBFRyBkZWNvbXByZXNzb3IuDQotICogVGhlc2Ugcm91dGluZXMgYXJlIGNvbmNlcm5lZCB3aXRoIGNvbnRyb2xsaW5nIHRoZSBkZWNvbXByZXNzb3IncyBpbnB1dA0KLSAqIHByb2Nlc3NpbmcgKG1hcmtlciByZWFkaW5nIGFuZCBjb2VmZmljaWVudCBkZWNvZGluZykuICBUaGUgYWN0dWFsIGlucHV0DQotICogcmVhZGluZyBpcyBkb25lIGluIGpkbWFya2VyLmMsIGpkaHVmZi5jLCBhbmQgamRwaHVmZi5jLg0KLSAqLw0KLQ0KLSNkZWZpbmUgSlBFR19JTlRFUk5BTFMNCi0jaW5jbHVkZSAiamluY2x1ZGUuaCINCi0jaW5jbHVkZSAianBlZ2xpYi5oIg0KLQ0KLQ0KLS8qIFByaXZhdGUgc3RhdGUgKi8NCi0NCi10eXBlZGVmIHN0cnVjdCB7DQotICBzdHJ1Y3QganBlZ19pbnB1dF9jb250cm9sbGVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLw0KLQ0KLSAgYm9vbGVhbiBpbmhlYWRlcnM7CQkvKiBUUlVFIHVudGlsIGZpcnN0IFNPUyBpcyByZWFjaGVkICovDQotfSBteV9pbnB1dF9jb250cm9sbGVyOw0KLQ0KLXR5cGVkZWYgbXlfaW5wdXRfY29udHJvbGxlciAqIG15X2lucHV0Y3RsX3B0cjsNCi0NCi0NCi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLw0KLU1FVEhPRERFRihpbnQpIGNvbnN1bWVfbWFya2VycyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi0NCi0NCi0vKg0KLSAqIFJvdXRpbmVzIHRvIGNhbGN1bGF0ZSB2YXJpb3VzIHF1YW50aXRpZXMgcmVsYXRlZCB0byB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UuDQotICovDQotDQotTE9DQUwodm9pZCkNCi1pbml0aWFsX3NldHVwIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLS8qIENhbGxlZCBvbmNlLCB3aGVuIGZpcnN0IFNPUyBtYXJrZXIgaXMgcmVhY2hlZCAqLw0KLXsNCi0gIGludCBjaTsNCi0gIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7DQotDQotICAvKiBNYWtlIHN1cmUgaW1hZ2UgaXNuJ3QgYmlnZ2VyIHRoYW4gSSBjYW4gaGFuZGxlICovDQotICBpZiAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgPiAobG9uZykgSlBFR19NQVhfRElNRU5TSU9OIHx8DQotICAgICAgKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCA+IChsb25nKSBKUEVHX01BWF9ESU1FTlNJT04pDQotICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0lNQUdFX1RPT19CSUcsICh1bnNpZ25lZCBpbnQpIEpQRUdfTUFYX0RJTUVOU0lPTik7DQotDQotICAvKiBGb3Igbm93LCBwcmVjaXNpb24gbXVzdCBtYXRjaCBjb21waWxlZC1pbiB2YWx1ZS4uLiAqLw0KLSAgaWYgKGNpbmZvLT5kYXRhX3ByZWNpc2lvbiAhPSBCSVRTX0lOX0pTQU1QTEUpDQotICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QUkVDSVNJT04sIGNpbmZvLT5kYXRhX3ByZWNpc2lvbik7DQotDQotICAvKiBDaGVjayB0aGF0IG51bWJlciBvZiBjb21wb25lbnRzIHdvbid0IGV4Y2VlZCBpbnRlcm5hbCBhcnJheSBzaXplcyAqLw0KLSAgaWYgKGNpbmZvLT5udW1fY29tcG9uZW50cyA+IE1BWF9DT01QT05FTlRTKQ0KLSAgICBFUlJFWElUMihjaW5mbywgSkVSUl9DT01QT05FTlRfQ09VTlQsIGNpbmZvLT5udW1fY29tcG9uZW50cywNCi0JICAgICBNQVhfQ09NUE9ORU5UUyk7DQotDQotICAvKiBDb21wdXRlIG1heGltdW0gc2FtcGxpbmcgZmFjdG9yczsgY2hlY2sgZmFjdG9yIHZhbGlkaXR5ICovDQotICBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgPSAxOw0KLSAgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yID0gMTsNCi0gIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7DQotICAgICAgIGNpKyssIGNvbXBwdHIrKykgew0KLSAgICBpZiAoY29tcHB0ci0+aF9zYW1wX2ZhY3Rvcjw9MCB8fCBjb21wcHRyLT5oX3NhbXBfZmFjdG9yPk1BWF9TQU1QX0ZBQ1RPUiB8fA0KLQljb21wcHRyLT52X3NhbXBfZmFjdG9yPD0wIHx8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I+TUFYX1NBTVBfRkFDVE9SKQ0KLSAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX1NBTVBMSU5HKTsNCi0gICAgY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yID0gTUFYKGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciwNCi0JCQkJICAgY29tcHB0ci0+aF9zYW1wX2ZhY3Rvcik7DQotICAgIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciA9IE1BWChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsDQotCQkJCSAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpOw0KLSAgfQ0KLQ0KLSAgLyogV2UgaW5pdGlhbGl6ZSBEQ1Rfc2NhbGVkX3NpemUgYW5kIG1pbl9EQ1Rfc2NhbGVkX3NpemUgdG8gRENUU0laRS4NCi0gICAqIEluIHRoZSBmdWxsIGRlY29tcHJlc3NvciwgdGhpcyB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgamRtYXN0ZXIuYzsNCi0gICAqIGJ1dCBpbiB0aGUgdHJhbnNjb2RlciwgamRtYXN0ZXIuYyBpcyBub3QgdXNlZCwgc28gd2UgbXVzdCBkbyBpdCBoZXJlLg0KLSAgICovDQotICBjaW5mby0+bWluX0RDVF9zY2FsZWRfc2l6ZSA9IERDVFNJWkU7DQotDQotICAvKiBDb21wdXRlIGRpbWVuc2lvbnMgb2YgY29tcG9uZW50cyAqLw0KLSAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsNCi0gICAgICAgY2krKywgY29tcHB0cisrKSB7DQotICAgIGNvbXBwdHItPkRDVF9zY2FsZWRfc2l6ZSA9IERDVFNJWkU7DQotICAgIC8qIFNpemUgaW4gRENUIGJsb2NrcyAqLw0KLSAgICBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgPSAoSkRJTUVOU0lPTikNCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggKiAobG9uZykgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwNCi0JCSAgICAobG9uZykgKGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsNCi0gICAgY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrcyA9IChKRElNRU5TSU9OKQ0KLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiAobG9uZykgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwNCi0JCSAgICAobG9uZykgKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsNCi0gICAgLyogZG93bnNhbXBsZWRfd2lkdGggYW5kIGRvd25zYW1wbGVkX2hlaWdodCB3aWxsIGFsc28gYmUgb3ZlcnJpZGRlbiBieQ0KLSAgICAgKiBqZG1hc3Rlci5jIGlmIHdlIGFyZSBkb2luZyBmdWxsIGRlY29tcHJlc3Npb24uICBUaGUgdHJhbnNjb2RlciBsaWJyYXJ5DQotICAgICAqIGRvZXNuJ3QgdXNlIHRoZXNlIHZhbHVlcywgYnV0IHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uIG1pZ2h0Lg0KLSAgICAgKi8NCi0gICAgLyogU2l6ZSBpbiBzYW1wbGVzICovDQotICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoID0gKEpESU1FTlNJT04pDQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICogKGxvbmcpIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IsDQotCQkgICAgKGxvbmcpIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3Rvcik7DQotICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX2hlaWdodCA9IChKRElNRU5TSU9OKQ0KLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiAobG9uZykgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwNCi0JCSAgICAobG9uZykgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKTsNCi0gICAgLyogTWFyayBjb21wb25lbnQgbmVlZGVkLCB1bnRpbCBjb2xvciBjb252ZXJzaW9uIHNheXMgb3RoZXJ3aXNlICovDQotICAgIGNvbXBwdHItPmNvbXBvbmVudF9uZWVkZWQgPSBUUlVFOw0KLSAgICAvKiBNYXJrIG5vIHF1YW50aXphdGlvbiB0YWJsZSB5ZXQgc2F2ZWQgZm9yIGNvbXBvbmVudCAqLw0KLSAgICBjb21wcHRyLT5xdWFudF90YWJsZSA9IE5VTEw7DQotICB9DQotDQotICAvKiBDb21wdXRlIG51bWJlciBvZiBmdWxseSBpbnRlcmxlYXZlZCBNQ1Ugcm93cy4gKi8NCi0gIGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MgPSAoSkRJTUVOU0lPTikNCi0gICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCwNCi0JCSAgKGxvbmcpIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IqRENUU0laRSkpOw0KLQ0KLSAgLyogRGVjaWRlIHdoZXRoZXIgZmlsZSBjb250YWlucyBtdWx0aXBsZSBzY2FucyAqLw0KLSAgaWYgKGNpbmZvLT5jb21wc19pbl9zY2FuIDwgY2luZm8tPm51bV9jb21wb25lbnRzIHx8IGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKQ0KLSAgICBjaW5mby0+aW5wdXRjdGwtPmhhc19tdWx0aXBsZV9zY2FucyA9IFRSVUU7DQotICBlbHNlDQotICAgIGNpbmZvLT5pbnB1dGN0bC0+aGFzX211bHRpcGxlX3NjYW5zID0gRkFMU0U7DQotfQ0KLQ0KLQ0KLUxPQ0FMKHZvaWQpDQotcGVyX3NjYW5fc2V0dXAgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pDQotLyogRG8gY29tcHV0YXRpb25zIHRoYXQgYXJlIG5lZWRlZCBiZWZvcmUgcHJvY2Vzc2luZyBhIEpQRUcgc2NhbiAqLw0KLS8qIGNpbmZvLT5jb21wc19pbl9zY2FuIGFuZCBjaW5mby0+Y3VyX2NvbXBfaW5mb1tdIHdlcmUgc2V0IGZyb20gU09TIG1hcmtlciAqLw0KLXsNCi0gIGludCBjaSwgbWN1YmxrcywgdG1wOw0KLSAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsNCi0gIA0KLSAgaWYgKGNpbmZvLT5jb21wc19pbl9zY2FuID09IDEpIHsNCi0gICAgDQotICAgIC8qIE5vbmludGVybGVhdmVkIChzaW5nbGUtY29tcG9uZW50KSBzY2FuICovDQotICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1swXTsNCi0gICAgDQotICAgIC8qIE92ZXJhbGwgaW1hZ2Ugc2l6ZSBpbiBNQ1VzICovDQotICAgIGNpbmZvLT5NQ1VzX3Blcl9yb3cgPSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3M7DQotICAgIGNpbmZvLT5NQ1Vfcm93c19pbl9zY2FuID0gY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrczsNCi0gICAgDQotICAgIC8qIEZvciBub25pbnRlcmxlYXZlZCBzY2FuLCBhbHdheXMgb25lIGJsb2NrIHBlciBNQ1UgKi8NCi0gICAgY29tcHB0ci0+TUNVX3dpZHRoID0gMTsNCi0gICAgY29tcHB0ci0+TUNVX2hlaWdodCA9IDE7DQotICAgIGNvbXBwdHItPk1DVV9ibG9ja3MgPSAxOw0KLSAgICBjb21wcHRyLT5NQ1Vfc2FtcGxlX3dpZHRoID0gY29tcHB0ci0+RENUX3NjYWxlZF9zaXplOw0KLSAgICBjb21wcHRyLT5sYXN0X2NvbF93aWR0aCA9IDE7DQotICAgIC8qIEZvciBub25pbnRlcmxlYXZlZCBzY2FucywgaXQgaXMgY29udmVuaWVudCB0byBkZWZpbmUgbGFzdF9yb3dfaGVpZ2h0DQotICAgICAqIGFzIHRoZSBudW1iZXIgb2YgYmxvY2sgcm93cyBwcmVzZW50IGluIHRoZSBsYXN0IGlNQ1Ugcm93Lg0KLSAgICAgKi8NCi0gICAgdG1wID0gKGludCkgKGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3MgJSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKTsNCi0gICAgaWYgKHRtcCA9PSAwKSB0bXAgPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yOw0KLSAgICBjb21wcHRyLT5sYXN0X3Jvd19oZWlnaHQgPSB0bXA7DQotICAgIA0KLSAgICAvKiBQcmVwYXJlIGFycmF5IGRlc2NyaWJpbmcgTUNVIGNvbXBvc2l0aW9uICovDQotICAgIGNpbmZvLT5ibG9ja3NfaW5fTUNVID0gMTsNCi0gICAgY2luZm8tPk1DVV9tZW1iZXJzaGlwWzBdID0gMDsNCi0gICAgDQotICB9IGVsc2Ugew0KLSAgICANCi0gICAgLyogSW50ZXJsZWF2ZWQgKG11bHRpLWNvbXBvbmVudCkgc2NhbiAqLw0KLSAgICBpZiAoY2luZm8tPmNvbXBzX2luX3NjYW4gPD0gMCB8fCBjaW5mby0+Y29tcHNfaW5fc2NhbiA+IE1BWF9DT01QU19JTl9TQ0FOKQ0KLSAgICAgIEVSUkVYSVQyKGNpbmZvLCBKRVJSX0NPTVBPTkVOVF9DT1VOVCwgY2luZm8tPmNvbXBzX2luX3NjYW4sDQotCSAgICAgICBNQVhfQ09NUFNfSU5fU0NBTik7DQotICAgIA0KLSAgICAvKiBPdmVyYWxsIGltYWdlIHNpemUgaW4gTUNVcyAqLw0KLSAgICBjaW5mby0+TUNVc19wZXJfcm93ID0gKEpESU1FTlNJT04pDQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoLA0KLQkJICAgIChsb25nKSAoY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yKkRDVFNJWkUpKTsNCi0gICAgY2luZm8tPk1DVV9yb3dzX2luX3NjYW4gPSAoSkRJTUVOU0lPTikNCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0LA0KLQkJICAgIChsb25nKSAoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKkRDVFNJWkUpKTsNCi0gICAgDQotICAgIGNpbmZvLT5ibG9ja3NfaW5fTUNVID0gMDsNCi0gICAgDQotICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7DQotICAgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsNCi0gICAgICAvKiBTYW1wbGluZyBmYWN0b3JzIGdpdmUgIyBvZiBibG9ja3Mgb2YgY29tcG9uZW50IGluIGVhY2ggTUNVICovDQotICAgICAgY29tcHB0ci0+TUNVX3dpZHRoID0gY29tcHB0ci0+aF9zYW1wX2ZhY3RvcjsNCi0gICAgICBjb21wcHRyLT5NQ1VfaGVpZ2h0ID0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsNCi0gICAgICBjb21wcHRyLT5NQ1VfYmxvY2tzID0gY29tcHB0ci0+TUNVX3dpZHRoICogY29tcHB0ci0+TUNVX2hlaWdodDsNCi0gICAgICBjb21wcHRyLT5NQ1Vfc2FtcGxlX3dpZHRoID0gY29tcHB0ci0+TUNVX3dpZHRoICogY29tcHB0ci0+RENUX3NjYWxlZF9zaXplOw0KLSAgICAgIC8qIEZpZ3VyZSBudW1iZXIgb2Ygbm9uLWR1bW15IGJsb2NrcyBpbiBsYXN0IE1DVSBjb2x1bW4gJiByb3cgKi8NCi0gICAgICB0bXAgPSAoaW50KSAoY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICUgY29tcHB0ci0+TUNVX3dpZHRoKTsNCi0gICAgICBpZiAodG1wID09IDApIHRtcCA9IGNvbXBwdHItPk1DVV93aWR0aDsNCi0gICAgICBjb21wcHRyLT5sYXN0X2NvbF93aWR0aCA9IHRtcDsNCi0gICAgICB0bXAgPSAoaW50KSAoY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrcyAlIGNvbXBwdHItPk1DVV9oZWlnaHQpOw0KLSAgICAgIGlmICh0bXAgPT0gMCkgdG1wID0gY29tcHB0ci0+TUNVX2hlaWdodDsNCi0gICAgICBjb21wcHRyLT5sYXN0X3Jvd19oZWlnaHQgPSB0bXA7DQotICAgICAgLyogUHJlcGFyZSBhcnJheSBkZXNjcmliaW5nIE1DVSBjb21wb3NpdGlvbiAqLw0KLSAgICAgIG1jdWJsa3MgPSBjb21wcHRyLT5NQ1VfYmxvY2tzOw0KLSAgICAgIGlmIChjaW5mby0+YmxvY2tzX2luX01DVSArIG1jdWJsa3MgPiBEX01BWF9CTE9DS1NfSU5fTUNVKQ0KLQlFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9NQ1VfU0laRSk7DQotICAgICAgd2hpbGUgKG1jdWJsa3MtLSA+IDApIHsNCi0JY2luZm8tPk1DVV9tZW1iZXJzaGlwW2NpbmZvLT5ibG9ja3NfaW5fTUNVKytdID0gY2k7DQotICAgICAgfQ0KLSAgICB9DQotICAgIA0KLSAgfQ0KLX0NCi0NCi0NCi0vKg0KLSAqIFNhdmUgYXdheSBhIGNvcHkgb2YgdGhlIFEtdGFibGUgcmVmZXJlbmNlZCBieSBlYWNoIGNvbXBvbmVudCBwcmVzZW50DQotICogaW4gdGhlIGN1cnJlbnQgc2NhbiwgdW5sZXNzIGFscmVhZHkgc2F2ZWQgZHVyaW5nIGEgcHJpb3Igc2Nhbi4NCi0gKg0KLSAqIEluIGEgbXVsdGlwbGUtc2NhbiBKUEVHIGZpbGUsIHRoZSBlbmNvZGVyIGNvdWxkIGFzc2lnbiBkaWZmZXJlbnQgY29tcG9uZW50cw0KLSAqIHRoZSBzYW1lIFEtdGFibGUgc2xvdCBudW1iZXIsIGJ1dCBjaGFuZ2UgdGFibGUgZGVmaW5pdGlvbnMgYmV0d2VlbiBzY2Fucw0KLSAqIHNvIHRoYXQgZWFjaCBjb21wb25lbnQgdXNlcyBhIGRpZmZlcmVudCBRLXRhYmxlLiAgKFRoZSBJSkcgZW5jb2RlciBpcyBub3QNCi0gKiBjdXJyZW50bHkgY2FwYWJsZSBvZiBkb2luZyB0aGlzLCBidXQgb3RoZXIgZW5jb2RlcnMgbWlnaHQuKSAgU2luY2Ugd2Ugd2FudA0KLSAqIHRvIGJlIGFibGUgdG8gZGVxdWFudGl6ZSBhbGwgdGhlIGNvbXBvbmVudHMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSwgdGhpcw0KLSAqIG1lYW5zIHRoYXQgd2UgaGF2ZSB0byBzYXZlIGF3YXkgdGhlIHRhYmxlIGFjdHVhbGx5IHVzZWQgZm9yIGVhY2ggY29tcG9uZW50Lg0KLSAqIFdlIGRvIHRoaXMgYnkgY29weWluZyB0aGUgdGFibGUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBzY2FuIGNvbnRhaW5pbmcNCi0gKiB0aGUgY29tcG9uZW50Lg0KLSAqIFRoZSBKUEVHIHNwZWMgcHJvaGliaXRzIHRoZSBlbmNvZGVyIGZyb20gY2hhbmdpbmcgdGhlIGNvbnRlbnRzIG9mIGEgUS10YWJsZQ0KLSAqIHNsb3QgYmV0d2VlbiBzY2FucyBvZiBhIGNvbXBvbmVudCB1c2luZyB0aGF0IHNsb3QuICBJZiB0aGUgZW5jb2RlciBkb2VzIHNvDQotICogYW55d2F5LCB0aGlzIGRlY29kZXIgd2lsbCBzaW1wbHkgdXNlIHRoZSBRLXRhYmxlIHZhbHVlcyB0aGF0IHdlcmUgY3VycmVudA0KLSAqIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlyc3Qgc2NhbiBmb3IgdGhlIGNvbXBvbmVudC4NCi0gKg0KLSAqIFRoZSBkZWNvbXByZXNzb3Igb3V0cHV0IHNpZGUgbG9va3Mgb25seSBhdCB0aGUgc2F2ZWQgcXVhbnQgdGFibGVzLA0KLSAqIG5vdCBhdCB0aGUgY3VycmVudCBRLXRhYmxlIHNsb3RzLg0KLSAqLw0KLQ0KLUxPQ0FMKHZvaWQpDQotbGF0Y2hfcXVhbnRfdGFibGVzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIGludCBjaSwgcXRibG5vOw0KLSAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsNCi0gIEpRVUFOVF9UQkwgKiBxdGJsOw0KLQ0KLSAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspIHsNCi0gICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsNCi0gICAgLyogTm8gd29yayBpZiB3ZSBhbHJlYWR5IHNhdmVkIFEtdGFibGUgZm9yIHRoaXMgY29tcG9uZW50ICovDQotICAgIGlmIChjb21wcHRyLT5xdWFudF90YWJsZSAhPSBOVUxMKQ0KLSAgICAgIGNvbnRpbnVlOw0KLSAgICAvKiBNYWtlIHN1cmUgc3BlY2lmaWVkIHF1YW50aXphdGlvbiB0YWJsZSBpcyBwcmVzZW50ICovDQotICAgIHF0YmxubyA9IGNvbXBwdHItPnF1YW50X3RibF9ubzsNCi0gICAgaWYgKHF0YmxubyA8IDAgfHwgcXRibG5vID49IE5VTV9RVUFOVF9UQkxTIHx8DQotCWNpbmZvLT5xdWFudF90YmxfcHRyc1txdGJsbm9dID09IE5VTEwpDQotICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fUVVBTlRfVEFCTEUsIHF0Ymxubyk7DQotICAgIC8qIE9LLCBzYXZlIGF3YXkgdGhlIHF1YW50aXphdGlvbiB0YWJsZSAqLw0KLSAgICBxdGJsID0gKEpRVUFOVF9UQkwgKikNCi0gICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQkgIFNJWkVPRihKUVVBTlRfVEJMKSk7DQotICAgIE1FTUNPUFkocXRibCwgY2luZm8tPnF1YW50X3RibF9wdHJzW3F0Ymxub10sIFNJWkVPRihKUVVBTlRfVEJMKSk7DQotICAgIGNvbXBwdHItPnF1YW50X3RhYmxlID0gcXRibDsNCi0gIH0NCi19DQotDQotDQotLyoNCi0gKiBJbml0aWFsaXplIHRoZSBpbnB1dCBtb2R1bGVzIHRvIHJlYWQgYSBzY2FuIG9mIGNvbXByZXNzZWQgZGF0YS4NCi0gKiBUaGUgZmlyc3QgY2FsbCB0byB0aGlzIGlzIGRvbmUgYnkgamRtYXN0ZXIuYyBhZnRlciBpbml0aWFsaXppbmcNCi0gKiB0aGUgZW50aXJlIGRlY29tcHJlc3NvciAoZHVyaW5nIGpwZWdfc3RhcnRfZGVjb21wcmVzcykuDQotICogU3Vic2VxdWVudCBjYWxscyBjb21lIGZyb20gY29uc3VtZV9tYXJrZXJzLCBiZWxvdy4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1zdGFydF9pbnB1dF9wYXNzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIHBlcl9zY2FuX3NldHVwKGNpbmZvKTsNCi0gIGxhdGNoX3F1YW50X3RhYmxlcyhjaW5mbyk7DQotICAoKmNpbmZvLT5lbnRyb3B5LT5zdGFydF9wYXNzKSAoY2luZm8pOw0KLSAgKCpjaW5mby0+Y29lZi0+c3RhcnRfaW5wdXRfcGFzcykgKGNpbmZvKTsNCi0gIGNpbmZvLT5pbnB1dGN0bC0+Y29uc3VtZV9pbnB1dCA9IGNpbmZvLT5jb2VmLT5jb25zdW1lX2RhdGE7DQotfQ0KLQ0KLQ0KLS8qDQotICogRmluaXNoIHVwIGFmdGVyIGlucHV0dGluZyBhIGNvbXByZXNzZWQtZGF0YSBzY2FuLg0KLSAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBjb2VmZmljaWVudCBjb250cm9sbGVyIGFmdGVyIGl0J3MgcmVhZCBhbGwNCi0gKiB0aGUgZXhwZWN0ZWQgZGF0YSBvZiB0aGUgc2Nhbi4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1maW5pc2hfaW5wdXRfcGFzcyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBjaW5mby0+aW5wdXRjdGwtPmNvbnN1bWVfaW5wdXQgPSBjb25zdW1lX21hcmtlcnM7DQotfQ0KLQ0KLQ0KLS8qDQotICogUmVhZCBKUEVHIG1hcmtlcnMgYmVmb3JlLCBiZXR3ZWVuLCBvciBhZnRlciBjb21wcmVzc2VkLWRhdGEgc2NhbnMuDQotICogQ2hhbmdlIHN0YXRlIGFzIG5lY2Vzc2FyeSB3aGVuIGEgbmV3IHNjYW4gaXMgcmVhY2hlZC4NCi0gKiBSZXR1cm4gdmFsdWUgaXMgSlBFR19TVVNQRU5ERUQsIEpQRUdfUkVBQ0hFRF9TT1MsIG9yIEpQRUdfUkVBQ0hFRF9FT0kuDQotICoNCi0gKiBUaGUgY29uc3VtZV9pbnB1dCBtZXRob2QgcG9pbnRlciBwb2ludHMgZWl0aGVyIGhlcmUgb3IgdG8gdGhlDQotICogY29lZmZpY2llbnQgY29udHJvbGxlcidzIGNvbnN1bWVfZGF0YSByb3V0aW5lLCBkZXBlbmRpbmcgb24gd2hldGhlcg0KLSAqIHdlIGFyZSByZWFkaW5nIGEgY29tcHJlc3NlZCBkYXRhIHNlZ21lbnQgb3IgaW50ZXItc2VnbWVudCBtYXJrZXJzLg0KLSAqLw0KLQ0KLU1FVEhPRERFRihpbnQpDQotY29uc3VtZV9tYXJrZXJzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIG15X2lucHV0Y3RsX3B0ciBpbnB1dGN0bCA9IChteV9pbnB1dGN0bF9wdHIpIGNpbmZvLT5pbnB1dGN0bDsNCi0gIGludCB2YWw7DQotDQotICBpZiAoaW5wdXRjdGwtPnB1Yi5lb2lfcmVhY2hlZCkgLyogQWZ0ZXIgaGl0dGluZyBFT0ksIHJlYWQgbm8gZnVydGhlciAqLw0KLSAgICByZXR1cm4gSlBFR19SRUFDSEVEX0VPSTsNCi0NCi0gIHZhbCA9ICgqY2luZm8tPm1hcmtlci0+cmVhZF9tYXJrZXJzKSAoY2luZm8pOw0KLQ0KLSAgc3dpdGNoICh2YWwpIHsNCi0gIGNhc2UgSlBFR19SRUFDSEVEX1NPUzoJLyogRm91bmQgU09TICovDQotICAgIGlmIChpbnB1dGN0bC0+aW5oZWFkZXJzKSB7CS8qIDFzdCBTT1MgKi8NCi0gICAgICBpbml0aWFsX3NldHVwKGNpbmZvKTsNCi0gICAgICBpbnB1dGN0bC0+aW5oZWFkZXJzID0gRkFMU0U7DQotICAgICAgLyogTm90ZTogc3RhcnRfaW5wdXRfcGFzcyBtdXN0IGJlIGNhbGxlZCBieSBqZG1hc3Rlci5jDQotICAgICAgICogYmVmb3JlIGFueSBtb3JlIGlucHV0IGNhbiBiZSBjb25zdW1lZC4gIGpkYXBpbWluLmMgaXMNCi0gICAgICAgKiByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIHRoaXMgc2VxdWVuY2luZy4NCi0gICAgICAgKi8NCi0gICAgfSBlbHNlIHsJCQkvKiAybmQgb3IgbGF0ZXIgU09TIG1hcmtlciAqLw0KLSAgICAgIGlmICghIGlucHV0Y3RsLT5wdWIuaGFzX211bHRpcGxlX3NjYW5zKQ0KLQlFUlJFWElUKGNpbmZvLCBKRVJSX0VPSV9FWFBFQ1RFRCk7IC8qIE9vcHMsIEkgd2Fzbid0IGV4cGVjdGluZyB0aGlzISAqLw0KLSAgICAgIHN0YXJ0X2lucHV0X3Bhc3MoY2luZm8pOw0KLSAgICB9DQotICAgIGJyZWFrOw0KLSAgY2FzZSBKUEVHX1JFQUNIRURfRU9JOgkvKiBGb3VuZCBFT0kgKi8NCi0gICAgaW5wdXRjdGwtPnB1Yi5lb2lfcmVhY2hlZCA9IFRSVUU7DQotICAgIGlmIChpbnB1dGN0bC0+aW5oZWFkZXJzKSB7CS8qIFRhYmxlcy1vbmx5IGRhdGFzdHJlYW0sIGFwcGFyZW50bHkgKi8NCi0gICAgICBpZiAoY2luZm8tPm1hcmtlci0+c2F3X1NPRikNCi0JRVJSRVhJVChjaW5mbywgSkVSUl9TT0ZfTk9fU09TKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAvKiBQcmV2ZW50IGluZmluaXRlIGxvb3AgaW4gY29lZiBjdGxyJ3MgZGVjb21wcmVzc19kYXRhIHJvdXRpbmUNCi0gICAgICAgKiBpZiB1c2VyIHNldCBvdXRwdXRfc2Nhbl9udW1iZXIgbGFyZ2VyIHRoYW4gbnVtYmVyIG9mIHNjYW5zLg0KLSAgICAgICAqLw0KLSAgICAgIGlmIChjaW5mby0+b3V0cHV0X3NjYW5fbnVtYmVyID4gY2luZm8tPmlucHV0X3NjYW5fbnVtYmVyKQ0KLQljaW5mby0+b3V0cHV0X3NjYW5fbnVtYmVyID0gY2luZm8tPmlucHV0X3NjYW5fbnVtYmVyOw0KLSAgICB9DQotICAgIGJyZWFrOw0KLSAgY2FzZSBKUEVHX1NVU1BFTkRFRDoNCi0gICAgYnJlYWs7DQotICB9DQotDQotICByZXR1cm4gdmFsOw0KLX0NCi0NCi0NCi0vKg0KLSAqIFJlc2V0IHN0YXRlIHRvIGJlZ2luIGEgZnJlc2ggZGF0YXN0cmVhbS4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1yZXNldF9pbnB1dF9jb250cm9sbGVyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIG15X2lucHV0Y3RsX3B0ciBpbnB1dGN0bCA9IChteV9pbnB1dGN0bF9wdHIpIGNpbmZvLT5pbnB1dGN0bDsNCi0NCi0gIGlucHV0Y3RsLT5wdWIuY29uc3VtZV9pbnB1dCA9IGNvbnN1bWVfbWFya2VyczsNCi0gIGlucHV0Y3RsLT5wdWIuaGFzX211bHRpcGxlX3NjYW5zID0gRkFMU0U7IC8qICJ1bmtub3duIiB3b3VsZCBiZSBiZXR0ZXIgKi8NCi0gIGlucHV0Y3RsLT5wdWIuZW9pX3JlYWNoZWQgPSBGQUxTRTsNCi0gIGlucHV0Y3RsLT5pbmhlYWRlcnMgPSBUUlVFOw0KLSAgLyogUmVzZXQgb3RoZXIgbW9kdWxlcyAqLw0KLSAgKCpjaW5mby0+ZXJyLT5yZXNldF9lcnJvcl9tZ3IpICgoal9jb21tb25fcHRyKSBjaW5mbyk7DQotICAoKmNpbmZvLT5tYXJrZXItPnJlc2V0X21hcmtlcl9yZWFkZXIpIChjaW5mbyk7DQotICAvKiBSZXNldCBwcm9ncmVzc2lvbiBzdGF0ZSAtLSB3b3VsZCBiZSBjbGVhbmVyIGlmIGVudHJvcHkgZGVjb2RlciBkaWQgdGhpcyAqLw0KLSAgY2luZm8tPmNvZWZfYml0cyA9IE5VTEw7DQotfQ0KLQ0KLQ0KLS8qDQotICogSW5pdGlhbGl6ZSB0aGUgaW5wdXQgY29udHJvbGxlciBtb2R1bGUuDQotICogVGhpcyBpcyBjYWxsZWQgb25seSBvbmNlLCB3aGVuIHRoZSBkZWNvbXByZXNzaW9uIG9iamVjdCBpcyBjcmVhdGVkLg0KLSAqLw0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWppbml0X2lucHV0X2NvbnRyb2xsZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAgbXlfaW5wdXRjdGxfcHRyIGlucHV0Y3RsOw0KLQ0KLSAgLyogQ3JlYXRlIHN1Ym9iamVjdCBpbiBwZXJtYW5lbnQgcG9vbCAqLw0KLSAgaW5wdXRjdGwgPSAobXlfaW5wdXRjdGxfcHRyKQ0KLSAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX1BFUk1BTkVOVCwNCi0JCQkJU0laRU9GKG15X2lucHV0X2NvbnRyb2xsZXIpKTsNCi0gIGNpbmZvLT5pbnB1dGN0bCA9IChzdHJ1Y3QganBlZ19pbnB1dF9jb250cm9sbGVyICopIGlucHV0Y3RsOw0KLSAgLyogSW5pdGlhbGl6ZSBtZXRob2QgcG9pbnRlcnMgKi8NCi0gIGlucHV0Y3RsLT5wdWIuY29uc3VtZV9pbnB1dCA9IGNvbnN1bWVfbWFya2VyczsNCi0gIGlucHV0Y3RsLT5wdWIucmVzZXRfaW5wdXRfY29udHJvbGxlciA9IHJlc2V0X2lucHV0X2NvbnRyb2xsZXI7DQotICBpbnB1dGN0bC0+cHViLnN0YXJ0X2lucHV0X3Bhc3MgPSBzdGFydF9pbnB1dF9wYXNzOw0KLSAgaW5wdXRjdGwtPnB1Yi5maW5pc2hfaW5wdXRfcGFzcyA9IGZpbmlzaF9pbnB1dF9wYXNzOw0KLSAgLyogSW5pdGlhbGl6ZSBzdGF0ZTogY2FuJ3QgdXNlIHJlc2V0X2lucHV0X2NvbnRyb2xsZXIgc2luY2Ugd2UgZG9uJ3QNCi0gICAqIHdhbnQgdG8gdHJ5IHRvIHJlc2V0IG90aGVyIG1vZHVsZXMgeWV0Lg0KLSAgICovDQotICBpbnB1dGN0bC0+cHViLmhhc19tdWx0aXBsZV9zY2FucyA9IEZBTFNFOyAvKiAidW5rbm93biIgd291bGQgYmUgYmV0dGVyICovDQotICBpbnB1dGN0bC0+cHViLmVvaV9yZWFjaGVkID0gRkFMU0U7DQotICBpbnB1dGN0bC0+aW5oZWFkZXJzID0gVFJVRTsNCi19DQotDQotI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fDQorI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykKKy8qCisgKiBqZGlucHV0LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBpbnB1dCBjb250cm9sIGxvZ2ljIGZvciB0aGUgSlBFRyBkZWNvbXByZXNzb3IuCisgKiBUaGVzZSByb3V0aW5lcyBhcmUgY29uY2VybmVkIHdpdGggY29udHJvbGxpbmcgdGhlIGRlY29tcHJlc3NvcidzIGlucHV0CisgKiBwcm9jZXNzaW5nIChtYXJrZXIgcmVhZGluZyBhbmQgY29lZmZpY2llbnQgZGVjb2RpbmcpLiAgVGhlIGFjdHVhbCBpbnB1dAorICogcmVhZGluZyBpcyBkb25lIGluIGpkbWFya2VyLmMsIGpkaHVmZi5jLCBhbmQgamRwaHVmZi5jLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKworCisvKiBQcml2YXRlIHN0YXRlICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IGpwZWdfaW5wdXRfY29udHJvbGxlciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICBib29sZWFuIGluaGVhZGVyczsJCS8qIFRSVUUgdW50aWwgZmlyc3QgU09TIGlzIHJlYWNoZWQgKi8KK30gbXlfaW5wdXRfY29udHJvbGxlcjsKKwordHlwZWRlZiBteV9pbnB1dF9jb250cm9sbGVyICogbXlfaW5wdXRjdGxfcHRyOworCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitNRVRIT0RERUYoaW50KSBjb25zdW1lX21hcmtlcnMgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CisKKworLyoKKyAqIFJvdXRpbmVzIHRvIGNhbGN1bGF0ZSB2YXJpb3VzIHF1YW50aXRpZXMgcmVsYXRlZCB0byB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UuCisgKi8KKworTE9DQUwodm9pZCkKK2luaXRpYWxfc2V0dXAgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCisvKiBDYWxsZWQgb25jZSwgd2hlbiBmaXJzdCBTT1MgbWFya2VyIGlzIHJlYWNoZWQgKi8KK3sKKyAgaW50IGNpOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworCisgIC8qIE1ha2Ugc3VyZSBpbWFnZSBpc24ndCBiaWdnZXIgdGhhbiBJIGNhbiBoYW5kbGUgKi8KKyAgaWYgKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ID4gKGxvbmcpIEpQRUdfTUFYX0RJTUVOU0lPTiB8fAorICAgICAgKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCA+IChsb25nKSBKUEVHX01BWF9ESU1FTlNJT04pCisgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfSU1BR0VfVE9PX0JJRywgKHVuc2lnbmVkIGludCkgSlBFR19NQVhfRElNRU5TSU9OKTsKKworICAvKiBGb3Igbm93LCBwcmVjaXNpb24gbXVzdCBtYXRjaCBjb21waWxlZC1pbiB2YWx1ZS4uLiAqLworICBpZiAoY2luZm8tPmRhdGFfcHJlY2lzaW9uICE9IEJJVFNfSU5fSlNBTVBMRSkKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUFJFQ0lTSU9OLCBjaW5mby0+ZGF0YV9wcmVjaXNpb24pOworCisgIC8qIENoZWNrIHRoYXQgbnVtYmVyIG9mIGNvbXBvbmVudHMgd29uJ3QgZXhjZWVkIGludGVybmFsIGFycmF5IHNpemVzICovCisgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgPiBNQVhfQ09NUE9ORU5UUykKKyAgICBFUlJFWElUMihjaW5mbywgSkVSUl9DT01QT05FTlRfQ09VTlQsIGNpbmZvLT5udW1fY29tcG9uZW50cywKKwkgICAgIE1BWF9DT01QT05FTlRTKTsKKworICAvKiBDb21wdXRlIG1heGltdW0gc2FtcGxpbmcgZmFjdG9yczsgY2hlY2sgZmFjdG9yIHZhbGlkaXR5ICovCisgIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciA9IDE7CisgIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciA9IDE7CisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgaWYgKGNvbXBwdHItPmhfc2FtcF9mYWN0b3I8PTAgfHwgY29tcHB0ci0+aF9zYW1wX2ZhY3Rvcj5NQVhfU0FNUF9GQUNUT1IgfHwKKwljb21wcHRyLT52X3NhbXBfZmFjdG9yPD0wIHx8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I+TUFYX1NBTVBfRkFDVE9SKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfU0FNUExJTkcpOworICAgIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciA9IE1BWChjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IsCisJCQkJICAgY29tcHB0ci0+aF9zYW1wX2ZhY3Rvcik7CisgICAgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yID0gTUFYKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKwkJCQkgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yKTsKKyAgfQorCisgIC8qIFdlIGluaXRpYWxpemUgRENUX3NjYWxlZF9zaXplIGFuZCBtaW5fRENUX3NjYWxlZF9zaXplIHRvIERDVFNJWkUuCisgICAqIEluIHRoZSBmdWxsIGRlY29tcHJlc3NvciwgdGhpcyB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgamRtYXN0ZXIuYzsKKyAgICogYnV0IGluIHRoZSB0cmFuc2NvZGVyLCBqZG1hc3Rlci5jIGlzIG5vdCB1c2VkLCBzbyB3ZSBtdXN0IGRvIGl0IGhlcmUuCisgICAqLworICBjaW5mby0+bWluX0RDVF9zY2FsZWRfc2l6ZSA9IERDVFNJWkU7CisKKyAgLyogQ29tcHV0ZSBkaW1lbnNpb25zIG9mIGNvbXBvbmVudHMgKi8KKyAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKKyAgICBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemUgPSBEQ1RTSVpFOworICAgIC8qIFNpemUgaW4gRENUIGJsb2NrcyAqLworICAgIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICogKGxvbmcpIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IsCisJCSAgICAobG9uZykgKGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsKKyAgICBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogKGxvbmcpIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCisJCSAgICAobG9uZykgKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsKKyAgICAvKiBkb3duc2FtcGxlZF93aWR0aCBhbmQgZG93bnNhbXBsZWRfaGVpZ2h0IHdpbGwgYWxzbyBiZSBvdmVycmlkZGVuIGJ5CisgICAgICogamRtYXN0ZXIuYyBpZiB3ZSBhcmUgZG9pbmcgZnVsbCBkZWNvbXByZXNzaW9uLiAgVGhlIHRyYW5zY29kZXIgbGlicmFyeQorICAgICAqIGRvZXNuJ3QgdXNlIHRoZXNlIHZhbHVlcywgYnV0IHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uIG1pZ2h0LgorICAgICAqLworICAgIC8qIFNpemUgaW4gc2FtcGxlcyAqLworICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggKiAobG9uZykgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwKKwkJICAgIChsb25nKSBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IpOworICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX2hlaWdodCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCAqIChsb25nKSBjb21wcHRyLT52X3NhbXBfZmFjdG9yLAorCQkgICAgKGxvbmcpIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcik7CisgICAgLyogTWFyayBjb21wb25lbnQgbmVlZGVkLCB1bnRpbCBjb2xvciBjb252ZXJzaW9uIHNheXMgb3RoZXJ3aXNlICovCisgICAgY29tcHB0ci0+Y29tcG9uZW50X25lZWRlZCA9IFRSVUU7CisgICAgLyogTWFyayBubyBxdWFudGl6YXRpb24gdGFibGUgeWV0IHNhdmVkIGZvciBjb21wb25lbnQgKi8KKyAgICBjb21wcHRyLT5xdWFudF90YWJsZSA9IE5VTEw7CisgIH0KKworICAvKiBDb21wdXRlIG51bWJlciBvZiBmdWxseSBpbnRlcmxlYXZlZCBNQ1Ugcm93cy4gKi8KKyAgY2luZm8tPnRvdGFsX2lNQ1Vfcm93cyA9IChKRElNRU5TSU9OKQorICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQsCisJCSAgKGxvbmcpIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IqRENUU0laRSkpOworCisgIC8qIERlY2lkZSB3aGV0aGVyIGZpbGUgY29udGFpbnMgbXVsdGlwbGUgc2NhbnMgKi8KKyAgaWYgKGNpbmZvLT5jb21wc19pbl9zY2FuIDwgY2luZm8tPm51bV9jb21wb25lbnRzIHx8IGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKQorICAgIGNpbmZvLT5pbnB1dGN0bC0+aGFzX211bHRpcGxlX3NjYW5zID0gVFJVRTsKKyAgZWxzZQorICAgIGNpbmZvLT5pbnB1dGN0bC0+aGFzX211bHRpcGxlX3NjYW5zID0gRkFMU0U7Cit9CisKKworTE9DQUwodm9pZCkKK3Blcl9zY2FuX3NldHVwIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorLyogRG8gY29tcHV0YXRpb25zIHRoYXQgYXJlIG5lZWRlZCBiZWZvcmUgcHJvY2Vzc2luZyBhIEpQRUcgc2NhbiAqLworLyogY2luZm8tPmNvbXBzX2luX3NjYW4gYW5kIGNpbmZvLT5jdXJfY29tcF9pbmZvW10gd2VyZSBzZXQgZnJvbSBTT1MgbWFya2VyICovCit7CisgIGludCBjaSwgbWN1YmxrcywgdG1wOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworICAKKyAgaWYgKGNpbmZvLT5jb21wc19pbl9zY2FuID09IDEpIHsKKyAgICAKKyAgICAvKiBOb25pbnRlcmxlYXZlZCAoc2luZ2xlLWNvbXBvbmVudCkgc2NhbiAqLworICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1swXTsKKyAgICAKKyAgICAvKiBPdmVyYWxsIGltYWdlIHNpemUgaW4gTUNVcyAqLworICAgIGNpbmZvLT5NQ1VzX3Blcl9yb3cgPSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3M7CisgICAgY2luZm8tPk1DVV9yb3dzX2luX3NjYW4gPSBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzOworICAgIAorICAgIC8qIEZvciBub25pbnRlcmxlYXZlZCBzY2FuLCBhbHdheXMgb25lIGJsb2NrIHBlciBNQ1UgKi8KKyAgICBjb21wcHRyLT5NQ1Vfd2lkdGggPSAxOworICAgIGNvbXBwdHItPk1DVV9oZWlnaHQgPSAxOworICAgIGNvbXBwdHItPk1DVV9ibG9ja3MgPSAxOworICAgIGNvbXBwdHItPk1DVV9zYW1wbGVfd2lkdGggPSBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemU7CisgICAgY29tcHB0ci0+bGFzdF9jb2xfd2lkdGggPSAxOworICAgIC8qIEZvciBub25pbnRlcmxlYXZlZCBzY2FucywgaXQgaXMgY29udmVuaWVudCB0byBkZWZpbmUgbGFzdF9yb3dfaGVpZ2h0CisgICAgICogYXMgdGhlIG51bWJlciBvZiBibG9jayByb3dzIHByZXNlbnQgaW4gdGhlIGxhc3QgaU1DVSByb3cuCisgICAgICovCisgICAgdG1wID0gKGludCkgKGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3MgJSBjb21wcHRyLT52X3NhbXBfZmFjdG9yKTsKKyAgICBpZiAodG1wID09IDApIHRtcCA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisgICAgY29tcHB0ci0+bGFzdF9yb3dfaGVpZ2h0ID0gdG1wOworICAgIAorICAgIC8qIFByZXBhcmUgYXJyYXkgZGVzY3JpYmluZyBNQ1UgY29tcG9zaXRpb24gKi8KKyAgICBjaW5mby0+YmxvY2tzX2luX01DVSA9IDE7CisgICAgY2luZm8tPk1DVV9tZW1iZXJzaGlwWzBdID0gMDsKKyAgICAKKyAgfSBlbHNlIHsKKyAgICAKKyAgICAvKiBJbnRlcmxlYXZlZCAobXVsdGktY29tcG9uZW50KSBzY2FuICovCisgICAgaWYgKGNpbmZvLT5jb21wc19pbl9zY2FuIDw9IDAgfHwgY2luZm8tPmNvbXBzX2luX3NjYW4gPiBNQVhfQ09NUFNfSU5fU0NBTikKKyAgICAgIEVSUkVYSVQyKGNpbmZvLCBKRVJSX0NPTVBPTkVOVF9DT1VOVCwgY2luZm8tPmNvbXBzX2luX3NjYW4sCisJICAgICAgIE1BWF9DT01QU19JTl9TQ0FOKTsKKyAgICAKKyAgICAvKiBPdmVyYWxsIGltYWdlIHNpemUgaW4gTUNVcyAqLworICAgIGNpbmZvLT5NQ1VzX3Blcl9yb3cgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCwKKwkJICAgIChsb25nKSAoY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yKkRDVFNJWkUpKTsKKyAgICBjaW5mby0+TUNVX3Jvd3NfaW5fc2NhbiA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCwKKwkJICAgIChsb25nKSAoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKkRDVFNJWkUpKTsKKyAgICAKKyAgICBjaW5mby0+YmxvY2tzX2luX01DVSA9IDA7CisgICAgCisgICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspIHsKKyAgICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07CisgICAgICAvKiBTYW1wbGluZyBmYWN0b3JzIGdpdmUgIyBvZiBibG9ja3Mgb2YgY29tcG9uZW50IGluIGVhY2ggTUNVICovCisgICAgICBjb21wcHRyLT5NQ1Vfd2lkdGggPSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yOworICAgICAgY29tcHB0ci0+TUNVX2hlaWdodCA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7CisgICAgICBjb21wcHRyLT5NQ1VfYmxvY2tzID0gY29tcHB0ci0+TUNVX3dpZHRoICogY29tcHB0ci0+TUNVX2hlaWdodDsKKyAgICAgIGNvbXBwdHItPk1DVV9zYW1wbGVfd2lkdGggPSBjb21wcHRyLT5NQ1Vfd2lkdGggKiBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemU7CisgICAgICAvKiBGaWd1cmUgbnVtYmVyIG9mIG5vbi1kdW1teSBibG9ja3MgaW4gbGFzdCBNQ1UgY29sdW1uICYgcm93ICovCisgICAgICB0bXAgPSAoaW50KSAoY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICUgY29tcHB0ci0+TUNVX3dpZHRoKTsKKyAgICAgIGlmICh0bXAgPT0gMCkgdG1wID0gY29tcHB0ci0+TUNVX3dpZHRoOworICAgICAgY29tcHB0ci0+bGFzdF9jb2xfd2lkdGggPSB0bXA7CisgICAgICB0bXAgPSAoaW50KSAoY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrcyAlIGNvbXBwdHItPk1DVV9oZWlnaHQpOworICAgICAgaWYgKHRtcCA9PSAwKSB0bXAgPSBjb21wcHRyLT5NQ1VfaGVpZ2h0OworICAgICAgY29tcHB0ci0+bGFzdF9yb3dfaGVpZ2h0ID0gdG1wOworICAgICAgLyogUHJlcGFyZSBhcnJheSBkZXNjcmliaW5nIE1DVSBjb21wb3NpdGlvbiAqLworICAgICAgbWN1YmxrcyA9IGNvbXBwdHItPk1DVV9ibG9ja3M7CisgICAgICBpZiAoY2luZm8tPmJsb2Nrc19pbl9NQ1UgKyBtY3VibGtzID4gRF9NQVhfQkxPQ0tTX0lOX01DVSkKKwlFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9NQ1VfU0laRSk7CisgICAgICB3aGlsZSAobWN1Ymxrcy0tID4gMCkgeworCWNpbmZvLT5NQ1VfbWVtYmVyc2hpcFtjaW5mby0+YmxvY2tzX2luX01DVSsrXSA9IGNpOworICAgICAgfQorICAgIH0KKyAgICAKKyAgfQorfQorCisKKy8qCisgKiBTYXZlIGF3YXkgYSBjb3B5IG9mIHRoZSBRLXRhYmxlIHJlZmVyZW5jZWQgYnkgZWFjaCBjb21wb25lbnQgcHJlc2VudAorICogaW4gdGhlIGN1cnJlbnQgc2NhbiwgdW5sZXNzIGFscmVhZHkgc2F2ZWQgZHVyaW5nIGEgcHJpb3Igc2Nhbi4KKyAqCisgKiBJbiBhIG11bHRpcGxlLXNjYW4gSlBFRyBmaWxlLCB0aGUgZW5jb2RlciBjb3VsZCBhc3NpZ24gZGlmZmVyZW50IGNvbXBvbmVudHMKKyAqIHRoZSBzYW1lIFEtdGFibGUgc2xvdCBudW1iZXIsIGJ1dCBjaGFuZ2UgdGFibGUgZGVmaW5pdGlvbnMgYmV0d2VlbiBzY2FucworICogc28gdGhhdCBlYWNoIGNvbXBvbmVudCB1c2VzIGEgZGlmZmVyZW50IFEtdGFibGUuICAoVGhlIElKRyBlbmNvZGVyIGlzIG5vdAorICogY3VycmVudGx5IGNhcGFibGUgb2YgZG9pbmcgdGhpcywgYnV0IG90aGVyIGVuY29kZXJzIG1pZ2h0LikgIFNpbmNlIHdlIHdhbnQKKyAqIHRvIGJlIGFibGUgdG8gZGVxdWFudGl6ZSBhbGwgdGhlIGNvbXBvbmVudHMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSwgdGhpcworICogbWVhbnMgdGhhdCB3ZSBoYXZlIHRvIHNhdmUgYXdheSB0aGUgdGFibGUgYWN0dWFsbHkgdXNlZCBmb3IgZWFjaCBjb21wb25lbnQuCisgKiBXZSBkbyB0aGlzIGJ5IGNvcHlpbmcgdGhlIHRhYmxlIGF0IHRoZSBzdGFydCBvZiB0aGUgZmlyc3Qgc2NhbiBjb250YWluaW5nCisgKiB0aGUgY29tcG9uZW50LgorICogVGhlIEpQRUcgc3BlYyBwcm9oaWJpdHMgdGhlIGVuY29kZXIgZnJvbSBjaGFuZ2luZyB0aGUgY29udGVudHMgb2YgYSBRLXRhYmxlCisgKiBzbG90IGJldHdlZW4gc2NhbnMgb2YgYSBjb21wb25lbnQgdXNpbmcgdGhhdCBzbG90LiAgSWYgdGhlIGVuY29kZXIgZG9lcyBzbworICogYW55d2F5LCB0aGlzIGRlY29kZXIgd2lsbCBzaW1wbHkgdXNlIHRoZSBRLXRhYmxlIHZhbHVlcyB0aGF0IHdlcmUgY3VycmVudAorICogYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBzY2FuIGZvciB0aGUgY29tcG9uZW50LgorICoKKyAqIFRoZSBkZWNvbXByZXNzb3Igb3V0cHV0IHNpZGUgbG9va3Mgb25seSBhdCB0aGUgc2F2ZWQgcXVhbnQgdGFibGVzLAorICogbm90IGF0IHRoZSBjdXJyZW50IFEtdGFibGUgc2xvdHMuCisgKi8KKworTE9DQUwodm9pZCkKK2xhdGNoX3F1YW50X3RhYmxlcyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgaW50IGNpLCBxdGJsbm87CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIEpRVUFOVF9UQkwgKiBxdGJsOworCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICAvKiBObyB3b3JrIGlmIHdlIGFscmVhZHkgc2F2ZWQgUS10YWJsZSBmb3IgdGhpcyBjb21wb25lbnQgKi8KKyAgICBpZiAoY29tcHB0ci0+cXVhbnRfdGFibGUgIT0gTlVMTCkKKyAgICAgIGNvbnRpbnVlOworICAgIC8qIE1ha2Ugc3VyZSBzcGVjaWZpZWQgcXVhbnRpemF0aW9uIHRhYmxlIGlzIHByZXNlbnQgKi8KKyAgICBxdGJsbm8gPSBjb21wcHRyLT5xdWFudF90Ymxfbm87CisgICAgaWYgKHF0YmxubyA8IDAgfHwgcXRibG5vID49IE5VTV9RVUFOVF9UQkxTIHx8CisJY2luZm8tPnF1YW50X3RibF9wdHJzW3F0Ymxub10gPT0gTlVMTCkKKyAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX05PX1FVQU5UX1RBQkxFLCBxdGJsbm8pOworICAgIC8qIE9LLCBzYXZlIGF3YXkgdGhlIHF1YW50aXphdGlvbiB0YWJsZSAqLworICAgIHF0YmwgPSAoSlFVQU5UX1RCTCAqKQorICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkJCQkgIFNJWkVPRihKUVVBTlRfVEJMKSk7CisgICAgTUVNQ09QWShxdGJsLCBjaW5mby0+cXVhbnRfdGJsX3B0cnNbcXRibG5vXSwgU0laRU9GKEpRVUFOVF9UQkwpKTsKKyAgICBjb21wcHRyLT5xdWFudF90YWJsZSA9IHF0Ymw7CisgIH0KK30KKworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgaW5wdXQgbW9kdWxlcyB0byByZWFkIGEgc2NhbiBvZiBjb21wcmVzc2VkIGRhdGEuCisgKiBUaGUgZmlyc3QgY2FsbCB0byB0aGlzIGlzIGRvbmUgYnkgamRtYXN0ZXIuYyBhZnRlciBpbml0aWFsaXppbmcKKyAqIHRoZSBlbnRpcmUgZGVjb21wcmVzc29yIChkdXJpbmcganBlZ19zdGFydF9kZWNvbXByZXNzKS4KKyAqIFN1YnNlcXVlbnQgY2FsbHMgY29tZSBmcm9tIGNvbnN1bWVfbWFya2VycywgYmVsb3cuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9pbnB1dF9wYXNzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBwZXJfc2Nhbl9zZXR1cChjaW5mbyk7CisgIGxhdGNoX3F1YW50X3RhYmxlcyhjaW5mbyk7CisgICgqY2luZm8tPmVudHJvcHktPnN0YXJ0X3Bhc3MpIChjaW5mbyk7CisgICgqY2luZm8tPmNvZWYtPnN0YXJ0X2lucHV0X3Bhc3MpIChjaW5mbyk7CisgIGNpbmZvLT5pbnB1dGN0bC0+Y29uc3VtZV9pbnB1dCA9IGNpbmZvLT5jb2VmLT5jb25zdW1lX2RhdGE7Cit9CisKKworLyoKKyAqIEZpbmlzaCB1cCBhZnRlciBpbnB1dHRpbmcgYSBjb21wcmVzc2VkLWRhdGEgc2Nhbi4KKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBjb2VmZmljaWVudCBjb250cm9sbGVyIGFmdGVyIGl0J3MgcmVhZCBhbGwKKyAqIHRoZSBleHBlY3RlZCBkYXRhIG9mIHRoZSBzY2FuLgorICovCisKK01FVEhPRERFRih2b2lkKQorZmluaXNoX2lucHV0X3Bhc3MgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIGNpbmZvLT5pbnB1dGN0bC0+Y29uc3VtZV9pbnB1dCA9IGNvbnN1bWVfbWFya2VyczsKK30KKworCisvKgorICogUmVhZCBKUEVHIG1hcmtlcnMgYmVmb3JlLCBiZXR3ZWVuLCBvciBhZnRlciBjb21wcmVzc2VkLWRhdGEgc2NhbnMuCisgKiBDaGFuZ2Ugc3RhdGUgYXMgbmVjZXNzYXJ5IHdoZW4gYSBuZXcgc2NhbiBpcyByZWFjaGVkLgorICogUmV0dXJuIHZhbHVlIGlzIEpQRUdfU1VTUEVOREVELCBKUEVHX1JFQUNIRURfU09TLCBvciBKUEVHX1JFQUNIRURfRU9JLgorICoKKyAqIFRoZSBjb25zdW1lX2lucHV0IG1ldGhvZCBwb2ludGVyIHBvaW50cyBlaXRoZXIgaGVyZSBvciB0byB0aGUKKyAqIGNvZWZmaWNpZW50IGNvbnRyb2xsZXIncyBjb25zdW1lX2RhdGEgcm91dGluZSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIKKyAqIHdlIGFyZSByZWFkaW5nIGEgY29tcHJlc3NlZCBkYXRhIHNlZ21lbnQgb3IgaW50ZXItc2VnbWVudCBtYXJrZXJzLgorICovCisKK01FVEhPRERFRihpbnQpCitjb25zdW1lX21hcmtlcnMgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X2lucHV0Y3RsX3B0ciBpbnB1dGN0bCA9IChteV9pbnB1dGN0bF9wdHIpIGNpbmZvLT5pbnB1dGN0bDsKKyAgaW50IHZhbDsKKworICBpZiAoaW5wdXRjdGwtPnB1Yi5lb2lfcmVhY2hlZCkgLyogQWZ0ZXIgaGl0dGluZyBFT0ksIHJlYWQgbm8gZnVydGhlciAqLworICAgIHJldHVybiBKUEVHX1JFQUNIRURfRU9JOworCisgIHZhbCA9ICgqY2luZm8tPm1hcmtlci0+cmVhZF9tYXJrZXJzKSAoY2luZm8pOworCisgIHN3aXRjaCAodmFsKSB7CisgIGNhc2UgSlBFR19SRUFDSEVEX1NPUzoJLyogRm91bmQgU09TICovCisgICAgaWYgKGlucHV0Y3RsLT5pbmhlYWRlcnMpIHsJLyogMXN0IFNPUyAqLworICAgICAgaW5pdGlhbF9zZXR1cChjaW5mbyk7CisgICAgICBpbnB1dGN0bC0+aW5oZWFkZXJzID0gRkFMU0U7CisgICAgICAvKiBOb3RlOiBzdGFydF9pbnB1dF9wYXNzIG11c3QgYmUgY2FsbGVkIGJ5IGpkbWFzdGVyLmMKKyAgICAgICAqIGJlZm9yZSBhbnkgbW9yZSBpbnB1dCBjYW4gYmUgY29uc3VtZWQuICBqZGFwaW1pbi5jIGlzCisgICAgICAgKiByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIHRoaXMgc2VxdWVuY2luZy4KKyAgICAgICAqLworICAgIH0gZWxzZSB7CQkJLyogMm5kIG9yIGxhdGVyIFNPUyBtYXJrZXIgKi8KKyAgICAgIGlmICghIGlucHV0Y3RsLT5wdWIuaGFzX211bHRpcGxlX3NjYW5zKQorCUVSUkVYSVQoY2luZm8sIEpFUlJfRU9JX0VYUEVDVEVEKTsgLyogT29wcywgSSB3YXNuJ3QgZXhwZWN0aW5nIHRoaXMhICovCisgICAgICBzdGFydF9pbnB1dF9wYXNzKGNpbmZvKTsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgSlBFR19SRUFDSEVEX0VPSToJLyogRm91bmQgRU9JICovCisgICAgaW5wdXRjdGwtPnB1Yi5lb2lfcmVhY2hlZCA9IFRSVUU7CisgICAgaWYgKGlucHV0Y3RsLT5pbmhlYWRlcnMpIHsJLyogVGFibGVzLW9ubHkgZGF0YXN0cmVhbSwgYXBwYXJlbnRseSAqLworICAgICAgaWYgKGNpbmZvLT5tYXJrZXItPnNhd19TT0YpCisJRVJSRVhJVChjaW5mbywgSkVSUl9TT0ZfTk9fU09TKTsKKyAgICB9IGVsc2UgeworICAgICAgLyogUHJldmVudCBpbmZpbml0ZSBsb29wIGluIGNvZWYgY3RscidzIGRlY29tcHJlc3NfZGF0YSByb3V0aW5lCisgICAgICAgKiBpZiB1c2VyIHNldCBvdXRwdXRfc2Nhbl9udW1iZXIgbGFyZ2VyIHRoYW4gbnVtYmVyIG9mIHNjYW5zLgorICAgICAgICovCisgICAgICBpZiAoY2luZm8tPm91dHB1dF9zY2FuX251bWJlciA+IGNpbmZvLT5pbnB1dF9zY2FuX251bWJlcikKKwljaW5mby0+b3V0cHV0X3NjYW5fbnVtYmVyID0gY2luZm8tPmlucHV0X3NjYW5fbnVtYmVyOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSBKUEVHX1NVU1BFTkRFRDoKKyAgICBicmVhazsKKyAgfQorCisgIHJldHVybiB2YWw7Cit9CisKKworLyoKKyAqIFJlc2V0IHN0YXRlIHRvIGJlZ2luIGEgZnJlc2ggZGF0YXN0cmVhbS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3Jlc2V0X2lucHV0X2NvbnRyb2xsZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X2lucHV0Y3RsX3B0ciBpbnB1dGN0bCA9IChteV9pbnB1dGN0bF9wdHIpIGNpbmZvLT5pbnB1dGN0bDsKKworICBpbnB1dGN0bC0+cHViLmNvbnN1bWVfaW5wdXQgPSBjb25zdW1lX21hcmtlcnM7CisgIGlucHV0Y3RsLT5wdWIuaGFzX211bHRpcGxlX3NjYW5zID0gRkFMU0U7IC8qICJ1bmtub3duIiB3b3VsZCBiZSBiZXR0ZXIgKi8KKyAgaW5wdXRjdGwtPnB1Yi5lb2lfcmVhY2hlZCA9IEZBTFNFOworICBpbnB1dGN0bC0+aW5oZWFkZXJzID0gVFJVRTsKKyAgLyogUmVzZXQgb3RoZXIgbW9kdWxlcyAqLworICAoKmNpbmZvLT5lcnItPnJlc2V0X2Vycm9yX21ncikgKChqX2NvbW1vbl9wdHIpIGNpbmZvKTsKKyAgKCpjaW5mby0+bWFya2VyLT5yZXNldF9tYXJrZXJfcmVhZGVyKSAoY2luZm8pOworICAvKiBSZXNldCBwcm9ncmVzc2lvbiBzdGF0ZSAtLSB3b3VsZCBiZSBjbGVhbmVyIGlmIGVudHJvcHkgZGVjb2RlciBkaWQgdGhpcyAqLworICBjaW5mby0+Y29lZl9iaXRzID0gTlVMTDsKK30KKworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgaW5wdXQgY29udHJvbGxlciBtb2R1bGUuCisgKiBUaGlzIGlzIGNhbGxlZCBvbmx5IG9uY2UsIHdoZW4gdGhlIGRlY29tcHJlc3Npb24gb2JqZWN0IGlzIGNyZWF0ZWQuCisgKi8KKworR0xPQkFMKHZvaWQpCitqaW5pdF9pbnB1dF9jb250cm9sbGVyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9pbnB1dGN0bF9wdHIgaW5wdXRjdGw7CisKKyAgLyogQ3JlYXRlIHN1Ym9iamVjdCBpbiBwZXJtYW5lbnQgcG9vbCAqLworICBpbnB1dGN0bCA9IChteV9pbnB1dGN0bF9wdHIpCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9QRVJNQU5FTlQsCisJCQkJU0laRU9GKG15X2lucHV0X2NvbnRyb2xsZXIpKTsKKyAgY2luZm8tPmlucHV0Y3RsID0gKHN0cnVjdCBqcGVnX2lucHV0X2NvbnRyb2xsZXIgKikgaW5wdXRjdGw7CisgIC8qIEluaXRpYWxpemUgbWV0aG9kIHBvaW50ZXJzICovCisgIGlucHV0Y3RsLT5wdWIuY29uc3VtZV9pbnB1dCA9IGNvbnN1bWVfbWFya2VyczsKKyAgaW5wdXRjdGwtPnB1Yi5yZXNldF9pbnB1dF9jb250cm9sbGVyID0gcmVzZXRfaW5wdXRfY29udHJvbGxlcjsKKyAgaW5wdXRjdGwtPnB1Yi5zdGFydF9pbnB1dF9wYXNzID0gc3RhcnRfaW5wdXRfcGFzczsKKyAgaW5wdXRjdGwtPnB1Yi5maW5pc2hfaW5wdXRfcGFzcyA9IGZpbmlzaF9pbnB1dF9wYXNzOworICAvKiBJbml0aWFsaXplIHN0YXRlOiBjYW4ndCB1c2UgcmVzZXRfaW5wdXRfY29udHJvbGxlciBzaW5jZSB3ZSBkb24ndAorICAgKiB3YW50IHRvIHRyeSB0byByZXNldCBvdGhlciBtb2R1bGVzIHlldC4KKyAgICovCisgIGlucHV0Y3RsLT5wdWIuaGFzX211bHRpcGxlX3NjYW5zID0gRkFMU0U7IC8qICJ1bmtub3duIiB3b3VsZCBiZSBiZXR0ZXIgKi8KKyAgaW5wdXRjdGwtPnB1Yi5lb2lfcmVhY2hlZCA9IEZBTFNFOworICBpbnB1dGN0bC0+aW5oZWFkZXJzID0gVFJVRTsKK30KKworI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZG1haW5jdC5jIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamRtYWluY3QuYwppbmRleCAwZmM3N2M3Li4xNDgzZTZmIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZG1haW5jdC5jCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pkbWFpbmN0LmMKQEAgLTEsNTE1ICsxLDUxNSBAQAotI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykNCi0vKg0KLSAqIGpkbWFpbmN0LmMNCi0gKg0KLSAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2LCBUaG9tYXMgRy4gTGFuZS4NCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLg0KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4NCi0gKg0KLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbWFpbiBidWZmZXIgY29udHJvbGxlciBmb3IgZGVjb21wcmVzc2lvbi4NCi0gKiBUaGUgbWFpbiBidWZmZXIgbGllcyBiZXR3ZWVuIHRoZSBKUEVHIGRlY29tcHJlc3NvciBwcm9wZXIgYW5kIHRoZQ0KLSAqIHBvc3QtcHJvY2Vzc29yOyBpdCBob2xkcyBkb3duc2FtcGxlZCBkYXRhIGluIHRoZSBKUEVHIGNvbG9yc3BhY2UuDQotICoNCi0gKiBOb3RlIHRoYXQgdGhpcyBjb2RlIGlzIGJ5cGFzc2VkIGluIHJhdy1kYXRhIG1vZGUsIHNpbmNlIHRoZSBhcHBsaWNhdGlvbg0KLSAqIHN1cHBsaWVzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBtYWluIGJ1ZmZlciBpbiB0aGF0IGNhc2UuDQotICovDQotDQotI2RlZmluZSBKUEVHX0lOVEVSTkFMUw0KLSNpbmNsdWRlICJqaW5jbHVkZS5oIg0KLSNpbmNsdWRlICJqcGVnbGliLmgiDQotDQotDQotLyoNCi0gKiBJbiB0aGUgY3VycmVudCBzeXN0ZW0gZGVzaWduLCB0aGUgbWFpbiBidWZmZXIgbmVlZCBuZXZlciBiZSBhIGZ1bGwtaW1hZ2UNCi0gKiBidWZmZXI7IGFueSBmdWxsLWhlaWdodCBidWZmZXJzIHdpbGwgYmUgZm91bmQgaW5zaWRlIHRoZSBjb2VmZmljaWVudCBvcg0KLSAqIHBvc3Rwcm9jZXNzaW5nIGNvbnRyb2xsZXJzLiAgTm9uZXRoZWxlc3MsIHRoZSBtYWluIGNvbnRyb2xsZXIgaXMgbm90DQotICogdHJpdmlhbC4gIEl0cyByZXNwb25zaWJpbGl0eSBpcyB0byBwcm92aWRlIGNvbnRleHQgcm93cyBmb3IgdXBzYW1wbGluZy8NCi0gKiByZXNjYWxpbmcsIGFuZCBkb2luZyB0aGlzIGluIGFuIGVmZmljaWVudCBmYXNoaW9uIGlzIGEgYml0IHRyaWNreS4NCi0gKg0KLSAqIFBvc3Rwcm9jZXNzb3IgaW5wdXQgZGF0YSBpcyBjb3VudGVkIGluICJyb3cgZ3JvdXBzIi4gIEEgcm93IGdyb3VwDQotICogaXMgZGVmaW5lZCB0byBiZSAodl9zYW1wX2ZhY3RvciAqIERDVF9zY2FsZWRfc2l6ZSAvIG1pbl9EQ1Rfc2NhbGVkX3NpemUpDQotICogc2FtcGxlIHJvd3Mgb2YgZWFjaCBjb21wb25lbnQuICAoV2UgcmVxdWlyZSBEQ1Rfc2NhbGVkX3NpemUgdmFsdWVzIHRvIGJlDQotICogY2hvc2VuIHN1Y2ggdGhhdCB0aGVzZSBudW1iZXJzIGFyZSBpbnRlZ2Vycy4gIEluIHByYWN0aWNlIERDVF9zY2FsZWRfc2l6ZQ0KLSAqIHZhbHVlcyB3aWxsIGxpa2VseSBiZSBwb3dlcnMgb2YgdHdvLCBzbyB3ZSBhY3R1YWxseSBoYXZlIHRoZSBzdHJvbmdlcg0KLSAqIGNvbmRpdGlvbiB0aGF0IERDVF9zY2FsZWRfc2l6ZSAvIG1pbl9EQ1Rfc2NhbGVkX3NpemUgaXMgYW4gaW50ZWdlci4pDQotICogVXBzYW1wbGluZyB3aWxsIHR5cGljYWxseSBwcm9kdWNlIG1heF92X3NhbXBfZmFjdG9yIHBpeGVsIHJvd3MgZnJvbSBlYWNoDQotICogcm93IGdyb3VwICh0aW1lcyBhbnkgYWRkaXRpb25hbCBzY2FsZSBmYWN0b3IgdGhhdCB0aGUgdXBzYW1wbGVyIGlzDQotICogYXBwbHlpbmcpLg0KLSAqDQotICogVGhlIGNvZWZmaWNpZW50IGNvbnRyb2xsZXIgd2lsbCBkZWxpdmVyIGRhdGEgdG8gdXMgb25lIGlNQ1Ugcm93IGF0IGEgdGltZTsNCi0gKiBlYWNoIGlNQ1Ugcm93IGNvbnRhaW5zIHZfc2FtcF9mYWN0b3IgKiBEQ1Rfc2NhbGVkX3NpemUgc2FtcGxlIHJvd3MsIG9yDQotICogZXhhY3RseSBtaW5fRENUX3NjYWxlZF9zaXplIHJvdyBncm91cHMuICAoVGhpcyBhbW91bnQgb2YgZGF0YSBjb3JyZXNwb25kcw0KLSAqIHRvIG9uZSByb3cgb2YgTUNVcyB3aGVuIHRoZSBpbWFnZSBpcyBmdWxseSBpbnRlcmxlYXZlZC4pICBOb3RlIHRoYXQgdGhlDQotICogbnVtYmVyIG9mIHNhbXBsZSByb3dzIHZhcmllcyBhY3Jvc3MgY29tcG9uZW50cywgYnV0IHRoZSBudW1iZXIgb2Ygcm93DQotICogZ3JvdXBzIGRvZXMgbm90LiAgU29tZSBnYXJiYWdlIHNhbXBsZSByb3dzIG1heSBiZSBpbmNsdWRlZCBpbiB0aGUgbGFzdCBpTUNVDQotICogcm93IGF0IHRoZSBib3R0b20gb2YgdGhlIGltYWdlLg0KLSAqDQotICogRGVwZW5kaW5nIG9uIHRoZSB2ZXJ0aWNhbCBzY2FsaW5nIGFsZ29yaXRobSB1c2VkLCB0aGUgdXBzYW1wbGVyIG1heSBuZWVkDQotICogYWNjZXNzIHRvIHRoZSBzYW1wbGUgcm93KHMpIGFib3ZlIGFuZCBiZWxvdyBpdHMgY3VycmVudCBpbnB1dCByb3cgZ3JvdXAuDQotICogVGhlIHVwc2FtcGxlciBpcyByZXF1aXJlZCB0byBzZXQgbmVlZF9jb250ZXh0X3Jvd3MgVFJVRSBhdCBnbG9iYWwgc2VsZWN0aW9uDQotICogdGltZSBpZiBzby4gIFdoZW4gbmVlZF9jb250ZXh0X3Jvd3MgaXMgRkFMU0UsIHRoaXMgY29udHJvbGxlciBjYW4gc2ltcGx5DQotICogb2J0YWluIG9uZSBpTUNVIHJvdyBhdCBhIHRpbWUgZnJvbSB0aGUgY29lZmZpY2llbnQgY29udHJvbGxlciBhbmQgZG9sZSBpdA0KLSAqIG91dCBhcyByb3cgZ3JvdXBzIHRvIHRoZSBwb3N0cHJvY2Vzc29yLg0KLSAqDQotICogV2hlbiBuZWVkX2NvbnRleHRfcm93cyBpcyBUUlVFLCB0aGlzIGNvbnRyb2xsZXIgZ3VhcmFudGVlcyB0aGF0IHRoZSBidWZmZXINCi0gKiBwYXNzZWQgdG8gcG9zdHByb2Nlc3NpbmcgY29udGFpbnMgYXQgbGVhc3Qgb25lIHJvdyBncm91cCdzIHdvcnRoIG9mIHNhbXBsZXMNCi0gKiBhYm92ZSBhbmQgYmVsb3cgdGhlIHJvdyBncm91cChzKSBiZWluZyBwcm9jZXNzZWQuICBOb3RlIHRoYXQgdGhlIGNvbnRleHQNCi0gKiByb3dzICJhYm92ZSIgdGhlIGZpcnN0IHBhc3NlZCByb3cgZ3JvdXAgYXBwZWFyIGF0IG5lZ2F0aXZlIHJvdyBvZmZzZXRzIGluDQotICogdGhlIHBhc3NlZCBidWZmZXIuICBBdCB0aGUgdG9wIGFuZCBib3R0b20gb2YgdGhlIGltYWdlLCB0aGUgcmVxdWlyZWQNCi0gKiBjb250ZXh0IHJvd3MgYXJlIG1hbnVmYWN0dXJlZCBieSBkdXBsaWNhdGluZyB0aGUgZmlyc3Qgb3IgbGFzdCByZWFsIHNhbXBsZQ0KLSAqIHJvdzsgdGhpcyBhdm9pZHMgaGF2aW5nIHNwZWNpYWwgY2FzZXMgaW4gdGhlIHVwc2FtcGxpbmcgaW5uZXIgbG9vcHMuDQotICoNCi0gKiBUaGUgYW1vdW50IG9mIGNvbnRleHQgaXMgZml4ZWQgYXQgb25lIHJvdyBncm91cCBqdXN0IGJlY2F1c2UgdGhhdCdzIGENCi0gKiBjb252ZW5pZW50IG51bWJlciBmb3IgdGhpcyBjb250cm9sbGVyIHRvIHdvcmsgd2l0aC4gIFRoZSBleGlzdGluZw0KLSAqIHVwc2FtcGxlcnMgcmVhbGx5IG9ubHkgbmVlZCBvbmUgc2FtcGxlIHJvdyBvZiBjb250ZXh0LiAgQW4gdXBzYW1wbGVyDQotICogc3VwcG9ydGluZyBhcmJpdHJhcnkgb3V0cHV0IHJlc2NhbGluZyBtaWdodCB3aXNoIGZvciBtb3JlIHRoYW4gb25lIHJvdw0KLSAqIGdyb3VwIG9mIGNvbnRleHQgd2hlbiBzaHJpbmtpbmcgdGhlIGltYWdlOyB0b3VnaCwgd2UgZG9uJ3QgaGFuZGxlIHRoYXQuDQotICogKFRoaXMgaXMganVzdGlmaWVkIGJ5IHRoZSBhc3N1bXB0aW9uIHRoYXQgZG93bnNpemluZyB3aWxsIGJlIGhhbmRsZWQgbW9zdGx5DQotICogYnkgYWRqdXN0aW5nIHRoZSBEQ1Rfc2NhbGVkX3NpemUgdmFsdWVzLCBzbyB0aGF0IHRoZSBhY3R1YWwgc2NhbGUgZmFjdG9yIGF0DQotICogdGhlIHVwc2FtcGxlIHN0ZXAgbmVlZG4ndCBiZSBtdWNoIGxlc3MgdGhhbiBvbmUuKQ0KLSAqDQotICogVG8gcHJvdmlkZSB0aGUgZGVzaXJlZCBjb250ZXh0LCB3ZSBoYXZlIHRvIHJldGFpbiB0aGUgbGFzdCB0d28gcm93IGdyb3Vwcw0KLSAqIG9mIG9uZSBpTUNVIHJvdyB3aGlsZSByZWFkaW5nIGluIHRoZSBuZXh0IGlNQ1Ugcm93LiAgKFRoZSBsYXN0IHJvdyBncm91cA0KLSAqIGNhbid0IGJlIHByb2Nlc3NlZCB1bnRpbCB3ZSBoYXZlIGFub3RoZXIgcm93IGdyb3VwIGZvciBpdHMgYmVsb3ctY29udGV4dCwNCi0gKiBhbmQgc28gd2UgaGF2ZSB0byBzYXZlIHRoZSBuZXh0LXRvLWxhc3QgZ3JvdXAgdG9vIGZvciBpdHMgYWJvdmUtY29udGV4dC4pDQotICogV2UgY291bGQgZG8gdGhpcyBtb3N0IHNpbXBseSBieSBjb3B5aW5nIGRhdGEgYXJvdW5kIGluIG91ciBidWZmZXIsIGJ1dA0KLSAqIHRoYXQnZCBiZSB2ZXJ5IHNsb3cuICBXZSBjYW4gYXZvaWQgY29weWluZyBhbnkgZGF0YSBieSBjcmVhdGluZyBhIHJhdGhlcg0KLSAqIHN0cmFuZ2UgcG9pbnRlciBzdHJ1Y3R1cmUuICBIZXJlJ3MgaG93IGl0IHdvcmtzLiAgV2UgYWxsb2NhdGUgYSB3b3Jrc3BhY2UNCi0gKiBjb25zaXN0aW5nIG9mIE0rMiByb3cgZ3JvdXBzICh3aGVyZSBNID0gbWluX0RDVF9zY2FsZWRfc2l6ZSBpcyB0aGUgbnVtYmVyDQotICogb2Ygcm93IGdyb3VwcyBwZXIgaU1DVSByb3cpLiAgV2UgY3JlYXRlIHR3byBzZXRzIG9mIHJlZHVuZGFudCBwb2ludGVycyB0bw0KLSAqIHRoZSB3b3Jrc3BhY2UuICBMYWJlbGluZyB0aGUgcGh5c2ljYWwgcm93IGdyb3VwcyAwIHRvIE0rMSwgdGhlIHN5bnRoZXNpemVkDQotICogcG9pbnRlciBsaXN0cyBsb29rIGxpa2UgdGhpczoNCi0gKiAgICAgICAgICAgICAgICAgICBNKzEgICAgICAgICAgICAgICAgICAgICAgICAgIE0tMQ0KLSAqIG1hc3RlciBwb2ludGVyIC0tPiAwICAgICAgICAgbWFzdGVyIHBvaW50ZXIgLS0+IDANCi0gKiAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxDQotICogICAgICAgICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4NCi0gKiAgICAgICAgICAgICAgICAgICBNLTMgICAgICAgICAgICAgICAgICAgICAgICAgIE0tMw0KLSAqICAgICAgICAgICAgICAgICAgIE0tMiAgICAgICAgICAgICAgICAgICAgICAgICAgIE0NCi0gKiAgICAgICAgICAgICAgICAgICBNLTEgICAgICAgICAgICAgICAgICAgICAgICAgIE0rMQ0KLSAqICAgICAgICAgICAgICAgICAgICBNICAgICAgICAgICAgICAgICAgICAgICAgICAgTS0yDQotICogICAgICAgICAgICAgICAgICAgTSsxICAgICAgICAgICAgICAgICAgICAgICAgICBNLTENCi0gKiAgICAgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwDQotICogV2UgcmVhZCBhbHRlcm5hdGUgaU1DVSByb3dzIHVzaW5nIGVhY2ggbWFzdGVyIHBvaW50ZXI7IHRodXMgdGhlIGxhc3QgdHdvDQotICogcm93IGdyb3VwcyBvZiB0aGUgcHJldmlvdXMgaU1DVSByb3cgcmVtYWluIHVuLW92ZXJ3cml0dGVuIGluIHRoZSB3b3Jrc3BhY2UuDQotICogVGhlIHBvaW50ZXIgbGlzdHMgYXJlIHNldCB1cCBzbyB0aGF0IHRoZSByZXF1aXJlZCBjb250ZXh0IHJvd3MgYXBwZWFyIHRvDQotICogYmUgYWRqYWNlbnQgdG8gdGhlIHByb3BlciBwbGFjZXMgd2hlbiB3ZSBwYXNzIHRoZSBwb2ludGVyIGxpc3RzIHRvIHRoZQ0KLSAqIHVwc2FtcGxlci4NCi0gKg0KLSAqIFRoZSBhYm92ZSBwaWN0dXJlcyBkZXNjcmliZSB0aGUgbm9ybWFsIHN0YXRlIG9mIHRoZSBwb2ludGVyIGxpc3RzLg0KLSAqIEF0IHRvcCBhbmQgYm90dG9tIG9mIHRoZSBpbWFnZSwgd2UgZGlkZGxlIHRoZSBwb2ludGVyIGxpc3RzIHRvIGR1cGxpY2F0ZQ0KLSAqIHRoZSBmaXJzdCBvciBsYXN0IHNhbXBsZSByb3cgYXMgbmVjZXNzYXJ5ICh0aGlzIGlzIGNoZWFwZXIgdGhhbiBjb3B5aW5nDQotICogc2FtcGxlIHJvd3MgYXJvdW5kKS4NCi0gKg0KLSAqIFRoaXMgc2NoZW1lIGJyZWFrcyBkb3duIGlmIE0gPCAyLCBpZSwgbWluX0RDVF9zY2FsZWRfc2l6ZSBpcyAxLiAgSW4gdGhhdA0KLSAqIHNpdHVhdGlvbiBlYWNoIGlNQ1Ugcm93IHByb3ZpZGVzIG9ubHkgb25lIHJvdyBncm91cCBzbyB0aGUgYnVmZmVyaW5nIGxvZ2ljDQotICogbXVzdCBiZSBkaWZmZXJlbnQgKGVnLCB3ZSBtdXN0IHJlYWQgdHdvIGlNQ1Ugcm93cyBiZWZvcmUgd2UgY2FuIGVtaXQgdGhlDQotICogZmlyc3Qgcm93IGdyb3VwKS4gIEZvciBub3csIHdlIHNpbXBseSBkbyBub3Qgc3VwcG9ydCBwcm92aWRpbmcgY29udGV4dA0KLSAqIHJvd3Mgd2hlbiBtaW5fRENUX3NjYWxlZF9zaXplIGlzIDEuICBUaGF0IGNvbWJpbmF0aW9uIHNlZW1zIHVubGlrZWx5IHRvDQotICogYmUgd29ydGggcHJvdmlkaW5nIC0tLSBpZiBzb21lb25lIHdhbnRzIGEgMS84dGgtc2l6ZSBwcmV2aWV3LCB0aGV5IHByb2JhYmx5DQotICogd2FudCBpdCBxdWljayBhbmQgZGlydHksIHNvIGEgY29udGV4dC1mcmVlIHVwc2FtcGxlciBpcyBzdWZmaWNpZW50Lg0KLSAqLw0KLQ0KLQ0KLS8qIFByaXZhdGUgYnVmZmVyIGNvbnRyb2xsZXIgb2JqZWN0ICovDQotDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgc3RydWN0IGpwZWdfZF9tYWluX2NvbnRyb2xsZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovDQotDQotICAvKiBQb2ludGVyIHRvIGFsbG9jYXRlZCB3b3Jrc3BhY2UgKE0gb3IgTSsyIHJvdyBncm91cHMpLiAqLw0KLSAgSlNBTVBBUlJBWSBidWZmZXJbTUFYX0NPTVBPTkVOVFNdOw0KLQ0KLSAgYm9vbGVhbiBidWZmZXJfZnVsbDsJCS8qIEhhdmUgd2UgZ290dGVuIGFuIGlNQ1Ugcm93IGZyb20gZGVjb2Rlcj8gKi8NCi0gIEpESU1FTlNJT04gcm93Z3JvdXBfY3RyOwkvKiBjb3VudHMgcm93IGdyb3VwcyBvdXRwdXQgdG8gcG9zdHByb2Nlc3NvciAqLw0KLQ0KLSAgLyogUmVtYWluaW5nIGZpZWxkcyBhcmUgb25seSB1c2VkIGluIHRoZSBjb250ZXh0IGNhc2UuICovDQotDQotICAvKiBUaGVzZSBhcmUgdGhlIG1hc3RlciBwb2ludGVycyB0byB0aGUgZnVubnktb3JkZXIgcG9pbnRlciBsaXN0cy4gKi8NCi0gIEpTQU1QSU1BR0UgeGJ1ZmZlclsyXTsJLyogcG9pbnRlcnMgdG8gd2VpcmQgcG9pbnRlciBsaXN0cyAqLw0KLQ0KLSAgaW50IHdoaWNocHRyOwkJCS8qIGluZGljYXRlcyB3aGljaCBwb2ludGVyIHNldCBpcyBub3cgaW4gdXNlICovDQotICBpbnQgY29udGV4dF9zdGF0ZTsJCS8qIHByb2Nlc3NfZGF0YSBzdGF0ZSBtYWNoaW5lIHN0YXR1cyAqLw0KLSAgSkRJTUVOU0lPTiByb3dncm91cHNfYXZhaWw7CS8qIHJvdyBncm91cHMgYXZhaWxhYmxlIHRvIHBvc3Rwcm9jZXNzb3IgKi8NCi0gIEpESU1FTlNJT04gaU1DVV9yb3dfY3RyOwkvKiBjb3VudHMgaU1DVSByb3dzIHRvIGRldGVjdCBpbWFnZSB0b3AvYm90ICovDQotfSBteV9tYWluX2NvbnRyb2xsZXI7DQotDQotdHlwZWRlZiBteV9tYWluX2NvbnRyb2xsZXIgKiBteV9tYWluX3B0cjsNCi0NCi0vKiBjb250ZXh0X3N0YXRlIHZhbHVlczogKi8NCi0jZGVmaW5lIENUWF9QUkVQQVJFX0ZPUl9JTUNVCTAJLyogbmVlZCB0byBwcmVwYXJlIGZvciBNQ1Ugcm93ICovDQotI2RlZmluZSBDVFhfUFJPQ0VTU19JTUNVCTEJLyogZmVlZGluZyBpTUNVIHRvIHBvc3Rwcm9jZXNzb3IgKi8NCi0jZGVmaW5lIENUWF9QT1NUUE9ORURfUk9XCTIJLyogZmVlZGluZyBwb3N0cG9uZWQgcm93IGdyb3VwICovDQotDQotDQotLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8NCi1NRVRIT0RERUYodm9pZCkgcHJvY2Vzc19kYXRhX3NpbXBsZV9tYWluDQotCUpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLA0KLQkgICAgIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLCBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKSk7DQotTUVUSE9EREVGKHZvaWQpIHByb2Nlc3NfZGF0YV9jb250ZXh0X21haW4NCi0JSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsDQotCSAgICAgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpKTsNCi0jaWZkZWYgUVVBTlRfMlBBU1NfU1VQUE9SVEVEDQotTUVUSE9EREVGKHZvaWQpIHByb2Nlc3NfZGF0YV9jcmFua19wb3N0DQotCUpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLA0KLQkgICAgIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLCBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKSk7DQotI2VuZGlmDQotDQotDQotTE9DQUwodm9pZCkNCi1hbGxvY19mdW5ueV9wb2ludGVycyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi0vKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGZ1bm55IHBvaW50ZXIgbGlzdHMuDQotICogVGhpcyBpcyBkb25lIG9ubHkgb25jZSwgbm90IG9uY2UgcGVyIHBhc3MuDQotICovDQotew0KLSAgbXlfbWFpbl9wdHIgbWFpbiA9IChteV9tYWluX3B0cikgY2luZm8tPm1haW47DQotICBpbnQgY2ksIHJncm91cDsNCi0gIGludCBNID0gY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemU7DQotICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOw0KLSAgSlNBTVBBUlJBWSB4YnVmOw0KLQ0KLSAgLyogR2V0IHRvcC1sZXZlbCBzcGFjZSBmb3IgY29tcG9uZW50IGFycmF5IHBvaW50ZXJzLg0KLSAgICogV2UgYWxsb2MgYm90aCBhcnJheXMgd2l0aCBvbmUgY2FsbCB0byBzYXZlIGEgZmV3IGN5Y2xlcy4NCi0gICAqLw0KLSAgbWFpbi0+eGJ1ZmZlclswXSA9IChKU0FNUElNQUdFKQ0KLSAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQljaW5mby0+bnVtX2NvbXBvbmVudHMgKiAyICogU0laRU9GKEpTQU1QQVJSQVkpKTsNCi0gIG1haW4tPnhidWZmZXJbMV0gPSBtYWluLT54YnVmZmVyWzBdICsgY2luZm8tPm51bV9jb21wb25lbnRzOw0KLQ0KLSAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsNCi0gICAgICAgY2krKywgY29tcHB0cisrKSB7DQotICAgIHJncm91cCA9IChjb21wcHRyLT52X3NhbXBfZmFjdG9yICogY29tcHB0ci0+RENUX3NjYWxlZF9zaXplKSAvDQotICAgICAgY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemU7IC8qIGhlaWdodCBvZiBhIHJvdyBncm91cCBvZiBjb21wb25lbnQgKi8NCi0gICAgLyogR2V0IHNwYWNlIGZvciBwb2ludGVyIGxpc3RzIC0tLSBNKzQgcm93IGdyb3VwcyBpbiBlYWNoIGxpc3QuDQotICAgICAqIFdlIGFsbG9jIGJvdGggcG9pbnRlciBsaXN0cyB3aXRoIG9uZSBjYWxsIHRvIHNhdmUgYSBmZXcgY3ljbGVzLg0KLSAgICAgKi8NCi0gICAgeGJ1ZiA9IChKU0FNUEFSUkFZKQ0KLSAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsDQotCQkJCSAgMiAqIChyZ3JvdXAgKiAoTSArIDQpKSAqIFNJWkVPRihKU0FNUFJPVykpOw0KLSAgICB4YnVmICs9IHJncm91cDsJCS8qIHdhbnQgb25lIHJvdyBncm91cCBhdCBuZWdhdGl2ZSBvZmZzZXRzICovDQotICAgIG1haW4tPnhidWZmZXJbMF1bY2ldID0geGJ1ZjsNCi0gICAgeGJ1ZiArPSByZ3JvdXAgKiAoTSArIDQpOw0KLSAgICBtYWluLT54YnVmZmVyWzFdW2NpXSA9IHhidWY7DQotICB9DQotfQ0KLQ0KLQ0KLUxPQ0FMKHZvaWQpDQotbWFrZV9mdW5ueV9wb2ludGVycyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi0vKiBDcmVhdGUgdGhlIGZ1bm55IHBvaW50ZXIgbGlzdHMgZGlzY3Vzc2VkIGluIHRoZSBjb21tZW50cyBhYm92ZS4NCi0gKiBUaGUgYWN0dWFsIHdvcmtzcGFjZSBpcyBhbHJlYWR5IGFsbG9jYXRlZCAoaW4gbWFpbi0+YnVmZmVyKSwNCi0gKiBhbmQgdGhlIHNwYWNlIGZvciB0aGUgcG9pbnRlciBsaXN0cyBpcyBhbGxvY2F0ZWQgdG9vLg0KLSAqIFRoaXMgcm91dGluZSBqdXN0IGZpbGxzIGluIHRoZSBjdXJpb3VzbHkgb3JkZXJlZCBsaXN0cy4NCi0gKiBUaGlzIHdpbGwgYmUgcmVwZWF0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHBhc3MuDQotICovDQotew0KLSAgbXlfbWFpbl9wdHIgbWFpbiA9IChteV9tYWluX3B0cikgY2luZm8tPm1haW47DQotICBpbnQgY2ksIGksIHJncm91cDsNCi0gIGludCBNID0gY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemU7DQotICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOw0KLSAgSlNBTVBBUlJBWSBidWYsIHhidWYwLCB4YnVmMTsNCi0NCi0gIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7DQotICAgICAgIGNpKyssIGNvbXBwdHIrKykgew0KLSAgICByZ3JvdXAgPSAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPkRDVF9zY2FsZWRfc2l6ZSkgLw0KLSAgICAgIGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplOyAvKiBoZWlnaHQgb2YgYSByb3cgZ3JvdXAgb2YgY29tcG9uZW50ICovDQotICAgIHhidWYwID0gbWFpbi0+eGJ1ZmZlclswXVtjaV07DQotICAgIHhidWYxID0gbWFpbi0+eGJ1ZmZlclsxXVtjaV07DQotICAgIC8qIEZpcnN0IGNvcHkgdGhlIHdvcmtzcGFjZSBwb2ludGVycyBhcy1pcyAqLw0KLSAgICBidWYgPSBtYWluLT5idWZmZXJbY2ldOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgcmdyb3VwICogKE0gKyAyKTsgaSsrKSB7DQotICAgICAgeGJ1ZjBbaV0gPSB4YnVmMVtpXSA9IGJ1ZltpXTsNCi0gICAgfQ0KLSAgICAvKiBJbiB0aGUgc2Vjb25kIGxpc3QsIHB1dCB0aGUgbGFzdCBmb3VyIHJvdyBncm91cHMgaW4gc3dhcHBlZCBvcmRlciAqLw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgcmdyb3VwICogMjsgaSsrKSB7DQotICAgICAgeGJ1ZjFbcmdyb3VwKihNLTIpICsgaV0gPSBidWZbcmdyb3VwKk0gKyBpXTsNCi0gICAgICB4YnVmMVtyZ3JvdXAqTSArIGldID0gYnVmW3Jncm91cCooTS0yKSArIGldOw0KLSAgICB9DQotICAgIC8qIFRoZSB3cmFwYXJvdW5kIHBvaW50ZXJzIGF0IHRvcCBhbmQgYm90dG9tIHdpbGwgYmUgZmlsbGVkIGxhdGVyDQotICAgICAqIChzZWUgc2V0X3dyYXBhcm91bmRfcG9pbnRlcnMsIGJlbG93KS4gIEluaXRpYWxseSB3ZSB3YW50IHRoZSAiYWJvdmUiDQotICAgICAqIHBvaW50ZXJzIHRvIGR1cGxpY2F0ZSB0aGUgZmlyc3QgYWN0dWFsIGRhdGEgbGluZS4gIFRoaXMgb25seSBuZWVkcw0KLSAgICAgKiB0byBoYXBwZW4gaW4geGJ1ZmZlclswXS4NCi0gICAgICovDQotICAgIGZvciAoaSA9IDA7IGkgPCByZ3JvdXA7IGkrKykgew0KLSAgICAgIHhidWYwW2kgLSByZ3JvdXBdID0geGJ1ZjBbMF07DQotICAgIH0NCi0gIH0NCi19DQotDQotDQotTE9DQUwodm9pZCkNCi1zZXRfd3JhcGFyb3VuZF9wb2ludGVycyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi0vKiBTZXQgdXAgdGhlICJ3cmFwYXJvdW5kIiBwb2ludGVycyBhdCB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgcG9pbnRlciBsaXN0cy4NCi0gKiBUaGlzIGNoYW5nZXMgdGhlIHBvaW50ZXIgbGlzdCBzdGF0ZSBmcm9tIHRvcC1vZi1pbWFnZSB0byB0aGUgbm9ybWFsIHN0YXRlLg0KLSAqLw0KLXsNCi0gIG15X21haW5fcHRyIG1haW4gPSAobXlfbWFpbl9wdHIpIGNpbmZvLT5tYWluOw0KLSAgaW50IGNpLCBpLCByZ3JvdXA7DQotICBpbnQgTSA9IGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplOw0KLSAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsNCi0gIEpTQU1QQVJSQVkgeGJ1ZjAsIHhidWYxOw0KLQ0KLSAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsNCi0gICAgICAgY2krKywgY29tcHB0cisrKSB7DQotICAgIHJncm91cCA9IChjb21wcHRyLT52X3NhbXBfZmFjdG9yICogY29tcHB0ci0+RENUX3NjYWxlZF9zaXplKSAvDQotICAgICAgY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemU7IC8qIGhlaWdodCBvZiBhIHJvdyBncm91cCBvZiBjb21wb25lbnQgKi8NCi0gICAgeGJ1ZjAgPSBtYWluLT54YnVmZmVyWzBdW2NpXTsNCi0gICAgeGJ1ZjEgPSBtYWluLT54YnVmZmVyWzFdW2NpXTsNCi0gICAgZm9yIChpID0gMDsgaSA8IHJncm91cDsgaSsrKSB7DQotICAgICAgeGJ1ZjBbaSAtIHJncm91cF0gPSB4YnVmMFtyZ3JvdXAqKE0rMSkgKyBpXTsNCi0gICAgICB4YnVmMVtpIC0gcmdyb3VwXSA9IHhidWYxW3Jncm91cCooTSsxKSArIGldOw0KLSAgICAgIHhidWYwW3Jncm91cCooTSsyKSArIGldID0geGJ1ZjBbaV07DQotICAgICAgeGJ1ZjFbcmdyb3VwKihNKzIpICsgaV0gPSB4YnVmMVtpXTsNCi0gICAgfQ0KLSAgfQ0KLX0NCi0NCi0NCi1MT0NBTCh2b2lkKQ0KLXNldF9ib3R0b21fcG9pbnRlcnMgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pDQotLyogQ2hhbmdlIHRoZSBwb2ludGVyIGxpc3RzIHRvIGR1cGxpY2F0ZSB0aGUgbGFzdCBzYW1wbGUgcm93IGF0IHRoZSBib3R0b20NCi0gKiBvZiB0aGUgaW1hZ2UuICB3aGljaHB0ciBpbmRpY2F0ZXMgd2hpY2ggeGJ1ZmZlciBob2xkcyB0aGUgZmluYWwgaU1DVSByb3cuDQotICogQWxzbyBzZXRzIHJvd2dyb3Vwc19hdmFpbCB0byBpbmRpY2F0ZSBudW1iZXIgb2Ygbm9uZHVtbXkgcm93IGdyb3VwcyBpbiByb3cuDQotICovDQotew0KLSAgbXlfbWFpbl9wdHIgbWFpbiA9IChteV9tYWluX3B0cikgY2luZm8tPm1haW47DQotICBpbnQgY2ksIGksIHJncm91cCwgaU1DVWhlaWdodCwgcm93c19sZWZ0Ow0KLSAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsNCi0gIEpTQU1QQVJSQVkgeGJ1ZjsNCi0NCi0gIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7DQotICAgICAgIGNpKyssIGNvbXBwdHIrKykgew0KLSAgICAvKiBDb3VudCBzYW1wbGUgcm93cyBpbiBvbmUgaU1DVSByb3cgYW5kIGluIG9uZSByb3cgZ3JvdXAgKi8NCi0gICAgaU1DVWhlaWdodCA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemU7DQotICAgIHJncm91cCA9IGlNQ1VoZWlnaHQgLyBjaW5mby0+bWluX0RDVF9zY2FsZWRfc2l6ZTsNCi0gICAgLyogQ291bnQgbm9uZHVtbXkgc2FtcGxlIHJvd3MgcmVtYWluaW5nIGZvciB0aGlzIGNvbXBvbmVudCAqLw0KLSAgICByb3dzX2xlZnQgPSAoaW50KSAoY29tcHB0ci0+ZG93bnNhbXBsZWRfaGVpZ2h0ICUgKEpESU1FTlNJT04pIGlNQ1VoZWlnaHQpOw0KLSAgICBpZiAocm93c19sZWZ0ID09IDApIHJvd3NfbGVmdCA9IGlNQ1VoZWlnaHQ7DQotICAgIC8qIENvdW50IG5vbmR1bW15IHJvdyBncm91cHMuICBTaG91bGQgZ2V0IHNhbWUgYW5zd2VyIGZvciBlYWNoIGNvbXBvbmVudCwNCi0gICAgICogc28gd2UgbmVlZCBvbmx5IGRvIGl0IG9uY2UuDQotICAgICAqLw0KLSAgICBpZiAoY2kgPT0gMCkgew0KLSAgICAgIG1haW4tPnJvd2dyb3Vwc19hdmFpbCA9IChKRElNRU5TSU9OKSAoKHJvd3NfbGVmdC0xKSAvIHJncm91cCArIDEpOw0KLSAgICB9DQotICAgIC8qIER1cGxpY2F0ZSB0aGUgbGFzdCByZWFsIHNhbXBsZSByb3cgcmdyb3VwKjIgdGltZXM7IHRoaXMgcGFkcyBvdXQgdGhlDQotICAgICAqIGxhc3QgcGFydGlhbCByb3dncm91cCBhbmQgZW5zdXJlcyBhdCBsZWFzdCBvbmUgZnVsbCByb3dncm91cCBvZiBjb250ZXh0Lg0KLSAgICAgKi8NCi0gICAgeGJ1ZiA9IG1haW4tPnhidWZmZXJbbWFpbi0+d2hpY2hwdHJdW2NpXTsNCi0gICAgZm9yIChpID0gMDsgaSA8IHJncm91cCAqIDI7IGkrKykgew0KLSAgICAgIHhidWZbcm93c19sZWZ0ICsgaV0gPSB4YnVmW3Jvd3NfbGVmdC0xXTsNCi0gICAgfQ0KLSAgfQ0KLX0NCi0NCi0NCi0vKg0KLSAqIEluaXRpYWxpemUgZm9yIGEgcHJvY2Vzc2luZyBwYXNzLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXN0YXJ0X3Bhc3NfbWFpbiAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSl9CVUZfTU9ERSBwYXNzX21vZGUpDQotew0KLSAgbXlfbWFpbl9wdHIgbWFpbiA9IChteV9tYWluX3B0cikgY2luZm8tPm1haW47DQotDQotICBzd2l0Y2ggKHBhc3NfbW9kZSkgew0KLSAgY2FzZSBKQlVGX1BBU1NfVEhSVToNCi0gICAgaWYgKGNpbmZvLT51cHNhbXBsZS0+bmVlZF9jb250ZXh0X3Jvd3MpIHsNCi0gICAgICBtYWluLT5wdWIucHJvY2Vzc19kYXRhID0gcHJvY2Vzc19kYXRhX2NvbnRleHRfbWFpbjsNCi0gICAgICBtYWtlX2Z1bm55X3BvaW50ZXJzKGNpbmZvKTsgLyogQ3JlYXRlIHRoZSB4YnVmZmVyW10gbGlzdHMgKi8NCi0gICAgICBtYWluLT53aGljaHB0ciA9IDA7CS8qIFJlYWQgZmlyc3QgaU1DVSByb3cgaW50byB4YnVmZmVyWzBdICovDQotICAgICAgbWFpbi0+Y29udGV4dF9zdGF0ZSA9IENUWF9QUkVQQVJFX0ZPUl9JTUNVOw0KLSAgICAgIG1haW4tPmlNQ1Vfcm93X2N0ciA9IDA7DQotICAgIH0gZWxzZSB7DQotICAgICAgLyogU2ltcGxlIGNhc2Ugd2l0aCBubyBjb250ZXh0IG5lZWRlZCAqLw0KLSAgICAgIG1haW4tPnB1Yi5wcm9jZXNzX2RhdGEgPSBwcm9jZXNzX2RhdGFfc2ltcGxlX21haW47DQotICAgIH0NCi0gICAgbWFpbi0+YnVmZmVyX2Z1bGwgPSBGQUxTRTsJLyogTWFyayBidWZmZXIgZW1wdHkgKi8NCi0gICAgbWFpbi0+cm93Z3JvdXBfY3RyID0gMDsNCi0gICAgYnJlYWs7DQotI2lmZGVmIFFVQU5UXzJQQVNTX1NVUFBPUlRFRA0KLSAgY2FzZSBKQlVGX0NSQU5LX0RFU1Q6DQotICAgIC8qIEZvciBsYXN0IHBhc3Mgb2YgMi1wYXNzIHF1YW50aXphdGlvbiwganVzdCBjcmFuayB0aGUgcG9zdHByb2Nlc3NvciAqLw0KLSAgICBtYWluLT5wdWIucHJvY2Vzc19kYXRhID0gcHJvY2Vzc19kYXRhX2NyYW5rX3Bvc3Q7DQotICAgIGJyZWFrOw0KLSNlbmRpZg0KLSAgZGVmYXVsdDoNCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOw0KLSAgICBicmVhazsNCi0gIH0NCi19DQotDQotDQotLyoNCi0gKiBQcm9jZXNzIHNvbWUgZGF0YS4NCi0gKiBUaGlzIGhhbmRsZXMgdGhlIHNpbXBsZSBjYXNlIHdoZXJlIG5vIGNvbnRleHQgaXMgcmVxdWlyZWQuDQotICovDQotDQotTUVUSE9EREVGKHZvaWQpDQotcHJvY2Vzc19kYXRhX3NpbXBsZV9tYWluIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCSAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwNCi0JCQkgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpDQotew0KLSAgbXlfbWFpbl9wdHIgbWFpbiA9IChteV9tYWluX3B0cikgY2luZm8tPm1haW47DQotICBKRElNRU5TSU9OIHJvd2dyb3Vwc19hdmFpbDsNCi0NCi0gIC8qIFJlYWQgaW5wdXQgZGF0YSBpZiB3ZSBoYXZlbid0IGZpbGxlZCB0aGUgbWFpbiBidWZmZXIgeWV0ICovDQotICBpZiAoISBtYWluLT5idWZmZXJfZnVsbCkgew0KLSAgICBpZiAoISAoKmNpbmZvLT5jb2VmLT5kZWNvbXByZXNzX2RhdGEpIChjaW5mbywgbWFpbi0+YnVmZmVyKSkNCi0gICAgICByZXR1cm47CQkJLyogc3VzcGVuc2lvbiBmb3JjZWQsIGNhbiBkbyBub3RoaW5nIG1vcmUgKi8NCi0gICAgbWFpbi0+YnVmZmVyX2Z1bGwgPSBUUlVFOwkvKiBPSywgd2UgaGF2ZSBhbiBpTUNVIHJvdyB0byB3b3JrIHdpdGggKi8NCi0gIH0NCi0NCi0gIC8qIFRoZXJlIGFyZSBhbHdheXMgbWluX0RDVF9zY2FsZWRfc2l6ZSByb3cgZ3JvdXBzIGluIGFuIGlNQ1Ugcm93LiAqLw0KLSAgcm93Z3JvdXBzX2F2YWlsID0gKEpESU1FTlNJT04pIGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplOw0KLSAgLyogTm90ZTogYXQgdGhlIGJvdHRvbSBvZiB0aGUgaW1hZ2UsIHdlIG1heSBwYXNzIGV4dHJhIGdhcmJhZ2Ugcm93IGdyb3Vwcw0KLSAgICogdG8gdGhlIHBvc3Rwcm9jZXNzb3IuICBUaGUgcG9zdHByb2Nlc3NvciBoYXMgdG8gY2hlY2sgZm9yIGJvdHRvbQ0KLSAgICogb2YgaW1hZ2UgYW55d2F5IChhdCByb3cgcmVzb2x1dGlvbiksIHNvIG5vIHBvaW50IGluIHVzIGRvaW5nIGl0IHRvby4NCi0gICAqLw0KLQ0KLSAgLyogRmVlZCB0aGUgcG9zdHByb2Nlc3NvciAqLw0KLSAgKCpjaW5mby0+cG9zdC0+cG9zdF9wcm9jZXNzX2RhdGEpIChjaW5mbywgbWFpbi0+YnVmZmVyLA0KLQkJCQkgICAgICZtYWluLT5yb3dncm91cF9jdHIsIHJvd2dyb3Vwc19hdmFpbCwNCi0JCQkJICAgICBvdXRwdXRfYnVmLCBvdXRfcm93X2N0ciwgb3V0X3Jvd3NfYXZhaWwpOw0KLQ0KLSAgLyogSGFzIHBvc3Rwcm9jZXNzb3IgY29uc3VtZWQgYWxsIHRoZSBkYXRhIHlldD8gSWYgc28sIG1hcmsgYnVmZmVyIGVtcHR5ICovDQotICBpZiAobWFpbi0+cm93Z3JvdXBfY3RyID49IHJvd2dyb3Vwc19hdmFpbCkgew0KLSAgICBtYWluLT5idWZmZXJfZnVsbCA9IEZBTFNFOw0KLSAgICBtYWluLT5yb3dncm91cF9jdHIgPSAwOw0KLSAgfQ0KLX0NCi0NCi0NCi0vKg0KLSAqIFByb2Nlc3Mgc29tZSBkYXRhLg0KLSAqIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSBjb250ZXh0IHJvd3MgbXVzdCBiZSBwcm92aWRlZC4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1wcm9jZXNzX2RhdGFfY29udGV4dF9tYWluIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCSAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsDQotCQkJICAgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkNCi17DQotICBteV9tYWluX3B0ciBtYWluID0gKG15X21haW5fcHRyKSBjaW5mby0+bWFpbjsNCi0NCi0gIC8qIFJlYWQgaW5wdXQgZGF0YSBpZiB3ZSBoYXZlbid0IGZpbGxlZCB0aGUgbWFpbiBidWZmZXIgeWV0ICovDQotICBpZiAoISBtYWluLT5idWZmZXJfZnVsbCkgew0KLSAgICBpZiAoISAoKmNpbmZvLT5jb2VmLT5kZWNvbXByZXNzX2RhdGEpIChjaW5mbywNCi0JCQkJCSAgIG1haW4tPnhidWZmZXJbbWFpbi0+d2hpY2hwdHJdKSkNCi0gICAgICByZXR1cm47CQkJLyogc3VzcGVuc2lvbiBmb3JjZWQsIGNhbiBkbyBub3RoaW5nIG1vcmUgKi8NCi0gICAgbWFpbi0+YnVmZmVyX2Z1bGwgPSBUUlVFOwkvKiBPSywgd2UgaGF2ZSBhbiBpTUNVIHJvdyB0byB3b3JrIHdpdGggKi8NCi0gICAgbWFpbi0+aU1DVV9yb3dfY3RyKys7CS8qIGNvdW50IHJvd3MgcmVjZWl2ZWQgKi8NCi0gIH0NCi0NCi0gIC8qIFBvc3Rwcm9jZXNzb3IgdHlwaWNhbGx5IHdpbGwgbm90IHN3YWxsb3cgYWxsIHRoZSBpbnB1dCBkYXRhIGl0IGlzIGhhbmRlZA0KLSAgICogaW4gb25lIGNhbGwgKGR1ZSB0byBmaWxsaW5nIHRoZSBvdXRwdXQgYnVmZmVyIGZpcnN0KS4gIE11c3QgYmUgcHJlcGFyZWQNCi0gICAqIHRvIGV4aXQgYW5kIHJlc3RhcnQuICBUaGlzIHN3aXRjaCBsZXRzIHVzIGtlZXAgdHJhY2sgb2YgaG93IGZhciB3ZSBnb3QuDQotICAgKiBOb3RlIHRoYXQgZWFjaCBjYXNlIGZhbGxzIHRocm91Z2ggdG8gdGhlIG5leHQgb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLg0KLSAgICovDQotICBzd2l0Y2ggKG1haW4tPmNvbnRleHRfc3RhdGUpIHsNCi0gIGNhc2UgQ1RYX1BPU1RQT05FRF9ST1c6DQotICAgIC8qIENhbGwgcG9zdHByb2Nlc3NvciB1c2luZyBwcmV2aW91c2x5IHNldCBwb2ludGVycyBmb3IgcG9zdHBvbmVkIHJvdyAqLw0KLSAgICAoKmNpbmZvLT5wb3N0LT5wb3N0X3Byb2Nlc3NfZGF0YSkgKGNpbmZvLCBtYWluLT54YnVmZmVyW21haW4tPndoaWNocHRyXSwNCi0JCQkmbWFpbi0+cm93Z3JvdXBfY3RyLCBtYWluLT5yb3dncm91cHNfYXZhaWwsDQotCQkJb3V0cHV0X2J1Ziwgb3V0X3Jvd19jdHIsIG91dF9yb3dzX2F2YWlsKTsNCi0gICAgaWYgKG1haW4tPnJvd2dyb3VwX2N0ciA8IG1haW4tPnJvd2dyb3Vwc19hdmFpbCkNCi0gICAgICByZXR1cm47CQkJLyogTmVlZCB0byBzdXNwZW5kICovDQotICAgIG1haW4tPmNvbnRleHRfc3RhdGUgPSBDVFhfUFJFUEFSRV9GT1JfSU1DVTsNCi0gICAgaWYgKCpvdXRfcm93X2N0ciA+PSBvdXRfcm93c19hdmFpbCkNCi0gICAgICByZXR1cm47CQkJLyogUG9zdHByb2Nlc3NvciBleGFjdGx5IGZpbGxlZCBvdXRwdXQgYnVmICovDQotICAgIC8qRkFMTFRIUk9VR0gqLw0KLSAgY2FzZSBDVFhfUFJFUEFSRV9GT1JfSU1DVToNCi0gICAgLyogUHJlcGFyZSB0byBwcm9jZXNzIGZpcnN0IE0tMSByb3cgZ3JvdXBzIG9mIHRoaXMgaU1DVSByb3cgKi8NCi0gICAgbWFpbi0+cm93Z3JvdXBfY3RyID0gMDsNCi0gICAgbWFpbi0+cm93Z3JvdXBzX2F2YWlsID0gKEpESU1FTlNJT04pIChjaW5mby0+bWluX0RDVF9zY2FsZWRfc2l6ZSAtIDEpOw0KLSAgICAvKiBDaGVjayBmb3IgYm90dG9tIG9mIGltYWdlOiBpZiBzbywgdHdlYWsgcG9pbnRlcnMgdG8gImR1cGxpY2F0ZSINCi0gICAgICogdGhlIGxhc3Qgc2FtcGxlIHJvdywgYW5kIGFkanVzdCByb3dncm91cHNfYXZhaWwgdG8gaWdub3JlIHBhZGRpbmcgcm93cy4NCi0gICAgICovDQotICAgIGlmIChtYWluLT5pTUNVX3Jvd19jdHIgPT0gY2luZm8tPnRvdGFsX2lNQ1Vfcm93cykNCi0gICAgICBzZXRfYm90dG9tX3BvaW50ZXJzKGNpbmZvKTsNCi0gICAgbWFpbi0+Y29udGV4dF9zdGF0ZSA9IENUWF9QUk9DRVNTX0lNQ1U7DQotICAgIC8qRkFMTFRIUk9VR0gqLw0KLSAgY2FzZSBDVFhfUFJPQ0VTU19JTUNVOg0KLSAgICAvKiBDYWxsIHBvc3Rwcm9jZXNzb3IgdXNpbmcgcHJldmlvdXNseSBzZXQgcG9pbnRlcnMgKi8NCi0gICAgKCpjaW5mby0+cG9zdC0+cG9zdF9wcm9jZXNzX2RhdGEpIChjaW5mbywgbWFpbi0+eGJ1ZmZlclttYWluLT53aGljaHB0cl0sDQotCQkJJm1haW4tPnJvd2dyb3VwX2N0ciwgbWFpbi0+cm93Z3JvdXBzX2F2YWlsLA0KLQkJCW91dHB1dF9idWYsIG91dF9yb3dfY3RyLCBvdXRfcm93c19hdmFpbCk7DQotICAgIGlmIChtYWluLT5yb3dncm91cF9jdHIgPCBtYWluLT5yb3dncm91cHNfYXZhaWwpDQotICAgICAgcmV0dXJuOwkJCS8qIE5lZWQgdG8gc3VzcGVuZCAqLw0KLSAgICAvKiBBZnRlciB0aGUgZmlyc3QgaU1DVSwgY2hhbmdlIHdyYXBhcm91bmQgcG9pbnRlcnMgdG8gbm9ybWFsIHN0YXRlICovDQotICAgIGlmIChtYWluLT5pTUNVX3Jvd19jdHIgPT0gMSkNCi0gICAgICBzZXRfd3JhcGFyb3VuZF9wb2ludGVycyhjaW5mbyk7DQotICAgIC8qIFByZXBhcmUgdG8gbG9hZCBuZXcgaU1DVSByb3cgdXNpbmcgb3RoZXIgeGJ1ZmZlciBsaXN0ICovDQotICAgIG1haW4tPndoaWNocHRyIF49IDE7CS8qIDA9PjEgb3IgMT0+MCAqLw0KLSAgICBtYWluLT5idWZmZXJfZnVsbCA9IEZBTFNFOw0KLSAgICAvKiBTdGlsbCBuZWVkIHRvIHByb2Nlc3MgbGFzdCByb3cgZ3JvdXAgb2YgdGhpcyBpTUNVIHJvdywgKi8NCi0gICAgLyogd2hpY2ggaXMgc2F2ZWQgYXQgaW5kZXggTSsxIG9mIHRoZSBvdGhlciB4YnVmZmVyICovDQotICAgIG1haW4tPnJvd2dyb3VwX2N0ciA9IChKRElNRU5TSU9OKSAoY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemUgKyAxKTsNCi0gICAgbWFpbi0+cm93Z3JvdXBzX2F2YWlsID0gKEpESU1FTlNJT04pIChjaW5mby0+bWluX0RDVF9zY2FsZWRfc2l6ZSArIDIpOw0KLSAgICBtYWluLT5jb250ZXh0X3N0YXRlID0gQ1RYX1BPU1RQT05FRF9ST1c7DQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogUHJvY2VzcyBzb21lIGRhdGEuDQotICogRmluYWwgcGFzcyBvZiB0d28tcGFzcyBxdWFudGl6YXRpb246IGp1c3QgY2FsbCB0aGUgcG9zdHByb2Nlc3Nvci4NCi0gKiBTb3VyY2UgZGF0YSB3aWxsIGJlIHRoZSBwb3N0cHJvY2Vzc29yIGNvbnRyb2xsZXIncyBpbnRlcm5hbCBidWZmZXIuDQotICovDQotDQotI2lmZGVmIFFVQU5UXzJQQVNTX1NVUFBPUlRFRA0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXByb2Nlc3NfZGF0YV9jcmFua19wb3N0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCSBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLA0KLQkJCSBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKQ0KLXsNCi0gICgqY2luZm8tPnBvc3QtPnBvc3RfcHJvY2Vzc19kYXRhKSAoY2luZm8sIChKU0FNUElNQUdFKSBOVUxMLA0KLQkJCQkgICAgIChKRElNRU5TSU9OICopIE5VTEwsIChKRElNRU5TSU9OKSAwLA0KLQkJCQkgICAgIG91dHB1dF9idWYsIG91dF9yb3dfY3RyLCBvdXRfcm93c19hdmFpbCk7DQotfQ0KLQ0KLSNlbmRpZiAvKiBRVUFOVF8yUEFTU19TVVBQT1JURUQgKi8NCi0NCi0NCi0vKg0KLSAqIEluaXRpYWxpemUgbWFpbiBidWZmZXIgY29udHJvbGxlci4NCi0gKi8NCi0NCi1HTE9CQUwodm9pZCkNCi1qaW5pdF9kX21haW5fY29udHJvbGxlciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBuZWVkX2Z1bGxfYnVmZmVyKQ0KLXsNCi0gIG15X21haW5fcHRyIG1haW47DQotICBpbnQgY2ksIHJncm91cCwgbmdyb3VwczsNCi0gIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7DQotDQotICBtYWluID0gKG15X21haW5fcHRyKQ0KLSAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQlTSVpFT0YobXlfbWFpbl9jb250cm9sbGVyKSk7DQotICBjaW5mby0+bWFpbiA9IChzdHJ1Y3QganBlZ19kX21haW5fY29udHJvbGxlciAqKSBtYWluOw0KLSAgbWFpbi0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX21haW47DQotDQotICBpZiAobmVlZF9mdWxsX2J1ZmZlcikJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8NCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOw0KLQ0KLSAgLyogQWxsb2NhdGUgdGhlIHdvcmtzcGFjZS4NCi0gICAqIG5ncm91cHMgaXMgdGhlIG51bWJlciBvZiByb3cgZ3JvdXBzIHdlIG5lZWQuDQotICAgKi8NCi0gIGlmIChjaW5mby0+dXBzYW1wbGUtPm5lZWRfY29udGV4dF9yb3dzKSB7DQotICAgIGlmIChjaW5mby0+bWluX0RDVF9zY2FsZWRfc2l6ZSA8IDIpIC8qIHVuc3VwcG9ydGVkLCBzZWUgY29tbWVudHMgYWJvdmUgKi8NCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVElNUEwpOw0KLSAgICBhbGxvY19mdW5ueV9wb2ludGVycyhjaW5mbyk7IC8qIEFsbG9jIHNwYWNlIGZvciB4YnVmZmVyW10gbGlzdHMgKi8NCi0gICAgbmdyb3VwcyA9IGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplICsgMjsNCi0gIH0gZWxzZSB7DQotICAgIG5ncm91cHMgPSBjaW5mby0+bWluX0RDVF9zY2FsZWRfc2l6ZTsNCi0gIH0NCi0NCi0gIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7DQotICAgICAgIGNpKyssIGNvbXBwdHIrKykgew0KLSAgICByZ3JvdXAgPSAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPkRDVF9zY2FsZWRfc2l6ZSkgLw0KLSAgICAgIGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplOyAvKiBoZWlnaHQgb2YgYSByb3cgZ3JvdXAgb2YgY29tcG9uZW50ICovDQotICAgIG1haW4tPmJ1ZmZlcltjaV0gPSAoKmNpbmZvLT5tZW0tPmFsbG9jX3NhcnJheSkNCi0JCQkoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemUsDQotCQkJIChKRElNRU5TSU9OKSAocmdyb3VwICogbmdyb3VwcykpOw0KLSAgfQ0KLX0NCi0NCi0jZW5kaWYgLy9fRlhfSlBFR19UVVJCT18NCisjaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQorLyoKKyAqIGpkbWFpbmN0LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbWFpbiBidWZmZXIgY29udHJvbGxlciBmb3IgZGVjb21wcmVzc2lvbi4KKyAqIFRoZSBtYWluIGJ1ZmZlciBsaWVzIGJldHdlZW4gdGhlIEpQRUcgZGVjb21wcmVzc29yIHByb3BlciBhbmQgdGhlCisgKiBwb3N0LXByb2Nlc3NvcjsgaXQgaG9sZHMgZG93bnNhbXBsZWQgZGF0YSBpbiB0aGUgSlBFRyBjb2xvcnNwYWNlLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGNvZGUgaXMgYnlwYXNzZWQgaW4gcmF3LWRhdGEgbW9kZSwgc2luY2UgdGhlIGFwcGxpY2F0aW9uCisgKiBzdXBwbGllcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgbWFpbiBidWZmZXIgaW4gdGhhdCBjYXNlLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKworCisvKgorICogSW4gdGhlIGN1cnJlbnQgc3lzdGVtIGRlc2lnbiwgdGhlIG1haW4gYnVmZmVyIG5lZWQgbmV2ZXIgYmUgYSBmdWxsLWltYWdlCisgKiBidWZmZXI7IGFueSBmdWxsLWhlaWdodCBidWZmZXJzIHdpbGwgYmUgZm91bmQgaW5zaWRlIHRoZSBjb2VmZmljaWVudCBvcgorICogcG9zdHByb2Nlc3NpbmcgY29udHJvbGxlcnMuICBOb25ldGhlbGVzcywgdGhlIG1haW4gY29udHJvbGxlciBpcyBub3QKKyAqIHRyaXZpYWwuICBJdHMgcmVzcG9uc2liaWxpdHkgaXMgdG8gcHJvdmlkZSBjb250ZXh0IHJvd3MgZm9yIHVwc2FtcGxpbmcvCisgKiByZXNjYWxpbmcsIGFuZCBkb2luZyB0aGlzIGluIGFuIGVmZmljaWVudCBmYXNoaW9uIGlzIGEgYml0IHRyaWNreS4KKyAqCisgKiBQb3N0cHJvY2Vzc29yIGlucHV0IGRhdGEgaXMgY291bnRlZCBpbiAicm93IGdyb3VwcyIuICBBIHJvdyBncm91cAorICogaXMgZGVmaW5lZCB0byBiZSAodl9zYW1wX2ZhY3RvciAqIERDVF9zY2FsZWRfc2l6ZSAvIG1pbl9EQ1Rfc2NhbGVkX3NpemUpCisgKiBzYW1wbGUgcm93cyBvZiBlYWNoIGNvbXBvbmVudC4gIChXZSByZXF1aXJlIERDVF9zY2FsZWRfc2l6ZSB2YWx1ZXMgdG8gYmUKKyAqIGNob3NlbiBzdWNoIHRoYXQgdGhlc2UgbnVtYmVycyBhcmUgaW50ZWdlcnMuICBJbiBwcmFjdGljZSBEQ1Rfc2NhbGVkX3NpemUKKyAqIHZhbHVlcyB3aWxsIGxpa2VseSBiZSBwb3dlcnMgb2YgdHdvLCBzbyB3ZSBhY3R1YWxseSBoYXZlIHRoZSBzdHJvbmdlcgorICogY29uZGl0aW9uIHRoYXQgRENUX3NjYWxlZF9zaXplIC8gbWluX0RDVF9zY2FsZWRfc2l6ZSBpcyBhbiBpbnRlZ2VyLikKKyAqIFVwc2FtcGxpbmcgd2lsbCB0eXBpY2FsbHkgcHJvZHVjZSBtYXhfdl9zYW1wX2ZhY3RvciBwaXhlbCByb3dzIGZyb20gZWFjaAorICogcm93IGdyb3VwICh0aW1lcyBhbnkgYWRkaXRpb25hbCBzY2FsZSBmYWN0b3IgdGhhdCB0aGUgdXBzYW1wbGVyIGlzCisgKiBhcHBseWluZykuCisgKgorICogVGhlIGNvZWZmaWNpZW50IGNvbnRyb2xsZXIgd2lsbCBkZWxpdmVyIGRhdGEgdG8gdXMgb25lIGlNQ1Ugcm93IGF0IGEgdGltZTsKKyAqIGVhY2ggaU1DVSByb3cgY29udGFpbnMgdl9zYW1wX2ZhY3RvciAqIERDVF9zY2FsZWRfc2l6ZSBzYW1wbGUgcm93cywgb3IKKyAqIGV4YWN0bHkgbWluX0RDVF9zY2FsZWRfc2l6ZSByb3cgZ3JvdXBzLiAgKFRoaXMgYW1vdW50IG9mIGRhdGEgY29ycmVzcG9uZHMKKyAqIHRvIG9uZSByb3cgb2YgTUNVcyB3aGVuIHRoZSBpbWFnZSBpcyBmdWxseSBpbnRlcmxlYXZlZC4pICBOb3RlIHRoYXQgdGhlCisgKiBudW1iZXIgb2Ygc2FtcGxlIHJvd3MgdmFyaWVzIGFjcm9zcyBjb21wb25lbnRzLCBidXQgdGhlIG51bWJlciBvZiByb3cKKyAqIGdyb3VwcyBkb2VzIG5vdC4gIFNvbWUgZ2FyYmFnZSBzYW1wbGUgcm93cyBtYXkgYmUgaW5jbHVkZWQgaW4gdGhlIGxhc3QgaU1DVQorICogcm93IGF0IHRoZSBib3R0b20gb2YgdGhlIGltYWdlLgorICoKKyAqIERlcGVuZGluZyBvbiB0aGUgdmVydGljYWwgc2NhbGluZyBhbGdvcml0aG0gdXNlZCwgdGhlIHVwc2FtcGxlciBtYXkgbmVlZAorICogYWNjZXNzIHRvIHRoZSBzYW1wbGUgcm93KHMpIGFib3ZlIGFuZCBiZWxvdyBpdHMgY3VycmVudCBpbnB1dCByb3cgZ3JvdXAuCisgKiBUaGUgdXBzYW1wbGVyIGlzIHJlcXVpcmVkIHRvIHNldCBuZWVkX2NvbnRleHRfcm93cyBUUlVFIGF0IGdsb2JhbCBzZWxlY3Rpb24KKyAqIHRpbWUgaWYgc28uICBXaGVuIG5lZWRfY29udGV4dF9yb3dzIGlzIEZBTFNFLCB0aGlzIGNvbnRyb2xsZXIgY2FuIHNpbXBseQorICogb2J0YWluIG9uZSBpTUNVIHJvdyBhdCBhIHRpbWUgZnJvbSB0aGUgY29lZmZpY2llbnQgY29udHJvbGxlciBhbmQgZG9sZSBpdAorICogb3V0IGFzIHJvdyBncm91cHMgdG8gdGhlIHBvc3Rwcm9jZXNzb3IuCisgKgorICogV2hlbiBuZWVkX2NvbnRleHRfcm93cyBpcyBUUlVFLCB0aGlzIGNvbnRyb2xsZXIgZ3VhcmFudGVlcyB0aGF0IHRoZSBidWZmZXIKKyAqIHBhc3NlZCB0byBwb3N0cHJvY2Vzc2luZyBjb250YWlucyBhdCBsZWFzdCBvbmUgcm93IGdyb3VwJ3Mgd29ydGggb2Ygc2FtcGxlcworICogYWJvdmUgYW5kIGJlbG93IHRoZSByb3cgZ3JvdXAocykgYmVpbmcgcHJvY2Vzc2VkLiAgTm90ZSB0aGF0IHRoZSBjb250ZXh0CisgKiByb3dzICJhYm92ZSIgdGhlIGZpcnN0IHBhc3NlZCByb3cgZ3JvdXAgYXBwZWFyIGF0IG5lZ2F0aXZlIHJvdyBvZmZzZXRzIGluCisgKiB0aGUgcGFzc2VkIGJ1ZmZlci4gIEF0IHRoZSB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgaW1hZ2UsIHRoZSByZXF1aXJlZAorICogY29udGV4dCByb3dzIGFyZSBtYW51ZmFjdHVyZWQgYnkgZHVwbGljYXRpbmcgdGhlIGZpcnN0IG9yIGxhc3QgcmVhbCBzYW1wbGUKKyAqIHJvdzsgdGhpcyBhdm9pZHMgaGF2aW5nIHNwZWNpYWwgY2FzZXMgaW4gdGhlIHVwc2FtcGxpbmcgaW5uZXIgbG9vcHMuCisgKgorICogVGhlIGFtb3VudCBvZiBjb250ZXh0IGlzIGZpeGVkIGF0IG9uZSByb3cgZ3JvdXAganVzdCBiZWNhdXNlIHRoYXQncyBhCisgKiBjb252ZW5pZW50IG51bWJlciBmb3IgdGhpcyBjb250cm9sbGVyIHRvIHdvcmsgd2l0aC4gIFRoZSBleGlzdGluZworICogdXBzYW1wbGVycyByZWFsbHkgb25seSBuZWVkIG9uZSBzYW1wbGUgcm93IG9mIGNvbnRleHQuICBBbiB1cHNhbXBsZXIKKyAqIHN1cHBvcnRpbmcgYXJiaXRyYXJ5IG91dHB1dCByZXNjYWxpbmcgbWlnaHQgd2lzaCBmb3IgbW9yZSB0aGFuIG9uZSByb3cKKyAqIGdyb3VwIG9mIGNvbnRleHQgd2hlbiBzaHJpbmtpbmcgdGhlIGltYWdlOyB0b3VnaCwgd2UgZG9uJ3QgaGFuZGxlIHRoYXQuCisgKiAoVGhpcyBpcyBqdXN0aWZpZWQgYnkgdGhlIGFzc3VtcHRpb24gdGhhdCBkb3duc2l6aW5nIHdpbGwgYmUgaGFuZGxlZCBtb3N0bHkKKyAqIGJ5IGFkanVzdGluZyB0aGUgRENUX3NjYWxlZF9zaXplIHZhbHVlcywgc28gdGhhdCB0aGUgYWN0dWFsIHNjYWxlIGZhY3RvciBhdAorICogdGhlIHVwc2FtcGxlIHN0ZXAgbmVlZG4ndCBiZSBtdWNoIGxlc3MgdGhhbiBvbmUuKQorICoKKyAqIFRvIHByb3ZpZGUgdGhlIGRlc2lyZWQgY29udGV4dCwgd2UgaGF2ZSB0byByZXRhaW4gdGhlIGxhc3QgdHdvIHJvdyBncm91cHMKKyAqIG9mIG9uZSBpTUNVIHJvdyB3aGlsZSByZWFkaW5nIGluIHRoZSBuZXh0IGlNQ1Ugcm93LiAgKFRoZSBsYXN0IHJvdyBncm91cAorICogY2FuJ3QgYmUgcHJvY2Vzc2VkIHVudGlsIHdlIGhhdmUgYW5vdGhlciByb3cgZ3JvdXAgZm9yIGl0cyBiZWxvdy1jb250ZXh0LAorICogYW5kIHNvIHdlIGhhdmUgdG8gc2F2ZSB0aGUgbmV4dC10by1sYXN0IGdyb3VwIHRvbyBmb3IgaXRzIGFib3ZlLWNvbnRleHQuKQorICogV2UgY291bGQgZG8gdGhpcyBtb3N0IHNpbXBseSBieSBjb3B5aW5nIGRhdGEgYXJvdW5kIGluIG91ciBidWZmZXIsIGJ1dAorICogdGhhdCdkIGJlIHZlcnkgc2xvdy4gIFdlIGNhbiBhdm9pZCBjb3B5aW5nIGFueSBkYXRhIGJ5IGNyZWF0aW5nIGEgcmF0aGVyCisgKiBzdHJhbmdlIHBvaW50ZXIgc3RydWN0dXJlLiAgSGVyZSdzIGhvdyBpdCB3b3Jrcy4gIFdlIGFsbG9jYXRlIGEgd29ya3NwYWNlCisgKiBjb25zaXN0aW5nIG9mIE0rMiByb3cgZ3JvdXBzICh3aGVyZSBNID0gbWluX0RDVF9zY2FsZWRfc2l6ZSBpcyB0aGUgbnVtYmVyCisgKiBvZiByb3cgZ3JvdXBzIHBlciBpTUNVIHJvdykuICBXZSBjcmVhdGUgdHdvIHNldHMgb2YgcmVkdW5kYW50IHBvaW50ZXJzIHRvCisgKiB0aGUgd29ya3NwYWNlLiAgTGFiZWxpbmcgdGhlIHBoeXNpY2FsIHJvdyBncm91cHMgMCB0byBNKzEsIHRoZSBzeW50aGVzaXplZAorICogcG9pbnRlciBsaXN0cyBsb29rIGxpa2UgdGhpczoKKyAqICAgICAgICAgICAgICAgICAgIE0rMSAgICAgICAgICAgICAgICAgICAgICAgICAgTS0xCisgKiBtYXN0ZXIgcG9pbnRlciAtLT4gMCAgICAgICAgIG1hc3RlciBwb2ludGVyIC0tPiAwCisgKiAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisgKiAgICAgICAgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorICogICAgICAgICAgICAgICAgICAgTS0zICAgICAgICAgICAgICAgICAgICAgICAgICBNLTMKKyAqICAgICAgICAgICAgICAgICAgIE0tMiAgICAgICAgICAgICAgICAgICAgICAgICAgIE0KKyAqICAgICAgICAgICAgICAgICAgIE0tMSAgICAgICAgICAgICAgICAgICAgICAgICAgTSsxCisgKiAgICAgICAgICAgICAgICAgICAgTSAgICAgICAgICAgICAgICAgICAgICAgICAgIE0tMgorICogICAgICAgICAgICAgICAgICAgTSsxICAgICAgICAgICAgICAgICAgICAgICAgICBNLTEKKyAqICAgICAgICAgICAgICAgICAgICAwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyAqIFdlIHJlYWQgYWx0ZXJuYXRlIGlNQ1Ugcm93cyB1c2luZyBlYWNoIG1hc3RlciBwb2ludGVyOyB0aHVzIHRoZSBsYXN0IHR3bworICogcm93IGdyb3VwcyBvZiB0aGUgcHJldmlvdXMgaU1DVSByb3cgcmVtYWluIHVuLW92ZXJ3cml0dGVuIGluIHRoZSB3b3Jrc3BhY2UuCisgKiBUaGUgcG9pbnRlciBsaXN0cyBhcmUgc2V0IHVwIHNvIHRoYXQgdGhlIHJlcXVpcmVkIGNvbnRleHQgcm93cyBhcHBlYXIgdG8KKyAqIGJlIGFkamFjZW50IHRvIHRoZSBwcm9wZXIgcGxhY2VzIHdoZW4gd2UgcGFzcyB0aGUgcG9pbnRlciBsaXN0cyB0byB0aGUKKyAqIHVwc2FtcGxlci4KKyAqCisgKiBUaGUgYWJvdmUgcGljdHVyZXMgZGVzY3JpYmUgdGhlIG5vcm1hbCBzdGF0ZSBvZiB0aGUgcG9pbnRlciBsaXN0cy4KKyAqIEF0IHRvcCBhbmQgYm90dG9tIG9mIHRoZSBpbWFnZSwgd2UgZGlkZGxlIHRoZSBwb2ludGVyIGxpc3RzIHRvIGR1cGxpY2F0ZQorICogdGhlIGZpcnN0IG9yIGxhc3Qgc2FtcGxlIHJvdyBhcyBuZWNlc3NhcnkgKHRoaXMgaXMgY2hlYXBlciB0aGFuIGNvcHlpbmcKKyAqIHNhbXBsZSByb3dzIGFyb3VuZCkuCisgKgorICogVGhpcyBzY2hlbWUgYnJlYWtzIGRvd24gaWYgTSA8IDIsIGllLCBtaW5fRENUX3NjYWxlZF9zaXplIGlzIDEuICBJbiB0aGF0CisgKiBzaXR1YXRpb24gZWFjaCBpTUNVIHJvdyBwcm92aWRlcyBvbmx5IG9uZSByb3cgZ3JvdXAgc28gdGhlIGJ1ZmZlcmluZyBsb2dpYworICogbXVzdCBiZSBkaWZmZXJlbnQgKGVnLCB3ZSBtdXN0IHJlYWQgdHdvIGlNQ1Ugcm93cyBiZWZvcmUgd2UgY2FuIGVtaXQgdGhlCisgKiBmaXJzdCByb3cgZ3JvdXApLiAgRm9yIG5vdywgd2Ugc2ltcGx5IGRvIG5vdCBzdXBwb3J0IHByb3ZpZGluZyBjb250ZXh0CisgKiByb3dzIHdoZW4gbWluX0RDVF9zY2FsZWRfc2l6ZSBpcyAxLiAgVGhhdCBjb21iaW5hdGlvbiBzZWVtcyB1bmxpa2VseSB0bworICogYmUgd29ydGggcHJvdmlkaW5nIC0tLSBpZiBzb21lb25lIHdhbnRzIGEgMS84dGgtc2l6ZSBwcmV2aWV3LCB0aGV5IHByb2JhYmx5CisgKiB3YW50IGl0IHF1aWNrIGFuZCBkaXJ0eSwgc28gYSBjb250ZXh0LWZyZWUgdXBzYW1wbGVyIGlzIHN1ZmZpY2llbnQuCisgKi8KKworCisvKiBQcml2YXRlIGJ1ZmZlciBjb250cm9sbGVyIG9iamVjdCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX2RfbWFpbl9jb250cm9sbGVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLworCisgIC8qIFBvaW50ZXIgdG8gYWxsb2NhdGVkIHdvcmtzcGFjZSAoTSBvciBNKzIgcm93IGdyb3VwcykuICovCisgIEpTQU1QQVJSQVkgYnVmZmVyW01BWF9DT01QT05FTlRTXTsKKworICBib29sZWFuIGJ1ZmZlcl9mdWxsOwkJLyogSGF2ZSB3ZSBnb3R0ZW4gYW4gaU1DVSByb3cgZnJvbSBkZWNvZGVyPyAqLworICBKRElNRU5TSU9OIHJvd2dyb3VwX2N0cjsJLyogY291bnRzIHJvdyBncm91cHMgb3V0cHV0IHRvIHBvc3Rwcm9jZXNzb3IgKi8KKworICAvKiBSZW1haW5pbmcgZmllbGRzIGFyZSBvbmx5IHVzZWQgaW4gdGhlIGNvbnRleHQgY2FzZS4gKi8KKworICAvKiBUaGVzZSBhcmUgdGhlIG1hc3RlciBwb2ludGVycyB0byB0aGUgZnVubnktb3JkZXIgcG9pbnRlciBsaXN0cy4gKi8KKyAgSlNBTVBJTUFHRSB4YnVmZmVyWzJdOwkvKiBwb2ludGVycyB0byB3ZWlyZCBwb2ludGVyIGxpc3RzICovCisKKyAgaW50IHdoaWNocHRyOwkJCS8qIGluZGljYXRlcyB3aGljaCBwb2ludGVyIHNldCBpcyBub3cgaW4gdXNlICovCisgIGludCBjb250ZXh0X3N0YXRlOwkJLyogcHJvY2Vzc19kYXRhIHN0YXRlIG1hY2hpbmUgc3RhdHVzICovCisgIEpESU1FTlNJT04gcm93Z3JvdXBzX2F2YWlsOwkvKiByb3cgZ3JvdXBzIGF2YWlsYWJsZSB0byBwb3N0cHJvY2Vzc29yICovCisgIEpESU1FTlNJT04gaU1DVV9yb3dfY3RyOwkvKiBjb3VudHMgaU1DVSByb3dzIHRvIGRldGVjdCBpbWFnZSB0b3AvYm90ICovCit9IG15X21haW5fY29udHJvbGxlcjsKKwordHlwZWRlZiBteV9tYWluX2NvbnRyb2xsZXIgKiBteV9tYWluX3B0cjsKKworLyogY29udGV4dF9zdGF0ZSB2YWx1ZXM6ICovCisjZGVmaW5lIENUWF9QUkVQQVJFX0ZPUl9JTUNVCTAJLyogbmVlZCB0byBwcmVwYXJlIGZvciBNQ1Ugcm93ICovCisjZGVmaW5lIENUWF9QUk9DRVNTX0lNQ1UJMQkvKiBmZWVkaW5nIGlNQ1UgdG8gcG9zdHByb2Nlc3NvciAqLworI2RlZmluZSBDVFhfUE9TVFBPTkVEX1JPVwkyCS8qIGZlZWRpbmcgcG9zdHBvbmVkIHJvdyBncm91cCAqLworCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitNRVRIT0RERUYodm9pZCkgcHJvY2Vzc19kYXRhX3NpbXBsZV9tYWluCisJSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisJICAgICBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkpOworTUVUSE9EREVGKHZvaWQpIHByb2Nlc3NfZGF0YV9jb250ZXh0X21haW4KKwlKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKwkgICAgIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLCBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKSk7CisjaWZkZWYgUVVBTlRfMlBBU1NfU1VQUE9SVEVECitNRVRIT0RERUYodm9pZCkgcHJvY2Vzc19kYXRhX2NyYW5rX3Bvc3QKKwlKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKwkgICAgIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLCBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKSk7CisjZW5kaWYKKworCitMT0NBTCh2b2lkKQorYWxsb2NfZnVubnlfcG9pbnRlcnMgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCisvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGZ1bm55IHBvaW50ZXIgbGlzdHMuCisgKiBUaGlzIGlzIGRvbmUgb25seSBvbmNlLCBub3Qgb25jZSBwZXIgcGFzcy4KKyAqLworeworICBteV9tYWluX3B0ciBtYWluID0gKG15X21haW5fcHRyKSBjaW5mby0+bWFpbjsKKyAgaW50IGNpLCByZ3JvdXA7CisgIGludCBNID0gY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemU7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIEpTQU1QQVJSQVkgeGJ1ZjsKKworICAvKiBHZXQgdG9wLWxldmVsIHNwYWNlIGZvciBjb21wb25lbnQgYXJyYXkgcG9pbnRlcnMuCisgICAqIFdlIGFsbG9jIGJvdGggYXJyYXlzIHdpdGggb25lIGNhbGwgdG8gc2F2ZSBhIGZldyBjeWNsZXMuCisgICAqLworICBtYWluLT54YnVmZmVyWzBdID0gKEpTQU1QSU1BR0UpCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkJCQljaW5mby0+bnVtX2NvbXBvbmVudHMgKiAyICogU0laRU9GKEpTQU1QQVJSQVkpKTsKKyAgbWFpbi0+eGJ1ZmZlclsxXSA9IG1haW4tPnhidWZmZXJbMF0gKyBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisKKyAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKKyAgICByZ3JvdXAgPSAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPkRDVF9zY2FsZWRfc2l6ZSkgLworICAgICAgY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemU7IC8qIGhlaWdodCBvZiBhIHJvdyBncm91cCBvZiBjb21wb25lbnQgKi8KKyAgICAvKiBHZXQgc3BhY2UgZm9yIHBvaW50ZXIgbGlzdHMgLS0tIE0rNCByb3cgZ3JvdXBzIGluIGVhY2ggbGlzdC4KKyAgICAgKiBXZSBhbGxvYyBib3RoIHBvaW50ZXIgbGlzdHMgd2l0aCBvbmUgY2FsbCB0byBzYXZlIGEgZmV3IGN5Y2xlcy4KKyAgICAgKi8KKyAgICB4YnVmID0gKEpTQU1QQVJSQVkpCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCSAgMiAqIChyZ3JvdXAgKiAoTSArIDQpKSAqIFNJWkVPRihKU0FNUFJPVykpOworICAgIHhidWYgKz0gcmdyb3VwOwkJLyogd2FudCBvbmUgcm93IGdyb3VwIGF0IG5lZ2F0aXZlIG9mZnNldHMgKi8KKyAgICBtYWluLT54YnVmZmVyWzBdW2NpXSA9IHhidWY7CisgICAgeGJ1ZiArPSByZ3JvdXAgKiAoTSArIDQpOworICAgIG1haW4tPnhidWZmZXJbMV1bY2ldID0geGJ1ZjsKKyAgfQorfQorCisKK0xPQ0FMKHZvaWQpCittYWtlX2Z1bm55X3BvaW50ZXJzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorLyogQ3JlYXRlIHRoZSBmdW5ueSBwb2ludGVyIGxpc3RzIGRpc2N1c3NlZCBpbiB0aGUgY29tbWVudHMgYWJvdmUuCisgKiBUaGUgYWN0dWFsIHdvcmtzcGFjZSBpcyBhbHJlYWR5IGFsbG9jYXRlZCAoaW4gbWFpbi0+YnVmZmVyKSwKKyAqIGFuZCB0aGUgc3BhY2UgZm9yIHRoZSBwb2ludGVyIGxpc3RzIGlzIGFsbG9jYXRlZCB0b28uCisgKiBUaGlzIHJvdXRpbmUganVzdCBmaWxscyBpbiB0aGUgY3VyaW91c2x5IG9yZGVyZWQgbGlzdHMuCisgKiBUaGlzIHdpbGwgYmUgcmVwZWF0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHBhc3MuCisgKi8KK3sKKyAgbXlfbWFpbl9wdHIgbWFpbiA9IChteV9tYWluX3B0cikgY2luZm8tPm1haW47CisgIGludCBjaSwgaSwgcmdyb3VwOworICBpbnQgTSA9IGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworICBKU0FNUEFSUkFZIGJ1ZiwgeGJ1ZjAsIHhidWYxOworCisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgcmdyb3VwID0gKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemUpIC8KKyAgICAgIGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplOyAvKiBoZWlnaHQgb2YgYSByb3cgZ3JvdXAgb2YgY29tcG9uZW50ICovCisgICAgeGJ1ZjAgPSBtYWluLT54YnVmZmVyWzBdW2NpXTsKKyAgICB4YnVmMSA9IG1haW4tPnhidWZmZXJbMV1bY2ldOworICAgIC8qIEZpcnN0IGNvcHkgdGhlIHdvcmtzcGFjZSBwb2ludGVycyBhcy1pcyAqLworICAgIGJ1ZiA9IG1haW4tPmJ1ZmZlcltjaV07CisgICAgZm9yIChpID0gMDsgaSA8IHJncm91cCAqIChNICsgMik7IGkrKykgeworICAgICAgeGJ1ZjBbaV0gPSB4YnVmMVtpXSA9IGJ1ZltpXTsKKyAgICB9CisgICAgLyogSW4gdGhlIHNlY29uZCBsaXN0LCBwdXQgdGhlIGxhc3QgZm91ciByb3cgZ3JvdXBzIGluIHN3YXBwZWQgb3JkZXIgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgcmdyb3VwICogMjsgaSsrKSB7CisgICAgICB4YnVmMVtyZ3JvdXAqKE0tMikgKyBpXSA9IGJ1ZltyZ3JvdXAqTSArIGldOworICAgICAgeGJ1ZjFbcmdyb3VwKk0gKyBpXSA9IGJ1ZltyZ3JvdXAqKE0tMikgKyBpXTsKKyAgICB9CisgICAgLyogVGhlIHdyYXBhcm91bmQgcG9pbnRlcnMgYXQgdG9wIGFuZCBib3R0b20gd2lsbCBiZSBmaWxsZWQgbGF0ZXIKKyAgICAgKiAoc2VlIHNldF93cmFwYXJvdW5kX3BvaW50ZXJzLCBiZWxvdykuICBJbml0aWFsbHkgd2Ugd2FudCB0aGUgImFib3ZlIgorICAgICAqIHBvaW50ZXJzIHRvIGR1cGxpY2F0ZSB0aGUgZmlyc3QgYWN0dWFsIGRhdGEgbGluZS4gIFRoaXMgb25seSBuZWVkcworICAgICAqIHRvIGhhcHBlbiBpbiB4YnVmZmVyWzBdLgorICAgICAqLworICAgIGZvciAoaSA9IDA7IGkgPCByZ3JvdXA7IGkrKykgeworICAgICAgeGJ1ZjBbaSAtIHJncm91cF0gPSB4YnVmMFswXTsKKyAgICB9CisgIH0KK30KKworCitMT0NBTCh2b2lkKQorc2V0X3dyYXBhcm91bmRfcG9pbnRlcnMgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCisvKiBTZXQgdXAgdGhlICJ3cmFwYXJvdW5kIiBwb2ludGVycyBhdCB0b3AgYW5kIGJvdHRvbSBvZiB0aGUgcG9pbnRlciBsaXN0cy4KKyAqIFRoaXMgY2hhbmdlcyB0aGUgcG9pbnRlciBsaXN0IHN0YXRlIGZyb20gdG9wLW9mLWltYWdlIHRvIHRoZSBub3JtYWwgc3RhdGUuCisgKi8KK3sKKyAgbXlfbWFpbl9wdHIgbWFpbiA9IChteV9tYWluX3B0cikgY2luZm8tPm1haW47CisgIGludCBjaSwgaSwgcmdyb3VwOworICBpbnQgTSA9IGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworICBKU0FNUEFSUkFZIHhidWYwLCB4YnVmMTsKKworICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOworICAgICAgIGNpKyssIGNvbXBwdHIrKykgeworICAgIHJncm91cCA9IChjb21wcHRyLT52X3NhbXBfZmFjdG9yICogY29tcHB0ci0+RENUX3NjYWxlZF9zaXplKSAvCisgICAgICBjaW5mby0+bWluX0RDVF9zY2FsZWRfc2l6ZTsgLyogaGVpZ2h0IG9mIGEgcm93IGdyb3VwIG9mIGNvbXBvbmVudCAqLworICAgIHhidWYwID0gbWFpbi0+eGJ1ZmZlclswXVtjaV07CisgICAgeGJ1ZjEgPSBtYWluLT54YnVmZmVyWzFdW2NpXTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgcmdyb3VwOyBpKyspIHsKKyAgICAgIHhidWYwW2kgLSByZ3JvdXBdID0geGJ1ZjBbcmdyb3VwKihNKzEpICsgaV07CisgICAgICB4YnVmMVtpIC0gcmdyb3VwXSA9IHhidWYxW3Jncm91cCooTSsxKSArIGldOworICAgICAgeGJ1ZjBbcmdyb3VwKihNKzIpICsgaV0gPSB4YnVmMFtpXTsKKyAgICAgIHhidWYxW3Jncm91cCooTSsyKSArIGldID0geGJ1ZjFbaV07CisgICAgfQorICB9Cit9CisKKworTE9DQUwodm9pZCkKK3NldF9ib3R0b21fcG9pbnRlcnMgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCisvKiBDaGFuZ2UgdGhlIHBvaW50ZXIgbGlzdHMgdG8gZHVwbGljYXRlIHRoZSBsYXN0IHNhbXBsZSByb3cgYXQgdGhlIGJvdHRvbQorICogb2YgdGhlIGltYWdlLiAgd2hpY2hwdHIgaW5kaWNhdGVzIHdoaWNoIHhidWZmZXIgaG9sZHMgdGhlIGZpbmFsIGlNQ1Ugcm93LgorICogQWxzbyBzZXRzIHJvd2dyb3Vwc19hdmFpbCB0byBpbmRpY2F0ZSBudW1iZXIgb2Ygbm9uZHVtbXkgcm93IGdyb3VwcyBpbiByb3cuCisgKi8KK3sKKyAgbXlfbWFpbl9wdHIgbWFpbiA9IChteV9tYWluX3B0cikgY2luZm8tPm1haW47CisgIGludCBjaSwgaSwgcmdyb3VwLCBpTUNVaGVpZ2h0LCByb3dzX2xlZnQ7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CisgIEpTQU1QQVJSQVkgeGJ1ZjsKKworICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOworICAgICAgIGNpKyssIGNvbXBwdHIrKykgeworICAgIC8qIENvdW50IHNhbXBsZSByb3dzIGluIG9uZSBpTUNVIHJvdyBhbmQgaW4gb25lIHJvdyBncm91cCAqLworICAgIGlNQ1VoZWlnaHQgPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yICogY29tcHB0ci0+RENUX3NjYWxlZF9zaXplOworICAgIHJncm91cCA9IGlNQ1VoZWlnaHQgLyBjaW5mby0+bWluX0RDVF9zY2FsZWRfc2l6ZTsKKyAgICAvKiBDb3VudCBub25kdW1teSBzYW1wbGUgcm93cyByZW1haW5pbmcgZm9yIHRoaXMgY29tcG9uZW50ICovCisgICAgcm93c19sZWZ0ID0gKGludCkgKGNvbXBwdHItPmRvd25zYW1wbGVkX2hlaWdodCAlIChKRElNRU5TSU9OKSBpTUNVaGVpZ2h0KTsKKyAgICBpZiAocm93c19sZWZ0ID09IDApIHJvd3NfbGVmdCA9IGlNQ1VoZWlnaHQ7CisgICAgLyogQ291bnQgbm9uZHVtbXkgcm93IGdyb3Vwcy4gIFNob3VsZCBnZXQgc2FtZSBhbnN3ZXIgZm9yIGVhY2ggY29tcG9uZW50LAorICAgICAqIHNvIHdlIG5lZWQgb25seSBkbyBpdCBvbmNlLgorICAgICAqLworICAgIGlmIChjaSA9PSAwKSB7CisgICAgICBtYWluLT5yb3dncm91cHNfYXZhaWwgPSAoSkRJTUVOU0lPTikgKChyb3dzX2xlZnQtMSkgLyByZ3JvdXAgKyAxKTsKKyAgICB9CisgICAgLyogRHVwbGljYXRlIHRoZSBsYXN0IHJlYWwgc2FtcGxlIHJvdyByZ3JvdXAqMiB0aW1lczsgdGhpcyBwYWRzIG91dCB0aGUKKyAgICAgKiBsYXN0IHBhcnRpYWwgcm93Z3JvdXAgYW5kIGVuc3VyZXMgYXQgbGVhc3Qgb25lIGZ1bGwgcm93Z3JvdXAgb2YgY29udGV4dC4KKyAgICAgKi8KKyAgICB4YnVmID0gbWFpbi0+eGJ1ZmZlclttYWluLT53aGljaHB0cl1bY2ldOworICAgIGZvciAoaSA9IDA7IGkgPCByZ3JvdXAgKiAyOyBpKyspIHsKKyAgICAgIHhidWZbcm93c19sZWZ0ICsgaV0gPSB4YnVmW3Jvd3NfbGVmdC0xXTsKKyAgICB9CisgIH0KK30KKworCisvKgorICogSW5pdGlhbGl6ZSBmb3IgYSBwcm9jZXNzaW5nIHBhc3MuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9wYXNzX21haW4gKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpfQlVGX01PREUgcGFzc19tb2RlKQoreworICBteV9tYWluX3B0ciBtYWluID0gKG15X21haW5fcHRyKSBjaW5mby0+bWFpbjsKKworICBzd2l0Y2ggKHBhc3NfbW9kZSkgeworICBjYXNlIEpCVUZfUEFTU19USFJVOgorICAgIGlmIChjaW5mby0+dXBzYW1wbGUtPm5lZWRfY29udGV4dF9yb3dzKSB7CisgICAgICBtYWluLT5wdWIucHJvY2Vzc19kYXRhID0gcHJvY2Vzc19kYXRhX2NvbnRleHRfbWFpbjsKKyAgICAgIG1ha2VfZnVubnlfcG9pbnRlcnMoY2luZm8pOyAvKiBDcmVhdGUgdGhlIHhidWZmZXJbXSBsaXN0cyAqLworICAgICAgbWFpbi0+d2hpY2hwdHIgPSAwOwkvKiBSZWFkIGZpcnN0IGlNQ1Ugcm93IGludG8geGJ1ZmZlclswXSAqLworICAgICAgbWFpbi0+Y29udGV4dF9zdGF0ZSA9IENUWF9QUkVQQVJFX0ZPUl9JTUNVOworICAgICAgbWFpbi0+aU1DVV9yb3dfY3RyID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgLyogU2ltcGxlIGNhc2Ugd2l0aCBubyBjb250ZXh0IG5lZWRlZCAqLworICAgICAgbWFpbi0+cHViLnByb2Nlc3NfZGF0YSA9IHByb2Nlc3NfZGF0YV9zaW1wbGVfbWFpbjsKKyAgICB9CisgICAgbWFpbi0+YnVmZmVyX2Z1bGwgPSBGQUxTRTsJLyogTWFyayBidWZmZXIgZW1wdHkgKi8KKyAgICBtYWluLT5yb3dncm91cF9jdHIgPSAwOworICAgIGJyZWFrOworI2lmZGVmIFFVQU5UXzJQQVNTX1NVUFBPUlRFRAorICBjYXNlIEpCVUZfQ1JBTktfREVTVDoKKyAgICAvKiBGb3IgbGFzdCBwYXNzIG9mIDItcGFzcyBxdWFudGl6YXRpb24sIGp1c3QgY3JhbmsgdGhlIHBvc3Rwcm9jZXNzb3IgKi8KKyAgICBtYWluLT5wdWIucHJvY2Vzc19kYXRhID0gcHJvY2Vzc19kYXRhX2NyYW5rX3Bvc3Q7CisgICAgYnJlYWs7CisjZW5kaWYKKyAgZGVmYXVsdDoKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7CisgICAgYnJlYWs7CisgIH0KK30KKworCisvKgorICogUHJvY2VzcyBzb21lIGRhdGEuCisgKiBUaGlzIGhhbmRsZXMgdGhlIHNpbXBsZSBjYXNlIHdoZXJlIG5vIGNvbnRleHQgaXMgcmVxdWlyZWQuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitwcm9jZXNzX2RhdGFfc2ltcGxlX21haW4gKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisJCQkgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCisJCQkgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpCit7CisgIG15X21haW5fcHRyIG1haW4gPSAobXlfbWFpbl9wdHIpIGNpbmZvLT5tYWluOworICBKRElNRU5TSU9OIHJvd2dyb3Vwc19hdmFpbDsKKworICAvKiBSZWFkIGlucHV0IGRhdGEgaWYgd2UgaGF2ZW4ndCBmaWxsZWQgdGhlIG1haW4gYnVmZmVyIHlldCAqLworICBpZiAoISBtYWluLT5idWZmZXJfZnVsbCkgeworICAgIGlmICghICgqY2luZm8tPmNvZWYtPmRlY29tcHJlc3NfZGF0YSkgKGNpbmZvLCBtYWluLT5idWZmZXIpKQorICAgICAgcmV0dXJuOwkJCS8qIHN1c3BlbnNpb24gZm9yY2VkLCBjYW4gZG8gbm90aGluZyBtb3JlICovCisgICAgbWFpbi0+YnVmZmVyX2Z1bGwgPSBUUlVFOwkvKiBPSywgd2UgaGF2ZSBhbiBpTUNVIHJvdyB0byB3b3JrIHdpdGggKi8KKyAgfQorCisgIC8qIFRoZXJlIGFyZSBhbHdheXMgbWluX0RDVF9zY2FsZWRfc2l6ZSByb3cgZ3JvdXBzIGluIGFuIGlNQ1Ugcm93LiAqLworICByb3dncm91cHNfYXZhaWwgPSAoSkRJTUVOU0lPTikgY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemU7CisgIC8qIE5vdGU6IGF0IHRoZSBib3R0b20gb2YgdGhlIGltYWdlLCB3ZSBtYXkgcGFzcyBleHRyYSBnYXJiYWdlIHJvdyBncm91cHMKKyAgICogdG8gdGhlIHBvc3Rwcm9jZXNzb3IuICBUaGUgcG9zdHByb2Nlc3NvciBoYXMgdG8gY2hlY2sgZm9yIGJvdHRvbQorICAgKiBvZiBpbWFnZSBhbnl3YXkgKGF0IHJvdyByZXNvbHV0aW9uKSwgc28gbm8gcG9pbnQgaW4gdXMgZG9pbmcgaXQgdG9vLgorICAgKi8KKworICAvKiBGZWVkIHRoZSBwb3N0cHJvY2Vzc29yICovCisgICgqY2luZm8tPnBvc3QtPnBvc3RfcHJvY2Vzc19kYXRhKSAoY2luZm8sIG1haW4tPmJ1ZmZlciwKKwkJCQkgICAgICZtYWluLT5yb3dncm91cF9jdHIsIHJvd2dyb3Vwc19hdmFpbCwKKwkJCQkgICAgIG91dHB1dF9idWYsIG91dF9yb3dfY3RyLCBvdXRfcm93c19hdmFpbCk7CisKKyAgLyogSGFzIHBvc3Rwcm9jZXNzb3IgY29uc3VtZWQgYWxsIHRoZSBkYXRhIHlldD8gSWYgc28sIG1hcmsgYnVmZmVyIGVtcHR5ICovCisgIGlmIChtYWluLT5yb3dncm91cF9jdHIgPj0gcm93Z3JvdXBzX2F2YWlsKSB7CisgICAgbWFpbi0+YnVmZmVyX2Z1bGwgPSBGQUxTRTsKKyAgICBtYWluLT5yb3dncm91cF9jdHIgPSAwOworICB9Cit9CisKKworLyoKKyAqIFByb2Nlc3Mgc29tZSBkYXRhLgorICogVGhpcyBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIGNvbnRleHQgcm93cyBtdXN0IGJlIHByb3ZpZGVkLgorICovCisKK01FVEhPRERFRih2b2lkKQorcHJvY2Vzc19kYXRhX2NvbnRleHRfbWFpbiAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCSAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCisJCQkgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKQoreworICBteV9tYWluX3B0ciBtYWluID0gKG15X21haW5fcHRyKSBjaW5mby0+bWFpbjsKKworICAvKiBSZWFkIGlucHV0IGRhdGEgaWYgd2UgaGF2ZW4ndCBmaWxsZWQgdGhlIG1haW4gYnVmZmVyIHlldCAqLworICBpZiAoISBtYWluLT5idWZmZXJfZnVsbCkgeworICAgIGlmICghICgqY2luZm8tPmNvZWYtPmRlY29tcHJlc3NfZGF0YSkgKGNpbmZvLAorCQkJCQkgICBtYWluLT54YnVmZmVyW21haW4tPndoaWNocHRyXSkpCisgICAgICByZXR1cm47CQkJLyogc3VzcGVuc2lvbiBmb3JjZWQsIGNhbiBkbyBub3RoaW5nIG1vcmUgKi8KKyAgICBtYWluLT5idWZmZXJfZnVsbCA9IFRSVUU7CS8qIE9LLCB3ZSBoYXZlIGFuIGlNQ1Ugcm93IHRvIHdvcmsgd2l0aCAqLworICAgIG1haW4tPmlNQ1Vfcm93X2N0cisrOwkvKiBjb3VudCByb3dzIHJlY2VpdmVkICovCisgIH0KKworICAvKiBQb3N0cHJvY2Vzc29yIHR5cGljYWxseSB3aWxsIG5vdCBzd2FsbG93IGFsbCB0aGUgaW5wdXQgZGF0YSBpdCBpcyBoYW5kZWQKKyAgICogaW4gb25lIGNhbGwgKGR1ZSB0byBmaWxsaW5nIHRoZSBvdXRwdXQgYnVmZmVyIGZpcnN0KS4gIE11c3QgYmUgcHJlcGFyZWQKKyAgICogdG8gZXhpdCBhbmQgcmVzdGFydC4gIFRoaXMgc3dpdGNoIGxldHMgdXMga2VlcCB0cmFjayBvZiBob3cgZmFyIHdlIGdvdC4KKyAgICogTm90ZSB0aGF0IGVhY2ggY2FzZSBmYWxscyB0aHJvdWdoIHRvIHRoZSBuZXh0IG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKyAgICovCisgIHN3aXRjaCAobWFpbi0+Y29udGV4dF9zdGF0ZSkgeworICBjYXNlIENUWF9QT1NUUE9ORURfUk9XOgorICAgIC8qIENhbGwgcG9zdHByb2Nlc3NvciB1c2luZyBwcmV2aW91c2x5IHNldCBwb2ludGVycyBmb3IgcG9zdHBvbmVkIHJvdyAqLworICAgICgqY2luZm8tPnBvc3QtPnBvc3RfcHJvY2Vzc19kYXRhKSAoY2luZm8sIG1haW4tPnhidWZmZXJbbWFpbi0+d2hpY2hwdHJdLAorCQkJJm1haW4tPnJvd2dyb3VwX2N0ciwgbWFpbi0+cm93Z3JvdXBzX2F2YWlsLAorCQkJb3V0cHV0X2J1Ziwgb3V0X3Jvd19jdHIsIG91dF9yb3dzX2F2YWlsKTsKKyAgICBpZiAobWFpbi0+cm93Z3JvdXBfY3RyIDwgbWFpbi0+cm93Z3JvdXBzX2F2YWlsKQorICAgICAgcmV0dXJuOwkJCS8qIE5lZWQgdG8gc3VzcGVuZCAqLworICAgIG1haW4tPmNvbnRleHRfc3RhdGUgPSBDVFhfUFJFUEFSRV9GT1JfSU1DVTsKKyAgICBpZiAoKm91dF9yb3dfY3RyID49IG91dF9yb3dzX2F2YWlsKQorICAgICAgcmV0dXJuOwkJCS8qIFBvc3Rwcm9jZXNzb3IgZXhhY3RseSBmaWxsZWQgb3V0cHV0IGJ1ZiAqLworICAgIC8qRkFMTFRIUk9VR0gqLworICBjYXNlIENUWF9QUkVQQVJFX0ZPUl9JTUNVOgorICAgIC8qIFByZXBhcmUgdG8gcHJvY2VzcyBmaXJzdCBNLTEgcm93IGdyb3VwcyBvZiB0aGlzIGlNQ1Ugcm93ICovCisgICAgbWFpbi0+cm93Z3JvdXBfY3RyID0gMDsKKyAgICBtYWluLT5yb3dncm91cHNfYXZhaWwgPSAoSkRJTUVOU0lPTikgKGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplIC0gMSk7CisgICAgLyogQ2hlY2sgZm9yIGJvdHRvbSBvZiBpbWFnZTogaWYgc28sIHR3ZWFrIHBvaW50ZXJzIHRvICJkdXBsaWNhdGUiCisgICAgICogdGhlIGxhc3Qgc2FtcGxlIHJvdywgYW5kIGFkanVzdCByb3dncm91cHNfYXZhaWwgdG8gaWdub3JlIHBhZGRpbmcgcm93cy4KKyAgICAgKi8KKyAgICBpZiAobWFpbi0+aU1DVV9yb3dfY3RyID09IGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MpCisgICAgICBzZXRfYm90dG9tX3BvaW50ZXJzKGNpbmZvKTsKKyAgICBtYWluLT5jb250ZXh0X3N0YXRlID0gQ1RYX1BST0NFU1NfSU1DVTsKKyAgICAvKkZBTExUSFJPVUdIKi8KKyAgY2FzZSBDVFhfUFJPQ0VTU19JTUNVOgorICAgIC8qIENhbGwgcG9zdHByb2Nlc3NvciB1c2luZyBwcmV2aW91c2x5IHNldCBwb2ludGVycyAqLworICAgICgqY2luZm8tPnBvc3QtPnBvc3RfcHJvY2Vzc19kYXRhKSAoY2luZm8sIG1haW4tPnhidWZmZXJbbWFpbi0+d2hpY2hwdHJdLAorCQkJJm1haW4tPnJvd2dyb3VwX2N0ciwgbWFpbi0+cm93Z3JvdXBzX2F2YWlsLAorCQkJb3V0cHV0X2J1Ziwgb3V0X3Jvd19jdHIsIG91dF9yb3dzX2F2YWlsKTsKKyAgICBpZiAobWFpbi0+cm93Z3JvdXBfY3RyIDwgbWFpbi0+cm93Z3JvdXBzX2F2YWlsKQorICAgICAgcmV0dXJuOwkJCS8qIE5lZWQgdG8gc3VzcGVuZCAqLworICAgIC8qIEFmdGVyIHRoZSBmaXJzdCBpTUNVLCBjaGFuZ2Ugd3JhcGFyb3VuZCBwb2ludGVycyB0byBub3JtYWwgc3RhdGUgKi8KKyAgICBpZiAobWFpbi0+aU1DVV9yb3dfY3RyID09IDEpCisgICAgICBzZXRfd3JhcGFyb3VuZF9wb2ludGVycyhjaW5mbyk7CisgICAgLyogUHJlcGFyZSB0byBsb2FkIG5ldyBpTUNVIHJvdyB1c2luZyBvdGhlciB4YnVmZmVyIGxpc3QgKi8KKyAgICBtYWluLT53aGljaHB0ciBePSAxOwkvKiAwPT4xIG9yIDE9PjAgKi8KKyAgICBtYWluLT5idWZmZXJfZnVsbCA9IEZBTFNFOworICAgIC8qIFN0aWxsIG5lZWQgdG8gcHJvY2VzcyBsYXN0IHJvdyBncm91cCBvZiB0aGlzIGlNQ1Ugcm93LCAqLworICAgIC8qIHdoaWNoIGlzIHNhdmVkIGF0IGluZGV4IE0rMSBvZiB0aGUgb3RoZXIgeGJ1ZmZlciAqLworICAgIG1haW4tPnJvd2dyb3VwX2N0ciA9IChKRElNRU5TSU9OKSAoY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemUgKyAxKTsKKyAgICBtYWluLT5yb3dncm91cHNfYXZhaWwgPSAoSkRJTUVOU0lPTikgKGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplICsgMik7CisgICAgbWFpbi0+Y29udGV4dF9zdGF0ZSA9IENUWF9QT1NUUE9ORURfUk9XOworICB9Cit9CisKKworLyoKKyAqIFByb2Nlc3Mgc29tZSBkYXRhLgorICogRmluYWwgcGFzcyBvZiB0d28tcGFzcyBxdWFudGl6YXRpb246IGp1c3QgY2FsbCB0aGUgcG9zdHByb2Nlc3Nvci4KKyAqIFNvdXJjZSBkYXRhIHdpbGwgYmUgdGhlIHBvc3Rwcm9jZXNzb3IgY29udHJvbGxlcidzIGludGVybmFsIGJ1ZmZlci4KKyAqLworCisjaWZkZWYgUVVBTlRfMlBBU1NfU1VQUE9SVEVECisKK01FVEhPRERFRih2b2lkKQorcHJvY2Vzc19kYXRhX2NyYW5rX3Bvc3QgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisJCQkgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwKKwkJCSBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKQoreworICAoKmNpbmZvLT5wb3N0LT5wb3N0X3Byb2Nlc3NfZGF0YSkgKGNpbmZvLCAoSlNBTVBJTUFHRSkgTlVMTCwKKwkJCQkgICAgIChKRElNRU5TSU9OICopIE5VTEwsIChKRElNRU5TSU9OKSAwLAorCQkJCSAgICAgb3V0cHV0X2J1Ziwgb3V0X3Jvd19jdHIsIG91dF9yb3dzX2F2YWlsKTsKK30KKworI2VuZGlmIC8qIFFVQU5UXzJQQVNTX1NVUFBPUlRFRCAqLworCisKKy8qCisgKiBJbml0aWFsaXplIG1haW4gYnVmZmVyIGNvbnRyb2xsZXIuCisgKi8KKworR0xPQkFMKHZvaWQpCitqaW5pdF9kX21haW5fY29udHJvbGxlciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBuZWVkX2Z1bGxfYnVmZmVyKQoreworICBteV9tYWluX3B0ciBtYWluOworICBpbnQgY2ksIHJncm91cCwgbmdyb3VwczsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKworICBtYWluID0gKG15X21haW5fcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJU0laRU9GKG15X21haW5fY29udHJvbGxlcikpOworICBjaW5mby0+bWFpbiA9IChzdHJ1Y3QganBlZ19kX21haW5fY29udHJvbGxlciAqKSBtYWluOworICBtYWluLT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfbWFpbjsKKworICBpZiAobmVlZF9mdWxsX2J1ZmZlcikJCS8qIHNob3VsZG4ndCBoYXBwZW4gKi8KKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7CisKKyAgLyogQWxsb2NhdGUgdGhlIHdvcmtzcGFjZS4KKyAgICogbmdyb3VwcyBpcyB0aGUgbnVtYmVyIG9mIHJvdyBncm91cHMgd2UgbmVlZC4KKyAgICovCisgIGlmIChjaW5mby0+dXBzYW1wbGUtPm5lZWRfY29udGV4dF9yb3dzKSB7CisgICAgaWYgKGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplIDwgMikgLyogdW5zdXBwb3J0ZWQsIHNlZSBjb21tZW50cyBhYm92ZSAqLworICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RJTVBMKTsKKyAgICBhbGxvY19mdW5ueV9wb2ludGVycyhjaW5mbyk7IC8qIEFsbG9jIHNwYWNlIGZvciB4YnVmZmVyW10gbGlzdHMgKi8KKyAgICBuZ3JvdXBzID0gY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemUgKyAyOworICB9IGVsc2UgeworICAgIG5ncm91cHMgPSBjaW5mby0+bWluX0RDVF9zY2FsZWRfc2l6ZTsKKyAgfQorCisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgcmdyb3VwID0gKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemUpIC8KKyAgICAgIGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplOyAvKiBoZWlnaHQgb2YgYSByb3cgZ3JvdXAgb2YgY29tcG9uZW50ICovCisgICAgbWFpbi0+YnVmZmVyW2NpXSA9ICgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQorCQkJKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkJCSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemUsCisJCQkgKEpESU1FTlNJT04pIChyZ3JvdXAgKiBuZ3JvdXBzKSk7CisgIH0KK30KKworI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZG1hcmtlci5jIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamRtYXJrZXIuYwppbmRleCA2MGYyMTM5Li5iY2QwMTdmIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZG1hcmtlci5jCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pkbWFya2VyLmMKQEAgLTEsMTM5NiArMSwxMzk2IEBACi0jaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQ0KLS8qDQotICogamRtYXJrZXIuYw0KLSAqDQotICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTgsIFRob21hcyBHLiBMYW5lLg0KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuDQotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLg0KLSAqDQotICogVGhpcyBmaWxlIGNvbnRhaW5zIHJvdXRpbmVzIHRvIGRlY29kZSBKUEVHIGRhdGFzdHJlYW0gbWFya2Vycy4NCi0gKiBNb3N0IG9mIHRoZSBjb21wbGV4aXR5IGFyaXNlcyBmcm9tIG91ciBkZXNpcmUgdG8gc3VwcG9ydCBpbnB1dA0KLSAqIHN1c3BlbnNpb246IGlmIG5vdCBhbGwgb2YgdGhlIGRhdGEgZm9yIGEgbWFya2VyIGlzIGF2YWlsYWJsZSwNCi0gKiB3ZSBtdXN0IGV4aXQgYmFjayB0byB0aGUgYXBwbGljYXRpb24uICBPbiByZXN1bXB0aW9uLCB3ZSByZXByb2Nlc3MNCi0gKiB0aGUgbWFya2VyLg0KLSAqLw0KLQ0KLSNkZWZpbmUgSlBFR19JTlRFUk5BTFMNCi0jaW5jbHVkZSAiamluY2x1ZGUuaCINCi0jaW5jbHVkZSAianBlZ2xpYi5oIg0KLQ0KLQ0KLXR5cGVkZWYgZW51bSB7CQkJLyogSlBFRyBtYXJrZXIgY29kZXMgKi8NCi0gIE1fU09GMCAgPSAweGMwLA0KLSAgTV9TT0YxICA9IDB4YzEsDQotICBNX1NPRjIgID0gMHhjMiwNCi0gIE1fU09GMyAgPSAweGMzLA0KLSAgDQotICBNX1NPRjUgID0gMHhjNSwNCi0gIE1fU09GNiAgPSAweGM2LA0KLSAgTV9TT0Y3ICA9IDB4YzcsDQotICANCi0gIE1fSlBHICAgPSAweGM4LA0KLSAgTV9TT0Y5ICA9IDB4YzksDQotICBNX1NPRjEwID0gMHhjYSwNCi0gIE1fU09GMTEgPSAweGNiLA0KLSAgDQotICBNX1NPRjEzID0gMHhjZCwNCi0gIE1fU09GMTQgPSAweGNlLA0KLSAgTV9TT0YxNSA9IDB4Y2YsDQotICANCi0gIE1fREhUICAgPSAweGM0LA0KLSAgDQotICBNX0RBQyAgID0gMHhjYywNCi0gIA0KLSAgTV9SU1QwICA9IDB4ZDAsDQotICBNX1JTVDEgID0gMHhkMSwNCi0gIE1fUlNUMiAgPSAweGQyLA0KLSAgTV9SU1QzICA9IDB4ZDMsDQotICBNX1JTVDQgID0gMHhkNCwNCi0gIE1fUlNUNSAgPSAweGQ1LA0KLSAgTV9SU1Q2ICA9IDB4ZDYsDQotICBNX1JTVDcgID0gMHhkNywNCi0gIA0KLSAgTV9TT0kgICA9IDB4ZDgsDQotICBNX0VPSSAgID0gMHhkOSwNCi0gIE1fU09TICAgPSAweGRhLA0KLSAgTV9EUVQgICA9IDB4ZGIsDQotICBNX0ROTCAgID0gMHhkYywNCi0gIE1fRFJJICAgPSAweGRkLA0KLSAgTV9ESFAgICA9IDB4ZGUsDQotICBNX0VYUCAgID0gMHhkZiwNCi0gIA0KLSAgTV9BUFAwICA9IDB4ZTAsDQotICBNX0FQUDEgID0gMHhlMSwNCi0gIE1fQVBQMiAgPSAweGUyLA0KLSAgTV9BUFAzICA9IDB4ZTMsDQotICBNX0FQUDQgID0gMHhlNCwNCi0gIE1fQVBQNSAgPSAweGU1LA0KLSAgTV9BUFA2ICA9IDB4ZTYsDQotICBNX0FQUDcgID0gMHhlNywNCi0gIE1fQVBQOCAgPSAweGU4LA0KLSAgTV9BUFA5ICA9IDB4ZTksDQotICBNX0FQUDEwID0gMHhlYSwNCi0gIE1fQVBQMTEgPSAweGViLA0KLSAgTV9BUFAxMiA9IDB4ZWMsDQotICBNX0FQUDEzID0gMHhlZCwNCi0gIE1fQVBQMTQgPSAweGVlLA0KLSAgTV9BUFAxNSA9IDB4ZWYsDQotICANCi0gIE1fSlBHMCAgPSAweGYwLA0KLSAgTV9KUEcxMyA9IDB4ZmQsDQotICBNX0NPTSAgID0gMHhmZSwNCi0gIA0KLSAgTV9URU0gICA9IDB4MDEsDQotICANCi0gIE1fRVJST1IgPSAweDEwMA0KLX0gSlBFR19NQVJLRVI7DQotDQotDQotLyogUHJpdmF0ZSBzdGF0ZSAqLw0KLQ0KLXR5cGVkZWYgc3RydWN0IHsNCi0gIHN0cnVjdCBqcGVnX21hcmtlcl9yZWFkZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovDQotDQotICAvKiBBcHBsaWNhdGlvbi1vdmVycmlkYWJsZSBtYXJrZXIgcHJvY2Vzc2luZyBtZXRob2RzICovDQotICBqcGVnX21hcmtlcl9wYXJzZXJfbWV0aG9kIHByb2Nlc3NfQ09NOw0KLSAganBlZ19tYXJrZXJfcGFyc2VyX21ldGhvZCBwcm9jZXNzX0FQUG5bMTZdOw0KLQ0KLSAgLyogTGltaXQgb24gbWFya2VyIGRhdGEgbGVuZ3RoIHRvIHNhdmUgZm9yIGVhY2ggbWFya2VyIHR5cGUgKi8NCi0gIHVuc2lnbmVkIGludCBsZW5ndGhfbGltaXRfQ09NOw0KLSAgdW5zaWduZWQgaW50IGxlbmd0aF9saW1pdF9BUFBuWzE2XTsNCi0NCi0gIC8qIFN0YXR1cyBvZiBDT00vQVBQbiBtYXJrZXIgc2F2aW5nICovDQotICBqcGVnX3NhdmVkX21hcmtlcl9wdHIgY3VyX21hcmtlcjsJLyogTlVMTCBpZiBub3QgcHJvY2Vzc2luZyBhIG1hcmtlciAqLw0KLSAgdW5zaWduZWQgaW50IGJ5dGVzX3JlYWQ7CQkvKiBkYXRhIGJ5dGVzIHJlYWQgc28gZmFyIGluIG1hcmtlciAqLw0KLSAgLyogTm90ZTogY3VyX21hcmtlciBpcyBub3QgbGlua2VkIGludG8gbWFya2VyX2xpc3QgdW50aWwgaXQncyBhbGwgcmVhZC4gKi8NCi19IG15X21hcmtlcl9yZWFkZXI7DQotDQotdHlwZWRlZiBteV9tYXJrZXJfcmVhZGVyICogbXlfbWFya2VyX3B0cjsNCi0NCi0NCi0vKg0KLSAqIE1hY3JvcyBmb3IgZmV0Y2hpbmcgZGF0YSBmcm9tIHRoZSBkYXRhIHNvdXJjZSBtb2R1bGUuDQotICoNCi0gKiBBdCBhbGwgdGltZXMsIGNpbmZvLT5zcmMtPm5leHRfaW5wdXRfYnl0ZSBhbmQgLT5ieXRlc19pbl9idWZmZXIgcmVmbGVjdA0KLSAqIHRoZSBjdXJyZW50IHJlc3RhcnQgcG9pbnQ7IHdlIHVwZGF0ZSB0aGVtIG9ubHkgd2hlbiB3ZSBoYXZlIHJlYWNoZWQgYQ0KLSAqIHN1aXRhYmxlIHBsYWNlIHRvIHJlc3RhcnQgaWYgYSBzdXNwZW5zaW9uIG9jY3Vycy4NCi0gKi8NCi0NCi0vKiBEZWNsYXJlIGFuZCBpbml0aWFsaXplIGxvY2FsIGNvcGllcyBvZiBpbnB1dCBwb2ludGVyL2NvdW50ICovDQotI2RlZmluZSBJTlBVVF9WQVJTKGNpbmZvKSAgXA0KLQlzdHJ1Y3QganBlZ19zb3VyY2VfbWdyICogZGF0YXNyYyA9IChjaW5mbyktPnNyYzsgIFwNCi0JY29uc3QgSk9DVEVUICogbmV4dF9pbnB1dF9ieXRlID0gZGF0YXNyYy0+bmV4dF9pbnB1dF9ieXRlOyAgXA0KLQlzaXplX3QgYnl0ZXNfaW5fYnVmZmVyID0gZGF0YXNyYy0+Ynl0ZXNfaW5fYnVmZmVyDQotDQotLyogVW5sb2FkIHRoZSBsb2NhbCBjb3BpZXMgLS0tIGRvIHRoaXMgb25seSBhdCBhIHJlc3RhcnQgYm91bmRhcnkgKi8NCi0jZGVmaW5lIElOUFVUX1NZTkMoY2luZm8pICBcDQotCSggZGF0YXNyYy0+bmV4dF9pbnB1dF9ieXRlID0gbmV4dF9pbnB1dF9ieXRlLCAgXA0KLQkgIGRhdGFzcmMtPmJ5dGVzX2luX2J1ZmZlciA9IGJ5dGVzX2luX2J1ZmZlciApDQotDQotLyogUmVsb2FkIHRoZSBsb2NhbCBjb3BpZXMgLS0tIHVzZWQgb25seSBpbiBNQUtFX0JZVEVfQVZBSUwgKi8NCi0jZGVmaW5lIElOUFVUX1JFTE9BRChjaW5mbykgIFwNCi0JKCBuZXh0X2lucHV0X2J5dGUgPSBkYXRhc3JjLT5uZXh0X2lucHV0X2J5dGUsICBcDQotCSAgYnl0ZXNfaW5fYnVmZmVyID0gZGF0YXNyYy0+Ynl0ZXNfaW5fYnVmZmVyICkNCi0NCi0vKiBJbnRlcm5hbCBtYWNybyBmb3IgSU5QVVRfQllURSBhbmQgSU5QVVRfMkJZVEVTOiBtYWtlIGEgYnl0ZSBhdmFpbGFibGUuDQotICogTm90ZSB3ZSBkbyAqbm90KiBkbyBJTlBVVF9TWU5DIGJlZm9yZSBjYWxsaW5nIGZpbGxfaW5wdXRfYnVmZmVyLA0KLSAqIGJ1dCB3ZSBtdXN0IHJlbG9hZCB0aGUgbG9jYWwgY29waWVzIGFmdGVyIGEgc3VjY2Vzc2Z1bCBmaWxsLg0KLSAqLw0KLSNkZWZpbmUgTUFLRV9CWVRFX0FWQUlMKGNpbmZvLGFjdGlvbikgIFwNCi0JaWYgKGJ5dGVzX2luX2J1ZmZlciA9PSAwKSB7ICBcDQotCSAgaWYgKCEgKCpkYXRhc3JjLT5maWxsX2lucHV0X2J1ZmZlcikgKGNpbmZvKSkgIFwNCi0JICAgIHsgYWN0aW9uOyB9ICBcDQotCSAgSU5QVVRfUkVMT0FEKGNpbmZvKTsgIFwNCi0JfQ0KLQ0KLS8qIFJlYWQgYSBieXRlIGludG8gdmFyaWFibGUgVi4NCi0gKiBJZiBtdXN0IHN1c3BlbmQsIHRha2UgdGhlIHNwZWNpZmllZCBhY3Rpb24gKHR5cGljYWxseSAicmV0dXJuIEZBTFNFIikuDQotICovDQotI2RlZmluZSBJTlBVVF9CWVRFKGNpbmZvLFYsYWN0aW9uKSAgXA0KLQlNQUtFU1RNVCggTUFLRV9CWVRFX0FWQUlMKGNpbmZvLGFjdGlvbik7IFwNCi0JCSAgYnl0ZXNfaW5fYnVmZmVyLS07IFwNCi0JCSAgViA9IEdFVEpPQ1RFVCgqbmV4dF9pbnB1dF9ieXRlKyspOyApDQotDQotLyogQXMgYWJvdmUsIGJ1dCByZWFkIHR3byBieXRlcyBpbnRlcnByZXRlZCBhcyBhbiB1bnNpZ25lZCAxNi1iaXQgaW50ZWdlci4NCi0gKiBWIHNob3VsZCBiZSBkZWNsYXJlZCB1bnNpZ25lZCBpbnQgb3IgcGVyaGFwcyBJTlQzMi4NCi0gKi8NCi0jZGVmaW5lIElOUFVUXzJCWVRFUyhjaW5mbyxWLGFjdGlvbikgIFwNCi0JTUFLRVNUTVQoIE1BS0VfQllURV9BVkFJTChjaW5mbyxhY3Rpb24pOyBcDQotCQkgIGJ5dGVzX2luX2J1ZmZlci0tOyBcDQotCQkgIFYgPSAoKHVuc2lnbmVkIGludCkgR0VUSk9DVEVUKCpuZXh0X2lucHV0X2J5dGUrKykpIDw8IDg7IFwNCi0JCSAgTUFLRV9CWVRFX0FWQUlMKGNpbmZvLGFjdGlvbik7IFwNCi0JCSAgYnl0ZXNfaW5fYnVmZmVyLS07IFwNCi0JCSAgViArPSBHRVRKT0NURVQoKm5leHRfaW5wdXRfYnl0ZSsrKTsgKQ0KLQ0KLQ0KLS8qDQotICogUm91dGluZXMgdG8gcHJvY2VzcyBKUEVHIG1hcmtlcnMuDQotICoNCi0gKiBFbnRyeSBjb25kaXRpb246IEpQRUcgbWFya2VyIGl0c2VsZiBoYXMgYmVlbiByZWFkIGFuZCBpdHMgY29kZSBzYXZlZA0KLSAqICAgaW4gY2luZm8tPnVucmVhZF9tYXJrZXI7IGlucHV0IHJlc3RhcnQgcG9pbnQgaXMganVzdCBhZnRlciB0aGUgbWFya2VyLg0KLSAqDQotICogRXhpdDogaWYgcmV0dXJuIFRSVUUsIGhhdmUgcmVhZCBhbmQgcHJvY2Vzc2VkIGFueSBwYXJhbWV0ZXJzLCBhbmQgaGF2ZQ0KLSAqICAgdXBkYXRlZCB0aGUgcmVzdGFydCBwb2ludCB0byBwb2ludCBhZnRlciB0aGUgcGFyYW1ldGVycy4NCi0gKiAgIElmIHJldHVybiBGQUxTRSwgd2FzIGZvcmNlZCB0byBzdXNwZW5kIGJlZm9yZSByZWFjaGluZyBlbmQgb2YNCi0gKiAgIG1hcmtlciBwYXJhbWV0ZXJzOyByZXN0YXJ0IHBvaW50IGhhcyBub3QgYmVlbiBtb3ZlZC4gIFNhbWUgcm91dGluZQ0KLSAqICAgd2lsbCBiZSBjYWxsZWQgYWdhaW4gYWZ0ZXIgYXBwbGljYXRpb24gc3VwcGxpZXMgbW9yZSBpbnB1dCBkYXRhLg0KLSAqDQotICogVGhpcyBhcHByb2FjaCB0byBzdXNwZW5zaW9uIGFzc3VtZXMgdGhhdCBhbGwgb2YgYSBtYXJrZXIncyBwYXJhbWV0ZXJzDQotICogY2FuIGZpdCBpbnRvIGEgc2luZ2xlIGlucHV0IGJ1ZmZlcmxvYWQuICBUaGlzIHNob3VsZCBob2xkIGZvciAibm9ybWFsIg0KLSAqIG1hcmtlcnMuICBTb21lIENPTS9BUFBuIG1hcmtlcnMgbWlnaHQgaGF2ZSBsYXJnZSBwYXJhbWV0ZXIgc2VnbWVudHMNCi0gKiB0aGF0IG1pZ2h0IG5vdCBmaXQuICBJZiB3ZSBhcmUgc2ltcGx5IGRyb3BwaW5nIHN1Y2ggYSBtYXJrZXIsIHdlIHVzZQ0KLSAqIHNraXBfaW5wdXRfZGF0YSB0byBnZXQgcGFzdCBpdCwgYW5kIHRoZXJlYnkgcHV0IHRoZSBwcm9ibGVtIG9uIHRoZQ0KLSAqIHNvdXJjZSBtYW5hZ2VyJ3Mgc2hvdWxkZXJzLiAgSWYgd2UgYXJlIHNhdmluZyB0aGUgbWFya2VyJ3MgY29udGVudHMNCi0gKiBpbnRvIG1lbW9yeSwgd2UgdXNlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGNvbnZlbnRpb246IHdoZW4gZm9yY2VkIHRvDQotICogc3VzcGVuZCwgdGhlIG1hcmtlciBwcm9jZXNzb3IgdXBkYXRlcyB0aGUgcmVzdGFydCBwb2ludCB0byB0aGUgZW5kIG9mDQotICogd2hhdCBpdCdzIGNvbnN1bWVkIChpZSwgdGhlIGVuZCBvZiB0aGUgYnVmZmVyKSBiZWZvcmUgcmV0dXJuaW5nIEZBTFNFLg0KLSAqIE9uIHJlc3VtcHRpb24sIGNpbmZvLT51bnJlYWRfbWFya2VyIHN0aWxsIGNvbnRhaW5zIHRoZSBtYXJrZXIgY29kZSwNCi0gKiBidXQgdGhlIGRhdGEgc291cmNlIHdpbGwgcG9pbnQgdG8gdGhlIG5leHQgY2h1bmsgb2YgbWFya2VyIGRhdGEuDQotICogVGhlIG1hcmtlciBwcm9jZXNzb3IgbXVzdCByZXRhaW4gaW50ZXJuYWwgc3RhdGUgdG8gZGVhbCB3aXRoIHRoaXMuDQotICoNCi0gKiBOb3RlIHRoYXQgd2UgZG9uJ3QgYm90aGVyIHRvIGF2b2lkIGR1cGxpY2F0ZSB0cmFjZSBtZXNzYWdlcyBpZiBhDQotICogc3VzcGVuc2lvbiBvY2N1cnMgd2l0aGluIG1hcmtlciBwYXJhbWV0ZXJzLiAgT3RoZXIgc2lkZSBlZmZlY3RzDQotICogcmVxdWlyZSBtb3JlIGNhcmUuDQotICovDQotDQotDQotTE9DQUwoYm9vbGVhbikNCi1nZXRfc29pIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLS8qIFByb2Nlc3MgYW4gU09JIG1hcmtlciAqLw0KLXsNCi0gIGludCBpOw0KLSAgDQotICBUUkFDRU1TKGNpbmZvLCAxLCBKVFJDX1NPSSk7DQotDQotICBpZiAoY2luZm8tPm1hcmtlci0+c2F3X1NPSSkNCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9TT0lfRFVQTElDQVRFKTsNCi0NCi0gIC8qIFJlc2V0IGFsbCBwYXJhbWV0ZXJzIHRoYXQgYXJlIGRlZmluZWQgdG8gYmUgcmVzZXQgYnkgU09JICovDQotDQotICBmb3IgKGkgPSAwOyBpIDwgTlVNX0FSSVRIX1RCTFM7IGkrKykgew0KLSAgICBjaW5mby0+YXJpdGhfZGNfTFtpXSA9IDA7DQotICAgIGNpbmZvLT5hcml0aF9kY19VW2ldID0gMTsNCi0gICAgY2luZm8tPmFyaXRoX2FjX0tbaV0gPSA1Ow0KLSAgfQ0KLSAgY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwgPSAwOw0KLQ0KLSAgLyogU2V0IGluaXRpYWwgYXNzdW1wdGlvbnMgZm9yIGNvbG9yc3BhY2UgZXRjICovDQotDQotICBjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9IEpDU19VTktOT1dOOw0KLSAgY2luZm8tPkNDSVI2MDFfc2FtcGxpbmcgPSBGQUxTRTsgLyogQXNzdW1lIG5vbi1DQ0lSIHNhbXBsaW5nPz8/ICovDQotDQotICBjaW5mby0+c2F3X0pGSUZfbWFya2VyID0gRkFMU0U7DQotICBjaW5mby0+SkZJRl9tYWpvcl92ZXJzaW9uID0gMTsgLyogc2V0IGRlZmF1bHQgSkZJRiBBUFAwIHZhbHVlcyAqLw0KLSAgY2luZm8tPkpGSUZfbWlub3JfdmVyc2lvbiA9IDE7DQotICBjaW5mby0+ZGVuc2l0eV91bml0ID0gMDsNCi0gIGNpbmZvLT5YX2RlbnNpdHkgPSAxOw0KLSAgY2luZm8tPllfZGVuc2l0eSA9IDE7DQotICBjaW5mby0+c2F3X0Fkb2JlX21hcmtlciA9IEZBTFNFOw0KLSAgY2luZm8tPkFkb2JlX3RyYW5zZm9ybSA9IDA7DQotDQotICBjaW5mby0+bWFya2VyLT5zYXdfU09JID0gVFJVRTsNCi0NCi0gIHJldHVybiBUUlVFOw0KLX0NCi0NCi0NCi1MT0NBTChib29sZWFuKQ0KLWdldF9zb2YgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gaXNfcHJvZywgYm9vbGVhbiBpc19hcml0aCkNCi0vKiBQcm9jZXNzIGEgU09GbiBtYXJrZXIgKi8NCi17DQotICBJTlQzMiBsZW5ndGg7DQotICBpbnQgYywgY2k7DQotICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cjsNCi0gIC8qIExpdVN1bmxpYW5nIGFkZGVkIDIwMTExMjA5ICovDQotICBKRElNRU5TSU9OIGltYWdlX3dpZHRoLCBpbWFnZV9oZWlnaHQ7DQotICBJTlBVVF9WQVJTKGNpbmZvKTsNCi0NCi0gIGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlID0gaXNfcHJvZzsNCi0gIGNpbmZvLT5hcml0aF9jb2RlID0gaXNfYXJpdGg7DQotDQotICBJTlBVVF8yQllURVMoY2luZm8sIGxlbmd0aCwgcmV0dXJuIEZBTFNFKTsNCi0NCi0gIElOUFVUX0JZVEUoY2luZm8sIGNpbmZvLT5kYXRhX3ByZWNpc2lvbiwgcmV0dXJuIEZBTFNFKTsNCi0gIElOUFVUXzJCWVRFUyhjaW5mbywgaW1hZ2VfaGVpZ2h0LCByZXR1cm4gRkFMU0UpOw0KLSAgSU5QVVRfMkJZVEVTKGNpbmZvLCBpbWFnZV93aWR0aCwgcmV0dXJuIEZBTFNFKTsNCi0gIElOUFVUX0JZVEUoY2luZm8sIGNpbmZvLT5udW1fY29tcG9uZW50cywgcmV0dXJuIEZBTFNFKTsNCi0NCi0gIGlmIChpbWFnZV93aWR0aCA8PSBKUEVHX01BWF9ESU1FTlNJT04pDQotCSAgY2luZm8tPmltYWdlX3dpZHRoID0gaW1hZ2Vfd2lkdGg7DQotIA0KLSAgaWYgKGltYWdlX2hlaWdodCA8PSBKUEVHX01BWF9ESU1FTlNJT04pDQotCSAgY2luZm8tPmltYWdlX2hlaWdodCA9IGltYWdlX2hlaWdodDsNCi0NCi0gIGxlbmd0aCAtPSA4Ow0KLQ0KLSAgVFJBQ0VNUzQoY2luZm8sIDEsIEpUUkNfU09GLCBjaW5mby0+dW5yZWFkX21hcmtlciwNCi0JICAgKGludCkgY2luZm8tPmltYWdlX3dpZHRoLCAoaW50KSBjaW5mby0+aW1hZ2VfaGVpZ2h0LA0KLQkgICBjaW5mby0+bnVtX2NvbXBvbmVudHMpOw0KLQ0KLSAgaWYgKGNpbmZvLT5tYXJrZXItPnNhd19TT0YpDQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfU09GX0RVUExJQ0FURSk7DQotDQotICAvKiBXZSBkb24ndCBzdXBwb3J0IGZpbGVzIGluIHdoaWNoIHRoZSBpbWFnZSBoZWlnaHQgaXMgaW5pdGlhbGx5IHNwZWNpZmllZCAqLw0KLSAgLyogYXMgMCBhbmQgaXMgbGF0ZXIgcmVkZWZpbmVkIGJ5IEROTC4gIEFzIGxvbmcgYXMgd2UgaGF2ZSB0byBjaGVjayB0aGF0LCAgKi8NCi0gIC8qIG1pZ2h0IGFzIHdlbGwgaGF2ZSBhIGdlbmVyYWwgc2FuaXR5IGNoZWNrLiAqLw0KLSAgaWYgKGNpbmZvLT5pbWFnZV9oZWlnaHQgPD0gMCB8fCBjaW5mby0+aW1hZ2Vfd2lkdGggPD0gMA0KLSAgICAgIHx8IGNpbmZvLT5udW1fY29tcG9uZW50cyA8PSAwKQ0KLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0VNUFRZX0lNQUdFKTsNCi0NCi0gIGlmIChsZW5ndGggIT0gKGNpbmZvLT5udW1fY29tcG9uZW50cyAqIDMpKQ0KLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9MRU5HVEgpOw0KLQ0KLSAgaWYgKGNpbmZvLT5jb21wX2luZm8gPT0gTlVMTCkJLyogZG8gb25seSBvbmNlLCBldmVuIGlmIHN1c3BlbmQgKi8NCi0gICAgY2luZm8tPmNvbXBfaW5mbyA9IChqcGVnX2NvbXBvbmVudF9pbmZvICopICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpDQotCQkJKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwNCi0JCQkgY2luZm8tPm51bV9jb21wb25lbnRzICogU0laRU9GKGpwZWdfY29tcG9uZW50X2luZm8pKTsNCi0gIA0KLSAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsNCi0gICAgICAgY2krKywgY29tcHB0cisrKSB7DQotICAgIGNvbXBwdHItPmNvbXBvbmVudF9pbmRleCA9IGNpOw0KLSAgICBJTlBVVF9CWVRFKGNpbmZvLCBjb21wcHRyLT5jb21wb25lbnRfaWQsIHJldHVybiBGQUxTRSk7DQotCS8qIFhZUSAyMDA4LTAzLTI1OiBBZG9iZSBDTVlLIEpQRUcgaGFzIHNlcmlvdXMgZmxhdzogdGhlIEsgY2hhbm5lbCBoYXMgc2FtZSBjb21wb25lbnQgaWQgYXMgQyBjaGFubmVsICovDQotCXsNCi0JCWludCBpOw0KLQkJZm9yIChpID0gMDsgaSA8IGNpOyBpICsrKQ0KLQkJCWlmIChjb21wcHRyLT5jb21wb25lbnRfaWQgPT0gY2luZm8tPmNvbXBfaW5mb1tpXS5jb21wb25lbnRfaWQpIGJyZWFrOw0KLQkJaWYgKGkgPCBjaSkNCi0JCQkvKiBGb3VuZCB0aGUgZXJyb3IhIFdlIHJlcGxhY2UgdGhlIGlkIHdpdGggc29tZXRoaW5nIHVubGlrZWx5IHVzZWQgZWxzZXdoZXJlICovDQotCQkJY29tcHB0ci0+Y29tcG9uZW50X2lkICs9IDB4ZjA7DQotCX0NCi0JLyogZW5kIG9mIG1vZGlmaWNhdGlvbiAqLw0KLSAgICBJTlBVVF9CWVRFKGNpbmZvLCBjLCByZXR1cm4gRkFMU0UpOw0KLSAgICBjb21wcHRyLT5oX3NhbXBfZmFjdG9yID0gKGMgPj4gNCkgJiAxNTsNCi0gICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciA9IChjICAgICApICYgMTU7DQotICAgIElOUFVUX0JZVEUoY2luZm8sIGNvbXBwdHItPnF1YW50X3RibF9ubywgcmV0dXJuIEZBTFNFKTsNCi0NCi0gICAgVFJBQ0VNUzQoY2luZm8sIDEsIEpUUkNfU09GX0NPTVBPTkVOVCwNCi0JICAgICBjb21wcHRyLT5jb21wb25lbnRfaWQsIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IsDQotCSAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwgY29tcHB0ci0+cXVhbnRfdGJsX25vKTsNCi0gIH0NCi0NCi0gIGNpbmZvLT5tYXJrZXItPnNhd19TT0YgPSBUUlVFOw0KLQ0KLSAgSU5QVVRfU1lOQyhjaW5mbyk7DQotICByZXR1cm4gVFJVRTsNCi19DQotDQotDQotTE9DQUwoYm9vbGVhbikNCi1nZXRfc29zIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLS8qIFByb2Nlc3MgYSBTT1MgbWFya2VyICovDQotew0KLSAgSU5UMzIgbGVuZ3RoOw0KLSAgaW50IGksIGNpLCBuLCBjLCBjYzsNCi0gIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyOw0KLSAgSU5QVVRfVkFSUyhjaW5mbyk7DQotDQotICBpZiAoISBjaW5mby0+bWFya2VyLT5zYXdfU09GKQ0KLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1NPU19OT19TT0YpOw0KLQ0KLSAgSU5QVVRfMkJZVEVTKGNpbmZvLCBsZW5ndGgsIHJldHVybiBGQUxTRSk7DQotDQotICBJTlBVVF9CWVRFKGNpbmZvLCBuLCByZXR1cm4gRkFMU0UpOyAvKiBOdW1iZXIgb2YgY29tcG9uZW50cyAqLw0KLQ0KLSAgVFJBQ0VNUzEoY2luZm8sIDEsIEpUUkNfU09TLCBuKTsNCi0NCi0gIGlmIChsZW5ndGggIT0gKG4gKiAyICsgNikgfHwgbiA8IDEgfHwgbiA+IE1BWF9DT01QU19JTl9TQ0FOKQ0KLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9MRU5HVEgpOw0KLQ0KLSAgY2luZm8tPmNvbXBzX2luX3NjYW4gPSBuOw0KLQ0KLSAgLyogQ29sbGVjdCB0aGUgY29tcG9uZW50LXNwZWMgcGFyYW1ldGVycyAqLw0KLQ0KLSAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgew0KLSAgICBJTlBVVF9CWVRFKGNpbmZvLCBjYywgcmV0dXJuIEZBTFNFKTsNCi0gICAgSU5QVVRfQllURShjaW5mbywgYywgcmV0dXJuIEZBTFNFKTsNCi0gICAgDQotCS8qIFhZUSAyMDA4LTAzLTI1OiBBZG9iZSBDTVlLIEpQRUcgaGFzIHNlcmlvdXMgZmxhdzogdGhlIEsgY2hhbm5lbCBoYXMgc2FtZSBjb21wb25lbnQgaWQgYXMgQyBjaGFubmVsICovDQotCXsNCi0JCWludCBqOw0KLQkJZm9yIChqID0gMDsgaiA8IGk7IGogKyspDQotCQkJaWYgKGNjID09IGNpbmZvLT5jdXJfY29tcF9pbmZvW2pdLT5jb21wb25lbnRfaWQpIGJyZWFrOw0KLQkJaWYgKGogPCBpKQ0KLQkJCS8qIGZvdW5kIHRoZSBlcnJvciEgKi8NCi0JCQljYyArPSAweGYwOw0KLQl9DQotCS8qIGVuZCBvZiBtb2RpZmljYXRpb24gKi8NCi0gICAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsNCi0JIGNpKyssIGNvbXBwdHIrKykgew0KLSAgICAgIGlmIChjYyA9PSBjb21wcHRyLT5jb21wb25lbnRfaWQpDQotCWdvdG8gaWRfZm91bmQ7DQotICAgIH0NCi0NCi0gICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX0NPTVBPTkVOVF9JRCwgY2MpOw0KLQ0KLSAgaWRfZm91bmQ6DQotDQotICAgIGNpbmZvLT5jdXJfY29tcF9pbmZvW2ldID0gY29tcHB0cjsNCi0gICAgY29tcHB0ci0+ZGNfdGJsX25vID0gKGMgPj4gNCkgJiAxNTsNCi0gICAgY29tcHB0ci0+YWNfdGJsX25vID0gKGMgICAgICkgJiAxNTsNCi0gICAgDQotICAgIFRSQUNFTVMzKGNpbmZvLCAxLCBKVFJDX1NPU19DT01QT05FTlQsIGNjLA0KLQkgICAgIGNvbXBwdHItPmRjX3RibF9ubywgY29tcHB0ci0+YWNfdGJsX25vKTsNCi0JLyogVGhpcyBDU2kgKGNjKSBzaG91bGQgZGlmZmVyIGZyb20gdGhlIHByZXZpb3VzIENTaSAqLw0KLSAgICBmb3IgKGNpID0gMDsgY2kgPCBpOyBjaSsrKSB7DQotICAgICAgaWYgKGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXSA9PSBjb21wcHRyKQ0KLSAgICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX0NPTVBPTkVOVF9JRCwgY2MpOw0KLSAgICB9DQotICB9DQotDQotICAvKiBDb2xsZWN0IHRoZSBhZGRpdGlvbmFsIHNjYW4gcGFyYW1ldGVycyBTcywgU2UsIEFoL0FsLiAqLw0KLSAgSU5QVVRfQllURShjaW5mbywgYywgcmV0dXJuIEZBTFNFKTsNCi0gIGNpbmZvLT5TcyA9IGM7DQotICBJTlBVVF9CWVRFKGNpbmZvLCBjLCByZXR1cm4gRkFMU0UpOw0KLSAgY2luZm8tPlNlID0gYzsNCi0gIElOUFVUX0JZVEUoY2luZm8sIGMsIHJldHVybiBGQUxTRSk7DQotICBjaW5mby0+QWggPSAoYyA+PiA0KSAmIDE1Ow0KLSAgY2luZm8tPkFsID0gKGMgICAgICkgJiAxNTsNCi0NCi0gIFRSQUNFTVM0KGNpbmZvLCAxLCBKVFJDX1NPU19QQVJBTVMsIGNpbmZvLT5TcywgY2luZm8tPlNlLA0KLQkgICBjaW5mby0+QWgsIGNpbmZvLT5BbCk7DQotDQotICAvKiBQcmVwYXJlIHRvIHNjYW4gZGF0YSAmIHJlc3RhcnQgbWFya2VycyAqLw0KLSAgY2luZm8tPm1hcmtlci0+bmV4dF9yZXN0YXJ0X251bSA9IDA7DQotDQotICAvKiBDb3VudCBhbm90aGVyIFNPUyBtYXJrZXIgKi8NCi0gIGNpbmZvLT5pbnB1dF9zY2FuX251bWJlcisrOw0KLQ0KLSAgSU5QVVRfU1lOQyhjaW5mbyk7DQotICByZXR1cm4gVFJVRTsNCi19DQotDQotDQotI2lmZGVmIERfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRA0KLQ0KLUxPQ0FMKGJvb2xlYW4pDQotZ2V0X2RhYyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi0vKiBQcm9jZXNzIGEgREFDIG1hcmtlciAqLw0KLXsNCi0gIElOVDMyIGxlbmd0aDsNCi0gIGludCBpbmRleCwgdmFsOw0KLSAgSU5QVVRfVkFSUyhjaW5mbyk7DQotDQotICBJTlBVVF8yQllURVMoY2luZm8sIGxlbmd0aCwgcmV0dXJuIEZBTFNFKTsNCi0gIGxlbmd0aCAtPSAyOw0KLSAgDQotICB3aGlsZSAobGVuZ3RoID4gMCkgew0KLSAgICBJTlBVVF9CWVRFKGNpbmZvLCBpbmRleCwgcmV0dXJuIEZBTFNFKTsNCi0gICAgSU5QVVRfQllURShjaW5mbywgdmFsLCByZXR1cm4gRkFMU0UpOw0KLQ0KLSAgICBsZW5ndGggLT0gMjsNCi0NCi0gICAgVFJBQ0VNUzIoY2luZm8sIDEsIEpUUkNfREFDLCBpbmRleCwgdmFsKTsNCi0NCi0gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSAoMipOVU1fQVJJVEhfVEJMUykpDQotICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfREFDX0lOREVYLCBpbmRleCk7DQotDQotICAgIGlmIChpbmRleCA+PSBOVU1fQVJJVEhfVEJMUykgeyAvKiBkZWZpbmUgQUMgdGFibGUgKi8NCi0gICAgICBjaW5mby0+YXJpdGhfYWNfS1tpbmRleC1OVU1fQVJJVEhfVEJMU10gPSAoVUlOVDgpIHZhbDsNCi0gICAgfSBlbHNlIHsJCQkvKiBkZWZpbmUgREMgdGFibGUgKi8NCi0gICAgICBjaW5mby0+YXJpdGhfZGNfTFtpbmRleF0gPSAoVUlOVDgpICh2YWwgJiAweDBGKTsNCi0gICAgICBjaW5mby0+YXJpdGhfZGNfVVtpbmRleF0gPSAoVUlOVDgpICh2YWwgPj4gNCk7DQotICAgICAgaWYgKGNpbmZvLT5hcml0aF9kY19MW2luZGV4XSA+IGNpbmZvLT5hcml0aF9kY19VW2luZGV4XSkNCi0JRVJSRVhJVDEoY2luZm8sIEpFUlJfREFDX1ZBTFVFLCB2YWwpOw0KLSAgICB9DQotICB9DQotDQotICBpZiAobGVuZ3RoICE9IDApDQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0xFTkdUSCk7DQotDQotICBJTlBVVF9TWU5DKGNpbmZvKTsNCi0gIHJldHVybiBUUlVFOw0KLX0NCi0NCi0jZWxzZSAvKiAhIERfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRCAqLw0KLQ0KLSNkZWZpbmUgZ2V0X2RhYyhjaW5mbykgIHNraXBfdmFyaWFibGUoY2luZm8pDQotDQotI2VuZGlmIC8qIERfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRCAqLw0KLQ0KLQ0KLUxPQ0FMKGJvb2xlYW4pDQotZ2V0X2RodCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi0vKiBQcm9jZXNzIGEgREhUIG1hcmtlciAqLw0KLXsNCi0gIElOVDMyIGxlbmd0aDsNCi0gIFVJTlQ4IGJpdHNbMTddOw0KLSAgVUlOVDggaHVmZnZhbFsyNTZdOw0KLSAgaW50IGksIGluZGV4LCBjb3VudDsNCi0gIEpIVUZGX1RCTCAqKmh0YmxwdHI7DQotICBJTlBVVF9WQVJTKGNpbmZvKTsNCi0NCi0gIElOUFVUXzJCWVRFUyhjaW5mbywgbGVuZ3RoLCByZXR1cm4gRkFMU0UpOw0KLSAgbGVuZ3RoIC09IDI7DQotICANCi0gIHdoaWxlIChsZW5ndGggPiAxNikgew0KLSAgICBJTlBVVF9CWVRFKGNpbmZvLCBpbmRleCwgcmV0dXJuIEZBTFNFKTsNCi0NCi0gICAgVFJBQ0VNUzEoY2luZm8sIDEsIEpUUkNfREhULCBpbmRleCk7DQotICAgICAgDQotICAgIGJpdHNbMF0gPSAwOw0KLSAgICBjb3VudCA9IDA7DQotICAgIGZvciAoaSA9IDE7IGkgPD0gMTY7IGkrKykgew0KLSAgICAgIElOUFVUX0JZVEUoY2luZm8sIGJpdHNbaV0sIHJldHVybiBGQUxTRSk7DQotICAgICAgY291bnQgKz0gYml0c1tpXTsNCi0gICAgfQ0KLQ0KLSAgICBsZW5ndGggLT0gMSArIDE2Ow0KLQ0KLSAgICBUUkFDRU1TOChjaW5mbywgMiwgSlRSQ19IVUZGQklUUywNCi0JICAgICBiaXRzWzFdLCBiaXRzWzJdLCBiaXRzWzNdLCBiaXRzWzRdLA0KLQkgICAgIGJpdHNbNV0sIGJpdHNbNl0sIGJpdHNbN10sIGJpdHNbOF0pOw0KLSAgICBUUkFDRU1TOChjaW5mbywgMiwgSlRSQ19IVUZGQklUUywNCi0JICAgICBiaXRzWzldLCBiaXRzWzEwXSwgYml0c1sxMV0sIGJpdHNbMTJdLA0KLQkgICAgIGJpdHNbMTNdLCBiaXRzWzE0XSwgYml0c1sxNV0sIGJpdHNbMTZdKTsNCi0NCi0gICAgLyogSGVyZSB3ZSBqdXN0IGRvIG1pbmltYWwgdmFsaWRhdGlvbiBvZiB0aGUgY291bnRzIHRvIGF2b2lkIHdhbGtpbmcNCi0gICAgICogb2ZmIHRoZSBlbmQgb2Ygb3VyIHRhYmxlIHNwYWNlLiAgamRodWZmLmMgd2lsbCBjaGVjayBtb3JlIGNhcmVmdWxseS4NCi0gICAgICovDQotICAgIGlmIChjb3VudCA+IDI1NiB8fCAoKElOVDMyKSBjb3VudCkgPiBsZW5ndGgpDQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSFVGRl9UQUJMRSk7DQotDQotICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQ0KLSAgICAgIElOUFVUX0JZVEUoY2luZm8sIGh1ZmZ2YWxbaV0sIHJldHVybiBGQUxTRSk7DQotDQotICAgIGxlbmd0aCAtPSBjb3VudDsNCi0NCi0gICAgaWYgKGluZGV4ICYgMHgxMCkgewkJLyogQUMgdGFibGUgZGVmaW5pdGlvbiAqLw0KLSAgICAgIGluZGV4IC09IDB4MTA7DQotICAgICAgaHRibHB0ciA9ICZjaW5mby0+YWNfaHVmZl90YmxfcHRyc1tpbmRleF07DQotICAgIH0gZWxzZSB7CQkJLyogREMgdGFibGUgZGVmaW5pdGlvbiAqLw0KLSAgICAgIGh0YmxwdHIgPSAmY2luZm8tPmRjX2h1ZmZfdGJsX3B0cnNbaW5kZXhdOw0KLSAgICB9DQotDQotICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gTlVNX0hVRkZfVEJMUykNCi0gICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9ESFRfSU5ERVgsIGluZGV4KTsNCi0NCi0gICAgaWYgKCpodGJscHRyID09IE5VTEwpDQotICAgICAgKmh0YmxwdHIgPSBqcGVnX2FsbG9jX2h1ZmZfdGFibGUoKGpfY29tbW9uX3B0cikgY2luZm8pOw0KLSAgDQotICAgIE1FTUNPUFkoKCpodGJscHRyKS0+Yml0cywgYml0cywgU0laRU9GKCgqaHRibHB0ciktPmJpdHMpKTsNCi0gICAgTUVNQ09QWSgoKmh0YmxwdHIpLT5odWZmdmFsLCBodWZmdmFsLCBTSVpFT0YoKCpodGJscHRyKS0+aHVmZnZhbCkpOw0KLSAgfQ0KLQ0KLSAgaWYgKGxlbmd0aCAhPSAwKQ0KLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9MRU5HVEgpOw0KLQ0KLSAgSU5QVVRfU1lOQyhjaW5mbyk7DQotICByZXR1cm4gVFJVRTsNCi19DQotDQotDQotTE9DQUwoYm9vbGVhbikNCi1nZXRfZHF0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLS8qIFByb2Nlc3MgYSBEUVQgbWFya2VyICovDQotew0KLSAgSU5UMzIgbGVuZ3RoOw0KLSAgaW50IG4sIGksIHByZWM7DQotICB1bnNpZ25lZCBpbnQgdG1wOw0KLSAgSlFVQU5UX1RCTCAqcXVhbnRfcHRyOw0KLSAgSU5QVVRfVkFSUyhjaW5mbyk7DQotDQotICBJTlBVVF8yQllURVMoY2luZm8sIGxlbmd0aCwgcmV0dXJuIEZBTFNFKTsNCi0gIGxlbmd0aCAtPSAyOw0KLQ0KLSAgd2hpbGUgKGxlbmd0aCA+IDApIHsNCi0gICAgSU5QVVRfQllURShjaW5mbywgbiwgcmV0dXJuIEZBTFNFKTsNCi0gICAgcHJlYyA9IG4gPj4gNDsNCi0gICAgbiAmPSAweDBGOw0KLQ0KLSAgICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19EUVQsIG4sIHByZWMpOw0KLQ0KLSAgICBpZiAobiA+PSBOVU1fUVVBTlRfVEJMUykNCi0gICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9EUVRfSU5ERVgsIG4pOw0KLSAgICAgIA0KLSAgICBpZiAoY2luZm8tPnF1YW50X3RibF9wdHJzW25dID09IE5VTEwpDQotICAgICAgY2luZm8tPnF1YW50X3RibF9wdHJzW25dID0ganBlZ19hbGxvY19xdWFudF90YWJsZSgoal9jb21tb25fcHRyKSBjaW5mbyk7DQotICAgIHF1YW50X3B0ciA9IGNpbmZvLT5xdWFudF90YmxfcHRyc1tuXTsNCi0NCi0gICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsNCi0gICAgICBpZiAocHJlYykNCi0JSU5QVVRfMkJZVEVTKGNpbmZvLCB0bXAsIHJldHVybiBGQUxTRSk7DQotICAgICAgZWxzZQ0KLQlJTlBVVF9CWVRFKGNpbmZvLCB0bXAsIHJldHVybiBGQUxTRSk7DQotICAgICAgLyogV2UgY29udmVydCB0aGUgemlnemFnLW9yZGVyIHRhYmxlIHRvIG5hdHVyYWwgYXJyYXkgb3JkZXIuICovDQotICAgICAgcXVhbnRfcHRyLT5xdWFudHZhbFtqcGVnX25hdHVyYWxfb3JkZXJbaV1dID0gKFVJTlQxNikgdG1wOw0KLSAgICB9DQotDQotICAgIGlmIChjaW5mby0+ZXJyLT50cmFjZV9sZXZlbCA+PSAyKSB7DQotICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpICs9IDgpIHsNCi0JVFJBQ0VNUzgoY2luZm8sIDIsIEpUUkNfUVVBTlRWQUxTLA0KLQkJIHF1YW50X3B0ci0+cXVhbnR2YWxbaV0sICAgcXVhbnRfcHRyLT5xdWFudHZhbFtpKzFdLA0KLQkJIHF1YW50X3B0ci0+cXVhbnR2YWxbaSsyXSwgcXVhbnRfcHRyLT5xdWFudHZhbFtpKzNdLA0KLQkJIHF1YW50X3B0ci0+cXVhbnR2YWxbaSs0XSwgcXVhbnRfcHRyLT5xdWFudHZhbFtpKzVdLA0KLQkJIHF1YW50X3B0ci0+cXVhbnR2YWxbaSs2XSwgcXVhbnRfcHRyLT5xdWFudHZhbFtpKzddKTsNCi0gICAgICB9DQotICAgIH0NCi0NCi0gICAgbGVuZ3RoIC09IERDVFNJWkUyKzE7DQotICAgIGlmIChwcmVjKSBsZW5ndGggLT0gRENUU0laRTI7DQotICB9DQotDQotICBpZiAobGVuZ3RoICE9IDApDQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0xFTkdUSCk7DQotDQotICBJTlBVVF9TWU5DKGNpbmZvKTsNCi0gIHJldHVybiBUUlVFOw0KLX0NCi0NCi0NCi1MT0NBTChib29sZWFuKQ0KLWdldF9kcmkgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pDQotLyogUHJvY2VzcyBhIERSSSBtYXJrZXIgKi8NCi17DQotICBJTlQzMiBsZW5ndGg7DQotICB1bnNpZ25lZCBpbnQgdG1wOw0KLSAgSU5QVVRfVkFSUyhjaW5mbyk7DQotDQotICBJTlBVVF8yQllURVMoY2luZm8sIGxlbmd0aCwgcmV0dXJuIEZBTFNFKTsNCi0gIA0KLSAgaWYgKGxlbmd0aCAhPSA0KQ0KLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9MRU5HVEgpOw0KLQ0KLSAgSU5QVVRfMkJZVEVTKGNpbmZvLCB0bXAsIHJldHVybiBGQUxTRSk7DQotDQotICBUUkFDRU1TMShjaW5mbywgMSwgSlRSQ19EUkksIHRtcCk7DQotDQotICBjaW5mby0+cmVzdGFydF9pbnRlcnZhbCA9IHRtcDsNCi0NCi0gIElOUFVUX1NZTkMoY2luZm8pOw0KLSAgcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLQ0KLS8qDQotICogUm91dGluZXMgZm9yIHByb2Nlc3NpbmcgQVBQbiBhbmQgQ09NIG1hcmtlcnMuDQotICogVGhlc2UgYXJlIGVpdGhlciBzYXZlZCBpbiBtZW1vcnkgb3IgZGlzY2FyZGVkLCBwZXIgYXBwbGljYXRpb24gcmVxdWVzdC4NCi0gKiBBUFAwIGFuZCBBUFAxNCBhcmUgc3BlY2lhbGx5IGNoZWNrZWQgdG8gc2VlIGlmIHRoZXkgYXJlDQotICogSkZJRiBhbmQgQWRvYmUgbWFya2VycywgcmVzcGVjdGl2ZWx5Lg0KLSAqLw0KLQ0KLSNkZWZpbmUgQVBQMF9EQVRBX0xFTgkxNAkvKiBMZW5ndGggb2YgaW50ZXJlc3RpbmcgZGF0YSBpbiBBUFAwICovDQotI2RlZmluZSBBUFAxNF9EQVRBX0xFTgkxMgkvKiBMZW5ndGggb2YgaW50ZXJlc3RpbmcgZGF0YSBpbiBBUFAxNCAqLw0KLSNkZWZpbmUgQVBQTl9EQVRBX0xFTgkxNAkvKiBNdXN0IGJlIHRoZSBsYXJnZXN0IG9mIHRoZSBhYm92ZSEhICovDQotDQotDQotTE9DQUwodm9pZCkNCi1leGFtaW5lX2FwcDAgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpPQ1RFVCBGQVIgKiBkYXRhLA0KLQkgICAgICB1bnNpZ25lZCBpbnQgZGF0YWxlbiwgSU5UMzIgcmVtYWluaW5nKQ0KLS8qIEV4YW1pbmUgZmlyc3QgZmV3IGJ5dGVzIGZyb20gYW4gQVBQMC4NCi0gKiBUYWtlIGFwcHJvcHJpYXRlIGFjdGlvbiBpZiBpdCBpcyBhIEpGSUYgbWFya2VyLg0KLSAqIGRhdGFsZW4gaXMgIyBvZiBieXRlcyBhdCBkYXRhW10sIHJlbWFpbmluZyBpcyBsZW5ndGggb2YgcmVzdCBvZiBtYXJrZXIgZGF0YS4NCi0gKi8NCi17DQotICBJTlQzMiB0b3RhbGxlbiA9IChJTlQzMikgZGF0YWxlbiArIHJlbWFpbmluZzsNCi0NCi0gIGlmIChkYXRhbGVuID49IEFQUDBfREFUQV9MRU4gJiYNCi0gICAgICBHRVRKT0NURVQoZGF0YVswXSkgPT0gMHg0QSAmJg0KLSAgICAgIEdFVEpPQ1RFVChkYXRhWzFdKSA9PSAweDQ2ICYmDQotICAgICAgR0VUSk9DVEVUKGRhdGFbMl0pID09IDB4NDkgJiYNCi0gICAgICBHRVRKT0NURVQoZGF0YVszXSkgPT0gMHg0NiAmJg0KLSAgICAgIEdFVEpPQ1RFVChkYXRhWzRdKSA9PSAwKSB7DQotICAgIC8qIEZvdW5kIEpGSUYgQVBQMCBtYXJrZXI6IHNhdmUgaW5mbyAqLw0KLSAgICBjaW5mby0+c2F3X0pGSUZfbWFya2VyID0gVFJVRTsNCi0gICAgY2luZm8tPkpGSUZfbWFqb3JfdmVyc2lvbiA9IEdFVEpPQ1RFVChkYXRhWzVdKTsNCi0gICAgY2luZm8tPkpGSUZfbWlub3JfdmVyc2lvbiA9IEdFVEpPQ1RFVChkYXRhWzZdKTsNCi0gICAgY2luZm8tPmRlbnNpdHlfdW5pdCA9IEdFVEpPQ1RFVChkYXRhWzddKTsNCi0gICAgY2luZm8tPlhfZGVuc2l0eSA9IChHRVRKT0NURVQoZGF0YVs4XSkgPDwgOCkgKyBHRVRKT0NURVQoZGF0YVs5XSk7DQotICAgIGNpbmZvLT5ZX2RlbnNpdHkgPSAoR0VUSk9DVEVUKGRhdGFbMTBdKSA8PCA4KSArIEdFVEpPQ1RFVChkYXRhWzExXSk7DQotICAgIC8qIENoZWNrIHZlcnNpb24uDQotICAgICAqIE1ham9yIHZlcnNpb24gbXVzdCBiZSAxLCBhbnl0aGluZyBlbHNlIHNpZ25hbHMgYW4gaW5jb21wYXRpYmxlIGNoYW5nZS4NCi0gICAgICogKFdlIHVzZWQgdG8gdHJlYXQgdGhpcyBhcyBhbiBlcnJvciwgYnV0IG5vdyBpdCdzIGEgbm9uZmF0YWwgd2FybmluZywNCi0gICAgICogYmVjYXVzZSBzb21lIGJvem8gYXQgSGlqYWFrIGNvdWxkbid0IHJlYWQgdGhlIHNwZWMuKQ0KLSAgICAgKiBNaW5vciB2ZXJzaW9uIHNob3VsZCBiZSAwLi4yLCBidXQgcHJvY2VzcyBhbnl3YXkgaWYgbmV3ZXIuDQotICAgICAqLw0KLSAgICBpZiAoY2luZm8tPkpGSUZfbWFqb3JfdmVyc2lvbiAhPSAxKQ0KLSAgICAgIFdBUk5NUzIoY2luZm8sIEpXUk5fSkZJRl9NQUpPUiwNCi0JICAgICAgY2luZm8tPkpGSUZfbWFqb3JfdmVyc2lvbiwgY2luZm8tPkpGSUZfbWlub3JfdmVyc2lvbik7DQotICAgIC8qIEdlbmVyYXRlIHRyYWNlIG1lc3NhZ2VzICovDQotICAgIFRSQUNFTVM1KGNpbmZvLCAxLCBKVFJDX0pGSUYsDQotCSAgICAgY2luZm8tPkpGSUZfbWFqb3JfdmVyc2lvbiwgY2luZm8tPkpGSUZfbWlub3JfdmVyc2lvbiwNCi0JICAgICBjaW5mby0+WF9kZW5zaXR5LCBjaW5mby0+WV9kZW5zaXR5LCBjaW5mby0+ZGVuc2l0eV91bml0KTsNCi0gICAgLyogVmFsaWRhdGUgdGh1bWJuYWlsIGRpbWVuc2lvbnMgYW5kIGlzc3VlIGFwcHJvcHJpYXRlIG1lc3NhZ2VzICovDQotICAgIGlmIChHRVRKT0NURVQoZGF0YVsxMl0pIHwgR0VUSk9DVEVUKGRhdGFbMTNdKSkNCi0gICAgICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19KRklGX1RIVU1CTkFJTCwNCi0JICAgICAgIEdFVEpPQ1RFVChkYXRhWzEyXSksIEdFVEpPQ1RFVChkYXRhWzEzXSkpOw0KLSAgICB0b3RhbGxlbiAtPSBBUFAwX0RBVEFfTEVOOw0KLSAgICBpZiAodG90YWxsZW4gIT0NCi0JKChJTlQzMilHRVRKT0NURVQoZGF0YVsxMl0pICogKElOVDMyKUdFVEpPQ1RFVChkYXRhWzEzXSkgKiAoSU5UMzIpIDMpKQ0KLSAgICAgIFRSQUNFTVMxKGNpbmZvLCAxLCBKVFJDX0pGSUZfQkFEVEhVTUJOQUlMU0laRSwgKGludCkgdG90YWxsZW4pOw0KLSAgfSBlbHNlIGlmIChkYXRhbGVuID49IDYgJiYNCi0gICAgICBHRVRKT0NURVQoZGF0YVswXSkgPT0gMHg0QSAmJg0KLSAgICAgIEdFVEpPQ1RFVChkYXRhWzFdKSA9PSAweDQ2ICYmDQotICAgICAgR0VUSk9DVEVUKGRhdGFbMl0pID09IDB4NTggJiYNCi0gICAgICBHRVRKT0NURVQoZGF0YVszXSkgPT0gMHg1OCAmJg0KLSAgICAgIEdFVEpPQ1RFVChkYXRhWzRdKSA9PSAwKSB7DQotICAgIC8qIEZvdW5kIEpGSUYgIkpGWFgiIGV4dGVuc2lvbiBBUFAwIG1hcmtlciAqLw0KLSAgICAvKiBUaGUgbGlicmFyeSBkb2Vzbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIHdpdGggdGhlc2UsDQotICAgICAqIGJ1dCB3ZSB0cnkgdG8gcHJvZHVjZSBhIGhlbHBmdWwgdHJhY2UgbWVzc2FnZS4NCi0gICAgICovDQotICAgIHN3aXRjaCAoR0VUSk9DVEVUKGRhdGFbNV0pKSB7DQotICAgIGNhc2UgMHgxMDoNCi0gICAgICBUUkFDRU1TMShjaW5mbywgMSwgSlRSQ19USFVNQl9KUEVHLCAoaW50KSB0b3RhbGxlbik7DQotICAgICAgYnJlYWs7DQotICAgIGNhc2UgMHgxMToNCi0gICAgICBUUkFDRU1TMShjaW5mbywgMSwgSlRSQ19USFVNQl9QQUxFVFRFLCAoaW50KSB0b3RhbGxlbik7DQotICAgICAgYnJlYWs7DQotICAgIGNhc2UgMHgxMzoNCi0gICAgICBUUkFDRU1TMShjaW5mbywgMSwgSlRSQ19USFVNQl9SR0IsIChpbnQpIHRvdGFsbGVuKTsNCi0gICAgICBicmVhazsNCi0gICAgZGVmYXVsdDoNCi0gICAgICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19KRklGX0VYVEVOU0lPTiwNCi0JICAgICAgIEdFVEpPQ1RFVChkYXRhWzVdKSwgKGludCkgdG90YWxsZW4pOw0KLSAgICAgIGJyZWFrOw0KLSAgICB9DQotICB9IGVsc2Ugew0KLSAgICAvKiBTdGFydCBvZiBBUFAwIGRvZXMgbm90IG1hdGNoICJKRklGIiBvciAiSkZYWCIsIG9yIHRvbyBzaG9ydCAqLw0KLSAgICBUUkFDRU1TMShjaW5mbywgMSwgSlRSQ19BUFAwLCAoaW50KSB0b3RhbGxlbik7DQotICB9DQotfQ0KLQ0KLQ0KLUxPQ0FMKHZvaWQpDQotZXhhbWluZV9hcHAxNCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSk9DVEVUIEZBUiAqIGRhdGEsDQotCSAgICAgICB1bnNpZ25lZCBpbnQgZGF0YWxlbiwgSU5UMzIgcmVtYWluaW5nKQ0KLS8qIEV4YW1pbmUgZmlyc3QgZmV3IGJ5dGVzIGZyb20gYW4gQVBQMTQuDQotICogVGFrZSBhcHByb3ByaWF0ZSBhY3Rpb24gaWYgaXQgaXMgYW4gQWRvYmUgbWFya2VyLg0KLSAqIGRhdGFsZW4gaXMgIyBvZiBieXRlcyBhdCBkYXRhW10sIHJlbWFpbmluZyBpcyBsZW5ndGggb2YgcmVzdCBvZiBtYXJrZXIgZGF0YS4NCi0gKi8NCi17DQotICB1bnNpZ25lZCBpbnQgdmVyc2lvbiwgZmxhZ3MwLCBmbGFnczEsIHRyYW5zZm9ybTsNCi0NCi0gIGlmIChkYXRhbGVuID49IEFQUDE0X0RBVEFfTEVOICYmDQotICAgICAgR0VUSk9DVEVUKGRhdGFbMF0pID09IDB4NDEgJiYNCi0gICAgICBHRVRKT0NURVQoZGF0YVsxXSkgPT0gMHg2NCAmJg0KLSAgICAgIEdFVEpPQ1RFVChkYXRhWzJdKSA9PSAweDZGICYmDQotICAgICAgR0VUSk9DVEVUKGRhdGFbM10pID09IDB4NjIgJiYNCi0gICAgICBHRVRKT0NURVQoZGF0YVs0XSkgPT0gMHg2NSkgew0KLSAgICAvKiBGb3VuZCBBZG9iZSBBUFAxNCBtYXJrZXIgKi8NCi0gICAgdmVyc2lvbiA9IChHRVRKT0NURVQoZGF0YVs1XSkgPDwgOCkgKyBHRVRKT0NURVQoZGF0YVs2XSk7DQotICAgIGZsYWdzMCA9IChHRVRKT0NURVQoZGF0YVs3XSkgPDwgOCkgKyBHRVRKT0NURVQoZGF0YVs4XSk7DQotICAgIGZsYWdzMSA9IChHRVRKT0NURVQoZGF0YVs5XSkgPDwgOCkgKyBHRVRKT0NURVQoZGF0YVsxMF0pOw0KLSAgICB0cmFuc2Zvcm0gPSBHRVRKT0NURVQoZGF0YVsxMV0pOw0KLSAgICBUUkFDRU1TNChjaW5mbywgMSwgSlRSQ19BRE9CRSwgdmVyc2lvbiwgZmxhZ3MwLCBmbGFnczEsIHRyYW5zZm9ybSk7DQotICAgIGNpbmZvLT5zYXdfQWRvYmVfbWFya2VyID0gVFJVRTsNCi0gICAgY2luZm8tPkFkb2JlX3RyYW5zZm9ybSA9IChVSU5UOCkgdHJhbnNmb3JtOw0KLSAgfSBlbHNlIHsNCi0gICAgLyogU3RhcnQgb2YgQVBQMTQgZG9lcyBub3QgbWF0Y2ggIkFkb2JlIiwgb3IgdG9vIHNob3J0ICovDQotICAgIFRSQUNFTVMxKGNpbmZvLCAxLCBKVFJDX0FQUDE0LCAoaW50KSAoZGF0YWxlbiArIHJlbWFpbmluZykpOw0KLSAgfQ0KLX0NCi0NCi0NCi1NRVRIT0RERUYoYm9vbGVhbikNCi1nZXRfaW50ZXJlc3RpbmdfYXBwbiAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi0vKiBQcm9jZXNzIGFuIEFQUDAgb3IgQVBQMTQgbWFya2VyIHdpdGhvdXQgc2F2aW5nIGl0ICovDQotew0KLSAgSU5UMzIgbGVuZ3RoOw0KLSAgSk9DVEVUIGJbQVBQTl9EQVRBX0xFTl07DQotICB1bnNpZ25lZCBpbnQgaSwgbnVtdG9yZWFkOw0KLSAgSU5QVVRfVkFSUyhjaW5mbyk7DQotDQotICBJTlBVVF8yQllURVMoY2luZm8sIGxlbmd0aCwgcmV0dXJuIEZBTFNFKTsNCi0gIGxlbmd0aCAtPSAyOw0KLQ0KLSAgLyogZ2V0IHRoZSBpbnRlcmVzdGluZyBwYXJ0IG9mIHRoZSBtYXJrZXIgZGF0YSAqLw0KLSAgaWYgKGxlbmd0aCA+PSBBUFBOX0RBVEFfTEVOKQ0KLSAgICBudW10b3JlYWQgPSBBUFBOX0RBVEFfTEVOOw0KLSAgZWxzZSBpZiAobGVuZ3RoID4gMCkNCi0gICAgbnVtdG9yZWFkID0gKHVuc2lnbmVkIGludCkgbGVuZ3RoOw0KLSAgZWxzZQ0KLSAgICBudW10b3JlYWQgPSAwOw0KLSAgZm9yIChpID0gMDsgaSA8IG51bXRvcmVhZDsgaSsrKQ0KLSAgICBJTlBVVF9CWVRFKGNpbmZvLCBiW2ldLCByZXR1cm4gRkFMU0UpOw0KLSAgbGVuZ3RoIC09IG51bXRvcmVhZDsNCi0NCi0gIC8qIHByb2Nlc3MgaXQgKi8NCi0gIHN3aXRjaCAoY2luZm8tPnVucmVhZF9tYXJrZXIpIHsNCi0gIGNhc2UgTV9BUFAwOg0KLSAgICBleGFtaW5lX2FwcDAoY2luZm8sIChKT0NURVQgRkFSICopIGIsIG51bXRvcmVhZCwgbGVuZ3RoKTsNCi0gICAgYnJlYWs7DQotICBjYXNlIE1fQVBQMTQ6DQotICAgIGV4YW1pbmVfYXBwMTQoY2luZm8sIChKT0NURVQgRkFSICopIGIsIG51bXRvcmVhZCwgbGVuZ3RoKTsNCi0gICAgYnJlYWs7DQotICBkZWZhdWx0Og0KLSAgICAvKiBjYW4ndCBnZXQgaGVyZSB1bmxlc3MganBlZ19zYXZlX21hcmtlcnMgY2hvb3NlcyB3cm9uZyBwcm9jZXNzb3IgKi8NCi0gICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfVU5LTk9XTl9NQVJLRVIsIGNpbmZvLT51bnJlYWRfbWFya2VyKTsNCi0gICAgYnJlYWs7DQotICB9DQotDQotICAvKiBza2lwIGFueSByZW1haW5pbmcgZGF0YSAtLSBjb3VsZCBiZSBsb3RzICovDQotICBJTlBVVF9TWU5DKGNpbmZvKTsNCi0gIGlmIChsZW5ndGggPiAwKQ0KLSAgICAoKmNpbmZvLT5zcmMtPnNraXBfaW5wdXRfZGF0YSkgKGNpbmZvLCAobG9uZykgbGVuZ3RoKTsNCi0NCi0gIHJldHVybiBUUlVFOw0KLX0NCi0NCi0NCi0jaWZkZWYgU0FWRV9NQVJLRVJTX1NVUFBPUlRFRA0KLQ0KLU1FVEhPRERFRihib29sZWFuKQ0KLXNhdmVfbWFya2VyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLS8qIFNhdmUgYW4gQVBQbiBvciBDT00gbWFya2VyIGludG8gdGhlIG1hcmtlciBsaXN0ICovDQotew0KLSAgbXlfbWFya2VyX3B0ciBtYXJrZXIgPSAobXlfbWFya2VyX3B0cikgY2luZm8tPm1hcmtlcjsNCi0gIGpwZWdfc2F2ZWRfbWFya2VyX3B0ciBjdXJfbWFya2VyID0gbWFya2VyLT5jdXJfbWFya2VyOw0KLSAgdW5zaWduZWQgaW50IGJ5dGVzX3JlYWQsIGRhdGFfbGVuZ3RoOw0KLSAgSk9DVEVUIEZBUiAqIGRhdGE7DQotICBJTlQzMiBsZW5ndGggPSAwOw0KLSAgSU5QVVRfVkFSUyhjaW5mbyk7DQotDQotICBpZiAoY3VyX21hcmtlciA9PSBOVUxMKSB7DQotICAgIC8qIGJlZ2luIHJlYWRpbmcgYSBtYXJrZXIgKi8NCi0gICAgSU5QVVRfMkJZVEVTKGNpbmZvLCBsZW5ndGgsIHJldHVybiBGQUxTRSk7DQotICAgIGxlbmd0aCAtPSAyOw0KLSAgICBpZiAobGVuZ3RoID49IDApIHsJCS8qIHdhdGNoIG91dCBmb3IgYm9ndXMgbGVuZ3RoIHdvcmQgKi8NCi0gICAgICAvKiBmaWd1cmUgb3V0IGhvdyBtdWNoIHdlIHdhbnQgdG8gc2F2ZSAqLw0KLSAgICAgIHVuc2lnbmVkIGludCBsaW1pdDsNCi0gICAgICBpZiAoY2luZm8tPnVucmVhZF9tYXJrZXIgPT0gKGludCkgTV9DT00pDQotCWxpbWl0ID0gbWFya2VyLT5sZW5ndGhfbGltaXRfQ09NOw0KLSAgICAgIGVsc2UNCi0JbGltaXQgPSBtYXJrZXItPmxlbmd0aF9saW1pdF9BUFBuW2NpbmZvLT51bnJlYWRfbWFya2VyIC0gKGludCkgTV9BUFAwXTsNCi0gICAgICBpZiAoKHVuc2lnbmVkIGludCkgbGVuZ3RoIDwgbGltaXQpDQotCWxpbWl0ID0gKHVuc2lnbmVkIGludCkgbGVuZ3RoOw0KLSAgICAgIC8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHRoZSBtYXJrZXIgaXRlbSAqLw0KLSAgICAgIGN1cl9tYXJrZXIgPSAoanBlZ19zYXZlZF9tYXJrZXJfcHRyKQ0KLQkoKmNpbmZvLT5tZW0tPmFsbG9jX2xhcmdlKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQkgICAgU0laRU9GKHN0cnVjdCBqcGVnX21hcmtlcl9zdHJ1Y3QpICsgbGltaXQpOw0KLSAgICAgIGN1cl9tYXJrZXItPm5leHQgPSBOVUxMOw0KLSAgICAgIGN1cl9tYXJrZXItPm1hcmtlciA9IChVSU5UOCkgY2luZm8tPnVucmVhZF9tYXJrZXI7DQotICAgICAgY3VyX21hcmtlci0+b3JpZ2luYWxfbGVuZ3RoID0gKHVuc2lnbmVkIGludCkgbGVuZ3RoOw0KLSAgICAgIGN1cl9tYXJrZXItPmRhdGFfbGVuZ3RoID0gbGltaXQ7DQotICAgICAgLyogZGF0YSBhcmVhIGlzIGp1c3QgYmV5b25kIHRoZSBqcGVnX21hcmtlcl9zdHJ1Y3QgKi8NCi0gICAgICBkYXRhID0gY3VyX21hcmtlci0+ZGF0YSA9IChKT0NURVQgRkFSICopIChjdXJfbWFya2VyICsgMSk7DQotICAgICAgbWFya2VyLT5jdXJfbWFya2VyID0gY3VyX21hcmtlcjsNCi0gICAgICBtYXJrZXItPmJ5dGVzX3JlYWQgPSAwOw0KLSAgICAgIGJ5dGVzX3JlYWQgPSAwOw0KLSAgICAgIGRhdGFfbGVuZ3RoID0gbGltaXQ7DQotICAgIH0gZWxzZSB7DQotICAgICAgLyogZGVhbCB3aXRoIGJvZ3VzIGxlbmd0aCB3b3JkICovDQotICAgICAgYnl0ZXNfcmVhZCA9IGRhdGFfbGVuZ3RoID0gMDsNCi0gICAgICBkYXRhID0gTlVMTDsNCi0gICAgfQ0KLSAgfSBlbHNlIHsNCi0gICAgLyogcmVzdW1lIHJlYWRpbmcgYSBtYXJrZXIgKi8NCi0gICAgYnl0ZXNfcmVhZCA9IG1hcmtlci0+Ynl0ZXNfcmVhZDsNCi0gICAgZGF0YV9sZW5ndGggPSBjdXJfbWFya2VyLT5kYXRhX2xlbmd0aDsNCi0gICAgZGF0YSA9IGN1cl9tYXJrZXItPmRhdGEgKyBieXRlc19yZWFkOw0KLSAgfQ0KLQ0KLSAgd2hpbGUgKGJ5dGVzX3JlYWQgPCBkYXRhX2xlbmd0aCkgew0KLSAgICBJTlBVVF9TWU5DKGNpbmZvKTsJCS8qIG1vdmUgdGhlIHJlc3RhcnQgcG9pbnQgdG8gaGVyZSAqLw0KLSAgICBtYXJrZXItPmJ5dGVzX3JlYWQgPSBieXRlc19yZWFkOw0KLSAgICAvKiBJZiB0aGVyZSdzIG5vdCBhdCBsZWFzdCBvbmUgYnl0ZSBpbiBidWZmZXIsIHN1c3BlbmQgKi8NCi0gICAgTUFLRV9CWVRFX0FWQUlMKGNpbmZvLCByZXR1cm4gRkFMU0UpOw0KLSAgICAvKiBDb3B5IGJ5dGVzIHdpdGggcmVhc29uYWJsZSByYXBpZGl0eSAqLw0KLSAgICB3aGlsZSAoYnl0ZXNfcmVhZCA8IGRhdGFfbGVuZ3RoICYmIGJ5dGVzX2luX2J1ZmZlciA+IDApIHsNCi0gICAgICAqZGF0YSsrID0gKm5leHRfaW5wdXRfYnl0ZSsrOw0KLSAgICAgIGJ5dGVzX2luX2J1ZmZlci0tOw0KLSAgICAgIGJ5dGVzX3JlYWQrKzsNCi0gICAgfQ0KLSAgfQ0KLQ0KLSAgLyogRG9uZSByZWFkaW5nIHdoYXQgd2Ugd2FudCB0byByZWFkICovDQotICBpZiAoY3VyX21hcmtlciAhPSBOVUxMKSB7CS8qIHdpbGwgYmUgTlVMTCBpZiBib2d1cyBsZW5ndGggd29yZCAqLw0KLSAgICAvKiBBZGQgbmV3IG1hcmtlciB0byBlbmQgb2YgbGlzdCAqLw0KLSAgICBpZiAoY2luZm8tPm1hcmtlcl9saXN0ID09IE5VTEwpIHsNCi0gICAgICBjaW5mby0+bWFya2VyX2xpc3QgPSBjdXJfbWFya2VyOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgIGpwZWdfc2F2ZWRfbWFya2VyX3B0ciBwcmV2ID0gY2luZm8tPm1hcmtlcl9saXN0Ow0KLSAgICAgIHdoaWxlIChwcmV2LT5uZXh0ICE9IE5VTEwpDQotCXByZXYgPSBwcmV2LT5uZXh0Ow0KLSAgICAgIHByZXYtPm5leHQgPSBjdXJfbWFya2VyOw0KLSAgICB9DQotICAgIC8qIFJlc2V0IHBvaW50ZXIgJiBjYWxjIHJlbWFpbmluZyBkYXRhIGxlbmd0aCAqLw0KLSAgICBkYXRhID0gY3VyX21hcmtlci0+ZGF0YTsNCi0gICAgbGVuZ3RoID0gY3VyX21hcmtlci0+b3JpZ2luYWxfbGVuZ3RoIC0gZGF0YV9sZW5ndGg7DQotICB9DQotICAvKiBSZXNldCB0byBpbml0aWFsIHN0YXRlIGZvciBuZXh0IG1hcmtlciAqLw0KLSAgbWFya2VyLT5jdXJfbWFya2VyID0gTlVMTDsNCi0NCi0gIC8qIFByb2Nlc3MgdGhlIG1hcmtlciBpZiBpbnRlcmVzdGluZzsgZWxzZSBqdXN0IG1ha2UgYSBnZW5lcmljIHRyYWNlIG1zZyAqLw0KLSAgc3dpdGNoIChjaW5mby0+dW5yZWFkX21hcmtlcikgew0KLSAgY2FzZSBNX0FQUDA6DQotICAgIGV4YW1pbmVfYXBwMChjaW5mbywgZGF0YSwgZGF0YV9sZW5ndGgsIGxlbmd0aCk7DQotICAgIGJyZWFrOw0KLSAgY2FzZSBNX0FQUDE0Og0KLSAgICBleGFtaW5lX2FwcDE0KGNpbmZvLCBkYXRhLCBkYXRhX2xlbmd0aCwgbGVuZ3RoKTsNCi0gICAgYnJlYWs7DQotICBkZWZhdWx0Og0KLSAgICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19NSVNDX01BUktFUiwgY2luZm8tPnVucmVhZF9tYXJrZXIsDQotCSAgICAgKGludCkgKGRhdGFfbGVuZ3RoICsgbGVuZ3RoKSk7DQotICAgIGJyZWFrOw0KLSAgfQ0KLQ0KLSAgLyogc2tpcCBhbnkgcmVtYWluaW5nIGRhdGEgLS0gY291bGQgYmUgbG90cyAqLw0KLSAgSU5QVVRfU1lOQyhjaW5mbyk7CQkvKiBkbyBiZWZvcmUgc2tpcF9pbnB1dF9kYXRhICovDQotICBpZiAobGVuZ3RoID4gMCkNCi0gICAgKCpjaW5mby0+c3JjLT5za2lwX2lucHV0X2RhdGEpIChjaW5mbywgKGxvbmcpIGxlbmd0aCk7DQotDQotICByZXR1cm4gVFJVRTsNCi19DQotDQotI2VuZGlmIC8qIFNBVkVfTUFSS0VSU19TVVBQT1JURUQgKi8NCi0NCi0NCi1NRVRIT0RERUYoYm9vbGVhbikNCi1za2lwX3ZhcmlhYmxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLS8qIFNraXAgb3ZlciBhbiB1bmtub3duIG9yIHVuaW50ZXJlc3RpbmcgdmFyaWFibGUtbGVuZ3RoIG1hcmtlciAqLw0KLXsNCi0gIElOVDMyIGxlbmd0aDsNCi0gIElOUFVUX1ZBUlMoY2luZm8pOw0KLQ0KLSAgSU5QVVRfMkJZVEVTKGNpbmZvLCBsZW5ndGgsIHJldHVybiBGQUxTRSk7DQotICBsZW5ndGggLT0gMjsNCi0gIA0KLSAgVFJBQ0VNUzIoY2luZm8sIDEsIEpUUkNfTUlTQ19NQVJLRVIsIGNpbmZvLT51bnJlYWRfbWFya2VyLCAoaW50KSBsZW5ndGgpOw0KLQ0KLSAgSU5QVVRfU1lOQyhjaW5mbyk7CQkvKiBkbyBiZWZvcmUgc2tpcF9pbnB1dF9kYXRhICovDQotICBpZiAobGVuZ3RoID4gMCkNCi0gICAgKCpjaW5mby0+c3JjLT5za2lwX2lucHV0X2RhdGEpIChjaW5mbywgKGxvbmcpIGxlbmd0aCk7DQotDQotICByZXR1cm4gVFJVRTsNCi19DQotDQotDQotLyoNCi0gKiBGaW5kIHRoZSBuZXh0IEpQRUcgbWFya2VyLCBzYXZlIGl0IGluIGNpbmZvLT51bnJlYWRfbWFya2VyLg0KLSAqIFJldHVybnMgRkFMU0UgaWYgaGFkIHRvIHN1c3BlbmQgYmVmb3JlIHJlYWNoaW5nIGEgbWFya2VyOw0KLSAqIGluIHRoYXQgY2FzZSBjaW5mby0+dW5yZWFkX21hcmtlciBpcyB1bmNoYW5nZWQuDQotICoNCi0gKiBOb3RlIHRoYXQgdGhlIHJlc3VsdCBtaWdodCBub3QgYmUgYSB2YWxpZCBtYXJrZXIgY29kZSwNCi0gKiBidXQgaXQgd2lsbCBuZXZlciBiZSAwIG9yIEZGLg0KLSAqLw0KLQ0KLUxPQ0FMKGJvb2xlYW4pDQotbmV4dF9tYXJrZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAgaW50IGM7DQotICBJTlBVVF9WQVJTKGNpbmZvKTsNCi0NCi0gIGZvciAoOzspIHsNCi0gICAgSU5QVVRfQllURShjaW5mbywgYywgcmV0dXJuIEZBTFNFKTsNCi0gICAgLyogU2tpcCBhbnkgbm9uLUZGIGJ5dGVzLg0KLSAgICAgKiBUaGlzIG1heSBsb29rIGEgYml0IGluZWZmaWNpZW50LCBidXQgaXQgd2lsbCBub3Qgb2NjdXIgaW4gYSB2YWxpZCBmaWxlLg0KLSAgICAgKiBXZSBzeW5jIGFmdGVyIGVhY2ggZGlzY2FyZGVkIGJ5dGUgc28gdGhhdCBhIHN1c3BlbmRpbmcgZGF0YSBzb3VyY2UNCi0gICAgICogY2FuIGRpc2NhcmQgdGhlIGJ5dGUgZnJvbSBpdHMgYnVmZmVyLg0KLSAgICAgKi8NCi0gICAgd2hpbGUgKGMgIT0gMHhGRikgew0KLSAgICAgIGNpbmZvLT5tYXJrZXItPmRpc2NhcmRlZF9ieXRlcysrOw0KLSAgICAgIElOUFVUX1NZTkMoY2luZm8pOw0KLSAgICAgIElOUFVUX0JZVEUoY2luZm8sIGMsIHJldHVybiBGQUxTRSk7DQotICAgIH0NCi0gICAgLyogVGhpcyBsb29wIHN3YWxsb3dzIGFueSBkdXBsaWNhdGUgRkYgYnl0ZXMuICBFeHRyYSBGRnMgYXJlIGxlZ2FsIGFzDQotICAgICAqIHBhZCBieXRlcywgc28gZG9uJ3QgY291bnQgdGhlbSBpbiBkaXNjYXJkZWRfYnl0ZXMuICBXZSBhc3N1bWUgdGhlcmUNCi0gICAgICogd2lsbCBub3QgYmUgc28gbWFueSBjb25zZWN1dGl2ZSBGRiBieXRlcyBhcyB0byBvdmVyZmxvdyBhIHN1c3BlbmRpbmcNCi0gICAgICogZGF0YSBzb3VyY2UncyBpbnB1dCBidWZmZXIuDQotICAgICAqLw0KLSAgICBkbyB7DQotICAgICAgSU5QVVRfQllURShjaW5mbywgYywgcmV0dXJuIEZBTFNFKTsNCi0gICAgfSB3aGlsZSAoYyA9PSAweEZGKTsNCi0gICAgaWYgKGMgIT0gMCkNCi0gICAgICBicmVhazsJCQkvKiBmb3VuZCBhIHZhbGlkIG1hcmtlciwgZXhpdCBsb29wICovDQotICAgIC8qIFJlYWNoIGhlcmUgaWYgd2UgZm91bmQgYSBzdHVmZmVkLXplcm8gZGF0YSBzZXF1ZW5jZSAoRkYvMDApLg0KLSAgICAgKiBEaXNjYXJkIGl0IGFuZCBsb29wIGJhY2sgdG8gdHJ5IGFnYWluLg0KLSAgICAgKi8NCi0gICAgY2luZm8tPm1hcmtlci0+ZGlzY2FyZGVkX2J5dGVzICs9IDI7DQotICAgIElOUFVUX1NZTkMoY2luZm8pOw0KLSAgfQ0KLQ0KLSAgaWYgKGNpbmZvLT5tYXJrZXItPmRpc2NhcmRlZF9ieXRlcyAhPSAwKSB7DQotICAgIFdBUk5NUzIoY2luZm8sIEpXUk5fRVhUUkFORU9VU19EQVRBLCBjaW5mby0+bWFya2VyLT5kaXNjYXJkZWRfYnl0ZXMsIGMpOw0KLSAgICBjaW5mby0+bWFya2VyLT5kaXNjYXJkZWRfYnl0ZXMgPSAwOw0KLSAgfQ0KLQ0KLSAgY2luZm8tPnVucmVhZF9tYXJrZXIgPSBjOw0KLQ0KLSAgSU5QVVRfU1lOQyhjaW5mbyk7DQotICByZXR1cm4gVFJVRTsNCi19DQotDQotDQotTE9DQUwoYm9vbGVhbikNCi1maXJzdF9tYXJrZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pDQotLyogTGlrZSBuZXh0X21hcmtlciwgYnV0IHVzZWQgdG8gb2J0YWluIHRoZSBpbml0aWFsIFNPSSBtYXJrZXIuICovDQotLyogRm9yIHRoaXMgbWFya2VyLCB3ZSBkbyBub3QgYWxsb3cgcHJlY2VkaW5nIGdhcmJhZ2Ugb3IgZmlsbDsgb3RoZXJ3aXNlLA0KLSAqIHdlIG1pZ2h0IHdlbGwgc2NhbiBhbiBlbnRpcmUgaW5wdXQgZmlsZSBiZWZvcmUgcmVhbGl6aW5nIGl0IGFpbid0IEpQRUcuDQotICogSWYgYW4gYXBwbGljYXRpb24gd2FudHMgdG8gcHJvY2VzcyBub24tSkZJRiBmaWxlcywgaXQgbXVzdCBzZWVrIHRvIHRoZQ0KLSAqIFNPSSBiZWZvcmUgY2FsbGluZyB0aGUgSlBFRyBsaWJyYXJ5Lg0KLSAqLw0KLXsNCi0gIGludCBjLCBjMjsNCi0gIElOUFVUX1ZBUlMoY2luZm8pOw0KLQ0KLSAgSU5QVVRfQllURShjaW5mbywgYywgcmV0dXJuIEZBTFNFKTsNCi0gIElOUFVUX0JZVEUoY2luZm8sIGMyLCByZXR1cm4gRkFMU0UpOw0KLSAgaWYgKGMgIT0gMHhGRiB8fCBjMiAhPSAoaW50KSBNX1NPSSkNCi0gICAgRVJSRVhJVDIoY2luZm8sIEpFUlJfTk9fU09JLCBjLCBjMik7DQotDQotICBjaW5mby0+dW5yZWFkX21hcmtlciA9IGMyOw0KLQ0KLSAgSU5QVVRfU1lOQyhjaW5mbyk7DQotICByZXR1cm4gVFJVRTsNCi19DQotDQotDQotLyoNCi0gKiBSZWFkIG1hcmtlcnMgdW50aWwgU09TIG9yIEVPSS4NCi0gKg0KLSAqIFJldHVybnMgc2FtZSBjb2RlcyBhcyBhcmUgZGVmaW5lZCBmb3IganBlZ19jb25zdW1lX2lucHV0Og0KLSAqIEpQRUdfU1VTUEVOREVELCBKUEVHX1JFQUNIRURfU09TLCBvciBKUEVHX1JFQUNIRURfRU9JLg0KLSAqLw0KLQ0KLU1FVEhPRERFRihpbnQpDQotcmVhZF9tYXJrZXJzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIC8qIE91dGVyIGxvb3AgcmVwZWF0cyBvbmNlIGZvciBlYWNoIG1hcmtlci4gKi8NCi0gIGZvciAoOzspIHsNCi0gICAgLyogQ29sbGVjdCB0aGUgbWFya2VyIHByb3BlciwgdW5sZXNzIHdlIGFscmVhZHkgZGlkLiAqLw0KLSAgICAvKiBOQjogZmlyc3RfbWFya2VyKCkgZW5mb3JjZXMgdGhlIHJlcXVpcmVtZW50IHRoYXQgU09JIGFwcGVhciBmaXJzdC4gKi8NCi0gICAgaWYgKGNpbmZvLT51bnJlYWRfbWFya2VyID09IDApIHsNCi0gICAgICBpZiAoISBjaW5mby0+bWFya2VyLT5zYXdfU09JKSB7DQotCWlmICghIGZpcnN0X21hcmtlcihjaW5mbykpDQotCSAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOw0KLSAgICAgIH0gZWxzZSB7DQotCWlmICghIG5leHRfbWFya2VyKGNpbmZvKSkNCi0JICByZXR1cm4gSlBFR19TVVNQRU5ERUQ7DQotICAgICAgfQ0KLSAgICB9DQotICAgIC8qIEF0IHRoaXMgcG9pbnQgY2luZm8tPnVucmVhZF9tYXJrZXIgY29udGFpbnMgdGhlIG1hcmtlciBjb2RlIGFuZCB0aGUNCi0gICAgICogaW5wdXQgcG9pbnQgaXMganVzdCBwYXN0IHRoZSBtYXJrZXIgcHJvcGVyLCBidXQgYmVmb3JlIGFueSBwYXJhbWV0ZXJzLg0KLSAgICAgKiBBIHN1c3BlbnNpb24gd2lsbCBjYXVzZSB1cyB0byByZXR1cm4gd2l0aCB0aGlzIHN0YXRlIHN0aWxsIHRydWUuDQotICAgICAqLw0KLSAgICBzd2l0Y2ggKGNpbmZvLT51bnJlYWRfbWFya2VyKSB7DQotICAgIGNhc2UgTV9TT0k6DQotICAgICAgaWYgKCEgZ2V0X3NvaShjaW5mbykpDQotCXJldHVybiBKUEVHX1NVU1BFTkRFRDsNCi0gICAgICBicmVhazsNCi0NCi0gICAgY2FzZSBNX1NPRjA6CQkvKiBCYXNlbGluZSAqLw0KLSAgICBjYXNlIE1fU09GMToJCS8qIEV4dGVuZGVkIHNlcXVlbnRpYWwsIEh1ZmZtYW4gKi8NCi0gICAgICBpZiAoISBnZXRfc29mKGNpbmZvLCBGQUxTRSwgRkFMU0UpKQ0KLQlyZXR1cm4gSlBFR19TVVNQRU5ERUQ7DQotICAgICAgYnJlYWs7DQotDQotICAgIGNhc2UgTV9TT0YyOgkJLyogUHJvZ3Jlc3NpdmUsIEh1ZmZtYW4gKi8NCi0gICAgICBpZiAoISBnZXRfc29mKGNpbmZvLCBUUlVFLCBGQUxTRSkpDQotCXJldHVybiBKUEVHX1NVU1BFTkRFRDsNCi0gICAgICBicmVhazsNCi0NCi0gICAgY2FzZSBNX1NPRjk6CQkvKiBFeHRlbmRlZCBzZXF1ZW50aWFsLCBhcml0aG1ldGljICovDQotICAgICAgaWYgKCEgZ2V0X3NvZihjaW5mbywgRkFMU0UsIFRSVUUpKQ0KLQlyZXR1cm4gSlBFR19TVVNQRU5ERUQ7DQotICAgICAgYnJlYWs7DQotDQotICAgIGNhc2UgTV9TT0YxMDoJCS8qIFByb2dyZXNzaXZlLCBhcml0aG1ldGljICovDQotICAgICAgaWYgKCEgZ2V0X3NvZihjaW5mbywgVFJVRSwgVFJVRSkpDQotCXJldHVybiBKUEVHX1NVU1BFTkRFRDsNCi0gICAgICBicmVhazsNCi0NCi0gICAgLyogQ3VycmVudGx5IHVuc3VwcG9ydGVkIFNPRm4gdHlwZXMgKi8NCi0gICAgY2FzZSBNX1NPRjM6CQkvKiBMb3NzbGVzcywgSHVmZm1hbiAqLw0KLSAgICBjYXNlIE1fU09GNToJCS8qIERpZmZlcmVudGlhbCBzZXF1ZW50aWFsLCBIdWZmbWFuICovDQotICAgIGNhc2UgTV9TT0Y2OgkJLyogRGlmZmVyZW50aWFsIHByb2dyZXNzaXZlLCBIdWZmbWFuICovDQotICAgIGNhc2UgTV9TT0Y3OgkJLyogRGlmZmVyZW50aWFsIGxvc3NsZXNzLCBIdWZmbWFuICovDQotICAgIGNhc2UgTV9KUEc6CQkJLyogUmVzZXJ2ZWQgZm9yIEpQRUcgZXh0ZW5zaW9ucyAqLw0KLSAgICBjYXNlIE1fU09GMTE6CQkvKiBMb3NzbGVzcywgYXJpdGhtZXRpYyAqLw0KLSAgICBjYXNlIE1fU09GMTM6CQkvKiBEaWZmZXJlbnRpYWwgc2VxdWVudGlhbCwgYXJpdGhtZXRpYyAqLw0KLSAgICBjYXNlIE1fU09GMTQ6CQkvKiBEaWZmZXJlbnRpYWwgcHJvZ3Jlc3NpdmUsIGFyaXRobWV0aWMgKi8NCi0gICAgY2FzZSBNX1NPRjE1OgkJLyogRGlmZmVyZW50aWFsIGxvc3NsZXNzLCBhcml0aG1ldGljICovDQotICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfU09GX1VOU1VQUE9SVEVELCBjaW5mby0+dW5yZWFkX21hcmtlcik7DQotICAgICAgYnJlYWs7DQotDQotICAgIGNhc2UgTV9TT1M6DQotICAgICAgaWYgKCEgZ2V0X3NvcyhjaW5mbykpDQotCXJldHVybiBKUEVHX1NVU1BFTkRFRDsNCi0gICAgICBjaW5mby0+dW5yZWFkX21hcmtlciA9IDA7CS8qIHByb2Nlc3NlZCB0aGUgbWFya2VyICovDQotICAgICAgcmV0dXJuIEpQRUdfUkVBQ0hFRF9TT1M7DQotICAgIA0KLSAgICBjYXNlIE1fRU9JOg0KLSAgICAgIFRSQUNFTVMoY2luZm8sIDEsIEpUUkNfRU9JKTsNCi0gICAgICBjaW5mby0+dW5yZWFkX21hcmtlciA9IDA7CS8qIHByb2Nlc3NlZCB0aGUgbWFya2VyICovDQotICAgICAgcmV0dXJuIEpQRUdfUkVBQ0hFRF9FT0k7DQotICAgICAgDQotICAgIGNhc2UgTV9EQUM6DQotICAgICAgaWYgKCEgZ2V0X2RhYyhjaW5mbykpDQotCXJldHVybiBKUEVHX1NVU1BFTkRFRDsNCi0gICAgICBicmVhazsNCi0gICAgICANCi0gICAgY2FzZSBNX0RIVDoNCi0gICAgICBpZiAoISBnZXRfZGh0KGNpbmZvKSkNCi0JcmV0dXJuIEpQRUdfU1VTUEVOREVEOw0KLSAgICAgIGJyZWFrOw0KLSAgICAgIA0KLSAgICBjYXNlIE1fRFFUOg0KLSAgICAgIGlmICghIGdldF9kcXQoY2luZm8pKQ0KLQlyZXR1cm4gSlBFR19TVVNQRU5ERUQ7DQotICAgICAgYnJlYWs7DQotICAgICAgDQotICAgIGNhc2UgTV9EUkk6DQotICAgICAgaWYgKCEgZ2V0X2RyaShjaW5mbykpDQotCXJldHVybiBKUEVHX1NVU1BFTkRFRDsNCi0gICAgICBicmVhazsNCi0gICAgICANCi0gICAgY2FzZSBNX0FQUDA6DQotICAgIGNhc2UgTV9BUFAxOg0KLSAgICBjYXNlIE1fQVBQMjoNCi0gICAgY2FzZSBNX0FQUDM6DQotICAgIGNhc2UgTV9BUFA0Og0KLSAgICBjYXNlIE1fQVBQNToNCi0gICAgY2FzZSBNX0FQUDY6DQotICAgIGNhc2UgTV9BUFA3Og0KLSAgICBjYXNlIE1fQVBQODoNCi0gICAgY2FzZSBNX0FQUDk6DQotICAgIGNhc2UgTV9BUFAxMDoNCi0gICAgY2FzZSBNX0FQUDExOg0KLSAgICBjYXNlIE1fQVBQMTI6DQotICAgIGNhc2UgTV9BUFAxMzoNCi0gICAgY2FzZSBNX0FQUDE0Og0KLSAgICBjYXNlIE1fQVBQMTU6DQotICAgICAgaWYgKCEgKCooKG15X21hcmtlcl9wdHIpIGNpbmZvLT5tYXJrZXIpLT5wcm9jZXNzX0FQUG5bDQotCQljaW5mby0+dW5yZWFkX21hcmtlciAtIChpbnQpIE1fQVBQMF0pIChjaW5mbykpDQotCXJldHVybiBKUEVHX1NVU1BFTkRFRDsNCi0gICAgICBicmVhazsNCi0gICAgICANCi0gICAgY2FzZSBNX0NPTToNCi0gICAgICBpZiAoISAoKigobXlfbWFya2VyX3B0cikgY2luZm8tPm1hcmtlciktPnByb2Nlc3NfQ09NKSAoY2luZm8pKQ0KLQlyZXR1cm4gSlBFR19TVVNQRU5ERUQ7DQotICAgICAgYnJlYWs7DQotDQotICAgIGNhc2UgTV9SU1QwOgkJLyogdGhlc2UgYXJlIGFsbCBwYXJhbWV0ZXJsZXNzICovDQotICAgIGNhc2UgTV9SU1QxOg0KLSAgICBjYXNlIE1fUlNUMjoNCi0gICAgY2FzZSBNX1JTVDM6DQotICAgIGNhc2UgTV9SU1Q0Og0KLSAgICBjYXNlIE1fUlNUNToNCi0gICAgY2FzZSBNX1JTVDY6DQotICAgIGNhc2UgTV9SU1Q3Og0KLSAgICBjYXNlIE1fVEVNOg0KLSAgICAgIFRSQUNFTVMxKGNpbmZvLCAxLCBKVFJDX1BBUk1MRVNTX01BUktFUiwgY2luZm8tPnVucmVhZF9tYXJrZXIpOw0KLSAgICAgIGJyZWFrOw0KLQ0KLSAgICBjYXNlIE1fRE5MOgkJCS8qIElnbm9yZSBETkwgLi4uIHBlcmhhcHMgdGhlIHdyb25nIHRoaW5nICovDQotICAgICAgaWYgKCEgc2tpcF92YXJpYWJsZShjaW5mbykpDQotCXJldHVybiBKUEVHX1NVU1BFTkRFRDsNCi0gICAgICBicmVhazsNCi0NCi0gICAgZGVmYXVsdDoJCQkvKiBtdXN0IGJlIERIUCwgRVhQLCBKUEduLCBvciBSRVNuICovDQotICAgICAgLyogRm9yIG5vdywgd2UgdHJlYXQgdGhlIHJlc2VydmVkIG1hcmtlcnMgYXMgZmF0YWwgZXJyb3JzIHNpbmNlIHRoZXkgYXJlDQotICAgICAgICogbGlrZWx5IHRvIGJlIHVzZWQgdG8gc2lnbmFsIGluY29tcGF0aWJsZSBKUEVHIFBhcnQgMyBleHRlbnNpb25zLg0KLSAgICAgICAqIE9uY2UgdGhlIEpQRUcgMyB2ZXJzaW9uLW51bWJlciBtYXJrZXIgaXMgd2VsbCBkZWZpbmVkLCB0aGlzIGNvZGUNCi0gICAgICAgKiBvdWdodCB0byBjaGFuZ2UhDQotICAgICAgICovDQotICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfVU5LTk9XTl9NQVJLRVIsIGNpbmZvLT51bnJlYWRfbWFya2VyKTsNCi0gICAgICBicmVhazsNCi0gICAgfQ0KLSAgICAvKiBTdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIG1hcmtlciwgc28gcmVzZXQgc3RhdGUgdmFyaWFibGUgKi8NCi0gICAgY2luZm8tPnVucmVhZF9tYXJrZXIgPSAwOw0KLSAgfSAvKiBlbmQgbG9vcCAqLw0KLX0NCi0NCi0NCi0vKg0KLSAqIFJlYWQgYSByZXN0YXJ0IG1hcmtlciwgd2hpY2ggaXMgZXhwZWN0ZWQgdG8gYXBwZWFyIG5leHQgaW4gdGhlIGRhdGFzdHJlYW07DQotICogaWYgdGhlIG1hcmtlciBpcyBub3QgdGhlcmUsIHRha2UgYXBwcm9wcmlhdGUgcmVjb3ZlcnkgYWN0aW9uLg0KLSAqIFJldHVybnMgRkFMU0UgaWYgc3VzcGVuc2lvbiBpcyByZXF1aXJlZC4NCi0gKg0KLSAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBlbnRyb3B5IGRlY29kZXIgYWZ0ZXIgaXQgaGFzIHJlYWQgYW4gYXBwcm9wcmlhdGUNCi0gKiBudW1iZXIgb2YgTUNVcy4gIGNpbmZvLT51bnJlYWRfbWFya2VyIG1heSBiZSBub256ZXJvIGlmIHRoZSBlbnRyb3B5IGRlY29kZXINCi0gKiBoYXMgYWxyZWFkeSByZWFkIGEgbWFya2VyIGZyb20gdGhlIGRhdGEgc291cmNlLiAgVW5kZXIgbm9ybWFsIGNvbmRpdGlvbnMNCi0gKiBjaW5mby0+dW5yZWFkX21hcmtlciB3aWxsIGJlIHJlc2V0IHRvIDAgYmVmb3JlIHJldHVybmluZzsgaWYgbm90IHJlc2V0LA0KLSAqIGl0IGhvbGRzIGEgbWFya2VyIHdoaWNoIHRoZSBkZWNvZGVyIHdpbGwgYmUgdW5hYmxlIHRvIHJlYWQgcGFzdC4NCi0gKi8NCi0NCi1NRVRIT0RERUYoYm9vbGVhbikNCi1yZWFkX3Jlc3RhcnRfbWFya2VyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIC8qIE9idGFpbiBhIG1hcmtlciB1bmxlc3Mgd2UgYWxyZWFkeSBkaWQuICovDQotICAvKiBOb3RlIHRoYXQgbmV4dF9tYXJrZXIgd2lsbCBjb21wbGFpbiBpZiBpdCBza2lwcyBhbnkgZGF0YS4gKi8NCi0gIGlmIChjaW5mby0+dW5yZWFkX21hcmtlciA9PSAwKSB7DQotICAgIGlmICghIG5leHRfbWFya2VyKGNpbmZvKSkNCi0gICAgICByZXR1cm4gRkFMU0U7DQotICB9DQotDQotICBpZiAoY2luZm8tPnVucmVhZF9tYXJrZXIgPT0NCi0gICAgICAoKGludCkgTV9SU1QwICsgY2luZm8tPm1hcmtlci0+bmV4dF9yZXN0YXJ0X251bSkpIHsNCi0gICAgLyogTm9ybWFsIGNhc2UgLS0tIHN3YWxsb3cgdGhlIG1hcmtlciBhbmQgbGV0IGVudHJvcHkgZGVjb2RlciBjb250aW51ZSAqLw0KLSAgICBUUkFDRU1TMShjaW5mbywgMywgSlRSQ19SU1QsIGNpbmZvLT5tYXJrZXItPm5leHRfcmVzdGFydF9udW0pOw0KLSAgICBjaW5mby0+dW5yZWFkX21hcmtlciA9IDA7DQotICB9IGVsc2Ugew0KLSAgICAvKiBVaC1vaCwgdGhlIHJlc3RhcnQgbWFya2VycyBoYXZlIGJlZW4gbWVzc2VkIHVwLiAqLw0KLSAgICAvKiBMZXQgdGhlIGRhdGEgc291cmNlIG1hbmFnZXIgZGV0ZXJtaW5lIGhvdyB0byByZXN5bmMuICovDQotICAgIGlmICghICgqY2luZm8tPnNyYy0+cmVzeW5jX3RvX3Jlc3RhcnQpIChjaW5mbywNCi0JCQkJCSAgICBjaW5mby0+bWFya2VyLT5uZXh0X3Jlc3RhcnRfbnVtKSkNCi0gICAgICByZXR1cm4gRkFMU0U7DQotICB9DQotDQotICAvKiBVcGRhdGUgbmV4dC1yZXN0YXJ0IHN0YXRlICovDQotICBjaW5mby0+bWFya2VyLT5uZXh0X3Jlc3RhcnRfbnVtID0gKGNpbmZvLT5tYXJrZXItPm5leHRfcmVzdGFydF9udW0gKyAxKSAmIDc7DQotDQotICByZXR1cm4gVFJVRTsNCi19DQotDQotDQotLyoNCi0gKiBUaGlzIGlzIHRoZSBkZWZhdWx0IHJlc3luY190b19yZXN0YXJ0IG1ldGhvZCBmb3IgZGF0YSBzb3VyY2UgbWFuYWdlcnMNCi0gKiB0byB1c2UgaWYgdGhleSBkb24ndCBoYXZlIGFueSBiZXR0ZXIgYXBwcm9hY2guICBTb21lIGRhdGEgc291cmNlIG1hbmFnZXJzDQotICogbWF5IGJlIGFibGUgdG8gYmFjayB1cCwgb3IgbWF5IGhhdmUgYWRkaXRpb25hbCBrbm93bGVkZ2UgYWJvdXQgdGhlIGRhdGENCi0gKiB3aGljaCBwZXJtaXRzIGEgbW9yZSBpbnRlbGxpZ2VudCByZWNvdmVyeSBzdHJhdGVneTsgc3VjaCBtYW5hZ2VycyB3b3VsZA0KLSAqIHByZXN1bWFibHkgc3VwcGx5IHRoZWlyIG93biByZXN5bmMgbWV0aG9kLg0KLSAqDQotICogcmVhZF9yZXN0YXJ0X21hcmtlciBjYWxscyByZXN5bmNfdG9fcmVzdGFydCBpZiBpdCBmaW5kcyBhIG1hcmtlciBvdGhlciB0aGFuDQotICogdGhlIHJlc3RhcnQgbWFya2VyIGl0IHdhcyBleHBlY3RpbmcuICAoVGhpcyBjb2RlIGlzICpub3QqIHVzZWQgdW5sZXNzDQotICogYSBub256ZXJvIHJlc3RhcnQgaW50ZXJ2YWwgaGFzIGJlZW4gZGVjbGFyZWQuKSAgY2luZm8tPnVucmVhZF9tYXJrZXIgaXMNCi0gKiB0aGUgbWFya2VyIGNvZGUgYWN0dWFsbHkgZm91bmQgKG1pZ2h0IGJlIGFueXRoaW5nLCBleGNlcHQgMCBvciBGRikuDQotICogVGhlIGRlc2lyZWQgcmVzdGFydCBtYXJrZXIgbnVtYmVyICgwLi43KSBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuDQotICogVGhpcyByb3V0aW5lIGlzIHN1cHBvc2VkIHRvIGFwcGx5IHdoYXRldmVyIGVycm9yIHJlY292ZXJ5IHN0cmF0ZWd5IHNlZW1zDQotICogYXBwcm9wcmlhdGUgaW4gb3JkZXIgdG8gcG9zaXRpb24gdGhlIGlucHV0IHN0cmVhbSB0byB0aGUgbmV4dCBkYXRhIHNlZ21lbnQuDQotICogTm90ZSB0aGF0IGNpbmZvLT51bnJlYWRfbWFya2VyIGlzIHRyZWF0ZWQgYXMgYSBtYXJrZXIgYXBwZWFyaW5nIGJlZm9yZQ0KLSAqIHRoZSBjdXJyZW50IGRhdGEtc291cmNlIGlucHV0IHBvaW50OyB1c3VhbGx5IGl0IHNob3VsZCBiZSByZXNldCB0byB6ZXJvDQotICogYmVmb3JlIHJldHVybmluZy4NCi0gKiBSZXR1cm5zIEZBTFNFIGlmIHN1c3BlbnNpb24gaXMgcmVxdWlyZWQuDQotICoNCi0gKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIHN1YnN0YW50aWFsbHkgY29uc3RyYWluZWQgYnkgd2FudGluZyB0byB0cmVhdCB0aGUNCi0gKiBpbnB1dCBhcyBhIGRhdGEgc3RyZWFtOyB0aGlzIG1lYW5zIHdlIGNhbid0IGJhY2sgdXAuICBUaGVyZWZvcmUsIHdlIGhhdmUNCi0gKiBvbmx5IHRoZSBmb2xsb3dpbmcgYWN0aW9ucyB0byB3b3JrIHdpdGg6DQotICogICAxLiBTaW1wbHkgZGlzY2FyZCB0aGUgbWFya2VyIGFuZCBsZXQgdGhlIGVudHJvcHkgZGVjb2RlciByZXN1bWUgYXQgbmV4dA0KLSAqICAgICAgYnl0ZSBvZiBmaWxlLg0KLSAqICAgMi4gUmVhZCBmb3J3YXJkIHVudGlsIHdlIGZpbmQgYW5vdGhlciBtYXJrZXIsIGRpc2NhcmRpbmcgaW50ZXJ2ZW5pbmcNCi0gKiAgICAgIGRhdGEuICAoSW4gdGhlb3J5IHdlIGNvdWxkIGxvb2sgYWhlYWQgd2l0aGluIHRoZSBjdXJyZW50IGJ1ZmZlcmxvYWQsDQotICogICAgICB3aXRob3V0IGhhdmluZyB0byBkaXNjYXJkIGRhdGEgaWYgd2UgZG9uJ3QgZmluZCB0aGUgZGVzaXJlZCBtYXJrZXIuDQotICogICAgICBUaGlzIGlkZWEgaXMgbm90IGltcGxlbWVudGVkIGhlcmUsIGluIHBhcnQgYmVjYXVzZSBpdCBtYWtlcyBiZWhhdmlvcg0KLSAqICAgICAgZGVwZW5kZW50IG9uIGJ1ZmZlciBzaXplIGFuZCBjaGFuY2UgYnVmZmVyLWJvdW5kYXJ5IHBvc2l0aW9ucy4pDQotICogICAzLiBMZWF2ZSB0aGUgbWFya2VyIHVucmVhZCAoYnkgZmFpbGluZyB0byB6ZXJvIGNpbmZvLT51bnJlYWRfbWFya2VyKS4NCi0gKiAgICAgIFRoaXMgd2lsbCBjYXVzZSB0aGUgZW50cm9weSBkZWNvZGVyIHRvIHByb2Nlc3MgYW4gZW1wdHkgZGF0YSBzZWdtZW50LA0KLSAqICAgICAgaW5zZXJ0aW5nIGR1bW15IHplcm9lcywgYW5kIHRoZW4gd2Ugd2lsbCByZXByb2Nlc3MgdGhlIG1hcmtlci4NCi0gKg0KLSAqICMyIGlzIGFwcHJvcHJpYXRlIGlmIHdlIHRoaW5rIHRoZSBkZXNpcmVkIG1hcmtlciBsaWVzIGFoZWFkLCB3aGlsZSAjMyBpcw0KLSAqIGFwcHJvcHJpYXRlIGlmIHRoZSBmb3VuZCBtYXJrZXIgaXMgYSBmdXR1cmUgcmVzdGFydCBtYXJrZXIgKGluZGljYXRpbmcNCi0gKiB0aGF0IHdlIGhhdmUgbWlzc2VkIHRoZSBkZXNpcmVkIHJlc3RhcnQgbWFya2VyLCBwcm9iYWJseSBiZWNhdXNlIGl0IGdvdA0KLSAqIGNvcnJ1cHRlZCkuDQotICogV2UgYXBwbHkgIzIgb3IgIzMgaWYgdGhlIGZvdW5kIG1hcmtlciBpcyBhIHJlc3RhcnQgbWFya2VyIG5vIG1vcmUgdGhhbg0KLSAqIHR3byBjb3VudHMgYmVoaW5kIG9yIGFoZWFkIG9mIHRoZSBleHBlY3RlZCBvbmUuICBXZSBhbHNvIGFwcGx5ICMyIGlmIHRoZQ0KLSAqIGZvdW5kIG1hcmtlciBpcyBub3QgYSBsZWdhbCBKUEVHIG1hcmtlciBjb2RlIChpdCdzIGNlcnRhaW5seSBib2d1cyBkYXRhKS4NCi0gKiBJZiB0aGUgZm91bmQgbWFya2VyIGlzIGEgcmVzdGFydCBtYXJrZXIgbW9yZSB0aGFuIDIgY291bnRzIGF3YXksIHdlIGRvICMxDQotICogKHRvbyBtdWNoIHJpc2sgdGhhdCB0aGUgbWFya2VyIGlzIGVycm9uZW91czsgd2l0aCBsdWNrIHdlIHdpbGwgYmUgYWJsZSB0bw0KLSAqIHJlc3luYyBhdCBzb21lIGZ1dHVyZSBwb2ludCkuDQotICogRm9yIGFueSB2YWxpZCBub24tcmVzdGFydCBKUEVHIG1hcmtlciwgd2UgYXBwbHkgIzMuICBUaGlzIGtlZXBzIHVzIGZyb20NCi0gKiBvdmVycnVubmluZyB0aGUgZW5kIG9mIGEgc2Nhbi4gIEFuIGltcGxlbWVudGF0aW9uIGxpbWl0ZWQgdG8gc2luZ2xlLXNjYW4NCi0gKiBmaWxlcyBtaWdodCBmaW5kIGl0IGJldHRlciB0byBhcHBseSAjMiBmb3IgbWFya2VycyBvdGhlciB0aGFuIEVPSSwgc2luY2UNCi0gKiBhbnkgb3RoZXIgbWFya2VyIHdvdWxkIGhhdmUgdG8gYmUgYm9ndXMgZGF0YSBpbiB0aGF0IGNhc2UuDQotICovDQotDQotR0xPQkFMKGJvb2xlYW4pDQotanBlZ19yZXN5bmNfdG9fcmVzdGFydCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IGRlc2lyZWQpDQotew0KLSAgaW50IG1hcmtlciA9IGNpbmZvLT51bnJlYWRfbWFya2VyOw0KLSAgaW50IGFjdGlvbiA9IDE7DQotICANCi0gIC8qIEFsd2F5cyBwdXQgdXAgYSB3YXJuaW5nLiAqLw0KLSAgV0FSTk1TMihjaW5mbywgSldSTl9NVVNUX1JFU1lOQywgbWFya2VyLCBkZXNpcmVkKTsNCi0gIA0KLSAgLyogT3V0ZXIgbG9vcCBoYW5kbGVzIHJlcGVhdGVkIGRlY2lzaW9uIGFmdGVyIHNjYW5uaW5nIGZvcndhcmQuICovDQotICBmb3IgKDs7KSB7DQotICAgIGlmIChtYXJrZXIgPCAoaW50KSBNX1NPRjApDQotICAgICAgYWN0aW9uID0gMjsJCS8qIGludmFsaWQgbWFya2VyICovDQotICAgIGVsc2UgaWYgKG1hcmtlciA8IChpbnQpIE1fUlNUMCB8fCBtYXJrZXIgPiAoaW50KSBNX1JTVDcpDQotICAgICAgYWN0aW9uID0gMzsJCS8qIHZhbGlkIG5vbi1yZXN0YXJ0IG1hcmtlciAqLw0KLSAgICBlbHNlIHsNCi0gICAgICBpZiAobWFya2VyID09ICgoaW50KSBNX1JTVDAgKyAoKGRlc2lyZWQrMSkgJiA3KSkgfHwNCi0JICBtYXJrZXIgPT0gKChpbnQpIE1fUlNUMCArICgoZGVzaXJlZCsyKSAmIDcpKSkNCi0JYWN0aW9uID0gMzsJCS8qIG9uZSBvZiB0aGUgbmV4dCB0d28gZXhwZWN0ZWQgcmVzdGFydHMgKi8NCi0gICAgICBlbHNlIGlmIChtYXJrZXIgPT0gKChpbnQpIE1fUlNUMCArICgoZGVzaXJlZC0xKSAmIDcpKSB8fA0KLQkgICAgICAgbWFya2VyID09ICgoaW50KSBNX1JTVDAgKyAoKGRlc2lyZWQtMikgJiA3KSkpDQotCWFjdGlvbiA9IDI7CQkvKiBhIHByaW9yIHJlc3RhcnQsIHNvIGFkdmFuY2UgKi8NCi0gICAgICBlbHNlDQotCWFjdGlvbiA9IDE7CQkvKiBkZXNpcmVkIHJlc3RhcnQgb3IgdG9vIGZhciBhd2F5ICovDQotICAgIH0NCi0gICAgVFJBQ0VNUzIoY2luZm8sIDQsIEpUUkNfUkVDT1ZFUllfQUNUSU9OLCBtYXJrZXIsIGFjdGlvbik7DQotICAgIHN3aXRjaCAoYWN0aW9uKSB7DQotICAgIGNhc2UgMToNCi0gICAgICAvKiBEaXNjYXJkIG1hcmtlciBhbmQgbGV0IGVudHJvcHkgZGVjb2RlciByZXN1bWUgcHJvY2Vzc2luZy4gKi8NCi0gICAgICBjaW5mby0+dW5yZWFkX21hcmtlciA9IDA7DQotICAgICAgcmV0dXJuIFRSVUU7DQotICAgIGNhc2UgMjoNCi0gICAgICAvKiBTY2FuIHRvIHRoZSBuZXh0IG1hcmtlciwgYW5kIHJlcGVhdCB0aGUgZGVjaXNpb24gbG9vcC4gKi8NCi0gICAgICBpZiAoISBuZXh0X21hcmtlcihjaW5mbykpDQotCXJldHVybiBGQUxTRTsNCi0gICAgICBtYXJrZXIgPSBjaW5mby0+dW5yZWFkX21hcmtlcjsNCi0gICAgICBicmVhazsNCi0gICAgY2FzZSAzOg0KLSAgICAgIC8qIFJldHVybiB3aXRob3V0IGFkdmFuY2luZyBwYXN0IHRoaXMgbWFya2VyLiAqLw0KLSAgICAgIC8qIEVudHJvcHkgZGVjb2RlciB3aWxsIGJlIGZvcmNlZCB0byBwcm9jZXNzIGFuIGVtcHR5IHNlZ21lbnQuICovDQotICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gIH0gLyogZW5kIGxvb3AgKi8NCi19DQotDQotDQotLyoNCi0gKiBSZXNldCBtYXJrZXIgcHJvY2Vzc2luZyBzdGF0ZSB0byBiZWdpbiBhIGZyZXNoIGRhdGFzdHJlYW0uDQotICovDQotDQotTUVUSE9EREVGKHZvaWQpDQotcmVzZXRfbWFya2VyX3JlYWRlciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBteV9tYXJrZXJfcHRyIG1hcmtlciA9IChteV9tYXJrZXJfcHRyKSBjaW5mby0+bWFya2VyOw0KLQ0KLSAgY2luZm8tPmNvbXBfaW5mbyA9IE5VTEw7CQkvKiB1bnRpbCBhbGxvY2F0ZWQgYnkgZ2V0X3NvZiAqLw0KLSAgY2luZm8tPmlucHV0X3NjYW5fbnVtYmVyID0gMDsJCS8qIG5vIFNPUyBzZWVuIHlldCAqLw0KLSAgY2luZm8tPnVucmVhZF9tYXJrZXIgPSAwOwkJLyogbm8gcGVuZGluZyBtYXJrZXIgKi8NCi0gIG1hcmtlci0+cHViLnNhd19TT0kgPSBGQUxTRTsJCS8qIHNldCBpbnRlcm5hbCBzdGF0ZSB0b28gKi8NCi0gIG1hcmtlci0+cHViLnNhd19TT0YgPSBGQUxTRTsNCi0gIG1hcmtlci0+cHViLmRpc2NhcmRlZF9ieXRlcyA9IDA7DQotICBtYXJrZXItPmN1cl9tYXJrZXIgPSBOVUxMOw0KLX0NCi0NCi0NCi0vKg0KLSAqIEluaXRpYWxpemUgdGhlIG1hcmtlciByZWFkZXIgbW9kdWxlLg0KLSAqIFRoaXMgaXMgY2FsbGVkIG9ubHkgb25jZSwgd2hlbiB0aGUgZGVjb21wcmVzc2lvbiBvYmplY3QgaXMgY3JlYXRlZC4NCi0gKi8NCi0NCi1HTE9CQUwodm9pZCkNCi1qaW5pdF9tYXJrZXJfcmVhZGVyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0gIG15X21hcmtlcl9wdHIgbWFya2VyOw0KLSAgaW50IGk7DQotDQotICAvKiBDcmVhdGUgc3Vib2JqZWN0IGluIHBlcm1hbmVudCBwb29sICovDQotICBtYXJrZXIgPSAobXlfbWFya2VyX3B0cikNCi0gICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9QRVJNQU5FTlQsDQotCQkJCVNJWkVPRihteV9tYXJrZXJfcmVhZGVyKSk7DQotICBjaW5mby0+bWFya2VyID0gKHN0cnVjdCBqcGVnX21hcmtlcl9yZWFkZXIgKikgbWFya2VyOw0KLSAgLyogSW5pdGlhbGl6ZSBwdWJsaWMgbWV0aG9kIHBvaW50ZXJzICovDQotICBtYXJrZXItPnB1Yi5yZXNldF9tYXJrZXJfcmVhZGVyID0gcmVzZXRfbWFya2VyX3JlYWRlcjsNCi0gIG1hcmtlci0+cHViLnJlYWRfbWFya2VycyA9IHJlYWRfbWFya2VyczsNCi0gIG1hcmtlci0+cHViLnJlYWRfcmVzdGFydF9tYXJrZXIgPSByZWFkX3Jlc3RhcnRfbWFya2VyOw0KLSAgLyogSW5pdGlhbGl6ZSBDT00vQVBQbiBwcm9jZXNzaW5nLg0KLSAgICogQnkgZGVmYXVsdCwgd2UgZXhhbWluZSBhbmQgdGhlbiBkaXNjYXJkIEFQUDAgYW5kIEFQUDE0LA0KLSAgICogYnV0IHNpbXBseSBkaXNjYXJkIENPTSBhbmQgYWxsIG90aGVyIEFQUG4uDQotICAgKi8NCi0gIG1hcmtlci0+cHJvY2Vzc19DT00gPSBza2lwX3ZhcmlhYmxlOw0KLSAgbWFya2VyLT5sZW5ndGhfbGltaXRfQ09NID0gMDsNCi0gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7DQotICAgIG1hcmtlci0+cHJvY2Vzc19BUFBuW2ldID0gc2tpcF92YXJpYWJsZTsNCi0gICAgbWFya2VyLT5sZW5ndGhfbGltaXRfQVBQbltpXSA9IDA7DQotICB9DQotICBtYXJrZXItPnByb2Nlc3NfQVBQblswXSA9IGdldF9pbnRlcmVzdGluZ19hcHBuOw0KLSAgbWFya2VyLT5wcm9jZXNzX0FQUG5bMTRdID0gZ2V0X2ludGVyZXN0aW5nX2FwcG47DQotICAvKiBSZXNldCBtYXJrZXIgcHJvY2Vzc2luZyBzdGF0ZSAqLw0KLSAgcmVzZXRfbWFya2VyX3JlYWRlcihjaW5mbyk7DQotfQ0KLQ0KLQ0KLS8qDQotICogQ29udHJvbCBzYXZpbmcgb2YgQ09NIGFuZCBBUFBuIG1hcmtlcnMgaW50byBtYXJrZXJfbGlzdC4NCi0gKi8NCi0NCi0jaWZkZWYgU0FWRV9NQVJLRVJTX1NVUFBPUlRFRA0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWpwZWdfc2F2ZV9tYXJrZXJzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyX2NvZGUsDQotCQkgICB1bnNpZ25lZCBpbnQgbGVuZ3RoX2xpbWl0KQ0KLXsNCi0gIG15X21hcmtlcl9wdHIgbWFya2VyID0gKG15X21hcmtlcl9wdHIpIGNpbmZvLT5tYXJrZXI7DQotICBsb25nIG1heGxlbmd0aDsNCi0gIGpwZWdfbWFya2VyX3BhcnNlcl9tZXRob2QgcHJvY2Vzc29yOw0KLQ0KLSAgLyogTGVuZ3RoIGxpbWl0IG11c3RuJ3QgYmUgbGFyZ2VyIHRoYW4gd2hhdCB3ZSBjYW4gYWxsb2NhdGUNCi0gICAqIChzaG91bGQgb25seSBiZSBhIGNvbmNlcm4gaW4gYSAxNi1iaXQgZW52aXJvbm1lbnQpLg0KLSAgICovDQotICBtYXhsZW5ndGggPSBjaW5mby0+bWVtLT5tYXhfYWxsb2NfY2h1bmsgLSBTSVpFT0Yoc3RydWN0IGpwZWdfbWFya2VyX3N0cnVjdCk7DQotICBpZiAoKChsb25nKSBsZW5ndGhfbGltaXQpID4gbWF4bGVuZ3RoKQ0KLSAgICBsZW5ndGhfbGltaXQgPSAodW5zaWduZWQgaW50KSBtYXhsZW5ndGg7DQotDQotICAvKiBDaG9vc2UgcHJvY2Vzc29yIHJvdXRpbmUgdG8gdXNlLg0KLSAgICogQVBQMC9BUFAxNCBoYXZlIHNwZWNpYWwgcmVxdWlyZW1lbnRzLg0KLSAgICovDQotICBpZiAobGVuZ3RoX2xpbWl0KSB7DQotICAgIHByb2Nlc3NvciA9IHNhdmVfbWFya2VyOw0KLSAgICAvKiBJZiBzYXZpbmcgQVBQMC9BUFAxNCwgc2F2ZSBhdCBsZWFzdCBlbm91Z2ggZm9yIG91ciBpbnRlcm5hbCB1c2UuICovDQotICAgIGlmIChtYXJrZXJfY29kZSA9PSAoaW50KSBNX0FQUDAgJiYgbGVuZ3RoX2xpbWl0IDwgQVBQMF9EQVRBX0xFTikNCi0gICAgICBsZW5ndGhfbGltaXQgPSBBUFAwX0RBVEFfTEVOOw0KLSAgICBlbHNlIGlmIChtYXJrZXJfY29kZSA9PSAoaW50KSBNX0FQUDE0ICYmIGxlbmd0aF9saW1pdCA8IEFQUDE0X0RBVEFfTEVOKQ0KLSAgICAgIGxlbmd0aF9saW1pdCA9IEFQUDE0X0RBVEFfTEVOOw0KLSAgfSBlbHNlIHsNCi0gICAgcHJvY2Vzc29yID0gc2tpcF92YXJpYWJsZTsNCi0gICAgLyogSWYgZGlzY2FyZGluZyBBUFAwL0FQUDE0LCB1c2Ugb3VyIHJlZ3VsYXIgb24tdGhlLWZseSBwcm9jZXNzb3IuICovDQotICAgIGlmIChtYXJrZXJfY29kZSA9PSAoaW50KSBNX0FQUDAgfHwgbWFya2VyX2NvZGUgPT0gKGludCkgTV9BUFAxNCkNCi0gICAgICBwcm9jZXNzb3IgPSBnZXRfaW50ZXJlc3RpbmdfYXBwbjsNCi0gIH0NCi0NCi0gIGlmIChtYXJrZXJfY29kZSA9PSAoaW50KSBNX0NPTSkgew0KLSAgICBtYXJrZXItPnByb2Nlc3NfQ09NID0gcHJvY2Vzc29yOw0KLSAgICBtYXJrZXItPmxlbmd0aF9saW1pdF9DT00gPSBsZW5ndGhfbGltaXQ7DQotICB9IGVsc2UgaWYgKG1hcmtlcl9jb2RlID49IChpbnQpIE1fQVBQMCAmJiBtYXJrZXJfY29kZSA8PSAoaW50KSBNX0FQUDE1KSB7DQotICAgIG1hcmtlci0+cHJvY2Vzc19BUFBuW21hcmtlcl9jb2RlIC0gKGludCkgTV9BUFAwXSA9IHByb2Nlc3NvcjsNCi0gICAgbWFya2VyLT5sZW5ndGhfbGltaXRfQVBQblttYXJrZXJfY29kZSAtIChpbnQpIE1fQVBQMF0gPSBsZW5ndGhfbGltaXQ7DQotICB9IGVsc2UNCi0gICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfVU5LTk9XTl9NQVJLRVIsIG1hcmtlcl9jb2RlKTsNCi19DQotDQotI2VuZGlmIC8qIFNBVkVfTUFSS0VSU19TVVBQT1JURUQgKi8NCi0NCi0NCi0vKg0KLSAqIEluc3RhbGwgYSBzcGVjaWFsIHByb2Nlc3NpbmcgbWV0aG9kIGZvciBDT00gb3IgQVBQbiBtYXJrZXJzLg0KLSAqLw0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWpwZWdfc2V0X21hcmtlcl9wcm9jZXNzb3IgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGludCBtYXJrZXJfY29kZSwNCi0JCQkgICBqcGVnX21hcmtlcl9wYXJzZXJfbWV0aG9kIHJvdXRpbmUpDQotew0KLSAgbXlfbWFya2VyX3B0ciBtYXJrZXIgPSAobXlfbWFya2VyX3B0cikgY2luZm8tPm1hcmtlcjsNCi0NCi0gIGlmIChtYXJrZXJfY29kZSA9PSAoaW50KSBNX0NPTSkNCi0gICAgbWFya2VyLT5wcm9jZXNzX0NPTSA9IHJvdXRpbmU7DQotICBlbHNlIGlmIChtYXJrZXJfY29kZSA+PSAoaW50KSBNX0FQUDAgJiYgbWFya2VyX2NvZGUgPD0gKGludCkgTV9BUFAxNSkNCi0gICAgbWFya2VyLT5wcm9jZXNzX0FQUG5bbWFya2VyX2NvZGUgLSAoaW50KSBNX0FQUDBdID0gcm91dGluZTsNCi0gIGVsc2UNCi0gICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfVU5LTk9XTl9NQVJLRVIsIG1hcmtlcl9jb2RlKTsNCi19DQotDQotI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fDQorI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykKKy8qCisgKiBqZG1hcmtlci5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTgsIFRob21hcyBHLiBMYW5lLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcm91dGluZXMgdG8gZGVjb2RlIEpQRUcgZGF0YXN0cmVhbSBtYXJrZXJzLgorICogTW9zdCBvZiB0aGUgY29tcGxleGl0eSBhcmlzZXMgZnJvbSBvdXIgZGVzaXJlIHRvIHN1cHBvcnQgaW5wdXQKKyAqIHN1c3BlbnNpb246IGlmIG5vdCBhbGwgb2YgdGhlIGRhdGEgZm9yIGEgbWFya2VyIGlzIGF2YWlsYWJsZSwKKyAqIHdlIG11c3QgZXhpdCBiYWNrIHRvIHRoZSBhcHBsaWNhdGlvbi4gIE9uIHJlc3VtcHRpb24sIHdlIHJlcHJvY2VzcworICogdGhlIG1hcmtlci4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisKKwordHlwZWRlZiBlbnVtIHsJCQkvKiBKUEVHIG1hcmtlciBjb2RlcyAqLworICBNX1NPRjAgID0gMHhjMCwKKyAgTV9TT0YxICA9IDB4YzEsCisgIE1fU09GMiAgPSAweGMyLAorICBNX1NPRjMgID0gMHhjMywKKyAgCisgIE1fU09GNSAgPSAweGM1LAorICBNX1NPRjYgID0gMHhjNiwKKyAgTV9TT0Y3ICA9IDB4YzcsCisgIAorICBNX0pQRyAgID0gMHhjOCwKKyAgTV9TT0Y5ICA9IDB4YzksCisgIE1fU09GMTAgPSAweGNhLAorICBNX1NPRjExID0gMHhjYiwKKyAgCisgIE1fU09GMTMgPSAweGNkLAorICBNX1NPRjE0ID0gMHhjZSwKKyAgTV9TT0YxNSA9IDB4Y2YsCisgIAorICBNX0RIVCAgID0gMHhjNCwKKyAgCisgIE1fREFDICAgPSAweGNjLAorICAKKyAgTV9SU1QwICA9IDB4ZDAsCisgIE1fUlNUMSAgPSAweGQxLAorICBNX1JTVDIgID0gMHhkMiwKKyAgTV9SU1QzICA9IDB4ZDMsCisgIE1fUlNUNCAgPSAweGQ0LAorICBNX1JTVDUgID0gMHhkNSwKKyAgTV9SU1Q2ICA9IDB4ZDYsCisgIE1fUlNUNyAgPSAweGQ3LAorICAKKyAgTV9TT0kgICA9IDB4ZDgsCisgIE1fRU9JICAgPSAweGQ5LAorICBNX1NPUyAgID0gMHhkYSwKKyAgTV9EUVQgICA9IDB4ZGIsCisgIE1fRE5MICAgPSAweGRjLAorICBNX0RSSSAgID0gMHhkZCwKKyAgTV9ESFAgICA9IDB4ZGUsCisgIE1fRVhQICAgPSAweGRmLAorICAKKyAgTV9BUFAwICA9IDB4ZTAsCisgIE1fQVBQMSAgPSAweGUxLAorICBNX0FQUDIgID0gMHhlMiwKKyAgTV9BUFAzICA9IDB4ZTMsCisgIE1fQVBQNCAgPSAweGU0LAorICBNX0FQUDUgID0gMHhlNSwKKyAgTV9BUFA2ICA9IDB4ZTYsCisgIE1fQVBQNyAgPSAweGU3LAorICBNX0FQUDggID0gMHhlOCwKKyAgTV9BUFA5ICA9IDB4ZTksCisgIE1fQVBQMTAgPSAweGVhLAorICBNX0FQUDExID0gMHhlYiwKKyAgTV9BUFAxMiA9IDB4ZWMsCisgIE1fQVBQMTMgPSAweGVkLAorICBNX0FQUDE0ID0gMHhlZSwKKyAgTV9BUFAxNSA9IDB4ZWYsCisgIAorICBNX0pQRzAgID0gMHhmMCwKKyAgTV9KUEcxMyA9IDB4ZmQsCisgIE1fQ09NICAgPSAweGZlLAorICAKKyAgTV9URU0gICA9IDB4MDEsCisgIAorICBNX0VSUk9SID0gMHgxMDAKK30gSlBFR19NQVJLRVI7CisKKworLyogUHJpdmF0ZSBzdGF0ZSAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX21hcmtlcl9yZWFkZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCisKKyAgLyogQXBwbGljYXRpb24tb3ZlcnJpZGFibGUgbWFya2VyIHByb2Nlc3NpbmcgbWV0aG9kcyAqLworICBqcGVnX21hcmtlcl9wYXJzZXJfbWV0aG9kIHByb2Nlc3NfQ09NOworICBqcGVnX21hcmtlcl9wYXJzZXJfbWV0aG9kIHByb2Nlc3NfQVBQblsxNl07CisKKyAgLyogTGltaXQgb24gbWFya2VyIGRhdGEgbGVuZ3RoIHRvIHNhdmUgZm9yIGVhY2ggbWFya2VyIHR5cGUgKi8KKyAgdW5zaWduZWQgaW50IGxlbmd0aF9saW1pdF9DT007CisgIHVuc2lnbmVkIGludCBsZW5ndGhfbGltaXRfQVBQblsxNl07CisKKyAgLyogU3RhdHVzIG9mIENPTS9BUFBuIG1hcmtlciBzYXZpbmcgKi8KKyAganBlZ19zYXZlZF9tYXJrZXJfcHRyIGN1cl9tYXJrZXI7CS8qIE5VTEwgaWYgbm90IHByb2Nlc3NpbmcgYSBtYXJrZXIgKi8KKyAgdW5zaWduZWQgaW50IGJ5dGVzX3JlYWQ7CQkvKiBkYXRhIGJ5dGVzIHJlYWQgc28gZmFyIGluIG1hcmtlciAqLworICAvKiBOb3RlOiBjdXJfbWFya2VyIGlzIG5vdCBsaW5rZWQgaW50byBtYXJrZXJfbGlzdCB1bnRpbCBpdCdzIGFsbCByZWFkLiAqLworfSBteV9tYXJrZXJfcmVhZGVyOworCit0eXBlZGVmIG15X21hcmtlcl9yZWFkZXIgKiBteV9tYXJrZXJfcHRyOworCisKKy8qCisgKiBNYWNyb3MgZm9yIGZldGNoaW5nIGRhdGEgZnJvbSB0aGUgZGF0YSBzb3VyY2UgbW9kdWxlLgorICoKKyAqIEF0IGFsbCB0aW1lcywgY2luZm8tPnNyYy0+bmV4dF9pbnB1dF9ieXRlIGFuZCAtPmJ5dGVzX2luX2J1ZmZlciByZWZsZWN0CisgKiB0aGUgY3VycmVudCByZXN0YXJ0IHBvaW50OyB3ZSB1cGRhdGUgdGhlbSBvbmx5IHdoZW4gd2UgaGF2ZSByZWFjaGVkIGEKKyAqIHN1aXRhYmxlIHBsYWNlIHRvIHJlc3RhcnQgaWYgYSBzdXNwZW5zaW9uIG9jY3Vycy4KKyAqLworCisvKiBEZWNsYXJlIGFuZCBpbml0aWFsaXplIGxvY2FsIGNvcGllcyBvZiBpbnB1dCBwb2ludGVyL2NvdW50ICovCisjZGVmaW5lIElOUFVUX1ZBUlMoY2luZm8pICBcCisJc3RydWN0IGpwZWdfc291cmNlX21nciAqIGRhdGFzcmMgPSAoY2luZm8pLT5zcmM7ICBcCisJY29uc3QgSk9DVEVUICogbmV4dF9pbnB1dF9ieXRlID0gZGF0YXNyYy0+bmV4dF9pbnB1dF9ieXRlOyAgXAorCXNpemVfdCBieXRlc19pbl9idWZmZXIgPSBkYXRhc3JjLT5ieXRlc19pbl9idWZmZXIKKworLyogVW5sb2FkIHRoZSBsb2NhbCBjb3BpZXMgLS0tIGRvIHRoaXMgb25seSBhdCBhIHJlc3RhcnQgYm91bmRhcnkgKi8KKyNkZWZpbmUgSU5QVVRfU1lOQyhjaW5mbykgIFwKKwkoIGRhdGFzcmMtPm5leHRfaW5wdXRfYnl0ZSA9IG5leHRfaW5wdXRfYnl0ZSwgIFwKKwkgIGRhdGFzcmMtPmJ5dGVzX2luX2J1ZmZlciA9IGJ5dGVzX2luX2J1ZmZlciApCisKKy8qIFJlbG9hZCB0aGUgbG9jYWwgY29waWVzIC0tLSB1c2VkIG9ubHkgaW4gTUFLRV9CWVRFX0FWQUlMICovCisjZGVmaW5lIElOUFVUX1JFTE9BRChjaW5mbykgIFwKKwkoIG5leHRfaW5wdXRfYnl0ZSA9IGRhdGFzcmMtPm5leHRfaW5wdXRfYnl0ZSwgIFwKKwkgIGJ5dGVzX2luX2J1ZmZlciA9IGRhdGFzcmMtPmJ5dGVzX2luX2J1ZmZlciApCisKKy8qIEludGVybmFsIG1hY3JvIGZvciBJTlBVVF9CWVRFIGFuZCBJTlBVVF8yQllURVM6IG1ha2UgYSBieXRlIGF2YWlsYWJsZS4KKyAqIE5vdGUgd2UgZG8gKm5vdCogZG8gSU5QVVRfU1lOQyBiZWZvcmUgY2FsbGluZyBmaWxsX2lucHV0X2J1ZmZlciwKKyAqIGJ1dCB3ZSBtdXN0IHJlbG9hZCB0aGUgbG9jYWwgY29waWVzIGFmdGVyIGEgc3VjY2Vzc2Z1bCBmaWxsLgorICovCisjZGVmaW5lIE1BS0VfQllURV9BVkFJTChjaW5mbyxhY3Rpb24pICBcCisJaWYgKGJ5dGVzX2luX2J1ZmZlciA9PSAwKSB7ICBcCisJICBpZiAoISAoKmRhdGFzcmMtPmZpbGxfaW5wdXRfYnVmZmVyKSAoY2luZm8pKSAgXAorCSAgICB7IGFjdGlvbjsgfSAgXAorCSAgSU5QVVRfUkVMT0FEKGNpbmZvKTsgIFwKKwl9CisKKy8qIFJlYWQgYSBieXRlIGludG8gdmFyaWFibGUgVi4KKyAqIElmIG11c3Qgc3VzcGVuZCwgdGFrZSB0aGUgc3BlY2lmaWVkIGFjdGlvbiAodHlwaWNhbGx5ICJyZXR1cm4gRkFMU0UiKS4KKyAqLworI2RlZmluZSBJTlBVVF9CWVRFKGNpbmZvLFYsYWN0aW9uKSAgXAorCU1BS0VTVE1UKCBNQUtFX0JZVEVfQVZBSUwoY2luZm8sYWN0aW9uKTsgXAorCQkgIGJ5dGVzX2luX2J1ZmZlci0tOyBcCisJCSAgViA9IEdFVEpPQ1RFVCgqbmV4dF9pbnB1dF9ieXRlKyspOyApCisKKy8qIEFzIGFib3ZlLCBidXQgcmVhZCB0d28gYnl0ZXMgaW50ZXJwcmV0ZWQgYXMgYW4gdW5zaWduZWQgMTYtYml0IGludGVnZXIuCisgKiBWIHNob3VsZCBiZSBkZWNsYXJlZCB1bnNpZ25lZCBpbnQgb3IgcGVyaGFwcyBJTlQzMi4KKyAqLworI2RlZmluZSBJTlBVVF8yQllURVMoY2luZm8sVixhY3Rpb24pICBcCisJTUFLRVNUTVQoIE1BS0VfQllURV9BVkFJTChjaW5mbyxhY3Rpb24pOyBcCisJCSAgYnl0ZXNfaW5fYnVmZmVyLS07IFwKKwkJICBWID0gKCh1bnNpZ25lZCBpbnQpIEdFVEpPQ1RFVCgqbmV4dF9pbnB1dF9ieXRlKyspKSA8PCA4OyBcCisJCSAgTUFLRV9CWVRFX0FWQUlMKGNpbmZvLGFjdGlvbik7IFwKKwkJICBieXRlc19pbl9idWZmZXItLTsgXAorCQkgIFYgKz0gR0VUSk9DVEVUKCpuZXh0X2lucHV0X2J5dGUrKyk7ICkKKworCisvKgorICogUm91dGluZXMgdG8gcHJvY2VzcyBKUEVHIG1hcmtlcnMuCisgKgorICogRW50cnkgY29uZGl0aW9uOiBKUEVHIG1hcmtlciBpdHNlbGYgaGFzIGJlZW4gcmVhZCBhbmQgaXRzIGNvZGUgc2F2ZWQKKyAqICAgaW4gY2luZm8tPnVucmVhZF9tYXJrZXI7IGlucHV0IHJlc3RhcnQgcG9pbnQgaXMganVzdCBhZnRlciB0aGUgbWFya2VyLgorICoKKyAqIEV4aXQ6IGlmIHJldHVybiBUUlVFLCBoYXZlIHJlYWQgYW5kIHByb2Nlc3NlZCBhbnkgcGFyYW1ldGVycywgYW5kIGhhdmUKKyAqICAgdXBkYXRlZCB0aGUgcmVzdGFydCBwb2ludCB0byBwb2ludCBhZnRlciB0aGUgcGFyYW1ldGVycy4KKyAqICAgSWYgcmV0dXJuIEZBTFNFLCB3YXMgZm9yY2VkIHRvIHN1c3BlbmQgYmVmb3JlIHJlYWNoaW5nIGVuZCBvZgorICogICBtYXJrZXIgcGFyYW1ldGVyczsgcmVzdGFydCBwb2ludCBoYXMgbm90IGJlZW4gbW92ZWQuICBTYW1lIHJvdXRpbmUKKyAqICAgd2lsbCBiZSBjYWxsZWQgYWdhaW4gYWZ0ZXIgYXBwbGljYXRpb24gc3VwcGxpZXMgbW9yZSBpbnB1dCBkYXRhLgorICoKKyAqIFRoaXMgYXBwcm9hY2ggdG8gc3VzcGVuc2lvbiBhc3N1bWVzIHRoYXQgYWxsIG9mIGEgbWFya2VyJ3MgcGFyYW1ldGVycworICogY2FuIGZpdCBpbnRvIGEgc2luZ2xlIGlucHV0IGJ1ZmZlcmxvYWQuICBUaGlzIHNob3VsZCBob2xkIGZvciAibm9ybWFsIgorICogbWFya2Vycy4gIFNvbWUgQ09NL0FQUG4gbWFya2VycyBtaWdodCBoYXZlIGxhcmdlIHBhcmFtZXRlciBzZWdtZW50cworICogdGhhdCBtaWdodCBub3QgZml0LiAgSWYgd2UgYXJlIHNpbXBseSBkcm9wcGluZyBzdWNoIGEgbWFya2VyLCB3ZSB1c2UKKyAqIHNraXBfaW5wdXRfZGF0YSB0byBnZXQgcGFzdCBpdCwgYW5kIHRoZXJlYnkgcHV0IHRoZSBwcm9ibGVtIG9uIHRoZQorICogc291cmNlIG1hbmFnZXIncyBzaG91bGRlcnMuICBJZiB3ZSBhcmUgc2F2aW5nIHRoZSBtYXJrZXIncyBjb250ZW50cworICogaW50byBtZW1vcnksIHdlIHVzZSBhIHNsaWdodGx5IGRpZmZlcmVudCBjb252ZW50aW9uOiB3aGVuIGZvcmNlZCB0bworICogc3VzcGVuZCwgdGhlIG1hcmtlciBwcm9jZXNzb3IgdXBkYXRlcyB0aGUgcmVzdGFydCBwb2ludCB0byB0aGUgZW5kIG9mCisgKiB3aGF0IGl0J3MgY29uc3VtZWQgKGllLCB0aGUgZW5kIG9mIHRoZSBidWZmZXIpIGJlZm9yZSByZXR1cm5pbmcgRkFMU0UuCisgKiBPbiByZXN1bXB0aW9uLCBjaW5mby0+dW5yZWFkX21hcmtlciBzdGlsbCBjb250YWlucyB0aGUgbWFya2VyIGNvZGUsCisgKiBidXQgdGhlIGRhdGEgc291cmNlIHdpbGwgcG9pbnQgdG8gdGhlIG5leHQgY2h1bmsgb2YgbWFya2VyIGRhdGEuCisgKiBUaGUgbWFya2VyIHByb2Nlc3NvciBtdXN0IHJldGFpbiBpbnRlcm5hbCBzdGF0ZSB0byBkZWFsIHdpdGggdGhpcy4KKyAqCisgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgYm90aGVyIHRvIGF2b2lkIGR1cGxpY2F0ZSB0cmFjZSBtZXNzYWdlcyBpZiBhCisgKiBzdXNwZW5zaW9uIG9jY3VycyB3aXRoaW4gbWFya2VyIHBhcmFtZXRlcnMuICBPdGhlciBzaWRlIGVmZmVjdHMKKyAqIHJlcXVpcmUgbW9yZSBjYXJlLgorICovCisKKworTE9DQUwoYm9vbGVhbikKK2dldF9zb2kgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCisvKiBQcm9jZXNzIGFuIFNPSSBtYXJrZXIgKi8KK3sKKyAgaW50IGk7CisgIAorICBUUkFDRU1TKGNpbmZvLCAxLCBKVFJDX1NPSSk7CisKKyAgaWYgKGNpbmZvLT5tYXJrZXItPnNhd19TT0kpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9TT0lfRFVQTElDQVRFKTsKKworICAvKiBSZXNldCBhbGwgcGFyYW1ldGVycyB0aGF0IGFyZSBkZWZpbmVkIHRvIGJlIHJlc2V0IGJ5IFNPSSAqLworCisgIGZvciAoaSA9IDA7IGkgPCBOVU1fQVJJVEhfVEJMUzsgaSsrKSB7CisgICAgY2luZm8tPmFyaXRoX2RjX0xbaV0gPSAwOworICAgIGNpbmZvLT5hcml0aF9kY19VW2ldID0gMTsKKyAgICBjaW5mby0+YXJpdGhfYWNfS1tpXSA9IDU7CisgIH0KKyAgY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwgPSAwOworCisgIC8qIFNldCBpbml0aWFsIGFzc3VtcHRpb25zIGZvciBjb2xvcnNwYWNlIGV0YyAqLworCisgIGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID0gSkNTX1VOS05PV047CisgIGNpbmZvLT5DQ0lSNjAxX3NhbXBsaW5nID0gRkFMU0U7IC8qIEFzc3VtZSBub24tQ0NJUiBzYW1wbGluZz8/PyAqLworCisgIGNpbmZvLT5zYXdfSkZJRl9tYXJrZXIgPSBGQUxTRTsKKyAgY2luZm8tPkpGSUZfbWFqb3JfdmVyc2lvbiA9IDE7IC8qIHNldCBkZWZhdWx0IEpGSUYgQVBQMCB2YWx1ZXMgKi8KKyAgY2luZm8tPkpGSUZfbWlub3JfdmVyc2lvbiA9IDE7CisgIGNpbmZvLT5kZW5zaXR5X3VuaXQgPSAwOworICBjaW5mby0+WF9kZW5zaXR5ID0gMTsKKyAgY2luZm8tPllfZGVuc2l0eSA9IDE7CisgIGNpbmZvLT5zYXdfQWRvYmVfbWFya2VyID0gRkFMU0U7CisgIGNpbmZvLT5BZG9iZV90cmFuc2Zvcm0gPSAwOworCisgIGNpbmZvLT5tYXJrZXItPnNhd19TT0kgPSBUUlVFOworCisgIHJldHVybiBUUlVFOworfQorCisKK0xPQ0FMKGJvb2xlYW4pCitnZXRfc29mIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIGlzX3Byb2csIGJvb2xlYW4gaXNfYXJpdGgpCisvKiBQcm9jZXNzIGEgU09GbiBtYXJrZXIgKi8KK3sKKyAgSU5UMzIgbGVuZ3RoOworICBpbnQgYywgY2k7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyOworICAvKiBMaXVTdW5saWFuZyBhZGRlZCAyMDExMTIwOSAqLworICBKRElNRU5TSU9OIGltYWdlX3dpZHRoLCBpbWFnZV9oZWlnaHQ7CisgIElOUFVUX1ZBUlMoY2luZm8pOworCisgIGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlID0gaXNfcHJvZzsKKyAgY2luZm8tPmFyaXRoX2NvZGUgPSBpc19hcml0aDsKKworICBJTlBVVF8yQllURVMoY2luZm8sIGxlbmd0aCwgcmV0dXJuIEZBTFNFKTsKKworICBJTlBVVF9CWVRFKGNpbmZvLCBjaW5mby0+ZGF0YV9wcmVjaXNpb24sIHJldHVybiBGQUxTRSk7CisgIElOUFVUXzJCWVRFUyhjaW5mbywgaW1hZ2VfaGVpZ2h0LCByZXR1cm4gRkFMU0UpOworICBJTlBVVF8yQllURVMoY2luZm8sIGltYWdlX3dpZHRoLCByZXR1cm4gRkFMU0UpOworICBJTlBVVF9CWVRFKGNpbmZvLCBjaW5mby0+bnVtX2NvbXBvbmVudHMsIHJldHVybiBGQUxTRSk7CisKKyAgaWYgKGltYWdlX3dpZHRoIDw9IEpQRUdfTUFYX0RJTUVOU0lPTikKKwkgIGNpbmZvLT5pbWFnZV93aWR0aCA9IGltYWdlX3dpZHRoOworIAorICBpZiAoaW1hZ2VfaGVpZ2h0IDw9IEpQRUdfTUFYX0RJTUVOU0lPTikKKwkgIGNpbmZvLT5pbWFnZV9oZWlnaHQgPSBpbWFnZV9oZWlnaHQ7CisKKyAgbGVuZ3RoIC09IDg7CisKKyAgVFJBQ0VNUzQoY2luZm8sIDEsIEpUUkNfU09GLCBjaW5mby0+dW5yZWFkX21hcmtlciwKKwkgICAoaW50KSBjaW5mby0+aW1hZ2Vfd2lkdGgsIChpbnQpIGNpbmZvLT5pbWFnZV9oZWlnaHQsCisJICAgY2luZm8tPm51bV9jb21wb25lbnRzKTsKKworICBpZiAoY2luZm8tPm1hcmtlci0+c2F3X1NPRikKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1NPRl9EVVBMSUNBVEUpOworCisgIC8qIFdlIGRvbid0IHN1cHBvcnQgZmlsZXMgaW4gd2hpY2ggdGhlIGltYWdlIGhlaWdodCBpcyBpbml0aWFsbHkgc3BlY2lmaWVkICovCisgIC8qIGFzIDAgYW5kIGlzIGxhdGVyIHJlZGVmaW5lZCBieSBETkwuICBBcyBsb25nIGFzIHdlIGhhdmUgdG8gY2hlY2sgdGhhdCwgICovCisgIC8qIG1pZ2h0IGFzIHdlbGwgaGF2ZSBhIGdlbmVyYWwgc2FuaXR5IGNoZWNrLiAqLworICBpZiAoY2luZm8tPmltYWdlX2hlaWdodCA8PSAwIHx8IGNpbmZvLT5pbWFnZV93aWR0aCA8PSAwCisgICAgICB8fCBjaW5mby0+bnVtX2NvbXBvbmVudHMgPD0gMCkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0VNUFRZX0lNQUdFKTsKKworICBpZiAobGVuZ3RoICE9IChjaW5mby0+bnVtX2NvbXBvbmVudHMgKiAzKSkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9MRU5HVEgpOworCisgIGlmIChjaW5mby0+Y29tcF9pbmZvID09IE5VTEwpCS8qIGRvIG9ubHkgb25jZSwgZXZlbiBpZiBzdXNwZW5kICovCisgICAgY2luZm8tPmNvbXBfaW5mbyA9IChqcGVnX2NvbXBvbmVudF9pbmZvICopICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpCisJCQkoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJIGNpbmZvLT5udW1fY29tcG9uZW50cyAqIFNJWkVPRihqcGVnX2NvbXBvbmVudF9pbmZvKSk7CisgIAorICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOworICAgICAgIGNpKyssIGNvbXBwdHIrKykgeworICAgIGNvbXBwdHItPmNvbXBvbmVudF9pbmRleCA9IGNpOworICAgIElOUFVUX0JZVEUoY2luZm8sIGNvbXBwdHItPmNvbXBvbmVudF9pZCwgcmV0dXJuIEZBTFNFKTsKKwkvKiBYWVEgMjAwOC0wMy0yNTogQWRvYmUgQ01ZSyBKUEVHIGhhcyBzZXJpb3VzIGZsYXc6IHRoZSBLIGNoYW5uZWwgaGFzIHNhbWUgY29tcG9uZW50IGlkIGFzIEMgY2hhbm5lbCAqLworCXsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBjaTsgaSArKykKKwkJCWlmIChjb21wcHRyLT5jb21wb25lbnRfaWQgPT0gY2luZm8tPmNvbXBfaW5mb1tpXS5jb21wb25lbnRfaWQpIGJyZWFrOworCQlpZiAoaSA8IGNpKQorCQkJLyogRm91bmQgdGhlIGVycm9yISBXZSByZXBsYWNlIHRoZSBpZCB3aXRoIHNvbWV0aGluZyB1bmxpa2VseSB1c2VkIGVsc2V3aGVyZSAqLworCQkJY29tcHB0ci0+Y29tcG9uZW50X2lkICs9IDB4ZjA7CisJfQorCS8qIGVuZCBvZiBtb2RpZmljYXRpb24gKi8KKyAgICBJTlBVVF9CWVRFKGNpbmZvLCBjLCByZXR1cm4gRkFMU0UpOworICAgIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IgPSAoYyA+PiA0KSAmIDE1OworICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgPSAoYyAgICAgKSAmIDE1OworICAgIElOUFVUX0JZVEUoY2luZm8sIGNvbXBwdHItPnF1YW50X3RibF9ubywgcmV0dXJuIEZBTFNFKTsKKworICAgIFRSQUNFTVM0KGNpbmZvLCAxLCBKVFJDX1NPRl9DT01QT05FTlQsCisJICAgICBjb21wcHRyLT5jb21wb25lbnRfaWQsIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IsCisJICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBjb21wcHRyLT5xdWFudF90Ymxfbm8pOworICB9CisKKyAgY2luZm8tPm1hcmtlci0+c2F3X1NPRiA9IFRSVUU7CisKKyAgSU5QVVRfU1lOQyhjaW5mbyk7CisgIHJldHVybiBUUlVFOworfQorCisKK0xPQ0FMKGJvb2xlYW4pCitnZXRfc29zIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorLyogUHJvY2VzcyBhIFNPUyBtYXJrZXIgKi8KK3sKKyAgSU5UMzIgbGVuZ3RoOworICBpbnQgaSwgY2ksIG4sIGMsIGNjOworICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cjsKKyAgSU5QVVRfVkFSUyhjaW5mbyk7CisKKyAgaWYgKCEgY2luZm8tPm1hcmtlci0+c2F3X1NPRikKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1NPU19OT19TT0YpOworCisgIElOUFVUXzJCWVRFUyhjaW5mbywgbGVuZ3RoLCByZXR1cm4gRkFMU0UpOworCisgIElOUFVUX0JZVEUoY2luZm8sIG4sIHJldHVybiBGQUxTRSk7IC8qIE51bWJlciBvZiBjb21wb25lbnRzICovCisKKyAgVFJBQ0VNUzEoY2luZm8sIDEsIEpUUkNfU09TLCBuKTsKKworICBpZiAobGVuZ3RoICE9IChuICogMiArIDYpIHx8IG4gPCAxIHx8IG4gPiBNQVhfQ09NUFNfSU5fU0NBTikKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9MRU5HVEgpOworCisgIGNpbmZvLT5jb21wc19pbl9zY2FuID0gbjsKKworICAvKiBDb2xsZWN0IHRoZSBjb21wb25lbnQtc3BlYyBwYXJhbWV0ZXJzICovCisKKyAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgIElOUFVUX0JZVEUoY2luZm8sIGNjLCByZXR1cm4gRkFMU0UpOworICAgIElOUFVUX0JZVEUoY2luZm8sIGMsIHJldHVybiBGQUxTRSk7CisgICAgCisJLyogWFlRIDIwMDgtMDMtMjU6IEFkb2JlIENNWUsgSlBFRyBoYXMgc2VyaW91cyBmbGF3OiB0aGUgSyBjaGFubmVsIGhhcyBzYW1lIGNvbXBvbmVudCBpZCBhcyBDIGNoYW5uZWwgKi8KKwl7CisJCWludCBqOworCQlmb3IgKGogPSAwOyBqIDwgaTsgaiArKykKKwkJCWlmIChjYyA9PSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tqXS0+Y29tcG9uZW50X2lkKSBicmVhazsKKwkJaWYgKGogPCBpKQorCQkJLyogZm91bmQgdGhlIGVycm9yISAqLworCQkJY2MgKz0gMHhmMDsKKwl9CisJLyogZW5kIG9mIG1vZGlmaWNhdGlvbiAqLworICAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisJIGNpKyssIGNvbXBwdHIrKykgeworICAgICAgaWYgKGNjID09IGNvbXBwdHItPmNvbXBvbmVudF9pZCkKKwlnb3RvIGlkX2ZvdW5kOworICAgIH0KKworICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9DT01QT05FTlRfSUQsIGNjKTsKKworICBpZF9mb3VuZDoKKworICAgIGNpbmZvLT5jdXJfY29tcF9pbmZvW2ldID0gY29tcHB0cjsKKyAgICBjb21wcHRyLT5kY190Ymxfbm8gPSAoYyA+PiA0KSAmIDE1OworICAgIGNvbXBwdHItPmFjX3RibF9ubyA9IChjICAgICApICYgMTU7CisgICAgCisgICAgVFJBQ0VNUzMoY2luZm8sIDEsIEpUUkNfU09TX0NPTVBPTkVOVCwgY2MsCisJICAgICBjb21wcHRyLT5kY190Ymxfbm8sIGNvbXBwdHItPmFjX3RibF9ubyk7CisJLyogVGhpcyBDU2kgKGNjKSBzaG91bGQgZGlmZmVyIGZyb20gdGhlIHByZXZpb3VzIENTaSAqLworICAgIGZvciAoY2kgPSAwOyBjaSA8IGk7IGNpKyspIHsKKyAgICAgIGlmIChjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV0gPT0gY29tcHB0cikKKyAgICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX0NPTVBPTkVOVF9JRCwgY2MpOworICAgIH0KKyAgfQorCisgIC8qIENvbGxlY3QgdGhlIGFkZGl0aW9uYWwgc2NhbiBwYXJhbWV0ZXJzIFNzLCBTZSwgQWgvQWwuICovCisgIElOUFVUX0JZVEUoY2luZm8sIGMsIHJldHVybiBGQUxTRSk7CisgIGNpbmZvLT5TcyA9IGM7CisgIElOUFVUX0JZVEUoY2luZm8sIGMsIHJldHVybiBGQUxTRSk7CisgIGNpbmZvLT5TZSA9IGM7CisgIElOUFVUX0JZVEUoY2luZm8sIGMsIHJldHVybiBGQUxTRSk7CisgIGNpbmZvLT5BaCA9IChjID4+IDQpICYgMTU7CisgIGNpbmZvLT5BbCA9IChjICAgICApICYgMTU7CisKKyAgVFJBQ0VNUzQoY2luZm8sIDEsIEpUUkNfU09TX1BBUkFNUywgY2luZm8tPlNzLCBjaW5mby0+U2UsCisJICAgY2luZm8tPkFoLCBjaW5mby0+QWwpOworCisgIC8qIFByZXBhcmUgdG8gc2NhbiBkYXRhICYgcmVzdGFydCBtYXJrZXJzICovCisgIGNpbmZvLT5tYXJrZXItPm5leHRfcmVzdGFydF9udW0gPSAwOworCisgIC8qIENvdW50IGFub3RoZXIgU09TIG1hcmtlciAqLworICBjaW5mby0+aW5wdXRfc2Nhbl9udW1iZXIrKzsKKworICBJTlBVVF9TWU5DKGNpbmZvKTsKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworI2lmZGVmIERfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRAorCitMT0NBTChib29sZWFuKQorZ2V0X2RhYyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKKy8qIFByb2Nlc3MgYSBEQUMgbWFya2VyICovCit7CisgIElOVDMyIGxlbmd0aDsKKyAgaW50IGluZGV4LCB2YWw7CisgIElOUFVUX1ZBUlMoY2luZm8pOworCisgIElOUFVUXzJCWVRFUyhjaW5mbywgbGVuZ3RoLCByZXR1cm4gRkFMU0UpOworICBsZW5ndGggLT0gMjsKKyAgCisgIHdoaWxlIChsZW5ndGggPiAwKSB7CisgICAgSU5QVVRfQllURShjaW5mbywgaW5kZXgsIHJldHVybiBGQUxTRSk7CisgICAgSU5QVVRfQllURShjaW5mbywgdmFsLCByZXR1cm4gRkFMU0UpOworCisgICAgbGVuZ3RoIC09IDI7CisKKyAgICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19EQUMsIGluZGV4LCB2YWwpOworCisgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSAoMipOVU1fQVJJVEhfVEJMUykpCisgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9EQUNfSU5ERVgsIGluZGV4KTsKKworICAgIGlmIChpbmRleCA+PSBOVU1fQVJJVEhfVEJMUykgeyAvKiBkZWZpbmUgQUMgdGFibGUgKi8KKyAgICAgIGNpbmZvLT5hcml0aF9hY19LW2luZGV4LU5VTV9BUklUSF9UQkxTXSA9IChVSU5UOCkgdmFsOworICAgIH0gZWxzZSB7CQkJLyogZGVmaW5lIERDIHRhYmxlICovCisgICAgICBjaW5mby0+YXJpdGhfZGNfTFtpbmRleF0gPSAoVUlOVDgpICh2YWwgJiAweDBGKTsKKyAgICAgIGNpbmZvLT5hcml0aF9kY19VW2luZGV4XSA9IChVSU5UOCkgKHZhbCA+PiA0KTsKKyAgICAgIGlmIChjaW5mby0+YXJpdGhfZGNfTFtpbmRleF0gPiBjaW5mby0+YXJpdGhfZGNfVVtpbmRleF0pCisJRVJSRVhJVDEoY2luZm8sIEpFUlJfREFDX1ZBTFVFLCB2YWwpOworICAgIH0KKyAgfQorCisgIGlmIChsZW5ndGggIT0gMCkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9MRU5HVEgpOworCisgIElOUFVUX1NZTkMoY2luZm8pOworICByZXR1cm4gVFJVRTsKK30KKworI2Vsc2UgLyogISBEX0FSSVRIX0NPRElOR19TVVBQT1JURUQgKi8KKworI2RlZmluZSBnZXRfZGFjKGNpbmZvKSAgc2tpcF92YXJpYWJsZShjaW5mbykKKworI2VuZGlmIC8qIERfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRCAqLworCisKK0xPQ0FMKGJvb2xlYW4pCitnZXRfZGh0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorLyogUHJvY2VzcyBhIERIVCBtYXJrZXIgKi8KK3sKKyAgSU5UMzIgbGVuZ3RoOworICBVSU5UOCBiaXRzWzE3XTsKKyAgVUlOVDggaHVmZnZhbFsyNTZdOworICBpbnQgaSwgaW5kZXgsIGNvdW50OworICBKSFVGRl9UQkwgKipodGJscHRyOworICBJTlBVVF9WQVJTKGNpbmZvKTsKKworICBJTlBVVF8yQllURVMoY2luZm8sIGxlbmd0aCwgcmV0dXJuIEZBTFNFKTsKKyAgbGVuZ3RoIC09IDI7CisgIAorICB3aGlsZSAobGVuZ3RoID4gMTYpIHsKKyAgICBJTlBVVF9CWVRFKGNpbmZvLCBpbmRleCwgcmV0dXJuIEZBTFNFKTsKKworICAgIFRSQUNFTVMxKGNpbmZvLCAxLCBKVFJDX0RIVCwgaW5kZXgpOworICAgICAgCisgICAgYml0c1swXSA9IDA7CisgICAgY291bnQgPSAwOworICAgIGZvciAoaSA9IDE7IGkgPD0gMTY7IGkrKykgeworICAgICAgSU5QVVRfQllURShjaW5mbywgYml0c1tpXSwgcmV0dXJuIEZBTFNFKTsKKyAgICAgIGNvdW50ICs9IGJpdHNbaV07CisgICAgfQorCisgICAgbGVuZ3RoIC09IDEgKyAxNjsKKworICAgIFRSQUNFTVM4KGNpbmZvLCAyLCBKVFJDX0hVRkZCSVRTLAorCSAgICAgYml0c1sxXSwgYml0c1syXSwgYml0c1szXSwgYml0c1s0XSwKKwkgICAgIGJpdHNbNV0sIGJpdHNbNl0sIGJpdHNbN10sIGJpdHNbOF0pOworICAgIFRSQUNFTVM4KGNpbmZvLCAyLCBKVFJDX0hVRkZCSVRTLAorCSAgICAgYml0c1s5XSwgYml0c1sxMF0sIGJpdHNbMTFdLCBiaXRzWzEyXSwKKwkgICAgIGJpdHNbMTNdLCBiaXRzWzE0XSwgYml0c1sxNV0sIGJpdHNbMTZdKTsKKworICAgIC8qIEhlcmUgd2UganVzdCBkbyBtaW5pbWFsIHZhbGlkYXRpb24gb2YgdGhlIGNvdW50cyB0byBhdm9pZCB3YWxraW5nCisgICAgICogb2ZmIHRoZSBlbmQgb2Ygb3VyIHRhYmxlIHNwYWNlLiAgamRodWZmLmMgd2lsbCBjaGVjayBtb3JlIGNhcmVmdWxseS4KKyAgICAgKi8KKyAgICBpZiAoY291bnQgPiAyNTYgfHwgKChJTlQzMikgY291bnQpID4gbGVuZ3RoKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSFVGRl9UQUJMRSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgIElOUFVUX0JZVEUoY2luZm8sIGh1ZmZ2YWxbaV0sIHJldHVybiBGQUxTRSk7CisKKyAgICBsZW5ndGggLT0gY291bnQ7CisKKyAgICBpZiAoaW5kZXggJiAweDEwKSB7CQkvKiBBQyB0YWJsZSBkZWZpbml0aW9uICovCisgICAgICBpbmRleCAtPSAweDEwOworICAgICAgaHRibHB0ciA9ICZjaW5mby0+YWNfaHVmZl90YmxfcHRyc1tpbmRleF07CisgICAgfSBlbHNlIHsJCQkvKiBEQyB0YWJsZSBkZWZpbml0aW9uICovCisgICAgICBodGJscHRyID0gJmNpbmZvLT5kY19odWZmX3RibF9wdHJzW2luZGV4XTsKKyAgICB9CisKKyAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IE5VTV9IVUZGX1RCTFMpCisgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9ESFRfSU5ERVgsIGluZGV4KTsKKworICAgIGlmICgqaHRibHB0ciA9PSBOVUxMKQorICAgICAgKmh0YmxwdHIgPSBqcGVnX2FsbG9jX2h1ZmZfdGFibGUoKGpfY29tbW9uX3B0cikgY2luZm8pOworICAKKyAgICBNRU1DT1BZKCgqaHRibHB0ciktPmJpdHMsIGJpdHMsIFNJWkVPRigoKmh0YmxwdHIpLT5iaXRzKSk7CisgICAgTUVNQ09QWSgoKmh0YmxwdHIpLT5odWZmdmFsLCBodWZmdmFsLCBTSVpFT0YoKCpodGJscHRyKS0+aHVmZnZhbCkpOworICB9CisKKyAgaWYgKGxlbmd0aCAhPSAwKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0xFTkdUSCk7CisKKyAgSU5QVVRfU1lOQyhjaW5mbyk7CisgIHJldHVybiBUUlVFOworfQorCisKK0xPQ0FMKGJvb2xlYW4pCitnZXRfZHF0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorLyogUHJvY2VzcyBhIERRVCBtYXJrZXIgKi8KK3sKKyAgSU5UMzIgbGVuZ3RoOworICBpbnQgbiwgaSwgcHJlYzsKKyAgdW5zaWduZWQgaW50IHRtcDsKKyAgSlFVQU5UX1RCTCAqcXVhbnRfcHRyOworICBJTlBVVF9WQVJTKGNpbmZvKTsKKworICBJTlBVVF8yQllURVMoY2luZm8sIGxlbmd0aCwgcmV0dXJuIEZBTFNFKTsKKyAgbGVuZ3RoIC09IDI7CisKKyAgd2hpbGUgKGxlbmd0aCA+IDApIHsKKyAgICBJTlBVVF9CWVRFKGNpbmZvLCBuLCByZXR1cm4gRkFMU0UpOworICAgIHByZWMgPSBuID4+IDQ7CisgICAgbiAmPSAweDBGOworCisgICAgVFJBQ0VNUzIoY2luZm8sIDEsIEpUUkNfRFFULCBuLCBwcmVjKTsKKworICAgIGlmIChuID49IE5VTV9RVUFOVF9UQkxTKQorICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfRFFUX0lOREVYLCBuKTsKKyAgICAgIAorICAgIGlmIChjaW5mby0+cXVhbnRfdGJsX3B0cnNbbl0gPT0gTlVMTCkKKyAgICAgIGNpbmZvLT5xdWFudF90YmxfcHRyc1tuXSA9IGpwZWdfYWxsb2NfcXVhbnRfdGFibGUoKGpfY29tbW9uX3B0cikgY2luZm8pOworICAgIHF1YW50X3B0ciA9IGNpbmZvLT5xdWFudF90YmxfcHRyc1tuXTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFMjsgaSsrKSB7CisgICAgICBpZiAocHJlYykKKwlJTlBVVF8yQllURVMoY2luZm8sIHRtcCwgcmV0dXJuIEZBTFNFKTsKKyAgICAgIGVsc2UKKwlJTlBVVF9CWVRFKGNpbmZvLCB0bXAsIHJldHVybiBGQUxTRSk7CisgICAgICAvKiBXZSBjb252ZXJ0IHRoZSB6aWd6YWctb3JkZXIgdGFibGUgdG8gbmF0dXJhbCBhcnJheSBvcmRlci4gKi8KKyAgICAgIHF1YW50X3B0ci0+cXVhbnR2YWxbanBlZ19uYXR1cmFsX29yZGVyW2ldXSA9IChVSU5UMTYpIHRtcDsKKyAgICB9CisKKyAgICBpZiAoY2luZm8tPmVyci0+dHJhY2VfbGV2ZWwgPj0gMikgeworICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpICs9IDgpIHsKKwlUUkFDRU1TOChjaW5mbywgMiwgSlRSQ19RVUFOVFZBTFMsCisJCSBxdWFudF9wdHItPnF1YW50dmFsW2ldLCAgIHF1YW50X3B0ci0+cXVhbnR2YWxbaSsxXSwKKwkJIHF1YW50X3B0ci0+cXVhbnR2YWxbaSsyXSwgcXVhbnRfcHRyLT5xdWFudHZhbFtpKzNdLAorCQkgcXVhbnRfcHRyLT5xdWFudHZhbFtpKzRdLCBxdWFudF9wdHItPnF1YW50dmFsW2krNV0sCisJCSBxdWFudF9wdHItPnF1YW50dmFsW2krNl0sIHF1YW50X3B0ci0+cXVhbnR2YWxbaSs3XSk7CisgICAgICB9CisgICAgfQorCisgICAgbGVuZ3RoIC09IERDVFNJWkUyKzE7CisgICAgaWYgKHByZWMpIGxlbmd0aCAtPSBEQ1RTSVpFMjsKKyAgfQorCisgIGlmIChsZW5ndGggIT0gMCkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9MRU5HVEgpOworCisgIElOUFVUX1NZTkMoY2luZm8pOworICByZXR1cm4gVFJVRTsKK30KKworCitMT0NBTChib29sZWFuKQorZ2V0X2RyaSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKKy8qIFByb2Nlc3MgYSBEUkkgbWFya2VyICovCit7CisgIElOVDMyIGxlbmd0aDsKKyAgdW5zaWduZWQgaW50IHRtcDsKKyAgSU5QVVRfVkFSUyhjaW5mbyk7CisKKyAgSU5QVVRfMkJZVEVTKGNpbmZvLCBsZW5ndGgsIHJldHVybiBGQUxTRSk7CisgIAorICBpZiAobGVuZ3RoICE9IDQpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfTEVOR1RIKTsKKworICBJTlBVVF8yQllURVMoY2luZm8sIHRtcCwgcmV0dXJuIEZBTFNFKTsKKworICBUUkFDRU1TMShjaW5mbywgMSwgSlRSQ19EUkksIHRtcCk7CisKKyAgY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwgPSB0bXA7CisKKyAgSU5QVVRfU1lOQyhjaW5mbyk7CisgIHJldHVybiBUUlVFOworfQorCisKKy8qCisgKiBSb3V0aW5lcyBmb3IgcHJvY2Vzc2luZyBBUFBuIGFuZCBDT00gbWFya2Vycy4KKyAqIFRoZXNlIGFyZSBlaXRoZXIgc2F2ZWQgaW4gbWVtb3J5IG9yIGRpc2NhcmRlZCwgcGVyIGFwcGxpY2F0aW9uIHJlcXVlc3QuCisgKiBBUFAwIGFuZCBBUFAxNCBhcmUgc3BlY2lhbGx5IGNoZWNrZWQgdG8gc2VlIGlmIHRoZXkgYXJlCisgKiBKRklGIGFuZCBBZG9iZSBtYXJrZXJzLCByZXNwZWN0aXZlbHkuCisgKi8KKworI2RlZmluZSBBUFAwX0RBVEFfTEVOCTE0CS8qIExlbmd0aCBvZiBpbnRlcmVzdGluZyBkYXRhIGluIEFQUDAgKi8KKyNkZWZpbmUgQVBQMTRfREFUQV9MRU4JMTIJLyogTGVuZ3RoIG9mIGludGVyZXN0aW5nIGRhdGEgaW4gQVBQMTQgKi8KKyNkZWZpbmUgQVBQTl9EQVRBX0xFTgkxNAkvKiBNdXN0IGJlIHRoZSBsYXJnZXN0IG9mIHRoZSBhYm92ZSEhICovCisKKworTE9DQUwodm9pZCkKK2V4YW1pbmVfYXBwMCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSk9DVEVUIEZBUiAqIGRhdGEsCisJICAgICAgdW5zaWduZWQgaW50IGRhdGFsZW4sIElOVDMyIHJlbWFpbmluZykKKy8qIEV4YW1pbmUgZmlyc3QgZmV3IGJ5dGVzIGZyb20gYW4gQVBQMC4KKyAqIFRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIGlmIGl0IGlzIGEgSkZJRiBtYXJrZXIuCisgKiBkYXRhbGVuIGlzICMgb2YgYnl0ZXMgYXQgZGF0YVtdLCByZW1haW5pbmcgaXMgbGVuZ3RoIG9mIHJlc3Qgb2YgbWFya2VyIGRhdGEuCisgKi8KK3sKKyAgSU5UMzIgdG90YWxsZW4gPSAoSU5UMzIpIGRhdGFsZW4gKyByZW1haW5pbmc7CisKKyAgaWYgKGRhdGFsZW4gPj0gQVBQMF9EQVRBX0xFTiAmJgorICAgICAgR0VUSk9DVEVUKGRhdGFbMF0pID09IDB4NEEgJiYKKyAgICAgIEdFVEpPQ1RFVChkYXRhWzFdKSA9PSAweDQ2ICYmCisgICAgICBHRVRKT0NURVQoZGF0YVsyXSkgPT0gMHg0OSAmJgorICAgICAgR0VUSk9DVEVUKGRhdGFbM10pID09IDB4NDYgJiYKKyAgICAgIEdFVEpPQ1RFVChkYXRhWzRdKSA9PSAwKSB7CisgICAgLyogRm91bmQgSkZJRiBBUFAwIG1hcmtlcjogc2F2ZSBpbmZvICovCisgICAgY2luZm8tPnNhd19KRklGX21hcmtlciA9IFRSVUU7CisgICAgY2luZm8tPkpGSUZfbWFqb3JfdmVyc2lvbiA9IEdFVEpPQ1RFVChkYXRhWzVdKTsKKyAgICBjaW5mby0+SkZJRl9taW5vcl92ZXJzaW9uID0gR0VUSk9DVEVUKGRhdGFbNl0pOworICAgIGNpbmZvLT5kZW5zaXR5X3VuaXQgPSBHRVRKT0NURVQoZGF0YVs3XSk7CisgICAgY2luZm8tPlhfZGVuc2l0eSA9IChHRVRKT0NURVQoZGF0YVs4XSkgPDwgOCkgKyBHRVRKT0NURVQoZGF0YVs5XSk7CisgICAgY2luZm8tPllfZGVuc2l0eSA9IChHRVRKT0NURVQoZGF0YVsxMF0pIDw8IDgpICsgR0VUSk9DVEVUKGRhdGFbMTFdKTsKKyAgICAvKiBDaGVjayB2ZXJzaW9uLgorICAgICAqIE1ham9yIHZlcnNpb24gbXVzdCBiZSAxLCBhbnl0aGluZyBlbHNlIHNpZ25hbHMgYW4gaW5jb21wYXRpYmxlIGNoYW5nZS4KKyAgICAgKiAoV2UgdXNlZCB0byB0cmVhdCB0aGlzIGFzIGFuIGVycm9yLCBidXQgbm93IGl0J3MgYSBub25mYXRhbCB3YXJuaW5nLAorICAgICAqIGJlY2F1c2Ugc29tZSBib3pvIGF0IEhpamFhayBjb3VsZG4ndCByZWFkIHRoZSBzcGVjLikKKyAgICAgKiBNaW5vciB2ZXJzaW9uIHNob3VsZCBiZSAwLi4yLCBidXQgcHJvY2VzcyBhbnl3YXkgaWYgbmV3ZXIuCisgICAgICovCisgICAgaWYgKGNpbmZvLT5KRklGX21ham9yX3ZlcnNpb24gIT0gMSkKKyAgICAgIFdBUk5NUzIoY2luZm8sIEpXUk5fSkZJRl9NQUpPUiwKKwkgICAgICBjaW5mby0+SkZJRl9tYWpvcl92ZXJzaW9uLCBjaW5mby0+SkZJRl9taW5vcl92ZXJzaW9uKTsKKyAgICAvKiBHZW5lcmF0ZSB0cmFjZSBtZXNzYWdlcyAqLworICAgIFRSQUNFTVM1KGNpbmZvLCAxLCBKVFJDX0pGSUYsCisJICAgICBjaW5mby0+SkZJRl9tYWpvcl92ZXJzaW9uLCBjaW5mby0+SkZJRl9taW5vcl92ZXJzaW9uLAorCSAgICAgY2luZm8tPlhfZGVuc2l0eSwgY2luZm8tPllfZGVuc2l0eSwgY2luZm8tPmRlbnNpdHlfdW5pdCk7CisgICAgLyogVmFsaWRhdGUgdGh1bWJuYWlsIGRpbWVuc2lvbnMgYW5kIGlzc3VlIGFwcHJvcHJpYXRlIG1lc3NhZ2VzICovCisgICAgaWYgKEdFVEpPQ1RFVChkYXRhWzEyXSkgfCBHRVRKT0NURVQoZGF0YVsxM10pKQorICAgICAgVFJBQ0VNUzIoY2luZm8sIDEsIEpUUkNfSkZJRl9USFVNQk5BSUwsCisJICAgICAgIEdFVEpPQ1RFVChkYXRhWzEyXSksIEdFVEpPQ1RFVChkYXRhWzEzXSkpOworICAgIHRvdGFsbGVuIC09IEFQUDBfREFUQV9MRU47CisgICAgaWYgKHRvdGFsbGVuICE9CisJKChJTlQzMilHRVRKT0NURVQoZGF0YVsxMl0pICogKElOVDMyKUdFVEpPQ1RFVChkYXRhWzEzXSkgKiAoSU5UMzIpIDMpKQorICAgICAgVFJBQ0VNUzEoY2luZm8sIDEsIEpUUkNfSkZJRl9CQURUSFVNQk5BSUxTSVpFLCAoaW50KSB0b3RhbGxlbik7CisgIH0gZWxzZSBpZiAoZGF0YWxlbiA+PSA2ICYmCisgICAgICBHRVRKT0NURVQoZGF0YVswXSkgPT0gMHg0QSAmJgorICAgICAgR0VUSk9DVEVUKGRhdGFbMV0pID09IDB4NDYgJiYKKyAgICAgIEdFVEpPQ1RFVChkYXRhWzJdKSA9PSAweDU4ICYmCisgICAgICBHRVRKT0NURVQoZGF0YVszXSkgPT0gMHg1OCAmJgorICAgICAgR0VUSk9DVEVUKGRhdGFbNF0pID09IDApIHsKKyAgICAvKiBGb3VuZCBKRklGICJKRlhYIiBleHRlbnNpb24gQVBQMCBtYXJrZXIgKi8KKyAgICAvKiBUaGUgbGlicmFyeSBkb2Vzbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIHdpdGggdGhlc2UsCisgICAgICogYnV0IHdlIHRyeSB0byBwcm9kdWNlIGEgaGVscGZ1bCB0cmFjZSBtZXNzYWdlLgorICAgICAqLworICAgIHN3aXRjaCAoR0VUSk9DVEVUKGRhdGFbNV0pKSB7CisgICAgY2FzZSAweDEwOgorICAgICAgVFJBQ0VNUzEoY2luZm8sIDEsIEpUUkNfVEhVTUJfSlBFRywgKGludCkgdG90YWxsZW4pOworICAgICAgYnJlYWs7CisgICAgY2FzZSAweDExOgorICAgICAgVFJBQ0VNUzEoY2luZm8sIDEsIEpUUkNfVEhVTUJfUEFMRVRURSwgKGludCkgdG90YWxsZW4pOworICAgICAgYnJlYWs7CisgICAgY2FzZSAweDEzOgorICAgICAgVFJBQ0VNUzEoY2luZm8sIDEsIEpUUkNfVEhVTUJfUkdCLCAoaW50KSB0b3RhbGxlbik7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgVFJBQ0VNUzIoY2luZm8sIDEsIEpUUkNfSkZJRl9FWFRFTlNJT04sCisJICAgICAgIEdFVEpPQ1RFVChkYXRhWzVdKSwgKGludCkgdG90YWxsZW4pOworICAgICAgYnJlYWs7CisgICAgfQorICB9IGVsc2UgeworICAgIC8qIFN0YXJ0IG9mIEFQUDAgZG9lcyBub3QgbWF0Y2ggIkpGSUYiIG9yICJKRlhYIiwgb3IgdG9vIHNob3J0ICovCisgICAgVFJBQ0VNUzEoY2luZm8sIDEsIEpUUkNfQVBQMCwgKGludCkgdG90YWxsZW4pOworICB9Cit9CisKKworTE9DQUwodm9pZCkKK2V4YW1pbmVfYXBwMTQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpPQ1RFVCBGQVIgKiBkYXRhLAorCSAgICAgICB1bnNpZ25lZCBpbnQgZGF0YWxlbiwgSU5UMzIgcmVtYWluaW5nKQorLyogRXhhbWluZSBmaXJzdCBmZXcgYnl0ZXMgZnJvbSBhbiBBUFAxNC4KKyAqIFRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIGlmIGl0IGlzIGFuIEFkb2JlIG1hcmtlci4KKyAqIGRhdGFsZW4gaXMgIyBvZiBieXRlcyBhdCBkYXRhW10sIHJlbWFpbmluZyBpcyBsZW5ndGggb2YgcmVzdCBvZiBtYXJrZXIgZGF0YS4KKyAqLworeworICB1bnNpZ25lZCBpbnQgdmVyc2lvbiwgZmxhZ3MwLCBmbGFnczEsIHRyYW5zZm9ybTsKKworICBpZiAoZGF0YWxlbiA+PSBBUFAxNF9EQVRBX0xFTiAmJgorICAgICAgR0VUSk9DVEVUKGRhdGFbMF0pID09IDB4NDEgJiYKKyAgICAgIEdFVEpPQ1RFVChkYXRhWzFdKSA9PSAweDY0ICYmCisgICAgICBHRVRKT0NURVQoZGF0YVsyXSkgPT0gMHg2RiAmJgorICAgICAgR0VUSk9DVEVUKGRhdGFbM10pID09IDB4NjIgJiYKKyAgICAgIEdFVEpPQ1RFVChkYXRhWzRdKSA9PSAweDY1KSB7CisgICAgLyogRm91bmQgQWRvYmUgQVBQMTQgbWFya2VyICovCisgICAgdmVyc2lvbiA9IChHRVRKT0NURVQoZGF0YVs1XSkgPDwgOCkgKyBHRVRKT0NURVQoZGF0YVs2XSk7CisgICAgZmxhZ3MwID0gKEdFVEpPQ1RFVChkYXRhWzddKSA8PCA4KSArIEdFVEpPQ1RFVChkYXRhWzhdKTsKKyAgICBmbGFnczEgPSAoR0VUSk9DVEVUKGRhdGFbOV0pIDw8IDgpICsgR0VUSk9DVEVUKGRhdGFbMTBdKTsKKyAgICB0cmFuc2Zvcm0gPSBHRVRKT0NURVQoZGF0YVsxMV0pOworICAgIFRSQUNFTVM0KGNpbmZvLCAxLCBKVFJDX0FET0JFLCB2ZXJzaW9uLCBmbGFnczAsIGZsYWdzMSwgdHJhbnNmb3JtKTsKKyAgICBjaW5mby0+c2F3X0Fkb2JlX21hcmtlciA9IFRSVUU7CisgICAgY2luZm8tPkFkb2JlX3RyYW5zZm9ybSA9IChVSU5UOCkgdHJhbnNmb3JtOworICB9IGVsc2UgeworICAgIC8qIFN0YXJ0IG9mIEFQUDE0IGRvZXMgbm90IG1hdGNoICJBZG9iZSIsIG9yIHRvbyBzaG9ydCAqLworICAgIFRSQUNFTVMxKGNpbmZvLCAxLCBKVFJDX0FQUDE0LCAoaW50KSAoZGF0YWxlbiArIHJlbWFpbmluZykpOworICB9Cit9CisKKworTUVUSE9EREVGKGJvb2xlYW4pCitnZXRfaW50ZXJlc3RpbmdfYXBwbiAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKKy8qIFByb2Nlc3MgYW4gQVBQMCBvciBBUFAxNCBtYXJrZXIgd2l0aG91dCBzYXZpbmcgaXQgKi8KK3sKKyAgSU5UMzIgbGVuZ3RoOworICBKT0NURVQgYltBUFBOX0RBVEFfTEVOXTsKKyAgdW5zaWduZWQgaW50IGksIG51bXRvcmVhZDsKKyAgSU5QVVRfVkFSUyhjaW5mbyk7CisKKyAgSU5QVVRfMkJZVEVTKGNpbmZvLCBsZW5ndGgsIHJldHVybiBGQUxTRSk7CisgIGxlbmd0aCAtPSAyOworCisgIC8qIGdldCB0aGUgaW50ZXJlc3RpbmcgcGFydCBvZiB0aGUgbWFya2VyIGRhdGEgKi8KKyAgaWYgKGxlbmd0aCA+PSBBUFBOX0RBVEFfTEVOKQorICAgIG51bXRvcmVhZCA9IEFQUE5fREFUQV9MRU47CisgIGVsc2UgaWYgKGxlbmd0aCA+IDApCisgICAgbnVtdG9yZWFkID0gKHVuc2lnbmVkIGludCkgbGVuZ3RoOworICBlbHNlCisgICAgbnVtdG9yZWFkID0gMDsKKyAgZm9yIChpID0gMDsgaSA8IG51bXRvcmVhZDsgaSsrKQorICAgIElOUFVUX0JZVEUoY2luZm8sIGJbaV0sIHJldHVybiBGQUxTRSk7CisgIGxlbmd0aCAtPSBudW10b3JlYWQ7CisKKyAgLyogcHJvY2VzcyBpdCAqLworICBzd2l0Y2ggKGNpbmZvLT51bnJlYWRfbWFya2VyKSB7CisgIGNhc2UgTV9BUFAwOgorICAgIGV4YW1pbmVfYXBwMChjaW5mbywgKEpPQ1RFVCBGQVIgKikgYiwgbnVtdG9yZWFkLCBsZW5ndGgpOworICAgIGJyZWFrOworICBjYXNlIE1fQVBQMTQ6CisgICAgZXhhbWluZV9hcHAxNChjaW5mbywgKEpPQ1RFVCBGQVIgKikgYiwgbnVtdG9yZWFkLCBsZW5ndGgpOworICAgIGJyZWFrOworICBkZWZhdWx0OgorICAgIC8qIGNhbid0IGdldCBoZXJlIHVubGVzcyBqcGVnX3NhdmVfbWFya2VycyBjaG9vc2VzIHdyb25nIHByb2Nlc3NvciAqLworICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX1VOS05PV05fTUFSS0VSLCBjaW5mby0+dW5yZWFkX21hcmtlcik7CisgICAgYnJlYWs7CisgIH0KKworICAvKiBza2lwIGFueSByZW1haW5pbmcgZGF0YSAtLSBjb3VsZCBiZSBsb3RzICovCisgIElOUFVUX1NZTkMoY2luZm8pOworICBpZiAobGVuZ3RoID4gMCkKKyAgICAoKmNpbmZvLT5zcmMtPnNraXBfaW5wdXRfZGF0YSkgKGNpbmZvLCAobG9uZykgbGVuZ3RoKTsKKworICByZXR1cm4gVFJVRTsKK30KKworCisjaWZkZWYgU0FWRV9NQVJLRVJTX1NVUFBPUlRFRAorCitNRVRIT0RERUYoYm9vbGVhbikKK3NhdmVfbWFya2VyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorLyogU2F2ZSBhbiBBUFBuIG9yIENPTSBtYXJrZXIgaW50byB0aGUgbWFya2VyIGxpc3QgKi8KK3sKKyAgbXlfbWFya2VyX3B0ciBtYXJrZXIgPSAobXlfbWFya2VyX3B0cikgY2luZm8tPm1hcmtlcjsKKyAganBlZ19zYXZlZF9tYXJrZXJfcHRyIGN1cl9tYXJrZXIgPSBtYXJrZXItPmN1cl9tYXJrZXI7CisgIHVuc2lnbmVkIGludCBieXRlc19yZWFkLCBkYXRhX2xlbmd0aDsKKyAgSk9DVEVUIEZBUiAqIGRhdGE7CisgIElOVDMyIGxlbmd0aCA9IDA7CisgIElOUFVUX1ZBUlMoY2luZm8pOworCisgIGlmIChjdXJfbWFya2VyID09IE5VTEwpIHsKKyAgICAvKiBiZWdpbiByZWFkaW5nIGEgbWFya2VyICovCisgICAgSU5QVVRfMkJZVEVTKGNpbmZvLCBsZW5ndGgsIHJldHVybiBGQUxTRSk7CisgICAgbGVuZ3RoIC09IDI7CisgICAgaWYgKGxlbmd0aCA+PSAwKSB7CQkvKiB3YXRjaCBvdXQgZm9yIGJvZ3VzIGxlbmd0aCB3b3JkICovCisgICAgICAvKiBmaWd1cmUgb3V0IGhvdyBtdWNoIHdlIHdhbnQgdG8gc2F2ZSAqLworICAgICAgdW5zaWduZWQgaW50IGxpbWl0OworICAgICAgaWYgKGNpbmZvLT51bnJlYWRfbWFya2VyID09IChpbnQpIE1fQ09NKQorCWxpbWl0ID0gbWFya2VyLT5sZW5ndGhfbGltaXRfQ09NOworICAgICAgZWxzZQorCWxpbWl0ID0gbWFya2VyLT5sZW5ndGhfbGltaXRfQVBQbltjaW5mby0+dW5yZWFkX21hcmtlciAtIChpbnQpIE1fQVBQMF07CisgICAgICBpZiAoKHVuc2lnbmVkIGludCkgbGVuZ3RoIDwgbGltaXQpCisJbGltaXQgPSAodW5zaWduZWQgaW50KSBsZW5ndGg7CisgICAgICAvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgbWFya2VyIGl0ZW0gKi8KKyAgICAgIGN1cl9tYXJrZXIgPSAoanBlZ19zYXZlZF9tYXJrZXJfcHRyKQorCSgqY2luZm8tPm1lbS0+YWxsb2NfbGFyZ2UpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJICAgIFNJWkVPRihzdHJ1Y3QganBlZ19tYXJrZXJfc3RydWN0KSArIGxpbWl0KTsKKyAgICAgIGN1cl9tYXJrZXItPm5leHQgPSBOVUxMOworICAgICAgY3VyX21hcmtlci0+bWFya2VyID0gKFVJTlQ4KSBjaW5mby0+dW5yZWFkX21hcmtlcjsKKyAgICAgIGN1cl9tYXJrZXItPm9yaWdpbmFsX2xlbmd0aCA9ICh1bnNpZ25lZCBpbnQpIGxlbmd0aDsKKyAgICAgIGN1cl9tYXJrZXItPmRhdGFfbGVuZ3RoID0gbGltaXQ7CisgICAgICAvKiBkYXRhIGFyZWEgaXMganVzdCBiZXlvbmQgdGhlIGpwZWdfbWFya2VyX3N0cnVjdCAqLworICAgICAgZGF0YSA9IGN1cl9tYXJrZXItPmRhdGEgPSAoSk9DVEVUIEZBUiAqKSAoY3VyX21hcmtlciArIDEpOworICAgICAgbWFya2VyLT5jdXJfbWFya2VyID0gY3VyX21hcmtlcjsKKyAgICAgIG1hcmtlci0+Ynl0ZXNfcmVhZCA9IDA7CisgICAgICBieXRlc19yZWFkID0gMDsKKyAgICAgIGRhdGFfbGVuZ3RoID0gbGltaXQ7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIGRlYWwgd2l0aCBib2d1cyBsZW5ndGggd29yZCAqLworICAgICAgYnl0ZXNfcmVhZCA9IGRhdGFfbGVuZ3RoID0gMDsKKyAgICAgIGRhdGEgPSBOVUxMOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICAvKiByZXN1bWUgcmVhZGluZyBhIG1hcmtlciAqLworICAgIGJ5dGVzX3JlYWQgPSBtYXJrZXItPmJ5dGVzX3JlYWQ7CisgICAgZGF0YV9sZW5ndGggPSBjdXJfbWFya2VyLT5kYXRhX2xlbmd0aDsKKyAgICBkYXRhID0gY3VyX21hcmtlci0+ZGF0YSArIGJ5dGVzX3JlYWQ7CisgIH0KKworICB3aGlsZSAoYnl0ZXNfcmVhZCA8IGRhdGFfbGVuZ3RoKSB7CisgICAgSU5QVVRfU1lOQyhjaW5mbyk7CQkvKiBtb3ZlIHRoZSByZXN0YXJ0IHBvaW50IHRvIGhlcmUgKi8KKyAgICBtYXJrZXItPmJ5dGVzX3JlYWQgPSBieXRlc19yZWFkOworICAgIC8qIElmIHRoZXJlJ3Mgbm90IGF0IGxlYXN0IG9uZSBieXRlIGluIGJ1ZmZlciwgc3VzcGVuZCAqLworICAgIE1BS0VfQllURV9BVkFJTChjaW5mbywgcmV0dXJuIEZBTFNFKTsKKyAgICAvKiBDb3B5IGJ5dGVzIHdpdGggcmVhc29uYWJsZSByYXBpZGl0eSAqLworICAgIHdoaWxlIChieXRlc19yZWFkIDwgZGF0YV9sZW5ndGggJiYgYnl0ZXNfaW5fYnVmZmVyID4gMCkgeworICAgICAgKmRhdGErKyA9ICpuZXh0X2lucHV0X2J5dGUrKzsKKyAgICAgIGJ5dGVzX2luX2J1ZmZlci0tOworICAgICAgYnl0ZXNfcmVhZCsrOworICAgIH0KKyAgfQorCisgIC8qIERvbmUgcmVhZGluZyB3aGF0IHdlIHdhbnQgdG8gcmVhZCAqLworICBpZiAoY3VyX21hcmtlciAhPSBOVUxMKSB7CS8qIHdpbGwgYmUgTlVMTCBpZiBib2d1cyBsZW5ndGggd29yZCAqLworICAgIC8qIEFkZCBuZXcgbWFya2VyIHRvIGVuZCBvZiBsaXN0ICovCisgICAgaWYgKGNpbmZvLT5tYXJrZXJfbGlzdCA9PSBOVUxMKSB7CisgICAgICBjaW5mby0+bWFya2VyX2xpc3QgPSBjdXJfbWFya2VyOworICAgIH0gZWxzZSB7CisgICAgICBqcGVnX3NhdmVkX21hcmtlcl9wdHIgcHJldiA9IGNpbmZvLT5tYXJrZXJfbGlzdDsKKyAgICAgIHdoaWxlIChwcmV2LT5uZXh0ICE9IE5VTEwpCisJcHJldiA9IHByZXYtPm5leHQ7CisgICAgICBwcmV2LT5uZXh0ID0gY3VyX21hcmtlcjsKKyAgICB9CisgICAgLyogUmVzZXQgcG9pbnRlciAmIGNhbGMgcmVtYWluaW5nIGRhdGEgbGVuZ3RoICovCisgICAgZGF0YSA9IGN1cl9tYXJrZXItPmRhdGE7CisgICAgbGVuZ3RoID0gY3VyX21hcmtlci0+b3JpZ2luYWxfbGVuZ3RoIC0gZGF0YV9sZW5ndGg7CisgIH0KKyAgLyogUmVzZXQgdG8gaW5pdGlhbCBzdGF0ZSBmb3IgbmV4dCBtYXJrZXIgKi8KKyAgbWFya2VyLT5jdXJfbWFya2VyID0gTlVMTDsKKworICAvKiBQcm9jZXNzIHRoZSBtYXJrZXIgaWYgaW50ZXJlc3Rpbmc7IGVsc2UganVzdCBtYWtlIGEgZ2VuZXJpYyB0cmFjZSBtc2cgKi8KKyAgc3dpdGNoIChjaW5mby0+dW5yZWFkX21hcmtlcikgeworICBjYXNlIE1fQVBQMDoKKyAgICBleGFtaW5lX2FwcDAoY2luZm8sIGRhdGEsIGRhdGFfbGVuZ3RoLCBsZW5ndGgpOworICAgIGJyZWFrOworICBjYXNlIE1fQVBQMTQ6CisgICAgZXhhbWluZV9hcHAxNChjaW5mbywgZGF0YSwgZGF0YV9sZW5ndGgsIGxlbmd0aCk7CisgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgVFJBQ0VNUzIoY2luZm8sIDEsIEpUUkNfTUlTQ19NQVJLRVIsIGNpbmZvLT51bnJlYWRfbWFya2VyLAorCSAgICAgKGludCkgKGRhdGFfbGVuZ3RoICsgbGVuZ3RoKSk7CisgICAgYnJlYWs7CisgIH0KKworICAvKiBza2lwIGFueSByZW1haW5pbmcgZGF0YSAtLSBjb3VsZCBiZSBsb3RzICovCisgIElOUFVUX1NZTkMoY2luZm8pOwkJLyogZG8gYmVmb3JlIHNraXBfaW5wdXRfZGF0YSAqLworICBpZiAobGVuZ3RoID4gMCkKKyAgICAoKmNpbmZvLT5zcmMtPnNraXBfaW5wdXRfZGF0YSkgKGNpbmZvLCAobG9uZykgbGVuZ3RoKTsKKworICByZXR1cm4gVFJVRTsKK30KKworI2VuZGlmIC8qIFNBVkVfTUFSS0VSU19TVVBQT1JURUQgKi8KKworCitNRVRIT0RERUYoYm9vbGVhbikKK3NraXBfdmFyaWFibGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCisvKiBTa2lwIG92ZXIgYW4gdW5rbm93biBvciB1bmludGVyZXN0aW5nIHZhcmlhYmxlLWxlbmd0aCBtYXJrZXIgKi8KK3sKKyAgSU5UMzIgbGVuZ3RoOworICBJTlBVVF9WQVJTKGNpbmZvKTsKKworICBJTlBVVF8yQllURVMoY2luZm8sIGxlbmd0aCwgcmV0dXJuIEZBTFNFKTsKKyAgbGVuZ3RoIC09IDI7CisgIAorICBUUkFDRU1TMihjaW5mbywgMSwgSlRSQ19NSVNDX01BUktFUiwgY2luZm8tPnVucmVhZF9tYXJrZXIsIChpbnQpIGxlbmd0aCk7CisKKyAgSU5QVVRfU1lOQyhjaW5mbyk7CQkvKiBkbyBiZWZvcmUgc2tpcF9pbnB1dF9kYXRhICovCisgIGlmIChsZW5ndGggPiAwKQorICAgICgqY2luZm8tPnNyYy0+c2tpcF9pbnB1dF9kYXRhKSAoY2luZm8sIChsb25nKSBsZW5ndGgpOworCisgIHJldHVybiBUUlVFOworfQorCisKKy8qCisgKiBGaW5kIHRoZSBuZXh0IEpQRUcgbWFya2VyLCBzYXZlIGl0IGluIGNpbmZvLT51bnJlYWRfbWFya2VyLgorICogUmV0dXJucyBGQUxTRSBpZiBoYWQgdG8gc3VzcGVuZCBiZWZvcmUgcmVhY2hpbmcgYSBtYXJrZXI7CisgKiBpbiB0aGF0IGNhc2UgY2luZm8tPnVucmVhZF9tYXJrZXIgaXMgdW5jaGFuZ2VkLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgcmVzdWx0IG1pZ2h0IG5vdCBiZSBhIHZhbGlkIG1hcmtlciBjb2RlLAorICogYnV0IGl0IHdpbGwgbmV2ZXIgYmUgMCBvciBGRi4KKyAqLworCitMT0NBTChib29sZWFuKQorbmV4dF9tYXJrZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIGludCBjOworICBJTlBVVF9WQVJTKGNpbmZvKTsKKworICBmb3IgKDs7KSB7CisgICAgSU5QVVRfQllURShjaW5mbywgYywgcmV0dXJuIEZBTFNFKTsKKyAgICAvKiBTa2lwIGFueSBub24tRkYgYnl0ZXMuCisgICAgICogVGhpcyBtYXkgbG9vayBhIGJpdCBpbmVmZmljaWVudCwgYnV0IGl0IHdpbGwgbm90IG9jY3VyIGluIGEgdmFsaWQgZmlsZS4KKyAgICAgKiBXZSBzeW5jIGFmdGVyIGVhY2ggZGlzY2FyZGVkIGJ5dGUgc28gdGhhdCBhIHN1c3BlbmRpbmcgZGF0YSBzb3VyY2UKKyAgICAgKiBjYW4gZGlzY2FyZCB0aGUgYnl0ZSBmcm9tIGl0cyBidWZmZXIuCisgICAgICovCisgICAgd2hpbGUgKGMgIT0gMHhGRikgeworICAgICAgY2luZm8tPm1hcmtlci0+ZGlzY2FyZGVkX2J5dGVzKys7CisgICAgICBJTlBVVF9TWU5DKGNpbmZvKTsKKyAgICAgIElOUFVUX0JZVEUoY2luZm8sIGMsIHJldHVybiBGQUxTRSk7CisgICAgfQorICAgIC8qIFRoaXMgbG9vcCBzd2FsbG93cyBhbnkgZHVwbGljYXRlIEZGIGJ5dGVzLiAgRXh0cmEgRkZzIGFyZSBsZWdhbCBhcworICAgICAqIHBhZCBieXRlcywgc28gZG9uJ3QgY291bnQgdGhlbSBpbiBkaXNjYXJkZWRfYnl0ZXMuICBXZSBhc3N1bWUgdGhlcmUKKyAgICAgKiB3aWxsIG5vdCBiZSBzbyBtYW55IGNvbnNlY3V0aXZlIEZGIGJ5dGVzIGFzIHRvIG92ZXJmbG93IGEgc3VzcGVuZGluZworICAgICAqIGRhdGEgc291cmNlJ3MgaW5wdXQgYnVmZmVyLgorICAgICAqLworICAgIGRvIHsKKyAgICAgIElOUFVUX0JZVEUoY2luZm8sIGMsIHJldHVybiBGQUxTRSk7CisgICAgfSB3aGlsZSAoYyA9PSAweEZGKTsKKyAgICBpZiAoYyAhPSAwKQorICAgICAgYnJlYWs7CQkJLyogZm91bmQgYSB2YWxpZCBtYXJrZXIsIGV4aXQgbG9vcCAqLworICAgIC8qIFJlYWNoIGhlcmUgaWYgd2UgZm91bmQgYSBzdHVmZmVkLXplcm8gZGF0YSBzZXF1ZW5jZSAoRkYvMDApLgorICAgICAqIERpc2NhcmQgaXQgYW5kIGxvb3AgYmFjayB0byB0cnkgYWdhaW4uCisgICAgICovCisgICAgY2luZm8tPm1hcmtlci0+ZGlzY2FyZGVkX2J5dGVzICs9IDI7CisgICAgSU5QVVRfU1lOQyhjaW5mbyk7CisgIH0KKworICBpZiAoY2luZm8tPm1hcmtlci0+ZGlzY2FyZGVkX2J5dGVzICE9IDApIHsKKyAgICBXQVJOTVMyKGNpbmZvLCBKV1JOX0VYVFJBTkVPVVNfREFUQSwgY2luZm8tPm1hcmtlci0+ZGlzY2FyZGVkX2J5dGVzLCBjKTsKKyAgICBjaW5mby0+bWFya2VyLT5kaXNjYXJkZWRfYnl0ZXMgPSAwOworICB9CisKKyAgY2luZm8tPnVucmVhZF9tYXJrZXIgPSBjOworCisgIElOUFVUX1NZTkMoY2luZm8pOworICByZXR1cm4gVFJVRTsKK30KKworCitMT0NBTChib29sZWFuKQorZmlyc3RfbWFya2VyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorLyogTGlrZSBuZXh0X21hcmtlciwgYnV0IHVzZWQgdG8gb2J0YWluIHRoZSBpbml0aWFsIFNPSSBtYXJrZXIuICovCisvKiBGb3IgdGhpcyBtYXJrZXIsIHdlIGRvIG5vdCBhbGxvdyBwcmVjZWRpbmcgZ2FyYmFnZSBvciBmaWxsOyBvdGhlcndpc2UsCisgKiB3ZSBtaWdodCB3ZWxsIHNjYW4gYW4gZW50aXJlIGlucHV0IGZpbGUgYmVmb3JlIHJlYWxpemluZyBpdCBhaW4ndCBKUEVHLgorICogSWYgYW4gYXBwbGljYXRpb24gd2FudHMgdG8gcHJvY2VzcyBub24tSkZJRiBmaWxlcywgaXQgbXVzdCBzZWVrIHRvIHRoZQorICogU09JIGJlZm9yZSBjYWxsaW5nIHRoZSBKUEVHIGxpYnJhcnkuCisgKi8KK3sKKyAgaW50IGMsIGMyOworICBJTlBVVF9WQVJTKGNpbmZvKTsKKworICBJTlBVVF9CWVRFKGNpbmZvLCBjLCByZXR1cm4gRkFMU0UpOworICBJTlBVVF9CWVRFKGNpbmZvLCBjMiwgcmV0dXJuIEZBTFNFKTsKKyAgaWYgKGMgIT0gMHhGRiB8fCBjMiAhPSAoaW50KSBNX1NPSSkKKyAgICBFUlJFWElUMihjaW5mbywgSkVSUl9OT19TT0ksIGMsIGMyKTsKKworICBjaW5mby0+dW5yZWFkX21hcmtlciA9IGMyOworCisgIElOUFVUX1NZTkMoY2luZm8pOworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogUmVhZCBtYXJrZXJzIHVudGlsIFNPUyBvciBFT0kuCisgKgorICogUmV0dXJucyBzYW1lIGNvZGVzIGFzIGFyZSBkZWZpbmVkIGZvciBqcGVnX2NvbnN1bWVfaW5wdXQ6CisgKiBKUEVHX1NVU1BFTkRFRCwgSlBFR19SRUFDSEVEX1NPUywgb3IgSlBFR19SRUFDSEVEX0VPSS4KKyAqLworCitNRVRIT0RERUYoaW50KQorcmVhZF9tYXJrZXJzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICAvKiBPdXRlciBsb29wIHJlcGVhdHMgb25jZSBmb3IgZWFjaCBtYXJrZXIuICovCisgIGZvciAoOzspIHsKKyAgICAvKiBDb2xsZWN0IHRoZSBtYXJrZXIgcHJvcGVyLCB1bmxlc3Mgd2UgYWxyZWFkeSBkaWQuICovCisgICAgLyogTkI6IGZpcnN0X21hcmtlcigpIGVuZm9yY2VzIHRoZSByZXF1aXJlbWVudCB0aGF0IFNPSSBhcHBlYXIgZmlyc3QuICovCisgICAgaWYgKGNpbmZvLT51bnJlYWRfbWFya2VyID09IDApIHsKKyAgICAgIGlmICghIGNpbmZvLT5tYXJrZXItPnNhd19TT0kpIHsKKwlpZiAoISBmaXJzdF9tYXJrZXIoY2luZm8pKQorCSAgcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgfSBlbHNlIHsKKwlpZiAoISBuZXh0X21hcmtlcihjaW5mbykpCisJICByZXR1cm4gSlBFR19TVVNQRU5ERUQ7CisgICAgICB9CisgICAgfQorICAgIC8qIEF0IHRoaXMgcG9pbnQgY2luZm8tPnVucmVhZF9tYXJrZXIgY29udGFpbnMgdGhlIG1hcmtlciBjb2RlIGFuZCB0aGUKKyAgICAgKiBpbnB1dCBwb2ludCBpcyBqdXN0IHBhc3QgdGhlIG1hcmtlciBwcm9wZXIsIGJ1dCBiZWZvcmUgYW55IHBhcmFtZXRlcnMuCisgICAgICogQSBzdXNwZW5zaW9uIHdpbGwgY2F1c2UgdXMgdG8gcmV0dXJuIHdpdGggdGhpcyBzdGF0ZSBzdGlsbCB0cnVlLgorICAgICAqLworICAgIHN3aXRjaCAoY2luZm8tPnVucmVhZF9tYXJrZXIpIHsKKyAgICBjYXNlIE1fU09JOgorICAgICAgaWYgKCEgZ2V0X3NvaShjaW5mbykpCisJcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1fU09GMDoJCS8qIEJhc2VsaW5lICovCisgICAgY2FzZSBNX1NPRjE6CQkvKiBFeHRlbmRlZCBzZXF1ZW50aWFsLCBIdWZmbWFuICovCisgICAgICBpZiAoISBnZXRfc29mKGNpbmZvLCBGQUxTRSwgRkFMU0UpKQorCXJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBNX1NPRjI6CQkvKiBQcm9ncmVzc2l2ZSwgSHVmZm1hbiAqLworICAgICAgaWYgKCEgZ2V0X3NvZihjaW5mbywgVFJVRSwgRkFMU0UpKQorCXJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBNX1NPRjk6CQkvKiBFeHRlbmRlZCBzZXF1ZW50aWFsLCBhcml0aG1ldGljICovCisgICAgICBpZiAoISBnZXRfc29mKGNpbmZvLCBGQUxTRSwgVFJVRSkpCisJcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1fU09GMTA6CQkvKiBQcm9ncmVzc2l2ZSwgYXJpdGhtZXRpYyAqLworICAgICAgaWYgKCEgZ2V0X3NvZihjaW5mbywgVFJVRSwgVFJVRSkpCisJcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgYnJlYWs7CisKKyAgICAvKiBDdXJyZW50bHkgdW5zdXBwb3J0ZWQgU09GbiB0eXBlcyAqLworICAgIGNhc2UgTV9TT0YzOgkJLyogTG9zc2xlc3MsIEh1ZmZtYW4gKi8KKyAgICBjYXNlIE1fU09GNToJCS8qIERpZmZlcmVudGlhbCBzZXF1ZW50aWFsLCBIdWZmbWFuICovCisgICAgY2FzZSBNX1NPRjY6CQkvKiBEaWZmZXJlbnRpYWwgcHJvZ3Jlc3NpdmUsIEh1ZmZtYW4gKi8KKyAgICBjYXNlIE1fU09GNzoJCS8qIERpZmZlcmVudGlhbCBsb3NzbGVzcywgSHVmZm1hbiAqLworICAgIGNhc2UgTV9KUEc6CQkJLyogUmVzZXJ2ZWQgZm9yIEpQRUcgZXh0ZW5zaW9ucyAqLworICAgIGNhc2UgTV9TT0YxMToJCS8qIExvc3NsZXNzLCBhcml0aG1ldGljICovCisgICAgY2FzZSBNX1NPRjEzOgkJLyogRGlmZmVyZW50aWFsIHNlcXVlbnRpYWwsIGFyaXRobWV0aWMgKi8KKyAgICBjYXNlIE1fU09GMTQ6CQkvKiBEaWZmZXJlbnRpYWwgcHJvZ3Jlc3NpdmUsIGFyaXRobWV0aWMgKi8KKyAgICBjYXNlIE1fU09GMTU6CQkvKiBEaWZmZXJlbnRpYWwgbG9zc2xlc3MsIGFyaXRobWV0aWMgKi8KKyAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX1NPRl9VTlNVUFBPUlRFRCwgY2luZm8tPnVucmVhZF9tYXJrZXIpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1fU09TOgorICAgICAgaWYgKCEgZ2V0X3NvcyhjaW5mbykpCisJcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgY2luZm8tPnVucmVhZF9tYXJrZXIgPSAwOwkvKiBwcm9jZXNzZWQgdGhlIG1hcmtlciAqLworICAgICAgcmV0dXJuIEpQRUdfUkVBQ0hFRF9TT1M7CisgICAgCisgICAgY2FzZSBNX0VPSToKKyAgICAgIFRSQUNFTVMoY2luZm8sIDEsIEpUUkNfRU9JKTsKKyAgICAgIGNpbmZvLT51bnJlYWRfbWFya2VyID0gMDsJLyogcHJvY2Vzc2VkIHRoZSBtYXJrZXIgKi8KKyAgICAgIHJldHVybiBKUEVHX1JFQUNIRURfRU9JOworICAgICAgCisgICAgY2FzZSBNX0RBQzoKKyAgICAgIGlmICghIGdldF9kYWMoY2luZm8pKQorCXJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSBNX0RIVDoKKyAgICAgIGlmICghIGdldF9kaHQoY2luZm8pKQorCXJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSBNX0RRVDoKKyAgICAgIGlmICghIGdldF9kcXQoY2luZm8pKQorCXJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSBNX0RSSToKKyAgICAgIGlmICghIGdldF9kcmkoY2luZm8pKQorCXJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSBNX0FQUDA6CisgICAgY2FzZSBNX0FQUDE6CisgICAgY2FzZSBNX0FQUDI6CisgICAgY2FzZSBNX0FQUDM6CisgICAgY2FzZSBNX0FQUDQ6CisgICAgY2FzZSBNX0FQUDU6CisgICAgY2FzZSBNX0FQUDY6CisgICAgY2FzZSBNX0FQUDc6CisgICAgY2FzZSBNX0FQUDg6CisgICAgY2FzZSBNX0FQUDk6CisgICAgY2FzZSBNX0FQUDEwOgorICAgIGNhc2UgTV9BUFAxMToKKyAgICBjYXNlIE1fQVBQMTI6CisgICAgY2FzZSBNX0FQUDEzOgorICAgIGNhc2UgTV9BUFAxNDoKKyAgICBjYXNlIE1fQVBQMTU6CisgICAgICBpZiAoISAoKigobXlfbWFya2VyX3B0cikgY2luZm8tPm1hcmtlciktPnByb2Nlc3NfQVBQblsKKwkJY2luZm8tPnVucmVhZF9tYXJrZXIgLSAoaW50KSBNX0FQUDBdKSAoY2luZm8pKQorCXJldHVybiBKUEVHX1NVU1BFTkRFRDsKKyAgICAgIGJyZWFrOworICAgICAgCisgICAgY2FzZSBNX0NPTToKKyAgICAgIGlmICghICgqKChteV9tYXJrZXJfcHRyKSBjaW5mby0+bWFya2VyKS0+cHJvY2Vzc19DT00pIChjaW5mbykpCisJcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1fUlNUMDoJCS8qIHRoZXNlIGFyZSBhbGwgcGFyYW1ldGVybGVzcyAqLworICAgIGNhc2UgTV9SU1QxOgorICAgIGNhc2UgTV9SU1QyOgorICAgIGNhc2UgTV9SU1QzOgorICAgIGNhc2UgTV9SU1Q0OgorICAgIGNhc2UgTV9SU1Q1OgorICAgIGNhc2UgTV9SU1Q2OgorICAgIGNhc2UgTV9SU1Q3OgorICAgIGNhc2UgTV9URU06CisgICAgICBUUkFDRU1TMShjaW5mbywgMSwgSlRSQ19QQVJNTEVTU19NQVJLRVIsIGNpbmZvLT51bnJlYWRfbWFya2VyKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBNX0ROTDoJCQkvKiBJZ25vcmUgRE5MIC4uLiBwZXJoYXBzIHRoZSB3cm9uZyB0aGluZyAqLworICAgICAgaWYgKCEgc2tpcF92YXJpYWJsZShjaW5mbykpCisJcmV0dXJuIEpQRUdfU1VTUEVOREVEOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgkJCS8qIG11c3QgYmUgREhQLCBFWFAsIEpQR24sIG9yIFJFU24gKi8KKyAgICAgIC8qIEZvciBub3csIHdlIHRyZWF0IHRoZSByZXNlcnZlZCBtYXJrZXJzIGFzIGZhdGFsIGVycm9ycyBzaW5jZSB0aGV5IGFyZQorICAgICAgICogbGlrZWx5IHRvIGJlIHVzZWQgdG8gc2lnbmFsIGluY29tcGF0aWJsZSBKUEVHIFBhcnQgMyBleHRlbnNpb25zLgorICAgICAgICogT25jZSB0aGUgSlBFRyAzIHZlcnNpb24tbnVtYmVyIG1hcmtlciBpcyB3ZWxsIGRlZmluZWQsIHRoaXMgY29kZQorICAgICAgICogb3VnaHQgdG8gY2hhbmdlIQorICAgICAgICovCisgICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9VTktOT1dOX01BUktFUiwgY2luZm8tPnVucmVhZF9tYXJrZXIpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIC8qIFN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgbWFya2VyLCBzbyByZXNldCBzdGF0ZSB2YXJpYWJsZSAqLworICAgIGNpbmZvLT51bnJlYWRfbWFya2VyID0gMDsKKyAgfSAvKiBlbmQgbG9vcCAqLworfQorCisKKy8qCisgKiBSZWFkIGEgcmVzdGFydCBtYXJrZXIsIHdoaWNoIGlzIGV4cGVjdGVkIHRvIGFwcGVhciBuZXh0IGluIHRoZSBkYXRhc3RyZWFtOworICogaWYgdGhlIG1hcmtlciBpcyBub3QgdGhlcmUsIHRha2UgYXBwcm9wcmlhdGUgcmVjb3ZlcnkgYWN0aW9uLgorICogUmV0dXJucyBGQUxTRSBpZiBzdXNwZW5zaW9uIGlzIHJlcXVpcmVkLgorICoKKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSBlbnRyb3B5IGRlY29kZXIgYWZ0ZXIgaXQgaGFzIHJlYWQgYW4gYXBwcm9wcmlhdGUKKyAqIG51bWJlciBvZiBNQ1VzLiAgY2luZm8tPnVucmVhZF9tYXJrZXIgbWF5IGJlIG5vbnplcm8gaWYgdGhlIGVudHJvcHkgZGVjb2RlcgorICogaGFzIGFscmVhZHkgcmVhZCBhIG1hcmtlciBmcm9tIHRoZSBkYXRhIHNvdXJjZS4gIFVuZGVyIG5vcm1hbCBjb25kaXRpb25zCisgKiBjaW5mby0+dW5yZWFkX21hcmtlciB3aWxsIGJlIHJlc2V0IHRvIDAgYmVmb3JlIHJldHVybmluZzsgaWYgbm90IHJlc2V0LAorICogaXQgaG9sZHMgYSBtYXJrZXIgd2hpY2ggdGhlIGRlY29kZXIgd2lsbCBiZSB1bmFibGUgdG8gcmVhZCBwYXN0LgorICovCisKK01FVEhPRERFRihib29sZWFuKQorcmVhZF9yZXN0YXJ0X21hcmtlciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgLyogT2J0YWluIGEgbWFya2VyIHVubGVzcyB3ZSBhbHJlYWR5IGRpZC4gKi8KKyAgLyogTm90ZSB0aGF0IG5leHRfbWFya2VyIHdpbGwgY29tcGxhaW4gaWYgaXQgc2tpcHMgYW55IGRhdGEuICovCisgIGlmIChjaW5mby0+dW5yZWFkX21hcmtlciA9PSAwKSB7CisgICAgaWYgKCEgbmV4dF9tYXJrZXIoY2luZm8pKQorICAgICAgcmV0dXJuIEZBTFNFOworICB9CisKKyAgaWYgKGNpbmZvLT51bnJlYWRfbWFya2VyID09CisgICAgICAoKGludCkgTV9SU1QwICsgY2luZm8tPm1hcmtlci0+bmV4dF9yZXN0YXJ0X251bSkpIHsKKyAgICAvKiBOb3JtYWwgY2FzZSAtLS0gc3dhbGxvdyB0aGUgbWFya2VyIGFuZCBsZXQgZW50cm9weSBkZWNvZGVyIGNvbnRpbnVlICovCisgICAgVFJBQ0VNUzEoY2luZm8sIDMsIEpUUkNfUlNULCBjaW5mby0+bWFya2VyLT5uZXh0X3Jlc3RhcnRfbnVtKTsKKyAgICBjaW5mby0+dW5yZWFkX21hcmtlciA9IDA7CisgIH0gZWxzZSB7CisgICAgLyogVWgtb2gsIHRoZSByZXN0YXJ0IG1hcmtlcnMgaGF2ZSBiZWVuIG1lc3NlZCB1cC4gKi8KKyAgICAvKiBMZXQgdGhlIGRhdGEgc291cmNlIG1hbmFnZXIgZGV0ZXJtaW5lIGhvdyB0byByZXN5bmMuICovCisgICAgaWYgKCEgKCpjaW5mby0+c3JjLT5yZXN5bmNfdG9fcmVzdGFydCkgKGNpbmZvLAorCQkJCQkgICAgY2luZm8tPm1hcmtlci0+bmV4dF9yZXN0YXJ0X251bSkpCisgICAgICByZXR1cm4gRkFMU0U7CisgIH0KKworICAvKiBVcGRhdGUgbmV4dC1yZXN0YXJ0IHN0YXRlICovCisgIGNpbmZvLT5tYXJrZXItPm5leHRfcmVzdGFydF9udW0gPSAoY2luZm8tPm1hcmtlci0+bmV4dF9yZXN0YXJ0X251bSArIDEpICYgNzsKKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogVGhpcyBpcyB0aGUgZGVmYXVsdCByZXN5bmNfdG9fcmVzdGFydCBtZXRob2QgZm9yIGRhdGEgc291cmNlIG1hbmFnZXJzCisgKiB0byB1c2UgaWYgdGhleSBkb24ndCBoYXZlIGFueSBiZXR0ZXIgYXBwcm9hY2guICBTb21lIGRhdGEgc291cmNlIG1hbmFnZXJzCisgKiBtYXkgYmUgYWJsZSB0byBiYWNrIHVwLCBvciBtYXkgaGF2ZSBhZGRpdGlvbmFsIGtub3dsZWRnZSBhYm91dCB0aGUgZGF0YQorICogd2hpY2ggcGVybWl0cyBhIG1vcmUgaW50ZWxsaWdlbnQgcmVjb3Zlcnkgc3RyYXRlZ3k7IHN1Y2ggbWFuYWdlcnMgd291bGQKKyAqIHByZXN1bWFibHkgc3VwcGx5IHRoZWlyIG93biByZXN5bmMgbWV0aG9kLgorICoKKyAqIHJlYWRfcmVzdGFydF9tYXJrZXIgY2FsbHMgcmVzeW5jX3RvX3Jlc3RhcnQgaWYgaXQgZmluZHMgYSBtYXJrZXIgb3RoZXIgdGhhbgorICogdGhlIHJlc3RhcnQgbWFya2VyIGl0IHdhcyBleHBlY3RpbmcuICAoVGhpcyBjb2RlIGlzICpub3QqIHVzZWQgdW5sZXNzCisgKiBhIG5vbnplcm8gcmVzdGFydCBpbnRlcnZhbCBoYXMgYmVlbiBkZWNsYXJlZC4pICBjaW5mby0+dW5yZWFkX21hcmtlciBpcworICogdGhlIG1hcmtlciBjb2RlIGFjdHVhbGx5IGZvdW5kIChtaWdodCBiZSBhbnl0aGluZywgZXhjZXB0IDAgb3IgRkYpLgorICogVGhlIGRlc2lyZWQgcmVzdGFydCBtYXJrZXIgbnVtYmVyICgwLi43KSBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuCisgKiBUaGlzIHJvdXRpbmUgaXMgc3VwcG9zZWQgdG8gYXBwbHkgd2hhdGV2ZXIgZXJyb3IgcmVjb3Zlcnkgc3RyYXRlZ3kgc2VlbXMKKyAqIGFwcHJvcHJpYXRlIGluIG9yZGVyIHRvIHBvc2l0aW9uIHRoZSBpbnB1dCBzdHJlYW0gdG8gdGhlIG5leHQgZGF0YSBzZWdtZW50LgorICogTm90ZSB0aGF0IGNpbmZvLT51bnJlYWRfbWFya2VyIGlzIHRyZWF0ZWQgYXMgYSBtYXJrZXIgYXBwZWFyaW5nIGJlZm9yZQorICogdGhlIGN1cnJlbnQgZGF0YS1zb3VyY2UgaW5wdXQgcG9pbnQ7IHVzdWFsbHkgaXQgc2hvdWxkIGJlIHJlc2V0IHRvIHplcm8KKyAqIGJlZm9yZSByZXR1cm5pbmcuCisgKiBSZXR1cm5zIEZBTFNFIGlmIHN1c3BlbnNpb24gaXMgcmVxdWlyZWQuCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBzdWJzdGFudGlhbGx5IGNvbnN0cmFpbmVkIGJ5IHdhbnRpbmcgdG8gdHJlYXQgdGhlCisgKiBpbnB1dCBhcyBhIGRhdGEgc3RyZWFtOyB0aGlzIG1lYW5zIHdlIGNhbid0IGJhY2sgdXAuICBUaGVyZWZvcmUsIHdlIGhhdmUKKyAqIG9ubHkgdGhlIGZvbGxvd2luZyBhY3Rpb25zIHRvIHdvcmsgd2l0aDoKKyAqICAgMS4gU2ltcGx5IGRpc2NhcmQgdGhlIG1hcmtlciBhbmQgbGV0IHRoZSBlbnRyb3B5IGRlY29kZXIgcmVzdW1lIGF0IG5leHQKKyAqICAgICAgYnl0ZSBvZiBmaWxlLgorICogICAyLiBSZWFkIGZvcndhcmQgdW50aWwgd2UgZmluZCBhbm90aGVyIG1hcmtlciwgZGlzY2FyZGluZyBpbnRlcnZlbmluZworICogICAgICBkYXRhLiAgKEluIHRoZW9yeSB3ZSBjb3VsZCBsb29rIGFoZWFkIHdpdGhpbiB0aGUgY3VycmVudCBidWZmZXJsb2FkLAorICogICAgICB3aXRob3V0IGhhdmluZyB0byBkaXNjYXJkIGRhdGEgaWYgd2UgZG9uJ3QgZmluZCB0aGUgZGVzaXJlZCBtYXJrZXIuCisgKiAgICAgIFRoaXMgaWRlYSBpcyBub3QgaW1wbGVtZW50ZWQgaGVyZSwgaW4gcGFydCBiZWNhdXNlIGl0IG1ha2VzIGJlaGF2aW9yCisgKiAgICAgIGRlcGVuZGVudCBvbiBidWZmZXIgc2l6ZSBhbmQgY2hhbmNlIGJ1ZmZlci1ib3VuZGFyeSBwb3NpdGlvbnMuKQorICogICAzLiBMZWF2ZSB0aGUgbWFya2VyIHVucmVhZCAoYnkgZmFpbGluZyB0byB6ZXJvIGNpbmZvLT51bnJlYWRfbWFya2VyKS4KKyAqICAgICAgVGhpcyB3aWxsIGNhdXNlIHRoZSBlbnRyb3B5IGRlY29kZXIgdG8gcHJvY2VzcyBhbiBlbXB0eSBkYXRhIHNlZ21lbnQsCisgKiAgICAgIGluc2VydGluZyBkdW1teSB6ZXJvZXMsIGFuZCB0aGVuIHdlIHdpbGwgcmVwcm9jZXNzIHRoZSBtYXJrZXIuCisgKgorICogIzIgaXMgYXBwcm9wcmlhdGUgaWYgd2UgdGhpbmsgdGhlIGRlc2lyZWQgbWFya2VyIGxpZXMgYWhlYWQsIHdoaWxlICMzIGlzCisgKiBhcHByb3ByaWF0ZSBpZiB0aGUgZm91bmQgbWFya2VyIGlzIGEgZnV0dXJlIHJlc3RhcnQgbWFya2VyIChpbmRpY2F0aW5nCisgKiB0aGF0IHdlIGhhdmUgbWlzc2VkIHRoZSBkZXNpcmVkIHJlc3RhcnQgbWFya2VyLCBwcm9iYWJseSBiZWNhdXNlIGl0IGdvdAorICogY29ycnVwdGVkKS4KKyAqIFdlIGFwcGx5ICMyIG9yICMzIGlmIHRoZSBmb3VuZCBtYXJrZXIgaXMgYSByZXN0YXJ0IG1hcmtlciBubyBtb3JlIHRoYW4KKyAqIHR3byBjb3VudHMgYmVoaW5kIG9yIGFoZWFkIG9mIHRoZSBleHBlY3RlZCBvbmUuICBXZSBhbHNvIGFwcGx5ICMyIGlmIHRoZQorICogZm91bmQgbWFya2VyIGlzIG5vdCBhIGxlZ2FsIEpQRUcgbWFya2VyIGNvZGUgKGl0J3MgY2VydGFpbmx5IGJvZ3VzIGRhdGEpLgorICogSWYgdGhlIGZvdW5kIG1hcmtlciBpcyBhIHJlc3RhcnQgbWFya2VyIG1vcmUgdGhhbiAyIGNvdW50cyBhd2F5LCB3ZSBkbyAjMQorICogKHRvbyBtdWNoIHJpc2sgdGhhdCB0aGUgbWFya2VyIGlzIGVycm9uZW91czsgd2l0aCBsdWNrIHdlIHdpbGwgYmUgYWJsZSB0bworICogcmVzeW5jIGF0IHNvbWUgZnV0dXJlIHBvaW50KS4KKyAqIEZvciBhbnkgdmFsaWQgbm9uLXJlc3RhcnQgSlBFRyBtYXJrZXIsIHdlIGFwcGx5ICMzLiAgVGhpcyBrZWVwcyB1cyBmcm9tCisgKiBvdmVycnVubmluZyB0aGUgZW5kIG9mIGEgc2Nhbi4gIEFuIGltcGxlbWVudGF0aW9uIGxpbWl0ZWQgdG8gc2luZ2xlLXNjYW4KKyAqIGZpbGVzIG1pZ2h0IGZpbmQgaXQgYmV0dGVyIHRvIGFwcGx5ICMyIGZvciBtYXJrZXJzIG90aGVyIHRoYW4gRU9JLCBzaW5jZQorICogYW55IG90aGVyIG1hcmtlciB3b3VsZCBoYXZlIHRvIGJlIGJvZ3VzIGRhdGEgaW4gdGhhdCBjYXNlLgorICovCisKK0dMT0JBTChib29sZWFuKQoranBlZ19yZXN5bmNfdG9fcmVzdGFydCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IGRlc2lyZWQpCit7CisgIGludCBtYXJrZXIgPSBjaW5mby0+dW5yZWFkX21hcmtlcjsKKyAgaW50IGFjdGlvbiA9IDE7CisgIAorICAvKiBBbHdheXMgcHV0IHVwIGEgd2FybmluZy4gKi8KKyAgV0FSTk1TMihjaW5mbywgSldSTl9NVVNUX1JFU1lOQywgbWFya2VyLCBkZXNpcmVkKTsKKyAgCisgIC8qIE91dGVyIGxvb3AgaGFuZGxlcyByZXBlYXRlZCBkZWNpc2lvbiBhZnRlciBzY2FubmluZyBmb3J3YXJkLiAqLworICBmb3IgKDs7KSB7CisgICAgaWYgKG1hcmtlciA8IChpbnQpIE1fU09GMCkKKyAgICAgIGFjdGlvbiA9IDI7CQkvKiBpbnZhbGlkIG1hcmtlciAqLworICAgIGVsc2UgaWYgKG1hcmtlciA8IChpbnQpIE1fUlNUMCB8fCBtYXJrZXIgPiAoaW50KSBNX1JTVDcpCisgICAgICBhY3Rpb24gPSAzOwkJLyogdmFsaWQgbm9uLXJlc3RhcnQgbWFya2VyICovCisgICAgZWxzZSB7CisgICAgICBpZiAobWFya2VyID09ICgoaW50KSBNX1JTVDAgKyAoKGRlc2lyZWQrMSkgJiA3KSkgfHwKKwkgIG1hcmtlciA9PSAoKGludCkgTV9SU1QwICsgKChkZXNpcmVkKzIpICYgNykpKQorCWFjdGlvbiA9IDM7CQkvKiBvbmUgb2YgdGhlIG5leHQgdHdvIGV4cGVjdGVkIHJlc3RhcnRzICovCisgICAgICBlbHNlIGlmIChtYXJrZXIgPT0gKChpbnQpIE1fUlNUMCArICgoZGVzaXJlZC0xKSAmIDcpKSB8fAorCSAgICAgICBtYXJrZXIgPT0gKChpbnQpIE1fUlNUMCArICgoZGVzaXJlZC0yKSAmIDcpKSkKKwlhY3Rpb24gPSAyOwkJLyogYSBwcmlvciByZXN0YXJ0LCBzbyBhZHZhbmNlICovCisgICAgICBlbHNlCisJYWN0aW9uID0gMTsJCS8qIGRlc2lyZWQgcmVzdGFydCBvciB0b28gZmFyIGF3YXkgKi8KKyAgICB9CisgICAgVFJBQ0VNUzIoY2luZm8sIDQsIEpUUkNfUkVDT1ZFUllfQUNUSU9OLCBtYXJrZXIsIGFjdGlvbik7CisgICAgc3dpdGNoIChhY3Rpb24pIHsKKyAgICBjYXNlIDE6CisgICAgICAvKiBEaXNjYXJkIG1hcmtlciBhbmQgbGV0IGVudHJvcHkgZGVjb2RlciByZXN1bWUgcHJvY2Vzc2luZy4gKi8KKyAgICAgIGNpbmZvLT51bnJlYWRfbWFya2VyID0gMDsKKyAgICAgIHJldHVybiBUUlVFOworICAgIGNhc2UgMjoKKyAgICAgIC8qIFNjYW4gdG8gdGhlIG5leHQgbWFya2VyLCBhbmQgcmVwZWF0IHRoZSBkZWNpc2lvbiBsb29wLiAqLworICAgICAgaWYgKCEgbmV4dF9tYXJrZXIoY2luZm8pKQorCXJldHVybiBGQUxTRTsKKyAgICAgIG1hcmtlciA9IGNpbmZvLT51bnJlYWRfbWFya2VyOworICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgLyogUmV0dXJuIHdpdGhvdXQgYWR2YW5jaW5nIHBhc3QgdGhpcyBtYXJrZXIuICovCisgICAgICAvKiBFbnRyb3B5IGRlY29kZXIgd2lsbCBiZSBmb3JjZWQgdG8gcHJvY2VzcyBhbiBlbXB0eSBzZWdtZW50LiAqLworICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICB9IC8qIGVuZCBsb29wICovCit9CisKKworLyoKKyAqIFJlc2V0IG1hcmtlciBwcm9jZXNzaW5nIHN0YXRlIHRvIGJlZ2luIGEgZnJlc2ggZGF0YXN0cmVhbS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3Jlc2V0X21hcmtlcl9yZWFkZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X21hcmtlcl9wdHIgbWFya2VyID0gKG15X21hcmtlcl9wdHIpIGNpbmZvLT5tYXJrZXI7CisKKyAgY2luZm8tPmNvbXBfaW5mbyA9IE5VTEw7CQkvKiB1bnRpbCBhbGxvY2F0ZWQgYnkgZ2V0X3NvZiAqLworICBjaW5mby0+aW5wdXRfc2Nhbl9udW1iZXIgPSAwOwkJLyogbm8gU09TIHNlZW4geWV0ICovCisgIGNpbmZvLT51bnJlYWRfbWFya2VyID0gMDsJCS8qIG5vIHBlbmRpbmcgbWFya2VyICovCisgIG1hcmtlci0+cHViLnNhd19TT0kgPSBGQUxTRTsJCS8qIHNldCBpbnRlcm5hbCBzdGF0ZSB0b28gKi8KKyAgbWFya2VyLT5wdWIuc2F3X1NPRiA9IEZBTFNFOworICBtYXJrZXItPnB1Yi5kaXNjYXJkZWRfYnl0ZXMgPSAwOworICBtYXJrZXItPmN1cl9tYXJrZXIgPSBOVUxMOworfQorCisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBtYXJrZXIgcmVhZGVyIG1vZHVsZS4KKyAqIFRoaXMgaXMgY2FsbGVkIG9ubHkgb25jZSwgd2hlbiB0aGUgZGVjb21wcmVzc2lvbiBvYmplY3QgaXMgY3JlYXRlZC4KKyAqLworCitHTE9CQUwodm9pZCkKK2ppbml0X21hcmtlcl9yZWFkZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X21hcmtlcl9wdHIgbWFya2VyOworICBpbnQgaTsKKworICAvKiBDcmVhdGUgc3Vib2JqZWN0IGluIHBlcm1hbmVudCBwb29sICovCisgIG1hcmtlciA9IChteV9tYXJrZXJfcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfUEVSTUFORU5ULAorCQkJCVNJWkVPRihteV9tYXJrZXJfcmVhZGVyKSk7CisgIGNpbmZvLT5tYXJrZXIgPSAoc3RydWN0IGpwZWdfbWFya2VyX3JlYWRlciAqKSBtYXJrZXI7CisgIC8qIEluaXRpYWxpemUgcHVibGljIG1ldGhvZCBwb2ludGVycyAqLworICBtYXJrZXItPnB1Yi5yZXNldF9tYXJrZXJfcmVhZGVyID0gcmVzZXRfbWFya2VyX3JlYWRlcjsKKyAgbWFya2VyLT5wdWIucmVhZF9tYXJrZXJzID0gcmVhZF9tYXJrZXJzOworICBtYXJrZXItPnB1Yi5yZWFkX3Jlc3RhcnRfbWFya2VyID0gcmVhZF9yZXN0YXJ0X21hcmtlcjsKKyAgLyogSW5pdGlhbGl6ZSBDT00vQVBQbiBwcm9jZXNzaW5nLgorICAgKiBCeSBkZWZhdWx0LCB3ZSBleGFtaW5lIGFuZCB0aGVuIGRpc2NhcmQgQVBQMCBhbmQgQVBQMTQsCisgICAqIGJ1dCBzaW1wbHkgZGlzY2FyZCBDT00gYW5kIGFsbCBvdGhlciBBUFBuLgorICAgKi8KKyAgbWFya2VyLT5wcm9jZXNzX0NPTSA9IHNraXBfdmFyaWFibGU7CisgIG1hcmtlci0+bGVuZ3RoX2xpbWl0X0NPTSA9IDA7CisgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisgICAgbWFya2VyLT5wcm9jZXNzX0FQUG5baV0gPSBza2lwX3ZhcmlhYmxlOworICAgIG1hcmtlci0+bGVuZ3RoX2xpbWl0X0FQUG5baV0gPSAwOworICB9CisgIG1hcmtlci0+cHJvY2Vzc19BUFBuWzBdID0gZ2V0X2ludGVyZXN0aW5nX2FwcG47CisgIG1hcmtlci0+cHJvY2Vzc19BUFBuWzE0XSA9IGdldF9pbnRlcmVzdGluZ19hcHBuOworICAvKiBSZXNldCBtYXJrZXIgcHJvY2Vzc2luZyBzdGF0ZSAqLworICByZXNldF9tYXJrZXJfcmVhZGVyKGNpbmZvKTsKK30KKworCisvKgorICogQ29udHJvbCBzYXZpbmcgb2YgQ09NIGFuZCBBUFBuIG1hcmtlcnMgaW50byBtYXJrZXJfbGlzdC4KKyAqLworCisjaWZkZWYgU0FWRV9NQVJLRVJTX1NVUFBPUlRFRAorCitHTE9CQUwodm9pZCkKK2pwZWdfc2F2ZV9tYXJrZXJzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyX2NvZGUsCisJCSAgIHVuc2lnbmVkIGludCBsZW5ndGhfbGltaXQpCit7CisgIG15X21hcmtlcl9wdHIgbWFya2VyID0gKG15X21hcmtlcl9wdHIpIGNpbmZvLT5tYXJrZXI7CisgIGxvbmcgbWF4bGVuZ3RoOworICBqcGVnX21hcmtlcl9wYXJzZXJfbWV0aG9kIHByb2Nlc3NvcjsKKworICAvKiBMZW5ndGggbGltaXQgbXVzdG4ndCBiZSBsYXJnZXIgdGhhbiB3aGF0IHdlIGNhbiBhbGxvY2F0ZQorICAgKiAoc2hvdWxkIG9ubHkgYmUgYSBjb25jZXJuIGluIGEgMTYtYml0IGVudmlyb25tZW50KS4KKyAgICovCisgIG1heGxlbmd0aCA9IGNpbmZvLT5tZW0tPm1heF9hbGxvY19jaHVuayAtIFNJWkVPRihzdHJ1Y3QganBlZ19tYXJrZXJfc3RydWN0KTsKKyAgaWYgKCgobG9uZykgbGVuZ3RoX2xpbWl0KSA+IG1heGxlbmd0aCkKKyAgICBsZW5ndGhfbGltaXQgPSAodW5zaWduZWQgaW50KSBtYXhsZW5ndGg7CisKKyAgLyogQ2hvb3NlIHByb2Nlc3NvciByb3V0aW5lIHRvIHVzZS4KKyAgICogQVBQMC9BUFAxNCBoYXZlIHNwZWNpYWwgcmVxdWlyZW1lbnRzLgorICAgKi8KKyAgaWYgKGxlbmd0aF9saW1pdCkgeworICAgIHByb2Nlc3NvciA9IHNhdmVfbWFya2VyOworICAgIC8qIElmIHNhdmluZyBBUFAwL0FQUDE0LCBzYXZlIGF0IGxlYXN0IGVub3VnaCBmb3Igb3VyIGludGVybmFsIHVzZS4gKi8KKyAgICBpZiAobWFya2VyX2NvZGUgPT0gKGludCkgTV9BUFAwICYmIGxlbmd0aF9saW1pdCA8IEFQUDBfREFUQV9MRU4pCisgICAgICBsZW5ndGhfbGltaXQgPSBBUFAwX0RBVEFfTEVOOworICAgIGVsc2UgaWYgKG1hcmtlcl9jb2RlID09IChpbnQpIE1fQVBQMTQgJiYgbGVuZ3RoX2xpbWl0IDwgQVBQMTRfREFUQV9MRU4pCisgICAgICBsZW5ndGhfbGltaXQgPSBBUFAxNF9EQVRBX0xFTjsKKyAgfSBlbHNlIHsKKyAgICBwcm9jZXNzb3IgPSBza2lwX3ZhcmlhYmxlOworICAgIC8qIElmIGRpc2NhcmRpbmcgQVBQMC9BUFAxNCwgdXNlIG91ciByZWd1bGFyIG9uLXRoZS1mbHkgcHJvY2Vzc29yLiAqLworICAgIGlmIChtYXJrZXJfY29kZSA9PSAoaW50KSBNX0FQUDAgfHwgbWFya2VyX2NvZGUgPT0gKGludCkgTV9BUFAxNCkKKyAgICAgIHByb2Nlc3NvciA9IGdldF9pbnRlcmVzdGluZ19hcHBuOworICB9CisKKyAgaWYgKG1hcmtlcl9jb2RlID09IChpbnQpIE1fQ09NKSB7CisgICAgbWFya2VyLT5wcm9jZXNzX0NPTSA9IHByb2Nlc3NvcjsKKyAgICBtYXJrZXItPmxlbmd0aF9saW1pdF9DT00gPSBsZW5ndGhfbGltaXQ7CisgIH0gZWxzZSBpZiAobWFya2VyX2NvZGUgPj0gKGludCkgTV9BUFAwICYmIG1hcmtlcl9jb2RlIDw9IChpbnQpIE1fQVBQMTUpIHsKKyAgICBtYXJrZXItPnByb2Nlc3NfQVBQblttYXJrZXJfY29kZSAtIChpbnQpIE1fQVBQMF0gPSBwcm9jZXNzb3I7CisgICAgbWFya2VyLT5sZW5ndGhfbGltaXRfQVBQblttYXJrZXJfY29kZSAtIChpbnQpIE1fQVBQMF0gPSBsZW5ndGhfbGltaXQ7CisgIH0gZWxzZQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX1VOS05PV05fTUFSS0VSLCBtYXJrZXJfY29kZSk7Cit9CisKKyNlbmRpZiAvKiBTQVZFX01BUktFUlNfU1VQUE9SVEVEICovCisKKworLyoKKyAqIEluc3RhbGwgYSBzcGVjaWFsIHByb2Nlc3NpbmcgbWV0aG9kIGZvciBDT00gb3IgQVBQbiBtYXJrZXJzLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19zZXRfbWFya2VyX3Byb2Nlc3NvciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IG1hcmtlcl9jb2RlLAorCQkJICAganBlZ19tYXJrZXJfcGFyc2VyX21ldGhvZCByb3V0aW5lKQoreworICBteV9tYXJrZXJfcHRyIG1hcmtlciA9IChteV9tYXJrZXJfcHRyKSBjaW5mby0+bWFya2VyOworCisgIGlmIChtYXJrZXJfY29kZSA9PSAoaW50KSBNX0NPTSkKKyAgICBtYXJrZXItPnByb2Nlc3NfQ09NID0gcm91dGluZTsKKyAgZWxzZSBpZiAobWFya2VyX2NvZGUgPj0gKGludCkgTV9BUFAwICYmIG1hcmtlcl9jb2RlIDw9IChpbnQpIE1fQVBQMTUpCisgICAgbWFya2VyLT5wcm9jZXNzX0FQUG5bbWFya2VyX2NvZGUgLSAoaW50KSBNX0FQUDBdID0gcm91dGluZTsKKyAgZWxzZQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX1VOS05PV05fTUFSS0VSLCBtYXJrZXJfY29kZSk7Cit9CisKKyNlbmRpZiAvL19GWF9KUEVHX1RVUkJPXwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamRtYXN0ZXIuYyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pkbWFzdGVyLmMKaW5kZXggNGFkZmQ4Mi4uZGFlNTFlMCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamRtYXN0ZXIuYworKysgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZG1hc3Rlci5jCkBAIC0xLDU2MCArMSw1NjAgQEAKLSNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pDQotLyoNCi0gKiBqZG1hc3Rlci5jDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4NCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuDQotICoNCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgbWFzdGVyIGNvbnRyb2wgbG9naWMgZm9yIHRoZSBKUEVHIGRlY29tcHJlc3Nvci4NCi0gKiBUaGVzZSByb3V0aW5lcyBhcmUgY29uY2VybmVkIHdpdGggc2VsZWN0aW5nIHRoZSBtb2R1bGVzIHRvIGJlIGV4ZWN1dGVkDQotICogYW5kIHdpdGggZGV0ZXJtaW5pbmcgdGhlIG51bWJlciBvZiBwYXNzZXMgYW5kIHRoZSB3b3JrIHRvIGJlIGRvbmUgaW4gZWFjaA0KLSAqIHBhc3MuDQotICovDQotDQotI2RlZmluZSBKUEVHX0lOVEVSTkFMUw0KLSNpbmNsdWRlICJqaW5jbHVkZS5oIg0KLSNpbmNsdWRlICJqcGVnbGliLmgiDQotDQotDQotLyogUHJpdmF0ZSBzdGF0ZSAqLw0KLQ0KLXR5cGVkZWYgc3RydWN0IHsNCi0gIHN0cnVjdCBqcGVnX2RlY29tcF9tYXN0ZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovDQotDQotICBpbnQgcGFzc19udW1iZXI7CQkvKiAjIG9mIHBhc3NlcyBjb21wbGV0ZWQgKi8NCi0NCi0gIGJvb2xlYW4gdXNpbmdfbWVyZ2VkX3Vwc2FtcGxlOyAvKiBUUlVFIGlmIHVzaW5nIG1lcmdlZCB1cHNhbXBsZS9jY29udmVydCAqLw0KLQ0KLSAgLyogU2F2ZWQgcmVmZXJlbmNlcyB0byBpbml0aWFsaXplZCBxdWFudGl6ZXIgbW9kdWxlcywNCi0gICAqIGluIGNhc2Ugd2UgbmVlZCB0byBzd2l0Y2ggbW9kZXMuDQotICAgKi8NCi0gIHN0cnVjdCBqcGVnX2NvbG9yX3F1YW50aXplciAqIHF1YW50aXplcl8xcGFzczsNCi0gIHN0cnVjdCBqcGVnX2NvbG9yX3F1YW50aXplciAqIHF1YW50aXplcl8ycGFzczsNCi19IG15X2RlY29tcF9tYXN0ZXI7DQotDQotdHlwZWRlZiBteV9kZWNvbXBfbWFzdGVyICogbXlfbWFzdGVyX3B0cjsNCi0NCi0NCi0vKg0KLSAqIERldGVybWluZSB3aGV0aGVyIG1lcmdlZCB1cHNhbXBsZS9jb2xvciBjb252ZXJzaW9uIHNob3VsZCBiZSB1c2VkLg0KLSAqIENSVUNJQUw6IHRoaXMgbXVzdCBtYXRjaCB0aGUgYWN0dWFsIGNhcGFiaWxpdGllcyBvZiBqZG1lcmdlLmMhDQotICovDQotDQotTE9DQUwoYm9vbGVhbikNCi11c2VfbWVyZ2VkX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLXsNCi0jaWZkZWYgVVBTQU1QTEVfTUVSR0lOR19TVVBQT1JURUQNCi0gIC8qIE1lcmdpbmcgaXMgdGhlIGVxdWl2YWxlbnQgb2YgcGxhaW4gYm94LWZpbHRlciB1cHNhbXBsaW5nICovDQotICBpZiAoY2luZm8tPmRvX2ZhbmN5X3Vwc2FtcGxpbmcgfHwgY2luZm8tPkNDSVI2MDFfc2FtcGxpbmcpDQotICAgIHJldHVybiBGQUxTRTsNCi0gIC8qIGpkbWVyZ2UuYyBvbmx5IHN1cHBvcnRzIFlDQz0+UkdCIGNvbG9yIGNvbnZlcnNpb24gKi8NCi0gIGlmIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSAhPSBKQ1NfWUNiQ3IgfHwgY2luZm8tPm51bV9jb21wb25lbnRzICE9IDMgfHwNCi0gICAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlICE9IEpDU19SR0IgfHwNCi0gICAgICBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgIT0gUkdCX1BJWEVMU0laRSkNCi0gICAgcmV0dXJuIEZBTFNFOw0KLSAgLyogYW5kIGl0IG9ubHkgaGFuZGxlcyAyaDF2IG9yIDJoMnYgc2FtcGxpbmcgcmF0aW9zICovDQotICBpZiAoY2luZm8tPmNvbXBfaW5mb1swXS5oX3NhbXBfZmFjdG9yICE9IDIgfHwNCi0gICAgICBjaW5mby0+Y29tcF9pbmZvWzFdLmhfc2FtcF9mYWN0b3IgIT0gMSB8fA0KLSAgICAgIGNpbmZvLT5jb21wX2luZm9bMl0uaF9zYW1wX2ZhY3RvciAhPSAxIHx8DQotICAgICAgY2luZm8tPmNvbXBfaW5mb1swXS52X3NhbXBfZmFjdG9yID4gIDIgfHwNCi0gICAgICBjaW5mby0+Y29tcF9pbmZvWzFdLnZfc2FtcF9mYWN0b3IgIT0gMSB8fA0KLSAgICAgIGNpbmZvLT5jb21wX2luZm9bMl0udl9zYW1wX2ZhY3RvciAhPSAxKQ0KLSAgICByZXR1cm4gRkFMU0U7DQotICAvKiBmdXJ0aGVybW9yZSwgaXQgZG9lc24ndCB3b3JrIGlmIHdlJ3ZlIHNjYWxlZCB0aGUgSURDVHMgZGlmZmVyZW50bHkgKi8NCi0gIGlmIChjaW5mby0+Y29tcF9pbmZvWzBdLkRDVF9zY2FsZWRfc2l6ZSAhPSBjaW5mby0+bWluX0RDVF9zY2FsZWRfc2l6ZSB8fA0KLSAgICAgIGNpbmZvLT5jb21wX2luZm9bMV0uRENUX3NjYWxlZF9zaXplICE9IGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplIHx8DQotICAgICAgY2luZm8tPmNvbXBfaW5mb1syXS5EQ1Rfc2NhbGVkX3NpemUgIT0gY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemUpDQotICAgIHJldHVybiBGQUxTRTsNCi0gIC8qID8/PyBhbHNvIG5lZWQgdG8gdGVzdCBmb3IgdXBzYW1wbGUtdGltZSByZXNjYWxpbmcsIHdoZW4gJiBpZiBzdXBwb3J0ZWQgKi8NCi0gIHJldHVybiBUUlVFOwkJCS8qIGJ5IGdvbGx5LCBpdCdsbCB3b3JrLi4uICovDQotI2Vsc2UNCi0gIHJldHVybiBGQUxTRTsNCi0jZW5kaWYNCi19DQotDQotDQotLyoNCi0gKiBDb21wdXRlIG91dHB1dCBpbWFnZSBkaW1lbnNpb25zIGFuZCByZWxhdGVkIHZhbHVlcy4NCi0gKiBOT1RFOiB0aGlzIGlzIGV4cG9ydGVkIGZvciBwb3NzaWJsZSB1c2UgYnkgYXBwbGljYXRpb24uDQotICogSGVuY2UgaXQgbXVzdG4ndCBkbyBhbnl0aGluZyB0aGF0IGNhbid0IGJlIGRvbmUgdHdpY2UuDQotICogQWxzbyBub3RlIHRoYXQgaXQgbWF5IGJlIGNhbGxlZCBiZWZvcmUgdGhlIG1hc3RlciBtb2R1bGUgaXMgaW5pdGlhbGl6ZWQhDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotanBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLS8qIERvIGNvbXB1dGF0aW9ucyB0aGF0IGFyZSBuZWVkZWQgYmVmb3JlIG1hc3RlciBzZWxlY3Rpb24gcGhhc2UgKi8NCi17DQotI2lmZGVmIElEQ1RfU0NBTElOR19TVVBQT1JURUQNCi0gIGludCBjaTsNCi0gIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7DQotI2VuZGlmDQotDQotICAvKiBQcmV2ZW50IGFwcGxpY2F0aW9uIGZyb20gY2FsbGluZyBtZSBhdCB3cm9uZyB0aW1lcyAqLw0KLSAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gRFNUQVRFX1JFQURZKQ0KLSAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOw0KLQ0KLSNpZmRlZiBJRENUX1NDQUxJTkdfU1VQUE9SVEVEDQotDQotICAvKiBDb21wdXRlIGFjdHVhbCBvdXRwdXQgaW1hZ2UgZGltZW5zaW9ucyBhbmQgRENUIHNjYWxpbmcgY2hvaWNlcy4gKi8NCi0gIGlmIChjaW5mby0+c2NhbGVfbnVtICogOCA8PSBjaW5mby0+c2NhbGVfZGVub20pIHsNCi0gICAgLyogUHJvdmlkZSAxLzggc2NhbGluZyAqLw0KLSAgICBjaW5mby0+b3V0cHV0X3dpZHRoID0gKEpESU1FTlNJT04pDQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoLCA4TCk7DQotICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gKEpESU1FTlNJT04pDQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCwgOEwpOw0KLSAgICBjaW5mby0+bWluX0RDVF9zY2FsZWRfc2l6ZSA9IDE7DQotICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiA0IDw9IGNpbmZvLT5zY2FsZV9kZW5vbSkgew0KLSAgICAvKiBQcm92aWRlIDEvNCBzY2FsaW5nICovDQotICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikNCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGgsIDRMKTsNCi0gICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikNCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0LCA0TCk7DQotICAgIGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplID0gMjsNCi0gIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIDIgPD0gY2luZm8tPnNjYWxlX2Rlbm9tKSB7DQotICAgIC8qIFByb3ZpZGUgMS8yIHNjYWxpbmcgKi8NCi0gICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQ0KLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCwgMkwpOw0KLSAgICBjaW5mby0+b3V0cHV0X2hlaWdodCA9IChKRElNRU5TSU9OKQ0KLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQsIDJMKTsNCi0gICAgY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemUgPSA0Ow0KLSAgfSBlbHNlIHsNCi0gICAgLyogUHJvdmlkZSAxLzEgc2NhbGluZyAqLw0KLSAgICBjaW5mby0+b3V0cHV0X3dpZHRoID0gY2luZm8tPmltYWdlX3dpZHRoOw0KLSAgICBjaW5mby0+b3V0cHV0X2hlaWdodCA9IGNpbmZvLT5pbWFnZV9oZWlnaHQ7DQotICAgIGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplID0gRENUU0laRTsNCi0gIH0NCi0gIC8qIEluIHNlbGVjdGluZyB0aGUgYWN0dWFsIERDVCBzY2FsaW5nIGZvciBlYWNoIGNvbXBvbmVudCwgd2UgdHJ5IHRvDQotICAgKiBzY2FsZSB1cCB0aGUgY2hyb21hIGNvbXBvbmVudHMgdmlhIElEQ1Qgc2NhbGluZyByYXRoZXIgdGhhbiB1cHNhbXBsaW5nLg0KLSAgICogVGhpcyBzYXZlcyB0aW1lIGlmIHRoZSB1cHNhbXBsZXIgZ2V0cyB0byB1c2UgMToxIHNjYWxpbmcuDQotICAgKiBOb3RlIHRoaXMgY29kZSBhc3N1bWVzIHRoYXQgdGhlIHN1cHBvcnRlZCBEQ1Qgc2NhbGluZ3MgYXJlIHBvd2VycyBvZiAyLg0KLSAgICovDQotICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOw0KLSAgICAgICBjaSsrLCBjb21wcHRyKyspIHsNCi0gICAgaW50IHNzaXplID0gY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemU7DQotICAgIHdoaWxlIChzc2l6ZSA8IERDVFNJWkUgJiYNCi0JICAgKGNvbXBwdHItPmhfc2FtcF9mYWN0b3IgKiBzc2l6ZSAqIDIgPD0NCi0JICAgIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplKSAmJg0KLQkgICAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIHNzaXplICogMiA8PQ0KLQkgICAgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemUpKSB7DQotICAgICAgc3NpemUgPSBzc2l6ZSAqIDI7DQotICAgIH0NCi0gICAgY29tcHB0ci0+RENUX3NjYWxlZF9zaXplID0gc3NpemU7DQotICB9DQotDQotICAvKiBSZWNvbXB1dGUgZG93bnNhbXBsZWQgZGltZW5zaW9ucyBvZiBjb21wb25lbnRzOw0KLSAgICogYXBwbGljYXRpb24gbmVlZHMgdG8ga25vdyB0aGVzZSBpZiB1c2luZyByYXcgZG93bnNhbXBsZWQgZGF0YS4NCi0gICAqLw0KLSAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsNCi0gICAgICAgY2krKywgY29tcHB0cisrKSB7DQotICAgIC8qIFNpemUgaW4gc2FtcGxlcywgYWZ0ZXIgSURDVCBzY2FsaW5nICovDQotICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoID0gKEpESU1FTlNJT04pDQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICoNCi0JCSAgICAobG9uZykgKGNvbXBwdHItPmhfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemUpLA0KLQkJICAgIChsb25nKSAoY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICogRENUU0laRSkpOw0KLSAgICBjb21wcHRyLT5kb3duc2FtcGxlZF9oZWlnaHQgPSAoSkRJTUVOU0lPTikNCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICoNCi0JCSAgICAobG9uZykgKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemUpLA0KLQkJICAgIChsb25nKSAoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogRENUU0laRSkpOw0KLSAgfQ0KLQ0KLSNlbHNlIC8qICFJRENUX1NDQUxJTkdfU1VQUE9SVEVEICovDQotDQotICAvKiBIYXJkd2lyZSBpdCB0byAibm8gc2NhbGluZyIgKi8NCi0gIGNpbmZvLT5vdXRwdXRfd2lkdGggPSBjaW5mby0+aW1hZ2Vfd2lkdGg7DQotICBjaW5mby0+b3V0cHV0X2hlaWdodCA9IGNpbmZvLT5pbWFnZV9oZWlnaHQ7DQotICAvKiBqZGlucHV0LmMgaGFzIGFscmVhZHkgaW5pdGlhbGl6ZWQgRENUX3NjYWxlZF9zaXplIHRvIERDVFNJWkUsDQotICAgKiBhbmQgaGFzIGNvbXB1dGVkIHVuc2NhbGVkIGRvd25zYW1wbGVkX3dpZHRoIGFuZCBkb3duc2FtcGxlZF9oZWlnaHQuDQotICAgKi8NCi0NCi0jZW5kaWYgLyogSURDVF9TQ0FMSU5HX1NVUFBPUlRFRCAqLw0KLQ0KLSAgLyogUmVwb3J0IG51bWJlciBvZiBjb21wb25lbnRzIGluIHNlbGVjdGVkIGNvbG9yc3BhY2UuICovDQotICAvKiBQcm9iYWJseSB0aGlzIHNob3VsZCBiZSBpbiB0aGUgY29sb3IgY29udmVyc2lvbiBtb2R1bGUuLi4gKi8NCi0gIHN3aXRjaCAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSkgew0KLSAgY2FzZSBKQ1NfR1JBWVNDQUxFOg0KLSAgICBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgPSAxOw0KLSAgICBicmVhazsNCi0gIGNhc2UgSkNTX1JHQjoNCi0jaWYgUkdCX1BJWEVMU0laRSAhPSAzDQotICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyA9IFJHQl9QSVhFTFNJWkU7DQotICAgIGJyZWFrOw0KLSNlbmRpZiAvKiBlbHNlIHNoYXJlIGNvZGUgd2l0aCBZQ2JDciAqLw0KLSAgY2FzZSBKQ1NfWUNiQ3I6DQotICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyA9IDM7DQotICAgIGJyZWFrOw0KLSAgY2FzZSBKQ1NfQ01ZSzoNCi0gIGNhc2UgSkNTX1lDQ0s6DQotICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyA9IDQ7DQotICAgIGJyZWFrOw0KLSAgZGVmYXVsdDoJCQkvKiBlbHNlIG11c3QgYmUgc2FtZSBjb2xvcnNwYWNlIGFzIGluIGZpbGUgKi8NCi0gICAgY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzID0gY2luZm8tPm51bV9jb21wb25lbnRzOw0KLSAgICBicmVhazsNCi0gIH0NCi0gIGNpbmZvLT5vdXRwdXRfY29tcG9uZW50cyA9IChjaW5mby0+cXVhbnRpemVfY29sb3JzID8gMSA6DQotCQkJICAgICAgY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzKTsNCi0NCi0gIC8qIFNlZSBpZiB1cHNhbXBsZXIgd2lsbCB3YW50IHRvIGVtaXQgbW9yZSB0aGFuIG9uZSByb3cgYXQgYSB0aW1lICovDQotICBpZiAodXNlX21lcmdlZF91cHNhbXBsZShjaW5mbykpDQotICAgIGNpbmZvLT5yZWNfb3V0YnVmX2hlaWdodCA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcjsNCi0gIGVsc2UNCi0gICAgY2luZm8tPnJlY19vdXRidWZfaGVpZ2h0ID0gMTsNCi19DQotDQotDQotLyoNCi0gKiBTZXZlcmFsIGRlY29tcHJlc3Npb24gcHJvY2Vzc2VzIG5lZWQgdG8gcmFuZ2UtbGltaXQgdmFsdWVzIHRvIHRoZSByYW5nZQ0KLSAqIDAuLk1BWEpTQU1QTEU7IHRoZSBpbnB1dCB2YWx1ZSBtYXkgZmFsbCBzb21ld2hhdCBvdXRzaWRlIHRoaXMgcmFuZ2UNCi0gKiBkdWUgdG8gbm9pc2UgaW50cm9kdWNlZCBieSBxdWFudGl6YXRpb24sIHJvdW5kb2ZmIGVycm9yLCBldGMuICBUaGVzZQ0KLSAqIHByb2Nlc3NlcyBhcmUgaW5uZXIgbG9vcHMgYW5kIG5lZWQgdG8gYmUgYXMgZmFzdCBhcyBwb3NzaWJsZS4gIE9uIG1vc3QNCi0gKiBtYWNoaW5lcywgcGFydGljdWxhcmx5IENQVXMgd2l0aCBwaXBlbGluZXMgb3IgaW5zdHJ1Y3Rpb24gcHJlZmV0Y2gsDQotICogYSAoc3Vic2NyaXB0LWNoZWNrLWxlc3MpIEMgdGFibGUgbG9va3VwDQotICoJCXggPSBzYW1wbGVfcmFuZ2VfbGltaXRbeF07DQotICogaXMgZmFzdGVyIHRoYW4gZXhwbGljaXQgdGVzdHMNCi0gKgkJaWYgKHggPCAwKSAgeCA9IDA7DQotICoJCWVsc2UgaWYgKHggPiBNQVhKU0FNUExFKSAgeCA9IE1BWEpTQU1QTEU7DQotICogVGhlc2UgcHJvY2Vzc2VzIGFsbCB1c2UgYSBjb21tb24gdGFibGUgcHJlcGFyZWQgYnkgdGhlIHJvdXRpbmUgYmVsb3cuDQotICoNCi0gKiBGb3IgbW9zdCBzdGVwcyB3ZSBjYW4gbWF0aGVtYXRpY2FsbHkgZ3VhcmFudGVlIHRoYXQgdGhlIGluaXRpYWwgdmFsdWUNCi0gKiBvZiB4IGlzIHdpdGhpbiBNQVhKU0FNUExFKzEgb2YgdGhlIGxlZ2FsIHJhbmdlLCBzbyBhIHRhYmxlIHJ1bm5pbmcgZnJvbQ0KLSAqIC0oTUFYSlNBTVBMRSsxKSB0byAyKk1BWEpTQU1QTEUrMSBpcyBzdWZmaWNpZW50LiAgQnV0IGZvciB0aGUgaW5pdGlhbA0KLSAqIGxpbWl0aW5nIHN0ZXAgKGp1c3QgYWZ0ZXIgdGhlIElEQ1QpLCBhIHdpbGRseSBvdXQtb2YtcmFuZ2UgdmFsdWUgaXMgDQotICogcG9zc2libGUgaWYgdGhlIGlucHV0IGRhdGEgaXMgY29ycnVwdC4gIFRvIGF2b2lkIGFueSBjaGFuY2Ugb2YgaW5kZXhpbmcNCi0gKiBvZmYgdGhlIGVuZCBvZiBtZW1vcnkgYW5kIGdldHRpbmcgYSBiYWQtcG9pbnRlciB0cmFwLCB3ZSBwZXJmb3JtIHRoZQ0KLSAqIHBvc3QtSURDVCBsaW1pdGluZyB0aHVzOg0KLSAqCQl4ID0gcmFuZ2VfbGltaXRbeCAmIE1BU0tdOw0KLSAqIHdoZXJlIE1BU0sgaXMgMiBiaXRzIHdpZGVyIHRoYW4gbGVnYWwgc2FtcGxlIGRhdGEsIGllIDEwIGJpdHMgZm9yIDgtYml0DQotICogc2FtcGxlcy4gIFVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzIHRoaXMgaXMgbW9yZSB0aGFuIGVub3VnaCByYW5nZSBhbmQNCi0gKiBhIGNvcnJlY3Qgb3V0cHV0IHdpbGwgYmUgZ2VuZXJhdGVkOyB3aXRoIGJvZ3VzIGlucHV0IGRhdGEgdGhlIG1hc2sgd2lsbA0KLSAqIGNhdXNlIHdyYXBhcm91bmQsIGFuZCB3ZSB3aWxsIHNhZmVseSBnZW5lcmF0ZSBhIGJvZ3VzLWJ1dC1pbi1yYW5nZSBvdXRwdXQuDQotICogRm9yIHRoZSBwb3N0LUlEQ1Qgc3RlcCwgd2Ugd2FudCB0byBjb252ZXJ0IHRoZSBkYXRhIGZyb20gc2lnbmVkIHRvIHVuc2lnbmVkDQotICogcmVwcmVzZW50YXRpb24gYnkgYWRkaW5nIENFTlRFUkpTQU1QTEUgYXQgdGhlIHNhbWUgdGltZSB0aGF0IHdlIGxpbWl0IGl0Lg0KLSAqIFNvIHRoZSBwb3N0LUlEQ1QgbGltaXRpbmcgdGFibGUgZW5kcyB1cCBsb29raW5nIGxpa2UgdGhpczoNCi0gKiAgIENFTlRFUkpTQU1QTEUsQ0VOVEVSSlNBTVBMRSsxLC4uLixNQVhKU0FNUExFLA0KLSAqICAgTUFYSlNBTVBMRSAocmVwZWF0IDIqKE1BWEpTQU1QTEUrMSktQ0VOVEVSSlNBTVBMRSB0aW1lcyksDQotICogICAwICAgICAgICAgIChyZXBlYXQgMiooTUFYSlNBTVBMRSsxKS1DRU5URVJKU0FNUExFIHRpbWVzKSwNCi0gKiAgIDAsMSwuLi4sQ0VOVEVSSlNBTVBMRS0xDQotICogTmVnYXRpdmUgaW5wdXRzIHNlbGVjdCB2YWx1ZXMgZnJvbSB0aGUgdXBwZXIgaGFsZiBvZiB0aGUgdGFibGUgYWZ0ZXINCi0gKiBtYXNraW5nLg0KLSAqDQotICogV2UgY2FuIHNhdmUgc29tZSBzcGFjZSBieSBvdmVybGFwcGluZyB0aGUgc3RhcnQgb2YgdGhlIHBvc3QtSURDVCB0YWJsZQ0KLSAqIHdpdGggdGhlIHNpbXBsZXIgcmFuZ2UgbGltaXRpbmcgdGFibGUuICBUaGUgcG9zdC1JRENUIHRhYmxlIGJlZ2lucyBhdA0KLSAqIHNhbXBsZV9yYW5nZV9saW1pdCArIENFTlRFUkpTQU1QTEUuDQotICoNCi0gKiBOb3RlIHRoYXQgdGhlIHRhYmxlIGlzIGFsbG9jYXRlZCBpbiBuZWFyIGRhdGEgc3BhY2Ugb24gUENzOyBpdCdzIHNtYWxsDQotICogZW5vdWdoIGFuZCB1c2VkIG9mdGVuIGVub3VnaCB0byBqdXN0aWZ5IHRoaXMuDQotICovDQotDQotTE9DQUwodm9pZCkNCi1wcmVwYXJlX3JhbmdlX2xpbWl0X3RhYmxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQ0KLS8qIEFsbG9jYXRlIGFuZCBmaWxsIGluIHRoZSBzYW1wbGVfcmFuZ2VfbGltaXQgdGFibGUgKi8NCi17DQotICBKU0FNUExFICogdGFibGU7DQotICBpbnQgaTsNCi0NCi0gIHRhYmxlID0gKEpTQU1QTEUgKikNCi0gICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwNCi0JCSg1ICogKE1BWEpTQU1QTEUrMSkgKyBDRU5URVJKU0FNUExFKSAqIFNJWkVPRihKU0FNUExFKSk7DQotICB0YWJsZSArPSAoTUFYSlNBTVBMRSsxKTsJLyogYWxsb3cgbmVnYXRpdmUgc3Vic2NyaXB0cyBvZiBzaW1wbGUgdGFibGUgKi8NCi0gIGNpbmZvLT5zYW1wbGVfcmFuZ2VfbGltaXQgPSB0YWJsZTsNCi0gIC8qIEZpcnN0IHNlZ21lbnQgb2YgInNpbXBsZSIgdGFibGU6IGxpbWl0W3hdID0gMCBmb3IgeCA8IDAgKi8NCi0gIE1FTVpFUk8odGFibGUgLSAoTUFYSlNBTVBMRSsxKSwgKE1BWEpTQU1QTEUrMSkgKiBTSVpFT0YoSlNBTVBMRSkpOw0KLSAgLyogTWFpbiBwYXJ0IG9mICJzaW1wbGUiIHRhYmxlOiBsaW1pdFt4XSA9IHggKi8NCi0gIGZvciAoaSA9IDA7IGkgPD0gTUFYSlNBTVBMRTsgaSsrKQ0KLSAgICB0YWJsZVtpXSA9IChKU0FNUExFKSBpOw0KLSAgdGFibGUgKz0gQ0VOVEVSSlNBTVBMRTsJLyogUG9pbnQgdG8gd2hlcmUgcG9zdC1JRENUIHRhYmxlIHN0YXJ0cyAqLw0KLSAgLyogRW5kIG9mIHNpbXBsZSB0YWJsZSwgcmVzdCBvZiBmaXJzdCBoYWxmIG9mIHBvc3QtSURDVCB0YWJsZSAqLw0KLSAgZm9yIChpID0gQ0VOVEVSSlNBTVBMRTsgaSA8IDIqKE1BWEpTQU1QTEUrMSk7IGkrKykNCi0gICAgdGFibGVbaV0gPSBNQVhKU0FNUExFOw0KLSAgLyogU2Vjb25kIGhhbGYgb2YgcG9zdC1JRENUIHRhYmxlICovDQotICBNRU1aRVJPKHRhYmxlICsgKDIgKiAoTUFYSlNBTVBMRSsxKSksDQotCSAgKDIgKiAoTUFYSlNBTVBMRSsxKSAtIENFTlRFUkpTQU1QTEUpICogU0laRU9GKEpTQU1QTEUpKTsNCi0gIE1FTUNPUFkodGFibGUgKyAoNCAqIChNQVhKU0FNUExFKzEpIC0gQ0VOVEVSSlNBTVBMRSksDQotCSAgY2luZm8tPnNhbXBsZV9yYW5nZV9saW1pdCwgQ0VOVEVSSlNBTVBMRSAqIFNJWkVPRihKU0FNUExFKSk7DQotfQ0KLQ0KLQ0KLS8qDQotICogTWFzdGVyIHNlbGVjdGlvbiBvZiBkZWNvbXByZXNzaW9uIG1vZHVsZXMuDQotICogVGhpcyBpcyBkb25lIG9uY2UgYXQganBlZ19zdGFydF9kZWNvbXByZXNzIHRpbWUuICBXZSBkZXRlcm1pbmUNCi0gKiB3aGljaCBtb2R1bGVzIHdpbGwgYmUgdXNlZCBhbmQgZ2l2ZSB0aGVtIGFwcHJvcHJpYXRlIGluaXRpYWxpemF0aW9uIGNhbGxzLg0KLSAqIFdlIGFsc28gaW5pdGlhbGl6ZSB0aGUgZGVjb21wcmVzc29yIGlucHV0IHNpZGUgdG8gYmVnaW4gY29uc3VtaW5nIGRhdGEuDQotICoNCi0gKiBTaW5jZSBqcGVnX3JlYWRfaGVhZGVyIGhhcyBmaW5pc2hlZCwgd2Uga25vdyB3aGF0IGlzIGluIHRoZSBTT0YNCi0gKiBhbmQgKGZpcnN0KSBTT1MgbWFya2Vycy4gIFdlIGFsc28gaGF2ZSBhbGwgdGhlIGFwcGxpY2F0aW9uIHBhcmFtZXRlcg0KLSAqIHNldHRpbmdzLg0KLSAqLw0KLQ0KLUxPQ0FMKHZvaWQpDQotbWFzdGVyX3NlbGVjdGlvbiAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBteV9tYXN0ZXJfcHRyIG1hc3RlciA9IChteV9tYXN0ZXJfcHRyKSBjaW5mby0+bWFzdGVyOw0KLSAgYm9vbGVhbiB1c2VfY19idWZmZXI7DQotICBsb25nIHNhbXBsZXNwZXJyb3c7DQotICBKRElNRU5TSU9OIGpkX3NhbXBsZXNwZXJyb3c7DQotDQotICAvKiBJbml0aWFsaXplIGRpbWVuc2lvbnMgYW5kIG90aGVyIHN0dWZmICovDQotICBqcGVnX2NhbGNfb3V0cHV0X2RpbWVuc2lvbnMoY2luZm8pOw0KLSAgcHJlcGFyZV9yYW5nZV9saW1pdF90YWJsZShjaW5mbyk7DQotDQotICAvKiBXaWR0aCBvZiBhbiBvdXRwdXQgc2NhbmxpbmUgbXVzdCBiZSByZXByZXNlbnRhYmxlIGFzIEpESU1FTlNJT04uICovDQotICBzYW1wbGVzcGVycm93ID0gKGxvbmcpIGNpbmZvLT5vdXRwdXRfd2lkdGggKiAobG9uZykgY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzOw0KLSAgamRfc2FtcGxlc3BlcnJvdyA9IChKRElNRU5TSU9OKSBzYW1wbGVzcGVycm93Ow0KLSAgaWYgKChsb25nKSBqZF9zYW1wbGVzcGVycm93ICE9IHNhbXBsZXNwZXJyb3cpDQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfV0lEVEhfT1ZFUkZMT1cpOw0KLQ0KLSAgLyogSW5pdGlhbGl6ZSBteSBwcml2YXRlIHN0YXRlICovDQotICBtYXN0ZXItPnBhc3NfbnVtYmVyID0gMDsNCi0gIG1hc3Rlci0+dXNpbmdfbWVyZ2VkX3Vwc2FtcGxlID0gdXNlX21lcmdlZF91cHNhbXBsZShjaW5mbyk7DQotDQotICAvKiBDb2xvciBxdWFudGl6ZXIgc2VsZWN0aW9uICovDQotICBtYXN0ZXItPnF1YW50aXplcl8xcGFzcyA9IE5VTEw7DQotICBtYXN0ZXItPnF1YW50aXplcl8ycGFzcyA9IE5VTEw7DQotICAvKiBObyBtb2RlIGNoYW5nZXMgaWYgbm90IHVzaW5nIGJ1ZmZlcmVkLWltYWdlIG1vZGUuICovDQotICBpZiAoISBjaW5mby0+cXVhbnRpemVfY29sb3JzIHx8ICEgY2luZm8tPmJ1ZmZlcmVkX2ltYWdlKSB7DQotICAgIGNpbmZvLT5lbmFibGVfMXBhc3NfcXVhbnQgPSBGQUxTRTsNCi0gICAgY2luZm8tPmVuYWJsZV9leHRlcm5hbF9xdWFudCA9IEZBTFNFOw0KLSAgICBjaW5mby0+ZW5hYmxlXzJwYXNzX3F1YW50ID0gRkFMU0U7DQotICB9DQotICBpZiAoY2luZm8tPnF1YW50aXplX2NvbG9ycykgew0KLSAgICBpZiAoY2luZm8tPnJhd19kYXRhX291dCkNCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVElNUEwpOw0KLSAgICAvKiAyLXBhc3MgcXVhbnRpemVyIG9ubHkgd29ya3MgaW4gMy1jb21wb25lbnQgY29sb3Igc3BhY2UuICovDQotICAgIGlmIChjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgIT0gMykgew0KLSAgICAgIGNpbmZvLT5lbmFibGVfMXBhc3NfcXVhbnQgPSBUUlVFOw0KLSAgICAgIGNpbmZvLT5lbmFibGVfZXh0ZXJuYWxfcXVhbnQgPSBGQUxTRTsNCi0gICAgICBjaW5mby0+ZW5hYmxlXzJwYXNzX3F1YW50ID0gRkFMU0U7DQotICAgICAgY2luZm8tPmNvbG9ybWFwID0gTlVMTDsNCi0gICAgfSBlbHNlIGlmIChjaW5mby0+Y29sb3JtYXAgIT0gTlVMTCkgew0KLSAgICAgIGNpbmZvLT5lbmFibGVfZXh0ZXJuYWxfcXVhbnQgPSBUUlVFOw0KLSAgICB9IGVsc2UgaWYgKGNpbmZvLT50d29fcGFzc19xdWFudGl6ZSkgew0KLSAgICAgIGNpbmZvLT5lbmFibGVfMnBhc3NfcXVhbnQgPSBUUlVFOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgIGNpbmZvLT5lbmFibGVfMXBhc3NfcXVhbnQgPSBUUlVFOw0KLSAgICB9DQotDQotICAgIGlmIChjaW5mby0+ZW5hYmxlXzFwYXNzX3F1YW50KSB7DQotI2lmZGVmIFFVQU5UXzFQQVNTX1NVUFBPUlRFRA0KLSAgICAgIGppbml0XzFwYXNzX3F1YW50aXplcihjaW5mbyk7DQotICAgICAgbWFzdGVyLT5xdWFudGl6ZXJfMXBhc3MgPSBjaW5mby0+Y3F1YW50aXplOw0KLSNlbHNlDQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOw0KLSNlbmRpZg0KLSAgICB9DQotDQotICAgIC8qIFdlIHVzZSB0aGUgMi1wYXNzIGNvZGUgdG8gbWFwIHRvIGV4dGVybmFsIGNvbG9ybWFwcy4gKi8NCi0gICAgaWYgKGNpbmZvLT5lbmFibGVfMnBhc3NfcXVhbnQgfHwgY2luZm8tPmVuYWJsZV9leHRlcm5hbF9xdWFudCkgew0KLSNpZmRlZiBRVUFOVF8yUEFTU19TVVBQT1JURUQNCi0gICAgICBqaW5pdF8ycGFzc19xdWFudGl6ZXIoY2luZm8pOw0KLSAgICAgIG1hc3Rlci0+cXVhbnRpemVyXzJwYXNzID0gY2luZm8tPmNxdWFudGl6ZTsNCi0jZWxzZQ0KLSAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsNCi0jZW5kaWYNCi0gICAgfQ0KLSAgICAvKiBJZiBib3RoIHF1YW50aXplcnMgYXJlIGluaXRpYWxpemVkLCB0aGUgMi1wYXNzIG9uZSBpcyBsZWZ0IGFjdGl2ZTsNCi0gICAgICogdGhpcyBpcyBuZWNlc3NhcnkgZm9yIHN0YXJ0aW5nIHdpdGggcXVhbnRpemF0aW9uIHRvIGFuIGV4dGVybmFsIG1hcC4NCi0gICAgICovDQotICB9DQotDQotICAvKiBQb3N0LXByb2Nlc3Npbmc6IGluIHBhcnRpY3VsYXIsIGNvbG9yIGNvbnZlcnNpb24gZmlyc3QgKi8NCi0gIGlmICghIGNpbmZvLT5yYXdfZGF0YV9vdXQpIHsNCi0gICAgaWYgKG1hc3Rlci0+dXNpbmdfbWVyZ2VkX3Vwc2FtcGxlKSB7DQotI2lmZGVmIFVQU0FNUExFX01FUkdJTkdfU1VQUE9SVEVEDQotICAgICAgamluaXRfbWVyZ2VkX3Vwc2FtcGxlcihjaW5mbyk7IC8qIGRvZXMgY29sb3IgY29udmVyc2lvbiB0b28gKi8NCi0jZWxzZQ0KLSAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsNCi0jZW5kaWYNCi0gICAgfSBlbHNlIHsNCi0gICAgICBqaW5pdF9jb2xvcl9kZWNvbnZlcnRlcihjaW5mbyk7DQotICAgICAgamluaXRfdXBzYW1wbGVyKGNpbmZvKTsNCi0gICAgfQ0KLSAgICBqaW5pdF9kX3Bvc3RfY29udHJvbGxlcihjaW5mbywgY2luZm8tPmVuYWJsZV8ycGFzc19xdWFudCk7DQotICB9DQotICAvKiBJbnZlcnNlIERDVCAqLw0KLSAgamluaXRfaW52ZXJzZV9kY3QoY2luZm8pOw0KLSAgLyogRW50cm9weSBkZWNvZGluZzogZWl0aGVyIEh1ZmZtYW4gb3IgYXJpdGhtZXRpYyBjb2RpbmcuICovDQotICBpZiAoY2luZm8tPmFyaXRoX2NvZGUpIHsNCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9BUklUSF9OT1RJTVBMKTsNCi0gIH0gZWxzZSB7DQotICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkgew0KLSNpZmRlZiBEX1BST0dSRVNTSVZFX1NVUFBPUlRFRA0KLSAgICAgIGppbml0X3BodWZmX2RlY29kZXIoY2luZm8pOw0KLSNlbHNlDQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOw0KLSNlbmRpZg0KLSAgICB9IGVsc2UNCi0gICAgICBqaW5pdF9odWZmX2RlY29kZXIoY2luZm8pOw0KLSAgfQ0KLQ0KLSAgLyogSW5pdGlhbGl6ZSBwcmluY2lwYWwgYnVmZmVyIGNvbnRyb2xsZXJzLiAqLw0KLSAgdXNlX2NfYnVmZmVyID0gY2luZm8tPmlucHV0Y3RsLT5oYXNfbXVsdGlwbGVfc2NhbnMgfHwgY2luZm8tPmJ1ZmZlcmVkX2ltYWdlOw0KLSAgamluaXRfZF9jb2VmX2NvbnRyb2xsZXIoY2luZm8sIHVzZV9jX2J1ZmZlcik7DQotDQotICBpZiAoISBjaW5mby0+cmF3X2RhdGFfb3V0KQ0KLSAgICBqaW5pdF9kX21haW5fY29udHJvbGxlcihjaW5mbywgRkFMU0UgLyogbmV2ZXIgbmVlZCBmdWxsIGJ1ZmZlciBoZXJlICovKTsNCi0NCi0gIC8qIFdlIGNhbiBub3cgdGVsbCB0aGUgbWVtb3J5IG1hbmFnZXIgdG8gYWxsb2NhdGUgdmlydHVhbCBhcnJheXMuICovDQotICAoKmNpbmZvLT5tZW0tPnJlYWxpemVfdmlydF9hcnJheXMpICgoal9jb21tb25fcHRyKSBjaW5mbyk7DQotDQotICAvKiBJbml0aWFsaXplIGlucHV0IHNpZGUgb2YgZGVjb21wcmVzc29yIHRvIGNvbnN1bWUgZmlyc3Qgc2Nhbi4gKi8NCi0gICgqY2luZm8tPmlucHV0Y3RsLT5zdGFydF9pbnB1dF9wYXNzKSAoY2luZm8pOw0KLQ0KLSNpZmRlZiBEX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQNCi0gIC8qIElmIGpwZWdfc3RhcnRfZGVjb21wcmVzcyB3aWxsIHJlYWQgdGhlIHdob2xlIGZpbGUsIGluaXRpYWxpemUNCi0gICAqIHByb2dyZXNzIG1vbml0b3JpbmcgYXBwcm9wcmlhdGVseS4gIFRoZSBpbnB1dCBzdGVwIGlzIGNvdW50ZWQNCi0gICAqIGFzIG9uZSBwYXNzLg0KLSAgICovDQotICBpZiAoY2luZm8tPnByb2dyZXNzICE9IE5VTEwgJiYgISBjaW5mby0+YnVmZmVyZWRfaW1hZ2UgJiYNCi0gICAgICBjaW5mby0+aW5wdXRjdGwtPmhhc19tdWx0aXBsZV9zY2Fucykgew0KLSAgICBpbnQgbnNjYW5zOw0KLSAgICAvKiBFc3RpbWF0ZSBudW1iZXIgb2Ygc2NhbnMgdG8gc2V0IHBhc3NfbGltaXQuICovDQotICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkgew0KLSAgICAgIC8qIEFyYml0cmFyaWx5IGVzdGltYXRlIDIgaW50ZXJsZWF2ZWQgREMgc2NhbnMgKyAzIEFDIHNjYW5zL2NvbXBvbmVudC4gKi8NCi0gICAgICBuc2NhbnMgPSAyICsgMyAqIGNpbmZvLT5udW1fY29tcG9uZW50czsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAvKiBGb3IgYSBub25wcm9ncmVzc2l2ZSBtdWx0aXNjYW4gZmlsZSwgZXN0aW1hdGUgMSBzY2FuIHBlciBjb21wb25lbnQuICovDQotICAgICAgbnNjYW5zID0gY2luZm8tPm51bV9jb21wb25lbnRzOw0KLSAgICB9DQotICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19jb3VudGVyID0gMEw7DQotICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19saW1pdCA9IChsb25nKSBjaW5mby0+dG90YWxfaU1DVV9yb3dzICogbnNjYW5zOw0KLSAgICBjaW5mby0+cHJvZ3Jlc3MtPmNvbXBsZXRlZF9wYXNzZXMgPSAwOw0KLSAgICBjaW5mby0+cHJvZ3Jlc3MtPnRvdGFsX3Bhc3NlcyA9IChjaW5mby0+ZW5hYmxlXzJwYXNzX3F1YW50ID8gMyA6IDIpOw0KLSAgICAvKiBDb3VudCB0aGUgaW5wdXQgcGFzcyBhcyBkb25lICovDQotICAgIG1hc3Rlci0+cGFzc19udW1iZXIrKzsNCi0gIH0NCi0jZW5kaWYgLyogRF9NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVEICovDQotfQ0KLQ0KLQ0KLS8qDQotICogUGVyLXBhc3Mgc2V0dXAuDQotICogVGhpcyBpcyBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIG91dHB1dCBwYXNzLiAgV2UgZGV0ZXJtaW5lIHdoaWNoDQotICogbW9kdWxlcyB3aWxsIGJlIGFjdGl2ZSBkdXJpbmcgdGhpcyBwYXNzIGFuZCBnaXZlIHRoZW0gYXBwcm9wcmlhdGUNCi0gKiBzdGFydF9wYXNzIGNhbGxzLiAgV2UgYWxzbyBzZXQgaXNfZHVtbXlfcGFzcyB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoaXMNCi0gKiBpcyBhICJyZWFsIiBvdXRwdXQgcGFzcyBvciBhIGR1bW15IHBhc3MgZm9yIGNvbG9yIHF1YW50aXphdGlvbi4NCi0gKiAoSW4gdGhlIGxhdHRlciBjYXNlLCBqZGFwaXN0ZC5jIHdpbGwgY3JhbmsgdGhlIHBhc3MgdG8gY29tcGxldGlvbi4pDQotICovDQotDQotTUVUSE9EREVGKHZvaWQpDQotcHJlcGFyZV9mb3Jfb3V0cHV0X3Bhc3MgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAgbXlfbWFzdGVyX3B0ciBtYXN0ZXIgPSAobXlfbWFzdGVyX3B0cikgY2luZm8tPm1hc3RlcjsNCi0NCi0gIGlmIChtYXN0ZXItPnB1Yi5pc19kdW1teV9wYXNzKSB7DQotI2lmZGVmIFFVQU5UXzJQQVNTX1NVUFBPUlRFRA0KLSAgICAvKiBGaW5hbCBwYXNzIG9mIDItcGFzcyBxdWFudGl6YXRpb24gKi8NCi0gICAgbWFzdGVyLT5wdWIuaXNfZHVtbXlfcGFzcyA9IEZBTFNFOw0KLSAgICAoKmNpbmZvLT5jcXVhbnRpemUtPnN0YXJ0X3Bhc3MpIChjaW5mbywgRkFMU0UpOw0KLSAgICAoKmNpbmZvLT5wb3N0LT5zdGFydF9wYXNzKSAoY2luZm8sIEpCVUZfQ1JBTktfREVTVCk7DQotICAgICgqY2luZm8tPm1haW4tPnN0YXJ0X3Bhc3MpIChjaW5mbywgSkJVRl9DUkFOS19ERVNUKTsNCi0jZWxzZQ0KLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7DQotI2VuZGlmIC8qIFFVQU5UXzJQQVNTX1NVUFBPUlRFRCAqLw0KLSAgfSBlbHNlIHsNCi0gICAgaWYgKGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMgJiYgY2luZm8tPmNvbG9ybWFwID09IE5VTEwpIHsNCi0gICAgICAvKiBTZWxlY3QgbmV3IHF1YW50aXphdGlvbiBtZXRob2QgKi8NCi0gICAgICBpZiAoY2luZm8tPnR3b19wYXNzX3F1YW50aXplICYmIGNpbmZvLT5lbmFibGVfMnBhc3NfcXVhbnQpIHsNCi0JY2luZm8tPmNxdWFudGl6ZSA9IG1hc3Rlci0+cXVhbnRpemVyXzJwYXNzOw0KLQltYXN0ZXItPnB1Yi5pc19kdW1teV9wYXNzID0gVFJVRTsNCi0gICAgICB9IGVsc2UgaWYgKGNpbmZvLT5lbmFibGVfMXBhc3NfcXVhbnQpIHsNCi0JY2luZm8tPmNxdWFudGl6ZSA9IG1hc3Rlci0+cXVhbnRpemVyXzFwYXNzOw0KLSAgICAgIH0gZWxzZSB7DQotCUVSUkVYSVQoY2luZm8sIEpFUlJfTU9ERV9DSEFOR0UpOw0KLSAgICAgIH0NCi0gICAgfQ0KLSAgICAoKmNpbmZvLT5pZGN0LT5zdGFydF9wYXNzKSAoY2luZm8pOw0KLSAgICAoKmNpbmZvLT5jb2VmLT5zdGFydF9vdXRwdXRfcGFzcykgKGNpbmZvKTsNCi0gICAgaWYgKCEgY2luZm8tPnJhd19kYXRhX291dCkgew0KLSAgICAgIGlmICghIG1hc3Rlci0+dXNpbmdfbWVyZ2VkX3Vwc2FtcGxlKQ0KLQkoKmNpbmZvLT5jY29udmVydC0+c3RhcnRfcGFzcykgKGNpbmZvKTsNCi0gICAgICAoKmNpbmZvLT51cHNhbXBsZS0+c3RhcnRfcGFzcykgKGNpbmZvKTsNCi0gICAgICBpZiAoY2luZm8tPnF1YW50aXplX2NvbG9ycykNCi0JKCpjaW5mby0+Y3F1YW50aXplLT5zdGFydF9wYXNzKSAoY2luZm8sIG1hc3Rlci0+cHViLmlzX2R1bW15X3Bhc3MpOw0KLSAgICAgICgqY2luZm8tPnBvc3QtPnN0YXJ0X3Bhc3MpIChjaW5mbywNCi0JICAgIChtYXN0ZXItPnB1Yi5pc19kdW1teV9wYXNzID8gSkJVRl9TQVZFX0FORF9QQVNTIDogSkJVRl9QQVNTX1RIUlUpKTsNCi0gICAgICAoKmNpbmZvLT5tYWluLT5zdGFydF9wYXNzKSAoY2luZm8sIEpCVUZfUEFTU19USFJVKTsNCi0gICAgfQ0KLSAgfQ0KLQ0KLSAgLyogU2V0IHVwIHByb2dyZXNzIG1vbml0b3IncyBwYXNzIGluZm8gaWYgcHJlc2VudCAqLw0KLSAgaWYgKGNpbmZvLT5wcm9ncmVzcyAhPSBOVUxMKSB7DQotICAgIGNpbmZvLT5wcm9ncmVzcy0+Y29tcGxldGVkX3Bhc3NlcyA9IG1hc3Rlci0+cGFzc19udW1iZXI7DQotICAgIGNpbmZvLT5wcm9ncmVzcy0+dG90YWxfcGFzc2VzID0gbWFzdGVyLT5wYXNzX251bWJlciArDQotCQkJCSAgICAobWFzdGVyLT5wdWIuaXNfZHVtbXlfcGFzcyA/IDIgOiAxKTsNCi0gICAgLyogSW4gYnVmZmVyZWQtaW1hZ2UgbW9kZSwgd2UgYXNzdW1lIG9uZSBtb3JlIG91dHB1dCBwYXNzIGlmIEVPSSBub3QNCi0gICAgICogeWV0IHJlYWNoZWQsIGJ1dCBubyBtb3JlIHBhc3NlcyBpZiBFT0kgaGFzIGJlZW4gcmVhY2hlZC4NCi0gICAgICovDQotICAgIGlmIChjaW5mby0+YnVmZmVyZWRfaW1hZ2UgJiYgISBjaW5mby0+aW5wdXRjdGwtPmVvaV9yZWFjaGVkKSB7DQotICAgICAgY2luZm8tPnByb2dyZXNzLT50b3RhbF9wYXNzZXMgKz0gKGNpbmZvLT5lbmFibGVfMnBhc3NfcXVhbnQgPyAyIDogMSk7DQotICAgIH0NCi0gIH0NCi19DQotDQotDQotLyoNCi0gKiBGaW5pc2ggdXAgYXQgZW5kIG9mIGFuIG91dHB1dCBwYXNzLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLWZpbmlzaF9vdXRwdXRfcGFzcyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBteV9tYXN0ZXJfcHRyIG1hc3RlciA9IChteV9tYXN0ZXJfcHRyKSBjaW5mby0+bWFzdGVyOw0KLQ0KLSAgaWYgKGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMpDQotICAgICgqY2luZm8tPmNxdWFudGl6ZS0+ZmluaXNoX3Bhc3MpIChjaW5mbyk7DQotICBtYXN0ZXItPnBhc3NfbnVtYmVyKys7DQotfQ0KLQ0KLQ0KLSNpZmRlZiBEX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQNCi0NCi0vKg0KLSAqIFN3aXRjaCB0byBhIG5ldyBleHRlcm5hbCBjb2xvcm1hcCBiZXR3ZWVuIG91dHB1dCBwYXNzZXMuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotanBlZ19uZXdfY29sb3JtYXAgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAgbXlfbWFzdGVyX3B0ciBtYXN0ZXIgPSAobXlfbWFzdGVyX3B0cikgY2luZm8tPm1hc3RlcjsNCi0NCi0gIC8qIFByZXZlbnQgYXBwbGljYXRpb24gZnJvbSBjYWxsaW5nIG1lIGF0IHdyb25nIHRpbWVzICovDQotICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSAhPSBEU1RBVEVfQlVGSU1BR0UpDQotICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7DQotDQotICBpZiAoY2luZm8tPnF1YW50aXplX2NvbG9ycyAmJiBjaW5mby0+ZW5hYmxlX2V4dGVybmFsX3F1YW50ICYmDQotICAgICAgY2luZm8tPmNvbG9ybWFwICE9IE5VTEwpIHsNCi0gICAgLyogU2VsZWN0IDItcGFzcyBxdWFudGl6ZXIgZm9yIGV4dGVybmFsIGNvbG9ybWFwIHVzZSAqLw0KLSAgICBjaW5mby0+Y3F1YW50aXplID0gbWFzdGVyLT5xdWFudGl6ZXJfMnBhc3M7DQotICAgIC8qIE5vdGlmeSBxdWFudGl6ZXIgb2YgY29sb3JtYXAgY2hhbmdlICovDQotICAgICgqY2luZm8tPmNxdWFudGl6ZS0+bmV3X2NvbG9yX21hcCkgKGNpbmZvKTsNCi0gICAgbWFzdGVyLT5wdWIuaXNfZHVtbXlfcGFzcyA9IEZBTFNFOyAvKiBqdXN0IGluIGNhc2UgKi8NCi0gIH0gZWxzZQ0KLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX01PREVfQ0hBTkdFKTsNCi19DQotDQotI2VuZGlmIC8qIERfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRCAqLw0KLQ0KLQ0KLS8qDQotICogSW5pdGlhbGl6ZSBtYXN0ZXIgZGVjb21wcmVzc2lvbiBjb250cm9sIGFuZCBzZWxlY3QgYWN0aXZlIG1vZHVsZXMuDQotICogVGhpcyBpcyBwZXJmb3JtZWQgYXQgdGhlIHN0YXJ0IG9mIGpwZWdfc3RhcnRfZGVjb21wcmVzcy4NCi0gKi8NCi0NCi1HTE9CQUwodm9pZCkNCi1qaW5pdF9tYXN0ZXJfZGVjb21wcmVzcyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBteV9tYXN0ZXJfcHRyIG1hc3RlcjsNCi0NCi0gIG1hc3RlciA9IChteV9tYXN0ZXJfcHRyKQ0KLSAgICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsDQotCQkJCSAgU0laRU9GKG15X2RlY29tcF9tYXN0ZXIpKTsNCi0gIGNpbmZvLT5tYXN0ZXIgPSAoc3RydWN0IGpwZWdfZGVjb21wX21hc3RlciAqKSBtYXN0ZXI7DQotICBtYXN0ZXItPnB1Yi5wcmVwYXJlX2Zvcl9vdXRwdXRfcGFzcyA9IHByZXBhcmVfZm9yX291dHB1dF9wYXNzOw0KLSAgbWFzdGVyLT5wdWIuZmluaXNoX291dHB1dF9wYXNzID0gZmluaXNoX291dHB1dF9wYXNzOw0KLQ0KLSAgbWFzdGVyLT5wdWIuaXNfZHVtbXlfcGFzcyA9IEZBTFNFOw0KLQ0KLSAgbWFzdGVyX3NlbGVjdGlvbihjaW5mbyk7DQotfQ0KLQ0KLSNlbmRpZiAvL19GWF9KUEVHX1RVUkJPXw0KKyNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pCisvKgorICogamRtYXN0ZXIuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIG1hc3RlciBjb250cm9sIGxvZ2ljIGZvciB0aGUgSlBFRyBkZWNvbXByZXNzb3IuCisgKiBUaGVzZSByb3V0aW5lcyBhcmUgY29uY2VybmVkIHdpdGggc2VsZWN0aW5nIHRoZSBtb2R1bGVzIHRvIGJlIGV4ZWN1dGVkCisgKiBhbmQgd2l0aCBkZXRlcm1pbmluZyB0aGUgbnVtYmVyIG9mIHBhc3NlcyBhbmQgdGhlIHdvcmsgdG8gYmUgZG9uZSBpbiBlYWNoCisgKiBwYXNzLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKworCisvKiBQcml2YXRlIHN0YXRlICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IGpwZWdfZGVjb21wX21hc3RlciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICBpbnQgcGFzc19udW1iZXI7CQkvKiAjIG9mIHBhc3NlcyBjb21wbGV0ZWQgKi8KKworICBib29sZWFuIHVzaW5nX21lcmdlZF91cHNhbXBsZTsgLyogVFJVRSBpZiB1c2luZyBtZXJnZWQgdXBzYW1wbGUvY2NvbnZlcnQgKi8KKworICAvKiBTYXZlZCByZWZlcmVuY2VzIHRvIGluaXRpYWxpemVkIHF1YW50aXplciBtb2R1bGVzLAorICAgKiBpbiBjYXNlIHdlIG5lZWQgdG8gc3dpdGNoIG1vZGVzLgorICAgKi8KKyAgc3RydWN0IGpwZWdfY29sb3JfcXVhbnRpemVyICogcXVhbnRpemVyXzFwYXNzOworICBzdHJ1Y3QganBlZ19jb2xvcl9xdWFudGl6ZXIgKiBxdWFudGl6ZXJfMnBhc3M7Cit9IG15X2RlY29tcF9tYXN0ZXI7CisKK3R5cGVkZWYgbXlfZGVjb21wX21hc3RlciAqIG15X21hc3Rlcl9wdHI7CisKKworLyoKKyAqIERldGVybWluZSB3aGV0aGVyIG1lcmdlZCB1cHNhbXBsZS9jb2xvciBjb252ZXJzaW9uIHNob3VsZCBiZSB1c2VkLgorICogQ1JVQ0lBTDogdGhpcyBtdXN0IG1hdGNoIHRoZSBhY3R1YWwgY2FwYWJpbGl0aWVzIG9mIGpkbWVyZ2UuYyEKKyAqLworCitMT0NBTChib29sZWFuKQordXNlX21lcmdlZF91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyNpZmRlZiBVUFNBTVBMRV9NRVJHSU5HX1NVUFBPUlRFRAorICAvKiBNZXJnaW5nIGlzIHRoZSBlcXVpdmFsZW50IG9mIHBsYWluIGJveC1maWx0ZXIgdXBzYW1wbGluZyAqLworICBpZiAoY2luZm8tPmRvX2ZhbmN5X3Vwc2FtcGxpbmcgfHwgY2luZm8tPkNDSVI2MDFfc2FtcGxpbmcpCisgICAgcmV0dXJuIEZBTFNFOworICAvKiBqZG1lcmdlLmMgb25seSBzdXBwb3J0cyBZQ0M9PlJHQiBjb2xvciBjb252ZXJzaW9uICovCisgIGlmIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSAhPSBKQ1NfWUNiQ3IgfHwgY2luZm8tPm51bV9jb21wb25lbnRzICE9IDMgfHwKKyAgICAgIGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgIT0gSkNTX1JHQiB8fAorICAgICAgY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzICE9IFJHQl9QSVhFTFNJWkUpCisgICAgcmV0dXJuIEZBTFNFOworICAvKiBhbmQgaXQgb25seSBoYW5kbGVzIDJoMXYgb3IgMmgydiBzYW1wbGluZyByYXRpb3MgKi8KKyAgaWYgKGNpbmZvLT5jb21wX2luZm9bMF0uaF9zYW1wX2ZhY3RvciAhPSAyIHx8CisgICAgICBjaW5mby0+Y29tcF9pbmZvWzFdLmhfc2FtcF9mYWN0b3IgIT0gMSB8fAorICAgICAgY2luZm8tPmNvbXBfaW5mb1syXS5oX3NhbXBfZmFjdG9yICE9IDEgfHwKKyAgICAgIGNpbmZvLT5jb21wX2luZm9bMF0udl9zYW1wX2ZhY3RvciA+ICAyIHx8CisgICAgICBjaW5mby0+Y29tcF9pbmZvWzFdLnZfc2FtcF9mYWN0b3IgIT0gMSB8fAorICAgICAgY2luZm8tPmNvbXBfaW5mb1syXS52X3NhbXBfZmFjdG9yICE9IDEpCisgICAgcmV0dXJuIEZBTFNFOworICAvKiBmdXJ0aGVybW9yZSwgaXQgZG9lc24ndCB3b3JrIGlmIHdlJ3ZlIHNjYWxlZCB0aGUgSURDVHMgZGlmZmVyZW50bHkgKi8KKyAgaWYgKGNpbmZvLT5jb21wX2luZm9bMF0uRENUX3NjYWxlZF9zaXplICE9IGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplIHx8CisgICAgICBjaW5mby0+Y29tcF9pbmZvWzFdLkRDVF9zY2FsZWRfc2l6ZSAhPSBjaW5mby0+bWluX0RDVF9zY2FsZWRfc2l6ZSB8fAorICAgICAgY2luZm8tPmNvbXBfaW5mb1syXS5EQ1Rfc2NhbGVkX3NpemUgIT0gY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemUpCisgICAgcmV0dXJuIEZBTFNFOworICAvKiA/Pz8gYWxzbyBuZWVkIHRvIHRlc3QgZm9yIHVwc2FtcGxlLXRpbWUgcmVzY2FsaW5nLCB3aGVuICYgaWYgc3VwcG9ydGVkICovCisgIHJldHVybiBUUlVFOwkJCS8qIGJ5IGdvbGx5LCBpdCdsbCB3b3JrLi4uICovCisjZWxzZQorICByZXR1cm4gRkFMU0U7CisjZW5kaWYKK30KKworCisvKgorICogQ29tcHV0ZSBvdXRwdXQgaW1hZ2UgZGltZW5zaW9ucyBhbmQgcmVsYXRlZCB2YWx1ZXMuCisgKiBOT1RFOiB0aGlzIGlzIGV4cG9ydGVkIGZvciBwb3NzaWJsZSB1c2UgYnkgYXBwbGljYXRpb24uCisgKiBIZW5jZSBpdCBtdXN0bid0IGRvIGFueXRoaW5nIHRoYXQgY2FuJ3QgYmUgZG9uZSB0d2ljZS4KKyAqIEFsc28gbm90ZSB0aGF0IGl0IG1heSBiZSBjYWxsZWQgYmVmb3JlIHRoZSBtYXN0ZXIgbW9kdWxlIGlzIGluaXRpYWxpemVkIQorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQorLyogRG8gY29tcHV0YXRpb25zIHRoYXQgYXJlIG5lZWRlZCBiZWZvcmUgbWFzdGVyIHNlbGVjdGlvbiBwaGFzZSAqLworeworI2lmZGVmIElEQ1RfU0NBTElOR19TVVBQT1JURUQKKyAgaW50IGNpOworICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOworI2VuZGlmCisKKyAgLyogUHJldmVudCBhcHBsaWNhdGlvbiBmcm9tIGNhbGxpbmcgbWUgYXQgd3JvbmcgdGltZXMgKi8KKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gRFNUQVRFX1JFQURZKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CisKKyNpZmRlZiBJRENUX1NDQUxJTkdfU1VQUE9SVEVECisKKyAgLyogQ29tcHV0ZSBhY3R1YWwgb3V0cHV0IGltYWdlIGRpbWVuc2lvbnMgYW5kIERDVCBzY2FsaW5nIGNob2ljZXMuICovCisgIGlmIChjaW5mby0+c2NhbGVfbnVtICogOCA8PSBjaW5mby0+c2NhbGVfZGVub20pIHsKKyAgICAvKiBQcm92aWRlIDEvOCBzY2FsaW5nICovCisgICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoLCA4TCk7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQsIDhMKTsKKyAgICBjaW5mby0+bWluX0RDVF9zY2FsZWRfc2l6ZSA9IDE7CisgIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIDQgPD0gY2luZm8tPnNjYWxlX2Rlbm9tKSB7CisgICAgLyogUHJvdmlkZSAxLzQgc2NhbGluZyAqLworICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCwgNEwpOworICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0LCA0TCk7CisgICAgY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemUgPSAyOworICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiAyIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSkgeworICAgIC8qIFByb3ZpZGUgMS8yIHNjYWxpbmcgKi8KKyAgICBjaW5mby0+b3V0cHV0X3dpZHRoID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGgsIDJMKTsKKyAgICBjaW5mby0+b3V0cHV0X2hlaWdodCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCwgMkwpOworICAgIGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplID0gNDsKKyAgfSBlbHNlIHsKKyAgICAvKiBQcm92aWRlIDEvMSBzY2FsaW5nICovCisgICAgY2luZm8tPm91dHB1dF93aWR0aCA9IGNpbmZvLT5pbWFnZV93aWR0aDsKKyAgICBjaW5mby0+b3V0cHV0X2hlaWdodCA9IGNpbmZvLT5pbWFnZV9oZWlnaHQ7CisgICAgY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemUgPSBEQ1RTSVpFOworICB9CisgIC8qIEluIHNlbGVjdGluZyB0aGUgYWN0dWFsIERDVCBzY2FsaW5nIGZvciBlYWNoIGNvbXBvbmVudCwgd2UgdHJ5IHRvCisgICAqIHNjYWxlIHVwIHRoZSBjaHJvbWEgY29tcG9uZW50cyB2aWEgSURDVCBzY2FsaW5nIHJhdGhlciB0aGFuIHVwc2FtcGxpbmcuCisgICAqIFRoaXMgc2F2ZXMgdGltZSBpZiB0aGUgdXBzYW1wbGVyIGdldHMgdG8gdXNlIDE6MSBzY2FsaW5nLgorICAgKiBOb3RlIHRoaXMgY29kZSBhc3N1bWVzIHRoYXQgdGhlIHN1cHBvcnRlZCBEQ1Qgc2NhbGluZ3MgYXJlIHBvd2VycyBvZiAyLgorICAgKi8KKyAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKKyAgICBpbnQgc3NpemUgPSBjaW5mby0+bWluX0RDVF9zY2FsZWRfc2l6ZTsKKyAgICB3aGlsZSAoc3NpemUgPCBEQ1RTSVpFICYmCisJICAgKGNvbXBwdHItPmhfc2FtcF9mYWN0b3IgKiBzc2l6ZSAqIDIgPD0KKwkgICAgY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICogY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemUpICYmCisJICAgKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBzc2l6ZSAqIDIgPD0KKwkgICAgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemUpKSB7CisgICAgICBzc2l6ZSA9IHNzaXplICogMjsKKyAgICB9CisgICAgY29tcHB0ci0+RENUX3NjYWxlZF9zaXplID0gc3NpemU7CisgIH0KKworICAvKiBSZWNvbXB1dGUgZG93bnNhbXBsZWQgZGltZW5zaW9ucyBvZiBjb21wb25lbnRzOworICAgKiBhcHBsaWNhdGlvbiBuZWVkcyB0byBrbm93IHRoZXNlIGlmIHVzaW5nIHJhdyBkb3duc2FtcGxlZCBkYXRhLgorICAgKi8KKyAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKKyAgICAvKiBTaXplIGluIHNhbXBsZXMsIGFmdGVyIElEQ1Qgc2NhbGluZyAqLworICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggKgorCQkgICAgKGxvbmcpIChjb21wcHRyLT5oX3NhbXBfZmFjdG9yICogY29tcHB0ci0+RENUX3NjYWxlZF9zaXplKSwKKwkJICAgIChsb25nKSAoY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICogRENUU0laRSkpOworICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX2hlaWdodCA9IChKRElNRU5TSU9OKQorICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCAqCisJCSAgICAobG9uZykgKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemUpLAorCQkgICAgKGxvbmcpIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSk7CisgIH0KKworI2Vsc2UgLyogIUlEQ1RfU0NBTElOR19TVVBQT1JURUQgKi8KKworICAvKiBIYXJkd2lyZSBpdCB0byAibm8gc2NhbGluZyIgKi8KKyAgY2luZm8tPm91dHB1dF93aWR0aCA9IGNpbmZvLT5pbWFnZV93aWR0aDsKKyAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSBjaW5mby0+aW1hZ2VfaGVpZ2h0OworICAvKiBqZGlucHV0LmMgaGFzIGFscmVhZHkgaW5pdGlhbGl6ZWQgRENUX3NjYWxlZF9zaXplIHRvIERDVFNJWkUsCisgICAqIGFuZCBoYXMgY29tcHV0ZWQgdW5zY2FsZWQgZG93bnNhbXBsZWRfd2lkdGggYW5kIGRvd25zYW1wbGVkX2hlaWdodC4KKyAgICovCisKKyNlbmRpZiAvKiBJRENUX1NDQUxJTkdfU1VQUE9SVEVEICovCisKKyAgLyogUmVwb3J0IG51bWJlciBvZiBjb21wb25lbnRzIGluIHNlbGVjdGVkIGNvbG9yc3BhY2UuICovCisgIC8qIFByb2JhYmx5IHRoaXMgc2hvdWxkIGJlIGluIHRoZSBjb2xvciBjb252ZXJzaW9uIG1vZHVsZS4uLiAqLworICBzd2l0Y2ggKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UpIHsKKyAgY2FzZSBKQ1NfR1JBWVNDQUxFOgorICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyA9IDE7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX1JHQjoKKyNpZiBSR0JfUElYRUxTSVpFICE9IDMKKyAgICBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgPSBSR0JfUElYRUxTSVpFOworICAgIGJyZWFrOworI2VuZGlmIC8qIGVsc2Ugc2hhcmUgY29kZSB3aXRoIFlDYkNyICovCisgIGNhc2UgSkNTX1lDYkNyOgorICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyA9IDM7CisgICAgYnJlYWs7CisgIGNhc2UgSkNTX0NNWUs6CisgIGNhc2UgSkNTX1lDQ0s6CisgICAgY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzID0gNDsKKyAgICBicmVhazsKKyAgZGVmYXVsdDoJCQkvKiBlbHNlIG11c3QgYmUgc2FtZSBjb2xvcnNwYWNlIGFzIGluIGZpbGUgKi8KKyAgICBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgPSBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgYnJlYWs7CisgIH0KKyAgY2luZm8tPm91dHB1dF9jb21wb25lbnRzID0gKGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMgPyAxIDoKKwkJCSAgICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyk7CisKKyAgLyogU2VlIGlmIHVwc2FtcGxlciB3aWxsIHdhbnQgdG8gZW1pdCBtb3JlIHRoYW4gb25lIHJvdyBhdCBhIHRpbWUgKi8KKyAgaWYgKHVzZV9tZXJnZWRfdXBzYW1wbGUoY2luZm8pKQorICAgIGNpbmZvLT5yZWNfb3V0YnVmX2hlaWdodCA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcjsKKyAgZWxzZQorICAgIGNpbmZvLT5yZWNfb3V0YnVmX2hlaWdodCA9IDE7Cit9CisKKworLyoKKyAqIFNldmVyYWwgZGVjb21wcmVzc2lvbiBwcm9jZXNzZXMgbmVlZCB0byByYW5nZS1saW1pdCB2YWx1ZXMgdG8gdGhlIHJhbmdlCisgKiAwLi5NQVhKU0FNUExFOyB0aGUgaW5wdXQgdmFsdWUgbWF5IGZhbGwgc29tZXdoYXQgb3V0c2lkZSB0aGlzIHJhbmdlCisgKiBkdWUgdG8gbm9pc2UgaW50cm9kdWNlZCBieSBxdWFudGl6YXRpb24sIHJvdW5kb2ZmIGVycm9yLCBldGMuICBUaGVzZQorICogcHJvY2Vzc2VzIGFyZSBpbm5lciBsb29wcyBhbmQgbmVlZCB0byBiZSBhcyBmYXN0IGFzIHBvc3NpYmxlLiAgT24gbW9zdAorICogbWFjaGluZXMsIHBhcnRpY3VsYXJseSBDUFVzIHdpdGggcGlwZWxpbmVzIG9yIGluc3RydWN0aW9uIHByZWZldGNoLAorICogYSAoc3Vic2NyaXB0LWNoZWNrLWxlc3MpIEMgdGFibGUgbG9va3VwCisgKgkJeCA9IHNhbXBsZV9yYW5nZV9saW1pdFt4XTsKKyAqIGlzIGZhc3RlciB0aGFuIGV4cGxpY2l0IHRlc3RzCisgKgkJaWYgKHggPCAwKSAgeCA9IDA7CisgKgkJZWxzZSBpZiAoeCA+IE1BWEpTQU1QTEUpICB4ID0gTUFYSlNBTVBMRTsKKyAqIFRoZXNlIHByb2Nlc3NlcyBhbGwgdXNlIGEgY29tbW9uIHRhYmxlIHByZXBhcmVkIGJ5IHRoZSByb3V0aW5lIGJlbG93LgorICoKKyAqIEZvciBtb3N0IHN0ZXBzIHdlIGNhbiBtYXRoZW1hdGljYWxseSBndWFyYW50ZWUgdGhhdCB0aGUgaW5pdGlhbCB2YWx1ZQorICogb2YgeCBpcyB3aXRoaW4gTUFYSlNBTVBMRSsxIG9mIHRoZSBsZWdhbCByYW5nZSwgc28gYSB0YWJsZSBydW5uaW5nIGZyb20KKyAqIC0oTUFYSlNBTVBMRSsxKSB0byAyKk1BWEpTQU1QTEUrMSBpcyBzdWZmaWNpZW50LiAgQnV0IGZvciB0aGUgaW5pdGlhbAorICogbGltaXRpbmcgc3RlcCAoanVzdCBhZnRlciB0aGUgSURDVCksIGEgd2lsZGx5IG91dC1vZi1yYW5nZSB2YWx1ZSBpcyAKKyAqIHBvc3NpYmxlIGlmIHRoZSBpbnB1dCBkYXRhIGlzIGNvcnJ1cHQuICBUbyBhdm9pZCBhbnkgY2hhbmNlIG9mIGluZGV4aW5nCisgKiBvZmYgdGhlIGVuZCBvZiBtZW1vcnkgYW5kIGdldHRpbmcgYSBiYWQtcG9pbnRlciB0cmFwLCB3ZSBwZXJmb3JtIHRoZQorICogcG9zdC1JRENUIGxpbWl0aW5nIHRodXM6CisgKgkJeCA9IHJhbmdlX2xpbWl0W3ggJiBNQVNLXTsKKyAqIHdoZXJlIE1BU0sgaXMgMiBiaXRzIHdpZGVyIHRoYW4gbGVnYWwgc2FtcGxlIGRhdGEsIGllIDEwIGJpdHMgZm9yIDgtYml0CisgKiBzYW1wbGVzLiAgVW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMgdGhpcyBpcyBtb3JlIHRoYW4gZW5vdWdoIHJhbmdlIGFuZAorICogYSBjb3JyZWN0IG91dHB1dCB3aWxsIGJlIGdlbmVyYXRlZDsgd2l0aCBib2d1cyBpbnB1dCBkYXRhIHRoZSBtYXNrIHdpbGwKKyAqIGNhdXNlIHdyYXBhcm91bmQsIGFuZCB3ZSB3aWxsIHNhZmVseSBnZW5lcmF0ZSBhIGJvZ3VzLWJ1dC1pbi1yYW5nZSBvdXRwdXQuCisgKiBGb3IgdGhlIHBvc3QtSURDVCBzdGVwLCB3ZSB3YW50IHRvIGNvbnZlcnQgdGhlIGRhdGEgZnJvbSBzaWduZWQgdG8gdW5zaWduZWQKKyAqIHJlcHJlc2VudGF0aW9uIGJ5IGFkZGluZyBDRU5URVJKU0FNUExFIGF0IHRoZSBzYW1lIHRpbWUgdGhhdCB3ZSBsaW1pdCBpdC4KKyAqIFNvIHRoZSBwb3N0LUlEQ1QgbGltaXRpbmcgdGFibGUgZW5kcyB1cCBsb29raW5nIGxpa2UgdGhpczoKKyAqICAgQ0VOVEVSSlNBTVBMRSxDRU5URVJKU0FNUExFKzEsLi4uLE1BWEpTQU1QTEUsCisgKiAgIE1BWEpTQU1QTEUgKHJlcGVhdCAyKihNQVhKU0FNUExFKzEpLUNFTlRFUkpTQU1QTEUgdGltZXMpLAorICogICAwICAgICAgICAgIChyZXBlYXQgMiooTUFYSlNBTVBMRSsxKS1DRU5URVJKU0FNUExFIHRpbWVzKSwKKyAqICAgMCwxLC4uLixDRU5URVJKU0FNUExFLTEKKyAqIE5lZ2F0aXZlIGlucHV0cyBzZWxlY3QgdmFsdWVzIGZyb20gdGhlIHVwcGVyIGhhbGYgb2YgdGhlIHRhYmxlIGFmdGVyCisgKiBtYXNraW5nLgorICoKKyAqIFdlIGNhbiBzYXZlIHNvbWUgc3BhY2UgYnkgb3ZlcmxhcHBpbmcgdGhlIHN0YXJ0IG9mIHRoZSBwb3N0LUlEQ1QgdGFibGUKKyAqIHdpdGggdGhlIHNpbXBsZXIgcmFuZ2UgbGltaXRpbmcgdGFibGUuICBUaGUgcG9zdC1JRENUIHRhYmxlIGJlZ2lucyBhdAorICogc2FtcGxlX3JhbmdlX2xpbWl0ICsgQ0VOVEVSSlNBTVBMRS4KKyAqCisgKiBOb3RlIHRoYXQgdGhlIHRhYmxlIGlzIGFsbG9jYXRlZCBpbiBuZWFyIGRhdGEgc3BhY2Ugb24gUENzOyBpdCdzIHNtYWxsCisgKiBlbm91Z2ggYW5kIHVzZWQgb2Z0ZW4gZW5vdWdoIHRvIGp1c3RpZnkgdGhpcy4KKyAqLworCitMT0NBTCh2b2lkKQorcHJlcGFyZV9yYW5nZV9saW1pdF90YWJsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKKy8qIEFsbG9jYXRlIGFuZCBmaWxsIGluIHRoZSBzYW1wbGVfcmFuZ2VfbGltaXQgdGFibGUgKi8KK3sKKyAgSlNBTVBMRSAqIHRhYmxlOworICBpbnQgaTsKKworICB0YWJsZSA9IChKU0FNUExFICopCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkJKDUgKiAoTUFYSlNBTVBMRSsxKSArIENFTlRFUkpTQU1QTEUpICogU0laRU9GKEpTQU1QTEUpKTsKKyAgdGFibGUgKz0gKE1BWEpTQU1QTEUrMSk7CS8qIGFsbG93IG5lZ2F0aXZlIHN1YnNjcmlwdHMgb2Ygc2ltcGxlIHRhYmxlICovCisgIGNpbmZvLT5zYW1wbGVfcmFuZ2VfbGltaXQgPSB0YWJsZTsKKyAgLyogRmlyc3Qgc2VnbWVudCBvZiAic2ltcGxlIiB0YWJsZTogbGltaXRbeF0gPSAwIGZvciB4IDwgMCAqLworICBNRU1aRVJPKHRhYmxlIC0gKE1BWEpTQU1QTEUrMSksIChNQVhKU0FNUExFKzEpICogU0laRU9GKEpTQU1QTEUpKTsKKyAgLyogTWFpbiBwYXJ0IG9mICJzaW1wbGUiIHRhYmxlOiBsaW1pdFt4XSA9IHggKi8KKyAgZm9yIChpID0gMDsgaSA8PSBNQVhKU0FNUExFOyBpKyspCisgICAgdGFibGVbaV0gPSAoSlNBTVBMRSkgaTsKKyAgdGFibGUgKz0gQ0VOVEVSSlNBTVBMRTsJLyogUG9pbnQgdG8gd2hlcmUgcG9zdC1JRENUIHRhYmxlIHN0YXJ0cyAqLworICAvKiBFbmQgb2Ygc2ltcGxlIHRhYmxlLCByZXN0IG9mIGZpcnN0IGhhbGYgb2YgcG9zdC1JRENUIHRhYmxlICovCisgIGZvciAoaSA9IENFTlRFUkpTQU1QTEU7IGkgPCAyKihNQVhKU0FNUExFKzEpOyBpKyspCisgICAgdGFibGVbaV0gPSBNQVhKU0FNUExFOworICAvKiBTZWNvbmQgaGFsZiBvZiBwb3N0LUlEQ1QgdGFibGUgKi8KKyAgTUVNWkVSTyh0YWJsZSArICgyICogKE1BWEpTQU1QTEUrMSkpLAorCSAgKDIgKiAoTUFYSlNBTVBMRSsxKSAtIENFTlRFUkpTQU1QTEUpICogU0laRU9GKEpTQU1QTEUpKTsKKyAgTUVNQ09QWSh0YWJsZSArICg0ICogKE1BWEpTQU1QTEUrMSkgLSBDRU5URVJKU0FNUExFKSwKKwkgIGNpbmZvLT5zYW1wbGVfcmFuZ2VfbGltaXQsIENFTlRFUkpTQU1QTEUgKiBTSVpFT0YoSlNBTVBMRSkpOworfQorCisKKy8qCisgKiBNYXN0ZXIgc2VsZWN0aW9uIG9mIGRlY29tcHJlc3Npb24gbW9kdWxlcy4KKyAqIFRoaXMgaXMgZG9uZSBvbmNlIGF0IGpwZWdfc3RhcnRfZGVjb21wcmVzcyB0aW1lLiAgV2UgZGV0ZXJtaW5lCisgKiB3aGljaCBtb2R1bGVzIHdpbGwgYmUgdXNlZCBhbmQgZ2l2ZSB0aGVtIGFwcHJvcHJpYXRlIGluaXRpYWxpemF0aW9uIGNhbGxzLgorICogV2UgYWxzbyBpbml0aWFsaXplIHRoZSBkZWNvbXByZXNzb3IgaW5wdXQgc2lkZSB0byBiZWdpbiBjb25zdW1pbmcgZGF0YS4KKyAqCisgKiBTaW5jZSBqcGVnX3JlYWRfaGVhZGVyIGhhcyBmaW5pc2hlZCwgd2Uga25vdyB3aGF0IGlzIGluIHRoZSBTT0YKKyAqIGFuZCAoZmlyc3QpIFNPUyBtYXJrZXJzLiAgV2UgYWxzbyBoYXZlIGFsbCB0aGUgYXBwbGljYXRpb24gcGFyYW1ldGVyCisgKiBzZXR0aW5ncy4KKyAqLworCitMT0NBTCh2b2lkKQorbWFzdGVyX3NlbGVjdGlvbiAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfbWFzdGVyX3B0ciBtYXN0ZXIgPSAobXlfbWFzdGVyX3B0cikgY2luZm8tPm1hc3RlcjsKKyAgYm9vbGVhbiB1c2VfY19idWZmZXI7CisgIGxvbmcgc2FtcGxlc3BlcnJvdzsKKyAgSkRJTUVOU0lPTiBqZF9zYW1wbGVzcGVycm93OworCisgIC8qIEluaXRpYWxpemUgZGltZW5zaW9ucyBhbmQgb3RoZXIgc3R1ZmYgKi8KKyAganBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zKGNpbmZvKTsKKyAgcHJlcGFyZV9yYW5nZV9saW1pdF90YWJsZShjaW5mbyk7CisKKyAgLyogV2lkdGggb2YgYW4gb3V0cHV0IHNjYW5saW5lIG11c3QgYmUgcmVwcmVzZW50YWJsZSBhcyBKRElNRU5TSU9OLiAqLworICBzYW1wbGVzcGVycm93ID0gKGxvbmcpIGNpbmZvLT5vdXRwdXRfd2lkdGggKiAobG9uZykgY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzOworICBqZF9zYW1wbGVzcGVycm93ID0gKEpESU1FTlNJT04pIHNhbXBsZXNwZXJyb3c7CisgIGlmICgobG9uZykgamRfc2FtcGxlc3BlcnJvdyAhPSBzYW1wbGVzcGVycm93KQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfV0lEVEhfT1ZFUkZMT1cpOworCisgIC8qIEluaXRpYWxpemUgbXkgcHJpdmF0ZSBzdGF0ZSAqLworICBtYXN0ZXItPnBhc3NfbnVtYmVyID0gMDsKKyAgbWFzdGVyLT51c2luZ19tZXJnZWRfdXBzYW1wbGUgPSB1c2VfbWVyZ2VkX3Vwc2FtcGxlKGNpbmZvKTsKKworICAvKiBDb2xvciBxdWFudGl6ZXIgc2VsZWN0aW9uICovCisgIG1hc3Rlci0+cXVhbnRpemVyXzFwYXNzID0gTlVMTDsKKyAgbWFzdGVyLT5xdWFudGl6ZXJfMnBhc3MgPSBOVUxMOworICAvKiBObyBtb2RlIGNoYW5nZXMgaWYgbm90IHVzaW5nIGJ1ZmZlcmVkLWltYWdlIG1vZGUuICovCisgIGlmICghIGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMgfHwgISBjaW5mby0+YnVmZmVyZWRfaW1hZ2UpIHsKKyAgICBjaW5mby0+ZW5hYmxlXzFwYXNzX3F1YW50ID0gRkFMU0U7CisgICAgY2luZm8tPmVuYWJsZV9leHRlcm5hbF9xdWFudCA9IEZBTFNFOworICAgIGNpbmZvLT5lbmFibGVfMnBhc3NfcXVhbnQgPSBGQUxTRTsKKyAgfQorICBpZiAoY2luZm8tPnF1YW50aXplX2NvbG9ycykgeworICAgIGlmIChjaW5mby0+cmF3X2RhdGFfb3V0KQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RJTVBMKTsKKyAgICAvKiAyLXBhc3MgcXVhbnRpemVyIG9ubHkgd29ya3MgaW4gMy1jb21wb25lbnQgY29sb3Igc3BhY2UuICovCisgICAgaWYgKGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyAhPSAzKSB7CisgICAgICBjaW5mby0+ZW5hYmxlXzFwYXNzX3F1YW50ID0gVFJVRTsKKyAgICAgIGNpbmZvLT5lbmFibGVfZXh0ZXJuYWxfcXVhbnQgPSBGQUxTRTsKKyAgICAgIGNpbmZvLT5lbmFibGVfMnBhc3NfcXVhbnQgPSBGQUxTRTsKKyAgICAgIGNpbmZvLT5jb2xvcm1hcCA9IE5VTEw7CisgICAgfSBlbHNlIGlmIChjaW5mby0+Y29sb3JtYXAgIT0gTlVMTCkgeworICAgICAgY2luZm8tPmVuYWJsZV9leHRlcm5hbF9xdWFudCA9IFRSVUU7CisgICAgfSBlbHNlIGlmIChjaW5mby0+dHdvX3Bhc3NfcXVhbnRpemUpIHsKKyAgICAgIGNpbmZvLT5lbmFibGVfMnBhc3NfcXVhbnQgPSBUUlVFOworICAgIH0gZWxzZSB7CisgICAgICBjaW5mby0+ZW5hYmxlXzFwYXNzX3F1YW50ID0gVFJVRTsKKyAgICB9CisKKyAgICBpZiAoY2luZm8tPmVuYWJsZV8xcGFzc19xdWFudCkgeworI2lmZGVmIFFVQU5UXzFQQVNTX1NVUFBPUlRFRAorICAgICAgamluaXRfMXBhc3NfcXVhbnRpemVyKGNpbmZvKTsKKyAgICAgIG1hc3Rlci0+cXVhbnRpemVyXzFwYXNzID0gY2luZm8tPmNxdWFudGl6ZTsKKyNlbHNlCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvKiBXZSB1c2UgdGhlIDItcGFzcyBjb2RlIHRvIG1hcCB0byBleHRlcm5hbCBjb2xvcm1hcHMuICovCisgICAgaWYgKGNpbmZvLT5lbmFibGVfMnBhc3NfcXVhbnQgfHwgY2luZm8tPmVuYWJsZV9leHRlcm5hbF9xdWFudCkgeworI2lmZGVmIFFVQU5UXzJQQVNTX1NVUFBPUlRFRAorICAgICAgamluaXRfMnBhc3NfcXVhbnRpemVyKGNpbmZvKTsKKyAgICAgIG1hc3Rlci0+cXVhbnRpemVyXzJwYXNzID0gY2luZm8tPmNxdWFudGl6ZTsKKyNlbHNlCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisjZW5kaWYKKyAgICB9CisgICAgLyogSWYgYm90aCBxdWFudGl6ZXJzIGFyZSBpbml0aWFsaXplZCwgdGhlIDItcGFzcyBvbmUgaXMgbGVmdCBhY3RpdmU7CisgICAgICogdGhpcyBpcyBuZWNlc3NhcnkgZm9yIHN0YXJ0aW5nIHdpdGggcXVhbnRpemF0aW9uIHRvIGFuIGV4dGVybmFsIG1hcC4KKyAgICAgKi8KKyAgfQorCisgIC8qIFBvc3QtcHJvY2Vzc2luZzogaW4gcGFydGljdWxhciwgY29sb3IgY29udmVyc2lvbiBmaXJzdCAqLworICBpZiAoISBjaW5mby0+cmF3X2RhdGFfb3V0KSB7CisgICAgaWYgKG1hc3Rlci0+dXNpbmdfbWVyZ2VkX3Vwc2FtcGxlKSB7CisjaWZkZWYgVVBTQU1QTEVfTUVSR0lOR19TVVBQT1JURUQKKyAgICAgIGppbml0X21lcmdlZF91cHNhbXBsZXIoY2luZm8pOyAvKiBkb2VzIGNvbG9yIGNvbnZlcnNpb24gdG9vICovCisjZWxzZQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgIGppbml0X2NvbG9yX2RlY29udmVydGVyKGNpbmZvKTsKKyAgICAgIGppbml0X3Vwc2FtcGxlcihjaW5mbyk7CisgICAgfQorICAgIGppbml0X2RfcG9zdF9jb250cm9sbGVyKGNpbmZvLCBjaW5mby0+ZW5hYmxlXzJwYXNzX3F1YW50KTsKKyAgfQorICAvKiBJbnZlcnNlIERDVCAqLworICBqaW5pdF9pbnZlcnNlX2RjdChjaW5mbyk7CisgIC8qIEVudHJvcHkgZGVjb2Rpbmc6IGVpdGhlciBIdWZmbWFuIG9yIGFyaXRobWV0aWMgY29kaW5nLiAqLworICBpZiAoY2luZm8tPmFyaXRoX2NvZGUpIHsKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0FSSVRIX05PVElNUEwpOworICB9IGVsc2UgeworICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkgeworI2lmZGVmIERfUFJPR1JFU1NJVkVfU1VQUE9SVEVECisgICAgICBqaW5pdF9waHVmZl9kZWNvZGVyKGNpbmZvKTsKKyNlbHNlCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisjZW5kaWYKKyAgICB9IGVsc2UKKyAgICAgIGppbml0X2h1ZmZfZGVjb2RlcihjaW5mbyk7CisgIH0KKworICAvKiBJbml0aWFsaXplIHByaW5jaXBhbCBidWZmZXIgY29udHJvbGxlcnMuICovCisgIHVzZV9jX2J1ZmZlciA9IGNpbmZvLT5pbnB1dGN0bC0+aGFzX211bHRpcGxlX3NjYW5zIHx8IGNpbmZvLT5idWZmZXJlZF9pbWFnZTsKKyAgamluaXRfZF9jb2VmX2NvbnRyb2xsZXIoY2luZm8sIHVzZV9jX2J1ZmZlcik7CisKKyAgaWYgKCEgY2luZm8tPnJhd19kYXRhX291dCkKKyAgICBqaW5pdF9kX21haW5fY29udHJvbGxlcihjaW5mbywgRkFMU0UgLyogbmV2ZXIgbmVlZCBmdWxsIGJ1ZmZlciBoZXJlICovKTsKKworICAvKiBXZSBjYW4gbm93IHRlbGwgdGhlIG1lbW9yeSBtYW5hZ2VyIHRvIGFsbG9jYXRlIHZpcnR1YWwgYXJyYXlzLiAqLworICAoKmNpbmZvLT5tZW0tPnJlYWxpemVfdmlydF9hcnJheXMpICgoal9jb21tb25fcHRyKSBjaW5mbyk7CisKKyAgLyogSW5pdGlhbGl6ZSBpbnB1dCBzaWRlIG9mIGRlY29tcHJlc3NvciB0byBjb25zdW1lIGZpcnN0IHNjYW4uICovCisgICgqY2luZm8tPmlucHV0Y3RsLT5zdGFydF9pbnB1dF9wYXNzKSAoY2luZm8pOworCisjaWZkZWYgRF9NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVECisgIC8qIElmIGpwZWdfc3RhcnRfZGVjb21wcmVzcyB3aWxsIHJlYWQgdGhlIHdob2xlIGZpbGUsIGluaXRpYWxpemUKKyAgICogcHJvZ3Jlc3MgbW9uaXRvcmluZyBhcHByb3ByaWF0ZWx5LiAgVGhlIGlucHV0IHN0ZXAgaXMgY291bnRlZAorICAgKiBhcyBvbmUgcGFzcy4KKyAgICovCisgIGlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCAmJiAhIGNpbmZvLT5idWZmZXJlZF9pbWFnZSAmJgorICAgICAgY2luZm8tPmlucHV0Y3RsLT5oYXNfbXVsdGlwbGVfc2NhbnMpIHsKKyAgICBpbnQgbnNjYW5zOworICAgIC8qIEVzdGltYXRlIG51bWJlciBvZiBzY2FucyB0byBzZXQgcGFzc19saW1pdC4gKi8KKyAgICBpZiAoY2luZm8tPnByb2dyZXNzaXZlX21vZGUpIHsKKyAgICAgIC8qIEFyYml0cmFyaWx5IGVzdGltYXRlIDIgaW50ZXJsZWF2ZWQgREMgc2NhbnMgKyAzIEFDIHNjYW5zL2NvbXBvbmVudC4gKi8KKyAgICAgIG5zY2FucyA9IDIgKyAzICogY2luZm8tPm51bV9jb21wb25lbnRzOworICAgIH0gZWxzZSB7CisgICAgICAvKiBGb3IgYSBub25wcm9ncmVzc2l2ZSBtdWx0aXNjYW4gZmlsZSwgZXN0aW1hdGUgMSBzY2FuIHBlciBjb21wb25lbnQuICovCisgICAgICBuc2NhbnMgPSBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgfQorICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19jb3VudGVyID0gMEw7CisgICAgY2luZm8tPnByb2dyZXNzLT5wYXNzX2xpbWl0ID0gKGxvbmcpIGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MgKiBuc2NhbnM7CisgICAgY2luZm8tPnByb2dyZXNzLT5jb21wbGV0ZWRfcGFzc2VzID0gMDsKKyAgICBjaW5mby0+cHJvZ3Jlc3MtPnRvdGFsX3Bhc3NlcyA9IChjaW5mby0+ZW5hYmxlXzJwYXNzX3F1YW50ID8gMyA6IDIpOworICAgIC8qIENvdW50IHRoZSBpbnB1dCBwYXNzIGFzIGRvbmUgKi8KKyAgICBtYXN0ZXItPnBhc3NfbnVtYmVyKys7CisgIH0KKyNlbmRpZiAvKiBEX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQgKi8KK30KKworCisvKgorICogUGVyLXBhc3Mgc2V0dXAuCisgKiBUaGlzIGlzIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggb3V0cHV0IHBhc3MuICBXZSBkZXRlcm1pbmUgd2hpY2gKKyAqIG1vZHVsZXMgd2lsbCBiZSBhY3RpdmUgZHVyaW5nIHRoaXMgcGFzcyBhbmQgZ2l2ZSB0aGVtIGFwcHJvcHJpYXRlCisgKiBzdGFydF9wYXNzIGNhbGxzLiAgV2UgYWxzbyBzZXQgaXNfZHVtbXlfcGFzcyB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoaXMKKyAqIGlzIGEgInJlYWwiIG91dHB1dCBwYXNzIG9yIGEgZHVtbXkgcGFzcyBmb3IgY29sb3IgcXVhbnRpemF0aW9uLgorICogKEluIHRoZSBsYXR0ZXIgY2FzZSwgamRhcGlzdGQuYyB3aWxsIGNyYW5rIHRoZSBwYXNzIHRvIGNvbXBsZXRpb24uKQorICovCisKK01FVEhPRERFRih2b2lkKQorcHJlcGFyZV9mb3Jfb3V0cHV0X3Bhc3MgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X21hc3Rlcl9wdHIgbWFzdGVyID0gKG15X21hc3Rlcl9wdHIpIGNpbmZvLT5tYXN0ZXI7CisKKyAgaWYgKG1hc3Rlci0+cHViLmlzX2R1bW15X3Bhc3MpIHsKKyNpZmRlZiBRVUFOVF8yUEFTU19TVVBQT1JURUQKKyAgICAvKiBGaW5hbCBwYXNzIG9mIDItcGFzcyBxdWFudGl6YXRpb24gKi8KKyAgICBtYXN0ZXItPnB1Yi5pc19kdW1teV9wYXNzID0gRkFMU0U7CisgICAgKCpjaW5mby0+Y3F1YW50aXplLT5zdGFydF9wYXNzKSAoY2luZm8sIEZBTFNFKTsKKyAgICAoKmNpbmZvLT5wb3N0LT5zdGFydF9wYXNzKSAoY2luZm8sIEpCVUZfQ1JBTktfREVTVCk7CisgICAgKCpjaW5mby0+bWFpbi0+c3RhcnRfcGFzcykgKGNpbmZvLCBKQlVGX0NSQU5LX0RFU1QpOworI2Vsc2UKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisjZW5kaWYgLyogUVVBTlRfMlBBU1NfU1VQUE9SVEVEICovCisgIH0gZWxzZSB7CisgICAgaWYgKGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMgJiYgY2luZm8tPmNvbG9ybWFwID09IE5VTEwpIHsKKyAgICAgIC8qIFNlbGVjdCBuZXcgcXVhbnRpemF0aW9uIG1ldGhvZCAqLworICAgICAgaWYgKGNpbmZvLT50d29fcGFzc19xdWFudGl6ZSAmJiBjaW5mby0+ZW5hYmxlXzJwYXNzX3F1YW50KSB7CisJY2luZm8tPmNxdWFudGl6ZSA9IG1hc3Rlci0+cXVhbnRpemVyXzJwYXNzOworCW1hc3Rlci0+cHViLmlzX2R1bW15X3Bhc3MgPSBUUlVFOworICAgICAgfSBlbHNlIGlmIChjaW5mby0+ZW5hYmxlXzFwYXNzX3F1YW50KSB7CisJY2luZm8tPmNxdWFudGl6ZSA9IG1hc3Rlci0+cXVhbnRpemVyXzFwYXNzOworICAgICAgfSBlbHNlIHsKKwlFUlJFWElUKGNpbmZvLCBKRVJSX01PREVfQ0hBTkdFKTsKKyAgICAgIH0KKyAgICB9CisgICAgKCpjaW5mby0+aWRjdC0+c3RhcnRfcGFzcykgKGNpbmZvKTsKKyAgICAoKmNpbmZvLT5jb2VmLT5zdGFydF9vdXRwdXRfcGFzcykgKGNpbmZvKTsKKyAgICBpZiAoISBjaW5mby0+cmF3X2RhdGFfb3V0KSB7CisgICAgICBpZiAoISBtYXN0ZXItPnVzaW5nX21lcmdlZF91cHNhbXBsZSkKKwkoKmNpbmZvLT5jY29udmVydC0+c3RhcnRfcGFzcykgKGNpbmZvKTsKKyAgICAgICgqY2luZm8tPnVwc2FtcGxlLT5zdGFydF9wYXNzKSAoY2luZm8pOworICAgICAgaWYgKGNpbmZvLT5xdWFudGl6ZV9jb2xvcnMpCisJKCpjaW5mby0+Y3F1YW50aXplLT5zdGFydF9wYXNzKSAoY2luZm8sIG1hc3Rlci0+cHViLmlzX2R1bW15X3Bhc3MpOworICAgICAgKCpjaW5mby0+cG9zdC0+c3RhcnRfcGFzcykgKGNpbmZvLAorCSAgICAobWFzdGVyLT5wdWIuaXNfZHVtbXlfcGFzcyA/IEpCVUZfU0FWRV9BTkRfUEFTUyA6IEpCVUZfUEFTU19USFJVKSk7CisgICAgICAoKmNpbmZvLT5tYWluLT5zdGFydF9wYXNzKSAoY2luZm8sIEpCVUZfUEFTU19USFJVKTsKKyAgICB9CisgIH0KKworICAvKiBTZXQgdXAgcHJvZ3Jlc3MgbW9uaXRvcidzIHBhc3MgaW5mbyBpZiBwcmVzZW50ICovCisgIGlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCkgeworICAgIGNpbmZvLT5wcm9ncmVzcy0+Y29tcGxldGVkX3Bhc3NlcyA9IG1hc3Rlci0+cGFzc19udW1iZXI7CisgICAgY2luZm8tPnByb2dyZXNzLT50b3RhbF9wYXNzZXMgPSBtYXN0ZXItPnBhc3NfbnVtYmVyICsKKwkJCQkgICAgKG1hc3Rlci0+cHViLmlzX2R1bW15X3Bhc3MgPyAyIDogMSk7CisgICAgLyogSW4gYnVmZmVyZWQtaW1hZ2UgbW9kZSwgd2UgYXNzdW1lIG9uZSBtb3JlIG91dHB1dCBwYXNzIGlmIEVPSSBub3QKKyAgICAgKiB5ZXQgcmVhY2hlZCwgYnV0IG5vIG1vcmUgcGFzc2VzIGlmIEVPSSBoYXMgYmVlbiByZWFjaGVkLgorICAgICAqLworICAgIGlmIChjaW5mby0+YnVmZmVyZWRfaW1hZ2UgJiYgISBjaW5mby0+aW5wdXRjdGwtPmVvaV9yZWFjaGVkKSB7CisgICAgICBjaW5mby0+cHJvZ3Jlc3MtPnRvdGFsX3Bhc3NlcyArPSAoY2luZm8tPmVuYWJsZV8ycGFzc19xdWFudCA/IDIgOiAxKTsKKyAgICB9CisgIH0KK30KKworCisvKgorICogRmluaXNoIHVwIGF0IGVuZCBvZiBhbiBvdXRwdXQgcGFzcy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2ZpbmlzaF9vdXRwdXRfcGFzcyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfbWFzdGVyX3B0ciBtYXN0ZXIgPSAobXlfbWFzdGVyX3B0cikgY2luZm8tPm1hc3RlcjsKKworICBpZiAoY2luZm8tPnF1YW50aXplX2NvbG9ycykKKyAgICAoKmNpbmZvLT5jcXVhbnRpemUtPmZpbmlzaF9wYXNzKSAoY2luZm8pOworICBtYXN0ZXItPnBhc3NfbnVtYmVyKys7Cit9CisKKworI2lmZGVmIERfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRAorCisvKgorICogU3dpdGNoIHRvIGEgbmV3IGV4dGVybmFsIGNvbG9ybWFwIGJldHdlZW4gb3V0cHV0IHBhc3Nlcy4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfbmV3X2NvbG9ybWFwIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV9tYXN0ZXJfcHRyIG1hc3RlciA9IChteV9tYXN0ZXJfcHRyKSBjaW5mby0+bWFzdGVyOworCisgIC8qIFByZXZlbnQgYXBwbGljYXRpb24gZnJvbSBjYWxsaW5nIG1lIGF0IHdyb25nIHRpbWVzICovCisgIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlICE9IERTVEFURV9CVUZJTUFHRSkKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfU1RBVEUsIGNpbmZvLT5nbG9iYWxfc3RhdGUpOworCisgIGlmIChjaW5mby0+cXVhbnRpemVfY29sb3JzICYmIGNpbmZvLT5lbmFibGVfZXh0ZXJuYWxfcXVhbnQgJiYKKyAgICAgIGNpbmZvLT5jb2xvcm1hcCAhPSBOVUxMKSB7CisgICAgLyogU2VsZWN0IDItcGFzcyBxdWFudGl6ZXIgZm9yIGV4dGVybmFsIGNvbG9ybWFwIHVzZSAqLworICAgIGNpbmZvLT5jcXVhbnRpemUgPSBtYXN0ZXItPnF1YW50aXplcl8ycGFzczsKKyAgICAvKiBOb3RpZnkgcXVhbnRpemVyIG9mIGNvbG9ybWFwIGNoYW5nZSAqLworICAgICgqY2luZm8tPmNxdWFudGl6ZS0+bmV3X2NvbG9yX21hcCkgKGNpbmZvKTsKKyAgICBtYXN0ZXItPnB1Yi5pc19kdW1teV9wYXNzID0gRkFMU0U7IC8qIGp1c3QgaW4gY2FzZSAqLworICB9IGVsc2UKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX01PREVfQ0hBTkdFKTsKK30KKworI2VuZGlmIC8qIERfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRCAqLworCisKKy8qCisgKiBJbml0aWFsaXplIG1hc3RlciBkZWNvbXByZXNzaW9uIGNvbnRyb2wgYW5kIHNlbGVjdCBhY3RpdmUgbW9kdWxlcy4KKyAqIFRoaXMgaXMgcGVyZm9ybWVkIGF0IHRoZSBzdGFydCBvZiBqcGVnX3N0YXJ0X2RlY29tcHJlc3MuCisgKi8KKworR0xPQkFMKHZvaWQpCitqaW5pdF9tYXN0ZXJfZGVjb21wcmVzcyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfbWFzdGVyX3B0ciBtYXN0ZXI7CisKKyAgbWFzdGVyID0gKG15X21hc3Rlcl9wdHIpCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCSAgU0laRU9GKG15X2RlY29tcF9tYXN0ZXIpKTsKKyAgY2luZm8tPm1hc3RlciA9IChzdHJ1Y3QganBlZ19kZWNvbXBfbWFzdGVyICopIG1hc3RlcjsKKyAgbWFzdGVyLT5wdWIucHJlcGFyZV9mb3Jfb3V0cHV0X3Bhc3MgPSBwcmVwYXJlX2Zvcl9vdXRwdXRfcGFzczsKKyAgbWFzdGVyLT5wdWIuZmluaXNoX291dHB1dF9wYXNzID0gZmluaXNoX291dHB1dF9wYXNzOworCisgIG1hc3Rlci0+cHViLmlzX2R1bW15X3Bhc3MgPSBGQUxTRTsKKworICBtYXN0ZXJfc2VsZWN0aW9uKGNpbmZvKTsKK30KKworI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZG1lcmdlLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZG1lcmdlLmMKaW5kZXggMjlhOTk2Yy4uYzIyOWY4NiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamRtZXJnZS5jCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pkbWVyZ2UuYwpAQCAtMSw0MDYgKzEsNDA2IEBACi0jaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQ0KLS8qDQotICogamRtZXJnZS5jDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgVGhvbWFzIEcuIExhbmUuDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4NCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuDQotICoNCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgY29kZSBmb3IgbWVyZ2VkIHVwc2FtcGxpbmcvY29sb3IgY29udmVyc2lvbi4NCi0gKg0KLSAqIFRoaXMgZmlsZSBjb21iaW5lcyBmdW5jdGlvbnMgZnJvbSBqZHNhbXBsZS5jIGFuZCBqZGNvbG9yLmM7DQotICogcmVhZCB0aG9zZSBmaWxlcyBmaXJzdCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbi4NCi0gKg0KLSAqIFdoZW4gdGhlIGNocm9tYSBjb21wb25lbnRzIGFyZSB0byBiZSB1cHNhbXBsZWQgYnkgc2ltcGxlIHJlcGxpY2F0aW9uDQotICogKGllLCBib3ggZmlsdGVyaW5nKSwgd2UgY2FuIHNhdmUgc29tZSB3b3JrIGluIGNvbG9yIGNvbnZlcnNpb24gYnkNCi0gKiBjYWxjdWxhdGluZyBhbGwgdGhlIG91dHB1dCBwaXhlbHMgY29ycmVzcG9uZGluZyB0byBhIHBhaXIgb2YgY2hyb21hDQotICogc2FtcGxlcyBhdCBvbmUgdGltZS4gIEluIHRoZSBjb252ZXJzaW9uIGVxdWF0aW9ucw0KLSAqCVIgPSBZICAgICAgICAgICArIEsxICogQ3INCi0gKglHID0gWSArIEsyICogQ2IgKyBLMyAqIENyDQotICoJQiA9IFkgKyBLNCAqIENiDQotICogb25seSB0aGUgWSB0ZXJtIHZhcmllcyBhbW9uZyB0aGUgZ3JvdXAgb2YgcGl4ZWxzIGNvcnJlc3BvbmRpbmcgdG8gYSBwYWlyDQotICogb2YgY2hyb21hIHNhbXBsZXMsIHNvIHRoZSByZXN0IG9mIHRoZSB0ZXJtcyBjYW4gYmUgY2FsY3VsYXRlZCBqdXN0IG9uY2UuDQotICogQXQgdHlwaWNhbCBzYW1wbGluZyByYXRpb3MsIHRoaXMgZWxpbWluYXRlcyBoYWxmIG9yIHRocmVlLXF1YXJ0ZXJzIG9mIHRoZQ0KLSAqIG11bHRpcGxpY2F0aW9ucyBuZWVkZWQgZm9yIGNvbG9yIGNvbnZlcnNpb24uDQotICoNCi0gKiBUaGlzIGZpbGUgY3VycmVudGx5IHByb3ZpZGVzIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczoNCi0gKglZQ2JDciA9PiBSR0IgY29sb3IgY29udmVyc2lvbiBvbmx5Lg0KLSAqCVNhbXBsaW5nIHJhdGlvcyBvZiAyaDF2IG9yIDJoMnYuDQotICoJTm8gc2NhbGluZyBuZWVkZWQgYXQgdXBzYW1wbGUgdGltZS4NCi0gKglDb3JuZXItYWxpZ25lZCAobm9uLUNDSVI2MDEpIHNhbXBsaW5nIGFsaWdubWVudC4NCi0gKiBPdGhlciBzcGVjaWFsIGNhc2VzIGNvdWxkIGJlIGFkZGVkLCBidXQgaW4gbW9zdCBhcHBsaWNhdGlvbnMgdGhlc2UgYXJlDQotICogdGhlIG9ubHkgY29tbW9uIGNhc2VzLiAgKEZvciB1bmNvbW1vbiBjYXNlcyB3ZSBmYWxsIGJhY2sgb24gdGhlIG1vcmUNCi0gKiBnZW5lcmFsIGNvZGUgaW4gamRzYW1wbGUuYyBhbmQgamRjb2xvci5jLikNCi0gKi8NCi0NCi0jZGVmaW5lIEpQRUdfSU5URVJOQUxTDQotI2luY2x1ZGUgImppbmNsdWRlLmgiDQotI2luY2x1ZGUgImpwZWdsaWIuaCINCi0NCi0jaWZkZWYgVVBTQU1QTEVfTUVSR0lOR19TVVBQT1JURUQNCi0NCi0jaWZkZWYgX0ZYX01BTkFHRURfQ09ERV8NCi0jZGVmaW5lIG15X3Vwc2FtcGxlcglteV91cHNhbXBsZXJfbQ0KLSNlbmRpZg0KLQ0KLS8qIFByaXZhdGUgc3Vib2JqZWN0ICovDQotDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgc3RydWN0IGpwZWdfdXBzYW1wbGVyIHB1YjsJLyogcHVibGljIGZpZWxkcyAqLw0KLQ0KLSAgLyogUG9pbnRlciB0byByb3V0aW5lIHRvIGRvIGFjdHVhbCB1cHNhbXBsaW5nL2NvbnZlcnNpb24gb2Ygb25lIHJvdyBncm91cCAqLw0KLSAgSk1FVEhPRCh2b2lkLCB1cG1ldGhvZCwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sDQotCQkJICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwNCi0JCQkgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpKTsNCi0NCi0gIC8qIFByaXZhdGUgc3RhdGUgZm9yIFlDQy0+UkdCIGNvbnZlcnNpb24gKi8NCi0gIGludCAqIENyX3JfdGFiOwkJLyogPT4gdGFibGUgZm9yIENyIHRvIFIgY29udmVyc2lvbiAqLw0KLSAgaW50ICogQ2JfYl90YWI7CQkvKiA9PiB0YWJsZSBmb3IgQ2IgdG8gQiBjb252ZXJzaW9uICovDQotICBJTlQzMiAqIENyX2dfdGFiOwkJLyogPT4gdGFibGUgZm9yIENyIHRvIEcgY29udmVyc2lvbiAqLw0KLSAgSU5UMzIgKiBDYl9nX3RhYjsJCS8qID0+IHRhYmxlIGZvciBDYiB0byBHIGNvbnZlcnNpb24gKi8NCi0NCi0gIC8qIEZvciAyOjEgdmVydGljYWwgc2FtcGxpbmcsIHdlIHByb2R1Y2UgdHdvIG91dHB1dCByb3dzIGF0IGEgdGltZS4NCi0gICAqIFdlIG5lZWQgYSAic3BhcmUiIHJvdyBidWZmZXIgdG8gaG9sZCB0aGUgc2Vjb25kIG91dHB1dCByb3cgaWYgdGhlDQotICAgKiBhcHBsaWNhdGlvbiBwcm92aWRlcyBqdXN0IGEgb25lLXJvdyBidWZmZXI7IHdlIGFsc28gdXNlIHRoZSBzcGFyZQ0KLSAgICogdG8gZGlzY2FyZCB0aGUgZHVtbXkgbGFzdCByb3cgaWYgdGhlIGltYWdlIGhlaWdodCBpcyBvZGQuDQotICAgKi8NCi0gIEpTQU1QUk9XIHNwYXJlX3JvdzsNCi0gIGJvb2xlYW4gc3BhcmVfZnVsbDsJCS8qIFQgaWYgc3BhcmUgYnVmZmVyIGlzIG9jY3VwaWVkICovDQotDQotICBKRElNRU5TSU9OIG91dF9yb3dfd2lkdGg7CS8qIHNhbXBsZXMgcGVyIG91dHB1dCByb3cgKi8NCi0gIEpESU1FTlNJT04gcm93c190b19nbzsJLyogY291bnRzIHJvd3MgcmVtYWluaW5nIGluIGltYWdlICovDQotfSBteV91cHNhbXBsZXI7DQotDQotdHlwZWRlZiBteV91cHNhbXBsZXIgKiBteV91cHNhbXBsZV9wdHI7DQotDQotI2RlZmluZSBTQ0FMRUJJVFMJMTYJLyogc3BlZWRpZXN0IHJpZ2h0LXNoaWZ0IG9uIHNvbWUgbWFjaGluZXMgKi8NCi0jZGVmaW5lIE9ORV9IQUxGCSgoSU5UMzIpIDEgPDwgKFNDQUxFQklUUy0xKSkNCi0jZGVmaW5lIEZJWCh4KQkJKChJTlQzMikgKCh4KSAqICgxTDw8U0NBTEVCSVRTKSArIDAuNSkpDQotDQotDQotLyoNCi0gKiBJbml0aWFsaXplIHRhYmxlcyBmb3IgWUNDLT5SR0IgY29sb3JzcGFjZSBjb252ZXJzaW9uLg0KLSAqIFRoaXMgaXMgdGFrZW4gZGlyZWN0bHkgZnJvbSBqZGNvbG9yLmM7IHNlZSB0aGF0IGZpbGUgZm9yIG1vcmUgaW5mby4NCi0gKi8NCi0NCi1MT0NBTCh2b2lkKQ0KLWJ1aWxkX3ljY19yZ2JfdGFibGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAgbXlfdXBzYW1wbGVfcHRyIHVwc2FtcGxlID0gKG15X3Vwc2FtcGxlX3B0cikgY2luZm8tPnVwc2FtcGxlOw0KLSAgaW50IGk7DQotICBJTlQzMiB4Ow0KLSAgU0hJRlRfVEVNUFMNCi0NCi0gIHVwc2FtcGxlLT5Dcl9yX3RhYiA9IChpbnQgKikNCi0gICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwNCi0JCQkJKE1BWEpTQU1QTEUrMSkgKiBTSVpFT0YoaW50KSk7DQotICB1cHNhbXBsZS0+Q2JfYl90YWIgPSAoaW50ICopDQotICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsDQotCQkJCShNQVhKU0FNUExFKzEpICogU0laRU9GKGludCkpOw0KLSAgdXBzYW1wbGUtPkNyX2dfdGFiID0gKElOVDMyICopDQotICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsDQotCQkJCShNQVhKU0FNUExFKzEpICogU0laRU9GKElOVDMyKSk7DQotICB1cHNhbXBsZS0+Q2JfZ190YWIgPSAoSU5UMzIgKikNCi0gICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwNCi0JCQkJKE1BWEpTQU1QTEUrMSkgKiBTSVpFT0YoSU5UMzIpKTsNCi0NCi0gIGZvciAoaSA9IDAsIHggPSAtQ0VOVEVSSlNBTVBMRTsgaSA8PSBNQVhKU0FNUExFOyBpKyssIHgrKykgew0KLSAgICAvKiBpIGlzIHRoZSBhY3R1YWwgaW5wdXQgcGl4ZWwgdmFsdWUsIGluIHRoZSByYW5nZSAwLi5NQVhKU0FNUExFICovDQotICAgIC8qIFRoZSBDYiBvciBDciB2YWx1ZSB3ZSBhcmUgdGhpbmtpbmcgb2YgaXMgeCA9IGkgLSBDRU5URVJKU0FNUExFICovDQotICAgIC8qIENyPT5SIHZhbHVlIGlzIG5lYXJlc3QgaW50IHRvIDEuNDAyMDAgKiB4ICovDQotICAgIHVwc2FtcGxlLT5Dcl9yX3RhYltpXSA9IChpbnQpDQotCQkgICAgUklHSFRfU0hJRlQoRklYKDEuNDAyMDApICogeCArIE9ORV9IQUxGLCBTQ0FMRUJJVFMpOw0KLSAgICAvKiBDYj0+QiB2YWx1ZSBpcyBuZWFyZXN0IGludCB0byAxLjc3MjAwICogeCAqLw0KLSAgICB1cHNhbXBsZS0+Q2JfYl90YWJbaV0gPSAoaW50KQ0KLQkJICAgIFJJR0hUX1NISUZUKEZJWCgxLjc3MjAwKSAqIHggKyBPTkVfSEFMRiwgU0NBTEVCSVRTKTsNCi0gICAgLyogQ3I9PkcgdmFsdWUgaXMgc2NhbGVkLXVwIC0wLjcxNDE0ICogeCAqLw0KLSAgICB1cHNhbXBsZS0+Q3JfZ190YWJbaV0gPSAoLSBGSVgoMC43MTQxNCkpICogeDsNCi0gICAgLyogQ2I9PkcgdmFsdWUgaXMgc2NhbGVkLXVwIC0wLjM0NDE0ICogeCAqLw0KLSAgICAvKiBXZSBhbHNvIGFkZCBpbiBPTkVfSEFMRiBzbyB0aGF0IG5lZWQgbm90IGRvIGl0IGluIGlubmVyIGxvb3AgKi8NCi0gICAgdXBzYW1wbGUtPkNiX2dfdGFiW2ldID0gKC0gRklYKDAuMzQ0MTQpKSAqIHggKyBPTkVfSEFMRjsNCi0gIH0NCi19DQotDQotDQotLyoNCi0gKiBJbml0aWFsaXplIGZvciBhbiB1cHNhbXBsaW5nIHBhc3MuDQotICovDQotDQotTUVUSE9EREVGKHZvaWQpDQotc3RhcnRfcGFzc19tZXJnZWRfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAgbXlfdXBzYW1wbGVfcHRyIHVwc2FtcGxlID0gKG15X3Vwc2FtcGxlX3B0cikgY2luZm8tPnVwc2FtcGxlOw0KLQ0KLSAgLyogTWFyayB0aGUgc3BhcmUgYnVmZmVyIGVtcHR5ICovDQotICB1cHNhbXBsZS0+c3BhcmVfZnVsbCA9IEZBTFNFOw0KLSAgLyogSW5pdGlhbGl6ZSB0b3RhbC1oZWlnaHQgY291bnRlciBmb3IgZGV0ZWN0aW5nIGJvdHRvbSBvZiBpbWFnZSAqLw0KLSAgdXBzYW1wbGUtPnJvd3NfdG9fZ28gPSBjaW5mby0+b3V0cHV0X2hlaWdodDsNCi19DQotDQotDQotLyoNCi0gKiBDb250cm9sIHJvdXRpbmUgdG8gZG8gdXBzYW1wbGluZyAoYW5kIGNvbG9yIGNvbnZlcnNpb24pLg0KLSAqDQotICogVGhlIGNvbnRyb2wgcm91dGluZSBqdXN0IGhhbmRsZXMgdGhlIHJvdyBidWZmZXJpbmcgY29uc2lkZXJhdGlvbnMuDQotICovDQotDQotTUVUSE9EREVGKHZvaWQpDQotbWVyZ2VkXzJ2X3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLA0KLQkJICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3Vwc19hdmFpbCwNCi0JCSAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLA0KLQkJICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpDQotLyogMjoxIHZlcnRpY2FsIHNhbXBsaW5nIGNhc2U6IG1heSBuZWVkIGEgc3BhcmUgcm93LiAqLw0KLXsNCi0gIG15X3Vwc2FtcGxlX3B0ciB1cHNhbXBsZSA9IChteV91cHNhbXBsZV9wdHIpIGNpbmZvLT51cHNhbXBsZTsNCi0gIEpTQU1QUk9XIHdvcmtfcHRyc1syXTsNCi0gIEpESU1FTlNJT04gbnVtX3Jvd3M7CQkvKiBudW1iZXIgb2Ygcm93cyByZXR1cm5lZCB0byBjYWxsZXIgKi8NCi0NCi0gIGlmICh1cHNhbXBsZS0+c3BhcmVfZnVsbCkgew0KLSAgICAvKiBJZiB3ZSBoYXZlIGEgc3BhcmUgcm93IHNhdmVkIGZyb20gYSBwcmV2aW91cyBjeWNsZSwganVzdCByZXR1cm4gaXQuICovDQotICAgIGpjb3B5X3NhbXBsZV9yb3dzKCYgdXBzYW1wbGUtPnNwYXJlX3JvdywgMCwgb3V0cHV0X2J1ZiArICpvdXRfcm93X2N0ciwgMCwNCi0JCSAgICAgIDEsIHVwc2FtcGxlLT5vdXRfcm93X3dpZHRoKTsNCi0gICAgbnVtX3Jvd3MgPSAxOw0KLSAgICB1cHNhbXBsZS0+c3BhcmVfZnVsbCA9IEZBTFNFOw0KLSAgfSBlbHNlIHsNCi0gICAgLyogRmlndXJlIG51bWJlciBvZiByb3dzIHRvIHJldHVybiB0byBjYWxsZXIuICovDQotICAgIG51bV9yb3dzID0gMjsNCi0gICAgLyogTm90IG1vcmUgdGhhbiB0aGUgZGlzdGFuY2UgdG8gdGhlIGVuZCBvZiB0aGUgaW1hZ2UuICovDQotICAgIGlmIChudW1fcm93cyA+IHVwc2FtcGxlLT5yb3dzX3RvX2dvKQ0KLSAgICAgIG51bV9yb3dzID0gdXBzYW1wbGUtPnJvd3NfdG9fZ287DQotICAgIC8qIEFuZCBub3QgbW9yZSB0aGFuIHdoYXQgdGhlIGNsaWVudCBjYW4gYWNjZXB0OiAqLw0KLSAgICBvdXRfcm93c19hdmFpbCAtPSAqb3V0X3Jvd19jdHI7DQotICAgIGlmIChudW1fcm93cyA+IG91dF9yb3dzX2F2YWlsKQ0KLSAgICAgIG51bV9yb3dzID0gb3V0X3Jvd3NfYXZhaWw7DQotICAgIC8qIENyZWF0ZSBvdXRwdXQgcG9pbnRlciBhcnJheSBmb3IgdXBzYW1wbGVyLiAqLw0KLSAgICB3b3JrX3B0cnNbMF0gPSBvdXRwdXRfYnVmWypvdXRfcm93X2N0cl07DQotICAgIGlmIChudW1fcm93cyA+IDEpIHsNCi0gICAgICB3b3JrX3B0cnNbMV0gPSBvdXRwdXRfYnVmWypvdXRfcm93X2N0ciArIDFdOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgIHdvcmtfcHRyc1sxXSA9IHVwc2FtcGxlLT5zcGFyZV9yb3c7DQotICAgICAgdXBzYW1wbGUtPnNwYXJlX2Z1bGwgPSBUUlVFOw0KLSAgICB9DQotICAgIC8qIE5vdyBkbyB0aGUgdXBzYW1wbGluZy4gKi8NCi0gICAgKCp1cHNhbXBsZS0+dXBtZXRob2QpIChjaW5mbywgaW5wdXRfYnVmLCAqaW5fcm93X2dyb3VwX2N0ciwgd29ya19wdHJzKTsNCi0gIH0NCi0NCi0gIC8qIEFkanVzdCBjb3VudHMgKi8NCi0gICpvdXRfcm93X2N0ciArPSBudW1fcm93czsNCi0gIHVwc2FtcGxlLT5yb3dzX3RvX2dvIC09IG51bV9yb3dzOw0KLSAgLyogV2hlbiB0aGUgYnVmZmVyIGlzIGVtcHRpZWQsIGRlY2xhcmUgdGhpcyBpbnB1dCByb3cgZ3JvdXAgY29uc3VtZWQgKi8NCi0gIGlmICghIHVwc2FtcGxlLT5zcGFyZV9mdWxsKQ0KLSAgICAoKmluX3Jvd19ncm91cF9jdHIpKys7DQotfQ0KLQ0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLW1lcmdlZF8xdl91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCSAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2dyb3VwX2N0ciwNCi0JCSAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cHNfYXZhaWwsDQotCQkgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwNCi0JCSAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKQ0KLS8qIDE6MSB2ZXJ0aWNhbCBzYW1wbGluZyBjYXNlOiBtdWNoIGVhc2llciwgbmV2ZXIgbmVlZCBhIHNwYXJlIHJvdy4gKi8NCi17DQotICBteV91cHNhbXBsZV9wdHIgdXBzYW1wbGUgPSAobXlfdXBzYW1wbGVfcHRyKSBjaW5mby0+dXBzYW1wbGU7DQotDQotICAvKiBKdXN0IGRvIHRoZSB1cHNhbXBsaW5nLiAqLw0KLSAgKCp1cHNhbXBsZS0+dXBtZXRob2QpIChjaW5mbywgaW5wdXRfYnVmLCAqaW5fcm93X2dyb3VwX2N0ciwNCi0JCQkgb3V0cHV0X2J1ZiArICpvdXRfcm93X2N0cik7DQotICAvKiBBZGp1c3QgY291bnRzICovDQotICAoKm91dF9yb3dfY3RyKSsrOw0KLSAgKCppbl9yb3dfZ3JvdXBfY3RyKSsrOw0KLX0NCi0NCi0NCi0vKg0KLSAqIFRoZXNlIGFyZSB0aGUgcm91dGluZXMgaW52b2tlZCBieSB0aGUgY29udHJvbCByb3V0aW5lcyB0byBkbw0KLSAqIHRoZSBhY3R1YWwgdXBzYW1wbGluZy9jb252ZXJzaW9uLiAgT25lIHJvdyBncm91cCBpcyBwcm9jZXNzZWQgcGVyIGNhbGwuDQotICoNCi0gKiBOb3RlOiBzaW5jZSB3ZSBtYXkgYmUgd3JpdGluZyBkaXJlY3RseSBpbnRvIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGJ1ZmZlcnMsDQotICogd2UgaGF2ZSB0byBiZSBob25lc3QgYWJvdXQgdGhlIG91dHB1dCB3aWR0aDsgd2UgY2FuJ3QgYXNzdW1lIHRoZSBidWZmZXINCi0gKiBoYXMgYmVlbiByb3VuZGVkIHVwIHRvIGFuIGV2ZW4gd2lkdGguDQotICovDQotDQotDQotLyoNCi0gKiBVcHNhbXBsZSBhbmQgY29sb3IgY29udmVydCBmb3IgdGhlIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbC4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1oMnYxX21lcmdlZF91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCSAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsDQotCQkgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpDQotew0KLSAgbXlfdXBzYW1wbGVfcHRyIHVwc2FtcGxlID0gKG15X3Vwc2FtcGxlX3B0cikgY2luZm8tPnVwc2FtcGxlOw0KLSAgcmVnaXN0ZXIgaW50IHksIGNyZWQsIGNncmVlbiwgY2JsdWU7DQotICBpbnQgY2IsIGNyOw0KLSAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHRyOw0KLSAgSlNBTVBST1cgaW5wdHIwLCBpbnB0cjEsIGlucHRyMjsNCi0gIEpESU1FTlNJT04gY29sOw0KLSAgLyogY29weSB0aGVzZSBwb2ludGVycyBpbnRvIHJlZ2lzdGVycyBpZiBwb3NzaWJsZSAqLw0KLSAgcmVnaXN0ZXIgSlNBTVBMRSAqIHJhbmdlX2xpbWl0ID0gY2luZm8tPnNhbXBsZV9yYW5nZV9saW1pdDsNCi0gIGludCAqIENycnRhYiA9IHVwc2FtcGxlLT5Dcl9yX3RhYjsNCi0gIGludCAqIENiYnRhYiA9IHVwc2FtcGxlLT5DYl9iX3RhYjsNCi0gIElOVDMyICogQ3JndGFiID0gdXBzYW1wbGUtPkNyX2dfdGFiOw0KLSAgSU5UMzIgKiBDYmd0YWIgPSB1cHNhbXBsZS0+Q2JfZ190YWI7DQotICBTSElGVF9URU1QUw0KLQ0KLSAgaW5wdHIwID0gaW5wdXRfYnVmWzBdW2luX3Jvd19ncm91cF9jdHJdOw0KLSAgaW5wdHIxID0gaW5wdXRfYnVmWzFdW2luX3Jvd19ncm91cF9jdHJdOw0KLSAgaW5wdHIyID0gaW5wdXRfYnVmWzJdW2luX3Jvd19ncm91cF9jdHJdOw0KLSAgb3V0cHRyID0gb3V0cHV0X2J1ZlswXTsNCi0gIC8qIExvb3AgZm9yIGVhY2ggcGFpciBvZiBvdXRwdXQgcGl4ZWxzICovDQotICBmb3IgKGNvbCA9IGNpbmZvLT5vdXRwdXRfd2lkdGggPj4gMTsgY29sID4gMDsgY29sLS0pIHsNCi0gICAgLyogRG8gdGhlIGNocm9tYSBwYXJ0IG9mIHRoZSBjYWxjdWxhdGlvbiAqLw0KLSAgICBjYiA9IEdFVEpTQU1QTEUoKmlucHRyMSsrKTsNCi0gICAgY3IgPSBHRVRKU0FNUExFKCppbnB0cjIrKyk7DQotICAgIGNyZWQgPSBDcnJ0YWJbY3JdOw0KLSAgICBjZ3JlZW4gPSAoaW50KSBSSUdIVF9TSElGVChDYmd0YWJbY2JdICsgQ3JndGFiW2NyXSwgU0NBTEVCSVRTKTsNCi0gICAgY2JsdWUgPSBDYmJ0YWJbY2JdOw0KLSAgICAvKiBGZXRjaCAyIFkgdmFsdWVzIGFuZCBlbWl0IDIgcGl4ZWxzICovDQotICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwKyspOw0KLSAgICBvdXRwdHJbUkdCX1JFRF0gPSAgIHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsNCi0gICAgb3V0cHRyW1JHQl9HUkVFTl0gPSByYW5nZV9saW1pdFt5ICsgY2dyZWVuXTsNCi0gICAgb3V0cHRyW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOw0KLSAgICBvdXRwdHIgKz0gUkdCX1BJWEVMU0laRTsNCi0gICAgeSAgPSBHRVRKU0FNUExFKCppbnB0cjArKyk7DQotICAgIG91dHB0cltSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOw0KLSAgICBvdXRwdHJbUkdCX0dSRUVOXSA9IHJhbmdlX2xpbWl0W3kgKyBjZ3JlZW5dOw0KLSAgICBvdXRwdHJbUkdCX0JMVUVdID0gIHJhbmdlX2xpbWl0W3kgKyBjYmx1ZV07DQotICAgIG91dHB0ciArPSBSR0JfUElYRUxTSVpFOw0KLSAgfQ0KLSAgLyogSWYgaW1hZ2Ugd2lkdGggaXMgb2RkLCBkbyB0aGUgbGFzdCBvdXRwdXQgY29sdW1uIHNlcGFyYXRlbHkgKi8NCi0gIGlmIChjaW5mby0+b3V0cHV0X3dpZHRoICYgMSkgew0KLSAgICBjYiA9IEdFVEpTQU1QTEUoKmlucHRyMSk7DQotICAgIGNyID0gR0VUSlNBTVBMRSgqaW5wdHIyKTsNCi0gICAgY3JlZCA9IENycnRhYltjcl07DQotICAgIGNncmVlbiA9IChpbnQpIFJJR0hUX1NISUZUKENiZ3RhYltjYl0gKyBDcmd0YWJbY3JdLCBTQ0FMRUJJVFMpOw0KLSAgICBjYmx1ZSA9IENiYnRhYltjYl07DQotICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwKTsNCi0gICAgb3V0cHRyW1JHQl9SRURdID0gICByYW5nZV9saW1pdFt5ICsgY3JlZF07DQotICAgIG91dHB0cltSR0JfR1JFRU5dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07DQotICAgIG91dHB0cltSR0JfQkxVRV0gPSAgcmFuZ2VfbGltaXRbeSArIGNibHVlXTsNCi0gIH0NCi19DQotDQotDQotLyoNCi0gKiBVcHNhbXBsZSBhbmQgY29sb3IgY29udmVydCBmb3IgdGhlIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbC4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1oMnYyX21lcmdlZF91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCSAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsDQotCQkgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpDQotew0KLSAgbXlfdXBzYW1wbGVfcHRyIHVwc2FtcGxlID0gKG15X3Vwc2FtcGxlX3B0cikgY2luZm8tPnVwc2FtcGxlOw0KLSAgcmVnaXN0ZXIgaW50IHksIGNyZWQsIGNncmVlbiwgY2JsdWU7DQotICBpbnQgY2IsIGNyOw0KLSAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHRyMCwgb3V0cHRyMTsNCi0gIEpTQU1QUk9XIGlucHRyMDAsIGlucHRyMDEsIGlucHRyMSwgaW5wdHIyOw0KLSAgSkRJTUVOU0lPTiBjb2w7DQotICAvKiBjb3B5IHRoZXNlIHBvaW50ZXJzIGludG8gcmVnaXN0ZXJzIGlmIHBvc3NpYmxlICovDQotICByZWdpc3RlciBKU0FNUExFICogcmFuZ2VfbGltaXQgPSBjaW5mby0+c2FtcGxlX3JhbmdlX2xpbWl0Ow0KLSAgaW50ICogQ3JydGFiID0gdXBzYW1wbGUtPkNyX3JfdGFiOw0KLSAgaW50ICogQ2JidGFiID0gdXBzYW1wbGUtPkNiX2JfdGFiOw0KLSAgSU5UMzIgKiBDcmd0YWIgPSB1cHNhbXBsZS0+Q3JfZ190YWI7DQotICBJTlQzMiAqIENiZ3RhYiA9IHVwc2FtcGxlLT5DYl9nX3RhYjsNCi0gIFNISUZUX1RFTVBTDQotDQotICBpbnB0cjAwID0gaW5wdXRfYnVmWzBdW2luX3Jvd19ncm91cF9jdHIqMl07DQotICBpbnB0cjAxID0gaW5wdXRfYnVmWzBdW2luX3Jvd19ncm91cF9jdHIqMiArIDFdOw0KLSAgaW5wdHIxID0gaW5wdXRfYnVmWzFdW2luX3Jvd19ncm91cF9jdHJdOw0KLSAgaW5wdHIyID0gaW5wdXRfYnVmWzJdW2luX3Jvd19ncm91cF9jdHJdOw0KLSAgb3V0cHRyMCA9IG91dHB1dF9idWZbMF07DQotICBvdXRwdHIxID0gb3V0cHV0X2J1ZlsxXTsNCi0gIC8qIExvb3AgZm9yIGVhY2ggZ3JvdXAgb2Ygb3V0cHV0IHBpeGVscyAqLw0KLSAgZm9yIChjb2wgPSBjaW5mby0+b3V0cHV0X3dpZHRoID4+IDE7IGNvbCA+IDA7IGNvbC0tKSB7DQotICAgIC8qIERvIHRoZSBjaHJvbWEgcGFydCBvZiB0aGUgY2FsY3VsYXRpb24gKi8NCi0gICAgY2IgPSBHRVRKU0FNUExFKCppbnB0cjErKyk7DQotICAgIGNyID0gR0VUSlNBTVBMRSgqaW5wdHIyKyspOw0KLSAgICBjcmVkID0gQ3JydGFiW2NyXTsNCi0gICAgY2dyZWVuID0gKGludCkgUklHSFRfU0hJRlQoQ2JndGFiW2NiXSArIENyZ3RhYltjcl0sIFNDQUxFQklUUyk7DQotICAgIGNibHVlID0gQ2JidGFiW2NiXTsNCi0gICAgLyogRmV0Y2ggNCBZIHZhbHVlcyBhbmQgZW1pdCA0IHBpeGVscyAqLw0KLSAgICB5ICA9IEdFVEpTQU1QTEUoKmlucHRyMDArKyk7DQotICAgIG91dHB0cjBbUkdCX1JFRF0gPSAgIHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsNCi0gICAgb3V0cHRyMFtSR0JfR1JFRU5dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07DQotICAgIG91dHB0cjBbUkdCX0JMVUVdID0gIHJhbmdlX2xpbWl0W3kgKyBjYmx1ZV07DQotICAgIG91dHB0cjAgKz0gUkdCX1BJWEVMU0laRTsNCi0gICAgeSAgPSBHRVRKU0FNUExFKCppbnB0cjAwKyspOw0KLSAgICBvdXRwdHIwW1JHQl9SRURdID0gICByYW5nZV9saW1pdFt5ICsgY3JlZF07DQotICAgIG91dHB0cjBbUkdCX0dSRUVOXSA9IHJhbmdlX2xpbWl0W3kgKyBjZ3JlZW5dOw0KLSAgICBvdXRwdHIwW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOw0KLSAgICBvdXRwdHIwICs9IFJHQl9QSVhFTFNJWkU7DQotICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwMSsrKTsNCi0gICAgb3V0cHRyMVtSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOw0KLSAgICBvdXRwdHIxW1JHQl9HUkVFTl0gPSByYW5nZV9saW1pdFt5ICsgY2dyZWVuXTsNCi0gICAgb3V0cHRyMVtSR0JfQkxVRV0gPSAgcmFuZ2VfbGltaXRbeSArIGNibHVlXTsNCi0gICAgb3V0cHRyMSArPSBSR0JfUElYRUxTSVpFOw0KLSAgICB5ICA9IEdFVEpTQU1QTEUoKmlucHRyMDErKyk7DQotICAgIG91dHB0cjFbUkdCX1JFRF0gPSAgIHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsNCi0gICAgb3V0cHRyMVtSR0JfR1JFRU5dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07DQotICAgIG91dHB0cjFbUkdCX0JMVUVdID0gIHJhbmdlX2xpbWl0W3kgKyBjYmx1ZV07DQotICAgIG91dHB0cjEgKz0gUkdCX1BJWEVMU0laRTsNCi0gIH0NCi0gIC8qIElmIGltYWdlIHdpZHRoIGlzIG9kZCwgZG8gdGhlIGxhc3Qgb3V0cHV0IGNvbHVtbiBzZXBhcmF0ZWx5ICovDQotICBpZiAoY2luZm8tPm91dHB1dF93aWR0aCAmIDEpIHsNCi0gICAgY2IgPSBHRVRKU0FNUExFKCppbnB0cjEpOw0KLSAgICBjciA9IEdFVEpTQU1QTEUoKmlucHRyMik7DQotICAgIGNyZWQgPSBDcnJ0YWJbY3JdOw0KLSAgICBjZ3JlZW4gPSAoaW50KSBSSUdIVF9TSElGVChDYmd0YWJbY2JdICsgQ3JndGFiW2NyXSwgU0NBTEVCSVRTKTsNCi0gICAgY2JsdWUgPSBDYmJ0YWJbY2JdOw0KLSAgICB5ICA9IEdFVEpTQU1QTEUoKmlucHRyMDApOw0KLSAgICBvdXRwdHIwW1JHQl9SRURdID0gICByYW5nZV9saW1pdFt5ICsgY3JlZF07DQotICAgIG91dHB0cjBbUkdCX0dSRUVOXSA9IHJhbmdlX2xpbWl0W3kgKyBjZ3JlZW5dOw0KLSAgICBvdXRwdHIwW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOw0KLSAgICB5ICA9IEdFVEpTQU1QTEUoKmlucHRyMDEpOw0KLSAgICBvdXRwdHIxW1JHQl9SRURdID0gICByYW5nZV9saW1pdFt5ICsgY3JlZF07DQotICAgIG91dHB0cjFbUkdCX0dSRUVOXSA9IHJhbmdlX2xpbWl0W3kgKyBjZ3JlZW5dOw0KLSAgICBvdXRwdHIxW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOw0KLSAgfQ0KLX0NCi0NCi0NCi0vKg0KLSAqIE1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciBtZXJnZWQgdXBzYW1wbGluZy9jb2xvciBjb252ZXJzaW9uLg0KLSAqDQotICogTkI6IHRoaXMgaXMgY2FsbGVkIHVuZGVyIHRoZSBjb25kaXRpb25zIGRldGVybWluZWQgYnkgdXNlX21lcmdlZF91cHNhbXBsZSgpDQotICogaW4gamRtYXN0ZXIuYy4gIFRoYXQgcm91dGluZSBNVVNUIGNvcnJlc3BvbmQgdG8gdGhlIGFjdHVhbCBjYXBhYmlsaXRpZXMNCi0gKiBvZiB0aGlzIG1vZHVsZTsgbm8gc2FmZXR5IGNoZWNrcyBhcmUgbWFkZSBoZXJlLg0KLSAqLw0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWppbml0X21lcmdlZF91cHNhbXBsZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAgbXlfdXBzYW1wbGVfcHRyIHVwc2FtcGxlOw0KLQ0KLSAgdXBzYW1wbGUgPSAobXlfdXBzYW1wbGVfcHRyKQ0KLSAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQlTSVpFT0YobXlfdXBzYW1wbGVyKSk7DQotICBjaW5mby0+dXBzYW1wbGUgPSAoc3RydWN0IGpwZWdfdXBzYW1wbGVyICopIHVwc2FtcGxlOw0KLSAgdXBzYW1wbGUtPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzc19tZXJnZWRfdXBzYW1wbGU7DQotICB1cHNhbXBsZS0+cHViLm5lZWRfY29udGV4dF9yb3dzID0gRkFMU0U7DQotDQotICB1cHNhbXBsZS0+b3V0X3Jvd193aWR0aCA9IGNpbmZvLT5vdXRwdXRfd2lkdGggKiBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHM7DQotDQotICBpZiAoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yID09IDIpIHsNCi0gICAgdXBzYW1wbGUtPnB1Yi51cHNhbXBsZSA9IG1lcmdlZF8ydl91cHNhbXBsZTsNCi0gICAgdXBzYW1wbGUtPnVwbWV0aG9kID0gaDJ2Ml9tZXJnZWRfdXBzYW1wbGU7DQotICAgIC8qIEFsbG9jYXRlIGEgc3BhcmUgcm93IGJ1ZmZlciAqLw0KLSAgICB1cHNhbXBsZS0+c3BhcmVfcm93ID0gKEpTQU1QUk9XKQ0KLSAgICAgICgqY2luZm8tPm1lbS0+YWxsb2NfbGFyZ2UpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsDQotCQkoc2l6ZV90KSAodXBzYW1wbGUtPm91dF9yb3dfd2lkdGggKiBTSVpFT0YoSlNBTVBMRSkpKTsNCi0gIH0gZWxzZSB7DQotICAgIHVwc2FtcGxlLT5wdWIudXBzYW1wbGUgPSBtZXJnZWRfMXZfdXBzYW1wbGU7DQotICAgIHVwc2FtcGxlLT51cG1ldGhvZCA9IGgydjFfbWVyZ2VkX3Vwc2FtcGxlOw0KLSAgICAvKiBObyBzcGFyZSByb3cgbmVlZGVkICovDQotICAgIHVwc2FtcGxlLT5zcGFyZV9yb3cgPSBOVUxMOw0KLSAgfQ0KLQ0KLSAgYnVpbGRfeWNjX3JnYl90YWJsZShjaW5mbyk7DQotfQ0KLQ0KLSNlbmRpZiAvKiBVUFNBTVBMRV9NRVJHSU5HX1NVUFBPUlRFRCAqLw0KLQ0KLSNlbmRpZiAvL19GWF9KUEVHX1RVUkJPXw0KKyNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pCisvKgorICogamRtZXJnZS5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgY29kZSBmb3IgbWVyZ2VkIHVwc2FtcGxpbmcvY29sb3IgY29udmVyc2lvbi4KKyAqCisgKiBUaGlzIGZpbGUgY29tYmluZXMgZnVuY3Rpb25zIGZyb20gamRzYW1wbGUuYyBhbmQgamRjb2xvci5jOworICogcmVhZCB0aG9zZSBmaWxlcyBmaXJzdCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbi4KKyAqCisgKiBXaGVuIHRoZSBjaHJvbWEgY29tcG9uZW50cyBhcmUgdG8gYmUgdXBzYW1wbGVkIGJ5IHNpbXBsZSByZXBsaWNhdGlvbgorICogKGllLCBib3ggZmlsdGVyaW5nKSwgd2UgY2FuIHNhdmUgc29tZSB3b3JrIGluIGNvbG9yIGNvbnZlcnNpb24gYnkKKyAqIGNhbGN1bGF0aW5nIGFsbCB0aGUgb3V0cHV0IHBpeGVscyBjb3JyZXNwb25kaW5nIHRvIGEgcGFpciBvZiBjaHJvbWEKKyAqIHNhbXBsZXMgYXQgb25lIHRpbWUuICBJbiB0aGUgY29udmVyc2lvbiBlcXVhdGlvbnMKKyAqCVIgPSBZICAgICAgICAgICArIEsxICogQ3IKKyAqCUcgPSBZICsgSzIgKiBDYiArIEszICogQ3IKKyAqCUIgPSBZICsgSzQgKiBDYgorICogb25seSB0aGUgWSB0ZXJtIHZhcmllcyBhbW9uZyB0aGUgZ3JvdXAgb2YgcGl4ZWxzIGNvcnJlc3BvbmRpbmcgdG8gYSBwYWlyCisgKiBvZiBjaHJvbWEgc2FtcGxlcywgc28gdGhlIHJlc3Qgb2YgdGhlIHRlcm1zIGNhbiBiZSBjYWxjdWxhdGVkIGp1c3Qgb25jZS4KKyAqIEF0IHR5cGljYWwgc2FtcGxpbmcgcmF0aW9zLCB0aGlzIGVsaW1pbmF0ZXMgaGFsZiBvciB0aHJlZS1xdWFydGVycyBvZiB0aGUKKyAqIG11bHRpcGxpY2F0aW9ucyBuZWVkZWQgZm9yIGNvbG9yIGNvbnZlcnNpb24uCisgKgorICogVGhpcyBmaWxlIGN1cnJlbnRseSBwcm92aWRlcyBpbXBsZW1lbnRhdGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXM6CisgKglZQ2JDciA9PiBSR0IgY29sb3IgY29udmVyc2lvbiBvbmx5LgorICoJU2FtcGxpbmcgcmF0aW9zIG9mIDJoMXYgb3IgMmgydi4KKyAqCU5vIHNjYWxpbmcgbmVlZGVkIGF0IHVwc2FtcGxlIHRpbWUuCisgKglDb3JuZXItYWxpZ25lZCAobm9uLUNDSVI2MDEpIHNhbXBsaW5nIGFsaWdubWVudC4KKyAqIE90aGVyIHNwZWNpYWwgY2FzZXMgY291bGQgYmUgYWRkZWQsIGJ1dCBpbiBtb3N0IGFwcGxpY2F0aW9ucyB0aGVzZSBhcmUKKyAqIHRoZSBvbmx5IGNvbW1vbiBjYXNlcy4gIChGb3IgdW5jb21tb24gY2FzZXMgd2UgZmFsbCBiYWNrIG9uIHRoZSBtb3JlCisgKiBnZW5lcmFsIGNvZGUgaW4gamRzYW1wbGUuYyBhbmQgamRjb2xvci5jLikKKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisKKyNpZmRlZiBVUFNBTVBMRV9NRVJHSU5HX1NVUFBPUlRFRAorCisjaWZkZWYgX0ZYX01BTkFHRURfQ09ERV8KKyNkZWZpbmUgbXlfdXBzYW1wbGVyCW15X3Vwc2FtcGxlcl9tCisjZW5kaWYKKworLyogUHJpdmF0ZSBzdWJvYmplY3QgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QganBlZ191cHNhbXBsZXIgcHViOwkvKiBwdWJsaWMgZmllbGRzICovCisKKyAgLyogUG9pbnRlciB0byByb3V0aW5lIHRvIGRvIGFjdHVhbCB1cHNhbXBsaW5nL2NvbnZlcnNpb24gb2Ygb25lIHJvdyBncm91cCAqLworICBKTUVUSE9EKHZvaWQsIHVwbWV0aG9kLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCSAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisJCQkgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpKTsKKworICAvKiBQcml2YXRlIHN0YXRlIGZvciBZQ0MtPlJHQiBjb252ZXJzaW9uICovCisgIGludCAqIENyX3JfdGFiOwkJLyogPT4gdGFibGUgZm9yIENyIHRvIFIgY29udmVyc2lvbiAqLworICBpbnQgKiBDYl9iX3RhYjsJCS8qID0+IHRhYmxlIGZvciBDYiB0byBCIGNvbnZlcnNpb24gKi8KKyAgSU5UMzIgKiBDcl9nX3RhYjsJCS8qID0+IHRhYmxlIGZvciBDciB0byBHIGNvbnZlcnNpb24gKi8KKyAgSU5UMzIgKiBDYl9nX3RhYjsJCS8qID0+IHRhYmxlIGZvciBDYiB0byBHIGNvbnZlcnNpb24gKi8KKworICAvKiBGb3IgMjoxIHZlcnRpY2FsIHNhbXBsaW5nLCB3ZSBwcm9kdWNlIHR3byBvdXRwdXQgcm93cyBhdCBhIHRpbWUuCisgICAqIFdlIG5lZWQgYSAic3BhcmUiIHJvdyBidWZmZXIgdG8gaG9sZCB0aGUgc2Vjb25kIG91dHB1dCByb3cgaWYgdGhlCisgICAqIGFwcGxpY2F0aW9uIHByb3ZpZGVzIGp1c3QgYSBvbmUtcm93IGJ1ZmZlcjsgd2UgYWxzbyB1c2UgdGhlIHNwYXJlCisgICAqIHRvIGRpc2NhcmQgdGhlIGR1bW15IGxhc3Qgcm93IGlmIHRoZSBpbWFnZSBoZWlnaHQgaXMgb2RkLgorICAgKi8KKyAgSlNBTVBST1cgc3BhcmVfcm93OworICBib29sZWFuIHNwYXJlX2Z1bGw7CQkvKiBUIGlmIHNwYXJlIGJ1ZmZlciBpcyBvY2N1cGllZCAqLworCisgIEpESU1FTlNJT04gb3V0X3Jvd193aWR0aDsJLyogc2FtcGxlcyBwZXIgb3V0cHV0IHJvdyAqLworICBKRElNRU5TSU9OIHJvd3NfdG9fZ287CS8qIGNvdW50cyByb3dzIHJlbWFpbmluZyBpbiBpbWFnZSAqLworfSBteV91cHNhbXBsZXI7CisKK3R5cGVkZWYgbXlfdXBzYW1wbGVyICogbXlfdXBzYW1wbGVfcHRyOworCisjZGVmaW5lIFNDQUxFQklUUwkxNgkvKiBzcGVlZGllc3QgcmlnaHQtc2hpZnQgb24gc29tZSBtYWNoaW5lcyAqLworI2RlZmluZSBPTkVfSEFMRgkoKElOVDMyKSAxIDw8IChTQ0FMRUJJVFMtMSkpCisjZGVmaW5lIEZJWCh4KQkJKChJTlQzMikgKCh4KSAqICgxTDw8U0NBTEVCSVRTKSArIDAuNSkpCisKKworLyoKKyAqIEluaXRpYWxpemUgdGFibGVzIGZvciBZQ0MtPlJHQiBjb2xvcnNwYWNlIGNvbnZlcnNpb24uCisgKiBUaGlzIGlzIHRha2VuIGRpcmVjdGx5IGZyb20gamRjb2xvci5jOyBzZWUgdGhhdCBmaWxlIGZvciBtb3JlIGluZm8uCisgKi8KKworTE9DQUwodm9pZCkKK2J1aWxkX3ljY19yZ2JfdGFibGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIG15X3Vwc2FtcGxlX3B0ciB1cHNhbXBsZSA9IChteV91cHNhbXBsZV9wdHIpIGNpbmZvLT51cHNhbXBsZTsKKyAgaW50IGk7CisgIElOVDMyIHg7CisgIFNISUZUX1RFTVBTCisKKyAgdXBzYW1wbGUtPkNyX3JfdGFiID0gKGludCAqKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJKE1BWEpTQU1QTEUrMSkgKiBTSVpFT0YoaW50KSk7CisgIHVwc2FtcGxlLT5DYl9iX3RhYiA9IChpbnQgKikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCShNQVhKU0FNUExFKzEpICogU0laRU9GKGludCkpOworICB1cHNhbXBsZS0+Q3JfZ190YWIgPSAoSU5UMzIgKikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCShNQVhKU0FNUExFKzEpICogU0laRU9GKElOVDMyKSk7CisgIHVwc2FtcGxlLT5DYl9nX3RhYiA9IChJTlQzMiAqKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJKE1BWEpTQU1QTEUrMSkgKiBTSVpFT0YoSU5UMzIpKTsKKworICBmb3IgKGkgPSAwLCB4ID0gLUNFTlRFUkpTQU1QTEU7IGkgPD0gTUFYSlNBTVBMRTsgaSsrLCB4KyspIHsKKyAgICAvKiBpIGlzIHRoZSBhY3R1YWwgaW5wdXQgcGl4ZWwgdmFsdWUsIGluIHRoZSByYW5nZSAwLi5NQVhKU0FNUExFICovCisgICAgLyogVGhlIENiIG9yIENyIHZhbHVlIHdlIGFyZSB0aGlua2luZyBvZiBpcyB4ID0gaSAtIENFTlRFUkpTQU1QTEUgKi8KKyAgICAvKiBDcj0+UiB2YWx1ZSBpcyBuZWFyZXN0IGludCB0byAxLjQwMjAwICogeCAqLworICAgIHVwc2FtcGxlLT5Dcl9yX3RhYltpXSA9IChpbnQpCisJCSAgICBSSUdIVF9TSElGVChGSVgoMS40MDIwMCkgKiB4ICsgT05FX0hBTEYsIFNDQUxFQklUUyk7CisgICAgLyogQ2I9PkIgdmFsdWUgaXMgbmVhcmVzdCBpbnQgdG8gMS43NzIwMCAqIHggKi8KKyAgICB1cHNhbXBsZS0+Q2JfYl90YWJbaV0gPSAoaW50KQorCQkgICAgUklHSFRfU0hJRlQoRklYKDEuNzcyMDApICogeCArIE9ORV9IQUxGLCBTQ0FMRUJJVFMpOworICAgIC8qIENyPT5HIHZhbHVlIGlzIHNjYWxlZC11cCAtMC43MTQxNCAqIHggKi8KKyAgICB1cHNhbXBsZS0+Q3JfZ190YWJbaV0gPSAoLSBGSVgoMC43MTQxNCkpICogeDsKKyAgICAvKiBDYj0+RyB2YWx1ZSBpcyBzY2FsZWQtdXAgLTAuMzQ0MTQgKiB4ICovCisgICAgLyogV2UgYWxzbyBhZGQgaW4gT05FX0hBTEYgc28gdGhhdCBuZWVkIG5vdCBkbyBpdCBpbiBpbm5lciBsb29wICovCisgICAgdXBzYW1wbGUtPkNiX2dfdGFiW2ldID0gKC0gRklYKDAuMzQ0MTQpKSAqIHggKyBPTkVfSEFMRjsKKyAgfQorfQorCisKKy8qCisgKiBJbml0aWFsaXplIGZvciBhbiB1cHNhbXBsaW5nIHBhc3MuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9wYXNzX21lcmdlZF91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgbXlfdXBzYW1wbGVfcHRyIHVwc2FtcGxlID0gKG15X3Vwc2FtcGxlX3B0cikgY2luZm8tPnVwc2FtcGxlOworCisgIC8qIE1hcmsgdGhlIHNwYXJlIGJ1ZmZlciBlbXB0eSAqLworICB1cHNhbXBsZS0+c3BhcmVfZnVsbCA9IEZBTFNFOworICAvKiBJbml0aWFsaXplIHRvdGFsLWhlaWdodCBjb3VudGVyIGZvciBkZXRlY3RpbmcgYm90dG9tIG9mIGltYWdlICovCisgIHVwc2FtcGxlLT5yb3dzX3RvX2dvID0gY2luZm8tPm91dHB1dF9oZWlnaHQ7Cit9CisKKworLyoKKyAqIENvbnRyb2wgcm91dGluZSB0byBkbyB1cHNhbXBsaW5nIChhbmQgY29sb3IgY29udmVyc2lvbikuCisgKgorICogVGhlIGNvbnRyb2wgcm91dGluZSBqdXN0IGhhbmRsZXMgdGhlIHJvdyBidWZmZXJpbmcgY29uc2lkZXJhdGlvbnMuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCittZXJnZWRfMnZfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisJCSAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2dyb3VwX2N0ciwKKwkJICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3Vwc19hdmFpbCwKKwkJICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCisJCSAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKQorLyogMjoxIHZlcnRpY2FsIHNhbXBsaW5nIGNhc2U6IG1heSBuZWVkIGEgc3BhcmUgcm93LiAqLworeworICBteV91cHNhbXBsZV9wdHIgdXBzYW1wbGUgPSAobXlfdXBzYW1wbGVfcHRyKSBjaW5mby0+dXBzYW1wbGU7CisgIEpTQU1QUk9XIHdvcmtfcHRyc1syXTsKKyAgSkRJTUVOU0lPTiBudW1fcm93czsJCS8qIG51bWJlciBvZiByb3dzIHJldHVybmVkIHRvIGNhbGxlciAqLworCisgIGlmICh1cHNhbXBsZS0+c3BhcmVfZnVsbCkgeworICAgIC8qIElmIHdlIGhhdmUgYSBzcGFyZSByb3cgc2F2ZWQgZnJvbSBhIHByZXZpb3VzIGN5Y2xlLCBqdXN0IHJldHVybiBpdC4gKi8KKyAgICBqY29weV9zYW1wbGVfcm93cygmIHVwc2FtcGxlLT5zcGFyZV9yb3csIDAsIG91dHB1dF9idWYgKyAqb3V0X3Jvd19jdHIsIDAsCisJCSAgICAgIDEsIHVwc2FtcGxlLT5vdXRfcm93X3dpZHRoKTsKKyAgICBudW1fcm93cyA9IDE7CisgICAgdXBzYW1wbGUtPnNwYXJlX2Z1bGwgPSBGQUxTRTsKKyAgfSBlbHNlIHsKKyAgICAvKiBGaWd1cmUgbnVtYmVyIG9mIHJvd3MgdG8gcmV0dXJuIHRvIGNhbGxlci4gKi8KKyAgICBudW1fcm93cyA9IDI7CisgICAgLyogTm90IG1vcmUgdGhhbiB0aGUgZGlzdGFuY2UgdG8gdGhlIGVuZCBvZiB0aGUgaW1hZ2UuICovCisgICAgaWYgKG51bV9yb3dzID4gdXBzYW1wbGUtPnJvd3NfdG9fZ28pCisgICAgICBudW1fcm93cyA9IHVwc2FtcGxlLT5yb3dzX3RvX2dvOworICAgIC8qIEFuZCBub3QgbW9yZSB0aGFuIHdoYXQgdGhlIGNsaWVudCBjYW4gYWNjZXB0OiAqLworICAgIG91dF9yb3dzX2F2YWlsIC09ICpvdXRfcm93X2N0cjsKKyAgICBpZiAobnVtX3Jvd3MgPiBvdXRfcm93c19hdmFpbCkKKyAgICAgIG51bV9yb3dzID0gb3V0X3Jvd3NfYXZhaWw7CisgICAgLyogQ3JlYXRlIG91dHB1dCBwb2ludGVyIGFycmF5IGZvciB1cHNhbXBsZXIuICovCisgICAgd29ya19wdHJzWzBdID0gb3V0cHV0X2J1Zlsqb3V0X3Jvd19jdHJdOworICAgIGlmIChudW1fcm93cyA+IDEpIHsKKyAgICAgIHdvcmtfcHRyc1sxXSA9IG91dHB1dF9idWZbKm91dF9yb3dfY3RyICsgMV07CisgICAgfSBlbHNlIHsKKyAgICAgIHdvcmtfcHRyc1sxXSA9IHVwc2FtcGxlLT5zcGFyZV9yb3c7CisgICAgICB1cHNhbXBsZS0+c3BhcmVfZnVsbCA9IFRSVUU7CisgICAgfQorICAgIC8qIE5vdyBkbyB0aGUgdXBzYW1wbGluZy4gKi8KKyAgICAoKnVwc2FtcGxlLT51cG1ldGhvZCkgKGNpbmZvLCBpbnB1dF9idWYsICppbl9yb3dfZ3JvdXBfY3RyLCB3b3JrX3B0cnMpOworICB9CisKKyAgLyogQWRqdXN0IGNvdW50cyAqLworICAqb3V0X3Jvd19jdHIgKz0gbnVtX3Jvd3M7CisgIHVwc2FtcGxlLT5yb3dzX3RvX2dvIC09IG51bV9yb3dzOworICAvKiBXaGVuIHRoZSBidWZmZXIgaXMgZW1wdGllZCwgZGVjbGFyZSB0aGlzIGlucHV0IHJvdyBncm91cCBjb25zdW1lZCAqLworICBpZiAoISB1cHNhbXBsZS0+c3BhcmVfZnVsbCkKKyAgICAoKmluX3Jvd19ncm91cF9jdHIpKys7Cit9CisKKworTUVUSE9EREVGKHZvaWQpCittZXJnZWRfMXZfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisJCSAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2dyb3VwX2N0ciwKKwkJICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3Vwc19hdmFpbCwKKwkJICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCisJCSAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKQorLyogMToxIHZlcnRpY2FsIHNhbXBsaW5nIGNhc2U6IG11Y2ggZWFzaWVyLCBuZXZlciBuZWVkIGEgc3BhcmUgcm93LiAqLworeworICBteV91cHNhbXBsZV9wdHIgdXBzYW1wbGUgPSAobXlfdXBzYW1wbGVfcHRyKSBjaW5mby0+dXBzYW1wbGU7CisKKyAgLyogSnVzdCBkbyB0aGUgdXBzYW1wbGluZy4gKi8KKyAgKCp1cHNhbXBsZS0+dXBtZXRob2QpIChjaW5mbywgaW5wdXRfYnVmLCAqaW5fcm93X2dyb3VwX2N0ciwKKwkJCSBvdXRwdXRfYnVmICsgKm91dF9yb3dfY3RyKTsKKyAgLyogQWRqdXN0IGNvdW50cyAqLworICAoKm91dF9yb3dfY3RyKSsrOworICAoKmluX3Jvd19ncm91cF9jdHIpKys7Cit9CisKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgcm91dGluZXMgaW52b2tlZCBieSB0aGUgY29udHJvbCByb3V0aW5lcyB0byBkbworICogdGhlIGFjdHVhbCB1cHNhbXBsaW5nL2NvbnZlcnNpb24uICBPbmUgcm93IGdyb3VwIGlzIHByb2Nlc3NlZCBwZXIgY2FsbC4KKyAqCisgKiBOb3RlOiBzaW5jZSB3ZSBtYXkgYmUgd3JpdGluZyBkaXJlY3RseSBpbnRvIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGJ1ZmZlcnMsCisgKiB3ZSBoYXZlIHRvIGJlIGhvbmVzdCBhYm91dCB0aGUgb3V0cHV0IHdpZHRoOyB3ZSBjYW4ndCBhc3N1bWUgdGhlIGJ1ZmZlcgorICogaGFzIGJlZW4gcm91bmRlZCB1cCB0byBhbiBldmVuIHdpZHRoLgorICovCisKKworLyoKKyAqIFVwc2FtcGxlIGFuZCBjb2xvciBjb252ZXJ0IGZvciB0aGUgY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMToxIHZlcnRpY2FsLgorICovCisKK01FVEhPRERFRih2b2lkKQoraDJ2MV9tZXJnZWRfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisJCSAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisJCSAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikKK3sKKyAgbXlfdXBzYW1wbGVfcHRyIHVwc2FtcGxlID0gKG15X3Vwc2FtcGxlX3B0cikgY2luZm8tPnVwc2FtcGxlOworICByZWdpc3RlciBpbnQgeSwgY3JlZCwgY2dyZWVuLCBjYmx1ZTsKKyAgaW50IGNiLCBjcjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgb3V0cHRyOworICBKU0FNUFJPVyBpbnB0cjAsIGlucHRyMSwgaW5wdHIyOworICBKRElNRU5TSU9OIGNvbDsKKyAgLyogY29weSB0aGVzZSBwb2ludGVycyBpbnRvIHJlZ2lzdGVycyBpZiBwb3NzaWJsZSAqLworICByZWdpc3RlciBKU0FNUExFICogcmFuZ2VfbGltaXQgPSBjaW5mby0+c2FtcGxlX3JhbmdlX2xpbWl0OworICBpbnQgKiBDcnJ0YWIgPSB1cHNhbXBsZS0+Q3Jfcl90YWI7CisgIGludCAqIENiYnRhYiA9IHVwc2FtcGxlLT5DYl9iX3RhYjsKKyAgSU5UMzIgKiBDcmd0YWIgPSB1cHNhbXBsZS0+Q3JfZ190YWI7CisgIElOVDMyICogQ2JndGFiID0gdXBzYW1wbGUtPkNiX2dfdGFiOworICBTSElGVF9URU1QUworCisgIGlucHRyMCA9IGlucHV0X2J1ZlswXVtpbl9yb3dfZ3JvdXBfY3RyXTsKKyAgaW5wdHIxID0gaW5wdXRfYnVmWzFdW2luX3Jvd19ncm91cF9jdHJdOworICBpbnB0cjIgPSBpbnB1dF9idWZbMl1baW5fcm93X2dyb3VwX2N0cl07CisgIG91dHB0ciA9IG91dHB1dF9idWZbMF07CisgIC8qIExvb3AgZm9yIGVhY2ggcGFpciBvZiBvdXRwdXQgcGl4ZWxzICovCisgIGZvciAoY29sID0gY2luZm8tPm91dHB1dF93aWR0aCA+PiAxOyBjb2wgPiAwOyBjb2wtLSkgeworICAgIC8qIERvIHRoZSBjaHJvbWEgcGFydCBvZiB0aGUgY2FsY3VsYXRpb24gKi8KKyAgICBjYiA9IEdFVEpTQU1QTEUoKmlucHRyMSsrKTsKKyAgICBjciA9IEdFVEpTQU1QTEUoKmlucHRyMisrKTsKKyAgICBjcmVkID0gQ3JydGFiW2NyXTsKKyAgICBjZ3JlZW4gPSAoaW50KSBSSUdIVF9TSElGVChDYmd0YWJbY2JdICsgQ3JndGFiW2NyXSwgU0NBTEVCSVRTKTsKKyAgICBjYmx1ZSA9IENiYnRhYltjYl07CisgICAgLyogRmV0Y2ggMiBZIHZhbHVlcyBhbmQgZW1pdCAyIHBpeGVscyAqLworICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwKyspOworICAgIG91dHB0cltSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOworICAgIG91dHB0cltSR0JfR1JFRU5dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07CisgICAgb3V0cHRyW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOworICAgIG91dHB0ciArPSBSR0JfUElYRUxTSVpFOworICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwKyspOworICAgIG91dHB0cltSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOworICAgIG91dHB0cltSR0JfR1JFRU5dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07CisgICAgb3V0cHRyW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOworICAgIG91dHB0ciArPSBSR0JfUElYRUxTSVpFOworICB9CisgIC8qIElmIGltYWdlIHdpZHRoIGlzIG9kZCwgZG8gdGhlIGxhc3Qgb3V0cHV0IGNvbHVtbiBzZXBhcmF0ZWx5ICovCisgIGlmIChjaW5mby0+b3V0cHV0X3dpZHRoICYgMSkgeworICAgIGNiID0gR0VUSlNBTVBMRSgqaW5wdHIxKTsKKyAgICBjciA9IEdFVEpTQU1QTEUoKmlucHRyMik7CisgICAgY3JlZCA9IENycnRhYltjcl07CisgICAgY2dyZWVuID0gKGludCkgUklHSFRfU0hJRlQoQ2JndGFiW2NiXSArIENyZ3RhYltjcl0sIFNDQUxFQklUUyk7CisgICAgY2JsdWUgPSBDYmJ0YWJbY2JdOworICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwKTsKKyAgICBvdXRwdHJbUkdCX1JFRF0gPSAgIHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsKKyAgICBvdXRwdHJbUkdCX0dSRUVOXSA9IHJhbmdlX2xpbWl0W3kgKyBjZ3JlZW5dOworICAgIG91dHB0cltSR0JfQkxVRV0gPSAgcmFuZ2VfbGltaXRbeSArIGNibHVlXTsKKyAgfQorfQorCisKKy8qCisgKiBVcHNhbXBsZSBhbmQgY29sb3IgY29udmVydCBmb3IgdGhlIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbC4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2gydjJfbWVyZ2VkX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorCQkgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorCQkgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpCit7CisgIG15X3Vwc2FtcGxlX3B0ciB1cHNhbXBsZSA9IChteV91cHNhbXBsZV9wdHIpIGNpbmZvLT51cHNhbXBsZTsKKyAgcmVnaXN0ZXIgaW50IHksIGNyZWQsIGNncmVlbiwgY2JsdWU7CisgIGludCBjYiwgY3I7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIG91dHB0cjAsIG91dHB0cjE7CisgIEpTQU1QUk9XIGlucHRyMDAsIGlucHRyMDEsIGlucHRyMSwgaW5wdHIyOworICBKRElNRU5TSU9OIGNvbDsKKyAgLyogY29weSB0aGVzZSBwb2ludGVycyBpbnRvIHJlZ2lzdGVycyBpZiBwb3NzaWJsZSAqLworICByZWdpc3RlciBKU0FNUExFICogcmFuZ2VfbGltaXQgPSBjaW5mby0+c2FtcGxlX3JhbmdlX2xpbWl0OworICBpbnQgKiBDcnJ0YWIgPSB1cHNhbXBsZS0+Q3Jfcl90YWI7CisgIGludCAqIENiYnRhYiA9IHVwc2FtcGxlLT5DYl9iX3RhYjsKKyAgSU5UMzIgKiBDcmd0YWIgPSB1cHNhbXBsZS0+Q3JfZ190YWI7CisgIElOVDMyICogQ2JndGFiID0gdXBzYW1wbGUtPkNiX2dfdGFiOworICBTSElGVF9URU1QUworCisgIGlucHRyMDAgPSBpbnB1dF9idWZbMF1baW5fcm93X2dyb3VwX2N0cioyXTsKKyAgaW5wdHIwMSA9IGlucHV0X2J1ZlswXVtpbl9yb3dfZ3JvdXBfY3RyKjIgKyAxXTsKKyAgaW5wdHIxID0gaW5wdXRfYnVmWzFdW2luX3Jvd19ncm91cF9jdHJdOworICBpbnB0cjIgPSBpbnB1dF9idWZbMl1baW5fcm93X2dyb3VwX2N0cl07CisgIG91dHB0cjAgPSBvdXRwdXRfYnVmWzBdOworICBvdXRwdHIxID0gb3V0cHV0X2J1ZlsxXTsKKyAgLyogTG9vcCBmb3IgZWFjaCBncm91cCBvZiBvdXRwdXQgcGl4ZWxzICovCisgIGZvciAoY29sID0gY2luZm8tPm91dHB1dF93aWR0aCA+PiAxOyBjb2wgPiAwOyBjb2wtLSkgeworICAgIC8qIERvIHRoZSBjaHJvbWEgcGFydCBvZiB0aGUgY2FsY3VsYXRpb24gKi8KKyAgICBjYiA9IEdFVEpTQU1QTEUoKmlucHRyMSsrKTsKKyAgICBjciA9IEdFVEpTQU1QTEUoKmlucHRyMisrKTsKKyAgICBjcmVkID0gQ3JydGFiW2NyXTsKKyAgICBjZ3JlZW4gPSAoaW50KSBSSUdIVF9TSElGVChDYmd0YWJbY2JdICsgQ3JndGFiW2NyXSwgU0NBTEVCSVRTKTsKKyAgICBjYmx1ZSA9IENiYnRhYltjYl07CisgICAgLyogRmV0Y2ggNCBZIHZhbHVlcyBhbmQgZW1pdCA0IHBpeGVscyAqLworICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwMCsrKTsKKyAgICBvdXRwdHIwW1JHQl9SRURdID0gICByYW5nZV9saW1pdFt5ICsgY3JlZF07CisgICAgb3V0cHRyMFtSR0JfR1JFRU5dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07CisgICAgb3V0cHRyMFtSR0JfQkxVRV0gPSAgcmFuZ2VfbGltaXRbeSArIGNibHVlXTsKKyAgICBvdXRwdHIwICs9IFJHQl9QSVhFTFNJWkU7CisgICAgeSAgPSBHRVRKU0FNUExFKCppbnB0cjAwKyspOworICAgIG91dHB0cjBbUkdCX1JFRF0gPSAgIHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsKKyAgICBvdXRwdHIwW1JHQl9HUkVFTl0gPSByYW5nZV9saW1pdFt5ICsgY2dyZWVuXTsKKyAgICBvdXRwdHIwW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOworICAgIG91dHB0cjAgKz0gUkdCX1BJWEVMU0laRTsKKyAgICB5ICA9IEdFVEpTQU1QTEUoKmlucHRyMDErKyk7CisgICAgb3V0cHRyMVtSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOworICAgIG91dHB0cjFbUkdCX0dSRUVOXSA9IHJhbmdlX2xpbWl0W3kgKyBjZ3JlZW5dOworICAgIG91dHB0cjFbUkdCX0JMVUVdID0gIHJhbmdlX2xpbWl0W3kgKyBjYmx1ZV07CisgICAgb3V0cHRyMSArPSBSR0JfUElYRUxTSVpFOworICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwMSsrKTsKKyAgICBvdXRwdHIxW1JHQl9SRURdID0gICByYW5nZV9saW1pdFt5ICsgY3JlZF07CisgICAgb3V0cHRyMVtSR0JfR1JFRU5dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07CisgICAgb3V0cHRyMVtSR0JfQkxVRV0gPSAgcmFuZ2VfbGltaXRbeSArIGNibHVlXTsKKyAgICBvdXRwdHIxICs9IFJHQl9QSVhFTFNJWkU7CisgIH0KKyAgLyogSWYgaW1hZ2Ugd2lkdGggaXMgb2RkLCBkbyB0aGUgbGFzdCBvdXRwdXQgY29sdW1uIHNlcGFyYXRlbHkgKi8KKyAgaWYgKGNpbmZvLT5vdXRwdXRfd2lkdGggJiAxKSB7CisgICAgY2IgPSBHRVRKU0FNUExFKCppbnB0cjEpOworICAgIGNyID0gR0VUSlNBTVBMRSgqaW5wdHIyKTsKKyAgICBjcmVkID0gQ3JydGFiW2NyXTsKKyAgICBjZ3JlZW4gPSAoaW50KSBSSUdIVF9TSElGVChDYmd0YWJbY2JdICsgQ3JndGFiW2NyXSwgU0NBTEVCSVRTKTsKKyAgICBjYmx1ZSA9IENiYnRhYltjYl07CisgICAgeSAgPSBHRVRKU0FNUExFKCppbnB0cjAwKTsKKyAgICBvdXRwdHIwW1JHQl9SRURdID0gICByYW5nZV9saW1pdFt5ICsgY3JlZF07CisgICAgb3V0cHRyMFtSR0JfR1JFRU5dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07CisgICAgb3V0cHRyMFtSR0JfQkxVRV0gPSAgcmFuZ2VfbGltaXRbeSArIGNibHVlXTsKKyAgICB5ICA9IEdFVEpTQU1QTEUoKmlucHRyMDEpOworICAgIG91dHB0cjFbUkdCX1JFRF0gPSAgIHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsKKyAgICBvdXRwdHIxW1JHQl9HUkVFTl0gPSByYW5nZV9saW1pdFt5ICsgY2dyZWVuXTsKKyAgICBvdXRwdHIxW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOworICB9Cit9CisKKworLyoKKyAqIE1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciBtZXJnZWQgdXBzYW1wbGluZy9jb2xvciBjb252ZXJzaW9uLgorICoKKyAqIE5COiB0aGlzIGlzIGNhbGxlZCB1bmRlciB0aGUgY29uZGl0aW9ucyBkZXRlcm1pbmVkIGJ5IHVzZV9tZXJnZWRfdXBzYW1wbGUoKQorICogaW4gamRtYXN0ZXIuYy4gIFRoYXQgcm91dGluZSBNVVNUIGNvcnJlc3BvbmQgdG8gdGhlIGFjdHVhbCBjYXBhYmlsaXRpZXMKKyAqIG9mIHRoaXMgbW9kdWxlOyBubyBzYWZldHkgY2hlY2tzIGFyZSBtYWRlIGhlcmUuCisgKi8KKworR0xPQkFMKHZvaWQpCitqaW5pdF9tZXJnZWRfdXBzYW1wbGVyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV91cHNhbXBsZV9wdHIgdXBzYW1wbGU7CisKKyAgdXBzYW1wbGUgPSAobXlfdXBzYW1wbGVfcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJU0laRU9GKG15X3Vwc2FtcGxlcikpOworICBjaW5mby0+dXBzYW1wbGUgPSAoc3RydWN0IGpwZWdfdXBzYW1wbGVyICopIHVwc2FtcGxlOworICB1cHNhbXBsZS0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX21lcmdlZF91cHNhbXBsZTsKKyAgdXBzYW1wbGUtPnB1Yi5uZWVkX2NvbnRleHRfcm93cyA9IEZBTFNFOworCisgIHVwc2FtcGxlLT5vdXRfcm93X3dpZHRoID0gY2luZm8tPm91dHB1dF93aWR0aCAqIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50czsKKworICBpZiAoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yID09IDIpIHsKKyAgICB1cHNhbXBsZS0+cHViLnVwc2FtcGxlID0gbWVyZ2VkXzJ2X3Vwc2FtcGxlOworICAgIHVwc2FtcGxlLT51cG1ldGhvZCA9IGgydjJfbWVyZ2VkX3Vwc2FtcGxlOworICAgIC8qIEFsbG9jYXRlIGEgc3BhcmUgcm93IGJ1ZmZlciAqLworICAgIHVwc2FtcGxlLT5zcGFyZV9yb3cgPSAoSlNBTVBST1cpCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX2xhcmdlKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkoc2l6ZV90KSAodXBzYW1wbGUtPm91dF9yb3dfd2lkdGggKiBTSVpFT0YoSlNBTVBMRSkpKTsKKyAgfSBlbHNlIHsKKyAgICB1cHNhbXBsZS0+cHViLnVwc2FtcGxlID0gbWVyZ2VkXzF2X3Vwc2FtcGxlOworICAgIHVwc2FtcGxlLT51cG1ldGhvZCA9IGgydjFfbWVyZ2VkX3Vwc2FtcGxlOworICAgIC8qIE5vIHNwYXJlIHJvdyBuZWVkZWQgKi8KKyAgICB1cHNhbXBsZS0+c3BhcmVfcm93ID0gTlVMTDsKKyAgfQorCisgIGJ1aWxkX3ljY19yZ2JfdGFibGUoY2luZm8pOworfQorCisjZW5kaWYgLyogVVBTQU1QTEVfTUVSR0lOR19TVVBQT1JURUQgKi8KKworI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZHBodWZmLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZHBodWZmLmMKaW5kZXggM2MxOWQwYS4uMTI4ZTQxMiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamRwaHVmZi5jCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pkcGh1ZmYuYwpAQCAtMSw2NzEgKzEsNjcxIEBACi0jaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQ0KLS8qDQotICogamRwaHVmZi5jDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NywgVGhvbWFzIEcuIExhbmUuDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4NCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuDQotICoNCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgSHVmZm1hbiBlbnRyb3B5IGRlY29kaW5nIHJvdXRpbmVzIGZvciBwcm9ncmVzc2l2ZSBKUEVHLg0KLSAqDQotICogTXVjaCBvZiB0aGUgY29tcGxleGl0eSBoZXJlIGhhcyB0byBkbyB3aXRoIHN1cHBvcnRpbmcgaW5wdXQgc3VzcGVuc2lvbi4NCi0gKiBJZiB0aGUgZGF0YSBzb3VyY2UgbW9kdWxlIGRlbWFuZHMgc3VzcGVuc2lvbiwgd2Ugd2FudCB0byBiZSBhYmxlIHRvIGJhY2sNCi0gKiB1cCB0byB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgTUNVLiAgVG8gZG8gdGhpcywgd2UgY29weSBzdGF0ZSB2YXJpYWJsZXMNCi0gKiBpbnRvIGxvY2FsIHdvcmtpbmcgc3RvcmFnZSwgYW5kIHVwZGF0ZSB0aGVtIGJhY2sgdG8gdGhlIHBlcm1hbmVudA0KLSAqIHN0b3JhZ2Ugb25seSB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiBhbiBNQ1UuDQotICovDQotDQotI2RlZmluZSBKUEVHX0lOVEVSTkFMUw0KLSNpbmNsdWRlICJqaW5jbHVkZS5oIg0KLSNpbmNsdWRlICJqcGVnbGliLmgiDQotI2luY2x1ZGUgImpkaHVmZi5oIgkJLyogRGVjbGFyYXRpb25zIHNoYXJlZCB3aXRoIGpkaHVmZi5jICovDQotDQotDQotI2lmZGVmIERfUFJPR1JFU1NJVkVfU1VQUE9SVEVEDQotDQotLyoNCi0gKiBFeHBhbmRlZCBlbnRyb3B5IGRlY29kZXIgb2JqZWN0IGZvciBwcm9ncmVzc2l2ZSBIdWZmbWFuIGRlY29kaW5nLg0KLSAqDQotICogVGhlIHNhdmFibGVfc3RhdGUgc3VicmVjb3JkIGNvbnRhaW5zIGZpZWxkcyB0aGF0IGNoYW5nZSB3aXRoaW4gYW4gTUNVLA0KLSAqIGJ1dCBtdXN0IG5vdCBiZSB1cGRhdGVkIHBlcm1hbmVudGx5IHVudGlsIHdlIGNvbXBsZXRlIHRoZSBNQ1UuDQotICovDQotDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgdW5zaWduZWQgaW50IEVPQlJVTjsJCQkvKiByZW1haW5pbmcgRU9CcyBpbiBFT0JSVU4gKi8NCi0gIGludCBsYXN0X2RjX3ZhbFtNQVhfQ09NUFNfSU5fU0NBTl07CS8qIGxhc3QgREMgY29lZiBmb3IgZWFjaCBjb21wb25lbnQgKi8NCi19IHNhdmFibGVfc3RhdGU7DQotDQotLyogVGhpcyBtYWNybyBpcyB0byB3b3JrIGFyb3VuZCBjb21waWxlcnMgd2l0aCBtaXNzaW5nIG9yIGJyb2tlbg0KLSAqIHN0cnVjdHVyZSBhc3NpZ25tZW50LiAgWW91J2xsIG5lZWQgdG8gZml4IHRoaXMgY29kZSBpZiB5b3UgaGF2ZQ0KLSAqIHN1Y2ggYSBjb21waWxlciBhbmQgeW91IGNoYW5nZSBNQVhfQ09NUFNfSU5fU0NBTi4NCi0gKi8NCi0NCi0jaWZuZGVmIE5PX1NUUlVDVF9BU1NJR04NCi0jZGVmaW5lIEFTU0lHTl9TVEFURShkZXN0LHNyYykgICgoZGVzdCkgPSAoc3JjKSkNCi0jZWxzZQ0KLSNpZiBNQVhfQ09NUFNfSU5fU0NBTiA9PSA0DQotI2RlZmluZSBBU1NJR05fU1RBVEUoZGVzdCxzcmMpICBcDQotCSgoZGVzdCkuRU9CUlVOID0gKHNyYykuRU9CUlVOLCBcDQotCSAoZGVzdCkubGFzdF9kY192YWxbMF0gPSAoc3JjKS5sYXN0X2RjX3ZhbFswXSwgXA0KLQkgKGRlc3QpLmxhc3RfZGNfdmFsWzFdID0gKHNyYykubGFzdF9kY192YWxbMV0sIFwNCi0JIChkZXN0KS5sYXN0X2RjX3ZhbFsyXSA9IChzcmMpLmxhc3RfZGNfdmFsWzJdLCBcDQotCSAoZGVzdCkubGFzdF9kY192YWxbM10gPSAoc3JjKS5sYXN0X2RjX3ZhbFszXSkNCi0jZW5kaWYNCi0jZW5kaWYNCi0NCi0NCi10eXBlZGVmIHN0cnVjdCB7DQotICBzdHJ1Y3QganBlZ19lbnRyb3B5X2RlY29kZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovDQotDQotICAvKiBUaGVzZSBmaWVsZHMgYXJlIGxvYWRlZCBpbnRvIGxvY2FsIHZhcmlhYmxlcyBhdCBzdGFydCBvZiBlYWNoIE1DVS4NCi0gICAqIEluIGNhc2Ugb2Ygc3VzcGVuc2lvbiwgd2UgZXhpdCBXSVRIT1VUIHVwZGF0aW5nIHRoZW0uDQotICAgKi8NCi0gIGJpdHJlYWRfcGVybV9zdGF0ZSBiaXRzdGF0ZTsJLyogQml0IGJ1ZmZlciBhdCBzdGFydCBvZiBNQ1UgKi8NCi0gIHNhdmFibGVfc3RhdGUgc2F2ZWQ7CQkvKiBPdGhlciBzdGF0ZSBhdCBzdGFydCBvZiBNQ1UgKi8NCi0NCi0gIC8qIFRoZXNlIGZpZWxkcyBhcmUgTk9UIGxvYWRlZCBpbnRvIGxvY2FsIHdvcmtpbmcgc3RhdGUuICovDQotICB1bnNpZ25lZCBpbnQgcmVzdGFydHNfdG9fZ287CS8qIE1DVXMgbGVmdCBpbiB0aGlzIHJlc3RhcnQgaW50ZXJ2YWwgKi8NCi0NCi0gIC8qIFBvaW50ZXJzIHRvIGRlcml2ZWQgdGFibGVzICh0aGVzZSB3b3Jrc3BhY2VzIGhhdmUgaW1hZ2UgbGlmZXNwYW4pICovDQotICBkX2Rlcml2ZWRfdGJsICogZGVyaXZlZF90YmxzW05VTV9IVUZGX1RCTFNdOw0KLQ0KLSAgZF9kZXJpdmVkX3RibCAqIGFjX2Rlcml2ZWRfdGJsOyAvKiBhY3RpdmUgdGFibGUgZHVyaW5nIGFuIEFDIHNjYW4gKi8NCi19IHBodWZmX2VudHJvcHlfZGVjb2RlcjsNCi0NCi10eXBlZGVmIHBodWZmX2VudHJvcHlfZGVjb2RlciAqIHBodWZmX2VudHJvcHlfcHRyOw0KLQ0KLS8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovDQotTUVUSE9EREVGKGJvb2xlYW4pIGRlY29kZV9tY3VfRENfZmlyc3QgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQkJICAgIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsNCi1NRVRIT0RERUYoYm9vbGVhbikgZGVjb2RlX21jdV9BQ19maXJzdCBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sDQotCQkJCQkgICAgSkJMT0NLUk9XICpNQ1VfZGF0YSkpOw0KLU1FVEhPRERFRihib29sZWFuKSBkZWNvZGVfbWN1X0RDX3JlZmluZSBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sDQotCQkJCQkgICAgIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsNCi1NRVRIT0RERUYoYm9vbGVhbikgZGVjb2RlX21jdV9BQ19yZWZpbmUgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQkJICAgICBKQkxPQ0tST1cgKk1DVV9kYXRhKSk7DQotDQotDQotLyoNCi0gKiBJbml0aWFsaXplIGZvciBhIEh1ZmZtYW4tY29tcHJlc3NlZCBzY2FuLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXN0YXJ0X3Bhc3NfcGh1ZmZfZGVjb2RlciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsNCi0gIGJvb2xlYW4gaXNfRENfYmFuZCwgYmFkOw0KLSAgaW50IGNpLCBjb2VmaSwgdGJsOw0KLSAgaW50ICpjb2VmX2JpdF9wdHI7DQotICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cjsNCi0NCi0gIGlzX0RDX2JhbmQgPSAoY2luZm8tPlNzID09IDApOw0KLQ0KLSAgLyogVmFsaWRhdGUgc2NhbiBwYXJhbWV0ZXJzICovDQotICBiYWQgPSBGQUxTRTsNCi0gIGlmIChpc19EQ19iYW5kKSB7DQotICAgIGlmIChjaW5mby0+U2UgIT0gMCkNCi0gICAgICBiYWQgPSBUUlVFOw0KLSAgfSBlbHNlIHsNCi0gICAgLyogbmVlZCBub3QgY2hlY2sgU3MvU2UgPCAwIHNpbmNlIHRoZXkgY2FtZSBmcm9tIHVuc2lnbmVkIGJ5dGVzICovDQotICAgIGlmIChjaW5mby0+U3MgPiBjaW5mby0+U2UgfHwgY2luZm8tPlNlID49IERDVFNJWkUyKQ0KLSAgICAgIGJhZCA9IFRSVUU7DQotICAgIC8qIEFDIHNjYW5zIG1heSBoYXZlIG9ubHkgb25lIGNvbXBvbmVudCAqLw0KLSAgICBpZiAoY2luZm8tPmNvbXBzX2luX3NjYW4gIT0gMSkNCi0gICAgICBiYWQgPSBUUlVFOw0KLSAgfQ0KLSAgaWYgKGNpbmZvLT5BaCAhPSAwKSB7DQotICAgIC8qIFN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbiByZWZpbmVtZW50IHNjYW46IG11c3QgaGF2ZSBBbCA9IEFoLTEuICovDQotICAgIGlmIChjaW5mby0+QWwgIT0gY2luZm8tPkFoLTEpDQotICAgICAgYmFkID0gVFJVRTsNCi0gIH0NCi0gIGlmIChjaW5mby0+QWwgPiAxMykJCS8qIG5lZWQgbm90IGNoZWNrIGZvciA8IDAgKi8NCi0gICAgYmFkID0gVFJVRTsNCi0gIC8qIEFyZ3VhYmx5IHRoZSBtYXhpbXVtIEFsIHZhbHVlIHNob3VsZCBiZSBsZXNzIHRoYW4gMTMgZm9yIDgtYml0IHByZWNpc2lvbiwNCi0gICAqIGJ1dCB0aGUgc3BlYyBkb2Vzbid0IHNheSBzbywgYW5kIHdlIHRyeSB0byBiZSBsaWJlcmFsIGFib3V0IHdoYXQgd2UNCi0gICAqIGFjY2VwdC4gIE5vdGU6IGxhcmdlIEFsIHZhbHVlcyBjb3VsZCByZXN1bHQgaW4gb3V0LW9mLXJhbmdlIERDDQotICAgKiBjb2VmZmljaWVudHMgZHVyaW5nIGVhcmx5IHNjYW5zLCBsZWFkaW5nIHRvIGJpemFycmUgZGlzcGxheXMgZHVlIHRvDQotICAgKiBvdmVyZmxvd3MgaW4gdGhlIElEQ1QgbWF0aC4gIEJ1dCB3ZSB3b24ndCBjcmFzaC4NCi0gICAqLw0KLSAgaWYgKGJhZCkNCi0gICAgRVJSRVhJVDQoY2luZm8sIEpFUlJfQkFEX1BST0dSRVNTSU9OLA0KLQkgICAgIGNpbmZvLT5TcywgY2luZm8tPlNlLCBjaW5mby0+QWgsIGNpbmZvLT5BbCk7DQotICAvKiBVcGRhdGUgcHJvZ3Jlc3Npb24gc3RhdHVzLCBhbmQgdmVyaWZ5IHRoYXQgc2NhbiBvcmRlciBpcyBsZWdhbC4NCi0gICAqIE5vdGUgdGhhdCBpbnRlci1zY2FuIGluY29uc2lzdGVuY2llcyBhcmUgdHJlYXRlZCBhcyB3YXJuaW5ncw0KLSAgICogbm90IGZhdGFsIGVycm9ycyAuLi4gbm90IGNsZWFyIGlmIHRoaXMgaXMgcmlnaHQgd2F5IHRvIGJlaGF2ZS4NCi0gICAqLw0KLSAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspIHsNCi0gICAgaW50IGNpbmRleCA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXS0+Y29tcG9uZW50X2luZGV4Ow0KLSAgICBjb2VmX2JpdF9wdHIgPSAmIGNpbmZvLT5jb2VmX2JpdHNbY2luZGV4XVswXTsNCi0gICAgaWYgKCFpc19EQ19iYW5kICYmIGNvZWZfYml0X3B0clswXSA8IDApIC8qIEFDIHdpdGhvdXQgcHJpb3IgREMgc2NhbiAqLw0KLSAgICAgIFdBUk5NUzIoY2luZm8sIEpXUk5fQk9HVVNfUFJPR1JFU1NJT04sIGNpbmRleCwgMCk7DQotICAgIGZvciAoY29lZmkgPSBjaW5mby0+U3M7IGNvZWZpIDw9IGNpbmZvLT5TZTsgY29lZmkrKykgew0KLSAgICAgIGludCBleHBlY3RlZCA9IChjb2VmX2JpdF9wdHJbY29lZmldIDwgMCkgPyAwIDogY29lZl9iaXRfcHRyW2NvZWZpXTsNCi0gICAgICBpZiAoY2luZm8tPkFoICE9IGV4cGVjdGVkKQ0KLQlXQVJOTVMyKGNpbmZvLCBKV1JOX0JPR1VTX1BST0dSRVNTSU9OLCBjaW5kZXgsIGNvZWZpKTsNCi0gICAgICBjb2VmX2JpdF9wdHJbY29lZmldID0gY2luZm8tPkFsOw0KLSAgICB9DQotICB9DQotDQotICAvKiBTZWxlY3QgTUNVIGRlY29kaW5nIHJvdXRpbmUgKi8NCi0gIGlmIChjaW5mby0+QWggPT0gMCkgew0KLSAgICBpZiAoaXNfRENfYmFuZCkNCi0gICAgICBlbnRyb3B5LT5wdWIuZGVjb2RlX21jdSA9IGRlY29kZV9tY3VfRENfZmlyc3Q7DQotICAgIGVsc2UNCi0gICAgICBlbnRyb3B5LT5wdWIuZGVjb2RlX21jdSA9IGRlY29kZV9tY3VfQUNfZmlyc3Q7DQotICB9IGVsc2Ugew0KLSAgICBpZiAoaXNfRENfYmFuZCkNCi0gICAgICBlbnRyb3B5LT5wdWIuZGVjb2RlX21jdSA9IGRlY29kZV9tY3VfRENfcmVmaW5lOw0KLSAgICBlbHNlDQotICAgICAgZW50cm9weS0+cHViLmRlY29kZV9tY3UgPSBkZWNvZGVfbWN1X0FDX3JlZmluZTsNCi0gIH0NCi0NCi0gIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7DQotICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07DQotICAgIC8qIE1ha2Ugc3VyZSByZXF1ZXN0ZWQgdGFibGVzIGFyZSBwcmVzZW50LCBhbmQgY29tcHV0ZSBkZXJpdmVkIHRhYmxlcy4NCi0gICAgICogV2UgbWF5IGJ1aWxkIHNhbWUgZGVyaXZlZCB0YWJsZSBtb3JlIHRoYW4gb25jZSwgYnV0IGl0J3Mgbm90IGV4cGVuc2l2ZS4NCi0gICAgICovDQotICAgIGlmIChpc19EQ19iYW5kKSB7DQotICAgICAgaWYgKGNpbmZvLT5BaCA9PSAwKSB7CS8qIERDIHJlZmluZW1lbnQgbmVlZHMgbm8gdGFibGUgKi8NCi0JdGJsID0gY29tcHB0ci0+ZGNfdGJsX25vOw0KLQlqcGVnX21ha2VfZF9kZXJpdmVkX3RibChjaW5mbywgVFJVRSwgdGJsLA0KLQkJCQkmIGVudHJvcHktPmRlcml2ZWRfdGJsc1t0YmxdKTsNCi0gICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgdGJsID0gY29tcHB0ci0+YWNfdGJsX25vOw0KLSAgICAgIGpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsKGNpbmZvLCBGQUxTRSwgdGJsLA0KLQkJCSAgICAgICYgZW50cm9weS0+ZGVyaXZlZF90YmxzW3RibF0pOw0KLSAgICAgIC8qIHJlbWVtYmVyIHRoZSBzaW5nbGUgYWN0aXZlIHRhYmxlICovDQotICAgICAgZW50cm9weS0+YWNfZGVyaXZlZF90YmwgPSBlbnRyb3B5LT5kZXJpdmVkX3RibHNbdGJsXTsNCi0gICAgfQ0KLSAgICAvKiBJbml0aWFsaXplIERDIHByZWRpY3Rpb25zIHRvIDAgKi8NCi0gICAgZW50cm9weS0+c2F2ZWQubGFzdF9kY192YWxbY2ldID0gMDsNCi0gIH0NCi0NCi0gIC8qIEluaXRpYWxpemUgYml0cmVhZCBzdGF0ZSB2YXJpYWJsZXMgKi8NCi0gIGVudHJvcHktPmJpdHN0YXRlLmJpdHNfbGVmdCA9IDA7DQotICBlbnRyb3B5LT5iaXRzdGF0ZS5nZXRfYnVmZmVyID0gMDsgLyogdW5uZWNlc3NhcnksIGJ1dCBrZWVwcyBQdXJpZnkgcXVpZXQgKi8NCi0gIGVudHJvcHktPnB1Yi5pbnN1ZmZpY2llbnRfZGF0YSA9IEZBTFNFOw0KLQ0KLSAgLyogSW5pdGlhbGl6ZSBwcml2YXRlIHN0YXRlIHZhcmlhYmxlcyAqLw0KLSAgZW50cm9weS0+c2F2ZWQuRU9CUlVOID0gMDsNCi0NCi0gIC8qIEluaXRpYWxpemUgcmVzdGFydCBjb3VudGVyICovDQotICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOw0KLX0NCi0NCi0NCi0vKg0KLSAqIEZpZ3VyZSBGLjEyOiBleHRlbmQgc2lnbiBiaXQuDQotICogT24gc29tZSBtYWNoaW5lcywgYSBzaGlmdCBhbmQgYWRkIHdpbGwgYmUgZmFzdGVyIHRoYW4gYSB0YWJsZSBsb29rdXAuDQotICovDQotDQotI2lmZGVmIEFWT0lEX1RBQkxFUw0KLQ0KLSNkZWZpbmUgSFVGRl9FWFRFTkQoeCxzKSAgKCh4KSA8ICgxPDwoKHMpLTEpKSA/ICh4KSArICgoKC0xKTw8KHMpKSArIDEpIDogKHgpKQ0KLQ0KLSNlbHNlDQotDQotI2RlZmluZSBIVUZGX0VYVEVORCh4LHMpICAoKHgpIDwgZXh0ZW5kX3Rlc3Rbc10gPyAoeCkgKyBleHRlbmRfb2Zmc2V0W3NdIDogKHgpKQ0KLQ0KLXN0YXRpYyBjb25zdCBpbnQgZXh0ZW5kX3Rlc3RbMTZdID0gICAvKiBlbnRyeSBuIGlzIDIqKihuLTEpICovDQotICB7IDAsIDB4MDAwMSwgMHgwMDAyLCAweDAwMDQsIDB4MDAwOCwgMHgwMDEwLCAweDAwMjAsIDB4MDA0MCwgMHgwMDgwLA0KLSAgICAweDAxMDAsIDB4MDIwMCwgMHgwNDAwLCAweDA4MDAsIDB4MTAwMCwgMHgyMDAwLCAweDQwMDAgfTsNCi0NCi1zdGF0aWMgY29uc3QgaW50IGV4dGVuZF9vZmZzZXRbMTZdID0gLyogZW50cnkgbiBpcyAoLTEgPDwgbikgKyAxICovDQotICB7IDAsICgoLTEpPDwxKSArIDEsICgoLTEpPDwyKSArIDEsICgoLTEpPDwzKSArIDEsICgoLTEpPDw0KSArIDEsDQotICAgICgoLTEpPDw1KSArIDEsICgoLTEpPDw2KSArIDEsICgoLTEpPDw3KSArIDEsICgoLTEpPDw4KSArIDEsDQotICAgICgoLTEpPDw5KSArIDEsICgoLTEpPDwxMCkgKyAxLCAoKC0xKTw8MTEpICsgMSwgKCgtMSk8PDEyKSArIDEsDQotICAgICgoLTEpPDwxMykgKyAxLCAoKC0xKTw8MTQpICsgMSwgKCgtMSk8PDE1KSArIDEgfTsNCi0NCi0jZW5kaWYgLyogQVZPSURfVEFCTEVTICovDQotDQotDQotLyoNCi0gKiBDaGVjayBmb3IgYSByZXN0YXJ0IG1hcmtlciAmIHJlc3luY2hyb25pemUgZGVjb2Rlci4NCi0gKiBSZXR1cm5zIEZBTFNFIGlmIG11c3Qgc3VzcGVuZC4NCi0gKi8NCi0NCi1MT0NBTChib29sZWFuKQ0KLXByb2Nlc3NfcmVzdGFydCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsNCi0gIGludCBjaTsNCi0NCi0gIC8qIFRocm93IGF3YXkgYW55IHVudXNlZCBiaXRzIHJlbWFpbmluZyBpbiBiaXQgYnVmZmVyOyAqLw0KLSAgLyogaW5jbHVkZSBhbnkgZnVsbCBieXRlcyBpbiBuZXh0X21hcmtlcidzIGNvdW50IG9mIGRpc2NhcmRlZCBieXRlcyAqLw0KLSAgY2luZm8tPm1hcmtlci0+ZGlzY2FyZGVkX2J5dGVzICs9IGVudHJvcHktPmJpdHN0YXRlLmJpdHNfbGVmdCAvIDg7DQotICBlbnRyb3B5LT5iaXRzdGF0ZS5iaXRzX2xlZnQgPSAwOw0KLQ0KLSAgLyogQWR2YW5jZSBwYXN0IHRoZSBSU1RuIG1hcmtlciAqLw0KLSAgaWYgKCEgKCpjaW5mby0+bWFya2VyLT5yZWFkX3Jlc3RhcnRfbWFya2VyKSAoY2luZm8pKQ0KLSAgICByZXR1cm4gRkFMU0U7DQotDQotICAvKiBSZS1pbml0aWFsaXplIERDIHByZWRpY3Rpb25zIHRvIDAgKi8NCi0gIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKQ0KLSAgICBlbnRyb3B5LT5zYXZlZC5sYXN0X2RjX3ZhbFtjaV0gPSAwOw0KLSAgLyogUmUtaW5pdCBFT0IgcnVuIGNvdW50LCB0b28gKi8NCi0gIGVudHJvcHktPnNhdmVkLkVPQlJVTiA9IDA7DQotDQotICAvKiBSZXNldCByZXN0YXJ0IGNvdW50ZXIgKi8NCi0gIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7DQotDQotICAvKiBSZXNldCBvdXQtb2YtZGF0YSBmbGFnLCB1bmxlc3MgcmVhZF9yZXN0YXJ0X21hcmtlciBsZWZ0IHVzIHNtYWNrIHVwDQotICAgKiBhZ2FpbnN0IGEgbWFya2VyLiAgSW4gdGhhdCBjYXNlIHdlIHdpbGwgZW5kIHVwIHRyZWF0aW5nIHRoZSBuZXh0IGRhdGENCi0gICAqIHNlZ21lbnQgYXMgZW1wdHksIGFuZCB3ZSBjYW4gYXZvaWQgcHJvZHVjaW5nIGJvZ3VzIG91dHB1dCBwaXhlbHMgYnkNCi0gICAqIGxlYXZpbmcgdGhlIGZsYWcgc2V0Lg0KLSAgICovDQotICBpZiAoY2luZm8tPnVucmVhZF9tYXJrZXIgPT0gMCkNCi0gICAgZW50cm9weS0+cHViLmluc3VmZmljaWVudF9kYXRhID0gRkFMU0U7DQotDQotICByZXR1cm4gVFJVRTsNCi19DQotDQotDQotLyoNCi0gKiBIdWZmbWFuIE1DVSBkZWNvZGluZy4NCi0gKiBFYWNoIG9mIHRoZXNlIHJvdXRpbmVzIGRlY29kZXMgYW5kIHJldHVybnMgb25lIE1DVSdzIHdvcnRoIG9mDQotICogSHVmZm1hbi1jb21wcmVzc2VkIGNvZWZmaWNpZW50cy4gDQotICogVGhlIGNvZWZmaWNpZW50cyBhcmUgcmVvcmRlcmVkIGZyb20gemlnemFnIG9yZGVyIGludG8gbmF0dXJhbCBhcnJheSBvcmRlciwNCi0gKiBidXQgYXJlIG5vdCBkZXF1YW50aXplZC4NCi0gKg0KLSAqIFRoZSBpJ3RoIGJsb2NrIG9mIHRoZSBNQ1UgaXMgc3RvcmVkIGludG8gdGhlIGJsb2NrIHBvaW50ZWQgdG8gYnkNCi0gKiBNQ1VfZGF0YVtpXS4gIFdFIEFTU1VNRSBUSElTIEFSRUEgSVMgSU5JVElBTExZIFpFUk9FRCBCWSBUSEUgQ0FMTEVSLg0KLSAqDQotICogV2UgcmV0dXJuIEZBTFNFIGlmIGRhdGEgc291cmNlIHJlcXVlc3RlZCBzdXNwZW5zaW9uLiAgSW4gdGhhdCBjYXNlIG5vDQotICogY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSB0byBwZXJtYW5lbnQgc3RhdGUuICAoRXhjZXB0aW9uOiBzb21lIG91dHB1dA0KLSAqIGNvZWZmaWNpZW50cyBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gYXNzaWduZWQuICBUaGlzIGlzIGhhcm1sZXNzIGZvcg0KLSAqIHNwZWN0cmFsIHNlbGVjdGlvbiwgc2luY2Ugd2UnbGwganVzdCByZS1hc3NpZ24gdGhlbSBvbiB0aGUgbmV4dCBjYWxsLg0KLSAqIFN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbiBBQyByZWZpbmVtZW50IGhhcyB0byBiZSBtb3JlIGNhcmVmdWwsIGhvd2V2ZXIuKQ0KLSAqLw0KLQ0KLS8qDQotICogTUNVIGRlY29kaW5nIGZvciBEQyBpbml0aWFsIHNjYW4gKGVpdGhlciBzcGVjdHJhbCBzZWxlY3Rpb24sDQotICogb3IgZmlyc3QgcGFzcyBvZiBzdWNjZXNzaXZlIGFwcHJveGltYXRpb24pLg0KLSAqLw0KLQ0KLU1FVEhPRERFRihib29sZWFuKQ0KLWRlY29kZV9tY3VfRENfZmlyc3QgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpDQoteyAgIA0KLSAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7DQotICBpbnQgQWwgPSBjaW5mby0+QWw7DQotICByZWdpc3RlciBpbnQgcywgcjsNCi0gIGludCBibGtuLCBjaTsNCi0gIEpCTE9DS1JPVyBibG9jazsNCi0gIEJJVFJFQURfU1RBVEVfVkFSUzsNCi0gIHNhdmFibGVfc3RhdGUgc3RhdGU7DQotICBkX2Rlcml2ZWRfdGJsICogdGJsOw0KLSAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7DQotDQotICAvKiBQcm9jZXNzIHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZDsgbWF5IGhhdmUgdG8gc3VzcGVuZCAqLw0KLSAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7DQotICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQ0KLSAgICAgIGlmICghIHByb2Nlc3NfcmVzdGFydChjaW5mbykpDQotCXJldHVybiBGQUxTRTsNCi0gIH0NCi0NCi0gIC8qIElmIHdlJ3ZlIHJ1biBvdXQgb2YgZGF0YSwganVzdCBsZWF2ZSB0aGUgTUNVIHNldCB0byB6ZXJvZXMuDQotICAgKiBUaGlzIHdheSwgd2UgcmV0dXJuIHVuaWZvcm0gZ3JheSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgc2VnbWVudC4NCi0gICAqLw0KLSAgaWYgKCEgZW50cm9weS0+cHViLmluc3VmZmljaWVudF9kYXRhKSB7DQotDQotICAgIC8qIExvYWQgdXAgd29ya2luZyBzdGF0ZSAqLw0KLSAgICBCSVRSRUFEX0xPQURfU1RBVEUoY2luZm8sZW50cm9weS0+Yml0c3RhdGUpOw0KLSAgICBBU1NJR05fU1RBVEUoc3RhdGUsIGVudHJvcHktPnNhdmVkKTsNCi0NCi0gICAgLyogT3V0ZXIgbG9vcCBoYW5kbGVzIGVhY2ggYmxvY2sgaW4gdGhlIE1DVSAqLw0KLQ0KLSAgICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgew0KLSAgICAgIGJsb2NrID0gTUNVX2RhdGFbYmxrbl07DQotICAgICAgY2kgPSBjaW5mby0+TUNVX21lbWJlcnNoaXBbYmxrbl07DQotICAgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsNCi0gICAgICB0YmwgPSBlbnRyb3B5LT5kZXJpdmVkX3RibHNbY29tcHB0ci0+ZGNfdGJsX25vXTsNCi0NCi0gICAgICAvKiBEZWNvZGUgYSBzaW5nbGUgYmxvY2sncyB3b3J0aCBvZiBjb2VmZmljaWVudHMgKi8NCi0NCi0gICAgICAvKiBTZWN0aW9uIEYuMi4yLjE6IGRlY29kZSB0aGUgREMgY29lZmZpY2llbnQgZGlmZmVyZW5jZSAqLw0KLSAgICAgIEhVRkZfREVDT0RFKHMsIGJyX3N0YXRlLCB0YmwsIHJldHVybiBGQUxTRSwgbGFiZWwxKTsNCi0gICAgICBpZiAocykgew0KLQlDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCBzLCByZXR1cm4gRkFMU0UpOw0KLQlyID0gR0VUX0JJVFMocyk7DQotCXMgPSBIVUZGX0VYVEVORChyLCBzKTsNCi0gICAgICB9DQotDQotICAgICAgLyogQ29udmVydCBEQyBkaWZmZXJlbmNlIHRvIGFjdHVhbCB2YWx1ZSwgdXBkYXRlIGxhc3RfZGNfdmFsICovDQotICAgICAgcyArPSBzdGF0ZS5sYXN0X2RjX3ZhbFtjaV07DQotICAgICAgc3RhdGUubGFzdF9kY192YWxbY2ldID0gczsNCi0gICAgICAvKiBTY2FsZSBhbmQgb3V0cHV0IHRoZSBjb2VmZmljaWVudCAoYXNzdW1lcyBqcGVnX25hdHVyYWxfb3JkZXJbMF09MCkgKi8NCi0gICAgICAoKmJsb2NrKVswXSA9IChKQ09FRikgKHMgPDwgQWwpOw0KLSAgICB9DQotDQotICAgIC8qIENvbXBsZXRlZCBNQ1UsIHNvIHVwZGF0ZSBzdGF0ZSAqLw0KLSAgICBCSVRSRUFEX1NBVkVfU1RBVEUoY2luZm8sZW50cm9weS0+Yml0c3RhdGUpOw0KLSAgICBBU1NJR05fU1RBVEUoZW50cm9weS0+c2F2ZWQsIHN0YXRlKTsNCi0gIH0NCi0NCi0gIC8qIEFjY291bnQgZm9yIHJlc3RhcnQgaW50ZXJ2YWwgKG5vLW9wIGlmIG5vdCB1c2luZyByZXN0YXJ0cykgKi8NCi0gIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07DQotDQotICByZXR1cm4gVFJVRTsNCi19DQotDQotDQotLyoNCi0gKiBNQ1UgZGVjb2RpbmcgZm9yIEFDIGluaXRpYWwgc2NhbiAoZWl0aGVyIHNwZWN0cmFsIHNlbGVjdGlvbiwNCi0gKiBvciBmaXJzdCBwYXNzIG9mIHN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbikuDQotICovDQotDQotTUVUSE9EREVGKGJvb2xlYW4pDQotZGVjb2RlX21jdV9BQ19maXJzdCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkNCi17ICAgDQotICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsNCi0gIGludCBTZSA9IGNpbmZvLT5TZTsNCi0gIGludCBBbCA9IGNpbmZvLT5BbDsNCi0gIHJlZ2lzdGVyIGludCBzLCBrLCByOw0KLSAgdW5zaWduZWQgaW50IEVPQlJVTjsNCi0gIEpCTE9DS1JPVyBibG9jazsNCi0gIEJJVFJFQURfU1RBVEVfVkFSUzsNCi0gIGRfZGVyaXZlZF90YmwgKiB0Ymw7DQotDQotICAvKiBQcm9jZXNzIHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZDsgbWF5IGhhdmUgdG8gc3VzcGVuZCAqLw0KLSAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7DQotICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQ0KLSAgICAgIGlmICghIHByb2Nlc3NfcmVzdGFydChjaW5mbykpDQotCXJldHVybiBGQUxTRTsNCi0gIH0NCi0NCi0gIC8qIElmIHdlJ3ZlIHJ1biBvdXQgb2YgZGF0YSwganVzdCBsZWF2ZSB0aGUgTUNVIHNldCB0byB6ZXJvZXMuDQotICAgKiBUaGlzIHdheSwgd2UgcmV0dXJuIHVuaWZvcm0gZ3JheSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgc2VnbWVudC4NCi0gICAqLw0KLSAgaWYgKCEgZW50cm9weS0+cHViLmluc3VmZmljaWVudF9kYXRhKSB7DQotDQotICAgIC8qIExvYWQgdXAgd29ya2luZyBzdGF0ZS4NCi0gICAgICogV2UgY2FuIGF2b2lkIGxvYWRpbmcvc2F2aW5nIGJpdHJlYWQgc3RhdGUgaWYgaW4gYW4gRU9CIHJ1bi4NCi0gICAgICovDQotICAgIEVPQlJVTiA9IGVudHJvcHktPnNhdmVkLkVPQlJVTjsJLyogb25seSBwYXJ0IG9mIHNhdmVkIHN0YXRlIHdlIG5lZWQgKi8NCi0NCi0gICAgLyogVGhlcmUgaXMgYWx3YXlzIG9ubHkgb25lIGJsb2NrIHBlciBNQ1UgKi8NCi0NCi0gICAgaWYgKEVPQlJVTiA+IDApCQkvKiBpZiBpdCdzIGEgYmFuZCBvZiB6ZXJvZXMuLi4gKi8NCi0gICAgICBFT0JSVU4tLTsJCQkvKiAuLi5wcm9jZXNzIGl0IG5vdyAod2UgZG8gbm90aGluZykgKi8NCi0gICAgZWxzZSB7DQotICAgICAgQklUUkVBRF9MT0FEX1NUQVRFKGNpbmZvLGVudHJvcHktPmJpdHN0YXRlKTsNCi0gICAgICBibG9jayA9IE1DVV9kYXRhWzBdOw0KLSAgICAgIHRibCA9IGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsOw0KLQ0KLSAgICAgIGZvciAoayA9IGNpbmZvLT5TczsgayA8PSBTZTsgaysrKSB7DQotCUhVRkZfREVDT0RFKHMsIGJyX3N0YXRlLCB0YmwsIHJldHVybiBGQUxTRSwgbGFiZWwyKTsNCi0JciA9IHMgPj4gNDsNCi0JcyAmPSAxNTsNCi0JaWYgKHMpIHsNCi0JICBrICs9IHI7DQotCSAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgcywgcmV0dXJuIEZBTFNFKTsNCi0JICByID0gR0VUX0JJVFMocyk7DQotCSAgcyA9IEhVRkZfRVhURU5EKHIsIHMpOw0KLQkgIC8qIFNjYWxlIGFuZCBvdXRwdXQgY29lZmZpY2llbnQgaW4gbmF0dXJhbCAoZGV6aWd6YWdnZWQpIG9yZGVyICovDQotCSAgKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tdXSA9IChKQ09FRikgKHMgPDwgQWwpOw0KLQl9IGVsc2Ugew0KLQkgIGlmIChyID09IDE1KSB7CS8qIFpSTCAqLw0KLQkgICAgayArPSAxNTsJCS8qIHNraXAgMTUgemVyb2VzIGluIGJhbmQgKi8NCi0JICB9IGVsc2UgewkJLyogRU9CciwgcnVuIGxlbmd0aCBpcyAyXnIgKyBhcHBlbmRlZCBiaXRzICovDQotCSAgICBFT0JSVU4gPSAxIDw8IHI7DQotCSAgICBpZiAocikgewkJLyogRU9CciwgciA+IDAgKi8NCi0JICAgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgciwgcmV0dXJuIEZBTFNFKTsNCi0JICAgICAgciA9IEdFVF9CSVRTKHIpOw0KLQkgICAgICBFT0JSVU4gKz0gcjsNCi0JICAgIH0NCi0JICAgIEVPQlJVTi0tOwkJLyogdGhpcyBiYW5kIGlzIHByb2Nlc3NlZCBhdCB0aGlzIG1vbWVudCAqLw0KLQkgICAgYnJlYWs7CQkvKiBmb3JjZSBlbmQtb2YtYmFuZCAqLw0KLQkgIH0NCi0JfQ0KLSAgICAgIH0NCi0NCi0gICAgICBCSVRSRUFEX1NBVkVfU1RBVEUoY2luZm8sZW50cm9weS0+Yml0c3RhdGUpOw0KLSAgICB9DQotDQotICAgIC8qIENvbXBsZXRlZCBNQ1UsIHNvIHVwZGF0ZSBzdGF0ZSAqLw0KLSAgICBlbnRyb3B5LT5zYXZlZC5FT0JSVU4gPSBFT0JSVU47CS8qIG9ubHkgcGFydCBvZiBzYXZlZCBzdGF0ZSB3ZSBuZWVkICovDQotICB9DQotDQotICAvKiBBY2NvdW50IGZvciByZXN0YXJ0IGludGVydmFsIChuby1vcCBpZiBub3QgdXNpbmcgcmVzdGFydHMpICovDQotICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOw0KLQ0KLSAgcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLQ0KLS8qDQotICogTUNVIGRlY29kaW5nIGZvciBEQyBzdWNjZXNzaXZlIGFwcHJveGltYXRpb24gcmVmaW5lbWVudCBzY2FuLg0KLSAqIE5vdGU6IHdlIGFzc3VtZSBzdWNoIHNjYW5zIGNhbiBiZSBtdWx0aS1jb21wb25lbnQsIGFsdGhvdWdoIHRoZSBzcGVjDQotICogaXMgbm90IHZlcnkgY2xlYXIgb24gdGhlIHBvaW50Lg0KLSAqLw0KLQ0KLU1FVEhPRERFRihib29sZWFuKQ0KLWRlY29kZV9tY3VfRENfcmVmaW5lIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQ0KLXsgICANCi0gIHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAocGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5Ow0KLSAgaW50IHAxID0gMSA8PCBjaW5mby0+QWw7CS8qIDEgaW4gdGhlIGJpdCBwb3NpdGlvbiBiZWluZyBjb2RlZCAqLw0KLSAgaW50IGJsa247DQotICBKQkxPQ0tST1cgYmxvY2s7DQotICBCSVRSRUFEX1NUQVRFX1ZBUlM7DQotDQotICAvKiBQcm9jZXNzIHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZDsgbWF5IGhhdmUgdG8gc3VzcGVuZCAqLw0KLSAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7DQotICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQ0KLSAgICAgIGlmICghIHByb2Nlc3NfcmVzdGFydChjaW5mbykpDQotCXJldHVybiBGQUxTRTsNCi0gIH0NCi0NCi0gIC8qIE5vdCB3b3J0aCB0aGUgY3ljbGVzIHRvIGNoZWNrIGluc3VmZmljaWVudF9kYXRhIGhlcmUsDQotICAgKiBzaW5jZSB3ZSB3aWxsIG5vdCBjaGFuZ2UgdGhlIGRhdGEgYW55d2F5IGlmIHdlIHJlYWQgemVyb2VzLg0KLSAgICovDQotDQotICAvKiBMb2FkIHVwIHdvcmtpbmcgc3RhdGUgKi8NCi0gIEJJVFJFQURfTE9BRF9TVEFURShjaW5mbyxlbnRyb3B5LT5iaXRzdGF0ZSk7DQotDQotICAvKiBPdXRlciBsb29wIGhhbmRsZXMgZWFjaCBibG9jayBpbiB0aGUgTUNVICovDQotDQotICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgew0KLSAgICBibG9jayA9IE1DVV9kYXRhW2Jsa25dOw0KLQ0KLSAgICAvKiBFbmNvZGVkIGRhdGEgaXMgc2ltcGx5IHRoZSBuZXh0IGJpdCBvZiB0aGUgdHdvJ3MtY29tcGxlbWVudCBEQyB2YWx1ZSAqLw0KLSAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCAxLCByZXR1cm4gRkFMU0UpOw0KLSAgICBpZiAoR0VUX0JJVFMoMSkpDQotICAgICAgKCpibG9jaylbMF0gfD0gcDE7DQotICAgIC8qIE5vdGU6IHNpbmNlIHdlIHVzZSB8PSwgcmVwZWF0aW5nIHRoZSBhc3NpZ25tZW50IGxhdGVyIGlzIHNhZmUgKi8NCi0gIH0NCi0NCi0gIC8qIENvbXBsZXRlZCBNQ1UsIHNvIHVwZGF0ZSBzdGF0ZSAqLw0KLSAgQklUUkVBRF9TQVZFX1NUQVRFKGNpbmZvLGVudHJvcHktPmJpdHN0YXRlKTsNCi0NCi0gIC8qIEFjY291bnQgZm9yIHJlc3RhcnQgaW50ZXJ2YWwgKG5vLW9wIGlmIG5vdCB1c2luZyByZXN0YXJ0cykgKi8NCi0gIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07DQotDQotICByZXR1cm4gVFJVRTsNCi19DQotDQotDQotLyoNCi0gKiBNQ1UgZGVjb2RpbmcgZm9yIEFDIHN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbiByZWZpbmVtZW50IHNjYW4uDQotICovDQotDQotTUVUSE9EREVGKGJvb2xlYW4pDQotZGVjb2RlX21jdV9BQ19yZWZpbmUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpDQoteyAgIA0KLSAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7DQotICBpbnQgU2UgPSBjaW5mby0+U2U7DQotICBpbnQgcDEgPSAxIDw8IGNpbmZvLT5BbDsJLyogMSBpbiB0aGUgYml0IHBvc2l0aW9uIGJlaW5nIGNvZGVkICovDQotICBpbnQgbTEgPSAoLTEpIDw8IGNpbmZvLT5BbDsJLyogLTEgaW4gdGhlIGJpdCBwb3NpdGlvbiBiZWluZyBjb2RlZCAqLw0KLSAgcmVnaXN0ZXIgaW50IHMsIGssIHI7DQotICB1bnNpZ25lZCBpbnQgRU9CUlVOOw0KLSAgSkJMT0NLUk9XIGJsb2NrOw0KLSAgSkNPRUZQVFIgdGhpc2NvZWY7DQotICBCSVRSRUFEX1NUQVRFX1ZBUlM7DQotICBkX2Rlcml2ZWRfdGJsICogdGJsOw0KLSAgaW50IG51bV9uZXduejsNCi0gIGludCBuZXduel9wb3NbRENUU0laRTJdOw0KLQ0KLSAgLyogUHJvY2VzcyByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQ7IG1heSBoYXZlIHRvIHN1c3BlbmQgKi8NCi0gIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgew0KLSAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkNCi0gICAgICBpZiAoISBwcm9jZXNzX3Jlc3RhcnQoY2luZm8pKQ0KLQlyZXR1cm4gRkFMU0U7DQotICB9DQotDQotICAvKiBJZiB3ZSd2ZSBydW4gb3V0IG9mIGRhdGEsIGRvbid0IG1vZGlmeSB0aGUgTUNVLg0KLSAgICovDQotICBpZiAoISBlbnRyb3B5LT5wdWIuaW5zdWZmaWNpZW50X2RhdGEpIHsNCi0NCi0gICAgLyogTG9hZCB1cCB3b3JraW5nIHN0YXRlICovDQotICAgIEJJVFJFQURfTE9BRF9TVEFURShjaW5mbyxlbnRyb3B5LT5iaXRzdGF0ZSk7DQotICAgIEVPQlJVTiA9IGVudHJvcHktPnNhdmVkLkVPQlJVTjsgLyogb25seSBwYXJ0IG9mIHNhdmVkIHN0YXRlIHdlIG5lZWQgKi8NCi0NCi0gICAgLyogVGhlcmUgaXMgYWx3YXlzIG9ubHkgb25lIGJsb2NrIHBlciBNQ1UgKi8NCi0gICAgYmxvY2sgPSBNQ1VfZGF0YVswXTsNCi0gICAgdGJsID0gZW50cm9weS0+YWNfZGVyaXZlZF90Ymw7DQotDQotICAgIC8qIElmIHdlIGFyZSBmb3JjZWQgdG8gc3VzcGVuZCwgd2UgbXVzdCB1bmRvIHRoZSBhc3NpZ25tZW50cyB0byBhbnkgbmV3bHkNCi0gICAgICogbm9uemVybyBjb2VmZmljaWVudHMgaW4gdGhlIGJsb2NrLCBiZWNhdXNlIG90aGVyd2lzZSB3ZSdkIGdldCBjb25mdXNlZA0KLSAgICAgKiBuZXh0IHRpbWUgYWJvdXQgd2hpY2ggY29lZmZpY2llbnRzIHdlcmUgYWxyZWFkeSBub256ZXJvLg0KLSAgICAgKiBCdXQgd2UgbmVlZCBub3QgdW5kbyBhZGRpdGlvbiBvZiBiaXRzIHRvIGFscmVhZHktbm9uemVybyBjb2VmZmljaWVudHM7DQotICAgICAqIGluc3RlYWQsIHdlIGNhbiB0ZXN0IHRoZSBjdXJyZW50IGJpdCB0byBzZWUgaWYgd2UgYWxyZWFkeSBkaWQgaXQuDQotICAgICAqLw0KLSAgICBudW1fbmV3bnogPSAwOw0KLQ0KLSAgICAvKiBpbml0aWFsaXplIGNvZWZmaWNpZW50IGxvb3AgY291bnRlciB0byBzdGFydCBvZiBiYW5kICovDQotICAgIGsgPSBjaW5mby0+U3M7DQotDQotICAgIGlmIChFT0JSVU4gPT0gMCkgew0KLSAgICAgIGZvciAoOyBrIDw9IFNlOyBrKyspIHsNCi0JSFVGRl9ERUNPREUocywgYnJfc3RhdGUsIHRibCwgZ290byB1bmRvaXQsIGxhYmVsMyk7DQotCXIgPSBzID4+IDQ7DQotCXMgJj0gMTU7DQotCWlmIChzKSB7DQotCSAgaWYgKHMgIT0gMSkJCS8qIHNpemUgb2YgbmV3IGNvZWYgc2hvdWxkIGFsd2F5cyBiZSAxICovDQotCSAgICBXQVJOTVMoY2luZm8sIEpXUk5fSFVGRl9CQURfQ09ERSk7DQotCSAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgMSwgZ290byB1bmRvaXQpOw0KLQkgIGlmIChHRVRfQklUUygxKSkNCi0JICAgIHMgPSBwMTsJCS8qIG5ld2x5IG5vbnplcm8gY29lZiBpcyBwb3NpdGl2ZSAqLw0KLQkgIGVsc2UNCi0JICAgIHMgPSBtMTsJCS8qIG5ld2x5IG5vbnplcm8gY29lZiBpcyBuZWdhdGl2ZSAqLw0KLQl9IGVsc2Ugew0KLQkgIGlmIChyICE9IDE1KSB7DQotCSAgICBFT0JSVU4gPSAxIDw8IHI7CS8qIEVPQnIsIHJ1biBsZW5ndGggaXMgMl5yICsgYXBwZW5kZWQgYml0cyAqLw0KLQkgICAgaWYgKHIpIHsNCi0JICAgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgciwgZ290byB1bmRvaXQpOw0KLQkgICAgICByID0gR0VUX0JJVFMocik7DQotCSAgICAgIEVPQlJVTiArPSByOw0KLQkgICAgfQ0KLQkgICAgYnJlYWs7CQkvKiByZXN0IG9mIGJsb2NrIGlzIGhhbmRsZWQgYnkgRU9CIGxvZ2ljICovDQotCSAgfQ0KLQkgIC8qIG5vdGUgcyA9IDAgZm9yIHByb2Nlc3NpbmcgWlJMICovDQotCX0NCi0JLyogQWR2YW5jZSBvdmVyIGFscmVhZHktbm9uemVybyBjb2VmcyBhbmQgciBzdGlsbC16ZXJvIGNvZWZzLA0KLQkgKiBhcHBlbmRpbmcgY29ycmVjdGlvbiBiaXRzIHRvIHRoZSBub256ZXJvZXMuICBBIGNvcnJlY3Rpb24gYml0IGlzIDENCi0JICogaWYgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBjb2VmZmljaWVudCBtdXN0IGJlIGluY3JlYXNlZC4NCi0JICovDQotCWRvIHsNCi0JICB0aGlzY29lZiA9ICpibG9jayArIGpwZWdfbmF0dXJhbF9vcmRlcltrXTsNCi0JICBpZiAoKnRoaXNjb2VmICE9IDApIHsNCi0JICAgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIDEsIGdvdG8gdW5kb2l0KTsNCi0JICAgIGlmIChHRVRfQklUUygxKSkgew0KLQkgICAgICBpZiAoKCp0aGlzY29lZiAmIHAxKSA9PSAwKSB7IC8qIGRvIG5vdGhpbmcgaWYgYWxyZWFkeSBzZXQgaXQgKi8NCi0JCWlmICgqdGhpc2NvZWYgPj0gMCkNCi0JCSAgKnRoaXNjb2VmICs9IHAxOw0KLQkJZWxzZQ0KLQkJICAqdGhpc2NvZWYgKz0gbTE7DQotCSAgICAgIH0NCi0JICAgIH0NCi0JICB9IGVsc2Ugew0KLQkgICAgaWYgKC0tciA8IDApDQotCSAgICAgIGJyZWFrOwkJLyogcmVhY2hlZCB0YXJnZXQgemVybyBjb2VmZmljaWVudCAqLw0KLQkgIH0NCi0JICBrKys7DQotCX0gd2hpbGUgKGsgPD0gU2UpOw0KLQlpZiAocykgew0KLQkgIGludCBwb3MgPSBqcGVnX25hdHVyYWxfb3JkZXJba107DQotCSAgLyogT3V0cHV0IG5ld2x5IG5vbnplcm8gY29lZmZpY2llbnQgKi8NCi0JICAoKmJsb2NrKVtwb3NdID0gKEpDT0VGKSBzOw0KLQkgIC8qIFJlbWVtYmVyIGl0cyBwb3NpdGlvbiBpbiBjYXNlIHdlIGhhdmUgdG8gc3VzcGVuZCAqLw0KLQkgIG5ld256X3Bvc1tudW1fbmV3bnorK10gPSBwb3M7DQotCX0NCi0gICAgICB9DQotICAgIH0NCi0NCi0gICAgaWYgKEVPQlJVTiA+IDApIHsNCi0gICAgICAvKiBTY2FuIGFueSByZW1haW5pbmcgY29lZmZpY2llbnQgcG9zaXRpb25zIGFmdGVyIHRoZSBlbmQtb2YtYmFuZA0KLSAgICAgICAqICh0aGUgbGFzdCBuZXdseSBub256ZXJvIGNvZWZmaWNpZW50LCBpZiBhbnkpLiAgQXBwZW5kIGEgY29ycmVjdGlvbg0KLSAgICAgICAqIGJpdCB0byBlYWNoIGFscmVhZHktbm9uemVybyBjb2VmZmljaWVudC4gIEEgY29ycmVjdGlvbiBiaXQgaXMgMQ0KLSAgICAgICAqIGlmIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgY29lZmZpY2llbnQgbXVzdCBiZSBpbmNyZWFzZWQuDQotICAgICAgICovDQotICAgICAgZm9yICg7IGsgPD0gU2U7IGsrKykgew0KLQl0aGlzY29lZiA9ICpibG9jayArIGpwZWdfbmF0dXJhbF9vcmRlcltrXTsNCi0JaWYgKCp0aGlzY29lZiAhPSAwKSB7DQotCSAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgMSwgZ290byB1bmRvaXQpOw0KLQkgIGlmIChHRVRfQklUUygxKSkgew0KLQkgICAgaWYgKCgqdGhpc2NvZWYgJiBwMSkgPT0gMCkgeyAvKiBkbyBub3RoaW5nIGlmIGFscmVhZHkgY2hhbmdlZCBpdCAqLw0KLQkgICAgICBpZiAoKnRoaXNjb2VmID49IDApDQotCQkqdGhpc2NvZWYgKz0gcDE7DQotCSAgICAgIGVsc2UNCi0JCSp0aGlzY29lZiArPSBtMTsNCi0JICAgIH0NCi0JICB9DQotCX0NCi0gICAgICB9DQotICAgICAgLyogQ291bnQgb25lIGJsb2NrIGNvbXBsZXRlZCBpbiBFT0IgcnVuICovDQotICAgICAgRU9CUlVOLS07DQotICAgIH0NCi0NCi0gICAgLyogQ29tcGxldGVkIE1DVSwgc28gdXBkYXRlIHN0YXRlICovDQotICAgIEJJVFJFQURfU0FWRV9TVEFURShjaW5mbyxlbnRyb3B5LT5iaXRzdGF0ZSk7DQotICAgIGVudHJvcHktPnNhdmVkLkVPQlJVTiA9IEVPQlJVTjsgLyogb25seSBwYXJ0IG9mIHNhdmVkIHN0YXRlIHdlIG5lZWQgKi8NCi0gIH0NCi0NCi0gIC8qIEFjY291bnQgZm9yIHJlc3RhcnQgaW50ZXJ2YWwgKG5vLW9wIGlmIG5vdCB1c2luZyByZXN0YXJ0cykgKi8NCi0gIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07DQotDQotICByZXR1cm4gVFJVRTsNCi0NCi11bmRvaXQ6DQotICAvKiBSZS16ZXJvIGFueSBvdXRwdXQgY29lZmZpY2llbnRzIHRoYXQgd2UgbWFkZSBuZXdseSBub256ZXJvICovDQotICB3aGlsZSAobnVtX25ld256ID4gMCkNCi0gICAgKCpibG9jaylbbmV3bnpfcG9zWy0tbnVtX25ld256XV0gPSAwOw0KLQ0KLSAgcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi0NCi0vKg0KLSAqIE1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciBwcm9ncmVzc2l2ZSBIdWZmbWFuIGVudHJvcHkgZGVjb2RpbmcuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotamluaXRfcGh1ZmZfZGVjb2RlciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5Ow0KLSAgaW50ICpjb2VmX2JpdF9wdHI7DQotICBpbnQgY2ksIGk7DQotDQotICBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKQ0KLSAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQlTSVpFT0YocGh1ZmZfZW50cm9weV9kZWNvZGVyKSk7DQotICBjaW5mby0+ZW50cm9weSA9IChzdHJ1Y3QganBlZ19lbnRyb3B5X2RlY29kZXIgKikgZW50cm9weTsNCi0gIGVudHJvcHktPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzc19waHVmZl9kZWNvZGVyOw0KLQ0KLSAgLyogTWFyayBkZXJpdmVkIHRhYmxlcyB1bmFsbG9jYXRlZCAqLw0KLSAgZm9yIChpID0gMDsgaSA8IE5VTV9IVUZGX1RCTFM7IGkrKykgew0KLSAgICBlbnRyb3B5LT5kZXJpdmVkX3RibHNbaV0gPSBOVUxMOw0KLSAgfQ0KLQ0KLSAgLyogQ3JlYXRlIHByb2dyZXNzaW9uIHN0YXR1cyB0YWJsZSAqLw0KLSAgY2luZm8tPmNvZWZfYml0cyA9IChpbnQgKCopW0RDVFNJWkUyXSkNCi0gICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwNCi0JCQkJY2luZm8tPm51bV9jb21wb25lbnRzKkRDVFNJWkUyKlNJWkVPRihpbnQpKTsNCi0gIGNvZWZfYml0X3B0ciA9ICYgY2luZm8tPmNvZWZfYml0c1swXVswXTsNCi0gIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgDQotICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFMjsgaSsrKQ0KLSAgICAgICpjb2VmX2JpdF9wdHIrKyA9IC0xOw0KLX0NCi0NCi0jZW5kaWYgLyogRF9QUk9HUkVTU0lWRV9TVVBQT1JURUQgKi8NCi0NCi0jZW5kaWYgLy9fRlhfSlBFR19UVVJCT18NCisjaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQorLyoKKyAqIGpkcGh1ZmYuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIEh1ZmZtYW4gZW50cm9weSBkZWNvZGluZyByb3V0aW5lcyBmb3IgcHJvZ3Jlc3NpdmUgSlBFRy4KKyAqCisgKiBNdWNoIG9mIHRoZSBjb21wbGV4aXR5IGhlcmUgaGFzIHRvIGRvIHdpdGggc3VwcG9ydGluZyBpbnB1dCBzdXNwZW5zaW9uLgorICogSWYgdGhlIGRhdGEgc291cmNlIG1vZHVsZSBkZW1hbmRzIHN1c3BlbnNpb24sIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBiYWNrCisgKiB1cCB0byB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgTUNVLiAgVG8gZG8gdGhpcywgd2UgY29weSBzdGF0ZSB2YXJpYWJsZXMKKyAqIGludG8gbG9jYWwgd29ya2luZyBzdG9yYWdlLCBhbmQgdXBkYXRlIHRoZW0gYmFjayB0byB0aGUgcGVybWFuZW50CisgKiBzdG9yYWdlIG9ubHkgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgYW4gTUNVLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqZGh1ZmYuaCIJCS8qIERlY2xhcmF0aW9ucyBzaGFyZWQgd2l0aCBqZGh1ZmYuYyAqLworCisKKyNpZmRlZiBEX1BST0dSRVNTSVZFX1NVUFBPUlRFRAorCisvKgorICogRXhwYW5kZWQgZW50cm9weSBkZWNvZGVyIG9iamVjdCBmb3IgcHJvZ3Jlc3NpdmUgSHVmZm1hbiBkZWNvZGluZy4KKyAqCisgKiBUaGUgc2F2YWJsZV9zdGF0ZSBzdWJyZWNvcmQgY29udGFpbnMgZmllbGRzIHRoYXQgY2hhbmdlIHdpdGhpbiBhbiBNQ1UsCisgKiBidXQgbXVzdCBub3QgYmUgdXBkYXRlZCBwZXJtYW5lbnRseSB1bnRpbCB3ZSBjb21wbGV0ZSB0aGUgTUNVLgorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgaW50IEVPQlJVTjsJCQkvKiByZW1haW5pbmcgRU9CcyBpbiBFT0JSVU4gKi8KKyAgaW50IGxhc3RfZGNfdmFsW01BWF9DT01QU19JTl9TQ0FOXTsJLyogbGFzdCBEQyBjb2VmIGZvciBlYWNoIGNvbXBvbmVudCAqLworfSBzYXZhYmxlX3N0YXRlOworCisvKiBUaGlzIG1hY3JvIGlzIHRvIHdvcmsgYXJvdW5kIGNvbXBpbGVycyB3aXRoIG1pc3Npbmcgb3IgYnJva2VuCisgKiBzdHJ1Y3R1cmUgYXNzaWdubWVudC4gIFlvdSdsbCBuZWVkIHRvIGZpeCB0aGlzIGNvZGUgaWYgeW91IGhhdmUKKyAqIHN1Y2ggYSBjb21waWxlciBhbmQgeW91IGNoYW5nZSBNQVhfQ09NUFNfSU5fU0NBTi4KKyAqLworCisjaWZuZGVmIE5PX1NUUlVDVF9BU1NJR04KKyNkZWZpbmUgQVNTSUdOX1NUQVRFKGRlc3Qsc3JjKSAgKChkZXN0KSA9IChzcmMpKQorI2Vsc2UKKyNpZiBNQVhfQ09NUFNfSU5fU0NBTiA9PSA0CisjZGVmaW5lIEFTU0lHTl9TVEFURShkZXN0LHNyYykgIFwKKwkoKGRlc3QpLkVPQlJVTiA9IChzcmMpLkVPQlJVTiwgXAorCSAoZGVzdCkubGFzdF9kY192YWxbMF0gPSAoc3JjKS5sYXN0X2RjX3ZhbFswXSwgXAorCSAoZGVzdCkubGFzdF9kY192YWxbMV0gPSAoc3JjKS5sYXN0X2RjX3ZhbFsxXSwgXAorCSAoZGVzdCkubGFzdF9kY192YWxbMl0gPSAoc3JjKS5sYXN0X2RjX3ZhbFsyXSwgXAorCSAoZGVzdCkubGFzdF9kY192YWxbM10gPSAoc3JjKS5sYXN0X2RjX3ZhbFszXSkKKyNlbmRpZgorI2VuZGlmCisKKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QganBlZ19lbnRyb3B5X2RlY29kZXIgcHViOyAvKiBwdWJsaWMgZmllbGRzICovCisKKyAgLyogVGhlc2UgZmllbGRzIGFyZSBsb2FkZWQgaW50byBsb2NhbCB2YXJpYWJsZXMgYXQgc3RhcnQgb2YgZWFjaCBNQ1UuCisgICAqIEluIGNhc2Ugb2Ygc3VzcGVuc2lvbiwgd2UgZXhpdCBXSVRIT1VUIHVwZGF0aW5nIHRoZW0uCisgICAqLworICBiaXRyZWFkX3Blcm1fc3RhdGUgYml0c3RhdGU7CS8qIEJpdCBidWZmZXIgYXQgc3RhcnQgb2YgTUNVICovCisgIHNhdmFibGVfc3RhdGUgc2F2ZWQ7CQkvKiBPdGhlciBzdGF0ZSBhdCBzdGFydCBvZiBNQ1UgKi8KKworICAvKiBUaGVzZSBmaWVsZHMgYXJlIE5PVCBsb2FkZWQgaW50byBsb2NhbCB3b3JraW5nIHN0YXRlLiAqLworICB1bnNpZ25lZCBpbnQgcmVzdGFydHNfdG9fZ287CS8qIE1DVXMgbGVmdCBpbiB0aGlzIHJlc3RhcnQgaW50ZXJ2YWwgKi8KKworICAvKiBQb2ludGVycyB0byBkZXJpdmVkIHRhYmxlcyAodGhlc2Ugd29ya3NwYWNlcyBoYXZlIGltYWdlIGxpZmVzcGFuKSAqLworICBkX2Rlcml2ZWRfdGJsICogZGVyaXZlZF90YmxzW05VTV9IVUZGX1RCTFNdOworCisgIGRfZGVyaXZlZF90YmwgKiBhY19kZXJpdmVkX3RibDsgLyogYWN0aXZlIHRhYmxlIGR1cmluZyBhbiBBQyBzY2FuICovCit9IHBodWZmX2VudHJvcHlfZGVjb2RlcjsKKwordHlwZWRlZiBwaHVmZl9lbnRyb3B5X2RlY29kZXIgKiBwaHVmZl9lbnRyb3B5X3B0cjsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK01FVEhPRERFRihib29sZWFuKSBkZWNvZGVfbWN1X0RDX2ZpcnN0IEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJICAgIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKK01FVEhPRERFRihib29sZWFuKSBkZWNvZGVfbWN1X0FDX2ZpcnN0IEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJICAgIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKK01FVEhPRERFRihib29sZWFuKSBkZWNvZGVfbWN1X0RDX3JlZmluZSBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisJCQkJCSAgICAgSkJMT0NLUk9XICpNQ1VfZGF0YSkpOworTUVUSE9EREVGKGJvb2xlYW4pIGRlY29kZV9tY3VfQUNfcmVmaW5lIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJICAgICBKQkxPQ0tST1cgKk1DVV9kYXRhKSk7CisKKworLyoKKyAqIEluaXRpYWxpemUgZm9yIGEgSHVmZm1hbi1jb21wcmVzc2VkIHNjYW4uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9wYXNzX3BodWZmX2RlY29kZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAocGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5OworICBib29sZWFuIGlzX0RDX2JhbmQsIGJhZDsKKyAgaW50IGNpLCBjb2VmaSwgdGJsOworICBpbnQgKmNvZWZfYml0X3B0cjsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7CisKKyAgaXNfRENfYmFuZCA9IChjaW5mby0+U3MgPT0gMCk7CisKKyAgLyogVmFsaWRhdGUgc2NhbiBwYXJhbWV0ZXJzICovCisgIGJhZCA9IEZBTFNFOworICBpZiAoaXNfRENfYmFuZCkgeworICAgIGlmIChjaW5mby0+U2UgIT0gMCkKKyAgICAgIGJhZCA9IFRSVUU7CisgIH0gZWxzZSB7CisgICAgLyogbmVlZCBub3QgY2hlY2sgU3MvU2UgPCAwIHNpbmNlIHRoZXkgY2FtZSBmcm9tIHVuc2lnbmVkIGJ5dGVzICovCisgICAgaWYgKGNpbmZvLT5TcyA+IGNpbmZvLT5TZSB8fCBjaW5mby0+U2UgPj0gRENUU0laRTIpCisgICAgICBiYWQgPSBUUlVFOworICAgIC8qIEFDIHNjYW5zIG1heSBoYXZlIG9ubHkgb25lIGNvbXBvbmVudCAqLworICAgIGlmIChjaW5mby0+Y29tcHNfaW5fc2NhbiAhPSAxKQorICAgICAgYmFkID0gVFJVRTsKKyAgfQorICBpZiAoY2luZm8tPkFoICE9IDApIHsKKyAgICAvKiBTdWNjZXNzaXZlIGFwcHJveGltYXRpb24gcmVmaW5lbWVudCBzY2FuOiBtdXN0IGhhdmUgQWwgPSBBaC0xLiAqLworICAgIGlmIChjaW5mby0+QWwgIT0gY2luZm8tPkFoLTEpCisgICAgICBiYWQgPSBUUlVFOworICB9CisgIGlmIChjaW5mby0+QWwgPiAxMykJCS8qIG5lZWQgbm90IGNoZWNrIGZvciA8IDAgKi8KKyAgICBiYWQgPSBUUlVFOworICAvKiBBcmd1YWJseSB0aGUgbWF4aW11bSBBbCB2YWx1ZSBzaG91bGQgYmUgbGVzcyB0aGFuIDEzIGZvciA4LWJpdCBwcmVjaXNpb24sCisgICAqIGJ1dCB0aGUgc3BlYyBkb2Vzbid0IHNheSBzbywgYW5kIHdlIHRyeSB0byBiZSBsaWJlcmFsIGFib3V0IHdoYXQgd2UKKyAgICogYWNjZXB0LiAgTm90ZTogbGFyZ2UgQWwgdmFsdWVzIGNvdWxkIHJlc3VsdCBpbiBvdXQtb2YtcmFuZ2UgREMKKyAgICogY29lZmZpY2llbnRzIGR1cmluZyBlYXJseSBzY2FucywgbGVhZGluZyB0byBiaXphcnJlIGRpc3BsYXlzIGR1ZSB0bworICAgKiBvdmVyZmxvd3MgaW4gdGhlIElEQ1QgbWF0aC4gIEJ1dCB3ZSB3b24ndCBjcmFzaC4KKyAgICovCisgIGlmIChiYWQpCisgICAgRVJSRVhJVDQoY2luZm8sIEpFUlJfQkFEX1BST0dSRVNTSU9OLAorCSAgICAgY2luZm8tPlNzLCBjaW5mby0+U2UsIGNpbmZvLT5BaCwgY2luZm8tPkFsKTsKKyAgLyogVXBkYXRlIHByb2dyZXNzaW9uIHN0YXR1cywgYW5kIHZlcmlmeSB0aGF0IHNjYW4gb3JkZXIgaXMgbGVnYWwuCisgICAqIE5vdGUgdGhhdCBpbnRlci1zY2FuIGluY29uc2lzdGVuY2llcyBhcmUgdHJlYXRlZCBhcyB3YXJuaW5ncworICAgKiBub3QgZmF0YWwgZXJyb3JzIC4uLiBub3QgY2xlYXIgaWYgdGhpcyBpcyByaWdodCB3YXkgdG8gYmVoYXZlLgorICAgKi8KKyAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspIHsKKyAgICBpbnQgY2luZGV4ID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldLT5jb21wb25lbnRfaW5kZXg7CisgICAgY29lZl9iaXRfcHRyID0gJiBjaW5mby0+Y29lZl9iaXRzW2NpbmRleF1bMF07CisgICAgaWYgKCFpc19EQ19iYW5kICYmIGNvZWZfYml0X3B0clswXSA8IDApIC8qIEFDIHdpdGhvdXQgcHJpb3IgREMgc2NhbiAqLworICAgICAgV0FSTk1TMihjaW5mbywgSldSTl9CT0dVU19QUk9HUkVTU0lPTiwgY2luZGV4LCAwKTsKKyAgICBmb3IgKGNvZWZpID0gY2luZm8tPlNzOyBjb2VmaSA8PSBjaW5mby0+U2U7IGNvZWZpKyspIHsKKyAgICAgIGludCBleHBlY3RlZCA9IChjb2VmX2JpdF9wdHJbY29lZmldIDwgMCkgPyAwIDogY29lZl9iaXRfcHRyW2NvZWZpXTsKKyAgICAgIGlmIChjaW5mby0+QWggIT0gZXhwZWN0ZWQpCisJV0FSTk1TMihjaW5mbywgSldSTl9CT0dVU19QUk9HUkVTU0lPTiwgY2luZGV4LCBjb2VmaSk7CisgICAgICBjb2VmX2JpdF9wdHJbY29lZmldID0gY2luZm8tPkFsOworICAgIH0KKyAgfQorCisgIC8qIFNlbGVjdCBNQ1UgZGVjb2Rpbmcgcm91dGluZSAqLworICBpZiAoY2luZm8tPkFoID09IDApIHsKKyAgICBpZiAoaXNfRENfYmFuZCkKKyAgICAgIGVudHJvcHktPnB1Yi5kZWNvZGVfbWN1ID0gZGVjb2RlX21jdV9EQ19maXJzdDsKKyAgICBlbHNlCisgICAgICBlbnRyb3B5LT5wdWIuZGVjb2RlX21jdSA9IGRlY29kZV9tY3VfQUNfZmlyc3Q7CisgIH0gZWxzZSB7CisgICAgaWYgKGlzX0RDX2JhbmQpCisgICAgICBlbnRyb3B5LT5wdWIuZGVjb2RlX21jdSA9IGRlY29kZV9tY3VfRENfcmVmaW5lOworICAgIGVsc2UKKyAgICAgIGVudHJvcHktPnB1Yi5kZWNvZGVfbWN1ID0gZGVjb2RlX21jdV9BQ19yZWZpbmU7CisgIH0KKworICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07CisgICAgLyogTWFrZSBzdXJlIHJlcXVlc3RlZCB0YWJsZXMgYXJlIHByZXNlbnQsIGFuZCBjb21wdXRlIGRlcml2ZWQgdGFibGVzLgorICAgICAqIFdlIG1heSBidWlsZCBzYW1lIGRlcml2ZWQgdGFibGUgbW9yZSB0aGFuIG9uY2UsIGJ1dCBpdCdzIG5vdCBleHBlbnNpdmUuCisgICAgICovCisgICAgaWYgKGlzX0RDX2JhbmQpIHsKKyAgICAgIGlmIChjaW5mby0+QWggPT0gMCkgewkvKiBEQyByZWZpbmVtZW50IG5lZWRzIG5vIHRhYmxlICovCisJdGJsID0gY29tcHB0ci0+ZGNfdGJsX25vOworCWpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsKGNpbmZvLCBUUlVFLCB0YmwsCisJCQkJJiBlbnRyb3B5LT5kZXJpdmVkX3RibHNbdGJsXSk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHRibCA9IGNvbXBwdHItPmFjX3RibF9ubzsKKyAgICAgIGpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsKGNpbmZvLCBGQUxTRSwgdGJsLAorCQkJICAgICAgJiBlbnRyb3B5LT5kZXJpdmVkX3RibHNbdGJsXSk7CisgICAgICAvKiByZW1lbWJlciB0aGUgc2luZ2xlIGFjdGl2ZSB0YWJsZSAqLworICAgICAgZW50cm9weS0+YWNfZGVyaXZlZF90YmwgPSBlbnRyb3B5LT5kZXJpdmVkX3RibHNbdGJsXTsKKyAgICB9CisgICAgLyogSW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovCisgICAgZW50cm9weS0+c2F2ZWQubGFzdF9kY192YWxbY2ldID0gMDsKKyAgfQorCisgIC8qIEluaXRpYWxpemUgYml0cmVhZCBzdGF0ZSB2YXJpYWJsZXMgKi8KKyAgZW50cm9weS0+Yml0c3RhdGUuYml0c19sZWZ0ID0gMDsKKyAgZW50cm9weS0+Yml0c3RhdGUuZ2V0X2J1ZmZlciA9IDA7IC8qIHVubmVjZXNzYXJ5LCBidXQga2VlcHMgUHVyaWZ5IHF1aWV0ICovCisgIGVudHJvcHktPnB1Yi5pbnN1ZmZpY2llbnRfZGF0YSA9IEZBTFNFOworCisgIC8qIEluaXRpYWxpemUgcHJpdmF0ZSBzdGF0ZSB2YXJpYWJsZXMgKi8KKyAgZW50cm9weS0+c2F2ZWQuRU9CUlVOID0gMDsKKworICAvKiBJbml0aWFsaXplIHJlc3RhcnQgY291bnRlciAqLworICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOworfQorCisKKy8qCisgKiBGaWd1cmUgRi4xMjogZXh0ZW5kIHNpZ24gYml0LgorICogT24gc29tZSBtYWNoaW5lcywgYSBzaGlmdCBhbmQgYWRkIHdpbGwgYmUgZmFzdGVyIHRoYW4gYSB0YWJsZSBsb29rdXAuCisgKi8KKworI2lmZGVmIEFWT0lEX1RBQkxFUworCisjZGVmaW5lIEhVRkZfRVhURU5EKHgscykgICgoeCkgPCAoMTw8KChzKS0xKSkgPyAoeCkgKyAoKCgtMSk8PChzKSkgKyAxKSA6ICh4KSkKKworI2Vsc2UKKworI2RlZmluZSBIVUZGX0VYVEVORCh4LHMpICAoKHgpIDwgZXh0ZW5kX3Rlc3Rbc10gPyAoeCkgKyBleHRlbmRfb2Zmc2V0W3NdIDogKHgpKQorCitzdGF0aWMgY29uc3QgaW50IGV4dGVuZF90ZXN0WzE2XSA9ICAgLyogZW50cnkgbiBpcyAyKioobi0xKSAqLworICB7IDAsIDB4MDAwMSwgMHgwMDAyLCAweDAwMDQsIDB4MDAwOCwgMHgwMDEwLCAweDAwMjAsIDB4MDA0MCwgMHgwMDgwLAorICAgIDB4MDEwMCwgMHgwMjAwLCAweDA0MDAsIDB4MDgwMCwgMHgxMDAwLCAweDIwMDAsIDB4NDAwMCB9OworCitzdGF0aWMgY29uc3QgaW50IGV4dGVuZF9vZmZzZXRbMTZdID0gLyogZW50cnkgbiBpcyAoLTEgPDwgbikgKyAxICovCisgIHsgMCwgKCgtMSk8PDEpICsgMSwgKCgtMSk8PDIpICsgMSwgKCgtMSk8PDMpICsgMSwgKCgtMSk8PDQpICsgMSwKKyAgICAoKC0xKTw8NSkgKyAxLCAoKC0xKTw8NikgKyAxLCAoKC0xKTw8NykgKyAxLCAoKC0xKTw8OCkgKyAxLAorICAgICgoLTEpPDw5KSArIDEsICgoLTEpPDwxMCkgKyAxLCAoKC0xKTw8MTEpICsgMSwgKCgtMSk8PDEyKSArIDEsCisgICAgKCgtMSk8PDEzKSArIDEsICgoLTEpPDwxNCkgKyAxLCAoKC0xKTw8MTUpICsgMSB9OworCisjZW5kaWYgLyogQVZPSURfVEFCTEVTICovCisKKworLyoKKyAqIENoZWNrIGZvciBhIHJlc3RhcnQgbWFya2VyICYgcmVzeW5jaHJvbml6ZSBkZWNvZGVyLgorICogUmV0dXJucyBGQUxTRSBpZiBtdXN0IHN1c3BlbmQuCisgKi8KKworTE9DQUwoYm9vbGVhbikKK3Byb2Nlc3NfcmVzdGFydCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7CisgIGludCBjaTsKKworICAvKiBUaHJvdyBhd2F5IGFueSB1bnVzZWQgYml0cyByZW1haW5pbmcgaW4gYml0IGJ1ZmZlcjsgKi8KKyAgLyogaW5jbHVkZSBhbnkgZnVsbCBieXRlcyBpbiBuZXh0X21hcmtlcidzIGNvdW50IG9mIGRpc2NhcmRlZCBieXRlcyAqLworICBjaW5mby0+bWFya2VyLT5kaXNjYXJkZWRfYnl0ZXMgKz0gZW50cm9weS0+Yml0c3RhdGUuYml0c19sZWZ0IC8gODsKKyAgZW50cm9weS0+Yml0c3RhdGUuYml0c19sZWZ0ID0gMDsKKworICAvKiBBZHZhbmNlIHBhc3QgdGhlIFJTVG4gbWFya2VyICovCisgIGlmICghICgqY2luZm8tPm1hcmtlci0+cmVhZF9yZXN0YXJ0X21hcmtlcikgKGNpbmZvKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgLyogUmUtaW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKQorICAgIGVudHJvcHktPnNhdmVkLmxhc3RfZGNfdmFsW2NpXSA9IDA7CisgIC8qIFJlLWluaXQgRU9CIHJ1biBjb3VudCwgdG9vICovCisgIGVudHJvcHktPnNhdmVkLkVPQlJVTiA9IDA7CisKKyAgLyogUmVzZXQgcmVzdGFydCBjb3VudGVyICovCisgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7CisKKyAgLyogUmVzZXQgb3V0LW9mLWRhdGEgZmxhZywgdW5sZXNzIHJlYWRfcmVzdGFydF9tYXJrZXIgbGVmdCB1cyBzbWFjayB1cAorICAgKiBhZ2FpbnN0IGEgbWFya2VyLiAgSW4gdGhhdCBjYXNlIHdlIHdpbGwgZW5kIHVwIHRyZWF0aW5nIHRoZSBuZXh0IGRhdGEKKyAgICogc2VnbWVudCBhcyBlbXB0eSwgYW5kIHdlIGNhbiBhdm9pZCBwcm9kdWNpbmcgYm9ndXMgb3V0cHV0IHBpeGVscyBieQorICAgKiBsZWF2aW5nIHRoZSBmbGFnIHNldC4KKyAgICovCisgIGlmIChjaW5mby0+dW5yZWFkX21hcmtlciA9PSAwKQorICAgIGVudHJvcHktPnB1Yi5pbnN1ZmZpY2llbnRfZGF0YSA9IEZBTFNFOworCisgIHJldHVybiBUUlVFOworfQorCisKKy8qCisgKiBIdWZmbWFuIE1DVSBkZWNvZGluZy4KKyAqIEVhY2ggb2YgdGhlc2Ugcm91dGluZXMgZGVjb2RlcyBhbmQgcmV0dXJucyBvbmUgTUNVJ3Mgd29ydGggb2YKKyAqIEh1ZmZtYW4tY29tcHJlc3NlZCBjb2VmZmljaWVudHMuIAorICogVGhlIGNvZWZmaWNpZW50cyBhcmUgcmVvcmRlcmVkIGZyb20gemlnemFnIG9yZGVyIGludG8gbmF0dXJhbCBhcnJheSBvcmRlciwKKyAqIGJ1dCBhcmUgbm90IGRlcXVhbnRpemVkLgorICoKKyAqIFRoZSBpJ3RoIGJsb2NrIG9mIHRoZSBNQ1UgaXMgc3RvcmVkIGludG8gdGhlIGJsb2NrIHBvaW50ZWQgdG8gYnkKKyAqIE1DVV9kYXRhW2ldLiAgV0UgQVNTVU1FIFRISVMgQVJFQSBJUyBJTklUSUFMTFkgWkVST0VEIEJZIFRIRSBDQUxMRVIuCisgKgorICogV2UgcmV0dXJuIEZBTFNFIGlmIGRhdGEgc291cmNlIHJlcXVlc3RlZCBzdXNwZW5zaW9uLiAgSW4gdGhhdCBjYXNlIG5vCisgKiBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIHBlcm1hbmVudCBzdGF0ZS4gIChFeGNlcHRpb246IHNvbWUgb3V0cHV0CisgKiBjb2VmZmljaWVudHMgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIGFzc2lnbmVkLiAgVGhpcyBpcyBoYXJtbGVzcyBmb3IKKyAqIHNwZWN0cmFsIHNlbGVjdGlvbiwgc2luY2Ugd2UnbGwganVzdCByZS1hc3NpZ24gdGhlbSBvbiB0aGUgbmV4dCBjYWxsLgorICogU3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uIEFDIHJlZmluZW1lbnQgaGFzIHRvIGJlIG1vcmUgY2FyZWZ1bCwgaG93ZXZlci4pCisgKi8KKworLyoKKyAqIE1DVSBkZWNvZGluZyBmb3IgREMgaW5pdGlhbCBzY2FuIChlaXRoZXIgc3BlY3RyYWwgc2VsZWN0aW9uLAorICogb3IgZmlyc3QgcGFzcyBvZiBzdWNjZXNzaXZlIGFwcHJveGltYXRpb24pLgorICovCisKK01FVEhPRERFRihib29sZWFuKQorZGVjb2RlX21jdV9EQ19maXJzdCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkKK3sgICAKKyAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7CisgIGludCBBbCA9IGNpbmZvLT5BbDsKKyAgcmVnaXN0ZXIgaW50IHMsIHI7CisgIGludCBibGtuLCBjaTsKKyAgSkJMT0NLUk9XIGJsb2NrOworICBCSVRSRUFEX1NUQVRFX1ZBUlM7CisgIHNhdmFibGVfc3RhdGUgc3RhdGU7CisgIGRfZGVyaXZlZF90YmwgKiB0Ymw7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyOworCisgIC8qIFByb2Nlc3MgcmVzdGFydCBtYXJrZXIgaWYgbmVlZGVkOyBtYXkgaGF2ZSB0byBzdXNwZW5kICovCisgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgeworICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQorICAgICAgaWYgKCEgcHJvY2Vzc19yZXN0YXJ0KGNpbmZvKSkKKwlyZXR1cm4gRkFMU0U7CisgIH0KKworICAvKiBJZiB3ZSd2ZSBydW4gb3V0IG9mIGRhdGEsIGp1c3QgbGVhdmUgdGhlIE1DVSBzZXQgdG8gemVyb2VzLgorICAgKiBUaGlzIHdheSwgd2UgcmV0dXJuIHVuaWZvcm0gZ3JheSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgc2VnbWVudC4KKyAgICovCisgIGlmICghIGVudHJvcHktPnB1Yi5pbnN1ZmZpY2llbnRfZGF0YSkgeworCisgICAgLyogTG9hZCB1cCB3b3JraW5nIHN0YXRlICovCisgICAgQklUUkVBRF9MT0FEX1NUQVRFKGNpbmZvLGVudHJvcHktPmJpdHN0YXRlKTsKKyAgICBBU1NJR05fU1RBVEUoc3RhdGUsIGVudHJvcHktPnNhdmVkKTsKKworICAgIC8qIE91dGVyIGxvb3AgaGFuZGxlcyBlYWNoIGJsb2NrIGluIHRoZSBNQ1UgKi8KKworICAgIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7CisgICAgICBibG9jayA9IE1DVV9kYXRhW2Jsa25dOworICAgICAgY2kgPSBjaW5mby0+TUNVX21lbWJlcnNoaXBbYmxrbl07CisgICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOworICAgICAgdGJsID0gZW50cm9weS0+ZGVyaXZlZF90YmxzW2NvbXBwdHItPmRjX3RibF9ub107CisKKyAgICAgIC8qIERlY29kZSBhIHNpbmdsZSBibG9jaydzIHdvcnRoIG9mIGNvZWZmaWNpZW50cyAqLworCisgICAgICAvKiBTZWN0aW9uIEYuMi4yLjE6IGRlY29kZSB0aGUgREMgY29lZmZpY2llbnQgZGlmZmVyZW5jZSAqLworICAgICAgSFVGRl9ERUNPREUocywgYnJfc3RhdGUsIHRibCwgcmV0dXJuIEZBTFNFLCBsYWJlbDEpOworICAgICAgaWYgKHMpIHsKKwlDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCBzLCByZXR1cm4gRkFMU0UpOworCXIgPSBHRVRfQklUUyhzKTsKKwlzID0gSFVGRl9FWFRFTkQociwgcyk7CisgICAgICB9CisKKyAgICAgIC8qIENvbnZlcnQgREMgZGlmZmVyZW5jZSB0byBhY3R1YWwgdmFsdWUsIHVwZGF0ZSBsYXN0X2RjX3ZhbCAqLworICAgICAgcyArPSBzdGF0ZS5sYXN0X2RjX3ZhbFtjaV07CisgICAgICBzdGF0ZS5sYXN0X2RjX3ZhbFtjaV0gPSBzOworICAgICAgLyogU2NhbGUgYW5kIG91dHB1dCB0aGUgY29lZmZpY2llbnQgKGFzc3VtZXMganBlZ19uYXR1cmFsX29yZGVyWzBdPTApICovCisgICAgICAoKmJsb2NrKVswXSA9IChKQ09FRikgKHMgPDwgQWwpOworICAgIH0KKworICAgIC8qIENvbXBsZXRlZCBNQ1UsIHNvIHVwZGF0ZSBzdGF0ZSAqLworICAgIEJJVFJFQURfU0FWRV9TVEFURShjaW5mbyxlbnRyb3B5LT5iaXRzdGF0ZSk7CisgICAgQVNTSUdOX1NUQVRFKGVudHJvcHktPnNhdmVkLCBzdGF0ZSk7CisgIH0KKworICAvKiBBY2NvdW50IGZvciByZXN0YXJ0IGludGVydmFsIChuby1vcCBpZiBub3QgdXNpbmcgcmVzdGFydHMpICovCisgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIE1DVSBkZWNvZGluZyBmb3IgQUMgaW5pdGlhbCBzY2FuIChlaXRoZXIgc3BlY3RyYWwgc2VsZWN0aW9uLAorICogb3IgZmlyc3QgcGFzcyBvZiBzdWNjZXNzaXZlIGFwcHJveGltYXRpb24pLgorICovCisKK01FVEhPRERFRihib29sZWFuKQorZGVjb2RlX21jdV9BQ19maXJzdCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkKK3sgICAKKyAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7CisgIGludCBTZSA9IGNpbmZvLT5TZTsKKyAgaW50IEFsID0gY2luZm8tPkFsOworICByZWdpc3RlciBpbnQgcywgaywgcjsKKyAgdW5zaWduZWQgaW50IEVPQlJVTjsKKyAgSkJMT0NLUk9XIGJsb2NrOworICBCSVRSRUFEX1NUQVRFX1ZBUlM7CisgIGRfZGVyaXZlZF90YmwgKiB0Ymw7CisKKyAgLyogUHJvY2VzcyByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQ7IG1heSBoYXZlIHRvIHN1c3BlbmQgKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7CisgICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApCisgICAgICBpZiAoISBwcm9jZXNzX3Jlc3RhcnQoY2luZm8pKQorCXJldHVybiBGQUxTRTsKKyAgfQorCisgIC8qIElmIHdlJ3ZlIHJ1biBvdXQgb2YgZGF0YSwganVzdCBsZWF2ZSB0aGUgTUNVIHNldCB0byB6ZXJvZXMuCisgICAqIFRoaXMgd2F5LCB3ZSByZXR1cm4gdW5pZm9ybSBncmF5IGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBzZWdtZW50LgorICAgKi8KKyAgaWYgKCEgZW50cm9weS0+cHViLmluc3VmZmljaWVudF9kYXRhKSB7CisKKyAgICAvKiBMb2FkIHVwIHdvcmtpbmcgc3RhdGUuCisgICAgICogV2UgY2FuIGF2b2lkIGxvYWRpbmcvc2F2aW5nIGJpdHJlYWQgc3RhdGUgaWYgaW4gYW4gRU9CIHJ1bi4KKyAgICAgKi8KKyAgICBFT0JSVU4gPSBlbnRyb3B5LT5zYXZlZC5FT0JSVU47CS8qIG9ubHkgcGFydCBvZiBzYXZlZCBzdGF0ZSB3ZSBuZWVkICovCisKKyAgICAvKiBUaGVyZSBpcyBhbHdheXMgb25seSBvbmUgYmxvY2sgcGVyIE1DVSAqLworCisgICAgaWYgKEVPQlJVTiA+IDApCQkvKiBpZiBpdCdzIGEgYmFuZCBvZiB6ZXJvZXMuLi4gKi8KKyAgICAgIEVPQlJVTi0tOwkJCS8qIC4uLnByb2Nlc3MgaXQgbm93ICh3ZSBkbyBub3RoaW5nKSAqLworICAgIGVsc2UgeworICAgICAgQklUUkVBRF9MT0FEX1NUQVRFKGNpbmZvLGVudHJvcHktPmJpdHN0YXRlKTsKKyAgICAgIGJsb2NrID0gTUNVX2RhdGFbMF07CisgICAgICB0YmwgPSBlbnRyb3B5LT5hY19kZXJpdmVkX3RibDsKKworICAgICAgZm9yIChrID0gY2luZm8tPlNzOyBrIDw9IFNlOyBrKyspIHsKKwlIVUZGX0RFQ09ERShzLCBicl9zdGF0ZSwgdGJsLCByZXR1cm4gRkFMU0UsIGxhYmVsMik7CisJciA9IHMgPj4gNDsKKwlzICY9IDE1OworCWlmIChzKSB7CisJICBrICs9IHI7CisJICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCBzLCByZXR1cm4gRkFMU0UpOworCSAgciA9IEdFVF9CSVRTKHMpOworCSAgcyA9IEhVRkZfRVhURU5EKHIsIHMpOworCSAgLyogU2NhbGUgYW5kIG91dHB1dCBjb2VmZmljaWVudCBpbiBuYXR1cmFsIChkZXppZ3phZ2dlZCkgb3JkZXIgKi8KKwkgICgqYmxvY2spW2pwZWdfbmF0dXJhbF9vcmRlcltrXV0gPSAoSkNPRUYpIChzIDw8IEFsKTsKKwl9IGVsc2UgeworCSAgaWYgKHIgPT0gMTUpIHsJLyogWlJMICovCisJICAgIGsgKz0gMTU7CQkvKiBza2lwIDE1IHplcm9lcyBpbiBiYW5kICovCisJICB9IGVsc2UgewkJLyogRU9CciwgcnVuIGxlbmd0aCBpcyAyXnIgKyBhcHBlbmRlZCBiaXRzICovCisJICAgIEVPQlJVTiA9IDEgPDwgcjsKKwkgICAgaWYgKHIpIHsJCS8qIEVPQnIsIHIgPiAwICovCisJICAgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgciwgcmV0dXJuIEZBTFNFKTsKKwkgICAgICByID0gR0VUX0JJVFMocik7CisJICAgICAgRU9CUlVOICs9IHI7CisJICAgIH0KKwkgICAgRU9CUlVOLS07CQkvKiB0aGlzIGJhbmQgaXMgcHJvY2Vzc2VkIGF0IHRoaXMgbW9tZW50ICovCisJICAgIGJyZWFrOwkJLyogZm9yY2UgZW5kLW9mLWJhbmQgKi8KKwkgIH0KKwl9CisgICAgICB9CisKKyAgICAgIEJJVFJFQURfU0FWRV9TVEFURShjaW5mbyxlbnRyb3B5LT5iaXRzdGF0ZSk7CisgICAgfQorCisgICAgLyogQ29tcGxldGVkIE1DVSwgc28gdXBkYXRlIHN0YXRlICovCisgICAgZW50cm9weS0+c2F2ZWQuRU9CUlVOID0gRU9CUlVOOwkvKiBvbmx5IHBhcnQgb2Ygc2F2ZWQgc3RhdGUgd2UgbmVlZCAqLworICB9CisKKyAgLyogQWNjb3VudCBmb3IgcmVzdGFydCBpbnRlcnZhbCAobm8tb3AgaWYgbm90IHVzaW5nIHJlc3RhcnRzKSAqLworICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOworCisgIHJldHVybiBUUlVFOworfQorCisKKy8qCisgKiBNQ1UgZGVjb2RpbmcgZm9yIERDIHN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbiByZWZpbmVtZW50IHNjYW4uCisgKiBOb3RlOiB3ZSBhc3N1bWUgc3VjaCBzY2FucyBjYW4gYmUgbXVsdGktY29tcG9uZW50LCBhbHRob3VnaCB0aGUgc3BlYworICogaXMgbm90IHZlcnkgY2xlYXIgb24gdGhlIHBvaW50LgorICovCisKK01FVEhPRERFRihib29sZWFuKQorZGVjb2RlX21jdV9EQ19yZWZpbmUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpCit7ICAgCisgIHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAocGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5OworICBpbnQgcDEgPSAxIDw8IGNpbmZvLT5BbDsJLyogMSBpbiB0aGUgYml0IHBvc2l0aW9uIGJlaW5nIGNvZGVkICovCisgIGludCBibGtuOworICBKQkxPQ0tST1cgYmxvY2s7CisgIEJJVFJFQURfU1RBVEVfVkFSUzsKKworICAvKiBQcm9jZXNzIHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZDsgbWF5IGhhdmUgdG8gc3VzcGVuZCAqLworICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKKyAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkKKyAgICAgIGlmICghIHByb2Nlc3NfcmVzdGFydChjaW5mbykpCisJcmV0dXJuIEZBTFNFOworICB9CisKKyAgLyogTm90IHdvcnRoIHRoZSBjeWNsZXMgdG8gY2hlY2sgaW5zdWZmaWNpZW50X2RhdGEgaGVyZSwKKyAgICogc2luY2Ugd2Ugd2lsbCBub3QgY2hhbmdlIHRoZSBkYXRhIGFueXdheSBpZiB3ZSByZWFkIHplcm9lcy4KKyAgICovCisKKyAgLyogTG9hZCB1cCB3b3JraW5nIHN0YXRlICovCisgIEJJVFJFQURfTE9BRF9TVEFURShjaW5mbyxlbnRyb3B5LT5iaXRzdGF0ZSk7CisKKyAgLyogT3V0ZXIgbG9vcCBoYW5kbGVzIGVhY2ggYmxvY2sgaW4gdGhlIE1DVSAqLworCisgIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7CisgICAgYmxvY2sgPSBNQ1VfZGF0YVtibGtuXTsKKworICAgIC8qIEVuY29kZWQgZGF0YSBpcyBzaW1wbHkgdGhlIG5leHQgYml0IG9mIHRoZSB0d28ncy1jb21wbGVtZW50IERDIHZhbHVlICovCisgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgMSwgcmV0dXJuIEZBTFNFKTsKKyAgICBpZiAoR0VUX0JJVFMoMSkpCisgICAgICAoKmJsb2NrKVswXSB8PSBwMTsKKyAgICAvKiBOb3RlOiBzaW5jZSB3ZSB1c2UgfD0sIHJlcGVhdGluZyB0aGUgYXNzaWdubWVudCBsYXRlciBpcyBzYWZlICovCisgIH0KKworICAvKiBDb21wbGV0ZWQgTUNVLCBzbyB1cGRhdGUgc3RhdGUgKi8KKyAgQklUUkVBRF9TQVZFX1NUQVRFKGNpbmZvLGVudHJvcHktPmJpdHN0YXRlKTsKKworICAvKiBBY2NvdW50IGZvciByZXN0YXJ0IGludGVydmFsIChuby1vcCBpZiBub3QgdXNpbmcgcmVzdGFydHMpICovCisgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIE1DVSBkZWNvZGluZyBmb3IgQUMgc3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uIHJlZmluZW1lbnQgc2Nhbi4KKyAqLworCitNRVRIT0RERUYoYm9vbGVhbikKK2RlY29kZV9tY3VfQUNfcmVmaW5lIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoreyAgIAorICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsKKyAgaW50IFNlID0gY2luZm8tPlNlOworICBpbnQgcDEgPSAxIDw8IGNpbmZvLT5BbDsJLyogMSBpbiB0aGUgYml0IHBvc2l0aW9uIGJlaW5nIGNvZGVkICovCisgIGludCBtMSA9ICgtMSkgPDwgY2luZm8tPkFsOwkvKiAtMSBpbiB0aGUgYml0IHBvc2l0aW9uIGJlaW5nIGNvZGVkICovCisgIHJlZ2lzdGVyIGludCBzLCBrLCByOworICB1bnNpZ25lZCBpbnQgRU9CUlVOOworICBKQkxPQ0tST1cgYmxvY2s7CisgIEpDT0VGUFRSIHRoaXNjb2VmOworICBCSVRSRUFEX1NUQVRFX1ZBUlM7CisgIGRfZGVyaXZlZF90YmwgKiB0Ymw7CisgIGludCBudW1fbmV3bno7CisgIGludCBuZXduel9wb3NbRENUU0laRTJdOworCisgIC8qIFByb2Nlc3MgcmVzdGFydCBtYXJrZXIgaWYgbmVlZGVkOyBtYXkgaGF2ZSB0byBzdXNwZW5kICovCisgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgeworICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQorICAgICAgaWYgKCEgcHJvY2Vzc19yZXN0YXJ0KGNpbmZvKSkKKwlyZXR1cm4gRkFMU0U7CisgIH0KKworICAvKiBJZiB3ZSd2ZSBydW4gb3V0IG9mIGRhdGEsIGRvbid0IG1vZGlmeSB0aGUgTUNVLgorICAgKi8KKyAgaWYgKCEgZW50cm9weS0+cHViLmluc3VmZmljaWVudF9kYXRhKSB7CisKKyAgICAvKiBMb2FkIHVwIHdvcmtpbmcgc3RhdGUgKi8KKyAgICBCSVRSRUFEX0xPQURfU1RBVEUoY2luZm8sZW50cm9weS0+Yml0c3RhdGUpOworICAgIEVPQlJVTiA9IGVudHJvcHktPnNhdmVkLkVPQlJVTjsgLyogb25seSBwYXJ0IG9mIHNhdmVkIHN0YXRlIHdlIG5lZWQgKi8KKworICAgIC8qIFRoZXJlIGlzIGFsd2F5cyBvbmx5IG9uZSBibG9jayBwZXIgTUNVICovCisgICAgYmxvY2sgPSBNQ1VfZGF0YVswXTsKKyAgICB0YmwgPSBlbnRyb3B5LT5hY19kZXJpdmVkX3RibDsKKworICAgIC8qIElmIHdlIGFyZSBmb3JjZWQgdG8gc3VzcGVuZCwgd2UgbXVzdCB1bmRvIHRoZSBhc3NpZ25tZW50cyB0byBhbnkgbmV3bHkKKyAgICAgKiBub256ZXJvIGNvZWZmaWNpZW50cyBpbiB0aGUgYmxvY2ssIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlJ2QgZ2V0IGNvbmZ1c2VkCisgICAgICogbmV4dCB0aW1lIGFib3V0IHdoaWNoIGNvZWZmaWNpZW50cyB3ZXJlIGFscmVhZHkgbm9uemVyby4KKyAgICAgKiBCdXQgd2UgbmVlZCBub3QgdW5kbyBhZGRpdGlvbiBvZiBiaXRzIHRvIGFscmVhZHktbm9uemVybyBjb2VmZmljaWVudHM7CisgICAgICogaW5zdGVhZCwgd2UgY2FuIHRlc3QgdGhlIGN1cnJlbnQgYml0IHRvIHNlZSBpZiB3ZSBhbHJlYWR5IGRpZCBpdC4KKyAgICAgKi8KKyAgICBudW1fbmV3bnogPSAwOworCisgICAgLyogaW5pdGlhbGl6ZSBjb2VmZmljaWVudCBsb29wIGNvdW50ZXIgdG8gc3RhcnQgb2YgYmFuZCAqLworICAgIGsgPSBjaW5mby0+U3M7CisKKyAgICBpZiAoRU9CUlVOID09IDApIHsKKyAgICAgIGZvciAoOyBrIDw9IFNlOyBrKyspIHsKKwlIVUZGX0RFQ09ERShzLCBicl9zdGF0ZSwgdGJsLCBnb3RvIHVuZG9pdCwgbGFiZWwzKTsKKwlyID0gcyA+PiA0OworCXMgJj0gMTU7CisJaWYgKHMpIHsKKwkgIGlmIChzICE9IDEpCQkvKiBzaXplIG9mIG5ldyBjb2VmIHNob3VsZCBhbHdheXMgYmUgMSAqLworCSAgICBXQVJOTVMoY2luZm8sIEpXUk5fSFVGRl9CQURfQ09ERSk7CisJICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCAxLCBnb3RvIHVuZG9pdCk7CisJICBpZiAoR0VUX0JJVFMoMSkpCisJICAgIHMgPSBwMTsJCS8qIG5ld2x5IG5vbnplcm8gY29lZiBpcyBwb3NpdGl2ZSAqLworCSAgZWxzZQorCSAgICBzID0gbTE7CQkvKiBuZXdseSBub256ZXJvIGNvZWYgaXMgbmVnYXRpdmUgKi8KKwl9IGVsc2UgeworCSAgaWYgKHIgIT0gMTUpIHsKKwkgICAgRU9CUlVOID0gMSA8PCByOwkvKiBFT0JyLCBydW4gbGVuZ3RoIGlzIDJeciArIGFwcGVuZGVkIGJpdHMgKi8KKwkgICAgaWYgKHIpIHsKKwkgICAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCByLCBnb3RvIHVuZG9pdCk7CisJICAgICAgciA9IEdFVF9CSVRTKHIpOworCSAgICAgIEVPQlJVTiArPSByOworCSAgICB9CisJICAgIGJyZWFrOwkJLyogcmVzdCBvZiBibG9jayBpcyBoYW5kbGVkIGJ5IEVPQiBsb2dpYyAqLworCSAgfQorCSAgLyogbm90ZSBzID0gMCBmb3IgcHJvY2Vzc2luZyBaUkwgKi8KKwl9CisJLyogQWR2YW5jZSBvdmVyIGFscmVhZHktbm9uemVybyBjb2VmcyBhbmQgciBzdGlsbC16ZXJvIGNvZWZzLAorCSAqIGFwcGVuZGluZyBjb3JyZWN0aW9uIGJpdHMgdG8gdGhlIG5vbnplcm9lcy4gIEEgY29ycmVjdGlvbiBiaXQgaXMgMQorCSAqIGlmIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgY29lZmZpY2llbnQgbXVzdCBiZSBpbmNyZWFzZWQuCisJICovCisJZG8geworCSAgdGhpc2NvZWYgPSAqYmxvY2sgKyBqcGVnX25hdHVyYWxfb3JkZXJba107CisJICBpZiAoKnRoaXNjb2VmICE9IDApIHsKKwkgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgMSwgZ290byB1bmRvaXQpOworCSAgICBpZiAoR0VUX0JJVFMoMSkpIHsKKwkgICAgICBpZiAoKCp0aGlzY29lZiAmIHAxKSA9PSAwKSB7IC8qIGRvIG5vdGhpbmcgaWYgYWxyZWFkeSBzZXQgaXQgKi8KKwkJaWYgKCp0aGlzY29lZiA+PSAwKQorCQkgICp0aGlzY29lZiArPSBwMTsKKwkJZWxzZQorCQkgICp0aGlzY29lZiArPSBtMTsKKwkgICAgICB9CisJICAgIH0KKwkgIH0gZWxzZSB7CisJICAgIGlmICgtLXIgPCAwKQorCSAgICAgIGJyZWFrOwkJLyogcmVhY2hlZCB0YXJnZXQgemVybyBjb2VmZmljaWVudCAqLworCSAgfQorCSAgaysrOworCX0gd2hpbGUgKGsgPD0gU2UpOworCWlmIChzKSB7CisJICBpbnQgcG9zID0ganBlZ19uYXR1cmFsX29yZGVyW2tdOworCSAgLyogT3V0cHV0IG5ld2x5IG5vbnplcm8gY29lZmZpY2llbnQgKi8KKwkgICgqYmxvY2spW3Bvc10gPSAoSkNPRUYpIHM7CisJICAvKiBSZW1lbWJlciBpdHMgcG9zaXRpb24gaW4gY2FzZSB3ZSBoYXZlIHRvIHN1c3BlbmQgKi8KKwkgIG5ld256X3Bvc1tudW1fbmV3bnorK10gPSBwb3M7CisJfQorICAgICAgfQorICAgIH0KKworICAgIGlmIChFT0JSVU4gPiAwKSB7CisgICAgICAvKiBTY2FuIGFueSByZW1haW5pbmcgY29lZmZpY2llbnQgcG9zaXRpb25zIGFmdGVyIHRoZSBlbmQtb2YtYmFuZAorICAgICAgICogKHRoZSBsYXN0IG5ld2x5IG5vbnplcm8gY29lZmZpY2llbnQsIGlmIGFueSkuICBBcHBlbmQgYSBjb3JyZWN0aW9uCisgICAgICAgKiBiaXQgdG8gZWFjaCBhbHJlYWR5LW5vbnplcm8gY29lZmZpY2llbnQuICBBIGNvcnJlY3Rpb24gYml0IGlzIDEKKyAgICAgICAqIGlmIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgY29lZmZpY2llbnQgbXVzdCBiZSBpbmNyZWFzZWQuCisgICAgICAgKi8KKyAgICAgIGZvciAoOyBrIDw9IFNlOyBrKyspIHsKKwl0aGlzY29lZiA9ICpibG9jayArIGpwZWdfbmF0dXJhbF9vcmRlcltrXTsKKwlpZiAoKnRoaXNjb2VmICE9IDApIHsKKwkgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIDEsIGdvdG8gdW5kb2l0KTsKKwkgIGlmIChHRVRfQklUUygxKSkgeworCSAgICBpZiAoKCp0aGlzY29lZiAmIHAxKSA9PSAwKSB7IC8qIGRvIG5vdGhpbmcgaWYgYWxyZWFkeSBjaGFuZ2VkIGl0ICovCisJICAgICAgaWYgKCp0aGlzY29lZiA+PSAwKQorCQkqdGhpc2NvZWYgKz0gcDE7CisJICAgICAgZWxzZQorCQkqdGhpc2NvZWYgKz0gbTE7CisJICAgIH0KKwkgIH0KKwl9CisgICAgICB9CisgICAgICAvKiBDb3VudCBvbmUgYmxvY2sgY29tcGxldGVkIGluIEVPQiBydW4gKi8KKyAgICAgIEVPQlJVTi0tOworICAgIH0KKworICAgIC8qIENvbXBsZXRlZCBNQ1UsIHNvIHVwZGF0ZSBzdGF0ZSAqLworICAgIEJJVFJFQURfU0FWRV9TVEFURShjaW5mbyxlbnRyb3B5LT5iaXRzdGF0ZSk7CisgICAgZW50cm9weS0+c2F2ZWQuRU9CUlVOID0gRU9CUlVOOyAvKiBvbmx5IHBhcnQgb2Ygc2F2ZWQgc3RhdGUgd2UgbmVlZCAqLworICB9CisKKyAgLyogQWNjb3VudCBmb3IgcmVzdGFydCBpbnRlcnZhbCAobm8tb3AgaWYgbm90IHVzaW5nIHJlc3RhcnRzKSAqLworICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOworCisgIHJldHVybiBUUlVFOworCit1bmRvaXQ6CisgIC8qIFJlLXplcm8gYW55IG91dHB1dCBjb2VmZmljaWVudHMgdGhhdCB3ZSBtYWRlIG5ld2x5IG5vbnplcm8gKi8KKyAgd2hpbGUgKG51bV9uZXdueiA+IDApCisgICAgKCpibG9jaylbbmV3bnpfcG9zWy0tbnVtX25ld256XV0gPSAwOworCisgIHJldHVybiBGQUxTRTsKK30KKworCisvKgorICogTW9kdWxlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIHByb2dyZXNzaXZlIEh1ZmZtYW4gZW50cm9weSBkZWNvZGluZy4KKyAqLworCitHTE9CQUwodm9pZCkKK2ppbml0X3BodWZmX2RlY29kZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCit7CisgIHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHk7CisgIGludCAqY29lZl9iaXRfcHRyOworICBpbnQgY2ksIGk7CisKKyAgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0cikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCVNJWkVPRihwaHVmZl9lbnRyb3B5X2RlY29kZXIpKTsKKyAgY2luZm8tPmVudHJvcHkgPSAoc3RydWN0IGpwZWdfZW50cm9weV9kZWNvZGVyICopIGVudHJvcHk7CisgIGVudHJvcHktPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzc19waHVmZl9kZWNvZGVyOworCisgIC8qIE1hcmsgZGVyaXZlZCB0YWJsZXMgdW5hbGxvY2F0ZWQgKi8KKyAgZm9yIChpID0gMDsgaSA8IE5VTV9IVUZGX1RCTFM7IGkrKykgeworICAgIGVudHJvcHktPmRlcml2ZWRfdGJsc1tpXSA9IE5VTEw7CisgIH0KKworICAvKiBDcmVhdGUgcHJvZ3Jlc3Npb24gc3RhdHVzIHRhYmxlICovCisgIGNpbmZvLT5jb2VmX2JpdHMgPSAoaW50ICgqKVtEQ1RTSVpFMl0pCisgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkJCQljaW5mby0+bnVtX2NvbXBvbmVudHMqRENUU0laRTIqU0laRU9GKGludCkpOworICBjb2VmX2JpdF9wdHIgPSAmIGNpbmZvLT5jb2VmX2JpdHNbMF1bMF07CisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgCisgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspCisgICAgICAqY29lZl9iaXRfcHRyKysgPSAtMTsKK30KKworI2VuZGlmIC8qIERfUFJPR1JFU1NJVkVfU1VQUE9SVEVEICovCisKKyNlbmRpZiAvL19GWF9KUEVHX1RVUkJPXwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamRwb3N0Y3QuYyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pkcG9zdGN0LmMKaW5kZXggODU1YmU1Yy4uMTNiMWIxYiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamRwb3N0Y3QuYworKysgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZHBvc3RjdC5jCkBAIC0xLDI5MyArMSwyOTMgQEAKLSNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pDQotLyoNCi0gKiBqZHBvc3RjdC5jDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgVGhvbWFzIEcuIExhbmUuDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4NCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuDQotICoNCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGRlY29tcHJlc3Npb24gcG9zdHByb2Nlc3NpbmcgY29udHJvbGxlci4NCi0gKiBUaGlzIGNvbnRyb2xsZXIgbWFuYWdlcyB0aGUgdXBzYW1wbGluZywgY29sb3IgY29udmVyc2lvbiwgYW5kIGNvbG9yDQotICogcXVhbnRpemF0aW9uL3JlZHVjdGlvbiBzdGVwczsgc3BlY2lmaWNhbGx5LCBpdCBjb250cm9scyB0aGUgYnVmZmVyaW5nDQotICogYmV0d2VlbiB1cHNhbXBsZS9jb2xvciBjb252ZXJzaW9uIGFuZCBjb2xvciBxdWFudGl6YXRpb24vcmVkdWN0aW9uLg0KLSAqDQotICogSWYgbm8gY29sb3IgcXVhbnRpemF0aW9uL3JlZHVjdGlvbiBpcyByZXF1aXJlZCwgdGhlbiB0aGlzIG1vZHVsZSBoYXMgbm8NCi0gKiB3b3JrIHRvIGRvLCBhbmQgaXQganVzdCBoYW5kcyBvZmYgdG8gdGhlIHVwc2FtcGxlL2NvbG9yIGNvbnZlcnNpb24gY29kZS4NCi0gKiBBbiBpbnRlZ3JhdGVkIHVwc2FtcGxlL2NvbnZlcnQvcXVhbnRpemUgcHJvY2VzcyB3b3VsZCByZXBsYWNlIHRoaXMgbW9kdWxlDQotICogZW50aXJlbHkuDQotICovDQotDQotI2RlZmluZSBKUEVHX0lOVEVSTkFMUw0KLSNpbmNsdWRlICJqaW5jbHVkZS5oIg0KLSNpbmNsdWRlICJqcGVnbGliLmgiDQotDQotDQotLyogUHJpdmF0ZSBidWZmZXIgY29udHJvbGxlciBvYmplY3QgKi8NCi0NCi10eXBlZGVmIHN0cnVjdCB7DQotICBzdHJ1Y3QganBlZ19kX3Bvc3RfY29udHJvbGxlciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8NCi0NCi0gIC8qIENvbG9yIHF1YW50aXphdGlvbiBzb3VyY2UgYnVmZmVyOiB0aGlzIGhvbGRzIG91dHB1dCBkYXRhIGZyb20NCi0gICAqIHRoZSB1cHNhbXBsZS9jb2xvciBjb252ZXJzaW9uIHN0ZXAgdG8gYmUgcGFzc2VkIHRvIHRoZSBxdWFudGl6ZXIuDQotICAgKiBGb3IgdHdvLXBhc3MgY29sb3IgcXVhbnRpemF0aW9uLCB3ZSBuZWVkIGEgZnVsbC1pbWFnZSBidWZmZXI7DQotICAgKiBmb3Igb25lLXBhc3Mgb3BlcmF0aW9uLCBhIHN0cmlwIGJ1ZmZlciBpcyBzdWZmaWNpZW50Lg0KLSAgICovDQotICBqdmlydF9zYXJyYXlfcHRyIHdob2xlX2ltYWdlOwkvKiB2aXJ0dWFsIGFycmF5LCBvciBOVUxMIGlmIG9uZS1wYXNzICovDQotICBKU0FNUEFSUkFZIGJ1ZmZlcjsJCS8qIHN0cmlwIGJ1ZmZlciwgb3IgY3VycmVudCBzdHJpcCBvZiB2aXJ0dWFsICovDQotICBKRElNRU5TSU9OIHN0cmlwX2hlaWdodDsJLyogYnVmZmVyIHNpemUgaW4gcm93cyAqLw0KLSAgLyogZm9yIHR3by1wYXNzIG1vZGUgb25seTogKi8NCi0gIEpESU1FTlNJT04gc3RhcnRpbmdfcm93OwkvKiByb3cgIyBvZiBmaXJzdCByb3cgaW4gY3VycmVudCBzdHJpcCAqLw0KLSAgSkRJTUVOU0lPTiBuZXh0X3JvdzsJCS8qIGluZGV4IG9mIG5leHQgcm93IHRvIGZpbGwvZW1wdHkgaW4gc3RyaXAgKi8NCi19IG15X3Bvc3RfY29udHJvbGxlcjsNCi0NCi10eXBlZGVmIG15X3Bvc3RfY29udHJvbGxlciAqIG15X3Bvc3RfcHRyOw0KLQ0KLQ0KLS8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovDQotTUVUSE9EREVGKHZvaWQpIHBvc3RfcHJvY2Vzc18xcGFzcw0KLQlKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sDQotCSAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gKmluX3Jvd19ncm91cF9jdHIsDQotCSAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBzX2F2YWlsLA0KLQkgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsDQotCSAgICAgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkpOw0KLSNpZmRlZiBRVUFOVF8yUEFTU19TVVBQT1JURUQNCi1NRVRIT0RERUYodm9pZCkgcG9zdF9wcm9jZXNzX3ByZXBhc3MNCi0JSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLA0KLQkgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3Vwc19hdmFpbCwNCi0JICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLA0KLQkgICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpKTsNCi1NRVRIT0RERUYodm9pZCkgcG9zdF9wcm9jZXNzXzJwYXNzDQotCUpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2dyb3VwX2N0ciwNCi0JICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cHNfYXZhaWwsDQotCSAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwNCi0JICAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKSk7DQotI2VuZGlmDQotDQotDQotLyoNCi0gKiBJbml0aWFsaXplIGZvciBhIHByb2Nlc3NpbmcgcGFzcy4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1zdGFydF9wYXNzX2Rwb3N0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKX0JVRl9NT0RFIHBhc3NfbW9kZSkNCi17DQotICBteV9wb3N0X3B0ciBwb3N0ID0gKG15X3Bvc3RfcHRyKSBjaW5mby0+cG9zdDsNCi0NCi0gIHN3aXRjaCAocGFzc19tb2RlKSB7DQotICBjYXNlIEpCVUZfUEFTU19USFJVOg0KLSAgICBpZiAoY2luZm8tPnF1YW50aXplX2NvbG9ycykgew0KLSAgICAgIC8qIFNpbmdsZS1wYXNzIHByb2Nlc3Npbmcgd2l0aCBjb2xvciBxdWFudGl6YXRpb24uICovDQotICAgICAgcG9zdC0+cHViLnBvc3RfcHJvY2Vzc19kYXRhID0gcG9zdF9wcm9jZXNzXzFwYXNzOw0KLSAgICAgIC8qIFdlIGNvdWxkIGJlIGRvaW5nIGJ1ZmZlcmVkLWltYWdlIG91dHB1dCBiZWZvcmUgc3RhcnRpbmcgYSAyLXBhc3MNCi0gICAgICAgKiBjb2xvciBxdWFudGl6YXRpb247IGluIHRoYXQgY2FzZSwgamluaXRfZF9wb3N0X2NvbnRyb2xsZXIgZGlkIG5vdA0KLSAgICAgICAqIGFsbG9jYXRlIGEgc3RyaXAgYnVmZmVyLiAgVXNlIHRoZSB2aXJ0dWFsLWFycmF5IGJ1ZmZlciBhcyB3b3Jrc3BhY2UuDQotICAgICAgICovDQotICAgICAgaWYgKHBvc3QtPmJ1ZmZlciA9PSBOVUxMKSB7DQotCXBvc3QtPmJ1ZmZlciA9ICgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfc2FycmF5KQ0KLQkgICgoal9jb21tb25fcHRyKSBjaW5mbywgcG9zdC0+d2hvbGVfaW1hZ2UsDQotCSAgIChKRElNRU5TSU9OKSAwLCBwb3N0LT5zdHJpcF9oZWlnaHQsIFRSVUUpOw0KLSAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAvKiBGb3Igc2luZ2xlLXBhc3MgcHJvY2Vzc2luZyB3aXRob3V0IGNvbG9yIHF1YW50aXphdGlvbiwNCi0gICAgICAgKiBJIGhhdmUgbm8gd29yayB0byBkbzsganVzdCBjYWxsIHRoZSB1cHNhbXBsZXIgZGlyZWN0bHkuDQotICAgICAgICovDQotICAgICAgcG9zdC0+cHViLnBvc3RfcHJvY2Vzc19kYXRhID0gY2luZm8tPnVwc2FtcGxlLT51cHNhbXBsZTsNCi0gICAgfQ0KLSAgICBicmVhazsNCi0jaWZkZWYgUVVBTlRfMlBBU1NfU1VQUE9SVEVEDQotICBjYXNlIEpCVUZfU0FWRV9BTkRfUEFTUzoNCi0gICAgLyogRmlyc3QgcGFzcyBvZiAyLXBhc3MgcXVhbnRpemF0aW9uICovDQotICAgIGlmIChwb3N0LT53aG9sZV9pbWFnZSA9PSBOVUxMKQ0KLSAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0JVRkZFUl9NT0RFKTsNCi0gICAgcG9zdC0+cHViLnBvc3RfcHJvY2Vzc19kYXRhID0gcG9zdF9wcm9jZXNzX3ByZXBhc3M7DQotICAgIGJyZWFrOw0KLSAgY2FzZSBKQlVGX0NSQU5LX0RFU1Q6DQotICAgIC8qIFNlY29uZCBwYXNzIG9mIDItcGFzcyBxdWFudGl6YXRpb24gKi8NCi0gICAgaWYgKHBvc3QtPndob2xlX2ltYWdlID09IE5VTEwpDQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOw0KLSAgICBwb3N0LT5wdWIucG9zdF9wcm9jZXNzX2RhdGEgPSBwb3N0X3Byb2Nlc3NfMnBhc3M7DQotICAgIGJyZWFrOw0KLSNlbmRpZiAvKiBRVUFOVF8yUEFTU19TVVBQT1JURUQgKi8NCi0gIGRlZmF1bHQ6DQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0JVRkZFUl9NT0RFKTsNCi0gICAgYnJlYWs7DQotICB9DQotICBwb3N0LT5zdGFydGluZ19yb3cgPSBwb3N0LT5uZXh0X3JvdyA9IDA7DQotfQ0KLQ0KLQ0KLS8qDQotICogUHJvY2VzcyBzb21lIGRhdGEgaW4gdGhlIG9uZS1wYXNzIChzdHJpcCBidWZmZXIpIGNhc2UuDQotICogVGhpcyBpcyB1c2VkIGZvciBjb2xvciBwcmVjaXNpb24gcmVkdWN0aW9uIGFzIHdlbGwgYXMgb25lLXBhc3MgcXVhbnRpemF0aW9uLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXBvc3RfcHJvY2Vzc18xcGFzcyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCSAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2dyb3VwX2N0ciwNCi0JCSAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cHNfYXZhaWwsDQotCQkgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwNCi0JCSAgICBKRElNRU5TSU9OIG91dF9yb3dzX2F2YWlsKQ0KLXsNCi0gIG15X3Bvc3RfcHRyIHBvc3QgPSAobXlfcG9zdF9wdHIpIGNpbmZvLT5wb3N0Ow0KLSAgSkRJTUVOU0lPTiBudW1fcm93cywgbWF4X3Jvd3M7DQotDQotICAvKiBGaWxsIHRoZSBidWZmZXIsIGJ1dCBub3QgbW9yZSB0aGFuIHdoYXQgd2UgY2FuIGR1bXAgb3V0IGluIG9uZSBnby4gKi8NCi0gIC8qIE5vdGUgd2UgcmVseSBvbiB0aGUgdXBzYW1wbGVyIHRvIGRldGVjdCBib3R0b20gb2YgaW1hZ2UuICovDQotICBtYXhfcm93cyA9IG91dF9yb3dzX2F2YWlsIC0gKm91dF9yb3dfY3RyOw0KLSAgaWYgKG1heF9yb3dzID4gcG9zdC0+c3RyaXBfaGVpZ2h0KQ0KLSAgICBtYXhfcm93cyA9IHBvc3QtPnN0cmlwX2hlaWdodDsNCi0gIG51bV9yb3dzID0gMDsNCi0gICgqY2luZm8tPnVwc2FtcGxlLT51cHNhbXBsZSkgKGNpbmZvLA0KLQkJaW5wdXRfYnVmLCBpbl9yb3dfZ3JvdXBfY3RyLCBpbl9yb3dfZ3JvdXBzX2F2YWlsLA0KLQkJcG9zdC0+YnVmZmVyLCAmbnVtX3Jvd3MsIG1heF9yb3dzKTsNCi0gIC8qIFF1YW50aXplIGFuZCBlbWl0IGRhdGEuICovDQotICAoKmNpbmZvLT5jcXVhbnRpemUtPmNvbG9yX3F1YW50aXplKSAoY2luZm8sDQotCQlwb3N0LT5idWZmZXIsIG91dHB1dF9idWYgKyAqb3V0X3Jvd19jdHIsIChpbnQpIG51bV9yb3dzKTsNCi0gICpvdXRfcm93X2N0ciArPSBudW1fcm93czsNCi19DQotDQotDQotI2lmZGVmIFFVQU5UXzJQQVNTX1NVUFBPUlRFRA0KLQ0KLS8qDQotICogUHJvY2VzcyBzb21lIGRhdGEgaW4gdGhlIGZpcnN0IHBhc3Mgb2YgMi1wYXNzIHF1YW50aXphdGlvbi4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1wb3N0X3Byb2Nlc3NfcHJlcGFzcyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCSAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLA0KLQkJICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBzX2F2YWlsLA0KLQkJICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwNCi0JCSAgICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpDQotew0KLSAgbXlfcG9zdF9wdHIgcG9zdCA9IChteV9wb3N0X3B0cikgY2luZm8tPnBvc3Q7DQotICBKRElNRU5TSU9OIG9sZF9uZXh0X3JvdywgbnVtX3Jvd3M7DQotDQotICAvKiBSZXBvc2l0aW9uIHZpcnR1YWwgYnVmZmVyIGlmIGF0IHN0YXJ0IG9mIHN0cmlwLiAqLw0KLSAgaWYgKHBvc3QtPm5leHRfcm93ID09IDApIHsNCi0gICAgcG9zdC0+YnVmZmVyID0gKCpjaW5mby0+bWVtLT5hY2Nlc3NfdmlydF9zYXJyYXkpDQotCSgoal9jb21tb25fcHRyKSBjaW5mbywgcG9zdC0+d2hvbGVfaW1hZ2UsDQotCSBwb3N0LT5zdGFydGluZ19yb3csIHBvc3QtPnN0cmlwX2hlaWdodCwgVFJVRSk7DQotICB9DQotDQotICAvKiBVcHNhbXBsZSBzb21lIGRhdGEgKHVwIHRvIGEgc3RyaXAgaGVpZ2h0J3Mgd29ydGgpLiAqLw0KLSAgb2xkX25leHRfcm93ID0gcG9zdC0+bmV4dF9yb3c7DQotICAoKmNpbmZvLT51cHNhbXBsZS0+dXBzYW1wbGUpIChjaW5mbywNCi0JCWlucHV0X2J1ZiwgaW5fcm93X2dyb3VwX2N0ciwgaW5fcm93X2dyb3Vwc19hdmFpbCwNCi0JCXBvc3QtPmJ1ZmZlciwgJnBvc3QtPm5leHRfcm93LCBwb3N0LT5zdHJpcF9oZWlnaHQpOw0KLQ0KLSAgLyogQWxsb3cgcXVhbnRpemVyIHRvIHNjYW4gbmV3IGRhdGEuICBObyBkYXRhIGlzIGVtaXR0ZWQsICovDQotICAvKiBidXQgd2UgYWR2YW5jZSBvdXRfcm93X2N0ciBzbyBvdXRlciBsb29wIGNhbiB0ZWxsIHdoZW4gd2UncmUgZG9uZS4gKi8NCi0gIGlmIChwb3N0LT5uZXh0X3JvdyA+IG9sZF9uZXh0X3Jvdykgew0KLSAgICBudW1fcm93cyA9IHBvc3QtPm5leHRfcm93IC0gb2xkX25leHRfcm93Ow0KLSAgICAoKmNpbmZvLT5jcXVhbnRpemUtPmNvbG9yX3F1YW50aXplKSAoY2luZm8sIHBvc3QtPmJ1ZmZlciArIG9sZF9uZXh0X3JvdywNCi0JCQkJCSAoSlNBTVBBUlJBWSkgTlVMTCwgKGludCkgbnVtX3Jvd3MpOw0KLSAgICAqb3V0X3Jvd19jdHIgKz0gbnVtX3Jvd3M7DQotICB9DQotDQotICAvKiBBZHZhbmNlIGlmIHdlIGZpbGxlZCB0aGUgc3RyaXAuICovDQotICBpZiAocG9zdC0+bmV4dF9yb3cgPj0gcG9zdC0+c3RyaXBfaGVpZ2h0KSB7DQotICAgIHBvc3QtPnN0YXJ0aW5nX3JvdyArPSBwb3N0LT5zdHJpcF9oZWlnaHQ7DQotICAgIHBvc3QtPm5leHRfcm93ID0gMDsNCi0gIH0NCi19DQotDQotDQotLyoNCi0gKiBQcm9jZXNzIHNvbWUgZGF0YSBpbiB0aGUgc2Vjb25kIHBhc3Mgb2YgMi1wYXNzIHF1YW50aXphdGlvbi4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1wb3N0X3Byb2Nlc3NfMnBhc3MgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sDQotCQkgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gKmluX3Jvd19ncm91cF9jdHIsDQotCQkgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBzX2F2YWlsLA0KLQkJICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsDQotCQkgICAgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkNCi17DQotICBteV9wb3N0X3B0ciBwb3N0ID0gKG15X3Bvc3RfcHRyKSBjaW5mby0+cG9zdDsNCi0gIEpESU1FTlNJT04gbnVtX3Jvd3MsIG1heF9yb3dzOw0KLQ0KLSAgLyogUmVwb3NpdGlvbiB2aXJ0dWFsIGJ1ZmZlciBpZiBhdCBzdGFydCBvZiBzdHJpcC4gKi8NCi0gIGlmIChwb3N0LT5uZXh0X3JvdyA9PSAwKSB7DQotICAgIHBvc3QtPmJ1ZmZlciA9ICgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfc2FycmF5KQ0KLQkoKGpfY29tbW9uX3B0cikgY2luZm8sIHBvc3QtPndob2xlX2ltYWdlLA0KLQkgcG9zdC0+c3RhcnRpbmdfcm93LCBwb3N0LT5zdHJpcF9oZWlnaHQsIEZBTFNFKTsNCi0gIH0NCi0NCi0gIC8qIERldGVybWluZSBudW1iZXIgb2Ygcm93cyB0byBlbWl0LiAqLw0KLSAgbnVtX3Jvd3MgPSBwb3N0LT5zdHJpcF9oZWlnaHQgLSBwb3N0LT5uZXh0X3JvdzsgLyogYXZhaWxhYmxlIGluIHN0cmlwICovDQotICBtYXhfcm93cyA9IG91dF9yb3dzX2F2YWlsIC0gKm91dF9yb3dfY3RyOyAvKiBhdmFpbGFibGUgaW4gb3V0cHV0IGFyZWEgKi8NCi0gIGlmIChudW1fcm93cyA+IG1heF9yb3dzKQ0KLSAgICBudW1fcm93cyA9IG1heF9yb3dzOw0KLSAgLyogV2UgaGF2ZSB0byBjaGVjayBib3R0b20gb2YgaW1hZ2UgaGVyZSwgY2FuJ3QgZGVwZW5kIG9uIHVwc2FtcGxlci4gKi8NCi0gIG1heF9yb3dzID0gY2luZm8tPm91dHB1dF9oZWlnaHQgLSBwb3N0LT5zdGFydGluZ19yb3c7DQotICBpZiAobnVtX3Jvd3MgPiBtYXhfcm93cykNCi0gICAgbnVtX3Jvd3MgPSBtYXhfcm93czsNCi0NCi0gIC8qIFF1YW50aXplIGFuZCBlbWl0IGRhdGEuICovDQotICAoKmNpbmZvLT5jcXVhbnRpemUtPmNvbG9yX3F1YW50aXplKSAoY2luZm8sDQotCQlwb3N0LT5idWZmZXIgKyBwb3N0LT5uZXh0X3Jvdywgb3V0cHV0X2J1ZiArICpvdXRfcm93X2N0ciwNCi0JCShpbnQpIG51bV9yb3dzKTsNCi0gICpvdXRfcm93X2N0ciArPSBudW1fcm93czsNCi0NCi0gIC8qIEFkdmFuY2UgaWYgd2UgZmlsbGVkIHRoZSBzdHJpcC4gKi8NCi0gIHBvc3QtPm5leHRfcm93ICs9IG51bV9yb3dzOw0KLSAgaWYgKHBvc3QtPm5leHRfcm93ID49IHBvc3QtPnN0cmlwX2hlaWdodCkgew0KLSAgICBwb3N0LT5zdGFydGluZ19yb3cgKz0gcG9zdC0+c3RyaXBfaGVpZ2h0Ow0KLSAgICBwb3N0LT5uZXh0X3JvdyA9IDA7DQotICB9DQotfQ0KLQ0KLSNlbmRpZiAvKiBRVUFOVF8yUEFTU19TVVBQT1JURUQgKi8NCi0NCi0NCi0vKg0KLSAqIEluaXRpYWxpemUgcG9zdHByb2Nlc3NpbmcgY29udHJvbGxlci4NCi0gKi8NCi0NCi1HTE9CQUwodm9pZCkNCi1qaW5pdF9kX3Bvc3RfY29udHJvbGxlciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBuZWVkX2Z1bGxfYnVmZmVyKQ0KLXsNCi0gIG15X3Bvc3RfcHRyIHBvc3Q7DQotDQotICBwb3N0ID0gKG15X3Bvc3RfcHRyKQ0KLSAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkJCQlTSVpFT0YobXlfcG9zdF9jb250cm9sbGVyKSk7DQotICBjaW5mby0+cG9zdCA9IChzdHJ1Y3QganBlZ19kX3Bvc3RfY29udHJvbGxlciAqKSBwb3N0Ow0KLSAgcG9zdC0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX2Rwb3N0Ow0KLSAgcG9zdC0+d2hvbGVfaW1hZ2UgPSBOVUxMOwkvKiBmbGFnIGZvciBubyB2aXJ0dWFsIGFycmF5cyAqLw0KLSAgcG9zdC0+YnVmZmVyID0gTlVMTDsJCS8qIGZsYWcgZm9yIG5vIHN0cmlwIGJ1ZmZlciAqLw0KLQ0KLSAgLyogQ3JlYXRlIHRoZSBxdWFudGl6YXRpb24gYnVmZmVyLCBpZiBuZWVkZWQgKi8NCi0gIGlmIChjaW5mby0+cXVhbnRpemVfY29sb3JzKSB7DQotICAgIC8qIFRoZSBidWZmZXIgc3RyaXAgaGVpZ2h0IGlzIG1heF92X3NhbXBfZmFjdG9yLCB3aGljaCBpcyB0eXBpY2FsbHkNCi0gICAgICogYW4gZWZmaWNpZW50IG51bWJlciBvZiByb3dzIGZvciB1cHNhbXBsaW5nIHRvIHJldHVybi4NCi0gICAgICogKEluIHRoZSBwcmVzZW5jZSBvZiBvdXRwdXQgcmVzY2FsaW5nLCB3ZSBtaWdodCB3YW50IHRvIGJlIHNtYXJ0ZXI/KQ0KLSAgICAgKi8NCi0gICAgcG9zdC0+c3RyaXBfaGVpZ2h0ID0gKEpESU1FTlNJT04pIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcjsNCi0gICAgaWYgKG5lZWRfZnVsbF9idWZmZXIpIHsNCi0gICAgICAvKiBUd28tcGFzcyBjb2xvciBxdWFudGl6YXRpb246IG5lZWQgZnVsbC1pbWFnZSBzdG9yYWdlLiAqLw0KLSAgICAgIC8qIFdlIHJvdW5kIHVwIHRoZSBudW1iZXIgb2Ygcm93cyB0byBhIG11bHRpcGxlIG9mIHRoZSBzdHJpcCBoZWlnaHQuICovDQotI2lmZGVmIFFVQU5UXzJQQVNTX1NVUFBPUlRFRA0KLSAgICAgIHBvc3QtPndob2xlX2ltYWdlID0gKCpjaW5mby0+bWVtLT5yZXF1ZXN0X3ZpcnRfc2FycmF5KQ0KLQkoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLCBGQUxTRSwNCi0JIGNpbmZvLT5vdXRwdXRfd2lkdGggKiBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMsDQotCSAoSkRJTUVOU0lPTikganJvdW5kX3VwKChsb25nKSBjaW5mby0+b3V0cHV0X2hlaWdodCwNCi0JCQkJKGxvbmcpIHBvc3QtPnN0cmlwX2hlaWdodCksDQotCSBwb3N0LT5zdHJpcF9oZWlnaHQpOw0KLSNlbHNlDQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOw0KLSNlbmRpZiAvKiBRVUFOVF8yUEFTU19TVVBQT1JURUQgKi8NCi0gICAgfSBlbHNlIHsNCi0gICAgICAvKiBPbmUtcGFzcyBjb2xvciBxdWFudGl6YXRpb246IGp1c3QgbWFrZSBhIHN0cmlwIGJ1ZmZlci4gKi8NCi0gICAgICBwb3N0LT5idWZmZXIgPSAoKmNpbmZvLT5tZW0tPmFsbG9jX3NhcnJheSkNCi0JKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwNCi0JIGNpbmZvLT5vdXRwdXRfd2lkdGggKiBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMsDQotCSBwb3N0LT5zdHJpcF9oZWlnaHQpOw0KLSAgICB9DQotICB9DQotfQ0KLQ0KLSNlbmRpZiAvL19GWF9KUEVHX1RVUkJPXw0KKyNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pCisvKgorICogamRwb3N0Y3QuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWNvbXByZXNzaW9uIHBvc3Rwcm9jZXNzaW5nIGNvbnRyb2xsZXIuCisgKiBUaGlzIGNvbnRyb2xsZXIgbWFuYWdlcyB0aGUgdXBzYW1wbGluZywgY29sb3IgY29udmVyc2lvbiwgYW5kIGNvbG9yCisgKiBxdWFudGl6YXRpb24vcmVkdWN0aW9uIHN0ZXBzOyBzcGVjaWZpY2FsbHksIGl0IGNvbnRyb2xzIHRoZSBidWZmZXJpbmcKKyAqIGJldHdlZW4gdXBzYW1wbGUvY29sb3IgY29udmVyc2lvbiBhbmQgY29sb3IgcXVhbnRpemF0aW9uL3JlZHVjdGlvbi4KKyAqCisgKiBJZiBubyBjb2xvciBxdWFudGl6YXRpb24vcmVkdWN0aW9uIGlzIHJlcXVpcmVkLCB0aGVuIHRoaXMgbW9kdWxlIGhhcyBubworICogd29yayB0byBkbywgYW5kIGl0IGp1c3QgaGFuZHMgb2ZmIHRvIHRoZSB1cHNhbXBsZS9jb2xvciBjb252ZXJzaW9uIGNvZGUuCisgKiBBbiBpbnRlZ3JhdGVkIHVwc2FtcGxlL2NvbnZlcnQvcXVhbnRpemUgcHJvY2VzcyB3b3VsZCByZXBsYWNlIHRoaXMgbW9kdWxlCisgKiBlbnRpcmVseS4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisKKworLyogUHJpdmF0ZSBidWZmZXIgY29udHJvbGxlciBvYmplY3QgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QganBlZ19kX3Bvc3RfY29udHJvbGxlciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICAvKiBDb2xvciBxdWFudGl6YXRpb24gc291cmNlIGJ1ZmZlcjogdGhpcyBob2xkcyBvdXRwdXQgZGF0YSBmcm9tCisgICAqIHRoZSB1cHNhbXBsZS9jb2xvciBjb252ZXJzaW9uIHN0ZXAgdG8gYmUgcGFzc2VkIHRvIHRoZSBxdWFudGl6ZXIuCisgICAqIEZvciB0d28tcGFzcyBjb2xvciBxdWFudGl6YXRpb24sIHdlIG5lZWQgYSBmdWxsLWltYWdlIGJ1ZmZlcjsKKyAgICogZm9yIG9uZS1wYXNzIG9wZXJhdGlvbiwgYSBzdHJpcCBidWZmZXIgaXMgc3VmZmljaWVudC4KKyAgICovCisgIGp2aXJ0X3NhcnJheV9wdHIgd2hvbGVfaW1hZ2U7CS8qIHZpcnR1YWwgYXJyYXksIG9yIE5VTEwgaWYgb25lLXBhc3MgKi8KKyAgSlNBTVBBUlJBWSBidWZmZXI7CQkvKiBzdHJpcCBidWZmZXIsIG9yIGN1cnJlbnQgc3RyaXAgb2YgdmlydHVhbCAqLworICBKRElNRU5TSU9OIHN0cmlwX2hlaWdodDsJLyogYnVmZmVyIHNpemUgaW4gcm93cyAqLworICAvKiBmb3IgdHdvLXBhc3MgbW9kZSBvbmx5OiAqLworICBKRElNRU5TSU9OIHN0YXJ0aW5nX3JvdzsJLyogcm93ICMgb2YgZmlyc3Qgcm93IGluIGN1cnJlbnQgc3RyaXAgKi8KKyAgSkRJTUVOU0lPTiBuZXh0X3JvdzsJCS8qIGluZGV4IG9mIG5leHQgcm93IHRvIGZpbGwvZW1wdHkgaW4gc3RyaXAgKi8KK30gbXlfcG9zdF9jb250cm9sbGVyOworCit0eXBlZGVmIG15X3Bvc3RfY29udHJvbGxlciAqIG15X3Bvc3RfcHRyOworCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitNRVRIT0RERUYodm9pZCkgcG9zdF9wcm9jZXNzXzFwYXNzCisJSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorCSAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gKmluX3Jvd19ncm91cF9jdHIsCisJICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cHNfYXZhaWwsCisJICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLAorCSAgICAgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkpOworI2lmZGVmIFFVQU5UXzJQQVNTX1NVUFBPUlRFRAorTUVUSE9EREVGKHZvaWQpIHBvc3RfcHJvY2Vzc19wcmVwYXNzCisJSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorCSAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gKmluX3Jvd19ncm91cF9jdHIsCisJICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cHNfYXZhaWwsCisJICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLAorCSAgICAgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkpOworTUVUSE9EREVGKHZvaWQpIHBvc3RfcHJvY2Vzc18ycGFzcworCUpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLAorCSAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBzX2F2YWlsLAorCSAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwKKwkgICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpKTsKKyNlbmRpZgorCisKKy8qCisgKiBJbml0aWFsaXplIGZvciBhIHByb2Nlc3NpbmcgcGFzcy4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3N0YXJ0X3Bhc3NfZHBvc3QgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpfQlVGX01PREUgcGFzc19tb2RlKQoreworICBteV9wb3N0X3B0ciBwb3N0ID0gKG15X3Bvc3RfcHRyKSBjaW5mby0+cG9zdDsKKworICBzd2l0Y2ggKHBhc3NfbW9kZSkgeworICBjYXNlIEpCVUZfUEFTU19USFJVOgorICAgIGlmIChjaW5mby0+cXVhbnRpemVfY29sb3JzKSB7CisgICAgICAvKiBTaW5nbGUtcGFzcyBwcm9jZXNzaW5nIHdpdGggY29sb3IgcXVhbnRpemF0aW9uLiAqLworICAgICAgcG9zdC0+cHViLnBvc3RfcHJvY2Vzc19kYXRhID0gcG9zdF9wcm9jZXNzXzFwYXNzOworICAgICAgLyogV2UgY291bGQgYmUgZG9pbmcgYnVmZmVyZWQtaW1hZ2Ugb3V0cHV0IGJlZm9yZSBzdGFydGluZyBhIDItcGFzcworICAgICAgICogY29sb3IgcXVhbnRpemF0aW9uOyBpbiB0aGF0IGNhc2UsIGppbml0X2RfcG9zdF9jb250cm9sbGVyIGRpZCBub3QKKyAgICAgICAqIGFsbG9jYXRlIGEgc3RyaXAgYnVmZmVyLiAgVXNlIHRoZSB2aXJ0dWFsLWFycmF5IGJ1ZmZlciBhcyB3b3Jrc3BhY2UuCisgICAgICAgKi8KKyAgICAgIGlmIChwb3N0LT5idWZmZXIgPT0gTlVMTCkgeworCXBvc3QtPmJ1ZmZlciA9ICgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfc2FycmF5KQorCSAgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBwb3N0LT53aG9sZV9pbWFnZSwKKwkgICAoSkRJTUVOU0lPTikgMCwgcG9zdC0+c3RyaXBfaGVpZ2h0LCBUUlVFKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLyogRm9yIHNpbmdsZS1wYXNzIHByb2Nlc3Npbmcgd2l0aG91dCBjb2xvciBxdWFudGl6YXRpb24sCisgICAgICAgKiBJIGhhdmUgbm8gd29yayB0byBkbzsganVzdCBjYWxsIHRoZSB1cHNhbXBsZXIgZGlyZWN0bHkuCisgICAgICAgKi8KKyAgICAgIHBvc3QtPnB1Yi5wb3N0X3Byb2Nlc3NfZGF0YSA9IGNpbmZvLT51cHNhbXBsZS0+dXBzYW1wbGU7CisgICAgfQorICAgIGJyZWFrOworI2lmZGVmIFFVQU5UXzJQQVNTX1NVUFBPUlRFRAorICBjYXNlIEpCVUZfU0FWRV9BTkRfUEFTUzoKKyAgICAvKiBGaXJzdCBwYXNzIG9mIDItcGFzcyBxdWFudGl6YXRpb24gKi8KKyAgICBpZiAocG9zdC0+d2hvbGVfaW1hZ2UgPT0gTlVMTCkKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0JVRkZFUl9NT0RFKTsKKyAgICBwb3N0LT5wdWIucG9zdF9wcm9jZXNzX2RhdGEgPSBwb3N0X3Byb2Nlc3NfcHJlcGFzczsKKyAgICBicmVhazsKKyAgY2FzZSBKQlVGX0NSQU5LX0RFU1Q6CisgICAgLyogU2Vjb25kIHBhc3Mgb2YgMi1wYXNzIHF1YW50aXphdGlvbiAqLworICAgIGlmIChwb3N0LT53aG9sZV9pbWFnZSA9PSBOVUxMKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQlVGRkVSX01PREUpOworICAgIHBvc3QtPnB1Yi5wb3N0X3Byb2Nlc3NfZGF0YSA9IHBvc3RfcHJvY2Vzc18ycGFzczsKKyAgICBicmVhazsKKyNlbmRpZiAvKiBRVUFOVF8yUEFTU19TVVBQT1JURUQgKi8KKyAgZGVmYXVsdDoKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7CisgICAgYnJlYWs7CisgIH0KKyAgcG9zdC0+c3RhcnRpbmdfcm93ID0gcG9zdC0+bmV4dF9yb3cgPSAwOworfQorCisKKy8qCisgKiBQcm9jZXNzIHNvbWUgZGF0YSBpbiB0aGUgb25lLXBhc3MgKHN0cmlwIGJ1ZmZlcikgY2FzZS4KKyAqIFRoaXMgaXMgdXNlZCBmb3IgY29sb3IgcHJlY2lzaW9uIHJlZHVjdGlvbiBhcyB3ZWxsIGFzIG9uZS1wYXNzIHF1YW50aXphdGlvbi4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3Bvc3RfcHJvY2Vzc18xcGFzcyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLAorCQkgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBzX2F2YWlsLAorCQkgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwKKwkJICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpCit7CisgIG15X3Bvc3RfcHRyIHBvc3QgPSAobXlfcG9zdF9wdHIpIGNpbmZvLT5wb3N0OworICBKRElNRU5TSU9OIG51bV9yb3dzLCBtYXhfcm93czsKKworICAvKiBGaWxsIHRoZSBidWZmZXIsIGJ1dCBub3QgbW9yZSB0aGFuIHdoYXQgd2UgY2FuIGR1bXAgb3V0IGluIG9uZSBnby4gKi8KKyAgLyogTm90ZSB3ZSByZWx5IG9uIHRoZSB1cHNhbXBsZXIgdG8gZGV0ZWN0IGJvdHRvbSBvZiBpbWFnZS4gKi8KKyAgbWF4X3Jvd3MgPSBvdXRfcm93c19hdmFpbCAtICpvdXRfcm93X2N0cjsKKyAgaWYgKG1heF9yb3dzID4gcG9zdC0+c3RyaXBfaGVpZ2h0KQorICAgIG1heF9yb3dzID0gcG9zdC0+c3RyaXBfaGVpZ2h0OworICBudW1fcm93cyA9IDA7CisgICgqY2luZm8tPnVwc2FtcGxlLT51cHNhbXBsZSkgKGNpbmZvLAorCQlpbnB1dF9idWYsIGluX3Jvd19ncm91cF9jdHIsIGluX3Jvd19ncm91cHNfYXZhaWwsCisJCXBvc3QtPmJ1ZmZlciwgJm51bV9yb3dzLCBtYXhfcm93cyk7CisgIC8qIFF1YW50aXplIGFuZCBlbWl0IGRhdGEuICovCisgICgqY2luZm8tPmNxdWFudGl6ZS0+Y29sb3JfcXVhbnRpemUpIChjaW5mbywKKwkJcG9zdC0+YnVmZmVyLCBvdXRwdXRfYnVmICsgKm91dF9yb3dfY3RyLCAoaW50KSBudW1fcm93cyk7CisgICpvdXRfcm93X2N0ciArPSBudW1fcm93czsKK30KKworCisjaWZkZWYgUVVBTlRfMlBBU1NfU1VQUE9SVEVECisKKy8qCisgKiBQcm9jZXNzIHNvbWUgZGF0YSBpbiB0aGUgZmlyc3QgcGFzcyBvZiAyLXBhc3MgcXVhbnRpemF0aW9uLgorICovCisKK01FVEhPRERFRih2b2lkKQorcG9zdF9wcm9jZXNzX3ByZXBhc3MgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisJCSAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLAorCQkgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cHNfYXZhaWwsCisJCSAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCisJCSAgICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpCit7CisgIG15X3Bvc3RfcHRyIHBvc3QgPSAobXlfcG9zdF9wdHIpIGNpbmZvLT5wb3N0OworICBKRElNRU5TSU9OIG9sZF9uZXh0X3JvdywgbnVtX3Jvd3M7CisKKyAgLyogUmVwb3NpdGlvbiB2aXJ0dWFsIGJ1ZmZlciBpZiBhdCBzdGFydCBvZiBzdHJpcC4gKi8KKyAgaWYgKHBvc3QtPm5leHRfcm93ID09IDApIHsKKyAgICBwb3N0LT5idWZmZXIgPSAoKmNpbmZvLT5tZW0tPmFjY2Vzc192aXJ0X3NhcnJheSkKKwkoKGpfY29tbW9uX3B0cikgY2luZm8sIHBvc3QtPndob2xlX2ltYWdlLAorCSBwb3N0LT5zdGFydGluZ19yb3csIHBvc3QtPnN0cmlwX2hlaWdodCwgVFJVRSk7CisgIH0KKworICAvKiBVcHNhbXBsZSBzb21lIGRhdGEgKHVwIHRvIGEgc3RyaXAgaGVpZ2h0J3Mgd29ydGgpLiAqLworICBvbGRfbmV4dF9yb3cgPSBwb3N0LT5uZXh0X3JvdzsKKyAgKCpjaW5mby0+dXBzYW1wbGUtPnVwc2FtcGxlKSAoY2luZm8sCisJCWlucHV0X2J1ZiwgaW5fcm93X2dyb3VwX2N0ciwgaW5fcm93X2dyb3Vwc19hdmFpbCwKKwkJcG9zdC0+YnVmZmVyLCAmcG9zdC0+bmV4dF9yb3csIHBvc3QtPnN0cmlwX2hlaWdodCk7CisKKyAgLyogQWxsb3cgcXVhbnRpemVyIHRvIHNjYW4gbmV3IGRhdGEuICBObyBkYXRhIGlzIGVtaXR0ZWQsICovCisgIC8qIGJ1dCB3ZSBhZHZhbmNlIG91dF9yb3dfY3RyIHNvIG91dGVyIGxvb3AgY2FuIHRlbGwgd2hlbiB3ZSdyZSBkb25lLiAqLworICBpZiAocG9zdC0+bmV4dF9yb3cgPiBvbGRfbmV4dF9yb3cpIHsKKyAgICBudW1fcm93cyA9IHBvc3QtPm5leHRfcm93IC0gb2xkX25leHRfcm93OworICAgICgqY2luZm8tPmNxdWFudGl6ZS0+Y29sb3JfcXVhbnRpemUpIChjaW5mbywgcG9zdC0+YnVmZmVyICsgb2xkX25leHRfcm93LAorCQkJCQkgKEpTQU1QQVJSQVkpIE5VTEwsIChpbnQpIG51bV9yb3dzKTsKKyAgICAqb3V0X3Jvd19jdHIgKz0gbnVtX3Jvd3M7CisgIH0KKworICAvKiBBZHZhbmNlIGlmIHdlIGZpbGxlZCB0aGUgc3RyaXAuICovCisgIGlmIChwb3N0LT5uZXh0X3JvdyA+PSBwb3N0LT5zdHJpcF9oZWlnaHQpIHsKKyAgICBwb3N0LT5zdGFydGluZ19yb3cgKz0gcG9zdC0+c3RyaXBfaGVpZ2h0OworICAgIHBvc3QtPm5leHRfcm93ID0gMDsKKyAgfQorfQorCisKKy8qCisgKiBQcm9jZXNzIHNvbWUgZGF0YSBpbiB0aGUgc2Vjb25kIHBhc3Mgb2YgMi1wYXNzIHF1YW50aXphdGlvbi4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3Bvc3RfcHJvY2Vzc18ycGFzcyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLAorCQkgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBzX2F2YWlsLAorCQkgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwKKwkJICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpCit7CisgIG15X3Bvc3RfcHRyIHBvc3QgPSAobXlfcG9zdF9wdHIpIGNpbmZvLT5wb3N0OworICBKRElNRU5TSU9OIG51bV9yb3dzLCBtYXhfcm93czsKKworICAvKiBSZXBvc2l0aW9uIHZpcnR1YWwgYnVmZmVyIGlmIGF0IHN0YXJ0IG9mIHN0cmlwLiAqLworICBpZiAocG9zdC0+bmV4dF9yb3cgPT0gMCkgeworICAgIHBvc3QtPmJ1ZmZlciA9ICgqY2luZm8tPm1lbS0+YWNjZXNzX3ZpcnRfc2FycmF5KQorCSgoal9jb21tb25fcHRyKSBjaW5mbywgcG9zdC0+d2hvbGVfaW1hZ2UsCisJIHBvc3QtPnN0YXJ0aW5nX3JvdywgcG9zdC0+c3RyaXBfaGVpZ2h0LCBGQUxTRSk7CisgIH0KKworICAvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIHJvd3MgdG8gZW1pdC4gKi8KKyAgbnVtX3Jvd3MgPSBwb3N0LT5zdHJpcF9oZWlnaHQgLSBwb3N0LT5uZXh0X3JvdzsgLyogYXZhaWxhYmxlIGluIHN0cmlwICovCisgIG1heF9yb3dzID0gb3V0X3Jvd3NfYXZhaWwgLSAqb3V0X3Jvd19jdHI7IC8qIGF2YWlsYWJsZSBpbiBvdXRwdXQgYXJlYSAqLworICBpZiAobnVtX3Jvd3MgPiBtYXhfcm93cykKKyAgICBudW1fcm93cyA9IG1heF9yb3dzOworICAvKiBXZSBoYXZlIHRvIGNoZWNrIGJvdHRvbSBvZiBpbWFnZSBoZXJlLCBjYW4ndCBkZXBlbmQgb24gdXBzYW1wbGVyLiAqLworICBtYXhfcm93cyA9IGNpbmZvLT5vdXRwdXRfaGVpZ2h0IC0gcG9zdC0+c3RhcnRpbmdfcm93OworICBpZiAobnVtX3Jvd3MgPiBtYXhfcm93cykKKyAgICBudW1fcm93cyA9IG1heF9yb3dzOworCisgIC8qIFF1YW50aXplIGFuZCBlbWl0IGRhdGEuICovCisgICgqY2luZm8tPmNxdWFudGl6ZS0+Y29sb3JfcXVhbnRpemUpIChjaW5mbywKKwkJcG9zdC0+YnVmZmVyICsgcG9zdC0+bmV4dF9yb3csIG91dHB1dF9idWYgKyAqb3V0X3Jvd19jdHIsCisJCShpbnQpIG51bV9yb3dzKTsKKyAgKm91dF9yb3dfY3RyICs9IG51bV9yb3dzOworCisgIC8qIEFkdmFuY2UgaWYgd2UgZmlsbGVkIHRoZSBzdHJpcC4gKi8KKyAgcG9zdC0+bmV4dF9yb3cgKz0gbnVtX3Jvd3M7CisgIGlmIChwb3N0LT5uZXh0X3JvdyA+PSBwb3N0LT5zdHJpcF9oZWlnaHQpIHsKKyAgICBwb3N0LT5zdGFydGluZ19yb3cgKz0gcG9zdC0+c3RyaXBfaGVpZ2h0OworICAgIHBvc3QtPm5leHRfcm93ID0gMDsKKyAgfQorfQorCisjZW5kaWYgLyogUVVBTlRfMlBBU1NfU1VQUE9SVEVEICovCisKKworLyoKKyAqIEluaXRpYWxpemUgcG9zdHByb2Nlc3NpbmcgY29udHJvbGxlci4KKyAqLworCitHTE9CQUwodm9pZCkKK2ppbml0X2RfcG9zdF9jb250cm9sbGVyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpCit7CisgIG15X3Bvc3RfcHRyIHBvc3Q7CisKKyAgcG9zdCA9IChteV9wb3N0X3B0cikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCVNJWkVPRihteV9wb3N0X2NvbnRyb2xsZXIpKTsKKyAgY2luZm8tPnBvc3QgPSAoc3RydWN0IGpwZWdfZF9wb3N0X2NvbnRyb2xsZXIgKikgcG9zdDsKKyAgcG9zdC0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX2Rwb3N0OworICBwb3N0LT53aG9sZV9pbWFnZSA9IE5VTEw7CS8qIGZsYWcgZm9yIG5vIHZpcnR1YWwgYXJyYXlzICovCisgIHBvc3QtPmJ1ZmZlciA9IE5VTEw7CQkvKiBmbGFnIGZvciBubyBzdHJpcCBidWZmZXIgKi8KKworICAvKiBDcmVhdGUgdGhlIHF1YW50aXphdGlvbiBidWZmZXIsIGlmIG5lZWRlZCAqLworICBpZiAoY2luZm8tPnF1YW50aXplX2NvbG9ycykgeworICAgIC8qIFRoZSBidWZmZXIgc3RyaXAgaGVpZ2h0IGlzIG1heF92X3NhbXBfZmFjdG9yLCB3aGljaCBpcyB0eXBpY2FsbHkKKyAgICAgKiBhbiBlZmZpY2llbnQgbnVtYmVyIG9mIHJvd3MgZm9yIHVwc2FtcGxpbmcgdG8gcmV0dXJuLgorICAgICAqIChJbiB0aGUgcHJlc2VuY2Ugb2Ygb3V0cHV0IHJlc2NhbGluZywgd2UgbWlnaHQgd2FudCB0byBiZSBzbWFydGVyPykKKyAgICAgKi8KKyAgICBwb3N0LT5zdHJpcF9oZWlnaHQgPSAoSkRJTUVOU0lPTikgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yOworICAgIGlmIChuZWVkX2Z1bGxfYnVmZmVyKSB7CisgICAgICAvKiBUd28tcGFzcyBjb2xvciBxdWFudGl6YXRpb246IG5lZWQgZnVsbC1pbWFnZSBzdG9yYWdlLiAqLworICAgICAgLyogV2Ugcm91bmQgdXAgdGhlIG51bWJlciBvZiByb3dzIHRvIGEgbXVsdGlwbGUgb2YgdGhlIHN0cmlwIGhlaWdodC4gKi8KKyNpZmRlZiBRVUFOVF8yUEFTU19TVVBQT1JURUQKKyAgICAgIHBvc3QtPndob2xlX2ltYWdlID0gKCpjaW5mby0+bWVtLT5yZXF1ZXN0X3ZpcnRfc2FycmF5KQorCSgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsIEZBTFNFLAorCSBjaW5mby0+b3V0cHV0X3dpZHRoICogY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzLAorCSAoSkRJTUVOU0lPTikganJvdW5kX3VwKChsb25nKSBjaW5mby0+b3V0cHV0X2hlaWdodCwKKwkJCQkobG9uZykgcG9zdC0+c3RyaXBfaGVpZ2h0KSwKKwkgcG9zdC0+c3RyaXBfaGVpZ2h0KTsKKyNlbHNlCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7CisjZW5kaWYgLyogUVVBTlRfMlBBU1NfU1VQUE9SVEVEICovCisgICAgfSBlbHNlIHsKKyAgICAgIC8qIE9uZS1wYXNzIGNvbG9yIHF1YW50aXphdGlvbjoganVzdCBtYWtlIGEgc3RyaXAgYnVmZmVyLiAqLworICAgICAgcG9zdC0+YnVmZmVyID0gKCpjaW5mby0+bWVtLT5hbGxvY19zYXJyYXkpCisJKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkgY2luZm8tPm91dHB1dF93aWR0aCAqIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cywKKwkgcG9zdC0+c3RyaXBfaGVpZ2h0KTsKKyAgICB9CisgIH0KK30KKworI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZHNhbXBsZS5jIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamRzYW1wbGUuYwppbmRleCBhMmVhZTk1Li5kYTljMzhjIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZHNhbXBsZS5jCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pkc2FtcGxlLmMKQEAgLTEsNDgxICsxLDQ4MSBAQAotI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykNCi0vKg0KLSAqIGpkc2FtcGxlLmMNCi0gKg0KLSAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk2LCBUaG9tYXMgRy4gTGFuZS4NCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLg0KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4NCi0gKg0KLSAqIFRoaXMgZmlsZSBjb250YWlucyB1cHNhbXBsaW5nIHJvdXRpbmVzLg0KLSAqDQotICogVXBzYW1wbGluZyBpbnB1dCBkYXRhIGlzIGNvdW50ZWQgaW4gInJvdyBncm91cHMiLiAgQSByb3cgZ3JvdXANCi0gKiBpcyBkZWZpbmVkIHRvIGJlICh2X3NhbXBfZmFjdG9yICogRENUX3NjYWxlZF9zaXplIC8gbWluX0RDVF9zY2FsZWRfc2l6ZSkNCi0gKiBzYW1wbGUgcm93cyBvZiBlYWNoIGNvbXBvbmVudC4gIFVwc2FtcGxpbmcgd2lsbCBub3JtYWxseSBwcm9kdWNlDQotICogbWF4X3Zfc2FtcF9mYWN0b3IgcGl4ZWwgcm93cyBmcm9tIGVhY2ggcm93IGdyb3VwIChidXQgdGhpcyBjb3VsZCB2YXJ5DQotICogaWYgdGhlIHVwc2FtcGxlciBpcyBhcHBseWluZyBhIHNjYWxlIGZhY3RvciBvZiBpdHMgb3duKS4NCi0gKg0KLSAqIEFuIGV4Y2VsbGVudCByZWZlcmVuY2UgZm9yIGltYWdlIHJlc2FtcGxpbmcgaXMNCi0gKiAgIERpZ2l0YWwgSW1hZ2UgV2FycGluZywgR2VvcmdlIFdvbGJlcmcsIDE5OTAuDQotICogICBQdWIuIGJ5IElFRUUgQ29tcHV0ZXIgU29jaWV0eSBQcmVzcywgTG9zIEFsYW1pdG9zLCBDQS4gSVNCTiAwLTgxODYtODk0NC03Lg0KLSAqLw0KLQ0KLSNkZWZpbmUgSlBFR19JTlRFUk5BTFMNCi0jaW5jbHVkZSAiamluY2x1ZGUuaCINCi0jaW5jbHVkZSAianBlZ2xpYi5oIg0KLQ0KLQ0KLS8qIFBvaW50ZXIgdG8gcm91dGluZSB0byB1cHNhbXBsZSBhIHNpbmdsZSBjb21wb25lbnQgKi8NCi10eXBlZGVmIEpNRVRIT0Qodm9pZCwgdXBzYW1wbGUxX3B0ciwNCi0JCShqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwNCi0JCSBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpKTsNCi0NCi0vKiBQcml2YXRlIHN1Ym9iamVjdCAqLw0KLQ0KLXR5cGVkZWYgc3RydWN0IHsNCi0gIHN0cnVjdCBqcGVnX3Vwc2FtcGxlciBwdWI7CS8qIHB1YmxpYyBmaWVsZHMgKi8NCi0NCi0gIC8qIENvbG9yIGNvbnZlcnNpb24gYnVmZmVyLiAgV2hlbiB1c2luZyBzZXBhcmF0ZSB1cHNhbXBsaW5nIGFuZCBjb2xvcg0KLSAgICogY29udmVyc2lvbiBzdGVwcywgdGhpcyBidWZmZXIgaG9sZHMgb25lIHVwc2FtcGxlZCByb3cgZ3JvdXAgdW50aWwgaXQNCi0gICAqIGhhcyBiZWVuIGNvbG9yIGNvbnZlcnRlZCBhbmQgb3V0cHV0Lg0KLSAgICogTm90ZTogd2UgZG8gbm90IGFsbG9jYXRlIGFueSBzdG9yYWdlIGZvciBjb21wb25lbnQocykgd2hpY2ggYXJlIGZ1bGwtc2l6ZSwNCi0gICAqIGllIGRvIG5vdCBuZWVkIHJlc2NhbGluZy4gIFRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IG9mIGNvbG9yX2J1ZltdIGlzDQotICAgKiBzaW1wbHkgc2V0IHRvIHBvaW50IHRvIHRoZSBpbnB1dCBkYXRhIGFycmF5LCB0aGVyZWJ5IGF2b2lkaW5nIGNvcHlpbmcuDQotICAgKi8NCi0gIEpTQU1QQVJSQVkgY29sb3JfYnVmW01BWF9DT01QT05FTlRTXTsNCi0NCi0gIC8qIFBlci1jb21wb25lbnQgdXBzYW1wbGluZyBtZXRob2QgcG9pbnRlcnMgKi8NCi0gIHVwc2FtcGxlMV9wdHIgbWV0aG9kc1tNQVhfQ09NUE9ORU5UU107DQotDQotICBpbnQgbmV4dF9yb3dfb3V0OwkJLyogY291bnRzIHJvd3MgZW1pdHRlZCBmcm9tIGNvbG9yX2J1ZiAqLw0KLSAgSkRJTUVOU0lPTiByb3dzX3RvX2dvOwkvKiBjb3VudHMgcm93cyByZW1haW5pbmcgaW4gaW1hZ2UgKi8NCi0NCi0gIC8qIEhlaWdodCBvZiBhbiBpbnB1dCByb3cgZ3JvdXAgZm9yIGVhY2ggY29tcG9uZW50LiAqLw0KLSAgaW50IHJvd2dyb3VwX2hlaWdodFtNQVhfQ09NUE9ORU5UU107DQotDQotICAvKiBUaGVzZSBhcnJheXMgc2F2ZSBwaXhlbCBleHBhbnNpb24gZmFjdG9ycyBzbyB0aGF0IGludF9leHBhbmQgbmVlZCBub3QNCi0gICAqIHJlY29tcHV0ZSB0aGVtIGVhY2ggdGltZS4gIFRoZXkgYXJlIHVudXNlZCBmb3Igb3RoZXIgdXBzYW1wbGluZyBtZXRob2RzLg0KLSAgICovDQotICBVSU5UOCBoX2V4cGFuZFtNQVhfQ09NUE9ORU5UU107DQotICBVSU5UOCB2X2V4cGFuZFtNQVhfQ09NUE9ORU5UU107DQotfSBteV91cHNhbXBsZXI7DQotDQotdHlwZWRlZiBteV91cHNhbXBsZXIgKiBteV91cHNhbXBsZV9wdHI7DQotDQotDQotLyoNCi0gKiBJbml0aWFsaXplIGZvciBhbiB1cHNhbXBsaW5nIHBhc3MuDQotICovDQotDQotTUVUSE9EREVGKHZvaWQpDQotc3RhcnRfcGFzc191cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBteV91cHNhbXBsZV9wdHIgdXBzYW1wbGUgPSAobXlfdXBzYW1wbGVfcHRyKSBjaW5mby0+dXBzYW1wbGU7DQotDQotICAvKiBNYXJrIHRoZSBjb252ZXJzaW9uIGJ1ZmZlciBlbXB0eSAqLw0KLSAgdXBzYW1wbGUtPm5leHRfcm93X291dCA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcjsNCi0gIC8qIEluaXRpYWxpemUgdG90YWwtaGVpZ2h0IGNvdW50ZXIgZm9yIGRldGVjdGluZyBib3R0b20gb2YgaW1hZ2UgKi8NCi0gIHVwc2FtcGxlLT5yb3dzX3RvX2dvID0gY2luZm8tPm91dHB1dF9oZWlnaHQ7DQotfQ0KLQ0KLQ0KLS8qDQotICogQ29udHJvbCByb3V0aW5lIHRvIGRvIHVwc2FtcGxpbmcgKGFuZCBjb2xvciBjb252ZXJzaW9uKS4NCi0gKg0KLSAqIEluIHRoaXMgdmVyc2lvbiB3ZSB1cHNhbXBsZSBlYWNoIGNvbXBvbmVudCBpbmRlcGVuZGVudGx5Lg0KLSAqIFdlIHVwc2FtcGxlIG9uZSByb3cgZ3JvdXAgaW50byB0aGUgY29udmVyc2lvbiBidWZmZXIsIHRoZW4gYXBwbHkNCi0gKiBjb2xvciBjb252ZXJzaW9uIGEgcm93IGF0IGEgdGltZS4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1zZXBfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sDQotCSAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLA0KLQkgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cHNfYXZhaWwsDQotCSAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsDQotCSAgICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpDQotew0KLSAgbXlfdXBzYW1wbGVfcHRyIHVwc2FtcGxlID0gKG15X3Vwc2FtcGxlX3B0cikgY2luZm8tPnVwc2FtcGxlOw0KLSAgaW50IGNpOw0KLSAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7DQotICBKRElNRU5TSU9OIG51bV9yb3dzOw0KLQ0KLSAgLyogRmlsbCB0aGUgY29udmVyc2lvbiBidWZmZXIsIGlmIGl0J3MgZW1wdHkgKi8NCi0gIGlmICh1cHNhbXBsZS0+bmV4dF9yb3dfb3V0ID49IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcikgew0KLSAgICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOw0KLQkgY2krKywgY29tcHB0cisrKSB7DQotICAgICAgLyogSW52b2tlIHBlci1jb21wb25lbnQgdXBzYW1wbGUgbWV0aG9kLiAgTm90aWNlIHdlIHBhc3MgYSBQT0lOVEVSDQotICAgICAgICogdG8gY29sb3JfYnVmW2NpXSwgc28gdGhhdCBmdWxsc2l6ZV91cHNhbXBsZSBjYW4gY2hhbmdlIGl0Lg0KLSAgICAgICAqLw0KLSAgICAgICgqdXBzYW1wbGUtPm1ldGhvZHNbY2ldKSAoY2luZm8sIGNvbXBwdHIsDQotCWlucHV0X2J1ZltjaV0gKyAoKmluX3Jvd19ncm91cF9jdHIgKiB1cHNhbXBsZS0+cm93Z3JvdXBfaGVpZ2h0W2NpXSksDQotCXVwc2FtcGxlLT5jb2xvcl9idWYgKyBjaSk7DQotICAgIH0NCi0gICAgdXBzYW1wbGUtPm5leHRfcm93X291dCA9IDA7DQotICB9DQotDQotICAvKiBDb2xvci1jb252ZXJ0IGFuZCBlbWl0IHJvd3MgKi8NCi0NCi0gIC8qIEhvdyBtYW55IHdlIGhhdmUgaW4gdGhlIGJ1ZmZlcjogKi8NCi0gIG51bV9yb3dzID0gKEpESU1FTlNJT04pIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgLSB1cHNhbXBsZS0+bmV4dF9yb3dfb3V0KTsNCi0gIC8qIE5vdCBtb3JlIHRoYW4gdGhlIGRpc3RhbmNlIHRvIHRoZSBlbmQgb2YgdGhlIGltYWdlLiAgTmVlZCB0aGlzIHRlc3QNCi0gICAqIGluIGNhc2UgdGhlIGltYWdlIGhlaWdodCBpcyBub3QgYSBtdWx0aXBsZSBvZiBtYXhfdl9zYW1wX2ZhY3RvcjoNCi0gICAqLw0KLSAgaWYgKG51bV9yb3dzID4gdXBzYW1wbGUtPnJvd3NfdG9fZ28pIA0KLSAgICBudW1fcm93cyA9IHVwc2FtcGxlLT5yb3dzX3RvX2dvOw0KLSAgLyogQW5kIG5vdCBtb3JlIHRoYW4gd2hhdCB0aGUgY2xpZW50IGNhbiBhY2NlcHQ6ICovDQotICBvdXRfcm93c19hdmFpbCAtPSAqb3V0X3Jvd19jdHI7DQotICBpZiAobnVtX3Jvd3MgPiBvdXRfcm93c19hdmFpbCkNCi0gICAgbnVtX3Jvd3MgPSBvdXRfcm93c19hdmFpbDsNCi0NCi0gICgqY2luZm8tPmNjb252ZXJ0LT5jb2xvcl9jb252ZXJ0KSAoY2luZm8sIHVwc2FtcGxlLT5jb2xvcl9idWYsDQotCQkJCSAgICAgKEpESU1FTlNJT04pIHVwc2FtcGxlLT5uZXh0X3Jvd19vdXQsDQotCQkJCSAgICAgb3V0cHV0X2J1ZiArICpvdXRfcm93X2N0ciwNCi0JCQkJICAgICAoaW50KSBudW1fcm93cyk7DQotDQotICAvKiBBZGp1c3QgY291bnRzICovDQotICAqb3V0X3Jvd19jdHIgKz0gbnVtX3Jvd3M7DQotICB1cHNhbXBsZS0+cm93c190b19nbyAtPSBudW1fcm93czsNCi0gIHVwc2FtcGxlLT5uZXh0X3Jvd19vdXQgKz0gbnVtX3Jvd3M7DQotICAvKiBXaGVuIHRoZSBidWZmZXIgaXMgZW1wdGllZCwgZGVjbGFyZSB0aGlzIGlucHV0IHJvdyBncm91cCBjb25zdW1lZCAqLw0KLSAgaWYgKHVwc2FtcGxlLT5uZXh0X3Jvd19vdXQgPj0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKQ0KLSAgICAoKmluX3Jvd19ncm91cF9jdHIpKys7DQotfQ0KLQ0KLQ0KLS8qDQotICogVGhlc2UgYXJlIHRoZSByb3V0aW5lcyBpbnZva2VkIGJ5IHNlcF91cHNhbXBsZSB0byB1cHNhbXBsZSBwaXhlbCB2YWx1ZXMNCi0gKiBvZiBhIHNpbmdsZSBjb21wb25lbnQuICBPbmUgcm93IGdyb3VwIGlzIHByb2Nlc3NlZCBwZXIgY2FsbC4NCi0gKi8NCi0NCi0NCi0vKg0KLSAqIEZvciBmdWxsLXNpemUgY29tcG9uZW50cywgd2UganVzdCBtYWtlIGNvbG9yX2J1ZltjaV0gcG9pbnQgYXQgdGhlDQotICogaW5wdXQgYnVmZmVyLCBhbmQgdGh1cyBhdm9pZCBjb3B5aW5nIGFueSBkYXRhLiAgTm90ZSB0aGF0IHRoaXMgaXMNCi0gKiBzYWZlIG9ubHkgYmVjYXVzZSBzZXBfdXBzYW1wbGUgZG9lc24ndCBkZWNsYXJlIHRoZSBpbnB1dCByb3cgZ3JvdXANCi0gKiAiY29uc3VtZWQiIHVudGlsIHdlIGFyZSBkb25lIGNvbG9yIGNvbnZlcnRpbmcgYW5kIGVtaXR0aW5nIGl0Lg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLWZ1bGxzaXplX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwNCi0JCSAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikNCi17DQotICAqb3V0cHV0X2RhdGFfcHRyID0gaW5wdXRfZGF0YTsNCi19DQotDQotDQotLyoNCi0gKiBUaGlzIGlzIGEgbm8tb3AgdmVyc2lvbiB1c2VkIGZvciAidW5pbnRlcmVzdGluZyIgY29tcG9uZW50cy4NCi0gKiBUaGVzZSBjb21wb25lbnRzIHdpbGwgbm90IGJlIHJlZmVyZW5jZWQgYnkgY29sb3IgY29udmVyc2lvbi4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1ub29wX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwNCi0JICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikNCi17DQotICAqb3V0cHV0X2RhdGFfcHRyID0gTlVMTDsJLyogc2FmZXR5IGNoZWNrICovDQotfQ0KLQ0KLQ0KLS8qDQotICogVGhpcyB2ZXJzaW9uIGhhbmRsZXMgYW55IGludGVncmFsIHNhbXBsaW5nIHJhdGlvcy4NCi0gKiBUaGlzIGlzIG5vdCB1c2VkIGZvciB0eXBpY2FsIEpQRUcgZmlsZXMsIHNvIGl0IG5lZWQgbm90IGJlIGZhc3QuDQotICogTm9yLCBmb3IgdGhhdCBtYXR0ZXIsIGlzIGl0IHBhcnRpY3VsYXJseSBhY2N1cmF0ZTogdGhlIGFsZ29yaXRobSBpcw0KLSAqIHNpbXBsZSByZXBsaWNhdGlvbiBvZiB0aGUgaW5wdXQgcGl4ZWwgb250byB0aGUgY29ycmVzcG9uZGluZyBvdXRwdXQNCi0gKiBwaXhlbHMuICBUaGUgaGktZmFsdXRpbiBzYW1wbGluZyBsaXRlcmF0dXJlIHJlZmVycyB0byB0aGlzIGFzIGENCi0gKiAiYm94IGZpbHRlciIuICBBIGJveCBmaWx0ZXIgdGVuZHMgdG8gaW50cm9kdWNlIHZpc2libGUgYXJ0aWZhY3RzLA0KLSAqIHNvIGlmIHlvdSBhcmUgYWN0dWFsbHkgZ29pbmcgdG8gdXNlIDM6MSBvciA0OjEgc2FtcGxpbmcgcmF0aW9zDQotICogeW91IHdvdWxkIGJlIHdlbGwgYWR2aXNlZCB0byBpbXByb3ZlIHRoaXMgY29kZS4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1pbnRfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLA0KLQkgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpDQotew0KLSAgbXlfdXBzYW1wbGVfcHRyIHVwc2FtcGxlID0gKG15X3Vwc2FtcGxlX3B0cikgY2luZm8tPnVwc2FtcGxlOw0KLSAgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSA9ICpvdXRwdXRfZGF0YV9wdHI7DQotICByZWdpc3RlciBKU0FNUFJPVyBpbnB0ciwgb3V0cHRyOw0KLSAgcmVnaXN0ZXIgSlNBTVBMRSBpbnZhbHVlOw0KLSAgcmVnaXN0ZXIgaW50IGg7DQotICBKU0FNUFJPVyBvdXRlbmQ7DQotICBpbnQgaF9leHBhbmQsIHZfZXhwYW5kOw0KLSAgaW50IGlucm93LCBvdXRyb3c7DQotDQotICBoX2V4cGFuZCA9IHVwc2FtcGxlLT5oX2V4cGFuZFtjb21wcHRyLT5jb21wb25lbnRfaW5kZXhdOw0KLSAgdl9leHBhbmQgPSB1cHNhbXBsZS0+dl9leHBhbmRbY29tcHB0ci0+Y29tcG9uZW50X2luZGV4XTsNCi0NCi0gIGlucm93ID0gb3V0cm93ID0gMDsNCi0gIHdoaWxlIChvdXRyb3cgPCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpIHsNCi0gICAgLyogR2VuZXJhdGUgb25lIG91dHB1dCByb3cgd2l0aCBwcm9wZXIgaG9yaXpvbnRhbCBleHBhbnNpb24gKi8NCi0gICAgaW5wdHIgPSBpbnB1dF9kYXRhW2lucm93XTsNCi0gICAgb3V0cHRyID0gb3V0cHV0X2RhdGFbb3V0cm93XTsNCi0gICAgb3V0ZW5kID0gb3V0cHRyICsgY2luZm8tPm91dHB1dF93aWR0aDsNCi0gICAgd2hpbGUgKG91dHB0ciA8IG91dGVuZCkgew0KLSAgICAgIGludmFsdWUgPSAqaW5wdHIrKzsJLyogZG9uJ3QgbmVlZCBHRVRKU0FNUExFKCkgaGVyZSAqLw0KLSAgICAgIGZvciAoaCA9IGhfZXhwYW5kOyBoID4gMDsgaC0tKSB7DQotCSpvdXRwdHIrKyA9IGludmFsdWU7DQotICAgICAgfQ0KLSAgICB9DQotICAgIC8qIEdlbmVyYXRlIGFueSBhZGRpdGlvbmFsIG91dHB1dCByb3dzIGJ5IGR1cGxpY2F0aW5nIHRoZSBmaXJzdCBvbmUgKi8NCi0gICAgaWYgKHZfZXhwYW5kID4gMSkgew0KLSAgICAgIGpjb3B5X3NhbXBsZV9yb3dzKG91dHB1dF9kYXRhLCBvdXRyb3csIG91dHB1dF9kYXRhLCBvdXRyb3crMSwNCi0JCQl2X2V4cGFuZC0xLCBjaW5mby0+b3V0cHV0X3dpZHRoKTsNCi0gICAgfQ0KLSAgICBpbnJvdysrOw0KLSAgICBvdXRyb3cgKz0gdl9leHBhbmQ7DQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogRmFzdCBwcm9jZXNzaW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbC4NCi0gKiBJdCdzIHN0aWxsIGEgYm94IGZpbHRlci4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1oMnYxX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwNCi0JICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikNCi17DQotICBKU0FNUEFSUkFZIG91dHB1dF9kYXRhID0gKm91dHB1dF9kYXRhX3B0cjsNCi0gIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyLCBvdXRwdHI7DQotICByZWdpc3RlciBKU0FNUExFIGludmFsdWU7DQotICBKU0FNUFJPVyBvdXRlbmQ7DQotICBpbnQgaW5yb3c7DQotDQotICBmb3IgKGlucm93ID0gMDsgaW5yb3cgPCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7IGlucm93KyspIHsNCi0gICAgaW5wdHIgPSBpbnB1dF9kYXRhW2lucm93XTsNCi0gICAgb3V0cHRyID0gb3V0cHV0X2RhdGFbaW5yb3ddOw0KLSAgICBvdXRlbmQgPSBvdXRwdHIgKyBjaW5mby0+b3V0cHV0X3dpZHRoOw0KLSAgICB3aGlsZSAob3V0cHRyIDwgb3V0ZW5kKSB7DQotICAgICAgaW52YWx1ZSA9ICppbnB0cisrOwkvKiBkb24ndCBuZWVkIEdFVEpTQU1QTEUoKSBoZXJlICovDQotICAgICAgKm91dHB0cisrID0gaW52YWx1ZTsNCi0gICAgICAqb3V0cHRyKysgPSBpbnZhbHVlOw0KLSAgICB9DQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogRmFzdCBwcm9jZXNzaW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbC4NCi0gKiBJdCdzIHN0aWxsIGEgYm94IGZpbHRlci4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1oMnYyX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwNCi0JICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikNCi17DQotICBKU0FNUEFSUkFZIG91dHB1dF9kYXRhID0gKm91dHB1dF9kYXRhX3B0cjsNCi0gIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyLCBvdXRwdHI7DQotICByZWdpc3RlciBKU0FNUExFIGludmFsdWU7DQotICBKU0FNUFJPVyBvdXRlbmQ7DQotICBpbnQgaW5yb3csIG91dHJvdzsNCi0NCi0gIGlucm93ID0gb3V0cm93ID0gMDsNCi0gIHdoaWxlIChvdXRyb3cgPCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpIHsNCi0gICAgaW5wdHIgPSBpbnB1dF9kYXRhW2lucm93XTsNCi0gICAgb3V0cHRyID0gb3V0cHV0X2RhdGFbb3V0cm93XTsNCi0gICAgb3V0ZW5kID0gb3V0cHRyICsgY2luZm8tPm91dHB1dF93aWR0aDsNCi0gICAgd2hpbGUgKG91dHB0ciA8IG91dGVuZCkgew0KLSAgICAgIGludmFsdWUgPSAqaW5wdHIrKzsJLyogZG9uJ3QgbmVlZCBHRVRKU0FNUExFKCkgaGVyZSAqLw0KLSAgICAgICpvdXRwdHIrKyA9IGludmFsdWU7DQotICAgICAgKm91dHB0cisrID0gaW52YWx1ZTsNCi0gICAgfQ0KLSAgICBqY29weV9zYW1wbGVfcm93cyhvdXRwdXRfZGF0YSwgb3V0cm93LCBvdXRwdXRfZGF0YSwgb3V0cm93KzEsDQotCQkgICAgICAxLCBjaW5mby0+b3V0cHV0X3dpZHRoKTsNCi0gICAgaW5yb3crKzsNCi0gICAgb3V0cm93ICs9IDI7DQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogRmFuY3kgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwuDQotICoNCi0gKiBUaGUgdXBzYW1wbGluZyBhbGdvcml0aG0gaXMgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBwaXhlbCBjZW50ZXJzLA0KLSAqIGFsc28ga25vd24gYXMgYSAidHJpYW5nbGUgZmlsdGVyIi4gIFRoaXMgaXMgYSBnb29kIGNvbXByb21pc2UgYmV0d2Vlbg0KLSAqIHNwZWVkIGFuZCB2aXN1YWwgcXVhbGl0eS4gIFRoZSBjZW50ZXJzIG9mIHRoZSBvdXRwdXQgcGl4ZWxzIGFyZSAxLzQgYW5kIDMvNA0KLSAqIG9mIHRoZSB3YXkgYmV0d2VlbiBpbnB1dCBwaXhlbCBjZW50ZXJzLg0KLSAqDQotICogQSBub3RlIGFib3V0IHRoZSAiYmlhcyIgY2FsY3VsYXRpb25zOiB3aGVuIHJvdW5kaW5nIGZyYWN0aW9uYWwgdmFsdWVzIHRvDQotICogaW50ZWdlciwgd2UgZG8gbm90IHdhbnQgdG8gYWx3YXlzIHJvdW5kIDAuNSB1cCB0byB0aGUgbmV4dCBpbnRlZ2VyLg0KLSAqIElmIHdlIGRpZCB0aGF0LCB3ZSdkIGludHJvZHVjZSBhIG5vdGljZWFibGUgYmlhcyB0b3dhcmRzIGxhcmdlciB2YWx1ZXMuDQotICogSW5zdGVhZCwgdGhpcyBjb2RlIGlzIGFycmFuZ2VkIHNvIHRoYXQgMC41IHdpbGwgYmUgcm91bmRlZCB1cCBvciBkb3duIGF0DQotICogYWx0ZXJuYXRlIHBpeGVsIGxvY2F0aW9ucyAoYSBzaW1wbGUgb3JkZXJlZCBkaXRoZXIgcGF0dGVybikuDQotICovDQotDQotTUVUSE9EREVGKHZvaWQpDQotaDJ2MV9mYW5jeV91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsDQotCQkgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikNCi17DQotICBKU0FNUEFSUkFZIG91dHB1dF9kYXRhID0gKm91dHB1dF9kYXRhX3B0cjsNCi0gIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyLCBvdXRwdHI7DQotICByZWdpc3RlciBpbnQgaW52YWx1ZTsNCi0gIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sY3RyOw0KLSAgaW50IGlucm93Ow0KLQ0KLSAgZm9yIChpbnJvdyA9IDA7IGlucm93IDwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yOyBpbnJvdysrKSB7DQotICAgIGlucHRyID0gaW5wdXRfZGF0YVtpbnJvd107DQotICAgIG91dHB0ciA9IG91dHB1dF9kYXRhW2lucm93XTsNCi0gICAgLyogU3BlY2lhbCBjYXNlIGZvciBmaXJzdCBjb2x1bW4gKi8NCi0gICAgaW52YWx1ZSA9IEdFVEpTQU1QTEUoKmlucHRyKyspOw0KLSAgICAqb3V0cHRyKysgPSAoSlNBTVBMRSkgaW52YWx1ZTsNCi0gICAgKm91dHB0cisrID0gKEpTQU1QTEUpICgoaW52YWx1ZSAqIDMgKyBHRVRKU0FNUExFKCppbnB0cikgKyAyKSA+PiAyKTsNCi0NCi0gICAgZm9yIChjb2xjdHIgPSBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCAtIDI7IGNvbGN0ciA+IDA7IGNvbGN0ci0tKSB7DQotICAgICAgLyogR2VuZXJhbCBjYXNlOiAzLzQgKiBuZWFyZXIgcGl4ZWwgKyAxLzQgKiBmdXJ0aGVyIHBpeGVsICovDQotICAgICAgaW52YWx1ZSA9IEdFVEpTQU1QTEUoKmlucHRyKyspICogMzsNCi0gICAgICAqb3V0cHRyKysgPSAoSlNBTVBMRSkgKChpbnZhbHVlICsgR0VUSlNBTVBMRShpbnB0clstMl0pICsgMSkgPj4gMik7DQotICAgICAgKm91dHB0cisrID0gKEpTQU1QTEUpICgoaW52YWx1ZSArIEdFVEpTQU1QTEUoKmlucHRyKSArIDIpID4+IDIpOw0KLSAgICB9DQotDQotICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgbGFzdCBjb2x1bW4gKi8NCi0gICAgaW52YWx1ZSA9IEdFVEpTQU1QTEUoKmlucHRyKTsNCi0gICAgKm91dHB0cisrID0gKEpTQU1QTEUpICgoaW52YWx1ZSAqIDMgKyBHRVRKU0FNUExFKGlucHRyWy0xXSkgKyAxKSA+PiAyKTsNCi0gICAgKm91dHB0cisrID0gKEpTQU1QTEUpIGludmFsdWU7DQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogRmFuY3kgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwuDQotICogQWdhaW4gYSB0cmlhbmdsZSBmaWx0ZXI7IHNlZSBjb21tZW50cyBmb3IgaDJ2MSBjYXNlLCBhYm92ZS4NCi0gKg0KLSAqIEl0IGlzIE9LIGZvciB1cyB0byByZWZlcmVuY2UgdGhlIGFkamFjZW50IGlucHV0IHJvd3MgYmVjYXVzZSB3ZSBkZW1hbmRlZA0KLSAqIGNvbnRleHQgZnJvbSB0aGUgbWFpbiBidWZmZXIgY29udHJvbGxlciAoc2VlIGluaXRpYWxpemF0aW9uIGNvZGUpLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLWgydjJfZmFuY3lfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLA0KLQkJICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpDQotew0KLSAgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSA9ICpvdXRwdXRfZGF0YV9wdHI7DQotICByZWdpc3RlciBKU0FNUFJPVyBpbnB0cjAsIGlucHRyMSwgb3V0cHRyOw0KLSNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOA0KLSAgcmVnaXN0ZXIgaW50IHRoaXNjb2xzdW0sIGxhc3Rjb2xzdW0sIG5leHRjb2xzdW07DQotI2Vsc2UNCi0gIHJlZ2lzdGVyIElOVDMyIHRoaXNjb2xzdW0sIGxhc3Rjb2xzdW0sIG5leHRjb2xzdW07DQotI2VuZGlmDQotICByZWdpc3RlciBKRElNRU5TSU9OIGNvbGN0cjsNCi0gIGludCBpbnJvdywgb3V0cm93LCB2Ow0KLQ0KLSAgaW5yb3cgPSBvdXRyb3cgPSAwOw0KLSAgd2hpbGUgKG91dHJvdyA8IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcikgew0KLSAgICBmb3IgKHYgPSAwOyB2IDwgMjsgdisrKSB7DQotICAgICAgLyogaW5wdHIwIHBvaW50cyB0byBuZWFyZXN0IGlucHV0IHJvdywgaW5wdHIxIHBvaW50cyB0byBuZXh0IG5lYXJlc3QgKi8NCi0gICAgICBpbnB0cjAgPSBpbnB1dF9kYXRhW2lucm93XTsNCi0gICAgICBpZiAodiA9PSAwKQkJLyogbmV4dCBuZWFyZXN0IGlzIHJvdyBhYm92ZSAqLw0KLQlpbnB0cjEgPSBpbnB1dF9kYXRhW2lucm93LTFdOw0KLSAgICAgIGVsc2UJCQkvKiBuZXh0IG5lYXJlc3QgaXMgcm93IGJlbG93ICovDQotCWlucHRyMSA9IGlucHV0X2RhdGFbaW5yb3crMV07DQotICAgICAgb3V0cHRyID0gb3V0cHV0X2RhdGFbb3V0cm93KytdOw0KLQ0KLSAgICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgZmlyc3QgY29sdW1uICovDQotICAgICAgdGhpc2NvbHN1bSA9IEdFVEpTQU1QTEUoKmlucHRyMCsrKSAqIDMgKyBHRVRKU0FNUExFKCppbnB0cjErKyk7DQotICAgICAgbmV4dGNvbHN1bSA9IEdFVEpTQU1QTEUoKmlucHRyMCsrKSAqIDMgKyBHRVRKU0FNUExFKCppbnB0cjErKyk7DQotICAgICAgKm91dHB0cisrID0gKEpTQU1QTEUpICgodGhpc2NvbHN1bSAqIDQgKyA4KSA+PiA0KTsNCi0gICAgICAqb3V0cHRyKysgPSAoSlNBTVBMRSkgKCh0aGlzY29sc3VtICogMyArIG5leHRjb2xzdW0gKyA3KSA+PiA0KTsNCi0gICAgICBsYXN0Y29sc3VtID0gdGhpc2NvbHN1bTsgdGhpc2NvbHN1bSA9IG5leHRjb2xzdW07DQotDQotICAgICAgZm9yIChjb2xjdHIgPSBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCAtIDI7IGNvbGN0ciA+IDA7IGNvbGN0ci0tKSB7DQotCS8qIEdlbmVyYWwgY2FzZTogMy80ICogbmVhcmVyIHBpeGVsICsgMS80ICogZnVydGhlciBwaXhlbCBpbiBlYWNoICovDQotCS8qIGRpbWVuc2lvbiwgdGh1cyA5LzE2LCAzLzE2LCAzLzE2LCAxLzE2IG92ZXJhbGwgKi8NCi0JbmV4dGNvbHN1bSA9IEdFVEpTQU1QTEUoKmlucHRyMCsrKSAqIDMgKyBHRVRKU0FNUExFKCppbnB0cjErKyk7DQotCSpvdXRwdHIrKyA9IChKU0FNUExFKSAoKHRoaXNjb2xzdW0gKiAzICsgbGFzdGNvbHN1bSArIDgpID4+IDQpOw0KLQkqb3V0cHRyKysgPSAoSlNBTVBMRSkgKCh0aGlzY29sc3VtICogMyArIG5leHRjb2xzdW0gKyA3KSA+PiA0KTsNCi0JbGFzdGNvbHN1bSA9IHRoaXNjb2xzdW07IHRoaXNjb2xzdW0gPSBuZXh0Y29sc3VtOw0KLSAgICAgIH0NCi0NCi0gICAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIGxhc3QgY29sdW1uICovDQotICAgICAgKm91dHB0cisrID0gKEpTQU1QTEUpICgodGhpc2NvbHN1bSAqIDMgKyBsYXN0Y29sc3VtICsgOCkgPj4gNCk7DQotICAgICAgKm91dHB0cisrID0gKEpTQU1QTEUpICgodGhpc2NvbHN1bSAqIDQgKyA3KSA+PiA0KTsNCi0gICAgfQ0KLSAgICBpbnJvdysrOw0KLSAgfQ0KLX0NCi0NCi0NCi0vKg0KLSAqIE1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciB1cHNhbXBsaW5nLg0KLSAqLw0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWppbml0X3Vwc2FtcGxlciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykNCi17DQotICBteV91cHNhbXBsZV9wdHIgdXBzYW1wbGU7DQotICBpbnQgY2k7DQotICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cjsNCi0gIGJvb2xlYW4gbmVlZF9idWZmZXIsIGRvX2ZhbmN5Ow0KLSAgaW50IGhfaW5fZ3JvdXAsIHZfaW5fZ3JvdXAsIGhfb3V0X2dyb3VwLCB2X291dF9ncm91cDsNCi0NCi0gIHVwc2FtcGxlID0gKG15X3Vwc2FtcGxlX3B0cikNCi0gICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwNCi0JCQkJU0laRU9GKG15X3Vwc2FtcGxlcikpOw0KLSAgY2luZm8tPnVwc2FtcGxlID0gKHN0cnVjdCBqcGVnX3Vwc2FtcGxlciAqKSB1cHNhbXBsZTsNCi0gIHVwc2FtcGxlLT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfdXBzYW1wbGU7DQotICB1cHNhbXBsZS0+cHViLnVwc2FtcGxlID0gc2VwX3Vwc2FtcGxlOw0KLSAgdXBzYW1wbGUtPnB1Yi5uZWVkX2NvbnRleHRfcm93cyA9IEZBTFNFOyAvKiB1bnRpbCB3ZSBmaW5kIG91dCBkaWZmZXJlbnRseSAqLw0KLQ0KLSAgaWYgKGNpbmZvLT5DQ0lSNjAxX3NhbXBsaW5nKQkvKiB0aGlzIGlzbid0IHN1cHBvcnRlZCAqLw0KLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NDSVI2MDFfTk9USU1QTCk7DQotDQotICAvKiBqZG1haW5jdC5jIGRvZXNuJ3Qgc3VwcG9ydCBjb250ZXh0IHJvd3Mgd2hlbiBtaW5fRENUX3NjYWxlZF9zaXplID0gMSwNCi0gICAqIHNvIGRvbid0IGFzayBmb3IgaXQuDQotICAgKi8NCi0gIGRvX2ZhbmN5ID0gY2luZm8tPmRvX2ZhbmN5X3Vwc2FtcGxpbmcgJiYgY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemUgPiAxOw0KLQ0KLSAgLyogVmVyaWZ5IHdlIGNhbiBoYW5kbGUgdGhlIHNhbXBsaW5nIGZhY3RvcnMsIHNlbGVjdCBwZXItY29tcG9uZW50IG1ldGhvZHMsDQotICAgKiBhbmQgY3JlYXRlIHN0b3JhZ2UgYXMgbmVlZGVkLg0KLSAgICovDQotICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOw0KLSAgICAgICBjaSsrLCBjb21wcHRyKyspIHsNCi0gICAgLyogQ29tcHV0ZSBzaXplIG9mIGFuICJpbnB1dCBncm91cCIgYWZ0ZXIgSURDVCBzY2FsaW5nLiAgVGhpcyBtYW55IHNhbXBsZXMNCi0gICAgICogYXJlIHRvIGJlIGNvbnZlcnRlZCB0byBtYXhfaF9zYW1wX2ZhY3RvciAqIG1heF92X3NhbXBfZmFjdG9yIHBpeGVscy4NCi0gICAgICovDQotICAgIGhfaW5fZ3JvdXAgPSAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPkRDVF9zY2FsZWRfc2l6ZSkgLw0KLQkJIGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplOw0KLSAgICB2X2luX2dyb3VwID0gKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemUpIC8NCi0JCSBjaW5mby0+bWluX0RDVF9zY2FsZWRfc2l6ZTsNCi0gICAgaF9vdXRfZ3JvdXAgPSBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3I7DQotICAgIHZfb3V0X2dyb3VwID0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yOw0KLSAgICB1cHNhbXBsZS0+cm93Z3JvdXBfaGVpZ2h0W2NpXSA9IHZfaW5fZ3JvdXA7IC8qIHNhdmUgZm9yIHVzZSBsYXRlciAqLw0KLSAgICBuZWVkX2J1ZmZlciA9IFRSVUU7DQotICAgIGlmICghIGNvbXBwdHItPmNvbXBvbmVudF9uZWVkZWQpIHsNCi0gICAgICAvKiBEb24ndCBib3RoZXIgdG8gdXBzYW1wbGUgYW4gdW5pbnRlcmVzdGluZyBjb21wb25lbnQuICovDQotICAgICAgdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0gbm9vcF91cHNhbXBsZTsNCi0gICAgICBuZWVkX2J1ZmZlciA9IEZBTFNFOw0KLSAgICB9IGVsc2UgaWYgKGhfaW5fZ3JvdXAgPT0gaF9vdXRfZ3JvdXAgJiYgdl9pbl9ncm91cCA9PSB2X291dF9ncm91cCkgew0KLSAgICAgIC8qIEZ1bGxzaXplIGNvbXBvbmVudHMgY2FuIGJlIHByb2Nlc3NlZCB3aXRob3V0IGFueSB3b3JrLiAqLw0KLSAgICAgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGZ1bGxzaXplX3Vwc2FtcGxlOw0KLSAgICAgIG5lZWRfYnVmZmVyID0gRkFMU0U7DQotICAgIH0gZWxzZSBpZiAoaF9pbl9ncm91cCAqIDIgPT0gaF9vdXRfZ3JvdXAgJiYNCi0JICAgICAgIHZfaW5fZ3JvdXAgPT0gdl9vdXRfZ3JvdXApIHsNCi0gICAgICAvKiBTcGVjaWFsIGNhc2VzIGZvciAyaDF2IHVwc2FtcGxpbmcgKi8NCi0gICAgICBpZiAoZG9fZmFuY3kgJiYgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGggPiAyKQ0KLQl1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBoMnYxX2ZhbmN5X3Vwc2FtcGxlOw0KLSAgICAgIGVsc2UNCi0JdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0gaDJ2MV91cHNhbXBsZTsNCi0gICAgfSBlbHNlIGlmIChoX2luX2dyb3VwICogMiA9PSBoX291dF9ncm91cCAmJg0KLQkgICAgICAgdl9pbl9ncm91cCAqIDIgPT0gdl9vdXRfZ3JvdXApIHsNCi0gICAgICAvKiBTcGVjaWFsIGNhc2VzIGZvciAyaDJ2IHVwc2FtcGxpbmcgKi8NCi0gICAgICBpZiAoZG9fZmFuY3kgJiYgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGggPiAyKSB7DQotCXVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGgydjJfZmFuY3lfdXBzYW1wbGU7DQotCXVwc2FtcGxlLT5wdWIubmVlZF9jb250ZXh0X3Jvd3MgPSBUUlVFOw0KLSAgICAgIH0gZWxzZQ0KLQl1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBoMnYyX3Vwc2FtcGxlOw0KLSAgICB9IGVsc2UgaWYgKChoX291dF9ncm91cCAlIGhfaW5fZ3JvdXApID09IDAgJiYNCi0JICAgICAgICh2X291dF9ncm91cCAlIHZfaW5fZ3JvdXApID09IDApIHsNCi0gICAgICAvKiBHZW5lcmljIGludGVncmFsLWZhY3RvcnMgdXBzYW1wbGluZyBtZXRob2QgKi8NCi0gICAgICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBpbnRfdXBzYW1wbGU7DQotICAgICAgdXBzYW1wbGUtPmhfZXhwYW5kW2NpXSA9IChVSU5UOCkgKGhfb3V0X2dyb3VwIC8gaF9pbl9ncm91cCk7DQotICAgICAgdXBzYW1wbGUtPnZfZXhwYW5kW2NpXSA9IChVSU5UOCkgKHZfb3V0X2dyb3VwIC8gdl9pbl9ncm91cCk7DQotICAgIH0gZWxzZQ0KLSAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfRlJBQ1RfU0FNUExFX05PVElNUEwpOw0KLSAgICBpZiAobmVlZF9idWZmZXIpIHsNCi0gICAgICB1cHNhbXBsZS0+Y29sb3JfYnVmW2NpXSA9ICgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQ0KLQkoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLA0KLQkgKEpESU1FTlNJT04pIGpyb3VuZF91cCgobG9uZykgY2luZm8tPm91dHB1dF93aWR0aCwNCi0JCQkJKGxvbmcpIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciksDQotCSAoSkRJTUVOU0lPTikgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKTsNCi0gICAgfQ0KLSAgfQ0KLX0NCi0NCi0jZW5kaWYgLy9fRlhfSlBFR19UVVJCT18NCisjaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQorLyoKKyAqIGpkc2FtcGxlLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NiwgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB1cHNhbXBsaW5nIHJvdXRpbmVzLgorICoKKyAqIFVwc2FtcGxpbmcgaW5wdXQgZGF0YSBpcyBjb3VudGVkIGluICJyb3cgZ3JvdXBzIi4gIEEgcm93IGdyb3VwCisgKiBpcyBkZWZpbmVkIHRvIGJlICh2X3NhbXBfZmFjdG9yICogRENUX3NjYWxlZF9zaXplIC8gbWluX0RDVF9zY2FsZWRfc2l6ZSkKKyAqIHNhbXBsZSByb3dzIG9mIGVhY2ggY29tcG9uZW50LiAgVXBzYW1wbGluZyB3aWxsIG5vcm1hbGx5IHByb2R1Y2UKKyAqIG1heF92X3NhbXBfZmFjdG9yIHBpeGVsIHJvd3MgZnJvbSBlYWNoIHJvdyBncm91cCAoYnV0IHRoaXMgY291bGQgdmFyeQorICogaWYgdGhlIHVwc2FtcGxlciBpcyBhcHBseWluZyBhIHNjYWxlIGZhY3RvciBvZiBpdHMgb3duKS4KKyAqCisgKiBBbiBleGNlbGxlbnQgcmVmZXJlbmNlIGZvciBpbWFnZSByZXNhbXBsaW5nIGlzCisgKiAgIERpZ2l0YWwgSW1hZ2UgV2FycGluZywgR2VvcmdlIFdvbGJlcmcsIDE5OTAuCisgKiAgIFB1Yi4gYnkgSUVFRSBDb21wdXRlciBTb2NpZXR5IFByZXNzLCBMb3MgQWxhbWl0b3MsIENBLiBJU0JOIDAtODE4Ni04OTQ0LTcuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorCisKKy8qIFBvaW50ZXIgdG8gcm91dGluZSB0byB1cHNhbXBsZSBhIHNpbmdsZSBjb21wb25lbnQgKi8KK3R5cGVkZWYgSk1FVEhPRCh2b2lkLCB1cHNhbXBsZTFfcHRyLAorCQkoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJCSBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpKTsKKworLyogUHJpdmF0ZSBzdWJvYmplY3QgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICBzdHJ1Y3QganBlZ191cHNhbXBsZXIgcHViOwkvKiBwdWJsaWMgZmllbGRzICovCisKKyAgLyogQ29sb3IgY29udmVyc2lvbiBidWZmZXIuICBXaGVuIHVzaW5nIHNlcGFyYXRlIHVwc2FtcGxpbmcgYW5kIGNvbG9yCisgICAqIGNvbnZlcnNpb24gc3RlcHMsIHRoaXMgYnVmZmVyIGhvbGRzIG9uZSB1cHNhbXBsZWQgcm93IGdyb3VwIHVudGlsIGl0CisgICAqIGhhcyBiZWVuIGNvbG9yIGNvbnZlcnRlZCBhbmQgb3V0cHV0LgorICAgKiBOb3RlOiB3ZSBkbyBub3QgYWxsb2NhdGUgYW55IHN0b3JhZ2UgZm9yIGNvbXBvbmVudChzKSB3aGljaCBhcmUgZnVsbC1zaXplLAorICAgKiBpZSBkbyBub3QgbmVlZCByZXNjYWxpbmcuICBUaGUgY29ycmVzcG9uZGluZyBlbnRyeSBvZiBjb2xvcl9idWZbXSBpcworICAgKiBzaW1wbHkgc2V0IHRvIHBvaW50IHRvIHRoZSBpbnB1dCBkYXRhIGFycmF5LCB0aGVyZWJ5IGF2b2lkaW5nIGNvcHlpbmcuCisgICAqLworICBKU0FNUEFSUkFZIGNvbG9yX2J1ZltNQVhfQ09NUE9ORU5UU107CisKKyAgLyogUGVyLWNvbXBvbmVudCB1cHNhbXBsaW5nIG1ldGhvZCBwb2ludGVycyAqLworICB1cHNhbXBsZTFfcHRyIG1ldGhvZHNbTUFYX0NPTVBPTkVOVFNdOworCisgIGludCBuZXh0X3Jvd19vdXQ7CQkvKiBjb3VudHMgcm93cyBlbWl0dGVkIGZyb20gY29sb3JfYnVmICovCisgIEpESU1FTlNJT04gcm93c190b19nbzsJLyogY291bnRzIHJvd3MgcmVtYWluaW5nIGluIGltYWdlICovCisKKyAgLyogSGVpZ2h0IG9mIGFuIGlucHV0IHJvdyBncm91cCBmb3IgZWFjaCBjb21wb25lbnQuICovCisgIGludCByb3dncm91cF9oZWlnaHRbTUFYX0NPTVBPTkVOVFNdOworCisgIC8qIFRoZXNlIGFycmF5cyBzYXZlIHBpeGVsIGV4cGFuc2lvbiBmYWN0b3JzIHNvIHRoYXQgaW50X2V4cGFuZCBuZWVkIG5vdAorICAgKiByZWNvbXB1dGUgdGhlbSBlYWNoIHRpbWUuICBUaGV5IGFyZSB1bnVzZWQgZm9yIG90aGVyIHVwc2FtcGxpbmcgbWV0aG9kcy4KKyAgICovCisgIFVJTlQ4IGhfZXhwYW5kW01BWF9DT01QT05FTlRTXTsKKyAgVUlOVDggdl9leHBhbmRbTUFYX0NPTVBPTkVOVFNdOworfSBteV91cHNhbXBsZXI7CisKK3R5cGVkZWYgbXlfdXBzYW1wbGVyICogbXlfdXBzYW1wbGVfcHRyOworCisKKy8qCisgKiBJbml0aWFsaXplIGZvciBhbiB1cHNhbXBsaW5nIHBhc3MuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9wYXNzX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV91cHNhbXBsZV9wdHIgdXBzYW1wbGUgPSAobXlfdXBzYW1wbGVfcHRyKSBjaW5mby0+dXBzYW1wbGU7CisKKyAgLyogTWFyayB0aGUgY29udmVyc2lvbiBidWZmZXIgZW1wdHkgKi8KKyAgdXBzYW1wbGUtPm5leHRfcm93X291dCA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcjsKKyAgLyogSW5pdGlhbGl6ZSB0b3RhbC1oZWlnaHQgY291bnRlciBmb3IgZGV0ZWN0aW5nIGJvdHRvbSBvZiBpbWFnZSAqLworICB1cHNhbXBsZS0+cm93c190b19nbyA9IGNpbmZvLT5vdXRwdXRfaGVpZ2h0OworfQorCisKKy8qCisgKiBDb250cm9sIHJvdXRpbmUgdG8gZG8gdXBzYW1wbGluZyAoYW5kIGNvbG9yIGNvbnZlcnNpb24pLgorICoKKyAqIEluIHRoaXMgdmVyc2lvbiB3ZSB1cHNhbXBsZSBlYWNoIGNvbXBvbmVudCBpbmRlcGVuZGVudGx5LgorICogV2UgdXBzYW1wbGUgb25lIHJvdyBncm91cCBpbnRvIHRoZSBjb252ZXJzaW9uIGJ1ZmZlciwgdGhlbiBhcHBseQorICogY29sb3IgY29udmVyc2lvbiBhIHJvdyBhdCBhIHRpbWUuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzZXBfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisJICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gKmluX3Jvd19ncm91cF9jdHIsCisJICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBzX2F2YWlsLAorCSAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCisJICAgICAgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkKK3sKKyAgbXlfdXBzYW1wbGVfcHRyIHVwc2FtcGxlID0gKG15X3Vwc2FtcGxlX3B0cikgY2luZm8tPnVwc2FtcGxlOworICBpbnQgY2k7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyOworICBKRElNRU5TSU9OIG51bV9yb3dzOworCisgIC8qIEZpbGwgdGhlIGNvbnZlcnNpb24gYnVmZmVyLCBpZiBpdCdzIGVtcHR5ICovCisgIGlmICh1cHNhbXBsZS0+bmV4dF9yb3dfb3V0ID49IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcikgeworICAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisJIGNpKyssIGNvbXBwdHIrKykgeworICAgICAgLyogSW52b2tlIHBlci1jb21wb25lbnQgdXBzYW1wbGUgbWV0aG9kLiAgTm90aWNlIHdlIHBhc3MgYSBQT0lOVEVSCisgICAgICAgKiB0byBjb2xvcl9idWZbY2ldLCBzbyB0aGF0IGZ1bGxzaXplX3Vwc2FtcGxlIGNhbiBjaGFuZ2UgaXQuCisgICAgICAgKi8KKyAgICAgICgqdXBzYW1wbGUtPm1ldGhvZHNbY2ldKSAoY2luZm8sIGNvbXBwdHIsCisJaW5wdXRfYnVmW2NpXSArICgqaW5fcm93X2dyb3VwX2N0ciAqIHVwc2FtcGxlLT5yb3dncm91cF9oZWlnaHRbY2ldKSwKKwl1cHNhbXBsZS0+Y29sb3JfYnVmICsgY2kpOworICAgIH0KKyAgICB1cHNhbXBsZS0+bmV4dF9yb3dfb3V0ID0gMDsKKyAgfQorCisgIC8qIENvbG9yLWNvbnZlcnQgYW5kIGVtaXQgcm93cyAqLworCisgIC8qIEhvdyBtYW55IHdlIGhhdmUgaW4gdGhlIGJ1ZmZlcjogKi8KKyAgbnVtX3Jvd3MgPSAoSkRJTUVOU0lPTikgKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAtIHVwc2FtcGxlLT5uZXh0X3Jvd19vdXQpOworICAvKiBOb3QgbW9yZSB0aGFuIHRoZSBkaXN0YW5jZSB0byB0aGUgZW5kIG9mIHRoZSBpbWFnZS4gIE5lZWQgdGhpcyB0ZXN0CisgICAqIGluIGNhc2UgdGhlIGltYWdlIGhlaWdodCBpcyBub3QgYSBtdWx0aXBsZSBvZiBtYXhfdl9zYW1wX2ZhY3RvcjoKKyAgICovCisgIGlmIChudW1fcm93cyA+IHVwc2FtcGxlLT5yb3dzX3RvX2dvKSAKKyAgICBudW1fcm93cyA9IHVwc2FtcGxlLT5yb3dzX3RvX2dvOworICAvKiBBbmQgbm90IG1vcmUgdGhhbiB3aGF0IHRoZSBjbGllbnQgY2FuIGFjY2VwdDogKi8KKyAgb3V0X3Jvd3NfYXZhaWwgLT0gKm91dF9yb3dfY3RyOworICBpZiAobnVtX3Jvd3MgPiBvdXRfcm93c19hdmFpbCkKKyAgICBudW1fcm93cyA9IG91dF9yb3dzX2F2YWlsOworCisgICgqY2luZm8tPmNjb252ZXJ0LT5jb2xvcl9jb252ZXJ0KSAoY2luZm8sIHVwc2FtcGxlLT5jb2xvcl9idWYsCisJCQkJICAgICAoSkRJTUVOU0lPTikgdXBzYW1wbGUtPm5leHRfcm93X291dCwKKwkJCQkgICAgIG91dHB1dF9idWYgKyAqb3V0X3Jvd19jdHIsCisJCQkJICAgICAoaW50KSBudW1fcm93cyk7CisKKyAgLyogQWRqdXN0IGNvdW50cyAqLworICAqb3V0X3Jvd19jdHIgKz0gbnVtX3Jvd3M7CisgIHVwc2FtcGxlLT5yb3dzX3RvX2dvIC09IG51bV9yb3dzOworICB1cHNhbXBsZS0+bmV4dF9yb3dfb3V0ICs9IG51bV9yb3dzOworICAvKiBXaGVuIHRoZSBidWZmZXIgaXMgZW1wdGllZCwgZGVjbGFyZSB0aGlzIGlucHV0IHJvdyBncm91cCBjb25zdW1lZCAqLworICBpZiAodXBzYW1wbGUtPm5leHRfcm93X291dCA+PSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpCisgICAgKCppbl9yb3dfZ3JvdXBfY3RyKSsrOworfQorCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIHJvdXRpbmVzIGludm9rZWQgYnkgc2VwX3Vwc2FtcGxlIHRvIHVwc2FtcGxlIHBpeGVsIHZhbHVlcworICogb2YgYSBzaW5nbGUgY29tcG9uZW50LiAgT25lIHJvdyBncm91cCBpcyBwcm9jZXNzZWQgcGVyIGNhbGwuCisgKi8KKworCisvKgorICogRm9yIGZ1bGwtc2l6ZSBjb21wb25lbnRzLCB3ZSBqdXN0IG1ha2UgY29sb3JfYnVmW2NpXSBwb2ludCBhdCB0aGUKKyAqIGlucHV0IGJ1ZmZlciwgYW5kIHRodXMgYXZvaWQgY29weWluZyBhbnkgZGF0YS4gIE5vdGUgdGhhdCB0aGlzIGlzCisgKiBzYWZlIG9ubHkgYmVjYXVzZSBzZXBfdXBzYW1wbGUgZG9lc24ndCBkZWNsYXJlIHRoZSBpbnB1dCByb3cgZ3JvdXAKKyAqICJjb25zdW1lZCIgdW50aWwgd2UgYXJlIGRvbmUgY29sb3IgY29udmVydGluZyBhbmQgZW1pdHRpbmcgaXQuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitmdWxsc2l6ZV91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJCSAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikKK3sKKyAgKm91dHB1dF9kYXRhX3B0ciA9IGlucHV0X2RhdGE7Cit9CisKKworLyoKKyAqIFRoaXMgaXMgYSBuby1vcCB2ZXJzaW9uIHVzZWQgZm9yICJ1bmludGVyZXN0aW5nIiBjb21wb25lbnRzLgorICogVGhlc2UgY29tcG9uZW50cyB3aWxsIG5vdCBiZSByZWZlcmVuY2VkIGJ5IGNvbG9yIGNvbnZlcnNpb24uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitub29wX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQoreworICAqb3V0cHV0X2RhdGFfcHRyID0gTlVMTDsJLyogc2FmZXR5IGNoZWNrICovCit9CisKKworLyoKKyAqIFRoaXMgdmVyc2lvbiBoYW5kbGVzIGFueSBpbnRlZ3JhbCBzYW1wbGluZyByYXRpb3MuCisgKiBUaGlzIGlzIG5vdCB1c2VkIGZvciB0eXBpY2FsIEpQRUcgZmlsZXMsIHNvIGl0IG5lZWQgbm90IGJlIGZhc3QuCisgKiBOb3IsIGZvciB0aGF0IG1hdHRlciwgaXMgaXQgcGFydGljdWxhcmx5IGFjY3VyYXRlOiB0aGUgYWxnb3JpdGhtIGlzCisgKiBzaW1wbGUgcmVwbGljYXRpb24gb2YgdGhlIGlucHV0IHBpeGVsIG9udG8gdGhlIGNvcnJlc3BvbmRpbmcgb3V0cHV0CisgKiBwaXhlbHMuICBUaGUgaGktZmFsdXRpbiBzYW1wbGluZyBsaXRlcmF0dXJlIHJlZmVycyB0byB0aGlzIGFzIGEKKyAqICJib3ggZmlsdGVyIi4gIEEgYm94IGZpbHRlciB0ZW5kcyB0byBpbnRyb2R1Y2UgdmlzaWJsZSBhcnRpZmFjdHMsCisgKiBzbyBpZiB5b3UgYXJlIGFjdHVhbGx5IGdvaW5nIHRvIHVzZSAzOjEgb3IgNDoxIHNhbXBsaW5nIHJhdGlvcworICogeW91IHdvdWxkIGJlIHdlbGwgYWR2aXNlZCB0byBpbXByb3ZlIHRoaXMgY29kZS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2ludF91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQoreworICBteV91cHNhbXBsZV9wdHIgdXBzYW1wbGUgPSAobXlfdXBzYW1wbGVfcHRyKSBjaW5mby0+dXBzYW1wbGU7CisgIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEgPSAqb3V0cHV0X2RhdGFfcHRyOworICByZWdpc3RlciBKU0FNUFJPVyBpbnB0ciwgb3V0cHRyOworICByZWdpc3RlciBKU0FNUExFIGludmFsdWU7CisgIHJlZ2lzdGVyIGludCBoOworICBKU0FNUFJPVyBvdXRlbmQ7CisgIGludCBoX2V4cGFuZCwgdl9leHBhbmQ7CisgIGludCBpbnJvdywgb3V0cm93OworCisgIGhfZXhwYW5kID0gdXBzYW1wbGUtPmhfZXhwYW5kW2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF07CisgIHZfZXhwYW5kID0gdXBzYW1wbGUtPnZfZXhwYW5kW2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF07CisKKyAgaW5yb3cgPSBvdXRyb3cgPSAwOworICB3aGlsZSAob3V0cm93IDwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKSB7CisgICAgLyogR2VuZXJhdGUgb25lIG91dHB1dCByb3cgd2l0aCBwcm9wZXIgaG9yaXpvbnRhbCBleHBhbnNpb24gKi8KKyAgICBpbnB0ciA9IGlucHV0X2RhdGFbaW5yb3ddOworICAgIG91dHB0ciA9IG91dHB1dF9kYXRhW291dHJvd107CisgICAgb3V0ZW5kID0gb3V0cHRyICsgY2luZm8tPm91dHB1dF93aWR0aDsKKyAgICB3aGlsZSAob3V0cHRyIDwgb3V0ZW5kKSB7CisgICAgICBpbnZhbHVlID0gKmlucHRyKys7CS8qIGRvbid0IG5lZWQgR0VUSlNBTVBMRSgpIGhlcmUgKi8KKyAgICAgIGZvciAoaCA9IGhfZXhwYW5kOyBoID4gMDsgaC0tKSB7CisJKm91dHB0cisrID0gaW52YWx1ZTsKKyAgICAgIH0KKyAgICB9CisgICAgLyogR2VuZXJhdGUgYW55IGFkZGl0aW9uYWwgb3V0cHV0IHJvd3MgYnkgZHVwbGljYXRpbmcgdGhlIGZpcnN0IG9uZSAqLworICAgIGlmICh2X2V4cGFuZCA+IDEpIHsKKyAgICAgIGpjb3B5X3NhbXBsZV9yb3dzKG91dHB1dF9kYXRhLCBvdXRyb3csIG91dHB1dF9kYXRhLCBvdXRyb3crMSwKKwkJCXZfZXhwYW5kLTEsIGNpbmZvLT5vdXRwdXRfd2lkdGgpOworICAgIH0KKyAgICBpbnJvdysrOworICAgIG91dHJvdyArPSB2X2V4cGFuZDsKKyAgfQorfQorCisKKy8qCisgKiBGYXN0IHByb2Nlc3NpbmcgZm9yIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMToxIHZlcnRpY2FsLgorICogSXQncyBzdGlsbCBhIGJveCBmaWx0ZXIuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitoMnYxX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQoreworICBKU0FNUEFSUkFZIG91dHB1dF9kYXRhID0gKm91dHB1dF9kYXRhX3B0cjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHIsIG91dHB0cjsKKyAgcmVnaXN0ZXIgSlNBTVBMRSBpbnZhbHVlOworICBKU0FNUFJPVyBvdXRlbmQ7CisgIGludCBpbnJvdzsKKworICBmb3IgKGlucm93ID0gMDsgaW5yb3cgPCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7IGlucm93KyspIHsKKyAgICBpbnB0ciA9IGlucHV0X2RhdGFbaW5yb3ddOworICAgIG91dHB0ciA9IG91dHB1dF9kYXRhW2lucm93XTsKKyAgICBvdXRlbmQgPSBvdXRwdHIgKyBjaW5mby0+b3V0cHV0X3dpZHRoOworICAgIHdoaWxlIChvdXRwdHIgPCBvdXRlbmQpIHsKKyAgICAgIGludmFsdWUgPSAqaW5wdHIrKzsJLyogZG9uJ3QgbmVlZCBHRVRKU0FNUExFKCkgaGVyZSAqLworICAgICAgKm91dHB0cisrID0gaW52YWx1ZTsKKyAgICAgICpvdXRwdHIrKyA9IGludmFsdWU7CisgICAgfQorICB9Cit9CisKKworLyoKKyAqIEZhc3QgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwuCisgKiBJdCdzIHN0aWxsIGEgYm94IGZpbHRlci4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2gydjJfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCSAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpCit7CisgIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEgPSAqb3V0cHV0X2RhdGFfcHRyOworICByZWdpc3RlciBKU0FNUFJPVyBpbnB0ciwgb3V0cHRyOworICByZWdpc3RlciBKU0FNUExFIGludmFsdWU7CisgIEpTQU1QUk9XIG91dGVuZDsKKyAgaW50IGlucm93LCBvdXRyb3c7CisKKyAgaW5yb3cgPSBvdXRyb3cgPSAwOworICB3aGlsZSAob3V0cm93IDwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKSB7CisgICAgaW5wdHIgPSBpbnB1dF9kYXRhW2lucm93XTsKKyAgICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtvdXRyb3ddOworICAgIG91dGVuZCA9IG91dHB0ciArIGNpbmZvLT5vdXRwdXRfd2lkdGg7CisgICAgd2hpbGUgKG91dHB0ciA8IG91dGVuZCkgeworICAgICAgaW52YWx1ZSA9ICppbnB0cisrOwkvKiBkb24ndCBuZWVkIEdFVEpTQU1QTEUoKSBoZXJlICovCisgICAgICAqb3V0cHRyKysgPSBpbnZhbHVlOworICAgICAgKm91dHB0cisrID0gaW52YWx1ZTsKKyAgICB9CisgICAgamNvcHlfc2FtcGxlX3Jvd3Mob3V0cHV0X2RhdGEsIG91dHJvdywgb3V0cHV0X2RhdGEsIG91dHJvdysxLAorCQkgICAgICAxLCBjaW5mby0+b3V0cHV0X3dpZHRoKTsKKyAgICBpbnJvdysrOworICAgIG91dHJvdyArPSAyOworICB9Cit9CisKKworLyoKKyAqIEZhbmN5IHByb2Nlc3NpbmcgZm9yIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMToxIHZlcnRpY2FsLgorICoKKyAqIFRoZSB1cHNhbXBsaW5nIGFsZ29yaXRobSBpcyBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHBpeGVsIGNlbnRlcnMsCisgKiBhbHNvIGtub3duIGFzIGEgInRyaWFuZ2xlIGZpbHRlciIuICBUaGlzIGlzIGEgZ29vZCBjb21wcm9taXNlIGJldHdlZW4KKyAqIHNwZWVkIGFuZCB2aXN1YWwgcXVhbGl0eS4gIFRoZSBjZW50ZXJzIG9mIHRoZSBvdXRwdXQgcGl4ZWxzIGFyZSAxLzQgYW5kIDMvNAorICogb2YgdGhlIHdheSBiZXR3ZWVuIGlucHV0IHBpeGVsIGNlbnRlcnMuCisgKgorICogQSBub3RlIGFib3V0IHRoZSAiYmlhcyIgY2FsY3VsYXRpb25zOiB3aGVuIHJvdW5kaW5nIGZyYWN0aW9uYWwgdmFsdWVzIHRvCisgKiBpbnRlZ2VyLCB3ZSBkbyBub3Qgd2FudCB0byBhbHdheXMgcm91bmQgMC41IHVwIHRvIHRoZSBuZXh0IGludGVnZXIuCisgKiBJZiB3ZSBkaWQgdGhhdCwgd2UnZCBpbnRyb2R1Y2UgYSBub3RpY2VhYmxlIGJpYXMgdG93YXJkcyBsYXJnZXIgdmFsdWVzLgorICogSW5zdGVhZCwgdGhpcyBjb2RlIGlzIGFycmFuZ2VkIHNvIHRoYXQgMC41IHdpbGwgYmUgcm91bmRlZCB1cCBvciBkb3duIGF0CisgKiBhbHRlcm5hdGUgcGl4ZWwgbG9jYXRpb25zIChhIHNpbXBsZSBvcmRlcmVkIGRpdGhlciBwYXR0ZXJuKS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2gydjFfZmFuY3lfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCQkgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikKK3sKKyAgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSA9ICpvdXRwdXRfZGF0YV9wdHI7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyLCBvdXRwdHI7CisgIHJlZ2lzdGVyIGludCBpbnZhbHVlOworICByZWdpc3RlciBKRElNRU5TSU9OIGNvbGN0cjsKKyAgaW50IGlucm93OworCisgIGZvciAoaW5yb3cgPSAwOyBpbnJvdyA8IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcjsgaW5yb3crKykgeworICAgIGlucHRyID0gaW5wdXRfZGF0YVtpbnJvd107CisgICAgb3V0cHRyID0gb3V0cHV0X2RhdGFbaW5yb3ddOworICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgZmlyc3QgY29sdW1uICovCisgICAgaW52YWx1ZSA9IEdFVEpTQU1QTEUoKmlucHRyKyspOworICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSBpbnZhbHVlOworICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSAoKGludmFsdWUgKiAzICsgR0VUSlNBTVBMRSgqaW5wdHIpICsgMikgPj4gMik7CisKKyAgICBmb3IgKGNvbGN0ciA9IGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoIC0gMjsgY29sY3RyID4gMDsgY29sY3RyLS0pIHsKKyAgICAgIC8qIEdlbmVyYWwgY2FzZTogMy80ICogbmVhcmVyIHBpeGVsICsgMS80ICogZnVydGhlciBwaXhlbCAqLworICAgICAgaW52YWx1ZSA9IEdFVEpTQU1QTEUoKmlucHRyKyspICogMzsKKyAgICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSAoKGludmFsdWUgKyBHRVRKU0FNUExFKGlucHRyWy0yXSkgKyAxKSA+PiAyKTsKKyAgICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSAoKGludmFsdWUgKyBHRVRKU0FNUExFKCppbnB0cikgKyAyKSA+PiAyKTsKKyAgICB9CisKKyAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIGxhc3QgY29sdW1uICovCisgICAgaW52YWx1ZSA9IEdFVEpTQU1QTEUoKmlucHRyKTsKKyAgICAqb3V0cHRyKysgPSAoSlNBTVBMRSkgKChpbnZhbHVlICogMyArIEdFVEpTQU1QTEUoaW5wdHJbLTFdKSArIDEpID4+IDIpOworICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSBpbnZhbHVlOworICB9Cit9CisKKworLyoKKyAqIEZhbmN5IHByb2Nlc3NpbmcgZm9yIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMjoxIHZlcnRpY2FsLgorICogQWdhaW4gYSB0cmlhbmdsZSBmaWx0ZXI7IHNlZSBjb21tZW50cyBmb3IgaDJ2MSBjYXNlLCBhYm92ZS4KKyAqCisgKiBJdCBpcyBPSyBmb3IgdXMgdG8gcmVmZXJlbmNlIHRoZSBhZGphY2VudCBpbnB1dCByb3dzIGJlY2F1c2Ugd2UgZGVtYW5kZWQKKyAqIGNvbnRleHQgZnJvbSB0aGUgbWFpbiBidWZmZXIgY29udHJvbGxlciAoc2VlIGluaXRpYWxpemF0aW9uIGNvZGUpLgorICovCisKK01FVEhPRERFRih2b2lkKQoraDJ2Ml9mYW5jeV91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJCSAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQoreworICBKU0FNUEFSUkFZIG91dHB1dF9kYXRhID0gKm91dHB1dF9kYXRhX3B0cjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHIwLCBpbnB0cjEsIG91dHB0cjsKKyNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOAorICByZWdpc3RlciBpbnQgdGhpc2NvbHN1bSwgbGFzdGNvbHN1bSwgbmV4dGNvbHN1bTsKKyNlbHNlCisgIHJlZ2lzdGVyIElOVDMyIHRoaXNjb2xzdW0sIGxhc3Rjb2xzdW0sIG5leHRjb2xzdW07CisjZW5kaWYKKyAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2xjdHI7CisgIGludCBpbnJvdywgb3V0cm93LCB2OworCisgIGlucm93ID0gb3V0cm93ID0gMDsKKyAgd2hpbGUgKG91dHJvdyA8IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcikgeworICAgIGZvciAodiA9IDA7IHYgPCAyOyB2KyspIHsKKyAgICAgIC8qIGlucHRyMCBwb2ludHMgdG8gbmVhcmVzdCBpbnB1dCByb3csIGlucHRyMSBwb2ludHMgdG8gbmV4dCBuZWFyZXN0ICovCisgICAgICBpbnB0cjAgPSBpbnB1dF9kYXRhW2lucm93XTsKKyAgICAgIGlmICh2ID09IDApCQkvKiBuZXh0IG5lYXJlc3QgaXMgcm93IGFib3ZlICovCisJaW5wdHIxID0gaW5wdXRfZGF0YVtpbnJvdy0xXTsKKyAgICAgIGVsc2UJCQkvKiBuZXh0IG5lYXJlc3QgaXMgcm93IGJlbG93ICovCisJaW5wdHIxID0gaW5wdXRfZGF0YVtpbnJvdysxXTsKKyAgICAgIG91dHB0ciA9IG91dHB1dF9kYXRhW291dHJvdysrXTsKKworICAgICAgLyogU3BlY2lhbCBjYXNlIGZvciBmaXJzdCBjb2x1bW4gKi8KKyAgICAgIHRoaXNjb2xzdW0gPSBHRVRKU0FNUExFKCppbnB0cjArKykgKiAzICsgR0VUSlNBTVBMRSgqaW5wdHIxKyspOworICAgICAgbmV4dGNvbHN1bSA9IEdFVEpTQU1QTEUoKmlucHRyMCsrKSAqIDMgKyBHRVRKU0FNUExFKCppbnB0cjErKyk7CisgICAgICAqb3V0cHRyKysgPSAoSlNBTVBMRSkgKCh0aGlzY29sc3VtICogNCArIDgpID4+IDQpOworICAgICAgKm91dHB0cisrID0gKEpTQU1QTEUpICgodGhpc2NvbHN1bSAqIDMgKyBuZXh0Y29sc3VtICsgNykgPj4gNCk7CisgICAgICBsYXN0Y29sc3VtID0gdGhpc2NvbHN1bTsgdGhpc2NvbHN1bSA9IG5leHRjb2xzdW07CisKKyAgICAgIGZvciAoY29sY3RyID0gY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGggLSAyOyBjb2xjdHIgPiAwOyBjb2xjdHItLSkgeworCS8qIEdlbmVyYWwgY2FzZTogMy80ICogbmVhcmVyIHBpeGVsICsgMS80ICogZnVydGhlciBwaXhlbCBpbiBlYWNoICovCisJLyogZGltZW5zaW9uLCB0aHVzIDkvMTYsIDMvMTYsIDMvMTYsIDEvMTYgb3ZlcmFsbCAqLworCW5leHRjb2xzdW0gPSBHRVRKU0FNUExFKCppbnB0cjArKykgKiAzICsgR0VUSlNBTVBMRSgqaW5wdHIxKyspOworCSpvdXRwdHIrKyA9IChKU0FNUExFKSAoKHRoaXNjb2xzdW0gKiAzICsgbGFzdGNvbHN1bSArIDgpID4+IDQpOworCSpvdXRwdHIrKyA9IChKU0FNUExFKSAoKHRoaXNjb2xzdW0gKiAzICsgbmV4dGNvbHN1bSArIDcpID4+IDQpOworCWxhc3Rjb2xzdW0gPSB0aGlzY29sc3VtOyB0aGlzY29sc3VtID0gbmV4dGNvbHN1bTsKKyAgICAgIH0KKworICAgICAgLyogU3BlY2lhbCBjYXNlIGZvciBsYXN0IGNvbHVtbiAqLworICAgICAgKm91dHB0cisrID0gKEpTQU1QTEUpICgodGhpc2NvbHN1bSAqIDMgKyBsYXN0Y29sc3VtICsgOCkgPj4gNCk7CisgICAgICAqb3V0cHRyKysgPSAoSlNBTVBMRSkgKCh0aGlzY29sc3VtICogNCArIDcpID4+IDQpOworICAgIH0KKyAgICBpbnJvdysrOworICB9Cit9CisKKworLyoKKyAqIE1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciB1cHNhbXBsaW5nLgorICovCisKK0dMT0JBTCh2b2lkKQoramluaXRfdXBzYW1wbGVyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBteV91cHNhbXBsZV9wdHIgdXBzYW1wbGU7CisgIGludCBjaTsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7CisgIGJvb2xlYW4gbmVlZF9idWZmZXIsIGRvX2ZhbmN5OworICBpbnQgaF9pbl9ncm91cCwgdl9pbl9ncm91cCwgaF9vdXRfZ3JvdXAsIHZfb3V0X2dyb3VwOworCisgIHVwc2FtcGxlID0gKG15X3Vwc2FtcGxlX3B0cikKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCVNJWkVPRihteV91cHNhbXBsZXIpKTsKKyAgY2luZm8tPnVwc2FtcGxlID0gKHN0cnVjdCBqcGVnX3Vwc2FtcGxlciAqKSB1cHNhbXBsZTsKKyAgdXBzYW1wbGUtPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzc191cHNhbXBsZTsKKyAgdXBzYW1wbGUtPnB1Yi51cHNhbXBsZSA9IHNlcF91cHNhbXBsZTsKKyAgdXBzYW1wbGUtPnB1Yi5uZWVkX2NvbnRleHRfcm93cyA9IEZBTFNFOyAvKiB1bnRpbCB3ZSBmaW5kIG91dCBkaWZmZXJlbnRseSAqLworCisgIGlmIChjaW5mby0+Q0NJUjYwMV9zYW1wbGluZykJLyogdGhpcyBpc24ndCBzdXBwb3J0ZWQgKi8KKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NDSVI2MDFfTk9USU1QTCk7CisKKyAgLyogamRtYWluY3QuYyBkb2Vzbid0IHN1cHBvcnQgY29udGV4dCByb3dzIHdoZW4gbWluX0RDVF9zY2FsZWRfc2l6ZSA9IDEsCisgICAqIHNvIGRvbid0IGFzayBmb3IgaXQuCisgICAqLworICBkb19mYW5jeSA9IGNpbmZvLT5kb19mYW5jeV91cHNhbXBsaW5nICYmIGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplID4gMTsKKworICAvKiBWZXJpZnkgd2UgY2FuIGhhbmRsZSB0aGUgc2FtcGxpbmcgZmFjdG9ycywgc2VsZWN0IHBlci1jb21wb25lbnQgbWV0aG9kcywKKyAgICogYW5kIGNyZWF0ZSBzdG9yYWdlIGFzIG5lZWRlZC4KKyAgICovCisgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgICAgY2krKywgY29tcHB0cisrKSB7CisgICAgLyogQ29tcHV0ZSBzaXplIG9mIGFuICJpbnB1dCBncm91cCIgYWZ0ZXIgSURDVCBzY2FsaW5nLiAgVGhpcyBtYW55IHNhbXBsZXMKKyAgICAgKiBhcmUgdG8gYmUgY29udmVydGVkIHRvIG1heF9oX3NhbXBfZmFjdG9yICogbWF4X3Zfc2FtcF9mYWN0b3IgcGl4ZWxzLgorICAgICAqLworICAgIGhfaW5fZ3JvdXAgPSAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPkRDVF9zY2FsZWRfc2l6ZSkgLworCQkgY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemU7CisgICAgdl9pbl9ncm91cCA9IChjb21wcHRyLT52X3NhbXBfZmFjdG9yICogY29tcHB0ci0+RENUX3NjYWxlZF9zaXplKSAvCisJCSBjaW5mby0+bWluX0RDVF9zY2FsZWRfc2l6ZTsKKyAgICBoX291dF9ncm91cCA9IGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvcjsKKyAgICB2X291dF9ncm91cCA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcjsKKyAgICB1cHNhbXBsZS0+cm93Z3JvdXBfaGVpZ2h0W2NpXSA9IHZfaW5fZ3JvdXA7IC8qIHNhdmUgZm9yIHVzZSBsYXRlciAqLworICAgIG5lZWRfYnVmZmVyID0gVFJVRTsKKyAgICBpZiAoISBjb21wcHRyLT5jb21wb25lbnRfbmVlZGVkKSB7CisgICAgICAvKiBEb24ndCBib3RoZXIgdG8gdXBzYW1wbGUgYW4gdW5pbnRlcmVzdGluZyBjb21wb25lbnQuICovCisgICAgICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBub29wX3Vwc2FtcGxlOworICAgICAgbmVlZF9idWZmZXIgPSBGQUxTRTsKKyAgICB9IGVsc2UgaWYgKGhfaW5fZ3JvdXAgPT0gaF9vdXRfZ3JvdXAgJiYgdl9pbl9ncm91cCA9PSB2X291dF9ncm91cCkgeworICAgICAgLyogRnVsbHNpemUgY29tcG9uZW50cyBjYW4gYmUgcHJvY2Vzc2VkIHdpdGhvdXQgYW55IHdvcmsuICovCisgICAgICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBmdWxsc2l6ZV91cHNhbXBsZTsKKyAgICAgIG5lZWRfYnVmZmVyID0gRkFMU0U7CisgICAgfSBlbHNlIGlmIChoX2luX2dyb3VwICogMiA9PSBoX291dF9ncm91cCAmJgorCSAgICAgICB2X2luX2dyb3VwID09IHZfb3V0X2dyb3VwKSB7CisgICAgICAvKiBTcGVjaWFsIGNhc2VzIGZvciAyaDF2IHVwc2FtcGxpbmcgKi8KKyAgICAgIGlmIChkb19mYW5jeSAmJiBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCA+IDIpCisJdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0gaDJ2MV9mYW5jeV91cHNhbXBsZTsKKyAgICAgIGVsc2UKKwl1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBoMnYxX3Vwc2FtcGxlOworICAgIH0gZWxzZSBpZiAoaF9pbl9ncm91cCAqIDIgPT0gaF9vdXRfZ3JvdXAgJiYKKwkgICAgICAgdl9pbl9ncm91cCAqIDIgPT0gdl9vdXRfZ3JvdXApIHsKKyAgICAgIC8qIFNwZWNpYWwgY2FzZXMgZm9yIDJoMnYgdXBzYW1wbGluZyAqLworICAgICAgaWYgKGRvX2ZhbmN5ICYmIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoID4gMikgeworCXVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGgydjJfZmFuY3lfdXBzYW1wbGU7CisJdXBzYW1wbGUtPnB1Yi5uZWVkX2NvbnRleHRfcm93cyA9IFRSVUU7CisgICAgICB9IGVsc2UKKwl1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBoMnYyX3Vwc2FtcGxlOworICAgIH0gZWxzZSBpZiAoKGhfb3V0X2dyb3VwICUgaF9pbl9ncm91cCkgPT0gMCAmJgorCSAgICAgICAodl9vdXRfZ3JvdXAgJSB2X2luX2dyb3VwKSA9PSAwKSB7CisgICAgICAvKiBHZW5lcmljIGludGVncmFsLWZhY3RvcnMgdXBzYW1wbGluZyBtZXRob2QgKi8KKyAgICAgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGludF91cHNhbXBsZTsKKyAgICAgIHVwc2FtcGxlLT5oX2V4cGFuZFtjaV0gPSAoVUlOVDgpIChoX291dF9ncm91cCAvIGhfaW5fZ3JvdXApOworICAgICAgdXBzYW1wbGUtPnZfZXhwYW5kW2NpXSA9IChVSU5UOCkgKHZfb3V0X2dyb3VwIC8gdl9pbl9ncm91cCk7CisgICAgfSBlbHNlCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0ZSQUNUX1NBTVBMRV9OT1RJTVBMKTsKKyAgICBpZiAobmVlZF9idWZmZXIpIHsKKyAgICAgIHVwc2FtcGxlLT5jb2xvcl9idWZbY2ldID0gKCpjaW5mby0+bWVtLT5hbGxvY19zYXJyYXkpCisJKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkgKEpESU1FTlNJT04pIGpyb3VuZF91cCgobG9uZykgY2luZm8tPm91dHB1dF93aWR0aCwKKwkJCQkobG9uZykgY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yKSwKKwkgKEpESU1FTlNJT04pIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcik7CisgICAgfQorICB9Cit9CisKKyNlbmRpZiAvL19GWF9KUEVHX1RVUkJPXwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamR0cmFucy5jIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamR0cmFucy5jCmluZGV4IGMwNzZhNmMuLmFlNDRmMzYgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pkdHJhbnMuYworKysgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZHRyYW5zLmMKQEAgLTEsMTQ2ICsxLDE0NiBAQAotI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykNCi0vKg0KLSAqIGpkdHJhbnMuYw0KLSAqDQotICogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsIFRob21hcyBHLiBMYW5lLg0KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuDQotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLg0KLSAqDQotICogVGhpcyBmaWxlIGNvbnRhaW5zIGxpYnJhcnkgcm91dGluZXMgZm9yIHRyYW5zY29kaW5nIGRlY29tcHJlc3Npb24sDQotICogdGhhdCBpcywgcmVhZGluZyByYXcgRENUIGNvZWZmaWNpZW50IGFycmF5cyBmcm9tIGFuIGlucHV0IEpQRUcgZmlsZS4NCi0gKiBUaGUgcm91dGluZXMgaW4gamRhcGltaW4uYyB3aWxsIGFsc28gYmUgbmVlZGVkIGJ5IGEgdHJhbnNjb2Rlci4NCi0gKi8NCi0NCi0jZGVmaW5lIEpQRUdfSU5URVJOQUxTDQotI2luY2x1ZGUgImppbmNsdWRlLmgiDQotI2luY2x1ZGUgImpwZWdsaWIuaCINCi0NCi0NCi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLw0KLUxPQ0FMKHZvaWQpIHRyYW5zZGVjb2RlX21hc3Rlcl9zZWxlY3Rpb24gSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotDQotDQotLyoNCi0gKiBSZWFkIHRoZSBjb2VmZmljaWVudCBhcnJheXMgZnJvbSBhIEpQRUcgZmlsZS4NCi0gKiBqcGVnX3JlYWRfaGVhZGVyIG11c3QgYmUgY29tcGxldGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMuDQotICoNCi0gKiBUaGUgZW50aXJlIGltYWdlIGlzIHJlYWQgaW50byBhIHNldCBvZiB2aXJ0dWFsIGNvZWZmaWNpZW50LWJsb2NrIGFycmF5cywNCi0gKiBvbmUgcGVyIGNvbXBvbmVudC4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBwb2ludGVyIHRvIHRoZSBhcnJheSBvZg0KLSAqIHZpcnR1YWwtYXJyYXkgZGVzY3JpcHRvcnMuICBUaGVzZSBjYW4gYmUgbWFuaXB1bGF0ZWQgZGlyZWN0bHkgdmlhIHRoZQ0KLSAqIEpQRUcgbWVtb3J5IG1hbmFnZXIsIG9yIGhhbmRlZCBvZmYgdG8ganBlZ193cml0ZV9jb2VmZmljaWVudHMoKS4NCi0gKiBUbyByZWxlYXNlIHRoZSBtZW1vcnkgb2NjdXBpZWQgYnkgdGhlIHZpcnR1YWwgYXJyYXlzLCBjYWxsDQotICoganBlZ19maW5pc2hfZGVjb21wcmVzcygpIHdoZW4gZG9uZSB3aXRoIHRoZSBkYXRhLg0KLSAqDQotICogQW4gYWx0ZXJuYXRpdmUgdXNhZ2UgaXMgdG8gc2ltcGx5IG9idGFpbiBhY2Nlc3MgdG8gdGhlIGNvZWZmaWNpZW50IGFycmF5cw0KLSAqIGR1cmluZyBhIGJ1ZmZlcmVkLWltYWdlLW1vZGUgZGVjb21wcmVzc2lvbiBvcGVyYXRpb24uICBUaGlzIGlzIGFsbG93ZWQNCi0gKiBhZnRlciBhbnkganBlZ19maW5pc2hfb3V0cHV0KCkgY2FsbC4gIFRoZSBhcnJheXMgY2FuIGJlIGFjY2Vzc2VkIHVudGlsDQotICoganBlZ19maW5pc2hfZGVjb21wcmVzcygpIGlzIGNhbGxlZC4gIChOb3RlIHRoYXQgYW55IGNhbGwgdG8gdGhlIGxpYnJhcnkNCi0gKiBtYXkgcmVwb3NpdGlvbiB0aGUgYXJyYXlzLCBzbyBkb24ndCByZWx5IG9uIGFjY2Vzc192aXJ0X2JhcnJheSgpIHJlc3VsdHMNCi0gKiB0byBzdGF5IHZhbGlkIGFjcm9zcyBsaWJyYXJ5IGNhbGxzLikNCi0gKg0KLSAqIFJldHVybnMgTlVMTCBpZiBzdXNwZW5kZWQuICBUaGlzIGNhc2UgbmVlZCBiZSBjaGVja2VkIG9ubHkgaWYNCi0gKiBhIHN1c3BlbmRpbmcgZGF0YSBzb3VyY2UgaXMgdXNlZC4NCi0gKi8NCi0NCi1HTE9CQUwoanZpcnRfYmFycmF5X3B0ciAqKQ0KLWpwZWdfcmVhZF9jb2VmZmljaWVudHMgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgPT0gRFNUQVRFX1JFQURZKSB7DQotICAgIC8qIEZpcnN0IGNhbGw6IGluaXRpYWxpemUgYWN0aXZlIG1vZHVsZXMgKi8NCi0gICAgdHJhbnNkZWNvZGVfbWFzdGVyX3NlbGVjdGlvbihjaW5mbyk7DQotICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBEU1RBVEVfUkRDT0VGUzsNCi0gIH0NCi0gIGlmIChjaW5mby0+Z2xvYmFsX3N0YXRlID09IERTVEFURV9SRENPRUZTKSB7DQotICAgIC8qIEFic29yYiB3aG9sZSBmaWxlIGludG8gdGhlIGNvZWYgYnVmZmVyICovDQotICAgIGZvciAoOzspIHsNCi0gICAgICBpbnQgcmV0Y29kZTsNCi0gICAgICAvKiBDYWxsIHByb2dyZXNzIG1vbml0b3IgaG9vayBpZiBwcmVzZW50ICovDQotICAgICAgaWYgKGNpbmZvLT5wcm9ncmVzcyAhPSBOVUxMKQ0KLQkoKmNpbmZvLT5wcm9ncmVzcy0+cHJvZ3Jlc3NfbW9uaXRvcikgKChqX2NvbW1vbl9wdHIpIGNpbmZvKTsNCi0gICAgICAvKiBBYnNvcmIgc29tZSBtb3JlIGlucHV0ICovDQotICAgICAgcmV0Y29kZSA9ICgqY2luZm8tPmlucHV0Y3RsLT5jb25zdW1lX2lucHV0KSAoY2luZm8pOw0KLSAgICAgIGlmIChyZXRjb2RlID09IEpQRUdfU1VTUEVOREVEKQ0KLQlyZXR1cm4gTlVMTDsNCi0gICAgICBpZiAocmV0Y29kZSA9PSBKUEVHX1JFQUNIRURfRU9JKQ0KLQlicmVhazsNCi0gICAgICAvKiBBZHZhbmNlIHByb2dyZXNzIGNvdW50ZXIgaWYgYXBwcm9wcmlhdGUgKi8NCi0gICAgICBpZiAoY2luZm8tPnByb2dyZXNzICE9IE5VTEwgJiYNCi0JICAocmV0Y29kZSA9PSBKUEVHX1JPV19DT01QTEVURUQgfHwgcmV0Y29kZSA9PSBKUEVHX1JFQUNIRURfU09TKSkgew0KLQlpZiAoKytjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfY291bnRlciA+PSBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfbGltaXQpIHsNCi0JICAvKiBzdGFydHVwIHVuZGVyZXN0aW1hdGVkIG51bWJlciBvZiBzY2FuczsgcmF0Y2hldCB1cCBvbmUgc2NhbiAqLw0KLQkgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19saW1pdCArPSAobG9uZykgY2luZm8tPnRvdGFsX2lNQ1Vfcm93czsNCi0JfQ0KLSAgICAgIH0NCi0gICAgfQ0KLSAgICAvKiBTZXQgc3RhdGUgc28gdGhhdCBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzIGRvZXMgdGhlIHJpZ2h0IHRoaW5nICovDQotICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBEU1RBVEVfU1RPUFBJTkc7DQotICB9DQotICAvKiBBdCB0aGlzIHBvaW50IHdlIHNob3VsZCBiZSBpbiBzdGF0ZSBEU1RBVEVfU1RPUFBJTkcgaWYgYmVpbmcgdXNlZA0KLSAgICogc3RhbmRhbG9uZSwgb3IgaW4gc3RhdGUgRFNUQVRFX0JVRklNQUdFIGlmIGJlaW5nIGludm9rZWQgdG8gZ2V0IGFjY2Vzcw0KLSAgICogdG8gdGhlIGNvZWZmaWNpZW50cyBkdXJpbmcgYSBmdWxsIGJ1ZmZlcmVkLWltYWdlLW1vZGUgZGVjb21wcmVzc2lvbi4NCi0gICAqLw0KLSAgaWYgKChjaW5mby0+Z2xvYmFsX3N0YXRlID09IERTVEFURV9TVE9QUElORyB8fA0KLSAgICAgICBjaW5mby0+Z2xvYmFsX3N0YXRlID09IERTVEFURV9CVUZJTUFHRSkgJiYgY2luZm8tPmJ1ZmZlcmVkX2ltYWdlKSB7DQotICAgIHJldHVybiBjaW5mby0+Y29lZi0+Y29lZl9hcnJheXM7DQotICB9DQotICAvKiBPb3BzLCBpbXByb3BlciB1c2FnZSAqLw0KLSAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsNCi0gIHJldHVybiBOVUxMOwkJCS8qIGtlZXAgY29tcGlsZXIgaGFwcHkgKi8NCi19DQotDQotDQotLyoNCi0gKiBNYXN0ZXIgc2VsZWN0aW9uIG9mIGRlY29tcHJlc3Npb24gbW9kdWxlcyBmb3IgdHJhbnNjb2RpbmcuDQotICogVGhpcyBzdWJzdGl0dXRlcyBmb3IgamRtYXN0ZXIuYydzIGluaXRpYWxpemF0aW9uIG9mIHRoZSBmdWxsIGRlY29tcHJlc3Nvci4NCi0gKi8NCi0NCi1MT0NBTCh2b2lkKQ0KLXRyYW5zZGVjb2RlX21hc3Rlcl9zZWxlY3Rpb24gKGpfZGVjb21wcmVzc19wdHIgY2luZm8pDQotew0KLSAgLyogVGhpcyBpcyBlZmZlY3RpdmVseSBhIGJ1ZmZlcmVkLWltYWdlIG9wZXJhdGlvbi4gKi8NCi0gIGNpbmZvLT5idWZmZXJlZF9pbWFnZSA9IFRSVUU7DQotDQotICAvKiBFbnRyb3B5IGRlY29kaW5nOiBlaXRoZXIgSHVmZm1hbiBvciBhcml0aG1ldGljIGNvZGluZy4gKi8NCi0gIGlmIChjaW5mby0+YXJpdGhfY29kZSkgew0KLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0FSSVRIX05PVElNUEwpOw0KLSAgfSBlbHNlIHsNCi0gICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKSB7DQotI2lmZGVmIERfUFJPR1JFU1NJVkVfU1VQUE9SVEVEDQotICAgICAgamluaXRfcGh1ZmZfZGVjb2RlcihjaW5mbyk7DQotI2Vsc2UNCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7DQotI2VuZGlmDQotICAgIH0gZWxzZQ0KLSAgICAgIGppbml0X2h1ZmZfZGVjb2RlcihjaW5mbyk7DQotICB9DQotDQotICAvKiBBbHdheXMgZ2V0IGEgZnVsbC1pbWFnZSBjb2VmZmljaWVudCBidWZmZXIuICovDQotICBqaW5pdF9kX2NvZWZfY29udHJvbGxlcihjaW5mbywgVFJVRSk7DQotDQotICAvKiBXZSBjYW4gbm93IHRlbGwgdGhlIG1lbW9yeSBtYW5hZ2VyIHRvIGFsbG9jYXRlIHZpcnR1YWwgYXJyYXlzLiAqLw0KLSAgKCpjaW5mby0+bWVtLT5yZWFsaXplX3ZpcnRfYXJyYXlzKSAoKGpfY29tbW9uX3B0cikgY2luZm8pOw0KLQ0KLSAgLyogSW5pdGlhbGl6ZSBpbnB1dCBzaWRlIG9mIGRlY29tcHJlc3NvciB0byBjb25zdW1lIGZpcnN0IHNjYW4uICovDQotICAoKmNpbmZvLT5pbnB1dGN0bC0+c3RhcnRfaW5wdXRfcGFzcykgKGNpbmZvKTsNCi0NCi0gIC8qIEluaXRpYWxpemUgcHJvZ3Jlc3MgbW9uaXRvcmluZy4gKi8NCi0gIGlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCkgew0KLSAgICBpbnQgbnNjYW5zOw0KLSAgICAvKiBFc3RpbWF0ZSBudW1iZXIgb2Ygc2NhbnMgdG8gc2V0IHBhc3NfbGltaXQuICovDQotICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkgew0KLSAgICAgIC8qIEFyYml0cmFyaWx5IGVzdGltYXRlIDIgaW50ZXJsZWF2ZWQgREMgc2NhbnMgKyAzIEFDIHNjYW5zL2NvbXBvbmVudC4gKi8NCi0gICAgICBuc2NhbnMgPSAyICsgMyAqIGNpbmZvLT5udW1fY29tcG9uZW50czsNCi0gICAgfSBlbHNlIGlmIChjaW5mby0+aW5wdXRjdGwtPmhhc19tdWx0aXBsZV9zY2Fucykgew0KLSAgICAgIC8qIEZvciBhIG5vbnByb2dyZXNzaXZlIG11bHRpc2NhbiBmaWxlLCBlc3RpbWF0ZSAxIHNjYW4gcGVyIGNvbXBvbmVudC4gKi8NCi0gICAgICBuc2NhbnMgPSBjaW5mby0+bnVtX2NvbXBvbmVudHM7DQotICAgIH0gZWxzZSB7DQotICAgICAgbnNjYW5zID0gMTsNCi0gICAgfQ0KLSAgICBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfY291bnRlciA9IDBMOw0KLSAgICBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfbGltaXQgPSAobG9uZykgY2luZm8tPnRvdGFsX2lNQ1Vfcm93cyAqIG5zY2FuczsNCi0gICAgY2luZm8tPnByb2dyZXNzLT5jb21wbGV0ZWRfcGFzc2VzID0gMDsNCi0gICAgY2luZm8tPnByb2dyZXNzLT50b3RhbF9wYXNzZXMgPSAxOw0KLSAgfQ0KLX0NCi0NCi0jZW5kaWYgLy9fRlhfSlBFR19UVVJCT18NCisjaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQorLyoKKyAqIGpkdHJhbnMuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGxpYnJhcnkgcm91dGluZXMgZm9yIHRyYW5zY29kaW5nIGRlY29tcHJlc3Npb24sCisgKiB0aGF0IGlzLCByZWFkaW5nIHJhdyBEQ1QgY29lZmZpY2llbnQgYXJyYXlzIGZyb20gYW4gaW5wdXQgSlBFRyBmaWxlLgorICogVGhlIHJvdXRpbmVzIGluIGpkYXBpbWluLmMgd2lsbCBhbHNvIGJlIG5lZWRlZCBieSBhIHRyYW5zY29kZXIuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorCisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitMT0NBTCh2b2lkKSB0cmFuc2RlY29kZV9tYXN0ZXJfc2VsZWN0aW9uIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworCisKKy8qCisgKiBSZWFkIHRoZSBjb2VmZmljaWVudCBhcnJheXMgZnJvbSBhIEpQRUcgZmlsZS4KKyAqIGpwZWdfcmVhZF9oZWFkZXIgbXVzdCBiZSBjb21wbGV0ZWQgYmVmb3JlIGNhbGxpbmcgdGhpcy4KKyAqCisgKiBUaGUgZW50aXJlIGltYWdlIGlzIHJlYWQgaW50byBhIHNldCBvZiB2aXJ0dWFsIGNvZWZmaWNpZW50LWJsb2NrIGFycmF5cywKKyAqIG9uZSBwZXIgY29tcG9uZW50LiAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gdGhlIGFycmF5IG9mCisgKiB2aXJ0dWFsLWFycmF5IGRlc2NyaXB0b3JzLiAgVGhlc2UgY2FuIGJlIG1hbmlwdWxhdGVkIGRpcmVjdGx5IHZpYSB0aGUKKyAqIEpQRUcgbWVtb3J5IG1hbmFnZXIsIG9yIGhhbmRlZCBvZmYgdG8ganBlZ193cml0ZV9jb2VmZmljaWVudHMoKS4KKyAqIFRvIHJlbGVhc2UgdGhlIG1lbW9yeSBvY2N1cGllZCBieSB0aGUgdmlydHVhbCBhcnJheXMsIGNhbGwKKyAqIGpwZWdfZmluaXNoX2RlY29tcHJlc3MoKSB3aGVuIGRvbmUgd2l0aCB0aGUgZGF0YS4KKyAqCisgKiBBbiBhbHRlcm5hdGl2ZSB1c2FnZSBpcyB0byBzaW1wbHkgb2J0YWluIGFjY2VzcyB0byB0aGUgY29lZmZpY2llbnQgYXJyYXlzCisgKiBkdXJpbmcgYSBidWZmZXJlZC1pbWFnZS1tb2RlIGRlY29tcHJlc3Npb24gb3BlcmF0aW9uLiAgVGhpcyBpcyBhbGxvd2VkCisgKiBhZnRlciBhbnkganBlZ19maW5pc2hfb3V0cHV0KCkgY2FsbC4gIFRoZSBhcnJheXMgY2FuIGJlIGFjY2Vzc2VkIHVudGlsCisgKiBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKCkgaXMgY2FsbGVkLiAgKE5vdGUgdGhhdCBhbnkgY2FsbCB0byB0aGUgbGlicmFyeQorICogbWF5IHJlcG9zaXRpb24gdGhlIGFycmF5cywgc28gZG9uJ3QgcmVseSBvbiBhY2Nlc3NfdmlydF9iYXJyYXkoKSByZXN1bHRzCisgKiB0byBzdGF5IHZhbGlkIGFjcm9zcyBsaWJyYXJ5IGNhbGxzLikKKyAqCisgKiBSZXR1cm5zIE5VTEwgaWYgc3VzcGVuZGVkLiAgVGhpcyBjYXNlIG5lZWQgYmUgY2hlY2tlZCBvbmx5IGlmCisgKiBhIHN1c3BlbmRpbmcgZGF0YSBzb3VyY2UgaXMgdXNlZC4KKyAqLworCitHTE9CQUwoanZpcnRfYmFycmF5X3B0ciAqKQoranBlZ19yZWFkX2NvZWZmaWNpZW50cyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgPT0gRFNUQVRFX1JFQURZKSB7CisgICAgLyogRmlyc3QgY2FsbDogaW5pdGlhbGl6ZSBhY3RpdmUgbW9kdWxlcyAqLworICAgIHRyYW5zZGVjb2RlX21hc3Rlcl9zZWxlY3Rpb24oY2luZm8pOworICAgIGNpbmZvLT5nbG9iYWxfc3RhdGUgPSBEU1RBVEVfUkRDT0VGUzsKKyAgfQorICBpZiAoY2luZm8tPmdsb2JhbF9zdGF0ZSA9PSBEU1RBVEVfUkRDT0VGUykgeworICAgIC8qIEFic29yYiB3aG9sZSBmaWxlIGludG8gdGhlIGNvZWYgYnVmZmVyICovCisgICAgZm9yICg7OykgeworICAgICAgaW50IHJldGNvZGU7CisgICAgICAvKiBDYWxsIHByb2dyZXNzIG1vbml0b3IgaG9vayBpZiBwcmVzZW50ICovCisgICAgICBpZiAoY2luZm8tPnByb2dyZXNzICE9IE5VTEwpCisJKCpjaW5mby0+cHJvZ3Jlc3MtPnByb2dyZXNzX21vbml0b3IpICgoal9jb21tb25fcHRyKSBjaW5mbyk7CisgICAgICAvKiBBYnNvcmIgc29tZSBtb3JlIGlucHV0ICovCisgICAgICByZXRjb2RlID0gKCpjaW5mby0+aW5wdXRjdGwtPmNvbnN1bWVfaW5wdXQpIChjaW5mbyk7CisgICAgICBpZiAocmV0Y29kZSA9PSBKUEVHX1NVU1BFTkRFRCkKKwlyZXR1cm4gTlVMTDsKKyAgICAgIGlmIChyZXRjb2RlID09IEpQRUdfUkVBQ0hFRF9FT0kpCisJYnJlYWs7CisgICAgICAvKiBBZHZhbmNlIHByb2dyZXNzIGNvdW50ZXIgaWYgYXBwcm9wcmlhdGUgKi8KKyAgICAgIGlmIChjaW5mby0+cHJvZ3Jlc3MgIT0gTlVMTCAmJgorCSAgKHJldGNvZGUgPT0gSlBFR19ST1dfQ09NUExFVEVEIHx8IHJldGNvZGUgPT0gSlBFR19SRUFDSEVEX1NPUykpIHsKKwlpZiAoKytjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfY291bnRlciA+PSBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfbGltaXQpIHsKKwkgIC8qIHN0YXJ0dXAgdW5kZXJlc3RpbWF0ZWQgbnVtYmVyIG9mIHNjYW5zOyByYXRjaGV0IHVwIG9uZSBzY2FuICovCisJICBjaW5mby0+cHJvZ3Jlc3MtPnBhc3NfbGltaXQgKz0gKGxvbmcpIGNpbmZvLT50b3RhbF9pTUNVX3Jvd3M7CisJfQorICAgICAgfQorICAgIH0KKyAgICAvKiBTZXQgc3RhdGUgc28gdGhhdCBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzIGRvZXMgdGhlIHJpZ2h0IHRoaW5nICovCisgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9IERTVEFURV9TVE9QUElORzsKKyAgfQorICAvKiBBdCB0aGlzIHBvaW50IHdlIHNob3VsZCBiZSBpbiBzdGF0ZSBEU1RBVEVfU1RPUFBJTkcgaWYgYmVpbmcgdXNlZAorICAgKiBzdGFuZGFsb25lLCBvciBpbiBzdGF0ZSBEU1RBVEVfQlVGSU1BR0UgaWYgYmVpbmcgaW52b2tlZCB0byBnZXQgYWNjZXNzCisgICAqIHRvIHRoZSBjb2VmZmljaWVudHMgZHVyaW5nIGEgZnVsbCBidWZmZXJlZC1pbWFnZS1tb2RlIGRlY29tcHJlc3Npb24uCisgICAqLworICBpZiAoKGNpbmZvLT5nbG9iYWxfc3RhdGUgPT0gRFNUQVRFX1NUT1BQSU5HIHx8CisgICAgICAgY2luZm8tPmdsb2JhbF9zdGF0ZSA9PSBEU1RBVEVfQlVGSU1BR0UpICYmIGNpbmZvLT5idWZmZXJlZF9pbWFnZSkgeworICAgIHJldHVybiBjaW5mby0+Y29lZi0+Y29lZl9hcnJheXM7CisgIH0KKyAgLyogT29wcywgaW1wcm9wZXIgdXNhZ2UgKi8KKyAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1NUQVRFLCBjaW5mby0+Z2xvYmFsX3N0YXRlKTsKKyAgcmV0dXJuIE5VTEw7CQkJLyoga2VlcCBjb21waWxlciBoYXBweSAqLworfQorCisKKy8qCisgKiBNYXN0ZXIgc2VsZWN0aW9uIG9mIGRlY29tcHJlc3Npb24gbW9kdWxlcyBmb3IgdHJhbnNjb2RpbmcuCisgKiBUaGlzIHN1YnN0aXR1dGVzIGZvciBqZG1hc3Rlci5jJ3MgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGZ1bGwgZGVjb21wcmVzc29yLgorICovCisKK0xPQ0FMKHZvaWQpCit0cmFuc2RlY29kZV9tYXN0ZXJfc2VsZWN0aW9uIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICAvKiBUaGlzIGlzIGVmZmVjdGl2ZWx5IGEgYnVmZmVyZWQtaW1hZ2Ugb3BlcmF0aW9uLiAqLworICBjaW5mby0+YnVmZmVyZWRfaW1hZ2UgPSBUUlVFOworCisgIC8qIEVudHJvcHkgZGVjb2Rpbmc6IGVpdGhlciBIdWZmbWFuIG9yIGFyaXRobWV0aWMgY29kaW5nLiAqLworICBpZiAoY2luZm8tPmFyaXRoX2NvZGUpIHsKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0FSSVRIX05PVElNUEwpOworICB9IGVsc2UgeworICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkgeworI2lmZGVmIERfUFJPR1JFU1NJVkVfU1VQUE9SVEVECisgICAgICBqaW5pdF9waHVmZl9kZWNvZGVyKGNpbmZvKTsKKyNlbHNlCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisjZW5kaWYKKyAgICB9IGVsc2UKKyAgICAgIGppbml0X2h1ZmZfZGVjb2RlcihjaW5mbyk7CisgIH0KKworICAvKiBBbHdheXMgZ2V0IGEgZnVsbC1pbWFnZSBjb2VmZmljaWVudCBidWZmZXIuICovCisgIGppbml0X2RfY29lZl9jb250cm9sbGVyKGNpbmZvLCBUUlVFKTsKKworICAvKiBXZSBjYW4gbm93IHRlbGwgdGhlIG1lbW9yeSBtYW5hZ2VyIHRvIGFsbG9jYXRlIHZpcnR1YWwgYXJyYXlzLiAqLworICAoKmNpbmZvLT5tZW0tPnJlYWxpemVfdmlydF9hcnJheXMpICgoal9jb21tb25fcHRyKSBjaW5mbyk7CisKKyAgLyogSW5pdGlhbGl6ZSBpbnB1dCBzaWRlIG9mIGRlY29tcHJlc3NvciB0byBjb25zdW1lIGZpcnN0IHNjYW4uICovCisgICgqY2luZm8tPmlucHV0Y3RsLT5zdGFydF9pbnB1dF9wYXNzKSAoY2luZm8pOworCisgIC8qIEluaXRpYWxpemUgcHJvZ3Jlc3MgbW9uaXRvcmluZy4gKi8KKyAgaWYgKGNpbmZvLT5wcm9ncmVzcyAhPSBOVUxMKSB7CisgICAgaW50IG5zY2FuczsKKyAgICAvKiBFc3RpbWF0ZSBudW1iZXIgb2Ygc2NhbnMgdG8gc2V0IHBhc3NfbGltaXQuICovCisgICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKSB7CisgICAgICAvKiBBcmJpdHJhcmlseSBlc3RpbWF0ZSAyIGludGVybGVhdmVkIERDIHNjYW5zICsgMyBBQyBzY2Fucy9jb21wb25lbnQuICovCisgICAgICBuc2NhbnMgPSAyICsgMyAqIGNpbmZvLT5udW1fY29tcG9uZW50czsKKyAgICB9IGVsc2UgaWYgKGNpbmZvLT5pbnB1dGN0bC0+aGFzX211bHRpcGxlX3NjYW5zKSB7CisgICAgICAvKiBGb3IgYSBub25wcm9ncmVzc2l2ZSBtdWx0aXNjYW4gZmlsZSwgZXN0aW1hdGUgMSBzY2FuIHBlciBjb21wb25lbnQuICovCisgICAgICBuc2NhbnMgPSBjaW5mby0+bnVtX2NvbXBvbmVudHM7CisgICAgfSBlbHNlIHsKKyAgICAgIG5zY2FucyA9IDE7CisgICAgfQorICAgIGNpbmZvLT5wcm9ncmVzcy0+cGFzc19jb3VudGVyID0gMEw7CisgICAgY2luZm8tPnByb2dyZXNzLT5wYXNzX2xpbWl0ID0gKGxvbmcpIGNpbmZvLT50b3RhbF9pTUNVX3Jvd3MgKiBuc2NhbnM7CisgICAgY2luZm8tPnByb2dyZXNzLT5jb21wbGV0ZWRfcGFzc2VzID0gMDsKKyAgICBjaW5mby0+cHJvZ3Jlc3MtPnRvdGFsX3Bhc3NlcyA9IDE7CisgIH0KK30KKworI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZXJyb3IuYyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2plcnJvci5jCmluZGV4IDlkNjczYmEuLjQyZTQwNjYgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2plcnJvci5jCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2plcnJvci5jCkBAIC0xLDI1NSArMSwyNTUgQEAKLSNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pDQotLyoNCi0gKiBqZXJyb3IuYw0KLSAqDQotICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTgsIFRob21hcyBHLiBMYW5lLg0KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuDQotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLg0KLSAqDQotICogVGhpcyBmaWxlIGNvbnRhaW5zIHNpbXBsZSBlcnJvci1yZXBvcnRpbmcgYW5kIHRyYWNlLW1lc3NhZ2Ugcm91dGluZXMuDQotICogVGhlc2UgYXJlIHN1aXRhYmxlIGZvciBVbml4LWxpa2Ugc3lzdGVtcyBhbmQgb3RoZXJzIHdoZXJlIHdyaXRpbmcgdG8NCi0gKiBzdGRlcnIgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLiAgTWFueSBhcHBsaWNhdGlvbnMgd2lsbCB3YW50IHRvIHJlcGxhY2UNCi0gKiBzb21lIG9yIGFsbCBvZiB0aGVzZSByb3V0aW5lcy4NCi0gKg0KLSAqIElmIHlvdSBkZWZpbmUgVVNFX1dJTkRPV1NfTUVTU0FHRUJPWCBpbiBqY29uZmlnLmggb3IgaW4gdGhlIG1ha2VmaWxlLA0KLSAqIHlvdSBnZXQgYSBXaW5kb3dzLXNwZWNpZmljIGhhY2sgdG8gZGlzcGxheSBlcnJvciBtZXNzYWdlcyBpbiBhIGRpYWxvZyBib3guDQotICogSXQgYWluJ3QgbXVjaCwgYnV0IGl0IGJlYXRzIGRyb3BwaW5nIGVycm9yIG1lc3NhZ2VzIGludG8gdGhlIGJpdCBidWNrZXQsDQotICogd2hpY2ggaXMgd2hhdCBoYXBwZW5zIHRvIG91dHB1dCB0byBzdGRlcnIgdW5kZXIgbW9zdCBXaW5kb3dzIEMgY29tcGlsZXJzLg0KLSAqDQotICogVGhlc2Ugcm91dGluZXMgYXJlIHVzZWQgYnkgYm90aCB0aGUgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gY29kZS4NCi0gKi8NCi0NCi0vKiB0aGlzIGlzIG5vdCBhIGNvcmUgbGlicmFyeSBtb2R1bGUsIHNvIGl0IGRvZXNuJ3QgZGVmaW5lIEpQRUdfSU5URVJOQUxTICovDQotI2luY2x1ZGUgImppbmNsdWRlLmgiDQotI2luY2x1ZGUgImpwZWdsaWIuaCINCi0jaW5jbHVkZSAianZlcnNpb24uaCINCi0jaW5jbHVkZSAiamVycm9yLmgiDQotDQotI2lmbmRlZiBFWElUX0ZBSUxVUkUJCS8qIGRlZmluZSBleGl0KCkgY29kZXMgaWYgbm90IHByb3ZpZGVkICovDQotI2RlZmluZSBFWElUX0ZBSUxVUkUgIDENCi0jZW5kaWYNCi0NCi0NCi0vKg0KLSAqIENyZWF0ZSB0aGUgbWVzc2FnZSBzdHJpbmcgdGFibGUuDQotICogV2UgZG8gdGhpcyBmcm9tIHRoZSBtYXN0ZXIgbWVzc2FnZSBsaXN0IGluIGplcnJvci5oIGJ5IHJlLXJlYWRpbmcNCi0gKiBqZXJyb3IuaCB3aXRoIGEgc3VpdGFibGUgZGVmaW5pdGlvbiBmb3IgbWFjcm8gSk1FU1NBR0UuDQotICogVGhlIG1lc3NhZ2UgdGFibGUgaXMgbWFkZSBhbiBleHRlcm5hbCBzeW1ib2wganVzdCBpbiBjYXNlIGFueSBhcHBsaWNhdGlvbnMNCi0gKiB3YW50IHRvIHJlZmVyIHRvIGl0IGRpcmVjdGx5Lg0KLSAqLw0KLQ0KLSNpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTDQotI2RlZmluZSBqcGVnX3N0ZF9tZXNzYWdlX3RhYmxlCWpNc2dUYWJsZQ0KLSNlbmRpZg0KLQ0KLSNkZWZpbmUgSk1FU1NBR0UoY29kZSxzdHJpbmcpCXN0cmluZyAsDQotDQotY29uc3QgY2hhciAqIGNvbnN0IGpwZWdfc3RkX21lc3NhZ2VfdGFibGVbXSA9IHsNCi0jaW5jbHVkZSAiamVycm9yLmgiDQotICBOVUxMDQotfTsNCi0NCi0NCi0vKg0KLSAqIEVycm9yIGV4aXQgaGFuZGxlcjogbXVzdCBub3QgcmV0dXJuIHRvIGNhbGxlci4NCi0gKg0KLSAqIEFwcGxpY2F0aW9ucyBtYXkgb3ZlcnJpZGUgdGhpcyBpZiB0aGV5IHdhbnQgdG8gZ2V0IGNvbnRyb2wgYmFjayBhZnRlcg0KLSAqIGFuIGVycm9yLiAgVHlwaWNhbGx5IG9uZSB3b3VsZCBsb25nam1wIHNvbWV3aGVyZSBpbnN0ZWFkIG9mIGV4aXRpbmcuDQotICogVGhlIHNldGptcCBidWZmZXIgY2FuIGJlIG1hZGUgYSBwcml2YXRlIGZpZWxkIHdpdGhpbiBhbiBleHBhbmRlZCBlcnJvcg0KLSAqIGhhbmRsZXIgb2JqZWN0LiAgTm90ZSB0aGF0IHRoZSBpbmZvIG5lZWRlZCB0byBnZW5lcmF0ZSBhbiBlcnJvciBtZXNzYWdlDQotICogaXMgc3RvcmVkIGluIHRoZSBlcnJvciBvYmplY3QsIHNvIHlvdSBjYW4gZ2VuZXJhdGUgdGhlIG1lc3NhZ2Ugbm93IG9yDQotICogbGF0ZXIsIGF0IHlvdXIgY29udmVuaWVuY2UuDQotICogWW91IHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgSlBFRyBvYmplY3QgaXMgY2xlYW5lZCB1cCAod2l0aCBqcGVnX2Fib3J0DQotICogb3IganBlZ19kZXN0cm95KSBhdCBzb21lIHBvaW50Lg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLWVycm9yX2V4aXQgKGpfY29tbW9uX3B0ciBjaW5mbykNCi17DQotICAvKiBBbHdheXMgZGlzcGxheSB0aGUgbWVzc2FnZSAqLw0KLSAgKCpjaW5mby0+ZXJyLT5vdXRwdXRfbWVzc2FnZSkgKGNpbmZvKTsNCi0NCi0gIC8qIExldCB0aGUgbWVtb3J5IG1hbmFnZXIgZGVsZXRlIGFueSB0ZW1wIGZpbGVzIGJlZm9yZSB3ZSBkaWUgKi8NCi0gIGpwZWdfZGVzdHJveShjaW5mbyk7DQotDQotLy8gIGV4aXQoRVhJVF9GQUlMVVJFKTsNCi19DQotDQotDQotLyoNCi0gKiBBY3R1YWwgb3V0cHV0IG9mIGFuIGVycm9yIG9yIHRyYWNlIG1lc3NhZ2UuDQotICogQXBwbGljYXRpb25zIG1heSBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBzZW5kIEpQRUcgbWVzc2FnZXMgc29tZXdoZXJlDQotICogb3RoZXIgdGhhbiBzdGRlcnIuDQotICoNCi0gKiBPbiBXaW5kb3dzLCBwcmludGluZyB0byBzdGRlcnIgaXMgZ2VuZXJhbGx5IGNvbXBsZXRlbHkgdXNlbGVzcywNCi0gKiBzbyB3ZSBwcm92aWRlIG9wdGlvbmFsIGNvZGUgdG8gcHJvZHVjZSBhbiBlcnJvci1kaWFsb2cgcG9wdXAuDQotICogTW9zdCBXaW5kb3dzIGFwcGxpY2F0aW9ucyB3aWxsIHN0aWxsIHByZWZlciB0byBvdmVycmlkZSB0aGlzIHJvdXRpbmUsDQotICogYnV0IGlmIHRoZXkgZG9uJ3QsIGl0J2xsIGRvIHNvbWV0aGluZyBhdCBsZWFzdCBtYXJnaW5hbGx5IHVzZWZ1bC4NCi0gKg0KLSAqIE5PVEU6IHRvIHVzZSB0aGUgbGlicmFyeSBpbiBhbiBlbnZpcm9ubWVudCB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUNCi0gKiBDIHN0ZGlvIGxpYnJhcnksIHlvdSBtYXkgaGF2ZSB0byBkZWxldGUgdGhlIGNhbGwgdG8gZnByaW50ZigpIGVudGlyZWx5LA0KLSAqIG5vdCBqdXN0IG5vdCB1c2UgdGhpcyByb3V0aW5lLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLW91dHB1dF9tZXNzYWdlIChqX2NvbW1vbl9wdHIgY2luZm8pDQotew0KLSAgY2hhciBidWZmZXJbSk1TR19MRU5HVEhfTUFYXTsNCi0NCi0gIC8qIENyZWF0ZSB0aGUgbWVzc2FnZSAqLw0KLSAgKCpjaW5mby0+ZXJyLT5mb3JtYXRfbWVzc2FnZSkgKGNpbmZvLCBidWZmZXIpOw0KLQ0KLSNpZmRlZiBVU0VfV0lORE9XU19NRVNTQUdFQk9YDQotICAvKiBEaXNwbGF5IGl0IGluIGEgbWVzc2FnZSBkaWFsb2cgYm94ICovDQotICBNZXNzYWdlQm94KEdldEFjdGl2ZVdpbmRvdygpLCBidWZmZXIsICJKUEVHIExpYnJhcnkgRXJyb3IiLA0KLQkgICAgIE1CX09LIHwgTUJfSUNPTkVSUk9SKTsNCi0jZWxzZQ0KLSAgLyogU2VuZCBpdCB0byBzdGRlcnIsIGFkZGluZyBhIG5ld2xpbmUgKi8NCi0jaWZuZGVmIF9GUERGQVBJX01JTklfDQotICBGWFNZU19mcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBidWZmZXIpOw0KLSNlbmRpZg0KLSNlbmRpZg0KLX0NCi0NCi0NCi0vKg0KLSAqIERlY2lkZSB3aGV0aGVyIHRvIGVtaXQgYSB0cmFjZSBvciB3YXJuaW5nIG1lc3NhZ2UuDQotICogbXNnX2xldmVsIGlzIG9uZSBvZjoNCi0gKiAgIC0xOiByZWNvdmVyYWJsZSBjb3JydXB0LWRhdGEgd2FybmluZywgbWF5IHdhbnQgdG8gYWJvcnQuDQotICogICAgMDogaW1wb3J0YW50IGFkdmlzb3J5IG1lc3NhZ2VzIChhbHdheXMgZGlzcGxheSB0byB1c2VyKS4NCi0gKiAgICAxOiBmaXJzdCBsZXZlbCBvZiB0cmFjaW5nIGRldGFpbC4NCi0gKiAgICAyLDMsLi4uOiBzdWNjZXNzaXZlbHkgbW9yZSBkZXRhaWxlZCB0cmFjaW5nIG1lc3NhZ2VzLg0KLSAqIEFuIGFwcGxpY2F0aW9uIG1pZ2h0IG92ZXJyaWRlIHRoaXMgbWV0aG9kIGlmIGl0IHdhbnRlZCB0byBhYm9ydCBvbiB3YXJuaW5ncw0KLSAqIG9yIGNoYW5nZSB0aGUgcG9saWN5IGFib3V0IHdoaWNoIG1lc3NhZ2VzIHRvIGRpc3BsYXkuDQotICovDQotDQotTUVUSE9EREVGKHZvaWQpDQotZW1pdF9tZXNzYWdlIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBtc2dfbGV2ZWwpDQotew0KLSAgc3RydWN0IGpwZWdfZXJyb3JfbWdyICogZXJyID0gY2luZm8tPmVycjsNCi0NCi0gIGlmIChtc2dfbGV2ZWwgPCAwKSB7DQotICAgIC8qIEl0J3MgYSB3YXJuaW5nIG1lc3NhZ2UuICBTaW5jZSBjb3JydXB0IGZpbGVzIG1heSBnZW5lcmF0ZSBtYW55IHdhcm5pbmdzLA0KLSAgICAgKiB0aGUgcG9saWN5IGltcGxlbWVudGVkIGhlcmUgaXMgdG8gc2hvdyBvbmx5IHRoZSBmaXJzdCB3YXJuaW5nLA0KLSAgICAgKiB1bmxlc3MgdHJhY2VfbGV2ZWwgPj0gMy4NCi0gICAgICovDQotICAgIGlmIChlcnItPm51bV93YXJuaW5ncyA9PSAwIHx8IGVyci0+dHJhY2VfbGV2ZWwgPj0gMykNCi0gICAgICAoKmVyci0+b3V0cHV0X21lc3NhZ2UpIChjaW5mbyk7DQotICAgIC8qIEFsd2F5cyBjb3VudCB3YXJuaW5ncyBpbiBudW1fd2FybmluZ3MuICovDQotICAgIGVyci0+bnVtX3dhcm5pbmdzKys7DQotICB9IGVsc2Ugew0KLSAgICAvKiBJdCdzIGEgdHJhY2UgbWVzc2FnZS4gIFNob3cgaXQgaWYgdHJhY2VfbGV2ZWwgPj0gbXNnX2xldmVsLiAqLw0KLSAgICBpZiAoZXJyLT50cmFjZV9sZXZlbCA+PSBtc2dfbGV2ZWwpDQotICAgICAgKCplcnItPm91dHB1dF9tZXNzYWdlKSAoY2luZm8pOw0KLSAgfQ0KLX0NCi0NCi0NCi0vKg0KLSAqIEZvcm1hdCBhIG1lc3NhZ2Ugc3RyaW5nIGZvciB0aGUgbW9zdCByZWNlbnQgSlBFRyBlcnJvciBvciBtZXNzYWdlLg0KLSAqIFRoZSBtZXNzYWdlIGlzIHN0b3JlZCBpbnRvIGJ1ZmZlciwgd2hpY2ggc2hvdWxkIGJlIGF0IGxlYXN0IEpNU0dfTEVOR1RIX01BWA0KLSAqIGNoYXJhY3RlcnMuICBOb3RlIHRoYXQgbm8gJ1xuJyBjaGFyYWN0ZXIgaXMgYWRkZWQgdG8gdGhlIHN0cmluZy4NCi0gKiBGZXcgYXBwbGljYXRpb25zIHNob3VsZCBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgbWV0aG9kLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLWZvcm1hdF9tZXNzYWdlIChqX2NvbW1vbl9wdHIgY2luZm8sIGNoYXIgKiBidWZmZXIpDQotew0KLSNpZiAwCS8qIFhZUSAqLw0KLSAgc3RydWN0IGpwZWdfZXJyb3JfbWdyICogZXJyID0gY2luZm8tPmVycjsNCi0gIGludCBtc2dfY29kZSA9IGVyci0+bXNnX2NvZGU7DQotICBjb25zdCBjaGFyICogbXNndGV4dCA9IE5VTEw7DQotICBjb25zdCBjaGFyICogbXNncHRyOw0KLSAgY2hhciBjaDsNCi0gIGJvb2xlYW4gaXNzdHJpbmc7DQotDQotICAvKiBMb29rIHVwIG1lc3NhZ2Ugc3RyaW5nIGluIHByb3BlciB0YWJsZSAqLw0KLSAgaWYgKG1zZ19jb2RlID4gMCAmJiBtc2dfY29kZSA8PSBlcnItPmxhc3RfanBlZ19tZXNzYWdlKSB7DQotICAgIG1zZ3RleHQgPSBlcnItPmpwZWdfbWVzc2FnZV90YWJsZVttc2dfY29kZV07DQotICB9IGVsc2UgaWYgKGVyci0+YWRkb25fbWVzc2FnZV90YWJsZSAhPSBOVUxMICYmDQotCSAgICAgbXNnX2NvZGUgPj0gZXJyLT5maXJzdF9hZGRvbl9tZXNzYWdlICYmDQotCSAgICAgbXNnX2NvZGUgPD0gZXJyLT5sYXN0X2FkZG9uX21lc3NhZ2UpIHsNCi0gICAgbXNndGV4dCA9IGVyci0+YWRkb25fbWVzc2FnZV90YWJsZVttc2dfY29kZSAtIGVyci0+Zmlyc3RfYWRkb25fbWVzc2FnZV07DQotICB9DQotDQotICAvKiBEZWZlbmQgYWdhaW5zdCBib2d1cyBtZXNzYWdlIG51bWJlciAqLw0KLSAgaWYgKG1zZ3RleHQgPT0gTlVMTCkgew0KLSAgICBlcnItPm1zZ19wYXJtLmlbMF0gPSBtc2dfY29kZTsNCi0gICAgbXNndGV4dCA9IGVyci0+anBlZ19tZXNzYWdlX3RhYmxlWzBdOw0KLSAgfQ0KLQ0KLSAgLyogQ2hlY2sgZm9yIHN0cmluZyBwYXJhbWV0ZXIsIGFzIGluZGljYXRlZCBieSAlcyBpbiB0aGUgbWVzc2FnZSB0ZXh0ICovDQotICBpc3N0cmluZyA9IEZBTFNFOw0KLSAgbXNncHRyID0gbXNndGV4dDsNCi0gIHdoaWxlICgoY2ggPSAqbXNncHRyKyspICE9ICdcMCcpIHsNCi0gICAgaWYgKGNoID09ICclJykgew0KLSAgICAgIGlmICgqbXNncHRyID09ICdzJykgaXNzdHJpbmcgPSBUUlVFOw0KLSAgICAgIGJyZWFrOw0KLSAgICB9DQotICB9DQotDQotICAvKiBGb3JtYXQgdGhlIG1lc3NhZ2UgaW50byB0aGUgcGFzc2VkIGJ1ZmZlciAqLw0KLSAgaWYgKGlzc3RyaW5nKQ0KLSAgICBGWFNZU19zcHJpbnRmKGJ1ZmZlciwgbXNndGV4dCwgZXJyLT5tc2dfcGFybS5zKTsNCi0gIGVsc2UNCi0gICAgRlhTWVNfc3ByaW50ZihidWZmZXIsIG1zZ3RleHQsDQotCSAgICBlcnItPm1zZ19wYXJtLmlbMF0sIGVyci0+bXNnX3Bhcm0uaVsxXSwNCi0JICAgIGVyci0+bXNnX3Bhcm0uaVsyXSwgZXJyLT5tc2dfcGFybS5pWzNdLA0KLQkgICAgZXJyLT5tc2dfcGFybS5pWzRdLCBlcnItPm1zZ19wYXJtLmlbNV0sDQotCSAgICBlcnItPm1zZ19wYXJtLmlbNl0sIGVyci0+bXNnX3Bhcm0uaVs3XSk7DQotI2VuZGlmDQotfQ0KLQ0KLQ0KLS8qDQotICogUmVzZXQgZXJyb3Igc3RhdGUgdmFyaWFibGVzIGF0IHN0YXJ0IG9mIGEgbmV3IGltYWdlLg0KLSAqIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBjb21wcmVzc2lvbiBzdGFydHVwIHRvIHJlc2V0IHRyYWNlL2Vycm9yDQotICogcHJvY2Vzc2luZyB0byBkZWZhdWx0IHN0YXRlLCB3aXRob3V0IGxvc2luZyBhbnkgYXBwbGljYXRpb24tc3BlY2lmaWMNCi0gKiBtZXRob2QgcG9pbnRlcnMuICBBbiBhcHBsaWNhdGlvbiBtaWdodCBwb3NzaWJseSB3YW50IHRvIG92ZXJyaWRlDQotICogdGhpcyBtZXRob2QgaWYgaXQgaGFzIGFkZGl0aW9uYWwgZXJyb3IgcHJvY2Vzc2luZyBzdGF0ZS4NCi0gKi8NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1yZXNldF9lcnJvcl9tZ3IgKGpfY29tbW9uX3B0ciBjaW5mbykNCi17DQotICBjaW5mby0+ZXJyLT5udW1fd2FybmluZ3MgPSAwOw0KLSAgLyogdHJhY2VfbGV2ZWwgaXMgbm90IHJlc2V0IHNpbmNlIGl0IGlzIGFuIGFwcGxpY2F0aW9uLXN1cHBsaWVkIHBhcmFtZXRlciAqLw0KLSAgY2luZm8tPmVyci0+bXNnX2NvZGUgPSAwOwkvKiBtYXkgYmUgdXNlZnVsIGFzIGEgZmxhZyBmb3IgIm5vIGVycm9yIiAqLw0KLX0NCi0NCi0NCi0vKg0KLSAqIEZpbGwgaW4gdGhlIHN0YW5kYXJkIGVycm9yLWhhbmRsaW5nIG1ldGhvZHMgaW4gYSBqcGVnX2Vycm9yX21nciBvYmplY3QuDQotICogVHlwaWNhbCBjYWxsIGlzOg0KLSAqCXN0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCBjaW5mbzsNCi0gKglzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgZXJyOw0KLSAqDQotICoJY2luZm8uZXJyID0ganBlZ19zdGRfZXJyb3IoJmVycik7DQotICogYWZ0ZXIgd2hpY2ggdGhlIGFwcGxpY2F0aW9uIG1heSBvdmVycmlkZSBzb21lIG9mIHRoZSBtZXRob2RzLg0KLSAqLw0KLQ0KLUdMT0JBTChzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgKikNCi1qcGVnX3N0ZF9lcnJvciAoc3RydWN0IGpwZWdfZXJyb3JfbWdyICogZXJyKQ0KLXsNCi0gIGVyci0+ZXJyb3JfZXhpdCA9IGVycm9yX2V4aXQ7DQotICBlcnItPmVtaXRfbWVzc2FnZSA9IGVtaXRfbWVzc2FnZTsNCi0gIGVyci0+b3V0cHV0X21lc3NhZ2UgPSBvdXRwdXRfbWVzc2FnZTsNCi0gIGVyci0+Zm9ybWF0X21lc3NhZ2UgPSBmb3JtYXRfbWVzc2FnZTsNCi0gIGVyci0+cmVzZXRfZXJyb3JfbWdyID0gcmVzZXRfZXJyb3JfbWdyOw0KLQ0KLSAgZXJyLT50cmFjZV9sZXZlbCA9IDA7CQkvKiBkZWZhdWx0ID0gbm8gdHJhY2luZyAqLw0KLSAgZXJyLT5udW1fd2FybmluZ3MgPSAwOwkvKiBubyB3YXJuaW5ncyBlbWl0dGVkIHlldCAqLw0KLSAgZXJyLT5tc2dfY29kZSA9IDA7CQkvKiBtYXkgYmUgdXNlZnVsIGFzIGEgZmxhZyBmb3IgIm5vIGVycm9yIiAqLw0KLQ0KLSAgLyogSW5pdGlhbGl6ZSBtZXNzYWdlIHRhYmxlIHBvaW50ZXJzICovDQotICBlcnItPmpwZWdfbWVzc2FnZV90YWJsZSA9IGpwZWdfc3RkX21lc3NhZ2VfdGFibGU7DQotICBlcnItPmxhc3RfanBlZ19tZXNzYWdlID0gKGludCkgSk1TR19MQVNUTVNHQ09ERSAtIDE7DQotDQotICBlcnItPmFkZG9uX21lc3NhZ2VfdGFibGUgPSBOVUxMOw0KLSAgZXJyLT5maXJzdF9hZGRvbl9tZXNzYWdlID0gMDsJLyogZm9yIHNhZmV0eSAqLw0KLSAgZXJyLT5sYXN0X2FkZG9uX21lc3NhZ2UgPSAwOw0KLQ0KLSAgcmV0dXJuIGVycjsNCi19DQotDQotI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fDQorI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykKKy8qCisgKiBqZXJyb3IuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk4LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHNpbXBsZSBlcnJvci1yZXBvcnRpbmcgYW5kIHRyYWNlLW1lc3NhZ2Ugcm91dGluZXMuCisgKiBUaGVzZSBhcmUgc3VpdGFibGUgZm9yIFVuaXgtbGlrZSBzeXN0ZW1zIGFuZCBvdGhlcnMgd2hlcmUgd3JpdGluZyB0bworICogc3RkZXJyIGlzIHRoZSByaWdodCB0aGluZyB0byBkby4gIE1hbnkgYXBwbGljYXRpb25zIHdpbGwgd2FudCB0byByZXBsYWNlCisgKiBzb21lIG9yIGFsbCBvZiB0aGVzZSByb3V0aW5lcy4KKyAqCisgKiBJZiB5b3UgZGVmaW5lIFVTRV9XSU5ET1dTX01FU1NBR0VCT1ggaW4gamNvbmZpZy5oIG9yIGluIHRoZSBtYWtlZmlsZSwKKyAqIHlvdSBnZXQgYSBXaW5kb3dzLXNwZWNpZmljIGhhY2sgdG8gZGlzcGxheSBlcnJvciBtZXNzYWdlcyBpbiBhIGRpYWxvZyBib3guCisgKiBJdCBhaW4ndCBtdWNoLCBidXQgaXQgYmVhdHMgZHJvcHBpbmcgZXJyb3IgbWVzc2FnZXMgaW50byB0aGUgYml0IGJ1Y2tldCwKKyAqIHdoaWNoIGlzIHdoYXQgaGFwcGVucyB0byBvdXRwdXQgdG8gc3RkZXJyIHVuZGVyIG1vc3QgV2luZG93cyBDIGNvbXBpbGVycy4KKyAqCisgKiBUaGVzZSByb3V0aW5lcyBhcmUgdXNlZCBieSBib3RoIHRoZSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBjb2RlLgorICovCisKKy8qIHRoaXMgaXMgbm90IGEgY29yZSBsaWJyYXJ5IG1vZHVsZSwgc28gaXQgZG9lc24ndCBkZWZpbmUgSlBFR19JTlRFUk5BTFMgKi8KKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqdmVyc2lvbi5oIgorI2luY2x1ZGUgImplcnJvci5oIgorCisjaWZuZGVmIEVYSVRfRkFJTFVSRQkJLyogZGVmaW5lIGV4aXQoKSBjb2RlcyBpZiBub3QgcHJvdmlkZWQgKi8KKyNkZWZpbmUgRVhJVF9GQUlMVVJFICAxCisjZW5kaWYKKworCisvKgorICogQ3JlYXRlIHRoZSBtZXNzYWdlIHN0cmluZyB0YWJsZS4KKyAqIFdlIGRvIHRoaXMgZnJvbSB0aGUgbWFzdGVyIG1lc3NhZ2UgbGlzdCBpbiBqZXJyb3IuaCBieSByZS1yZWFkaW5nCisgKiBqZXJyb3IuaCB3aXRoIGEgc3VpdGFibGUgZGVmaW5pdGlvbiBmb3IgbWFjcm8gSk1FU1NBR0UuCisgKiBUaGUgbWVzc2FnZSB0YWJsZSBpcyBtYWRlIGFuIGV4dGVybmFsIHN5bWJvbCBqdXN0IGluIGNhc2UgYW55IGFwcGxpY2F0aW9ucworICogd2FudCB0byByZWZlciB0byBpdCBkaXJlY3RseS4KKyAqLworCisjaWZkZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUworI2RlZmluZSBqcGVnX3N0ZF9tZXNzYWdlX3RhYmxlCWpNc2dUYWJsZQorI2VuZGlmCisKKyNkZWZpbmUgSk1FU1NBR0UoY29kZSxzdHJpbmcpCXN0cmluZyAsCisKK2NvbnN0IGNoYXIgKiBjb25zdCBqcGVnX3N0ZF9tZXNzYWdlX3RhYmxlW10gPSB7CisjaW5jbHVkZSAiamVycm9yLmgiCisgIE5VTEwKK307CisKKworLyoKKyAqIEVycm9yIGV4aXQgaGFuZGxlcjogbXVzdCBub3QgcmV0dXJuIHRvIGNhbGxlci4KKyAqCisgKiBBcHBsaWNhdGlvbnMgbWF5IG92ZXJyaWRlIHRoaXMgaWYgdGhleSB3YW50IHRvIGdldCBjb250cm9sIGJhY2sgYWZ0ZXIKKyAqIGFuIGVycm9yLiAgVHlwaWNhbGx5IG9uZSB3b3VsZCBsb25nam1wIHNvbWV3aGVyZSBpbnN0ZWFkIG9mIGV4aXRpbmcuCisgKiBUaGUgc2V0am1wIGJ1ZmZlciBjYW4gYmUgbWFkZSBhIHByaXZhdGUgZmllbGQgd2l0aGluIGFuIGV4cGFuZGVkIGVycm9yCisgKiBoYW5kbGVyIG9iamVjdC4gIE5vdGUgdGhhdCB0aGUgaW5mbyBuZWVkZWQgdG8gZ2VuZXJhdGUgYW4gZXJyb3IgbWVzc2FnZQorICogaXMgc3RvcmVkIGluIHRoZSBlcnJvciBvYmplY3QsIHNvIHlvdSBjYW4gZ2VuZXJhdGUgdGhlIG1lc3NhZ2Ugbm93IG9yCisgKiBsYXRlciwgYXQgeW91ciBjb252ZW5pZW5jZS4KKyAqIFlvdSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIEpQRUcgb2JqZWN0IGlzIGNsZWFuZWQgdXAgKHdpdGgganBlZ19hYm9ydAorICogb3IganBlZ19kZXN0cm95KSBhdCBzb21lIHBvaW50LgorICovCisKK01FVEhPRERFRih2b2lkKQorZXJyb3JfZXhpdCAoal9jb21tb25fcHRyIGNpbmZvKQoreworICAvKiBBbHdheXMgZGlzcGxheSB0aGUgbWVzc2FnZSAqLworICAoKmNpbmZvLT5lcnItPm91dHB1dF9tZXNzYWdlKSAoY2luZm8pOworCisgIC8qIExldCB0aGUgbWVtb3J5IG1hbmFnZXIgZGVsZXRlIGFueSB0ZW1wIGZpbGVzIGJlZm9yZSB3ZSBkaWUgKi8KKyAganBlZ19kZXN0cm95KGNpbmZvKTsKKworLy8gIGV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworCisvKgorICogQWN0dWFsIG91dHB1dCBvZiBhbiBlcnJvciBvciB0cmFjZSBtZXNzYWdlLgorICogQXBwbGljYXRpb25zIG1heSBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBzZW5kIEpQRUcgbWVzc2FnZXMgc29tZXdoZXJlCisgKiBvdGhlciB0aGFuIHN0ZGVyci4KKyAqCisgKiBPbiBXaW5kb3dzLCBwcmludGluZyB0byBzdGRlcnIgaXMgZ2VuZXJhbGx5IGNvbXBsZXRlbHkgdXNlbGVzcywKKyAqIHNvIHdlIHByb3ZpZGUgb3B0aW9uYWwgY29kZSB0byBwcm9kdWNlIGFuIGVycm9yLWRpYWxvZyBwb3B1cC4KKyAqIE1vc3QgV2luZG93cyBhcHBsaWNhdGlvbnMgd2lsbCBzdGlsbCBwcmVmZXIgdG8gb3ZlcnJpZGUgdGhpcyByb3V0aW5lLAorICogYnV0IGlmIHRoZXkgZG9uJ3QsIGl0J2xsIGRvIHNvbWV0aGluZyBhdCBsZWFzdCBtYXJnaW5hbGx5IHVzZWZ1bC4KKyAqCisgKiBOT1RFOiB0byB1c2UgdGhlIGxpYnJhcnkgaW4gYW4gZW52aXJvbm1lbnQgdGhhdCBkb2Vzbid0IHN1cHBvcnQgdGhlCisgKiBDIHN0ZGlvIGxpYnJhcnksIHlvdSBtYXkgaGF2ZSB0byBkZWxldGUgdGhlIGNhbGwgdG8gZnByaW50ZigpIGVudGlyZWx5LAorICogbm90IGp1c3Qgbm90IHVzZSB0aGlzIHJvdXRpbmUuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitvdXRwdXRfbWVzc2FnZSAoal9jb21tb25fcHRyIGNpbmZvKQoreworICBjaGFyIGJ1ZmZlcltKTVNHX0xFTkdUSF9NQVhdOworCisgIC8qIENyZWF0ZSB0aGUgbWVzc2FnZSAqLworICAoKmNpbmZvLT5lcnItPmZvcm1hdF9tZXNzYWdlKSAoY2luZm8sIGJ1ZmZlcik7CisKKyNpZmRlZiBVU0VfV0lORE9XU19NRVNTQUdFQk9YCisgIC8qIERpc3BsYXkgaXQgaW4gYSBtZXNzYWdlIGRpYWxvZyBib3ggKi8KKyAgTWVzc2FnZUJveChHZXRBY3RpdmVXaW5kb3coKSwgYnVmZmVyLCAiSlBFRyBMaWJyYXJ5IEVycm9yIiwKKwkgICAgIE1CX09LIHwgTUJfSUNPTkVSUk9SKTsKKyNlbHNlCisgIC8qIFNlbmQgaXQgdG8gc3RkZXJyLCBhZGRpbmcgYSBuZXdsaW5lICovCisjaWZuZGVmIF9GUERGQVBJX01JTklfCisgIEZYU1lTX2ZwcmludGYoc3RkZXJyLCAiJXNcbiIsIGJ1ZmZlcik7CisjZW5kaWYKKyNlbmRpZgorfQorCisKKy8qCisgKiBEZWNpZGUgd2hldGhlciB0byBlbWl0IGEgdHJhY2Ugb3Igd2FybmluZyBtZXNzYWdlLgorICogbXNnX2xldmVsIGlzIG9uZSBvZjoKKyAqICAgLTE6IHJlY292ZXJhYmxlIGNvcnJ1cHQtZGF0YSB3YXJuaW5nLCBtYXkgd2FudCB0byBhYm9ydC4KKyAqICAgIDA6IGltcG9ydGFudCBhZHZpc29yeSBtZXNzYWdlcyAoYWx3YXlzIGRpc3BsYXkgdG8gdXNlcikuCisgKiAgICAxOiBmaXJzdCBsZXZlbCBvZiB0cmFjaW5nIGRldGFpbC4KKyAqICAgIDIsMywuLi46IHN1Y2Nlc3NpdmVseSBtb3JlIGRldGFpbGVkIHRyYWNpbmcgbWVzc2FnZXMuCisgKiBBbiBhcHBsaWNhdGlvbiBtaWdodCBvdmVycmlkZSB0aGlzIG1ldGhvZCBpZiBpdCB3YW50ZWQgdG8gYWJvcnQgb24gd2FybmluZ3MKKyAqIG9yIGNoYW5nZSB0aGUgcG9saWN5IGFib3V0IHdoaWNoIG1lc3NhZ2VzIHRvIGRpc3BsYXkuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitlbWl0X21lc3NhZ2UgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IG1zZ19sZXZlbCkKK3sKKyAgc3RydWN0IGpwZWdfZXJyb3JfbWdyICogZXJyID0gY2luZm8tPmVycjsKKworICBpZiAobXNnX2xldmVsIDwgMCkgeworICAgIC8qIEl0J3MgYSB3YXJuaW5nIG1lc3NhZ2UuICBTaW5jZSBjb3JydXB0IGZpbGVzIG1heSBnZW5lcmF0ZSBtYW55IHdhcm5pbmdzLAorICAgICAqIHRoZSBwb2xpY3kgaW1wbGVtZW50ZWQgaGVyZSBpcyB0byBzaG93IG9ubHkgdGhlIGZpcnN0IHdhcm5pbmcsCisgICAgICogdW5sZXNzIHRyYWNlX2xldmVsID49IDMuCisgICAgICovCisgICAgaWYgKGVyci0+bnVtX3dhcm5pbmdzID09IDAgfHwgZXJyLT50cmFjZV9sZXZlbCA+PSAzKQorICAgICAgKCplcnItPm91dHB1dF9tZXNzYWdlKSAoY2luZm8pOworICAgIC8qIEFsd2F5cyBjb3VudCB3YXJuaW5ncyBpbiBudW1fd2FybmluZ3MuICovCisgICAgZXJyLT5udW1fd2FybmluZ3MrKzsKKyAgfSBlbHNlIHsKKyAgICAvKiBJdCdzIGEgdHJhY2UgbWVzc2FnZS4gIFNob3cgaXQgaWYgdHJhY2VfbGV2ZWwgPj0gbXNnX2xldmVsLiAqLworICAgIGlmIChlcnItPnRyYWNlX2xldmVsID49IG1zZ19sZXZlbCkKKyAgICAgICgqZXJyLT5vdXRwdXRfbWVzc2FnZSkgKGNpbmZvKTsKKyAgfQorfQorCisKKy8qCisgKiBGb3JtYXQgYSBtZXNzYWdlIHN0cmluZyBmb3IgdGhlIG1vc3QgcmVjZW50IEpQRUcgZXJyb3Igb3IgbWVzc2FnZS4KKyAqIFRoZSBtZXNzYWdlIGlzIHN0b3JlZCBpbnRvIGJ1ZmZlciwgd2hpY2ggc2hvdWxkIGJlIGF0IGxlYXN0IEpNU0dfTEVOR1RIX01BWAorICogY2hhcmFjdGVycy4gIE5vdGUgdGhhdCBubyAnXG4nIGNoYXJhY3RlciBpcyBhZGRlZCB0byB0aGUgc3RyaW5nLgorICogRmV3IGFwcGxpY2F0aW9ucyBzaG91bGQgbmVlZCB0byBvdmVycmlkZSB0aGlzIG1ldGhvZC4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2Zvcm1hdF9tZXNzYWdlIChqX2NvbW1vbl9wdHIgY2luZm8sIGNoYXIgKiBidWZmZXIpCit7CisjaWYgMAkvKiBYWVEgKi8KKyAgc3RydWN0IGpwZWdfZXJyb3JfbWdyICogZXJyID0gY2luZm8tPmVycjsKKyAgaW50IG1zZ19jb2RlID0gZXJyLT5tc2dfY29kZTsKKyAgY29uc3QgY2hhciAqIG1zZ3RleHQgPSBOVUxMOworICBjb25zdCBjaGFyICogbXNncHRyOworICBjaGFyIGNoOworICBib29sZWFuIGlzc3RyaW5nOworCisgIC8qIExvb2sgdXAgbWVzc2FnZSBzdHJpbmcgaW4gcHJvcGVyIHRhYmxlICovCisgIGlmIChtc2dfY29kZSA+IDAgJiYgbXNnX2NvZGUgPD0gZXJyLT5sYXN0X2pwZWdfbWVzc2FnZSkgeworICAgIG1zZ3RleHQgPSBlcnItPmpwZWdfbWVzc2FnZV90YWJsZVttc2dfY29kZV07CisgIH0gZWxzZSBpZiAoZXJyLT5hZGRvbl9tZXNzYWdlX3RhYmxlICE9IE5VTEwgJiYKKwkgICAgIG1zZ19jb2RlID49IGVyci0+Zmlyc3RfYWRkb25fbWVzc2FnZSAmJgorCSAgICAgbXNnX2NvZGUgPD0gZXJyLT5sYXN0X2FkZG9uX21lc3NhZ2UpIHsKKyAgICBtc2d0ZXh0ID0gZXJyLT5hZGRvbl9tZXNzYWdlX3RhYmxlW21zZ19jb2RlIC0gZXJyLT5maXJzdF9hZGRvbl9tZXNzYWdlXTsKKyAgfQorCisgIC8qIERlZmVuZCBhZ2FpbnN0IGJvZ3VzIG1lc3NhZ2UgbnVtYmVyICovCisgIGlmIChtc2d0ZXh0ID09IE5VTEwpIHsKKyAgICBlcnItPm1zZ19wYXJtLmlbMF0gPSBtc2dfY29kZTsKKyAgICBtc2d0ZXh0ID0gZXJyLT5qcGVnX21lc3NhZ2VfdGFibGVbMF07CisgIH0KKworICAvKiBDaGVjayBmb3Igc3RyaW5nIHBhcmFtZXRlciwgYXMgaW5kaWNhdGVkIGJ5ICVzIGluIHRoZSBtZXNzYWdlIHRleHQgKi8KKyAgaXNzdHJpbmcgPSBGQUxTRTsKKyAgbXNncHRyID0gbXNndGV4dDsKKyAgd2hpbGUgKChjaCA9ICptc2dwdHIrKykgIT0gJ1wwJykgeworICAgIGlmIChjaCA9PSAnJScpIHsKKyAgICAgIGlmICgqbXNncHRyID09ICdzJykgaXNzdHJpbmcgPSBUUlVFOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgLyogRm9ybWF0IHRoZSBtZXNzYWdlIGludG8gdGhlIHBhc3NlZCBidWZmZXIgKi8KKyAgaWYgKGlzc3RyaW5nKQorICAgIEZYU1lTX3NwcmludGYoYnVmZmVyLCBtc2d0ZXh0LCBlcnItPm1zZ19wYXJtLnMpOworICBlbHNlCisgICAgRlhTWVNfc3ByaW50ZihidWZmZXIsIG1zZ3RleHQsCisJICAgIGVyci0+bXNnX3Bhcm0uaVswXSwgZXJyLT5tc2dfcGFybS5pWzFdLAorCSAgICBlcnItPm1zZ19wYXJtLmlbMl0sIGVyci0+bXNnX3Bhcm0uaVszXSwKKwkgICAgZXJyLT5tc2dfcGFybS5pWzRdLCBlcnItPm1zZ19wYXJtLmlbNV0sCisJICAgIGVyci0+bXNnX3Bhcm0uaVs2XSwgZXJyLT5tc2dfcGFybS5pWzddKTsKKyNlbmRpZgorfQorCisKKy8qCisgKiBSZXNldCBlcnJvciBzdGF0ZSB2YXJpYWJsZXMgYXQgc3RhcnQgb2YgYSBuZXcgaW1hZ2UuCisgKiBUaGlzIGlzIGNhbGxlZCBkdXJpbmcgY29tcHJlc3Npb24gc3RhcnR1cCB0byByZXNldCB0cmFjZS9lcnJvcgorICogcHJvY2Vzc2luZyB0byBkZWZhdWx0IHN0YXRlLCB3aXRob3V0IGxvc2luZyBhbnkgYXBwbGljYXRpb24tc3BlY2lmaWMKKyAqIG1ldGhvZCBwb2ludGVycy4gIEFuIGFwcGxpY2F0aW9uIG1pZ2h0IHBvc3NpYmx5IHdhbnQgdG8gb3ZlcnJpZGUKKyAqIHRoaXMgbWV0aG9kIGlmIGl0IGhhcyBhZGRpdGlvbmFsIGVycm9yIHByb2Nlc3Npbmcgc3RhdGUuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCityZXNldF9lcnJvcl9tZ3IgKGpfY29tbW9uX3B0ciBjaW5mbykKK3sKKyAgY2luZm8tPmVyci0+bnVtX3dhcm5pbmdzID0gMDsKKyAgLyogdHJhY2VfbGV2ZWwgaXMgbm90IHJlc2V0IHNpbmNlIGl0IGlzIGFuIGFwcGxpY2F0aW9uLXN1cHBsaWVkIHBhcmFtZXRlciAqLworICBjaW5mby0+ZXJyLT5tc2dfY29kZSA9IDA7CS8qIG1heSBiZSB1c2VmdWwgYXMgYSBmbGFnIGZvciAibm8gZXJyb3IiICovCit9CisKKworLyoKKyAqIEZpbGwgaW4gdGhlIHN0YW5kYXJkIGVycm9yLWhhbmRsaW5nIG1ldGhvZHMgaW4gYSBqcGVnX2Vycm9yX21nciBvYmplY3QuCisgKiBUeXBpY2FsIGNhbGwgaXM6CisgKglzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3QgY2luZm87CisgKglzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgZXJyOworICoKKyAqCWNpbmZvLmVyciA9IGpwZWdfc3RkX2Vycm9yKCZlcnIpOworICogYWZ0ZXIgd2hpY2ggdGhlIGFwcGxpY2F0aW9uIG1heSBvdmVycmlkZSBzb21lIG9mIHRoZSBtZXRob2RzLgorICovCisKK0dMT0JBTChzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgKikKK2pwZWdfc3RkX2Vycm9yIChzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgKiBlcnIpCit7CisgIGVyci0+ZXJyb3JfZXhpdCA9IGVycm9yX2V4aXQ7CisgIGVyci0+ZW1pdF9tZXNzYWdlID0gZW1pdF9tZXNzYWdlOworICBlcnItPm91dHB1dF9tZXNzYWdlID0gb3V0cHV0X21lc3NhZ2U7CisgIGVyci0+Zm9ybWF0X21lc3NhZ2UgPSBmb3JtYXRfbWVzc2FnZTsKKyAgZXJyLT5yZXNldF9lcnJvcl9tZ3IgPSByZXNldF9lcnJvcl9tZ3I7CisKKyAgZXJyLT50cmFjZV9sZXZlbCA9IDA7CQkvKiBkZWZhdWx0ID0gbm8gdHJhY2luZyAqLworICBlcnItPm51bV93YXJuaW5ncyA9IDA7CS8qIG5vIHdhcm5pbmdzIGVtaXR0ZWQgeWV0ICovCisgIGVyci0+bXNnX2NvZGUgPSAwOwkJLyogbWF5IGJlIHVzZWZ1bCBhcyBhIGZsYWcgZm9yICJubyBlcnJvciIgKi8KKworICAvKiBJbml0aWFsaXplIG1lc3NhZ2UgdGFibGUgcG9pbnRlcnMgKi8KKyAgZXJyLT5qcGVnX21lc3NhZ2VfdGFibGUgPSBqcGVnX3N0ZF9tZXNzYWdlX3RhYmxlOworICBlcnItPmxhc3RfanBlZ19tZXNzYWdlID0gKGludCkgSk1TR19MQVNUTVNHQ09ERSAtIDE7CisKKyAgZXJyLT5hZGRvbl9tZXNzYWdlX3RhYmxlID0gTlVMTDsKKyAgZXJyLT5maXJzdF9hZGRvbl9tZXNzYWdlID0gMDsJLyogZm9yIHNhZmV0eSAqLworICBlcnItPmxhc3RfYWRkb25fbWVzc2FnZSA9IDA7CisKKyAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZmRjdGZzdC5jIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamZkY3Rmc3QuYwppbmRleCA5Y2QzZGQ3Li5iOTc4YjQ2IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZmRjdGZzdC5jCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pmZGN0ZnN0LmMKQEAgLTEsMjI3ICsxLDIyNyBAQAotI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykNCi0vKg0KLSAqIGpmZGN0ZnN0LmMNCi0gKg0KLSAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2LCBUaG9tYXMgRy4gTGFuZS4NCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLg0KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4NCi0gKg0KLSAqIFRoaXMgZmlsZSBjb250YWlucyBhIGZhc3QsIG5vdCBzbyBhY2N1cmF0ZSBpbnRlZ2VyIGltcGxlbWVudGF0aW9uIG9mIHRoZQ0KLSAqIGZvcndhcmQgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4NCi0gKg0KLSAqIEEgMi1EIERDVCBjYW4gYmUgZG9uZSBieSAxLUQgRENUIG9uIGVhY2ggcm93IGZvbGxvd2VkIGJ5IDEtRCBEQ1QNCi0gKiBvbiBlYWNoIGNvbHVtbi4gIERpcmVjdCBhbGdvcml0aG1zIGFyZSBhbHNvIGF2YWlsYWJsZSwgYnV0IHRoZXkgYXJlDQotICogbXVjaCBtb3JlIGNvbXBsZXggYW5kIHNlZW0gbm90IHRvIGJlIGFueSBmYXN0ZXIgd2hlbiByZWR1Y2VkIHRvIGNvZGUuDQotICoNCi0gKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIEFyYWksIEFndWksIGFuZCBOYWthamltYSdzIGFsZ29yaXRobSBmb3INCi0gKiBzY2FsZWQgRENULiAgVGhlaXIgb3JpZ2luYWwgcGFwZXIgKFRyYW5zLiBJRUlDRSBFLTcxKDExKToxMDk1KSBpcyBpbg0KLSAqIEphcGFuZXNlLCBidXQgdGhlIGFsZ29yaXRobSBpcyBkZXNjcmliZWQgaW4gdGhlIFBlbm5lYmFrZXIgJiBNaXRjaGVsbA0KLSAqIEpQRUcgdGV4dGJvb2sgKHNlZSBSRUZFUkVOQ0VTIHNlY3Rpb24gaW4gZmlsZSBSRUFETUUpLiAgVGhlIGZvbGxvd2luZyBjb2RlDQotICogaXMgYmFzZWQgZGlyZWN0bHkgb24gZmlndXJlIDQtOCBpbiBQJk0uDQotICogV2hpbGUgYW4gOC1wb2ludCBEQ1QgY2Fubm90IGJlIGRvbmUgaW4gbGVzcyB0aGFuIDExIG11bHRpcGxpZXMsIGl0IGlzDQotICogcG9zc2libGUgdG8gYXJyYW5nZSB0aGUgY29tcHV0YXRpb24gc28gdGhhdCBtYW55IG9mIHRoZSBtdWx0aXBsaWVzIGFyZQ0KLSAqIHNpbXBsZSBzY2FsaW5ncyBvZiB0aGUgZmluYWwgb3V0cHV0cy4gIFRoZXNlIG11bHRpcGxpZXMgY2FuIHRoZW4gYmUNCi0gKiBmb2xkZWQgaW50byB0aGUgbXVsdGlwbGljYXRpb25zIG9yIGRpdmlzaW9ucyBieSB0aGUgSlBFRyBxdWFudGl6YXRpb24NCi0gKiB0YWJsZSBlbnRyaWVzLiAgVGhlIEFBJk4gbWV0aG9kIGxlYXZlcyBvbmx5IDUgbXVsdGlwbGllcyBhbmQgMjkgYWRkcw0KLSAqIHRvIGJlIGRvbmUgaW4gdGhlIERDVCBpdHNlbGYuDQotICogVGhlIHByaW1hcnkgZGlzYWR2YW50YWdlIG9mIHRoaXMgbWV0aG9kIGlzIHRoYXQgd2l0aCBmaXhlZC1wb2ludCBtYXRoLA0KLSAqIGFjY3VyYWN5IGlzIGxvc3QgZHVlIHRvIGltcHJlY2lzZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2NhbGVkDQotICogcXVhbnRpemF0aW9uIHZhbHVlcy4gIFRoZSBzbWFsbGVyIHRoZSBxdWFudGl6YXRpb24gdGFibGUgZW50cnksIHRoZSBsZXNzDQotICogcHJlY2lzZSB0aGUgc2NhbGVkIHZhbHVlLCBzbyB0aGlzIGltcGxlbWVudGF0aW9uIGRvZXMgd29yc2Ugd2l0aCBoaWdoLQ0KLSAqIHF1YWxpdHktc2V0dGluZyBmaWxlcyB0aGFuIHdpdGggbG93LXF1YWxpdHkgb25lcy4NCi0gKi8NCi0NCi0jZGVmaW5lIEpQRUdfSU5URVJOQUxTDQotI2luY2x1ZGUgImppbmNsdWRlLmgiDQotI2luY2x1ZGUgImpwZWdsaWIuaCINCi0jaW5jbHVkZSAiamRjdC5oIgkJLyogUHJpdmF0ZSBkZWNsYXJhdGlvbnMgZm9yIERDVCBzdWJzeXN0ZW0gKi8NCi0NCi0jaWZkZWYgRENUX0lGQVNUX1NVUFBPUlRFRA0KLQ0KLQ0KLS8qDQotICogVGhpcyBtb2R1bGUgaXMgc3BlY2lhbGl6ZWQgdG8gdGhlIGNhc2UgRENUU0laRSA9IDguDQotICovDQotDQotI2lmIERDVFNJWkUgIT0gOA0KLSAgU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVHMuIC8qIGRlbGliZXJhdGUgc3ludGF4IGVyciAqLw0KLSNlbmRpZg0KLQ0KLQ0KLS8qIFNjYWxpbmcgZGVjaXNpb25zIGFyZSBnZW5lcmFsbHkgdGhlIHNhbWUgYXMgaW4gdGhlIExMJk0gYWxnb3JpdGhtOw0KLSAqIHNlZSBqZmRjdGludC5jIGZvciBtb3JlIGRldGFpbHMuICBIb3dldmVyLCB3ZSBjaG9vc2UgdG8gZGVzY2FsZQ0KLSAqIChyaWdodCBzaGlmdCkgbXVsdGlwbGljYXRpb24gcHJvZHVjdHMgYXMgc29vbiBhcyB0aGV5IGFyZSBmb3JtZWQsDQotICogcmF0aGVyIHRoYW4gY2FycnlpbmcgYWRkaXRpb25hbCBmcmFjdGlvbmFsIGJpdHMgaW50byBzdWJzZXF1ZW50IGFkZGl0aW9ucy4NCi0gKiBUaGlzIGNvbXByb21pc2VzIGFjY3VyYWN5IHNsaWdodGx5LCBidXQgaXQgbGV0cyB1cyBzYXZlIGEgZmV3IHNoaWZ0cy4NCi0gKiBNb3JlIGltcG9ydGFudGx5LCAxNi1iaXQgYXJpdGhtZXRpYyBpcyB0aGVuIGFkZXF1YXRlIChmb3IgOC1iaXQgc2FtcGxlcykNCi0gKiBldmVyeXdoZXJlIGV4Y2VwdCBpbiB0aGUgbXVsdGlwbGljYXRpb25zIHByb3BlcjsgdGhpcyBzYXZlcyBhIGdvb2QgZGVhbA0KLSAqIG9mIHdvcmsgb24gMTYtYml0LWludCBtYWNoaW5lcy4NCi0gKg0KLSAqIEFnYWluIHRvIHNhdmUgYSBmZXcgc2hpZnRzLCB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdHMgYmV0d2VlbiBwYXNzIDEgYW5kDQotICogcGFzcyAyIGFyZSBub3QgdXBzY2FsZWQsIGJ1dCBhcmUgcmVwcmVzZW50ZWQgb25seSB0byBpbnRlZ3JhbCBwcmVjaXNpb24uDQotICoNCi0gKiBBIGZpbmFsIGNvbXByb21pc2UgaXMgdG8gcmVwcmVzZW50IHRoZSBtdWx0aXBsaWNhdGl2ZSBjb25zdGFudHMgdG8gb25seQ0KLSAqIDggZnJhY3Rpb25hbCBiaXRzLCByYXRoZXIgdGhhbiAxMy4gIFRoaXMgc2F2ZXMgc29tZSBzaGlmdGluZyB3b3JrIG9uIHNvbWUNCi0gKiBtYWNoaW5lcywgYW5kIG1heSBhbHNvIHJlZHVjZSB0aGUgY29zdCBvZiBtdWx0aXBsaWNhdGlvbiAoc2luY2UgdGhlcmUNCi0gKiBhcmUgZmV3ZXIgb25lLWJpdHMgaW4gdGhlIGNvbnN0YW50cykuDQotICovDQotDQotI2RlZmluZSBDT05TVF9CSVRTICA4DQotDQotDQotLyogU29tZSBDIGNvbXBpbGVycyBmYWlsIHRvIHJlZHVjZSAiRklYKGNvbnN0YW50KSIgYXQgY29tcGlsZSB0aW1lLCB0aHVzDQotICogY2F1c2luZyBhIGxvdCBvZiB1c2VsZXNzIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgYXQgcnVuIHRpbWUuDQotICogVG8gZ2V0IGFyb3VuZCB0aGlzIHdlIHVzZSB0aGUgZm9sbG93aW5nIHByZS1jYWxjdWxhdGVkIGNvbnN0YW50cy4NCi0gKiBJZiB5b3UgY2hhbmdlIENPTlNUX0JJVFMgeW91IG1heSB3YW50IHRvIGFkZCBhcHByb3ByaWF0ZSB2YWx1ZXMuDQotICogKFdpdGggYSByZWFzb25hYmxlIEMgY29tcGlsZXIsIHlvdSBjYW4ganVzdCByZWx5IG9uIHRoZSBGSVgoKSBtYWNyby4uLikNCi0gKi8NCi0NCi0jaWYgQ09OU1RfQklUUyA9PSA4DQotI2RlZmluZSBGSVhfMF8zODI2ODM0MzMgICgoSU5UMzIpICAgOTgpCQkvKiBGSVgoMC4zODI2ODM0MzMpICovDQotI2RlZmluZSBGSVhfMF81NDExOTYxMDAgICgoSU5UMzIpICAxMzkpCQkvKiBGSVgoMC41NDExOTYxMDApICovDQotI2RlZmluZSBGSVhfMF83MDcxMDY3ODEgICgoSU5UMzIpICAxODEpCQkvKiBGSVgoMC43MDcxMDY3ODEpICovDQotI2RlZmluZSBGSVhfMV8zMDY1NjI5NjUgICgoSU5UMzIpICAzMzQpCQkvKiBGSVgoMS4zMDY1NjI5NjUpICovDQotI2Vsc2UNCi0jZGVmaW5lIEZJWF8wXzM4MjY4MzQzMyAgRklYKDAuMzgyNjgzNDMzKQ0KLSNkZWZpbmUgRklYXzBfNTQxMTk2MTAwICBGSVgoMC41NDExOTYxMDApDQotI2RlZmluZSBGSVhfMF83MDcxMDY3ODEgIEZJWCgwLjcwNzEwNjc4MSkNCi0jZGVmaW5lIEZJWF8xXzMwNjU2Mjk2NSAgRklYKDEuMzA2NTYyOTY1KQ0KLSNlbmRpZg0KLQ0KLQ0KLS8qIFdlIGNhbiBnYWluIGEgbGl0dGxlIG1vcmUgc3BlZWQsIHdpdGggYSBmdXJ0aGVyIGNvbXByb21pc2UgaW4gYWNjdXJhY3ksDQotICogYnkgb21pdHRpbmcgdGhlIGFkZGl0aW9uIGluIGEgZGVzY2FsaW5nIHNoaWZ0LiAgVGhpcyB5aWVsZHMgYW4gaW5jb3JyZWN0bHkNCi0gKiByb3VuZGVkIHJlc3VsdCBoYWxmIHRoZSB0aW1lLi4uDQotICovDQotDQotI2lmbmRlZiBVU0VfQUNDVVJBVEVfUk9VTkRJTkcNCi0jdW5kZWYgREVTQ0FMRQ0KLSNkZWZpbmUgREVTQ0FMRSh4LG4pICBSSUdIVF9TSElGVCh4LCBuKQ0KLSNlbmRpZg0KLQ0KLQ0KLS8qIE11bHRpcGx5IGEgRENURUxFTSB2YXJpYWJsZSBieSBhbiBJTlQzMiBjb25zdGFudCwgYW5kIGltbWVkaWF0ZWx5DQotICogZGVzY2FsZSB0byB5aWVsZCBhIERDVEVMRU0gcmVzdWx0Lg0KLSAqLw0KLQ0KLSNkZWZpbmUgTVVMVElQTFkodmFyLGNvbnN0KSAgKChEQ1RFTEVNKSBERVNDQUxFKCh2YXIpICogKGNvbnN0KSwgQ09OU1RfQklUUykpDQotDQotDQotLyoNCi0gKiBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBvbmUgYmxvY2sgb2Ygc2FtcGxlcy4NCi0gKi8NCi0NCi1HTE9CQUwodm9pZCkNCi1qcGVnX2ZkY3RfaWZhc3QgKERDVEVMRU0gKiBkYXRhKQ0KLXsNCi0gIERDVEVMRU0gdG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgdG1wNCwgdG1wNSwgdG1wNiwgdG1wNzsNCi0gIERDVEVMRU0gdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTM7DQotICBEQ1RFTEVNIHoxLCB6MiwgejMsIHo0LCB6NSwgejExLCB6MTM7DQotICBEQ1RFTEVNICpkYXRhcHRyOw0KLSAgaW50IGN0cjsNCi0gIFNISUZUX1RFTVBTDQotDQotICAvKiBQYXNzIDE6IHByb2Nlc3Mgcm93cy4gKi8NCi0NCi0gIGRhdGFwdHIgPSBkYXRhOw0KLSAgZm9yIChjdHIgPSBEQ1RTSVpFLTE7IGN0ciA+PSAwOyBjdHItLSkgew0KLSAgICB0bXAwID0gZGF0YXB0clswXSArIGRhdGFwdHJbN107DQotICAgIHRtcDcgPSBkYXRhcHRyWzBdIC0gZGF0YXB0cls3XTsNCi0gICAgdG1wMSA9IGRhdGFwdHJbMV0gKyBkYXRhcHRyWzZdOw0KLSAgICB0bXA2ID0gZGF0YXB0clsxXSAtIGRhdGFwdHJbNl07DQotICAgIHRtcDIgPSBkYXRhcHRyWzJdICsgZGF0YXB0cls1XTsNCi0gICAgdG1wNSA9IGRhdGFwdHJbMl0gLSBkYXRhcHRyWzVdOw0KLSAgICB0bXAzID0gZGF0YXB0clszXSArIGRhdGFwdHJbNF07DQotICAgIHRtcDQgPSBkYXRhcHRyWzNdIC0gZGF0YXB0cls0XTsNCi0gICAgDQotICAgIC8qIEV2ZW4gcGFydCAqLw0KLSAgICANCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMzsJLyogcGhhc2UgMiAqLw0KLSAgICB0bXAxMyA9IHRtcDAgLSB0bXAzOw0KLSAgICB0bXAxMSA9IHRtcDEgKyB0bXAyOw0KLSAgICB0bXAxMiA9IHRtcDEgLSB0bXAyOw0KLSAgICANCi0gICAgZGF0YXB0clswXSA9IHRtcDEwICsgdG1wMTE7IC8qIHBoYXNlIDMgKi8NCi0gICAgZGF0YXB0cls0XSA9IHRtcDEwIC0gdG1wMTE7DQotICAgIA0KLSAgICB6MSA9IE1VTFRJUExZKHRtcDEyICsgdG1wMTMsIEZJWF8wXzcwNzEwNjc4MSk7IC8qIGM0ICovDQotICAgIGRhdGFwdHJbMl0gPSB0bXAxMyArIHoxOwkvKiBwaGFzZSA1ICovDQotICAgIGRhdGFwdHJbNl0gPSB0bXAxMyAtIHoxOw0KLSAgICANCi0gICAgLyogT2RkIHBhcnQgKi8NCi0NCi0gICAgdG1wMTAgPSB0bXA0ICsgdG1wNTsJLyogcGhhc2UgMiAqLw0KLSAgICB0bXAxMSA9IHRtcDUgKyB0bXA2Ow0KLSAgICB0bXAxMiA9IHRtcDYgKyB0bXA3Ow0KLQ0KLSAgICAvKiBUaGUgcm90YXRvciBpcyBtb2RpZmllZCBmcm9tIGZpZyA0LTggdG8gYXZvaWQgZXh0cmEgbmVnYXRpb25zLiAqLw0KLSAgICB6NSA9IE1VTFRJUExZKHRtcDEwIC0gdG1wMTIsIEZJWF8wXzM4MjY4MzQzMyk7IC8qIGM2ICovDQotICAgIHoyID0gTVVMVElQTFkodG1wMTAsIEZJWF8wXzU0MTE5NjEwMCkgKyB6NTsgLyogYzItYzYgKi8NCi0gICAgejQgPSBNVUxUSVBMWSh0bXAxMiwgRklYXzFfMzA2NTYyOTY1KSArIHo1OyAvKiBjMitjNiAqLw0KLSAgICB6MyA9IE1VTFRJUExZKHRtcDExLCBGSVhfMF83MDcxMDY3ODEpOyAvKiBjNCAqLw0KLQ0KLSAgICB6MTEgPSB0bXA3ICsgejM7CQkvKiBwaGFzZSA1ICovDQotICAgIHoxMyA9IHRtcDcgLSB6MzsNCi0NCi0gICAgZGF0YXB0cls1XSA9IHoxMyArIHoyOwkvKiBwaGFzZSA2ICovDQotICAgIGRhdGFwdHJbM10gPSB6MTMgLSB6MjsNCi0gICAgZGF0YXB0clsxXSA9IHoxMSArIHo0Ow0KLSAgICBkYXRhcHRyWzddID0gejExIC0gejQ7DQotDQotICAgIGRhdGFwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLw0KLSAgfQ0KLQ0KLSAgLyogUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuICovDQotDQotICBkYXRhcHRyID0gZGF0YTsNCi0gIGZvciAoY3RyID0gRENUU0laRS0xOyBjdHIgPj0gMDsgY3RyLS0pIHsNCi0gICAgdG1wMCA9IGRhdGFwdHJbRENUU0laRSowXSArIGRhdGFwdHJbRENUU0laRSo3XTsNCi0gICAgdG1wNyA9IGRhdGFwdHJbRENUU0laRSowXSAtIGRhdGFwdHJbRENUU0laRSo3XTsNCi0gICAgdG1wMSA9IGRhdGFwdHJbRENUU0laRSoxXSArIGRhdGFwdHJbRENUU0laRSo2XTsNCi0gICAgdG1wNiA9IGRhdGFwdHJbRENUU0laRSoxXSAtIGRhdGFwdHJbRENUU0laRSo2XTsNCi0gICAgdG1wMiA9IGRhdGFwdHJbRENUU0laRSoyXSArIGRhdGFwdHJbRENUU0laRSo1XTsNCi0gICAgdG1wNSA9IGRhdGFwdHJbRENUU0laRSoyXSAtIGRhdGFwdHJbRENUU0laRSo1XTsNCi0gICAgdG1wMyA9IGRhdGFwdHJbRENUU0laRSozXSArIGRhdGFwdHJbRENUU0laRSo0XTsNCi0gICAgdG1wNCA9IGRhdGFwdHJbRENUU0laRSozXSAtIGRhdGFwdHJbRENUU0laRSo0XTsNCi0gICAgDQotICAgIC8qIEV2ZW4gcGFydCAqLw0KLSAgICANCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMzsJLyogcGhhc2UgMiAqLw0KLSAgICB0bXAxMyA9IHRtcDAgLSB0bXAzOw0KLSAgICB0bXAxMSA9IHRtcDEgKyB0bXAyOw0KLSAgICB0bXAxMiA9IHRtcDEgLSB0bXAyOw0KLSAgICANCi0gICAgZGF0YXB0cltEQ1RTSVpFKjBdID0gdG1wMTAgKyB0bXAxMTsgLyogcGhhc2UgMyAqLw0KLSAgICBkYXRhcHRyW0RDVFNJWkUqNF0gPSB0bXAxMCAtIHRtcDExOw0KLSAgICANCi0gICAgejEgPSBNVUxUSVBMWSh0bXAxMiArIHRtcDEzLCBGSVhfMF83MDcxMDY3ODEpOyAvKiBjNCAqLw0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMl0gPSB0bXAxMyArIHoxOyAvKiBwaGFzZSA1ICovDQotICAgIGRhdGFwdHJbRENUU0laRSo2XSA9IHRtcDEzIC0gejE7DQotICAgIA0KLSAgICAvKiBPZGQgcGFydCAqLw0KLQ0KLSAgICB0bXAxMCA9IHRtcDQgKyB0bXA1OwkvKiBwaGFzZSAyICovDQotICAgIHRtcDExID0gdG1wNSArIHRtcDY7DQotICAgIHRtcDEyID0gdG1wNiArIHRtcDc7DQotDQotICAgIC8qIFRoZSByb3RhdG9yIGlzIG1vZGlmaWVkIGZyb20gZmlnIDQtOCB0byBhdm9pZCBleHRyYSBuZWdhdGlvbnMuICovDQotICAgIHo1ID0gTVVMVElQTFkodG1wMTAgLSB0bXAxMiwgRklYXzBfMzgyNjgzNDMzKTsgLyogYzYgKi8NCi0gICAgejIgPSBNVUxUSVBMWSh0bXAxMCwgRklYXzBfNTQxMTk2MTAwKSArIHo1OyAvKiBjMi1jNiAqLw0KLSAgICB6NCA9IE1VTFRJUExZKHRtcDEyLCBGSVhfMV8zMDY1NjI5NjUpICsgejU7IC8qIGMyK2M2ICovDQotICAgIHozID0gTVVMVElQTFkodG1wMTEsIEZJWF8wXzcwNzEwNjc4MSk7IC8qIGM0ICovDQotDQotICAgIHoxMSA9IHRtcDcgKyB6MzsJCS8qIHBoYXNlIDUgKi8NCi0gICAgejEzID0gdG1wNyAtIHozOw0KLQ0KLSAgICBkYXRhcHRyW0RDVFNJWkUqNV0gPSB6MTMgKyB6MjsgLyogcGhhc2UgNiAqLw0KLSAgICBkYXRhcHRyW0RDVFNJWkUqM10gPSB6MTMgLSB6MjsNCi0gICAgZGF0YXB0cltEQ1RTSVpFKjFdID0gejExICsgejQ7DQotICAgIGRhdGFwdHJbRENUU0laRSo3XSA9IHoxMSAtIHo0Ow0KLQ0KLSAgICBkYXRhcHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgY29sdW1uICovDQotICB9DQotfQ0KLQ0KLSNlbmRpZiAvKiBEQ1RfSUZBU1RfU1VQUE9SVEVEICovDQotDQotI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fDQorI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykKKy8qCisgKiBqZmRjdGZzdC5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgYSBmYXN0LCBub3Qgc28gYWNjdXJhdGUgaW50ZWdlciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKKyAqIGZvcndhcmQgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4KKyAqCisgKiBBIDItRCBEQ1QgY2FuIGJlIGRvbmUgYnkgMS1EIERDVCBvbiBlYWNoIHJvdyBmb2xsb3dlZCBieSAxLUQgRENUCisgKiBvbiBlYWNoIGNvbHVtbi4gIERpcmVjdCBhbGdvcml0aG1zIGFyZSBhbHNvIGF2YWlsYWJsZSwgYnV0IHRoZXkgYXJlCisgKiBtdWNoIG1vcmUgY29tcGxleCBhbmQgc2VlbSBub3QgdG8gYmUgYW55IGZhc3RlciB3aGVuIHJlZHVjZWQgdG8gY29kZS4KKyAqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIEFyYWksIEFndWksIGFuZCBOYWthamltYSdzIGFsZ29yaXRobSBmb3IKKyAqIHNjYWxlZCBEQ1QuICBUaGVpciBvcmlnaW5hbCBwYXBlciAoVHJhbnMuIElFSUNFIEUtNzEoMTEpOjEwOTUpIGlzIGluCisgKiBKYXBhbmVzZSwgYnV0IHRoZSBhbGdvcml0aG0gaXMgZGVzY3JpYmVkIGluIHRoZSBQZW5uZWJha2VyICYgTWl0Y2hlbGwKKyAqIEpQRUcgdGV4dGJvb2sgKHNlZSBSRUZFUkVOQ0VTIHNlY3Rpb24gaW4gZmlsZSBSRUFETUUpLiAgVGhlIGZvbGxvd2luZyBjb2RlCisgKiBpcyBiYXNlZCBkaXJlY3RseSBvbiBmaWd1cmUgNC04IGluIFAmTS4KKyAqIFdoaWxlIGFuIDgtcG9pbnQgRENUIGNhbm5vdCBiZSBkb25lIGluIGxlc3MgdGhhbiAxMSBtdWx0aXBsaWVzLCBpdCBpcworICogcG9zc2libGUgdG8gYXJyYW5nZSB0aGUgY29tcHV0YXRpb24gc28gdGhhdCBtYW55IG9mIHRoZSBtdWx0aXBsaWVzIGFyZQorICogc2ltcGxlIHNjYWxpbmdzIG9mIHRoZSBmaW5hbCBvdXRwdXRzLiAgVGhlc2UgbXVsdGlwbGllcyBjYW4gdGhlbiBiZQorICogZm9sZGVkIGludG8gdGhlIG11bHRpcGxpY2F0aW9ucyBvciBkaXZpc2lvbnMgYnkgdGhlIEpQRUcgcXVhbnRpemF0aW9uCisgKiB0YWJsZSBlbnRyaWVzLiAgVGhlIEFBJk4gbWV0aG9kIGxlYXZlcyBvbmx5IDUgbXVsdGlwbGllcyBhbmQgMjkgYWRkcworICogdG8gYmUgZG9uZSBpbiB0aGUgRENUIGl0c2VsZi4KKyAqIFRoZSBwcmltYXJ5IGRpc2FkdmFudGFnZSBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IHdpdGggZml4ZWQtcG9pbnQgbWF0aCwKKyAqIGFjY3VyYWN5IGlzIGxvc3QgZHVlIHRvIGltcHJlY2lzZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2NhbGVkCisgKiBxdWFudGl6YXRpb24gdmFsdWVzLiAgVGhlIHNtYWxsZXIgdGhlIHF1YW50aXphdGlvbiB0YWJsZSBlbnRyeSwgdGhlIGxlc3MKKyAqIHByZWNpc2UgdGhlIHNjYWxlZCB2YWx1ZSwgc28gdGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIHdvcnNlIHdpdGggaGlnaC0KKyAqIHF1YWxpdHktc2V0dGluZyBmaWxlcyB0aGFuIHdpdGggbG93LXF1YWxpdHkgb25lcy4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAiamRjdC5oIgkJLyogUHJpdmF0ZSBkZWNsYXJhdGlvbnMgZm9yIERDVCBzdWJzeXN0ZW0gKi8KKworI2lmZGVmIERDVF9JRkFTVF9TVVBQT1JURUQKKworCisvKgorICogVGhpcyBtb2R1bGUgaXMgc3BlY2lhbGl6ZWQgdG8gdGhlIGNhc2UgRENUU0laRSA9IDguCisgKi8KKworI2lmIERDVFNJWkUgIT0gOAorICBTb3JyeSwgdGhpcyBjb2RlIG9ubHkgY29wZXMgd2l0aCA4eDggRENUcy4gLyogZGVsaWJlcmF0ZSBzeW50YXggZXJyICovCisjZW5kaWYKKworCisvKiBTY2FsaW5nIGRlY2lzaW9ucyBhcmUgZ2VuZXJhbGx5IHRoZSBzYW1lIGFzIGluIHRoZSBMTCZNIGFsZ29yaXRobTsKKyAqIHNlZSBqZmRjdGludC5jIGZvciBtb3JlIGRldGFpbHMuICBIb3dldmVyLCB3ZSBjaG9vc2UgdG8gZGVzY2FsZQorICogKHJpZ2h0IHNoaWZ0KSBtdWx0aXBsaWNhdGlvbiBwcm9kdWN0cyBhcyBzb29uIGFzIHRoZXkgYXJlIGZvcm1lZCwKKyAqIHJhdGhlciB0aGFuIGNhcnJ5aW5nIGFkZGl0aW9uYWwgZnJhY3Rpb25hbCBiaXRzIGludG8gc3Vic2VxdWVudCBhZGRpdGlvbnMuCisgKiBUaGlzIGNvbXByb21pc2VzIGFjY3VyYWN5IHNsaWdodGx5LCBidXQgaXQgbGV0cyB1cyBzYXZlIGEgZmV3IHNoaWZ0cy4KKyAqIE1vcmUgaW1wb3J0YW50bHksIDE2LWJpdCBhcml0aG1ldGljIGlzIHRoZW4gYWRlcXVhdGUgKGZvciA4LWJpdCBzYW1wbGVzKQorICogZXZlcnl3aGVyZSBleGNlcHQgaW4gdGhlIG11bHRpcGxpY2F0aW9ucyBwcm9wZXI7IHRoaXMgc2F2ZXMgYSBnb29kIGRlYWwKKyAqIG9mIHdvcmsgb24gMTYtYml0LWludCBtYWNoaW5lcy4KKyAqCisgKiBBZ2FpbiB0byBzYXZlIGEgZmV3IHNoaWZ0cywgdGhlIGludGVybWVkaWF0ZSByZXN1bHRzIGJldHdlZW4gcGFzcyAxIGFuZAorICogcGFzcyAyIGFyZSBub3QgdXBzY2FsZWQsIGJ1dCBhcmUgcmVwcmVzZW50ZWQgb25seSB0byBpbnRlZ3JhbCBwcmVjaXNpb24uCisgKgorICogQSBmaW5hbCBjb21wcm9taXNlIGlzIHRvIHJlcHJlc2VudCB0aGUgbXVsdGlwbGljYXRpdmUgY29uc3RhbnRzIHRvIG9ubHkKKyAqIDggZnJhY3Rpb25hbCBiaXRzLCByYXRoZXIgdGhhbiAxMy4gIFRoaXMgc2F2ZXMgc29tZSBzaGlmdGluZyB3b3JrIG9uIHNvbWUKKyAqIG1hY2hpbmVzLCBhbmQgbWF5IGFsc28gcmVkdWNlIHRoZSBjb3N0IG9mIG11bHRpcGxpY2F0aW9uIChzaW5jZSB0aGVyZQorICogYXJlIGZld2VyIG9uZS1iaXRzIGluIHRoZSBjb25zdGFudHMpLgorICovCisKKyNkZWZpbmUgQ09OU1RfQklUUyAgOAorCisKKy8qIFNvbWUgQyBjb21waWxlcnMgZmFpbCB0byByZWR1Y2UgIkZJWChjb25zdGFudCkiIGF0IGNvbXBpbGUgdGltZSwgdGh1cworICogY2F1c2luZyBhIGxvdCBvZiB1c2VsZXNzIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgYXQgcnVuIHRpbWUuCisgKiBUbyBnZXQgYXJvdW5kIHRoaXMgd2UgdXNlIHRoZSBmb2xsb3dpbmcgcHJlLWNhbGN1bGF0ZWQgY29uc3RhbnRzLgorICogSWYgeW91IGNoYW5nZSBDT05TVF9CSVRTIHlvdSBtYXkgd2FudCB0byBhZGQgYXBwcm9wcmlhdGUgdmFsdWVzLgorICogKFdpdGggYSByZWFzb25hYmxlIEMgY29tcGlsZXIsIHlvdSBjYW4ganVzdCByZWx5IG9uIHRoZSBGSVgoKSBtYWNyby4uLikKKyAqLworCisjaWYgQ09OU1RfQklUUyA9PSA4CisjZGVmaW5lIEZJWF8wXzM4MjY4MzQzMyAgKChJTlQzMikgICA5OCkJCS8qIEZJWCgwLjM4MjY4MzQzMykgKi8KKyNkZWZpbmUgRklYXzBfNTQxMTk2MTAwICAoKElOVDMyKSAgMTM5KQkJLyogRklYKDAuNTQxMTk2MTAwKSAqLworI2RlZmluZSBGSVhfMF83MDcxMDY3ODEgICgoSU5UMzIpICAxODEpCQkvKiBGSVgoMC43MDcxMDY3ODEpICovCisjZGVmaW5lIEZJWF8xXzMwNjU2Mjk2NSAgKChJTlQzMikgIDMzNCkJCS8qIEZJWCgxLjMwNjU2Mjk2NSkgKi8KKyNlbHNlCisjZGVmaW5lIEZJWF8wXzM4MjY4MzQzMyAgRklYKDAuMzgyNjgzNDMzKQorI2RlZmluZSBGSVhfMF81NDExOTYxMDAgIEZJWCgwLjU0MTE5NjEwMCkKKyNkZWZpbmUgRklYXzBfNzA3MTA2NzgxICBGSVgoMC43MDcxMDY3ODEpCisjZGVmaW5lIEZJWF8xXzMwNjU2Mjk2NSAgRklYKDEuMzA2NTYyOTY1KQorI2VuZGlmCisKKworLyogV2UgY2FuIGdhaW4gYSBsaXR0bGUgbW9yZSBzcGVlZCwgd2l0aCBhIGZ1cnRoZXIgY29tcHJvbWlzZSBpbiBhY2N1cmFjeSwKKyAqIGJ5IG9taXR0aW5nIHRoZSBhZGRpdGlvbiBpbiBhIGRlc2NhbGluZyBzaGlmdC4gIFRoaXMgeWllbGRzIGFuIGluY29ycmVjdGx5CisgKiByb3VuZGVkIHJlc3VsdCBoYWxmIHRoZSB0aW1lLi4uCisgKi8KKworI2lmbmRlZiBVU0VfQUNDVVJBVEVfUk9VTkRJTkcKKyN1bmRlZiBERVNDQUxFCisjZGVmaW5lIERFU0NBTEUoeCxuKSAgUklHSFRfU0hJRlQoeCwgbikKKyNlbmRpZgorCisKKy8qIE11bHRpcGx5IGEgRENURUxFTSB2YXJpYWJsZSBieSBhbiBJTlQzMiBjb25zdGFudCwgYW5kIGltbWVkaWF0ZWx5CisgKiBkZXNjYWxlIHRvIHlpZWxkIGEgRENURUxFTSByZXN1bHQuCisgKi8KKworI2RlZmluZSBNVUxUSVBMWSh2YXIsY29uc3QpICAoKERDVEVMRU0pIERFU0NBTEUoKHZhcikgKiAoY29uc3QpLCBDT05TVF9CSVRTKSkKKworCisvKgorICogUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gb25lIGJsb2NrIG9mIHNhbXBsZXMuCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2ZkY3RfaWZhc3QgKERDVEVMRU0gKiBkYXRhKQoreworICBEQ1RFTEVNIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQsIHRtcDUsIHRtcDYsIHRtcDc7CisgIERDVEVMRU0gdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTM7CisgIERDVEVMRU0gejEsIHoyLCB6MywgejQsIHo1LCB6MTEsIHoxMzsKKyAgRENURUxFTSAqZGF0YXB0cjsKKyAgaW50IGN0cjsKKyAgU0hJRlRfVEVNUFMKKworICAvKiBQYXNzIDE6IHByb2Nlc3Mgcm93cy4gKi8KKworICBkYXRhcHRyID0gZGF0YTsKKyAgZm9yIChjdHIgPSBEQ1RTSVpFLTE7IGN0ciA+PSAwOyBjdHItLSkgeworICAgIHRtcDAgPSBkYXRhcHRyWzBdICsgZGF0YXB0cls3XTsKKyAgICB0bXA3ID0gZGF0YXB0clswXSAtIGRhdGFwdHJbN107CisgICAgdG1wMSA9IGRhdGFwdHJbMV0gKyBkYXRhcHRyWzZdOworICAgIHRtcDYgPSBkYXRhcHRyWzFdIC0gZGF0YXB0cls2XTsKKyAgICB0bXAyID0gZGF0YXB0clsyXSArIGRhdGFwdHJbNV07CisgICAgdG1wNSA9IGRhdGFwdHJbMl0gLSBkYXRhcHRyWzVdOworICAgIHRtcDMgPSBkYXRhcHRyWzNdICsgZGF0YXB0cls0XTsKKyAgICB0bXA0ID0gZGF0YXB0clszXSAtIGRhdGFwdHJbNF07CisgICAgCisgICAgLyogRXZlbiBwYXJ0ICovCisgICAgCisgICAgdG1wMTAgPSB0bXAwICsgdG1wMzsJLyogcGhhc2UgMiAqLworICAgIHRtcDEzID0gdG1wMCAtIHRtcDM7CisgICAgdG1wMTEgPSB0bXAxICsgdG1wMjsKKyAgICB0bXAxMiA9IHRtcDEgLSB0bXAyOworICAgIAorICAgIGRhdGFwdHJbMF0gPSB0bXAxMCArIHRtcDExOyAvKiBwaGFzZSAzICovCisgICAgZGF0YXB0cls0XSA9IHRtcDEwIC0gdG1wMTE7CisgICAgCisgICAgejEgPSBNVUxUSVBMWSh0bXAxMiArIHRtcDEzLCBGSVhfMF83MDcxMDY3ODEpOyAvKiBjNCAqLworICAgIGRhdGFwdHJbMl0gPSB0bXAxMyArIHoxOwkvKiBwaGFzZSA1ICovCisgICAgZGF0YXB0cls2XSA9IHRtcDEzIC0gejE7CisgICAgCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIHRtcDEwID0gdG1wNCArIHRtcDU7CS8qIHBoYXNlIDIgKi8KKyAgICB0bXAxMSA9IHRtcDUgKyB0bXA2OworICAgIHRtcDEyID0gdG1wNiArIHRtcDc7CisKKyAgICAvKiBUaGUgcm90YXRvciBpcyBtb2RpZmllZCBmcm9tIGZpZyA0LTggdG8gYXZvaWQgZXh0cmEgbmVnYXRpb25zLiAqLworICAgIHo1ID0gTVVMVElQTFkodG1wMTAgLSB0bXAxMiwgRklYXzBfMzgyNjgzNDMzKTsgLyogYzYgKi8KKyAgICB6MiA9IE1VTFRJUExZKHRtcDEwLCBGSVhfMF81NDExOTYxMDApICsgejU7IC8qIGMyLWM2ICovCisgICAgejQgPSBNVUxUSVBMWSh0bXAxMiwgRklYXzFfMzA2NTYyOTY1KSArIHo1OyAvKiBjMitjNiAqLworICAgIHozID0gTVVMVElQTFkodG1wMTEsIEZJWF8wXzcwNzEwNjc4MSk7IC8qIGM0ICovCisKKyAgICB6MTEgPSB0bXA3ICsgejM7CQkvKiBwaGFzZSA1ICovCisgICAgejEzID0gdG1wNyAtIHozOworCisgICAgZGF0YXB0cls1XSA9IHoxMyArIHoyOwkvKiBwaGFzZSA2ICovCisgICAgZGF0YXB0clszXSA9IHoxMyAtIHoyOworICAgIGRhdGFwdHJbMV0gPSB6MTEgKyB6NDsKKyAgICBkYXRhcHRyWzddID0gejExIC0gejQ7CisKKyAgICBkYXRhcHRyICs9IERDVFNJWkU7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KKyAgfQorCisgIC8qIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLiAqLworCisgIGRhdGFwdHIgPSBkYXRhOworICBmb3IgKGN0ciA9IERDVFNJWkUtMTsgY3RyID49IDA7IGN0ci0tKSB7CisgICAgdG1wMCA9IGRhdGFwdHJbRENUU0laRSowXSArIGRhdGFwdHJbRENUU0laRSo3XTsKKyAgICB0bXA3ID0gZGF0YXB0cltEQ1RTSVpFKjBdIC0gZGF0YXB0cltEQ1RTSVpFKjddOworICAgIHRtcDEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gKyBkYXRhcHRyW0RDVFNJWkUqNl07CisgICAgdG1wNiA9IGRhdGFwdHJbRENUU0laRSoxXSAtIGRhdGFwdHJbRENUU0laRSo2XTsKKyAgICB0bXAyID0gZGF0YXB0cltEQ1RTSVpFKjJdICsgZGF0YXB0cltEQ1RTSVpFKjVdOworICAgIHRtcDUgPSBkYXRhcHRyW0RDVFNJWkUqMl0gLSBkYXRhcHRyW0RDVFNJWkUqNV07CisgICAgdG1wMyA9IGRhdGFwdHJbRENUU0laRSozXSArIGRhdGFwdHJbRENUU0laRSo0XTsKKyAgICB0bXA0ID0gZGF0YXB0cltEQ1RTSVpFKjNdIC0gZGF0YXB0cltEQ1RTSVpFKjRdOworICAgIAorICAgIC8qIEV2ZW4gcGFydCAqLworICAgIAorICAgIHRtcDEwID0gdG1wMCArIHRtcDM7CS8qIHBoYXNlIDIgKi8KKyAgICB0bXAxMyA9IHRtcDAgLSB0bXAzOworICAgIHRtcDExID0gdG1wMSArIHRtcDI7CisgICAgdG1wMTIgPSB0bXAxIC0gdG1wMjsKKyAgICAKKyAgICBkYXRhcHRyW0RDVFNJWkUqMF0gPSB0bXAxMCArIHRtcDExOyAvKiBwaGFzZSAzICovCisgICAgZGF0YXB0cltEQ1RTSVpFKjRdID0gdG1wMTAgLSB0bXAxMTsKKyAgICAKKyAgICB6MSA9IE1VTFRJUExZKHRtcDEyICsgdG1wMTMsIEZJWF8wXzcwNzEwNjc4MSk7IC8qIGM0ICovCisgICAgZGF0YXB0cltEQ1RTSVpFKjJdID0gdG1wMTMgKyB6MTsgLyogcGhhc2UgNSAqLworICAgIGRhdGFwdHJbRENUU0laRSo2XSA9IHRtcDEzIC0gejE7CisgICAgCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIHRtcDEwID0gdG1wNCArIHRtcDU7CS8qIHBoYXNlIDIgKi8KKyAgICB0bXAxMSA9IHRtcDUgKyB0bXA2OworICAgIHRtcDEyID0gdG1wNiArIHRtcDc7CisKKyAgICAvKiBUaGUgcm90YXRvciBpcyBtb2RpZmllZCBmcm9tIGZpZyA0LTggdG8gYXZvaWQgZXh0cmEgbmVnYXRpb25zLiAqLworICAgIHo1ID0gTVVMVElQTFkodG1wMTAgLSB0bXAxMiwgRklYXzBfMzgyNjgzNDMzKTsgLyogYzYgKi8KKyAgICB6MiA9IE1VTFRJUExZKHRtcDEwLCBGSVhfMF81NDExOTYxMDApICsgejU7IC8qIGMyLWM2ICovCisgICAgejQgPSBNVUxUSVBMWSh0bXAxMiwgRklYXzFfMzA2NTYyOTY1KSArIHo1OyAvKiBjMitjNiAqLworICAgIHozID0gTVVMVElQTFkodG1wMTEsIEZJWF8wXzcwNzEwNjc4MSk7IC8qIGM0ICovCisKKyAgICB6MTEgPSB0bXA3ICsgejM7CQkvKiBwaGFzZSA1ICovCisgICAgejEzID0gdG1wNyAtIHozOworCisgICAgZGF0YXB0cltEQ1RTSVpFKjVdID0gejEzICsgejI7IC8qIHBoYXNlIDYgKi8KKyAgICBkYXRhcHRyW0RDVFNJWkUqM10gPSB6MTMgLSB6MjsKKyAgICBkYXRhcHRyW0RDVFNJWkUqMV0gPSB6MTEgKyB6NDsKKyAgICBkYXRhcHRyW0RDVFNJWkUqN10gPSB6MTEgLSB6NDsKKworICAgIGRhdGFwdHIrKzsJCQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCBjb2x1bW4gKi8KKyAgfQorfQorCisjZW5kaWYgLyogRENUX0lGQVNUX1NVUFBPUlRFRCAqLworCisjZW5kaWYgLy9fRlhfSlBFR19UVVJCT18KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pmZGN0aW50LmMgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qZmRjdGludC5jCmluZGV4IDg4ODEwYTcuLjQ4ODUwNWIgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2pmZGN0aW50LmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamZkY3RpbnQuYwpAQCAtMSwyODYgKzEsMjg2IEBACi0jaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQ0KLS8qDQotICogamZkY3RpbnQuYw0KLSAqDQotICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTYsIFRob21hcyBHLiBMYW5lLg0KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuDQotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLg0KLSAqDQotICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgc2xvdy1idXQtYWNjdXJhdGUgaW50ZWdlciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUNCi0gKiBmb3J3YXJkIERDVCAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuDQotICoNCi0gKiBBIDItRCBEQ1QgY2FuIGJlIGRvbmUgYnkgMS1EIERDVCBvbiBlYWNoIHJvdyBmb2xsb3dlZCBieSAxLUQgRENUDQotICogb24gZWFjaCBjb2x1bW4uICBEaXJlY3QgYWxnb3JpdGhtcyBhcmUgYWxzbyBhdmFpbGFibGUsIGJ1dCB0aGV5IGFyZQ0KLSAqIG11Y2ggbW9yZSBjb21wbGV4IGFuZCBzZWVtIG5vdCB0byBiZSBhbnkgZmFzdGVyIHdoZW4gcmVkdWNlZCB0byBjb2RlLg0KLSAqDQotICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBhbiBhbGdvcml0aG0gZGVzY3JpYmVkIGluDQotICogICBDLiBMb2VmZmxlciwgQS4gTGlndGVuYmVyZyBhbmQgRy4gTW9zY2h5dHosICJQcmFjdGljYWwgRmFzdCAxLUQgRENUDQotICogICBBbGdvcml0aG1zIHdpdGggMTEgTXVsdGlwbGljYXRpb25zIiwgUHJvYy4gSW50J2wuIENvbmYuIG9uIEFjb3VzdGljcywNCi0gKiAgIFNwZWVjaCwgYW5kIFNpZ25hbCBQcm9jZXNzaW5nIDE5ODkgKElDQVNTUCAnODkpLCBwcC4gOTg4LTk5MS4NCi0gKiBUaGUgcHJpbWFyeSBhbGdvcml0aG0gZGVzY3JpYmVkIHRoZXJlIHVzZXMgMTEgbXVsdGlwbGllcyBhbmQgMjkgYWRkcy4NCi0gKiBXZSB1c2UgdGhlaXIgYWx0ZXJuYXRlIG1ldGhvZCB3aXRoIDEyIG11bHRpcGxpZXMgYW5kIDMyIGFkZHMuDQotICogVGhlIGFkdmFudGFnZSBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IG5vIGRhdGEgcGF0aCBjb250YWlucyBtb3JlIHRoYW4gb25lDQotICogbXVsdGlwbGljYXRpb247IHRoaXMgYWxsb3dzIGEgdmVyeSBzaW1wbGUgYW5kIGFjY3VyYXRlIGltcGxlbWVudGF0aW9uIGluDQotICogc2NhbGVkIGZpeGVkLXBvaW50IGFyaXRobWV0aWMsIHdpdGggYSBtaW5pbWFsIG51bWJlciBvZiBzaGlmdHMuDQotICovDQotDQotI2RlZmluZSBKUEVHX0lOVEVSTkFMUw0KLSNpbmNsdWRlICJqaW5jbHVkZS5oIg0KLSNpbmNsdWRlICJqcGVnbGliLmgiDQotI2luY2x1ZGUgImpkY3QuaCIJCS8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovDQotDQotI2lmZGVmIERDVF9JU0xPV19TVVBQT1JURUQNCi0NCi0NCi0vKg0KLSAqIFRoaXMgbW9kdWxlIGlzIHNwZWNpYWxpemVkIHRvIHRoZSBjYXNlIERDVFNJWkUgPSA4Lg0KLSAqLw0KLQ0KLSNpZiBEQ1RTSVpFICE9IDgNCi0gIFNvcnJ5LCB0aGlzIGNvZGUgb25seSBjb3BlcyB3aXRoIDh4OCBEQ1RzLiAvKiBkZWxpYmVyYXRlIHN5bnRheCBlcnIgKi8NCi0jZW5kaWYNCi0NCi0NCi0vKg0KLSAqIFRoZSBwb29wIG9uIHRoaXMgc2NhbGluZyBzdHVmZiBpcyBhcyBmb2xsb3dzOg0KLSAqDQotICogRWFjaCAxLUQgRENUIHN0ZXAgcHJvZHVjZXMgb3V0cHV0cyB3aGljaCBhcmUgYSBmYWN0b3Igb2Ygc3FydChOKQ0KLSAqIGxhcmdlciB0aGFuIHRoZSB0cnVlIERDVCBvdXRwdXRzLiAgVGhlIGZpbmFsIG91dHB1dHMgYXJlIHRoZXJlZm9yZQ0KLSAqIGEgZmFjdG9yIG9mIE4gbGFyZ2VyIHRoYW4gZGVzaXJlZDsgc2luY2UgTj04IHRoaXMgY2FuIGJlIGN1cmVkIGJ5DQotICogYSBzaW1wbGUgcmlnaHQgc2hpZnQgYXQgdGhlIGVuZCBvZiB0aGUgYWxnb3JpdGhtLiAgVGhlIGFkdmFudGFnZSBvZg0KLSAqIHRoaXMgYXJyYW5nZW1lbnQgaXMgdGhhdCB3ZSBzYXZlIHR3byBtdWx0aXBsaWNhdGlvbnMgcGVyIDEtRCBEQ1QsDQotICogYmVjYXVzZSB0aGUgeTAgYW5kIHk0IG91dHB1dHMgbmVlZCBub3QgYmUgZGl2aWRlZCBieSBzcXJ0KE4pLg0KLSAqIEluIHRoZSBJSkcgY29kZSwgdGhpcyBmYWN0b3Igb2YgOCBpcyByZW1vdmVkIGJ5IHRoZSBxdWFudGl6YXRpb24gc3RlcA0KLSAqIChpbiBqY2RjdG1nci5jKSwgTk9UIGluIHRoaXMgbW9kdWxlLg0KLSAqDQotICogV2UgaGF2ZSB0byBkbyBhZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24gb2YgdGhlIGludGVnZXIgaW5wdXRzLCB3aGljaA0KLSAqIGlzIG5vIHByb2JsZW0sIGFuZCBtdWx0aXBsaWNhdGlvbiBieSBmcmFjdGlvbmFsIGNvbnN0YW50cywgd2hpY2ggaXMNCi0gKiBhIHByb2JsZW0gdG8gZG8gaW4gaW50ZWdlciBhcml0aG1ldGljLiAgV2UgbXVsdGlwbHkgYWxsIHRoZSBjb25zdGFudHMNCi0gKiBieSBDT05TVF9TQ0FMRSBhbmQgY29udmVydCB0aGVtIHRvIGludGVnZXIgY29uc3RhbnRzICh0aHVzIHJldGFpbmluZw0KLSAqIENPTlNUX0JJVFMgYml0cyBvZiBwcmVjaXNpb24gaW4gdGhlIGNvbnN0YW50cykuICBBZnRlciBkb2luZyBhDQotICogbXVsdGlwbGljYXRpb24gd2UgaGF2ZSB0byBkaXZpZGUgdGhlIHByb2R1Y3QgYnkgQ09OU1RfU0NBTEUsIHdpdGggcHJvcGVyDQotICogcm91bmRpbmcsIHRvIHByb2R1Y2UgdGhlIGNvcnJlY3Qgb3V0cHV0LiAgVGhpcyBkaXZpc2lvbiBjYW4gYmUgZG9uZQ0KLSAqIGNoZWFwbHkgYXMgYSByaWdodCBzaGlmdCBvZiBDT05TVF9CSVRTIGJpdHMuICBXZSBwb3N0cG9uZSBzaGlmdGluZw0KLSAqIGFzIGxvbmcgYXMgcG9zc2libGUgc28gdGhhdCBwYXJ0aWFsIHN1bXMgY2FuIGJlIGFkZGVkIHRvZ2V0aGVyIHdpdGgNCi0gKiBmdWxsIGZyYWN0aW9uYWwgcHJlY2lzaW9uLg0KLSAqDQotICogVGhlIG91dHB1dHMgb2YgdGhlIGZpcnN0IHBhc3MgYXJlIHNjYWxlZCB1cCBieSBQQVNTMV9CSVRTIGJpdHMgc28gdGhhdA0KLSAqIHRoZXkgYXJlIHJlcHJlc2VudGVkIHRvIGJldHRlci10aGFuLWludGVncmFsIHByZWNpc2lvbi4gIFRoZXNlIG91dHB1dHMNCi0gKiByZXF1aXJlIEJJVFNfSU5fSlNBTVBMRSArIFBBU1MxX0JJVFMgKyAzIGJpdHM7IHRoaXMgZml0cyBpbiBhIDE2LWJpdCB3b3JkDQotICogd2l0aCB0aGUgcmVjb21tZW5kZWQgc2NhbGluZy4gIChGb3IgMTItYml0IHNhbXBsZSBkYXRhLCB0aGUgaW50ZXJtZWRpYXRlDQotICogYXJyYXkgaXMgSU5UMzIgYW55d2F5LikNCi0gKg0KLSAqIFRvIGF2b2lkIG92ZXJmbG93IG9mIHRoZSAzMi1iaXQgaW50ZXJtZWRpYXRlIHJlc3VsdHMgaW4gcGFzcyAyLCB3ZSBtdXN0DQotICogaGF2ZSBCSVRTX0lOX0pTQU1QTEUgKyBDT05TVF9CSVRTICsgUEFTUzFfQklUUyA8PSAyNi4gIEVycm9yIGFuYWx5c2lzDQotICogc2hvd3MgdGhhdCB0aGUgdmFsdWVzIGdpdmVuIGJlbG93IGFyZSB0aGUgbW9zdCBlZmZlY3RpdmUuDQotICovDQotDQotI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4DQotI2RlZmluZSBDT05TVF9CSVRTICAxMw0KLSNkZWZpbmUgUEFTUzFfQklUUyAgMg0KLSNlbHNlDQotI2RlZmluZSBDT05TVF9CSVRTICAxMw0KLSNkZWZpbmUgUEFTUzFfQklUUyAgMQkJLyogbG9zZSBhIGxpdHRsZSBwcmVjaXNpb24gdG8gYXZvaWQgb3ZlcmZsb3cgKi8NCi0jZW5kaWYNCi0NCi0vKiBTb21lIEMgY29tcGlsZXJzIGZhaWwgdG8gcmVkdWNlICJGSVgoY29uc3RhbnQpIiBhdCBjb21waWxlIHRpbWUsIHRodXMNCi0gKiBjYXVzaW5nIGEgbG90IG9mIHVzZWxlc3MgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyBhdCBydW4gdGltZS4NCi0gKiBUbyBnZXQgYXJvdW5kIHRoaXMgd2UgdXNlIHRoZSBmb2xsb3dpbmcgcHJlLWNhbGN1bGF0ZWQgY29uc3RhbnRzLg0KLSAqIElmIHlvdSBjaGFuZ2UgQ09OU1RfQklUUyB5b3UgbWF5IHdhbnQgdG8gYWRkIGFwcHJvcHJpYXRlIHZhbHVlcy4NCi0gKiAoV2l0aCBhIHJlYXNvbmFibGUgQyBjb21waWxlciwgeW91IGNhbiBqdXN0IHJlbHkgb24gdGhlIEZJWCgpIG1hY3JvLi4uKQ0KLSAqLw0KLQ0KLSNpZiBDT05TVF9CSVRTID09IDEzDQotI2RlZmluZSBGSVhfMF8yOTg2MzEzMzYgICgoSU5UMzIpICAyNDQ2KQkvKiBGSVgoMC4yOTg2MzEzMzYpICovDQotI2RlZmluZSBGSVhfMF8zOTAxODA2NDQgICgoSU5UMzIpICAzMTk2KQkvKiBGSVgoMC4zOTAxODA2NDQpICovDQotI2RlZmluZSBGSVhfMF81NDExOTYxMDAgICgoSU5UMzIpICA0NDMzKQkvKiBGSVgoMC41NDExOTYxMDApICovDQotI2RlZmluZSBGSVhfMF83NjUzNjY4NjUgICgoSU5UMzIpICA2MjcwKQkvKiBGSVgoMC43NjUzNjY4NjUpICovDQotI2RlZmluZSBGSVhfMF84OTk5NzYyMjMgICgoSU5UMzIpICA3MzczKQkvKiBGSVgoMC44OTk5NzYyMjMpICovDQotI2RlZmluZSBGSVhfMV8xNzU4NzU2MDIgICgoSU5UMzIpICA5NjMzKQkvKiBGSVgoMS4xNzU4NzU2MDIpICovDQotI2RlZmluZSBGSVhfMV81MDEzMjExMTAgICgoSU5UMzIpICAxMjI5OSkJLyogRklYKDEuNTAxMzIxMTEwKSAqLw0KLSNkZWZpbmUgRklYXzFfODQ3NzU5MDY1ICAoKElOVDMyKSAgMTUxMzcpCS8qIEZJWCgxLjg0Nzc1OTA2NSkgKi8NCi0jZGVmaW5lIEZJWF8xXzk2MTU3MDU2MCAgKChJTlQzMikgIDE2MDY5KQkvKiBGSVgoMS45NjE1NzA1NjApICovDQotI2RlZmluZSBGSVhfMl8wNTMxMTk4NjkgICgoSU5UMzIpICAxNjgxOSkJLyogRklYKDIuMDUzMTE5ODY5KSAqLw0KLSNkZWZpbmUgRklYXzJfNTYyOTE1NDQ3ICAoKElOVDMyKSAgMjA5OTUpCS8qIEZJWCgyLjU2MjkxNTQ0NykgKi8NCi0jZGVmaW5lIEZJWF8zXzA3MjcxMTAyNiAgKChJTlQzMikgIDI1MTcyKQkvKiBGSVgoMy4wNzI3MTEwMjYpICovDQotI2Vsc2UNCi0jZGVmaW5lIEZJWF8wXzI5ODYzMTMzNiAgRklYKDAuMjk4NjMxMzM2KQ0KLSNkZWZpbmUgRklYXzBfMzkwMTgwNjQ0ICBGSVgoMC4zOTAxODA2NDQpDQotI2RlZmluZSBGSVhfMF81NDExOTYxMDAgIEZJWCgwLjU0MTE5NjEwMCkNCi0jZGVmaW5lIEZJWF8wXzc2NTM2Njg2NSAgRklYKDAuNzY1MzY2ODY1KQ0KLSNkZWZpbmUgRklYXzBfODk5OTc2MjIzICBGSVgoMC44OTk5NzYyMjMpDQotI2RlZmluZSBGSVhfMV8xNzU4NzU2MDIgIEZJWCgxLjE3NTg3NTYwMikNCi0jZGVmaW5lIEZJWF8xXzUwMTMyMTExMCAgRklYKDEuNTAxMzIxMTEwKQ0KLSNkZWZpbmUgRklYXzFfODQ3NzU5MDY1ICBGSVgoMS44NDc3NTkwNjUpDQotI2RlZmluZSBGSVhfMV85NjE1NzA1NjAgIEZJWCgxLjk2MTU3MDU2MCkNCi0jZGVmaW5lIEZJWF8yXzA1MzExOTg2OSAgRklYKDIuMDUzMTE5ODY5KQ0KLSNkZWZpbmUgRklYXzJfNTYyOTE1NDQ3ICBGSVgoMi41NjI5MTU0NDcpDQotI2RlZmluZSBGSVhfM18wNzI3MTEwMjYgIEZJWCgzLjA3MjcxMTAyNikNCi0jZW5kaWYNCi0NCi0NCi0vKiBNdWx0aXBseSBhbiBJTlQzMiB2YXJpYWJsZSBieSBhbiBJTlQzMiBjb25zdGFudCB0byB5aWVsZCBhbiBJTlQzMiByZXN1bHQuDQotICogRm9yIDgtYml0IHNhbXBsZXMgd2l0aCB0aGUgcmVjb21tZW5kZWQgc2NhbGluZywgYWxsIHRoZSB2YXJpYWJsZQ0KLSAqIGFuZCBjb25zdGFudCB2YWx1ZXMgaW52b2x2ZWQgYXJlIG5vIG1vcmUgdGhhbiAxNiBiaXRzIHdpZGUsIHNvIGENCi0gKiAxNngxNi0+MzIgYml0IG11bHRpcGx5IGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgYSBmdWxsIDMyeDMyIG11bHRpcGx5Lg0KLSAqIEZvciAxMi1iaXQgc2FtcGxlcywgYSBmdWxsIDMyLWJpdCBtdWx0aXBsaWNhdGlvbiB3aWxsIGJlIG5lZWRlZC4NCi0gKi8NCi0NCi0jaWYgQklUU19JTl9KU0FNUExFID09IDgNCi0jZGVmaW5lIE1VTFRJUExZKHZhcixjb25zdCkgIE1VTFRJUExZMTZDMTYodmFyLGNvbnN0KQ0KLSNlbHNlDQotI2RlZmluZSBNVUxUSVBMWSh2YXIsY29uc3QpICAoKHZhcikgKiAoY29uc3QpKQ0KLSNlbmRpZg0KLQ0KLQ0KLS8qDQotICogUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gb25lIGJsb2NrIG9mIHNhbXBsZXMuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotanBlZ19mZGN0X2lzbG93IChEQ1RFTEVNICogZGF0YSkNCi17DQotICBJTlQzMiB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzLCB0bXA0LCB0bXA1LCB0bXA2LCB0bXA3Ow0KLSAgSU5UMzIgdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTM7DQotICBJTlQzMiB6MSwgejIsIHozLCB6NCwgejU7DQotICBEQ1RFTEVNICpkYXRhcHRyOw0KLSAgaW50IGN0cjsNCi0gIFNISUZUX1RFTVBTDQotDQotICAvKiBQYXNzIDE6IHByb2Nlc3Mgcm93cy4gKi8NCi0gIC8qIE5vdGUgcmVzdWx0cyBhcmUgc2NhbGVkIHVwIGJ5IHNxcnQoOCkgY29tcGFyZWQgdG8gYSB0cnVlIERDVDsgKi8NCi0gIC8qIGZ1cnRoZXJtb3JlLCB3ZSBzY2FsZSB0aGUgcmVzdWx0cyBieSAyKipQQVNTMV9CSVRTLiAqLw0KLQ0KLSAgZGF0YXB0ciA9IGRhdGE7DQotICBmb3IgKGN0ciA9IERDVFNJWkUtMTsgY3RyID49IDA7IGN0ci0tKSB7DQotICAgIHRtcDAgPSBkYXRhcHRyWzBdICsgZGF0YXB0cls3XTsNCi0gICAgdG1wNyA9IGRhdGFwdHJbMF0gLSBkYXRhcHRyWzddOw0KLSAgICB0bXAxID0gZGF0YXB0clsxXSArIGRhdGFwdHJbNl07DQotICAgIHRtcDYgPSBkYXRhcHRyWzFdIC0gZGF0YXB0cls2XTsNCi0gICAgdG1wMiA9IGRhdGFwdHJbMl0gKyBkYXRhcHRyWzVdOw0KLSAgICB0bXA1ID0gZGF0YXB0clsyXSAtIGRhdGFwdHJbNV07DQotICAgIHRtcDMgPSBkYXRhcHRyWzNdICsgZGF0YXB0cls0XTsNCi0gICAgdG1wNCA9IGRhdGFwdHJbM10gLSBkYXRhcHRyWzRdOw0KLSAgICANCi0gICAgLyogRXZlbiBwYXJ0IHBlciBMTCZNIGZpZ3VyZSAxIC0tLSBub3RlIHRoYXQgcHVibGlzaGVkIGZpZ3VyZSBpcyBmYXVsdHk7DQotICAgICAqIHJvdGF0b3IgInNxcnQoMikqYzEiIHNob3VsZCBiZSAic3FydCgyKSpjNiIuDQotICAgICAqLw0KLSAgICANCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMzsNCi0gICAgdG1wMTMgPSB0bXAwIC0gdG1wMzsNCi0gICAgdG1wMTEgPSB0bXAxICsgdG1wMjsNCi0gICAgdG1wMTIgPSB0bXAxIC0gdG1wMjsNCi0gICAgDQotICAgIGRhdGFwdHJbMF0gPSAoRENURUxFTSkgKCh0bXAxMCArIHRtcDExKSA8PCBQQVNTMV9CSVRTKTsNCi0gICAgZGF0YXB0cls0XSA9IChEQ1RFTEVNKSAoKHRtcDEwIC0gdG1wMTEpIDw8IFBBU1MxX0JJVFMpOw0KLSAgICANCi0gICAgejEgPSBNVUxUSVBMWSh0bXAxMiArIHRtcDEzLCBGSVhfMF81NDExOTYxMDApOw0KLSAgICBkYXRhcHRyWzJdID0gKERDVEVMRU0pIERFU0NBTEUoejEgKyBNVUxUSVBMWSh0bXAxMywgRklYXzBfNzY1MzY2ODY1KSwNCi0JCQkJICAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsNCi0gICAgZGF0YXB0cls2XSA9IChEQ1RFTEVNKSBERVNDQUxFKHoxICsgTVVMVElQTFkodG1wMTIsIC0gRklYXzFfODQ3NzU5MDY1KSwNCi0JCQkJICAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsNCi0gICAgDQotICAgIC8qIE9kZCBwYXJ0IHBlciBmaWd1cmUgOCAtLS0gbm90ZSBwYXBlciBvbWl0cyBmYWN0b3Igb2Ygc3FydCgyKS4NCi0gICAgICogY0sgcmVwcmVzZW50cyBjb3MoSypwaS8xNikuDQotICAgICAqIGkwLi5pMyBpbiB0aGUgcGFwZXIgYXJlIHRtcDQuLnRtcDcgaGVyZS4NCi0gICAgICovDQotICAgIA0KLSAgICB6MSA9IHRtcDQgKyB0bXA3Ow0KLSAgICB6MiA9IHRtcDUgKyB0bXA2Ow0KLSAgICB6MyA9IHRtcDQgKyB0bXA2Ow0KLSAgICB6NCA9IHRtcDUgKyB0bXA3Ow0KLSAgICB6NSA9IE1VTFRJUExZKHozICsgejQsIEZJWF8xXzE3NTg3NTYwMik7IC8qIHNxcnQoMikgKiBjMyAqLw0KLSAgICANCi0gICAgdG1wNCA9IE1VTFRJUExZKHRtcDQsIEZJWF8wXzI5ODYzMTMzNik7IC8qIHNxcnQoMikgKiAoLWMxK2MzK2M1LWM3KSAqLw0KLSAgICB0bXA1ID0gTVVMVElQTFkodG1wNSwgRklYXzJfMDUzMTE5ODY5KTsgLyogc3FydCgyKSAqICggYzErYzMtYzUrYzcpICovDQotICAgIHRtcDYgPSBNVUxUSVBMWSh0bXA2LCBGSVhfM18wNzI3MTEwMjYpOyAvKiBzcXJ0KDIpICogKCBjMStjMytjNS1jNykgKi8NCi0gICAgdG1wNyA9IE1VTFRJUExZKHRtcDcsIEZJWF8xXzUwMTMyMTExMCk7IC8qIHNxcnQoMikgKiAoIGMxK2MzLWM1LWM3KSAqLw0KLSAgICB6MSA9IE1VTFRJUExZKHoxLCAtIEZJWF8wXzg5OTk3NjIyMyk7IC8qIHNxcnQoMikgKiAoYzctYzMpICovDQotICAgIHoyID0gTVVMVElQTFkoejIsIC0gRklYXzJfNTYyOTE1NDQ3KTsgLyogc3FydCgyKSAqICgtYzEtYzMpICovDQotICAgIHozID0gTVVMVElQTFkoejMsIC0gRklYXzFfOTYxNTcwNTYwKTsgLyogc3FydCgyKSAqICgtYzMtYzUpICovDQotICAgIHo0ID0gTVVMVElQTFkoejQsIC0gRklYXzBfMzkwMTgwNjQ0KTsgLyogc3FydCgyKSAqIChjNS1jMykgKi8NCi0gICAgDQotICAgIHozICs9IHo1Ow0KLSAgICB6NCArPSB6NTsNCi0gICAgDQotICAgIGRhdGFwdHJbN10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXA0ICsgejEgKyB6MywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsNCi0gICAgZGF0YXB0cls1XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDUgKyB6MiArIHo0LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOw0KLSAgICBkYXRhcHRyWzNdID0gKERDVEVMRU0pIERFU0NBTEUodG1wNiArIHoyICsgejMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7DQotICAgIGRhdGFwdHJbMV0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXA3ICsgejEgKyB6NCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsNCi0gICAgDQotICAgIGRhdGFwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLw0KLSAgfQ0KLQ0KLSAgLyogUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuDQotICAgKiBXZSByZW1vdmUgdGhlIFBBU1MxX0JJVFMgc2NhbGluZywgYnV0IGxlYXZlIHRoZSByZXN1bHRzIHNjYWxlZCB1cA0KLSAgICogYnkgYW4gb3ZlcmFsbCBmYWN0b3Igb2YgOC4NCi0gICAqLw0KLQ0KLSAgZGF0YXB0ciA9IGRhdGE7DQotICBmb3IgKGN0ciA9IERDVFNJWkUtMTsgY3RyID49IDA7IGN0ci0tKSB7DQotICAgIHRtcDAgPSBkYXRhcHRyW0RDVFNJWkUqMF0gKyBkYXRhcHRyW0RDVFNJWkUqN107DQotICAgIHRtcDcgPSBkYXRhcHRyW0RDVFNJWkUqMF0gLSBkYXRhcHRyW0RDVFNJWkUqN107DQotICAgIHRtcDEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gKyBkYXRhcHRyW0RDVFNJWkUqNl07DQotICAgIHRtcDYgPSBkYXRhcHRyW0RDVFNJWkUqMV0gLSBkYXRhcHRyW0RDVFNJWkUqNl07DQotICAgIHRtcDIgPSBkYXRhcHRyW0RDVFNJWkUqMl0gKyBkYXRhcHRyW0RDVFNJWkUqNV07DQotICAgIHRtcDUgPSBkYXRhcHRyW0RDVFNJWkUqMl0gLSBkYXRhcHRyW0RDVFNJWkUqNV07DQotICAgIHRtcDMgPSBkYXRhcHRyW0RDVFNJWkUqM10gKyBkYXRhcHRyW0RDVFNJWkUqNF07DQotICAgIHRtcDQgPSBkYXRhcHRyW0RDVFNJWkUqM10gLSBkYXRhcHRyW0RDVFNJWkUqNF07DQotICAgIA0KLSAgICAvKiBFdmVuIHBhcnQgcGVyIExMJk0gZmlndXJlIDEgLS0tIG5vdGUgdGhhdCBwdWJsaXNoZWQgZmlndXJlIGlzIGZhdWx0eTsNCi0gICAgICogcm90YXRvciAic3FydCgyKSpjMSIgc2hvdWxkIGJlICJzcXJ0KDIpKmM2Ii4NCi0gICAgICovDQotICAgIA0KLSAgICB0bXAxMCA9IHRtcDAgKyB0bXAzOw0KLSAgICB0bXAxMyA9IHRtcDAgLSB0bXAzOw0KLSAgICB0bXAxMSA9IHRtcDEgKyB0bXAyOw0KLSAgICB0bXAxMiA9IHRtcDEgLSB0bXAyOw0KLSAgICANCi0gICAgZGF0YXB0cltEQ1RTSVpFKjBdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTAgKyB0bXAxMSwgUEFTUzFfQklUUyk7DQotICAgIGRhdGFwdHJbRENUU0laRSo0XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDEwIC0gdG1wMTEsIFBBU1MxX0JJVFMpOw0KLSAgICANCi0gICAgejEgPSBNVUxUSVBMWSh0bXAxMiArIHRtcDEzLCBGSVhfMF81NDExOTYxMDApOw0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMl0gPSAoRENURUxFTSkgREVTQ0FMRSh6MSArIE1VTFRJUExZKHRtcDEzLCBGSVhfMF83NjUzNjY4NjUpLA0KLQkJCQkJICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsNCi0gICAgZGF0YXB0cltEQ1RTSVpFKjZdID0gKERDVEVMRU0pIERFU0NBTEUoejEgKyBNVUxUSVBMWSh0bXAxMiwgLSBGSVhfMV84NDc3NTkwNjUpLA0KLQkJCQkJICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsNCi0gICAgDQotICAgIC8qIE9kZCBwYXJ0IHBlciBmaWd1cmUgOCAtLS0gbm90ZSBwYXBlciBvbWl0cyBmYWN0b3Igb2Ygc3FydCgyKS4NCi0gICAgICogY0sgcmVwcmVzZW50cyBjb3MoSypwaS8xNikuDQotICAgICAqIGkwLi5pMyBpbiB0aGUgcGFwZXIgYXJlIHRtcDQuLnRtcDcgaGVyZS4NCi0gICAgICovDQotICAgIA0KLSAgICB6MSA9IHRtcDQgKyB0bXA3Ow0KLSAgICB6MiA9IHRtcDUgKyB0bXA2Ow0KLSAgICB6MyA9IHRtcDQgKyB0bXA2Ow0KLSAgICB6NCA9IHRtcDUgKyB0bXA3Ow0KLSAgICB6NSA9IE1VTFRJUExZKHozICsgejQsIEZJWF8xXzE3NTg3NTYwMik7IC8qIHNxcnQoMikgKiBjMyAqLw0KLSAgICANCi0gICAgdG1wNCA9IE1VTFRJUExZKHRtcDQsIEZJWF8wXzI5ODYzMTMzNik7IC8qIHNxcnQoMikgKiAoLWMxK2MzK2M1LWM3KSAqLw0KLSAgICB0bXA1ID0gTVVMVElQTFkodG1wNSwgRklYXzJfMDUzMTE5ODY5KTsgLyogc3FydCgyKSAqICggYzErYzMtYzUrYzcpICovDQotICAgIHRtcDYgPSBNVUxUSVBMWSh0bXA2LCBGSVhfM18wNzI3MTEwMjYpOyAvKiBzcXJ0KDIpICogKCBjMStjMytjNS1jNykgKi8NCi0gICAgdG1wNyA9IE1VTFRJUExZKHRtcDcsIEZJWF8xXzUwMTMyMTExMCk7IC8qIHNxcnQoMikgKiAoIGMxK2MzLWM1LWM3KSAqLw0KLSAgICB6MSA9IE1VTFRJUExZKHoxLCAtIEZJWF8wXzg5OTk3NjIyMyk7IC8qIHNxcnQoMikgKiAoYzctYzMpICovDQotICAgIHoyID0gTVVMVElQTFkoejIsIC0gRklYXzJfNTYyOTE1NDQ3KTsgLyogc3FydCgyKSAqICgtYzEtYzMpICovDQotICAgIHozID0gTVVMVElQTFkoejMsIC0gRklYXzFfOTYxNTcwNTYwKTsgLyogc3FydCgyKSAqICgtYzMtYzUpICovDQotICAgIHo0ID0gTVVMVElQTFkoejQsIC0gRklYXzBfMzkwMTgwNjQ0KTsgLyogc3FydCgyKSAqIChjNS1jMykgKi8NCi0gICAgDQotICAgIHozICs9IHo1Ow0KLSAgICB6NCArPSB6NTsNCi0gICAgDQotICAgIGRhdGFwdHJbRENUU0laRSo3XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDQgKyB6MSArIHozLA0KLQkJCQkJICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsNCi0gICAgZGF0YXB0cltEQ1RTSVpFKjVdID0gKERDVEVMRU0pIERFU0NBTEUodG1wNSArIHoyICsgejQsDQotCQkJCQkgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOw0KLSAgICBkYXRhcHRyW0RDVFNJWkUqM10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXA2ICsgejIgKyB6MywNCi0JCQkJCSAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7DQotICAgIGRhdGFwdHJbRENUU0laRSoxXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDcgKyB6MSArIHo0LA0KLQkJCQkJICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsNCi0gICAgDQotICAgIGRhdGFwdHIrKzsJCQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCBjb2x1bW4gKi8NCi0gIH0NCi19DQotDQotI2VuZGlmIC8qIERDVF9JU0xPV19TVVBQT1JURUQgKi8NCi0NCi0jZW5kaWYgLy9fRlhfSlBFR19UVVJCT18NCisjaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQorLyoKKyAqIGpmZGN0aW50LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NiwgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhIHNsb3ctYnV0LWFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YgdGhlCisgKiBmb3J3YXJkIERDVCAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuCisgKgorICogQSAyLUQgRENUIGNhbiBiZSBkb25lIGJ5IDEtRCBEQ1Qgb24gZWFjaCByb3cgZm9sbG93ZWQgYnkgMS1EIERDVAorICogb24gZWFjaCBjb2x1bW4uICBEaXJlY3QgYWxnb3JpdGhtcyBhcmUgYWxzbyBhdmFpbGFibGUsIGJ1dCB0aGV5IGFyZQorICogbXVjaCBtb3JlIGNvbXBsZXggYW5kIHNlZW0gbm90IHRvIGJlIGFueSBmYXN0ZXIgd2hlbiByZWR1Y2VkIHRvIGNvZGUuCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBhbiBhbGdvcml0aG0gZGVzY3JpYmVkIGluCisgKiAgIEMuIExvZWZmbGVyLCBBLiBMaWd0ZW5iZXJnIGFuZCBHLiBNb3NjaHl0eiwgIlByYWN0aWNhbCBGYXN0IDEtRCBEQ1QKKyAqICAgQWxnb3JpdGhtcyB3aXRoIDExIE11bHRpcGxpY2F0aW9ucyIsIFByb2MuIEludCdsLiBDb25mLiBvbiBBY291c3RpY3MsCisgKiAgIFNwZWVjaCwgYW5kIFNpZ25hbCBQcm9jZXNzaW5nIDE5ODkgKElDQVNTUCAnODkpLCBwcC4gOTg4LTk5MS4KKyAqIFRoZSBwcmltYXJ5IGFsZ29yaXRobSBkZXNjcmliZWQgdGhlcmUgdXNlcyAxMSBtdWx0aXBsaWVzIGFuZCAyOSBhZGRzLgorICogV2UgdXNlIHRoZWlyIGFsdGVybmF0ZSBtZXRob2Qgd2l0aCAxMiBtdWx0aXBsaWVzIGFuZCAzMiBhZGRzLgorICogVGhlIGFkdmFudGFnZSBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IG5vIGRhdGEgcGF0aCBjb250YWlucyBtb3JlIHRoYW4gb25lCisgKiBtdWx0aXBsaWNhdGlvbjsgdGhpcyBhbGxvd3MgYSB2ZXJ5IHNpbXBsZSBhbmQgYWNjdXJhdGUgaW1wbGVtZW50YXRpb24gaW4KKyAqIHNjYWxlZCBmaXhlZC1wb2ludCBhcml0aG1ldGljLCB3aXRoIGEgbWluaW1hbCBudW1iZXIgb2Ygc2hpZnRzLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqZGN0LmgiCQkvKiBQcml2YXRlIGRlY2xhcmF0aW9ucyBmb3IgRENUIHN1YnN5c3RlbSAqLworCisjaWZkZWYgRENUX0lTTE9XX1NVUFBPUlRFRAorCisKKy8qCisgKiBUaGlzIG1vZHVsZSBpcyBzcGVjaWFsaXplZCB0byB0aGUgY2FzZSBEQ1RTSVpFID0gOC4KKyAqLworCisjaWYgRENUU0laRSAhPSA4CisgIFNvcnJ5LCB0aGlzIGNvZGUgb25seSBjb3BlcyB3aXRoIDh4OCBEQ1RzLiAvKiBkZWxpYmVyYXRlIHN5bnRheCBlcnIgKi8KKyNlbmRpZgorCisKKy8qCisgKiBUaGUgcG9vcCBvbiB0aGlzIHNjYWxpbmcgc3R1ZmYgaXMgYXMgZm9sbG93czoKKyAqCisgKiBFYWNoIDEtRCBEQ1Qgc3RlcCBwcm9kdWNlcyBvdXRwdXRzIHdoaWNoIGFyZSBhIGZhY3RvciBvZiBzcXJ0KE4pCisgKiBsYXJnZXIgdGhhbiB0aGUgdHJ1ZSBEQ1Qgb3V0cHV0cy4gIFRoZSBmaW5hbCBvdXRwdXRzIGFyZSB0aGVyZWZvcmUKKyAqIGEgZmFjdG9yIG9mIE4gbGFyZ2VyIHRoYW4gZGVzaXJlZDsgc2luY2UgTj04IHRoaXMgY2FuIGJlIGN1cmVkIGJ5CisgKiBhIHNpbXBsZSByaWdodCBzaGlmdCBhdCB0aGUgZW5kIG9mIHRoZSBhbGdvcml0aG0uICBUaGUgYWR2YW50YWdlIG9mCisgKiB0aGlzIGFycmFuZ2VtZW50IGlzIHRoYXQgd2Ugc2F2ZSB0d28gbXVsdGlwbGljYXRpb25zIHBlciAxLUQgRENULAorICogYmVjYXVzZSB0aGUgeTAgYW5kIHk0IG91dHB1dHMgbmVlZCBub3QgYmUgZGl2aWRlZCBieSBzcXJ0KE4pLgorICogSW4gdGhlIElKRyBjb2RlLCB0aGlzIGZhY3RvciBvZiA4IGlzIHJlbW92ZWQgYnkgdGhlIHF1YW50aXphdGlvbiBzdGVwCisgKiAoaW4gamNkY3RtZ3IuYyksIE5PVCBpbiB0aGlzIG1vZHVsZS4KKyAqCisgKiBXZSBoYXZlIHRvIGRvIGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiBvZiB0aGUgaW50ZWdlciBpbnB1dHMsIHdoaWNoCisgKiBpcyBubyBwcm9ibGVtLCBhbmQgbXVsdGlwbGljYXRpb24gYnkgZnJhY3Rpb25hbCBjb25zdGFudHMsIHdoaWNoIGlzCisgKiBhIHByb2JsZW0gdG8gZG8gaW4gaW50ZWdlciBhcml0aG1ldGljLiAgV2UgbXVsdGlwbHkgYWxsIHRoZSBjb25zdGFudHMKKyAqIGJ5IENPTlNUX1NDQUxFIGFuZCBjb252ZXJ0IHRoZW0gdG8gaW50ZWdlciBjb25zdGFudHMgKHRodXMgcmV0YWluaW5nCisgKiBDT05TVF9CSVRTIGJpdHMgb2YgcHJlY2lzaW9uIGluIHRoZSBjb25zdGFudHMpLiAgQWZ0ZXIgZG9pbmcgYQorICogbXVsdGlwbGljYXRpb24gd2UgaGF2ZSB0byBkaXZpZGUgdGhlIHByb2R1Y3QgYnkgQ09OU1RfU0NBTEUsIHdpdGggcHJvcGVyCisgKiByb3VuZGluZywgdG8gcHJvZHVjZSB0aGUgY29ycmVjdCBvdXRwdXQuICBUaGlzIGRpdmlzaW9uIGNhbiBiZSBkb25lCisgKiBjaGVhcGx5IGFzIGEgcmlnaHQgc2hpZnQgb2YgQ09OU1RfQklUUyBiaXRzLiAgV2UgcG9zdHBvbmUgc2hpZnRpbmcKKyAqIGFzIGxvbmcgYXMgcG9zc2libGUgc28gdGhhdCBwYXJ0aWFsIHN1bXMgY2FuIGJlIGFkZGVkIHRvZ2V0aGVyIHdpdGgKKyAqIGZ1bGwgZnJhY3Rpb25hbCBwcmVjaXNpb24uCisgKgorICogVGhlIG91dHB1dHMgb2YgdGhlIGZpcnN0IHBhc3MgYXJlIHNjYWxlZCB1cCBieSBQQVNTMV9CSVRTIGJpdHMgc28gdGhhdAorICogdGhleSBhcmUgcmVwcmVzZW50ZWQgdG8gYmV0dGVyLXRoYW4taW50ZWdyYWwgcHJlY2lzaW9uLiAgVGhlc2Ugb3V0cHV0cworICogcmVxdWlyZSBCSVRTX0lOX0pTQU1QTEUgKyBQQVNTMV9CSVRTICsgMyBiaXRzOyB0aGlzIGZpdHMgaW4gYSAxNi1iaXQgd29yZAorICogd2l0aCB0aGUgcmVjb21tZW5kZWQgc2NhbGluZy4gIChGb3IgMTItYml0IHNhbXBsZSBkYXRhLCB0aGUgaW50ZXJtZWRpYXRlCisgKiBhcnJheSBpcyBJTlQzMiBhbnl3YXkuKQorICoKKyAqIFRvIGF2b2lkIG92ZXJmbG93IG9mIHRoZSAzMi1iaXQgaW50ZXJtZWRpYXRlIHJlc3VsdHMgaW4gcGFzcyAyLCB3ZSBtdXN0CisgKiBoYXZlIEJJVFNfSU5fSlNBTVBMRSArIENPTlNUX0JJVFMgKyBQQVNTMV9CSVRTIDw9IDI2LiAgRXJyb3IgYW5hbHlzaXMKKyAqIHNob3dzIHRoYXQgdGhlIHZhbHVlcyBnaXZlbiBiZWxvdyBhcmUgdGhlIG1vc3QgZWZmZWN0aXZlLgorICovCisKKyNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOAorI2RlZmluZSBDT05TVF9CSVRTICAxMworI2RlZmluZSBQQVNTMV9CSVRTICAyCisjZWxzZQorI2RlZmluZSBDT05TVF9CSVRTICAxMworI2RlZmluZSBQQVNTMV9CSVRTICAxCQkvKiBsb3NlIGEgbGl0dGxlIHByZWNpc2lvbiB0byBhdm9pZCBvdmVyZmxvdyAqLworI2VuZGlmCisKKy8qIFNvbWUgQyBjb21waWxlcnMgZmFpbCB0byByZWR1Y2UgIkZJWChjb25zdGFudCkiIGF0IGNvbXBpbGUgdGltZSwgdGh1cworICogY2F1c2luZyBhIGxvdCBvZiB1c2VsZXNzIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgYXQgcnVuIHRpbWUuCisgKiBUbyBnZXQgYXJvdW5kIHRoaXMgd2UgdXNlIHRoZSBmb2xsb3dpbmcgcHJlLWNhbGN1bGF0ZWQgY29uc3RhbnRzLgorICogSWYgeW91IGNoYW5nZSBDT05TVF9CSVRTIHlvdSBtYXkgd2FudCB0byBhZGQgYXBwcm9wcmlhdGUgdmFsdWVzLgorICogKFdpdGggYSByZWFzb25hYmxlIEMgY29tcGlsZXIsIHlvdSBjYW4ganVzdCByZWx5IG9uIHRoZSBGSVgoKSBtYWNyby4uLikKKyAqLworCisjaWYgQ09OU1RfQklUUyA9PSAxMworI2RlZmluZSBGSVhfMF8yOTg2MzEzMzYgICgoSU5UMzIpICAyNDQ2KQkvKiBGSVgoMC4yOTg2MzEzMzYpICovCisjZGVmaW5lIEZJWF8wXzM5MDE4MDY0NCAgKChJTlQzMikgIDMxOTYpCS8qIEZJWCgwLjM5MDE4MDY0NCkgKi8KKyNkZWZpbmUgRklYXzBfNTQxMTk2MTAwICAoKElOVDMyKSAgNDQzMykJLyogRklYKDAuNTQxMTk2MTAwKSAqLworI2RlZmluZSBGSVhfMF83NjUzNjY4NjUgICgoSU5UMzIpICA2MjcwKQkvKiBGSVgoMC43NjUzNjY4NjUpICovCisjZGVmaW5lIEZJWF8wXzg5OTk3NjIyMyAgKChJTlQzMikgIDczNzMpCS8qIEZJWCgwLjg5OTk3NjIyMykgKi8KKyNkZWZpbmUgRklYXzFfMTc1ODc1NjAyICAoKElOVDMyKSAgOTYzMykJLyogRklYKDEuMTc1ODc1NjAyKSAqLworI2RlZmluZSBGSVhfMV81MDEzMjExMTAgICgoSU5UMzIpICAxMjI5OSkJLyogRklYKDEuNTAxMzIxMTEwKSAqLworI2RlZmluZSBGSVhfMV84NDc3NTkwNjUgICgoSU5UMzIpICAxNTEzNykJLyogRklYKDEuODQ3NzU5MDY1KSAqLworI2RlZmluZSBGSVhfMV85NjE1NzA1NjAgICgoSU5UMzIpICAxNjA2OSkJLyogRklYKDEuOTYxNTcwNTYwKSAqLworI2RlZmluZSBGSVhfMl8wNTMxMTk4NjkgICgoSU5UMzIpICAxNjgxOSkJLyogRklYKDIuMDUzMTE5ODY5KSAqLworI2RlZmluZSBGSVhfMl81NjI5MTU0NDcgICgoSU5UMzIpICAyMDk5NSkJLyogRklYKDIuNTYyOTE1NDQ3KSAqLworI2RlZmluZSBGSVhfM18wNzI3MTEwMjYgICgoSU5UMzIpICAyNTE3MikJLyogRklYKDMuMDcyNzExMDI2KSAqLworI2Vsc2UKKyNkZWZpbmUgRklYXzBfMjk4NjMxMzM2ICBGSVgoMC4yOTg2MzEzMzYpCisjZGVmaW5lIEZJWF8wXzM5MDE4MDY0NCAgRklYKDAuMzkwMTgwNjQ0KQorI2RlZmluZSBGSVhfMF81NDExOTYxMDAgIEZJWCgwLjU0MTE5NjEwMCkKKyNkZWZpbmUgRklYXzBfNzY1MzY2ODY1ICBGSVgoMC43NjUzNjY4NjUpCisjZGVmaW5lIEZJWF8wXzg5OTk3NjIyMyAgRklYKDAuODk5OTc2MjIzKQorI2RlZmluZSBGSVhfMV8xNzU4NzU2MDIgIEZJWCgxLjE3NTg3NTYwMikKKyNkZWZpbmUgRklYXzFfNTAxMzIxMTEwICBGSVgoMS41MDEzMjExMTApCisjZGVmaW5lIEZJWF8xXzg0Nzc1OTA2NSAgRklYKDEuODQ3NzU5MDY1KQorI2RlZmluZSBGSVhfMV85NjE1NzA1NjAgIEZJWCgxLjk2MTU3MDU2MCkKKyNkZWZpbmUgRklYXzJfMDUzMTE5ODY5ICBGSVgoMi4wNTMxMTk4NjkpCisjZGVmaW5lIEZJWF8yXzU2MjkxNTQ0NyAgRklYKDIuNTYyOTE1NDQ3KQorI2RlZmluZSBGSVhfM18wNzI3MTEwMjYgIEZJWCgzLjA3MjcxMTAyNikKKyNlbmRpZgorCisKKy8qIE11bHRpcGx5IGFuIElOVDMyIHZhcmlhYmxlIGJ5IGFuIElOVDMyIGNvbnN0YW50IHRvIHlpZWxkIGFuIElOVDMyIHJlc3VsdC4KKyAqIEZvciA4LWJpdCBzYW1wbGVzIHdpdGggdGhlIHJlY29tbWVuZGVkIHNjYWxpbmcsIGFsbCB0aGUgdmFyaWFibGUKKyAqIGFuZCBjb25zdGFudCB2YWx1ZXMgaW52b2x2ZWQgYXJlIG5vIG1vcmUgdGhhbiAxNiBiaXRzIHdpZGUsIHNvIGEKKyAqIDE2eDE2LT4zMiBiaXQgbXVsdGlwbHkgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBhIGZ1bGwgMzJ4MzIgbXVsdGlwbHkuCisgKiBGb3IgMTItYml0IHNhbXBsZXMsIGEgZnVsbCAzMi1iaXQgbXVsdGlwbGljYXRpb24gd2lsbCBiZSBuZWVkZWQuCisgKi8KKworI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4CisjZGVmaW5lIE1VTFRJUExZKHZhcixjb25zdCkgIE1VTFRJUExZMTZDMTYodmFyLGNvbnN0KQorI2Vsc2UKKyNkZWZpbmUgTVVMVElQTFkodmFyLGNvbnN0KSAgKCh2YXIpICogKGNvbnN0KSkKKyNlbmRpZgorCisKKy8qCisgKiBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBvbmUgYmxvY2sgb2Ygc2FtcGxlcy4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfZmRjdF9pc2xvdyAoRENURUxFTSAqIGRhdGEpCit7CisgIElOVDMyIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQsIHRtcDUsIHRtcDYsIHRtcDc7CisgIElOVDMyIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzOworICBJTlQzMiB6MSwgejIsIHozLCB6NCwgejU7CisgIERDVEVMRU0gKmRhdGFwdHI7CisgIGludCBjdHI7CisgIFNISUZUX1RFTVBTCisKKyAgLyogUGFzcyAxOiBwcm9jZXNzIHJvd3MuICovCisgIC8qIE5vdGUgcmVzdWx0cyBhcmUgc2NhbGVkIHVwIGJ5IHNxcnQoOCkgY29tcGFyZWQgdG8gYSB0cnVlIERDVDsgKi8KKyAgLyogZnVydGhlcm1vcmUsIHdlIHNjYWxlIHRoZSByZXN1bHRzIGJ5IDIqKlBBU1MxX0JJVFMuICovCisKKyAgZGF0YXB0ciA9IGRhdGE7CisgIGZvciAoY3RyID0gRENUU0laRS0xOyBjdHIgPj0gMDsgY3RyLS0pIHsKKyAgICB0bXAwID0gZGF0YXB0clswXSArIGRhdGFwdHJbN107CisgICAgdG1wNyA9IGRhdGFwdHJbMF0gLSBkYXRhcHRyWzddOworICAgIHRtcDEgPSBkYXRhcHRyWzFdICsgZGF0YXB0cls2XTsKKyAgICB0bXA2ID0gZGF0YXB0clsxXSAtIGRhdGFwdHJbNl07CisgICAgdG1wMiA9IGRhdGFwdHJbMl0gKyBkYXRhcHRyWzVdOworICAgIHRtcDUgPSBkYXRhcHRyWzJdIC0gZGF0YXB0cls1XTsKKyAgICB0bXAzID0gZGF0YXB0clszXSArIGRhdGFwdHJbNF07CisgICAgdG1wNCA9IGRhdGFwdHJbM10gLSBkYXRhcHRyWzRdOworICAgIAorICAgIC8qIEV2ZW4gcGFydCBwZXIgTEwmTSBmaWd1cmUgMSAtLS0gbm90ZSB0aGF0IHB1Ymxpc2hlZCBmaWd1cmUgaXMgZmF1bHR5OworICAgICAqIHJvdGF0b3IgInNxcnQoMikqYzEiIHNob3VsZCBiZSAic3FydCgyKSpjNiIuCisgICAgICovCisgICAgCisgICAgdG1wMTAgPSB0bXAwICsgdG1wMzsKKyAgICB0bXAxMyA9IHRtcDAgLSB0bXAzOworICAgIHRtcDExID0gdG1wMSArIHRtcDI7CisgICAgdG1wMTIgPSB0bXAxIC0gdG1wMjsKKyAgICAKKyAgICBkYXRhcHRyWzBdID0gKERDVEVMRU0pICgodG1wMTAgKyB0bXAxMSkgPDwgUEFTUzFfQklUUyk7CisgICAgZGF0YXB0cls0XSA9IChEQ1RFTEVNKSAoKHRtcDEwIC0gdG1wMTEpIDw8IFBBU1MxX0JJVFMpOworICAgIAorICAgIHoxID0gTVVMVElQTFkodG1wMTIgKyB0bXAxMywgRklYXzBfNTQxMTk2MTAwKTsKKyAgICBkYXRhcHRyWzJdID0gKERDVEVMRU0pIERFU0NBTEUoejEgKyBNVUxUSVBMWSh0bXAxMywgRklYXzBfNzY1MzY2ODY1KSwKKwkJCQkgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIGRhdGFwdHJbNl0gPSAoRENURUxFTSkgREVTQ0FMRSh6MSArIE1VTFRJUExZKHRtcDEyLCAtIEZJWF8xXzg0Nzc1OTA2NSksCisJCQkJICAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICAKKyAgICAvKiBPZGQgcGFydCBwZXIgZmlndXJlIDggLS0tIG5vdGUgcGFwZXIgb21pdHMgZmFjdG9yIG9mIHNxcnQoMikuCisgICAgICogY0sgcmVwcmVzZW50cyBjb3MoSypwaS8xNikuCisgICAgICogaTAuLmkzIGluIHRoZSBwYXBlciBhcmUgdG1wNC4udG1wNyBoZXJlLgorICAgICAqLworICAgIAorICAgIHoxID0gdG1wNCArIHRtcDc7CisgICAgejIgPSB0bXA1ICsgdG1wNjsKKyAgICB6MyA9IHRtcDQgKyB0bXA2OworICAgIHo0ID0gdG1wNSArIHRtcDc7CisgICAgejUgPSBNVUxUSVBMWSh6MyArIHo0LCBGSVhfMV8xNzU4NzU2MDIpOyAvKiBzcXJ0KDIpICogYzMgKi8KKyAgICAKKyAgICB0bXA0ID0gTVVMVElQTFkodG1wNCwgRklYXzBfMjk4NjMxMzM2KTsgLyogc3FydCgyKSAqICgtYzErYzMrYzUtYzcpICovCisgICAgdG1wNSA9IE1VTFRJUExZKHRtcDUsIEZJWF8yXzA1MzExOTg2OSk7IC8qIHNxcnQoMikgKiAoIGMxK2MzLWM1K2M3KSAqLworICAgIHRtcDYgPSBNVUxUSVBMWSh0bXA2LCBGSVhfM18wNzI3MTEwMjYpOyAvKiBzcXJ0KDIpICogKCBjMStjMytjNS1jNykgKi8KKyAgICB0bXA3ID0gTVVMVElQTFkodG1wNywgRklYXzFfNTAxMzIxMTEwKTsgLyogc3FydCgyKSAqICggYzErYzMtYzUtYzcpICovCisgICAgejEgPSBNVUxUSVBMWSh6MSwgLSBGSVhfMF84OTk5NzYyMjMpOyAvKiBzcXJ0KDIpICogKGM3LWMzKSAqLworICAgIHoyID0gTVVMVElQTFkoejIsIC0gRklYXzJfNTYyOTE1NDQ3KTsgLyogc3FydCgyKSAqICgtYzEtYzMpICovCisgICAgejMgPSBNVUxUSVBMWSh6MywgLSBGSVhfMV85NjE1NzA1NjApOyAvKiBzcXJ0KDIpICogKC1jMy1jNSkgKi8KKyAgICB6NCA9IE1VTFRJUExZKHo0LCAtIEZJWF8wXzM5MDE4MDY0NCk7IC8qIHNxcnQoMikgKiAoYzUtYzMpICovCisgICAgCisgICAgejMgKz0gejU7CisgICAgejQgKz0gejU7CisgICAgCisgICAgZGF0YXB0cls3XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDQgKyB6MSArIHozLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIGRhdGFwdHJbNV0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXA1ICsgejIgKyB6NCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICBkYXRhcHRyWzNdID0gKERDVEVMRU0pIERFU0NBTEUodG1wNiArIHoyICsgejMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgZGF0YXB0clsxXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDcgKyB6MSArIHo0LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIAorICAgIGRhdGFwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLworICB9CisKKyAgLyogUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCisgICAqIFdlIHJlbW92ZSB0aGUgUEFTUzFfQklUUyBzY2FsaW5nLCBidXQgbGVhdmUgdGhlIHJlc3VsdHMgc2NhbGVkIHVwCisgICAqIGJ5IGFuIG92ZXJhbGwgZmFjdG9yIG9mIDguCisgICAqLworCisgIGRhdGFwdHIgPSBkYXRhOworICBmb3IgKGN0ciA9IERDVFNJWkUtMTsgY3RyID49IDA7IGN0ci0tKSB7CisgICAgdG1wMCA9IGRhdGFwdHJbRENUU0laRSowXSArIGRhdGFwdHJbRENUU0laRSo3XTsKKyAgICB0bXA3ID0gZGF0YXB0cltEQ1RTSVpFKjBdIC0gZGF0YXB0cltEQ1RTSVpFKjddOworICAgIHRtcDEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gKyBkYXRhcHRyW0RDVFNJWkUqNl07CisgICAgdG1wNiA9IGRhdGFwdHJbRENUU0laRSoxXSAtIGRhdGFwdHJbRENUU0laRSo2XTsKKyAgICB0bXAyID0gZGF0YXB0cltEQ1RTSVpFKjJdICsgZGF0YXB0cltEQ1RTSVpFKjVdOworICAgIHRtcDUgPSBkYXRhcHRyW0RDVFNJWkUqMl0gLSBkYXRhcHRyW0RDVFNJWkUqNV07CisgICAgdG1wMyA9IGRhdGFwdHJbRENUU0laRSozXSArIGRhdGFwdHJbRENUU0laRSo0XTsKKyAgICB0bXA0ID0gZGF0YXB0cltEQ1RTSVpFKjNdIC0gZGF0YXB0cltEQ1RTSVpFKjRdOworICAgIAorICAgIC8qIEV2ZW4gcGFydCBwZXIgTEwmTSBmaWd1cmUgMSAtLS0gbm90ZSB0aGF0IHB1Ymxpc2hlZCBmaWd1cmUgaXMgZmF1bHR5OworICAgICAqIHJvdGF0b3IgInNxcnQoMikqYzEiIHNob3VsZCBiZSAic3FydCgyKSpjNiIuCisgICAgICovCisgICAgCisgICAgdG1wMTAgPSB0bXAwICsgdG1wMzsKKyAgICB0bXAxMyA9IHRtcDAgLSB0bXAzOworICAgIHRtcDExID0gdG1wMSArIHRtcDI7CisgICAgdG1wMTIgPSB0bXAxIC0gdG1wMjsKKyAgICAKKyAgICBkYXRhcHRyW0RDVFNJWkUqMF0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxMCArIHRtcDExLCBQQVNTMV9CSVRTKTsKKyAgICBkYXRhcHRyW0RDVFNJWkUqNF0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxMCAtIHRtcDExLCBQQVNTMV9CSVRTKTsKKyAgICAKKyAgICB6MSA9IE1VTFRJUExZKHRtcDEyICsgdG1wMTMsIEZJWF8wXzU0MTE5NjEwMCk7CisgICAgZGF0YXB0cltEQ1RTSVpFKjJdID0gKERDVEVMRU0pIERFU0NBTEUoejEgKyBNVUxUSVBMWSh0bXAxMywgRklYXzBfNzY1MzY2ODY1KSwKKwkJCQkJICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKKyAgICBkYXRhcHRyW0RDVFNJWkUqNl0gPSAoRENURUxFTSkgREVTQ0FMRSh6MSArIE1VTFRJUExZKHRtcDEyLCAtIEZJWF8xXzg0Nzc1OTA2NSksCisJCQkJCSAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7CisgICAgCisgICAgLyogT2RkIHBhcnQgcGVyIGZpZ3VyZSA4IC0tLSBub3RlIHBhcGVyIG9taXRzIGZhY3RvciBvZiBzcXJ0KDIpLgorICAgICAqIGNLIHJlcHJlc2VudHMgY29zKEsqcGkvMTYpLgorICAgICAqIGkwLi5pMyBpbiB0aGUgcGFwZXIgYXJlIHRtcDQuLnRtcDcgaGVyZS4KKyAgICAgKi8KKyAgICAKKyAgICB6MSA9IHRtcDQgKyB0bXA3OworICAgIHoyID0gdG1wNSArIHRtcDY7CisgICAgejMgPSB0bXA0ICsgdG1wNjsKKyAgICB6NCA9IHRtcDUgKyB0bXA3OworICAgIHo1ID0gTVVMVElQTFkoejMgKyB6NCwgRklYXzFfMTc1ODc1NjAyKTsgLyogc3FydCgyKSAqIGMzICovCisgICAgCisgICAgdG1wNCA9IE1VTFRJUExZKHRtcDQsIEZJWF8wXzI5ODYzMTMzNik7IC8qIHNxcnQoMikgKiAoLWMxK2MzK2M1LWM3KSAqLworICAgIHRtcDUgPSBNVUxUSVBMWSh0bXA1LCBGSVhfMl8wNTMxMTk4NjkpOyAvKiBzcXJ0KDIpICogKCBjMStjMy1jNStjNykgKi8KKyAgICB0bXA2ID0gTVVMVElQTFkodG1wNiwgRklYXzNfMDcyNzExMDI2KTsgLyogc3FydCgyKSAqICggYzErYzMrYzUtYzcpICovCisgICAgdG1wNyA9IE1VTFRJUExZKHRtcDcsIEZJWF8xXzUwMTMyMTExMCk7IC8qIHNxcnQoMikgKiAoIGMxK2MzLWM1LWM3KSAqLworICAgIHoxID0gTVVMVElQTFkoejEsIC0gRklYXzBfODk5OTc2MjIzKTsgLyogc3FydCgyKSAqIChjNy1jMykgKi8KKyAgICB6MiA9IE1VTFRJUExZKHoyLCAtIEZJWF8yXzU2MjkxNTQ0Nyk7IC8qIHNxcnQoMikgKiAoLWMxLWMzKSAqLworICAgIHozID0gTVVMVElQTFkoejMsIC0gRklYXzFfOTYxNTcwNTYwKTsgLyogc3FydCgyKSAqICgtYzMtYzUpICovCisgICAgejQgPSBNVUxUSVBMWSh6NCwgLSBGSVhfMF8zOTAxODA2NDQpOyAvKiBzcXJ0KDIpICogKGM1LWMzKSAqLworICAgIAorICAgIHozICs9IHo1OworICAgIHo0ICs9IHo1OworICAgIAorICAgIGRhdGFwdHJbRENUU0laRSo3XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDQgKyB6MSArIHozLAorCQkJCQkgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOworICAgIGRhdGFwdHJbRENUU0laRSo1XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDUgKyB6MiArIHo0LAorCQkJCQkgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOworICAgIGRhdGFwdHJbRENUU0laRSozXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDYgKyB6MiArIHozLAorCQkJCQkgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOworICAgIGRhdGFwdHJbRENUU0laRSoxXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDcgKyB6MSArIHo0LAorCQkJCQkgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOworICAgIAorICAgIGRhdGFwdHIrKzsJCQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCBjb2x1bW4gKi8KKyAgfQorfQorCisjZW5kaWYgLyogRENUX0lTTE9XX1NVUFBPUlRFRCAqLworCisjZW5kaWYgLy9fRlhfSlBFR19UVVJCT18KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2ppZGN0ZnN0LmMgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qaWRjdGZzdC5jCmluZGV4IGMwYzUwNGMuLjI2YThmNjggMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2ppZGN0ZnN0LmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamlkY3Rmc3QuYwpAQCAtMSwzNzEgKzEsMzcxIEBACi0jaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQ0KLS8qDQotICogamlkY3Rmc3QuYw0KLSAqDQotICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTgsIFRob21hcyBHLiBMYW5lLg0KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuDQotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLg0KLSAqDQotICogVGhpcyBmaWxlIGNvbnRhaW5zIGEgZmFzdCwgbm90IHNvIGFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YgdGhlDQotICogaW52ZXJzZSBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiAgSW4gdGhlIElKRyBjb2RlLCB0aGlzIHJvdXRpbmUNCi0gKiBtdXN0IGFsc28gcGVyZm9ybSBkZXF1YW50aXphdGlvbiBvZiB0aGUgaW5wdXQgY29lZmZpY2llbnRzLg0KLSAqDQotICogQSAyLUQgSURDVCBjYW4gYmUgZG9uZSBieSAxLUQgSURDVCBvbiBlYWNoIGNvbHVtbiBmb2xsb3dlZCBieSAxLUQgSURDVA0KLSAqIG9uIGVhY2ggcm93IChvciB2aWNlIHZlcnNhLCBidXQgaXQncyBtb3JlIGNvbnZlbmllbnQgdG8gZW1pdCBhIHJvdyBhdA0KLSAqIGEgdGltZSkuICBEaXJlY3QgYWxnb3JpdGhtcyBhcmUgYWxzbyBhdmFpbGFibGUsIGJ1dCB0aGV5IGFyZSBtdWNoIG1vcmUNCi0gKiBjb21wbGV4IGFuZCBzZWVtIG5vdCB0byBiZSBhbnkgZmFzdGVyIHdoZW4gcmVkdWNlZCB0byBjb2RlLg0KLSAqDQotICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBBcmFpLCBBZ3VpLCBhbmQgTmFrYWppbWEncyBhbGdvcml0aG0gZm9yDQotICogc2NhbGVkIERDVC4gIFRoZWlyIG9yaWdpbmFsIHBhcGVyIChUcmFucy4gSUVJQ0UgRS03MSgxMSk6MTA5NSkgaXMgaW4NCi0gKiBKYXBhbmVzZSwgYnV0IHRoZSBhbGdvcml0aG0gaXMgZGVzY3JpYmVkIGluIHRoZSBQZW5uZWJha2VyICYgTWl0Y2hlbGwNCi0gKiBKUEVHIHRleHRib29rIChzZWUgUkVGRVJFTkNFUyBzZWN0aW9uIGluIGZpbGUgUkVBRE1FKS4gIFRoZSBmb2xsb3dpbmcgY29kZQ0KLSAqIGlzIGJhc2VkIGRpcmVjdGx5IG9uIGZpZ3VyZSA0LTggaW4gUCZNLg0KLSAqIFdoaWxlIGFuIDgtcG9pbnQgRENUIGNhbm5vdCBiZSBkb25lIGluIGxlc3MgdGhhbiAxMSBtdWx0aXBsaWVzLCBpdCBpcw0KLSAqIHBvc3NpYmxlIHRvIGFycmFuZ2UgdGhlIGNvbXB1dGF0aW9uIHNvIHRoYXQgbWFueSBvZiB0aGUgbXVsdGlwbGllcyBhcmUNCi0gKiBzaW1wbGUgc2NhbGluZ3Mgb2YgdGhlIGZpbmFsIG91dHB1dHMuICBUaGVzZSBtdWx0aXBsaWVzIGNhbiB0aGVuIGJlDQotICogZm9sZGVkIGludG8gdGhlIG11bHRpcGxpY2F0aW9ucyBvciBkaXZpc2lvbnMgYnkgdGhlIEpQRUcgcXVhbnRpemF0aW9uDQotICogdGFibGUgZW50cmllcy4gIFRoZSBBQSZOIG1ldGhvZCBsZWF2ZXMgb25seSA1IG11bHRpcGxpZXMgYW5kIDI5IGFkZHMNCi0gKiB0byBiZSBkb25lIGluIHRoZSBEQ1QgaXRzZWxmLg0KLSAqIFRoZSBwcmltYXJ5IGRpc2FkdmFudGFnZSBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IHdpdGggZml4ZWQtcG9pbnQgbWF0aCwNCi0gKiBhY2N1cmFjeSBpcyBsb3N0IGR1ZSB0byBpbXByZWNpc2UgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNjYWxlZA0KLSAqIHF1YW50aXphdGlvbiB2YWx1ZXMuICBUaGUgc21hbGxlciB0aGUgcXVhbnRpemF0aW9uIHRhYmxlIGVudHJ5LCB0aGUgbGVzcw0KLSAqIHByZWNpc2UgdGhlIHNjYWxlZCB2YWx1ZSwgc28gdGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIHdvcnNlIHdpdGggaGlnaC0NCi0gKiBxdWFsaXR5LXNldHRpbmcgZmlsZXMgdGhhbiB3aXRoIGxvdy1xdWFsaXR5IG9uZXMuDQotICovDQotDQotI2RlZmluZSBKUEVHX0lOVEVSTkFMUw0KLSNpbmNsdWRlICJqaW5jbHVkZS5oIg0KLSNpbmNsdWRlICJqcGVnbGliLmgiDQotI2luY2x1ZGUgImpkY3QuaCIJCS8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovDQotDQotI2lmZGVmIERDVF9JRkFTVF9TVVBQT1JURUQNCi0NCi0NCi0vKg0KLSAqIFRoaXMgbW9kdWxlIGlzIHNwZWNpYWxpemVkIHRvIHRoZSBjYXNlIERDVFNJWkUgPSA4Lg0KLSAqLw0KLQ0KLSNpZiBEQ1RTSVpFICE9IDgNCi0gIFNvcnJ5LCB0aGlzIGNvZGUgb25seSBjb3BlcyB3aXRoIDh4OCBEQ1RzLiAvKiBkZWxpYmVyYXRlIHN5bnRheCBlcnIgKi8NCi0jZW5kaWYNCi0NCi0NCi0vKiBTY2FsaW5nIGRlY2lzaW9ucyBhcmUgZ2VuZXJhbGx5IHRoZSBzYW1lIGFzIGluIHRoZSBMTCZNIGFsZ29yaXRobTsNCi0gKiBzZWUgamlkY3RpbnQuYyBmb3IgbW9yZSBkZXRhaWxzLiAgSG93ZXZlciwgd2UgY2hvb3NlIHRvIGRlc2NhbGUNCi0gKiAocmlnaHQgc2hpZnQpIG11bHRpcGxpY2F0aW9uIHByb2R1Y3RzIGFzIHNvb24gYXMgdGhleSBhcmUgZm9ybWVkLA0KLSAqIHJhdGhlciB0aGFuIGNhcnJ5aW5nIGFkZGl0aW9uYWwgZnJhY3Rpb25hbCBiaXRzIGludG8gc3Vic2VxdWVudCBhZGRpdGlvbnMuDQotICogVGhpcyBjb21wcm9taXNlcyBhY2N1cmFjeSBzbGlnaHRseSwgYnV0IGl0IGxldHMgdXMgc2F2ZSBhIGZldyBzaGlmdHMuDQotICogTW9yZSBpbXBvcnRhbnRseSwgMTYtYml0IGFyaXRobWV0aWMgaXMgdGhlbiBhZGVxdWF0ZSAoZm9yIDgtYml0IHNhbXBsZXMpDQotICogZXZlcnl3aGVyZSBleGNlcHQgaW4gdGhlIG11bHRpcGxpY2F0aW9ucyBwcm9wZXI7IHRoaXMgc2F2ZXMgYSBnb29kIGRlYWwNCi0gKiBvZiB3b3JrIG9uIDE2LWJpdC1pbnQgbWFjaGluZXMuDQotICoNCi0gKiBUaGUgZGVxdWFudGl6ZWQgY29lZmZpY2llbnRzIGFyZSBub3QgaW50ZWdlcnMgYmVjYXVzZSB0aGUgQUEmTiBzY2FsaW5nDQotICogZmFjdG9ycyBoYXZlIGJlZW4gaW5jb3Jwb3JhdGVkLiAgV2UgcmVwcmVzZW50IHRoZW0gc2NhbGVkIHVwIGJ5IFBBU1MxX0JJVFMsDQotICogc28gdGhhdCB0aGUgZmlyc3QgYW5kIHNlY29uZCBJRENUIHJvdW5kcyBoYXZlIHRoZSBzYW1lIGlucHV0IHNjYWxpbmcuDQotICogRm9yIDgtYml0IEpTQU1QTEVzLCB3ZSBjaG9vc2UgSUZBU1RfU0NBTEVfQklUUyA9IFBBU1MxX0JJVFMgc28gYXMgdG8NCi0gKiBhdm9pZCBhIGRlc2NhbGluZyBzaGlmdDsgdGhpcyBjb21wcm9taXNlcyBhY2N1cmFjeSByYXRoZXIgZHJhc3RpY2FsbHkNCi0gKiBmb3Igc21hbGwgcXVhbnRpemF0aW9uIHRhYmxlIGVudHJpZXMsIGJ1dCBpdCBzYXZlcyBhIGxvdCBvZiBzaGlmdHMuDQotICogRm9yIDEyLWJpdCBKU0FNUExFcywgdGhlcmUncyBubyBob3BlIG9mIHVzaW5nIDE2eDE2IG11bHRpcGxpZXMgYW55d2F5LA0KLSAqIHNvIHdlIHVzZSBhIG11Y2ggbGFyZ2VyIHNjYWxpbmcgZmFjdG9yIHRvIHByZXNlcnZlIGFjY3VyYWN5Lg0KLSAqDQotICogQSBmaW5hbCBjb21wcm9taXNlIGlzIHRvIHJlcHJlc2VudCB0aGUgbXVsdGlwbGljYXRpdmUgY29uc3RhbnRzIHRvIG9ubHkNCi0gKiA4IGZyYWN0aW9uYWwgYml0cywgcmF0aGVyIHRoYW4gMTMuICBUaGlzIHNhdmVzIHNvbWUgc2hpZnRpbmcgd29yayBvbiBzb21lDQotICogbWFjaGluZXMsIGFuZCBtYXkgYWxzbyByZWR1Y2UgdGhlIGNvc3Qgb2YgbXVsdGlwbGljYXRpb24gKHNpbmNlIHRoZXJlDQotICogYXJlIGZld2VyIG9uZS1iaXRzIGluIHRoZSBjb25zdGFudHMpLg0KLSAqLw0KLQ0KLSNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOA0KLSNkZWZpbmUgQ09OU1RfQklUUyAgOA0KLSNkZWZpbmUgUEFTUzFfQklUUyAgMg0KLSNlbHNlDQotI2RlZmluZSBDT05TVF9CSVRTICA4DQotI2RlZmluZSBQQVNTMV9CSVRTICAxCQkvKiBsb3NlIGEgbGl0dGxlIHByZWNpc2lvbiB0byBhdm9pZCBvdmVyZmxvdyAqLw0KLSNlbmRpZg0KLQ0KLS8qIFNvbWUgQyBjb21waWxlcnMgZmFpbCB0byByZWR1Y2UgIkZJWChjb25zdGFudCkiIGF0IGNvbXBpbGUgdGltZSwgdGh1cw0KLSAqIGNhdXNpbmcgYSBsb3Qgb2YgdXNlbGVzcyBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIGF0IHJ1biB0aW1lLg0KLSAqIFRvIGdldCBhcm91bmQgdGhpcyB3ZSB1c2UgdGhlIGZvbGxvd2luZyBwcmUtY2FsY3VsYXRlZCBjb25zdGFudHMuDQotICogSWYgeW91IGNoYW5nZSBDT05TVF9CSVRTIHlvdSBtYXkgd2FudCB0byBhZGQgYXBwcm9wcmlhdGUgdmFsdWVzLg0KLSAqIChXaXRoIGEgcmVhc29uYWJsZSBDIGNvbXBpbGVyLCB5b3UgY2FuIGp1c3QgcmVseSBvbiB0aGUgRklYKCkgbWFjcm8uLi4pDQotICovDQotDQotI2lmIENPTlNUX0JJVFMgPT0gOA0KLSNkZWZpbmUgRklYXzFfMDgyMzkyMjAwICAoKElOVDMyKSAgMjc3KQkJLyogRklYKDEuMDgyMzkyMjAwKSAqLw0KLSNkZWZpbmUgRklYXzFfNDE0MjEzNTYyICAoKElOVDMyKSAgMzYyKQkJLyogRklYKDEuNDE0MjEzNTYyKSAqLw0KLSNkZWZpbmUgRklYXzFfODQ3NzU5MDY1ICAoKElOVDMyKSAgNDczKQkJLyogRklYKDEuODQ3NzU5MDY1KSAqLw0KLSNkZWZpbmUgRklYXzJfNjEzMTI1OTMwICAoKElOVDMyKSAgNjY5KQkJLyogRklYKDIuNjEzMTI1OTMwKSAqLw0KLSNlbHNlDQotI2RlZmluZSBGSVhfMV8wODIzOTIyMDAgIEZJWCgxLjA4MjM5MjIwMCkNCi0jZGVmaW5lIEZJWF8xXzQxNDIxMzU2MiAgRklYKDEuNDE0MjEzNTYyKQ0KLSNkZWZpbmUgRklYXzFfODQ3NzU5MDY1ICBGSVgoMS44NDc3NTkwNjUpDQotI2RlZmluZSBGSVhfMl82MTMxMjU5MzAgIEZJWCgyLjYxMzEyNTkzMCkNCi0jZW5kaWYNCi0NCi0NCi0vKiBXZSBjYW4gZ2FpbiBhIGxpdHRsZSBtb3JlIHNwZWVkLCB3aXRoIGEgZnVydGhlciBjb21wcm9taXNlIGluIGFjY3VyYWN5LA0KLSAqIGJ5IG9taXR0aW5nIHRoZSBhZGRpdGlvbiBpbiBhIGRlc2NhbGluZyBzaGlmdC4gIFRoaXMgeWllbGRzIGFuIGluY29ycmVjdGx5DQotICogcm91bmRlZCByZXN1bHQgaGFsZiB0aGUgdGltZS4uLg0KLSAqLw0KLQ0KLSNpZm5kZWYgVVNFX0FDQ1VSQVRFX1JPVU5ESU5HDQotI3VuZGVmIERFU0NBTEUNCi0jZGVmaW5lIERFU0NBTEUoeCxuKSAgUklHSFRfU0hJRlQoeCwgbikNCi0jZW5kaWYNCi0NCi0NCi0vKiBNdWx0aXBseSBhIERDVEVMRU0gdmFyaWFibGUgYnkgYW4gSU5UMzIgY29uc3RhbnQsIGFuZCBpbW1lZGlhdGVseQ0KLSAqIGRlc2NhbGUgdG8geWllbGQgYSBEQ1RFTEVNIHJlc3VsdC4NCi0gKi8NCi0NCi0jZGVmaW5lIE1VTFRJUExZKHZhcixjb25zdCkgICgoRENURUxFTSkgREVTQ0FMRSgodmFyKSAqIChjb25zdCksIENPTlNUX0JJVFMpKQ0KLQ0KLQ0KLS8qIERlcXVhbnRpemUgYSBjb2VmZmljaWVudCBieSBtdWx0aXBseWluZyBpdCBieSB0aGUgbXVsdGlwbGllci10YWJsZQ0KLSAqIGVudHJ5OyBwcm9kdWNlIGEgRENURUxFTSByZXN1bHQuICBGb3IgOC1iaXQgZGF0YSBhIDE2eDE2LT4xNg0KLSAqIG11bHRpcGxpY2F0aW9uIHdpbGwgZG8uICBGb3IgMTItYml0IGRhdGEsIHRoZSBtdWx0aXBsaWVyIHRhYmxlIGlzDQotICogZGVjbGFyZWQgSU5UMzIsIHNvIGEgMzItYml0IG11bHRpcGx5IHdpbGwgYmUgdXNlZC4NCi0gKi8NCi0NCi0jaWYgQklUU19JTl9KU0FNUExFID09IDgNCi0jZGVmaW5lIERFUVVBTlRJWkUoY29lZixxdWFudHZhbCkgICgoKElGQVNUX01VTFRfVFlQRSkgKGNvZWYpKSAqIChxdWFudHZhbCkpDQotI2Vsc2UNCi0jZGVmaW5lIERFUVVBTlRJWkUoY29lZixxdWFudHZhbCkgIFwNCi0JREVTQ0FMRSgoY29lZikqKHF1YW50dmFsKSwgSUZBU1RfU0NBTEVfQklUUy1QQVNTMV9CSVRTKQ0KLSNlbmRpZg0KLQ0KLQ0KLS8qIExpa2UgREVTQ0FMRSwgYnV0IGFwcGxpZXMgdG8gYSBEQ1RFTEVNIGFuZCBwcm9kdWNlcyBhbiBpbnQuDQotICogV2UgYXNzdW1lIHRoYXQgaW50IHJpZ2h0IHNoaWZ0IGlzIHVuc2lnbmVkIGlmIElOVDMyIHJpZ2h0IHNoaWZ0IGlzLg0KLSAqLw0KLQ0KLSNpZmRlZiBSSUdIVF9TSElGVF9JU19VTlNJR05FRA0KLSNkZWZpbmUgSVNISUZUX1RFTVBTCURDVEVMRU0gaXNoaWZ0X3RlbXA7DQotI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4DQotI2RlZmluZSBEQ1RFTEVNQklUUyAgMTYJCS8qIERDVEVMRU0gbWF5IGJlIDE2IG9yIDMyIGJpdHMgKi8NCi0jZWxzZQ0KLSNkZWZpbmUgRENURUxFTUJJVFMgIDMyCQkvKiBEQ1RFTEVNIG11c3QgYmUgMzIgYml0cyAqLw0KLSNlbmRpZg0KLSNkZWZpbmUgSVJJR0hUX1NISUZUKHgsc2hmdCkgIFwNCi0gICAgKChpc2hpZnRfdGVtcCA9ICh4KSkgPCAwID8gXA0KLSAgICAgKGlzaGlmdF90ZW1wID4+IChzaGZ0KSkgfCAoKH4oKERDVEVMRU0pIDApKSA8PCAoRENURUxFTUJJVFMtKHNoZnQpKSkgOiBcDQotICAgICAoaXNoaWZ0X3RlbXAgPj4gKHNoZnQpKSkNCi0jZWxzZQ0KLSNkZWZpbmUgSVNISUZUX1RFTVBTDQotI2RlZmluZSBJUklHSFRfU0hJRlQoeCxzaGZ0KQkoKHgpID4+IChzaGZ0KSkNCi0jZW5kaWYNCi0NCi0jaWZkZWYgVVNFX0FDQ1VSQVRFX1JPVU5ESU5HDQotI2RlZmluZSBJREVTQ0FMRSh4LG4pICAoKGludCkgSVJJR0hUX1NISUZUKCh4KSArICgxIDw8ICgobiktMSkpLCBuKSkNCi0jZWxzZQ0KLSNkZWZpbmUgSURFU0NBTEUoeCxuKSAgKChpbnQpIElSSUdIVF9TSElGVCh4LCBuKSkNCi0jZW5kaWYNCi0NCi0NCi0vKg0KLSAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotanBlZ19pZGN0X2lmYXN0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwNCi0JCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLA0KLQkJIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQ0KLXsNCi0gIERDVEVMRU0gdG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgdG1wNCwgdG1wNSwgdG1wNiwgdG1wNzsNCi0gIERDVEVMRU0gdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTM7DQotICBEQ1RFTEVNIHo1LCB6MTAsIHoxMSwgejEyLCB6MTM7DQotICBKQ09FRlBUUiBpbnB0cjsNCi0gIElGQVNUX01VTFRfVFlQRSAqIHF1YW50cHRyOw0KLSAgaW50ICogd3NwdHI7DQotICBKU0FNUFJPVyBvdXRwdHI7DQotICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOw0KLSAgaW50IGN0cjsNCi0gIGludCB3b3Jrc3BhY2VbRENUU0laRTJdOwkvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8NCi0gIFNISUZUX1RFTVBTCQkJLyogZm9yIERFU0NBTEUgKi8NCi0gIElTSElGVF9URU1QUwkJCS8qIGZvciBJREVTQ0FMRSAqLw0KLQ0KLSAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LiAqLw0KLQ0KLSAgaW5wdHIgPSBjb2VmX2Jsb2NrOw0KLSAgcXVhbnRwdHIgPSAoSUZBU1RfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsNCi0gIHdzcHRyID0gd29ya3NwYWNlOw0KLSAgZm9yIChjdHIgPSBEQ1RTSVpFOyBjdHIgPiAwOyBjdHItLSkgew0KLSAgICAvKiBEdWUgdG8gcXVhbnRpemF0aW9uLCB3ZSB3aWxsIHVzdWFsbHkgZmluZCB0aGF0IG1hbnkgb2YgdGhlIGlucHV0DQotICAgICAqIGNvZWZmaWNpZW50cyBhcmUgemVybywgZXNwZWNpYWxseSB0aGUgQUMgdGVybXMuICBXZSBjYW4gZXhwbG9pdCB0aGlzDQotICAgICAqIGJ5IHNob3J0LWNpcmN1aXRpbmcgdGhlIElEQ1QgY2FsY3VsYXRpb24gZm9yIGFueSBjb2x1bW4gaW4gd2hpY2ggYWxsDQotICAgICAqIHRoZSBBQyB0ZXJtcyBhcmUgemVyby4gIEluIHRoYXQgY2FzZSBlYWNoIG91dHB1dCBpcyBlcXVhbCB0byB0aGUNCi0gICAgICogREMgY29lZmZpY2llbnQgKHdpdGggc2NhbGUgZmFjdG9yIGFzIG5lZWRlZCkuDQotICAgICAqIFdpdGggdHlwaWNhbCBpbWFnZXMgYW5kIHF1YW50aXphdGlvbiB0YWJsZXMsIGhhbGYgb3IgbW9yZSBvZiB0aGUNCi0gICAgICogY29sdW1uIERDVCBjYWxjdWxhdGlvbnMgY2FuIGJlIHNpbXBsaWZpZWQgdGhpcyB3YXkuDQotICAgICAqLw0KLSAgICANCi0gICAgaWYgKGlucHRyW0RDVFNJWkUqMV0gPT0gMCAmJiBpbnB0cltEQ1RTSVpFKjJdID09IDAgJiYNCi0JaW5wdHJbRENUU0laRSozXSA9PSAwICYmIGlucHRyW0RDVFNJWkUqNF0gPT0gMCAmJg0KLQlpbnB0cltEQ1RTSVpFKjVdID09IDAgJiYgaW5wdHJbRENUU0laRSo2XSA9PSAwICYmDQotCWlucHRyW0RDVFNJWkUqN10gPT0gMCkgew0KLSAgICAgIC8qIEFDIHRlcm1zIGFsbCB6ZXJvICovDQotICAgICAgaW50IGRjdmFsID0gKGludCkgREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKTsNCi0NCi0gICAgICB3c3B0cltEQ1RTSVpFKjBdID0gZGN2YWw7DQotICAgICAgd3NwdHJbRENUU0laRSoxXSA9IGRjdmFsOw0KLSAgICAgIHdzcHRyW0RDVFNJWkUqMl0gPSBkY3ZhbDsNCi0gICAgICB3c3B0cltEQ1RTSVpFKjNdID0gZGN2YWw7DQotICAgICAgd3NwdHJbRENUU0laRSo0XSA9IGRjdmFsOw0KLSAgICAgIHdzcHRyW0RDVFNJWkUqNV0gPSBkY3ZhbDsNCi0gICAgICB3c3B0cltEQ1RTSVpFKjZdID0gZGN2YWw7DQotICAgICAgd3NwdHJbRENUU0laRSo3XSA9IGRjdmFsOw0KLSAgICAgIA0KLSAgICAgIGlucHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVycyB0byBuZXh0IGNvbHVtbiAqLw0KLSAgICAgIHF1YW50cHRyKys7DQotICAgICAgd3NwdHIrKzsNCi0gICAgICBjb250aW51ZTsNCi0gICAgfQ0KLSAgICANCi0gICAgLyogRXZlbiBwYXJ0ICovDQotDQotICAgIHRtcDAgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pOw0KLSAgICB0bXAxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjJdLCBxdWFudHB0cltEQ1RTSVpFKjJdKTsNCi0gICAgdG1wMiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo0XSwgcXVhbnRwdHJbRENUU0laRSo0XSk7DQotICAgIHRtcDMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNl0sIHF1YW50cHRyW0RDVFNJWkUqNl0pOw0KLQ0KLSAgICB0bXAxMCA9IHRtcDAgKyB0bXAyOwkvKiBwaGFzZSAzICovDQotICAgIHRtcDExID0gdG1wMCAtIHRtcDI7DQotDQotICAgIHRtcDEzID0gdG1wMSArIHRtcDM7CS8qIHBoYXNlcyA1LTMgKi8NCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAxIC0gdG1wMywgRklYXzFfNDE0MjEzNTYyKSAtIHRtcDEzOyAvKiAyKmM0ICovDQotDQotICAgIHRtcDAgPSB0bXAxMCArIHRtcDEzOwkvKiBwaGFzZSAyICovDQotICAgIHRtcDMgPSB0bXAxMCAtIHRtcDEzOw0KLSAgICB0bXAxID0gdG1wMTEgKyB0bXAxMjsNCi0gICAgdG1wMiA9IHRtcDExIC0gdG1wMTI7DQotICAgIA0KLSAgICAvKiBPZGQgcGFydCAqLw0KLQ0KLSAgICB0bXA0ID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjFdLCBxdWFudHB0cltEQ1RTSVpFKjFdKTsNCi0gICAgdG1wNSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSozXSwgcXVhbnRwdHJbRENUU0laRSozXSk7DQotICAgIHRtcDYgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNV0sIHF1YW50cHRyW0RDVFNJWkUqNV0pOw0KLSAgICB0bXA3ID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjddLCBxdWFudHB0cltEQ1RTSVpFKjddKTsNCi0NCi0gICAgejEzID0gdG1wNiArIHRtcDU7CQkvKiBwaGFzZSA2ICovDQotICAgIHoxMCA9IHRtcDYgLSB0bXA1Ow0KLSAgICB6MTEgPSB0bXA0ICsgdG1wNzsNCi0gICAgejEyID0gdG1wNCAtIHRtcDc7DQotDQotICAgIHRtcDcgPSB6MTEgKyB6MTM7CQkvKiBwaGFzZSA1ICovDQotICAgIHRtcDExID0gTVVMVElQTFkoejExIC0gejEzLCBGSVhfMV80MTQyMTM1NjIpOyAvKiAyKmM0ICovDQotDQotICAgIHo1ID0gTVVMVElQTFkoejEwICsgejEyLCBGSVhfMV84NDc3NTkwNjUpOyAvKiAyKmMyICovDQotICAgIHRtcDEwID0gTVVMVElQTFkoejEyLCBGSVhfMV8wODIzOTIyMDApIC0gejU7IC8qIDIqKGMyLWM2KSAqLw0KLSAgICB0bXAxMiA9IE1VTFRJUExZKHoxMCwgLSBGSVhfMl82MTMxMjU5MzApICsgejU7IC8qIC0yKihjMitjNikgKi8NCi0NCi0gICAgdG1wNiA9IHRtcDEyIC0gdG1wNzsJLyogcGhhc2UgMiAqLw0KLSAgICB0bXA1ID0gdG1wMTEgLSB0bXA2Ow0KLSAgICB0bXA0ID0gdG1wMTAgKyB0bXA1Ow0KLQ0KLSAgICB3c3B0cltEQ1RTSVpFKjBdID0gKGludCkgKHRtcDAgKyB0bXA3KTsNCi0gICAgd3NwdHJbRENUU0laRSo3XSA9IChpbnQpICh0bXAwIC0gdG1wNyk7DQotICAgIHdzcHRyW0RDVFNJWkUqMV0gPSAoaW50KSAodG1wMSArIHRtcDYpOw0KLSAgICB3c3B0cltEQ1RTSVpFKjZdID0gKGludCkgKHRtcDEgLSB0bXA2KTsNCi0gICAgd3NwdHJbRENUU0laRSoyXSA9IChpbnQpICh0bXAyICsgdG1wNSk7DQotICAgIHdzcHRyW0RDVFNJWkUqNV0gPSAoaW50KSAodG1wMiAtIHRtcDUpOw0KLSAgICB3c3B0cltEQ1RTSVpFKjRdID0gKGludCkgKHRtcDMgKyB0bXA0KTsNCi0gICAgd3NwdHJbRENUU0laRSozXSA9IChpbnQpICh0bXAzIC0gdG1wNCk7DQotDQotICAgIGlucHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVycyB0byBuZXh0IGNvbHVtbiAqLw0KLSAgICBxdWFudHB0cisrOw0KLSAgICB3c3B0cisrOw0KLSAgfQ0KLSAgDQotICAvKiBQYXNzIDI6IHByb2Nlc3Mgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLw0KLSAgLyogTm90ZSB0aGF0IHdlIG11c3QgZGVzY2FsZSB0aGUgcmVzdWx0cyBieSBhIGZhY3RvciBvZiA4ID09IDIqKjMsICovDQotICAvKiBhbmQgYWxzbyB1bmRvIHRoZSBQQVNTMV9CSVRTIHNjYWxpbmcuICovDQotDQotICB3c3B0ciA9IHdvcmtzcGFjZTsNCi0gIGZvciAoY3RyID0gMDsgY3RyIDwgRENUU0laRTsgY3RyKyspIHsNCi0gICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsNCi0gICAgLyogUm93cyBvZiB6ZXJvZXMgY2FuIGJlIGV4cGxvaXRlZCBpbiB0aGUgc2FtZSB3YXkgYXMgd2UgZGlkIHdpdGggY29sdW1ucy4NCi0gICAgICogSG93ZXZlciwgdGhlIGNvbHVtbiBjYWxjdWxhdGlvbiBoYXMgY3JlYXRlZCBtYW55IG5vbnplcm8gQUMgdGVybXMsIHNvDQotICAgICAqIHRoZSBzaW1wbGlmaWNhdGlvbiBhcHBsaWVzIGxlc3Mgb2Z0ZW4gKHR5cGljYWxseSA1JSB0byAxMCUgb2YgdGhlIHRpbWUpLg0KLSAgICAgKiBPbiBtYWNoaW5lcyB3aXRoIHZlcnkgZmFzdCBtdWx0aXBsaWNhdGlvbiwgaXQncyBwb3NzaWJsZSB0aGF0IHRoZQ0KLSAgICAgKiB0ZXN0IHRha2VzIG1vcmUgdGltZSB0aGFuIGl0J3Mgd29ydGguICBJbiB0aGF0IGNhc2UgdGhpcyBzZWN0aW9uDQotICAgICAqIG1heSBiZSBjb21tZW50ZWQgb3V0Lg0KLSAgICAgKi8NCi0gICAgDQotI2lmbmRlZiBOT19aRVJPX1JPV19URVNUDQotICAgIGlmICh3c3B0clsxXSA9PSAwICYmIHdzcHRyWzJdID09IDAgJiYgd3NwdHJbM10gPT0gMCAmJiB3c3B0cls0XSA9PSAwICYmDQotCXdzcHRyWzVdID09IDAgJiYgd3NwdHJbNl0gPT0gMCAmJiB3c3B0cls3XSA9PSAwKSB7DQotICAgICAgLyogQUMgdGVybXMgYWxsIHplcm8gKi8NCi0gICAgICBKU0FNUExFIGRjdmFsID0gcmFuZ2VfbGltaXRbSURFU0NBTEUod3NwdHJbMF0sIFBBU1MxX0JJVFMrMykNCi0JCQkJICAmIFJBTkdFX01BU0tdOw0KLSAgICAgIA0KLSAgICAgIG91dHB0clswXSA9IGRjdmFsOw0KLSAgICAgIG91dHB0clsxXSA9IGRjdmFsOw0KLSAgICAgIG91dHB0clsyXSA9IGRjdmFsOw0KLSAgICAgIG91dHB0clszXSA9IGRjdmFsOw0KLSAgICAgIG91dHB0cls0XSA9IGRjdmFsOw0KLSAgICAgIG91dHB0cls1XSA9IGRjdmFsOw0KLSAgICAgIG91dHB0cls2XSA9IGRjdmFsOw0KLSAgICAgIG91dHB0cls3XSA9IGRjdmFsOw0KLQ0KLSAgICAgIHdzcHRyICs9IERDVFNJWkU7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8NCi0gICAgICBjb250aW51ZTsNCi0gICAgfQ0KLSNlbmRpZg0KLSAgICANCi0gICAgLyogRXZlbiBwYXJ0ICovDQotDQotICAgIHRtcDEwID0gKChEQ1RFTEVNKSB3c3B0clswXSArIChEQ1RFTEVNKSB3c3B0cls0XSk7DQotICAgIHRtcDExID0gKChEQ1RFTEVNKSB3c3B0clswXSAtIChEQ1RFTEVNKSB3c3B0cls0XSk7DQotDQotICAgIHRtcDEzID0gKChEQ1RFTEVNKSB3c3B0clsyXSArIChEQ1RFTEVNKSB3c3B0cls2XSk7DQotICAgIHRtcDEyID0gTVVMVElQTFkoKERDVEVMRU0pIHdzcHRyWzJdIC0gKERDVEVMRU0pIHdzcHRyWzZdLCBGSVhfMV80MTQyMTM1NjIpDQotCSAgICAtIHRtcDEzOw0KLQ0KLSAgICB0bXAwID0gdG1wMTAgKyB0bXAxMzsNCi0gICAgdG1wMyA9IHRtcDEwIC0gdG1wMTM7DQotICAgIHRtcDEgPSB0bXAxMSArIHRtcDEyOw0KLSAgICB0bXAyID0gdG1wMTEgLSB0bXAxMjsNCi0NCi0gICAgLyogT2RkIHBhcnQgKi8NCi0NCi0gICAgejEzID0gKERDVEVMRU0pIHdzcHRyWzVdICsgKERDVEVMRU0pIHdzcHRyWzNdOw0KLSAgICB6MTAgPSAoRENURUxFTSkgd3NwdHJbNV0gLSAoRENURUxFTSkgd3NwdHJbM107DQotICAgIHoxMSA9IChEQ1RFTEVNKSB3c3B0clsxXSArIChEQ1RFTEVNKSB3c3B0cls3XTsNCi0gICAgejEyID0gKERDVEVMRU0pIHdzcHRyWzFdIC0gKERDVEVMRU0pIHdzcHRyWzddOw0KLQ0KLSAgICB0bXA3ID0gejExICsgejEzOwkJLyogcGhhc2UgNSAqLw0KLSAgICB0bXAxMSA9IE1VTFRJUExZKHoxMSAtIHoxMywgRklYXzFfNDE0MjEzNTYyKTsgLyogMipjNCAqLw0KLQ0KLSAgICB6NSA9IE1VTFRJUExZKHoxMCArIHoxMiwgRklYXzFfODQ3NzU5MDY1KTsgLyogMipjMiAqLw0KLSAgICB0bXAxMCA9IE1VTFRJUExZKHoxMiwgRklYXzFfMDgyMzkyMjAwKSAtIHo1OyAvKiAyKihjMi1jNikgKi8NCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh6MTAsIC0gRklYXzJfNjEzMTI1OTMwKSArIHo1OyAvKiAtMiooYzIrYzYpICovDQotDQotICAgIHRtcDYgPSB0bXAxMiAtIHRtcDc7CS8qIHBoYXNlIDIgKi8NCi0gICAgdG1wNSA9IHRtcDExIC0gdG1wNjsNCi0gICAgdG1wNCA9IHRtcDEwICsgdG1wNTsNCi0NCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlOiBzY2FsZSBkb3duIGJ5IGEgZmFjdG9yIG9mIDggYW5kIHJhbmdlLWxpbWl0ICovDQotDQotICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0W0lERVNDQUxFKHRtcDAgKyB0bXA3LCBQQVNTMV9CSVRTKzMpDQotCQkJICAgICYgUkFOR0VfTUFTS107DQotICAgIG91dHB0cls3XSA9IHJhbmdlX2xpbWl0W0lERVNDQUxFKHRtcDAgLSB0bXA3LCBQQVNTMV9CSVRTKzMpDQotCQkJICAgICYgUkFOR0VfTUFTS107DQotICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0W0lERVNDQUxFKHRtcDEgKyB0bXA2LCBQQVNTMV9CSVRTKzMpDQotCQkJICAgICYgUkFOR0VfTUFTS107DQotICAgIG91dHB0cls2XSA9IHJhbmdlX2xpbWl0W0lERVNDQUxFKHRtcDEgLSB0bXA2LCBQQVNTMV9CSVRTKzMpDQotCQkJICAgICYgUkFOR0VfTUFTS107DQotICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0W0lERVNDQUxFKHRtcDIgKyB0bXA1LCBQQVNTMV9CSVRTKzMpDQotCQkJICAgICYgUkFOR0VfTUFTS107DQotICAgIG91dHB0cls1XSA9IHJhbmdlX2xpbWl0W0lERVNDQUxFKHRtcDIgLSB0bXA1LCBQQVNTMV9CSVRTKzMpDQotCQkJICAgICYgUkFOR0VfTUFTS107DQotICAgIG91dHB0cls0XSA9IHJhbmdlX2xpbWl0W0lERVNDQUxFKHRtcDMgKyB0bXA0LCBQQVNTMV9CSVRTKzMpDQotCQkJICAgICYgUkFOR0VfTUFTS107DQotICAgIG91dHB0clszXSA9IHJhbmdlX2xpbWl0W0lERVNDQUxFKHRtcDMgLSB0bXA0LCBQQVNTMV9CSVRTKzMpDQotCQkJICAgICYgUkFOR0VfTUFTS107DQotDQotICAgIHdzcHRyICs9IERDVFNJWkU7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8NCi0gIH0NCi19DQotDQotI2VuZGlmIC8qIERDVF9JRkFTVF9TVVBQT1JURUQgKi8NCi0NCi0jZW5kaWYgLy9fRlhfSlBFR19UVVJCT18NCisjaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQorLyoKKyAqIGppZGN0ZnN0LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OCwgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhIGZhc3QsIG5vdCBzbyBhY2N1cmF0ZSBpbnRlZ2VyIGltcGxlbWVudGF0aW9uIG9mIHRoZQorICogaW52ZXJzZSBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiAgSW4gdGhlIElKRyBjb2RlLCB0aGlzIHJvdXRpbmUKKyAqIG11c3QgYWxzbyBwZXJmb3JtIGRlcXVhbnRpemF0aW9uIG9mIHRoZSBpbnB1dCBjb2VmZmljaWVudHMuCisgKgorICogQSAyLUQgSURDVCBjYW4gYmUgZG9uZSBieSAxLUQgSURDVCBvbiBlYWNoIGNvbHVtbiBmb2xsb3dlZCBieSAxLUQgSURDVAorICogb24gZWFjaCByb3cgKG9yIHZpY2UgdmVyc2EsIGJ1dCBpdCdzIG1vcmUgY29udmVuaWVudCB0byBlbWl0IGEgcm93IGF0CisgKiBhIHRpbWUpLiAgRGlyZWN0IGFsZ29yaXRobXMgYXJlIGFsc28gYXZhaWxhYmxlLCBidXQgdGhleSBhcmUgbXVjaCBtb3JlCisgKiBjb21wbGV4IGFuZCBzZWVtIG5vdCB0byBiZSBhbnkgZmFzdGVyIHdoZW4gcmVkdWNlZCB0byBjb2RlLgorICoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gQXJhaSwgQWd1aSwgYW5kIE5ha2FqaW1hJ3MgYWxnb3JpdGhtIGZvcgorICogc2NhbGVkIERDVC4gIFRoZWlyIG9yaWdpbmFsIHBhcGVyIChUcmFucy4gSUVJQ0UgRS03MSgxMSk6MTA5NSkgaXMgaW4KKyAqIEphcGFuZXNlLCBidXQgdGhlIGFsZ29yaXRobSBpcyBkZXNjcmliZWQgaW4gdGhlIFBlbm5lYmFrZXIgJiBNaXRjaGVsbAorICogSlBFRyB0ZXh0Ym9vayAoc2VlIFJFRkVSRU5DRVMgc2VjdGlvbiBpbiBmaWxlIFJFQURNRSkuICBUaGUgZm9sbG93aW5nIGNvZGUKKyAqIGlzIGJhc2VkIGRpcmVjdGx5IG9uIGZpZ3VyZSA0LTggaW4gUCZNLgorICogV2hpbGUgYW4gOC1wb2ludCBEQ1QgY2Fubm90IGJlIGRvbmUgaW4gbGVzcyB0aGFuIDExIG11bHRpcGxpZXMsIGl0IGlzCisgKiBwb3NzaWJsZSB0byBhcnJhbmdlIHRoZSBjb21wdXRhdGlvbiBzbyB0aGF0IG1hbnkgb2YgdGhlIG11bHRpcGxpZXMgYXJlCisgKiBzaW1wbGUgc2NhbGluZ3Mgb2YgdGhlIGZpbmFsIG91dHB1dHMuICBUaGVzZSBtdWx0aXBsaWVzIGNhbiB0aGVuIGJlCisgKiBmb2xkZWQgaW50byB0aGUgbXVsdGlwbGljYXRpb25zIG9yIGRpdmlzaW9ucyBieSB0aGUgSlBFRyBxdWFudGl6YXRpb24KKyAqIHRhYmxlIGVudHJpZXMuICBUaGUgQUEmTiBtZXRob2QgbGVhdmVzIG9ubHkgNSBtdWx0aXBsaWVzIGFuZCAyOSBhZGRzCisgKiB0byBiZSBkb25lIGluIHRoZSBEQ1QgaXRzZWxmLgorICogVGhlIHByaW1hcnkgZGlzYWR2YW50YWdlIG9mIHRoaXMgbWV0aG9kIGlzIHRoYXQgd2l0aCBmaXhlZC1wb2ludCBtYXRoLAorICogYWNjdXJhY3kgaXMgbG9zdCBkdWUgdG8gaW1wcmVjaXNlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzY2FsZWQKKyAqIHF1YW50aXphdGlvbiB2YWx1ZXMuICBUaGUgc21hbGxlciB0aGUgcXVhbnRpemF0aW9uIHRhYmxlIGVudHJ5LCB0aGUgbGVzcworICogcHJlY2lzZSB0aGUgc2NhbGVkIHZhbHVlLCBzbyB0aGlzIGltcGxlbWVudGF0aW9uIGRvZXMgd29yc2Ugd2l0aCBoaWdoLQorICogcXVhbGl0eS1zZXR0aW5nIGZpbGVzIHRoYW4gd2l0aCBsb3ctcXVhbGl0eSBvbmVzLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqZGN0LmgiCQkvKiBQcml2YXRlIGRlY2xhcmF0aW9ucyBmb3IgRENUIHN1YnN5c3RlbSAqLworCisjaWZkZWYgRENUX0lGQVNUX1NVUFBPUlRFRAorCisKKy8qCisgKiBUaGlzIG1vZHVsZSBpcyBzcGVjaWFsaXplZCB0byB0aGUgY2FzZSBEQ1RTSVpFID0gOC4KKyAqLworCisjaWYgRENUU0laRSAhPSA4CisgIFNvcnJ5LCB0aGlzIGNvZGUgb25seSBjb3BlcyB3aXRoIDh4OCBEQ1RzLiAvKiBkZWxpYmVyYXRlIHN5bnRheCBlcnIgKi8KKyNlbmRpZgorCisKKy8qIFNjYWxpbmcgZGVjaXNpb25zIGFyZSBnZW5lcmFsbHkgdGhlIHNhbWUgYXMgaW4gdGhlIExMJk0gYWxnb3JpdGhtOworICogc2VlIGppZGN0aW50LmMgZm9yIG1vcmUgZGV0YWlscy4gIEhvd2V2ZXIsIHdlIGNob29zZSB0byBkZXNjYWxlCisgKiAocmlnaHQgc2hpZnQpIG11bHRpcGxpY2F0aW9uIHByb2R1Y3RzIGFzIHNvb24gYXMgdGhleSBhcmUgZm9ybWVkLAorICogcmF0aGVyIHRoYW4gY2FycnlpbmcgYWRkaXRpb25hbCBmcmFjdGlvbmFsIGJpdHMgaW50byBzdWJzZXF1ZW50IGFkZGl0aW9ucy4KKyAqIFRoaXMgY29tcHJvbWlzZXMgYWNjdXJhY3kgc2xpZ2h0bHksIGJ1dCBpdCBsZXRzIHVzIHNhdmUgYSBmZXcgc2hpZnRzLgorICogTW9yZSBpbXBvcnRhbnRseSwgMTYtYml0IGFyaXRobWV0aWMgaXMgdGhlbiBhZGVxdWF0ZSAoZm9yIDgtYml0IHNhbXBsZXMpCisgKiBldmVyeXdoZXJlIGV4Y2VwdCBpbiB0aGUgbXVsdGlwbGljYXRpb25zIHByb3BlcjsgdGhpcyBzYXZlcyBhIGdvb2QgZGVhbAorICogb2Ygd29yayBvbiAxNi1iaXQtaW50IG1hY2hpbmVzLgorICoKKyAqIFRoZSBkZXF1YW50aXplZCBjb2VmZmljaWVudHMgYXJlIG5vdCBpbnRlZ2VycyBiZWNhdXNlIHRoZSBBQSZOIHNjYWxpbmcKKyAqIGZhY3RvcnMgaGF2ZSBiZWVuIGluY29ycG9yYXRlZC4gIFdlIHJlcHJlc2VudCB0aGVtIHNjYWxlZCB1cCBieSBQQVNTMV9CSVRTLAorICogc28gdGhhdCB0aGUgZmlyc3QgYW5kIHNlY29uZCBJRENUIHJvdW5kcyBoYXZlIHRoZSBzYW1lIGlucHV0IHNjYWxpbmcuCisgKiBGb3IgOC1iaXQgSlNBTVBMRXMsIHdlIGNob29zZSBJRkFTVF9TQ0FMRV9CSVRTID0gUEFTUzFfQklUUyBzbyBhcyB0bworICogYXZvaWQgYSBkZXNjYWxpbmcgc2hpZnQ7IHRoaXMgY29tcHJvbWlzZXMgYWNjdXJhY3kgcmF0aGVyIGRyYXN0aWNhbGx5CisgKiBmb3Igc21hbGwgcXVhbnRpemF0aW9uIHRhYmxlIGVudHJpZXMsIGJ1dCBpdCBzYXZlcyBhIGxvdCBvZiBzaGlmdHMuCisgKiBGb3IgMTItYml0IEpTQU1QTEVzLCB0aGVyZSdzIG5vIGhvcGUgb2YgdXNpbmcgMTZ4MTYgbXVsdGlwbGllcyBhbnl3YXksCisgKiBzbyB3ZSB1c2UgYSBtdWNoIGxhcmdlciBzY2FsaW5nIGZhY3RvciB0byBwcmVzZXJ2ZSBhY2N1cmFjeS4KKyAqCisgKiBBIGZpbmFsIGNvbXByb21pc2UgaXMgdG8gcmVwcmVzZW50IHRoZSBtdWx0aXBsaWNhdGl2ZSBjb25zdGFudHMgdG8gb25seQorICogOCBmcmFjdGlvbmFsIGJpdHMsIHJhdGhlciB0aGFuIDEzLiAgVGhpcyBzYXZlcyBzb21lIHNoaWZ0aW5nIHdvcmsgb24gc29tZQorICogbWFjaGluZXMsIGFuZCBtYXkgYWxzbyByZWR1Y2UgdGhlIGNvc3Qgb2YgbXVsdGlwbGljYXRpb24gKHNpbmNlIHRoZXJlCisgKiBhcmUgZmV3ZXIgb25lLWJpdHMgaW4gdGhlIGNvbnN0YW50cykuCisgKi8KKworI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4CisjZGVmaW5lIENPTlNUX0JJVFMgIDgKKyNkZWZpbmUgUEFTUzFfQklUUyAgMgorI2Vsc2UKKyNkZWZpbmUgQ09OU1RfQklUUyAgOAorI2RlZmluZSBQQVNTMV9CSVRTICAxCQkvKiBsb3NlIGEgbGl0dGxlIHByZWNpc2lvbiB0byBhdm9pZCBvdmVyZmxvdyAqLworI2VuZGlmCisKKy8qIFNvbWUgQyBjb21waWxlcnMgZmFpbCB0byByZWR1Y2UgIkZJWChjb25zdGFudCkiIGF0IGNvbXBpbGUgdGltZSwgdGh1cworICogY2F1c2luZyBhIGxvdCBvZiB1c2VsZXNzIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgYXQgcnVuIHRpbWUuCisgKiBUbyBnZXQgYXJvdW5kIHRoaXMgd2UgdXNlIHRoZSBmb2xsb3dpbmcgcHJlLWNhbGN1bGF0ZWQgY29uc3RhbnRzLgorICogSWYgeW91IGNoYW5nZSBDT05TVF9CSVRTIHlvdSBtYXkgd2FudCB0byBhZGQgYXBwcm9wcmlhdGUgdmFsdWVzLgorICogKFdpdGggYSByZWFzb25hYmxlIEMgY29tcGlsZXIsIHlvdSBjYW4ganVzdCByZWx5IG9uIHRoZSBGSVgoKSBtYWNyby4uLikKKyAqLworCisjaWYgQ09OU1RfQklUUyA9PSA4CisjZGVmaW5lIEZJWF8xXzA4MjM5MjIwMCAgKChJTlQzMikgIDI3NykJCS8qIEZJWCgxLjA4MjM5MjIwMCkgKi8KKyNkZWZpbmUgRklYXzFfNDE0MjEzNTYyICAoKElOVDMyKSAgMzYyKQkJLyogRklYKDEuNDE0MjEzNTYyKSAqLworI2RlZmluZSBGSVhfMV84NDc3NTkwNjUgICgoSU5UMzIpICA0NzMpCQkvKiBGSVgoMS44NDc3NTkwNjUpICovCisjZGVmaW5lIEZJWF8yXzYxMzEyNTkzMCAgKChJTlQzMikgIDY2OSkJCS8qIEZJWCgyLjYxMzEyNTkzMCkgKi8KKyNlbHNlCisjZGVmaW5lIEZJWF8xXzA4MjM5MjIwMCAgRklYKDEuMDgyMzkyMjAwKQorI2RlZmluZSBGSVhfMV80MTQyMTM1NjIgIEZJWCgxLjQxNDIxMzU2MikKKyNkZWZpbmUgRklYXzFfODQ3NzU5MDY1ICBGSVgoMS44NDc3NTkwNjUpCisjZGVmaW5lIEZJWF8yXzYxMzEyNTkzMCAgRklYKDIuNjEzMTI1OTMwKQorI2VuZGlmCisKKworLyogV2UgY2FuIGdhaW4gYSBsaXR0bGUgbW9yZSBzcGVlZCwgd2l0aCBhIGZ1cnRoZXIgY29tcHJvbWlzZSBpbiBhY2N1cmFjeSwKKyAqIGJ5IG9taXR0aW5nIHRoZSBhZGRpdGlvbiBpbiBhIGRlc2NhbGluZyBzaGlmdC4gIFRoaXMgeWllbGRzIGFuIGluY29ycmVjdGx5CisgKiByb3VuZGVkIHJlc3VsdCBoYWxmIHRoZSB0aW1lLi4uCisgKi8KKworI2lmbmRlZiBVU0VfQUNDVVJBVEVfUk9VTkRJTkcKKyN1bmRlZiBERVNDQUxFCisjZGVmaW5lIERFU0NBTEUoeCxuKSAgUklHSFRfU0hJRlQoeCwgbikKKyNlbmRpZgorCisKKy8qIE11bHRpcGx5IGEgRENURUxFTSB2YXJpYWJsZSBieSBhbiBJTlQzMiBjb25zdGFudCwgYW5kIGltbWVkaWF0ZWx5CisgKiBkZXNjYWxlIHRvIHlpZWxkIGEgRENURUxFTSByZXN1bHQuCisgKi8KKworI2RlZmluZSBNVUxUSVBMWSh2YXIsY29uc3QpICAoKERDVEVMRU0pIERFU0NBTEUoKHZhcikgKiAoY29uc3QpLCBDT05TVF9CSVRTKSkKKworCisvKiBEZXF1YW50aXplIGEgY29lZmZpY2llbnQgYnkgbXVsdGlwbHlpbmcgaXQgYnkgdGhlIG11bHRpcGxpZXItdGFibGUKKyAqIGVudHJ5OyBwcm9kdWNlIGEgRENURUxFTSByZXN1bHQuICBGb3IgOC1iaXQgZGF0YSBhIDE2eDE2LT4xNgorICogbXVsdGlwbGljYXRpb24gd2lsbCBkby4gIEZvciAxMi1iaXQgZGF0YSwgdGhlIG11bHRpcGxpZXIgdGFibGUgaXMKKyAqIGRlY2xhcmVkIElOVDMyLCBzbyBhIDMyLWJpdCBtdWx0aXBseSB3aWxsIGJlIHVzZWQuCisgKi8KKworI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4CisjZGVmaW5lIERFUVVBTlRJWkUoY29lZixxdWFudHZhbCkgICgoKElGQVNUX01VTFRfVFlQRSkgKGNvZWYpKSAqIChxdWFudHZhbCkpCisjZWxzZQorI2RlZmluZSBERVFVQU5USVpFKGNvZWYscXVhbnR2YWwpICBcCisJREVTQ0FMRSgoY29lZikqKHF1YW50dmFsKSwgSUZBU1RfU0NBTEVfQklUUy1QQVNTMV9CSVRTKQorI2VuZGlmCisKKworLyogTGlrZSBERVNDQUxFLCBidXQgYXBwbGllcyB0byBhIERDVEVMRU0gYW5kIHByb2R1Y2VzIGFuIGludC4KKyAqIFdlIGFzc3VtZSB0aGF0IGludCByaWdodCBzaGlmdCBpcyB1bnNpZ25lZCBpZiBJTlQzMiByaWdodCBzaGlmdCBpcy4KKyAqLworCisjaWZkZWYgUklHSFRfU0hJRlRfSVNfVU5TSUdORUQKKyNkZWZpbmUgSVNISUZUX1RFTVBTCURDVEVMRU0gaXNoaWZ0X3RlbXA7CisjaWYgQklUU19JTl9KU0FNUExFID09IDgKKyNkZWZpbmUgRENURUxFTUJJVFMgIDE2CQkvKiBEQ1RFTEVNIG1heSBiZSAxNiBvciAzMiBiaXRzICovCisjZWxzZQorI2RlZmluZSBEQ1RFTEVNQklUUyAgMzIJCS8qIERDVEVMRU0gbXVzdCBiZSAzMiBiaXRzICovCisjZW5kaWYKKyNkZWZpbmUgSVJJR0hUX1NISUZUKHgsc2hmdCkgIFwKKyAgICAoKGlzaGlmdF90ZW1wID0gKHgpKSA8IDAgPyBcCisgICAgIChpc2hpZnRfdGVtcCA+PiAoc2hmdCkpIHwgKCh+KChEQ1RFTEVNKSAwKSkgPDwgKERDVEVMRU1CSVRTLShzaGZ0KSkpIDogXAorICAgICAoaXNoaWZ0X3RlbXAgPj4gKHNoZnQpKSkKKyNlbHNlCisjZGVmaW5lIElTSElGVF9URU1QUworI2RlZmluZSBJUklHSFRfU0hJRlQoeCxzaGZ0KQkoKHgpID4+IChzaGZ0KSkKKyNlbmRpZgorCisjaWZkZWYgVVNFX0FDQ1VSQVRFX1JPVU5ESU5HCisjZGVmaW5lIElERVNDQUxFKHgsbikgICgoaW50KSBJUklHSFRfU0hJRlQoKHgpICsgKDEgPDwgKChuKS0xKSksIG4pKQorI2Vsc2UKKyNkZWZpbmUgSURFU0NBTEUoeCxuKSAgKChpbnQpIElSSUdIVF9TSElGVCh4LCBuKSkKKyNlbmRpZgorCisKKy8qCisgKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19pZGN0X2lmYXN0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkJIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisJCSBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAgRENURUxFTSB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzLCB0bXA0LCB0bXA1LCB0bXA2LCB0bXA3OworICBEQ1RFTEVNIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzOworICBEQ1RFTEVNIHo1LCB6MTAsIHoxMSwgejEyLCB6MTM7CisgIEpDT0VGUFRSIGlucHRyOworICBJRkFTVF9NVUxUX1RZUEUgKiBxdWFudHB0cjsKKyAgaW50ICogd3NwdHI7CisgIEpTQU1QUk9XIG91dHB0cjsKKyAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsKKyAgaW50IGN0cjsKKyAgaW50IHdvcmtzcGFjZVtEQ1RTSVpFMl07CS8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLworICBTSElGVF9URU1QUwkJCS8qIGZvciBERVNDQUxFICovCisgIElTSElGVF9URU1QUwkJCS8qIGZvciBJREVTQ0FMRSAqLworCisgIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KKworICBpbnB0ciA9IGNvZWZfYmxvY2s7CisgIHF1YW50cHRyID0gKElGQVNUX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7CisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IERDVFNJWkU7IGN0ciA+IDA7IGN0ci0tKSB7CisgICAgLyogRHVlIHRvIHF1YW50aXphdGlvbiwgd2Ugd2lsbCB1c3VhbGx5IGZpbmQgdGhhdCBtYW55IG9mIHRoZSBpbnB1dAorICAgICAqIGNvZWZmaWNpZW50cyBhcmUgemVybywgZXNwZWNpYWxseSB0aGUgQUMgdGVybXMuICBXZSBjYW4gZXhwbG9pdCB0aGlzCisgICAgICogYnkgc2hvcnQtY2lyY3VpdGluZyB0aGUgSURDVCBjYWxjdWxhdGlvbiBmb3IgYW55IGNvbHVtbiBpbiB3aGljaCBhbGwKKyAgICAgKiB0aGUgQUMgdGVybXMgYXJlIHplcm8uICBJbiB0aGF0IGNhc2UgZWFjaCBvdXRwdXQgaXMgZXF1YWwgdG8gdGhlCisgICAgICogREMgY29lZmZpY2llbnQgKHdpdGggc2NhbGUgZmFjdG9yIGFzIG5lZWRlZCkuCisgICAgICogV2l0aCB0eXBpY2FsIGltYWdlcyBhbmQgcXVhbnRpemF0aW9uIHRhYmxlcywgaGFsZiBvciBtb3JlIG9mIHRoZQorICAgICAqIGNvbHVtbiBEQ1QgY2FsY3VsYXRpb25zIGNhbiBiZSBzaW1wbGlmaWVkIHRoaXMgd2F5LgorICAgICAqLworICAgIAorICAgIGlmIChpbnB0cltEQ1RTSVpFKjFdID09IDAgJiYgaW5wdHJbRENUU0laRSoyXSA9PSAwICYmCisJaW5wdHJbRENUU0laRSozXSA9PSAwICYmIGlucHRyW0RDVFNJWkUqNF0gPT0gMCAmJgorCWlucHRyW0RDVFNJWkUqNV0gPT0gMCAmJiBpbnB0cltEQ1RTSVpFKjZdID09IDAgJiYKKwlpbnB0cltEQ1RTSVpFKjddID09IDApIHsKKyAgICAgIC8qIEFDIHRlcm1zIGFsbCB6ZXJvICovCisgICAgICBpbnQgZGN2YWwgPSAoaW50KSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pOworCisgICAgICB3c3B0cltEQ1RTSVpFKjBdID0gZGN2YWw7CisgICAgICB3c3B0cltEQ1RTSVpFKjFdID0gZGN2YWw7CisgICAgICB3c3B0cltEQ1RTSVpFKjJdID0gZGN2YWw7CisgICAgICB3c3B0cltEQ1RTSVpFKjNdID0gZGN2YWw7CisgICAgICB3c3B0cltEQ1RTSVpFKjRdID0gZGN2YWw7CisgICAgICB3c3B0cltEQ1RTSVpFKjVdID0gZGN2YWw7CisgICAgICB3c3B0cltEQ1RTSVpFKjZdID0gZGN2YWw7CisgICAgICB3c3B0cltEQ1RTSVpFKjddID0gZGN2YWw7CisgICAgICAKKyAgICAgIGlucHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVycyB0byBuZXh0IGNvbHVtbiAqLworICAgICAgcXVhbnRwdHIrKzsKKyAgICAgIHdzcHRyKys7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgCisgICAgLyogRXZlbiBwYXJ0ICovCisKKyAgICB0bXAwID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKTsKKyAgICB0bXAxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjJdLCBxdWFudHB0cltEQ1RTSVpFKjJdKTsKKyAgICB0bXAyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjRdLCBxdWFudHB0cltEQ1RTSVpFKjRdKTsKKyAgICB0bXAzID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjZdLCBxdWFudHB0cltEQ1RTSVpFKjZdKTsKKworICAgIHRtcDEwID0gdG1wMCArIHRtcDI7CS8qIHBoYXNlIDMgKi8KKyAgICB0bXAxMSA9IHRtcDAgLSB0bXAyOworCisgICAgdG1wMTMgPSB0bXAxICsgdG1wMzsJLyogcGhhc2VzIDUtMyAqLworICAgIHRtcDEyID0gTVVMVElQTFkodG1wMSAtIHRtcDMsIEZJWF8xXzQxNDIxMzU2MikgLSB0bXAxMzsgLyogMipjNCAqLworCisgICAgdG1wMCA9IHRtcDEwICsgdG1wMTM7CS8qIHBoYXNlIDIgKi8KKyAgICB0bXAzID0gdG1wMTAgLSB0bXAxMzsKKyAgICB0bXAxID0gdG1wMTEgKyB0bXAxMjsKKyAgICB0bXAyID0gdG1wMTEgLSB0bXAxMjsKKyAgICAKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgdG1wNCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7CisgICAgdG1wNSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSozXSwgcXVhbnRwdHJbRENUU0laRSozXSk7CisgICAgdG1wNiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo1XSwgcXVhbnRwdHJbRENUU0laRSo1XSk7CisgICAgdG1wNyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSk7CisKKyAgICB6MTMgPSB0bXA2ICsgdG1wNTsJCS8qIHBoYXNlIDYgKi8KKyAgICB6MTAgPSB0bXA2IC0gdG1wNTsKKyAgICB6MTEgPSB0bXA0ICsgdG1wNzsKKyAgICB6MTIgPSB0bXA0IC0gdG1wNzsKKworICAgIHRtcDcgPSB6MTEgKyB6MTM7CQkvKiBwaGFzZSA1ICovCisgICAgdG1wMTEgPSBNVUxUSVBMWSh6MTEgLSB6MTMsIEZJWF8xXzQxNDIxMzU2Mik7IC8qIDIqYzQgKi8KKworICAgIHo1ID0gTVVMVElQTFkoejEwICsgejEyLCBGSVhfMV84NDc3NTkwNjUpOyAvKiAyKmMyICovCisgICAgdG1wMTAgPSBNVUxUSVBMWSh6MTIsIEZJWF8xXzA4MjM5MjIwMCkgLSB6NTsgLyogMiooYzItYzYpICovCisgICAgdG1wMTIgPSBNVUxUSVBMWSh6MTAsIC0gRklYXzJfNjEzMTI1OTMwKSArIHo1OyAvKiAtMiooYzIrYzYpICovCisKKyAgICB0bXA2ID0gdG1wMTIgLSB0bXA3OwkvKiBwaGFzZSAyICovCisgICAgdG1wNSA9IHRtcDExIC0gdG1wNjsKKyAgICB0bXA0ID0gdG1wMTAgKyB0bXA1OworCisgICAgd3NwdHJbRENUU0laRSowXSA9IChpbnQpICh0bXAwICsgdG1wNyk7CisgICAgd3NwdHJbRENUU0laRSo3XSA9IChpbnQpICh0bXAwIC0gdG1wNyk7CisgICAgd3NwdHJbRENUU0laRSoxXSA9IChpbnQpICh0bXAxICsgdG1wNik7CisgICAgd3NwdHJbRENUU0laRSo2XSA9IChpbnQpICh0bXAxIC0gdG1wNik7CisgICAgd3NwdHJbRENUU0laRSoyXSA9IChpbnQpICh0bXAyICsgdG1wNSk7CisgICAgd3NwdHJbRENUU0laRSo1XSA9IChpbnQpICh0bXAyIC0gdG1wNSk7CisgICAgd3NwdHJbRENUU0laRSo0XSA9IChpbnQpICh0bXAzICsgdG1wNCk7CisgICAgd3NwdHJbRENUU0laRSozXSA9IChpbnQpICh0bXAzIC0gdG1wNCk7CisKKyAgICBpbnB0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlcnMgdG8gbmV4dCBjb2x1bW4gKi8KKyAgICBxdWFudHB0cisrOworICAgIHdzcHRyKys7CisgIH0KKyAgCisgIC8qIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCisgIC8qIE5vdGUgdGhhdCB3ZSBtdXN0IGRlc2NhbGUgdGhlIHJlc3VsdHMgYnkgYSBmYWN0b3Igb2YgOCA9PSAyKiozLCAqLworICAvKiBhbmQgYWxzbyB1bmRvIHRoZSBQQVNTMV9CSVRTIHNjYWxpbmcuICovCisKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgRENUU0laRTsgY3RyKyspIHsKKyAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOworICAgIC8qIFJvd3Mgb2YgemVyb2VzIGNhbiBiZSBleHBsb2l0ZWQgaW4gdGhlIHNhbWUgd2F5IGFzIHdlIGRpZCB3aXRoIGNvbHVtbnMuCisgICAgICogSG93ZXZlciwgdGhlIGNvbHVtbiBjYWxjdWxhdGlvbiBoYXMgY3JlYXRlZCBtYW55IG5vbnplcm8gQUMgdGVybXMsIHNvCisgICAgICogdGhlIHNpbXBsaWZpY2F0aW9uIGFwcGxpZXMgbGVzcyBvZnRlbiAodHlwaWNhbGx5IDUlIHRvIDEwJSBvZiB0aGUgdGltZSkuCisgICAgICogT24gbWFjaGluZXMgd2l0aCB2ZXJ5IGZhc3QgbXVsdGlwbGljYXRpb24sIGl0J3MgcG9zc2libGUgdGhhdCB0aGUKKyAgICAgKiB0ZXN0IHRha2VzIG1vcmUgdGltZSB0aGFuIGl0J3Mgd29ydGguICBJbiB0aGF0IGNhc2UgdGhpcyBzZWN0aW9uCisgICAgICogbWF5IGJlIGNvbW1lbnRlZCBvdXQuCisgICAgICovCisgICAgCisjaWZuZGVmIE5PX1pFUk9fUk9XX1RFU1QKKyAgICBpZiAod3NwdHJbMV0gPT0gMCAmJiB3c3B0clsyXSA9PSAwICYmIHdzcHRyWzNdID09IDAgJiYgd3NwdHJbNF0gPT0gMCAmJgorCXdzcHRyWzVdID09IDAgJiYgd3NwdHJbNl0gPT0gMCAmJiB3c3B0cls3XSA9PSAwKSB7CisgICAgICAvKiBBQyB0ZXJtcyBhbGwgemVybyAqLworICAgICAgSlNBTVBMRSBkY3ZhbCA9IHJhbmdlX2xpbWl0W0lERVNDQUxFKHdzcHRyWzBdLCBQQVNTMV9CSVRTKzMpCisJCQkJICAmIFJBTkdFX01BU0tdOworICAgICAgCisgICAgICBvdXRwdHJbMF0gPSBkY3ZhbDsKKyAgICAgIG91dHB0clsxXSA9IGRjdmFsOworICAgICAgb3V0cHRyWzJdID0gZGN2YWw7CisgICAgICBvdXRwdHJbM10gPSBkY3ZhbDsKKyAgICAgIG91dHB0cls0XSA9IGRjdmFsOworICAgICAgb3V0cHRyWzVdID0gZGN2YWw7CisgICAgICBvdXRwdHJbNl0gPSBkY3ZhbDsKKyAgICAgIG91dHB0cls3XSA9IGRjdmFsOworCisgICAgICB3c3B0ciArPSBEQ1RTSVpFOwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgICAgICBjb250aW51ZTsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICAvKiBFdmVuIHBhcnQgKi8KKworICAgIHRtcDEwID0gKChEQ1RFTEVNKSB3c3B0clswXSArIChEQ1RFTEVNKSB3c3B0cls0XSk7CisgICAgdG1wMTEgPSAoKERDVEVMRU0pIHdzcHRyWzBdIC0gKERDVEVMRU0pIHdzcHRyWzRdKTsKKworICAgIHRtcDEzID0gKChEQ1RFTEVNKSB3c3B0clsyXSArIChEQ1RFTEVNKSB3c3B0cls2XSk7CisgICAgdG1wMTIgPSBNVUxUSVBMWSgoRENURUxFTSkgd3NwdHJbMl0gLSAoRENURUxFTSkgd3NwdHJbNl0sIEZJWF8xXzQxNDIxMzU2MikKKwkgICAgLSB0bXAxMzsKKworICAgIHRtcDAgPSB0bXAxMCArIHRtcDEzOworICAgIHRtcDMgPSB0bXAxMCAtIHRtcDEzOworICAgIHRtcDEgPSB0bXAxMSArIHRtcDEyOworICAgIHRtcDIgPSB0bXAxMSAtIHRtcDEyOworCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIHoxMyA9IChEQ1RFTEVNKSB3c3B0cls1XSArIChEQ1RFTEVNKSB3c3B0clszXTsKKyAgICB6MTAgPSAoRENURUxFTSkgd3NwdHJbNV0gLSAoRENURUxFTSkgd3NwdHJbM107CisgICAgejExID0gKERDVEVMRU0pIHdzcHRyWzFdICsgKERDVEVMRU0pIHdzcHRyWzddOworICAgIHoxMiA9IChEQ1RFTEVNKSB3c3B0clsxXSAtIChEQ1RFTEVNKSB3c3B0cls3XTsKKworICAgIHRtcDcgPSB6MTEgKyB6MTM7CQkvKiBwaGFzZSA1ICovCisgICAgdG1wMTEgPSBNVUxUSVBMWSh6MTEgLSB6MTMsIEZJWF8xXzQxNDIxMzU2Mik7IC8qIDIqYzQgKi8KKworICAgIHo1ID0gTVVMVElQTFkoejEwICsgejEyLCBGSVhfMV84NDc3NTkwNjUpOyAvKiAyKmMyICovCisgICAgdG1wMTAgPSBNVUxUSVBMWSh6MTIsIEZJWF8xXzA4MjM5MjIwMCkgLSB6NTsgLyogMiooYzItYzYpICovCisgICAgdG1wMTIgPSBNVUxUSVBMWSh6MTAsIC0gRklYXzJfNjEzMTI1OTMwKSArIHo1OyAvKiAtMiooYzIrYzYpICovCisKKyAgICB0bXA2ID0gdG1wMTIgLSB0bXA3OwkvKiBwaGFzZSAyICovCisgICAgdG1wNSA9IHRtcDExIC0gdG1wNjsKKyAgICB0bXA0ID0gdG1wMTAgKyB0bXA1OworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlOiBzY2FsZSBkb3duIGJ5IGEgZmFjdG9yIG9mIDggYW5kIHJhbmdlLWxpbWl0ICovCisKKyAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFtJREVTQ0FMRSh0bXAwICsgdG1wNywgUEFTUzFfQklUUyszKQorCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzddID0gcmFuZ2VfbGltaXRbSURFU0NBTEUodG1wMCAtIHRtcDcsIFBBU1MxX0JJVFMrMykKKwkJCSAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0W0lERVNDQUxFKHRtcDEgKyB0bXA2LCBQQVNTMV9CSVRTKzMpCisJCQkgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNl0gPSByYW5nZV9saW1pdFtJREVTQ0FMRSh0bXAxIC0gdG1wNiwgUEFTUzFfQklUUyszKQorCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzJdID0gcmFuZ2VfbGltaXRbSURFU0NBTEUodG1wMiArIHRtcDUsIFBBU1MxX0JJVFMrMykKKwkJCSAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls1XSA9IHJhbmdlX2xpbWl0W0lERVNDQUxFKHRtcDIgLSB0bXA1LCBQQVNTMV9CSVRTKzMpCisJCQkgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNF0gPSByYW5nZV9saW1pdFtJREVTQ0FMRSh0bXAzICsgdG1wNCwgUEFTUzFfQklUUyszKQorCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzNdID0gcmFuZ2VfbGltaXRbSURFU0NBTEUodG1wMyAtIHRtcDQsIFBBU1MxX0JJVFMrMykKKwkJCSAgICAmIFJBTkdFX01BU0tdOworCisgICAgd3NwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLworICB9Cit9CisKKyNlbmRpZiAvKiBEQ1RfSUZBU1RfU1VQUE9SVEVEICovCisKKyNlbmRpZiAvL19GWF9KUEVHX1RVUkJPXwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamlkY3RpbnQuYyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2ppZGN0aW50LmMKaW5kZXggODJmNWNjNy4uNzhhOGQ2NiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamlkY3RpbnQuYworKysgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qaWRjdGludC5jCkBAIC0xLDM5MiArMSwzOTIgQEAKLSNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pDQotLyoNCi0gKiBqaWRjdGludC5jDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5OCwgVGhvbWFzIEcuIExhbmUuDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4NCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuDQotICoNCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgYSBzbG93LWJ1dC1hY2N1cmF0ZSBpbnRlZ2VyIGltcGxlbWVudGF0aW9uIG9mIHRoZQ0KLSAqIGludmVyc2UgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gIEluIHRoZSBJSkcgY29kZSwgdGhpcyByb3V0aW5lDQotICogbXVzdCBhbHNvIHBlcmZvcm0gZGVxdWFudGl6YXRpb24gb2YgdGhlIGlucHV0IGNvZWZmaWNpZW50cy4NCi0gKg0KLSAqIEEgMi1EIElEQ1QgY2FuIGJlIGRvbmUgYnkgMS1EIElEQ1Qgb24gZWFjaCBjb2x1bW4gZm9sbG93ZWQgYnkgMS1EIElEQ1QNCi0gKiBvbiBlYWNoIHJvdyAob3IgdmljZSB2ZXJzYSwgYnV0IGl0J3MgbW9yZSBjb252ZW5pZW50IHRvIGVtaXQgYSByb3cgYXQNCi0gKiBhIHRpbWUpLiAgRGlyZWN0IGFsZ29yaXRobXMgYXJlIGFsc28gYXZhaWxhYmxlLCBidXQgdGhleSBhcmUgbXVjaCBtb3JlDQotICogY29tcGxleCBhbmQgc2VlbSBub3QgdG8gYmUgYW55IGZhc3RlciB3aGVuIHJlZHVjZWQgdG8gY29kZS4NCi0gKg0KLSAqIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gYW4gYWxnb3JpdGhtIGRlc2NyaWJlZCBpbg0KLSAqICAgQy4gTG9lZmZsZXIsIEEuIExpZ3RlbmJlcmcgYW5kIEcuIE1vc2NoeXR6LCAiUHJhY3RpY2FsIEZhc3QgMS1EIERDVA0KLSAqICAgQWxnb3JpdGhtcyB3aXRoIDExIE11bHRpcGxpY2F0aW9ucyIsIFByb2MuIEludCdsLiBDb25mLiBvbiBBY291c3RpY3MsDQotICogICBTcGVlY2gsIGFuZCBTaWduYWwgUHJvY2Vzc2luZyAxOTg5IChJQ0FTU1AgJzg5KSwgcHAuIDk4OC05OTEuDQotICogVGhlIHByaW1hcnkgYWxnb3JpdGhtIGRlc2NyaWJlZCB0aGVyZSB1c2VzIDExIG11bHRpcGxpZXMgYW5kIDI5IGFkZHMuDQotICogV2UgdXNlIHRoZWlyIGFsdGVybmF0ZSBtZXRob2Qgd2l0aCAxMiBtdWx0aXBsaWVzIGFuZCAzMiBhZGRzLg0KLSAqIFRoZSBhZHZhbnRhZ2Ugb2YgdGhpcyBtZXRob2QgaXMgdGhhdCBubyBkYXRhIHBhdGggY29udGFpbnMgbW9yZSB0aGFuIG9uZQ0KLSAqIG11bHRpcGxpY2F0aW9uOyB0aGlzIGFsbG93cyBhIHZlcnkgc2ltcGxlIGFuZCBhY2N1cmF0ZSBpbXBsZW1lbnRhdGlvbiBpbg0KLSAqIHNjYWxlZCBmaXhlZC1wb2ludCBhcml0aG1ldGljLCB3aXRoIGEgbWluaW1hbCBudW1iZXIgb2Ygc2hpZnRzLg0KLSAqLw0KLQ0KLSNkZWZpbmUgSlBFR19JTlRFUk5BTFMNCi0jaW5jbHVkZSAiamluY2x1ZGUuaCINCi0jaW5jbHVkZSAianBlZ2xpYi5oIg0KLSNpbmNsdWRlICJqZGN0LmgiCQkvKiBQcml2YXRlIGRlY2xhcmF0aW9ucyBmb3IgRENUIHN1YnN5c3RlbSAqLw0KLQ0KLSNpZmRlZiBEQ1RfSVNMT1dfU1VQUE9SVEVEDQotDQotDQotLyoNCi0gKiBUaGlzIG1vZHVsZSBpcyBzcGVjaWFsaXplZCB0byB0aGUgY2FzZSBEQ1RTSVpFID0gOC4NCi0gKi8NCi0NCi0jaWYgRENUU0laRSAhPSA4DQotICBTb3JyeSwgdGhpcyBjb2RlIG9ubHkgY29wZXMgd2l0aCA4eDggRENUcy4gLyogZGVsaWJlcmF0ZSBzeW50YXggZXJyICovDQotI2VuZGlmDQotDQotDQotLyoNCi0gKiBUaGUgcG9vcCBvbiB0aGlzIHNjYWxpbmcgc3R1ZmYgaXMgYXMgZm9sbG93czoNCi0gKg0KLSAqIEVhY2ggMS1EIElEQ1Qgc3RlcCBwcm9kdWNlcyBvdXRwdXRzIHdoaWNoIGFyZSBhIGZhY3RvciBvZiBzcXJ0KE4pDQotICogbGFyZ2VyIHRoYW4gdGhlIHRydWUgSURDVCBvdXRwdXRzLiAgVGhlIGZpbmFsIG91dHB1dHMgYXJlIHRoZXJlZm9yZQ0KLSAqIGEgZmFjdG9yIG9mIE4gbGFyZ2VyIHRoYW4gZGVzaXJlZDsgc2luY2UgTj04IHRoaXMgY2FuIGJlIGN1cmVkIGJ5DQotICogYSBzaW1wbGUgcmlnaHQgc2hpZnQgYXQgdGhlIGVuZCBvZiB0aGUgYWxnb3JpdGhtLiAgVGhlIGFkdmFudGFnZSBvZg0KLSAqIHRoaXMgYXJyYW5nZW1lbnQgaXMgdGhhdCB3ZSBzYXZlIHR3byBtdWx0aXBsaWNhdGlvbnMgcGVyIDEtRCBJRENULA0KLSAqIGJlY2F1c2UgdGhlIHkwIGFuZCB5NCBpbnB1dHMgbmVlZCBub3QgYmUgZGl2aWRlZCBieSBzcXJ0KE4pLg0KLSAqDQotICogV2UgaGF2ZSB0byBkbyBhZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24gb2YgdGhlIGludGVnZXIgaW5wdXRzLCB3aGljaA0KLSAqIGlzIG5vIHByb2JsZW0sIGFuZCBtdWx0aXBsaWNhdGlvbiBieSBmcmFjdGlvbmFsIGNvbnN0YW50cywgd2hpY2ggaXMNCi0gKiBhIHByb2JsZW0gdG8gZG8gaW4gaW50ZWdlciBhcml0aG1ldGljLiAgV2UgbXVsdGlwbHkgYWxsIHRoZSBjb25zdGFudHMNCi0gKiBieSBDT05TVF9TQ0FMRSBhbmQgY29udmVydCB0aGVtIHRvIGludGVnZXIgY29uc3RhbnRzICh0aHVzIHJldGFpbmluZw0KLSAqIENPTlNUX0JJVFMgYml0cyBvZiBwcmVjaXNpb24gaW4gdGhlIGNvbnN0YW50cykuICBBZnRlciBkb2luZyBhDQotICogbXVsdGlwbGljYXRpb24gd2UgaGF2ZSB0byBkaXZpZGUgdGhlIHByb2R1Y3QgYnkgQ09OU1RfU0NBTEUsIHdpdGggcHJvcGVyDQotICogcm91bmRpbmcsIHRvIHByb2R1Y2UgdGhlIGNvcnJlY3Qgb3V0cHV0LiAgVGhpcyBkaXZpc2lvbiBjYW4gYmUgZG9uZQ0KLSAqIGNoZWFwbHkgYXMgYSByaWdodCBzaGlmdCBvZiBDT05TVF9CSVRTIGJpdHMuICBXZSBwb3N0cG9uZSBzaGlmdGluZw0KLSAqIGFzIGxvbmcgYXMgcG9zc2libGUgc28gdGhhdCBwYXJ0aWFsIHN1bXMgY2FuIGJlIGFkZGVkIHRvZ2V0aGVyIHdpdGgNCi0gKiBmdWxsIGZyYWN0aW9uYWwgcHJlY2lzaW9uLg0KLSAqDQotICogVGhlIG91dHB1dHMgb2YgdGhlIGZpcnN0IHBhc3MgYXJlIHNjYWxlZCB1cCBieSBQQVNTMV9CSVRTIGJpdHMgc28gdGhhdA0KLSAqIHRoZXkgYXJlIHJlcHJlc2VudGVkIHRvIGJldHRlci10aGFuLWludGVncmFsIHByZWNpc2lvbi4gIFRoZXNlIG91dHB1dHMNCi0gKiByZXF1aXJlIEJJVFNfSU5fSlNBTVBMRSArIFBBU1MxX0JJVFMgKyAzIGJpdHM7IHRoaXMgZml0cyBpbiBhIDE2LWJpdCB3b3JkDQotICogd2l0aCB0aGUgcmVjb21tZW5kZWQgc2NhbGluZy4gIChUbyBzY2FsZSB1cCAxMi1iaXQgc2FtcGxlIGRhdGEgZnVydGhlciwgYW4NCi0gKiBpbnRlcm1lZGlhdGUgSU5UMzIgYXJyYXkgd291bGQgYmUgbmVlZGVkLikNCi0gKg0KLSAqIFRvIGF2b2lkIG92ZXJmbG93IG9mIHRoZSAzMi1iaXQgaW50ZXJtZWRpYXRlIHJlc3VsdHMgaW4gcGFzcyAyLCB3ZSBtdXN0DQotICogaGF2ZSBCSVRTX0lOX0pTQU1QTEUgKyBDT05TVF9CSVRTICsgUEFTUzFfQklUUyA8PSAyNi4gIEVycm9yIGFuYWx5c2lzDQotICogc2hvd3MgdGhhdCB0aGUgdmFsdWVzIGdpdmVuIGJlbG93IGFyZSB0aGUgbW9zdCBlZmZlY3RpdmUuDQotICovDQotDQotI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4DQotI2RlZmluZSBDT05TVF9CSVRTICAxMw0KLSNkZWZpbmUgUEFTUzFfQklUUyAgMg0KLSNlbHNlDQotI2RlZmluZSBDT05TVF9CSVRTICAxMw0KLSNkZWZpbmUgUEFTUzFfQklUUyAgMQkJLyogbG9zZSBhIGxpdHRsZSBwcmVjaXNpb24gdG8gYXZvaWQgb3ZlcmZsb3cgKi8NCi0jZW5kaWYNCi0NCi0vKiBTb21lIEMgY29tcGlsZXJzIGZhaWwgdG8gcmVkdWNlICJGSVgoY29uc3RhbnQpIiBhdCBjb21waWxlIHRpbWUsIHRodXMNCi0gKiBjYXVzaW5nIGEgbG90IG9mIHVzZWxlc3MgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyBhdCBydW4gdGltZS4NCi0gKiBUbyBnZXQgYXJvdW5kIHRoaXMgd2UgdXNlIHRoZSBmb2xsb3dpbmcgcHJlLWNhbGN1bGF0ZWQgY29uc3RhbnRzLg0KLSAqIElmIHlvdSBjaGFuZ2UgQ09OU1RfQklUUyB5b3UgbWF5IHdhbnQgdG8gYWRkIGFwcHJvcHJpYXRlIHZhbHVlcy4NCi0gKiAoV2l0aCBhIHJlYXNvbmFibGUgQyBjb21waWxlciwgeW91IGNhbiBqdXN0IHJlbHkgb24gdGhlIEZJWCgpIG1hY3JvLi4uKQ0KLSAqLw0KLQ0KLSNpZiBDT05TVF9CSVRTID09IDEzDQotI2RlZmluZSBGSVhfMF8yOTg2MzEzMzYgICgoSU5UMzIpICAyNDQ2KQkvKiBGSVgoMC4yOTg2MzEzMzYpICovDQotI2RlZmluZSBGSVhfMF8zOTAxODA2NDQgICgoSU5UMzIpICAzMTk2KQkvKiBGSVgoMC4zOTAxODA2NDQpICovDQotI2RlZmluZSBGSVhfMF81NDExOTYxMDAgICgoSU5UMzIpICA0NDMzKQkvKiBGSVgoMC41NDExOTYxMDApICovDQotI2RlZmluZSBGSVhfMF83NjUzNjY4NjUgICgoSU5UMzIpICA2MjcwKQkvKiBGSVgoMC43NjUzNjY4NjUpICovDQotI2RlZmluZSBGSVhfMF84OTk5NzYyMjMgICgoSU5UMzIpICA3MzczKQkvKiBGSVgoMC44OTk5NzYyMjMpICovDQotI2RlZmluZSBGSVhfMV8xNzU4NzU2MDIgICgoSU5UMzIpICA5NjMzKQkvKiBGSVgoMS4xNzU4NzU2MDIpICovDQotI2RlZmluZSBGSVhfMV81MDEzMjExMTAgICgoSU5UMzIpICAxMjI5OSkJLyogRklYKDEuNTAxMzIxMTEwKSAqLw0KLSNkZWZpbmUgRklYXzFfODQ3NzU5MDY1ICAoKElOVDMyKSAgMTUxMzcpCS8qIEZJWCgxLjg0Nzc1OTA2NSkgKi8NCi0jZGVmaW5lIEZJWF8xXzk2MTU3MDU2MCAgKChJTlQzMikgIDE2MDY5KQkvKiBGSVgoMS45NjE1NzA1NjApICovDQotI2RlZmluZSBGSVhfMl8wNTMxMTk4NjkgICgoSU5UMzIpICAxNjgxOSkJLyogRklYKDIuMDUzMTE5ODY5KSAqLw0KLSNkZWZpbmUgRklYXzJfNTYyOTE1NDQ3ICAoKElOVDMyKSAgMjA5OTUpCS8qIEZJWCgyLjU2MjkxNTQ0NykgKi8NCi0jZGVmaW5lIEZJWF8zXzA3MjcxMTAyNiAgKChJTlQzMikgIDI1MTcyKQkvKiBGSVgoMy4wNzI3MTEwMjYpICovDQotI2Vsc2UNCi0jZGVmaW5lIEZJWF8wXzI5ODYzMTMzNiAgRklYKDAuMjk4NjMxMzM2KQ0KLSNkZWZpbmUgRklYXzBfMzkwMTgwNjQ0ICBGSVgoMC4zOTAxODA2NDQpDQotI2RlZmluZSBGSVhfMF81NDExOTYxMDAgIEZJWCgwLjU0MTE5NjEwMCkNCi0jZGVmaW5lIEZJWF8wXzc2NTM2Njg2NSAgRklYKDAuNzY1MzY2ODY1KQ0KLSNkZWZpbmUgRklYXzBfODk5OTc2MjIzICBGSVgoMC44OTk5NzYyMjMpDQotI2RlZmluZSBGSVhfMV8xNzU4NzU2MDIgIEZJWCgxLjE3NTg3NTYwMikNCi0jZGVmaW5lIEZJWF8xXzUwMTMyMTExMCAgRklYKDEuNTAxMzIxMTEwKQ0KLSNkZWZpbmUgRklYXzFfODQ3NzU5MDY1ICBGSVgoMS44NDc3NTkwNjUpDQotI2RlZmluZSBGSVhfMV85NjE1NzA1NjAgIEZJWCgxLjk2MTU3MDU2MCkNCi0jZGVmaW5lIEZJWF8yXzA1MzExOTg2OSAgRklYKDIuMDUzMTE5ODY5KQ0KLSNkZWZpbmUgRklYXzJfNTYyOTE1NDQ3ICBGSVgoMi41NjI5MTU0NDcpDQotI2RlZmluZSBGSVhfM18wNzI3MTEwMjYgIEZJWCgzLjA3MjcxMTAyNikNCi0jZW5kaWYNCi0NCi0NCi0vKiBNdWx0aXBseSBhbiBJTlQzMiB2YXJpYWJsZSBieSBhbiBJTlQzMiBjb25zdGFudCB0byB5aWVsZCBhbiBJTlQzMiByZXN1bHQuDQotICogRm9yIDgtYml0IHNhbXBsZXMgd2l0aCB0aGUgcmVjb21tZW5kZWQgc2NhbGluZywgYWxsIHRoZSB2YXJpYWJsZQ0KLSAqIGFuZCBjb25zdGFudCB2YWx1ZXMgaW52b2x2ZWQgYXJlIG5vIG1vcmUgdGhhbiAxNiBiaXRzIHdpZGUsIHNvIGENCi0gKiAxNngxNi0+MzIgYml0IG11bHRpcGx5IGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgYSBmdWxsIDMyeDMyIG11bHRpcGx5Lg0KLSAqIEZvciAxMi1iaXQgc2FtcGxlcywgYSBmdWxsIDMyLWJpdCBtdWx0aXBsaWNhdGlvbiB3aWxsIGJlIG5lZWRlZC4NCi0gKi8NCi0NCi0jaWYgQklUU19JTl9KU0FNUExFID09IDgNCi0jZGVmaW5lIE1VTFRJUExZKHZhcixjb25zdCkgIE1VTFRJUExZMTZDMTYodmFyLGNvbnN0KQ0KLSNlbHNlDQotI2RlZmluZSBNVUxUSVBMWSh2YXIsY29uc3QpICAoKHZhcikgKiAoY29uc3QpKQ0KLSNlbmRpZg0KLQ0KLQ0KLS8qIERlcXVhbnRpemUgYSBjb2VmZmljaWVudCBieSBtdWx0aXBseWluZyBpdCBieSB0aGUgbXVsdGlwbGllci10YWJsZQ0KLSAqIGVudHJ5OyBwcm9kdWNlIGFuIGludCByZXN1bHQuICBJbiB0aGlzIG1vZHVsZSwgYm90aCBpbnB1dHMgYW5kIHJlc3VsdA0KLSAqIGFyZSAxNiBiaXRzIG9yIGxlc3MsIHNvIGVpdGhlciBpbnQgb3Igc2hvcnQgbXVsdGlwbHkgd2lsbCB3b3JrLg0KLSAqLw0KLQ0KLSNkZWZpbmUgREVRVUFOVElaRShjb2VmLHF1YW50dmFsKSAgKCgoSVNMT1dfTVVMVF9UWVBFKSAoY29lZikpICogKHF1YW50dmFsKSkNCi0NCi0NCi0vKg0KLSAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotanBlZ19pZGN0X2lzbG93IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwNCi0JCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLA0KLQkJIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQ0KLXsNCi0gIElOVDMyIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDM7DQotICBJTlQzMiB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMzsNCi0gIElOVDMyIHoxLCB6MiwgejMsIHo0LCB6NTsNCi0gIEpDT0VGUFRSIGlucHRyOw0KLSAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7DQotICBpbnQgKiB3c3B0cjsNCi0gIEpTQU1QUk9XIG91dHB0cjsNCi0gIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7DQotICBpbnQgY3RyOw0KLSAgaW50IHdvcmtzcGFjZVtEQ1RTSVpFMl07CS8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLw0KLSAgU0hJRlRfVEVNUFMNCi0NCi0gIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8NCi0gIC8qIE5vdGUgcmVzdWx0cyBhcmUgc2NhbGVkIHVwIGJ5IHNxcnQoOCkgY29tcGFyZWQgdG8gYSB0cnVlIElEQ1Q7ICovDQotICAvKiBmdXJ0aGVybW9yZSwgd2Ugc2NhbGUgdGhlIHJlc3VsdHMgYnkgMioqUEFTUzFfQklUUy4gKi8NCi0NCi0gIGlucHRyID0gY29lZl9ibG9jazsNCi0gIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7DQotICB3c3B0ciA9IHdvcmtzcGFjZTsNCi0gIGZvciAoY3RyID0gRENUU0laRTsgY3RyID4gMDsgY3RyLS0pIHsNCi0gICAgLyogRHVlIHRvIHF1YW50aXphdGlvbiwgd2Ugd2lsbCB1c3VhbGx5IGZpbmQgdGhhdCBtYW55IG9mIHRoZSBpbnB1dA0KLSAgICAgKiBjb2VmZmljaWVudHMgYXJlIHplcm8sIGVzcGVjaWFsbHkgdGhlIEFDIHRlcm1zLiAgV2UgY2FuIGV4cGxvaXQgdGhpcw0KLSAgICAgKiBieSBzaG9ydC1jaXJjdWl0aW5nIHRoZSBJRENUIGNhbGN1bGF0aW9uIGZvciBhbnkgY29sdW1uIGluIHdoaWNoIGFsbA0KLSAgICAgKiB0aGUgQUMgdGVybXMgYXJlIHplcm8uICBJbiB0aGF0IGNhc2UgZWFjaCBvdXRwdXQgaXMgZXF1YWwgdG8gdGhlDQotICAgICAqIERDIGNvZWZmaWNpZW50ICh3aXRoIHNjYWxlIGZhY3RvciBhcyBuZWVkZWQpLg0KLSAgICAgKiBXaXRoIHR5cGljYWwgaW1hZ2VzIGFuZCBxdWFudGl6YXRpb24gdGFibGVzLCBoYWxmIG9yIG1vcmUgb2YgdGhlDQotICAgICAqIGNvbHVtbiBEQ1QgY2FsY3VsYXRpb25zIGNhbiBiZSBzaW1wbGlmaWVkIHRoaXMgd2F5Lg0KLSAgICAgKi8NCi0gICAgDQotICAgIGlmIChpbnB0cltEQ1RTSVpFKjFdID09IDAgJiYgaW5wdHJbRENUU0laRSoyXSA9PSAwICYmDQotCWlucHRyW0RDVFNJWkUqM10gPT0gMCAmJiBpbnB0cltEQ1RTSVpFKjRdID09IDAgJiYNCi0JaW5wdHJbRENUU0laRSo1XSA9PSAwICYmIGlucHRyW0RDVFNJWkUqNl0gPT0gMCAmJg0KLQlpbnB0cltEQ1RTSVpFKjddID09IDApIHsNCi0gICAgICAvKiBBQyB0ZXJtcyBhbGwgemVybyAqLw0KLSAgICAgIGludCBkY3ZhbCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSkgPDwgUEFTUzFfQklUUzsNCi0gICAgICANCi0gICAgICB3c3B0cltEQ1RTSVpFKjBdID0gZGN2YWw7DQotICAgICAgd3NwdHJbRENUU0laRSoxXSA9IGRjdmFsOw0KLSAgICAgIHdzcHRyW0RDVFNJWkUqMl0gPSBkY3ZhbDsNCi0gICAgICB3c3B0cltEQ1RTSVpFKjNdID0gZGN2YWw7DQotICAgICAgd3NwdHJbRENUU0laRSo0XSA9IGRjdmFsOw0KLSAgICAgIHdzcHRyW0RDVFNJWkUqNV0gPSBkY3ZhbDsNCi0gICAgICB3c3B0cltEQ1RTSVpFKjZdID0gZGN2YWw7DQotICAgICAgd3NwdHJbRENUU0laRSo3XSA9IGRjdmFsOw0KLSAgICAgIA0KLSAgICAgIGlucHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVycyB0byBuZXh0IGNvbHVtbiAqLw0KLSAgICAgIHF1YW50cHRyKys7DQotICAgICAgd3NwdHIrKzsNCi0gICAgICBjb250aW51ZTsNCi0gICAgfQ0KLSAgICANCi0gICAgLyogRXZlbiBwYXJ0OiByZXZlcnNlIHRoZSBldmVuIHBhcnQgb2YgdGhlIGZvcndhcmQgRENULiAqLw0KLSAgICAvKiBUaGUgcm90YXRvciBpcyBzcXJ0KDIpKmMoLTYpLiAqLw0KLSAgICANCi0gICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMl0sIHF1YW50cHRyW0RDVFNJWkUqMl0pOw0KLSAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo2XSwgcXVhbnRwdHJbRENUU0laRSo2XSk7DQotICAgIA0KLSAgICB6MSA9IE1VTFRJUExZKHoyICsgejMsIEZJWF8wXzU0MTE5NjEwMCk7DQotICAgIHRtcDIgPSB6MSArIE1VTFRJUExZKHozLCAtIEZJWF8xXzg0Nzc1OTA2NSk7DQotICAgIHRtcDMgPSB6MSArIE1VTFRJUExZKHoyLCBGSVhfMF83NjUzNjY4NjUpOw0KLSAgICANCi0gICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pOw0KLSAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo0XSwgcXVhbnRwdHJbRENUU0laRSo0XSk7DQotDQotICAgIHRtcDAgPSAoejIgKyB6MykgPDwgQ09OU1RfQklUUzsNCi0gICAgdG1wMSA9ICh6MiAtIHozKSA8PCBDT05TVF9CSVRTOw0KLSAgICANCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMzsNCi0gICAgdG1wMTMgPSB0bXAwIC0gdG1wMzsNCi0gICAgdG1wMTEgPSB0bXAxICsgdG1wMjsNCi0gICAgdG1wMTIgPSB0bXAxIC0gdG1wMjsNCi0gICAgDQotICAgIC8qIE9kZCBwYXJ0IHBlciBmaWd1cmUgODsgdGhlIG1hdHJpeCBpcyB1bml0YXJ5IGFuZCBoZW5jZSBpdHMNCi0gICAgICogdHJhbnNwb3NlIGlzIGl0cyBpbnZlcnNlLiAgaTAuLmkzIGFyZSB5Nyx5NSx5Myx5MSByZXNwZWN0aXZlbHkuDQotICAgICAqLw0KLSAgICANCi0gICAgdG1wMCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSk7DQotICAgIHRtcDEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNV0sIHF1YW50cHRyW0RDVFNJWkUqNV0pOw0KLSAgICB0bXAyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjNdLCBxdWFudHB0cltEQ1RTSVpFKjNdKTsNCi0gICAgdG1wMyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7DQotICAgIA0KLSAgICB6MSA9IHRtcDAgKyB0bXAzOw0KLSAgICB6MiA9IHRtcDEgKyB0bXAyOw0KLSAgICB6MyA9IHRtcDAgKyB0bXAyOw0KLSAgICB6NCA9IHRtcDEgKyB0bXAzOw0KLSAgICB6NSA9IE1VTFRJUExZKHozICsgejQsIEZJWF8xXzE3NTg3NTYwMik7IC8qIHNxcnQoMikgKiBjMyAqLw0KLSAgICANCi0gICAgdG1wMCA9IE1VTFRJUExZKHRtcDAsIEZJWF8wXzI5ODYzMTMzNik7IC8qIHNxcnQoMikgKiAoLWMxK2MzK2M1LWM3KSAqLw0KLSAgICB0bXAxID0gTVVMVElQTFkodG1wMSwgRklYXzJfMDUzMTE5ODY5KTsgLyogc3FydCgyKSAqICggYzErYzMtYzUrYzcpICovDQotICAgIHRtcDIgPSBNVUxUSVBMWSh0bXAyLCBGSVhfM18wNzI3MTEwMjYpOyAvKiBzcXJ0KDIpICogKCBjMStjMytjNS1jNykgKi8NCi0gICAgdG1wMyA9IE1VTFRJUExZKHRtcDMsIEZJWF8xXzUwMTMyMTExMCk7IC8qIHNxcnQoMikgKiAoIGMxK2MzLWM1LWM3KSAqLw0KLSAgICB6MSA9IE1VTFRJUExZKHoxLCAtIEZJWF8wXzg5OTk3NjIyMyk7IC8qIHNxcnQoMikgKiAoYzctYzMpICovDQotICAgIHoyID0gTVVMVElQTFkoejIsIC0gRklYXzJfNTYyOTE1NDQ3KTsgLyogc3FydCgyKSAqICgtYzEtYzMpICovDQotICAgIHozID0gTVVMVElQTFkoejMsIC0gRklYXzFfOTYxNTcwNTYwKTsgLyogc3FydCgyKSAqICgtYzMtYzUpICovDQotICAgIHo0ID0gTVVMVElQTFkoejQsIC0gRklYXzBfMzkwMTgwNjQ0KTsgLyogc3FydCgyKSAqIChjNS1jMykgKi8NCi0gICAgDQotICAgIHozICs9IHo1Ow0KLSAgICB6NCArPSB6NTsNCi0gICAgDQotICAgIHRtcDAgKz0gejEgKyB6MzsNCi0gICAgdG1wMSArPSB6MiArIHo0Ow0KLSAgICB0bXAyICs9IHoyICsgejM7DQotICAgIHRtcDMgKz0gejEgKyB6NDsNCi0gICAgDQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZTogaW5wdXRzIGFyZSB0bXAxMC4udG1wMTMsIHRtcDAuLnRtcDMgKi8NCi0gICAgDQotICAgIHdzcHRyW0RDVFNJWkUqMF0gPSAoaW50KSBERVNDQUxFKHRtcDEwICsgdG1wMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsNCi0gICAgd3NwdHJbRENUU0laRSo3XSA9IChpbnQpIERFU0NBTEUodG1wMTAgLSB0bXAzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOw0KLSAgICB3c3B0cltEQ1RTSVpFKjFdID0gKGludCkgREVTQ0FMRSh0bXAxMSArIHRtcDIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7DQotICAgIHdzcHRyW0RDVFNJWkUqNl0gPSAoaW50KSBERVNDQUxFKHRtcDExIC0gdG1wMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsNCi0gICAgd3NwdHJbRENUU0laRSoyXSA9IChpbnQpIERFU0NBTEUodG1wMTIgKyB0bXAxLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOw0KLSAgICB3c3B0cltEQ1RTSVpFKjVdID0gKGludCkgREVTQ0FMRSh0bXAxMiAtIHRtcDEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7DQotICAgIHdzcHRyW0RDVFNJWkUqM10gPSAoaW50KSBERVNDQUxFKHRtcDEzICsgdG1wMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsNCi0gICAgd3NwdHJbRENUU0laRSo0XSA9IChpbnQpIERFU0NBTEUodG1wMTMgLSB0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOw0KLSAgICANCi0gICAgaW5wdHIrKzsJCQkvKiBhZHZhbmNlIHBvaW50ZXJzIHRvIG5leHQgY29sdW1uICovDQotICAgIHF1YW50cHRyKys7DQotICAgIHdzcHRyKys7DQotICB9DQotICANCi0gIC8qIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovDQotICAvKiBOb3RlIHRoYXQgd2UgbXVzdCBkZXNjYWxlIHRoZSByZXN1bHRzIGJ5IGEgZmFjdG9yIG9mIDggPT0gMioqMywgKi8NCi0gIC8qIGFuZCBhbHNvIHVuZG8gdGhlIFBBU1MxX0JJVFMgc2NhbGluZy4gKi8NCi0NCi0gIHdzcHRyID0gd29ya3NwYWNlOw0KLSAgZm9yIChjdHIgPSAwOyBjdHIgPCBEQ1RTSVpFOyBjdHIrKykgew0KLSAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOw0KLSAgICAvKiBSb3dzIG9mIHplcm9lcyBjYW4gYmUgZXhwbG9pdGVkIGluIHRoZSBzYW1lIHdheSBhcyB3ZSBkaWQgd2l0aCBjb2x1bW5zLg0KLSAgICAgKiBIb3dldmVyLCB0aGUgY29sdW1uIGNhbGN1bGF0aW9uIGhhcyBjcmVhdGVkIG1hbnkgbm9uemVybyBBQyB0ZXJtcywgc28NCi0gICAgICogdGhlIHNpbXBsaWZpY2F0aW9uIGFwcGxpZXMgbGVzcyBvZnRlbiAodHlwaWNhbGx5IDUlIHRvIDEwJSBvZiB0aGUgdGltZSkuDQotICAgICAqIE9uIG1hY2hpbmVzIHdpdGggdmVyeSBmYXN0IG11bHRpcGxpY2F0aW9uLCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlDQotICAgICAqIHRlc3QgdGFrZXMgbW9yZSB0aW1lIHRoYW4gaXQncyB3b3J0aC4gIEluIHRoYXQgY2FzZSB0aGlzIHNlY3Rpb24NCi0gICAgICogbWF5IGJlIGNvbW1lbnRlZCBvdXQuDQotICAgICAqLw0KLSAgICANCi0jaWZuZGVmIE5PX1pFUk9fUk9XX1RFU1QNCi0gICAgaWYgKHdzcHRyWzFdID09IDAgJiYgd3NwdHJbMl0gPT0gMCAmJiB3c3B0clszXSA9PSAwICYmIHdzcHRyWzRdID09IDAgJiYNCi0Jd3NwdHJbNV0gPT0gMCAmJiB3c3B0cls2XSA9PSAwICYmIHdzcHRyWzddID09IDApIHsNCi0gICAgICAvKiBBQyB0ZXJtcyBhbGwgemVybyAqLw0KLSAgICAgIEpTQU1QTEUgZGN2YWwgPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKChJTlQzMikgd3NwdHJbMF0sIFBBU1MxX0JJVFMrMykNCi0JCQkJICAmIFJBTkdFX01BU0tdOw0KLSAgICAgIA0KLSAgICAgIG91dHB0clswXSA9IGRjdmFsOw0KLSAgICAgIG91dHB0clsxXSA9IGRjdmFsOw0KLSAgICAgIG91dHB0clsyXSA9IGRjdmFsOw0KLSAgICAgIG91dHB0clszXSA9IGRjdmFsOw0KLSAgICAgIG91dHB0cls0XSA9IGRjdmFsOw0KLSAgICAgIG91dHB0cls1XSA9IGRjdmFsOw0KLSAgICAgIG91dHB0cls2XSA9IGRjdmFsOw0KLSAgICAgIG91dHB0cls3XSA9IGRjdmFsOw0KLQ0KLSAgICAgIHdzcHRyICs9IERDVFNJWkU7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8NCi0gICAgICBjb250aW51ZTsNCi0gICAgfQ0KLSNlbmRpZg0KLSAgICANCi0gICAgLyogRXZlbiBwYXJ0OiByZXZlcnNlIHRoZSBldmVuIHBhcnQgb2YgdGhlIGZvcndhcmQgRENULiAqLw0KLSAgICAvKiBUaGUgcm90YXRvciBpcyBzcXJ0KDIpKmMoLTYpLiAqLw0KLSAgICANCi0gICAgejIgPSAoSU5UMzIpIHdzcHRyWzJdOw0KLSAgICB6MyA9IChJTlQzMikgd3NwdHJbNl07DQotICAgIA0KLSAgICB6MSA9IE1VTFRJUExZKHoyICsgejMsIEZJWF8wXzU0MTE5NjEwMCk7DQotICAgIHRtcDIgPSB6MSArIE1VTFRJUExZKHozLCAtIEZJWF8xXzg0Nzc1OTA2NSk7DQotICAgIHRtcDMgPSB6MSArIE1VTFRJUExZKHoyLCBGSVhfMF83NjUzNjY4NjUpOw0KLSAgICANCi0gICAgdG1wMCA9ICgoSU5UMzIpIHdzcHRyWzBdICsgKElOVDMyKSB3c3B0cls0XSkgPDwgQ09OU1RfQklUUzsNCi0gICAgdG1wMSA9ICgoSU5UMzIpIHdzcHRyWzBdIC0gKElOVDMyKSB3c3B0cls0XSkgPDwgQ09OU1RfQklUUzsNCi0gICAgDQotICAgIHRtcDEwID0gdG1wMCArIHRtcDM7DQotICAgIHRtcDEzID0gdG1wMCAtIHRtcDM7DQotICAgIHRtcDExID0gdG1wMSArIHRtcDI7DQotICAgIHRtcDEyID0gdG1wMSAtIHRtcDI7DQotICAgIA0KLSAgICAvKiBPZGQgcGFydCBwZXIgZmlndXJlIDg7IHRoZSBtYXRyaXggaXMgdW5pdGFyeSBhbmQgaGVuY2UgaXRzDQotICAgICAqIHRyYW5zcG9zZSBpcyBpdHMgaW52ZXJzZS4gIGkwLi5pMyBhcmUgeTcseTUseTMseTEgcmVzcGVjdGl2ZWx5Lg0KLSAgICAgKi8NCi0gICAgDQotICAgIHRtcDAgPSAoSU5UMzIpIHdzcHRyWzddOw0KLSAgICB0bXAxID0gKElOVDMyKSB3c3B0cls1XTsNCi0gICAgdG1wMiA9IChJTlQzMikgd3NwdHJbM107DQotICAgIHRtcDMgPSAoSU5UMzIpIHdzcHRyWzFdOw0KLSAgICANCi0gICAgejEgPSB0bXAwICsgdG1wMzsNCi0gICAgejIgPSB0bXAxICsgdG1wMjsNCi0gICAgejMgPSB0bXAwICsgdG1wMjsNCi0gICAgejQgPSB0bXAxICsgdG1wMzsNCi0gICAgejUgPSBNVUxUSVBMWSh6MyArIHo0LCBGSVhfMV8xNzU4NzU2MDIpOyAvKiBzcXJ0KDIpICogYzMgKi8NCi0gICAgDQotICAgIHRtcDAgPSBNVUxUSVBMWSh0bXAwLCBGSVhfMF8yOTg2MzEzMzYpOyAvKiBzcXJ0KDIpICogKC1jMStjMytjNS1jNykgKi8NCi0gICAgdG1wMSA9IE1VTFRJUExZKHRtcDEsIEZJWF8yXzA1MzExOTg2OSk7IC8qIHNxcnQoMikgKiAoIGMxK2MzLWM1K2M3KSAqLw0KLSAgICB0bXAyID0gTVVMVElQTFkodG1wMiwgRklYXzNfMDcyNzExMDI2KTsgLyogc3FydCgyKSAqICggYzErYzMrYzUtYzcpICovDQotICAgIHRtcDMgPSBNVUxUSVBMWSh0bXAzLCBGSVhfMV81MDEzMjExMTApOyAvKiBzcXJ0KDIpICogKCBjMStjMy1jNS1jNykgKi8NCi0gICAgejEgPSBNVUxUSVBMWSh6MSwgLSBGSVhfMF84OTk5NzYyMjMpOyAvKiBzcXJ0KDIpICogKGM3LWMzKSAqLw0KLSAgICB6MiA9IE1VTFRJUExZKHoyLCAtIEZJWF8yXzU2MjkxNTQ0Nyk7IC8qIHNxcnQoMikgKiAoLWMxLWMzKSAqLw0KLSAgICB6MyA9IE1VTFRJUExZKHozLCAtIEZJWF8xXzk2MTU3MDU2MCk7IC8qIHNxcnQoMikgKiAoLWMzLWM1KSAqLw0KLSAgICB6NCA9IE1VTFRJUExZKHo0LCAtIEZJWF8wXzM5MDE4MDY0NCk7IC8qIHNxcnQoMikgKiAoYzUtYzMpICovDQotICAgIA0KLSAgICB6MyArPSB6NTsNCi0gICAgejQgKz0gejU7DQotICAgIA0KLSAgICB0bXAwICs9IHoxICsgejM7DQotICAgIHRtcDEgKz0gejIgKyB6NDsNCi0gICAgdG1wMiArPSB6MiArIHozOw0KLSAgICB0bXAzICs9IHoxICsgejQ7DQotICAgIA0KLSAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2U6IGlucHV0cyBhcmUgdG1wMTAuLnRtcDEzLCB0bXAwLi50bXAzICovDQotICAgIA0KLSAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKHRtcDEwICsgdG1wMywNCi0JCQkJCSAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpDQotCQkJICAgICYgUkFOR0VfTUFTS107DQotICAgIG91dHB0cls3XSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTAgLSB0bXAzLA0KLQkJCQkJICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykNCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsNCi0gICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSh0bXAxMSArIHRtcDIsDQotCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQ0KLQkJCSAgICAmIFJBTkdFX01BU0tdOw0KLSAgICBvdXRwdHJbNl0gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKHRtcDExIC0gdG1wMiwNCi0JCQkJCSAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpDQotCQkJICAgICYgUkFOR0VfTUFTS107DQotICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTIgKyB0bXAxLA0KLQkJCQkJICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykNCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsNCi0gICAgb3V0cHRyWzVdID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSh0bXAxMiAtIHRtcDEsDQotCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQ0KLQkJCSAgICAmIFJBTkdFX01BU0tdOw0KLSAgICBvdXRwdHJbM10gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKHRtcDEzICsgdG1wMCwNCi0JCQkJCSAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpDQotCQkJICAgICYgUkFOR0VfTUFTS107DQotICAgIG91dHB0cls0XSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTMgLSB0bXAwLA0KLQkJCQkJICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykNCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsNCi0gICAgDQotICAgIHdzcHRyICs9IERDVFNJWkU7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8NCi0gIH0NCi19DQotDQotI2VuZGlmIC8qIERDVF9JU0xPV19TVVBQT1JURUQgKi8NCi0NCi0jZW5kaWYgLy9fRlhfSlBFR19UVVJCT18NCisjaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQorLyoKKyAqIGppZGN0aW50LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5OCwgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhIHNsb3ctYnV0LWFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YgdGhlCisgKiBpbnZlcnNlIERDVCAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuICBJbiB0aGUgSUpHIGNvZGUsIHRoaXMgcm91dGluZQorICogbXVzdCBhbHNvIHBlcmZvcm0gZGVxdWFudGl6YXRpb24gb2YgdGhlIGlucHV0IGNvZWZmaWNpZW50cy4KKyAqCisgKiBBIDItRCBJRENUIGNhbiBiZSBkb25lIGJ5IDEtRCBJRENUIG9uIGVhY2ggY29sdW1uIGZvbGxvd2VkIGJ5IDEtRCBJRENUCisgKiBvbiBlYWNoIHJvdyAob3IgdmljZSB2ZXJzYSwgYnV0IGl0J3MgbW9yZSBjb252ZW5pZW50IHRvIGVtaXQgYSByb3cgYXQKKyAqIGEgdGltZSkuICBEaXJlY3QgYWxnb3JpdGhtcyBhcmUgYWxzbyBhdmFpbGFibGUsIGJ1dCB0aGV5IGFyZSBtdWNoIG1vcmUKKyAqIGNvbXBsZXggYW5kIHNlZW0gbm90IHRvIGJlIGFueSBmYXN0ZXIgd2hlbiByZWR1Y2VkIHRvIGNvZGUuCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBhbiBhbGdvcml0aG0gZGVzY3JpYmVkIGluCisgKiAgIEMuIExvZWZmbGVyLCBBLiBMaWd0ZW5iZXJnIGFuZCBHLiBNb3NjaHl0eiwgIlByYWN0aWNhbCBGYXN0IDEtRCBEQ1QKKyAqICAgQWxnb3JpdGhtcyB3aXRoIDExIE11bHRpcGxpY2F0aW9ucyIsIFByb2MuIEludCdsLiBDb25mLiBvbiBBY291c3RpY3MsCisgKiAgIFNwZWVjaCwgYW5kIFNpZ25hbCBQcm9jZXNzaW5nIDE5ODkgKElDQVNTUCAnODkpLCBwcC4gOTg4LTk5MS4KKyAqIFRoZSBwcmltYXJ5IGFsZ29yaXRobSBkZXNjcmliZWQgdGhlcmUgdXNlcyAxMSBtdWx0aXBsaWVzIGFuZCAyOSBhZGRzLgorICogV2UgdXNlIHRoZWlyIGFsdGVybmF0ZSBtZXRob2Qgd2l0aCAxMiBtdWx0aXBsaWVzIGFuZCAzMiBhZGRzLgorICogVGhlIGFkdmFudGFnZSBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IG5vIGRhdGEgcGF0aCBjb250YWlucyBtb3JlIHRoYW4gb25lCisgKiBtdWx0aXBsaWNhdGlvbjsgdGhpcyBhbGxvd3MgYSB2ZXJ5IHNpbXBsZSBhbmQgYWNjdXJhdGUgaW1wbGVtZW50YXRpb24gaW4KKyAqIHNjYWxlZCBmaXhlZC1wb2ludCBhcml0aG1ldGljLCB3aXRoIGEgbWluaW1hbCBudW1iZXIgb2Ygc2hpZnRzLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqZGN0LmgiCQkvKiBQcml2YXRlIGRlY2xhcmF0aW9ucyBmb3IgRENUIHN1YnN5c3RlbSAqLworCisjaWZkZWYgRENUX0lTTE9XX1NVUFBPUlRFRAorCisKKy8qCisgKiBUaGlzIG1vZHVsZSBpcyBzcGVjaWFsaXplZCB0byB0aGUgY2FzZSBEQ1RTSVpFID0gOC4KKyAqLworCisjaWYgRENUU0laRSAhPSA4CisgIFNvcnJ5LCB0aGlzIGNvZGUgb25seSBjb3BlcyB3aXRoIDh4OCBEQ1RzLiAvKiBkZWxpYmVyYXRlIHN5bnRheCBlcnIgKi8KKyNlbmRpZgorCisKKy8qCisgKiBUaGUgcG9vcCBvbiB0aGlzIHNjYWxpbmcgc3R1ZmYgaXMgYXMgZm9sbG93czoKKyAqCisgKiBFYWNoIDEtRCBJRENUIHN0ZXAgcHJvZHVjZXMgb3V0cHV0cyB3aGljaCBhcmUgYSBmYWN0b3Igb2Ygc3FydChOKQorICogbGFyZ2VyIHRoYW4gdGhlIHRydWUgSURDVCBvdXRwdXRzLiAgVGhlIGZpbmFsIG91dHB1dHMgYXJlIHRoZXJlZm9yZQorICogYSBmYWN0b3Igb2YgTiBsYXJnZXIgdGhhbiBkZXNpcmVkOyBzaW5jZSBOPTggdGhpcyBjYW4gYmUgY3VyZWQgYnkKKyAqIGEgc2ltcGxlIHJpZ2h0IHNoaWZ0IGF0IHRoZSBlbmQgb2YgdGhlIGFsZ29yaXRobS4gIFRoZSBhZHZhbnRhZ2Ugb2YKKyAqIHRoaXMgYXJyYW5nZW1lbnQgaXMgdGhhdCB3ZSBzYXZlIHR3byBtdWx0aXBsaWNhdGlvbnMgcGVyIDEtRCBJRENULAorICogYmVjYXVzZSB0aGUgeTAgYW5kIHk0IGlucHV0cyBuZWVkIG5vdCBiZSBkaXZpZGVkIGJ5IHNxcnQoTikuCisgKgorICogV2UgaGF2ZSB0byBkbyBhZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24gb2YgdGhlIGludGVnZXIgaW5wdXRzLCB3aGljaAorICogaXMgbm8gcHJvYmxlbSwgYW5kIG11bHRpcGxpY2F0aW9uIGJ5IGZyYWN0aW9uYWwgY29uc3RhbnRzLCB3aGljaCBpcworICogYSBwcm9ibGVtIHRvIGRvIGluIGludGVnZXIgYXJpdGhtZXRpYy4gIFdlIG11bHRpcGx5IGFsbCB0aGUgY29uc3RhbnRzCisgKiBieSBDT05TVF9TQ0FMRSBhbmQgY29udmVydCB0aGVtIHRvIGludGVnZXIgY29uc3RhbnRzICh0aHVzIHJldGFpbmluZworICogQ09OU1RfQklUUyBiaXRzIG9mIHByZWNpc2lvbiBpbiB0aGUgY29uc3RhbnRzKS4gIEFmdGVyIGRvaW5nIGEKKyAqIG11bHRpcGxpY2F0aW9uIHdlIGhhdmUgdG8gZGl2aWRlIHRoZSBwcm9kdWN0IGJ5IENPTlNUX1NDQUxFLCB3aXRoIHByb3BlcgorICogcm91bmRpbmcsIHRvIHByb2R1Y2UgdGhlIGNvcnJlY3Qgb3V0cHV0LiAgVGhpcyBkaXZpc2lvbiBjYW4gYmUgZG9uZQorICogY2hlYXBseSBhcyBhIHJpZ2h0IHNoaWZ0IG9mIENPTlNUX0JJVFMgYml0cy4gIFdlIHBvc3Rwb25lIHNoaWZ0aW5nCisgKiBhcyBsb25nIGFzIHBvc3NpYmxlIHNvIHRoYXQgcGFydGlhbCBzdW1zIGNhbiBiZSBhZGRlZCB0b2dldGhlciB3aXRoCisgKiBmdWxsIGZyYWN0aW9uYWwgcHJlY2lzaW9uLgorICoKKyAqIFRoZSBvdXRwdXRzIG9mIHRoZSBmaXJzdCBwYXNzIGFyZSBzY2FsZWQgdXAgYnkgUEFTUzFfQklUUyBiaXRzIHNvIHRoYXQKKyAqIHRoZXkgYXJlIHJlcHJlc2VudGVkIHRvIGJldHRlci10aGFuLWludGVncmFsIHByZWNpc2lvbi4gIFRoZXNlIG91dHB1dHMKKyAqIHJlcXVpcmUgQklUU19JTl9KU0FNUExFICsgUEFTUzFfQklUUyArIDMgYml0czsgdGhpcyBmaXRzIGluIGEgMTYtYml0IHdvcmQKKyAqIHdpdGggdGhlIHJlY29tbWVuZGVkIHNjYWxpbmcuICAoVG8gc2NhbGUgdXAgMTItYml0IHNhbXBsZSBkYXRhIGZ1cnRoZXIsIGFuCisgKiBpbnRlcm1lZGlhdGUgSU5UMzIgYXJyYXkgd291bGQgYmUgbmVlZGVkLikKKyAqCisgKiBUbyBhdm9pZCBvdmVyZmxvdyBvZiB0aGUgMzItYml0IGludGVybWVkaWF0ZSByZXN1bHRzIGluIHBhc3MgMiwgd2UgbXVzdAorICogaGF2ZSBCSVRTX0lOX0pTQU1QTEUgKyBDT05TVF9CSVRTICsgUEFTUzFfQklUUyA8PSAyNi4gIEVycm9yIGFuYWx5c2lzCisgKiBzaG93cyB0aGF0IHRoZSB2YWx1ZXMgZ2l2ZW4gYmVsb3cgYXJlIHRoZSBtb3N0IGVmZmVjdGl2ZS4KKyAqLworCisjaWYgQklUU19JTl9KU0FNUExFID09IDgKKyNkZWZpbmUgQ09OU1RfQklUUyAgMTMKKyNkZWZpbmUgUEFTUzFfQklUUyAgMgorI2Vsc2UKKyNkZWZpbmUgQ09OU1RfQklUUyAgMTMKKyNkZWZpbmUgUEFTUzFfQklUUyAgMQkJLyogbG9zZSBhIGxpdHRsZSBwcmVjaXNpb24gdG8gYXZvaWQgb3ZlcmZsb3cgKi8KKyNlbmRpZgorCisvKiBTb21lIEMgY29tcGlsZXJzIGZhaWwgdG8gcmVkdWNlICJGSVgoY29uc3RhbnQpIiBhdCBjb21waWxlIHRpbWUsIHRodXMKKyAqIGNhdXNpbmcgYSBsb3Qgb2YgdXNlbGVzcyBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIGF0IHJ1biB0aW1lLgorICogVG8gZ2V0IGFyb3VuZCB0aGlzIHdlIHVzZSB0aGUgZm9sbG93aW5nIHByZS1jYWxjdWxhdGVkIGNvbnN0YW50cy4KKyAqIElmIHlvdSBjaGFuZ2UgQ09OU1RfQklUUyB5b3UgbWF5IHdhbnQgdG8gYWRkIGFwcHJvcHJpYXRlIHZhbHVlcy4KKyAqIChXaXRoIGEgcmVhc29uYWJsZSBDIGNvbXBpbGVyLCB5b3UgY2FuIGp1c3QgcmVseSBvbiB0aGUgRklYKCkgbWFjcm8uLi4pCisgKi8KKworI2lmIENPTlNUX0JJVFMgPT0gMTMKKyNkZWZpbmUgRklYXzBfMjk4NjMxMzM2ICAoKElOVDMyKSAgMjQ0NikJLyogRklYKDAuMjk4NjMxMzM2KSAqLworI2RlZmluZSBGSVhfMF8zOTAxODA2NDQgICgoSU5UMzIpICAzMTk2KQkvKiBGSVgoMC4zOTAxODA2NDQpICovCisjZGVmaW5lIEZJWF8wXzU0MTE5NjEwMCAgKChJTlQzMikgIDQ0MzMpCS8qIEZJWCgwLjU0MTE5NjEwMCkgKi8KKyNkZWZpbmUgRklYXzBfNzY1MzY2ODY1ICAoKElOVDMyKSAgNjI3MCkJLyogRklYKDAuNzY1MzY2ODY1KSAqLworI2RlZmluZSBGSVhfMF84OTk5NzYyMjMgICgoSU5UMzIpICA3MzczKQkvKiBGSVgoMC44OTk5NzYyMjMpICovCisjZGVmaW5lIEZJWF8xXzE3NTg3NTYwMiAgKChJTlQzMikgIDk2MzMpCS8qIEZJWCgxLjE3NTg3NTYwMikgKi8KKyNkZWZpbmUgRklYXzFfNTAxMzIxMTEwICAoKElOVDMyKSAgMTIyOTkpCS8qIEZJWCgxLjUwMTMyMTExMCkgKi8KKyNkZWZpbmUgRklYXzFfODQ3NzU5MDY1ICAoKElOVDMyKSAgMTUxMzcpCS8qIEZJWCgxLjg0Nzc1OTA2NSkgKi8KKyNkZWZpbmUgRklYXzFfOTYxNTcwNTYwICAoKElOVDMyKSAgMTYwNjkpCS8qIEZJWCgxLjk2MTU3MDU2MCkgKi8KKyNkZWZpbmUgRklYXzJfMDUzMTE5ODY5ICAoKElOVDMyKSAgMTY4MTkpCS8qIEZJWCgyLjA1MzExOTg2OSkgKi8KKyNkZWZpbmUgRklYXzJfNTYyOTE1NDQ3ICAoKElOVDMyKSAgMjA5OTUpCS8qIEZJWCgyLjU2MjkxNTQ0NykgKi8KKyNkZWZpbmUgRklYXzNfMDcyNzExMDI2ICAoKElOVDMyKSAgMjUxNzIpCS8qIEZJWCgzLjA3MjcxMTAyNikgKi8KKyNlbHNlCisjZGVmaW5lIEZJWF8wXzI5ODYzMTMzNiAgRklYKDAuMjk4NjMxMzM2KQorI2RlZmluZSBGSVhfMF8zOTAxODA2NDQgIEZJWCgwLjM5MDE4MDY0NCkKKyNkZWZpbmUgRklYXzBfNTQxMTk2MTAwICBGSVgoMC41NDExOTYxMDApCisjZGVmaW5lIEZJWF8wXzc2NTM2Njg2NSAgRklYKDAuNzY1MzY2ODY1KQorI2RlZmluZSBGSVhfMF84OTk5NzYyMjMgIEZJWCgwLjg5OTk3NjIyMykKKyNkZWZpbmUgRklYXzFfMTc1ODc1NjAyICBGSVgoMS4xNzU4NzU2MDIpCisjZGVmaW5lIEZJWF8xXzUwMTMyMTExMCAgRklYKDEuNTAxMzIxMTEwKQorI2RlZmluZSBGSVhfMV84NDc3NTkwNjUgIEZJWCgxLjg0Nzc1OTA2NSkKKyNkZWZpbmUgRklYXzFfOTYxNTcwNTYwICBGSVgoMS45NjE1NzA1NjApCisjZGVmaW5lIEZJWF8yXzA1MzExOTg2OSAgRklYKDIuMDUzMTE5ODY5KQorI2RlZmluZSBGSVhfMl81NjI5MTU0NDcgIEZJWCgyLjU2MjkxNTQ0NykKKyNkZWZpbmUgRklYXzNfMDcyNzExMDI2ICBGSVgoMy4wNzI3MTEwMjYpCisjZW5kaWYKKworCisvKiBNdWx0aXBseSBhbiBJTlQzMiB2YXJpYWJsZSBieSBhbiBJTlQzMiBjb25zdGFudCB0byB5aWVsZCBhbiBJTlQzMiByZXN1bHQuCisgKiBGb3IgOC1iaXQgc2FtcGxlcyB3aXRoIHRoZSByZWNvbW1lbmRlZCBzY2FsaW5nLCBhbGwgdGhlIHZhcmlhYmxlCisgKiBhbmQgY29uc3RhbnQgdmFsdWVzIGludm9sdmVkIGFyZSBubyBtb3JlIHRoYW4gMTYgYml0cyB3aWRlLCBzbyBhCisgKiAxNngxNi0+MzIgYml0IG11bHRpcGx5IGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgYSBmdWxsIDMyeDMyIG11bHRpcGx5LgorICogRm9yIDEyLWJpdCBzYW1wbGVzLCBhIGZ1bGwgMzItYml0IG11bHRpcGxpY2F0aW9uIHdpbGwgYmUgbmVlZGVkLgorICovCisKKyNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOAorI2RlZmluZSBNVUxUSVBMWSh2YXIsY29uc3QpICBNVUxUSVBMWTE2QzE2KHZhcixjb25zdCkKKyNlbHNlCisjZGVmaW5lIE1VTFRJUExZKHZhcixjb25zdCkgICgodmFyKSAqIChjb25zdCkpCisjZW5kaWYKKworCisvKiBEZXF1YW50aXplIGEgY29lZmZpY2llbnQgYnkgbXVsdGlwbHlpbmcgaXQgYnkgdGhlIG11bHRpcGxpZXItdGFibGUKKyAqIGVudHJ5OyBwcm9kdWNlIGFuIGludCByZXN1bHQuICBJbiB0aGlzIG1vZHVsZSwgYm90aCBpbnB1dHMgYW5kIHJlc3VsdAorICogYXJlIDE2IGJpdHMgb3IgbGVzcywgc28gZWl0aGVyIGludCBvciBzaG9ydCBtdWx0aXBseSB3aWxsIHdvcmsuCisgKi8KKworI2RlZmluZSBERVFVQU5USVpFKGNvZWYscXVhbnR2YWwpICAoKChJU0xPV19NVUxUX1RZUEUpIChjb2VmKSkgKiAocXVhbnR2YWwpKQorCisKKy8qCisgKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19pZGN0X2lzbG93IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkJIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisJCSBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAgSU5UMzIgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMzsKKyAgSU5UMzIgdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTM7CisgIElOVDMyIHoxLCB6MiwgejMsIHo0LCB6NTsKKyAgSkNPRUZQVFIgaW5wdHI7CisgIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOworICBpbnQgKiB3c3B0cjsKKyAgSlNBTVBST1cgb3V0cHRyOworICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOworICBpbnQgY3RyOworICBpbnQgd29ya3NwYWNlW0RDVFNJWkUyXTsJLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCisgIFNISUZUX1RFTVBTCisKKyAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LiAqLworICAvKiBOb3RlIHJlc3VsdHMgYXJlIHNjYWxlZCB1cCBieSBzcXJ0KDgpIGNvbXBhcmVkIHRvIGEgdHJ1ZSBJRENUOyAqLworICAvKiBmdXJ0aGVybW9yZSwgd2Ugc2NhbGUgdGhlIHJlc3VsdHMgYnkgMioqUEFTUzFfQklUUy4gKi8KKworICBpbnB0ciA9IGNvZWZfYmxvY2s7CisgIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7CisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IERDVFNJWkU7IGN0ciA+IDA7IGN0ci0tKSB7CisgICAgLyogRHVlIHRvIHF1YW50aXphdGlvbiwgd2Ugd2lsbCB1c3VhbGx5IGZpbmQgdGhhdCBtYW55IG9mIHRoZSBpbnB1dAorICAgICAqIGNvZWZmaWNpZW50cyBhcmUgemVybywgZXNwZWNpYWxseSB0aGUgQUMgdGVybXMuICBXZSBjYW4gZXhwbG9pdCB0aGlzCisgICAgICogYnkgc2hvcnQtY2lyY3VpdGluZyB0aGUgSURDVCBjYWxjdWxhdGlvbiBmb3IgYW55IGNvbHVtbiBpbiB3aGljaCBhbGwKKyAgICAgKiB0aGUgQUMgdGVybXMgYXJlIHplcm8uICBJbiB0aGF0IGNhc2UgZWFjaCBvdXRwdXQgaXMgZXF1YWwgdG8gdGhlCisgICAgICogREMgY29lZmZpY2llbnQgKHdpdGggc2NhbGUgZmFjdG9yIGFzIG5lZWRlZCkuCisgICAgICogV2l0aCB0eXBpY2FsIGltYWdlcyBhbmQgcXVhbnRpemF0aW9uIHRhYmxlcywgaGFsZiBvciBtb3JlIG9mIHRoZQorICAgICAqIGNvbHVtbiBEQ1QgY2FsY3VsYXRpb25zIGNhbiBiZSBzaW1wbGlmaWVkIHRoaXMgd2F5LgorICAgICAqLworICAgIAorICAgIGlmIChpbnB0cltEQ1RTSVpFKjFdID09IDAgJiYgaW5wdHJbRENUU0laRSoyXSA9PSAwICYmCisJaW5wdHJbRENUU0laRSozXSA9PSAwICYmIGlucHRyW0RDVFNJWkUqNF0gPT0gMCAmJgorCWlucHRyW0RDVFNJWkUqNV0gPT0gMCAmJiBpbnB0cltEQ1RTSVpFKjZdID09IDAgJiYKKwlpbnB0cltEQ1RTSVpFKjddID09IDApIHsKKyAgICAgIC8qIEFDIHRlcm1zIGFsbCB6ZXJvICovCisgICAgICBpbnQgZGN2YWwgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pIDw8IFBBU1MxX0JJVFM7CisgICAgICAKKyAgICAgIHdzcHRyW0RDVFNJWkUqMF0gPSBkY3ZhbDsKKyAgICAgIHdzcHRyW0RDVFNJWkUqMV0gPSBkY3ZhbDsKKyAgICAgIHdzcHRyW0RDVFNJWkUqMl0gPSBkY3ZhbDsKKyAgICAgIHdzcHRyW0RDVFNJWkUqM10gPSBkY3ZhbDsKKyAgICAgIHdzcHRyW0RDVFNJWkUqNF0gPSBkY3ZhbDsKKyAgICAgIHdzcHRyW0RDVFNJWkUqNV0gPSBkY3ZhbDsKKyAgICAgIHdzcHRyW0RDVFNJWkUqNl0gPSBkY3ZhbDsKKyAgICAgIHdzcHRyW0RDVFNJWkUqN10gPSBkY3ZhbDsKKyAgICAgIAorICAgICAgaW5wdHIrKzsJCQkvKiBhZHZhbmNlIHBvaW50ZXJzIHRvIG5leHQgY29sdW1uICovCisgICAgICBxdWFudHB0cisrOworICAgICAgd3NwdHIrKzsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICAKKyAgICAvKiBFdmVuIHBhcnQ6IHJldmVyc2UgdGhlIGV2ZW4gcGFydCBvZiB0aGUgZm9yd2FyZCBEQ1QuICovCisgICAgLyogVGhlIHJvdGF0b3IgaXMgc3FydCgyKSpjKC02KS4gKi8KKyAgICAKKyAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoyXSwgcXVhbnRwdHJbRENUU0laRSoyXSk7CisgICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNl0sIHF1YW50cHRyW0RDVFNJWkUqNl0pOworICAgIAorICAgIHoxID0gTVVMVElQTFkoejIgKyB6MywgRklYXzBfNTQxMTk2MTAwKTsKKyAgICB0bXAyID0gejEgKyBNVUxUSVBMWSh6MywgLSBGSVhfMV84NDc3NTkwNjUpOworICAgIHRtcDMgPSB6MSArIE1VTFRJUExZKHoyLCBGSVhfMF83NjUzNjY4NjUpOworICAgIAorICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKTsKKyAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo0XSwgcXVhbnRwdHJbRENUU0laRSo0XSk7CisKKyAgICB0bXAwID0gKHoyICsgejMpIDw8IENPTlNUX0JJVFM7CisgICAgdG1wMSA9ICh6MiAtIHozKSA8PCBDT05TVF9CSVRTOworICAgIAorICAgIHRtcDEwID0gdG1wMCArIHRtcDM7CisgICAgdG1wMTMgPSB0bXAwIC0gdG1wMzsKKyAgICB0bXAxMSA9IHRtcDEgKyB0bXAyOworICAgIHRtcDEyID0gdG1wMSAtIHRtcDI7CisgICAgCisgICAgLyogT2RkIHBhcnQgcGVyIGZpZ3VyZSA4OyB0aGUgbWF0cml4IGlzIHVuaXRhcnkgYW5kIGhlbmNlIGl0cworICAgICAqIHRyYW5zcG9zZSBpcyBpdHMgaW52ZXJzZS4gIGkwLi5pMyBhcmUgeTcseTUseTMseTEgcmVzcGVjdGl2ZWx5LgorICAgICAqLworICAgIAorICAgIHRtcDAgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqN10sIHF1YW50cHRyW0RDVFNJWkUqN10pOworICAgIHRtcDEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNV0sIHF1YW50cHRyW0RDVFNJWkUqNV0pOworICAgIHRtcDIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOworICAgIHRtcDMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMV0sIHF1YW50cHRyW0RDVFNJWkUqMV0pOworICAgIAorICAgIHoxID0gdG1wMCArIHRtcDM7CisgICAgejIgPSB0bXAxICsgdG1wMjsKKyAgICB6MyA9IHRtcDAgKyB0bXAyOworICAgIHo0ID0gdG1wMSArIHRtcDM7CisgICAgejUgPSBNVUxUSVBMWSh6MyArIHo0LCBGSVhfMV8xNzU4NzU2MDIpOyAvKiBzcXJ0KDIpICogYzMgKi8KKyAgICAKKyAgICB0bXAwID0gTVVMVElQTFkodG1wMCwgRklYXzBfMjk4NjMxMzM2KTsgLyogc3FydCgyKSAqICgtYzErYzMrYzUtYzcpICovCisgICAgdG1wMSA9IE1VTFRJUExZKHRtcDEsIEZJWF8yXzA1MzExOTg2OSk7IC8qIHNxcnQoMikgKiAoIGMxK2MzLWM1K2M3KSAqLworICAgIHRtcDIgPSBNVUxUSVBMWSh0bXAyLCBGSVhfM18wNzI3MTEwMjYpOyAvKiBzcXJ0KDIpICogKCBjMStjMytjNS1jNykgKi8KKyAgICB0bXAzID0gTVVMVElQTFkodG1wMywgRklYXzFfNTAxMzIxMTEwKTsgLyogc3FydCgyKSAqICggYzErYzMtYzUtYzcpICovCisgICAgejEgPSBNVUxUSVBMWSh6MSwgLSBGSVhfMF84OTk5NzYyMjMpOyAvKiBzcXJ0KDIpICogKGM3LWMzKSAqLworICAgIHoyID0gTVVMVElQTFkoejIsIC0gRklYXzJfNTYyOTE1NDQ3KTsgLyogc3FydCgyKSAqICgtYzEtYzMpICovCisgICAgejMgPSBNVUxUSVBMWSh6MywgLSBGSVhfMV85NjE1NzA1NjApOyAvKiBzcXJ0KDIpICogKC1jMy1jNSkgKi8KKyAgICB6NCA9IE1VTFRJUExZKHo0LCAtIEZJWF8wXzM5MDE4MDY0NCk7IC8qIHNxcnQoMikgKiAoYzUtYzMpICovCisgICAgCisgICAgejMgKz0gejU7CisgICAgejQgKz0gejU7CisgICAgCisgICAgdG1wMCArPSB6MSArIHozOworICAgIHRtcDEgKz0gejIgKyB6NDsKKyAgICB0bXAyICs9IHoyICsgejM7CisgICAgdG1wMyArPSB6MSArIHo0OworICAgIAorICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZTogaW5wdXRzIGFyZSB0bXAxMC4udG1wMTMsIHRtcDAuLnRtcDMgKi8KKyAgICAKKyAgICB3c3B0cltEQ1RTSVpFKjBdID0gKGludCkgREVTQ0FMRSh0bXAxMCArIHRtcDMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbRENUU0laRSo3XSA9IChpbnQpIERFU0NBTEUodG1wMTAgLSB0bXAzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyW0RDVFNJWkUqMV0gPSAoaW50KSBERVNDQUxFKHRtcDExICsgdG1wMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cltEQ1RTSVpFKjZdID0gKGludCkgREVTQ0FMRSh0bXAxMSAtIHRtcDIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbRENUU0laRSoyXSA9IChpbnQpIERFU0NBTEUodG1wMTIgKyB0bXAxLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyW0RDVFNJWkUqNV0gPSAoaW50KSBERVNDQUxFKHRtcDEyIC0gdG1wMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cltEQ1RTSVpFKjNdID0gKGludCkgREVTQ0FMRSh0bXAxMyArIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbRENUU0laRSo0XSA9IChpbnQpIERFU0NBTEUodG1wMTMgLSB0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIAorICAgIGlucHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVycyB0byBuZXh0IGNvbHVtbiAqLworICAgIHF1YW50cHRyKys7CisgICAgd3NwdHIrKzsKKyAgfQorICAKKyAgLyogUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8KKyAgLyogTm90ZSB0aGF0IHdlIG11c3QgZGVzY2FsZSB0aGUgcmVzdWx0cyBieSBhIGZhY3RvciBvZiA4ID09IDIqKjMsICovCisgIC8qIGFuZCBhbHNvIHVuZG8gdGhlIFBBU1MxX0JJVFMgc2NhbGluZy4gKi8KKworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSAwOyBjdHIgPCBEQ1RTSVpFOyBjdHIrKykgeworICAgIG91dHB0ciA9IG91dHB1dF9idWZbY3RyXSArIG91dHB1dF9jb2w7CisgICAgLyogUm93cyBvZiB6ZXJvZXMgY2FuIGJlIGV4cGxvaXRlZCBpbiB0aGUgc2FtZSB3YXkgYXMgd2UgZGlkIHdpdGggY29sdW1ucy4KKyAgICAgKiBIb3dldmVyLCB0aGUgY29sdW1uIGNhbGN1bGF0aW9uIGhhcyBjcmVhdGVkIG1hbnkgbm9uemVybyBBQyB0ZXJtcywgc28KKyAgICAgKiB0aGUgc2ltcGxpZmljYXRpb24gYXBwbGllcyBsZXNzIG9mdGVuICh0eXBpY2FsbHkgNSUgdG8gMTAlIG9mIHRoZSB0aW1lKS4KKyAgICAgKiBPbiBtYWNoaW5lcyB3aXRoIHZlcnkgZmFzdCBtdWx0aXBsaWNhdGlvbiwgaXQncyBwb3NzaWJsZSB0aGF0IHRoZQorICAgICAqIHRlc3QgdGFrZXMgbW9yZSB0aW1lIHRoYW4gaXQncyB3b3J0aC4gIEluIHRoYXQgY2FzZSB0aGlzIHNlY3Rpb24KKyAgICAgKiBtYXkgYmUgY29tbWVudGVkIG91dC4KKyAgICAgKi8KKyAgICAKKyNpZm5kZWYgTk9fWkVST19ST1dfVEVTVAorICAgIGlmICh3c3B0clsxXSA9PSAwICYmIHdzcHRyWzJdID09IDAgJiYgd3NwdHJbM10gPT0gMCAmJiB3c3B0cls0XSA9PSAwICYmCisJd3NwdHJbNV0gPT0gMCAmJiB3c3B0cls2XSA9PSAwICYmIHdzcHRyWzddID09IDApIHsKKyAgICAgIC8qIEFDIHRlcm1zIGFsbCB6ZXJvICovCisgICAgICBKU0FNUExFIGRjdmFsID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSgoSU5UMzIpIHdzcHRyWzBdLCBQQVNTMV9CSVRTKzMpCisJCQkJICAmIFJBTkdFX01BU0tdOworICAgICAgCisgICAgICBvdXRwdHJbMF0gPSBkY3ZhbDsKKyAgICAgIG91dHB0clsxXSA9IGRjdmFsOworICAgICAgb3V0cHRyWzJdID0gZGN2YWw7CisgICAgICBvdXRwdHJbM10gPSBkY3ZhbDsKKyAgICAgIG91dHB0cls0XSA9IGRjdmFsOworICAgICAgb3V0cHRyWzVdID0gZGN2YWw7CisgICAgICBvdXRwdHJbNl0gPSBkY3ZhbDsKKyAgICAgIG91dHB0cls3XSA9IGRjdmFsOworCisgICAgICB3c3B0ciArPSBEQ1RTSVpFOwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgICAgICBjb250aW51ZTsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICAvKiBFdmVuIHBhcnQ6IHJldmVyc2UgdGhlIGV2ZW4gcGFydCBvZiB0aGUgZm9yd2FyZCBEQ1QuICovCisgICAgLyogVGhlIHJvdGF0b3IgaXMgc3FydCgyKSpjKC02KS4gKi8KKyAgICAKKyAgICB6MiA9IChJTlQzMikgd3NwdHJbMl07CisgICAgejMgPSAoSU5UMzIpIHdzcHRyWzZdOworICAgIAorICAgIHoxID0gTVVMVElQTFkoejIgKyB6MywgRklYXzBfNTQxMTk2MTAwKTsKKyAgICB0bXAyID0gejEgKyBNVUxUSVBMWSh6MywgLSBGSVhfMV84NDc3NTkwNjUpOworICAgIHRtcDMgPSB6MSArIE1VTFRJUExZKHoyLCBGSVhfMF83NjUzNjY4NjUpOworICAgIAorICAgIHRtcDAgPSAoKElOVDMyKSB3c3B0clswXSArIChJTlQzMikgd3NwdHJbNF0pIDw8IENPTlNUX0JJVFM7CisgICAgdG1wMSA9ICgoSU5UMzIpIHdzcHRyWzBdIC0gKElOVDMyKSB3c3B0cls0XSkgPDwgQ09OU1RfQklUUzsKKyAgICAKKyAgICB0bXAxMCA9IHRtcDAgKyB0bXAzOworICAgIHRtcDEzID0gdG1wMCAtIHRtcDM7CisgICAgdG1wMTEgPSB0bXAxICsgdG1wMjsKKyAgICB0bXAxMiA9IHRtcDEgLSB0bXAyOworICAgIAorICAgIC8qIE9kZCBwYXJ0IHBlciBmaWd1cmUgODsgdGhlIG1hdHJpeCBpcyB1bml0YXJ5IGFuZCBoZW5jZSBpdHMKKyAgICAgKiB0cmFuc3Bvc2UgaXMgaXRzIGludmVyc2UuICBpMC4uaTMgYXJlIHk3LHk1LHkzLHkxIHJlc3BlY3RpdmVseS4KKyAgICAgKi8KKyAgICAKKyAgICB0bXAwID0gKElOVDMyKSB3c3B0cls3XTsKKyAgICB0bXAxID0gKElOVDMyKSB3c3B0cls1XTsKKyAgICB0bXAyID0gKElOVDMyKSB3c3B0clszXTsKKyAgICB0bXAzID0gKElOVDMyKSB3c3B0clsxXTsKKyAgICAKKyAgICB6MSA9IHRtcDAgKyB0bXAzOworICAgIHoyID0gdG1wMSArIHRtcDI7CisgICAgejMgPSB0bXAwICsgdG1wMjsKKyAgICB6NCA9IHRtcDEgKyB0bXAzOworICAgIHo1ID0gTVVMVElQTFkoejMgKyB6NCwgRklYXzFfMTc1ODc1NjAyKTsgLyogc3FydCgyKSAqIGMzICovCisgICAgCisgICAgdG1wMCA9IE1VTFRJUExZKHRtcDAsIEZJWF8wXzI5ODYzMTMzNik7IC8qIHNxcnQoMikgKiAoLWMxK2MzK2M1LWM3KSAqLworICAgIHRtcDEgPSBNVUxUSVBMWSh0bXAxLCBGSVhfMl8wNTMxMTk4NjkpOyAvKiBzcXJ0KDIpICogKCBjMStjMy1jNStjNykgKi8KKyAgICB0bXAyID0gTVVMVElQTFkodG1wMiwgRklYXzNfMDcyNzExMDI2KTsgLyogc3FydCgyKSAqICggYzErYzMrYzUtYzcpICovCisgICAgdG1wMyA9IE1VTFRJUExZKHRtcDMsIEZJWF8xXzUwMTMyMTExMCk7IC8qIHNxcnQoMikgKiAoIGMxK2MzLWM1LWM3KSAqLworICAgIHoxID0gTVVMVElQTFkoejEsIC0gRklYXzBfODk5OTc2MjIzKTsgLyogc3FydCgyKSAqIChjNy1jMykgKi8KKyAgICB6MiA9IE1VTFRJUExZKHoyLCAtIEZJWF8yXzU2MjkxNTQ0Nyk7IC8qIHNxcnQoMikgKiAoLWMxLWMzKSAqLworICAgIHozID0gTVVMVElQTFkoejMsIC0gRklYXzFfOTYxNTcwNTYwKTsgLyogc3FydCgyKSAqICgtYzMtYzUpICovCisgICAgejQgPSBNVUxUSVBMWSh6NCwgLSBGSVhfMF8zOTAxODA2NDQpOyAvKiBzcXJ0KDIpICogKGM1LWMzKSAqLworICAgIAorICAgIHozICs9IHo1OworICAgIHo0ICs9IHo1OworICAgIAorICAgIHRtcDAgKz0gejEgKyB6MzsKKyAgICB0bXAxICs9IHoyICsgejQ7CisgICAgdG1wMiArPSB6MiArIHozOworICAgIHRtcDMgKz0gejEgKyB6NDsKKyAgICAKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2U6IGlucHV0cyBhcmUgdG1wMTAuLnRtcDEzLCB0bXAwLi50bXAzICovCisgICAgCisgICAgb3V0cHRyWzBdID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSh0bXAxMCArIHRtcDMsCisJCQkJCSAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisJCQkgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbN10gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKHRtcDEwIC0gdG1wMywKKwkJCQkJICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKwkJCSAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTEgKyB0bXAyLAorCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzZdID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSh0bXAxMSAtIHRtcDIsCisJCQkJCSAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisJCQkgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMl0gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKHRtcDEyICsgdG1wMSwKKwkJCQkJICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKwkJCSAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls1XSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTIgLSB0bXAxLAorCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzNdID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSh0bXAxMyArIHRtcDAsCisJCQkJCSAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisJCQkgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNF0gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKHRtcDEzIC0gdG1wMCwKKwkJCQkJICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKwkJCSAgICAmIFJBTkdFX01BU0tdOworICAgIAorICAgIHdzcHRyICs9IERDVFNJWkU7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KKyAgfQorfQorCisjZW5kaWYgLyogRENUX0lTTE9XX1NVUFBPUlRFRCAqLworCisjZW5kaWYgLy9fRlhfSlBFR19UVVJCT18KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2ppZGN0cmVkLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qaWRjdHJlZC5jCmluZGV4IDdlYjFkNzQuLjhiNGI4MDcgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2ppZGN0cmVkLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfamlkY3RyZWQuYwpAQCAtMSw0MDEgKzEsNDAxIEBACi0jaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQ0KLS8qDQotICogamlkY3RyZWQuYw0KLSAqDQotICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTgsIFRob21hcyBHLiBMYW5lLg0KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuDQotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLg0KLSAqDQotICogVGhpcyBmaWxlIGNvbnRhaW5zIGludmVyc2UtRENUIHJvdXRpbmVzIHRoYXQgcHJvZHVjZSByZWR1Y2VkLXNpemUgb3V0cHV0Og0KLSAqIGVpdGhlciA0eDQsIDJ4Miwgb3IgMXgxIHBpeGVscyBmcm9tIGFuIDh4OCBEQ1QgYmxvY2suDQotICoNCi0gKiBUaGUgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gdGhlIExvZWZmbGVyLCBMaWd0ZW5iZXJnIGFuZCBNb3NjaHl0eiAoTEwmTSkNCi0gKiBhbGdvcml0aG0gdXNlZCBpbiBqaWRjdGludC5jLiAgV2Ugc2ltcGx5IHJlcGxhY2UgZWFjaCA4LXRvLTggMS1EIElEQ1Qgc3RlcA0KLSAqIHdpdGggYW4gOC10by00IHN0ZXAgdGhhdCBwcm9kdWNlcyB0aGUgZm91ciBhdmVyYWdlcyBvZiB0d28gYWRqYWNlbnQgb3V0cHV0cw0KLSAqIChvciBhbiA4LXRvLTIgc3RlcCBwcm9kdWNpbmcgdHdvIGF2ZXJhZ2VzIG9mIGZvdXIgb3V0cHV0cywgZm9yIDJ4MiBvdXRwdXQpLg0KLSAqIFRoZXNlIHN0ZXBzIHdlcmUgZGVyaXZlZCBieSBjb21wdXRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGF0IHRoZSBlbmQNCi0gKiBvZiB0aGUgbm9ybWFsIExMJk0gY29kZSwgdGhlbiBzaW1wbGlmeWluZyBhcyBtdWNoIGFzIHBvc3NpYmxlLg0KLSAqDQotICogMXgxIGlzIHRyaXZpYWw6IGp1c3QgdGFrZSB0aGUgREMgY29lZmZpY2llbnQgZGl2aWRlZCBieSA4Lg0KLSAqDQotICogU2VlIGppZGN0aW50LmMgZm9yIGFkZGl0aW9uYWwgY29tbWVudHMuDQotICovDQotDQotI2RlZmluZSBKUEVHX0lOVEVSTkFMUw0KLSNpbmNsdWRlICJqaW5jbHVkZS5oIg0KLSNpbmNsdWRlICJqcGVnbGliLmgiDQotI2luY2x1ZGUgImpkY3QuaCIJCS8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovDQotDQotI2lmZGVmIElEQ1RfU0NBTElOR19TVVBQT1JURUQNCi0NCi0NCi0vKg0KLSAqIFRoaXMgbW9kdWxlIGlzIHNwZWNpYWxpemVkIHRvIHRoZSBjYXNlIERDVFNJWkUgPSA4Lg0KLSAqLw0KLQ0KLSNpZiBEQ1RTSVpFICE9IDgNCi0gIFNvcnJ5LCB0aGlzIGNvZGUgb25seSBjb3BlcyB3aXRoIDh4OCBEQ1RzLiAvKiBkZWxpYmVyYXRlIHN5bnRheCBlcnIgKi8NCi0jZW5kaWYNCi0NCi0NCi0vKiBTY2FsaW5nIGlzIHRoZSBzYW1lIGFzIGluIGppZGN0aW50LmMuICovDQotDQotI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4DQotI2RlZmluZSBDT05TVF9CSVRTICAxMw0KLSNkZWZpbmUgUEFTUzFfQklUUyAgMg0KLSNlbHNlDQotI2RlZmluZSBDT05TVF9CSVRTICAxMw0KLSNkZWZpbmUgUEFTUzFfQklUUyAgMQkJLyogbG9zZSBhIGxpdHRsZSBwcmVjaXNpb24gdG8gYXZvaWQgb3ZlcmZsb3cgKi8NCi0jZW5kaWYNCi0NCi0vKiBTb21lIEMgY29tcGlsZXJzIGZhaWwgdG8gcmVkdWNlICJGSVgoY29uc3RhbnQpIiBhdCBjb21waWxlIHRpbWUsIHRodXMNCi0gKiBjYXVzaW5nIGEgbG90IG9mIHVzZWxlc3MgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyBhdCBydW4gdGltZS4NCi0gKiBUbyBnZXQgYXJvdW5kIHRoaXMgd2UgdXNlIHRoZSBmb2xsb3dpbmcgcHJlLWNhbGN1bGF0ZWQgY29uc3RhbnRzLg0KLSAqIElmIHlvdSBjaGFuZ2UgQ09OU1RfQklUUyB5b3UgbWF5IHdhbnQgdG8gYWRkIGFwcHJvcHJpYXRlIHZhbHVlcy4NCi0gKiAoV2l0aCBhIHJlYXNvbmFibGUgQyBjb21waWxlciwgeW91IGNhbiBqdXN0IHJlbHkgb24gdGhlIEZJWCgpIG1hY3JvLi4uKQ0KLSAqLw0KLQ0KLSNpZiBDT05TVF9CSVRTID09IDEzDQotI2RlZmluZSBGSVhfMF8yMTExNjQyNDMgICgoSU5UMzIpICAxNzMwKQkvKiBGSVgoMC4yMTExNjQyNDMpICovDQotI2RlZmluZSBGSVhfMF81MDk3OTU1NzkgICgoSU5UMzIpICA0MTc2KQkvKiBGSVgoMC41MDk3OTU1NzkpICovDQotI2RlZmluZSBGSVhfMF82MDEzNDQ4ODcgICgoSU5UMzIpICA0OTI2KQkvKiBGSVgoMC42MDEzNDQ4ODcpICovDQotI2RlZmluZSBGSVhfMF83MjA5NTk4MjIgICgoSU5UMzIpICA1OTA2KQkvKiBGSVgoMC43MjA5NTk4MjIpICovDQotI2RlZmluZSBGSVhfMF83NjUzNjY4NjUgICgoSU5UMzIpICA2MjcwKQkvKiBGSVgoMC43NjUzNjY4NjUpICovDQotI2RlZmluZSBGSVhfMF84NTA0MzAwOTUgICgoSU5UMzIpICA2OTY3KQkvKiBGSVgoMC44NTA0MzAwOTUpICovDQotI2RlZmluZSBGSVhfMF84OTk5NzYyMjMgICgoSU5UMzIpICA3MzczKQkvKiBGSVgoMC44OTk5NzYyMjMpICovDQotI2RlZmluZSBGSVhfMV8wNjE1OTQzMzcgICgoSU5UMzIpICA4Njk3KQkvKiBGSVgoMS4wNjE1OTQzMzcpICovDQotI2RlZmluZSBGSVhfMV8yNzI3NTg1ODAgICgoSU5UMzIpICAxMDQyNikJLyogRklYKDEuMjcyNzU4NTgwKSAqLw0KLSNkZWZpbmUgRklYXzFfNDUxNzc0OTgxICAoKElOVDMyKSAgMTE4OTMpCS8qIEZJWCgxLjQ1MTc3NDk4MSkgKi8NCi0jZGVmaW5lIEZJWF8xXzg0Nzc1OTA2NSAgKChJTlQzMikgIDE1MTM3KQkvKiBGSVgoMS44NDc3NTkwNjUpICovDQotI2RlZmluZSBGSVhfMl8xNzI3MzQ4MDMgICgoSU5UMzIpICAxNzc5OSkJLyogRklYKDIuMTcyNzM0ODAzKSAqLw0KLSNkZWZpbmUgRklYXzJfNTYyOTE1NDQ3ICAoKElOVDMyKSAgMjA5OTUpCS8qIEZJWCgyLjU2MjkxNTQ0NykgKi8NCi0jZGVmaW5lIEZJWF8zXzYyNDUwOTc4NSAgKChJTlQzMikgIDI5NjkyKQkvKiBGSVgoMy42MjQ1MDk3ODUpICovDQotI2Vsc2UNCi0jZGVmaW5lIEZJWF8wXzIxMTE2NDI0MyAgRklYKDAuMjExMTY0MjQzKQ0KLSNkZWZpbmUgRklYXzBfNTA5Nzk1NTc5ICBGSVgoMC41MDk3OTU1NzkpDQotI2RlZmluZSBGSVhfMF82MDEzNDQ4ODcgIEZJWCgwLjYwMTM0NDg4NykNCi0jZGVmaW5lIEZJWF8wXzcyMDk1OTgyMiAgRklYKDAuNzIwOTU5ODIyKQ0KLSNkZWZpbmUgRklYXzBfNzY1MzY2ODY1ICBGSVgoMC43NjUzNjY4NjUpDQotI2RlZmluZSBGSVhfMF84NTA0MzAwOTUgIEZJWCgwLjg1MDQzMDA5NSkNCi0jZGVmaW5lIEZJWF8wXzg5OTk3NjIyMyAgRklYKDAuODk5OTc2MjIzKQ0KLSNkZWZpbmUgRklYXzFfMDYxNTk0MzM3ICBGSVgoMS4wNjE1OTQzMzcpDQotI2RlZmluZSBGSVhfMV8yNzI3NTg1ODAgIEZJWCgxLjI3Mjc1ODU4MCkNCi0jZGVmaW5lIEZJWF8xXzQ1MTc3NDk4MSAgRklYKDEuNDUxNzc0OTgxKQ0KLSNkZWZpbmUgRklYXzFfODQ3NzU5MDY1ICBGSVgoMS44NDc3NTkwNjUpDQotI2RlZmluZSBGSVhfMl8xNzI3MzQ4MDMgIEZJWCgyLjE3MjczNDgwMykNCi0jZGVmaW5lIEZJWF8yXzU2MjkxNTQ0NyAgRklYKDIuNTYyOTE1NDQ3KQ0KLSNkZWZpbmUgRklYXzNfNjI0NTA5Nzg1ICBGSVgoMy42MjQ1MDk3ODUpDQotI2VuZGlmDQotDQotDQotLyogTXVsdGlwbHkgYW4gSU5UMzIgdmFyaWFibGUgYnkgYW4gSU5UMzIgY29uc3RhbnQgdG8geWllbGQgYW4gSU5UMzIgcmVzdWx0Lg0KLSAqIEZvciA4LWJpdCBzYW1wbGVzIHdpdGggdGhlIHJlY29tbWVuZGVkIHNjYWxpbmcsIGFsbCB0aGUgdmFyaWFibGUNCi0gKiBhbmQgY29uc3RhbnQgdmFsdWVzIGludm9sdmVkIGFyZSBubyBtb3JlIHRoYW4gMTYgYml0cyB3aWRlLCBzbyBhDQotICogMTZ4MTYtPjMyIGJpdCBtdWx0aXBseSBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGEgZnVsbCAzMngzMiBtdWx0aXBseS4NCi0gKiBGb3IgMTItYml0IHNhbXBsZXMsIGEgZnVsbCAzMi1iaXQgbXVsdGlwbGljYXRpb24gd2lsbCBiZSBuZWVkZWQuDQotICovDQotDQotI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4DQotI2RlZmluZSBNVUxUSVBMWSh2YXIsY29uc3QpICBNVUxUSVBMWTE2QzE2KHZhcixjb25zdCkNCi0jZWxzZQ0KLSNkZWZpbmUgTVVMVElQTFkodmFyLGNvbnN0KSAgKCh2YXIpICogKGNvbnN0KSkNCi0jZW5kaWYNCi0NCi0NCi0vKiBEZXF1YW50aXplIGEgY29lZmZpY2llbnQgYnkgbXVsdGlwbHlpbmcgaXQgYnkgdGhlIG11bHRpcGxpZXItdGFibGUNCi0gKiBlbnRyeTsgcHJvZHVjZSBhbiBpbnQgcmVzdWx0LiAgSW4gdGhpcyBtb2R1bGUsIGJvdGggaW5wdXRzIGFuZCByZXN1bHQNCi0gKiBhcmUgMTYgYml0cyBvciBsZXNzLCBzbyBlaXRoZXIgaW50IG9yIHNob3J0IG11bHRpcGx5IHdpbGwgd29yay4NCi0gKi8NCi0NCi0jZGVmaW5lIERFUVVBTlRJWkUoY29lZixxdWFudHZhbCkgICgoKElTTE9XX01VTFRfVFlQRSkgKGNvZWYpKSAqIChxdWFudHZhbCkpDQotDQotDQotLyoNCi0gKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLA0KLSAqIHByb2R1Y2luZyBhIHJlZHVjZWQtc2l6ZSA0eDQgb3V0cHV0IGJsb2NrLg0KLSAqLw0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWpwZWdfaWRjdF80eDQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLA0KLQkgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywNCi0JICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQ0KLXsNCi0gIElOVDMyIHRtcDAsIHRtcDIsIHRtcDEwLCB0bXAxMjsNCi0gIElOVDMyIHoxLCB6MiwgejMsIHo0Ow0KLSAgSkNPRUZQVFIgaW5wdHI7DQotICBJU0xPV19NVUxUX1RZUEUgKiBxdWFudHB0cjsNCi0gIGludCAqIHdzcHRyOw0KLSAgSlNBTVBST1cgb3V0cHRyOw0KLSAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsNCi0gIGludCBjdHI7DQotICBpbnQgd29ya3NwYWNlW0RDVFNJWkUqNF07CS8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLw0KLSAgU0hJRlRfVEVNUFMNCi0NCi0gIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8NCi0NCi0gIGlucHRyID0gY29lZl9ibG9jazsNCi0gIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7DQotICB3c3B0ciA9IHdvcmtzcGFjZTsNCi0gIGZvciAoY3RyID0gRENUU0laRTsgY3RyID4gMDsgaW5wdHIrKywgcXVhbnRwdHIrKywgd3NwdHIrKywgY3RyLS0pIHsNCi0gICAgLyogRG9uJ3QgYm90aGVyIHRvIHByb2Nlc3MgY29sdW1uIDQsIGJlY2F1c2Ugc2Vjb25kIHBhc3Mgd29uJ3QgdXNlIGl0ICovDQotICAgIGlmIChjdHIgPT0gRENUU0laRS00KQ0KLSAgICAgIGNvbnRpbnVlOw0KLSAgICBpZiAoaW5wdHJbRENUU0laRSoxXSA9PSAwICYmIGlucHRyW0RDVFNJWkUqMl0gPT0gMCAmJg0KLQlpbnB0cltEQ1RTSVpFKjNdID09IDAgJiYgaW5wdHJbRENUU0laRSo1XSA9PSAwICYmDQotCWlucHRyW0RDVFNJWkUqNl0gPT0gMCAmJiBpbnB0cltEQ1RTSVpFKjddID09IDApIHsNCi0gICAgICAvKiBBQyB0ZXJtcyBhbGwgemVybzsgd2UgbmVlZCBub3QgZXhhbWluZSB0ZXJtIDQgZm9yIDR4NCBvdXRwdXQgKi8NCi0gICAgICBpbnQgZGN2YWwgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pIDw8IFBBU1MxX0JJVFM7DQotICAgICAgDQotICAgICAgd3NwdHJbRENUU0laRSowXSA9IGRjdmFsOw0KLSAgICAgIHdzcHRyW0RDVFNJWkUqMV0gPSBkY3ZhbDsNCi0gICAgICB3c3B0cltEQ1RTSVpFKjJdID0gZGN2YWw7DQotICAgICAgd3NwdHJbRENUU0laRSozXSA9IGRjdmFsOw0KLSAgICAgIA0KLSAgICAgIGNvbnRpbnVlOw0KLSAgICB9DQotICAgIA0KLSAgICAvKiBFdmVuIHBhcnQgKi8NCi0gICAgDQotICAgIHRtcDAgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pOw0KLSAgICB0bXAwIDw8PSAoQ09OU1RfQklUUysxKTsNCi0gICAgDQotICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjJdLCBxdWFudHB0cltEQ1RTSVpFKjJdKTsNCi0gICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNl0sIHF1YW50cHRyW0RDVFNJWkUqNl0pOw0KLQ0KLSAgICB0bXAyID0gTVVMVElQTFkoejIsIEZJWF8xXzg0Nzc1OTA2NSkgKyBNVUxUSVBMWSh6MywgLSBGSVhfMF83NjUzNjY4NjUpOw0KLSAgICANCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMjsNCi0gICAgdG1wMTIgPSB0bXAwIC0gdG1wMjsNCi0gICAgDQotICAgIC8qIE9kZCBwYXJ0ICovDQotICAgIA0KLSAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSk7DQotICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKTsNCi0gICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOw0KLSAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7DQotICAgIA0KLSAgICB0bXAwID0gTVVMVElQTFkoejEsIC0gRklYXzBfMjExMTY0MjQzKSAvKiBzcXJ0KDIpICogKGMzLWMxKSAqLw0KLQkgKyBNVUxUSVBMWSh6MiwgRklYXzFfNDUxNzc0OTgxKSAvKiBzcXJ0KDIpICogKGMzK2M3KSAqLw0KLQkgKyBNVUxUSVBMWSh6MywgLSBGSVhfMl8xNzI3MzQ4MDMpIC8qIHNxcnQoMikgKiAoLWMxLWM1KSAqLw0KLQkgKyBNVUxUSVBMWSh6NCwgRklYXzFfMDYxNTk0MzM3KTsgLyogc3FydCgyKSAqIChjNStjNykgKi8NCi0gICAgDQotICAgIHRtcDIgPSBNVUxUSVBMWSh6MSwgLSBGSVhfMF81MDk3OTU1NzkpIC8qIHNxcnQoMikgKiAoYzctYzUpICovDQotCSArIE1VTFRJUExZKHoyLCAtIEZJWF8wXzYwMTM0NDg4NykgLyogc3FydCgyKSAqIChjNS1jMSkgKi8NCi0JICsgTVVMVElQTFkoejMsIEZJWF8wXzg5OTk3NjIyMykgLyogc3FydCgyKSAqIChjMy1jNykgKi8NCi0JICsgTVVMVElQTFkoejQsIEZJWF8yXzU2MjkxNTQ0Nyk7IC8qIHNxcnQoMikgKiAoYzErYzMpICovDQotDQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLw0KLSAgICANCi0gICAgd3NwdHJbRENUU0laRSowXSA9IChpbnQpIERFU0NBTEUodG1wMTAgKyB0bXAyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMrMSk7DQotICAgIHdzcHRyW0RDVFNJWkUqM10gPSAoaW50KSBERVNDQUxFKHRtcDEwIC0gdG1wMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKzEpOw0KLSAgICB3c3B0cltEQ1RTSVpFKjFdID0gKGludCkgREVTQ0FMRSh0bXAxMiArIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUysxKTsNCi0gICAgd3NwdHJbRENUU0laRSoyXSA9IChpbnQpIERFU0NBTEUodG1wMTIgLSB0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMrMSk7DQotICB9DQotICANCi0gIC8qIFBhc3MgMjogcHJvY2VzcyA0IHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8NCi0NCi0gIHdzcHRyID0gd29ya3NwYWNlOw0KLSAgZm9yIChjdHIgPSAwOyBjdHIgPCA0OyBjdHIrKykgew0KLSAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOw0KLSAgICAvKiBJdCdzIG5vdCBjbGVhciB3aGV0aGVyIGEgemVybyByb3cgdGVzdCBpcyB3b3J0aHdoaWxlIGhlcmUgLi4uICovDQotDQotI2lmbmRlZiBOT19aRVJPX1JPV19URVNUDQotICAgIGlmICh3c3B0clsxXSA9PSAwICYmIHdzcHRyWzJdID09IDAgJiYgd3NwdHJbM10gPT0gMCAmJg0KLQl3c3B0cls1XSA9PSAwICYmIHdzcHRyWzZdID09IDAgJiYgd3NwdHJbN10gPT0gMCkgew0KLSAgICAgIC8qIEFDIHRlcm1zIGFsbCB6ZXJvICovDQotICAgICAgSlNBTVBMRSBkY3ZhbCA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUoKElOVDMyKSB3c3B0clswXSwgUEFTUzFfQklUUyszKQ0KLQkJCQkgICYgUkFOR0VfTUFTS107DQotICAgICAgDQotICAgICAgb3V0cHRyWzBdID0gZGN2YWw7DQotICAgICAgb3V0cHRyWzFdID0gZGN2YWw7DQotICAgICAgb3V0cHRyWzJdID0gZGN2YWw7DQotICAgICAgb3V0cHRyWzNdID0gZGN2YWw7DQotICAgICAgDQotICAgICAgd3NwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLw0KLSAgICAgIGNvbnRpbnVlOw0KLSAgICB9DQotI2VuZGlmDQotICAgIA0KLSAgICAvKiBFdmVuIHBhcnQgKi8NCi0gICAgDQotICAgIHRtcDAgPSAoKElOVDMyKSB3c3B0clswXSkgPDwgKENPTlNUX0JJVFMrMSk7DQotICAgIA0KLSAgICB0bXAyID0gTVVMVElQTFkoKElOVDMyKSB3c3B0clsyXSwgRklYXzFfODQ3NzU5MDY1KQ0KLQkgKyBNVUxUSVBMWSgoSU5UMzIpIHdzcHRyWzZdLCAtIEZJWF8wXzc2NTM2Njg2NSk7DQotICAgIA0KLSAgICB0bXAxMCA9IHRtcDAgKyB0bXAyOw0KLSAgICB0bXAxMiA9IHRtcDAgLSB0bXAyOw0KLSAgICANCi0gICAgLyogT2RkIHBhcnQgKi8NCi0gICAgDQotICAgIHoxID0gKElOVDMyKSB3c3B0cls3XTsNCi0gICAgejIgPSAoSU5UMzIpIHdzcHRyWzVdOw0KLSAgICB6MyA9IChJTlQzMikgd3NwdHJbM107DQotICAgIHo0ID0gKElOVDMyKSB3c3B0clsxXTsNCi0gICAgDQotICAgIHRtcDAgPSBNVUxUSVBMWSh6MSwgLSBGSVhfMF8yMTExNjQyNDMpIC8qIHNxcnQoMikgKiAoYzMtYzEpICovDQotCSArIE1VTFRJUExZKHoyLCBGSVhfMV80NTE3NzQ5ODEpIC8qIHNxcnQoMikgKiAoYzMrYzcpICovDQotCSArIE1VTFRJUExZKHozLCAtIEZJWF8yXzE3MjczNDgwMykgLyogc3FydCgyKSAqICgtYzEtYzUpICovDQotCSArIE1VTFRJUExZKHo0LCBGSVhfMV8wNjE1OTQzMzcpOyAvKiBzcXJ0KDIpICogKGM1K2M3KSAqLw0KLSAgICANCi0gICAgdG1wMiA9IE1VTFRJUExZKHoxLCAtIEZJWF8wXzUwOTc5NTU3OSkgLyogc3FydCgyKSAqIChjNy1jNSkgKi8NCi0JICsgTVVMVElQTFkoejIsIC0gRklYXzBfNjAxMzQ0ODg3KSAvKiBzcXJ0KDIpICogKGM1LWMxKSAqLw0KLQkgKyBNVUxUSVBMWSh6MywgRklYXzBfODk5OTc2MjIzKSAvKiBzcXJ0KDIpICogKGMzLWM3KSAqLw0KLQkgKyBNVUxUSVBMWSh6NCwgRklYXzJfNTYyOTE1NDQ3KTsgLyogc3FydCgyKSAqIChjMStjMykgKi8NCi0NCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovDQotICAgIA0KLSAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKHRtcDEwICsgdG1wMiwNCi0JCQkJCSAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMSkNCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsNCi0gICAgb3V0cHRyWzNdID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSh0bXAxMCAtIHRtcDIsDQotCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKzEpDQotCQkJICAgICYgUkFOR0VfTUFTS107DQotICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTIgKyB0bXAwLA0KLQkJCQkJICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMysxKQ0KLQkJCSAgICAmIFJBTkdFX01BU0tdOw0KLSAgICBvdXRwdHJbMl0gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKHRtcDEyIC0gdG1wMCwNCi0JCQkJCSAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMSkNCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsNCi0gICAgDQotICAgIHdzcHRyICs9IERDVFNJWkU7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8NCi0gIH0NCi19DQotDQotDQotLyoNCi0gKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLA0KLSAqIHByb2R1Y2luZyBhIHJlZHVjZWQtc2l6ZSAyeDIgb3V0cHV0IGJsb2NrLg0KLSAqLw0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWpwZWdfaWRjdF8yeDIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLA0KLQkgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywNCi0JICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQ0KLXsNCi0gIElOVDMyIHRtcDAsIHRtcDEwLCB6MTsNCi0gIEpDT0VGUFRSIGlucHRyOw0KLSAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7DQotICBpbnQgKiB3c3B0cjsNCi0gIEpTQU1QUk9XIG91dHB0cjsNCi0gIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7DQotICBpbnQgY3RyOw0KLSAgaW50IHdvcmtzcGFjZVtEQ1RTSVpFKjJdOwkvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8NCi0gIFNISUZUX1RFTVBTDQotDQotICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuICovDQotDQotICBpbnB0ciA9IGNvZWZfYmxvY2s7DQotICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKikgY29tcHB0ci0+ZGN0X3RhYmxlOw0KLSAgd3NwdHIgPSB3b3Jrc3BhY2U7DQotICBmb3IgKGN0ciA9IERDVFNJWkU7IGN0ciA+IDA7IGlucHRyKyssIHF1YW50cHRyKyssIHdzcHRyKyssIGN0ci0tKSB7DQotICAgIC8qIERvbid0IGJvdGhlciB0byBwcm9jZXNzIGNvbHVtbnMgMiw0LDYgKi8NCi0gICAgaWYgKGN0ciA9PSBEQ1RTSVpFLTIgfHwgY3RyID09IERDVFNJWkUtNCB8fCBjdHIgPT0gRENUU0laRS02KQ0KLSAgICAgIGNvbnRpbnVlOw0KLSAgICBpZiAoaW5wdHJbRENUU0laRSoxXSA9PSAwICYmIGlucHRyW0RDVFNJWkUqM10gPT0gMCAmJg0KLQlpbnB0cltEQ1RTSVpFKjVdID09IDAgJiYgaW5wdHJbRENUU0laRSo3XSA9PSAwKSB7DQotICAgICAgLyogQUMgdGVybXMgYWxsIHplcm87IHdlIG5lZWQgbm90IGV4YW1pbmUgdGVybXMgMiw0LDYgZm9yIDJ4MiBvdXRwdXQgKi8NCi0gICAgICBpbnQgZGN2YWwgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pIDw8IFBBU1MxX0JJVFM7DQotICAgICAgDQotICAgICAgd3NwdHJbRENUU0laRSowXSA9IGRjdmFsOw0KLSAgICAgIHdzcHRyW0RDVFNJWkUqMV0gPSBkY3ZhbDsNCi0gICAgICANCi0gICAgICBjb250aW51ZTsNCi0gICAgfQ0KLSAgICANCi0gICAgLyogRXZlbiBwYXJ0ICovDQotICAgIA0KLSAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7DQotICAgIHRtcDEwID0gejEgPDwgKENPTlNUX0JJVFMrMik7DQotICAgIA0KLSAgICAvKiBPZGQgcGFydCAqLw0KLQ0KLSAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSk7DQotICAgIHRtcDAgPSBNVUxUSVBMWSh6MSwgLSBGSVhfMF83MjA5NTk4MjIpOyAvKiBzcXJ0KDIpICogKGM3LWM1K2MzLWMxKSAqLw0KLSAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo1XSwgcXVhbnRwdHJbRENUU0laRSo1XSk7DQotICAgIHRtcDAgKz0gTVVMVElQTFkoejEsIEZJWF8wXzg1MDQzMDA5NSk7IC8qIHNxcnQoMikgKiAoLWMxK2MzK2M1K2M3KSAqLw0KLSAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSozXSwgcXVhbnRwdHJbRENUU0laRSozXSk7DQotICAgIHRtcDAgKz0gTVVMVElQTFkoejEsIC0gRklYXzFfMjcyNzU4NTgwKTsgLyogc3FydCgyKSAqICgtYzErYzMtYzUtYzcpICovDQotICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjFdLCBxdWFudHB0cltEQ1RTSVpFKjFdKTsNCi0gICAgdG1wMCArPSBNVUxUSVBMWSh6MSwgRklYXzNfNjI0NTA5Nzg1KTsgLyogc3FydCgyKSAqIChjMStjMytjNStjNykgKi8NCi0NCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovDQotICAgIA0KLSAgICB3c3B0cltEQ1RTSVpFKjBdID0gKGludCkgREVTQ0FMRSh0bXAxMCArIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUysyKTsNCi0gICAgd3NwdHJbRENUU0laRSoxXSA9IChpbnQpIERFU0NBTEUodG1wMTAgLSB0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMrMik7DQotICB9DQotICANCi0gIC8qIFBhc3MgMjogcHJvY2VzcyAyIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8NCi0NCi0gIHdzcHRyID0gd29ya3NwYWNlOw0KLSAgZm9yIChjdHIgPSAwOyBjdHIgPCAyOyBjdHIrKykgew0KLSAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOw0KLSAgICAvKiBJdCdzIG5vdCBjbGVhciB3aGV0aGVyIGEgemVybyByb3cgdGVzdCBpcyB3b3J0aHdoaWxlIGhlcmUgLi4uICovDQotDQotI2lmbmRlZiBOT19aRVJPX1JPV19URVNUDQotICAgIGlmICh3c3B0clsxXSA9PSAwICYmIHdzcHRyWzNdID09IDAgJiYgd3NwdHJbNV0gPT0gMCAmJiB3c3B0cls3XSA9PSAwKSB7DQotICAgICAgLyogQUMgdGVybXMgYWxsIHplcm8gKi8NCi0gICAgICBKU0FNUExFIGRjdmFsID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSgoSU5UMzIpIHdzcHRyWzBdLCBQQVNTMV9CSVRTKzMpDQotCQkJCSAgJiBSQU5HRV9NQVNLXTsNCi0gICAgICANCi0gICAgICBvdXRwdHJbMF0gPSBkY3ZhbDsNCi0gICAgICBvdXRwdHJbMV0gPSBkY3ZhbDsNCi0gICAgICANCi0gICAgICB3c3B0ciArPSBEQ1RTSVpFOwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovDQotICAgICAgY29udGludWU7DQotICAgIH0NCi0jZW5kaWYNCi0gICAgDQotICAgIC8qIEV2ZW4gcGFydCAqLw0KLSAgICANCi0gICAgdG1wMTAgPSAoKElOVDMyKSB3c3B0clswXSkgPDwgKENPTlNUX0JJVFMrMik7DQotICAgIA0KLSAgICAvKiBPZGQgcGFydCAqLw0KLQ0KLSAgICB0bXAwID0gTVVMVElQTFkoKElOVDMyKSB3c3B0cls3XSwgLSBGSVhfMF83MjA5NTk4MjIpIC8qIHNxcnQoMikgKiAoYzctYzUrYzMtYzEpICovDQotCSArIE1VTFRJUExZKChJTlQzMikgd3NwdHJbNV0sIEZJWF8wXzg1MDQzMDA5NSkgLyogc3FydCgyKSAqICgtYzErYzMrYzUrYzcpICovDQotCSArIE1VTFRJUExZKChJTlQzMikgd3NwdHJbM10sIC0gRklYXzFfMjcyNzU4NTgwKSAvKiBzcXJ0KDIpICogKC1jMStjMy1jNS1jNykgKi8NCi0JICsgTVVMVElQTFkoKElOVDMyKSB3c3B0clsxXSwgRklYXzNfNjI0NTA5Nzg1KTsgLyogc3FydCgyKSAqIChjMStjMytjNStjNykgKi8NCi0NCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovDQotICAgIA0KLSAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKHRtcDEwICsgdG1wMCwNCi0JCQkJCSAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMikNCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsNCi0gICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSh0bXAxMCAtIHRtcDAsDQotCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKzIpDQotCQkJICAgICYgUkFOR0VfTUFTS107DQotICAgIA0KLSAgICB3c3B0ciArPSBEQ1RTSVpFOwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovDQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywNCi0gKiBwcm9kdWNpbmcgYSByZWR1Y2VkLXNpemUgMXgxIG91dHB1dCBibG9jay4NCi0gKi8NCi0NCi1HTE9CQUwodm9pZCkNCi1qcGVnX2lkY3RfMXgxIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwNCi0JICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssDQotCSAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkNCi17DQotICBpbnQgZGN2YWw7DQotICBJU0xPV19NVUxUX1RZUEUgKiBxdWFudHB0cjsNCi0gIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7DQotICBTSElGVF9URU1QUw0KLQ0KLSAgLyogV2UgaGFyZGx5IG5lZWQgYW4gaW52ZXJzZSBEQ1Qgcm91dGluZSBmb3IgdGhpczoganVzdCB0YWtlIHRoZQ0KLSAgICogYXZlcmFnZSBwaXhlbCB2YWx1ZSwgd2hpY2ggaXMgb25lLWVpZ2h0aCBvZiB0aGUgREMgY29lZmZpY2llbnQuDQotICAgKi8NCi0gIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7DQotICBkY3ZhbCA9IERFUVVBTlRJWkUoY29lZl9ibG9ja1swXSwgcXVhbnRwdHJbMF0pOw0KLSAgZGN2YWwgPSAoaW50KSBERVNDQUxFKChJTlQzMikgZGN2YWwsIDMpOw0KLQ0KLSAgb3V0cHV0X2J1ZlswXVtvdXRwdXRfY29sXSA9IHJhbmdlX2xpbWl0W2RjdmFsICYgUkFOR0VfTUFTS107DQotfQ0KLQ0KLSNlbmRpZiAvKiBJRENUX1NDQUxJTkdfU1VQUE9SVEVEICovDQotDQotI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fDQorI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykKKy8qCisgKiBqaWRjdHJlZC5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTgsIFRob21hcyBHLiBMYW5lLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgaW52ZXJzZS1EQ1Qgcm91dGluZXMgdGhhdCBwcm9kdWNlIHJlZHVjZWQtc2l6ZSBvdXRwdXQ6CisgKiBlaXRoZXIgNHg0LCAyeDIsIG9yIDF4MSBwaXhlbHMgZnJvbSBhbiA4eDggRENUIGJsb2NrLgorICoKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiB0aGUgTG9lZmZsZXIsIExpZ3RlbmJlcmcgYW5kIE1vc2NoeXR6IChMTCZNKQorICogYWxnb3JpdGhtIHVzZWQgaW4gamlkY3RpbnQuYy4gIFdlIHNpbXBseSByZXBsYWNlIGVhY2ggOC10by04IDEtRCBJRENUIHN0ZXAKKyAqIHdpdGggYW4gOC10by00IHN0ZXAgdGhhdCBwcm9kdWNlcyB0aGUgZm91ciBhdmVyYWdlcyBvZiB0d28gYWRqYWNlbnQgb3V0cHV0cworICogKG9yIGFuIDgtdG8tMiBzdGVwIHByb2R1Y2luZyB0d28gYXZlcmFnZXMgb2YgZm91ciBvdXRwdXRzLCBmb3IgMngyIG91dHB1dCkuCisgKiBUaGVzZSBzdGVwcyB3ZXJlIGRlcml2ZWQgYnkgY29tcHV0aW5nIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBhdCB0aGUgZW5kCisgKiBvZiB0aGUgbm9ybWFsIExMJk0gY29kZSwgdGhlbiBzaW1wbGlmeWluZyBhcyBtdWNoIGFzIHBvc3NpYmxlLgorICoKKyAqIDF4MSBpcyB0cml2aWFsOiBqdXN0IHRha2UgdGhlIERDIGNvZWZmaWNpZW50IGRpdmlkZWQgYnkgOC4KKyAqCisgKiBTZWUgamlkY3RpbnQuYyBmb3IgYWRkaXRpb25hbCBjb21tZW50cy4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAiamRjdC5oIgkJLyogUHJpdmF0ZSBkZWNsYXJhdGlvbnMgZm9yIERDVCBzdWJzeXN0ZW0gKi8KKworI2lmZGVmIElEQ1RfU0NBTElOR19TVVBQT1JURUQKKworCisvKgorICogVGhpcyBtb2R1bGUgaXMgc3BlY2lhbGl6ZWQgdG8gdGhlIGNhc2UgRENUU0laRSA9IDguCisgKi8KKworI2lmIERDVFNJWkUgIT0gOAorICBTb3JyeSwgdGhpcyBjb2RlIG9ubHkgY29wZXMgd2l0aCA4eDggRENUcy4gLyogZGVsaWJlcmF0ZSBzeW50YXggZXJyICovCisjZW5kaWYKKworCisvKiBTY2FsaW5nIGlzIHRoZSBzYW1lIGFzIGluIGppZGN0aW50LmMuICovCisKKyNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOAorI2RlZmluZSBDT05TVF9CSVRTICAxMworI2RlZmluZSBQQVNTMV9CSVRTICAyCisjZWxzZQorI2RlZmluZSBDT05TVF9CSVRTICAxMworI2RlZmluZSBQQVNTMV9CSVRTICAxCQkvKiBsb3NlIGEgbGl0dGxlIHByZWNpc2lvbiB0byBhdm9pZCBvdmVyZmxvdyAqLworI2VuZGlmCisKKy8qIFNvbWUgQyBjb21waWxlcnMgZmFpbCB0byByZWR1Y2UgIkZJWChjb25zdGFudCkiIGF0IGNvbXBpbGUgdGltZSwgdGh1cworICogY2F1c2luZyBhIGxvdCBvZiB1c2VsZXNzIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgYXQgcnVuIHRpbWUuCisgKiBUbyBnZXQgYXJvdW5kIHRoaXMgd2UgdXNlIHRoZSBmb2xsb3dpbmcgcHJlLWNhbGN1bGF0ZWQgY29uc3RhbnRzLgorICogSWYgeW91IGNoYW5nZSBDT05TVF9CSVRTIHlvdSBtYXkgd2FudCB0byBhZGQgYXBwcm9wcmlhdGUgdmFsdWVzLgorICogKFdpdGggYSByZWFzb25hYmxlIEMgY29tcGlsZXIsIHlvdSBjYW4ganVzdCByZWx5IG9uIHRoZSBGSVgoKSBtYWNyby4uLikKKyAqLworCisjaWYgQ09OU1RfQklUUyA9PSAxMworI2RlZmluZSBGSVhfMF8yMTExNjQyNDMgICgoSU5UMzIpICAxNzMwKQkvKiBGSVgoMC4yMTExNjQyNDMpICovCisjZGVmaW5lIEZJWF8wXzUwOTc5NTU3OSAgKChJTlQzMikgIDQxNzYpCS8qIEZJWCgwLjUwOTc5NTU3OSkgKi8KKyNkZWZpbmUgRklYXzBfNjAxMzQ0ODg3ICAoKElOVDMyKSAgNDkyNikJLyogRklYKDAuNjAxMzQ0ODg3KSAqLworI2RlZmluZSBGSVhfMF83MjA5NTk4MjIgICgoSU5UMzIpICA1OTA2KQkvKiBGSVgoMC43MjA5NTk4MjIpICovCisjZGVmaW5lIEZJWF8wXzc2NTM2Njg2NSAgKChJTlQzMikgIDYyNzApCS8qIEZJWCgwLjc2NTM2Njg2NSkgKi8KKyNkZWZpbmUgRklYXzBfODUwNDMwMDk1ICAoKElOVDMyKSAgNjk2NykJLyogRklYKDAuODUwNDMwMDk1KSAqLworI2RlZmluZSBGSVhfMF84OTk5NzYyMjMgICgoSU5UMzIpICA3MzczKQkvKiBGSVgoMC44OTk5NzYyMjMpICovCisjZGVmaW5lIEZJWF8xXzA2MTU5NDMzNyAgKChJTlQzMikgIDg2OTcpCS8qIEZJWCgxLjA2MTU5NDMzNykgKi8KKyNkZWZpbmUgRklYXzFfMjcyNzU4NTgwICAoKElOVDMyKSAgMTA0MjYpCS8qIEZJWCgxLjI3Mjc1ODU4MCkgKi8KKyNkZWZpbmUgRklYXzFfNDUxNzc0OTgxICAoKElOVDMyKSAgMTE4OTMpCS8qIEZJWCgxLjQ1MTc3NDk4MSkgKi8KKyNkZWZpbmUgRklYXzFfODQ3NzU5MDY1ICAoKElOVDMyKSAgMTUxMzcpCS8qIEZJWCgxLjg0Nzc1OTA2NSkgKi8KKyNkZWZpbmUgRklYXzJfMTcyNzM0ODAzICAoKElOVDMyKSAgMTc3OTkpCS8qIEZJWCgyLjE3MjczNDgwMykgKi8KKyNkZWZpbmUgRklYXzJfNTYyOTE1NDQ3ICAoKElOVDMyKSAgMjA5OTUpCS8qIEZJWCgyLjU2MjkxNTQ0NykgKi8KKyNkZWZpbmUgRklYXzNfNjI0NTA5Nzg1ICAoKElOVDMyKSAgMjk2OTIpCS8qIEZJWCgzLjYyNDUwOTc4NSkgKi8KKyNlbHNlCisjZGVmaW5lIEZJWF8wXzIxMTE2NDI0MyAgRklYKDAuMjExMTY0MjQzKQorI2RlZmluZSBGSVhfMF81MDk3OTU1NzkgIEZJWCgwLjUwOTc5NTU3OSkKKyNkZWZpbmUgRklYXzBfNjAxMzQ0ODg3ICBGSVgoMC42MDEzNDQ4ODcpCisjZGVmaW5lIEZJWF8wXzcyMDk1OTgyMiAgRklYKDAuNzIwOTU5ODIyKQorI2RlZmluZSBGSVhfMF83NjUzNjY4NjUgIEZJWCgwLjc2NTM2Njg2NSkKKyNkZWZpbmUgRklYXzBfODUwNDMwMDk1ICBGSVgoMC44NTA0MzAwOTUpCisjZGVmaW5lIEZJWF8wXzg5OTk3NjIyMyAgRklYKDAuODk5OTc2MjIzKQorI2RlZmluZSBGSVhfMV8wNjE1OTQzMzcgIEZJWCgxLjA2MTU5NDMzNykKKyNkZWZpbmUgRklYXzFfMjcyNzU4NTgwICBGSVgoMS4yNzI3NTg1ODApCisjZGVmaW5lIEZJWF8xXzQ1MTc3NDk4MSAgRklYKDEuNDUxNzc0OTgxKQorI2RlZmluZSBGSVhfMV84NDc3NTkwNjUgIEZJWCgxLjg0Nzc1OTA2NSkKKyNkZWZpbmUgRklYXzJfMTcyNzM0ODAzICBGSVgoMi4xNzI3MzQ4MDMpCisjZGVmaW5lIEZJWF8yXzU2MjkxNTQ0NyAgRklYKDIuNTYyOTE1NDQ3KQorI2RlZmluZSBGSVhfM182MjQ1MDk3ODUgIEZJWCgzLjYyNDUwOTc4NSkKKyNlbmRpZgorCisKKy8qIE11bHRpcGx5IGFuIElOVDMyIHZhcmlhYmxlIGJ5IGFuIElOVDMyIGNvbnN0YW50IHRvIHlpZWxkIGFuIElOVDMyIHJlc3VsdC4KKyAqIEZvciA4LWJpdCBzYW1wbGVzIHdpdGggdGhlIHJlY29tbWVuZGVkIHNjYWxpbmcsIGFsbCB0aGUgdmFyaWFibGUKKyAqIGFuZCBjb25zdGFudCB2YWx1ZXMgaW52b2x2ZWQgYXJlIG5vIG1vcmUgdGhhbiAxNiBiaXRzIHdpZGUsIHNvIGEKKyAqIDE2eDE2LT4zMiBiaXQgbXVsdGlwbHkgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBhIGZ1bGwgMzJ4MzIgbXVsdGlwbHkuCisgKiBGb3IgMTItYml0IHNhbXBsZXMsIGEgZnVsbCAzMi1iaXQgbXVsdGlwbGljYXRpb24gd2lsbCBiZSBuZWVkZWQuCisgKi8KKworI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4CisjZGVmaW5lIE1VTFRJUExZKHZhcixjb25zdCkgIE1VTFRJUExZMTZDMTYodmFyLGNvbnN0KQorI2Vsc2UKKyNkZWZpbmUgTVVMVElQTFkodmFyLGNvbnN0KSAgKCh2YXIpICogKGNvbnN0KSkKKyNlbmRpZgorCisKKy8qIERlcXVhbnRpemUgYSBjb2VmZmljaWVudCBieSBtdWx0aXBseWluZyBpdCBieSB0aGUgbXVsdGlwbGllci10YWJsZQorICogZW50cnk7IHByb2R1Y2UgYW4gaW50IHJlc3VsdC4gIEluIHRoaXMgbW9kdWxlLCBib3RoIGlucHV0cyBhbmQgcmVzdWx0CisgKiBhcmUgMTYgYml0cyBvciBsZXNzLCBzbyBlaXRoZXIgaW50IG9yIHNob3J0IG11bHRpcGx5IHdpbGwgd29yay4KKyAqLworCisjZGVmaW5lIERFUVVBTlRJWkUoY29lZixxdWFudHZhbCkgICgoKElTTE9XX01VTFRfVFlQRSkgKGNvZWYpKSAqIChxdWFudHZhbCkpCisKKworLyoKKyAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCisgKiBwcm9kdWNpbmcgYSByZWR1Y2VkLXNpemUgNHg0IG91dHB1dCBibG9jay4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfaWRjdF80eDQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCSAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorCSAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAgSU5UMzIgdG1wMCwgdG1wMiwgdG1wMTAsIHRtcDEyOworICBJTlQzMiB6MSwgejIsIHozLCB6NDsKKyAgSkNPRUZQVFIgaW5wdHI7CisgIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOworICBpbnQgKiB3c3B0cjsKKyAgSlNBTVBST1cgb3V0cHRyOworICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOworICBpbnQgY3RyOworICBpbnQgd29ya3NwYWNlW0RDVFNJWkUqNF07CS8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLworICBTSElGVF9URU1QUworCisgIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KKworICBpbnB0ciA9IGNvZWZfYmxvY2s7CisgIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7CisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IERDVFNJWkU7IGN0ciA+IDA7IGlucHRyKyssIHF1YW50cHRyKyssIHdzcHRyKyssIGN0ci0tKSB7CisgICAgLyogRG9uJ3QgYm90aGVyIHRvIHByb2Nlc3MgY29sdW1uIDQsIGJlY2F1c2Ugc2Vjb25kIHBhc3Mgd29uJ3QgdXNlIGl0ICovCisgICAgaWYgKGN0ciA9PSBEQ1RTSVpFLTQpCisgICAgICBjb250aW51ZTsKKyAgICBpZiAoaW5wdHJbRENUU0laRSoxXSA9PSAwICYmIGlucHRyW0RDVFNJWkUqMl0gPT0gMCAmJgorCWlucHRyW0RDVFNJWkUqM10gPT0gMCAmJiBpbnB0cltEQ1RTSVpFKjVdID09IDAgJiYKKwlpbnB0cltEQ1RTSVpFKjZdID09IDAgJiYgaW5wdHJbRENUU0laRSo3XSA9PSAwKSB7CisgICAgICAvKiBBQyB0ZXJtcyBhbGwgemVybzsgd2UgbmVlZCBub3QgZXhhbWluZSB0ZXJtIDQgZm9yIDR4NCBvdXRwdXQgKi8KKyAgICAgIGludCBkY3ZhbCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSkgPDwgUEFTUzFfQklUUzsKKyAgICAgIAorICAgICAgd3NwdHJbRENUU0laRSowXSA9IGRjdmFsOworICAgICAgd3NwdHJbRENUU0laRSoxXSA9IGRjdmFsOworICAgICAgd3NwdHJbRENUU0laRSoyXSA9IGRjdmFsOworICAgICAgd3NwdHJbRENUU0laRSozXSA9IGRjdmFsOworICAgICAgCisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgCisgICAgLyogRXZlbiBwYXJ0ICovCisgICAgCisgICAgdG1wMCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7CisgICAgdG1wMCA8PD0gKENPTlNUX0JJVFMrMSk7CisgICAgCisgICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMl0sIHF1YW50cHRyW0RDVFNJWkUqMl0pOworICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjZdLCBxdWFudHB0cltEQ1RTSVpFKjZdKTsKKworICAgIHRtcDIgPSBNVUxUSVBMWSh6MiwgRklYXzFfODQ3NzU5MDY1KSArIE1VTFRJUExZKHozLCAtIEZJWF8wXzc2NTM2Njg2NSk7CisgICAgCisgICAgdG1wMTAgPSB0bXAwICsgdG1wMjsKKyAgICB0bXAxMiA9IHRtcDAgLSB0bXAyOworICAgIAorICAgIC8qIE9kZCBwYXJ0ICovCisgICAgCisgICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqN10sIHF1YW50cHRyW0RDVFNJWkUqN10pOworICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKTsKKyAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSozXSwgcXVhbnRwdHJbRENUU0laRSozXSk7CisgICAgejQgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMV0sIHF1YW50cHRyW0RDVFNJWkUqMV0pOworICAgIAorICAgIHRtcDAgPSBNVUxUSVBMWSh6MSwgLSBGSVhfMF8yMTExNjQyNDMpIC8qIHNxcnQoMikgKiAoYzMtYzEpICovCisJICsgTVVMVElQTFkoejIsIEZJWF8xXzQ1MTc3NDk4MSkgLyogc3FydCgyKSAqIChjMytjNykgKi8KKwkgKyBNVUxUSVBMWSh6MywgLSBGSVhfMl8xNzI3MzQ4MDMpIC8qIHNxcnQoMikgKiAoLWMxLWM1KSAqLworCSArIE1VTFRJUExZKHo0LCBGSVhfMV8wNjE1OTQzMzcpOyAvKiBzcXJ0KDIpICogKGM1K2M3KSAqLworICAgIAorICAgIHRtcDIgPSBNVUxUSVBMWSh6MSwgLSBGSVhfMF81MDk3OTU1NzkpIC8qIHNxcnQoMikgKiAoYzctYzUpICovCisJICsgTVVMVElQTFkoejIsIC0gRklYXzBfNjAxMzQ0ODg3KSAvKiBzcXJ0KDIpICogKGM1LWMxKSAqLworCSArIE1VTFRJUExZKHozLCBGSVhfMF84OTk5NzYyMjMpIC8qIHNxcnQoMikgKiAoYzMtYzcpICovCisJICsgTVVMVElQTFkoejQsIEZJWF8yXzU2MjkxNTQ0Nyk7IC8qIHNxcnQoMikgKiAoYzErYzMpICovCisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKyAgICAKKyAgICB3c3B0cltEQ1RTSVpFKjBdID0gKGludCkgREVTQ0FMRSh0bXAxMCArIHRtcDIsIENPTlNUX0JJVFMtUEFTUzFfQklUUysxKTsKKyAgICB3c3B0cltEQ1RTSVpFKjNdID0gKGludCkgREVTQ0FMRSh0bXAxMCAtIHRtcDIsIENPTlNUX0JJVFMtUEFTUzFfQklUUysxKTsKKyAgICB3c3B0cltEQ1RTSVpFKjFdID0gKGludCkgREVTQ0FMRSh0bXAxMiArIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUysxKTsKKyAgICB3c3B0cltEQ1RTSVpFKjJdID0gKGludCkgREVTQ0FMRSh0bXAxMiAtIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUysxKTsKKyAgfQorICAKKyAgLyogUGFzcyAyOiBwcm9jZXNzIDQgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLworCisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IDA7IGN0ciA8IDQ7IGN0cisrKSB7CisgICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKKyAgICAvKiBJdCdzIG5vdCBjbGVhciB3aGV0aGVyIGEgemVybyByb3cgdGVzdCBpcyB3b3J0aHdoaWxlIGhlcmUgLi4uICovCisKKyNpZm5kZWYgTk9fWkVST19ST1dfVEVTVAorICAgIGlmICh3c3B0clsxXSA9PSAwICYmIHdzcHRyWzJdID09IDAgJiYgd3NwdHJbM10gPT0gMCAmJgorCXdzcHRyWzVdID09IDAgJiYgd3NwdHJbNl0gPT0gMCAmJiB3c3B0cls3XSA9PSAwKSB7CisgICAgICAvKiBBQyB0ZXJtcyBhbGwgemVybyAqLworICAgICAgSlNBTVBMRSBkY3ZhbCA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUoKElOVDMyKSB3c3B0clswXSwgUEFTUzFfQklUUyszKQorCQkJCSAgJiBSQU5HRV9NQVNLXTsKKyAgICAgIAorICAgICAgb3V0cHRyWzBdID0gZGN2YWw7CisgICAgICBvdXRwdHJbMV0gPSBkY3ZhbDsKKyAgICAgIG91dHB0clsyXSA9IGRjdmFsOworICAgICAgb3V0cHRyWzNdID0gZGN2YWw7CisgICAgICAKKyAgICAgIHdzcHRyICs9IERDVFNJWkU7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIC8qIEV2ZW4gcGFydCAqLworICAgIAorICAgIHRtcDAgPSAoKElOVDMyKSB3c3B0clswXSkgPDwgKENPTlNUX0JJVFMrMSk7CisgICAgCisgICAgdG1wMiA9IE1VTFRJUExZKChJTlQzMikgd3NwdHJbMl0sIEZJWF8xXzg0Nzc1OTA2NSkKKwkgKyBNVUxUSVBMWSgoSU5UMzIpIHdzcHRyWzZdLCAtIEZJWF8wXzc2NTM2Njg2NSk7CisgICAgCisgICAgdG1wMTAgPSB0bXAwICsgdG1wMjsKKyAgICB0bXAxMiA9IHRtcDAgLSB0bXAyOworICAgIAorICAgIC8qIE9kZCBwYXJ0ICovCisgICAgCisgICAgejEgPSAoSU5UMzIpIHdzcHRyWzddOworICAgIHoyID0gKElOVDMyKSB3c3B0cls1XTsKKyAgICB6MyA9IChJTlQzMikgd3NwdHJbM107CisgICAgejQgPSAoSU5UMzIpIHdzcHRyWzFdOworICAgIAorICAgIHRtcDAgPSBNVUxUSVBMWSh6MSwgLSBGSVhfMF8yMTExNjQyNDMpIC8qIHNxcnQoMikgKiAoYzMtYzEpICovCisJICsgTVVMVElQTFkoejIsIEZJWF8xXzQ1MTc3NDk4MSkgLyogc3FydCgyKSAqIChjMytjNykgKi8KKwkgKyBNVUxUSVBMWSh6MywgLSBGSVhfMl8xNzI3MzQ4MDMpIC8qIHNxcnQoMikgKiAoLWMxLWM1KSAqLworCSArIE1VTFRJUExZKHo0LCBGSVhfMV8wNjE1OTQzMzcpOyAvKiBzcXJ0KDIpICogKGM1K2M3KSAqLworICAgIAorICAgIHRtcDIgPSBNVUxUSVBMWSh6MSwgLSBGSVhfMF81MDk3OTU1NzkpIC8qIHNxcnQoMikgKiAoYzctYzUpICovCisJICsgTVVMVElQTFkoejIsIC0gRklYXzBfNjAxMzQ0ODg3KSAvKiBzcXJ0KDIpICogKGM1LWMxKSAqLworCSArIE1VTFRJUExZKHozLCBGSVhfMF84OTk5NzYyMjMpIC8qIHNxcnQoMikgKiAoYzMtYzcpICovCisJICsgTVVMVElQTFkoejQsIEZJWF8yXzU2MjkxNTQ0Nyk7IC8qIHNxcnQoMikgKiAoYzErYzMpICovCisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKyAgICAKKyAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKHRtcDEwICsgdG1wMiwKKwkJCQkJICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMysxKQorCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzNdID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSh0bXAxMCAtIHRtcDIsCisJCQkJCSAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMSkKKwkJCSAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTIgKyB0bXAwLAorCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKzEpCisJCQkgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMl0gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKHRtcDEyIC0gdG1wMCwKKwkJCQkJICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMysxKQorCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgCisgICAgd3NwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLworICB9Cit9CisKKworLyoKKyAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCisgKiBwcm9kdWNpbmcgYSByZWR1Y2VkLXNpemUgMngyIG91dHB1dCBibG9jay4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfaWRjdF8yeDIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCSAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorCSAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAgSU5UMzIgdG1wMCwgdG1wMTAsIHoxOworICBKQ09FRlBUUiBpbnB0cjsKKyAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7CisgIGludCAqIHdzcHRyOworICBKU0FNUFJPVyBvdXRwdHI7CisgIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7CisgIGludCBjdHI7CisgIGludCB3b3Jrc3BhY2VbRENUU0laRSoyXTsJLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCisgIFNISUZUX1RFTVBTCisKKyAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LiAqLworCisgIGlucHRyID0gY29lZl9ibG9jazsKKyAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gRENUU0laRTsgY3RyID4gMDsgaW5wdHIrKywgcXVhbnRwdHIrKywgd3NwdHIrKywgY3RyLS0pIHsKKyAgICAvKiBEb24ndCBib3RoZXIgdG8gcHJvY2VzcyBjb2x1bW5zIDIsNCw2ICovCisgICAgaWYgKGN0ciA9PSBEQ1RTSVpFLTIgfHwgY3RyID09IERDVFNJWkUtNCB8fCBjdHIgPT0gRENUU0laRS02KQorICAgICAgY29udGludWU7CisgICAgaWYgKGlucHRyW0RDVFNJWkUqMV0gPT0gMCAmJiBpbnB0cltEQ1RTSVpFKjNdID09IDAgJiYKKwlpbnB0cltEQ1RTSVpFKjVdID09IDAgJiYgaW5wdHJbRENUU0laRSo3XSA9PSAwKSB7CisgICAgICAvKiBBQyB0ZXJtcyBhbGwgemVybzsgd2UgbmVlZCBub3QgZXhhbWluZSB0ZXJtcyAyLDQsNiBmb3IgMngyIG91dHB1dCAqLworICAgICAgaW50IGRjdmFsID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKSA8PCBQQVNTMV9CSVRTOworICAgICAgCisgICAgICB3c3B0cltEQ1RTSVpFKjBdID0gZGN2YWw7CisgICAgICB3c3B0cltEQ1RTSVpFKjFdID0gZGN2YWw7CisgICAgICAKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICAKKyAgICAvKiBFdmVuIHBhcnQgKi8KKyAgICAKKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7CisgICAgdG1wMTAgPSB6MSA8PCAoQ09OU1RfQklUUysyKTsKKyAgICAKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqN10sIHF1YW50cHRyW0RDVFNJWkUqN10pOworICAgIHRtcDAgPSBNVUxUSVBMWSh6MSwgLSBGSVhfMF83MjA5NTk4MjIpOyAvKiBzcXJ0KDIpICogKGM3LWM1K2MzLWMxKSAqLworICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKTsKKyAgICB0bXAwICs9IE1VTFRJUExZKHoxLCBGSVhfMF84NTA0MzAwOTUpOyAvKiBzcXJ0KDIpICogKC1jMStjMytjNStjNykgKi8KKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSozXSwgcXVhbnRwdHJbRENUU0laRSozXSk7CisgICAgdG1wMCArPSBNVUxUSVBMWSh6MSwgLSBGSVhfMV8yNzI3NTg1ODApOyAvKiBzcXJ0KDIpICogKC1jMStjMy1jNS1jNykgKi8KKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7CisgICAgdG1wMCArPSBNVUxUSVBMWSh6MSwgRklYXzNfNjI0NTA5Nzg1KTsgLyogc3FydCgyKSAqIChjMStjMytjNStjNykgKi8KKworICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLworICAgIAorICAgIHdzcHRyW0RDVFNJWkUqMF0gPSAoaW50KSBERVNDQUxFKHRtcDEwICsgdG1wMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKzIpOworICAgIHdzcHRyW0RDVFNJWkUqMV0gPSAoaW50KSBERVNDQUxFKHRtcDEwIC0gdG1wMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKzIpOworICB9CisgIAorICAvKiBQYXNzIDI6IHByb2Nlc3MgMiByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCisKKyAgd3NwdHIgPSB3b3Jrc3BhY2U7CisgIGZvciAoY3RyID0gMDsgY3RyIDwgMjsgY3RyKyspIHsKKyAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOworICAgIC8qIEl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgYSB6ZXJvIHJvdyB0ZXN0IGlzIHdvcnRod2hpbGUgaGVyZSAuLi4gKi8KKworI2lmbmRlZiBOT19aRVJPX1JPV19URVNUCisgICAgaWYgKHdzcHRyWzFdID09IDAgJiYgd3NwdHJbM10gPT0gMCAmJiB3c3B0cls1XSA9PSAwICYmIHdzcHRyWzddID09IDApIHsKKyAgICAgIC8qIEFDIHRlcm1zIGFsbCB6ZXJvICovCisgICAgICBKU0FNUExFIGRjdmFsID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSgoSU5UMzIpIHdzcHRyWzBdLCBQQVNTMV9CSVRTKzMpCisJCQkJICAmIFJBTkdFX01BU0tdOworICAgICAgCisgICAgICBvdXRwdHJbMF0gPSBkY3ZhbDsKKyAgICAgIG91dHB0clsxXSA9IGRjdmFsOworICAgICAgCisgICAgICB3c3B0ciArPSBEQ1RTSVpFOwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgICAgICBjb250aW51ZTsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICAvKiBFdmVuIHBhcnQgKi8KKyAgICAKKyAgICB0bXAxMCA9ICgoSU5UMzIpIHdzcHRyWzBdKSA8PCAoQ09OU1RfQklUUysyKTsKKyAgICAKKyAgICAvKiBPZGQgcGFydCAqLworCisgICAgdG1wMCA9IE1VTFRJUExZKChJTlQzMikgd3NwdHJbN10sIC0gRklYXzBfNzIwOTU5ODIyKSAvKiBzcXJ0KDIpICogKGM3LWM1K2MzLWMxKSAqLworCSArIE1VTFRJUExZKChJTlQzMikgd3NwdHJbNV0sIEZJWF8wXzg1MDQzMDA5NSkgLyogc3FydCgyKSAqICgtYzErYzMrYzUrYzcpICovCisJICsgTVVMVElQTFkoKElOVDMyKSB3c3B0clszXSwgLSBGSVhfMV8yNzI3NTg1ODApIC8qIHNxcnQoMikgKiAoLWMxK2MzLWM1LWM3KSAqLworCSArIE1VTFRJUExZKChJTlQzMikgd3NwdHJbMV0sIEZJWF8zXzYyNDUwOTc4NSk7IC8qIHNxcnQoMikgKiAoYzErYzMrYzUrYzcpICovCisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKyAgICAKKyAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKHRtcDEwICsgdG1wMCwKKwkJCQkJICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMysyKQorCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSh0bXAxMCAtIHRtcDAsCisJCQkJCSAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMikKKwkJCSAgICAmIFJBTkdFX01BU0tdOworICAgIAorICAgIHdzcHRyICs9IERDVFNJWkU7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KKyAgfQorfQorCisKKy8qCisgKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAorICogcHJvZHVjaW5nIGEgcmVkdWNlZC1zaXplIDF4MSBvdXRwdXQgYmxvY2suCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2lkY3RfMXgxIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKwkgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIGludCBkY3ZhbDsKKyAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7CisgIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7CisgIFNISUZUX1RFTVBTCisKKyAgLyogV2UgaGFyZGx5IG5lZWQgYW4gaW52ZXJzZSBEQ1Qgcm91dGluZSBmb3IgdGhpczoganVzdCB0YWtlIHRoZQorICAgKiBhdmVyYWdlIHBpeGVsIHZhbHVlLCB3aGljaCBpcyBvbmUtZWlnaHRoIG9mIHRoZSBEQyBjb2VmZmljaWVudC4KKyAgICovCisgIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7CisgIGRjdmFsID0gREVRVUFOVElaRShjb2VmX2Jsb2NrWzBdLCBxdWFudHB0clswXSk7CisgIGRjdmFsID0gKGludCkgREVTQ0FMRSgoSU5UMzIpIGRjdmFsLCAzKTsKKworICBvdXRwdXRfYnVmWzBdW291dHB1dF9jb2xdID0gcmFuZ2VfbGltaXRbZGN2YWwgJiBSQU5HRV9NQVNLXTsKK30KKworI2VuZGlmIC8qIElEQ1RfU0NBTElOR19TVVBQT1JURUQgKi8KKworI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qbWVtbWdyLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qbWVtbWdyLmMKaW5kZXggMTllZTY2NS4uNjMwMTAyZiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfam1lbW1nci5jCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2ptZW1tZ3IuYwpAQCAtMSwxMTIzICsxLDExMjMgQEAKLSNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pDQotLyoNCi0gKiBqbWVtbWdyLmMNCi0gKg0KLSAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4NCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLg0KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4NCi0gKg0KLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgSlBFRyBzeXN0ZW0taW5kZXBlbmRlbnQgbWVtb3J5IG1hbmFnZW1lbnQNCi0gKiByb3V0aW5lcy4gIFRoaXMgY29kZSBpcyB1c2FibGUgYWNyb3NzIGEgd2lkZSB2YXJpZXR5IG9mIG1hY2hpbmVzOyBtb3N0DQotICogb2YgdGhlIHN5c3RlbSBkZXBlbmRlbmNpZXMgaGF2ZSBiZWVuIGlzb2xhdGVkIGluIGEgc2VwYXJhdGUgZmlsZS4NCi0gKiBUaGUgbWFqb3IgZnVuY3Rpb25zIHByb3ZpZGVkIGhlcmUgYXJlOg0KLSAqICAgKiBwb29sLWJhc2VkIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgb2YgbWVtb3J5Ow0KLSAqICAgKiBwb2xpY3kgZGVjaXNpb25zIGFib3V0IGhvdyB0byBkaXZpZGUgYXZhaWxhYmxlIG1lbW9yeSBhbW9uZyB0aGUNCi0gKiAgICAgdmlydHVhbCBhcnJheXM7DQotICogICAqIGNvbnRyb2wgbG9naWMgZm9yIHN3YXBwaW5nIHZpcnR1YWwgYXJyYXlzIGJldHdlZW4gbWFpbiBtZW1vcnkgYW5kDQotICogICAgIGJhY2tpbmcgc3RvcmFnZS4NCi0gKiBUaGUgc2VwYXJhdGUgc3lzdGVtLWRlcGVuZGVudCBmaWxlIHByb3ZpZGVzIHRoZSBhY3R1YWwgYmFja2luZy1zdG9yYWdlDQotICogYWNjZXNzIGNvZGUsIGFuZCBpdCBjb250YWlucyB0aGUgcG9saWN5IGRlY2lzaW9uIGFib3V0IGhvdyBtdWNoIHRvdGFsDQotICogbWFpbiBtZW1vcnkgdG8gdXNlLg0KLSAqIFRoaXMgZmlsZSBpcyBzeXN0ZW0tZGVwZW5kZW50IGluIHRoZSBzZW5zZSB0aGF0IHNvbWUgb2YgaXRzIGZ1bmN0aW9ucw0KLSAqIGFyZSB1bm5lY2Vzc2FyeSBpbiBzb21lIHN5c3RlbXMuICBGb3IgZXhhbXBsZSwgaWYgdGhlcmUgaXMgZW5vdWdoIHZpcnR1YWwNCi0gKiBtZW1vcnkgc28gdGhhdCBiYWNraW5nIHN0b3JhZ2Ugd2lsbCBuZXZlciBiZSB1c2VkLCBtdWNoIG9mIHRoZSB2aXJ0dWFsDQotICogYXJyYXkgY29udHJvbCBsb2dpYyBjb3VsZCBiZSByZW1vdmVkLiAgKE9mIGNvdXJzZSwgaWYgeW91IGhhdmUgdGhhdCBtdWNoDQotICogbWVtb3J5IHRoZW4geW91IHNob3VsZG4ndCBjYXJlIGFib3V0IGEgbGl0dGxlIGJpdCBvZiB1bnVzZWQgY29kZS4uLikNCi0gKi8NCi0NCi0jZGVmaW5lIEpQRUdfSU5URVJOQUxTDQotI2RlZmluZSBBTV9NRU1PUllfTUFOQUdFUgkvKiB3ZSBkZWZpbmUganZpcnRfWGFycmF5X2NvbnRyb2wgc3RydWN0cyAqLw0KLSNpbmNsdWRlICJqaW5jbHVkZS5oIg0KLSNpbmNsdWRlICJqcGVnbGliLmgiDQotI2luY2x1ZGUgImptZW1zeXMuaCIJCS8qIGltcG9ydCB0aGUgc3lzdGVtLWRlcGVuZGVudCBkZWNsYXJhdGlvbnMgKi8NCi0NCi0jZGVmaW5lIE5PX0dFVEVOVgkvKiBYWVE6IDIwMDctNS0yMiBEb24ndCB1c2UgaXQgKi8NCi0NCi0jaWZuZGVmIE5PX0dFVEVOVg0KLSNpZm5kZWYgSEFWRV9TVERMSUJfSAkJLyogPHN0ZGxpYi5oPiBzaG91bGQgZGVjbGFyZSBnZXRlbnYoKSAqLw0KLWV4dGVybiBjaGFyICogZ2V0ZW52IEpQUCgoY29uc3QgY2hhciAqIG5hbWUpKTsNCi0jZW5kaWYNCi0jZW5kaWYNCi0NCi0NCi0vKg0KLSAqIFNvbWUgaW1wb3J0YW50IG5vdGVzOg0KLSAqICAgVGhlIGFsbG9jYXRpb24gcm91dGluZXMgcHJvdmlkZWQgaGVyZSBtdXN0IG5ldmVyIHJldHVybiBOVUxMLg0KLSAqICAgVGhleSBzaG91bGQgZXhpdCB0byBlcnJvcl9leGl0IGlmIHVuc3VjY2Vzc2Z1bC4NCi0gKg0KLSAqICAgSXQncyBub3QgYSBnb29kIGlkZWEgdG8gdHJ5IHRvIG1lcmdlIHRoZSBzYXJyYXkgYW5kIGJhcnJheSByb3V0aW5lcywNCi0gKiAgIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHRleHR1YWxseSBhbG1vc3QgdGhlIHNhbWUsIGJlY2F1c2Ugc2FtcGxlcyBhcmUNCi0gKiAgIHVzdWFsbHkgc3RvcmVkIGFzIGJ5dGVzIHdoaWxlIGNvZWZmaWNpZW50cyBhcmUgc2hvcnRzIG9yIGludHMuICBUaHVzLA0KLSAqICAgaW4gbWFjaGluZXMgd2hlcmUgYnl0ZSBwb2ludGVycyBoYXZlIGEgZGlmZmVyZW50IHJlcHJlc2VudGF0aW9uIGZyb20NCi0gKiAgIHdvcmQgcG9pbnRlcnMsIHRoZSByZXN1bHRpbmcgbWFjaGluZSBjb2RlIGNvdWxkIG5vdCBiZSB0aGUgc2FtZS4NCi0gKi8NCi0NCi0NCi0vKg0KLSAqIE1hbnkgbWFjaGluZXMgcmVxdWlyZSBzdG9yYWdlIGFsaWdubWVudDogbG9uZ3MgbXVzdCBzdGFydCBvbiA0LWJ5dGUNCi0gKiBib3VuZGFyaWVzLCBkb3VibGVzIG9uIDgtYnl0ZSBib3VuZGFyaWVzLCBldGMuICBPbiBzdWNoIG1hY2hpbmVzLCBtYWxsb2MoKQ0KLSAqIGFsd2F5cyByZXR1cm5zIHBvaW50ZXJzIHRoYXQgYXJlIG11bHRpcGxlcyBvZiB0aGUgd29yc3QtY2FzZSBhbGlnbm1lbnQNCi0gKiByZXF1aXJlbWVudCwgYW5kIHdlIGhhZCBiZXR0ZXIgZG8gc28gdG9vLg0KLSAqIFRoZXJlIGlzbid0IGFueSByZWFsbHkgcG9ydGFibGUgd2F5IHRvIGRldGVybWluZSB0aGUgd29yc3QtY2FzZSBhbGlnbm1lbnQNCi0gKiByZXF1aXJlbWVudC4gIFRoaXMgbW9kdWxlIGFzc3VtZXMgdGhhdCB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50IGlzDQotICogbXVsdGlwbGVzIG9mIHNpemVvZihBTElHTl9UWVBFKS4NCi0gKiBCeSBkZWZhdWx0LCB3ZSBkZWZpbmUgQUxJR05fVFlQRSBhcyBkb3VibGUuICBUaGlzIGlzIG5lY2Vzc2FyeSBvbiBzb21lDQotICogd29ya3N0YXRpb25zICh3aGVyZSBkb3VibGVzIHJlYWxseSBkbyBuZWVkIDgtYnl0ZSBhbGlnbm1lbnQpIGFuZCB3aWxsIHdvcmsNCi0gKiBmaW5lIG9uIG5lYXJseSBldmVyeXRoaW5nLiAgSWYgeW91ciBtYWNoaW5lIGhhcyBsZXNzZXIgYWxpZ25tZW50IG5lZWRzLA0KLSAqIHlvdSBjYW4gc2F2ZSBhIGZldyBieXRlcyBieSBtYWtpbmcgQUxJR05fVFlQRSBzbWFsbGVyLg0KLSAqIFRoZSBvbmx5IHBsYWNlIEkga25vdyBvZiB3aGVyZSB0aGlzIHdpbGwgTk9UIHdvcmsgaXMgY2VydGFpbiBNYWNpbnRvc2gNCi0gKiA2ODB4MCBjb21waWxlcnMgdGhhdCBkZWZpbmUgZG91YmxlIGFzIGEgMTAtYnl0ZSBJRUVFIGV4dGVuZGVkIGZsb2F0Lg0KLSAqIERvaW5nIDEwLWJ5dGUgYWxpZ25tZW50IGlzIGNvdW50ZXJwcm9kdWN0aXZlIGJlY2F1c2UgbG9uZ3dvcmRzIHdvbid0IGJlDQotICogYWxpZ25lZCB3ZWxsLiAgUHV0ICIjZGVmaW5lIEFMSUdOX1RZUEUgbG9uZyIgaW4gamNvbmZpZy5oIGlmIHlvdSBoYXZlDQotICogc3VjaCBhIGNvbXBpbGVyLg0KLSAqLw0KLQ0KLSNpZm5kZWYgQUxJR05fVFlQRQkJLyogc28gY2FuIG92ZXJyaWRlIGZyb20gamNvbmZpZy5oICovDQotI2RlZmluZSBBTElHTl9UWVBFICBkb3VibGUNCi0jZW5kaWYNCi0NCi0NCi0vKg0KLSAqIFdlIGFsbG9jYXRlIG9iamVjdHMgZnJvbSAicG9vbHMiLCB3aGVyZSBlYWNoIHBvb2wgaXMgZ290dGVuIHdpdGggYSBzaW5nbGUNCi0gKiByZXF1ZXN0IHRvIGpwZWdfZ2V0X3NtYWxsKCkgb3IganBlZ19nZXRfbGFyZ2UoKS4gIFRoZXJlIGlzIG5vIHBlci1vYmplY3QNCi0gKiBvdmVyaGVhZCB3aXRoaW4gYSBwb29sLCBleGNlcHQgZm9yIGFsaWdubWVudCBwYWRkaW5nLiAgRWFjaCBwb29sIGhhcyBhDQotICogaGVhZGVyIHdpdGggYSBsaW5rIHRvIHRoZSBuZXh0IHBvb2wgb2YgdGhlIHNhbWUgY2xhc3MuDQotICogU21hbGwgYW5kIGxhcmdlIHBvb2wgaGVhZGVycyBhcmUgaWRlbnRpY2FsIGV4Y2VwdCB0aGF0IHRoZSBsYXR0ZXIncw0KLSAqIGxpbmsgcG9pbnRlciBtdXN0IGJlIEZBUiBvbiA4MHg4NiBtYWNoaW5lcy4NCi0gKiBOb3RpY2UgdGhhdCB0aGUgInJlYWwiIGhlYWRlciBmaWVsZHMgYXJlIHVuaW9uJ2VkIHdpdGggYSBkdW1teSBBTElHTl9UWVBFDQotICogZmllbGQuICBUaGlzIGZvcmNlcyB0aGUgY29tcGlsZXIgdG8gbWFrZSBTSVpFT0Yoc21hbGxfcG9vbF9oZHIpIGEgbXVsdGlwbGUNCi0gKiBvZiB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50IG9mIEFMSUdOX1RZUEUuDQotICovDQotDQotdHlwZWRlZiB1bmlvbiBzbWFsbF9wb29sX3N0cnVjdCAqIHNtYWxsX3Bvb2xfcHRyOw0KLQ0KLXR5cGVkZWYgdW5pb24gc21hbGxfcG9vbF9zdHJ1Y3Qgew0KLSAgc3RydWN0IHsNCi0gICAgc21hbGxfcG9vbF9wdHIgbmV4dDsJLyogbmV4dCBpbiBsaXN0IG9mIHBvb2xzICovDQotICAgIHNpemVfdCBieXRlc191c2VkOwkJLyogaG93IG1hbnkgYnl0ZXMgYWxyZWFkeSB1c2VkIHdpdGhpbiBwb29sICovDQotICAgIHNpemVfdCBieXRlc19sZWZ0OwkJLyogYnl0ZXMgc3RpbGwgYXZhaWxhYmxlIGluIHRoaXMgcG9vbCAqLw0KLSAgfSBoZHI7DQotICBBTElHTl9UWVBFIGR1bW15OwkJLyogaW5jbHVkZWQgaW4gdW5pb24gdG8gZW5zdXJlIGFsaWdubWVudCAqLw0KLX0gc21hbGxfcG9vbF9oZHI7DQotDQotdHlwZWRlZiB1bmlvbiBsYXJnZV9wb29sX3N0cnVjdCBGQVIgKiBsYXJnZV9wb29sX3B0cjsNCi0NCi10eXBlZGVmIHVuaW9uIGxhcmdlX3Bvb2xfc3RydWN0IHsNCi0gIHN0cnVjdCB7DQotICAgIGxhcmdlX3Bvb2xfcHRyIG5leHQ7CS8qIG5leHQgaW4gbGlzdCBvZiBwb29scyAqLw0KLSAgICBzaXplX3QgYnl0ZXNfdXNlZDsJCS8qIGhvdyBtYW55IGJ5dGVzIGFscmVhZHkgdXNlZCB3aXRoaW4gcG9vbCAqLw0KLSAgICBzaXplX3QgYnl0ZXNfbGVmdDsJCS8qIGJ5dGVzIHN0aWxsIGF2YWlsYWJsZSBpbiB0aGlzIHBvb2wgKi8NCi0gIH0gaGRyOw0KLSAgQUxJR05fVFlQRSBkdW1teTsJCS8qIGluY2x1ZGVkIGluIHVuaW9uIHRvIGVuc3VyZSBhbGlnbm1lbnQgKi8NCi19IGxhcmdlX3Bvb2xfaGRyOw0KLQ0KLQ0KLS8qDQotICogSGVyZSBpcyB0aGUgZnVsbCBkZWZpbml0aW9uIG9mIGEgbWVtb3J5IG1hbmFnZXIgb2JqZWN0Lg0KLSAqLw0KLQ0KLXR5cGVkZWYgc3RydWN0IHsNCi0gIHN0cnVjdCBqcGVnX21lbW9yeV9tZ3IgcHViOwkvKiBwdWJsaWMgZmllbGRzICovDQotDQotICAvKiBFYWNoIHBvb2wgaWRlbnRpZmllciAobGlmZXRpbWUgY2xhc3MpIG5hbWVzIGEgbGlua2VkIGxpc3Qgb2YgcG9vbHMuICovDQotICBzbWFsbF9wb29sX3B0ciBzbWFsbF9saXN0W0pQT09MX05VTVBPT0xTXTsNCi0gIGxhcmdlX3Bvb2xfcHRyIGxhcmdlX2xpc3RbSlBPT0xfTlVNUE9PTFNdOw0KLQ0KLSAgLyogU2luY2Ugd2Ugb25seSBoYXZlIG9uZSBsaWZldGltZSBjbGFzcyBvZiB2aXJ0dWFsIGFycmF5cywgb25seSBvbmUNCi0gICAqIGxpbmtlZCBsaXN0IGlzIG5lY2Vzc2FyeSAoZm9yIGVhY2ggZGF0YXR5cGUpLiAgTm90ZSB0aGF0IHRoZSB2aXJ0dWFsDQotICAgKiBhcnJheSBjb250cm9sIGJsb2NrcyBiZWluZyBsaW5rZWQgdG9nZXRoZXIgYXJlIGFjdHVhbGx5IHN0b3JlZCBzb21ld2hlcmUNCi0gICAqIGluIHRoZSBzbWFsbC1wb29sIGxpc3QuDQotICAgKi8NCi0gIGp2aXJ0X3NhcnJheV9wdHIgdmlydF9zYXJyYXlfbGlzdDsNCi0gIGp2aXJ0X2JhcnJheV9wdHIgdmlydF9iYXJyYXlfbGlzdDsNCi0NCi0gIC8qIFRoaXMgY291bnRzIHRvdGFsIHNwYWNlIG9idGFpbmVkIGZyb20ganBlZ19nZXRfc21hbGwvbGFyZ2UgKi8NCi0gIGxvbmcgdG90YWxfc3BhY2VfYWxsb2NhdGVkOw0KLQ0KLSAgLyogYWxsb2Nfc2FycmF5IGFuZCBhbGxvY19iYXJyYXkgc2V0IHRoaXMgdmFsdWUgZm9yIHVzZSBieSB2aXJ0dWFsDQotICAgKiBhcnJheSByb3V0aW5lcy4NCi0gICAqLw0KLSAgSkRJTUVOU0lPTiBsYXN0X3Jvd3NwZXJjaHVuazsJLyogZnJvbSBtb3N0IHJlY2VudCBhbGxvY19zYXJyYXkvYmFycmF5ICovDQotfSBteV9tZW1vcnlfbWdyOw0KLQ0KLXR5cGVkZWYgbXlfbWVtb3J5X21nciAqIG15X21lbV9wdHI7DQotDQotDQotLyoNCi0gKiBUaGUgY29udHJvbCBibG9ja3MgZm9yIHZpcnR1YWwgYXJyYXlzLg0KLSAqIE5vdGUgdGhhdCB0aGVzZSBibG9ja3MgYXJlIGFsbG9jYXRlZCBpbiB0aGUgInNtYWxsIiBwb29sIGFyZWEuDQotICogU3lzdGVtLWRlcGVuZGVudCBpbmZvIGZvciB0aGUgYXNzb2NpYXRlZCBiYWNraW5nIHN0b3JlIChpZiBhbnkpIGlzIGhpZGRlbg0KLSAqIGluc2lkZSB0aGUgYmFja2luZ19zdG9yZV9pbmZvIHN0cnVjdC4NCi0gKi8NCi0NCi1zdHJ1Y3QganZpcnRfc2FycmF5X2NvbnRyb2wgew0KLSAgSlNBTVBBUlJBWSBtZW1fYnVmZmVyOwkvKiA9PiB0aGUgaW4tbWVtb3J5IGJ1ZmZlciAqLw0KLSAgSkRJTUVOU0lPTiByb3dzX2luX2FycmF5OwkvKiB0b3RhbCB2aXJ0dWFsIGFycmF5IGhlaWdodCAqLw0KLSAgSkRJTUVOU0lPTiBzYW1wbGVzcGVycm93OwkvKiB3aWR0aCBvZiBhcnJheSAoYW5kIG9mIG1lbW9yeSBidWZmZXIpICovDQotICBKRElNRU5TSU9OIG1heGFjY2VzczsJCS8qIG1heCByb3dzIGFjY2Vzc2VkIGJ5IGFjY2Vzc192aXJ0X3NhcnJheSAqLw0KLSAgSkRJTUVOU0lPTiByb3dzX2luX21lbTsJLyogaGVpZ2h0IG9mIG1lbW9yeSBidWZmZXIgKi8NCi0gIEpESU1FTlNJT04gcm93c3BlcmNodW5rOwkvKiBhbGxvY2F0aW9uIGNodW5rIHNpemUgaW4gbWVtX2J1ZmZlciAqLw0KLSAgSkRJTUVOU0lPTiBjdXJfc3RhcnRfcm93OwkvKiBmaXJzdCBsb2dpY2FsIHJvdyAjIGluIHRoZSBidWZmZXIgKi8NCi0gIEpESU1FTlNJT04gZmlyc3RfdW5kZWZfcm93OwkvKiByb3cgIyBvZiBmaXJzdCB1bmluaXRpYWxpemVkIHJvdyAqLw0KLSAgYm9vbGVhbiBwcmVfemVybzsJCS8qIHByZS16ZXJvIG1vZGUgcmVxdWVzdGVkPyAqLw0KLSAgYm9vbGVhbiBkaXJ0eTsJCS8qIGRvIGN1cnJlbnQgYnVmZmVyIGNvbnRlbnRzIG5lZWQgd3JpdHRlbj8gKi8NCi0gIGJvb2xlYW4gYl9zX29wZW47CQkvKiBpcyBiYWNraW5nLXN0b3JlIGRhdGEgdmFsaWQ/ICovDQotICBqdmlydF9zYXJyYXlfcHRyIG5leHQ7CS8qIGxpbmsgdG8gbmV4dCB2aXJ0dWFsIHNhcnJheSBjb250cm9sIGJsb2NrICovDQotICBiYWNraW5nX3N0b3JlX2luZm8gYl9zX2luZm87CS8qIFN5c3RlbS1kZXBlbmRlbnQgY29udHJvbCBpbmZvICovDQotfTsNCi0NCi1zdHJ1Y3QganZpcnRfYmFycmF5X2NvbnRyb2wgew0KLSAgSkJMT0NLQVJSQVkgbWVtX2J1ZmZlcjsJLyogPT4gdGhlIGluLW1lbW9yeSBidWZmZXIgKi8NCi0gIEpESU1FTlNJT04gcm93c19pbl9hcnJheTsJLyogdG90YWwgdmlydHVhbCBhcnJheSBoZWlnaHQgKi8NCi0gIEpESU1FTlNJT04gYmxvY2tzcGVycm93OwkvKiB3aWR0aCBvZiBhcnJheSAoYW5kIG9mIG1lbW9yeSBidWZmZXIpICovDQotICBKRElNRU5TSU9OIG1heGFjY2VzczsJCS8qIG1heCByb3dzIGFjY2Vzc2VkIGJ5IGFjY2Vzc192aXJ0X2JhcnJheSAqLw0KLSAgSkRJTUVOU0lPTiByb3dzX2luX21lbTsJLyogaGVpZ2h0IG9mIG1lbW9yeSBidWZmZXIgKi8NCi0gIEpESU1FTlNJT04gcm93c3BlcmNodW5rOwkvKiBhbGxvY2F0aW9uIGNodW5rIHNpemUgaW4gbWVtX2J1ZmZlciAqLw0KLSAgSkRJTUVOU0lPTiBjdXJfc3RhcnRfcm93OwkvKiBmaXJzdCBsb2dpY2FsIHJvdyAjIGluIHRoZSBidWZmZXIgKi8NCi0gIEpESU1FTlNJT04gZmlyc3RfdW5kZWZfcm93OwkvKiByb3cgIyBvZiBmaXJzdCB1bmluaXRpYWxpemVkIHJvdyAqLw0KLSAgYm9vbGVhbiBwcmVfemVybzsJCS8qIHByZS16ZXJvIG1vZGUgcmVxdWVzdGVkPyAqLw0KLSAgYm9vbGVhbiBkaXJ0eTsJCS8qIGRvIGN1cnJlbnQgYnVmZmVyIGNvbnRlbnRzIG5lZWQgd3JpdHRlbj8gKi8NCi0gIGJvb2xlYW4gYl9zX29wZW47CQkvKiBpcyBiYWNraW5nLXN0b3JlIGRhdGEgdmFsaWQ/ICovDQotICBqdmlydF9iYXJyYXlfcHRyIG5leHQ7CS8qIGxpbmsgdG8gbmV4dCB2aXJ0dWFsIGJhcnJheSBjb250cm9sIGJsb2NrICovDQotICBiYWNraW5nX3N0b3JlX2luZm8gYl9zX2luZm87CS8qIFN5c3RlbS1kZXBlbmRlbnQgY29udHJvbCBpbmZvICovDQotfTsNCi0NCi0NCi0jaWZkZWYgTUVNX1NUQVRTCQkvKiBvcHRpb25hbCBleHRyYSBzdHVmZiBmb3Igc3RhdGlzdGljcyAqLw0KLQ0KLUxPQ0FMKHZvaWQpDQotcHJpbnRfbWVtX3N0YXRzIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkKQ0KLXsNCi0gIG15X21lbV9wdHIgbWVtID0gKG15X21lbV9wdHIpIGNpbmZvLT5tZW07DQotICBzbWFsbF9wb29sX3B0ciBzaGRyX3B0cjsNCi0gIGxhcmdlX3Bvb2xfcHRyIGxoZHJfcHRyOw0KLQ0KLSAgLyogU2luY2UgdGhpcyBpcyBvbmx5IGEgZGVidWdnaW5nIHN0dWIsIHdlIGNhbiBjaGVhdCBhIGxpdHRsZSBieSB1c2luZw0KLSAgICogZnByaW50ZiBkaXJlY3RseSByYXRoZXIgdGhhbiBnb2luZyB0aHJvdWdoIHRoZSB0cmFjZSBtZXNzYWdlIGNvZGUuDQotICAgKiBUaGlzIGlzIGhlbHBmdWwgYmVjYXVzZSBtZXNzYWdlIHBhcm0gYXJyYXkgY2FuJ3QgaGFuZGxlIGxvbmdzLg0KLSAgICovDQotICBGWFNZU19mcHJpbnRmKHN0ZGVyciwgIkZyZWVpbmcgcG9vbCAlZCwgdG90YWwgc3BhY2UgPSAlbGRcbiIsDQotCSAgcG9vbF9pZCwgbWVtLT50b3RhbF9zcGFjZV9hbGxvY2F0ZWQpOw0KLQ0KLSAgZm9yIChsaGRyX3B0ciA9IG1lbS0+bGFyZ2VfbGlzdFtwb29sX2lkXTsgbGhkcl9wdHIgIT0gTlVMTDsNCi0gICAgICAgbGhkcl9wdHIgPSBsaGRyX3B0ci0+aGRyLm5leHQpIHsNCi0gICAgRlhTWVNfZnByaW50ZihzdGRlcnIsICIgIExhcmdlIGNodW5rIHVzZWQgJWxkXG4iLA0KLQkgICAgKGxvbmcpIGxoZHJfcHRyLT5oZHIuYnl0ZXNfdXNlZCk7DQotICB9DQotDQotICBmb3IgKHNoZHJfcHRyID0gbWVtLT5zbWFsbF9saXN0W3Bvb2xfaWRdOyBzaGRyX3B0ciAhPSBOVUxMOw0KLSAgICAgICBzaGRyX3B0ciA9IHNoZHJfcHRyLT5oZHIubmV4dCkgew0KLSAgICBGWFNZU19mcHJpbnRmKHN0ZGVyciwgIiAgU21hbGwgY2h1bmsgdXNlZCAlbGQgZnJlZSAlbGRcbiIsDQotCSAgICAobG9uZykgc2hkcl9wdHItPmhkci5ieXRlc191c2VkLA0KLQkgICAgKGxvbmcpIHNoZHJfcHRyLT5oZHIuYnl0ZXNfbGVmdCk7DQotICB9DQotfQ0KLQ0KLSNlbmRpZiAvKiBNRU1fU1RBVFMgKi8NCi0NCi0NCi1MT0NBTCh2b2lkKQ0KLW91dF9vZl9tZW1vcnkgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHdoaWNoKQ0KLS8qIFJlcG9ydCBhbiBvdXQtb2YtbWVtb3J5IGVycm9yIGFuZCBzdG9wIGV4ZWN1dGlvbiAqLw0KLS8qIElmIHdlIGNvbXBpbGVkIE1FTV9TVEFUUyBzdXBwb3J0LCByZXBvcnQgYWxsb2MgcmVxdWVzdHMgYmVmb3JlIGR5aW5nICovDQotew0KLSNpZmRlZiBNRU1fU1RBVFMNCi0gIGNpbmZvLT5lcnItPnRyYWNlX2xldmVsID0gMjsJLyogZm9yY2Ugc2VsZl9kZXN0cnVjdCB0byByZXBvcnQgc3RhdHMgKi8NCi0jZW5kaWYNCi0gIEVSUkVYSVQxKGNpbmZvLCBKRVJSX09VVF9PRl9NRU1PUlksIHdoaWNoKTsNCi19DQotDQotDQotLyoNCi0gKiBBbGxvY2F0aW9uIG9mICJzbWFsbCIgb2JqZWN0cy4NCi0gKg0KLSAqIEZvciB0aGVzZSwgd2UgdXNlIHBvb2xlZCBzdG9yYWdlLiAgV2hlbiBhIG5ldyBwb29sIG11c3QgYmUgY3JlYXRlZCwNCi0gKiB3ZSB0cnkgdG8gZ2V0IGVub3VnaCBzcGFjZSBmb3IgdGhlIGN1cnJlbnQgcmVxdWVzdCBwbHVzIGEgInNsb3AiIGZhY3RvciwNCi0gKiB3aGVyZSB0aGUgc2xvcCB3aWxsIGJlIHRoZSBhbW91bnQgb2YgbGVmdG92ZXIgc3BhY2UgaW4gdGhlIG5ldyBwb29sLg0KLSAqIFRoZSBzcGVlZCB2cy4gc3BhY2UgdHJhZGVvZmYgaXMgbGFyZ2VseSBkZXRlcm1pbmVkIGJ5IHRoZSBzbG9wIHZhbHVlcy4NCi0gKiBBIGRpZmZlcmVudCBzbG9wIHZhbHVlIGlzIHByb3ZpZGVkIGZvciBlYWNoIHBvb2wgY2xhc3MgKGxpZmV0aW1lKSwNCi0gKiBhbmQgd2UgYWxzbyBkaXN0aW5ndWlzaCB0aGUgZmlyc3QgcG9vbCBvZiBhIGNsYXNzIGZyb20gbGF0ZXIgb25lcy4NCi0gKiBOT1RFOiB0aGUgdmFsdWVzIGdpdmVuIHdvcmsgZmFpcmx5IHdlbGwgb24gYm90aCAxNi0gYW5kIDMyLWJpdC1pbnQNCi0gKiBtYWNoaW5lcywgYnV0IG1heSBiZSB0b28gc21hbGwgaWYgbG9uZ3MgYXJlIDY0IGJpdHMgb3IgbW9yZS4NCi0gKi8NCi0NCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGZpcnN0X3Bvb2xfc2xvcFtKUE9PTF9OVU1QT09MU10gPSANCi17DQotCTE2MDAsCQkJLyogZmlyc3QgUEVSTUFORU5UIHBvb2wgKi8NCi0JMTYwMDAJCQkvKiBmaXJzdCBJTUFHRSBwb29sICovDQotfTsNCi0NCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGV4dHJhX3Bvb2xfc2xvcFtKUE9PTF9OVU1QT09MU10gPSANCi17DQotCTAsCQkJLyogYWRkaXRpb25hbCBQRVJNQU5FTlQgcG9vbHMgKi8NCi0JNTAwMAkJCS8qIGFkZGl0aW9uYWwgSU1BR0UgcG9vbHMgKi8NCi19Ow0KLQ0KLSNkZWZpbmUgTUlOX1NMT1AgIDUwCQkvKiBncmVhdGVyIHRoYW4gMCB0byBhdm9pZCBmdXRpbGUgbG9vcGluZyAqLw0KLQ0KLQ0KLU1FVEhPRERFRih2b2lkICopDQotYWxsb2Nfc21hbGwgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQsIHNpemVfdCBzaXplb2ZvYmplY3QpDQotLyogQWxsb2NhdGUgYSAic21hbGwiIG9iamVjdCAqLw0KLXsNCi0gIG15X21lbV9wdHIgbWVtID0gKG15X21lbV9wdHIpIGNpbmZvLT5tZW07DQotICBzbWFsbF9wb29sX3B0ciBoZHJfcHRyLCBwcmV2X2hkcl9wdHI7DQotICBjaGFyICogZGF0YV9wdHI7DQotICBzaXplX3Qgb2RkX2J5dGVzLCBtaW5fcmVxdWVzdCwgc2xvcDsNCi0NCi0gIC8qIENoZWNrIGZvciB1bnNhdGlzZmlhYmxlIHJlcXVlc3QgKGRvIG5vdyB0byBlbnN1cmUgbm8gb3ZlcmZsb3cgYmVsb3cpICovDQotICBpZiAoc2l6ZW9mb2JqZWN0ID4gKHNpemVfdCkgKE1BWF9BTExPQ19DSFVOSy1TSVpFT0Yoc21hbGxfcG9vbF9oZHIpKSkNCi0gICAgb3V0X29mX21lbW9yeShjaW5mbywgMSk7CS8qIHJlcXVlc3QgZXhjZWVkcyBtYWxsb2MncyBhYmlsaXR5ICovDQotDQotICAvKiBSb3VuZCB1cCB0aGUgcmVxdWVzdGVkIHNpemUgdG8gYSBtdWx0aXBsZSBvZiBTSVpFT0YoQUxJR05fVFlQRSkgKi8NCi0gIG9kZF9ieXRlcyA9IHNpemVvZm9iamVjdCAlIFNJWkVPRihBTElHTl9UWVBFKTsNCi0gIGlmIChvZGRfYnl0ZXMgPiAwKQ0KLSAgICBzaXplb2ZvYmplY3QgKz0gU0laRU9GKEFMSUdOX1RZUEUpIC0gb2RkX2J5dGVzOw0KLQ0KLSAgLyogU2VlIGlmIHNwYWNlIGlzIGF2YWlsYWJsZSBpbiBhbnkgZXhpc3RpbmcgcG9vbCAqLw0KLSAgaWYgKHBvb2xfaWQgPCAwIHx8IHBvb2xfaWQgPj0gSlBPT0xfTlVNUE9PTFMpDQotICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QT09MX0lELCBwb29sX2lkKTsJLyogc2FmZXR5IGNoZWNrICovDQotICBwcmV2X2hkcl9wdHIgPSBOVUxMOw0KLSAgaGRyX3B0ciA9IG1lbS0+c21hbGxfbGlzdFtwb29sX2lkXTsNCi0gIHdoaWxlIChoZHJfcHRyICE9IE5VTEwpIHsNCi0gICAgaWYgKGhkcl9wdHItPmhkci5ieXRlc19sZWZ0ID49IHNpemVvZm9iamVjdCkNCi0gICAgICBicmVhazsJCQkvKiBmb3VuZCBwb29sIHdpdGggZW5vdWdoIHNwYWNlICovDQotICAgIHByZXZfaGRyX3B0ciA9IGhkcl9wdHI7DQotICAgIGhkcl9wdHIgPSBoZHJfcHRyLT5oZHIubmV4dDsNCi0gIH0NCi0NCi0gIC8qIFRpbWUgdG8gbWFrZSBhIG5ldyBwb29sPyAqLw0KLSAgaWYgKGhkcl9wdHIgPT0gTlVMTCkgew0KLSAgICAvKiBtaW5fcmVxdWVzdCBpcyB3aGF0IHdlIG5lZWQgbm93LCBzbG9wIGlzIHdoYXQgd2lsbCBiZSBsZWZ0b3ZlciAqLw0KLSAgICBtaW5fcmVxdWVzdCA9IHNpemVvZm9iamVjdCArIFNJWkVPRihzbWFsbF9wb29sX2hkcik7DQotICAgIGlmIChwcmV2X2hkcl9wdHIgPT0gTlVMTCkJLyogZmlyc3QgcG9vbCBpbiBjbGFzcz8gKi8NCi0gICAgICBzbG9wID0gZmlyc3RfcG9vbF9zbG9wW3Bvb2xfaWRdOw0KLSAgICBlbHNlDQotICAgICAgc2xvcCA9IGV4dHJhX3Bvb2xfc2xvcFtwb29sX2lkXTsNCi0gICAgLyogRG9uJ3QgYXNrIGZvciBtb3JlIHRoYW4gTUFYX0FMTE9DX0NIVU5LICovDQotICAgIGlmIChzbG9wID4gKHNpemVfdCkgKE1BWF9BTExPQ19DSFVOSy1taW5fcmVxdWVzdCkpDQotICAgICAgc2xvcCA9IChzaXplX3QpIChNQVhfQUxMT0NfQ0hVTkstbWluX3JlcXVlc3QpOw0KLSAgICAvKiBUcnkgdG8gZ2V0IHNwYWNlLCBpZiBmYWlsIHJlZHVjZSBzbG9wIGFuZCB0cnkgYWdhaW4gKi8NCi0gICAgZm9yICg7Oykgew0KLSAgICAgIGhkcl9wdHIgPSAoc21hbGxfcG9vbF9wdHIpIGpwZWdfZ2V0X3NtYWxsKGNpbmZvLCBtaW5fcmVxdWVzdCArIHNsb3ApOw0KLSAgICAgIGlmIChoZHJfcHRyICE9IE5VTEwpDQotCWJyZWFrOw0KLSAgICAgIHNsb3AgLz0gMjsNCi0gICAgICBpZiAoc2xvcCA8IE1JTl9TTE9QKQkvKiBnaXZlIHVwIHdoZW4gaXQgZ2V0cyByZWFsIHNtYWxsICovDQotCW91dF9vZl9tZW1vcnkoY2luZm8sIDIpOyAvKiBqcGVnX2dldF9zbWFsbCBmYWlsZWQgKi8NCi0gICAgfQ0KLSAgICBtZW0tPnRvdGFsX3NwYWNlX2FsbG9jYXRlZCArPSBtaW5fcmVxdWVzdCArIHNsb3A7DQotICAgIC8qIFN1Y2Nlc3MsIGluaXRpYWxpemUgdGhlIG5ldyBwb29sIGhlYWRlciBhbmQgYWRkIHRvIGVuZCBvZiBsaXN0ICovDQotICAgIGhkcl9wdHItPmhkci5uZXh0ID0gTlVMTDsNCi0gICAgaGRyX3B0ci0+aGRyLmJ5dGVzX3VzZWQgPSAwOw0KLSAgICBoZHJfcHRyLT5oZHIuYnl0ZXNfbGVmdCA9IHNpemVvZm9iamVjdCArIHNsb3A7DQotICAgIGlmIChwcmV2X2hkcl9wdHIgPT0gTlVMTCkJLyogZmlyc3QgcG9vbCBpbiBjbGFzcz8gKi8NCi0gICAgICBtZW0tPnNtYWxsX2xpc3RbcG9vbF9pZF0gPSBoZHJfcHRyOw0KLSAgICBlbHNlDQotICAgICAgcHJldl9oZHJfcHRyLT5oZHIubmV4dCA9IGhkcl9wdHI7DQotICB9DQotDQotICAvKiBPSywgYWxsb2NhdGUgdGhlIG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IHBvb2wgKi8NCi0gIGRhdGFfcHRyID0gKGNoYXIgKikgKGhkcl9wdHIgKyAxKTsgLyogcG9pbnQgdG8gZmlyc3QgZGF0YSBieXRlIGluIHBvb2wgKi8NCi0gIGRhdGFfcHRyICs9IGhkcl9wdHItPmhkci5ieXRlc191c2VkOyAvKiBwb2ludCB0byBwbGFjZSBmb3Igb2JqZWN0ICovDQotICBoZHJfcHRyLT5oZHIuYnl0ZXNfdXNlZCArPSBzaXplb2ZvYmplY3Q7DQotICBoZHJfcHRyLT5oZHIuYnl0ZXNfbGVmdCAtPSBzaXplb2ZvYmplY3Q7DQotDQotICByZXR1cm4gKHZvaWQgKikgZGF0YV9wdHI7DQotfQ0KLQ0KLQ0KLS8qDQotICogQWxsb2NhdGlvbiBvZiAibGFyZ2UiIG9iamVjdHMuDQotICoNCi0gKiBUaGUgZXh0ZXJuYWwgc2VtYW50aWNzIG9mIHRoZXNlIGFyZSB0aGUgc2FtZSBhcyAic21hbGwiIG9iamVjdHMsDQotICogZXhjZXB0IHRoYXQgRkFSIHBvaW50ZXJzIGFyZSB1c2VkIG9uIDgweDg2LiAgSG93ZXZlciB0aGUgcG9vbA0KLSAqIG1hbmFnZW1lbnQgaGV1cmlzdGljcyBhcmUgcXVpdGUgZGlmZmVyZW50LiAgV2UgYXNzdW1lIHRoYXQgZWFjaA0KLSAqIHJlcXVlc3QgaXMgbGFyZ2UgZW5vdWdoIHRoYXQgaXQgbWF5IGFzIHdlbGwgYmUgcGFzc2VkIGRpcmVjdGx5IHRvDQotICoganBlZ19nZXRfbGFyZ2U7IHRoZSBwb29sIG1hbmFnZW1lbnQganVzdCBsaW5rcyBldmVyeXRoaW5nIHRvZ2V0aGVyDQotICogc28gdGhhdCB3ZSBjYW4gZnJlZSBpdCBhbGwgb24gZGVtYW5kLg0KLSAqIE5vdGU6IHRoZSBtYWpvciB1c2Ugb2YgImxhcmdlIiBvYmplY3RzIGlzIGluIEpTQU1QQVJSQVkgYW5kIEpCTE9DS0FSUkFZDQotICogc3RydWN0dXJlcy4gIFRoZSByb3V0aW5lcyB0aGF0IGNyZWF0ZSB0aGVzZSBzdHJ1Y3R1cmVzIChzZWUgYmVsb3cpDQotICogZGVsaWJlcmF0ZWx5IGJ1bmNoIHJvd3MgdG9nZXRoZXIgdG8gZW5zdXJlIGEgbGFyZ2UgcmVxdWVzdCBzaXplLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkIEZBUiAqKQ0KLWFsbG9jX2xhcmdlIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkLCBzaXplX3Qgc2l6ZW9mb2JqZWN0KQ0KLS8qIEFsbG9jYXRlIGEgImxhcmdlIiBvYmplY3QgKi8NCi17DQotICBteV9tZW1fcHRyIG1lbSA9IChteV9tZW1fcHRyKSBjaW5mby0+bWVtOw0KLSAgbGFyZ2VfcG9vbF9wdHIgaGRyX3B0cjsNCi0gIHNpemVfdCBvZGRfYnl0ZXM7DQotDQotICAvKiBDaGVjayBmb3IgdW5zYXRpc2ZpYWJsZSByZXF1ZXN0IChkbyBub3cgdG8gZW5zdXJlIG5vIG92ZXJmbG93IGJlbG93KSAqLw0KLSAgaWYgKHNpemVvZm9iamVjdCA+IChzaXplX3QpIChNQVhfQUxMT0NfQ0hVTkstU0laRU9GKGxhcmdlX3Bvb2xfaGRyKSkpDQotICAgIG91dF9vZl9tZW1vcnkoY2luZm8sIDMpOwkvKiByZXF1ZXN0IGV4Y2VlZHMgbWFsbG9jJ3MgYWJpbGl0eSAqLw0KLQ0KLSAgLyogUm91bmQgdXAgdGhlIHJlcXVlc3RlZCBzaXplIHRvIGEgbXVsdGlwbGUgb2YgU0laRU9GKEFMSUdOX1RZUEUpICovDQotICBvZGRfYnl0ZXMgPSBzaXplb2ZvYmplY3QgJSBTSVpFT0YoQUxJR05fVFlQRSk7DQotICBpZiAob2RkX2J5dGVzID4gMCkNCi0gICAgc2l6ZW9mb2JqZWN0ICs9IFNJWkVPRihBTElHTl9UWVBFKSAtIG9kZF9ieXRlczsNCi0NCi0gIC8qIEFsd2F5cyBtYWtlIGEgbmV3IHBvb2wgKi8NCi0gIGlmIChwb29sX2lkIDwgMCB8fCBwb29sX2lkID49IEpQT09MX05VTVBPT0xTKQ0KLSAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUE9PTF9JRCwgcG9vbF9pZCk7CS8qIHNhZmV0eSBjaGVjayAqLw0KLQ0KLSAgaGRyX3B0ciA9IChsYXJnZV9wb29sX3B0cikganBlZ19nZXRfbGFyZ2UoY2luZm8sIHNpemVvZm9iamVjdCArDQotCQkJCQkgICAgU0laRU9GKGxhcmdlX3Bvb2xfaGRyKSk7DQotICBpZiAoaGRyX3B0ciA9PSBOVUxMKQ0KLSAgICBvdXRfb2ZfbWVtb3J5KGNpbmZvLCA0KTsJLyoganBlZ19nZXRfbGFyZ2UgZmFpbGVkICovDQotICBtZW0tPnRvdGFsX3NwYWNlX2FsbG9jYXRlZCArPSBzaXplb2ZvYmplY3QgKyBTSVpFT0YobGFyZ2VfcG9vbF9oZHIpOw0KLQ0KLSAgLyogU3VjY2VzcywgaW5pdGlhbGl6ZSB0aGUgbmV3IHBvb2wgaGVhZGVyIGFuZCBhZGQgdG8gbGlzdCAqLw0KLSAgaGRyX3B0ci0+aGRyLm5leHQgPSBtZW0tPmxhcmdlX2xpc3RbcG9vbF9pZF07DQotICAvKiBXZSBtYWludGFpbiBzcGFjZSBjb3VudHMgaW4gZWFjaCBwb29sIGhlYWRlciBmb3Igc3RhdGlzdGljYWwgcHVycG9zZXMsDQotICAgKiBldmVuIHRob3VnaCB0aGV5IGFyZSBub3QgbmVlZGVkIGZvciBhbGxvY2F0aW9uLg0KLSAgICovDQotICBoZHJfcHRyLT5oZHIuYnl0ZXNfdXNlZCA9IHNpemVvZm9iamVjdDsNCi0gIGhkcl9wdHItPmhkci5ieXRlc19sZWZ0ID0gMDsNCi0gIG1lbS0+bGFyZ2VfbGlzdFtwb29sX2lkXSA9IGhkcl9wdHI7DQotDQotICByZXR1cm4gKHZvaWQgRkFSICopIChoZHJfcHRyICsgMSk7IC8qIHBvaW50IHRvIGZpcnN0IGRhdGEgYnl0ZSBpbiBwb29sICovDQotfQ0KLQ0KLQ0KLS8qDQotICogQ3JlYXRpb24gb2YgMi1EIHNhbXBsZSBhcnJheXMuDQotICogVGhlIHBvaW50ZXJzIGFyZSBpbiBuZWFyIGhlYXAsIHRoZSBzYW1wbGVzIHRoZW1zZWx2ZXMgaW4gRkFSIGhlYXAuDQotICoNCi0gKiBUbyBtaW5pbWl6ZSBhbGxvY2F0aW9uIG92ZXJoZWFkIGFuZCB0byBhbGxvdyBJL08gb2YgbGFyZ2UgY29udGlndW91cw0KLSAqIGJsb2Nrcywgd2UgYWxsb2NhdGUgdGhlIHNhbXBsZSByb3dzIGluIGdyb3VwcyBvZiBhcyBtYW55IHJvd3MgYXMgcG9zc2libGUNCi0gKiB3aXRob3V0IGV4Y2VlZGluZyBNQVhfQUxMT0NfQ0hVTksgdG90YWwgYnl0ZXMgcGVyIGFsbG9jYXRpb24gcmVxdWVzdC4NCi0gKiBOQjogdGhlIHZpcnR1YWwgYXJyYXkgY29udHJvbCByb3V0aW5lcywgbGF0ZXIgaW4gdGhpcyBmaWxlLCBrbm93IGFib3V0DQotICogdGhpcyBjaHVua2luZyBvZiByb3dzLiAgVGhlIHJvd3NwZXJjaHVuayB2YWx1ZSBpcyBsZWZ0IGluIHRoZSBtZW0gbWFuYWdlcg0KLSAqIG9iamVjdCBzbyB0aGF0IGl0IGNhbiBiZSBzYXZlZCBhd2F5IGlmIHRoaXMgc2FycmF5IGlzIHRoZSB3b3Jrc3BhY2UgZm9yDQotICogYSB2aXJ0dWFsIGFycmF5Lg0KLSAqLw0KLQ0KLU1FVEhPRERFRihKU0FNUEFSUkFZKQ0KLWFsbG9jX3NhcnJheSAoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgcG9vbF9pZCwNCi0JICAgICAgSkRJTUVOU0lPTiBzYW1wbGVzcGVycm93LCBKRElNRU5TSU9OIG51bXJvd3MpDQotLyogQWxsb2NhdGUgYSAyLUQgc2FtcGxlIGFycmF5ICovDQotew0KLSAgbXlfbWVtX3B0ciBtZW0gPSAobXlfbWVtX3B0cikgY2luZm8tPm1lbTsNCi0gIEpTQU1QQVJSQVkgcmVzdWx0Ow0KLSAgSlNBTVBST1cgd29ya3NwYWNlOw0KLSAgSkRJTUVOU0lPTiByb3dzcGVyY2h1bmssIGN1cnJvdywgaTsNCi0gIGxvbmcgbHRlbXA7DQotDQotICAvKiBDYWxjdWxhdGUgbWF4ICMgb2Ygcm93cyBhbGxvd2VkIGluIG9uZSBhbGxvY2F0aW9uIGNodW5rICovDQotICBsdGVtcCA9IChNQVhfQUxMT0NfQ0hVTkstU0laRU9GKGxhcmdlX3Bvb2xfaGRyKSkgLw0KLQkgICgobG9uZykgc2FtcGxlc3BlcnJvdyAqIFNJWkVPRihKU0FNUExFKSk7DQotICBpZiAobHRlbXAgPD0gMCkNCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9XSURUSF9PVkVSRkxPVyk7DQotICBpZiAobHRlbXAgPCAobG9uZykgbnVtcm93cykNCi0gICAgcm93c3BlcmNodW5rID0gKEpESU1FTlNJT04pIGx0ZW1wOw0KLSAgZWxzZQ0KLSAgICByb3dzcGVyY2h1bmsgPSBudW1yb3dzOw0KLSAgbWVtLT5sYXN0X3Jvd3NwZXJjaHVuayA9IHJvd3NwZXJjaHVuazsNCi0NCi0gIC8qIEdldCBzcGFjZSBmb3Igcm93IHBvaW50ZXJzIChzbWFsbCBvYmplY3QpICovDQotICByZXN1bHQgPSAoSlNBTVBBUlJBWSkgYWxsb2Nfc21hbGwoY2luZm8sIHBvb2xfaWQsDQotCQkJCSAgICAoc2l6ZV90KSAobnVtcm93cyAqIFNJWkVPRihKU0FNUFJPVykpKTsNCi0NCi0gIC8qIEdldCB0aGUgcm93cyB0aGVtc2VsdmVzIChsYXJnZSBvYmplY3RzKSAqLw0KLSAgY3Vycm93ID0gMDsNCi0gIHdoaWxlIChjdXJyb3cgPCBudW1yb3dzKSB7DQotICAgIHJvd3NwZXJjaHVuayA9IE1JTihyb3dzcGVyY2h1bmssIG51bXJvd3MgLSBjdXJyb3cpOw0KLSAgICB3b3Jrc3BhY2UgPSAoSlNBTVBST1cpIGFsbG9jX2xhcmdlKGNpbmZvLCBwb29sX2lkLA0KLQkoc2l6ZV90KSAoKHNpemVfdCkgcm93c3BlcmNodW5rICogKHNpemVfdCkgc2FtcGxlc3BlcnJvdw0KLQkJICAqIFNJWkVPRihKU0FNUExFKSkpOw0KLSAgICBmb3IgKGkgPSByb3dzcGVyY2h1bms7IGkgPiAwOyBpLS0pIHsNCi0gICAgICByZXN1bHRbY3Vycm93KytdID0gd29ya3NwYWNlOw0KLSAgICAgIHdvcmtzcGFjZSArPSBzYW1wbGVzcGVycm93Ow0KLSAgICB9DQotICB9DQotDQotICByZXR1cm4gcmVzdWx0Ow0KLX0NCi0NCi0NCi0vKg0KLSAqIENyZWF0aW9uIG9mIDItRCBjb2VmZmljaWVudC1ibG9jayBhcnJheXMuDQotICogVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc2FtZSBhcyB0aGUgY29kZSBmb3Igc2FtcGxlIGFycmF5cywgYWJvdmUuDQotICovDQotDQotTUVUSE9EREVGKEpCTE9DS0FSUkFZKQ0KLWFsbG9jX2JhcnJheSAoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgcG9vbF9pZCwNCi0JICAgICAgSkRJTUVOU0lPTiBibG9ja3NwZXJyb3csIEpESU1FTlNJT04gbnVtcm93cykNCi0vKiBBbGxvY2F0ZSBhIDItRCBjb2VmZmljaWVudC1ibG9jayBhcnJheSAqLw0KLXsNCi0gIG15X21lbV9wdHIgbWVtID0gKG15X21lbV9wdHIpIGNpbmZvLT5tZW07DQotICBKQkxPQ0tBUlJBWSByZXN1bHQ7DQotICBKQkxPQ0tST1cgd29ya3NwYWNlOw0KLSAgSkRJTUVOU0lPTiByb3dzcGVyY2h1bmssIGN1cnJvdywgaTsNCi0gIGxvbmcgbHRlbXA7DQotDQotICAvKiBDYWxjdWxhdGUgbWF4ICMgb2Ygcm93cyBhbGxvd2VkIGluIG9uZSBhbGxvY2F0aW9uIGNodW5rICovDQotICBsdGVtcCA9IChNQVhfQUxMT0NfQ0hVTkstU0laRU9GKGxhcmdlX3Bvb2xfaGRyKSkgLw0KLQkgICgobG9uZykgYmxvY2tzcGVycm93ICogU0laRU9GKEpCTE9DSykpOw0KLSAgaWYgKGx0ZW1wIDw9IDApDQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfV0lEVEhfT1ZFUkZMT1cpOw0KLSAgaWYgKGx0ZW1wIDwgKGxvbmcpIG51bXJvd3MpDQotICAgIHJvd3NwZXJjaHVuayA9IChKRElNRU5TSU9OKSBsdGVtcDsNCi0gIGVsc2UNCi0gICAgcm93c3BlcmNodW5rID0gbnVtcm93czsNCi0gIG1lbS0+bGFzdF9yb3dzcGVyY2h1bmsgPSByb3dzcGVyY2h1bms7DQotDQotICAvKiBHZXQgc3BhY2UgZm9yIHJvdyBwb2ludGVycyAoc21hbGwgb2JqZWN0KSAqLw0KLSAgcmVzdWx0ID0gKEpCTE9DS0FSUkFZKSBhbGxvY19zbWFsbChjaW5mbywgcG9vbF9pZCwNCi0JCQkJICAgICAoc2l6ZV90KSAobnVtcm93cyAqIFNJWkVPRihKQkxPQ0tST1cpKSk7DQotDQotICAvKiBHZXQgdGhlIHJvd3MgdGhlbXNlbHZlcyAobGFyZ2Ugb2JqZWN0cykgKi8NCi0gIGN1cnJvdyA9IDA7DQotICB3aGlsZSAoY3Vycm93IDwgbnVtcm93cykgew0KLSAgICByb3dzcGVyY2h1bmsgPSBNSU4ocm93c3BlcmNodW5rLCBudW1yb3dzIC0gY3Vycm93KTsNCi0gICAgd29ya3NwYWNlID0gKEpCTE9DS1JPVykgYWxsb2NfbGFyZ2UoY2luZm8sIHBvb2xfaWQsDQotCShzaXplX3QpICgoc2l6ZV90KSByb3dzcGVyY2h1bmsgKiAoc2l6ZV90KSBibG9ja3NwZXJyb3cNCi0JCSAgKiBTSVpFT0YoSkJMT0NLKSkpOw0KLSAgICBmb3IgKGkgPSByb3dzcGVyY2h1bms7IGkgPiAwOyBpLS0pIHsNCi0gICAgICByZXN1bHRbY3Vycm93KytdID0gd29ya3NwYWNlOw0KLSAgICAgIHdvcmtzcGFjZSArPSBibG9ja3NwZXJyb3c7DQotICAgIH0NCi0gIH0NCi0NCi0gIHJldHVybiByZXN1bHQ7DQotfQ0KLQ0KLQ0KLS8qDQotICogQWJvdXQgdmlydHVhbCBhcnJheSBtYW5hZ2VtZW50Og0KLSAqDQotICogVGhlIGFib3ZlICJub3JtYWwiIGFycmF5IHJvdXRpbmVzIGFyZSBvbmx5IHVzZWQgdG8gYWxsb2NhdGUgc3RyaXAgYnVmZmVycw0KLSAqIChhcyB3aWRlIGFzIHRoZSBpbWFnZSwgYnV0IGp1c3QgYSBmZXcgcm93cyBoaWdoKS4gIEZ1bGwtaW1hZ2Utc2l6ZWQgYnVmZmVycw0KLSAqIGFyZSBoYW5kbGVkIGFzICJ2aXJ0dWFsIiBhcnJheXMuICBUaGUgYXJyYXkgaXMgc3RpbGwgYWNjZXNzZWQgYSBzdHJpcCBhdCBhDQotICogdGltZSwgYnV0IHRoZSBtZW1vcnkgbWFuYWdlciBtdXN0IHNhdmUgdGhlIHdob2xlIGFycmF5IGZvciByZXBlYXRlZA0KLSAqIGFjY2Vzc2VzLiAgVGhlIGludGVuZGVkIGltcGxlbWVudGF0aW9uIGlzIHRoYXQgdGhlcmUgaXMgYSBzdHJpcCBidWZmZXIgaW4NCi0gKiBtZW1vcnkgKGFzIGhpZ2ggYXMgaXMgcG9zc2libGUgZ2l2ZW4gdGhlIGRlc2lyZWQgbWVtb3J5IGxpbWl0KSwgcGx1cyBhDQotICogYmFja2luZyBmaWxlIHRoYXQgaG9sZHMgdGhlIHJlc3Qgb2YgdGhlIGFycmF5Lg0KLSAqDQotICogVGhlIHJlcXVlc3RfdmlydF9hcnJheSByb3V0aW5lcyBhcmUgdG9sZCB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgaW1hZ2UgYW5kDQotICogdGhlIG1heGltdW0gbnVtYmVyIG9mIHJvd3MgdGhhdCB3aWxsIGJlIGFjY2Vzc2VkIGF0IG9uY2UuICBUaGUgaW4tbWVtb3J5DQotICogYnVmZmVyIG11c3QgYmUgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgdGhlIG1heGFjY2VzcyB2YWx1ZS4NCi0gKg0KLSAqIFRoZSByZXF1ZXN0IHJvdXRpbmVzIGNyZWF0ZSBjb250cm9sIGJsb2NrcyBidXQgbm90IHRoZSBpbi1tZW1vcnkgYnVmZmVycy4NCi0gKiBUaGF0IGlzIHBvc3Rwb25lZCB1bnRpbCByZWFsaXplX3ZpcnRfYXJyYXlzIGlzIGNhbGxlZC4gIEF0IHRoYXQgdGltZSB0aGUNCi0gKiB0b3RhbCBhbW91bnQgb2Ygc3BhY2UgbmVlZGVkIGlzIGtub3duIChhcHByb3hpbWF0ZWx5LCBhbnl3YXkpLCBzbyBmcmVlDQotICogbWVtb3J5IGNhbiBiZSBkaXZpZGVkIHVwIGZhaXJseS4NCi0gKg0KLSAqIFRoZSBhY2Nlc3NfdmlydF9hcnJheSByb3V0aW5lcyBhcmUgcmVzcG9uc2libGUgZm9yIG1ha2luZyBhIHNwZWNpZmljIHN0cmlwDQotICogYXJlYSBhY2Nlc3NpYmxlIChhZnRlciByZWFkaW5nIG9yIHdyaXRpbmcgdGhlIGJhY2tpbmcgZmlsZSwgaWYgbmVjZXNzYXJ5KS4NCi0gKiBOb3RlIHRoYXQgdGhlIGFjY2VzcyByb3V0aW5lcyBhcmUgdG9sZCB3aGV0aGVyIHRoZSBjYWxsZXIgaW50ZW5kcyB0byBtb2RpZnkNCi0gKiB0aGUgYWNjZXNzZWQgc3RyaXA7IGR1cmluZyBhIHJlYWQtb25seSBwYXNzIHRoaXMgc2F2ZXMgaGF2aW5nIHRvIHJld3JpdGUNCi0gKiBkYXRhIHRvIGRpc2suICBUaGUgYWNjZXNzIHJvdXRpbmVzIGFyZSBhbHNvIHJlc3BvbnNpYmxlIGZvciBwcmUtemVyb2luZw0KLSAqIGFueSBuZXdseSBhY2Nlc3NlZCByb3dzLCBpZiBwcmUtemVyb2luZyB3YXMgcmVxdWVzdGVkLg0KLSAqDQotICogSW4gY3VycmVudCB1c2FnZSwgdGhlIGFjY2VzcyByZXF1ZXN0cyBhcmUgdXN1YWxseSBmb3Igbm9ub3ZlcmxhcHBpbmcNCi0gKiBzdHJpcHM7IHRoYXQgaXMsIHN1Y2Nlc3NpdmUgYWNjZXNzIHN0YXJ0X3JvdyBudW1iZXJzIGRpZmZlciBieSBleGFjdGx5DQotICogbnVtX3Jvd3MgPSBtYXhhY2Nlc3MuICBUaGlzIG1lYW5zIHdlIGNhbiBnZXQgZ29vZCBwZXJmb3JtYW5jZSB3aXRoIHNpbXBsZQ0KLSAqIGJ1ZmZlciBkdW1wL3JlbG9hZCBsb2dpYywgYnkgbWFraW5nIHRoZSBpbi1tZW1vcnkgYnVmZmVyIGJlIGEgbXVsdGlwbGUNCi0gKiBvZiB0aGUgYWNjZXNzIGhlaWdodDsgdGhlbiB0aGVyZSB3aWxsIG5ldmVyIGJlIGFjY2Vzc2VzIGFjcm9zcyBidWZmZXJsb2FkDQotICogYm91bmRhcmllcy4gIFRoZSBjb2RlIHdpbGwgc3RpbGwgd29yayB3aXRoIG92ZXJsYXBwaW5nIGFjY2VzcyByZXF1ZXN0cywNCi0gKiBidXQgaXQgZG9lc24ndCBoYW5kbGUgYnVmZmVybG9hZCBvdmVybGFwcyB2ZXJ5IGVmZmljaWVudGx5Lg0KLSAqLw0KLQ0KLQ0KLU1FVEhPRERFRihqdmlydF9zYXJyYXlfcHRyKQ0KLXJlcXVlc3RfdmlydF9zYXJyYXkgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQsIGJvb2xlYW4gcHJlX3plcm8sDQotCQkgICAgIEpESU1FTlNJT04gc2FtcGxlc3BlcnJvdywgSkRJTUVOU0lPTiBudW1yb3dzLA0KLQkJICAgICBKRElNRU5TSU9OIG1heGFjY2VzcykNCi0vKiBSZXF1ZXN0IGEgdmlydHVhbCAyLUQgc2FtcGxlIGFycmF5ICovDQotew0KLSAgbXlfbWVtX3B0ciBtZW0gPSAobXlfbWVtX3B0cikgY2luZm8tPm1lbTsNCi0gIGp2aXJ0X3NhcnJheV9wdHIgcmVzdWx0Ow0KLQ0KLSAgLyogT25seSBJTUFHRS1saWZldGltZSB2aXJ0dWFsIGFycmF5cyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZCAqLw0KLSAgaWYgKHBvb2xfaWQgIT0gSlBPT0xfSU1BR0UpDQotICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QT09MX0lELCBwb29sX2lkKTsJLyogc2FmZXR5IGNoZWNrICovDQotDQotICAvKiBnZXQgY29udHJvbCBibG9jayAqLw0KLSAgcmVzdWx0ID0gKGp2aXJ0X3NhcnJheV9wdHIpIGFsbG9jX3NtYWxsKGNpbmZvLCBwb29sX2lkLA0KLQkJCQkJICBTSVpFT0Yoc3RydWN0IGp2aXJ0X3NhcnJheV9jb250cm9sKSk7DQotDQotICByZXN1bHQtPm1lbV9idWZmZXIgPSBOVUxMOwkvKiBtYXJrcyBhcnJheSBub3QgeWV0IHJlYWxpemVkICovDQotICByZXN1bHQtPnJvd3NfaW5fYXJyYXkgPSBudW1yb3dzOw0KLSAgcmVzdWx0LT5zYW1wbGVzcGVycm93ID0gc2FtcGxlc3BlcnJvdzsNCi0gIHJlc3VsdC0+bWF4YWNjZXNzID0gbWF4YWNjZXNzOw0KLSAgcmVzdWx0LT5wcmVfemVybyA9IHByZV96ZXJvOw0KLSAgcmVzdWx0LT5iX3Nfb3BlbiA9IEZBTFNFOwkvKiBubyBhc3NvY2lhdGVkIGJhY2tpbmctc3RvcmUgb2JqZWN0ICovDQotICByZXN1bHQtPm5leHQgPSBtZW0tPnZpcnRfc2FycmF5X2xpc3Q7IC8qIGFkZCB0byBsaXN0IG9mIHZpcnR1YWwgYXJyYXlzICovDQotICBtZW0tPnZpcnRfc2FycmF5X2xpc3QgPSByZXN1bHQ7DQotDQotICByZXR1cm4gcmVzdWx0Ow0KLX0NCi0NCi0NCi1NRVRIT0RERUYoanZpcnRfYmFycmF5X3B0cikNCi1yZXF1ZXN0X3ZpcnRfYmFycmF5IChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkLCBib29sZWFuIHByZV96ZXJvLA0KLQkJICAgICBKRElNRU5TSU9OIGJsb2Nrc3BlcnJvdywgSkRJTUVOU0lPTiBudW1yb3dzLA0KLQkJICAgICBKRElNRU5TSU9OIG1heGFjY2VzcykNCi0vKiBSZXF1ZXN0IGEgdmlydHVhbCAyLUQgY29lZmZpY2llbnQtYmxvY2sgYXJyYXkgKi8NCi17DQotICBteV9tZW1fcHRyIG1lbSA9IChteV9tZW1fcHRyKSBjaW5mby0+bWVtOw0KLSAganZpcnRfYmFycmF5X3B0ciByZXN1bHQ7DQotDQotICAvKiBPbmx5IElNQUdFLWxpZmV0aW1lIHZpcnR1YWwgYXJyYXlzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkICovDQotICBpZiAocG9vbF9pZCAhPSBKUE9PTF9JTUFHRSkNCi0gICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BPT0xfSUQsIHBvb2xfaWQpOwkvKiBzYWZldHkgY2hlY2sgKi8NCi0NCi0gIC8qIGdldCBjb250cm9sIGJsb2NrICovDQotICByZXN1bHQgPSAoanZpcnRfYmFycmF5X3B0cikgYWxsb2Nfc21hbGwoY2luZm8sIHBvb2xfaWQsDQotCQkJCQkgIFNJWkVPRihzdHJ1Y3QganZpcnRfYmFycmF5X2NvbnRyb2wpKTsNCi0NCi0gIHJlc3VsdC0+bWVtX2J1ZmZlciA9IE5VTEw7CS8qIG1hcmtzIGFycmF5IG5vdCB5ZXQgcmVhbGl6ZWQgKi8NCi0gIHJlc3VsdC0+cm93c19pbl9hcnJheSA9IG51bXJvd3M7DQotICByZXN1bHQtPmJsb2Nrc3BlcnJvdyA9IGJsb2Nrc3BlcnJvdzsNCi0gIHJlc3VsdC0+bWF4YWNjZXNzID0gbWF4YWNjZXNzOw0KLSAgcmVzdWx0LT5wcmVfemVybyA9IHByZV96ZXJvOw0KLSAgcmVzdWx0LT5iX3Nfb3BlbiA9IEZBTFNFOwkvKiBubyBhc3NvY2lhdGVkIGJhY2tpbmctc3RvcmUgb2JqZWN0ICovDQotICByZXN1bHQtPm5leHQgPSBtZW0tPnZpcnRfYmFycmF5X2xpc3Q7IC8qIGFkZCB0byBsaXN0IG9mIHZpcnR1YWwgYXJyYXlzICovDQotICBtZW0tPnZpcnRfYmFycmF5X2xpc3QgPSByZXN1bHQ7DQotDQotICByZXR1cm4gcmVzdWx0Ow0KLX0NCi0NCi0NCi1NRVRIT0RERUYodm9pZCkNCi1yZWFsaXplX3ZpcnRfYXJyYXlzIChqX2NvbW1vbl9wdHIgY2luZm8pDQotLyogQWxsb2NhdGUgdGhlIGluLW1lbW9yeSBidWZmZXJzIGZvciBhbnkgdW5yZWFsaXplZCB2aXJ0dWFsIGFycmF5cyAqLw0KLXsNCi0gIG15X21lbV9wdHIgbWVtID0gKG15X21lbV9wdHIpIGNpbmZvLT5tZW07DQotICBsb25nIHNwYWNlX3Blcl9taW5oZWlnaHQsIG1heGltdW1fc3BhY2UsIGF2YWlsX21lbTsNCi0gIGxvbmcgbWluaGVpZ2h0cywgbWF4X21pbmhlaWdodHM7DQotICBqdmlydF9zYXJyYXlfcHRyIHNwdHI7DQotICBqdmlydF9iYXJyYXlfcHRyIGJwdHI7DQotDQotICAvKiBDb21wdXRlIHRoZSBtaW5pbXVtIHNwYWNlIG5lZWRlZCAobWF4YWNjZXNzIHJvd3MgaW4gZWFjaCBidWZmZXIpDQotICAgKiBhbmQgdGhlIG1heGltdW0gc3BhY2UgbmVlZGVkIChmdWxsIGltYWdlIGhlaWdodCBpbiBlYWNoIGJ1ZmZlcikuDQotICAgKiBUaGVzZSBtYXkgYmUgb2YgdXNlIHRvIHRoZSBzeXN0ZW0tZGVwZW5kZW50IGpwZWdfbWVtX2F2YWlsYWJsZSByb3V0aW5lLg0KLSAgICovDQotICBzcGFjZV9wZXJfbWluaGVpZ2h0ID0gMDsNCi0gIG1heGltdW1fc3BhY2UgPSAwOw0KLSAgZm9yIChzcHRyID0gbWVtLT52aXJ0X3NhcnJheV9saXN0OyBzcHRyICE9IE5VTEw7IHNwdHIgPSBzcHRyLT5uZXh0KSB7DQotICAgIGlmIChzcHRyLT5tZW1fYnVmZmVyID09IE5VTEwpIHsgLyogaWYgbm90IHJlYWxpemVkIHlldCAqLw0KLSAgICAgIHNwYWNlX3Blcl9taW5oZWlnaHQgKz0gKGxvbmcpIHNwdHItPm1heGFjY2VzcyAqDQotCQkJICAgICAobG9uZykgc3B0ci0+c2FtcGxlc3BlcnJvdyAqIFNJWkVPRihKU0FNUExFKTsNCi0gICAgICBtYXhpbXVtX3NwYWNlICs9IChsb25nKSBzcHRyLT5yb3dzX2luX2FycmF5ICoNCi0JCSAgICAgICAobG9uZykgc3B0ci0+c2FtcGxlc3BlcnJvdyAqIFNJWkVPRihKU0FNUExFKTsNCi0gICAgfQ0KLSAgfQ0KLSAgZm9yIChicHRyID0gbWVtLT52aXJ0X2JhcnJheV9saXN0OyBicHRyICE9IE5VTEw7IGJwdHIgPSBicHRyLT5uZXh0KSB7DQotICAgIGlmIChicHRyLT5tZW1fYnVmZmVyID09IE5VTEwpIHsgLyogaWYgbm90IHJlYWxpemVkIHlldCAqLw0KLSAgICAgIHNwYWNlX3Blcl9taW5oZWlnaHQgKz0gKGxvbmcpIGJwdHItPm1heGFjY2VzcyAqDQotCQkJICAgICAobG9uZykgYnB0ci0+YmxvY2tzcGVycm93ICogU0laRU9GKEpCTE9DSyk7DQotICAgICAgbWF4aW11bV9zcGFjZSArPSAobG9uZykgYnB0ci0+cm93c19pbl9hcnJheSAqDQotCQkgICAgICAgKGxvbmcpIGJwdHItPmJsb2Nrc3BlcnJvdyAqIFNJWkVPRihKQkxPQ0spOw0KLSAgICB9DQotICB9DQotDQotICBpZiAoc3BhY2VfcGVyX21pbmhlaWdodCA8PSAwKQ0KLSAgICByZXR1cm47CQkJLyogbm8gdW5yZWFsaXplZCBhcnJheXMsIG5vIHdvcmsgKi8NCi0NCi0gIC8qIERldGVybWluZSBhbW91bnQgb2YgbWVtb3J5IHRvIGFjdHVhbGx5IHVzZTsgdGhpcyBpcyBzeXN0ZW0tZGVwZW5kZW50LiAqLw0KLSAgYXZhaWxfbWVtID0ganBlZ19tZW1fYXZhaWxhYmxlKGNpbmZvLCBzcGFjZV9wZXJfbWluaGVpZ2h0LCBtYXhpbXVtX3NwYWNlLA0KLQkJCQkgbWVtLT50b3RhbF9zcGFjZV9hbGxvY2F0ZWQpOw0KLQ0KLSAgLyogSWYgdGhlIG1heGltdW0gc3BhY2UgbmVlZGVkIGlzIGF2YWlsYWJsZSwgbWFrZSBhbGwgdGhlIGJ1ZmZlcnMgZnVsbA0KLSAgICogaGVpZ2h0OyBvdGhlcndpc2UgcGFyY2VsIGl0IG91dCB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBtaW5oZWlnaHRzDQotICAgKiBpbiBlYWNoIGJ1ZmZlci4NCi0gICAqLw0KLSAgaWYgKGF2YWlsX21lbSA+PSBtYXhpbXVtX3NwYWNlKQ0KLSAgICBtYXhfbWluaGVpZ2h0cyA9IDEwMDAwMDAwMDBMOw0KLSAgZWxzZSB7DQotICAgIG1heF9taW5oZWlnaHRzID0gYXZhaWxfbWVtIC8gc3BhY2VfcGVyX21pbmhlaWdodDsNCi0gICAgLyogSWYgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGVub3VnaCBzcGFjZSwgdHJ5IHRvIGdldCB0aGUgbWluaW11bQ0KLSAgICAgKiBhbnl3YXkuICBUaGlzIGFsbG93cyBhICJzdHViIiBpbXBsZW1lbnRhdGlvbiBvZiBqcGVnX21lbV9hdmFpbGFibGUoKS4NCi0gICAgICovDQotICAgIGlmIChtYXhfbWluaGVpZ2h0cyA8PSAwKQ0KLSAgICAgIG1heF9taW5oZWlnaHRzID0gMTsNCi0gIH0NCi0NCi0gIC8qIEFsbG9jYXRlIHRoZSBpbi1tZW1vcnkgYnVmZmVycyBhbmQgaW5pdGlhbGl6ZSBiYWNraW5nIHN0b3JlIGFzIG5lZWRlZC4gKi8NCi0NCi0gIGZvciAoc3B0ciA9IG1lbS0+dmlydF9zYXJyYXlfbGlzdDsgc3B0ciAhPSBOVUxMOyBzcHRyID0gc3B0ci0+bmV4dCkgew0KLSAgICBpZiAoc3B0ci0+bWVtX2J1ZmZlciA9PSBOVUxMKSB7IC8qIGlmIG5vdCByZWFsaXplZCB5ZXQgKi8NCi0gICAgICBtaW5oZWlnaHRzID0gKChsb25nKSBzcHRyLT5yb3dzX2luX2FycmF5IC0gMUwpIC8gc3B0ci0+bWF4YWNjZXNzICsgMUw7DQotICAgICAgaWYgKG1pbmhlaWdodHMgPD0gbWF4X21pbmhlaWdodHMpIHsNCi0JLyogVGhpcyBidWZmZXIgZml0cyBpbiBtZW1vcnkgKi8NCi0Jc3B0ci0+cm93c19pbl9tZW0gPSBzcHRyLT5yb3dzX2luX2FycmF5Ow0KLSAgICAgIH0gZWxzZSB7DQotCS8qIEl0IGRvZXNuJ3QgZml0IGluIG1lbW9yeSwgY3JlYXRlIGJhY2tpbmcgc3RvcmUuICovDQotCXNwdHItPnJvd3NfaW5fbWVtID0gKEpESU1FTlNJT04pIChtYXhfbWluaGVpZ2h0cyAqIHNwdHItPm1heGFjY2Vzcyk7DQotCWpwZWdfb3Blbl9iYWNraW5nX3N0b3JlKGNpbmZvLCAmIHNwdHItPmJfc19pbmZvLA0KLQkJCQkobG9uZykgc3B0ci0+cm93c19pbl9hcnJheSAqDQotCQkJCShsb25nKSBzcHRyLT5zYW1wbGVzcGVycm93ICoNCi0JCQkJKGxvbmcpIFNJWkVPRihKU0FNUExFKSk7DQotCXNwdHItPmJfc19vcGVuID0gVFJVRTsNCi0gICAgICB9DQotICAgICAgc3B0ci0+bWVtX2J1ZmZlciA9IGFsbG9jX3NhcnJheShjaW5mbywgSlBPT0xfSU1BR0UsDQotCQkJCSAgICAgIHNwdHItPnNhbXBsZXNwZXJyb3csIHNwdHItPnJvd3NfaW5fbWVtKTsNCi0gICAgICBzcHRyLT5yb3dzcGVyY2h1bmsgPSBtZW0tPmxhc3Rfcm93c3BlcmNodW5rOw0KLSAgICAgIHNwdHItPmN1cl9zdGFydF9yb3cgPSAwOw0KLSAgICAgIHNwdHItPmZpcnN0X3VuZGVmX3JvdyA9IDA7DQotICAgICAgc3B0ci0+ZGlydHkgPSBGQUxTRTsNCi0gICAgfQ0KLSAgfQ0KLQ0KLSAgZm9yIChicHRyID0gbWVtLT52aXJ0X2JhcnJheV9saXN0OyBicHRyICE9IE5VTEw7IGJwdHIgPSBicHRyLT5uZXh0KSB7DQotICAgIGlmIChicHRyLT5tZW1fYnVmZmVyID09IE5VTEwpIHsgLyogaWYgbm90IHJlYWxpemVkIHlldCAqLw0KLSAgICAgIG1pbmhlaWdodHMgPSAoKGxvbmcpIGJwdHItPnJvd3NfaW5fYXJyYXkgLSAxTCkgLyBicHRyLT5tYXhhY2Nlc3MgKyAxTDsNCi0gICAgICBpZiAobWluaGVpZ2h0cyA8PSBtYXhfbWluaGVpZ2h0cykgew0KLQkvKiBUaGlzIGJ1ZmZlciBmaXRzIGluIG1lbW9yeSAqLw0KLQlicHRyLT5yb3dzX2luX21lbSA9IGJwdHItPnJvd3NfaW5fYXJyYXk7DQotICAgICAgfSBlbHNlIHsNCi0JLyogSXQgZG9lc24ndCBmaXQgaW4gbWVtb3J5LCBjcmVhdGUgYmFja2luZyBzdG9yZS4gKi8NCi0JYnB0ci0+cm93c19pbl9tZW0gPSAoSkRJTUVOU0lPTikgKG1heF9taW5oZWlnaHRzICogYnB0ci0+bWF4YWNjZXNzKTsNCi0JanBlZ19vcGVuX2JhY2tpbmdfc3RvcmUoY2luZm8sICYgYnB0ci0+Yl9zX2luZm8sDQotCQkJCShsb25nKSBicHRyLT5yb3dzX2luX2FycmF5ICoNCi0JCQkJKGxvbmcpIGJwdHItPmJsb2Nrc3BlcnJvdyAqDQotCQkJCShsb25nKSBTSVpFT0YoSkJMT0NLKSk7DQotCWJwdHItPmJfc19vcGVuID0gVFJVRTsNCi0gICAgICB9DQotICAgICAgYnB0ci0+bWVtX2J1ZmZlciA9IGFsbG9jX2JhcnJheShjaW5mbywgSlBPT0xfSU1BR0UsDQotCQkJCSAgICAgIGJwdHItPmJsb2Nrc3BlcnJvdywgYnB0ci0+cm93c19pbl9tZW0pOw0KLSAgICAgIGJwdHItPnJvd3NwZXJjaHVuayA9IG1lbS0+bGFzdF9yb3dzcGVyY2h1bms7DQotICAgICAgYnB0ci0+Y3VyX3N0YXJ0X3JvdyA9IDA7DQotICAgICAgYnB0ci0+Zmlyc3RfdW5kZWZfcm93ID0gMDsNCi0gICAgICBicHRyLT5kaXJ0eSA9IEZBTFNFOw0KLSAgICB9DQotICB9DQotfQ0KLQ0KLQ0KLUxPQ0FMKHZvaWQpDQotZG9fc2FycmF5X2lvIChqX2NvbW1vbl9wdHIgY2luZm8sIGp2aXJ0X3NhcnJheV9wdHIgcHRyLCBib29sZWFuIHdyaXRpbmcpDQotLyogRG8gYmFja2luZyBzdG9yZSByZWFkIG9yIHdyaXRlIG9mIGEgdmlydHVhbCBzYW1wbGUgYXJyYXkgKi8NCi17DQotICBsb25nIGJ5dGVzcGVycm93LCBmaWxlX29mZnNldCwgYnl0ZV9jb3VudCwgcm93cywgdGhpc3JvdywgaTsNCi0NCi0gIGJ5dGVzcGVycm93ID0gKGxvbmcpIHB0ci0+c2FtcGxlc3BlcnJvdyAqIFNJWkVPRihKU0FNUExFKTsNCi0gIGZpbGVfb2Zmc2V0ID0gcHRyLT5jdXJfc3RhcnRfcm93ICogYnl0ZXNwZXJyb3c7DQotICAvKiBMb29wIHRvIHJlYWQgb3Igd3JpdGUgZWFjaCBhbGxvY2F0aW9uIGNodW5rIGluIG1lbV9idWZmZXIgKi8NCi0gIGZvciAoaSA9IDA7IGkgPCAobG9uZykgcHRyLT5yb3dzX2luX21lbTsgaSArPSBwdHItPnJvd3NwZXJjaHVuaykgew0KLSAgICAvKiBPbmUgY2h1bmssIGJ1dCBjaGVjayBmb3Igc2hvcnQgY2h1bmsgYXQgZW5kIG9mIGJ1ZmZlciAqLw0KLSAgICByb3dzID0gTUlOKChsb25nKSBwdHItPnJvd3NwZXJjaHVuaywgKGxvbmcpIHB0ci0+cm93c19pbl9tZW0gLSBpKTsNCi0gICAgLyogVHJhbnNmZXIgbm8gbW9yZSB0aGFuIGlzIGN1cnJlbnRseSBkZWZpbmVkICovDQotICAgIHRoaXNyb3cgPSAobG9uZykgcHRyLT5jdXJfc3RhcnRfcm93ICsgaTsNCi0gICAgcm93cyA9IE1JTihyb3dzLCAobG9uZykgcHRyLT5maXJzdF91bmRlZl9yb3cgLSB0aGlzcm93KTsNCi0gICAgLyogVHJhbnNmZXIgbm8gbW9yZSB0aGFuIGZpdHMgaW4gZmlsZSAqLw0KLSAgICByb3dzID0gTUlOKHJvd3MsIChsb25nKSBwdHItPnJvd3NfaW5fYXJyYXkgLSB0aGlzcm93KTsNCi0gICAgaWYgKHJvd3MgPD0gMCkJCS8qIHRoaXMgY2h1bmsgbWlnaHQgYmUgcGFzdCBlbmQgb2YgZmlsZSEgKi8NCi0gICAgICBicmVhazsNCi0gICAgYnl0ZV9jb3VudCA9IHJvd3MgKiBieXRlc3BlcnJvdzsNCi0gICAgaWYgKHdyaXRpbmcpDQotICAgICAgKCpwdHItPmJfc19pbmZvLndyaXRlX2JhY2tpbmdfc3RvcmUpIChjaW5mbywgJiBwdHItPmJfc19pbmZvLA0KLQkJCQkJICAgICh2b2lkIEZBUiAqKSBwdHItPm1lbV9idWZmZXJbaV0sDQotCQkJCQkgICAgZmlsZV9vZmZzZXQsIGJ5dGVfY291bnQpOw0KLSAgICBlbHNlDQotICAgICAgKCpwdHItPmJfc19pbmZvLnJlYWRfYmFja2luZ19zdG9yZSkgKGNpbmZvLCAmIHB0ci0+Yl9zX2luZm8sDQotCQkJCQkgICAodm9pZCBGQVIgKikgcHRyLT5tZW1fYnVmZmVyW2ldLA0KLQkJCQkJICAgZmlsZV9vZmZzZXQsIGJ5dGVfY291bnQpOw0KLSAgICBmaWxlX29mZnNldCArPSBieXRlX2NvdW50Ow0KLSAgfQ0KLX0NCi0NCi0NCi1MT0NBTCh2b2lkKQ0KLWRvX2JhcnJheV9pbyAoal9jb21tb25fcHRyIGNpbmZvLCBqdmlydF9iYXJyYXlfcHRyIHB0ciwgYm9vbGVhbiB3cml0aW5nKQ0KLS8qIERvIGJhY2tpbmcgc3RvcmUgcmVhZCBvciB3cml0ZSBvZiBhIHZpcnR1YWwgY29lZmZpY2llbnQtYmxvY2sgYXJyYXkgKi8NCi17DQotICBsb25nIGJ5dGVzcGVycm93LCBmaWxlX29mZnNldCwgYnl0ZV9jb3VudCwgcm93cywgdGhpc3JvdywgaTsNCi0NCi0gIGJ5dGVzcGVycm93ID0gKGxvbmcpIHB0ci0+YmxvY2tzcGVycm93ICogU0laRU9GKEpCTE9DSyk7DQotICBmaWxlX29mZnNldCA9IHB0ci0+Y3VyX3N0YXJ0X3JvdyAqIGJ5dGVzcGVycm93Ow0KLSAgLyogTG9vcCB0byByZWFkIG9yIHdyaXRlIGVhY2ggYWxsb2NhdGlvbiBjaHVuayBpbiBtZW1fYnVmZmVyICovDQotICBmb3IgKGkgPSAwOyBpIDwgKGxvbmcpIHB0ci0+cm93c19pbl9tZW07IGkgKz0gcHRyLT5yb3dzcGVyY2h1bmspIHsNCi0gICAgLyogT25lIGNodW5rLCBidXQgY2hlY2sgZm9yIHNob3J0IGNodW5rIGF0IGVuZCBvZiBidWZmZXIgKi8NCi0gICAgcm93cyA9IE1JTigobG9uZykgcHRyLT5yb3dzcGVyY2h1bmssIChsb25nKSBwdHItPnJvd3NfaW5fbWVtIC0gaSk7DQotICAgIC8qIFRyYW5zZmVyIG5vIG1vcmUgdGhhbiBpcyBjdXJyZW50bHkgZGVmaW5lZCAqLw0KLSAgICB0aGlzcm93ID0gKGxvbmcpIHB0ci0+Y3VyX3N0YXJ0X3JvdyArIGk7DQotICAgIHJvd3MgPSBNSU4ocm93cywgKGxvbmcpIHB0ci0+Zmlyc3RfdW5kZWZfcm93IC0gdGhpc3Jvdyk7DQotICAgIC8qIFRyYW5zZmVyIG5vIG1vcmUgdGhhbiBmaXRzIGluIGZpbGUgKi8NCi0gICAgcm93cyA9IE1JTihyb3dzLCAobG9uZykgcHRyLT5yb3dzX2luX2FycmF5IC0gdGhpc3Jvdyk7DQotICAgIGlmIChyb3dzIDw9IDApCQkvKiB0aGlzIGNodW5rIG1pZ2h0IGJlIHBhc3QgZW5kIG9mIGZpbGUhICovDQotICAgICAgYnJlYWs7DQotICAgIGJ5dGVfY291bnQgPSByb3dzICogYnl0ZXNwZXJyb3c7DQotICAgIGlmICh3cml0aW5nKQ0KLSAgICAgICgqcHRyLT5iX3NfaW5mby53cml0ZV9iYWNraW5nX3N0b3JlKSAoY2luZm8sICYgcHRyLT5iX3NfaW5mbywNCi0JCQkJCSAgICAodm9pZCBGQVIgKikgcHRyLT5tZW1fYnVmZmVyW2ldLA0KLQkJCQkJICAgIGZpbGVfb2Zmc2V0LCBieXRlX2NvdW50KTsNCi0gICAgZWxzZQ0KLSAgICAgICgqcHRyLT5iX3NfaW5mby5yZWFkX2JhY2tpbmdfc3RvcmUpIChjaW5mbywgJiBwdHItPmJfc19pbmZvLA0KLQkJCQkJICAgKHZvaWQgRkFSICopIHB0ci0+bWVtX2J1ZmZlcltpXSwNCi0JCQkJCSAgIGZpbGVfb2Zmc2V0LCBieXRlX2NvdW50KTsNCi0gICAgZmlsZV9vZmZzZXQgKz0gYnl0ZV9jb3VudDsNCi0gIH0NCi19DQotDQotDQotTUVUSE9EREVGKEpTQU1QQVJSQVkpDQotYWNjZXNzX3ZpcnRfc2FycmF5IChqX2NvbW1vbl9wdHIgY2luZm8sIGp2aXJ0X3NhcnJheV9wdHIgcHRyLA0KLQkJICAgIEpESU1FTlNJT04gc3RhcnRfcm93LCBKRElNRU5TSU9OIG51bV9yb3dzLA0KLQkJICAgIGJvb2xlYW4gd3JpdGFibGUpDQotLyogQWNjZXNzIHRoZSBwYXJ0IG9mIGEgdmlydHVhbCBzYW1wbGUgYXJyYXkgc3RhcnRpbmcgYXQgc3RhcnRfcm93ICovDQotLyogYW5kIGV4dGVuZGluZyBmb3IgbnVtX3Jvd3Mgcm93cy4gIHdyaXRhYmxlIGlzIHRydWUgaWYgICovDQotLyogY2FsbGVyIGludGVuZHMgdG8gbW9kaWZ5IHRoZSBhY2Nlc3NlZCBhcmVhLiAqLw0KLXsNCi0gIEpESU1FTlNJT04gZW5kX3JvdyA9IHN0YXJ0X3JvdyArIG51bV9yb3dzOw0KLSAgSkRJTUVOU0lPTiB1bmRlZl9yb3c7DQotDQotICAvKiBkZWJ1Z2dpbmcgY2hlY2sgKi8NCi0gIGlmIChlbmRfcm93ID4gcHRyLT5yb3dzX2luX2FycmF5IHx8IG51bV9yb3dzID4gcHRyLT5tYXhhY2Nlc3MgfHwNCi0gICAgICBwdHItPm1lbV9idWZmZXIgPT0gTlVMTCkNCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfVklSVFVBTF9BQ0NFU1MpOw0KLQ0KLSAgLyogTWFrZSB0aGUgZGVzaXJlZCBwYXJ0IG9mIHRoZSB2aXJ0dWFsIGFycmF5IGFjY2Vzc2libGUgKi8NCi0gIGlmIChzdGFydF9yb3cgPCBwdHItPmN1cl9zdGFydF9yb3cgfHwNCi0gICAgICBlbmRfcm93ID4gcHRyLT5jdXJfc3RhcnRfcm93K3B0ci0+cm93c19pbl9tZW0pIHsNCi0gICAgaWYgKCEgcHRyLT5iX3Nfb3BlbikNCi0gICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1ZJUlRVQUxfQlVHKTsNCi0gICAgLyogRmx1c2ggb2xkIGJ1ZmZlciBjb250ZW50cyBpZiBuZWNlc3NhcnkgKi8NCi0gICAgaWYgKHB0ci0+ZGlydHkpIHsNCi0gICAgICBkb19zYXJyYXlfaW8oY2luZm8sIHB0ciwgVFJVRSk7DQotICAgICAgcHRyLT5kaXJ0eSA9IEZBTFNFOw0KLSAgICB9DQotICAgIC8qIERlY2lkZSB3aGF0IHBhcnQgb2YgdmlydHVhbCBhcnJheSB0byBhY2Nlc3MuDQotICAgICAqIEFsZ29yaXRobTogaWYgdGFyZ2V0IGFkZHJlc3MgPiBjdXJyZW50IHdpbmRvdywgYXNzdW1lIGZvcndhcmQgc2NhbiwNCi0gICAgICogbG9hZCBzdGFydGluZyBhdCB0YXJnZXQgYWRkcmVzcy4gIElmIHRhcmdldCBhZGRyZXNzIDwgY3VycmVudCB3aW5kb3csDQotICAgICAqIGFzc3VtZSBiYWNrd2FyZCBzY2FuLCBsb2FkIHNvIHRoYXQgdGFyZ2V0IGFyZWEgaXMgdG9wIG9mIHdpbmRvdy4NCi0gICAgICogTm90ZSB0aGF0IHdoZW4gc3dpdGNoaW5nIGZyb20gZm9yd2FyZCB3cml0ZSB0byBmb3J3YXJkIHJlYWQsIHdpbGwgaGF2ZQ0KLSAgICAgKiBzdGFydF9yb3cgPSAwLCBzbyB0aGUgbGltaXRpbmcgY2FzZSBhcHBsaWVzIGFuZCB3ZSBsb2FkIGZyb20gMCBhbnl3YXkuDQotICAgICAqLw0KLSAgICBpZiAoc3RhcnRfcm93ID4gcHRyLT5jdXJfc3RhcnRfcm93KSB7DQotICAgICAgcHRyLT5jdXJfc3RhcnRfcm93ID0gc3RhcnRfcm93Ow0KLSAgICB9IGVsc2Ugew0KLSAgICAgIC8qIHVzZSBsb25nIGFyaXRobWV0aWMgaGVyZSB0byBhdm9pZCBvdmVyZmxvdyAmIHVuc2lnbmVkIHByb2JsZW1zICovDQotICAgICAgbG9uZyBsdGVtcDsNCi0NCi0gICAgICBsdGVtcCA9IChsb25nKSBlbmRfcm93IC0gKGxvbmcpIHB0ci0+cm93c19pbl9tZW07DQotICAgICAgaWYgKGx0ZW1wIDwgMCkNCi0JbHRlbXAgPSAwOwkJLyogZG9uJ3QgZmFsbCBvZmYgZnJvbnQgZW5kIG9mIGZpbGUgKi8NCi0gICAgICBwdHItPmN1cl9zdGFydF9yb3cgPSAoSkRJTUVOU0lPTikgbHRlbXA7DQotICAgIH0NCi0gICAgLyogUmVhZCBpbiB0aGUgc2VsZWN0ZWQgcGFydCBvZiB0aGUgYXJyYXkuDQotICAgICAqIER1cmluZyB0aGUgaW5pdGlhbCB3cml0ZSBwYXNzLCB3ZSB3aWxsIGRvIG5vIGFjdHVhbCByZWFkDQotICAgICAqIGJlY2F1c2UgdGhlIHNlbGVjdGVkIHBhcnQgaXMgYWxsIHVuZGVmaW5lZC4NCi0gICAgICovDQotICAgIGRvX3NhcnJheV9pbyhjaW5mbywgcHRyLCBGQUxTRSk7DQotICB9DQotICAvKiBFbnN1cmUgdGhlIGFjY2Vzc2VkIHBhcnQgb2YgdGhlIGFycmF5IGlzIGRlZmluZWQ7IHByZXplcm8gaWYgbmVlZGVkLg0KLSAgICogVG8gaW1wcm92ZSBsb2NhbGl0eSBvZiBhY2Nlc3MsIHdlIG9ubHkgcHJlemVybyB0aGUgcGFydCBvZiB0aGUgYXJyYXkNCi0gICAqIHRoYXQgdGhlIGNhbGxlciBpcyBhYm91dCB0byBhY2Nlc3MsIG5vdCB0aGUgZW50aXJlIGluLW1lbW9yeSBhcnJheS4NCi0gICAqLw0KLSAgaWYgKHB0ci0+Zmlyc3RfdW5kZWZfcm93IDwgZW5kX3Jvdykgew0KLSAgICBpZiAocHRyLT5maXJzdF91bmRlZl9yb3cgPCBzdGFydF9yb3cpIHsNCi0gICAgICBpZiAod3JpdGFibGUpCQkvKiB3cml0ZXIgc2tpcHBlZCBvdmVyIGEgc2VjdGlvbiBvZiBhcnJheSAqLw0KLQlFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9WSVJUVUFMX0FDQ0VTUyk7DQotICAgICAgdW5kZWZfcm93ID0gc3RhcnRfcm93OwkvKiBidXQgcmVhZGVyIGlzIGFsbG93ZWQgdG8gcmVhZCBhaGVhZCAqLw0KLSAgICB9IGVsc2Ugew0KLSAgICAgIHVuZGVmX3JvdyA9IHB0ci0+Zmlyc3RfdW5kZWZfcm93Ow0KLSAgICB9DQotICAgIGlmICh3cml0YWJsZSkNCi0gICAgICBwdHItPmZpcnN0X3VuZGVmX3JvdyA9IGVuZF9yb3c7DQotICAgIGlmIChwdHItPnByZV96ZXJvKSB7DQotICAgICAgc2l6ZV90IGJ5dGVzcGVycm93ID0gKHNpemVfdCkgcHRyLT5zYW1wbGVzcGVycm93ICogU0laRU9GKEpTQU1QTEUpOw0KLSAgICAgIHVuZGVmX3JvdyAtPSBwdHItPmN1cl9zdGFydF9yb3c7IC8qIG1ha2UgaW5kZXhlcyByZWxhdGl2ZSB0byBidWZmZXIgKi8NCi0gICAgICBlbmRfcm93IC09IHB0ci0+Y3VyX3N0YXJ0X3JvdzsNCi0gICAgICB3aGlsZSAodW5kZWZfcm93IDwgZW5kX3Jvdykgew0KLQlqemVyb19mYXIoKHZvaWQgRkFSICopIHB0ci0+bWVtX2J1ZmZlclt1bmRlZl9yb3ddLCBieXRlc3BlcnJvdyk7DQotCXVuZGVmX3JvdysrOw0KLSAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICBpZiAoISB3cml0YWJsZSkJCS8qIHJlYWRlciBsb29raW5nIGF0IHVuZGVmaW5lZCBkYXRhICovDQotCUVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX1ZJUlRVQUxfQUNDRVNTKTsNCi0gICAgfQ0KLSAgfQ0KLSAgLyogRmxhZyB0aGUgYnVmZmVyIGRpcnR5IGlmIGNhbGxlciB3aWxsIHdyaXRlIGluIGl0ICovDQotICBpZiAod3JpdGFibGUpDQotICAgIHB0ci0+ZGlydHkgPSBUUlVFOw0KLSAgLyogUmV0dXJuIGFkZHJlc3Mgb2YgcHJvcGVyIHBhcnQgb2YgdGhlIGJ1ZmZlciAqLw0KLSAgcmV0dXJuIHB0ci0+bWVtX2J1ZmZlciArIChzdGFydF9yb3cgLSBwdHItPmN1cl9zdGFydF9yb3cpOw0KLX0NCi0NCi0NCi1NRVRIT0RERUYoSkJMT0NLQVJSQVkpDQotYWNjZXNzX3ZpcnRfYmFycmF5IChqX2NvbW1vbl9wdHIgY2luZm8sIGp2aXJ0X2JhcnJheV9wdHIgcHRyLA0KLQkJICAgIEpESU1FTlNJT04gc3RhcnRfcm93LCBKRElNRU5TSU9OIG51bV9yb3dzLA0KLQkJICAgIGJvb2xlYW4gd3JpdGFibGUpDQotLyogQWNjZXNzIHRoZSBwYXJ0IG9mIGEgdmlydHVhbCBibG9jayBhcnJheSBzdGFydGluZyBhdCBzdGFydF9yb3cgKi8NCi0vKiBhbmQgZXh0ZW5kaW5nIGZvciBudW1fcm93cyByb3dzLiAgd3JpdGFibGUgaXMgdHJ1ZSBpZiAgKi8NCi0vKiBjYWxsZXIgaW50ZW5kcyB0byBtb2RpZnkgdGhlIGFjY2Vzc2VkIGFyZWEuICovDQotew0KLSAgSkRJTUVOU0lPTiBlbmRfcm93ID0gc3RhcnRfcm93ICsgbnVtX3Jvd3M7DQotICBKRElNRU5TSU9OIHVuZGVmX3JvdzsNCi0NCi0gIC8qIGRlYnVnZ2luZyBjaGVjayAqLw0KLSAgaWYgKGVuZF9yb3cgPiBwdHItPnJvd3NfaW5fYXJyYXkgfHwgbnVtX3Jvd3MgPiBwdHItPm1heGFjY2VzcyB8fA0KLSAgICAgIHB0ci0+bWVtX2J1ZmZlciA9PSBOVUxMKQ0KLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9WSVJUVUFMX0FDQ0VTUyk7DQotDQotICAvKiBNYWtlIHRoZSBkZXNpcmVkIHBhcnQgb2YgdGhlIHZpcnR1YWwgYXJyYXkgYWNjZXNzaWJsZSAqLw0KLSAgaWYgKHN0YXJ0X3JvdyA8IHB0ci0+Y3VyX3N0YXJ0X3JvdyB8fA0KLSAgICAgIGVuZF9yb3cgPiBwdHItPmN1cl9zdGFydF9yb3crcHRyLT5yb3dzX2luX21lbSkgew0KLSAgICBpZiAoISBwdHItPmJfc19vcGVuKQ0KLSAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfVklSVFVBTF9CVUcpOw0KLSAgICAvKiBGbHVzaCBvbGQgYnVmZmVyIGNvbnRlbnRzIGlmIG5lY2Vzc2FyeSAqLw0KLSAgICBpZiAocHRyLT5kaXJ0eSkgew0KLSAgICAgIGRvX2JhcnJheV9pbyhjaW5mbywgcHRyLCBUUlVFKTsNCi0gICAgICBwdHItPmRpcnR5ID0gRkFMU0U7DQotICAgIH0NCi0gICAgLyogRGVjaWRlIHdoYXQgcGFydCBvZiB2aXJ0dWFsIGFycmF5IHRvIGFjY2Vzcy4NCi0gICAgICogQWxnb3JpdGhtOiBpZiB0YXJnZXQgYWRkcmVzcyA+IGN1cnJlbnQgd2luZG93LCBhc3N1bWUgZm9yd2FyZCBzY2FuLA0KLSAgICAgKiBsb2FkIHN0YXJ0aW5nIGF0IHRhcmdldCBhZGRyZXNzLiAgSWYgdGFyZ2V0IGFkZHJlc3MgPCBjdXJyZW50IHdpbmRvdywNCi0gICAgICogYXNzdW1lIGJhY2t3YXJkIHNjYW4sIGxvYWQgc28gdGhhdCB0YXJnZXQgYXJlYSBpcyB0b3Agb2Ygd2luZG93Lg0KLSAgICAgKiBOb3RlIHRoYXQgd2hlbiBzd2l0Y2hpbmcgZnJvbSBmb3J3YXJkIHdyaXRlIHRvIGZvcndhcmQgcmVhZCwgd2lsbCBoYXZlDQotICAgICAqIHN0YXJ0X3JvdyA9IDAsIHNvIHRoZSBsaW1pdGluZyBjYXNlIGFwcGxpZXMgYW5kIHdlIGxvYWQgZnJvbSAwIGFueXdheS4NCi0gICAgICovDQotICAgIGlmIChzdGFydF9yb3cgPiBwdHItPmN1cl9zdGFydF9yb3cpIHsNCi0gICAgICBwdHItPmN1cl9zdGFydF9yb3cgPSBzdGFydF9yb3c7DQotICAgIH0gZWxzZSB7DQotICAgICAgLyogdXNlIGxvbmcgYXJpdGhtZXRpYyBoZXJlIHRvIGF2b2lkIG92ZXJmbG93ICYgdW5zaWduZWQgcHJvYmxlbXMgKi8NCi0gICAgICBsb25nIGx0ZW1wOw0KLQ0KLSAgICAgIGx0ZW1wID0gKGxvbmcpIGVuZF9yb3cgLSAobG9uZykgcHRyLT5yb3dzX2luX21lbTsNCi0gICAgICBpZiAobHRlbXAgPCAwKQ0KLQlsdGVtcCA9IDA7CQkvKiBkb24ndCBmYWxsIG9mZiBmcm9udCBlbmQgb2YgZmlsZSAqLw0KLSAgICAgIHB0ci0+Y3VyX3N0YXJ0X3JvdyA9IChKRElNRU5TSU9OKSBsdGVtcDsNCi0gICAgfQ0KLSAgICAvKiBSZWFkIGluIHRoZSBzZWxlY3RlZCBwYXJ0IG9mIHRoZSBhcnJheS4NCi0gICAgICogRHVyaW5nIHRoZSBpbml0aWFsIHdyaXRlIHBhc3MsIHdlIHdpbGwgZG8gbm8gYWN0dWFsIHJlYWQNCi0gICAgICogYmVjYXVzZSB0aGUgc2VsZWN0ZWQgcGFydCBpcyBhbGwgdW5kZWZpbmVkLg0KLSAgICAgKi8NCi0gICAgZG9fYmFycmF5X2lvKGNpbmZvLCBwdHIsIEZBTFNFKTsNCi0gIH0NCi0gIC8qIEVuc3VyZSB0aGUgYWNjZXNzZWQgcGFydCBvZiB0aGUgYXJyYXkgaXMgZGVmaW5lZDsgcHJlemVybyBpZiBuZWVkZWQuDQotICAgKiBUbyBpbXByb3ZlIGxvY2FsaXR5IG9mIGFjY2Vzcywgd2Ugb25seSBwcmV6ZXJvIHRoZSBwYXJ0IG9mIHRoZSBhcnJheQ0KLSAgICogdGhhdCB0aGUgY2FsbGVyIGlzIGFib3V0IHRvIGFjY2Vzcywgbm90IHRoZSBlbnRpcmUgaW4tbWVtb3J5IGFycmF5Lg0KLSAgICovDQotICBpZiAocHRyLT5maXJzdF91bmRlZl9yb3cgPCBlbmRfcm93KSB7DQotICAgIGlmIChwdHItPmZpcnN0X3VuZGVmX3JvdyA8IHN0YXJ0X3Jvdykgew0KLSAgICAgIGlmICh3cml0YWJsZSkJCS8qIHdyaXRlciBza2lwcGVkIG92ZXIgYSBzZWN0aW9uIG9mIGFycmF5ICovDQotCUVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX1ZJUlRVQUxfQUNDRVNTKTsNCi0gICAgICB1bmRlZl9yb3cgPSBzdGFydF9yb3c7CS8qIGJ1dCByZWFkZXIgaXMgYWxsb3dlZCB0byByZWFkIGFoZWFkICovDQotICAgIH0gZWxzZSB7DQotICAgICAgdW5kZWZfcm93ID0gcHRyLT5maXJzdF91bmRlZl9yb3c7DQotICAgIH0NCi0gICAgaWYgKHdyaXRhYmxlKQ0KLSAgICAgIHB0ci0+Zmlyc3RfdW5kZWZfcm93ID0gZW5kX3JvdzsNCi0gICAgaWYgKHB0ci0+cHJlX3plcm8pIHsNCi0gICAgICBzaXplX3QgYnl0ZXNwZXJyb3cgPSAoc2l6ZV90KSBwdHItPmJsb2Nrc3BlcnJvdyAqIFNJWkVPRihKQkxPQ0spOw0KLSAgICAgIHVuZGVmX3JvdyAtPSBwdHItPmN1cl9zdGFydF9yb3c7IC8qIG1ha2UgaW5kZXhlcyByZWxhdGl2ZSB0byBidWZmZXIgKi8NCi0gICAgICBlbmRfcm93IC09IHB0ci0+Y3VyX3N0YXJ0X3JvdzsNCi0gICAgICB3aGlsZSAodW5kZWZfcm93IDwgZW5kX3Jvdykgew0KLQlqemVyb19mYXIoKHZvaWQgRkFSICopIHB0ci0+bWVtX2J1ZmZlclt1bmRlZl9yb3ddLCBieXRlc3BlcnJvdyk7DQotCXVuZGVmX3JvdysrOw0KLSAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICBpZiAoISB3cml0YWJsZSkJCS8qIHJlYWRlciBsb29raW5nIGF0IHVuZGVmaW5lZCBkYXRhICovDQotCUVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX1ZJUlRVQUxfQUNDRVNTKTsNCi0gICAgfQ0KLSAgfQ0KLSAgLyogRmxhZyB0aGUgYnVmZmVyIGRpcnR5IGlmIGNhbGxlciB3aWxsIHdyaXRlIGluIGl0ICovDQotICBpZiAod3JpdGFibGUpDQotICAgIHB0ci0+ZGlydHkgPSBUUlVFOw0KLSAgLyogUmV0dXJuIGFkZHJlc3Mgb2YgcHJvcGVyIHBhcnQgb2YgdGhlIGJ1ZmZlciAqLw0KLSAgcmV0dXJuIHB0ci0+bWVtX2J1ZmZlciArIChzdGFydF9yb3cgLSBwdHItPmN1cl9zdGFydF9yb3cpOw0KLX0NCi0NCi0NCi0vKg0KLSAqIFJlbGVhc2UgYWxsIG9iamVjdHMgYmVsb25naW5nIHRvIGEgc3BlY2lmaWVkIHBvb2wuDQotICovDQotDQotTUVUSE9EREVGKHZvaWQpDQotZnJlZV9wb29sIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkKQ0KLXsNCi0gIG15X21lbV9wdHIgbWVtID0gKG15X21lbV9wdHIpIGNpbmZvLT5tZW07DQotICBzbWFsbF9wb29sX3B0ciBzaGRyX3B0cjsNCi0gIGxhcmdlX3Bvb2xfcHRyIGxoZHJfcHRyOw0KLSAgc2l6ZV90IHNwYWNlX2ZyZWVkOw0KLQ0KLSAgaWYgKHBvb2xfaWQgPCAwIHx8IHBvb2xfaWQgPj0gSlBPT0xfTlVNUE9PTFMpDQotICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QT09MX0lELCBwb29sX2lkKTsJLyogc2FmZXR5IGNoZWNrICovDQotDQotI2lmZGVmIE1FTV9TVEFUUw0KLSAgaWYgKGNpbmZvLT5lcnItPnRyYWNlX2xldmVsID4gMSkNCi0gICAgcHJpbnRfbWVtX3N0YXRzKGNpbmZvLCBwb29sX2lkKTsgLyogcHJpbnQgcG9vbCdzIG1lbW9yeSB1c2FnZSBzdGF0aXN0aWNzICovDQotI2VuZGlmDQotDQotICAvKiBJZiBmcmVlaW5nIElNQUdFIHBvb2wsIGNsb3NlIGFueSB2aXJ0dWFsIGFycmF5cyBmaXJzdCAqLw0KLSAgaWYgKHBvb2xfaWQgPT0gSlBPT0xfSU1BR0UpIHsNCi0gICAganZpcnRfc2FycmF5X3B0ciBzcHRyOw0KLSAgICBqdmlydF9iYXJyYXlfcHRyIGJwdHI7DQotDQotICAgIGZvciAoc3B0ciA9IG1lbS0+dmlydF9zYXJyYXlfbGlzdDsgc3B0ciAhPSBOVUxMOyBzcHRyID0gc3B0ci0+bmV4dCkgew0KLSAgICAgIGlmIChzcHRyLT5iX3Nfb3BlbikgewkvKiB0aGVyZSBtYXkgYmUgbm8gYmFja2luZyBzdG9yZSAqLw0KLQlzcHRyLT5iX3Nfb3BlbiA9IEZBTFNFOwkvKiBwcmV2ZW50IHJlY3Vyc2l2ZSBjbG9zZSBpZiBlcnJvciAqLw0KLQkoKnNwdHItPmJfc19pbmZvLmNsb3NlX2JhY2tpbmdfc3RvcmUpIChjaW5mbywgJiBzcHRyLT5iX3NfaW5mbyk7DQotICAgICAgfQ0KLSAgICB9DQotICAgIG1lbS0+dmlydF9zYXJyYXlfbGlzdCA9IE5VTEw7DQotICAgIGZvciAoYnB0ciA9IG1lbS0+dmlydF9iYXJyYXlfbGlzdDsgYnB0ciAhPSBOVUxMOyBicHRyID0gYnB0ci0+bmV4dCkgew0KLSAgICAgIGlmIChicHRyLT5iX3Nfb3BlbikgewkvKiB0aGVyZSBtYXkgYmUgbm8gYmFja2luZyBzdG9yZSAqLw0KLQlicHRyLT5iX3Nfb3BlbiA9IEZBTFNFOwkvKiBwcmV2ZW50IHJlY3Vyc2l2ZSBjbG9zZSBpZiBlcnJvciAqLw0KLQkoKmJwdHItPmJfc19pbmZvLmNsb3NlX2JhY2tpbmdfc3RvcmUpIChjaW5mbywgJiBicHRyLT5iX3NfaW5mbyk7DQotICAgICAgfQ0KLSAgICB9DQotICAgIG1lbS0+dmlydF9iYXJyYXlfbGlzdCA9IE5VTEw7DQotICB9DQotDQotICAvKiBSZWxlYXNlIGxhcmdlIG9iamVjdHMgKi8NCi0gIGxoZHJfcHRyID0gbWVtLT5sYXJnZV9saXN0W3Bvb2xfaWRdOw0KLSAgbWVtLT5sYXJnZV9saXN0W3Bvb2xfaWRdID0gTlVMTDsNCi0NCi0gIHdoaWxlIChsaGRyX3B0ciAhPSBOVUxMKSB7DQotICAgIGxhcmdlX3Bvb2xfcHRyIG5leHRfbGhkcl9wdHIgPSBsaGRyX3B0ci0+aGRyLm5leHQ7DQotICAgIHNwYWNlX2ZyZWVkID0gbGhkcl9wdHItPmhkci5ieXRlc191c2VkICsNCi0JCSAgbGhkcl9wdHItPmhkci5ieXRlc19sZWZ0ICsNCi0JCSAgU0laRU9GKGxhcmdlX3Bvb2xfaGRyKTsNCi0gICAganBlZ19mcmVlX2xhcmdlKGNpbmZvLCAodm9pZCBGQVIgKikgbGhkcl9wdHIsIHNwYWNlX2ZyZWVkKTsNCi0gICAgbWVtLT50b3RhbF9zcGFjZV9hbGxvY2F0ZWQgLT0gc3BhY2VfZnJlZWQ7DQotICAgIGxoZHJfcHRyID0gbmV4dF9saGRyX3B0cjsNCi0gIH0NCi0NCi0gIC8qIFJlbGVhc2Ugc21hbGwgb2JqZWN0cyAqLw0KLSAgc2hkcl9wdHIgPSBtZW0tPnNtYWxsX2xpc3RbcG9vbF9pZF07DQotICBtZW0tPnNtYWxsX2xpc3RbcG9vbF9pZF0gPSBOVUxMOw0KLQ0KLSAgd2hpbGUgKHNoZHJfcHRyICE9IE5VTEwpIHsNCi0gICAgc21hbGxfcG9vbF9wdHIgbmV4dF9zaGRyX3B0ciA9IHNoZHJfcHRyLT5oZHIubmV4dDsNCi0gICAgc3BhY2VfZnJlZWQgPSBzaGRyX3B0ci0+aGRyLmJ5dGVzX3VzZWQgKw0KLQkJICBzaGRyX3B0ci0+aGRyLmJ5dGVzX2xlZnQgKw0KLQkJICBTSVpFT0Yoc21hbGxfcG9vbF9oZHIpOw0KLSAgICBqcGVnX2ZyZWVfc21hbGwoY2luZm8sICh2b2lkICopIHNoZHJfcHRyLCBzcGFjZV9mcmVlZCk7DQotICAgIG1lbS0+dG90YWxfc3BhY2VfYWxsb2NhdGVkIC09IHNwYWNlX2ZyZWVkOw0KLSAgICBzaGRyX3B0ciA9IG5leHRfc2hkcl9wdHI7DQotICB9DQotfQ0KLQ0KLQ0KLS8qDQotICogQ2xvc2UgdXAgc2hvcCBlbnRpcmVseS4NCi0gKiBOb3RlIHRoYXQgdGhpcyBjYW5ub3QgYmUgY2FsbGVkIHVubGVzcyBjaW5mby0+bWVtIGlzIG5vbi1OVUxMLg0KLSAqLw0KLQ0KLU1FVEhPRERFRih2b2lkKQ0KLXNlbGZfZGVzdHJ1Y3QgKGpfY29tbW9uX3B0ciBjaW5mbykNCi17DQotICBpbnQgcG9vbDsNCi0NCi0gIC8qIENsb3NlIGFsbCBiYWNraW5nIHN0b3JlLCByZWxlYXNlIGFsbCBtZW1vcnkuDQotICAgKiBSZWxlYXNpbmcgcG9vbHMgaW4gcmV2ZXJzZSBvcmRlciBtaWdodCBoZWxwIGF2b2lkIGZyYWdtZW50YXRpb24NCi0gICAqIHdpdGggc29tZSAoYnJhaW4tZGFtYWdlZCkgbWFsbG9jIGxpYnJhcmllcy4NCi0gICAqLw0KLSAgZm9yIChwb29sID0gSlBPT0xfTlVNUE9PTFMtMTsgcG9vbCA+PSBKUE9PTF9QRVJNQU5FTlQ7IHBvb2wtLSkgew0KLSAgICBmcmVlX3Bvb2woY2luZm8sIHBvb2wpOw0KLSAgfQ0KLQ0KLSAgLyogUmVsZWFzZSB0aGUgbWVtb3J5IG1hbmFnZXIgY29udHJvbCBibG9jayB0b28uICovDQotICBqcGVnX2ZyZWVfc21hbGwoY2luZm8sICh2b2lkICopIGNpbmZvLT5tZW0sIFNJWkVPRihteV9tZW1vcnlfbWdyKSk7DQotICBjaW5mby0+bWVtID0gTlVMTDsJCS8qIGVuc3VyZXMgSSB3aWxsIGJlIGNhbGxlZCBvbmx5IG9uY2UgKi8NCi0NCi0gIGpwZWdfbWVtX3Rlcm0oY2luZm8pOwkJLyogc3lzdGVtLWRlcGVuZGVudCBjbGVhbnVwICovDQotfQ0KLQ0KLQ0KLS8qDQotICogTWVtb3J5IG1hbmFnZXIgaW5pdGlhbGl6YXRpb24uDQotICogV2hlbiB0aGlzIGlzIGNhbGxlZCwgb25seSB0aGUgZXJyb3IgbWFuYWdlciBwb2ludGVyIGlzIHZhbGlkIGluIGNpbmZvIQ0KLSAqLw0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWppbml0X21lbW9yeV9tZ3IgKGpfY29tbW9uX3B0ciBjaW5mbykNCi17DQotICBteV9tZW1fcHRyIG1lbTsNCi0gIGxvbmcgbWF4X3RvX3VzZTsNCi0gIGludCBwb29sOw0KLSAgc2l6ZV90IHRlc3RfbWFjOw0KLQ0KLSAgY2luZm8tPm1lbSA9IE5VTEw7CQkvKiBmb3Igc2FmZXR5IGlmIGluaXQgZmFpbHMgKi8NCi0NCi0gIC8qIENoZWNrIGZvciBjb25maWd1cmF0aW9uIGVycm9ycy4NCi0gICAqIFNJWkVPRihBTElHTl9UWVBFKSBzaG91bGQgYmUgYSBwb3dlciBvZiAyOyBvdGhlcndpc2UsIGl0IHByb2JhYmx5DQotICAgKiBkb2Vzbid0IHJlZmxlY3QgYW55IHJlYWwgaGFyZHdhcmUgYWxpZ25tZW50IHJlcXVpcmVtZW50Lg0KLSAgICogVGhlIHRlc3QgaXMgYSBsaXR0bGUgdHJpY2t5OiBmb3IgWD4wLCBYIGFuZCBYLTEgaGF2ZSBubyBvbmUtYml0cw0KLSAgICogaW4gY29tbW9uIGlmIGFuZCBvbmx5IGlmIFggaXMgYSBwb3dlciBvZiAyLCBpZSBoYXMgb25seSBvbmUgb25lLWJpdC4NCi0gICAqIFNvbWUgY29tcGlsZXJzIG1heSBnaXZlIGFuICJ1bnJlYWNoYWJsZSBjb2RlIiB3YXJuaW5nIGhlcmU7IGlnbm9yZSBpdC4NCi0gICAqLw0KLSAgaWYgKChTSVpFT0YoQUxJR05fVFlQRSkgJiAoU0laRU9GKEFMSUdOX1RZUEUpLTEpKSAhPSAwKQ0KLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9BTElHTl9UWVBFKTsNCi0gIC8qIE1BWF9BTExPQ19DSFVOSyBtdXN0IGJlIHJlcHJlc2VudGFibGUgYXMgdHlwZSBzaXplX3QsIGFuZCBtdXN0IGJlDQotICAgKiBhIG11bHRpcGxlIG9mIFNJWkVPRihBTElHTl9UWVBFKS4NCi0gICAqIEFnYWluLCBhbiAidW5yZWFjaGFibGUgY29kZSIgd2FybmluZyBtYXkgYmUgaWdub3JlZCBoZXJlLg0KLSAgICogQnV0IGEgImNvbnN0YW50IHRvbyBsYXJnZSIgd2FybmluZyBtZWFucyB5b3UgbmVlZCB0byBmaXggTUFYX0FMTE9DX0NIVU5LLg0KLSAgICovDQotICB0ZXN0X21hYyA9IChzaXplX3QpIE1BWF9BTExPQ19DSFVOSzsNCi0gIGlmICgobG9uZykgdGVzdF9tYWMgIT0gTUFYX0FMTE9DX0NIVU5LIHx8DQotICAgICAgKE1BWF9BTExPQ19DSFVOSyAlIFNJWkVPRihBTElHTl9UWVBFKSkgIT0gMCkNCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfQUxMT0NfQ0hVTkspOw0KLQ0KLSAgbWF4X3RvX3VzZSA9IGpwZWdfbWVtX2luaXQoY2luZm8pOyAvKiBzeXN0ZW0tZGVwZW5kZW50IGluaXRpYWxpemF0aW9uICovDQotDQotICAvKiBBdHRlbXB0IHRvIGFsbG9jYXRlIG1lbW9yeSBtYW5hZ2VyJ3MgY29udHJvbCBibG9jayAqLw0KLSAgbWVtID0gKG15X21lbV9wdHIpIGpwZWdfZ2V0X3NtYWxsKGNpbmZvLCBTSVpFT0YobXlfbWVtb3J5X21ncikpOw0KLQ0KLSAgaWYgKG1lbSA9PSBOVUxMKSB7DQotICAgIGpwZWdfbWVtX3Rlcm0oY2luZm8pOwkvKiBzeXN0ZW0tZGVwZW5kZW50IGNsZWFudXAgKi8NCi0gICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfT1VUX09GX01FTU9SWSwgMCk7DQotICB9DQotDQotICAvKiBPSywgZmlsbCBpbiB0aGUgbWV0aG9kIHBvaW50ZXJzICovDQotICBtZW0tPnB1Yi5hbGxvY19zbWFsbCA9IGFsbG9jX3NtYWxsOw0KLSAgbWVtLT5wdWIuYWxsb2NfbGFyZ2UgPSBhbGxvY19sYXJnZTsNCi0gIG1lbS0+cHViLmFsbG9jX3NhcnJheSA9IGFsbG9jX3NhcnJheTsNCi0gIG1lbS0+cHViLmFsbG9jX2JhcnJheSA9IGFsbG9jX2JhcnJheTsNCi0gIG1lbS0+cHViLnJlcXVlc3RfdmlydF9zYXJyYXkgPSByZXF1ZXN0X3ZpcnRfc2FycmF5Ow0KLSAgbWVtLT5wdWIucmVxdWVzdF92aXJ0X2JhcnJheSA9IHJlcXVlc3RfdmlydF9iYXJyYXk7DQotICBtZW0tPnB1Yi5yZWFsaXplX3ZpcnRfYXJyYXlzID0gcmVhbGl6ZV92aXJ0X2FycmF5czsNCi0gIG1lbS0+cHViLmFjY2Vzc192aXJ0X3NhcnJheSA9IGFjY2Vzc192aXJ0X3NhcnJheTsNCi0gIG1lbS0+cHViLmFjY2Vzc192aXJ0X2JhcnJheSA9IGFjY2Vzc192aXJ0X2JhcnJheTsNCi0gIG1lbS0+cHViLmZyZWVfcG9vbCA9IGZyZWVfcG9vbDsNCi0gIG1lbS0+cHViLnNlbGZfZGVzdHJ1Y3QgPSBzZWxmX2Rlc3RydWN0Ow0KLQ0KLSAgLyogTWFrZSBNQVhfQUxMT0NfQ0hVTksgYWNjZXNzaWJsZSB0byBvdGhlciBtb2R1bGVzICovDQotICBtZW0tPnB1Yi5tYXhfYWxsb2NfY2h1bmsgPSBNQVhfQUxMT0NfQ0hVTks7DQotDQotICAvKiBJbml0aWFsaXplIHdvcmtpbmcgc3RhdGUgKi8NCi0gIG1lbS0+cHViLm1heF9tZW1vcnlfdG9fdXNlID0gbWF4X3RvX3VzZTsNCi0NCi0gIGZvciAocG9vbCA9IEpQT09MX05VTVBPT0xTLTE7IHBvb2wgPj0gSlBPT0xfUEVSTUFORU5UOyBwb29sLS0pIHsNCi0gICAgbWVtLT5zbWFsbF9saXN0W3Bvb2xdID0gTlVMTDsNCi0gICAgbWVtLT5sYXJnZV9saXN0W3Bvb2xdID0gTlVMTDsNCi0gIH0NCi0gIG1lbS0+dmlydF9zYXJyYXlfbGlzdCA9IE5VTEw7DQotICBtZW0tPnZpcnRfYmFycmF5X2xpc3QgPSBOVUxMOw0KLQ0KLSAgbWVtLT50b3RhbF9zcGFjZV9hbGxvY2F0ZWQgPSBTSVpFT0YobXlfbWVtb3J5X21ncik7DQotDQotICAvKiBEZWNsYXJlIG91cnNlbHZlcyBvcGVuIGZvciBidXNpbmVzcyAqLw0KLSAgY2luZm8tPm1lbSA9ICYgbWVtLT5wdWI7DQotDQotICAvKiBDaGVjayBmb3IgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgSlBFR01FTTsgaWYgZm91bmQsIG92ZXJyaWRlIHRoZQ0KLSAgICogZGVmYXVsdCBtYXhfbWVtb3J5IHNldHRpbmcgZnJvbSBqcGVnX21lbV9pbml0LiAgTm90ZSB0aGF0IHRoZQ0KLSAgICogc3Vycm91bmRpbmcgYXBwbGljYXRpb24gbWF5IGFnYWluIG92ZXJyaWRlIHRoaXMgdmFsdWUuDQotICAgKiBJZiB5b3VyIHN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgZ2V0ZW52KCksIGRlZmluZSBOT19HRVRFTlYgdG8gZGlzYWJsZQ0KLSAgICogdGhpcyBmZWF0dXJlLg0KLSAgICovDQotI2lmbmRlZiBOT19HRVRFTlYNCi0gIHsgY2hhciAqIG1lbWVudjsNCi0NCi0gICAgaWYgKChtZW1lbnYgPSBnZXRlbnYoIkpQRUdNRU0iKSkgIT0gTlVMTCkgew0KLSAgICAgIGNoYXIgY2ggPSAneCc7DQotDQotICAgICAgaWYgKHNzY2FuZihtZW1lbnYsICIlbGQlYyIsICZtYXhfdG9fdXNlLCAmY2gpID4gMCkgew0KLQlpZiAoY2ggPT0gJ20nIHx8IGNoID09ICdNJykNCi0JICBtYXhfdG9fdXNlICo9IDEwMDBMOw0KLQltZW0tPnB1Yi5tYXhfbWVtb3J5X3RvX3VzZSA9IG1heF90b191c2UgKiAxMDAwTDsNCi0gICAgICB9DQotICAgIH0NCi0gIH0NCi0jZW5kaWYNCi0NCi19DQotDQotI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fDQorI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykKKy8qCisgKiBqbWVtbWdyLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgSlBFRyBzeXN0ZW0taW5kZXBlbmRlbnQgbWVtb3J5IG1hbmFnZW1lbnQKKyAqIHJvdXRpbmVzLiAgVGhpcyBjb2RlIGlzIHVzYWJsZSBhY3Jvc3MgYSB3aWRlIHZhcmlldHkgb2YgbWFjaGluZXM7IG1vc3QKKyAqIG9mIHRoZSBzeXN0ZW0gZGVwZW5kZW5jaWVzIGhhdmUgYmVlbiBpc29sYXRlZCBpbiBhIHNlcGFyYXRlIGZpbGUuCisgKiBUaGUgbWFqb3IgZnVuY3Rpb25zIHByb3ZpZGVkIGhlcmUgYXJlOgorICogICAqIHBvb2wtYmFzZWQgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBvZiBtZW1vcnk7CisgKiAgICogcG9saWN5IGRlY2lzaW9ucyBhYm91dCBob3cgdG8gZGl2aWRlIGF2YWlsYWJsZSBtZW1vcnkgYW1vbmcgdGhlCisgKiAgICAgdmlydHVhbCBhcnJheXM7CisgKiAgICogY29udHJvbCBsb2dpYyBmb3Igc3dhcHBpbmcgdmlydHVhbCBhcnJheXMgYmV0d2VlbiBtYWluIG1lbW9yeSBhbmQKKyAqICAgICBiYWNraW5nIHN0b3JhZ2UuCisgKiBUaGUgc2VwYXJhdGUgc3lzdGVtLWRlcGVuZGVudCBmaWxlIHByb3ZpZGVzIHRoZSBhY3R1YWwgYmFja2luZy1zdG9yYWdlCisgKiBhY2Nlc3MgY29kZSwgYW5kIGl0IGNvbnRhaW5zIHRoZSBwb2xpY3kgZGVjaXNpb24gYWJvdXQgaG93IG11Y2ggdG90YWwKKyAqIG1haW4gbWVtb3J5IHRvIHVzZS4KKyAqIFRoaXMgZmlsZSBpcyBzeXN0ZW0tZGVwZW5kZW50IGluIHRoZSBzZW5zZSB0aGF0IHNvbWUgb2YgaXRzIGZ1bmN0aW9ucworICogYXJlIHVubmVjZXNzYXJ5IGluIHNvbWUgc3lzdGVtcy4gIEZvciBleGFtcGxlLCBpZiB0aGVyZSBpcyBlbm91Z2ggdmlydHVhbAorICogbWVtb3J5IHNvIHRoYXQgYmFja2luZyBzdG9yYWdlIHdpbGwgbmV2ZXIgYmUgdXNlZCwgbXVjaCBvZiB0aGUgdmlydHVhbAorICogYXJyYXkgY29udHJvbCBsb2dpYyBjb3VsZCBiZSByZW1vdmVkLiAgKE9mIGNvdXJzZSwgaWYgeW91IGhhdmUgdGhhdCBtdWNoCisgKiBtZW1vcnkgdGhlbiB5b3Ugc2hvdWxkbid0IGNhcmUgYWJvdXQgYSBsaXR0bGUgYml0IG9mIHVudXNlZCBjb2RlLi4uKQorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNkZWZpbmUgQU1fTUVNT1JZX01BTkFHRVIJLyogd2UgZGVmaW5lIGp2aXJ0X1hhcnJheV9jb250cm9sIHN0cnVjdHMgKi8KKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqbWVtc3lzLmgiCQkvKiBpbXBvcnQgdGhlIHN5c3RlbS1kZXBlbmRlbnQgZGVjbGFyYXRpb25zICovCisKKyNkZWZpbmUgTk9fR0VURU5WCS8qIFhZUTogMjAwNy01LTIyIERvbid0IHVzZSBpdCAqLworCisjaWZuZGVmIE5PX0dFVEVOVgorI2lmbmRlZiBIQVZFX1NURExJQl9ICQkvKiA8c3RkbGliLmg+IHNob3VsZCBkZWNsYXJlIGdldGVudigpICovCitleHRlcm4gY2hhciAqIGdldGVudiBKUFAoKGNvbnN0IGNoYXIgKiBuYW1lKSk7CisjZW5kaWYKKyNlbmRpZgorCisKKy8qCisgKiBTb21lIGltcG9ydGFudCBub3RlczoKKyAqICAgVGhlIGFsbG9jYXRpb24gcm91dGluZXMgcHJvdmlkZWQgaGVyZSBtdXN0IG5ldmVyIHJldHVybiBOVUxMLgorICogICBUaGV5IHNob3VsZCBleGl0IHRvIGVycm9yX2V4aXQgaWYgdW5zdWNjZXNzZnVsLgorICoKKyAqICAgSXQncyBub3QgYSBnb29kIGlkZWEgdG8gdHJ5IHRvIG1lcmdlIHRoZSBzYXJyYXkgYW5kIGJhcnJheSByb3V0aW5lcywKKyAqICAgZXZlbiB0aG91Z2ggdGhleSBhcmUgdGV4dHVhbGx5IGFsbW9zdCB0aGUgc2FtZSwgYmVjYXVzZSBzYW1wbGVzIGFyZQorICogICB1c3VhbGx5IHN0b3JlZCBhcyBieXRlcyB3aGlsZSBjb2VmZmljaWVudHMgYXJlIHNob3J0cyBvciBpbnRzLiAgVGh1cywKKyAqICAgaW4gbWFjaGluZXMgd2hlcmUgYnl0ZSBwb2ludGVycyBoYXZlIGEgZGlmZmVyZW50IHJlcHJlc2VudGF0aW9uIGZyb20KKyAqICAgd29yZCBwb2ludGVycywgdGhlIHJlc3VsdGluZyBtYWNoaW5lIGNvZGUgY291bGQgbm90IGJlIHRoZSBzYW1lLgorICovCisKKworLyoKKyAqIE1hbnkgbWFjaGluZXMgcmVxdWlyZSBzdG9yYWdlIGFsaWdubWVudDogbG9uZ3MgbXVzdCBzdGFydCBvbiA0LWJ5dGUKKyAqIGJvdW5kYXJpZXMsIGRvdWJsZXMgb24gOC1ieXRlIGJvdW5kYXJpZXMsIGV0Yy4gIE9uIHN1Y2ggbWFjaGluZXMsIG1hbGxvYygpCisgKiBhbHdheXMgcmV0dXJucyBwb2ludGVycyB0aGF0IGFyZSBtdWx0aXBsZXMgb2YgdGhlIHdvcnN0LWNhc2UgYWxpZ25tZW50CisgKiByZXF1aXJlbWVudCwgYW5kIHdlIGhhZCBiZXR0ZXIgZG8gc28gdG9vLgorICogVGhlcmUgaXNuJ3QgYW55IHJlYWxseSBwb3J0YWJsZSB3YXkgdG8gZGV0ZXJtaW5lIHRoZSB3b3JzdC1jYXNlIGFsaWdubWVudAorICogcmVxdWlyZW1lbnQuICBUaGlzIG1vZHVsZSBhc3N1bWVzIHRoYXQgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudCBpcworICogbXVsdGlwbGVzIG9mIHNpemVvZihBTElHTl9UWVBFKS4KKyAqIEJ5IGRlZmF1bHQsIHdlIGRlZmluZSBBTElHTl9UWVBFIGFzIGRvdWJsZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IG9uIHNvbWUKKyAqIHdvcmtzdGF0aW9ucyAod2hlcmUgZG91YmxlcyByZWFsbHkgZG8gbmVlZCA4LWJ5dGUgYWxpZ25tZW50KSBhbmQgd2lsbCB3b3JrCisgKiBmaW5lIG9uIG5lYXJseSBldmVyeXRoaW5nLiAgSWYgeW91ciBtYWNoaW5lIGhhcyBsZXNzZXIgYWxpZ25tZW50IG5lZWRzLAorICogeW91IGNhbiBzYXZlIGEgZmV3IGJ5dGVzIGJ5IG1ha2luZyBBTElHTl9UWVBFIHNtYWxsZXIuCisgKiBUaGUgb25seSBwbGFjZSBJIGtub3cgb2Ygd2hlcmUgdGhpcyB3aWxsIE5PVCB3b3JrIGlzIGNlcnRhaW4gTWFjaW50b3NoCisgKiA2ODB4MCBjb21waWxlcnMgdGhhdCBkZWZpbmUgZG91YmxlIGFzIGEgMTAtYnl0ZSBJRUVFIGV4dGVuZGVkIGZsb2F0LgorICogRG9pbmcgMTAtYnl0ZSBhbGlnbm1lbnQgaXMgY291bnRlcnByb2R1Y3RpdmUgYmVjYXVzZSBsb25nd29yZHMgd29uJ3QgYmUKKyAqIGFsaWduZWQgd2VsbC4gIFB1dCAiI2RlZmluZSBBTElHTl9UWVBFIGxvbmciIGluIGpjb25maWcuaCBpZiB5b3UgaGF2ZQorICogc3VjaCBhIGNvbXBpbGVyLgorICovCisKKyNpZm5kZWYgQUxJR05fVFlQRQkJLyogc28gY2FuIG92ZXJyaWRlIGZyb20gamNvbmZpZy5oICovCisjZGVmaW5lIEFMSUdOX1RZUEUgIGRvdWJsZQorI2VuZGlmCisKKworLyoKKyAqIFdlIGFsbG9jYXRlIG9iamVjdHMgZnJvbSAicG9vbHMiLCB3aGVyZSBlYWNoIHBvb2wgaXMgZ290dGVuIHdpdGggYSBzaW5nbGUKKyAqIHJlcXVlc3QgdG8ganBlZ19nZXRfc21hbGwoKSBvciBqcGVnX2dldF9sYXJnZSgpLiAgVGhlcmUgaXMgbm8gcGVyLW9iamVjdAorICogb3ZlcmhlYWQgd2l0aGluIGEgcG9vbCwgZXhjZXB0IGZvciBhbGlnbm1lbnQgcGFkZGluZy4gIEVhY2ggcG9vbCBoYXMgYQorICogaGVhZGVyIHdpdGggYSBsaW5rIHRvIHRoZSBuZXh0IHBvb2wgb2YgdGhlIHNhbWUgY2xhc3MuCisgKiBTbWFsbCBhbmQgbGFyZ2UgcG9vbCBoZWFkZXJzIGFyZSBpZGVudGljYWwgZXhjZXB0IHRoYXQgdGhlIGxhdHRlcidzCisgKiBsaW5rIHBvaW50ZXIgbXVzdCBiZSBGQVIgb24gODB4ODYgbWFjaGluZXMuCisgKiBOb3RpY2UgdGhhdCB0aGUgInJlYWwiIGhlYWRlciBmaWVsZHMgYXJlIHVuaW9uJ2VkIHdpdGggYSBkdW1teSBBTElHTl9UWVBFCisgKiBmaWVsZC4gIFRoaXMgZm9yY2VzIHRoZSBjb21waWxlciB0byBtYWtlIFNJWkVPRihzbWFsbF9wb29sX2hkcikgYSBtdWx0aXBsZQorICogb2YgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudCBvZiBBTElHTl9UWVBFLgorICovCisKK3R5cGVkZWYgdW5pb24gc21hbGxfcG9vbF9zdHJ1Y3QgKiBzbWFsbF9wb29sX3B0cjsKKwordHlwZWRlZiB1bmlvbiBzbWFsbF9wb29sX3N0cnVjdCB7CisgIHN0cnVjdCB7CisgICAgc21hbGxfcG9vbF9wdHIgbmV4dDsJLyogbmV4dCBpbiBsaXN0IG9mIHBvb2xzICovCisgICAgc2l6ZV90IGJ5dGVzX3VzZWQ7CQkvKiBob3cgbWFueSBieXRlcyBhbHJlYWR5IHVzZWQgd2l0aGluIHBvb2wgKi8KKyAgICBzaXplX3QgYnl0ZXNfbGVmdDsJCS8qIGJ5dGVzIHN0aWxsIGF2YWlsYWJsZSBpbiB0aGlzIHBvb2wgKi8KKyAgfSBoZHI7CisgIEFMSUdOX1RZUEUgZHVtbXk7CQkvKiBpbmNsdWRlZCBpbiB1bmlvbiB0byBlbnN1cmUgYWxpZ25tZW50ICovCit9IHNtYWxsX3Bvb2xfaGRyOworCit0eXBlZGVmIHVuaW9uIGxhcmdlX3Bvb2xfc3RydWN0IEZBUiAqIGxhcmdlX3Bvb2xfcHRyOworCit0eXBlZGVmIHVuaW9uIGxhcmdlX3Bvb2xfc3RydWN0IHsKKyAgc3RydWN0IHsKKyAgICBsYXJnZV9wb29sX3B0ciBuZXh0OwkvKiBuZXh0IGluIGxpc3Qgb2YgcG9vbHMgKi8KKyAgICBzaXplX3QgYnl0ZXNfdXNlZDsJCS8qIGhvdyBtYW55IGJ5dGVzIGFscmVhZHkgdXNlZCB3aXRoaW4gcG9vbCAqLworICAgIHNpemVfdCBieXRlc19sZWZ0OwkJLyogYnl0ZXMgc3RpbGwgYXZhaWxhYmxlIGluIHRoaXMgcG9vbCAqLworICB9IGhkcjsKKyAgQUxJR05fVFlQRSBkdW1teTsJCS8qIGluY2x1ZGVkIGluIHVuaW9uIHRvIGVuc3VyZSBhbGlnbm1lbnQgKi8KK30gbGFyZ2VfcG9vbF9oZHI7CisKKworLyoKKyAqIEhlcmUgaXMgdGhlIGZ1bGwgZGVmaW5pdGlvbiBvZiBhIG1lbW9yeSBtYW5hZ2VyIG9iamVjdC4KKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX21lbW9yeV9tZ3IgcHViOwkvKiBwdWJsaWMgZmllbGRzICovCisKKyAgLyogRWFjaCBwb29sIGlkZW50aWZpZXIgKGxpZmV0aW1lIGNsYXNzKSBuYW1lcyBhIGxpbmtlZCBsaXN0IG9mIHBvb2xzLiAqLworICBzbWFsbF9wb29sX3B0ciBzbWFsbF9saXN0W0pQT09MX05VTVBPT0xTXTsKKyAgbGFyZ2VfcG9vbF9wdHIgbGFyZ2VfbGlzdFtKUE9PTF9OVU1QT09MU107CisKKyAgLyogU2luY2Ugd2Ugb25seSBoYXZlIG9uZSBsaWZldGltZSBjbGFzcyBvZiB2aXJ0dWFsIGFycmF5cywgb25seSBvbmUKKyAgICogbGlua2VkIGxpc3QgaXMgbmVjZXNzYXJ5IChmb3IgZWFjaCBkYXRhdHlwZSkuICBOb3RlIHRoYXQgdGhlIHZpcnR1YWwKKyAgICogYXJyYXkgY29udHJvbCBibG9ja3MgYmVpbmcgbGlua2VkIHRvZ2V0aGVyIGFyZSBhY3R1YWxseSBzdG9yZWQgc29tZXdoZXJlCisgICAqIGluIHRoZSBzbWFsbC1wb29sIGxpc3QuCisgICAqLworICBqdmlydF9zYXJyYXlfcHRyIHZpcnRfc2FycmF5X2xpc3Q7CisgIGp2aXJ0X2JhcnJheV9wdHIgdmlydF9iYXJyYXlfbGlzdDsKKworICAvKiBUaGlzIGNvdW50cyB0b3RhbCBzcGFjZSBvYnRhaW5lZCBmcm9tIGpwZWdfZ2V0X3NtYWxsL2xhcmdlICovCisgIGxvbmcgdG90YWxfc3BhY2VfYWxsb2NhdGVkOworCisgIC8qIGFsbG9jX3NhcnJheSBhbmQgYWxsb2NfYmFycmF5IHNldCB0aGlzIHZhbHVlIGZvciB1c2UgYnkgdmlydHVhbAorICAgKiBhcnJheSByb3V0aW5lcy4KKyAgICovCisgIEpESU1FTlNJT04gbGFzdF9yb3dzcGVyY2h1bms7CS8qIGZyb20gbW9zdCByZWNlbnQgYWxsb2Nfc2FycmF5L2JhcnJheSAqLworfSBteV9tZW1vcnlfbWdyOworCit0eXBlZGVmIG15X21lbW9yeV9tZ3IgKiBteV9tZW1fcHRyOworCisKKy8qCisgKiBUaGUgY29udHJvbCBibG9ja3MgZm9yIHZpcnR1YWwgYXJyYXlzLgorICogTm90ZSB0aGF0IHRoZXNlIGJsb2NrcyBhcmUgYWxsb2NhdGVkIGluIHRoZSAic21hbGwiIHBvb2wgYXJlYS4KKyAqIFN5c3RlbS1kZXBlbmRlbnQgaW5mbyBmb3IgdGhlIGFzc29jaWF0ZWQgYmFja2luZyBzdG9yZSAoaWYgYW55KSBpcyBoaWRkZW4KKyAqIGluc2lkZSB0aGUgYmFja2luZ19zdG9yZV9pbmZvIHN0cnVjdC4KKyAqLworCitzdHJ1Y3QganZpcnRfc2FycmF5X2NvbnRyb2wgeworICBKU0FNUEFSUkFZIG1lbV9idWZmZXI7CS8qID0+IHRoZSBpbi1tZW1vcnkgYnVmZmVyICovCisgIEpESU1FTlNJT04gcm93c19pbl9hcnJheTsJLyogdG90YWwgdmlydHVhbCBhcnJheSBoZWlnaHQgKi8KKyAgSkRJTUVOU0lPTiBzYW1wbGVzcGVycm93OwkvKiB3aWR0aCBvZiBhcnJheSAoYW5kIG9mIG1lbW9yeSBidWZmZXIpICovCisgIEpESU1FTlNJT04gbWF4YWNjZXNzOwkJLyogbWF4IHJvd3MgYWNjZXNzZWQgYnkgYWNjZXNzX3ZpcnRfc2FycmF5ICovCisgIEpESU1FTlNJT04gcm93c19pbl9tZW07CS8qIGhlaWdodCBvZiBtZW1vcnkgYnVmZmVyICovCisgIEpESU1FTlNJT04gcm93c3BlcmNodW5rOwkvKiBhbGxvY2F0aW9uIGNodW5rIHNpemUgaW4gbWVtX2J1ZmZlciAqLworICBKRElNRU5TSU9OIGN1cl9zdGFydF9yb3c7CS8qIGZpcnN0IGxvZ2ljYWwgcm93ICMgaW4gdGhlIGJ1ZmZlciAqLworICBKRElNRU5TSU9OIGZpcnN0X3VuZGVmX3JvdzsJLyogcm93ICMgb2YgZmlyc3QgdW5pbml0aWFsaXplZCByb3cgKi8KKyAgYm9vbGVhbiBwcmVfemVybzsJCS8qIHByZS16ZXJvIG1vZGUgcmVxdWVzdGVkPyAqLworICBib29sZWFuIGRpcnR5OwkJLyogZG8gY3VycmVudCBidWZmZXIgY29udGVudHMgbmVlZCB3cml0dGVuPyAqLworICBib29sZWFuIGJfc19vcGVuOwkJLyogaXMgYmFja2luZy1zdG9yZSBkYXRhIHZhbGlkPyAqLworICBqdmlydF9zYXJyYXlfcHRyIG5leHQ7CS8qIGxpbmsgdG8gbmV4dCB2aXJ0dWFsIHNhcnJheSBjb250cm9sIGJsb2NrICovCisgIGJhY2tpbmdfc3RvcmVfaW5mbyBiX3NfaW5mbzsJLyogU3lzdGVtLWRlcGVuZGVudCBjb250cm9sIGluZm8gKi8KK307CisKK3N0cnVjdCBqdmlydF9iYXJyYXlfY29udHJvbCB7CisgIEpCTE9DS0FSUkFZIG1lbV9idWZmZXI7CS8qID0+IHRoZSBpbi1tZW1vcnkgYnVmZmVyICovCisgIEpESU1FTlNJT04gcm93c19pbl9hcnJheTsJLyogdG90YWwgdmlydHVhbCBhcnJheSBoZWlnaHQgKi8KKyAgSkRJTUVOU0lPTiBibG9ja3NwZXJyb3c7CS8qIHdpZHRoIG9mIGFycmF5IChhbmQgb2YgbWVtb3J5IGJ1ZmZlcikgKi8KKyAgSkRJTUVOU0lPTiBtYXhhY2Nlc3M7CQkvKiBtYXggcm93cyBhY2Nlc3NlZCBieSBhY2Nlc3NfdmlydF9iYXJyYXkgKi8KKyAgSkRJTUVOU0lPTiByb3dzX2luX21lbTsJLyogaGVpZ2h0IG9mIG1lbW9yeSBidWZmZXIgKi8KKyAgSkRJTUVOU0lPTiByb3dzcGVyY2h1bms7CS8qIGFsbG9jYXRpb24gY2h1bmsgc2l6ZSBpbiBtZW1fYnVmZmVyICovCisgIEpESU1FTlNJT04gY3VyX3N0YXJ0X3JvdzsJLyogZmlyc3QgbG9naWNhbCByb3cgIyBpbiB0aGUgYnVmZmVyICovCisgIEpESU1FTlNJT04gZmlyc3RfdW5kZWZfcm93OwkvKiByb3cgIyBvZiBmaXJzdCB1bmluaXRpYWxpemVkIHJvdyAqLworICBib29sZWFuIHByZV96ZXJvOwkJLyogcHJlLXplcm8gbW9kZSByZXF1ZXN0ZWQ/ICovCisgIGJvb2xlYW4gZGlydHk7CQkvKiBkbyBjdXJyZW50IGJ1ZmZlciBjb250ZW50cyBuZWVkIHdyaXR0ZW4/ICovCisgIGJvb2xlYW4gYl9zX29wZW47CQkvKiBpcyBiYWNraW5nLXN0b3JlIGRhdGEgdmFsaWQ/ICovCisgIGp2aXJ0X2JhcnJheV9wdHIgbmV4dDsJLyogbGluayB0byBuZXh0IHZpcnR1YWwgYmFycmF5IGNvbnRyb2wgYmxvY2sgKi8KKyAgYmFja2luZ19zdG9yZV9pbmZvIGJfc19pbmZvOwkvKiBTeXN0ZW0tZGVwZW5kZW50IGNvbnRyb2wgaW5mbyAqLworfTsKKworCisjaWZkZWYgTUVNX1NUQVRTCQkvKiBvcHRpb25hbCBleHRyYSBzdHVmZiBmb3Igc3RhdGlzdGljcyAqLworCitMT0NBTCh2b2lkKQorcHJpbnRfbWVtX3N0YXRzIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkKQoreworICBteV9tZW1fcHRyIG1lbSA9IChteV9tZW1fcHRyKSBjaW5mby0+bWVtOworICBzbWFsbF9wb29sX3B0ciBzaGRyX3B0cjsKKyAgbGFyZ2VfcG9vbF9wdHIgbGhkcl9wdHI7CisKKyAgLyogU2luY2UgdGhpcyBpcyBvbmx5IGEgZGVidWdnaW5nIHN0dWIsIHdlIGNhbiBjaGVhdCBhIGxpdHRsZSBieSB1c2luZworICAgKiBmcHJpbnRmIGRpcmVjdGx5IHJhdGhlciB0aGFuIGdvaW5nIHRocm91Z2ggdGhlIHRyYWNlIG1lc3NhZ2UgY29kZS4KKyAgICogVGhpcyBpcyBoZWxwZnVsIGJlY2F1c2UgbWVzc2FnZSBwYXJtIGFycmF5IGNhbid0IGhhbmRsZSBsb25ncy4KKyAgICovCisgIEZYU1lTX2ZwcmludGYoc3RkZXJyLCAiRnJlZWluZyBwb29sICVkLCB0b3RhbCBzcGFjZSA9ICVsZFxuIiwKKwkgIHBvb2xfaWQsIG1lbS0+dG90YWxfc3BhY2VfYWxsb2NhdGVkKTsKKworICBmb3IgKGxoZHJfcHRyID0gbWVtLT5sYXJnZV9saXN0W3Bvb2xfaWRdOyBsaGRyX3B0ciAhPSBOVUxMOworICAgICAgIGxoZHJfcHRyID0gbGhkcl9wdHItPmhkci5uZXh0KSB7CisgICAgRlhTWVNfZnByaW50ZihzdGRlcnIsICIgIExhcmdlIGNodW5rIHVzZWQgJWxkXG4iLAorCSAgICAobG9uZykgbGhkcl9wdHItPmhkci5ieXRlc191c2VkKTsKKyAgfQorCisgIGZvciAoc2hkcl9wdHIgPSBtZW0tPnNtYWxsX2xpc3RbcG9vbF9pZF07IHNoZHJfcHRyICE9IE5VTEw7CisgICAgICAgc2hkcl9wdHIgPSBzaGRyX3B0ci0+aGRyLm5leHQpIHsKKyAgICBGWFNZU19mcHJpbnRmKHN0ZGVyciwgIiAgU21hbGwgY2h1bmsgdXNlZCAlbGQgZnJlZSAlbGRcbiIsCisJICAgIChsb25nKSBzaGRyX3B0ci0+aGRyLmJ5dGVzX3VzZWQsCisJICAgIChsb25nKSBzaGRyX3B0ci0+aGRyLmJ5dGVzX2xlZnQpOworICB9Cit9CisKKyNlbmRpZiAvKiBNRU1fU1RBVFMgKi8KKworCitMT0NBTCh2b2lkKQorb3V0X29mX21lbW9yeSAoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgd2hpY2gpCisvKiBSZXBvcnQgYW4gb3V0LW9mLW1lbW9yeSBlcnJvciBhbmQgc3RvcCBleGVjdXRpb24gKi8KKy8qIElmIHdlIGNvbXBpbGVkIE1FTV9TVEFUUyBzdXBwb3J0LCByZXBvcnQgYWxsb2MgcmVxdWVzdHMgYmVmb3JlIGR5aW5nICovCit7CisjaWZkZWYgTUVNX1NUQVRTCisgIGNpbmZvLT5lcnItPnRyYWNlX2xldmVsID0gMjsJLyogZm9yY2Ugc2VsZl9kZXN0cnVjdCB0byByZXBvcnQgc3RhdHMgKi8KKyNlbmRpZgorICBFUlJFWElUMShjaW5mbywgSkVSUl9PVVRfT0ZfTUVNT1JZLCB3aGljaCk7Cit9CisKKworLyoKKyAqIEFsbG9jYXRpb24gb2YgInNtYWxsIiBvYmplY3RzLgorICoKKyAqIEZvciB0aGVzZSwgd2UgdXNlIHBvb2xlZCBzdG9yYWdlLiAgV2hlbiBhIG5ldyBwb29sIG11c3QgYmUgY3JlYXRlZCwKKyAqIHdlIHRyeSB0byBnZXQgZW5vdWdoIHNwYWNlIGZvciB0aGUgY3VycmVudCByZXF1ZXN0IHBsdXMgYSAic2xvcCIgZmFjdG9yLAorICogd2hlcmUgdGhlIHNsb3Agd2lsbCBiZSB0aGUgYW1vdW50IG9mIGxlZnRvdmVyIHNwYWNlIGluIHRoZSBuZXcgcG9vbC4KKyAqIFRoZSBzcGVlZCB2cy4gc3BhY2UgdHJhZGVvZmYgaXMgbGFyZ2VseSBkZXRlcm1pbmVkIGJ5IHRoZSBzbG9wIHZhbHVlcy4KKyAqIEEgZGlmZmVyZW50IHNsb3AgdmFsdWUgaXMgcHJvdmlkZWQgZm9yIGVhY2ggcG9vbCBjbGFzcyAobGlmZXRpbWUpLAorICogYW5kIHdlIGFsc28gZGlzdGluZ3Vpc2ggdGhlIGZpcnN0IHBvb2wgb2YgYSBjbGFzcyBmcm9tIGxhdGVyIG9uZXMuCisgKiBOT1RFOiB0aGUgdmFsdWVzIGdpdmVuIHdvcmsgZmFpcmx5IHdlbGwgb24gYm90aCAxNi0gYW5kIDMyLWJpdC1pbnQKKyAqIG1hY2hpbmVzLCBidXQgbWF5IGJlIHRvbyBzbWFsbCBpZiBsb25ncyBhcmUgNjQgYml0cyBvciBtb3JlLgorICovCisKK3N0YXRpYyBjb25zdCBzaXplX3QgZmlyc3RfcG9vbF9zbG9wW0pQT09MX05VTVBPT0xTXSA9IAoreworCTE2MDAsCQkJLyogZmlyc3QgUEVSTUFORU5UIHBvb2wgKi8KKwkxNjAwMAkJCS8qIGZpcnN0IElNQUdFIHBvb2wgKi8KK307CisKK3N0YXRpYyBjb25zdCBzaXplX3QgZXh0cmFfcG9vbF9zbG9wW0pQT09MX05VTVBPT0xTXSA9IAoreworCTAsCQkJLyogYWRkaXRpb25hbCBQRVJNQU5FTlQgcG9vbHMgKi8KKwk1MDAwCQkJLyogYWRkaXRpb25hbCBJTUFHRSBwb29scyAqLworfTsKKworI2RlZmluZSBNSU5fU0xPUCAgNTAJCS8qIGdyZWF0ZXIgdGhhbiAwIHRvIGF2b2lkIGZ1dGlsZSBsb29waW5nICovCisKKworTUVUSE9EREVGKHZvaWQgKikKK2FsbG9jX3NtYWxsIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkLCBzaXplX3Qgc2l6ZW9mb2JqZWN0KQorLyogQWxsb2NhdGUgYSAic21hbGwiIG9iamVjdCAqLworeworICBteV9tZW1fcHRyIG1lbSA9IChteV9tZW1fcHRyKSBjaW5mby0+bWVtOworICBzbWFsbF9wb29sX3B0ciBoZHJfcHRyLCBwcmV2X2hkcl9wdHI7CisgIGNoYXIgKiBkYXRhX3B0cjsKKyAgc2l6ZV90IG9kZF9ieXRlcywgbWluX3JlcXVlc3QsIHNsb3A7CisKKyAgLyogQ2hlY2sgZm9yIHVuc2F0aXNmaWFibGUgcmVxdWVzdCAoZG8gbm93IHRvIGVuc3VyZSBubyBvdmVyZmxvdyBiZWxvdykgKi8KKyAgaWYgKHNpemVvZm9iamVjdCA+IChzaXplX3QpIChNQVhfQUxMT0NfQ0hVTkstU0laRU9GKHNtYWxsX3Bvb2xfaGRyKSkpCisgICAgb3V0X29mX21lbW9yeShjaW5mbywgMSk7CS8qIHJlcXVlc3QgZXhjZWVkcyBtYWxsb2MncyBhYmlsaXR5ICovCisKKyAgLyogUm91bmQgdXAgdGhlIHJlcXVlc3RlZCBzaXplIHRvIGEgbXVsdGlwbGUgb2YgU0laRU9GKEFMSUdOX1RZUEUpICovCisgIG9kZF9ieXRlcyA9IHNpemVvZm9iamVjdCAlIFNJWkVPRihBTElHTl9UWVBFKTsKKyAgaWYgKG9kZF9ieXRlcyA+IDApCisgICAgc2l6ZW9mb2JqZWN0ICs9IFNJWkVPRihBTElHTl9UWVBFKSAtIG9kZF9ieXRlczsKKworICAvKiBTZWUgaWYgc3BhY2UgaXMgYXZhaWxhYmxlIGluIGFueSBleGlzdGluZyBwb29sICovCisgIGlmIChwb29sX2lkIDwgMCB8fCBwb29sX2lkID49IEpQT09MX05VTVBPT0xTKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QT09MX0lELCBwb29sX2lkKTsJLyogc2FmZXR5IGNoZWNrICovCisgIHByZXZfaGRyX3B0ciA9IE5VTEw7CisgIGhkcl9wdHIgPSBtZW0tPnNtYWxsX2xpc3RbcG9vbF9pZF07CisgIHdoaWxlIChoZHJfcHRyICE9IE5VTEwpIHsKKyAgICBpZiAoaGRyX3B0ci0+aGRyLmJ5dGVzX2xlZnQgPj0gc2l6ZW9mb2JqZWN0KQorICAgICAgYnJlYWs7CQkJLyogZm91bmQgcG9vbCB3aXRoIGVub3VnaCBzcGFjZSAqLworICAgIHByZXZfaGRyX3B0ciA9IGhkcl9wdHI7CisgICAgaGRyX3B0ciA9IGhkcl9wdHItPmhkci5uZXh0OworICB9CisKKyAgLyogVGltZSB0byBtYWtlIGEgbmV3IHBvb2w/ICovCisgIGlmIChoZHJfcHRyID09IE5VTEwpIHsKKyAgICAvKiBtaW5fcmVxdWVzdCBpcyB3aGF0IHdlIG5lZWQgbm93LCBzbG9wIGlzIHdoYXQgd2lsbCBiZSBsZWZ0b3ZlciAqLworICAgIG1pbl9yZXF1ZXN0ID0gc2l6ZW9mb2JqZWN0ICsgU0laRU9GKHNtYWxsX3Bvb2xfaGRyKTsKKyAgICBpZiAocHJldl9oZHJfcHRyID09IE5VTEwpCS8qIGZpcnN0IHBvb2wgaW4gY2xhc3M/ICovCisgICAgICBzbG9wID0gZmlyc3RfcG9vbF9zbG9wW3Bvb2xfaWRdOworICAgIGVsc2UKKyAgICAgIHNsb3AgPSBleHRyYV9wb29sX3Nsb3BbcG9vbF9pZF07CisgICAgLyogRG9uJ3QgYXNrIGZvciBtb3JlIHRoYW4gTUFYX0FMTE9DX0NIVU5LICovCisgICAgaWYgKHNsb3AgPiAoc2l6ZV90KSAoTUFYX0FMTE9DX0NIVU5LLW1pbl9yZXF1ZXN0KSkKKyAgICAgIHNsb3AgPSAoc2l6ZV90KSAoTUFYX0FMTE9DX0NIVU5LLW1pbl9yZXF1ZXN0KTsKKyAgICAvKiBUcnkgdG8gZ2V0IHNwYWNlLCBpZiBmYWlsIHJlZHVjZSBzbG9wIGFuZCB0cnkgYWdhaW4gKi8KKyAgICBmb3IgKDs7KSB7CisgICAgICBoZHJfcHRyID0gKHNtYWxsX3Bvb2xfcHRyKSBqcGVnX2dldF9zbWFsbChjaW5mbywgbWluX3JlcXVlc3QgKyBzbG9wKTsKKyAgICAgIGlmIChoZHJfcHRyICE9IE5VTEwpCisJYnJlYWs7CisgICAgICBzbG9wIC89IDI7CisgICAgICBpZiAoc2xvcCA8IE1JTl9TTE9QKQkvKiBnaXZlIHVwIHdoZW4gaXQgZ2V0cyByZWFsIHNtYWxsICovCisJb3V0X29mX21lbW9yeShjaW5mbywgMik7IC8qIGpwZWdfZ2V0X3NtYWxsIGZhaWxlZCAqLworICAgIH0KKyAgICBtZW0tPnRvdGFsX3NwYWNlX2FsbG9jYXRlZCArPSBtaW5fcmVxdWVzdCArIHNsb3A7CisgICAgLyogU3VjY2VzcywgaW5pdGlhbGl6ZSB0aGUgbmV3IHBvb2wgaGVhZGVyIGFuZCBhZGQgdG8gZW5kIG9mIGxpc3QgKi8KKyAgICBoZHJfcHRyLT5oZHIubmV4dCA9IE5VTEw7CisgICAgaGRyX3B0ci0+aGRyLmJ5dGVzX3VzZWQgPSAwOworICAgIGhkcl9wdHItPmhkci5ieXRlc19sZWZ0ID0gc2l6ZW9mb2JqZWN0ICsgc2xvcDsKKyAgICBpZiAocHJldl9oZHJfcHRyID09IE5VTEwpCS8qIGZpcnN0IHBvb2wgaW4gY2xhc3M/ICovCisgICAgICBtZW0tPnNtYWxsX2xpc3RbcG9vbF9pZF0gPSBoZHJfcHRyOworICAgIGVsc2UKKyAgICAgIHByZXZfaGRyX3B0ci0+aGRyLm5leHQgPSBoZHJfcHRyOworICB9CisKKyAgLyogT0ssIGFsbG9jYXRlIHRoZSBvYmplY3QgZnJvbSB0aGUgY3VycmVudCBwb29sICovCisgIGRhdGFfcHRyID0gKGNoYXIgKikgKGhkcl9wdHIgKyAxKTsgLyogcG9pbnQgdG8gZmlyc3QgZGF0YSBieXRlIGluIHBvb2wgKi8KKyAgZGF0YV9wdHIgKz0gaGRyX3B0ci0+aGRyLmJ5dGVzX3VzZWQ7IC8qIHBvaW50IHRvIHBsYWNlIGZvciBvYmplY3QgKi8KKyAgaGRyX3B0ci0+aGRyLmJ5dGVzX3VzZWQgKz0gc2l6ZW9mb2JqZWN0OworICBoZHJfcHRyLT5oZHIuYnl0ZXNfbGVmdCAtPSBzaXplb2ZvYmplY3Q7CisKKyAgcmV0dXJuICh2b2lkICopIGRhdGFfcHRyOworfQorCisKKy8qCisgKiBBbGxvY2F0aW9uIG9mICJsYXJnZSIgb2JqZWN0cy4KKyAqCisgKiBUaGUgZXh0ZXJuYWwgc2VtYW50aWNzIG9mIHRoZXNlIGFyZSB0aGUgc2FtZSBhcyAic21hbGwiIG9iamVjdHMsCisgKiBleGNlcHQgdGhhdCBGQVIgcG9pbnRlcnMgYXJlIHVzZWQgb24gODB4ODYuICBIb3dldmVyIHRoZSBwb29sCisgKiBtYW5hZ2VtZW50IGhldXJpc3RpY3MgYXJlIHF1aXRlIGRpZmZlcmVudC4gIFdlIGFzc3VtZSB0aGF0IGVhY2gKKyAqIHJlcXVlc3QgaXMgbGFyZ2UgZW5vdWdoIHRoYXQgaXQgbWF5IGFzIHdlbGwgYmUgcGFzc2VkIGRpcmVjdGx5IHRvCisgKiBqcGVnX2dldF9sYXJnZTsgdGhlIHBvb2wgbWFuYWdlbWVudCBqdXN0IGxpbmtzIGV2ZXJ5dGhpbmcgdG9nZXRoZXIKKyAqIHNvIHRoYXQgd2UgY2FuIGZyZWUgaXQgYWxsIG9uIGRlbWFuZC4KKyAqIE5vdGU6IHRoZSBtYWpvciB1c2Ugb2YgImxhcmdlIiBvYmplY3RzIGlzIGluIEpTQU1QQVJSQVkgYW5kIEpCTE9DS0FSUkFZCisgKiBzdHJ1Y3R1cmVzLiAgVGhlIHJvdXRpbmVzIHRoYXQgY3JlYXRlIHRoZXNlIHN0cnVjdHVyZXMgKHNlZSBiZWxvdykKKyAqIGRlbGliZXJhdGVseSBidW5jaCByb3dzIHRvZ2V0aGVyIHRvIGVuc3VyZSBhIGxhcmdlIHJlcXVlc3Qgc2l6ZS4KKyAqLworCitNRVRIT0RERUYodm9pZCBGQVIgKikKK2FsbG9jX2xhcmdlIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkLCBzaXplX3Qgc2l6ZW9mb2JqZWN0KQorLyogQWxsb2NhdGUgYSAibGFyZ2UiIG9iamVjdCAqLworeworICBteV9tZW1fcHRyIG1lbSA9IChteV9tZW1fcHRyKSBjaW5mby0+bWVtOworICBsYXJnZV9wb29sX3B0ciBoZHJfcHRyOworICBzaXplX3Qgb2RkX2J5dGVzOworCisgIC8qIENoZWNrIGZvciB1bnNhdGlzZmlhYmxlIHJlcXVlc3QgKGRvIG5vdyB0byBlbnN1cmUgbm8gb3ZlcmZsb3cgYmVsb3cpICovCisgIGlmIChzaXplb2ZvYmplY3QgPiAoc2l6ZV90KSAoTUFYX0FMTE9DX0NIVU5LLVNJWkVPRihsYXJnZV9wb29sX2hkcikpKQorICAgIG91dF9vZl9tZW1vcnkoY2luZm8sIDMpOwkvKiByZXF1ZXN0IGV4Y2VlZHMgbWFsbG9jJ3MgYWJpbGl0eSAqLworCisgIC8qIFJvdW5kIHVwIHRoZSByZXF1ZXN0ZWQgc2l6ZSB0byBhIG11bHRpcGxlIG9mIFNJWkVPRihBTElHTl9UWVBFKSAqLworICBvZGRfYnl0ZXMgPSBzaXplb2ZvYmplY3QgJSBTSVpFT0YoQUxJR05fVFlQRSk7CisgIGlmIChvZGRfYnl0ZXMgPiAwKQorICAgIHNpemVvZm9iamVjdCArPSBTSVpFT0YoQUxJR05fVFlQRSkgLSBvZGRfYnl0ZXM7CisKKyAgLyogQWx3YXlzIG1ha2UgYSBuZXcgcG9vbCAqLworICBpZiAocG9vbF9pZCA8IDAgfHwgcG9vbF9pZCA+PSBKUE9PTF9OVU1QT09MUykKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUE9PTF9JRCwgcG9vbF9pZCk7CS8qIHNhZmV0eSBjaGVjayAqLworCisgIGhkcl9wdHIgPSAobGFyZ2VfcG9vbF9wdHIpIGpwZWdfZ2V0X2xhcmdlKGNpbmZvLCBzaXplb2ZvYmplY3QgKworCQkJCQkgICAgU0laRU9GKGxhcmdlX3Bvb2xfaGRyKSk7CisgIGlmIChoZHJfcHRyID09IE5VTEwpCisgICAgb3V0X29mX21lbW9yeShjaW5mbywgNCk7CS8qIGpwZWdfZ2V0X2xhcmdlIGZhaWxlZCAqLworICBtZW0tPnRvdGFsX3NwYWNlX2FsbG9jYXRlZCArPSBzaXplb2ZvYmplY3QgKyBTSVpFT0YobGFyZ2VfcG9vbF9oZHIpOworCisgIC8qIFN1Y2Nlc3MsIGluaXRpYWxpemUgdGhlIG5ldyBwb29sIGhlYWRlciBhbmQgYWRkIHRvIGxpc3QgKi8KKyAgaGRyX3B0ci0+aGRyLm5leHQgPSBtZW0tPmxhcmdlX2xpc3RbcG9vbF9pZF07CisgIC8qIFdlIG1haW50YWluIHNwYWNlIGNvdW50cyBpbiBlYWNoIHBvb2wgaGVhZGVyIGZvciBzdGF0aXN0aWNhbCBwdXJwb3NlcywKKyAgICogZXZlbiB0aG91Z2ggdGhleSBhcmUgbm90IG5lZWRlZCBmb3IgYWxsb2NhdGlvbi4KKyAgICovCisgIGhkcl9wdHItPmhkci5ieXRlc191c2VkID0gc2l6ZW9mb2JqZWN0OworICBoZHJfcHRyLT5oZHIuYnl0ZXNfbGVmdCA9IDA7CisgIG1lbS0+bGFyZ2VfbGlzdFtwb29sX2lkXSA9IGhkcl9wdHI7CisKKyAgcmV0dXJuICh2b2lkIEZBUiAqKSAoaGRyX3B0ciArIDEpOyAvKiBwb2ludCB0byBmaXJzdCBkYXRhIGJ5dGUgaW4gcG9vbCAqLworfQorCisKKy8qCisgKiBDcmVhdGlvbiBvZiAyLUQgc2FtcGxlIGFycmF5cy4KKyAqIFRoZSBwb2ludGVycyBhcmUgaW4gbmVhciBoZWFwLCB0aGUgc2FtcGxlcyB0aGVtc2VsdmVzIGluIEZBUiBoZWFwLgorICoKKyAqIFRvIG1pbmltaXplIGFsbG9jYXRpb24gb3ZlcmhlYWQgYW5kIHRvIGFsbG93IEkvTyBvZiBsYXJnZSBjb250aWd1b3VzCisgKiBibG9ja3MsIHdlIGFsbG9jYXRlIHRoZSBzYW1wbGUgcm93cyBpbiBncm91cHMgb2YgYXMgbWFueSByb3dzIGFzIHBvc3NpYmxlCisgKiB3aXRob3V0IGV4Y2VlZGluZyBNQVhfQUxMT0NfQ0hVTksgdG90YWwgYnl0ZXMgcGVyIGFsbG9jYXRpb24gcmVxdWVzdC4KKyAqIE5COiB0aGUgdmlydHVhbCBhcnJheSBjb250cm9sIHJvdXRpbmVzLCBsYXRlciBpbiB0aGlzIGZpbGUsIGtub3cgYWJvdXQKKyAqIHRoaXMgY2h1bmtpbmcgb2Ygcm93cy4gIFRoZSByb3dzcGVyY2h1bmsgdmFsdWUgaXMgbGVmdCBpbiB0aGUgbWVtIG1hbmFnZXIKKyAqIG9iamVjdCBzbyB0aGF0IGl0IGNhbiBiZSBzYXZlZCBhd2F5IGlmIHRoaXMgc2FycmF5IGlzIHRoZSB3b3Jrc3BhY2UgZm9yCisgKiBhIHZpcnR1YWwgYXJyYXkuCisgKi8KKworTUVUSE9EREVGKEpTQU1QQVJSQVkpCithbGxvY19zYXJyYXkgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQsCisJICAgICAgSkRJTUVOU0lPTiBzYW1wbGVzcGVycm93LCBKRElNRU5TSU9OIG51bXJvd3MpCisvKiBBbGxvY2F0ZSBhIDItRCBzYW1wbGUgYXJyYXkgKi8KK3sKKyAgbXlfbWVtX3B0ciBtZW0gPSAobXlfbWVtX3B0cikgY2luZm8tPm1lbTsKKyAgSlNBTVBBUlJBWSByZXN1bHQ7CisgIEpTQU1QUk9XIHdvcmtzcGFjZTsKKyAgSkRJTUVOU0lPTiByb3dzcGVyY2h1bmssIGN1cnJvdywgaTsKKyAgbG9uZyBsdGVtcDsKKworICAvKiBDYWxjdWxhdGUgbWF4ICMgb2Ygcm93cyBhbGxvd2VkIGluIG9uZSBhbGxvY2F0aW9uIGNodW5rICovCisgIGx0ZW1wID0gKE1BWF9BTExPQ19DSFVOSy1TSVpFT0YobGFyZ2VfcG9vbF9oZHIpKSAvCisJICAoKGxvbmcpIHNhbXBsZXNwZXJyb3cgKiBTSVpFT0YoSlNBTVBMRSkpOworICBpZiAobHRlbXAgPD0gMCkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1dJRFRIX09WRVJGTE9XKTsKKyAgaWYgKGx0ZW1wIDwgKGxvbmcpIG51bXJvd3MpCisgICAgcm93c3BlcmNodW5rID0gKEpESU1FTlNJT04pIGx0ZW1wOworICBlbHNlCisgICAgcm93c3BlcmNodW5rID0gbnVtcm93czsKKyAgbWVtLT5sYXN0X3Jvd3NwZXJjaHVuayA9IHJvd3NwZXJjaHVuazsKKworICAvKiBHZXQgc3BhY2UgZm9yIHJvdyBwb2ludGVycyAoc21hbGwgb2JqZWN0KSAqLworICByZXN1bHQgPSAoSlNBTVBBUlJBWSkgYWxsb2Nfc21hbGwoY2luZm8sIHBvb2xfaWQsCisJCQkJICAgIChzaXplX3QpIChudW1yb3dzICogU0laRU9GKEpTQU1QUk9XKSkpOworCisgIC8qIEdldCB0aGUgcm93cyB0aGVtc2VsdmVzIChsYXJnZSBvYmplY3RzKSAqLworICBjdXJyb3cgPSAwOworICB3aGlsZSAoY3Vycm93IDwgbnVtcm93cykgeworICAgIHJvd3NwZXJjaHVuayA9IE1JTihyb3dzcGVyY2h1bmssIG51bXJvd3MgLSBjdXJyb3cpOworICAgIHdvcmtzcGFjZSA9IChKU0FNUFJPVykgYWxsb2NfbGFyZ2UoY2luZm8sIHBvb2xfaWQsCisJKHNpemVfdCkgKChzaXplX3QpIHJvd3NwZXJjaHVuayAqIChzaXplX3QpIHNhbXBsZXNwZXJyb3cKKwkJICAqIFNJWkVPRihKU0FNUExFKSkpOworICAgIGZvciAoaSA9IHJvd3NwZXJjaHVuazsgaSA+IDA7IGktLSkgeworICAgICAgcmVzdWx0W2N1cnJvdysrXSA9IHdvcmtzcGFjZTsKKyAgICAgIHdvcmtzcGFjZSArPSBzYW1wbGVzcGVycm93OworICAgIH0KKyAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKworLyoKKyAqIENyZWF0aW9uIG9mIDItRCBjb2VmZmljaWVudC1ibG9jayBhcnJheXMuCisgKiBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIHRoZSBjb2RlIGZvciBzYW1wbGUgYXJyYXlzLCBhYm92ZS4KKyAqLworCitNRVRIT0RERUYoSkJMT0NLQVJSQVkpCithbGxvY19iYXJyYXkgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQsCisJICAgICAgSkRJTUVOU0lPTiBibG9ja3NwZXJyb3csIEpESU1FTlNJT04gbnVtcm93cykKKy8qIEFsbG9jYXRlIGEgMi1EIGNvZWZmaWNpZW50LWJsb2NrIGFycmF5ICovCit7CisgIG15X21lbV9wdHIgbWVtID0gKG15X21lbV9wdHIpIGNpbmZvLT5tZW07CisgIEpCTE9DS0FSUkFZIHJlc3VsdDsKKyAgSkJMT0NLUk9XIHdvcmtzcGFjZTsKKyAgSkRJTUVOU0lPTiByb3dzcGVyY2h1bmssIGN1cnJvdywgaTsKKyAgbG9uZyBsdGVtcDsKKworICAvKiBDYWxjdWxhdGUgbWF4ICMgb2Ygcm93cyBhbGxvd2VkIGluIG9uZSBhbGxvY2F0aW9uIGNodW5rICovCisgIGx0ZW1wID0gKE1BWF9BTExPQ19DSFVOSy1TSVpFT0YobGFyZ2VfcG9vbF9oZHIpKSAvCisJICAoKGxvbmcpIGJsb2Nrc3BlcnJvdyAqIFNJWkVPRihKQkxPQ0spKTsKKyAgaWYgKGx0ZW1wIDw9IDApCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9XSURUSF9PVkVSRkxPVyk7CisgIGlmIChsdGVtcCA8IChsb25nKSBudW1yb3dzKQorICAgIHJvd3NwZXJjaHVuayA9IChKRElNRU5TSU9OKSBsdGVtcDsKKyAgZWxzZQorICAgIHJvd3NwZXJjaHVuayA9IG51bXJvd3M7CisgIG1lbS0+bGFzdF9yb3dzcGVyY2h1bmsgPSByb3dzcGVyY2h1bms7CisKKyAgLyogR2V0IHNwYWNlIGZvciByb3cgcG9pbnRlcnMgKHNtYWxsIG9iamVjdCkgKi8KKyAgcmVzdWx0ID0gKEpCTE9DS0FSUkFZKSBhbGxvY19zbWFsbChjaW5mbywgcG9vbF9pZCwKKwkJCQkgICAgIChzaXplX3QpIChudW1yb3dzICogU0laRU9GKEpCTE9DS1JPVykpKTsKKworICAvKiBHZXQgdGhlIHJvd3MgdGhlbXNlbHZlcyAobGFyZ2Ugb2JqZWN0cykgKi8KKyAgY3Vycm93ID0gMDsKKyAgd2hpbGUgKGN1cnJvdyA8IG51bXJvd3MpIHsKKyAgICByb3dzcGVyY2h1bmsgPSBNSU4ocm93c3BlcmNodW5rLCBudW1yb3dzIC0gY3Vycm93KTsKKyAgICB3b3Jrc3BhY2UgPSAoSkJMT0NLUk9XKSBhbGxvY19sYXJnZShjaW5mbywgcG9vbF9pZCwKKwkoc2l6ZV90KSAoKHNpemVfdCkgcm93c3BlcmNodW5rICogKHNpemVfdCkgYmxvY2tzcGVycm93CisJCSAgKiBTSVpFT0YoSkJMT0NLKSkpOworICAgIGZvciAoaSA9IHJvd3NwZXJjaHVuazsgaSA+IDA7IGktLSkgeworICAgICAgcmVzdWx0W2N1cnJvdysrXSA9IHdvcmtzcGFjZTsKKyAgICAgIHdvcmtzcGFjZSArPSBibG9ja3NwZXJyb3c7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCisvKgorICogQWJvdXQgdmlydHVhbCBhcnJheSBtYW5hZ2VtZW50OgorICoKKyAqIFRoZSBhYm92ZSAibm9ybWFsIiBhcnJheSByb3V0aW5lcyBhcmUgb25seSB1c2VkIHRvIGFsbG9jYXRlIHN0cmlwIGJ1ZmZlcnMKKyAqIChhcyB3aWRlIGFzIHRoZSBpbWFnZSwgYnV0IGp1c3QgYSBmZXcgcm93cyBoaWdoKS4gIEZ1bGwtaW1hZ2Utc2l6ZWQgYnVmZmVycworICogYXJlIGhhbmRsZWQgYXMgInZpcnR1YWwiIGFycmF5cy4gIFRoZSBhcnJheSBpcyBzdGlsbCBhY2Nlc3NlZCBhIHN0cmlwIGF0IGEKKyAqIHRpbWUsIGJ1dCB0aGUgbWVtb3J5IG1hbmFnZXIgbXVzdCBzYXZlIHRoZSB3aG9sZSBhcnJheSBmb3IgcmVwZWF0ZWQKKyAqIGFjY2Vzc2VzLiAgVGhlIGludGVuZGVkIGltcGxlbWVudGF0aW9uIGlzIHRoYXQgdGhlcmUgaXMgYSBzdHJpcCBidWZmZXIgaW4KKyAqIG1lbW9yeSAoYXMgaGlnaCBhcyBpcyBwb3NzaWJsZSBnaXZlbiB0aGUgZGVzaXJlZCBtZW1vcnkgbGltaXQpLCBwbHVzIGEKKyAqIGJhY2tpbmcgZmlsZSB0aGF0IGhvbGRzIHRoZSByZXN0IG9mIHRoZSBhcnJheS4KKyAqCisgKiBUaGUgcmVxdWVzdF92aXJ0X2FycmF5IHJvdXRpbmVzIGFyZSB0b2xkIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBpbWFnZSBhbmQKKyAqIHRoZSBtYXhpbXVtIG51bWJlciBvZiByb3dzIHRoYXQgd2lsbCBiZSBhY2Nlc3NlZCBhdCBvbmNlLiAgVGhlIGluLW1lbW9yeQorICogYnVmZmVyIG11c3QgYmUgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgdGhlIG1heGFjY2VzcyB2YWx1ZS4KKyAqCisgKiBUaGUgcmVxdWVzdCByb3V0aW5lcyBjcmVhdGUgY29udHJvbCBibG9ja3MgYnV0IG5vdCB0aGUgaW4tbWVtb3J5IGJ1ZmZlcnMuCisgKiBUaGF0IGlzIHBvc3Rwb25lZCB1bnRpbCByZWFsaXplX3ZpcnRfYXJyYXlzIGlzIGNhbGxlZC4gIEF0IHRoYXQgdGltZSB0aGUKKyAqIHRvdGFsIGFtb3VudCBvZiBzcGFjZSBuZWVkZWQgaXMga25vd24gKGFwcHJveGltYXRlbHksIGFueXdheSksIHNvIGZyZWUKKyAqIG1lbW9yeSBjYW4gYmUgZGl2aWRlZCB1cCBmYWlybHkuCisgKgorICogVGhlIGFjY2Vzc192aXJ0X2FycmF5IHJvdXRpbmVzIGFyZSByZXNwb25zaWJsZSBmb3IgbWFraW5nIGEgc3BlY2lmaWMgc3RyaXAKKyAqIGFyZWEgYWNjZXNzaWJsZSAoYWZ0ZXIgcmVhZGluZyBvciB3cml0aW5nIHRoZSBiYWNraW5nIGZpbGUsIGlmIG5lY2Vzc2FyeSkuCisgKiBOb3RlIHRoYXQgdGhlIGFjY2VzcyByb3V0aW5lcyBhcmUgdG9sZCB3aGV0aGVyIHRoZSBjYWxsZXIgaW50ZW5kcyB0byBtb2RpZnkKKyAqIHRoZSBhY2Nlc3NlZCBzdHJpcDsgZHVyaW5nIGEgcmVhZC1vbmx5IHBhc3MgdGhpcyBzYXZlcyBoYXZpbmcgdG8gcmV3cml0ZQorICogZGF0YSB0byBkaXNrLiAgVGhlIGFjY2VzcyByb3V0aW5lcyBhcmUgYWxzbyByZXNwb25zaWJsZSBmb3IgcHJlLXplcm9pbmcKKyAqIGFueSBuZXdseSBhY2Nlc3NlZCByb3dzLCBpZiBwcmUtemVyb2luZyB3YXMgcmVxdWVzdGVkLgorICoKKyAqIEluIGN1cnJlbnQgdXNhZ2UsIHRoZSBhY2Nlc3MgcmVxdWVzdHMgYXJlIHVzdWFsbHkgZm9yIG5vbm92ZXJsYXBwaW5nCisgKiBzdHJpcHM7IHRoYXQgaXMsIHN1Y2Nlc3NpdmUgYWNjZXNzIHN0YXJ0X3JvdyBudW1iZXJzIGRpZmZlciBieSBleGFjdGx5CisgKiBudW1fcm93cyA9IG1heGFjY2Vzcy4gIFRoaXMgbWVhbnMgd2UgY2FuIGdldCBnb29kIHBlcmZvcm1hbmNlIHdpdGggc2ltcGxlCisgKiBidWZmZXIgZHVtcC9yZWxvYWQgbG9naWMsIGJ5IG1ha2luZyB0aGUgaW4tbWVtb3J5IGJ1ZmZlciBiZSBhIG11bHRpcGxlCisgKiBvZiB0aGUgYWNjZXNzIGhlaWdodDsgdGhlbiB0aGVyZSB3aWxsIG5ldmVyIGJlIGFjY2Vzc2VzIGFjcm9zcyBidWZmZXJsb2FkCisgKiBib3VuZGFyaWVzLiAgVGhlIGNvZGUgd2lsbCBzdGlsbCB3b3JrIHdpdGggb3ZlcmxhcHBpbmcgYWNjZXNzIHJlcXVlc3RzLAorICogYnV0IGl0IGRvZXNuJ3QgaGFuZGxlIGJ1ZmZlcmxvYWQgb3ZlcmxhcHMgdmVyeSBlZmZpY2llbnRseS4KKyAqLworCisKK01FVEhPRERFRihqdmlydF9zYXJyYXlfcHRyKQorcmVxdWVzdF92aXJ0X3NhcnJheSAoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgcG9vbF9pZCwgYm9vbGVhbiBwcmVfemVybywKKwkJICAgICBKRElNRU5TSU9OIHNhbXBsZXNwZXJyb3csIEpESU1FTlNJT04gbnVtcm93cywKKwkJICAgICBKRElNRU5TSU9OIG1heGFjY2VzcykKKy8qIFJlcXVlc3QgYSB2aXJ0dWFsIDItRCBzYW1wbGUgYXJyYXkgKi8KK3sKKyAgbXlfbWVtX3B0ciBtZW0gPSAobXlfbWVtX3B0cikgY2luZm8tPm1lbTsKKyAganZpcnRfc2FycmF5X3B0ciByZXN1bHQ7CisKKyAgLyogT25seSBJTUFHRS1saWZldGltZSB2aXJ0dWFsIGFycmF5cyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZCAqLworICBpZiAocG9vbF9pZCAhPSBKUE9PTF9JTUFHRSkKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUE9PTF9JRCwgcG9vbF9pZCk7CS8qIHNhZmV0eSBjaGVjayAqLworCisgIC8qIGdldCBjb250cm9sIGJsb2NrICovCisgIHJlc3VsdCA9IChqdmlydF9zYXJyYXlfcHRyKSBhbGxvY19zbWFsbChjaW5mbywgcG9vbF9pZCwKKwkJCQkJICBTSVpFT0Yoc3RydWN0IGp2aXJ0X3NhcnJheV9jb250cm9sKSk7CisKKyAgcmVzdWx0LT5tZW1fYnVmZmVyID0gTlVMTDsJLyogbWFya3MgYXJyYXkgbm90IHlldCByZWFsaXplZCAqLworICByZXN1bHQtPnJvd3NfaW5fYXJyYXkgPSBudW1yb3dzOworICByZXN1bHQtPnNhbXBsZXNwZXJyb3cgPSBzYW1wbGVzcGVycm93OworICByZXN1bHQtPm1heGFjY2VzcyA9IG1heGFjY2VzczsKKyAgcmVzdWx0LT5wcmVfemVybyA9IHByZV96ZXJvOworICByZXN1bHQtPmJfc19vcGVuID0gRkFMU0U7CS8qIG5vIGFzc29jaWF0ZWQgYmFja2luZy1zdG9yZSBvYmplY3QgKi8KKyAgcmVzdWx0LT5uZXh0ID0gbWVtLT52aXJ0X3NhcnJheV9saXN0OyAvKiBhZGQgdG8gbGlzdCBvZiB2aXJ0dWFsIGFycmF5cyAqLworICBtZW0tPnZpcnRfc2FycmF5X2xpc3QgPSByZXN1bHQ7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitNRVRIT0RERUYoanZpcnRfYmFycmF5X3B0cikKK3JlcXVlc3RfdmlydF9iYXJyYXkgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQsIGJvb2xlYW4gcHJlX3plcm8sCisJCSAgICAgSkRJTUVOU0lPTiBibG9ja3NwZXJyb3csIEpESU1FTlNJT04gbnVtcm93cywKKwkJICAgICBKRElNRU5TSU9OIG1heGFjY2VzcykKKy8qIFJlcXVlc3QgYSB2aXJ0dWFsIDItRCBjb2VmZmljaWVudC1ibG9jayBhcnJheSAqLworeworICBteV9tZW1fcHRyIG1lbSA9IChteV9tZW1fcHRyKSBjaW5mby0+bWVtOworICBqdmlydF9iYXJyYXlfcHRyIHJlc3VsdDsKKworICAvKiBPbmx5IElNQUdFLWxpZmV0aW1lIHZpcnR1YWwgYXJyYXlzIGFyZSBjdXJyZW50bHkgc3VwcG9ydGVkICovCisgIGlmIChwb29sX2lkICE9IEpQT09MX0lNQUdFKQorICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9QT09MX0lELCBwb29sX2lkKTsJLyogc2FmZXR5IGNoZWNrICovCisKKyAgLyogZ2V0IGNvbnRyb2wgYmxvY2sgKi8KKyAgcmVzdWx0ID0gKGp2aXJ0X2JhcnJheV9wdHIpIGFsbG9jX3NtYWxsKGNpbmZvLCBwb29sX2lkLAorCQkJCQkgIFNJWkVPRihzdHJ1Y3QganZpcnRfYmFycmF5X2NvbnRyb2wpKTsKKworICByZXN1bHQtPm1lbV9idWZmZXIgPSBOVUxMOwkvKiBtYXJrcyBhcnJheSBub3QgeWV0IHJlYWxpemVkICovCisgIHJlc3VsdC0+cm93c19pbl9hcnJheSA9IG51bXJvd3M7CisgIHJlc3VsdC0+YmxvY2tzcGVycm93ID0gYmxvY2tzcGVycm93OworICByZXN1bHQtPm1heGFjY2VzcyA9IG1heGFjY2VzczsKKyAgcmVzdWx0LT5wcmVfemVybyA9IHByZV96ZXJvOworICByZXN1bHQtPmJfc19vcGVuID0gRkFMU0U7CS8qIG5vIGFzc29jaWF0ZWQgYmFja2luZy1zdG9yZSBvYmplY3QgKi8KKyAgcmVzdWx0LT5uZXh0ID0gbWVtLT52aXJ0X2JhcnJheV9saXN0OyAvKiBhZGQgdG8gbGlzdCBvZiB2aXJ0dWFsIGFycmF5cyAqLworICBtZW0tPnZpcnRfYmFycmF5X2xpc3QgPSByZXN1bHQ7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitNRVRIT0RERUYodm9pZCkKK3JlYWxpemVfdmlydF9hcnJheXMgKGpfY29tbW9uX3B0ciBjaW5mbykKKy8qIEFsbG9jYXRlIHRoZSBpbi1tZW1vcnkgYnVmZmVycyBmb3IgYW55IHVucmVhbGl6ZWQgdmlydHVhbCBhcnJheXMgKi8KK3sKKyAgbXlfbWVtX3B0ciBtZW0gPSAobXlfbWVtX3B0cikgY2luZm8tPm1lbTsKKyAgbG9uZyBzcGFjZV9wZXJfbWluaGVpZ2h0LCBtYXhpbXVtX3NwYWNlLCBhdmFpbF9tZW07CisgIGxvbmcgbWluaGVpZ2h0cywgbWF4X21pbmhlaWdodHM7CisgIGp2aXJ0X3NhcnJheV9wdHIgc3B0cjsKKyAganZpcnRfYmFycmF5X3B0ciBicHRyOworCisgIC8qIENvbXB1dGUgdGhlIG1pbmltdW0gc3BhY2UgbmVlZGVkIChtYXhhY2Nlc3Mgcm93cyBpbiBlYWNoIGJ1ZmZlcikKKyAgICogYW5kIHRoZSBtYXhpbXVtIHNwYWNlIG5lZWRlZCAoZnVsbCBpbWFnZSBoZWlnaHQgaW4gZWFjaCBidWZmZXIpLgorICAgKiBUaGVzZSBtYXkgYmUgb2YgdXNlIHRvIHRoZSBzeXN0ZW0tZGVwZW5kZW50IGpwZWdfbWVtX2F2YWlsYWJsZSByb3V0aW5lLgorICAgKi8KKyAgc3BhY2VfcGVyX21pbmhlaWdodCA9IDA7CisgIG1heGltdW1fc3BhY2UgPSAwOworICBmb3IgKHNwdHIgPSBtZW0tPnZpcnRfc2FycmF5X2xpc3Q7IHNwdHIgIT0gTlVMTDsgc3B0ciA9IHNwdHItPm5leHQpIHsKKyAgICBpZiAoc3B0ci0+bWVtX2J1ZmZlciA9PSBOVUxMKSB7IC8qIGlmIG5vdCByZWFsaXplZCB5ZXQgKi8KKyAgICAgIHNwYWNlX3Blcl9taW5oZWlnaHQgKz0gKGxvbmcpIHNwdHItPm1heGFjY2VzcyAqCisJCQkgICAgIChsb25nKSBzcHRyLT5zYW1wbGVzcGVycm93ICogU0laRU9GKEpTQU1QTEUpOworICAgICAgbWF4aW11bV9zcGFjZSArPSAobG9uZykgc3B0ci0+cm93c19pbl9hcnJheSAqCisJCSAgICAgICAobG9uZykgc3B0ci0+c2FtcGxlc3BlcnJvdyAqIFNJWkVPRihKU0FNUExFKTsKKyAgICB9CisgIH0KKyAgZm9yIChicHRyID0gbWVtLT52aXJ0X2JhcnJheV9saXN0OyBicHRyICE9IE5VTEw7IGJwdHIgPSBicHRyLT5uZXh0KSB7CisgICAgaWYgKGJwdHItPm1lbV9idWZmZXIgPT0gTlVMTCkgeyAvKiBpZiBub3QgcmVhbGl6ZWQgeWV0ICovCisgICAgICBzcGFjZV9wZXJfbWluaGVpZ2h0ICs9IChsb25nKSBicHRyLT5tYXhhY2Nlc3MgKgorCQkJICAgICAobG9uZykgYnB0ci0+YmxvY2tzcGVycm93ICogU0laRU9GKEpCTE9DSyk7CisgICAgICBtYXhpbXVtX3NwYWNlICs9IChsb25nKSBicHRyLT5yb3dzX2luX2FycmF5ICoKKwkJICAgICAgIChsb25nKSBicHRyLT5ibG9ja3NwZXJyb3cgKiBTSVpFT0YoSkJMT0NLKTsKKyAgICB9CisgIH0KKworICBpZiAoc3BhY2VfcGVyX21pbmhlaWdodCA8PSAwKQorICAgIHJldHVybjsJCQkvKiBubyB1bnJlYWxpemVkIGFycmF5cywgbm8gd29yayAqLworCisgIC8qIERldGVybWluZSBhbW91bnQgb2YgbWVtb3J5IHRvIGFjdHVhbGx5IHVzZTsgdGhpcyBpcyBzeXN0ZW0tZGVwZW5kZW50LiAqLworICBhdmFpbF9tZW0gPSBqcGVnX21lbV9hdmFpbGFibGUoY2luZm8sIHNwYWNlX3Blcl9taW5oZWlnaHQsIG1heGltdW1fc3BhY2UsCisJCQkJIG1lbS0+dG90YWxfc3BhY2VfYWxsb2NhdGVkKTsKKworICAvKiBJZiB0aGUgbWF4aW11bSBzcGFjZSBuZWVkZWQgaXMgYXZhaWxhYmxlLCBtYWtlIGFsbCB0aGUgYnVmZmVycyBmdWxsCisgICAqIGhlaWdodDsgb3RoZXJ3aXNlIHBhcmNlbCBpdCBvdXQgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgbWluaGVpZ2h0cworICAgKiBpbiBlYWNoIGJ1ZmZlci4KKyAgICovCisgIGlmIChhdmFpbF9tZW0gPj0gbWF4aW11bV9zcGFjZSkKKyAgICBtYXhfbWluaGVpZ2h0cyA9IDEwMDAwMDAwMDBMOworICBlbHNlIHsKKyAgICBtYXhfbWluaGVpZ2h0cyA9IGF2YWlsX21lbSAvIHNwYWNlX3Blcl9taW5oZWlnaHQ7CisgICAgLyogSWYgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGVub3VnaCBzcGFjZSwgdHJ5IHRvIGdldCB0aGUgbWluaW11bQorICAgICAqIGFueXdheS4gIFRoaXMgYWxsb3dzIGEgInN0dWIiIGltcGxlbWVudGF0aW9uIG9mIGpwZWdfbWVtX2F2YWlsYWJsZSgpLgorICAgICAqLworICAgIGlmIChtYXhfbWluaGVpZ2h0cyA8PSAwKQorICAgICAgbWF4X21pbmhlaWdodHMgPSAxOworICB9CisKKyAgLyogQWxsb2NhdGUgdGhlIGluLW1lbW9yeSBidWZmZXJzIGFuZCBpbml0aWFsaXplIGJhY2tpbmcgc3RvcmUgYXMgbmVlZGVkLiAqLworCisgIGZvciAoc3B0ciA9IG1lbS0+dmlydF9zYXJyYXlfbGlzdDsgc3B0ciAhPSBOVUxMOyBzcHRyID0gc3B0ci0+bmV4dCkgeworICAgIGlmIChzcHRyLT5tZW1fYnVmZmVyID09IE5VTEwpIHsgLyogaWYgbm90IHJlYWxpemVkIHlldCAqLworICAgICAgbWluaGVpZ2h0cyA9ICgobG9uZykgc3B0ci0+cm93c19pbl9hcnJheSAtIDFMKSAvIHNwdHItPm1heGFjY2VzcyArIDFMOworICAgICAgaWYgKG1pbmhlaWdodHMgPD0gbWF4X21pbmhlaWdodHMpIHsKKwkvKiBUaGlzIGJ1ZmZlciBmaXRzIGluIG1lbW9yeSAqLworCXNwdHItPnJvd3NfaW5fbWVtID0gc3B0ci0+cm93c19pbl9hcnJheTsKKyAgICAgIH0gZWxzZSB7CisJLyogSXQgZG9lc24ndCBmaXQgaW4gbWVtb3J5LCBjcmVhdGUgYmFja2luZyBzdG9yZS4gKi8KKwlzcHRyLT5yb3dzX2luX21lbSA9IChKRElNRU5TSU9OKSAobWF4X21pbmhlaWdodHMgKiBzcHRyLT5tYXhhY2Nlc3MpOworCWpwZWdfb3Blbl9iYWNraW5nX3N0b3JlKGNpbmZvLCAmIHNwdHItPmJfc19pbmZvLAorCQkJCShsb25nKSBzcHRyLT5yb3dzX2luX2FycmF5ICoKKwkJCQkobG9uZykgc3B0ci0+c2FtcGxlc3BlcnJvdyAqCisJCQkJKGxvbmcpIFNJWkVPRihKU0FNUExFKSk7CisJc3B0ci0+Yl9zX29wZW4gPSBUUlVFOworICAgICAgfQorICAgICAgc3B0ci0+bWVtX2J1ZmZlciA9IGFsbG9jX3NhcnJheShjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJICAgICAgc3B0ci0+c2FtcGxlc3BlcnJvdywgc3B0ci0+cm93c19pbl9tZW0pOworICAgICAgc3B0ci0+cm93c3BlcmNodW5rID0gbWVtLT5sYXN0X3Jvd3NwZXJjaHVuazsKKyAgICAgIHNwdHItPmN1cl9zdGFydF9yb3cgPSAwOworICAgICAgc3B0ci0+Zmlyc3RfdW5kZWZfcm93ID0gMDsKKyAgICAgIHNwdHItPmRpcnR5ID0gRkFMU0U7CisgICAgfQorICB9CisKKyAgZm9yIChicHRyID0gbWVtLT52aXJ0X2JhcnJheV9saXN0OyBicHRyICE9IE5VTEw7IGJwdHIgPSBicHRyLT5uZXh0KSB7CisgICAgaWYgKGJwdHItPm1lbV9idWZmZXIgPT0gTlVMTCkgeyAvKiBpZiBub3QgcmVhbGl6ZWQgeWV0ICovCisgICAgICBtaW5oZWlnaHRzID0gKChsb25nKSBicHRyLT5yb3dzX2luX2FycmF5IC0gMUwpIC8gYnB0ci0+bWF4YWNjZXNzICsgMUw7CisgICAgICBpZiAobWluaGVpZ2h0cyA8PSBtYXhfbWluaGVpZ2h0cykgeworCS8qIFRoaXMgYnVmZmVyIGZpdHMgaW4gbWVtb3J5ICovCisJYnB0ci0+cm93c19pbl9tZW0gPSBicHRyLT5yb3dzX2luX2FycmF5OworICAgICAgfSBlbHNlIHsKKwkvKiBJdCBkb2Vzbid0IGZpdCBpbiBtZW1vcnksIGNyZWF0ZSBiYWNraW5nIHN0b3JlLiAqLworCWJwdHItPnJvd3NfaW5fbWVtID0gKEpESU1FTlNJT04pIChtYXhfbWluaGVpZ2h0cyAqIGJwdHItPm1heGFjY2Vzcyk7CisJanBlZ19vcGVuX2JhY2tpbmdfc3RvcmUoY2luZm8sICYgYnB0ci0+Yl9zX2luZm8sCisJCQkJKGxvbmcpIGJwdHItPnJvd3NfaW5fYXJyYXkgKgorCQkJCShsb25nKSBicHRyLT5ibG9ja3NwZXJyb3cgKgorCQkJCShsb25nKSBTSVpFT0YoSkJMT0NLKSk7CisJYnB0ci0+Yl9zX29wZW4gPSBUUlVFOworICAgICAgfQorICAgICAgYnB0ci0+bWVtX2J1ZmZlciA9IGFsbG9jX2JhcnJheShjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJICAgICAgYnB0ci0+YmxvY2tzcGVycm93LCBicHRyLT5yb3dzX2luX21lbSk7CisgICAgICBicHRyLT5yb3dzcGVyY2h1bmsgPSBtZW0tPmxhc3Rfcm93c3BlcmNodW5rOworICAgICAgYnB0ci0+Y3VyX3N0YXJ0X3JvdyA9IDA7CisgICAgICBicHRyLT5maXJzdF91bmRlZl9yb3cgPSAwOworICAgICAgYnB0ci0+ZGlydHkgPSBGQUxTRTsKKyAgICB9CisgIH0KK30KKworCitMT0NBTCh2b2lkKQorZG9fc2FycmF5X2lvIChqX2NvbW1vbl9wdHIgY2luZm8sIGp2aXJ0X3NhcnJheV9wdHIgcHRyLCBib29sZWFuIHdyaXRpbmcpCisvKiBEbyBiYWNraW5nIHN0b3JlIHJlYWQgb3Igd3JpdGUgb2YgYSB2aXJ0dWFsIHNhbXBsZSBhcnJheSAqLworeworICBsb25nIGJ5dGVzcGVycm93LCBmaWxlX29mZnNldCwgYnl0ZV9jb3VudCwgcm93cywgdGhpc3JvdywgaTsKKworICBieXRlc3BlcnJvdyA9IChsb25nKSBwdHItPnNhbXBsZXNwZXJyb3cgKiBTSVpFT0YoSlNBTVBMRSk7CisgIGZpbGVfb2Zmc2V0ID0gcHRyLT5jdXJfc3RhcnRfcm93ICogYnl0ZXNwZXJyb3c7CisgIC8qIExvb3AgdG8gcmVhZCBvciB3cml0ZSBlYWNoIGFsbG9jYXRpb24gY2h1bmsgaW4gbWVtX2J1ZmZlciAqLworICBmb3IgKGkgPSAwOyBpIDwgKGxvbmcpIHB0ci0+cm93c19pbl9tZW07IGkgKz0gcHRyLT5yb3dzcGVyY2h1bmspIHsKKyAgICAvKiBPbmUgY2h1bmssIGJ1dCBjaGVjayBmb3Igc2hvcnQgY2h1bmsgYXQgZW5kIG9mIGJ1ZmZlciAqLworICAgIHJvd3MgPSBNSU4oKGxvbmcpIHB0ci0+cm93c3BlcmNodW5rLCAobG9uZykgcHRyLT5yb3dzX2luX21lbSAtIGkpOworICAgIC8qIFRyYW5zZmVyIG5vIG1vcmUgdGhhbiBpcyBjdXJyZW50bHkgZGVmaW5lZCAqLworICAgIHRoaXNyb3cgPSAobG9uZykgcHRyLT5jdXJfc3RhcnRfcm93ICsgaTsKKyAgICByb3dzID0gTUlOKHJvd3MsIChsb25nKSBwdHItPmZpcnN0X3VuZGVmX3JvdyAtIHRoaXNyb3cpOworICAgIC8qIFRyYW5zZmVyIG5vIG1vcmUgdGhhbiBmaXRzIGluIGZpbGUgKi8KKyAgICByb3dzID0gTUlOKHJvd3MsIChsb25nKSBwdHItPnJvd3NfaW5fYXJyYXkgLSB0aGlzcm93KTsKKyAgICBpZiAocm93cyA8PSAwKQkJLyogdGhpcyBjaHVuayBtaWdodCBiZSBwYXN0IGVuZCBvZiBmaWxlISAqLworICAgICAgYnJlYWs7CisgICAgYnl0ZV9jb3VudCA9IHJvd3MgKiBieXRlc3BlcnJvdzsKKyAgICBpZiAod3JpdGluZykKKyAgICAgICgqcHRyLT5iX3NfaW5mby53cml0ZV9iYWNraW5nX3N0b3JlKSAoY2luZm8sICYgcHRyLT5iX3NfaW5mbywKKwkJCQkJICAgICh2b2lkIEZBUiAqKSBwdHItPm1lbV9idWZmZXJbaV0sCisJCQkJCSAgICBmaWxlX29mZnNldCwgYnl0ZV9jb3VudCk7CisgICAgZWxzZQorICAgICAgKCpwdHItPmJfc19pbmZvLnJlYWRfYmFja2luZ19zdG9yZSkgKGNpbmZvLCAmIHB0ci0+Yl9zX2luZm8sCisJCQkJCSAgICh2b2lkIEZBUiAqKSBwdHItPm1lbV9idWZmZXJbaV0sCisJCQkJCSAgIGZpbGVfb2Zmc2V0LCBieXRlX2NvdW50KTsKKyAgICBmaWxlX29mZnNldCArPSBieXRlX2NvdW50OworICB9Cit9CisKKworTE9DQUwodm9pZCkKK2RvX2JhcnJheV9pbyAoal9jb21tb25fcHRyIGNpbmZvLCBqdmlydF9iYXJyYXlfcHRyIHB0ciwgYm9vbGVhbiB3cml0aW5nKQorLyogRG8gYmFja2luZyBzdG9yZSByZWFkIG9yIHdyaXRlIG9mIGEgdmlydHVhbCBjb2VmZmljaWVudC1ibG9jayBhcnJheSAqLworeworICBsb25nIGJ5dGVzcGVycm93LCBmaWxlX29mZnNldCwgYnl0ZV9jb3VudCwgcm93cywgdGhpc3JvdywgaTsKKworICBieXRlc3BlcnJvdyA9IChsb25nKSBwdHItPmJsb2Nrc3BlcnJvdyAqIFNJWkVPRihKQkxPQ0spOworICBmaWxlX29mZnNldCA9IHB0ci0+Y3VyX3N0YXJ0X3JvdyAqIGJ5dGVzcGVycm93OworICAvKiBMb29wIHRvIHJlYWQgb3Igd3JpdGUgZWFjaCBhbGxvY2F0aW9uIGNodW5rIGluIG1lbV9idWZmZXIgKi8KKyAgZm9yIChpID0gMDsgaSA8IChsb25nKSBwdHItPnJvd3NfaW5fbWVtOyBpICs9IHB0ci0+cm93c3BlcmNodW5rKSB7CisgICAgLyogT25lIGNodW5rLCBidXQgY2hlY2sgZm9yIHNob3J0IGNodW5rIGF0IGVuZCBvZiBidWZmZXIgKi8KKyAgICByb3dzID0gTUlOKChsb25nKSBwdHItPnJvd3NwZXJjaHVuaywgKGxvbmcpIHB0ci0+cm93c19pbl9tZW0gLSBpKTsKKyAgICAvKiBUcmFuc2ZlciBubyBtb3JlIHRoYW4gaXMgY3VycmVudGx5IGRlZmluZWQgKi8KKyAgICB0aGlzcm93ID0gKGxvbmcpIHB0ci0+Y3VyX3N0YXJ0X3JvdyArIGk7CisgICAgcm93cyA9IE1JTihyb3dzLCAobG9uZykgcHRyLT5maXJzdF91bmRlZl9yb3cgLSB0aGlzcm93KTsKKyAgICAvKiBUcmFuc2ZlciBubyBtb3JlIHRoYW4gZml0cyBpbiBmaWxlICovCisgICAgcm93cyA9IE1JTihyb3dzLCAobG9uZykgcHRyLT5yb3dzX2luX2FycmF5IC0gdGhpc3Jvdyk7CisgICAgaWYgKHJvd3MgPD0gMCkJCS8qIHRoaXMgY2h1bmsgbWlnaHQgYmUgcGFzdCBlbmQgb2YgZmlsZSEgKi8KKyAgICAgIGJyZWFrOworICAgIGJ5dGVfY291bnQgPSByb3dzICogYnl0ZXNwZXJyb3c7CisgICAgaWYgKHdyaXRpbmcpCisgICAgICAoKnB0ci0+Yl9zX2luZm8ud3JpdGVfYmFja2luZ19zdG9yZSkgKGNpbmZvLCAmIHB0ci0+Yl9zX2luZm8sCisJCQkJCSAgICAodm9pZCBGQVIgKikgcHRyLT5tZW1fYnVmZmVyW2ldLAorCQkJCQkgICAgZmlsZV9vZmZzZXQsIGJ5dGVfY291bnQpOworICAgIGVsc2UKKyAgICAgICgqcHRyLT5iX3NfaW5mby5yZWFkX2JhY2tpbmdfc3RvcmUpIChjaW5mbywgJiBwdHItPmJfc19pbmZvLAorCQkJCQkgICAodm9pZCBGQVIgKikgcHRyLT5tZW1fYnVmZmVyW2ldLAorCQkJCQkgICBmaWxlX29mZnNldCwgYnl0ZV9jb3VudCk7CisgICAgZmlsZV9vZmZzZXQgKz0gYnl0ZV9jb3VudDsKKyAgfQorfQorCisKK01FVEhPRERFRihKU0FNUEFSUkFZKQorYWNjZXNzX3ZpcnRfc2FycmF5IChqX2NvbW1vbl9wdHIgY2luZm8sIGp2aXJ0X3NhcnJheV9wdHIgcHRyLAorCQkgICAgSkRJTUVOU0lPTiBzdGFydF9yb3csIEpESU1FTlNJT04gbnVtX3Jvd3MsCisJCSAgICBib29sZWFuIHdyaXRhYmxlKQorLyogQWNjZXNzIHRoZSBwYXJ0IG9mIGEgdmlydHVhbCBzYW1wbGUgYXJyYXkgc3RhcnRpbmcgYXQgc3RhcnRfcm93ICovCisvKiBhbmQgZXh0ZW5kaW5nIGZvciBudW1fcm93cyByb3dzLiAgd3JpdGFibGUgaXMgdHJ1ZSBpZiAgKi8KKy8qIGNhbGxlciBpbnRlbmRzIHRvIG1vZGlmeSB0aGUgYWNjZXNzZWQgYXJlYS4gKi8KK3sKKyAgSkRJTUVOU0lPTiBlbmRfcm93ID0gc3RhcnRfcm93ICsgbnVtX3Jvd3M7CisgIEpESU1FTlNJT04gdW5kZWZfcm93OworCisgIC8qIGRlYnVnZ2luZyBjaGVjayAqLworICBpZiAoZW5kX3JvdyA+IHB0ci0+cm93c19pbl9hcnJheSB8fCBudW1fcm93cyA+IHB0ci0+bWF4YWNjZXNzIHx8CisgICAgICBwdHItPm1lbV9idWZmZXIgPT0gTlVMTCkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9WSVJUVUFMX0FDQ0VTUyk7CisKKyAgLyogTWFrZSB0aGUgZGVzaXJlZCBwYXJ0IG9mIHRoZSB2aXJ0dWFsIGFycmF5IGFjY2Vzc2libGUgKi8KKyAgaWYgKHN0YXJ0X3JvdyA8IHB0ci0+Y3VyX3N0YXJ0X3JvdyB8fAorICAgICAgZW5kX3JvdyA+IHB0ci0+Y3VyX3N0YXJ0X3JvdytwdHItPnJvd3NfaW5fbWVtKSB7CisgICAgaWYgKCEgcHRyLT5iX3Nfb3BlbikKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfVklSVFVBTF9CVUcpOworICAgIC8qIEZsdXNoIG9sZCBidWZmZXIgY29udGVudHMgaWYgbmVjZXNzYXJ5ICovCisgICAgaWYgKHB0ci0+ZGlydHkpIHsKKyAgICAgIGRvX3NhcnJheV9pbyhjaW5mbywgcHRyLCBUUlVFKTsKKyAgICAgIHB0ci0+ZGlydHkgPSBGQUxTRTsKKyAgICB9CisgICAgLyogRGVjaWRlIHdoYXQgcGFydCBvZiB2aXJ0dWFsIGFycmF5IHRvIGFjY2Vzcy4KKyAgICAgKiBBbGdvcml0aG06IGlmIHRhcmdldCBhZGRyZXNzID4gY3VycmVudCB3aW5kb3csIGFzc3VtZSBmb3J3YXJkIHNjYW4sCisgICAgICogbG9hZCBzdGFydGluZyBhdCB0YXJnZXQgYWRkcmVzcy4gIElmIHRhcmdldCBhZGRyZXNzIDwgY3VycmVudCB3aW5kb3csCisgICAgICogYXNzdW1lIGJhY2t3YXJkIHNjYW4sIGxvYWQgc28gdGhhdCB0YXJnZXQgYXJlYSBpcyB0b3Agb2Ygd2luZG93LgorICAgICAqIE5vdGUgdGhhdCB3aGVuIHN3aXRjaGluZyBmcm9tIGZvcndhcmQgd3JpdGUgdG8gZm9yd2FyZCByZWFkLCB3aWxsIGhhdmUKKyAgICAgKiBzdGFydF9yb3cgPSAwLCBzbyB0aGUgbGltaXRpbmcgY2FzZSBhcHBsaWVzIGFuZCB3ZSBsb2FkIGZyb20gMCBhbnl3YXkuCisgICAgICovCisgICAgaWYgKHN0YXJ0X3JvdyA+IHB0ci0+Y3VyX3N0YXJ0X3JvdykgeworICAgICAgcHRyLT5jdXJfc3RhcnRfcm93ID0gc3RhcnRfcm93OworICAgIH0gZWxzZSB7CisgICAgICAvKiB1c2UgbG9uZyBhcml0aG1ldGljIGhlcmUgdG8gYXZvaWQgb3ZlcmZsb3cgJiB1bnNpZ25lZCBwcm9ibGVtcyAqLworICAgICAgbG9uZyBsdGVtcDsKKworICAgICAgbHRlbXAgPSAobG9uZykgZW5kX3JvdyAtIChsb25nKSBwdHItPnJvd3NfaW5fbWVtOworICAgICAgaWYgKGx0ZW1wIDwgMCkKKwlsdGVtcCA9IDA7CQkvKiBkb24ndCBmYWxsIG9mZiBmcm9udCBlbmQgb2YgZmlsZSAqLworICAgICAgcHRyLT5jdXJfc3RhcnRfcm93ID0gKEpESU1FTlNJT04pIGx0ZW1wOworICAgIH0KKyAgICAvKiBSZWFkIGluIHRoZSBzZWxlY3RlZCBwYXJ0IG9mIHRoZSBhcnJheS4KKyAgICAgKiBEdXJpbmcgdGhlIGluaXRpYWwgd3JpdGUgcGFzcywgd2Ugd2lsbCBkbyBubyBhY3R1YWwgcmVhZAorICAgICAqIGJlY2F1c2UgdGhlIHNlbGVjdGVkIHBhcnQgaXMgYWxsIHVuZGVmaW5lZC4KKyAgICAgKi8KKyAgICBkb19zYXJyYXlfaW8oY2luZm8sIHB0ciwgRkFMU0UpOworICB9CisgIC8qIEVuc3VyZSB0aGUgYWNjZXNzZWQgcGFydCBvZiB0aGUgYXJyYXkgaXMgZGVmaW5lZDsgcHJlemVybyBpZiBuZWVkZWQuCisgICAqIFRvIGltcHJvdmUgbG9jYWxpdHkgb2YgYWNjZXNzLCB3ZSBvbmx5IHByZXplcm8gdGhlIHBhcnQgb2YgdGhlIGFycmF5CisgICAqIHRoYXQgdGhlIGNhbGxlciBpcyBhYm91dCB0byBhY2Nlc3MsIG5vdCB0aGUgZW50aXJlIGluLW1lbW9yeSBhcnJheS4KKyAgICovCisgIGlmIChwdHItPmZpcnN0X3VuZGVmX3JvdyA8IGVuZF9yb3cpIHsKKyAgICBpZiAocHRyLT5maXJzdF91bmRlZl9yb3cgPCBzdGFydF9yb3cpIHsKKyAgICAgIGlmICh3cml0YWJsZSkJCS8qIHdyaXRlciBza2lwcGVkIG92ZXIgYSBzZWN0aW9uIG9mIGFycmF5ICovCisJRVJSRVhJVChjaW5mbywgSkVSUl9CQURfVklSVFVBTF9BQ0NFU1MpOworICAgICAgdW5kZWZfcm93ID0gc3RhcnRfcm93OwkvKiBidXQgcmVhZGVyIGlzIGFsbG93ZWQgdG8gcmVhZCBhaGVhZCAqLworICAgIH0gZWxzZSB7CisgICAgICB1bmRlZl9yb3cgPSBwdHItPmZpcnN0X3VuZGVmX3JvdzsKKyAgICB9CisgICAgaWYgKHdyaXRhYmxlKQorICAgICAgcHRyLT5maXJzdF91bmRlZl9yb3cgPSBlbmRfcm93OworICAgIGlmIChwdHItPnByZV96ZXJvKSB7CisgICAgICBzaXplX3QgYnl0ZXNwZXJyb3cgPSAoc2l6ZV90KSBwdHItPnNhbXBsZXNwZXJyb3cgKiBTSVpFT0YoSlNBTVBMRSk7CisgICAgICB1bmRlZl9yb3cgLT0gcHRyLT5jdXJfc3RhcnRfcm93OyAvKiBtYWtlIGluZGV4ZXMgcmVsYXRpdmUgdG8gYnVmZmVyICovCisgICAgICBlbmRfcm93IC09IHB0ci0+Y3VyX3N0YXJ0X3JvdzsKKyAgICAgIHdoaWxlICh1bmRlZl9yb3cgPCBlbmRfcm93KSB7CisJanplcm9fZmFyKCh2b2lkIEZBUiAqKSBwdHItPm1lbV9idWZmZXJbdW5kZWZfcm93XSwgYnl0ZXNwZXJyb3cpOworCXVuZGVmX3JvdysrOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBpZiAoISB3cml0YWJsZSkJCS8qIHJlYWRlciBsb29raW5nIGF0IHVuZGVmaW5lZCBkYXRhICovCisJRVJSRVhJVChjaW5mbywgSkVSUl9CQURfVklSVFVBTF9BQ0NFU1MpOworICAgIH0KKyAgfQorICAvKiBGbGFnIHRoZSBidWZmZXIgZGlydHkgaWYgY2FsbGVyIHdpbGwgd3JpdGUgaW4gaXQgKi8KKyAgaWYgKHdyaXRhYmxlKQorICAgIHB0ci0+ZGlydHkgPSBUUlVFOworICAvKiBSZXR1cm4gYWRkcmVzcyBvZiBwcm9wZXIgcGFydCBvZiB0aGUgYnVmZmVyICovCisgIHJldHVybiBwdHItPm1lbV9idWZmZXIgKyAoc3RhcnRfcm93IC0gcHRyLT5jdXJfc3RhcnRfcm93KTsKK30KKworCitNRVRIT0RERUYoSkJMT0NLQVJSQVkpCithY2Nlc3NfdmlydF9iYXJyYXkgKGpfY29tbW9uX3B0ciBjaW5mbywganZpcnRfYmFycmF5X3B0ciBwdHIsCisJCSAgICBKRElNRU5TSU9OIHN0YXJ0X3JvdywgSkRJTUVOU0lPTiBudW1fcm93cywKKwkJICAgIGJvb2xlYW4gd3JpdGFibGUpCisvKiBBY2Nlc3MgdGhlIHBhcnQgb2YgYSB2aXJ0dWFsIGJsb2NrIGFycmF5IHN0YXJ0aW5nIGF0IHN0YXJ0X3JvdyAqLworLyogYW5kIGV4dGVuZGluZyBmb3IgbnVtX3Jvd3Mgcm93cy4gIHdyaXRhYmxlIGlzIHRydWUgaWYgICovCisvKiBjYWxsZXIgaW50ZW5kcyB0byBtb2RpZnkgdGhlIGFjY2Vzc2VkIGFyZWEuICovCit7CisgIEpESU1FTlNJT04gZW5kX3JvdyA9IHN0YXJ0X3JvdyArIG51bV9yb3dzOworICBKRElNRU5TSU9OIHVuZGVmX3JvdzsKKworICAvKiBkZWJ1Z2dpbmcgY2hlY2sgKi8KKyAgaWYgKGVuZF9yb3cgPiBwdHItPnJvd3NfaW5fYXJyYXkgfHwgbnVtX3Jvd3MgPiBwdHItPm1heGFjY2VzcyB8fAorICAgICAgcHRyLT5tZW1fYnVmZmVyID09IE5VTEwpCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfVklSVFVBTF9BQ0NFU1MpOworCisgIC8qIE1ha2UgdGhlIGRlc2lyZWQgcGFydCBvZiB0aGUgdmlydHVhbCBhcnJheSBhY2Nlc3NpYmxlICovCisgIGlmIChzdGFydF9yb3cgPCBwdHItPmN1cl9zdGFydF9yb3cgfHwKKyAgICAgIGVuZF9yb3cgPiBwdHItPmN1cl9zdGFydF9yb3crcHRyLT5yb3dzX2luX21lbSkgeworICAgIGlmICghIHB0ci0+Yl9zX29wZW4pCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1ZJUlRVQUxfQlVHKTsKKyAgICAvKiBGbHVzaCBvbGQgYnVmZmVyIGNvbnRlbnRzIGlmIG5lY2Vzc2FyeSAqLworICAgIGlmIChwdHItPmRpcnR5KSB7CisgICAgICBkb19iYXJyYXlfaW8oY2luZm8sIHB0ciwgVFJVRSk7CisgICAgICBwdHItPmRpcnR5ID0gRkFMU0U7CisgICAgfQorICAgIC8qIERlY2lkZSB3aGF0IHBhcnQgb2YgdmlydHVhbCBhcnJheSB0byBhY2Nlc3MuCisgICAgICogQWxnb3JpdGhtOiBpZiB0YXJnZXQgYWRkcmVzcyA+IGN1cnJlbnQgd2luZG93LCBhc3N1bWUgZm9yd2FyZCBzY2FuLAorICAgICAqIGxvYWQgc3RhcnRpbmcgYXQgdGFyZ2V0IGFkZHJlc3MuICBJZiB0YXJnZXQgYWRkcmVzcyA8IGN1cnJlbnQgd2luZG93LAorICAgICAqIGFzc3VtZSBiYWNrd2FyZCBzY2FuLCBsb2FkIHNvIHRoYXQgdGFyZ2V0IGFyZWEgaXMgdG9wIG9mIHdpbmRvdy4KKyAgICAgKiBOb3RlIHRoYXQgd2hlbiBzd2l0Y2hpbmcgZnJvbSBmb3J3YXJkIHdyaXRlIHRvIGZvcndhcmQgcmVhZCwgd2lsbCBoYXZlCisgICAgICogc3RhcnRfcm93ID0gMCwgc28gdGhlIGxpbWl0aW5nIGNhc2UgYXBwbGllcyBhbmQgd2UgbG9hZCBmcm9tIDAgYW55d2F5LgorICAgICAqLworICAgIGlmIChzdGFydF9yb3cgPiBwdHItPmN1cl9zdGFydF9yb3cpIHsKKyAgICAgIHB0ci0+Y3VyX3N0YXJ0X3JvdyA9IHN0YXJ0X3JvdzsKKyAgICB9IGVsc2UgeworICAgICAgLyogdXNlIGxvbmcgYXJpdGhtZXRpYyBoZXJlIHRvIGF2b2lkIG92ZXJmbG93ICYgdW5zaWduZWQgcHJvYmxlbXMgKi8KKyAgICAgIGxvbmcgbHRlbXA7CisKKyAgICAgIGx0ZW1wID0gKGxvbmcpIGVuZF9yb3cgLSAobG9uZykgcHRyLT5yb3dzX2luX21lbTsKKyAgICAgIGlmIChsdGVtcCA8IDApCisJbHRlbXAgPSAwOwkJLyogZG9uJ3QgZmFsbCBvZmYgZnJvbnQgZW5kIG9mIGZpbGUgKi8KKyAgICAgIHB0ci0+Y3VyX3N0YXJ0X3JvdyA9IChKRElNRU5TSU9OKSBsdGVtcDsKKyAgICB9CisgICAgLyogUmVhZCBpbiB0aGUgc2VsZWN0ZWQgcGFydCBvZiB0aGUgYXJyYXkuCisgICAgICogRHVyaW5nIHRoZSBpbml0aWFsIHdyaXRlIHBhc3MsIHdlIHdpbGwgZG8gbm8gYWN0dWFsIHJlYWQKKyAgICAgKiBiZWNhdXNlIHRoZSBzZWxlY3RlZCBwYXJ0IGlzIGFsbCB1bmRlZmluZWQuCisgICAgICovCisgICAgZG9fYmFycmF5X2lvKGNpbmZvLCBwdHIsIEZBTFNFKTsKKyAgfQorICAvKiBFbnN1cmUgdGhlIGFjY2Vzc2VkIHBhcnQgb2YgdGhlIGFycmF5IGlzIGRlZmluZWQ7IHByZXplcm8gaWYgbmVlZGVkLgorICAgKiBUbyBpbXByb3ZlIGxvY2FsaXR5IG9mIGFjY2Vzcywgd2Ugb25seSBwcmV6ZXJvIHRoZSBwYXJ0IG9mIHRoZSBhcnJheQorICAgKiB0aGF0IHRoZSBjYWxsZXIgaXMgYWJvdXQgdG8gYWNjZXNzLCBub3QgdGhlIGVudGlyZSBpbi1tZW1vcnkgYXJyYXkuCisgICAqLworICBpZiAocHRyLT5maXJzdF91bmRlZl9yb3cgPCBlbmRfcm93KSB7CisgICAgaWYgKHB0ci0+Zmlyc3RfdW5kZWZfcm93IDwgc3RhcnRfcm93KSB7CisgICAgICBpZiAod3JpdGFibGUpCQkvKiB3cml0ZXIgc2tpcHBlZCBvdmVyIGEgc2VjdGlvbiBvZiBhcnJheSAqLworCUVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX1ZJUlRVQUxfQUNDRVNTKTsKKyAgICAgIHVuZGVmX3JvdyA9IHN0YXJ0X3JvdzsJLyogYnV0IHJlYWRlciBpcyBhbGxvd2VkIHRvIHJlYWQgYWhlYWQgKi8KKyAgICB9IGVsc2UgeworICAgICAgdW5kZWZfcm93ID0gcHRyLT5maXJzdF91bmRlZl9yb3c7CisgICAgfQorICAgIGlmICh3cml0YWJsZSkKKyAgICAgIHB0ci0+Zmlyc3RfdW5kZWZfcm93ID0gZW5kX3JvdzsKKyAgICBpZiAocHRyLT5wcmVfemVybykgeworICAgICAgc2l6ZV90IGJ5dGVzcGVycm93ID0gKHNpemVfdCkgcHRyLT5ibG9ja3NwZXJyb3cgKiBTSVpFT0YoSkJMT0NLKTsKKyAgICAgIHVuZGVmX3JvdyAtPSBwdHItPmN1cl9zdGFydF9yb3c7IC8qIG1ha2UgaW5kZXhlcyByZWxhdGl2ZSB0byBidWZmZXIgKi8KKyAgICAgIGVuZF9yb3cgLT0gcHRyLT5jdXJfc3RhcnRfcm93OworICAgICAgd2hpbGUgKHVuZGVmX3JvdyA8IGVuZF9yb3cpIHsKKwlqemVyb19mYXIoKHZvaWQgRkFSICopIHB0ci0+bWVtX2J1ZmZlclt1bmRlZl9yb3ddLCBieXRlc3BlcnJvdyk7CisJdW5kZWZfcm93Kys7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGlmICghIHdyaXRhYmxlKQkJLyogcmVhZGVyIGxvb2tpbmcgYXQgdW5kZWZpbmVkIGRhdGEgKi8KKwlFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9WSVJUVUFMX0FDQ0VTUyk7CisgICAgfQorICB9CisgIC8qIEZsYWcgdGhlIGJ1ZmZlciBkaXJ0eSBpZiBjYWxsZXIgd2lsbCB3cml0ZSBpbiBpdCAqLworICBpZiAod3JpdGFibGUpCisgICAgcHRyLT5kaXJ0eSA9IFRSVUU7CisgIC8qIFJldHVybiBhZGRyZXNzIG9mIHByb3BlciBwYXJ0IG9mIHRoZSBidWZmZXIgKi8KKyAgcmV0dXJuIHB0ci0+bWVtX2J1ZmZlciArIChzdGFydF9yb3cgLSBwdHItPmN1cl9zdGFydF9yb3cpOworfQorCisKKy8qCisgKiBSZWxlYXNlIGFsbCBvYmplY3RzIGJlbG9uZ2luZyB0byBhIHNwZWNpZmllZCBwb29sLgorICovCisKK01FVEhPRERFRih2b2lkKQorZnJlZV9wb29sIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkKQoreworICBteV9tZW1fcHRyIG1lbSA9IChteV9tZW1fcHRyKSBjaW5mby0+bWVtOworICBzbWFsbF9wb29sX3B0ciBzaGRyX3B0cjsKKyAgbGFyZ2VfcG9vbF9wdHIgbGhkcl9wdHI7CisgIHNpemVfdCBzcGFjZV9mcmVlZDsKKworICBpZiAocG9vbF9pZCA8IDAgfHwgcG9vbF9pZCA+PSBKUE9PTF9OVU1QT09MUykKKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUE9PTF9JRCwgcG9vbF9pZCk7CS8qIHNhZmV0eSBjaGVjayAqLworCisjaWZkZWYgTUVNX1NUQVRTCisgIGlmIChjaW5mby0+ZXJyLT50cmFjZV9sZXZlbCA+IDEpCisgICAgcHJpbnRfbWVtX3N0YXRzKGNpbmZvLCBwb29sX2lkKTsgLyogcHJpbnQgcG9vbCdzIG1lbW9yeSB1c2FnZSBzdGF0aXN0aWNzICovCisjZW5kaWYKKworICAvKiBJZiBmcmVlaW5nIElNQUdFIHBvb2wsIGNsb3NlIGFueSB2aXJ0dWFsIGFycmF5cyBmaXJzdCAqLworICBpZiAocG9vbF9pZCA9PSBKUE9PTF9JTUFHRSkgeworICAgIGp2aXJ0X3NhcnJheV9wdHIgc3B0cjsKKyAgICBqdmlydF9iYXJyYXlfcHRyIGJwdHI7CisKKyAgICBmb3IgKHNwdHIgPSBtZW0tPnZpcnRfc2FycmF5X2xpc3Q7IHNwdHIgIT0gTlVMTDsgc3B0ciA9IHNwdHItPm5leHQpIHsKKyAgICAgIGlmIChzcHRyLT5iX3Nfb3BlbikgewkvKiB0aGVyZSBtYXkgYmUgbm8gYmFja2luZyBzdG9yZSAqLworCXNwdHItPmJfc19vcGVuID0gRkFMU0U7CS8qIHByZXZlbnQgcmVjdXJzaXZlIGNsb3NlIGlmIGVycm9yICovCisJKCpzcHRyLT5iX3NfaW5mby5jbG9zZV9iYWNraW5nX3N0b3JlKSAoY2luZm8sICYgc3B0ci0+Yl9zX2luZm8pOworICAgICAgfQorICAgIH0KKyAgICBtZW0tPnZpcnRfc2FycmF5X2xpc3QgPSBOVUxMOworICAgIGZvciAoYnB0ciA9IG1lbS0+dmlydF9iYXJyYXlfbGlzdDsgYnB0ciAhPSBOVUxMOyBicHRyID0gYnB0ci0+bmV4dCkgeworICAgICAgaWYgKGJwdHItPmJfc19vcGVuKSB7CS8qIHRoZXJlIG1heSBiZSBubyBiYWNraW5nIHN0b3JlICovCisJYnB0ci0+Yl9zX29wZW4gPSBGQUxTRTsJLyogcHJldmVudCByZWN1cnNpdmUgY2xvc2UgaWYgZXJyb3IgKi8KKwkoKmJwdHItPmJfc19pbmZvLmNsb3NlX2JhY2tpbmdfc3RvcmUpIChjaW5mbywgJiBicHRyLT5iX3NfaW5mbyk7CisgICAgICB9CisgICAgfQorICAgIG1lbS0+dmlydF9iYXJyYXlfbGlzdCA9IE5VTEw7CisgIH0KKworICAvKiBSZWxlYXNlIGxhcmdlIG9iamVjdHMgKi8KKyAgbGhkcl9wdHIgPSBtZW0tPmxhcmdlX2xpc3RbcG9vbF9pZF07CisgIG1lbS0+bGFyZ2VfbGlzdFtwb29sX2lkXSA9IE5VTEw7CisKKyAgd2hpbGUgKGxoZHJfcHRyICE9IE5VTEwpIHsKKyAgICBsYXJnZV9wb29sX3B0ciBuZXh0X2xoZHJfcHRyID0gbGhkcl9wdHItPmhkci5uZXh0OworICAgIHNwYWNlX2ZyZWVkID0gbGhkcl9wdHItPmhkci5ieXRlc191c2VkICsKKwkJICBsaGRyX3B0ci0+aGRyLmJ5dGVzX2xlZnQgKworCQkgIFNJWkVPRihsYXJnZV9wb29sX2hkcik7CisgICAganBlZ19mcmVlX2xhcmdlKGNpbmZvLCAodm9pZCBGQVIgKikgbGhkcl9wdHIsIHNwYWNlX2ZyZWVkKTsKKyAgICBtZW0tPnRvdGFsX3NwYWNlX2FsbG9jYXRlZCAtPSBzcGFjZV9mcmVlZDsKKyAgICBsaGRyX3B0ciA9IG5leHRfbGhkcl9wdHI7CisgIH0KKworICAvKiBSZWxlYXNlIHNtYWxsIG9iamVjdHMgKi8KKyAgc2hkcl9wdHIgPSBtZW0tPnNtYWxsX2xpc3RbcG9vbF9pZF07CisgIG1lbS0+c21hbGxfbGlzdFtwb29sX2lkXSA9IE5VTEw7CisKKyAgd2hpbGUgKHNoZHJfcHRyICE9IE5VTEwpIHsKKyAgICBzbWFsbF9wb29sX3B0ciBuZXh0X3NoZHJfcHRyID0gc2hkcl9wdHItPmhkci5uZXh0OworICAgIHNwYWNlX2ZyZWVkID0gc2hkcl9wdHItPmhkci5ieXRlc191c2VkICsKKwkJICBzaGRyX3B0ci0+aGRyLmJ5dGVzX2xlZnQgKworCQkgIFNJWkVPRihzbWFsbF9wb29sX2hkcik7CisgICAganBlZ19mcmVlX3NtYWxsKGNpbmZvLCAodm9pZCAqKSBzaGRyX3B0ciwgc3BhY2VfZnJlZWQpOworICAgIG1lbS0+dG90YWxfc3BhY2VfYWxsb2NhdGVkIC09IHNwYWNlX2ZyZWVkOworICAgIHNoZHJfcHRyID0gbmV4dF9zaGRyX3B0cjsKKyAgfQorfQorCisKKy8qCisgKiBDbG9zZSB1cCBzaG9wIGVudGlyZWx5LgorICogTm90ZSB0aGF0IHRoaXMgY2Fubm90IGJlIGNhbGxlZCB1bmxlc3MgY2luZm8tPm1lbSBpcyBub24tTlVMTC4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3NlbGZfZGVzdHJ1Y3QgKGpfY29tbW9uX3B0ciBjaW5mbykKK3sKKyAgaW50IHBvb2w7CisKKyAgLyogQ2xvc2UgYWxsIGJhY2tpbmcgc3RvcmUsIHJlbGVhc2UgYWxsIG1lbW9yeS4KKyAgICogUmVsZWFzaW5nIHBvb2xzIGluIHJldmVyc2Ugb3JkZXIgbWlnaHQgaGVscCBhdm9pZCBmcmFnbWVudGF0aW9uCisgICAqIHdpdGggc29tZSAoYnJhaW4tZGFtYWdlZCkgbWFsbG9jIGxpYnJhcmllcy4KKyAgICovCisgIGZvciAocG9vbCA9IEpQT09MX05VTVBPT0xTLTE7IHBvb2wgPj0gSlBPT0xfUEVSTUFORU5UOyBwb29sLS0pIHsKKyAgICBmcmVlX3Bvb2woY2luZm8sIHBvb2wpOworICB9CisKKyAgLyogUmVsZWFzZSB0aGUgbWVtb3J5IG1hbmFnZXIgY29udHJvbCBibG9jayB0b28uICovCisgIGpwZWdfZnJlZV9zbWFsbChjaW5mbywgKHZvaWQgKikgY2luZm8tPm1lbSwgU0laRU9GKG15X21lbW9yeV9tZ3IpKTsKKyAgY2luZm8tPm1lbSA9IE5VTEw7CQkvKiBlbnN1cmVzIEkgd2lsbCBiZSBjYWxsZWQgb25seSBvbmNlICovCisKKyAganBlZ19tZW1fdGVybShjaW5mbyk7CQkvKiBzeXN0ZW0tZGVwZW5kZW50IGNsZWFudXAgKi8KK30KKworCisvKgorICogTWVtb3J5IG1hbmFnZXIgaW5pdGlhbGl6YXRpb24uCisgKiBXaGVuIHRoaXMgaXMgY2FsbGVkLCBvbmx5IHRoZSBlcnJvciBtYW5hZ2VyIHBvaW50ZXIgaXMgdmFsaWQgaW4gY2luZm8hCisgKi8KKworR0xPQkFMKHZvaWQpCitqaW5pdF9tZW1vcnlfbWdyIChqX2NvbW1vbl9wdHIgY2luZm8pCit7CisgIG15X21lbV9wdHIgbWVtOworICBsb25nIG1heF90b191c2U7CisgIGludCBwb29sOworICBzaXplX3QgdGVzdF9tYWM7CisKKyAgY2luZm8tPm1lbSA9IE5VTEw7CQkvKiBmb3Igc2FmZXR5IGlmIGluaXQgZmFpbHMgKi8KKworICAvKiBDaGVjayBmb3IgY29uZmlndXJhdGlvbiBlcnJvcnMuCisgICAqIFNJWkVPRihBTElHTl9UWVBFKSBzaG91bGQgYmUgYSBwb3dlciBvZiAyOyBvdGhlcndpc2UsIGl0IHByb2JhYmx5CisgICAqIGRvZXNuJ3QgcmVmbGVjdCBhbnkgcmVhbCBoYXJkd2FyZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQuCisgICAqIFRoZSB0ZXN0IGlzIGEgbGl0dGxlIHRyaWNreTogZm9yIFg+MCwgWCBhbmQgWC0xIGhhdmUgbm8gb25lLWJpdHMKKyAgICogaW4gY29tbW9uIGlmIGFuZCBvbmx5IGlmIFggaXMgYSBwb3dlciBvZiAyLCBpZSBoYXMgb25seSBvbmUgb25lLWJpdC4KKyAgICogU29tZSBjb21waWxlcnMgbWF5IGdpdmUgYW4gInVucmVhY2hhYmxlIGNvZGUiIHdhcm5pbmcgaGVyZTsgaWdub3JlIGl0LgorICAgKi8KKyAgaWYgKChTSVpFT0YoQUxJR05fVFlQRSkgJiAoU0laRU9GKEFMSUdOX1RZUEUpLTEpKSAhPSAwKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0FMSUdOX1RZUEUpOworICAvKiBNQVhfQUxMT0NfQ0hVTksgbXVzdCBiZSByZXByZXNlbnRhYmxlIGFzIHR5cGUgc2l6ZV90LCBhbmQgbXVzdCBiZQorICAgKiBhIG11bHRpcGxlIG9mIFNJWkVPRihBTElHTl9UWVBFKS4KKyAgICogQWdhaW4sIGFuICJ1bnJlYWNoYWJsZSBjb2RlIiB3YXJuaW5nIG1heSBiZSBpZ25vcmVkIGhlcmUuCisgICAqIEJ1dCBhICJjb25zdGFudCB0b28gbGFyZ2UiIHdhcm5pbmcgbWVhbnMgeW91IG5lZWQgdG8gZml4IE1BWF9BTExPQ19DSFVOSy4KKyAgICovCisgIHRlc3RfbWFjID0gKHNpemVfdCkgTUFYX0FMTE9DX0NIVU5LOworICBpZiAoKGxvbmcpIHRlc3RfbWFjICE9IE1BWF9BTExPQ19DSFVOSyB8fAorICAgICAgKE1BWF9BTExPQ19DSFVOSyAlIFNJWkVPRihBTElHTl9UWVBFKSkgIT0gMCkKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9BTExPQ19DSFVOSyk7CisKKyAgbWF4X3RvX3VzZSA9IGpwZWdfbWVtX2luaXQoY2luZm8pOyAvKiBzeXN0ZW0tZGVwZW5kZW50IGluaXRpYWxpemF0aW9uICovCisKKyAgLyogQXR0ZW1wdCB0byBhbGxvY2F0ZSBtZW1vcnkgbWFuYWdlcidzIGNvbnRyb2wgYmxvY2sgKi8KKyAgbWVtID0gKG15X21lbV9wdHIpIGpwZWdfZ2V0X3NtYWxsKGNpbmZvLCBTSVpFT0YobXlfbWVtb3J5X21ncikpOworCisgIGlmIChtZW0gPT0gTlVMTCkgeworICAgIGpwZWdfbWVtX3Rlcm0oY2luZm8pOwkvKiBzeXN0ZW0tZGVwZW5kZW50IGNsZWFudXAgKi8KKyAgICBFUlJFWElUMShjaW5mbywgSkVSUl9PVVRfT0ZfTUVNT1JZLCAwKTsKKyAgfQorCisgIC8qIE9LLCBmaWxsIGluIHRoZSBtZXRob2QgcG9pbnRlcnMgKi8KKyAgbWVtLT5wdWIuYWxsb2Nfc21hbGwgPSBhbGxvY19zbWFsbDsKKyAgbWVtLT5wdWIuYWxsb2NfbGFyZ2UgPSBhbGxvY19sYXJnZTsKKyAgbWVtLT5wdWIuYWxsb2Nfc2FycmF5ID0gYWxsb2Nfc2FycmF5OworICBtZW0tPnB1Yi5hbGxvY19iYXJyYXkgPSBhbGxvY19iYXJyYXk7CisgIG1lbS0+cHViLnJlcXVlc3RfdmlydF9zYXJyYXkgPSByZXF1ZXN0X3ZpcnRfc2FycmF5OworICBtZW0tPnB1Yi5yZXF1ZXN0X3ZpcnRfYmFycmF5ID0gcmVxdWVzdF92aXJ0X2JhcnJheTsKKyAgbWVtLT5wdWIucmVhbGl6ZV92aXJ0X2FycmF5cyA9IHJlYWxpemVfdmlydF9hcnJheXM7CisgIG1lbS0+cHViLmFjY2Vzc192aXJ0X3NhcnJheSA9IGFjY2Vzc192aXJ0X3NhcnJheTsKKyAgbWVtLT5wdWIuYWNjZXNzX3ZpcnRfYmFycmF5ID0gYWNjZXNzX3ZpcnRfYmFycmF5OworICBtZW0tPnB1Yi5mcmVlX3Bvb2wgPSBmcmVlX3Bvb2w7CisgIG1lbS0+cHViLnNlbGZfZGVzdHJ1Y3QgPSBzZWxmX2Rlc3RydWN0OworCisgIC8qIE1ha2UgTUFYX0FMTE9DX0NIVU5LIGFjY2Vzc2libGUgdG8gb3RoZXIgbW9kdWxlcyAqLworICBtZW0tPnB1Yi5tYXhfYWxsb2NfY2h1bmsgPSBNQVhfQUxMT0NfQ0hVTks7CisKKyAgLyogSW5pdGlhbGl6ZSB3b3JraW5nIHN0YXRlICovCisgIG1lbS0+cHViLm1heF9tZW1vcnlfdG9fdXNlID0gbWF4X3RvX3VzZTsKKworICBmb3IgKHBvb2wgPSBKUE9PTF9OVU1QT09MUy0xOyBwb29sID49IEpQT09MX1BFUk1BTkVOVDsgcG9vbC0tKSB7CisgICAgbWVtLT5zbWFsbF9saXN0W3Bvb2xdID0gTlVMTDsKKyAgICBtZW0tPmxhcmdlX2xpc3RbcG9vbF0gPSBOVUxMOworICB9CisgIG1lbS0+dmlydF9zYXJyYXlfbGlzdCA9IE5VTEw7CisgIG1lbS0+dmlydF9iYXJyYXlfbGlzdCA9IE5VTEw7CisKKyAgbWVtLT50b3RhbF9zcGFjZV9hbGxvY2F0ZWQgPSBTSVpFT0YobXlfbWVtb3J5X21ncik7CisKKyAgLyogRGVjbGFyZSBvdXJzZWx2ZXMgb3BlbiBmb3IgYnVzaW5lc3MgKi8KKyAgY2luZm8tPm1lbSA9ICYgbWVtLT5wdWI7CisKKyAgLyogQ2hlY2sgZm9yIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIEpQRUdNRU07IGlmIGZvdW5kLCBvdmVycmlkZSB0aGUKKyAgICogZGVmYXVsdCBtYXhfbWVtb3J5IHNldHRpbmcgZnJvbSBqcGVnX21lbV9pbml0LiAgTm90ZSB0aGF0IHRoZQorICAgKiBzdXJyb3VuZGluZyBhcHBsaWNhdGlvbiBtYXkgYWdhaW4gb3ZlcnJpZGUgdGhpcyB2YWx1ZS4KKyAgICogSWYgeW91ciBzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IGdldGVudigpLCBkZWZpbmUgTk9fR0VURU5WIHRvIGRpc2FibGUKKyAgICogdGhpcyBmZWF0dXJlLgorICAgKi8KKyNpZm5kZWYgTk9fR0VURU5WCisgIHsgY2hhciAqIG1lbWVudjsKKworICAgIGlmICgobWVtZW52ID0gZ2V0ZW52KCJKUEVHTUVNIikpICE9IE5VTEwpIHsKKyAgICAgIGNoYXIgY2ggPSAneCc7CisKKyAgICAgIGlmIChzc2NhbmYobWVtZW52LCAiJWxkJWMiLCAmbWF4X3RvX3VzZSwgJmNoKSA+IDApIHsKKwlpZiAoY2ggPT0gJ20nIHx8IGNoID09ICdNJykKKwkgIG1heF90b191c2UgKj0gMTAwMEw7CisJbWVtLT5wdWIubWF4X21lbW9yeV90b191c2UgPSBtYXhfdG9fdXNlICogMTAwMEw7CisgICAgICB9CisgICAgfQorICB9CisjZW5kaWYKKworfQorCisjZW5kaWYgLy9fRlhfSlBFR19UVVJCT18KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2ptZW1ub2JzLmMgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qbWVtbm9icy5jCmluZGV4IDk4YWVkNzIuLmYxZjc4OWEgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2ptZW1ub2JzLmMKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ZwZGZhcGlfam1lbW5vYnMuYwpAQCAtMSwxMjYgKzEsMTI2IEBACi0jaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQ0KLS8qDQotICogam1lbW5vYnMuYw0KLSAqDQotICogQ29weXJpZ2h0IChDKSAxOTkyLTE5OTYsIFRob21hcyBHLiBMYW5lLg0KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuDQotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLg0KLSAqDQotICogVGhpcyBmaWxlIHByb3ZpZGVzIGEgcmVhbGx5IHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3lzdGVtLQ0KLSAqIGRlcGVuZGVudCBwb3J0aW9uIG9mIHRoZSBKUEVHIG1lbW9yeSBtYW5hZ2VyLiAgVGhpcyBpbXBsZW1lbnRhdGlvbg0KLSAqIGFzc3VtZXMgdGhhdCBubyBiYWNraW5nLXN0b3JlIGZpbGVzIGFyZSBuZWVkZWQ6IGFsbCByZXF1aXJlZCBzcGFjZQ0KLSAqIGNhbiBiZSBvYnRhaW5lZCBmcm9tIG1hbGxvYygpLg0KLSAqIFRoaXMgaXMgdmVyeSBwb3J0YWJsZSBpbiB0aGUgc2Vuc2UgdGhhdCBpdCdsbCBjb21waWxlIG9uIGFsbW9zdCBhbnl0aGluZywNCi0gKiBidXQgeW91J2QgYmV0dGVyIGhhdmUgbG90cyBvZiBtYWluIG1lbW9yeSAob3IgdmlydHVhbCBtZW1vcnkpIGlmIHlvdSB3YW50DQotICogdG8gcHJvY2VzcyBiaWcgaW1hZ2VzLg0KLSAqIE5vdGUgdGhhdCB0aGUgbWF4X21lbW9yeV90b191c2Ugb3B0aW9uIGlzIGlnbm9yZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbi4NCi0gKi8NCi0NCi0jZGVmaW5lIEpQRUdfSU5URVJOQUxTDQotI2luY2x1ZGUgImppbmNsdWRlLmgiDQotI2luY2x1ZGUgImpwZWdsaWIuaCINCi0jaW5jbHVkZSAiam1lbXN5cy5oIgkJLyogaW1wb3J0IHRoZSBzeXN0ZW0tZGVwZW5kZW50IGRlY2xhcmF0aW9ucyAqLw0KLQ0KLSNpZm5kZWYgSEFWRV9TVERMSUJfSAkJLyogPHN0ZGxpYi5oPiBzaG91bGQgZGVjbGFyZSBtYWxsb2MoKSxmcmVlKCkgKi8NCi1leHRlcm4gdm9pZCAqIG1hbGxvYyBKUFAoKHNpemVfdCBzaXplKSk7DQotZXh0ZXJuIHZvaWQgZnJlZSBKUFAoKHZvaWQgKnB0cikpOw0KLSNlbmRpZg0KLQ0KLSNpZiBkZWZpbmVkKF9GWF9NQU5BR0VEX0NPREVfKSAmJiBkZWZpbmVkKF9fY3BsdXNwbHVzKQ0KLWV4dGVybiAiQyIgew0KLSNlbmRpZg0KLQ0KLXZvaWQqCUZYTUVNX0RlZmF1bHRBbGxvYyhpbnQgYnl0ZV9zaXplLCBpbnQpOw0KLXZvaWQJRlhNRU1fRGVmYXVsdEZyZWUodm9pZCogcG9pbnRlciwgaW50KTsNCi0NCi0jaWYgZGVmaW5lZChfRlhfTUFOQUdFRF9DT0RFXykgJiYgZGVmaW5lZChfX2NwbHVzcGx1cykNCi19DQotI2VuZGlmDQotDQotLyoNCi0gKiBNZW1vcnkgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBhcmUgY29udHJvbGxlZCBieSB0aGUgcmVndWxhciBsaWJyYXJ5DQotICogcm91dGluZXMgbWFsbG9jKCkgYW5kIGZyZWUoKS4NCi0gKi8NCi0NCi1HTE9CQUwodm9pZCAqKQ0KLWpwZWdfZ2V0X3NtYWxsIChqX2NvbW1vbl9wdHIgY2luZm8sIHNpemVfdCBzaXplb2ZvYmplY3QpDQotew0KLS8vICByZXR1cm4gKHZvaWQgKikgbWFsbG9jKHNpemVvZm9iamVjdCk7DQotCXJldHVybiBGWE1FTV9EZWZhdWx0QWxsb2Moc2l6ZW9mb2JqZWN0LCAwKTsNCi19DQotDQotR0xPQkFMKHZvaWQpDQotanBlZ19mcmVlX3NtYWxsIChqX2NvbW1vbl9wdHIgY2luZm8sIHZvaWQgKiBvYmplY3QsIHNpemVfdCBzaXplb2ZvYmplY3QpDQotew0KLS8vICBmcmVlKG9iamVjdCk7DQotCUZYTUVNX0RlZmF1bHRGcmVlKG9iamVjdCwgMCk7DQotfQ0KLQ0KLQ0KLS8qDQotICogIkxhcmdlIiBvYmplY3RzIGFyZSB0cmVhdGVkIHRoZSBzYW1lIGFzICJzbWFsbCIgb25lcy4NCi0gKiBOQjogYWx0aG91Z2ggd2UgaW5jbHVkZSBGQVIga2V5d29yZHMgaW4gdGhlIHJvdXRpbmUgZGVjbGFyYXRpb25zLA0KLSAqIHRoaXMgZmlsZSB3b24ndCBhY3R1YWxseSB3b3JrIGluIDgweDg2IHNtYWxsL21lZGl1bSBtb2RlbDsgYXQgbGVhc3QsDQotICogeW91IHByb2JhYmx5IHdvbid0IGJlIGFibGUgdG8gcHJvY2VzcyB1c2VmdWwtc2l6ZSBpbWFnZXMgaW4gb25seSA2NEtCLg0KLSAqLw0KLQ0KLUdMT0JBTCh2b2lkIEZBUiAqKQ0KLWpwZWdfZ2V0X2xhcmdlIChqX2NvbW1vbl9wdHIgY2luZm8sIHNpemVfdCBzaXplb2ZvYmplY3QpDQotew0KLS8vICByZXR1cm4gKHZvaWQgRkFSICopIG1hbGxvYyhzaXplb2ZvYmplY3QpOw0KLQlyZXR1cm4gRlhNRU1fRGVmYXVsdEFsbG9jKHNpemVvZm9iamVjdCwgMCk7DQotfQ0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWpwZWdfZnJlZV9sYXJnZSAoal9jb21tb25fcHRyIGNpbmZvLCB2b2lkIEZBUiAqIG9iamVjdCwgc2l6ZV90IHNpemVvZm9iamVjdCkNCi17DQotLy8gIGZyZWUob2JqZWN0KTsNCi0JRlhNRU1fRGVmYXVsdEZyZWUob2JqZWN0LCAwKTsNCi19DQotDQotDQotLyoNCi0gKiBUaGlzIHJvdXRpbmUgY29tcHV0ZXMgdGhlIHRvdGFsIG1lbW9yeSBzcGFjZSBhdmFpbGFibGUgZm9yIGFsbG9jYXRpb24uDQotICogSGVyZSB3ZSBhbHdheXMgc2F5LCAid2UgZ290IGFsbCB5b3Ugd2FudCBidWQhIg0KLSAqLw0KLQ0KLUdMT0JBTChsb25nKQ0KLWpwZWdfbWVtX2F2YWlsYWJsZSAoal9jb21tb25fcHRyIGNpbmZvLCBsb25nIG1pbl9ieXRlc19uZWVkZWQsDQotCQkgICAgbG9uZyBtYXhfYnl0ZXNfbmVlZGVkLCBsb25nIGFscmVhZHlfYWxsb2NhdGVkKQ0KLXsNCi0gIHJldHVybiBtYXhfYnl0ZXNfbmVlZGVkOw0KLX0NCi0NCi0NCi0vKg0KLSAqIEJhY2tpbmcgc3RvcmUgKHRlbXBvcmFyeSBmaWxlKSBtYW5hZ2VtZW50Lg0KLSAqIFNpbmNlIGpwZWdfbWVtX2F2YWlsYWJsZSBhbHdheXMgcHJvbWlzZWQgdGhlIG1vb24sDQotICogdGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGFuZCB3ZSBjYW4ganVzdCBlcnJvciBvdXQuDQotICovDQotDQotR0xPQkFMKHZvaWQpDQotanBlZ19vcGVuX2JhY2tpbmdfc3RvcmUgKGpfY29tbW9uX3B0ciBjaW5mbywgYmFja2luZ19zdG9yZV9wdHIgaW5mbywNCi0JCQkgbG9uZyB0b3RhbF9ieXRlc19uZWVkZWQpDQotew0KLSAgRVJSRVhJVChjaW5mbywgSkVSUl9OT19CQUNLSU5HX1NUT1JFKTsNCi19DQotDQotDQotLyoNCi0gKiBUaGVzZSByb3V0aW5lcyB0YWtlIGNhcmUgb2YgYW55IHN5c3RlbS1kZXBlbmRlbnQgaW5pdGlhbGl6YXRpb24gYW5kDQotICogY2xlYW51cCByZXF1aXJlZC4gIEhlcmUsIHRoZXJlIGlzbid0IGFueS4NCi0gKi8NCi0NCi1HTE9CQUwobG9uZykNCi1qcGVnX21lbV9pbml0IChqX2NvbW1vbl9wdHIgY2luZm8pDQotew0KLSAgcmV0dXJuIDA7CQkJLyoganVzdCBzZXQgbWF4X21lbW9yeV90b191c2UgdG8gMCAqLw0KLX0NCi0NCi1HTE9CQUwodm9pZCkNCi1qcGVnX21lbV90ZXJtIChqX2NvbW1vbl9wdHIgY2luZm8pDQotew0KLSAgLyogbm8gd29yayAqLw0KLX0NCi0NCi0jZW5kaWYgLy9fRlhfSlBFR19UVVJCT18NCisjaWYgIWRlZmluZWQoX0ZYX0pQRUdfVFVSQk9fKQorLyoKKyAqIGptZW1ub2JzLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTItMTk5NiwgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBwcm92aWRlcyBhIHJlYWxseSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHN5c3RlbS0KKyAqIGRlcGVuZGVudCBwb3J0aW9uIG9mIHRoZSBKUEVHIG1lbW9yeSBtYW5hZ2VyLiAgVGhpcyBpbXBsZW1lbnRhdGlvbgorICogYXNzdW1lcyB0aGF0IG5vIGJhY2tpbmctc3RvcmUgZmlsZXMgYXJlIG5lZWRlZDogYWxsIHJlcXVpcmVkIHNwYWNlCisgKiBjYW4gYmUgb2J0YWluZWQgZnJvbSBtYWxsb2MoKS4KKyAqIFRoaXMgaXMgdmVyeSBwb3J0YWJsZSBpbiB0aGUgc2Vuc2UgdGhhdCBpdCdsbCBjb21waWxlIG9uIGFsbW9zdCBhbnl0aGluZywKKyAqIGJ1dCB5b3UnZCBiZXR0ZXIgaGF2ZSBsb3RzIG9mIG1haW4gbWVtb3J5IChvciB2aXJ0dWFsIG1lbW9yeSkgaWYgeW91IHdhbnQKKyAqIHRvIHByb2Nlc3MgYmlnIGltYWdlcy4KKyAqIE5vdGUgdGhhdCB0aGUgbWF4X21lbW9yeV90b191c2Ugb3B0aW9uIGlzIGlnbm9yZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAiam1lbXN5cy5oIgkJLyogaW1wb3J0IHRoZSBzeXN0ZW0tZGVwZW5kZW50IGRlY2xhcmF0aW9ucyAqLworCisjaWZuZGVmIEhBVkVfU1RETElCX0gJCS8qIDxzdGRsaWIuaD4gc2hvdWxkIGRlY2xhcmUgbWFsbG9jKCksZnJlZSgpICovCitleHRlcm4gdm9pZCAqIG1hbGxvYyBKUFAoKHNpemVfdCBzaXplKSk7CitleHRlcm4gdm9pZCBmcmVlIEpQUCgodm9pZCAqcHRyKSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0ZYX01BTkFHRURfQ09ERV8pICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit2b2lkKglGWE1FTV9EZWZhdWx0QWxsb2MoaW50IGJ5dGVfc2l6ZSwgaW50KTsKK3ZvaWQJRlhNRU1fRGVmYXVsdEZyZWUodm9pZCogcG9pbnRlciwgaW50KTsKKworI2lmIGRlZmluZWQoX0ZYX01BTkFHRURfQ09ERV8pICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKworLyoKKyAqIE1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGFyZSBjb250cm9sbGVkIGJ5IHRoZSByZWd1bGFyIGxpYnJhcnkKKyAqIHJvdXRpbmVzIG1hbGxvYygpIGFuZCBmcmVlKCkuCisgKi8KKworR0xPQkFMKHZvaWQgKikKK2pwZWdfZ2V0X3NtYWxsIChqX2NvbW1vbl9wdHIgY2luZm8sIHNpemVfdCBzaXplb2ZvYmplY3QpCit7CisvLyAgcmV0dXJuICh2b2lkICopIG1hbGxvYyhzaXplb2ZvYmplY3QpOworCXJldHVybiBGWE1FTV9EZWZhdWx0QWxsb2Moc2l6ZW9mb2JqZWN0LCAwKTsKK30KKworR0xPQkFMKHZvaWQpCitqcGVnX2ZyZWVfc21hbGwgKGpfY29tbW9uX3B0ciBjaW5mbywgdm9pZCAqIG9iamVjdCwgc2l6ZV90IHNpemVvZm9iamVjdCkKK3sKKy8vICBmcmVlKG9iamVjdCk7CisJRlhNRU1fRGVmYXVsdEZyZWUob2JqZWN0LCAwKTsKK30KKworCisvKgorICogIkxhcmdlIiBvYmplY3RzIGFyZSB0cmVhdGVkIHRoZSBzYW1lIGFzICJzbWFsbCIgb25lcy4KKyAqIE5COiBhbHRob3VnaCB3ZSBpbmNsdWRlIEZBUiBrZXl3b3JkcyBpbiB0aGUgcm91dGluZSBkZWNsYXJhdGlvbnMsCisgKiB0aGlzIGZpbGUgd29uJ3QgYWN0dWFsbHkgd29yayBpbiA4MHg4NiBzbWFsbC9tZWRpdW0gbW9kZWw7IGF0IGxlYXN0LAorICogeW91IHByb2JhYmx5IHdvbid0IGJlIGFibGUgdG8gcHJvY2VzcyB1c2VmdWwtc2l6ZSBpbWFnZXMgaW4gb25seSA2NEtCLgorICovCisKK0dMT0JBTCh2b2lkIEZBUiAqKQoranBlZ19nZXRfbGFyZ2UgKGpfY29tbW9uX3B0ciBjaW5mbywgc2l6ZV90IHNpemVvZm9iamVjdCkKK3sKKy8vICByZXR1cm4gKHZvaWQgRkFSICopIG1hbGxvYyhzaXplb2ZvYmplY3QpOworCXJldHVybiBGWE1FTV9EZWZhdWx0QWxsb2Moc2l6ZW9mb2JqZWN0LCAwKTsKK30KKworR0xPQkFMKHZvaWQpCitqcGVnX2ZyZWVfbGFyZ2UgKGpfY29tbW9uX3B0ciBjaW5mbywgdm9pZCBGQVIgKiBvYmplY3QsIHNpemVfdCBzaXplb2ZvYmplY3QpCit7CisvLyAgZnJlZShvYmplY3QpOworCUZYTUVNX0RlZmF1bHRGcmVlKG9iamVjdCwgMCk7Cit9CisKKworLyoKKyAqIFRoaXMgcm91dGluZSBjb21wdXRlcyB0aGUgdG90YWwgbWVtb3J5IHNwYWNlIGF2YWlsYWJsZSBmb3IgYWxsb2NhdGlvbi4KKyAqIEhlcmUgd2UgYWx3YXlzIHNheSwgIndlIGdvdCBhbGwgeW91IHdhbnQgYnVkISIKKyAqLworCitHTE9CQUwobG9uZykKK2pwZWdfbWVtX2F2YWlsYWJsZSAoal9jb21tb25fcHRyIGNpbmZvLCBsb25nIG1pbl9ieXRlc19uZWVkZWQsCisJCSAgICBsb25nIG1heF9ieXRlc19uZWVkZWQsIGxvbmcgYWxyZWFkeV9hbGxvY2F0ZWQpCit7CisgIHJldHVybiBtYXhfYnl0ZXNfbmVlZGVkOworfQorCisKKy8qCisgKiBCYWNraW5nIHN0b3JlICh0ZW1wb3JhcnkgZmlsZSkgbWFuYWdlbWVudC4KKyAqIFNpbmNlIGpwZWdfbWVtX2F2YWlsYWJsZSBhbHdheXMgcHJvbWlzZWQgdGhlIG1vb24sCisgKiB0aGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgYW5kIHdlIGNhbiBqdXN0IGVycm9yIG91dC4KKyAqLworCitHTE9CQUwodm9pZCkKK2pwZWdfb3Blbl9iYWNraW5nX3N0b3JlIChqX2NvbW1vbl9wdHIgY2luZm8sIGJhY2tpbmdfc3RvcmVfcHRyIGluZm8sCisJCQkgbG9uZyB0b3RhbF9ieXRlc19uZWVkZWQpCit7CisgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9fQkFDS0lOR19TVE9SRSk7Cit9CisKKworLyoKKyAqIFRoZXNlIHJvdXRpbmVzIHRha2UgY2FyZSBvZiBhbnkgc3lzdGVtLWRlcGVuZGVudCBpbml0aWFsaXphdGlvbiBhbmQKKyAqIGNsZWFudXAgcmVxdWlyZWQuICBIZXJlLCB0aGVyZSBpc24ndCBhbnkuCisgKi8KKworR0xPQkFMKGxvbmcpCitqcGVnX21lbV9pbml0IChqX2NvbW1vbl9wdHIgY2luZm8pCit7CisgIHJldHVybiAwOwkJCS8qIGp1c3Qgc2V0IG1heF9tZW1vcnlfdG9fdXNlIHRvIDAgKi8KK30KKworR0xPQkFMKHZvaWQpCitqcGVnX21lbV90ZXJtIChqX2NvbW1vbl9wdHIgY2luZm8pCit7CisgIC8qIG5vIHdvcmsgKi8KK30KKworI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvZnBkZmFwaV9qdXRpbHMuYyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2p1dGlscy5jCmluZGV4IDI1MWZkNTAuLmM2ZjcyNDggMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2p1dGlscy5jCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9mcGRmYXBpX2p1dGlscy5jCkBAIC0xLDE4MiArMSwxODIgQEAKLSNpZiAhZGVmaW5lZChfRlhfSlBFR19UVVJCT18pDQotLyoNCi0gKiBqdXRpbHMuYw0KLSAqDQotICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTYsIFRob21hcyBHLiBMYW5lLg0KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuDQotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLg0KLSAqDQotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRhYmxlcyBhbmQgbWlzY2VsbGFuZW91cyB1dGlsaXR5IHJvdXRpbmVzIG5lZWRlZA0KLSAqIGZvciBib3RoIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uLg0KLSAqIE5vdGUgd2UgcHJlZml4IGFsbCBnbG9iYWwgbmFtZXMgd2l0aCAiaiIgdG8gbWluaW1pemUgY29uZmxpY3RzIHdpdGgNCi0gKiBhIHN1cnJvdW5kaW5nIGFwcGxpY2F0aW9uLg0KLSAqLw0KLQ0KLSNkZWZpbmUgSlBFR19JTlRFUk5BTFMNCi0jaW5jbHVkZSAiamluY2x1ZGUuaCINCi0jaW5jbHVkZSAianBlZ2xpYi5oIg0KLQ0KLQ0KLS8qDQotICoganBlZ196aWd6YWdfb3JkZXJbaV0gaXMgdGhlIHppZ3phZy1vcmRlciBwb3NpdGlvbiBvZiB0aGUgaSd0aCBlbGVtZW50DQotICogb2YgYSBEQ1QgYmxvY2sgcmVhZCBpbiBuYXR1cmFsIG9yZGVyIChsZWZ0IHRvIHJpZ2h0LCB0b3AgdG8gYm90dG9tKS4NCi0gKi8NCi0NCi0jaWYgMAkJCQkvKiBUaGlzIHRhYmxlIGlzIG5vdCBhY3R1YWxseSBuZWVkZWQgaW4gdjZhICovDQotDQotY29uc3QgaW50IGpwZWdfemlnemFnX29yZGVyW0RDVFNJWkUyXSA9IHsNCi0gICAwLCAgMSwgIDUsICA2LCAxNCwgMTUsIDI3LCAyOCwNCi0gICAyLCAgNCwgIDcsIDEzLCAxNiwgMjYsIDI5LCA0MiwNCi0gICAzLCAgOCwgMTIsIDE3LCAyNSwgMzAsIDQxLCA0MywNCi0gICA5LCAxMSwgMTgsIDI0LCAzMSwgNDAsIDQ0LCA1MywNCi0gIDEwLCAxOSwgMjMsIDMyLCAzOSwgNDUsIDUyLCA1NCwNCi0gIDIwLCAyMiwgMzMsIDM4LCA0NiwgNTEsIDU1LCA2MCwNCi0gIDIxLCAzNCwgMzcsIDQ3LCA1MCwgNTYsIDU5LCA2MSwNCi0gIDM1LCAzNiwgNDgsIDQ5LCA1NywgNTgsIDYyLCA2Mw0KLX07DQotDQotI2VuZGlmDQotDQotLyoNCi0gKiBqcGVnX25hdHVyYWxfb3JkZXJbaV0gaXMgdGhlIG5hdHVyYWwtb3JkZXIgcG9zaXRpb24gb2YgdGhlIGkndGggZWxlbWVudA0KLSAqIG9mIHppZ3phZyBvcmRlci4NCi0gKg0KLSAqIFdoZW4gcmVhZGluZyBjb3JydXB0ZWQgZGF0YSwgdGhlIEh1ZmZtYW4gZGVjb2RlcnMgY291bGQgYXR0ZW1wdA0KLSAqIHRvIHJlZmVyZW5jZSBhbiBlbnRyeSBiZXlvbmQgdGhlIGVuZCBvZiB0aGlzIGFycmF5IChpZiB0aGUgZGVjb2RlZA0KLSAqIHplcm8gcnVuIGxlbmd0aCByZWFjaGVzIHBhc3QgdGhlIGVuZCBvZiB0aGUgYmxvY2spLiAgVG8gcHJldmVudA0KLSAqIHdpbGQgc3RvcmVzIHdpdGhvdXQgYWRkaW5nIGFuIGlubmVyLWxvb3AgdGVzdCwgd2UgcHV0IHNvbWUgZXh0cmENCi0gKiAiNjMicyBhZnRlciB0aGUgcmVhbCBlbnRyaWVzLiAgVGhpcyB3aWxsIGNhdXNlIHRoZSBleHRyYSBjb2VmZmljaWVudA0KLSAqIHRvIGJlIHN0b3JlZCBpbiBsb2NhdGlvbiA2MyBvZiB0aGUgYmxvY2ssIG5vdCBzb21ld2hlcmUgcmFuZG9tLg0KLSAqIFRoZSB3b3JzdCBjYXNlIHdvdWxkIGJlIGEgcnVuLWxlbmd0aCBvZiAxNSwgd2hpY2ggbWVhbnMgd2UgbmVlZCAxNg0KLSAqIGZha2UgZW50cmllcy4NCi0gKi8NCi0NCi1jb25zdCBpbnQganBlZ19uYXR1cmFsX29yZGVyW0RDVFNJWkUyKzE2XSA9IHsNCi0gIDAsICAxLCAgOCwgMTYsICA5LCAgMiwgIDMsIDEwLA0KLSAxNywgMjQsIDMyLCAyNSwgMTgsIDExLCAgNCwgIDUsDQotIDEyLCAxOSwgMjYsIDMzLCA0MCwgNDgsIDQxLCAzNCwNCi0gMjcsIDIwLCAxMywgIDYsICA3LCAxNCwgMjEsIDI4LA0KLSAzNSwgNDIsIDQ5LCA1NiwgNTcsIDUwLCA0MywgMzYsDQotIDI5LCAyMiwgMTUsIDIzLCAzMCwgMzcsIDQ0LCA1MSwNCi0gNTgsIDU5LCA1MiwgNDUsIDM4LCAzMSwgMzksIDQ2LA0KLSA1MywgNjAsIDYxLCA1NCwgNDcsIDU1LCA2MiwgNjMsDQotIDYzLCA2MywgNjMsIDYzLCA2MywgNjMsIDYzLCA2MywgLyogZXh0cmEgZW50cmllcyBmb3Igc2FmZXR5IGluIGRlY29kZXIgKi8NCi0gNjMsIDYzLCA2MywgNjMsIDYzLCA2MywgNjMsIDYzDQotfTsNCi0NCi0NCi0vKg0KLSAqIEFyaXRobWV0aWMgdXRpbGl0aWVzDQotICovDQotDQotR0xPQkFMKGxvbmcpDQotamRpdl9yb3VuZF91cCAobG9uZyBhLCBsb25nIGIpDQotLyogQ29tcHV0ZSBhL2Igcm91bmRlZCB1cCB0byBuZXh0IGludGVnZXIsIGllLCBjZWlsKGEvYikgKi8NCi0vKiBBc3N1bWVzIGEgPj0gMCwgYiA+IDAgKi8NCi17DQotICByZXR1cm4gKGEgKyBiIC0gMUwpIC8gYjsNCi19DQotDQotDQotR0xPQkFMKGxvbmcpDQotanJvdW5kX3VwIChsb25nIGEsIGxvbmcgYikNCi0vKiBDb21wdXRlIGEgcm91bmRlZCB1cCB0byBuZXh0IG11bHRpcGxlIG9mIGIsIGllLCBjZWlsKGEvYikqYiAqLw0KLS8qIEFzc3VtZXMgYSA+PSAwLCBiID4gMCAqLw0KLXsNCi0gIGEgKz0gYiAtIDFMOw0KLSAgcmV0dXJuIGEgLSAoYSAlIGIpOw0KLX0NCi0NCi0NCi0vKiBPbiBub3JtYWwgbWFjaGluZXMgd2UgY2FuIGFwcGx5IE1FTUNPUFkoKSBhbmQgTUVNWkVSTygpIHRvIHNhbXBsZSBhcnJheXMNCi0gKiBhbmQgY29lZmZpY2llbnQtYmxvY2sgYXJyYXlzLiAgVGhpcyB3b24ndCB3b3JrIG9uIDgweDg2IGJlY2F1c2UgdGhlIGFycmF5cw0KLSAqIGFyZSBGQVIgYW5kIHdlJ3JlIGFzc3VtaW5nIGEgc21hbGwtcG9pbnRlciBtZW1vcnkgbW9kZWwuICBIb3dldmVyLCBzb21lDQotICogRE9TIGNvbXBpbGVycyBwcm92aWRlIGZhci1wb2ludGVyIHZlcnNpb25zIG9mIG1lbWNweSgpIGFuZCBtZW1zZXQoKSBldmVuDQotICogaW4gdGhlIHNtYWxsLW1vZGVsIGxpYnJhcmllcy4gIFRoZXNlIHdpbGwgYmUgdXNlZCBpZiBVU0VfRk1FTSBpcyBkZWZpbmVkLg0KLSAqIE90aGVyd2lzZSwgdGhlIHJvdXRpbmVzIGJlbG93IGRvIGl0IHRoZSBoYXJkIHdheS4gIChUaGUgcGVyZm9ybWFuY2UgY29zdA0KLSAqIGlzIG5vdCBhbGwgdGhhdCBncmVhdCwgYmVjYXVzZSB0aGVzZSByb3V0aW5lcyBhcmVuJ3QgdmVyeSBoZWF2aWx5IHVzZWQuKQ0KLSAqLw0KLQ0KLSNpZm5kZWYgTkVFRF9GQVJfUE9JTlRFUlMJLyogbm9ybWFsIGNhc2UsIHNhbWUgYXMgcmVndWxhciBtYWNyb3MgKi8NCi0jZGVmaW5lIEZNRU1DT1BZKGRlc3Qsc3JjLHNpemUpCU1FTUNPUFkoZGVzdCxzcmMsc2l6ZSkNCi0jZGVmaW5lIEZNRU1aRVJPKHRhcmdldCxzaXplKQlNRU1aRVJPKHRhcmdldCxzaXplKQ0KLSNlbHNlCQkJCS8qIDgweDg2IGNhc2UsIGRlZmluZSBpZiB3ZSBjYW4gKi8NCi0jaWZkZWYgVVNFX0ZNRU0NCi0jZGVmaW5lIEZNRU1DT1BZKGRlc3Qsc3JjLHNpemUpCV9mbWVtY3B5KCh2b2lkIEZBUiAqKShkZXN0KSwgKGNvbnN0IHZvaWQgRkFSICopKHNyYyksIChzaXplX3QpKHNpemUpKQ0KLSNkZWZpbmUgRk1FTVpFUk8odGFyZ2V0LHNpemUpCV9mbWVtc2V0KCh2b2lkIEZBUiAqKSh0YXJnZXQpLCAwLCAoc2l6ZV90KShzaXplKSkNCi0jZW5kaWYNCi0jZW5kaWYNCi0NCi0NCi1HTE9CQUwodm9pZCkNCi1qY29weV9zYW1wbGVfcm93cyAoSlNBTVBBUlJBWSBpbnB1dF9hcnJheSwgaW50IHNvdXJjZV9yb3csDQotCQkgICBKU0FNUEFSUkFZIG91dHB1dF9hcnJheSwgaW50IGRlc3Rfcm93LA0KLQkJICAgaW50IG51bV9yb3dzLCBKRElNRU5TSU9OIG51bV9jb2xzKQ0KLS8qIENvcHkgc29tZSByb3dzIG9mIHNhbXBsZXMgZnJvbSBvbmUgcGxhY2UgdG8gYW5vdGhlci4NCi0gKiBudW1fcm93cyByb3dzIGFyZSBjb3BpZWQgZnJvbSBpbnB1dF9hcnJheVtzb3VyY2Vfcm93KytdDQotICogdG8gb3V0cHV0X2FycmF5W2Rlc3Rfcm93KytdOyB0aGVzZSBhcmVhcyBtYXkgb3ZlcmxhcCBmb3IgZHVwbGljYXRpb24uDQotICogVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJyYXlzIG11c3QgYmUgYXQgbGVhc3QgYXMgd2lkZSBhcyBudW1fY29scy4NCi0gKi8NCi17DQotICByZWdpc3RlciBKU0FNUFJPVyBpbnB0ciwgb3V0cHRyOw0KLSNpZmRlZiBGTUVNQ09QWQ0KLSAgcmVnaXN0ZXIgc2l6ZV90IGNvdW50ID0gKHNpemVfdCkgKG51bV9jb2xzICogU0laRU9GKEpTQU1QTEUpKTsNCi0jZWxzZQ0KLSAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb3VudDsNCi0jZW5kaWYNCi0gIHJlZ2lzdGVyIGludCByb3c7DQotDQotICBpbnB1dF9hcnJheSArPSBzb3VyY2Vfcm93Ow0KLSAgb3V0cHV0X2FycmF5ICs9IGRlc3Rfcm93Ow0KLQ0KLSAgZm9yIChyb3cgPSBudW1fcm93czsgcm93ID4gMDsgcm93LS0pIHsNCi0gICAgaW5wdHIgPSAqaW5wdXRfYXJyYXkrKzsNCi0gICAgb3V0cHRyID0gKm91dHB1dF9hcnJheSsrOw0KLSNpZmRlZiBGTUVNQ09QWQ0KLSAgICBGTUVNQ09QWShvdXRwdHIsIGlucHRyLCBjb3VudCk7DQotI2Vsc2UNCi0gICAgZm9yIChjb3VudCA9IG51bV9jb2xzOyBjb3VudCA+IDA7IGNvdW50LS0pDQotICAgICAgKm91dHB0cisrID0gKmlucHRyKys7CS8qIG5lZWRuJ3QgYm90aGVyIHdpdGggR0VUSlNBTVBMRSgpIGhlcmUgKi8NCi0jZW5kaWYNCi0gIH0NCi19DQotDQotDQotR0xPQkFMKHZvaWQpDQotamNvcHlfYmxvY2tfcm93IChKQkxPQ0tST1cgaW5wdXRfcm93LCBKQkxPQ0tST1cgb3V0cHV0X3JvdywNCi0JCSBKRElNRU5TSU9OIG51bV9ibG9ja3MpDQotLyogQ29weSBhIHJvdyBvZiBjb2VmZmljaWVudCBibG9ja3MgZnJvbSBvbmUgcGxhY2UgdG8gYW5vdGhlci4gKi8NCi17DQotI2lmZGVmIEZNRU1DT1BZDQotICBGTUVNQ09QWShvdXRwdXRfcm93LCBpbnB1dF9yb3csIG51bV9ibG9ja3MgKiAoRENUU0laRTIgKiBTSVpFT0YoSkNPRUYpKSk7DQotI2Vsc2UNCi0gIHJlZ2lzdGVyIEpDT0VGUFRSIGlucHRyLCBvdXRwdHI7DQotICByZWdpc3RlciBsb25nIGNvdW50Ow0KLQ0KLSAgaW5wdHIgPSAoSkNPRUZQVFIpIGlucHV0X3JvdzsNCi0gIG91dHB0ciA9IChKQ09FRlBUUikgb3V0cHV0X3JvdzsNCi0gIGZvciAoY291bnQgPSAobG9uZykgbnVtX2Jsb2NrcyAqIERDVFNJWkUyOyBjb3VudCA+IDA7IGNvdW50LS0pIHsNCi0gICAgKm91dHB0cisrID0gKmlucHRyKys7DQotICB9DQotI2VuZGlmDQotfQ0KLQ0KLQ0KLUdMT0JBTCh2b2lkKQ0KLWp6ZXJvX2ZhciAodm9pZCBGQVIgKiB0YXJnZXQsIHNpemVfdCBieXRlc3RvemVybykNCi0vKiBaZXJvIG91dCBhIGNodW5rIG9mIEZBUiBtZW1vcnkuICovDQotLyogVGhpcyBtaWdodCBiZSBzYW1wbGUtYXJyYXkgZGF0YSwgYmxvY2stYXJyYXkgZGF0YSwgb3IgYWxsb2NfbGFyZ2UgZGF0YS4gKi8NCi17DQotI2lmZGVmIEZNRU1aRVJPDQotICBGTUVNWkVSTyh0YXJnZXQsIGJ5dGVzdG96ZXJvKTsNCi0jZWxzZQ0KLSAgcmVnaXN0ZXIgY2hhciBGQVIgKiBwdHIgPSAoY2hhciBGQVIgKikgdGFyZ2V0Ow0KLSAgcmVnaXN0ZXIgc2l6ZV90IGNvdW50Ow0KLQ0KLSAgZm9yIChjb3VudCA9IGJ5dGVzdG96ZXJvOyBjb3VudCA+IDA7IGNvdW50LS0pIHsNCi0gICAgKnB0cisrID0gMDsNCi0gIH0NCi0jZW5kaWYNCi19DQotDQotI2VuZGlmIC8vX0ZYX0pQRUdfVFVSQk9fDQorI2lmICFkZWZpbmVkKF9GWF9KUEVHX1RVUkJPXykKKy8qCisgKiBqdXRpbHMuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRhYmxlcyBhbmQgbWlzY2VsbGFuZW91cyB1dGlsaXR5IHJvdXRpbmVzIG5lZWRlZAorICogZm9yIGJvdGggY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24uCisgKiBOb3RlIHdlIHByZWZpeCBhbGwgZ2xvYmFsIG5hbWVzIHdpdGggImoiIHRvIG1pbmltaXplIGNvbmZsaWN0cyB3aXRoCisgKiBhIHN1cnJvdW5kaW5nIGFwcGxpY2F0aW9uLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKworCisvKgorICoganBlZ196aWd6YWdfb3JkZXJbaV0gaXMgdGhlIHppZ3phZy1vcmRlciBwb3NpdGlvbiBvZiB0aGUgaSd0aCBlbGVtZW50CisgKiBvZiBhIERDVCBibG9jayByZWFkIGluIG5hdHVyYWwgb3JkZXIgKGxlZnQgdG8gcmlnaHQsIHRvcCB0byBib3R0b20pLgorICovCisKKyNpZiAwCQkJCS8qIFRoaXMgdGFibGUgaXMgbm90IGFjdHVhbGx5IG5lZWRlZCBpbiB2NmEgKi8KKworY29uc3QgaW50IGpwZWdfemlnemFnX29yZGVyW0RDVFNJWkUyXSA9IHsKKyAgIDAsICAxLCAgNSwgIDYsIDE0LCAxNSwgMjcsIDI4LAorICAgMiwgIDQsICA3LCAxMywgMTYsIDI2LCAyOSwgNDIsCisgICAzLCAgOCwgMTIsIDE3LCAyNSwgMzAsIDQxLCA0MywKKyAgIDksIDExLCAxOCwgMjQsIDMxLCA0MCwgNDQsIDUzLAorICAxMCwgMTksIDIzLCAzMiwgMzksIDQ1LCA1MiwgNTQsCisgIDIwLCAyMiwgMzMsIDM4LCA0NiwgNTEsIDU1LCA2MCwKKyAgMjEsIDM0LCAzNywgNDcsIDUwLCA1NiwgNTksIDYxLAorICAzNSwgMzYsIDQ4LCA0OSwgNTcsIDU4LCA2MiwgNjMKK307CisKKyNlbmRpZgorCisvKgorICoganBlZ19uYXR1cmFsX29yZGVyW2ldIGlzIHRoZSBuYXR1cmFsLW9yZGVyIHBvc2l0aW9uIG9mIHRoZSBpJ3RoIGVsZW1lbnQKKyAqIG9mIHppZ3phZyBvcmRlci4KKyAqCisgKiBXaGVuIHJlYWRpbmcgY29ycnVwdGVkIGRhdGEsIHRoZSBIdWZmbWFuIGRlY29kZXJzIGNvdWxkIGF0dGVtcHQKKyAqIHRvIHJlZmVyZW5jZSBhbiBlbnRyeSBiZXlvbmQgdGhlIGVuZCBvZiB0aGlzIGFycmF5IChpZiB0aGUgZGVjb2RlZAorICogemVybyBydW4gbGVuZ3RoIHJlYWNoZXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBibG9jaykuICBUbyBwcmV2ZW50CisgKiB3aWxkIHN0b3JlcyB3aXRob3V0IGFkZGluZyBhbiBpbm5lci1sb29wIHRlc3QsIHdlIHB1dCBzb21lIGV4dHJhCisgKiAiNjMicyBhZnRlciB0aGUgcmVhbCBlbnRyaWVzLiAgVGhpcyB3aWxsIGNhdXNlIHRoZSBleHRyYSBjb2VmZmljaWVudAorICogdG8gYmUgc3RvcmVkIGluIGxvY2F0aW9uIDYzIG9mIHRoZSBibG9jaywgbm90IHNvbWV3aGVyZSByYW5kb20uCisgKiBUaGUgd29yc3QgY2FzZSB3b3VsZCBiZSBhIHJ1bi1sZW5ndGggb2YgMTUsIHdoaWNoIG1lYW5zIHdlIG5lZWQgMTYKKyAqIGZha2UgZW50cmllcy4KKyAqLworCitjb25zdCBpbnQganBlZ19uYXR1cmFsX29yZGVyW0RDVFNJWkUyKzE2XSA9IHsKKyAgMCwgIDEsICA4LCAxNiwgIDksICAyLCAgMywgMTAsCisgMTcsIDI0LCAzMiwgMjUsIDE4LCAxMSwgIDQsICA1LAorIDEyLCAxOSwgMjYsIDMzLCA0MCwgNDgsIDQxLCAzNCwKKyAyNywgMjAsIDEzLCAgNiwgIDcsIDE0LCAyMSwgMjgsCisgMzUsIDQyLCA0OSwgNTYsIDU3LCA1MCwgNDMsIDM2LAorIDI5LCAyMiwgMTUsIDIzLCAzMCwgMzcsIDQ0LCA1MSwKKyA1OCwgNTksIDUyLCA0NSwgMzgsIDMxLCAzOSwgNDYsCisgNTMsIDYwLCA2MSwgNTQsIDQ3LCA1NSwgNjIsIDYzLAorIDYzLCA2MywgNjMsIDYzLCA2MywgNjMsIDYzLCA2MywgLyogZXh0cmEgZW50cmllcyBmb3Igc2FmZXR5IGluIGRlY29kZXIgKi8KKyA2MywgNjMsIDYzLCA2MywgNjMsIDYzLCA2MywgNjMKK307CisKKworLyoKKyAqIEFyaXRobWV0aWMgdXRpbGl0aWVzCisgKi8KKworR0xPQkFMKGxvbmcpCitqZGl2X3JvdW5kX3VwIChsb25nIGEsIGxvbmcgYikKKy8qIENvbXB1dGUgYS9iIHJvdW5kZWQgdXAgdG8gbmV4dCBpbnRlZ2VyLCBpZSwgY2VpbChhL2IpICovCisvKiBBc3N1bWVzIGEgPj0gMCwgYiA+IDAgKi8KK3sKKyAgcmV0dXJuIChhICsgYiAtIDFMKSAvIGI7Cit9CisKKworR0xPQkFMKGxvbmcpCitqcm91bmRfdXAgKGxvbmcgYSwgbG9uZyBiKQorLyogQ29tcHV0ZSBhIHJvdW5kZWQgdXAgdG8gbmV4dCBtdWx0aXBsZSBvZiBiLCBpZSwgY2VpbChhL2IpKmIgKi8KKy8qIEFzc3VtZXMgYSA+PSAwLCBiID4gMCAqLworeworICBhICs9IGIgLSAxTDsKKyAgcmV0dXJuIGEgLSAoYSAlIGIpOworfQorCisKKy8qIE9uIG5vcm1hbCBtYWNoaW5lcyB3ZSBjYW4gYXBwbHkgTUVNQ09QWSgpIGFuZCBNRU1aRVJPKCkgdG8gc2FtcGxlIGFycmF5cworICogYW5kIGNvZWZmaWNpZW50LWJsb2NrIGFycmF5cy4gIFRoaXMgd29uJ3Qgd29yayBvbiA4MHg4NiBiZWNhdXNlIHRoZSBhcnJheXMKKyAqIGFyZSBGQVIgYW5kIHdlJ3JlIGFzc3VtaW5nIGEgc21hbGwtcG9pbnRlciBtZW1vcnkgbW9kZWwuICBIb3dldmVyLCBzb21lCisgKiBET1MgY29tcGlsZXJzIHByb3ZpZGUgZmFyLXBvaW50ZXIgdmVyc2lvbnMgb2YgbWVtY3B5KCkgYW5kIG1lbXNldCgpIGV2ZW4KKyAqIGluIHRoZSBzbWFsbC1tb2RlbCBsaWJyYXJpZXMuICBUaGVzZSB3aWxsIGJlIHVzZWQgaWYgVVNFX0ZNRU0gaXMgZGVmaW5lZC4KKyAqIE90aGVyd2lzZSwgdGhlIHJvdXRpbmVzIGJlbG93IGRvIGl0IHRoZSBoYXJkIHdheS4gIChUaGUgcGVyZm9ybWFuY2UgY29zdAorICogaXMgbm90IGFsbCB0aGF0IGdyZWF0LCBiZWNhdXNlIHRoZXNlIHJvdXRpbmVzIGFyZW4ndCB2ZXJ5IGhlYXZpbHkgdXNlZC4pCisgKi8KKworI2lmbmRlZiBORUVEX0ZBUl9QT0lOVEVSUwkvKiBub3JtYWwgY2FzZSwgc2FtZSBhcyByZWd1bGFyIG1hY3JvcyAqLworI2RlZmluZSBGTUVNQ09QWShkZXN0LHNyYyxzaXplKQlNRU1DT1BZKGRlc3Qsc3JjLHNpemUpCisjZGVmaW5lIEZNRU1aRVJPKHRhcmdldCxzaXplKQlNRU1aRVJPKHRhcmdldCxzaXplKQorI2Vsc2UJCQkJLyogODB4ODYgY2FzZSwgZGVmaW5lIGlmIHdlIGNhbiAqLworI2lmZGVmIFVTRV9GTUVNCisjZGVmaW5lIEZNRU1DT1BZKGRlc3Qsc3JjLHNpemUpCV9mbWVtY3B5KCh2b2lkIEZBUiAqKShkZXN0KSwgKGNvbnN0IHZvaWQgRkFSICopKHNyYyksIChzaXplX3QpKHNpemUpKQorI2RlZmluZSBGTUVNWkVSTyh0YXJnZXQsc2l6ZSkJX2ZtZW1zZXQoKHZvaWQgRkFSICopKHRhcmdldCksIDAsIChzaXplX3QpKHNpemUpKQorI2VuZGlmCisjZW5kaWYKKworCitHTE9CQUwodm9pZCkKK2pjb3B5X3NhbXBsZV9yb3dzIChKU0FNUEFSUkFZIGlucHV0X2FycmF5LCBpbnQgc291cmNlX3JvdywKKwkJICAgSlNBTVBBUlJBWSBvdXRwdXRfYXJyYXksIGludCBkZXN0X3JvdywKKwkJICAgaW50IG51bV9yb3dzLCBKRElNRU5TSU9OIG51bV9jb2xzKQorLyogQ29weSBzb21lIHJvd3Mgb2Ygc2FtcGxlcyBmcm9tIG9uZSBwbGFjZSB0byBhbm90aGVyLgorICogbnVtX3Jvd3Mgcm93cyBhcmUgY29waWVkIGZyb20gaW5wdXRfYXJyYXlbc291cmNlX3JvdysrXQorICogdG8gb3V0cHV0X2FycmF5W2Rlc3Rfcm93KytdOyB0aGVzZSBhcmVhcyBtYXkgb3ZlcmxhcCBmb3IgZHVwbGljYXRpb24uCisgKiBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcnJheXMgbXVzdCBiZSBhdCBsZWFzdCBhcyB3aWRlIGFzIG51bV9jb2xzLgorICovCit7CisgIHJlZ2lzdGVyIEpTQU1QUk9XIGlucHRyLCBvdXRwdHI7CisjaWZkZWYgRk1FTUNPUFkKKyAgcmVnaXN0ZXIgc2l6ZV90IGNvdW50ID0gKHNpemVfdCkgKG51bV9jb2xzICogU0laRU9GKEpTQU1QTEUpKTsKKyNlbHNlCisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY291bnQ7CisjZW5kaWYKKyAgcmVnaXN0ZXIgaW50IHJvdzsKKworICBpbnB1dF9hcnJheSArPSBzb3VyY2Vfcm93OworICBvdXRwdXRfYXJyYXkgKz0gZGVzdF9yb3c7CisKKyAgZm9yIChyb3cgPSBudW1fcm93czsgcm93ID4gMDsgcm93LS0pIHsKKyAgICBpbnB0ciA9ICppbnB1dF9hcnJheSsrOworICAgIG91dHB0ciA9ICpvdXRwdXRfYXJyYXkrKzsKKyNpZmRlZiBGTUVNQ09QWQorICAgIEZNRU1DT1BZKG91dHB0ciwgaW5wdHIsIGNvdW50KTsKKyNlbHNlCisgICAgZm9yIChjb3VudCA9IG51bV9jb2xzOyBjb3VudCA+IDA7IGNvdW50LS0pCisgICAgICAqb3V0cHRyKysgPSAqaW5wdHIrKzsJLyogbmVlZG4ndCBib3RoZXIgd2l0aCBHRVRKU0FNUExFKCkgaGVyZSAqLworI2VuZGlmCisgIH0KK30KKworCitHTE9CQUwodm9pZCkKK2pjb3B5X2Jsb2NrX3JvdyAoSkJMT0NLUk9XIGlucHV0X3JvdywgSkJMT0NLUk9XIG91dHB1dF9yb3csCisJCSBKRElNRU5TSU9OIG51bV9ibG9ja3MpCisvKiBDb3B5IGEgcm93IG9mIGNvZWZmaWNpZW50IGJsb2NrcyBmcm9tIG9uZSBwbGFjZSB0byBhbm90aGVyLiAqLworeworI2lmZGVmIEZNRU1DT1BZCisgIEZNRU1DT1BZKG91dHB1dF9yb3csIGlucHV0X3JvdywgbnVtX2Jsb2NrcyAqIChEQ1RTSVpFMiAqIFNJWkVPRihKQ09FRikpKTsKKyNlbHNlCisgIHJlZ2lzdGVyIEpDT0VGUFRSIGlucHRyLCBvdXRwdHI7CisgIHJlZ2lzdGVyIGxvbmcgY291bnQ7CisKKyAgaW5wdHIgPSAoSkNPRUZQVFIpIGlucHV0X3JvdzsKKyAgb3V0cHRyID0gKEpDT0VGUFRSKSBvdXRwdXRfcm93OworICBmb3IgKGNvdW50ID0gKGxvbmcpIG51bV9ibG9ja3MgKiBEQ1RTSVpFMjsgY291bnQgPiAwOyBjb3VudC0tKSB7CisgICAgKm91dHB0cisrID0gKmlucHRyKys7CisgIH0KKyNlbmRpZgorfQorCisKK0dMT0JBTCh2b2lkKQoranplcm9fZmFyICh2b2lkIEZBUiAqIHRhcmdldCwgc2l6ZV90IGJ5dGVzdG96ZXJvKQorLyogWmVybyBvdXQgYSBjaHVuayBvZiBGQVIgbWVtb3J5LiAqLworLyogVGhpcyBtaWdodCBiZSBzYW1wbGUtYXJyYXkgZGF0YSwgYmxvY2stYXJyYXkgZGF0YSwgb3IgYWxsb2NfbGFyZ2UgZGF0YS4gKi8KK3sKKyNpZmRlZiBGTUVNWkVSTworICBGTUVNWkVSTyh0YXJnZXQsIGJ5dGVzdG96ZXJvKTsKKyNlbHNlCisgIHJlZ2lzdGVyIGNoYXIgRkFSICogcHRyID0gKGNoYXIgRkFSICopIHRhcmdldDsKKyAgcmVnaXN0ZXIgc2l6ZV90IGNvdW50OworCisgIGZvciAoY291bnQgPSBieXRlc3RvemVybzsgY291bnQgPiAwOyBjb3VudC0tKSB7CisgICAgKnB0cisrID0gMDsKKyAgfQorI2VuZGlmCit9CisKKyNlbmRpZiAvL19GWF9KUEVHX1RVUkJPXwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2pjaHVmZi5oIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2pjaHVmZi5oCmluZGV4IDhjMDJjMDkuLmE5NTk5ZmMgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9qY2h1ZmYuaAorKysgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvamNodWZmLmgKQEAgLTEsNDcgKzEsNDcgQEAKLS8qDQotICogamNodWZmLmgNCi0gKg0KLSAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4NCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLg0KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4NCi0gKg0KLSAqIFRoaXMgZmlsZSBjb250YWlucyBkZWNsYXJhdGlvbnMgZm9yIEh1ZmZtYW4gZW50cm9weSBlbmNvZGluZyByb3V0aW5lcw0KLSAqIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZSBzZXF1ZW50aWFsIGVuY29kZXIgKGpjaHVmZi5jKSBhbmQgdGhlDQotICogcHJvZ3Jlc3NpdmUgZW5jb2RlciAoamNwaHVmZi5jKS4gIE5vIG90aGVyIG1vZHVsZXMgbmVlZCB0byBzZWUgdGhlc2UuDQotICovDQotDQotLyogVGhlIGxlZ2FsIHJhbmdlIG9mIGEgRENUIGNvZWZmaWNpZW50IGlzDQotICogIC0xMDI0IC4uICsxMDIzICBmb3IgOC1iaXQgZGF0YTsNCi0gKiAtMTYzODQgLi4gKzE2MzgzIGZvciAxMi1iaXQgZGF0YS4NCi0gKiBIZW5jZSB0aGUgbWFnbml0dWRlIHNob3VsZCBhbHdheXMgZml0IGluIDEwIG9yIDE0IGJpdHMgcmVzcGVjdGl2ZWx5Lg0KLSAqLw0KLQ0KLSNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOA0KLSNkZWZpbmUgTUFYX0NPRUZfQklUUyAxMA0KLSNlbHNlDQotI2RlZmluZSBNQVhfQ09FRl9CSVRTIDE0DQotI2VuZGlmDQotDQotLyogRGVyaXZlZCBkYXRhIGNvbnN0cnVjdGVkIGZvciBlYWNoIEh1ZmZtYW4gdGFibGUgKi8NCi0NCi10eXBlZGVmIHN0cnVjdCB7DQotICB1bnNpZ25lZCBpbnQgZWh1ZmNvWzI1Nl07CS8qIGNvZGUgZm9yIGVhY2ggc3ltYm9sICovDQotICBjaGFyIGVodWZzaVsyNTZdOwkJLyogbGVuZ3RoIG9mIGNvZGUgZm9yIGVhY2ggc3ltYm9sICovDQotICAvKiBJZiBubyBjb2RlIGhhcyBiZWVuIGFsbG9jYXRlZCBmb3IgYSBzeW1ib2wgUywgZWh1ZnNpW1NdIGNvbnRhaW5zIDAgKi8NCi19IGNfZGVyaXZlZF90Ymw7DQotDQotLyogU2hvcnQgZm9ybXMgb2YgZXh0ZXJuYWwgbmFtZXMgZm9yIHN5c3RlbXMgd2l0aCBicmFpbi1kYW1hZ2VkIGxpbmtlcnMuICovDQotDQotI2lmZGVmIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMNCi0jZGVmaW5lIGpwZWdfbWFrZV9jX2Rlcml2ZWRfdGJsCWpNa0NEZXJpdmVkDQotI2RlZmluZSBqcGVnX2dlbl9vcHRpbWFsX3RhYmxlCWpHZW5PcHRUYmwNCi0jZW5kaWYgLyogTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUyAqLw0KLQ0KLS8qIEV4cGFuZCBhIEh1ZmZtYW4gdGFibGUgZGVmaW5pdGlvbiBpbnRvIHRoZSBkZXJpdmVkIGZvcm1hdCAqLw0KLUVYVEVSTih2b2lkKSBqcGVnX21ha2VfY19kZXJpdmVkX3RibA0KLQlKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIGlzREMsIGludCB0YmxubywNCi0JICAgICBjX2Rlcml2ZWRfdGJsICoqIHBkdGJsKSk7DQotDQotLyogR2VuZXJhdGUgYW4gb3B0aW1hbCB0YWJsZSBkZWZpbml0aW9uIGdpdmVuIHRoZSBzcGVjaWZpZWQgY291bnRzICovDQotRVhURVJOKHZvaWQpIGpwZWdfZ2VuX29wdGltYWxfdGFibGUNCi0JSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgSkhVRkZfVEJMICogaHRibCwgbG9uZyBmcmVxW10pKTsNCisvKgorICogamNodWZmLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBkZWNsYXJhdGlvbnMgZm9yIEh1ZmZtYW4gZW50cm9weSBlbmNvZGluZyByb3V0aW5lcworICogdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gdGhlIHNlcXVlbnRpYWwgZW5jb2RlciAoamNodWZmLmMpIGFuZCB0aGUKKyAqIHByb2dyZXNzaXZlIGVuY29kZXIgKGpjcGh1ZmYuYykuICBObyBvdGhlciBtb2R1bGVzIG5lZWQgdG8gc2VlIHRoZXNlLgorICovCisKKy8qIFRoZSBsZWdhbCByYW5nZSBvZiBhIERDVCBjb2VmZmljaWVudCBpcworICogIC0xMDI0IC4uICsxMDIzICBmb3IgOC1iaXQgZGF0YTsKKyAqIC0xNjM4NCAuLiArMTYzODMgZm9yIDEyLWJpdCBkYXRhLgorICogSGVuY2UgdGhlIG1hZ25pdHVkZSBzaG91bGQgYWx3YXlzIGZpdCBpbiAxMCBvciAxNCBiaXRzIHJlc3BlY3RpdmVseS4KKyAqLworCisjaWYgQklUU19JTl9KU0FNUExFID09IDgKKyNkZWZpbmUgTUFYX0NPRUZfQklUUyAxMAorI2Vsc2UKKyNkZWZpbmUgTUFYX0NPRUZfQklUUyAxNAorI2VuZGlmCisKKy8qIERlcml2ZWQgZGF0YSBjb25zdHJ1Y3RlZCBmb3IgZWFjaCBIdWZmbWFuIHRhYmxlICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgaW50IGVodWZjb1syNTZdOwkvKiBjb2RlIGZvciBlYWNoIHN5bWJvbCAqLworICBjaGFyIGVodWZzaVsyNTZdOwkJLyogbGVuZ3RoIG9mIGNvZGUgZm9yIGVhY2ggc3ltYm9sICovCisgIC8qIElmIG5vIGNvZGUgaGFzIGJlZW4gYWxsb2NhdGVkIGZvciBhIHN5bWJvbCBTLCBlaHVmc2lbU10gY29udGFpbnMgMCAqLworfSBjX2Rlcml2ZWRfdGJsOworCisvKiBTaG9ydCBmb3JtcyBvZiBleHRlcm5hbCBuYW1lcyBmb3Igc3lzdGVtcyB3aXRoIGJyYWluLWRhbWFnZWQgbGlua2Vycy4gKi8KKworI2lmZGVmIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMKKyNkZWZpbmUganBlZ19tYWtlX2NfZGVyaXZlZF90YmwJak1rQ0Rlcml2ZWQKKyNkZWZpbmUganBlZ19nZW5fb3B0aW1hbF90YWJsZQlqR2VuT3B0VGJsCisjZW5kaWYgLyogTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUyAqLworCisvKiBFeHBhbmQgYSBIdWZmbWFuIHRhYmxlIGRlZmluaXRpb24gaW50byB0aGUgZGVyaXZlZCBmb3JtYXQgKi8KK0VYVEVSTih2b2lkKSBqcGVnX21ha2VfY19kZXJpdmVkX3RibAorCUpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gaXNEQywgaW50IHRibG5vLAorCSAgICAgY19kZXJpdmVkX3RibCAqKiBwZHRibCkpOworCisvKiBHZW5lcmF0ZSBhbiBvcHRpbWFsIHRhYmxlIGRlZmluaXRpb24gZ2l2ZW4gdGhlIHNwZWNpZmllZCBjb3VudHMgKi8KK0VYVEVSTih2b2lkKSBqcGVnX2dlbl9vcHRpbWFsX3RhYmxlCisJSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgSkhVRkZfVEJMICogaHRibCwgbG9uZyBmcmVxW10pKTsKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9qY29uZmlnLmggYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvamNvbmZpZy5oCmluZGV4IDJmNGRhMTQuLjdlMjkxYzcgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9qY29uZmlnLmgKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2pjb25maWcuaApAQCAtMSw0NSArMSw0NSBAQAotLyogamNvbmZpZy52YyAtLS0gamNvbmZpZy5oIGZvciBNaWNyb3NvZnQgVmlzdWFsIEMrKyBvbiBXaW5kb3dzIDk1IG9yIE5ULiAqLw0KLS8qIHNlZSBqY29uZmlnLmRvYyBmb3IgZXhwbGFuYXRpb25zICovDQotDQotI2RlZmluZSBIQVZFX1BST1RPVFlQRVMNCi0jZGVmaW5lIEhBVkVfVU5TSUdORURfQ0hBUg0KLSNkZWZpbmUgSEFWRV9VTlNJR05FRF9TSE9SVA0KLS8qICNkZWZpbmUgdm9pZCBjaGFyICovDQotLyogI2RlZmluZSBjb25zdCAqLw0KLSN1bmRlZiBDSEFSX0lTX1VOU0lHTkVEDQotI2RlZmluZSBIQVZFX1NURERFRl9IDQotI2RlZmluZSBIQVZFX1NURExJQl9IDQotI3VuZGVmIE5FRURfQlNEX1NUUklOR1MNCi0jdW5kZWYgTkVFRF9TWVNfVFlQRVNfSA0KLSN1bmRlZiBORUVEX0ZBUl9QT0lOVEVSUwkvKiB3ZSBwcmVzdW1lIGEgMzItYml0IGZsYXQgbWVtb3J5IG1vZGVsICovDQotI3VuZGVmIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMNCi0jdW5kZWYgSU5DT01QTEVURV9UWVBFU19CUk9LRU4NCi0NCi0vKiBEZWZpbmUgImJvb2xlYW4iIGFzIHVuc2lnbmVkIGNoYXIsIG5vdCBpbnQsIHBlciBXaW5kb3dzIGN1c3RvbSAqLw0KLSNpZm5kZWYgX19SUENORFJfSF9fCQkvKiBkb24ndCBjb25mbGljdCBpZiBycGNuZHIuaCBhbHJlYWR5IHJlYWQgKi8NCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgYm9vbGVhbjsNCi0jZW5kaWYNCi0jZGVmaW5lIEhBVkVfQk9PTEVBTgkJLyogcHJldmVudCBqbW9yZWNmZy5oIGZyb20gcmVkZWZpbmluZyBpdCAqLw0KLQ0KLQ0KLSNpZmRlZiBKUEVHX0lOVEVSTkFMUw0KLQ0KLSN1bmRlZiBSSUdIVF9TSElGVF9JU19VTlNJR05FRA0KLQ0KLSNlbmRpZiAvKiBKUEVHX0lOVEVSTkFMUyAqLw0KLQ0KLSNpZmRlZiBKUEVHX0NKUEVHX0RKUEVHDQotDQotI2RlZmluZSBCTVBfU1VQUE9SVEVECQkvKiBCTVAgaW1hZ2UgZmlsZSBmb3JtYXQgKi8NCi0jZGVmaW5lIEdJRl9TVVBQT1JURUQJCS8qIEdJRiBpbWFnZSBmaWxlIGZvcm1hdCAqLw0KLSNkZWZpbmUgUFBNX1NVUFBPUlRFRAkJLyogUEJNUExVUyBQUE0vUEdNIGltYWdlIGZpbGUgZm9ybWF0ICovDQotI3VuZGVmIFJMRV9TVVBQT1JURUQJCS8qIFV0YWggUkxFIGltYWdlIGZpbGUgZm9ybWF0ICovDQotI2RlZmluZSBUQVJHQV9TVVBQT1JURUQJCS8qIFRhcmdhIGltYWdlIGZpbGUgZm9ybWF0ICovDQotDQotI2RlZmluZSBUV09fRklMRV9DT01NQU5ETElORQkvKiBvcHRpb25hbCAqLw0KLSNkZWZpbmUgVVNFX1NFVE1PREUJCS8qIE1pY3Jvc29mdCBoYXMgc2V0bW9kZSgpICovDQotI3VuZGVmIE5FRURfU0lHTkFMX0NBVENIRVINCi0jdW5kZWYgRE9OVF9VU0VfQl9NT0RFDQotI3VuZGVmIFBST0dSRVNTX1JFUE9SVAkJLyogb3B0aW9uYWwgKi8NCi0NCi0jZW5kaWYgLyogSlBFR19DSlBFR19ESlBFRyAqLw0KKy8qIGpjb25maWcudmMgLS0tIGpjb25maWcuaCBmb3IgTWljcm9zb2Z0IFZpc3VhbCBDKysgb24gV2luZG93cyA5NSBvciBOVC4gKi8KKy8qIHNlZSBqY29uZmlnLmRvYyBmb3IgZXhwbGFuYXRpb25zICovCisKKyNkZWZpbmUgSEFWRV9QUk9UT1RZUEVTCisjZGVmaW5lIEhBVkVfVU5TSUdORURfQ0hBUgorI2RlZmluZSBIQVZFX1VOU0lHTkVEX1NIT1JUCisvKiAjZGVmaW5lIHZvaWQgY2hhciAqLworLyogI2RlZmluZSBjb25zdCAqLworI3VuZGVmIENIQVJfSVNfVU5TSUdORUQKKyNkZWZpbmUgSEFWRV9TVERERUZfSAorI2RlZmluZSBIQVZFX1NURExJQl9ICisjdW5kZWYgTkVFRF9CU0RfU1RSSU5HUworI3VuZGVmIE5FRURfU1lTX1RZUEVTX0gKKyN1bmRlZiBORUVEX0ZBUl9QT0lOVEVSUwkvKiB3ZSBwcmVzdW1lIGEgMzItYml0IGZsYXQgbWVtb3J5IG1vZGVsICovCisjdW5kZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUworI3VuZGVmIElOQ09NUExFVEVfVFlQRVNfQlJPS0VOCisKKy8qIERlZmluZSAiYm9vbGVhbiIgYXMgdW5zaWduZWQgY2hhciwgbm90IGludCwgcGVyIFdpbmRvd3MgY3VzdG9tICovCisjaWZuZGVmIF9fUlBDTkRSX0hfXwkJLyogZG9uJ3QgY29uZmxpY3QgaWYgcnBjbmRyLmggYWxyZWFkeSByZWFkICovCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgYm9vbGVhbjsKKyNlbmRpZgorI2RlZmluZSBIQVZFX0JPT0xFQU4JCS8qIHByZXZlbnQgam1vcmVjZmcuaCBmcm9tIHJlZGVmaW5pbmcgaXQgKi8KKworCisjaWZkZWYgSlBFR19JTlRFUk5BTFMKKworI3VuZGVmIFJJR0hUX1NISUZUX0lTX1VOU0lHTkVECisKKyNlbmRpZiAvKiBKUEVHX0lOVEVSTkFMUyAqLworCisjaWZkZWYgSlBFR19DSlBFR19ESlBFRworCisjZGVmaW5lIEJNUF9TVVBQT1JURUQJCS8qIEJNUCBpbWFnZSBmaWxlIGZvcm1hdCAqLworI2RlZmluZSBHSUZfU1VQUE9SVEVECQkvKiBHSUYgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KKyNkZWZpbmUgUFBNX1NVUFBPUlRFRAkJLyogUEJNUExVUyBQUE0vUEdNIGltYWdlIGZpbGUgZm9ybWF0ICovCisjdW5kZWYgUkxFX1NVUFBPUlRFRAkJLyogVXRhaCBSTEUgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KKyNkZWZpbmUgVEFSR0FfU1VQUE9SVEVECQkvKiBUYXJnYSBpbWFnZSBmaWxlIGZvcm1hdCAqLworCisjZGVmaW5lIFRXT19GSUxFX0NPTU1BTkRMSU5FCS8qIG9wdGlvbmFsICovCisjZGVmaW5lIFVTRV9TRVRNT0RFCQkvKiBNaWNyb3NvZnQgaGFzIHNldG1vZGUoKSAqLworI3VuZGVmIE5FRURfU0lHTkFMX0NBVENIRVIKKyN1bmRlZiBET05UX1VTRV9CX01PREUKKyN1bmRlZiBQUk9HUkVTU19SRVBPUlQJCS8qIG9wdGlvbmFsICovCisKKyNlbmRpZiAvKiBKUEVHX0NKUEVHX0RKUEVHICovCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvamRjdC5oIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2pkY3QuaAppbmRleCBiNjY0Y2FiLi4wNDE5MmEyNiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2pkY3QuaAorKysgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvamRjdC5oCkBAIC0xLDE3NiArMSwxNzYgQEAKLS8qDQotICogamRjdC5oDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgVGhvbWFzIEcuIExhbmUuDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4NCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuDQotICoNCi0gKiBUaGlzIGluY2x1ZGUgZmlsZSBjb250YWlucyBjb21tb24gZGVjbGFyYXRpb25zIGZvciB0aGUgZm9yd2FyZCBhbmQNCi0gKiBpbnZlcnNlIERDVCBtb2R1bGVzLiAgVGhlc2UgZGVjbGFyYXRpb25zIGFyZSBwcml2YXRlIHRvIHRoZSBEQ1QgbWFuYWdlcnMNCi0gKiAoamNkY3RtZ3IuYywgamRkY3RtZ3IuYykgYW5kIHRoZSBpbmRpdmlkdWFsIERDVCBhbGdvcml0aG1zLg0KLSAqIFRoZSBpbmRpdmlkdWFsIERDVCBhbGdvcml0aG1zIGFyZSBrZXB0IGluIHNlcGFyYXRlIGZpbGVzIHRvIGVhc2UgDQotICogbWFjaGluZS1kZXBlbmRlbnQgdHVuaW5nIChlLmcuLCBhc3NlbWJseSBjb2RpbmcpLg0KLSAqLw0KLQ0KLQ0KLS8qDQotICogQSBmb3J3YXJkIERDVCByb3V0aW5lIGlzIGdpdmVuIGEgcG9pbnRlciB0byBhIHdvcmsgYXJlYSBvZiB0eXBlIERDVEVMRU1bXTsNCi0gKiB0aGUgRENUIGlzIHRvIGJlIHBlcmZvcm1lZCBpbi1wbGFjZSBpbiB0aGF0IGJ1ZmZlci4gIFR5cGUgRENURUxFTSBpcyBpbnQNCi0gKiBmb3IgOC1iaXQgc2FtcGxlcywgSU5UMzIgZm9yIDEyLWJpdCBzYW1wbGVzLiAgKE5PVEU6IEZsb2F0aW5nLXBvaW50IERDVA0KLSAqIGltcGxlbWVudGF0aW9ucyB1c2UgYW4gYXJyYXkgb2YgdHlwZSBGQVNUX0ZMT0FULCBpbnN0ZWFkLikNCi0gKiBUaGUgRENUIGlucHV0cyBhcmUgZXhwZWN0ZWQgdG8gYmUgc2lnbmVkIChyYW5nZSArLUNFTlRFUkpTQU1QTEUpLg0KLSAqIFRoZSBEQ1Qgb3V0cHV0cyBhcmUgcmV0dXJuZWQgc2NhbGVkIHVwIGJ5IGEgZmFjdG9yIG9mIDg7IHRoZXkgdGhlcmVmb3JlDQotICogaGF2ZSBhIHJhbmdlIG9mICstOEsgZm9yIDgtYml0IGRhdGEsICstMTI4SyBmb3IgMTItYml0IGRhdGEuICBUaGlzDQotICogY29udmVudGlvbiBpbXByb3ZlcyBhY2N1cmFjeSBpbiBpbnRlZ2VyIGltcGxlbWVudGF0aW9ucyBhbmQgc2F2ZXMgc29tZQ0KLSAqIHdvcmsgaW4gZmxvYXRpbmctcG9pbnQgb25lcy4NCi0gKiBRdWFudGl6YXRpb24gb2YgdGhlIG91dHB1dCBjb2VmZmljaWVudHMgaXMgZG9uZSBieSBqY2RjdG1nci5jLg0KLSAqLw0KLQ0KLSNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOA0KLXR5cGVkZWYgaW50IERDVEVMRU07CQkvKiAxNiBvciAzMiBiaXRzIGlzIGZpbmUgKi8NCi0jZWxzZQ0KLXR5cGVkZWYgSU5UMzIgRENURUxFTTsJCS8qIG11c3QgaGF2ZSAzMiBiaXRzICovDQotI2VuZGlmDQotDQotdHlwZWRlZiBKTUVUSE9EKHZvaWQsIGZvcndhcmRfRENUX21ldGhvZF9wdHIsIChEQ1RFTEVNICogZGF0YSkpOw0KLXR5cGVkZWYgSk1FVEhPRCh2b2lkLCBmbG9hdF9EQ1RfbWV0aG9kX3B0ciwgKEZBU1RfRkxPQVQgKiBkYXRhKSk7DQotDQotDQotLyoNCi0gKiBBbiBpbnZlcnNlIERDVCByb3V0aW5lIGlzIGdpdmVuIGEgcG9pbnRlciB0byB0aGUgaW5wdXQgSkJMT0NLIGFuZCBhIHBvaW50ZXINCi0gKiB0byBhbiBvdXRwdXQgc2FtcGxlIGFycmF5LiAgVGhlIHJvdXRpbmUgbXVzdCBkZXF1YW50aXplIHRoZSBpbnB1dCBkYXRhIGFzDQotICogd2VsbCBhcyBwZXJmb3JtIHRoZSBJRENUOyBmb3IgZGVxdWFudGl6YXRpb24sIGl0IHVzZXMgdGhlIG11bHRpcGxpZXIgdGFibGUNCi0gKiBwb2ludGVkIHRvIGJ5IGNvbXBwdHItPmRjdF90YWJsZS4gIFRoZSBvdXRwdXQgZGF0YSBpcyB0byBiZSBwbGFjZWQgaW50byB0aGUNCi0gKiBzYW1wbGUgYXJyYXkgc3RhcnRpbmcgYXQgYSBzcGVjaWZpZWQgY29sdW1uLiAgKEFueSByb3cgb2Zmc2V0IG5lZWRlZCB3aWxsDQotICogYmUgYXBwbGllZCB0byB0aGUgYXJyYXkgcG9pbnRlciBiZWZvcmUgaXQgaXMgcGFzc2VkIHRvIHRoZSBJRENUIGNvZGUuKQ0KLSAqIE5vdGUgdGhhdCB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgZW1pdHRlZCBieSB0aGUgSURDVCByb3V0aW5lIGlzDQotICogRENUX3NjYWxlZF9zaXplICogRENUX3NjYWxlZF9zaXplLg0KLSAqLw0KLQ0KLS8qIHR5cGVkZWYgaW52ZXJzZV9EQ1RfbWV0aG9kX3B0ciBpcyBkZWNsYXJlZCBpbiBqcGVnaW50LmggKi8NCi0NCi0vKg0KLSAqIEVhY2ggSURDVCByb3V0aW5lIGhhcyBpdHMgb3duIGlkZWFzIGFib3V0IHRoZSBiZXN0IGRjdF90YWJsZSBlbGVtZW50IHR5cGUuDQotICovDQotDQotdHlwZWRlZiBNVUxUSVBMSUVSIElTTE9XX01VTFRfVFlQRTsgLyogc2hvcnQgb3IgaW50LCB3aGljaGV2ZXIgaXMgZmFzdGVyICovDQotI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4DQotdHlwZWRlZiBNVUxUSVBMSUVSIElGQVNUX01VTFRfVFlQRTsgLyogMTYgYml0cyBpcyBPSywgdXNlIHNob3J0IGlmIGZhc3RlciAqLw0KLSNkZWZpbmUgSUZBU1RfU0NBTEVfQklUUyAgMgkvKiBmcmFjdGlvbmFsIGJpdHMgaW4gc2NhbGUgZmFjdG9ycyAqLw0KLSNlbHNlDQotdHlwZWRlZiBJTlQzMiBJRkFTVF9NVUxUX1RZUEU7CS8qIG5lZWQgMzIgYml0cyBmb3Igc2NhbGVkIHF1YW50aXplcnMgKi8NCi0jZGVmaW5lIElGQVNUX1NDQUxFX0JJVFMgIDEzCS8qIGZyYWN0aW9uYWwgYml0cyBpbiBzY2FsZSBmYWN0b3JzICovDQotI2VuZGlmDQotdHlwZWRlZiBGQVNUX0ZMT0FUIEZMT0FUX01VTFRfVFlQRTsgLyogcHJlZmVycmVkIGZsb2F0aW5nIHR5cGUgKi8NCi0NCi0NCi0vKg0KLSAqIEVhY2ggSURDVCByb3V0aW5lIGlzIHJlc3BvbnNpYmxlIGZvciByYW5nZS1saW1pdGluZyBpdHMgcmVzdWx0cyBhbmQNCi0gKiBjb252ZXJ0aW5nIHRoZW0gdG8gdW5zaWduZWQgZm9ybSAoMC4uTUFYSlNBTVBMRSkuICBUaGUgcmF3IG91dHB1dHMgY291bGQNCi0gKiBiZSBxdWl0ZSBmYXIgb3V0IG9mIHJhbmdlIGlmIHRoZSBpbnB1dCBkYXRhIGlzIGNvcnJ1cHQsIHNvIGEgYnVsbGV0cHJvb2YNCi0gKiByYW5nZS1saW1pdGluZyBzdGVwIGlzIHJlcXVpcmVkLiAgV2UgdXNlIGEgbWFzay1hbmQtdGFibGUtbG9va3VwIG1ldGhvZA0KLSAqIHRvIGRvIHRoZSBjb21iaW5lZCBvcGVyYXRpb25zIHF1aWNrbHkuICBTZWUgdGhlIGNvbW1lbnRzIHdpdGgNCi0gKiBwcmVwYXJlX3JhbmdlX2xpbWl0X3RhYmxlIChpbiBqZG1hc3Rlci5jKSBmb3IgbW9yZSBpbmZvLg0KLSAqLw0KLQ0KLSNkZWZpbmUgSURDVF9yYW5nZV9saW1pdChjaW5mbykgICgoY2luZm8pLT5zYW1wbGVfcmFuZ2VfbGltaXQgKyBDRU5URVJKU0FNUExFKQ0KLQ0KLSNkZWZpbmUgUkFOR0VfTUFTSyAgKE1BWEpTQU1QTEUgKiA0ICsgMykgLyogMiBiaXRzIHdpZGVyIHRoYW4gbGVnYWwgc2FtcGxlcyAqLw0KLQ0KLQ0KLS8qIFNob3J0IGZvcm1zIG9mIGV4dGVybmFsIG5hbWVzIGZvciBzeXN0ZW1zIHdpdGggYnJhaW4tZGFtYWdlZCBsaW5rZXJzLiAqLw0KLQ0KLSNpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTDQotI2RlZmluZSBqcGVnX2ZkY3RfaXNsb3cJCWpGRGlzbG93DQotI2RlZmluZSBqcGVnX2ZkY3RfaWZhc3QJCWpGRGlmYXN0DQotI2RlZmluZSBqcGVnX2ZkY3RfZmxvYXQJCWpGRGZsb2F0DQotI2RlZmluZSBqcGVnX2lkY3RfaXNsb3cJCWpSRGlzbG93DQotI2RlZmluZSBqcGVnX2lkY3RfaWZhc3QJCWpSRGlmYXN0DQotI2RlZmluZSBqcGVnX2lkY3RfZmxvYXQJCWpSRGZsb2F0DQotI2RlZmluZSBqcGVnX2lkY3RfNHg0CQlqUkQ0eDQNCi0jZGVmaW5lIGpwZWdfaWRjdF8yeDIJCWpSRDJ4Mg0KLSNkZWZpbmUganBlZ19pZGN0XzF4MQkJalJEMXgxDQotI2VuZGlmIC8qIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMgKi8NCi0NCi0vKiBFeHRlcm4gZGVjbGFyYXRpb25zIGZvciB0aGUgZm9yd2FyZCBhbmQgaW52ZXJzZSBEQ1Qgcm91dGluZXMuICovDQotDQotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF9pc2xvdyBKUFAoKERDVEVMRU0gKiBkYXRhKSk7DQotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF9pZmFzdCBKUFAoKERDVEVMRU0gKiBkYXRhKSk7DQotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF9mbG9hdCBKUFAoKEZBU1RfRkxPQVQgKiBkYXRhKSk7DQotDQotRVhURVJOKHZvaWQpIGpwZWdfaWRjdF9pc2xvdw0KLSAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLA0KLQkgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsNCi1FWFRFUk4odm9pZCkganBlZ19pZGN0X2lmYXN0DQotICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsDQotCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOw0KLUVYVEVSTih2b2lkKSBqcGVnX2lkY3RfZmxvYXQNCi0gICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwNCi0JIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7DQotRVhURVJOKHZvaWQpIGpwZWdfaWRjdF80eDQNCi0gICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwNCi0JIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7DQotRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8yeDINCi0gICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwNCi0JIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7DQotRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8xeDENCi0gICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwNCi0JIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7DQotDQotDQotLyoNCi0gKiBNYWNyb3MgZm9yIGhhbmRsaW5nIGZpeGVkLXBvaW50IGFyaXRobWV0aWM7IHRoZXNlIGFyZSB1c2VkIGJ5IG1hbnkNCi0gKiBidXQgbm90IGFsbCBvZiB0aGUgRENUL0lEQ1QgbW9kdWxlcy4NCi0gKg0KLSAqIEFsbCB2YWx1ZXMgYXJlIGV4cGVjdGVkIHRvIGJlIG9mIHR5cGUgSU5UMzIuDQotICogRnJhY3Rpb25hbCBjb25zdGFudHMgYXJlIHNjYWxlZCBsZWZ0IGJ5IENPTlNUX0JJVFMgYml0cy4NCi0gKiBDT05TVF9CSVRTIGlzIGRlZmluZWQgd2l0aGluIGVhY2ggbW9kdWxlIHVzaW5nIHRoZXNlIG1hY3JvcywNCi0gKiBhbmQgbWF5IGRpZmZlciBmcm9tIG9uZSBtb2R1bGUgdG8gdGhlIG5leHQuDQotICovDQotDQotI2RlZmluZSBPTkUJKChJTlQzMikgMSkNCi0jZGVmaW5lIENPTlNUX1NDQUxFIChPTkUgPDwgQ09OU1RfQklUUykNCi0NCi0vKiBDb252ZXJ0IGEgcG9zaXRpdmUgcmVhbCBjb25zdGFudCB0byBhbiBpbnRlZ2VyIHNjYWxlZCBieSBDT05TVF9TQ0FMRS4NCi0gKiBDYXV0aW9uOiBzb21lIEMgY29tcGlsZXJzIGZhaWwgdG8gcmVkdWNlICJGSVgoY29uc3RhbnQpIiBhdCBjb21waWxlIHRpbWUsDQotICogdGh1cyBjYXVzaW5nIGEgbG90IG9mIHVzZWxlc3MgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyBhdCBydW4gdGltZS4NCi0gKi8NCi0NCi0jZGVmaW5lIEZJWCh4KQkoKElOVDMyKSAoKHgpICogQ09OU1RfU0NBTEUgKyAwLjUpKQ0KLQ0KLS8qIERlc2NhbGUgYW5kIGNvcnJlY3RseSByb3VuZCBhbiBJTlQzMiB2YWx1ZSB0aGF0J3Mgc2NhbGVkIGJ5IE4gYml0cy4NCi0gKiBXZSBhc3N1bWUgUklHSFRfU0hJRlQgcm91bmRzIHRvd2FyZHMgbWludXMgaW5maW5pdHksIHNvIGFkZGluZw0KLSAqIHRoZSBmdWRnZSBmYWN0b3IgaXMgY29ycmVjdCBmb3IgZWl0aGVyIHNpZ24gb2YgWC4NCi0gKi8NCi0NCi0jZGVmaW5lIERFU0NBTEUoeCxuKSAgUklHSFRfU0hJRlQoKHgpICsgKE9ORSA8PCAoKG4pLTEpKSwgbikNCi0NCi0vKiBNdWx0aXBseSBhbiBJTlQzMiB2YXJpYWJsZSBieSBhbiBJTlQzMiBjb25zdGFudCB0byB5aWVsZCBhbiBJTlQzMiByZXN1bHQuDQotICogVGhpcyBtYWNybyBpcyB1c2VkIG9ubHkgd2hlbiB0aGUgdHdvIGlucHV0cyB3aWxsIGFjdHVhbGx5IGJlIG5vIG1vcmUgdGhhbg0KLSAqIDE2IGJpdHMgd2lkZSwgc28gdGhhdCBhIDE2eDE2LT4zMiBiaXQgbXVsdGlwbHkgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBhDQotICogZnVsbCAzMngzMiBtdWx0aXBseS4gIFRoaXMgcHJvdmlkZXMgYSB1c2VmdWwgc3BlZWR1cCBvbiBtYW55IG1hY2hpbmVzLg0KLSAqIFVuZm9ydHVuYXRlbHkgdGhlcmUgaXMgbm8gd2F5IHRvIHNwZWNpZnkgYSAxNngxNi0+MzIgbXVsdGlwbHkgcG9ydGFibHkNCi0gKiBpbiBDLCBidXQgc29tZSBDIGNvbXBpbGVycyB3aWxsIGRvIHRoZSByaWdodCB0aGluZyBpZiB5b3UgcHJvdmlkZSB0aGUNCi0gKiBjb3JyZWN0IGNvbWJpbmF0aW9uIG9mIGNhc3RzLg0KLSAqLw0KLQ0KLSNpZmRlZiBTSE9SVHhTSE9SVF8zMgkJLyogbWF5IHdvcmsgaWYgJ2ludCcgaXMgMzIgYml0cyAqLw0KLSNkZWZpbmUgTVVMVElQTFkxNkMxNih2YXIsY29uc3QpICAoKChJTlQxNikgKHZhcikpICogKChJTlQxNikgKGNvbnN0KSkpDQotI2VuZGlmDQotI2lmZGVmIFNIT1JUeExDT05TVF8zMgkJLyoga25vd24gdG8gd29yayB3aXRoIE1pY3Jvc29mdCBDIDYuMCAqLw0KLSNkZWZpbmUgTVVMVElQTFkxNkMxNih2YXIsY29uc3QpICAoKChJTlQxNikgKHZhcikpICogKChJTlQzMikgKGNvbnN0KSkpDQotI2VuZGlmDQotDQotI2lmbmRlZiBNVUxUSVBMWTE2QzE2CQkvKiBkZWZhdWx0IGRlZmluaXRpb24gKi8NCi0jZGVmaW5lIE1VTFRJUExZMTZDMTYodmFyLGNvbnN0KSAgKCh2YXIpICogKGNvbnN0KSkNCi0jZW5kaWYNCi0NCi0vKiBTYW1lIGV4Y2VwdCBib3RoIGlucHV0cyBhcmUgdmFyaWFibGVzLiAqLw0KLQ0KLSNpZmRlZiBTSE9SVHhTSE9SVF8zMgkJLyogbWF5IHdvcmsgaWYgJ2ludCcgaXMgMzIgYml0cyAqLw0KLSNkZWZpbmUgTVVMVElQTFkxNlYxNih2YXIxLHZhcjIpICAoKChJTlQxNikgKHZhcjEpKSAqICgoSU5UMTYpICh2YXIyKSkpDQotI2VuZGlmDQotDQotI2lmbmRlZiBNVUxUSVBMWTE2VjE2CQkvKiBkZWZhdWx0IGRlZmluaXRpb24gKi8NCi0jZGVmaW5lIE1VTFRJUExZMTZWMTYodmFyMSx2YXIyKSAgKCh2YXIxKSAqICh2YXIyKSkNCi0jZW5kaWYNCisvKgorICogamRjdC5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KKyAqCisgKiBUaGlzIGluY2x1ZGUgZmlsZSBjb250YWlucyBjb21tb24gZGVjbGFyYXRpb25zIGZvciB0aGUgZm9yd2FyZCBhbmQKKyAqIGludmVyc2UgRENUIG1vZHVsZXMuICBUaGVzZSBkZWNsYXJhdGlvbnMgYXJlIHByaXZhdGUgdG8gdGhlIERDVCBtYW5hZ2VycworICogKGpjZGN0bWdyLmMsIGpkZGN0bWdyLmMpIGFuZCB0aGUgaW5kaXZpZHVhbCBEQ1QgYWxnb3JpdGhtcy4KKyAqIFRoZSBpbmRpdmlkdWFsIERDVCBhbGdvcml0aG1zIGFyZSBrZXB0IGluIHNlcGFyYXRlIGZpbGVzIHRvIGVhc2UgCisgKiBtYWNoaW5lLWRlcGVuZGVudCB0dW5pbmcgKGUuZy4sIGFzc2VtYmx5IGNvZGluZykuCisgKi8KKworCisvKgorICogQSBmb3J3YXJkIERDVCByb3V0aW5lIGlzIGdpdmVuIGEgcG9pbnRlciB0byBhIHdvcmsgYXJlYSBvZiB0eXBlIERDVEVMRU1bXTsKKyAqIHRoZSBEQ1QgaXMgdG8gYmUgcGVyZm9ybWVkIGluLXBsYWNlIGluIHRoYXQgYnVmZmVyLiAgVHlwZSBEQ1RFTEVNIGlzIGludAorICogZm9yIDgtYml0IHNhbXBsZXMsIElOVDMyIGZvciAxMi1iaXQgc2FtcGxlcy4gIChOT1RFOiBGbG9hdGluZy1wb2ludCBEQ1QKKyAqIGltcGxlbWVudGF0aW9ucyB1c2UgYW4gYXJyYXkgb2YgdHlwZSBGQVNUX0ZMT0FULCBpbnN0ZWFkLikKKyAqIFRoZSBEQ1QgaW5wdXRzIGFyZSBleHBlY3RlZCB0byBiZSBzaWduZWQgKHJhbmdlICstQ0VOVEVSSlNBTVBMRSkuCisgKiBUaGUgRENUIG91dHB1dHMgYXJlIHJldHVybmVkIHNjYWxlZCB1cCBieSBhIGZhY3RvciBvZiA4OyB0aGV5IHRoZXJlZm9yZQorICogaGF2ZSBhIHJhbmdlIG9mICstOEsgZm9yIDgtYml0IGRhdGEsICstMTI4SyBmb3IgMTItYml0IGRhdGEuICBUaGlzCisgKiBjb252ZW50aW9uIGltcHJvdmVzIGFjY3VyYWN5IGluIGludGVnZXIgaW1wbGVtZW50YXRpb25zIGFuZCBzYXZlcyBzb21lCisgKiB3b3JrIGluIGZsb2F0aW5nLXBvaW50IG9uZXMuCisgKiBRdWFudGl6YXRpb24gb2YgdGhlIG91dHB1dCBjb2VmZmljaWVudHMgaXMgZG9uZSBieSBqY2RjdG1nci5jLgorICovCisKKyNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOAordHlwZWRlZiBpbnQgRENURUxFTTsJCS8qIDE2IG9yIDMyIGJpdHMgaXMgZmluZSAqLworI2Vsc2UKK3R5cGVkZWYgSU5UMzIgRENURUxFTTsJCS8qIG11c3QgaGF2ZSAzMiBiaXRzICovCisjZW5kaWYKKwordHlwZWRlZiBKTUVUSE9EKHZvaWQsIGZvcndhcmRfRENUX21ldGhvZF9wdHIsIChEQ1RFTEVNICogZGF0YSkpOwordHlwZWRlZiBKTUVUSE9EKHZvaWQsIGZsb2F0X0RDVF9tZXRob2RfcHRyLCAoRkFTVF9GTE9BVCAqIGRhdGEpKTsKKworCisvKgorICogQW4gaW52ZXJzZSBEQ1Qgcm91dGluZSBpcyBnaXZlbiBhIHBvaW50ZXIgdG8gdGhlIGlucHV0IEpCTE9DSyBhbmQgYSBwb2ludGVyCisgKiB0byBhbiBvdXRwdXQgc2FtcGxlIGFycmF5LiAgVGhlIHJvdXRpbmUgbXVzdCBkZXF1YW50aXplIHRoZSBpbnB1dCBkYXRhIGFzCisgKiB3ZWxsIGFzIHBlcmZvcm0gdGhlIElEQ1Q7IGZvciBkZXF1YW50aXphdGlvbiwgaXQgdXNlcyB0aGUgbXVsdGlwbGllciB0YWJsZQorICogcG9pbnRlZCB0byBieSBjb21wcHRyLT5kY3RfdGFibGUuICBUaGUgb3V0cHV0IGRhdGEgaXMgdG8gYmUgcGxhY2VkIGludG8gdGhlCisgKiBzYW1wbGUgYXJyYXkgc3RhcnRpbmcgYXQgYSBzcGVjaWZpZWQgY29sdW1uLiAgKEFueSByb3cgb2Zmc2V0IG5lZWRlZCB3aWxsCisgKiBiZSBhcHBsaWVkIHRvIHRoZSBhcnJheSBwb2ludGVyIGJlZm9yZSBpdCBpcyBwYXNzZWQgdG8gdGhlIElEQ1QgY29kZS4pCisgKiBOb3RlIHRoYXQgdGhlIG51bWJlciBvZiBzYW1wbGVzIGVtaXR0ZWQgYnkgdGhlIElEQ1Qgcm91dGluZSBpcworICogRENUX3NjYWxlZF9zaXplICogRENUX3NjYWxlZF9zaXplLgorICovCisKKy8qIHR5cGVkZWYgaW52ZXJzZV9EQ1RfbWV0aG9kX3B0ciBpcyBkZWNsYXJlZCBpbiBqcGVnaW50LmggKi8KKworLyoKKyAqIEVhY2ggSURDVCByb3V0aW5lIGhhcyBpdHMgb3duIGlkZWFzIGFib3V0IHRoZSBiZXN0IGRjdF90YWJsZSBlbGVtZW50IHR5cGUuCisgKi8KKwordHlwZWRlZiBNVUxUSVBMSUVSIElTTE9XX01VTFRfVFlQRTsgLyogc2hvcnQgb3IgaW50LCB3aGljaGV2ZXIgaXMgZmFzdGVyICovCisjaWYgQklUU19JTl9KU0FNUExFID09IDgKK3R5cGVkZWYgTVVMVElQTElFUiBJRkFTVF9NVUxUX1RZUEU7IC8qIDE2IGJpdHMgaXMgT0ssIHVzZSBzaG9ydCBpZiBmYXN0ZXIgKi8KKyNkZWZpbmUgSUZBU1RfU0NBTEVfQklUUyAgMgkvKiBmcmFjdGlvbmFsIGJpdHMgaW4gc2NhbGUgZmFjdG9ycyAqLworI2Vsc2UKK3R5cGVkZWYgSU5UMzIgSUZBU1RfTVVMVF9UWVBFOwkvKiBuZWVkIDMyIGJpdHMgZm9yIHNjYWxlZCBxdWFudGl6ZXJzICovCisjZGVmaW5lIElGQVNUX1NDQUxFX0JJVFMgIDEzCS8qIGZyYWN0aW9uYWwgYml0cyBpbiBzY2FsZSBmYWN0b3JzICovCisjZW5kaWYKK3R5cGVkZWYgRkFTVF9GTE9BVCBGTE9BVF9NVUxUX1RZUEU7IC8qIHByZWZlcnJlZCBmbG9hdGluZyB0eXBlICovCisKKworLyoKKyAqIEVhY2ggSURDVCByb3V0aW5lIGlzIHJlc3BvbnNpYmxlIGZvciByYW5nZS1saW1pdGluZyBpdHMgcmVzdWx0cyBhbmQKKyAqIGNvbnZlcnRpbmcgdGhlbSB0byB1bnNpZ25lZCBmb3JtICgwLi5NQVhKU0FNUExFKS4gIFRoZSByYXcgb3V0cHV0cyBjb3VsZAorICogYmUgcXVpdGUgZmFyIG91dCBvZiByYW5nZSBpZiB0aGUgaW5wdXQgZGF0YSBpcyBjb3JydXB0LCBzbyBhIGJ1bGxldHByb29mCisgKiByYW5nZS1saW1pdGluZyBzdGVwIGlzIHJlcXVpcmVkLiAgV2UgdXNlIGEgbWFzay1hbmQtdGFibGUtbG9va3VwIG1ldGhvZAorICogdG8gZG8gdGhlIGNvbWJpbmVkIG9wZXJhdGlvbnMgcXVpY2tseS4gIFNlZSB0aGUgY29tbWVudHMgd2l0aAorICogcHJlcGFyZV9yYW5nZV9saW1pdF90YWJsZSAoaW4gamRtYXN0ZXIuYykgZm9yIG1vcmUgaW5mby4KKyAqLworCisjZGVmaW5lIElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pICAoKGNpbmZvKS0+c2FtcGxlX3JhbmdlX2xpbWl0ICsgQ0VOVEVSSlNBTVBMRSkKKworI2RlZmluZSBSQU5HRV9NQVNLICAoTUFYSlNBTVBMRSAqIDQgKyAzKSAvKiAyIGJpdHMgd2lkZXIgdGhhbiBsZWdhbCBzYW1wbGVzICovCisKKworLyogU2hvcnQgZm9ybXMgb2YgZXh0ZXJuYWwgbmFtZXMgZm9yIHN5c3RlbXMgd2l0aCBicmFpbi1kYW1hZ2VkIGxpbmtlcnMuICovCisKKyNpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCisjZGVmaW5lIGpwZWdfZmRjdF9pc2xvdwkJakZEaXNsb3cKKyNkZWZpbmUganBlZ19mZGN0X2lmYXN0CQlqRkRpZmFzdAorI2RlZmluZSBqcGVnX2ZkY3RfZmxvYXQJCWpGRGZsb2F0CisjZGVmaW5lIGpwZWdfaWRjdF9pc2xvdwkJalJEaXNsb3cKKyNkZWZpbmUganBlZ19pZGN0X2lmYXN0CQlqUkRpZmFzdAorI2RlZmluZSBqcGVnX2lkY3RfZmxvYXQJCWpSRGZsb2F0CisjZGVmaW5lIGpwZWdfaWRjdF80eDQJCWpSRDR4NAorI2RlZmluZSBqcGVnX2lkY3RfMngyCQlqUkQyeDIKKyNkZWZpbmUganBlZ19pZGN0XzF4MQkJalJEMXgxCisjZW5kaWYgLyogTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUyAqLworCisvKiBFeHRlcm4gZGVjbGFyYXRpb25zIGZvciB0aGUgZm9yd2FyZCBhbmQgaW52ZXJzZSBEQ1Qgcm91dGluZXMuICovCisKK0VYVEVSTih2b2lkKSBqcGVnX2ZkY3RfaXNsb3cgSlBQKChEQ1RFTEVNICogZGF0YSkpOworRVhURVJOKHZvaWQpIGpwZWdfZmRjdF9pZmFzdCBKUFAoKERDVEVMRU0gKiBkYXRhKSk7CitFWFRFUk4odm9pZCkganBlZ19mZGN0X2Zsb2F0IEpQUCgoRkFTVF9GTE9BVCAqIGRhdGEpKTsKKworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF9pc2xvdworICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7CitFWFRFUk4odm9pZCkganBlZ19pZGN0X2lmYXN0CisgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKK0VYVEVSTih2b2lkKSBqcGVnX2lkY3RfZmxvYXQKKyAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF80eDQKKyAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8yeDIKKyAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8xeDEKKyAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworCisKKy8qCisgKiBNYWNyb3MgZm9yIGhhbmRsaW5nIGZpeGVkLXBvaW50IGFyaXRobWV0aWM7IHRoZXNlIGFyZSB1c2VkIGJ5IG1hbnkKKyAqIGJ1dCBub3QgYWxsIG9mIHRoZSBEQ1QvSURDVCBtb2R1bGVzLgorICoKKyAqIEFsbCB2YWx1ZXMgYXJlIGV4cGVjdGVkIHRvIGJlIG9mIHR5cGUgSU5UMzIuCisgKiBGcmFjdGlvbmFsIGNvbnN0YW50cyBhcmUgc2NhbGVkIGxlZnQgYnkgQ09OU1RfQklUUyBiaXRzLgorICogQ09OU1RfQklUUyBpcyBkZWZpbmVkIHdpdGhpbiBlYWNoIG1vZHVsZSB1c2luZyB0aGVzZSBtYWNyb3MsCisgKiBhbmQgbWF5IGRpZmZlciBmcm9tIG9uZSBtb2R1bGUgdG8gdGhlIG5leHQuCisgKi8KKworI2RlZmluZSBPTkUJKChJTlQzMikgMSkKKyNkZWZpbmUgQ09OU1RfU0NBTEUgKE9ORSA8PCBDT05TVF9CSVRTKQorCisvKiBDb252ZXJ0IGEgcG9zaXRpdmUgcmVhbCBjb25zdGFudCB0byBhbiBpbnRlZ2VyIHNjYWxlZCBieSBDT05TVF9TQ0FMRS4KKyAqIENhdXRpb246IHNvbWUgQyBjb21waWxlcnMgZmFpbCB0byByZWR1Y2UgIkZJWChjb25zdGFudCkiIGF0IGNvbXBpbGUgdGltZSwKKyAqIHRodXMgY2F1c2luZyBhIGxvdCBvZiB1c2VsZXNzIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgYXQgcnVuIHRpbWUuCisgKi8KKworI2RlZmluZSBGSVgoeCkJKChJTlQzMikgKCh4KSAqIENPTlNUX1NDQUxFICsgMC41KSkKKworLyogRGVzY2FsZSBhbmQgY29ycmVjdGx5IHJvdW5kIGFuIElOVDMyIHZhbHVlIHRoYXQncyBzY2FsZWQgYnkgTiBiaXRzLgorICogV2UgYXNzdW1lIFJJR0hUX1NISUZUIHJvdW5kcyB0b3dhcmRzIG1pbnVzIGluZmluaXR5LCBzbyBhZGRpbmcKKyAqIHRoZSBmdWRnZSBmYWN0b3IgaXMgY29ycmVjdCBmb3IgZWl0aGVyIHNpZ24gb2YgWC4KKyAqLworCisjZGVmaW5lIERFU0NBTEUoeCxuKSAgUklHSFRfU0hJRlQoKHgpICsgKE9ORSA8PCAoKG4pLTEpKSwgbikKKworLyogTXVsdGlwbHkgYW4gSU5UMzIgdmFyaWFibGUgYnkgYW4gSU5UMzIgY29uc3RhbnQgdG8geWllbGQgYW4gSU5UMzIgcmVzdWx0LgorICogVGhpcyBtYWNybyBpcyB1c2VkIG9ubHkgd2hlbiB0aGUgdHdvIGlucHV0cyB3aWxsIGFjdHVhbGx5IGJlIG5vIG1vcmUgdGhhbgorICogMTYgYml0cyB3aWRlLCBzbyB0aGF0IGEgMTZ4MTYtPjMyIGJpdCBtdWx0aXBseSBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGEKKyAqIGZ1bGwgMzJ4MzIgbXVsdGlwbHkuICBUaGlzIHByb3ZpZGVzIGEgdXNlZnVsIHNwZWVkdXAgb24gbWFueSBtYWNoaW5lcy4KKyAqIFVuZm9ydHVuYXRlbHkgdGhlcmUgaXMgbm8gd2F5IHRvIHNwZWNpZnkgYSAxNngxNi0+MzIgbXVsdGlwbHkgcG9ydGFibHkKKyAqIGluIEMsIGJ1dCBzb21lIEMgY29tcGlsZXJzIHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5nIGlmIHlvdSBwcm92aWRlIHRoZQorICogY29ycmVjdCBjb21iaW5hdGlvbiBvZiBjYXN0cy4KKyAqLworCisjaWZkZWYgU0hPUlR4U0hPUlRfMzIJCS8qIG1heSB3b3JrIGlmICdpbnQnIGlzIDMyIGJpdHMgKi8KKyNkZWZpbmUgTVVMVElQTFkxNkMxNih2YXIsY29uc3QpICAoKChJTlQxNikgKHZhcikpICogKChJTlQxNikgKGNvbnN0KSkpCisjZW5kaWYKKyNpZmRlZiBTSE9SVHhMQ09OU1RfMzIJCS8qIGtub3duIHRvIHdvcmsgd2l0aCBNaWNyb3NvZnQgQyA2LjAgKi8KKyNkZWZpbmUgTVVMVElQTFkxNkMxNih2YXIsY29uc3QpICAoKChJTlQxNikgKHZhcikpICogKChJTlQzMikgKGNvbnN0KSkpCisjZW5kaWYKKworI2lmbmRlZiBNVUxUSVBMWTE2QzE2CQkvKiBkZWZhdWx0IGRlZmluaXRpb24gKi8KKyNkZWZpbmUgTVVMVElQTFkxNkMxNih2YXIsY29uc3QpICAoKHZhcikgKiAoY29uc3QpKQorI2VuZGlmCisKKy8qIFNhbWUgZXhjZXB0IGJvdGggaW5wdXRzIGFyZSB2YXJpYWJsZXMuICovCisKKyNpZmRlZiBTSE9SVHhTSE9SVF8zMgkJLyogbWF5IHdvcmsgaWYgJ2ludCcgaXMgMzIgYml0cyAqLworI2RlZmluZSBNVUxUSVBMWTE2VjE2KHZhcjEsdmFyMikgICgoKElOVDE2KSAodmFyMSkpICogKChJTlQxNikgKHZhcjIpKSkKKyNlbmRpZgorCisjaWZuZGVmIE1VTFRJUExZMTZWMTYJCS8qIGRlZmF1bHQgZGVmaW5pdGlvbiAqLworI2RlZmluZSBNVUxUSVBMWTE2VjE2KHZhcjEsdmFyMikgICgodmFyMSkgKiAodmFyMikpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9qZGh1ZmYuaCBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9qZGh1ZmYuaAppbmRleCAxMmMwNzQ3Li5hZTE5YjZjIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvamRodWZmLmgKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2pkaHVmZi5oCkBAIC0xLDIwMSArMSwyMDEgQEAKLS8qDQotICogamRodWZmLmgNCi0gKg0KLSAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4NCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLg0KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4NCi0gKg0KLSAqIFRoaXMgZmlsZSBjb250YWlucyBkZWNsYXJhdGlvbnMgZm9yIEh1ZmZtYW4gZW50cm9weSBkZWNvZGluZyByb3V0aW5lcw0KLSAqIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZSBzZXF1ZW50aWFsIGRlY29kZXIgKGpkaHVmZi5jKSBhbmQgdGhlDQotICogcHJvZ3Jlc3NpdmUgZGVjb2RlciAoamRwaHVmZi5jKS4gIE5vIG90aGVyIG1vZHVsZXMgbmVlZCB0byBzZWUgdGhlc2UuDQotICovDQotDQotLyogU2hvcnQgZm9ybXMgb2YgZXh0ZXJuYWwgbmFtZXMgZm9yIHN5c3RlbXMgd2l0aCBicmFpbi1kYW1hZ2VkIGxpbmtlcnMuICovDQotDQotI2lmZGVmIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMNCi0jZGVmaW5lIGpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsCWpNa0REZXJpdmVkDQotI2RlZmluZSBqcGVnX2ZpbGxfYml0X2J1ZmZlcglqRmlsQml0QnVmDQotI2RlZmluZSBqcGVnX2h1ZmZfZGVjb2RlCWpIdWZEZWNvZGUNCi0jZW5kaWYgLyogTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUyAqLw0KLQ0KLQ0KLS8qIERlcml2ZWQgZGF0YSBjb25zdHJ1Y3RlZCBmb3IgZWFjaCBIdWZmbWFuIHRhYmxlICovDQotDQotI2RlZmluZSBIVUZGX0xPT0tBSEVBRAk4CS8qICMgb2YgYml0cyBvZiBsb29rYWhlYWQgKi8NCi0NCi10eXBlZGVmIHN0cnVjdCB7DQotICAvKiBCYXNpYyB0YWJsZXM6IChlbGVtZW50IFswXSBvZiBlYWNoIGFycmF5IGlzIHVudXNlZCkgKi8NCi0gIElOVDMyIG1heGNvZGVbMThdOwkJLyogbGFyZ2VzdCBjb2RlIG9mIGxlbmd0aCBrICgtMSBpZiBub25lKSAqLw0KLSAgLyogKG1heGNvZGVbMTddIGlzIGEgc2VudGluZWwgdG8gZW5zdXJlIGpwZWdfaHVmZl9kZWNvZGUgdGVybWluYXRlcykgKi8NCi0gIElOVDMyIHZhbG9mZnNldFsxN107CQkvKiBodWZmdmFsW10gb2Zmc2V0IGZvciBjb2RlcyBvZiBsZW5ndGggayAqLw0KLSAgLyogdmFsb2Zmc2V0W2tdID0gaHVmZnZhbFtdIGluZGV4IG9mIDFzdCBzeW1ib2wgb2YgY29kZSBsZW5ndGggaywgbGVzcw0KLSAgICogdGhlIHNtYWxsZXN0IGNvZGUgb2YgbGVuZ3RoIGs7IHNvIGdpdmVuIGEgY29kZSBvZiBsZW5ndGggaywgdGhlDQotICAgKiBjb3JyZXNwb25kaW5nIHN5bWJvbCBpcyBodWZmdmFsW2NvZGUgKyB2YWxvZmZzZXRba11dDQotICAgKi8NCi0NCi0gIC8qIExpbmsgdG8gcHVibGljIEh1ZmZtYW4gdGFibGUgKG5lZWRlZCBvbmx5IGluIGpwZWdfaHVmZl9kZWNvZGUpICovDQotICBKSFVGRl9UQkwgKnB1YjsNCi0NCi0gIC8qIExvb2thaGVhZCB0YWJsZXM6IGluZGV4ZWQgYnkgdGhlIG5leHQgSFVGRl9MT09LQUhFQUQgYml0cyBvZg0KLSAgICogdGhlIGlucHV0IGRhdGEgc3RyZWFtLiAgSWYgdGhlIG5leHQgSHVmZm1hbiBjb2RlIGlzIG5vIG1vcmUNCi0gICAqIHRoYW4gSFVGRl9MT09LQUhFQUQgYml0cyBsb25nLCB3ZSBjYW4gb2J0YWluIGl0cyBsZW5ndGggYW5kDQotICAgKiB0aGUgY29ycmVzcG9uZGluZyBzeW1ib2wgZGlyZWN0bHkgZnJvbSB0aGVzZSB0YWJsZXMuDQotICAgKi8NCi0gIGludCBsb29rX25iaXRzWzE8PEhVRkZfTE9PS0FIRUFEXTsgLyogIyBiaXRzLCBvciAwIGlmIHRvbyBsb25nICovDQotICBVSU5UOCBsb29rX3N5bVsxPDxIVUZGX0xPT0tBSEVBRF07IC8qIHN5bWJvbCwgb3IgdW51c2VkICovDQotfSBkX2Rlcml2ZWRfdGJsOw0KLQ0KLS8qIEV4cGFuZCBhIEh1ZmZtYW4gdGFibGUgZGVmaW5pdGlvbiBpbnRvIHRoZSBkZXJpdmVkIGZvcm1hdCAqLw0KLUVYVEVSTih2b2lkKSBqcGVnX21ha2VfZF9kZXJpdmVkX3RibA0KLQlKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gaXNEQywgaW50IHRibG5vLA0KLQkgICAgIGRfZGVyaXZlZF90YmwgKiogcGR0YmwpKTsNCi0NCi0NCi0vKg0KLSAqIEZldGNoaW5nIHRoZSBuZXh0IE4gYml0cyBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gaXMgYSB0aW1lLWNyaXRpY2FsIG9wZXJhdGlvbg0KLSAqIGZvciB0aGUgSHVmZm1hbiBkZWNvZGVycy4gIFdlIGltcGxlbWVudCBpdCB3aXRoIGEgY29tYmluYXRpb24gb2YgaW5saW5lDQotICogbWFjcm9zIGFuZCBvdXQtb2YtbGluZSBzdWJyb3V0aW5lcy4gIE5vdGUgdGhhdCBOICh0aGUgbnVtYmVyIG9mIGJpdHMNCi0gKiBkZW1hbmRlZCBhdCBvbmUgdGltZSkgbmV2ZXIgZXhjZWVkcyAxNSBmb3IgSlBFRyB1c2UuDQotICoNCi0gKiBXZSByZWFkIHNvdXJjZSBieXRlcyBpbnRvIGdldF9idWZmZXIgYW5kIGRvbGUgb3V0IGJpdHMgYXMgbmVlZGVkLg0KLSAqIElmIGdldF9idWZmZXIgYWxyZWFkeSBjb250YWlucyBlbm91Z2ggYml0cywgdGhleSBhcmUgZmV0Y2hlZCBpbi1saW5lDQotICogYnkgdGhlIG1hY3JvcyBDSEVDS19CSVRfQlVGRkVSIGFuZCBHRVRfQklUUy4gIFdoZW4gdGhlcmUgYXJlbid0IGVub3VnaA0KLSAqIGJpdHMsIGpwZWdfZmlsbF9iaXRfYnVmZmVyIGlzIGNhbGxlZDsgaXQgd2lsbCBhdHRlbXB0IHRvIGZpbGwgZ2V0X2J1ZmZlcg0KLSAqIGFzIGZ1bGwgYXMgcG9zc2libGUgKG5vdCBqdXN0IHRvIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQ7IHRoaXMNCi0gKiBwcmVmZXRjaGluZyByZWR1Y2VzIHRoZSBvdmVyaGVhZCBjb3N0IG9mIGNhbGxpbmcganBlZ19maWxsX2JpdF9idWZmZXIpLg0KLSAqIE5vdGUgdGhhdCBqcGVnX2ZpbGxfYml0X2J1ZmZlciBtYXkgcmV0dXJuIEZBTFNFIHRvIGluZGljYXRlIHN1c3BlbnNpb24uDQotICogT24gVFJVRSByZXR1cm4sIGpwZWdfZmlsbF9iaXRfYnVmZmVyIGd1YXJhbnRlZXMgdGhhdCBnZXRfYnVmZmVyIGNvbnRhaW5zDQotICogYXQgbGVhc3QgdGhlIHJlcXVlc3RlZCBudW1iZXIgb2YgYml0cyAtLS0gZHVtbXkgemVyb2VzIGFyZSBpbnNlcnRlZCBpZg0KLSAqIG5lY2Vzc2FyeS4NCi0gKi8NCi0NCi10eXBlZGVmIElOVDMyIGJpdF9idWZfdHlwZTsJLyogdHlwZSBvZiBiaXQtZXh0cmFjdGlvbiBidWZmZXIgKi8NCi0jZGVmaW5lIEJJVF9CVUZfU0laRSAgMzIJLyogc2l6ZSBvZiBidWZmZXIgaW4gYml0cyAqLw0KLQ0KLS8qIElmIGxvbmcgaXMgPiAzMiBiaXRzIG9uIHlvdXIgbWFjaGluZSwgYW5kIHNoaWZ0aW5nL21hc2tpbmcgbG9uZ3MgaXMNCi0gKiByZWFzb25hYmx5IGZhc3QsIG1ha2luZyBiaXRfYnVmX3R5cGUgYmUgbG9uZyBhbmQgc2V0dGluZyBCSVRfQlVGX1NJWkUNCi0gKiBhcHByb3ByaWF0ZWx5IHNob3VsZCBiZSBhIHdpbi4gIFVuZm9ydHVuYXRlbHkgd2UgY2FuJ3QgZGVmaW5lIHRoZSBzaXplDQotICogd2l0aCBzb21ldGhpbmcgbGlrZSAgI2RlZmluZSBCSVRfQlVGX1NJWkUgKHNpemVvZihiaXRfYnVmX3R5cGUpKjgpDQotICogYmVjYXVzZSBub3QgYWxsIG1hY2hpbmVzIG1lYXN1cmUgc2l6ZW9mIGluIDgtYml0IGJ5dGVzLg0KLSAqLw0KLQ0KLXR5cGVkZWYgc3RydWN0IHsJCS8qIEJpdHJlYWRpbmcgc3RhdGUgc2F2ZWQgYWNyb3NzIE1DVXMgKi8NCi0gIGJpdF9idWZfdHlwZSBnZXRfYnVmZmVyOwkvKiBjdXJyZW50IGJpdC1leHRyYWN0aW9uIGJ1ZmZlciAqLw0KLSAgaW50IGJpdHNfbGVmdDsJCS8qICMgb2YgdW51c2VkIGJpdHMgaW4gaXQgKi8NCi19IGJpdHJlYWRfcGVybV9zdGF0ZTsNCi0NCi10eXBlZGVmIHN0cnVjdCB7CQkvKiBCaXRyZWFkaW5nIHdvcmtpbmcgc3RhdGUgd2l0aGluIGFuIE1DVSAqLw0KLSAgLyogQ3VycmVudCBkYXRhIHNvdXJjZSBsb2NhdGlvbiAqLw0KLSAgLyogV2UgbmVlZCBhIGNvcHksIHJhdGhlciB0aGFuIG11bmdpbmcgdGhlIG9yaWdpbmFsLCBpbiBjYXNlIG9mIHN1c3BlbnNpb24gKi8NCi0gIGNvbnN0IEpPQ1RFVCAqIG5leHRfaW5wdXRfYnl0ZTsgLyogPT4gbmV4dCBieXRlIHRvIHJlYWQgZnJvbSBzb3VyY2UgKi8NCi0gIHNpemVfdCBieXRlc19pbl9idWZmZXI7CS8qICMgb2YgYnl0ZXMgcmVtYWluaW5nIGluIHNvdXJjZSBidWZmZXIgKi8NCi0gIC8qIEJpdCBpbnB1dCBidWZmZXIgLS0tIG5vdGUgdGhlc2UgdmFsdWVzIGFyZSBrZXB0IGluIHJlZ2lzdGVyIHZhcmlhYmxlcywNCi0gICAqIG5vdCBpbiB0aGlzIHN0cnVjdCwgaW5zaWRlIHRoZSBpbm5lciBsb29wcy4NCi0gICAqLw0KLSAgYml0X2J1Zl90eXBlIGdldF9idWZmZXI7CS8qIGN1cnJlbnQgYml0LWV4dHJhY3Rpb24gYnVmZmVyICovDQotICBpbnQgYml0c19sZWZ0OwkJLyogIyBvZiB1bnVzZWQgYml0cyBpbiBpdCAqLw0KLSAgLyogUG9pbnRlciBuZWVkZWQgYnkganBlZ19maWxsX2JpdF9idWZmZXIuICovDQotICBqX2RlY29tcHJlc3NfcHRyIGNpbmZvOwkvKiBiYWNrIGxpbmsgdG8gZGVjb21wcmVzcyBtYXN0ZXIgcmVjb3JkICovDQotfSBiaXRyZWFkX3dvcmtpbmdfc3RhdGU7DQotDQotLyogTWFjcm9zIHRvIGRlY2xhcmUgYW5kIGxvYWQvc2F2ZSBiaXRyZWFkIGxvY2FsIHZhcmlhYmxlcy4gKi8NCi0jZGVmaW5lIEJJVFJFQURfU1RBVEVfVkFSUyAgXA0KLQlyZWdpc3RlciBiaXRfYnVmX3R5cGUgZ2V0X2J1ZmZlcjsgIFwNCi0JcmVnaXN0ZXIgaW50IGJpdHNfbGVmdDsgIFwNCi0JYml0cmVhZF93b3JraW5nX3N0YXRlIGJyX3N0YXRlDQotDQotI2RlZmluZSBCSVRSRUFEX0xPQURfU1RBVEUoY2luZm9wLHBlcm1zdGF0ZSkgIFwNCi0JYnJfc3RhdGUuY2luZm8gPSBjaW5mb3A7IFwNCi0JYnJfc3RhdGUubmV4dF9pbnB1dF9ieXRlID0gY2luZm9wLT5zcmMtPm5leHRfaW5wdXRfYnl0ZTsgXA0KLQlicl9zdGF0ZS5ieXRlc19pbl9idWZmZXIgPSBjaW5mb3AtPnNyYy0+Ynl0ZXNfaW5fYnVmZmVyOyBcDQotCWdldF9idWZmZXIgPSBwZXJtc3RhdGUuZ2V0X2J1ZmZlcjsgXA0KLQliaXRzX2xlZnQgPSBwZXJtc3RhdGUuYml0c19sZWZ0Ow0KLQ0KLSNkZWZpbmUgQklUUkVBRF9TQVZFX1NUQVRFKGNpbmZvcCxwZXJtc3RhdGUpICBcDQotCWNpbmZvcC0+c3JjLT5uZXh0X2lucHV0X2J5dGUgPSBicl9zdGF0ZS5uZXh0X2lucHV0X2J5dGU7IFwNCi0JY2luZm9wLT5zcmMtPmJ5dGVzX2luX2J1ZmZlciA9IGJyX3N0YXRlLmJ5dGVzX2luX2J1ZmZlcjsgXA0KLQlwZXJtc3RhdGUuZ2V0X2J1ZmZlciA9IGdldF9idWZmZXI7IFwNCi0JcGVybXN0YXRlLmJpdHNfbGVmdCA9IGJpdHNfbGVmdA0KLQ0KLS8qDQotICogVGhlc2UgbWFjcm9zIHByb3ZpZGUgdGhlIGluLWxpbmUgcG9ydGlvbiBvZiBiaXQgZmV0Y2hpbmcuDQotICogVXNlIENIRUNLX0JJVF9CVUZGRVIgdG8gZW5zdXJlIHRoZXJlIGFyZSBOIGJpdHMgaW4gZ2V0X2J1ZmZlcg0KLSAqIGJlZm9yZSB1c2luZyBHRVRfQklUUywgUEVFS19CSVRTLCBvciBEUk9QX0JJVFMuDQotICogVGhlIHZhcmlhYmxlcyBnZXRfYnVmZmVyIGFuZCBiaXRzX2xlZnQgYXJlIGFzc3VtZWQgdG8gYmUgbG9jYWxzLA0KLSAqIGJ1dCB0aGUgc3RhdGUgc3RydWN0IG1pZ2h0IG5vdCBiZSAoanBlZ19odWZmX2RlY29kZSBuZWVkcyB0aGlzKS4NCi0gKglDSEVDS19CSVRfQlVGRkVSKHN0YXRlLG4sYWN0aW9uKTsNCi0gKgkJRW5zdXJlIHRoZXJlIGFyZSBOIGJpdHMgaW4gZ2V0X2J1ZmZlcjsgaWYgc3VzcGVuZCwgdGFrZSBhY3Rpb24uDQotICogICAgICB2YWwgPSBHRVRfQklUUyhuKTsNCi0gKgkJRmV0Y2ggbmV4dCBOIGJpdHMuDQotICogICAgICB2YWwgPSBQRUVLX0JJVFMobik7DQotICoJCUZldGNoIG5leHQgTiBiaXRzIHdpdGhvdXQgcmVtb3ZpbmcgdGhlbSBmcm9tIHRoZSBidWZmZXIuDQotICoJRFJPUF9CSVRTKG4pOw0KLSAqCQlEaXNjYXJkIG5leHQgTiBiaXRzLg0KLSAqIFRoZSB2YWx1ZSBOIHNob3VsZCBiZSBhIHNpbXBsZSB2YXJpYWJsZSwgbm90IGFuIGV4cHJlc3Npb24sIGJlY2F1c2UgaXQNCi0gKiBpcyBldmFsdWF0ZWQgbXVsdGlwbGUgdGltZXMuDQotICovDQotDQotI2RlZmluZSBDSEVDS19CSVRfQlVGRkVSKHN0YXRlLG5iaXRzLGFjdGlvbikgXA0KLQl7IGlmIChiaXRzX2xlZnQgPCAobmJpdHMpKSB7ICBcDQotCSAgICBpZiAoISBqcGVnX2ZpbGxfYml0X2J1ZmZlcigmKHN0YXRlKSxnZXRfYnVmZmVyLGJpdHNfbGVmdCxuYml0cykpICBcDQotCSAgICAgIHsgYWN0aW9uOyB9ICBcDQotCSAgICBnZXRfYnVmZmVyID0gKHN0YXRlKS5nZXRfYnVmZmVyOyBiaXRzX2xlZnQgPSAoc3RhdGUpLmJpdHNfbGVmdDsgfSB9DQotDQotI2RlZmluZSBHRVRfQklUUyhuYml0cykgXA0KLQkoKChpbnQpIChnZXRfYnVmZmVyID4+IChiaXRzX2xlZnQgLT0gKG5iaXRzKSkpKSAmICgoMTw8KG5iaXRzKSktMSkpDQotDQotI2RlZmluZSBQRUVLX0JJVFMobmJpdHMpIFwNCi0JKCgoaW50KSAoZ2V0X2J1ZmZlciA+PiAoYml0c19sZWZ0IC0gIChuYml0cykpKSkgJiAoKDE8PChuYml0cykpLTEpKQ0KLQ0KLSNkZWZpbmUgRFJPUF9CSVRTKG5iaXRzKSBcDQotCShiaXRzX2xlZnQgLT0gKG5iaXRzKSkNCi0NCi0vKiBMb2FkIHVwIHRoZSBiaXQgYnVmZmVyIHRvIGEgZGVwdGggb2YgYXQgbGVhc3QgbmJpdHMgKi8NCi1FWFRFUk4oYm9vbGVhbikganBlZ19maWxsX2JpdF9idWZmZXINCi0JSlBQKChiaXRyZWFkX3dvcmtpbmdfc3RhdGUgKiBzdGF0ZSwgcmVnaXN0ZXIgYml0X2J1Zl90eXBlIGdldF9idWZmZXIsDQotCSAgICAgcmVnaXN0ZXIgaW50IGJpdHNfbGVmdCwgaW50IG5iaXRzKSk7DQotDQotDQotLyoNCi0gKiBDb2RlIGZvciBleHRyYWN0aW5nIG5leHQgSHVmZm1hbi1jb2RlZCBzeW1ib2wgZnJvbSBpbnB1dCBiaXQgc3RyZWFtLg0KLSAqIEFnYWluLCB0aGlzIGlzIHRpbWUtY3JpdGljYWwgYW5kIHdlIG1ha2UgdGhlIG1haW4gcGF0aHMgYmUgbWFjcm9zLg0KLSAqDQotICogV2UgdXNlIGEgbG9va2FoZWFkIHRhYmxlIHRvIHByb2Nlc3MgY29kZXMgb2YgdXAgdG8gSFVGRl9MT09LQUhFQUQgYml0cw0KLSAqIHdpdGhvdXQgbG9vcGluZy4gIFVzdWFsbHksIG1vcmUgdGhhbiA5NSUgb2YgdGhlIEh1ZmZtYW4gY29kZXMgd2lsbCBiZSA4DQotICogb3IgZmV3ZXIgYml0cyBsb25nLiAgVGhlIGZldyBvdmVybGVuZ3RoIGNvZGVzIGFyZSBoYW5kbGVkIHdpdGggYSBsb29wLA0KLSAqIHdoaWNoIG5lZWQgbm90IGJlIGlubGluZSBjb2RlLg0KLSAqDQotICogTm90ZXMgYWJvdXQgdGhlIEhVRkZfREVDT0RFIG1hY3JvOg0KLSAqIDEuIE5lYXIgdGhlIGVuZCBvZiB0aGUgZGF0YSBzZWdtZW50LCB3ZSBtYXkgZmFpbCB0byBnZXQgZW5vdWdoIGJpdHMNCi0gKiAgICBmb3IgYSBsb29rYWhlYWQuICBJbiB0aGF0IGNhc2UsIHdlIGRvIGl0IHRoZSBoYXJkIHdheS4NCi0gKiAyLiBJZiB0aGUgbG9va2FoZWFkIHRhYmxlIGNvbnRhaW5zIG5vIGVudHJ5LCB0aGUgbmV4dCBjb2RlIG11c3QgYmUNCi0gKiAgICBtb3JlIHRoYW4gSFVGRl9MT09LQUhFQUQgYml0cyBsb25nLg0KLSAqIDMuIGpwZWdfaHVmZl9kZWNvZGUgcmV0dXJucyAtMSBpZiBmb3JjZWQgdG8gc3VzcGVuZC4NCi0gKi8NCi0NCi0jZGVmaW5lIEhVRkZfREVDT0RFKHJlc3VsdCxzdGF0ZSxodGJsLGZhaWxhY3Rpb24sc2xvd2xhYmVsKSBcDQoteyByZWdpc3RlciBpbnQgbmIsIGxvb2s7IFwNCi0gIGlmIChiaXRzX2xlZnQgPCBIVUZGX0xPT0tBSEVBRCkgeyBcDQotICAgIGlmICghIGpwZWdfZmlsbF9iaXRfYnVmZmVyKCZzdGF0ZSxnZXRfYnVmZmVyLGJpdHNfbGVmdCwgMCkpIHtmYWlsYWN0aW9uO30gXA0KLSAgICBnZXRfYnVmZmVyID0gc3RhdGUuZ2V0X2J1ZmZlcjsgYml0c19sZWZ0ID0gc3RhdGUuYml0c19sZWZ0OyBcDQotICAgIGlmIChiaXRzX2xlZnQgPCBIVUZGX0xPT0tBSEVBRCkgeyBcDQotICAgICAgbmIgPSAxOyBnb3RvIHNsb3dsYWJlbDsgXA0KLSAgICB9IFwNCi0gIH0gXA0KLSAgbG9vayA9IFBFRUtfQklUUyhIVUZGX0xPT0tBSEVBRCk7IFwNCi0gIGlmICgobmIgPSBodGJsLT5sb29rX25iaXRzW2xvb2tdKSAhPSAwKSB7IFwNCi0gICAgRFJPUF9CSVRTKG5iKTsgXA0KLSAgICByZXN1bHQgPSBodGJsLT5sb29rX3N5bVtsb29rXTsgXA0KLSAgfSBlbHNlIHsgXA0KLSAgICBuYiA9IEhVRkZfTE9PS0FIRUFEKzE7IFwNCi1zbG93bGFiZWw6IFwNCi0gICAgaWYgKChyZXN1bHQ9anBlZ19odWZmX2RlY29kZSgmc3RhdGUsZ2V0X2J1ZmZlcixiaXRzX2xlZnQsaHRibCxuYikpIDwgMCkgXA0KLQl7IGZhaWxhY3Rpb247IH0gXA0KLSAgICBnZXRfYnVmZmVyID0gc3RhdGUuZ2V0X2J1ZmZlcjsgYml0c19sZWZ0ID0gc3RhdGUuYml0c19sZWZ0OyBcDQotICB9IFwNCi19DQotDQotLyogT3V0LW9mLWxpbmUgY2FzZSBmb3IgSHVmZm1hbiBjb2RlIGZldGNoaW5nICovDQotRVhURVJOKGludCkganBlZ19odWZmX2RlY29kZQ0KLQlKUFAoKGJpdHJlYWRfd29ya2luZ19zdGF0ZSAqIHN0YXRlLCByZWdpc3RlciBiaXRfYnVmX3R5cGUgZ2V0X2J1ZmZlciwNCi0JICAgICByZWdpc3RlciBpbnQgYml0c19sZWZ0LCBkX2Rlcml2ZWRfdGJsICogaHRibCwgaW50IG1pbl9iaXRzKSk7DQorLyoKKyAqIGpkaHVmZi5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZGVjbGFyYXRpb25zIGZvciBIdWZmbWFuIGVudHJvcHkgZGVjb2Rpbmcgcm91dGluZXMKKyAqIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZSBzZXF1ZW50aWFsIGRlY29kZXIgKGpkaHVmZi5jKSBhbmQgdGhlCisgKiBwcm9ncmVzc2l2ZSBkZWNvZGVyIChqZHBodWZmLmMpLiAgTm8gb3RoZXIgbW9kdWxlcyBuZWVkIHRvIHNlZSB0aGVzZS4KKyAqLworCisvKiBTaG9ydCBmb3JtcyBvZiBleHRlcm5hbCBuYW1lcyBmb3Igc3lzdGVtcyB3aXRoIGJyYWluLWRhbWFnZWQgbGlua2Vycy4gKi8KKworI2lmZGVmIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMKKyNkZWZpbmUganBlZ19tYWtlX2RfZGVyaXZlZF90YmwJak1rRERlcml2ZWQKKyNkZWZpbmUganBlZ19maWxsX2JpdF9idWZmZXIJakZpbEJpdEJ1ZgorI2RlZmluZSBqcGVnX2h1ZmZfZGVjb2RlCWpIdWZEZWNvZGUKKyNlbmRpZiAvKiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTICovCisKKworLyogRGVyaXZlZCBkYXRhIGNvbnN0cnVjdGVkIGZvciBlYWNoIEh1ZmZtYW4gdGFibGUgKi8KKworI2RlZmluZSBIVUZGX0xPT0tBSEVBRAk4CS8qICMgb2YgYml0cyBvZiBsb29rYWhlYWQgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAvKiBCYXNpYyB0YWJsZXM6IChlbGVtZW50IFswXSBvZiBlYWNoIGFycmF5IGlzIHVudXNlZCkgKi8KKyAgSU5UMzIgbWF4Y29kZVsxOF07CQkvKiBsYXJnZXN0IGNvZGUgb2YgbGVuZ3RoIGsgKC0xIGlmIG5vbmUpICovCisgIC8qIChtYXhjb2RlWzE3XSBpcyBhIHNlbnRpbmVsIHRvIGVuc3VyZSBqcGVnX2h1ZmZfZGVjb2RlIHRlcm1pbmF0ZXMpICovCisgIElOVDMyIHZhbG9mZnNldFsxN107CQkvKiBodWZmdmFsW10gb2Zmc2V0IGZvciBjb2RlcyBvZiBsZW5ndGggayAqLworICAvKiB2YWxvZmZzZXRba10gPSBodWZmdmFsW10gaW5kZXggb2YgMXN0IHN5bWJvbCBvZiBjb2RlIGxlbmd0aCBrLCBsZXNzCisgICAqIHRoZSBzbWFsbGVzdCBjb2RlIG9mIGxlbmd0aCBrOyBzbyBnaXZlbiBhIGNvZGUgb2YgbGVuZ3RoIGssIHRoZQorICAgKiBjb3JyZXNwb25kaW5nIHN5bWJvbCBpcyBodWZmdmFsW2NvZGUgKyB2YWxvZmZzZXRba11dCisgICAqLworCisgIC8qIExpbmsgdG8gcHVibGljIEh1ZmZtYW4gdGFibGUgKG5lZWRlZCBvbmx5IGluIGpwZWdfaHVmZl9kZWNvZGUpICovCisgIEpIVUZGX1RCTCAqcHViOworCisgIC8qIExvb2thaGVhZCB0YWJsZXM6IGluZGV4ZWQgYnkgdGhlIG5leHQgSFVGRl9MT09LQUhFQUQgYml0cyBvZgorICAgKiB0aGUgaW5wdXQgZGF0YSBzdHJlYW0uICBJZiB0aGUgbmV4dCBIdWZmbWFuIGNvZGUgaXMgbm8gbW9yZQorICAgKiB0aGFuIEhVRkZfTE9PS0FIRUFEIGJpdHMgbG9uZywgd2UgY2FuIG9idGFpbiBpdHMgbGVuZ3RoIGFuZAorICAgKiB0aGUgY29ycmVzcG9uZGluZyBzeW1ib2wgZGlyZWN0bHkgZnJvbSB0aGVzZSB0YWJsZXMuCisgICAqLworICBpbnQgbG9va19uYml0c1sxPDxIVUZGX0xPT0tBSEVBRF07IC8qICMgYml0cywgb3IgMCBpZiB0b28gbG9uZyAqLworICBVSU5UOCBsb29rX3N5bVsxPDxIVUZGX0xPT0tBSEVBRF07IC8qIHN5bWJvbCwgb3IgdW51c2VkICovCit9IGRfZGVyaXZlZF90Ymw7CisKKy8qIEV4cGFuZCBhIEh1ZmZtYW4gdGFibGUgZGVmaW5pdGlvbiBpbnRvIHRoZSBkZXJpdmVkIGZvcm1hdCAqLworRVhURVJOKHZvaWQpIGpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsCisJSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIGlzREMsIGludCB0YmxubywKKwkgICAgIGRfZGVyaXZlZF90YmwgKiogcGR0YmwpKTsKKworCisvKgorICogRmV0Y2hpbmcgdGhlIG5leHQgTiBiaXRzIGZyb20gdGhlIGlucHV0IHN0cmVhbSBpcyBhIHRpbWUtY3JpdGljYWwgb3BlcmF0aW9uCisgKiBmb3IgdGhlIEh1ZmZtYW4gZGVjb2RlcnMuICBXZSBpbXBsZW1lbnQgaXQgd2l0aCBhIGNvbWJpbmF0aW9uIG9mIGlubGluZQorICogbWFjcm9zIGFuZCBvdXQtb2YtbGluZSBzdWJyb3V0aW5lcy4gIE5vdGUgdGhhdCBOICh0aGUgbnVtYmVyIG9mIGJpdHMKKyAqIGRlbWFuZGVkIGF0IG9uZSB0aW1lKSBuZXZlciBleGNlZWRzIDE1IGZvciBKUEVHIHVzZS4KKyAqCisgKiBXZSByZWFkIHNvdXJjZSBieXRlcyBpbnRvIGdldF9idWZmZXIgYW5kIGRvbGUgb3V0IGJpdHMgYXMgbmVlZGVkLgorICogSWYgZ2V0X2J1ZmZlciBhbHJlYWR5IGNvbnRhaW5zIGVub3VnaCBiaXRzLCB0aGV5IGFyZSBmZXRjaGVkIGluLWxpbmUKKyAqIGJ5IHRoZSBtYWNyb3MgQ0hFQ0tfQklUX0JVRkZFUiBhbmQgR0VUX0JJVFMuICBXaGVuIHRoZXJlIGFyZW4ndCBlbm91Z2gKKyAqIGJpdHMsIGpwZWdfZmlsbF9iaXRfYnVmZmVyIGlzIGNhbGxlZDsgaXQgd2lsbCBhdHRlbXB0IHRvIGZpbGwgZ2V0X2J1ZmZlcgorICogYXMgZnVsbCBhcyBwb3NzaWJsZSAobm90IGp1c3QgdG8gdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZDsgdGhpcworICogcHJlZmV0Y2hpbmcgcmVkdWNlcyB0aGUgb3ZlcmhlYWQgY29zdCBvZiBjYWxsaW5nIGpwZWdfZmlsbF9iaXRfYnVmZmVyKS4KKyAqIE5vdGUgdGhhdCBqcGVnX2ZpbGxfYml0X2J1ZmZlciBtYXkgcmV0dXJuIEZBTFNFIHRvIGluZGljYXRlIHN1c3BlbnNpb24uCisgKiBPbiBUUlVFIHJldHVybiwganBlZ19maWxsX2JpdF9idWZmZXIgZ3VhcmFudGVlcyB0aGF0IGdldF9idWZmZXIgY29udGFpbnMKKyAqIGF0IGxlYXN0IHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJpdHMgLS0tIGR1bW15IHplcm9lcyBhcmUgaW5zZXJ0ZWQgaWYKKyAqIG5lY2Vzc2FyeS4KKyAqLworCit0eXBlZGVmIElOVDMyIGJpdF9idWZfdHlwZTsJLyogdHlwZSBvZiBiaXQtZXh0cmFjdGlvbiBidWZmZXIgKi8KKyNkZWZpbmUgQklUX0JVRl9TSVpFICAzMgkvKiBzaXplIG9mIGJ1ZmZlciBpbiBiaXRzICovCisKKy8qIElmIGxvbmcgaXMgPiAzMiBiaXRzIG9uIHlvdXIgbWFjaGluZSwgYW5kIHNoaWZ0aW5nL21hc2tpbmcgbG9uZ3MgaXMKKyAqIHJlYXNvbmFibHkgZmFzdCwgbWFraW5nIGJpdF9idWZfdHlwZSBiZSBsb25nIGFuZCBzZXR0aW5nIEJJVF9CVUZfU0laRQorICogYXBwcm9wcmlhdGVseSBzaG91bGQgYmUgYSB3aW4uICBVbmZvcnR1bmF0ZWx5IHdlIGNhbid0IGRlZmluZSB0aGUgc2l6ZQorICogd2l0aCBzb21ldGhpbmcgbGlrZSAgI2RlZmluZSBCSVRfQlVGX1NJWkUgKHNpemVvZihiaXRfYnVmX3R5cGUpKjgpCisgKiBiZWNhdXNlIG5vdCBhbGwgbWFjaGluZXMgbWVhc3VyZSBzaXplb2YgaW4gOC1iaXQgYnl0ZXMuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgewkJLyogQml0cmVhZGluZyBzdGF0ZSBzYXZlZCBhY3Jvc3MgTUNVcyAqLworICBiaXRfYnVmX3R5cGUgZ2V0X2J1ZmZlcjsJLyogY3VycmVudCBiaXQtZXh0cmFjdGlvbiBidWZmZXIgKi8KKyAgaW50IGJpdHNfbGVmdDsJCS8qICMgb2YgdW51c2VkIGJpdHMgaW4gaXQgKi8KK30gYml0cmVhZF9wZXJtX3N0YXRlOworCit0eXBlZGVmIHN0cnVjdCB7CQkvKiBCaXRyZWFkaW5nIHdvcmtpbmcgc3RhdGUgd2l0aGluIGFuIE1DVSAqLworICAvKiBDdXJyZW50IGRhdGEgc291cmNlIGxvY2F0aW9uICovCisgIC8qIFdlIG5lZWQgYSBjb3B5LCByYXRoZXIgdGhhbiBtdW5naW5nIHRoZSBvcmlnaW5hbCwgaW4gY2FzZSBvZiBzdXNwZW5zaW9uICovCisgIGNvbnN0IEpPQ1RFVCAqIG5leHRfaW5wdXRfYnl0ZTsgLyogPT4gbmV4dCBieXRlIHRvIHJlYWQgZnJvbSBzb3VyY2UgKi8KKyAgc2l6ZV90IGJ5dGVzX2luX2J1ZmZlcjsJLyogIyBvZiBieXRlcyByZW1haW5pbmcgaW4gc291cmNlIGJ1ZmZlciAqLworICAvKiBCaXQgaW5wdXQgYnVmZmVyIC0tLSBub3RlIHRoZXNlIHZhbHVlcyBhcmUga2VwdCBpbiByZWdpc3RlciB2YXJpYWJsZXMsCisgICAqIG5vdCBpbiB0aGlzIHN0cnVjdCwgaW5zaWRlIHRoZSBpbm5lciBsb29wcy4KKyAgICovCisgIGJpdF9idWZfdHlwZSBnZXRfYnVmZmVyOwkvKiBjdXJyZW50IGJpdC1leHRyYWN0aW9uIGJ1ZmZlciAqLworICBpbnQgYml0c19sZWZ0OwkJLyogIyBvZiB1bnVzZWQgYml0cyBpbiBpdCAqLworICAvKiBQb2ludGVyIG5lZWRlZCBieSBqcGVnX2ZpbGxfYml0X2J1ZmZlci4gKi8KKyAgal9kZWNvbXByZXNzX3B0ciBjaW5mbzsJLyogYmFjayBsaW5rIHRvIGRlY29tcHJlc3MgbWFzdGVyIHJlY29yZCAqLworfSBiaXRyZWFkX3dvcmtpbmdfc3RhdGU7CisKKy8qIE1hY3JvcyB0byBkZWNsYXJlIGFuZCBsb2FkL3NhdmUgYml0cmVhZCBsb2NhbCB2YXJpYWJsZXMuICovCisjZGVmaW5lIEJJVFJFQURfU1RBVEVfVkFSUyAgXAorCXJlZ2lzdGVyIGJpdF9idWZfdHlwZSBnZXRfYnVmZmVyOyAgXAorCXJlZ2lzdGVyIGludCBiaXRzX2xlZnQ7ICBcCisJYml0cmVhZF93b3JraW5nX3N0YXRlIGJyX3N0YXRlCisKKyNkZWZpbmUgQklUUkVBRF9MT0FEX1NUQVRFKGNpbmZvcCxwZXJtc3RhdGUpICBcCisJYnJfc3RhdGUuY2luZm8gPSBjaW5mb3A7IFwKKwlicl9zdGF0ZS5uZXh0X2lucHV0X2J5dGUgPSBjaW5mb3AtPnNyYy0+bmV4dF9pbnB1dF9ieXRlOyBcCisJYnJfc3RhdGUuYnl0ZXNfaW5fYnVmZmVyID0gY2luZm9wLT5zcmMtPmJ5dGVzX2luX2J1ZmZlcjsgXAorCWdldF9idWZmZXIgPSBwZXJtc3RhdGUuZ2V0X2J1ZmZlcjsgXAorCWJpdHNfbGVmdCA9IHBlcm1zdGF0ZS5iaXRzX2xlZnQ7CisKKyNkZWZpbmUgQklUUkVBRF9TQVZFX1NUQVRFKGNpbmZvcCxwZXJtc3RhdGUpICBcCisJY2luZm9wLT5zcmMtPm5leHRfaW5wdXRfYnl0ZSA9IGJyX3N0YXRlLm5leHRfaW5wdXRfYnl0ZTsgXAorCWNpbmZvcC0+c3JjLT5ieXRlc19pbl9idWZmZXIgPSBicl9zdGF0ZS5ieXRlc19pbl9idWZmZXI7IFwKKwlwZXJtc3RhdGUuZ2V0X2J1ZmZlciA9IGdldF9idWZmZXI7IFwKKwlwZXJtc3RhdGUuYml0c19sZWZ0ID0gYml0c19sZWZ0CisKKy8qCisgKiBUaGVzZSBtYWNyb3MgcHJvdmlkZSB0aGUgaW4tbGluZSBwb3J0aW9uIG9mIGJpdCBmZXRjaGluZy4KKyAqIFVzZSBDSEVDS19CSVRfQlVGRkVSIHRvIGVuc3VyZSB0aGVyZSBhcmUgTiBiaXRzIGluIGdldF9idWZmZXIKKyAqIGJlZm9yZSB1c2luZyBHRVRfQklUUywgUEVFS19CSVRTLCBvciBEUk9QX0JJVFMuCisgKiBUaGUgdmFyaWFibGVzIGdldF9idWZmZXIgYW5kIGJpdHNfbGVmdCBhcmUgYXNzdW1lZCB0byBiZSBsb2NhbHMsCisgKiBidXQgdGhlIHN0YXRlIHN0cnVjdCBtaWdodCBub3QgYmUgKGpwZWdfaHVmZl9kZWNvZGUgbmVlZHMgdGhpcykuCisgKglDSEVDS19CSVRfQlVGRkVSKHN0YXRlLG4sYWN0aW9uKTsKKyAqCQlFbnN1cmUgdGhlcmUgYXJlIE4gYml0cyBpbiBnZXRfYnVmZmVyOyBpZiBzdXNwZW5kLCB0YWtlIGFjdGlvbi4KKyAqICAgICAgdmFsID0gR0VUX0JJVFMobik7CisgKgkJRmV0Y2ggbmV4dCBOIGJpdHMuCisgKiAgICAgIHZhbCA9IFBFRUtfQklUUyhuKTsKKyAqCQlGZXRjaCBuZXh0IE4gYml0cyB3aXRob3V0IHJlbW92aW5nIHRoZW0gZnJvbSB0aGUgYnVmZmVyLgorICoJRFJPUF9CSVRTKG4pOworICoJCURpc2NhcmQgbmV4dCBOIGJpdHMuCisgKiBUaGUgdmFsdWUgTiBzaG91bGQgYmUgYSBzaW1wbGUgdmFyaWFibGUsIG5vdCBhbiBleHByZXNzaW9uLCBiZWNhdXNlIGl0CisgKiBpcyBldmFsdWF0ZWQgbXVsdGlwbGUgdGltZXMuCisgKi8KKworI2RlZmluZSBDSEVDS19CSVRfQlVGRkVSKHN0YXRlLG5iaXRzLGFjdGlvbikgXAorCXsgaWYgKGJpdHNfbGVmdCA8IChuYml0cykpIHsgIFwKKwkgICAgaWYgKCEganBlZ19maWxsX2JpdF9idWZmZXIoJihzdGF0ZSksZ2V0X2J1ZmZlcixiaXRzX2xlZnQsbmJpdHMpKSAgXAorCSAgICAgIHsgYWN0aW9uOyB9ICBcCisJICAgIGdldF9idWZmZXIgPSAoc3RhdGUpLmdldF9idWZmZXI7IGJpdHNfbGVmdCA9IChzdGF0ZSkuYml0c19sZWZ0OyB9IH0KKworI2RlZmluZSBHRVRfQklUUyhuYml0cykgXAorCSgoKGludCkgKGdldF9idWZmZXIgPj4gKGJpdHNfbGVmdCAtPSAobmJpdHMpKSkpICYgKCgxPDwobmJpdHMpKS0xKSkKKworI2RlZmluZSBQRUVLX0JJVFMobmJpdHMpIFwKKwkoKChpbnQpIChnZXRfYnVmZmVyID4+IChiaXRzX2xlZnQgLSAgKG5iaXRzKSkpKSAmICgoMTw8KG5iaXRzKSktMSkpCisKKyNkZWZpbmUgRFJPUF9CSVRTKG5iaXRzKSBcCisJKGJpdHNfbGVmdCAtPSAobmJpdHMpKQorCisvKiBMb2FkIHVwIHRoZSBiaXQgYnVmZmVyIHRvIGEgZGVwdGggb2YgYXQgbGVhc3QgbmJpdHMgKi8KK0VYVEVSTihib29sZWFuKSBqcGVnX2ZpbGxfYml0X2J1ZmZlcgorCUpQUCgoYml0cmVhZF93b3JraW5nX3N0YXRlICogc3RhdGUsIHJlZ2lzdGVyIGJpdF9idWZfdHlwZSBnZXRfYnVmZmVyLAorCSAgICAgcmVnaXN0ZXIgaW50IGJpdHNfbGVmdCwgaW50IG5iaXRzKSk7CisKKworLyoKKyAqIENvZGUgZm9yIGV4dHJhY3RpbmcgbmV4dCBIdWZmbWFuLWNvZGVkIHN5bWJvbCBmcm9tIGlucHV0IGJpdCBzdHJlYW0uCisgKiBBZ2FpbiwgdGhpcyBpcyB0aW1lLWNyaXRpY2FsIGFuZCB3ZSBtYWtlIHRoZSBtYWluIHBhdGhzIGJlIG1hY3Jvcy4KKyAqCisgKiBXZSB1c2UgYSBsb29rYWhlYWQgdGFibGUgdG8gcHJvY2VzcyBjb2RlcyBvZiB1cCB0byBIVUZGX0xPT0tBSEVBRCBiaXRzCisgKiB3aXRob3V0IGxvb3BpbmcuICBVc3VhbGx5LCBtb3JlIHRoYW4gOTUlIG9mIHRoZSBIdWZmbWFuIGNvZGVzIHdpbGwgYmUgOAorICogb3IgZmV3ZXIgYml0cyBsb25nLiAgVGhlIGZldyBvdmVybGVuZ3RoIGNvZGVzIGFyZSBoYW5kbGVkIHdpdGggYSBsb29wLAorICogd2hpY2ggbmVlZCBub3QgYmUgaW5saW5lIGNvZGUuCisgKgorICogTm90ZXMgYWJvdXQgdGhlIEhVRkZfREVDT0RFIG1hY3JvOgorICogMS4gTmVhciB0aGUgZW5kIG9mIHRoZSBkYXRhIHNlZ21lbnQsIHdlIG1heSBmYWlsIHRvIGdldCBlbm91Z2ggYml0cworICogICAgZm9yIGEgbG9va2FoZWFkLiAgSW4gdGhhdCBjYXNlLCB3ZSBkbyBpdCB0aGUgaGFyZCB3YXkuCisgKiAyLiBJZiB0aGUgbG9va2FoZWFkIHRhYmxlIGNvbnRhaW5zIG5vIGVudHJ5LCB0aGUgbmV4dCBjb2RlIG11c3QgYmUKKyAqICAgIG1vcmUgdGhhbiBIVUZGX0xPT0tBSEVBRCBiaXRzIGxvbmcuCisgKiAzLiBqcGVnX2h1ZmZfZGVjb2RlIHJldHVybnMgLTEgaWYgZm9yY2VkIHRvIHN1c3BlbmQuCisgKi8KKworI2RlZmluZSBIVUZGX0RFQ09ERShyZXN1bHQsc3RhdGUsaHRibCxmYWlsYWN0aW9uLHNsb3dsYWJlbCkgXAoreyByZWdpc3RlciBpbnQgbmIsIGxvb2s7IFwKKyAgaWYgKGJpdHNfbGVmdCA8IEhVRkZfTE9PS0FIRUFEKSB7IFwKKyAgICBpZiAoISBqcGVnX2ZpbGxfYml0X2J1ZmZlcigmc3RhdGUsZ2V0X2J1ZmZlcixiaXRzX2xlZnQsIDApKSB7ZmFpbGFjdGlvbjt9IFwKKyAgICBnZXRfYnVmZmVyID0gc3RhdGUuZ2V0X2J1ZmZlcjsgYml0c19sZWZ0ID0gc3RhdGUuYml0c19sZWZ0OyBcCisgICAgaWYgKGJpdHNfbGVmdCA8IEhVRkZfTE9PS0FIRUFEKSB7IFwKKyAgICAgIG5iID0gMTsgZ290byBzbG93bGFiZWw7IFwKKyAgICB9IFwKKyAgfSBcCisgIGxvb2sgPSBQRUVLX0JJVFMoSFVGRl9MT09LQUhFQUQpOyBcCisgIGlmICgobmIgPSBodGJsLT5sb29rX25iaXRzW2xvb2tdKSAhPSAwKSB7IFwKKyAgICBEUk9QX0JJVFMobmIpOyBcCisgICAgcmVzdWx0ID0gaHRibC0+bG9va19zeW1bbG9va107IFwKKyAgfSBlbHNlIHsgXAorICAgIG5iID0gSFVGRl9MT09LQUhFQUQrMTsgXAorc2xvd2xhYmVsOiBcCisgICAgaWYgKChyZXN1bHQ9anBlZ19odWZmX2RlY29kZSgmc3RhdGUsZ2V0X2J1ZmZlcixiaXRzX2xlZnQsaHRibCxuYikpIDwgMCkgXAorCXsgZmFpbGFjdGlvbjsgfSBcCisgICAgZ2V0X2J1ZmZlciA9IHN0YXRlLmdldF9idWZmZXI7IGJpdHNfbGVmdCA9IHN0YXRlLmJpdHNfbGVmdDsgXAorICB9IFwKK30KKworLyogT3V0LW9mLWxpbmUgY2FzZSBmb3IgSHVmZm1hbiBjb2RlIGZldGNoaW5nICovCitFWFRFUk4oaW50KSBqcGVnX2h1ZmZfZGVjb2RlCisJSlBQKChiaXRyZWFkX3dvcmtpbmdfc3RhdGUgKiBzdGF0ZSwgcmVnaXN0ZXIgYml0X2J1Zl90eXBlIGdldF9idWZmZXIsCisJICAgICByZWdpc3RlciBpbnQgYml0c19sZWZ0LCBkX2Rlcml2ZWRfdGJsICogaHRibCwgaW50IG1pbl9iaXRzKSk7CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvamVycm9yLmggYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvamVycm9yLmgKaW5kZXggYTJiOGY5Ni4uMDZkMzQ0MCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2plcnJvci5oCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9qZXJyb3IuaApAQCAtMSwyOTEgKzEsMjkxIEBACi0vKg0KLSAqIGplcnJvci5oDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NywgVGhvbWFzIEcuIExhbmUuDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4NCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuDQotICoNCi0gKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgZXJyb3IgYW5kIG1lc3NhZ2UgY29kZXMgZm9yIHRoZSBKUEVHIGxpYnJhcnkuDQotICogRWRpdCB0aGlzIGZpbGUgdG8gYWRkIG5ldyBjb2Rlcywgb3IgdG8gdHJhbnNsYXRlIHRoZSBtZXNzYWdlIHN0cmluZ3MgdG8NCi0gKiBzb21lIG90aGVyIGxhbmd1YWdlLg0KLSAqIEEgc2V0IG9mIGVycm9yLXJlcG9ydGluZyBtYWNyb3MgYXJlIGRlZmluZWQgdG9vLiAgU29tZSBhcHBsaWNhdGlvbnMgdXNpbmcNCi0gKiB0aGUgSlBFRyBsaWJyYXJ5IG1heSB3aXNoIHRvIGluY2x1ZGUgdGhpcyBmaWxlIHRvIGdldCB0aGUgZXJyb3IgY29kZXMNCi0gKiBhbmQvb3IgdGhlIG1hY3Jvcy4NCi0gKi8NCi0NCi0vKg0KLSAqIFRvIGRlZmluZSB0aGUgZW51bSBsaXN0IG9mIG1lc3NhZ2UgY29kZXMsIGluY2x1ZGUgdGhpcyBmaWxlIHdpdGhvdXQNCi0gKiBkZWZpbmluZyBtYWNybyBKTUVTU0FHRS4gIFRvIGNyZWF0ZSBhIG1lc3NhZ2Ugc3RyaW5nIHRhYmxlLCBpbmNsdWRlIGl0DQotICogYWdhaW4gd2l0aCBhIHN1aXRhYmxlIEpNRVNTQUdFIGRlZmluaXRpb24gKHNlZSBqZXJyb3IuYyBmb3IgYW4gZXhhbXBsZSkuDQotICovDQotI2lmbmRlZiBKTUVTU0FHRQ0KLSNpZm5kZWYgSkVSUk9SX0gNCi0vKiBGaXJzdCB0aW1lIHRocm91Z2gsIGRlZmluZSB0aGUgZW51bSBsaXN0ICovDQotI2RlZmluZSBKTUFLRV9FTlVNX0xJU1QNCi0jZWxzZQ0KLS8qIFJlcGVhdGVkIGluY2x1c2lvbnMgb2YgdGhpcyBmaWxlIGFyZSBuby1vcHMgdW5sZXNzIEpNRVNTQUdFIGlzIGRlZmluZWQgKi8NCi0jZGVmaW5lIEpNRVNTQUdFKGNvZGUsc3RyaW5nKQ0KLSNlbmRpZiAvKiBKRVJST1JfSCAqLw0KLSNlbmRpZiAvKiBKTUVTU0FHRSAqLw0KLQ0KLSNpZmRlZiBKTUFLRV9FTlVNX0xJU1QNCi0NCi10eXBlZGVmIGVudW0gew0KLQ0KLSNkZWZpbmUgSk1FU1NBR0UoY29kZSxzdHJpbmcpCWNvZGUgLA0KLQ0KLSNlbmRpZiAvKiBKTUFLRV9FTlVNX0xJU1QgKi8NCi0NCi1KTUVTU0FHRShKTVNHX05PTUVTU0FHRSwgIkJvZ3VzIG1lc3NhZ2UgY29kZSAlZCIpIC8qIE11c3QgYmUgZmlyc3QgZW50cnkhICovDQotDQotLyogRm9yIG1haW50ZW5hbmNlIGNvbnZlbmllbmNlLCBsaXN0IGlzIGFscGhhYmV0aWNhbCBieSBtZXNzYWdlIGNvZGUgbmFtZSAqLw0KLUpNRVNTQUdFKEpFUlJfQVJJVEhfTk9USU1QTCwNCi0JICJTb3JyeSwgdGhlcmUgYXJlIGxlZ2FsIHJlc3RyaWN0aW9ucyBvbiBhcml0aG1ldGljIGNvZGluZyIpDQotSk1FU1NBR0UoSkVSUl9CQURfQUxJR05fVFlQRSwgIkFMSUdOX1RZUEUgaXMgd3JvbmcsIHBsZWFzZSBmaXgiKQ0KLUpNRVNTQUdFKEpFUlJfQkFEX0FMTE9DX0NIVU5LLCAiTUFYX0FMTE9DX0NIVU5LIGlzIHdyb25nLCBwbGVhc2UgZml4IikNCi1KTUVTU0FHRShKRVJSX0JBRF9CVUZGRVJfTU9ERSwgIkJvZ3VzIGJ1ZmZlciBjb250cm9sIG1vZGUiKQ0KLUpNRVNTQUdFKEpFUlJfQkFEX0NPTVBPTkVOVF9JRCwgIkludmFsaWQgY29tcG9uZW50IElEICVkIGluIFNPUyIpDQotSk1FU1NBR0UoSkVSUl9CQURfRENUX0NPRUYsICJEQ1QgY29lZmZpY2llbnQgb3V0IG9mIHJhbmdlIikNCi1KTUVTU0FHRShKRVJSX0JBRF9EQ1RTSVpFLCAiSURDVCBvdXRwdXQgYmxvY2sgc2l6ZSAlZCBub3Qgc3VwcG9ydGVkIikNCi1KTUVTU0FHRShKRVJSX0JBRF9IVUZGX1RBQkxFLCAiQm9ndXMgSHVmZm1hbiB0YWJsZSBkZWZpbml0aW9uIikNCi1KTUVTU0FHRShKRVJSX0JBRF9JTl9DT0xPUlNQQUNFLCAiQm9ndXMgaW5wdXQgY29sb3JzcGFjZSIpDQotSk1FU1NBR0UoSkVSUl9CQURfSl9DT0xPUlNQQUNFLCAiQm9ndXMgSlBFRyBjb2xvcnNwYWNlIikNCi1KTUVTU0FHRShKRVJSX0JBRF9MRU5HVEgsICJCb2d1cyBtYXJrZXIgbGVuZ3RoIikNCi1KTUVTU0FHRShKRVJSX0JBRF9MSUJfVkVSU0lPTiwNCi0JICJXcm9uZyBKUEVHIGxpYnJhcnkgdmVyc2lvbjogbGlicmFyeSBpcyAlZCwgY2FsbGVyIGV4cGVjdHMgJWQiKQ0KLUpNRVNTQUdFKEpFUlJfQkFEX01DVV9TSVpFLCAiU2FtcGxpbmcgZmFjdG9ycyB0b28gbGFyZ2UgZm9yIGludGVybGVhdmVkIHNjYW4iKQ0KLUpNRVNTQUdFKEpFUlJfQkFEX1BPT0xfSUQsICJJbnZhbGlkIG1lbW9yeSBwb29sIGNvZGUgJWQiKQ0KLUpNRVNTQUdFKEpFUlJfQkFEX1BSRUNJU0lPTiwgIlVuc3VwcG9ydGVkIEpQRUcgZGF0YSBwcmVjaXNpb24gJWQiKQ0KLUpNRVNTQUdFKEpFUlJfQkFEX1BST0dSRVNTSU9OLA0KLQkgIkludmFsaWQgcHJvZ3Jlc3NpdmUgcGFyYW1ldGVycyBTcz0lZCBTZT0lZCBBaD0lZCBBbD0lZCIpDQotSk1FU1NBR0UoSkVSUl9CQURfUFJPR19TQ1JJUFQsDQotCSAiSW52YWxpZCBwcm9ncmVzc2l2ZSBwYXJhbWV0ZXJzIGF0IHNjYW4gc2NyaXB0IGVudHJ5ICVkIikNCi1KTUVTU0FHRShKRVJSX0JBRF9TQU1QTElORywgIkJvZ3VzIHNhbXBsaW5nIGZhY3RvcnMiKQ0KLUpNRVNTQUdFKEpFUlJfQkFEX1NDQU5fU0NSSVBULCAiSW52YWxpZCBzY2FuIHNjcmlwdCBhdCBlbnRyeSAlZCIpDQotSk1FU1NBR0UoSkVSUl9CQURfU1RBVEUsICJJbXByb3BlciBjYWxsIHRvIEpQRUcgbGlicmFyeSBpbiBzdGF0ZSAlZCIpDQotSk1FU1NBR0UoSkVSUl9CQURfU1RSVUNUX1NJWkUsDQotCSAiSlBFRyBwYXJhbWV0ZXIgc3RydWN0IG1pc21hdGNoOiBsaWJyYXJ5IHRoaW5rcyBzaXplIGlzICV1LCBjYWxsZXIgZXhwZWN0cyAldSIpDQotSk1FU1NBR0UoSkVSUl9CQURfVklSVFVBTF9BQ0NFU1MsICJCb2d1cyB2aXJ0dWFsIGFycmF5IGFjY2VzcyIpDQotSk1FU1NBR0UoSkVSUl9CVUZGRVJfU0laRSwgIkJ1ZmZlciBwYXNzZWQgdG8gSlBFRyBsaWJyYXJ5IGlzIHRvbyBzbWFsbCIpDQotSk1FU1NBR0UoSkVSUl9DQU5UX1NVU1BFTkQsICJTdXNwZW5zaW9uIG5vdCBhbGxvd2VkIGhlcmUiKQ0KLUpNRVNTQUdFKEpFUlJfQ0NJUjYwMV9OT1RJTVBMLCAiQ0NJUjYwMSBzYW1wbGluZyBub3QgaW1wbGVtZW50ZWQgeWV0IikNCi1KTUVTU0FHRShKRVJSX0NPTVBPTkVOVF9DT1VOVCwgIlRvbyBtYW55IGNvbG9yIGNvbXBvbmVudHM6ICVkLCBtYXggJWQiKQ0KLUpNRVNTQUdFKEpFUlJfQ09OVkVSU0lPTl9OT1RJTVBMLCAiVW5zdXBwb3J0ZWQgY29sb3IgY29udmVyc2lvbiByZXF1ZXN0IikNCi1KTUVTU0FHRShKRVJSX0RBQ19JTkRFWCwgIkJvZ3VzIERBQyBpbmRleCAlZCIpDQotSk1FU1NBR0UoSkVSUl9EQUNfVkFMVUUsICJCb2d1cyBEQUMgdmFsdWUgMHgleCIpDQotSk1FU1NBR0UoSkVSUl9ESFRfSU5ERVgsICJCb2d1cyBESFQgaW5kZXggJWQiKQ0KLUpNRVNTQUdFKEpFUlJfRFFUX0lOREVYLCAiQm9ndXMgRFFUIGluZGV4ICVkIikNCi1KTUVTU0FHRShKRVJSX0VNUFRZX0lNQUdFLCAiRW1wdHkgSlBFRyBpbWFnZSAoRE5MIG5vdCBzdXBwb3J0ZWQpIikNCi1KTUVTU0FHRShKRVJSX0VNU19SRUFELCAiUmVhZCBmcm9tIEVNUyBmYWlsZWQiKQ0KLUpNRVNTQUdFKEpFUlJfRU1TX1dSSVRFLCAiV3JpdGUgdG8gRU1TIGZhaWxlZCIpDQotSk1FU1NBR0UoSkVSUl9FT0lfRVhQRUNURUQsICJEaWRuJ3QgZXhwZWN0IG1vcmUgdGhhbiBvbmUgc2NhbiIpDQotSk1FU1NBR0UoSkVSUl9GSUxFX1JFQUQsICJJbnB1dCBmaWxlIHJlYWQgZXJyb3IiKQ0KLUpNRVNTQUdFKEpFUlJfRklMRV9XUklURSwgIk91dHB1dCBmaWxlIHdyaXRlIGVycm9yIC0tLSBvdXQgb2YgZGlzayBzcGFjZT8iKQ0KLUpNRVNTQUdFKEpFUlJfRlJBQ1RfU0FNUExFX05PVElNUEwsICJGcmFjdGlvbmFsIHNhbXBsaW5nIG5vdCBpbXBsZW1lbnRlZCB5ZXQiKQ0KLUpNRVNTQUdFKEpFUlJfSFVGRl9DTEVOX09WRVJGTE9XLCAiSHVmZm1hbiBjb2RlIHNpemUgdGFibGUgb3ZlcmZsb3ciKQ0KLUpNRVNTQUdFKEpFUlJfSFVGRl9NSVNTSU5HX0NPREUsICJNaXNzaW5nIEh1ZmZtYW4gY29kZSB0YWJsZSBlbnRyeSIpDQotSk1FU1NBR0UoSkVSUl9JTUFHRV9UT09fQklHLCAiTWF4aW11bSBzdXBwb3J0ZWQgaW1hZ2UgZGltZW5zaW9uIGlzICV1IHBpeGVscyIpDQotSk1FU1NBR0UoSkVSUl9JTlBVVF9FTVBUWSwgIkVtcHR5IGlucHV0IGZpbGUiKQ0KLUpNRVNTQUdFKEpFUlJfSU5QVVRfRU9GLCAiUHJlbWF0dXJlIGVuZCBvZiBpbnB1dCBmaWxlIikNCi1KTUVTU0FHRShKRVJSX01JU01BVENIRURfUVVBTlRfVEFCTEUsDQotCSAiQ2Fubm90IHRyYW5zY29kZSBkdWUgdG8gbXVsdGlwbGUgdXNlIG9mIHF1YW50aXphdGlvbiB0YWJsZSAlZCIpDQotSk1FU1NBR0UoSkVSUl9NSVNTSU5HX0RBVEEsICJTY2FuIHNjcmlwdCBkb2VzIG5vdCB0cmFuc21pdCBhbGwgZGF0YSIpDQotSk1FU1NBR0UoSkVSUl9NT0RFX0NIQU5HRSwgIkludmFsaWQgY29sb3IgcXVhbnRpemF0aW9uIG1vZGUgY2hhbmdlIikNCi1KTUVTU0FHRShKRVJSX05PVElNUEwsICJOb3QgaW1wbGVtZW50ZWQgeWV0IikNCi1KTUVTU0FHRShKRVJSX05PVF9DT01QSUxFRCwgIlJlcXVlc3RlZCBmZWF0dXJlIHdhcyBvbWl0dGVkIGF0IGNvbXBpbGUgdGltZSIpDQotSk1FU1NBR0UoSkVSUl9OT19CQUNLSU5HX1NUT1JFLCAiQmFja2luZyBzdG9yZSBub3Qgc3VwcG9ydGVkIikNCi1KTUVTU0FHRShKRVJSX05PX0hVRkZfVEFCTEUsICJIdWZmbWFuIHRhYmxlIDB4JTAyeCB3YXMgbm90IGRlZmluZWQiKQ0KLUpNRVNTQUdFKEpFUlJfTk9fSU1BR0UsICJKUEVHIGRhdGFzdHJlYW0gY29udGFpbnMgbm8gaW1hZ2UiKQ0KLUpNRVNTQUdFKEpFUlJfTk9fUVVBTlRfVEFCTEUsICJRdWFudGl6YXRpb24gdGFibGUgMHglMDJ4IHdhcyBub3QgZGVmaW5lZCIpDQotSk1FU1NBR0UoSkVSUl9OT19TT0ksICJOb3QgYSBKUEVHIGZpbGU6IHN0YXJ0cyB3aXRoIDB4JTAyeCAweCUwMngiKQ0KLUpNRVNTQUdFKEpFUlJfT1VUX09GX01FTU9SWSwgIkluc3VmZmljaWVudCBtZW1vcnkgKGNhc2UgJWQpIikNCi1KTUVTU0FHRShKRVJSX1FVQU5UX0NPTVBPTkVOVFMsDQotCSAiQ2Fubm90IHF1YW50aXplIG1vcmUgdGhhbiAlZCBjb2xvciBjb21wb25lbnRzIikNCi1KTUVTU0FHRShKRVJSX1FVQU5UX0ZFV19DT0xPUlMsICJDYW5ub3QgcXVhbnRpemUgdG8gZmV3ZXIgdGhhbiAlZCBjb2xvcnMiKQ0KLUpNRVNTQUdFKEpFUlJfUVVBTlRfTUFOWV9DT0xPUlMsICJDYW5ub3QgcXVhbnRpemUgdG8gbW9yZSB0aGFuICVkIGNvbG9ycyIpDQotSk1FU1NBR0UoSkVSUl9TT0ZfRFVQTElDQVRFLCAiSW52YWxpZCBKUEVHIGZpbGUgc3RydWN0dXJlOiB0d28gU09GIG1hcmtlcnMiKQ0KLUpNRVNTQUdFKEpFUlJfU09GX05PX1NPUywgIkludmFsaWQgSlBFRyBmaWxlIHN0cnVjdHVyZTogbWlzc2luZyBTT1MgbWFya2VyIikNCi1KTUVTU0FHRShKRVJSX1NPRl9VTlNVUFBPUlRFRCwgIlVuc3VwcG9ydGVkIEpQRUcgcHJvY2VzczogU09GIHR5cGUgMHglMDJ4IikNCi1KTUVTU0FHRShKRVJSX1NPSV9EVVBMSUNBVEUsICJJbnZhbGlkIEpQRUcgZmlsZSBzdHJ1Y3R1cmU6IHR3byBTT0kgbWFya2VycyIpDQotSk1FU1NBR0UoSkVSUl9TT1NfTk9fU09GLCAiSW52YWxpZCBKUEVHIGZpbGUgc3RydWN0dXJlOiBTT1MgYmVmb3JlIFNPRiIpDQotSk1FU1NBR0UoSkVSUl9URklMRV9DUkVBVEUsICJGYWlsZWQgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlICVzIikNCi1KTUVTU0FHRShKRVJSX1RGSUxFX1JFQUQsICJSZWFkIGZhaWxlZCBvbiB0ZW1wb3JhcnkgZmlsZSIpDQotSk1FU1NBR0UoSkVSUl9URklMRV9TRUVLLCAiU2VlayBmYWlsZWQgb24gdGVtcG9yYXJ5IGZpbGUiKQ0KLUpNRVNTQUdFKEpFUlJfVEZJTEVfV1JJVEUsDQotCSAiV3JpdGUgZmFpbGVkIG9uIHRlbXBvcmFyeSBmaWxlIC0tLSBvdXQgb2YgZGlzayBzcGFjZT8iKQ0KLUpNRVNTQUdFKEpFUlJfVE9PX0xJVFRMRV9EQVRBLCAiQXBwbGljYXRpb24gdHJhbnNmZXJyZWQgdG9vIGZldyBzY2FubGluZXMiKQ0KLUpNRVNTQUdFKEpFUlJfVU5LTk9XTl9NQVJLRVIsICJVbnN1cHBvcnRlZCBtYXJrZXIgdHlwZSAweCUwMngiKQ0KLUpNRVNTQUdFKEpFUlJfVklSVFVBTF9CVUcsICJWaXJ0dWFsIGFycmF5IGNvbnRyb2xsZXIgbWVzc2VkIHVwIikNCi1KTUVTU0FHRShKRVJSX1dJRFRIX09WRVJGTE9XLCAiSW1hZ2UgdG9vIHdpZGUgZm9yIHRoaXMgaW1wbGVtZW50YXRpb24iKQ0KLUpNRVNTQUdFKEpFUlJfWE1TX1JFQUQsICJSZWFkIGZyb20gWE1TIGZhaWxlZCIpDQotSk1FU1NBR0UoSkVSUl9YTVNfV1JJVEUsICJXcml0ZSB0byBYTVMgZmFpbGVkIikNCi1KTUVTU0FHRShKTVNHX0NPUFlSSUdIVCwgSkNPUFlSSUdIVCkNCi1KTUVTU0FHRShKTVNHX1ZFUlNJT04sIEpWRVJTSU9OKQ0KLUpNRVNTQUdFKEpUUkNfMTZCSVRfVEFCTEVTLA0KLQkgIkNhdXRpb246IHF1YW50aXphdGlvbiB0YWJsZXMgYXJlIHRvbyBjb2Fyc2UgZm9yIGJhc2VsaW5lIEpQRUciKQ0KLUpNRVNTQUdFKEpUUkNfQURPQkUsDQotCSAiQWRvYmUgQVBQMTQgbWFya2VyOiB2ZXJzaW9uICVkLCBmbGFncyAweCUwNHggMHglMDR4LCB0cmFuc2Zvcm0gJWQiKQ0KLUpNRVNTQUdFKEpUUkNfQVBQMCwgIlVua25vd24gQVBQMCBtYXJrZXIgKG5vdCBKRklGKSwgbGVuZ3RoICV1IikNCi1KTUVTU0FHRShKVFJDX0FQUDE0LCAiVW5rbm93biBBUFAxNCBtYXJrZXIgKG5vdCBBZG9iZSksIGxlbmd0aCAldSIpDQotSk1FU1NBR0UoSlRSQ19EQUMsICJEZWZpbmUgQXJpdGhtZXRpYyBUYWJsZSAweCUwMng6IDB4JTAyeCIpDQotSk1FU1NBR0UoSlRSQ19ESFQsICJEZWZpbmUgSHVmZm1hbiBUYWJsZSAweCUwMngiKQ0KLUpNRVNTQUdFKEpUUkNfRFFULCAiRGVmaW5lIFF1YW50aXphdGlvbiBUYWJsZSAlZCAgcHJlY2lzaW9uICVkIikNCi1KTUVTU0FHRShKVFJDX0RSSSwgIkRlZmluZSBSZXN0YXJ0IEludGVydmFsICV1IikNCi1KTUVTU0FHRShKVFJDX0VNU19DTE9TRSwgIkZyZWVkIEVNUyBoYW5kbGUgJXUiKQ0KLUpNRVNTQUdFKEpUUkNfRU1TX09QRU4sICJPYnRhaW5lZCBFTVMgaGFuZGxlICV1IikNCi1KTUVTU0FHRShKVFJDX0VPSSwgIkVuZCBPZiBJbWFnZSIpDQotSk1FU1NBR0UoSlRSQ19IVUZGQklUUywgIiAgICAgICAgJTNkICUzZCAlM2QgJTNkICUzZCAlM2QgJTNkICUzZCIpDQotSk1FU1NBR0UoSlRSQ19KRklGLCAiSkZJRiBBUFAwIG1hcmtlcjogdmVyc2lvbiAlZC4lMDJkLCBkZW5zaXR5ICVkeCVkICAlZCIpDQotSk1FU1NBR0UoSlRSQ19KRklGX0JBRFRIVU1CTkFJTFNJWkUsDQotCSAiV2FybmluZzogdGh1bWJuYWlsIGltYWdlIHNpemUgZG9lcyBub3QgbWF0Y2ggZGF0YSBsZW5ndGggJXUiKQ0KLUpNRVNTQUdFKEpUUkNfSkZJRl9FWFRFTlNJT04sDQotCSAiSkZJRiBleHRlbnNpb24gbWFya2VyOiB0eXBlIDB4JTAyeCwgbGVuZ3RoICV1IikNCi1KTUVTU0FHRShKVFJDX0pGSUZfVEhVTUJOQUlMLCAiICAgIHdpdGggJWQgeCAlZCB0aHVtYm5haWwgaW1hZ2UiKQ0KLUpNRVNTQUdFKEpUUkNfTUlTQ19NQVJLRVIsICJNaXNjZWxsYW5lb3VzIG1hcmtlciAweCUwMngsIGxlbmd0aCAldSIpDQotSk1FU1NBR0UoSlRSQ19QQVJNTEVTU19NQVJLRVIsICJVbmV4cGVjdGVkIG1hcmtlciAweCUwMngiKQ0KLUpNRVNTQUdFKEpUUkNfUVVBTlRWQUxTLCAiICAgICAgICAlNHUgJTR1ICU0dSAlNHUgJTR1ICU0dSAlNHUgJTR1IikNCi1KTUVTU0FHRShKVFJDX1FVQU5UXzNfTkNPTE9SUywgIlF1YW50aXppbmcgdG8gJWQgPSAlZColZColZCBjb2xvcnMiKQ0KLUpNRVNTQUdFKEpUUkNfUVVBTlRfTkNPTE9SUywgIlF1YW50aXppbmcgdG8gJWQgY29sb3JzIikNCi1KTUVTU0FHRShKVFJDX1FVQU5UX1NFTEVDVEVELCAiU2VsZWN0ZWQgJWQgY29sb3JzIGZvciBxdWFudGl6YXRpb24iKQ0KLUpNRVNTQUdFKEpUUkNfUkVDT1ZFUllfQUNUSU9OLCAiQXQgbWFya2VyIDB4JTAyeCwgcmVjb3ZlcnkgYWN0aW9uICVkIikNCi1KTUVTU0FHRShKVFJDX1JTVCwgIlJTVCVkIikNCi1KTUVTU0FHRShKVFJDX1NNT09USF9OT1RJTVBMLA0KLQkgIlNtb290aGluZyBub3Qgc3VwcG9ydGVkIHdpdGggbm9uc3RhbmRhcmQgc2FtcGxpbmcgcmF0aW9zIikNCi1KTUVTU0FHRShKVFJDX1NPRiwgIlN0YXJ0IE9mIEZyYW1lIDB4JTAyeDogd2lkdGg9JXUsIGhlaWdodD0ldSwgY29tcG9uZW50cz0lZCIpDQotSk1FU1NBR0UoSlRSQ19TT0ZfQ09NUE9ORU5ULCAiICAgIENvbXBvbmVudCAlZDogJWRoeCVkdiBxPSVkIikNCi1KTUVTU0FHRShKVFJDX1NPSSwgIlN0YXJ0IG9mIEltYWdlIikNCi1KTUVTU0FHRShKVFJDX1NPUywgIlN0YXJ0IE9mIFNjYW46ICVkIGNvbXBvbmVudHMiKQ0KLUpNRVNTQUdFKEpUUkNfU09TX0NPTVBPTkVOVCwgIiAgICBDb21wb25lbnQgJWQ6IGRjPSVkIGFjPSVkIikNCi1KTUVTU0FHRShKVFJDX1NPU19QQVJBTVMsICIgIFNzPSVkLCBTZT0lZCwgQWg9JWQsIEFsPSVkIikNCi1KTUVTU0FHRShKVFJDX1RGSUxFX0NMT1NFLCAiQ2xvc2VkIHRlbXBvcmFyeSBmaWxlICVzIikNCi1KTUVTU0FHRShKVFJDX1RGSUxFX09QRU4sICJPcGVuZWQgdGVtcG9yYXJ5IGZpbGUgJXMiKQ0KLUpNRVNTQUdFKEpUUkNfVEhVTUJfSlBFRywNCi0JICJKRklGIGV4dGVuc2lvbiBtYXJrZXI6IEpQRUctY29tcHJlc3NlZCB0aHVtYm5haWwgaW1hZ2UsIGxlbmd0aCAldSIpDQotSk1FU1NBR0UoSlRSQ19USFVNQl9QQUxFVFRFLA0KLQkgIkpGSUYgZXh0ZW5zaW9uIG1hcmtlcjogcGFsZXR0ZSB0aHVtYm5haWwgaW1hZ2UsIGxlbmd0aCAldSIpDQotSk1FU1NBR0UoSlRSQ19USFVNQl9SR0IsDQotCSAiSkZJRiBleHRlbnNpb24gbWFya2VyOiBSR0IgdGh1bWJuYWlsIGltYWdlLCBsZW5ndGggJXUiKQ0KLUpNRVNTQUdFKEpUUkNfVU5LTk9XTl9JRFMsDQotCSAiVW5yZWNvZ25pemVkIGNvbXBvbmVudCBJRHMgJWQgJWQgJWQsIGFzc3VtaW5nIFlDYkNyIikNCi1KTUVTU0FHRShKVFJDX1hNU19DTE9TRSwgIkZyZWVkIFhNUyBoYW5kbGUgJXUiKQ0KLUpNRVNTQUdFKEpUUkNfWE1TX09QRU4sICJPYnRhaW5lZCBYTVMgaGFuZGxlICV1IikNCi1KTUVTU0FHRShKV1JOX0FET0JFX1hGT1JNLCAiVW5rbm93biBBZG9iZSBjb2xvciB0cmFuc2Zvcm0gY29kZSAlZCIpDQotSk1FU1NBR0UoSldSTl9CT0dVU19QUk9HUkVTU0lPTiwNCi0JICJJbmNvbnNpc3RlbnQgcHJvZ3Jlc3Npb24gc2VxdWVuY2UgZm9yIGNvbXBvbmVudCAlZCBjb2VmZmljaWVudCAlZCIpDQotSk1FU1NBR0UoSldSTl9FWFRSQU5FT1VTX0RBVEEsDQotCSAiQ29ycnVwdCBKUEVHIGRhdGE6ICV1IGV4dHJhbmVvdXMgYnl0ZXMgYmVmb3JlIG1hcmtlciAweCUwMngiKQ0KLUpNRVNTQUdFKEpXUk5fSElUX01BUktFUiwgIkNvcnJ1cHQgSlBFRyBkYXRhOiBwcmVtYXR1cmUgZW5kIG9mIGRhdGEgc2VnbWVudCIpDQotSk1FU1NBR0UoSldSTl9IVUZGX0JBRF9DT0RFLCAiQ29ycnVwdCBKUEVHIGRhdGE6IGJhZCBIdWZmbWFuIGNvZGUiKQ0KLUpNRVNTQUdFKEpXUk5fSkZJRl9NQUpPUiwgIldhcm5pbmc6IHVua25vd24gSkZJRiByZXZpc2lvbiBudW1iZXIgJWQuJTAyZCIpDQotSk1FU1NBR0UoSldSTl9KUEVHX0VPRiwgIlByZW1hdHVyZSBlbmQgb2YgSlBFRyBmaWxlIikNCi1KTUVTU0FHRShKV1JOX01VU1RfUkVTWU5DLA0KLQkgIkNvcnJ1cHQgSlBFRyBkYXRhOiBmb3VuZCBtYXJrZXIgMHglMDJ4IGluc3RlYWQgb2YgUlNUJWQiKQ0KLUpNRVNTQUdFKEpXUk5fTk9UX1NFUVVFTlRJQUwsICJJbnZhbGlkIFNPUyBwYXJhbWV0ZXJzIGZvciBzZXF1ZW50aWFsIEpQRUciKQ0KLUpNRVNTQUdFKEpXUk5fVE9PX01VQ0hfREFUQSwgIkFwcGxpY2F0aW9uIHRyYW5zZmVycmVkIHRvbyBtYW55IHNjYW5saW5lcyIpDQotDQotI2lmZGVmIEpNQUtFX0VOVU1fTElTVA0KLQ0KLSAgSk1TR19MQVNUTVNHQ09ERQ0KLX0gSl9NRVNTQUdFX0NPREU7DQotDQotI3VuZGVmIEpNQUtFX0VOVU1fTElTVA0KLSNlbmRpZiAvKiBKTUFLRV9FTlVNX0xJU1QgKi8NCi0NCi0vKiBaYXAgSk1FU1NBR0UgbWFjcm8gc28gdGhhdCBmdXR1cmUgcmUtaW5jbHVzaW9ucyBkbyBub3RoaW5nIGJ5IGRlZmF1bHQgKi8NCi0jdW5kZWYgSk1FU1NBR0UNCi0NCi0NCi0jaWZuZGVmIEpFUlJPUl9IDQotI2RlZmluZSBKRVJST1JfSA0KLQ0KLS8qIE1hY3JvcyB0byBzaW1wbGlmeSB1c2luZyB0aGUgZXJyb3IgYW5kIHRyYWNlIG1lc3NhZ2Ugc3R1ZmYgKi8NCi0vKiBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIGVpdGhlciB0eXBlIG9mIGNpbmZvIHBvaW50ZXIgKi8NCi0NCi0vKiBGYXRhbCBlcnJvcnMgKHByaW50IG1lc3NhZ2UgYW5kIGV4aXQpICovDQotI2RlZmluZSBFUlJFWElUKGNpbmZvLGNvZGUpICBcDQotICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXA0KLSAgICgqKGNpbmZvKS0+ZXJyLT5lcnJvcl9leGl0KSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSkpDQotI2RlZmluZSBFUlJFWElUMShjaW5mbyxjb2RlLHAxKSAgXA0KLSAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwNCi0gICAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmlbMF0gPSAocDEpLCBcDQotICAgKCooY2luZm8pLT5lcnItPmVycm9yX2V4aXQpICgoal9jb21tb25fcHRyKSAoY2luZm8pKSkNCi0jZGVmaW5lIEVSUkVYSVQyKGNpbmZvLGNvZGUscDEscDIpICBcDQotICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXA0KLSAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVswXSA9IChwMSksIFwNCi0gICAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmlbMV0gPSAocDIpLCBcDQotICAgKCooY2luZm8pLT5lcnItPmVycm9yX2V4aXQpICgoal9jb21tb25fcHRyKSAoY2luZm8pKSkNCi0jZGVmaW5lIEVSUkVYSVQzKGNpbmZvLGNvZGUscDEscDIscDMpICBcDQotICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXA0KLSAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVswXSA9IChwMSksIFwNCi0gICAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmlbMV0gPSAocDIpLCBcDQotICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzJdID0gKHAzKSwgXA0KLSAgICgqKGNpbmZvKS0+ZXJyLT5lcnJvcl9leGl0KSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSkpDQotI2RlZmluZSBFUlJFWElUNChjaW5mbyxjb2RlLHAxLHAyLHAzLHA0KSAgXA0KLSAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwNCi0gICAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmlbMF0gPSAocDEpLCBcDQotICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzFdID0gKHAyKSwgXA0KLSAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVsyXSA9IChwMyksIFwNCi0gICAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmlbM10gPSAocDQpLCBcDQotICAgKCooY2luZm8pLT5lcnItPmVycm9yX2V4aXQpICgoal9jb21tb25fcHRyKSAoY2luZm8pKSkNCi0jZGVmaW5lIEVSUkVYSVRTKGNpbmZvLGNvZGUsc3RyKSAgXA0KLSAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwNCi0gICBGWFNZU19zdHJuY3B5KChjaW5mbyktPmVyci0+bXNnX3Bhcm0ucywgKHN0ciksIEpNU0dfU1RSX1BBUk1fTUFYKSwgXA0KLSAgICgqKGNpbmZvKS0+ZXJyLT5lcnJvcl9leGl0KSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSkpDQotDQotI2RlZmluZSBNQUtFU1RNVChzdHVmZikJCWRvIHsgc3R1ZmYgfSB3aGlsZSAoMCkNCi0NCi0vKiBOb25mYXRhbCBlcnJvcnMgKHdlIGNhbiBrZWVwIGdvaW5nLCBidXQgdGhlIGRhdGEgaXMgcHJvYmFibHkgY29ycnVwdCkgKi8NCi0jZGVmaW5lIFdBUk5NUyhjaW5mbyxjb2RlKSAgXA0KLSAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwNCi0gICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSwgLTEpKQ0KLSNkZWZpbmUgV0FSTk1TMShjaW5mbyxjb2RlLHAxKSAgXA0KLSAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwNCi0gICAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmlbMF0gPSAocDEpLCBcDQotICAgKCooY2luZm8pLT5lcnItPmVtaXRfbWVzc2FnZSkgKChqX2NvbW1vbl9wdHIpIChjaW5mbyksIC0xKSkNCi0jZGVmaW5lIFdBUk5NUzIoY2luZm8sY29kZSxwMSxwMikgIFwNCi0gICgoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpLCBcDQotICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzBdID0gKHAxKSwgXA0KLSAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVsxXSA9IChwMiksIFwNCi0gICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSwgLTEpKQ0KLQ0KLS8qIEluZm9ybWF0aW9uYWwvZGVidWdnaW5nIG1lc3NhZ2VzICovDQotI2RlZmluZSBUUkFDRU1TKGNpbmZvLGx2bCxjb2RlKSAgXA0KLSAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwNCi0gICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSwgKGx2bCkpKQ0KLSNkZWZpbmUgVFJBQ0VNUzEoY2luZm8sbHZsLGNvZGUscDEpICBcDQotICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXA0KLSAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVswXSA9IChwMSksIFwNCi0gICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSwgKGx2bCkpKQ0KLSNkZWZpbmUgVFJBQ0VNUzIoY2luZm8sbHZsLGNvZGUscDEscDIpICBcDQotICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXA0KLSAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVswXSA9IChwMSksIFwNCi0gICAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmlbMV0gPSAocDIpLCBcDQotICAgKCooY2luZm8pLT5lcnItPmVtaXRfbWVzc2FnZSkgKChqX2NvbW1vbl9wdHIpIChjaW5mbyksIChsdmwpKSkNCi0jZGVmaW5lIFRSQUNFTVMzKGNpbmZvLGx2bCxjb2RlLHAxLHAyLHAzKSAgXA0KLSAgTUFLRVNUTVQoaW50ICogX21wID0gKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pOyBcDQotCSAgIF9tcFswXSA9IChwMSk7IF9tcFsxXSA9IChwMik7IF9tcFsyXSA9IChwMyk7IFwNCi0JICAgKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKTsgXA0KLQkgICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSwgKGx2bCkpOyApDQotI2RlZmluZSBUUkFDRU1TNChjaW5mbyxsdmwsY29kZSxwMSxwMixwMyxwNCkgIFwNCi0gIE1BS0VTVE1UKGludCAqIF9tcCA9IChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaTsgXA0KLQkgICBfbXBbMF0gPSAocDEpOyBfbXBbMV0gPSAocDIpOyBfbXBbMl0gPSAocDMpOyBfbXBbM10gPSAocDQpOyBcDQotCSAgIChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSk7IFwNCi0JICAgKCooY2luZm8pLT5lcnItPmVtaXRfbWVzc2FnZSkgKChqX2NvbW1vbl9wdHIpIChjaW5mbyksIChsdmwpKTsgKQ0KLSNkZWZpbmUgVFJBQ0VNUzUoY2luZm8sbHZsLGNvZGUscDEscDIscDMscDQscDUpICBcDQotICBNQUtFU1RNVChpbnQgKiBfbXAgPSAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmk7IFwNCi0JICAgX21wWzBdID0gKHAxKTsgX21wWzFdID0gKHAyKTsgX21wWzJdID0gKHAzKTsgX21wWzNdID0gKHA0KTsgXA0KLQkgICBfbXBbNF0gPSAocDUpOyBcDQotCSAgIChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSk7IFwNCi0JICAgKCooY2luZm8pLT5lcnItPmVtaXRfbWVzc2FnZSkgKChqX2NvbW1vbl9wdHIpIChjaW5mbyksIChsdmwpKTsgKQ0KLSNkZWZpbmUgVFJBQ0VNUzgoY2luZm8sbHZsLGNvZGUscDEscDIscDMscDQscDUscDYscDcscDgpICBcDQotICBNQUtFU1RNVChpbnQgKiBfbXAgPSAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmk7IFwNCi0JICAgX21wWzBdID0gKHAxKTsgX21wWzFdID0gKHAyKTsgX21wWzJdID0gKHAzKTsgX21wWzNdID0gKHA0KTsgXA0KLQkgICBfbXBbNF0gPSAocDUpOyBfbXBbNV0gPSAocDYpOyBfbXBbNl0gPSAocDcpOyBfbXBbN10gPSAocDgpOyBcDQotCSAgIChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSk7IFwNCi0JICAgKCooY2luZm8pLT5lcnItPmVtaXRfbWVzc2FnZSkgKChqX2NvbW1vbl9wdHIpIChjaW5mbyksIChsdmwpKTsgKQ0KLSNkZWZpbmUgVFJBQ0VNU1MoY2luZm8sbHZsLGNvZGUsc3RyKSAgXA0KLSAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwNCi0gICBGWFNZU19zdHJuY3B5KChjaW5mbyktPmVyci0+bXNnX3Bhcm0ucywgKHN0ciksIEpNU0dfU1RSX1BBUk1fTUFYKSwgXA0KLSAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKSAoY2luZm8pLCAobHZsKSkpDQotDQotI2VuZGlmIC8qIEpFUlJPUl9IICovDQorLyoKKyAqIGplcnJvci5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUgZXJyb3IgYW5kIG1lc3NhZ2UgY29kZXMgZm9yIHRoZSBKUEVHIGxpYnJhcnkuCisgKiBFZGl0IHRoaXMgZmlsZSB0byBhZGQgbmV3IGNvZGVzLCBvciB0byB0cmFuc2xhdGUgdGhlIG1lc3NhZ2Ugc3RyaW5ncyB0bworICogc29tZSBvdGhlciBsYW5ndWFnZS4KKyAqIEEgc2V0IG9mIGVycm9yLXJlcG9ydGluZyBtYWNyb3MgYXJlIGRlZmluZWQgdG9vLiAgU29tZSBhcHBsaWNhdGlvbnMgdXNpbmcKKyAqIHRoZSBKUEVHIGxpYnJhcnkgbWF5IHdpc2ggdG8gaW5jbHVkZSB0aGlzIGZpbGUgdG8gZ2V0IHRoZSBlcnJvciBjb2RlcworICogYW5kL29yIHRoZSBtYWNyb3MuCisgKi8KKworLyoKKyAqIFRvIGRlZmluZSB0aGUgZW51bSBsaXN0IG9mIG1lc3NhZ2UgY29kZXMsIGluY2x1ZGUgdGhpcyBmaWxlIHdpdGhvdXQKKyAqIGRlZmluaW5nIG1hY3JvIEpNRVNTQUdFLiAgVG8gY3JlYXRlIGEgbWVzc2FnZSBzdHJpbmcgdGFibGUsIGluY2x1ZGUgaXQKKyAqIGFnYWluIHdpdGggYSBzdWl0YWJsZSBKTUVTU0FHRSBkZWZpbml0aW9uIChzZWUgamVycm9yLmMgZm9yIGFuIGV4YW1wbGUpLgorICovCisjaWZuZGVmIEpNRVNTQUdFCisjaWZuZGVmIEpFUlJPUl9ICisvKiBGaXJzdCB0aW1lIHRocm91Z2gsIGRlZmluZSB0aGUgZW51bSBsaXN0ICovCisjZGVmaW5lIEpNQUtFX0VOVU1fTElTVAorI2Vsc2UKKy8qIFJlcGVhdGVkIGluY2x1c2lvbnMgb2YgdGhpcyBmaWxlIGFyZSBuby1vcHMgdW5sZXNzIEpNRVNTQUdFIGlzIGRlZmluZWQgKi8KKyNkZWZpbmUgSk1FU1NBR0UoY29kZSxzdHJpbmcpCisjZW5kaWYgLyogSkVSUk9SX0ggKi8KKyNlbmRpZiAvKiBKTUVTU0FHRSAqLworCisjaWZkZWYgSk1BS0VfRU5VTV9MSVNUCisKK3R5cGVkZWYgZW51bSB7CisKKyNkZWZpbmUgSk1FU1NBR0UoY29kZSxzdHJpbmcpCWNvZGUgLAorCisjZW5kaWYgLyogSk1BS0VfRU5VTV9MSVNUICovCisKK0pNRVNTQUdFKEpNU0dfTk9NRVNTQUdFLCAiQm9ndXMgbWVzc2FnZSBjb2RlICVkIikgLyogTXVzdCBiZSBmaXJzdCBlbnRyeSEgKi8KKworLyogRm9yIG1haW50ZW5hbmNlIGNvbnZlbmllbmNlLCBsaXN0IGlzIGFscGhhYmV0aWNhbCBieSBtZXNzYWdlIGNvZGUgbmFtZSAqLworSk1FU1NBR0UoSkVSUl9BUklUSF9OT1RJTVBMLAorCSAiU29ycnksIHRoZXJlIGFyZSBsZWdhbCByZXN0cmljdGlvbnMgb24gYXJpdGhtZXRpYyBjb2RpbmciKQorSk1FU1NBR0UoSkVSUl9CQURfQUxJR05fVFlQRSwgIkFMSUdOX1RZUEUgaXMgd3JvbmcsIHBsZWFzZSBmaXgiKQorSk1FU1NBR0UoSkVSUl9CQURfQUxMT0NfQ0hVTkssICJNQVhfQUxMT0NfQ0hVTksgaXMgd3JvbmcsIHBsZWFzZSBmaXgiKQorSk1FU1NBR0UoSkVSUl9CQURfQlVGRkVSX01PREUsICJCb2d1cyBidWZmZXIgY29udHJvbCBtb2RlIikKK0pNRVNTQUdFKEpFUlJfQkFEX0NPTVBPTkVOVF9JRCwgIkludmFsaWQgY29tcG9uZW50IElEICVkIGluIFNPUyIpCitKTUVTU0FHRShKRVJSX0JBRF9EQ1RfQ09FRiwgIkRDVCBjb2VmZmljaWVudCBvdXQgb2YgcmFuZ2UiKQorSk1FU1NBR0UoSkVSUl9CQURfRENUU0laRSwgIklEQ1Qgb3V0cHV0IGJsb2NrIHNpemUgJWQgbm90IHN1cHBvcnRlZCIpCitKTUVTU0FHRShKRVJSX0JBRF9IVUZGX1RBQkxFLCAiQm9ndXMgSHVmZm1hbiB0YWJsZSBkZWZpbml0aW9uIikKK0pNRVNTQUdFKEpFUlJfQkFEX0lOX0NPTE9SU1BBQ0UsICJCb2d1cyBpbnB1dCBjb2xvcnNwYWNlIikKK0pNRVNTQUdFKEpFUlJfQkFEX0pfQ09MT1JTUEFDRSwgIkJvZ3VzIEpQRUcgY29sb3JzcGFjZSIpCitKTUVTU0FHRShKRVJSX0JBRF9MRU5HVEgsICJCb2d1cyBtYXJrZXIgbGVuZ3RoIikKK0pNRVNTQUdFKEpFUlJfQkFEX0xJQl9WRVJTSU9OLAorCSAiV3JvbmcgSlBFRyBsaWJyYXJ5IHZlcnNpb246IGxpYnJhcnkgaXMgJWQsIGNhbGxlciBleHBlY3RzICVkIikKK0pNRVNTQUdFKEpFUlJfQkFEX01DVV9TSVpFLCAiU2FtcGxpbmcgZmFjdG9ycyB0b28gbGFyZ2UgZm9yIGludGVybGVhdmVkIHNjYW4iKQorSk1FU1NBR0UoSkVSUl9CQURfUE9PTF9JRCwgIkludmFsaWQgbWVtb3J5IHBvb2wgY29kZSAlZCIpCitKTUVTU0FHRShKRVJSX0JBRF9QUkVDSVNJT04sICJVbnN1cHBvcnRlZCBKUEVHIGRhdGEgcHJlY2lzaW9uICVkIikKK0pNRVNTQUdFKEpFUlJfQkFEX1BST0dSRVNTSU9OLAorCSAiSW52YWxpZCBwcm9ncmVzc2l2ZSBwYXJhbWV0ZXJzIFNzPSVkIFNlPSVkIEFoPSVkIEFsPSVkIikKK0pNRVNTQUdFKEpFUlJfQkFEX1BST0dfU0NSSVBULAorCSAiSW52YWxpZCBwcm9ncmVzc2l2ZSBwYXJhbWV0ZXJzIGF0IHNjYW4gc2NyaXB0IGVudHJ5ICVkIikKK0pNRVNTQUdFKEpFUlJfQkFEX1NBTVBMSU5HLCAiQm9ndXMgc2FtcGxpbmcgZmFjdG9ycyIpCitKTUVTU0FHRShKRVJSX0JBRF9TQ0FOX1NDUklQVCwgIkludmFsaWQgc2NhbiBzY3JpcHQgYXQgZW50cnkgJWQiKQorSk1FU1NBR0UoSkVSUl9CQURfU1RBVEUsICJJbXByb3BlciBjYWxsIHRvIEpQRUcgbGlicmFyeSBpbiBzdGF0ZSAlZCIpCitKTUVTU0FHRShKRVJSX0JBRF9TVFJVQ1RfU0laRSwKKwkgIkpQRUcgcGFyYW1ldGVyIHN0cnVjdCBtaXNtYXRjaDogbGlicmFyeSB0aGlua3Mgc2l6ZSBpcyAldSwgY2FsbGVyIGV4cGVjdHMgJXUiKQorSk1FU1NBR0UoSkVSUl9CQURfVklSVFVBTF9BQ0NFU1MsICJCb2d1cyB2aXJ0dWFsIGFycmF5IGFjY2VzcyIpCitKTUVTU0FHRShKRVJSX0JVRkZFUl9TSVpFLCAiQnVmZmVyIHBhc3NlZCB0byBKUEVHIGxpYnJhcnkgaXMgdG9vIHNtYWxsIikKK0pNRVNTQUdFKEpFUlJfQ0FOVF9TVVNQRU5ELCAiU3VzcGVuc2lvbiBub3QgYWxsb3dlZCBoZXJlIikKK0pNRVNTQUdFKEpFUlJfQ0NJUjYwMV9OT1RJTVBMLCAiQ0NJUjYwMSBzYW1wbGluZyBub3QgaW1wbGVtZW50ZWQgeWV0IikKK0pNRVNTQUdFKEpFUlJfQ09NUE9ORU5UX0NPVU5ULCAiVG9vIG1hbnkgY29sb3IgY29tcG9uZW50czogJWQsIG1heCAlZCIpCitKTUVTU0FHRShKRVJSX0NPTlZFUlNJT05fTk9USU1QTCwgIlVuc3VwcG9ydGVkIGNvbG9yIGNvbnZlcnNpb24gcmVxdWVzdCIpCitKTUVTU0FHRShKRVJSX0RBQ19JTkRFWCwgIkJvZ3VzIERBQyBpbmRleCAlZCIpCitKTUVTU0FHRShKRVJSX0RBQ19WQUxVRSwgIkJvZ3VzIERBQyB2YWx1ZSAweCV4IikKK0pNRVNTQUdFKEpFUlJfREhUX0lOREVYLCAiQm9ndXMgREhUIGluZGV4ICVkIikKK0pNRVNTQUdFKEpFUlJfRFFUX0lOREVYLCAiQm9ndXMgRFFUIGluZGV4ICVkIikKK0pNRVNTQUdFKEpFUlJfRU1QVFlfSU1BR0UsICJFbXB0eSBKUEVHIGltYWdlIChETkwgbm90IHN1cHBvcnRlZCkiKQorSk1FU1NBR0UoSkVSUl9FTVNfUkVBRCwgIlJlYWQgZnJvbSBFTVMgZmFpbGVkIikKK0pNRVNTQUdFKEpFUlJfRU1TX1dSSVRFLCAiV3JpdGUgdG8gRU1TIGZhaWxlZCIpCitKTUVTU0FHRShKRVJSX0VPSV9FWFBFQ1RFRCwgIkRpZG4ndCBleHBlY3QgbW9yZSB0aGFuIG9uZSBzY2FuIikKK0pNRVNTQUdFKEpFUlJfRklMRV9SRUFELCAiSW5wdXQgZmlsZSByZWFkIGVycm9yIikKK0pNRVNTQUdFKEpFUlJfRklMRV9XUklURSwgIk91dHB1dCBmaWxlIHdyaXRlIGVycm9yIC0tLSBvdXQgb2YgZGlzayBzcGFjZT8iKQorSk1FU1NBR0UoSkVSUl9GUkFDVF9TQU1QTEVfTk9USU1QTCwgIkZyYWN0aW9uYWwgc2FtcGxpbmcgbm90IGltcGxlbWVudGVkIHlldCIpCitKTUVTU0FHRShKRVJSX0hVRkZfQ0xFTl9PVkVSRkxPVywgIkh1ZmZtYW4gY29kZSBzaXplIHRhYmxlIG92ZXJmbG93IikKK0pNRVNTQUdFKEpFUlJfSFVGRl9NSVNTSU5HX0NPREUsICJNaXNzaW5nIEh1ZmZtYW4gY29kZSB0YWJsZSBlbnRyeSIpCitKTUVTU0FHRShKRVJSX0lNQUdFX1RPT19CSUcsICJNYXhpbXVtIHN1cHBvcnRlZCBpbWFnZSBkaW1lbnNpb24gaXMgJXUgcGl4ZWxzIikKK0pNRVNTQUdFKEpFUlJfSU5QVVRfRU1QVFksICJFbXB0eSBpbnB1dCBmaWxlIikKK0pNRVNTQUdFKEpFUlJfSU5QVVRfRU9GLCAiUHJlbWF0dXJlIGVuZCBvZiBpbnB1dCBmaWxlIikKK0pNRVNTQUdFKEpFUlJfTUlTTUFUQ0hFRF9RVUFOVF9UQUJMRSwKKwkgIkNhbm5vdCB0cmFuc2NvZGUgZHVlIHRvIG11bHRpcGxlIHVzZSBvZiBxdWFudGl6YXRpb24gdGFibGUgJWQiKQorSk1FU1NBR0UoSkVSUl9NSVNTSU5HX0RBVEEsICJTY2FuIHNjcmlwdCBkb2VzIG5vdCB0cmFuc21pdCBhbGwgZGF0YSIpCitKTUVTU0FHRShKRVJSX01PREVfQ0hBTkdFLCAiSW52YWxpZCBjb2xvciBxdWFudGl6YXRpb24gbW9kZSBjaGFuZ2UiKQorSk1FU1NBR0UoSkVSUl9OT1RJTVBMLCAiTm90IGltcGxlbWVudGVkIHlldCIpCitKTUVTU0FHRShKRVJSX05PVF9DT01QSUxFRCwgIlJlcXVlc3RlZCBmZWF0dXJlIHdhcyBvbWl0dGVkIGF0IGNvbXBpbGUgdGltZSIpCitKTUVTU0FHRShKRVJSX05PX0JBQ0tJTkdfU1RPUkUsICJCYWNraW5nIHN0b3JlIG5vdCBzdXBwb3J0ZWQiKQorSk1FU1NBR0UoSkVSUl9OT19IVUZGX1RBQkxFLCAiSHVmZm1hbiB0YWJsZSAweCUwMnggd2FzIG5vdCBkZWZpbmVkIikKK0pNRVNTQUdFKEpFUlJfTk9fSU1BR0UsICJKUEVHIGRhdGFzdHJlYW0gY29udGFpbnMgbm8gaW1hZ2UiKQorSk1FU1NBR0UoSkVSUl9OT19RVUFOVF9UQUJMRSwgIlF1YW50aXphdGlvbiB0YWJsZSAweCUwMnggd2FzIG5vdCBkZWZpbmVkIikKK0pNRVNTQUdFKEpFUlJfTk9fU09JLCAiTm90IGEgSlBFRyBmaWxlOiBzdGFydHMgd2l0aCAweCUwMnggMHglMDJ4IikKK0pNRVNTQUdFKEpFUlJfT1VUX09GX01FTU9SWSwgIkluc3VmZmljaWVudCBtZW1vcnkgKGNhc2UgJWQpIikKK0pNRVNTQUdFKEpFUlJfUVVBTlRfQ09NUE9ORU5UUywKKwkgIkNhbm5vdCBxdWFudGl6ZSBtb3JlIHRoYW4gJWQgY29sb3IgY29tcG9uZW50cyIpCitKTUVTU0FHRShKRVJSX1FVQU5UX0ZFV19DT0xPUlMsICJDYW5ub3QgcXVhbnRpemUgdG8gZmV3ZXIgdGhhbiAlZCBjb2xvcnMiKQorSk1FU1NBR0UoSkVSUl9RVUFOVF9NQU5ZX0NPTE9SUywgIkNhbm5vdCBxdWFudGl6ZSB0byBtb3JlIHRoYW4gJWQgY29sb3JzIikKK0pNRVNTQUdFKEpFUlJfU09GX0RVUExJQ0FURSwgIkludmFsaWQgSlBFRyBmaWxlIHN0cnVjdHVyZTogdHdvIFNPRiBtYXJrZXJzIikKK0pNRVNTQUdFKEpFUlJfU09GX05PX1NPUywgIkludmFsaWQgSlBFRyBmaWxlIHN0cnVjdHVyZTogbWlzc2luZyBTT1MgbWFya2VyIikKK0pNRVNTQUdFKEpFUlJfU09GX1VOU1VQUE9SVEVELCAiVW5zdXBwb3J0ZWQgSlBFRyBwcm9jZXNzOiBTT0YgdHlwZSAweCUwMngiKQorSk1FU1NBR0UoSkVSUl9TT0lfRFVQTElDQVRFLCAiSW52YWxpZCBKUEVHIGZpbGUgc3RydWN0dXJlOiB0d28gU09JIG1hcmtlcnMiKQorSk1FU1NBR0UoSkVSUl9TT1NfTk9fU09GLCAiSW52YWxpZCBKUEVHIGZpbGUgc3RydWN0dXJlOiBTT1MgYmVmb3JlIFNPRiIpCitKTUVTU0FHRShKRVJSX1RGSUxFX0NSRUFURSwgIkZhaWxlZCB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUgJXMiKQorSk1FU1NBR0UoSkVSUl9URklMRV9SRUFELCAiUmVhZCBmYWlsZWQgb24gdGVtcG9yYXJ5IGZpbGUiKQorSk1FU1NBR0UoSkVSUl9URklMRV9TRUVLLCAiU2VlayBmYWlsZWQgb24gdGVtcG9yYXJ5IGZpbGUiKQorSk1FU1NBR0UoSkVSUl9URklMRV9XUklURSwKKwkgIldyaXRlIGZhaWxlZCBvbiB0ZW1wb3JhcnkgZmlsZSAtLS0gb3V0IG9mIGRpc2sgc3BhY2U/IikKK0pNRVNTQUdFKEpFUlJfVE9PX0xJVFRMRV9EQVRBLCAiQXBwbGljYXRpb24gdHJhbnNmZXJyZWQgdG9vIGZldyBzY2FubGluZXMiKQorSk1FU1NBR0UoSkVSUl9VTktOT1dOX01BUktFUiwgIlVuc3VwcG9ydGVkIG1hcmtlciB0eXBlIDB4JTAyeCIpCitKTUVTU0FHRShKRVJSX1ZJUlRVQUxfQlVHLCAiVmlydHVhbCBhcnJheSBjb250cm9sbGVyIG1lc3NlZCB1cCIpCitKTUVTU0FHRShKRVJSX1dJRFRIX09WRVJGTE9XLCAiSW1hZ2UgdG9vIHdpZGUgZm9yIHRoaXMgaW1wbGVtZW50YXRpb24iKQorSk1FU1NBR0UoSkVSUl9YTVNfUkVBRCwgIlJlYWQgZnJvbSBYTVMgZmFpbGVkIikKK0pNRVNTQUdFKEpFUlJfWE1TX1dSSVRFLCAiV3JpdGUgdG8gWE1TIGZhaWxlZCIpCitKTUVTU0FHRShKTVNHX0NPUFlSSUdIVCwgSkNPUFlSSUdIVCkKK0pNRVNTQUdFKEpNU0dfVkVSU0lPTiwgSlZFUlNJT04pCitKTUVTU0FHRShKVFJDXzE2QklUX1RBQkxFUywKKwkgIkNhdXRpb246IHF1YW50aXphdGlvbiB0YWJsZXMgYXJlIHRvbyBjb2Fyc2UgZm9yIGJhc2VsaW5lIEpQRUciKQorSk1FU1NBR0UoSlRSQ19BRE9CRSwKKwkgIkFkb2JlIEFQUDE0IG1hcmtlcjogdmVyc2lvbiAlZCwgZmxhZ3MgMHglMDR4IDB4JTA0eCwgdHJhbnNmb3JtICVkIikKK0pNRVNTQUdFKEpUUkNfQVBQMCwgIlVua25vd24gQVBQMCBtYXJrZXIgKG5vdCBKRklGKSwgbGVuZ3RoICV1IikKK0pNRVNTQUdFKEpUUkNfQVBQMTQsICJVbmtub3duIEFQUDE0IG1hcmtlciAobm90IEFkb2JlKSwgbGVuZ3RoICV1IikKK0pNRVNTQUdFKEpUUkNfREFDLCAiRGVmaW5lIEFyaXRobWV0aWMgVGFibGUgMHglMDJ4OiAweCUwMngiKQorSk1FU1NBR0UoSlRSQ19ESFQsICJEZWZpbmUgSHVmZm1hbiBUYWJsZSAweCUwMngiKQorSk1FU1NBR0UoSlRSQ19EUVQsICJEZWZpbmUgUXVhbnRpemF0aW9uIFRhYmxlICVkICBwcmVjaXNpb24gJWQiKQorSk1FU1NBR0UoSlRSQ19EUkksICJEZWZpbmUgUmVzdGFydCBJbnRlcnZhbCAldSIpCitKTUVTU0FHRShKVFJDX0VNU19DTE9TRSwgIkZyZWVkIEVNUyBoYW5kbGUgJXUiKQorSk1FU1NBR0UoSlRSQ19FTVNfT1BFTiwgIk9idGFpbmVkIEVNUyBoYW5kbGUgJXUiKQorSk1FU1NBR0UoSlRSQ19FT0ksICJFbmQgT2YgSW1hZ2UiKQorSk1FU1NBR0UoSlRSQ19IVUZGQklUUywgIiAgICAgICAgJTNkICUzZCAlM2QgJTNkICUzZCAlM2QgJTNkICUzZCIpCitKTUVTU0FHRShKVFJDX0pGSUYsICJKRklGIEFQUDAgbWFya2VyOiB2ZXJzaW9uICVkLiUwMmQsIGRlbnNpdHkgJWR4JWQgICVkIikKK0pNRVNTQUdFKEpUUkNfSkZJRl9CQURUSFVNQk5BSUxTSVpFLAorCSAiV2FybmluZzogdGh1bWJuYWlsIGltYWdlIHNpemUgZG9lcyBub3QgbWF0Y2ggZGF0YSBsZW5ndGggJXUiKQorSk1FU1NBR0UoSlRSQ19KRklGX0VYVEVOU0lPTiwKKwkgIkpGSUYgZXh0ZW5zaW9uIG1hcmtlcjogdHlwZSAweCUwMngsIGxlbmd0aCAldSIpCitKTUVTU0FHRShKVFJDX0pGSUZfVEhVTUJOQUlMLCAiICAgIHdpdGggJWQgeCAlZCB0aHVtYm5haWwgaW1hZ2UiKQorSk1FU1NBR0UoSlRSQ19NSVNDX01BUktFUiwgIk1pc2NlbGxhbmVvdXMgbWFya2VyIDB4JTAyeCwgbGVuZ3RoICV1IikKK0pNRVNTQUdFKEpUUkNfUEFSTUxFU1NfTUFSS0VSLCAiVW5leHBlY3RlZCBtYXJrZXIgMHglMDJ4IikKK0pNRVNTQUdFKEpUUkNfUVVBTlRWQUxTLCAiICAgICAgICAlNHUgJTR1ICU0dSAlNHUgJTR1ICU0dSAlNHUgJTR1IikKK0pNRVNTQUdFKEpUUkNfUVVBTlRfM19OQ09MT1JTLCAiUXVhbnRpemluZyB0byAlZCA9ICVkKiVkKiVkIGNvbG9ycyIpCitKTUVTU0FHRShKVFJDX1FVQU5UX05DT0xPUlMsICJRdWFudGl6aW5nIHRvICVkIGNvbG9ycyIpCitKTUVTU0FHRShKVFJDX1FVQU5UX1NFTEVDVEVELCAiU2VsZWN0ZWQgJWQgY29sb3JzIGZvciBxdWFudGl6YXRpb24iKQorSk1FU1NBR0UoSlRSQ19SRUNPVkVSWV9BQ1RJT04sICJBdCBtYXJrZXIgMHglMDJ4LCByZWNvdmVyeSBhY3Rpb24gJWQiKQorSk1FU1NBR0UoSlRSQ19SU1QsICJSU1QlZCIpCitKTUVTU0FHRShKVFJDX1NNT09USF9OT1RJTVBMLAorCSAiU21vb3RoaW5nIG5vdCBzdXBwb3J0ZWQgd2l0aCBub25zdGFuZGFyZCBzYW1wbGluZyByYXRpb3MiKQorSk1FU1NBR0UoSlRSQ19TT0YsICJTdGFydCBPZiBGcmFtZSAweCUwMng6IHdpZHRoPSV1LCBoZWlnaHQ9JXUsIGNvbXBvbmVudHM9JWQiKQorSk1FU1NBR0UoSlRSQ19TT0ZfQ09NUE9ORU5ULCAiICAgIENvbXBvbmVudCAlZDogJWRoeCVkdiBxPSVkIikKK0pNRVNTQUdFKEpUUkNfU09JLCAiU3RhcnQgb2YgSW1hZ2UiKQorSk1FU1NBR0UoSlRSQ19TT1MsICJTdGFydCBPZiBTY2FuOiAlZCBjb21wb25lbnRzIikKK0pNRVNTQUdFKEpUUkNfU09TX0NPTVBPTkVOVCwgIiAgICBDb21wb25lbnQgJWQ6IGRjPSVkIGFjPSVkIikKK0pNRVNTQUdFKEpUUkNfU09TX1BBUkFNUywgIiAgU3M9JWQsIFNlPSVkLCBBaD0lZCwgQWw9JWQiKQorSk1FU1NBR0UoSlRSQ19URklMRV9DTE9TRSwgIkNsb3NlZCB0ZW1wb3JhcnkgZmlsZSAlcyIpCitKTUVTU0FHRShKVFJDX1RGSUxFX09QRU4sICJPcGVuZWQgdGVtcG9yYXJ5IGZpbGUgJXMiKQorSk1FU1NBR0UoSlRSQ19USFVNQl9KUEVHLAorCSAiSkZJRiBleHRlbnNpb24gbWFya2VyOiBKUEVHLWNvbXByZXNzZWQgdGh1bWJuYWlsIGltYWdlLCBsZW5ndGggJXUiKQorSk1FU1NBR0UoSlRSQ19USFVNQl9QQUxFVFRFLAorCSAiSkZJRiBleHRlbnNpb24gbWFya2VyOiBwYWxldHRlIHRodW1ibmFpbCBpbWFnZSwgbGVuZ3RoICV1IikKK0pNRVNTQUdFKEpUUkNfVEhVTUJfUkdCLAorCSAiSkZJRiBleHRlbnNpb24gbWFya2VyOiBSR0IgdGh1bWJuYWlsIGltYWdlLCBsZW5ndGggJXUiKQorSk1FU1NBR0UoSlRSQ19VTktOT1dOX0lEUywKKwkgIlVucmVjb2duaXplZCBjb21wb25lbnQgSURzICVkICVkICVkLCBhc3N1bWluZyBZQ2JDciIpCitKTUVTU0FHRShKVFJDX1hNU19DTE9TRSwgIkZyZWVkIFhNUyBoYW5kbGUgJXUiKQorSk1FU1NBR0UoSlRSQ19YTVNfT1BFTiwgIk9idGFpbmVkIFhNUyBoYW5kbGUgJXUiKQorSk1FU1NBR0UoSldSTl9BRE9CRV9YRk9STSwgIlVua25vd24gQWRvYmUgY29sb3IgdHJhbnNmb3JtIGNvZGUgJWQiKQorSk1FU1NBR0UoSldSTl9CT0dVU19QUk9HUkVTU0lPTiwKKwkgIkluY29uc2lzdGVudCBwcm9ncmVzc2lvbiBzZXF1ZW5jZSBmb3IgY29tcG9uZW50ICVkIGNvZWZmaWNpZW50ICVkIikKK0pNRVNTQUdFKEpXUk5fRVhUUkFORU9VU19EQVRBLAorCSAiQ29ycnVwdCBKUEVHIGRhdGE6ICV1IGV4dHJhbmVvdXMgYnl0ZXMgYmVmb3JlIG1hcmtlciAweCUwMngiKQorSk1FU1NBR0UoSldSTl9ISVRfTUFSS0VSLCAiQ29ycnVwdCBKUEVHIGRhdGE6IHByZW1hdHVyZSBlbmQgb2YgZGF0YSBzZWdtZW50IikKK0pNRVNTQUdFKEpXUk5fSFVGRl9CQURfQ09ERSwgIkNvcnJ1cHQgSlBFRyBkYXRhOiBiYWQgSHVmZm1hbiBjb2RlIikKK0pNRVNTQUdFKEpXUk5fSkZJRl9NQUpPUiwgIldhcm5pbmc6IHVua25vd24gSkZJRiByZXZpc2lvbiBudW1iZXIgJWQuJTAyZCIpCitKTUVTU0FHRShKV1JOX0pQRUdfRU9GLCAiUHJlbWF0dXJlIGVuZCBvZiBKUEVHIGZpbGUiKQorSk1FU1NBR0UoSldSTl9NVVNUX1JFU1lOQywKKwkgIkNvcnJ1cHQgSlBFRyBkYXRhOiBmb3VuZCBtYXJrZXIgMHglMDJ4IGluc3RlYWQgb2YgUlNUJWQiKQorSk1FU1NBR0UoSldSTl9OT1RfU0VRVUVOVElBTCwgIkludmFsaWQgU09TIHBhcmFtZXRlcnMgZm9yIHNlcXVlbnRpYWwgSlBFRyIpCitKTUVTU0FHRShKV1JOX1RPT19NVUNIX0RBVEEsICJBcHBsaWNhdGlvbiB0cmFuc2ZlcnJlZCB0b28gbWFueSBzY2FubGluZXMiKQorCisjaWZkZWYgSk1BS0VfRU5VTV9MSVNUCisKKyAgSk1TR19MQVNUTVNHQ09ERQorfSBKX01FU1NBR0VfQ09ERTsKKworI3VuZGVmIEpNQUtFX0VOVU1fTElTVAorI2VuZGlmIC8qIEpNQUtFX0VOVU1fTElTVCAqLworCisvKiBaYXAgSk1FU1NBR0UgbWFjcm8gc28gdGhhdCBmdXR1cmUgcmUtaW5jbHVzaW9ucyBkbyBub3RoaW5nIGJ5IGRlZmF1bHQgKi8KKyN1bmRlZiBKTUVTU0FHRQorCisKKyNpZm5kZWYgSkVSUk9SX0gKKyNkZWZpbmUgSkVSUk9SX0gKKworLyogTWFjcm9zIHRvIHNpbXBsaWZ5IHVzaW5nIHRoZSBlcnJvciBhbmQgdHJhY2UgbWVzc2FnZSBzdHVmZiAqLworLyogVGhlIGZpcnN0IHBhcmFtZXRlciBpcyBlaXRoZXIgdHlwZSBvZiBjaW5mbyBwb2ludGVyICovCisKKy8qIEZhdGFsIGVycm9ycyAocHJpbnQgbWVzc2FnZSBhbmQgZXhpdCkgKi8KKyNkZWZpbmUgRVJSRVhJVChjaW5mbyxjb2RlKSAgXAorICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXAorICAgKCooY2luZm8pLT5lcnItPmVycm9yX2V4aXQpICgoal9jb21tb25fcHRyKSAoY2luZm8pKSkKKyNkZWZpbmUgRVJSRVhJVDEoY2luZm8sY29kZSxwMSkgIFwKKyAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwKKyAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVswXSA9IChwMSksIFwKKyAgICgqKGNpbmZvKS0+ZXJyLT5lcnJvcl9leGl0KSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSkpCisjZGVmaW5lIEVSUkVYSVQyKGNpbmZvLGNvZGUscDEscDIpICBcCisgICgoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpLCBcCisgICAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmlbMF0gPSAocDEpLCBcCisgICAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmlbMV0gPSAocDIpLCBcCisgICAoKihjaW5mbyktPmVyci0+ZXJyb3JfZXhpdCkgKChqX2NvbW1vbl9wdHIpIChjaW5mbykpKQorI2RlZmluZSBFUlJFWElUMyhjaW5mbyxjb2RlLHAxLHAyLHAzKSAgXAorICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXAorICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzBdID0gKHAxKSwgXAorICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzFdID0gKHAyKSwgXAorICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzJdID0gKHAzKSwgXAorICAgKCooY2luZm8pLT5lcnItPmVycm9yX2V4aXQpICgoal9jb21tb25fcHRyKSAoY2luZm8pKSkKKyNkZWZpbmUgRVJSRVhJVDQoY2luZm8sY29kZSxwMSxwMixwMyxwNCkgIFwKKyAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwKKyAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVswXSA9IChwMSksIFwKKyAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVsxXSA9IChwMiksIFwKKyAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVsyXSA9IChwMyksIFwKKyAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVszXSA9IChwNCksIFwKKyAgICgqKGNpbmZvKS0+ZXJyLT5lcnJvcl9leGl0KSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSkpCisjZGVmaW5lIEVSUkVYSVRTKGNpbmZvLGNvZGUsc3RyKSAgXAorICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXAorICAgRlhTWVNfc3RybmNweSgoY2luZm8pLT5lcnItPm1zZ19wYXJtLnMsIChzdHIpLCBKTVNHX1NUUl9QQVJNX01BWCksIFwKKyAgICgqKGNpbmZvKS0+ZXJyLT5lcnJvcl9leGl0KSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSkpCisKKyNkZWZpbmUgTUFLRVNUTVQoc3R1ZmYpCQlkbyB7IHN0dWZmIH0gd2hpbGUgKDApCisKKy8qIE5vbmZhdGFsIGVycm9ycyAod2UgY2FuIGtlZXAgZ29pbmcsIGJ1dCB0aGUgZGF0YSBpcyBwcm9iYWJseSBjb3JydXB0KSAqLworI2RlZmluZSBXQVJOTVMoY2luZm8sY29kZSkgIFwKKyAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwKKyAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKSAoY2luZm8pLCAtMSkpCisjZGVmaW5lIFdBUk5NUzEoY2luZm8sY29kZSxwMSkgIFwKKyAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwKKyAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVswXSA9IChwMSksIFwKKyAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKSAoY2luZm8pLCAtMSkpCisjZGVmaW5lIFdBUk5NUzIoY2luZm8sY29kZSxwMSxwMikgIFwKKyAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwKKyAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVswXSA9IChwMSksIFwKKyAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVsxXSA9IChwMiksIFwKKyAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKSAoY2luZm8pLCAtMSkpCisKKy8qIEluZm9ybWF0aW9uYWwvZGVidWdnaW5nIG1lc3NhZ2VzICovCisjZGVmaW5lIFRSQUNFTVMoY2luZm8sbHZsLGNvZGUpICBcCisgICgoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpLCBcCisgICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSwgKGx2bCkpKQorI2RlZmluZSBUUkFDRU1TMShjaW5mbyxsdmwsY29kZSxwMSkgIFwKKyAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwKKyAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVswXSA9IChwMSksIFwKKyAgICgqKGNpbmZvKS0+ZXJyLT5lbWl0X21lc3NhZ2UpICgoal9jb21tb25fcHRyKSAoY2luZm8pLCAobHZsKSkpCisjZGVmaW5lIFRSQUNFTVMyKGNpbmZvLGx2bCxjb2RlLHAxLHAyKSAgXAorICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXAorICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzBdID0gKHAxKSwgXAorICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzFdID0gKHAyKSwgXAorICAgKCooY2luZm8pLT5lcnItPmVtaXRfbWVzc2FnZSkgKChqX2NvbW1vbl9wdHIpIChjaW5mbyksIChsdmwpKSkKKyNkZWZpbmUgVFJBQ0VNUzMoY2luZm8sbHZsLGNvZGUscDEscDIscDMpICBcCisgIE1BS0VTVE1UKGludCAqIF9tcCA9IChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaTsgXAorCSAgIF9tcFswXSA9IChwMSk7IF9tcFsxXSA9IChwMik7IF9tcFsyXSA9IChwMyk7IFwKKwkgICAoY2luZm8pLT5lcnItPm1zZ19jb2RlID0gKGNvZGUpOyBcCisJICAgKCooY2luZm8pLT5lcnItPmVtaXRfbWVzc2FnZSkgKChqX2NvbW1vbl9wdHIpIChjaW5mbyksIChsdmwpKTsgKQorI2RlZmluZSBUUkFDRU1TNChjaW5mbyxsdmwsY29kZSxwMSxwMixwMyxwNCkgIFwKKyAgTUFLRVNUTVQoaW50ICogX21wID0gKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pOyBcCisJICAgX21wWzBdID0gKHAxKTsgX21wWzFdID0gKHAyKTsgX21wWzJdID0gKHAzKTsgX21wWzNdID0gKHA0KTsgXAorCSAgIChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSk7IFwKKwkgICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSwgKGx2bCkpOyApCisjZGVmaW5lIFRSQUNFTVM1KGNpbmZvLGx2bCxjb2RlLHAxLHAyLHAzLHA0LHA1KSAgXAorICBNQUtFU1RNVChpbnQgKiBfbXAgPSAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmk7IFwKKwkgICBfbXBbMF0gPSAocDEpOyBfbXBbMV0gPSAocDIpOyBfbXBbMl0gPSAocDMpOyBfbXBbM10gPSAocDQpOyBcCisJICAgX21wWzRdID0gKHA1KTsgXAorCSAgIChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSk7IFwKKwkgICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSwgKGx2bCkpOyApCisjZGVmaW5lIFRSQUNFTVM4KGNpbmZvLGx2bCxjb2RlLHAxLHAyLHAzLHA0LHA1LHA2LHA3LHA4KSAgXAorICBNQUtFU1RNVChpbnQgKiBfbXAgPSAoY2luZm8pLT5lcnItPm1zZ19wYXJtLmk7IFwKKwkgICBfbXBbMF0gPSAocDEpOyBfbXBbMV0gPSAocDIpOyBfbXBbMl0gPSAocDMpOyBfbXBbM10gPSAocDQpOyBcCisJICAgX21wWzRdID0gKHA1KTsgX21wWzVdID0gKHA2KTsgX21wWzZdID0gKHA3KTsgX21wWzddID0gKHA4KTsgXAorCSAgIChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSk7IFwKKwkgICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSwgKGx2bCkpOyApCisjZGVmaW5lIFRSQUNFTVNTKGNpbmZvLGx2bCxjb2RlLHN0cikgIFwKKyAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwKKyAgIEZYU1lTX3N0cm5jcHkoKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5zLCAoc3RyKSwgSk1TR19TVFJfUEFSTV9NQVgpLCBcCisgICAoKihjaW5mbyktPmVyci0+ZW1pdF9tZXNzYWdlKSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSwgKGx2bCkpKQorCisjZW5kaWYgLyogSkVSUk9SX0ggKi8KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9qaW5jbHVkZS5oIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ppbmNsdWRlLmgKaW5kZXggMDcwMTg4YS4uMGM3YWE2OCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ppbmNsdWRlLmgKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ppbmNsdWRlLmgKQEAgLTEsMTAyICsxLDEwMiBAQAotLyoNCi0gKiBqaW5jbHVkZS5oDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NCwgVGhvbWFzIEcuIExhbmUuDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4NCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuDQotICoNCi0gKiBUaGlzIGZpbGUgZXhpc3RzIHRvIHByb3ZpZGUgYSBzaW5nbGUgcGxhY2UgdG8gZml4IGFueSBwcm9ibGVtcyB3aXRoDQotICogaW5jbHVkaW5nIHRoZSB3cm9uZyBzeXN0ZW0gaW5jbHVkZSBmaWxlcy4gIChDb21tb24gcHJvYmxlbXMgYXJlIHRha2VuDQotICogY2FyZSBvZiBieSB0aGUgc3RhbmRhcmQgamNvbmZpZyBzeW1ib2xzLCBidXQgb24gcmVhbGx5IHdlaXJkIHN5c3RlbXMNCi0gKiB5b3UgbWF5IGhhdmUgdG8gZWRpdCB0aGlzIGZpbGUuKQ0KLSAqDQotICogTk9URTogdGhpcyBmaWxlIGlzIE5PVCBpbnRlbmRlZCB0byBiZSBpbmNsdWRlZCBieSBhcHBsaWNhdGlvbnMgdXNpbmcgdGhlDQotICogSlBFRyBsaWJyYXJ5LiAgTW9zdCBhcHBsaWNhdGlvbnMgbmVlZCBvbmx5IGluY2x1ZGUganBlZ2xpYi5oLg0KLSAqLw0KLQ0KLQ0KLS8qIEluY2x1ZGUgYXV0by1jb25maWcgZmlsZSB0byBmaW5kIG91dCB3aGljaCBzeXN0ZW0gaW5jbHVkZSBmaWxlcyB3ZSBuZWVkLiAqLw0KLQ0KLSNpbmNsdWRlICJqY29uZmlnLmgiCQkvKiBhdXRvIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAqLw0KLSNkZWZpbmUgSkNPTkZJR19JTkNMVURFRAkvKiBzbyB0aGF0IGpwZWdsaWIuaCBkb2Vzbid0IGRvIGl0IGFnYWluICovDQotDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfc3lzdGVtLmgiDQotLyoNCi0gKiBXZSBuZWVkIHRoZSBOVUxMIG1hY3JvIGFuZCBzaXplX3QgdHlwZWRlZi4NCi0gKiBPbiBhbiBBTlNJLWNvbmZvcm1pbmcgc3lzdGVtIGl0IGlzIHN1ZmZpY2llbnQgdG8gaW5jbHVkZSA8c3RkZGVmLmg+Lg0KLSAqIE90aGVyd2lzZSwgd2UgZ2V0IHRoZW0gZnJvbSA8c3RkbGliLmg+IG9yIDxzdGRpby5oPjsgd2UgbWF5IGhhdmUgdG8NCi0gKiBwdWxsIGluIDxzeXMvdHlwZXMuaD4gYXMgd2VsbC4NCi0gKiBOb3RlIHRoYXQgdGhlIGNvcmUgSlBFRyBsaWJyYXJ5IGRvZXMgbm90IHJlcXVpcmUgPHN0ZGlvLmg+Ow0KLSAqIG9ubHkgdGhlIGRlZmF1bHQgZXJyb3IgaGFuZGxlciBhbmQgZGF0YSBzb3VyY2UvZGVzdGluYXRpb24gbW9kdWxlcyBkby4NCi0gKiBCdXQgd2UgbXVzdCBwdWxsIGl0IGluIGJlY2F1c2Ugb2YgdGhlIHJlZmVyZW5jZXMgdG8gRklMRSBpbiBqcGVnbGliLmguDQotICogWW91IGNhbiByZW1vdmUgdGhvc2UgcmVmZXJlbmNlcyBpZiB5b3Ugd2FudCB0byBjb21waWxlIHdpdGhvdXQgPHN0ZGlvLmg+Lg0KLSAqLw0KLQ0KLSNpZmRlZiBfREVCVUcNCi0jZGVmaW5lIENSVERCR19NQVBfQUxMT0MNCi0vLyNpbmNsdWRlIDxzdGRsaWIuaD4NCi0vLyNpbmNsdWRlIDxjcnRkYmcuaD4NCi0jZW5kaWYNCi0NCi0jaWZkZWYgSEFWRV9TVERERUZfSA0KLSNpbmNsdWRlIDxzdGRkZWYuaD4NCi0jZW5kaWYNCi0NCi0jaWZkZWYgSEFWRV9TVERMSUJfSA0KLS8vI2luY2x1ZGUgPHN0ZGxpYi5oPg0KLSNlbmRpZg0KLQ0KLSNpZmRlZiBORUVEX1NZU19UWVBFU19IDQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KLSNlbmRpZg0KLQ0KLSNpZm5kZWYgRkFSDQotI2RlZmluZSBGQVINCi0jZW5kaWYNCi0NCi0vLyNpbmNsdWRlIDxzdGRpby5oPg0KLQ0KLS8qDQotICogV2UgbmVlZCBtZW1vcnkgY29weWluZyBhbmQgemVyb2luZyBmdW5jdGlvbnMsIHBsdXMgc3RybmNweSgpLg0KLSAqIEFOU0kgYW5kIFN5c3RlbSBWIGltcGxlbWVudGF0aW9ucyBkZWNsYXJlIHRoZXNlIGluIDxzdHJpbmcuaD4uDQotICogQlNEIGRvZXNuJ3QgaGF2ZSB0aGUgbWVtKCkgZnVuY3Rpb25zLCBidXQgaXQgZG9lcyBoYXZlIGJjb3B5KCkvYnplcm8oKS4NCi0gKiBTb21lIHN5c3RlbXMgbWF5IGRlY2xhcmUgbWVtc2V0IGFuZCBtZW1jcHkgaW4gPG1lbW9yeS5oPi4NCi0gKg0KLSAqIE5PVEU6IHdlIGFzc3VtZSB0aGUgc2l6ZSBwYXJhbWV0ZXJzIHRvIHRoZXNlIGZ1bmN0aW9ucyBhcmUgb2YgdHlwZSBzaXplX3QuDQotICogQ2hhbmdlIHRoZSBjYXN0cyBpbiB0aGVzZSBtYWNyb3MgaWYgbm90IQ0KLSAqLw0KLQ0KLSNpZmRlZiBORUVEX0JTRF9TVFJJTkdTDQotDQotLy8jaW5jbHVkZSA8c3RyaW5ncy5oPg0KLSNkZWZpbmUgTUVNWkVSTyh0YXJnZXQsc2l6ZSkJYnplcm8oKHZvaWQgKikodGFyZ2V0KSwgKHNpemVfdCkoc2l6ZSkpDQotI2RlZmluZSBNRU1DT1BZKGRlc3Qsc3JjLHNpemUpCWJjb3B5KChjb25zdCB2b2lkICopKHNyYyksICh2b2lkICopKGRlc3QpLCAoc2l6ZV90KShzaXplKSkNCi0NCi0jZWxzZSAvKiBub3QgQlNELCBhc3N1bWUgQU5TSS9TeXNWIHN0cmluZyBsaWIgKi8NCi0NCi0vLyNpbmNsdWRlIDxzdHJpbmcuaD4NCi0jZGVmaW5lIE1FTVpFUk8odGFyZ2V0LHNpemUpCUZYU1lTX21lbXNldDMyKCh2b2lkICopKHRhcmdldCksIDAsIChzaXplX3QpKHNpemUpKQ0KLSNkZWZpbmUgTUVNQ09QWShkZXN0LHNyYyxzaXplKQlGWFNZU19tZW1jcHkzMigodm9pZCAqKShkZXN0KSwgKGNvbnN0IHZvaWQgKikoc3JjKSwgKHNpemVfdCkoc2l6ZSkpDQotDQotI2VuZGlmDQotDQotLyoNCi0gKiBJbiBBTlNJIEMsIGFuZCBpbmRlZWQgYW55IHJhdGlvbmFsIGltcGxlbWVudGF0aW9uLCBzaXplX3QgaXMgYWxzbyB0aGUNCi0gKiB0eXBlIHJldHVybmVkIGJ5IHNpemVvZigpLiAgSG93ZXZlciwgaXQgc2VlbXMgdGhlcmUgYXJlIHNvbWUgaXJyYXRpb25hbA0KLSAqIGltcGxlbWVudGF0aW9ucyBvdXQgdGhlcmUsIGluIHdoaWNoIHNpemVvZigpIHJldHVybnMgYW4gaW50IGV2ZW4gdGhvdWdoDQotICogc2l6ZV90IGlzIGRlZmluZWQgYXMgbG9uZyBvciB1bnNpZ25lZCBsb25nLiAgVG8gZW5zdXJlIGNvbnNpc3RlbnQgcmVzdWx0cw0KLSAqIHdlIGFsd2F5cyB1c2UgdGhpcyBTSVpFT0YoKSBtYWNybyBpbiBwbGFjZSBvZiB1c2luZyBzaXplb2YoKSBkaXJlY3RseS4NCi0gKi8NCi0NCi0jZGVmaW5lIFNJWkVPRihvYmplY3QpCSgoc2l6ZV90KSBzaXplb2Yob2JqZWN0KSkNCi0NCi0vKg0KLSAqIFRoZSBtb2R1bGVzIHRoYXQgdXNlIGZyZWFkKCkgYW5kIGZ3cml0ZSgpIGFsd2F5cyBpbnZva2UgdGhlbSB0aHJvdWdoDQotICogdGhlc2UgbWFjcm9zLiAgT24gc29tZSBzeXN0ZW1zIHlvdSBtYXkgbmVlZCB0byB0d2lkZGxlIHRoZSBhcmd1bWVudCBjYXN0cy4NCi0gKiBDQVVUSU9OOiBhcmd1bWVudCBvcmRlciBpcyBkaWZmZXJlbnQgZnJvbSB1bmRlcmx5aW5nIGZ1bmN0aW9ucyENCi0gKi8NCi0NCi0jZGVmaW5lIEpGUkVBRChmaWxlLGJ1ZixzaXplb2ZidWYpICBcDQotICAoKHNpemVfdCkgRlhTWVNfZnJlYWQoKHZvaWQgKikgKGJ1ZiksIChzaXplX3QpIDEsIChzaXplX3QpIChzaXplb2ZidWYpLCAoZmlsZSkpKQ0KLSNkZWZpbmUgSkZXUklURShmaWxlLGJ1ZixzaXplb2ZidWYpICBcDQotICAoKHNpemVfdCkgRlhTWVNfZndyaXRlKChjb25zdCB2b2lkICopIChidWYpLCAoc2l6ZV90KSAxLCAoc2l6ZV90KSAoc2l6ZW9mYnVmKSwgKGZpbGUpKSkNCisvKgorICogamluY2x1ZGUuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk0LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGV4aXN0cyB0byBwcm92aWRlIGEgc2luZ2xlIHBsYWNlIHRvIGZpeCBhbnkgcHJvYmxlbXMgd2l0aAorICogaW5jbHVkaW5nIHRoZSB3cm9uZyBzeXN0ZW0gaW5jbHVkZSBmaWxlcy4gIChDb21tb24gcHJvYmxlbXMgYXJlIHRha2VuCisgKiBjYXJlIG9mIGJ5IHRoZSBzdGFuZGFyZCBqY29uZmlnIHN5bWJvbHMsIGJ1dCBvbiByZWFsbHkgd2VpcmQgc3lzdGVtcworICogeW91IG1heSBoYXZlIHRvIGVkaXQgdGhpcyBmaWxlLikKKyAqCisgKiBOT1RFOiB0aGlzIGZpbGUgaXMgTk9UIGludGVuZGVkIHRvIGJlIGluY2x1ZGVkIGJ5IGFwcGxpY2F0aW9ucyB1c2luZyB0aGUKKyAqIEpQRUcgbGlicmFyeS4gIE1vc3QgYXBwbGljYXRpb25zIG5lZWQgb25seSBpbmNsdWRlIGpwZWdsaWIuaC4KKyAqLworCisKKy8qIEluY2x1ZGUgYXV0by1jb25maWcgZmlsZSB0byBmaW5kIG91dCB3aGljaCBzeXN0ZW0gaW5jbHVkZSBmaWxlcyB3ZSBuZWVkLiAqLworCisjaW5jbHVkZSAiamNvbmZpZy5oIgkJLyogYXV0byBjb25maWd1cmF0aW9uIG9wdGlvbnMgKi8KKyNkZWZpbmUgSkNPTkZJR19JTkNMVURFRAkvKiBzbyB0aGF0IGpwZWdsaWIuaCBkb2Vzbid0IGRvIGl0IGFnYWluICovCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X3N5c3RlbS5oIgorLyoKKyAqIFdlIG5lZWQgdGhlIE5VTEwgbWFjcm8gYW5kIHNpemVfdCB0eXBlZGVmLgorICogT24gYW4gQU5TSS1jb25mb3JtaW5nIHN5c3RlbSBpdCBpcyBzdWZmaWNpZW50IHRvIGluY2x1ZGUgPHN0ZGRlZi5oPi4KKyAqIE90aGVyd2lzZSwgd2UgZ2V0IHRoZW0gZnJvbSA8c3RkbGliLmg+IG9yIDxzdGRpby5oPjsgd2UgbWF5IGhhdmUgdG8KKyAqIHB1bGwgaW4gPHN5cy90eXBlcy5oPiBhcyB3ZWxsLgorICogTm90ZSB0aGF0IHRoZSBjb3JlIEpQRUcgbGlicmFyeSBkb2VzIG5vdCByZXF1aXJlIDxzdGRpby5oPjsKKyAqIG9ubHkgdGhlIGRlZmF1bHQgZXJyb3IgaGFuZGxlciBhbmQgZGF0YSBzb3VyY2UvZGVzdGluYXRpb24gbW9kdWxlcyBkby4KKyAqIEJ1dCB3ZSBtdXN0IHB1bGwgaXQgaW4gYmVjYXVzZSBvZiB0aGUgcmVmZXJlbmNlcyB0byBGSUxFIGluIGpwZWdsaWIuaC4KKyAqIFlvdSBjYW4gcmVtb3ZlIHRob3NlIHJlZmVyZW5jZXMgaWYgeW91IHdhbnQgdG8gY29tcGlsZSB3aXRob3V0IDxzdGRpby5oPi4KKyAqLworCisjaWZkZWYgX0RFQlVHCisjZGVmaW5lIENSVERCR19NQVBfQUxMT0MKKy8vI2luY2x1ZGUgPHN0ZGxpYi5oPgorLy8jaW5jbHVkZSA8Y3J0ZGJnLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1REREVGX0gKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TVERMSUJfSAorLy8jaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKworI2lmZGVmIE5FRURfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaWZuZGVmIEZBUgorI2RlZmluZSBGQVIKKyNlbmRpZgorCisvLyNpbmNsdWRlIDxzdGRpby5oPgorCisvKgorICogV2UgbmVlZCBtZW1vcnkgY29weWluZyBhbmQgemVyb2luZyBmdW5jdGlvbnMsIHBsdXMgc3RybmNweSgpLgorICogQU5TSSBhbmQgU3lzdGVtIFYgaW1wbGVtZW50YXRpb25zIGRlY2xhcmUgdGhlc2UgaW4gPHN0cmluZy5oPi4KKyAqIEJTRCBkb2Vzbid0IGhhdmUgdGhlIG1lbSgpIGZ1bmN0aW9ucywgYnV0IGl0IGRvZXMgaGF2ZSBiY29weSgpL2J6ZXJvKCkuCisgKiBTb21lIHN5c3RlbXMgbWF5IGRlY2xhcmUgbWVtc2V0IGFuZCBtZW1jcHkgaW4gPG1lbW9yeS5oPi4KKyAqCisgKiBOT1RFOiB3ZSBhc3N1bWUgdGhlIHNpemUgcGFyYW1ldGVycyB0byB0aGVzZSBmdW5jdGlvbnMgYXJlIG9mIHR5cGUgc2l6ZV90LgorICogQ2hhbmdlIHRoZSBjYXN0cyBpbiB0aGVzZSBtYWNyb3MgaWYgbm90IQorICovCisKKyNpZmRlZiBORUVEX0JTRF9TVFJJTkdTCisKKy8vI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNkZWZpbmUgTUVNWkVSTyh0YXJnZXQsc2l6ZSkJYnplcm8oKHZvaWQgKikodGFyZ2V0KSwgKHNpemVfdCkoc2l6ZSkpCisjZGVmaW5lIE1FTUNPUFkoZGVzdCxzcmMsc2l6ZSkJYmNvcHkoKGNvbnN0IHZvaWQgKikoc3JjKSwgKHZvaWQgKikoZGVzdCksIChzaXplX3QpKHNpemUpKQorCisjZWxzZSAvKiBub3QgQlNELCBhc3N1bWUgQU5TSS9TeXNWIHN0cmluZyBsaWIgKi8KKworLy8jaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIE1FTVpFUk8odGFyZ2V0LHNpemUpCUZYU1lTX21lbXNldDMyKCh2b2lkICopKHRhcmdldCksIDAsIChzaXplX3QpKHNpemUpKQorI2RlZmluZSBNRU1DT1BZKGRlc3Qsc3JjLHNpemUpCUZYU1lTX21lbWNweTMyKCh2b2lkICopKGRlc3QpLCAoY29uc3Qgdm9pZCAqKShzcmMpLCAoc2l6ZV90KShzaXplKSkKKworI2VuZGlmCisKKy8qCisgKiBJbiBBTlNJIEMsIGFuZCBpbmRlZWQgYW55IHJhdGlvbmFsIGltcGxlbWVudGF0aW9uLCBzaXplX3QgaXMgYWxzbyB0aGUKKyAqIHR5cGUgcmV0dXJuZWQgYnkgc2l6ZW9mKCkuICBIb3dldmVyLCBpdCBzZWVtcyB0aGVyZSBhcmUgc29tZSBpcnJhdGlvbmFsCisgKiBpbXBsZW1lbnRhdGlvbnMgb3V0IHRoZXJlLCBpbiB3aGljaCBzaXplb2YoKSByZXR1cm5zIGFuIGludCBldmVuIHRob3VnaAorICogc2l6ZV90IGlzIGRlZmluZWQgYXMgbG9uZyBvciB1bnNpZ25lZCBsb25nLiAgVG8gZW5zdXJlIGNvbnNpc3RlbnQgcmVzdWx0cworICogd2UgYWx3YXlzIHVzZSB0aGlzIFNJWkVPRigpIG1hY3JvIGluIHBsYWNlIG9mIHVzaW5nIHNpemVvZigpIGRpcmVjdGx5LgorICovCisKKyNkZWZpbmUgU0laRU9GKG9iamVjdCkJKChzaXplX3QpIHNpemVvZihvYmplY3QpKQorCisvKgorICogVGhlIG1vZHVsZXMgdGhhdCB1c2UgZnJlYWQoKSBhbmQgZndyaXRlKCkgYWx3YXlzIGludm9rZSB0aGVtIHRocm91Z2gKKyAqIHRoZXNlIG1hY3Jvcy4gIE9uIHNvbWUgc3lzdGVtcyB5b3UgbWF5IG5lZWQgdG8gdHdpZGRsZSB0aGUgYXJndW1lbnQgY2FzdHMuCisgKiBDQVVUSU9OOiBhcmd1bWVudCBvcmRlciBpcyBkaWZmZXJlbnQgZnJvbSB1bmRlcmx5aW5nIGZ1bmN0aW9ucyEKKyAqLworCisjZGVmaW5lIEpGUkVBRChmaWxlLGJ1ZixzaXplb2ZidWYpICBcCisgICgoc2l6ZV90KSBGWFNZU19mcmVhZCgodm9pZCAqKSAoYnVmKSwgKHNpemVfdCkgMSwgKHNpemVfdCkgKHNpemVvZmJ1ZiksIChmaWxlKSkpCisjZGVmaW5lIEpGV1JJVEUoZmlsZSxidWYsc2l6ZW9mYnVmKSAgXAorICAoKHNpemVfdCkgRlhTWVNfZndyaXRlKChjb25zdCB2b2lkICopIChidWYpLCAoc2l6ZV90KSAxLCAoc2l6ZV90KSAoc2l6ZW9mYnVmKSwgKGZpbGUpKSkKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9qbWVtc3lzLmggYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvam1lbXN5cy5oCmluZGV4IGJhYTdiN2YuLmVmMTQ4MTUgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9qbWVtc3lzLmgKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ptZW1zeXMuaApAQCAtMSwyMDAgKzEsMjAwIEBACi0vKg0KLSAqIGptZW1zeXMuaA0KLSAqDQotICogQ29weXJpZ2h0IChDKSAxOTkyLTE5OTcsIFRob21hcyBHLiBMYW5lLg0KLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuDQotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLg0KLSAqDQotICogVGhpcyBpbmNsdWRlIGZpbGUgZGVmaW5lcyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIHN5c3RlbS1pbmRlcGVuZGVudA0KLSAqIGFuZCBzeXN0ZW0tZGVwZW5kZW50IHBvcnRpb25zIG9mIHRoZSBKUEVHIG1lbW9yeSBtYW5hZ2VyLiAgTm8gb3RoZXINCi0gKiBtb2R1bGVzIG5lZWQgaW5jbHVkZSBpdC4gIChUaGUgc3lzdGVtLWluZGVwZW5kZW50IHBvcnRpb24gaXMgam1lbW1nci5jOw0KLSAqIHRoZXJlIGFyZSBzZXZlcmFsIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgc3lzdGVtLWRlcGVuZGVudCBwb3J0aW9uLikNCi0gKg0KLSAqIFRoaXMgZmlsZSB3b3JrcyBhcy1pcyBmb3IgdGhlIHN5c3RlbS1kZXBlbmRlbnQgbWVtb3J5IG1hbmFnZXJzIHN1cHBsaWVkDQotICogaW4gdGhlIElKRyBkaXN0cmlidXRpb24uICBZb3UgbWF5IG5lZWQgdG8gbW9kaWZ5IGl0IGlmIHlvdSB3cml0ZSBhDQotICogY3VzdG9tIG1lbW9yeSBtYW5hZ2VyLiAgSWYgc3lzdGVtLWRlcGVuZGVudCBjaGFuZ2VzIGFyZSBuZWVkZWQgaW4NCi0gKiB0aGlzIGZpbGUsIHRoZSBiZXN0IG1ldGhvZCBpcyB0byAjaWZkZWYgdGhlbSBiYXNlZCBvbiBhIGNvbmZpZ3VyYXRpb24NCi0gKiBzeW1ib2wgc3VwcGxpZWQgaW4gamNvbmZpZy5oLCBhcyB3ZSBoYXZlIGRvbmUgd2l0aCBVU0VfTVNET1NfTUVNTUdSDQotICogYW5kIFVTRV9NQUNfTUVNTUdSLg0KLSAqLw0KLQ0KLQ0KLS8qIFNob3J0IGZvcm1zIG9mIGV4dGVybmFsIG5hbWVzIGZvciBzeXN0ZW1zIHdpdGggYnJhaW4tZGFtYWdlZCBsaW5rZXJzLiAqLw0KLQ0KLSNpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTDQotI2RlZmluZSBqcGVnX2dldF9zbWFsbAkJakdldFNtYWxsDQotI2RlZmluZSBqcGVnX2ZyZWVfc21hbGwJCWpGcmVlU21hbGwNCi0jZGVmaW5lIGpwZWdfZ2V0X2xhcmdlCQlqR2V0TGFyZ2UNCi0jZGVmaW5lIGpwZWdfZnJlZV9sYXJnZQkJakZyZWVMYXJnZQ0KLSNkZWZpbmUganBlZ19tZW1fYXZhaWxhYmxlCWpNZW1BdmFpbA0KLSNkZWZpbmUganBlZ19vcGVuX2JhY2tpbmdfc3RvcmUJak9wZW5CYWNrU3RvcmUNCi0jZGVmaW5lIGpwZWdfbWVtX2luaXQJCWpNZW1Jbml0DQotI2RlZmluZSBqcGVnX21lbV90ZXJtCQlqTWVtVGVybQ0KLSNlbmRpZiAvKiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTICovDQotDQotDQotLyoNCi0gKiBUaGVzZSB0d28gZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGFsbG9jYXRlIGFuZCByZWxlYXNlIHNtYWxsIGNodW5rcyBvZg0KLSAqIG1lbW9yeS4gIChUeXBpY2FsbHkgdGhlIHRvdGFsIGFtb3VudCByZXF1ZXN0ZWQgdGhyb3VnaCBqcGVnX2dldF9zbWFsbCBpcw0KLSAqIG5vIG1vcmUgdGhhbiAyMEsgb3Igc287IHRoaXMgd2lsbCBiZSByZXF1ZXN0ZWQgaW4gY2h1bmtzIG9mIGEgZmV3IEsgZWFjaC4pDQotICogQmVoYXZpb3Igc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGZvciB0aGUgc3RhbmRhcmQgbGlicmFyeSBmdW5jdGlvbnMgbWFsbG9jDQotICogYW5kIGZyZWU7IGluIHBhcnRpY3VsYXIsIGpwZWdfZ2V0X3NtYWxsIG11c3QgcmV0dXJuIE5VTEwgb24gZmFpbHVyZS4NCi0gKiBPbiBtb3N0IHN5c3RlbXMsIHRoZXNlIEFSRSBtYWxsb2MgYW5kIGZyZWUuICBqcGVnX2ZyZWVfc21hbGwgaXMgcGFzc2VkIHRoZQ0KLSAqIHNpemUgb2YgdGhlIG9iamVjdCBiZWluZyBmcmVlZCwganVzdCBpbiBjYXNlIGl0J3MgbmVlZGVkLg0KLSAqIE9uIGFuIDgweDg2IG1hY2hpbmUgdXNpbmcgc21hbGwtZGF0YSBtZW1vcnkgbW9kZWwsIHRoZXNlIG1hbmFnZSBuZWFyIGhlYXAuDQotICovDQotDQotRVhURVJOKHZvaWQgKikganBlZ19nZXRfc21hbGwgSlBQKChqX2NvbW1vbl9wdHIgY2luZm8sIHNpemVfdCBzaXplb2ZvYmplY3QpKTsNCi1FWFRFUk4odm9pZCkganBlZ19mcmVlX3NtYWxsIEpQUCgoal9jb21tb25fcHRyIGNpbmZvLCB2b2lkICogb2JqZWN0LA0KLQkJCQkgIHNpemVfdCBzaXplb2ZvYmplY3QpKTsNCi0NCi0vKg0KLSAqIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gYWxsb2NhdGUgYW5kIHJlbGVhc2UgbGFyZ2UgY2h1bmtzIG9mDQotICogbWVtb3J5ICh1cCB0byB0aGUgdG90YWwgZnJlZSBzcGFjZSBkZXNpZ25hdGVkIGJ5IGpwZWdfbWVtX2F2YWlsYWJsZSkuDQotICogVGhlIGludGVyZmFjZSBpcyB0aGUgc2FtZSBhcyBhYm92ZSwgZXhjZXB0IHRoYXQgb24gYW4gODB4ODYgbWFjaGluZSwNCi0gKiBmYXIgcG9pbnRlcnMgYXJlIHVzZWQuICBPbiBtb3N0IG90aGVyIG1hY2hpbmVzIHRoZXNlIGFyZSBpZGVudGljYWwgdG8NCi0gKiB0aGUganBlZ19nZXQvZnJlZV9zbWFsbCByb3V0aW5lczsgYnV0IHdlIGtlZXAgdGhlbSBzZXBhcmF0ZSBhbnl3YXksDQotICogaW4gY2FzZSBhIGRpZmZlcmVudCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGlzIGRlc2lyYWJsZSBmb3IgbGFyZ2UgY2h1bmtzLg0KLSAqLw0KLQ0KLUVYVEVSTih2b2lkIEZBUiAqKSBqcGVnX2dldF9sYXJnZSBKUFAoKGpfY29tbW9uX3B0ciBjaW5mbywNCi0JCQkJICAgICAgIHNpemVfdCBzaXplb2ZvYmplY3QpKTsNCi1FWFRFUk4odm9pZCkganBlZ19mcmVlX2xhcmdlIEpQUCgoal9jb21tb25fcHRyIGNpbmZvLCB2b2lkIEZBUiAqIG9iamVjdCwNCi0JCQkJICBzaXplX3Qgc2l6ZW9mb2JqZWN0KSk7DQotDQotLyoNCi0gKiBUaGUgbWFjcm8gTUFYX0FMTE9DX0NIVU5LIGRlc2lnbmF0ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgbWF5DQotICogYmUgcmVxdWVzdGVkIGluIGEgc2luZ2xlIGNhbGwgdG8ganBlZ19nZXRfbGFyZ2UgKGFuZCBqcGVnX2dldF9zbWFsbCBmb3IgdGhhdA0KLSAqIG1hdHRlciwgYnV0IHRoYXQgY2FzZSBzaG91bGQgbmV2ZXIgY29tZSBpbnRvIHBsYXkpLiAgVGhpcyBtYWNybyBpcyBuZWVkZWQNCi0gKiB0byBtb2RlbCB0aGUgNjRLYi1zZWdtZW50LXNpemUgbGltaXQgb2YgZmFyIGFkZHJlc3Npbmcgb24gODB4ODYgbWFjaGluZXMuDQotICogT24gdGhvc2UgbWFjaGluZXMsIHdlIGV4cGVjdCB0aGF0IGpjb25maWcuaCB3aWxsIHByb3ZpZGUgYSBwcm9wZXIgdmFsdWUuDQotICogT24gbWFjaGluZXMgd2l0aCAzMi1iaXQgZmxhdCBhZGRyZXNzIHNwYWNlcywgYW55IGxhcmdlIGNvbnN0YW50IG1heSBiZSB1c2VkLg0KLSAqDQotICogTkI6IGptZW1tZ3IuYyBleHBlY3RzIHRoYXQgTUFYX0FMTE9DX0NIVU5LIHdpbGwgYmUgcmVwcmVzZW50YWJsZSBhcyB0eXBlDQotICogc2l6ZV90IGFuZCB3aWxsIGJlIGEgbXVsdGlwbGUgb2Ygc2l6ZW9mKGFsaWduX3R5cGUpLg0KLSAqLw0KLQ0KLSNpZm5kZWYgTUFYX0FMTE9DX0NIVU5LCQkvKiBtYXkgYmUgb3ZlcnJpZGRlbiBpbiBqY29uZmlnLmggKi8NCi0jZGVmaW5lIE1BWF9BTExPQ19DSFVOSyAgMTAwMDAwMDAwMEwNCi0jZW5kaWYNCi0NCi0vKg0KLSAqIFRoaXMgcm91dGluZSBjb21wdXRlcyB0aGUgdG90YWwgc3BhY2Ugc3RpbGwgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uIGJ5DQotICoganBlZ19nZXRfbGFyZ2UuICBJZiBtb3JlIHNwYWNlIHRoYW4gdGhpcyBpcyBuZWVkZWQsIGJhY2tpbmcgc3RvcmUgd2lsbCBiZQ0KLSAqIHVzZWQuICBOT1RFOiBhbnkgbWVtb3J5IGFscmVhZHkgYWxsb2NhdGVkIG11c3Qgbm90IGJlIGNvdW50ZWQuDQotICoNCi0gKiBUaGVyZSBpcyBhIG1pbmltdW0gc3BhY2UgcmVxdWlyZW1lbnQsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1pbmltdW0NCi0gKiBmZWFzaWJsZSBidWZmZXIgc2l6ZXM7IGptZW1tZ3IuYyB3aWxsIHJlcXVlc3QgdGhhdCBtdWNoIHNwYWNlIGV2ZW4gaWYNCi0gKiBqcGVnX21lbV9hdmFpbGFibGUgcmV0dXJucyB6ZXJvLiAgVGhlIG1heGltdW0gc3BhY2UgbmVlZGVkLCBlbm91Z2ggdG8gaG9sZA0KLSAqIGFsbCB3b3JraW5nIHN0b3JhZ2UgaW4gbWVtb3J5LCBpcyBhbHNvIHBhc3NlZCBpbiBjYXNlIGl0IGlzIHVzZWZ1bC4NCi0gKiBGaW5hbGx5LCB0aGUgdG90YWwgc3BhY2UgYWxyZWFkeSBhbGxvY2F0ZWQgaXMgcGFzc2VkLiAgSWYgbm8gYmV0dGVyDQotICogbWV0aG9kIGlzIGF2YWlsYWJsZSwgY2luZm8tPm1lbS0+bWF4X21lbW9yeV90b191c2UgLSBhbHJlYWR5X2FsbG9jYXRlZA0KLSAqIGlzIG9mdGVuIGEgc3VpdGFibGUgY2FsY3VsYXRpb24uDQotICoNCi0gKiBJdCBpcyBPSyBmb3IganBlZ19tZW1fYXZhaWxhYmxlIHRvIHVuZGVyZXN0aW1hdGUgdGhlIHNwYWNlIGF2YWlsYWJsZQ0KLSAqICh0aGF0J2xsIGp1c3QgbGVhZCB0byBtb3JlIGJhY2tpbmctc3RvcmUgYWNjZXNzIHRoYW4gaXMgcmVhbGx5IG5lY2Vzc2FyeSkuDQotICogSG93ZXZlciwgYW4gb3ZlcmVzdGltYXRlIHdpbGwgbGVhZCB0byBmYWlsdXJlLiAgSGVuY2UgaXQncyB3aXNlIHRvIHN1YnRyYWN0DQotICogYSBzbG9wIGZhY3RvciBmcm9tIHRoZSB0cnVlIGF2YWlsYWJsZSBzcGFjZS4gIDUlIHNob3VsZCBiZSBlbm91Z2guDQotICoNCi0gKiBPbiBtYWNoaW5lcyB3aXRoIGxvdHMgb2YgdmlydHVhbCBtZW1vcnksIGFueSBsYXJnZSBjb25zdGFudCBtYXkgYmUgcmV0dXJuZWQuDQotICogQ29udmVyc2VseSwgemVybyBtYXkgYmUgcmV0dXJuZWQgdG8gYWx3YXlzIHVzZSB0aGUgbWluaW11bSBhbW91bnQgb2YgbWVtb3J5Lg0KLSAqLw0KLQ0KLUVYVEVSTihsb25nKSBqcGVnX21lbV9hdmFpbGFibGUgSlBQKChqX2NvbW1vbl9wdHIgY2luZm8sDQotCQkJCSAgICAgbG9uZyBtaW5fYnl0ZXNfbmVlZGVkLA0KLQkJCQkgICAgIGxvbmcgbWF4X2J5dGVzX25lZWRlZCwNCi0JCQkJICAgICBsb25nIGFscmVhZHlfYWxsb2NhdGVkKSk7DQotDQotDQotLyoNCi0gKiBUaGlzIHN0cnVjdHVyZSBob2xkcyB3aGF0ZXZlciBzdGF0ZSBpcyBuZWVkZWQgdG8gYWNjZXNzIGEgc2luZ2xlDQotICogYmFja2luZy1zdG9yZSBvYmplY3QuICBUaGUgcmVhZC93cml0ZS9jbG9zZSBtZXRob2QgcG9pbnRlcnMgYXJlIGNhbGxlZA0KLSAqIGJ5IGptZW1tZ3IuYyB0byBtYW5pcHVsYXRlIHRoZSBiYWNraW5nLXN0b3JlIG9iamVjdDsgYWxsIG90aGVyIGZpZWxkcw0KLSAqIGFyZSBwcml2YXRlIHRvIHRoZSBzeXN0ZW0tZGVwZW5kZW50IGJhY2tpbmcgc3RvcmUgcm91dGluZXMuDQotICovDQotDQotI2RlZmluZSBURU1QX05BTUVfTEVOR1RIICAgNjQJLyogbWF4IGxlbmd0aCBvZiBhIHRlbXBvcmFyeSBmaWxlJ3MgbmFtZSAqLw0KLQ0KLQ0KLSNpZmRlZiBVU0VfTVNET1NfTUVNTUdSCQkvKiBET1Mtc3BlY2lmaWMganVuayAqLw0KLQ0KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgWE1TSDsJLyogdHlwZSBvZiBleHRlbmRlZC1tZW1vcnkgaGFuZGxlcyAqLw0KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgRU1TSDsJLyogdHlwZSBvZiBleHBhbmRlZC1tZW1vcnkgaGFuZGxlcyAqLw0KLQ0KLXR5cGVkZWYgdW5pb24gew0KLSAgc2hvcnQgZmlsZV9oYW5kbGU7CQkvKiBET1MgZmlsZSBoYW5kbGUgaWYgaXQncyBhIHRlbXAgZmlsZSAqLw0KLSAgWE1TSCB4bXNfaGFuZGxlOwkJLyogaGFuZGxlIGlmIGl0J3MgYSBjaHVuayBvZiBYTVMgKi8NCi0gIEVNU0ggZW1zX2hhbmRsZTsJCS8qIGhhbmRsZSBpZiBpdCdzIGEgY2h1bmsgb2YgRU1TICovDQotfSBoYW5kbGVfdW5pb247DQotDQotI2VuZGlmIC8qIFVTRV9NU0RPU19NRU1NR1IgKi8NCi0NCi0jaWZkZWYgVVNFX01BQ19NRU1NR1IJCS8qIE1hYy1zcGVjaWZpYyBqdW5rICovDQotI2luY2x1ZGUgPEZpbGVzLmg+DQotI2VuZGlmIC8qIFVTRV9NQUNfTUVNTUdSICovDQotDQotDQotdHlwZWRlZiBzdHJ1Y3QgYmFja2luZ19zdG9yZV9zdHJ1Y3QgKiBiYWNraW5nX3N0b3JlX3B0cjsNCi0NCi10eXBlZGVmIHN0cnVjdCBiYWNraW5nX3N0b3JlX3N0cnVjdCB7DQotICAvKiBNZXRob2RzIGZvciByZWFkaW5nL3dyaXRpbmcvY2xvc2luZyB0aGlzIGJhY2tpbmctc3RvcmUgb2JqZWN0ICovDQotICBKTUVUSE9EKHZvaWQsIHJlYWRfYmFja2luZ19zdG9yZSwgKGpfY29tbW9uX3B0ciBjaW5mbywNCi0JCQkJICAgICBiYWNraW5nX3N0b3JlX3B0ciBpbmZvLA0KLQkJCQkgICAgIHZvaWQgRkFSICogYnVmZmVyX2FkZHJlc3MsDQotCQkJCSAgICAgbG9uZyBmaWxlX29mZnNldCwgbG9uZyBieXRlX2NvdW50KSk7DQotICBKTUVUSE9EKHZvaWQsIHdyaXRlX2JhY2tpbmdfc3RvcmUsIChqX2NvbW1vbl9wdHIgY2luZm8sDQotCQkJCSAgICAgIGJhY2tpbmdfc3RvcmVfcHRyIGluZm8sDQotCQkJCSAgICAgIHZvaWQgRkFSICogYnVmZmVyX2FkZHJlc3MsDQotCQkJCSAgICAgIGxvbmcgZmlsZV9vZmZzZXQsIGxvbmcgYnl0ZV9jb3VudCkpOw0KLSAgSk1FVEhPRCh2b2lkLCBjbG9zZV9iYWNraW5nX3N0b3JlLCAoal9jb21tb25fcHRyIGNpbmZvLA0KLQkJCQkgICAgICBiYWNraW5nX3N0b3JlX3B0ciBpbmZvKSk7DQotDQotICAvKiBQcml2YXRlIGZpZWxkcyBmb3Igc3lzdGVtLWRlcGVuZGVudCBiYWNraW5nLXN0b3JlIG1hbmFnZW1lbnQgKi8NCi0jaWZkZWYgVVNFX01TRE9TX01FTU1HUg0KLSAgLyogRm9yIHRoZSBNUy1ET1MgbWFuYWdlciAoam1lbWRvcy5jKSwgd2UgbmVlZDogKi8NCi0gIGhhbmRsZV91bmlvbiBoYW5kbGU7CQkvKiByZWZlcmVuY2UgdG8gYmFja2luZy1zdG9yZSBzdG9yYWdlIG9iamVjdCAqLw0KLSAgY2hhciB0ZW1wX25hbWVbVEVNUF9OQU1FX0xFTkdUSF07IC8qIG5hbWUgaWYgaXQncyBhIGZpbGUgKi8NCi0jZWxzZQ0KLSNpZmRlZiBVU0VfTUFDX01FTU1HUg0KLSAgLyogRm9yIHRoZSBNYWMgbWFuYWdlciAoam1lbW1hYy5jKSwgd2UgbmVlZDogKi8NCi0gIHNob3J0IHRlbXBfZmlsZTsJCS8qIGZpbGUgcmVmZXJlbmNlIG51bWJlciB0byB0ZW1wIGZpbGUgKi8NCi0gIEZTU3BlYyB0ZW1wU3BlYzsJCS8qIHRoZSBGU1NwZWMgZm9yIHRoZSB0ZW1wIGZpbGUgKi8NCi0gIGNoYXIgdGVtcF9uYW1lW1RFTVBfTkFNRV9MRU5HVEhdOyAvKiBuYW1lIGlmIGl0J3MgYSBmaWxlICovDQotI2Vsc2UNCi0gIC8qIEZvciBhIHR5cGljYWwgaW1wbGVtZW50YXRpb24gd2l0aCB0ZW1wIGZpbGVzLCB3ZSBuZWVkOiAqLw0KLSNpZm5kZWYgX0ZQREZBUElfTUlOSV8NCi0gIEZYU1lTX0ZJTEUgKiB0ZW1wX2ZpbGU7CQkvKiBzdGRpbyByZWZlcmVuY2UgdG8gdGVtcCBmaWxlICovDQotICBjaGFyIHRlbXBfbmFtZVtURU1QX05BTUVfTEVOR1RIXTsgLyogbmFtZSBvZiB0ZW1wIGZpbGUgKi8NCi0jZW5kaWYNCi0jZW5kaWYNCi0jZW5kaWYNCi19IGJhY2tpbmdfc3RvcmVfaW5mbzsNCi0NCi0NCi0vKg0KLSAqIEluaXRpYWwgb3BlbmluZyBvZiBhIGJhY2tpbmctc3RvcmUgb2JqZWN0LiAgVGhpcyBtdXN0IGZpbGwgaW4gdGhlDQotICogcmVhZC93cml0ZS9jbG9zZSBwb2ludGVycyBpbiB0aGUgb2JqZWN0LiAgVGhlIHJlYWQvd3JpdGUgcm91dGluZXMNCi0gKiBtYXkgdGFrZSBhbiBlcnJvciBleGl0IGlmIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBmaWxlIHNpemUgaXMgZXhjZWVkZWQuDQotICogKElmIGpwZWdfbWVtX2F2YWlsYWJsZSBhbHdheXMgcmV0dXJucyBhIGxhcmdlIHZhbHVlLCB0aGlzIHJvdXRpbmUgY2FuDQotICoganVzdCB0YWtlIGFuIGVycm9yIGV4aXQuKQ0KLSAqLw0KLQ0KLUVYVEVSTih2b2lkKSBqcGVnX29wZW5fYmFja2luZ19zdG9yZSBKUFAoKGpfY29tbW9uX3B0ciBjaW5mbywNCi0JCQkJCSAgYmFja2luZ19zdG9yZV9wdHIgaW5mbywNCi0JCQkJCSAgbG9uZyB0b3RhbF9ieXRlc19uZWVkZWQpKTsNCi0NCi0NCi0vKg0KLSAqIFRoZXNlIHJvdXRpbmVzIHRha2UgY2FyZSBvZiBhbnkgc3lzdGVtLWRlcGVuZGVudCBpbml0aWFsaXphdGlvbiBhbmQNCi0gKiBjbGVhbnVwIHJlcXVpcmVkLiAganBlZ19tZW1faW5pdCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgYW55dGhpbmcgaXMNCi0gKiBhbGxvY2F0ZWQgKGFuZCwgdGhlcmVmb3JlLCBub3RoaW5nIGluIGNpbmZvIGlzIG9mIHVzZSBleGNlcHQgdGhlIGVycm9yDQotICogbWFuYWdlciBwb2ludGVyKS4gIEl0IHNob3VsZCByZXR1cm4gYSBzdWl0YWJsZSBkZWZhdWx0IHZhbHVlIGZvcg0KLSAqIG1heF9tZW1vcnlfdG9fdXNlOyB0aGlzIG1heSBzdWJzZXF1ZW50bHkgYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3Vycm91bmRpbmcNCi0gKiBhcHBsaWNhdGlvbi4gIChOb3RlIHRoYXQgbWF4X21lbW9yeV90b191c2UgaXMgb25seSBpbXBvcnRhbnQgaWYNCi0gKiBqcGVnX21lbV9hdmFpbGFibGUgY2hvb3NlcyB0byBjb25zdWx0IGl0IC4uLiBubyBvbmUgZWxzZSB3aWxsLikNCi0gKiBqcGVnX21lbV90ZXJtIG1heSBhc3N1bWUgdGhhdCBhbGwgcmVxdWVzdGVkIG1lbW9yeSBoYXMgYmVlbiBmcmVlZCBhbmQgdGhhdA0KLSAqIGFsbCBvcGVuZWQgYmFja2luZy1zdG9yZSBvYmplY3RzIGhhdmUgYmVlbiBjbG9zZWQuDQotICovDQotDQotRVhURVJOKGxvbmcpIGpwZWdfbWVtX2luaXQgSlBQKChqX2NvbW1vbl9wdHIgY2luZm8pKTsNCi1FWFRFUk4odm9pZCkganBlZ19tZW1fdGVybSBKUFAoKGpfY29tbW9uX3B0ciBjaW5mbykpOw0KKy8qCisgKiBqbWVtc3lzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTItMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgaW5jbHVkZSBmaWxlIGRlZmluZXMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBzeXN0ZW0taW5kZXBlbmRlbnQKKyAqIGFuZCBzeXN0ZW0tZGVwZW5kZW50IHBvcnRpb25zIG9mIHRoZSBKUEVHIG1lbW9yeSBtYW5hZ2VyLiAgTm8gb3RoZXIKKyAqIG1vZHVsZXMgbmVlZCBpbmNsdWRlIGl0LiAgKFRoZSBzeXN0ZW0taW5kZXBlbmRlbnQgcG9ydGlvbiBpcyBqbWVtbWdyLmM7CisgKiB0aGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIHN5c3RlbS1kZXBlbmRlbnQgcG9ydGlvbi4pCisgKgorICogVGhpcyBmaWxlIHdvcmtzIGFzLWlzIGZvciB0aGUgc3lzdGVtLWRlcGVuZGVudCBtZW1vcnkgbWFuYWdlcnMgc3VwcGxpZWQKKyAqIGluIHRoZSBJSkcgZGlzdHJpYnV0aW9uLiAgWW91IG1heSBuZWVkIHRvIG1vZGlmeSBpdCBpZiB5b3Ugd3JpdGUgYQorICogY3VzdG9tIG1lbW9yeSBtYW5hZ2VyLiAgSWYgc3lzdGVtLWRlcGVuZGVudCBjaGFuZ2VzIGFyZSBuZWVkZWQgaW4KKyAqIHRoaXMgZmlsZSwgdGhlIGJlc3QgbWV0aG9kIGlzIHRvICNpZmRlZiB0aGVtIGJhc2VkIG9uIGEgY29uZmlndXJhdGlvbgorICogc3ltYm9sIHN1cHBsaWVkIGluIGpjb25maWcuaCwgYXMgd2UgaGF2ZSBkb25lIHdpdGggVVNFX01TRE9TX01FTU1HUgorICogYW5kIFVTRV9NQUNfTUVNTUdSLgorICovCisKKworLyogU2hvcnQgZm9ybXMgb2YgZXh0ZXJuYWwgbmFtZXMgZm9yIHN5c3RlbXMgd2l0aCBicmFpbi1kYW1hZ2VkIGxpbmtlcnMuICovCisKKyNpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCisjZGVmaW5lIGpwZWdfZ2V0X3NtYWxsCQlqR2V0U21hbGwKKyNkZWZpbmUganBlZ19mcmVlX3NtYWxsCQlqRnJlZVNtYWxsCisjZGVmaW5lIGpwZWdfZ2V0X2xhcmdlCQlqR2V0TGFyZ2UKKyNkZWZpbmUganBlZ19mcmVlX2xhcmdlCQlqRnJlZUxhcmdlCisjZGVmaW5lIGpwZWdfbWVtX2F2YWlsYWJsZQlqTWVtQXZhaWwKKyNkZWZpbmUganBlZ19vcGVuX2JhY2tpbmdfc3RvcmUJak9wZW5CYWNrU3RvcmUKKyNkZWZpbmUganBlZ19tZW1faW5pdAkJak1lbUluaXQKKyNkZWZpbmUganBlZ19tZW1fdGVybQkJak1lbVRlcm0KKyNlbmRpZiAvKiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTICovCisKKworLyoKKyAqIFRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gYWxsb2NhdGUgYW5kIHJlbGVhc2Ugc21hbGwgY2h1bmtzIG9mCisgKiBtZW1vcnkuICAoVHlwaWNhbGx5IHRoZSB0b3RhbCBhbW91bnQgcmVxdWVzdGVkIHRocm91Z2gganBlZ19nZXRfc21hbGwgaXMKKyAqIG5vIG1vcmUgdGhhbiAyMEsgb3Igc287IHRoaXMgd2lsbCBiZSByZXF1ZXN0ZWQgaW4gY2h1bmtzIG9mIGEgZmV3IEsgZWFjaC4pCisgKiBCZWhhdmlvciBzaG91bGQgYmUgdGhlIHNhbWUgYXMgZm9yIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGZ1bmN0aW9ucyBtYWxsb2MKKyAqIGFuZCBmcmVlOyBpbiBwYXJ0aWN1bGFyLCBqcGVnX2dldF9zbWFsbCBtdXN0IHJldHVybiBOVUxMIG9uIGZhaWx1cmUuCisgKiBPbiBtb3N0IHN5c3RlbXMsIHRoZXNlIEFSRSBtYWxsb2MgYW5kIGZyZWUuICBqcGVnX2ZyZWVfc21hbGwgaXMgcGFzc2VkIHRoZQorICogc2l6ZSBvZiB0aGUgb2JqZWN0IGJlaW5nIGZyZWVkLCBqdXN0IGluIGNhc2UgaXQncyBuZWVkZWQuCisgKiBPbiBhbiA4MHg4NiBtYWNoaW5lIHVzaW5nIHNtYWxsLWRhdGEgbWVtb3J5IG1vZGVsLCB0aGVzZSBtYW5hZ2UgbmVhciBoZWFwLgorICovCisKK0VYVEVSTih2b2lkICopIGpwZWdfZ2V0X3NtYWxsIEpQUCgoal9jb21tb25fcHRyIGNpbmZvLCBzaXplX3Qgc2l6ZW9mb2JqZWN0KSk7CitFWFRFUk4odm9pZCkganBlZ19mcmVlX3NtYWxsIEpQUCgoal9jb21tb25fcHRyIGNpbmZvLCB2b2lkICogb2JqZWN0LAorCQkJCSAgc2l6ZV90IHNpemVvZm9iamVjdCkpOworCisvKgorICogVGhlc2UgdHdvIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBhbGxvY2F0ZSBhbmQgcmVsZWFzZSBsYXJnZSBjaHVua3Mgb2YKKyAqIG1lbW9yeSAodXAgdG8gdGhlIHRvdGFsIGZyZWUgc3BhY2UgZGVzaWduYXRlZCBieSBqcGVnX21lbV9hdmFpbGFibGUpLgorICogVGhlIGludGVyZmFjZSBpcyB0aGUgc2FtZSBhcyBhYm92ZSwgZXhjZXB0IHRoYXQgb24gYW4gODB4ODYgbWFjaGluZSwKKyAqIGZhciBwb2ludGVycyBhcmUgdXNlZC4gIE9uIG1vc3Qgb3RoZXIgbWFjaGluZXMgdGhlc2UgYXJlIGlkZW50aWNhbCB0bworICogdGhlIGpwZWdfZ2V0L2ZyZWVfc21hbGwgcm91dGluZXM7IGJ1dCB3ZSBrZWVwIHRoZW0gc2VwYXJhdGUgYW55d2F5LAorICogaW4gY2FzZSBhIGRpZmZlcmVudCBhbGxvY2F0aW9uIHN0cmF0ZWd5IGlzIGRlc2lyYWJsZSBmb3IgbGFyZ2UgY2h1bmtzLgorICovCisKK0VYVEVSTih2b2lkIEZBUiAqKSBqcGVnX2dldF9sYXJnZSBKUFAoKGpfY29tbW9uX3B0ciBjaW5mbywKKwkJCQkgICAgICAgc2l6ZV90IHNpemVvZm9iamVjdCkpOworRVhURVJOKHZvaWQpIGpwZWdfZnJlZV9sYXJnZSBKUFAoKGpfY29tbW9uX3B0ciBjaW5mbywgdm9pZCBGQVIgKiBvYmplY3QsCisJCQkJICBzaXplX3Qgc2l6ZW9mb2JqZWN0KSk7CisKKy8qCisgKiBUaGUgbWFjcm8gTUFYX0FMTE9DX0NIVU5LIGRlc2lnbmF0ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgbWF5CisgKiBiZSByZXF1ZXN0ZWQgaW4gYSBzaW5nbGUgY2FsbCB0byBqcGVnX2dldF9sYXJnZSAoYW5kIGpwZWdfZ2V0X3NtYWxsIGZvciB0aGF0CisgKiBtYXR0ZXIsIGJ1dCB0aGF0IGNhc2Ugc2hvdWxkIG5ldmVyIGNvbWUgaW50byBwbGF5KS4gIFRoaXMgbWFjcm8gaXMgbmVlZGVkCisgKiB0byBtb2RlbCB0aGUgNjRLYi1zZWdtZW50LXNpemUgbGltaXQgb2YgZmFyIGFkZHJlc3Npbmcgb24gODB4ODYgbWFjaGluZXMuCisgKiBPbiB0aG9zZSBtYWNoaW5lcywgd2UgZXhwZWN0IHRoYXQgamNvbmZpZy5oIHdpbGwgcHJvdmlkZSBhIHByb3BlciB2YWx1ZS4KKyAqIE9uIG1hY2hpbmVzIHdpdGggMzItYml0IGZsYXQgYWRkcmVzcyBzcGFjZXMsIGFueSBsYXJnZSBjb25zdGFudCBtYXkgYmUgdXNlZC4KKyAqCisgKiBOQjogam1lbW1nci5jIGV4cGVjdHMgdGhhdCBNQVhfQUxMT0NfQ0hVTksgd2lsbCBiZSByZXByZXNlbnRhYmxlIGFzIHR5cGUKKyAqIHNpemVfdCBhbmQgd2lsbCBiZSBhIG11bHRpcGxlIG9mIHNpemVvZihhbGlnbl90eXBlKS4KKyAqLworCisjaWZuZGVmIE1BWF9BTExPQ19DSFVOSwkJLyogbWF5IGJlIG92ZXJyaWRkZW4gaW4gamNvbmZpZy5oICovCisjZGVmaW5lIE1BWF9BTExPQ19DSFVOSyAgMTAwMDAwMDAwMEwKKyNlbmRpZgorCisvKgorICogVGhpcyByb3V0aW5lIGNvbXB1dGVzIHRoZSB0b3RhbCBzcGFjZSBzdGlsbCBhdmFpbGFibGUgZm9yIGFsbG9jYXRpb24gYnkKKyAqIGpwZWdfZ2V0X2xhcmdlLiAgSWYgbW9yZSBzcGFjZSB0aGFuIHRoaXMgaXMgbmVlZGVkLCBiYWNraW5nIHN0b3JlIHdpbGwgYmUKKyAqIHVzZWQuICBOT1RFOiBhbnkgbWVtb3J5IGFscmVhZHkgYWxsb2NhdGVkIG11c3Qgbm90IGJlIGNvdW50ZWQuCisgKgorICogVGhlcmUgaXMgYSBtaW5pbXVtIHNwYWNlIHJlcXVpcmVtZW50LCBjb3JyZXNwb25kaW5nIHRvIHRoZSBtaW5pbXVtCisgKiBmZWFzaWJsZSBidWZmZXIgc2l6ZXM7IGptZW1tZ3IuYyB3aWxsIHJlcXVlc3QgdGhhdCBtdWNoIHNwYWNlIGV2ZW4gaWYKKyAqIGpwZWdfbWVtX2F2YWlsYWJsZSByZXR1cm5zIHplcm8uICBUaGUgbWF4aW11bSBzcGFjZSBuZWVkZWQsIGVub3VnaCB0byBob2xkCisgKiBhbGwgd29ya2luZyBzdG9yYWdlIGluIG1lbW9yeSwgaXMgYWxzbyBwYXNzZWQgaW4gY2FzZSBpdCBpcyB1c2VmdWwuCisgKiBGaW5hbGx5LCB0aGUgdG90YWwgc3BhY2UgYWxyZWFkeSBhbGxvY2F0ZWQgaXMgcGFzc2VkLiAgSWYgbm8gYmV0dGVyCisgKiBtZXRob2QgaXMgYXZhaWxhYmxlLCBjaW5mby0+bWVtLT5tYXhfbWVtb3J5X3RvX3VzZSAtIGFscmVhZHlfYWxsb2NhdGVkCisgKiBpcyBvZnRlbiBhIHN1aXRhYmxlIGNhbGN1bGF0aW9uLgorICoKKyAqIEl0IGlzIE9LIGZvciBqcGVnX21lbV9hdmFpbGFibGUgdG8gdW5kZXJlc3RpbWF0ZSB0aGUgc3BhY2UgYXZhaWxhYmxlCisgKiAodGhhdCdsbCBqdXN0IGxlYWQgdG8gbW9yZSBiYWNraW5nLXN0b3JlIGFjY2VzcyB0aGFuIGlzIHJlYWxseSBuZWNlc3NhcnkpLgorICogSG93ZXZlciwgYW4gb3ZlcmVzdGltYXRlIHdpbGwgbGVhZCB0byBmYWlsdXJlLiAgSGVuY2UgaXQncyB3aXNlIHRvIHN1YnRyYWN0CisgKiBhIHNsb3AgZmFjdG9yIGZyb20gdGhlIHRydWUgYXZhaWxhYmxlIHNwYWNlLiAgNSUgc2hvdWxkIGJlIGVub3VnaC4KKyAqCisgKiBPbiBtYWNoaW5lcyB3aXRoIGxvdHMgb2YgdmlydHVhbCBtZW1vcnksIGFueSBsYXJnZSBjb25zdGFudCBtYXkgYmUgcmV0dXJuZWQuCisgKiBDb252ZXJzZWx5LCB6ZXJvIG1heSBiZSByZXR1cm5lZCB0byBhbHdheXMgdXNlIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBtZW1vcnkuCisgKi8KKworRVhURVJOKGxvbmcpIGpwZWdfbWVtX2F2YWlsYWJsZSBKUFAoKGpfY29tbW9uX3B0ciBjaW5mbywKKwkJCQkgICAgIGxvbmcgbWluX2J5dGVzX25lZWRlZCwKKwkJCQkgICAgIGxvbmcgbWF4X2J5dGVzX25lZWRlZCwKKwkJCQkgICAgIGxvbmcgYWxyZWFkeV9hbGxvY2F0ZWQpKTsKKworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgd2hhdGV2ZXIgc3RhdGUgaXMgbmVlZGVkIHRvIGFjY2VzcyBhIHNpbmdsZQorICogYmFja2luZy1zdG9yZSBvYmplY3QuICBUaGUgcmVhZC93cml0ZS9jbG9zZSBtZXRob2QgcG9pbnRlcnMgYXJlIGNhbGxlZAorICogYnkgam1lbW1nci5jIHRvIG1hbmlwdWxhdGUgdGhlIGJhY2tpbmctc3RvcmUgb2JqZWN0OyBhbGwgb3RoZXIgZmllbGRzCisgKiBhcmUgcHJpdmF0ZSB0byB0aGUgc3lzdGVtLWRlcGVuZGVudCBiYWNraW5nIHN0b3JlIHJvdXRpbmVzLgorICovCisKKyNkZWZpbmUgVEVNUF9OQU1FX0xFTkdUSCAgIDY0CS8qIG1heCBsZW5ndGggb2YgYSB0ZW1wb3JhcnkgZmlsZSdzIG5hbWUgKi8KKworCisjaWZkZWYgVVNFX01TRE9TX01FTU1HUgkJLyogRE9TLXNwZWNpZmljIGp1bmsgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBYTVNIOwkvKiB0eXBlIG9mIGV4dGVuZGVkLW1lbW9yeSBoYW5kbGVzICovCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IEVNU0g7CS8qIHR5cGUgb2YgZXhwYW5kZWQtbWVtb3J5IGhhbmRsZXMgKi8KKwordHlwZWRlZiB1bmlvbiB7CisgIHNob3J0IGZpbGVfaGFuZGxlOwkJLyogRE9TIGZpbGUgaGFuZGxlIGlmIGl0J3MgYSB0ZW1wIGZpbGUgKi8KKyAgWE1TSCB4bXNfaGFuZGxlOwkJLyogaGFuZGxlIGlmIGl0J3MgYSBjaHVuayBvZiBYTVMgKi8KKyAgRU1TSCBlbXNfaGFuZGxlOwkJLyogaGFuZGxlIGlmIGl0J3MgYSBjaHVuayBvZiBFTVMgKi8KK30gaGFuZGxlX3VuaW9uOworCisjZW5kaWYgLyogVVNFX01TRE9TX01FTU1HUiAqLworCisjaWZkZWYgVVNFX01BQ19NRU1NR1IJCS8qIE1hYy1zcGVjaWZpYyBqdW5rICovCisjaW5jbHVkZSA8RmlsZXMuaD4KKyNlbmRpZiAvKiBVU0VfTUFDX01FTU1HUiAqLworCisKK3R5cGVkZWYgc3RydWN0IGJhY2tpbmdfc3RvcmVfc3RydWN0ICogYmFja2luZ19zdG9yZV9wdHI7CisKK3R5cGVkZWYgc3RydWN0IGJhY2tpbmdfc3RvcmVfc3RydWN0IHsKKyAgLyogTWV0aG9kcyBmb3IgcmVhZGluZy93cml0aW5nL2Nsb3NpbmcgdGhpcyBiYWNraW5nLXN0b3JlIG9iamVjdCAqLworICBKTUVUSE9EKHZvaWQsIHJlYWRfYmFja2luZ19zdG9yZSwgKGpfY29tbW9uX3B0ciBjaW5mbywKKwkJCQkgICAgIGJhY2tpbmdfc3RvcmVfcHRyIGluZm8sCisJCQkJICAgICB2b2lkIEZBUiAqIGJ1ZmZlcl9hZGRyZXNzLAorCQkJCSAgICAgbG9uZyBmaWxlX29mZnNldCwgbG9uZyBieXRlX2NvdW50KSk7CisgIEpNRVRIT0Qodm9pZCwgd3JpdGVfYmFja2luZ19zdG9yZSwgKGpfY29tbW9uX3B0ciBjaW5mbywKKwkJCQkgICAgICBiYWNraW5nX3N0b3JlX3B0ciBpbmZvLAorCQkJCSAgICAgIHZvaWQgRkFSICogYnVmZmVyX2FkZHJlc3MsCisJCQkJICAgICAgbG9uZyBmaWxlX29mZnNldCwgbG9uZyBieXRlX2NvdW50KSk7CisgIEpNRVRIT0Qodm9pZCwgY2xvc2VfYmFja2luZ19zdG9yZSwgKGpfY29tbW9uX3B0ciBjaW5mbywKKwkJCQkgICAgICBiYWNraW5nX3N0b3JlX3B0ciBpbmZvKSk7CisKKyAgLyogUHJpdmF0ZSBmaWVsZHMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgYmFja2luZy1zdG9yZSBtYW5hZ2VtZW50ICovCisjaWZkZWYgVVNFX01TRE9TX01FTU1HUgorICAvKiBGb3IgdGhlIE1TLURPUyBtYW5hZ2VyIChqbWVtZG9zLmMpLCB3ZSBuZWVkOiAqLworICBoYW5kbGVfdW5pb24gaGFuZGxlOwkJLyogcmVmZXJlbmNlIHRvIGJhY2tpbmctc3RvcmUgc3RvcmFnZSBvYmplY3QgKi8KKyAgY2hhciB0ZW1wX25hbWVbVEVNUF9OQU1FX0xFTkdUSF07IC8qIG5hbWUgaWYgaXQncyBhIGZpbGUgKi8KKyNlbHNlCisjaWZkZWYgVVNFX01BQ19NRU1NR1IKKyAgLyogRm9yIHRoZSBNYWMgbWFuYWdlciAoam1lbW1hYy5jKSwgd2UgbmVlZDogKi8KKyAgc2hvcnQgdGVtcF9maWxlOwkJLyogZmlsZSByZWZlcmVuY2UgbnVtYmVyIHRvIHRlbXAgZmlsZSAqLworICBGU1NwZWMgdGVtcFNwZWM7CQkvKiB0aGUgRlNTcGVjIGZvciB0aGUgdGVtcCBmaWxlICovCisgIGNoYXIgdGVtcF9uYW1lW1RFTVBfTkFNRV9MRU5HVEhdOyAvKiBuYW1lIGlmIGl0J3MgYSBmaWxlICovCisjZWxzZQorICAvKiBGb3IgYSB0eXBpY2FsIGltcGxlbWVudGF0aW9uIHdpdGggdGVtcCBmaWxlcywgd2UgbmVlZDogKi8KKyNpZm5kZWYgX0ZQREZBUElfTUlOSV8KKyAgRlhTWVNfRklMRSAqIHRlbXBfZmlsZTsJCS8qIHN0ZGlvIHJlZmVyZW5jZSB0byB0ZW1wIGZpbGUgKi8KKyAgY2hhciB0ZW1wX25hbWVbVEVNUF9OQU1FX0xFTkdUSF07IC8qIG5hbWUgb2YgdGVtcCBmaWxlICovCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCit9IGJhY2tpbmdfc3RvcmVfaW5mbzsKKworCisvKgorICogSW5pdGlhbCBvcGVuaW5nIG9mIGEgYmFja2luZy1zdG9yZSBvYmplY3QuICBUaGlzIG11c3QgZmlsbCBpbiB0aGUKKyAqIHJlYWQvd3JpdGUvY2xvc2UgcG9pbnRlcnMgaW4gdGhlIG9iamVjdC4gIFRoZSByZWFkL3dyaXRlIHJvdXRpbmVzCisgKiBtYXkgdGFrZSBhbiBlcnJvciBleGl0IGlmIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBmaWxlIHNpemUgaXMgZXhjZWVkZWQuCisgKiAoSWYganBlZ19tZW1fYXZhaWxhYmxlIGFsd2F5cyByZXR1cm5zIGEgbGFyZ2UgdmFsdWUsIHRoaXMgcm91dGluZSBjYW4KKyAqIGp1c3QgdGFrZSBhbiBlcnJvciBleGl0LikKKyAqLworCitFWFRFUk4odm9pZCkganBlZ19vcGVuX2JhY2tpbmdfc3RvcmUgSlBQKChqX2NvbW1vbl9wdHIgY2luZm8sCisJCQkJCSAgYmFja2luZ19zdG9yZV9wdHIgaW5mbywKKwkJCQkJICBsb25nIHRvdGFsX2J5dGVzX25lZWRlZCkpOworCisKKy8qCisgKiBUaGVzZSByb3V0aW5lcyB0YWtlIGNhcmUgb2YgYW55IHN5c3RlbS1kZXBlbmRlbnQgaW5pdGlhbGl6YXRpb24gYW5kCisgKiBjbGVhbnVwIHJlcXVpcmVkLiAganBlZ19tZW1faW5pdCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgYW55dGhpbmcgaXMKKyAqIGFsbG9jYXRlZCAoYW5kLCB0aGVyZWZvcmUsIG5vdGhpbmcgaW4gY2luZm8gaXMgb2YgdXNlIGV4Y2VwdCB0aGUgZXJyb3IKKyAqIG1hbmFnZXIgcG9pbnRlcikuICBJdCBzaG91bGQgcmV0dXJuIGEgc3VpdGFibGUgZGVmYXVsdCB2YWx1ZSBmb3IKKyAqIG1heF9tZW1vcnlfdG9fdXNlOyB0aGlzIG1heSBzdWJzZXF1ZW50bHkgYmUgb3ZlcnJpZGRlbiBieSB0aGUgc3Vycm91bmRpbmcKKyAqIGFwcGxpY2F0aW9uLiAgKE5vdGUgdGhhdCBtYXhfbWVtb3J5X3RvX3VzZSBpcyBvbmx5IGltcG9ydGFudCBpZgorICoganBlZ19tZW1fYXZhaWxhYmxlIGNob29zZXMgdG8gY29uc3VsdCBpdCAuLi4gbm8gb25lIGVsc2Ugd2lsbC4pCisgKiBqcGVnX21lbV90ZXJtIG1heSBhc3N1bWUgdGhhdCBhbGwgcmVxdWVzdGVkIG1lbW9yeSBoYXMgYmVlbiBmcmVlZCBhbmQgdGhhdAorICogYWxsIG9wZW5lZCBiYWNraW5nLXN0b3JlIG9iamVjdHMgaGF2ZSBiZWVuIGNsb3NlZC4KKyAqLworCitFWFRFUk4obG9uZykganBlZ19tZW1faW5pdCBKUFAoKGpfY29tbW9uX3B0ciBjaW5mbykpOworRVhURVJOKHZvaWQpIGpwZWdfbWVtX3Rlcm0gSlBQKChqX2NvbW1vbl9wdHIgY2luZm8pKTsKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9qbW9yZWNmZy5oIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ptb3JlY2ZnLmgKaW5kZXggMzYwMjExNC4uODhkMjEwOSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ptb3JlY2ZnLmgKKysrIGIvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2ptb3JlY2ZnLmgKQEAgLTEsMzc2ICsxLDM3NiBAQAotLyoNCi0gKiBqbW9yZWNmZy5oDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4NCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuDQotICoNCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBjdXN0b21pemUgdGhlDQotICogSlBFRyBzb2Z0d2FyZSBmb3Igc3BlY2lhbCBhcHBsaWNhdGlvbnMgb3Igc3VwcG9ydCBtYWNoaW5lLWRlcGVuZGVudA0KLSAqIG9wdGltaXphdGlvbnMuICBNb3N0IHVzZXJzIHdpbGwgbm90IG5lZWQgdG8gdG91Y2ggdGhpcyBmaWxlLg0KLSAqLw0KLQ0KLSNpZmRlZiBfTVNDX1ZFUg0KLSNwcmFnbWEgd2FybmluZyAoZGlzYWJsZSA6IDQxNDIpDQotI2VuZGlmDQotDQotLyoNCi0gKiBEZWZpbmUgQklUU19JTl9KU0FNUExFIGFzIGVpdGhlcg0KLSAqICAgOCAgIGZvciA4LWJpdCBzYW1wbGUgdmFsdWVzICh0aGUgdXN1YWwgc2V0dGluZykNCi0gKiAgIDEyICBmb3IgMTItYml0IHNhbXBsZSB2YWx1ZXMNCi0gKiBPbmx5IDggYW5kIDEyIGFyZSBsZWdhbCBkYXRhIHByZWNpc2lvbnMgZm9yIGxvc3N5IEpQRUcgYWNjb3JkaW5nIHRvIHRoZQ0KLSAqIEpQRUcgc3RhbmRhcmQsIGFuZCB0aGUgSUpHIGNvZGUgZG9lcyBub3Qgc3VwcG9ydCBhbnl0aGluZyBlbHNlIQ0KLSAqIFdlIGRvIG5vdCBzdXBwb3J0IHJ1bi10aW1lIHNlbGVjdGlvbiBvZiBkYXRhIHByZWNpc2lvbiwgc29ycnkuDQotICovDQotDQotI2RlZmluZSBCSVRTX0lOX0pTQU1QTEUgIDgJLyogdXNlIDggb3IgMTIgKi8NCi0NCi0NCi0vKg0KLSAqIE1heGltdW0gbnVtYmVyIG9mIGNvbXBvbmVudHMgKGNvbG9yIGNoYW5uZWxzKSBhbGxvd2VkIGluIEpQRUcgaW1hZ2UuDQotICogVG8gbWVldCB0aGUgbGV0dGVyIG9mIHRoZSBKUEVHIHNwZWMsIHNldCB0aGlzIHRvIDI1NS4gIEhvd2V2ZXIsIGRhcm4NCi0gKiBmZXcgYXBwbGljYXRpb25zIG5lZWQgbW9yZSB0aGFuIDQgY2hhbm5lbHMgKG1heWJlIDUgZm9yIENNWUsgKyBhbHBoYQ0KLSAqIG1hc2spLiAgV2UgcmVjb21tZW5kIDEwIGFzIGEgcmVhc29uYWJsZSBjb21wcm9taXNlOyB1c2UgNCBpZiB5b3UgYXJlDQotICogcmVhbGx5IHNob3J0IG9uIG1lbW9yeS4gIChFYWNoIGFsbG93ZWQgY29tcG9uZW50IGNvc3RzIGEgaHVuZHJlZCBvciBzbw0KLSAqIGJ5dGVzIG9mIHN0b3JhZ2UsIHdoZXRoZXIgYWN0dWFsbHkgdXNlZCBpbiBhbiBpbWFnZSBvciBub3QuKQ0KLSAqLw0KLQ0KLSNkZWZpbmUgTUFYX0NPTVBPTkVOVFMgIDEwCS8qIG1heGltdW0gbnVtYmVyIG9mIGltYWdlIGNvbXBvbmVudHMgKi8NCi0NCi0NCi0vKg0KLSAqIEJhc2ljIGRhdGEgdHlwZXMuDQotICogWW91IG1heSBuZWVkIHRvIGNoYW5nZSB0aGVzZSBpZiB5b3UgaGF2ZSBhIG1hY2hpbmUgd2l0aCB1bnVzdWFsIGRhdGENCi0gKiB0eXBlIHNpemVzOyBmb3IgZXhhbXBsZSwgImNoYXIiIG5vdCA4IGJpdHMsICJzaG9ydCIgbm90IDE2IGJpdHMsDQotICogb3IgImxvbmciIG5vdCAzMiBiaXRzLiAgV2UgZG9uJ3QgY2FyZSB3aGV0aGVyICJpbnQiIGlzIDE2IG9yIDMyIGJpdHMsDQotICogYnV0IGl0IGhhZCBiZXR0ZXIgYmUgYXQgbGVhc3QgMTYuDQotICovDQotDQotLyogUmVwcmVzZW50YXRpb24gb2YgYSBzaW5nbGUgc2FtcGxlIChwaXhlbCBlbGVtZW50IHZhbHVlKS4NCi0gKiBXZSBmcmVxdWVudGx5IGFsbG9jYXRlIGxhcmdlIGFycmF5cyBvZiB0aGVzZSwgc28gaXQncyBpbXBvcnRhbnQgdG8ga2VlcA0KLSAqIHRoZW0gc21hbGwuICBCdXQgaWYgeW91IGhhdmUgbWVtb3J5IHRvIGJ1cm4gYW5kIGFjY2VzcyB0byBjaGFyIG9yIHNob3J0DQotICogYXJyYXlzIGlzIHZlcnkgc2xvdyBvbiB5b3VyIGhhcmR3YXJlLCB5b3UgbWlnaHQgd2FudCB0byBjaGFuZ2UgdGhlc2UuDQotICovDQotDQotI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4DQotLyogSlNBTVBMRSBzaG91bGQgYmUgdGhlIHNtYWxsZXN0IHR5cGUgdGhhdCB3aWxsIGhvbGQgdGhlIHZhbHVlcyAwLi4yNTUuDQotICogWW91IGNhbiB1c2UgYSBzaWduZWQgY2hhciBieSBoYXZpbmcgR0VUSlNBTVBMRSBtYXNrIGl0IHdpdGggMHhGRi4NCi0gKi8NCi0NCi0jaWZkZWYgSEFWRV9VTlNJR05FRF9DSEFSDQotDQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIEpTQU1QTEU7DQotI2RlZmluZSBHRVRKU0FNUExFKHZhbHVlKSAgKChpbnQpICh2YWx1ZSkpDQotDQotI2Vsc2UgLyogbm90IEhBVkVfVU5TSUdORURfQ0hBUiAqLw0KLQ0KLXR5cGVkZWYgY2hhciBKU0FNUExFOw0KLSNpZmRlZiBDSEFSX0lTX1VOU0lHTkVEDQotI2RlZmluZSBHRVRKU0FNUExFKHZhbHVlKSAgKChpbnQpICh2YWx1ZSkpDQotI2Vsc2UNCi0jZGVmaW5lIEdFVEpTQU1QTEUodmFsdWUpICAoKGludCkgKHZhbHVlKSAmIDB4RkYpDQotI2VuZGlmIC8qIENIQVJfSVNfVU5TSUdORUQgKi8NCi0NCi0jZW5kaWYgLyogSEFWRV9VTlNJR05FRF9DSEFSICovDQotDQotI2RlZmluZSBNQVhKU0FNUExFCTI1NQ0KLSNkZWZpbmUgQ0VOVEVSSlNBTVBMRQkxMjgNCi0NCi0jZW5kaWYgLyogQklUU19JTl9KU0FNUExFID09IDggKi8NCi0NCi0NCi0jaWYgQklUU19JTl9KU0FNUExFID09IDEyDQotLyogSlNBTVBMRSBzaG91bGQgYmUgdGhlIHNtYWxsZXN0IHR5cGUgdGhhdCB3aWxsIGhvbGQgdGhlIHZhbHVlcyAwLi40MDk1Lg0KLSAqIE9uIG5lYXJseSBhbGwgbWFjaGluZXMgInNob3J0IiB3aWxsIGRvIG5pY2VseS4NCi0gKi8NCi0NCi10eXBlZGVmIHNob3J0IEpTQU1QTEU7DQotI2RlZmluZSBHRVRKU0FNUExFKHZhbHVlKSAgKChpbnQpICh2YWx1ZSkpDQotDQotI2RlZmluZSBNQVhKU0FNUExFCTQwOTUNCi0jZGVmaW5lIENFTlRFUkpTQU1QTEUJMjA0OA0KLQ0KLSNlbmRpZiAvKiBCSVRTX0lOX0pTQU1QTEUgPT0gMTIgKi8NCi0NCi0NCi0vKiBSZXByZXNlbnRhdGlvbiBvZiBhIERDVCBmcmVxdWVuY3kgY29lZmZpY2llbnQuDQotICogVGhpcyBzaG91bGQgYmUgYSBzaWduZWQgdmFsdWUgb2YgYXQgbGVhc3QgMTYgYml0czsgInNob3J0IiBpcyB1c3VhbGx5IE9LLg0KLSAqIEFnYWluLCB3ZSBhbGxvY2F0ZSBsYXJnZSBhcnJheXMgb2YgdGhlc2UsIGJ1dCB5b3UgY2FuIGNoYW5nZSB0byBpbnQNCi0gKiBpZiB5b3UgaGF2ZSBtZW1vcnkgdG8gYnVybiBhbmQgInNob3J0IiBpcyByZWFsbHkgc2xvdy4NCi0gKi8NCi0NCi10eXBlZGVmIHNob3J0IEpDT0VGOw0KLQ0KLQ0KLS8qIENvbXByZXNzZWQgZGF0YXN0cmVhbXMgYXJlIHJlcHJlc2VudGVkIGFzIGFycmF5cyBvZiBKT0NURVQuDQotICogVGhlc2UgbXVzdCBiZSBFWEFDVExZIDggYml0cyB3aWRlLCBhdCBsZWFzdCBvbmNlIHRoZXkgYXJlIHdyaXR0ZW4gdG8NCi0gKiBleHRlcm5hbCBzdG9yYWdlLiAgTm90ZSB0aGF0IHdoZW4gdXNpbmcgdGhlIHN0ZGlvIGRhdGEgc291cmNlL2Rlc3RpbmF0aW9uDQotICogbWFuYWdlcnMsIHRoaXMgaXMgYWxzbyB0aGUgZGF0YSB0eXBlIHBhc3NlZCB0byBmcmVhZC9md3JpdGUuDQotICovDQotDQotI2lmZGVmIEhBVkVfVU5TSUdORURfQ0hBUg0KLQ0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciBKT0NURVQ7DQotI2RlZmluZSBHRVRKT0NURVQodmFsdWUpICAodmFsdWUpDQotDQotI2Vsc2UgLyogbm90IEhBVkVfVU5TSUdORURfQ0hBUiAqLw0KLQ0KLXR5cGVkZWYgY2hhciBKT0NURVQ7DQotI2lmZGVmIENIQVJfSVNfVU5TSUdORUQNCi0jZGVmaW5lIEdFVEpPQ1RFVCh2YWx1ZSkgICh2YWx1ZSkNCi0jZWxzZQ0KLSNkZWZpbmUgR0VUSk9DVEVUKHZhbHVlKSAgKCh2YWx1ZSkgJiAweEZGKQ0KLSNlbmRpZiAvKiBDSEFSX0lTX1VOU0lHTkVEICovDQotDQotI2VuZGlmIC8qIEhBVkVfVU5TSUdORURfQ0hBUiAqLw0KLQ0KLQ0KLS8qIFRoZXNlIHR5cGVkZWZzIGFyZSB1c2VkIGZvciB2YXJpb3VzIHRhYmxlIGVudHJpZXMgYW5kIHNvIGZvcnRoLg0KLSAqIFRoZXkgbXVzdCBiZSBhdCBsZWFzdCBhcyB3aWRlIGFzIHNwZWNpZmllZDsgYnV0IG1ha2luZyB0aGVtIHRvbyBiaWcNCi0gKiB3b24ndCBjb3N0IGEgaHVnZSBhbW91bnQgb2YgbWVtb3J5LCBzbyB3ZSBkb24ndCBwcm92aWRlIHNwZWNpYWwNCi0gKiBleHRyYWN0aW9uIGNvZGUgbGlrZSB3ZSBkaWQgZm9yIEpTQU1QTEUuICAoSW4gb3RoZXIgd29yZHMsIHRoZXNlDQotICogdHlwZWRlZnMgbGl2ZSBhdCBhIGRpZmZlcmVudCBwb2ludCBvbiB0aGUgc3BlZWQvc3BhY2UgdHJhZGVvZmYgY3VydmUuKQ0KLSAqLw0KLQ0KLSNpZiBfRlhfT1NfICE9IF9GWF9WWFdPUktTXw0KLQ0KLS8qIFVJTlQ4IG11c3QgaG9sZCBhdCBsZWFzdCB0aGUgdmFsdWVzIDAuLjI1NS4gKi8NCi0NCi0jaWZkZWYgSEFWRV9VTlNJR05FRF9DSEFSDQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJTlQ4Ow0KLSNlbHNlIC8qIG5vdCBIQVZFX1VOU0lHTkVEX0NIQVIgKi8NCi0jaWZkZWYgQ0hBUl9JU19VTlNJR05FRA0KLXR5cGVkZWYgY2hhciBVSU5UODsNCi0jZWxzZSAvKiBub3QgQ0hBUl9JU19VTlNJR05FRCAqLw0KLXR5cGVkZWYgc2hvcnQgVUlOVDg7DQotI2VuZGlmIC8qIENIQVJfSVNfVU5TSUdORUQgKi8NCi0jZW5kaWYgLyogSEFWRV9VTlNJR05FRF9DSEFSICovDQotDQotDQotLyogVUlOVDE2IG11c3QgaG9sZCBhdCBsZWFzdCB0aGUgdmFsdWVzIDAuLjY1NTM1LiAqLw0KLQ0KLSNpZmRlZiBIQVZFX1VOU0lHTkVEX1NIT1JUDQotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVSU5UMTY7DQotI2Vsc2UgLyogbm90IEhBVkVfVU5TSUdORURfU0hPUlQgKi8NCi10eXBlZGVmIHVuc2lnbmVkIGludCBVSU5UMTY7DQotI2VuZGlmIC8qIEhBVkVfVU5TSUdORURfU0hPUlQgKi8NCi0NCi0vKiBJTlQxNiBtdXN0IGhvbGQgYXQgbGVhc3QgdGhlIHZhbHVlcyAtMzI3NjguLjMyNzY3LiAqLw0KLQ0KLSNpZm5kZWYgWE1EX0gJCQkvKiBYMTEveG1kLmggY29ycmVjdGx5IGRlZmluZXMgSU5UMTYgKi8NCi10eXBlZGVmIHNob3J0IElOVDE2Ow0KLSNlbmRpZg0KLQ0KLS8qIElOVDMyIG11c3QgaG9sZCBhdCBsZWFzdCBzaWduZWQgMzItYml0IHZhbHVlcy4gKi8NCi0NCi0jaWZuZGVmIFhNRF9ICQkJLyogWDExL3htZC5oIGNvcnJlY3RseSBkZWZpbmVzIElOVDMyICovDQotdHlwZWRlZiBpbnQgSU5UMzI7DQotI2VuZGlmDQotDQotI2VuZGlmIA0KLQ0KLS8qIERhdGF0eXBlIHVzZWQgZm9yIGltYWdlIGRpbWVuc2lvbnMuICBUaGUgSlBFRyBzdGFuZGFyZCBvbmx5IHN1cHBvcnRzDQotICogaW1hZ2VzIHVwIHRvIDY0Syo2NEsgZHVlIHRvIDE2LWJpdCBmaWVsZHMgaW4gU09GIG1hcmtlcnMuICBUaGVyZWZvcmUNCi0gKiAidW5zaWduZWQgaW50IiBpcyBzdWZmaWNpZW50IG9uIGFsbCBtYWNoaW5lcy4gIEhvd2V2ZXIsIGlmIHlvdSBuZWVkIHRvDQotICogaGFuZGxlIGxhcmdlciBpbWFnZXMgYW5kIHlvdSBkb24ndCBtaW5kIGRldmlhdGluZyBmcm9tIHRoZSBzcGVjLCB5b3UNCi0gKiBjYW4gY2hhbmdlIHRoaXMgZGF0YXR5cGUuDQotICovDQotDQotdHlwZWRlZiB1bnNpZ25lZCBpbnQgSkRJTUVOU0lPTjsNCi0NCi0jZGVmaW5lIEpQRUdfTUFYX0RJTUVOU0lPTiAgNjU1MDBMICAvKiBhIHRhZCB1bmRlciA2NEsgdG8gcHJldmVudCBvdmVyZmxvd3MgKi8NCi0NCi0NCi0vKiBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgaW4gYWxsIGZ1bmN0aW9uIGRlZmluaXRpb25zIGFuZCBleHRlcm4gZGVjbGFyYXRpb25zLg0KLSAqIFlvdSBjb3VsZCBtb2RpZnkgdGhlbSBpZiB5b3UgbmVlZCB0byBjaGFuZ2UgZnVuY3Rpb24gbGlua2FnZSBjb252ZW50aW9uczsNCi0gKiBpbiBwYXJ0aWN1bGFyLCB5b3UnbGwgbmVlZCB0byBkbyB0aGF0IHRvIG1ha2UgdGhlIGxpYnJhcnkgYSBXaW5kb3dzIERMTC4NCi0gKiBBbm90aGVyIGFwcGxpY2F0aW9uIGlzIHRvIG1ha2UgYWxsIGZ1bmN0aW9ucyBnbG9iYWwgZm9yIHVzZSB3aXRoIGRlYnVnZ2Vycw0KLSAqIG9yIGNvZGUgcHJvZmlsZXJzIHRoYXQgcmVxdWlyZSBpdC4NCi0gKi8NCi0NCi0vKiBhIGZ1bmN0aW9uIGNhbGxlZCB0aHJvdWdoIG1ldGhvZCBwb2ludGVyczogKi8NCi0jZGVmaW5lIE1FVEhPRERFRih0eXBlKQkJc3RhdGljIHR5cGUNCi0vKiBhIGZ1bmN0aW9uIHVzZWQgb25seSBpbiBpdHMgbW9kdWxlOiAqLw0KLSNkZWZpbmUgTE9DQUwodHlwZSkJCXN0YXRpYyB0eXBlDQotLyogYSBmdW5jdGlvbiByZWZlcmVuY2VkIHRocnUgRVhURVJOczogKi8NCi0jZGVmaW5lIEdMT0JBTCh0eXBlKQkJdHlwZQ0KLQ0KLSNpZmRlZiBfRlhfTUFOQUdFRF9DT0RFXw0KLSNkZWZpbmUgRVhURVJOKHR5cGUpCQlleHRlcm4gIkMiIHR5cGUNCi0jZWxzZQ0KLS8qIGEgcmVmZXJlbmNlIHRvIGEgR0xPQkFMIGZ1bmN0aW9uOiAqLw0KLSNkZWZpbmUgRVhURVJOKHR5cGUpCQlleHRlcm4gdHlwZQ0KLSNlbmRpZg0KLQ0KLQ0KLS8qIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBkZWNsYXJlIGEgIm1ldGhvZCIsIHRoYXQgaXMsIGEgZnVuY3Rpb24gcG9pbnRlci4NCi0gKiBXZSB3YW50IHRvIHN1cHBseSBwcm90b3R5cGUgcGFyYW1ldGVycyBpZiB0aGUgY29tcGlsZXIgY2FuIGNvcGUuDQotICogTm90ZSB0aGF0IHRoZSBhcmdsaXN0IHBhcmFtZXRlciBtdXN0IGJlIHBhcmVudGhlc2l6ZWQhDQotICogQWdhaW4sIHlvdSBjYW4gY3VzdG9taXplIHRoaXMgaWYgeW91IG5lZWQgc3BlY2lhbCBsaW5rYWdlIGtleXdvcmRzLg0KLSAqLw0KLQ0KLSNpZmRlZiBIQVZFX1BST1RPVFlQRVMNCi0jZGVmaW5lIEpNRVRIT0QodHlwZSxtZXRob2RuYW1lLGFyZ2xpc3QpICB0eXBlICgqbWV0aG9kbmFtZSkgYXJnbGlzdA0KLSNlbHNlDQotI2RlZmluZSBKTUVUSE9EKHR5cGUsbWV0aG9kbmFtZSxhcmdsaXN0KSAgdHlwZSAoKm1ldGhvZG5hbWUpICgpDQotI2VuZGlmDQotDQotDQotLyogSGVyZSBpcyB0aGUgcHNldWRvLWtleXdvcmQgZm9yIGRlY2xhcmluZyBwb2ludGVycyB0aGF0IG11c3QgYmUgImZhciINCi0gKiBvbiA4MHg4NiBtYWNoaW5lcy4gIE1vc3Qgb2YgdGhlIHNwZWNpYWxpemVkIGNvZGluZyBmb3IgODB4ODYgaXMgaGFuZGxlZA0KLSAqIGJ5IGp1c3Qgc2F5aW5nICJGQVIgKiIgd2hlcmUgc3VjaCBhIHBvaW50ZXIgaXMgbmVlZGVkLiAgSW4gYSBmZXcgcGxhY2VzDQotICogZXhwbGljaXQgY29kaW5nIGlzIG5lZWRlZDsgc2VlIHVzZXMgb2YgdGhlIE5FRURfRkFSX1BPSU5URVJTIHN5bWJvbC4NCi0gKi8NCi0NCi0jaWZkZWYgTkVFRF9GQVJfUE9JTlRFUlMNCi0jZGVmaW5lIEZBUiAgZmFyDQotI2Vsc2UNCi0vLyNkZWZpbmUgRkFSDQotI2VuZGlmDQotDQotDQotLyoNCi0gKiBPbiBhIGZldyBzeXN0ZW1zLCB0eXBlIGJvb2xlYW4gYW5kL29yIGl0cyB2YWx1ZXMgRkFMU0UsIFRSVUUgbWF5IGFwcGVhcg0KLSAqIGluIHN0YW5kYXJkIGhlYWRlciBmaWxlcy4gIE9yIHlvdSBtYXkgaGF2ZSBjb25mbGljdHMgd2l0aCBhcHBsaWNhdGlvbi0NCi0gKiBzcGVjaWZpYyBoZWFkZXIgZmlsZXMgdGhhdCB5b3Ugd2FudCB0byBpbmNsdWRlIHRvZ2V0aGVyIHdpdGggdGhlc2UgZmlsZXMuDQotICogRGVmaW5pbmcgSEFWRV9CT09MRUFOIGJlZm9yZSBpbmNsdWRpbmcganBlZ2xpYi5oIHNob3VsZCBtYWtlIGl0IHdvcmsuDQotICovDQotDQotI2lmbmRlZiBIQVZFX0JPT0xFQU4NCi10eXBlZGVmIGludCBib29sZWFuOw0KLSNlbmRpZg0KLSNpZm5kZWYgRkFMU0UJCQkvKiBpbiBjYXNlIHRoZXNlIG1hY3JvcyBhbHJlYWR5IGV4aXN0ICovDQotI2RlZmluZSBGQUxTRQkwCQkvKiB2YWx1ZXMgb2YgYm9vbGVhbiAqLw0KLSNlbmRpZg0KLSNpZm5kZWYgVFJVRQ0KLSNkZWZpbmUgVFJVRQkxDQotI2VuZGlmDQotDQotDQotLyoNCi0gKiBUaGUgcmVtYWluaW5nIG9wdGlvbnMgYWZmZWN0IGNvZGUgc2VsZWN0aW9uIHdpdGhpbiB0aGUgSlBFRyBsaWJyYXJ5LA0KLSAqIGJ1dCB0aGV5IGRvbid0IG5lZWQgdG8gYmUgdmlzaWJsZSB0byBtb3N0IGFwcGxpY2F0aW9ucyB1c2luZyB0aGUgbGlicmFyeS4NCi0gKiBUbyBtaW5pbWl6ZSBhcHBsaWNhdGlvbiBuYW1lc3BhY2UgcG9sbHV0aW9uLCB0aGUgc3ltYm9scyB3b24ndCBiZQ0KLSAqIGRlZmluZWQgdW5sZXNzIEpQRUdfSU5URVJOQUxTIG9yIEpQRUdfSU5URVJOQUxfT1BUSU9OUyBoYXMgYmVlbiBkZWZpbmVkLg0KLSAqLw0KLQ0KLSNpZmRlZiBKUEVHX0lOVEVSTkFMUw0KLSNkZWZpbmUgSlBFR19JTlRFUk5BTF9PUFRJT05TDQotI2VuZGlmDQotDQotI2lmZGVmIEpQRUdfSU5URVJOQUxfT1BUSU9OUw0KLQ0KLQ0KLS8qDQotICogVGhlc2UgZGVmaW5lcyBpbmRpY2F0ZSB3aGV0aGVyIHRvIGluY2x1ZGUgdmFyaW91cyBvcHRpb25hbCBmdW5jdGlvbnMuDQotICogVW5kZWZpbmluZyBzb21lIG9mIHRoZXNlIHN5bWJvbHMgd2lsbCBwcm9kdWNlIGEgc21hbGxlciBidXQgbGVzcyBjYXBhYmxlDQotICogbGlicmFyeS4gIE5vdGUgdGhhdCB5b3UgY2FuIGxlYXZlIGNlcnRhaW4gc291cmNlIGZpbGVzIG91dCBvZiB0aGUNCi0gKiBjb21waWxhdGlvbi9saW5raW5nIHByb2Nlc3MgaWYgeW91J3ZlICN1bmRlZidkIHRoZSBjb3JyZXNwb25kaW5nIHN5bWJvbHMuDQotICogKFlvdSBtYXkgSEFWRSB0byBkbyB0aGF0IGlmIHlvdXIgY29tcGlsZXIgZG9lc24ndCBsaWtlIG51bGwgc291cmNlIGZpbGVzLikNCi0gKi8NCi0NCi0vKiBBcml0aG1ldGljIGNvZGluZyBpcyB1bnN1cHBvcnRlZCBmb3IgbGVnYWwgcmVhc29ucy4gIENvbXBsYWludHMgdG8gSUJNLiAqLw0KLQ0KLS8qIENhcGFiaWxpdHkgb3B0aW9ucyBjb21tb24gdG8gZW5jb2RlciBhbmQgZGVjb2RlcjogKi8NCi0NCi0jZGVmaW5lIERDVF9JU0xPV19TVVBQT1JURUQJLyogc2xvdyBidXQgYWNjdXJhdGUgaW50ZWdlciBhbGdvcml0aG0gKi8NCi0jZGVmaW5lIERDVF9JRkFTVF9TVVBQT1JURUQJLyogZmFzdGVyLCBsZXNzIGFjY3VyYXRlIGludGVnZXIgbWV0aG9kICovDQotI3VuZGVmIERDVF9GTE9BVF9TVVBQT1JURUQJLyogZmxvYXRpbmctcG9pbnQ6IGFjY3VyYXRlLCBmYXN0IG9uIGZhc3QgSFcgKi8NCi0NCi0vKiBFbmNvZGVyIGNhcGFiaWxpdHkgb3B0aW9uczogKi8NCi0NCi0jdW5kZWYgIENfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRCAgICAvKiBBcml0aG1ldGljIGNvZGluZyBiYWNrIGVuZD8gKi8NCi0jZGVmaW5lIENfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRCAvKiBNdWx0aXBsZS1zY2FuIEpQRUcgZmlsZXM/ICovDQotI2RlZmluZSBDX1BST0dSRVNTSVZFX1NVUFBPUlRFRAkgICAgLyogUHJvZ3Jlc3NpdmUgSlBFRz8gKFJlcXVpcmVzIE1VTFRJU0NBTikqLw0KLSNkZWZpbmUgRU5UUk9QWV9PUFRfU1VQUE9SVEVECSAgICAvKiBPcHRpbWl6YXRpb24gb2YgZW50cm9weSBjb2RpbmcgcGFybXM/ICovDQotLyogTm90ZTogaWYgeW91IHNlbGVjdGVkIDEyLWJpdCBkYXRhIHByZWNpc2lvbiwgaXQgaXMgZGFuZ2Vyb3VzIHRvIHR1cm4gb2ZmDQotICogRU5UUk9QWV9PUFRfU1VQUE9SVEVELiAgVGhlIHN0YW5kYXJkIEh1ZmZtYW4gdGFibGVzIGFyZSBvbmx5IGdvb2QgZm9yIDgtYml0DQotICogcHJlY2lzaW9uLCBzbyBqY2h1ZmYuYyBub3JtYWxseSB1c2VzIGVudHJvcHkgb3B0aW1pemF0aW9uIHRvIGNvbXB1dGUNCi0gKiB1c2FibGUgdGFibGVzIGZvciBoaWdoZXIgcHJlY2lzaW9uLiAgSWYgeW91IGRvbid0IHdhbnQgdG8gZG8gb3B0aW1pemF0aW9uLA0KLSAqIHlvdSdsbCBoYXZlIHRvIHN1cHBseSBkaWZmZXJlbnQgZGVmYXVsdCBIdWZmbWFuIHRhYmxlcy4NCi0gKiBUaGUgZXhhY3Qgc2FtZSBzdGF0ZW1lbnRzIGFwcGx5IGZvciBwcm9ncmVzc2l2ZSBKUEVHOiB0aGUgZGVmYXVsdCB0YWJsZXMNCi0gKiBkb24ndCB3b3JrIGZvciBwcm9ncmVzc2l2ZSBtb2RlLiAgKFRoaXMgbWF5IGdldCBmaXhlZCwgaG93ZXZlci4pDQotICovDQotI2RlZmluZSBJTlBVVF9TTU9PVEhJTkdfU1VQUE9SVEVEICAgLyogSW5wdXQgaW1hZ2Ugc21vb3RoaW5nIG9wdGlvbj8gKi8NCi0NCi0vKiBEZWNvZGVyIGNhcGFiaWxpdHkgb3B0aW9uczogKi8NCi0NCi0jdW5kZWYgIERfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRCAgICAvKiBBcml0aG1ldGljIGNvZGluZyBiYWNrIGVuZD8gKi8NCi0jZGVmaW5lIERfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRCAvKiBNdWx0aXBsZS1zY2FuIEpQRUcgZmlsZXM/ICovDQotI2RlZmluZSBEX1BST0dSRVNTSVZFX1NVUFBPUlRFRAkgICAgLyogUHJvZ3Jlc3NpdmUgSlBFRz8gKFJlcXVpcmVzIE1VTFRJU0NBTikqLw0KLSNkZWZpbmUgU0FWRV9NQVJLRVJTX1NVUFBPUlRFRAkgICAgLyoganBlZ19zYXZlX21hcmtlcnMoKSBuZWVkZWQ/ICovDQotI2RlZmluZSBCTE9DS19TTU9PVEhJTkdfU1VQUE9SVEVEICAgLyogQmxvY2sgc21vb3RoaW5nPyAoUHJvZ3Jlc3NpdmUgb25seSkgKi8NCi0jZGVmaW5lIElEQ1RfU0NBTElOR19TVVBQT1JURUQJICAgIC8qIE91dHB1dCByZXNjYWxpbmcgdmlhIElEQ1Q/ICovDQotI3VuZGVmIFVQU0FNUExFX1NDQUxJTkdfU1VQUE9SVEVEICAvKiBPdXRwdXQgcmVzY2FsaW5nIGF0IHVwc2FtcGxlIHN0YWdlPyAqLw0KLSNkZWZpbmUgVVBTQU1QTEVfTUVSR0lOR19TVVBQT1JURUQgIC8qIEZhc3QgcGF0aCBmb3Igc2xvcHB5IHVwc2FtcGxpbmc/ICovDQotI3VuZGVmIFFVQU5UXzFQQVNTX1NVUFBPUlRFRAkgICAgLyogMS1wYXNzIGNvbG9yIHF1YW50aXphdGlvbj8gKi8NCi0jdW5kZWYgUVVBTlRfMlBBU1NfU1VQUE9SVEVECSAgICAvKiAyLXBhc3MgY29sb3IgcXVhbnRpemF0aW9uPyAqLw0KLQ0KLS8qIG1vcmUgY2FwYWJpbGl0eSBvcHRpb25zIGxhdGVyLCBubyBkb3VidCAqLw0KLQ0KLQ0KLS8qDQotICogT3JkZXJpbmcgb2YgUkdCIGRhdGEgaW4gc2NhbmxpbmVzIHBhc3NlZCB0byBvciBmcm9tIHRoZSBhcHBsaWNhdGlvbi4NCi0gKiBJZiB5b3VyIGFwcGxpY2F0aW9uIHdhbnRzIHRvIGRlYWwgd2l0aCBkYXRhIGluIHRoZSBvcmRlciBCLEcsUiwganVzdA0KLSAqIGNoYW5nZSB0aGVzZSBtYWNyb3MuICBZb3UgY2FuIGFsc28gZGVhbCB3aXRoIGZvcm1hdHMgc3VjaCBhcyBSLEcsQixYDQotICogKG9uZSBleHRyYSBieXRlIHBlciBwaXhlbCkgYnkgY2hhbmdpbmcgUkdCX1BJWEVMU0laRS4gIE5vdGUgdGhhdCBjaGFuZ2luZw0KLSAqIHRoZSBvZmZzZXRzIHdpbGwgYWxzbyBjaGFuZ2UgdGhlIG9yZGVyIGluIHdoaWNoIGNvbG9ybWFwIGRhdGEgaXMgb3JnYW5pemVkLg0KLSAqIFJFU1RSSUNUSU9OUzoNCi0gKiAxLiBUaGUgc2FtcGxlIGFwcGxpY2F0aW9ucyBjanBlZyxkanBlZyBkbyBOT1Qgc3VwcG9ydCBtb2RpZmllZCBSR0IgZm9ybWF0cy4NCi0gKiAyLiBUaGVzZSBtYWNyb3Mgb25seSBhZmZlY3QgUkdCPD0+WUNiQ3IgY29sb3IgY29udmVyc2lvbiwgc28gdGhleSBhcmUgbm90DQotICogICAgdXNlZnVsIGlmIHlvdSBhcmUgdXNpbmcgSlBFRyBjb2xvciBzcGFjZXMgb3RoZXIgdGhhbiBZQ2JDciBvciBncmF5c2NhbGUuDQotICogMy4gVGhlIGNvbG9yIHF1YW50aXplciBtb2R1bGVzIHdpbGwgbm90IGJlaGF2ZSBkZXNpcmFibHkgaWYgUkdCX1BJWEVMU0laRQ0KLSAqICAgIGlzIG5vdCAzICh0aGV5IGRvbid0IHVuZGVyc3RhbmQgYWJvdXQgZHVtbXkgY29sb3IgY29tcG9uZW50cyEpLiAgU28geW91DQotICogICAgY2FuJ3QgdXNlIGNvbG9yIHF1YW50aXphdGlvbiBpZiB5b3UgY2hhbmdlIHRoYXQgdmFsdWUuDQotICovDQotDQotI2RlZmluZSBSR0JfUkVECQkwCS8qIE9mZnNldCBvZiBSZWQgaW4gYW4gUkdCIHNjYW5saW5lIGVsZW1lbnQgKi8NCi0jZGVmaW5lIFJHQl9HUkVFTgkxCS8qIE9mZnNldCBvZiBHcmVlbiAqLw0KLSNkZWZpbmUgUkdCX0JMVUUJMgkvKiBPZmZzZXQgb2YgQmx1ZSAqLw0KLSNkZWZpbmUgUkdCX1BJWEVMU0laRQkzCS8qIEpTQU1QTEVzIHBlciBSR0Igc2NhbmxpbmUgZWxlbWVudCAqLw0KLQ0KLQ0KLS8qIERlZmluaXRpb25zIGZvciBzcGVlZC1yZWxhdGVkIG9wdGltaXphdGlvbnMuICovDQotDQotDQotLyogSWYgeW91ciBjb21waWxlciBzdXBwb3J0cyBpbmxpbmUgZnVuY3Rpb25zLCBkZWZpbmUgSU5MSU5FDQotICogYXMgdGhlIGlubGluZSBrZXl3b3JkOyBvdGhlcndpc2UgZGVmaW5lIGl0IGFzIGVtcHR5Lg0KLSAqLw0KLQ0KLSNpZm5kZWYgSU5MSU5FDQotI2lmZGVmIF9fR05VQ19fCQkJLyogZm9yIGluc3RhbmNlLCBHTlUgQyBrbm93cyBhYm91dCBpbmxpbmUgKi8NCi0jZGVmaW5lIElOTElORSBfX2lubGluZV9fDQotI2VuZGlmDQotI2lmbmRlZiBJTkxJTkUNCi0jZGVmaW5lIElOTElORQkJCS8qIGRlZmF1bHQgaXMgdG8gZGVmaW5lIGl0IGFzIGVtcHR5ICovDQotI2VuZGlmDQotI2VuZGlmDQotDQotDQotLyogT24gc29tZSBtYWNoaW5lcyAobm90YWJseSA2ODAwMCBzZXJpZXMpICJpbnQiIGlzIDMyIGJpdHMsIGJ1dCBtdWx0aXBseWluZw0KLSAqIHR3byAxNi1iaXQgc2hvcnRzIGlzIGZhc3RlciB0aGFuIG11bHRpcGx5aW5nIHR3byBpbnRzLiAgRGVmaW5lIE1VTFRJUExJRVINCi0gKiBhcyBzaG9ydCBvbiBzdWNoIGEgbWFjaGluZS4gIE1VTFRJUExJRVIgbXVzdCBiZSBhdCBsZWFzdCAxNiBiaXRzIHdpZGUuDQotICovDQotDQotI2lmbmRlZiBNVUxUSVBMSUVSDQotI2RlZmluZSBNVUxUSVBMSUVSICBpbnQJCS8qIHR5cGUgZm9yIGZhc3Rlc3QgaW50ZWdlciBtdWx0aXBseSAqLw0KLSNlbmRpZg0KLQ0KLQ0KLS8qIEZBU1RfRkxPQVQgc2hvdWxkIGJlIGVpdGhlciBmbG9hdCBvciBkb3VibGUsIHdoaWNoZXZlciBpcyBkb25lIGZhc3Rlcg0KLSAqIGJ5IHlvdXIgY29tcGlsZXIuICAoTm90ZSB0aGF0IHRoaXMgdHlwZSBpcyBvbmx5IHVzZWQgaW4gdGhlIGZsb2F0aW5nIHBvaW50DQotICogRENUIHJvdXRpbmVzLCBzbyBpdCBvbmx5IG1hdHRlcnMgaWYgeW91J3ZlIGRlZmluZWQgRENUX0ZMT0FUX1NVUFBPUlRFRC4pDQotICogVHlwaWNhbGx5LCBmbG9hdCBpcyBmYXN0ZXIgaW4gQU5TSSBDIGNvbXBpbGVycywgd2hpbGUgZG91YmxlIGlzIGZhc3RlciBpbg0KLSAqIHByZS1BTlNJIGNvbXBpbGVycyAoYmVjYXVzZSB0aGV5IGluc2lzdCBvbiBjb252ZXJ0aW5nIHRvIGRvdWJsZSBhbnl3YXkpLg0KLSAqIFRoZSBjb2RlIGJlbG93IHRoZXJlZm9yZSBjaG9vc2VzIGZsb2F0IGlmIHdlIGhhdmUgQU5TSS1zdHlsZSBwcm90b3R5cGVzLg0KLSAqLw0KLQ0KLSNpZm5kZWYgRkFTVF9GTE9BVA0KLSNpZmRlZiBIQVZFX1BST1RPVFlQRVMNCi0jZGVmaW5lIEZBU1RfRkxPQVQgIGZsb2F0DQotI2Vsc2UNCi0jZGVmaW5lIEZBU1RfRkxPQVQgIGRvdWJsZQ0KLSNlbmRpZg0KLSNlbmRpZg0KLQ0KLSNlbmRpZiAvKiBKUEVHX0lOVEVSTkFMX09QVElPTlMgKi8NCisvKgorICogam1vcmVjZmcuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgY3VzdG9taXplIHRoZQorICogSlBFRyBzb2Z0d2FyZSBmb3Igc3BlY2lhbCBhcHBsaWNhdGlvbnMgb3Igc3VwcG9ydCBtYWNoaW5lLWRlcGVuZGVudAorICogb3B0aW1pemF0aW9ucy4gIE1vc3QgdXNlcnMgd2lsbCBub3QgbmVlZCB0byB0b3VjaCB0aGlzIGZpbGUuCisgKi8KKworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcgKGRpc2FibGUgOiA0MTQyKQorI2VuZGlmCisKKy8qCisgKiBEZWZpbmUgQklUU19JTl9KU0FNUExFIGFzIGVpdGhlcgorICogICA4ICAgZm9yIDgtYml0IHNhbXBsZSB2YWx1ZXMgKHRoZSB1c3VhbCBzZXR0aW5nKQorICogICAxMiAgZm9yIDEyLWJpdCBzYW1wbGUgdmFsdWVzCisgKiBPbmx5IDggYW5kIDEyIGFyZSBsZWdhbCBkYXRhIHByZWNpc2lvbnMgZm9yIGxvc3N5IEpQRUcgYWNjb3JkaW5nIHRvIHRoZQorICogSlBFRyBzdGFuZGFyZCwgYW5kIHRoZSBJSkcgY29kZSBkb2VzIG5vdCBzdXBwb3J0IGFueXRoaW5nIGVsc2UhCisgKiBXZSBkbyBub3Qgc3VwcG9ydCBydW4tdGltZSBzZWxlY3Rpb24gb2YgZGF0YSBwcmVjaXNpb24sIHNvcnJ5LgorICovCisKKyNkZWZpbmUgQklUU19JTl9KU0FNUExFICA4CS8qIHVzZSA4IG9yIDEyICovCisKKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIGNvbXBvbmVudHMgKGNvbG9yIGNoYW5uZWxzKSBhbGxvd2VkIGluIEpQRUcgaW1hZ2UuCisgKiBUbyBtZWV0IHRoZSBsZXR0ZXIgb2YgdGhlIEpQRUcgc3BlYywgc2V0IHRoaXMgdG8gMjU1LiAgSG93ZXZlciwgZGFybgorICogZmV3IGFwcGxpY2F0aW9ucyBuZWVkIG1vcmUgdGhhbiA0IGNoYW5uZWxzIChtYXliZSA1IGZvciBDTVlLICsgYWxwaGEKKyAqIG1hc2spLiAgV2UgcmVjb21tZW5kIDEwIGFzIGEgcmVhc29uYWJsZSBjb21wcm9taXNlOyB1c2UgNCBpZiB5b3UgYXJlCisgKiByZWFsbHkgc2hvcnQgb24gbWVtb3J5LiAgKEVhY2ggYWxsb3dlZCBjb21wb25lbnQgY29zdHMgYSBodW5kcmVkIG9yIHNvCisgKiBieXRlcyBvZiBzdG9yYWdlLCB3aGV0aGVyIGFjdHVhbGx5IHVzZWQgaW4gYW4gaW1hZ2Ugb3Igbm90LikKKyAqLworCisjZGVmaW5lIE1BWF9DT01QT05FTlRTICAxMAkvKiBtYXhpbXVtIG51bWJlciBvZiBpbWFnZSBjb21wb25lbnRzICovCisKKworLyoKKyAqIEJhc2ljIGRhdGEgdHlwZXMuCisgKiBZb3UgbWF5IG5lZWQgdG8gY2hhbmdlIHRoZXNlIGlmIHlvdSBoYXZlIGEgbWFjaGluZSB3aXRoIHVudXN1YWwgZGF0YQorICogdHlwZSBzaXplczsgZm9yIGV4YW1wbGUsICJjaGFyIiBub3QgOCBiaXRzLCAic2hvcnQiIG5vdCAxNiBiaXRzLAorICogb3IgImxvbmciIG5vdCAzMiBiaXRzLiAgV2UgZG9uJ3QgY2FyZSB3aGV0aGVyICJpbnQiIGlzIDE2IG9yIDMyIGJpdHMsCisgKiBidXQgaXQgaGFkIGJldHRlciBiZSBhdCBsZWFzdCAxNi4KKyAqLworCisvKiBSZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZSBzYW1wbGUgKHBpeGVsIGVsZW1lbnQgdmFsdWUpLgorICogV2UgZnJlcXVlbnRseSBhbGxvY2F0ZSBsYXJnZSBhcnJheXMgb2YgdGhlc2UsIHNvIGl0J3MgaW1wb3J0YW50IHRvIGtlZXAKKyAqIHRoZW0gc21hbGwuICBCdXQgaWYgeW91IGhhdmUgbWVtb3J5IHRvIGJ1cm4gYW5kIGFjY2VzcyB0byBjaGFyIG9yIHNob3J0CisgKiBhcnJheXMgaXMgdmVyeSBzbG93IG9uIHlvdXIgaGFyZHdhcmUsIHlvdSBtaWdodCB3YW50IHRvIGNoYW5nZSB0aGVzZS4KKyAqLworCisjaWYgQklUU19JTl9KU0FNUExFID09IDgKKy8qIEpTQU1QTEUgc2hvdWxkIGJlIHRoZSBzbWFsbGVzdCB0eXBlIHRoYXQgd2lsbCBob2xkIHRoZSB2YWx1ZXMgMC4uMjU1LgorICogWW91IGNhbiB1c2UgYSBzaWduZWQgY2hhciBieSBoYXZpbmcgR0VUSlNBTVBMRSBtYXNrIGl0IHdpdGggMHhGRi4KKyAqLworCisjaWZkZWYgSEFWRV9VTlNJR05FRF9DSEFSCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBKU0FNUExFOworI2RlZmluZSBHRVRKU0FNUExFKHZhbHVlKSAgKChpbnQpICh2YWx1ZSkpCisKKyNlbHNlIC8qIG5vdCBIQVZFX1VOU0lHTkVEX0NIQVIgKi8KKwordHlwZWRlZiBjaGFyIEpTQU1QTEU7CisjaWZkZWYgQ0hBUl9JU19VTlNJR05FRAorI2RlZmluZSBHRVRKU0FNUExFKHZhbHVlKSAgKChpbnQpICh2YWx1ZSkpCisjZWxzZQorI2RlZmluZSBHRVRKU0FNUExFKHZhbHVlKSAgKChpbnQpICh2YWx1ZSkgJiAweEZGKQorI2VuZGlmIC8qIENIQVJfSVNfVU5TSUdORUQgKi8KKworI2VuZGlmIC8qIEhBVkVfVU5TSUdORURfQ0hBUiAqLworCisjZGVmaW5lIE1BWEpTQU1QTEUJMjU1CisjZGVmaW5lIENFTlRFUkpTQU1QTEUJMTI4CisKKyNlbmRpZiAvKiBCSVRTX0lOX0pTQU1QTEUgPT0gOCAqLworCisKKyNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gMTIKKy8qIEpTQU1QTEUgc2hvdWxkIGJlIHRoZSBzbWFsbGVzdCB0eXBlIHRoYXQgd2lsbCBob2xkIHRoZSB2YWx1ZXMgMC4uNDA5NS4KKyAqIE9uIG5lYXJseSBhbGwgbWFjaGluZXMgInNob3J0IiB3aWxsIGRvIG5pY2VseS4KKyAqLworCit0eXBlZGVmIHNob3J0IEpTQU1QTEU7CisjZGVmaW5lIEdFVEpTQU1QTEUodmFsdWUpICAoKGludCkgKHZhbHVlKSkKKworI2RlZmluZSBNQVhKU0FNUExFCTQwOTUKKyNkZWZpbmUgQ0VOVEVSSlNBTVBMRQkyMDQ4CisKKyNlbmRpZiAvKiBCSVRTX0lOX0pTQU1QTEUgPT0gMTIgKi8KKworCisvKiBSZXByZXNlbnRhdGlvbiBvZiBhIERDVCBmcmVxdWVuY3kgY29lZmZpY2llbnQuCisgKiBUaGlzIHNob3VsZCBiZSBhIHNpZ25lZCB2YWx1ZSBvZiBhdCBsZWFzdCAxNiBiaXRzOyAic2hvcnQiIGlzIHVzdWFsbHkgT0suCisgKiBBZ2Fpbiwgd2UgYWxsb2NhdGUgbGFyZ2UgYXJyYXlzIG9mIHRoZXNlLCBidXQgeW91IGNhbiBjaGFuZ2UgdG8gaW50CisgKiBpZiB5b3UgaGF2ZSBtZW1vcnkgdG8gYnVybiBhbmQgInNob3J0IiBpcyByZWFsbHkgc2xvdy4KKyAqLworCit0eXBlZGVmIHNob3J0IEpDT0VGOworCisKKy8qIENvbXByZXNzZWQgZGF0YXN0cmVhbXMgYXJlIHJlcHJlc2VudGVkIGFzIGFycmF5cyBvZiBKT0NURVQuCisgKiBUaGVzZSBtdXN0IGJlIEVYQUNUTFkgOCBiaXRzIHdpZGUsIGF0IGxlYXN0IG9uY2UgdGhleSBhcmUgd3JpdHRlbiB0bworICogZXh0ZXJuYWwgc3RvcmFnZS4gIE5vdGUgdGhhdCB3aGVuIHVzaW5nIHRoZSBzdGRpbyBkYXRhIHNvdXJjZS9kZXN0aW5hdGlvbgorICogbWFuYWdlcnMsIHRoaXMgaXMgYWxzbyB0aGUgZGF0YSB0eXBlIHBhc3NlZCB0byBmcmVhZC9md3JpdGUuCisgKi8KKworI2lmZGVmIEhBVkVfVU5TSUdORURfQ0hBUgorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgSk9DVEVUOworI2RlZmluZSBHRVRKT0NURVQodmFsdWUpICAodmFsdWUpCisKKyNlbHNlIC8qIG5vdCBIQVZFX1VOU0lHTkVEX0NIQVIgKi8KKwordHlwZWRlZiBjaGFyIEpPQ1RFVDsKKyNpZmRlZiBDSEFSX0lTX1VOU0lHTkVECisjZGVmaW5lIEdFVEpPQ1RFVCh2YWx1ZSkgICh2YWx1ZSkKKyNlbHNlCisjZGVmaW5lIEdFVEpPQ1RFVCh2YWx1ZSkgICgodmFsdWUpICYgMHhGRikKKyNlbmRpZiAvKiBDSEFSX0lTX1VOU0lHTkVEICovCisKKyNlbmRpZiAvKiBIQVZFX1VOU0lHTkVEX0NIQVIgKi8KKworCisvKiBUaGVzZSB0eXBlZGVmcyBhcmUgdXNlZCBmb3IgdmFyaW91cyB0YWJsZSBlbnRyaWVzIGFuZCBzbyBmb3J0aC4KKyAqIFRoZXkgbXVzdCBiZSBhdCBsZWFzdCBhcyB3aWRlIGFzIHNwZWNpZmllZDsgYnV0IG1ha2luZyB0aGVtIHRvbyBiaWcKKyAqIHdvbid0IGNvc3QgYSBodWdlIGFtb3VudCBvZiBtZW1vcnksIHNvIHdlIGRvbid0IHByb3ZpZGUgc3BlY2lhbAorICogZXh0cmFjdGlvbiBjb2RlIGxpa2Ugd2UgZGlkIGZvciBKU0FNUExFLiAgKEluIG90aGVyIHdvcmRzLCB0aGVzZQorICogdHlwZWRlZnMgbGl2ZSBhdCBhIGRpZmZlcmVudCBwb2ludCBvbiB0aGUgc3BlZWQvc3BhY2UgdHJhZGVvZmYgY3VydmUuKQorICovCisKKyNpZiBfRlhfT1NfICE9IF9GWF9WWFdPUktTXworCisvKiBVSU5UOCBtdXN0IGhvbGQgYXQgbGVhc3QgdGhlIHZhbHVlcyAwLi4yNTUuICovCisKKyNpZmRlZiBIQVZFX1VOU0lHTkVEX0NIQVIKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBVSU5UODsKKyNlbHNlIC8qIG5vdCBIQVZFX1VOU0lHTkVEX0NIQVIgKi8KKyNpZmRlZiBDSEFSX0lTX1VOU0lHTkVECit0eXBlZGVmIGNoYXIgVUlOVDg7CisjZWxzZSAvKiBub3QgQ0hBUl9JU19VTlNJR05FRCAqLwordHlwZWRlZiBzaG9ydCBVSU5UODsKKyNlbmRpZiAvKiBDSEFSX0lTX1VOU0lHTkVEICovCisjZW5kaWYgLyogSEFWRV9VTlNJR05FRF9DSEFSICovCisKKworLyogVUlOVDE2IG11c3QgaG9sZCBhdCBsZWFzdCB0aGUgdmFsdWVzIDAuLjY1NTM1LiAqLworCisjaWZkZWYgSEFWRV9VTlNJR05FRF9TSE9SVAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVSU5UMTY7CisjZWxzZSAvKiBub3QgSEFWRV9VTlNJR05FRF9TSE9SVCAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgVUlOVDE2OworI2VuZGlmIC8qIEhBVkVfVU5TSUdORURfU0hPUlQgKi8KKworLyogSU5UMTYgbXVzdCBob2xkIGF0IGxlYXN0IHRoZSB2YWx1ZXMgLTMyNzY4Li4zMjc2Ny4gKi8KKworI2lmbmRlZiBYTURfSAkJCS8qIFgxMS94bWQuaCBjb3JyZWN0bHkgZGVmaW5lcyBJTlQxNiAqLwordHlwZWRlZiBzaG9ydCBJTlQxNjsKKyNlbmRpZgorCisvKiBJTlQzMiBtdXN0IGhvbGQgYXQgbGVhc3Qgc2lnbmVkIDMyLWJpdCB2YWx1ZXMuICovCisKKyNpZm5kZWYgWE1EX0gJCQkvKiBYMTEveG1kLmggY29ycmVjdGx5IGRlZmluZXMgSU5UMzIgKi8KK3R5cGVkZWYgaW50IElOVDMyOworI2VuZGlmCisKKyNlbmRpZiAKKworLyogRGF0YXR5cGUgdXNlZCBmb3IgaW1hZ2UgZGltZW5zaW9ucy4gIFRoZSBKUEVHIHN0YW5kYXJkIG9ubHkgc3VwcG9ydHMKKyAqIGltYWdlcyB1cCB0byA2NEsqNjRLIGR1ZSB0byAxNi1iaXQgZmllbGRzIGluIFNPRiBtYXJrZXJzLiAgVGhlcmVmb3JlCisgKiAidW5zaWduZWQgaW50IiBpcyBzdWZmaWNpZW50IG9uIGFsbCBtYWNoaW5lcy4gIEhvd2V2ZXIsIGlmIHlvdSBuZWVkIHRvCisgKiBoYW5kbGUgbGFyZ2VyIGltYWdlcyBhbmQgeW91IGRvbid0IG1pbmQgZGV2aWF0aW5nIGZyb20gdGhlIHNwZWMsIHlvdQorICogY2FuIGNoYW5nZSB0aGlzIGRhdGF0eXBlLgorICovCisKK3R5cGVkZWYgdW5zaWduZWQgaW50IEpESU1FTlNJT047CisKKyNkZWZpbmUgSlBFR19NQVhfRElNRU5TSU9OICA2NTUwMEwgIC8qIGEgdGFkIHVuZGVyIDY0SyB0byBwcmV2ZW50IG92ZXJmbG93cyAqLworCisKKy8qIFRoZXNlIG1hY3JvcyBhcmUgdXNlZCBpbiBhbGwgZnVuY3Rpb24gZGVmaW5pdGlvbnMgYW5kIGV4dGVybiBkZWNsYXJhdGlvbnMuCisgKiBZb3UgY291bGQgbW9kaWZ5IHRoZW0gaWYgeW91IG5lZWQgdG8gY2hhbmdlIGZ1bmN0aW9uIGxpbmthZ2UgY29udmVudGlvbnM7CisgKiBpbiBwYXJ0aWN1bGFyLCB5b3UnbGwgbmVlZCB0byBkbyB0aGF0IHRvIG1ha2UgdGhlIGxpYnJhcnkgYSBXaW5kb3dzIERMTC4KKyAqIEFub3RoZXIgYXBwbGljYXRpb24gaXMgdG8gbWFrZSBhbGwgZnVuY3Rpb25zIGdsb2JhbCBmb3IgdXNlIHdpdGggZGVidWdnZXJzCisgKiBvciBjb2RlIHByb2ZpbGVycyB0aGF0IHJlcXVpcmUgaXQuCisgKi8KKworLyogYSBmdW5jdGlvbiBjYWxsZWQgdGhyb3VnaCBtZXRob2QgcG9pbnRlcnM6ICovCisjZGVmaW5lIE1FVEhPRERFRih0eXBlKQkJc3RhdGljIHR5cGUKKy8qIGEgZnVuY3Rpb24gdXNlZCBvbmx5IGluIGl0cyBtb2R1bGU6ICovCisjZGVmaW5lIExPQ0FMKHR5cGUpCQlzdGF0aWMgdHlwZQorLyogYSBmdW5jdGlvbiByZWZlcmVuY2VkIHRocnUgRVhURVJOczogKi8KKyNkZWZpbmUgR0xPQkFMKHR5cGUpCQl0eXBlCisKKyNpZmRlZiBfRlhfTUFOQUdFRF9DT0RFXworI2RlZmluZSBFWFRFUk4odHlwZSkJCWV4dGVybiAiQyIgdHlwZQorI2Vsc2UKKy8qIGEgcmVmZXJlbmNlIHRvIGEgR0xPQkFMIGZ1bmN0aW9uOiAqLworI2RlZmluZSBFWFRFUk4odHlwZSkJCWV4dGVybiB0eXBlCisjZW5kaWYKKworCisvKiBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gZGVjbGFyZSBhICJtZXRob2QiLCB0aGF0IGlzLCBhIGZ1bmN0aW9uIHBvaW50ZXIuCisgKiBXZSB3YW50IHRvIHN1cHBseSBwcm90b3R5cGUgcGFyYW1ldGVycyBpZiB0aGUgY29tcGlsZXIgY2FuIGNvcGUuCisgKiBOb3RlIHRoYXQgdGhlIGFyZ2xpc3QgcGFyYW1ldGVyIG11c3QgYmUgcGFyZW50aGVzaXplZCEKKyAqIEFnYWluLCB5b3UgY2FuIGN1c3RvbWl6ZSB0aGlzIGlmIHlvdSBuZWVkIHNwZWNpYWwgbGlua2FnZSBrZXl3b3Jkcy4KKyAqLworCisjaWZkZWYgSEFWRV9QUk9UT1RZUEVTCisjZGVmaW5lIEpNRVRIT0QodHlwZSxtZXRob2RuYW1lLGFyZ2xpc3QpICB0eXBlICgqbWV0aG9kbmFtZSkgYXJnbGlzdAorI2Vsc2UKKyNkZWZpbmUgSk1FVEhPRCh0eXBlLG1ldGhvZG5hbWUsYXJnbGlzdCkgIHR5cGUgKCptZXRob2RuYW1lKSAoKQorI2VuZGlmCisKKworLyogSGVyZSBpcyB0aGUgcHNldWRvLWtleXdvcmQgZm9yIGRlY2xhcmluZyBwb2ludGVycyB0aGF0IG11c3QgYmUgImZhciIKKyAqIG9uIDgweDg2IG1hY2hpbmVzLiAgTW9zdCBvZiB0aGUgc3BlY2lhbGl6ZWQgY29kaW5nIGZvciA4MHg4NiBpcyBoYW5kbGVkCisgKiBieSBqdXN0IHNheWluZyAiRkFSICoiIHdoZXJlIHN1Y2ggYSBwb2ludGVyIGlzIG5lZWRlZC4gIEluIGEgZmV3IHBsYWNlcworICogZXhwbGljaXQgY29kaW5nIGlzIG5lZWRlZDsgc2VlIHVzZXMgb2YgdGhlIE5FRURfRkFSX1BPSU5URVJTIHN5bWJvbC4KKyAqLworCisjaWZkZWYgTkVFRF9GQVJfUE9JTlRFUlMKKyNkZWZpbmUgRkFSICBmYXIKKyNlbHNlCisvLyNkZWZpbmUgRkFSCisjZW5kaWYKKworCisvKgorICogT24gYSBmZXcgc3lzdGVtcywgdHlwZSBib29sZWFuIGFuZC9vciBpdHMgdmFsdWVzIEZBTFNFLCBUUlVFIG1heSBhcHBlYXIKKyAqIGluIHN0YW5kYXJkIGhlYWRlciBmaWxlcy4gIE9yIHlvdSBtYXkgaGF2ZSBjb25mbGljdHMgd2l0aCBhcHBsaWNhdGlvbi0KKyAqIHNwZWNpZmljIGhlYWRlciBmaWxlcyB0aGF0IHlvdSB3YW50IHRvIGluY2x1ZGUgdG9nZXRoZXIgd2l0aCB0aGVzZSBmaWxlcy4KKyAqIERlZmluaW5nIEhBVkVfQk9PTEVBTiBiZWZvcmUgaW5jbHVkaW5nIGpwZWdsaWIuaCBzaG91bGQgbWFrZSBpdCB3b3JrLgorICovCisKKyNpZm5kZWYgSEFWRV9CT09MRUFOCit0eXBlZGVmIGludCBib29sZWFuOworI2VuZGlmCisjaWZuZGVmIEZBTFNFCQkJLyogaW4gY2FzZSB0aGVzZSBtYWNyb3MgYWxyZWFkeSBleGlzdCAqLworI2RlZmluZSBGQUxTRQkwCQkvKiB2YWx1ZXMgb2YgYm9vbGVhbiAqLworI2VuZGlmCisjaWZuZGVmIFRSVUUKKyNkZWZpbmUgVFJVRQkxCisjZW5kaWYKKworCisvKgorICogVGhlIHJlbWFpbmluZyBvcHRpb25zIGFmZmVjdCBjb2RlIHNlbGVjdGlvbiB3aXRoaW4gdGhlIEpQRUcgbGlicmFyeSwKKyAqIGJ1dCB0aGV5IGRvbid0IG5lZWQgdG8gYmUgdmlzaWJsZSB0byBtb3N0IGFwcGxpY2F0aW9ucyB1c2luZyB0aGUgbGlicmFyeS4KKyAqIFRvIG1pbmltaXplIGFwcGxpY2F0aW9uIG5hbWVzcGFjZSBwb2xsdXRpb24sIHRoZSBzeW1ib2xzIHdvbid0IGJlCisgKiBkZWZpbmVkIHVubGVzcyBKUEVHX0lOVEVSTkFMUyBvciBKUEVHX0lOVEVSTkFMX09QVElPTlMgaGFzIGJlZW4gZGVmaW5lZC4KKyAqLworCisjaWZkZWYgSlBFR19JTlRFUk5BTFMKKyNkZWZpbmUgSlBFR19JTlRFUk5BTF9PUFRJT05TCisjZW5kaWYKKworI2lmZGVmIEpQRUdfSU5URVJOQUxfT1BUSU9OUworCisKKy8qCisgKiBUaGVzZSBkZWZpbmVzIGluZGljYXRlIHdoZXRoZXIgdG8gaW5jbHVkZSB2YXJpb3VzIG9wdGlvbmFsIGZ1bmN0aW9ucy4KKyAqIFVuZGVmaW5pbmcgc29tZSBvZiB0aGVzZSBzeW1ib2xzIHdpbGwgcHJvZHVjZSBhIHNtYWxsZXIgYnV0IGxlc3MgY2FwYWJsZQorICogbGlicmFyeS4gIE5vdGUgdGhhdCB5b3UgY2FuIGxlYXZlIGNlcnRhaW4gc291cmNlIGZpbGVzIG91dCBvZiB0aGUKKyAqIGNvbXBpbGF0aW9uL2xpbmtpbmcgcHJvY2VzcyBpZiB5b3UndmUgI3VuZGVmJ2QgdGhlIGNvcnJlc3BvbmRpbmcgc3ltYm9scy4KKyAqIChZb3UgbWF5IEhBVkUgdG8gZG8gdGhhdCBpZiB5b3VyIGNvbXBpbGVyIGRvZXNuJ3QgbGlrZSBudWxsIHNvdXJjZSBmaWxlcy4pCisgKi8KKworLyogQXJpdGhtZXRpYyBjb2RpbmcgaXMgdW5zdXBwb3J0ZWQgZm9yIGxlZ2FsIHJlYXNvbnMuICBDb21wbGFpbnRzIHRvIElCTS4gKi8KKworLyogQ2FwYWJpbGl0eSBvcHRpb25zIGNvbW1vbiB0byBlbmNvZGVyIGFuZCBkZWNvZGVyOiAqLworCisjZGVmaW5lIERDVF9JU0xPV19TVVBQT1JURUQJLyogc2xvdyBidXQgYWNjdXJhdGUgaW50ZWdlciBhbGdvcml0aG0gKi8KKyNkZWZpbmUgRENUX0lGQVNUX1NVUFBPUlRFRAkvKiBmYXN0ZXIsIGxlc3MgYWNjdXJhdGUgaW50ZWdlciBtZXRob2QgKi8KKyN1bmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECS8qIGZsb2F0aW5nLXBvaW50OiBhY2N1cmF0ZSwgZmFzdCBvbiBmYXN0IEhXICovCisKKy8qIEVuY29kZXIgY2FwYWJpbGl0eSBvcHRpb25zOiAqLworCisjdW5kZWYgIENfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRCAgICAvKiBBcml0aG1ldGljIGNvZGluZyBiYWNrIGVuZD8gKi8KKyNkZWZpbmUgQ19NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVEIC8qIE11bHRpcGxlLXNjYW4gSlBFRyBmaWxlcz8gKi8KKyNkZWZpbmUgQ19QUk9HUkVTU0lWRV9TVVBQT1JURUQJICAgIC8qIFByb2dyZXNzaXZlIEpQRUc/IChSZXF1aXJlcyBNVUxUSVNDQU4pKi8KKyNkZWZpbmUgRU5UUk9QWV9PUFRfU1VQUE9SVEVECSAgICAvKiBPcHRpbWl6YXRpb24gb2YgZW50cm9weSBjb2RpbmcgcGFybXM/ICovCisvKiBOb3RlOiBpZiB5b3Ugc2VsZWN0ZWQgMTItYml0IGRhdGEgcHJlY2lzaW9uLCBpdCBpcyBkYW5nZXJvdXMgdG8gdHVybiBvZmYKKyAqIEVOVFJPUFlfT1BUX1NVUFBPUlRFRC4gIFRoZSBzdGFuZGFyZCBIdWZmbWFuIHRhYmxlcyBhcmUgb25seSBnb29kIGZvciA4LWJpdAorICogcHJlY2lzaW9uLCBzbyBqY2h1ZmYuYyBub3JtYWxseSB1c2VzIGVudHJvcHkgb3B0aW1pemF0aW9uIHRvIGNvbXB1dGUKKyAqIHVzYWJsZSB0YWJsZXMgZm9yIGhpZ2hlciBwcmVjaXNpb24uICBJZiB5b3UgZG9uJ3Qgd2FudCB0byBkbyBvcHRpbWl6YXRpb24sCisgKiB5b3UnbGwgaGF2ZSB0byBzdXBwbHkgZGlmZmVyZW50IGRlZmF1bHQgSHVmZm1hbiB0YWJsZXMuCisgKiBUaGUgZXhhY3Qgc2FtZSBzdGF0ZW1lbnRzIGFwcGx5IGZvciBwcm9ncmVzc2l2ZSBKUEVHOiB0aGUgZGVmYXVsdCB0YWJsZXMKKyAqIGRvbid0IHdvcmsgZm9yIHByb2dyZXNzaXZlIG1vZGUuICAoVGhpcyBtYXkgZ2V0IGZpeGVkLCBob3dldmVyLikKKyAqLworI2RlZmluZSBJTlBVVF9TTU9PVEhJTkdfU1VQUE9SVEVEICAgLyogSW5wdXQgaW1hZ2Ugc21vb3RoaW5nIG9wdGlvbj8gKi8KKworLyogRGVjb2RlciBjYXBhYmlsaXR5IG9wdGlvbnM6ICovCisKKyN1bmRlZiAgRF9BUklUSF9DT0RJTkdfU1VQUE9SVEVEICAgIC8qIEFyaXRobWV0aWMgY29kaW5nIGJhY2sgZW5kPyAqLworI2RlZmluZSBEX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQgLyogTXVsdGlwbGUtc2NhbiBKUEVHIGZpbGVzPyAqLworI2RlZmluZSBEX1BST0dSRVNTSVZFX1NVUFBPUlRFRAkgICAgLyogUHJvZ3Jlc3NpdmUgSlBFRz8gKFJlcXVpcmVzIE1VTFRJU0NBTikqLworI2RlZmluZSBTQVZFX01BUktFUlNfU1VQUE9SVEVECSAgICAvKiBqcGVnX3NhdmVfbWFya2VycygpIG5lZWRlZD8gKi8KKyNkZWZpbmUgQkxPQ0tfU01PT1RISU5HX1NVUFBPUlRFRCAgIC8qIEJsb2NrIHNtb290aGluZz8gKFByb2dyZXNzaXZlIG9ubHkpICovCisjZGVmaW5lIElEQ1RfU0NBTElOR19TVVBQT1JURUQJICAgIC8qIE91dHB1dCByZXNjYWxpbmcgdmlhIElEQ1Q/ICovCisjdW5kZWYgVVBTQU1QTEVfU0NBTElOR19TVVBQT1JURUQgIC8qIE91dHB1dCByZXNjYWxpbmcgYXQgdXBzYW1wbGUgc3RhZ2U/ICovCisjZGVmaW5lIFVQU0FNUExFX01FUkdJTkdfU1VQUE9SVEVEICAvKiBGYXN0IHBhdGggZm9yIHNsb3BweSB1cHNhbXBsaW5nPyAqLworI3VuZGVmIFFVQU5UXzFQQVNTX1NVUFBPUlRFRAkgICAgLyogMS1wYXNzIGNvbG9yIHF1YW50aXphdGlvbj8gKi8KKyN1bmRlZiBRVUFOVF8yUEFTU19TVVBQT1JURUQJICAgIC8qIDItcGFzcyBjb2xvciBxdWFudGl6YXRpb24/ICovCisKKy8qIG1vcmUgY2FwYWJpbGl0eSBvcHRpb25zIGxhdGVyLCBubyBkb3VidCAqLworCisKKy8qCisgKiBPcmRlcmluZyBvZiBSR0IgZGF0YSBpbiBzY2FubGluZXMgcGFzc2VkIHRvIG9yIGZyb20gdGhlIGFwcGxpY2F0aW9uLgorICogSWYgeW91ciBhcHBsaWNhdGlvbiB3YW50cyB0byBkZWFsIHdpdGggZGF0YSBpbiB0aGUgb3JkZXIgQixHLFIsIGp1c3QKKyAqIGNoYW5nZSB0aGVzZSBtYWNyb3MuICBZb3UgY2FuIGFsc28gZGVhbCB3aXRoIGZvcm1hdHMgc3VjaCBhcyBSLEcsQixYCisgKiAob25lIGV4dHJhIGJ5dGUgcGVyIHBpeGVsKSBieSBjaGFuZ2luZyBSR0JfUElYRUxTSVpFLiAgTm90ZSB0aGF0IGNoYW5naW5nCisgKiB0aGUgb2Zmc2V0cyB3aWxsIGFsc28gY2hhbmdlIHRoZSBvcmRlciBpbiB3aGljaCBjb2xvcm1hcCBkYXRhIGlzIG9yZ2FuaXplZC4KKyAqIFJFU1RSSUNUSU9OUzoKKyAqIDEuIFRoZSBzYW1wbGUgYXBwbGljYXRpb25zIGNqcGVnLGRqcGVnIGRvIE5PVCBzdXBwb3J0IG1vZGlmaWVkIFJHQiBmb3JtYXRzLgorICogMi4gVGhlc2UgbWFjcm9zIG9ubHkgYWZmZWN0IFJHQjw9PllDYkNyIGNvbG9yIGNvbnZlcnNpb24sIHNvIHRoZXkgYXJlIG5vdAorICogICAgdXNlZnVsIGlmIHlvdSBhcmUgdXNpbmcgSlBFRyBjb2xvciBzcGFjZXMgb3RoZXIgdGhhbiBZQ2JDciBvciBncmF5c2NhbGUuCisgKiAzLiBUaGUgY29sb3IgcXVhbnRpemVyIG1vZHVsZXMgd2lsbCBub3QgYmVoYXZlIGRlc2lyYWJseSBpZiBSR0JfUElYRUxTSVpFCisgKiAgICBpcyBub3QgMyAodGhleSBkb24ndCB1bmRlcnN0YW5kIGFib3V0IGR1bW15IGNvbG9yIGNvbXBvbmVudHMhKS4gIFNvIHlvdQorICogICAgY2FuJ3QgdXNlIGNvbG9yIHF1YW50aXphdGlvbiBpZiB5b3UgY2hhbmdlIHRoYXQgdmFsdWUuCisgKi8KKworI2RlZmluZSBSR0JfUkVECQkwCS8qIE9mZnNldCBvZiBSZWQgaW4gYW4gUkdCIHNjYW5saW5lIGVsZW1lbnQgKi8KKyNkZWZpbmUgUkdCX0dSRUVOCTEJLyogT2Zmc2V0IG9mIEdyZWVuICovCisjZGVmaW5lIFJHQl9CTFVFCTIJLyogT2Zmc2V0IG9mIEJsdWUgKi8KKyNkZWZpbmUgUkdCX1BJWEVMU0laRQkzCS8qIEpTQU1QTEVzIHBlciBSR0Igc2NhbmxpbmUgZWxlbWVudCAqLworCisKKy8qIERlZmluaXRpb25zIGZvciBzcGVlZC1yZWxhdGVkIG9wdGltaXphdGlvbnMuICovCisKKworLyogSWYgeW91ciBjb21waWxlciBzdXBwb3J0cyBpbmxpbmUgZnVuY3Rpb25zLCBkZWZpbmUgSU5MSU5FCisgKiBhcyB0aGUgaW5saW5lIGtleXdvcmQ7IG90aGVyd2lzZSBkZWZpbmUgaXQgYXMgZW1wdHkuCisgKi8KKworI2lmbmRlZiBJTkxJTkUKKyNpZmRlZiBfX0dOVUNfXwkJCS8qIGZvciBpbnN0YW5jZSwgR05VIEMga25vd3MgYWJvdXQgaW5saW5lICovCisjZGVmaW5lIElOTElORSBfX2lubGluZV9fCisjZW5kaWYKKyNpZm5kZWYgSU5MSU5FCisjZGVmaW5lIElOTElORQkJCS8qIGRlZmF1bHQgaXMgdG8gZGVmaW5lIGl0IGFzIGVtcHR5ICovCisjZW5kaWYKKyNlbmRpZgorCisKKy8qIE9uIHNvbWUgbWFjaGluZXMgKG5vdGFibHkgNjgwMDAgc2VyaWVzKSAiaW50IiBpcyAzMiBiaXRzLCBidXQgbXVsdGlwbHlpbmcKKyAqIHR3byAxNi1iaXQgc2hvcnRzIGlzIGZhc3RlciB0aGFuIG11bHRpcGx5aW5nIHR3byBpbnRzLiAgRGVmaW5lIE1VTFRJUExJRVIKKyAqIGFzIHNob3J0IG9uIHN1Y2ggYSBtYWNoaW5lLiAgTVVMVElQTElFUiBtdXN0IGJlIGF0IGxlYXN0IDE2IGJpdHMgd2lkZS4KKyAqLworCisjaWZuZGVmIE1VTFRJUExJRVIKKyNkZWZpbmUgTVVMVElQTElFUiAgaW50CQkvKiB0eXBlIGZvciBmYXN0ZXN0IGludGVnZXIgbXVsdGlwbHkgKi8KKyNlbmRpZgorCisKKy8qIEZBU1RfRkxPQVQgc2hvdWxkIGJlIGVpdGhlciBmbG9hdCBvciBkb3VibGUsIHdoaWNoZXZlciBpcyBkb25lIGZhc3RlcgorICogYnkgeW91ciBjb21waWxlci4gIChOb3RlIHRoYXQgdGhpcyB0eXBlIGlzIG9ubHkgdXNlZCBpbiB0aGUgZmxvYXRpbmcgcG9pbnQKKyAqIERDVCByb3V0aW5lcywgc28gaXQgb25seSBtYXR0ZXJzIGlmIHlvdSd2ZSBkZWZpbmVkIERDVF9GTE9BVF9TVVBQT1JURUQuKQorICogVHlwaWNhbGx5LCBmbG9hdCBpcyBmYXN0ZXIgaW4gQU5TSSBDIGNvbXBpbGVycywgd2hpbGUgZG91YmxlIGlzIGZhc3RlciBpbgorICogcHJlLUFOU0kgY29tcGlsZXJzIChiZWNhdXNlIHRoZXkgaW5zaXN0IG9uIGNvbnZlcnRpbmcgdG8gZG91YmxlIGFueXdheSkuCisgKiBUaGUgY29kZSBiZWxvdyB0aGVyZWZvcmUgY2hvb3NlcyBmbG9hdCBpZiB3ZSBoYXZlIEFOU0ktc3R5bGUgcHJvdG90eXBlcy4KKyAqLworCisjaWZuZGVmIEZBU1RfRkxPQVQKKyNpZmRlZiBIQVZFX1BST1RPVFlQRVMKKyNkZWZpbmUgRkFTVF9GTE9BVCAgZmxvYXQKKyNlbHNlCisjZGVmaW5lIEZBU1RfRkxPQVQgIGRvdWJsZQorI2VuZGlmCisjZW5kaWYKKworI2VuZGlmIC8qIEpQRUdfSU5URVJOQUxfT1BUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2pwZWdpbnQuaCBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9qcGVnaW50LmgKaW5kZXggNjg1YTM2MS4uOTViMDBkNCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2pwZWdpbnQuaAorKysgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvanBlZ2ludC5oCkBAIC0xLDM5MiArMSwzOTIgQEAKLS8qDQotICoganBlZ2ludC5oDQotICoNCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuDQotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4NCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuDQotICoNCi0gKiBUaGlzIGZpbGUgcHJvdmlkZXMgY29tbW9uIGRlY2xhcmF0aW9ucyBmb3IgdGhlIHZhcmlvdXMgSlBFRyBtb2R1bGVzLg0KLSAqIFRoZXNlIGRlY2xhcmF0aW9ucyBhcmUgY29uc2lkZXJlZCBpbnRlcm5hbCB0byB0aGUgSlBFRyBsaWJyYXJ5OyBtb3N0DQotICogYXBwbGljYXRpb25zIHVzaW5nIHRoZSBsaWJyYXJ5IHNob3VsZG4ndCBuZWVkIHRvIGluY2x1ZGUgdGhpcyBmaWxlLg0KLSAqLw0KLQ0KLQ0KLS8qIERlY2xhcmF0aW9ucyBmb3IgYm90aCBjb21wcmVzc2lvbiAmIGRlY29tcHJlc3Npb24gKi8NCi0NCi10eXBlZGVmIGVudW0gewkJCS8qIE9wZXJhdGluZyBtb2RlcyBmb3IgYnVmZmVyIGNvbnRyb2xsZXJzICovDQotCUpCVUZfUEFTU19USFJVLAkJLyogUGxhaW4gc3RyaXB3aXNlIG9wZXJhdGlvbiAqLw0KLQkvKiBSZW1haW5pbmcgbW9kZXMgcmVxdWlyZSBhIGZ1bGwtaW1hZ2UgYnVmZmVyIHRvIGhhdmUgYmVlbiBjcmVhdGVkICovDQotCUpCVUZfU0FWRV9TT1VSQ0UsCS8qIFJ1biBzb3VyY2Ugc3Vib2JqZWN0IG9ubHksIHNhdmUgb3V0cHV0ICovDQotCUpCVUZfQ1JBTktfREVTVCwJLyogUnVuIGRlc3Qgc3Vib2JqZWN0IG9ubHksIHVzaW5nIHNhdmVkIGRhdGEgKi8NCi0JSkJVRl9TQVZFX0FORF9QQVNTCS8qIFJ1biBib3RoIHN1Ym9iamVjdHMsIHNhdmUgb3V0cHV0ICovDQotfSBKX0JVRl9NT0RFOw0KLQ0KLS8qIFZhbHVlcyBvZiBnbG9iYWxfc3RhdGUgZmllbGQgKGpkYXBpLmMgaGFzIHNvbWUgZGVwZW5kZW5jaWVzIG9uIG9yZGVyaW5nISkgKi8NCi0jZGVmaW5lIENTVEFURV9TVEFSVAkxMDAJLyogYWZ0ZXIgY3JlYXRlX2NvbXByZXNzICovDQotI2RlZmluZSBDU1RBVEVfU0NBTk5JTkcJMTAxCS8qIHN0YXJ0X2NvbXByZXNzIGRvbmUsIHdyaXRlX3NjYW5saW5lcyBPSyAqLw0KLSNkZWZpbmUgQ1NUQVRFX1JBV19PSwkxMDIJLyogc3RhcnRfY29tcHJlc3MgZG9uZSwgd3JpdGVfcmF3X2RhdGEgT0sgKi8NCi0jZGVmaW5lIENTVEFURV9XUkNPRUZTCTEwMwkvKiBqcGVnX3dyaXRlX2NvZWZmaWNpZW50cyBkb25lICovDQotI2RlZmluZSBEU1RBVEVfU1RBUlQJMjAwCS8qIGFmdGVyIGNyZWF0ZV9kZWNvbXByZXNzICovDQotI2RlZmluZSBEU1RBVEVfSU5IRUFERVIJMjAxCS8qIHJlYWRpbmcgaGVhZGVyIG1hcmtlcnMsIG5vIFNPUyB5ZXQgKi8NCi0jZGVmaW5lIERTVEFURV9SRUFEWQkyMDIJLyogZm91bmQgU09TLCByZWFkeSBmb3Igc3RhcnRfZGVjb21wcmVzcyAqLw0KLSNkZWZpbmUgRFNUQVRFX1BSRUxPQUQJMjAzCS8qIHJlYWRpbmcgbXVsdGlzY2FuIGZpbGUgaW4gc3RhcnRfZGVjb21wcmVzcyovDQotI2RlZmluZSBEU1RBVEVfUFJFU0NBTgkyMDQJLyogcGVyZm9ybWluZyBkdW1teSBwYXNzIGZvciAyLXBhc3MgcXVhbnQgKi8NCi0jZGVmaW5lIERTVEFURV9TQ0FOTklORwkyMDUJLyogc3RhcnRfZGVjb21wcmVzcyBkb25lLCByZWFkX3NjYW5saW5lcyBPSyAqLw0KLSNkZWZpbmUgRFNUQVRFX1JBV19PSwkyMDYJLyogc3RhcnRfZGVjb21wcmVzcyBkb25lLCByZWFkX3Jhd19kYXRhIE9LICovDQotI2RlZmluZSBEU1RBVEVfQlVGSU1BR0UJMjA3CS8qIGV4cGVjdGluZyBqcGVnX3N0YXJ0X291dHB1dCAqLw0KLSNkZWZpbmUgRFNUQVRFX0JVRlBPU1QJMjA4CS8qIGxvb2tpbmcgZm9yIFNPUy9FT0kgaW4ganBlZ19maW5pc2hfb3V0cHV0ICovDQotI2RlZmluZSBEU1RBVEVfUkRDT0VGUwkyMDkJLyogcmVhZGluZyBmaWxlIGluIGpwZWdfcmVhZF9jb2VmZmljaWVudHMgKi8NCi0jZGVmaW5lIERTVEFURV9TVE9QUElORwkyMTAJLyogbG9va2luZyBmb3IgRU9JIGluIGpwZWdfZmluaXNoX2RlY29tcHJlc3MgKi8NCi0NCi0NCi0vKiBEZWNsYXJhdGlvbnMgZm9yIGNvbXByZXNzaW9uIG1vZHVsZXMgKi8NCi0NCi0vKiBNYXN0ZXIgY29udHJvbCBtb2R1bGUgKi8NCi1zdHJ1Y3QganBlZ19jb21wX21hc3RlciB7DQotICBKTUVUSE9EKHZvaWQsIHByZXBhcmVfZm9yX3Bhc3MsIChqX2NvbXByZXNzX3B0ciBjaW5mbykpOw0KLSAgSk1FVEhPRCh2b2lkLCBwYXNzX3N0YXJ0dXAsIChqX2NvbXByZXNzX3B0ciBjaW5mbykpOw0KLSAgSk1FVEhPRCh2b2lkLCBmaW5pc2hfcGFzcywgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotDQotICAvKiBTdGF0ZSB2YXJpYWJsZXMgbWFkZSB2aXNpYmxlIHRvIG90aGVyIG1vZHVsZXMgKi8NCi0gIGJvb2xlYW4gY2FsbF9wYXNzX3N0YXJ0dXA7CS8qIFRydWUgaWYgcGFzc19zdGFydHVwIG11c3QgYmUgY2FsbGVkICovDQotICBib29sZWFuIGlzX2xhc3RfcGFzczsJCS8qIFRydWUgZHVyaW5nIGxhc3QgcGFzcyAqLw0KLX07DQotDQotLyogTWFpbiBidWZmZXIgY29udHJvbCAoZG93bnNhbXBsZWQtZGF0YSBidWZmZXIpICovDQotc3RydWN0IGpwZWdfY19tYWluX2NvbnRyb2xsZXIgew0KLSAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9jb21wcmVzc19wdHIgY2luZm8sIEpfQlVGX01PREUgcGFzc19tb2RlKSk7DQotICBKTUVUSE9EKHZvaWQsIHByb2Nlc3NfZGF0YSwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCSAgICAgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiAqaW5fcm93X2N0ciwNCi0JCQkgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dzX2F2YWlsKSk7DQotfTsNCi0NCi0vKiBDb21wcmVzc2lvbiBwcmVwcm9jZXNzaW5nIChkb3duc2FtcGxpbmcgaW5wdXQgYnVmZmVyIGNvbnRyb2wpICovDQotc3RydWN0IGpwZWdfY19wcmVwX2NvbnRyb2xsZXIgew0KLSAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9jb21wcmVzc19wdHIgY2luZm8sIEpfQlVGX01PREUgcGFzc19tb2RlKSk7DQotICBKTUVUSE9EKHZvaWQsIHByZV9wcm9jZXNzX2RhdGEsIChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJICAgSlNBTVBBUlJBWSBpbnB1dF9idWYsDQotCQkJCSAgIEpESU1FTlNJT04gKmluX3Jvd19jdHIsDQotCQkJCSAgIEpESU1FTlNJT04gaW5fcm93c19hdmFpbCwNCi0JCQkJICAgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLA0KLQkJCQkgICBKRElNRU5TSU9OICpvdXRfcm93X2dyb3VwX2N0ciwNCi0JCQkJICAgSkRJTUVOU0lPTiBvdXRfcm93X2dyb3Vwc19hdmFpbCkpOw0KLX07DQotDQotLyogQ29lZmZpY2llbnQgYnVmZmVyIGNvbnRyb2wgKi8NCi1zdHJ1Y3QganBlZ19jX2NvZWZfY29udHJvbGxlciB7DQotICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSl9CVUZfTU9ERSBwYXNzX21vZGUpKTsNCi0gIEpNRVRIT0QoYm9vbGVhbiwgY29tcHJlc3NfZGF0YSwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQkgICBKU0FNUElNQUdFIGlucHV0X2J1ZikpOw0KLX07DQotDQotLyogQ29sb3JzcGFjZSBjb252ZXJzaW9uICovDQotc3RydWN0IGpwZWdfY29sb3JfY29udmVydGVyIHsNCi0gIEpNRVRIT0Qodm9pZCwgc3RhcnRfcGFzcywgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotICBKTUVUSE9EKHZvaWQsIGNvbG9yX2NvbnZlcnQsIChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwNCi0JCQkJSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpKTsNCi19Ow0KLQ0KLS8qIERvd25zYW1wbGluZyAqLw0KLXN0cnVjdCBqcGVnX2Rvd25zYW1wbGVyIHsNCi0gIEpNRVRIT0Qodm9pZCwgc3RhcnRfcGFzcywgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotICBKTUVUSE9EKHZvaWQsIGRvd25zYW1wbGUsIChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGluX3Jvd19pbmRleCwNCi0JCQkgICAgIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwNCi0JCQkgICAgIEpESU1FTlNJT04gb3V0X3Jvd19ncm91cF9pbmRleCkpOw0KLQ0KLSAgYm9vbGVhbiBuZWVkX2NvbnRleHRfcm93czsJLyogVFJVRSBpZiBuZWVkIHJvd3MgYWJvdmUgJiBiZWxvdyAqLw0KLX07DQotDQotLyogRm9yd2FyZCBEQ1QgKGFsc28gY29udHJvbHMgY29lZmZpY2llbnQgcXVhbnRpemF0aW9uKSAqLw0KLXN0cnVjdCBqcGVnX2ZvcndhcmRfZGN0IHsNCi0gIEpNRVRIT0Qodm9pZCwgc3RhcnRfcGFzcywgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotICAvKiBwZXJoYXBzIHRoaXMgc2hvdWxkIGJlIGFuIGFycmF5Pz8/ICovDQotICBKTUVUSE9EKHZvaWQsIGZvcndhcmRfRENULCAoal9jb21wcmVzc19wdHIgY2luZm8sDQotCQkJICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsDQotCQkJICAgICAgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkJMT0NLUk9XIGNvZWZfYmxvY2tzLA0KLQkJCSAgICAgIEpESU1FTlNJT04gc3RhcnRfcm93LCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwNCi0JCQkgICAgICBKRElNRU5TSU9OIG51bV9ibG9ja3MpKTsNCi19Ow0KLQ0KLS8qIEVudHJvcHkgZW5jb2RpbmcgKi8NCi1zdHJ1Y3QganBlZ19lbnRyb3B5X2VuY29kZXIgew0KLSAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9jb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gZ2F0aGVyX3N0YXRpc3RpY3MpKTsNCi0gIEpNRVRIT0QoYm9vbGVhbiwgZW5jb2RlX21jdSwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKSk7DQotICBKTUVUSE9EKHZvaWQsIGZpbmlzaF9wYXNzLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi19Ow0KLQ0KLS8qIE1hcmtlciB3cml0aW5nICovDQotc3RydWN0IGpwZWdfbWFya2VyX3dyaXRlciB7DQotICBKTUVUSE9EKHZvaWQsIHdyaXRlX2ZpbGVfaGVhZGVyLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi0gIEpNRVRIT0Qodm9pZCwgd3JpdGVfZnJhbWVfaGVhZGVyLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi0gIEpNRVRIT0Qodm9pZCwgd3JpdGVfc2Nhbl9oZWFkZXIsIChqX2NvbXByZXNzX3B0ciBjaW5mbykpOw0KLSAgSk1FVEhPRCh2b2lkLCB3cml0ZV9maWxlX3RyYWlsZXIsIChqX2NvbXByZXNzX3B0ciBjaW5mbykpOw0KLSAgSk1FVEhPRCh2b2lkLCB3cml0ZV90YWJsZXNfb25seSwgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotICAvKiBUaGVzZSByb3V0aW5lcyBhcmUgZXhwb3J0ZWQgdG8gYWxsb3cgaW5zZXJ0aW9uIG9mIGV4dHJhIG1hcmtlcnMgKi8NCi0gIC8qIFByb2JhYmx5IG9ubHkgQ09NIGFuZCBBUFBuIG1hcmtlcnMgc2hvdWxkIGJlIHdyaXR0ZW4gdGhpcyB3YXkgKi8NCi0gIEpNRVRIT0Qodm9pZCwgd3JpdGVfbWFya2VyX2hlYWRlciwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyLA0KLQkJCQkgICAgICB1bnNpZ25lZCBpbnQgZGF0YWxlbikpOw0KLSAgSk1FVEhPRCh2b2lkLCB3cml0ZV9tYXJrZXJfYnl0ZSwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgdmFsKSk7DQotfTsNCi0NCi0NCi0vKiBEZWNsYXJhdGlvbnMgZm9yIGRlY29tcHJlc3Npb24gbW9kdWxlcyAqLw0KLQ0KLS8qIE1hc3RlciBjb250cm9sIG1vZHVsZSAqLw0KLXN0cnVjdCBqcGVnX2RlY29tcF9tYXN0ZXIgew0KLSAgSk1FVEhPRCh2b2lkLCBwcmVwYXJlX2Zvcl9vdXRwdXRfcGFzcywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi0gIEpNRVRIT0Qodm9pZCwgZmluaXNoX291dHB1dF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLQ0KLSAgLyogU3RhdGUgdmFyaWFibGVzIG1hZGUgdmlzaWJsZSB0byBvdGhlciBtb2R1bGVzICovDQotICBib29sZWFuIGlzX2R1bW15X3Bhc3M7CS8qIFRydWUgZHVyaW5nIDFzdCBwYXNzIGZvciAyLXBhc3MgcXVhbnQgKi8NCi19Ow0KLQ0KLS8qIElucHV0IGNvbnRyb2wgbW9kdWxlICovDQotc3RydWN0IGpwZWdfaW5wdXRfY29udHJvbGxlciB7DQotICBKTUVUSE9EKGludCwgY29uc3VtZV9pbnB1dCwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi0gIEpNRVRIT0Qodm9pZCwgcmVzZXRfaW5wdXRfY29udHJvbGxlciwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi0gIEpNRVRIT0Qodm9pZCwgc3RhcnRfaW5wdXRfcGFzcywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi0gIEpNRVRIT0Qodm9pZCwgZmluaXNoX2lucHV0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotDQotICAvKiBTdGF0ZSB2YXJpYWJsZXMgbWFkZSB2aXNpYmxlIHRvIG90aGVyIG1vZHVsZXMgKi8NCi0gIGJvb2xlYW4gaGFzX211bHRpcGxlX3NjYW5zOwkvKiBUcnVlIGlmIGZpbGUgaGFzIG11bHRpcGxlIHNjYW5zICovDQotICBib29sZWFuIGVvaV9yZWFjaGVkOwkJLyogVHJ1ZSB3aGVuIEVPSSBoYXMgYmVlbiBjb25zdW1lZCAqLw0KLX07DQotDQotLyogTWFpbiBidWZmZXIgY29udHJvbCAoZG93bnNhbXBsZWQtZGF0YSBidWZmZXIpICovDQotc3RydWN0IGpwZWdfZF9tYWluX2NvbnRyb2xsZXIgew0KLSAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSl9CVUZfTU9ERSBwYXNzX21vZGUpKTsNCi0gIEpNRVRIT0Qodm9pZCwgcHJvY2Vzc19kYXRhLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OICpvdXRfcm93X2N0ciwNCi0JCQkgICAgICAgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkpOw0KLX07DQotDQotLyogQ29lZmZpY2llbnQgYnVmZmVyIGNvbnRyb2wgKi8NCi1zdHJ1Y3QganBlZ19kX2NvZWZfY29udHJvbGxlciB7DQotICBKTUVUSE9EKHZvaWQsIHN0YXJ0X2lucHV0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotICBKTUVUSE9EKGludCwgY29uc3VtZV9kYXRhLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLSAgSk1FVEhPRCh2b2lkLCBzdGFydF9vdXRwdXRfcGFzcywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi0gIEpNRVRIT0QoaW50LCBkZWNvbXByZXNzX2RhdGEsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQkgSlNBTVBJTUFHRSBvdXRwdXRfYnVmKSk7DQotICAvKiBQb2ludGVyIHRvIGFycmF5IG9mIGNvZWZmaWNpZW50IHZpcnR1YWwgYXJyYXlzLCBvciBOVUxMIGlmIG5vbmUgKi8NCi0gIGp2aXJ0X2JhcnJheV9wdHIgKmNvZWZfYXJyYXlzOw0KLX07DQotDQotLyogRGVjb21wcmVzc2lvbiBwb3N0cHJvY2Vzc2luZyAoY29sb3IgcXVhbnRpemF0aW9uIGJ1ZmZlciBjb250cm9sKSAqLw0KLXN0cnVjdCBqcGVnX2RfcG9zdF9jb250cm9sbGVyIHsNCi0gIEpNRVRIT0Qodm9pZCwgc3RhcnRfcGFzcywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpfQlVGX01PREUgcGFzc19tb2RlKSk7DQotICBKTUVUSE9EKHZvaWQsIHBvc3RfcHJvY2Vzc19kYXRhLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLA0KLQkJCQkgICAgSkRJTUVOU0lPTiAqaW5fcm93X2dyb3VwX2N0ciwNCi0JCQkJICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3Vwc19hdmFpbCwNCi0JCQkJICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwNCi0JCQkJICAgIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLA0KLQkJCQkgICAgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkpOw0KLX07DQotDQotLyogTWFya2VyIHJlYWRpbmcgJiBwYXJzaW5nICovDQotc3RydWN0IGpwZWdfbWFya2VyX3JlYWRlciB7DQotICBKTUVUSE9EKHZvaWQsIHJlc2V0X21hcmtlcl9yZWFkZXIsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotICAvKiBSZWFkIG1hcmtlcnMgdW50aWwgU09TIG9yIEVPSS4NCi0gICAqIFJldHVybnMgc2FtZSBjb2RlcyBhcyBhcmUgZGVmaW5lZCBmb3IganBlZ19jb25zdW1lX2lucHV0Og0KLSAgICogSlBFR19TVVNQRU5ERUQsIEpQRUdfUkVBQ0hFRF9TT1MsIG9yIEpQRUdfUkVBQ0hFRF9FT0kuDQotICAgKi8NCi0gIEpNRVRIT0QoaW50LCByZWFkX21hcmtlcnMsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotICAvKiBSZWFkIGEgcmVzdGFydCBtYXJrZXIgLS0tIGV4cG9ydGVkIGZvciB1c2UgYnkgZW50cm9weSBkZWNvZGVyIG9ubHkgKi8NCi0gIGpwZWdfbWFya2VyX3BhcnNlcl9tZXRob2QgcmVhZF9yZXN0YXJ0X21hcmtlcjsNCi0NCi0gIC8qIFN0YXRlIG9mIG1hcmtlciByZWFkZXIgLS0tIG5vbWluYWxseSBpbnRlcm5hbCwgYnV0IGFwcGxpY2F0aW9ucw0KLSAgICogc3VwcGx5aW5nIENPTSBvciBBUFBuIGhhbmRsZXJzIG1pZ2h0IGxpa2UgdG8ga25vdyB0aGUgc3RhdGUuDQotICAgKi8NCi0gIGJvb2xlYW4gc2F3X1NPSTsJCS8qIGZvdW5kIFNPST8gKi8NCi0gIGJvb2xlYW4gc2F3X1NPRjsJCS8qIGZvdW5kIFNPRj8gKi8NCi0gIGludCBuZXh0X3Jlc3RhcnRfbnVtOwkJLyogbmV4dCByZXN0YXJ0IG51bWJlciBleHBlY3RlZCAoMC03KSAqLw0KLSAgdW5zaWduZWQgaW50IGRpc2NhcmRlZF9ieXRlczsJLyogIyBvZiBieXRlcyBza2lwcGVkIGxvb2tpbmcgZm9yIGEgbWFya2VyICovDQotfTsNCi0NCi0vKiBFbnRyb3B5IGRlY29kaW5nICovDQotc3RydWN0IGpwZWdfZW50cm9weV9kZWNvZGVyIHsNCi0gIEpNRVRIT0Qodm9pZCwgc3RhcnRfcGFzcywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi0gIEpNRVRIT0QoYm9vbGVhbiwgZGVjb2RlX21jdSwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sDQotCQkJCUpCTE9DS1JPVyAqTUNVX2RhdGEpKTsNCi0NCi0gIC8qIFRoaXMgaXMgaGVyZSB0byBzaGFyZSBjb2RlIGJldHdlZW4gYmFzZWxpbmUgYW5kIHByb2dyZXNzaXZlIGRlY29kZXJzOyAqLw0KLSAgLyogb3RoZXIgbW9kdWxlcyBwcm9iYWJseSBzaG91bGQgbm90IHVzZSBpdCAqLw0KLSAgYm9vbGVhbiBpbnN1ZmZpY2llbnRfZGF0YTsJLyogc2V0IFRSVUUgYWZ0ZXIgZW1pdHRpbmcgd2FybmluZyAqLw0KLX07DQotDQotLyogSW52ZXJzZSBEQ1QgKGFsc28gcGVyZm9ybXMgZGVxdWFudGl6YXRpb24pICovDQotdHlwZWRlZiBKTUVUSE9EKHZvaWQsIGludmVyc2VfRENUX21ldGhvZF9wdHIsDQotCQkoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsDQotCQkgSkNPRUZQVFIgY29lZl9ibG9jaywNCi0JCSBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOw0KLQ0KLXN0cnVjdCBqcGVnX2ludmVyc2VfZGN0IHsNCi0gIEpNRVRIT0Qodm9pZCwgc3RhcnRfcGFzcywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi0gIC8qIEl0IGlzIHVzZWZ1bCB0byBhbGxvdyBlYWNoIGNvbXBvbmVudCB0byBoYXZlIGEgc2VwYXJhdGUgSURDVCBtZXRob2QuICovDQotICBpbnZlcnNlX0RDVF9tZXRob2RfcHRyIGludmVyc2VfRENUW01BWF9DT01QT05FTlRTXTsNCi19Ow0KLQ0KLS8qIFVwc2FtcGxpbmcgKG5vdGUgdGhhdCB1cHNhbXBsZXIgbXVzdCBhbHNvIGNhbGwgY29sb3IgY29udmVydGVyKSAqLw0KLXN0cnVjdCBqcGVnX3Vwc2FtcGxlciB7DQotICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotICBKTUVUSE9EKHZvaWQsIHVwc2FtcGxlLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwNCi0JCQkgICBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLA0KLQkJCSAgIEpESU1FTlNJT04gaW5fcm93X2dyb3Vwc19hdmFpbCwNCi0JCQkgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsDQotCQkJICAgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsDQotCQkJICAgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkpOw0KLQ0KLSAgYm9vbGVhbiBuZWVkX2NvbnRleHRfcm93czsJLyogVFJVRSBpZiBuZWVkIHJvd3MgYWJvdmUgJiBiZWxvdyAqLw0KLX07DQotDQotLyogQ29sb3JzcGFjZSBjb252ZXJzaW9uICovDQotc3RydWN0IGpwZWdfY29sb3JfZGVjb252ZXJ0ZXIgew0KLSAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLSAgSk1FVEhPRCh2b2lkLCBjb2xvcl9jb252ZXJ0LCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LA0KLQkJCQlKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykpOw0KLX07DQotDQotLyogQ29sb3IgcXVhbnRpemF0aW9uIG9yIGNvbG9yIHByZWNpc2lvbiByZWR1Y3Rpb24gKi8NCi1zdHJ1Y3QganBlZ19jb2xvcl9xdWFudGl6ZXIgew0KLSAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBpc19wcmVfc2NhbikpOw0KLSAgSk1FVEhPRCh2b2lkLCBjb2xvcl9xdWFudGl6ZSwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sDQotCQkJCSBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLA0KLQkJCQkgaW50IG51bV9yb3dzKSk7DQotICBKTUVUSE9EKHZvaWQsIGZpbmlzaF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLSAgSk1FVEhPRCh2b2lkLCBuZXdfY29sb3JfbWFwLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLX07DQotDQotDQotLyogTWlzY2VsbGFuZW91cyB1c2VmdWwgbWFjcm9zICovDQotDQotI3VuZGVmIE1BWA0KLSNkZWZpbmUgTUFYKGEsYikJKChhKSA+IChiKSA/IChhKSA6IChiKSkNCi0jdW5kZWYgTUlODQotI2RlZmluZSBNSU4oYSxiKQkoKGEpIDwgKGIpID8gKGEpIDogKGIpKQ0KLQ0KLQ0KLS8qIFdlIGFzc3VtZSB0aGF0IHJpZ2h0IHNoaWZ0IGNvcnJlc3BvbmRzIHRvIHNpZ25lZCBkaXZpc2lvbiBieSAyIHdpdGgNCi0gKiByb3VuZGluZyB0b3dhcmRzIG1pbnVzIGluZmluaXR5LiAgVGhpcyBpcyBjb3JyZWN0IGZvciB0eXBpY2FsICJhcml0aG1ldGljDQotICogc2hpZnQiIGluc3RydWN0aW9ucyB0aGF0IHNoaWZ0IGluIGNvcGllcyBvZiB0aGUgc2lnbiBiaXQuICBCdXQgc29tZQ0KLSAqIEMgY29tcGlsZXJzIGltcGxlbWVudCA+PiB3aXRoIGFuIHVuc2lnbmVkIHNoaWZ0LiAgRm9yIHRoZXNlIG1hY2hpbmVzIHlvdQ0KLSAqIG11c3QgZGVmaW5lIFJJR0hUX1NISUZUX0lTX1VOU0lHTkVELg0KLSAqIFJJR0hUX1NISUZUIHByb3ZpZGVzIGEgcHJvcGVyIHNpZ25lZCByaWdodCBzaGlmdCBvZiBhbiBJTlQzMiBxdWFudGl0eS4NCi0gKiBJdCBpcyBvbmx5IGFwcGxpZWQgd2l0aCBjb25zdGFudCBzaGlmdCBjb3VudHMuICBTSElGVF9URU1QUyBtdXN0IGJlDQotICogaW5jbHVkZWQgaW4gdGhlIHZhcmlhYmxlcyBvZiBhbnkgcm91dGluZSB1c2luZyBSSUdIVF9TSElGVC4NCi0gKi8NCi0NCi0jaWZkZWYgUklHSFRfU0hJRlRfSVNfVU5TSUdORUQNCi0jZGVmaW5lIFNISUZUX1RFTVBTCUlOVDMyIHNoaWZ0X3RlbXA7DQotI2RlZmluZSBSSUdIVF9TSElGVCh4LHNoZnQpICBcDQotCSgoc2hpZnRfdGVtcCA9ICh4KSkgPCAwID8gXA0KLQkgKHNoaWZ0X3RlbXAgPj4gKHNoZnQpKSB8ICgofigoSU5UMzIpIDApKSA8PCAoMzItKHNoZnQpKSkgOiBcDQotCSAoc2hpZnRfdGVtcCA+PiAoc2hmdCkpKQ0KLSNlbHNlDQotI2RlZmluZSBTSElGVF9URU1QUw0KLSNkZWZpbmUgUklHSFRfU0hJRlQoeCxzaGZ0KQkoKHgpID4+IChzaGZ0KSkNCi0jZW5kaWYNCi0NCi0NCi0vKiBTaG9ydCBmb3JtcyBvZiBleHRlcm5hbCBuYW1lcyBmb3Igc3lzdGVtcyB3aXRoIGJyYWluLWRhbWFnZWQgbGlua2Vycy4gKi8NCi0NCi0jaWZkZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUw0KLSNkZWZpbmUgamluaXRfY29tcHJlc3NfbWFzdGVyCWpJQ29tcHJlc3MNCi0jZGVmaW5lIGppbml0X2NfbWFzdGVyX2NvbnRyb2wJaklDTWFzdGVyDQotI2RlZmluZSBqaW5pdF9jX21haW5fY29udHJvbGxlcglqSUNNYWluQw0KLSNkZWZpbmUgamluaXRfY19wcmVwX2NvbnRyb2xsZXIJaklDUHJlcEMNCi0jZGVmaW5lIGppbml0X2NfY29lZl9jb250cm9sbGVyCWpJQ0NvZWZDDQotI2RlZmluZSBqaW5pdF9jb2xvcl9jb252ZXJ0ZXIJaklDQ29sb3INCi0jZGVmaW5lIGppbml0X2Rvd25zYW1wbGVyCWpJRG93bnNhbXBsZXINCi0jZGVmaW5lIGppbml0X2ZvcndhcmRfZGN0CWpJRkRDVA0KLSNkZWZpbmUgamluaXRfaHVmZl9lbmNvZGVyCWpJSEVuY29kZXINCi0jZGVmaW5lIGppbml0X3BodWZmX2VuY29kZXIJaklQSEVuY29kZXINCi0jZGVmaW5lIGppbml0X21hcmtlcl93cml0ZXIJaklNV3JpdGVyDQotI2RlZmluZSBqaW5pdF9tYXN0ZXJfZGVjb21wcmVzcwlqSURNYXN0ZXINCi0jZGVmaW5lIGppbml0X2RfbWFpbl9jb250cm9sbGVyCWpJRE1haW5DDQotI2RlZmluZSBqaW5pdF9kX2NvZWZfY29udHJvbGxlcglqSURDb2VmQw0KLSNkZWZpbmUgamluaXRfZF9wb3N0X2NvbnRyb2xsZXIJaklEUG9zdEMNCi0jZGVmaW5lIGppbml0X2lucHV0X2NvbnRyb2xsZXIJaklJbkN0bHINCi0jZGVmaW5lIGppbml0X21hcmtlcl9yZWFkZXIJaklNUmVhZGVyDQotI2RlZmluZSBqaW5pdF9odWZmX2RlY29kZXIJaklIRGVjb2Rlcg0KLSNkZWZpbmUgamluaXRfcGh1ZmZfZGVjb2RlcglqSVBIRGVjb2Rlcg0KLSNkZWZpbmUgamluaXRfaW52ZXJzZV9kY3QJaklJRENUDQotI2RlZmluZSBqaW5pdF91cHNhbXBsZXIJCWpJVXBzYW1wbGVyDQotI2RlZmluZSBqaW5pdF9jb2xvcl9kZWNvbnZlcnRlcglqSURDb2xvcg0KLSNkZWZpbmUgamluaXRfMXBhc3NfcXVhbnRpemVyCWpJMVF1YW50DQotI2RlZmluZSBqaW5pdF8ycGFzc19xdWFudGl6ZXIJakkyUXVhbnQNCi0jZGVmaW5lIGppbml0X21lcmdlZF91cHNhbXBsZXIJaklNVXBzYW1wbGVyDQotI2RlZmluZSBqaW5pdF9tZW1vcnlfbWdyCWpJTWVtTWdyDQotI2RlZmluZSBqZGl2X3JvdW5kX3VwCQlqRGl2Um91bmQNCi0jZGVmaW5lIGpyb3VuZF91cAkJalJvdW5kDQotI2RlZmluZSBqY29weV9zYW1wbGVfcm93cwlqQ29weVNhbXBsZXMNCi0jZGVmaW5lIGpjb3B5X2Jsb2NrX3JvdwkJakNvcHlCbG9ja3MNCi0jZGVmaW5lIGp6ZXJvX2ZhcgkJalplcm9GYXINCi0jZGVmaW5lIGpwZWdfemlnemFnX29yZGVyCWpaSUdUYWJsZQ0KLSNkZWZpbmUganBlZ19uYXR1cmFsX29yZGVyCWpaQUdUYWJsZQ0KLSNlbmRpZiAvKiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTICovDQotDQotDQotLyogQ29tcHJlc3Npb24gbW9kdWxlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzICovDQotRVhURVJOKHZvaWQpIGppbml0X2NvbXByZXNzX21hc3RlciBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotRVhURVJOKHZvaWQpIGppbml0X2NfbWFzdGVyX2NvbnRyb2wgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJCSBib29sZWFuIHRyYW5zY29kZV9vbmx5KSk7DQotRVhURVJOKHZvaWQpIGppbml0X2NfbWFpbl9jb250cm9sbGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sDQotCQkJCQkgIGJvb2xlYW4gbmVlZF9mdWxsX2J1ZmZlcikpOw0KLUVYVEVSTih2b2lkKSBqaW5pdF9jX3ByZXBfY29udHJvbGxlciBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQkJICBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpKTsNCi1FWFRFUk4odm9pZCkgamluaXRfY19jb2VmX2NvbnRyb2xsZXIgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJCSAgYm9vbGVhbiBuZWVkX2Z1bGxfYnVmZmVyKSk7DQotRVhURVJOKHZvaWQpIGppbml0X2NvbG9yX2NvbnZlcnRlciBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotRVhURVJOKHZvaWQpIGppbml0X2Rvd25zYW1wbGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4odm9pZCkgamluaXRfZm9yd2FyZF9kY3QgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOw0KLUVYVEVSTih2b2lkKSBqaW5pdF9odWZmX2VuY29kZXIgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOw0KLUVYVEVSTih2b2lkKSBqaW5pdF9waHVmZl9lbmNvZGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4odm9pZCkgamluaXRfbWFya2VyX3dyaXRlciBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotLyogRGVjb21wcmVzc2lvbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgKi8NCi1FWFRFUk4odm9pZCkgamluaXRfbWFzdGVyX2RlY29tcHJlc3MgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotRVhURVJOKHZvaWQpIGppbml0X2RfbWFpbl9jb250cm9sbGVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJCSAgYm9vbGVhbiBuZWVkX2Z1bGxfYnVmZmVyKSk7DQotRVhURVJOKHZvaWQpIGppbml0X2RfY29lZl9jb250cm9sbGVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJCSAgYm9vbGVhbiBuZWVkX2Z1bGxfYnVmZmVyKSk7DQotRVhURVJOKHZvaWQpIGppbml0X2RfcG9zdF9jb250cm9sbGVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJCSAgYm9vbGVhbiBuZWVkX2Z1bGxfYnVmZmVyKSk7DQotRVhURVJOKHZvaWQpIGppbml0X2lucHV0X2NvbnRyb2xsZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotRVhURVJOKHZvaWQpIGppbml0X21hcmtlcl9yZWFkZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotRVhURVJOKHZvaWQpIGppbml0X2h1ZmZfZGVjb2RlciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4odm9pZCkgamluaXRfcGh1ZmZfZGVjb2RlciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4odm9pZCkgamluaXRfaW52ZXJzZV9kY3QgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotRVhURVJOKHZvaWQpIGppbml0X3Vwc2FtcGxlciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4odm9pZCkgamluaXRfY29sb3JfZGVjb252ZXJ0ZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotRVhURVJOKHZvaWQpIGppbml0XzFwYXNzX3F1YW50aXplciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4odm9pZCkgamluaXRfMnBhc3NfcXVhbnRpemVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLUVYVEVSTih2b2lkKSBqaW5pdF9tZXJnZWRfdXBzYW1wbGVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLS8qIE1lbW9yeSBtYW5hZ2VyIGluaXRpYWxpemF0aW9uICovDQotRVhURVJOKHZvaWQpIGppbml0X21lbW9yeV9tZ3IgSlBQKChqX2NvbW1vbl9wdHIgY2luZm8pKTsNCi0NCi0vKiBVdGlsaXR5IHJvdXRpbmVzIGluIGp1dGlscy5jICovDQotRVhURVJOKGxvbmcpIGpkaXZfcm91bmRfdXAgSlBQKChsb25nIGEsIGxvbmcgYikpOw0KLUVYVEVSTihsb25nKSBqcm91bmRfdXAgSlBQKChsb25nIGEsIGxvbmcgYikpOw0KLUVYVEVSTih2b2lkKSBqY29weV9zYW1wbGVfcm93cyBKUFAoKEpTQU1QQVJSQVkgaW5wdXRfYXJyYXksIGludCBzb3VyY2Vfcm93LA0KLQkJCQkgICAgSlNBTVBBUlJBWSBvdXRwdXRfYXJyYXksIGludCBkZXN0X3JvdywNCi0JCQkJICAgIGludCBudW1fcm93cywgSkRJTUVOU0lPTiBudW1fY29scykpOw0KLUVYVEVSTih2b2lkKSBqY29weV9ibG9ja19yb3cgSlBQKChKQkxPQ0tST1cgaW5wdXRfcm93LCBKQkxPQ0tST1cgb3V0cHV0X3JvdywNCi0JCQkJICBKRElNRU5TSU9OIG51bV9ibG9ja3MpKTsNCi1FWFRFUk4odm9pZCkganplcm9fZmFyIEpQUCgodm9pZCBGQVIgKiB0YXJnZXQsIHNpemVfdCBieXRlc3RvemVybykpOw0KLS8qIENvbnN0YW50IHRhYmxlcyBpbiBqdXRpbHMuYyAqLw0KLSNpZiAwCQkJCS8qIFRoaXMgdGFibGUgaXMgbm90IGFjdHVhbGx5IG5lZWRlZCBpbiB2NmEgKi8NCi1leHRlcm4gY29uc3QgaW50IGpwZWdfemlnemFnX29yZGVyW107IC8qIG5hdHVyYWwgY29lZiBvcmRlciB0byB6aWd6YWcgb3JkZXIgKi8NCi0jZW5kaWYNCi1leHRlcm4gY29uc3QgaW50IGpwZWdfbmF0dXJhbF9vcmRlcltdOyAvKiB6aWd6YWcgY29lZiBvcmRlciB0byBuYXR1cmFsIG9yZGVyICovDQotDQotLyogU3VwcHJlc3MgdW5kZWZpbmVkLXN0cnVjdHVyZSBjb21wbGFpbnRzIGlmIG5lY2Vzc2FyeS4gKi8NCi0NCi0jaWZkZWYgSU5DT01QTEVURV9UWVBFU19CUk9LRU4NCi0jaWZuZGVmIEFNX01FTU9SWV9NQU5BR0VSCS8qIG9ubHkgam1lbW1nci5jIGRlZmluZXMgdGhlc2UgKi8NCi1zdHJ1Y3QganZpcnRfc2FycmF5X2NvbnRyb2wgeyBsb25nIGR1bW15OyB9Ow0KLXN0cnVjdCBqdmlydF9iYXJyYXlfY29udHJvbCB7IGxvbmcgZHVtbXk7IH07DQotI2VuZGlmDQotI2VuZGlmIC8qIElOQ09NUExFVEVfVFlQRVNfQlJPS0VOICovDQorLyoKKyAqIGpwZWdpbnQuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCisgKgorICogVGhpcyBmaWxlIHByb3ZpZGVzIGNvbW1vbiBkZWNsYXJhdGlvbnMgZm9yIHRoZSB2YXJpb3VzIEpQRUcgbW9kdWxlcy4KKyAqIFRoZXNlIGRlY2xhcmF0aW9ucyBhcmUgY29uc2lkZXJlZCBpbnRlcm5hbCB0byB0aGUgSlBFRyBsaWJyYXJ5OyBtb3N0CisgKiBhcHBsaWNhdGlvbnMgdXNpbmcgdGhlIGxpYnJhcnkgc2hvdWxkbid0IG5lZWQgdG8gaW5jbHVkZSB0aGlzIGZpbGUuCisgKi8KKworCisvKiBEZWNsYXJhdGlvbnMgZm9yIGJvdGggY29tcHJlc3Npb24gJiBkZWNvbXByZXNzaW9uICovCisKK3R5cGVkZWYgZW51bSB7CQkJLyogT3BlcmF0aW5nIG1vZGVzIGZvciBidWZmZXIgY29udHJvbGxlcnMgKi8KKwlKQlVGX1BBU1NfVEhSVSwJCS8qIFBsYWluIHN0cmlwd2lzZSBvcGVyYXRpb24gKi8KKwkvKiBSZW1haW5pbmcgbW9kZXMgcmVxdWlyZSBhIGZ1bGwtaW1hZ2UgYnVmZmVyIHRvIGhhdmUgYmVlbiBjcmVhdGVkICovCisJSkJVRl9TQVZFX1NPVVJDRSwJLyogUnVuIHNvdXJjZSBzdWJvYmplY3Qgb25seSwgc2F2ZSBvdXRwdXQgKi8KKwlKQlVGX0NSQU5LX0RFU1QsCS8qIFJ1biBkZXN0IHN1Ym9iamVjdCBvbmx5LCB1c2luZyBzYXZlZCBkYXRhICovCisJSkJVRl9TQVZFX0FORF9QQVNTCS8qIFJ1biBib3RoIHN1Ym9iamVjdHMsIHNhdmUgb3V0cHV0ICovCit9IEpfQlVGX01PREU7CisKKy8qIFZhbHVlcyBvZiBnbG9iYWxfc3RhdGUgZmllbGQgKGpkYXBpLmMgaGFzIHNvbWUgZGVwZW5kZW5jaWVzIG9uIG9yZGVyaW5nISkgKi8KKyNkZWZpbmUgQ1NUQVRFX1NUQVJUCTEwMAkvKiBhZnRlciBjcmVhdGVfY29tcHJlc3MgKi8KKyNkZWZpbmUgQ1NUQVRFX1NDQU5OSU5HCTEwMQkvKiBzdGFydF9jb21wcmVzcyBkb25lLCB3cml0ZV9zY2FubGluZXMgT0sgKi8KKyNkZWZpbmUgQ1NUQVRFX1JBV19PSwkxMDIJLyogc3RhcnRfY29tcHJlc3MgZG9uZSwgd3JpdGVfcmF3X2RhdGEgT0sgKi8KKyNkZWZpbmUgQ1NUQVRFX1dSQ09FRlMJMTAzCS8qIGpwZWdfd3JpdGVfY29lZmZpY2llbnRzIGRvbmUgKi8KKyNkZWZpbmUgRFNUQVRFX1NUQVJUCTIwMAkvKiBhZnRlciBjcmVhdGVfZGVjb21wcmVzcyAqLworI2RlZmluZSBEU1RBVEVfSU5IRUFERVIJMjAxCS8qIHJlYWRpbmcgaGVhZGVyIG1hcmtlcnMsIG5vIFNPUyB5ZXQgKi8KKyNkZWZpbmUgRFNUQVRFX1JFQURZCTIwMgkvKiBmb3VuZCBTT1MsIHJlYWR5IGZvciBzdGFydF9kZWNvbXByZXNzICovCisjZGVmaW5lIERTVEFURV9QUkVMT0FECTIwMwkvKiByZWFkaW5nIG11bHRpc2NhbiBmaWxlIGluIHN0YXJ0X2RlY29tcHJlc3MqLworI2RlZmluZSBEU1RBVEVfUFJFU0NBTgkyMDQJLyogcGVyZm9ybWluZyBkdW1teSBwYXNzIGZvciAyLXBhc3MgcXVhbnQgKi8KKyNkZWZpbmUgRFNUQVRFX1NDQU5OSU5HCTIwNQkvKiBzdGFydF9kZWNvbXByZXNzIGRvbmUsIHJlYWRfc2NhbmxpbmVzIE9LICovCisjZGVmaW5lIERTVEFURV9SQVdfT0sJMjA2CS8qIHN0YXJ0X2RlY29tcHJlc3MgZG9uZSwgcmVhZF9yYXdfZGF0YSBPSyAqLworI2RlZmluZSBEU1RBVEVfQlVGSU1BR0UJMjA3CS8qIGV4cGVjdGluZyBqcGVnX3N0YXJ0X291dHB1dCAqLworI2RlZmluZSBEU1RBVEVfQlVGUE9TVAkyMDgJLyogbG9va2luZyBmb3IgU09TL0VPSSBpbiBqcGVnX2ZpbmlzaF9vdXRwdXQgKi8KKyNkZWZpbmUgRFNUQVRFX1JEQ09FRlMJMjA5CS8qIHJlYWRpbmcgZmlsZSBpbiBqcGVnX3JlYWRfY29lZmZpY2llbnRzICovCisjZGVmaW5lIERTVEFURV9TVE9QUElORwkyMTAJLyogbG9va2luZyBmb3IgRU9JIGluIGpwZWdfZmluaXNoX2RlY29tcHJlc3MgKi8KKworCisvKiBEZWNsYXJhdGlvbnMgZm9yIGNvbXByZXNzaW9uIG1vZHVsZXMgKi8KKworLyogTWFzdGVyIGNvbnRyb2wgbW9kdWxlICovCitzdHJ1Y3QganBlZ19jb21wX21hc3RlciB7CisgIEpNRVRIT0Qodm9pZCwgcHJlcGFyZV9mb3JfcGFzcywgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CisgIEpNRVRIT0Qodm9pZCwgcGFzc19zdGFydHVwLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsKKyAgSk1FVEhPRCh2b2lkLCBmaW5pc2hfcGFzcywgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CisKKyAgLyogU3RhdGUgdmFyaWFibGVzIG1hZGUgdmlzaWJsZSB0byBvdGhlciBtb2R1bGVzICovCisgIGJvb2xlYW4gY2FsbF9wYXNzX3N0YXJ0dXA7CS8qIFRydWUgaWYgcGFzc19zdGFydHVwIG11c3QgYmUgY2FsbGVkICovCisgIGJvb2xlYW4gaXNfbGFzdF9wYXNzOwkJLyogVHJ1ZSBkdXJpbmcgbGFzdCBwYXNzICovCit9OworCisvKiBNYWluIGJ1ZmZlciBjb250cm9sIChkb3duc2FtcGxlZC1kYXRhIGJ1ZmZlcikgKi8KK3N0cnVjdCBqcGVnX2NfbWFpbl9jb250cm9sbGVyIHsKKyAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9jb21wcmVzc19wdHIgY2luZm8sIEpfQlVGX01PREUgcGFzc19tb2RlKSk7CisgIEpNRVRIT0Qodm9pZCwgcHJvY2Vzc19kYXRhLCAoal9jb21wcmVzc19wdHIgY2luZm8sCisJCQkgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpESU1FTlNJT04gKmluX3Jvd19jdHIsCisJCQkgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dzX2F2YWlsKSk7Cit9OworCisvKiBDb21wcmVzc2lvbiBwcmVwcm9jZXNzaW5nIChkb3duc2FtcGxpbmcgaW5wdXQgYnVmZmVyIGNvbnRyb2wpICovCitzdHJ1Y3QganBlZ19jX3ByZXBfY29udHJvbGxlciB7CisgIEpNRVRIT0Qodm9pZCwgc3RhcnRfcGFzcywgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKX0JVRl9NT0RFIHBhc3NfbW9kZSkpOworICBKTUVUSE9EKHZvaWQsIHByZV9wcm9jZXNzX2RhdGEsIChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwKKwkJCQkgICBKRElNRU5TSU9OICppbl9yb3dfY3RyLAorCQkJCSAgIEpESU1FTlNJT04gaW5fcm93c19hdmFpbCwKKwkJCQkgICBKU0FNUElNQUdFIG91dHB1dF9idWYsCisJCQkJICAgSkRJTUVOU0lPTiAqb3V0X3Jvd19ncm91cF9jdHIsCisJCQkJICAgSkRJTUVOU0lPTiBvdXRfcm93X2dyb3Vwc19hdmFpbCkpOworfTsKKworLyogQ29lZmZpY2llbnQgYnVmZmVyIGNvbnRyb2wgKi8KK3N0cnVjdCBqcGVnX2NfY29lZl9jb250cm9sbGVyIHsKKyAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9jb21wcmVzc19wdHIgY2luZm8sIEpfQlVGX01PREUgcGFzc19tb2RlKSk7CisgIEpNRVRIT0QoYm9vbGVhbiwgY29tcHJlc3NfZGF0YSwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCSAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmKSk7Cit9OworCisvKiBDb2xvcnNwYWNlIGNvbnZlcnNpb24gKi8KK3N0cnVjdCBqcGVnX2NvbG9yX2NvbnZlcnRlciB7CisgIEpNRVRIT0Qodm9pZCwgc3RhcnRfcGFzcywgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CisgIEpNRVRIT0Qodm9pZCwgY29sb3JfY29udmVydCwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCUpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisJCQkJSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpKTsKK307CisKKy8qIERvd25zYW1wbGluZyAqLworc3RydWN0IGpwZWdfZG93bnNhbXBsZXIgeworICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworICBKTUVUSE9EKHZvaWQsIGRvd25zYW1wbGUsIChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCSAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2luZGV4LAorCQkJICAgICBKU0FNUElNQUdFIG91dHB1dF9idWYsCisJCQkgICAgIEpESU1FTlNJT04gb3V0X3Jvd19ncm91cF9pbmRleCkpOworCisgIGJvb2xlYW4gbmVlZF9jb250ZXh0X3Jvd3M7CS8qIFRSVUUgaWYgbmVlZCByb3dzIGFib3ZlICYgYmVsb3cgKi8KK307CisKKy8qIEZvcndhcmQgRENUIChhbHNvIGNvbnRyb2xzIGNvZWZmaWNpZW50IHF1YW50aXphdGlvbikgKi8KK3N0cnVjdCBqcGVnX2ZvcndhcmRfZGN0IHsKKyAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsKKyAgLyogcGVyaGFwcyB0aGlzIHNob3VsZCBiZSBhbiBhcnJheT8/PyAqLworICBKTUVUSE9EKHZvaWQsIGZvcndhcmRfRENULCAoal9jb21wcmVzc19wdHIgY2luZm8sCisJCQkgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkJCSAgICAgIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpCTE9DS1JPVyBjb2VmX2Jsb2NrcywKKwkJCSAgICAgIEpESU1FTlNJT04gc3RhcnRfcm93LCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKwkJCSAgICAgIEpESU1FTlNJT04gbnVtX2Jsb2NrcykpOworfTsKKworLyogRW50cm9weSBlbmNvZGluZyAqLworc3RydWN0IGpwZWdfZW50cm9weV9lbmNvZGVyIHsKKyAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9jb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gZ2F0aGVyX3N0YXRpc3RpY3MpKTsKKyAgSk1FVEhPRChib29sZWFuLCBlbmNvZGVfbWN1LCAoal9jb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKKyAgSk1FVEhPRCh2b2lkLCBmaW5pc2hfcGFzcywgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7Cit9OworCisvKiBNYXJrZXIgd3JpdGluZyAqLworc3RydWN0IGpwZWdfbWFya2VyX3dyaXRlciB7CisgIEpNRVRIT0Qodm9pZCwgd3JpdGVfZmlsZV9oZWFkZXIsIChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworICBKTUVUSE9EKHZvaWQsIHdyaXRlX2ZyYW1lX2hlYWRlciwgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CisgIEpNRVRIT0Qodm9pZCwgd3JpdGVfc2Nhbl9oZWFkZXIsIChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworICBKTUVUSE9EKHZvaWQsIHdyaXRlX2ZpbGVfdHJhaWxlciwgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CisgIEpNRVRIT0Qodm9pZCwgd3JpdGVfdGFibGVzX29ubHksIChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworICAvKiBUaGVzZSByb3V0aW5lcyBhcmUgZXhwb3J0ZWQgdG8gYWxsb3cgaW5zZXJ0aW9uIG9mIGV4dHJhIG1hcmtlcnMgKi8KKyAgLyogUHJvYmFibHkgb25seSBDT00gYW5kIEFQUG4gbWFya2VycyBzaG91bGQgYmUgd3JpdHRlbiB0aGlzIHdheSAqLworICBKTUVUSE9EKHZvaWQsIHdyaXRlX21hcmtlcl9oZWFkZXIsIChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IG1hcmtlciwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgZGF0YWxlbikpOworICBKTUVUSE9EKHZvaWQsIHdyaXRlX21hcmtlcl9ieXRlLCAoal9jb21wcmVzc19wdHIgY2luZm8sIGludCB2YWwpKTsKK307CisKKworLyogRGVjbGFyYXRpb25zIGZvciBkZWNvbXByZXNzaW9uIG1vZHVsZXMgKi8KKworLyogTWFzdGVyIGNvbnRyb2wgbW9kdWxlICovCitzdHJ1Y3QganBlZ19kZWNvbXBfbWFzdGVyIHsKKyAgSk1FVEhPRCh2b2lkLCBwcmVwYXJlX2Zvcl9vdXRwdXRfcGFzcywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKKyAgSk1FVEhPRCh2b2lkLCBmaW5pc2hfb3V0cHV0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CisKKyAgLyogU3RhdGUgdmFyaWFibGVzIG1hZGUgdmlzaWJsZSB0byBvdGhlciBtb2R1bGVzICovCisgIGJvb2xlYW4gaXNfZHVtbXlfcGFzczsJLyogVHJ1ZSBkdXJpbmcgMXN0IHBhc3MgZm9yIDItcGFzcyBxdWFudCAqLworfTsKKworLyogSW5wdXQgY29udHJvbCBtb2R1bGUgKi8KK3N0cnVjdCBqcGVnX2lucHV0X2NvbnRyb2xsZXIgeworICBKTUVUSE9EKGludCwgY29uc3VtZV9pbnB1dCwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKKyAgSk1FVEhPRCh2b2lkLCByZXNldF9pbnB1dF9jb250cm9sbGVyLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworICBKTUVUSE9EKHZvaWQsIHN0YXJ0X2lucHV0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CisgIEpNRVRIT0Qodm9pZCwgZmluaXNoX2lucHV0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CisKKyAgLyogU3RhdGUgdmFyaWFibGVzIG1hZGUgdmlzaWJsZSB0byBvdGhlciBtb2R1bGVzICovCisgIGJvb2xlYW4gaGFzX211bHRpcGxlX3NjYW5zOwkvKiBUcnVlIGlmIGZpbGUgaGFzIG11bHRpcGxlIHNjYW5zICovCisgIGJvb2xlYW4gZW9pX3JlYWNoZWQ7CQkvKiBUcnVlIHdoZW4gRU9JIGhhcyBiZWVuIGNvbnN1bWVkICovCit9OworCisvKiBNYWluIGJ1ZmZlciBjb250cm9sIChkb3duc2FtcGxlZC1kYXRhIGJ1ZmZlcikgKi8KK3N0cnVjdCBqcGVnX2RfbWFpbl9jb250cm9sbGVyIHsKKyAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSl9CVUZfTU9ERSBwYXNzX21vZGUpKTsKKyAgSk1FVEhPRCh2b2lkLCBwcm9jZXNzX2RhdGEsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCisJCQkgICAgICAgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkpOworfTsKKworLyogQ29lZmZpY2llbnQgYnVmZmVyIGNvbnRyb2wgKi8KK3N0cnVjdCBqcGVnX2RfY29lZl9jb250cm9sbGVyIHsKKyAgSk1FVEhPRCh2b2lkLCBzdGFydF9pbnB1dF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworICBKTUVUSE9EKGludCwgY29uc3VtZV9kYXRhLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworICBKTUVUSE9EKHZvaWQsIHN0YXJ0X291dHB1dF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworICBKTUVUSE9EKGludCwgZGVjb21wcmVzc19kYXRhLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkgSlNBTVBJTUFHRSBvdXRwdXRfYnVmKSk7CisgIC8qIFBvaW50ZXIgdG8gYXJyYXkgb2YgY29lZmZpY2llbnQgdmlydHVhbCBhcnJheXMsIG9yIE5VTEwgaWYgbm9uZSAqLworICBqdmlydF9iYXJyYXlfcHRyICpjb2VmX2FycmF5czsKK307CisKKy8qIERlY29tcHJlc3Npb24gcG9zdHByb2Nlc3NpbmcgKGNvbG9yIHF1YW50aXphdGlvbiBidWZmZXIgY29udHJvbCkgKi8KK3N0cnVjdCBqcGVnX2RfcG9zdF9jb250cm9sbGVyIHsKKyAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSl9CVUZfTU9ERSBwYXNzX21vZGUpKTsKKyAgSk1FVEhPRCh2b2lkLCBwb3N0X3Byb2Nlc3NfZGF0YSwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisJCQkJICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorCQkJCSAgICBKRElNRU5TSU9OICppbl9yb3dfZ3JvdXBfY3RyLAorCQkJCSAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cHNfYXZhaWwsCisJCQkJICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKwkJCQkgICAgSkRJTUVOU0lPTiAqb3V0X3Jvd19jdHIsCisJCQkJICAgIEpESU1FTlNJT04gb3V0X3Jvd3NfYXZhaWwpKTsKK307CisKKy8qIE1hcmtlciByZWFkaW5nICYgcGFyc2luZyAqLworc3RydWN0IGpwZWdfbWFya2VyX3JlYWRlciB7CisgIEpNRVRIT0Qodm9pZCwgcmVzZXRfbWFya2VyX3JlYWRlciwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKKyAgLyogUmVhZCBtYXJrZXJzIHVudGlsIFNPUyBvciBFT0kuCisgICAqIFJldHVybnMgc2FtZSBjb2RlcyBhcyBhcmUgZGVmaW5lZCBmb3IganBlZ19jb25zdW1lX2lucHV0OgorICAgKiBKUEVHX1NVU1BFTkRFRCwgSlBFR19SRUFDSEVEX1NPUywgb3IgSlBFR19SRUFDSEVEX0VPSS4KKyAgICovCisgIEpNRVRIT0QoaW50LCByZWFkX21hcmtlcnMsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CisgIC8qIFJlYWQgYSByZXN0YXJ0IG1hcmtlciAtLS0gZXhwb3J0ZWQgZm9yIHVzZSBieSBlbnRyb3B5IGRlY29kZXIgb25seSAqLworICBqcGVnX21hcmtlcl9wYXJzZXJfbWV0aG9kIHJlYWRfcmVzdGFydF9tYXJrZXI7CisKKyAgLyogU3RhdGUgb2YgbWFya2VyIHJlYWRlciAtLS0gbm9taW5hbGx5IGludGVybmFsLCBidXQgYXBwbGljYXRpb25zCisgICAqIHN1cHBseWluZyBDT00gb3IgQVBQbiBoYW5kbGVycyBtaWdodCBsaWtlIHRvIGtub3cgdGhlIHN0YXRlLgorICAgKi8KKyAgYm9vbGVhbiBzYXdfU09JOwkJLyogZm91bmQgU09JPyAqLworICBib29sZWFuIHNhd19TT0Y7CQkvKiBmb3VuZCBTT0Y/ICovCisgIGludCBuZXh0X3Jlc3RhcnRfbnVtOwkJLyogbmV4dCByZXN0YXJ0IG51bWJlciBleHBlY3RlZCAoMC03KSAqLworICB1bnNpZ25lZCBpbnQgZGlzY2FyZGVkX2J5dGVzOwkvKiAjIG9mIGJ5dGVzIHNraXBwZWQgbG9va2luZyBmb3IgYSBtYXJrZXIgKi8KK307CisKKy8qIEVudHJvcHkgZGVjb2RpbmcgKi8KK3N0cnVjdCBqcGVnX2VudHJvcHlfZGVjb2RlciB7CisgIEpNRVRIT0Qodm9pZCwgc3RhcnRfcGFzcywgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKKyAgSk1FVEhPRChib29sZWFuLCBkZWNvZGVfbWN1LCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCQlKQkxPQ0tST1cgKk1DVV9kYXRhKSk7CisKKyAgLyogVGhpcyBpcyBoZXJlIHRvIHNoYXJlIGNvZGUgYmV0d2VlbiBiYXNlbGluZSBhbmQgcHJvZ3Jlc3NpdmUgZGVjb2RlcnM7ICovCisgIC8qIG90aGVyIG1vZHVsZXMgcHJvYmFibHkgc2hvdWxkIG5vdCB1c2UgaXQgKi8KKyAgYm9vbGVhbiBpbnN1ZmZpY2llbnRfZGF0YTsJLyogc2V0IFRSVUUgYWZ0ZXIgZW1pdHRpbmcgd2FybmluZyAqLworfTsKKworLyogSW52ZXJzZSBEQ1QgKGFsc28gcGVyZm9ybXMgZGVxdWFudGl6YXRpb24pICovCit0eXBlZGVmIEpNRVRIT0Qodm9pZCwgaW52ZXJzZV9EQ1RfbWV0aG9kX3B0ciwKKwkJKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorCQkgSkNPRUZQVFIgY29lZl9ibG9jaywKKwkJIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7CisKK3N0cnVjdCBqcGVnX2ludmVyc2VfZGN0IHsKKyAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworICAvKiBJdCBpcyB1c2VmdWwgdG8gYWxsb3cgZWFjaCBjb21wb25lbnQgdG8gaGF2ZSBhIHNlcGFyYXRlIElEQ1QgbWV0aG9kLiAqLworICBpbnZlcnNlX0RDVF9tZXRob2RfcHRyIGludmVyc2VfRENUW01BWF9DT01QT05FTlRTXTsKK307CisKKy8qIFVwc2FtcGxpbmcgKG5vdGUgdGhhdCB1cHNhbXBsZXIgbXVzdCBhbHNvIGNhbGwgY29sb3IgY29udmVydGVyKSAqLworc3RydWN0IGpwZWdfdXBzYW1wbGVyIHsKKyAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworICBKTUVUSE9EKHZvaWQsIHVwc2FtcGxlLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCSAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorCQkJICAgSkRJTUVOU0lPTiAqaW5fcm93X2dyb3VwX2N0ciwKKwkJCSAgIEpESU1FTlNJT04gaW5fcm93X2dyb3Vwc19hdmFpbCwKKwkJCSAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKwkJCSAgIEpESU1FTlNJT04gKm91dF9yb3dfY3RyLAorCQkJICAgSkRJTUVOU0lPTiBvdXRfcm93c19hdmFpbCkpOworCisgIGJvb2xlYW4gbmVlZF9jb250ZXh0X3Jvd3M7CS8qIFRSVUUgaWYgbmVlZCByb3dzIGFib3ZlICYgYmVsb3cgKi8KK307CisKKy8qIENvbG9yc3BhY2UgY29udmVyc2lvbiAqLworc3RydWN0IGpwZWdfY29sb3JfZGVjb252ZXJ0ZXIgeworICBKTUVUSE9EKHZvaWQsIHN0YXJ0X3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CisgIEpNRVRIT0Qodm9pZCwgY29sb3JfY29udmVydCwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisJCQkJSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorCQkJCUpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKSk7Cit9OworCisvKiBDb2xvciBxdWFudGl6YXRpb24gb3IgY29sb3IgcHJlY2lzaW9uIHJlZHVjdGlvbiAqLworc3RydWN0IGpwZWdfY29sb3JfcXVhbnRpemVyIHsKKyAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBpc19wcmVfc2NhbikpOworICBKTUVUSE9EKHZvaWQsIGNvbG9yX3F1YW50aXplLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKwkJCQkgaW50IG51bV9yb3dzKSk7CisgIEpNRVRIT0Qodm9pZCwgZmluaXNoX3Bhc3MsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CisgIEpNRVRIT0Qodm9pZCwgbmV3X2NvbG9yX21hcCwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKK307CisKKworLyogTWlzY2VsbGFuZW91cyB1c2VmdWwgbWFjcm9zICovCisKKyN1bmRlZiBNQVgKKyNkZWZpbmUgTUFYKGEsYikJKChhKSA+IChiKSA/IChhKSA6IChiKSkKKyN1bmRlZiBNSU4KKyNkZWZpbmUgTUlOKGEsYikJKChhKSA8IChiKSA/IChhKSA6IChiKSkKKworCisvKiBXZSBhc3N1bWUgdGhhdCByaWdodCBzaGlmdCBjb3JyZXNwb25kcyB0byBzaWduZWQgZGl2aXNpb24gYnkgMiB3aXRoCisgKiByb3VuZGluZyB0b3dhcmRzIG1pbnVzIGluZmluaXR5LiAgVGhpcyBpcyBjb3JyZWN0IGZvciB0eXBpY2FsICJhcml0aG1ldGljCisgKiBzaGlmdCIgaW5zdHJ1Y3Rpb25zIHRoYXQgc2hpZnQgaW4gY29waWVzIG9mIHRoZSBzaWduIGJpdC4gIEJ1dCBzb21lCisgKiBDIGNvbXBpbGVycyBpbXBsZW1lbnQgPj4gd2l0aCBhbiB1bnNpZ25lZCBzaGlmdC4gIEZvciB0aGVzZSBtYWNoaW5lcyB5b3UKKyAqIG11c3QgZGVmaW5lIFJJR0hUX1NISUZUX0lTX1VOU0lHTkVELgorICogUklHSFRfU0hJRlQgcHJvdmlkZXMgYSBwcm9wZXIgc2lnbmVkIHJpZ2h0IHNoaWZ0IG9mIGFuIElOVDMyIHF1YW50aXR5LgorICogSXQgaXMgb25seSBhcHBsaWVkIHdpdGggY29uc3RhbnQgc2hpZnQgY291bnRzLiAgU0hJRlRfVEVNUFMgbXVzdCBiZQorICogaW5jbHVkZWQgaW4gdGhlIHZhcmlhYmxlcyBvZiBhbnkgcm91dGluZSB1c2luZyBSSUdIVF9TSElGVC4KKyAqLworCisjaWZkZWYgUklHSFRfU0hJRlRfSVNfVU5TSUdORUQKKyNkZWZpbmUgU0hJRlRfVEVNUFMJSU5UMzIgc2hpZnRfdGVtcDsKKyNkZWZpbmUgUklHSFRfU0hJRlQoeCxzaGZ0KSAgXAorCSgoc2hpZnRfdGVtcCA9ICh4KSkgPCAwID8gXAorCSAoc2hpZnRfdGVtcCA+PiAoc2hmdCkpIHwgKCh+KChJTlQzMikgMCkpIDw8ICgzMi0oc2hmdCkpKSA6IFwKKwkgKHNoaWZ0X3RlbXAgPj4gKHNoZnQpKSkKKyNlbHNlCisjZGVmaW5lIFNISUZUX1RFTVBTCisjZGVmaW5lIFJJR0hUX1NISUZUKHgsc2hmdCkJKCh4KSA+PiAoc2hmdCkpCisjZW5kaWYKKworCisvKiBTaG9ydCBmb3JtcyBvZiBleHRlcm5hbCBuYW1lcyBmb3Igc3lzdGVtcyB3aXRoIGJyYWluLWRhbWFnZWQgbGlua2Vycy4gKi8KKworI2lmZGVmIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMKKyNkZWZpbmUgamluaXRfY29tcHJlc3NfbWFzdGVyCWpJQ29tcHJlc3MKKyNkZWZpbmUgamluaXRfY19tYXN0ZXJfY29udHJvbAlqSUNNYXN0ZXIKKyNkZWZpbmUgamluaXRfY19tYWluX2NvbnRyb2xsZXIJaklDTWFpbkMKKyNkZWZpbmUgamluaXRfY19wcmVwX2NvbnRyb2xsZXIJaklDUHJlcEMKKyNkZWZpbmUgamluaXRfY19jb2VmX2NvbnRyb2xsZXIJaklDQ29lZkMKKyNkZWZpbmUgamluaXRfY29sb3JfY29udmVydGVyCWpJQ0NvbG9yCisjZGVmaW5lIGppbml0X2Rvd25zYW1wbGVyCWpJRG93bnNhbXBsZXIKKyNkZWZpbmUgamluaXRfZm9yd2FyZF9kY3QJaklGRENUCisjZGVmaW5lIGppbml0X2h1ZmZfZW5jb2RlcglqSUhFbmNvZGVyCisjZGVmaW5lIGppbml0X3BodWZmX2VuY29kZXIJaklQSEVuY29kZXIKKyNkZWZpbmUgamluaXRfbWFya2VyX3dyaXRlcglqSU1Xcml0ZXIKKyNkZWZpbmUgamluaXRfbWFzdGVyX2RlY29tcHJlc3MJaklETWFzdGVyCisjZGVmaW5lIGppbml0X2RfbWFpbl9jb250cm9sbGVyCWpJRE1haW5DCisjZGVmaW5lIGppbml0X2RfY29lZl9jb250cm9sbGVyCWpJRENvZWZDCisjZGVmaW5lIGppbml0X2RfcG9zdF9jb250cm9sbGVyCWpJRFBvc3RDCisjZGVmaW5lIGppbml0X2lucHV0X2NvbnRyb2xsZXIJaklJbkN0bHIKKyNkZWZpbmUgamluaXRfbWFya2VyX3JlYWRlcglqSU1SZWFkZXIKKyNkZWZpbmUgamluaXRfaHVmZl9kZWNvZGVyCWpJSERlY29kZXIKKyNkZWZpbmUgamluaXRfcGh1ZmZfZGVjb2RlcglqSVBIRGVjb2RlcgorI2RlZmluZSBqaW5pdF9pbnZlcnNlX2RjdAlqSUlEQ1QKKyNkZWZpbmUgamluaXRfdXBzYW1wbGVyCQlqSVVwc2FtcGxlcgorI2RlZmluZSBqaW5pdF9jb2xvcl9kZWNvbnZlcnRlcglqSURDb2xvcgorI2RlZmluZSBqaW5pdF8xcGFzc19xdWFudGl6ZXIJakkxUXVhbnQKKyNkZWZpbmUgamluaXRfMnBhc3NfcXVhbnRpemVyCWpJMlF1YW50CisjZGVmaW5lIGppbml0X21lcmdlZF91cHNhbXBsZXIJaklNVXBzYW1wbGVyCisjZGVmaW5lIGppbml0X21lbW9yeV9tZ3IJaklNZW1NZ3IKKyNkZWZpbmUgamRpdl9yb3VuZF91cAkJakRpdlJvdW5kCisjZGVmaW5lIGpyb3VuZF91cAkJalJvdW5kCisjZGVmaW5lIGpjb3B5X3NhbXBsZV9yb3dzCWpDb3B5U2FtcGxlcworI2RlZmluZSBqY29weV9ibG9ja19yb3cJCWpDb3B5QmxvY2tzCisjZGVmaW5lIGp6ZXJvX2ZhcgkJalplcm9GYXIKKyNkZWZpbmUganBlZ196aWd6YWdfb3JkZXIJalpJR1RhYmxlCisjZGVmaW5lIGpwZWdfbmF0dXJhbF9vcmRlcglqWkFHVGFibGUKKyNlbmRpZiAvKiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTICovCisKKworLyogQ29tcHJlc3Npb24gbW9kdWxlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzICovCitFWFRFUk4odm9pZCkgamluaXRfY29tcHJlc3NfbWFzdGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9jX21hc3Rlcl9jb250cm9sIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCisJCQkJCSBib29sZWFuIHRyYW5zY29kZV9vbmx5KSk7CitFWFRFUk4odm9pZCkgamluaXRfY19tYWluX2NvbnRyb2xsZXIgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJICBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9jX3ByZXBfY29udHJvbGxlciBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCQkgIGJvb2xlYW4gbmVlZF9mdWxsX2J1ZmZlcikpOworRVhURVJOKHZvaWQpIGppbml0X2NfY29lZl9jb250cm9sbGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCisJCQkJCSAgYm9vbGVhbiBuZWVkX2Z1bGxfYnVmZmVyKSk7CitFWFRFUk4odm9pZCkgamluaXRfY29sb3JfY29udmVydGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9kb3duc2FtcGxlciBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CitFWFRFUk4odm9pZCkgamluaXRfZm9yd2FyZF9kY3QgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKHZvaWQpIGppbml0X2h1ZmZfZW5jb2RlciBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CitFWFRFUk4odm9pZCkgamluaXRfcGh1ZmZfZW5jb2RlciBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CitFWFRFUk4odm9pZCkgamluaXRfbWFya2VyX3dyaXRlciBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CisvKiBEZWNvbXByZXNzaW9uIG1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lcyAqLworRVhURVJOKHZvaWQpIGppbml0X21hc3Rlcl9kZWNvbXByZXNzIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKHZvaWQpIGppbml0X2RfbWFpbl9jb250cm9sbGVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJICBib29sZWFuIG5lZWRfZnVsbF9idWZmZXIpKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9kX2NvZWZfY29udHJvbGxlciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisJCQkJCSAgYm9vbGVhbiBuZWVkX2Z1bGxfYnVmZmVyKSk7CitFWFRFUk4odm9pZCkgamluaXRfZF9wb3N0X2NvbnRyb2xsZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCQkgIGJvb2xlYW4gbmVlZF9mdWxsX2J1ZmZlcikpOworRVhURVJOKHZvaWQpIGppbml0X2lucHV0X2NvbnRyb2xsZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CitFWFRFUk4odm9pZCkgamluaXRfbWFya2VyX3JlYWRlciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9odWZmX2RlY29kZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CitFWFRFUk4odm9pZCkgamluaXRfcGh1ZmZfZGVjb2RlciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9pbnZlcnNlX2RjdCBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTih2b2lkKSBqaW5pdF91cHNhbXBsZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CitFWFRFUk4odm9pZCkgamluaXRfY29sb3JfZGVjb252ZXJ0ZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CitFWFRFUk4odm9pZCkgamluaXRfMXBhc3NfcXVhbnRpemVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKHZvaWQpIGppbml0XzJwYXNzX3F1YW50aXplciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9tZXJnZWRfdXBzYW1wbGVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworLyogTWVtb3J5IG1hbmFnZXIgaW5pdGlhbGl6YXRpb24gKi8KK0VYVEVSTih2b2lkKSBqaW5pdF9tZW1vcnlfbWdyIEpQUCgoal9jb21tb25fcHRyIGNpbmZvKSk7CisKKy8qIFV0aWxpdHkgcm91dGluZXMgaW4ganV0aWxzLmMgKi8KK0VYVEVSTihsb25nKSBqZGl2X3JvdW5kX3VwIEpQUCgobG9uZyBhLCBsb25nIGIpKTsKK0VYVEVSTihsb25nKSBqcm91bmRfdXAgSlBQKChsb25nIGEsIGxvbmcgYikpOworRVhURVJOKHZvaWQpIGpjb3B5X3NhbXBsZV9yb3dzIEpQUCgoSlNBTVBBUlJBWSBpbnB1dF9hcnJheSwgaW50IHNvdXJjZV9yb3csCisJCQkJICAgIEpTQU1QQVJSQVkgb3V0cHV0X2FycmF5LCBpbnQgZGVzdF9yb3csCisJCQkJICAgIGludCBudW1fcm93cywgSkRJTUVOU0lPTiBudW1fY29scykpOworRVhURVJOKHZvaWQpIGpjb3B5X2Jsb2NrX3JvdyBKUFAoKEpCTE9DS1JPVyBpbnB1dF9yb3csIEpCTE9DS1JPVyBvdXRwdXRfcm93LAorCQkJCSAgSkRJTUVOU0lPTiBudW1fYmxvY2tzKSk7CitFWFRFUk4odm9pZCkganplcm9fZmFyIEpQUCgodm9pZCBGQVIgKiB0YXJnZXQsIHNpemVfdCBieXRlc3RvemVybykpOworLyogQ29uc3RhbnQgdGFibGVzIGluIGp1dGlscy5jICovCisjaWYgMAkJCQkvKiBUaGlzIHRhYmxlIGlzIG5vdCBhY3R1YWxseSBuZWVkZWQgaW4gdjZhICovCitleHRlcm4gY29uc3QgaW50IGpwZWdfemlnemFnX29yZGVyW107IC8qIG5hdHVyYWwgY29lZiBvcmRlciB0byB6aWd6YWcgb3JkZXIgKi8KKyNlbmRpZgorZXh0ZXJuIGNvbnN0IGludCBqcGVnX25hdHVyYWxfb3JkZXJbXTsgLyogemlnemFnIGNvZWYgb3JkZXIgdG8gbmF0dXJhbCBvcmRlciAqLworCisvKiBTdXBwcmVzcyB1bmRlZmluZWQtc3RydWN0dXJlIGNvbXBsYWludHMgaWYgbmVjZXNzYXJ5LiAqLworCisjaWZkZWYgSU5DT01QTEVURV9UWVBFU19CUk9LRU4KKyNpZm5kZWYgQU1fTUVNT1JZX01BTkFHRVIJLyogb25seSBqbWVtbWdyLmMgZGVmaW5lcyB0aGVzZSAqLworc3RydWN0IGp2aXJ0X3NhcnJheV9jb250cm9sIHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqdmlydF9iYXJyYXlfY29udHJvbCB7IGxvbmcgZHVtbXk7IH07CisjZW5kaWYKKyNlbmRpZiAvKiBJTkNPTVBMRVRFX1RZUEVTX0JST0tFTiAqLwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2pwZWdsaWIuaCBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9qcGVnbGliLmgKaW5kZXggYWMyYWZmOS4uN2RlNWFiNyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjb2RlYy9saWJqcGVnL2pwZWdsaWIuaAorKysgYi9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvanBlZ2xpYi5oCkBAIC0xLDExNjUgKzEsMTE2NSBAQAotLyoNCi0gKiBqcGVnbGliLmgNCi0gKg0KLSAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk4LCBUaG9tYXMgRy4gTGFuZS4NCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLg0KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4NCi0gKg0KLSAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBhcHBsaWNhdGlvbiBpbnRlcmZhY2UgZm9yIHRoZSBKUEVHIGxpYnJhcnkuDQotICogTW9zdCBhcHBsaWNhdGlvbnMgdXNpbmcgdGhlIGxpYnJhcnkgbmVlZCBvbmx5IGluY2x1ZGUgdGhpcyBmaWxlLA0KLSAqIGFuZCBwZXJoYXBzIGplcnJvci5oIGlmIHRoZXkgd2FudCB0byBrbm93IHRoZSBleGFjdCBlcnJvciBjb2Rlcy4NCi0gKi8NCi0NCi0jaWZuZGVmIEpQRUdMSUJfSA0KLSNkZWZpbmUgSlBFR0xJQl9IDQotDQotI2RlZmluZSBGT1hJVF9QUkVGSVgob3JpZ05hbWUpICBGUERGQVBJSlBFR18jI29yaWdOYW1lDQotDQotI2RlZmluZSBqY29weV9ibG9ja19yb3cgRk9YSVRfUFJFRklYKGpjb3B5X2Jsb2NrX3JvdykNCi0jZGVmaW5lIGpjb3B5X3NhbXBsZV9yb3dzIEZPWElUX1BSRUZJWChqY29weV9zYW1wbGVfcm93cykNCi0jZGVmaW5lIGpkaXZfcm91bmRfdXAgRk9YSVRfUFJFRklYKGpkaXZfcm91bmRfdXApDQotI2RlZmluZSBqaW5pdF8xcGFzc19xdWFudGl6ZXIgRk9YSVRfUFJFRklYKGppbml0XzFwYXNzX3F1YW50aXplcikNCi0jZGVmaW5lIGppbml0XzJwYXNzX3F1YW50aXplciBGT1hJVF9QUkVGSVgoamluaXRfMnBhc3NfcXVhbnRpemVyKQ0KLSNkZWZpbmUgamluaXRfY29sb3JfZGVjb252ZXJ0ZXIgRk9YSVRfUFJFRklYKGppbml0X2NvbG9yX2RlY29udmVydGVyKQ0KLSNkZWZpbmUgamluaXRfZF9jb2VmX2NvbnRyb2xsZXIgRk9YSVRfUFJFRklYKGppbml0X2RfY29lZl9jb250cm9sbGVyKQ0KLSNkZWZpbmUgamluaXRfZF9tYWluX2NvbnRyb2xsZXIgRk9YSVRfUFJFRklYKGppbml0X2RfbWFpbl9jb250cm9sbGVyKQ0KLSNkZWZpbmUgamluaXRfZF9wb3N0X2NvbnRyb2xsZXIgRk9YSVRfUFJFRklYKGppbml0X2RfcG9zdF9jb250cm9sbGVyKQ0KLSNkZWZpbmUgamluaXRfaHVmZl9kZWNvZGVyIEZPWElUX1BSRUZJWChqaW5pdF9odWZmX2RlY29kZXIpDQotI2RlZmluZSBqaW5pdF9pbnB1dF9jb250cm9sbGVyIEZPWElUX1BSRUZJWChqaW5pdF9pbnB1dF9jb250cm9sbGVyKQ0KLSNkZWZpbmUgamluaXRfaW52ZXJzZV9kY3QgRk9YSVRfUFJFRklYKGppbml0X2ludmVyc2VfZGN0KQ0KLSNkZWZpbmUgamluaXRfbWFya2VyX3JlYWRlciBGT1hJVF9QUkVGSVgoamluaXRfbWFya2VyX3JlYWRlcikNCi0jZGVmaW5lIGppbml0X21hc3Rlcl9kZWNvbXByZXNzIEZPWElUX1BSRUZJWChqaW5pdF9tYXN0ZXJfZGVjb21wcmVzcykNCi0jZGVmaW5lIGppbml0X21lbW9yeV9tZ3IgRk9YSVRfUFJFRklYKGppbml0X21lbW9yeV9tZ3IpDQotI2RlZmluZSBqaW5pdF9tZXJnZWRfdXBzYW1wbGVyIEZPWElUX1BSRUZJWChqaW5pdF9tZXJnZWRfdXBzYW1wbGVyKQ0KLSNkZWZpbmUgamluaXRfcGh1ZmZfZGVjb2RlciBGT1hJVF9QUkVGSVgoamluaXRfcGh1ZmZfZGVjb2RlcikNCi0jZGVmaW5lIGppbml0X3Vwc2FtcGxlciBGT1hJVF9QUkVGSVgoamluaXRfdXBzYW1wbGVyKQ0KLSNkZWZpbmUganBlZ19DcmVhdGVEZWNvbXByZXNzIEZPWElUX1BSRUZJWChqcGVnX0NyZWF0ZURlY29tcHJlc3MpDQotI2RlZmluZSBqcGVnX2Fib3J0IEZPWElUX1BSRUZJWChqcGVnX2Fib3J0KQ0KLSNkZWZpbmUganBlZ19hYm9ydF9kZWNvbXByZXNzIEZPWElUX1BSRUZJWChqcGVnX2Fib3J0X2RlY29tcHJlc3MpDQotI2RlZmluZSBqcGVnX2FsbG9jX2h1ZmZfdGFibGUgRk9YSVRfUFJFRklYKGpwZWdfYWxsb2NfaHVmZl90YWJsZSkNCi0jZGVmaW5lIGpwZWdfYWxsb2NfcXVhbnRfdGFibGUgRk9YSVRfUFJFRklYKGpwZWdfYWxsb2NfcXVhbnRfdGFibGUpDQotI2RlZmluZSBqcGVnX2NhbGNfb3V0cHV0X2RpbWVuc2lvbnMgRk9YSVRfUFJFRklYKGpwZWdfY2FsY19vdXRwdXRfZGltZW5zaW9ucykNCi0jZGVmaW5lIGpwZWdfY29uc3VtZV9pbnB1dCBGT1hJVF9QUkVGSVgoanBlZ19jb25zdW1lX2lucHV0KQ0KLSNkZWZpbmUganBlZ19kZXN0cm95IEZPWElUX1BSRUZJWChqcGVnX2Rlc3Ryb3kpDQotI2RlZmluZSBqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcyBGT1hJVF9QUkVGSVgoanBlZ19kZXN0cm95X2RlY29tcHJlc3MpDQotI2RlZmluZSBqcGVnX2ZpbGxfYml0X2J1ZmZlciBGT1hJVF9QUkVGSVgoanBlZ19maWxsX2JpdF9idWZmZXIpDQotI2RlZmluZSBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzIEZPWElUX1BSRUZJWChqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKQ0KLSNkZWZpbmUganBlZ19maW5pc2hfb3V0cHV0IEZPWElUX1BSRUZJWChqcGVnX2ZpbmlzaF9vdXRwdXQpDQotI2RlZmluZSBqcGVnX2ZyZWVfbGFyZ2UgRk9YSVRfUFJFRklYKGpwZWdfZnJlZV9sYXJnZSkNCi0jZGVmaW5lIGpwZWdfZnJlZV9zbWFsbCBGT1hJVF9QUkVGSVgoanBlZ19mcmVlX3NtYWxsKQ0KLSNkZWZpbmUganBlZ19nZXRfbGFyZ2UgRk9YSVRfUFJFRklYKGpwZWdfZ2V0X2xhcmdlKQ0KLSNkZWZpbmUganBlZ19nZXRfc21hbGwgRk9YSVRfUFJFRklYKGpwZWdfZ2V0X3NtYWxsKQ0KLSNkZWZpbmUganBlZ19oYXNfbXVsdGlwbGVfc2NhbnMgRk9YSVRfUFJFRklYKGpwZWdfaGFzX211bHRpcGxlX3NjYW5zKQ0KLSNkZWZpbmUganBlZ19odWZmX2RlY29kZSBGT1hJVF9QUkVGSVgoanBlZ19odWZmX2RlY29kZSkNCi0jZGVmaW5lIGpwZWdfaWRjdF8xeDEgRk9YSVRfUFJFRklYKGpwZWdfaWRjdF8xeDEpDQotI2RlZmluZSBqcGVnX2lkY3RfMngyIEZPWElUX1BSRUZJWChqcGVnX2lkY3RfMngyKQ0KLSNkZWZpbmUganBlZ19pZGN0XzR4NCBGT1hJVF9QUkVGSVgoanBlZ19pZGN0XzR4NCkNCi0jZGVmaW5lIGpwZWdfaWRjdF9mbG9hdCBGT1hJVF9QUkVGSVgoanBlZ19pZGN0X2Zsb2F0KQ0KLSNkZWZpbmUganBlZ19pZGN0X2lmYXN0IEZPWElUX1BSRUZJWChqcGVnX2lkY3RfaWZhc3QpDQotI2RlZmluZSBqcGVnX2lkY3RfaXNsb3cgRk9YSVRfUFJFRklYKGpwZWdfaWRjdF9pc2xvdykNCi0jZGVmaW5lIGpwZWdfaW5wdXRfY29tcGxldGUgRk9YSVRfUFJFRklYKGpwZWdfaW5wdXRfY29tcGxldGUpDQotI2RlZmluZSBqcGVnX21ha2VfZF9kZXJpdmVkX3RibCBGT1hJVF9QUkVGSVgoanBlZ19tYWtlX2RfZGVyaXZlZF90YmwpDQotI2RlZmluZSBqcGVnX21lbV9hdmFpbGFibGUgRk9YSVRfUFJFRklYKGpwZWdfbWVtX2F2YWlsYWJsZSkNCi0jZGVmaW5lIGpwZWdfbWVtX2luaXQgRk9YSVRfUFJFRklYKGpwZWdfbWVtX2luaXQpDQotI2RlZmluZSBqcGVnX21lbV90ZXJtIEZPWElUX1BSRUZJWChqcGVnX21lbV90ZXJtKQ0KLSNkZWZpbmUganBlZ19uYXR1cmFsX29yZGVyIEZPWElUX1BSRUZJWChqcGVnX25hdHVyYWxfb3JkZXIpDQotI2RlZmluZSBqcGVnX25ld19jb2xvcm1hcCBGT1hJVF9QUkVGSVgoanBlZ19uZXdfY29sb3JtYXApDQotI2RlZmluZSBqcGVnX29wZW5fYmFja2luZ19zdG9yZSBGT1hJVF9QUkVGSVgoanBlZ19vcGVuX2JhY2tpbmdfc3RvcmUpDQotI2RlZmluZSBqcGVnX3JlYWRfY29lZmZpY2llbnRzIEZPWElUX1BSRUZJWChqcGVnX3JlYWRfY29lZmZpY2llbnRzKQ0KLSNkZWZpbmUganBlZ19yZWFkX2hlYWRlciBGT1hJVF9QUkVGSVgoanBlZ19yZWFkX2hlYWRlcikNCi0jZGVmaW5lIGpwZWdfcmVhZF9yYXdfZGF0YSBGT1hJVF9QUkVGSVgoanBlZ19yZWFkX3Jhd19kYXRhKQ0KLSNkZWZpbmUganBlZ19yZWFkX3NjYW5saW5lcyBGT1hJVF9QUkVGSVgoanBlZ19yZWFkX3NjYW5saW5lcykNCi0jZGVmaW5lIGpwZWdfcmVzeW5jX3RvX3Jlc3RhcnQgRk9YSVRfUFJFRklYKGpwZWdfcmVzeW5jX3RvX3Jlc3RhcnQpDQotI2RlZmluZSBqcGVnX3NhdmVfbWFya2VycyBGT1hJVF9QUkVGSVgoanBlZ19zYXZlX21hcmtlcnMpDQotI2RlZmluZSBqcGVnX3NldF9tYXJrZXJfcHJvY2Vzc29yIEZPWElUX1BSRUZJWChqcGVnX3NldF9tYXJrZXJfcHJvY2Vzc29yKQ0KLSNkZWZpbmUganBlZ19zdGFydF9kZWNvbXByZXNzIEZPWElUX1BSRUZJWChqcGVnX3N0YXJ0X2RlY29tcHJlc3MpDQotI2RlZmluZSBqcGVnX3N0YXJ0X291dHB1dCBGT1hJVF9QUkVGSVgoanBlZ19zdGFydF9vdXRwdXQpDQotI2RlZmluZSBqcGVnX3N0ZF9lcnJvciBGT1hJVF9QUkVGSVgoanBlZ19zdGRfZXJyb3IpDQotI2RlZmluZSBqcGVnX3N0ZF9tZXNzYWdlX3RhYmxlIEZPWElUX1BSRUZJWChqcGVnX3N0ZF9tZXNzYWdlX3RhYmxlKQ0KLSNkZWZpbmUganBlZ19zdGRpb19zcmMgRk9YSVRfUFJFRklYKGpwZWdfc3RkaW9fc3JjKQ0KLSNkZWZpbmUganJvdW5kX3VwIEZPWElUX1BSRUZJWChqcm91bmRfdXApDQotI2RlZmluZSBqemVyb19mYXIgRk9YSVRfUFJFRklYKGp6ZXJvX2ZhcikNCi0NCi0gLyoNCi0gKiBGaXJzdCB3ZSBpbmNsdWRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgcmVjb3JkIGhvdyB0aGlzDQotICogaW5zdGFsbGF0aW9uIG9mIHRoZSBKUEVHIGxpYnJhcnkgaXMgc2V0IHVwLiAgamNvbmZpZy5oIGNhbiBiZQ0KLSAqIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZvciBtYW55IHN5c3RlbXMuICBqbW9yZWNmZy5oIGNvbnRhaW5zDQotICogbWFudWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1vc3QgcGVvcGxlIG5lZWQgbm90IHdvcnJ5IGFib3V0Lg0KLSAqLw0KLQ0KLSNpZm5kZWYgSkNPTkZJR19JTkNMVURFRAkvKiBpbiBjYXNlIGppbmNsdWRlLmggYWxyZWFkeSBkaWQgKi8NCi0jaW5jbHVkZSAiamNvbmZpZy5oIgkJLyogd2lkZWx5IHVzZWQgY29uZmlndXJhdGlvbiBvcHRpb25zICovDQotI2VuZGlmDQotI2luY2x1ZGUgImptb3JlY2ZnLmgiCQkvKiBzZWxkb20gY2hhbmdlZCBvcHRpb25zICovDQotDQotDQotLyogVmVyc2lvbiBJRCBmb3IgdGhlIEpQRUcgbGlicmFyeS4NCi0gKiBNaWdodCBiZSB1c2VmdWwgZm9yIHRlc3RzIGxpa2UgIiNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDYwIi4NCi0gKi8NCi0NCi0jZGVmaW5lIEpQRUdfTElCX1ZFUlNJT04gIDYyCS8qIFZlcnNpb24gNmIgKi8NCi0NCi0NCi0vKiBWYXJpb3VzIGNvbnN0YW50cyBkZXRlcm1pbmluZyB0aGUgc2l6ZXMgb2YgdGhpbmdzLg0KLSAqIEFsbCBvZiB0aGVzZSBhcmUgc3BlY2lmaWVkIGJ5IHRoZSBKUEVHIHN0YW5kYXJkLCBzbyBkb24ndCBjaGFuZ2UgdGhlbQ0KLSAqIGlmIHlvdSB3YW50IHRvIGJlIGNvbXBhdGlibGUuDQotICovDQotDQotI2RlZmluZSBEQ1RTSVpFCQkgICAgOAkvKiBUaGUgYmFzaWMgRENUIGJsb2NrIGlzIDh4OCBzYW1wbGVzICovDQotI2RlZmluZSBEQ1RTSVpFMgkgICAgNjQJLyogRENUU0laRSBzcXVhcmVkOyAjIG9mIGVsZW1lbnRzIGluIGEgYmxvY2sgKi8NCi0jZGVmaW5lIE5VTV9RVUFOVF9UQkxTICAgICAgNAkvKiBRdWFudGl6YXRpb24gdGFibGVzIGFyZSBudW1iZXJlZCAwLi4zICovDQotI2RlZmluZSBOVU1fSFVGRl9UQkxTICAgICAgIDQJLyogSHVmZm1hbiB0YWJsZXMgYXJlIG51bWJlcmVkIDAuLjMgKi8NCi0jZGVmaW5lIE5VTV9BUklUSF9UQkxTICAgICAgMTYJLyogQXJpdGgtY29kaW5nIHRhYmxlcyBhcmUgbnVtYmVyZWQgMC4uMTUgKi8NCi0jZGVmaW5lIE1BWF9DT01QU19JTl9TQ0FOICAgNAkvKiBKUEVHIGxpbWl0IG9uICMgb2YgY29tcG9uZW50cyBpbiBvbmUgc2NhbiAqLw0KLSNkZWZpbmUgTUFYX1NBTVBfRkFDVE9SICAgICA0CS8qIEpQRUcgbGltaXQgb24gc2FtcGxpbmcgZmFjdG9ycyAqLw0KLS8qIFVuZm9ydHVuYXRlbHksIHNvbWUgYm96byBhdCBBZG9iZSBzYXcgbm8gcmVhc29uIHRvIGJlIGJvdW5kIGJ5IHRoZSBzdGFuZGFyZDsNCi0gKiB0aGUgUG9zdFNjcmlwdCBEQ1QgZmlsdGVyIGNhbiBlbWl0IGZpbGVzIHdpdGggbWFueSBtb3JlIHRoYW4gMTAgYmxvY2tzL01DVS4NCi0gKiBJZiB5b3UgaGFwcGVuIHRvIHJ1biBhY3Jvc3Mgc3VjaCBhIGZpbGUsIHlvdSBjYW4gdXAgRF9NQVhfQkxPQ0tTX0lOX01DVQ0KLSAqIHRvIGhhbmRsZSBpdC4gIFdlIGV2ZW4gbGV0IHlvdSBkbyB0aGlzIGZyb20gdGhlIGpjb25maWcuaCBmaWxlLiAgSG93ZXZlciwNCi0gKiB3ZSBzdHJvbmdseSBkaXNjb3VyYWdlIGNoYW5naW5nIENfTUFYX0JMT0NLU19JTl9NQ1U7IGp1c3QgYmVjYXVzZSBBZG9iZQ0KLSAqIHNvbWV0aW1lcyBlbWl0cyBub25jb21wbGlhbnQgZmlsZXMgZG9lc24ndCBtZWFuIHlvdSBzaG91bGQgdG9vLg0KLSAqLw0KLSNkZWZpbmUgQ19NQVhfQkxPQ0tTX0lOX01DVSAgIDEwIC8qIGNvbXByZXNzb3IncyBsaW1pdCBvbiBibG9ja3MgcGVyIE1DVSAqLw0KLSNpZm5kZWYgRF9NQVhfQkxPQ0tTX0lOX01DVQ0KLSNkZWZpbmUgRF9NQVhfQkxPQ0tTX0lOX01DVSAgIDEwIC8qIGRlY29tcHJlc3NvcidzIGxpbWl0IG9uIGJsb2NrcyBwZXIgTUNVICovDQotI2VuZGlmDQotDQotDQotLyogRGF0YSBzdHJ1Y3R1cmVzIGZvciBpbWFnZXMgKGFycmF5cyBvZiBzYW1wbGVzIGFuZCBvZiBEQ1QgY29lZmZpY2llbnRzKS4NCi0gKiBPbiA4MHg4NiBtYWNoaW5lcywgdGhlIGltYWdlIGFycmF5cyBhcmUgdG9vIGJpZyBmb3IgbmVhciBwb2ludGVycywNCi0gKiBidXQgdGhlIHBvaW50ZXIgYXJyYXlzIGNhbiBmaXQgaW4gbmVhciBtZW1vcnkuDQotICovDQotDQotdHlwZWRlZiBKU0FNUExFICAqSlNBTVBST1c7CS8qIHB0ciB0byBvbmUgaW1hZ2Ugcm93IG9mIHBpeGVsIHNhbXBsZXMuICovDQotdHlwZWRlZiBKU0FNUFJPVyAqSlNBTVBBUlJBWTsJLyogcHRyIHRvIHNvbWUgcm93cyAoYSAyLUQgc2FtcGxlIGFycmF5KSAqLw0KLXR5cGVkZWYgSlNBTVBBUlJBWSAqSlNBTVBJTUFHRTsJLyogYSAzLUQgc2FtcGxlIGFycmF5OiB0b3AgaW5kZXggaXMgY29sb3IgKi8NCi0NCi10eXBlZGVmIEpDT0VGIEpCTE9DS1tEQ1RTSVpFMl07CS8qIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMgKi8NCi10eXBlZGVmIEpCTE9DSyAgKkpCTE9DS1JPVzsJLyogcG9pbnRlciB0byBvbmUgcm93IG9mIGNvZWZmaWNpZW50IGJsb2NrcyAqLw0KLXR5cGVkZWYgSkJMT0NLUk9XICpKQkxPQ0tBUlJBWTsJCS8qIGEgMi1EIGFycmF5IG9mIGNvZWZmaWNpZW50IGJsb2NrcyAqLw0KLXR5cGVkZWYgSkJMT0NLQVJSQVkgKkpCTE9DS0lNQUdFOwkvKiBhIDMtRCBhcnJheSBvZiBjb2VmZmljaWVudCBibG9ja3MgKi8NCi0NCi10eXBlZGVmIEpDT0VGICAqSkNPRUZQVFI7CS8qIHVzZWZ1bCBpbiBhIGNvdXBsZSBvZiBwbGFjZXMgKi8NCi0NCi0NCi0vKiBUeXBlcyBmb3IgSlBFRyBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGFuZCB3b3JraW5nIHRhYmxlcy4gKi8NCi0NCi0NCi0vKiBEQ1QgY29lZmZpY2llbnQgcXVhbnRpemF0aW9uIHRhYmxlcy4gKi8NCi0NCi10eXBlZGVmIHN0cnVjdCB7DQotICAvKiBUaGlzIGFycmF5IGdpdmVzIHRoZSBjb2VmZmljaWVudCBxdWFudGl6ZXJzIGluIG5hdHVyYWwgYXJyYXkgb3JkZXINCi0gICAqIChub3QgdGhlIHppZ3phZyBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSBzdG9yZWQgaW4gYSBKUEVHIERRVCBtYXJrZXIpLg0KLSAgICogQ0FVVElPTjogSUpHIHZlcnNpb25zIHByaW9yIHRvIHY2YSBrZXB0IHRoaXMgYXJyYXkgaW4gemlnemFnIG9yZGVyLg0KLSAgICovDQotICBVSU5UMTYgcXVhbnR2YWxbRENUU0laRTJdOwkvKiBxdWFudGl6YXRpb24gc3RlcCBmb3IgZWFjaCBjb2VmZmljaWVudCAqLw0KLSAgLyogVGhpcyBmaWVsZCBpcyB1c2VkIG9ubHkgZHVyaW5nIGNvbXByZXNzaW9uLiAgSXQncyBpbml0aWFsaXplZCBGQUxTRSB3aGVuDQotICAgKiB0aGUgdGFibGUgaXMgY3JlYXRlZCwgYW5kIHNldCBUUlVFIHdoZW4gaXQncyBiZWVuIG91dHB1dCB0byB0aGUgZmlsZS4NCi0gICAqIFlvdSBjb3VsZCBzdXBwcmVzcyBvdXRwdXQgb2YgYSB0YWJsZSBieSBzZXR0aW5nIHRoaXMgdG8gVFJVRS4NCi0gICAqIChTZWUganBlZ19zdXBwcmVzc190YWJsZXMgZm9yIGFuIGV4YW1wbGUuKQ0KLSAgICovDQotICBib29sZWFuIHNlbnRfdGFibGU7CQkvKiBUUlVFIHdoZW4gdGFibGUgaGFzIGJlZW4gb3V0cHV0ICovDQotfSBKUVVBTlRfVEJMOw0KLQ0KLQ0KLS8qIEh1ZmZtYW4gY29kaW5nIHRhYmxlcy4gKi8NCi0NCi10eXBlZGVmIHN0cnVjdCB7DQotICAvKiBUaGVzZSB0d28gZmllbGRzIGRpcmVjdGx5IHJlcHJlc2VudCB0aGUgY29udGVudHMgb2YgYSBKUEVHIERIVCBtYXJrZXIgKi8NCi0gIFVJTlQ4IGJpdHNbMTddOwkJLyogYml0c1trXSA9ICMgb2Ygc3ltYm9scyB3aXRoIGNvZGVzIG9mICovDQotCQkJCS8qIGxlbmd0aCBrIGJpdHM7IGJpdHNbMF0gaXMgdW51c2VkICovDQotICBVSU5UOCBodWZmdmFsWzI1Nl07CQkvKiBUaGUgc3ltYm9scywgaW4gb3JkZXIgb2YgaW5jciBjb2RlIGxlbmd0aCAqLw0KLSAgLyogVGhpcyBmaWVsZCBpcyB1c2VkIG9ubHkgZHVyaW5nIGNvbXByZXNzaW9uLiAgSXQncyBpbml0aWFsaXplZCBGQUxTRSB3aGVuDQotICAgKiB0aGUgdGFibGUgaXMgY3JlYXRlZCwgYW5kIHNldCBUUlVFIHdoZW4gaXQncyBiZWVuIG91dHB1dCB0byB0aGUgZmlsZS4NCi0gICAqIFlvdSBjb3VsZCBzdXBwcmVzcyBvdXRwdXQgb2YgYSB0YWJsZSBieSBzZXR0aW5nIHRoaXMgdG8gVFJVRS4NCi0gICAqIChTZWUganBlZ19zdXBwcmVzc190YWJsZXMgZm9yIGFuIGV4YW1wbGUuKQ0KLSAgICovDQotICBib29sZWFuIHNlbnRfdGFibGU7CQkvKiBUUlVFIHdoZW4gdGFibGUgaGFzIGJlZW4gb3V0cHV0ICovDQotfSBKSFVGRl9UQkw7DQotDQotDQotLyogQmFzaWMgaW5mbyBhYm91dCBvbmUgY29tcG9uZW50IChjb2xvciBjaGFubmVsKS4gKi8NCi0NCi10eXBlZGVmIHN0cnVjdCB7DQotICAvKiBUaGVzZSB2YWx1ZXMgYXJlIGZpeGVkIG92ZXIgdGhlIHdob2xlIGltYWdlLiAqLw0KLSAgLyogRm9yIGNvbXByZXNzaW9uLCB0aGV5IG11c3QgYmUgc3VwcGxpZWQgYnkgcGFyYW1ldGVyIHNldHVwOyAqLw0KLSAgLyogZm9yIGRlY29tcHJlc3Npb24sIHRoZXkgYXJlIHJlYWQgZnJvbSB0aGUgU09GIG1hcmtlci4gKi8NCi0gIGludCBjb21wb25lbnRfaWQ7CQkvKiBpZGVudGlmaWVyIGZvciB0aGlzIGNvbXBvbmVudCAoMC4uMjU1KSAqLw0KLSAgaW50IGNvbXBvbmVudF9pbmRleDsJCS8qIGl0cyBpbmRleCBpbiBTT0Ygb3IgY2luZm8tPmNvbXBfaW5mb1tdICovDQotICBpbnQgaF9zYW1wX2ZhY3RvcjsJCS8qIGhvcml6b250YWwgc2FtcGxpbmcgZmFjdG9yICgxLi40KSAqLw0KLSAgaW50IHZfc2FtcF9mYWN0b3I7CQkvKiB2ZXJ0aWNhbCBzYW1wbGluZyBmYWN0b3IgKDEuLjQpICovDQotICBpbnQgcXVhbnRfdGJsX25vOwkJLyogcXVhbnRpemF0aW9uIHRhYmxlIHNlbGVjdG9yICgwLi4zKSAqLw0KLSAgLyogVGhlc2UgdmFsdWVzIG1heSB2YXJ5IGJldHdlZW4gc2NhbnMuICovDQotICAvKiBGb3IgY29tcHJlc3Npb24sIHRoZXkgbXVzdCBiZSBzdXBwbGllZCBieSBwYXJhbWV0ZXIgc2V0dXA7ICovDQotICAvKiBmb3IgZGVjb21wcmVzc2lvbiwgdGhleSBhcmUgcmVhZCBmcm9tIHRoZSBTT1MgbWFya2VyLiAqLw0KLSAgLyogVGhlIGRlY29tcHJlc3NvciBvdXRwdXQgc2lkZSBtYXkgbm90IHVzZSB0aGVzZSB2YXJpYWJsZXMuICovDQotICBpbnQgZGNfdGJsX25vOwkJLyogREMgZW50cm9weSB0YWJsZSBzZWxlY3RvciAoMC4uMykgKi8NCi0gIGludCBhY190Ymxfbm87CQkvKiBBQyBlbnRyb3B5IHRhYmxlIHNlbGVjdG9yICgwLi4zKSAqLw0KLSAgDQotICAvKiBSZW1haW5pbmcgZmllbGRzIHNob3VsZCBiZSB0cmVhdGVkIGFzIHByaXZhdGUgYnkgYXBwbGljYXRpb25zLiAqLw0KLSAgDQotICAvKiBUaGVzZSB2YWx1ZXMgYXJlIGNvbXB1dGVkIGR1cmluZyBjb21wcmVzc2lvbiBvciBkZWNvbXByZXNzaW9uIHN0YXJ0dXA6ICovDQotICAvKiBDb21wb25lbnQncyBzaXplIGluIERDVCBibG9ja3MuDQotICAgKiBBbnkgZHVtbXkgYmxvY2tzIGFkZGVkIHRvIGNvbXBsZXRlIGFuIE1DVSBhcmUgbm90IGNvdW50ZWQ7IHRoZXJlZm9yZQ0KLSAgICogdGhlc2UgdmFsdWVzIGRvIG5vdCBkZXBlbmQgb24gd2hldGhlciBhIHNjYW4gaXMgaW50ZXJsZWF2ZWQgb3Igbm90Lg0KLSAgICovDQotICBKRElNRU5TSU9OIHdpZHRoX2luX2Jsb2NrczsNCi0gIEpESU1FTlNJT04gaGVpZ2h0X2luX2Jsb2NrczsNCi0gIC8qIFNpemUgb2YgYSBEQ1QgYmxvY2sgaW4gc2FtcGxlcy4gIEFsd2F5cyBEQ1RTSVpFIGZvciBjb21wcmVzc2lvbi4NCi0gICAqIEZvciBkZWNvbXByZXNzaW9uIHRoaXMgaXMgdGhlIHNpemUgb2YgdGhlIG91dHB1dCBmcm9tIG9uZSBEQ1QgYmxvY2ssDQotICAgKiByZWZsZWN0aW5nIGFueSBzY2FsaW5nIHdlIGNob29zZSB0byBhcHBseSBkdXJpbmcgdGhlIElEQ1Qgc3RlcC4NCi0gICAqIFZhbHVlcyBvZiAxLDIsNCw4IGFyZSBsaWtlbHkgdG8gYmUgc3VwcG9ydGVkLiAgTm90ZSB0aGF0IGRpZmZlcmVudA0KLSAgICogY29tcG9uZW50cyBtYXkgcmVjZWl2ZSBkaWZmZXJlbnQgSURDVCBzY2FsaW5ncy4NCi0gICAqLw0KLSAgaW50IERDVF9zY2FsZWRfc2l6ZTsNCi0gIC8qIFRoZSBkb3duc2FtcGxlZCBkaW1lbnNpb25zIGFyZSB0aGUgY29tcG9uZW50J3MgYWN0dWFsLCB1bnBhZGRlZCBudW1iZXINCi0gICAqIG9mIHNhbXBsZXMgYXQgdGhlIG1haW4gYnVmZmVyIChwcmVwcm9jZXNzaW5nL2NvbXByZXNzaW9uIGludGVyZmFjZSksIHRodXMNCi0gICAqIGRvd25zYW1wbGVkX3dpZHRoID0gY2VpbChpbWFnZV93aWR0aCAqIEhpL0htYXgpDQotICAgKiBhbmQgc2ltaWxhcmx5IGZvciBoZWlnaHQuICBGb3IgZGVjb21wcmVzc2lvbiwgSURDVCBzY2FsaW5nIGlzIGluY2x1ZGVkLCBzbw0KLSAgICogZG93bnNhbXBsZWRfd2lkdGggPSBjZWlsKGltYWdlX3dpZHRoICogSGkvSG1heCAqIERDVF9zY2FsZWRfc2l6ZS9EQ1RTSVpFKQ0KLSAgICovDQotICBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoOwkgLyogYWN0dWFsIHdpZHRoIGluIHNhbXBsZXMgKi8NCi0gIEpESU1FTlNJT04gZG93bnNhbXBsZWRfaGVpZ2h0OyAvKiBhY3R1YWwgaGVpZ2h0IGluIHNhbXBsZXMgKi8NCi0gIC8qIFRoaXMgZmxhZyBpcyB1c2VkIG9ubHkgZm9yIGRlY29tcHJlc3Npb24uICBJbiBjYXNlcyB3aGVyZSBzb21lIG9mIHRoZQ0KLSAgICogY29tcG9uZW50cyB3aWxsIGJlIGlnbm9yZWQgKGVnIGdyYXlzY2FsZSBvdXRwdXQgZnJvbSBZQ2JDciBpbWFnZSksDQotICAgKiB3ZSBjYW4gc2tpcCBtb3N0IGNvbXB1dGF0aW9ucyBmb3IgdGhlIHVudXNlZCBjb21wb25lbnRzLg0KLSAgICovDQotICBib29sZWFuIGNvbXBvbmVudF9uZWVkZWQ7CS8qIGRvIHdlIG5lZWQgdGhlIHZhbHVlIG9mIHRoaXMgY29tcG9uZW50PyAqLw0KLQ0KLSAgLyogVGhlc2UgdmFsdWVzIGFyZSBjb21wdXRlZCBiZWZvcmUgc3RhcnRpbmcgYSBzY2FuIG9mIHRoZSBjb21wb25lbnQuICovDQotICAvKiBUaGUgZGVjb21wcmVzc29yIG91dHB1dCBzaWRlIG1heSBub3QgdXNlIHRoZXNlIHZhcmlhYmxlcy4gKi8NCi0gIGludCBNQ1Vfd2lkdGg7CQkvKiBudW1iZXIgb2YgYmxvY2tzIHBlciBNQ1UsIGhvcml6b250YWxseSAqLw0KLSAgaW50IE1DVV9oZWlnaHQ7CQkvKiBudW1iZXIgb2YgYmxvY2tzIHBlciBNQ1UsIHZlcnRpY2FsbHkgKi8NCi0gIGludCBNQ1VfYmxvY2tzOwkJLyogTUNVX3dpZHRoICogTUNVX2hlaWdodCAqLw0KLSAgaW50IE1DVV9zYW1wbGVfd2lkdGg7CQkvKiBNQ1Ugd2lkdGggaW4gc2FtcGxlcywgTUNVX3dpZHRoKkRDVF9zY2FsZWRfc2l6ZSAqLw0KLSAgaW50IGxhc3RfY29sX3dpZHRoOwkJLyogIyBvZiBub24tZHVtbXkgYmxvY2tzIGFjcm9zcyBpbiBsYXN0IE1DVSAqLw0KLSAgaW50IGxhc3Rfcm93X2hlaWdodDsJCS8qICMgb2Ygbm9uLWR1bW15IGJsb2NrcyBkb3duIGluIGxhc3QgTUNVICovDQotDQotICAvKiBTYXZlZCBxdWFudGl6YXRpb24gdGFibGUgZm9yIGNvbXBvbmVudDsgTlVMTCBpZiBub25lIHlldCBzYXZlZC4NCi0gICAqIFNlZSBqZGlucHV0LmMgY29tbWVudHMgYWJvdXQgdGhlIG5lZWQgZm9yIHRoaXMgaW5mb3JtYXRpb24uDQotICAgKiBUaGlzIGZpZWxkIGlzIGN1cnJlbnRseSB1c2VkIG9ubHkgZm9yIGRlY29tcHJlc3Npb24uDQotICAgKi8NCi0gIEpRVUFOVF9UQkwgKiBxdWFudF90YWJsZTsNCi0NCi0gIC8qIFByaXZhdGUgcGVyLWNvbXBvbmVudCBzdG9yYWdlIGZvciBEQ1Qgb3IgSURDVCBzdWJzeXN0ZW0uICovDQotICB2b2lkICogZGN0X3RhYmxlOw0KLX0ganBlZ19jb21wb25lbnRfaW5mbzsNCi0NCi0NCi0vKiBUaGUgc2NyaXB0IGZvciBlbmNvZGluZyBhIG11bHRpcGxlLXNjYW4gZmlsZSBpcyBhbiBhcnJheSBvZiB0aGVzZTogKi8NCi0NCi10eXBlZGVmIHN0cnVjdCB7DQotICBpbnQgY29tcHNfaW5fc2NhbjsJCS8qIG51bWJlciBvZiBjb21wb25lbnRzIGVuY29kZWQgaW4gdGhpcyBzY2FuICovDQotICBpbnQgY29tcG9uZW50X2luZGV4W01BWF9DT01QU19JTl9TQ0FOXTsgLyogdGhlaXIgU09GL2NvbXBfaW5mb1tdIGluZGV4ZXMgKi8NCi0gIGludCBTcywgU2U7CQkJLyogcHJvZ3Jlc3NpdmUgSlBFRyBzcGVjdHJhbCBzZWxlY3Rpb24gcGFybXMgKi8NCi0gIGludCBBaCwgQWw7CQkJLyogcHJvZ3Jlc3NpdmUgSlBFRyBzdWNjZXNzaXZlIGFwcHJveC4gcGFybXMgKi8NCi19IGpwZWdfc2Nhbl9pbmZvOw0KLQ0KLS8qIFRoZSBkZWNvbXByZXNzb3IgY2FuIHNhdmUgQVBQbiBhbmQgQ09NIG1hcmtlcnMgaW4gYSBsaXN0IG9mIHRoZXNlOiAqLw0KLQ0KLXR5cGVkZWYgc3RydWN0IGpwZWdfbWFya2VyX3N0cnVjdCAgKiBqcGVnX3NhdmVkX21hcmtlcl9wdHI7DQotDQotc3RydWN0IGpwZWdfbWFya2VyX3N0cnVjdCB7DQotICBqcGVnX3NhdmVkX21hcmtlcl9wdHIgbmV4dDsJLyogbmV4dCBpbiBsaXN0LCBvciBOVUxMICovDQotICBVSU5UOCBtYXJrZXI7CQkJLyogbWFya2VyIGNvZGU6IEpQRUdfQ09NLCBvciBKUEVHX0FQUDArbiAqLw0KLSAgdW5zaWduZWQgaW50IG9yaWdpbmFsX2xlbmd0aDsJLyogIyBieXRlcyBvZiBkYXRhIGluIHRoZSBmaWxlICovDQotICB1bnNpZ25lZCBpbnQgZGF0YV9sZW5ndGg7CS8qICMgYnl0ZXMgb2YgZGF0YSBzYXZlZCBhdCBkYXRhW10gKi8NCi0gIEpPQ1RFVCAgKiBkYXRhOwkJLyogdGhlIGRhdGEgY29udGFpbmVkIGluIHRoZSBtYXJrZXIgKi8NCi0gIC8qIHRoZSBtYXJrZXIgbGVuZ3RoIHdvcmQgaXMgbm90IGNvdW50ZWQgaW4gZGF0YV9sZW5ndGggb3Igb3JpZ2luYWxfbGVuZ3RoICovDQotfTsNCi0NCi0vKiBLbm93biBjb2xvciBzcGFjZXMuICovDQotDQotdHlwZWRlZiBlbnVtIHsNCi0JSkNTX1VOS05PV04sCQkvKiBlcnJvci91bnNwZWNpZmllZCAqLw0KLQlKQ1NfR1JBWVNDQUxFLAkJLyogbW9ub2Nocm9tZSAqLw0KLQlKQ1NfUkdCLAkJLyogcmVkL2dyZWVuL2JsdWUgKi8NCi0JSkNTX1lDYkNyLAkJLyogWS9DYi9DciAoYWxzbyBrbm93biBhcyBZVVYpICovDQotCUpDU19DTVlLLAkJLyogQy9NL1kvSyAqLw0KLQlKQ1NfWUNDSwkJLyogWS9DYi9Dci9LICovDQotfSBKX0NPTE9SX1NQQUNFOw0KLQ0KLS8qIERDVC9JRENUIGFsZ29yaXRobSBvcHRpb25zLiAqLw0KLQ0KLXR5cGVkZWYgZW51bSB7DQotCUpEQ1RfSVNMT1csCQkvKiBzbG93IGJ1dCBhY2N1cmF0ZSBpbnRlZ2VyIGFsZ29yaXRobSAqLw0KLQlKRENUX0lGQVNULAkJLyogZmFzdGVyLCBsZXNzIGFjY3VyYXRlIGludGVnZXIgbWV0aG9kICovDQotCUpEQ1RfRkxPQVQJCS8qIGZsb2F0aW5nLXBvaW50OiBhY2N1cmF0ZSwgZmFzdCBvbiBmYXN0IEhXICovDQotfSBKX0RDVF9NRVRIT0Q7DQotDQotI2lmbmRlZiBKRENUX0RFRkFVTFQJCS8qIG1heSBiZSBvdmVycmlkZGVuIGluIGpjb25maWcuaCAqLw0KLSNkZWZpbmUgSkRDVF9ERUZBVUxUICBKRENUX0lTTE9XDQotI2VuZGlmDQotI2lmbmRlZiBKRENUX0ZBU1RFU1QJCS8qIG1heSBiZSBvdmVycmlkZGVuIGluIGpjb25maWcuaCAqLw0KLSNkZWZpbmUgSkRDVF9GQVNURVNUICBKRENUX0lGQVNUDQotI2VuZGlmDQotDQotLyogRGl0aGVyaW5nIG9wdGlvbnMgZm9yIGRlY29tcHJlc3Npb24uICovDQotDQotdHlwZWRlZiBlbnVtIHsNCi0JSkRJVEhFUl9OT05FLAkJLyogbm8gZGl0aGVyaW5nICovDQotCUpESVRIRVJfT1JERVJFRCwJLyogc2ltcGxlIG9yZGVyZWQgZGl0aGVyICovDQotCUpESVRIRVJfRlMJCS8qIEZsb3lkLVN0ZWluYmVyZyBlcnJvciBkaWZmdXNpb24gZGl0aGVyICovDQotfSBKX0RJVEhFUl9NT0RFOw0KLQ0KLQ0KLS8qIENvbW1vbiBmaWVsZHMgYmV0d2VlbiBKUEVHIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIG1hc3RlciBzdHJ1Y3RzLiAqLw0KLQ0KLSNkZWZpbmUganBlZ19jb21tb25fZmllbGRzIFwNCi0gIHN0cnVjdCBqcGVnX2Vycm9yX21nciAqIGVycjsJLyogRXJyb3IgaGFuZGxlciBtb2R1bGUgKi9cDQotICBzdHJ1Y3QganBlZ19tZW1vcnlfbWdyICogbWVtOwkvKiBNZW1vcnkgbWFuYWdlciBtb2R1bGUgKi9cDQotICBzdHJ1Y3QganBlZ19wcm9ncmVzc19tZ3IgKiBwcm9ncmVzczsgLyogUHJvZ3Jlc3MgbW9uaXRvciwgb3IgTlVMTCBpZiBub25lICovXA0KLSAgdm9pZCAqIGNsaWVudF9kYXRhOwkJLyogQXZhaWxhYmxlIGZvciB1c2UgYnkgYXBwbGljYXRpb24gKi9cDQotICBib29sZWFuIGlzX2RlY29tcHJlc3NvcjsJLyogU28gY29tbW9uIGNvZGUgY2FuIHRlbGwgd2hpY2ggaXMgd2hpY2ggKi9cDQotICBpbnQgZ2xvYmFsX3N0YXRlCQkvKiBGb3IgY2hlY2tpbmcgY2FsbCBzZXF1ZW5jZSB2YWxpZGl0eSAqLw0KLQ0KLS8qIFJvdXRpbmVzIHRoYXQgYXJlIHRvIGJlIHVzZWQgYnkgYm90aCBoYWx2ZXMgb2YgdGhlIGxpYnJhcnkgYXJlIGRlY2xhcmVkDQotICogdG8gcmVjZWl2ZSBhIHBvaW50ZXIgdG8gdGhpcyBzdHJ1Y3R1cmUuICBUaGVyZSBhcmUgbm8gYWN0dWFsIGluc3RhbmNlcyBvZg0KLSAqIGpwZWdfY29tbW9uX3N0cnVjdCwgb25seSBvZiBqcGVnX2NvbXByZXNzX3N0cnVjdCBhbmQganBlZ19kZWNvbXByZXNzX3N0cnVjdC4NCi0gKi8NCi1zdHJ1Y3QganBlZ19jb21tb25fc3RydWN0IHsNCi0gIGpwZWdfY29tbW9uX2ZpZWxkczsJCS8qIEZpZWxkcyBjb21tb24gdG8gYm90aCBtYXN0ZXIgc3RydWN0IHR5cGVzICovDQotICAvKiBBZGRpdGlvbmFsIGZpZWxkcyBmb2xsb3cgaW4gYW4gYWN0dWFsIGpwZWdfY29tcHJlc3Nfc3RydWN0IG9yDQotICAgKiBqcGVnX2RlY29tcHJlc3Nfc3RydWN0LiAgQWxsIHRocmVlIHN0cnVjdHMgbXVzdCBhZ3JlZSBvbiB0aGVzZQ0KLSAgICogaW5pdGlhbCBmaWVsZHMhICAoVGhpcyB3b3VsZCBiZSBhIGxvdCBjbGVhbmVyIGluIEMrKy4pDQotICAgKi8NCi19Ow0KLQ0KLXR5cGVkZWYgc3RydWN0IGpwZWdfY29tbW9uX3N0cnVjdCAqIGpfY29tbW9uX3B0cjsNCi10eXBlZGVmIHN0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCAqIGpfY29tcHJlc3NfcHRyOw0KLXR5cGVkZWYgc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QgKiBqX2RlY29tcHJlc3NfcHRyOw0KLQ0KLQ0KLS8qIE1hc3RlciByZWNvcmQgZm9yIGEgY29tcHJlc3Npb24gaW5zdGFuY2UgKi8NCi0NCi1zdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3Qgew0KLSAganBlZ19jb21tb25fZmllbGRzOwkJLyogRmllbGRzIHNoYXJlZCB3aXRoIGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QgKi8NCi0NCi0gIC8qIERlc3RpbmF0aW9uIGZvciBjb21wcmVzc2VkIGRhdGEgKi8NCi0gIHN0cnVjdCBqcGVnX2Rlc3RpbmF0aW9uX21nciAqIGRlc3Q7DQotDQotICAvKiBEZXNjcmlwdGlvbiBvZiBzb3VyY2UgaW1hZ2UgLS0tIHRoZXNlIGZpZWxkcyBtdXN0IGJlIGZpbGxlZCBpbiBieQ0KLSAgICogb3V0ZXIgYXBwbGljYXRpb24gYmVmb3JlIHN0YXJ0aW5nIGNvbXByZXNzaW9uLiAgaW5fY29sb3Jfc3BhY2UgbXVzdA0KLSAgICogYmUgY29ycmVjdCBiZWZvcmUgeW91IGNhbiBldmVuIGNhbGwganBlZ19zZXRfZGVmYXVsdHMoKS4NCi0gICAqLw0KLQ0KLSAgSkRJTUVOU0lPTiBpbWFnZV93aWR0aDsJLyogaW5wdXQgaW1hZ2Ugd2lkdGggKi8NCi0gIEpESU1FTlNJT04gaW1hZ2VfaGVpZ2h0OwkvKiBpbnB1dCBpbWFnZSBoZWlnaHQgKi8NCi0gIGludCBpbnB1dF9jb21wb25lbnRzOwkJLyogIyBvZiBjb2xvciBjb21wb25lbnRzIGluIGlucHV0IGltYWdlICovDQotICBKX0NPTE9SX1NQQUNFIGluX2NvbG9yX3NwYWNlOwkvKiBjb2xvcnNwYWNlIG9mIGlucHV0IGltYWdlICovDQotDQotICBkb3VibGUgaW5wdXRfZ2FtbWE7CQkvKiBpbWFnZSBnYW1tYSBvZiBpbnB1dCBpbWFnZSAqLw0KLQ0KLSAgLyogQ29tcHJlc3Npb24gcGFyYW1ldGVycyAtLS0gdGhlc2UgZmllbGRzIG11c3QgYmUgc2V0IGJlZm9yZSBjYWxsaW5nDQotICAgKiBqcGVnX3N0YXJ0X2NvbXByZXNzKCkuICBXZSByZWNvbW1lbmQgY2FsbGluZyBqcGVnX3NldF9kZWZhdWx0cygpIHRvDQotICAgKiBpbml0aWFsaXplIGV2ZXJ5dGhpbmcgdG8gcmVhc29uYWJsZSBkZWZhdWx0cywgdGhlbiBjaGFuZ2luZyBhbnl0aGluZw0KLSAgICogdGhlIGFwcGxpY2F0aW9uIHNwZWNpZmljYWxseSB3YW50cyB0byBjaGFuZ2UuICBUaGF0IHdheSB5b3Ugd29uJ3QgZ2V0DQotICAgKiBidXJudCB3aGVuIG5ldyBwYXJhbWV0ZXJzIGFyZSBhZGRlZC4gIEFsc28gbm90ZSB0aGF0IHRoZXJlIGFyZSBzZXZlcmFsDQotICAgKiBoZWxwZXIgcm91dGluZXMgdG8gc2ltcGxpZnkgY2hhbmdpbmcgcGFyYW1ldGVycy4NCi0gICAqLw0KLQ0KLSAgaW50IGRhdGFfcHJlY2lzaW9uOwkJLyogYml0cyBvZiBwcmVjaXNpb24gaW4gaW1hZ2UgZGF0YSAqLw0KLQ0KLSAgaW50IG51bV9jb21wb25lbnRzOwkJLyogIyBvZiBjb2xvciBjb21wb25lbnRzIGluIEpQRUcgaW1hZ2UgKi8NCi0gIEpfQ09MT1JfU1BBQ0UganBlZ19jb2xvcl9zcGFjZTsgLyogY29sb3JzcGFjZSBvZiBKUEVHIGltYWdlICovDQotDQotICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcF9pbmZvOw0KLSAgLyogY29tcF9pbmZvW2ldIGRlc2NyaWJlcyBjb21wb25lbnQgdGhhdCBhcHBlYXJzIGkndGggaW4gU09GICovDQotICANCi0gIEpRVUFOVF9UQkwgKiBxdWFudF90YmxfcHRyc1tOVU1fUVVBTlRfVEJMU107DQotICAvKiBwdHJzIHRvIGNvZWZmaWNpZW50IHF1YW50aXphdGlvbiB0YWJsZXMsIG9yIE5VTEwgaWYgbm90IGRlZmluZWQgKi8NCi0gIA0KLSAgSkhVRkZfVEJMICogZGNfaHVmZl90YmxfcHRyc1tOVU1fSFVGRl9UQkxTXTsNCi0gIEpIVUZGX1RCTCAqIGFjX2h1ZmZfdGJsX3B0cnNbTlVNX0hVRkZfVEJMU107DQotICAvKiBwdHJzIHRvIEh1ZmZtYW4gY29kaW5nIHRhYmxlcywgb3IgTlVMTCBpZiBub3QgZGVmaW5lZCAqLw0KLSAgDQotICBVSU5UOCBhcml0aF9kY19MW05VTV9BUklUSF9UQkxTXTsgLyogTCB2YWx1ZXMgZm9yIERDIGFyaXRoLWNvZGluZyB0YWJsZXMgKi8NCi0gIFVJTlQ4IGFyaXRoX2RjX1VbTlVNX0FSSVRIX1RCTFNdOyAvKiBVIHZhbHVlcyBmb3IgREMgYXJpdGgtY29kaW5nIHRhYmxlcyAqLw0KLSAgVUlOVDggYXJpdGhfYWNfS1tOVU1fQVJJVEhfVEJMU107IC8qIEt4IHZhbHVlcyBmb3IgQUMgYXJpdGgtY29kaW5nIHRhYmxlcyAqLw0KLQ0KLSAgaW50IG51bV9zY2FuczsJCS8qICMgb2YgZW50cmllcyBpbiBzY2FuX2luZm8gYXJyYXkgKi8NCi0gIGNvbnN0IGpwZWdfc2Nhbl9pbmZvICogc2Nhbl9pbmZvOyAvKiBzY3JpcHQgZm9yIG11bHRpLXNjYW4gZmlsZSwgb3IgTlVMTCAqLw0KLSAgLyogVGhlIGRlZmF1bHQgdmFsdWUgb2Ygc2Nhbl9pbmZvIGlzIE5VTEwsIHdoaWNoIGNhdXNlcyBhIHNpbmdsZS1zY2FuDQotICAgKiBzZXF1ZW50aWFsIEpQRUcgZmlsZSB0byBiZSBlbWl0dGVkLiAgVG8gY3JlYXRlIGEgbXVsdGktc2NhbiBmaWxlLA0KLSAgICogc2V0IG51bV9zY2FucyBhbmQgc2Nhbl9pbmZvIHRvIHBvaW50IHRvIGFuIGFycmF5IG9mIHNjYW4gZGVmaW5pdGlvbnMuDQotICAgKi8NCi0NCi0gIGJvb2xlYW4gcmF3X2RhdGFfaW47CQkvKiBUUlVFPWNhbGxlciBzdXBwbGllcyBkb3duc2FtcGxlZCBkYXRhICovDQotICBib29sZWFuIGFyaXRoX2NvZGU7CQkvKiBUUlVFPWFyaXRobWV0aWMgY29kaW5nLCBGQUxTRT1IdWZmbWFuICovDQotICBib29sZWFuIG9wdGltaXplX2NvZGluZzsJLyogVFJVRT1vcHRpbWl6ZSBlbnRyb3B5IGVuY29kaW5nIHBhcm1zICovDQotICBib29sZWFuIENDSVI2MDFfc2FtcGxpbmc7CS8qIFRSVUU9Zmlyc3Qgc2FtcGxlcyBhcmUgY29zaXRlZCAqLw0KLSAgaW50IHNtb290aGluZ19mYWN0b3I7CQkvKiAxLi4xMDAsIG9yIDAgZm9yIG5vIGlucHV0IHNtb290aGluZyAqLw0KLSAgSl9EQ1RfTUVUSE9EIGRjdF9tZXRob2Q7CS8qIERDVCBhbGdvcml0aG0gc2VsZWN0b3IgKi8NCi0NCi0gIC8qIFRoZSByZXN0YXJ0IGludGVydmFsIGNhbiBiZSBzcGVjaWZpZWQgaW4gYWJzb2x1dGUgTUNVcyBieSBzZXR0aW5nDQotICAgKiByZXN0YXJ0X2ludGVydmFsLCBvciBpbiBNQ1Ugcm93cyBieSBzZXR0aW5nIHJlc3RhcnRfaW5fcm93cw0KLSAgICogKGluIHdoaWNoIGNhc2UgdGhlIGNvcnJlY3QgcmVzdGFydF9pbnRlcnZhbCB3aWxsIGJlIGZpZ3VyZWQNCi0gICAqIGZvciBlYWNoIHNjYW4pLg0KLSAgICovDQotICB1bnNpZ25lZCBpbnQgcmVzdGFydF9pbnRlcnZhbDsgLyogTUNVcyBwZXIgcmVzdGFydCwgb3IgMCBmb3Igbm8gcmVzdGFydCAqLw0KLSAgaW50IHJlc3RhcnRfaW5fcm93czsJCS8qIGlmID4gMCwgTUNVIHJvd3MgcGVyIHJlc3RhcnQgaW50ZXJ2YWwgKi8NCi0NCi0gIC8qIFBhcmFtZXRlcnMgY29udHJvbGxpbmcgZW1pc3Npb24gb2Ygc3BlY2lhbCBtYXJrZXJzLiAqLw0KLQ0KLSAgYm9vbGVhbiB3cml0ZV9KRklGX2hlYWRlcjsJLyogc2hvdWxkIGEgSkZJRiBtYXJrZXIgYmUgd3JpdHRlbj8gKi8NCi0gIFVJTlQ4IEpGSUZfbWFqb3JfdmVyc2lvbjsJLyogV2hhdCB0byB3cml0ZSBmb3IgdGhlIEpGSUYgdmVyc2lvbiBudW1iZXIgKi8NCi0gIFVJTlQ4IEpGSUZfbWlub3JfdmVyc2lvbjsNCi0gIC8qIFRoZXNlIHRocmVlIHZhbHVlcyBhcmUgbm90IHVzZWQgYnkgdGhlIEpQRUcgY29kZSwgbWVyZWx5IGNvcGllZCAqLw0KLSAgLyogaW50byB0aGUgSkZJRiBBUFAwIG1hcmtlci4gIGRlbnNpdHlfdW5pdCBjYW4gYmUgMCBmb3IgdW5rbm93biwgKi8NCi0gIC8qIDEgZm9yIGRvdHMvaW5jaCwgb3IgMiBmb3IgZG90cy9jbS4gIE5vdGUgdGhhdCB0aGUgcGl4ZWwgYXNwZWN0ICovDQotICAvKiByYXRpbyBpcyBkZWZpbmVkIGJ5IFhfZGVuc2l0eS9ZX2RlbnNpdHkgZXZlbiB3aGVuIGRlbnNpdHlfdW5pdD0wLiAqLw0KLSAgVUlOVDggZGVuc2l0eV91bml0OwkJLyogSkZJRiBjb2RlIGZvciBwaXhlbCBzaXplIHVuaXRzICovDQotICBVSU5UMTYgWF9kZW5zaXR5OwkJLyogSG9yaXpvbnRhbCBwaXhlbCBkZW5zaXR5ICovDQotICBVSU5UMTYgWV9kZW5zaXR5OwkJLyogVmVydGljYWwgcGl4ZWwgZGVuc2l0eSAqLw0KLSAgYm9vbGVhbiB3cml0ZV9BZG9iZV9tYXJrZXI7CS8qIHNob3VsZCBhbiBBZG9iZSBtYXJrZXIgYmUgd3JpdHRlbj8gKi8NCi0gIA0KLSAgLyogU3RhdGUgdmFyaWFibGU6IGluZGV4IG9mIG5leHQgc2NhbmxpbmUgdG8gYmUgd3JpdHRlbiB0bw0KLSAgICoganBlZ193cml0ZV9zY2FubGluZXMoKS4gIEFwcGxpY2F0aW9uIG1heSB1c2UgdGhpcyB0byBjb250cm9sIGl0cw0KLSAgICogcHJvY2Vzc2luZyBsb29wLCBlLmcuLCAid2hpbGUgKG5leHRfc2NhbmxpbmUgPCBpbWFnZV9oZWlnaHQpIi4NCi0gICAqLw0KLQ0KLSAgSkRJTUVOU0lPTiBuZXh0X3NjYW5saW5lOwkvKiAwIC4uIGltYWdlX2hlaWdodC0xICAqLw0KLQ0KLSAgLyogUmVtYWluaW5nIGZpZWxkcyBhcmUga25vd24gdGhyb3VnaG91dCBjb21wcmVzc29yLCBidXQgZ2VuZXJhbGx5DQotICAgKiBzaG91bGQgbm90IGJlIHRvdWNoZWQgYnkgYSBzdXJyb3VuZGluZyBhcHBsaWNhdGlvbi4NCi0gICAqLw0KLQ0KLSAgLyoNCi0gICAqIFRoZXNlIGZpZWxkcyBhcmUgY29tcHV0ZWQgZHVyaW5nIGNvbXByZXNzaW9uIHN0YXJ0dXANCi0gICAqLw0KLSAgYm9vbGVhbiBwcm9ncmVzc2l2ZV9tb2RlOwkvKiBUUlVFIGlmIHNjYW4gc2NyaXB0IHVzZXMgcHJvZ3Jlc3NpdmUgbW9kZSAqLw0KLSAgaW50IG1heF9oX3NhbXBfZmFjdG9yOwkvKiBsYXJnZXN0IGhfc2FtcF9mYWN0b3IgKi8NCi0gIGludCBtYXhfdl9zYW1wX2ZhY3RvcjsJLyogbGFyZ2VzdCB2X3NhbXBfZmFjdG9yICovDQotDQotICBKRElNRU5TSU9OIHRvdGFsX2lNQ1Vfcm93czsJLyogIyBvZiBpTUNVIHJvd3MgdG8gYmUgaW5wdXQgdG8gY29lZiBjdGxyICovDQotICAvKiBUaGUgY29lZmZpY2llbnQgY29udHJvbGxlciByZWNlaXZlcyBkYXRhIGluIHVuaXRzIG9mIE1DVSByb3dzIGFzIGRlZmluZWQNCi0gICAqIGZvciBmdWxseSBpbnRlcmxlYXZlZCBzY2FucyAod2hldGhlciB0aGUgSlBFRyBmaWxlIGlzIGludGVybGVhdmVkIG9yIG5vdCkuDQotICAgKiBUaGVyZSBhcmUgdl9zYW1wX2ZhY3RvciAqIERDVFNJWkUgc2FtcGxlIHJvd3Mgb2YgZWFjaCBjb21wb25lbnQgaW4gYW4NCi0gICAqICJpTUNVIiAoaW50ZXJsZWF2ZWQgTUNVKSByb3cuDQotICAgKi8NCi0gIA0KLSAgLyoNCi0gICAqIFRoZXNlIGZpZWxkcyBhcmUgdmFsaWQgZHVyaW5nIGFueSBvbmUgc2Nhbi4NCi0gICAqIFRoZXkgZGVzY3JpYmUgdGhlIGNvbXBvbmVudHMgYW5kIE1DVXMgYWN0dWFsbHkgYXBwZWFyaW5nIGluIHRoZSBzY2FuLg0KLSAgICovDQotICBpbnQgY29tcHNfaW5fc2NhbjsJCS8qICMgb2YgSlBFRyBjb21wb25lbnRzIGluIHRoaXMgc2NhbiAqLw0KLSAganBlZ19jb21wb25lbnRfaW5mbyAqIGN1cl9jb21wX2luZm9bTUFYX0NPTVBTX0lOX1NDQU5dOw0KLSAgLyogKmN1cl9jb21wX2luZm9baV0gZGVzY3JpYmVzIGNvbXBvbmVudCB0aGF0IGFwcGVhcnMgaSd0aCBpbiBTT1MgKi8NCi0gIA0KLSAgSkRJTUVOU0lPTiBNQ1VzX3Blcl9yb3c7CS8qICMgb2YgTUNVcyBhY3Jvc3MgdGhlIGltYWdlICovDQotICBKRElNRU5TSU9OIE1DVV9yb3dzX2luX3NjYW47CS8qICMgb2YgTUNVIHJvd3MgaW4gdGhlIGltYWdlICovDQotICANCi0gIGludCBibG9ja3NfaW5fTUNVOwkJLyogIyBvZiBEQ1QgYmxvY2tzIHBlciBNQ1UgKi8NCi0gIGludCBNQ1VfbWVtYmVyc2hpcFtDX01BWF9CTE9DS1NfSU5fTUNVXTsNCi0gIC8qIE1DVV9tZW1iZXJzaGlwW2ldIGlzIGluZGV4IGluIGN1cl9jb21wX2luZm8gb2YgY29tcG9uZW50IG93bmluZyAqLw0KLSAgLyogaSd0aCBibG9jayBpbiBhbiBNQ1UgKi8NCi0NCi0gIGludCBTcywgU2UsIEFoLCBBbDsJCS8qIHByb2dyZXNzaXZlIEpQRUcgcGFyYW1ldGVycyBmb3Igc2NhbiAqLw0KLQ0KLSAgLyoNCi0gICAqIExpbmtzIHRvIGNvbXByZXNzaW9uIHN1Ym9iamVjdHMgKG1ldGhvZHMgYW5kIHByaXZhdGUgdmFyaWFibGVzIG9mIG1vZHVsZXMpDQotICAgKi8NCi0gIHN0cnVjdCBqcGVnX2NvbXBfbWFzdGVyICogbWFzdGVyOw0KLSAgc3RydWN0IGpwZWdfY19tYWluX2NvbnRyb2xsZXIgKiBtYWluOw0KLSAgc3RydWN0IGpwZWdfY19wcmVwX2NvbnRyb2xsZXIgKiBwcmVwOw0KLSAgc3RydWN0IGpwZWdfY19jb2VmX2NvbnRyb2xsZXIgKiBjb2VmOw0KLSAgc3RydWN0IGpwZWdfbWFya2VyX3dyaXRlciAqIG1hcmtlcjsNCi0gIHN0cnVjdCBqcGVnX2NvbG9yX2NvbnZlcnRlciAqIGNjb252ZXJ0Ow0KLSAgc3RydWN0IGpwZWdfZG93bnNhbXBsZXIgKiBkb3duc2FtcGxlOw0KLSAgc3RydWN0IGpwZWdfZm9yd2FyZF9kY3QgKiBmZGN0Ow0KLSAgc3RydWN0IGpwZWdfZW50cm9weV9lbmNvZGVyICogZW50cm9weTsNCi0gIGpwZWdfc2Nhbl9pbmZvICogc2NyaXB0X3NwYWNlOyAvKiB3b3Jrc3BhY2UgZm9yIGpwZWdfc2ltcGxlX3Byb2dyZXNzaW9uICovDQotICBpbnQgc2NyaXB0X3NwYWNlX3NpemU7DQotfTsNCi0NCi0NCi0vKiBNYXN0ZXIgcmVjb3JkIGZvciBhIGRlY29tcHJlc3Npb24gaW5zdGFuY2UgKi8NCi0NCi1zdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCB7DQotICBqcGVnX2NvbW1vbl9maWVsZHM7CQkvKiBGaWVsZHMgc2hhcmVkIHdpdGgganBlZ19jb21wcmVzc19zdHJ1Y3QgKi8NCi0NCi0gIC8qIFNvdXJjZSBvZiBjb21wcmVzc2VkIGRhdGEgKi8NCi0gIHN0cnVjdCBqcGVnX3NvdXJjZV9tZ3IgKiBzcmM7DQotDQotICAvKiBCYXNpYyBkZXNjcmlwdGlvbiBvZiBpbWFnZSAtLS0gZmlsbGVkIGluIGJ5IGpwZWdfcmVhZF9oZWFkZXIoKS4gKi8NCi0gIC8qIEFwcGxpY2F0aW9uIG1heSBpbnNwZWN0IHRoZXNlIHZhbHVlcyB0byBkZWNpZGUgaG93IHRvIHByb2Nlc3MgaW1hZ2UuICovDQotDQotICBKRElNRU5TSU9OIGltYWdlX3dpZHRoOwkvKiBub21pbmFsIGltYWdlIHdpZHRoIChmcm9tIFNPRiBtYXJrZXIpICovDQotICBKRElNRU5TSU9OIGltYWdlX2hlaWdodDsJLyogbm9taW5hbCBpbWFnZSBoZWlnaHQgKi8NCi0gIGludCBudW1fY29tcG9uZW50czsJCS8qICMgb2YgY29sb3IgY29tcG9uZW50cyBpbiBKUEVHIGltYWdlICovDQotICBKX0NPTE9SX1NQQUNFIGpwZWdfY29sb3Jfc3BhY2U7IC8qIGNvbG9yc3BhY2Ugb2YgSlBFRyBpbWFnZSAqLw0KLQ0KLSAgLyogRGVjb21wcmVzc2lvbiBwcm9jZXNzaW5nIHBhcmFtZXRlcnMgLS0tIHRoZXNlIGZpZWxkcyBtdXN0IGJlIHNldCBiZWZvcmUNCi0gICAqIGNhbGxpbmcganBlZ19zdGFydF9kZWNvbXByZXNzKCkuICBOb3RlIHRoYXQganBlZ19yZWFkX2hlYWRlcigpIGluaXRpYWxpemVzDQotICAgKiB0aGVtIHRvIGRlZmF1bHQgdmFsdWVzLg0KLSAgICovDQotDQotICBKX0NPTE9SX1NQQUNFIG91dF9jb2xvcl9zcGFjZTsgLyogY29sb3JzcGFjZSBmb3Igb3V0cHV0ICovDQotDQotICB1bnNpZ25lZCBpbnQgc2NhbGVfbnVtLCBzY2FsZV9kZW5vbTsgLyogZnJhY3Rpb24gYnkgd2hpY2ggdG8gc2NhbGUgaW1hZ2UgKi8NCi0NCi0gIGRvdWJsZSBvdXRwdXRfZ2FtbWE7CQkvKiBpbWFnZSBnYW1tYSB3YW50ZWQgaW4gb3V0cHV0ICovDQotDQotICBib29sZWFuIGJ1ZmZlcmVkX2ltYWdlOwkvKiBUUlVFPW11bHRpcGxlIG91dHB1dCBwYXNzZXMgKi8NCi0gIGJvb2xlYW4gcmF3X2RhdGFfb3V0OwkJLyogVFJVRT1kb3duc2FtcGxlZCBkYXRhIHdhbnRlZCAqLw0KLQ0KLSAgSl9EQ1RfTUVUSE9EIGRjdF9tZXRob2Q7CS8qIElEQ1QgYWxnb3JpdGhtIHNlbGVjdG9yICovDQotICBib29sZWFuIGRvX2ZhbmN5X3Vwc2FtcGxpbmc7CS8qIFRSVUU9YXBwbHkgZmFuY3kgdXBzYW1wbGluZyAqLw0KLSAgYm9vbGVhbiBkb19ibG9ja19zbW9vdGhpbmc7CS8qIFRSVUU9YXBwbHkgaW50ZXJibG9jayBzbW9vdGhpbmcgKi8NCi0NCi0gIGJvb2xlYW4gcXVhbnRpemVfY29sb3JzOwkvKiBUUlVFPWNvbG9ybWFwcGVkIG91dHB1dCB3YW50ZWQgKi8NCi0gIC8qIHRoZSBmb2xsb3dpbmcgYXJlIGlnbm9yZWQgaWYgbm90IHF1YW50aXplX2NvbG9yczogKi8NCi0gIEpfRElUSEVSX01PREUgZGl0aGVyX21vZGU7CS8qIHR5cGUgb2YgY29sb3IgZGl0aGVyaW5nIHRvIHVzZSAqLw0KLSAgYm9vbGVhbiB0d29fcGFzc19xdWFudGl6ZTsJLyogVFJVRT11c2UgdHdvLXBhc3MgY29sb3IgcXVhbnRpemF0aW9uICovDQotICBpbnQgZGVzaXJlZF9udW1iZXJfb2ZfY29sb3JzOwkvKiBtYXggIyBjb2xvcnMgdG8gdXNlIGluIGNyZWF0ZWQgY29sb3JtYXAgKi8NCi0gIC8qIHRoZXNlIGFyZSBzaWduaWZpY2FudCBvbmx5IGluIGJ1ZmZlcmVkLWltYWdlIG1vZGU6ICovDQotICBib29sZWFuIGVuYWJsZV8xcGFzc19xdWFudDsJLyogZW5hYmxlIGZ1dHVyZSB1c2Ugb2YgMS1wYXNzIHF1YW50aXplciAqLw0KLSAgYm9vbGVhbiBlbmFibGVfZXh0ZXJuYWxfcXVhbnQ7LyogZW5hYmxlIGZ1dHVyZSB1c2Ugb2YgZXh0ZXJuYWwgY29sb3JtYXAgKi8NCi0gIGJvb2xlYW4gZW5hYmxlXzJwYXNzX3F1YW50OwkvKiBlbmFibGUgZnV0dXJlIHVzZSBvZiAyLXBhc3MgcXVhbnRpemVyICovDQotDQotICAvKiBEZXNjcmlwdGlvbiBvZiBhY3R1YWwgb3V0cHV0IGltYWdlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB0byBhcHBsaWNhdGlvbi4NCi0gICAqIFRoZXNlIGZpZWxkcyBhcmUgY29tcHV0ZWQgYnkganBlZ19zdGFydF9kZWNvbXByZXNzKCkuDQotICAgKiBZb3UgY2FuIGFsc28gdXNlIGpwZWdfY2FsY19vdXRwdXRfZGltZW5zaW9ucygpIHRvIGRldGVybWluZSB0aGVzZSB2YWx1ZXMNCi0gICAqIGluIGFkdmFuY2Ugb2YgY2FsbGluZyBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKS4NCi0gICAqLw0KLQ0KLSAgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGg7CS8qIHNjYWxlZCBpbWFnZSB3aWR0aCAqLw0KLSAgSkRJTUVOU0lPTiBvdXRwdXRfaGVpZ2h0OwkvKiBzY2FsZWQgaW1hZ2UgaGVpZ2h0ICovDQotICBpbnQgb3V0X2NvbG9yX2NvbXBvbmVudHM7CS8qICMgb2YgY29sb3IgY29tcG9uZW50cyBpbiBvdXRfY29sb3Jfc3BhY2UgKi8NCi0gIGludCBvdXRwdXRfY29tcG9uZW50czsJLyogIyBvZiBjb2xvciBjb21wb25lbnRzIHJldHVybmVkICovDQotICAvKiBvdXRwdXRfY29tcG9uZW50cyBpcyAxIChhIGNvbG9ybWFwIGluZGV4KSB3aGVuIHF1YW50aXppbmcgY29sb3JzOw0KLSAgICogb3RoZXJ3aXNlIGl0IGVxdWFscyBvdXRfY29sb3JfY29tcG9uZW50cy4NCi0gICAqLw0KLSAgaW50IHJlY19vdXRidWZfaGVpZ2h0OwkvKiBtaW4gcmVjb21tZW5kZWQgaGVpZ2h0IG9mIHNjYW5saW5lIGJ1ZmZlciAqLw0KLSAgLyogSWYgdGhlIGJ1ZmZlciBwYXNzZWQgdG8ganBlZ19yZWFkX3NjYW5saW5lcygpIGlzIGxlc3MgdGhhbiB0aGlzIG1hbnkgcm93cw0KLSAgICogaGlnaCwgc3BhY2UgYW5kIHRpbWUgd2lsbCBiZSB3YXN0ZWQgZHVlIHRvIHVubmVjZXNzYXJ5IGRhdGEgY29weWluZy4NCi0gICAqIFVzdWFsbHkgcmVjX291dGJ1Zl9oZWlnaHQgd2lsbCBiZSAxIG9yIDIsIGF0IG1vc3QgNC4NCi0gICAqLw0KLQ0KLSAgLyogV2hlbiBxdWFudGl6aW5nIGNvbG9ycywgdGhlIG91dHB1dCBjb2xvcm1hcCBpcyBkZXNjcmliZWQgYnkgdGhlc2UgZmllbGRzLg0KLSAgICogVGhlIGFwcGxpY2F0aW9uIGNhbiBzdXBwbHkgYSBjb2xvcm1hcCBieSBzZXR0aW5nIGNvbG9ybWFwIG5vbi1OVUxMIGJlZm9yZQ0KLSAgICogY2FsbGluZyBqcGVnX3N0YXJ0X2RlY29tcHJlc3M7IG90aGVyd2lzZSBhIGNvbG9ybWFwIGlzIGNyZWF0ZWQgZHVyaW5nDQotICAgKiBqcGVnX3N0YXJ0X2RlY29tcHJlc3Mgb3IganBlZ19zdGFydF9vdXRwdXQuDQotICAgKiBUaGUgbWFwIGhhcyBvdXRfY29sb3JfY29tcG9uZW50cyByb3dzIGFuZCBhY3R1YWxfbnVtYmVyX29mX2NvbG9ycyBjb2x1bW5zLg0KLSAgICovDQotICBpbnQgYWN0dWFsX251bWJlcl9vZl9jb2xvcnM7CS8qIG51bWJlciBvZiBlbnRyaWVzIGluIHVzZSAqLw0KLSAgSlNBTVBBUlJBWSBjb2xvcm1hcDsJCS8qIFRoZSBjb2xvciBtYXAgYXMgYSAyLUQgcGl4ZWwgYXJyYXkgKi8NCi0NCi0gIC8qIFN0YXRlIHZhcmlhYmxlczogdGhlc2UgdmFyaWFibGVzIGluZGljYXRlIHRoZSBwcm9ncmVzcyBvZiBkZWNvbXByZXNzaW9uLg0KLSAgICogVGhlIGFwcGxpY2F0aW9uIG1heSBleGFtaW5lIHRoZXNlIGJ1dCBtdXN0IG5vdCBtb2RpZnkgdGhlbS4NCi0gICAqLw0KLQ0KLSAgLyogUm93IGluZGV4IG9mIG5leHQgc2NhbmxpbmUgdG8gYmUgcmVhZCBmcm9tIGpwZWdfcmVhZF9zY2FubGluZXMoKS4NCi0gICAqIEFwcGxpY2F0aW9uIG1heSB1c2UgdGhpcyB0byBjb250cm9sIGl0cyBwcm9jZXNzaW5nIGxvb3AsIGUuZy4sDQotICAgKiAid2hpbGUgKG91dHB1dF9zY2FubGluZSA8IG91dHB1dF9oZWlnaHQpIi4NCi0gICAqLw0KLSAgSkRJTUVOU0lPTiBvdXRwdXRfc2NhbmxpbmU7CS8qIDAgLi4gb3V0cHV0X2hlaWdodC0xICAqLw0KLQ0KLSAgLyogQ3VycmVudCBpbnB1dCBzY2FuIG51bWJlciBhbmQgbnVtYmVyIG9mIGlNQ1Ugcm93cyBjb21wbGV0ZWQgaW4gc2Nhbi4NCi0gICAqIFRoZXNlIGluZGljYXRlIHRoZSBwcm9ncmVzcyBvZiB0aGUgZGVjb21wcmVzc29yIGlucHV0IHNpZGUuDQotICAgKi8NCi0gIGludCBpbnB1dF9zY2FuX251bWJlcjsJLyogTnVtYmVyIG9mIFNPUyBtYXJrZXJzIHNlZW4gc28gZmFyICovDQotICBKRElNRU5TSU9OIGlucHV0X2lNQ1Vfcm93OwkvKiBOdW1iZXIgb2YgaU1DVSByb3dzIGNvbXBsZXRlZCAqLw0KLQ0KLSAgLyogVGhlICJvdXRwdXQgc2NhbiBudW1iZXIiIGlzIHRoZSBub3Rpb25hbCBzY2FuIGJlaW5nIGRpc3BsYXllZCBieSB0aGUNCi0gICAqIG91dHB1dCBzaWRlLiAgVGhlIGRlY29tcHJlc3NvciB3aWxsIG5vdCBhbGxvdyBvdXRwdXQgc2Nhbi9yb3cgbnVtYmVyDQotICAgKiB0byBnZXQgYWhlYWQgb2YgaW5wdXQgc2Nhbi9yb3csIGJ1dCBpdCBjYW4gZmFsbCBhcmJpdHJhcmlseSBmYXIgYmVoaW5kLg0KLSAgICovDQotICBpbnQgb3V0cHV0X3NjYW5fbnVtYmVyOwkvKiBOb21pbmFsIHNjYW4gbnVtYmVyIGJlaW5nIGRpc3BsYXllZCAqLw0KLSAgSkRJTUVOU0lPTiBvdXRwdXRfaU1DVV9yb3c7CS8qIE51bWJlciBvZiBpTUNVIHJvd3MgcmVhZCAqLw0KLQ0KLSAgLyogQ3VycmVudCBwcm9ncmVzc2lvbiBzdGF0dXMuICBjb2VmX2JpdHNbY11baV0gaW5kaWNhdGVzIHRoZSBwcmVjaXNpb24NCi0gICAqIHdpdGggd2hpY2ggY29tcG9uZW50IGMncyBEQ1QgY29lZmZpY2llbnQgaSAoaW4gemlnemFnIG9yZGVyKSBpcyBrbm93bi4NCi0gICAqIEl0IGlzIC0xIHdoZW4gbm8gZGF0YSBoYXMgeWV0IGJlZW4gcmVjZWl2ZWQsIG90aGVyd2lzZSBpdCBpcyB0aGUgcG9pbnQNCi0gICAqIHRyYW5zZm9ybSAoc2hpZnQpIHZhbHVlIGZvciB0aGUgbW9zdCByZWNlbnQgc2NhbiBvZiB0aGUgY29lZmZpY2llbnQNCi0gICAqICh0aHVzLCAwIGF0IGNvbXBsZXRpb24gb2YgdGhlIHByb2dyZXNzaW9uKS4NCi0gICAqIFRoaXMgcG9pbnRlciBpcyBOVUxMIHdoZW4gcmVhZGluZyBhIG5vbi1wcm9ncmVzc2l2ZSBmaWxlLg0KLSAgICovDQotICBpbnQgKCpjb2VmX2JpdHMpW0RDVFNJWkUyXTsJLyogLTEgb3IgY3VycmVudCBBbCB2YWx1ZSBmb3IgZWFjaCBjb2VmICovDQotDQotICAvKiBJbnRlcm5hbCBKUEVHIHBhcmFtZXRlcnMgLS0tIHRoZSBhcHBsaWNhdGlvbiB1c3VhbGx5IG5lZWQgbm90IGxvb2sgYXQNCi0gICAqIHRoZXNlIGZpZWxkcy4gIE5vdGUgdGhhdCB0aGUgZGVjb21wcmVzc29yIG91dHB1dCBzaWRlIG1heSBub3QgdXNlDQotICAgKiBhbnkgcGFyYW1ldGVycyB0aGF0IGNhbiBjaGFuZ2UgYmV0d2VlbiBzY2Fucy4NCi0gICAqLw0KLQ0KLSAgLyogUXVhbnRpemF0aW9uIGFuZCBIdWZmbWFuIHRhYmxlcyBhcmUgY2FycmllZCBmb3J3YXJkIGFjcm9zcyBpbnB1dA0KLSAgICogZGF0YXN0cmVhbXMgd2hlbiBwcm9jZXNzaW5nIGFiYnJldmlhdGVkIEpQRUcgZGF0YXN0cmVhbXMuDQotICAgKi8NCi0NCi0gIEpRVUFOVF9UQkwgKiBxdWFudF90YmxfcHRyc1tOVU1fUVVBTlRfVEJMU107DQotICAvKiBwdHJzIHRvIGNvZWZmaWNpZW50IHF1YW50aXphdGlvbiB0YWJsZXMsIG9yIE5VTEwgaWYgbm90IGRlZmluZWQgKi8NCi0NCi0gIEpIVUZGX1RCTCAqIGRjX2h1ZmZfdGJsX3B0cnNbTlVNX0hVRkZfVEJMU107DQotICBKSFVGRl9UQkwgKiBhY19odWZmX3RibF9wdHJzW05VTV9IVUZGX1RCTFNdOw0KLSAgLyogcHRycyB0byBIdWZmbWFuIGNvZGluZyB0YWJsZXMsIG9yIE5VTEwgaWYgbm90IGRlZmluZWQgKi8NCi0NCi0gIC8qIFRoZXNlIHBhcmFtZXRlcnMgYXJlIG5ldmVyIGNhcnJpZWQgYWNyb3NzIGRhdGFzdHJlYW1zLCBzaW5jZSB0aGV5DQotICAgKiBhcmUgZ2l2ZW4gaW4gU09GL1NPUyBtYXJrZXJzIG9yIGRlZmluZWQgdG8gYmUgcmVzZXQgYnkgU09JLg0KLSAgICovDQotDQotICBpbnQgZGF0YV9wcmVjaXNpb247CQkvKiBiaXRzIG9mIHByZWNpc2lvbiBpbiBpbWFnZSBkYXRhICovDQotDQotICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcF9pbmZvOw0KLSAgLyogY29tcF9pbmZvW2ldIGRlc2NyaWJlcyBjb21wb25lbnQgdGhhdCBhcHBlYXJzIGkndGggaW4gU09GICovDQotDQotICBib29sZWFuIHByb2dyZXNzaXZlX21vZGU7CS8qIFRSVUUgaWYgU09GbiBzcGVjaWZpZXMgcHJvZ3Jlc3NpdmUgbW9kZSAqLw0KLSAgYm9vbGVhbiBhcml0aF9jb2RlOwkJLyogVFJVRT1hcml0aG1ldGljIGNvZGluZywgRkFMU0U9SHVmZm1hbiAqLw0KLQ0KLSAgVUlOVDggYXJpdGhfZGNfTFtOVU1fQVJJVEhfVEJMU107IC8qIEwgdmFsdWVzIGZvciBEQyBhcml0aC1jb2RpbmcgdGFibGVzICovDQotICBVSU5UOCBhcml0aF9kY19VW05VTV9BUklUSF9UQkxTXTsgLyogVSB2YWx1ZXMgZm9yIERDIGFyaXRoLWNvZGluZyB0YWJsZXMgKi8NCi0gIFVJTlQ4IGFyaXRoX2FjX0tbTlVNX0FSSVRIX1RCTFNdOyAvKiBLeCB2YWx1ZXMgZm9yIEFDIGFyaXRoLWNvZGluZyB0YWJsZXMgKi8NCi0NCi0gIHVuc2lnbmVkIGludCByZXN0YXJ0X2ludGVydmFsOyAvKiBNQ1VzIHBlciByZXN0YXJ0IGludGVydmFsLCBvciAwIGZvciBubyByZXN0YXJ0ICovDQotDQotICAvKiBUaGVzZSBmaWVsZHMgcmVjb3JkIGRhdGEgb2J0YWluZWQgZnJvbSBvcHRpb25hbCBtYXJrZXJzIHJlY29nbml6ZWQgYnkNCi0gICAqIHRoZSBKUEVHIGxpYnJhcnkuDQotICAgKi8NCi0gIGJvb2xlYW4gc2F3X0pGSUZfbWFya2VyOwkvKiBUUlVFIGlmZiBhIEpGSUYgQVBQMCBtYXJrZXIgd2FzIGZvdW5kICovDQotICAvKiBEYXRhIGNvcGllZCBmcm9tIEpGSUYgbWFya2VyOyBvbmx5IHZhbGlkIGlmIHNhd19KRklGX21hcmtlciBpcyBUUlVFOiAqLw0KLSAgVUlOVDggSkZJRl9tYWpvcl92ZXJzaW9uOwkvKiBKRklGIHZlcnNpb24gbnVtYmVyICovDQotICBVSU5UOCBKRklGX21pbm9yX3ZlcnNpb247DQotICBVSU5UOCBkZW5zaXR5X3VuaXQ7CQkvKiBKRklGIGNvZGUgZm9yIHBpeGVsIHNpemUgdW5pdHMgKi8NCi0gIFVJTlQxNiBYX2RlbnNpdHk7CQkvKiBIb3Jpem9udGFsIHBpeGVsIGRlbnNpdHkgKi8NCi0gIFVJTlQxNiBZX2RlbnNpdHk7CQkvKiBWZXJ0aWNhbCBwaXhlbCBkZW5zaXR5ICovDQotICBib29sZWFuIHNhd19BZG9iZV9tYXJrZXI7CS8qIFRSVUUgaWZmIGFuIEFkb2JlIEFQUDE0IG1hcmtlciB3YXMgZm91bmQgKi8NCi0gIFVJTlQ4IEFkb2JlX3RyYW5zZm9ybTsJLyogQ29sb3IgdHJhbnNmb3JtIGNvZGUgZnJvbSBBZG9iZSBtYXJrZXIgKi8NCi0NCi0gIGJvb2xlYW4gQ0NJUjYwMV9zYW1wbGluZzsJLyogVFJVRT1maXJzdCBzYW1wbGVzIGFyZSBjb3NpdGVkICovDQotDQotICAvKiBBc2lkZSBmcm9tIHRoZSBzcGVjaWZpYyBkYXRhIHJldGFpbmVkIGZyb20gQVBQbiBtYXJrZXJzIGtub3duIHRvIHRoZQ0KLSAgICogbGlicmFyeSwgdGhlIHVuaW50ZXJwcmV0ZWQgY29udGVudHMgb2YgYW55IG9yIGFsbCBBUFBuIGFuZCBDT00gbWFya2Vycw0KLSAgICogY2FuIGJlIHNhdmVkIGluIGEgbGlzdCBmb3IgZXhhbWluYXRpb24gYnkgdGhlIGFwcGxpY2F0aW9uLg0KLSAgICovDQotICBqcGVnX3NhdmVkX21hcmtlcl9wdHIgbWFya2VyX2xpc3Q7IC8qIEhlYWQgb2YgbGlzdCBvZiBzYXZlZCBtYXJrZXJzICovDQotDQotICAvKiBSZW1haW5pbmcgZmllbGRzIGFyZSBrbm93biB0aHJvdWdob3V0IGRlY29tcHJlc3NvciwgYnV0IGdlbmVyYWxseQ0KLSAgICogc2hvdWxkIG5vdCBiZSB0b3VjaGVkIGJ5IGEgc3Vycm91bmRpbmcgYXBwbGljYXRpb24uDQotICAgKi8NCi0NCi0gIC8qDQotICAgKiBUaGVzZSBmaWVsZHMgYXJlIGNvbXB1dGVkIGR1cmluZyBkZWNvbXByZXNzaW9uIHN0YXJ0dXANCi0gICAqLw0KLSAgaW50IG1heF9oX3NhbXBfZmFjdG9yOwkvKiBsYXJnZXN0IGhfc2FtcF9mYWN0b3IgKi8NCi0gIGludCBtYXhfdl9zYW1wX2ZhY3RvcjsJLyogbGFyZ2VzdCB2X3NhbXBfZmFjdG9yICovDQotDQotICBpbnQgbWluX0RDVF9zY2FsZWRfc2l6ZTsJLyogc21hbGxlc3QgRENUX3NjYWxlZF9zaXplIG9mIGFueSBjb21wb25lbnQgKi8NCi0NCi0gIEpESU1FTlNJT04gdG90YWxfaU1DVV9yb3dzOwkvKiAjIG9mIGlNQ1Ugcm93cyBpbiBpbWFnZSAqLw0KLSAgLyogVGhlIGNvZWZmaWNpZW50IGNvbnRyb2xsZXIncyBpbnB1dCBhbmQgb3V0cHV0IHByb2dyZXNzIGlzIG1lYXN1cmVkIGluDQotICAgKiB1bml0cyBvZiAiaU1DVSIgKGludGVybGVhdmVkIE1DVSkgcm93cy4gIFRoZXNlIGFyZSB0aGUgc2FtZSBhcyBNQ1Ugcm93cw0KLSAgICogaW4gZnVsbHkgaW50ZXJsZWF2ZWQgSlBFRyBzY2FucywgYnV0IGFyZSB1c2VkIHdoZXRoZXIgdGhlIHNjYW4gaXMNCi0gICAqIGludGVybGVhdmVkIG9yIG5vdC4gIFdlIGRlZmluZSBhbiBpTUNVIHJvdyBhcyB2X3NhbXBfZmFjdG9yIERDVCBibG9jaw0KLSAgICogcm93cyBvZiBlYWNoIGNvbXBvbmVudC4gIFRoZXJlZm9yZSwgdGhlIElEQ1Qgb3V0cHV0IGNvbnRhaW5zDQotICAgKiB2X3NhbXBfZmFjdG9yKkRDVF9zY2FsZWRfc2l6ZSBzYW1wbGUgcm93cyBvZiBhIGNvbXBvbmVudCBwZXIgaU1DVSByb3cuDQotICAgKi8NCi0NCi0gIEpTQU1QTEUgKiBzYW1wbGVfcmFuZ2VfbGltaXQ7IC8qIHRhYmxlIGZvciBmYXN0IHJhbmdlLWxpbWl0aW5nICovDQotDQotICAvKg0KLSAgICogVGhlc2UgZmllbGRzIGFyZSB2YWxpZCBkdXJpbmcgYW55IG9uZSBzY2FuLg0KLSAgICogVGhleSBkZXNjcmliZSB0aGUgY29tcG9uZW50cyBhbmQgTUNVcyBhY3R1YWxseSBhcHBlYXJpbmcgaW4gdGhlIHNjYW4uDQotICAgKiBOb3RlIHRoYXQgdGhlIGRlY29tcHJlc3NvciBvdXRwdXQgc2lkZSBtdXN0IG5vdCB1c2UgdGhlc2UgZmllbGRzLg0KLSAgICovDQotICBpbnQgY29tcHNfaW5fc2NhbjsJCS8qICMgb2YgSlBFRyBjb21wb25lbnRzIGluIHRoaXMgc2NhbiAqLw0KLSAganBlZ19jb21wb25lbnRfaW5mbyAqIGN1cl9jb21wX2luZm9bTUFYX0NPTVBTX0lOX1NDQU5dOw0KLSAgLyogKmN1cl9jb21wX2luZm9baV0gZGVzY3JpYmVzIGNvbXBvbmVudCB0aGF0IGFwcGVhcnMgaSd0aCBpbiBTT1MgKi8NCi0NCi0gIEpESU1FTlNJT04gTUNVc19wZXJfcm93OwkvKiAjIG9mIE1DVXMgYWNyb3NzIHRoZSBpbWFnZSAqLw0KLSAgSkRJTUVOU0lPTiBNQ1Vfcm93c19pbl9zY2FuOwkvKiAjIG9mIE1DVSByb3dzIGluIHRoZSBpbWFnZSAqLw0KLQ0KLSAgaW50IGJsb2Nrc19pbl9NQ1U7CQkvKiAjIG9mIERDVCBibG9ja3MgcGVyIE1DVSAqLw0KLSAgaW50IE1DVV9tZW1iZXJzaGlwW0RfTUFYX0JMT0NLU19JTl9NQ1VdOw0KLSAgLyogTUNVX21lbWJlcnNoaXBbaV0gaXMgaW5kZXggaW4gY3VyX2NvbXBfaW5mbyBvZiBjb21wb25lbnQgb3duaW5nICovDQotICAvKiBpJ3RoIGJsb2NrIGluIGFuIE1DVSAqLw0KLQ0KLSAgaW50IFNzLCBTZSwgQWgsIEFsOwkJLyogcHJvZ3Jlc3NpdmUgSlBFRyBwYXJhbWV0ZXJzIGZvciBzY2FuICovDQotDQotICAvKiBUaGlzIGZpZWxkIGlzIHNoYXJlZCBiZXR3ZWVuIGVudHJvcHkgZGVjb2RlciBhbmQgbWFya2VyIHBhcnNlci4NCi0gICAqIEl0IGlzIGVpdGhlciB6ZXJvIG9yIHRoZSBjb2RlIG9mIGEgSlBFRyBtYXJrZXIgdGhhdCBoYXMgYmVlbg0KLSAgICogcmVhZCBmcm9tIHRoZSBkYXRhIHNvdXJjZSwgYnV0IGhhcyBub3QgeWV0IGJlZW4gcHJvY2Vzc2VkLg0KLSAgICovDQotICBpbnQgdW5yZWFkX21hcmtlcjsNCi0NCi0gIC8qDQotICAgKiBMaW5rcyB0byBkZWNvbXByZXNzaW9uIHN1Ym9iamVjdHMgKG1ldGhvZHMsIHByaXZhdGUgdmFyaWFibGVzIG9mIG1vZHVsZXMpDQotICAgKi8NCi0gIHN0cnVjdCBqcGVnX2RlY29tcF9tYXN0ZXIgKiBtYXN0ZXI7DQotICBzdHJ1Y3QganBlZ19kX21haW5fY29udHJvbGxlciAqIG1haW47DQotICBzdHJ1Y3QganBlZ19kX2NvZWZfY29udHJvbGxlciAqIGNvZWY7DQotICBzdHJ1Y3QganBlZ19kX3Bvc3RfY29udHJvbGxlciAqIHBvc3Q7DQotICBzdHJ1Y3QganBlZ19pbnB1dF9jb250cm9sbGVyICogaW5wdXRjdGw7DQotICBzdHJ1Y3QganBlZ19tYXJrZXJfcmVhZGVyICogbWFya2VyOw0KLSAgc3RydWN0IGpwZWdfZW50cm9weV9kZWNvZGVyICogZW50cm9weTsNCi0gIHN0cnVjdCBqcGVnX2ludmVyc2VfZGN0ICogaWRjdDsNCi0gIHN0cnVjdCBqcGVnX3Vwc2FtcGxlciAqIHVwc2FtcGxlOw0KLSAgc3RydWN0IGpwZWdfY29sb3JfZGVjb252ZXJ0ZXIgKiBjY29udmVydDsNCi0gIHN0cnVjdCBqcGVnX2NvbG9yX3F1YW50aXplciAqIGNxdWFudGl6ZTsNCi19Ow0KLQ0KLQ0KLS8qICJPYmplY3QiIGRlY2xhcmF0aW9ucyBmb3IgSlBFRyBtb2R1bGVzIHRoYXQgbWF5IGJlIHN1cHBsaWVkIG9yIGNhbGxlZA0KLSAqIGRpcmVjdGx5IGJ5IHRoZSBzdXJyb3VuZGluZyBhcHBsaWNhdGlvbi4NCi0gKiBBcyB3aXRoIGFsbCBvYmplY3RzIGluIHRoZSBKUEVHIGxpYnJhcnksIHRoZXNlIHN0cnVjdHMgb25seSBkZWZpbmUgdGhlDQotICogcHVibGljbHkgdmlzaWJsZSBtZXRob2RzIGFuZCBzdGF0ZSB2YXJpYWJsZXMgb2YgYSBtb2R1bGUuICBBZGRpdGlvbmFsDQotICogcHJpdmF0ZSBmaWVsZHMgbWF5IGV4aXN0IGFmdGVyIHRoZSBwdWJsaWMgb25lcy4NCi0gKi8NCi0NCi0NCi0vKiBFcnJvciBoYW5kbGVyIG9iamVjdCAqLw0KLQ0KLXN0cnVjdCBqcGVnX2Vycm9yX21nciB7DQotICAvKiBFcnJvciBleGl0IGhhbmRsZXI6IGRvZXMgbm90IHJldHVybiB0byBjYWxsZXIgKi8NCi0gIEpNRVRIT0Qodm9pZCwgZXJyb3JfZXhpdCwgKGpfY29tbW9uX3B0ciBjaW5mbykpOw0KLSAgLyogQ29uZGl0aW9uYWxseSBlbWl0IGEgdHJhY2Ugb3Igd2FybmluZyBtZXNzYWdlICovDQotICBKTUVUSE9EKHZvaWQsIGVtaXRfbWVzc2FnZSwgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IG1zZ19sZXZlbCkpOw0KLSAgLyogUm91dGluZSB0aGF0IGFjdHVhbGx5IG91dHB1dHMgYSB0cmFjZSBvciBlcnJvciBtZXNzYWdlICovDQotICBKTUVUSE9EKHZvaWQsIG91dHB1dF9tZXNzYWdlLCAoal9jb21tb25fcHRyIGNpbmZvKSk7DQotICAvKiBGb3JtYXQgYSBtZXNzYWdlIHN0cmluZyBmb3IgdGhlIG1vc3QgcmVjZW50IEpQRUcgZXJyb3Igb3IgbWVzc2FnZSAqLw0KLSAgSk1FVEhPRCh2b2lkLCBmb3JtYXRfbWVzc2FnZSwgKGpfY29tbW9uX3B0ciBjaW5mbywgY2hhciAqIGJ1ZmZlcikpOw0KLSNkZWZpbmUgSk1TR19MRU5HVEhfTUFYICAyMDAJLyogcmVjb21tZW5kZWQgc2l6ZSBvZiBmb3JtYXRfbWVzc2FnZSBidWZmZXIgKi8NCi0gIC8qIFJlc2V0IGVycm9yIHN0YXRlIHZhcmlhYmxlcyBhdCBzdGFydCBvZiBhIG5ldyBpbWFnZSAqLw0KLSAgSk1FVEhPRCh2b2lkLCByZXNldF9lcnJvcl9tZ3IsIChqX2NvbW1vbl9wdHIgY2luZm8pKTsNCi0gIA0KLSAgLyogVGhlIG1lc3NhZ2UgSUQgY29kZSBhbmQgYW55IHBhcmFtZXRlcnMgYXJlIHNhdmVkIGhlcmUuDQotICAgKiBBIG1lc3NhZ2UgY2FuIGhhdmUgb25lIHN0cmluZyBwYXJhbWV0ZXIgb3IgdXAgdG8gOCBpbnQgcGFyYW1ldGVycy4NCi0gICAqLw0KLSAgaW50IG1zZ19jb2RlOw0KLSNkZWZpbmUgSk1TR19TVFJfUEFSTV9NQVggIDgwDQotICB1bmlvbiB7DQotICAgIGludCBpWzhdOw0KLSAgICBjaGFyIHNbSk1TR19TVFJfUEFSTV9NQVhdOw0KLSAgfSBtc2dfcGFybTsNCi0gIA0KLSAgLyogU3RhbmRhcmQgc3RhdGUgdmFyaWFibGVzIGZvciBlcnJvciBmYWNpbGl0eSAqLw0KLSAgDQotICBpbnQgdHJhY2VfbGV2ZWw7CQkvKiBtYXggbXNnX2xldmVsIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgKi8NCi0gIA0KLSAgLyogRm9yIHJlY292ZXJhYmxlIGNvcnJ1cHQtZGF0YSBlcnJvcnMsIHdlIGVtaXQgYSB3YXJuaW5nIG1lc3NhZ2UsDQotICAgKiBidXQga2VlcCBnb2luZyB1bmxlc3MgZW1pdF9tZXNzYWdlIGNob29zZXMgdG8gYWJvcnQuICBlbWl0X21lc3NhZ2UNCi0gICAqIHNob3VsZCBjb3VudCB3YXJuaW5ncyBpbiBudW1fd2FybmluZ3MuICBUaGUgc3Vycm91bmRpbmcgYXBwbGljYXRpb24NCi0gICAqIGNhbiBjaGVjayBmb3IgYmFkIGRhdGEgYnkgc2VlaW5nIGlmIG51bV93YXJuaW5ncyBpcyBub256ZXJvIGF0IHRoZQ0KLSAgICogZW5kIG9mIHByb2Nlc3NpbmcuDQotICAgKi8NCi0gIGxvbmcgbnVtX3dhcm5pbmdzOwkJLyogbnVtYmVyIG9mIGNvcnJ1cHQtZGF0YSB3YXJuaW5ncyAqLw0KLQ0KLSAgLyogVGhlc2UgZmllbGRzIHBvaW50IHRvIHRoZSB0YWJsZShzKSBvZiBlcnJvciBtZXNzYWdlIHN0cmluZ3MuDQotICAgKiBBbiBhcHBsaWNhdGlvbiBjYW4gY2hhbmdlIHRoZSB0YWJsZSBwb2ludGVyIHRvIHN3aXRjaCB0byBhIGRpZmZlcmVudA0KLSAgICogbWVzc2FnZSBsaXN0ICh0eXBpY2FsbHksIHRvIGNoYW5nZSB0aGUgbGFuZ3VhZ2UgaW4gd2hpY2ggZXJyb3JzIGFyZQ0KLSAgICogcmVwb3J0ZWQpLiAgU29tZSBhcHBsaWNhdGlvbnMgbWF5IHdpc2ggdG8gYWRkIGFkZGl0aW9uYWwgZXJyb3IgY29kZXMNCi0gICAqIHRoYXQgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBKUEVHIGxpYnJhcnkgZXJyb3IgbWVjaGFuaXNtOyB0aGUgc2Vjb25kDQotICAgKiB0YWJsZSBwb2ludGVyIGlzIHVzZWQgZm9yIHRoaXMgcHVycG9zZS4NCi0gICAqDQotICAgKiBGaXJzdCB0YWJsZSBpbmNsdWRlcyBhbGwgZXJyb3JzIGdlbmVyYXRlZCBieSBKUEVHIGxpYnJhcnkgaXRzZWxmLg0KLSAgICogRXJyb3IgY29kZSAwIGlzIHJlc2VydmVkIGZvciBhICJubyBzdWNoIGVycm9yIHN0cmluZyIgbWVzc2FnZS4NCi0gICAqLw0KLSAgY29uc3QgY2hhciAqIGNvbnN0ICoganBlZ19tZXNzYWdlX3RhYmxlOyAvKiBMaWJyYXJ5IGVycm9ycyAqLw0KLSAgaW50IGxhc3RfanBlZ19tZXNzYWdlOyAgICAvKiBUYWJsZSBjb250YWlucyBzdHJpbmdzIDAuLmxhc3RfanBlZ19tZXNzYWdlICovDQotICAvKiBTZWNvbmQgdGFibGUgY2FuIGJlIGFkZGVkIGJ5IGFwcGxpY2F0aW9uIChzZWUgY2pwZWcvZGpwZWcgZm9yIGV4YW1wbGUpLg0KLSAgICogSXQgY29udGFpbnMgc3RyaW5ncyBudW1iZXJlZCBmaXJzdF9hZGRvbl9tZXNzYWdlLi5sYXN0X2FkZG9uX21lc3NhZ2UuDQotICAgKi8NCi0gIGNvbnN0IGNoYXIgKiBjb25zdCAqIGFkZG9uX21lc3NhZ2VfdGFibGU7IC8qIE5vbi1saWJyYXJ5IGVycm9ycyAqLw0KLSAgaW50IGZpcnN0X2FkZG9uX21lc3NhZ2U7CS8qIGNvZGUgZm9yIGZpcnN0IHN0cmluZyBpbiBhZGRvbiB0YWJsZSAqLw0KLSAgaW50IGxhc3RfYWRkb25fbWVzc2FnZTsJLyogY29kZSBmb3IgbGFzdCBzdHJpbmcgaW4gYWRkb24gdGFibGUgKi8NCi19Ow0KLQ0KLQ0KLS8qIFByb2dyZXNzIG1vbml0b3Igb2JqZWN0ICovDQotDQotc3RydWN0IGpwZWdfcHJvZ3Jlc3NfbWdyIHsNCi0gIEpNRVRIT0Qodm9pZCwgcHJvZ3Jlc3NfbW9uaXRvciwgKGpfY29tbW9uX3B0ciBjaW5mbykpOw0KLQ0KLSAgbG9uZyBwYXNzX2NvdW50ZXI7CQkvKiB3b3JrIHVuaXRzIGNvbXBsZXRlZCBpbiB0aGlzIHBhc3MgKi8NCi0gIGxvbmcgcGFzc19saW1pdDsJCS8qIHRvdGFsIG51bWJlciBvZiB3b3JrIHVuaXRzIGluIHRoaXMgcGFzcyAqLw0KLSAgaW50IGNvbXBsZXRlZF9wYXNzZXM7CQkvKiBwYXNzZXMgY29tcGxldGVkIHNvIGZhciAqLw0KLSAgaW50IHRvdGFsX3Bhc3NlczsJCS8qIHRvdGFsIG51bWJlciBvZiBwYXNzZXMgZXhwZWN0ZWQgKi8NCi19Ow0KLQ0KLQ0KLS8qIERhdGEgZGVzdGluYXRpb24gb2JqZWN0IGZvciBjb21wcmVzc2lvbiAqLw0KLQ0KLXN0cnVjdCBqcGVnX2Rlc3RpbmF0aW9uX21nciB7DQotICBKT0NURVQgKiBuZXh0X291dHB1dF9ieXRlOwkvKiA9PiBuZXh0IGJ5dGUgdG8gd3JpdGUgaW4gYnVmZmVyICovDQotICBzaXplX3QgZnJlZV9pbl9idWZmZXI7CS8qICMgb2YgYnl0ZSBzcGFjZXMgcmVtYWluaW5nIGluIGJ1ZmZlciAqLw0KLQ0KLSAgSk1FVEhPRCh2b2lkLCBpbml0X2Rlc3RpbmF0aW9uLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi0gIEpNRVRIT0QoYm9vbGVhbiwgZW1wdHlfb3V0cHV0X2J1ZmZlciwgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotICBKTUVUSE9EKHZvaWQsIHRlcm1fZGVzdGluYXRpb24sIChqX2NvbXByZXNzX3B0ciBjaW5mbykpOw0KLX07DQotDQotDQotLyogRGF0YSBzb3VyY2Ugb2JqZWN0IGZvciBkZWNvbXByZXNzaW9uICovDQotDQotc3RydWN0IGpwZWdfc291cmNlX21nciB7DQotICBjb25zdCBKT0NURVQgKiBuZXh0X2lucHV0X2J5dGU7IC8qID0+IG5leHQgYnl0ZSB0byByZWFkIGZyb20gYnVmZmVyICovDQotICBzaXplX3QgYnl0ZXNfaW5fYnVmZmVyOwkvKiAjIG9mIGJ5dGVzIHJlbWFpbmluZyBpbiBidWZmZXIgKi8NCi0NCi0gIEpNRVRIT0Qodm9pZCwgaW5pdF9zb3VyY2UsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotICBKTUVUSE9EKGJvb2xlYW4sIGZpbGxfaW5wdXRfYnVmZmVyLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLSAgSk1FVEhPRCh2b2lkLCBza2lwX2lucHV0X2RhdGEsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBsb25nIG51bV9ieXRlcykpOw0KLSAgSk1FVEhPRChib29sZWFuLCByZXN5bmNfdG9fcmVzdGFydCwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGludCBkZXNpcmVkKSk7DQotICBKTUVUSE9EKHZvaWQsIHRlcm1fc291cmNlLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLX07DQotDQotDQotLyogTWVtb3J5IG1hbmFnZXIgb2JqZWN0Lg0KLSAqIEFsbG9jYXRlcyAic21hbGwiIG9iamVjdHMgKGEgZmV3IEsgdG90YWwpLCAibGFyZ2UiIG9iamVjdHMgKHRlbnMgb2YgSyksDQotICogYW5kICJyZWFsbHkgYmlnIiBvYmplY3RzICh2aXJ0dWFsIGFycmF5cyB3aXRoIGJhY2tpbmcgc3RvcmUgaWYgbmVlZGVkKS4NCi0gKiBUaGUgbWVtb3J5IG1hbmFnZXIgZG9lcyBub3QgYWxsb3cgaW5kaXZpZHVhbCBvYmplY3RzIHRvIGJlIGZyZWVkOyByYXRoZXIsDQotICogZWFjaCBjcmVhdGVkIG9iamVjdCBpcyBhc3NpZ25lZCB0byBhIHBvb2wsIGFuZCB3aG9sZSBwb29scyBjYW4gYmUgZnJlZWQNCi0gKiBhdCBvbmNlLiAgVGhpcyBpcyBmYXN0ZXIgYW5kIG1vcmUgY29udmVuaWVudCB0aGFuIHJlbWVtYmVyaW5nIGV4YWN0bHkgd2hhdA0KLSAqIHRvIGZyZWUsIGVzcGVjaWFsbHkgd2hlcmUgbWFsbG9jKCkvZnJlZSgpIGFyZSBub3QgdG9vIHNwZWVkeS4NCi0gKiBOQjogYWxsb2Mgcm91dGluZXMgbmV2ZXIgcmV0dXJuIE5VTEwuICBUaGV5IGV4aXQgdG8gZXJyb3JfZXhpdCBpZiBub3QNCi0gKiBzdWNjZXNzZnVsLg0KLSAqLw0KLQ0KLSNkZWZpbmUgSlBPT0xfUEVSTUFORU5UCTAJLyogbGFzdHMgdW50aWwgbWFzdGVyIHJlY29yZCBpcyBkZXN0cm95ZWQgKi8NCi0jZGVmaW5lIEpQT09MX0lNQUdFCTEJLyogbGFzdHMgdW50aWwgZG9uZSB3aXRoIGltYWdlL2RhdGFzdHJlYW0gKi8NCi0jZGVmaW5lIEpQT09MX05VTVBPT0xTCTINCi0NCi10eXBlZGVmIHN0cnVjdCBqdmlydF9zYXJyYXlfY29udHJvbCAqIGp2aXJ0X3NhcnJheV9wdHI7DQotdHlwZWRlZiBzdHJ1Y3QganZpcnRfYmFycmF5X2NvbnRyb2wgKiBqdmlydF9iYXJyYXlfcHRyOw0KLQ0KLQ0KLXN0cnVjdCBqcGVnX21lbW9yeV9tZ3Igew0KLSAgLyogTWV0aG9kIHBvaW50ZXJzICovDQotICBKTUVUSE9EKHZvaWQgKiwgYWxsb2Nfc21hbGwsIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkLA0KLQkJCQlzaXplX3Qgc2l6ZW9mb2JqZWN0KSk7DQotICBKTUVUSE9EKHZvaWQgICosIGFsbG9jX2xhcmdlLCAoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgcG9vbF9pZCwNCi0JCQkJICAgICBzaXplX3Qgc2l6ZW9mb2JqZWN0KSk7DQotICBKTUVUSE9EKEpTQU1QQVJSQVksIGFsbG9jX3NhcnJheSwgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQsDQotCQkJCSAgICAgSkRJTUVOU0lPTiBzYW1wbGVzcGVycm93LA0KLQkJCQkgICAgIEpESU1FTlNJT04gbnVtcm93cykpOw0KLSAgSk1FVEhPRChKQkxPQ0tBUlJBWSwgYWxsb2NfYmFycmF5LCAoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgcG9vbF9pZCwNCi0JCQkJICAgICAgSkRJTUVOU0lPTiBibG9ja3NwZXJyb3csDQotCQkJCSAgICAgIEpESU1FTlNJT04gbnVtcm93cykpOw0KLSAgSk1FVEhPRChqdmlydF9zYXJyYXlfcHRyLCByZXF1ZXN0X3ZpcnRfc2FycmF5LCAoal9jb21tb25fcHRyIGNpbmZvLA0KLQkJCQkJCSAgaW50IHBvb2xfaWQsDQotCQkJCQkJICBib29sZWFuIHByZV96ZXJvLA0KLQkJCQkJCSAgSkRJTUVOU0lPTiBzYW1wbGVzcGVycm93LA0KLQkJCQkJCSAgSkRJTUVOU0lPTiBudW1yb3dzLA0KLQkJCQkJCSAgSkRJTUVOU0lPTiBtYXhhY2Nlc3MpKTsNCi0gIEpNRVRIT0QoanZpcnRfYmFycmF5X3B0ciwgcmVxdWVzdF92aXJ0X2JhcnJheSwgKGpfY29tbW9uX3B0ciBjaW5mbywNCi0JCQkJCQkgIGludCBwb29sX2lkLA0KLQkJCQkJCSAgYm9vbGVhbiBwcmVfemVybywNCi0JCQkJCQkgIEpESU1FTlNJT04gYmxvY2tzcGVycm93LA0KLQkJCQkJCSAgSkRJTUVOU0lPTiBudW1yb3dzLA0KLQkJCQkJCSAgSkRJTUVOU0lPTiBtYXhhY2Nlc3MpKTsNCi0gIEpNRVRIT0Qodm9pZCwgcmVhbGl6ZV92aXJ0X2FycmF5cywgKGpfY29tbW9uX3B0ciBjaW5mbykpOw0KLSAgSk1FVEhPRChKU0FNUEFSUkFZLCBhY2Nlc3NfdmlydF9zYXJyYXksIChqX2NvbW1vbl9wdHIgY2luZm8sDQotCQkJCQkgICBqdmlydF9zYXJyYXlfcHRyIHB0ciwNCi0JCQkJCSAgIEpESU1FTlNJT04gc3RhcnRfcm93LA0KLQkJCQkJICAgSkRJTUVOU0lPTiBudW1fcm93cywNCi0JCQkJCSAgIGJvb2xlYW4gd3JpdGFibGUpKTsNCi0gIEpNRVRIT0QoSkJMT0NLQVJSQVksIGFjY2Vzc192aXJ0X2JhcnJheSwgKGpfY29tbW9uX3B0ciBjaW5mbywNCi0JCQkJCSAgICBqdmlydF9iYXJyYXlfcHRyIHB0ciwNCi0JCQkJCSAgICBKRElNRU5TSU9OIHN0YXJ0X3JvdywNCi0JCQkJCSAgICBKRElNRU5TSU9OIG51bV9yb3dzLA0KLQkJCQkJICAgIGJvb2xlYW4gd3JpdGFibGUpKTsNCi0gIEpNRVRIT0Qodm9pZCwgZnJlZV9wb29sLCAoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgcG9vbF9pZCkpOw0KLSAgSk1FVEhPRCh2b2lkLCBzZWxmX2Rlc3RydWN0LCAoal9jb21tb25fcHRyIGNpbmZvKSk7DQotDQotICAvKiBMaW1pdCBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgdGhpcyBKUEVHIG9iamVjdC4gIChOb3RlIHRoYXQgdGhpcyBpcw0KLSAgICogbWVyZWx5IGFkdmlzb3J5LCBub3QgYSBndWFyYW50ZWVkIG1heGltdW07IGl0IG9ubHkgYWZmZWN0cyB0aGUgc3BhY2UNCi0gICAqIHVzZWQgZm9yIHZpcnR1YWwtYXJyYXkgYnVmZmVycy4pICBNYXkgYmUgY2hhbmdlZCBieSBvdXRlciBhcHBsaWNhdGlvbg0KLSAgICogYWZ0ZXIgY3JlYXRpbmcgdGhlIEpQRUcgb2JqZWN0Lg0KLSAgICovDQotICBsb25nIG1heF9tZW1vcnlfdG9fdXNlOw0KLQ0KLSAgLyogTWF4aW11bSBhbGxvY2F0aW9uIHJlcXVlc3QgYWNjZXB0ZWQgYnkgYWxsb2NfbGFyZ2UuICovDQotICBsb25nIG1heF9hbGxvY19jaHVuazsNCi19Ow0KLQ0KLQ0KLS8qIFJvdXRpbmUgc2lnbmF0dXJlIGZvciBhcHBsaWNhdGlvbi1zdXBwbGllZCBtYXJrZXIgcHJvY2Vzc2luZyBtZXRob2RzLg0KLSAqIE5lZWQgbm90IHBhc3MgbWFya2VyIGNvZGUgc2luY2UgaXQgaXMgc3RvcmVkIGluIGNpbmZvLT51bnJlYWRfbWFya2VyLg0KLSAqLw0KLXR5cGVkZWYgSk1FVEhPRChib29sZWFuLCBqcGVnX21hcmtlcl9wYXJzZXJfbWV0aG9kLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLQ0KLQ0KLS8qIERlY2xhcmF0aW9ucyBmb3Igcm91dGluZXMgY2FsbGVkIGJ5IGFwcGxpY2F0aW9uLg0KLSAqIFRoZSBKUFAgbWFjcm8gaGlkZXMgcHJvdG90eXBlIHBhcmFtZXRlcnMgZnJvbSBjb21waWxlcnMgdGhhdCBjYW4ndCBjb3BlLg0KLSAqIE5vdGUgSlBQIHJlcXVpcmVzIGRvdWJsZSBwYXJlbnRoZXNlcy4NCi0gKi8NCi0NCi0jaWZkZWYgSEFWRV9QUk9UT1RZUEVTDQotI2RlZmluZSBKUFAoYXJnbGlzdCkJYXJnbGlzdA0KLSNlbHNlDQotI2RlZmluZSBKUFAoYXJnbGlzdCkJKCkNCi0jZW5kaWYNCi0NCi0NCi0vKiBTaG9ydCBmb3JtcyBvZiBleHRlcm5hbCBuYW1lcyBmb3Igc3lzdGVtcyB3aXRoIGJyYWluLWRhbWFnZWQgbGlua2Vycy4NCi0gKiBXZSBzaG9ydGVuIGV4dGVybmFsIG5hbWVzIHRvIGJlIHVuaXF1ZSBpbiB0aGUgZmlyc3Qgc2l4IGxldHRlcnMsIHdoaWNoDQotICogaXMgZ29vZCBlbm91Z2ggZm9yIGFsbCBrbm93biBzeXN0ZW1zLg0KLSAqIChJZiB5b3VyIGNvbXBpbGVyIGl0c2VsZiBuZWVkcyBuYW1lcyB0byBiZSB1bmlxdWUgaW4gbGVzcyB0aGFuIDE1IA0KLSAqIGNoYXJhY3RlcnMsIHlvdSBhcmUgb3V0IG9mIGx1Y2suICBHZXQgYSBiZXR0ZXIgY29tcGlsZXIuKQ0KLSAqLw0KLQ0KLSNpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTDQotI2RlZmluZSBqcGVnX3N0ZF9lcnJvcgkJalN0ZEVycm9yDQotI2RlZmluZSBqcGVnX0NyZWF0ZUNvbXByZXNzCWpDcmVhQ29tcHJlc3MNCi0jZGVmaW5lIGpwZWdfQ3JlYXRlRGVjb21wcmVzcwlqQ3JlYURlY29tcHJlc3MNCi0jZGVmaW5lIGpwZWdfZGVzdHJveV9jb21wcmVzcwlqRGVzdENvbXByZXNzDQotI2RlZmluZSBqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcwlqRGVzdERlY29tcHJlc3MNCi0jZGVmaW5lIGpwZWdfc3RkaW9fZGVzdAkJalN0ZERlc3QNCi0jZGVmaW5lIGpwZWdfc3RkaW9fc3JjCQlqU3RkU3JjDQotI2RlZmluZSBqcGVnX3NldF9kZWZhdWx0cwlqU2V0RGVmYXVsdHMNCi0jZGVmaW5lIGpwZWdfc2V0X2NvbG9yc3BhY2UJalNldENvbG9yc3BhY2UNCi0jZGVmaW5lIGpwZWdfZGVmYXVsdF9jb2xvcnNwYWNlCWpEZWZDb2xvcnNwYWNlDQotI2RlZmluZSBqcGVnX3NldF9xdWFsaXR5CWpTZXRRdWFsaXR5DQotI2RlZmluZSBqcGVnX3NldF9saW5lYXJfcXVhbGl0eQlqU2V0TFF1YWxpdHkNCi0jZGVmaW5lIGpwZWdfYWRkX3F1YW50X3RhYmxlCWpBZGRRdWFudFRhYmxlDQotI2RlZmluZSBqcGVnX3F1YWxpdHlfc2NhbGluZwlqUXVhbGl0eVNjYWxpbmcNCi0jZGVmaW5lIGpwZWdfc2ltcGxlX3Byb2dyZXNzaW9uCWpTaW1Qcm9ncmVzcw0KLSNkZWZpbmUganBlZ19zdXBwcmVzc190YWJsZXMJalN1cHByZXNzVGFibGVzDQotI2RlZmluZSBqcGVnX2FsbG9jX3F1YW50X3RhYmxlCWpBbGNRVGFibGUNCi0jZGVmaW5lIGpwZWdfYWxsb2NfaHVmZl90YWJsZQlqQWxjSFRhYmxlDQotI2RlZmluZSBqcGVnX3N0YXJ0X2NvbXByZXNzCWpTdHJ0Q29tcHJlc3MNCi0jZGVmaW5lIGpwZWdfd3JpdGVfc2NhbmxpbmVzCWpXcnRTY2FubGluZXMNCi0jZGVmaW5lIGpwZWdfZmluaXNoX2NvbXByZXNzCWpGaW5Db21wcmVzcw0KLSNkZWZpbmUganBlZ193cml0ZV9yYXdfZGF0YQlqV3J0UmF3RGF0YQ0KLSNkZWZpbmUganBlZ193cml0ZV9tYXJrZXIJaldydE1hcmtlcg0KLSNkZWZpbmUganBlZ193cml0ZV9tX2hlYWRlcglqV3J0TUhlYWRlcg0KLSNkZWZpbmUganBlZ193cml0ZV9tX2J5dGUJaldydE1CeXRlDQotI2RlZmluZSBqcGVnX3dyaXRlX3RhYmxlcwlqV3J0VGFibGVzDQotI2RlZmluZSBqcGVnX3JlYWRfaGVhZGVyCWpSZWFkSGVhZGVyDQotI2RlZmluZSBqcGVnX3N0YXJ0X2RlY29tcHJlc3MJalN0cnREZWNvbXByZXNzDQotI2RlZmluZSBqcGVnX3JlYWRfc2NhbmxpbmVzCWpSZWFkU2NhbmxpbmVzDQotI2RlZmluZSBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzCWpGaW5EZWNvbXByZXNzDQotI2RlZmluZSBqcGVnX3JlYWRfcmF3X2RhdGEJalJlYWRSYXdEYXRhDQotI2RlZmluZSBqcGVnX2hhc19tdWx0aXBsZV9zY2FucwlqSGFzTXVsdFNjbg0KLSNkZWZpbmUganBlZ19zdGFydF9vdXRwdXQJalN0cnRPdXRwdXQNCi0jZGVmaW5lIGpwZWdfZmluaXNoX291dHB1dAlqRmluT3V0cHV0DQotI2RlZmluZSBqcGVnX2lucHV0X2NvbXBsZXRlCWpJbkNvbXBsZXRlDQotI2RlZmluZSBqcGVnX25ld19jb2xvcm1hcAlqTmV3Q01hcA0KLSNkZWZpbmUganBlZ19jb25zdW1lX2lucHV0CWpDb25zdW1lSW5wdXQNCi0jZGVmaW5lIGpwZWdfY2FsY19vdXRwdXRfZGltZW5zaW9ucwlqQ2FsY0RpbWVuc2lvbnMNCi0jZGVmaW5lIGpwZWdfc2F2ZV9tYXJrZXJzCWpTYXZlTWFya2Vycw0KLSNkZWZpbmUganBlZ19zZXRfbWFya2VyX3Byb2Nlc3NvcglqU2V0TWFya2VyDQotI2RlZmluZSBqcGVnX3JlYWRfY29lZmZpY2llbnRzCWpSZWFkQ29lZnMNCi0jZGVmaW5lIGpwZWdfd3JpdGVfY29lZmZpY2llbnRzCWpXcnRDb2Vmcw0KLSNkZWZpbmUganBlZ19jb3B5X2NyaXRpY2FsX3BhcmFtZXRlcnMJakNvcHlDcml0DQotI2RlZmluZSBqcGVnX2Fib3J0X2NvbXByZXNzCWpBYnJ0Q29tcHJlc3MNCi0jZGVmaW5lIGpwZWdfYWJvcnRfZGVjb21wcmVzcwlqQWJydERlY29tcHJlc3MNCi0jZGVmaW5lIGpwZWdfYWJvcnQJCWpBYm9ydA0KLSNkZWZpbmUganBlZ19kZXN0cm95CQlqRGVzdHJveQ0KLSNkZWZpbmUganBlZ19yZXN5bmNfdG9fcmVzdGFydAlqUmVzeW5jUmVzdGFydA0KLSNlbmRpZiAvKiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTICovDQotDQotDQotLyogRGVmYXVsdCBlcnJvci1tYW5hZ2VtZW50IHNldHVwICovDQotRVhURVJOKHN0cnVjdCBqcGVnX2Vycm9yX21nciAqKSBqcGVnX3N0ZF9lcnJvcg0KLQlKUFAoKHN0cnVjdCBqcGVnX2Vycm9yX21nciAqIGVycikpOw0KLQ0KLS8qIEluaXRpYWxpemF0aW9uIG9mIEpQRUcgY29tcHJlc3Npb24gb2JqZWN0cy4NCi0gKiBqcGVnX2NyZWF0ZV9jb21wcmVzcygpIGFuZCBqcGVnX2NyZWF0ZV9kZWNvbXByZXNzKCkgYXJlIHRoZSBleHBvcnRlZA0KLSAqIG5hbWVzIHRoYXQgYXBwbGljYXRpb25zIHNob3VsZCBjYWxsLiAgVGhlc2UgZXhwYW5kIHRvIGNhbGxzIG9uDQotICoganBlZ19DcmVhdGVDb21wcmVzcyBhbmQganBlZ19DcmVhdGVEZWNvbXByZXNzIHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHBhc3NlZCBmb3IgdmVyc2lvbiBtaXNtYXRjaCBjaGVja2luZy4NCi0gKiBOQjogeW91IG11c3Qgc2V0IHVwIHRoZSBlcnJvci1tYW5hZ2VyIEJFRk9SRSBjYWxsaW5nIGpwZWdfY3JlYXRlX3h4eC4NCi0gKi8NCi0jZGVmaW5lIGpwZWdfY3JlYXRlX2NvbXByZXNzKGNpbmZvKSBcDQotICAgIGpwZWdfQ3JlYXRlQ29tcHJlc3MoKGNpbmZvKSwgSlBFR19MSUJfVkVSU0lPTiwgXA0KLQkJCShzaXplX3QpIHNpemVvZihzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3QpKQ0KLSNkZWZpbmUganBlZ19jcmVhdGVfZGVjb21wcmVzcyhjaW5mbykgXA0KLSAgICBqcGVnX0NyZWF0ZURlY29tcHJlc3MoKGNpbmZvKSwgSlBFR19MSUJfVkVSU0lPTiwgXA0KLQkJCSAgKHNpemVfdCkgc2l6ZW9mKHN0cnVjdCBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KSkNCi1FWFRFUk4odm9pZCkganBlZ19DcmVhdGVDb21wcmVzcyBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLA0KLQkJCQkgICAgICBpbnQgdmVyc2lvbiwgc2l6ZV90IHN0cnVjdHNpemUpKTsNCi1FWFRFUk4odm9pZCkganBlZ19DcmVhdGVEZWNvbXByZXNzIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJCWludCB2ZXJzaW9uLCBzaXplX3Qgc3RydWN0c2l6ZSkpOw0KLS8qIERlc3RydWN0aW9uIG9mIEpQRUcgY29tcHJlc3Npb24gb2JqZWN0cyAqLw0KLUVYVEVSTih2b2lkKSBqcGVnX2Rlc3Ryb3lfY29tcHJlc3MgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOw0KLUVYVEVSTih2b2lkKSBqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi0NCi0jaWYgMA0KLS8qIFN0YW5kYXJkIGRhdGEgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBtYW5hZ2Vyczogc3RkaW8gc3RyZWFtcy4gKi8NCi0vKiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIG9wZW5pbmcgdGhlIGZpbGUgYmVmb3JlIGFuZCBjbG9zaW5nIGFmdGVyLiAqLw0KLUVYVEVSTih2b2lkKSBqcGVnX3N0ZGlvX2Rlc3QgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgRlhTWVNfRklMRSAqIG91dGZpbGUpKTsNCi1FWFRFUk4odm9pZCkganBlZ19zdGRpb19zcmMgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBGWFNZU19GSUxFICogaW5maWxlKSk7DQotI2VuZGlmDQotDQotLyogRGVmYXVsdCBwYXJhbWV0ZXIgc2V0dXAgZm9yIGNvbXByZXNzaW9uICovDQotRVhURVJOKHZvaWQpIGpwZWdfc2V0X2RlZmF1bHRzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi0vKiBDb21wcmVzc2lvbiBwYXJhbWV0ZXIgc2V0dXAgYWlkcyAqLw0KLUVYVEVSTih2b2lkKSBqcGVnX3NldF9jb2xvcnNwYWNlIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sDQotCQkJCSAgICAgIEpfQ09MT1JfU1BBQ0UgY29sb3JzcGFjZSkpOw0KLUVYVEVSTih2b2lkKSBqcGVnX2RlZmF1bHRfY29sb3JzcGFjZSBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotRVhURVJOKHZvaWQpIGpwZWdfc2V0X3F1YWxpdHkgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IHF1YWxpdHksDQotCQkJCSAgIGJvb2xlYW4gZm9yY2VfYmFzZWxpbmUpKTsNCi1FWFRFUk4odm9pZCkganBlZ19zZXRfbGluZWFyX3F1YWxpdHkgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJCSAgaW50IHNjYWxlX2ZhY3RvciwNCi0JCQkJCSAgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkpOw0KLUVYVEVSTih2b2lkKSBqcGVnX2FkZF9xdWFudF90YWJsZSBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgd2hpY2hfdGJsLA0KLQkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpiYXNpY190YWJsZSwNCi0JCQkJICAgICAgIGludCBzY2FsZV9mYWN0b3IsDQotCQkJCSAgICAgICBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKSk7DQotRVhURVJOKGludCkganBlZ19xdWFsaXR5X3NjYWxpbmcgSlBQKChpbnQgcXVhbGl0eSkpOw0KLUVYVEVSTih2b2lkKSBqcGVnX3NpbXBsZV9wcm9ncmVzc2lvbiBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotRVhURVJOKHZvaWQpIGpwZWdfc3VwcHJlc3NfdGFibGVzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sDQotCQkJCSAgICAgICBib29sZWFuIHN1cHByZXNzKSk7DQotRVhURVJOKEpRVUFOVF9UQkwgKikganBlZ19hbGxvY19xdWFudF90YWJsZSBKUFAoKGpfY29tbW9uX3B0ciBjaW5mbykpOw0KLUVYVEVSTihKSFVGRl9UQkwgKikganBlZ19hbGxvY19odWZmX3RhYmxlIEpQUCgoal9jb21tb25fcHRyIGNpbmZvKSk7DQotDQotLyogTWFpbiBlbnRyeSBwb2ludHMgZm9yIGNvbXByZXNzaW9uICovDQotRVhURVJOKHZvaWQpIGpwZWdfc3RhcnRfY29tcHJlc3MgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJICAgICAgYm9vbGVhbiB3cml0ZV9hbGxfdGFibGVzKSk7DQotRVhURVJOKEpESU1FTlNJT04pIGpwZWdfd3JpdGVfc2NhbmxpbmVzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sDQotCQkJCQkgICAgIEpTQU1QQVJSQVkgc2NhbmxpbmVzLA0KLQkJCQkJICAgICBKRElNRU5TSU9OIG51bV9saW5lcykpOw0KLUVYVEVSTih2b2lkKSBqcGVnX2ZpbmlzaF9jb21wcmVzcyBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotDQotLyogUmVwbGFjZXMganBlZ193cml0ZV9zY2FubGluZXMgd2hlbiB3cml0aW5nIHJhdyBkb3duc2FtcGxlZCBkYXRhLiAqLw0KLUVYVEVSTihKRElNRU5TSU9OKSBqcGVnX3dyaXRlX3Jhd19kYXRhIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sDQotCQkJCQkgICAgSlNBTVBJTUFHRSBkYXRhLA0KLQkJCQkJICAgIEpESU1FTlNJT04gbnVtX2xpbmVzKSk7DQotDQotLyogV3JpdGUgYSBzcGVjaWFsIG1hcmtlci4gIFNlZSBsaWJqcGVnLmRvYyBjb25jZXJuaW5nIHNhZmUgdXNhZ2UuICovDQotRVhURVJOKHZvaWQpIGpwZWdfd3JpdGVfbWFya2VyDQotCUpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGludCBtYXJrZXIsDQotCSAgICAgY29uc3QgSk9DVEVUICogZGF0YXB0ciwgdW5zaWduZWQgaW50IGRhdGFsZW4pKTsNCi0vKiBTYW1lLCBidXQgcGllY2VtZWFsLiAqLw0KLUVYVEVSTih2b2lkKSBqcGVnX3dyaXRlX21faGVhZGVyDQotCUpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGludCBtYXJrZXIsIHVuc2lnbmVkIGludCBkYXRhbGVuKSk7DQotRVhURVJOKHZvaWQpIGpwZWdfd3JpdGVfbV9ieXRlDQotCUpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGludCB2YWwpKTsNCi0NCi0vKiBBbHRlcm5hdGUgY29tcHJlc3Npb24gZnVuY3Rpb246IGp1c3Qgd3JpdGUgYW4gYWJicmV2aWF0ZWQgdGFibGUgZmlsZSAqLw0KLUVYVEVSTih2b2lkKSBqcGVnX3dyaXRlX3RhYmxlcyBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotDQotLyogRGVjb21wcmVzc2lvbiBzdGFydHVwOiByZWFkIHN0YXJ0IG9mIEpQRUcgZGF0YXN0cmVhbSB0byBzZWUgd2hhdCdzIHRoZXJlICovDQotRVhURVJOKGludCkganBlZ19yZWFkX2hlYWRlciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sDQotCQkJCSAgYm9vbGVhbiByZXF1aXJlX2ltYWdlKSk7DQotLyogUmV0dXJuIHZhbHVlIGlzIG9uZSBvZjogKi8NCi0jZGVmaW5lIEpQRUdfU1VTUEVOREVECQkwIC8qIFN1c3BlbmRlZCBkdWUgdG8gbGFjayBvZiBpbnB1dCBkYXRhICovDQotI2RlZmluZSBKUEVHX0hFQURFUl9PSwkJMSAvKiBGb3VuZCB2YWxpZCBpbWFnZSBkYXRhc3RyZWFtICovDQotI2RlZmluZSBKUEVHX0hFQURFUl9UQUJMRVNfT05MWQkyIC8qIEZvdW5kIHZhbGlkIHRhYmxlLXNwZWNzLW9ubHkgZGF0YXN0cmVhbSAqLw0KLS8qIElmIHlvdSBwYXNzIHJlcXVpcmVfaW1hZ2UgPSBUUlVFIChub3JtYWwgY2FzZSksIHlvdSBuZWVkIG5vdCBjaGVjayBmb3INCi0gKiBhIFRBQkxFU19PTkxZIHJldHVybiBjb2RlOyBhbiBhYmJyZXZpYXRlZCBmaWxlIHdpbGwgY2F1c2UgYW4gZXJyb3IgZXhpdC4NCi0gKiBKUEVHX1NVU1BFTkRFRCBpcyBvbmx5IHBvc3NpYmxlIGlmIHlvdSB1c2UgYSBkYXRhIHNvdXJjZSBtb2R1bGUgdGhhdCBjYW4NCi0gKiBnaXZlIGEgc3VzcGVuc2lvbiByZXR1cm4gKHRoZSBzdGRpbyBzb3VyY2UgbW9kdWxlIGRvZXNuJ3QpLg0KLSAqLw0KLQ0KLS8qIE1haW4gZW50cnkgcG9pbnRzIGZvciBkZWNvbXByZXNzaW9uICovDQotRVhURVJOKGJvb2xlYW4pIGpwZWdfc3RhcnRfZGVjb21wcmVzcyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4oSkRJTUVOU0lPTikganBlZ19yZWFkX3NjYW5saW5lcyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sDQotCQkJCQkgICAgSlNBTVBBUlJBWSBzY2FubGluZXMsDQotCQkJCQkgICAgSkRJTUVOU0lPTiBtYXhfbGluZXMpKTsNCi1FWFRFUk4oYm9vbGVhbikganBlZ19maW5pc2hfZGVjb21wcmVzcyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi0NCi0vKiBSZXBsYWNlcyBqcGVnX3JlYWRfc2NhbmxpbmVzIHdoZW4gcmVhZGluZyByYXcgZG93bnNhbXBsZWQgZGF0YS4gKi8NCi1FWFRFUk4oSkRJTUVOU0lPTikganBlZ19yZWFkX3Jhd19kYXRhIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJCSAgIEpTQU1QSU1BR0UgZGF0YSwNCi0JCQkJCSAgIEpESU1FTlNJT04gbWF4X2xpbmVzKSk7DQotDQotLyogQWRkaXRpb25hbCBlbnRyeSBwb2ludHMgZm9yIGJ1ZmZlcmVkLWltYWdlIG1vZGUuICovDQotRVhURVJOKGJvb2xlYW4pIGpwZWdfaGFzX211bHRpcGxlX3NjYW5zIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLUVYVEVSTihib29sZWFuKSBqcGVnX3N0YXJ0X291dHB1dCBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sDQotCQkJCSAgICAgICBpbnQgc2Nhbl9udW1iZXIpKTsNCi1FWFRFUk4oYm9vbGVhbikganBlZ19maW5pc2hfb3V0cHV0IEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLUVYVEVSTihib29sZWFuKSBqcGVnX2lucHV0X2NvbXBsZXRlIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLUVYVEVSTih2b2lkKSBqcGVnX25ld19jb2xvcm1hcCBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4oaW50KSBqcGVnX2NvbnN1bWVfaW5wdXQgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotLyogUmV0dXJuIHZhbHVlIGlzIG9uZSBvZjogKi8NCi0vKiAjZGVmaW5lIEpQRUdfU1VTUEVOREVECTAgICAgU3VzcGVuZGVkIGR1ZSB0byBsYWNrIG9mIGlucHV0IGRhdGEgKi8NCi0jZGVmaW5lIEpQRUdfUkVBQ0hFRF9TT1MJMSAvKiBSZWFjaGVkIHN0YXJ0IG9mIG5ldyBzY2FuICovDQotI2RlZmluZSBKUEVHX1JFQUNIRURfRU9JCTIgLyogUmVhY2hlZCBlbmQgb2YgaW1hZ2UgKi8NCi0jZGVmaW5lIEpQRUdfUk9XX0NPTVBMRVRFRAkzIC8qIENvbXBsZXRlZCBvbmUgaU1DVSByb3cgKi8NCi0jZGVmaW5lIEpQRUdfU0NBTl9DT01QTEVURUQJNCAvKiBDb21wbGV0ZWQgbGFzdCBpTUNVIHJvdyBvZiBhIHNjYW4gKi8NCi0NCi0vKiBQcmVjYWxjdWxhdGUgb3V0cHV0IGRpbWVuc2lvbnMgZm9yIGN1cnJlbnQgZGVjb21wcmVzc2lvbiBwYXJhbWV0ZXJzLiAqLw0KLUVYVEVSTih2b2lkKSBqcGVnX2NhbGNfb3V0cHV0X2RpbWVuc2lvbnMgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7DQotDQotLyogQ29udHJvbCBzYXZpbmcgb2YgQ09NIGFuZCBBUFBuIG1hcmtlcnMgaW50byBtYXJrZXJfbGlzdC4gKi8NCi1FWFRFUk4odm9pZCkganBlZ19zYXZlX21hcmtlcnMNCi0JSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyX2NvZGUsDQotCSAgICAgdW5zaWduZWQgaW50IGxlbmd0aF9saW1pdCkpOw0KLQ0KLS8qIEluc3RhbGwgYSBzcGVjaWFsIHByb2Nlc3NpbmcgbWV0aG9kIGZvciBDT00gb3IgQVBQbiBtYXJrZXJzLiAqLw0KLUVYVEVSTih2b2lkKSBqcGVnX3NldF9tYXJrZXJfcHJvY2Vzc29yDQotCUpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgaW50IG1hcmtlcl9jb2RlLA0KLQkgICAgIGpwZWdfbWFya2VyX3BhcnNlcl9tZXRob2Qgcm91dGluZSkpOw0KLQ0KLS8qIFJlYWQgb3Igd3JpdGUgcmF3IERDVCBjb2VmZmljaWVudHMgLS0tIHVzZWZ1bCBmb3IgbG9zc2xlc3MgdHJhbnNjb2RpbmcuICovDQotRVhURVJOKGp2aXJ0X2JhcnJheV9wdHIgKikganBlZ19yZWFkX2NvZWZmaWNpZW50cyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4odm9pZCkganBlZ193cml0ZV9jb2VmZmljaWVudHMgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywNCi0JCQkJCSAganZpcnRfYmFycmF5X3B0ciAqIGNvZWZfYXJyYXlzKSk7DQotRVhURVJOKHZvaWQpIGpwZWdfY29weV9jcml0aWNhbF9wYXJhbWV0ZXJzIEpQUCgoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLA0KLQkJCQkJCWpfY29tcHJlc3NfcHRyIGRzdGluZm8pKTsNCi0NCi0vKiBJZiB5b3UgY2hvb3NlIHRvIGFib3J0IGNvbXByZXNzaW9uIG9yIGRlY29tcHJlc3Npb24gYmVmb3JlIGNvbXBsZXRpbmcNCi0gKiBqcGVnX2ZpbmlzaF8oZGUpY29tcHJlc3MsIHRoZW4geW91IG5lZWQgdG8gY2xlYW4gdXAgdG8gcmVsZWFzZSBtZW1vcnksDQotICogdGVtcG9yYXJ5IGZpbGVzLCBldGMuICBZb3UgY2FuIGp1c3QgY2FsbCBqcGVnX2Rlc3Ryb3lfKGRlKWNvbXByZXNzDQotICogaWYgeW91J3JlIGRvbmUgd2l0aCB0aGUgSlBFRyBvYmplY3QsIGJ1dCBpZiB5b3Ugd2FudCB0byBjbGVhbiBpdCB1cCBhbmQNCi0gKiByZXVzZSBpdCwgY2FsbCB0aGlzOg0KLSAqLw0KLUVYVEVSTih2b2lkKSBqcGVnX2Fib3J0X2NvbXByZXNzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsNCi1FWFRFUk4odm9pZCkganBlZ19hYm9ydF9kZWNvbXByZXNzIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOw0KLQ0KLS8qIEdlbmVyaWMgdmVyc2lvbnMgb2YganBlZ19hYm9ydCBhbmQganBlZ19kZXN0cm95IHRoYXQgd29yayBvbiBlaXRoZXINCi0gKiBmbGF2b3Igb2YgSlBFRyBvYmplY3QuICBUaGVzZSBtYXkgYmUgbW9yZSBjb252ZW5pZW50IGluIHNvbWUgcGxhY2VzLg0KLSAqLw0KLUVYVEVSTih2b2lkKSBqcGVnX2Fib3J0IEpQUCgoal9jb21tb25fcHRyIGNpbmZvKSk7DQotRVhURVJOKHZvaWQpIGpwZWdfZGVzdHJveSBKUFAoKGpfY29tbW9uX3B0ciBjaW5mbykpOw0KLQ0KLS8qIERlZmF1bHQgcmVzdGFydC1tYXJrZXItcmVzeW5jIHByb2NlZHVyZSBmb3IgdXNlIGJ5IGRhdGEgc291cmNlIG1vZHVsZXMgKi8NCi1FWFRFUk4oYm9vbGVhbikganBlZ19yZXN5bmNfdG9fcmVzdGFydCBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sDQotCQkJCQkgICAgaW50IGRlc2lyZWQpKTsNCi0NCi0NCi0vKiBUaGVzZSBtYXJrZXIgY29kZXMgYXJlIGV4cG9ydGVkIHNpbmNlIGFwcGxpY2F0aW9ucyBhbmQgZGF0YSBzb3VyY2UgbW9kdWxlcw0KLSAqIGFyZSBsaWtlbHkgdG8gd2FudCB0byB1c2UgdGhlbS4NCi0gKi8NCi0NCi0jZGVmaW5lIEpQRUdfUlNUMAkweEQwCS8qIFJTVDAgbWFya2VyIGNvZGUgKi8NCi0jZGVmaW5lIEpQRUdfRU9JCTB4RDkJLyogRU9JIG1hcmtlciBjb2RlICovDQotI2RlZmluZSBKUEVHX0FQUDAJMHhFMAkvKiBBUFAwIG1hcmtlciBjb2RlICovDQotI2RlZmluZSBKUEVHX0NPTQkweEZFCS8qIENPTSBtYXJrZXIgY29kZSAqLw0KLQ0KLQ0KLS8qIElmIHdlIGhhdmUgYSBicmFpbi1kYW1hZ2VkIGNvbXBpbGVyIHRoYXQgZW1pdHMgd2FybmluZ3MgKG9yIHdvcnNlLCBlcnJvcnMpDQotICogZm9yIHN0cnVjdHVyZSBkZWZpbml0aW9ucyB0aGF0IGFyZSBuZXZlciBmaWxsZWQgaW4sIGtlZXAgaXQgcXVpZXQgYnkNCi0gKiBzdXBwbHlpbmcgZHVtbXkgZGVmaW5pdGlvbnMgZm9yIHRoZSB2YXJpb3VzIHN1YnN0cnVjdHVyZXMuDQotICovDQotDQotI2lmZGVmIElOQ09NUExFVEVfVFlQRVNfQlJPS0VODQotI2lmbmRlZiBKUEVHX0lOVEVSTkFMUwkJLyogd2lsbCBiZSBkZWZpbmVkIGluIGpwZWdpbnQuaCAqLw0KLXN0cnVjdCBqdmlydF9zYXJyYXlfY29udHJvbCB7IGxvbmcgZHVtbXk7IH07DQotc3RydWN0IGp2aXJ0X2JhcnJheV9jb250cm9sIHsgbG9uZyBkdW1teTsgfTsNCi1zdHJ1Y3QganBlZ19jb21wX21hc3RlciB7IGxvbmcgZHVtbXk7IH07DQotc3RydWN0IGpwZWdfY19tYWluX2NvbnRyb2xsZXIgeyBsb25nIGR1bW15OyB9Ow0KLXN0cnVjdCBqcGVnX2NfcHJlcF9jb250cm9sbGVyIHsgbG9uZyBkdW1teTsgfTsNCi1zdHJ1Y3QganBlZ19jX2NvZWZfY29udHJvbGxlciB7IGxvbmcgZHVtbXk7IH07DQotc3RydWN0IGpwZWdfbWFya2VyX3dyaXRlciB7IGxvbmcgZHVtbXk7IH07DQotc3RydWN0IGpwZWdfY29sb3JfY29udmVydGVyIHsgbG9uZyBkdW1teTsgfTsNCi1zdHJ1Y3QganBlZ19kb3duc2FtcGxlciB7IGxvbmcgZHVtbXk7IH07DQotc3RydWN0IGpwZWdfZm9yd2FyZF9kY3QgeyBsb25nIGR1bW15OyB9Ow0KLXN0cnVjdCBqcGVnX2VudHJvcHlfZW5jb2RlciB7IGxvbmcgZHVtbXk7IH07DQotc3RydWN0IGpwZWdfZGVjb21wX21hc3RlciB7IGxvbmcgZHVtbXk7IH07DQotc3RydWN0IGpwZWdfZF9tYWluX2NvbnRyb2xsZXIgeyBsb25nIGR1bW15OyB9Ow0KLXN0cnVjdCBqcGVnX2RfY29lZl9jb250cm9sbGVyIHsgbG9uZyBkdW1teTsgfTsNCi1zdHJ1Y3QganBlZ19kX3Bvc3RfY29udHJvbGxlciB7IGxvbmcgZHVtbXk7IH07DQotc3RydWN0IGpwZWdfaW5wdXRfY29udHJvbGxlciB7IGxvbmcgZHVtbXk7IH07DQotc3RydWN0IGpwZWdfbWFya2VyX3JlYWRlciB7IGxvbmcgZHVtbXk7IH07DQotc3RydWN0IGpwZWdfZW50cm9weV9kZWNvZGVyIHsgbG9uZyBkdW1teTsgfTsNCi1zdHJ1Y3QganBlZ19pbnZlcnNlX2RjdCB7IGxvbmcgZHVtbXk7IH07DQotc3RydWN0IGpwZWdfdXBzYW1wbGVyIHsgbG9uZyBkdW1teTsgfTsNCi1zdHJ1Y3QganBlZ19jb2xvcl9kZWNvbnZlcnRlciB7IGxvbmcgZHVtbXk7IH07DQotc3RydWN0IGpwZWdfY29sb3JfcXVhbnRpemVyIHsgbG9uZyBkdW1teTsgfTsNCi0jZW5kaWYgLyogSlBFR19JTlRFUk5BTFMgKi8NCi0jZW5kaWYgLyogSU5DT01QTEVURV9UWVBFU19CUk9LRU4gKi8NCi0NCi0NCi0vKg0KLSAqIFRoZSBKUEVHIGxpYnJhcnkgbW9kdWxlcyBkZWZpbmUgSlBFR19JTlRFUk5BTFMgYmVmb3JlIGluY2x1ZGluZyB0aGlzIGZpbGUuDQotICogVGhlIGludGVybmFsIHN0cnVjdHVyZSBkZWNsYXJhdGlvbnMgYXJlIHJlYWQgb25seSB3aGVuIHRoYXQgaXMgdHJ1ZS4NCi0gKiBBcHBsaWNhdGlvbnMgdXNpbmcgdGhlIGxpYnJhcnkgc2hvdWxkIG5vdCBpbmNsdWRlIGpwZWdpbnQuaCwgYnV0IG1heSB3aXNoDQotICogdG8gaW5jbHVkZSBqZXJyb3IuaC4NCi0gKi8NCi0NCi0jaWZkZWYgSlBFR19JTlRFUk5BTFMNCi0jaW5jbHVkZSAianBlZ2ludC5oIgkJLyogZmV0Y2ggcHJpdmF0ZSBkZWNsYXJhdGlvbnMgKi8NCi0jaW5jbHVkZSAiamVycm9yLmgiCQkvKiBmZXRjaCBlcnJvciBjb2RlcyB0b28gKi8NCi0jZW5kaWYNCi0NCi0jZW5kaWYgLyogSlBFR0xJQl9IICovDQorLyoKKyAqIGpwZWdsaWIuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk4LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGRlZmluZXMgdGhlIGFwcGxpY2F0aW9uIGludGVyZmFjZSBmb3IgdGhlIEpQRUcgbGlicmFyeS4KKyAqIE1vc3QgYXBwbGljYXRpb25zIHVzaW5nIHRoZSBsaWJyYXJ5IG5lZWQgb25seSBpbmNsdWRlIHRoaXMgZmlsZSwKKyAqIGFuZCBwZXJoYXBzIGplcnJvci5oIGlmIHRoZXkgd2FudCB0byBrbm93IHRoZSBleGFjdCBlcnJvciBjb2Rlcy4KKyAqLworCisjaWZuZGVmIEpQRUdMSUJfSAorI2RlZmluZSBKUEVHTElCX0gKKworI2RlZmluZSBGT1hJVF9QUkVGSVgob3JpZ05hbWUpICBGUERGQVBJSlBFR18jI29yaWdOYW1lCisKKyNkZWZpbmUgamNvcHlfYmxvY2tfcm93IEZPWElUX1BSRUZJWChqY29weV9ibG9ja19yb3cpCisjZGVmaW5lIGpjb3B5X3NhbXBsZV9yb3dzIEZPWElUX1BSRUZJWChqY29weV9zYW1wbGVfcm93cykKKyNkZWZpbmUgamRpdl9yb3VuZF91cCBGT1hJVF9QUkVGSVgoamRpdl9yb3VuZF91cCkKKyNkZWZpbmUgamluaXRfMXBhc3NfcXVhbnRpemVyIEZPWElUX1BSRUZJWChqaW5pdF8xcGFzc19xdWFudGl6ZXIpCisjZGVmaW5lIGppbml0XzJwYXNzX3F1YW50aXplciBGT1hJVF9QUkVGSVgoamluaXRfMnBhc3NfcXVhbnRpemVyKQorI2RlZmluZSBqaW5pdF9jb2xvcl9kZWNvbnZlcnRlciBGT1hJVF9QUkVGSVgoamluaXRfY29sb3JfZGVjb252ZXJ0ZXIpCisjZGVmaW5lIGppbml0X2RfY29lZl9jb250cm9sbGVyIEZPWElUX1BSRUZJWChqaW5pdF9kX2NvZWZfY29udHJvbGxlcikKKyNkZWZpbmUgamluaXRfZF9tYWluX2NvbnRyb2xsZXIgRk9YSVRfUFJFRklYKGppbml0X2RfbWFpbl9jb250cm9sbGVyKQorI2RlZmluZSBqaW5pdF9kX3Bvc3RfY29udHJvbGxlciBGT1hJVF9QUkVGSVgoamluaXRfZF9wb3N0X2NvbnRyb2xsZXIpCisjZGVmaW5lIGppbml0X2h1ZmZfZGVjb2RlciBGT1hJVF9QUkVGSVgoamluaXRfaHVmZl9kZWNvZGVyKQorI2RlZmluZSBqaW5pdF9pbnB1dF9jb250cm9sbGVyIEZPWElUX1BSRUZJWChqaW5pdF9pbnB1dF9jb250cm9sbGVyKQorI2RlZmluZSBqaW5pdF9pbnZlcnNlX2RjdCBGT1hJVF9QUkVGSVgoamluaXRfaW52ZXJzZV9kY3QpCisjZGVmaW5lIGppbml0X21hcmtlcl9yZWFkZXIgRk9YSVRfUFJFRklYKGppbml0X21hcmtlcl9yZWFkZXIpCisjZGVmaW5lIGppbml0X21hc3Rlcl9kZWNvbXByZXNzIEZPWElUX1BSRUZJWChqaW5pdF9tYXN0ZXJfZGVjb21wcmVzcykKKyNkZWZpbmUgamluaXRfbWVtb3J5X21nciBGT1hJVF9QUkVGSVgoamluaXRfbWVtb3J5X21ncikKKyNkZWZpbmUgamluaXRfbWVyZ2VkX3Vwc2FtcGxlciBGT1hJVF9QUkVGSVgoamluaXRfbWVyZ2VkX3Vwc2FtcGxlcikKKyNkZWZpbmUgamluaXRfcGh1ZmZfZGVjb2RlciBGT1hJVF9QUkVGSVgoamluaXRfcGh1ZmZfZGVjb2RlcikKKyNkZWZpbmUgamluaXRfdXBzYW1wbGVyIEZPWElUX1BSRUZJWChqaW5pdF91cHNhbXBsZXIpCisjZGVmaW5lIGpwZWdfQ3JlYXRlRGVjb21wcmVzcyBGT1hJVF9QUkVGSVgoanBlZ19DcmVhdGVEZWNvbXByZXNzKQorI2RlZmluZSBqcGVnX2Fib3J0IEZPWElUX1BSRUZJWChqcGVnX2Fib3J0KQorI2RlZmluZSBqcGVnX2Fib3J0X2RlY29tcHJlc3MgRk9YSVRfUFJFRklYKGpwZWdfYWJvcnRfZGVjb21wcmVzcykKKyNkZWZpbmUganBlZ19hbGxvY19odWZmX3RhYmxlIEZPWElUX1BSRUZJWChqcGVnX2FsbG9jX2h1ZmZfdGFibGUpCisjZGVmaW5lIGpwZWdfYWxsb2NfcXVhbnRfdGFibGUgRk9YSVRfUFJFRklYKGpwZWdfYWxsb2NfcXVhbnRfdGFibGUpCisjZGVmaW5lIGpwZWdfY2FsY19vdXRwdXRfZGltZW5zaW9ucyBGT1hJVF9QUkVGSVgoanBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zKQorI2RlZmluZSBqcGVnX2NvbnN1bWVfaW5wdXQgRk9YSVRfUFJFRklYKGpwZWdfY29uc3VtZV9pbnB1dCkKKyNkZWZpbmUganBlZ19kZXN0cm95IEZPWElUX1BSRUZJWChqcGVnX2Rlc3Ryb3kpCisjZGVmaW5lIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzIEZPWElUX1BSRUZJWChqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcykKKyNkZWZpbmUganBlZ19maWxsX2JpdF9idWZmZXIgRk9YSVRfUFJFRklYKGpwZWdfZmlsbF9iaXRfYnVmZmVyKQorI2RlZmluZSBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzIEZPWElUX1BSRUZJWChqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKQorI2RlZmluZSBqcGVnX2ZpbmlzaF9vdXRwdXQgRk9YSVRfUFJFRklYKGpwZWdfZmluaXNoX291dHB1dCkKKyNkZWZpbmUganBlZ19mcmVlX2xhcmdlIEZPWElUX1BSRUZJWChqcGVnX2ZyZWVfbGFyZ2UpCisjZGVmaW5lIGpwZWdfZnJlZV9zbWFsbCBGT1hJVF9QUkVGSVgoanBlZ19mcmVlX3NtYWxsKQorI2RlZmluZSBqcGVnX2dldF9sYXJnZSBGT1hJVF9QUkVGSVgoanBlZ19nZXRfbGFyZ2UpCisjZGVmaW5lIGpwZWdfZ2V0X3NtYWxsIEZPWElUX1BSRUZJWChqcGVnX2dldF9zbWFsbCkKKyNkZWZpbmUganBlZ19oYXNfbXVsdGlwbGVfc2NhbnMgRk9YSVRfUFJFRklYKGpwZWdfaGFzX211bHRpcGxlX3NjYW5zKQorI2RlZmluZSBqcGVnX2h1ZmZfZGVjb2RlIEZPWElUX1BSRUZJWChqcGVnX2h1ZmZfZGVjb2RlKQorI2RlZmluZSBqcGVnX2lkY3RfMXgxIEZPWElUX1BSRUZJWChqcGVnX2lkY3RfMXgxKQorI2RlZmluZSBqcGVnX2lkY3RfMngyIEZPWElUX1BSRUZJWChqcGVnX2lkY3RfMngyKQorI2RlZmluZSBqcGVnX2lkY3RfNHg0IEZPWElUX1BSRUZJWChqcGVnX2lkY3RfNHg0KQorI2RlZmluZSBqcGVnX2lkY3RfZmxvYXQgRk9YSVRfUFJFRklYKGpwZWdfaWRjdF9mbG9hdCkKKyNkZWZpbmUganBlZ19pZGN0X2lmYXN0IEZPWElUX1BSRUZJWChqcGVnX2lkY3RfaWZhc3QpCisjZGVmaW5lIGpwZWdfaWRjdF9pc2xvdyBGT1hJVF9QUkVGSVgoanBlZ19pZGN0X2lzbG93KQorI2RlZmluZSBqcGVnX2lucHV0X2NvbXBsZXRlIEZPWElUX1BSRUZJWChqcGVnX2lucHV0X2NvbXBsZXRlKQorI2RlZmluZSBqcGVnX21ha2VfZF9kZXJpdmVkX3RibCBGT1hJVF9QUkVGSVgoanBlZ19tYWtlX2RfZGVyaXZlZF90YmwpCisjZGVmaW5lIGpwZWdfbWVtX2F2YWlsYWJsZSBGT1hJVF9QUkVGSVgoanBlZ19tZW1fYXZhaWxhYmxlKQorI2RlZmluZSBqcGVnX21lbV9pbml0IEZPWElUX1BSRUZJWChqcGVnX21lbV9pbml0KQorI2RlZmluZSBqcGVnX21lbV90ZXJtIEZPWElUX1BSRUZJWChqcGVnX21lbV90ZXJtKQorI2RlZmluZSBqcGVnX25hdHVyYWxfb3JkZXIgRk9YSVRfUFJFRklYKGpwZWdfbmF0dXJhbF9vcmRlcikKKyNkZWZpbmUganBlZ19uZXdfY29sb3JtYXAgRk9YSVRfUFJFRklYKGpwZWdfbmV3X2NvbG9ybWFwKQorI2RlZmluZSBqcGVnX29wZW5fYmFja2luZ19zdG9yZSBGT1hJVF9QUkVGSVgoanBlZ19vcGVuX2JhY2tpbmdfc3RvcmUpCisjZGVmaW5lIGpwZWdfcmVhZF9jb2VmZmljaWVudHMgRk9YSVRfUFJFRklYKGpwZWdfcmVhZF9jb2VmZmljaWVudHMpCisjZGVmaW5lIGpwZWdfcmVhZF9oZWFkZXIgRk9YSVRfUFJFRklYKGpwZWdfcmVhZF9oZWFkZXIpCisjZGVmaW5lIGpwZWdfcmVhZF9yYXdfZGF0YSBGT1hJVF9QUkVGSVgoanBlZ19yZWFkX3Jhd19kYXRhKQorI2RlZmluZSBqcGVnX3JlYWRfc2NhbmxpbmVzIEZPWElUX1BSRUZJWChqcGVnX3JlYWRfc2NhbmxpbmVzKQorI2RlZmluZSBqcGVnX3Jlc3luY190b19yZXN0YXJ0IEZPWElUX1BSRUZJWChqcGVnX3Jlc3luY190b19yZXN0YXJ0KQorI2RlZmluZSBqcGVnX3NhdmVfbWFya2VycyBGT1hJVF9QUkVGSVgoanBlZ19zYXZlX21hcmtlcnMpCisjZGVmaW5lIGpwZWdfc2V0X21hcmtlcl9wcm9jZXNzb3IgRk9YSVRfUFJFRklYKGpwZWdfc2V0X21hcmtlcl9wcm9jZXNzb3IpCisjZGVmaW5lIGpwZWdfc3RhcnRfZGVjb21wcmVzcyBGT1hJVF9QUkVGSVgoanBlZ19zdGFydF9kZWNvbXByZXNzKQorI2RlZmluZSBqcGVnX3N0YXJ0X291dHB1dCBGT1hJVF9QUkVGSVgoanBlZ19zdGFydF9vdXRwdXQpCisjZGVmaW5lIGpwZWdfc3RkX2Vycm9yIEZPWElUX1BSRUZJWChqcGVnX3N0ZF9lcnJvcikKKyNkZWZpbmUganBlZ19zdGRfbWVzc2FnZV90YWJsZSBGT1hJVF9QUkVGSVgoanBlZ19zdGRfbWVzc2FnZV90YWJsZSkKKyNkZWZpbmUganBlZ19zdGRpb19zcmMgRk9YSVRfUFJFRklYKGpwZWdfc3RkaW9fc3JjKQorI2RlZmluZSBqcm91bmRfdXAgRk9YSVRfUFJFRklYKGpyb3VuZF91cCkKKyNkZWZpbmUganplcm9fZmFyIEZPWElUX1BSRUZJWChqemVyb19mYXIpCisKKyAvKgorICogRmlyc3Qgd2UgaW5jbHVkZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0IHJlY29yZCBob3cgdGhpcworICogaW5zdGFsbGF0aW9uIG9mIHRoZSBKUEVHIGxpYnJhcnkgaXMgc2V0IHVwLiAgamNvbmZpZy5oIGNhbiBiZQorICogZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgZm9yIG1hbnkgc3lzdGVtcy4gIGptb3JlY2ZnLmggY29udGFpbnMKKyAqIG1hbnVhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtb3N0IHBlb3BsZSBuZWVkIG5vdCB3b3JyeSBhYm91dC4KKyAqLworCisjaWZuZGVmIEpDT05GSUdfSU5DTFVERUQJLyogaW4gY2FzZSBqaW5jbHVkZS5oIGFscmVhZHkgZGlkICovCisjaW5jbHVkZSAiamNvbmZpZy5oIgkJLyogd2lkZWx5IHVzZWQgY29uZmlndXJhdGlvbiBvcHRpb25zICovCisjZW5kaWYKKyNpbmNsdWRlICJqbW9yZWNmZy5oIgkJLyogc2VsZG9tIGNoYW5nZWQgb3B0aW9ucyAqLworCisKKy8qIFZlcnNpb24gSUQgZm9yIHRoZSBKUEVHIGxpYnJhcnkuCisgKiBNaWdodCBiZSB1c2VmdWwgZm9yIHRlc3RzIGxpa2UgIiNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDYwIi4KKyAqLworCisjZGVmaW5lIEpQRUdfTElCX1ZFUlNJT04gIDYyCS8qIFZlcnNpb24gNmIgKi8KKworCisvKiBWYXJpb3VzIGNvbnN0YW50cyBkZXRlcm1pbmluZyB0aGUgc2l6ZXMgb2YgdGhpbmdzLgorICogQWxsIG9mIHRoZXNlIGFyZSBzcGVjaWZpZWQgYnkgdGhlIEpQRUcgc3RhbmRhcmQsIHNvIGRvbid0IGNoYW5nZSB0aGVtCisgKiBpZiB5b3Ugd2FudCB0byBiZSBjb21wYXRpYmxlLgorICovCisKKyNkZWZpbmUgRENUU0laRQkJICAgIDgJLyogVGhlIGJhc2ljIERDVCBibG9jayBpcyA4eDggc2FtcGxlcyAqLworI2RlZmluZSBEQ1RTSVpFMgkgICAgNjQJLyogRENUU0laRSBzcXVhcmVkOyAjIG9mIGVsZW1lbnRzIGluIGEgYmxvY2sgKi8KKyNkZWZpbmUgTlVNX1FVQU5UX1RCTFMgICAgICA0CS8qIFF1YW50aXphdGlvbiB0YWJsZXMgYXJlIG51bWJlcmVkIDAuLjMgKi8KKyNkZWZpbmUgTlVNX0hVRkZfVEJMUyAgICAgICA0CS8qIEh1ZmZtYW4gdGFibGVzIGFyZSBudW1iZXJlZCAwLi4zICovCisjZGVmaW5lIE5VTV9BUklUSF9UQkxTICAgICAgMTYJLyogQXJpdGgtY29kaW5nIHRhYmxlcyBhcmUgbnVtYmVyZWQgMC4uMTUgKi8KKyNkZWZpbmUgTUFYX0NPTVBTX0lOX1NDQU4gICA0CS8qIEpQRUcgbGltaXQgb24gIyBvZiBjb21wb25lbnRzIGluIG9uZSBzY2FuICovCisjZGVmaW5lIE1BWF9TQU1QX0ZBQ1RPUiAgICAgNAkvKiBKUEVHIGxpbWl0IG9uIHNhbXBsaW5nIGZhY3RvcnMgKi8KKy8qIFVuZm9ydHVuYXRlbHksIHNvbWUgYm96byBhdCBBZG9iZSBzYXcgbm8gcmVhc29uIHRvIGJlIGJvdW5kIGJ5IHRoZSBzdGFuZGFyZDsKKyAqIHRoZSBQb3N0U2NyaXB0IERDVCBmaWx0ZXIgY2FuIGVtaXQgZmlsZXMgd2l0aCBtYW55IG1vcmUgdGhhbiAxMCBibG9ja3MvTUNVLgorICogSWYgeW91IGhhcHBlbiB0byBydW4gYWNyb3NzIHN1Y2ggYSBmaWxlLCB5b3UgY2FuIHVwIERfTUFYX0JMT0NLU19JTl9NQ1UKKyAqIHRvIGhhbmRsZSBpdC4gIFdlIGV2ZW4gbGV0IHlvdSBkbyB0aGlzIGZyb20gdGhlIGpjb25maWcuaCBmaWxlLiAgSG93ZXZlciwKKyAqIHdlIHN0cm9uZ2x5IGRpc2NvdXJhZ2UgY2hhbmdpbmcgQ19NQVhfQkxPQ0tTX0lOX01DVTsganVzdCBiZWNhdXNlIEFkb2JlCisgKiBzb21ldGltZXMgZW1pdHMgbm9uY29tcGxpYW50IGZpbGVzIGRvZXNuJ3QgbWVhbiB5b3Ugc2hvdWxkIHRvby4KKyAqLworI2RlZmluZSBDX01BWF9CTE9DS1NfSU5fTUNVICAgMTAgLyogY29tcHJlc3NvcidzIGxpbWl0IG9uIGJsb2NrcyBwZXIgTUNVICovCisjaWZuZGVmIERfTUFYX0JMT0NLU19JTl9NQ1UKKyNkZWZpbmUgRF9NQVhfQkxPQ0tTX0lOX01DVSAgIDEwIC8qIGRlY29tcHJlc3NvcidzIGxpbWl0IG9uIGJsb2NrcyBwZXIgTUNVICovCisjZW5kaWYKKworCisvKiBEYXRhIHN0cnVjdHVyZXMgZm9yIGltYWdlcyAoYXJyYXlzIG9mIHNhbXBsZXMgYW5kIG9mIERDVCBjb2VmZmljaWVudHMpLgorICogT24gODB4ODYgbWFjaGluZXMsIHRoZSBpbWFnZSBhcnJheXMgYXJlIHRvbyBiaWcgZm9yIG5lYXIgcG9pbnRlcnMsCisgKiBidXQgdGhlIHBvaW50ZXIgYXJyYXlzIGNhbiBmaXQgaW4gbmVhciBtZW1vcnkuCisgKi8KKwordHlwZWRlZiBKU0FNUExFICAqSlNBTVBST1c7CS8qIHB0ciB0byBvbmUgaW1hZ2Ugcm93IG9mIHBpeGVsIHNhbXBsZXMuICovCit0eXBlZGVmIEpTQU1QUk9XICpKU0FNUEFSUkFZOwkvKiBwdHIgdG8gc29tZSByb3dzIChhIDItRCBzYW1wbGUgYXJyYXkpICovCit0eXBlZGVmIEpTQU1QQVJSQVkgKkpTQU1QSU1BR0U7CS8qIGEgMy1EIHNhbXBsZSBhcnJheTogdG9wIGluZGV4IGlzIGNvbG9yICovCisKK3R5cGVkZWYgSkNPRUYgSkJMT0NLW0RDVFNJWkUyXTsJLyogb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cyAqLwordHlwZWRlZiBKQkxPQ0sgICpKQkxPQ0tST1c7CS8qIHBvaW50ZXIgdG8gb25lIHJvdyBvZiBjb2VmZmljaWVudCBibG9ja3MgKi8KK3R5cGVkZWYgSkJMT0NLUk9XICpKQkxPQ0tBUlJBWTsJCS8qIGEgMi1EIGFycmF5IG9mIGNvZWZmaWNpZW50IGJsb2NrcyAqLwordHlwZWRlZiBKQkxPQ0tBUlJBWSAqSkJMT0NLSU1BR0U7CS8qIGEgMy1EIGFycmF5IG9mIGNvZWZmaWNpZW50IGJsb2NrcyAqLworCit0eXBlZGVmIEpDT0VGICAqSkNPRUZQVFI7CS8qIHVzZWZ1bCBpbiBhIGNvdXBsZSBvZiBwbGFjZXMgKi8KKworCisvKiBUeXBlcyBmb3IgSlBFRyBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGFuZCB3b3JraW5nIHRhYmxlcy4gKi8KKworCisvKiBEQ1QgY29lZmZpY2llbnQgcXVhbnRpemF0aW9uIHRhYmxlcy4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAvKiBUaGlzIGFycmF5IGdpdmVzIHRoZSBjb2VmZmljaWVudCBxdWFudGl6ZXJzIGluIG5hdHVyYWwgYXJyYXkgb3JkZXIKKyAgICogKG5vdCB0aGUgemlnemFnIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIHN0b3JlZCBpbiBhIEpQRUcgRFFUIG1hcmtlcikuCisgICAqIENBVVRJT046IElKRyB2ZXJzaW9ucyBwcmlvciB0byB2NmEga2VwdCB0aGlzIGFycmF5IGluIHppZ3phZyBvcmRlci4KKyAgICovCisgIFVJTlQxNiBxdWFudHZhbFtEQ1RTSVpFMl07CS8qIHF1YW50aXphdGlvbiBzdGVwIGZvciBlYWNoIGNvZWZmaWNpZW50ICovCisgIC8qIFRoaXMgZmllbGQgaXMgdXNlZCBvbmx5IGR1cmluZyBjb21wcmVzc2lvbi4gIEl0J3MgaW5pdGlhbGl6ZWQgRkFMU0Ugd2hlbgorICAgKiB0aGUgdGFibGUgaXMgY3JlYXRlZCwgYW5kIHNldCBUUlVFIHdoZW4gaXQncyBiZWVuIG91dHB1dCB0byB0aGUgZmlsZS4KKyAgICogWW91IGNvdWxkIHN1cHByZXNzIG91dHB1dCBvZiBhIHRhYmxlIGJ5IHNldHRpbmcgdGhpcyB0byBUUlVFLgorICAgKiAoU2VlIGpwZWdfc3VwcHJlc3NfdGFibGVzIGZvciBhbiBleGFtcGxlLikKKyAgICovCisgIGJvb2xlYW4gc2VudF90YWJsZTsJCS8qIFRSVUUgd2hlbiB0YWJsZSBoYXMgYmVlbiBvdXRwdXQgKi8KK30gSlFVQU5UX1RCTDsKKworCisvKiBIdWZmbWFuIGNvZGluZyB0YWJsZXMuICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgLyogVGhlc2UgdHdvIGZpZWxkcyBkaXJlY3RseSByZXByZXNlbnQgdGhlIGNvbnRlbnRzIG9mIGEgSlBFRyBESFQgbWFya2VyICovCisgIFVJTlQ4IGJpdHNbMTddOwkJLyogYml0c1trXSA9ICMgb2Ygc3ltYm9scyB3aXRoIGNvZGVzIG9mICovCisJCQkJLyogbGVuZ3RoIGsgYml0czsgYml0c1swXSBpcyB1bnVzZWQgKi8KKyAgVUlOVDggaHVmZnZhbFsyNTZdOwkJLyogVGhlIHN5bWJvbHMsIGluIG9yZGVyIG9mIGluY3IgY29kZSBsZW5ndGggKi8KKyAgLyogVGhpcyBmaWVsZCBpcyB1c2VkIG9ubHkgZHVyaW5nIGNvbXByZXNzaW9uLiAgSXQncyBpbml0aWFsaXplZCBGQUxTRSB3aGVuCisgICAqIHRoZSB0YWJsZSBpcyBjcmVhdGVkLCBhbmQgc2V0IFRSVUUgd2hlbiBpdCdzIGJlZW4gb3V0cHV0IHRvIHRoZSBmaWxlLgorICAgKiBZb3UgY291bGQgc3VwcHJlc3Mgb3V0cHV0IG9mIGEgdGFibGUgYnkgc2V0dGluZyB0aGlzIHRvIFRSVUUuCisgICAqIChTZWUganBlZ19zdXBwcmVzc190YWJsZXMgZm9yIGFuIGV4YW1wbGUuKQorICAgKi8KKyAgYm9vbGVhbiBzZW50X3RhYmxlOwkJLyogVFJVRSB3aGVuIHRhYmxlIGhhcyBiZWVuIG91dHB1dCAqLworfSBKSFVGRl9UQkw7CisKKworLyogQmFzaWMgaW5mbyBhYm91dCBvbmUgY29tcG9uZW50IChjb2xvciBjaGFubmVsKS4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAvKiBUaGVzZSB2YWx1ZXMgYXJlIGZpeGVkIG92ZXIgdGhlIHdob2xlIGltYWdlLiAqLworICAvKiBGb3IgY29tcHJlc3Npb24sIHRoZXkgbXVzdCBiZSBzdXBwbGllZCBieSBwYXJhbWV0ZXIgc2V0dXA7ICovCisgIC8qIGZvciBkZWNvbXByZXNzaW9uLCB0aGV5IGFyZSByZWFkIGZyb20gdGhlIFNPRiBtYXJrZXIuICovCisgIGludCBjb21wb25lbnRfaWQ7CQkvKiBpZGVudGlmaWVyIGZvciB0aGlzIGNvbXBvbmVudCAoMC4uMjU1KSAqLworICBpbnQgY29tcG9uZW50X2luZGV4OwkJLyogaXRzIGluZGV4IGluIFNPRiBvciBjaW5mby0+Y29tcF9pbmZvW10gKi8KKyAgaW50IGhfc2FtcF9mYWN0b3I7CQkvKiBob3Jpem9udGFsIHNhbXBsaW5nIGZhY3RvciAoMS4uNCkgKi8KKyAgaW50IHZfc2FtcF9mYWN0b3I7CQkvKiB2ZXJ0aWNhbCBzYW1wbGluZyBmYWN0b3IgKDEuLjQpICovCisgIGludCBxdWFudF90Ymxfbm87CQkvKiBxdWFudGl6YXRpb24gdGFibGUgc2VsZWN0b3IgKDAuLjMpICovCisgIC8qIFRoZXNlIHZhbHVlcyBtYXkgdmFyeSBiZXR3ZWVuIHNjYW5zLiAqLworICAvKiBGb3IgY29tcHJlc3Npb24sIHRoZXkgbXVzdCBiZSBzdXBwbGllZCBieSBwYXJhbWV0ZXIgc2V0dXA7ICovCisgIC8qIGZvciBkZWNvbXByZXNzaW9uLCB0aGV5IGFyZSByZWFkIGZyb20gdGhlIFNPUyBtYXJrZXIuICovCisgIC8qIFRoZSBkZWNvbXByZXNzb3Igb3V0cHV0IHNpZGUgbWF5IG5vdCB1c2UgdGhlc2UgdmFyaWFibGVzLiAqLworICBpbnQgZGNfdGJsX25vOwkJLyogREMgZW50cm9weSB0YWJsZSBzZWxlY3RvciAoMC4uMykgKi8KKyAgaW50IGFjX3RibF9ubzsJCS8qIEFDIGVudHJvcHkgdGFibGUgc2VsZWN0b3IgKDAuLjMpICovCisgIAorICAvKiBSZW1haW5pbmcgZmllbGRzIHNob3VsZCBiZSB0cmVhdGVkIGFzIHByaXZhdGUgYnkgYXBwbGljYXRpb25zLiAqLworICAKKyAgLyogVGhlc2UgdmFsdWVzIGFyZSBjb21wdXRlZCBkdXJpbmcgY29tcHJlc3Npb24gb3IgZGVjb21wcmVzc2lvbiBzdGFydHVwOiAqLworICAvKiBDb21wb25lbnQncyBzaXplIGluIERDVCBibG9ja3MuCisgICAqIEFueSBkdW1teSBibG9ja3MgYWRkZWQgdG8gY29tcGxldGUgYW4gTUNVIGFyZSBub3QgY291bnRlZDsgdGhlcmVmb3JlCisgICAqIHRoZXNlIHZhbHVlcyBkbyBub3QgZGVwZW5kIG9uIHdoZXRoZXIgYSBzY2FuIGlzIGludGVybGVhdmVkIG9yIG5vdC4KKyAgICovCisgIEpESU1FTlNJT04gd2lkdGhfaW5fYmxvY2tzOworICBKRElNRU5TSU9OIGhlaWdodF9pbl9ibG9ja3M7CisgIC8qIFNpemUgb2YgYSBEQ1QgYmxvY2sgaW4gc2FtcGxlcy4gIEFsd2F5cyBEQ1RTSVpFIGZvciBjb21wcmVzc2lvbi4KKyAgICogRm9yIGRlY29tcHJlc3Npb24gdGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGZyb20gb25lIERDVCBibG9jaywKKyAgICogcmVmbGVjdGluZyBhbnkgc2NhbGluZyB3ZSBjaG9vc2UgdG8gYXBwbHkgZHVyaW5nIHRoZSBJRENUIHN0ZXAuCisgICAqIFZhbHVlcyBvZiAxLDIsNCw4IGFyZSBsaWtlbHkgdG8gYmUgc3VwcG9ydGVkLiAgTm90ZSB0aGF0IGRpZmZlcmVudAorICAgKiBjb21wb25lbnRzIG1heSByZWNlaXZlIGRpZmZlcmVudCBJRENUIHNjYWxpbmdzLgorICAgKi8KKyAgaW50IERDVF9zY2FsZWRfc2l6ZTsKKyAgLyogVGhlIGRvd25zYW1wbGVkIGRpbWVuc2lvbnMgYXJlIHRoZSBjb21wb25lbnQncyBhY3R1YWwsIHVucGFkZGVkIG51bWJlcgorICAgKiBvZiBzYW1wbGVzIGF0IHRoZSBtYWluIGJ1ZmZlciAocHJlcHJvY2Vzc2luZy9jb21wcmVzc2lvbiBpbnRlcmZhY2UpLCB0aHVzCisgICAqIGRvd25zYW1wbGVkX3dpZHRoID0gY2VpbChpbWFnZV93aWR0aCAqIEhpL0htYXgpCisgICAqIGFuZCBzaW1pbGFybHkgZm9yIGhlaWdodC4gIEZvciBkZWNvbXByZXNzaW9uLCBJRENUIHNjYWxpbmcgaXMgaW5jbHVkZWQsIHNvCisgICAqIGRvd25zYW1wbGVkX3dpZHRoID0gY2VpbChpbWFnZV93aWR0aCAqIEhpL0htYXggKiBEQ1Rfc2NhbGVkX3NpemUvRENUU0laRSkKKyAgICovCisgIEpESU1FTlNJT04gZG93bnNhbXBsZWRfd2lkdGg7CSAvKiBhY3R1YWwgd2lkdGggaW4gc2FtcGxlcyAqLworICBKRElNRU5TSU9OIGRvd25zYW1wbGVkX2hlaWdodDsgLyogYWN0dWFsIGhlaWdodCBpbiBzYW1wbGVzICovCisgIC8qIFRoaXMgZmxhZyBpcyB1c2VkIG9ubHkgZm9yIGRlY29tcHJlc3Npb24uICBJbiBjYXNlcyB3aGVyZSBzb21lIG9mIHRoZQorICAgKiBjb21wb25lbnRzIHdpbGwgYmUgaWdub3JlZCAoZWcgZ3JheXNjYWxlIG91dHB1dCBmcm9tIFlDYkNyIGltYWdlKSwKKyAgICogd2UgY2FuIHNraXAgbW9zdCBjb21wdXRhdGlvbnMgZm9yIHRoZSB1bnVzZWQgY29tcG9uZW50cy4KKyAgICovCisgIGJvb2xlYW4gY29tcG9uZW50X25lZWRlZDsJLyogZG8gd2UgbmVlZCB0aGUgdmFsdWUgb2YgdGhpcyBjb21wb25lbnQ/ICovCisKKyAgLyogVGhlc2UgdmFsdWVzIGFyZSBjb21wdXRlZCBiZWZvcmUgc3RhcnRpbmcgYSBzY2FuIG9mIHRoZSBjb21wb25lbnQuICovCisgIC8qIFRoZSBkZWNvbXByZXNzb3Igb3V0cHV0IHNpZGUgbWF5IG5vdCB1c2UgdGhlc2UgdmFyaWFibGVzLiAqLworICBpbnQgTUNVX3dpZHRoOwkJLyogbnVtYmVyIG9mIGJsb2NrcyBwZXIgTUNVLCBob3Jpem9udGFsbHkgKi8KKyAgaW50IE1DVV9oZWlnaHQ7CQkvKiBudW1iZXIgb2YgYmxvY2tzIHBlciBNQ1UsIHZlcnRpY2FsbHkgKi8KKyAgaW50IE1DVV9ibG9ja3M7CQkvKiBNQ1Vfd2lkdGggKiBNQ1VfaGVpZ2h0ICovCisgIGludCBNQ1Vfc2FtcGxlX3dpZHRoOwkJLyogTUNVIHdpZHRoIGluIHNhbXBsZXMsIE1DVV93aWR0aCpEQ1Rfc2NhbGVkX3NpemUgKi8KKyAgaW50IGxhc3RfY29sX3dpZHRoOwkJLyogIyBvZiBub24tZHVtbXkgYmxvY2tzIGFjcm9zcyBpbiBsYXN0IE1DVSAqLworICBpbnQgbGFzdF9yb3dfaGVpZ2h0OwkJLyogIyBvZiBub24tZHVtbXkgYmxvY2tzIGRvd24gaW4gbGFzdCBNQ1UgKi8KKworICAvKiBTYXZlZCBxdWFudGl6YXRpb24gdGFibGUgZm9yIGNvbXBvbmVudDsgTlVMTCBpZiBub25lIHlldCBzYXZlZC4KKyAgICogU2VlIGpkaW5wdXQuYyBjb21tZW50cyBhYm91dCB0aGUgbmVlZCBmb3IgdGhpcyBpbmZvcm1hdGlvbi4KKyAgICogVGhpcyBmaWVsZCBpcyBjdXJyZW50bHkgdXNlZCBvbmx5IGZvciBkZWNvbXByZXNzaW9uLgorICAgKi8KKyAgSlFVQU5UX1RCTCAqIHF1YW50X3RhYmxlOworCisgIC8qIFByaXZhdGUgcGVyLWNvbXBvbmVudCBzdG9yYWdlIGZvciBEQ1Qgb3IgSURDVCBzdWJzeXN0ZW0uICovCisgIHZvaWQgKiBkY3RfdGFibGU7Cit9IGpwZWdfY29tcG9uZW50X2luZm87CisKKworLyogVGhlIHNjcmlwdCBmb3IgZW5jb2RpbmcgYSBtdWx0aXBsZS1zY2FuIGZpbGUgaXMgYW4gYXJyYXkgb2YgdGhlc2U6ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50IGNvbXBzX2luX3NjYW47CQkvKiBudW1iZXIgb2YgY29tcG9uZW50cyBlbmNvZGVkIGluIHRoaXMgc2NhbiAqLworICBpbnQgY29tcG9uZW50X2luZGV4W01BWF9DT01QU19JTl9TQ0FOXTsgLyogdGhlaXIgU09GL2NvbXBfaW5mb1tdIGluZGV4ZXMgKi8KKyAgaW50IFNzLCBTZTsJCQkvKiBwcm9ncmVzc2l2ZSBKUEVHIHNwZWN0cmFsIHNlbGVjdGlvbiBwYXJtcyAqLworICBpbnQgQWgsIEFsOwkJCS8qIHByb2dyZXNzaXZlIEpQRUcgc3VjY2Vzc2l2ZSBhcHByb3guIHBhcm1zICovCit9IGpwZWdfc2Nhbl9pbmZvOworCisvKiBUaGUgZGVjb21wcmVzc29yIGNhbiBzYXZlIEFQUG4gYW5kIENPTSBtYXJrZXJzIGluIGEgbGlzdCBvZiB0aGVzZTogKi8KKwordHlwZWRlZiBzdHJ1Y3QganBlZ19tYXJrZXJfc3RydWN0ICAqIGpwZWdfc2F2ZWRfbWFya2VyX3B0cjsKKworc3RydWN0IGpwZWdfbWFya2VyX3N0cnVjdCB7CisgIGpwZWdfc2F2ZWRfbWFya2VyX3B0ciBuZXh0OwkvKiBuZXh0IGluIGxpc3QsIG9yIE5VTEwgKi8KKyAgVUlOVDggbWFya2VyOwkJCS8qIG1hcmtlciBjb2RlOiBKUEVHX0NPTSwgb3IgSlBFR19BUFAwK24gKi8KKyAgdW5zaWduZWQgaW50IG9yaWdpbmFsX2xlbmd0aDsJLyogIyBieXRlcyBvZiBkYXRhIGluIHRoZSBmaWxlICovCisgIHVuc2lnbmVkIGludCBkYXRhX2xlbmd0aDsJLyogIyBieXRlcyBvZiBkYXRhIHNhdmVkIGF0IGRhdGFbXSAqLworICBKT0NURVQgICogZGF0YTsJCS8qIHRoZSBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgbWFya2VyICovCisgIC8qIHRoZSBtYXJrZXIgbGVuZ3RoIHdvcmQgaXMgbm90IGNvdW50ZWQgaW4gZGF0YV9sZW5ndGggb3Igb3JpZ2luYWxfbGVuZ3RoICovCit9OworCisvKiBLbm93biBjb2xvciBzcGFjZXMuICovCisKK3R5cGVkZWYgZW51bSB7CisJSkNTX1VOS05PV04sCQkvKiBlcnJvci91bnNwZWNpZmllZCAqLworCUpDU19HUkFZU0NBTEUsCQkvKiBtb25vY2hyb21lICovCisJSkNTX1JHQiwJCS8qIHJlZC9ncmVlbi9ibHVlICovCisJSkNTX1lDYkNyLAkJLyogWS9DYi9DciAoYWxzbyBrbm93biBhcyBZVVYpICovCisJSkNTX0NNWUssCQkvKiBDL00vWS9LICovCisJSkNTX1lDQ0sJCS8qIFkvQ2IvQ3IvSyAqLworfSBKX0NPTE9SX1NQQUNFOworCisvKiBEQ1QvSURDVCBhbGdvcml0aG0gb3B0aW9ucy4gKi8KKwordHlwZWRlZiBlbnVtIHsKKwlKRENUX0lTTE9XLAkJLyogc2xvdyBidXQgYWNjdXJhdGUgaW50ZWdlciBhbGdvcml0aG0gKi8KKwlKRENUX0lGQVNULAkJLyogZmFzdGVyLCBsZXNzIGFjY3VyYXRlIGludGVnZXIgbWV0aG9kICovCisJSkRDVF9GTE9BVAkJLyogZmxvYXRpbmctcG9pbnQ6IGFjY3VyYXRlLCBmYXN0IG9uIGZhc3QgSFcgKi8KK30gSl9EQ1RfTUVUSE9EOworCisjaWZuZGVmIEpEQ1RfREVGQVVMVAkJLyogbWF5IGJlIG92ZXJyaWRkZW4gaW4gamNvbmZpZy5oICovCisjZGVmaW5lIEpEQ1RfREVGQVVMVCAgSkRDVF9JU0xPVworI2VuZGlmCisjaWZuZGVmIEpEQ1RfRkFTVEVTVAkJLyogbWF5IGJlIG92ZXJyaWRkZW4gaW4gamNvbmZpZy5oICovCisjZGVmaW5lIEpEQ1RfRkFTVEVTVCAgSkRDVF9JRkFTVAorI2VuZGlmCisKKy8qIERpdGhlcmluZyBvcHRpb25zIGZvciBkZWNvbXByZXNzaW9uLiAqLworCit0eXBlZGVmIGVudW0geworCUpESVRIRVJfTk9ORSwJCS8qIG5vIGRpdGhlcmluZyAqLworCUpESVRIRVJfT1JERVJFRCwJLyogc2ltcGxlIG9yZGVyZWQgZGl0aGVyICovCisJSkRJVEhFUl9GUwkJLyogRmxveWQtU3RlaW5iZXJnIGVycm9yIGRpZmZ1c2lvbiBkaXRoZXIgKi8KK30gSl9ESVRIRVJfTU9ERTsKKworCisvKiBDb21tb24gZmllbGRzIGJldHdlZW4gSlBFRyBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBtYXN0ZXIgc3RydWN0cy4gKi8KKworI2RlZmluZSBqcGVnX2NvbW1vbl9maWVsZHMgXAorICBzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgKiBlcnI7CS8qIEVycm9yIGhhbmRsZXIgbW9kdWxlICovXAorICBzdHJ1Y3QganBlZ19tZW1vcnlfbWdyICogbWVtOwkvKiBNZW1vcnkgbWFuYWdlciBtb2R1bGUgKi9cCisgIHN0cnVjdCBqcGVnX3Byb2dyZXNzX21nciAqIHByb2dyZXNzOyAvKiBQcm9ncmVzcyBtb25pdG9yLCBvciBOVUxMIGlmIG5vbmUgKi9cCisgIHZvaWQgKiBjbGllbnRfZGF0YTsJCS8qIEF2YWlsYWJsZSBmb3IgdXNlIGJ5IGFwcGxpY2F0aW9uICovXAorICBib29sZWFuIGlzX2RlY29tcHJlc3NvcjsJLyogU28gY29tbW9uIGNvZGUgY2FuIHRlbGwgd2hpY2ggaXMgd2hpY2ggKi9cCisgIGludCBnbG9iYWxfc3RhdGUJCS8qIEZvciBjaGVja2luZyBjYWxsIHNlcXVlbmNlIHZhbGlkaXR5ICovCisKKy8qIFJvdXRpbmVzIHRoYXQgYXJlIHRvIGJlIHVzZWQgYnkgYm90aCBoYWx2ZXMgb2YgdGhlIGxpYnJhcnkgYXJlIGRlY2xhcmVkCisgKiB0byByZWNlaXZlIGEgcG9pbnRlciB0byB0aGlzIHN0cnVjdHVyZS4gIFRoZXJlIGFyZSBubyBhY3R1YWwgaW5zdGFuY2VzIG9mCisgKiBqcGVnX2NvbW1vbl9zdHJ1Y3QsIG9ubHkgb2YganBlZ19jb21wcmVzc19zdHJ1Y3QgYW5kIGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QuCisgKi8KK3N0cnVjdCBqcGVnX2NvbW1vbl9zdHJ1Y3QgeworICBqcGVnX2NvbW1vbl9maWVsZHM7CQkvKiBGaWVsZHMgY29tbW9uIHRvIGJvdGggbWFzdGVyIHN0cnVjdCB0eXBlcyAqLworICAvKiBBZGRpdGlvbmFsIGZpZWxkcyBmb2xsb3cgaW4gYW4gYWN0dWFsIGpwZWdfY29tcHJlc3Nfc3RydWN0IG9yCisgICAqIGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QuICBBbGwgdGhyZWUgc3RydWN0cyBtdXN0IGFncmVlIG9uIHRoZXNlCisgICAqIGluaXRpYWwgZmllbGRzISAgKFRoaXMgd291bGQgYmUgYSBsb3QgY2xlYW5lciBpbiBDKysuKQorICAgKi8KK307CisKK3R5cGVkZWYgc3RydWN0IGpwZWdfY29tbW9uX3N0cnVjdCAqIGpfY29tbW9uX3B0cjsKK3R5cGVkZWYgc3RydWN0IGpwZWdfY29tcHJlc3Nfc3RydWN0ICogal9jb21wcmVzc19wdHI7Cit0eXBlZGVmIHN0cnVjdCBqcGVnX2RlY29tcHJlc3Nfc3RydWN0ICogal9kZWNvbXByZXNzX3B0cjsKKworCisvKiBNYXN0ZXIgcmVjb3JkIGZvciBhIGNvbXByZXNzaW9uIGluc3RhbmNlICovCisKK3N0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCB7CisgIGpwZWdfY29tbW9uX2ZpZWxkczsJCS8qIEZpZWxkcyBzaGFyZWQgd2l0aCBqcGVnX2RlY29tcHJlc3Nfc3RydWN0ICovCisKKyAgLyogRGVzdGluYXRpb24gZm9yIGNvbXByZXNzZWQgZGF0YSAqLworICBzdHJ1Y3QganBlZ19kZXN0aW5hdGlvbl9tZ3IgKiBkZXN0OworCisgIC8qIERlc2NyaXB0aW9uIG9mIHNvdXJjZSBpbWFnZSAtLS0gdGhlc2UgZmllbGRzIG11c3QgYmUgZmlsbGVkIGluIGJ5CisgICAqIG91dGVyIGFwcGxpY2F0aW9uIGJlZm9yZSBzdGFydGluZyBjb21wcmVzc2lvbi4gIGluX2NvbG9yX3NwYWNlIG11c3QKKyAgICogYmUgY29ycmVjdCBiZWZvcmUgeW91IGNhbiBldmVuIGNhbGwganBlZ19zZXRfZGVmYXVsdHMoKS4KKyAgICovCisKKyAgSkRJTUVOU0lPTiBpbWFnZV93aWR0aDsJLyogaW5wdXQgaW1hZ2Ugd2lkdGggKi8KKyAgSkRJTUVOU0lPTiBpbWFnZV9oZWlnaHQ7CS8qIGlucHV0IGltYWdlIGhlaWdodCAqLworICBpbnQgaW5wdXRfY29tcG9uZW50czsJCS8qICMgb2YgY29sb3IgY29tcG9uZW50cyBpbiBpbnB1dCBpbWFnZSAqLworICBKX0NPTE9SX1NQQUNFIGluX2NvbG9yX3NwYWNlOwkvKiBjb2xvcnNwYWNlIG9mIGlucHV0IGltYWdlICovCisKKyAgZG91YmxlIGlucHV0X2dhbW1hOwkJLyogaW1hZ2UgZ2FtbWEgb2YgaW5wdXQgaW1hZ2UgKi8KKworICAvKiBDb21wcmVzc2lvbiBwYXJhbWV0ZXJzIC0tLSB0aGVzZSBmaWVsZHMgbXVzdCBiZSBzZXQgYmVmb3JlIGNhbGxpbmcKKyAgICoganBlZ19zdGFydF9jb21wcmVzcygpLiAgV2UgcmVjb21tZW5kIGNhbGxpbmcganBlZ19zZXRfZGVmYXVsdHMoKSB0bworICAgKiBpbml0aWFsaXplIGV2ZXJ5dGhpbmcgdG8gcmVhc29uYWJsZSBkZWZhdWx0cywgdGhlbiBjaGFuZ2luZyBhbnl0aGluZworICAgKiB0aGUgYXBwbGljYXRpb24gc3BlY2lmaWNhbGx5IHdhbnRzIHRvIGNoYW5nZS4gIFRoYXQgd2F5IHlvdSB3b24ndCBnZXQKKyAgICogYnVybnQgd2hlbiBuZXcgcGFyYW1ldGVycyBhcmUgYWRkZWQuICBBbHNvIG5vdGUgdGhhdCB0aGVyZSBhcmUgc2V2ZXJhbAorICAgKiBoZWxwZXIgcm91dGluZXMgdG8gc2ltcGxpZnkgY2hhbmdpbmcgcGFyYW1ldGVycy4KKyAgICovCisKKyAgaW50IGRhdGFfcHJlY2lzaW9uOwkJLyogYml0cyBvZiBwcmVjaXNpb24gaW4gaW1hZ2UgZGF0YSAqLworCisgIGludCBudW1fY29tcG9uZW50czsJCS8qICMgb2YgY29sb3IgY29tcG9uZW50cyBpbiBKUEVHIGltYWdlICovCisgIEpfQ09MT1JfU1BBQ0UganBlZ19jb2xvcl9zcGFjZTsgLyogY29sb3JzcGFjZSBvZiBKUEVHIGltYWdlICovCisKKyAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBfaW5mbzsKKyAgLyogY29tcF9pbmZvW2ldIGRlc2NyaWJlcyBjb21wb25lbnQgdGhhdCBhcHBlYXJzIGkndGggaW4gU09GICovCisgIAorICBKUVVBTlRfVEJMICogcXVhbnRfdGJsX3B0cnNbTlVNX1FVQU5UX1RCTFNdOworICAvKiBwdHJzIHRvIGNvZWZmaWNpZW50IHF1YW50aXphdGlvbiB0YWJsZXMsIG9yIE5VTEwgaWYgbm90IGRlZmluZWQgKi8KKyAgCisgIEpIVUZGX1RCTCAqIGRjX2h1ZmZfdGJsX3B0cnNbTlVNX0hVRkZfVEJMU107CisgIEpIVUZGX1RCTCAqIGFjX2h1ZmZfdGJsX3B0cnNbTlVNX0hVRkZfVEJMU107CisgIC8qIHB0cnMgdG8gSHVmZm1hbiBjb2RpbmcgdGFibGVzLCBvciBOVUxMIGlmIG5vdCBkZWZpbmVkICovCisgIAorICBVSU5UOCBhcml0aF9kY19MW05VTV9BUklUSF9UQkxTXTsgLyogTCB2YWx1ZXMgZm9yIERDIGFyaXRoLWNvZGluZyB0YWJsZXMgKi8KKyAgVUlOVDggYXJpdGhfZGNfVVtOVU1fQVJJVEhfVEJMU107IC8qIFUgdmFsdWVzIGZvciBEQyBhcml0aC1jb2RpbmcgdGFibGVzICovCisgIFVJTlQ4IGFyaXRoX2FjX0tbTlVNX0FSSVRIX1RCTFNdOyAvKiBLeCB2YWx1ZXMgZm9yIEFDIGFyaXRoLWNvZGluZyB0YWJsZXMgKi8KKworICBpbnQgbnVtX3NjYW5zOwkJLyogIyBvZiBlbnRyaWVzIGluIHNjYW5faW5mbyBhcnJheSAqLworICBjb25zdCBqcGVnX3NjYW5faW5mbyAqIHNjYW5faW5mbzsgLyogc2NyaXB0IGZvciBtdWx0aS1zY2FuIGZpbGUsIG9yIE5VTEwgKi8KKyAgLyogVGhlIGRlZmF1bHQgdmFsdWUgb2Ygc2Nhbl9pbmZvIGlzIE5VTEwsIHdoaWNoIGNhdXNlcyBhIHNpbmdsZS1zY2FuCisgICAqIHNlcXVlbnRpYWwgSlBFRyBmaWxlIHRvIGJlIGVtaXR0ZWQuICBUbyBjcmVhdGUgYSBtdWx0aS1zY2FuIGZpbGUsCisgICAqIHNldCBudW1fc2NhbnMgYW5kIHNjYW5faW5mbyB0byBwb2ludCB0byBhbiBhcnJheSBvZiBzY2FuIGRlZmluaXRpb25zLgorICAgKi8KKworICBib29sZWFuIHJhd19kYXRhX2luOwkJLyogVFJVRT1jYWxsZXIgc3VwcGxpZXMgZG93bnNhbXBsZWQgZGF0YSAqLworICBib29sZWFuIGFyaXRoX2NvZGU7CQkvKiBUUlVFPWFyaXRobWV0aWMgY29kaW5nLCBGQUxTRT1IdWZmbWFuICovCisgIGJvb2xlYW4gb3B0aW1pemVfY29kaW5nOwkvKiBUUlVFPW9wdGltaXplIGVudHJvcHkgZW5jb2RpbmcgcGFybXMgKi8KKyAgYm9vbGVhbiBDQ0lSNjAxX3NhbXBsaW5nOwkvKiBUUlVFPWZpcnN0IHNhbXBsZXMgYXJlIGNvc2l0ZWQgKi8KKyAgaW50IHNtb290aGluZ19mYWN0b3I7CQkvKiAxLi4xMDAsIG9yIDAgZm9yIG5vIGlucHV0IHNtb290aGluZyAqLworICBKX0RDVF9NRVRIT0QgZGN0X21ldGhvZDsJLyogRENUIGFsZ29yaXRobSBzZWxlY3RvciAqLworCisgIC8qIFRoZSByZXN0YXJ0IGludGVydmFsIGNhbiBiZSBzcGVjaWZpZWQgaW4gYWJzb2x1dGUgTUNVcyBieSBzZXR0aW5nCisgICAqIHJlc3RhcnRfaW50ZXJ2YWwsIG9yIGluIE1DVSByb3dzIGJ5IHNldHRpbmcgcmVzdGFydF9pbl9yb3dzCisgICAqIChpbiB3aGljaCBjYXNlIHRoZSBjb3JyZWN0IHJlc3RhcnRfaW50ZXJ2YWwgd2lsbCBiZSBmaWd1cmVkCisgICAqIGZvciBlYWNoIHNjYW4pLgorICAgKi8KKyAgdW5zaWduZWQgaW50IHJlc3RhcnRfaW50ZXJ2YWw7IC8qIE1DVXMgcGVyIHJlc3RhcnQsIG9yIDAgZm9yIG5vIHJlc3RhcnQgKi8KKyAgaW50IHJlc3RhcnRfaW5fcm93czsJCS8qIGlmID4gMCwgTUNVIHJvd3MgcGVyIHJlc3RhcnQgaW50ZXJ2YWwgKi8KKworICAvKiBQYXJhbWV0ZXJzIGNvbnRyb2xsaW5nIGVtaXNzaW9uIG9mIHNwZWNpYWwgbWFya2Vycy4gKi8KKworICBib29sZWFuIHdyaXRlX0pGSUZfaGVhZGVyOwkvKiBzaG91bGQgYSBKRklGIG1hcmtlciBiZSB3cml0dGVuPyAqLworICBVSU5UOCBKRklGX21ham9yX3ZlcnNpb247CS8qIFdoYXQgdG8gd3JpdGUgZm9yIHRoZSBKRklGIHZlcnNpb24gbnVtYmVyICovCisgIFVJTlQ4IEpGSUZfbWlub3JfdmVyc2lvbjsKKyAgLyogVGhlc2UgdGhyZWUgdmFsdWVzIGFyZSBub3QgdXNlZCBieSB0aGUgSlBFRyBjb2RlLCBtZXJlbHkgY29waWVkICovCisgIC8qIGludG8gdGhlIEpGSUYgQVBQMCBtYXJrZXIuICBkZW5zaXR5X3VuaXQgY2FuIGJlIDAgZm9yIHVua25vd24sICovCisgIC8qIDEgZm9yIGRvdHMvaW5jaCwgb3IgMiBmb3IgZG90cy9jbS4gIE5vdGUgdGhhdCB0aGUgcGl4ZWwgYXNwZWN0ICovCisgIC8qIHJhdGlvIGlzIGRlZmluZWQgYnkgWF9kZW5zaXR5L1lfZGVuc2l0eSBldmVuIHdoZW4gZGVuc2l0eV91bml0PTAuICovCisgIFVJTlQ4IGRlbnNpdHlfdW5pdDsJCS8qIEpGSUYgY29kZSBmb3IgcGl4ZWwgc2l6ZSB1bml0cyAqLworICBVSU5UMTYgWF9kZW5zaXR5OwkJLyogSG9yaXpvbnRhbCBwaXhlbCBkZW5zaXR5ICovCisgIFVJTlQxNiBZX2RlbnNpdHk7CQkvKiBWZXJ0aWNhbCBwaXhlbCBkZW5zaXR5ICovCisgIGJvb2xlYW4gd3JpdGVfQWRvYmVfbWFya2VyOwkvKiBzaG91bGQgYW4gQWRvYmUgbWFya2VyIGJlIHdyaXR0ZW4/ICovCisgIAorICAvKiBTdGF0ZSB2YXJpYWJsZTogaW5kZXggb2YgbmV4dCBzY2FubGluZSB0byBiZSB3cml0dGVuIHRvCisgICAqIGpwZWdfd3JpdGVfc2NhbmxpbmVzKCkuICBBcHBsaWNhdGlvbiBtYXkgdXNlIHRoaXMgdG8gY29udHJvbCBpdHMKKyAgICogcHJvY2Vzc2luZyBsb29wLCBlLmcuLCAid2hpbGUgKG5leHRfc2NhbmxpbmUgPCBpbWFnZV9oZWlnaHQpIi4KKyAgICovCisKKyAgSkRJTUVOU0lPTiBuZXh0X3NjYW5saW5lOwkvKiAwIC4uIGltYWdlX2hlaWdodC0xICAqLworCisgIC8qIFJlbWFpbmluZyBmaWVsZHMgYXJlIGtub3duIHRocm91Z2hvdXQgY29tcHJlc3NvciwgYnV0IGdlbmVyYWxseQorICAgKiBzaG91bGQgbm90IGJlIHRvdWNoZWQgYnkgYSBzdXJyb3VuZGluZyBhcHBsaWNhdGlvbi4KKyAgICovCisKKyAgLyoKKyAgICogVGhlc2UgZmllbGRzIGFyZSBjb21wdXRlZCBkdXJpbmcgY29tcHJlc3Npb24gc3RhcnR1cAorICAgKi8KKyAgYm9vbGVhbiBwcm9ncmVzc2l2ZV9tb2RlOwkvKiBUUlVFIGlmIHNjYW4gc2NyaXB0IHVzZXMgcHJvZ3Jlc3NpdmUgbW9kZSAqLworICBpbnQgbWF4X2hfc2FtcF9mYWN0b3I7CS8qIGxhcmdlc3QgaF9zYW1wX2ZhY3RvciAqLworICBpbnQgbWF4X3Zfc2FtcF9mYWN0b3I7CS8qIGxhcmdlc3Qgdl9zYW1wX2ZhY3RvciAqLworCisgIEpESU1FTlNJT04gdG90YWxfaU1DVV9yb3dzOwkvKiAjIG9mIGlNQ1Ugcm93cyB0byBiZSBpbnB1dCB0byBjb2VmIGN0bHIgKi8KKyAgLyogVGhlIGNvZWZmaWNpZW50IGNvbnRyb2xsZXIgcmVjZWl2ZXMgZGF0YSBpbiB1bml0cyBvZiBNQ1Ugcm93cyBhcyBkZWZpbmVkCisgICAqIGZvciBmdWxseSBpbnRlcmxlYXZlZCBzY2FucyAod2hldGhlciB0aGUgSlBFRyBmaWxlIGlzIGludGVybGVhdmVkIG9yIG5vdCkuCisgICAqIFRoZXJlIGFyZSB2X3NhbXBfZmFjdG9yICogRENUU0laRSBzYW1wbGUgcm93cyBvZiBlYWNoIGNvbXBvbmVudCBpbiBhbgorICAgKiAiaU1DVSIgKGludGVybGVhdmVkIE1DVSkgcm93LgorICAgKi8KKyAgCisgIC8qCisgICAqIFRoZXNlIGZpZWxkcyBhcmUgdmFsaWQgZHVyaW5nIGFueSBvbmUgc2Nhbi4KKyAgICogVGhleSBkZXNjcmliZSB0aGUgY29tcG9uZW50cyBhbmQgTUNVcyBhY3R1YWxseSBhcHBlYXJpbmcgaW4gdGhlIHNjYW4uCisgICAqLworICBpbnQgY29tcHNfaW5fc2NhbjsJCS8qICMgb2YgSlBFRyBjb21wb25lbnRzIGluIHRoaXMgc2NhbiAqLworICBqcGVnX2NvbXBvbmVudF9pbmZvICogY3VyX2NvbXBfaW5mb1tNQVhfQ09NUFNfSU5fU0NBTl07CisgIC8qICpjdXJfY29tcF9pbmZvW2ldIGRlc2NyaWJlcyBjb21wb25lbnQgdGhhdCBhcHBlYXJzIGkndGggaW4gU09TICovCisgIAorICBKRElNRU5TSU9OIE1DVXNfcGVyX3JvdzsJLyogIyBvZiBNQ1VzIGFjcm9zcyB0aGUgaW1hZ2UgKi8KKyAgSkRJTUVOU0lPTiBNQ1Vfcm93c19pbl9zY2FuOwkvKiAjIG9mIE1DVSByb3dzIGluIHRoZSBpbWFnZSAqLworICAKKyAgaW50IGJsb2Nrc19pbl9NQ1U7CQkvKiAjIG9mIERDVCBibG9ja3MgcGVyIE1DVSAqLworICBpbnQgTUNVX21lbWJlcnNoaXBbQ19NQVhfQkxPQ0tTX0lOX01DVV07CisgIC8qIE1DVV9tZW1iZXJzaGlwW2ldIGlzIGluZGV4IGluIGN1cl9jb21wX2luZm8gb2YgY29tcG9uZW50IG93bmluZyAqLworICAvKiBpJ3RoIGJsb2NrIGluIGFuIE1DVSAqLworCisgIGludCBTcywgU2UsIEFoLCBBbDsJCS8qIHByb2dyZXNzaXZlIEpQRUcgcGFyYW1ldGVycyBmb3Igc2NhbiAqLworCisgIC8qCisgICAqIExpbmtzIHRvIGNvbXByZXNzaW9uIHN1Ym9iamVjdHMgKG1ldGhvZHMgYW5kIHByaXZhdGUgdmFyaWFibGVzIG9mIG1vZHVsZXMpCisgICAqLworICBzdHJ1Y3QganBlZ19jb21wX21hc3RlciAqIG1hc3RlcjsKKyAgc3RydWN0IGpwZWdfY19tYWluX2NvbnRyb2xsZXIgKiBtYWluOworICBzdHJ1Y3QganBlZ19jX3ByZXBfY29udHJvbGxlciAqIHByZXA7CisgIHN0cnVjdCBqcGVnX2NfY29lZl9jb250cm9sbGVyICogY29lZjsKKyAgc3RydWN0IGpwZWdfbWFya2VyX3dyaXRlciAqIG1hcmtlcjsKKyAgc3RydWN0IGpwZWdfY29sb3JfY29udmVydGVyICogY2NvbnZlcnQ7CisgIHN0cnVjdCBqcGVnX2Rvd25zYW1wbGVyICogZG93bnNhbXBsZTsKKyAgc3RydWN0IGpwZWdfZm9yd2FyZF9kY3QgKiBmZGN0OworICBzdHJ1Y3QganBlZ19lbnRyb3B5X2VuY29kZXIgKiBlbnRyb3B5OworICBqcGVnX3NjYW5faW5mbyAqIHNjcmlwdF9zcGFjZTsgLyogd29ya3NwYWNlIGZvciBqcGVnX3NpbXBsZV9wcm9ncmVzc2lvbiAqLworICBpbnQgc2NyaXB0X3NwYWNlX3NpemU7Cit9OworCisKKy8qIE1hc3RlciByZWNvcmQgZm9yIGEgZGVjb21wcmVzc2lvbiBpbnN0YW5jZSAqLworCitzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCB7CisgIGpwZWdfY29tbW9uX2ZpZWxkczsJCS8qIEZpZWxkcyBzaGFyZWQgd2l0aCBqcGVnX2NvbXByZXNzX3N0cnVjdCAqLworCisgIC8qIFNvdXJjZSBvZiBjb21wcmVzc2VkIGRhdGEgKi8KKyAgc3RydWN0IGpwZWdfc291cmNlX21nciAqIHNyYzsKKworICAvKiBCYXNpYyBkZXNjcmlwdGlvbiBvZiBpbWFnZSAtLS0gZmlsbGVkIGluIGJ5IGpwZWdfcmVhZF9oZWFkZXIoKS4gKi8KKyAgLyogQXBwbGljYXRpb24gbWF5IGluc3BlY3QgdGhlc2UgdmFsdWVzIHRvIGRlY2lkZSBob3cgdG8gcHJvY2VzcyBpbWFnZS4gKi8KKworICBKRElNRU5TSU9OIGltYWdlX3dpZHRoOwkvKiBub21pbmFsIGltYWdlIHdpZHRoIChmcm9tIFNPRiBtYXJrZXIpICovCisgIEpESU1FTlNJT04gaW1hZ2VfaGVpZ2h0OwkvKiBub21pbmFsIGltYWdlIGhlaWdodCAqLworICBpbnQgbnVtX2NvbXBvbmVudHM7CQkvKiAjIG9mIGNvbG9yIGNvbXBvbmVudHMgaW4gSlBFRyBpbWFnZSAqLworICBKX0NPTE9SX1NQQUNFIGpwZWdfY29sb3Jfc3BhY2U7IC8qIGNvbG9yc3BhY2Ugb2YgSlBFRyBpbWFnZSAqLworCisgIC8qIERlY29tcHJlc3Npb24gcHJvY2Vzc2luZyBwYXJhbWV0ZXJzIC0tLSB0aGVzZSBmaWVsZHMgbXVzdCBiZSBzZXQgYmVmb3JlCisgICAqIGNhbGxpbmcganBlZ19zdGFydF9kZWNvbXByZXNzKCkuICBOb3RlIHRoYXQganBlZ19yZWFkX2hlYWRlcigpIGluaXRpYWxpemVzCisgICAqIHRoZW0gdG8gZGVmYXVsdCB2YWx1ZXMuCisgICAqLworCisgIEpfQ09MT1JfU1BBQ0Ugb3V0X2NvbG9yX3NwYWNlOyAvKiBjb2xvcnNwYWNlIGZvciBvdXRwdXQgKi8KKworICB1bnNpZ25lZCBpbnQgc2NhbGVfbnVtLCBzY2FsZV9kZW5vbTsgLyogZnJhY3Rpb24gYnkgd2hpY2ggdG8gc2NhbGUgaW1hZ2UgKi8KKworICBkb3VibGUgb3V0cHV0X2dhbW1hOwkJLyogaW1hZ2UgZ2FtbWEgd2FudGVkIGluIG91dHB1dCAqLworCisgIGJvb2xlYW4gYnVmZmVyZWRfaW1hZ2U7CS8qIFRSVUU9bXVsdGlwbGUgb3V0cHV0IHBhc3NlcyAqLworICBib29sZWFuIHJhd19kYXRhX291dDsJCS8qIFRSVUU9ZG93bnNhbXBsZWQgZGF0YSB3YW50ZWQgKi8KKworICBKX0RDVF9NRVRIT0QgZGN0X21ldGhvZDsJLyogSURDVCBhbGdvcml0aG0gc2VsZWN0b3IgKi8KKyAgYm9vbGVhbiBkb19mYW5jeV91cHNhbXBsaW5nOwkvKiBUUlVFPWFwcGx5IGZhbmN5IHVwc2FtcGxpbmcgKi8KKyAgYm9vbGVhbiBkb19ibG9ja19zbW9vdGhpbmc7CS8qIFRSVUU9YXBwbHkgaW50ZXJibG9jayBzbW9vdGhpbmcgKi8KKworICBib29sZWFuIHF1YW50aXplX2NvbG9yczsJLyogVFJVRT1jb2xvcm1hcHBlZCBvdXRwdXQgd2FudGVkICovCisgIC8qIHRoZSBmb2xsb3dpbmcgYXJlIGlnbm9yZWQgaWYgbm90IHF1YW50aXplX2NvbG9yczogKi8KKyAgSl9ESVRIRVJfTU9ERSBkaXRoZXJfbW9kZTsJLyogdHlwZSBvZiBjb2xvciBkaXRoZXJpbmcgdG8gdXNlICovCisgIGJvb2xlYW4gdHdvX3Bhc3NfcXVhbnRpemU7CS8qIFRSVUU9dXNlIHR3by1wYXNzIGNvbG9yIHF1YW50aXphdGlvbiAqLworICBpbnQgZGVzaXJlZF9udW1iZXJfb2ZfY29sb3JzOwkvKiBtYXggIyBjb2xvcnMgdG8gdXNlIGluIGNyZWF0ZWQgY29sb3JtYXAgKi8KKyAgLyogdGhlc2UgYXJlIHNpZ25pZmljYW50IG9ubHkgaW4gYnVmZmVyZWQtaW1hZ2UgbW9kZTogKi8KKyAgYm9vbGVhbiBlbmFibGVfMXBhc3NfcXVhbnQ7CS8qIGVuYWJsZSBmdXR1cmUgdXNlIG9mIDEtcGFzcyBxdWFudGl6ZXIgKi8KKyAgYm9vbGVhbiBlbmFibGVfZXh0ZXJuYWxfcXVhbnQ7LyogZW5hYmxlIGZ1dHVyZSB1c2Ugb2YgZXh0ZXJuYWwgY29sb3JtYXAgKi8KKyAgYm9vbGVhbiBlbmFibGVfMnBhc3NfcXVhbnQ7CS8qIGVuYWJsZSBmdXR1cmUgdXNlIG9mIDItcGFzcyBxdWFudGl6ZXIgKi8KKworICAvKiBEZXNjcmlwdGlvbiBvZiBhY3R1YWwgb3V0cHV0IGltYWdlIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB0byBhcHBsaWNhdGlvbi4KKyAgICogVGhlc2UgZmllbGRzIGFyZSBjb21wdXRlZCBieSBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKS4KKyAgICogWW91IGNhbiBhbHNvIHVzZSBqcGVnX2NhbGNfb3V0cHV0X2RpbWVuc2lvbnMoKSB0byBkZXRlcm1pbmUgdGhlc2UgdmFsdWVzCisgICAqIGluIGFkdmFuY2Ugb2YgY2FsbGluZyBqcGVnX3N0YXJ0X2RlY29tcHJlc3MoKS4KKyAgICovCisKKyAgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGg7CS8qIHNjYWxlZCBpbWFnZSB3aWR0aCAqLworICBKRElNRU5TSU9OIG91dHB1dF9oZWlnaHQ7CS8qIHNjYWxlZCBpbWFnZSBoZWlnaHQgKi8KKyAgaW50IG91dF9jb2xvcl9jb21wb25lbnRzOwkvKiAjIG9mIGNvbG9yIGNvbXBvbmVudHMgaW4gb3V0X2NvbG9yX3NwYWNlICovCisgIGludCBvdXRwdXRfY29tcG9uZW50czsJLyogIyBvZiBjb2xvciBjb21wb25lbnRzIHJldHVybmVkICovCisgIC8qIG91dHB1dF9jb21wb25lbnRzIGlzIDEgKGEgY29sb3JtYXAgaW5kZXgpIHdoZW4gcXVhbnRpemluZyBjb2xvcnM7CisgICAqIG90aGVyd2lzZSBpdCBlcXVhbHMgb3V0X2NvbG9yX2NvbXBvbmVudHMuCisgICAqLworICBpbnQgcmVjX291dGJ1Zl9oZWlnaHQ7CS8qIG1pbiByZWNvbW1lbmRlZCBoZWlnaHQgb2Ygc2NhbmxpbmUgYnVmZmVyICovCisgIC8qIElmIHRoZSBidWZmZXIgcGFzc2VkIHRvIGpwZWdfcmVhZF9zY2FubGluZXMoKSBpcyBsZXNzIHRoYW4gdGhpcyBtYW55IHJvd3MKKyAgICogaGlnaCwgc3BhY2UgYW5kIHRpbWUgd2lsbCBiZSB3YXN0ZWQgZHVlIHRvIHVubmVjZXNzYXJ5IGRhdGEgY29weWluZy4KKyAgICogVXN1YWxseSByZWNfb3V0YnVmX2hlaWdodCB3aWxsIGJlIDEgb3IgMiwgYXQgbW9zdCA0LgorICAgKi8KKworICAvKiBXaGVuIHF1YW50aXppbmcgY29sb3JzLCB0aGUgb3V0cHV0IGNvbG9ybWFwIGlzIGRlc2NyaWJlZCBieSB0aGVzZSBmaWVsZHMuCisgICAqIFRoZSBhcHBsaWNhdGlvbiBjYW4gc3VwcGx5IGEgY29sb3JtYXAgYnkgc2V0dGluZyBjb2xvcm1hcCBub24tTlVMTCBiZWZvcmUKKyAgICogY2FsbGluZyBqcGVnX3N0YXJ0X2RlY29tcHJlc3M7IG90aGVyd2lzZSBhIGNvbG9ybWFwIGlzIGNyZWF0ZWQgZHVyaW5nCisgICAqIGpwZWdfc3RhcnRfZGVjb21wcmVzcyBvciBqcGVnX3N0YXJ0X291dHB1dC4KKyAgICogVGhlIG1hcCBoYXMgb3V0X2NvbG9yX2NvbXBvbmVudHMgcm93cyBhbmQgYWN0dWFsX251bWJlcl9vZl9jb2xvcnMgY29sdW1ucy4KKyAgICovCisgIGludCBhY3R1YWxfbnVtYmVyX29mX2NvbG9yczsJLyogbnVtYmVyIG9mIGVudHJpZXMgaW4gdXNlICovCisgIEpTQU1QQVJSQVkgY29sb3JtYXA7CQkvKiBUaGUgY29sb3IgbWFwIGFzIGEgMi1EIHBpeGVsIGFycmF5ICovCisKKyAgLyogU3RhdGUgdmFyaWFibGVzOiB0aGVzZSB2YXJpYWJsZXMgaW5kaWNhdGUgdGhlIHByb2dyZXNzIG9mIGRlY29tcHJlc3Npb24uCisgICAqIFRoZSBhcHBsaWNhdGlvbiBtYXkgZXhhbWluZSB0aGVzZSBidXQgbXVzdCBub3QgbW9kaWZ5IHRoZW0uCisgICAqLworCisgIC8qIFJvdyBpbmRleCBvZiBuZXh0IHNjYW5saW5lIHRvIGJlIHJlYWQgZnJvbSBqcGVnX3JlYWRfc2NhbmxpbmVzKCkuCisgICAqIEFwcGxpY2F0aW9uIG1heSB1c2UgdGhpcyB0byBjb250cm9sIGl0cyBwcm9jZXNzaW5nIGxvb3AsIGUuZy4sCisgICAqICJ3aGlsZSAob3V0cHV0X3NjYW5saW5lIDwgb3V0cHV0X2hlaWdodCkiLgorICAgKi8KKyAgSkRJTUVOU0lPTiBvdXRwdXRfc2NhbmxpbmU7CS8qIDAgLi4gb3V0cHV0X2hlaWdodC0xICAqLworCisgIC8qIEN1cnJlbnQgaW5wdXQgc2NhbiBudW1iZXIgYW5kIG51bWJlciBvZiBpTUNVIHJvd3MgY29tcGxldGVkIGluIHNjYW4uCisgICAqIFRoZXNlIGluZGljYXRlIHRoZSBwcm9ncmVzcyBvZiB0aGUgZGVjb21wcmVzc29yIGlucHV0IHNpZGUuCisgICAqLworICBpbnQgaW5wdXRfc2Nhbl9udW1iZXI7CS8qIE51bWJlciBvZiBTT1MgbWFya2VycyBzZWVuIHNvIGZhciAqLworICBKRElNRU5TSU9OIGlucHV0X2lNQ1Vfcm93OwkvKiBOdW1iZXIgb2YgaU1DVSByb3dzIGNvbXBsZXRlZCAqLworCisgIC8qIFRoZSAib3V0cHV0IHNjYW4gbnVtYmVyIiBpcyB0aGUgbm90aW9uYWwgc2NhbiBiZWluZyBkaXNwbGF5ZWQgYnkgdGhlCisgICAqIG91dHB1dCBzaWRlLiAgVGhlIGRlY29tcHJlc3NvciB3aWxsIG5vdCBhbGxvdyBvdXRwdXQgc2Nhbi9yb3cgbnVtYmVyCisgICAqIHRvIGdldCBhaGVhZCBvZiBpbnB1dCBzY2FuL3JvdywgYnV0IGl0IGNhbiBmYWxsIGFyYml0cmFyaWx5IGZhciBiZWhpbmQuCisgICAqLworICBpbnQgb3V0cHV0X3NjYW5fbnVtYmVyOwkvKiBOb21pbmFsIHNjYW4gbnVtYmVyIGJlaW5nIGRpc3BsYXllZCAqLworICBKRElNRU5TSU9OIG91dHB1dF9pTUNVX3JvdzsJLyogTnVtYmVyIG9mIGlNQ1Ugcm93cyByZWFkICovCisKKyAgLyogQ3VycmVudCBwcm9ncmVzc2lvbiBzdGF0dXMuICBjb2VmX2JpdHNbY11baV0gaW5kaWNhdGVzIHRoZSBwcmVjaXNpb24KKyAgICogd2l0aCB3aGljaCBjb21wb25lbnQgYydzIERDVCBjb2VmZmljaWVudCBpIChpbiB6aWd6YWcgb3JkZXIpIGlzIGtub3duLgorICAgKiBJdCBpcyAtMSB3aGVuIG5vIGRhdGEgaGFzIHlldCBiZWVuIHJlY2VpdmVkLCBvdGhlcndpc2UgaXQgaXMgdGhlIHBvaW50CisgICAqIHRyYW5zZm9ybSAoc2hpZnQpIHZhbHVlIGZvciB0aGUgbW9zdCByZWNlbnQgc2NhbiBvZiB0aGUgY29lZmZpY2llbnQKKyAgICogKHRodXMsIDAgYXQgY29tcGxldGlvbiBvZiB0aGUgcHJvZ3Jlc3Npb24pLgorICAgKiBUaGlzIHBvaW50ZXIgaXMgTlVMTCB3aGVuIHJlYWRpbmcgYSBub24tcHJvZ3Jlc3NpdmUgZmlsZS4KKyAgICovCisgIGludCAoKmNvZWZfYml0cylbRENUU0laRTJdOwkvKiAtMSBvciBjdXJyZW50IEFsIHZhbHVlIGZvciBlYWNoIGNvZWYgKi8KKworICAvKiBJbnRlcm5hbCBKUEVHIHBhcmFtZXRlcnMgLS0tIHRoZSBhcHBsaWNhdGlvbiB1c3VhbGx5IG5lZWQgbm90IGxvb2sgYXQKKyAgICogdGhlc2UgZmllbGRzLiAgTm90ZSB0aGF0IHRoZSBkZWNvbXByZXNzb3Igb3V0cHV0IHNpZGUgbWF5IG5vdCB1c2UKKyAgICogYW55IHBhcmFtZXRlcnMgdGhhdCBjYW4gY2hhbmdlIGJldHdlZW4gc2NhbnMuCisgICAqLworCisgIC8qIFF1YW50aXphdGlvbiBhbmQgSHVmZm1hbiB0YWJsZXMgYXJlIGNhcnJpZWQgZm9yd2FyZCBhY3Jvc3MgaW5wdXQKKyAgICogZGF0YXN0cmVhbXMgd2hlbiBwcm9jZXNzaW5nIGFiYnJldmlhdGVkIEpQRUcgZGF0YXN0cmVhbXMuCisgICAqLworCisgIEpRVUFOVF9UQkwgKiBxdWFudF90YmxfcHRyc1tOVU1fUVVBTlRfVEJMU107CisgIC8qIHB0cnMgdG8gY29lZmZpY2llbnQgcXVhbnRpemF0aW9uIHRhYmxlcywgb3IgTlVMTCBpZiBub3QgZGVmaW5lZCAqLworCisgIEpIVUZGX1RCTCAqIGRjX2h1ZmZfdGJsX3B0cnNbTlVNX0hVRkZfVEJMU107CisgIEpIVUZGX1RCTCAqIGFjX2h1ZmZfdGJsX3B0cnNbTlVNX0hVRkZfVEJMU107CisgIC8qIHB0cnMgdG8gSHVmZm1hbiBjb2RpbmcgdGFibGVzLCBvciBOVUxMIGlmIG5vdCBkZWZpbmVkICovCisKKyAgLyogVGhlc2UgcGFyYW1ldGVycyBhcmUgbmV2ZXIgY2FycmllZCBhY3Jvc3MgZGF0YXN0cmVhbXMsIHNpbmNlIHRoZXkKKyAgICogYXJlIGdpdmVuIGluIFNPRi9TT1MgbWFya2VycyBvciBkZWZpbmVkIHRvIGJlIHJlc2V0IGJ5IFNPSS4KKyAgICovCisKKyAgaW50IGRhdGFfcHJlY2lzaW9uOwkJLyogYml0cyBvZiBwcmVjaXNpb24gaW4gaW1hZ2UgZGF0YSAqLworCisgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wX2luZm87CisgIC8qIGNvbXBfaW5mb1tpXSBkZXNjcmliZXMgY29tcG9uZW50IHRoYXQgYXBwZWFycyBpJ3RoIGluIFNPRiAqLworCisgIGJvb2xlYW4gcHJvZ3Jlc3NpdmVfbW9kZTsJLyogVFJVRSBpZiBTT0ZuIHNwZWNpZmllcyBwcm9ncmVzc2l2ZSBtb2RlICovCisgIGJvb2xlYW4gYXJpdGhfY29kZTsJCS8qIFRSVUU9YXJpdGhtZXRpYyBjb2RpbmcsIEZBTFNFPUh1ZmZtYW4gKi8KKworICBVSU5UOCBhcml0aF9kY19MW05VTV9BUklUSF9UQkxTXTsgLyogTCB2YWx1ZXMgZm9yIERDIGFyaXRoLWNvZGluZyB0YWJsZXMgKi8KKyAgVUlOVDggYXJpdGhfZGNfVVtOVU1fQVJJVEhfVEJMU107IC8qIFUgdmFsdWVzIGZvciBEQyBhcml0aC1jb2RpbmcgdGFibGVzICovCisgIFVJTlQ4IGFyaXRoX2FjX0tbTlVNX0FSSVRIX1RCTFNdOyAvKiBLeCB2YWx1ZXMgZm9yIEFDIGFyaXRoLWNvZGluZyB0YWJsZXMgKi8KKworICB1bnNpZ25lZCBpbnQgcmVzdGFydF9pbnRlcnZhbDsgLyogTUNVcyBwZXIgcmVzdGFydCBpbnRlcnZhbCwgb3IgMCBmb3Igbm8gcmVzdGFydCAqLworCisgIC8qIFRoZXNlIGZpZWxkcyByZWNvcmQgZGF0YSBvYnRhaW5lZCBmcm9tIG9wdGlvbmFsIG1hcmtlcnMgcmVjb2duaXplZCBieQorICAgKiB0aGUgSlBFRyBsaWJyYXJ5LgorICAgKi8KKyAgYm9vbGVhbiBzYXdfSkZJRl9tYXJrZXI7CS8qIFRSVUUgaWZmIGEgSkZJRiBBUFAwIG1hcmtlciB3YXMgZm91bmQgKi8KKyAgLyogRGF0YSBjb3BpZWQgZnJvbSBKRklGIG1hcmtlcjsgb25seSB2YWxpZCBpZiBzYXdfSkZJRl9tYXJrZXIgaXMgVFJVRTogKi8KKyAgVUlOVDggSkZJRl9tYWpvcl92ZXJzaW9uOwkvKiBKRklGIHZlcnNpb24gbnVtYmVyICovCisgIFVJTlQ4IEpGSUZfbWlub3JfdmVyc2lvbjsKKyAgVUlOVDggZGVuc2l0eV91bml0OwkJLyogSkZJRiBjb2RlIGZvciBwaXhlbCBzaXplIHVuaXRzICovCisgIFVJTlQxNiBYX2RlbnNpdHk7CQkvKiBIb3Jpem9udGFsIHBpeGVsIGRlbnNpdHkgKi8KKyAgVUlOVDE2IFlfZGVuc2l0eTsJCS8qIFZlcnRpY2FsIHBpeGVsIGRlbnNpdHkgKi8KKyAgYm9vbGVhbiBzYXdfQWRvYmVfbWFya2VyOwkvKiBUUlVFIGlmZiBhbiBBZG9iZSBBUFAxNCBtYXJrZXIgd2FzIGZvdW5kICovCisgIFVJTlQ4IEFkb2JlX3RyYW5zZm9ybTsJLyogQ29sb3IgdHJhbnNmb3JtIGNvZGUgZnJvbSBBZG9iZSBtYXJrZXIgKi8KKworICBib29sZWFuIENDSVI2MDFfc2FtcGxpbmc7CS8qIFRSVUU9Zmlyc3Qgc2FtcGxlcyBhcmUgY29zaXRlZCAqLworCisgIC8qIEFzaWRlIGZyb20gdGhlIHNwZWNpZmljIGRhdGEgcmV0YWluZWQgZnJvbSBBUFBuIG1hcmtlcnMga25vd24gdG8gdGhlCisgICAqIGxpYnJhcnksIHRoZSB1bmludGVycHJldGVkIGNvbnRlbnRzIG9mIGFueSBvciBhbGwgQVBQbiBhbmQgQ09NIG1hcmtlcnMKKyAgICogY2FuIGJlIHNhdmVkIGluIGEgbGlzdCBmb3IgZXhhbWluYXRpb24gYnkgdGhlIGFwcGxpY2F0aW9uLgorICAgKi8KKyAganBlZ19zYXZlZF9tYXJrZXJfcHRyIG1hcmtlcl9saXN0OyAvKiBIZWFkIG9mIGxpc3Qgb2Ygc2F2ZWQgbWFya2VycyAqLworCisgIC8qIFJlbWFpbmluZyBmaWVsZHMgYXJlIGtub3duIHRocm91Z2hvdXQgZGVjb21wcmVzc29yLCBidXQgZ2VuZXJhbGx5CisgICAqIHNob3VsZCBub3QgYmUgdG91Y2hlZCBieSBhIHN1cnJvdW5kaW5nIGFwcGxpY2F0aW9uLgorICAgKi8KKworICAvKgorICAgKiBUaGVzZSBmaWVsZHMgYXJlIGNvbXB1dGVkIGR1cmluZyBkZWNvbXByZXNzaW9uIHN0YXJ0dXAKKyAgICovCisgIGludCBtYXhfaF9zYW1wX2ZhY3RvcjsJLyogbGFyZ2VzdCBoX3NhbXBfZmFjdG9yICovCisgIGludCBtYXhfdl9zYW1wX2ZhY3RvcjsJLyogbGFyZ2VzdCB2X3NhbXBfZmFjdG9yICovCisKKyAgaW50IG1pbl9EQ1Rfc2NhbGVkX3NpemU7CS8qIHNtYWxsZXN0IERDVF9zY2FsZWRfc2l6ZSBvZiBhbnkgY29tcG9uZW50ICovCisKKyAgSkRJTUVOU0lPTiB0b3RhbF9pTUNVX3Jvd3M7CS8qICMgb2YgaU1DVSByb3dzIGluIGltYWdlICovCisgIC8qIFRoZSBjb2VmZmljaWVudCBjb250cm9sbGVyJ3MgaW5wdXQgYW5kIG91dHB1dCBwcm9ncmVzcyBpcyBtZWFzdXJlZCBpbgorICAgKiB1bml0cyBvZiAiaU1DVSIgKGludGVybGVhdmVkIE1DVSkgcm93cy4gIFRoZXNlIGFyZSB0aGUgc2FtZSBhcyBNQ1Ugcm93cworICAgKiBpbiBmdWxseSBpbnRlcmxlYXZlZCBKUEVHIHNjYW5zLCBidXQgYXJlIHVzZWQgd2hldGhlciB0aGUgc2NhbiBpcworICAgKiBpbnRlcmxlYXZlZCBvciBub3QuICBXZSBkZWZpbmUgYW4gaU1DVSByb3cgYXMgdl9zYW1wX2ZhY3RvciBEQ1QgYmxvY2sKKyAgICogcm93cyBvZiBlYWNoIGNvbXBvbmVudC4gIFRoZXJlZm9yZSwgdGhlIElEQ1Qgb3V0cHV0IGNvbnRhaW5zCisgICAqIHZfc2FtcF9mYWN0b3IqRENUX3NjYWxlZF9zaXplIHNhbXBsZSByb3dzIG9mIGEgY29tcG9uZW50IHBlciBpTUNVIHJvdy4KKyAgICovCisKKyAgSlNBTVBMRSAqIHNhbXBsZV9yYW5nZV9saW1pdDsgLyogdGFibGUgZm9yIGZhc3QgcmFuZ2UtbGltaXRpbmcgKi8KKworICAvKgorICAgKiBUaGVzZSBmaWVsZHMgYXJlIHZhbGlkIGR1cmluZyBhbnkgb25lIHNjYW4uCisgICAqIFRoZXkgZGVzY3JpYmUgdGhlIGNvbXBvbmVudHMgYW5kIE1DVXMgYWN0dWFsbHkgYXBwZWFyaW5nIGluIHRoZSBzY2FuLgorICAgKiBOb3RlIHRoYXQgdGhlIGRlY29tcHJlc3NvciBvdXRwdXQgc2lkZSBtdXN0IG5vdCB1c2UgdGhlc2UgZmllbGRzLgorICAgKi8KKyAgaW50IGNvbXBzX2luX3NjYW47CQkvKiAjIG9mIEpQRUcgY29tcG9uZW50cyBpbiB0aGlzIHNjYW4gKi8KKyAganBlZ19jb21wb25lbnRfaW5mbyAqIGN1cl9jb21wX2luZm9bTUFYX0NPTVBTX0lOX1NDQU5dOworICAvKiAqY3VyX2NvbXBfaW5mb1tpXSBkZXNjcmliZXMgY29tcG9uZW50IHRoYXQgYXBwZWFycyBpJ3RoIGluIFNPUyAqLworCisgIEpESU1FTlNJT04gTUNVc19wZXJfcm93OwkvKiAjIG9mIE1DVXMgYWNyb3NzIHRoZSBpbWFnZSAqLworICBKRElNRU5TSU9OIE1DVV9yb3dzX2luX3NjYW47CS8qICMgb2YgTUNVIHJvd3MgaW4gdGhlIGltYWdlICovCisKKyAgaW50IGJsb2Nrc19pbl9NQ1U7CQkvKiAjIG9mIERDVCBibG9ja3MgcGVyIE1DVSAqLworICBpbnQgTUNVX21lbWJlcnNoaXBbRF9NQVhfQkxPQ0tTX0lOX01DVV07CisgIC8qIE1DVV9tZW1iZXJzaGlwW2ldIGlzIGluZGV4IGluIGN1cl9jb21wX2luZm8gb2YgY29tcG9uZW50IG93bmluZyAqLworICAvKiBpJ3RoIGJsb2NrIGluIGFuIE1DVSAqLworCisgIGludCBTcywgU2UsIEFoLCBBbDsJCS8qIHByb2dyZXNzaXZlIEpQRUcgcGFyYW1ldGVycyBmb3Igc2NhbiAqLworCisgIC8qIFRoaXMgZmllbGQgaXMgc2hhcmVkIGJldHdlZW4gZW50cm9weSBkZWNvZGVyIGFuZCBtYXJrZXIgcGFyc2VyLgorICAgKiBJdCBpcyBlaXRoZXIgemVybyBvciB0aGUgY29kZSBvZiBhIEpQRUcgbWFya2VyIHRoYXQgaGFzIGJlZW4KKyAgICogcmVhZCBmcm9tIHRoZSBkYXRhIHNvdXJjZSwgYnV0IGhhcyBub3QgeWV0IGJlZW4gcHJvY2Vzc2VkLgorICAgKi8KKyAgaW50IHVucmVhZF9tYXJrZXI7CisKKyAgLyoKKyAgICogTGlua3MgdG8gZGVjb21wcmVzc2lvbiBzdWJvYmplY3RzIChtZXRob2RzLCBwcml2YXRlIHZhcmlhYmxlcyBvZiBtb2R1bGVzKQorICAgKi8KKyAgc3RydWN0IGpwZWdfZGVjb21wX21hc3RlciAqIG1hc3RlcjsKKyAgc3RydWN0IGpwZWdfZF9tYWluX2NvbnRyb2xsZXIgKiBtYWluOworICBzdHJ1Y3QganBlZ19kX2NvZWZfY29udHJvbGxlciAqIGNvZWY7CisgIHN0cnVjdCBqcGVnX2RfcG9zdF9jb250cm9sbGVyICogcG9zdDsKKyAgc3RydWN0IGpwZWdfaW5wdXRfY29udHJvbGxlciAqIGlucHV0Y3RsOworICBzdHJ1Y3QganBlZ19tYXJrZXJfcmVhZGVyICogbWFya2VyOworICBzdHJ1Y3QganBlZ19lbnRyb3B5X2RlY29kZXIgKiBlbnRyb3B5OworICBzdHJ1Y3QganBlZ19pbnZlcnNlX2RjdCAqIGlkY3Q7CisgIHN0cnVjdCBqcGVnX3Vwc2FtcGxlciAqIHVwc2FtcGxlOworICBzdHJ1Y3QganBlZ19jb2xvcl9kZWNvbnZlcnRlciAqIGNjb252ZXJ0OworICBzdHJ1Y3QganBlZ19jb2xvcl9xdWFudGl6ZXIgKiBjcXVhbnRpemU7Cit9OworCisKKy8qICJPYmplY3QiIGRlY2xhcmF0aW9ucyBmb3IgSlBFRyBtb2R1bGVzIHRoYXQgbWF5IGJlIHN1cHBsaWVkIG9yIGNhbGxlZAorICogZGlyZWN0bHkgYnkgdGhlIHN1cnJvdW5kaW5nIGFwcGxpY2F0aW9uLgorICogQXMgd2l0aCBhbGwgb2JqZWN0cyBpbiB0aGUgSlBFRyBsaWJyYXJ5LCB0aGVzZSBzdHJ1Y3RzIG9ubHkgZGVmaW5lIHRoZQorICogcHVibGljbHkgdmlzaWJsZSBtZXRob2RzIGFuZCBzdGF0ZSB2YXJpYWJsZXMgb2YgYSBtb2R1bGUuICBBZGRpdGlvbmFsCisgKiBwcml2YXRlIGZpZWxkcyBtYXkgZXhpc3QgYWZ0ZXIgdGhlIHB1YmxpYyBvbmVzLgorICovCisKKworLyogRXJyb3IgaGFuZGxlciBvYmplY3QgKi8KKworc3RydWN0IGpwZWdfZXJyb3JfbWdyIHsKKyAgLyogRXJyb3IgZXhpdCBoYW5kbGVyOiBkb2VzIG5vdCByZXR1cm4gdG8gY2FsbGVyICovCisgIEpNRVRIT0Qodm9pZCwgZXJyb3JfZXhpdCwgKGpfY29tbW9uX3B0ciBjaW5mbykpOworICAvKiBDb25kaXRpb25hbGx5IGVtaXQgYSB0cmFjZSBvciB3YXJuaW5nIG1lc3NhZ2UgKi8KKyAgSk1FVEhPRCh2b2lkLCBlbWl0X21lc3NhZ2UsIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBtc2dfbGV2ZWwpKTsKKyAgLyogUm91dGluZSB0aGF0IGFjdHVhbGx5IG91dHB1dHMgYSB0cmFjZSBvciBlcnJvciBtZXNzYWdlICovCisgIEpNRVRIT0Qodm9pZCwgb3V0cHV0X21lc3NhZ2UsIChqX2NvbW1vbl9wdHIgY2luZm8pKTsKKyAgLyogRm9ybWF0IGEgbWVzc2FnZSBzdHJpbmcgZm9yIHRoZSBtb3N0IHJlY2VudCBKUEVHIGVycm9yIG9yIG1lc3NhZ2UgKi8KKyAgSk1FVEhPRCh2b2lkLCBmb3JtYXRfbWVzc2FnZSwgKGpfY29tbW9uX3B0ciBjaW5mbywgY2hhciAqIGJ1ZmZlcikpOworI2RlZmluZSBKTVNHX0xFTkdUSF9NQVggIDIwMAkvKiByZWNvbW1lbmRlZCBzaXplIG9mIGZvcm1hdF9tZXNzYWdlIGJ1ZmZlciAqLworICAvKiBSZXNldCBlcnJvciBzdGF0ZSB2YXJpYWJsZXMgYXQgc3RhcnQgb2YgYSBuZXcgaW1hZ2UgKi8KKyAgSk1FVEhPRCh2b2lkLCByZXNldF9lcnJvcl9tZ3IsIChqX2NvbW1vbl9wdHIgY2luZm8pKTsKKyAgCisgIC8qIFRoZSBtZXNzYWdlIElEIGNvZGUgYW5kIGFueSBwYXJhbWV0ZXJzIGFyZSBzYXZlZCBoZXJlLgorICAgKiBBIG1lc3NhZ2UgY2FuIGhhdmUgb25lIHN0cmluZyBwYXJhbWV0ZXIgb3IgdXAgdG8gOCBpbnQgcGFyYW1ldGVycy4KKyAgICovCisgIGludCBtc2dfY29kZTsKKyNkZWZpbmUgSk1TR19TVFJfUEFSTV9NQVggIDgwCisgIHVuaW9uIHsKKyAgICBpbnQgaVs4XTsKKyAgICBjaGFyIHNbSk1TR19TVFJfUEFSTV9NQVhdOworICB9IG1zZ19wYXJtOworICAKKyAgLyogU3RhbmRhcmQgc3RhdGUgdmFyaWFibGVzIGZvciBlcnJvciBmYWNpbGl0eSAqLworICAKKyAgaW50IHRyYWNlX2xldmVsOwkJLyogbWF4IG1zZ19sZXZlbCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkICovCisgIAorICAvKiBGb3IgcmVjb3ZlcmFibGUgY29ycnVwdC1kYXRhIGVycm9ycywgd2UgZW1pdCBhIHdhcm5pbmcgbWVzc2FnZSwKKyAgICogYnV0IGtlZXAgZ29pbmcgdW5sZXNzIGVtaXRfbWVzc2FnZSBjaG9vc2VzIHRvIGFib3J0LiAgZW1pdF9tZXNzYWdlCisgICAqIHNob3VsZCBjb3VudCB3YXJuaW5ncyBpbiBudW1fd2FybmluZ3MuICBUaGUgc3Vycm91bmRpbmcgYXBwbGljYXRpb24KKyAgICogY2FuIGNoZWNrIGZvciBiYWQgZGF0YSBieSBzZWVpbmcgaWYgbnVtX3dhcm5pbmdzIGlzIG5vbnplcm8gYXQgdGhlCisgICAqIGVuZCBvZiBwcm9jZXNzaW5nLgorICAgKi8KKyAgbG9uZyBudW1fd2FybmluZ3M7CQkvKiBudW1iZXIgb2YgY29ycnVwdC1kYXRhIHdhcm5pbmdzICovCisKKyAgLyogVGhlc2UgZmllbGRzIHBvaW50IHRvIHRoZSB0YWJsZShzKSBvZiBlcnJvciBtZXNzYWdlIHN0cmluZ3MuCisgICAqIEFuIGFwcGxpY2F0aW9uIGNhbiBjaGFuZ2UgdGhlIHRhYmxlIHBvaW50ZXIgdG8gc3dpdGNoIHRvIGEgZGlmZmVyZW50CisgICAqIG1lc3NhZ2UgbGlzdCAodHlwaWNhbGx5LCB0byBjaGFuZ2UgdGhlIGxhbmd1YWdlIGluIHdoaWNoIGVycm9ycyBhcmUKKyAgICogcmVwb3J0ZWQpLiAgU29tZSBhcHBsaWNhdGlvbnMgbWF5IHdpc2ggdG8gYWRkIGFkZGl0aW9uYWwgZXJyb3IgY29kZXMKKyAgICogdGhhdCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIEpQRUcgbGlicmFyeSBlcnJvciBtZWNoYW5pc207IHRoZSBzZWNvbmQKKyAgICogdGFibGUgcG9pbnRlciBpcyB1c2VkIGZvciB0aGlzIHB1cnBvc2UuCisgICAqCisgICAqIEZpcnN0IHRhYmxlIGluY2x1ZGVzIGFsbCBlcnJvcnMgZ2VuZXJhdGVkIGJ5IEpQRUcgbGlicmFyeSBpdHNlbGYuCisgICAqIEVycm9yIGNvZGUgMCBpcyByZXNlcnZlZCBmb3IgYSAibm8gc3VjaCBlcnJvciBzdHJpbmciIG1lc3NhZ2UuCisgICAqLworICBjb25zdCBjaGFyICogY29uc3QgKiBqcGVnX21lc3NhZ2VfdGFibGU7IC8qIExpYnJhcnkgZXJyb3JzICovCisgIGludCBsYXN0X2pwZWdfbWVzc2FnZTsgICAgLyogVGFibGUgY29udGFpbnMgc3RyaW5ncyAwLi5sYXN0X2pwZWdfbWVzc2FnZSAqLworICAvKiBTZWNvbmQgdGFibGUgY2FuIGJlIGFkZGVkIGJ5IGFwcGxpY2F0aW9uIChzZWUgY2pwZWcvZGpwZWcgZm9yIGV4YW1wbGUpLgorICAgKiBJdCBjb250YWlucyBzdHJpbmdzIG51bWJlcmVkIGZpcnN0X2FkZG9uX21lc3NhZ2UuLmxhc3RfYWRkb25fbWVzc2FnZS4KKyAgICovCisgIGNvbnN0IGNoYXIgKiBjb25zdCAqIGFkZG9uX21lc3NhZ2VfdGFibGU7IC8qIE5vbi1saWJyYXJ5IGVycm9ycyAqLworICBpbnQgZmlyc3RfYWRkb25fbWVzc2FnZTsJLyogY29kZSBmb3IgZmlyc3Qgc3RyaW5nIGluIGFkZG9uIHRhYmxlICovCisgIGludCBsYXN0X2FkZG9uX21lc3NhZ2U7CS8qIGNvZGUgZm9yIGxhc3Qgc3RyaW5nIGluIGFkZG9uIHRhYmxlICovCit9OworCisKKy8qIFByb2dyZXNzIG1vbml0b3Igb2JqZWN0ICovCisKK3N0cnVjdCBqcGVnX3Byb2dyZXNzX21nciB7CisgIEpNRVRIT0Qodm9pZCwgcHJvZ3Jlc3NfbW9uaXRvciwgKGpfY29tbW9uX3B0ciBjaW5mbykpOworCisgIGxvbmcgcGFzc19jb3VudGVyOwkJLyogd29yayB1bml0cyBjb21wbGV0ZWQgaW4gdGhpcyBwYXNzICovCisgIGxvbmcgcGFzc19saW1pdDsJCS8qIHRvdGFsIG51bWJlciBvZiB3b3JrIHVuaXRzIGluIHRoaXMgcGFzcyAqLworICBpbnQgY29tcGxldGVkX3Bhc3NlczsJCS8qIHBhc3NlcyBjb21wbGV0ZWQgc28gZmFyICovCisgIGludCB0b3RhbF9wYXNzZXM7CQkvKiB0b3RhbCBudW1iZXIgb2YgcGFzc2VzIGV4cGVjdGVkICovCit9OworCisKKy8qIERhdGEgZGVzdGluYXRpb24gb2JqZWN0IGZvciBjb21wcmVzc2lvbiAqLworCitzdHJ1Y3QganBlZ19kZXN0aW5hdGlvbl9tZ3IgeworICBKT0NURVQgKiBuZXh0X291dHB1dF9ieXRlOwkvKiA9PiBuZXh0IGJ5dGUgdG8gd3JpdGUgaW4gYnVmZmVyICovCisgIHNpemVfdCBmcmVlX2luX2J1ZmZlcjsJLyogIyBvZiBieXRlIHNwYWNlcyByZW1haW5pbmcgaW4gYnVmZmVyICovCisKKyAgSk1FVEhPRCh2b2lkLCBpbml0X2Rlc3RpbmF0aW9uLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsKKyAgSk1FVEhPRChib29sZWFuLCBlbXB0eV9vdXRwdXRfYnVmZmVyLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsKKyAgSk1FVEhPRCh2b2lkLCB0ZXJtX2Rlc3RpbmF0aW9uLCAoal9jb21wcmVzc19wdHIgY2luZm8pKTsKK307CisKKworLyogRGF0YSBzb3VyY2Ugb2JqZWN0IGZvciBkZWNvbXByZXNzaW9uICovCisKK3N0cnVjdCBqcGVnX3NvdXJjZV9tZ3IgeworICBjb25zdCBKT0NURVQgKiBuZXh0X2lucHV0X2J5dGU7IC8qID0+IG5leHQgYnl0ZSB0byByZWFkIGZyb20gYnVmZmVyICovCisgIHNpemVfdCBieXRlc19pbl9idWZmZXI7CS8qICMgb2YgYnl0ZXMgcmVtYWluaW5nIGluIGJ1ZmZlciAqLworCisgIEpNRVRIT0Qodm9pZCwgaW5pdF9zb3VyY2UsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CisgIEpNRVRIT0QoYm9vbGVhbiwgZmlsbF9pbnB1dF9idWZmZXIsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CisgIEpNRVRIT0Qodm9pZCwgc2tpcF9pbnB1dF9kYXRhLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgbG9uZyBudW1fYnl0ZXMpKTsKKyAgSk1FVEhPRChib29sZWFuLCByZXN5bmNfdG9fcmVzdGFydCwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGludCBkZXNpcmVkKSk7CisgIEpNRVRIT0Qodm9pZCwgdGVybV9zb3VyY2UsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7Cit9OworCisKKy8qIE1lbW9yeSBtYW5hZ2VyIG9iamVjdC4KKyAqIEFsbG9jYXRlcyAic21hbGwiIG9iamVjdHMgKGEgZmV3IEsgdG90YWwpLCAibGFyZ2UiIG9iamVjdHMgKHRlbnMgb2YgSyksCisgKiBhbmQgInJlYWxseSBiaWciIG9iamVjdHMgKHZpcnR1YWwgYXJyYXlzIHdpdGggYmFja2luZyBzdG9yZSBpZiBuZWVkZWQpLgorICogVGhlIG1lbW9yeSBtYW5hZ2VyIGRvZXMgbm90IGFsbG93IGluZGl2aWR1YWwgb2JqZWN0cyB0byBiZSBmcmVlZDsgcmF0aGVyLAorICogZWFjaCBjcmVhdGVkIG9iamVjdCBpcyBhc3NpZ25lZCB0byBhIHBvb2wsIGFuZCB3aG9sZSBwb29scyBjYW4gYmUgZnJlZWQKKyAqIGF0IG9uY2UuICBUaGlzIGlzIGZhc3RlciBhbmQgbW9yZSBjb252ZW5pZW50IHRoYW4gcmVtZW1iZXJpbmcgZXhhY3RseSB3aGF0CisgKiB0byBmcmVlLCBlc3BlY2lhbGx5IHdoZXJlIG1hbGxvYygpL2ZyZWUoKSBhcmUgbm90IHRvbyBzcGVlZHkuCisgKiBOQjogYWxsb2Mgcm91dGluZXMgbmV2ZXIgcmV0dXJuIE5VTEwuICBUaGV5IGV4aXQgdG8gZXJyb3JfZXhpdCBpZiBub3QKKyAqIHN1Y2Nlc3NmdWwuCisgKi8KKworI2RlZmluZSBKUE9PTF9QRVJNQU5FTlQJMAkvKiBsYXN0cyB1bnRpbCBtYXN0ZXIgcmVjb3JkIGlzIGRlc3Ryb3llZCAqLworI2RlZmluZSBKUE9PTF9JTUFHRQkxCS8qIGxhc3RzIHVudGlsIGRvbmUgd2l0aCBpbWFnZS9kYXRhc3RyZWFtICovCisjZGVmaW5lIEpQT09MX05VTVBPT0xTCTIKKwordHlwZWRlZiBzdHJ1Y3QganZpcnRfc2FycmF5X2NvbnRyb2wgKiBqdmlydF9zYXJyYXlfcHRyOwordHlwZWRlZiBzdHJ1Y3QganZpcnRfYmFycmF5X2NvbnRyb2wgKiBqdmlydF9iYXJyYXlfcHRyOworCisKK3N0cnVjdCBqcGVnX21lbW9yeV9tZ3IgeworICAvKiBNZXRob2QgcG9pbnRlcnMgKi8KKyAgSk1FVEhPRCh2b2lkICosIGFsbG9jX3NtYWxsLCAoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgcG9vbF9pZCwKKwkJCQlzaXplX3Qgc2l6ZW9mb2JqZWN0KSk7CisgIEpNRVRIT0Qodm9pZCAgKiwgYWxsb2NfbGFyZ2UsIChqX2NvbW1vbl9wdHIgY2luZm8sIGludCBwb29sX2lkLAorCQkJCSAgICAgc2l6ZV90IHNpemVvZm9iamVjdCkpOworICBKTUVUSE9EKEpTQU1QQVJSQVksIGFsbG9jX3NhcnJheSwgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQsCisJCQkJICAgICBKRElNRU5TSU9OIHNhbXBsZXNwZXJyb3csCisJCQkJICAgICBKRElNRU5TSU9OIG51bXJvd3MpKTsKKyAgSk1FVEhPRChKQkxPQ0tBUlJBWSwgYWxsb2NfYmFycmF5LCAoal9jb21tb25fcHRyIGNpbmZvLCBpbnQgcG9vbF9pZCwKKwkJCQkgICAgICBKRElNRU5TSU9OIGJsb2Nrc3BlcnJvdywKKwkJCQkgICAgICBKRElNRU5TSU9OIG51bXJvd3MpKTsKKyAgSk1FVEhPRChqdmlydF9zYXJyYXlfcHRyLCByZXF1ZXN0X3ZpcnRfc2FycmF5LCAoal9jb21tb25fcHRyIGNpbmZvLAorCQkJCQkJICBpbnQgcG9vbF9pZCwKKwkJCQkJCSAgYm9vbGVhbiBwcmVfemVybywKKwkJCQkJCSAgSkRJTUVOU0lPTiBzYW1wbGVzcGVycm93LAorCQkJCQkJICBKRElNRU5TSU9OIG51bXJvd3MsCisJCQkJCQkgIEpESU1FTlNJT04gbWF4YWNjZXNzKSk7CisgIEpNRVRIT0QoanZpcnRfYmFycmF5X3B0ciwgcmVxdWVzdF92aXJ0X2JhcnJheSwgKGpfY29tbW9uX3B0ciBjaW5mbywKKwkJCQkJCSAgaW50IHBvb2xfaWQsCisJCQkJCQkgIGJvb2xlYW4gcHJlX3plcm8sCisJCQkJCQkgIEpESU1FTlNJT04gYmxvY2tzcGVycm93LAorCQkJCQkJICBKRElNRU5TSU9OIG51bXJvd3MsCisJCQkJCQkgIEpESU1FTlNJT04gbWF4YWNjZXNzKSk7CisgIEpNRVRIT0Qodm9pZCwgcmVhbGl6ZV92aXJ0X2FycmF5cywgKGpfY29tbW9uX3B0ciBjaW5mbykpOworICBKTUVUSE9EKEpTQU1QQVJSQVksIGFjY2Vzc192aXJ0X3NhcnJheSwgKGpfY29tbW9uX3B0ciBjaW5mbywKKwkJCQkJICAganZpcnRfc2FycmF5X3B0ciBwdHIsCisJCQkJCSAgIEpESU1FTlNJT04gc3RhcnRfcm93LAorCQkJCQkgICBKRElNRU5TSU9OIG51bV9yb3dzLAorCQkJCQkgICBib29sZWFuIHdyaXRhYmxlKSk7CisgIEpNRVRIT0QoSkJMT0NLQVJSQVksIGFjY2Vzc192aXJ0X2JhcnJheSwgKGpfY29tbW9uX3B0ciBjaW5mbywKKwkJCQkJICAgIGp2aXJ0X2JhcnJheV9wdHIgcHRyLAorCQkJCQkgICAgSkRJTUVOU0lPTiBzdGFydF9yb3csCisJCQkJCSAgICBKRElNRU5TSU9OIG51bV9yb3dzLAorCQkJCQkgICAgYm9vbGVhbiB3cml0YWJsZSkpOworICBKTUVUSE9EKHZvaWQsIGZyZWVfcG9vbCwgKGpfY29tbW9uX3B0ciBjaW5mbywgaW50IHBvb2xfaWQpKTsKKyAgSk1FVEhPRCh2b2lkLCBzZWxmX2Rlc3RydWN0LCAoal9jb21tb25fcHRyIGNpbmZvKSk7CisKKyAgLyogTGltaXQgb24gbWVtb3J5IGFsbG9jYXRpb24gZm9yIHRoaXMgSlBFRyBvYmplY3QuICAoTm90ZSB0aGF0IHRoaXMgaXMKKyAgICogbWVyZWx5IGFkdmlzb3J5LCBub3QgYSBndWFyYW50ZWVkIG1heGltdW07IGl0IG9ubHkgYWZmZWN0cyB0aGUgc3BhY2UKKyAgICogdXNlZCBmb3IgdmlydHVhbC1hcnJheSBidWZmZXJzLikgIE1heSBiZSBjaGFuZ2VkIGJ5IG91dGVyIGFwcGxpY2F0aW9uCisgICAqIGFmdGVyIGNyZWF0aW5nIHRoZSBKUEVHIG9iamVjdC4KKyAgICovCisgIGxvbmcgbWF4X21lbW9yeV90b191c2U7CisKKyAgLyogTWF4aW11bSBhbGxvY2F0aW9uIHJlcXVlc3QgYWNjZXB0ZWQgYnkgYWxsb2NfbGFyZ2UuICovCisgIGxvbmcgbWF4X2FsbG9jX2NodW5rOworfTsKKworCisvKiBSb3V0aW5lIHNpZ25hdHVyZSBmb3IgYXBwbGljYXRpb24tc3VwcGxpZWQgbWFya2VyIHByb2Nlc3NpbmcgbWV0aG9kcy4KKyAqIE5lZWQgbm90IHBhc3MgbWFya2VyIGNvZGUgc2luY2UgaXQgaXMgc3RvcmVkIGluIGNpbmZvLT51bnJlYWRfbWFya2VyLgorICovCit0eXBlZGVmIEpNRVRIT0QoYm9vbGVhbiwganBlZ19tYXJrZXJfcGFyc2VyX21ldGhvZCwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKKworCisvKiBEZWNsYXJhdGlvbnMgZm9yIHJvdXRpbmVzIGNhbGxlZCBieSBhcHBsaWNhdGlvbi4KKyAqIFRoZSBKUFAgbWFjcm8gaGlkZXMgcHJvdG90eXBlIHBhcmFtZXRlcnMgZnJvbSBjb21waWxlcnMgdGhhdCBjYW4ndCBjb3BlLgorICogTm90ZSBKUFAgcmVxdWlyZXMgZG91YmxlIHBhcmVudGhlc2VzLgorICovCisKKyNpZmRlZiBIQVZFX1BST1RPVFlQRVMKKyNkZWZpbmUgSlBQKGFyZ2xpc3QpCWFyZ2xpc3QKKyNlbHNlCisjZGVmaW5lIEpQUChhcmdsaXN0KQkoKQorI2VuZGlmCisKKworLyogU2hvcnQgZm9ybXMgb2YgZXh0ZXJuYWwgbmFtZXMgZm9yIHN5c3RlbXMgd2l0aCBicmFpbi1kYW1hZ2VkIGxpbmtlcnMuCisgKiBXZSBzaG9ydGVuIGV4dGVybmFsIG5hbWVzIHRvIGJlIHVuaXF1ZSBpbiB0aGUgZmlyc3Qgc2l4IGxldHRlcnMsIHdoaWNoCisgKiBpcyBnb29kIGVub3VnaCBmb3IgYWxsIGtub3duIHN5c3RlbXMuCisgKiAoSWYgeW91ciBjb21waWxlciBpdHNlbGYgbmVlZHMgbmFtZXMgdG8gYmUgdW5pcXVlIGluIGxlc3MgdGhhbiAxNSAKKyAqIGNoYXJhY3RlcnMsIHlvdSBhcmUgb3V0IG9mIGx1Y2suICBHZXQgYSBiZXR0ZXIgY29tcGlsZXIuKQorICovCisKKyNpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCisjZGVmaW5lIGpwZWdfc3RkX2Vycm9yCQlqU3RkRXJyb3IKKyNkZWZpbmUganBlZ19DcmVhdGVDb21wcmVzcwlqQ3JlYUNvbXByZXNzCisjZGVmaW5lIGpwZWdfQ3JlYXRlRGVjb21wcmVzcwlqQ3JlYURlY29tcHJlc3MKKyNkZWZpbmUganBlZ19kZXN0cm95X2NvbXByZXNzCWpEZXN0Q29tcHJlc3MKKyNkZWZpbmUganBlZ19kZXN0cm95X2RlY29tcHJlc3MJakRlc3REZWNvbXByZXNzCisjZGVmaW5lIGpwZWdfc3RkaW9fZGVzdAkJalN0ZERlc3QKKyNkZWZpbmUganBlZ19zdGRpb19zcmMJCWpTdGRTcmMKKyNkZWZpbmUganBlZ19zZXRfZGVmYXVsdHMJalNldERlZmF1bHRzCisjZGVmaW5lIGpwZWdfc2V0X2NvbG9yc3BhY2UJalNldENvbG9yc3BhY2UKKyNkZWZpbmUganBlZ19kZWZhdWx0X2NvbG9yc3BhY2UJakRlZkNvbG9yc3BhY2UKKyNkZWZpbmUganBlZ19zZXRfcXVhbGl0eQlqU2V0UXVhbGl0eQorI2RlZmluZSBqcGVnX3NldF9saW5lYXJfcXVhbGl0eQlqU2V0TFF1YWxpdHkKKyNkZWZpbmUganBlZ19hZGRfcXVhbnRfdGFibGUJakFkZFF1YW50VGFibGUKKyNkZWZpbmUganBlZ19xdWFsaXR5X3NjYWxpbmcJalF1YWxpdHlTY2FsaW5nCisjZGVmaW5lIGpwZWdfc2ltcGxlX3Byb2dyZXNzaW9uCWpTaW1Qcm9ncmVzcworI2RlZmluZSBqcGVnX3N1cHByZXNzX3RhYmxlcwlqU3VwcHJlc3NUYWJsZXMKKyNkZWZpbmUganBlZ19hbGxvY19xdWFudF90YWJsZQlqQWxjUVRhYmxlCisjZGVmaW5lIGpwZWdfYWxsb2NfaHVmZl90YWJsZQlqQWxjSFRhYmxlCisjZGVmaW5lIGpwZWdfc3RhcnRfY29tcHJlc3MJalN0cnRDb21wcmVzcworI2RlZmluZSBqcGVnX3dyaXRlX3NjYW5saW5lcwlqV3J0U2NhbmxpbmVzCisjZGVmaW5lIGpwZWdfZmluaXNoX2NvbXByZXNzCWpGaW5Db21wcmVzcworI2RlZmluZSBqcGVnX3dyaXRlX3Jhd19kYXRhCWpXcnRSYXdEYXRhCisjZGVmaW5lIGpwZWdfd3JpdGVfbWFya2VyCWpXcnRNYXJrZXIKKyNkZWZpbmUganBlZ193cml0ZV9tX2hlYWRlcglqV3J0TUhlYWRlcgorI2RlZmluZSBqcGVnX3dyaXRlX21fYnl0ZQlqV3J0TUJ5dGUKKyNkZWZpbmUganBlZ193cml0ZV90YWJsZXMJaldydFRhYmxlcworI2RlZmluZSBqcGVnX3JlYWRfaGVhZGVyCWpSZWFkSGVhZGVyCisjZGVmaW5lIGpwZWdfc3RhcnRfZGVjb21wcmVzcwlqU3RydERlY29tcHJlc3MKKyNkZWZpbmUganBlZ19yZWFkX3NjYW5saW5lcwlqUmVhZFNjYW5saW5lcworI2RlZmluZSBqcGVnX2ZpbmlzaF9kZWNvbXByZXNzCWpGaW5EZWNvbXByZXNzCisjZGVmaW5lIGpwZWdfcmVhZF9yYXdfZGF0YQlqUmVhZFJhd0RhdGEKKyNkZWZpbmUganBlZ19oYXNfbXVsdGlwbGVfc2NhbnMJakhhc011bHRTY24KKyNkZWZpbmUganBlZ19zdGFydF9vdXRwdXQJalN0cnRPdXRwdXQKKyNkZWZpbmUganBlZ19maW5pc2hfb3V0cHV0CWpGaW5PdXRwdXQKKyNkZWZpbmUganBlZ19pbnB1dF9jb21wbGV0ZQlqSW5Db21wbGV0ZQorI2RlZmluZSBqcGVnX25ld19jb2xvcm1hcAlqTmV3Q01hcAorI2RlZmluZSBqcGVnX2NvbnN1bWVfaW5wdXQJakNvbnN1bWVJbnB1dAorI2RlZmluZSBqcGVnX2NhbGNfb3V0cHV0X2RpbWVuc2lvbnMJakNhbGNEaW1lbnNpb25zCisjZGVmaW5lIGpwZWdfc2F2ZV9tYXJrZXJzCWpTYXZlTWFya2VycworI2RlZmluZSBqcGVnX3NldF9tYXJrZXJfcHJvY2Vzc29yCWpTZXRNYXJrZXIKKyNkZWZpbmUganBlZ19yZWFkX2NvZWZmaWNpZW50cwlqUmVhZENvZWZzCisjZGVmaW5lIGpwZWdfd3JpdGVfY29lZmZpY2llbnRzCWpXcnRDb2VmcworI2RlZmluZSBqcGVnX2NvcHlfY3JpdGljYWxfcGFyYW1ldGVycwlqQ29weUNyaXQKKyNkZWZpbmUganBlZ19hYm9ydF9jb21wcmVzcwlqQWJydENvbXByZXNzCisjZGVmaW5lIGpwZWdfYWJvcnRfZGVjb21wcmVzcwlqQWJydERlY29tcHJlc3MKKyNkZWZpbmUganBlZ19hYm9ydAkJakFib3J0CisjZGVmaW5lIGpwZWdfZGVzdHJveQkJakRlc3Ryb3kKKyNkZWZpbmUganBlZ19yZXN5bmNfdG9fcmVzdGFydAlqUmVzeW5jUmVzdGFydAorI2VuZGlmIC8qIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMgKi8KKworCisvKiBEZWZhdWx0IGVycm9yLW1hbmFnZW1lbnQgc2V0dXAgKi8KK0VYVEVSTihzdHJ1Y3QganBlZ19lcnJvcl9tZ3IgKikganBlZ19zdGRfZXJyb3IKKwlKUFAoKHN0cnVjdCBqcGVnX2Vycm9yX21nciAqIGVycikpOworCisvKiBJbml0aWFsaXphdGlvbiBvZiBKUEVHIGNvbXByZXNzaW9uIG9iamVjdHMuCisgKiBqcGVnX2NyZWF0ZV9jb21wcmVzcygpIGFuZCBqcGVnX2NyZWF0ZV9kZWNvbXByZXNzKCkgYXJlIHRoZSBleHBvcnRlZAorICogbmFtZXMgdGhhdCBhcHBsaWNhdGlvbnMgc2hvdWxkIGNhbGwuICBUaGVzZSBleHBhbmQgdG8gY2FsbHMgb24KKyAqIGpwZWdfQ3JlYXRlQ29tcHJlc3MgYW5kIGpwZWdfQ3JlYXRlRGVjb21wcmVzcyB3aXRoIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHBhc3NlZCBmb3IgdmVyc2lvbiBtaXNtYXRjaCBjaGVja2luZy4KKyAqIE5COiB5b3UgbXVzdCBzZXQgdXAgdGhlIGVycm9yLW1hbmFnZXIgQkVGT1JFIGNhbGxpbmcganBlZ19jcmVhdGVfeHh4LgorICovCisjZGVmaW5lIGpwZWdfY3JlYXRlX2NvbXByZXNzKGNpbmZvKSBcCisgICAganBlZ19DcmVhdGVDb21wcmVzcygoY2luZm8pLCBKUEVHX0xJQl9WRVJTSU9OLCBcCisJCQkoc2l6ZV90KSBzaXplb2Yoc3RydWN0IGpwZWdfY29tcHJlc3Nfc3RydWN0KSkKKyNkZWZpbmUganBlZ19jcmVhdGVfZGVjb21wcmVzcyhjaW5mbykgXAorICAgIGpwZWdfQ3JlYXRlRGVjb21wcmVzcygoY2luZm8pLCBKUEVHX0xJQl9WRVJTSU9OLCBcCisJCQkgIChzaXplX3QpIHNpemVvZihzdHJ1Y3QganBlZ19kZWNvbXByZXNzX3N0cnVjdCkpCitFWFRFUk4odm9pZCkganBlZ19DcmVhdGVDb21wcmVzcyBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCSAgICAgIGludCB2ZXJzaW9uLCBzaXplX3Qgc3RydWN0c2l6ZSkpOworRVhURVJOKHZvaWQpIGpwZWdfQ3JlYXRlRGVjb21wcmVzcyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisJCQkJCWludCB2ZXJzaW9uLCBzaXplX3Qgc3RydWN0c2l6ZSkpOworLyogRGVzdHJ1Y3Rpb24gb2YgSlBFRyBjb21wcmVzc2lvbiBvYmplY3RzICovCitFWFRFUk4odm9pZCkganBlZ19kZXN0cm95X2NvbXByZXNzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTih2b2lkKSBqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKKworI2lmIDAKKy8qIFN0YW5kYXJkIGRhdGEgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBtYW5hZ2Vyczogc3RkaW8gc3RyZWFtcy4gKi8KKy8qIENhbGxlciBpcyByZXNwb25zaWJsZSBmb3Igb3BlbmluZyB0aGUgZmlsZSBiZWZvcmUgYW5kIGNsb3NpbmcgYWZ0ZXIuICovCitFWFRFUk4odm9pZCkganBlZ19zdGRpb19kZXN0IEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIEZYU1lTX0ZJTEUgKiBvdXRmaWxlKSk7CitFWFRFUk4odm9pZCkganBlZ19zdGRpb19zcmMgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBGWFNZU19GSUxFICogaW5maWxlKSk7CisjZW5kaWYKKworLyogRGVmYXVsdCBwYXJhbWV0ZXIgc2V0dXAgZm9yIGNvbXByZXNzaW9uICovCitFWFRFUk4odm9pZCkganBlZ19zZXRfZGVmYXVsdHMgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworLyogQ29tcHJlc3Npb24gcGFyYW1ldGVyIHNldHVwIGFpZHMgKi8KK0VYVEVSTih2b2lkKSBqcGVnX3NldF9jb2xvcnNwYWNlIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCisJCQkJICAgICAgSl9DT0xPUl9TUEFDRSBjb2xvcnNwYWNlKSk7CitFWFRFUk4odm9pZCkganBlZ19kZWZhdWx0X2NvbG9yc3BhY2UgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKHZvaWQpIGpwZWdfc2V0X3F1YWxpdHkgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IHF1YWxpdHksCisJCQkJICAgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkpOworRVhURVJOKHZvaWQpIGpwZWdfc2V0X2xpbmVhcl9xdWFsaXR5IEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCisJCQkJCSAgaW50IHNjYWxlX2ZhY3RvciwKKwkJCQkJICBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKSk7CitFWFRFUk4odm9pZCkganBlZ19hZGRfcXVhbnRfdGFibGUgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IHdoaWNoX3RibCwKKwkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpiYXNpY190YWJsZSwKKwkJCQkgICAgICAgaW50IHNjYWxlX2ZhY3RvciwKKwkJCQkgICAgICAgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkpOworRVhURVJOKGludCkganBlZ19xdWFsaXR5X3NjYWxpbmcgSlBQKChpbnQgcXVhbGl0eSkpOworRVhURVJOKHZvaWQpIGpwZWdfc2ltcGxlX3Byb2dyZXNzaW9uIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTih2b2lkKSBqcGVnX3N1cHByZXNzX3RhYmxlcyBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCSAgICAgICBib29sZWFuIHN1cHByZXNzKSk7CitFWFRFUk4oSlFVQU5UX1RCTCAqKSBqcGVnX2FsbG9jX3F1YW50X3RhYmxlIEpQUCgoal9jb21tb25fcHRyIGNpbmZvKSk7CitFWFRFUk4oSkhVRkZfVEJMICopIGpwZWdfYWxsb2NfaHVmZl90YWJsZSBKUFAoKGpfY29tbW9uX3B0ciBjaW5mbykpOworCisvKiBNYWluIGVudHJ5IHBvaW50cyBmb3IgY29tcHJlc3Npb24gKi8KK0VYVEVSTih2b2lkKSBqcGVnX3N0YXJ0X2NvbXByZXNzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCisJCQkJICAgICAgYm9vbGVhbiB3cml0ZV9hbGxfdGFibGVzKSk7CitFWFRFUk4oSkRJTUVOU0lPTikganBlZ193cml0ZV9zY2FubGluZXMgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJICAgICBKU0FNUEFSUkFZIHNjYW5saW5lcywKKwkJCQkJICAgICBKRElNRU5TSU9OIG51bV9saW5lcykpOworRVhURVJOKHZvaWQpIGpwZWdfZmluaXNoX2NvbXByZXNzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKKworLyogUmVwbGFjZXMganBlZ193cml0ZV9zY2FubGluZXMgd2hlbiB3cml0aW5nIHJhdyBkb3duc2FtcGxlZCBkYXRhLiAqLworRVhURVJOKEpESU1FTlNJT04pIGpwZWdfd3JpdGVfcmF3X2RhdGEgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJICAgIEpTQU1QSU1BR0UgZGF0YSwKKwkJCQkJICAgIEpESU1FTlNJT04gbnVtX2xpbmVzKSk7CisKKy8qIFdyaXRlIGEgc3BlY2lhbCBtYXJrZXIuICBTZWUgbGlianBlZy5kb2MgY29uY2VybmluZyBzYWZlIHVzYWdlLiAqLworRVhURVJOKHZvaWQpIGpwZWdfd3JpdGVfbWFya2VyCisJSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IG1hcmtlciwKKwkgICAgIGNvbnN0IEpPQ1RFVCAqIGRhdGFwdHIsIHVuc2lnbmVkIGludCBkYXRhbGVuKSk7CisvKiBTYW1lLCBidXQgcGllY2VtZWFsLiAqLworRVhURVJOKHZvaWQpIGpwZWdfd3JpdGVfbV9oZWFkZXIKKwlKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyLCB1bnNpZ25lZCBpbnQgZGF0YWxlbikpOworRVhURVJOKHZvaWQpIGpwZWdfd3JpdGVfbV9ieXRlCisJSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IHZhbCkpOworCisvKiBBbHRlcm5hdGUgY29tcHJlc3Npb24gZnVuY3Rpb246IGp1c3Qgd3JpdGUgYW4gYWJicmV2aWF0ZWQgdGFibGUgZmlsZSAqLworRVhURVJOKHZvaWQpIGpwZWdfd3JpdGVfdGFibGVzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKKworLyogRGVjb21wcmVzc2lvbiBzdGFydHVwOiByZWFkIHN0YXJ0IG9mIEpQRUcgZGF0YXN0cmVhbSB0byBzZWUgd2hhdCdzIHRoZXJlICovCitFWFRFUk4oaW50KSBqcGVnX3JlYWRfaGVhZGVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkgIGJvb2xlYW4gcmVxdWlyZV9pbWFnZSkpOworLyogUmV0dXJuIHZhbHVlIGlzIG9uZSBvZjogKi8KKyNkZWZpbmUgSlBFR19TVVNQRU5ERUQJCTAgLyogU3VzcGVuZGVkIGR1ZSB0byBsYWNrIG9mIGlucHV0IGRhdGEgKi8KKyNkZWZpbmUgSlBFR19IRUFERVJfT0sJCTEgLyogRm91bmQgdmFsaWQgaW1hZ2UgZGF0YXN0cmVhbSAqLworI2RlZmluZSBKUEVHX0hFQURFUl9UQUJMRVNfT05MWQkyIC8qIEZvdW5kIHZhbGlkIHRhYmxlLXNwZWNzLW9ubHkgZGF0YXN0cmVhbSAqLworLyogSWYgeW91IHBhc3MgcmVxdWlyZV9pbWFnZSA9IFRSVUUgKG5vcm1hbCBjYXNlKSwgeW91IG5lZWQgbm90IGNoZWNrIGZvcgorICogYSBUQUJMRVNfT05MWSByZXR1cm4gY29kZTsgYW4gYWJicmV2aWF0ZWQgZmlsZSB3aWxsIGNhdXNlIGFuIGVycm9yIGV4aXQuCisgKiBKUEVHX1NVU1BFTkRFRCBpcyBvbmx5IHBvc3NpYmxlIGlmIHlvdSB1c2UgYSBkYXRhIHNvdXJjZSBtb2R1bGUgdGhhdCBjYW4KKyAqIGdpdmUgYSBzdXNwZW5zaW9uIHJldHVybiAodGhlIHN0ZGlvIHNvdXJjZSBtb2R1bGUgZG9lc24ndCkuCisgKi8KKworLyogTWFpbiBlbnRyeSBwb2ludHMgZm9yIGRlY29tcHJlc3Npb24gKi8KK0VYVEVSTihib29sZWFuKSBqcGVnX3N0YXJ0X2RlY29tcHJlc3MgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CitFWFRFUk4oSkRJTUVOU0lPTikganBlZ19yZWFkX3NjYW5saW5lcyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisJCQkJCSAgICBKU0FNUEFSUkFZIHNjYW5saW5lcywKKwkJCQkJICAgIEpESU1FTlNJT04gbWF4X2xpbmVzKSk7CitFWFRFUk4oYm9vbGVhbikganBlZ19maW5pc2hfZGVjb21wcmVzcyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKKworLyogUmVwbGFjZXMganBlZ19yZWFkX3NjYW5saW5lcyB3aGVuIHJlYWRpbmcgcmF3IGRvd25zYW1wbGVkIGRhdGEuICovCitFWFRFUk4oSkRJTUVOU0lPTikganBlZ19yZWFkX3Jhd19kYXRhIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJICAgSlNBTVBJTUFHRSBkYXRhLAorCQkJCQkgICBKRElNRU5TSU9OIG1heF9saW5lcykpOworCisvKiBBZGRpdGlvbmFsIGVudHJ5IHBvaW50cyBmb3IgYnVmZmVyZWQtaW1hZ2UgbW9kZS4gKi8KK0VYVEVSTihib29sZWFuKSBqcGVnX2hhc19tdWx0aXBsZV9zY2FucyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTihib29sZWFuKSBqcGVnX3N0YXJ0X291dHB1dCBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisJCQkJICAgICAgIGludCBzY2FuX251bWJlcikpOworRVhURVJOKGJvb2xlYW4pIGpwZWdfZmluaXNoX291dHB1dCBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTihib29sZWFuKSBqcGVnX2lucHV0X2NvbXBsZXRlIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKHZvaWQpIGpwZWdfbmV3X2NvbG9ybWFwIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKGludCkganBlZ19jb25zdW1lX2lucHV0IEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworLyogUmV0dXJuIHZhbHVlIGlzIG9uZSBvZjogKi8KKy8qICNkZWZpbmUgSlBFR19TVVNQRU5ERUQJMCAgICBTdXNwZW5kZWQgZHVlIHRvIGxhY2sgb2YgaW5wdXQgZGF0YSAqLworI2RlZmluZSBKUEVHX1JFQUNIRURfU09TCTEgLyogUmVhY2hlZCBzdGFydCBvZiBuZXcgc2NhbiAqLworI2RlZmluZSBKUEVHX1JFQUNIRURfRU9JCTIgLyogUmVhY2hlZCBlbmQgb2YgaW1hZ2UgKi8KKyNkZWZpbmUgSlBFR19ST1dfQ09NUExFVEVECTMgLyogQ29tcGxldGVkIG9uZSBpTUNVIHJvdyAqLworI2RlZmluZSBKUEVHX1NDQU5fQ09NUExFVEVECTQgLyogQ29tcGxldGVkIGxhc3QgaU1DVSByb3cgb2YgYSBzY2FuICovCisKKy8qIFByZWNhbGN1bGF0ZSBvdXRwdXQgZGltZW5zaW9ucyBmb3IgY3VycmVudCBkZWNvbXByZXNzaW9uIHBhcmFtZXRlcnMuICovCitFWFRFUk4odm9pZCkganBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworCisvKiBDb250cm9sIHNhdmluZyBvZiBDT00gYW5kIEFQUG4gbWFya2VycyBpbnRvIG1hcmtlcl9saXN0LiAqLworRVhURVJOKHZvaWQpIGpwZWdfc2F2ZV9tYXJrZXJzCisJSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBpbnQgbWFya2VyX2NvZGUsCisJICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoX2xpbWl0KSk7CisKKy8qIEluc3RhbGwgYSBzcGVjaWFsIHByb2Nlc3NpbmcgbWV0aG9kIGZvciBDT00gb3IgQVBQbiBtYXJrZXJzLiAqLworRVhURVJOKHZvaWQpIGpwZWdfc2V0X21hcmtlcl9wcm9jZXNzb3IKKwlKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGludCBtYXJrZXJfY29kZSwKKwkgICAgIGpwZWdfbWFya2VyX3BhcnNlcl9tZXRob2Qgcm91dGluZSkpOworCisvKiBSZWFkIG9yIHdyaXRlIHJhdyBEQ1QgY29lZmZpY2llbnRzIC0tLSB1c2VmdWwgZm9yIGxvc3NsZXNzIHRyYW5zY29kaW5nLiAqLworRVhURVJOKGp2aXJ0X2JhcnJheV9wdHIgKikganBlZ19yZWFkX2NvZWZmaWNpZW50cyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTih2b2lkKSBqcGVnX3dyaXRlX2NvZWZmaWNpZW50cyBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCQkgIGp2aXJ0X2JhcnJheV9wdHIgKiBjb2VmX2FycmF5cykpOworRVhURVJOKHZvaWQpIGpwZWdfY29weV9jcml0aWNhbF9wYXJhbWV0ZXJzIEpQUCgoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLAorCQkJCQkJal9jb21wcmVzc19wdHIgZHN0aW5mbykpOworCisvKiBJZiB5b3UgY2hvb3NlIHRvIGFib3J0IGNvbXByZXNzaW9uIG9yIGRlY29tcHJlc3Npb24gYmVmb3JlIGNvbXBsZXRpbmcKKyAqIGpwZWdfZmluaXNoXyhkZSljb21wcmVzcywgdGhlbiB5b3UgbmVlZCB0byBjbGVhbiB1cCB0byByZWxlYXNlIG1lbW9yeSwKKyAqIHRlbXBvcmFyeSBmaWxlcywgZXRjLiAgWW91IGNhbiBqdXN0IGNhbGwganBlZ19kZXN0cm95XyhkZSljb21wcmVzcworICogaWYgeW91J3JlIGRvbmUgd2l0aCB0aGUgSlBFRyBvYmplY3QsIGJ1dCBpZiB5b3Ugd2FudCB0byBjbGVhbiBpdCB1cCBhbmQKKyAqIHJldXNlIGl0LCBjYWxsIHRoaXM6CisgKi8KK0VYVEVSTih2b2lkKSBqcGVnX2Fib3J0X2NvbXByZXNzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTih2b2lkKSBqcGVnX2Fib3J0X2RlY29tcHJlc3MgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CisKKy8qIEdlbmVyaWMgdmVyc2lvbnMgb2YganBlZ19hYm9ydCBhbmQganBlZ19kZXN0cm95IHRoYXQgd29yayBvbiBlaXRoZXIKKyAqIGZsYXZvciBvZiBKUEVHIG9iamVjdC4gIFRoZXNlIG1heSBiZSBtb3JlIGNvbnZlbmllbnQgaW4gc29tZSBwbGFjZXMuCisgKi8KK0VYVEVSTih2b2lkKSBqcGVnX2Fib3J0IEpQUCgoal9jb21tb25fcHRyIGNpbmZvKSk7CitFWFRFUk4odm9pZCkganBlZ19kZXN0cm95IEpQUCgoal9jb21tb25fcHRyIGNpbmZvKSk7CisKKy8qIERlZmF1bHQgcmVzdGFydC1tYXJrZXItcmVzeW5jIHByb2NlZHVyZSBmb3IgdXNlIGJ5IGRhdGEgc291cmNlIG1vZHVsZXMgKi8KK0VYVEVSTihib29sZWFuKSBqcGVnX3Jlc3luY190b19yZXN0YXJ0IEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJICAgIGludCBkZXNpcmVkKSk7CisKKworLyogVGhlc2UgbWFya2VyIGNvZGVzIGFyZSBleHBvcnRlZCBzaW5jZSBhcHBsaWNhdGlvbnMgYW5kIGRhdGEgc291cmNlIG1vZHVsZXMKKyAqIGFyZSBsaWtlbHkgdG8gd2FudCB0byB1c2UgdGhlbS4KKyAqLworCisjZGVmaW5lIEpQRUdfUlNUMAkweEQwCS8qIFJTVDAgbWFya2VyIGNvZGUgKi8KKyNkZWZpbmUgSlBFR19FT0kJMHhEOQkvKiBFT0kgbWFya2VyIGNvZGUgKi8KKyNkZWZpbmUgSlBFR19BUFAwCTB4RTAJLyogQVBQMCBtYXJrZXIgY29kZSAqLworI2RlZmluZSBKUEVHX0NPTQkweEZFCS8qIENPTSBtYXJrZXIgY29kZSAqLworCisKKy8qIElmIHdlIGhhdmUgYSBicmFpbi1kYW1hZ2VkIGNvbXBpbGVyIHRoYXQgZW1pdHMgd2FybmluZ3MgKG9yIHdvcnNlLCBlcnJvcnMpCisgKiBmb3Igc3RydWN0dXJlIGRlZmluaXRpb25zIHRoYXQgYXJlIG5ldmVyIGZpbGxlZCBpbiwga2VlcCBpdCBxdWlldCBieQorICogc3VwcGx5aW5nIGR1bW15IGRlZmluaXRpb25zIGZvciB0aGUgdmFyaW91cyBzdWJzdHJ1Y3R1cmVzLgorICovCisKKyNpZmRlZiBJTkNPTVBMRVRFX1RZUEVTX0JST0tFTgorI2lmbmRlZiBKUEVHX0lOVEVSTkFMUwkJLyogd2lsbCBiZSBkZWZpbmVkIGluIGpwZWdpbnQuaCAqLworc3RydWN0IGp2aXJ0X3NhcnJheV9jb250cm9sIHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqdmlydF9iYXJyYXlfY29udHJvbCB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganBlZ19jb21wX21hc3RlciB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganBlZ19jX21haW5fY29udHJvbGxlciB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganBlZ19jX3ByZXBfY29udHJvbGxlciB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganBlZ19jX2NvZWZfY29udHJvbGxlciB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganBlZ19tYXJrZXJfd3JpdGVyIHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqcGVnX2NvbG9yX2NvbnZlcnRlciB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganBlZ19kb3duc2FtcGxlciB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganBlZ19mb3J3YXJkX2RjdCB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganBlZ19lbnRyb3B5X2VuY29kZXIgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGpwZWdfZGVjb21wX21hc3RlciB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganBlZ19kX21haW5fY29udHJvbGxlciB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganBlZ19kX2NvZWZfY29udHJvbGxlciB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganBlZ19kX3Bvc3RfY29udHJvbGxlciB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganBlZ19pbnB1dF9jb250cm9sbGVyIHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqcGVnX21hcmtlcl9yZWFkZXIgeyBsb25nIGR1bW15OyB9Oworc3RydWN0IGpwZWdfZW50cm9weV9kZWNvZGVyIHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqcGVnX2ludmVyc2VfZGN0IHsgbG9uZyBkdW1teTsgfTsKK3N0cnVjdCBqcGVnX3Vwc2FtcGxlciB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganBlZ19jb2xvcl9kZWNvbnZlcnRlciB7IGxvbmcgZHVtbXk7IH07CitzdHJ1Y3QganBlZ19jb2xvcl9xdWFudGl6ZXIgeyBsb25nIGR1bW15OyB9OworI2VuZGlmIC8qIEpQRUdfSU5URVJOQUxTICovCisjZW5kaWYgLyogSU5DT01QTEVURV9UWVBFU19CUk9LRU4gKi8KKworCisvKgorICogVGhlIEpQRUcgbGlicmFyeSBtb2R1bGVzIGRlZmluZSBKUEVHX0lOVEVSTkFMUyBiZWZvcmUgaW5jbHVkaW5nIHRoaXMgZmlsZS4KKyAqIFRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgZGVjbGFyYXRpb25zIGFyZSByZWFkIG9ubHkgd2hlbiB0aGF0IGlzIHRydWUuCisgKiBBcHBsaWNhdGlvbnMgdXNpbmcgdGhlIGxpYnJhcnkgc2hvdWxkIG5vdCBpbmNsdWRlIGpwZWdpbnQuaCwgYnV0IG1heSB3aXNoCisgKiB0byBpbmNsdWRlIGplcnJvci5oLgorICovCisKKyNpZmRlZiBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImpwZWdpbnQuaCIJCS8qIGZldGNoIHByaXZhdGUgZGVjbGFyYXRpb25zICovCisjaW5jbHVkZSAiamVycm9yLmgiCQkvKiBmZXRjaCBlcnJvciBjb2RlcyB0b28gKi8KKyNlbmRpZgorCisjZW5kaWYgLyogSlBFR0xJQl9IICovCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvanZlcnNpb24uaCBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9qdmVyc2lvbi5oCmluZGV4IGRhZGQ0NTMuLjY0NzJjNTggMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9qdmVyc2lvbi5oCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy9qdmVyc2lvbi5oCkBAIC0xLDE0ICsxLDE0IEBACi0vKg0KLSAqIGp2ZXJzaW9uLmgNCi0gKg0KLSAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk4LCBUaG9tYXMgRy4gTGFuZS4NCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLg0KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4NCi0gKg0KLSAqIFRoaXMgZmlsZSBjb250YWlucyBzb2Z0d2FyZSB2ZXJzaW9uIGlkZW50aWZpY2F0aW9uLg0KLSAqLw0KLQ0KLQ0KLSNkZWZpbmUgSlZFUlNJT04JIjZiICAyNy1NYXItMTk5OCINCi0NCi0jZGVmaW5lIEpDT1BZUklHSFQJIkNvcHlyaWdodCAoQykgMTk5OCwgVGhvbWFzIEcuIExhbmUiDQorLyoKKyAqIGp2ZXJzaW9uLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5OCwgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBzb2Z0d2FyZSB2ZXJzaW9uIGlkZW50aWZpY2F0aW9uLgorICovCisKKworI2RlZmluZSBKVkVSU0lPTgkiNmIgIDI3LU1hci0xOTk4IgorCisjZGVmaW5lIEpDT1BZUklHSFQJIkNvcHlyaWdodCAoQykgMTk5OCwgVGhvbWFzIEcuIExhbmUiCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNvZGVjL2xpYmpwZWcvdHJhbnN1cHAuaCBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy90cmFuc3VwcC5oCmluZGV4IGViMGIwNTUuLjVjMmQzMmEgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy90cmFuc3VwcC5oCisrKyBiL2NvcmUvc3JjL2Z4Y29kZWMvbGlianBlZy90cmFuc3VwcC5oCkBAIC0xLDEzNSArMSwxMzUgQEAKLS8qDQotICogdHJhbnN1cHAuaA0KLSAqDQotICogQ29weXJpZ2h0IChDKSAxOTk3LCBUaG9tYXMgRy4gTGFuZS4NCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLg0KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4NCi0gKg0KLSAqIFRoaXMgZmlsZSBjb250YWlucyBkZWNsYXJhdGlvbnMgZm9yIGltYWdlIHRyYW5zZm9ybWF0aW9uIHJvdXRpbmVzIGFuZA0KLSAqIG90aGVyIHV0aWxpdHkgY29kZSB1c2VkIGJ5IHRoZSBqcGVndHJhbiBzYW1wbGUgYXBwbGljYXRpb24uICBUaGVzZSBhcmUNCi0gKiBOT1QgcGFydCBvZiB0aGUgY29yZSBKUEVHIGxpYnJhcnkuICBCdXQgd2Uga2VlcCB0aGVzZSByb3V0aW5lcyBzZXBhcmF0ZQ0KLSAqIGZyb20ganBlZ3RyYW4uYyB0byBlYXNlIHRoZSB0YXNrIG9mIG1haW50YWluaW5nIGpwZWd0cmFuLWxpa2UgcHJvZ3JhbXMNCi0gKiB0aGF0IGhhdmUgb3RoZXIgdXNlciBpbnRlcmZhY2VzLg0KLSAqDQotICogTk9URTogYWxsIHRoZSByb3V0aW5lcyBkZWNsYXJlZCBoZXJlIGhhdmUgdmVyeSBzcGVjaWZpYyByZXF1aXJlbWVudHMNCi0gKiBhYm91dCB3aGVuIHRoZXkgYXJlIHRvIGJlIGV4ZWN1dGVkIGR1cmluZyB0aGUgcmVhZGluZyBhbmQgd3JpdGluZyBvZiB0aGUNCi0gKiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGZpbGVzLiAgU2VlIHRoZSBjb21tZW50cyBpbiB0cmFuc3VwcC5jLCBvciBzZWUNCi0gKiBqcGVndHJhbi5jIGZvciBhbiBleGFtcGxlIG9mIGNvcnJlY3QgdXNhZ2UuDQotICovDQotDQotLyogSWYgeW91IGhhcHBlbiBub3QgdG8gd2FudCB0aGUgaW1hZ2UgdHJhbnNmb3JtIHN1cHBvcnQsIGRpc2FibGUgaXQgaGVyZSAqLw0KLSNpZm5kZWYgVFJBTlNGT1JNU19TVVBQT1JURUQNCi0jZGVmaW5lIFRSQU5TRk9STVNfU1VQUE9SVEVEIDEJCS8qIDAgZGlzYWJsZXMgdHJhbnNmb3JtIGNvZGUgKi8NCi0jZW5kaWYNCi0NCi0vKiBTaG9ydCBmb3JtcyBvZiBleHRlcm5hbCBuYW1lcyBmb3Igc3lzdGVtcyB3aXRoIGJyYWluLWRhbWFnZWQgbGlua2Vycy4gKi8NCi0NCi0jaWZkZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUw0KLSNkZWZpbmUganRyYW5zZm9ybV9yZXF1ZXN0X3dvcmtzcGFjZQkJalRyUmVxdWVzdA0KLSNkZWZpbmUganRyYW5zZm9ybV9hZGp1c3RfcGFyYW1ldGVycwkJalRyQWRqdXN0DQotI2RlZmluZSBqdHJhbnNmb3JtX2V4ZWN1dGVfdHJhbnNmb3JtYXRpb24JalRyRXhlYw0KLSNkZWZpbmUgamNvcHlfbWFya2Vyc19zZXR1cAkJCWpDTXJrU2V0dXANCi0jZGVmaW5lIGpjb3B5X21hcmtlcnNfZXhlY3V0ZQkJCWpDTXJrRXhlYw0KLSNlbmRpZiAvKiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTICovDQotDQotDQotLyoNCi0gKiBDb2RlcyBmb3Igc3VwcG9ydGVkIHR5cGVzIG9mIGltYWdlIHRyYW5zZm9ybWF0aW9ucy4NCi0gKi8NCi0NCi10eXBlZGVmIGVudW0gew0KLQlKWEZPUk1fTk9ORSwJCS8qIG5vIHRyYW5zZm9ybWF0aW9uICovDQotCUpYRk9STV9GTElQX0gsCQkvKiBob3Jpem9udGFsIGZsaXAgKi8NCi0JSlhGT1JNX0ZMSVBfViwJCS8qIHZlcnRpY2FsIGZsaXAgKi8NCi0JSlhGT1JNX1RSQU5TUE9TRSwJLyogdHJhbnNwb3NlIGFjcm9zcyBVTC10by1MUiBheGlzICovDQotCUpYRk9STV9UUkFOU1ZFUlNFLAkvKiB0cmFuc3Bvc2UgYWNyb3NzIFVSLXRvLUxMIGF4aXMgKi8NCi0JSlhGT1JNX1JPVF85MCwJCS8qIDkwLWRlZ3JlZSBjbG9ja3dpc2Ugcm90YXRpb24gKi8NCi0JSlhGT1JNX1JPVF8xODAsCQkvKiAxODAtZGVncmVlIHJvdGF0aW9uICovDQotCUpYRk9STV9ST1RfMjcwCQkvKiAyNzAtZGVncmVlIGNsb2Nrd2lzZSAob3IgOTAgY2N3KSAqLw0KLX0gSlhGT1JNX0NPREU7DQotDQotLyoNCi0gKiBBbHRob3VnaCByb3RhdGluZyBhbmQgZmxpcHBpbmcgZGF0YSBleHByZXNzZWQgYXMgRENUIGNvZWZmaWNpZW50cyBpcyBub3QNCi0gKiBoYXJkLCB0aGVyZSBpcyBhbiBhc3ltbWV0cnkgaW4gdGhlIEpQRUcgZm9ybWF0IHNwZWNpZmljYXRpb24gZm9yIGltYWdlcw0KLSAqIHdob3NlIGRpbWVuc2lvbnMgYXJlbid0IG11bHRpcGxlcyBvZiB0aGUgaU1DVSBzaXplLiAgVGhlIHJpZ2h0IGFuZCBib3R0b20NCi0gKiBpbWFnZSBlZGdlcyBhcmUgcGFkZGVkIG91dCB0byB0aGUgbmV4dCBpTUNVIGJvdW5kYXJ5IHdpdGgganVuayBkYXRhOyBidXQNCi0gKiBubyBwYWRkaW5nIGlzIHBvc3NpYmxlIGF0IHRoZSB0b3AgYW5kIGxlZnQgZWRnZXMuICBJZiB3ZSB3ZXJlIHRvIGZsaXANCi0gKiB0aGUgd2hvbGUgaW1hZ2UgaW5jbHVkaW5nIHRoZSBwYWQgZGF0YSwgdGhlbiBwYWQgZ2FyYmFnZSB3b3VsZCBiZWNvbWUNCi0gKiB2aXNpYmxlIGF0IHRoZSB0b3AgYW5kL29yIGxlZnQsIGFuZCByZWFsIHBpeGVscyB3b3VsZCBkaXNhcHBlYXIgaW50byB0aGUNCi0gKiBwYWQgbWFyZ2lucyAtLS0gcGVyaGFwcyBwZXJtYW5lbnRseSwgc2luY2UgZW5jb2RlcnMgJiBkZWNvZGVycyBtYXkgbm90DQotICogYm90aGVyIHRvIHByZXNlcnZlIERDVCBibG9ja3MgdGhhdCBhcHBlYXIgdG8gYmUgY29tcGxldGVseSBvdXRzaWRlIHRoZQ0KLSAqIG5vbWluYWwgaW1hZ2UgYXJlYS4gIFNvLCB3ZSBoYXZlIHRvIGV4Y2x1ZGUgYW55IHBhcnRpYWwgaU1DVXMgZnJvbSB0aGUNCi0gKiBiYXNpYyB0cmFuc2Zvcm1hdGlvbi4NCi0gKg0KLSAqIFRyYW5zcG9zZSBpcyB0aGUgb25seSB0cmFuc2Zvcm1hdGlvbiB0aGF0IGNhbiBoYW5kbGUgcGFydGlhbCBpTUNVcyBhdCB0aGUNCi0gKiByaWdodCBhbmQgYm90dG9tIGVkZ2VzIGNvbXBsZXRlbHkgY2xlYW5seS4gIGZsaXBfaCBjYW4gZmxpcCBwYXJ0aWFsIGlNQ1VzDQotICogYXQgdGhlIGJvdHRvbSwgYnV0IGxlYXZlcyBhbnkgcGFydGlhbCBpTUNVcyBhdCB0aGUgcmlnaHQgZWRnZSB1bnRvdWNoZWQuDQotICogU2ltaWxhcmx5IGZsaXBfdiBsZWF2ZXMgYW55IHBhcnRpYWwgaU1DVXMgYXQgdGhlIGJvdHRvbSBlZGdlIHVudG91Y2hlZC4NCi0gKiBUaGUgb3RoZXIgdHJhbnNmb3JtcyBhcmUgZGVmaW5lZCBhcyBjb21iaW5hdGlvbnMgb2YgdGhlc2UgYmFzaWMgdHJhbnNmb3Jtcw0KLSAqIGFuZCBwcm9jZXNzIGVkZ2UgYmxvY2tzIGluIGEgd2F5IHRoYXQgcHJlc2VydmVzIHRoZSBlcXVpdmFsZW5jZS4NCi0gKg0KLSAqIFRoZSAidHJpbSIgb3B0aW9uIGNhdXNlcyB1bnRyYW5zZm9ybWFibGUgcGFydGlhbCBpTUNVcyB0byBiZSBkcm9wcGVkOw0KLSAqIHRoaXMgaXMgbm90IHN0cmljdGx5IGxvc3NsZXNzLCBidXQgaXQgdXN1YWxseSBnaXZlcyB0aGUgYmVzdC1sb29raW5nDQotICogcmVzdWx0IGZvciBvZGQtc2l6ZSBpbWFnZXMuICBOb3RlIHRoYXQgd2hlbiB0aGlzIG9wdGlvbiBpcyBhY3RpdmUsDQotICogdGhlIGV4cGVjdGVkIG1hdGhlbWF0aWNhbCBlcXVpdmFsZW5jZXMgYmV0d2VlbiB0aGUgdHJhbnNmb3JtcyBtYXkgbm90IGhvbGQuDQotICogKEZvciBleGFtcGxlLCAtcm90IDI3MCAtdHJpbSB0cmltcyBvbmx5IHRoZSBib3R0b20gZWRnZSwgYnV0IC1yb3QgOTAgLXRyaW0NCi0gKiBmb2xsb3dlZCBieSAtcm90IDE4MCAtdHJpbSB0cmltcyBib3RoIGVkZ2VzLikNCi0gKg0KLSAqIFdlIGFsc28gb2ZmZXIgYSAiZm9yY2UgdG8gZ3JheXNjYWxlIiBvcHRpb24sIHdoaWNoIHNpbXBseSBkaXNjYXJkcyB0aGUNCi0gKiBjaHJvbWluYW5jZSBjaGFubmVscyBvZiBhIFlDYkNyIGltYWdlLiAgVGhpcyBpcyBsb3NzbGVzcyBpbiB0aGUgc2Vuc2UgdGhhdA0KLSAqIHRoZSBsdW1pbmFuY2UgY2hhbm5lbCBpcyBwcmVzZXJ2ZWQgZXhhY3RseS4gIEl0J3Mgbm90IHRoZSBzYW1lIGtpbmQgb2YNCi0gKiB0aGluZyBhcyB0aGUgcm90YXRlL2ZsaXAgdHJhbnNmb3JtYXRpb25zLCBidXQgaXQncyBjb252ZW5pZW50IHRvIGhhbmRsZSBpdA0KLSAqIGFzIHBhcnQgb2YgdGhpcyBwYWNrYWdlLCBtYWlubHkgYmVjYXVzZSB0aGUgdHJhbnNmb3JtYXRpb24gcm91dGluZXMgaGF2ZSB0bw0KLSAqIGJlIGF3YXJlIG9mIHRoZSBvcHRpb24gdG8ga25vdyBob3cgbWFueSBjb21wb25lbnRzIHRvIHdvcmsgb24uDQotICovDQotDQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgLyogT3B0aW9uczogc2V0IGJ5IGNhbGxlciAqLw0KLSAgSlhGT1JNX0NPREUgdHJhbnNmb3JtOwkvKiBpbWFnZSB0cmFuc2Zvcm0gb3BlcmF0b3IgKi8NCi0gIGJvb2xlYW4gdHJpbTsJCQkvKiBpZiBUUlVFLCB0cmltIHBhcnRpYWwgTUNVcyBhcyBuZWVkZWQgKi8NCi0gIGJvb2xlYW4gZm9yY2VfZ3JheXNjYWxlOwkvKiBpZiBUUlVFLCBjb252ZXJ0IGNvbG9yIGltYWdlIHRvIGdyYXlzY2FsZSAqLw0KLQ0KLSAgLyogSW50ZXJuYWwgd29ya3NwYWNlOiBjYWxsZXIgc2hvdWxkIG5vdCB0b3VjaCB0aGVzZSAqLw0KLSAgaW50IG51bV9jb21wb25lbnRzOwkJLyogIyBvZiBjb21wb25lbnRzIGluIHdvcmtzcGFjZSAqLw0KLSAganZpcnRfYmFycmF5X3B0ciAqIHdvcmtzcGFjZV9jb2VmX2FycmF5czsgLyogd29ya3NwYWNlIGZvciB0cmFuc2Zvcm1hdGlvbnMgKi8NCi19IGpwZWdfdHJhbnNmb3JtX2luZm87DQotDQotDQotI2lmIFRSQU5TRk9STVNfU1VQUE9SVEVEDQotDQotLyogUmVxdWVzdCBhbnkgcmVxdWlyZWQgd29ya3NwYWNlICovDQotRVhURVJOKHZvaWQpIGp0cmFuc2Zvcm1fcmVxdWVzdF93b3Jrc3BhY2UNCi0JSlBQKChqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8sIGpwZWdfdHJhbnNmb3JtX2luZm8gKmluZm8pKTsNCi0vKiBBZGp1c3Qgb3V0cHV0IGltYWdlIHBhcmFtZXRlcnMgKi8NCi1FWFRFUk4oanZpcnRfYmFycmF5X3B0ciAqKSBqdHJhbnNmb3JtX2FkanVzdF9wYXJhbWV0ZXJzDQotCUpQUCgoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLA0KLQkgICAgIGp2aXJ0X2JhcnJheV9wdHIgKnNyY19jb2VmX2FycmF5cywNCi0JICAgICBqcGVnX3RyYW5zZm9ybV9pbmZvICppbmZvKSk7DQotLyogRXhlY3V0ZSB0aGUgYWN0dWFsIHRyYW5zZm9ybWF0aW9uLCBpZiBhbnkgKi8NCi1FWFRFUk4odm9pZCkganRyYW5zZm9ybV9leGVjdXRlX3RyYW5zZm9ybWF0aW9uDQotCUpQUCgoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLA0KLQkgICAgIGp2aXJ0X2JhcnJheV9wdHIgKnNyY19jb2VmX2FycmF5cywNCi0JICAgICBqcGVnX3RyYW5zZm9ybV9pbmZvICppbmZvKSk7DQotDQotI2VuZGlmIC8qIFRSQU5TRk9STVNfU1VQUE9SVEVEICovDQotDQotDQotLyoNCi0gKiBTdXBwb3J0IGZvciBjb3B5aW5nIG9wdGlvbmFsIG1hcmtlcnMgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24gZmlsZS4NCi0gKi8NCi0NCi10eXBlZGVmIGVudW0gew0KLQlKQ09QWU9QVF9OT05FLAkJLyogY29weSBubyBvcHRpb25hbCBtYXJrZXJzICovDQotCUpDT1BZT1BUX0NPTU1FTlRTLAkvKiBjb3B5IG9ubHkgY29tbWVudCAoQ09NKSBtYXJrZXJzICovDQotCUpDT1BZT1BUX0FMTAkJLyogY29weSBhbGwgb3B0aW9uYWwgbWFya2VycyAqLw0KLX0gSkNPUFlfT1BUSU9OOw0KLQ0KLSNkZWZpbmUgSkNPUFlPUFRfREVGQVVMVCAgSkNPUFlPUFRfQ09NTUVOVFMJLyogcmVjb21tZW5kZWQgZGVmYXVsdCAqLw0KLQ0KLS8qIFNldHVwIGRlY29tcHJlc3Npb24gb2JqZWN0IHRvIHNhdmUgZGVzaXJlZCBtYXJrZXJzIGluIG1lbW9yeSAqLw0KLUVYVEVSTih2b2lkKSBqY29weV9tYXJrZXJzX3NldHVwDQotCUpQUCgoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBKQ09QWV9PUFRJT04gb3B0aW9uKSk7DQotLyogQ29weSBtYXJrZXJzIHNhdmVkIGluIHRoZSBnaXZlbiBzb3VyY2Ugb2JqZWN0IHRvIHRoZSBkZXN0aW5hdGlvbiBvYmplY3QgKi8NCi1FWFRFUk4odm9pZCkgamNvcHlfbWFya2Vyc19leGVjdXRlDQotCUpQUCgoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLA0KLQkgICAgIEpDT1BZX09QVElPTiBvcHRpb24pKTsNCisvKgorICogdHJhbnN1cHAuaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBkZWNsYXJhdGlvbnMgZm9yIGltYWdlIHRyYW5zZm9ybWF0aW9uIHJvdXRpbmVzIGFuZAorICogb3RoZXIgdXRpbGl0eSBjb2RlIHVzZWQgYnkgdGhlIGpwZWd0cmFuIHNhbXBsZSBhcHBsaWNhdGlvbi4gIFRoZXNlIGFyZQorICogTk9UIHBhcnQgb2YgdGhlIGNvcmUgSlBFRyBsaWJyYXJ5LiAgQnV0IHdlIGtlZXAgdGhlc2Ugcm91dGluZXMgc2VwYXJhdGUKKyAqIGZyb20ganBlZ3RyYW4uYyB0byBlYXNlIHRoZSB0YXNrIG9mIG1haW50YWluaW5nIGpwZWd0cmFuLWxpa2UgcHJvZ3JhbXMKKyAqIHRoYXQgaGF2ZSBvdGhlciB1c2VyIGludGVyZmFjZXMuCisgKgorICogTk9URTogYWxsIHRoZSByb3V0aW5lcyBkZWNsYXJlZCBoZXJlIGhhdmUgdmVyeSBzcGVjaWZpYyByZXF1aXJlbWVudHMKKyAqIGFib3V0IHdoZW4gdGhleSBhcmUgdG8gYmUgZXhlY3V0ZWQgZHVyaW5nIHRoZSByZWFkaW5nIGFuZCB3cml0aW5nIG9mIHRoZQorICogc291cmNlIGFuZCBkZXN0aW5hdGlvbiBmaWxlcy4gIFNlZSB0aGUgY29tbWVudHMgaW4gdHJhbnN1cHAuYywgb3Igc2VlCisgKiBqcGVndHJhbi5jIGZvciBhbiBleGFtcGxlIG9mIGNvcnJlY3QgdXNhZ2UuCisgKi8KKworLyogSWYgeW91IGhhcHBlbiBub3QgdG8gd2FudCB0aGUgaW1hZ2UgdHJhbnNmb3JtIHN1cHBvcnQsIGRpc2FibGUgaXQgaGVyZSAqLworI2lmbmRlZiBUUkFOU0ZPUk1TX1NVUFBPUlRFRAorI2RlZmluZSBUUkFOU0ZPUk1TX1NVUFBPUlRFRCAxCQkvKiAwIGRpc2FibGVzIHRyYW5zZm9ybSBjb2RlICovCisjZW5kaWYKKworLyogU2hvcnQgZm9ybXMgb2YgZXh0ZXJuYWwgbmFtZXMgZm9yIHN5c3RlbXMgd2l0aCBicmFpbi1kYW1hZ2VkIGxpbmtlcnMuICovCisKKyNpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCisjZGVmaW5lIGp0cmFuc2Zvcm1fcmVxdWVzdF93b3Jrc3BhY2UJCWpUclJlcXVlc3QKKyNkZWZpbmUganRyYW5zZm9ybV9hZGp1c3RfcGFyYW1ldGVycwkJalRyQWRqdXN0CisjZGVmaW5lIGp0cmFuc2Zvcm1fZXhlY3V0ZV90cmFuc2Zvcm1hdGlvbglqVHJFeGVjCisjZGVmaW5lIGpjb3B5X21hcmtlcnNfc2V0dXAJCQlqQ01ya1NldHVwCisjZGVmaW5lIGpjb3B5X21hcmtlcnNfZXhlY3V0ZQkJCWpDTXJrRXhlYworI2VuZGlmIC8qIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMgKi8KKworCisvKgorICogQ29kZXMgZm9yIHN1cHBvcnRlZCB0eXBlcyBvZiBpbWFnZSB0cmFuc2Zvcm1hdGlvbnMuCisgKi8KKwordHlwZWRlZiBlbnVtIHsKKwlKWEZPUk1fTk9ORSwJCS8qIG5vIHRyYW5zZm9ybWF0aW9uICovCisJSlhGT1JNX0ZMSVBfSCwJCS8qIGhvcml6b250YWwgZmxpcCAqLworCUpYRk9STV9GTElQX1YsCQkvKiB2ZXJ0aWNhbCBmbGlwICovCisJSlhGT1JNX1RSQU5TUE9TRSwJLyogdHJhbnNwb3NlIGFjcm9zcyBVTC10by1MUiBheGlzICovCisJSlhGT1JNX1RSQU5TVkVSU0UsCS8qIHRyYW5zcG9zZSBhY3Jvc3MgVVItdG8tTEwgYXhpcyAqLworCUpYRk9STV9ST1RfOTAsCQkvKiA5MC1kZWdyZWUgY2xvY2t3aXNlIHJvdGF0aW9uICovCisJSlhGT1JNX1JPVF8xODAsCQkvKiAxODAtZGVncmVlIHJvdGF0aW9uICovCisJSlhGT1JNX1JPVF8yNzAJCS8qIDI3MC1kZWdyZWUgY2xvY2t3aXNlIChvciA5MCBjY3cpICovCit9IEpYRk9STV9DT0RFOworCisvKgorICogQWx0aG91Z2ggcm90YXRpbmcgYW5kIGZsaXBwaW5nIGRhdGEgZXhwcmVzc2VkIGFzIERDVCBjb2VmZmljaWVudHMgaXMgbm90CisgKiBoYXJkLCB0aGVyZSBpcyBhbiBhc3ltbWV0cnkgaW4gdGhlIEpQRUcgZm9ybWF0IHNwZWNpZmljYXRpb24gZm9yIGltYWdlcworICogd2hvc2UgZGltZW5zaW9ucyBhcmVuJ3QgbXVsdGlwbGVzIG9mIHRoZSBpTUNVIHNpemUuICBUaGUgcmlnaHQgYW5kIGJvdHRvbQorICogaW1hZ2UgZWRnZXMgYXJlIHBhZGRlZCBvdXQgdG8gdGhlIG5leHQgaU1DVSBib3VuZGFyeSB3aXRoIGp1bmsgZGF0YTsgYnV0CisgKiBubyBwYWRkaW5nIGlzIHBvc3NpYmxlIGF0IHRoZSB0b3AgYW5kIGxlZnQgZWRnZXMuICBJZiB3ZSB3ZXJlIHRvIGZsaXAKKyAqIHRoZSB3aG9sZSBpbWFnZSBpbmNsdWRpbmcgdGhlIHBhZCBkYXRhLCB0aGVuIHBhZCBnYXJiYWdlIHdvdWxkIGJlY29tZQorICogdmlzaWJsZSBhdCB0aGUgdG9wIGFuZC9vciBsZWZ0LCBhbmQgcmVhbCBwaXhlbHMgd291bGQgZGlzYXBwZWFyIGludG8gdGhlCisgKiBwYWQgbWFyZ2lucyAtLS0gcGVyaGFwcyBwZXJtYW5lbnRseSwgc2luY2UgZW5jb2RlcnMgJiBkZWNvZGVycyBtYXkgbm90CisgKiBib3RoZXIgdG8gcHJlc2VydmUgRENUIGJsb2NrcyB0aGF0IGFwcGVhciB0byBiZSBjb21wbGV0ZWx5IG91dHNpZGUgdGhlCisgKiBub21pbmFsIGltYWdlIGFyZWEuICBTbywgd2UgaGF2ZSB0byBleGNsdWRlIGFueSBwYXJ0aWFsIGlNQ1VzIGZyb20gdGhlCisgKiBiYXNpYyB0cmFuc2Zvcm1hdGlvbi4KKyAqCisgKiBUcmFuc3Bvc2UgaXMgdGhlIG9ubHkgdHJhbnNmb3JtYXRpb24gdGhhdCBjYW4gaGFuZGxlIHBhcnRpYWwgaU1DVXMgYXQgdGhlCisgKiByaWdodCBhbmQgYm90dG9tIGVkZ2VzIGNvbXBsZXRlbHkgY2xlYW5seS4gIGZsaXBfaCBjYW4gZmxpcCBwYXJ0aWFsIGlNQ1VzCisgKiBhdCB0aGUgYm90dG9tLCBidXQgbGVhdmVzIGFueSBwYXJ0aWFsIGlNQ1VzIGF0IHRoZSByaWdodCBlZGdlIHVudG91Y2hlZC4KKyAqIFNpbWlsYXJseSBmbGlwX3YgbGVhdmVzIGFueSBwYXJ0aWFsIGlNQ1VzIGF0IHRoZSBib3R0b20gZWRnZSB1bnRvdWNoZWQuCisgKiBUaGUgb3RoZXIgdHJhbnNmb3JtcyBhcmUgZGVmaW5lZCBhcyBjb21iaW5hdGlvbnMgb2YgdGhlc2UgYmFzaWMgdHJhbnNmb3JtcworICogYW5kIHByb2Nlc3MgZWRnZSBibG9ja3MgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgdGhlIGVxdWl2YWxlbmNlLgorICoKKyAqIFRoZSAidHJpbSIgb3B0aW9uIGNhdXNlcyB1bnRyYW5zZm9ybWFibGUgcGFydGlhbCBpTUNVcyB0byBiZSBkcm9wcGVkOworICogdGhpcyBpcyBub3Qgc3RyaWN0bHkgbG9zc2xlc3MsIGJ1dCBpdCB1c3VhbGx5IGdpdmVzIHRoZSBiZXN0LWxvb2tpbmcKKyAqIHJlc3VsdCBmb3Igb2RkLXNpemUgaW1hZ2VzLiAgTm90ZSB0aGF0IHdoZW4gdGhpcyBvcHRpb24gaXMgYWN0aXZlLAorICogdGhlIGV4cGVjdGVkIG1hdGhlbWF0aWNhbCBlcXVpdmFsZW5jZXMgYmV0d2VlbiB0aGUgdHJhbnNmb3JtcyBtYXkgbm90IGhvbGQuCisgKiAoRm9yIGV4YW1wbGUsIC1yb3QgMjcwIC10cmltIHRyaW1zIG9ubHkgdGhlIGJvdHRvbSBlZGdlLCBidXQgLXJvdCA5MCAtdHJpbQorICogZm9sbG93ZWQgYnkgLXJvdCAxODAgLXRyaW0gdHJpbXMgYm90aCBlZGdlcy4pCisgKgorICogV2UgYWxzbyBvZmZlciBhICJmb3JjZSB0byBncmF5c2NhbGUiIG9wdGlvbiwgd2hpY2ggc2ltcGx5IGRpc2NhcmRzIHRoZQorICogY2hyb21pbmFuY2UgY2hhbm5lbHMgb2YgYSBZQ2JDciBpbWFnZS4gIFRoaXMgaXMgbG9zc2xlc3MgaW4gdGhlIHNlbnNlIHRoYXQKKyAqIHRoZSBsdW1pbmFuY2UgY2hhbm5lbCBpcyBwcmVzZXJ2ZWQgZXhhY3RseS4gIEl0J3Mgbm90IHRoZSBzYW1lIGtpbmQgb2YKKyAqIHRoaW5nIGFzIHRoZSByb3RhdGUvZmxpcCB0cmFuc2Zvcm1hdGlvbnMsIGJ1dCBpdCdzIGNvbnZlbmllbnQgdG8gaGFuZGxlIGl0CisgKiBhcyBwYXJ0IG9mIHRoaXMgcGFja2FnZSwgbWFpbmx5IGJlY2F1c2UgdGhlIHRyYW5zZm9ybWF0aW9uIHJvdXRpbmVzIGhhdmUgdG8KKyAqIGJlIGF3YXJlIG9mIHRoZSBvcHRpb24gdG8ga25vdyBob3cgbWFueSBjb21wb25lbnRzIHRvIHdvcmsgb24uCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAvKiBPcHRpb25zOiBzZXQgYnkgY2FsbGVyICovCisgIEpYRk9STV9DT0RFIHRyYW5zZm9ybTsJLyogaW1hZ2UgdHJhbnNmb3JtIG9wZXJhdG9yICovCisgIGJvb2xlYW4gdHJpbTsJCQkvKiBpZiBUUlVFLCB0cmltIHBhcnRpYWwgTUNVcyBhcyBuZWVkZWQgKi8KKyAgYm9vbGVhbiBmb3JjZV9ncmF5c2NhbGU7CS8qIGlmIFRSVUUsIGNvbnZlcnQgY29sb3IgaW1hZ2UgdG8gZ3JheXNjYWxlICovCisKKyAgLyogSW50ZXJuYWwgd29ya3NwYWNlOiBjYWxsZXIgc2hvdWxkIG5vdCB0b3VjaCB0aGVzZSAqLworICBpbnQgbnVtX2NvbXBvbmVudHM7CQkvKiAjIG9mIGNvbXBvbmVudHMgaW4gd29ya3NwYWNlICovCisgIGp2aXJ0X2JhcnJheV9wdHIgKiB3b3Jrc3BhY2VfY29lZl9hcnJheXM7IC8qIHdvcmtzcGFjZSBmb3IgdHJhbnNmb3JtYXRpb25zICovCit9IGpwZWdfdHJhbnNmb3JtX2luZm87CisKKworI2lmIFRSQU5TRk9STVNfU1VQUE9SVEVECisKKy8qIFJlcXVlc3QgYW55IHJlcXVpcmVkIHdvcmtzcGFjZSAqLworRVhURVJOKHZvaWQpIGp0cmFuc2Zvcm1fcmVxdWVzdF93b3Jrc3BhY2UKKwlKUFAoKGpfZGVjb21wcmVzc19wdHIgc3JjaW5mbywganBlZ190cmFuc2Zvcm1faW5mbyAqaW5mbykpOworLyogQWRqdXN0IG91dHB1dCBpbWFnZSBwYXJhbWV0ZXJzICovCitFWFRFUk4oanZpcnRfYmFycmF5X3B0ciAqKSBqdHJhbnNmb3JtX2FkanVzdF9wYXJhbWV0ZXJzCisJSlBQKChqX2RlY29tcHJlc3NfcHRyIHNyY2luZm8sIGpfY29tcHJlc3NfcHRyIGRzdGluZm8sCisJICAgICBqdmlydF9iYXJyYXlfcHRyICpzcmNfY29lZl9hcnJheXMsCisJICAgICBqcGVnX3RyYW5zZm9ybV9pbmZvICppbmZvKSk7CisvKiBFeGVjdXRlIHRoZSBhY3R1YWwgdHJhbnNmb3JtYXRpb24sIGlmIGFueSAqLworRVhURVJOKHZvaWQpIGp0cmFuc2Zvcm1fZXhlY3V0ZV90cmFuc2Zvcm1hdGlvbgorCUpQUCgoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAorCSAgICAganZpcnRfYmFycmF5X3B0ciAqc3JjX2NvZWZfYXJyYXlzLAorCSAgICAganBlZ190cmFuc2Zvcm1faW5mbyAqaW5mbykpOworCisjZW5kaWYgLyogVFJBTlNGT1JNU19TVVBQT1JURUQgKi8KKworCisvKgorICogU3VwcG9ydCBmb3IgY29weWluZyBvcHRpb25hbCBtYXJrZXJzIGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9uIGZpbGUuCisgKi8KKwordHlwZWRlZiBlbnVtIHsKKwlKQ09QWU9QVF9OT05FLAkJLyogY29weSBubyBvcHRpb25hbCBtYXJrZXJzICovCisJSkNPUFlPUFRfQ09NTUVOVFMsCS8qIGNvcHkgb25seSBjb21tZW50IChDT00pIG1hcmtlcnMgKi8KKwlKQ09QWU9QVF9BTEwJCS8qIGNvcHkgYWxsIG9wdGlvbmFsIG1hcmtlcnMgKi8KK30gSkNPUFlfT1BUSU9OOworCisjZGVmaW5lIEpDT1BZT1BUX0RFRkFVTFQgIEpDT1BZT1BUX0NPTU1FTlRTCS8qIHJlY29tbWVuZGVkIGRlZmF1bHQgKi8KKworLyogU2V0dXAgZGVjb21wcmVzc2lvbiBvYmplY3QgdG8gc2F2ZSBkZXNpcmVkIG1hcmtlcnMgaW4gbWVtb3J5ICovCitFWFRFUk4odm9pZCkgamNvcHlfbWFya2Vyc19zZXR1cAorCUpQUCgoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBKQ09QWV9PUFRJT04gb3B0aW9uKSk7CisvKiBDb3B5IG1hcmtlcnMgc2F2ZWQgaW4gdGhlIGdpdmVuIHNvdXJjZSBvYmplY3QgdG8gdGhlIGRlc3RpbmF0aW9uIG9iamVjdCAqLworRVhURVJOKHZvaWQpIGpjb3B5X21hcmtlcnNfZXhlY3V0ZQorCUpQUCgoal9kZWNvbXByZXNzX3B0ciBzcmNpbmZvLCBqX2NvbXByZXNzX3B0ciBkc3RpbmZvLAorCSAgICAgSkNPUFlfT1BUSU9OIG9wdGlvbikpOwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjcnQvZXh0ZW5zaW9uLmggYi9jb3JlL3NyYy9meGNydC9leHRlbnNpb24uaAppbmRleCBiZjVjNWVjLi44ZDk1OTdiIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNydC9leHRlbnNpb24uaAorKysgYi9jb3JlL3NyYy9meGNydC9leHRlbnNpb24uaApAQCAtMSw0MTMgKzEsNDEzIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GWENSVF9FWFRFTlNJT05fSU1QXw0KLSNkZWZpbmUgX0ZYQ1JUX0VYVEVOU0lPTl9JTVBfDQotY2xhc3MgSUZYQ1JUX0ZpbGVBY2Nlc3MNCi17DQotcHVibGljOg0KLSAgICB2aXJ0dWFsIH5JRlhDUlRfRmlsZUFjY2VzcygpIHt9DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJT3BlbihGWF9CU1RSIGZpbGVOYW1lLCBGWF9EV09SRCBkd01vZGUpID0gMDsNCi0gICAgdmlydHVhbCBGWF9CT09MCQlPcGVuKEZYX1dTVFIgZmlsZU5hbWUsIEZYX0RXT1JEIGR3TW9kZSkgPSAwOw0KLSAgICB2aXJ0dWFsIHZvaWQJCUNsb3NlKCkgPSAwOw0KLSAgICB2aXJ0dWFsIHZvaWQJCVJlbGVhc2UoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpID0gMDsNCi0gICAgdmlydHVhbCBGWF9GSUxFU0laRQlHZXRTaXplKCkgY29uc3QgPSAwOw0KLSAgICB2aXJ0dWFsIEZYX0ZJTEVTSVpFCUdldFBvc2l0aW9uKCkgY29uc3QgPSAwOw0KLSAgICB2aXJ0dWFsIEZYX0ZJTEVTSVpFCVNldFBvc2l0aW9uKEZYX0ZJTEVTSVpFIHBvcykgPSAwOw0KLSAgICB2aXJ0dWFsIHNpemVfdAkJUmVhZCh2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIpID0gMDsNCi0gICAgdmlydHVhbCBzaXplX3QJCVdyaXRlKGNvbnN0IHZvaWQqIHBCdWZmZXIsIHNpemVfdCBzekJ1ZmZlcikgPSAwOw0KLSAgICB2aXJ0dWFsIHNpemVfdAkJUmVhZFBvcyh2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIsIEZYX0ZJTEVTSVpFIHBvcykgPSAwOw0KLSAgICB2aXJ0dWFsIHNpemVfdAkJV3JpdGVQb3MoY29uc3Qgdm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyLCBGWF9GSUxFU0laRSBwb3MpID0gMDsNCi0gICAgdmlydHVhbCBGWF9CT09MCQlGbHVzaCgpID0gMDsNCi0gICAgdmlydHVhbCBGWF9CT09MCQlUcnVuY2F0ZShGWF9GSUxFU0laRSBzekZpbGUpID0gMDsNCi19Ow0KLUlGWENSVF9GaWxlQWNjZXNzKglGWENSVF9GaWxlQWNjZXNzX0NyZWF0ZShJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7DQotY2xhc3MgQ0ZYX0NSVEZpbGVTdHJlYW0gOiBwdWJsaWMgSUZYX0ZpbGVTdHJlYW0sIHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgQ0ZYX0NSVEZpbGVTdHJlYW0oSUZYQ1JUX0ZpbGVBY2Nlc3MqIHBGQSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikgOiBtX3BBbGxvY2F0b3IocEFsbG9jYXRvciksIG1fcEZpbGUocEZBKSwgbV9kd0NvdW50KDEpLCBtX2JVc2VSYW5nZShGQUxTRSksIG1fbk9mZnNldCgwKSwgbV9uU2l6ZSgwKSB7fQ0KLSAgICB+Q0ZYX0NSVEZpbGVTdHJlYW0oKQ0KLSAgICB7DQotICAgICAgICBpZiAobV9wRmlsZSkgew0KLSAgICAgICAgICAgIG1fcEZpbGUtPlJlbGVhc2UobV9wQWxsb2NhdG9yKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICB2aXJ0dWFsIElGWF9GaWxlU3RyZWFtKgkJUmV0YWluKCkNCi0gICAgew0KLSAgICAgICAgbV9kd0NvdW50ICsrOw0KLSAgICAgICAgcmV0dXJuIHRoaXM7DQotICAgIH0NCi0gICAgdmlydHVhbCB2b2lkCQkJCVJlbGVhc2UoKQ0KLSAgICB7DQotICAgICAgICBGWF9EV09SRCBuQ291bnQgPSAtLSBtX2R3Q291bnQ7DQotICAgICAgICBpZiAoIW5Db3VudCkgew0KLSAgICAgICAgICAgIGlmIChtX3BBbGxvY2F0b3IpIHsNCi0gICAgICAgICAgICAgICAgRlhfRGVsZXRlQXRBbGxvY2F0b3IodGhpcywgbV9wQWxsb2NhdG9yLCBDRlhfQ1JURmlsZVN0cmVhbSk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXM7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHZpcnR1YWwgRlhfRklMRVNJWkUJCQlHZXRTaXplKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fYlVzZVJhbmdlID8gbV9uU2l6ZSA6IG1fcEZpbGUtPkdldFNpemUoKTsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJSXNFT0YoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gR2V0UG9zaXRpb24oKSA+PSBHZXRTaXplKCk7DQotICAgIH0NCi0gICAgdmlydHVhbCBGWF9GSUxFU0laRQkJCUdldFBvc2l0aW9uKCkNCi0gICAgew0KLSAgICAgICAgRlhfRklMRVNJWkUgcG9zID0gbV9wRmlsZS0+R2V0UG9zaXRpb24oKTsNCi0gICAgICAgIGlmIChtX2JVc2VSYW5nZSkgew0KLSAgICAgICAgICAgIHBvcyAtPSBtX25PZmZzZXQ7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gcG9zOw0KLSAgICB9DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCQlTZXRSYW5nZShGWF9GSUxFU0laRSBvZmZzZXQsIEZYX0ZJTEVTSVpFIHNpemUpDQotICAgIHsNCi0gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCArIHNpemUgPiBtX3BGaWxlLT5HZXRTaXplKCkpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBtX25PZmZzZXQgPSBvZmZzZXQsIG1fblNpemUgPSBzaXplOw0KLSAgICAgICAgbV9iVXNlUmFuZ2UgPSBUUlVFOw0KLSAgICAgICAgbV9wRmlsZS0+U2V0UG9zaXRpb24obV9uT2Zmc2V0KTsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIHZpcnR1YWwgdm9pZAkJCQlDbGVhclJhbmdlKCkNCi0gICAgew0KLSAgICAgICAgbV9iVXNlUmFuZ2UgPSBGQUxTRTsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJUmVhZEJsb2NrKHZvaWQqIGJ1ZmZlciwgRlhfRklMRVNJWkUgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkNCi0gICAgew0KLSAgICAgICAgaWYgKG1fYlVzZVJhbmdlKSB7DQotICAgICAgICAgICAgaWYgKG9mZnNldCArIHNpemUgPiAoc2l6ZV90KUdldFNpemUoKSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG9mZnNldCArPSBtX25PZmZzZXQ7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gKEZYX0JPT0wpbV9wRmlsZS0+UmVhZFBvcyhidWZmZXIsIHNpemUsIG9mZnNldCk7DQotICAgIH0NCi0gICAgdmlydHVhbCBzaXplX3QJCQkJUmVhZEJsb2NrKHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpDQotICAgIHsNCi0gICAgICAgIGlmIChtX2JVc2VSYW5nZSkgew0KLSAgICAgICAgICAgIEZYX0ZJTEVTSVpFIGF2YWlsU2l6ZSA9IG1fbk9mZnNldCArIG1fblNpemUgLSBtX3BGaWxlLT5HZXRQb3NpdGlvbigpOw0KLSAgICAgICAgICAgIGlmICgoc2l6ZV90KWF2YWlsU2l6ZSA8IHNpemUpIHsNCi0gICAgICAgICAgICAgICAgc2l6ZSAtPSBzaXplIC0gKHNpemVfdClhdmFpbFNpemU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIG1fcEZpbGUtPlJlYWQoYnVmZmVyLCBzaXplKTsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsCUZYX0JPT0wJCQkJV3JpdGVCbG9jayhjb25zdCB2b2lkKiBidWZmZXIsIEZYX0ZJTEVTSVpFIG9mZnNldCwgc2l6ZV90IHNpemUpDQotICAgIHsNCi0gICAgICAgIGlmIChtX2JVc2VSYW5nZSkgew0KLSAgICAgICAgICAgIG9mZnNldCArPSBtX25PZmZzZXQ7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gKEZYX0JPT0wpbV9wRmlsZS0+V3JpdGVQb3MoYnVmZmVyLCBzaXplLCBvZmZzZXQpOw0KLSAgICB9DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCQlGbHVzaCgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BGaWxlLT5GbHVzaCgpOw0KLSAgICB9DQotICAgIElGWF9BbGxvY2F0b3IqCQltX3BBbGxvY2F0b3I7DQotICAgIElGWENSVF9GaWxlQWNjZXNzKgltX3BGaWxlOw0KLSAgICBGWF9EV09SRAkJCW1fZHdDb3VudDsNCi0gICAgRlhfQk9PTAkJCQltX2JVc2VSYW5nZTsNCi0gICAgRlhfRklMRVNJWkUJCQltX25PZmZzZXQ7DQotICAgIEZYX0ZJTEVTSVpFCQkJbV9uU2l6ZTsNCi19Ow0KLSNkZWZpbmUgRlhfTUVNU1RSRUFNX0Jsb2NrU2l6ZQkJKDY0ICogMTAyNCkNCi0jZGVmaW5lIEZYX01FTVNUUkVBTV9Db25zZWN1dGl2ZQkweDAxDQotI2RlZmluZSBGWF9NRU1TVFJFQU1fVGFrZU92ZXIJCTB4MDINCi1jbGFzcyBDRlhfTWVtb3J5U3RyZWFtIDogcHVibGljIElGWF9NZW1vcnlTdHJlYW0sIHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgQ0ZYX01lbW9yeVN0cmVhbShGWF9CT09MIGJDb25zZWN1dGl2ZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikNCi0gICAgICAgIDogbV9CbG9ja3MocEFsbG9jYXRvcikNCi0gICAgICAgICwgbV9kd0NvdW50KDEpDQotICAgICAgICAsIG1fblRvdGFsU2l6ZSgwKQ0KLSAgICAgICAgLCBtX25DdXJTaXplKDApDQotICAgICAgICAsIG1fbkN1clBvcygwKQ0KLSAgICAgICAgLCBtX25Hcm93U2l6ZShGWF9NRU1TVFJFQU1fQmxvY2tTaXplKQ0KLSAgICAgICAgLCBtX2JVc2VSYW5nZShGQUxTRSkNCi0gICAgew0KLSAgICAgICAgbV9kd0ZsYWdzID0gRlhfTUVNU1RSRUFNX1Rha2VPdmVyIHwgKGJDb25zZWN1dGl2ZSA/IEZYX01FTVNUUkVBTV9Db25zZWN1dGl2ZSA6IDApOw0KLSAgICB9DQotICAgIENGWF9NZW1vcnlTdHJlYW0oRlhfTFBCWVRFIHBCdWZmZXIsIHNpemVfdCBuU2l6ZSwgRlhfQk9PTCBiVGFrZU92ZXIsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpDQotICAgICAgICA6IG1fQmxvY2tzKHBBbGxvY2F0b3IpDQotICAgICAgICAsIG1fZHdDb3VudCgxKQ0KLSAgICAgICAgLCBtX25Ub3RhbFNpemUoblNpemUpDQotICAgICAgICAsIG1fbkN1clNpemUoblNpemUpDQotICAgICAgICAsIG1fbkN1clBvcygwKQ0KLSAgICAgICAgLCBtX25Hcm93U2l6ZShGWF9NRU1TVFJFQU1fQmxvY2tTaXplKQ0KLSAgICAgICAgLCBtX2JVc2VSYW5nZShGQUxTRSkNCi0gICAgew0KLSAgICAgICAgbV9CbG9ja3MuQWRkKHBCdWZmZXIpOw0KLSAgICAgICAgbV9kd0ZsYWdzID0gRlhfTUVNU1RSRUFNX0NvbnNlY3V0aXZlIHwgKGJUYWtlT3ZlciA/IEZYX01FTVNUUkVBTV9UYWtlT3ZlciA6IDApOw0KLSAgICB9DQotICAgIH5DRlhfTWVtb3J5U3RyZWFtKCkNCi0gICAgew0KLSAgICAgICAgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IG1fQmxvY2tzLm1fcEFsbG9jYXRvcjsNCi0gICAgICAgIGlmIChtX2R3RmxhZ3MgJiBGWF9NRU1TVFJFQU1fVGFrZU92ZXIpIHsNCi0gICAgICAgICAgICBmb3IgKEZYX0lOVDMyIGkgPSAwOyBpIDwgbV9CbG9ja3MuR2V0U2l6ZSgpOyBpICsrKSB7DQotICAgICAgICAgICAgICAgIEZYX0FsbG9jYXRvcl9GcmVlKHBBbGxvY2F0b3IsIChGWF9MUEJZVEUpbV9CbG9ja3NbaV0pOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIG1fQmxvY2tzLlJlbW92ZUFsbCgpOw0KLSAgICB9DQotICAgIHZpcnR1YWwgSUZYX0ZpbGVTdHJlYW0qCQlSZXRhaW4oKQ0KLSAgICB7DQotICAgICAgICBtX2R3Q291bnQgKys7DQotICAgICAgICByZXR1cm4gdGhpczsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQkJUmVsZWFzZSgpDQotICAgIHsNCi0gICAgICAgIEZYX0RXT1JEIG5Db3VudCA9IC0tIG1fZHdDb3VudDsNCi0gICAgICAgIGlmIChuQ291bnQpIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gbV9CbG9ja3MubV9wQWxsb2NhdG9yOw0KLSAgICAgICAgaWYgKHBBbGxvY2F0b3IpIHsNCi0gICAgICAgICAgICBGWF9EZWxldGVBdEFsbG9jYXRvcih0aGlzLCBwQWxsb2NhdG9yLCBDRlhfTWVtb3J5U3RyZWFtKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgZGVsZXRlIHRoaXM7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgdmlydHVhbCBGWF9GSUxFU0laRQkJCUdldFNpemUoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9iVXNlUmFuZ2UgPyAoRlhfRklMRVNJWkUpIG1fblNpemUgOiAoRlhfRklMRVNJWkUpbV9uQ3VyU2l6ZTsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJSXNFT0YoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9uQ3VyUG9zID49IChzaXplX3QpR2V0U2l6ZSgpOw0KLSAgICB9DQotICAgIHZpcnR1YWwgRlhfRklMRVNJWkUJCQlHZXRQb3NpdGlvbigpDQotICAgIHsNCi0gICAgICAgIEZYX0ZJTEVTSVpFIHBvcyA9IChGWF9GSUxFU0laRSltX25DdXJQb3M7DQotICAgICAgICBpZiAobV9iVXNlUmFuZ2UpIHsNCi0gICAgICAgICAgICBwb3MgLT0gKEZYX0ZJTEVTSVpFKW1fbk9mZnNldDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBwb3M7DQotICAgIH0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJCVNldFJhbmdlKEZYX0ZJTEVTSVpFIG9mZnNldCwgRlhfRklMRVNJWkUgc2l6ZSkNCi0gICAgew0KLSAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgKHNpemVfdCkob2Zmc2V0ICsgc2l6ZSkgPiBtX25DdXJTaXplKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9uT2Zmc2V0ID0gKHNpemVfdClvZmZzZXQsIG1fblNpemUgPSAoc2l6ZV90KXNpemU7DQotICAgICAgICBtX2JVc2VSYW5nZSA9IFRSVUU7DQotICAgICAgICBtX25DdXJQb3MgPSBtX25PZmZzZXQ7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIHZvaWQJCQkJQ2xlYXJSYW5nZSgpDQotICAgIHsNCi0gICAgICAgIG1fYlVzZVJhbmdlID0gRkFMU0U7DQotICAgIH0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJCVJlYWRCbG9jayh2b2lkKiBidWZmZXIsIEZYX0ZJTEVTSVpFIG9mZnNldCwgc2l6ZV90IHNpemUpDQotICAgIHsNCi0gICAgICAgIGlmICghYnVmZmVyIHx8ICFzaXplKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fYlVzZVJhbmdlKSB7DQotICAgICAgICAgICAgb2Zmc2V0ICs9IChGWF9GSUxFU0laRSltX25PZmZzZXQ7DQotICAgICAgICB9DQotICAgICAgICBpZiAoKHNpemVfdClvZmZzZXQgKyBzaXplID4gbV9uQ3VyU2l6ZSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fbkN1clBvcyA9IChzaXplX3Qpb2Zmc2V0ICsgc2l6ZTsNCi0gICAgICAgIGlmIChtX2R3RmxhZ3MgJiBGWF9NRU1TVFJFQU1fQ29uc2VjdXRpdmUpIHsNCi0gICAgICAgICAgICBGWFNZU19tZW1jcHkzMihidWZmZXIsIChGWF9MUEJZVEUpbV9CbG9ja3NbMF0gKyAoc2l6ZV90KW9mZnNldCwgc2l6ZSk7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgICAgICBzaXplX3QgblN0YXJ0QmxvY2sgPSAoc2l6ZV90KW9mZnNldCAvIG1fbkdyb3dTaXplOw0KLSAgICAgICAgb2Zmc2V0IC09IChGWF9GSUxFU0laRSkoblN0YXJ0QmxvY2sgKiBtX25Hcm93U2l6ZSk7DQotICAgICAgICB3aGlsZSAoc2l6ZSkgew0KLSAgICAgICAgICAgIHNpemVfdCBuUmVhZCA9IG1fbkdyb3dTaXplIC0gKHNpemVfdClvZmZzZXQ7DQotICAgICAgICAgICAgaWYgKG5SZWFkID4gc2l6ZSkgew0KLSAgICAgICAgICAgICAgICBuUmVhZCA9IHNpemU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKGJ1ZmZlciwgKEZYX0xQQllURSltX0Jsb2Nrc1soaW50KW5TdGFydEJsb2NrXSArIChzaXplX3Qpb2Zmc2V0LCBuUmVhZCk7DQotICAgICAgICAgICAgYnVmZmVyID0gKChGWF9MUEJZVEUpYnVmZmVyKSArIG5SZWFkOw0KLSAgICAgICAgICAgIHNpemUgLT0gblJlYWQ7DQotICAgICAgICAgICAgblN0YXJ0QmxvY2sgKys7DQotICAgICAgICAgICAgb2Zmc2V0ID0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIHZpcnR1YWwgc2l6ZV90CQkJCVJlYWRCbG9jayh2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQ0KLSAgICB7DQotICAgICAgICBpZiAobV9uQ3VyUG9zID49IG1fbkN1clNpemUpIHsNCi0gICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX2JVc2VSYW5nZSkgew0KLSAgICAgICAgICAgIHNpemVfdCBhdmFpbFNpemUgPSBtX25PZmZzZXQgKyBtX25TaXplIC0gbV9uQ3VyUG9zOw0KLSAgICAgICAgICAgIGlmIChhdmFpbFNpemUgPCBzaXplKSB7DQotICAgICAgICAgICAgICAgIHNpemUgLT0gc2l6ZSAtIChzaXplX3QpYXZhaWxTaXplOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHNpemVfdCBuUmVhZCA9IEZYX01JTihzaXplLCBtX25DdXJTaXplIC0gbV9uQ3VyUG9zKTsNCi0gICAgICAgIGlmICghUmVhZEJsb2NrKGJ1ZmZlciwgKEZYX0lOVDMyKW1fbkN1clBvcywgblJlYWQpKSB7DQotICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gblJlYWQ7DQotICAgIH0NCi0gICAgdmlydHVhbAlGWF9CT09MCQkJCVdyaXRlQmxvY2soY29uc3Qgdm9pZCogYnVmZmVyLCBGWF9GSUxFU0laRSBvZmZzZXQsIHNpemVfdCBzaXplKQ0KLSAgICB7DQotICAgICAgICBpZiAoIWJ1ZmZlciB8fCAhc2l6ZSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX2JVc2VSYW5nZSkgew0KLSAgICAgICAgICAgIG9mZnNldCArPSAoRlhfRklMRVNJWkUpbV9uT2Zmc2V0Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fZHdGbGFncyAmIEZYX01FTVNUUkVBTV9Db25zZWN1dGl2ZSkgew0KLSAgICAgICAgICAgIG1fbkN1clBvcyA9IChzaXplX3Qpb2Zmc2V0ICsgc2l6ZTsNCi0gICAgICAgICAgICBpZiAobV9uQ3VyUG9zID4gbV9uVG90YWxTaXplKSB7DQotICAgICAgICAgICAgICAgIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBtX0Jsb2Nrcy5tX3BBbGxvY2F0b3I7DQotICAgICAgICAgICAgICAgIG1fblRvdGFsU2l6ZSA9IChtX25DdXJQb3MgKyBtX25Hcm93U2l6ZSAtIDEpIC8gbV9uR3Jvd1NpemUgKiBtX25Hcm93U2l6ZTsNCi0gICAgICAgICAgICAgICAgaWYgKG1fQmxvY2tzLkdldFNpemUoKSA8IDEpIHsNCi0gICAgICAgICAgICAgICAgICAgIHZvaWQqIGJsb2NrID0gRlhfQWxsb2NhdG9yX0FsbG9jKHBBbGxvY2F0b3IsIEZYX0JZVEUsIG1fblRvdGFsU2l6ZSk7DQotICAgICAgICAgICAgICAgICAgICBtX0Jsb2Nrcy5BZGQoYmxvY2spOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgbV9CbG9ja3NbMF0gPSBGWF9BbGxvY2F0b3JfUmVhbGxvYyhwQWxsb2NhdG9yLCBGWF9CWVRFLCBtX0Jsb2Nrc1swXSwgbV9uVG90YWxTaXplKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoIW1fQmxvY2tzWzBdKSB7DQotICAgICAgICAgICAgICAgICAgICBtX0Jsb2Nrcy5SZW1vdmVBbGwoKTsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWFNZU19tZW1jcHkzMigoRlhfTFBCWVRFKW1fQmxvY2tzWzBdICsgKHNpemVfdClvZmZzZXQsIGJ1ZmZlciwgc2l6ZSk7DQotICAgICAgICAgICAgaWYgKG1fbkN1clNpemUgPCBtX25DdXJQb3MpIHsNCi0gICAgICAgICAgICAgICAgbV9uQ3VyU2l6ZSA9IG1fbkN1clBvczsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoIUV4cGFuZEJsb2Nrcygoc2l6ZV90KW9mZnNldCArIHNpemUpKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9uQ3VyUG9zID0gKHNpemVfdClvZmZzZXQgKyBzaXplOw0KLSAgICAgICAgc2l6ZV90IG5TdGFydEJsb2NrID0gKHNpemVfdClvZmZzZXQgLyBtX25Hcm93U2l6ZTsNCi0gICAgICAgIG9mZnNldCAtPSAoRlhfRklMRVNJWkUpKG5TdGFydEJsb2NrICogbV9uR3Jvd1NpemUpOw0KLSAgICAgICAgd2hpbGUgKHNpemUpIHsNCi0gICAgICAgICAgICBzaXplX3QgbldyaXRlID0gbV9uR3Jvd1NpemUgLSAoc2l6ZV90KW9mZnNldDsNCi0gICAgICAgICAgICBpZiAobldyaXRlID4gc2l6ZSkgew0KLSAgICAgICAgICAgICAgICBuV3JpdGUgPSBzaXplOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWFNZU19tZW1jcHkzMigoRlhfTFBCWVRFKW1fQmxvY2tzWyhpbnQpblN0YXJ0QmxvY2tdICsgKHNpemVfdClvZmZzZXQsIGJ1ZmZlciwgbldyaXRlKTsNCi0gICAgICAgICAgICBidWZmZXIgPSAoKEZYX0xQQllURSlidWZmZXIpICsgbldyaXRlOw0KLSAgICAgICAgICAgIHNpemUgLT0gbldyaXRlOw0KLSAgICAgICAgICAgIG5TdGFydEJsb2NrICsrOw0KLSAgICAgICAgICAgIG9mZnNldCA9IDA7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJRmx1c2goKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJSXNDb25zZWN1dGl2ZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX2R3RmxhZ3MgJiBGWF9NRU1TVFJFQU1fQ29uc2VjdXRpdmU7DQotICAgIH0NCi0gICAgdmlydHVhbCB2b2lkCQkJCUVzdGltYXRlU2l6ZShzaXplX3QgbkluaXRTaXplLCBzaXplX3Qgbkdyb3dTaXplKQ0KLSAgICB7DQotICAgICAgICBpZiAobV9kd0ZsYWdzICYgRlhfTUVNU1RSRUFNX0NvbnNlY3V0aXZlKSB7DQotICAgICAgICAgICAgaWYgKG1fQmxvY2tzLkdldFNpemUoKSA8IDEpIHsNCi0gICAgICAgICAgICAgICAgRlhfTFBCWVRFIHBCbG9jayA9IEZYX0FsbG9jYXRvcl9BbGxvYyhtX0Jsb2Nrcy5tX3BBbGxvY2F0b3IsIEZYX0JZVEUsIEZYX01BWChuSW5pdFNpemUsIDQwOTYpKTsNCi0gICAgICAgICAgICAgICAgaWYgKHBCbG9jaykgew0KLSAgICAgICAgICAgICAgICAgICAgbV9CbG9ja3MuQWRkKHBCbG9jayk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9uR3Jvd1NpemUgPSBGWF9NQVgobkdyb3dTaXplLCA0MDk2KTsNCi0gICAgICAgIH0gZWxzZSBpZiAobV9CbG9ja3MuR2V0U2l6ZSgpIDwgMSkgew0KLSAgICAgICAgICAgIG1fbkdyb3dTaXplID0gRlhfTUFYKG5Hcm93U2l6ZSwgNDA5Nik7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgdmlydHVhbCBGWF9MUEJZVEUJCQlHZXRCdWZmZXIoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9CbG9ja3MuR2V0U2l6ZSgpID8gKEZYX0xQQllURSltX0Jsb2Nrc1swXSA6IE5VTEw7DQotICAgIH0NCi0gICAgdmlydHVhbCB2b2lkCQkJCUF0dGFjaEJ1ZmZlcihGWF9MUEJZVEUgcEJ1ZmZlciwgc2l6ZV90IG5TaXplLCBGWF9CT09MIGJUYWtlT3ZlciA9IEZBTFNFKQ0KLSAgICB7DQotICAgICAgICBpZiAoIShtX2R3RmxhZ3MgJiBGWF9NRU1TVFJFQU1fQ29uc2VjdXRpdmUpKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9CbG9ja3MuUmVtb3ZlQWxsKCk7DQotICAgICAgICBtX0Jsb2Nrcy5BZGQocEJ1ZmZlcik7DQotICAgICAgICBtX25Ub3RhbFNpemUgPSBtX25DdXJTaXplID0gblNpemU7DQotICAgICAgICBtX25DdXJQb3MgPSAwOw0KLSAgICAgICAgbV9kd0ZsYWdzID0gRlhfTUVNU1RSRUFNX0NvbnNlY3V0aXZlIHwgKGJUYWtlT3ZlciA/IEZYX01FTVNUUkVBTV9UYWtlT3ZlciA6IDApOw0KLSAgICAgICAgQ2xlYXJSYW5nZSgpOw0KLSAgICB9DQotICAgIHZpcnR1YWwgdm9pZAkJCQlEZXRhY2hCdWZmZXIoKQ0KLSAgICB7DQotICAgICAgICBpZiAoIShtX2R3RmxhZ3MgJiBGWF9NRU1TVFJFQU1fQ29uc2VjdXRpdmUpKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9CbG9ja3MuUmVtb3ZlQWxsKCk7DQotICAgICAgICBtX25Ub3RhbFNpemUgPSBtX25DdXJTaXplID0gbV9uQ3VyUG9zID0gMDsNCi0gICAgICAgIG1fZHdGbGFncyA9IEZYX01FTVNUUkVBTV9UYWtlT3ZlcjsNCi0gICAgICAgIENsZWFyUmFuZ2UoKTsNCi0gICAgfQ0KLXByb3RlY3RlZDoNCi0gICAgQ0ZYX1B0ckFycmF5CW1fQmxvY2tzOw0KLSAgICBGWF9EV09SRAkJbV9kd0NvdW50Ow0KLSAgICBzaXplX3QJCQltX25Ub3RhbFNpemU7DQotICAgIHNpemVfdAkJCW1fbkN1clNpemU7DQotICAgIHNpemVfdAkJCW1fbkN1clBvczsNCi0gICAgc2l6ZV90CQkJbV9uR3Jvd1NpemU7DQotICAgIEZYX0RXT1JECQltX2R3RmxhZ3M7DQotICAgIEZYX0JPT0wJCQltX2JVc2VSYW5nZTsNCi0gICAgc2l6ZV90CQkJbV9uT2Zmc2V0Ow0KLSAgICBzaXplX3QJCQltX25TaXplOw0KLSAgICBGWF9CT09MCUV4cGFuZEJsb2NrcyhzaXplX3Qgc2l6ZSkNCi0gICAgew0KLSAgICAgICAgaWYgKG1fbkN1clNpemUgPCBzaXplKSB7DQotICAgICAgICAgICAgbV9uQ3VyU2l6ZSA9IHNpemU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoc2l6ZSA8PSBtX25Ub3RhbFNpemUpIHsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0lOVDMyIGlDb3VudCA9IG1fQmxvY2tzLkdldFNpemUoKTsNCi0gICAgICAgIHNpemUgPSAoc2l6ZSAtIG1fblRvdGFsU2l6ZSArIG1fbkdyb3dTaXplIC0gMSkgLyBtX25Hcm93U2l6ZTsNCi0gICAgICAgIG1fQmxvY2tzLlNldFNpemUobV9CbG9ja3MuR2V0U2l6ZSgpICsgKEZYX0lOVDMyKXNpemUsIC0xKTsNCi0gICAgICAgIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBtX0Jsb2Nrcy5tX3BBbGxvY2F0b3I7DQotICAgICAgICB3aGlsZSAoc2l6ZSAtLSkgew0KLSAgICAgICAgICAgIEZYX0xQQllURSBwQmxvY2sgPSBGWF9BbGxvY2F0b3JfQWxsb2MocEFsbG9jYXRvciwgRlhfQllURSwgbV9uR3Jvd1NpemUpOw0KLSAgICAgICAgICAgIGlmICghcEJsb2NrKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9CbG9ja3MuU2V0QXQoaUNvdW50ICsrLCBwQmxvY2spOw0KLSAgICAgICAgICAgIG1fblRvdGFsU2l6ZSArPSBtX25Hcm93U2l6ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotfTsNCi0jaWZkZWYgX19jcGx1c3BsdXMNCi1leHRlcm4gIkMiIHsNCi0jZW5kaWYNCi0jZGVmaW5lIE1UX04JCQk4NDgNCi0jZGVmaW5lIE1UX00JCQk0NTYNCi0jZGVmaW5lIE1UX01hdHJpeF9BCQkweDk5MDhiMGRmDQotI2RlZmluZSBNVF9VcHBlcl9NYXNrCTB4ODAwMDAwMDANCi0jZGVmaW5lIE1UX0xvd2VyX01hc2sJMHg3ZmZmZmZmZg0KLXR5cGVkZWYgc3RydWN0IF9GWF9NVFJBTkRPTUNPTlRFWFQgew0KLSAgICBfRlhfTVRSQU5ET01DT05URVhUKCkNCi0gICAgew0KLSAgICAgICAgbXRpID0gTVRfTiArIDE7DQotICAgICAgICBiSGF2ZVNlZWQgPSBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWF9EV09SRCBtdGk7DQotICAgIEZYX0JPT0wJIGJIYXZlU2VlZDsNCi0gICAgRlhfRFdPUkQgbXRbTVRfTl07DQotfSBGWF9NVFJBTkRPTUNPTlRFWFQsICogRlhfTFBNVFJBTkRPTUNPTlRFWFQ7DQotdHlwZWRlZiBGWF9NVFJBTkRPTUNPTlRFWFQgY29uc3QgKiBGWF9MUENNVFJBTkRPTUNPTlRFWFQ7DQotI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18NCi1GWF9CT09MIEZYX0dlbmVyYXRlQ3J5cHRvUmFuZG9tKEZYX0xQRFdPUkQgcEJ1ZmZlciwgRlhfSU5UMzIgaUNvdW50KTsNCi0jZW5kaWYNCi0jaWZkZWYgX19jcGx1c3BsdXMNCi19DQotI2VuZGlmDQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlhDUlRfRVhURU5TSU9OX0lNUF8KKyNkZWZpbmUgX0ZYQ1JUX0VYVEVOU0lPTl9JTVBfCitjbGFzcyBJRlhDUlRfRmlsZUFjY2VzcworeworcHVibGljOgorICAgIHZpcnR1YWwgfklGWENSVF9GaWxlQWNjZXNzKCkge30KKyAgICB2aXJ0dWFsIEZYX0JPT0wJCU9wZW4oRlhfQlNUUiBmaWxlTmFtZSwgRlhfRFdPUkQgZHdNb2RlKSA9IDA7CisgICAgdmlydHVhbCBGWF9CT09MCQlPcGVuKEZYX1dTVFIgZmlsZU5hbWUsIEZYX0RXT1JEIGR3TW9kZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZAkJQ2xvc2UoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkCQlSZWxlYXNlKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKSA9IDA7CisgICAgdmlydHVhbCBGWF9GSUxFU0laRQlHZXRTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgRlhfRklMRVNJWkUJR2V0UG9zaXRpb24oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBGWF9GSUxFU0laRQlTZXRQb3NpdGlvbihGWF9GSUxFU0laRSBwb3MpID0gMDsKKyAgICB2aXJ0dWFsIHNpemVfdAkJUmVhZCh2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIpID0gMDsKKyAgICB2aXJ0dWFsIHNpemVfdAkJV3JpdGUoY29uc3Qgdm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyKSA9IDA7CisgICAgdmlydHVhbCBzaXplX3QJCVJlYWRQb3Modm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyLCBGWF9GSUxFU0laRSBwb3MpID0gMDsKKyAgICB2aXJ0dWFsIHNpemVfdAkJV3JpdGVQb3MoY29uc3Qgdm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyLCBGWF9GSUxFU0laRSBwb3MpID0gMDsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCUZsdXNoKCkgPSAwOworICAgIHZpcnR1YWwgRlhfQk9PTAkJVHJ1bmNhdGUoRlhfRklMRVNJWkUgc3pGaWxlKSA9IDA7Cit9OworSUZYQ1JUX0ZpbGVBY2Nlc3MqCUZYQ1JUX0ZpbGVBY2Nlc3NfQ3JlYXRlKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsKK2NsYXNzIENGWF9DUlRGaWxlU3RyZWFtIDogcHVibGljIElGWF9GaWxlU3RyZWFtLCBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENGWF9DUlRGaWxlU3RyZWFtKElGWENSVF9GaWxlQWNjZXNzKiBwRkEsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpIDogbV9wQWxsb2NhdG9yKHBBbGxvY2F0b3IpLCBtX3BGaWxlKHBGQSksIG1fZHdDb3VudCgxKSwgbV9iVXNlUmFuZ2UoRkFMU0UpLCBtX25PZmZzZXQoMCksIG1fblNpemUoMCkge30KKyAgICB+Q0ZYX0NSVEZpbGVTdHJlYW0oKQorICAgIHsKKyAgICAgICAgaWYgKG1fcEZpbGUpIHsKKyAgICAgICAgICAgIG1fcEZpbGUtPlJlbGVhc2UobV9wQWxsb2NhdG9yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2aXJ0dWFsIElGWF9GaWxlU3RyZWFtKgkJUmV0YWluKCkKKyAgICB7CisgICAgICAgIG1fZHdDb3VudCArKzsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZAkJCQlSZWxlYXNlKCkKKyAgICB7CisgICAgICAgIEZYX0RXT1JEIG5Db3VudCA9IC0tIG1fZHdDb3VudDsKKyAgICAgICAgaWYgKCFuQ291bnQpIHsKKyAgICAgICAgICAgIGlmIChtX3BBbGxvY2F0b3IpIHsKKyAgICAgICAgICAgICAgICBGWF9EZWxldGVBdEFsbG9jYXRvcih0aGlzLCBtX3BBbGxvY2F0b3IsIENGWF9DUlRGaWxlU3RyZWFtKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgdmlydHVhbCBGWF9GSUxFU0laRQkJCUdldFNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYlVzZVJhbmdlID8gbV9uU2l6ZSA6IG1fcEZpbGUtPkdldFNpemUoKTsKKyAgICB9CisgICAgdmlydHVhbCBGWF9CT09MCQkJCUlzRU9GKCkKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRQb3NpdGlvbigpID49IEdldFNpemUoKTsKKyAgICB9CisgICAgdmlydHVhbCBGWF9GSUxFU0laRQkJCUdldFBvc2l0aW9uKCkKKyAgICB7CisgICAgICAgIEZYX0ZJTEVTSVpFIHBvcyA9IG1fcEZpbGUtPkdldFBvc2l0aW9uKCk7CisgICAgICAgIGlmIChtX2JVc2VSYW5nZSkgeworICAgICAgICAgICAgcG9zIC09IG1fbk9mZnNldDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcG9zOworICAgIH0KKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJU2V0UmFuZ2UoRlhfRklMRVNJWkUgb2Zmc2V0LCBGWF9GSUxFU0laRSBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICsgc2l6ZSA+IG1fcEZpbGUtPkdldFNpemUoKSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIG1fbk9mZnNldCA9IG9mZnNldCwgbV9uU2l6ZSA9IHNpemU7CisgICAgICAgIG1fYlVzZVJhbmdlID0gVFJVRTsKKyAgICAgICAgbV9wRmlsZS0+U2V0UG9zaXRpb24obV9uT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZAkJCQlDbGVhclJhbmdlKCkKKyAgICB7CisgICAgICAgIG1fYlVzZVJhbmdlID0gRkFMU0U7CisgICAgfQorICAgIHZpcnR1YWwgRlhfQk9PTAkJCQlSZWFkQmxvY2sodm9pZCogYnVmZmVyLCBGWF9GSUxFU0laRSBvZmZzZXQsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKG1fYlVzZVJhbmdlKSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0ICsgc2l6ZSA+IChzaXplX3QpR2V0U2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb2Zmc2V0ICs9IG1fbk9mZnNldDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKEZYX0JPT0wpbV9wRmlsZS0+UmVhZFBvcyhidWZmZXIsIHNpemUsIG9mZnNldCk7CisgICAgfQorICAgIHZpcnR1YWwgc2l6ZV90CQkJCVJlYWRCbG9jayh2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKG1fYlVzZVJhbmdlKSB7CisgICAgICAgICAgICBGWF9GSUxFU0laRSBhdmFpbFNpemUgPSBtX25PZmZzZXQgKyBtX25TaXplIC0gbV9wRmlsZS0+R2V0UG9zaXRpb24oKTsKKyAgICAgICAgICAgIGlmICgoc2l6ZV90KWF2YWlsU2l6ZSA8IHNpemUpIHsKKyAgICAgICAgICAgICAgICBzaXplIC09IHNpemUgLSAoc2l6ZV90KWF2YWlsU2l6ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9wRmlsZS0+UmVhZChidWZmZXIsIHNpemUpOworICAgIH0KKyAgICB2aXJ0dWFsCUZYX0JPT0wJCQkJV3JpdGVCbG9jayhjb25zdCB2b2lkKiBidWZmZXIsIEZYX0ZJTEVTSVpFIG9mZnNldCwgc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBpZiAobV9iVXNlUmFuZ2UpIHsKKyAgICAgICAgICAgIG9mZnNldCArPSBtX25PZmZzZXQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChGWF9CT09MKW1fcEZpbGUtPldyaXRlUG9zKGJ1ZmZlciwgc2l6ZSwgb2Zmc2V0KTsKKyAgICB9CisgICAgdmlydHVhbCBGWF9CT09MCQkJCUZsdXNoKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BGaWxlLT5GbHVzaCgpOworICAgIH0KKyAgICBJRlhfQWxsb2NhdG9yKgkJbV9wQWxsb2NhdG9yOworICAgIElGWENSVF9GaWxlQWNjZXNzKgltX3BGaWxlOworICAgIEZYX0RXT1JECQkJbV9kd0NvdW50OworICAgIEZYX0JPT0wJCQkJbV9iVXNlUmFuZ2U7CisgICAgRlhfRklMRVNJWkUJCQltX25PZmZzZXQ7CisgICAgRlhfRklMRVNJWkUJCQltX25TaXplOworfTsKKyNkZWZpbmUgRlhfTUVNU1RSRUFNX0Jsb2NrU2l6ZQkJKDY0ICogMTAyNCkKKyNkZWZpbmUgRlhfTUVNU1RSRUFNX0NvbnNlY3V0aXZlCTB4MDEKKyNkZWZpbmUgRlhfTUVNU1RSRUFNX1Rha2VPdmVyCQkweDAyCitjbGFzcyBDRlhfTWVtb3J5U3RyZWFtIDogcHVibGljIElGWF9NZW1vcnlTdHJlYW0sIHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ0ZYX01lbW9yeVN0cmVhbShGWF9CT09MIGJDb25zZWN1dGl2ZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikKKyAgICAgICAgOiBtX0Jsb2NrcyhwQWxsb2NhdG9yKQorICAgICAgICAsIG1fZHdDb3VudCgxKQorICAgICAgICAsIG1fblRvdGFsU2l6ZSgwKQorICAgICAgICAsIG1fbkN1clNpemUoMCkKKyAgICAgICAgLCBtX25DdXJQb3MoMCkKKyAgICAgICAgLCBtX25Hcm93U2l6ZShGWF9NRU1TVFJFQU1fQmxvY2tTaXplKQorICAgICAgICAsIG1fYlVzZVJhbmdlKEZBTFNFKQorICAgIHsKKyAgICAgICAgbV9kd0ZsYWdzID0gRlhfTUVNU1RSRUFNX1Rha2VPdmVyIHwgKGJDb25zZWN1dGl2ZSA/IEZYX01FTVNUUkVBTV9Db25zZWN1dGl2ZSA6IDApOworICAgIH0KKyAgICBDRlhfTWVtb3J5U3RyZWFtKEZYX0xQQllURSBwQnVmZmVyLCBzaXplX3QgblNpemUsIEZYX0JPT0wgYlRha2VPdmVyLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQorICAgICAgICA6IG1fQmxvY2tzKHBBbGxvY2F0b3IpCisgICAgICAgICwgbV9kd0NvdW50KDEpCisgICAgICAgICwgbV9uVG90YWxTaXplKG5TaXplKQorICAgICAgICAsIG1fbkN1clNpemUoblNpemUpCisgICAgICAgICwgbV9uQ3VyUG9zKDApCisgICAgICAgICwgbV9uR3Jvd1NpemUoRlhfTUVNU1RSRUFNX0Jsb2NrU2l6ZSkKKyAgICAgICAgLCBtX2JVc2VSYW5nZShGQUxTRSkKKyAgICB7CisgICAgICAgIG1fQmxvY2tzLkFkZChwQnVmZmVyKTsKKyAgICAgICAgbV9kd0ZsYWdzID0gRlhfTUVNU1RSRUFNX0NvbnNlY3V0aXZlIHwgKGJUYWtlT3ZlciA/IEZYX01FTVNUUkVBTV9UYWtlT3ZlciA6IDApOworICAgIH0KKyAgICB+Q0ZYX01lbW9yeVN0cmVhbSgpCisgICAgeworICAgICAgICBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gbV9CbG9ja3MubV9wQWxsb2NhdG9yOworICAgICAgICBpZiAobV9kd0ZsYWdzICYgRlhfTUVNU1RSRUFNX1Rha2VPdmVyKSB7CisgICAgICAgICAgICBmb3IgKEZYX0lOVDMyIGkgPSAwOyBpIDwgbV9CbG9ja3MuR2V0U2l6ZSgpOyBpICsrKSB7CisgICAgICAgICAgICAgICAgRlhfQWxsb2NhdG9yX0ZyZWUocEFsbG9jYXRvciwgKEZYX0xQQllURSltX0Jsb2Nrc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9CbG9ja3MuUmVtb3ZlQWxsKCk7CisgICAgfQorICAgIHZpcnR1YWwgSUZYX0ZpbGVTdHJlYW0qCQlSZXRhaW4oKQorICAgIHsKKyAgICAgICAgbV9kd0NvdW50ICsrOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkCQkJCVJlbGVhc2UoKQorICAgIHsKKyAgICAgICAgRlhfRFdPUkQgbkNvdW50ID0gLS0gbV9kd0NvdW50OworICAgICAgICBpZiAobkNvdW50KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IG1fQmxvY2tzLm1fcEFsbG9jYXRvcjsKKyAgICAgICAgaWYgKHBBbGxvY2F0b3IpIHsKKyAgICAgICAgICAgIEZYX0RlbGV0ZUF0QWxsb2NhdG9yKHRoaXMsIHBBbGxvY2F0b3IsIENGWF9NZW1vcnlTdHJlYW0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAgIH0KKyAgICB9CisgICAgdmlydHVhbCBGWF9GSUxFU0laRQkJCUdldFNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYlVzZVJhbmdlID8gKEZYX0ZJTEVTSVpFKSBtX25TaXplIDogKEZYX0ZJTEVTSVpFKW1fbkN1clNpemU7CisgICAgfQorICAgIHZpcnR1YWwgRlhfQk9PTAkJCQlJc0VPRigpCisgICAgeworICAgICAgICByZXR1cm4gbV9uQ3VyUG9zID49IChzaXplX3QpR2V0U2l6ZSgpOworICAgIH0KKyAgICB2aXJ0dWFsIEZYX0ZJTEVTSVpFCQkJR2V0UG9zaXRpb24oKQorICAgIHsKKyAgICAgICAgRlhfRklMRVNJWkUgcG9zID0gKEZYX0ZJTEVTSVpFKW1fbkN1clBvczsKKyAgICAgICAgaWYgKG1fYlVzZVJhbmdlKSB7CisgICAgICAgICAgICBwb3MgLT0gKEZYX0ZJTEVTSVpFKW1fbk9mZnNldDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcG9zOworICAgIH0KKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQkJU2V0UmFuZ2UoRlhfRklMRVNJWkUgb2Zmc2V0LCBGWF9GSUxFU0laRSBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKG9mZnNldCA8IDAgfHwgKHNpemVfdCkob2Zmc2V0ICsgc2l6ZSkgPiBtX25DdXJTaXplKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgbV9uT2Zmc2V0ID0gKHNpemVfdClvZmZzZXQsIG1fblNpemUgPSAoc2l6ZV90KXNpemU7CisgICAgICAgIG1fYlVzZVJhbmdlID0gVFJVRTsKKyAgICAgICAgbV9uQ3VyUG9zID0gbV9uT2Zmc2V0OworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkCQkJCUNsZWFyUmFuZ2UoKQorICAgIHsKKyAgICAgICAgbV9iVXNlUmFuZ2UgPSBGQUxTRTsKKyAgICB9CisgICAgdmlydHVhbCBGWF9CT09MCQkJCVJlYWRCbG9jayh2b2lkKiBidWZmZXIsIEZYX0ZJTEVTSVpFIG9mZnNldCwgc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBpZiAoIWJ1ZmZlciB8fCAhc2l6ZSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmIChtX2JVc2VSYW5nZSkgeworICAgICAgICAgICAgb2Zmc2V0ICs9IChGWF9GSUxFU0laRSltX25PZmZzZXQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChzaXplX3Qpb2Zmc2V0ICsgc2l6ZSA+IG1fbkN1clNpemUpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBtX25DdXJQb3MgPSAoc2l6ZV90KW9mZnNldCArIHNpemU7CisgICAgICAgIGlmIChtX2R3RmxhZ3MgJiBGWF9NRU1TVFJFQU1fQ29uc2VjdXRpdmUpIHsKKyAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKGJ1ZmZlciwgKEZYX0xQQllURSltX0Jsb2Nrc1swXSArIChzaXplX3Qpb2Zmc2V0LCBzaXplKTsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIHNpemVfdCBuU3RhcnRCbG9jayA9IChzaXplX3Qpb2Zmc2V0IC8gbV9uR3Jvd1NpemU7CisgICAgICAgIG9mZnNldCAtPSAoRlhfRklMRVNJWkUpKG5TdGFydEJsb2NrICogbV9uR3Jvd1NpemUpOworICAgICAgICB3aGlsZSAoc2l6ZSkgeworICAgICAgICAgICAgc2l6ZV90IG5SZWFkID0gbV9uR3Jvd1NpemUgLSAoc2l6ZV90KW9mZnNldDsKKyAgICAgICAgICAgIGlmIChuUmVhZCA+IHNpemUpIHsKKyAgICAgICAgICAgICAgICBuUmVhZCA9IHNpemU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihidWZmZXIsIChGWF9MUEJZVEUpbV9CbG9ja3NbKGludCluU3RhcnRCbG9ja10gKyAoc2l6ZV90KW9mZnNldCwgblJlYWQpOworICAgICAgICAgICAgYnVmZmVyID0gKChGWF9MUEJZVEUpYnVmZmVyKSArIG5SZWFkOworICAgICAgICAgICAgc2l6ZSAtPSBuUmVhZDsKKyAgICAgICAgICAgIG5TdGFydEJsb2NrICsrOworICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgdmlydHVhbCBzaXplX3QJCQkJUmVhZEJsb2NrKHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBpZiAobV9uQ3VyUG9zID49IG1fbkN1clNpemUpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlmIChtX2JVc2VSYW5nZSkgeworICAgICAgICAgICAgc2l6ZV90IGF2YWlsU2l6ZSA9IG1fbk9mZnNldCArIG1fblNpemUgLSBtX25DdXJQb3M7CisgICAgICAgICAgICBpZiAoYXZhaWxTaXplIDwgc2l6ZSkgeworICAgICAgICAgICAgICAgIHNpemUgLT0gc2l6ZSAtIChzaXplX3QpYXZhaWxTaXplOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHNpemVfdCBuUmVhZCA9IEZYX01JTihzaXplLCBtX25DdXJTaXplIC0gbV9uQ3VyUG9zKTsKKyAgICAgICAgaWYgKCFSZWFkQmxvY2soYnVmZmVyLCAoRlhfSU5UMzIpbV9uQ3VyUG9zLCBuUmVhZCkpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuUmVhZDsKKyAgICB9CisgICAgdmlydHVhbAlGWF9CT09MCQkJCVdyaXRlQmxvY2soY29uc3Qgdm9pZCogYnVmZmVyLCBGWF9GSUxFU0laRSBvZmZzZXQsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKCFidWZmZXIgfHwgIXNpemUpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9iVXNlUmFuZ2UpIHsKKyAgICAgICAgICAgIG9mZnNldCArPSAoRlhfRklMRVNJWkUpbV9uT2Zmc2V0OworICAgICAgICB9CisgICAgICAgIGlmIChtX2R3RmxhZ3MgJiBGWF9NRU1TVFJFQU1fQ29uc2VjdXRpdmUpIHsKKyAgICAgICAgICAgIG1fbkN1clBvcyA9IChzaXplX3Qpb2Zmc2V0ICsgc2l6ZTsKKyAgICAgICAgICAgIGlmIChtX25DdXJQb3MgPiBtX25Ub3RhbFNpemUpIHsKKyAgICAgICAgICAgICAgICBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gbV9CbG9ja3MubV9wQWxsb2NhdG9yOworICAgICAgICAgICAgICAgIG1fblRvdGFsU2l6ZSA9IChtX25DdXJQb3MgKyBtX25Hcm93U2l6ZSAtIDEpIC8gbV9uR3Jvd1NpemUgKiBtX25Hcm93U2l6ZTsKKyAgICAgICAgICAgICAgICBpZiAobV9CbG9ja3MuR2V0U2l6ZSgpIDwgMSkgeworICAgICAgICAgICAgICAgICAgICB2b2lkKiBibG9jayA9IEZYX0FsbG9jYXRvcl9BbGxvYyhwQWxsb2NhdG9yLCBGWF9CWVRFLCBtX25Ub3RhbFNpemUpOworICAgICAgICAgICAgICAgICAgICBtX0Jsb2Nrcy5BZGQoYmxvY2spOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1fQmxvY2tzWzBdID0gRlhfQWxsb2NhdG9yX1JlYWxsb2MocEFsbG9jYXRvciwgRlhfQllURSwgbV9CbG9ja3NbMF0sIG1fblRvdGFsU2l6ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghbV9CbG9ja3NbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgbV9CbG9ja3MuUmVtb3ZlQWxsKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWFNZU19tZW1jcHkzMigoRlhfTFBCWVRFKW1fQmxvY2tzWzBdICsgKHNpemVfdClvZmZzZXQsIGJ1ZmZlciwgc2l6ZSk7CisgICAgICAgICAgICBpZiAobV9uQ3VyU2l6ZSA8IG1fbkN1clBvcykgeworICAgICAgICAgICAgICAgIG1fbkN1clNpemUgPSBtX25DdXJQb3M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUV4cGFuZEJsb2Nrcygoc2l6ZV90KW9mZnNldCArIHNpemUpKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgbV9uQ3VyUG9zID0gKHNpemVfdClvZmZzZXQgKyBzaXplOworICAgICAgICBzaXplX3QgblN0YXJ0QmxvY2sgPSAoc2l6ZV90KW9mZnNldCAvIG1fbkdyb3dTaXplOworICAgICAgICBvZmZzZXQgLT0gKEZYX0ZJTEVTSVpFKShuU3RhcnRCbG9jayAqIG1fbkdyb3dTaXplKTsKKyAgICAgICAgd2hpbGUgKHNpemUpIHsKKyAgICAgICAgICAgIHNpemVfdCBuV3JpdGUgPSBtX25Hcm93U2l6ZSAtIChzaXplX3Qpb2Zmc2V0OworICAgICAgICAgICAgaWYgKG5Xcml0ZSA+IHNpemUpIHsKKyAgICAgICAgICAgICAgICBuV3JpdGUgPSBzaXplOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIoKEZYX0xQQllURSltX0Jsb2Nrc1soaW50KW5TdGFydEJsb2NrXSArIChzaXplX3Qpb2Zmc2V0LCBidWZmZXIsIG5Xcml0ZSk7CisgICAgICAgICAgICBidWZmZXIgPSAoKEZYX0xQQllURSlidWZmZXIpICsgbldyaXRlOworICAgICAgICAgICAgc2l6ZSAtPSBuV3JpdGU7CisgICAgICAgICAgICBuU3RhcnRCbG9jayArKzsKKyAgICAgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHZpcnR1YWwgRlhfQk9PTAkJCQlGbHVzaCgpCisgICAgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgdmlydHVhbCBGWF9CT09MCQkJCUlzQ29uc2VjdXRpdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZHdGbGFncyAmIEZYX01FTVNUUkVBTV9Db25zZWN1dGl2ZTsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkCQkJCUVzdGltYXRlU2l6ZShzaXplX3QgbkluaXRTaXplLCBzaXplX3Qgbkdyb3dTaXplKQorICAgIHsKKyAgICAgICAgaWYgKG1fZHdGbGFncyAmIEZYX01FTVNUUkVBTV9Db25zZWN1dGl2ZSkgeworICAgICAgICAgICAgaWYgKG1fQmxvY2tzLkdldFNpemUoKSA8IDEpIHsKKyAgICAgICAgICAgICAgICBGWF9MUEJZVEUgcEJsb2NrID0gRlhfQWxsb2NhdG9yX0FsbG9jKG1fQmxvY2tzLm1fcEFsbG9jYXRvciwgRlhfQllURSwgRlhfTUFYKG5Jbml0U2l6ZSwgNDA5NikpOworICAgICAgICAgICAgICAgIGlmIChwQmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgbV9CbG9ja3MuQWRkKHBCbG9jayk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9uR3Jvd1NpemUgPSBGWF9NQVgobkdyb3dTaXplLCA0MDk2KTsKKyAgICAgICAgfSBlbHNlIGlmIChtX0Jsb2Nrcy5HZXRTaXplKCkgPCAxKSB7CisgICAgICAgICAgICBtX25Hcm93U2l6ZSA9IEZYX01BWChuR3Jvd1NpemUsIDQwOTYpOworICAgICAgICB9CisgICAgfQorICAgIHZpcnR1YWwgRlhfTFBCWVRFCQkJR2V0QnVmZmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX0Jsb2Nrcy5HZXRTaXplKCkgPyAoRlhfTFBCWVRFKW1fQmxvY2tzWzBdIDogTlVMTDsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkCQkJCUF0dGFjaEJ1ZmZlcihGWF9MUEJZVEUgcEJ1ZmZlciwgc2l6ZV90IG5TaXplLCBGWF9CT09MIGJUYWtlT3ZlciA9IEZBTFNFKQorICAgIHsKKyAgICAgICAgaWYgKCEobV9kd0ZsYWdzICYgRlhfTUVNU1RSRUFNX0NvbnNlY3V0aXZlKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fQmxvY2tzLlJlbW92ZUFsbCgpOworICAgICAgICBtX0Jsb2Nrcy5BZGQocEJ1ZmZlcik7CisgICAgICAgIG1fblRvdGFsU2l6ZSA9IG1fbkN1clNpemUgPSBuU2l6ZTsKKyAgICAgICAgbV9uQ3VyUG9zID0gMDsKKyAgICAgICAgbV9kd0ZsYWdzID0gRlhfTUVNU1RSRUFNX0NvbnNlY3V0aXZlIHwgKGJUYWtlT3ZlciA/IEZYX01FTVNUUkVBTV9UYWtlT3ZlciA6IDApOworICAgICAgICBDbGVhclJhbmdlKCk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZAkJCQlEZXRhY2hCdWZmZXIoKQorICAgIHsKKyAgICAgICAgaWYgKCEobV9kd0ZsYWdzICYgRlhfTUVNU1RSRUFNX0NvbnNlY3V0aXZlKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fQmxvY2tzLlJlbW92ZUFsbCgpOworICAgICAgICBtX25Ub3RhbFNpemUgPSBtX25DdXJTaXplID0gbV9uQ3VyUG9zID0gMDsKKyAgICAgICAgbV9kd0ZsYWdzID0gRlhfTUVNU1RSRUFNX1Rha2VPdmVyOworICAgICAgICBDbGVhclJhbmdlKCk7CisgICAgfQorcHJvdGVjdGVkOgorICAgIENGWF9QdHJBcnJheQltX0Jsb2NrczsKKyAgICBGWF9EV09SRAkJbV9kd0NvdW50OworICAgIHNpemVfdAkJCW1fblRvdGFsU2l6ZTsKKyAgICBzaXplX3QJCQltX25DdXJTaXplOworICAgIHNpemVfdAkJCW1fbkN1clBvczsKKyAgICBzaXplX3QJCQltX25Hcm93U2l6ZTsKKyAgICBGWF9EV09SRAkJbV9kd0ZsYWdzOworICAgIEZYX0JPT0wJCQltX2JVc2VSYW5nZTsKKyAgICBzaXplX3QJCQltX25PZmZzZXQ7CisgICAgc2l6ZV90CQkJbV9uU2l6ZTsKKyAgICBGWF9CT09MCUV4cGFuZEJsb2NrcyhzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChtX25DdXJTaXplIDwgc2l6ZSkgeworICAgICAgICAgICAgbV9uQ3VyU2l6ZSA9IHNpemU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNpemUgPD0gbV9uVG90YWxTaXplKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBGWF9JTlQzMiBpQ291bnQgPSBtX0Jsb2Nrcy5HZXRTaXplKCk7CisgICAgICAgIHNpemUgPSAoc2l6ZSAtIG1fblRvdGFsU2l6ZSArIG1fbkdyb3dTaXplIC0gMSkgLyBtX25Hcm93U2l6ZTsKKyAgICAgICAgbV9CbG9ja3MuU2V0U2l6ZShtX0Jsb2Nrcy5HZXRTaXplKCkgKyAoRlhfSU5UMzIpc2l6ZSwgLTEpOworICAgICAgICBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gbV9CbG9ja3MubV9wQWxsb2NhdG9yOworICAgICAgICB3aGlsZSAoc2l6ZSAtLSkgeworICAgICAgICAgICAgRlhfTFBCWVRFIHBCbG9jayA9IEZYX0FsbG9jYXRvcl9BbGxvYyhwQWxsb2NhdG9yLCBGWF9CWVRFLCBtX25Hcm93U2l6ZSk7CisgICAgICAgICAgICBpZiAoIXBCbG9jaykgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fQmxvY2tzLlNldEF0KGlDb3VudCArKywgcEJsb2NrKTsKKyAgICAgICAgICAgIG1fblRvdGFsU2l6ZSArPSBtX25Hcm93U2l6ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9Cit9OworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorI2RlZmluZSBNVF9OCQkJODQ4CisjZGVmaW5lIE1UX00JCQk0NTYKKyNkZWZpbmUgTVRfTWF0cml4X0EJCTB4OTkwOGIwZGYKKyNkZWZpbmUgTVRfVXBwZXJfTWFzawkweDgwMDAwMDAwCisjZGVmaW5lIE1UX0xvd2VyX01hc2sJMHg3ZmZmZmZmZgordHlwZWRlZiBzdHJ1Y3QgX0ZYX01UUkFORE9NQ09OVEVYVCB7CisgICAgX0ZYX01UUkFORE9NQ09OVEVYVCgpCisgICAgeworICAgICAgICBtdGkgPSBNVF9OICsgMTsKKyAgICAgICAgYkhhdmVTZWVkID0gRkFMU0U7CisgICAgfQorICAgIEZYX0RXT1JEIG10aTsKKyAgICBGWF9CT09MCSBiSGF2ZVNlZWQ7CisgICAgRlhfRFdPUkQgbXRbTVRfTl07Cit9IEZYX01UUkFORE9NQ09OVEVYVCwgKiBGWF9MUE1UUkFORE9NQ09OVEVYVDsKK3R5cGVkZWYgRlhfTVRSQU5ET01DT05URVhUIGNvbnN0ICogRlhfTFBDTVRSQU5ET01DT05URVhUOworI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18KK0ZYX0JPT0wgRlhfR2VuZXJhdGVDcnlwdG9SYW5kb20oRlhfTFBEV09SRCBwQnVmZmVyLCBGWF9JTlQzMiBpQ291bnQpOworI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNydC9meF9iYXNpY19hcnJheS5jcHAgYi9jb3JlL3NyYy9meGNydC9meF9iYXNpY19hcnJheS5jcHAKaW5kZXggMzY4NTdjZS4uOTNmMmIyZiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjcnQvZnhfYmFzaWNfYXJyYXkuY3BwCisrKyBiL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX2FycmF5LmNwcApAQCAtMSwzNjUgKzEsMzY1IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGNydC9meF9iYXNpYy5oIg0KLUNGWF9CYXNpY0FycmF5OjpDRlhfQmFzaWNBcnJheShpbnQgdW5pdF9zaXplLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQ0KLSAgICA6IG1fcEFsbG9jYXRvcihwQWxsb2NhdG9yKQ0KLSAgICAsIG1fcERhdGEoTlVMTCkNCi0gICAgLCBtX25TaXplKDApDQotICAgICwgbV9uTWF4U2l6ZSgwKQ0KLSAgICAsIG1fbkdyb3dCeSgwKQ0KLXsNCi0gICAgaWYgKHVuaXRfc2l6ZSA8IDAgfHwgdW5pdF9zaXplID4gKDEgPDwgMjgpKSB7DQotICAgICAgICBtX25Vbml0U2l6ZSA9IDQ7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX25Vbml0U2l6ZSA9IHVuaXRfc2l6ZTsNCi0gICAgfQ0KLX0NCi1DRlhfQmFzaWNBcnJheTo6fkNGWF9CYXNpY0FycmF5KCkNCi17DQotICAgIEZYX0FsbG9jYXRvcl9GcmVlKG1fcEFsbG9jYXRvciwgbV9wRGF0YSk7DQotfQ0KLUZYX0JPT0wgQ0ZYX0Jhc2ljQXJyYXk6OlNldFNpemUoaW50IG5OZXdTaXplLCBpbnQgbkdyb3dCeSkNCi17DQotICAgIGlmIChuTmV3U2l6ZSA8IDAgfHwgbk5ld1NpemUgPiAoMSA8PCAyOCkgLyBtX25Vbml0U2l6ZSkgew0KLSAgICAgICAgbV9wRGF0YSA9IE5VTEw7DQotICAgICAgICBtX25TaXplID0gbV9uTWF4U2l6ZSA9IDA7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKG5Hcm93QnkgPj0gMCkgew0KLSAgICAgICAgbV9uR3Jvd0J5ID0gbkdyb3dCeTsNCi0gICAgfQ0KLSAgICBpZiAobk5ld1NpemUgPT0gMCkgew0KLSAgICAgICAgaWYgKG1fcERhdGEgIT0gTlVMTCkgew0KLSAgICAgICAgICAgIEZYX0FsbG9jYXRvcl9GcmVlKG1fcEFsbG9jYXRvciwgbV9wRGF0YSk7DQotICAgICAgICAgICAgbV9wRGF0YSA9IE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBtX25TaXplID0gbV9uTWF4U2l6ZSA9IDA7DQotICAgIH0gZWxzZSBpZiAobV9wRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICBtX3BEYXRhID0gRlhfQWxsb2NhdG9yX0FsbG9jKG1fcEFsbG9jYXRvciwgRlhfQllURSwgbk5ld1NpemUgKiBtX25Vbml0U2l6ZSk7DQotICAgICAgICBpZiAoIW1fcERhdGEpIHsNCi0gICAgICAgICAgICBtX25TaXplID0gbV9uTWF4U2l6ZSA9IDA7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhTWVNfbWVtc2V0MzIobV9wRGF0YSwgMCwgbk5ld1NpemUgKiBtX25Vbml0U2l6ZSk7DQotICAgICAgICBtX25TaXplID0gbV9uTWF4U2l6ZSA9IG5OZXdTaXplOw0KLSAgICB9IGVsc2UgaWYgKG5OZXdTaXplIDw9IG1fbk1heFNpemUpIHsNCi0gICAgICAgIGlmIChuTmV3U2l6ZSA+IG1fblNpemUpIHsNCi0gICAgICAgICAgICBGWFNZU19tZW1zZXQzMihtX3BEYXRhICsgbV9uU2l6ZSAqIG1fblVuaXRTaXplLCAwLCAobk5ld1NpemUgLSBtX25TaXplKSAqIG1fblVuaXRTaXplKTsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fblNpemUgPSBuTmV3U2l6ZTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGludCBuR3Jvd0J5ID0gbV9uR3Jvd0J5Ow0KLSAgICAgICAgaWYgKG5Hcm93QnkgPT0gMCkgew0KLSAgICAgICAgICAgIG5Hcm93QnkgPSBtX25TaXplIC8gODsNCi0gICAgICAgICAgICBuR3Jvd0J5ID0gKG5Hcm93QnkgPCA0KSA/IDQgOiAoKG5Hcm93QnkgPiAxMDI0KSA/IDEwMjQgOiBuR3Jvd0J5KTsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBuTmV3TWF4Ow0KLSAgICAgICAgaWYgKG5OZXdTaXplIDwgbV9uTWF4U2l6ZSArIG5Hcm93QnkpIHsNCi0gICAgICAgICAgICBuTmV3TWF4ID0gbV9uTWF4U2l6ZSArIG5Hcm93Qnk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIG5OZXdNYXggPSBuTmV3U2l6ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0xQQllURSBwTmV3RGF0YSA9IEZYX0FsbG9jYXRvcl9SZWFsbG9jKG1fcEFsbG9jYXRvciwgRlhfQllURSwgbV9wRGF0YSwgbk5ld01heCAqIG1fblVuaXRTaXplKTsNCi0gICAgICAgIGlmIChwTmV3RGF0YSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhTWVNfbWVtc2V0MzIocE5ld0RhdGEgKyBtX25TaXplICogbV9uVW5pdFNpemUsIDAsIChuTmV3TWF4IC0gbV9uU2l6ZSkgKiBtX25Vbml0U2l6ZSk7DQotICAgICAgICBtX3BEYXRhID0gcE5ld0RhdGE7DQotICAgICAgICBtX25TaXplID0gbk5ld1NpemU7DQotICAgICAgICBtX25NYXhTaXplID0gbk5ld01heDsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDRlhfQmFzaWNBcnJheTo6QXBwZW5kKGNvbnN0IENGWF9CYXNpY0FycmF5JiBzcmMpDQotew0KLSAgICBpbnQgbk9sZFNpemUgPSBtX25TaXplOw0KLSAgICBpZiAoIVNldFNpemUobV9uU2l6ZSArIHNyYy5tX25TaXplLCAtMSkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhICsgbk9sZFNpemUgKiBtX25Vbml0U2l6ZSwgc3JjLm1fcERhdGEsIHNyYy5tX25TaXplICogbV9uVW5pdFNpemUpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDRlhfQmFzaWNBcnJheTo6Q29weShjb25zdCBDRlhfQmFzaWNBcnJheSYgc3JjKQ0KLXsNCi0gICAgaWYgKCFTZXRTaXplKHNyYy5tX25TaXplLCAtMSkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhLCBzcmMubV9wRGF0YSwgc3JjLm1fblNpemUgKiBtX25Vbml0U2l6ZSk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9MUEJZVEUgQ0ZYX0Jhc2ljQXJyYXk6Okluc2VydFNwYWNlQXQoaW50IG5JbmRleCwgaW50IG5Db3VudCkNCi17DQotICAgIGlmIChuSW5kZXggPCAwIHx8IG5Db3VudCA8PSAwKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAobkluZGV4ID49IG1fblNpemUpIHsNCi0gICAgICAgIGlmICghU2V0U2l6ZShuSW5kZXggKyBuQ291bnQsIC0xKSkgew0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaW50IG5PbGRTaXplID0gbV9uU2l6ZTsNCi0gICAgICAgIGlmICghU2V0U2l6ZShtX25TaXplICsgbkNvdW50LCAtMSkpIHsNCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYU1lTX21lbW1vdmUzMihtX3BEYXRhICsgKG5JbmRleCArIG5Db3VudCkqbV9uVW5pdFNpemUsIG1fcERhdGEgKyBuSW5kZXggKiBtX25Vbml0U2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAobk9sZFNpemUgLSBuSW5kZXgpICogbV9uVW5pdFNpemUpOw0KLSAgICAgICAgRlhTWVNfbWVtc2V0MzIobV9wRGF0YSArIG5JbmRleCAqIG1fblVuaXRTaXplLCAwLCBuQ291bnQgKiBtX25Vbml0U2l6ZSk7DQotICAgIH0NCi0gICAgcmV0dXJuIG1fcERhdGEgKyBuSW5kZXggKiBtX25Vbml0U2l6ZTsNCi19DQotRlhfQk9PTCBDRlhfQmFzaWNBcnJheTo6UmVtb3ZlQXQoaW50IG5JbmRleCwgaW50IG5Db3VudCkNCi17DQotICAgIGlmIChuSW5kZXggPCAwIHx8IG5Db3VudCA8PSAwIHx8IG1fblNpemUgPCBuSW5kZXggKyBuQ291bnQpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpbnQgbk1vdmVDb3VudCA9IG1fblNpemUgLSAobkluZGV4ICsgbkNvdW50KTsNCi0gICAgaWYgKG5Nb3ZlQ291bnQpIHsNCi0gICAgICAgIEZYU1lTX21lbW1vdmUzMihtX3BEYXRhICsgbkluZGV4ICogbV9uVW5pdFNpemUsIG1fcERhdGEgKyAobkluZGV4ICsgbkNvdW50KSAqIG1fblVuaXRTaXplLCBuTW92ZUNvdW50ICogbV9uVW5pdFNpemUpOw0KLSAgICB9DQotICAgIG1fblNpemUgLT0gbkNvdW50Ow0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDRlhfQmFzaWNBcnJheTo6SW5zZXJ0QXQoaW50IG5TdGFydEluZGV4LCBjb25zdCBDRlhfQmFzaWNBcnJheSogcE5ld0FycmF5KQ0KLXsNCi0gICAgaWYgKHBOZXdBcnJheSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKHBOZXdBcnJheS0+bV9uU2l6ZSA9PSAwKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBpZiAoIUluc2VydFNwYWNlQXQoblN0YXJ0SW5kZXgsIHBOZXdBcnJheS0+bV9uU2l6ZSkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhICsgblN0YXJ0SW5kZXggKiBtX25Vbml0U2l6ZSwgcE5ld0FycmF5LT5tX3BEYXRhLCBwTmV3QXJyYXktPm1fblNpemUgKiBtX25Vbml0U2l6ZSk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1jb25zdCB2b2lkKiBDRlhfQmFzaWNBcnJheTo6R2V0RGF0YVB0cihpbnQgaW5kZXgpIGNvbnN0DQotew0KLSAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1fblNpemUgfHwgbV9wRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wRGF0YSArIGluZGV4ICogbV9uVW5pdFNpemU7DQotfQ0KLUNGWF9CYXNlU2VnbWVudGVkQXJyYXk6OkNGWF9CYXNlU2VnbWVudGVkQXJyYXkoaW50IHVuaXRfc2l6ZSwgaW50IHNlZ21lbnRfdW5pdHMsIGludCBpbmRleF9zaXplLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQ0KLSAgICA6IG1fcEFsbG9jYXRvcihwQWxsb2NhdG9yKQ0KLSAgICAsIG1fVW5pdFNpemUodW5pdF9zaXplKQ0KLSAgICAsIG1fU2VnbWVudFNpemUoc2VnbWVudF91bml0cykNCi0gICAgLCBtX0luZGV4U2l6ZShpbmRleF9zaXplKQ0KLSAgICAsIG1fSW5kZXhEZXB0aCgwKQ0KLSAgICAsIG1fRGF0YVNpemUoMCkNCi0gICAgLCBtX3BJbmRleChOVUxMKQ0KLXsNCi19DQotdm9pZCBDRlhfQmFzZVNlZ21lbnRlZEFycmF5OjpTZXRVbml0U2l6ZShpbnQgdW5pdF9zaXplLCBpbnQgc2VnbWVudF91bml0cywgaW50IGluZGV4X3NpemUpDQotew0KLSAgICBBU1NFUlQobV9EYXRhU2l6ZSA9PSAwKTsNCi0gICAgbV9Vbml0U2l6ZSA9IHVuaXRfc2l6ZTsNCi0gICAgbV9TZWdtZW50U2l6ZSA9IHNlZ21lbnRfdW5pdHM7DQotICAgIG1fSW5kZXhTaXplID0gaW5kZXhfc2l6ZTsNCi19DQotQ0ZYX0Jhc2VTZWdtZW50ZWRBcnJheTo6fkNGWF9CYXNlU2VnbWVudGVkQXJyYXkoKQ0KLXsNCi0gICAgUmVtb3ZlQWxsKCk7DQotfQ0KLXN0YXRpYyB2b2lkIF9DbGVhckluZGV4KElGWF9BbGxvY2F0b3IqIHBBbGxjYXRvciwgaW50IGxldmVsLCBpbnQgc2l6ZSwgdm9pZCoqIHBJbmRleCkNCi17DQotICAgIGlmIChsZXZlbCA9PSAwKSB7DQotICAgICAgICBGWF9BbGxvY2F0b3JfRnJlZShwQWxsY2F0b3IsIHBJbmRleCk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKSB7DQotICAgICAgICBpZiAocEluZGV4W2ldID09IE5VTEwpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIF9DbGVhckluZGV4KHBBbGxjYXRvciwgbGV2ZWwgLSAxLCBzaXplLCAodm9pZCoqKXBJbmRleFtpXSk7DQotICAgIH0NCi0gICAgRlhfQWxsb2NhdG9yX0ZyZWUocEFsbGNhdG9yLCBwSW5kZXgpOw0KLX0NCi12b2lkIENGWF9CYXNlU2VnbWVudGVkQXJyYXk6OlJlbW92ZUFsbCgpDQotew0KLSAgICBpZiAobV9wSW5kZXggPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIF9DbGVhckluZGV4KG1fcEFsbG9jYXRvciwgbV9JbmRleERlcHRoLCBtX0luZGV4U2l6ZSwgKHZvaWQqKiltX3BJbmRleCk7DQotICAgIG1fcEluZGV4ID0gTlVMTDsNCi0gICAgbV9JbmRleERlcHRoID0gMDsNCi0gICAgbV9EYXRhU2l6ZSA9IDA7DQotfQ0KLXZvaWQqIENGWF9CYXNlU2VnbWVudGVkQXJyYXk6OkFkZCgpDQotew0KLSAgICBpZiAobV9EYXRhU2l6ZSAlIG1fU2VnbWVudFNpemUpIHsNCi0gICAgICAgIHJldHVybiBHZXRBdChtX0RhdGFTaXplICsrKTsNCi0gICAgfQ0KLSAgICB2b2lkKiBwU2VnbWVudCA9IEZYX0FsbG9jYXRvcl9BbGxvYyhtX3BBbGxvY2F0b3IsIEZYX0JZVEUsIG1fVW5pdFNpemUgKiBtX1NlZ21lbnRTaXplKTsNCi0gICAgaWYgKCFwU2VnbWVudCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKG1fcEluZGV4ID09IE5VTEwpIHsNCi0gICAgICAgIG1fcEluZGV4ID0gcFNlZ21lbnQ7DQotICAgICAgICBtX0RhdGFTaXplICsrOw0KLSAgICAgICAgcmV0dXJuIHBTZWdtZW50Ow0KLSAgICB9DQotICAgIGlmIChtX0luZGV4RGVwdGggPT0gMCkgew0KLSAgICAgICAgdm9pZCoqIHBJbmRleCA9ICh2b2lkKiopRlhfQWxsb2NhdG9yX0FsbG9jKG1fcEFsbG9jYXRvciwgdm9pZCosIG1fSW5kZXhTaXplKTsNCi0gICAgICAgIGlmIChwSW5kZXggPT0gTlVMTCkgew0KLSAgICAgICAgICAgIEZYX0FsbG9jYXRvcl9GcmVlKG1fcEFsbG9jYXRvciwgcFNlZ21lbnQpOw0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhTWVNfbWVtc2V0MzIocEluZGV4LCAwLCBzaXplb2Yodm9pZCopICogbV9JbmRleFNpemUpOw0KLSAgICAgICAgcEluZGV4WzBdID0gbV9wSW5kZXg7DQotICAgICAgICBwSW5kZXhbMV0gPSBwU2VnbWVudDsNCi0gICAgICAgIG1fcEluZGV4ID0gcEluZGV4Ow0KLSAgICAgICAgbV9EYXRhU2l6ZSArKzsNCi0gICAgICAgIG1fSW5kZXhEZXB0aCArKzsNCi0gICAgICAgIHJldHVybiBwU2VnbWVudDsNCi0gICAgfQ0KLSAgICBpbnQgc2VnX2luZGV4ID0gbV9EYXRhU2l6ZSAvIG1fU2VnbWVudFNpemU7DQotICAgIGlmIChzZWdfaW5kZXggJSBtX0luZGV4U2l6ZSkgew0KLSAgICAgICAgdm9pZCoqIHBJbmRleCA9IEdldEluZGV4KHNlZ19pbmRleCk7DQotICAgICAgICBwSW5kZXhbc2VnX2luZGV4ICUgbV9JbmRleFNpemVdID0gcFNlZ21lbnQ7DQotICAgICAgICBtX0RhdGFTaXplICsrOw0KLSAgICAgICAgcmV0dXJuIHBTZWdtZW50Ow0KLSAgICB9DQotICAgIGludCB0cmVlX3NpemUgPSAxOw0KLSAgICBpbnQgaTsNCi0gICAgZm9yIChpID0gMDsgaSA8IG1fSW5kZXhEZXB0aDsgaSArKykgew0KLSAgICAgICAgdHJlZV9zaXplICo9IG1fSW5kZXhTaXplOw0KLSAgICB9DQotICAgIGlmIChtX0RhdGFTaXplID09IHRyZWVfc2l6ZSAqIG1fU2VnbWVudFNpemUpIHsNCi0gICAgICAgIHZvaWQqKiBwSW5kZXggPSAodm9pZCoqKUZYX0FsbG9jYXRvcl9BbGxvYyhtX3BBbGxvY2F0b3IsIHZvaWQqLCBtX0luZGV4U2l6ZSk7DQotICAgICAgICBpZiAocEluZGV4ID09IE5VTEwpIHsNCi0gICAgICAgICAgICBGWF9BbGxvY2F0b3JfRnJlZShtX3BBbGxvY2F0b3IsIHBTZWdtZW50KTsNCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYU1lTX21lbXNldDMyKHBJbmRleCwgMCwgc2l6ZW9mKHZvaWQqKSAqIG1fSW5kZXhTaXplKTsNCi0gICAgICAgIHBJbmRleFswXSA9IG1fcEluZGV4Ow0KLSAgICAgICAgbV9wSW5kZXggPSBwSW5kZXg7DQotICAgICAgICBtX0luZGV4RGVwdGggKys7DQotICAgIH0gZWxzZSB7DQotICAgICAgICB0cmVlX3NpemUgLz0gbV9JbmRleFNpemU7DQotICAgIH0NCi0gICAgdm9pZCoqIHBTcG90ID0gKHZvaWQqKiltX3BJbmRleDsNCi0gICAgZm9yIChpID0gMTsgaSA8IG1fSW5kZXhEZXB0aDsgaSArKykgew0KLSAgICAgICAgaWYgKHBTcG90W3NlZ19pbmRleCAvIHRyZWVfc2l6ZV0gPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHBTcG90W3NlZ19pbmRleCAvIHRyZWVfc2l6ZV0gPSAodm9pZCopRlhfQWxsb2NhdG9yX0FsbG9jKG1fcEFsbG9jYXRvciwgdm9pZCosIG1fSW5kZXhTaXplKTsNCi0gICAgICAgICAgICBpZiAocFNwb3Rbc2VnX2luZGV4IC8gdHJlZV9zaXplXSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWFNZU19tZW1zZXQzMihwU3BvdFtzZWdfaW5kZXggLyB0cmVlX3NpemVdLCAwLCBzaXplb2Yodm9pZCopICogbV9JbmRleFNpemUpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcFNwb3QgPSAodm9pZCoqKXBTcG90W3NlZ19pbmRleCAvIHRyZWVfc2l6ZV07DQotICAgICAgICBzZWdfaW5kZXggPSBzZWdfaW5kZXggJSB0cmVlX3NpemU7DQotICAgICAgICB0cmVlX3NpemUgLz0gbV9JbmRleFNpemU7DQotICAgIH0NCi0gICAgaWYgKGkgPCBtX0luZGV4RGVwdGgpIHsNCi0gICAgICAgIEZYX0FsbG9jYXRvcl9GcmVlKG1fcEFsbG9jYXRvciwgcFNlZ21lbnQpOw0KLSAgICAgICAgUmVtb3ZlQWxsKCk7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBwU3BvdFtzZWdfaW5kZXggJSBtX0luZGV4U2l6ZV0gPSBwU2VnbWVudDsNCi0gICAgbV9EYXRhU2l6ZSArKzsNCi0gICAgcmV0dXJuIHBTZWdtZW50Ow0KLX0NCi12b2lkKiogQ0ZYX0Jhc2VTZWdtZW50ZWRBcnJheTo6R2V0SW5kZXgoaW50IHNlZ19pbmRleCkgY29uc3QNCi17DQotICAgIEFTU0VSVChtX0luZGV4RGVwdGggIT0gMCk7DQotICAgIGlmIChtX0luZGV4RGVwdGggPT0gMSkgew0KLSAgICAgICAgcmV0dXJuICh2b2lkKiopbV9wSW5kZXg7DQotICAgIH0gZWxzZSBpZiAobV9JbmRleERlcHRoID09IDIpIHsNCi0gICAgICAgIHJldHVybiAodm9pZCoqKSgodm9pZCoqKW1fcEluZGV4KVtzZWdfaW5kZXggLyBtX0luZGV4U2l6ZV07DQotICAgIH0NCi0gICAgaW50IHRyZWVfc2l6ZSA9IDE7DQotICAgIGludCBpOw0KLSAgICBmb3IgKGkgPSAxOyBpIDwgbV9JbmRleERlcHRoOyBpICsrKSB7DQotICAgICAgICB0cmVlX3NpemUgKj0gbV9JbmRleFNpemU7DQotICAgIH0NCi0gICAgdm9pZCoqIHBTcG90ID0gKHZvaWQqKiltX3BJbmRleDsNCi0gICAgZm9yIChpID0gMTsgaSA8IG1fSW5kZXhEZXB0aDsgaSArKykgew0KLSAgICAgICAgcFNwb3QgPSAodm9pZCoqKXBTcG90W3NlZ19pbmRleCAvIHRyZWVfc2l6ZV07DQotICAgICAgICBzZWdfaW5kZXggPSBzZWdfaW5kZXggJSB0cmVlX3NpemU7DQotICAgICAgICB0cmVlX3NpemUgLz0gbV9JbmRleFNpemU7DQotICAgIH0NCi0gICAgcmV0dXJuIHBTcG90Ow0KLX0NCi12b2lkKiBDRlhfQmFzZVNlZ21lbnRlZEFycmF5OjpJdGVyYXRlU2VnbWVudChGWF9MUENCWVRFIHBTZWdtZW50LCBpbnQgY291bnQsIEZYX0JPT0wgKCpjYWxsYmFjaykodm9pZCogcGFyYW0sIHZvaWQqIHBEYXRhKSwgdm9pZCogcGFyYW0pIGNvbnN0DQotew0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpICsrKSB7DQotICAgICAgICBpZiAoIWNhbGxiYWNrKHBhcmFtLCAodm9pZCopKHBTZWdtZW50ICsgaSAqIG1fVW5pdFNpemUpKSkgew0KLSAgICAgICAgICAgIHJldHVybiAodm9pZCopKHBTZWdtZW50ICsgaSAqIG1fVW5pdFNpemUpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi12b2lkKiBDRlhfQmFzZVNlZ21lbnRlZEFycmF5OjpJdGVyYXRlSW5kZXgoaW50IGxldmVsLCBpbnQmIHN0YXJ0LCB2b2lkKiogcEluZGV4LCBGWF9CT09MICgqY2FsbGJhY2spKHZvaWQqIHBhcmFtLCB2b2lkKiBwRGF0YSksIHZvaWQqIHBhcmFtKSBjb25zdA0KLXsNCi0gICAgaWYgKGxldmVsID09IDApIHsNCi0gICAgICAgIGludCBjb3VudCA9IG1fRGF0YVNpemUgLSBzdGFydDsNCi0gICAgICAgIGlmIChjb3VudCA+IG1fU2VnbWVudFNpemUpIHsNCi0gICAgICAgICAgICBjb3VudCA9IG1fU2VnbWVudFNpemU7DQotICAgICAgICB9DQotICAgICAgICBzdGFydCArPSBjb3VudDsNCi0gICAgICAgIHJldHVybiBJdGVyYXRlU2VnbWVudCgoRlhfTFBDQllURSlwSW5kZXgsIGNvdW50LCBjYWxsYmFjaywgcGFyYW0pOw0KLSAgICB9DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9JbmRleFNpemU7IGkgKyspIHsNCi0gICAgICAgIGlmIChwSW5kZXhbaV0gPT0gTlVMTCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgdm9pZCogcCA9IEl0ZXJhdGVJbmRleChsZXZlbCAtIDEsIHN0YXJ0LCAodm9pZCoqKXBJbmRleFtpXSwgY2FsbGJhY2ssIHBhcmFtKTsNCi0gICAgICAgIGlmIChwKSB7DQotICAgICAgICAgICAgcmV0dXJuIHA7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLXZvaWQqIENGWF9CYXNlU2VnbWVudGVkQXJyYXk6Okl0ZXJhdGUoRlhfQk9PTCAoKmNhbGxiYWNrKSh2b2lkKiBwYXJhbSwgdm9pZCogcERhdGEpLCB2b2lkKiBwYXJhbSkgY29uc3QNCi17DQotICAgIGlmIChtX3BJbmRleCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpbnQgc3RhcnQgPSAwOw0KLSAgICByZXR1cm4gSXRlcmF0ZUluZGV4KG1fSW5kZXhEZXB0aCwgc3RhcnQsICh2b2lkKiopbV9wSW5kZXgsIGNhbGxiYWNrLCBwYXJhbSk7DQotfQ0KLXZvaWQqIENGWF9CYXNlU2VnbWVudGVkQXJyYXk6OkdldEF0KGludCBpbmRleCkgY29uc3QNCi17DQotICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbV9EYXRhU2l6ZSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKG1fSW5kZXhEZXB0aCA9PSAwKSB7DQotICAgICAgICByZXR1cm4gKEZYX0xQQllURSltX3BJbmRleCArIG1fVW5pdFNpemUgKiBpbmRleDsNCi0gICAgfQ0KLSAgICBpbnQgc2VnX2luZGV4ID0gaW5kZXggLyBtX1NlZ21lbnRTaXplOw0KLSAgICByZXR1cm4gKEZYX0xQQllURSlHZXRJbmRleChzZWdfaW5kZXgpW3NlZ19pbmRleCAlIG1fSW5kZXhTaXplXSArIChpbmRleCAlIG1fU2VnbWVudFNpemUpICogbV9Vbml0U2l6ZTsNCi19DQotdm9pZCBDRlhfQmFzZVNlZ21lbnRlZEFycmF5OjpEZWxldGUoaW50IGluZGV4LCBpbnQgY291bnQpDQotew0KLSAgICBpZihpbmRleCA8IDAgfHwgY291bnQgPCAxIHx8IGluZGV4ICsgY291bnQgPiBtX0RhdGFTaXplKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaW50IGk7DQotICAgIGZvciAoaSA9IGluZGV4OyBpIDwgbV9EYXRhU2l6ZSAtIGNvdW50OyBpICsrKSB7DQotICAgICAgICBGWF9CWVRFKiBwU3JjID0gKEZYX0JZVEUqKUdldEF0KGkgKyBjb3VudCk7DQotICAgICAgICBGWF9CWVRFKiBwRGVzdCA9IChGWF9CWVRFKilHZXRBdChpKTsNCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbV9Vbml0U2l6ZTsgaiArKykgew0KLSAgICAgICAgICAgIHBEZXN0W2pdID0gcFNyY1tqXTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpbnQgbmV3X3NlZ3MgPSAobV9EYXRhU2l6ZSAtIGNvdW50ICsgbV9TZWdtZW50U2l6ZSAtIDEpIC8gbV9TZWdtZW50U2l6ZTsNCi0gICAgaW50IG9sZF9zZWdzID0gKG1fRGF0YVNpemUgKyBtX1NlZ21lbnRTaXplIC0gMSkgLyBtX1NlZ21lbnRTaXplOw0KLSAgICBpZiAobmV3X3NlZ3MgPCBvbGRfc2Vncykgew0KLSAgICAgICAgaWYobV9JbmRleERlcHRoKSB7DQotICAgICAgICAgICAgZm9yIChpID0gbmV3X3NlZ3M7IGkgPCBvbGRfc2VnczsgaSArKykgew0KLSAgICAgICAgICAgICAgICB2b2lkKiogcEluZGV4ID0gR2V0SW5kZXgoaSk7DQotICAgICAgICAgICAgICAgIEZYX0FsbG9jYXRvcl9GcmVlKG1fcEFsbG9jYXRvciwgcEluZGV4W2kgJSBtX0luZGV4U2l6ZV0pOw0KLSAgICAgICAgICAgICAgICBwSW5kZXhbaSAlIG1fSW5kZXhTaXplXSA9IE5VTEw7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBGWF9BbGxvY2F0b3JfRnJlZShtX3BBbGxvY2F0b3IsIG1fcEluZGV4KTsNCi0gICAgICAgICAgICBtX3BJbmRleCA9IE5VTEw7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9EYXRhU2l6ZSAtPSBjb3VudDsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfYmFzaWMuaCIKK0NGWF9CYXNpY0FycmF5OjpDRlhfQmFzaWNBcnJheShpbnQgdW5pdF9zaXplLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQorICAgIDogbV9wQWxsb2NhdG9yKHBBbGxvY2F0b3IpCisgICAgLCBtX3BEYXRhKE5VTEwpCisgICAgLCBtX25TaXplKDApCisgICAgLCBtX25NYXhTaXplKDApCisgICAgLCBtX25Hcm93QnkoMCkKK3sKKyAgICBpZiAodW5pdF9zaXplIDwgMCB8fCB1bml0X3NpemUgPiAoMSA8PCAyOCkpIHsKKyAgICAgICAgbV9uVW5pdFNpemUgPSA0OworICAgIH0gZWxzZSB7CisgICAgICAgIG1fblVuaXRTaXplID0gdW5pdF9zaXplOworICAgIH0KK30KK0NGWF9CYXNpY0FycmF5Ojp+Q0ZYX0Jhc2ljQXJyYXkoKQoreworICAgIEZYX0FsbG9jYXRvcl9GcmVlKG1fcEFsbG9jYXRvciwgbV9wRGF0YSk7Cit9CitGWF9CT09MIENGWF9CYXNpY0FycmF5OjpTZXRTaXplKGludCBuTmV3U2l6ZSwgaW50IG5Hcm93QnkpCit7CisgICAgaWYgKG5OZXdTaXplIDwgMCB8fCBuTmV3U2l6ZSA+ICgxIDw8IDI4KSAvIG1fblVuaXRTaXplKSB7CisgICAgICAgIG1fcERhdGEgPSBOVUxMOworICAgICAgICBtX25TaXplID0gbV9uTWF4U2l6ZSA9IDA7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKG5Hcm93QnkgPj0gMCkgeworICAgICAgICBtX25Hcm93QnkgPSBuR3Jvd0J5OworICAgIH0KKyAgICBpZiAobk5ld1NpemUgPT0gMCkgeworICAgICAgICBpZiAobV9wRGF0YSAhPSBOVUxMKSB7CisgICAgICAgICAgICBGWF9BbGxvY2F0b3JfRnJlZShtX3BBbGxvY2F0b3IsIG1fcERhdGEpOworICAgICAgICAgICAgbV9wRGF0YSA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbV9uU2l6ZSA9IG1fbk1heFNpemUgPSAwOworICAgIH0gZWxzZSBpZiAobV9wRGF0YSA9PSBOVUxMKSB7CisgICAgICAgIG1fcERhdGEgPSBGWF9BbGxvY2F0b3JfQWxsb2MobV9wQWxsb2NhdG9yLCBGWF9CWVRFLCBuTmV3U2l6ZSAqIG1fblVuaXRTaXplKTsKKyAgICAgICAgaWYgKCFtX3BEYXRhKSB7CisgICAgICAgICAgICBtX25TaXplID0gbV9uTWF4U2l6ZSA9IDA7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgRlhTWVNfbWVtc2V0MzIobV9wRGF0YSwgMCwgbk5ld1NpemUgKiBtX25Vbml0U2l6ZSk7CisgICAgICAgIG1fblNpemUgPSBtX25NYXhTaXplID0gbk5ld1NpemU7CisgICAgfSBlbHNlIGlmIChuTmV3U2l6ZSA8PSBtX25NYXhTaXplKSB7CisgICAgICAgIGlmIChuTmV3U2l6ZSA+IG1fblNpemUpIHsKKyAgICAgICAgICAgIEZYU1lTX21lbXNldDMyKG1fcERhdGEgKyBtX25TaXplICogbV9uVW5pdFNpemUsIDAsIChuTmV3U2l6ZSAtIG1fblNpemUpICogbV9uVW5pdFNpemUpOworICAgICAgICB9CisgICAgICAgIG1fblNpemUgPSBuTmV3U2l6ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgbkdyb3dCeSA9IG1fbkdyb3dCeTsKKyAgICAgICAgaWYgKG5Hcm93QnkgPT0gMCkgeworICAgICAgICAgICAgbkdyb3dCeSA9IG1fblNpemUgLyA4OworICAgICAgICAgICAgbkdyb3dCeSA9IChuR3Jvd0J5IDwgNCkgPyA0IDogKChuR3Jvd0J5ID4gMTAyNCkgPyAxMDI0IDogbkdyb3dCeSk7CisgICAgICAgIH0KKyAgICAgICAgaW50IG5OZXdNYXg7CisgICAgICAgIGlmIChuTmV3U2l6ZSA8IG1fbk1heFNpemUgKyBuR3Jvd0J5KSB7CisgICAgICAgICAgICBuTmV3TWF4ID0gbV9uTWF4U2l6ZSArIG5Hcm93Qnk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuTmV3TWF4ID0gbk5ld1NpemU7CisgICAgICAgIH0KKyAgICAgICAgRlhfTFBCWVRFIHBOZXdEYXRhID0gRlhfQWxsb2NhdG9yX1JlYWxsb2MobV9wQWxsb2NhdG9yLCBGWF9CWVRFLCBtX3BEYXRhLCBuTmV3TWF4ICogbV9uVW5pdFNpemUpOworICAgICAgICBpZiAocE5ld0RhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIEZYU1lTX21lbXNldDMyKHBOZXdEYXRhICsgbV9uU2l6ZSAqIG1fblVuaXRTaXplLCAwLCAobk5ld01heCAtIG1fblNpemUpICogbV9uVW5pdFNpemUpOworICAgICAgICBtX3BEYXRhID0gcE5ld0RhdGE7CisgICAgICAgIG1fblNpemUgPSBuTmV3U2l6ZTsKKyAgICAgICAgbV9uTWF4U2l6ZSA9IG5OZXdNYXg7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDRlhfQmFzaWNBcnJheTo6QXBwZW5kKGNvbnN0IENGWF9CYXNpY0FycmF5JiBzcmMpCit7CisgICAgaW50IG5PbGRTaXplID0gbV9uU2l6ZTsKKyAgICBpZiAoIVNldFNpemUobV9uU2l6ZSArIHNyYy5tX25TaXplLCAtMSkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhICsgbk9sZFNpemUgKiBtX25Vbml0U2l6ZSwgc3JjLm1fcERhdGEsIHNyYy5tX25TaXplICogbV9uVW5pdFNpemUpOworICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDRlhfQmFzaWNBcnJheTo6Q29weShjb25zdCBDRlhfQmFzaWNBcnJheSYgc3JjKQoreworICAgIGlmICghU2V0U2l6ZShzcmMubV9uU2l6ZSwgLTEpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgRlhTWVNfbWVtY3B5MzIobV9wRGF0YSwgc3JjLm1fcERhdGEsIHNyYy5tX25TaXplICogbV9uVW5pdFNpemUpOworICAgIHJldHVybiBUUlVFOworfQorRlhfTFBCWVRFIENGWF9CYXNpY0FycmF5OjpJbnNlcnRTcGFjZUF0KGludCBuSW5kZXgsIGludCBuQ291bnQpCit7CisgICAgaWYgKG5JbmRleCA8IDAgfHwgbkNvdW50IDw9IDApIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChuSW5kZXggPj0gbV9uU2l6ZSkgeworICAgICAgICBpZiAoIVNldFNpemUobkluZGV4ICsgbkNvdW50LCAtMSkpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IG5PbGRTaXplID0gbV9uU2l6ZTsKKyAgICAgICAgaWYgKCFTZXRTaXplKG1fblNpemUgKyBuQ291bnQsIC0xKSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgRlhTWVNfbWVtbW92ZTMyKG1fcERhdGEgKyAobkluZGV4ICsgbkNvdW50KSptX25Vbml0U2l6ZSwgbV9wRGF0YSArIG5JbmRleCAqIG1fblVuaXRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgKG5PbGRTaXplIC0gbkluZGV4KSAqIG1fblVuaXRTaXplKTsKKyAgICAgICAgRlhTWVNfbWVtc2V0MzIobV9wRGF0YSArIG5JbmRleCAqIG1fblVuaXRTaXplLCAwLCBuQ291bnQgKiBtX25Vbml0U2l6ZSk7CisgICAgfQorICAgIHJldHVybiBtX3BEYXRhICsgbkluZGV4ICogbV9uVW5pdFNpemU7Cit9CitGWF9CT09MIENGWF9CYXNpY0FycmF5OjpSZW1vdmVBdChpbnQgbkluZGV4LCBpbnQgbkNvdW50KQoreworICAgIGlmIChuSW5kZXggPCAwIHx8IG5Db3VudCA8PSAwIHx8IG1fblNpemUgPCBuSW5kZXggKyBuQ291bnQpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpbnQgbk1vdmVDb3VudCA9IG1fblNpemUgLSAobkluZGV4ICsgbkNvdW50KTsKKyAgICBpZiAobk1vdmVDb3VudCkgeworICAgICAgICBGWFNZU19tZW1tb3ZlMzIobV9wRGF0YSArIG5JbmRleCAqIG1fblVuaXRTaXplLCBtX3BEYXRhICsgKG5JbmRleCArIG5Db3VudCkgKiBtX25Vbml0U2l6ZSwgbk1vdmVDb3VudCAqIG1fblVuaXRTaXplKTsKKyAgICB9CisgICAgbV9uU2l6ZSAtPSBuQ291bnQ7CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENGWF9CYXNpY0FycmF5OjpJbnNlcnRBdChpbnQgblN0YXJ0SW5kZXgsIGNvbnN0IENGWF9CYXNpY0FycmF5KiBwTmV3QXJyYXkpCit7CisgICAgaWYgKHBOZXdBcnJheSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKHBOZXdBcnJheS0+bV9uU2l6ZSA9PSAwKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBpZiAoIUluc2VydFNwYWNlQXQoblN0YXJ0SW5kZXgsIHBOZXdBcnJheS0+bV9uU2l6ZSkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhICsgblN0YXJ0SW5kZXggKiBtX25Vbml0U2l6ZSwgcE5ld0FycmF5LT5tX3BEYXRhLCBwTmV3QXJyYXktPm1fblNpemUgKiBtX25Vbml0U2l6ZSk7CisgICAgcmV0dXJuIFRSVUU7Cit9Citjb25zdCB2b2lkKiBDRlhfQmFzaWNBcnJheTo6R2V0RGF0YVB0cihpbnQgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtX25TaXplIHx8IG1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIG1fcERhdGEgKyBpbmRleCAqIG1fblVuaXRTaXplOworfQorQ0ZYX0Jhc2VTZWdtZW50ZWRBcnJheTo6Q0ZYX0Jhc2VTZWdtZW50ZWRBcnJheShpbnQgdW5pdF9zaXplLCBpbnQgc2VnbWVudF91bml0cywgaW50IGluZGV4X3NpemUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpCisgICAgOiBtX3BBbGxvY2F0b3IocEFsbG9jYXRvcikKKyAgICAsIG1fVW5pdFNpemUodW5pdF9zaXplKQorICAgICwgbV9TZWdtZW50U2l6ZShzZWdtZW50X3VuaXRzKQorICAgICwgbV9JbmRleFNpemUoaW5kZXhfc2l6ZSkKKyAgICAsIG1fSW5kZXhEZXB0aCgwKQorICAgICwgbV9EYXRhU2l6ZSgwKQorICAgICwgbV9wSW5kZXgoTlVMTCkKK3sKK30KK3ZvaWQgQ0ZYX0Jhc2VTZWdtZW50ZWRBcnJheTo6U2V0VW5pdFNpemUoaW50IHVuaXRfc2l6ZSwgaW50IHNlZ21lbnRfdW5pdHMsIGludCBpbmRleF9zaXplKQoreworICAgIEFTU0VSVChtX0RhdGFTaXplID09IDApOworICAgIG1fVW5pdFNpemUgPSB1bml0X3NpemU7CisgICAgbV9TZWdtZW50U2l6ZSA9IHNlZ21lbnRfdW5pdHM7CisgICAgbV9JbmRleFNpemUgPSBpbmRleF9zaXplOworfQorQ0ZYX0Jhc2VTZWdtZW50ZWRBcnJheTo6fkNGWF9CYXNlU2VnbWVudGVkQXJyYXkoKQoreworICAgIFJlbW92ZUFsbCgpOworfQorc3RhdGljIHZvaWQgX0NsZWFySW5kZXgoSUZYX0FsbG9jYXRvciogcEFsbGNhdG9yLCBpbnQgbGV2ZWwsIGludCBzaXplLCB2b2lkKiogcEluZGV4KQoreworICAgIGlmIChsZXZlbCA9PSAwKSB7CisgICAgICAgIEZYX0FsbG9jYXRvcl9GcmVlKHBBbGxjYXRvciwgcEluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkgKyspIHsKKyAgICAgICAgaWYgKHBJbmRleFtpXSA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBfQ2xlYXJJbmRleChwQWxsY2F0b3IsIGxldmVsIC0gMSwgc2l6ZSwgKHZvaWQqKilwSW5kZXhbaV0pOworICAgIH0KKyAgICBGWF9BbGxvY2F0b3JfRnJlZShwQWxsY2F0b3IsIHBJbmRleCk7Cit9Cit2b2lkIENGWF9CYXNlU2VnbWVudGVkQXJyYXk6OlJlbW92ZUFsbCgpCit7CisgICAgaWYgKG1fcEluZGV4ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBfQ2xlYXJJbmRleChtX3BBbGxvY2F0b3IsIG1fSW5kZXhEZXB0aCwgbV9JbmRleFNpemUsICh2b2lkKiopbV9wSW5kZXgpOworICAgIG1fcEluZGV4ID0gTlVMTDsKKyAgICBtX0luZGV4RGVwdGggPSAwOworICAgIG1fRGF0YVNpemUgPSAwOworfQordm9pZCogQ0ZYX0Jhc2VTZWdtZW50ZWRBcnJheTo6QWRkKCkKK3sKKyAgICBpZiAobV9EYXRhU2l6ZSAlIG1fU2VnbWVudFNpemUpIHsKKyAgICAgICAgcmV0dXJuIEdldEF0KG1fRGF0YVNpemUgKyspOworICAgIH0KKyAgICB2b2lkKiBwU2VnbWVudCA9IEZYX0FsbG9jYXRvcl9BbGxvYyhtX3BBbGxvY2F0b3IsIEZYX0JZVEUsIG1fVW5pdFNpemUgKiBtX1NlZ21lbnRTaXplKTsKKyAgICBpZiAoIXBTZWdtZW50KSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAobV9wSW5kZXggPT0gTlVMTCkgeworICAgICAgICBtX3BJbmRleCA9IHBTZWdtZW50OworICAgICAgICBtX0RhdGFTaXplICsrOworICAgICAgICByZXR1cm4gcFNlZ21lbnQ7CisgICAgfQorICAgIGlmIChtX0luZGV4RGVwdGggPT0gMCkgeworICAgICAgICB2b2lkKiogcEluZGV4ID0gKHZvaWQqKilGWF9BbGxvY2F0b3JfQWxsb2MobV9wQWxsb2NhdG9yLCB2b2lkKiwgbV9JbmRleFNpemUpOworICAgICAgICBpZiAocEluZGV4ID09IE5VTEwpIHsKKyAgICAgICAgICAgIEZYX0FsbG9jYXRvcl9GcmVlKG1fcEFsbG9jYXRvciwgcFNlZ21lbnQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgRlhTWVNfbWVtc2V0MzIocEluZGV4LCAwLCBzaXplb2Yodm9pZCopICogbV9JbmRleFNpemUpOworICAgICAgICBwSW5kZXhbMF0gPSBtX3BJbmRleDsKKyAgICAgICAgcEluZGV4WzFdID0gcFNlZ21lbnQ7CisgICAgICAgIG1fcEluZGV4ID0gcEluZGV4OworICAgICAgICBtX0RhdGFTaXplICsrOworICAgICAgICBtX0luZGV4RGVwdGggKys7CisgICAgICAgIHJldHVybiBwU2VnbWVudDsKKyAgICB9CisgICAgaW50IHNlZ19pbmRleCA9IG1fRGF0YVNpemUgLyBtX1NlZ21lbnRTaXplOworICAgIGlmIChzZWdfaW5kZXggJSBtX0luZGV4U2l6ZSkgeworICAgICAgICB2b2lkKiogcEluZGV4ID0gR2V0SW5kZXgoc2VnX2luZGV4KTsKKyAgICAgICAgcEluZGV4W3NlZ19pbmRleCAlIG1fSW5kZXhTaXplXSA9IHBTZWdtZW50OworICAgICAgICBtX0RhdGFTaXplICsrOworICAgICAgICByZXR1cm4gcFNlZ21lbnQ7CisgICAgfQorICAgIGludCB0cmVlX3NpemUgPSAxOworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBtX0luZGV4RGVwdGg7IGkgKyspIHsKKyAgICAgICAgdHJlZV9zaXplICo9IG1fSW5kZXhTaXplOworICAgIH0KKyAgICBpZiAobV9EYXRhU2l6ZSA9PSB0cmVlX3NpemUgKiBtX1NlZ21lbnRTaXplKSB7CisgICAgICAgIHZvaWQqKiBwSW5kZXggPSAodm9pZCoqKUZYX0FsbG9jYXRvcl9BbGxvYyhtX3BBbGxvY2F0b3IsIHZvaWQqLCBtX0luZGV4U2l6ZSk7CisgICAgICAgIGlmIChwSW5kZXggPT0gTlVMTCkgeworICAgICAgICAgICAgRlhfQWxsb2NhdG9yX0ZyZWUobV9wQWxsb2NhdG9yLCBwU2VnbWVudCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBGWFNZU19tZW1zZXQzMihwSW5kZXgsIDAsIHNpemVvZih2b2lkKikgKiBtX0luZGV4U2l6ZSk7CisgICAgICAgIHBJbmRleFswXSA9IG1fcEluZGV4OworICAgICAgICBtX3BJbmRleCA9IHBJbmRleDsKKyAgICAgICAgbV9JbmRleERlcHRoICsrOworICAgIH0gZWxzZSB7CisgICAgICAgIHRyZWVfc2l6ZSAvPSBtX0luZGV4U2l6ZTsKKyAgICB9CisgICAgdm9pZCoqIHBTcG90ID0gKHZvaWQqKiltX3BJbmRleDsKKyAgICBmb3IgKGkgPSAxOyBpIDwgbV9JbmRleERlcHRoOyBpICsrKSB7CisgICAgICAgIGlmIChwU3BvdFtzZWdfaW5kZXggLyB0cmVlX3NpemVdID09IE5VTEwpIHsKKyAgICAgICAgICAgIHBTcG90W3NlZ19pbmRleCAvIHRyZWVfc2l6ZV0gPSAodm9pZCopRlhfQWxsb2NhdG9yX0FsbG9jKG1fcEFsbG9jYXRvciwgdm9pZCosIG1fSW5kZXhTaXplKTsKKyAgICAgICAgICAgIGlmIChwU3BvdFtzZWdfaW5kZXggLyB0cmVlX3NpemVdID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZYU1lTX21lbXNldDMyKHBTcG90W3NlZ19pbmRleCAvIHRyZWVfc2l6ZV0sIDAsIHNpemVvZih2b2lkKikgKiBtX0luZGV4U2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgcFNwb3QgPSAodm9pZCoqKXBTcG90W3NlZ19pbmRleCAvIHRyZWVfc2l6ZV07CisgICAgICAgIHNlZ19pbmRleCA9IHNlZ19pbmRleCAlIHRyZWVfc2l6ZTsKKyAgICAgICAgdHJlZV9zaXplIC89IG1fSW5kZXhTaXplOworICAgIH0KKyAgICBpZiAoaSA8IG1fSW5kZXhEZXB0aCkgeworICAgICAgICBGWF9BbGxvY2F0b3JfRnJlZShtX3BBbGxvY2F0b3IsIHBTZWdtZW50KTsKKyAgICAgICAgUmVtb3ZlQWxsKCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwU3BvdFtzZWdfaW5kZXggJSBtX0luZGV4U2l6ZV0gPSBwU2VnbWVudDsKKyAgICBtX0RhdGFTaXplICsrOworICAgIHJldHVybiBwU2VnbWVudDsKK30KK3ZvaWQqKiBDRlhfQmFzZVNlZ21lbnRlZEFycmF5OjpHZXRJbmRleChpbnQgc2VnX2luZGV4KSBjb25zdAoreworICAgIEFTU0VSVChtX0luZGV4RGVwdGggIT0gMCk7CisgICAgaWYgKG1fSW5kZXhEZXB0aCA9PSAxKSB7CisgICAgICAgIHJldHVybiAodm9pZCoqKW1fcEluZGV4OworICAgIH0gZWxzZSBpZiAobV9JbmRleERlcHRoID09IDIpIHsKKyAgICAgICAgcmV0dXJuICh2b2lkKiopKCh2b2lkKiopbV9wSW5kZXgpW3NlZ19pbmRleCAvIG1fSW5kZXhTaXplXTsKKyAgICB9CisgICAgaW50IHRyZWVfc2l6ZSA9IDE7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMTsgaSA8IG1fSW5kZXhEZXB0aDsgaSArKykgeworICAgICAgICB0cmVlX3NpemUgKj0gbV9JbmRleFNpemU7CisgICAgfQorICAgIHZvaWQqKiBwU3BvdCA9ICh2b2lkKiopbV9wSW5kZXg7CisgICAgZm9yIChpID0gMTsgaSA8IG1fSW5kZXhEZXB0aDsgaSArKykgeworICAgICAgICBwU3BvdCA9ICh2b2lkKiopcFNwb3Rbc2VnX2luZGV4IC8gdHJlZV9zaXplXTsKKyAgICAgICAgc2VnX2luZGV4ID0gc2VnX2luZGV4ICUgdHJlZV9zaXplOworICAgICAgICB0cmVlX3NpemUgLz0gbV9JbmRleFNpemU7CisgICAgfQorICAgIHJldHVybiBwU3BvdDsKK30KK3ZvaWQqIENGWF9CYXNlU2VnbWVudGVkQXJyYXk6Okl0ZXJhdGVTZWdtZW50KEZYX0xQQ0JZVEUgcFNlZ21lbnQsIGludCBjb3VudCwgRlhfQk9PTCAoKmNhbGxiYWNrKSh2b2lkKiBwYXJhbSwgdm9pZCogcERhdGEpLCB2b2lkKiBwYXJhbSkgY29uc3QKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpICsrKSB7CisgICAgICAgIGlmICghY2FsbGJhY2socGFyYW0sICh2b2lkKikocFNlZ21lbnQgKyBpICogbV9Vbml0U2l6ZSkpKSB7CisgICAgICAgICAgICByZXR1cm4gKHZvaWQqKShwU2VnbWVudCArIGkgKiBtX1VuaXRTaXplKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK3ZvaWQqIENGWF9CYXNlU2VnbWVudGVkQXJyYXk6Okl0ZXJhdGVJbmRleChpbnQgbGV2ZWwsIGludCYgc3RhcnQsIHZvaWQqKiBwSW5kZXgsIEZYX0JPT0wgKCpjYWxsYmFjaykodm9pZCogcGFyYW0sIHZvaWQqIHBEYXRhKSwgdm9pZCogcGFyYW0pIGNvbnN0Cit7CisgICAgaWYgKGxldmVsID09IDApIHsKKyAgICAgICAgaW50IGNvdW50ID0gbV9EYXRhU2l6ZSAtIHN0YXJ0OworICAgICAgICBpZiAoY291bnQgPiBtX1NlZ21lbnRTaXplKSB7CisgICAgICAgICAgICBjb3VudCA9IG1fU2VnbWVudFNpemU7CisgICAgICAgIH0KKyAgICAgICAgc3RhcnQgKz0gY291bnQ7CisgICAgICAgIHJldHVybiBJdGVyYXRlU2VnbWVudCgoRlhfTFBDQllURSlwSW5kZXgsIGNvdW50LCBjYWxsYmFjaywgcGFyYW0pOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fSW5kZXhTaXplOyBpICsrKSB7CisgICAgICAgIGlmIChwSW5kZXhbaV0gPT0gTlVMTCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCogcCA9IEl0ZXJhdGVJbmRleChsZXZlbCAtIDEsIHN0YXJ0LCAodm9pZCoqKXBJbmRleFtpXSwgY2FsbGJhY2ssIHBhcmFtKTsKKyAgICAgICAgaWYgKHApIHsKKyAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQordm9pZCogQ0ZYX0Jhc2VTZWdtZW50ZWRBcnJheTo6SXRlcmF0ZShGWF9CT09MICgqY2FsbGJhY2spKHZvaWQqIHBhcmFtLCB2b2lkKiBwRGF0YSksIHZvaWQqIHBhcmFtKSBjb25zdAoreworICAgIGlmIChtX3BJbmRleCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpbnQgc3RhcnQgPSAwOworICAgIHJldHVybiBJdGVyYXRlSW5kZXgobV9JbmRleERlcHRoLCBzdGFydCwgKHZvaWQqKiltX3BJbmRleCwgY2FsbGJhY2ssIHBhcmFtKTsKK30KK3ZvaWQqIENGWF9CYXNlU2VnbWVudGVkQXJyYXk6OkdldEF0KGludCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1fRGF0YVNpemUpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChtX0luZGV4RGVwdGggPT0gMCkgeworICAgICAgICByZXR1cm4gKEZYX0xQQllURSltX3BJbmRleCArIG1fVW5pdFNpemUgKiBpbmRleDsKKyAgICB9CisgICAgaW50IHNlZ19pbmRleCA9IGluZGV4IC8gbV9TZWdtZW50U2l6ZTsKKyAgICByZXR1cm4gKEZYX0xQQllURSlHZXRJbmRleChzZWdfaW5kZXgpW3NlZ19pbmRleCAlIG1fSW5kZXhTaXplXSArIChpbmRleCAlIG1fU2VnbWVudFNpemUpICogbV9Vbml0U2l6ZTsKK30KK3ZvaWQgQ0ZYX0Jhc2VTZWdtZW50ZWRBcnJheTo6RGVsZXRlKGludCBpbmRleCwgaW50IGNvdW50KQoreworICAgIGlmKGluZGV4IDwgMCB8fCBjb3VudCA8IDEgfHwgaW5kZXggKyBjb3VudCA+IG1fRGF0YVNpemUpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSBpbmRleDsgaSA8IG1fRGF0YVNpemUgLSBjb3VudDsgaSArKykgeworICAgICAgICBGWF9CWVRFKiBwU3JjID0gKEZYX0JZVEUqKUdldEF0KGkgKyBjb3VudCk7CisgICAgICAgIEZYX0JZVEUqIHBEZXN0ID0gKEZYX0JZVEUqKUdldEF0KGkpOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IG1fVW5pdFNpemU7IGogKyspIHsKKyAgICAgICAgICAgIHBEZXN0W2pdID0gcFNyY1tqXTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpbnQgbmV3X3NlZ3MgPSAobV9EYXRhU2l6ZSAtIGNvdW50ICsgbV9TZWdtZW50U2l6ZSAtIDEpIC8gbV9TZWdtZW50U2l6ZTsKKyAgICBpbnQgb2xkX3NlZ3MgPSAobV9EYXRhU2l6ZSArIG1fU2VnbWVudFNpemUgLSAxKSAvIG1fU2VnbWVudFNpemU7CisgICAgaWYgKG5ld19zZWdzIDwgb2xkX3NlZ3MpIHsKKyAgICAgICAgaWYobV9JbmRleERlcHRoKSB7CisgICAgICAgICAgICBmb3IgKGkgPSBuZXdfc2VnczsgaSA8IG9sZF9zZWdzOyBpICsrKSB7CisgICAgICAgICAgICAgICAgdm9pZCoqIHBJbmRleCA9IEdldEluZGV4KGkpOworICAgICAgICAgICAgICAgIEZYX0FsbG9jYXRvcl9GcmVlKG1fcEFsbG9jYXRvciwgcEluZGV4W2kgJSBtX0luZGV4U2l6ZV0pOworICAgICAgICAgICAgICAgIHBJbmRleFtpICUgbV9JbmRleFNpemVdID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEZYX0FsbG9jYXRvcl9GcmVlKG1fcEFsbG9jYXRvciwgbV9wSW5kZXgpOworICAgICAgICAgICAgbV9wSW5kZXggPSBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIG1fRGF0YVNpemUgLT0gY291bnQ7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNydC9meF9iYXNpY19ic3RyaW5nLmNwcCBiL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX2JzdHJpbmcuY3BwCmluZGV4IGYyOGIwNjkuLmVmNTI0NDcgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX2JzdHJpbmcuY3BwCisrKyBiL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX2JzdHJpbmcuY3BwCkBAIC0xLDEyMDQgKzEsMTIwNCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfYmFzaWMuaCINCi1zdGF0aWMgaW50IF9CdWZmZXJfaXRvYShjaGFyKiBidWYsIGludCBpLCBGWF9EV09SRCBmbGFncykNCi17DQotICAgIGlmIChpID09IDApIHsNCi0gICAgICAgIGJ1ZlswXSA9ICcwJzsNCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotICAgIGNoYXIgYnVmMVszMl07DQotICAgIGludCBidWZfcG9zID0gMzE7DQotICAgIEZYX0RXT1JEIHUgPSBpOw0KLSAgICBpZiAoKGZsYWdzICYgRlhGT1JNQVRfU0lHTkVEKSAmJiBpIDwgMCkgew0KLSAgICAgICAgdSA9IC1pOw0KLSAgICB9DQotICAgIGludCBiYXNlID0gMTA7DQotICAgIEZYX0xQQ1NUUiBzdHJpbmcgPSAiMDEyMzQ1Njc4OWFiY2RlZiI7DQotICAgIGlmIChmbGFncyAmIEZYRk9STUFUX0hFWCkgew0KLSAgICAgICAgYmFzZSA9IDE2Ow0KLSAgICAgICAgaWYgKGZsYWdzICYgRlhGT1JNQVRfQ0FQSVRBTCkgew0KLSAgICAgICAgICAgIHN0cmluZyA9ICIwMTIzNDU2Nzg5QUJDREVGIjsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICB3aGlsZSAodSAhPSAwKSB7DQotICAgICAgICBidWYxW2J1Zl9wb3MtLV0gPSBzdHJpbmdbdSAlIGJhc2VdOw0KLSAgICAgICAgdSA9IHUgLyBiYXNlOw0KLSAgICB9DQotICAgIGlmICgoZmxhZ3MgJiBGWEZPUk1BVF9TSUdORUQpICYmIGkgPCAwKSB7DQotICAgICAgICBidWYxW2J1Zl9wb3MtLV0gPSAnLSc7DQotICAgIH0NCi0gICAgaW50IGxlbiA9IDMxIC0gYnVmX3BvczsNCi0gICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IGxlbjsgaWkgKyspIHsNCi0gICAgICAgIGJ1ZltpaV0gPSBidWYxW2lpICsgYnVmX3BvcyArIDFdOw0KLSAgICB9DQotICAgIHJldHVybiBsZW47DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENGWF9CeXRlU3RyaW5nOjpGb3JtYXRJbnRlZ2VyKGludCBpLCBGWF9EV09SRCBmbGFncykNCi17DQotICAgIGNoYXIgYnVmWzMyXTsNCi0gICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nQyhidWYsIF9CdWZmZXJfaXRvYShidWYsIGksIGZsYWdzKSk7DQotfQ0KLXN0YXRpYyBDRlhfU3RyaW5nRGF0YSogRlhfQWxsb2NTdHJpbmcoaW50IG5MZW4pDQotew0KLSAgICBpZiAobkxlbiA9PSAwKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDRlhfU3RyaW5nRGF0YSogcERhdGEgPSAoQ0ZYX1N0cmluZ0RhdGEqKUZYX0FsbG9jKEZYX0JZVEUsIHNpemVvZihsb25nKSAqIDMgKyAobkxlbiArIDEpICogc2l6ZW9mKGNoYXIpKTsNCi0gICAgaWYgKCFwRGF0YSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcERhdGEtPm1fbkFsbG9jTGVuZ3RoID0gbkxlbjsNCi0gICAgcERhdGEtPm1fbkRhdGFMZW5ndGggPSBuTGVuOw0KLSAgICBwRGF0YS0+bV9uUmVmcyA9IDE7DQotICAgIHBEYXRhLT5tX1N0cmluZ1tuTGVuXSA9IDA7DQotICAgIHJldHVybiBwRGF0YTsNCi19DQotc3RhdGljIHZvaWQgRlhfUmVsZWFzZVN0cmluZyhDRlhfU3RyaW5nRGF0YSogcERhdGEpDQotew0KLSAgICBpZiAocERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHBEYXRhLT5tX25SZWZzIC0tOw0KLSAgICBpZiAocERhdGEtPm1fblJlZnMgPD0gMCkgew0KLSAgICAgICAgRlhfRnJlZShwRGF0YSk7DQotICAgIH0NCi19DQotQ0ZYX0J5dGVTdHJpbmc6On5DRlhfQnl0ZVN0cmluZygpDQotew0KLSAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbV9wRGF0YS0+bV9uUmVmcyAtLTsNCi0gICAgaWYgKG1fcERhdGEtPm1fblJlZnMgPCAxKSB7DQotICAgICAgICBGWF9GcmVlKG1fcERhdGEpOw0KLSAgICB9DQotfQ0KLUNGWF9CeXRlU3RyaW5nOjpDRlhfQnl0ZVN0cmluZyhGWF9MUENTVFIgbHBzeiwgRlhfU1RSU0laRSBuTGVuKQ0KLXsNCi0gICAgaWYgKG5MZW4gPCAwKSB7DQotICAgICAgICBuTGVuID0gbHBzeiA/IChGWF9TVFJTSVpFKUZYU1lTX3N0cmxlbihscHN6KSA6IDA7DQotICAgIH0NCi0gICAgaWYgKG5MZW4pIHsNCi0gICAgICAgIG1fcERhdGEgPSBGWF9BbGxvY1N0cmluZyhuTGVuKTsNCi0gICAgICAgIGlmIChtX3BEYXRhKSB7DQotICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wRGF0YS0+bV9TdHJpbmcsIGxwc3osIG5MZW4gKiBzaXplb2YoY2hhcikpOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wRGF0YSA9IE5VTEw7DQotICAgIH0NCi19DQotQ0ZYX0J5dGVTdHJpbmc6OkNGWF9CeXRlU3RyaW5nKEZYX0xQQ0JZVEUgbHBzeiwgRlhfU1RSU0laRSBuTGVuKQ0KLXsNCi0gICAgaWYgKG5MZW4gPiAwKSB7DQotICAgICAgICBtX3BEYXRhID0gRlhfQWxsb2NTdHJpbmcobkxlbik7DQotICAgICAgICBpZiAobV9wRGF0YSkgew0KLSAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcERhdGEtPm1fU3RyaW5nLCBscHN6LCBuTGVuICogc2l6ZW9mKGNoYXIpKTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1fcERhdGEgPSBOVUxMOw0KLSAgICB9DQotfQ0KLUNGWF9CeXRlU3RyaW5nOjpDRlhfQnl0ZVN0cmluZyhjaGFyIGNoKQ0KLXsNCi0gICAgbV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nKDEpOw0KLSAgICBpZiAobV9wRGF0YSkgew0KLSAgICAgICAgbV9wRGF0YS0+bV9TdHJpbmdbMF0gPSBjaDsNCi0gICAgfQ0KLX0NCi1DRlhfQnl0ZVN0cmluZzo6Q0ZYX0J5dGVTdHJpbmcoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cmluZ1NyYykNCi17DQotICAgIGlmIChzdHJpbmdTcmMubV9wRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICBtX3BEYXRhID0gTlVMTDsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAoc3RyaW5nU3JjLm1fcERhdGEtPm1fblJlZnMgPj0gMCkgew0KLSAgICAgICAgbV9wRGF0YSA9IHN0cmluZ1NyYy5tX3BEYXRhOw0KLSAgICAgICAgbV9wRGF0YS0+bV9uUmVmcyArKzsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1fcERhdGEgPSBOVUxMOw0KLSAgICAgICAgKnRoaXMgPSBzdHJpbmdTcmM7DQotICAgIH0NCi19DQotQ0ZYX0J5dGVTdHJpbmc6OkNGWF9CeXRlU3RyaW5nKEZYX0JTVFIgc3RyaW5nU3JjKQ0KLXsNCi0gICAgaWYgKHN0cmluZ1NyYy5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIG1fcERhdGEgPSBOVUxMOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wRGF0YSA9IE5VTEw7DQotICAgICAgICAqdGhpcyA9IHN0cmluZ1NyYzsNCi0gICAgfQ0KLX0NCi1DRlhfQnl0ZVN0cmluZzo6Q0ZYX0J5dGVTdHJpbmcoRlhfQlNUUiBzdHIxLCBGWF9CU1RSIHN0cjIpDQotew0KLSAgICBtX3BEYXRhID0gTlVMTDsNCi0gICAgaW50IG5OZXdMZW4gPSBzdHIxLkdldExlbmd0aCgpICsgc3RyMi5HZXRMZW5ndGgoKTsNCi0gICAgaWYgKG5OZXdMZW4gPT0gMCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fcERhdGEgPSBGWF9BbGxvY1N0cmluZyhuTmV3TGVuKTsNCi0gICAgaWYgKG1fcERhdGEpIHsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKG1fcERhdGEtPm1fU3RyaW5nLCBzdHIxLkdldENTdHIoKSwgc3RyMS5HZXRMZW5ndGgoKSk7DQotICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhLT5tX1N0cmluZyArIHN0cjEuR2V0TGVuZ3RoKCksIHN0cjIuR2V0Q1N0cigpLCBzdHIyLkdldExlbmd0aCgpKTsNCi0gICAgfQ0KLX0NCi1jb25zdCBDRlhfQnl0ZVN0cmluZyYgQ0ZYX0J5dGVTdHJpbmc6Om9wZXJhdG9yPShGWF9MUENTVFIgbHBzeikNCi17DQotICAgIGlmIChscHN6ID09IE5VTEwgfHwgbHBzelswXSA9PSAwKSB7DQotICAgICAgICBFbXB0eSgpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgQXNzaWduQ29weSgoRlhfU1RSU0laRSlGWFNZU19zdHJsZW4obHBzeiksIGxwc3opOw0KLSAgICB9DQotICAgIHJldHVybiAqdGhpczsNCi19DQotY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIENGWF9CeXRlU3RyaW5nOjpvcGVyYXRvcj0oRlhfQlNUUiBzdHIpDQotew0KLSAgICBpZiAoc3RyLklzRW1wdHkoKSkgew0KLSAgICAgICAgRW1wdHkoKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEFzc2lnbkNvcHkoc3RyLkdldExlbmd0aCgpLCBzdHIuR2V0Q1N0cigpKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLWNvbnN0IENGWF9CeXRlU3RyaW5nJiBDRlhfQnl0ZVN0cmluZzo6b3BlcmF0b3I9KGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHJpbmdTcmMpDQotew0KLSAgICBpZiAobV9wRGF0YSA9PSBzdHJpbmdTcmMubV9wRGF0YSkgew0KLSAgICAgICAgcmV0dXJuICp0aGlzOw0KLSAgICB9DQotICAgIGlmIChzdHJpbmdTcmMuSXNFbXB0eSgpKSB7DQotICAgICAgICBFbXB0eSgpOw0KLSAgICB9IGVsc2UgaWYgKChtX3BEYXRhICYmIG1fcERhdGEtPm1fblJlZnMgPCAwKSB8fA0KLSAgICAgICAgICAgICAgIChzdHJpbmdTcmMubV9wRGF0YSAmJiBzdHJpbmdTcmMubV9wRGF0YS0+bV9uUmVmcyA8IDApKSB7DQotICAgICAgICBBc3NpZ25Db3B5KHN0cmluZ1NyYy5tX3BEYXRhLT5tX25EYXRhTGVuZ3RoLCBzdHJpbmdTcmMubV9wRGF0YS0+bV9TdHJpbmcpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgRW1wdHkoKTsNCi0gICAgICAgIG1fcERhdGEgPSBzdHJpbmdTcmMubV9wRGF0YTsNCi0gICAgICAgIGlmIChtX3BEYXRhKSB7DQotICAgICAgICAgICAgbV9wRGF0YS0+bV9uUmVmcyArKzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLWNvbnN0IENGWF9CeXRlU3RyaW5nJiBDRlhfQnl0ZVN0cmluZzo6b3BlcmF0b3I9KGNvbnN0IENGWF9CaW5hcnlCdWYmIGJ1ZikNCi17DQotICAgIExvYWQoYnVmLkdldEJ1ZmZlcigpLCBidWYuR2V0U2l6ZSgpKTsNCi0gICAgcmV0dXJuICp0aGlzOw0KLX0NCi12b2lkIENGWF9CeXRlU3RyaW5nOjpMb2FkKEZYX0xQQ0JZVEUgYnVmLCBGWF9TVFJTSVpFIGxlbikNCi17DQotICAgIEVtcHR5KCk7DQotICAgIGlmIChsZW4pIHsNCi0gICAgICAgIG1fcERhdGEgPSBGWF9BbGxvY1N0cmluZyhsZW4pOw0KLSAgICAgICAgaWYgKG1fcERhdGEpIHsNCi0gICAgICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhLT5tX1N0cmluZywgYnVmLCBsZW4gKiBzaXplb2YoY2hhcikpOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wRGF0YSA9IE5VTEw7DQotICAgIH0NCi19DQotY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIENGWF9CeXRlU3RyaW5nOjpvcGVyYXRvcis9KEZYX0xQQ1NUUiBscHN6KQ0KLXsNCi0gICAgaWYgKGxwc3opIHsNCi0gICAgICAgIENvbmNhdEluUGxhY2UoKEZYX1NUUlNJWkUpRlhTWVNfc3RybGVuKGxwc3opLCBscHN6KTsNCi0gICAgfQ0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLWNvbnN0IENGWF9CeXRlU3RyaW5nJiBDRlhfQnl0ZVN0cmluZzo6b3BlcmF0b3IrPShjaGFyIGNoKQ0KLXsNCi0gICAgQ29uY2F0SW5QbGFjZSgxLCAmY2gpOw0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLWNvbnN0IENGWF9CeXRlU3RyaW5nJiBDRlhfQnl0ZVN0cmluZzo6b3BlcmF0b3IrPShjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyaW5nKQ0KLXsNCi0gICAgaWYgKHN0cmluZy5tX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAqdGhpczsNCi0gICAgfQ0KLSAgICBDb25jYXRJblBsYWNlKHN0cmluZy5tX3BEYXRhLT5tX25EYXRhTGVuZ3RoLCBzdHJpbmcubV9wRGF0YS0+bV9TdHJpbmcpOw0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLWNvbnN0IENGWF9CeXRlU3RyaW5nJiBDRlhfQnl0ZVN0cmluZzo6b3BlcmF0b3IrPShGWF9CU1RSIHN0cmluZykNCi17DQotICAgIGlmIChzdHJpbmcuSXNFbXB0eSgpKSB7DQotICAgICAgICByZXR1cm4gKnRoaXM7DQotICAgIH0NCi0gICAgQ29uY2F0SW5QbGFjZShzdHJpbmcuR2V0TGVuZ3RoKCksIHN0cmluZy5HZXRDU3RyKCkpOw0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLWJvb2wgQ0ZYX0J5dGVTdHJpbmc6OkVxdWFsKEZYX0JTVFIgc3RyKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIHN0ci5Jc0VtcHR5KCk7DQotICAgIH0NCi0gICAgcmV0dXJuIG1fcERhdGEtPm1fbkRhdGFMZW5ndGggPT0gc3RyLkdldExlbmd0aCgpICYmDQotICAgICAgICAgICBGWFNZU19tZW1jbXAzMihtX3BEYXRhLT5tX1N0cmluZywgc3RyLkdldENTdHIoKSwgc3RyLkdldExlbmd0aCgpKSA9PSAwOw0KLX0NCi1ib29sIENGWF9CeXRlU3RyaW5nOjpvcGVyYXRvciA9PShjb25zdCBDRlhfQnl0ZVN0cmluZyYgczIpIGNvbnN0DQotew0KLSAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gczIuSXNFbXB0eSgpOw0KLSAgICB9DQotICAgIGlmIChzMi5tX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBmYWxzZTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCA9PSBzMi5tX3BEYXRhLT5tX25EYXRhTGVuZ3RoICYmDQotICAgICAgICAgICBGWFNZU19tZW1jbXAzMihtX3BEYXRhLT5tX1N0cmluZywgczIubV9wRGF0YS0+bV9TdHJpbmcsIG1fcERhdGEtPm1fbkRhdGFMZW5ndGgpID09IDA7DQotfQ0KLXZvaWQgQ0ZYX0J5dGVTdHJpbmc6OkVtcHR5KCkNCi17DQotICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAobV9wRGF0YS0+bV9uUmVmcyA+IDEpIHsNCi0gICAgICAgIG1fcERhdGEtPm1fblJlZnMgLS07DQotICAgIH0gZWxzZSB7DQotICAgICAgICBGWF9GcmVlKG1fcERhdGEpOw0KLSAgICB9DQotICAgIG1fcERhdGEgPSBOVUxMOw0KLX0NCi1ib29sIENGWF9CeXRlU3RyaW5nOjpFcXVhbE5vQ2FzZShGWF9CU1RSIHN0cikgY29uc3QNCi17DQotICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBzdHIuSXNFbXB0eSgpOw0KLSAgICB9DQotICAgIEZYX1NUUlNJWkUgbGVuID0gc3RyLkdldExlbmd0aCgpOw0KLSAgICBpZiAobV9wRGF0YS0+bV9uRGF0YUxlbmd0aCAhPSBsZW4pIHsNCi0gICAgICAgIHJldHVybiBmYWxzZTsNCi0gICAgfQ0KLSAgICBGWF9MUENCWVRFIHBUaGlzID0gKEZYX0xQQ0JZVEUpbV9wRGF0YS0+bV9TdHJpbmc7DQotICAgIEZYX0xQQ0JZVEUgcFRoYXQgPSAoRlhfTFBDQllURSlzdHI7DQotICAgIGZvciAoRlhfU1RSU0laRSBpID0gMDsgaSA8IGxlbjsgaSArKykgew0KLSAgICAgICAgaWYgKCgqcFRoaXMpICE9ICgqcFRoYXQpKSB7DQotICAgICAgICAgICAgRlhfQllURSBiVGhpcyA9ICpwVGhpczsNCi0gICAgICAgICAgICBpZiAoYlRoaXMgPj0gJ0EnICYmIGJUaGlzIDw9ICdaJykgew0KLSAgICAgICAgICAgICAgICBiVGhpcyArPSAnYScgLSAnQSc7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIEZYX0JZVEUgYlRoYXQgPSAqcFRoYXQ7DQotICAgICAgICAgICAgaWYgKGJUaGF0ID49ICdBJyAmJiBiVGhhdCA8PSAnWicpIHsNCi0gICAgICAgICAgICAgICAgYlRoYXQgKz0gJ2EnIC0gJ0EnOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoYlRoaXMgIT0gYlRoYXQpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHBUaGlzICsrOw0KLSAgICAgICAgcFRoYXQgKys7DQotICAgIH0NCi0gICAgcmV0dXJuIHRydWU7DQotfQ0KLXZvaWQgQ0ZYX0J5dGVTdHJpbmc6OkFzc2lnbkNvcHkoRlhfU1RSU0laRSBuU3JjTGVuLCBGWF9MUENTVFIgbHBzelNyY0RhdGEpDQotew0KLSAgICBBbGxvY0JlZm9yZVdyaXRlKG5TcmNMZW4pOw0KLSAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhLT5tX1N0cmluZywgbHBzelNyY0RhdGEsIG5TcmNMZW4gKiBzaXplb2YoY2hhcikpOw0KLSAgICBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoID0gblNyY0xlbjsNCi0gICAgbV9wRGF0YS0+bV9TdHJpbmdbblNyY0xlbl0gPSAwOw0KLX0NCi12b2lkIENGWF9CeXRlU3RyaW5nOjpDb3B5QmVmb3JlV3JpdGUoKQ0KLXsNCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCB8fCBtX3BEYXRhLT5tX25SZWZzIDw9IDEpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDRlhfU3RyaW5nRGF0YSogcERhdGEgPSBtX3BEYXRhOw0KLSAgICBtX3BEYXRhLT5tX25SZWZzIC0tOw0KLSAgICBGWF9TVFJTSVpFIG5EYXRhTGVuZ3RoID0gcERhdGEtPm1fbkRhdGFMZW5ndGg7DQotICAgIG1fcERhdGEgPSBGWF9BbGxvY1N0cmluZyhuRGF0YUxlbmd0aCk7DQotICAgIGlmIChtX3BEYXRhICE9IE5VTEwpIHsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKG1fcERhdGEtPm1fU3RyaW5nLCBwRGF0YS0+bV9TdHJpbmcsIChuRGF0YUxlbmd0aCArIDEpICogc2l6ZW9mKGNoYXIpKTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9CeXRlU3RyaW5nOjpBbGxvY0JlZm9yZVdyaXRlKEZYX1NUUlNJWkUgbkxlbikNCi17DQotICAgIGlmIChtX3BEYXRhICYmIG1fcERhdGEtPm1fblJlZnMgPD0gMSAmJiBtX3BEYXRhLT5tX25BbGxvY0xlbmd0aCA+PSBuTGVuKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRW1wdHkoKTsNCi0gICAgbV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nKG5MZW4pOw0KLX0NCi12b2lkIENGWF9CeXRlU3RyaW5nOjpSZWxlYXNlQnVmZmVyKEZYX1NUUlNJWkUgbk5ld0xlbmd0aCkNCi17DQotICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDb3B5QmVmb3JlV3JpdGUoKTsNCi0gICAgaWYgKG5OZXdMZW5ndGggPT0gLTEpIHsNCi0gICAgICAgIG5OZXdMZW5ndGggPSAoRlhfU1RSU0laRSlGWFNZU19zdHJsZW4oKEZYX0xQQ1NUUiltX3BEYXRhLT5tX1N0cmluZyk7DQotICAgIH0NCi0gICAgaWYgKG5OZXdMZW5ndGggPT0gMCkgew0KLSAgICAgICAgRW1wdHkoKTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWFNZU19hc3NlcnQobk5ld0xlbmd0aCA8PSBtX3BEYXRhLT5tX25BbGxvY0xlbmd0aCk7DQotICAgIG1fcERhdGEtPm1fbkRhdGFMZW5ndGggPSBuTmV3TGVuZ3RoOw0KLSAgICBtX3BEYXRhLT5tX1N0cmluZ1tuTmV3TGVuZ3RoXSA9IDA7DQotfQ0KLUZYX0xQU1RSIENGWF9CeXRlU3RyaW5nOjpMb2NrQnVmZmVyKCkNCi17DQotICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIEZYX0xQU1RSIGxwc3ogPSBHZXRCdWZmZXIoMCk7DQotICAgIG1fcERhdGEtPm1fblJlZnMgPSAtMTsNCi0gICAgcmV0dXJuIGxwc3o7DQotfQ0KLXZvaWQgQ0ZYX0J5dGVTdHJpbmc6OlJlc2VydmUoRlhfU1RSU0laRSBsZW4pDQotew0KLSAgICBHZXRCdWZmZXIobGVuKTsNCi0gICAgUmVsZWFzZUJ1ZmZlcihHZXRMZW5ndGgoKSk7DQotfQ0KLUZYX0xQU1RSIENGWF9CeXRlU3RyaW5nOjpHZXRCdWZmZXIoRlhfU1RSU0laRSBuTWluQnVmTGVuZ3RoKQ0KLXsNCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCAmJiBuTWluQnVmTGVuZ3RoID09IDApIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmIChtX3BEYXRhICYmIG1fcERhdGEtPm1fblJlZnMgPD0gMSAmJiBtX3BEYXRhLT5tX25BbGxvY0xlbmd0aCA+PSBuTWluQnVmTGVuZ3RoKSB7DQotICAgICAgICByZXR1cm4gbV9wRGF0YS0+bV9TdHJpbmc7DQotICAgIH0NCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgbV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nKG5NaW5CdWZMZW5ndGgpOw0KLSAgICAgICAgaWYgKCFtX3BEYXRhKSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoID0gMDsNCi0gICAgICAgIG1fcERhdGEtPm1fU3RyaW5nWzBdID0gMDsNCi0gICAgICAgIHJldHVybiBtX3BEYXRhLT5tX1N0cmluZzsNCi0gICAgfQ0KLSAgICBDRlhfU3RyaW5nRGF0YSogcE9sZERhdGEgPSBtX3BEYXRhOw0KLSAgICBGWF9TVFJTSVpFIG5PbGRMZW4gPSBwT2xkRGF0YS0+bV9uRGF0YUxlbmd0aDsNCi0gICAgaWYgKG5NaW5CdWZMZW5ndGggPCBuT2xkTGVuKSB7DQotICAgICAgICBuTWluQnVmTGVuZ3RoID0gbk9sZExlbjsNCi0gICAgfQ0KLSAgICBtX3BEYXRhID0gRlhfQWxsb2NTdHJpbmcobk1pbkJ1Zkxlbmd0aCk7DQotICAgIGlmICghbV9wRGF0YSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgRlhTWVNfbWVtY3B5MzIobV9wRGF0YS0+bV9TdHJpbmcsIHBPbGREYXRhLT5tX1N0cmluZywgKG5PbGRMZW4gKyAxKSpzaXplb2YoY2hhcikpOw0KLSAgICBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoID0gbk9sZExlbjsNCi0gICAgcE9sZERhdGEtPm1fblJlZnMgLS07DQotICAgIGlmIChwT2xkRGF0YS0+bV9uUmVmcyA8PSAwKSB7DQotICAgICAgICBGWF9GcmVlKHBPbGREYXRhKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wRGF0YS0+bV9TdHJpbmc7DQotfQ0KLUZYX1NUUlNJWkUgQ0ZYX0J5dGVTdHJpbmc6OkRlbGV0ZShGWF9TVFJTSVpFIG5JbmRleCwgRlhfU1RSU0laRSBuQ291bnQpDQotew0KLSAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBpZiAobkluZGV4IDwgMCkgew0KLSAgICAgICAgbkluZGV4ID0gMDsNCi0gICAgfQ0KLSAgICBGWF9TVFJTSVpFIG5PbGRMZW5ndGggPSBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoOw0KLSAgICBpZiAobkNvdW50ID4gMCAmJiBuSW5kZXggPCBuT2xkTGVuZ3RoKSB7DQotICAgICAgICBGWF9TVFJTSVpFIG1MZW5ndGggPSBuSW5kZXggKyBuQ291bnQ7DQotICAgICAgICBpZiAobUxlbmd0aCA+PSBuT2xkTGVuZ3RoKSB7DQotICAgICAgICAgICAgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCA9IG5JbmRleDsNCi0gICAgICAgICAgICByZXR1cm4gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aDsNCi0gICAgICAgIH0NCi0gICAgICAgIENvcHlCZWZvcmVXcml0ZSgpOw0KLSAgICAgICAgaW50IG5CeXRlc1RvQ29weSA9IG5PbGRMZW5ndGggLSBtTGVuZ3RoICsgMTsNCi0gICAgICAgIEZYU1lTX21lbW1vdmUzMihtX3BEYXRhLT5tX1N0cmluZyArIG5JbmRleCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3BEYXRhLT5tX1N0cmluZyArIG1MZW5ndGgsIG5CeXRlc1RvQ29weSAqIHNpemVvZihjaGFyKSk7DQotICAgICAgICBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoID0gbk9sZExlbmd0aCAtIG5Db3VudDsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aDsNCi19DQotdm9pZCBDRlhfQnl0ZVN0cmluZzo6Q29uY2F0SW5QbGFjZShGWF9TVFJTSVpFIG5TcmNMZW4sIEZYX0xQQ1NUUiBscHN6U3JjRGF0YSkNCi17DQotICAgIGlmIChuU3JjTGVuID09IDAgfHwgbHBzelNyY0RhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIG1fcERhdGEgPSBGWF9BbGxvY1N0cmluZyhuU3JjTGVuKTsNCi0gICAgICAgIGlmICghbV9wRGF0YSkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYU1lTX21lbWNweTMyKG1fcERhdGEtPm1fU3RyaW5nLCBscHN6U3JjRGF0YSwgblNyY0xlbiAqIHNpemVvZihjaGFyKSk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKG1fcERhdGEtPm1fblJlZnMgPiAxIHx8IG1fcERhdGEtPm1fbkRhdGFMZW5ndGggKyBuU3JjTGVuID4gbV9wRGF0YS0+bV9uQWxsb2NMZW5ndGgpIHsNCi0gICAgICAgIENGWF9TdHJpbmdEYXRhKiBwT2xkRGF0YSA9IG1fcERhdGE7DQotICAgICAgICBDb25jYXRDb3B5KG1fcERhdGEtPm1fbkRhdGFMZW5ndGgsIG1fcERhdGEtPm1fU3RyaW5nLCBuU3JjTGVuLCBscHN6U3JjRGF0YSk7DQotICAgICAgICBGWF9SZWxlYXNlU3RyaW5nKHBPbGREYXRhKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKG1fcERhdGEtPm1fU3RyaW5nICsgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCwgbHBzelNyY0RhdGEsIG5TcmNMZW4gKiBzaXplb2YoY2hhcikpOw0KLSAgICAgICAgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCArPSBuU3JjTGVuOw0KLSAgICAgICAgbV9wRGF0YS0+bV9TdHJpbmdbbV9wRGF0YS0+bV9uRGF0YUxlbmd0aF0gPSAwOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0ZYX0J5dGVTdHJpbmc6OkNvbmNhdENvcHkoRlhfU1RSU0laRSBuU3JjMUxlbiwgRlhfTFBDU1RSIGxwc3pTcmMxRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX1NUUlNJWkUgblNyYzJMZW4sIEZYX0xQQ1NUUiBscHN6U3JjMkRhdGEpDQotew0KLSAgICBpbnQgbk5ld0xlbiA9IG5TcmMxTGVuICsgblNyYzJMZW47DQotICAgIGlmIChuTmV3TGVuID09IDApIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX3BEYXRhID0gRlhfQWxsb2NTdHJpbmcobk5ld0xlbik7DQotICAgIGlmIChtX3BEYXRhKSB7DQotICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhLT5tX1N0cmluZywgbHBzelNyYzFEYXRhLCBuU3JjMUxlbiAqIHNpemVvZihjaGFyKSk7DQotICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhLT5tX1N0cmluZyArIG5TcmMxTGVuLCBscHN6U3JjMkRhdGEsIG5TcmMyTGVuICogc2l6ZW9mKGNoYXIpKTsNCi0gICAgfQ0KLX0NCi1DRlhfQnl0ZVN0cmluZyBDRlhfQnl0ZVN0cmluZzo6TWlkKEZYX1NUUlNJWkUgbkZpcnN0KSBjb25zdA0KLXsNCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKCk7DQotICAgIH0NCi0gICAgcmV0dXJuIE1pZChuRmlyc3QsIG1fcERhdGEtPm1fbkRhdGFMZW5ndGggLSBuRmlyc3QpOw0KLX0NCi1DRlhfQnl0ZVN0cmluZyBDRlhfQnl0ZVN0cmluZzo6TWlkKEZYX1NUUlNJWkUgbkZpcnN0LCBGWF9TVFJTSVpFIG5Db3VudCkgY29uc3QNCi17DQotICAgIGlmIChuRmlyc3QgPCAwKSB7DQotICAgICAgICBuRmlyc3QgPSAwOw0KLSAgICB9DQotICAgIGlmIChuQ291bnQgPCAwKSB7DQotICAgICAgICBuQ291bnQgPSAwOw0KLSAgICB9DQotICAgIGlmIChuRmlyc3QgKyBuQ291bnQgPiBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoKSB7DQotICAgICAgICBuQ291bnQgPSBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoIC0gbkZpcnN0Ow0KLSAgICB9DQotICAgIGlmIChuRmlyc3QgPiBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoKSB7DQotICAgICAgICBuQ291bnQgPSAwOw0KLSAgICB9DQotICAgIGlmIChuRmlyc3QgPT0gMCAmJiBuRmlyc3QgKyBuQ291bnQgPT0gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCkgew0KLSAgICAgICAgcmV0dXJuICp0aGlzOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIGRlc3Q7DQotICAgIEFsbG9jQ29weShkZXN0LCBuQ291bnQsIG5GaXJzdCwgMCk7DQotICAgIHJldHVybiBkZXN0Ow0KLX0NCi12b2lkIENGWF9CeXRlU3RyaW5nOjpBbGxvY0NvcHkoQ0ZYX0J5dGVTdHJpbmcmIGRlc3QsIEZYX1NUUlNJWkUgbkNvcHlMZW4sIEZYX1NUUlNJWkUgbkNvcHlJbmRleCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfU1RSU0laRSBuRXh0cmFMZW4pIGNvbnN0DQotew0KLSAgICBGWF9TVFJTSVpFIG5OZXdMZW4gPSBuQ29weUxlbiArIG5FeHRyYUxlbjsNCi0gICAgaWYgKG5OZXdMZW4gPT0gMCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEFTU0VSVChkZXN0Lm1fcERhdGEgPT0gTlVMTCk7DQotICAgIGRlc3QubV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nKG5OZXdMZW4pOw0KLSAgICBpZiAoZGVzdC5tX3BEYXRhKSB7DQotICAgICAgICBGWFNZU19tZW1jcHkzMihkZXN0Lm1fcERhdGEtPm1fU3RyaW5nLCBtX3BEYXRhLT5tX1N0cmluZyArIG5Db3B5SW5kZXgsIG5Db3B5TGVuICogc2l6ZW9mKGNoYXIpKTsNCi0gICAgfQ0KLX0NCi0jZGVmaW5lIEZPUkNFX0FOU0kgICAgICAweDEwMDAwDQotI2RlZmluZSBGT1JDRV9VTklDT0RFICAgMHgyMDAwMA0KLSNkZWZpbmUgRk9SQ0VfSU5UNjQgICAgIDB4NDAwMDANCi12b2lkIENGWF9CeXRlU3RyaW5nOjpGb3JtYXRWKEZYX0xQQ1NUUiBscHN6Rm9ybWF0LCB2YV9saXN0IGFyZ0xpc3QpDQotew0KLSAgICB2YV9saXN0IGFyZ0xpc3RTYXZlOw0KLSNpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgfHwgKCFkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX0ZYX0NQVV8gPT0gX0ZYX1g2NF8gfHwgX0ZYX0NQVV8gPT0gX0ZYX0lBNjRfIHx8IF9GWF9DUFVfID09IF9GWF9BUk02NF8pKSB8fCBkZWZpbmVkKF9fbmF0aXZlX2NsaWVudF9fKQ0KLSAgICB2YV9jb3B5KGFyZ0xpc3RTYXZlLCBhcmdMaXN0KTsNCi0jZWxzZQ0KLSAgICBhcmdMaXN0U2F2ZSA9IGFyZ0xpc3Q7DQotI2VuZGlmDQotICAgIGludCBuTWF4TGVuID0gMDsNCi0gICAgZm9yIChGWF9MUENTVFIgbHBzeiA9IGxwc3pGb3JtYXQ7ICpscHN6ICE9IDA7IGxwc3ogKyspIHsNCi0gICAgICAgIGlmICgqbHBzeiAhPSAnJScgfHwgKihscHN6ID0gbHBzeiArIDEpID09ICclJykgew0KLSAgICAgICAgICAgIG5NYXhMZW4gKz0gKEZYX1NUUlNJWkUpRlhTWVNfc3RybGVuKGxwc3opOw0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW50IG5JdGVtTGVuID0gMDsNCi0gICAgICAgIGludCBuV2lkdGggPSAwOw0KLSAgICAgICAgZm9yICg7ICpscHN6ICE9IDA7IGxwc3ogKyspIHsNCi0gICAgICAgICAgICBpZiAoKmxwc3ogPT0gJyMnKSB7DQotICAgICAgICAgICAgICAgIG5NYXhMZW4gKz0gMjsNCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCpscHN6ID09ICcqJykgew0KLSAgICAgICAgICAgICAgICBuV2lkdGggPSB2YV9hcmcoYXJnTGlzdCwgaW50KTsNCi0gICAgICAgICAgICB9IGVsc2UgaWYgKCpscHN6ID09ICctJyB8fCAqbHBzeiA9PSAnKycgfHwgKmxwc3ogPT0gJzAnIHx8DQotICAgICAgICAgICAgICAgICAgICAgICAqbHBzeiA9PSAnICcpDQotICAgICAgICAgICAgICAgIDsNCi0gICAgICAgICAgICBlbHNlIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG5XaWR0aCA9PSAwKSB7DQotICAgICAgICAgICAgbldpZHRoID0gRlhTWVNfYXRvaShscHN6KTsNCi0gICAgICAgICAgICBmb3IgKDsgKCpscHN6KSA+PSAnMCcgJiYgKCpscHN6KSA8PSAnOSc7IGxwc3ogKyspDQotICAgICAgICAgICAgICAgIDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChuV2lkdGggPCAwIHx8IG5XaWR0aCA+IDEyOCAqIDEwMjQpIHsNCi0gICAgICAgICAgICBscHN6Rm9ybWF0ID0gIkJhZCB3aWR0aCI7DQotICAgICAgICAgICAgbk1heExlbiA9IDEwOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW50IG5QcmVjaXNpb24gPSAwOw0KLSAgICAgICAgaWYgKCpscHN6ID09ICcuJykgew0KLSAgICAgICAgICAgIGxwc3ogKys7DQotICAgICAgICAgICAgaWYgKCpscHN6ID09ICcqJykgew0KLSAgICAgICAgICAgICAgICBuUHJlY2lzaW9uID0gdmFfYXJnKGFyZ0xpc3QsIGludCk7DQotICAgICAgICAgICAgICAgIGxwc3ogKys7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgblByZWNpc2lvbiA9IEZYU1lTX2F0b2kobHBzeik7DQotICAgICAgICAgICAgICAgIGZvciAoOyAoKmxwc3opID49ICcwJyAmJiAoKmxwc3opIDw9ICc5JzsgbHBzeiArKykNCi0gICAgICAgICAgICAgICAgICAgIDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAoblByZWNpc2lvbiA8IDAgfHwgblByZWNpc2lvbiA+IDEyOCAqIDEwMjQpIHsNCi0gICAgICAgICAgICBscHN6Rm9ybWF0ID0gIkJhZCBwcmVjaXNpb24iOw0KLSAgICAgICAgICAgIG5NYXhMZW4gPSAxNDsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBuTW9kaWZpZXIgPSAwOw0KLSAgICAgICAgaWYgKEZYU1lTX3N0cm5jbXAobHBzeiwgIkk2NCIsIDMpID09IDApIHsNCi0gICAgICAgICAgICBscHN6ICs9IDM7DQotICAgICAgICAgICAgbk1vZGlmaWVyID0gRk9SQ0VfSU5UNjQ7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHN3aXRjaCAoKmxwc3opIHsNCi0gICAgICAgICAgICAgICAgY2FzZSAnaCc6DQotICAgICAgICAgICAgICAgICAgICBuTW9kaWZpZXIgPSBGT1JDRV9BTlNJOw0KLSAgICAgICAgICAgICAgICAgICAgbHBzeiArKzsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlICdsJzoNCi0gICAgICAgICAgICAgICAgICAgIG5Nb2RpZmllciA9IEZPUkNFX1VOSUNPREU7DQotICAgICAgICAgICAgICAgICAgICBscHN6ICsrOw0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgJ0YnOg0KLSAgICAgICAgICAgICAgICBjYXNlICdOJzoNCi0gICAgICAgICAgICAgICAgY2FzZSAnTCc6DQotICAgICAgICAgICAgICAgICAgICBscHN6ICsrOw0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgc3dpdGNoICgqbHBzeiB8IG5Nb2RpZmllcikgew0KLSAgICAgICAgICAgIGNhc2UgJ2MnOg0KLSAgICAgICAgICAgIGNhc2UgJ0MnOg0KLSAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IDI7DQotICAgICAgICAgICAgICAgIHZhX2FyZyhhcmdMaXN0LCBpbnQpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlICdjJ3xGT1JDRV9BTlNJOg0KLSAgICAgICAgICAgIGNhc2UgJ0MnfEZPUkNFX0FOU0k6DQotICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gMjsNCi0gICAgICAgICAgICAgICAgdmFfYXJnKGFyZ0xpc3QsIGludCk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgJ2MnfEZPUkNFX1VOSUNPREU6DQotICAgICAgICAgICAgY2FzZSAnQyd8Rk9SQ0VfVU5JQ09ERToNCi0gICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSAyOw0KLSAgICAgICAgICAgICAgICB2YV9hcmcoYXJnTGlzdCwgaW50KTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSAncyc6IHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0xQQ1NUUiBwc3RyTmV4dEFyZyA9IHZhX2FyZyhhcmdMaXN0LCBGWF9MUENTVFIpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBzdHJOZXh0QXJnID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IDY7DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gKEZYX1NUUlNJWkUpRlhTWVNfc3RybGVuKHBzdHJOZXh0QXJnKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobkl0ZW1MZW4gPCAxKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSAnUyc6IHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0xQV1NUUiBwc3RyTmV4dEFyZyA9IHZhX2FyZyhhcmdMaXN0LCBGWF9MUFdTVFIpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBzdHJOZXh0QXJnID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IDY7DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gKEZYX1NUUlNJWkUpRlhTWVNfd2NzbGVuKHBzdHJOZXh0QXJnKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobkl0ZW1MZW4gPCAxKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSAncyd8Rk9SQ0VfQU5TSToNCi0gICAgICAgICAgICBjYXNlICdTJ3xGT1JDRV9BTlNJOiB7DQotICAgICAgICAgICAgICAgICAgICBGWF9MUENTVFIgcHN0ck5leHRBcmcgPSB2YV9hcmcoYXJnTGlzdCwgRlhfTFBDU1RSKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwc3RyTmV4dEFyZyA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSA2Ow0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IChGWF9TVFJTSVpFKUZYU1lTX3N0cmxlbihwc3RyTmV4dEFyZyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5JdGVtTGVuIDwgMSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgJ3MnfEZPUkNFX1VOSUNPREU6DQotICAgICAgICAgICAgY2FzZSAnUyd8Rk9SQ0VfVU5JQ09ERTogew0KLSAgICAgICAgICAgICAgICAgICAgRlhfTFBXU1RSIHBzdHJOZXh0QXJnID0gdmFfYXJnKGFyZ0xpc3QsIEZYX0xQV1NUUik7DQotICAgICAgICAgICAgICAgICAgICBpZiAocHN0ck5leHRBcmcgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gNjsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSAoRlhfU1RSU0laRSlGWFNZU193Y3NsZW4ocHN0ck5leHRBcmcpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuSXRlbUxlbiA8IDEpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChuSXRlbUxlbiAhPSAwKSB7DQotICAgICAgICAgICAgaWYgKG5QcmVjaXNpb24gIT0gMCAmJiBuSXRlbUxlbiA+IG5QcmVjaXNpb24pIHsNCi0gICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSBuUHJlY2lzaW9uOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobkl0ZW1MZW4gPCBuV2lkdGgpIHsNCi0gICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSBuV2lkdGg7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBzd2l0Y2ggKCpscHN6KSB7DQotICAgICAgICAgICAgICAgIGNhc2UgJ2QnOg0KLSAgICAgICAgICAgICAgICBjYXNlICdpJzoNCi0gICAgICAgICAgICAgICAgY2FzZSAndSc6DQotICAgICAgICAgICAgICAgIGNhc2UgJ3gnOg0KLSAgICAgICAgICAgICAgICBjYXNlICdYJzoNCi0gICAgICAgICAgICAgICAgY2FzZSAnbyc6DQotICAgICAgICAgICAgICAgICAgICBpZiAobk1vZGlmaWVyICYgRk9SQ0VfSU5UNjQpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoYXJnTGlzdCwgRlhfSU5UNjQpOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoYXJnTGlzdCwgaW50KTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gMzI7DQotICAgICAgICAgICAgICAgICAgICBpZiAobkl0ZW1MZW4gPCBuV2lkdGggKyBuUHJlY2lzaW9uKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSBuV2lkdGggKyBuUHJlY2lzaW9uOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgJ2EnOg0KLSAgICAgICAgICAgICAgICBjYXNlICdBJzoNCi0gICAgICAgICAgICAgICAgY2FzZSAnZSc6DQotICAgICAgICAgICAgICAgIGNhc2UgJ0UnOg0KLSAgICAgICAgICAgICAgICBjYXNlICdnJzoNCi0gICAgICAgICAgICAgICAgY2FzZSAnRyc6DQotICAgICAgICAgICAgICAgICAgICB2YV9hcmcoYXJnTGlzdCwgZG91YmxlKTsNCi0gICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gMTI4Ow0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5JdGVtTGVuIDwgbldpZHRoICsgblByZWNpc2lvbikgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gbldpZHRoICsgblByZWNpc2lvbjsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlICdmJzoNCi0gICAgICAgICAgICAgICAgICAgIGlmIChuV2lkdGggKyBuUHJlY2lzaW9uID4gMTAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSBuUHJlY2lzaW9uICsgbldpZHRoICsgMTI4Ow0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZjsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHBzelRlbXBbMjU2XTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmID0gdmFfYXJnKGFyZ0xpc3QsIGRvdWJsZSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgRlhTWVNfc3ByaW50Zihwc3pUZW1wLCAiJSouKmYiLCBuV2lkdGgsIG5QcmVjaXNpb24gKyA2LCBmICk7DQotICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSAoRlhfU1RSU0laRSlGWFNZU19zdHJsZW4ocHN6VGVtcCk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAncCc6DQotICAgICAgICAgICAgICAgICAgICB2YV9hcmcoYXJnTGlzdCwgdm9pZCopOw0KLSAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSAzMjsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChuSXRlbUxlbiA8IG5XaWR0aCArIG5QcmVjaXNpb24pIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IG5XaWR0aCArIG5QcmVjaXNpb247DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAnbic6DQotICAgICAgICAgICAgICAgICAgICB2YV9hcmcoYXJnTGlzdCwgaW50Kik7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBuTWF4TGVuICs9IG5JdGVtTGVuOw0KLSAgICB9DQotICAgIEdldEJ1ZmZlcihuTWF4TGVuKTsNCi0gICAgaWYgKG1fcERhdGEpIHsNCi0gICAgICAgIEZYU1lTX3ZzcHJpbnRmKG1fcERhdGEtPm1fU3RyaW5nLCBscHN6Rm9ybWF0LCBhcmdMaXN0U2F2ZSk7DQotICAgICAgICBSZWxlYXNlQnVmZmVyKCk7DQotICAgIH0NCi0gICAgdmFfZW5kKGFyZ0xpc3RTYXZlKTsNCi19DQotdm9pZCBDRlhfQnl0ZVN0cmluZzo6Rm9ybWF0KEZYX0xQQ1NUUiBscHN6Rm9ybWF0LCAuLi4pDQotew0KLSAgICB2YV9saXN0IGFyZ0xpc3Q7DQotICAgIHZhX3N0YXJ0KGFyZ0xpc3QsIGxwc3pGb3JtYXQpOw0KLSAgICBGb3JtYXRWKGxwc3pGb3JtYXQsIGFyZ0xpc3QpOw0KLSAgICB2YV9lbmQoYXJnTGlzdCk7DQotfQ0KLUZYX1NUUlNJWkUgQ0ZYX0J5dGVTdHJpbmc6Okluc2VydChGWF9TVFJTSVpFIG5JbmRleCwgRlhfQ0hBUiBjaCkNCi17DQotICAgIENvcHlCZWZvcmVXcml0ZSgpOw0KLSAgICBpZiAobkluZGV4IDwgMCkgew0KLSAgICAgICAgbkluZGV4ID0gMDsNCi0gICAgfQ0KLSAgICBGWF9TVFJTSVpFIG5OZXdMZW5ndGggPSBtX3BEYXRhID8gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCA6IDA7DQotICAgIGlmIChuSW5kZXggPiBuTmV3TGVuZ3RoKSB7DQotICAgICAgICBuSW5kZXggPSBuTmV3TGVuZ3RoOw0KLSAgICB9DQotICAgIG5OZXdMZW5ndGgrKzsNCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCB8fCBtX3BEYXRhLT5tX25BbGxvY0xlbmd0aCA8IG5OZXdMZW5ndGgpIHsNCi0gICAgICAgIENGWF9TdHJpbmdEYXRhKiBwT2xkRGF0YSA9IG1fcERhdGE7DQotICAgICAgICBGWF9MUENTVFIgcHN0ciA9IG1fcERhdGEtPm1fU3RyaW5nOw0KLSAgICAgICAgbV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nKG5OZXdMZW5ndGgpOw0KLSAgICAgICAgaWYgKCFtX3BEYXRhKSB7DQotICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICB9DQotICAgICAgICBpZihwT2xkRGF0YSAhPSBOVUxMKSB7DQotICAgICAgICAgICAgRlhTWVNfbWVtbW92ZTMyKG1fcERhdGEtPm1fU3RyaW5nLCBwc3RyLCAocE9sZERhdGEtPm1fbkRhdGFMZW5ndGggKyAxKSpzaXplb2YoY2hhcikpOw0KLSAgICAgICAgICAgIEZYX1JlbGVhc2VTdHJpbmcocE9sZERhdGEpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBtX3BEYXRhLT5tX1N0cmluZ1swXSA9IDA7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhTWVNfbWVtbW92ZTMyKG1fcERhdGEtPm1fU3RyaW5nICsgbkluZGV4ICsgMSwNCi0gICAgICAgICAgICAgICAgICAgIG1fcERhdGEtPm1fU3RyaW5nICsgbkluZGV4LCAobk5ld0xlbmd0aCAtIG5JbmRleCkqc2l6ZW9mKGNoYXIpKTsNCi0gICAgbV9wRGF0YS0+bV9TdHJpbmdbbkluZGV4XSA9IGNoOw0KLSAgICBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoID0gbk5ld0xlbmd0aDsNCi0gICAgcmV0dXJuIG5OZXdMZW5ndGg7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENGWF9CeXRlU3RyaW5nOjpSaWdodChGWF9TVFJTSVpFIG5Db3VudCkgY29uc3QNCi17DQotICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZygpOw0KLSAgICB9DQotICAgIGlmIChuQ291bnQgPCAwKSB7DQotICAgICAgICBuQ291bnQgPSAwOw0KLSAgICB9DQotICAgIGlmIChuQ291bnQgPj0gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCkgew0KLSAgICAgICAgcmV0dXJuICp0aGlzOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIGRlc3Q7DQotICAgIEFsbG9jQ29weShkZXN0LCBuQ291bnQsIG1fcERhdGEtPm1fbkRhdGFMZW5ndGggLSBuQ291bnQsIDApOw0KLSAgICByZXR1cm4gZGVzdDsNCi19DQotQ0ZYX0J5dGVTdHJpbmcgQ0ZYX0J5dGVTdHJpbmc6OkxlZnQoRlhfU1RSU0laRSBuQ291bnQpIGNvbnN0DQotew0KLSAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsNCi0gICAgfQ0KLSAgICBpZiAobkNvdW50IDwgMCkgew0KLSAgICAgICAgbkNvdW50ID0gMDsNCi0gICAgfQ0KLSAgICBpZiAobkNvdW50ID49IG1fcERhdGEtPm1fbkRhdGFMZW5ndGgpIHsNCi0gICAgICAgIHJldHVybiAqdGhpczsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVN0cmluZyBkZXN0Ow0KLSAgICBBbGxvY0NvcHkoZGVzdCwgbkNvdW50LCAwLCAwKTsNCi0gICAgcmV0dXJuIGRlc3Q7DQotfQ0KLUZYX1NUUlNJWkUgQ0ZYX0J5dGVTdHJpbmc6OkZpbmQoRlhfQ0hBUiBjaCwgRlhfU1RSU0laRSBuU3RhcnQpIGNvbnN0DQotew0KLSAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgRlhfU1RSU0laRSBuTGVuZ3RoID0gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aDsNCi0gICAgaWYgKG5TdGFydCA+PSBuTGVuZ3RoKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgRlhfTFBDU1RSIGxwc3ogPSBGWFNZU19zdHJjaHIobV9wRGF0YS0+bV9TdHJpbmcgKyBuU3RhcnQsIGNoKTsNCi0gICAgcmV0dXJuIChscHN6ID09IE5VTEwpID8gLTEgOiAoaW50KShscHN6IC0gbV9wRGF0YS0+bV9TdHJpbmcpOw0KLX0NCi1GWF9TVFJTSVpFIENGWF9CeXRlU3RyaW5nOjpSZXZlcnNlRmluZChGWF9DSEFSIGNoKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIEZYX1NUUlNJWkUgbkxlbmd0aCA9IG1fcERhdGEtPm1fbkRhdGFMZW5ndGg7DQotICAgIHdoaWxlIChuTGVuZ3RoKSB7DQotICAgICAgICBpZiAobV9wRGF0YS0+bV9TdHJpbmdbbkxlbmd0aCAtIDFdID09IGNoKSB7DQotICAgICAgICAgICAgcmV0dXJuIG5MZW5ndGggLSAxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbkxlbmd0aCAtLTsNCi0gICAgfQ0KLSAgICByZXR1cm4gLTE7DQotfQ0KLUZYX0xQQ1NUUiBGWF9zdHJzdHIoRlhfTFBDU1RSIHN0cjEsIGludCBsZW4xLCBGWF9MUENTVFIgc3RyMiwgaW50IGxlbjIpDQotew0KLSAgICBpZiAobGVuMiA+IGxlbjEgfHwgbGVuMiA9PSAwKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBGWF9MUENTVFIgZW5kX3B0ciA9IHN0cjEgKyBsZW4xIC0gbGVuMjsNCi0gICAgd2hpbGUgKHN0cjEgPD0gZW5kX3B0cikgew0KLSAgICAgICAgaW50IGkgPSAwOw0KLSAgICAgICAgd2hpbGUgKDEpIHsNCi0gICAgICAgICAgICBpZiAoc3RyMVtpXSAhPSBzdHIyW2ldKSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpICsrOw0KLSAgICAgICAgICAgIGlmIChpID09IGxlbjIpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0cjE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgc3RyMSArKzsNCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotRlhfU1RSU0laRSBDRlhfQnl0ZVN0cmluZzo6RmluZChGWF9CU1RSIGxwc3pTdWIsIEZYX1NUUlNJWkUgblN0YXJ0KSBjb25zdA0KLXsNCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9DQotICAgIEZYX1NUUlNJWkUgbkxlbmd0aCA9IG1fcERhdGEtPm1fbkRhdGFMZW5ndGg7DQotICAgIGlmIChuU3RhcnQgPiBuTGVuZ3RoKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgRlhfTFBDU1RSIGxwc3ogPSBGWF9zdHJzdHIobV9wRGF0YS0+bV9TdHJpbmcgKyBuU3RhcnQsIG1fcERhdGEtPm1fbkRhdGFMZW5ndGggLSBuU3RhcnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwc3pTdWIuR2V0Q1N0cigpLCBscHN6U3ViLkdldExlbmd0aCgpKTsNCi0gICAgcmV0dXJuIChscHN6ID09IE5VTEwpID8gLTEgOiAoaW50KShscHN6IC0gbV9wRGF0YS0+bV9TdHJpbmcpOw0KLX0NCi12b2lkIENGWF9CeXRlU3RyaW5nOjpNYWtlTG93ZXIoKQ0KLXsNCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENvcHlCZWZvcmVXcml0ZSgpOw0KLSAgICBpZiAoR2V0TGVuZ3RoKCkgPCAxKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhTWVNfc3RybHdyKG1fcERhdGEtPm1fU3RyaW5nKTsNCi19DQotdm9pZCBDRlhfQnl0ZVN0cmluZzo6TWFrZVVwcGVyKCkNCi17DQotICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDb3B5QmVmb3JlV3JpdGUoKTsNCi0gICAgaWYgKEdldExlbmd0aCgpIDwgMSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYU1lTX3N0cnVwcihtX3BEYXRhLT5tX1N0cmluZyk7DQotfQ0KLUZYX1NUUlNJWkUgQ0ZYX0J5dGVTdHJpbmc6OlJlbW92ZShGWF9DSEFSIGNoUmVtb3ZlKQ0KLXsNCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgQ29weUJlZm9yZVdyaXRlKCk7DQotICAgIGlmIChHZXRMZW5ndGgoKSA8IDEpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIEZYX0xQU1RSIHBzdHJTb3VyY2UgPSBtX3BEYXRhLT5tX1N0cmluZzsNCi0gICAgRlhfTFBTVFIgcHN0ckRlc3QgPSBtX3BEYXRhLT5tX1N0cmluZzsNCi0gICAgRlhfTFBTVFIgcHN0ckVuZCA9IG1fcERhdGEtPm1fU3RyaW5nICsgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aDsNCi0gICAgd2hpbGUgKHBzdHJTb3VyY2UgPCBwc3RyRW5kKSB7DQotICAgICAgICBpZiAoKnBzdHJTb3VyY2UgIT0gY2hSZW1vdmUpIHsNCi0gICAgICAgICAgICAqcHN0ckRlc3QgPSAqcHN0clNvdXJjZTsNCi0gICAgICAgICAgICBwc3RyRGVzdCArKzsNCi0gICAgICAgIH0NCi0gICAgICAgIHBzdHJTb3VyY2UgKys7DQotICAgIH0NCi0gICAgKnBzdHJEZXN0ID0gMDsNCi0gICAgRlhfU1RSU0laRSBuQ291bnQgPSAoRlhfU1RSU0laRSkocHN0clNvdXJjZSAtIHBzdHJEZXN0KTsNCi0gICAgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCAtPSBuQ291bnQ7DQotICAgIHJldHVybiBuQ291bnQ7DQotfQ0KLUZYX1NUUlNJWkUgQ0ZYX0J5dGVTdHJpbmc6OlJlcGxhY2UoRlhfQlNUUiBscHN6T2xkLCBGWF9CU1RSIGxwc3pOZXcpDQotew0KLSAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBpZiAobHBzek9sZC5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIEZYX1NUUlNJWkUgblNvdXJjZUxlbiA9IGxwc3pPbGQuR2V0TGVuZ3RoKCk7DQotICAgIEZYX1NUUlNJWkUgblJlcGxhY2VtZW50TGVuID0gbHBzek5ldy5HZXRMZW5ndGgoKTsNCi0gICAgRlhfU1RSU0laRSBuQ291bnQgPSAwOw0KLSAgICBGWF9MUENTVFIgcFN0YXJ0ID0gbV9wRGF0YS0+bV9TdHJpbmc7DQotICAgIEZYX0xQU1RSIHBFbmQgPSBtX3BEYXRhLT5tX1N0cmluZyArIG1fcERhdGEtPm1fbkRhdGFMZW5ndGg7DQotICAgIHdoaWxlICgxKSB7DQotICAgICAgICBGWF9MUENTVFIgcFRhcmdldCA9IEZYX3N0cnN0cihwU3RhcnQsIChGWF9TVFJTSVpFKShwRW5kIC0gcFN0YXJ0KSwgbHBzek9sZC5HZXRDU3RyKCksIG5Tb3VyY2VMZW4pOw0KLSAgICAgICAgaWYgKHBUYXJnZXQgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbkNvdW50Kys7DQotICAgICAgICBwU3RhcnQgPSBwVGFyZ2V0ICsgblNvdXJjZUxlbjsNCi0gICAgfQ0KLSAgICBpZiAobkNvdW50ID09IDApIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIEZYX1NUUlNJWkUgbk5ld0xlbmd0aCA9ICBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoICsgKG5SZXBsYWNlbWVudExlbiAtIG5Tb3VyY2VMZW4pICogbkNvdW50Ow0KLSAgICBpZiAobk5ld0xlbmd0aCA9PSAwKSB7DQotICAgICAgICBFbXB0eSgpOw0KLSAgICAgICAgcmV0dXJuIG5Db3VudDsNCi0gICAgfQ0KLSAgICBDRlhfU3RyaW5nRGF0YSogcE5ld0RhdGEgPSBGWF9BbGxvY1N0cmluZyhuTmV3TGVuZ3RoKTsNCi0gICAgaWYgKCFwTmV3RGF0YSkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgcFN0YXJ0ID0gbV9wRGF0YS0+bV9TdHJpbmc7DQotICAgIEZYX0xQU1RSIHBEZXN0ID0gcE5ld0RhdGEtPm1fU3RyaW5nOw0KLSAgICBmb3IgKEZYX1NUUlNJWkUgaSA9IDA7IGkgPCBuQ291bnQ7IGkgKyspIHsNCi0gICAgICAgIEZYX0xQQ1NUUiBwVGFyZ2V0ID0gRlhfc3Ryc3RyKHBTdGFydCwgKEZYX1NUUlNJWkUpKHBFbmQgLSBwU3RhcnQpLCBscHN6T2xkLkdldENTdHIoKSwgblNvdXJjZUxlbik7DQotICAgICAgICBGWFNZU19tZW1jcHkzMihwRGVzdCwgcFN0YXJ0LCBwVGFyZ2V0IC0gcFN0YXJ0KTsNCi0gICAgICAgIHBEZXN0ICs9IHBUYXJnZXQgLSBwU3RhcnQ7DQotICAgICAgICBGWFNZU19tZW1jcHkzMihwRGVzdCwgbHBzek5ldy5HZXRDU3RyKCksIGxwc3pOZXcuR2V0TGVuZ3RoKCkpOw0KLSAgICAgICAgcERlc3QgKz0gbHBzek5ldy5HZXRMZW5ndGgoKTsNCi0gICAgICAgIHBTdGFydCA9IHBUYXJnZXQgKyBuU291cmNlTGVuOw0KLSAgICB9DQotICAgIEZYU1lTX21lbWNweTMyKHBEZXN0LCBwU3RhcnQsIHBFbmQgLSBwU3RhcnQpOw0KLSAgICBGWF9SZWxlYXNlU3RyaW5nKG1fcERhdGEpOw0KLSAgICBtX3BEYXRhID0gcE5ld0RhdGE7DQotICAgIHJldHVybiBuQ291bnQ7DQotfQ0KLXZvaWQgQ0ZYX0J5dGVTdHJpbmc6OlNldEF0KEZYX1NUUlNJWkUgbkluZGV4LCBGWF9DSEFSIGNoKQ0KLXsNCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYU1lTX2Fzc2VydChuSW5kZXggPj0gMCk7DQotICAgIEZYU1lTX2Fzc2VydChuSW5kZXggPCBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoKTsNCi0gICAgQ29weUJlZm9yZVdyaXRlKCk7DQotICAgIG1fcERhdGEtPm1fU3RyaW5nW25JbmRleF0gPSBjaDsNCi19DQotQ0ZYX0J5dGVTdHJpbmcgQ0ZYX0J5dGVTdHJpbmc6OkxvYWRGcm9tRmlsZShGWF9CU1RSIGZpbGVuYW1lKQ0KLXsNCi0gICAgRlhTWVNfRklMRSogZmlsZSA9IEZYU1lTX2ZvcGVuKENGWF9CeXRlU3RyaW5nKGZpbGVuYW1lKSwgInJiIik7DQotICAgIGlmIChmaWxlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZygpOw0KLSAgICB9DQotICAgIEZYU1lTX2ZzZWVrKGZpbGUsIDAsIEZYU1lTX1NFRUtfRU5EKTsNCi0gICAgaW50IGxlbiA9IEZYU1lTX2Z0ZWxsKGZpbGUpOw0KLSAgICBGWFNZU19mc2VlayhmaWxlLCAwLCBGWFNZU19TRUVLX1NFVCk7DQotICAgIENGWF9CeXRlU3RyaW5nIHN0cjsNCi0gICAgRlhfTFBTVFIgYnVmID0gc3RyLkdldEJ1ZmZlcihsZW4pOw0KLSAgICBzaXplX3QgcmVhZENudCA9IEZYU1lTX2ZyZWFkKGJ1ZiwgMSwgbGVuLCBmaWxlKTsNCi0gICAgc3RyLlJlbGVhc2VCdWZmZXIobGVuKTsNCi0gICAgRlhTWVNfZmNsb3NlKGZpbGUpOw0KLSAgICByZXR1cm4gc3RyOw0KLX0NCi1DRlhfV2lkZVN0cmluZyBDRlhfQnl0ZVN0cmluZzo6VVRGOERlY29kZSgpIGNvbnN0DQotew0KLSAgICBDRlhfVVRGOERlY29kZXIgZGVjb2RlcjsNCi0gICAgZm9yIChGWF9TVFJTSVpFIGkgPSAwOyBpIDwgR2V0TGVuZ3RoKCk7IGkgKyspIHsNCi0gICAgICAgIGRlY29kZXIuSW5wdXQoKEZYX0JZVEUpbV9wRGF0YS0+bV9TdHJpbmdbaV0pOw0KLSAgICB9DQotICAgIHJldHVybiBkZWNvZGVyLkdldFJlc3VsdCgpOw0KLX0NCi1DRlhfQnl0ZVN0cmluZyBDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUoRlhfTFBDV1NUUiBzdHIsIEZYX1NUUlNJWkUgbGVuKQ0KLXsNCi0gICAgaWYgKGxlbiA8IDApIHsNCi0gICAgICAgIGxlbiA9IChGWF9TVFJTSVpFKUZYU1lTX3djc2xlbihzdHIpOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIGJzdHI7DQotICAgIGJzdHIuQ29udmVydEZyb20oQ0ZYX1dpZGVTdHJpbmcoc3RyLCBsZW4pKTsNCi0gICAgcmV0dXJuIGJzdHI7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyKQ0KLXsNCi0gICAgcmV0dXJuIEZyb21Vbmljb2RlKChGWF9MUENXU1RSKXN0ciwgc3RyLkdldExlbmd0aCgpKTsNCi19DQotdm9pZCBDRlhfQnl0ZVN0cmluZzo6Q29udmVydEZyb20oY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0ciwgQ0ZYX0NoYXJNYXAqIHBDaGFyTWFwKQ0KLXsNCi0gICAgaWYgKHBDaGFyTWFwID09IE5VTEwpIHsNCi0gICAgICAgIHBDaGFyTWFwID0gQ0ZYX0NoYXJNYXA6OkdldERlZmF1bHRNYXBwZXIoKTsNCi0gICAgfQ0KLSAgICAqdGhpcyA9ICgqcENoYXJNYXAtPm1fR2V0Qnl0ZVN0cmluZykocENoYXJNYXAsIHN0cik7DQotfQ0KLWludCBDRlhfQnl0ZVN0cmluZzo6Q29tcGFyZShGWF9CU1RSIHN0cikgY29uc3QNCi17DQotICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBzdHIuSXNFbXB0eSgpID8gMCA6IC0xOw0KLSAgICB9DQotICAgIGludCB0aGlzX2xlbiA9IG1fcERhdGEtPm1fbkRhdGFMZW5ndGg7DQotICAgIGludCB0aGF0X2xlbiA9IHN0ci5HZXRMZW5ndGgoKTsNCi0gICAgaW50IG1pbl9sZW4gPSB0aGlzX2xlbiA8IHRoYXRfbGVuID8gdGhpc19sZW4gOiB0aGF0X2xlbjsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaW5fbGVuOyBpICsrKSB7DQotICAgICAgICBpZiAoKEZYX0JZVEUpbV9wRGF0YS0+bV9TdHJpbmdbaV0gPCBzdHIuR2V0QXQoaSkpIHsNCi0gICAgICAgICAgICByZXR1cm4gLTE7DQotICAgICAgICB9IGVsc2UgaWYgKChGWF9CWVRFKW1fcERhdGEtPm1fU3RyaW5nW2ldID4gc3RyLkdldEF0KGkpKSB7DQotICAgICAgICAgICAgcmV0dXJuIDE7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKHRoaXNfbGVuIDwgdGhhdF9sZW4pIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfSBlbHNlIGlmICh0aGlzX2xlbiA+IHRoYXRfbGVuKSB7DQotICAgICAgICByZXR1cm4gMTsNCi0gICAgfQ0KLSAgICByZXR1cm4gMDsNCi19DQotdm9pZCBDRlhfQnl0ZVN0cmluZzo6VHJpbVJpZ2h0KEZYX0JTVFIgbHBzelRhcmdldHMpDQotew0KLSAgICBpZiAobV9wRGF0YSA9PSBOVUxMIHx8IGxwc3pUYXJnZXRzLklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENvcHlCZWZvcmVXcml0ZSgpOw0KLSAgICBGWF9TVFJTSVpFIHBvcyA9IEdldExlbmd0aCgpOw0KLSAgICBpZiAocG9zIDwgMSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgIEZYX1NUUlNJWkUgaSA9IDA7DQotICAgICAgICB3aGlsZSAoaSA8IGxwc3pUYXJnZXRzLkdldExlbmd0aCgpICYmIGxwc3pUYXJnZXRzW2ldICE9IG1fcERhdGEtPm1fU3RyaW5nW3BvcyAtIDFdKSB7DQotICAgICAgICAgICAgaSArKzsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChpID09IGxwc3pUYXJnZXRzLkdldExlbmd0aCgpKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBwb3MgLS07DQotICAgIH0NCi0gICAgaWYgKHBvcyA8IG1fcERhdGEtPm1fbkRhdGFMZW5ndGgpIHsNCi0gICAgICAgIG1fcERhdGEtPm1fU3RyaW5nW3Bvc10gPSAwOw0KLSAgICAgICAgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCA9IHBvczsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9CeXRlU3RyaW5nOjpUcmltUmlnaHQoRlhfQ0hBUiBjaFRhcmdldCkNCi17DQotICAgIFRyaW1SaWdodChDRlhfQnl0ZVN0cmluZ0MoY2hUYXJnZXQpKTsNCi19DQotdm9pZCBDRlhfQnl0ZVN0cmluZzo6VHJpbVJpZ2h0KCkNCi17DQotICAgIFRyaW1SaWdodChGWF9CU1RSQygiXHgwOVx4MGFceDBiXHgwY1x4MGRceDIwIikpOw0KLX0NCi12b2lkIENGWF9CeXRlU3RyaW5nOjpUcmltTGVmdChGWF9CU1RSIGxwc3pUYXJnZXRzKQ0KLXsNCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChscHN6VGFyZ2V0cy5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDb3B5QmVmb3JlV3JpdGUoKTsNCi0gICAgRlhfU1RSU0laRSBsZW4gPSBHZXRMZW5ndGgoKTsNCi0gICAgaWYgKGxlbiA8IDEpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9TVFJTSVpFIHBvcyA9IDA7DQotICAgIHdoaWxlIChwb3MgPCBsZW4pIHsNCi0gICAgICAgIEZYX1NUUlNJWkUgaSA9IDA7DQotICAgICAgICB3aGlsZSAoaSA8IGxwc3pUYXJnZXRzLkdldExlbmd0aCgpICYmIGxwc3pUYXJnZXRzW2ldICE9IG1fcERhdGEtPm1fU3RyaW5nW3Bvc10pIHsNCi0gICAgICAgICAgICBpICsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGkgPT0gbHBzelRhcmdldHMuR2V0TGVuZ3RoKCkpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIHBvcyArKzsNCi0gICAgfQ0KLSAgICBpZiAocG9zKSB7DQotICAgICAgICBGWF9TVFJTSVpFIG5EYXRhTGVuZ3RoID0gbGVuIC0gcG9zOw0KLSAgICAgICAgRlhTWVNfbWVtbW92ZTMyKG1fcERhdGEtPm1fU3RyaW5nLCBtX3BEYXRhLT5tX1N0cmluZyArIHBvcywgKG5EYXRhTGVuZ3RoICsgMSkqc2l6ZW9mKEZYX0NIQVIpKTsNCi0gICAgICAgIG1fcERhdGEtPm1fbkRhdGFMZW5ndGggPSBuRGF0YUxlbmd0aDsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9CeXRlU3RyaW5nOjpUcmltTGVmdChGWF9DSEFSIGNoVGFyZ2V0KQ0KLXsNCi0gICAgVHJpbUxlZnQoQ0ZYX0J5dGVTdHJpbmdDKGNoVGFyZ2V0KSk7DQotfQ0KLXZvaWQgQ0ZYX0J5dGVTdHJpbmc6OlRyaW1MZWZ0KCkNCi17DQotICAgIFRyaW1MZWZ0KEZYX0JTVFJDKCJceDA5XHgwYVx4MGJceDBjXHgwZFx4MjAiKSk7DQotfQ0KLUZYX0RXT1JEIENGWF9CeXRlU3RyaW5nOjpHZXRJRChGWF9TVFJTSVpFIHN0YXJ0X3BvcykgY29uc3QNCi17DQotICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0MoKnRoaXMpLkdldElEKHN0YXJ0X3Bvcyk7DQotfQ0KLUZYX0RXT1JEIENGWF9CeXRlU3RyaW5nQzo6R2V0SUQoRlhfU1RSU0laRSBzdGFydF9wb3MpIGNvbnN0DQotew0KLSAgICBpZiAobV9MZW5ndGggPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgaWYgKHN0YXJ0X3BvcyA+PSBtX0xlbmd0aCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgRlhfRFdPUkQgc3RyaWQgPSAwOw0KLSAgICBpZiAoc3RhcnRfcG9zICsgNCA+IG1fTGVuZ3RoKSB7DQotICAgICAgICBmb3IgKEZYX1NUUlNJWkUgaSA9IDA7IGkgPCBtX0xlbmd0aCAtIHN0YXJ0X3BvczsgaSArKykgew0KLSAgICAgICAgICAgIHN0cmlkID0gc3RyaWQgKiAyNTYgKyBtX1B0cltzdGFydF9wb3MgKyBpXTsNCi0gICAgICAgIH0NCi0gICAgICAgIHN0cmlkID0gc3RyaWQgPDwgKCg0IC0gbV9MZW5ndGggKyBzdGFydF9wb3MpICogOCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkgKyspIHsNCi0gICAgICAgICAgICBzdHJpZCA9IHN0cmlkICogMjU2ICsgbV9QdHJbc3RhcnRfcG9zICsgaV07DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIHN0cmlkOw0KLX0NCi1GWF9TVFJTSVpFIEZYX2Z0b2EoRlhfRkxPQVQgZCwgRlhfTFBTVFIgYnVmKQ0KLXsNCi0gICAgYnVmWzBdID0gJzAnOw0KLSAgICBidWZbMV0gPSAnXDAnOw0KLSAgICBpZiAoZCA9PSAwLjBmKSB7DQotICAgICAgICByZXR1cm4gMTsNCi0gICAgfQ0KLSAgICBGWF9CT09MIGJOZWdhdGl2ZSA9IEZBTFNFOw0KLSAgICBpZiAoZCA8IDApIHsNCi0gICAgICAgIGJOZWdhdGl2ZSA9IFRSVUU7DQotICAgICAgICBkID0gLWQ7DQotICAgIH0NCi0gICAgaW50IHNjYWxlID0gMTsNCi0gICAgaW50IHNjYWxlZCA9IEZYU1lTX3JvdW5kKGQpOw0KLSAgICB3aGlsZSAoc2NhbGVkIDwgMTAwMDAwKSB7DQotICAgICAgICBpZiAoc2NhbGUgPT0gMTAwMDAwMCkgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgc2NhbGUgKj0gMTA7DQotICAgICAgICBzY2FsZWQgPSBGWFNZU19yb3VuZChkICogc2NhbGUpOw0KLSAgICB9DQotICAgIGlmIChzY2FsZWQgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIDE7DQotICAgIH0NCi0gICAgY2hhciBidWYyWzMyXTsNCi0gICAgaW50IGJ1Zl9zaXplID0gMDsNCi0gICAgaWYgKGJOZWdhdGl2ZSkgew0KLSAgICAgICAgYnVmW2J1Zl9zaXplKytdID0gJy0nOw0KLSAgICB9DQotICAgIGludCBpID0gc2NhbGVkIC8gc2NhbGU7DQotICAgIEZYU1lTX2l0b2EoaSwgYnVmMiwgMTApOw0KLSAgICBGWF9TVFJTSVpFIGxlbiA9IChGWF9TVFJTSVpFKUZYU1lTX3N0cmxlbihidWYyKTsNCi0gICAgRlhTWVNfbWVtY3B5MzIoYnVmICsgYnVmX3NpemUsIGJ1ZjIsIGxlbik7DQotICAgIGJ1Zl9zaXplICs9IGxlbjsNCi0gICAgaW50IGZyYWN0aW9uID0gc2NhbGVkICUgc2NhbGU7DQotICAgIGlmIChmcmFjdGlvbiA9PSAwKSB7DQotICAgICAgICByZXR1cm4gYnVmX3NpemU7DQotICAgIH0NCi0gICAgYnVmW2J1Zl9zaXplKytdID0gJy4nOw0KLSAgICBzY2FsZSAvPSAxMDsNCi0gICAgd2hpbGUgKGZyYWN0aW9uKSB7DQotICAgICAgICBidWZbYnVmX3NpemUrK10gPSAnMCcgKyBmcmFjdGlvbiAvIHNjYWxlOw0KLSAgICAgICAgZnJhY3Rpb24gJT0gc2NhbGU7DQotICAgICAgICBzY2FsZSAvPSAxMDsNCi0gICAgfQ0KLSAgICByZXR1cm4gYnVmX3NpemU7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENGWF9CeXRlU3RyaW5nOjpGb3JtYXRGbG9hdChGWF9GTE9BVCBkLCBpbnQgcHJlY2lzaW9uKQ0KLXsNCi0gICAgRlhfQ0hBUiBidWZbMzJdOw0KLSAgICBGWF9TVFJTSVpFIGxlbiA9IEZYX2Z0b2EoZCwgYnVmKTsNCi0gICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKGJ1ZiwgbGVuKTsNCi19DQotdm9pZCBDRlhfU3RyaW5nQnVmQmFzZTo6Q29weShGWF9CU1RSIHN0cikNCi17DQotICAgIG1fU2l6ZSA9IHN0ci5HZXRMZW5ndGgoKTsNCi0gICAgaWYgKG1fU2l6ZSA+IG1fTGltaXQpIHsNCi0gICAgICAgIG1fU2l6ZSA9IG1fTGltaXQ7DQotICAgIH0NCi0gICAgRlhfQ0hBUiogcEJ1ZmZlciA9IChGWF9DSEFSKikodGhpcyArIDEpOw0KLSAgICBGWFNZU19tZW1jcHkzMihwQnVmZmVyLCBzdHIuR2V0UHRyKCksIG1fU2l6ZSk7DQotfQ0KLXZvaWQgQ0ZYX1N0cmluZ0J1ZkJhc2U6OkFwcGVuZChGWF9CU1RSIHN0cikNCi17DQotICAgIGludCBsZW4gPSBzdHIuR2V0TGVuZ3RoKCk7DQotICAgIGlmIChsZW4gPiBtX0xpbWl0IC0gbV9TaXplKSB7DQotICAgICAgICBsZW4gPSBtX0xpbWl0IC0gbV9TaXplOw0KLSAgICB9DQotICAgIEZYX0NIQVIqIHBCdWZmZXIgPSAoRlhfQ0hBUiopKHRoaXMgKyAxKTsNCi0gICAgRlhTWVNfbWVtY3B5MzIocEJ1ZmZlciArIG1fU2l6ZSwgc3RyLkdldFB0cigpLCBsZW4pOw0KLSAgICBtX1NpemUgKz0gbGVuOw0KLX0NCi12b2lkIENGWF9TdHJpbmdCdWZCYXNlOjpBcHBlbmQoaW50IGksIEZYX0RXT1JEIGZsYWdzKQ0KLXsNCi0gICAgY2hhciBidWZbMzJdOw0KLSAgICBpbnQgbGVuID0gX0J1ZmZlcl9pdG9hKGJ1ZiwgaSwgZmxhZ3MpOw0KLSAgICBBcHBlbmQoQ0ZYX0J5dGVTdHJpbmdDKGJ1ZiwgbGVuKSk7DQotfQ0KLXZvaWQgQ0ZYX0J5dGVTdHJpbmdMOjpFbXB0eShJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQ0KLXsNCi0gICAgaWYgKG1fUHRyKSB7DQotICAgICAgICBGWF9BbGxvY2F0b3JfRnJlZShwQWxsb2NhdG9yLCAoRlhfTFBWT0lEKW1fUHRyKTsNCi0gICAgfQ0KLSAgICBtX1B0ciA9IE5VTEwsIG1fTGVuZ3RoID0gMDsNCi19DQotRlhfTFBTVFIgQ0ZYX0J5dGVTdHJpbmdMOjpBbGxvY0J1ZmZlcihGWF9TVFJTSVpFIGxlbmd0aCwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikNCi17DQotICAgIEVtcHR5KHBBbGxvY2F0b3IpOw0KLSAgICBGWF9MUFNUUiBzdHIgPSBGWF9BbGxvY2F0b3JfQWxsb2MocEFsbG9jYXRvciwgRlhfQ0hBUiwgbGVuZ3RoICsgMSk7DQotICAgIGlmICghc3RyKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICAqKEZYX0xQU1RSKikoJm1fUHRyKSA9IHN0cjsNCi0gICAgbV9MZW5ndGggPSBsZW5ndGg7DQotICAgIHJldHVybiBzdHI7DQotfQ0KLXZvaWQgQ0ZYX0J5dGVTdHJpbmdMOjpTZXQoRlhfQlNUUiBzcmMsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpDQotew0KLSAgICBFbXB0eShwQWxsb2NhdG9yKTsNCi0gICAgaWYgKHNyYy5HZXRDU3RyKCkgIT0gTlVMTCAmJiBzcmMuR2V0TGVuZ3RoKCkgPiAwKSB7DQotICAgICAgICBGWF9MUFNUUiBzdHIgPSBGWF9BbGxvY2F0b3JfQWxsb2MocEFsbG9jYXRvciwgRlhfQ0hBUiwgc3JjLkdldExlbmd0aCgpICsgMSk7DQotICAgICAgICBpZiAoIXN0cikgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYU1lTX21lbWNweTMyKHN0ciwgc3JjLCBzcmMuR2V0TGVuZ3RoKCkpOw0KLSAgICAgICAgc3RyW3NyYy5HZXRMZW5ndGgoKV0gPSAnXDAnOw0KLSAgICAgICAgKihGWF9MUFNUUiopKCZtX1B0cikgPSBzdHI7DQotICAgICAgICBtX0xlbmd0aCA9IHNyYy5HZXRMZW5ndGgoKTsNCi0gICAgfQ0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGNydC9meF9iYXNpYy5oIgorc3RhdGljIGludCBfQnVmZmVyX2l0b2EoY2hhciogYnVmLCBpbnQgaSwgRlhfRFdPUkQgZmxhZ3MpCit7CisgICAgaWYgKGkgPT0gMCkgeworICAgICAgICBidWZbMF0gPSAnMCc7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBjaGFyIGJ1ZjFbMzJdOworICAgIGludCBidWZfcG9zID0gMzE7CisgICAgRlhfRFdPUkQgdSA9IGk7CisgICAgaWYgKChmbGFncyAmIEZYRk9STUFUX1NJR05FRCkgJiYgaSA8IDApIHsKKyAgICAgICAgdSA9IC1pOworICAgIH0KKyAgICBpbnQgYmFzZSA9IDEwOworICAgIEZYX0xQQ1NUUiBzdHJpbmcgPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisgICAgaWYgKGZsYWdzICYgRlhGT1JNQVRfSEVYKSB7CisgICAgICAgIGJhc2UgPSAxNjsKKyAgICAgICAgaWYgKGZsYWdzICYgRlhGT1JNQVRfQ0FQSVRBTCkgeworICAgICAgICAgICAgc3RyaW5nID0gIjAxMjM0NTY3ODlBQkNERUYiOworICAgICAgICB9CisgICAgfQorICAgIHdoaWxlICh1ICE9IDApIHsKKyAgICAgICAgYnVmMVtidWZfcG9zLS1dID0gc3RyaW5nW3UgJSBiYXNlXTsKKyAgICAgICAgdSA9IHUgLyBiYXNlOworICAgIH0KKyAgICBpZiAoKGZsYWdzICYgRlhGT1JNQVRfU0lHTkVEKSAmJiBpIDwgMCkgeworICAgICAgICBidWYxW2J1Zl9wb3MtLV0gPSAnLSc7CisgICAgfQorICAgIGludCBsZW4gPSAzMSAtIGJ1Zl9wb3M7CisgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IGxlbjsgaWkgKyspIHsKKyAgICAgICAgYnVmW2lpXSA9IGJ1ZjFbaWkgKyBidWZfcG9zICsgMV07CisgICAgfQorICAgIHJldHVybiBsZW47Cit9CitDRlhfQnl0ZVN0cmluZyBDRlhfQnl0ZVN0cmluZzo6Rm9ybWF0SW50ZWdlcihpbnQgaSwgRlhfRFdPUkQgZmxhZ3MpCit7CisgICAgY2hhciBidWZbMzJdOworICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0MoYnVmLCBfQnVmZmVyX2l0b2EoYnVmLCBpLCBmbGFncykpOworfQorc3RhdGljIENGWF9TdHJpbmdEYXRhKiBGWF9BbGxvY1N0cmluZyhpbnQgbkxlbikKK3sKKyAgICBpZiAobkxlbiA9PSAwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDRlhfU3RyaW5nRGF0YSogcERhdGEgPSAoQ0ZYX1N0cmluZ0RhdGEqKUZYX0FsbG9jKEZYX0JZVEUsIHNpemVvZihsb25nKSAqIDMgKyAobkxlbiArIDEpICogc2l6ZW9mKGNoYXIpKTsKKyAgICBpZiAoIXBEYXRhKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwRGF0YS0+bV9uQWxsb2NMZW5ndGggPSBuTGVuOworICAgIHBEYXRhLT5tX25EYXRhTGVuZ3RoID0gbkxlbjsKKyAgICBwRGF0YS0+bV9uUmVmcyA9IDE7CisgICAgcERhdGEtPm1fU3RyaW5nW25MZW5dID0gMDsKKyAgICByZXR1cm4gcERhdGE7Cit9CitzdGF0aWMgdm9pZCBGWF9SZWxlYXNlU3RyaW5nKENGWF9TdHJpbmdEYXRhKiBwRGF0YSkKK3sKKyAgICBpZiAocERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHBEYXRhLT5tX25SZWZzIC0tOworICAgIGlmIChwRGF0YS0+bV9uUmVmcyA8PSAwKSB7CisgICAgICAgIEZYX0ZyZWUocERhdGEpOworICAgIH0KK30KK0NGWF9CeXRlU3RyaW5nOjp+Q0ZYX0J5dGVTdHJpbmcoKQoreworICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3BEYXRhLT5tX25SZWZzIC0tOworICAgIGlmIChtX3BEYXRhLT5tX25SZWZzIDwgMSkgeworICAgICAgICBGWF9GcmVlKG1fcERhdGEpOworICAgIH0KK30KK0NGWF9CeXRlU3RyaW5nOjpDRlhfQnl0ZVN0cmluZyhGWF9MUENTVFIgbHBzeiwgRlhfU1RSU0laRSBuTGVuKQoreworICAgIGlmIChuTGVuIDwgMCkgeworICAgICAgICBuTGVuID0gbHBzeiA/IChGWF9TVFJTSVpFKUZYU1lTX3N0cmxlbihscHN6KSA6IDA7CisgICAgfQorICAgIGlmIChuTGVuKSB7CisgICAgICAgIG1fcERhdGEgPSBGWF9BbGxvY1N0cmluZyhuTGVuKTsKKyAgICAgICAgaWYgKG1fcERhdGEpIHsKKyAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcERhdGEtPm1fU3RyaW5nLCBscHN6LCBuTGVuICogc2l6ZW9mKGNoYXIpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG1fcERhdGEgPSBOVUxMOworICAgIH0KK30KK0NGWF9CeXRlU3RyaW5nOjpDRlhfQnl0ZVN0cmluZyhGWF9MUENCWVRFIGxwc3osIEZYX1NUUlNJWkUgbkxlbikKK3sKKyAgICBpZiAobkxlbiA+IDApIHsKKyAgICAgICAgbV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nKG5MZW4pOworICAgICAgICBpZiAobV9wRGF0YSkgeworICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wRGF0YS0+bV9TdHJpbmcsIGxwc3osIG5MZW4gKiBzaXplb2YoY2hhcikpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wRGF0YSA9IE5VTEw7CisgICAgfQorfQorQ0ZYX0J5dGVTdHJpbmc6OkNGWF9CeXRlU3RyaW5nKGNoYXIgY2gpCit7CisgICAgbV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nKDEpOworICAgIGlmIChtX3BEYXRhKSB7CisgICAgICAgIG1fcERhdGEtPm1fU3RyaW5nWzBdID0gY2g7CisgICAgfQorfQorQ0ZYX0J5dGVTdHJpbmc6OkNGWF9CeXRlU3RyaW5nKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHJpbmdTcmMpCit7CisgICAgaWYgKHN0cmluZ1NyYy5tX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgbV9wRGF0YSA9IE5VTEw7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHN0cmluZ1NyYy5tX3BEYXRhLT5tX25SZWZzID49IDApIHsKKyAgICAgICAgbV9wRGF0YSA9IHN0cmluZ1NyYy5tX3BEYXRhOworICAgICAgICBtX3BEYXRhLT5tX25SZWZzICsrOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcERhdGEgPSBOVUxMOworICAgICAgICAqdGhpcyA9IHN0cmluZ1NyYzsKKyAgICB9Cit9CitDRlhfQnl0ZVN0cmluZzo6Q0ZYX0J5dGVTdHJpbmcoRlhfQlNUUiBzdHJpbmdTcmMpCit7CisgICAgaWYgKHN0cmluZ1NyYy5Jc0VtcHR5KCkpIHsKKyAgICAgICAgbV9wRGF0YSA9IE5VTEw7CisgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3BEYXRhID0gTlVMTDsKKyAgICAgICAgKnRoaXMgPSBzdHJpbmdTcmM7CisgICAgfQorfQorQ0ZYX0J5dGVTdHJpbmc6OkNGWF9CeXRlU3RyaW5nKEZYX0JTVFIgc3RyMSwgRlhfQlNUUiBzdHIyKQoreworICAgIG1fcERhdGEgPSBOVUxMOworICAgIGludCBuTmV3TGVuID0gc3RyMS5HZXRMZW5ndGgoKSArIHN0cjIuR2V0TGVuZ3RoKCk7CisgICAgaWYgKG5OZXdMZW4gPT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcERhdGEgPSBGWF9BbGxvY1N0cmluZyhuTmV3TGVuKTsKKyAgICBpZiAobV9wRGF0YSkgeworICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhLT5tX1N0cmluZywgc3RyMS5HZXRDU3RyKCksIHN0cjEuR2V0TGVuZ3RoKCkpOworICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhLT5tX1N0cmluZyArIHN0cjEuR2V0TGVuZ3RoKCksIHN0cjIuR2V0Q1N0cigpLCBzdHIyLkdldExlbmd0aCgpKTsKKyAgICB9Cit9Citjb25zdCBDRlhfQnl0ZVN0cmluZyYgQ0ZYX0J5dGVTdHJpbmc6Om9wZXJhdG9yPShGWF9MUENTVFIgbHBzeikKK3sKKyAgICBpZiAobHBzeiA9PSBOVUxMIHx8IGxwc3pbMF0gPT0gMCkgeworICAgICAgICBFbXB0eSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFzc2lnbkNvcHkoKEZYX1NUUlNJWkUpRlhTWVNfc3RybGVuKGxwc3opLCBscHN6KTsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworfQorY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIENGWF9CeXRlU3RyaW5nOjpvcGVyYXRvcj0oRlhfQlNUUiBzdHIpCit7CisgICAgaWYgKHN0ci5Jc0VtcHR5KCkpIHsKKyAgICAgICAgRW1wdHkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBc3NpZ25Db3B5KHN0ci5HZXRMZW5ndGgoKSwgc3RyLkdldENTdHIoKSk7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKK30KK2NvbnN0IENGWF9CeXRlU3RyaW5nJiBDRlhfQnl0ZVN0cmluZzo6b3BlcmF0b3I9KGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHJpbmdTcmMpCit7CisgICAgaWYgKG1fcERhdGEgPT0gc3RyaW5nU3JjLm1fcERhdGEpIHsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICBpZiAoc3RyaW5nU3JjLklzRW1wdHkoKSkgeworICAgICAgICBFbXB0eSgpOworICAgIH0gZWxzZSBpZiAoKG1fcERhdGEgJiYgbV9wRGF0YS0+bV9uUmVmcyA8IDApIHx8CisgICAgICAgICAgICAgICAoc3RyaW5nU3JjLm1fcERhdGEgJiYgc3RyaW5nU3JjLm1fcERhdGEtPm1fblJlZnMgPCAwKSkgeworICAgICAgICBBc3NpZ25Db3B5KHN0cmluZ1NyYy5tX3BEYXRhLT5tX25EYXRhTGVuZ3RoLCBzdHJpbmdTcmMubV9wRGF0YS0+bV9TdHJpbmcpOworICAgIH0gZWxzZSB7CisgICAgICAgIEVtcHR5KCk7CisgICAgICAgIG1fcERhdGEgPSBzdHJpbmdTcmMubV9wRGF0YTsKKyAgICAgICAgaWYgKG1fcERhdGEpIHsKKyAgICAgICAgICAgIG1fcERhdGEtPm1fblJlZnMgKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworfQorY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIENGWF9CeXRlU3RyaW5nOjpvcGVyYXRvcj0oY29uc3QgQ0ZYX0JpbmFyeUJ1ZiYgYnVmKQoreworICAgIExvYWQoYnVmLkdldEJ1ZmZlcigpLCBidWYuR2V0U2l6ZSgpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9Cit2b2lkIENGWF9CeXRlU3RyaW5nOjpMb2FkKEZYX0xQQ0JZVEUgYnVmLCBGWF9TVFJTSVpFIGxlbikKK3sKKyAgICBFbXB0eSgpOworICAgIGlmIChsZW4pIHsKKyAgICAgICAgbV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nKGxlbik7CisgICAgICAgIGlmIChtX3BEYXRhKSB7CisgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhLT5tX1N0cmluZywgYnVmLCBsZW4gKiBzaXplb2YoY2hhcikpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wRGF0YSA9IE5VTEw7CisgICAgfQorfQorY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIENGWF9CeXRlU3RyaW5nOjpvcGVyYXRvcis9KEZYX0xQQ1NUUiBscHN6KQoreworICAgIGlmIChscHN6KSB7CisgICAgICAgIENvbmNhdEluUGxhY2UoKEZYX1NUUlNJWkUpRlhTWVNfc3RybGVuKGxwc3opLCBscHN6KTsKKyAgICB9CisgICAgcmV0dXJuICp0aGlzOworfQorY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIENGWF9CeXRlU3RyaW5nOjpvcGVyYXRvcis9KGNoYXIgY2gpCit7CisgICAgQ29uY2F0SW5QbGFjZSgxLCAmY2gpOworICAgIHJldHVybiAqdGhpczsKK30KK2NvbnN0IENGWF9CeXRlU3RyaW5nJiBDRlhfQnl0ZVN0cmluZzo6b3BlcmF0b3IrPShjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyaW5nKQoreworICAgIGlmIChzdHJpbmcubV9wRGF0YSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgQ29uY2F0SW5QbGFjZShzdHJpbmcubV9wRGF0YS0+bV9uRGF0YUxlbmd0aCwgc3RyaW5nLm1fcERhdGEtPm1fU3RyaW5nKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9Citjb25zdCBDRlhfQnl0ZVN0cmluZyYgQ0ZYX0J5dGVTdHJpbmc6Om9wZXJhdG9yKz0oRlhfQlNUUiBzdHJpbmcpCit7CisgICAgaWYgKHN0cmluZy5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICBDb25jYXRJblBsYWNlKHN0cmluZy5HZXRMZW5ndGgoKSwgc3RyaW5nLkdldENTdHIoKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorYm9vbCBDRlhfQnl0ZVN0cmluZzo6RXF1YWwoRlhfQlNUUiBzdHIpIGNvbnN0Cit7CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gc3RyLklzRW1wdHkoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fcERhdGEtPm1fbkRhdGFMZW5ndGggPT0gc3RyLkdldExlbmd0aCgpICYmCisgICAgICAgICAgIEZYU1lTX21lbWNtcDMyKG1fcERhdGEtPm1fU3RyaW5nLCBzdHIuR2V0Q1N0cigpLCBzdHIuR2V0TGVuZ3RoKCkpID09IDA7Cit9Citib29sIENGWF9CeXRlU3RyaW5nOjpvcGVyYXRvciA9PShjb25zdCBDRlhfQnl0ZVN0cmluZyYgczIpIGNvbnN0Cit7CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gczIuSXNFbXB0eSgpOworICAgIH0KKyAgICBpZiAoczIubV9wRGF0YSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIG1fcERhdGEtPm1fbkRhdGFMZW5ndGggPT0gczIubV9wRGF0YS0+bV9uRGF0YUxlbmd0aCAmJgorICAgICAgICAgICBGWFNZU19tZW1jbXAzMihtX3BEYXRhLT5tX1N0cmluZywgczIubV9wRGF0YS0+bV9TdHJpbmcsIG1fcERhdGEtPm1fbkRhdGFMZW5ndGgpID09IDA7Cit9Cit2b2lkIENGWF9CeXRlU3RyaW5nOjpFbXB0eSgpCit7CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX3BEYXRhLT5tX25SZWZzID4gMSkgeworICAgICAgICBtX3BEYXRhLT5tX25SZWZzIC0tOworICAgIH0gZWxzZSB7CisgICAgICAgIEZYX0ZyZWUobV9wRGF0YSk7CisgICAgfQorICAgIG1fcERhdGEgPSBOVUxMOworfQorYm9vbCBDRlhfQnl0ZVN0cmluZzo6RXF1YWxOb0Nhc2UoRlhfQlNUUiBzdHIpIGNvbnN0Cit7CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gc3RyLklzRW1wdHkoKTsKKyAgICB9CisgICAgRlhfU1RSU0laRSBsZW4gPSBzdHIuR2V0TGVuZ3RoKCk7CisgICAgaWYgKG1fcERhdGEtPm1fbkRhdGFMZW5ndGggIT0gbGVuKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgRlhfTFBDQllURSBwVGhpcyA9IChGWF9MUENCWVRFKW1fcERhdGEtPm1fU3RyaW5nOworICAgIEZYX0xQQ0JZVEUgcFRoYXQgPSAoRlhfTFBDQllURSlzdHI7CisgICAgZm9yIChGWF9TVFJTSVpFIGkgPSAwOyBpIDwgbGVuOyBpICsrKSB7CisgICAgICAgIGlmICgoKnBUaGlzKSAhPSAoKnBUaGF0KSkgeworICAgICAgICAgICAgRlhfQllURSBiVGhpcyA9ICpwVGhpczsKKyAgICAgICAgICAgIGlmIChiVGhpcyA+PSAnQScgJiYgYlRoaXMgPD0gJ1onKSB7CisgICAgICAgICAgICAgICAgYlRoaXMgKz0gJ2EnIC0gJ0EnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfQllURSBiVGhhdCA9ICpwVGhhdDsKKyAgICAgICAgICAgIGlmIChiVGhhdCA+PSAnQScgJiYgYlRoYXQgPD0gJ1onKSB7CisgICAgICAgICAgICAgICAgYlRoYXQgKz0gJ2EnIC0gJ0EnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJUaGlzICE9IGJUaGF0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBUaGlzICsrOworICAgICAgICBwVGhhdCArKzsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9Cit2b2lkIENGWF9CeXRlU3RyaW5nOjpBc3NpZ25Db3B5KEZYX1NUUlNJWkUgblNyY0xlbiwgRlhfTFBDU1RSIGxwc3pTcmNEYXRhKQoreworICAgIEFsbG9jQmVmb3JlV3JpdGUoblNyY0xlbik7CisgICAgRlhTWVNfbWVtY3B5MzIobV9wRGF0YS0+bV9TdHJpbmcsIGxwc3pTcmNEYXRhLCBuU3JjTGVuICogc2l6ZW9mKGNoYXIpKTsKKyAgICBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoID0gblNyY0xlbjsKKyAgICBtX3BEYXRhLT5tX1N0cmluZ1tuU3JjTGVuXSA9IDA7Cit9Cit2b2lkIENGWF9CeXRlU3RyaW5nOjpDb3B5QmVmb3JlV3JpdGUoKQoreworICAgIGlmIChtX3BEYXRhID09IE5VTEwgfHwgbV9wRGF0YS0+bV9uUmVmcyA8PSAxKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZYX1N0cmluZ0RhdGEqIHBEYXRhID0gbV9wRGF0YTsKKyAgICBtX3BEYXRhLT5tX25SZWZzIC0tOworICAgIEZYX1NUUlNJWkUgbkRhdGFMZW5ndGggPSBwRGF0YS0+bV9uRGF0YUxlbmd0aDsKKyAgICBtX3BEYXRhID0gRlhfQWxsb2NTdHJpbmcobkRhdGFMZW5ndGgpOworICAgIGlmIChtX3BEYXRhICE9IE5VTEwpIHsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wRGF0YS0+bV9TdHJpbmcsIHBEYXRhLT5tX1N0cmluZywgKG5EYXRhTGVuZ3RoICsgMSkgKiBzaXplb2YoY2hhcikpOworICAgIH0KK30KK3ZvaWQgQ0ZYX0J5dGVTdHJpbmc6OkFsbG9jQmVmb3JlV3JpdGUoRlhfU1RSU0laRSBuTGVuKQoreworICAgIGlmIChtX3BEYXRhICYmIG1fcERhdGEtPm1fblJlZnMgPD0gMSAmJiBtX3BEYXRhLT5tX25BbGxvY0xlbmd0aCA+PSBuTGVuKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRW1wdHkoKTsKKyAgICBtX3BEYXRhID0gRlhfQWxsb2NTdHJpbmcobkxlbik7Cit9Cit2b2lkIENGWF9CeXRlU3RyaW5nOjpSZWxlYXNlQnVmZmVyKEZYX1NUUlNJWkUgbk5ld0xlbmd0aCkKK3sKKyAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ29weUJlZm9yZVdyaXRlKCk7CisgICAgaWYgKG5OZXdMZW5ndGggPT0gLTEpIHsKKyAgICAgICAgbk5ld0xlbmd0aCA9IChGWF9TVFJTSVpFKUZYU1lTX3N0cmxlbigoRlhfTFBDU1RSKW1fcERhdGEtPm1fU3RyaW5nKTsKKyAgICB9CisgICAgaWYgKG5OZXdMZW5ndGggPT0gMCkgeworICAgICAgICBFbXB0eSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYU1lTX2Fzc2VydChuTmV3TGVuZ3RoIDw9IG1fcERhdGEtPm1fbkFsbG9jTGVuZ3RoKTsKKyAgICBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoID0gbk5ld0xlbmd0aDsKKyAgICBtX3BEYXRhLT5tX1N0cmluZ1tuTmV3TGVuZ3RoXSA9IDA7Cit9CitGWF9MUFNUUiBDRlhfQnl0ZVN0cmluZzo6TG9ja0J1ZmZlcigpCit7CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRlhfTFBTVFIgbHBzeiA9IEdldEJ1ZmZlcigwKTsKKyAgICBtX3BEYXRhLT5tX25SZWZzID0gLTE7CisgICAgcmV0dXJuIGxwc3o7Cit9Cit2b2lkIENGWF9CeXRlU3RyaW5nOjpSZXNlcnZlKEZYX1NUUlNJWkUgbGVuKQoreworICAgIEdldEJ1ZmZlcihsZW4pOworICAgIFJlbGVhc2VCdWZmZXIoR2V0TGVuZ3RoKCkpOworfQorRlhfTFBTVFIgQ0ZYX0J5dGVTdHJpbmc6OkdldEJ1ZmZlcihGWF9TVFJTSVpFIG5NaW5CdWZMZW5ndGgpCit7CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCAmJiBuTWluQnVmTGVuZ3RoID09IDApIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChtX3BEYXRhICYmIG1fcERhdGEtPm1fblJlZnMgPD0gMSAmJiBtX3BEYXRhLT5tX25BbGxvY0xlbmd0aCA+PSBuTWluQnVmTGVuZ3RoKSB7CisgICAgICAgIHJldHVybiBtX3BEYXRhLT5tX1N0cmluZzsKKyAgICB9CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICBtX3BEYXRhID0gRlhfQWxsb2NTdHJpbmcobk1pbkJ1Zkxlbmd0aCk7CisgICAgICAgIGlmICghbV9wRGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCA9IDA7CisgICAgICAgIG1fcERhdGEtPm1fU3RyaW5nWzBdID0gMDsKKyAgICAgICAgcmV0dXJuIG1fcERhdGEtPm1fU3RyaW5nOworICAgIH0KKyAgICBDRlhfU3RyaW5nRGF0YSogcE9sZERhdGEgPSBtX3BEYXRhOworICAgIEZYX1NUUlNJWkUgbk9sZExlbiA9IHBPbGREYXRhLT5tX25EYXRhTGVuZ3RoOworICAgIGlmIChuTWluQnVmTGVuZ3RoIDwgbk9sZExlbikgeworICAgICAgICBuTWluQnVmTGVuZ3RoID0gbk9sZExlbjsKKyAgICB9CisgICAgbV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nKG5NaW5CdWZMZW5ndGgpOworICAgIGlmICghbV9wRGF0YSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRlhTWVNfbWVtY3B5MzIobV9wRGF0YS0+bV9TdHJpbmcsIHBPbGREYXRhLT5tX1N0cmluZywgKG5PbGRMZW4gKyAxKSpzaXplb2YoY2hhcikpOworICAgIG1fcERhdGEtPm1fbkRhdGFMZW5ndGggPSBuT2xkTGVuOworICAgIHBPbGREYXRhLT5tX25SZWZzIC0tOworICAgIGlmIChwT2xkRGF0YS0+bV9uUmVmcyA8PSAwKSB7CisgICAgICAgIEZYX0ZyZWUocE9sZERhdGEpOworICAgIH0KKyAgICByZXR1cm4gbV9wRGF0YS0+bV9TdHJpbmc7Cit9CitGWF9TVFJTSVpFIENGWF9CeXRlU3RyaW5nOjpEZWxldGUoRlhfU1RSU0laRSBuSW5kZXgsIEZYX1NUUlNJWkUgbkNvdW50KQoreworICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChuSW5kZXggPCAwKSB7CisgICAgICAgIG5JbmRleCA9IDA7CisgICAgfQorICAgIEZYX1NUUlNJWkUgbk9sZExlbmd0aCA9IG1fcERhdGEtPm1fbkRhdGFMZW5ndGg7CisgICAgaWYgKG5Db3VudCA+IDAgJiYgbkluZGV4IDwgbk9sZExlbmd0aCkgeworICAgICAgICBGWF9TVFJTSVpFIG1MZW5ndGggPSBuSW5kZXggKyBuQ291bnQ7CisgICAgICAgIGlmIChtTGVuZ3RoID49IG5PbGRMZW5ndGgpIHsKKyAgICAgICAgICAgIG1fcERhdGEtPm1fbkRhdGFMZW5ndGggPSBuSW5kZXg7CisgICAgICAgICAgICByZXR1cm4gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aDsKKyAgICAgICAgfQorICAgICAgICBDb3B5QmVmb3JlV3JpdGUoKTsKKyAgICAgICAgaW50IG5CeXRlc1RvQ29weSA9IG5PbGRMZW5ndGggLSBtTGVuZ3RoICsgMTsKKyAgICAgICAgRlhTWVNfbWVtbW92ZTMyKG1fcERhdGEtPm1fU3RyaW5nICsgbkluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgbV9wRGF0YS0+bV9TdHJpbmcgKyBtTGVuZ3RoLCBuQnl0ZXNUb0NvcHkgKiBzaXplb2YoY2hhcikpOworICAgICAgICBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoID0gbk9sZExlbmd0aCAtIG5Db3VudDsKKyAgICB9CisgICAgcmV0dXJuIG1fcERhdGEtPm1fbkRhdGFMZW5ndGg7Cit9Cit2b2lkIENGWF9CeXRlU3RyaW5nOjpDb25jYXRJblBsYWNlKEZYX1NUUlNJWkUgblNyY0xlbiwgRlhfTFBDU1RSIGxwc3pTcmNEYXRhKQoreworICAgIGlmIChuU3JjTGVuID09IDAgfHwgbHBzelNyY0RhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgbV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nKG5TcmNMZW4pOworICAgICAgICBpZiAoIW1fcERhdGEpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhLT5tX1N0cmluZywgbHBzelNyY0RhdGEsIG5TcmNMZW4gKiBzaXplb2YoY2hhcikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX3BEYXRhLT5tX25SZWZzID4gMSB8fCBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoICsgblNyY0xlbiA+IG1fcERhdGEtPm1fbkFsbG9jTGVuZ3RoKSB7CisgICAgICAgIENGWF9TdHJpbmdEYXRhKiBwT2xkRGF0YSA9IG1fcERhdGE7CisgICAgICAgIENvbmNhdENvcHkobV9wRGF0YS0+bV9uRGF0YUxlbmd0aCwgbV9wRGF0YS0+bV9TdHJpbmcsIG5TcmNMZW4sIGxwc3pTcmNEYXRhKTsKKyAgICAgICAgRlhfUmVsZWFzZVN0cmluZyhwT2xkRGF0YSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wRGF0YS0+bV9TdHJpbmcgKyBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoLCBscHN6U3JjRGF0YSwgblNyY0xlbiAqIHNpemVvZihjaGFyKSk7CisgICAgICAgIG1fcERhdGEtPm1fbkRhdGFMZW5ndGggKz0gblNyY0xlbjsKKyAgICAgICAgbV9wRGF0YS0+bV9TdHJpbmdbbV9wRGF0YS0+bV9uRGF0YUxlbmd0aF0gPSAwOworICAgIH0KK30KK3ZvaWQgQ0ZYX0J5dGVTdHJpbmc6OkNvbmNhdENvcHkoRlhfU1RSU0laRSBuU3JjMUxlbiwgRlhfTFBDU1RSIGxwc3pTcmMxRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfU1RSU0laRSBuU3JjMkxlbiwgRlhfTFBDU1RSIGxwc3pTcmMyRGF0YSkKK3sKKyAgICBpbnQgbk5ld0xlbiA9IG5TcmMxTGVuICsgblNyYzJMZW47CisgICAgaWYgKG5OZXdMZW4gPT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcERhdGEgPSBGWF9BbGxvY1N0cmluZyhuTmV3TGVuKTsKKyAgICBpZiAobV9wRGF0YSkgeworICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhLT5tX1N0cmluZywgbHBzelNyYzFEYXRhLCBuU3JjMUxlbiAqIHNpemVvZihjaGFyKSk7CisgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcERhdGEtPm1fU3RyaW5nICsgblNyYzFMZW4sIGxwc3pTcmMyRGF0YSwgblNyYzJMZW4gKiBzaXplb2YoY2hhcikpOworICAgIH0KK30KK0NGWF9CeXRlU3RyaW5nIENGWF9CeXRlU3RyaW5nOjpNaWQoRlhfU1RSU0laRSBuRmlyc3QpIGNvbnN0Cit7CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIE1pZChuRmlyc3QsIG1fcERhdGEtPm1fbkRhdGFMZW5ndGggLSBuRmlyc3QpOworfQorQ0ZYX0J5dGVTdHJpbmcgQ0ZYX0J5dGVTdHJpbmc6Ok1pZChGWF9TVFJTSVpFIG5GaXJzdCwgRlhfU1RSU0laRSBuQ291bnQpIGNvbnN0Cit7CisgICAgaWYgKG5GaXJzdCA8IDApIHsKKyAgICAgICAgbkZpcnN0ID0gMDsKKyAgICB9CisgICAgaWYgKG5Db3VudCA8IDApIHsKKyAgICAgICAgbkNvdW50ID0gMDsKKyAgICB9CisgICAgaWYgKG5GaXJzdCArIG5Db3VudCA+IG1fcERhdGEtPm1fbkRhdGFMZW5ndGgpIHsKKyAgICAgICAgbkNvdW50ID0gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCAtIG5GaXJzdDsKKyAgICB9CisgICAgaWYgKG5GaXJzdCA+IG1fcERhdGEtPm1fbkRhdGFMZW5ndGgpIHsKKyAgICAgICAgbkNvdW50ID0gMDsKKyAgICB9CisgICAgaWYgKG5GaXJzdCA9PSAwICYmIG5GaXJzdCArIG5Db3VudCA9PSBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoKSB7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgZGVzdDsKKyAgICBBbGxvY0NvcHkoZGVzdCwgbkNvdW50LCBuRmlyc3QsIDApOworICAgIHJldHVybiBkZXN0OworfQordm9pZCBDRlhfQnl0ZVN0cmluZzo6QWxsb2NDb3B5KENGWF9CeXRlU3RyaW5nJiBkZXN0LCBGWF9TVFJTSVpFIG5Db3B5TGVuLCBGWF9TVFJTSVpFIG5Db3B5SW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfU1RSU0laRSBuRXh0cmFMZW4pIGNvbnN0Cit7CisgICAgRlhfU1RSU0laRSBuTmV3TGVuID0gbkNvcHlMZW4gKyBuRXh0cmFMZW47CisgICAgaWYgKG5OZXdMZW4gPT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChkZXN0Lm1fcERhdGEgPT0gTlVMTCk7CisgICAgZGVzdC5tX3BEYXRhID0gRlhfQWxsb2NTdHJpbmcobk5ld0xlbik7CisgICAgaWYgKGRlc3QubV9wRGF0YSkgeworICAgICAgICBGWFNZU19tZW1jcHkzMihkZXN0Lm1fcERhdGEtPm1fU3RyaW5nLCBtX3BEYXRhLT5tX1N0cmluZyArIG5Db3B5SW5kZXgsIG5Db3B5TGVuICogc2l6ZW9mKGNoYXIpKTsKKyAgICB9Cit9CisjZGVmaW5lIEZPUkNFX0FOU0kgICAgICAweDEwMDAwCisjZGVmaW5lIEZPUkNFX1VOSUNPREUgICAweDIwMDAwCisjZGVmaW5lIEZPUkNFX0lOVDY0ICAgICAweDQwMDAwCit2b2lkIENGWF9CeXRlU3RyaW5nOjpGb3JtYXRWKEZYX0xQQ1NUUiBscHN6Rm9ybWF0LCB2YV9saXN0IGFyZ0xpc3QpCit7CisgICAgdmFfbGlzdCBhcmdMaXN0U2F2ZTsKKyNpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgfHwgKCFkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX0ZYX0NQVV8gPT0gX0ZYX1g2NF8gfHwgX0ZYX0NQVV8gPT0gX0ZYX0lBNjRfIHx8IF9GWF9DUFVfID09IF9GWF9BUk02NF8pKSB8fCBkZWZpbmVkKF9fbmF0aXZlX2NsaWVudF9fKQorICAgIHZhX2NvcHkoYXJnTGlzdFNhdmUsIGFyZ0xpc3QpOworI2Vsc2UKKyAgICBhcmdMaXN0U2F2ZSA9IGFyZ0xpc3Q7CisjZW5kaWYKKyAgICBpbnQgbk1heExlbiA9IDA7CisgICAgZm9yIChGWF9MUENTVFIgbHBzeiA9IGxwc3pGb3JtYXQ7ICpscHN6ICE9IDA7IGxwc3ogKyspIHsKKyAgICAgICAgaWYgKCpscHN6ICE9ICclJyB8fCAqKGxwc3ogPSBscHN6ICsgMSkgPT0gJyUnKSB7CisgICAgICAgICAgICBuTWF4TGVuICs9IChGWF9TVFJTSVpFKUZYU1lTX3N0cmxlbihscHN6KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGludCBuSXRlbUxlbiA9IDA7CisgICAgICAgIGludCBuV2lkdGggPSAwOworICAgICAgICBmb3IgKDsgKmxwc3ogIT0gMDsgbHBzeiArKykgeworICAgICAgICAgICAgaWYgKCpscHN6ID09ICcjJykgeworICAgICAgICAgICAgICAgIG5NYXhMZW4gKz0gMjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKmxwc3ogPT0gJyonKSB7CisgICAgICAgICAgICAgICAgbldpZHRoID0gdmFfYXJnKGFyZ0xpc3QsIGludCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpscHN6ID09ICctJyB8fCAqbHBzeiA9PSAnKycgfHwgKmxwc3ogPT0gJzAnIHx8CisgICAgICAgICAgICAgICAgICAgICAgICpscHN6ID09ICcgJykKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobldpZHRoID09IDApIHsKKyAgICAgICAgICAgIG5XaWR0aCA9IEZYU1lTX2F0b2kobHBzeik7CisgICAgICAgICAgICBmb3IgKDsgKCpscHN6KSA+PSAnMCcgJiYgKCpscHN6KSA8PSAnOSc7IGxwc3ogKyspCisgICAgICAgICAgICAgICAgOworICAgICAgICB9CisgICAgICAgIGlmIChuV2lkdGggPCAwIHx8IG5XaWR0aCA+IDEyOCAqIDEwMjQpIHsKKyAgICAgICAgICAgIGxwc3pGb3JtYXQgPSAiQmFkIHdpZHRoIjsKKyAgICAgICAgICAgIG5NYXhMZW4gPSAxMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGludCBuUHJlY2lzaW9uID0gMDsKKyAgICAgICAgaWYgKCpscHN6ID09ICcuJykgeworICAgICAgICAgICAgbHBzeiArKzsKKyAgICAgICAgICAgIGlmICgqbHBzeiA9PSAnKicpIHsKKyAgICAgICAgICAgICAgICBuUHJlY2lzaW9uID0gdmFfYXJnKGFyZ0xpc3QsIGludCk7CisgICAgICAgICAgICAgICAgbHBzeiArKzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgblByZWNpc2lvbiA9IEZYU1lTX2F0b2kobHBzeik7CisgICAgICAgICAgICAgICAgZm9yICg7ICgqbHBzeikgPj0gJzAnICYmICgqbHBzeikgPD0gJzknOyBscHN6ICsrKQorICAgICAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5QcmVjaXNpb24gPCAwIHx8IG5QcmVjaXNpb24gPiAxMjggKiAxMDI0KSB7CisgICAgICAgICAgICBscHN6Rm9ybWF0ID0gIkJhZCBwcmVjaXNpb24iOworICAgICAgICAgICAgbk1heExlbiA9IDE0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaW50IG5Nb2RpZmllciA9IDA7CisgICAgICAgIGlmIChGWFNZU19zdHJuY21wKGxwc3osICJJNjQiLCAzKSA9PSAwKSB7CisgICAgICAgICAgICBscHN6ICs9IDM7CisgICAgICAgICAgICBuTW9kaWZpZXIgPSBGT1JDRV9JTlQ2NDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN3aXRjaCAoKmxwc3opIHsKKyAgICAgICAgICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgICAgICAgICAgbk1vZGlmaWVyID0gRk9SQ0VfQU5TSTsKKyAgICAgICAgICAgICAgICAgICAgbHBzeiArKzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnbCc6CisgICAgICAgICAgICAgICAgICAgIG5Nb2RpZmllciA9IEZPUkNFX1VOSUNPREU7CisgICAgICAgICAgICAgICAgICAgIGxwc3ogKys7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ0YnOgorICAgICAgICAgICAgICAgIGNhc2UgJ04nOgorICAgICAgICAgICAgICAgIGNhc2UgJ0wnOgorICAgICAgICAgICAgICAgICAgICBscHN6ICsrOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKCpscHN6IHwgbk1vZGlmaWVyKSB7CisgICAgICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgIGNhc2UgJ0MnOgorICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gMjsKKyAgICAgICAgICAgICAgICB2YV9hcmcoYXJnTGlzdCwgaW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2MnfEZPUkNFX0FOU0k6CisgICAgICAgICAgICBjYXNlICdDJ3xGT1JDRV9BTlNJOgorICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gMjsKKyAgICAgICAgICAgICAgICB2YV9hcmcoYXJnTGlzdCwgaW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2MnfEZPUkNFX1VOSUNPREU6CisgICAgICAgICAgICBjYXNlICdDJ3xGT1JDRV9VTklDT0RFOgorICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gMjsKKyAgICAgICAgICAgICAgICB2YV9hcmcoYXJnTGlzdCwgaW50KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3MnOiB7CisgICAgICAgICAgICAgICAgICAgIEZYX0xQQ1NUUiBwc3RyTmV4dEFyZyA9IHZhX2FyZyhhcmdMaXN0LCBGWF9MUENTVFIpOworICAgICAgICAgICAgICAgICAgICBpZiAocHN0ck5leHRBcmcgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSA2OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSAoRlhfU1RSU0laRSlGWFNZU19zdHJsZW4ocHN0ck5leHRBcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5JdGVtTGVuIDwgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1MnOiB7CisgICAgICAgICAgICAgICAgICAgIEZYX0xQV1NUUiBwc3RyTmV4dEFyZyA9IHZhX2FyZyhhcmdMaXN0LCBGWF9MUFdTVFIpOworICAgICAgICAgICAgICAgICAgICBpZiAocHN0ck5leHRBcmcgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSA2OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSAoRlhfU1RSU0laRSlGWFNZU193Y3NsZW4ocHN0ck5leHRBcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5JdGVtTGVuIDwgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3MnfEZPUkNFX0FOU0k6CisgICAgICAgICAgICBjYXNlICdTJ3xGT1JDRV9BTlNJOiB7CisgICAgICAgICAgICAgICAgICAgIEZYX0xQQ1NUUiBwc3RyTmV4dEFyZyA9IHZhX2FyZyhhcmdMaXN0LCBGWF9MUENTVFIpOworICAgICAgICAgICAgICAgICAgICBpZiAocHN0ck5leHRBcmcgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSA2OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSAoRlhfU1RSU0laRSlGWFNZU19zdHJsZW4ocHN0ck5leHRBcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5JdGVtTGVuIDwgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3MnfEZPUkNFX1VOSUNPREU6CisgICAgICAgICAgICBjYXNlICdTJ3xGT1JDRV9VTklDT0RFOiB7CisgICAgICAgICAgICAgICAgICAgIEZYX0xQV1NUUiBwc3RyTmV4dEFyZyA9IHZhX2FyZyhhcmdMaXN0LCBGWF9MUFdTVFIpOworICAgICAgICAgICAgICAgICAgICBpZiAocHN0ck5leHRBcmcgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSA2OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSAoRlhfU1RSU0laRSlGWFNZU193Y3NsZW4ocHN0ck5leHRBcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5JdGVtTGVuIDwgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAobkl0ZW1MZW4gIT0gMCkgeworICAgICAgICAgICAgaWYgKG5QcmVjaXNpb24gIT0gMCAmJiBuSXRlbUxlbiA+IG5QcmVjaXNpb24pIHsKKyAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IG5QcmVjaXNpb247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobkl0ZW1MZW4gPCBuV2lkdGgpIHsKKyAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IG5XaWR0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN3aXRjaCAoKmxwc3opIHsKKyAgICAgICAgICAgICAgICBjYXNlICdkJzoKKyAgICAgICAgICAgICAgICBjYXNlICdpJzoKKyAgICAgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgICAgICAgICBjYXNlICdYJzoKKyAgICAgICAgICAgICAgICBjYXNlICdvJzoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5Nb2RpZmllciAmIEZPUkNFX0lOVDY0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoYXJnTGlzdCwgRlhfSU5UNjQpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGFyZ0xpc3QsIGludCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSAzMjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5JdGVtTGVuIDwgbldpZHRoICsgblByZWNpc2lvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSBuV2lkdGggKyBuUHJlY2lzaW9uOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ2EnOgorICAgICAgICAgICAgICAgIGNhc2UgJ0EnOgorICAgICAgICAgICAgICAgIGNhc2UgJ2UnOgorICAgICAgICAgICAgICAgIGNhc2UgJ0UnOgorICAgICAgICAgICAgICAgIGNhc2UgJ2cnOgorICAgICAgICAgICAgICAgIGNhc2UgJ0cnOgorICAgICAgICAgICAgICAgICAgICB2YV9hcmcoYXJnTGlzdCwgZG91YmxlKTsKKyAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSAxMjg7CisgICAgICAgICAgICAgICAgICAgIGlmIChuSXRlbUxlbiA8IG5XaWR0aCArIG5QcmVjaXNpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gbldpZHRoICsgblByZWNpc2lvbjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5XaWR0aCArIG5QcmVjaXNpb24gPiAxMDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gblByZWNpc2lvbiArIG5XaWR0aCArIDEyODsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBmOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBwc3pUZW1wWzI1Nl07CisgICAgICAgICAgICAgICAgICAgICAgICBmID0gdmFfYXJnKGFyZ0xpc3QsIGRvdWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBGWFNZU19zcHJpbnRmKHBzelRlbXAsICIlKi4qZiIsIG5XaWR0aCwgblByZWNpc2lvbiArIDYsIGYgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gKEZYX1NUUlNJWkUpRlhTWVNfc3RybGVuKHBzelRlbXApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ3AnOgorICAgICAgICAgICAgICAgICAgICB2YV9hcmcoYXJnTGlzdCwgdm9pZCopOworICAgICAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IDMyOworICAgICAgICAgICAgICAgICAgICBpZiAobkl0ZW1MZW4gPCBuV2lkdGggKyBuUHJlY2lzaW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IG5XaWR0aCArIG5QcmVjaXNpb247CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnbic6CisgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhhcmdMaXN0LCBpbnQqKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbk1heExlbiArPSBuSXRlbUxlbjsKKyAgICB9CisgICAgR2V0QnVmZmVyKG5NYXhMZW4pOworICAgIGlmIChtX3BEYXRhKSB7CisgICAgICAgIEZYU1lTX3ZzcHJpbnRmKG1fcERhdGEtPm1fU3RyaW5nLCBscHN6Rm9ybWF0LCBhcmdMaXN0U2F2ZSk7CisgICAgICAgIFJlbGVhc2VCdWZmZXIoKTsKKyAgICB9CisgICAgdmFfZW5kKGFyZ0xpc3RTYXZlKTsKK30KK3ZvaWQgQ0ZYX0J5dGVTdHJpbmc6OkZvcm1hdChGWF9MUENTVFIgbHBzekZvcm1hdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnTGlzdDsKKyAgICB2YV9zdGFydChhcmdMaXN0LCBscHN6Rm9ybWF0KTsKKyAgICBGb3JtYXRWKGxwc3pGb3JtYXQsIGFyZ0xpc3QpOworICAgIHZhX2VuZChhcmdMaXN0KTsKK30KK0ZYX1NUUlNJWkUgQ0ZYX0J5dGVTdHJpbmc6Okluc2VydChGWF9TVFJTSVpFIG5JbmRleCwgRlhfQ0hBUiBjaCkKK3sKKyAgICBDb3B5QmVmb3JlV3JpdGUoKTsKKyAgICBpZiAobkluZGV4IDwgMCkgeworICAgICAgICBuSW5kZXggPSAwOworICAgIH0KKyAgICBGWF9TVFJTSVpFIG5OZXdMZW5ndGggPSBtX3BEYXRhID8gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCA6IDA7CisgICAgaWYgKG5JbmRleCA+IG5OZXdMZW5ndGgpIHsKKyAgICAgICAgbkluZGV4ID0gbk5ld0xlbmd0aDsKKyAgICB9CisgICAgbk5ld0xlbmd0aCsrOworICAgIGlmIChtX3BEYXRhID09IE5VTEwgfHwgbV9wRGF0YS0+bV9uQWxsb2NMZW5ndGggPCBuTmV3TGVuZ3RoKSB7CisgICAgICAgIENGWF9TdHJpbmdEYXRhKiBwT2xkRGF0YSA9IG1fcERhdGE7CisgICAgICAgIEZYX0xQQ1NUUiBwc3RyID0gbV9wRGF0YS0+bV9TdHJpbmc7CisgICAgICAgIG1fcERhdGEgPSBGWF9BbGxvY1N0cmluZyhuTmV3TGVuZ3RoKTsKKyAgICAgICAgaWYgKCFtX3BEYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZihwT2xkRGF0YSAhPSBOVUxMKSB7CisgICAgICAgICAgICBGWFNZU19tZW1tb3ZlMzIobV9wRGF0YS0+bV9TdHJpbmcsIHBzdHIsIChwT2xkRGF0YS0+bV9uRGF0YUxlbmd0aCArIDEpKnNpemVvZihjaGFyKSk7CisgICAgICAgICAgICBGWF9SZWxlYXNlU3RyaW5nKHBPbGREYXRhKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fcERhdGEtPm1fU3RyaW5nWzBdID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBGWFNZU19tZW1tb3ZlMzIobV9wRGF0YS0+bV9TdHJpbmcgKyBuSW5kZXggKyAxLAorICAgICAgICAgICAgICAgICAgICBtX3BEYXRhLT5tX1N0cmluZyArIG5JbmRleCwgKG5OZXdMZW5ndGggLSBuSW5kZXgpKnNpemVvZihjaGFyKSk7CisgICAgbV9wRGF0YS0+bV9TdHJpbmdbbkluZGV4XSA9IGNoOworICAgIG1fcERhdGEtPm1fbkRhdGFMZW5ndGggPSBuTmV3TGVuZ3RoOworICAgIHJldHVybiBuTmV3TGVuZ3RoOworfQorQ0ZYX0J5dGVTdHJpbmcgQ0ZYX0J5dGVTdHJpbmc6OlJpZ2h0KEZYX1NUUlNJWkUgbkNvdW50KSBjb25zdAoreworICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKCk7CisgICAgfQorICAgIGlmIChuQ291bnQgPCAwKSB7CisgICAgICAgIG5Db3VudCA9IDA7CisgICAgfQorICAgIGlmIChuQ291bnQgPj0gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCkgeworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIGRlc3Q7CisgICAgQWxsb2NDb3B5KGRlc3QsIG5Db3VudCwgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCAtIG5Db3VudCwgMCk7CisgICAgcmV0dXJuIGRlc3Q7Cit9CitDRlhfQnl0ZVN0cmluZyBDRlhfQnl0ZVN0cmluZzo6TGVmdChGWF9TVFJTSVpFIG5Db3VudCkgY29uc3QKK3sKKyAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZygpOworICAgIH0KKyAgICBpZiAobkNvdW50IDwgMCkgeworICAgICAgICBuQ291bnQgPSAwOworICAgIH0KKyAgICBpZiAobkNvdW50ID49IG1fcERhdGEtPm1fbkRhdGFMZW5ndGgpIHsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICBDRlhfQnl0ZVN0cmluZyBkZXN0OworICAgIEFsbG9jQ29weShkZXN0LCBuQ291bnQsIDAsIDApOworICAgIHJldHVybiBkZXN0OworfQorRlhfU1RSU0laRSBDRlhfQnl0ZVN0cmluZzo6RmluZChGWF9DSEFSIGNoLCBGWF9TVFJTSVpFIG5TdGFydCkgY29uc3QKK3sKKyAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgRlhfU1RSU0laRSBuTGVuZ3RoID0gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aDsKKyAgICBpZiAoblN0YXJ0ID49IG5MZW5ndGgpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBGWF9MUENTVFIgbHBzeiA9IEZYU1lTX3N0cmNocihtX3BEYXRhLT5tX1N0cmluZyArIG5TdGFydCwgY2gpOworICAgIHJldHVybiAobHBzeiA9PSBOVUxMKSA/IC0xIDogKGludCkobHBzeiAtIG1fcERhdGEtPm1fU3RyaW5nKTsKK30KK0ZYX1NUUlNJWkUgQ0ZYX0J5dGVTdHJpbmc6OlJldmVyc2VGaW5kKEZYX0NIQVIgY2gpIGNvbnN0Cit7CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIEZYX1NUUlNJWkUgbkxlbmd0aCA9IG1fcERhdGEtPm1fbkRhdGFMZW5ndGg7CisgICAgd2hpbGUgKG5MZW5ndGgpIHsKKyAgICAgICAgaWYgKG1fcERhdGEtPm1fU3RyaW5nW25MZW5ndGggLSAxXSA9PSBjaCkgeworICAgICAgICAgICAgcmV0dXJuIG5MZW5ndGggLSAxOworICAgICAgICB9CisgICAgICAgIG5MZW5ndGggLS07CisgICAgfQorICAgIHJldHVybiAtMTsKK30KK0ZYX0xQQ1NUUiBGWF9zdHJzdHIoRlhfTFBDU1RSIHN0cjEsIGludCBsZW4xLCBGWF9MUENTVFIgc3RyMiwgaW50IGxlbjIpCit7CisgICAgaWYgKGxlbjIgPiBsZW4xIHx8IGxlbjIgPT0gMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRlhfTFBDU1RSIGVuZF9wdHIgPSBzdHIxICsgbGVuMSAtIGxlbjI7CisgICAgd2hpbGUgKHN0cjEgPD0gZW5kX3B0cikgeworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBpZiAoc3RyMVtpXSAhPSBzdHIyW2ldKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICsrOworICAgICAgICAgICAgaWYgKGkgPT0gbGVuMikgeworICAgICAgICAgICAgICAgIHJldHVybiBzdHIxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN0cjEgKys7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorRlhfU1RSU0laRSBDRlhfQnl0ZVN0cmluZzo6RmluZChGWF9CU1RSIGxwc3pTdWIsIEZYX1NUUlNJWkUgblN0YXJ0KSBjb25zdAoreworICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBGWF9TVFJTSVpFIG5MZW5ndGggPSBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoOworICAgIGlmIChuU3RhcnQgPiBuTGVuZ3RoKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgRlhfTFBDU1RSIGxwc3ogPSBGWF9zdHJzdHIobV9wRGF0YS0+bV9TdHJpbmcgKyBuU3RhcnQsIG1fcERhdGEtPm1fbkRhdGFMZW5ndGggLSBuU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHBzelN1Yi5HZXRDU3RyKCksIGxwc3pTdWIuR2V0TGVuZ3RoKCkpOworICAgIHJldHVybiAobHBzeiA9PSBOVUxMKSA/IC0xIDogKGludCkobHBzeiAtIG1fcERhdGEtPm1fU3RyaW5nKTsKK30KK3ZvaWQgQ0ZYX0J5dGVTdHJpbmc6Ok1ha2VMb3dlcigpCit7CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENvcHlCZWZvcmVXcml0ZSgpOworICAgIGlmIChHZXRMZW5ndGgoKSA8IDEpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGWFNZU19zdHJsd3IobV9wRGF0YS0+bV9TdHJpbmcpOworfQordm9pZCBDRlhfQnl0ZVN0cmluZzo6TWFrZVVwcGVyKCkKK3sKKyAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ29weUJlZm9yZVdyaXRlKCk7CisgICAgaWYgKEdldExlbmd0aCgpIDwgMSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYU1lTX3N0cnVwcihtX3BEYXRhLT5tX1N0cmluZyk7Cit9CitGWF9TVFJTSVpFIENGWF9CeXRlU3RyaW5nOjpSZW1vdmUoRlhfQ0hBUiBjaFJlbW92ZSkKK3sKKyAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBDb3B5QmVmb3JlV3JpdGUoKTsKKyAgICBpZiAoR2V0TGVuZ3RoKCkgPCAxKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBGWF9MUFNUUiBwc3RyU291cmNlID0gbV9wRGF0YS0+bV9TdHJpbmc7CisgICAgRlhfTFBTVFIgcHN0ckRlc3QgPSBtX3BEYXRhLT5tX1N0cmluZzsKKyAgICBGWF9MUFNUUiBwc3RyRW5kID0gbV9wRGF0YS0+bV9TdHJpbmcgKyBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoOworICAgIHdoaWxlIChwc3RyU291cmNlIDwgcHN0ckVuZCkgeworICAgICAgICBpZiAoKnBzdHJTb3VyY2UgIT0gY2hSZW1vdmUpIHsKKyAgICAgICAgICAgICpwc3RyRGVzdCA9ICpwc3RyU291cmNlOworICAgICAgICAgICAgcHN0ckRlc3QgKys7CisgICAgICAgIH0KKyAgICAgICAgcHN0clNvdXJjZSArKzsKKyAgICB9CisgICAgKnBzdHJEZXN0ID0gMDsKKyAgICBGWF9TVFJTSVpFIG5Db3VudCA9IChGWF9TVFJTSVpFKShwc3RyU291cmNlIC0gcHN0ckRlc3QpOworICAgIG1fcERhdGEtPm1fbkRhdGFMZW5ndGggLT0gbkNvdW50OworICAgIHJldHVybiBuQ291bnQ7Cit9CitGWF9TVFJTSVpFIENGWF9CeXRlU3RyaW5nOjpSZXBsYWNlKEZYX0JTVFIgbHBzek9sZCwgRlhfQlNUUiBscHN6TmV3KQoreworICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChscHN6T2xkLklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgRlhfU1RSU0laRSBuU291cmNlTGVuID0gbHBzek9sZC5HZXRMZW5ndGgoKTsKKyAgICBGWF9TVFJTSVpFIG5SZXBsYWNlbWVudExlbiA9IGxwc3pOZXcuR2V0TGVuZ3RoKCk7CisgICAgRlhfU1RSU0laRSBuQ291bnQgPSAwOworICAgIEZYX0xQQ1NUUiBwU3RhcnQgPSBtX3BEYXRhLT5tX1N0cmluZzsKKyAgICBGWF9MUFNUUiBwRW5kID0gbV9wRGF0YS0+bV9TdHJpbmcgKyBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIEZYX0xQQ1NUUiBwVGFyZ2V0ID0gRlhfc3Ryc3RyKHBTdGFydCwgKEZYX1NUUlNJWkUpKHBFbmQgLSBwU3RhcnQpLCBscHN6T2xkLkdldENTdHIoKSwgblNvdXJjZUxlbik7CisgICAgICAgIGlmIChwVGFyZ2V0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG5Db3VudCsrOworICAgICAgICBwU3RhcnQgPSBwVGFyZ2V0ICsgblNvdXJjZUxlbjsKKyAgICB9CisgICAgaWYgKG5Db3VudCA9PSAwKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBGWF9TVFJTSVpFIG5OZXdMZW5ndGggPSAgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCArIChuUmVwbGFjZW1lbnRMZW4gLSBuU291cmNlTGVuKSAqIG5Db3VudDsKKyAgICBpZiAobk5ld0xlbmd0aCA9PSAwKSB7CisgICAgICAgIEVtcHR5KCk7CisgICAgICAgIHJldHVybiBuQ291bnQ7CisgICAgfQorICAgIENGWF9TdHJpbmdEYXRhKiBwTmV3RGF0YSA9IEZYX0FsbG9jU3RyaW5nKG5OZXdMZW5ndGgpOworICAgIGlmICghcE5ld0RhdGEpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHBTdGFydCA9IG1fcERhdGEtPm1fU3RyaW5nOworICAgIEZYX0xQU1RSIHBEZXN0ID0gcE5ld0RhdGEtPm1fU3RyaW5nOworICAgIGZvciAoRlhfU1RSU0laRSBpID0gMDsgaSA8IG5Db3VudDsgaSArKykgeworICAgICAgICBGWF9MUENTVFIgcFRhcmdldCA9IEZYX3N0cnN0cihwU3RhcnQsIChGWF9TVFJTSVpFKShwRW5kIC0gcFN0YXJ0KSwgbHBzek9sZC5HZXRDU3RyKCksIG5Tb3VyY2VMZW4pOworICAgICAgICBGWFNZU19tZW1jcHkzMihwRGVzdCwgcFN0YXJ0LCBwVGFyZ2V0IC0gcFN0YXJ0KTsKKyAgICAgICAgcERlc3QgKz0gcFRhcmdldCAtIHBTdGFydDsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIocERlc3QsIGxwc3pOZXcuR2V0Q1N0cigpLCBscHN6TmV3LkdldExlbmd0aCgpKTsKKyAgICAgICAgcERlc3QgKz0gbHBzek5ldy5HZXRMZW5ndGgoKTsKKyAgICAgICAgcFN0YXJ0ID0gcFRhcmdldCArIG5Tb3VyY2VMZW47CisgICAgfQorICAgIEZYU1lTX21lbWNweTMyKHBEZXN0LCBwU3RhcnQsIHBFbmQgLSBwU3RhcnQpOworICAgIEZYX1JlbGVhc2VTdHJpbmcobV9wRGF0YSk7CisgICAgbV9wRGF0YSA9IHBOZXdEYXRhOworICAgIHJldHVybiBuQ291bnQ7Cit9Cit2b2lkIENGWF9CeXRlU3RyaW5nOjpTZXRBdChGWF9TVFJTSVpFIG5JbmRleCwgRlhfQ0hBUiBjaCkKK3sKKyAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhTWVNfYXNzZXJ0KG5JbmRleCA+PSAwKTsKKyAgICBGWFNZU19hc3NlcnQobkluZGV4IDwgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCk7CisgICAgQ29weUJlZm9yZVdyaXRlKCk7CisgICAgbV9wRGF0YS0+bV9TdHJpbmdbbkluZGV4XSA9IGNoOworfQorQ0ZYX0J5dGVTdHJpbmcgQ0ZYX0J5dGVTdHJpbmc6OkxvYWRGcm9tRmlsZShGWF9CU1RSIGZpbGVuYW1lKQoreworICAgIEZYU1lTX0ZJTEUqIGZpbGUgPSBGWFNZU19mb3BlbihDRlhfQnl0ZVN0cmluZyhmaWxlbmFtZSksICJyYiIpOworICAgIGlmIChmaWxlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKCk7CisgICAgfQorICAgIEZYU1lTX2ZzZWVrKGZpbGUsIDAsIEZYU1lTX1NFRUtfRU5EKTsKKyAgICBpbnQgbGVuID0gRlhTWVNfZnRlbGwoZmlsZSk7CisgICAgRlhTWVNfZnNlZWsoZmlsZSwgMCwgRlhTWVNfU0VFS19TRVQpOworICAgIENGWF9CeXRlU3RyaW5nIHN0cjsKKyAgICBGWF9MUFNUUiBidWYgPSBzdHIuR2V0QnVmZmVyKGxlbik7CisgICAgc2l6ZV90IHJlYWRDbnQgPSBGWFNZU19mcmVhZChidWYsIDEsIGxlbiwgZmlsZSk7CisgICAgc3RyLlJlbGVhc2VCdWZmZXIobGVuKTsKKyAgICBGWFNZU19mY2xvc2UoZmlsZSk7CisgICAgcmV0dXJuIHN0cjsKK30KK0NGWF9XaWRlU3RyaW5nIENGWF9CeXRlU3RyaW5nOjpVVEY4RGVjb2RlKCkgY29uc3QKK3sKKyAgICBDRlhfVVRGOERlY29kZXIgZGVjb2RlcjsKKyAgICBmb3IgKEZYX1NUUlNJWkUgaSA9IDA7IGkgPCBHZXRMZW5ndGgoKTsgaSArKykgeworICAgICAgICBkZWNvZGVyLklucHV0KChGWF9CWVRFKW1fcERhdGEtPm1fU3RyaW5nW2ldKTsKKyAgICB9CisgICAgcmV0dXJuIGRlY29kZXIuR2V0UmVzdWx0KCk7Cit9CitDRlhfQnl0ZVN0cmluZyBDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUoRlhfTFBDV1NUUiBzdHIsIEZYX1NUUlNJWkUgbGVuKQoreworICAgIGlmIChsZW4gPCAwKSB7CisgICAgICAgIGxlbiA9IChGWF9TVFJTSVpFKUZYU1lTX3djc2xlbihzdHIpOworICAgIH0KKyAgICBDRlhfQnl0ZVN0cmluZyBic3RyOworICAgIGJzdHIuQ29udmVydEZyb20oQ0ZYX1dpZGVTdHJpbmcoc3RyLCBsZW4pKTsKKyAgICByZXR1cm4gYnN0cjsKK30KK0NGWF9CeXRlU3RyaW5nIENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyKQoreworICAgIHJldHVybiBGcm9tVW5pY29kZSgoRlhfTFBDV1NUUilzdHIsIHN0ci5HZXRMZW5ndGgoKSk7Cit9Cit2b2lkIENGWF9CeXRlU3RyaW5nOjpDb252ZXJ0RnJvbShjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyLCBDRlhfQ2hhck1hcCogcENoYXJNYXApCit7CisgICAgaWYgKHBDaGFyTWFwID09IE5VTEwpIHsKKyAgICAgICAgcENoYXJNYXAgPSBDRlhfQ2hhck1hcDo6R2V0RGVmYXVsdE1hcHBlcigpOworICAgIH0KKyAgICAqdGhpcyA9ICgqcENoYXJNYXAtPm1fR2V0Qnl0ZVN0cmluZykocENoYXJNYXAsIHN0cik7Cit9CitpbnQgQ0ZYX0J5dGVTdHJpbmc6OkNvbXBhcmUoRlhfQlNUUiBzdHIpIGNvbnN0Cit7CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gc3RyLklzRW1wdHkoKSA/IDAgOiAtMTsKKyAgICB9CisgICAgaW50IHRoaXNfbGVuID0gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aDsKKyAgICBpbnQgdGhhdF9sZW4gPSBzdHIuR2V0TGVuZ3RoKCk7CisgICAgaW50IG1pbl9sZW4gPSB0aGlzX2xlbiA8IHRoYXRfbGVuID8gdGhpc19sZW4gOiB0aGF0X2xlbjsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1pbl9sZW47IGkgKyspIHsKKyAgICAgICAgaWYgKChGWF9CWVRFKW1fcERhdGEtPm1fU3RyaW5nW2ldIDwgc3RyLkdldEF0KGkpKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0gZWxzZSBpZiAoKEZYX0JZVEUpbV9wRGF0YS0+bV9TdHJpbmdbaV0gPiBzdHIuR2V0QXQoaSkpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfQorICAgIGlmICh0aGlzX2xlbiA8IHRoYXRfbGVuKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgaWYgKHRoaXNfbGVuID4gdGhhdF9sZW4pIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAwOworfQordm9pZCBDRlhfQnl0ZVN0cmluZzo6VHJpbVJpZ2h0KEZYX0JTVFIgbHBzelRhcmdldHMpCit7CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCB8fCBscHN6VGFyZ2V0cy5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDb3B5QmVmb3JlV3JpdGUoKTsKKyAgICBGWF9TVFJTSVpFIHBvcyA9IEdldExlbmd0aCgpOworICAgIGlmIChwb3MgPCAxKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgd2hpbGUgKHBvcykgeworICAgICAgICBGWF9TVFJTSVpFIGkgPSAwOworICAgICAgICB3aGlsZSAoaSA8IGxwc3pUYXJnZXRzLkdldExlbmd0aCgpICYmIGxwc3pUYXJnZXRzW2ldICE9IG1fcERhdGEtPm1fU3RyaW5nW3BvcyAtIDFdKSB7CisgICAgICAgICAgICBpICsrOworICAgICAgICB9CisgICAgICAgIGlmIChpID09IGxwc3pUYXJnZXRzLkdldExlbmd0aCgpKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBwb3MgLS07CisgICAgfQorICAgIGlmIChwb3MgPCBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoKSB7CisgICAgICAgIG1fcERhdGEtPm1fU3RyaW5nW3Bvc10gPSAwOworICAgICAgICBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoID0gcG9zOworICAgIH0KK30KK3ZvaWQgQ0ZYX0J5dGVTdHJpbmc6OlRyaW1SaWdodChGWF9DSEFSIGNoVGFyZ2V0KQoreworICAgIFRyaW1SaWdodChDRlhfQnl0ZVN0cmluZ0MoY2hUYXJnZXQpKTsKK30KK3ZvaWQgQ0ZYX0J5dGVTdHJpbmc6OlRyaW1SaWdodCgpCit7CisgICAgVHJpbVJpZ2h0KEZYX0JTVFJDKCJceDA5XHgwYVx4MGJceDBjXHgwZFx4MjAiKSk7Cit9Cit2b2lkIENGWF9CeXRlU3RyaW5nOjpUcmltTGVmdChGWF9CU1RSIGxwc3pUYXJnZXRzKQoreworICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobHBzelRhcmdldHMuSXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ29weUJlZm9yZVdyaXRlKCk7CisgICAgRlhfU1RSU0laRSBsZW4gPSBHZXRMZW5ndGgoKTsKKyAgICBpZiAobGVuIDwgMSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX1NUUlNJWkUgcG9zID0gMDsKKyAgICB3aGlsZSAocG9zIDwgbGVuKSB7CisgICAgICAgIEZYX1NUUlNJWkUgaSA9IDA7CisgICAgICAgIHdoaWxlIChpIDwgbHBzelRhcmdldHMuR2V0TGVuZ3RoKCkgJiYgbHBzelRhcmdldHNbaV0gIT0gbV9wRGF0YS0+bV9TdHJpbmdbcG9zXSkgeworICAgICAgICAgICAgaSArKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoaSA9PSBscHN6VGFyZ2V0cy5HZXRMZW5ndGgoKSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcG9zICsrOworICAgIH0KKyAgICBpZiAocG9zKSB7CisgICAgICAgIEZYX1NUUlNJWkUgbkRhdGFMZW5ndGggPSBsZW4gLSBwb3M7CisgICAgICAgIEZYU1lTX21lbW1vdmUzMihtX3BEYXRhLT5tX1N0cmluZywgbV9wRGF0YS0+bV9TdHJpbmcgKyBwb3MsIChuRGF0YUxlbmd0aCArIDEpKnNpemVvZihGWF9DSEFSKSk7CisgICAgICAgIG1fcERhdGEtPm1fbkRhdGFMZW5ndGggPSBuRGF0YUxlbmd0aDsKKyAgICB9Cit9Cit2b2lkIENGWF9CeXRlU3RyaW5nOjpUcmltTGVmdChGWF9DSEFSIGNoVGFyZ2V0KQoreworICAgIFRyaW1MZWZ0KENGWF9CeXRlU3RyaW5nQyhjaFRhcmdldCkpOworfQordm9pZCBDRlhfQnl0ZVN0cmluZzo6VHJpbUxlZnQoKQoreworICAgIFRyaW1MZWZ0KEZYX0JTVFJDKCJceDA5XHgwYVx4MGJceDBjXHgwZFx4MjAiKSk7Cit9CitGWF9EV09SRCBDRlhfQnl0ZVN0cmluZzo6R2V0SUQoRlhfU1RSU0laRSBzdGFydF9wb3MpIGNvbnN0Cit7CisgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nQygqdGhpcykuR2V0SUQoc3RhcnRfcG9zKTsKK30KK0ZYX0RXT1JEIENGWF9CeXRlU3RyaW5nQzo6R2V0SUQoRlhfU1RSU0laRSBzdGFydF9wb3MpIGNvbnN0Cit7CisgICAgaWYgKG1fTGVuZ3RoID09IDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChzdGFydF9wb3MgPj0gbV9MZW5ndGgpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEZYX0RXT1JEIHN0cmlkID0gMDsKKyAgICBpZiAoc3RhcnRfcG9zICsgNCA+IG1fTGVuZ3RoKSB7CisgICAgICAgIGZvciAoRlhfU1RSU0laRSBpID0gMDsgaSA8IG1fTGVuZ3RoIC0gc3RhcnRfcG9zOyBpICsrKSB7CisgICAgICAgICAgICBzdHJpZCA9IHN0cmlkICogMjU2ICsgbV9QdHJbc3RhcnRfcG9zICsgaV07CisgICAgICAgIH0KKyAgICAgICAgc3RyaWQgPSBzdHJpZCA8PCAoKDQgLSBtX0xlbmd0aCArIHN0YXJ0X3BvcykgKiA4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkgKyspIHsKKyAgICAgICAgICAgIHN0cmlkID0gc3RyaWQgKiAyNTYgKyBtX1B0cltzdGFydF9wb3MgKyBpXTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3RyaWQ7Cit9CitGWF9TVFJTSVpFIEZYX2Z0b2EoRlhfRkxPQVQgZCwgRlhfTFBTVFIgYnVmKQoreworICAgIGJ1ZlswXSA9ICcwJzsKKyAgICBidWZbMV0gPSAnXDAnOworICAgIGlmIChkID09IDAuMGYpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIEZYX0JPT0wgYk5lZ2F0aXZlID0gRkFMU0U7CisgICAgaWYgKGQgPCAwKSB7CisgICAgICAgIGJOZWdhdGl2ZSA9IFRSVUU7CisgICAgICAgIGQgPSAtZDsKKyAgICB9CisgICAgaW50IHNjYWxlID0gMTsKKyAgICBpbnQgc2NhbGVkID0gRlhTWVNfcm91bmQoZCk7CisgICAgd2hpbGUgKHNjYWxlZCA8IDEwMDAwMCkgeworICAgICAgICBpZiAoc2NhbGUgPT0gMTAwMDAwMCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2NhbGUgKj0gMTA7CisgICAgICAgIHNjYWxlZCA9IEZYU1lTX3JvdW5kKGQgKiBzY2FsZSk7CisgICAgfQorICAgIGlmIChzY2FsZWQgPT0gMCkgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgY2hhciBidWYyWzMyXTsKKyAgICBpbnQgYnVmX3NpemUgPSAwOworICAgIGlmIChiTmVnYXRpdmUpIHsKKyAgICAgICAgYnVmW2J1Zl9zaXplKytdID0gJy0nOworICAgIH0KKyAgICBpbnQgaSA9IHNjYWxlZCAvIHNjYWxlOworICAgIEZYU1lTX2l0b2EoaSwgYnVmMiwgMTApOworICAgIEZYX1NUUlNJWkUgbGVuID0gKEZYX1NUUlNJWkUpRlhTWVNfc3RybGVuKGJ1ZjIpOworICAgIEZYU1lTX21lbWNweTMyKGJ1ZiArIGJ1Zl9zaXplLCBidWYyLCBsZW4pOworICAgIGJ1Zl9zaXplICs9IGxlbjsKKyAgICBpbnQgZnJhY3Rpb24gPSBzY2FsZWQgJSBzY2FsZTsKKyAgICBpZiAoZnJhY3Rpb24gPT0gMCkgeworICAgICAgICByZXR1cm4gYnVmX3NpemU7CisgICAgfQorICAgIGJ1ZltidWZfc2l6ZSsrXSA9ICcuJzsKKyAgICBzY2FsZSAvPSAxMDsKKyAgICB3aGlsZSAoZnJhY3Rpb24pIHsKKyAgICAgICAgYnVmW2J1Zl9zaXplKytdID0gJzAnICsgZnJhY3Rpb24gLyBzY2FsZTsKKyAgICAgICAgZnJhY3Rpb24gJT0gc2NhbGU7CisgICAgICAgIHNjYWxlIC89IDEwOworICAgIH0KKyAgICByZXR1cm4gYnVmX3NpemU7Cit9CitDRlhfQnl0ZVN0cmluZyBDRlhfQnl0ZVN0cmluZzo6Rm9ybWF0RmxvYXQoRlhfRkxPQVQgZCwgaW50IHByZWNpc2lvbikKK3sKKyAgICBGWF9DSEFSIGJ1ZlszMl07CisgICAgRlhfU1RSU0laRSBsZW4gPSBGWF9mdG9hKGQsIGJ1Zik7CisgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKGJ1ZiwgbGVuKTsKK30KK3ZvaWQgQ0ZYX1N0cmluZ0J1ZkJhc2U6OkNvcHkoRlhfQlNUUiBzdHIpCit7CisgICAgbV9TaXplID0gc3RyLkdldExlbmd0aCgpOworICAgIGlmIChtX1NpemUgPiBtX0xpbWl0KSB7CisgICAgICAgIG1fU2l6ZSA9IG1fTGltaXQ7CisgICAgfQorICAgIEZYX0NIQVIqIHBCdWZmZXIgPSAoRlhfQ0hBUiopKHRoaXMgKyAxKTsKKyAgICBGWFNZU19tZW1jcHkzMihwQnVmZmVyLCBzdHIuR2V0UHRyKCksIG1fU2l6ZSk7Cit9Cit2b2lkIENGWF9TdHJpbmdCdWZCYXNlOjpBcHBlbmQoRlhfQlNUUiBzdHIpCit7CisgICAgaW50IGxlbiA9IHN0ci5HZXRMZW5ndGgoKTsKKyAgICBpZiAobGVuID4gbV9MaW1pdCAtIG1fU2l6ZSkgeworICAgICAgICBsZW4gPSBtX0xpbWl0IC0gbV9TaXplOworICAgIH0KKyAgICBGWF9DSEFSKiBwQnVmZmVyID0gKEZYX0NIQVIqKSh0aGlzICsgMSk7CisgICAgRlhTWVNfbWVtY3B5MzIocEJ1ZmZlciArIG1fU2l6ZSwgc3RyLkdldFB0cigpLCBsZW4pOworICAgIG1fU2l6ZSArPSBsZW47Cit9Cit2b2lkIENGWF9TdHJpbmdCdWZCYXNlOjpBcHBlbmQoaW50IGksIEZYX0RXT1JEIGZsYWdzKQoreworICAgIGNoYXIgYnVmWzMyXTsKKyAgICBpbnQgbGVuID0gX0J1ZmZlcl9pdG9hKGJ1ZiwgaSwgZmxhZ3MpOworICAgIEFwcGVuZChDRlhfQnl0ZVN0cmluZ0MoYnVmLCBsZW4pKTsKK30KK3ZvaWQgQ0ZYX0J5dGVTdHJpbmdMOjpFbXB0eShJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQoreworICAgIGlmIChtX1B0cikgeworICAgICAgICBGWF9BbGxvY2F0b3JfRnJlZShwQWxsb2NhdG9yLCAoRlhfTFBWT0lEKW1fUHRyKTsKKyAgICB9CisgICAgbV9QdHIgPSBOVUxMLCBtX0xlbmd0aCA9IDA7Cit9CitGWF9MUFNUUiBDRlhfQnl0ZVN0cmluZ0w6OkFsbG9jQnVmZmVyKEZYX1NUUlNJWkUgbGVuZ3RoLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQoreworICAgIEVtcHR5KHBBbGxvY2F0b3IpOworICAgIEZYX0xQU1RSIHN0ciA9IEZYX0FsbG9jYXRvcl9BbGxvYyhwQWxsb2NhdG9yLCBGWF9DSEFSLCBsZW5ndGggKyAxKTsKKyAgICBpZiAoIXN0cikgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgKihGWF9MUFNUUiopKCZtX1B0cikgPSBzdHI7CisgICAgbV9MZW5ndGggPSBsZW5ndGg7CisgICAgcmV0dXJuIHN0cjsKK30KK3ZvaWQgQ0ZYX0J5dGVTdHJpbmdMOjpTZXQoRlhfQlNUUiBzcmMsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpCit7CisgICAgRW1wdHkocEFsbG9jYXRvcik7CisgICAgaWYgKHNyYy5HZXRDU3RyKCkgIT0gTlVMTCAmJiBzcmMuR2V0TGVuZ3RoKCkgPiAwKSB7CisgICAgICAgIEZYX0xQU1RSIHN0ciA9IEZYX0FsbG9jYXRvcl9BbGxvYyhwQWxsb2NhdG9yLCBGWF9DSEFSLCBzcmMuR2V0TGVuZ3RoKCkgKyAxKTsKKyAgICAgICAgaWYgKCFzdHIpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBGWFNZU19tZW1jcHkzMihzdHIsIHNyYywgc3JjLkdldExlbmd0aCgpKTsKKyAgICAgICAgc3RyW3NyYy5HZXRMZW5ndGgoKV0gPSAnXDAnOworICAgICAgICAqKEZYX0xQU1RSKikoJm1fUHRyKSA9IHN0cjsKKyAgICAgICAgbV9MZW5ndGggPSBzcmMuR2V0TGVuZ3RoKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjcnQvZnhfYmFzaWNfYnVmZmVyLmNwcCBiL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX2J1ZmZlci5jcHAKaW5kZXggZWYzY2QyMS4uNDQyNzg1NyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjcnQvZnhfYmFzaWNfYnVmZmVyLmNwcAorKysgYi9jb3JlL3NyYy9meGNydC9meF9iYXNpY19idWZmZXIuY3BwCkBAIC0xLDU3NCArMSw1NzQgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2Jhc2ljLmgiDQotRlhfU1RSU0laRSBGWF9mdG9hKEZYX0ZMT0FUIGYsIEZYX0xQU1RSIGJ1Zik7DQotQ0ZYX0JpbmFyeUJ1Zjo6Q0ZYX0JpbmFyeUJ1ZihJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQ0KLSAgICA6IG1fcEFsbG9jYXRvcihwQWxsb2NhdG9yKQ0KLSAgICAsIG1fQWxsb2NTdGVwKDApDQotICAgICwgbV9wQnVmZmVyKE5VTEwpDQotICAgICwgbV9EYXRhU2l6ZSgwKQ0KLSAgICAsIG1fQWxsb2NTaXplKDApDQotew0KLX0NCi1DRlhfQmluYXJ5QnVmOjpDRlhfQmluYXJ5QnVmKEZYX1NUUlNJWkUgc2l6ZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikNCi0gICAgOiBtX3BBbGxvY2F0b3IocEFsbG9jYXRvcikNCi0gICAgLCBtX0FsbG9jU3RlcCgwKQ0KLSAgICAsIG1fRGF0YVNpemUoc2l6ZSkNCi0gICAgLCBtX0FsbG9jU2l6ZShzaXplKQ0KLXsNCi0gICAgbV9wQnVmZmVyID0gRlhfQWxsb2NhdG9yX0FsbG9jKG1fcEFsbG9jYXRvciwgRlhfQllURSwgc2l6ZSk7DQotfQ0KLUNGWF9CaW5hcnlCdWY6On5DRlhfQmluYXJ5QnVmKCkNCi17DQotICAgIGlmIChtX3BCdWZmZXIpIHsNCi0gICAgICAgIEZYX0FsbG9jYXRvcl9GcmVlKG1fcEFsbG9jYXRvciwgbV9wQnVmZmVyKTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9CaW5hcnlCdWY6OkRlbGV0ZShpbnQgc3RhcnRfaW5kZXgsIGludCBjb3VudCkNCi17DQotICAgIGlmICghbV9wQnVmZmVyIHx8IHN0YXJ0X2luZGV4IDwgMCB8fCBzdGFydF9pbmRleCArIGNvdW50ID4gbV9EYXRhU2l6ZSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYU1lTX21lbW1vdmUzMihtX3BCdWZmZXIgKyBzdGFydF9pbmRleCwgbV9wQnVmZmVyICsgc3RhcnRfaW5kZXggKyBjb3VudCwgbV9EYXRhU2l6ZSAtIHN0YXJ0X2luZGV4IC0gY291bnQpOw0KLSAgICBtX0RhdGFTaXplIC09IGNvdW50Ow0KLX0NCi12b2lkIENGWF9CaW5hcnlCdWY6OkNsZWFyKCkNCi17DQotICAgIG1fRGF0YVNpemUgPSAwOw0KLX0NCi12b2lkIENGWF9CaW5hcnlCdWY6OkRldGFjaEJ1ZmZlcigpDQotew0KLSAgICBtX0RhdGFTaXplID0gMDsNCi0gICAgbV9wQnVmZmVyID0gTlVMTDsNCi0gICAgbV9BbGxvY1NpemUgPSAwOw0KLX0NCi12b2lkIENGWF9CaW5hcnlCdWY6OkF0dGFjaERhdGEodm9pZCogYnVmZmVyLCBGWF9TVFJTSVpFIHNpemUpDQotew0KLSAgICBpZiAobV9wQnVmZmVyKSB7DQotICAgICAgICBGWF9BbGxvY2F0b3JfRnJlZShtX3BBbGxvY2F0b3IsIG1fcEJ1ZmZlcik7DQotICAgIH0NCi0gICAgbV9EYXRhU2l6ZSA9IHNpemU7DQotICAgIG1fcEJ1ZmZlciA9IChGWF9MUEJZVEUpYnVmZmVyOw0KLSAgICBtX0FsbG9jU2l6ZSA9IHNpemU7DQotfQ0KLXZvaWQgQ0ZYX0JpbmFyeUJ1Zjo6VGFrZU92ZXIoQ0ZYX0JpbmFyeUJ1ZiYgb3RoZXIpDQotew0KLSAgICBBdHRhY2hEYXRhKG90aGVyLkdldEJ1ZmZlcigpLCBvdGhlci5HZXRTaXplKCkpOw0KLSAgICBvdGhlci5EZXRhY2hCdWZmZXIoKTsNCi19DQotdm9pZCBDRlhfQmluYXJ5QnVmOjpFc3RpbWF0ZVNpemUoRlhfU1RSU0laRSBzaXplLCBGWF9TVFJTSVpFIHN0ZXApDQotew0KLSAgICBtX0FsbG9jU3RlcCA9IHN0ZXA7DQotICAgIGlmIChtX0FsbG9jU2l6ZSA+PSBzaXplKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRXhwYW5kQnVmKHNpemUgLSBtX0RhdGFTaXplKTsNCi19DQotdm9pZCBDRlhfQmluYXJ5QnVmOjpFeHBhbmRCdWYoRlhfU1RSU0laRSBhZGRfc2l6ZSkNCi17DQotICAgIEZYX1NUUlNJWkUgbmV3X3NpemUgPSBhZGRfc2l6ZSArIG1fRGF0YVNpemU7DQotICAgIGlmIChtX0FsbG9jU2l6ZSA+PSBuZXdfc2l6ZSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGludCBhbGxvY19zdGVwOw0KLSAgICBpZiAobV9BbGxvY1N0ZXAgPT0gMCkgew0KLSAgICAgICAgYWxsb2Nfc3RlcCA9IG1fQWxsb2NTaXplIC8gNDsNCi0gICAgICAgIGlmIChhbGxvY19zdGVwIDwgMTI4ICkgew0KLSAgICAgICAgICAgIGFsbG9jX3N0ZXAgPSAxMjg7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBhbGxvY19zdGVwID0gbV9BbGxvY1N0ZXA7DQotICAgIH0NCi0gICAgbmV3X3NpemUgPSAobmV3X3NpemUgKyBhbGxvY19zdGVwIC0gMSkgLyBhbGxvY19zdGVwICogYWxsb2Nfc3RlcDsNCi0gICAgRlhfTFBCWVRFIHBOZXdCdWZmZXIgPSBtX3BCdWZmZXI7DQotICAgIGlmIChwTmV3QnVmZmVyKSB7DQotICAgICAgICBwTmV3QnVmZmVyID0gRlhfQWxsb2NhdG9yX1JlYWxsb2MobV9wQWxsb2NhdG9yLCBGWF9CWVRFLCBtX3BCdWZmZXIsIG5ld19zaXplKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHBOZXdCdWZmZXIgPSBGWF9BbGxvY2F0b3JfQWxsb2MobV9wQWxsb2NhdG9yLCBGWF9CWVRFLCBuZXdfc2l6ZSk7DQotICAgIH0NCi0gICAgaWYgKHBOZXdCdWZmZXIpIHsNCi0gICAgICAgIG1fcEJ1ZmZlciA9IHBOZXdCdWZmZXI7DQotICAgICAgICBtX0FsbG9jU2l6ZSA9IG5ld19zaXplOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0ZYX0JpbmFyeUJ1Zjo6Q29weURhdGEoY29uc3Qgdm9pZCogcFN0ciwgRlhfU1RSU0laRSBzaXplKQ0KLXsNCi0gICAgaWYgKHNpemUgPT0gMCkgew0KLSAgICAgICAgbV9EYXRhU2l6ZSA9IDA7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKG1fQWxsb2NTaXplIDwgc2l6ZSkgew0KLSAgICAgICAgRXhwYW5kQnVmKHNpemUgLSBtX0RhdGFTaXplKTsNCi0gICAgfQ0KLSAgICBpZiAoIW1fcEJ1ZmZlcikgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYU1lTX21lbWNweTMyKG1fcEJ1ZmZlciwgcFN0ciwgc2l6ZSk7DQotICAgIG1fRGF0YVNpemUgPSBzaXplOw0KLX0NCi12b2lkIENGWF9CaW5hcnlCdWY6OkFwcGVuZEJsb2NrKGNvbnN0IHZvaWQqIHBCdWYsIEZYX1NUUlNJWkUgc2l6ZSkNCi17DQotICAgIEV4cGFuZEJ1ZihzaXplKTsNCi0gICAgaWYgKHBCdWYgJiYgbV9wQnVmZmVyKSB7DQotICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BCdWZmZXIgKyBtX0RhdGFTaXplLCBwQnVmLCBzaXplKTsNCi0gICAgfQ0KLSAgICBtX0RhdGFTaXplICs9IHNpemU7DQotfQ0KLXZvaWQgQ0ZYX0JpbmFyeUJ1Zjo6SW5zZXJ0QmxvY2soRlhfU1RSU0laRSBwb3MsIGNvbnN0IHZvaWQqIHBCdWYsIEZYX1NUUlNJWkUgc2l6ZSkNCi17DQotICAgIEV4cGFuZEJ1ZihzaXplKTsNCi0gICAgaWYgKCFtX3BCdWZmZXIpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWFNZU19tZW1tb3ZlMzIobV9wQnVmZmVyICsgcG9zICsgc2l6ZSwgbV9wQnVmZmVyICsgcG9zLCBtX0RhdGFTaXplIC0gcG9zKTsNCi0gICAgaWYgKHBCdWYpIHsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKG1fcEJ1ZmZlciArIHBvcywgcEJ1Ziwgc2l6ZSk7DQotICAgIH0NCi0gICAgbV9EYXRhU2l6ZSArPSBzaXplOw0KLX0NCi12b2lkIENGWF9CaW5hcnlCdWY6OkFwcGVuZEZpbGwoRlhfQllURSBieXRlLCBGWF9TVFJTSVpFIGNvdW50KQ0KLXsNCi0gICAgRXhwYW5kQnVmKGNvdW50KTsNCi0gICAgaWYgKCFtX3BCdWZmZXIpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWFNZU19tZW1zZXQ4KG1fcEJ1ZmZlciArIG1fRGF0YVNpemUsIGJ5dGUsIGNvdW50KTsNCi0gICAgbV9EYXRhU2l6ZSArPSBjb3VudDsNCi19DQotQ0ZYX0J5dGVTdHJpbmdDIENGWF9CaW5hcnlCdWY6OkdldEJ5dGVTdHJpbmcoKSBjb25zdA0KLXsNCi0gICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nQyhtX3BCdWZmZXIsIG1fRGF0YVNpemUpOw0KLX0NCi12b2lkIENGWF9CaW5hcnlCdWY6OkdldEJ5dGVTdHJpbmdMKENGWF9CeXRlU3RyaW5nTCAmc3RyKSBjb25zdA0KLXsNCi0gICAgc3RyLlNldChDRlhfQnl0ZVN0cmluZ0MobV9wQnVmZmVyLCBtX0RhdGFTaXplKSwgbV9wQWxsb2NhdG9yKTsNCi19DQotQ0ZYX0J5dGVUZXh0QnVmJiBDRlhfQnl0ZVRleHRCdWY6Om9wZXJhdG9yIDw8IChGWF9CU1RSIGxwc3opDQotew0KLSAgICBBcHBlbmRCbG9jaygoRlhfTFBDQllURSlscHN6LCBscHN6LkdldExlbmd0aCgpKTsNCi0gICAgcmV0dXJuICp0aGlzOw0KLX0NCi1DRlhfQnl0ZVRleHRCdWYmIENGWF9CeXRlVGV4dEJ1Zjo6b3BlcmF0b3IgPDwgKGludCBpKQ0KLXsNCi0gICAgY2hhciBidWZbMzJdOw0KLSAgICBGWFNZU19pdG9hKGksIGJ1ZiwgMTApOw0KLSAgICBBcHBlbmRCbG9jayhidWYsIChGWF9TVFJTSVpFKUZYU1lTX3N0cmxlbihidWYpKTsNCi0gICAgcmV0dXJuICp0aGlzOw0KLX0NCi1DRlhfQnl0ZVRleHRCdWYmIENGWF9CeXRlVGV4dEJ1Zjo6b3BlcmF0b3IgPDwgKEZYX0RXT1JEIGkpDQotew0KLSAgICBjaGFyIGJ1ZlszMl07DQotICAgIEZYU1lTX2l0b2EoaSwgYnVmLCAxMCk7DQotICAgIEFwcGVuZEJsb2NrKGJ1ZiwgKEZYX1NUUlNJWkUpRlhTWVNfc3RybGVuKGJ1ZikpOw0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLUNGWF9CeXRlVGV4dEJ1ZiYgQ0ZYX0J5dGVUZXh0QnVmOjpvcGVyYXRvciA8PCAoZG91YmxlIGYpDQotew0KLSAgICBjaGFyIGJ1ZlszMl07DQotICAgIEZYX1NUUlNJWkUgbGVuID0gRlhfZnRvYSgoRlhfRkxPQVQpZiwgYnVmKTsNCi0gICAgQXBwZW5kQmxvY2soYnVmLCBsZW4pOw0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLUNGWF9CeXRlVGV4dEJ1ZiYgQ0ZYX0J5dGVUZXh0QnVmOjpvcGVyYXRvciA8PCAoY29uc3QgQ0ZYX0J5dGVUZXh0QnVmJiBidWYpDQotew0KLSAgICBBcHBlbmRCbG9jayhidWYubV9wQnVmZmVyLCBidWYubV9EYXRhU2l6ZSk7DQotICAgIHJldHVybiAqdGhpczsNCi19DQotdm9pZCBDRlhfQnl0ZVRleHRCdWY6Om9wZXJhdG9yID0oY29uc3QgQ0ZYX0J5dGVTdHJpbmdDJiBzdHIpDQotew0KLSAgICBDb3B5RGF0YSgoRlhfTFBDQllURSlzdHIsIHN0ci5HZXRMZW5ndGgoKSk7DQotfQ0KLXZvaWQgQ0ZYX1dpZGVUZXh0QnVmOjpBcHBlbmRDaGFyKEZYX1dDSEFSIGNoKQ0KLXsNCi0gICAgaWYgKG1fQWxsb2NTaXplIDwgbV9EYXRhU2l6ZSArIChGWF9TVFJTSVpFKXNpemVvZihGWF9XQ0hBUikpIHsNCi0gICAgICAgIEV4cGFuZEJ1ZihzaXplb2YoRlhfV0NIQVIpKTsNCi0gICAgfQ0KLSAgICBBU1NFUlQobV9wQnVmZmVyICE9IE5VTEwpOw0KLSAgICAqKEZYX1dDSEFSKikobV9wQnVmZmVyICsgbV9EYXRhU2l6ZSkgPSBjaDsNCi0gICAgbV9EYXRhU2l6ZSArPSBzaXplb2YoRlhfV0NIQVIpOw0KLX0NCi1DRlhfV2lkZVRleHRCdWYmIENGWF9XaWRlVGV4dEJ1Zjo6b3BlcmF0b3IgPDwgKEZYX1dTVFIgc3RyKQ0KLXsNCi0gICAgQXBwZW5kQmxvY2soc3RyLkdldFB0cigpLCBzdHIuR2V0TGVuZ3RoKCkgKiBzaXplb2YoRlhfV0NIQVIpKTsNCi0gICAgcmV0dXJuICp0aGlzOw0KLX0NCi1DRlhfV2lkZVRleHRCdWYmIENGWF9XaWRlVGV4dEJ1Zjo6b3BlcmF0b3IgPDwgKGNvbnN0IENGWF9XaWRlU3RyaW5nICZzdHIpDQotew0KLSAgICBBcHBlbmRCbG9jaygoRlhfTFBDV1NUUilzdHIsIHN0ci5HZXRMZW5ndGgoKSAqIHNpemVvZihGWF9XQ0hBUikpOw0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLUNGWF9XaWRlVGV4dEJ1ZiYgQ0ZYX1dpZGVUZXh0QnVmOjpvcGVyYXRvciA8PCAoaW50IGkpDQotew0KLSAgICBjaGFyIGJ1ZlszMl07DQotICAgIEZYU1lTX2l0b2EoaSwgYnVmLCAxMCk7DQotICAgIEZYX1NUUlNJWkUgbGVuID0gKEZYX1NUUlNJWkUpRlhTWVNfc3RybGVuKGJ1Zik7DQotICAgIGlmIChtX0FsbG9jU2l6ZSA8IG1fRGF0YVNpemUgKyAoRlhfU1RSU0laRSkobGVuICogc2l6ZW9mKEZYX1dDSEFSKSkpIHsNCi0gICAgICAgIEV4cGFuZEJ1ZihsZW4gKiBzaXplb2YoRlhfV0NIQVIpKTsNCi0gICAgfQ0KLSAgICBBU1NFUlQobV9wQnVmZmVyICE9IE5VTEwpOw0KLSAgICBGWF9MUFdTVFIgc3RyID0gKEZYX1dDSEFSKikobV9wQnVmZmVyICsgbV9EYXRhU2l6ZSk7DQotICAgIGZvciAoRlhfU1RSU0laRSBqID0gMDsgaiA8IGxlbjsgaiArKykgew0KLSAgICAgICAgKnN0ciArKyA9IGJ1ZltqXTsNCi0gICAgfQ0KLSAgICBtX0RhdGFTaXplICs9IGxlbiAqIHNpemVvZihGWF9XQ0hBUik7DQotICAgIHJldHVybiAqdGhpczsNCi19DQotQ0ZYX1dpZGVUZXh0QnVmJiBDRlhfV2lkZVRleHRCdWY6Om9wZXJhdG9yIDw8IChkb3VibGUgZikNCi17DQotICAgIGNoYXIgYnVmWzMyXTsNCi0gICAgRlhfU1RSU0laRSBsZW4gPSBGWF9mdG9hKChGWF9GTE9BVClmLCBidWYpOw0KLSAgICBpZiAobV9BbGxvY1NpemUgPCBtX0RhdGFTaXplICsgKEZYX1NUUlNJWkUpKGxlbiAqIHNpemVvZihGWF9XQ0hBUikpKSB7DQotICAgICAgICBFeHBhbmRCdWYobGVuICogc2l6ZW9mKEZYX1dDSEFSKSk7DQotICAgIH0NCi0gICAgQVNTRVJUKG1fcEJ1ZmZlciAhPSBOVUxMKTsNCi0gICAgRlhfTFBXU1RSIHN0ciA9IChGWF9XQ0hBUiopKG1fcEJ1ZmZlciArIG1fRGF0YVNpemUpOw0KLSAgICBmb3IgKEZYX1NUUlNJWkUgaSA9IDA7IGkgPCBsZW47IGkgKyspIHsNCi0gICAgICAgICpzdHIgKysgPSBidWZbaV07DQotICAgIH0NCi0gICAgbV9EYXRhU2l6ZSArPSBsZW4gKiBzaXplb2YoRlhfV0NIQVIpOw0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLUNGWF9XaWRlVGV4dEJ1ZiYgQ0ZYX1dpZGVUZXh0QnVmOjpvcGVyYXRvciA8PCAoRlhfTFBDV1NUUiBscHN6KQ0KLXsNCi0gICAgQXBwZW5kQmxvY2sobHBzeiwgKEZYX1NUUlNJWkUpRlhTWVNfd2NzbGVuKGxwc3opKnNpemVvZihGWF9XQ0hBUikpOw0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLUNGWF9XaWRlVGV4dEJ1ZiYgQ0ZYX1dpZGVUZXh0QnVmOjpvcGVyYXRvciA8PCAoY29uc3QgQ0ZYX1dpZGVUZXh0QnVmJiBidWYpDQotew0KLSAgICBBcHBlbmRCbG9jayhidWYubV9wQnVmZmVyLCBidWYubV9EYXRhU2l6ZSk7DQotICAgIHJldHVybiAqdGhpczsNCi19DQotdm9pZCBDRlhfV2lkZVRleHRCdWY6Om9wZXJhdG9yID0oRlhfV1NUUiBzdHIpDQotew0KLSAgICBDb3B5RGF0YShzdHIuR2V0UHRyKCksIHN0ci5HZXRMZW5ndGgoKSAqIHNpemVvZihGWF9XQ0hBUikpOw0KLX0NCi1DRlhfV2lkZVN0cmluZ0MgQ0ZYX1dpZGVUZXh0QnVmOjpHZXRXaWRlU3RyaW5nKCkgY29uc3QNCi17DQotICAgIHJldHVybiBDRlhfV2lkZVN0cmluZ0MoKEZYX0xQQ1dTVFIpbV9wQnVmZmVyLCBtX0RhdGFTaXplIC8gc2l6ZW9mKEZYX1dDSEFSKSk7DQotfQ0KLXZvaWQgQ0ZYX1dpZGVUZXh0QnVmOjpHZXRXaWRlU3RyaW5nTChDRlhfV2lkZVN0cmluZ0wmIHdpZGVUZXh0KSBjb25zdA0KLXsNCi0gICAgd2lkZVRleHQuU2V0KENGWF9XaWRlU3RyaW5nQygoRlhfTFBDV1NUUiltX3BCdWZmZXIsIG1fRGF0YVNpemUgLyBzaXplb2YoRlhfV0NIQVIpKSwgbV9wQWxsb2NhdG9yKTsNCi19DQotQ0ZYX0FyY2hpdmVTYXZlciYgQ0ZYX0FyY2hpdmVTYXZlcjo6b3BlcmF0b3IgPDwgKEZYX0JZVEUgaSkNCi17DQotICAgIGlmIChtX3BTdHJlYW0pIHsNCi0gICAgICAgIG1fcFN0cmVhbS0+V3JpdGVCbG9jaygmaSwgMSk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX1NhdmluZ0J1Zi5BcHBlbmRCeXRlKGkpOw0KLSAgICB9DQotICAgIHJldHVybiAqdGhpczsNCi19DQotQ0ZYX0FyY2hpdmVTYXZlciYgQ0ZYX0FyY2hpdmVTYXZlcjo6b3BlcmF0b3IgPDwgKGludCBpKQ0KLXsNCi0gICAgaWYgKG1fcFN0cmVhbSkgew0KLSAgICAgICAgbV9wU3RyZWFtLT5Xcml0ZUJsb2NrKCZpLCBzaXplb2YoaW50KSk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX1NhdmluZ0J1Zi5BcHBlbmRCbG9jaygmaSwgc2l6ZW9mKGludCkpOw0KLSAgICB9DQotICAgIHJldHVybiAqdGhpczsNCi19DQotQ0ZYX0FyY2hpdmVTYXZlciYgQ0ZYX0FyY2hpdmVTYXZlcjo6b3BlcmF0b3IgPDwgKEZYX0RXT1JEIGkpDQotew0KLSAgICBpZiAobV9wU3RyZWFtKSB7DQotICAgICAgICBtX3BTdHJlYW0tPldyaXRlQmxvY2soJmksIHNpemVvZihGWF9EV09SRCkpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9TYXZpbmdCdWYuQXBwZW5kQmxvY2soJmksIHNpemVvZihGWF9EV09SRCkpOw0KLSAgICB9DQotICAgIHJldHVybiAqdGhpczsNCi19DQotQ0ZYX0FyY2hpdmVTYXZlciYgQ0ZYX0FyY2hpdmVTYXZlcjo6b3BlcmF0b3IgPDwgKEZYX0ZMT0FUIGYpDQotew0KLSAgICBpZiAobV9wU3RyZWFtKSB7DQotICAgICAgICBtX3BTdHJlYW0tPldyaXRlQmxvY2soJmYsIHNpemVvZihGWF9GTE9BVCkpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9TYXZpbmdCdWYuQXBwZW5kQmxvY2soJmYsIHNpemVvZihGWF9GTE9BVCkpOw0KLSAgICB9DQotICAgIHJldHVybiAqdGhpczsNCi19DQotQ0ZYX0FyY2hpdmVTYXZlciYgQ0ZYX0FyY2hpdmVTYXZlcjo6b3BlcmF0b3IgPDwgKEZYX0JTVFIgYnN0cikNCi17DQotICAgIGludCBsZW4gPSBic3RyLkdldExlbmd0aCgpOw0KLSAgICBpZiAobV9wU3RyZWFtKSB7DQotICAgICAgICBtX3BTdHJlYW0tPldyaXRlQmxvY2soJmxlbiwgc2l6ZW9mKGludCkpOw0KLSAgICAgICAgbV9wU3RyZWFtLT5Xcml0ZUJsb2NrKGJzdHIsIGxlbik7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX1NhdmluZ0J1Zi5BcHBlbmRCbG9jaygmbGVuLCBzaXplb2YoaW50KSk7DQotICAgICAgICBtX1NhdmluZ0J1Zi5BcHBlbmRCbG9jayhic3RyLCBsZW4pOw0KLSAgICB9DQotICAgIHJldHVybiAqdGhpczsNCi19DQotQ0ZYX0FyY2hpdmVTYXZlciYgQ0ZYX0FyY2hpdmVTYXZlcjo6b3BlcmF0b3IgPDwgKEZYX0xQQ1dTVFIgd3N0cikNCi17DQotICAgIEZYX1NUUlNJWkUgbGVuID0gKEZYX1NUUlNJWkUpRlhTWVNfd2NzbGVuKHdzdHIpOw0KLSAgICBpZiAobV9wU3RyZWFtKSB7DQotICAgICAgICBtX3BTdHJlYW0tPldyaXRlQmxvY2soJmxlbiwgc2l6ZW9mKGludCkpOw0KLSAgICAgICAgbV9wU3RyZWFtLT5Xcml0ZUJsb2NrKHdzdHIsIGxlbik7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX1NhdmluZ0J1Zi5BcHBlbmRCbG9jaygmbGVuLCBzaXplb2YoaW50KSk7DQotICAgICAgICBtX1NhdmluZ0J1Zi5BcHBlbmRCbG9jayh3c3RyLCBsZW4pOw0KLSAgICB9DQotICAgIHJldHVybiAqdGhpczsNCi19DQotQ0ZYX0FyY2hpdmVTYXZlciYgQ0ZYX0FyY2hpdmVTYXZlcjo6b3BlcmF0b3IgPDwgKGNvbnN0IENGWF9XaWRlU3RyaW5nJiB3c3RyKQ0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgZW5jb2RlZCA9IHdzdHIuVVRGMTZMRV9FbmNvZGUoKTsNCi0gICAgcmV0dXJuIG9wZXJhdG9yIDw8IChlbmNvZGVkKTsNCi19DQotdm9pZCBDRlhfQXJjaGl2ZVNhdmVyOjpXcml0ZShjb25zdCB2b2lkKiBwRGF0YSwgRlhfU1RSU0laRSBkd1NpemUpDQotew0KLSAgICBpZiAobV9wU3RyZWFtKSB7DQotICAgICAgICBtX3BTdHJlYW0tPldyaXRlQmxvY2socERhdGEsIGR3U2l6ZSk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX1NhdmluZ0J1Zi5BcHBlbmRCbG9jayhwRGF0YSwgZHdTaXplKTsNCi0gICAgfQ0KLX0NCi1DRlhfQXJjaGl2ZUxvYWRlcjo6Q0ZYX0FyY2hpdmVMb2FkZXIoRlhfTFBDQllURSBwRGF0YSwgRlhfRFdPUkQgZHdTaXplKQ0KLXsNCi0gICAgbV9wTG9hZGluZ0J1ZiA9IHBEYXRhOw0KLSAgICBtX0xvYWRpbmdQb3MgPSAwOw0KLSAgICBtX0xvYWRpbmdTaXplID0gZHdTaXplOw0KLX0NCi1GWF9CT09MIENGWF9BcmNoaXZlTG9hZGVyOjpJc0VPRigpDQotew0KLSAgICByZXR1cm4gbV9Mb2FkaW5nUG9zID49IG1fTG9hZGluZ1NpemU7DQotfQ0KLUNGWF9BcmNoaXZlTG9hZGVyJiBDRlhfQXJjaGl2ZUxvYWRlcjo6b3BlcmF0b3IgPj4gKEZYX0JZVEUmIGkpDQotew0KLSAgICBpZiAobV9Mb2FkaW5nUG9zID49IG1fTG9hZGluZ1NpemUpIHsNCi0gICAgICAgIHJldHVybiAqdGhpczsNCi0gICAgfQ0KLSAgICBpID0gbV9wTG9hZGluZ0J1ZlttX0xvYWRpbmdQb3MrK107DQotICAgIHJldHVybiAqdGhpczsNCi19DQotQ0ZYX0FyY2hpdmVMb2FkZXImIENGWF9BcmNoaXZlTG9hZGVyOjpvcGVyYXRvciA+PiAoaW50JiBpKQ0KLXsNCi0gICAgUmVhZCgmaSwgc2l6ZW9mKGludCkpOw0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLUNGWF9BcmNoaXZlTG9hZGVyJiBDRlhfQXJjaGl2ZUxvYWRlcjo6b3BlcmF0b3IgPj4gKEZYX0RXT1JEJiBpKQ0KLXsNCi0gICAgUmVhZCgmaSwgc2l6ZW9mKEZYX0RXT1JEKSk7DQotICAgIHJldHVybiAqdGhpczsNCi19DQotQ0ZYX0FyY2hpdmVMb2FkZXImIENGWF9BcmNoaXZlTG9hZGVyOjpvcGVyYXRvciA+PiAoRlhfRkxPQVQmIGkpDQotew0KLSAgICBSZWFkKCZpLCBzaXplb2YoRlhfRkxPQVQpKTsNCi0gICAgcmV0dXJuICp0aGlzOw0KLX0NCi1DRlhfQXJjaGl2ZUxvYWRlciYgQ0ZYX0FyY2hpdmVMb2FkZXI6Om9wZXJhdG9yID4+IChDRlhfQnl0ZVN0cmluZyYgc3RyKQ0KLXsNCi0gICAgaWYgKG1fTG9hZGluZ1BvcyArIDQgPiBtX0xvYWRpbmdTaXplKSB7DQotICAgICAgICByZXR1cm4gKnRoaXM7DQotICAgIH0NCi0gICAgaW50IGxlbjsNCi0gICAgb3BlcmF0b3IgPj4gKGxlbik7DQotICAgIHN0ci5FbXB0eSgpOw0KLSAgICBpZiAobGVuIDw9IDAgfHwgbV9Mb2FkaW5nUG9zICsgbGVuID4gbV9Mb2FkaW5nU2l6ZSkgew0KLSAgICAgICAgcmV0dXJuICp0aGlzOw0KLSAgICB9DQotICAgIEZYX0xQU1RSIGJ1ZmZlciA9IHN0ci5HZXRCdWZmZXIobGVuKTsNCi0gICAgRlhTWVNfbWVtY3B5MzIoYnVmZmVyLCBtX3BMb2FkaW5nQnVmICsgbV9Mb2FkaW5nUG9zLCBsZW4pOw0KLSAgICBzdHIuUmVsZWFzZUJ1ZmZlcihsZW4pOw0KLSAgICBtX0xvYWRpbmdQb3MgKz0gbGVuOw0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLUNGWF9BcmNoaXZlTG9hZGVyJiBDRlhfQXJjaGl2ZUxvYWRlcjo6b3BlcmF0b3IgPj4gKENGWF9XaWRlU3RyaW5nJiBzdHIpDQotew0KLSAgICBDRlhfQnl0ZVN0cmluZyBlbmNvZGVkOw0KLSAgICBvcGVyYXRvciA+PiAoZW5jb2RlZCk7DQotICAgIHN0ciA9IENGWF9XaWRlU3RyaW5nOjpGcm9tVVRGMTZMRSgoY29uc3QgdW5zaWduZWQgc2hvcnQqKShGWF9MUENTVFIpZW5jb2RlZCwgZW5jb2RlZC5HZXRMZW5ndGgoKSk7DQotICAgIHJldHVybiAqdGhpczsNCi19DQotRlhfQk9PTCBDRlhfQXJjaGl2ZUxvYWRlcjo6UmVhZCh2b2lkKiBwQnVmLCBGWF9EV09SRCBkd1NpemUpDQotew0KLSAgICBpZiAobV9Mb2FkaW5nUG9zICsgZHdTaXplID4gbV9Mb2FkaW5nU2l6ZSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYU1lTX21lbWNweTMyKHBCdWYsIG1fcExvYWRpbmdCdWYgKyBtX0xvYWRpbmdQb3MsIGR3U2l6ZSk7DQotICAgIG1fTG9hZGluZ1BvcyArPSBkd1NpemU7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi12b2lkIENGWF9CaXRTdHJlYW06OkluaXQoRlhfTFBDQllURSBwRGF0YSwgRlhfRFdPUkQgZHdTaXplKQ0KLXsNCi0gICAgbV9wRGF0YSA9IHBEYXRhOw0KLSAgICBtX0JpdFNpemUgPSBkd1NpemUgKiA4Ow0KLSAgICBtX0JpdFBvcyA9IDA7DQotfQ0KLXZvaWQgQ0ZYX0JpdFN0cmVhbTo6Qnl0ZUFsaWduKCkNCi17DQotICAgIGludCBtb2QgPSBtX0JpdFBvcyAlIDg7DQotICAgIGlmIChtb2QgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fQml0UG9zICs9IDggLSBtb2Q7DQotfQ0KLUZYX0RXT1JEIENGWF9CaXRTdHJlYW06OkdldEJpdHMoRlhfRFdPUkQgbkJpdHMpDQotew0KLSAgICBpZiAobkJpdHMgPiBtX0JpdFNpemUgfHwgbV9CaXRQb3MgKyBuQml0cyA+IG1fQml0U2l6ZSkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgaWYgKG5CaXRzID09IDEpIHsNCi0gICAgICAgIGludCBiaXQgPSAobV9wRGF0YVttX0JpdFBvcyAvIDhdICYgKDEgPDwgKDcgLSBtX0JpdFBvcyAlIDgpKSkgPyAxIDogMDsNCi0gICAgICAgIG1fQml0UG9zICsrOw0KLSAgICAgICAgcmV0dXJuIGJpdDsNCi0gICAgfQ0KLSAgICBGWF9EV09SRCBieXRlX3BvcyA9IG1fQml0UG9zIC8gODsNCi0gICAgRlhfRFdPUkQgYml0X3BvcyA9IG1fQml0UG9zICUgOCwgYml0X2xlZnQgPSBuQml0czsNCi0gICAgRlhfRFdPUkQgcmVzdWx0ID0gMDsNCi0gICAgaWYgKGJpdF9wb3MpIHsNCi0gICAgICAgIGlmICg4IC0gYml0X3BvcyA+PSBiaXRfbGVmdCkgew0KLSAgICAgICAgICAgIHJlc3VsdCA9IChtX3BEYXRhW2J5dGVfcG9zXSAmICgweGZmID4+IGJpdF9wb3MpKSA+PiAoOCAtIGJpdF9wb3MgLSBiaXRfbGVmdCk7DQotICAgICAgICAgICAgbV9CaXRQb3MgKz0gYml0X2xlZnQ7DQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCi0gICAgICAgIH0NCi0gICAgICAgIGJpdF9sZWZ0IC09IDggLSBiaXRfcG9zOw0KLSAgICAgICAgcmVzdWx0ID0gKG1fcERhdGFbYnl0ZV9wb3MrK10gJiAoKDEgPDwgKDggLSBiaXRfcG9zKSkgLSAxKSkgPDwgYml0X2xlZnQ7DQotICAgIH0NCi0gICAgd2hpbGUgKGJpdF9sZWZ0ID49IDgpIHsNCi0gICAgICAgIGJpdF9sZWZ0IC09IDg7DQotICAgICAgICByZXN1bHQgfD0gbV9wRGF0YVtieXRlX3BvcysrXSA8PCBiaXRfbGVmdDsNCi0gICAgfQ0KLSAgICBpZiAoYml0X2xlZnQpIHsNCi0gICAgICAgIHJlc3VsdCB8PSBtX3BEYXRhW2J5dGVfcG9zXSA+PiAoOCAtIGJpdF9sZWZ0KTsNCi0gICAgfQ0KLSAgICBtX0JpdFBvcyArPSBuQml0czsNCi0gICAgcmV0dXJuIHJlc3VsdDsNCi19DQotSUZYX0J1ZmZlckFyY2hpdmU6OklGWF9CdWZmZXJBcmNoaXZlKEZYX1NUUlNJWkUgc2l6ZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikNCi0gICAgOiBtX3BBbGxvY2F0b3IocEFsbG9jYXRvcikNCi0gICAgLCBtX0J1ZlNpemUoc2l6ZSkNCi0gICAgLCBtX3BCdWZmZXIoTlVMTCkNCi0gICAgLCBtX0xlbmd0aCgwKQ0KLXsNCi19DQotdm9pZCBJRlhfQnVmZmVyQXJjaGl2ZTo6Q2xlYXIoKQ0KLXsNCi0gICAgbV9MZW5ndGggPSAwOw0KLSAgICBpZiAobV9wQnVmZmVyKSB7DQotICAgICAgICBGWF9BbGxvY2F0b3JfRnJlZShtX3BBbGxvY2F0b3IsIG1fcEJ1ZmZlcik7DQotICAgICAgICBtX3BCdWZmZXIgPSBOVUxMOw0KLSAgICB9DQotfQ0KLUZYX0JPT0wgSUZYX0J1ZmZlckFyY2hpdmU6OkZsdXNoKCkNCi17DQotICAgIEZYX0JPT0wgYlJldCA9IERvV29yayhtX3BCdWZmZXIsIG1fTGVuZ3RoKTsNCi0gICAgbV9MZW5ndGggPSAwOw0KLSAgICByZXR1cm4gYlJldDsNCi19DQotRlhfSU5UMzIgSUZYX0J1ZmZlckFyY2hpdmU6OkFwcGVuZEJsb2NrKGNvbnN0IHZvaWQqIHBCdWYsIHNpemVfdCBzaXplKQ0KLXsNCi0gICAgaWYgKCFwQnVmIHx8IHNpemUgPCAxKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBpZiAoIW1fcEJ1ZmZlcikgew0KLSAgICAgICAgbV9wQnVmZmVyID0gRlhfQWxsb2NhdG9yX0FsbG9jKG1fcEFsbG9jYXRvciwgRlhfQllURSwgbV9CdWZTaXplKTsNCi0gICAgICAgIGlmICghbV9wQnVmZmVyKSB7DQotICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIEZYX0xQQllURSBidWZmZXIgPSAoRlhfTFBCWVRFKXBCdWY7DQotICAgIEZYX1NUUlNJWkUgdGVtcF9zaXplID0gKEZYX1NUUlNJWkUpc2l6ZTsNCi0gICAgd2hpbGUgKHRlbXBfc2l6ZSA+IDApIHsNCi0gICAgICAgIEZYX1NUUlNJWkUgYnVmX3NpemUgPSBGWF9NSU4obV9CdWZTaXplIC0gbV9MZW5ndGgsIChGWF9TVFJTSVpFKXRlbXBfc2l6ZSk7DQotICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BCdWZmZXIgKyBtX0xlbmd0aCwgYnVmZmVyLCBidWZfc2l6ZSk7DQotICAgICAgICBtX0xlbmd0aCArPSBidWZfc2l6ZTsNCi0gICAgICAgIGlmIChtX0xlbmd0aCA9PSBtX0J1ZlNpemUpIHsNCi0gICAgICAgICAgICBpZiAoIUZsdXNoKCkpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHRlbXBfc2l6ZSAtPSBidWZfc2l6ZTsNCi0gICAgICAgIGJ1ZmZlciArPSBidWZfc2l6ZTsNCi0gICAgfQ0KLSAgICByZXR1cm4gKEZYX0lOVDMyKXNpemU7DQotfQ0KLUZYX0lOVDMyIElGWF9CdWZmZXJBcmNoaXZlOjpBcHBlbmRCeXRlKEZYX0JZVEUgYnl0ZSkNCi17DQotICAgIHJldHVybiBBcHBlbmRCbG9jaygmYnl0ZSwgMSk7DQotfQ0KLUZYX0lOVDMyIElGWF9CdWZmZXJBcmNoaXZlOjpBcHBlbmREV29yZChGWF9EV09SRCBpKQ0KLXsNCi0gICAgY2hhciBidWZbMzJdOw0KLSAgICBGWFNZU19pdG9hKGksIGJ1ZiwgMTApOw0KLSAgICByZXR1cm4gQXBwZW5kQmxvY2soYnVmLCAoc2l6ZV90KUZYU1lTX3N0cmxlbihidWYpKTsNCi19DQotRlhfSU5UMzIgSUZYX0J1ZmZlckFyY2hpdmU6OkFwcGVuZFN0cmluZyhGWF9CU1RSIGxwc3opDQotew0KLSAgICByZXR1cm4gQXBwZW5kQmxvY2soKEZYX0xQQ0JZVEUpbHBzeiwgbHBzei5HZXRMZW5ndGgoKSk7DQotfQ0KLUNGWF9GaWxlQnVmZmVyQXJjaGl2ZTo6Q0ZYX0ZpbGVCdWZmZXJBcmNoaXZlKEZYX1NUUlNJWkUgc2l6ZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikNCi0gICAgOiBJRlhfQnVmZmVyQXJjaGl2ZShzaXplLCBwQWxsb2NhdG9yKQ0KLSAgICAsIG1fcEZpbGUoTlVMTCkNCi0gICAgLCBtX2JUYWtlb3ZlcihGQUxTRSkNCi17DQotfQ0KLUNGWF9GaWxlQnVmZmVyQXJjaGl2ZTo6fkNGWF9GaWxlQnVmZmVyQXJjaGl2ZSgpDQotew0KLSAgICBDbGVhcigpOw0KLX0NCi12b2lkIENGWF9GaWxlQnVmZmVyQXJjaGl2ZTo6Q2xlYXIoKQ0KLXsNCi0gICAgaWYgKG1fcEZpbGUgJiYgbV9iVGFrZW92ZXIpIHsNCi0gICAgICAgIG1fcEZpbGUtPlJlbGVhc2UoKTsNCi0gICAgfQ0KLSAgICBtX3BGaWxlID0gTlVMTDsNCi0gICAgbV9iVGFrZW92ZXIgPSBGQUxTRTsNCi0gICAgSUZYX0J1ZmZlckFyY2hpdmU6OkNsZWFyKCk7DQotfQ0KLUZYX0JPT0wgQ0ZYX0ZpbGVCdWZmZXJBcmNoaXZlOjpBdHRhY2hGaWxlKElGWF9TdHJlYW1Xcml0ZSAqcEZpbGUsIEZYX0JPT0wgYlRha2VvdmVyICkNCi17DQotICAgIGlmICghcEZpbGUpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAobV9wRmlsZSAmJiBtX2JUYWtlb3Zlcikgew0KLSAgICAgICAgbV9wRmlsZS0+UmVsZWFzZSgpOw0KLSAgICB9DQotICAgIG1fcEZpbGUgPSBwRmlsZTsNCi0gICAgbV9iVGFrZW92ZXIgPSBiVGFrZW92ZXI7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENGWF9GaWxlQnVmZmVyQXJjaGl2ZTo6QXR0YWNoRmlsZShGWF9MUENXU1RSIGZpbGVuYW1lKQ0KLXsNCi0gICAgaWYgKCFmaWxlbmFtZSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChtX3BGaWxlICYmIG1fYlRha2VvdmVyKSB7DQotICAgICAgICBtX3BGaWxlLT5SZWxlYXNlKCk7DQotICAgIH0NCi0gICAgbV9wRmlsZSA9IEZYX0NyZWF0ZUZpbGVXcml0ZShmaWxlbmFtZSk7DQotICAgIGlmICghbV9wRmlsZSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fYlRha2VvdmVyID0gVFJVRTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ0ZYX0ZpbGVCdWZmZXJBcmNoaXZlOjpBdHRhY2hGaWxlKEZYX0xQQ1NUUiBmaWxlbmFtZSkNCi17DQotICAgIGlmICghZmlsZW5hbWUpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAobV9wRmlsZSAmJiBtX2JUYWtlb3Zlcikgew0KLSAgICAgICAgbV9wRmlsZS0+UmVsZWFzZSgpOw0KLSAgICB9DQotICAgIG1fcEZpbGUgPSBGWF9DcmVhdGVGaWxlV3JpdGUoZmlsZW5hbWUpOw0KLSAgICBpZiAoIW1fcEZpbGUpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBtX2JUYWtlb3ZlciA9IFRSVUU7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENGWF9GaWxlQnVmZmVyQXJjaGl2ZTo6RG9Xb3JrKGNvbnN0IHZvaWQqIHBCdWYsIHNpemVfdCBzaXplKQ0KLXsNCi0gICAgaWYgKCFtX3BGaWxlKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKCFwQnVmIHx8IHNpemUgPCAxKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wRmlsZS0+V3JpdGVCbG9jayhwQnVmLCBzaXplKTsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfYmFzaWMuaCIKK0ZYX1NUUlNJWkUgRlhfZnRvYShGWF9GTE9BVCBmLCBGWF9MUFNUUiBidWYpOworQ0ZYX0JpbmFyeUJ1Zjo6Q0ZYX0JpbmFyeUJ1ZihJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQorICAgIDogbV9wQWxsb2NhdG9yKHBBbGxvY2F0b3IpCisgICAgLCBtX0FsbG9jU3RlcCgwKQorICAgICwgbV9wQnVmZmVyKE5VTEwpCisgICAgLCBtX0RhdGFTaXplKDApCisgICAgLCBtX0FsbG9jU2l6ZSgwKQoreworfQorQ0ZYX0JpbmFyeUJ1Zjo6Q0ZYX0JpbmFyeUJ1ZihGWF9TVFJTSVpFIHNpemUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpCisgICAgOiBtX3BBbGxvY2F0b3IocEFsbG9jYXRvcikKKyAgICAsIG1fQWxsb2NTdGVwKDApCisgICAgLCBtX0RhdGFTaXplKHNpemUpCisgICAgLCBtX0FsbG9jU2l6ZShzaXplKQoreworICAgIG1fcEJ1ZmZlciA9IEZYX0FsbG9jYXRvcl9BbGxvYyhtX3BBbGxvY2F0b3IsIEZYX0JZVEUsIHNpemUpOworfQorQ0ZYX0JpbmFyeUJ1Zjo6fkNGWF9CaW5hcnlCdWYoKQoreworICAgIGlmIChtX3BCdWZmZXIpIHsKKyAgICAgICAgRlhfQWxsb2NhdG9yX0ZyZWUobV9wQWxsb2NhdG9yLCBtX3BCdWZmZXIpOworICAgIH0KK30KK3ZvaWQgQ0ZYX0JpbmFyeUJ1Zjo6RGVsZXRlKGludCBzdGFydF9pbmRleCwgaW50IGNvdW50KQoreworICAgIGlmICghbV9wQnVmZmVyIHx8IHN0YXJ0X2luZGV4IDwgMCB8fCBzdGFydF9pbmRleCArIGNvdW50ID4gbV9EYXRhU2l6ZSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYU1lTX21lbW1vdmUzMihtX3BCdWZmZXIgKyBzdGFydF9pbmRleCwgbV9wQnVmZmVyICsgc3RhcnRfaW5kZXggKyBjb3VudCwgbV9EYXRhU2l6ZSAtIHN0YXJ0X2luZGV4IC0gY291bnQpOworICAgIG1fRGF0YVNpemUgLT0gY291bnQ7Cit9Cit2b2lkIENGWF9CaW5hcnlCdWY6OkNsZWFyKCkKK3sKKyAgICBtX0RhdGFTaXplID0gMDsKK30KK3ZvaWQgQ0ZYX0JpbmFyeUJ1Zjo6RGV0YWNoQnVmZmVyKCkKK3sKKyAgICBtX0RhdGFTaXplID0gMDsKKyAgICBtX3BCdWZmZXIgPSBOVUxMOworICAgIG1fQWxsb2NTaXplID0gMDsKK30KK3ZvaWQgQ0ZYX0JpbmFyeUJ1Zjo6QXR0YWNoRGF0YSh2b2lkKiBidWZmZXIsIEZYX1NUUlNJWkUgc2l6ZSkKK3sKKyAgICBpZiAobV9wQnVmZmVyKSB7CisgICAgICAgIEZYX0FsbG9jYXRvcl9GcmVlKG1fcEFsbG9jYXRvciwgbV9wQnVmZmVyKTsKKyAgICB9CisgICAgbV9EYXRhU2l6ZSA9IHNpemU7CisgICAgbV9wQnVmZmVyID0gKEZYX0xQQllURSlidWZmZXI7CisgICAgbV9BbGxvY1NpemUgPSBzaXplOworfQordm9pZCBDRlhfQmluYXJ5QnVmOjpUYWtlT3ZlcihDRlhfQmluYXJ5QnVmJiBvdGhlcikKK3sKKyAgICBBdHRhY2hEYXRhKG90aGVyLkdldEJ1ZmZlcigpLCBvdGhlci5HZXRTaXplKCkpOworICAgIG90aGVyLkRldGFjaEJ1ZmZlcigpOworfQordm9pZCBDRlhfQmluYXJ5QnVmOjpFc3RpbWF0ZVNpemUoRlhfU1RSU0laRSBzaXplLCBGWF9TVFJTSVpFIHN0ZXApCit7CisgICAgbV9BbGxvY1N0ZXAgPSBzdGVwOworICAgIGlmIChtX0FsbG9jU2l6ZSA+PSBzaXplKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRXhwYW5kQnVmKHNpemUgLSBtX0RhdGFTaXplKTsKK30KK3ZvaWQgQ0ZYX0JpbmFyeUJ1Zjo6RXhwYW5kQnVmKEZYX1NUUlNJWkUgYWRkX3NpemUpCit7CisgICAgRlhfU1RSU0laRSBuZXdfc2l6ZSA9IGFkZF9zaXplICsgbV9EYXRhU2l6ZTsKKyAgICBpZiAobV9BbGxvY1NpemUgPj0gbmV3X3NpemUpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgYWxsb2Nfc3RlcDsKKyAgICBpZiAobV9BbGxvY1N0ZXAgPT0gMCkgeworICAgICAgICBhbGxvY19zdGVwID0gbV9BbGxvY1NpemUgLyA0OworICAgICAgICBpZiAoYWxsb2Nfc3RlcCA8IDEyOCApIHsKKyAgICAgICAgICAgIGFsbG9jX3N0ZXAgPSAxMjg7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBhbGxvY19zdGVwID0gbV9BbGxvY1N0ZXA7CisgICAgfQorICAgIG5ld19zaXplID0gKG5ld19zaXplICsgYWxsb2Nfc3RlcCAtIDEpIC8gYWxsb2Nfc3RlcCAqIGFsbG9jX3N0ZXA7CisgICAgRlhfTFBCWVRFIHBOZXdCdWZmZXIgPSBtX3BCdWZmZXI7CisgICAgaWYgKHBOZXdCdWZmZXIpIHsKKyAgICAgICAgcE5ld0J1ZmZlciA9IEZYX0FsbG9jYXRvcl9SZWFsbG9jKG1fcEFsbG9jYXRvciwgRlhfQllURSwgbV9wQnVmZmVyLCBuZXdfc2l6ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcE5ld0J1ZmZlciA9IEZYX0FsbG9jYXRvcl9BbGxvYyhtX3BBbGxvY2F0b3IsIEZYX0JZVEUsIG5ld19zaXplKTsKKyAgICB9CisgICAgaWYgKHBOZXdCdWZmZXIpIHsKKyAgICAgICAgbV9wQnVmZmVyID0gcE5ld0J1ZmZlcjsKKyAgICAgICAgbV9BbGxvY1NpemUgPSBuZXdfc2l6ZTsKKyAgICB9Cit9Cit2b2lkIENGWF9CaW5hcnlCdWY6OkNvcHlEYXRhKGNvbnN0IHZvaWQqIHBTdHIsIEZYX1NUUlNJWkUgc2l6ZSkKK3sKKyAgICBpZiAoc2l6ZSA9PSAwKSB7CisgICAgICAgIG1fRGF0YVNpemUgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX0FsbG9jU2l6ZSA8IHNpemUpIHsKKyAgICAgICAgRXhwYW5kQnVmKHNpemUgLSBtX0RhdGFTaXplKTsKKyAgICB9CisgICAgaWYgKCFtX3BCdWZmZXIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGWFNZU19tZW1jcHkzMihtX3BCdWZmZXIsIHBTdHIsIHNpemUpOworICAgIG1fRGF0YVNpemUgPSBzaXplOworfQordm9pZCBDRlhfQmluYXJ5QnVmOjpBcHBlbmRCbG9jayhjb25zdCB2b2lkKiBwQnVmLCBGWF9TVFJTSVpFIHNpemUpCit7CisgICAgRXhwYW5kQnVmKHNpemUpOworICAgIGlmIChwQnVmICYmIG1fcEJ1ZmZlcikgeworICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BCdWZmZXIgKyBtX0RhdGFTaXplLCBwQnVmLCBzaXplKTsKKyAgICB9CisgICAgbV9EYXRhU2l6ZSArPSBzaXplOworfQordm9pZCBDRlhfQmluYXJ5QnVmOjpJbnNlcnRCbG9jayhGWF9TVFJTSVpFIHBvcywgY29uc3Qgdm9pZCogcEJ1ZiwgRlhfU1RSU0laRSBzaXplKQoreworICAgIEV4cGFuZEJ1ZihzaXplKTsKKyAgICBpZiAoIW1fcEJ1ZmZlcikgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYU1lTX21lbW1vdmUzMihtX3BCdWZmZXIgKyBwb3MgKyBzaXplLCBtX3BCdWZmZXIgKyBwb3MsIG1fRGF0YVNpemUgLSBwb3MpOworICAgIGlmIChwQnVmKSB7CisgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcEJ1ZmZlciArIHBvcywgcEJ1Ziwgc2l6ZSk7CisgICAgfQorICAgIG1fRGF0YVNpemUgKz0gc2l6ZTsKK30KK3ZvaWQgQ0ZYX0JpbmFyeUJ1Zjo6QXBwZW5kRmlsbChGWF9CWVRFIGJ5dGUsIEZYX1NUUlNJWkUgY291bnQpCit7CisgICAgRXhwYW5kQnVmKGNvdW50KTsKKyAgICBpZiAoIW1fcEJ1ZmZlcikgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYU1lTX21lbXNldDgobV9wQnVmZmVyICsgbV9EYXRhU2l6ZSwgYnl0ZSwgY291bnQpOworICAgIG1fRGF0YVNpemUgKz0gY291bnQ7Cit9CitDRlhfQnl0ZVN0cmluZ0MgQ0ZYX0JpbmFyeUJ1Zjo6R2V0Qnl0ZVN0cmluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nQyhtX3BCdWZmZXIsIG1fRGF0YVNpemUpOworfQordm9pZCBDRlhfQmluYXJ5QnVmOjpHZXRCeXRlU3RyaW5nTChDRlhfQnl0ZVN0cmluZ0wgJnN0cikgY29uc3QKK3sKKyAgICBzdHIuU2V0KENGWF9CeXRlU3RyaW5nQyhtX3BCdWZmZXIsIG1fRGF0YVNpemUpLCBtX3BBbGxvY2F0b3IpOworfQorQ0ZYX0J5dGVUZXh0QnVmJiBDRlhfQnl0ZVRleHRCdWY6Om9wZXJhdG9yIDw8IChGWF9CU1RSIGxwc3opCit7CisgICAgQXBwZW5kQmxvY2soKEZYX0xQQ0JZVEUpbHBzeiwgbHBzei5HZXRMZW5ndGgoKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorQ0ZYX0J5dGVUZXh0QnVmJiBDRlhfQnl0ZVRleHRCdWY6Om9wZXJhdG9yIDw8IChpbnQgaSkKK3sKKyAgICBjaGFyIGJ1ZlszMl07CisgICAgRlhTWVNfaXRvYShpLCBidWYsIDEwKTsKKyAgICBBcHBlbmRCbG9jayhidWYsIChGWF9TVFJTSVpFKUZYU1lTX3N0cmxlbihidWYpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CitDRlhfQnl0ZVRleHRCdWYmIENGWF9CeXRlVGV4dEJ1Zjo6b3BlcmF0b3IgPDwgKEZYX0RXT1JEIGkpCit7CisgICAgY2hhciBidWZbMzJdOworICAgIEZYU1lTX2l0b2EoaSwgYnVmLCAxMCk7CisgICAgQXBwZW5kQmxvY2soYnVmLCAoRlhfU1RSU0laRSlGWFNZU19zdHJsZW4oYnVmKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorQ0ZYX0J5dGVUZXh0QnVmJiBDRlhfQnl0ZVRleHRCdWY6Om9wZXJhdG9yIDw8IChkb3VibGUgZikKK3sKKyAgICBjaGFyIGJ1ZlszMl07CisgICAgRlhfU1RSU0laRSBsZW4gPSBGWF9mdG9hKChGWF9GTE9BVClmLCBidWYpOworICAgIEFwcGVuZEJsb2NrKGJ1ZiwgbGVuKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CitDRlhfQnl0ZVRleHRCdWYmIENGWF9CeXRlVGV4dEJ1Zjo6b3BlcmF0b3IgPDwgKGNvbnN0IENGWF9CeXRlVGV4dEJ1ZiYgYnVmKQoreworICAgIEFwcGVuZEJsb2NrKGJ1Zi5tX3BCdWZmZXIsIGJ1Zi5tX0RhdGFTaXplKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9Cit2b2lkIENGWF9CeXRlVGV4dEJ1Zjo6b3BlcmF0b3IgPShjb25zdCBDRlhfQnl0ZVN0cmluZ0MmIHN0cikKK3sKKyAgICBDb3B5RGF0YSgoRlhfTFBDQllURSlzdHIsIHN0ci5HZXRMZW5ndGgoKSk7Cit9Cit2b2lkIENGWF9XaWRlVGV4dEJ1Zjo6QXBwZW5kQ2hhcihGWF9XQ0hBUiBjaCkKK3sKKyAgICBpZiAobV9BbGxvY1NpemUgPCBtX0RhdGFTaXplICsgKEZYX1NUUlNJWkUpc2l6ZW9mKEZYX1dDSEFSKSkgeworICAgICAgICBFeHBhbmRCdWYoc2l6ZW9mKEZYX1dDSEFSKSk7CisgICAgfQorICAgIEFTU0VSVChtX3BCdWZmZXIgIT0gTlVMTCk7CisgICAgKihGWF9XQ0hBUiopKG1fcEJ1ZmZlciArIG1fRGF0YVNpemUpID0gY2g7CisgICAgbV9EYXRhU2l6ZSArPSBzaXplb2YoRlhfV0NIQVIpOworfQorQ0ZYX1dpZGVUZXh0QnVmJiBDRlhfV2lkZVRleHRCdWY6Om9wZXJhdG9yIDw8IChGWF9XU1RSIHN0cikKK3sKKyAgICBBcHBlbmRCbG9jayhzdHIuR2V0UHRyKCksIHN0ci5HZXRMZW5ndGgoKSAqIHNpemVvZihGWF9XQ0hBUikpOworICAgIHJldHVybiAqdGhpczsKK30KK0NGWF9XaWRlVGV4dEJ1ZiYgQ0ZYX1dpZGVUZXh0QnVmOjpvcGVyYXRvciA8PCAoY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJnN0cikKK3sKKyAgICBBcHBlbmRCbG9jaygoRlhfTFBDV1NUUilzdHIsIHN0ci5HZXRMZW5ndGgoKSAqIHNpemVvZihGWF9XQ0hBUikpOworICAgIHJldHVybiAqdGhpczsKK30KK0NGWF9XaWRlVGV4dEJ1ZiYgQ0ZYX1dpZGVUZXh0QnVmOjpvcGVyYXRvciA8PCAoaW50IGkpCit7CisgICAgY2hhciBidWZbMzJdOworICAgIEZYU1lTX2l0b2EoaSwgYnVmLCAxMCk7CisgICAgRlhfU1RSU0laRSBsZW4gPSAoRlhfU1RSU0laRSlGWFNZU19zdHJsZW4oYnVmKTsKKyAgICBpZiAobV9BbGxvY1NpemUgPCBtX0RhdGFTaXplICsgKEZYX1NUUlNJWkUpKGxlbiAqIHNpemVvZihGWF9XQ0hBUikpKSB7CisgICAgICAgIEV4cGFuZEJ1ZihsZW4gKiBzaXplb2YoRlhfV0NIQVIpKTsKKyAgICB9CisgICAgQVNTRVJUKG1fcEJ1ZmZlciAhPSBOVUxMKTsKKyAgICBGWF9MUFdTVFIgc3RyID0gKEZYX1dDSEFSKikobV9wQnVmZmVyICsgbV9EYXRhU2l6ZSk7CisgICAgZm9yIChGWF9TVFJTSVpFIGogPSAwOyBqIDwgbGVuOyBqICsrKSB7CisgICAgICAgICpzdHIgKysgPSBidWZbal07CisgICAgfQorICAgIG1fRGF0YVNpemUgKz0gbGVuICogc2l6ZW9mKEZYX1dDSEFSKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CitDRlhfV2lkZVRleHRCdWYmIENGWF9XaWRlVGV4dEJ1Zjo6b3BlcmF0b3IgPDwgKGRvdWJsZSBmKQoreworICAgIGNoYXIgYnVmWzMyXTsKKyAgICBGWF9TVFJTSVpFIGxlbiA9IEZYX2Z0b2EoKEZYX0ZMT0FUKWYsIGJ1Zik7CisgICAgaWYgKG1fQWxsb2NTaXplIDwgbV9EYXRhU2l6ZSArIChGWF9TVFJTSVpFKShsZW4gKiBzaXplb2YoRlhfV0NIQVIpKSkgeworICAgICAgICBFeHBhbmRCdWYobGVuICogc2l6ZW9mKEZYX1dDSEFSKSk7CisgICAgfQorICAgIEFTU0VSVChtX3BCdWZmZXIgIT0gTlVMTCk7CisgICAgRlhfTFBXU1RSIHN0ciA9IChGWF9XQ0hBUiopKG1fcEJ1ZmZlciArIG1fRGF0YVNpemUpOworICAgIGZvciAoRlhfU1RSU0laRSBpID0gMDsgaSA8IGxlbjsgaSArKykgeworICAgICAgICAqc3RyICsrID0gYnVmW2ldOworICAgIH0KKyAgICBtX0RhdGFTaXplICs9IGxlbiAqIHNpemVvZihGWF9XQ0hBUik7CisgICAgcmV0dXJuICp0aGlzOworfQorQ0ZYX1dpZGVUZXh0QnVmJiBDRlhfV2lkZVRleHRCdWY6Om9wZXJhdG9yIDw8IChGWF9MUENXU1RSIGxwc3opCit7CisgICAgQXBwZW5kQmxvY2sobHBzeiwgKEZYX1NUUlNJWkUpRlhTWVNfd2NzbGVuKGxwc3opKnNpemVvZihGWF9XQ0hBUikpOworICAgIHJldHVybiAqdGhpczsKK30KK0NGWF9XaWRlVGV4dEJ1ZiYgQ0ZYX1dpZGVUZXh0QnVmOjpvcGVyYXRvciA8PCAoY29uc3QgQ0ZYX1dpZGVUZXh0QnVmJiBidWYpCit7CisgICAgQXBwZW5kQmxvY2soYnVmLm1fcEJ1ZmZlciwgYnVmLm1fRGF0YVNpemUpOworICAgIHJldHVybiAqdGhpczsKK30KK3ZvaWQgQ0ZYX1dpZGVUZXh0QnVmOjpvcGVyYXRvciA9KEZYX1dTVFIgc3RyKQoreworICAgIENvcHlEYXRhKHN0ci5HZXRQdHIoKSwgc3RyLkdldExlbmd0aCgpICogc2l6ZW9mKEZYX1dDSEFSKSk7Cit9CitDRlhfV2lkZVN0cmluZ0MgQ0ZYX1dpZGVUZXh0QnVmOjpHZXRXaWRlU3RyaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmdDKChGWF9MUENXU1RSKW1fcEJ1ZmZlciwgbV9EYXRhU2l6ZSAvIHNpemVvZihGWF9XQ0hBUikpOworfQordm9pZCBDRlhfV2lkZVRleHRCdWY6OkdldFdpZGVTdHJpbmdMKENGWF9XaWRlU3RyaW5nTCYgd2lkZVRleHQpIGNvbnN0Cit7CisgICAgd2lkZVRleHQuU2V0KENGWF9XaWRlU3RyaW5nQygoRlhfTFBDV1NUUiltX3BCdWZmZXIsIG1fRGF0YVNpemUgLyBzaXplb2YoRlhfV0NIQVIpKSwgbV9wQWxsb2NhdG9yKTsKK30KK0NGWF9BcmNoaXZlU2F2ZXImIENGWF9BcmNoaXZlU2F2ZXI6Om9wZXJhdG9yIDw8IChGWF9CWVRFIGkpCit7CisgICAgaWYgKG1fcFN0cmVhbSkgeworICAgICAgICBtX3BTdHJlYW0tPldyaXRlQmxvY2soJmksIDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fU2F2aW5nQnVmLkFwcGVuZEJ5dGUoaSk7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKK30KK0NGWF9BcmNoaXZlU2F2ZXImIENGWF9BcmNoaXZlU2F2ZXI6Om9wZXJhdG9yIDw8IChpbnQgaSkKK3sKKyAgICBpZiAobV9wU3RyZWFtKSB7CisgICAgICAgIG1fcFN0cmVhbS0+V3JpdGVCbG9jaygmaSwgc2l6ZW9mKGludCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fU2F2aW5nQnVmLkFwcGVuZEJsb2NrKCZpLCBzaXplb2YoaW50KSk7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKK30KK0NGWF9BcmNoaXZlU2F2ZXImIENGWF9BcmNoaXZlU2F2ZXI6Om9wZXJhdG9yIDw8IChGWF9EV09SRCBpKQoreworICAgIGlmIChtX3BTdHJlYW0pIHsKKyAgICAgICAgbV9wU3RyZWFtLT5Xcml0ZUJsb2NrKCZpLCBzaXplb2YoRlhfRFdPUkQpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX1NhdmluZ0J1Zi5BcHBlbmRCbG9jaygmaSwgc2l6ZW9mKEZYX0RXT1JEKSk7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKK30KK0NGWF9BcmNoaXZlU2F2ZXImIENGWF9BcmNoaXZlU2F2ZXI6Om9wZXJhdG9yIDw8IChGWF9GTE9BVCBmKQoreworICAgIGlmIChtX3BTdHJlYW0pIHsKKyAgICAgICAgbV9wU3RyZWFtLT5Xcml0ZUJsb2NrKCZmLCBzaXplb2YoRlhfRkxPQVQpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX1NhdmluZ0J1Zi5BcHBlbmRCbG9jaygmZiwgc2l6ZW9mKEZYX0ZMT0FUKSk7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKK30KK0NGWF9BcmNoaXZlU2F2ZXImIENGWF9BcmNoaXZlU2F2ZXI6Om9wZXJhdG9yIDw8IChGWF9CU1RSIGJzdHIpCit7CisgICAgaW50IGxlbiA9IGJzdHIuR2V0TGVuZ3RoKCk7CisgICAgaWYgKG1fcFN0cmVhbSkgeworICAgICAgICBtX3BTdHJlYW0tPldyaXRlQmxvY2soJmxlbiwgc2l6ZW9mKGludCkpOworICAgICAgICBtX3BTdHJlYW0tPldyaXRlQmxvY2soYnN0ciwgbGVuKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX1NhdmluZ0J1Zi5BcHBlbmRCbG9jaygmbGVuLCBzaXplb2YoaW50KSk7CisgICAgICAgIG1fU2F2aW5nQnVmLkFwcGVuZEJsb2NrKGJzdHIsIGxlbik7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKK30KK0NGWF9BcmNoaXZlU2F2ZXImIENGWF9BcmNoaXZlU2F2ZXI6Om9wZXJhdG9yIDw8IChGWF9MUENXU1RSIHdzdHIpCit7CisgICAgRlhfU1RSU0laRSBsZW4gPSAoRlhfU1RSU0laRSlGWFNZU193Y3NsZW4od3N0cik7CisgICAgaWYgKG1fcFN0cmVhbSkgeworICAgICAgICBtX3BTdHJlYW0tPldyaXRlQmxvY2soJmxlbiwgc2l6ZW9mKGludCkpOworICAgICAgICBtX3BTdHJlYW0tPldyaXRlQmxvY2sod3N0ciwgbGVuKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX1NhdmluZ0J1Zi5BcHBlbmRCbG9jaygmbGVuLCBzaXplb2YoaW50KSk7CisgICAgICAgIG1fU2F2aW5nQnVmLkFwcGVuZEJsb2NrKHdzdHIsIGxlbik7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKK30KK0NGWF9BcmNoaXZlU2F2ZXImIENGWF9BcmNoaXZlU2F2ZXI6Om9wZXJhdG9yIDw8IChjb25zdCBDRlhfV2lkZVN0cmluZyYgd3N0cikKK3sKKyAgICBDRlhfQnl0ZVN0cmluZyBlbmNvZGVkID0gd3N0ci5VVEYxNkxFX0VuY29kZSgpOworICAgIHJldHVybiBvcGVyYXRvciA8PCAoZW5jb2RlZCk7Cit9Cit2b2lkIENGWF9BcmNoaXZlU2F2ZXI6OldyaXRlKGNvbnN0IHZvaWQqIHBEYXRhLCBGWF9TVFJTSVpFIGR3U2l6ZSkKK3sKKyAgICBpZiAobV9wU3RyZWFtKSB7CisgICAgICAgIG1fcFN0cmVhbS0+V3JpdGVCbG9jayhwRGF0YSwgZHdTaXplKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX1NhdmluZ0J1Zi5BcHBlbmRCbG9jayhwRGF0YSwgZHdTaXplKTsKKyAgICB9Cit9CitDRlhfQXJjaGl2ZUxvYWRlcjo6Q0ZYX0FyY2hpdmVMb2FkZXIoRlhfTFBDQllURSBwRGF0YSwgRlhfRFdPUkQgZHdTaXplKQoreworICAgIG1fcExvYWRpbmdCdWYgPSBwRGF0YTsKKyAgICBtX0xvYWRpbmdQb3MgPSAwOworICAgIG1fTG9hZGluZ1NpemUgPSBkd1NpemU7Cit9CitGWF9CT09MIENGWF9BcmNoaXZlTG9hZGVyOjpJc0VPRigpCit7CisgICAgcmV0dXJuIG1fTG9hZGluZ1BvcyA+PSBtX0xvYWRpbmdTaXplOworfQorQ0ZYX0FyY2hpdmVMb2FkZXImIENGWF9BcmNoaXZlTG9hZGVyOjpvcGVyYXRvciA+PiAoRlhfQllURSYgaSkKK3sKKyAgICBpZiAobV9Mb2FkaW5nUG9zID49IG1fTG9hZGluZ1NpemUpIHsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICBpID0gbV9wTG9hZGluZ0J1ZlttX0xvYWRpbmdQb3MrK107CisgICAgcmV0dXJuICp0aGlzOworfQorQ0ZYX0FyY2hpdmVMb2FkZXImIENGWF9BcmNoaXZlTG9hZGVyOjpvcGVyYXRvciA+PiAoaW50JiBpKQoreworICAgIFJlYWQoJmksIHNpemVvZihpbnQpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CitDRlhfQXJjaGl2ZUxvYWRlciYgQ0ZYX0FyY2hpdmVMb2FkZXI6Om9wZXJhdG9yID4+IChGWF9EV09SRCYgaSkKK3sKKyAgICBSZWFkKCZpLCBzaXplb2YoRlhfRFdPUkQpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CitDRlhfQXJjaGl2ZUxvYWRlciYgQ0ZYX0FyY2hpdmVMb2FkZXI6Om9wZXJhdG9yID4+IChGWF9GTE9BVCYgaSkKK3sKKyAgICBSZWFkKCZpLCBzaXplb2YoRlhfRkxPQVQpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CitDRlhfQXJjaGl2ZUxvYWRlciYgQ0ZYX0FyY2hpdmVMb2FkZXI6Om9wZXJhdG9yID4+IChDRlhfQnl0ZVN0cmluZyYgc3RyKQoreworICAgIGlmIChtX0xvYWRpbmdQb3MgKyA0ID4gbV9Mb2FkaW5nU2l6ZSkgeworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIGludCBsZW47CisgICAgb3BlcmF0b3IgPj4gKGxlbik7CisgICAgc3RyLkVtcHR5KCk7CisgICAgaWYgKGxlbiA8PSAwIHx8IG1fTG9hZGluZ1BvcyArIGxlbiA+IG1fTG9hZGluZ1NpemUpIHsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICBGWF9MUFNUUiBidWZmZXIgPSBzdHIuR2V0QnVmZmVyKGxlbik7CisgICAgRlhTWVNfbWVtY3B5MzIoYnVmZmVyLCBtX3BMb2FkaW5nQnVmICsgbV9Mb2FkaW5nUG9zLCBsZW4pOworICAgIHN0ci5SZWxlYXNlQnVmZmVyKGxlbik7CisgICAgbV9Mb2FkaW5nUG9zICs9IGxlbjsKKyAgICByZXR1cm4gKnRoaXM7Cit9CitDRlhfQXJjaGl2ZUxvYWRlciYgQ0ZYX0FyY2hpdmVMb2FkZXI6Om9wZXJhdG9yID4+IChDRlhfV2lkZVN0cmluZyYgc3RyKQoreworICAgIENGWF9CeXRlU3RyaW5nIGVuY29kZWQ7CisgICAgb3BlcmF0b3IgPj4gKGVuY29kZWQpOworICAgIHN0ciA9IENGWF9XaWRlU3RyaW5nOjpGcm9tVVRGMTZMRSgoY29uc3QgdW5zaWduZWQgc2hvcnQqKShGWF9MUENTVFIpZW5jb2RlZCwgZW5jb2RlZC5HZXRMZW5ndGgoKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorRlhfQk9PTCBDRlhfQXJjaGl2ZUxvYWRlcjo6UmVhZCh2b2lkKiBwQnVmLCBGWF9EV09SRCBkd1NpemUpCit7CisgICAgaWYgKG1fTG9hZGluZ1BvcyArIGR3U2l6ZSA+IG1fTG9hZGluZ1NpemUpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWFNZU19tZW1jcHkzMihwQnVmLCBtX3BMb2FkaW5nQnVmICsgbV9Mb2FkaW5nUG9zLCBkd1NpemUpOworICAgIG1fTG9hZGluZ1BvcyArPSBkd1NpemU7CisgICAgcmV0dXJuIFRSVUU7Cit9Cit2b2lkIENGWF9CaXRTdHJlYW06OkluaXQoRlhfTFBDQllURSBwRGF0YSwgRlhfRFdPUkQgZHdTaXplKQoreworICAgIG1fcERhdGEgPSBwRGF0YTsKKyAgICBtX0JpdFNpemUgPSBkd1NpemUgKiA4OworICAgIG1fQml0UG9zID0gMDsKK30KK3ZvaWQgQ0ZYX0JpdFN0cmVhbTo6Qnl0ZUFsaWduKCkKK3sKKyAgICBpbnQgbW9kID0gbV9CaXRQb3MgJSA4OworICAgIGlmIChtb2QgPT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fQml0UG9zICs9IDggLSBtb2Q7Cit9CitGWF9EV09SRCBDRlhfQml0U3RyZWFtOjpHZXRCaXRzKEZYX0RXT1JEIG5CaXRzKQoreworICAgIGlmIChuQml0cyA+IG1fQml0U2l6ZSB8fCBtX0JpdFBvcyArIG5CaXRzID4gbV9CaXRTaXplKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAobkJpdHMgPT0gMSkgeworICAgICAgICBpbnQgYml0ID0gKG1fcERhdGFbbV9CaXRQb3MgLyA4XSAmICgxIDw8ICg3IC0gbV9CaXRQb3MgJSA4KSkpID8gMSA6IDA7CisgICAgICAgIG1fQml0UG9zICsrOworICAgICAgICByZXR1cm4gYml0OworICAgIH0KKyAgICBGWF9EV09SRCBieXRlX3BvcyA9IG1fQml0UG9zIC8gODsKKyAgICBGWF9EV09SRCBiaXRfcG9zID0gbV9CaXRQb3MgJSA4LCBiaXRfbGVmdCA9IG5CaXRzOworICAgIEZYX0RXT1JEIHJlc3VsdCA9IDA7CisgICAgaWYgKGJpdF9wb3MpIHsKKyAgICAgICAgaWYgKDggLSBiaXRfcG9zID49IGJpdF9sZWZ0KSB7CisgICAgICAgICAgICByZXN1bHQgPSAobV9wRGF0YVtieXRlX3Bvc10gJiAoMHhmZiA+PiBiaXRfcG9zKSkgPj4gKDggLSBiaXRfcG9zIC0gYml0X2xlZnQpOworICAgICAgICAgICAgbV9CaXRQb3MgKz0gYml0X2xlZnQ7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGJpdF9sZWZ0IC09IDggLSBiaXRfcG9zOworICAgICAgICByZXN1bHQgPSAobV9wRGF0YVtieXRlX3BvcysrXSAmICgoMSA8PCAoOCAtIGJpdF9wb3MpKSAtIDEpKSA8PCBiaXRfbGVmdDsKKyAgICB9CisgICAgd2hpbGUgKGJpdF9sZWZ0ID49IDgpIHsKKyAgICAgICAgYml0X2xlZnQgLT0gODsKKyAgICAgICAgcmVzdWx0IHw9IG1fcERhdGFbYnl0ZV9wb3MrK10gPDwgYml0X2xlZnQ7CisgICAgfQorICAgIGlmIChiaXRfbGVmdCkgeworICAgICAgICByZXN1bHQgfD0gbV9wRGF0YVtieXRlX3Bvc10gPj4gKDggLSBiaXRfbGVmdCk7CisgICAgfQorICAgIG1fQml0UG9zICs9IG5CaXRzOworICAgIHJldHVybiByZXN1bHQ7Cit9CitJRlhfQnVmZmVyQXJjaGl2ZTo6SUZYX0J1ZmZlckFyY2hpdmUoRlhfU1RSU0laRSBzaXplLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQorICAgIDogbV9wQWxsb2NhdG9yKHBBbGxvY2F0b3IpCisgICAgLCBtX0J1ZlNpemUoc2l6ZSkKKyAgICAsIG1fcEJ1ZmZlcihOVUxMKQorICAgICwgbV9MZW5ndGgoMCkKK3sKK30KK3ZvaWQgSUZYX0J1ZmZlckFyY2hpdmU6OkNsZWFyKCkKK3sKKyAgICBtX0xlbmd0aCA9IDA7CisgICAgaWYgKG1fcEJ1ZmZlcikgeworICAgICAgICBGWF9BbGxvY2F0b3JfRnJlZShtX3BBbGxvY2F0b3IsIG1fcEJ1ZmZlcik7CisgICAgICAgIG1fcEJ1ZmZlciA9IE5VTEw7CisgICAgfQorfQorRlhfQk9PTCBJRlhfQnVmZmVyQXJjaGl2ZTo6Rmx1c2goKQoreworICAgIEZYX0JPT0wgYlJldCA9IERvV29yayhtX3BCdWZmZXIsIG1fTGVuZ3RoKTsKKyAgICBtX0xlbmd0aCA9IDA7CisgICAgcmV0dXJuIGJSZXQ7Cit9CitGWF9JTlQzMiBJRlhfQnVmZmVyQXJjaGl2ZTo6QXBwZW5kQmxvY2soY29uc3Qgdm9pZCogcEJ1Ziwgc2l6ZV90IHNpemUpCit7CisgICAgaWYgKCFwQnVmIHx8IHNpemUgPCAxKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoIW1fcEJ1ZmZlcikgeworICAgICAgICBtX3BCdWZmZXIgPSBGWF9BbGxvY2F0b3JfQWxsb2MobV9wQWxsb2NhdG9yLCBGWF9CWVRFLCBtX0J1ZlNpemUpOworICAgICAgICBpZiAoIW1fcEJ1ZmZlcikgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIEZYX0xQQllURSBidWZmZXIgPSAoRlhfTFBCWVRFKXBCdWY7CisgICAgRlhfU1RSU0laRSB0ZW1wX3NpemUgPSAoRlhfU1RSU0laRSlzaXplOworICAgIHdoaWxlICh0ZW1wX3NpemUgPiAwKSB7CisgICAgICAgIEZYX1NUUlNJWkUgYnVmX3NpemUgPSBGWF9NSU4obV9CdWZTaXplIC0gbV9MZW5ndGgsIChGWF9TVFJTSVpFKXRlbXBfc2l6ZSk7CisgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcEJ1ZmZlciArIG1fTGVuZ3RoLCBidWZmZXIsIGJ1Zl9zaXplKTsKKyAgICAgICAgbV9MZW5ndGggKz0gYnVmX3NpemU7CisgICAgICAgIGlmIChtX0xlbmd0aCA9PSBtX0J1ZlNpemUpIHsKKyAgICAgICAgICAgIGlmICghRmx1c2goKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0ZW1wX3NpemUgLT0gYnVmX3NpemU7CisgICAgICAgIGJ1ZmZlciArPSBidWZfc2l6ZTsKKyAgICB9CisgICAgcmV0dXJuIChGWF9JTlQzMilzaXplOworfQorRlhfSU5UMzIgSUZYX0J1ZmZlckFyY2hpdmU6OkFwcGVuZEJ5dGUoRlhfQllURSBieXRlKQoreworICAgIHJldHVybiBBcHBlbmRCbG9jaygmYnl0ZSwgMSk7Cit9CitGWF9JTlQzMiBJRlhfQnVmZmVyQXJjaGl2ZTo6QXBwZW5kRFdvcmQoRlhfRFdPUkQgaSkKK3sKKyAgICBjaGFyIGJ1ZlszMl07CisgICAgRlhTWVNfaXRvYShpLCBidWYsIDEwKTsKKyAgICByZXR1cm4gQXBwZW5kQmxvY2soYnVmLCAoc2l6ZV90KUZYU1lTX3N0cmxlbihidWYpKTsKK30KK0ZYX0lOVDMyIElGWF9CdWZmZXJBcmNoaXZlOjpBcHBlbmRTdHJpbmcoRlhfQlNUUiBscHN6KQoreworICAgIHJldHVybiBBcHBlbmRCbG9jaygoRlhfTFBDQllURSlscHN6LCBscHN6LkdldExlbmd0aCgpKTsKK30KK0NGWF9GaWxlQnVmZmVyQXJjaGl2ZTo6Q0ZYX0ZpbGVCdWZmZXJBcmNoaXZlKEZYX1NUUlNJWkUgc2l6ZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikKKyAgICA6IElGWF9CdWZmZXJBcmNoaXZlKHNpemUsIHBBbGxvY2F0b3IpCisgICAgLCBtX3BGaWxlKE5VTEwpCisgICAgLCBtX2JUYWtlb3ZlcihGQUxTRSkKK3sKK30KK0NGWF9GaWxlQnVmZmVyQXJjaGl2ZTo6fkNGWF9GaWxlQnVmZmVyQXJjaGl2ZSgpCit7CisgICAgQ2xlYXIoKTsKK30KK3ZvaWQgQ0ZYX0ZpbGVCdWZmZXJBcmNoaXZlOjpDbGVhcigpCit7CisgICAgaWYgKG1fcEZpbGUgJiYgbV9iVGFrZW92ZXIpIHsKKyAgICAgICAgbV9wRmlsZS0+UmVsZWFzZSgpOworICAgIH0KKyAgICBtX3BGaWxlID0gTlVMTDsKKyAgICBtX2JUYWtlb3ZlciA9IEZBTFNFOworICAgIElGWF9CdWZmZXJBcmNoaXZlOjpDbGVhcigpOworfQorRlhfQk9PTCBDRlhfRmlsZUJ1ZmZlckFyY2hpdmU6OkF0dGFjaEZpbGUoSUZYX1N0cmVhbVdyaXRlICpwRmlsZSwgRlhfQk9PTCBiVGFrZW92ZXIgKQoreworICAgIGlmICghcEZpbGUpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAobV9wRmlsZSAmJiBtX2JUYWtlb3ZlcikgeworICAgICAgICBtX3BGaWxlLT5SZWxlYXNlKCk7CisgICAgfQorICAgIG1fcEZpbGUgPSBwRmlsZTsKKyAgICBtX2JUYWtlb3ZlciA9IGJUYWtlb3ZlcjsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0ZYX0ZpbGVCdWZmZXJBcmNoaXZlOjpBdHRhY2hGaWxlKEZYX0xQQ1dTVFIgZmlsZW5hbWUpCit7CisgICAgaWYgKCFmaWxlbmFtZSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChtX3BGaWxlICYmIG1fYlRha2VvdmVyKSB7CisgICAgICAgIG1fcEZpbGUtPlJlbGVhc2UoKTsKKyAgICB9CisgICAgbV9wRmlsZSA9IEZYX0NyZWF0ZUZpbGVXcml0ZShmaWxlbmFtZSk7CisgICAgaWYgKCFtX3BGaWxlKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9iVGFrZW92ZXIgPSBUUlVFOworICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDRlhfRmlsZUJ1ZmZlckFyY2hpdmU6OkF0dGFjaEZpbGUoRlhfTFBDU1RSIGZpbGVuYW1lKQoreworICAgIGlmICghZmlsZW5hbWUpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAobV9wRmlsZSAmJiBtX2JUYWtlb3ZlcikgeworICAgICAgICBtX3BGaWxlLT5SZWxlYXNlKCk7CisgICAgfQorICAgIG1fcEZpbGUgPSBGWF9DcmVhdGVGaWxlV3JpdGUoZmlsZW5hbWUpOworICAgIGlmICghbV9wRmlsZSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fYlRha2VvdmVyID0gVFJVRTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0ZYX0ZpbGVCdWZmZXJBcmNoaXZlOjpEb1dvcmsoY29uc3Qgdm9pZCogcEJ1Ziwgc2l6ZV90IHNpemUpCit7CisgICAgaWYgKCFtX3BGaWxlKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKCFwQnVmIHx8IHNpemUgPCAxKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gbV9wRmlsZS0+V3JpdGVCbG9jayhwQnVmLCBzaXplKTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX2Nvb3Jkcy5jcHAgYi9jb3JlL3NyYy9meGNydC9meF9iYXNpY19jb29yZHMuY3BwCmluZGV4IDQ3MjA0ZTAuLmY1NWMyNjcgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX2Nvb3Jkcy5jcHAKKysrIGIvY29yZS9zcmMvZnhjcnQvZnhfYmFzaWNfY29vcmRzLmNwcApAQCAtMSw1NTYgKzEsNTU2IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGNydC9meF9leHQuaCINCi12b2lkIEZYX1JFQ1Q6Ok5vcm1hbGl6ZSgpDQotew0KLSAgICBpZiAobGVmdCA+IHJpZ2h0KSB7DQotICAgICAgICBpbnQgdGVtcCA9IGxlZnQ7DQotICAgICAgICBsZWZ0ID0gcmlnaHQ7DQotICAgICAgICByaWdodCA9IHRlbXA7DQotICAgIH0NCi0gICAgaWYgKHRvcCA+IGJvdHRvbSkgew0KLSAgICAgICAgaW50IHRlbXAgPSB0b3A7DQotICAgICAgICB0b3AgPSBib3R0b207DQotICAgICAgICBib3R0b20gPSB0ZW1wOw0KLSAgICB9DQotfQ0KLXZvaWQgRlhfUkVDVDo6SW50ZXJzZWN0KGNvbnN0IEZYX1JFQ1QmIHNyYykNCi17DQotICAgIEZYX1JFQ1Qgc3JjX24gPSBzcmM7DQotICAgIHNyY19uLk5vcm1hbGl6ZSgpOw0KLSAgICBOb3JtYWxpemUoKTsNCi0gICAgbGVmdCA9IGxlZnQgPiBzcmNfbi5sZWZ0ID8gbGVmdCA6IHNyY19uLmxlZnQ7DQotICAgIHRvcCA9IHRvcCA+IHNyY19uLnRvcCA/IHRvcCA6IHNyY19uLnRvcDsNCi0gICAgcmlnaHQgPSByaWdodCA8IHNyY19uLnJpZ2h0ID8gcmlnaHQgOiBzcmNfbi5yaWdodDsNCi0gICAgYm90dG9tID0gYm90dG9tIDwgc3JjX24uYm90dG9tID8gYm90dG9tIDogc3JjX24uYm90dG9tOw0KLSAgICBpZiAobGVmdCA+IHJpZ2h0IHx8IHRvcCA+IGJvdHRvbSkgew0KLSAgICAgICAgbGVmdCA9IHRvcCA9IHJpZ2h0ID0gYm90dG9tID0gMDsNCi0gICAgfQ0KLX0NCi12b2lkIEZYX1JFQ1Q6OlVuaW9uKGNvbnN0IEZYX1JFQ1QmIG90aGVyX3JlY3QpDQotew0KLSAgICBOb3JtYWxpemUoKTsNCi0gICAgRlhfUkVDVCBvdGhlciA9IG90aGVyX3JlY3Q7DQotICAgIG90aGVyLk5vcm1hbGl6ZSgpOw0KLSAgICBsZWZ0ID0gbGVmdCA8IG90aGVyLmxlZnQgPyBsZWZ0IDogb3RoZXIubGVmdDsNCi0gICAgcmlnaHQgPSByaWdodCA+IG90aGVyLnJpZ2h0ID8gcmlnaHQgOiBvdGhlci5yaWdodDsNCi0gICAgYm90dG9tID0gYm90dG9tID4gb3RoZXIuYm90dG9tID8gYm90dG9tIDogb3RoZXIuYm90dG9tOw0KLSAgICB0b3AgPSB0b3AgPCBvdGhlci50b3AgPyB0b3AgOiBvdGhlci50b3A7DQotfQ0KLUZYX0JPT0wgR2V0SW50ZXJzZWN0aW9uKEZYX0ZMT0FUIGxvdzEsIEZYX0ZMT0FUIGhpZ2gxLCBGWF9GTE9BVCBsb3cyLCBGWF9GTE9BVCBoaWdoMiwNCi0gICAgICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCYgaW50ZXJsb3csIEZYX0ZMT0FUJiBpbnRlcmhpZ2gpDQotew0KLSAgICBpZiAobG93MSA+PSBoaWdoMiB8fCBsb3cyID49IGhpZ2gxKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaW50ZXJsb3cgPSBsb3cxID4gbG93MiA/IGxvdzEgOiBsb3cyOw0KLSAgICBpbnRlcmhpZ2ggPSBoaWdoMSA+IGhpZ2gyID8gaGlnaDIgOiBoaWdoMTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLWV4dGVybiAiQyIgaW50IEZYU1lTX3JvdW5kKEZYX0ZMT0FUIGQpDQotew0KLSAgICBpbnQgaVJldCA9IDA7DQotICAgIGlmIChkID49IDAuMGYpIHsNCi0gICAgICAgIGlSZXQgPSAoaW50KShkICsgMC41Zik7DQotICAgICAgICBpZiAoaVJldCA+PSAwKSB7DQotICAgICAgICAgICAgcmV0dXJuIGlSZXQ7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gLWlSZXQ7DQotICAgIH0NCi0gICAgcmV0dXJuIChpbnQpKGQgLSAwLjVmKTsNCi19DQotQ0ZYX0Zsb2F0UmVjdDo6Q0ZYX0Zsb2F0UmVjdChjb25zdCBGWF9SRUNUJiByZWN0KQ0KLXsNCi0gICAgbGVmdCA9IChGWF9GTE9BVCkocmVjdC5sZWZ0KTsNCi0gICAgcmlnaHQgPSAoRlhfRkxPQVQpKHJlY3QucmlnaHQpOw0KLSAgICBib3R0b20gPSAoRlhfRkxPQVQpKHJlY3QudG9wKTsNCi0gICAgdG9wID0gKEZYX0ZMT0FUKShyZWN0LmJvdHRvbSk7DQotfQ0KLXZvaWQgQ0ZYX0Zsb2F0UmVjdDo6Tm9ybWFsaXplKCkNCi17DQotICAgIEZYX0ZMT0FUIHRlbXA7DQotICAgIGlmIChsZWZ0ID4gcmlnaHQpIHsNCi0gICAgICAgIHRlbXAgPSBsZWZ0Ow0KLSAgICAgICAgbGVmdCA9IHJpZ2h0Ow0KLSAgICAgICAgcmlnaHQgPSB0ZW1wOw0KLSAgICB9DQotICAgIGlmIChib3R0b20gPiB0b3ApIHsNCi0gICAgICAgIHRlbXAgPSB0b3A7DQotICAgICAgICB0b3AgPSBib3R0b207DQotICAgICAgICBib3R0b20gPSB0ZW1wOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0ZYX0Zsb2F0UmVjdDo6SW50ZXJzZWN0KGNvbnN0IENGWF9GbG9hdFJlY3QmIG90aGVyX3JlY3QpDQotew0KLSAgICBOb3JtYWxpemUoKTsNCi0gICAgQ0ZYX0Zsb2F0UmVjdCBvdGhlciA9IG90aGVyX3JlY3Q7DQotICAgIG90aGVyLk5vcm1hbGl6ZSgpOw0KLSAgICBsZWZ0ID0gbGVmdCA+IG90aGVyLmxlZnQgPyBsZWZ0IDogb3RoZXIubGVmdDsNCi0gICAgcmlnaHQgPSByaWdodCA8IG90aGVyLnJpZ2h0ID8gcmlnaHQgOiBvdGhlci5yaWdodDsNCi0gICAgYm90dG9tID0gYm90dG9tID4gb3RoZXIuYm90dG9tID8gYm90dG9tIDogb3RoZXIuYm90dG9tOw0KLSAgICB0b3AgPSB0b3AgPCBvdGhlci50b3AgPyB0b3AgOiBvdGhlci50b3A7DQotICAgIGlmIChsZWZ0ID4gcmlnaHQgfHwgYm90dG9tID4gdG9wKSB7DQotICAgICAgICBsZWZ0ID0gcmlnaHQgPSBib3R0b20gPSB0b3AgPSAwOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0ZYX0Zsb2F0UmVjdDo6VW5pb24oY29uc3QgQ0ZYX0Zsb2F0UmVjdCYgb3RoZXJfcmVjdCkNCi17DQotICAgIE5vcm1hbGl6ZSgpOw0KLSAgICBDRlhfRmxvYXRSZWN0IG90aGVyID0gb3RoZXJfcmVjdDsNCi0gICAgb3RoZXIuTm9ybWFsaXplKCk7DQotICAgIGxlZnQgPSBsZWZ0IDwgb3RoZXIubGVmdCA/IGxlZnQgOiBvdGhlci5sZWZ0Ow0KLSAgICByaWdodCA9IHJpZ2h0ID4gb3RoZXIucmlnaHQgPyByaWdodCA6IG90aGVyLnJpZ2h0Ow0KLSAgICBib3R0b20gPSBib3R0b20gPCBvdGhlci5ib3R0b20gPyBib3R0b20gOiBvdGhlci5ib3R0b207DQotICAgIHRvcCA9IHRvcCA+IG90aGVyLnRvcCA/IHRvcCA6IG90aGVyLnRvcDsNCi19DQotdm9pZCBDRlhfRmxvYXRSZWN0OjpUcmFuc2Zvcm0oY29uc3QgQ0ZYX01hdHJpeCogcE1hdHJpeCkNCi17DQotICAgIHBNYXRyaXgtPlRyYW5zZm9ybVJlY3QobGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tKTsNCi19DQotaW50IENGWF9GbG9hdFJlY3Q6OlN1YnN0cmFjdDQoQ0ZYX0Zsb2F0UmVjdCYgcywgQ0ZYX0Zsb2F0UmVjdCogcFJlY3RzKQ0KLXsNCi0gICAgTm9ybWFsaXplKCk7DQotICAgIHMuTm9ybWFsaXplKCk7DQotICAgIGludCBuUmVjdHMgPSAwOw0KLSAgICBDRlhfRmxvYXRSZWN0IHJlY3RzWzRdOw0KLSAgICBpZiAobGVmdCA8IHMubGVmdCkgew0KLSAgICAgICAgcmVjdHNbblJlY3RzXS5sZWZ0ID0gbGVmdDsNCi0gICAgICAgIHJlY3RzW25SZWN0c10ucmlnaHQgPSBzLmxlZnQ7DQotICAgICAgICByZWN0c1tuUmVjdHNdLmJvdHRvbSA9IGJvdHRvbTsNCi0gICAgICAgIHJlY3RzW25SZWN0c10udG9wID0gdG9wOw0KLSAgICAgICAgblJlY3RzICsrOw0KLSAgICB9DQotICAgIGlmIChzLmxlZnQgPCByaWdodCAmJiBzLnRvcCA8IHRvcCkgew0KLSAgICAgICAgcmVjdHNbblJlY3RzXS5sZWZ0ID0gcy5sZWZ0Ow0KLSAgICAgICAgcmVjdHNbblJlY3RzXS5yaWdodCA9IHJpZ2h0Ow0KLSAgICAgICAgcmVjdHNbblJlY3RzXS5ib3R0b20gPSBzLnRvcDsNCi0gICAgICAgIHJlY3RzW25SZWN0c10udG9wID0gdG9wOw0KLSAgICAgICAgblJlY3RzICsrOw0KLSAgICB9DQotICAgIGlmIChzLnRvcCA+IGJvdHRvbSAmJiBzLnJpZ2h0IDwgcmlnaHQpIHsNCi0gICAgICAgIHJlY3RzW25SZWN0c10ubGVmdCA9IHMucmlnaHQ7DQotICAgICAgICByZWN0c1tuUmVjdHNdLnJpZ2h0ID0gcmlnaHQ7DQotICAgICAgICByZWN0c1tuUmVjdHNdLmJvdHRvbSA9IGJvdHRvbTsNCi0gICAgICAgIHJlY3RzW25SZWN0c10udG9wID0gcy50b3A7DQotICAgICAgICBuUmVjdHMgKys7DQotICAgIH0NCi0gICAgaWYgKHMuYm90dG9tID4gYm90dG9tKSB7DQotICAgICAgICByZWN0c1tuUmVjdHNdLmxlZnQgPSBzLmxlZnQ7DQotICAgICAgICByZWN0c1tuUmVjdHNdLnJpZ2h0ID0gcy5yaWdodDsNCi0gICAgICAgIHJlY3RzW25SZWN0c10uYm90dG9tID0gYm90dG9tOw0KLSAgICAgICAgcmVjdHNbblJlY3RzXS50b3AgPSBzLmJvdHRvbTsNCi0gICAgICAgIG5SZWN0cyArKzsNCi0gICAgfQ0KLSAgICBpZiAoblJlY3RzID09IDApIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgblJlY3RzOyBpICsrKSB7DQotICAgICAgICBwUmVjdHNbaV0gPSByZWN0c1tpXTsNCi0gICAgICAgIHBSZWN0c1tpXS5JbnRlcnNlY3QoKnRoaXMpOw0KLSAgICB9DQotICAgIHJldHVybiBuUmVjdHM7DQotfQ0KLUZYX1JFQ1QgQ0ZYX0Zsb2F0UmVjdDo6R2V0T3V0dGVyUmVjdCgpIGNvbnN0DQotew0KLSAgICBDRlhfRmxvYXRSZWN0IHJlY3QxID0gKnRoaXM7DQotICAgIEZYX1JFQ1QgcmVjdDsNCi0gICAgcmVjdC5sZWZ0ID0gKGludClGWFNZU19mbG9vcihyZWN0MS5sZWZ0KTsNCi0gICAgcmVjdC5yaWdodCA9IChpbnQpRlhTWVNfY2VpbChyZWN0MS5yaWdodCk7DQotICAgIHJlY3QudG9wID0gKGludClGWFNZU19mbG9vcihyZWN0MS5ib3R0b20pOw0KLSAgICByZWN0LmJvdHRvbSA9IChpbnQpRlhTWVNfY2VpbChyZWN0MS50b3ApOw0KLSAgICByZWN0Lk5vcm1hbGl6ZSgpOw0KLSAgICByZXR1cm4gcmVjdDsNCi19DQotRlhfUkVDVCBDRlhfRmxvYXRSZWN0OjpHZXRJbm5lclJlY3QoKSBjb25zdA0KLXsNCi0gICAgQ0ZYX0Zsb2F0UmVjdCByZWN0MSA9ICp0aGlzOw0KLSAgICBGWF9SRUNUIHJlY3Q7DQotICAgIHJlY3QubGVmdCA9IChpbnQpRlhTWVNfY2VpbChyZWN0MS5sZWZ0KTsNCi0gICAgcmVjdC5yaWdodCA9IChpbnQpRlhTWVNfZmxvb3IocmVjdDEucmlnaHQpOw0KLSAgICByZWN0LnRvcCA9IChpbnQpRlhTWVNfY2VpbChyZWN0MS5ib3R0b20pOw0KLSAgICByZWN0LmJvdHRvbSA9IChpbnQpRlhTWVNfZmxvb3IocmVjdDEudG9wKTsNCi0gICAgcmVjdC5Ob3JtYWxpemUoKTsNCi0gICAgcmV0dXJuIHJlY3Q7DQotfQ0KLXN0YXRpYyB2b2lkIF9NYXRjaEZsb2F0UmFuZ2UoRlhfRkxPQVQgZjEsIEZYX0ZMT0FUIGYyLCBpbnQmIGkxLCBpbnQmIGkyKQ0KLXsNCi0gICAgaW50IGxlbmd0aCA9IChpbnQpRlhTWVNfY2VpbChmMiAtIGYxKTsNCi0gICAgaW50IGkxXzEgPSAoaW50KUZYU1lTX2Zsb29yKGYxKTsNCi0gICAgaW50IGkxXzIgPSAoaW50KUZYU1lTX2NlaWwoZjEpOw0KLSAgICBGWF9GTE9BVCBlcnJvcjEgPSBmMSAtIGkxXzEgKyAoRlhfRkxPQVQpRlhTWVNfZmFicyhmMiAtIGkxXzEgLSBsZW5ndGgpOw0KLSAgICBGWF9GTE9BVCBlcnJvcjIgPSBpMV8yIC0gZjEgKyAoRlhfRkxPQVQpRlhTWVNfZmFicyhmMiAtIGkxXzIgLSBsZW5ndGgpOw0KLSAgICBpMSA9IChlcnJvcjEgPiBlcnJvcjIpID8gaTFfMiA6IGkxXzE7DQotICAgIGkyID0gaTEgKyBsZW5ndGg7DQotfQ0KLUZYX1JFQ1QgQ0ZYX0Zsb2F0UmVjdDo6R2V0Q2xvc2VzdFJlY3QoKSBjb25zdA0KLXsNCi0gICAgQ0ZYX0Zsb2F0UmVjdCByZWN0MSA9ICp0aGlzOw0KLSAgICBGWF9SRUNUIHJlY3Q7DQotICAgIF9NYXRjaEZsb2F0UmFuZ2UocmVjdDEubGVmdCwgcmVjdDEucmlnaHQsIHJlY3QubGVmdCwgcmVjdC5yaWdodCk7DQotICAgIF9NYXRjaEZsb2F0UmFuZ2UocmVjdDEuYm90dG9tLCByZWN0MS50b3AsIHJlY3QudG9wLCByZWN0LmJvdHRvbSk7DQotICAgIHJlY3QuTm9ybWFsaXplKCk7DQotICAgIHJldHVybiByZWN0Ow0KLX0NCi1GWF9CT09MIENGWF9GbG9hdFJlY3Q6OkNvbnRhaW5zKGNvbnN0IENGWF9GbG9hdFJlY3QmIG90aGVyX3JlY3QpIGNvbnN0DQotew0KLSAgICBDRlhfRmxvYXRSZWN0IG4xID0gKnRoaXM7DQotICAgIG4xLk5vcm1hbGl6ZSgpOw0KLSAgICBDRlhfRmxvYXRSZWN0IG4yID0gb3RoZXJfcmVjdDsNCi0gICAgbjIuTm9ybWFsaXplKCk7DQotICAgIGlmIChuMi5sZWZ0ID49IG4xLmxlZnQgJiYgbjIucmlnaHQgPD0gbjEucmlnaHQgJiYgbjIuYm90dG9tID49IG4xLmJvdHRvbSAmJiBuMi50b3AgPD0gbjEudG9wKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUZYX0JPT0wgQ0ZYX0Zsb2F0UmVjdDo6Q29udGFpbnMoRlhfRkxPQVQgeCwgRlhfRkxPQVQgeSkgY29uc3QNCi17DQotICAgIENGWF9GbG9hdFJlY3QgbjEgPSAqdGhpczsNCi0gICAgbjEuTm9ybWFsaXplKCk7DQotICAgIHJldHVybiB4IDw9IG4xLnJpZ2h0ICYmIHggPj0gbjEubGVmdCAmJiB5IDw9IG4xLnRvcCAmJiB5ID49IG4xLmJvdHRvbTsNCi19DQotdm9pZCBDRlhfRmxvYXRSZWN0OjpVcGRhdGVSZWN0KEZYX0ZMT0FUIHgsIEZYX0ZMT0FUIHkpDQotew0KLSAgICBpZiAobGVmdCA+IHgpIHsNCi0gICAgICAgIGxlZnQgPSB4Ow0KLSAgICB9DQotICAgIGlmIChyaWdodCA8IHgpIHsNCi0gICAgICAgIHJpZ2h0ID0geDsNCi0gICAgfQ0KLSAgICBpZiAoYm90dG9tID4geSkgew0KLSAgICAgICAgYm90dG9tID0geTsNCi0gICAgfQ0KLSAgICBpZiAodG9wIDwgeSkgew0KLSAgICAgICAgdG9wID0geTsNCi0gICAgfQ0KLX0NCi1DRlhfRmxvYXRSZWN0IENGWF9GbG9hdFJlY3Q6OkdldEJCb3goY29uc3QgQ0ZYX0Zsb2F0UG9pbnQqIHBQb2ludHMsIGludCBuUG9pbnRzKQ0KLXsNCi0gICAgaWYgKG5Qb2ludHMgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIENGWF9GbG9hdFJlY3QoKTsNCi0gICAgfQ0KLSAgICBGWF9GTE9BVCBtaW5feCA9IHBQb2ludHMtPngsIG1heF94ID0gcFBvaW50cy0+eCwgbWluX3kgPSBwUG9pbnRzLT55LCBtYXhfeSA9IHBQb2ludHMtPnk7DQotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgblBvaW50czsgaSArKykgew0KLSAgICAgICAgaWYgKG1pbl94ID4gcFBvaW50c1tpXS54KSB7DQotICAgICAgICAgICAgbWluX3ggPSBwUG9pbnRzW2ldLng7DQotICAgICAgICB9DQotICAgICAgICBpZiAobWF4X3ggPCBwUG9pbnRzW2ldLngpIHsNCi0gICAgICAgICAgICBtYXhfeCA9IHBQb2ludHNbaV0ueDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtaW5feSA+IHBQb2ludHNbaV0ueSkgew0KLSAgICAgICAgICAgIG1pbl95ID0gcFBvaW50c1tpXS55Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1heF95IDwgcFBvaW50c1tpXS55KSB7DQotICAgICAgICAgICAgbWF4X3kgPSBwUG9pbnRzW2ldLnk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIENGWF9GbG9hdFJlY3QobWluX3gsIG1pbl95LCBtYXhfeCwgbWF4X3kpOw0KLX0NCi12b2lkIENGWF9NYXRyaXg6OlNldChGWF9GTE9BVCBhLCBGWF9GTE9BVCBiLCBGWF9GTE9BVCBjLCBGWF9GTE9BVCBkLCBGWF9GTE9BVCBlLCBGWF9GTE9BVCBmKQ0KLXsNCi0gICAgdGhpcy0+YSA9IGE7DQotICAgIHRoaXMtPmIgPSBiOw0KLSAgICB0aGlzLT5jID0gYzsNCi0gICAgdGhpcy0+ZCA9IGQ7DQotICAgIHRoaXMtPmUgPSBlOw0KLSAgICB0aGlzLT5mID0gZjsNCi19DQotdm9pZCBDRlhfTWF0cml4OjpTZXQoY29uc3QgRlhfRkxPQVQgbls2XSkNCi17DQotICAgIEZYU1lTX21lbWNweTMyKCh2b2lkKil0aGlzLCAmbiwgc2l6ZW9mKENGWF9NYXRyaXgpKTsNCi19DQotdm9pZCBDRlhfTWF0cml4OjpTZXRSZXZlcnNlKGNvbnN0IENGWF9NYXRyaXggJm0pDQotew0KLSAgICBGWF9GTE9BVCBpID0gbS5hICogbS5kIC0gbS5iICogbS5jOw0KLSAgICBpZiAoRlhTWVNfZmFicyhpKSA9PSAwKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhfRkxPQVQgaiA9IC1pOw0KLSAgICBhID0gbS5kIC8gaTsNCi0gICAgYiA9IG0uYiAvIGo7DQotICAgIGMgPSBtLmMgLyBqOw0KLSAgICBkID0gbS5hIC8gaTsNCi0gICAgZSA9IChtLmMgKiBtLmYgLSBtLmQgKiBtLmUpIC8gaTsNCi0gICAgZiA9IChtLmEgKiBtLmYgLSBtLmIgKiBtLmUpIC8gajsNCi19DQotc3RhdGljIHZvaWQgRlhDUlRfTWF0cml4X0NvbmNhdChDRlhfTWF0cml4ICZtLCBjb25zdCBDRlhfTWF0cml4ICZtMSwgY29uc3QgQ0ZYX01hdHJpeCAmbTIpDQotew0KLSAgICBGWF9GTE9BVCBhYSA9IG0xLmEgKiBtMi5hICsgbTEuYiAqIG0yLmM7DQotICAgIEZYX0ZMT0FUIGJiID0gbTEuYSAqIG0yLmIgKyBtMS5iICogbTIuZDsNCi0gICAgRlhfRkxPQVQgY2MgPSBtMS5jICogbTIuYSArIG0xLmQgKiBtMi5jOw0KLSAgICBGWF9GTE9BVCBkZCA9IG0xLmMgKiBtMi5iICsgbTEuZCAqIG0yLmQ7DQotICAgIEZYX0ZMT0FUIGVlID0gbTEuZSAqIG0yLmEgKyBtMS5mICogbTIuYyArIG0yLmU7DQotICAgIEZYX0ZMT0FUIGZmID0gbTEuZSAqIG0yLmIgKyBtMS5mICogbTIuZCArIG0yLmY7DQotICAgIG0uYSA9IGFhLCBtLmIgPSBiYiwgbS5jID0gY2MsIG0uZCA9IGRkLCBtLmUgPSBlZSwgbS5mID0gZmY7DQotfQ0KLXZvaWQgQ0ZYX01hdHJpeDo6Q29uY2F0KEZYX0ZMT0FUIGEsIEZYX0ZMT0FUIGIsIEZYX0ZMT0FUIGMsIEZYX0ZMT0FUIGQsIEZYX0ZMT0FUIGUsIEZYX0ZMT0FUIGYsIEZYX0JPT0wgYlByZXBlbmRlZCkNCi17DQotICAgIENGWF9NYXRyaXggbTsNCi0gICAgbS5TZXQoYSwgYiwgYywgZCwgZSwgZik7DQotICAgIENvbmNhdChtLCBiUHJlcGVuZGVkKTsNCi19DQotdm9pZCBDRlhfTWF0cml4OjpDb25jYXQoY29uc3QgQ0ZYX01hdHJpeCAmbSwgRlhfQk9PTCBiUHJlcGVuZGVkKQ0KLXsNCi0gICAgaWYgKGJQcmVwZW5kZWQpIHsNCi0gICAgICAgIEZYQ1JUX01hdHJpeF9Db25jYXQoKnRoaXMsIG0sICp0aGlzKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEZYQ1JUX01hdHJpeF9Db25jYXQoKnRoaXMsICp0aGlzLCBtKTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9NYXRyaXg6OkNvbmNhdEludmVyc2UoY29uc3QgQ0ZYX01hdHJpeCYgc3JjLCBGWF9CT09MIGJQcmVwZW5kZWQpDQotew0KLSAgICBDRlhfTWF0cml4IG07DQotICAgIG0uU2V0UmV2ZXJzZShzcmMpOw0KLSAgICBDb25jYXQobSwgYlByZXBlbmRlZCk7DQotfQ0KLUZYX0JPT0wgQ0ZYX01hdHJpeDo6SXNJbnZlcnRpYmxlKCkgY29uc3QNCi17DQotICAgIHJldHVybiBGWFNZU19mYWJzKGEgKiBkIC0gYiAqIGMpID49IDAuMDAwMWY7DQotfQ0KLUZYX0JPT0wgQ0ZYX01hdHJpeDo6SXM5MFJvdGF0ZWQoKSBjb25zdA0KLXsNCi0gICAgcmV0dXJuIEZYU1lTX2ZhYnMoYSAqIDEwMDApIDwgRlhTWVNfZmFicyhiKSAmJiBGWFNZU19mYWJzKGQgKiAxMDAwKSA8IEZYU1lTX2ZhYnMoYyk7DQotfQ0KLUZYX0JPT0wgQ0ZYX01hdHJpeDo6SXNTY2FsZWQoKSBjb25zdA0KLXsNCi0gICAgcmV0dXJuIEZYU1lTX2ZhYnMoYiAqIDEwMDApIDwgRlhTWVNfZmFicyhhKSAmJiBGWFNZU19mYWJzKGMgKiAxMDAwKSA8IEZYU1lTX2ZhYnMoZCk7DQotfQ0KLXZvaWQgQ0ZYX01hdHJpeDo6VHJhbnNsYXRlKEZYX0ZMT0FUIHgsIEZYX0ZMT0FUIHksIEZYX0JPT0wgYlByZXBlbmRlZCkNCi17DQotICAgIGlmIChiUHJlcGVuZGVkKSB7DQotICAgICAgICBlICs9IHggKiBhICsgeSAqIGM7DQotICAgICAgICBmICs9IHkgKiBkICsgeCAqIGI7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBlICs9IHgsIGYgKz0geTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9NYXRyaXg6OlNjYWxlKEZYX0ZMT0FUIHN4LCBGWF9GTE9BVCBzeSwgRlhfQk9PTCBiUHJlcGVuZGVkKQ0KLXsNCi0gICAgYSAqPSBzeCwgZCAqPSBzeTsNCi0gICAgaWYgKGJQcmVwZW5kZWQpIHsNCi0gICAgICAgIGIgKj0gc3g7DQotICAgICAgICBjICo9IHN5Ow0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgYiAqPSBzeTsNCi0gICAgICAgIGMgKj0gc3g7DQotICAgICAgICBlICo9IHN4Ow0KLSAgICAgICAgZiAqPSBzeTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9NYXRyaXg6OlJvdGF0ZShGWF9GTE9BVCBmUmFkaWFuLCBGWF9CT09MIGJQcmVwZW5kZWQpDQotew0KLSAgICBGWF9GTE9BVCBjb3NWYWx1ZSA9IEZYU1lTX2NvcyhmUmFkaWFuKTsNCi0gICAgRlhfRkxPQVQgc2luVmFsdWUgPSBGWFNZU19zaW4oZlJhZGlhbik7DQotICAgIENGWF9NYXRyaXggbTsNCi0gICAgbS5TZXQoY29zVmFsdWUsIHNpblZhbHVlLCAtc2luVmFsdWUsIGNvc1ZhbHVlLCAwLCAwKTsNCi0gICAgaWYgKGJQcmVwZW5kZWQpIHsNCi0gICAgICAgIEZYQ1JUX01hdHJpeF9Db25jYXQoKnRoaXMsIG0sICp0aGlzKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEZYQ1JUX01hdHJpeF9Db25jYXQoKnRoaXMsICp0aGlzLCBtKTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9NYXRyaXg6OlJvdGF0ZUF0KEZYX0ZMT0FUIGZSYWRpYW4sIEZYX0ZMT0FUIGR4LCBGWF9GTE9BVCBkeSwgRlhfQk9PTCBiUHJlcGVuZGVkKQ0KLXsNCi0gICAgVHJhbnNsYXRlKGR4LCBkeSwgYlByZXBlbmRlZCk7DQotICAgIFJvdGF0ZShmUmFkaWFuLCBiUHJlcGVuZGVkKTsNCi0gICAgVHJhbnNsYXRlKC1keCwgLWR5LCBiUHJlcGVuZGVkKTsNCi19DQotdm9pZCBDRlhfTWF0cml4OjpTaGVhcihGWF9GTE9BVCBmQWxwaGFSYWRpYW4sIEZYX0ZMT0FUIGZCZXRhUmFkaWFuLCBGWF9CT09MIGJQcmVwZW5kZWQpDQotew0KLSAgICBDRlhfTWF0cml4IG07DQotICAgIG0uU2V0KDEsIEZYU1lTX3RhbihmQWxwaGFSYWRpYW4pLCBGWFNZU190YW4oZkJldGFSYWRpYW4pLCAxLCAwLCAwKTsNCi0gICAgaWYgKGJQcmVwZW5kZWQpIHsNCi0gICAgICAgIEZYQ1JUX01hdHJpeF9Db25jYXQoKnRoaXMsIG0sICp0aGlzKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEZYQ1JUX01hdHJpeF9Db25jYXQoKnRoaXMsICp0aGlzLCBtKTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9NYXRyaXg6Ok1hdGNoUmVjdChjb25zdCBDRlhfRmxvYXRSZWN0JiBkZXN0LCBjb25zdCBDRlhfRmxvYXRSZWN0JiBzcmMpDQotew0KLSAgICBGWF9GTE9BVCBmRGlmZiA9IHNyYy5sZWZ0IC0gc3JjLnJpZ2h0Ow0KLSAgICBhID0gRlhTWVNfZmFicyhmRGlmZikgPCAwLjAwMWYgPyAxIDogKGRlc3QubGVmdCAtIGRlc3QucmlnaHQpIC8gZkRpZmY7DQotICAgIGZEaWZmID0gc3JjLmJvdHRvbSAtIHNyYy50b3A7DQotICAgIGQgPSBGWFNZU19mYWJzKGZEaWZmKSA8IDAuMDAxZiA/IDEgOiAoZGVzdC5ib3R0b20gLSBkZXN0LnRvcCkgLyBmRGlmZjsNCi0gICAgZSA9IGRlc3QubGVmdCAtIHNyYy5sZWZ0ICogYTsNCi0gICAgZiA9IGRlc3QuYm90dG9tIC0gc3JjLmJvdHRvbSAqIGQ7DQotICAgIGIgPSAwOw0KLSAgICBjID0gMDsNCi19DQotRlhfRkxPQVQgQ0ZYX01hdHJpeDo6R2V0WFVuaXQoKSBjb25zdA0KLXsNCi0gICAgaWYgKGIgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIChhID4gMCA/IGEgOiAtYSk7DQotICAgIH0NCi0gICAgaWYgKGEgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIChiID4gMCA/IGIgOiAtYik7DQotICAgIH0NCi0gICAgcmV0dXJuIEZYU1lTX3NxcnQoYSAqIGEgKyBiICogYik7DQotfQ0KLUZYX0ZMT0FUIENGWF9NYXRyaXg6OkdldFlVbml0KCkgY29uc3QNCi17DQotICAgIGlmIChjID09IDApIHsNCi0gICAgICAgIHJldHVybiAoZCA+IDAgPyBkIDogLWQpOw0KLSAgICB9DQotICAgIGlmIChkID09IDApIHsNCi0gICAgICAgIHJldHVybiAoYyA+IDAgPyBjIDogLWMpOw0KLSAgICB9DQotICAgIHJldHVybiBGWFNZU19zcXJ0KGMgKiBjICsgZCAqIGQpOw0KLX0NCi12b2lkIENGWF9NYXRyaXg6OkdldFVuaXRSZWN0KENGWF9SZWN0RiAmcmVjdCkgY29uc3QNCi17DQotICAgIHJlY3QubGVmdCA9IHJlY3QudG9wID0gMDsNCi0gICAgcmVjdC53aWR0aCA9IHJlY3QuaGVpZ2h0ID0gMTsNCi0gICAgVHJhbnNmb3JtUmVjdChyZWN0KTsNCi19DQotQ0ZYX0Zsb2F0UmVjdCBDRlhfTWF0cml4OjpHZXRVbml0UmVjdCgpIGNvbnN0DQotew0KLSAgICBDRlhfRmxvYXRSZWN0IHJlY3QoMCwgMCwgMSwgMSk7DQotICAgIHJlY3QuVHJhbnNmb3JtKChjb25zdCBDRlhfTWF0cml4Kil0aGlzKTsNCi0gICAgcmV0dXJuIHJlY3Q7DQotfQ0KLUZYX0ZMT0FUIENGWF9NYXRyaXg6OkdldFVuaXRBcmVhKCkgY29uc3QNCi17DQotICAgIEZYX0ZMT0FUIEEgPSBGWFNZU19zcXJ0KGEgKiBhICsgYiAqIGIpOw0KLSAgICBGWF9GTE9BVCBCID0gRlhTWVNfc3FydChjICogYyArIGQgKiBkKTsNCi0gICAgRlhfRkxPQVQgYWMgPSBhICsgYywgYmQgPSBiICsgZDsNCi0gICAgRlhfRkxPQVQgQyA9IEZYU1lTX3NxcnQoYWMgKiBhYyArIGJkICogYmQpOw0KLSAgICBGWF9GTE9BVCBQID0gKEEgKyBCICsgQyApIC8gMjsNCi0gICAgcmV0dXJuIEZYU1lTX3NxcnQoUCAqIChQIC0gQSkgKiAoUCAtIEIpICogKFAgLSBDKSkgKiAyOw0KLX0NCi1GWF9GTE9BVCBDRlhfTWF0cml4OjpUcmFuc2Zvcm1YRGlzdGFuY2UoRlhfRkxPQVQgZHgpIGNvbnN0DQotew0KLSAgICBGWF9GTE9BVCBmeCA9IGEgKiBkeCwgZnkgPSBiICogZHg7DQotICAgIHJldHVybiBGWFNZU19zcXJ0KGZ4ICogZnggKyBmeSAqIGZ5KTsNCi19DQotRlhfSU5UMzIgQ0ZYX01hdHJpeDo6VHJhbnNmb3JtWERpc3RhbmNlKEZYX0lOVDMyIGR4KSBjb25zdA0KLXsNCi0gICAgRlhfRkxPQVQgZnggPSBhICogZHgsIGZ5ID0gYiAqIGR4Ow0KLSAgICByZXR1cm4gRlhTWVNfcm91bmQoRlhTWVNfc3FydChmeCAqIGZ4ICsgZnkgKiBmeSkpOw0KLX0NCi1GWF9GTE9BVCBDRlhfTWF0cml4OjpUcmFuc2Zvcm1ZRGlzdGFuY2UoRlhfRkxPQVQgZHkpIGNvbnN0DQotew0KLSAgICBGWF9GTE9BVCBmeCA9IGMgKiBkeSwgZnkgPSBkICogZHk7DQotICAgIHJldHVybiBGWFNZU19zcXJ0KGZ4ICogZnggKyBmeSAqIGZ5KTsNCi19DQotRlhfSU5UMzIgQ0ZYX01hdHJpeDo6VHJhbnNmb3JtWURpc3RhbmNlKEZYX0lOVDMyIGR5KSBjb25zdA0KLXsNCi0gICAgRlhfRkxPQVQgZnggPSBjICogZHksIGZ5ID0gZCAqIGR5Ow0KLSAgICByZXR1cm4gRlhTWVNfcm91bmQoRlhTWVNfc3FydChmeCAqIGZ4ICsgZnkgKiBmeSkpOw0KLX0NCi1GWF9GTE9BVCBDRlhfTWF0cml4OjpUcmFuc2Zvcm1EaXN0YW5jZShGWF9GTE9BVCBkeCwgRlhfRkxPQVQgZHkpIGNvbnN0DQotew0KLSAgICBGWF9GTE9BVCBmeCA9IGEgKiBkeCArIGMgKiBkeSwgZnkgPSBiICogZHggKyBkICogZHk7DQotICAgIHJldHVybiBGWFNZU19zcXJ0KGZ4ICogZnggKyBmeSAqIGZ5KTsNCi19DQotRlhfSU5UMzIgQ0ZYX01hdHJpeDo6VHJhbnNmb3JtRGlzdGFuY2UoRlhfSU5UMzIgZHgsIEZYX0lOVDMyIGR5KSBjb25zdA0KLXsNCi0gICAgRlhfRkxPQVQgZnggPSBhICogZHggKyBjICogZHksIGZ5ID0gYiAqIGR4ICsgZCAqIGR5Ow0KLSAgICByZXR1cm4gRlhTWVNfcm91bmQoRlhTWVNfc3FydChmeCAqIGZ4ICsgZnkgKiBmeSkpOw0KLX0NCi1GWF9GTE9BVCBDRlhfTWF0cml4OjpUcmFuc2Zvcm1EaXN0YW5jZShGWF9GTE9BVCBkaXN0YW5jZSkgY29uc3QNCi17DQotICAgIHJldHVybiBkaXN0YW5jZSAqIChHZXRYVW5pdCgpICsgR2V0WVVuaXQoKSkgLyAyOw0KLX0NCi12b2lkIENGWF9NYXRyaXg6OlRyYW5zZm9ybVZlY3RvcihDRlhfVmVjdG9yRiAmdikgY29uc3QNCi17DQotICAgIEZYX0ZMT0FUIGZ4ID0gYSAqIHYueCArIGMgKiB2Lnk7DQotICAgIEZYX0ZMT0FUIGZ5ID0gYiAqIHYueCArIGQgKiB2Lnk7DQotICAgIHYueCA9IGZ4LCB2LnkgPSBmeTsNCi19DQotdm9pZCBDRlhfTWF0cml4OjpUcmFuc2Zvcm1WZWN0b3IoQ0ZYX1ZlY3RvciAmdikgY29uc3QNCi17DQotICAgIEZYX0ZMT0FUIGZ4ID0gYSAqIHYueCArIGMgKiB2Lnk7DQotICAgIEZYX0ZMT0FUIGZ5ID0gYiAqIHYueCArIGQgKiB2Lnk7DQotICAgIHYueCA9IEZYU1lTX3JvdW5kKGZ4KTsNCi0gICAgdi55ID0gRlhTWVNfcm91bmQoZnkpOw0KLX0NCi12b2lkIENGWF9NYXRyaXg6OlRyYW5zZm9ybVBvaW50cyhDRlhfUG9pbnQgKnBvaW50cywgRlhfSU5UMzIgaUNvdW50KSBjb25zdA0KLXsNCi0gICAgRlhTWVNfYXNzZXJ0KGlDb3VudCA+IDApOw0KLSAgICBGWF9GTE9BVCBmeCwgZnk7DQotICAgIGZvciAoRlhfSU5UMzIgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspIHsNCi0gICAgICAgIGZ4ID0gYSAqIHBvaW50cy0+eCArIGMgKiBwb2ludHMtPnkgKyBlOw0KLSAgICAgICAgZnkgPSBiICogcG9pbnRzLT54ICsgZCAqIHBvaW50cy0+eSArIGY7DQotICAgICAgICBwb2ludHMtPnggPSBGWFNZU19yb3VuZChmeCk7DQotICAgICAgICBwb2ludHMtPnkgPSBGWFNZU19yb3VuZChmeSk7DQotICAgICAgICBwb2ludHMgKys7DQotICAgIH0NCi19DQotdm9pZCBDRlhfTWF0cml4OjpUcmFuc2Zvcm1Qb2ludHMoQ0ZYX1BvaW50RiAqcG9pbnRzLCBGWF9JTlQzMiBpQ291bnQpIGNvbnN0DQotew0KLSAgICBGWFNZU19hc3NlcnQoaUNvdW50ID4gMCk7DQotICAgIEZYX0ZMT0FUIGZ4LCBmeTsNCi0gICAgZm9yIChGWF9JTlQzMiBpID0gMDsgaSA8IGlDb3VudDsgaSArKykgew0KLSAgICAgICAgZnggPSBhICogcG9pbnRzLT54ICsgYyAqIHBvaW50cy0+eSArIGU7DQotICAgICAgICBmeSA9IGIgKiBwb2ludHMtPnggKyBkICogcG9pbnRzLT55ICsgZjsNCi0gICAgICAgIHBvaW50cy0+eCA9IGZ4LCBwb2ludHMtPnkgPSBmeTsNCi0gICAgICAgIHBvaW50cyArKzsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9NYXRyaXg6OlRyYW5zZm9ybVBvaW50KEZYX0ZMT0FUICZ4LCBGWF9GTE9BVCAmeSkgY29uc3QNCi17DQotICAgIEZYX0ZMT0FUIGZ4ID0gYSAqIHggKyBjICogeSArIGU7DQotICAgIEZYX0ZMT0FUIGZ5ID0gYiAqIHggKyBkICogeSArIGY7DQotICAgIHggPSBmeCwgeSA9IGZ5Ow0KLX0NCi12b2lkIENGWF9NYXRyaXg6OlRyYW5zZm9ybVBvaW50KEZYX0lOVDMyICZ4LCBGWF9JTlQzMiAmeSkgY29uc3QNCi17DQotICAgIEZYX0ZMT0FUIGZ4ID0gYSAqIHggKyBjICogeSArIGU7DQotICAgIEZYX0ZMT0FUIGZ5ID0gYiAqIHggKyBkICogeSArIGY7DQotICAgIHggPSBGWFNZU19yb3VuZChmeCk7DQotICAgIHkgPSBGWFNZU19yb3VuZChmeSk7DQotfQ0KLXZvaWQgQ0ZYX01hdHJpeDo6VHJhbnNmb3JtUmVjdChDRlhfUmVjdEYgJnJlY3QpIGNvbnN0DQotew0KLSAgICBGWF9GTE9BVCByaWdodCA9IHJlY3QucmlnaHQoKSwgYm90dG9tID0gcmVjdC5ib3R0b20oKTsNCi0gICAgVHJhbnNmb3JtUmVjdChyZWN0LmxlZnQsIHJpZ2h0LCBib3R0b20sIHJlY3QudG9wKTsNCi0gICAgcmVjdC53aWR0aCA9IHJpZ2h0IC0gcmVjdC5sZWZ0Ow0KLSAgICByZWN0LmhlaWdodCA9IGJvdHRvbSAtIHJlY3QudG9wOw0KLX0NCi12b2lkIENGWF9NYXRyaXg6OlRyYW5zZm9ybVJlY3QoQ0ZYX1JlY3QgJnJlY3QpIGNvbnN0DQotew0KLSAgICBGWF9GTE9BVCBsZWZ0ID0gKEZYX0ZMT0FUKXJlY3QubGVmdDsNCi0gICAgRlhfRkxPQVQgdG9wID0gKEZYX0ZMT0FUKXJlY3QuYm90dG9tKCk7DQotICAgIEZYX0ZMT0FUIHJpZ2h0ID0gKEZYX0ZMT0FUKXJlY3QucmlnaHQoKTsNCi0gICAgRlhfRkxPQVQgYm90dG9tID0gKEZYX0ZMT0FUKXJlY3QudG9wOw0KLSAgICBUcmFuc2Zvcm1SZWN0KGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSk7DQotICAgIHJlY3QubGVmdCA9IEZYU1lTX3JvdW5kKGxlZnQpOw0KLSAgICByZWN0LnRvcCA9IEZYU1lTX3JvdW5kKGJvdHRvbSk7DQotICAgIHJlY3Qud2lkdGggPSBGWFNZU19yb3VuZChyaWdodCAtIGxlZnQpOw0KLSAgICByZWN0LmhlaWdodCA9IEZYU1lTX3JvdW5kKHRvcCAtIGJvdHRvbSk7DQotfQ0KLXZvaWQgQ0ZYX01hdHJpeDo6VHJhbnNmb3JtUmVjdChGWF9GTE9BVCYgbGVmdCwgRlhfRkxPQVQmIHJpZ2h0LCBGWF9GTE9BVCYgdG9wLCBGWF9GTE9BVCYgYm90dG9tKSBjb25zdA0KLXsNCi0gICAgRlhfRkxPQVQgeFs0XSwgeVs0XTsNCi0gICAgeFswXSA9IGxlZnQ7DQotICAgIHlbMF0gPSB0b3A7DQotICAgIHhbMV0gPSBsZWZ0Ow0KLSAgICB5WzFdID0gYm90dG9tOw0KLSAgICB4WzJdID0gcmlnaHQ7DQotICAgIHlbMl0gPSB0b3A7DQotICAgIHhbM10gPSByaWdodDsNCi0gICAgeVszXSA9IGJvdHRvbTsNCi0gICAgaW50IGk7DQotICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpICsrKSB7DQotICAgICAgICBUcmFuc2Zvcm0oeFtpXSwgeVtpXSwgeFtpXSwgeVtpXSk7DQotICAgIH0NCi0gICAgcmlnaHQgPSBsZWZ0ID0geFswXTsNCi0gICAgdG9wID0gYm90dG9tID0geVswXTsNCi0gICAgZm9yIChpID0gMTsgaSA8IDQ7IGkgKyspIHsNCi0gICAgICAgIGlmIChyaWdodCA8IHhbaV0pIHsNCi0gICAgICAgICAgICByaWdodCA9IHhbaV07DQotICAgICAgICB9DQotICAgICAgICBpZiAobGVmdCA+IHhbaV0pIHsNCi0gICAgICAgICAgICBsZWZ0ID0geFtpXTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICh0b3AgPCB5W2ldKSB7DQotICAgICAgICAgICAgdG9wID0geVtpXTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChib3R0b20gPiB5W2ldKSB7DQotICAgICAgICAgICAgYm90dG9tID0geVtpXTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGNydC9meF9leHQuaCIKK3ZvaWQgRlhfUkVDVDo6Tm9ybWFsaXplKCkKK3sKKyAgICBpZiAobGVmdCA+IHJpZ2h0KSB7CisgICAgICAgIGludCB0ZW1wID0gbGVmdDsKKyAgICAgICAgbGVmdCA9IHJpZ2h0OworICAgICAgICByaWdodCA9IHRlbXA7CisgICAgfQorICAgIGlmICh0b3AgPiBib3R0b20pIHsKKyAgICAgICAgaW50IHRlbXAgPSB0b3A7CisgICAgICAgIHRvcCA9IGJvdHRvbTsKKyAgICAgICAgYm90dG9tID0gdGVtcDsKKyAgICB9Cit9Cit2b2lkIEZYX1JFQ1Q6OkludGVyc2VjdChjb25zdCBGWF9SRUNUJiBzcmMpCit7CisgICAgRlhfUkVDVCBzcmNfbiA9IHNyYzsKKyAgICBzcmNfbi5Ob3JtYWxpemUoKTsKKyAgICBOb3JtYWxpemUoKTsKKyAgICBsZWZ0ID0gbGVmdCA+IHNyY19uLmxlZnQgPyBsZWZ0IDogc3JjX24ubGVmdDsKKyAgICB0b3AgPSB0b3AgPiBzcmNfbi50b3AgPyB0b3AgOiBzcmNfbi50b3A7CisgICAgcmlnaHQgPSByaWdodCA8IHNyY19uLnJpZ2h0ID8gcmlnaHQgOiBzcmNfbi5yaWdodDsKKyAgICBib3R0b20gPSBib3R0b20gPCBzcmNfbi5ib3R0b20gPyBib3R0b20gOiBzcmNfbi5ib3R0b207CisgICAgaWYgKGxlZnQgPiByaWdodCB8fCB0b3AgPiBib3R0b20pIHsKKyAgICAgICAgbGVmdCA9IHRvcCA9IHJpZ2h0ID0gYm90dG9tID0gMDsKKyAgICB9Cit9Cit2b2lkIEZYX1JFQ1Q6OlVuaW9uKGNvbnN0IEZYX1JFQ1QmIG90aGVyX3JlY3QpCit7CisgICAgTm9ybWFsaXplKCk7CisgICAgRlhfUkVDVCBvdGhlciA9IG90aGVyX3JlY3Q7CisgICAgb3RoZXIuTm9ybWFsaXplKCk7CisgICAgbGVmdCA9IGxlZnQgPCBvdGhlci5sZWZ0ID8gbGVmdCA6IG90aGVyLmxlZnQ7CisgICAgcmlnaHQgPSByaWdodCA+IG90aGVyLnJpZ2h0ID8gcmlnaHQgOiBvdGhlci5yaWdodDsKKyAgICBib3R0b20gPSBib3R0b20gPiBvdGhlci5ib3R0b20gPyBib3R0b20gOiBvdGhlci5ib3R0b207CisgICAgdG9wID0gdG9wIDwgb3RoZXIudG9wID8gdG9wIDogb3RoZXIudG9wOworfQorRlhfQk9PTCBHZXRJbnRlcnNlY3Rpb24oRlhfRkxPQVQgbG93MSwgRlhfRkxPQVQgaGlnaDEsIEZYX0ZMT0FUIGxvdzIsIEZYX0ZMT0FUIGhpZ2gyLAorICAgICAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQmIGludGVybG93LCBGWF9GTE9BVCYgaW50ZXJoaWdoKQoreworICAgIGlmIChsb3cxID49IGhpZ2gyIHx8IGxvdzIgPj0gaGlnaDEpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpbnRlcmxvdyA9IGxvdzEgPiBsb3cyID8gbG93MSA6IGxvdzI7CisgICAgaW50ZXJoaWdoID0gaGlnaDEgPiBoaWdoMiA/IGhpZ2gyIDogaGlnaDE7CisgICAgcmV0dXJuIFRSVUU7Cit9CitleHRlcm4gIkMiIGludCBGWFNZU19yb3VuZChGWF9GTE9BVCBkKQoreworICAgIGludCBpUmV0ID0gMDsKKyAgICBpZiAoZCA+PSAwLjBmKSB7CisgICAgICAgIGlSZXQgPSAoaW50KShkICsgMC41Zik7CisgICAgICAgIGlmIChpUmV0ID49IDApIHsKKyAgICAgICAgICAgIHJldHVybiBpUmV0OworICAgICAgICB9CisgICAgICAgIHJldHVybiAtaVJldDsKKyAgICB9CisgICAgcmV0dXJuIChpbnQpKGQgLSAwLjVmKTsKK30KK0NGWF9GbG9hdFJlY3Q6OkNGWF9GbG9hdFJlY3QoY29uc3QgRlhfUkVDVCYgcmVjdCkKK3sKKyAgICBsZWZ0ID0gKEZYX0ZMT0FUKShyZWN0LmxlZnQpOworICAgIHJpZ2h0ID0gKEZYX0ZMT0FUKShyZWN0LnJpZ2h0KTsKKyAgICBib3R0b20gPSAoRlhfRkxPQVQpKHJlY3QudG9wKTsKKyAgICB0b3AgPSAoRlhfRkxPQVQpKHJlY3QuYm90dG9tKTsKK30KK3ZvaWQgQ0ZYX0Zsb2F0UmVjdDo6Tm9ybWFsaXplKCkKK3sKKyAgICBGWF9GTE9BVCB0ZW1wOworICAgIGlmIChsZWZ0ID4gcmlnaHQpIHsKKyAgICAgICAgdGVtcCA9IGxlZnQ7CisgICAgICAgIGxlZnQgPSByaWdodDsKKyAgICAgICAgcmlnaHQgPSB0ZW1wOworICAgIH0KKyAgICBpZiAoYm90dG9tID4gdG9wKSB7CisgICAgICAgIHRlbXAgPSB0b3A7CisgICAgICAgIHRvcCA9IGJvdHRvbTsKKyAgICAgICAgYm90dG9tID0gdGVtcDsKKyAgICB9Cit9Cit2b2lkIENGWF9GbG9hdFJlY3Q6OkludGVyc2VjdChjb25zdCBDRlhfRmxvYXRSZWN0JiBvdGhlcl9yZWN0KQoreworICAgIE5vcm1hbGl6ZSgpOworICAgIENGWF9GbG9hdFJlY3Qgb3RoZXIgPSBvdGhlcl9yZWN0OworICAgIG90aGVyLk5vcm1hbGl6ZSgpOworICAgIGxlZnQgPSBsZWZ0ID4gb3RoZXIubGVmdCA/IGxlZnQgOiBvdGhlci5sZWZ0OworICAgIHJpZ2h0ID0gcmlnaHQgPCBvdGhlci5yaWdodCA/IHJpZ2h0IDogb3RoZXIucmlnaHQ7CisgICAgYm90dG9tID0gYm90dG9tID4gb3RoZXIuYm90dG9tID8gYm90dG9tIDogb3RoZXIuYm90dG9tOworICAgIHRvcCA9IHRvcCA8IG90aGVyLnRvcCA/IHRvcCA6IG90aGVyLnRvcDsKKyAgICBpZiAobGVmdCA+IHJpZ2h0IHx8IGJvdHRvbSA+IHRvcCkgeworICAgICAgICBsZWZ0ID0gcmlnaHQgPSBib3R0b20gPSB0b3AgPSAwOworICAgIH0KK30KK3ZvaWQgQ0ZYX0Zsb2F0UmVjdDo6VW5pb24oY29uc3QgQ0ZYX0Zsb2F0UmVjdCYgb3RoZXJfcmVjdCkKK3sKKyAgICBOb3JtYWxpemUoKTsKKyAgICBDRlhfRmxvYXRSZWN0IG90aGVyID0gb3RoZXJfcmVjdDsKKyAgICBvdGhlci5Ob3JtYWxpemUoKTsKKyAgICBsZWZ0ID0gbGVmdCA8IG90aGVyLmxlZnQgPyBsZWZ0IDogb3RoZXIubGVmdDsKKyAgICByaWdodCA9IHJpZ2h0ID4gb3RoZXIucmlnaHQgPyByaWdodCA6IG90aGVyLnJpZ2h0OworICAgIGJvdHRvbSA9IGJvdHRvbSA8IG90aGVyLmJvdHRvbSA/IGJvdHRvbSA6IG90aGVyLmJvdHRvbTsKKyAgICB0b3AgPSB0b3AgPiBvdGhlci50b3AgPyB0b3AgOiBvdGhlci50b3A7Cit9Cit2b2lkIENGWF9GbG9hdFJlY3Q6OlRyYW5zZm9ybShjb25zdCBDRlhfTWF0cml4KiBwTWF0cml4KQoreworICAgIHBNYXRyaXgtPlRyYW5zZm9ybVJlY3QobGVmdCwgcmlnaHQsIHRvcCwgYm90dG9tKTsKK30KK2ludCBDRlhfRmxvYXRSZWN0OjpTdWJzdHJhY3Q0KENGWF9GbG9hdFJlY3QmIHMsIENGWF9GbG9hdFJlY3QqIHBSZWN0cykKK3sKKyAgICBOb3JtYWxpemUoKTsKKyAgICBzLk5vcm1hbGl6ZSgpOworICAgIGludCBuUmVjdHMgPSAwOworICAgIENGWF9GbG9hdFJlY3QgcmVjdHNbNF07CisgICAgaWYgKGxlZnQgPCBzLmxlZnQpIHsKKyAgICAgICAgcmVjdHNbblJlY3RzXS5sZWZ0ID0gbGVmdDsKKyAgICAgICAgcmVjdHNbblJlY3RzXS5yaWdodCA9IHMubGVmdDsKKyAgICAgICAgcmVjdHNbblJlY3RzXS5ib3R0b20gPSBib3R0b207CisgICAgICAgIHJlY3RzW25SZWN0c10udG9wID0gdG9wOworICAgICAgICBuUmVjdHMgKys7CisgICAgfQorICAgIGlmIChzLmxlZnQgPCByaWdodCAmJiBzLnRvcCA8IHRvcCkgeworICAgICAgICByZWN0c1tuUmVjdHNdLmxlZnQgPSBzLmxlZnQ7CisgICAgICAgIHJlY3RzW25SZWN0c10ucmlnaHQgPSByaWdodDsKKyAgICAgICAgcmVjdHNbblJlY3RzXS5ib3R0b20gPSBzLnRvcDsKKyAgICAgICAgcmVjdHNbblJlY3RzXS50b3AgPSB0b3A7CisgICAgICAgIG5SZWN0cyArKzsKKyAgICB9CisgICAgaWYgKHMudG9wID4gYm90dG9tICYmIHMucmlnaHQgPCByaWdodCkgeworICAgICAgICByZWN0c1tuUmVjdHNdLmxlZnQgPSBzLnJpZ2h0OworICAgICAgICByZWN0c1tuUmVjdHNdLnJpZ2h0ID0gcmlnaHQ7CisgICAgICAgIHJlY3RzW25SZWN0c10uYm90dG9tID0gYm90dG9tOworICAgICAgICByZWN0c1tuUmVjdHNdLnRvcCA9IHMudG9wOworICAgICAgICBuUmVjdHMgKys7CisgICAgfQorICAgIGlmIChzLmJvdHRvbSA+IGJvdHRvbSkgeworICAgICAgICByZWN0c1tuUmVjdHNdLmxlZnQgPSBzLmxlZnQ7CisgICAgICAgIHJlY3RzW25SZWN0c10ucmlnaHQgPSBzLnJpZ2h0OworICAgICAgICByZWN0c1tuUmVjdHNdLmJvdHRvbSA9IGJvdHRvbTsKKyAgICAgICAgcmVjdHNbblJlY3RzXS50b3AgPSBzLmJvdHRvbTsKKyAgICAgICAgblJlY3RzICsrOworICAgIH0KKyAgICBpZiAoblJlY3RzID09IDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgblJlY3RzOyBpICsrKSB7CisgICAgICAgIHBSZWN0c1tpXSA9IHJlY3RzW2ldOworICAgICAgICBwUmVjdHNbaV0uSW50ZXJzZWN0KCp0aGlzKTsKKyAgICB9CisgICAgcmV0dXJuIG5SZWN0czsKK30KK0ZYX1JFQ1QgQ0ZYX0Zsb2F0UmVjdDo6R2V0T3V0dGVyUmVjdCgpIGNvbnN0Cit7CisgICAgQ0ZYX0Zsb2F0UmVjdCByZWN0MSA9ICp0aGlzOworICAgIEZYX1JFQ1QgcmVjdDsKKyAgICByZWN0LmxlZnQgPSAoaW50KUZYU1lTX2Zsb29yKHJlY3QxLmxlZnQpOworICAgIHJlY3QucmlnaHQgPSAoaW50KUZYU1lTX2NlaWwocmVjdDEucmlnaHQpOworICAgIHJlY3QudG9wID0gKGludClGWFNZU19mbG9vcihyZWN0MS5ib3R0b20pOworICAgIHJlY3QuYm90dG9tID0gKGludClGWFNZU19jZWlsKHJlY3QxLnRvcCk7CisgICAgcmVjdC5Ob3JtYWxpemUoKTsKKyAgICByZXR1cm4gcmVjdDsKK30KK0ZYX1JFQ1QgQ0ZYX0Zsb2F0UmVjdDo6R2V0SW5uZXJSZWN0KCkgY29uc3QKK3sKKyAgICBDRlhfRmxvYXRSZWN0IHJlY3QxID0gKnRoaXM7CisgICAgRlhfUkVDVCByZWN0OworICAgIHJlY3QubGVmdCA9IChpbnQpRlhTWVNfY2VpbChyZWN0MS5sZWZ0KTsKKyAgICByZWN0LnJpZ2h0ID0gKGludClGWFNZU19mbG9vcihyZWN0MS5yaWdodCk7CisgICAgcmVjdC50b3AgPSAoaW50KUZYU1lTX2NlaWwocmVjdDEuYm90dG9tKTsKKyAgICByZWN0LmJvdHRvbSA9IChpbnQpRlhTWVNfZmxvb3IocmVjdDEudG9wKTsKKyAgICByZWN0Lk5vcm1hbGl6ZSgpOworICAgIHJldHVybiByZWN0OworfQorc3RhdGljIHZvaWQgX01hdGNoRmxvYXRSYW5nZShGWF9GTE9BVCBmMSwgRlhfRkxPQVQgZjIsIGludCYgaTEsIGludCYgaTIpCit7CisgICAgaW50IGxlbmd0aCA9IChpbnQpRlhTWVNfY2VpbChmMiAtIGYxKTsKKyAgICBpbnQgaTFfMSA9IChpbnQpRlhTWVNfZmxvb3IoZjEpOworICAgIGludCBpMV8yID0gKGludClGWFNZU19jZWlsKGYxKTsKKyAgICBGWF9GTE9BVCBlcnJvcjEgPSBmMSAtIGkxXzEgKyAoRlhfRkxPQVQpRlhTWVNfZmFicyhmMiAtIGkxXzEgLSBsZW5ndGgpOworICAgIEZYX0ZMT0FUIGVycm9yMiA9IGkxXzIgLSBmMSArIChGWF9GTE9BVClGWFNZU19mYWJzKGYyIC0gaTFfMiAtIGxlbmd0aCk7CisgICAgaTEgPSAoZXJyb3IxID4gZXJyb3IyKSA/IGkxXzIgOiBpMV8xOworICAgIGkyID0gaTEgKyBsZW5ndGg7Cit9CitGWF9SRUNUIENGWF9GbG9hdFJlY3Q6OkdldENsb3Nlc3RSZWN0KCkgY29uc3QKK3sKKyAgICBDRlhfRmxvYXRSZWN0IHJlY3QxID0gKnRoaXM7CisgICAgRlhfUkVDVCByZWN0OworICAgIF9NYXRjaEZsb2F0UmFuZ2UocmVjdDEubGVmdCwgcmVjdDEucmlnaHQsIHJlY3QubGVmdCwgcmVjdC5yaWdodCk7CisgICAgX01hdGNoRmxvYXRSYW5nZShyZWN0MS5ib3R0b20sIHJlY3QxLnRvcCwgcmVjdC50b3AsIHJlY3QuYm90dG9tKTsKKyAgICByZWN0Lk5vcm1hbGl6ZSgpOworICAgIHJldHVybiByZWN0OworfQorRlhfQk9PTCBDRlhfRmxvYXRSZWN0OjpDb250YWlucyhjb25zdCBDRlhfRmxvYXRSZWN0JiBvdGhlcl9yZWN0KSBjb25zdAoreworICAgIENGWF9GbG9hdFJlY3QgbjEgPSAqdGhpczsKKyAgICBuMS5Ob3JtYWxpemUoKTsKKyAgICBDRlhfRmxvYXRSZWN0IG4yID0gb3RoZXJfcmVjdDsKKyAgICBuMi5Ob3JtYWxpemUoKTsKKyAgICBpZiAobjIubGVmdCA+PSBuMS5sZWZ0ICYmIG4yLnJpZ2h0IDw9IG4xLnJpZ2h0ICYmIG4yLmJvdHRvbSA+PSBuMS5ib3R0b20gJiYgbjIudG9wIDw9IG4xLnRvcCkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorRlhfQk9PTCBDRlhfRmxvYXRSZWN0OjpDb250YWlucyhGWF9GTE9BVCB4LCBGWF9GTE9BVCB5KSBjb25zdAoreworICAgIENGWF9GbG9hdFJlY3QgbjEgPSAqdGhpczsKKyAgICBuMS5Ob3JtYWxpemUoKTsKKyAgICByZXR1cm4geCA8PSBuMS5yaWdodCAmJiB4ID49IG4xLmxlZnQgJiYgeSA8PSBuMS50b3AgJiYgeSA+PSBuMS5ib3R0b207Cit9Cit2b2lkIENGWF9GbG9hdFJlY3Q6OlVwZGF0ZVJlY3QoRlhfRkxPQVQgeCwgRlhfRkxPQVQgeSkKK3sKKyAgICBpZiAobGVmdCA+IHgpIHsKKyAgICAgICAgbGVmdCA9IHg7CisgICAgfQorICAgIGlmIChyaWdodCA8IHgpIHsKKyAgICAgICAgcmlnaHQgPSB4OworICAgIH0KKyAgICBpZiAoYm90dG9tID4geSkgeworICAgICAgICBib3R0b20gPSB5OworICAgIH0KKyAgICBpZiAodG9wIDwgeSkgeworICAgICAgICB0b3AgPSB5OworICAgIH0KK30KK0NGWF9GbG9hdFJlY3QgQ0ZYX0Zsb2F0UmVjdDo6R2V0QkJveChjb25zdCBDRlhfRmxvYXRQb2ludCogcFBvaW50cywgaW50IG5Qb2ludHMpCit7CisgICAgaWYgKG5Qb2ludHMgPT0gMCkgeworICAgICAgICByZXR1cm4gQ0ZYX0Zsb2F0UmVjdCgpOworICAgIH0KKyAgICBGWF9GTE9BVCBtaW5feCA9IHBQb2ludHMtPngsIG1heF94ID0gcFBvaW50cy0+eCwgbWluX3kgPSBwUG9pbnRzLT55LCBtYXhfeSA9IHBQb2ludHMtPnk7CisgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBuUG9pbnRzOyBpICsrKSB7CisgICAgICAgIGlmIChtaW5feCA+IHBQb2ludHNbaV0ueCkgeworICAgICAgICAgICAgbWluX3ggPSBwUG9pbnRzW2ldLng7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1heF94IDwgcFBvaW50c1tpXS54KSB7CisgICAgICAgICAgICBtYXhfeCA9IHBQb2ludHNbaV0ueDsKKyAgICAgICAgfQorICAgICAgICBpZiAobWluX3kgPiBwUG9pbnRzW2ldLnkpIHsKKyAgICAgICAgICAgIG1pbl95ID0gcFBvaW50c1tpXS55OworICAgICAgICB9CisgICAgICAgIGlmIChtYXhfeSA8IHBQb2ludHNbaV0ueSkgeworICAgICAgICAgICAgbWF4X3kgPSBwUG9pbnRzW2ldLnk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIENGWF9GbG9hdFJlY3QobWluX3gsIG1pbl95LCBtYXhfeCwgbWF4X3kpOworfQordm9pZCBDRlhfTWF0cml4OjpTZXQoRlhfRkxPQVQgYSwgRlhfRkxPQVQgYiwgRlhfRkxPQVQgYywgRlhfRkxPQVQgZCwgRlhfRkxPQVQgZSwgRlhfRkxPQVQgZikKK3sKKyAgICB0aGlzLT5hID0gYTsKKyAgICB0aGlzLT5iID0gYjsKKyAgICB0aGlzLT5jID0gYzsKKyAgICB0aGlzLT5kID0gZDsKKyAgICB0aGlzLT5lID0gZTsKKyAgICB0aGlzLT5mID0gZjsKK30KK3ZvaWQgQ0ZYX01hdHJpeDo6U2V0KGNvbnN0IEZYX0ZMT0FUIG5bNl0pCit7CisgICAgRlhTWVNfbWVtY3B5MzIoKHZvaWQqKXRoaXMsICZuLCBzaXplb2YoQ0ZYX01hdHJpeCkpOworfQordm9pZCBDRlhfTWF0cml4OjpTZXRSZXZlcnNlKGNvbnN0IENGWF9NYXRyaXggJm0pCit7CisgICAgRlhfRkxPQVQgaSA9IG0uYSAqIG0uZCAtIG0uYiAqIG0uYzsKKyAgICBpZiAoRlhTWVNfZmFicyhpKSA9PSAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfRkxPQVQgaiA9IC1pOworICAgIGEgPSBtLmQgLyBpOworICAgIGIgPSBtLmIgLyBqOworICAgIGMgPSBtLmMgLyBqOworICAgIGQgPSBtLmEgLyBpOworICAgIGUgPSAobS5jICogbS5mIC0gbS5kICogbS5lKSAvIGk7CisgICAgZiA9IChtLmEgKiBtLmYgLSBtLmIgKiBtLmUpIC8gajsKK30KK3N0YXRpYyB2b2lkIEZYQ1JUX01hdHJpeF9Db25jYXQoQ0ZYX01hdHJpeCAmbSwgY29uc3QgQ0ZYX01hdHJpeCAmbTEsIGNvbnN0IENGWF9NYXRyaXggJm0yKQoreworICAgIEZYX0ZMT0FUIGFhID0gbTEuYSAqIG0yLmEgKyBtMS5iICogbTIuYzsKKyAgICBGWF9GTE9BVCBiYiA9IG0xLmEgKiBtMi5iICsgbTEuYiAqIG0yLmQ7CisgICAgRlhfRkxPQVQgY2MgPSBtMS5jICogbTIuYSArIG0xLmQgKiBtMi5jOworICAgIEZYX0ZMT0FUIGRkID0gbTEuYyAqIG0yLmIgKyBtMS5kICogbTIuZDsKKyAgICBGWF9GTE9BVCBlZSA9IG0xLmUgKiBtMi5hICsgbTEuZiAqIG0yLmMgKyBtMi5lOworICAgIEZYX0ZMT0FUIGZmID0gbTEuZSAqIG0yLmIgKyBtMS5mICogbTIuZCArIG0yLmY7CisgICAgbS5hID0gYWEsIG0uYiA9IGJiLCBtLmMgPSBjYywgbS5kID0gZGQsIG0uZSA9IGVlLCBtLmYgPSBmZjsKK30KK3ZvaWQgQ0ZYX01hdHJpeDo6Q29uY2F0KEZYX0ZMT0FUIGEsIEZYX0ZMT0FUIGIsIEZYX0ZMT0FUIGMsIEZYX0ZMT0FUIGQsIEZYX0ZMT0FUIGUsIEZYX0ZMT0FUIGYsIEZYX0JPT0wgYlByZXBlbmRlZCkKK3sKKyAgICBDRlhfTWF0cml4IG07CisgICAgbS5TZXQoYSwgYiwgYywgZCwgZSwgZik7CisgICAgQ29uY2F0KG0sIGJQcmVwZW5kZWQpOworfQordm9pZCBDRlhfTWF0cml4OjpDb25jYXQoY29uc3QgQ0ZYX01hdHJpeCAmbSwgRlhfQk9PTCBiUHJlcGVuZGVkKQoreworICAgIGlmIChiUHJlcGVuZGVkKSB7CisgICAgICAgIEZYQ1JUX01hdHJpeF9Db25jYXQoKnRoaXMsIG0sICp0aGlzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBGWENSVF9NYXRyaXhfQ29uY2F0KCp0aGlzLCAqdGhpcywgbSk7CisgICAgfQorfQordm9pZCBDRlhfTWF0cml4OjpDb25jYXRJbnZlcnNlKGNvbnN0IENGWF9NYXRyaXgmIHNyYywgRlhfQk9PTCBiUHJlcGVuZGVkKQoreworICAgIENGWF9NYXRyaXggbTsKKyAgICBtLlNldFJldmVyc2Uoc3JjKTsKKyAgICBDb25jYXQobSwgYlByZXBlbmRlZCk7Cit9CitGWF9CT09MIENGWF9NYXRyaXg6OklzSW52ZXJ0aWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZYU1lTX2ZhYnMoYSAqIGQgLSBiICogYykgPj0gMC4wMDAxZjsKK30KK0ZYX0JPT0wgQ0ZYX01hdHJpeDo6SXM5MFJvdGF0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBGWFNZU19mYWJzKGEgKiAxMDAwKSA8IEZYU1lTX2ZhYnMoYikgJiYgRlhTWVNfZmFicyhkICogMTAwMCkgPCBGWFNZU19mYWJzKGMpOworfQorRlhfQk9PTCBDRlhfTWF0cml4OjpJc1NjYWxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZYU1lTX2ZhYnMoYiAqIDEwMDApIDwgRlhTWVNfZmFicyhhKSAmJiBGWFNZU19mYWJzKGMgKiAxMDAwKSA8IEZYU1lTX2ZhYnMoZCk7Cit9Cit2b2lkIENGWF9NYXRyaXg6OlRyYW5zbGF0ZShGWF9GTE9BVCB4LCBGWF9GTE9BVCB5LCBGWF9CT09MIGJQcmVwZW5kZWQpCit7CisgICAgaWYgKGJQcmVwZW5kZWQpIHsKKyAgICAgICAgZSArPSB4ICogYSArIHkgKiBjOworICAgICAgICBmICs9IHkgKiBkICsgeCAqIGI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZSArPSB4LCBmICs9IHk7CisgICAgfQorfQordm9pZCBDRlhfTWF0cml4OjpTY2FsZShGWF9GTE9BVCBzeCwgRlhfRkxPQVQgc3ksIEZYX0JPT0wgYlByZXBlbmRlZCkKK3sKKyAgICBhICo9IHN4LCBkICo9IHN5OworICAgIGlmIChiUHJlcGVuZGVkKSB7CisgICAgICAgIGIgKj0gc3g7CisgICAgICAgIGMgKj0gc3k7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYiAqPSBzeTsKKyAgICAgICAgYyAqPSBzeDsKKyAgICAgICAgZSAqPSBzeDsKKyAgICAgICAgZiAqPSBzeTsKKyAgICB9Cit9Cit2b2lkIENGWF9NYXRyaXg6OlJvdGF0ZShGWF9GTE9BVCBmUmFkaWFuLCBGWF9CT09MIGJQcmVwZW5kZWQpCit7CisgICAgRlhfRkxPQVQgY29zVmFsdWUgPSBGWFNZU19jb3MoZlJhZGlhbik7CisgICAgRlhfRkxPQVQgc2luVmFsdWUgPSBGWFNZU19zaW4oZlJhZGlhbik7CisgICAgQ0ZYX01hdHJpeCBtOworICAgIG0uU2V0KGNvc1ZhbHVlLCBzaW5WYWx1ZSwgLXNpblZhbHVlLCBjb3NWYWx1ZSwgMCwgMCk7CisgICAgaWYgKGJQcmVwZW5kZWQpIHsKKyAgICAgICAgRlhDUlRfTWF0cml4X0NvbmNhdCgqdGhpcywgbSwgKnRoaXMpOworICAgIH0gZWxzZSB7CisgICAgICAgIEZYQ1JUX01hdHJpeF9Db25jYXQoKnRoaXMsICp0aGlzLCBtKTsKKyAgICB9Cit9Cit2b2lkIENGWF9NYXRyaXg6OlJvdGF0ZUF0KEZYX0ZMT0FUIGZSYWRpYW4sIEZYX0ZMT0FUIGR4LCBGWF9GTE9BVCBkeSwgRlhfQk9PTCBiUHJlcGVuZGVkKQoreworICAgIFRyYW5zbGF0ZShkeCwgZHksIGJQcmVwZW5kZWQpOworICAgIFJvdGF0ZShmUmFkaWFuLCBiUHJlcGVuZGVkKTsKKyAgICBUcmFuc2xhdGUoLWR4LCAtZHksIGJQcmVwZW5kZWQpOworfQordm9pZCBDRlhfTWF0cml4OjpTaGVhcihGWF9GTE9BVCBmQWxwaGFSYWRpYW4sIEZYX0ZMT0FUIGZCZXRhUmFkaWFuLCBGWF9CT09MIGJQcmVwZW5kZWQpCit7CisgICAgQ0ZYX01hdHJpeCBtOworICAgIG0uU2V0KDEsIEZYU1lTX3RhbihmQWxwaGFSYWRpYW4pLCBGWFNZU190YW4oZkJldGFSYWRpYW4pLCAxLCAwLCAwKTsKKyAgICBpZiAoYlByZXBlbmRlZCkgeworICAgICAgICBGWENSVF9NYXRyaXhfQ29uY2F0KCp0aGlzLCBtLCAqdGhpcyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgRlhDUlRfTWF0cml4X0NvbmNhdCgqdGhpcywgKnRoaXMsIG0pOworICAgIH0KK30KK3ZvaWQgQ0ZYX01hdHJpeDo6TWF0Y2hSZWN0KGNvbnN0IENGWF9GbG9hdFJlY3QmIGRlc3QsIGNvbnN0IENGWF9GbG9hdFJlY3QmIHNyYykKK3sKKyAgICBGWF9GTE9BVCBmRGlmZiA9IHNyYy5sZWZ0IC0gc3JjLnJpZ2h0OworICAgIGEgPSBGWFNZU19mYWJzKGZEaWZmKSA8IDAuMDAxZiA/IDEgOiAoZGVzdC5sZWZ0IC0gZGVzdC5yaWdodCkgLyBmRGlmZjsKKyAgICBmRGlmZiA9IHNyYy5ib3R0b20gLSBzcmMudG9wOworICAgIGQgPSBGWFNZU19mYWJzKGZEaWZmKSA8IDAuMDAxZiA/IDEgOiAoZGVzdC5ib3R0b20gLSBkZXN0LnRvcCkgLyBmRGlmZjsKKyAgICBlID0gZGVzdC5sZWZ0IC0gc3JjLmxlZnQgKiBhOworICAgIGYgPSBkZXN0LmJvdHRvbSAtIHNyYy5ib3R0b20gKiBkOworICAgIGIgPSAwOworICAgIGMgPSAwOworfQorRlhfRkxPQVQgQ0ZYX01hdHJpeDo6R2V0WFVuaXQoKSBjb25zdAoreworICAgIGlmIChiID09IDApIHsKKyAgICAgICAgcmV0dXJuIChhID4gMCA/IGEgOiAtYSk7CisgICAgfQorICAgIGlmIChhID09IDApIHsKKyAgICAgICAgcmV0dXJuIChiID4gMCA/IGIgOiAtYik7CisgICAgfQorICAgIHJldHVybiBGWFNZU19zcXJ0KGEgKiBhICsgYiAqIGIpOworfQorRlhfRkxPQVQgQ0ZYX01hdHJpeDo6R2V0WVVuaXQoKSBjb25zdAoreworICAgIGlmIChjID09IDApIHsKKyAgICAgICAgcmV0dXJuIChkID4gMCA/IGQgOiAtZCk7CisgICAgfQorICAgIGlmIChkID09IDApIHsKKyAgICAgICAgcmV0dXJuIChjID4gMCA/IGMgOiAtYyk7CisgICAgfQorICAgIHJldHVybiBGWFNZU19zcXJ0KGMgKiBjICsgZCAqIGQpOworfQordm9pZCBDRlhfTWF0cml4OjpHZXRVbml0UmVjdChDRlhfUmVjdEYgJnJlY3QpIGNvbnN0Cit7CisgICAgcmVjdC5sZWZ0ID0gcmVjdC50b3AgPSAwOworICAgIHJlY3Qud2lkdGggPSByZWN0LmhlaWdodCA9IDE7CisgICAgVHJhbnNmb3JtUmVjdChyZWN0KTsKK30KK0NGWF9GbG9hdFJlY3QgQ0ZYX01hdHJpeDo6R2V0VW5pdFJlY3QoKSBjb25zdAoreworICAgIENGWF9GbG9hdFJlY3QgcmVjdCgwLCAwLCAxLCAxKTsKKyAgICByZWN0LlRyYW5zZm9ybSgoY29uc3QgQ0ZYX01hdHJpeCopdGhpcyk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CitGWF9GTE9BVCBDRlhfTWF0cml4OjpHZXRVbml0QXJlYSgpIGNvbnN0Cit7CisgICAgRlhfRkxPQVQgQSA9IEZYU1lTX3NxcnQoYSAqIGEgKyBiICogYik7CisgICAgRlhfRkxPQVQgQiA9IEZYU1lTX3NxcnQoYyAqIGMgKyBkICogZCk7CisgICAgRlhfRkxPQVQgYWMgPSBhICsgYywgYmQgPSBiICsgZDsKKyAgICBGWF9GTE9BVCBDID0gRlhTWVNfc3FydChhYyAqIGFjICsgYmQgKiBiZCk7CisgICAgRlhfRkxPQVQgUCA9IChBICsgQiArIEMgKSAvIDI7CisgICAgcmV0dXJuIEZYU1lTX3NxcnQoUCAqIChQIC0gQSkgKiAoUCAtIEIpICogKFAgLSBDKSkgKiAyOworfQorRlhfRkxPQVQgQ0ZYX01hdHJpeDo6VHJhbnNmb3JtWERpc3RhbmNlKEZYX0ZMT0FUIGR4KSBjb25zdAoreworICAgIEZYX0ZMT0FUIGZ4ID0gYSAqIGR4LCBmeSA9IGIgKiBkeDsKKyAgICByZXR1cm4gRlhTWVNfc3FydChmeCAqIGZ4ICsgZnkgKiBmeSk7Cit9CitGWF9JTlQzMiBDRlhfTWF0cml4OjpUcmFuc2Zvcm1YRGlzdGFuY2UoRlhfSU5UMzIgZHgpIGNvbnN0Cit7CisgICAgRlhfRkxPQVQgZnggPSBhICogZHgsIGZ5ID0gYiAqIGR4OworICAgIHJldHVybiBGWFNZU19yb3VuZChGWFNZU19zcXJ0KGZ4ICogZnggKyBmeSAqIGZ5KSk7Cit9CitGWF9GTE9BVCBDRlhfTWF0cml4OjpUcmFuc2Zvcm1ZRGlzdGFuY2UoRlhfRkxPQVQgZHkpIGNvbnN0Cit7CisgICAgRlhfRkxPQVQgZnggPSBjICogZHksIGZ5ID0gZCAqIGR5OworICAgIHJldHVybiBGWFNZU19zcXJ0KGZ4ICogZnggKyBmeSAqIGZ5KTsKK30KK0ZYX0lOVDMyIENGWF9NYXRyaXg6OlRyYW5zZm9ybVlEaXN0YW5jZShGWF9JTlQzMiBkeSkgY29uc3QKK3sKKyAgICBGWF9GTE9BVCBmeCA9IGMgKiBkeSwgZnkgPSBkICogZHk7CisgICAgcmV0dXJuIEZYU1lTX3JvdW5kKEZYU1lTX3NxcnQoZnggKiBmeCArIGZ5ICogZnkpKTsKK30KK0ZYX0ZMT0FUIENGWF9NYXRyaXg6OlRyYW5zZm9ybURpc3RhbmNlKEZYX0ZMT0FUIGR4LCBGWF9GTE9BVCBkeSkgY29uc3QKK3sKKyAgICBGWF9GTE9BVCBmeCA9IGEgKiBkeCArIGMgKiBkeSwgZnkgPSBiICogZHggKyBkICogZHk7CisgICAgcmV0dXJuIEZYU1lTX3NxcnQoZnggKiBmeCArIGZ5ICogZnkpOworfQorRlhfSU5UMzIgQ0ZYX01hdHJpeDo6VHJhbnNmb3JtRGlzdGFuY2UoRlhfSU5UMzIgZHgsIEZYX0lOVDMyIGR5KSBjb25zdAoreworICAgIEZYX0ZMT0FUIGZ4ID0gYSAqIGR4ICsgYyAqIGR5LCBmeSA9IGIgKiBkeCArIGQgKiBkeTsKKyAgICByZXR1cm4gRlhTWVNfcm91bmQoRlhTWVNfc3FydChmeCAqIGZ4ICsgZnkgKiBmeSkpOworfQorRlhfRkxPQVQgQ0ZYX01hdHJpeDo6VHJhbnNmb3JtRGlzdGFuY2UoRlhfRkxPQVQgZGlzdGFuY2UpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRpc3RhbmNlICogKEdldFhVbml0KCkgKyBHZXRZVW5pdCgpKSAvIDI7Cit9Cit2b2lkIENGWF9NYXRyaXg6OlRyYW5zZm9ybVZlY3RvcihDRlhfVmVjdG9yRiAmdikgY29uc3QKK3sKKyAgICBGWF9GTE9BVCBmeCA9IGEgKiB2LnggKyBjICogdi55OworICAgIEZYX0ZMT0FUIGZ5ID0gYiAqIHYueCArIGQgKiB2Lnk7CisgICAgdi54ID0gZngsIHYueSA9IGZ5OworfQordm9pZCBDRlhfTWF0cml4OjpUcmFuc2Zvcm1WZWN0b3IoQ0ZYX1ZlY3RvciAmdikgY29uc3QKK3sKKyAgICBGWF9GTE9BVCBmeCA9IGEgKiB2LnggKyBjICogdi55OworICAgIEZYX0ZMT0FUIGZ5ID0gYiAqIHYueCArIGQgKiB2Lnk7CisgICAgdi54ID0gRlhTWVNfcm91bmQoZngpOworICAgIHYueSA9IEZYU1lTX3JvdW5kKGZ5KTsKK30KK3ZvaWQgQ0ZYX01hdHJpeDo6VHJhbnNmb3JtUG9pbnRzKENGWF9Qb2ludCAqcG9pbnRzLCBGWF9JTlQzMiBpQ291bnQpIGNvbnN0Cit7CisgICAgRlhTWVNfYXNzZXJ0KGlDb3VudCA+IDApOworICAgIEZYX0ZMT0FUIGZ4LCBmeTsKKyAgICBmb3IgKEZYX0lOVDMyIGkgPSAwOyBpIDwgaUNvdW50OyBpICsrKSB7CisgICAgICAgIGZ4ID0gYSAqIHBvaW50cy0+eCArIGMgKiBwb2ludHMtPnkgKyBlOworICAgICAgICBmeSA9IGIgKiBwb2ludHMtPnggKyBkICogcG9pbnRzLT55ICsgZjsKKyAgICAgICAgcG9pbnRzLT54ID0gRlhTWVNfcm91bmQoZngpOworICAgICAgICBwb2ludHMtPnkgPSBGWFNZU19yb3VuZChmeSk7CisgICAgICAgIHBvaW50cyArKzsKKyAgICB9Cit9Cit2b2lkIENGWF9NYXRyaXg6OlRyYW5zZm9ybVBvaW50cyhDRlhfUG9pbnRGICpwb2ludHMsIEZYX0lOVDMyIGlDb3VudCkgY29uc3QKK3sKKyAgICBGWFNZU19hc3NlcnQoaUNvdW50ID4gMCk7CisgICAgRlhfRkxPQVQgZngsIGZ5OworICAgIGZvciAoRlhfSU5UMzIgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspIHsKKyAgICAgICAgZnggPSBhICogcG9pbnRzLT54ICsgYyAqIHBvaW50cy0+eSArIGU7CisgICAgICAgIGZ5ID0gYiAqIHBvaW50cy0+eCArIGQgKiBwb2ludHMtPnkgKyBmOworICAgICAgICBwb2ludHMtPnggPSBmeCwgcG9pbnRzLT55ID0gZnk7CisgICAgICAgIHBvaW50cyArKzsKKyAgICB9Cit9Cit2b2lkIENGWF9NYXRyaXg6OlRyYW5zZm9ybVBvaW50KEZYX0ZMT0FUICZ4LCBGWF9GTE9BVCAmeSkgY29uc3QKK3sKKyAgICBGWF9GTE9BVCBmeCA9IGEgKiB4ICsgYyAqIHkgKyBlOworICAgIEZYX0ZMT0FUIGZ5ID0gYiAqIHggKyBkICogeSArIGY7CisgICAgeCA9IGZ4LCB5ID0gZnk7Cit9Cit2b2lkIENGWF9NYXRyaXg6OlRyYW5zZm9ybVBvaW50KEZYX0lOVDMyICZ4LCBGWF9JTlQzMiAmeSkgY29uc3QKK3sKKyAgICBGWF9GTE9BVCBmeCA9IGEgKiB4ICsgYyAqIHkgKyBlOworICAgIEZYX0ZMT0FUIGZ5ID0gYiAqIHggKyBkICogeSArIGY7CisgICAgeCA9IEZYU1lTX3JvdW5kKGZ4KTsKKyAgICB5ID0gRlhTWVNfcm91bmQoZnkpOworfQordm9pZCBDRlhfTWF0cml4OjpUcmFuc2Zvcm1SZWN0KENGWF9SZWN0RiAmcmVjdCkgY29uc3QKK3sKKyAgICBGWF9GTE9BVCByaWdodCA9IHJlY3QucmlnaHQoKSwgYm90dG9tID0gcmVjdC5ib3R0b20oKTsKKyAgICBUcmFuc2Zvcm1SZWN0KHJlY3QubGVmdCwgcmlnaHQsIGJvdHRvbSwgcmVjdC50b3ApOworICAgIHJlY3Qud2lkdGggPSByaWdodCAtIHJlY3QubGVmdDsKKyAgICByZWN0LmhlaWdodCA9IGJvdHRvbSAtIHJlY3QudG9wOworfQordm9pZCBDRlhfTWF0cml4OjpUcmFuc2Zvcm1SZWN0KENGWF9SZWN0ICZyZWN0KSBjb25zdAoreworICAgIEZYX0ZMT0FUIGxlZnQgPSAoRlhfRkxPQVQpcmVjdC5sZWZ0OworICAgIEZYX0ZMT0FUIHRvcCA9IChGWF9GTE9BVClyZWN0LmJvdHRvbSgpOworICAgIEZYX0ZMT0FUIHJpZ2h0ID0gKEZYX0ZMT0FUKXJlY3QucmlnaHQoKTsKKyAgICBGWF9GTE9BVCBib3R0b20gPSAoRlhfRkxPQVQpcmVjdC50b3A7CisgICAgVHJhbnNmb3JtUmVjdChsZWZ0LCByaWdodCwgdG9wLCBib3R0b20pOworICAgIHJlY3QubGVmdCA9IEZYU1lTX3JvdW5kKGxlZnQpOworICAgIHJlY3QudG9wID0gRlhTWVNfcm91bmQoYm90dG9tKTsKKyAgICByZWN0LndpZHRoID0gRlhTWVNfcm91bmQocmlnaHQgLSBsZWZ0KTsKKyAgICByZWN0LmhlaWdodCA9IEZYU1lTX3JvdW5kKHRvcCAtIGJvdHRvbSk7Cit9Cit2b2lkIENGWF9NYXRyaXg6OlRyYW5zZm9ybVJlY3QoRlhfRkxPQVQmIGxlZnQsIEZYX0ZMT0FUJiByaWdodCwgRlhfRkxPQVQmIHRvcCwgRlhfRkxPQVQmIGJvdHRvbSkgY29uc3QKK3sKKyAgICBGWF9GTE9BVCB4WzRdLCB5WzRdOworICAgIHhbMF0gPSBsZWZ0OworICAgIHlbMF0gPSB0b3A7CisgICAgeFsxXSA9IGxlZnQ7CisgICAgeVsxXSA9IGJvdHRvbTsKKyAgICB4WzJdID0gcmlnaHQ7CisgICAgeVsyXSA9IHRvcDsKKyAgICB4WzNdID0gcmlnaHQ7CisgICAgeVszXSA9IGJvdHRvbTsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSArKykgeworICAgICAgICBUcmFuc2Zvcm0oeFtpXSwgeVtpXSwgeFtpXSwgeVtpXSk7CisgICAgfQorICAgIHJpZ2h0ID0gbGVmdCA9IHhbMF07CisgICAgdG9wID0gYm90dG9tID0geVswXTsKKyAgICBmb3IgKGkgPSAxOyBpIDwgNDsgaSArKykgeworICAgICAgICBpZiAocmlnaHQgPCB4W2ldKSB7CisgICAgICAgICAgICByaWdodCA9IHhbaV07CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxlZnQgPiB4W2ldKSB7CisgICAgICAgICAgICBsZWZ0ID0geFtpXTsKKyAgICAgICAgfQorICAgICAgICBpZiAodG9wIDwgeVtpXSkgeworICAgICAgICAgICAgdG9wID0geVtpXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYm90dG9tID4geVtpXSkgeworICAgICAgICAgICAgYm90dG9tID0geVtpXTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX2djYy5jcHAgYi9jb3JlL3NyYy9meGNydC9meF9iYXNpY19nY2MuY3BwCmluZGV4IDIwYTFlNTguLjdmNWJiYWQgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX2djYy5jcHAKKysrIGIvY29yZS9zcmMvZnhjcnQvZnhfYmFzaWNfZ2NjLmNwcApAQCAtMSwyMzIgKzEsMjMyIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGNydC9meF9leHQuaCINCi10ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgU1RSX1Q+DQotVCBGWFNZU19TdHJUb0ludChTVFJfVCBzdHIpDQotew0KLSAgICBGWF9CT09MIG5lZyA9IEZBTFNFOw0KLSAgICBpZiAoc3RyID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGlmICgqc3RyID09ICctJykgew0KLSAgICAgICAgbmVnID0gVFJVRTsNCi0gICAgICAgIHN0ciArKzsNCi0gICAgfQ0KLSAgICBUIG51bSA9IDA7DQotICAgIHdoaWxlICgqc3RyKSB7DQotICAgICAgICBpZiAoKCpzdHIpIDwgJzAnIHx8ICgqc3RyKSA+ICc5Jykgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbnVtID0gbnVtICogMTAgKyAoKnN0cikgLSAnMCc7DQotICAgICAgICBzdHIgKys7DQotICAgIH0NCi0gICAgcmV0dXJuIG5lZyA/IC1udW0gOiBudW07DQotfQ0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBTVFJfVD4NCi1TVFJfVCBGWFNZU19JbnRUb1N0cihUIHZhbHVlLCBTVFJfVCBzdHJpbmcsIGludCByYWRpeCkNCi17DQotICAgIGludCBpID0gMDsNCi0gICAgaWYgKHZhbHVlIDwgMCkgew0KLSAgICAgICAgc3RyaW5nW2krK10gPSAnLSc7DQotICAgICAgICB2YWx1ZSA9IC12YWx1ZTsNCi0gICAgfSBlbHNlIGlmICh2YWx1ZSA9PSAwKSB7DQotICAgICAgICBzdHJpbmdbMF0gPSAnMCc7DQotICAgICAgICBzdHJpbmdbMV0gPSAwOw0KLSAgICAgICAgcmV0dXJuIHN0cmluZzsNCi0gICAgfQ0KLSAgICBpbnQgZGlnaXRzID0gMTsNCi0gICAgVCBvcmRlciA9IHZhbHVlIC8gMTA7DQotICAgIHdoaWxlKG9yZGVyID4gMCkgew0KLSAgICAgICAgZGlnaXRzKys7DQotICAgICAgICBvcmRlciA9IG9yZGVyIC8gMTA7DQotICAgIH0NCi0gICAgZm9yIChpbnQgZCA9IGRpZ2l0cyAtIDE7IGQgPiAtMTsgZC0tKSB7DQotICAgICAgICBzdHJpbmdbZCArIGldID0gIjAxMjM0NTY3ODlhYmNkZWYiW3ZhbHVlICUgMTBdOw0KLSAgICAgICAgdmFsdWUgLz0gMTA7DQotICAgIH0NCi0gICAgc3RyaW5nW2RpZ2l0cyArIGldID0gMDsNCi0gICAgcmV0dXJuIHN0cmluZzsNCi19DQotI2lmZGVmIF9fY3BsdXNwbHVzDQotZXh0ZXJuICJDIiB7DQotI2VuZGlmDQotRlhfSU5UMzIgRlhTWVNfYXRvaShGWF9MUENTVFIgc3RyKQ0KLXsNCi0gICAgcmV0dXJuIEZYU1lTX1N0clRvSW50PEZYX0lOVDMyLCBGWF9MUENTVFI+KHN0cik7DQotfQ0KLUZYX0lOVDMyIEZYU1lTX3d0b2koRlhfTFBDV1NUUiBzdHIpDQotew0KLSAgICByZXR1cm4gRlhTWVNfU3RyVG9JbnQ8RlhfSU5UMzIsIEZYX0xQQ1dTVFI+KHN0cik7DQotfQ0KLUZYX0lOVDY0IEZYU1lTX2F0b2k2NChGWF9MUENTVFIgc3RyKQ0KLXsNCi0gICAgcmV0dXJuIEZYU1lTX1N0clRvSW50PEZYX0lOVDY0LCBGWF9MUENTVFI+KHN0cik7DQotfQ0KLUZYX0lOVDY0IEZYU1lTX3d0b2k2NChGWF9MUENXU1RSIHN0cikNCi17DQotICAgIHJldHVybiBGWFNZU19TdHJUb0ludDxGWF9JTlQ2NCwgRlhfTFBDV1NUUj4oc3RyKTsNCi19DQotRlhfTFBDU1RSIEZYU1lTX2k2NHRvYShGWF9JTlQ2NCB2YWx1ZSwgRlhfTFBTVFIgc3RyLCBpbnQgcmFkaXgpDQotew0KLSAgICByZXR1cm4gRlhTWVNfSW50VG9TdHI8RlhfSU5UNjQsIEZYX0xQU1RSPih2YWx1ZSwgc3RyLCByYWRpeCk7DQotfQ0KLUZYX0xQQ1dTVFIgRlhTWVNfaTY0dG93KEZYX0lOVDY0IHZhbHVlLCBGWF9MUFdTVFIgc3RyLCBpbnQgcmFkaXgpDQotew0KLSAgICByZXR1cm4gRlhTWVNfSW50VG9TdHI8RlhfSU5UNjQsIEZYX0xQV1NUUj4odmFsdWUsIHN0ciwgcmFkaXgpOw0KLX0NCi0jaWZkZWYgX19jcGx1c3BsdXMNCi19DQotI2VuZGlmDQotI2lmIF9GWE1fUExBVEZPUk1fICE9IF9GWE1fUExBVEZPUk1fV0lORE9XU18NCi0jaWZkZWYgX19jcGx1c3BsdXMNCi1leHRlcm4gIkMiIHsNCi0jZW5kaWYNCi1pbnQgRlhTWVNfR2V0QUNQKCkNCi17DQotICAgIHJldHVybiAwOw0KLX0NCi1GWF9EV09SRCBGWFNZU19HZXRGdWxsUGF0aE5hbWUoRlhfTFBDU1RSIGZpbGVuYW1lLCBGWF9EV09SRCBidWZsZW4sIEZYX0xQU1RSIGJ1ZiwgRlhfTFBTVFIqIGZpbGVwYXJ0KQ0KLXsNCi0gICAgaW50IHNyY2xlbiA9IEZYU1lTX3N0cmxlbihmaWxlbmFtZSk7DQotICAgIGlmIChidWYgPT0gTlVMTCB8fCAoaW50KWJ1ZmxlbiA8IHNyY2xlbiArIDEpIHsNCi0gICAgICAgIHJldHVybiBzcmNsZW4gKyAxOw0KLSAgICB9DQotICAgIEZYU1lTX3N0cmNweShidWYsIGZpbGVuYW1lKTsNCi0gICAgcmV0dXJuIHNyY2xlbjsNCi19DQotRlhfRFdPUkQgRlhTWVNfR2V0TW9kdWxlRmlsZU5hbWUoRlhfTFBWT0lEIGhNb2R1bGUsIGNoYXIqIGJ1ZiwgRlhfRFdPUkQgYnVmc2l6ZSkNCi17DQotICAgIHJldHVybiAoRlhfRFdPUkQpIC0gMTsNCi19DQotI2lmZGVmIF9fY3BsdXNwbHVzDQotfQ0KLSNlbmRpZg0KLSNlbmRpZg0KLSNpZiBfRlhNX1BMQVRGT1JNXyAhPSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfDQotI2lmZGVmIF9fY3BsdXNwbHVzDQotZXh0ZXJuICJDIiB7DQotI2VuZGlmDQotRlhTWVNfRklMRSogRlhTWVNfd2ZvcGVuKEZYX0xQQ1dTVFIgZmlsZW5hbWUsIEZYX0xQQ1dTVFIgbW9kZSkNCi17DQotICAgIHJldHVybiBGWFNZU19mb3BlbihDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUoZmlsZW5hbWUpLCBDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUobW9kZSkpOw0KLX0NCi1jaGFyKiBGWFNZU19zdHJsd3IoY2hhciogc3RyKQ0KLXsNCi0gICAgaWYgKHN0ciA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBjaGFyKiBzID0gc3RyOw0KLSAgICB3aGlsZSAoKnN0cikgew0KLSAgICAgICAgKnN0ciA9IEZYU1lTX3RvbG93ZXIoKnN0cik7DQotICAgICAgICBzdHIgKys7DQotICAgIH0NCi0gICAgcmV0dXJuIHM7DQotfQ0KLWNoYXIqIEZYU1lTX3N0cnVwcihjaGFyKiBzdHIpDQotew0KLSAgICBpZiAoc3RyID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGNoYXIqIHMgPSBzdHI7DQotICAgIHdoaWxlICgqc3RyKSB7DQotICAgICAgICAqc3RyID0gRlhTWVNfdG91cHBlcigqc3RyKTsNCi0gICAgICAgIHN0ciArKzsNCi0gICAgfQ0KLSAgICByZXR1cm4gczsNCi19DQotRlhfV0NIQVIqIEZYU1lTX3djc2x3cihGWF9XQ0hBUiogc3RyKQ0KLXsNCi0gICAgaWYgKHN0ciA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBGWF9XQ0hBUiogcyA9IHN0cjsNCi0gICAgd2hpbGUgKCpzdHIpIHsNCi0gICAgICAgICpzdHIgPSBGWFNZU190b2xvd2VyKCpzdHIpOw0KLSAgICAgICAgc3RyICsrOw0KLSAgICB9DQotICAgIHJldHVybiBzOw0KLX0NCi1GWF9XQ0hBUiogRlhTWVNfd2NzdXByKEZYX1dDSEFSKiBzdHIpDQotew0KLSAgICBpZiAoc3RyID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIEZYX1dDSEFSKiBzID0gc3RyOw0KLSAgICB3aGlsZSAoKnN0cikgew0KLSAgICAgICAgKnN0ciA9IEZYU1lTX3RvdXBwZXIoKnN0cik7DQotICAgICAgICBzdHIgKys7DQotICAgIH0NCi0gICAgcmV0dXJuIHM7DQotfQ0KLWludCBGWFNZU19zdHJpY21wKGNvbnN0IGNoYXIqZHN0LCBjb25zdCBjaGFyKnNyYykNCi17DQotICAgIGludCBmLCBsOw0KLSAgICBkbyB7DQotICAgICAgICBpZiAoICgoZiA9ICh1bnNpZ25lZCBjaGFyKSgqKGRzdCsrKSkpID49ICdBJykgJiYgKGYgPD0gJ1onKSApIHsNCi0gICAgICAgICAgICBmIC09ICgnQScgLSAnYScpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCAoKGwgPSAodW5zaWduZWQgY2hhcikoKihzcmMrKykpKSA+PSAnQScpICYmIChsIDw9ICdaJykgKSB7DQotICAgICAgICAgICAgbCAtPSAoJ0EnIC0gJ2EnKTsNCi0gICAgICAgIH0NCi0gICAgfSB3aGlsZSAoIGYgJiYgKGYgPT0gbCkgKTsNCi0gICAgcmV0dXJuKGYgLSBsKTsNCi19DQotaW50IEZYU1lTX3djc2ljbXAoY29uc3QgRlhfV0NIQVIgKmRzdCwgY29uc3QgRlhfV0NIQVIgKnNyYykNCi17DQotICAgIEZYX1dDSEFSIGYsIGw7DQotICAgIGRvIHsNCi0gICAgICAgIGlmICggKChmID0gKEZYX1dDSEFSKSgqKGRzdCsrKSkpID49ICdBJykgJiYgKGYgPD0gJ1onKSApIHsNCi0gICAgICAgICAgICBmIC09ICgnQScgLSAnYScpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCAoKGwgPSAoRlhfV0NIQVIpKCooc3JjKyspKSkgPj0gJ0EnKSAmJiAobCA8PSAnWicpICkgew0KLSAgICAgICAgICAgIGwgLT0gKCdBJyAtICdhJyk7DQotICAgICAgICB9DQotICAgIH0gd2hpbGUgKCBmICYmIChmID09IGwpICk7DQotICAgIHJldHVybihmIC0gbCk7DQotfQ0KLWNoYXIqIEZYU1lTX2l0b2EoaW50IHZhbHVlLCBjaGFyKiBzdHJpbmcsIGludCByYWRpeCkNCi17DQotICAgIHJldHVybiBGWFNZU19JbnRUb1N0cjxGWF9JTlQzMiwgRlhfTFBTVFI+KHZhbHVlLCBzdHJpbmcsIHJhZGl4KTsNCi19DQotI2lmZGVmIF9fY3BsdXNwbHVzDQotfQ0KLSNlbmRpZg0KLSNlbmRpZg0KLSNpZiBfRlhNX1BMQVRGT1JNXyAhPSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfDQotI2lmZGVmIF9fY3BsdXNwbHVzDQotZXh0ZXJuICJDIiB7DQotI2VuZGlmDQotaW50IEZYU1lTX1dpZGVDaGFyVG9NdWx0aUJ5dGUoRlhfRFdPUkQgY29kZXBhZ2UsIEZYX0RXT1JEIGR3RmxhZ3MsIEZYX0xQQ1dTVFIgd3N0ciwgaW50IHdsZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBTVFIgYnVmLCBpbnQgYnVmbGVuLCBGWF9MUENTVFIgZGVmYXVsdF9zdHIsIEZYX0JPT0wqIHBVc2VEZWZhdWx0KQ0KLXsNCi0gICAgaW50IGxlbiA9IDA7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd2xlbjsgaSArKykgew0KLSAgICAgICAgaWYgKHdzdHJbaV0gPCAweDEwMCkgew0KLSAgICAgICAgICAgIGlmIChidWYgJiYgbGVuIDwgYnVmbGVuKSB7DQotICAgICAgICAgICAgICAgIGJ1ZltsZW5dID0gKEZYX0NIQVIpd3N0cltpXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbGVuICsrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBsZW47DQotfQ0KLWludCBGWFNZU19NdWx0aUJ5dGVUb1dpZGVDaGFyKEZYX0RXT1JEIGNvZGVwYWdlLCBGWF9EV09SRCBkd0ZsYWdzLCBGWF9MUENTVFIgYnN0ciwgaW50IGJsZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBXU1RSIGJ1ZiwgaW50IGJ1ZmxlbikNCi17DQotICAgIGludCB3bGVuID0gMDsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBibGVuOyBpICsrKSB7DQotICAgICAgICBpZiAoYnVmICYmIHdsZW4gPCBidWZsZW4pIHsNCi0gICAgICAgICAgICBidWZbd2xlbl0gPSBic3RyW2ldOw0KLSAgICAgICAgfQ0KLSAgICAgICAgd2xlbiArKzsNCi0gICAgfQ0KLSAgICByZXR1cm4gd2xlbjsNCi19DQotI2lmZGVmIF9fY3BsdXNwbHVzDQotfQ0KLSNlbmRpZg0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2V4dC5oIgordGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFNUUl9UPgorVCBGWFNZU19TdHJUb0ludChTVFJfVCBzdHIpCit7CisgICAgRlhfQk9PTCBuZWcgPSBGQUxTRTsKKyAgICBpZiAoc3RyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICgqc3RyID09ICctJykgeworICAgICAgICBuZWcgPSBUUlVFOworICAgICAgICBzdHIgKys7CisgICAgfQorICAgIFQgbnVtID0gMDsKKyAgICB3aGlsZSAoKnN0cikgeworICAgICAgICBpZiAoKCpzdHIpIDwgJzAnIHx8ICgqc3RyKSA+ICc5JykgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbnVtID0gbnVtICogMTAgKyAoKnN0cikgLSAnMCc7CisgICAgICAgIHN0ciArKzsKKyAgICB9CisgICAgcmV0dXJuIG5lZyA/IC1udW0gOiBudW07Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgU1RSX1Q+CitTVFJfVCBGWFNZU19JbnRUb1N0cihUIHZhbHVlLCBTVFJfVCBzdHJpbmcsIGludCByYWRpeCkKK3sKKyAgICBpbnQgaSA9IDA7CisgICAgaWYgKHZhbHVlIDwgMCkgeworICAgICAgICBzdHJpbmdbaSsrXSA9ICctJzsKKyAgICAgICAgdmFsdWUgPSAtdmFsdWU7CisgICAgfSBlbHNlIGlmICh2YWx1ZSA9PSAwKSB7CisgICAgICAgIHN0cmluZ1swXSA9ICcwJzsKKyAgICAgICAgc3RyaW5nWzFdID0gMDsKKyAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICB9CisgICAgaW50IGRpZ2l0cyA9IDE7CisgICAgVCBvcmRlciA9IHZhbHVlIC8gMTA7CisgICAgd2hpbGUob3JkZXIgPiAwKSB7CisgICAgICAgIGRpZ2l0cysrOworICAgICAgICBvcmRlciA9IG9yZGVyIC8gMTA7CisgICAgfQorICAgIGZvciAoaW50IGQgPSBkaWdpdHMgLSAxOyBkID4gLTE7IGQtLSkgeworICAgICAgICBzdHJpbmdbZCArIGldID0gIjAxMjM0NTY3ODlhYmNkZWYiW3ZhbHVlICUgMTBdOworICAgICAgICB2YWx1ZSAvPSAxMDsKKyAgICB9CisgICAgc3RyaW5nW2RpZ2l0cyArIGldID0gMDsKKyAgICByZXR1cm4gc3RyaW5nOworfQorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorRlhfSU5UMzIgRlhTWVNfYXRvaShGWF9MUENTVFIgc3RyKQoreworICAgIHJldHVybiBGWFNZU19TdHJUb0ludDxGWF9JTlQzMiwgRlhfTFBDU1RSPihzdHIpOworfQorRlhfSU5UMzIgRlhTWVNfd3RvaShGWF9MUENXU1RSIHN0cikKK3sKKyAgICByZXR1cm4gRlhTWVNfU3RyVG9JbnQ8RlhfSU5UMzIsIEZYX0xQQ1dTVFI+KHN0cik7Cit9CitGWF9JTlQ2NCBGWFNZU19hdG9pNjQoRlhfTFBDU1RSIHN0cikKK3sKKyAgICByZXR1cm4gRlhTWVNfU3RyVG9JbnQ8RlhfSU5UNjQsIEZYX0xQQ1NUUj4oc3RyKTsKK30KK0ZYX0lOVDY0IEZYU1lTX3d0b2k2NChGWF9MUENXU1RSIHN0cikKK3sKKyAgICByZXR1cm4gRlhTWVNfU3RyVG9JbnQ8RlhfSU5UNjQsIEZYX0xQQ1dTVFI+KHN0cik7Cit9CitGWF9MUENTVFIgRlhTWVNfaTY0dG9hKEZYX0lOVDY0IHZhbHVlLCBGWF9MUFNUUiBzdHIsIGludCByYWRpeCkKK3sKKyAgICByZXR1cm4gRlhTWVNfSW50VG9TdHI8RlhfSU5UNjQsIEZYX0xQU1RSPih2YWx1ZSwgc3RyLCByYWRpeCk7Cit9CitGWF9MUENXU1RSIEZYU1lTX2k2NHRvdyhGWF9JTlQ2NCB2YWx1ZSwgRlhfTFBXU1RSIHN0ciwgaW50IHJhZGl4KQoreworICAgIHJldHVybiBGWFNZU19JbnRUb1N0cjxGWF9JTlQ2NCwgRlhfTFBXU1RSPih2YWx1ZSwgc3RyLCByYWRpeCk7Cit9CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2lmIF9GWE1fUExBVEZPUk1fICE9IF9GWE1fUExBVEZPUk1fV0lORE9XU18KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK2ludCBGWFNZU19HZXRBQ1AoKQoreworICAgIHJldHVybiAwOworfQorRlhfRFdPUkQgRlhTWVNfR2V0RnVsbFBhdGhOYW1lKEZYX0xQQ1NUUiBmaWxlbmFtZSwgRlhfRFdPUkQgYnVmbGVuLCBGWF9MUFNUUiBidWYsIEZYX0xQU1RSKiBmaWxlcGFydCkKK3sKKyAgICBpbnQgc3JjbGVuID0gRlhTWVNfc3RybGVuKGZpbGVuYW1lKTsKKyAgICBpZiAoYnVmID09IE5VTEwgfHwgKGludClidWZsZW4gPCBzcmNsZW4gKyAxKSB7CisgICAgICAgIHJldHVybiBzcmNsZW4gKyAxOworICAgIH0KKyAgICBGWFNZU19zdHJjcHkoYnVmLCBmaWxlbmFtZSk7CisgICAgcmV0dXJuIHNyY2xlbjsKK30KK0ZYX0RXT1JEIEZYU1lTX0dldE1vZHVsZUZpbGVOYW1lKEZYX0xQVk9JRCBoTW9kdWxlLCBjaGFyKiBidWYsIEZYX0RXT1JEIGJ1ZnNpemUpCit7CisgICAgcmV0dXJuIChGWF9EV09SRCkgLSAxOworfQorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZgorI2lmIF9GWE1fUExBVEZPUk1fICE9IF9GWE1fUExBVEZPUk1fV0lORE9XU18KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK0ZYU1lTX0ZJTEUqIEZYU1lTX3dmb3BlbihGWF9MUENXU1RSIGZpbGVuYW1lLCBGWF9MUENXU1RSIG1vZGUpCit7CisgICAgcmV0dXJuIEZYU1lTX2ZvcGVuKENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShmaWxlbmFtZSksIENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShtb2RlKSk7Cit9CitjaGFyKiBGWFNZU19zdHJsd3IoY2hhciogc3RyKQoreworICAgIGlmIChzdHIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgY2hhciogcyA9IHN0cjsKKyAgICB3aGlsZSAoKnN0cikgeworICAgICAgICAqc3RyID0gRlhTWVNfdG9sb3dlcigqc3RyKTsKKyAgICAgICAgc3RyICsrOworICAgIH0KKyAgICByZXR1cm4gczsKK30KK2NoYXIqIEZYU1lTX3N0cnVwcihjaGFyKiBzdHIpCit7CisgICAgaWYgKHN0ciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBjaGFyKiBzID0gc3RyOworICAgIHdoaWxlICgqc3RyKSB7CisgICAgICAgICpzdHIgPSBGWFNZU190b3VwcGVyKCpzdHIpOworICAgICAgICBzdHIgKys7CisgICAgfQorICAgIHJldHVybiBzOworfQorRlhfV0NIQVIqIEZYU1lTX3djc2x3cihGWF9XQ0hBUiogc3RyKQoreworICAgIGlmIChzdHIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRlhfV0NIQVIqIHMgPSBzdHI7CisgICAgd2hpbGUgKCpzdHIpIHsKKyAgICAgICAgKnN0ciA9IEZYU1lTX3RvbG93ZXIoKnN0cik7CisgICAgICAgIHN0ciArKzsKKyAgICB9CisgICAgcmV0dXJuIHM7Cit9CitGWF9XQ0hBUiogRlhTWVNfd2NzdXByKEZYX1dDSEFSKiBzdHIpCit7CisgICAgaWYgKHN0ciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBGWF9XQ0hBUiogcyA9IHN0cjsKKyAgICB3aGlsZSAoKnN0cikgeworICAgICAgICAqc3RyID0gRlhTWVNfdG91cHBlcigqc3RyKTsKKyAgICAgICAgc3RyICsrOworICAgIH0KKyAgICByZXR1cm4gczsKK30KK2ludCBGWFNZU19zdHJpY21wKGNvbnN0IGNoYXIqZHN0LCBjb25zdCBjaGFyKnNyYykKK3sKKyAgICBpbnQgZiwgbDsKKyAgICBkbyB7CisgICAgICAgIGlmICggKChmID0gKHVuc2lnbmVkIGNoYXIpKCooZHN0KyspKSkgPj0gJ0EnKSAmJiAoZiA8PSAnWicpICkgeworICAgICAgICAgICAgZiAtPSAoJ0EnIC0gJ2EnKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoICgobCA9ICh1bnNpZ25lZCBjaGFyKSgqKHNyYysrKSkpID49ICdBJykgJiYgKGwgPD0gJ1onKSApIHsKKyAgICAgICAgICAgIGwgLT0gKCdBJyAtICdhJyk7CisgICAgICAgIH0KKyAgICB9IHdoaWxlICggZiAmJiAoZiA9PSBsKSApOworICAgIHJldHVybihmIC0gbCk7Cit9CitpbnQgRlhTWVNfd2NzaWNtcChjb25zdCBGWF9XQ0hBUiAqZHN0LCBjb25zdCBGWF9XQ0hBUiAqc3JjKQoreworICAgIEZYX1dDSEFSIGYsIGw7CisgICAgZG8geworICAgICAgICBpZiAoICgoZiA9IChGWF9XQ0hBUikoKihkc3QrKykpKSA+PSAnQScpICYmIChmIDw9ICdaJykgKSB7CisgICAgICAgICAgICBmIC09ICgnQScgLSAnYScpOworICAgICAgICB9CisgICAgICAgIGlmICggKChsID0gKEZYX1dDSEFSKSgqKHNyYysrKSkpID49ICdBJykgJiYgKGwgPD0gJ1onKSApIHsKKyAgICAgICAgICAgIGwgLT0gKCdBJyAtICdhJyk7CisgICAgICAgIH0KKyAgICB9IHdoaWxlICggZiAmJiAoZiA9PSBsKSApOworICAgIHJldHVybihmIC0gbCk7Cit9CitjaGFyKiBGWFNZU19pdG9hKGludCB2YWx1ZSwgY2hhciogc3RyaW5nLCBpbnQgcmFkaXgpCit7CisgICAgcmV0dXJuIEZYU1lTX0ludFRvU3RyPEZYX0lOVDMyLCBGWF9MUFNUUj4odmFsdWUsIHN0cmluZywgcmFkaXgpOworfQorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZgorI2lmIF9GWE1fUExBVEZPUk1fICE9IF9GWE1fUExBVEZPUk1fV0lORE9XU18KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK2ludCBGWFNZU19XaWRlQ2hhclRvTXVsdGlCeXRlKEZYX0RXT1JEIGNvZGVwYWdlLCBGWF9EV09SRCBkd0ZsYWdzLCBGWF9MUENXU1RSIHdzdHIsIGludCB3bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBTVFIgYnVmLCBpbnQgYnVmbGVuLCBGWF9MUENTVFIgZGVmYXVsdF9zdHIsIEZYX0JPT0wqIHBVc2VEZWZhdWx0KQoreworICAgIGludCBsZW4gPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd2xlbjsgaSArKykgeworICAgICAgICBpZiAod3N0cltpXSA8IDB4MTAwKSB7CisgICAgICAgICAgICBpZiAoYnVmICYmIGxlbiA8IGJ1ZmxlbikgeworICAgICAgICAgICAgICAgIGJ1ZltsZW5dID0gKEZYX0NIQVIpd3N0cltpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxlbiArKzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbGVuOworfQoraW50IEZYU1lTX011bHRpQnl0ZVRvV2lkZUNoYXIoRlhfRFdPUkQgY29kZXBhZ2UsIEZYX0RXT1JEIGR3RmxhZ3MsIEZYX0xQQ1NUUiBic3RyLCBpbnQgYmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQV1NUUiBidWYsIGludCBidWZsZW4pCit7CisgICAgaW50IHdsZW4gPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmxlbjsgaSArKykgeworICAgICAgICBpZiAoYnVmICYmIHdsZW4gPCBidWZsZW4pIHsKKyAgICAgICAgICAgIGJ1Zlt3bGVuXSA9IGJzdHJbaV07CisgICAgICAgIH0KKyAgICAgICAgd2xlbiArKzsKKyAgICB9CisgICAgcmV0dXJuIHdsZW47Cit9CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNydC9meF9iYXNpY19saXN0LmNwcCBiL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX2xpc3QuY3BwCmluZGV4IDkyYjNkMmMuLmJmNzA5MTIgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX2xpc3QuY3BwCisrKyBiL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX2xpc3QuY3BwCkBAIC0xLDE0MSArMSwxNDEgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2Jhc2ljLmgiDQotI2luY2x1ZGUgInBsZXguaCINCi1DRlhfUHRyTGlzdDo6Q0ZYX1B0ckxpc3QoaW50IG5CbG9ja1NpemUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpDQotICAgIDogbV9wQWxsb2NhdG9yKHBBbGxvY2F0b3IpDQotICAgICwgbV9wTm9kZUhlYWQoTlVMTCkNCi0gICAgLCBtX3BOb2RlVGFpbChOVUxMKQ0KLSAgICAsIG1fbkNvdW50KDApDQotICAgICwgbV9wTm9kZUZyZWUoTlVMTCkNCi0gICAgLCBtX3BCbG9ja3MoTlVMTCkNCi0gICAgLCBtX25CbG9ja1NpemUobkJsb2NrU2l6ZSkNCi17DQotfQ0KLUZYX1BPU0lUSU9OIENGWF9QdHJMaXN0OjpBZGRUYWlsKHZvaWQqIG5ld0VsZW1lbnQpDQotew0KLSAgICBDTm9kZSogcE5ld05vZGUgPSBOZXdOb2RlKG1fcE5vZGVUYWlsLCBOVUxMKTsNCi0gICAgcE5ld05vZGUtPmRhdGEgPSBuZXdFbGVtZW50Ow0KLSAgICBpZiAobV9wTm9kZVRhaWwgIT0gTlVMTCkgew0KLSAgICAgICAgbV9wTm9kZVRhaWwtPnBOZXh0ID0gcE5ld05vZGU7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX3BOb2RlSGVhZCA9IHBOZXdOb2RlOw0KLSAgICB9DQotICAgIG1fcE5vZGVUYWlsID0gcE5ld05vZGU7DQotICAgIHJldHVybiAoRlhfUE9TSVRJT04pIHBOZXdOb2RlOw0KLX0NCi1GWF9QT1NJVElPTiBDRlhfUHRyTGlzdDo6QWRkSGVhZCh2b2lkKiBuZXdFbGVtZW50KQ0KLXsNCi0gICAgQ05vZGUqIHBOZXdOb2RlID0gTmV3Tm9kZShOVUxMLCBtX3BOb2RlSGVhZCk7DQotICAgIHBOZXdOb2RlLT5kYXRhID0gbmV3RWxlbWVudDsNCi0gICAgaWYgKG1fcE5vZGVIZWFkICE9IE5VTEwpIHsNCi0gICAgICAgIG1fcE5vZGVIZWFkLT5wUHJldiA9IHBOZXdOb2RlOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wTm9kZVRhaWwgPSBwTmV3Tm9kZTsNCi0gICAgfQ0KLSAgICBtX3BOb2RlSGVhZCA9IHBOZXdOb2RlOw0KLSAgICByZXR1cm4gKEZYX1BPU0lUSU9OKSBwTmV3Tm9kZTsNCi19DQotRlhfUE9TSVRJT04gQ0ZYX1B0ckxpc3Q6Okluc2VydEFmdGVyKEZYX1BPU0lUSU9OIHBvc2l0aW9uLCB2b2lkKiBuZXdFbGVtZW50KQ0KLXsNCi0gICAgaWYgKHBvc2l0aW9uID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBBZGRUYWlsKG5ld0VsZW1lbnQpOw0KLSAgICB9DQotICAgIENOb2RlKiBwT2xkTm9kZSA9IChDTm9kZSopIHBvc2l0aW9uOw0KLSAgICBDTm9kZSogcE5ld05vZGUgPSBOZXdOb2RlKHBPbGROb2RlLCBwT2xkTm9kZS0+cE5leHQpOw0KLSAgICBwTmV3Tm9kZS0+ZGF0YSA9IG5ld0VsZW1lbnQ7DQotICAgIGlmIChwT2xkTm9kZS0+cE5leHQgIT0gTlVMTCkgew0KLSAgICAgICAgcE9sZE5vZGUtPnBOZXh0LT5wUHJldiA9IHBOZXdOb2RlOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wTm9kZVRhaWwgPSBwTmV3Tm9kZTsNCi0gICAgfQ0KLSAgICBwT2xkTm9kZS0+cE5leHQgPSBwTmV3Tm9kZTsNCi0gICAgcmV0dXJuIChGWF9QT1NJVElPTikgcE5ld05vZGU7DQotfQ0KLXZvaWQgQ0ZYX1B0ckxpc3Q6OlJlbW92ZUF0KEZYX1BPU0lUSU9OIHBvc2l0aW9uKQ0KLXsNCi0gICAgQ05vZGUqIHBPbGROb2RlID0gKENOb2RlKikgcG9zaXRpb247DQotICAgIGlmIChwT2xkTm9kZSA9PSBtX3BOb2RlSGVhZCkgew0KLSAgICAgICAgbV9wTm9kZUhlYWQgPSBwT2xkTm9kZS0+cE5leHQ7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBwT2xkTm9kZS0+cFByZXYtPnBOZXh0ID0gcE9sZE5vZGUtPnBOZXh0Ow0KLSAgICB9DQotICAgIGlmIChwT2xkTm9kZSA9PSBtX3BOb2RlVGFpbCkgew0KLSAgICAgICAgbV9wTm9kZVRhaWwgPSBwT2xkTm9kZS0+cFByZXY7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBwT2xkTm9kZS0+cE5leHQtPnBQcmV2ID0gcE9sZE5vZGUtPnBQcmV2Ow0KLSAgICB9DQotICAgIEZyZWVOb2RlKHBPbGROb2RlKTsNCi19DQotdm9pZCBDRlhfUHRyTGlzdDo6RnJlZU5vZGUoQ0ZYX1B0ckxpc3Q6OkNOb2RlKiBwTm9kZSkNCi17DQotICAgIHBOb2RlLT5wTmV4dCA9IG1fcE5vZGVGcmVlOw0KLSAgICBtX3BOb2RlRnJlZSA9IHBOb2RlOw0KLSAgICBtX25Db3VudC0tOw0KLSAgICBpZiAobV9uQ291bnQgPT0gMCkgew0KLSAgICAgICAgUmVtb3ZlQWxsKCk7DQotICAgIH0NCi19DQotdm9pZCBDRlhfUHRyTGlzdDo6UmVtb3ZlQWxsKCkNCi17DQotICAgIG1fbkNvdW50ID0gMDsNCi0gICAgbV9wTm9kZUhlYWQgPSBtX3BOb2RlVGFpbCA9IG1fcE5vZGVGcmVlID0gTlVMTDsNCi0gICAgbV9wQmxvY2tzLT5GcmVlRGF0YUNoYWluKG1fcEFsbG9jYXRvcik7DQotICAgIG1fcEJsb2NrcyA9IE5VTEw7DQotfQ0KLUNGWF9QdHJMaXN0OjpDTm9kZSoNCi1DRlhfUHRyTGlzdDo6TmV3Tm9kZShDRlhfUHRyTGlzdDo6Q05vZGUqIHBQcmV2LCBDRlhfUHRyTGlzdDo6Q05vZGUqIHBOZXh0KQ0KLXsNCi0gICAgaWYgKG1fcE5vZGVGcmVlID09IE5VTEwpIHsNCi0gICAgICAgIENGWF9QbGV4KiBwTmV3QmxvY2sgPSBDRlhfUGxleDo6Q3JlYXRlKG1fcEFsbG9jYXRvciwgbV9wQmxvY2tzLCBtX25CbG9ja1NpemUsIHNpemVvZihDTm9kZSkpOw0KLSAgICAgICAgQ05vZGUqIHBOb2RlID0gKENOb2RlKilwTmV3QmxvY2stPmRhdGEoKTsNCi0gICAgICAgIHBOb2RlICs9IG1fbkJsb2NrU2l6ZSAtIDE7DQotICAgICAgICBmb3IgKGludCBpID0gbV9uQmxvY2tTaXplIC0gMTsgaSA+PSAwOyBpLS0sIHBOb2RlLS0pIHsNCi0gICAgICAgICAgICBwTm9kZS0+cE5leHQgPSBtX3BOb2RlRnJlZTsNCi0gICAgICAgICAgICBtX3BOb2RlRnJlZSA9IHBOb2RlOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIEFTU0VSVChtX3BOb2RlRnJlZSAhPSBOVUxMKTsNCi0gICAgQ0ZYX1B0ckxpc3Q6OkNOb2RlKiBwTm9kZSA9IG1fcE5vZGVGcmVlOw0KLSAgICBtX3BOb2RlRnJlZSA9IG1fcE5vZGVGcmVlLT5wTmV4dDsNCi0gICAgcE5vZGUtPnBQcmV2ID0gcFByZXY7DQotICAgIHBOb2RlLT5wTmV4dCA9IHBOZXh0Ow0KLSAgICBtX25Db3VudCsrOw0KLSAgICBBU1NFUlQobV9uQ291bnQgPiAwKTsNCi0gICAgcE5vZGUtPmRhdGEgPSAwOw0KLSAgICByZXR1cm4gcE5vZGU7DQotfQ0KLUNGWF9QdHJMaXN0Ojp+Q0ZYX1B0ckxpc3QoKQ0KLXsNCi0gICAgUmVtb3ZlQWxsKCk7DQotICAgIEFTU0VSVChtX25Db3VudCA9PSAwKTsNCi19DQotRlhfUE9TSVRJT04gQ0ZYX1B0ckxpc3Q6OkZpbmRJbmRleChpbnQgbkluZGV4KSBjb25zdA0KLXsNCi0gICAgaWYgKG5JbmRleCA+PSBtX25Db3VudCB8fCBuSW5kZXggPCAwKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDTm9kZSogcE5vZGUgPSBtX3BOb2RlSGVhZDsNCi0gICAgd2hpbGUgKG5JbmRleC0tKSB7DQotICAgICAgICBwTm9kZSA9IHBOb2RlLT5wTmV4dDsNCi0gICAgfQ0KLSAgICByZXR1cm4gKEZYX1BPU0lUSU9OKSBwTm9kZTsNCi19DQotRlhfUE9TSVRJT04gQ0ZYX1B0ckxpc3Q6OkZpbmQodm9pZCogc2VhcmNoVmFsdWUsIEZYX1BPU0lUSU9OIHN0YXJ0QWZ0ZXIpIGNvbnN0DQotew0KLSAgICBDTm9kZSogcE5vZGUgPSAoQ05vZGUqKSBzdGFydEFmdGVyOw0KLSAgICBpZiAocE5vZGUgPT0gTlVMTCkgew0KLSAgICAgICAgcE5vZGUgPSBtX3BOb2RlSGVhZDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHBOb2RlID0gcE5vZGUtPnBOZXh0Ow0KLSAgICB9DQotICAgIGZvciAoOyBwTm9kZSAhPSBOVUxMOyBwTm9kZSA9IHBOb2RlLT5wTmV4dCkNCi0gICAgICAgIGlmIChwTm9kZS0+ZGF0YSA9PSBzZWFyY2hWYWx1ZSkgew0KLSAgICAgICAgICAgIHJldHVybiAoRlhfUE9TSVRJT04pIHBOb2RlOw0KLSAgICAgICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfYmFzaWMuaCIKKyNpbmNsdWRlICJwbGV4LmgiCitDRlhfUHRyTGlzdDo6Q0ZYX1B0ckxpc3QoaW50IG5CbG9ja1NpemUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpCisgICAgOiBtX3BBbGxvY2F0b3IocEFsbG9jYXRvcikKKyAgICAsIG1fcE5vZGVIZWFkKE5VTEwpCisgICAgLCBtX3BOb2RlVGFpbChOVUxMKQorICAgICwgbV9uQ291bnQoMCkKKyAgICAsIG1fcE5vZGVGcmVlKE5VTEwpCisgICAgLCBtX3BCbG9ja3MoTlVMTCkKKyAgICAsIG1fbkJsb2NrU2l6ZShuQmxvY2tTaXplKQoreworfQorRlhfUE9TSVRJT04gQ0ZYX1B0ckxpc3Q6OkFkZFRhaWwodm9pZCogbmV3RWxlbWVudCkKK3sKKyAgICBDTm9kZSogcE5ld05vZGUgPSBOZXdOb2RlKG1fcE5vZGVUYWlsLCBOVUxMKTsKKyAgICBwTmV3Tm9kZS0+ZGF0YSA9IG5ld0VsZW1lbnQ7CisgICAgaWYgKG1fcE5vZGVUYWlsICE9IE5VTEwpIHsKKyAgICAgICAgbV9wTm9kZVRhaWwtPnBOZXh0ID0gcE5ld05vZGU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wTm9kZUhlYWQgPSBwTmV3Tm9kZTsKKyAgICB9CisgICAgbV9wTm9kZVRhaWwgPSBwTmV3Tm9kZTsKKyAgICByZXR1cm4gKEZYX1BPU0lUSU9OKSBwTmV3Tm9kZTsKK30KK0ZYX1BPU0lUSU9OIENGWF9QdHJMaXN0OjpBZGRIZWFkKHZvaWQqIG5ld0VsZW1lbnQpCit7CisgICAgQ05vZGUqIHBOZXdOb2RlID0gTmV3Tm9kZShOVUxMLCBtX3BOb2RlSGVhZCk7CisgICAgcE5ld05vZGUtPmRhdGEgPSBuZXdFbGVtZW50OworICAgIGlmIChtX3BOb2RlSGVhZCAhPSBOVUxMKSB7CisgICAgICAgIG1fcE5vZGVIZWFkLT5wUHJldiA9IHBOZXdOb2RlOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcE5vZGVUYWlsID0gcE5ld05vZGU7CisgICAgfQorICAgIG1fcE5vZGVIZWFkID0gcE5ld05vZGU7CisgICAgcmV0dXJuIChGWF9QT1NJVElPTikgcE5ld05vZGU7Cit9CitGWF9QT1NJVElPTiBDRlhfUHRyTGlzdDo6SW5zZXJ0QWZ0ZXIoRlhfUE9TSVRJT04gcG9zaXRpb24sIHZvaWQqIG5ld0VsZW1lbnQpCit7CisgICAgaWYgKHBvc2l0aW9uID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEFkZFRhaWwobmV3RWxlbWVudCk7CisgICAgfQorICAgIENOb2RlKiBwT2xkTm9kZSA9IChDTm9kZSopIHBvc2l0aW9uOworICAgIENOb2RlKiBwTmV3Tm9kZSA9IE5ld05vZGUocE9sZE5vZGUsIHBPbGROb2RlLT5wTmV4dCk7CisgICAgcE5ld05vZGUtPmRhdGEgPSBuZXdFbGVtZW50OworICAgIGlmIChwT2xkTm9kZS0+cE5leHQgIT0gTlVMTCkgeworICAgICAgICBwT2xkTm9kZS0+cE5leHQtPnBQcmV2ID0gcE5ld05vZGU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wTm9kZVRhaWwgPSBwTmV3Tm9kZTsKKyAgICB9CisgICAgcE9sZE5vZGUtPnBOZXh0ID0gcE5ld05vZGU7CisgICAgcmV0dXJuIChGWF9QT1NJVElPTikgcE5ld05vZGU7Cit9Cit2b2lkIENGWF9QdHJMaXN0OjpSZW1vdmVBdChGWF9QT1NJVElPTiBwb3NpdGlvbikKK3sKKyAgICBDTm9kZSogcE9sZE5vZGUgPSAoQ05vZGUqKSBwb3NpdGlvbjsKKyAgICBpZiAocE9sZE5vZGUgPT0gbV9wTm9kZUhlYWQpIHsKKyAgICAgICAgbV9wTm9kZUhlYWQgPSBwT2xkTm9kZS0+cE5leHQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcE9sZE5vZGUtPnBQcmV2LT5wTmV4dCA9IHBPbGROb2RlLT5wTmV4dDsKKyAgICB9CisgICAgaWYgKHBPbGROb2RlID09IG1fcE5vZGVUYWlsKSB7CisgICAgICAgIG1fcE5vZGVUYWlsID0gcE9sZE5vZGUtPnBQcmV2OworICAgIH0gZWxzZSB7CisgICAgICAgIHBPbGROb2RlLT5wTmV4dC0+cFByZXYgPSBwT2xkTm9kZS0+cFByZXY7CisgICAgfQorICAgIEZyZWVOb2RlKHBPbGROb2RlKTsKK30KK3ZvaWQgQ0ZYX1B0ckxpc3Q6OkZyZWVOb2RlKENGWF9QdHJMaXN0OjpDTm9kZSogcE5vZGUpCit7CisgICAgcE5vZGUtPnBOZXh0ID0gbV9wTm9kZUZyZWU7CisgICAgbV9wTm9kZUZyZWUgPSBwTm9kZTsKKyAgICBtX25Db3VudC0tOworICAgIGlmIChtX25Db3VudCA9PSAwKSB7CisgICAgICAgIFJlbW92ZUFsbCgpOworICAgIH0KK30KK3ZvaWQgQ0ZYX1B0ckxpc3Q6OlJlbW92ZUFsbCgpCit7CisgICAgbV9uQ291bnQgPSAwOworICAgIG1fcE5vZGVIZWFkID0gbV9wTm9kZVRhaWwgPSBtX3BOb2RlRnJlZSA9IE5VTEw7CisgICAgbV9wQmxvY2tzLT5GcmVlRGF0YUNoYWluKG1fcEFsbG9jYXRvcik7CisgICAgbV9wQmxvY2tzID0gTlVMTDsKK30KK0NGWF9QdHJMaXN0OjpDTm9kZSoKK0NGWF9QdHJMaXN0OjpOZXdOb2RlKENGWF9QdHJMaXN0OjpDTm9kZSogcFByZXYsIENGWF9QdHJMaXN0OjpDTm9kZSogcE5leHQpCit7CisgICAgaWYgKG1fcE5vZGVGcmVlID09IE5VTEwpIHsKKyAgICAgICAgQ0ZYX1BsZXgqIHBOZXdCbG9jayA9IENGWF9QbGV4OjpDcmVhdGUobV9wQWxsb2NhdG9yLCBtX3BCbG9ja3MsIG1fbkJsb2NrU2l6ZSwgc2l6ZW9mKENOb2RlKSk7CisgICAgICAgIENOb2RlKiBwTm9kZSA9IChDTm9kZSopcE5ld0Jsb2NrLT5kYXRhKCk7CisgICAgICAgIHBOb2RlICs9IG1fbkJsb2NrU2l6ZSAtIDE7CisgICAgICAgIGZvciAoaW50IGkgPSBtX25CbG9ja1NpemUgLSAxOyBpID49IDA7IGktLSwgcE5vZGUtLSkgeworICAgICAgICAgICAgcE5vZGUtPnBOZXh0ID0gbV9wTm9kZUZyZWU7CisgICAgICAgICAgICBtX3BOb2RlRnJlZSA9IHBOb2RlOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChtX3BOb2RlRnJlZSAhPSBOVUxMKTsKKyAgICBDRlhfUHRyTGlzdDo6Q05vZGUqIHBOb2RlID0gbV9wTm9kZUZyZWU7CisgICAgbV9wTm9kZUZyZWUgPSBtX3BOb2RlRnJlZS0+cE5leHQ7CisgICAgcE5vZGUtPnBQcmV2ID0gcFByZXY7CisgICAgcE5vZGUtPnBOZXh0ID0gcE5leHQ7CisgICAgbV9uQ291bnQrKzsKKyAgICBBU1NFUlQobV9uQ291bnQgPiAwKTsKKyAgICBwTm9kZS0+ZGF0YSA9IDA7CisgICAgcmV0dXJuIHBOb2RlOworfQorQ0ZYX1B0ckxpc3Q6On5DRlhfUHRyTGlzdCgpCit7CisgICAgUmVtb3ZlQWxsKCk7CisgICAgQVNTRVJUKG1fbkNvdW50ID09IDApOworfQorRlhfUE9TSVRJT04gQ0ZYX1B0ckxpc3Q6OkZpbmRJbmRleChpbnQgbkluZGV4KSBjb25zdAoreworICAgIGlmIChuSW5kZXggPj0gbV9uQ291bnQgfHwgbkluZGV4IDwgMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ05vZGUqIHBOb2RlID0gbV9wTm9kZUhlYWQ7CisgICAgd2hpbGUgKG5JbmRleC0tKSB7CisgICAgICAgIHBOb2RlID0gcE5vZGUtPnBOZXh0OworICAgIH0KKyAgICByZXR1cm4gKEZYX1BPU0lUSU9OKSBwTm9kZTsKK30KK0ZYX1BPU0lUSU9OIENGWF9QdHJMaXN0OjpGaW5kKHZvaWQqIHNlYXJjaFZhbHVlLCBGWF9QT1NJVElPTiBzdGFydEFmdGVyKSBjb25zdAoreworICAgIENOb2RlKiBwTm9kZSA9IChDTm9kZSopIHN0YXJ0QWZ0ZXI7CisgICAgaWYgKHBOb2RlID09IE5VTEwpIHsKKyAgICAgICAgcE5vZGUgPSBtX3BOb2RlSGVhZDsKKyAgICB9IGVsc2UgeworICAgICAgICBwTm9kZSA9IHBOb2RlLT5wTmV4dDsKKyAgICB9CisgICAgZm9yICg7IHBOb2RlICE9IE5VTEw7IHBOb2RlID0gcE5vZGUtPnBOZXh0KQorICAgICAgICBpZiAocE5vZGUtPmRhdGEgPT0gc2VhcmNoVmFsdWUpIHsKKyAgICAgICAgICAgIHJldHVybiAoRlhfUE9TSVRJT04pIHBOb2RlOworICAgICAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNydC9meF9iYXNpY19tYXBzLmNwcCBiL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX21hcHMuY3BwCmluZGV4IGNiMzk3ZWUuLmEwYjE3ODggMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX21hcHMuY3BwCisrKyBiL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX21hcHMuY3BwCkBAIC0xLDY1NCArMSw2NTQgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2V4dC5oIg0KLSNpbmNsdWRlICJwbGV4LmgiDQotc3RhdGljIHZvaWQgQ29uc3RydWN0RWxlbWVudChDRlhfQnl0ZVN0cmluZyogcE5ld0RhdGEpDQotew0KLSAgICBuZXcgKHBOZXdEYXRhKSBDRlhfQnl0ZVN0cmluZygpOw0KLX0NCi1zdGF0aWMgdm9pZCBEZXN0cnVjdEVsZW1lbnQoQ0ZYX0J5dGVTdHJpbmcqIHBPbGREYXRhKQ0KLXsNCi0gICAgcE9sZERhdGEtPn5DRlhfQnl0ZVN0cmluZygpOw0KLX0NCi1DRlhfTWFwUHRyVG9QdHI6OkNGWF9NYXBQdHJUb1B0cihpbnQgbkJsb2NrU2l6ZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikNCi0gICAgOiBtX3BBbGxvY2F0b3IocEFsbG9jYXRvcikNCi0gICAgLCBtX3BIYXNoVGFibGUoTlVMTCkNCi0gICAgLCBtX25IYXNoVGFibGVTaXplKDE3KQ0KLSAgICAsIG1fbkNvdW50KDApDQotICAgICwgbV9wRnJlZUxpc3QoTlVMTCkNCi0gICAgLCBtX3BCbG9ja3MoTlVMTCkNCi0gICAgLCBtX25CbG9ja1NpemUobkJsb2NrU2l6ZSkNCi17DQotICAgIEFTU0VSVChtX25CbG9ja1NpemUgPiAwKTsNCi19DQotdm9pZCBDRlhfTWFwUHRyVG9QdHI6OlJlbW92ZUFsbCgpDQotew0KLSAgICBpZiAobV9wSGFzaFRhYmxlKSB7DQotICAgICAgICBGWF9BbGxvY2F0b3JfRnJlZShtX3BBbGxvY2F0b3IsIG1fcEhhc2hUYWJsZSk7DQotICAgICAgICBtX3BIYXNoVGFibGUgPSBOVUxMOw0KLSAgICB9DQotICAgIG1fbkNvdW50ID0gMDsNCi0gICAgbV9wRnJlZUxpc3QgPSBOVUxMOw0KLSAgICBtX3BCbG9ja3MtPkZyZWVEYXRhQ2hhaW4obV9wQWxsb2NhdG9yKTsNCi0gICAgbV9wQmxvY2tzID0gTlVMTDsNCi19DQotQ0ZYX01hcFB0clRvUHRyOjp+Q0ZYX01hcFB0clRvUHRyKCkNCi17DQotICAgIFJlbW92ZUFsbCgpOw0KLSAgICBBU1NFUlQobV9uQ291bnQgPT0gMCk7DQotfQ0KLUZYX0RXT1JEIENGWF9NYXBQdHJUb1B0cjo6SGFzaEtleSh2b2lkKiBrZXkpIGNvbnN0DQotew0KLSAgICByZXR1cm4gKChGWF9EV09SRCkoRlhfVUlOVFBUUilrZXkpID4+IDQ7DQotfQ0KLXZvaWQgQ0ZYX01hcFB0clRvUHRyOjpHZXROZXh0QXNzb2MoRlhfUE9TSVRJT04mIHJOZXh0UG9zaXRpb24sIHZvaWQqJiByS2V5LCB2b2lkKiYgclZhbHVlKSBjb25zdA0KLXsNCi0gICAgQVNTRVJUKG1fcEhhc2hUYWJsZSAhPSBOVUxMKTsNCi0gICAgQ0Fzc29jKiBwQXNzb2NSZXQgPSAoQ0Fzc29jKilyTmV4dFBvc2l0aW9uOw0KLSAgICBBU1NFUlQocEFzc29jUmV0ICE9IE5VTEwpOw0KLSAgICBpZiAocEFzc29jUmV0ID09IChDQXNzb2MqKSAtIDEpIHsNCi0gICAgICAgIGZvciAoRlhfRFdPUkQgbkJ1Y2tldCA9IDA7IG5CdWNrZXQgPCBtX25IYXNoVGFibGVTaXplOyBuQnVja2V0KyspDQotICAgICAgICAgICAgaWYgKChwQXNzb2NSZXQgPSBtX3BIYXNoVGFibGVbbkJ1Y2tldF0pICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgQVNTRVJUKHBBc3NvY1JldCAhPSBOVUxMKTsNCi0gICAgfQ0KLSAgICBDQXNzb2MqIHBBc3NvY05leHQ7DQotICAgIGlmICgocEFzc29jTmV4dCA9IHBBc3NvY1JldC0+cE5leHQpID09IE5VTEwpIHsNCi0gICAgICAgIGZvciAoRlhfRFdPUkQgbkJ1Y2tldCA9IChIYXNoS2V5KHBBc3NvY1JldC0+a2V5KSAlIG1fbkhhc2hUYWJsZVNpemUpICsgMTsgbkJ1Y2tldCA8IG1fbkhhc2hUYWJsZVNpemU7IG5CdWNrZXQgKyspIHsNCi0gICAgICAgICAgICBpZiAoKHBBc3NvY05leHQgPSBtX3BIYXNoVGFibGVbbkJ1Y2tldF0pICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJOZXh0UG9zaXRpb24gPSAoRlhfUE9TSVRJT04pIHBBc3NvY05leHQ7DQotICAgIHJLZXkgPSBwQXNzb2NSZXQtPmtleTsNCi0gICAgclZhbHVlID0gcEFzc29jUmV0LT52YWx1ZTsNCi19DQotRlhfQk9PTCBDRlhfTWFwUHRyVG9QdHI6Okxvb2t1cCh2b2lkKiBrZXksIHZvaWQqJiByVmFsdWUpIGNvbnN0DQotew0KLSAgICBGWF9EV09SRCBuSGFzaDsNCi0gICAgQ0Fzc29jKiBwQXNzb2MgPSBHZXRBc3NvY0F0KGtleSwgbkhhc2gpOw0KLSAgICBpZiAocEFzc29jID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByVmFsdWUgPSBwQXNzb2MtPnZhbHVlOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotdm9pZCogQ0ZYX01hcFB0clRvUHRyOjpHZXRWYWx1ZUF0KHZvaWQqIGtleSkgY29uc3QNCi17DQotICAgIEZYX0RXT1JEIG5IYXNoOw0KLSAgICBDQXNzb2MqIHBBc3NvYyA9IEdldEFzc29jQXQoa2V5LCBuSGFzaCk7DQotICAgIGlmIChwQXNzb2MgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIHBBc3NvYy0+dmFsdWU7DQotfQ0KLXZvaWQqJiBDRlhfTWFwUHRyVG9QdHI6Om9wZXJhdG9yW10odm9pZCoga2V5KQ0KLXsNCi0gICAgRlhfRFdPUkQgbkhhc2g7DQotICAgIENBc3NvYyogcEFzc29jOw0KLSAgICBpZiAoKHBBc3NvYyA9IEdldEFzc29jQXQoa2V5LCBuSGFzaCkpID09IE5VTEwpIHsNCi0gICAgICAgIGlmIChtX3BIYXNoVGFibGUgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIEluaXRIYXNoVGFibGUobV9uSGFzaFRhYmxlU2l6ZSk7DQotICAgICAgICB9DQotICAgICAgICBwQXNzb2MgPSBOZXdBc3NvYygpOw0KLSAgICAgICAgcEFzc29jLT5rZXkgPSBrZXk7DQotICAgICAgICBwQXNzb2MtPnBOZXh0ID0gbV9wSGFzaFRhYmxlW25IYXNoXTsNCi0gICAgICAgIG1fcEhhc2hUYWJsZVtuSGFzaF0gPSBwQXNzb2M7DQotICAgIH0NCi0gICAgcmV0dXJuIHBBc3NvYy0+dmFsdWU7DQotfQ0KLUNGWF9NYXBQdHJUb1B0cjo6Q0Fzc29jKg0KLUNGWF9NYXBQdHJUb1B0cjo6R2V0QXNzb2NBdCh2b2lkKiBrZXksIEZYX0RXT1JEJiBuSGFzaCkgY29uc3QNCi17DQotICAgIG5IYXNoID0gSGFzaEtleShrZXkpICUgbV9uSGFzaFRhYmxlU2l6ZTsNCi0gICAgaWYgKG1fcEhhc2hUYWJsZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDQXNzb2MqIHBBc3NvYzsNCi0gICAgZm9yIChwQXNzb2MgPSBtX3BIYXNoVGFibGVbbkhhc2hdOyBwQXNzb2MgIT0gTlVMTDsgcEFzc29jID0gcEFzc29jLT5wTmV4dCkgew0KLSAgICAgICAgaWYgKHBBc3NvYy0+a2V5ID09IGtleSkgew0KLSAgICAgICAgICAgIHJldHVybiBwQXNzb2M7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLUNGWF9NYXBQdHJUb1B0cjo6Q0Fzc29jKg0KLUNGWF9NYXBQdHJUb1B0cjo6TmV3QXNzb2MoKQ0KLXsNCi0gICAgaWYgKG1fcEZyZWVMaXN0ID09IE5VTEwpIHsNCi0gICAgICAgIENGWF9QbGV4KiBuZXdCbG9jayA9IENGWF9QbGV4OjpDcmVhdGUobV9wQWxsb2NhdG9yLCBtX3BCbG9ja3MsIG1fbkJsb2NrU2l6ZSwgc2l6ZW9mKENGWF9NYXBQdHJUb1B0cjo6Q0Fzc29jKSk7DQotICAgICAgICBDRlhfTWFwUHRyVG9QdHI6OkNBc3NvYyogcEFzc29jID0gKENGWF9NYXBQdHJUb1B0cjo6Q0Fzc29jKiluZXdCbG9jay0+ZGF0YSgpOw0KLSAgICAgICAgcEFzc29jICs9IG1fbkJsb2NrU2l6ZSAtIDE7DQotICAgICAgICBmb3IgKGludCBpID0gbV9uQmxvY2tTaXplIC0gMTsgaSA+PSAwOyBpLS0sIHBBc3NvYy0tKSB7DQotICAgICAgICAgICAgcEFzc29jLT5wTmV4dCA9IG1fcEZyZWVMaXN0Ow0KLSAgICAgICAgICAgIG1fcEZyZWVMaXN0ID0gcEFzc29jOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIEFTU0VSVChtX3BGcmVlTGlzdCAhPSBOVUxMKTsNCi0gICAgQ0ZYX01hcFB0clRvUHRyOjpDQXNzb2MqIHBBc3NvYyA9IG1fcEZyZWVMaXN0Ow0KLSAgICBtX3BGcmVlTGlzdCA9IG1fcEZyZWVMaXN0LT5wTmV4dDsNCi0gICAgbV9uQ291bnQrKzsNCi0gICAgQVNTRVJUKG1fbkNvdW50ID4gMCk7DQotICAgIHBBc3NvYy0+a2V5ID0gMDsNCi0gICAgcEFzc29jLT52YWx1ZSA9IDA7DQotICAgIHJldHVybiBwQXNzb2M7DQotfQ0KLXZvaWQgQ0ZYX01hcFB0clRvUHRyOjpJbml0SGFzaFRhYmxlKA0KLSAgICBGWF9EV09SRCBuSGFzaFNpemUsIEZYX0JPT0wgYkFsbG9jTm93KQ0KLXsNCi0gICAgQVNTRVJUKG1fbkNvdW50ID09IDApOw0KLSAgICBBU1NFUlQobkhhc2hTaXplID4gMCk7DQotICAgIGlmIChtX3BIYXNoVGFibGUgIT0gTlVMTCkgew0KLSAgICAgICAgRlhfQWxsb2NhdG9yX0ZyZWUobV9wQWxsb2NhdG9yLCBtX3BIYXNoVGFibGUpOw0KLSAgICAgICAgbV9wSGFzaFRhYmxlID0gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAoYkFsbG9jTm93KSB7DQotICAgICAgICBtX3BIYXNoVGFibGUgPSBGWF9BbGxvY2F0b3JfQWxsb2MobV9wQWxsb2NhdG9yLCBDQXNzb2MqLCBuSGFzaFNpemUpOw0KLSAgICAgICAgaWYgKG1fcEhhc2hUYWJsZSkgew0KLSAgICAgICAgICAgIEZYU1lTX21lbXNldDMyKG1fcEhhc2hUYWJsZSwgMCwgc2l6ZW9mKENBc3NvYyopICogbkhhc2hTaXplKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX25IYXNoVGFibGVTaXplID0gbkhhc2hTaXplOw0KLX0NCi1GWF9CT09MIENGWF9NYXBQdHJUb1B0cjo6UmVtb3ZlS2V5KHZvaWQqIGtleSkNCi17DQotICAgIGlmIChtX3BIYXNoVGFibGUgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIENBc3NvYyoqIHBwQXNzb2NQcmV2Ow0KLSAgICBwcEFzc29jUHJldiA9ICZtX3BIYXNoVGFibGVbSGFzaEtleShrZXkpICUgbV9uSGFzaFRhYmxlU2l6ZV07DQotICAgIENBc3NvYyogcEFzc29jOw0KLSAgICBmb3IgKHBBc3NvYyA9ICpwcEFzc29jUHJldjsgcEFzc29jICE9IE5VTEw7IHBBc3NvYyA9IHBBc3NvYy0+cE5leHQpIHsNCi0gICAgICAgIGlmIChwQXNzb2MtPmtleSA9PSBrZXkpIHsNCi0gICAgICAgICAgICAqcHBBc3NvY1ByZXYgPSBwQXNzb2MtPnBOZXh0Ow0KLSAgICAgICAgICAgIEZyZWVBc3NvYyhwQXNzb2MpOw0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcHBBc3NvY1ByZXYgPSAmcEFzc29jLT5wTmV4dDsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLXZvaWQgQ0ZYX01hcFB0clRvUHRyOjpGcmVlQXNzb2MoQ0ZYX01hcFB0clRvUHRyOjpDQXNzb2MqIHBBc3NvYykNCi17DQotICAgIHBBc3NvYy0+cE5leHQgPSBtX3BGcmVlTGlzdDsNCi0gICAgbV9wRnJlZUxpc3QgPSBwQXNzb2M7DQotICAgIG1fbkNvdW50LS07DQotICAgIEFTU0VSVChtX25Db3VudCA+PSAwKTsNCi0gICAgaWYgKG1fbkNvdW50ID09IDApIHsNCi0gICAgICAgIFJlbW92ZUFsbCgpOw0KLSAgICB9DQotfQ0KLUNGWF9NYXBCeXRlU3RyaW5nVG9QdHI6OkNGWF9NYXBCeXRlU3RyaW5nVG9QdHIoaW50IG5CbG9ja1NpemUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpDQotICAgIDogbV9wQWxsb2NhdG9yKHBBbGxvY2F0b3IpDQotICAgICwgbV9wSGFzaFRhYmxlKE5VTEwpDQotICAgICwgbV9uSGFzaFRhYmxlU2l6ZSgxNykNCi0gICAgLCBtX25Db3VudCgwKQ0KLSAgICAsIG1fcEZyZWVMaXN0KE5VTEwpDQotICAgICwgbV9wQmxvY2tzKE5VTEwpDQotICAgICwgbV9uQmxvY2tTaXplKG5CbG9ja1NpemUpDQotew0KLSAgICBBU1NFUlQobV9uQmxvY2tTaXplID4gMCk7DQotfQ0KLXZvaWQgQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0cjo6UmVtb3ZlQWxsKCkNCi17DQotICAgIGlmIChtX3BIYXNoVGFibGUgIT0gTlVMTCkgew0KLSAgICAgICAgZm9yIChGWF9EV09SRCBuSGFzaCA9IDA7IG5IYXNoIDwgbV9uSGFzaFRhYmxlU2l6ZTsgbkhhc2grKykgew0KLSAgICAgICAgICAgIENBc3NvYyogcEFzc29jOw0KLSAgICAgICAgICAgIGZvciAocEFzc29jID0gbV9wSGFzaFRhYmxlW25IYXNoXTsgcEFzc29jICE9IE5VTEw7DQotICAgICAgICAgICAgICAgICAgICBwQXNzb2MgPSBwQXNzb2MtPnBOZXh0KSB7DQotICAgICAgICAgICAgICAgIERlc3RydWN0RWxlbWVudCgmcEFzc29jLT5rZXkpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0FsbG9jYXRvcl9GcmVlKG1fcEFsbG9jYXRvciwgbV9wSGFzaFRhYmxlKTsNCi0gICAgICAgIG1fcEhhc2hUYWJsZSA9IE5VTEw7DQotICAgIH0NCi0gICAgbV9uQ291bnQgPSAwOw0KLSAgICBtX3BGcmVlTGlzdCA9IE5VTEw7DQotICAgIG1fcEJsb2Nrcy0+RnJlZURhdGFDaGFpbihtX3BBbGxvY2F0b3IpOw0KLSAgICBtX3BCbG9ja3MgPSBOVUxMOw0KLX0NCi1DRlhfTWFwQnl0ZVN0cmluZ1RvUHRyOjp+Q0ZYX01hcEJ5dGVTdHJpbmdUb1B0cigpDQotew0KLSAgICBSZW1vdmVBbGwoKTsNCi0gICAgQVNTRVJUKG1fbkNvdW50ID09IDApOw0KLX0NCi12b2lkIENGWF9NYXBCeXRlU3RyaW5nVG9QdHI6OkdldE5leHRBc3NvYyhGWF9QT1NJVElPTiYgck5leHRQb3NpdGlvbiwNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nJiByS2V5LCB2b2lkKiYgclZhbHVlKSBjb25zdA0KLXsNCi0gICAgQVNTRVJUKG1fcEhhc2hUYWJsZSAhPSBOVUxMKTsNCi0gICAgQ0Fzc29jKiBwQXNzb2NSZXQgPSAoQ0Fzc29jKilyTmV4dFBvc2l0aW9uOw0KLSAgICBBU1NFUlQocEFzc29jUmV0ICE9IE5VTEwpOw0KLSAgICBpZiAocEFzc29jUmV0ID09IChDQXNzb2MqKSAtIDEpIHsNCi0gICAgICAgIGZvciAoRlhfRFdPUkQgbkJ1Y2tldCA9IDA7IG5CdWNrZXQgPCBtX25IYXNoVGFibGVTaXplOyBuQnVja2V0KyspDQotICAgICAgICAgICAgaWYgKChwQXNzb2NSZXQgPSBtX3BIYXNoVGFibGVbbkJ1Y2tldF0pICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgQVNTRVJUKHBBc3NvY1JldCAhPSBOVUxMKTsNCi0gICAgfQ0KLSAgICBDQXNzb2MqIHBBc3NvY05leHQ7DQotICAgIGlmICgocEFzc29jTmV4dCA9IHBBc3NvY1JldC0+cE5leHQpID09IE5VTEwpIHsNCi0gICAgICAgIGZvciAoRlhfRFdPUkQgbkJ1Y2tldCA9IHBBc3NvY1JldC0+bkhhc2hWYWx1ZSArIDE7DQotICAgICAgICAgICAgICAgIG5CdWNrZXQgPCBtX25IYXNoVGFibGVTaXplOyBuQnVja2V0KyspDQotICAgICAgICAgICAgaWYgKChwQXNzb2NOZXh0ID0gbV9wSGFzaFRhYmxlW25CdWNrZXRdKSAhPSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgfQ0KLSAgICByTmV4dFBvc2l0aW9uID0gKEZYX1BPU0lUSU9OKSBwQXNzb2NOZXh0Ow0KLSAgICByS2V5ID0gcEFzc29jUmV0LT5rZXk7DQotICAgIHJWYWx1ZSA9IHBBc3NvY1JldC0+dmFsdWU7DQotfQ0KLUZYX0xQVk9JRCBDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyOjpHZXROZXh0VmFsdWUoRlhfUE9TSVRJT04mIHJOZXh0UG9zaXRpb24pIGNvbnN0DQotew0KLSAgICBBU1NFUlQobV9wSGFzaFRhYmxlICE9IE5VTEwpOw0KLSAgICBDQXNzb2MqIHBBc3NvY1JldCA9IChDQXNzb2MqKXJOZXh0UG9zaXRpb247DQotICAgIEFTU0VSVChwQXNzb2NSZXQgIT0gTlVMTCk7DQotICAgIGlmIChwQXNzb2NSZXQgPT0gKENBc3NvYyopIC0gMSkgew0KLSAgICAgICAgZm9yIChGWF9EV09SRCBuQnVja2V0ID0gMDsgbkJ1Y2tldCA8IG1fbkhhc2hUYWJsZVNpemU7IG5CdWNrZXQrKykNCi0gICAgICAgICAgICBpZiAoKHBBc3NvY1JldCA9IG1fcEhhc2hUYWJsZVtuQnVja2V0XSkgIT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICBBU1NFUlQocEFzc29jUmV0ICE9IE5VTEwpOw0KLSAgICB9DQotICAgIENBc3NvYyogcEFzc29jTmV4dDsNCi0gICAgaWYgKChwQXNzb2NOZXh0ID0gcEFzc29jUmV0LT5wTmV4dCkgPT0gTlVMTCkgew0KLSAgICAgICAgZm9yIChGWF9EV09SRCBuQnVja2V0ID0gcEFzc29jUmV0LT5uSGFzaFZhbHVlICsgMTsNCi0gICAgICAgICAgICAgICAgbkJ1Y2tldCA8IG1fbkhhc2hUYWJsZVNpemU7IG5CdWNrZXQrKykNCi0gICAgICAgICAgICBpZiAoKHBBc3NvY05leHQgPSBtX3BIYXNoVGFibGVbbkJ1Y2tldF0pICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICB9DQotICAgIHJOZXh0UG9zaXRpb24gPSAoRlhfUE9TSVRJT04pIHBBc3NvY05leHQ7DQotICAgIHJldHVybiBwQXNzb2NSZXQtPnZhbHVlOw0KLX0NCi12b2lkKiYgQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0cjo6b3BlcmF0b3JbXShGWF9CU1RSIGtleSkNCi17DQotICAgIEZYX0RXT1JEIG5IYXNoOw0KLSAgICBDQXNzb2MqIHBBc3NvYzsNCi0gICAgaWYgKChwQXNzb2MgPSBHZXRBc3NvY0F0KGtleSwgbkhhc2gpKSA9PSBOVUxMKSB7DQotICAgICAgICBpZiAobV9wSGFzaFRhYmxlID09IE5VTEwpIHsNCi0gICAgICAgICAgICBJbml0SGFzaFRhYmxlKG1fbkhhc2hUYWJsZVNpemUpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcEFzc29jID0gTmV3QXNzb2MoKTsNCi0gICAgICAgIHBBc3NvYy0+bkhhc2hWYWx1ZSA9IG5IYXNoOw0KLSAgICAgICAgcEFzc29jLT5rZXkgPSBrZXk7DQotICAgICAgICBwQXNzb2MtPnBOZXh0ID0gbV9wSGFzaFRhYmxlW25IYXNoXTsNCi0gICAgICAgIG1fcEhhc2hUYWJsZVtuSGFzaF0gPSBwQXNzb2M7DQotICAgIH0NCi0gICAgcmV0dXJuIHBBc3NvYy0+dmFsdWU7DQotfQ0KLUNGWF9NYXBCeXRlU3RyaW5nVG9QdHI6OkNBc3NvYyoNCi1DRlhfTWFwQnl0ZVN0cmluZ1RvUHRyOjpOZXdBc3NvYygpDQotew0KLSAgICBpZiAobV9wRnJlZUxpc3QgPT0gTlVMTCkgew0KLSAgICAgICAgQ0ZYX1BsZXgqIG5ld0Jsb2NrID0gQ0ZYX1BsZXg6OkNyZWF0ZShtX3BBbGxvY2F0b3IsIG1fcEJsb2NrcywgbV9uQmxvY2tTaXplLCBzaXplb2YoQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0cjo6Q0Fzc29jKSk7DQotICAgICAgICBDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyOjpDQXNzb2MqIHBBc3NvYyA9IChDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyOjpDQXNzb2MqKW5ld0Jsb2NrLT5kYXRhKCk7DQotICAgICAgICBwQXNzb2MgKz0gbV9uQmxvY2tTaXplIC0gMTsNCi0gICAgICAgIGZvciAoaW50IGkgPSBtX25CbG9ja1NpemUgLSAxOyBpID49IDA7IGktLSwgcEFzc29jLS0pIHsNCi0gICAgICAgICAgICBwQXNzb2MtPnBOZXh0ID0gbV9wRnJlZUxpc3Q7DQotICAgICAgICAgICAgbV9wRnJlZUxpc3QgPSBwQXNzb2M7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgQVNTRVJUKG1fcEZyZWVMaXN0ICE9IE5VTEwpOw0KLSAgICBDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyOjpDQXNzb2MqIHBBc3NvYyA9IG1fcEZyZWVMaXN0Ow0KLSAgICBtX3BGcmVlTGlzdCA9IG1fcEZyZWVMaXN0LT5wTmV4dDsNCi0gICAgbV9uQ291bnQrKzsNCi0gICAgQVNTRVJUKG1fbkNvdW50ID4gMCk7DQotICAgIENvbnN0cnVjdEVsZW1lbnQoJnBBc3NvYy0+a2V5KTsNCi0gICAgcEFzc29jLT52YWx1ZSA9IDA7DQotICAgIHJldHVybiBwQXNzb2M7DQotfQ0KLXZvaWQgQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0cjo6RnJlZUFzc29jKENGWF9NYXBCeXRlU3RyaW5nVG9QdHI6OkNBc3NvYyogcEFzc29jKQ0KLXsNCi0gICAgRGVzdHJ1Y3RFbGVtZW50KCZwQXNzb2MtPmtleSk7DQotICAgIHBBc3NvYy0+cE5leHQgPSBtX3BGcmVlTGlzdDsNCi0gICAgbV9wRnJlZUxpc3QgPSBwQXNzb2M7DQotICAgIG1fbkNvdW50LS07DQotICAgIEFTU0VSVChtX25Db3VudCA+PSAwKTsNCi0gICAgaWYgKG1fbkNvdW50ID09IDApIHsNCi0gICAgICAgIFJlbW92ZUFsbCgpOw0KLSAgICB9DQotfQ0KLUNGWF9NYXBCeXRlU3RyaW5nVG9QdHI6OkNBc3NvYyoNCi1DRlhfTWFwQnl0ZVN0cmluZ1RvUHRyOjpHZXRBc3NvY0F0KEZYX0JTVFIga2V5LCBGWF9EV09SRCYgbkhhc2gpIGNvbnN0DQotew0KLSAgICBuSGFzaCA9IEhhc2hLZXkoa2V5KSAlIG1fbkhhc2hUYWJsZVNpemU7DQotICAgIGlmIChtX3BIYXNoVGFibGUgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ0Fzc29jKiBwQXNzb2M7DQotICAgIGZvciAocEFzc29jID0gbV9wSGFzaFRhYmxlW25IYXNoXTsgcEFzc29jICE9IE5VTEw7IHBBc3NvYyA9IHBBc3NvYy0+cE5leHQpIHsNCi0gICAgICAgIGlmIChwQXNzb2MtPmtleSA9PSBrZXkpIHsNCi0gICAgICAgICAgICByZXR1cm4gcEFzc29jOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1GWF9CT09MIENGWF9NYXBCeXRlU3RyaW5nVG9QdHI6Okxvb2t1cChGWF9CU1RSIGtleSwgdm9pZComIHJWYWx1ZSkgY29uc3QNCi17DQotICAgIEZYX0RXT1JEIG5IYXNoOw0KLSAgICBDQXNzb2MqIHBBc3NvYyA9IEdldEFzc29jQXQoa2V5LCBuSGFzaCk7DQotICAgIGlmIChwQXNzb2MgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHJWYWx1ZSA9IHBBc3NvYy0+dmFsdWU7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi12b2lkIENGWF9NYXBCeXRlU3RyaW5nVG9QdHI6OkluaXRIYXNoVGFibGUoDQotICAgIEZYX0RXT1JEIG5IYXNoU2l6ZSwgRlhfQk9PTCBiQWxsb2NOb3cpDQotew0KLSAgICBBU1NFUlQobV9uQ291bnQgPT0gMCk7DQotICAgIEFTU0VSVChuSGFzaFNpemUgPiAwKTsNCi0gICAgaWYgKG1fcEhhc2hUYWJsZSAhPSBOVUxMKSB7DQotICAgICAgICBGWF9BbGxvY2F0b3JfRnJlZShtX3BBbGxvY2F0b3IsIG1fcEhhc2hUYWJsZSk7DQotICAgICAgICBtX3BIYXNoVGFibGUgPSBOVUxMOw0KLSAgICB9DQotICAgIGlmIChiQWxsb2NOb3cpIHsNCi0gICAgICAgIG1fcEhhc2hUYWJsZSA9IEZYX0FsbG9jYXRvcl9BbGxvYyhtX3BBbGxvY2F0b3IsIENBc3NvYyosIG5IYXNoU2l6ZSk7DQotICAgICAgICBpZiAobV9wSGFzaFRhYmxlKSB7DQotICAgICAgICAgICAgRlhTWVNfbWVtc2V0MzIobV9wSGFzaFRhYmxlLCAwLCBzaXplb2YoQ0Fzc29jKikgKiBuSGFzaFNpemUpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fbkhhc2hUYWJsZVNpemUgPSBuSGFzaFNpemU7DQotfQ0KLWlubGluZSBGWF9EV09SRCBDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyOjpIYXNoS2V5KEZYX0JTVFIga2V5KSBjb25zdA0KLXsNCi0gICAgRlhfRFdPUkQgbkhhc2ggPSAwOw0KLSAgICBpbnQgbGVuID0ga2V5LkdldExlbmd0aCgpOw0KLSAgICBGWF9MUENCWVRFIGJ1ZiA9IGtleTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkgKyspIHsNCi0gICAgICAgIG5IYXNoID0gKG5IYXNoIDw8IDUpICsgbkhhc2ggKyBidWZbaV07DQotICAgIH0NCi0gICAgcmV0dXJuIG5IYXNoOw0KLX0NCi1GWF9CT09MIENGWF9NYXBCeXRlU3RyaW5nVG9QdHI6OlJlbW92ZUtleShGWF9CU1RSIGtleSkNCi17DQotICAgIGlmIChtX3BIYXNoVGFibGUgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIENBc3NvYyoqIHBwQXNzb2NQcmV2Ow0KLSAgICBwcEFzc29jUHJldiA9ICZtX3BIYXNoVGFibGVbSGFzaEtleShrZXkpICUgbV9uSGFzaFRhYmxlU2l6ZV07DQotICAgIENBc3NvYyogcEFzc29jOw0KLSAgICBmb3IgKHBBc3NvYyA9ICpwcEFzc29jUHJldjsgcEFzc29jICE9IE5VTEw7IHBBc3NvYyA9IHBBc3NvYy0+cE5leHQpIHsNCi0gICAgICAgIGlmIChwQXNzb2MtPmtleSA9PSBrZXkpIHsNCi0gICAgICAgICAgICAqcHBBc3NvY1ByZXYgPSBwQXNzb2MtPnBOZXh0Ow0KLSAgICAgICAgICAgIEZyZWVBc3NvYyhwQXNzb2MpOw0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcHBBc3NvY1ByZXYgPSAmcEFzc29jLT5wTmV4dDsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLXN0cnVjdCBfQ29tcGFjdFN0cmluZyB7DQotICAgIEZYX0JZVEUJCW1fQ29tcGFjdExlbjsNCi0gICAgRlhfQllURQkJbV9MZW5IaWdoOw0KLSAgICBGWF9CWVRFCQltX0xlbkxvdzsNCi0gICAgRlhfQllURQkJbV9VbnVzZWQ7DQotICAgIEZYX0xQQllURQltX3BCdWZmZXI7DQotfTsNCi1zdGF0aWMgdm9pZCBfQ29tcGFjdFN0cmluZ1JlbGVhc2UoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciwgX0NvbXBhY3RTdHJpbmcqIHBDb21wYWN0KQ0KLXsNCi0gICAgaWYgKHBDb21wYWN0LT5tX0NvbXBhY3RMZW4gPT0gMHhmZikgew0KLSAgICAgICAgRlhfQWxsb2NhdG9yX0ZyZWUocEFsbG9jYXRvciwgcENvbXBhY3QtPm1fcEJ1ZmZlcik7DQotICAgIH0NCi19DQotc3RhdGljIEZYX0JPT0wgX0NvbXBhY3RTdHJpbmdTYW1lKF9Db21wYWN0U3RyaW5nKiBwQ29tcGFjdCwgRlhfTFBDQllURSBwU3RyLCBpbnQgbGVuKQ0KLXsNCi0gICAgaWYgKGxlbiA8IHNpemVvZihfQ29tcGFjdFN0cmluZykpIHsNCi0gICAgICAgIGlmIChwQ29tcGFjdC0+bV9Db21wYWN0TGVuICE9IGxlbikgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBGWFNZU19tZW1jbXAzMigmcENvbXBhY3QtPm1fTGVuSGlnaCwgcFN0ciwgbGVuKSA9PSAwOw0KLSAgICB9DQotICAgIGlmIChwQ29tcGFjdC0+bV9Db21wYWN0TGVuICE9IDB4ZmYgfHwgcENvbXBhY3QtPm1fTGVuSGlnaCAqIDI1NiArIHBDb21wYWN0LT5tX0xlbkxvdyAhPSBsZW4pIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRlhTWVNfbWVtY21wMzIocENvbXBhY3QtPm1fcEJ1ZmZlciwgcFN0ciwgbGVuKSA9PSAwOw0KLX0NCi1zdGF0aWMgdm9pZCBfQ29tcGFjdFN0cmluZ1N0b3JlKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IsIF9Db21wYWN0U3RyaW5nKiBwQ29tcGFjdCwgRlhfTFBDQllURSBwU3RyLCBpbnQgbGVuKQ0KLXsNCi0gICAgaWYgKGxlbiA8IChpbnQpc2l6ZW9mKF9Db21wYWN0U3RyaW5nKSkgew0KLSAgICAgICAgcENvbXBhY3QtPm1fQ29tcGFjdExlbiA9IChGWF9CWVRFKWxlbjsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKCZwQ29tcGFjdC0+bV9MZW5IaWdoLCBwU3RyLCBsZW4pOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHBDb21wYWN0LT5tX0NvbXBhY3RMZW4gPSAweGZmOw0KLSAgICBwQ29tcGFjdC0+bV9MZW5IaWdoID0gbGVuIC8gMjU2Ow0KLSAgICBwQ29tcGFjdC0+bV9MZW5Mb3cgPSBsZW4gJSAyNTY7DQotICAgIHBDb21wYWN0LT5tX3BCdWZmZXIgPSBGWF9BbGxvY2F0b3JfQWxsb2MocEFsbG9jYXRvciwgRlhfQllURSwgbGVuKTsNCi0gICAgaWYgKHBDb21wYWN0LT5tX3BCdWZmZXIpIHsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKHBDb21wYWN0LT5tX3BCdWZmZXIsIHBTdHIsIGxlbik7DQotICAgIH0NCi19DQotc3RhdGljIENGWF9CeXRlU3RyaW5nQyBfQ29tcGFjdFN0cmluZ0dldChfQ29tcGFjdFN0cmluZyogcENvbXBhY3QpDQotew0KLSAgICBpZiAocENvbXBhY3QtPm1fQ29tcGFjdExlbiA9PSAweGZmKSB7DQotICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmdDKHBDb21wYWN0LT5tX3BCdWZmZXIsIHBDb21wYWN0LT5tX0xlbkhpZ2ggKiAyNTYgKyBwQ29tcGFjdC0+bV9MZW5Mb3cpOw0KLSAgICB9DQotICAgIGlmIChwQ29tcGFjdC0+bV9Db21wYWN0TGVuID09IDB4ZmUpIHsNCi0gICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0MoKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmdDKCZwQ29tcGFjdC0+bV9MZW5IaWdoLCBwQ29tcGFjdC0+bV9Db21wYWN0TGVuKTsNCi19DQotI2RlZmluZSBDTUFQX0FMTE9DX1NURVAJCTgNCi0jZGVmaW5lIENNQVBfSU5ERVhfU0laRQkJOA0KLUNGWF9DTWFwQnl0ZVN0cmluZ1RvUHRyOjpDRlhfQ01hcEJ5dGVTdHJpbmdUb1B0cihJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQ0KLSAgICA6IG1fQnVmZmVyKHNpemVvZihfQ29tcGFjdFN0cmluZykgKyBzaXplb2Yodm9pZCopLCBDTUFQX0FMTE9DX1NURVAsIENNQVBfSU5ERVhfU0laRSwgcEFsbG9jYXRvcikNCi17DQotfQ0KLUNGWF9DTWFwQnl0ZVN0cmluZ1RvUHRyOjp+Q0ZYX0NNYXBCeXRlU3RyaW5nVG9QdHIoKQ0KLXsNCi0gICAgUmVtb3ZlQWxsKCk7DQotfQ0KLXZvaWQgQ0ZYX0NNYXBCeXRlU3RyaW5nVG9QdHI6OlJlbW92ZUFsbCgpDQotew0KLSAgICBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gbV9CdWZmZXIubV9wQWxsb2NhdG9yOw0KLSAgICBpbnQgc2l6ZSA9IG1fQnVmZmVyLkdldFNpemUoKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKSB7DQotICAgICAgICBfQ29tcGFjdFN0cmluZ1JlbGVhc2UocEFsbG9jYXRvciwgKF9Db21wYWN0U3RyaW5nKiltX0J1ZmZlci5HZXRBdChpKSk7DQotICAgIH0NCi0gICAgbV9CdWZmZXIuUmVtb3ZlQWxsKCk7DQotfQ0KLUZYX1BPU0lUSU9OIENGWF9DTWFwQnl0ZVN0cmluZ1RvUHRyOjpHZXRTdGFydFBvc2l0aW9uKCkgY29uc3QNCi17DQotICAgIGludCBzaXplID0gbV9CdWZmZXIuR2V0U2l6ZSgpOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkgKyspIHsNCi0gICAgICAgIF9Db21wYWN0U3RyaW5nKiBwS2V5ID0gKF9Db21wYWN0U3RyaW5nKiltX0J1ZmZlci5HZXRBdChpKTsNCi0gICAgICAgIGlmIChwS2V5LT5tX0NvbXBhY3RMZW4gIT0gMHhmZSkgew0KLSAgICAgICAgICAgIHJldHVybiAoRlhfUE9TSVRJT04pKEZYX1VJTlRQVFIpKGkgKyAxKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotdm9pZCBDRlhfQ01hcEJ5dGVTdHJpbmdUb1B0cjo6R2V0TmV4dEFzc29jKEZYX1BPU0lUSU9OJiByTmV4dFBvc2l0aW9uLCBDRlhfQnl0ZVN0cmluZyYgcktleSwgdm9pZComIHJWYWx1ZSkgY29uc3QNCi17DQotICAgIGlmIChyTmV4dFBvc2l0aW9uID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpbnQgaW5kZXggPSAoaW50KShGWF9VSU5UUFRSKXJOZXh0UG9zaXRpb24gLSAxOw0KLSAgICBfQ29tcGFjdFN0cmluZyogcEtleSA9IChfQ29tcGFjdFN0cmluZyopbV9CdWZmZXIuR2V0QXQoaW5kZXgpOw0KLSAgICByS2V5ID0gX0NvbXBhY3RTdHJpbmdHZXQocEtleSk7DQotICAgIHJWYWx1ZSA9ICoodm9pZCoqKShwS2V5ICsgMSk7DQotICAgIGluZGV4ICsrOw0KLSAgICBpbnQgc2l6ZSA9IG1fQnVmZmVyLkdldFNpemUoKTsNCi0gICAgd2hpbGUgKGluZGV4IDwgc2l6ZSkgew0KLSAgICAgICAgcEtleSA9IChfQ29tcGFjdFN0cmluZyopbV9CdWZmZXIuR2V0QXQoaW5kZXgpOw0KLSAgICAgICAgaWYgKHBLZXktPm1fQ29tcGFjdExlbiAhPSAweGZlKSB7DQotICAgICAgICAgICAgck5leHRQb3NpdGlvbiA9IChGWF9QT1NJVElPTikoRlhfVUlOVFBUUikoaW5kZXggKyAxKTsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBpbmRleCArKzsNCi0gICAgfQ0KLSAgICByTmV4dFBvc2l0aW9uID0gTlVMTDsNCi19DQotRlhfTFBWT0lEIENGWF9DTWFwQnl0ZVN0cmluZ1RvUHRyOjpHZXROZXh0VmFsdWUoRlhfUE9TSVRJT04mIHJOZXh0UG9zaXRpb24pIGNvbnN0DQotew0KLSAgICBpZiAock5leHRQb3NpdGlvbiA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpbnQgaW5kZXggPSAoaW50KShGWF9VSU5UUFRSKXJOZXh0UG9zaXRpb24gLSAxOw0KLSAgICBfQ29tcGFjdFN0cmluZyogcEtleSA9IChfQ29tcGFjdFN0cmluZyopbV9CdWZmZXIuR2V0QXQoaW5kZXgpOw0KLSAgICBGWF9MUFZPSUQgclZhbHVlID0gKih2b2lkKiopKHBLZXkgKyAxKTsNCi0gICAgaW5kZXggKys7DQotICAgIGludCBzaXplID0gbV9CdWZmZXIuR2V0U2l6ZSgpOw0KLSAgICB3aGlsZSAoaW5kZXggPCBzaXplKSB7DQotICAgICAgICBwS2V5ID0gKF9Db21wYWN0U3RyaW5nKiltX0J1ZmZlci5HZXRBdChpbmRleCk7DQotICAgICAgICBpZiAocEtleS0+bV9Db21wYWN0TGVuICE9IDB4ZmUpIHsNCi0gICAgICAgICAgICByTmV4dFBvc2l0aW9uID0gKEZYX1BPU0lUSU9OKShGWF9VSU5UUFRSKShpbmRleCArIDEpOw0KLSAgICAgICAgICAgIHJldHVybiByVmFsdWU7DQotICAgICAgICB9DQotICAgICAgICBpbmRleCArKzsNCi0gICAgfQ0KLSAgICByTmV4dFBvc2l0aW9uID0gTlVMTDsNCi0gICAgcmV0dXJuIHJWYWx1ZTsNCi19DQotRlhfQk9PTCBfQ01hcExvb2t1cENhbGxiYWNrKHZvaWQqIHBhcmFtLCB2b2lkKiBwRGF0YSkNCi17DQotICAgIHJldHVybiAhX0NvbXBhY3RTdHJpbmdTYW1lKChfQ29tcGFjdFN0cmluZyopcERhdGEsICgoQ0ZYX0J5dGVTdHJpbmdDKilwYXJhbSktPkdldFB0cigpLCAoKENGWF9CeXRlU3RyaW5nQyopcGFyYW0pLT5HZXRMZW5ndGgoKSk7DQotfQ0KLUZYX0JPT0wgQ0ZYX0NNYXBCeXRlU3RyaW5nVG9QdHI6Okxvb2t1cChGWF9CU1RSIGtleSwgdm9pZComIHJWYWx1ZSkgY29uc3QNCi17DQotICAgIHZvaWQqIHAgPSBtX0J1ZmZlci5JdGVyYXRlKF9DTWFwTG9va3VwQ2FsbGJhY2ssICh2b2lkKikma2V5KTsNCi0gICAgaWYgKCFwKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgclZhbHVlID0gKih2b2lkKiopKChfQ29tcGFjdFN0cmluZyopcCArIDEpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotdm9pZCBDRlhfQ01hcEJ5dGVTdHJpbmdUb1B0cjo6U2V0QXQoRlhfQlNUUiBrZXksIHZvaWQqIHZhbHVlKQ0KLXsNCi0gICAgQVNTRVJUKHZhbHVlICE9IE5VTEwpOw0KLSAgICBpbnQgaW5kZXgsIGtleV9sZW4gPSBrZXkuR2V0TGVuZ3RoKCk7DQotICAgIGludCBzaXplID0gbV9CdWZmZXIuR2V0U2l6ZSgpOw0KLSAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzaXplOyBpbmRleCArKykgew0KLSAgICAgICAgX0NvbXBhY3RTdHJpbmcqIHBLZXkgPSAoX0NvbXBhY3RTdHJpbmcqKW1fQnVmZmVyLkdldEF0KGluZGV4KTsNCi0gICAgICAgIGlmICghX0NvbXBhY3RTdHJpbmdTYW1lKHBLZXksIChGWF9MUENCWVRFKWtleSwga2V5X2xlbikpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgICoodm9pZCoqKShwS2V5ICsgMSkgPSB2YWx1ZTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gbV9CdWZmZXIubV9wQWxsb2NhdG9yOw0KLSAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzaXplOyBpbmRleCArKykgew0KLSAgICAgICAgX0NvbXBhY3RTdHJpbmcqIHBLZXkgPSAoX0NvbXBhY3RTdHJpbmcqKW1fQnVmZmVyLkdldEF0KGluZGV4KTsNCi0gICAgICAgIGlmIChwS2V5LT5tX0NvbXBhY3RMZW4pIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIF9Db21wYWN0U3RyaW5nU3RvcmUocEFsbG9jYXRvciwgcEtleSwgKEZYX0xQQ0JZVEUpa2V5LCBrZXlfbGVuKTsNCi0gICAgICAgICoodm9pZCoqKShwS2V5ICsgMSkgPSB2YWx1ZTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBfQ29tcGFjdFN0cmluZyogcEtleSA9IChfQ29tcGFjdFN0cmluZyopbV9CdWZmZXIuQWRkKCk7DQotICAgIF9Db21wYWN0U3RyaW5nU3RvcmUocEFsbG9jYXRvciwgcEtleSwgKEZYX0xQQ0JZVEUpa2V5LCBrZXlfbGVuKTsNCi0gICAgKih2b2lkKiopKHBLZXkgKyAxKSA9IHZhbHVlOw0KLX0NCi12b2lkIENGWF9DTWFwQnl0ZVN0cmluZ1RvUHRyOjpBZGRWYWx1ZShGWF9CU1RSIGtleSwgdm9pZCogdmFsdWUpDQotew0KLSAgICBBU1NFUlQodmFsdWUgIT0gTlVMTCk7DQotICAgIF9Db21wYWN0U3RyaW5nKiBwS2V5ID0gKF9Db21wYWN0U3RyaW5nKiltX0J1ZmZlci5BZGQoKTsNCi0gICAgX0NvbXBhY3RTdHJpbmdTdG9yZShtX0J1ZmZlci5tX3BBbGxvY2F0b3IsIHBLZXksIChGWF9MUENCWVRFKWtleSwga2V5LkdldExlbmd0aCgpKTsNCi0gICAgKih2b2lkKiopKHBLZXkgKyAxKSA9IHZhbHVlOw0KLX0NCi12b2lkIENGWF9DTWFwQnl0ZVN0cmluZ1RvUHRyOjpSZW1vdmVLZXkoRlhfQlNUUiBrZXkpDQotew0KLSAgICBpbnQga2V5X2xlbiA9IGtleS5HZXRMZW5ndGgoKTsNCi0gICAgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IG1fQnVmZmVyLm1fcEFsbG9jYXRvcjsNCi0gICAgaW50IHNpemUgPSBtX0J1ZmZlci5HZXRTaXplKCk7DQotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBzaXplOyBpbmRleCArKykgew0KLSAgICAgICAgX0NvbXBhY3RTdHJpbmcqIHBLZXkgPSAoX0NvbXBhY3RTdHJpbmcqKW1fQnVmZmVyLkdldEF0KGluZGV4KTsNCi0gICAgICAgIGlmICghX0NvbXBhY3RTdHJpbmdTYW1lKHBLZXksIChGWF9MUENCWVRFKWtleSwga2V5X2xlbikpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIF9Db21wYWN0U3RyaW5nUmVsZWFzZShwQWxsb2NhdG9yLCBwS2V5KTsNCi0gICAgICAgIHBLZXktPm1fQ29tcGFjdExlbiA9IDB4ZmU7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi19DQotaW50IENGWF9DTWFwQnl0ZVN0cmluZ1RvUHRyOjpHZXRDb3VudCgpIGNvbnN0DQotew0KLSAgICBpbnQgY291bnQgPSAwOw0KLSAgICBpbnQgc2l6ZSA9IG1fQnVmZmVyLkdldFNpemUoKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKSB7DQotICAgICAgICBfQ29tcGFjdFN0cmluZyogcEtleSA9IChfQ29tcGFjdFN0cmluZyopbV9CdWZmZXIuR2V0QXQoaSk7DQotICAgICAgICBpZiAocEtleS0+bV9Db21wYWN0TGVuICE9IDB4ZmUpIHsNCi0gICAgICAgICAgICBjb3VudCArKzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gY291bnQ7DQotfQ0KLWV4dGVybiAiQyIgew0KLSAgICBzdGF0aWMgaW50IF9Db21wYXJlRFdvcmQoY29uc3Qgdm9pZCogcDEsIGNvbnN0IHZvaWQqIHAyKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gKCooRlhfRFdPUkQqKXAxKSAtICgqKEZYX0RXT1JEKilwMik7DQotICAgIH0NCi19Ow0KLXN0cnVjdCBfRFdvcmRQYWlyIHsNCi0gICAgRlhfRFdPUkQga2V5Ow0KLSAgICBGWF9EV09SRCB2YWx1ZTsNCi19Ow0KLUZYX0JPT0wgQ0ZYX0NNYXBEV29yZFRvRFdvcmQ6Okxvb2t1cChGWF9EV09SRCBrZXksIEZYX0RXT1JEJiB2YWx1ZSkgY29uc3QNCi17DQotICAgIEZYX0xQVk9JRCBwUmVzdWx0ID0gRlhTWVNfYnNlYXJjaCgma2V5LCBtX0J1ZmZlci5HZXRCdWZmZXIoKSwgbV9CdWZmZXIuR2V0U2l6ZSgpIC8gc2l6ZW9mKF9EV29yZFBhaXIpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKF9EV29yZFBhaXIpLCBfQ29tcGFyZURXb3JkKTsNCi0gICAgaWYgKHBSZXN1bHQgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHZhbHVlID0gKChGWF9EV09SRCopcFJlc3VsdClbMV07DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9QT1NJVElPTiBDRlhfQ01hcERXb3JkVG9EV29yZDo6R2V0U3RhcnRQb3NpdGlvbigpIGNvbnN0DQotew0KLSAgICBGWF9EV09SRCBjb3VudCA9IG1fQnVmZmVyLkdldFNpemUoKSAvIHNpemVvZihfRFdvcmRQYWlyKTsNCi0gICAgaWYgKGNvdW50ID09IDApIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiAoRlhfUE9TSVRJT04pMTsNCi19DQotdm9pZCBDRlhfQ01hcERXb3JkVG9EV29yZDo6R2V0TmV4dEFzc29jKEZYX1BPU0lUSU9OJiBwb3MsIEZYX0RXT1JEJiBrZXksIEZYX0RXT1JEJiB2YWx1ZSkgY29uc3QNCi17DQotICAgIGlmIChwb3MgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX0RXT1JEIGluZGV4ID0gKChGWF9EV09SRCkoRlhfVUlOVFBUUilwb3MpIC0gMTsNCi0gICAgRlhfRFdPUkQgY291bnQgPSBtX0J1ZmZlci5HZXRTaXplKCkgLyBzaXplb2YoX0RXb3JkUGFpcik7DQotICAgIF9EV29yZFBhaXIqIGJ1ZiA9IChfRFdvcmRQYWlyKiltX0J1ZmZlci5HZXRCdWZmZXIoKTsNCi0gICAga2V5ID0gYnVmW2luZGV4XS5rZXk7DQotICAgIHZhbHVlID0gYnVmW2luZGV4XS52YWx1ZTsNCi0gICAgaWYgKGluZGV4ID09IGNvdW50IC0gMSkgew0KLSAgICAgICAgcG9zID0gMDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHBvcyA9IChGWF9QT1NJVElPTikoKEZYX1VJTlRQVFIpcG9zICsgMSk7DQotICAgIH0NCi19DQotdm9pZCBDRlhfQ01hcERXb3JkVG9EV29yZDo6U2V0QXQoRlhfRFdPUkQga2V5LCBGWF9EV09SRCB2YWx1ZSkNCi17DQotICAgIEZYX0RXT1JEIGNvdW50ID0gbV9CdWZmZXIuR2V0U2l6ZSgpIC8gc2l6ZW9mKF9EV29yZFBhaXIpOw0KLSAgICBfRFdvcmRQYWlyKiBidWYgPSAoX0RXb3JkUGFpciopbV9CdWZmZXIuR2V0QnVmZmVyKCk7DQotICAgIF9EV29yZFBhaXIgcGFpciA9IHtrZXksIHZhbHVlfTsNCi0gICAgaWYgKGNvdW50ID09IDAgfHwga2V5ID4gYnVmW2NvdW50IC0gMV0ua2V5KSB7DQotICAgICAgICBtX0J1ZmZlci5BcHBlbmRCbG9jaygmcGFpciwgc2l6ZW9mKF9EV29yZFBhaXIpKTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpbnQgbG93ID0gMCwgaGlnaCA9IGNvdW50IC0gMTsNCi0gICAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7DQotICAgICAgICBpbnQgbWlkID0gKGxvdyArIGhpZ2gpIC8gMjsNCi0gICAgICAgIGlmIChidWZbbWlkXS5rZXkgPCBrZXkpIHsNCi0gICAgICAgICAgICBsb3cgPSBtaWQgKyAxOw0KLSAgICAgICAgfSBlbHNlIGlmIChidWZbbWlkXS5rZXkgPiBrZXkpIHsNCi0gICAgICAgICAgICBoaWdoID0gbWlkIC0gMTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgYnVmW21pZF0udmFsdWUgPSB2YWx1ZTsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9CdWZmZXIuSW5zZXJ0QmxvY2sobG93ICogc2l6ZW9mKF9EV29yZFBhaXIpLCAmcGFpciwgc2l6ZW9mKF9EV29yZFBhaXIpKTsNCi19DQotdm9pZCBDRlhfQ01hcERXb3JkVG9EV29yZDo6RXN0aW1hdGVTaXplKEZYX0RXT1JEIHNpemUsIEZYX0RXT1JEIGdyb3dfYnkpDQotew0KLSAgICBtX0J1ZmZlci5Fc3RpbWF0ZVNpemUoc2l6ZSwgZ3Jvd19ieSk7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2V4dC5oIgorI2luY2x1ZGUgInBsZXguaCIKK3N0YXRpYyB2b2lkIENvbnN0cnVjdEVsZW1lbnQoQ0ZYX0J5dGVTdHJpbmcqIHBOZXdEYXRhKQoreworICAgIG5ldyAocE5ld0RhdGEpIENGWF9CeXRlU3RyaW5nKCk7Cit9CitzdGF0aWMgdm9pZCBEZXN0cnVjdEVsZW1lbnQoQ0ZYX0J5dGVTdHJpbmcqIHBPbGREYXRhKQoreworICAgIHBPbGREYXRhLT5+Q0ZYX0J5dGVTdHJpbmcoKTsKK30KK0NGWF9NYXBQdHJUb1B0cjo6Q0ZYX01hcFB0clRvUHRyKGludCBuQmxvY2tTaXplLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQorICAgIDogbV9wQWxsb2NhdG9yKHBBbGxvY2F0b3IpCisgICAgLCBtX3BIYXNoVGFibGUoTlVMTCkKKyAgICAsIG1fbkhhc2hUYWJsZVNpemUoMTcpCisgICAgLCBtX25Db3VudCgwKQorICAgICwgbV9wRnJlZUxpc3QoTlVMTCkKKyAgICAsIG1fcEJsb2NrcyhOVUxMKQorICAgICwgbV9uQmxvY2tTaXplKG5CbG9ja1NpemUpCit7CisgICAgQVNTRVJUKG1fbkJsb2NrU2l6ZSA+IDApOworfQordm9pZCBDRlhfTWFwUHRyVG9QdHI6OlJlbW92ZUFsbCgpCit7CisgICAgaWYgKG1fcEhhc2hUYWJsZSkgeworICAgICAgICBGWF9BbGxvY2F0b3JfRnJlZShtX3BBbGxvY2F0b3IsIG1fcEhhc2hUYWJsZSk7CisgICAgICAgIG1fcEhhc2hUYWJsZSA9IE5VTEw7CisgICAgfQorICAgIG1fbkNvdW50ID0gMDsKKyAgICBtX3BGcmVlTGlzdCA9IE5VTEw7CisgICAgbV9wQmxvY2tzLT5GcmVlRGF0YUNoYWluKG1fcEFsbG9jYXRvcik7CisgICAgbV9wQmxvY2tzID0gTlVMTDsKK30KK0NGWF9NYXBQdHJUb1B0cjo6fkNGWF9NYXBQdHJUb1B0cigpCit7CisgICAgUmVtb3ZlQWxsKCk7CisgICAgQVNTRVJUKG1fbkNvdW50ID09IDApOworfQorRlhfRFdPUkQgQ0ZYX01hcFB0clRvUHRyOjpIYXNoS2V5KHZvaWQqIGtleSkgY29uc3QKK3sKKyAgICByZXR1cm4gKChGWF9EV09SRCkoRlhfVUlOVFBUUilrZXkpID4+IDQ7Cit9Cit2b2lkIENGWF9NYXBQdHJUb1B0cjo6R2V0TmV4dEFzc29jKEZYX1BPU0lUSU9OJiByTmV4dFBvc2l0aW9uLCB2b2lkKiYgcktleSwgdm9pZComIHJWYWx1ZSkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wSGFzaFRhYmxlICE9IE5VTEwpOworICAgIENBc3NvYyogcEFzc29jUmV0ID0gKENBc3NvYyopck5leHRQb3NpdGlvbjsKKyAgICBBU1NFUlQocEFzc29jUmV0ICE9IE5VTEwpOworICAgIGlmIChwQXNzb2NSZXQgPT0gKENBc3NvYyopIC0gMSkgeworICAgICAgICBmb3IgKEZYX0RXT1JEIG5CdWNrZXQgPSAwOyBuQnVja2V0IDwgbV9uSGFzaFRhYmxlU2l6ZTsgbkJ1Y2tldCsrKQorICAgICAgICAgICAgaWYgKChwQXNzb2NSZXQgPSBtX3BIYXNoVGFibGVbbkJ1Y2tldF0pICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHBBc3NvY1JldCAhPSBOVUxMKTsKKyAgICB9CisgICAgQ0Fzc29jKiBwQXNzb2NOZXh0OworICAgIGlmICgocEFzc29jTmV4dCA9IHBBc3NvY1JldC0+cE5leHQpID09IE5VTEwpIHsKKyAgICAgICAgZm9yIChGWF9EV09SRCBuQnVja2V0ID0gKEhhc2hLZXkocEFzc29jUmV0LT5rZXkpICUgbV9uSGFzaFRhYmxlU2l6ZSkgKyAxOyBuQnVja2V0IDwgbV9uSGFzaFRhYmxlU2l6ZTsgbkJ1Y2tldCArKykgeworICAgICAgICAgICAgaWYgKChwQXNzb2NOZXh0ID0gbV9wSGFzaFRhYmxlW25CdWNrZXRdKSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgck5leHRQb3NpdGlvbiA9IChGWF9QT1NJVElPTikgcEFzc29jTmV4dDsKKyAgICByS2V5ID0gcEFzc29jUmV0LT5rZXk7CisgICAgclZhbHVlID0gcEFzc29jUmV0LT52YWx1ZTsKK30KK0ZYX0JPT0wgQ0ZYX01hcFB0clRvUHRyOjpMb29rdXAodm9pZCoga2V5LCB2b2lkKiYgclZhbHVlKSBjb25zdAoreworICAgIEZYX0RXT1JEIG5IYXNoOworICAgIENBc3NvYyogcEFzc29jID0gR2V0QXNzb2NBdChrZXksIG5IYXNoKTsKKyAgICBpZiAocEFzc29jID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByVmFsdWUgPSBwQXNzb2MtPnZhbHVlOworICAgIHJldHVybiBUUlVFOworfQordm9pZCogQ0ZYX01hcFB0clRvUHRyOjpHZXRWYWx1ZUF0KHZvaWQqIGtleSkgY29uc3QKK3sKKyAgICBGWF9EV09SRCBuSGFzaDsKKyAgICBDQXNzb2MqIHBBc3NvYyA9IEdldEFzc29jQXQoa2V5LCBuSGFzaCk7CisgICAgaWYgKHBBc3NvYyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcEFzc29jLT52YWx1ZTsKK30KK3ZvaWQqJiBDRlhfTWFwUHRyVG9QdHI6Om9wZXJhdG9yW10odm9pZCoga2V5KQoreworICAgIEZYX0RXT1JEIG5IYXNoOworICAgIENBc3NvYyogcEFzc29jOworICAgIGlmICgocEFzc29jID0gR2V0QXNzb2NBdChrZXksIG5IYXNoKSkgPT0gTlVMTCkgeworICAgICAgICBpZiAobV9wSGFzaFRhYmxlID09IE5VTEwpIHsKKyAgICAgICAgICAgIEluaXRIYXNoVGFibGUobV9uSGFzaFRhYmxlU2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgcEFzc29jID0gTmV3QXNzb2MoKTsKKyAgICAgICAgcEFzc29jLT5rZXkgPSBrZXk7CisgICAgICAgIHBBc3NvYy0+cE5leHQgPSBtX3BIYXNoVGFibGVbbkhhc2hdOworICAgICAgICBtX3BIYXNoVGFibGVbbkhhc2hdID0gcEFzc29jOworICAgIH0KKyAgICByZXR1cm4gcEFzc29jLT52YWx1ZTsKK30KK0NGWF9NYXBQdHJUb1B0cjo6Q0Fzc29jKgorQ0ZYX01hcFB0clRvUHRyOjpHZXRBc3NvY0F0KHZvaWQqIGtleSwgRlhfRFdPUkQmIG5IYXNoKSBjb25zdAoreworICAgIG5IYXNoID0gSGFzaEtleShrZXkpICUgbV9uSGFzaFRhYmxlU2l6ZTsKKyAgICBpZiAobV9wSGFzaFRhYmxlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENBc3NvYyogcEFzc29jOworICAgIGZvciAocEFzc29jID0gbV9wSGFzaFRhYmxlW25IYXNoXTsgcEFzc29jICE9IE5VTEw7IHBBc3NvYyA9IHBBc3NvYy0+cE5leHQpIHsKKyAgICAgICAgaWYgKHBBc3NvYy0+a2V5ID09IGtleSkgeworICAgICAgICAgICAgcmV0dXJuIHBBc3NvYzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK0NGWF9NYXBQdHJUb1B0cjo6Q0Fzc29jKgorQ0ZYX01hcFB0clRvUHRyOjpOZXdBc3NvYygpCit7CisgICAgaWYgKG1fcEZyZWVMaXN0ID09IE5VTEwpIHsKKyAgICAgICAgQ0ZYX1BsZXgqIG5ld0Jsb2NrID0gQ0ZYX1BsZXg6OkNyZWF0ZShtX3BBbGxvY2F0b3IsIG1fcEJsb2NrcywgbV9uQmxvY2tTaXplLCBzaXplb2YoQ0ZYX01hcFB0clRvUHRyOjpDQXNzb2MpKTsKKyAgICAgICAgQ0ZYX01hcFB0clRvUHRyOjpDQXNzb2MqIHBBc3NvYyA9IChDRlhfTWFwUHRyVG9QdHI6OkNBc3NvYyopbmV3QmxvY2stPmRhdGEoKTsKKyAgICAgICAgcEFzc29jICs9IG1fbkJsb2NrU2l6ZSAtIDE7CisgICAgICAgIGZvciAoaW50IGkgPSBtX25CbG9ja1NpemUgLSAxOyBpID49IDA7IGktLSwgcEFzc29jLS0pIHsKKyAgICAgICAgICAgIHBBc3NvYy0+cE5leHQgPSBtX3BGcmVlTGlzdDsKKyAgICAgICAgICAgIG1fcEZyZWVMaXN0ID0gcEFzc29jOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChtX3BGcmVlTGlzdCAhPSBOVUxMKTsKKyAgICBDRlhfTWFwUHRyVG9QdHI6OkNBc3NvYyogcEFzc29jID0gbV9wRnJlZUxpc3Q7CisgICAgbV9wRnJlZUxpc3QgPSBtX3BGcmVlTGlzdC0+cE5leHQ7CisgICAgbV9uQ291bnQrKzsKKyAgICBBU1NFUlQobV9uQ291bnQgPiAwKTsKKyAgICBwQXNzb2MtPmtleSA9IDA7CisgICAgcEFzc29jLT52YWx1ZSA9IDA7CisgICAgcmV0dXJuIHBBc3NvYzsKK30KK3ZvaWQgQ0ZYX01hcFB0clRvUHRyOjpJbml0SGFzaFRhYmxlKAorICAgIEZYX0RXT1JEIG5IYXNoU2l6ZSwgRlhfQk9PTCBiQWxsb2NOb3cpCit7CisgICAgQVNTRVJUKG1fbkNvdW50ID09IDApOworICAgIEFTU0VSVChuSGFzaFNpemUgPiAwKTsKKyAgICBpZiAobV9wSGFzaFRhYmxlICE9IE5VTEwpIHsKKyAgICAgICAgRlhfQWxsb2NhdG9yX0ZyZWUobV9wQWxsb2NhdG9yLCBtX3BIYXNoVGFibGUpOworICAgICAgICBtX3BIYXNoVGFibGUgPSBOVUxMOworICAgIH0KKyAgICBpZiAoYkFsbG9jTm93KSB7CisgICAgICAgIG1fcEhhc2hUYWJsZSA9IEZYX0FsbG9jYXRvcl9BbGxvYyhtX3BBbGxvY2F0b3IsIENBc3NvYyosIG5IYXNoU2l6ZSk7CisgICAgICAgIGlmIChtX3BIYXNoVGFibGUpIHsKKyAgICAgICAgICAgIEZYU1lTX21lbXNldDMyKG1fcEhhc2hUYWJsZSwgMCwgc2l6ZW9mKENBc3NvYyopICogbkhhc2hTaXplKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX25IYXNoVGFibGVTaXplID0gbkhhc2hTaXplOworfQorRlhfQk9PTCBDRlhfTWFwUHRyVG9QdHI6OlJlbW92ZUtleSh2b2lkKiBrZXkpCit7CisgICAgaWYgKG1fcEhhc2hUYWJsZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgQ0Fzc29jKiogcHBBc3NvY1ByZXY7CisgICAgcHBBc3NvY1ByZXYgPSAmbV9wSGFzaFRhYmxlW0hhc2hLZXkoa2V5KSAlIG1fbkhhc2hUYWJsZVNpemVdOworICAgIENBc3NvYyogcEFzc29jOworICAgIGZvciAocEFzc29jID0gKnBwQXNzb2NQcmV2OyBwQXNzb2MgIT0gTlVMTDsgcEFzc29jID0gcEFzc29jLT5wTmV4dCkgeworICAgICAgICBpZiAocEFzc29jLT5rZXkgPT0ga2V5KSB7CisgICAgICAgICAgICAqcHBBc3NvY1ByZXYgPSBwQXNzb2MtPnBOZXh0OworICAgICAgICAgICAgRnJlZUFzc29jKHBBc3NvYyk7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBwcEFzc29jUHJldiA9ICZwQXNzb2MtPnBOZXh0OworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9Cit2b2lkIENGWF9NYXBQdHJUb1B0cjo6RnJlZUFzc29jKENGWF9NYXBQdHJUb1B0cjo6Q0Fzc29jKiBwQXNzb2MpCit7CisgICAgcEFzc29jLT5wTmV4dCA9IG1fcEZyZWVMaXN0OworICAgIG1fcEZyZWVMaXN0ID0gcEFzc29jOworICAgIG1fbkNvdW50LS07CisgICAgQVNTRVJUKG1fbkNvdW50ID49IDApOworICAgIGlmIChtX25Db3VudCA9PSAwKSB7CisgICAgICAgIFJlbW92ZUFsbCgpOworICAgIH0KK30KK0NGWF9NYXBCeXRlU3RyaW5nVG9QdHI6OkNGWF9NYXBCeXRlU3RyaW5nVG9QdHIoaW50IG5CbG9ja1NpemUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpCisgICAgOiBtX3BBbGxvY2F0b3IocEFsbG9jYXRvcikKKyAgICAsIG1fcEhhc2hUYWJsZShOVUxMKQorICAgICwgbV9uSGFzaFRhYmxlU2l6ZSgxNykKKyAgICAsIG1fbkNvdW50KDApCisgICAgLCBtX3BGcmVlTGlzdChOVUxMKQorICAgICwgbV9wQmxvY2tzKE5VTEwpCisgICAgLCBtX25CbG9ja1NpemUobkJsb2NrU2l6ZSkKK3sKKyAgICBBU1NFUlQobV9uQmxvY2tTaXplID4gMCk7Cit9Cit2b2lkIENGWF9NYXBCeXRlU3RyaW5nVG9QdHI6OlJlbW92ZUFsbCgpCit7CisgICAgaWYgKG1fcEhhc2hUYWJsZSAhPSBOVUxMKSB7CisgICAgICAgIGZvciAoRlhfRFdPUkQgbkhhc2ggPSAwOyBuSGFzaCA8IG1fbkhhc2hUYWJsZVNpemU7IG5IYXNoKyspIHsKKyAgICAgICAgICAgIENBc3NvYyogcEFzc29jOworICAgICAgICAgICAgZm9yIChwQXNzb2MgPSBtX3BIYXNoVGFibGVbbkhhc2hdOyBwQXNzb2MgIT0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgcEFzc29jID0gcEFzc29jLT5wTmV4dCkgeworICAgICAgICAgICAgICAgIERlc3RydWN0RWxlbWVudCgmcEFzc29jLT5rZXkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEZYX0FsbG9jYXRvcl9GcmVlKG1fcEFsbG9jYXRvciwgbV9wSGFzaFRhYmxlKTsKKyAgICAgICAgbV9wSGFzaFRhYmxlID0gTlVMTDsKKyAgICB9CisgICAgbV9uQ291bnQgPSAwOworICAgIG1fcEZyZWVMaXN0ID0gTlVMTDsKKyAgICBtX3BCbG9ja3MtPkZyZWVEYXRhQ2hhaW4obV9wQWxsb2NhdG9yKTsKKyAgICBtX3BCbG9ja3MgPSBOVUxMOworfQorQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0cjo6fkNGWF9NYXBCeXRlU3RyaW5nVG9QdHIoKQoreworICAgIFJlbW92ZUFsbCgpOworICAgIEFTU0VSVChtX25Db3VudCA9PSAwKTsKK30KK3ZvaWQgQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0cjo6R2V0TmV4dEFzc29jKEZYX1BPU0lUSU9OJiByTmV4dFBvc2l0aW9uLAorICAgICAgICBDRlhfQnl0ZVN0cmluZyYgcktleSwgdm9pZComIHJWYWx1ZSkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wSGFzaFRhYmxlICE9IE5VTEwpOworICAgIENBc3NvYyogcEFzc29jUmV0ID0gKENBc3NvYyopck5leHRQb3NpdGlvbjsKKyAgICBBU1NFUlQocEFzc29jUmV0ICE9IE5VTEwpOworICAgIGlmIChwQXNzb2NSZXQgPT0gKENBc3NvYyopIC0gMSkgeworICAgICAgICBmb3IgKEZYX0RXT1JEIG5CdWNrZXQgPSAwOyBuQnVja2V0IDwgbV9uSGFzaFRhYmxlU2l6ZTsgbkJ1Y2tldCsrKQorICAgICAgICAgICAgaWYgKChwQXNzb2NSZXQgPSBtX3BIYXNoVGFibGVbbkJ1Y2tldF0pICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHBBc3NvY1JldCAhPSBOVUxMKTsKKyAgICB9CisgICAgQ0Fzc29jKiBwQXNzb2NOZXh0OworICAgIGlmICgocEFzc29jTmV4dCA9IHBBc3NvY1JldC0+cE5leHQpID09IE5VTEwpIHsKKyAgICAgICAgZm9yIChGWF9EV09SRCBuQnVja2V0ID0gcEFzc29jUmV0LT5uSGFzaFZhbHVlICsgMTsKKyAgICAgICAgICAgICAgICBuQnVja2V0IDwgbV9uSGFzaFRhYmxlU2l6ZTsgbkJ1Y2tldCsrKQorICAgICAgICAgICAgaWYgKChwQXNzb2NOZXh0ID0gbV9wSGFzaFRhYmxlW25CdWNrZXRdKSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgfQorICAgIHJOZXh0UG9zaXRpb24gPSAoRlhfUE9TSVRJT04pIHBBc3NvY05leHQ7CisgICAgcktleSA9IHBBc3NvY1JldC0+a2V5OworICAgIHJWYWx1ZSA9IHBBc3NvY1JldC0+dmFsdWU7Cit9CitGWF9MUFZPSUQgQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0cjo6R2V0TmV4dFZhbHVlKEZYX1BPU0lUSU9OJiByTmV4dFBvc2l0aW9uKSBjb25zdAoreworICAgIEFTU0VSVChtX3BIYXNoVGFibGUgIT0gTlVMTCk7CisgICAgQ0Fzc29jKiBwQXNzb2NSZXQgPSAoQ0Fzc29jKilyTmV4dFBvc2l0aW9uOworICAgIEFTU0VSVChwQXNzb2NSZXQgIT0gTlVMTCk7CisgICAgaWYgKHBBc3NvY1JldCA9PSAoQ0Fzc29jKikgLSAxKSB7CisgICAgICAgIGZvciAoRlhfRFdPUkQgbkJ1Y2tldCA9IDA7IG5CdWNrZXQgPCBtX25IYXNoVGFibGVTaXplOyBuQnVja2V0KyspCisgICAgICAgICAgICBpZiAoKHBBc3NvY1JldCA9IG1fcEhhc2hUYWJsZVtuQnVja2V0XSkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBBU1NFUlQocEFzc29jUmV0ICE9IE5VTEwpOworICAgIH0KKyAgICBDQXNzb2MqIHBBc3NvY05leHQ7CisgICAgaWYgKChwQXNzb2NOZXh0ID0gcEFzc29jUmV0LT5wTmV4dCkgPT0gTlVMTCkgeworICAgICAgICBmb3IgKEZYX0RXT1JEIG5CdWNrZXQgPSBwQXNzb2NSZXQtPm5IYXNoVmFsdWUgKyAxOworICAgICAgICAgICAgICAgIG5CdWNrZXQgPCBtX25IYXNoVGFibGVTaXplOyBuQnVja2V0KyspCisgICAgICAgICAgICBpZiAoKHBBc3NvY05leHQgPSBtX3BIYXNoVGFibGVbbkJ1Y2tldF0pICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICB9CisgICAgck5leHRQb3NpdGlvbiA9IChGWF9QT1NJVElPTikgcEFzc29jTmV4dDsKKyAgICByZXR1cm4gcEFzc29jUmV0LT52YWx1ZTsKK30KK3ZvaWQqJiBDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyOjpvcGVyYXRvcltdKEZYX0JTVFIga2V5KQoreworICAgIEZYX0RXT1JEIG5IYXNoOworICAgIENBc3NvYyogcEFzc29jOworICAgIGlmICgocEFzc29jID0gR2V0QXNzb2NBdChrZXksIG5IYXNoKSkgPT0gTlVMTCkgeworICAgICAgICBpZiAobV9wSGFzaFRhYmxlID09IE5VTEwpIHsKKyAgICAgICAgICAgIEluaXRIYXNoVGFibGUobV9uSGFzaFRhYmxlU2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgcEFzc29jID0gTmV3QXNzb2MoKTsKKyAgICAgICAgcEFzc29jLT5uSGFzaFZhbHVlID0gbkhhc2g7CisgICAgICAgIHBBc3NvYy0+a2V5ID0ga2V5OworICAgICAgICBwQXNzb2MtPnBOZXh0ID0gbV9wSGFzaFRhYmxlW25IYXNoXTsKKyAgICAgICAgbV9wSGFzaFRhYmxlW25IYXNoXSA9IHBBc3NvYzsKKyAgICB9CisgICAgcmV0dXJuIHBBc3NvYy0+dmFsdWU7Cit9CitDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyOjpDQXNzb2MqCitDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyOjpOZXdBc3NvYygpCit7CisgICAgaWYgKG1fcEZyZWVMaXN0ID09IE5VTEwpIHsKKyAgICAgICAgQ0ZYX1BsZXgqIG5ld0Jsb2NrID0gQ0ZYX1BsZXg6OkNyZWF0ZShtX3BBbGxvY2F0b3IsIG1fcEJsb2NrcywgbV9uQmxvY2tTaXplLCBzaXplb2YoQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0cjo6Q0Fzc29jKSk7CisgICAgICAgIENGWF9NYXBCeXRlU3RyaW5nVG9QdHI6OkNBc3NvYyogcEFzc29jID0gKENGWF9NYXBCeXRlU3RyaW5nVG9QdHI6OkNBc3NvYyopbmV3QmxvY2stPmRhdGEoKTsKKyAgICAgICAgcEFzc29jICs9IG1fbkJsb2NrU2l6ZSAtIDE7CisgICAgICAgIGZvciAoaW50IGkgPSBtX25CbG9ja1NpemUgLSAxOyBpID49IDA7IGktLSwgcEFzc29jLS0pIHsKKyAgICAgICAgICAgIHBBc3NvYy0+cE5leHQgPSBtX3BGcmVlTGlzdDsKKyAgICAgICAgICAgIG1fcEZyZWVMaXN0ID0gcEFzc29jOworICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChtX3BGcmVlTGlzdCAhPSBOVUxMKTsKKyAgICBDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyOjpDQXNzb2MqIHBBc3NvYyA9IG1fcEZyZWVMaXN0OworICAgIG1fcEZyZWVMaXN0ID0gbV9wRnJlZUxpc3QtPnBOZXh0OworICAgIG1fbkNvdW50Kys7CisgICAgQVNTRVJUKG1fbkNvdW50ID4gMCk7CisgICAgQ29uc3RydWN0RWxlbWVudCgmcEFzc29jLT5rZXkpOworICAgIHBBc3NvYy0+dmFsdWUgPSAwOworICAgIHJldHVybiBwQXNzb2M7Cit9Cit2b2lkIENGWF9NYXBCeXRlU3RyaW5nVG9QdHI6OkZyZWVBc3NvYyhDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyOjpDQXNzb2MqIHBBc3NvYykKK3sKKyAgICBEZXN0cnVjdEVsZW1lbnQoJnBBc3NvYy0+a2V5KTsKKyAgICBwQXNzb2MtPnBOZXh0ID0gbV9wRnJlZUxpc3Q7CisgICAgbV9wRnJlZUxpc3QgPSBwQXNzb2M7CisgICAgbV9uQ291bnQtLTsKKyAgICBBU1NFUlQobV9uQ291bnQgPj0gMCk7CisgICAgaWYgKG1fbkNvdW50ID09IDApIHsKKyAgICAgICAgUmVtb3ZlQWxsKCk7CisgICAgfQorfQorQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0cjo6Q0Fzc29jKgorQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0cjo6R2V0QXNzb2NBdChGWF9CU1RSIGtleSwgRlhfRFdPUkQmIG5IYXNoKSBjb25zdAoreworICAgIG5IYXNoID0gSGFzaEtleShrZXkpICUgbV9uSGFzaFRhYmxlU2l6ZTsKKyAgICBpZiAobV9wSGFzaFRhYmxlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENBc3NvYyogcEFzc29jOworICAgIGZvciAocEFzc29jID0gbV9wSGFzaFRhYmxlW25IYXNoXTsgcEFzc29jICE9IE5VTEw7IHBBc3NvYyA9IHBBc3NvYy0+cE5leHQpIHsKKyAgICAgICAgaWYgKHBBc3NvYy0+a2V5ID09IGtleSkgeworICAgICAgICAgICAgcmV0dXJuIHBBc3NvYzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK0ZYX0JPT0wgQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0cjo6TG9va3VwKEZYX0JTVFIga2V5LCB2b2lkKiYgclZhbHVlKSBjb25zdAoreworICAgIEZYX0RXT1JEIG5IYXNoOworICAgIENBc3NvYyogcEFzc29jID0gR2V0QXNzb2NBdChrZXksIG5IYXNoKTsKKyAgICBpZiAocEFzc29jID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByVmFsdWUgPSBwQXNzb2MtPnZhbHVlOworICAgIHJldHVybiBUUlVFOworfQordm9pZCBDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyOjpJbml0SGFzaFRhYmxlKAorICAgIEZYX0RXT1JEIG5IYXNoU2l6ZSwgRlhfQk9PTCBiQWxsb2NOb3cpCit7CisgICAgQVNTRVJUKG1fbkNvdW50ID09IDApOworICAgIEFTU0VSVChuSGFzaFNpemUgPiAwKTsKKyAgICBpZiAobV9wSGFzaFRhYmxlICE9IE5VTEwpIHsKKyAgICAgICAgRlhfQWxsb2NhdG9yX0ZyZWUobV9wQWxsb2NhdG9yLCBtX3BIYXNoVGFibGUpOworICAgICAgICBtX3BIYXNoVGFibGUgPSBOVUxMOworICAgIH0KKyAgICBpZiAoYkFsbG9jTm93KSB7CisgICAgICAgIG1fcEhhc2hUYWJsZSA9IEZYX0FsbG9jYXRvcl9BbGxvYyhtX3BBbGxvY2F0b3IsIENBc3NvYyosIG5IYXNoU2l6ZSk7CisgICAgICAgIGlmIChtX3BIYXNoVGFibGUpIHsKKyAgICAgICAgICAgIEZYU1lTX21lbXNldDMyKG1fcEhhc2hUYWJsZSwgMCwgc2l6ZW9mKENBc3NvYyopICogbkhhc2hTaXplKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX25IYXNoVGFibGVTaXplID0gbkhhc2hTaXplOworfQoraW5saW5lIEZYX0RXT1JEIENGWF9NYXBCeXRlU3RyaW5nVG9QdHI6Okhhc2hLZXkoRlhfQlNUUiBrZXkpIGNvbnN0Cit7CisgICAgRlhfRFdPUkQgbkhhc2ggPSAwOworICAgIGludCBsZW4gPSBrZXkuR2V0TGVuZ3RoKCk7CisgICAgRlhfTFBDQllURSBidWYgPSBrZXk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkgKyspIHsKKyAgICAgICAgbkhhc2ggPSAobkhhc2ggPDwgNSkgKyBuSGFzaCArIGJ1ZltpXTsKKyAgICB9CisgICAgcmV0dXJuIG5IYXNoOworfQorRlhfQk9PTCBDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyOjpSZW1vdmVLZXkoRlhfQlNUUiBrZXkpCit7CisgICAgaWYgKG1fcEhhc2hUYWJsZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgQ0Fzc29jKiogcHBBc3NvY1ByZXY7CisgICAgcHBBc3NvY1ByZXYgPSAmbV9wSGFzaFRhYmxlW0hhc2hLZXkoa2V5KSAlIG1fbkhhc2hUYWJsZVNpemVdOworICAgIENBc3NvYyogcEFzc29jOworICAgIGZvciAocEFzc29jID0gKnBwQXNzb2NQcmV2OyBwQXNzb2MgIT0gTlVMTDsgcEFzc29jID0gcEFzc29jLT5wTmV4dCkgeworICAgICAgICBpZiAocEFzc29jLT5rZXkgPT0ga2V5KSB7CisgICAgICAgICAgICAqcHBBc3NvY1ByZXYgPSBwQXNzb2MtPnBOZXh0OworICAgICAgICAgICAgRnJlZUFzc29jKHBBc3NvYyk7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBwcEFzc29jUHJldiA9ICZwQXNzb2MtPnBOZXh0OworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitzdHJ1Y3QgX0NvbXBhY3RTdHJpbmcgeworICAgIEZYX0JZVEUJCW1fQ29tcGFjdExlbjsKKyAgICBGWF9CWVRFCQltX0xlbkhpZ2g7CisgICAgRlhfQllURQkJbV9MZW5Mb3c7CisgICAgRlhfQllURQkJbV9VbnVzZWQ7CisgICAgRlhfTFBCWVRFCW1fcEJ1ZmZlcjsKK307CitzdGF0aWMgdm9pZCBfQ29tcGFjdFN0cmluZ1JlbGVhc2UoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciwgX0NvbXBhY3RTdHJpbmcqIHBDb21wYWN0KQoreworICAgIGlmIChwQ29tcGFjdC0+bV9Db21wYWN0TGVuID09IDB4ZmYpIHsKKyAgICAgICAgRlhfQWxsb2NhdG9yX0ZyZWUocEFsbG9jYXRvciwgcENvbXBhY3QtPm1fcEJ1ZmZlcik7CisgICAgfQorfQorc3RhdGljIEZYX0JPT0wgX0NvbXBhY3RTdHJpbmdTYW1lKF9Db21wYWN0U3RyaW5nKiBwQ29tcGFjdCwgRlhfTFBDQllURSBwU3RyLCBpbnQgbGVuKQoreworICAgIGlmIChsZW4gPCBzaXplb2YoX0NvbXBhY3RTdHJpbmcpKSB7CisgICAgICAgIGlmIChwQ29tcGFjdC0+bV9Db21wYWN0TGVuICE9IGxlbikgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIHJldHVybiBGWFNZU19tZW1jbXAzMigmcENvbXBhY3QtPm1fTGVuSGlnaCwgcFN0ciwgbGVuKSA9PSAwOworICAgIH0KKyAgICBpZiAocENvbXBhY3QtPm1fQ29tcGFjdExlbiAhPSAweGZmIHx8IHBDb21wYWN0LT5tX0xlbkhpZ2ggKiAyNTYgKyBwQ29tcGFjdC0+bV9MZW5Mb3cgIT0gbGVuKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIEZYU1lTX21lbWNtcDMyKHBDb21wYWN0LT5tX3BCdWZmZXIsIHBTdHIsIGxlbikgPT0gMDsKK30KK3N0YXRpYyB2b2lkIF9Db21wYWN0U3RyaW5nU3RvcmUoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciwgX0NvbXBhY3RTdHJpbmcqIHBDb21wYWN0LCBGWF9MUENCWVRFIHBTdHIsIGludCBsZW4pCit7CisgICAgaWYgKGxlbiA8IChpbnQpc2l6ZW9mKF9Db21wYWN0U3RyaW5nKSkgeworICAgICAgICBwQ29tcGFjdC0+bV9Db21wYWN0TGVuID0gKEZYX0JZVEUpbGVuOworICAgICAgICBGWFNZU19tZW1jcHkzMigmcENvbXBhY3QtPm1fTGVuSGlnaCwgcFN0ciwgbGVuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwQ29tcGFjdC0+bV9Db21wYWN0TGVuID0gMHhmZjsKKyAgICBwQ29tcGFjdC0+bV9MZW5IaWdoID0gbGVuIC8gMjU2OworICAgIHBDb21wYWN0LT5tX0xlbkxvdyA9IGxlbiAlIDI1NjsKKyAgICBwQ29tcGFjdC0+bV9wQnVmZmVyID0gRlhfQWxsb2NhdG9yX0FsbG9jKHBBbGxvY2F0b3IsIEZYX0JZVEUsIGxlbik7CisgICAgaWYgKHBDb21wYWN0LT5tX3BCdWZmZXIpIHsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIocENvbXBhY3QtPm1fcEJ1ZmZlciwgcFN0ciwgbGVuKTsKKyAgICB9Cit9CitzdGF0aWMgQ0ZYX0J5dGVTdHJpbmdDIF9Db21wYWN0U3RyaW5nR2V0KF9Db21wYWN0U3RyaW5nKiBwQ29tcGFjdCkKK3sKKyAgICBpZiAocENvbXBhY3QtPm1fQ29tcGFjdExlbiA9PSAweGZmKSB7CisgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0MocENvbXBhY3QtPm1fcEJ1ZmZlciwgcENvbXBhY3QtPm1fTGVuSGlnaCAqIDI1NiArIHBDb21wYWN0LT5tX0xlbkxvdyk7CisgICAgfQorICAgIGlmIChwQ29tcGFjdC0+bV9Db21wYWN0TGVuID09IDB4ZmUpIHsKKyAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nQygpOworICAgIH0KKyAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmdDKCZwQ29tcGFjdC0+bV9MZW5IaWdoLCBwQ29tcGFjdC0+bV9Db21wYWN0TGVuKTsKK30KKyNkZWZpbmUgQ01BUF9BTExPQ19TVEVQCQk4CisjZGVmaW5lIENNQVBfSU5ERVhfU0laRQkJOAorQ0ZYX0NNYXBCeXRlU3RyaW5nVG9QdHI6OkNGWF9DTWFwQnl0ZVN0cmluZ1RvUHRyKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpCisgICAgOiBtX0J1ZmZlcihzaXplb2YoX0NvbXBhY3RTdHJpbmcpICsgc2l6ZW9mKHZvaWQqKSwgQ01BUF9BTExPQ19TVEVQLCBDTUFQX0lOREVYX1NJWkUsIHBBbGxvY2F0b3IpCit7Cit9CitDRlhfQ01hcEJ5dGVTdHJpbmdUb1B0cjo6fkNGWF9DTWFwQnl0ZVN0cmluZ1RvUHRyKCkKK3sKKyAgICBSZW1vdmVBbGwoKTsKK30KK3ZvaWQgQ0ZYX0NNYXBCeXRlU3RyaW5nVG9QdHI6OlJlbW92ZUFsbCgpCit7CisgICAgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IG1fQnVmZmVyLm1fcEFsbG9jYXRvcjsKKyAgICBpbnQgc2l6ZSA9IG1fQnVmZmVyLkdldFNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkgKyspIHsKKyAgICAgICAgX0NvbXBhY3RTdHJpbmdSZWxlYXNlKHBBbGxvY2F0b3IsIChfQ29tcGFjdFN0cmluZyopbV9CdWZmZXIuR2V0QXQoaSkpOworICAgIH0KKyAgICBtX0J1ZmZlci5SZW1vdmVBbGwoKTsKK30KK0ZYX1BPU0lUSU9OIENGWF9DTWFwQnl0ZVN0cmluZ1RvUHRyOjpHZXRTdGFydFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBpbnQgc2l6ZSA9IG1fQnVmZmVyLkdldFNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkgKyspIHsKKyAgICAgICAgX0NvbXBhY3RTdHJpbmcqIHBLZXkgPSAoX0NvbXBhY3RTdHJpbmcqKW1fQnVmZmVyLkdldEF0KGkpOworICAgICAgICBpZiAocEtleS0+bV9Db21wYWN0TGVuICE9IDB4ZmUpIHsKKyAgICAgICAgICAgIHJldHVybiAoRlhfUE9TSVRJT04pKEZYX1VJTlRQVFIpKGkgKyAxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK3ZvaWQgQ0ZYX0NNYXBCeXRlU3RyaW5nVG9QdHI6OkdldE5leHRBc3NvYyhGWF9QT1NJVElPTiYgck5leHRQb3NpdGlvbiwgQ0ZYX0J5dGVTdHJpbmcmIHJLZXksIHZvaWQqJiByVmFsdWUpIGNvbnN0Cit7CisgICAgaWYgKHJOZXh0UG9zaXRpb24gPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludCBpbmRleCA9IChpbnQpKEZYX1VJTlRQVFIpck5leHRQb3NpdGlvbiAtIDE7CisgICAgX0NvbXBhY3RTdHJpbmcqIHBLZXkgPSAoX0NvbXBhY3RTdHJpbmcqKW1fQnVmZmVyLkdldEF0KGluZGV4KTsKKyAgICByS2V5ID0gX0NvbXBhY3RTdHJpbmdHZXQocEtleSk7CisgICAgclZhbHVlID0gKih2b2lkKiopKHBLZXkgKyAxKTsKKyAgICBpbmRleCArKzsKKyAgICBpbnQgc2l6ZSA9IG1fQnVmZmVyLkdldFNpemUoKTsKKyAgICB3aGlsZSAoaW5kZXggPCBzaXplKSB7CisgICAgICAgIHBLZXkgPSAoX0NvbXBhY3RTdHJpbmcqKW1fQnVmZmVyLkdldEF0KGluZGV4KTsKKyAgICAgICAgaWYgKHBLZXktPm1fQ29tcGFjdExlbiAhPSAweGZlKSB7CisgICAgICAgICAgICByTmV4dFBvc2l0aW9uID0gKEZYX1BPU0lUSU9OKShGWF9VSU5UUFRSKShpbmRleCArIDEpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGluZGV4ICsrOworICAgIH0KKyAgICByTmV4dFBvc2l0aW9uID0gTlVMTDsKK30KK0ZYX0xQVk9JRCBDRlhfQ01hcEJ5dGVTdHJpbmdUb1B0cjo6R2V0TmV4dFZhbHVlKEZYX1BPU0lUSU9OJiByTmV4dFBvc2l0aW9uKSBjb25zdAoreworICAgIGlmIChyTmV4dFBvc2l0aW9uID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGludCBpbmRleCA9IChpbnQpKEZYX1VJTlRQVFIpck5leHRQb3NpdGlvbiAtIDE7CisgICAgX0NvbXBhY3RTdHJpbmcqIHBLZXkgPSAoX0NvbXBhY3RTdHJpbmcqKW1fQnVmZmVyLkdldEF0KGluZGV4KTsKKyAgICBGWF9MUFZPSUQgclZhbHVlID0gKih2b2lkKiopKHBLZXkgKyAxKTsKKyAgICBpbmRleCArKzsKKyAgICBpbnQgc2l6ZSA9IG1fQnVmZmVyLkdldFNpemUoKTsKKyAgICB3aGlsZSAoaW5kZXggPCBzaXplKSB7CisgICAgICAgIHBLZXkgPSAoX0NvbXBhY3RTdHJpbmcqKW1fQnVmZmVyLkdldEF0KGluZGV4KTsKKyAgICAgICAgaWYgKHBLZXktPm1fQ29tcGFjdExlbiAhPSAweGZlKSB7CisgICAgICAgICAgICByTmV4dFBvc2l0aW9uID0gKEZYX1BPU0lUSU9OKShGWF9VSU5UUFRSKShpbmRleCArIDEpOworICAgICAgICAgICAgcmV0dXJuIHJWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICBpbmRleCArKzsKKyAgICB9CisgICAgck5leHRQb3NpdGlvbiA9IE5VTEw7CisgICAgcmV0dXJuIHJWYWx1ZTsKK30KK0ZYX0JPT0wgX0NNYXBMb29rdXBDYWxsYmFjayh2b2lkKiBwYXJhbSwgdm9pZCogcERhdGEpCit7CisgICAgcmV0dXJuICFfQ29tcGFjdFN0cmluZ1NhbWUoKF9Db21wYWN0U3RyaW5nKilwRGF0YSwgKChDRlhfQnl0ZVN0cmluZ0MqKXBhcmFtKS0+R2V0UHRyKCksICgoQ0ZYX0J5dGVTdHJpbmdDKilwYXJhbSktPkdldExlbmd0aCgpKTsKK30KK0ZYX0JPT0wgQ0ZYX0NNYXBCeXRlU3RyaW5nVG9QdHI6Okxvb2t1cChGWF9CU1RSIGtleSwgdm9pZComIHJWYWx1ZSkgY29uc3QKK3sKKyAgICB2b2lkKiBwID0gbV9CdWZmZXIuSXRlcmF0ZShfQ01hcExvb2t1cENhbGxiYWNrLCAodm9pZCopJmtleSk7CisgICAgaWYgKCFwKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgclZhbHVlID0gKih2b2lkKiopKChfQ29tcGFjdFN0cmluZyopcCArIDEpOworICAgIHJldHVybiBUUlVFOworfQordm9pZCBDRlhfQ01hcEJ5dGVTdHJpbmdUb1B0cjo6U2V0QXQoRlhfQlNUUiBrZXksIHZvaWQqIHZhbHVlKQoreworICAgIEFTU0VSVCh2YWx1ZSAhPSBOVUxMKTsKKyAgICBpbnQgaW5kZXgsIGtleV9sZW4gPSBrZXkuR2V0TGVuZ3RoKCk7CisgICAgaW50IHNpemUgPSBtX0J1ZmZlci5HZXRTaXplKCk7CisgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgc2l6ZTsgaW5kZXggKyspIHsKKyAgICAgICAgX0NvbXBhY3RTdHJpbmcqIHBLZXkgPSAoX0NvbXBhY3RTdHJpbmcqKW1fQnVmZmVyLkdldEF0KGluZGV4KTsKKyAgICAgICAgaWYgKCFfQ29tcGFjdFN0cmluZ1NhbWUocEtleSwgKEZYX0xQQ0JZVEUpa2V5LCBrZXlfbGVuKSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgKih2b2lkKiopKHBLZXkgKyAxKSA9IHZhbHVlOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBtX0J1ZmZlci5tX3BBbGxvY2F0b3I7CisgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgc2l6ZTsgaW5kZXggKyspIHsKKyAgICAgICAgX0NvbXBhY3RTdHJpbmcqIHBLZXkgPSAoX0NvbXBhY3RTdHJpbmcqKW1fQnVmZmVyLkdldEF0KGluZGV4KTsKKyAgICAgICAgaWYgKHBLZXktPm1fQ29tcGFjdExlbikgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgX0NvbXBhY3RTdHJpbmdTdG9yZShwQWxsb2NhdG9yLCBwS2V5LCAoRlhfTFBDQllURSlrZXksIGtleV9sZW4pOworICAgICAgICAqKHZvaWQqKikocEtleSArIDEpID0gdmFsdWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgX0NvbXBhY3RTdHJpbmcqIHBLZXkgPSAoX0NvbXBhY3RTdHJpbmcqKW1fQnVmZmVyLkFkZCgpOworICAgIF9Db21wYWN0U3RyaW5nU3RvcmUocEFsbG9jYXRvciwgcEtleSwgKEZYX0xQQ0JZVEUpa2V5LCBrZXlfbGVuKTsKKyAgICAqKHZvaWQqKikocEtleSArIDEpID0gdmFsdWU7Cit9Cit2b2lkIENGWF9DTWFwQnl0ZVN0cmluZ1RvUHRyOjpBZGRWYWx1ZShGWF9CU1RSIGtleSwgdm9pZCogdmFsdWUpCit7CisgICAgQVNTRVJUKHZhbHVlICE9IE5VTEwpOworICAgIF9Db21wYWN0U3RyaW5nKiBwS2V5ID0gKF9Db21wYWN0U3RyaW5nKiltX0J1ZmZlci5BZGQoKTsKKyAgICBfQ29tcGFjdFN0cmluZ1N0b3JlKG1fQnVmZmVyLm1fcEFsbG9jYXRvciwgcEtleSwgKEZYX0xQQ0JZVEUpa2V5LCBrZXkuR2V0TGVuZ3RoKCkpOworICAgICoodm9pZCoqKShwS2V5ICsgMSkgPSB2YWx1ZTsKK30KK3ZvaWQgQ0ZYX0NNYXBCeXRlU3RyaW5nVG9QdHI6OlJlbW92ZUtleShGWF9CU1RSIGtleSkKK3sKKyAgICBpbnQga2V5X2xlbiA9IGtleS5HZXRMZW5ndGgoKTsKKyAgICBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gbV9CdWZmZXIubV9wQWxsb2NhdG9yOworICAgIGludCBzaXplID0gbV9CdWZmZXIuR2V0U2l6ZSgpOworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBzaXplOyBpbmRleCArKykgeworICAgICAgICBfQ29tcGFjdFN0cmluZyogcEtleSA9IChfQ29tcGFjdFN0cmluZyopbV9CdWZmZXIuR2V0QXQoaW5kZXgpOworICAgICAgICBpZiAoIV9Db21wYWN0U3RyaW5nU2FtZShwS2V5LCAoRlhfTFBDQllURSlrZXksIGtleV9sZW4pKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBfQ29tcGFjdFN0cmluZ1JlbGVhc2UocEFsbG9jYXRvciwgcEtleSk7CisgICAgICAgIHBLZXktPm1fQ29tcGFjdExlbiA9IDB4ZmU7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CitpbnQgQ0ZYX0NNYXBCeXRlU3RyaW5nVG9QdHI6OkdldENvdW50KCkgY29uc3QKK3sKKyAgICBpbnQgY291bnQgPSAwOworICAgIGludCBzaXplID0gbV9CdWZmZXIuR2V0U2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgeworICAgICAgICBfQ29tcGFjdFN0cmluZyogcEtleSA9IChfQ29tcGFjdFN0cmluZyopbV9CdWZmZXIuR2V0QXQoaSk7CisgICAgICAgIGlmIChwS2V5LT5tX0NvbXBhY3RMZW4gIT0gMHhmZSkgeworICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNvdW50OworfQorZXh0ZXJuICJDIiB7CisgICAgc3RhdGljIGludCBfQ29tcGFyZURXb3JkKGNvbnN0IHZvaWQqIHAxLCBjb25zdCB2b2lkKiBwMikKKyAgICB7CisgICAgICAgIHJldHVybiAoKihGWF9EV09SRCopcDEpIC0gKCooRlhfRFdPUkQqKXAyKTsKKyAgICB9Cit9Oworc3RydWN0IF9EV29yZFBhaXIgeworICAgIEZYX0RXT1JEIGtleTsKKyAgICBGWF9EV09SRCB2YWx1ZTsKK307CitGWF9CT09MIENGWF9DTWFwRFdvcmRUb0RXb3JkOjpMb29rdXAoRlhfRFdPUkQga2V5LCBGWF9EV09SRCYgdmFsdWUpIGNvbnN0Cit7CisgICAgRlhfTFBWT0lEIHBSZXN1bHQgPSBGWFNZU19ic2VhcmNoKCZrZXksIG1fQnVmZmVyLkdldEJ1ZmZlcigpLCBtX0J1ZmZlci5HZXRTaXplKCkgLyBzaXplb2YoX0RXb3JkUGFpciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihfRFdvcmRQYWlyKSwgX0NvbXBhcmVEV29yZCk7CisgICAgaWYgKHBSZXN1bHQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHZhbHVlID0gKChGWF9EV09SRCopcFJlc3VsdClbMV07CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9QT1NJVElPTiBDRlhfQ01hcERXb3JkVG9EV29yZDo6R2V0U3RhcnRQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgRlhfRFdPUkQgY291bnQgPSBtX0J1ZmZlci5HZXRTaXplKCkgLyBzaXplb2YoX0RXb3JkUGFpcik7CisgICAgaWYgKGNvdW50ID09IDApIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiAoRlhfUE9TSVRJT04pMTsKK30KK3ZvaWQgQ0ZYX0NNYXBEV29yZFRvRFdvcmQ6OkdldE5leHRBc3NvYyhGWF9QT1NJVElPTiYgcG9zLCBGWF9EV09SRCYga2V5LCBGWF9EV09SRCYgdmFsdWUpIGNvbnN0Cit7CisgICAgaWYgKHBvcyA9PSAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfRFdPUkQgaW5kZXggPSAoKEZYX0RXT1JEKShGWF9VSU5UUFRSKXBvcykgLSAxOworICAgIEZYX0RXT1JEIGNvdW50ID0gbV9CdWZmZXIuR2V0U2l6ZSgpIC8gc2l6ZW9mKF9EV29yZFBhaXIpOworICAgIF9EV29yZFBhaXIqIGJ1ZiA9IChfRFdvcmRQYWlyKiltX0J1ZmZlci5HZXRCdWZmZXIoKTsKKyAgICBrZXkgPSBidWZbaW5kZXhdLmtleTsKKyAgICB2YWx1ZSA9IGJ1ZltpbmRleF0udmFsdWU7CisgICAgaWYgKGluZGV4ID09IGNvdW50IC0gMSkgeworICAgICAgICBwb3MgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHBvcyA9IChGWF9QT1NJVElPTikoKEZYX1VJTlRQVFIpcG9zICsgMSk7CisgICAgfQorfQordm9pZCBDRlhfQ01hcERXb3JkVG9EV29yZDo6U2V0QXQoRlhfRFdPUkQga2V5LCBGWF9EV09SRCB2YWx1ZSkKK3sKKyAgICBGWF9EV09SRCBjb3VudCA9IG1fQnVmZmVyLkdldFNpemUoKSAvIHNpemVvZihfRFdvcmRQYWlyKTsKKyAgICBfRFdvcmRQYWlyKiBidWYgPSAoX0RXb3JkUGFpciopbV9CdWZmZXIuR2V0QnVmZmVyKCk7CisgICAgX0RXb3JkUGFpciBwYWlyID0ge2tleSwgdmFsdWV9OworICAgIGlmIChjb3VudCA9PSAwIHx8IGtleSA+IGJ1Zltjb3VudCAtIDFdLmtleSkgeworICAgICAgICBtX0J1ZmZlci5BcHBlbmRCbG9jaygmcGFpciwgc2l6ZW9mKF9EV29yZFBhaXIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgbG93ID0gMCwgaGlnaCA9IGNvdW50IC0gMTsKKyAgICB3aGlsZSAobG93IDw9IGhpZ2gpIHsKKyAgICAgICAgaW50IG1pZCA9IChsb3cgKyBoaWdoKSAvIDI7CisgICAgICAgIGlmIChidWZbbWlkXS5rZXkgPCBrZXkpIHsKKyAgICAgICAgICAgIGxvdyA9IG1pZCArIDE7CisgICAgICAgIH0gZWxzZSBpZiAoYnVmW21pZF0ua2V5ID4ga2V5KSB7CisgICAgICAgICAgICBoaWdoID0gbWlkIC0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJ1ZlttaWRdLnZhbHVlID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgbV9CdWZmZXIuSW5zZXJ0QmxvY2sobG93ICogc2l6ZW9mKF9EV29yZFBhaXIpLCAmcGFpciwgc2l6ZW9mKF9EV29yZFBhaXIpKTsKK30KK3ZvaWQgQ0ZYX0NNYXBEV29yZFRvRFdvcmQ6OkVzdGltYXRlU2l6ZShGWF9EV09SRCBzaXplLCBGWF9EV09SRCBncm93X2J5KQoreworICAgIG1fQnVmZmVyLkVzdGltYXRlU2l6ZShzaXplLCBncm93X2J5KTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX21lbW1nci5jcHAgYi9jb3JlL3NyYy9meGNydC9meF9iYXNpY19tZW1tZ3IuY3BwCmluZGV4IDM0ZGY4MjkuLjVjODYyYTIgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX21lbW1nci5jcHAKKysrIGIvY29yZS9zcmMvZnhjcnQvZnhfYmFzaWNfbWVtbWdyLmNwcApAQCAtMSwzMDYgKzEsMzA2IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGNydC9meF9iYXNpYy5oIg0KLSNpbmNsdWRlICJtZW1faW50LmgiDQotdm9pZCBGWE1FTV9EZXN0cm95Rm94aXRNZ3IoRlhNRU1fRm94aXRNZ3IqIHBGb3hpdE1ncikNCi17DQotICAgIGlmIChwRm94aXRNZ3IgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENGWF9NZW1vcnlNZ3IqIHAgPSAoQ0ZYX01lbW9yeU1nciopcEZveGl0TWdyOw0KLSAgICBpZiAocC0+bV9wU3lzdGVtTWdyLT5Db2xsZWN0QWxsKSB7DQotICAgICAgICBwLT5tX3BTeXN0ZW1NZ3ItPkNvbGxlY3RBbGwocC0+bV9wU3lzdGVtTWdyKTsNCi0gICAgfQ0KLSAgICBpZiAocC0+bV9iUmVsZWFzZU1ncikgew0KLSAgICAgICAgcC0+bV9wU3lzdGVtTWdyLT5GcmVlKHAtPm1fcFN5c3RlbU1nciwgcCwgMCk7DQotICAgIH0NCi0gICAgaWYgKHAtPm1fcEV4dGVybmFsTWVtb3J5KSB7DQotICAgICAgICBmcmVlKHAtPm1fcEV4dGVybmFsTWVtb3J5KTsNCi0gICAgfQ0KLX0NCi0jaWZkZWYgX19jcGx1c3BsdXMNCi1leHRlcm4gIkMiIHsNCi0jZW5kaWYNCi1zdGF0aWMgdm9pZCogX0RlZkFsbG9jRGVidWcoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciwgc2l6ZV90IHNpemUsIEZYX0xQQ1NUUiBmaWxlbmFtZSwgaW50IGxpbmUpDQotew0KLSAgICByZXR1cm4gKChGWF9EZWZBbGxvY2F0b3IqKXBBbGxvY2F0b3IpLT5tX3BGb3hpdE1nci0+QWxsb2NEZWJ1ZyhzaXplLCAwLCBmaWxlbmFtZSwgbGluZSk7DQotfQ0KLXN0YXRpYyB2b2lkKiBfRGVmQWxsb2MoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciwgc2l6ZV90IHNpemUpDQotew0KLSAgICByZXR1cm4gKChGWF9EZWZBbGxvY2F0b3IqKXBBbGxvY2F0b3IpLT5tX3BGb3hpdE1nci0+QWxsb2Moc2l6ZSwgMCk7DQotfQ0KLXN0YXRpYyB2b2lkKiBfRGVmUmVhbGxvY0RlYnVnKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IsIHZvaWQqIHAsIHNpemVfdCBzaXplLCBGWF9MUENTVFIgZmlsZW5hbWUsIGludCBsaW5lKQ0KLXsNCi0gICAgcmV0dXJuICgoRlhfRGVmQWxsb2NhdG9yKilwQWxsb2NhdG9yKS0+bV9wRm94aXRNZ3ItPlJlYWxsb2NEZWJ1ZyhwLCBzaXplLCAwLCBmaWxlbmFtZSwgbGluZSk7DQotfQ0KLXN0YXRpYyB2b2lkKiBfRGVmUmVhbGxvYyhJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yLCB2b2lkKiBwLCBzaXplX3Qgc2l6ZSkNCi17DQotICAgIHJldHVybiAoKEZYX0RlZkFsbG9jYXRvciopcEFsbG9jYXRvciktPm1fcEZveGl0TWdyLT5SZWFsbG9jKHAsIHNpemUsIDApOw0KLX0NCi1zdGF0aWMgdm9pZCBfRGVmRnJlZShJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yLCB2b2lkKiBwKQ0KLXsNCi0gICAgKChGWF9EZWZBbGxvY2F0b3IqKXBBbGxvY2F0b3IpLT5tX3BGb3hpdE1nci0+RnJlZShwLCAwKTsNCi19DQotI2lmZGVmIF9fY3BsdXNwbHVzDQotfQ0KLSNlbmRpZg0KLXZvaWQgQ0ZYX01lbW9yeU1ncjo6SW5pdChGWE1FTV9TeXN0ZW1NZ3IqIHBTeXN0ZW1NZ3IpDQotew0KLSAgICBtX3BTeXN0ZW1NZ3IgPSBwU3lzdGVtTWdyOw0KLSAgICBJRlhfQWxsb2NhdG9yICZhYyA9IG1fRGVmQWxsb2NhdG9yLm1fQWxsb2NhdG9yOw0KLSAgICBhYy5tX0FsbG9jID0gX0RlZkFsbG9jOw0KLSAgICBhYy5tX0FsbG9jRGVidWcgPSBfRGVmQWxsb2NEZWJ1ZzsNCi0gICAgYWMubV9SZWFsbG9jID0gX0RlZlJlYWxsb2M7DQotICAgIGFjLm1fUmVhbGxvY0RlYnVnID0gX0RlZlJlYWxsb2NEZWJ1ZzsNCi0gICAgYWMubV9GcmVlID0gX0RlZkZyZWU7DQotICAgIG1fRGVmQWxsb2NhdG9yLm1fcEZveGl0TWdyID0gdGhpczsNCi0gICAgbV9wRXh0ZXJuYWxNZW1vcnkgPSBOVUxMOw0KLSAgICBtX2JSZWxlYXNlTWdyID0gVFJVRTsNCi19DQotdm9pZCBDRlhfTWVtb3J5TWdyOjpQdXJnZU1ncigpDQotew0KLSAgICBpZiAobV9wU3lzdGVtTWdyLT5QdXJnZSkgew0KLSAgICAgICAgbV9wU3lzdGVtTWdyLT5QdXJnZShtX3BTeXN0ZW1NZ3IpOw0KLSAgICB9DQotfQ0KLXZvaWQqIENGWF9NZW1vcnlNZ3I6OkFsbG9jKHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpDQotew0KLSAgICB2b2lkKiBwID0gbV9wU3lzdGVtTWdyLT5BbGxvYyhtX3BTeXN0ZW1NZ3IsIHNpemUsIGZsYWdzKTsNCi0gICAgaWYgKHAgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIHA7DQotfQ0KLXZvaWQqIENGWF9NZW1vcnlNZ3I6OkFsbG9jRGVidWcoc2l6ZV90IHNpemUsIGludCBmbGFncywgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKQ0KLXsNCi0gICAgdm9pZCogcCA9IG1fcFN5c3RlbU1nci0+QWxsb2NEZWJ1ZyhtX3BTeXN0ZW1NZ3IsIHNpemUsIGZsYWdzLCBmaWxlLCBsaW5lKTsNCi0gICAgaWYgKHAgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIHA7DQotfQ0KLXZvaWQqIENGWF9NZW1vcnlNZ3I6OlJlYWxsb2Modm9pZCogcCwgc2l6ZV90IHNpemUsIGludCBmbGFncykNCi17DQotICAgIHZvaWQqIHAxID0gbV9wU3lzdGVtTWdyLT5SZWFsbG9jKG1fcFN5c3RlbU1nciwgcCwgc2l6ZSwgZmxhZ3MpOw0KLSAgICBpZiAocDEgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIHAxOw0KLX0NCi12b2lkKiBDRlhfTWVtb3J5TWdyOjpSZWFsbG9jRGVidWcodm9pZCogcCwgc2l6ZV90IHNpemUsIGludCBmbGFncywgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKQ0KLXsNCi0gICAgdm9pZCogcDEgPSBtX3BTeXN0ZW1NZ3ItPlJlYWxsb2NEZWJ1ZyhtX3BTeXN0ZW1NZ3IsIHAsIHNpemUsIGZsYWdzLCBmaWxlLCBsaW5lKTsNCi0gICAgaWYgKHAxID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiBwMTsNCi19DQotdm9pZCBDRlhfTWVtb3J5TWdyOjpGcmVlKHZvaWQqIHAsIGludCBmbGFncykNCi17DQotICAgIGlmIChwID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX3BTeXN0ZW1NZ3ItPkZyZWUobV9wU3lzdGVtTWdyLCBwLCBmbGFncyk7DQotfQ0KLUNGWF9NZW1vcnlNZ3IqIGdfcERlZkZveGl0TWdyID0gTlVMTDsNCi12b2lkKiBGWE1FTV9EZWZhdWx0QWxsb2Moc2l6ZV90IHNpemUsIGludCBmbGFncykNCi17DQotICAgIHJldHVybiBnX3BEZWZGb3hpdE1nci0+QWxsb2Moc2l6ZSwgZmxhZ3MpOw0KLX0NCi12b2lkKiBGWE1FTV9EZWZhdWx0QWxsb2MyKHNpemVfdCBzaXplLCBzaXplX3QgdW5pdCwgaW50IGZsYWdzKQ0KLXsNCi0gICAgcmV0dXJuIGdfcERlZkZveGl0TWdyLT5BbGxvYyhzaXplICogdW5pdCwgZmxhZ3MpOw0KLX0NCi12b2lkKiBGWE1FTV9EZWZhdWx0UmVhbGxvYyh2b2lkKiBwLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQ0KLXsNCi0gICAgaWYgKHAgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZYTUVNX0RlZmF1bHRBbGxvYyhzaXplLCBmbGFncyk7DQotICAgIH0NCi0gICAgcmV0dXJuIGdfcERlZkZveGl0TWdyLT5SZWFsbG9jKHAsIHNpemUsIGZsYWdzKTsNCi19DQotdm9pZCogRlhNRU1fRGVmYXVsdFJlYWxsb2MyKHZvaWQqIHAsIHNpemVfdCBzaXplLCBzaXplX3QgdW5pdCwgaW50IGZsYWdzKQ0KLXsNCi0gICAgaWYgKHAgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZYTUVNX0RlZmF1bHRBbGxvYzIoc2l6ZSwgdW5pdCwgZmxhZ3MpOw0KLSAgICB9DQotICAgIHJldHVybiBnX3BEZWZGb3hpdE1nci0+UmVhbGxvYyhwLCBzaXplICogdW5pdCwgZmxhZ3MpOw0KLX0NCi12b2lkKiBGWE1FTV9EZWZhdWx0QWxsb2NEZWJ1ZyhzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBGWF9MUENTVFIgZmlsZSwgaW50IGxpbmUpDQotew0KLSAgICByZXR1cm4gZ19wRGVmRm94aXRNZ3ItPkFsbG9jRGVidWcoc2l6ZSwgZmxhZ3MsIGZpbGUsIGxpbmUpOw0KLX0NCi12b2lkKiBGWE1FTV9EZWZhdWx0QWxsb2NEZWJ1ZzIoc2l6ZV90IHNpemUsIHNpemVfdCB1bml0LCBpbnQgZmxhZ3MsIEZYX0xQQ1NUUiBmaWxlLCBpbnQgbGluZSkNCi17DQotICAgIHJldHVybiBnX3BEZWZGb3hpdE1nci0+QWxsb2NEZWJ1ZyhzaXplICogdW5pdCwgZmxhZ3MsIGZpbGUsIGxpbmUpOw0KLX0NCi12b2lkKiBGWE1FTV9EZWZhdWx0UmVhbGxvY0RlYnVnKHZvaWQqIHAsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIEZYX0xQQ1NUUiBmaWxlLCBpbnQgbGluZSkNCi17DQotICAgIGlmIChwID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGWE1FTV9EZWZhdWx0QWxsb2NEZWJ1ZyhzaXplLCBmbGFncywgZmlsZSwgbGluZSk7DQotICAgIH0NCi0gICAgcmV0dXJuIGdfcERlZkZveGl0TWdyLT5SZWFsbG9jRGVidWcocCwgc2l6ZSwgZmxhZ3MsIGZpbGUsIGxpbmUpOw0KLX0NCi12b2lkKiBGWE1FTV9EZWZhdWx0UmVhbGxvY0RlYnVnMih2b2lkKiBwLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHVuaXQsIGludCBmbGFncywgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKQ0KLXsNCi0gICAgaWYgKHAgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZYTUVNX0RlZmF1bHRBbGxvY0RlYnVnMihzaXplLCB1bml0LCBmbGFncywgZmlsZSwgbGluZSk7DQotICAgIH0NCi0gICAgcmV0dXJuIGdfcERlZkZveGl0TWdyLT5SZWFsbG9jRGVidWcocCwgc2l6ZSAqIHVuaXQsIGZsYWdzLCBmaWxlLCBsaW5lKTsNCi19DQotdm9pZCBGWE1FTV9EZWZhdWx0RnJlZSh2b2lkKiBwLCBpbnQgZmxhZ3MpDQotew0KLSAgICBnX3BEZWZGb3hpdE1nci0+RnJlZShwLCBmbGFncyk7DQotfQ0KLUlGWF9BbGxvY2F0b3IqIEZYTUVNX0dldERlZkFsbG9jYXRvcigpDQotew0KLSAgICByZXR1cm4gJmdfcERlZkZveGl0TWdyLT5tX0RlZkFsbG9jYXRvci5tX0FsbG9jYXRvcjsNCi19DQotdm9pZCogQ0ZYX09iamVjdDo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplKQ0KLXsNCi0gICAgcmV0dXJuIGdfcERlZkZveGl0TWdyLT5BbGxvYyhzaXplLCAwKTsNCi19DQotdm9pZCogQ0ZYX09iamVjdDo6b3BlcmF0b3IgbmV3W10oc2l6ZV90IHNpemUpDQotew0KLSAgICByZXR1cm4gZ19wRGVmRm94aXRNZ3ItPkFsbG9jKHNpemUsIDApOw0KLX0NCi12b2lkKiBDRlhfT2JqZWN0OjpvcGVyYXRvciBuZXdbXShzaXplX3Qgc2l6ZSwgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKQ0KLXsNCi0gICAgcmV0dXJuIGdfcERlZkZveGl0TWdyLT5BbGxvY0RlYnVnKHNpemUsIDAsIGZpbGUsIGxpbmUpOw0KLX0NCi12b2lkKiBDRlhfT2JqZWN0OjpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIEZYX0xQQ1NUUiBmaWxlLCBpbnQgbGluZSkNCi17DQotICAgIHJldHVybiBnX3BEZWZGb3hpdE1nci0+QWxsb2NEZWJ1ZyhzaXplLCAwLCBmaWxlLCBsaW5lKTsNCi19DQotdm9pZCBDRlhfT2JqZWN0OjpvcGVyYXRvciBkZWxldGUodm9pZCogcCkNCi17DQotICAgIGdfcERlZkZveGl0TWdyLT5GcmVlKHAsIDApOw0KLX0NCi12b2lkIENGWF9PYmplY3Q6Om9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqIHApDQotew0KLSAgICBnX3BEZWZGb3hpdE1nci0+RnJlZShwLCAwKTsNCi19DQotdm9pZCBDRlhfT2JqZWN0OjpvcGVyYXRvciBkZWxldGUodm9pZCogcCwgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKQ0KLXsNCi0gICAgZ19wRGVmRm94aXRNZ3ItPkZyZWUocCwgMCk7DQotfQ0KLXZvaWQgQ0ZYX09iamVjdDo6b3BlcmF0b3IgZGVsZXRlW10odm9pZCogcCwgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKQ0KLXsNCi0gICAgZ19wRGVmRm94aXRNZ3ItPkZyZWUocCwgMCk7DQotfQ0KLXZvaWQqIENGWF9BbGxvY09iamVjdDo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yLCBGWF9MUENTVFIgZmlsZW5hbWUsIGludCBsaW5lKQ0KLXsNCi0gICAgdm9pZCogcCA9IHBBbGxvY2F0b3IgPyBwQWxsb2NhdG9yLT5tX0FsbG9jRGVidWcocEFsbG9jYXRvciwgc2l6ZSwgZmlsZW5hbWUsIGxpbmUpIDoNCi0gICAgICAgICAgICAgIGdfcERlZkZveGl0TWdyLT5BbGxvY0RlYnVnKHNpemUsIDAsIGZpbGVuYW1lLCBsaW5lKTsNCi0gICAgKChDRlhfQWxsb2NPYmplY3QqKXApLT5tX3BBbGxvY2F0b3IgPSBwQWxsb2NhdG9yOw0KLSAgICByZXR1cm4gcDsNCi19DQotdm9pZCBDRlhfQWxsb2NPYmplY3Q6Om9wZXJhdG9yIGRlbGV0ZSAodm9pZCogcCwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciwgRlhfTFBDU1RSIGZpbGVuYW1lLCBpbnQgbGluZSkNCi17DQotICAgIGlmIChwQWxsb2NhdG9yKSB7DQotICAgICAgICBwQWxsb2NhdG9yLT5tX0ZyZWUocEFsbG9jYXRvciwgcCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBnX3BEZWZGb3hpdE1nci0+RnJlZShwLCAwKTsNCi0gICAgfQ0KLX0NCi12b2lkKiBDRlhfQWxsb2NPYmplY3Q6Om9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikNCi17DQotICAgIHZvaWQqIHAgPSBwQWxsb2NhdG9yID8gcEFsbG9jYXRvci0+bV9BbGxvYyhwQWxsb2NhdG9yLCBzaXplKSA6IGdfcERlZkZveGl0TWdyLT5BbGxvYyhzaXplLCAwKTsNCi0gICAgKChDRlhfQWxsb2NPYmplY3QqKXApLT5tX3BBbGxvY2F0b3IgPSBwQWxsb2NhdG9yOw0KLSAgICByZXR1cm4gcDsNCi19DQotdm9pZCBDRlhfQWxsb2NPYmplY3Q6Om9wZXJhdG9yIGRlbGV0ZSh2b2lkKiBwKQ0KLXsNCi0gICAgaWYgKCgoQ0ZYX0FsbG9jT2JqZWN0KilwKS0+bV9wQWxsb2NhdG9yKSB7DQotICAgICAgICAoKChDRlhfQWxsb2NPYmplY3QqKXApLT5tX3BBbGxvY2F0b3IpLT5tX0ZyZWUoKChDRlhfQWxsb2NPYmplY3QqKXApLT5tX3BBbGxvY2F0b3IsIHApOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZ19wRGVmRm94aXRNZ3ItPkZyZWUocCwgMCk7DQotICAgIH0NCi19DQotdm9pZCBDRlhfQWxsb2NPYmplY3Q6Om9wZXJhdG9yIGRlbGV0ZSh2b2lkKiBwLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQ0KLXsNCi0gICAgaWYgKHBBbGxvY2F0b3IpIHsNCi0gICAgICAgIHBBbGxvY2F0b3ItPm1fRnJlZShwQWxsb2NhdG9yLCBwKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGdfcERlZkZveGl0TWdyLT5GcmVlKHAsIDApOw0KLSAgICB9DQotfQ0KLWV4dGVybiAiQyIgew0KLSAgICBzdGF0aWMgdm9pZCogX0dPUEFsbG9jRGVidWcoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciwgc2l6ZV90IHNpemUsIEZYX0xQQ1NUUiBmaWxlLCBpbnQgbGluZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuICgoQ0ZYX0dyb3dPbmx5UG9vbCopcEFsbG9jYXRvciktPkFsbG9jKHNpemUpOw0KLSAgICB9DQotICAgIHN0YXRpYyB2b2lkKiBfR09QQWxsb2MoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciwgc2l6ZV90IHNpemUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAoKENGWF9Hcm93T25seVBvb2wqKXBBbGxvY2F0b3IpLT5BbGxvYyhzaXplKTsNCi0gICAgfQ0KLSAgICBzdGF0aWMgdm9pZCogX0dPUFJlYWxsb2NEZWJ1ZyhJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yLCB2b2lkKiBwLCBzaXplX3QgbmV3X3NpemUsIEZYX0xQQ1NUUiBmaWxlLCBpbnQgbGluZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuICgoQ0ZYX0dyb3dPbmx5UG9vbCopcEFsbG9jYXRvciktPlJlYWxsb2MocCwgbmV3X3NpemUpOw0KLSAgICB9DQotICAgIHN0YXRpYyB2b2lkKiBfR09QUmVhbGxvYyhJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yLCB2b2lkKiBwLCBzaXplX3QgbmV3X3NpemUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAoKENGWF9Hcm93T25seVBvb2wqKXBBbGxvY2F0b3IpLT5SZWFsbG9jKHAsIG5ld19zaXplKTsNCi0gICAgfQ0KLSAgICBzdGF0aWMgdm9pZCBfR09QRnJlZShJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yLCB2b2lkKiBwKQ0KLSAgICB7DQotICAgIH0NCi19Ow0KLUNGWF9Hcm93T25seVBvb2w6OkNGWF9Hcm93T25seVBvb2woSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciwgc2l6ZV90IHRydW5rX3NpemUpDQotew0KLSAgICBtX1RydW5rU2l6ZSA9IHRydW5rX3NpemU7DQotICAgIG1fcEZpcnN0VHJ1bmsgPSBOVUxMOw0KLSAgICBtX3BBbGxvY2F0b3IgPSBwQWxsb2NhdG9yID8gcEFsbG9jYXRvciA6ICZnX3BEZWZGb3hpdE1nci0+bV9EZWZBbGxvY2F0b3IubV9BbGxvY2F0b3I7DQotICAgIG1fQWxsb2NEZWJ1ZyA9IF9HT1BBbGxvY0RlYnVnOw0KLSAgICBtX0FsbG9jID0gX0dPUEFsbG9jOw0KLSAgICBtX1JlYWxsb2NEZWJ1ZyA9IF9HT1BSZWFsbG9jRGVidWc7DQotICAgIG1fUmVhbGxvYyA9IF9HT1BSZWFsbG9jOw0KLSAgICBtX0ZyZWUgPSBfR09QRnJlZTsNCi19DQotQ0ZYX0dyb3dPbmx5UG9vbDo6fkNGWF9Hcm93T25seVBvb2woKQ0KLXsNCi0gICAgRnJlZUFsbCgpOw0KLX0NCi12b2lkIENGWF9Hcm93T25seVBvb2w6OlNldEFsbG9jYXRvcihJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQ0KLXsNCi0gICAgQVNTRVJUKG1fcEZpcnN0VHJ1bmsgPT0gTlVMTCk7DQotICAgIG1fcEFsbG9jYXRvciA9IHBBbGxvY2F0b3IgPyBwQWxsb2NhdG9yIDogJmdfcERlZkZveGl0TWdyLT5tX0RlZkFsbG9jYXRvci5tX0FsbG9jYXRvcjsNCi19DQotc3RydWN0IF9GWF9Hcm93T25seVRydW5rIHsNCi0gICAgc2l6ZV90CW1fU2l6ZTsNCi0gICAgc2l6ZV90CW1fQWxsb2NhdGVkOw0KLSAgICBfRlhfR3Jvd09ubHlUcnVuayoJbV9wTmV4dDsNCi19Ow0KLXZvaWQgQ0ZYX0dyb3dPbmx5UG9vbDo6RnJlZUFsbCgpDQotew0KLSAgICBfRlhfR3Jvd09ubHlUcnVuayogcFRydW5rID0gKF9GWF9Hcm93T25seVRydW5rKiltX3BGaXJzdFRydW5rOw0KLSAgICB3aGlsZSAocFRydW5rKSB7DQotICAgICAgICBfRlhfR3Jvd09ubHlUcnVuayogcE5leHQgPSBwVHJ1bmstPm1fcE5leHQ7DQotICAgICAgICBtX3BBbGxvY2F0b3ItPm1fRnJlZShtX3BBbGxvY2F0b3IsIHBUcnVuayk7DQotICAgICAgICBwVHJ1bmsgPSBwTmV4dDsNCi0gICAgfQ0KLSAgICBtX3BGaXJzdFRydW5rID0gTlVMTDsNCi19DQotdm9pZCogQ0ZYX0dyb3dPbmx5UG9vbDo6QWxsb2Moc2l6ZV90IHNpemUpDQotew0KLSAgICBzaXplID0gKHNpemUgKyAzKSAvIDQgKiA0Ow0KLSAgICBfRlhfR3Jvd09ubHlUcnVuayogcFRydW5rID0gKF9GWF9Hcm93T25seVRydW5rKiltX3BGaXJzdFRydW5rOw0KLSAgICB3aGlsZSAocFRydW5rKSB7DQotICAgICAgICBpZiAocFRydW5rLT5tX1NpemUgLSBwVHJ1bmstPm1fQWxsb2NhdGVkID49IHNpemUpIHsNCi0gICAgICAgICAgICB2b2lkKiBwID0gKEZYX0xQQllURSkocFRydW5rICsgMSkgKyBwVHJ1bmstPm1fQWxsb2NhdGVkOw0KLSAgICAgICAgICAgIHBUcnVuay0+bV9BbGxvY2F0ZWQgKz0gc2l6ZTsNCi0gICAgICAgICAgICByZXR1cm4gcDsNCi0gICAgICAgIH0NCi0gICAgICAgIHBUcnVuayA9IHBUcnVuay0+bV9wTmV4dDsNCi0gICAgfQ0KLSAgICBzaXplX3QgYWxsb2Nfc2l6ZSA9IHNpemUgPiBtX1RydW5rU2l6ZSA/IHNpemUgOiBtX1RydW5rU2l6ZTsNCi0gICAgcFRydW5rID0gKF9GWF9Hcm93T25seVRydW5rKiltX3BBbGxvY2F0b3ItPm1fQWxsb2MobV9wQWxsb2NhdG9yLCBzaXplb2YoX0ZYX0dyb3dPbmx5VHJ1bmspICsgYWxsb2Nfc2l6ZSk7DQotICAgIHBUcnVuay0+bV9TaXplID0gYWxsb2Nfc2l6ZTsNCi0gICAgcFRydW5rLT5tX0FsbG9jYXRlZCA9IHNpemU7DQotICAgIHBUcnVuay0+bV9wTmV4dCA9IChfRlhfR3Jvd09ubHlUcnVuayopbV9wRmlyc3RUcnVuazsNCi0gICAgbV9wRmlyc3RUcnVuayA9IHBUcnVuazsNCi0gICAgcmV0dXJuIHBUcnVuayArIDE7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2Jhc2ljLmgiCisjaW5jbHVkZSAibWVtX2ludC5oIgordm9pZCBGWE1FTV9EZXN0cm95Rm94aXRNZ3IoRlhNRU1fRm94aXRNZ3IqIHBGb3hpdE1ncikKK3sKKyAgICBpZiAocEZveGl0TWdyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDRlhfTWVtb3J5TWdyKiBwID0gKENGWF9NZW1vcnlNZ3IqKXBGb3hpdE1ncjsKKyAgICBpZiAocC0+bV9wU3lzdGVtTWdyLT5Db2xsZWN0QWxsKSB7CisgICAgICAgIHAtPm1fcFN5c3RlbU1nci0+Q29sbGVjdEFsbChwLT5tX3BTeXN0ZW1NZ3IpOworICAgIH0KKyAgICBpZiAocC0+bV9iUmVsZWFzZU1ncikgeworICAgICAgICBwLT5tX3BTeXN0ZW1NZ3ItPkZyZWUocC0+bV9wU3lzdGVtTWdyLCBwLCAwKTsKKyAgICB9CisgICAgaWYgKHAtPm1fcEV4dGVybmFsTWVtb3J5KSB7CisgICAgICAgIGZyZWUocC0+bV9wRXh0ZXJuYWxNZW1vcnkpOworICAgIH0KK30KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK3N0YXRpYyB2b2lkKiBfRGVmQWxsb2NEZWJ1ZyhJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yLCBzaXplX3Qgc2l6ZSwgRlhfTFBDU1RSIGZpbGVuYW1lLCBpbnQgbGluZSkKK3sKKyAgICByZXR1cm4gKChGWF9EZWZBbGxvY2F0b3IqKXBBbGxvY2F0b3IpLT5tX3BGb3hpdE1nci0+QWxsb2NEZWJ1ZyhzaXplLCAwLCBmaWxlbmFtZSwgbGluZSk7Cit9CitzdGF0aWMgdm9pZCogX0RlZkFsbG9jKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiAoKEZYX0RlZkFsbG9jYXRvciopcEFsbG9jYXRvciktPm1fcEZveGl0TWdyLT5BbGxvYyhzaXplLCAwKTsKK30KK3N0YXRpYyB2b2lkKiBfRGVmUmVhbGxvY0RlYnVnKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IsIHZvaWQqIHAsIHNpemVfdCBzaXplLCBGWF9MUENTVFIgZmlsZW5hbWUsIGludCBsaW5lKQoreworICAgIHJldHVybiAoKEZYX0RlZkFsbG9jYXRvciopcEFsbG9jYXRvciktPm1fcEZveGl0TWdyLT5SZWFsbG9jRGVidWcocCwgc2l6ZSwgMCwgZmlsZW5hbWUsIGxpbmUpOworfQorc3RhdGljIHZvaWQqIF9EZWZSZWFsbG9jKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IsIHZvaWQqIHAsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiAoKEZYX0RlZkFsbG9jYXRvciopcEFsbG9jYXRvciktPm1fcEZveGl0TWdyLT5SZWFsbG9jKHAsIHNpemUsIDApOworfQorc3RhdGljIHZvaWQgX0RlZkZyZWUoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciwgdm9pZCogcCkKK3sKKyAgICAoKEZYX0RlZkFsbG9jYXRvciopcEFsbG9jYXRvciktPm1fcEZveGl0TWdyLT5GcmVlKHAsIDApOworfQorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK3ZvaWQgQ0ZYX01lbW9yeU1ncjo6SW5pdChGWE1FTV9TeXN0ZW1NZ3IqIHBTeXN0ZW1NZ3IpCit7CisgICAgbV9wU3lzdGVtTWdyID0gcFN5c3RlbU1ncjsKKyAgICBJRlhfQWxsb2NhdG9yICZhYyA9IG1fRGVmQWxsb2NhdG9yLm1fQWxsb2NhdG9yOworICAgIGFjLm1fQWxsb2MgPSBfRGVmQWxsb2M7CisgICAgYWMubV9BbGxvY0RlYnVnID0gX0RlZkFsbG9jRGVidWc7CisgICAgYWMubV9SZWFsbG9jID0gX0RlZlJlYWxsb2M7CisgICAgYWMubV9SZWFsbG9jRGVidWcgPSBfRGVmUmVhbGxvY0RlYnVnOworICAgIGFjLm1fRnJlZSA9IF9EZWZGcmVlOworICAgIG1fRGVmQWxsb2NhdG9yLm1fcEZveGl0TWdyID0gdGhpczsKKyAgICBtX3BFeHRlcm5hbE1lbW9yeSA9IE5VTEw7CisgICAgbV9iUmVsZWFzZU1nciA9IFRSVUU7Cit9Cit2b2lkIENGWF9NZW1vcnlNZ3I6OlB1cmdlTWdyKCkKK3sKKyAgICBpZiAobV9wU3lzdGVtTWdyLT5QdXJnZSkgeworICAgICAgICBtX3BTeXN0ZW1NZ3ItPlB1cmdlKG1fcFN5c3RlbU1ncik7CisgICAgfQorfQordm9pZCogQ0ZYX01lbW9yeU1ncjo6QWxsb2Moc2l6ZV90IHNpemUsIGludCBmbGFncykKK3sKKyAgICB2b2lkKiBwID0gbV9wU3lzdGVtTWdyLT5BbGxvYyhtX3BTeXN0ZW1NZ3IsIHNpemUsIGZsYWdzKTsKKyAgICBpZiAocCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcDsKK30KK3ZvaWQqIENGWF9NZW1vcnlNZ3I6OkFsbG9jRGVidWcoc2l6ZV90IHNpemUsIGludCBmbGFncywgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKQoreworICAgIHZvaWQqIHAgPSBtX3BTeXN0ZW1NZ3ItPkFsbG9jRGVidWcobV9wU3lzdGVtTWdyLCBzaXplLCBmbGFncywgZmlsZSwgbGluZSk7CisgICAgaWYgKHAgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHA7Cit9Cit2b2lkKiBDRlhfTWVtb3J5TWdyOjpSZWFsbG9jKHZvaWQqIHAsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCit7CisgICAgdm9pZCogcDEgPSBtX3BTeXN0ZW1NZ3ItPlJlYWxsb2MobV9wU3lzdGVtTWdyLCBwLCBzaXplLCBmbGFncyk7CisgICAgaWYgKHAxID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBwMTsKK30KK3ZvaWQqIENGWF9NZW1vcnlNZ3I6OlJlYWxsb2NEZWJ1Zyh2b2lkKiBwLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBGWF9MUENTVFIgZmlsZSwgaW50IGxpbmUpCit7CisgICAgdm9pZCogcDEgPSBtX3BTeXN0ZW1NZ3ItPlJlYWxsb2NEZWJ1ZyhtX3BTeXN0ZW1NZ3IsIHAsIHNpemUsIGZsYWdzLCBmaWxlLCBsaW5lKTsKKyAgICBpZiAocDEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHAxOworfQordm9pZCBDRlhfTWVtb3J5TWdyOjpGcmVlKHZvaWQqIHAsIGludCBmbGFncykKK3sKKyAgICBpZiAocCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wU3lzdGVtTWdyLT5GcmVlKG1fcFN5c3RlbU1nciwgcCwgZmxhZ3MpOworfQorQ0ZYX01lbW9yeU1nciogZ19wRGVmRm94aXRNZ3IgPSBOVUxMOwordm9pZCogRlhNRU1fRGVmYXVsdEFsbG9jKHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCit7CisgICAgcmV0dXJuIGdfcERlZkZveGl0TWdyLT5BbGxvYyhzaXplLCBmbGFncyk7Cit9Cit2b2lkKiBGWE1FTV9EZWZhdWx0QWxsb2MyKHNpemVfdCBzaXplLCBzaXplX3QgdW5pdCwgaW50IGZsYWdzKQoreworICAgIHJldHVybiBnX3BEZWZGb3hpdE1nci0+QWxsb2Moc2l6ZSAqIHVuaXQsIGZsYWdzKTsKK30KK3ZvaWQqIEZYTUVNX0RlZmF1bHRSZWFsbG9jKHZvaWQqIHAsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCit7CisgICAgaWYgKHAgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRlhNRU1fRGVmYXVsdEFsbG9jKHNpemUsIGZsYWdzKTsKKyAgICB9CisgICAgcmV0dXJuIGdfcERlZkZveGl0TWdyLT5SZWFsbG9jKHAsIHNpemUsIGZsYWdzKTsKK30KK3ZvaWQqIEZYTUVNX0RlZmF1bHRSZWFsbG9jMih2b2lkKiBwLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHVuaXQsIGludCBmbGFncykKK3sKKyAgICBpZiAocCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGWE1FTV9EZWZhdWx0QWxsb2MyKHNpemUsIHVuaXQsIGZsYWdzKTsKKyAgICB9CisgICAgcmV0dXJuIGdfcERlZkZveGl0TWdyLT5SZWFsbG9jKHAsIHNpemUgKiB1bml0LCBmbGFncyk7Cit9Cit2b2lkKiBGWE1FTV9EZWZhdWx0QWxsb2NEZWJ1ZyhzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBGWF9MUENTVFIgZmlsZSwgaW50IGxpbmUpCit7CisgICAgcmV0dXJuIGdfcERlZkZveGl0TWdyLT5BbGxvY0RlYnVnKHNpemUsIGZsYWdzLCBmaWxlLCBsaW5lKTsKK30KK3ZvaWQqIEZYTUVNX0RlZmF1bHRBbGxvY0RlYnVnMihzaXplX3Qgc2l6ZSwgc2l6ZV90IHVuaXQsIGludCBmbGFncywgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKQoreworICAgIHJldHVybiBnX3BEZWZGb3hpdE1nci0+QWxsb2NEZWJ1ZyhzaXplICogdW5pdCwgZmxhZ3MsIGZpbGUsIGxpbmUpOworfQordm9pZCogRlhNRU1fRGVmYXVsdFJlYWxsb2NEZWJ1Zyh2b2lkKiBwLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBGWF9MUENTVFIgZmlsZSwgaW50IGxpbmUpCit7CisgICAgaWYgKHAgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRlhNRU1fRGVmYXVsdEFsbG9jRGVidWcoc2l6ZSwgZmxhZ3MsIGZpbGUsIGxpbmUpOworICAgIH0KKyAgICByZXR1cm4gZ19wRGVmRm94aXRNZ3ItPlJlYWxsb2NEZWJ1ZyhwLCBzaXplLCBmbGFncywgZmlsZSwgbGluZSk7Cit9Cit2b2lkKiBGWE1FTV9EZWZhdWx0UmVhbGxvY0RlYnVnMih2b2lkKiBwLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHVuaXQsIGludCBmbGFncywgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKQoreworICAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZYTUVNX0RlZmF1bHRBbGxvY0RlYnVnMihzaXplLCB1bml0LCBmbGFncywgZmlsZSwgbGluZSk7CisgICAgfQorICAgIHJldHVybiBnX3BEZWZGb3hpdE1nci0+UmVhbGxvY0RlYnVnKHAsIHNpemUgKiB1bml0LCBmbGFncywgZmlsZSwgbGluZSk7Cit9Cit2b2lkIEZYTUVNX0RlZmF1bHRGcmVlKHZvaWQqIHAsIGludCBmbGFncykKK3sKKyAgICBnX3BEZWZGb3hpdE1nci0+RnJlZShwLCBmbGFncyk7Cit9CitJRlhfQWxsb2NhdG9yKiBGWE1FTV9HZXREZWZBbGxvY2F0b3IoKQoreworICAgIHJldHVybiAmZ19wRGVmRm94aXRNZ3ItPm1fRGVmQWxsb2NhdG9yLm1fQWxsb2NhdG9yOworfQordm9pZCogQ0ZYX09iamVjdDo6b3BlcmF0b3IgbmV3KHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBnX3BEZWZGb3hpdE1nci0+QWxsb2Moc2l6ZSwgMCk7Cit9Cit2b2lkKiBDRlhfT2JqZWN0OjpvcGVyYXRvciBuZXdbXShzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gZ19wRGVmRm94aXRNZ3ItPkFsbG9jKHNpemUsIDApOworfQordm9pZCogQ0ZYX09iamVjdDo6b3BlcmF0b3IgbmV3W10oc2l6ZV90IHNpemUsIEZYX0xQQ1NUUiBmaWxlLCBpbnQgbGluZSkKK3sKKyAgICByZXR1cm4gZ19wRGVmRm94aXRNZ3ItPkFsbG9jRGVidWcoc2l6ZSwgMCwgZmlsZSwgbGluZSk7Cit9Cit2b2lkKiBDRlhfT2JqZWN0OjpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIEZYX0xQQ1NUUiBmaWxlLCBpbnQgbGluZSkKK3sKKyAgICByZXR1cm4gZ19wRGVmRm94aXRNZ3ItPkFsbG9jRGVidWcoc2l6ZSwgMCwgZmlsZSwgbGluZSk7Cit9Cit2b2lkIENGWF9PYmplY3Q6Om9wZXJhdG9yIGRlbGV0ZSh2b2lkKiBwKQoreworICAgIGdfcERlZkZveGl0TWdyLT5GcmVlKHAsIDApOworfQordm9pZCBDRlhfT2JqZWN0OjpvcGVyYXRvciBkZWxldGVbXSh2b2lkKiBwKQoreworICAgIGdfcERlZkZveGl0TWdyLT5GcmVlKHAsIDApOworfQordm9pZCBDRlhfT2JqZWN0OjpvcGVyYXRvciBkZWxldGUodm9pZCogcCwgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKQoreworICAgIGdfcERlZkZveGl0TWdyLT5GcmVlKHAsIDApOworfQordm9pZCBDRlhfT2JqZWN0OjpvcGVyYXRvciBkZWxldGVbXSh2b2lkKiBwLCBGWF9MUENTVFIgZmlsZSwgaW50IGxpbmUpCit7CisgICAgZ19wRGVmRm94aXRNZ3ItPkZyZWUocCwgMCk7Cit9Cit2b2lkKiBDRlhfQWxsb2NPYmplY3Q6Om9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciwgRlhfTFBDU1RSIGZpbGVuYW1lLCBpbnQgbGluZSkKK3sKKyAgICB2b2lkKiBwID0gcEFsbG9jYXRvciA/IHBBbGxvY2F0b3ItPm1fQWxsb2NEZWJ1ZyhwQWxsb2NhdG9yLCBzaXplLCBmaWxlbmFtZSwgbGluZSkgOgorICAgICAgICAgICAgICBnX3BEZWZGb3hpdE1nci0+QWxsb2NEZWJ1ZyhzaXplLCAwLCBmaWxlbmFtZSwgbGluZSk7CisgICAgKChDRlhfQWxsb2NPYmplY3QqKXApLT5tX3BBbGxvY2F0b3IgPSBwQWxsb2NhdG9yOworICAgIHJldHVybiBwOworfQordm9pZCBDRlhfQWxsb2NPYmplY3Q6Om9wZXJhdG9yIGRlbGV0ZSAodm9pZCogcCwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciwgRlhfTFBDU1RSIGZpbGVuYW1lLCBpbnQgbGluZSkKK3sKKyAgICBpZiAocEFsbG9jYXRvcikgeworICAgICAgICBwQWxsb2NhdG9yLT5tX0ZyZWUocEFsbG9jYXRvciwgcCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZ19wRGVmRm94aXRNZ3ItPkZyZWUocCwgMCk7CisgICAgfQorfQordm9pZCogQ0ZYX0FsbG9jT2JqZWN0OjpvcGVyYXRvciBuZXcoc2l6ZV90IHNpemUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpCit7CisgICAgdm9pZCogcCA9IHBBbGxvY2F0b3IgPyBwQWxsb2NhdG9yLT5tX0FsbG9jKHBBbGxvY2F0b3IsIHNpemUpIDogZ19wRGVmRm94aXRNZ3ItPkFsbG9jKHNpemUsIDApOworICAgICgoQ0ZYX0FsbG9jT2JqZWN0KilwKS0+bV9wQWxsb2NhdG9yID0gcEFsbG9jYXRvcjsKKyAgICByZXR1cm4gcDsKK30KK3ZvaWQgQ0ZYX0FsbG9jT2JqZWN0OjpvcGVyYXRvciBkZWxldGUodm9pZCogcCkKK3sKKyAgICBpZiAoKChDRlhfQWxsb2NPYmplY3QqKXApLT5tX3BBbGxvY2F0b3IpIHsKKyAgICAgICAgKCgoQ0ZYX0FsbG9jT2JqZWN0KilwKS0+bV9wQWxsb2NhdG9yKS0+bV9GcmVlKCgoQ0ZYX0FsbG9jT2JqZWN0KilwKS0+bV9wQWxsb2NhdG9yLCBwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBnX3BEZWZGb3hpdE1nci0+RnJlZShwLCAwKTsKKyAgICB9Cit9Cit2b2lkIENGWF9BbGxvY09iamVjdDo6b3BlcmF0b3IgZGVsZXRlKHZvaWQqIHAsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpCit7CisgICAgaWYgKHBBbGxvY2F0b3IpIHsKKyAgICAgICAgcEFsbG9jYXRvci0+bV9GcmVlKHBBbGxvY2F0b3IsIHApOworICAgIH0gZWxzZSB7CisgICAgICAgIGdfcERlZkZveGl0TWdyLT5GcmVlKHAsIDApOworICAgIH0KK30KK2V4dGVybiAiQyIgeworICAgIHN0YXRpYyB2b2lkKiBfR09QQWxsb2NEZWJ1ZyhJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yLCBzaXplX3Qgc2l6ZSwgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKQorICAgIHsKKyAgICAgICAgcmV0dXJuICgoQ0ZYX0dyb3dPbmx5UG9vbCopcEFsbG9jYXRvciktPkFsbG9jKHNpemUpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCogX0dPUEFsbG9jKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuICgoQ0ZYX0dyb3dPbmx5UG9vbCopcEFsbG9jYXRvciktPkFsbG9jKHNpemUpOworICAgIH0KKyAgICBzdGF0aWMgdm9pZCogX0dPUFJlYWxsb2NEZWJ1ZyhJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yLCB2b2lkKiBwLCBzaXplX3QgbmV3X3NpemUsIEZYX0xQQ1NUUiBmaWxlLCBpbnQgbGluZSkKKyAgICB7CisgICAgICAgIHJldHVybiAoKENGWF9Hcm93T25seVBvb2wqKXBBbGxvY2F0b3IpLT5SZWFsbG9jKHAsIG5ld19zaXplKTsKKyAgICB9CisgICAgc3RhdGljIHZvaWQqIF9HT1BSZWFsbG9jKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IsIHZvaWQqIHAsIHNpemVfdCBuZXdfc2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAoKENGWF9Hcm93T25seVBvb2wqKXBBbGxvY2F0b3IpLT5SZWFsbG9jKHAsIG5ld19zaXplKTsKKyAgICB9CisgICAgc3RhdGljIHZvaWQgX0dPUEZyZWUoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciwgdm9pZCogcCkKKyAgICB7CisgICAgfQorfTsKK0NGWF9Hcm93T25seVBvb2w6OkNGWF9Hcm93T25seVBvb2woSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciwgc2l6ZV90IHRydW5rX3NpemUpCit7CisgICAgbV9UcnVua1NpemUgPSB0cnVua19zaXplOworICAgIG1fcEZpcnN0VHJ1bmsgPSBOVUxMOworICAgIG1fcEFsbG9jYXRvciA9IHBBbGxvY2F0b3IgPyBwQWxsb2NhdG9yIDogJmdfcERlZkZveGl0TWdyLT5tX0RlZkFsbG9jYXRvci5tX0FsbG9jYXRvcjsKKyAgICBtX0FsbG9jRGVidWcgPSBfR09QQWxsb2NEZWJ1ZzsKKyAgICBtX0FsbG9jID0gX0dPUEFsbG9jOworICAgIG1fUmVhbGxvY0RlYnVnID0gX0dPUFJlYWxsb2NEZWJ1ZzsKKyAgICBtX1JlYWxsb2MgPSBfR09QUmVhbGxvYzsKKyAgICBtX0ZyZWUgPSBfR09QRnJlZTsKK30KK0NGWF9Hcm93T25seVBvb2w6On5DRlhfR3Jvd09ubHlQb29sKCkKK3sKKyAgICBGcmVlQWxsKCk7Cit9Cit2b2lkIENGWF9Hcm93T25seVBvb2w6OlNldEFsbG9jYXRvcihJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQoreworICAgIEFTU0VSVChtX3BGaXJzdFRydW5rID09IE5VTEwpOworICAgIG1fcEFsbG9jYXRvciA9IHBBbGxvY2F0b3IgPyBwQWxsb2NhdG9yIDogJmdfcERlZkZveGl0TWdyLT5tX0RlZkFsbG9jYXRvci5tX0FsbG9jYXRvcjsKK30KK3N0cnVjdCBfRlhfR3Jvd09ubHlUcnVuayB7CisgICAgc2l6ZV90CW1fU2l6ZTsKKyAgICBzaXplX3QJbV9BbGxvY2F0ZWQ7CisgICAgX0ZYX0dyb3dPbmx5VHJ1bmsqCW1fcE5leHQ7Cit9Owordm9pZCBDRlhfR3Jvd09ubHlQb29sOjpGcmVlQWxsKCkKK3sKKyAgICBfRlhfR3Jvd09ubHlUcnVuayogcFRydW5rID0gKF9GWF9Hcm93T25seVRydW5rKiltX3BGaXJzdFRydW5rOworICAgIHdoaWxlIChwVHJ1bmspIHsKKyAgICAgICAgX0ZYX0dyb3dPbmx5VHJ1bmsqIHBOZXh0ID0gcFRydW5rLT5tX3BOZXh0OworICAgICAgICBtX3BBbGxvY2F0b3ItPm1fRnJlZShtX3BBbGxvY2F0b3IsIHBUcnVuayk7CisgICAgICAgIHBUcnVuayA9IHBOZXh0OworICAgIH0KKyAgICBtX3BGaXJzdFRydW5rID0gTlVMTDsKK30KK3ZvaWQqIENGWF9Hcm93T25seVBvb2w6OkFsbG9jKHNpemVfdCBzaXplKQoreworICAgIHNpemUgPSAoc2l6ZSArIDMpIC8gNCAqIDQ7CisgICAgX0ZYX0dyb3dPbmx5VHJ1bmsqIHBUcnVuayA9IChfRlhfR3Jvd09ubHlUcnVuayopbV9wRmlyc3RUcnVuazsKKyAgICB3aGlsZSAocFRydW5rKSB7CisgICAgICAgIGlmIChwVHJ1bmstPm1fU2l6ZSAtIHBUcnVuay0+bV9BbGxvY2F0ZWQgPj0gc2l6ZSkgeworICAgICAgICAgICAgdm9pZCogcCA9IChGWF9MUEJZVEUpKHBUcnVuayArIDEpICsgcFRydW5rLT5tX0FsbG9jYXRlZDsKKyAgICAgICAgICAgIHBUcnVuay0+bV9BbGxvY2F0ZWQgKz0gc2l6ZTsKKyAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICB9CisgICAgICAgIHBUcnVuayA9IHBUcnVuay0+bV9wTmV4dDsKKyAgICB9CisgICAgc2l6ZV90IGFsbG9jX3NpemUgPSBzaXplID4gbV9UcnVua1NpemUgPyBzaXplIDogbV9UcnVua1NpemU7CisgICAgcFRydW5rID0gKF9GWF9Hcm93T25seVRydW5rKiltX3BBbGxvY2F0b3ItPm1fQWxsb2MobV9wQWxsb2NhdG9yLCBzaXplb2YoX0ZYX0dyb3dPbmx5VHJ1bmspICsgYWxsb2Nfc2l6ZSk7CisgICAgcFRydW5rLT5tX1NpemUgPSBhbGxvY19zaXplOworICAgIHBUcnVuay0+bV9BbGxvY2F0ZWQgPSBzaXplOworICAgIHBUcnVuay0+bV9wTmV4dCA9IChfRlhfR3Jvd09ubHlUcnVuayopbV9wRmlyc3RUcnVuazsKKyAgICBtX3BGaXJzdFRydW5rID0gcFRydW5rOworICAgIHJldHVybiBwVHJ1bmsgKyAxOworfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjcnQvZnhfYmFzaWNfbWVtbWdyX21pbmkuY3BwIGIvY29yZS9zcmMvZnhjcnQvZnhfYmFzaWNfbWVtbWdyX21pbmkuY3BwCmluZGV4IGY4Mzg1ZTIuLjhkNDhiYWIgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX21lbW1ncl9taW5pLmNwcAorKysgYi9jb3JlL3NyYy9meGNydC9meF9iYXNpY19tZW1tZ3JfbWluaS5jcHAKQEAgLTEsODIyICsxLDgyMiBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfZXh0LmgiDQotI2luY2x1ZGUgIm1lbV9pbnQuaCINCi0jaWZkZWYgX0ZQREZBUElfTUlOSV8NCi1zdGF0aWMgRlhfTUVNQ09ORklHIGdfTWVtQ29uZmlnID0gew0KLSAgICAxLA0KLSAgICA1LA0KLSAgICA4LA0KLSAgICA0LA0KLSAgICAxMiwNCi0gICAgOCwNCi0gICAgMiwNCi0gICAgNCwNCi0gICAgMzIsDQotICAgIDY0LA0KLX07DQotI2Vsc2UNCi1zdGF0aWMgRlhfTUVNQ09ORklHIGdfTWVtQ29uZmlnID0gew0KLSAgICAxLA0KLSAgICA4LA0KLSAgICAyNCwNCi0gICAgOCwNCi0gICAgMzIsDQotICAgIDE2LA0KLSAgICA0LA0KLSAgICA4LA0KLSAgICAxMjgsDQotICAgIDY0LA0KLX07DQotI2VuZGlmDQotdm9pZCBGWE1FTV9TZXRDb25maWcoY29uc3QgRlhfTUVNQ09ORklHKiBtZW1Db25maWcpDQotew0KLSAgICBnX01lbUNvbmZpZyA9ICptZW1Db25maWc7DQotfQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLWV4dGVybiAiQyIgew0KLSNlbmRpZg0KLXN0YXRpYyB2b2lkKiBGaXhlZEFsbG9jKEZYTUVNX1N5c3RlbU1nciogcE1nciwgc2l6ZV90IHNpemUsIGludCBmbGFncykNCi17DQotICAgIHJldHVybiAoKENGWE1FTV9GaXhlZE1nciopcE1nci0+dXNlciktPkFsbG9jKHNpemUpOw0KLX0NCi1zdGF0aWMgdm9pZCogRml4ZWRBbGxvY0RlYnVnKEZYTUVNX1N5c3RlbU1nciogcE1nciwgc2l6ZV90IHNpemUsIGludCBmbGFncywgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKQ0KLXsNCi0gICAgcmV0dXJuICgoQ0ZYTUVNX0ZpeGVkTWdyKilwTWdyLT51c2VyKS0+QWxsb2Moc2l6ZSk7DQotfQ0KLXN0YXRpYyB2b2lkKiBGaXhlZFJlYWxsb2MoRlhNRU1fU3lzdGVtTWdyKiBwTWdyLCB2b2lkKiBwb2ludGVyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQ0KLXsNCi0gICAgcmV0dXJuICgoQ0ZYTUVNX0ZpeGVkTWdyKilwTWdyLT51c2VyKS0+UmVhbGxvYyhwb2ludGVyLCBzaXplKTsNCi19DQotc3RhdGljIHZvaWQqIEZpeGVkUmVhbGxvY0RlYnVnKEZYTUVNX1N5c3RlbU1nciogcE1nciwgdm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUsIGludCBmbGFncywgRlhfTFBDU1RSIGZpbGUsIGludCBsaW5lKQ0KLXsNCi0gICAgcmV0dXJuICgoQ0ZYTUVNX0ZpeGVkTWdyKilwTWdyLT51c2VyKS0+UmVhbGxvYyhwb2ludGVyLCBzaXplKTsNCi19DQotc3RhdGljIHZvaWQgIEZpeGVkRnJlZShGWE1FTV9TeXN0ZW1NZ3IqIHBNZ3IsIHZvaWQqIHBvaW50ZXIsIGludCBmbGFncykNCi17DQotICAgICgoQ0ZYTUVNX0ZpeGVkTWdyKilwTWdyLT51c2VyKS0+RnJlZShwb2ludGVyKTsNCi19DQotc3RhdGljIHZvaWQgIEZpeGVkUHVyZ2UoRlhNRU1fU3lzdGVtTWdyKiBwTWdyKQ0KLXsNCi0gICAgKChDRlhNRU1fRml4ZWRNZ3IqKXBNZ3ItPnVzZXIpLT5QdXJnZSgpOw0KLX0NCi1zdGF0aWMgdm9pZCBGaXhlZENvbGxlY3RBbGwoRlhNRU1fU3lzdGVtTWdyKiBwTWdyKQ0KLXsNCi0gICAgKChDRlhNRU1fRml4ZWRNZ3IqKXBNZ3ItPnVzZXIpLT5GcmVlQWxsKCk7DQotfQ0KLSNkZWZpbmUgRklYRURNRU1fTUlOSU1VTVNJWkUJKDEwMjQgKiAxMDI0ICogOCkNCi1GWE1FTV9Gb3hpdE1nciogRlhNRU1fQ3JlYXRlTWVtb3J5TWdyKHNpemVfdCBzaXplLCBGWF9CT09MIGV4dGVuc2libGUpDQotew0KLSAgICBpZiAoc2l6ZSA8IEZJWEVETUVNX01JTklNVU1TSVpFKSB7DQotICAgICAgICBzaXplID0gRklYRURNRU1fTUlOSU1VTVNJWkU7DQotICAgIH0NCi0gICAgRlhfTFBWT0lEIHBNZW1vcnkgPSBtYWxsb2Moc2l6ZSk7DQotICAgIGlmICghcE1lbW9yeSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ0ZpeGVkTWdyX1Byb3h5KiBwUHJveHkgPSAoQ0ZpeGVkTWdyX1Byb3h5KilwTWVtb3J5Ow0KLSAgICBzaXplX3Qgb2Zmc2V0U2l6ZSA9IChzaXplb2YoQ0ZpeGVkTWdyX1Byb3h5KSArIDE1KSAvIDE2ICogMTY7DQotICAgIEZYTUVNX0ZveGl0TWdyKiBwRm94aXRNZ3IgPSBwUHJveHktPkluaXRpYWxpemUoKEZYX0xQQllURSlwUHJveHkgKyBvZmZzZXRTaXplLCBzaXplIC0gb2Zmc2V0U2l6ZSwgZXh0ZW5zaWJsZSk7DQotICAgIGlmICghcEZveGl0TWdyKSB7DQotICAgICAgICBmcmVlKHBNZW1vcnkpOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgZ19wRGVmRm94aXRNZ3IgPSAoQ0ZYX01lbW9yeU1nciopcEZveGl0TWdyOw0KLSAgICBnX3BEZWZGb3hpdE1nci0+bV9wRXh0ZXJuYWxNZW1vcnkgPSBwTWVtb3J5Ow0KLSAgICByZXR1cm4gcEZveGl0TWdyOw0KLX0NCi1GWE1FTV9Gb3hpdE1nciogRlhNRU1fQ3JlYXRlRml4ZWRNZ3Iodm9pZCogcE1lbW9yeSwgc2l6ZV90IHNpemUsIEZYTUVNX1N5c3RlbU1ncjIqIHBTeXN0ZW1NZ3IpDQotew0KLSAgICBpZiAocE1lbW9yeSA9PSBOVUxMIHx8IHNpemUgPCBGWF9GSVhFRE1FTV9QQUdFU0laRSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKCFwU3lzdGVtTWdyICYmIHNpemUgPj0gRklYRURNRU1fUFJPWFlTSVpFXzEpIHsNCi0gICAgICAgIENGaXhlZE1ncl9Qcm94eSogcFByb3h5ID0gKENGaXhlZE1ncl9Qcm94eSopcE1lbW9yeTsNCi0gICAgICAgIHNpemVfdCBvZmZzZXRTaXplID0gKHNpemVvZihDRml4ZWRNZ3JfUHJveHkpICsgMTUpIC8gMTYgKiAxNjsNCi0gICAgICAgIHJldHVybiBwUHJveHktPkluaXRpYWxpemUoKEZYX0xQQllURSlwUHJveHkgKyBvZmZzZXRTaXplLCBzaXplIC0gb2Zmc2V0U2l6ZSwgRkFMU0UpOw0KLSAgICB9DQotICAgIENGWE1FTV9GaXhlZE1nciogcEhlYWRlciA9IChDRlhNRU1fRml4ZWRNZ3IqKXBNZW1vcnk7DQotICAgIHBIZWFkZXItPkluaXRpYWxpemUoc2l6ZSk7DQotICAgIHBIZWFkZXItPm1fcEV4dGVuZGVyID0gcFN5c3RlbU1ncjsNCi0gICAgQ0ZYX01lbW9yeU1nciogcCA9IChDRlhfTWVtb3J5TWdyKilwSGVhZGVyLT5BbGxvYyhzaXplb2YoQ0ZYX01lbW9yeU1ncikpOw0KLSAgICBpZiAocCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBwLT5Jbml0KCZwSGVhZGVyLT5tX1N5c3RlbU1ncik7DQotICAgIHJldHVybiAoRlhNRU1fRm94aXRNZ3IqKXA7DQotfQ0KLXNpemVfdCBGWE1FTV9HZXRCbG9ja1NpemVJbkZpeGVkTWdyKEZYTUVNX0ZveGl0TWdyKiBwRm94aXRNZ3IsIHZvaWQqIHB0cikNCi17DQotICAgIHJldHVybiBwRm94aXRNZ3IgPyAoKENGWE1FTV9GaXhlZE1nciopKChDRlhfTWVtb3J5TWdyKilwRm94aXRNZ3IpLT5tX3BTeXN0ZW1NZ3ItPnVzZXIpLT5HZXRTaXplKHB0cikgOiAwOw0KLX0NCi0jaWZkZWYgX19jcGx1c3BsdXMNCi19DQotI2VuZGlmDQotY29uc3QgRlhfTUVNQ09ORklHIGdfUHJveHlNZ3JfTWVtQ29uZmlnc1s2XSA9IHsNCi0gICAgezEsICAgICAgMiwgICAgICA0LCAgICAgIDAsICAgICAgMiwgICAgICAyLCAgIDIsICAgICAgIDAsICAgICAgIDAsICAgICAwfSwNCi0gICAgezEsICAgICAgNCwgICAgICA4LCAgICAgIDAsICAgICAgMiwgICAgICAyLCAgIDIsICAgICAgIDAsICAgICAgIDAsICAgICAwfSwNCi0gICAgezEsICAgICAgNCwgICAgICAxNiwgICAgIDQsICAgICAgOCwgICAgICA4LCAgIDIsICAgICAgIDEsICAgICAgIDE2LCAgICAxNn0sDQotICAgIHsxLCAgICAgIDgsICAgICAgMjQsICAgICA0LCAgICAgIDEyLCAgICAgMTIsICA0LCAgICAgICAyLCAgICAgICAzMiwgICAgMTZ9LA0KLSAgICB7MSwgICAgICA4LCAgICAgIDI0LCAgICAgOCwgICAgICAxNiwgICAgIDE2LCAgNCwgICAgICAgMiwgICAgICAgNjQsICAgIDMyfSwNCi0gICAgezEsICAgICAgOCwgICAgICAyNCwgICAgIDgsICAgICAgMjQsICAgICAzMiwgIDQsICAgICAgIDIsICAgICAgIDEyOCwgICA2NH0sDQotfTsNCi1jb25zdCBGWF9NRU1DT05GSUcqCUZpeGVkTWdyX0dldENvbmZpZyhzaXplX3QgblNpemUpDQotew0KLSAgICBpbnQgaW5kZXggPSA1Ow0KLSAgICBpZiAoblNpemUgPD0gRklYRURNRU1fUFJPWFlTSVpFXzApIHsNCi0gICAgICAgIGluZGV4ID0gMDsNCi0gICAgfSBlbHNlIGlmIChuU2l6ZSA8PSBGSVhFRE1FTV9QUk9YWVNJWkVfMSkgew0KLSAgICAgICAgaW5kZXggPSAxOw0KLSAgICB9IGVsc2UgaWYgKG5TaXplIDw9IEZJWEVETUVNX1BST1hZU0laRV8yKSB7DQotICAgICAgICBpbmRleCA9IDI7DQotICAgIH0gZWxzZSBpZiAoblNpemUgPD0gRklYRURNRU1fUFJPWFlTSVpFXzMpIHsNCi0gICAgICAgIGluZGV4ID0gMzsNCi0gICAgfSBlbHNlIGlmIChuU2l6ZSA8PSBGSVhFRE1FTV9QUk9YWVNJWkVfNCkgew0KLSAgICAgICAgaW5kZXggPSA0Ow0KLSAgICB9DQotICAgIHJldHVybiAmZ19Qcm94eU1ncl9NZW1Db25maWdzW2luZGV4XTsNCi19DQotRlhNRU1fRm94aXRNZ3IqIENGaXhlZE1ncl9Qcm94eTo6SW5pdGlhbGl6ZShGWF9MUFZPSUQgcEJ1ZmZlciwgc2l6ZV90IG5TaXplLCBGWF9CT09MIGJFeHRlbnNpYmxlKQ0KLXsNCi0gICAgRlhTWVNfYXNzZXJ0KHBCdWZmZXIgIT0gTlVMTCAmJiBuU2l6ZSA+PSBGSVhFRE1FTV9QUk9YWVNJWkVfMSAtIHNpemVvZihDRml4ZWRNZ3JfUHJveHkpKTsNCi0gICAgRlhNRU1fU2V0Q29uZmlnKEZpeGVkTWdyX0dldENvbmZpZyhuU2l6ZSkpOw0KLSAgICBtX1N5c3RlbU1nci5Nb3JlID0gJkNGaXhlZE1ncl9Qcm94eTo6Q29tbW9uX01vcmU7DQotICAgIG1fU3lzdGVtTWdyLkZyZWUgPSAmQ0ZpeGVkTWdyX1Byb3h5OjpDb21tb25fRnJlZTsNCi0gICAgbV9wRml4ZWRQYWdlID0gKENGWE1FTV9QYWdlKikoKEZYX0xQQllURSlwQnVmZmVyICsgRklYRURNRU1fUFJPWFlTSVpFXzApOw0KLSAgICBtX3BGaXhlZFBhZ2UtPkluaXRpYWxpemUoblNpemUgLSBGSVhFRE1FTV9QUk9YWVNJWkVfMCk7DQotICAgIG1fcEJ1ZmZlciA9IHBCdWZmZXI7DQotICAgIG1fblNpemUgPSBuU2l6ZTsNCi0gICAgbV9iRXh0ZW5zaWJsZSA9IGJFeHRlbnNpYmxlOw0KLSAgICByZXR1cm4gRlhNRU1fQ3JlYXRlRml4ZWRNZ3IocEJ1ZmZlciwgRklYRURNRU1fUFJPWFlTSVpFXzAsICZtX1N5c3RlbU1ncik7DQotfQ0KLUZYX0JPT0wgQ0ZpeGVkTWdyX1Byb3h5OjpDb21tb25fTW9yZShGWE1FTV9TeXN0ZW1NZ3IyKiBwTWdyLCBzaXplX3QgYWxsb2Nfc2l6ZSwgdm9pZCoqIG5ld19tZW1vcnksIHNpemVfdCogbmV3X3NpemUpDQotew0KLSAgICBDRml4ZWRNZ3JfUHJveHkqIHBQcm94eU1nciA9IChDRml4ZWRNZ3JfUHJveHkqKXBNZ3I7DQotICAgIEZYU1lTX2Fzc2VydChwUHJveHlNZ3IgIT0gTlVMTCAmJiBwUHJveHlNZ3ItPm1fcEZpeGVkUGFnZSAhPSBOVUxMKTsNCi0gICAgKm5ld19zaXplID0gYWxsb2Nfc2l6ZTsNCi0gICAgKm5ld19tZW1vcnkgPSBwUHJveHlNZ3ItPm1fcEZpeGVkUGFnZS0+QWxsb2MoYWxsb2Nfc2l6ZSk7DQotICAgIGlmICgqbmV3X21lbW9yeSA9PSBOVUxMICYmIHBQcm94eU1nci0+bV9iRXh0ZW5zaWJsZSkgew0KLSAgICAgICAgKm5ld19tZW1vcnkgPSBtYWxsb2MoYWxsb2Nfc2l6ZSk7DQotICAgIH0NCi0gICAgcmV0dXJuICpuZXdfbWVtb3J5ICE9IE5VTEw7DQotfQ0KLXZvaWQgQ0ZpeGVkTWdyX1Byb3h5OjpDb21tb25fRnJlZShGWE1FTV9TeXN0ZW1NZ3IyKiBwTWdyLCB2b2lkKiBtZW1vcnkpDQotew0KLSAgICBDRml4ZWRNZ3JfUHJveHkqIHBQcm94eU1nciA9IChDRml4ZWRNZ3JfUHJveHkqKXBNZ3I7DQotICAgIEZYU1lTX2Fzc2VydChwUHJveHlNZ3IgIT0gTlVMTCAmJiBwUHJveHlNZ3ItPm1fcEZpeGVkUGFnZSAhPSBOVUxMKTsNCi0gICAgaWYgKG1lbW9yeSA+IHBQcm94eU1nci0+bV9wQnVmZmVyICYmIG1lbW9yeSA8IChGWF9MUEJZVEUpcFByb3h5TWdyLT5tX3BCdWZmZXIgKyBwUHJveHlNZ3ItPm1fblNpemUpIHsNCi0gICAgICAgIHBQcm94eU1nci0+bV9wRml4ZWRQYWdlLT5GcmVlKG1lbW9yeSk7DQotICAgIH0gZWxzZSBpZiAocFByb3h5TWdyLT5tX2JFeHRlbnNpYmxlKSB7DQotICAgICAgICBmcmVlKG1lbW9yeSk7DQotICAgIH0NCi19DQotdm9pZCBDRlhNRU1fUGFnZTo6SW5pdGlhbGl6ZShzaXplX3Qgc2l6ZSkNCi17DQotICAgIENGWE1FTV9CbG9jayAqcEZpcnN0QmxvY2sgPSAoQ0ZYTUVNX0Jsb2NrKikodGhpcyArIDEpOw0KLSAgICBtX25BdmFpbFNpemUgPSBzaXplIC0gc2l6ZW9mKENGWE1FTV9QYWdlKSAtIHNpemVvZihDRlhNRU1fQmxvY2spOw0KLSAgICBwRmlyc3RCbG9jay0+bV9uQmxvY2tTaXplID0gbV9uQXZhaWxTaXplOw0KLSAgICBwRmlyc3RCbG9jay0+bV9wTmV4dEJsb2NrID0gTlVMTDsNCi0gICAgbV9BdmFpbEhlYWQubV9uQmxvY2tTaXplID0gbV9uQXZhaWxTaXplOw0KLSAgICBtX0F2YWlsSGVhZC5tX3BOZXh0QmxvY2sgPSBwRmlyc3RCbG9jazsNCi0gICAgbV9wTGltaXRQb3MgPSAoQ0ZYTUVNX0Jsb2NrKikoKEZYX0xQQllURSl0aGlzICsgc2l6ZSk7DQotfQ0KLUZYX0xQVk9JRCBDRlhNRU1fUGFnZTo6QWxsb2MoQ0ZYTUVNX0Jsb2NrKiBwUHJldkJsb2NrLCBDRlhNRU1fQmxvY2sqIHBOZXh0QmxvY2ssIHNpemVfdCBzaXplLCBzaXplX3Qgb2xkc2l6ZSkNCi17DQotICAgIHNpemVfdCBnYXAgPSBwTmV4dEJsb2NrLT5tX25CbG9ja1NpemUgLSBzaXplOw0KLSAgICBpZiAoZ2FwIDw9IDY0ICsgc2l6ZW9mKENGWE1FTV9CbG9jaykpIHsNCi0gICAgICAgIHBQcmV2QmxvY2stPm1fcE5leHRCbG9jayA9IHBOZXh0QmxvY2stPm1fcE5leHRCbG9jazsNCi0gICAgICAgIG1fbkF2YWlsU2l6ZSAtPSBwTmV4dEJsb2NrLT5tX25CbG9ja1NpemU7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX25BdmFpbFNpemUgLT0gc2l6ZSArIHNpemVvZihDRlhNRU1fQmxvY2spOw0KLSAgICAgICAgcE5leHRCbG9jay0+bV9uQmxvY2tTaXplID0gc2l6ZTsNCi0gICAgICAgIENGWE1FTV9CbG9jayAqcE5ld0Jsb2NrID0gKENGWE1FTV9CbG9jayopKChGWF9MUEJZVEUpKHBOZXh0QmxvY2sgKyAxKSArIHNpemUpOw0KLSAgICAgICAgcE5ld0Jsb2NrLT5tX25CbG9ja1NpemUgPSBnYXAgLSBzaXplb2YoQ0ZYTUVNX0Jsb2NrKTsNCi0gICAgICAgIHBOZXdCbG9jay0+bV9wTmV4dEJsb2NrID0gcE5leHRCbG9jay0+bV9wTmV4dEJsb2NrOw0KLSAgICAgICAgcFByZXZCbG9jay0+bV9wTmV4dEJsb2NrID0gcE5ld0Jsb2NrOw0KLSAgICB9DQotICAgIHJldHVybiAoRlhfTFBWT0lEKShwTmV4dEJsb2NrICsgMSk7DQotfQ0KLUZYX0xQVk9JRCBDRlhNRU1fUGFnZTo6QWxsb2Moc2l6ZV90IHNpemUpDQotew0KLSAgICBzaXplX3Qgb2xkc2l6ZSA9IHNpemU7DQotI2lmIF9GWF9XT1JEU0laRV8gPT0gX0ZYX1c2NF8NCi0gICAgc2l6ZSA9IChzaXplICsgMzEpIC8gMzIgKiAzMjsNCi0jZWxzZQ0KLSAgICBzaXplID0gKHNpemUgKyA3KSAvIDggKiA4Ow0KLSNlbmRpZg0KLSAgICBpZiAobV9uQXZhaWxTaXplIDwgc2l6ZSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ0ZYTUVNX0Jsb2NrICpwTmV4dEJsb2NrOw0KLSAgICBDRlhNRU1fQmxvY2sgKnBQcmV2QmxvY2sgPSAmbV9BdmFpbEhlYWQ7DQotICAgIHdoaWxlIChUUlVFKSB7DQotICAgICAgICBwTmV4dEJsb2NrID0gcFByZXZCbG9jay0+bV9wTmV4dEJsb2NrOw0KLSAgICAgICAgaWYgKCFwTmV4dEJsb2NrKSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBpZiAocE5leHRCbG9jay0+bV9uQmxvY2tTaXplID49IHNpemUpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIHBQcmV2QmxvY2sgPSBwTmV4dEJsb2NrOw0KLSAgICB9DQotICAgIHJldHVybiBBbGxvYyhwUHJldkJsb2NrLCBwTmV4dEJsb2NrLCBzaXplLCBvbGRzaXplKTsNCi19DQotRlhfTFBWT0lEIENGWE1FTV9QYWdlOjpSZWFsbG9jKEZYX0xQVk9JRCBwLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpDQotew0KLSAgICBGWFNZU19hc3NlcnQocCA+IChGWF9MUFZPSUQpdGhpcyAmJiBwIDwgKEZYX0xQVk9JRCltX3BMaW1pdFBvcyk7DQotICAgIHNpemVfdCBvbGRuZXdTaXplID0gbmV3U2l6ZTsNCi0jaWYgX0ZYX1dPUkRTSVpFXyA9PSBfRlhfVzY0Xw0KLSAgICBuZXdTaXplID0gKG5ld1NpemUgKyAzMSkgLyAzMiAqIDMyOw0KLSNlbHNlDQotICAgIG5ld1NpemUgPSAobmV3U2l6ZSArIDcpIC8gOCAqIDg7DQotI2VuZGlmDQotICAgIENGWE1FTV9CbG9jayAqcFByZXZCbG9jayA9ICZtX0F2YWlsSGVhZDsNCi0gICAgQ0ZYTUVNX0Jsb2NrICpwTmV4dEJsb2NrLCAqcFByZXZQcmV2Ow0KLSAgICBDRlhNRU1fQmxvY2sgKnBCbG9jayA9IChDRlhNRU1fQmxvY2sqKXAgLSAxOw0KLSAgICBwUHJldlByZXYgPSBOVUxMOw0KLSAgICB3aGlsZSAoVFJVRSkgew0KLSAgICAgICAgcE5leHRCbG9jayA9IHBQcmV2QmxvY2stPm1fcE5leHRCbG9jazsNCi0gICAgICAgIGlmIChwTmV4dEJsb2NrID09IE5VTEwgfHwgcE5leHRCbG9jayA+IHBCbG9jaykgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBQcmV2QmxvY2sgIT0gJm1fQXZhaWxIZWFkICYmIChGWF9MUEJZVEUpcE5leHRCbG9jayA9PSAoRlhfTFBCWVRFKShwUHJldkJsb2NrICsgMSkgKyBwUHJldkJsb2NrLT5tX25CbG9ja1NpemUpIHsNCi0gICAgICAgICAgICBtX25BdmFpbFNpemUgKz0gc2l6ZW9mKENGWE1FTV9CbG9jayk7DQotICAgICAgICAgICAgcFByZXZCbG9jay0+bV9uQmxvY2tTaXplICs9IHBOZXh0QmxvY2stPm1fbkJsb2NrU2l6ZSArIHNpemVvZihDRlhNRU1fQmxvY2spOw0KLSAgICAgICAgICAgIHBQcmV2QmxvY2stPm1fcE5leHRCbG9jayA9IHBOZXh0QmxvY2stPm1fcE5leHRCbG9jazsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcFByZXZQcmV2ID0gcFByZXZCbG9jazsNCi0gICAgICAgICAgICBwUHJldkJsb2NrID0gcE5leHRCbG9jazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAocE5leHRCbG9jaykgew0KLSAgICAgICAgQ0ZYTUVNX0Jsb2NrKiBwQ3VyQmxvY2sgPSBwTmV4dEJsb2NrLT5tX3BOZXh0QmxvY2s7DQotICAgICAgICB3aGlsZSAoKEZYX0xQQllURSlwQ3VyQmxvY2sgPT0gKEZYX0xQQllURSkocE5leHRCbG9jayArIDEpICsgcE5leHRCbG9jay0+bV9uQmxvY2tTaXplKSB7DQotICAgICAgICAgICAgbV9uQXZhaWxTaXplICs9IHNpemVvZihDRlhNRU1fQmxvY2spOw0KLSAgICAgICAgICAgIHBOZXh0QmxvY2stPm1fbkJsb2NrU2l6ZSArPSBwQ3VyQmxvY2stPm1fbkJsb2NrU2l6ZSArIHNpemVvZihDRlhNRU1fQmxvY2spOw0KLSAgICAgICAgICAgIHBDdXJCbG9jayA9IHBDdXJCbG9jay0+bV9wTmV4dEJsb2NrOw0KLSAgICAgICAgICAgIHBOZXh0QmxvY2stPm1fcE5leHRCbG9jayA9IHBDdXJCbG9jazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBzaXplX3Qgc2l6ZSA9IDA7DQotICAgIEZYX0RXT1JEIGR3RmxhZ3MgPSAwOw0KLSAgICBpZiAocFByZXZCbG9jayAhPSAmbV9BdmFpbEhlYWQgJiYgKEZYX0xQQllURSlwQmxvY2sgPT0gKEZYX0xQQllURSkocFByZXZCbG9jayArIDEpICsgcFByZXZCbG9jay0+bV9uQmxvY2tTaXplKSB7DQotICAgICAgICBzaXplICs9IHBQcmV2QmxvY2stPm1fbkJsb2NrU2l6ZSArIG9sZFNpemUgKyBzaXplb2YoQ0ZYTUVNX0Jsb2NrKTsNCi0gICAgICAgIGR3RmxhZ3MgfD0gMHgxMDsNCi0gICAgfQ0KLSAgICBpZiAocE5leHRCbG9jayAmJiAoRlhfTFBCWVRFKXBOZXh0QmxvY2sgPT0gKEZYX0xQQllURSlwICsgb2xkU2l6ZSkgew0KLSAgICAgICAgc2l6ZSArPSBwTmV4dEJsb2NrLT5tX25CbG9ja1NpemUgKyBzaXplb2YoQ0ZYTUVNX0Jsb2NrKTsNCi0gICAgICAgIGR3RmxhZ3MgfD0gMHgwMTsNCi0gICAgfQ0KLSAgICBpZiAoc2l6ZSA+PSBuZXdTaXplKSB7DQotICAgICAgICBtX25BdmFpbFNpemUgKz0gcEJsb2NrLT5tX25CbG9ja1NpemU7DQotICAgICAgICBDRlhNRU1fQmxvY2sqIHBDdXJCbG9jayA9IHBCbG9jazsNCi0gICAgICAgIGlmIChkd0ZsYWdzICYgMHgxMCkgew0KLSAgICAgICAgICAgIHBDdXJCbG9jayA9IHBQcmV2QmxvY2s7DQotICAgICAgICAgICAgbV9uQXZhaWxTaXplICs9IHNpemVvZihDRlhNRU1fQmxvY2spOw0KLSAgICAgICAgICAgIHBDdXJCbG9jay0+bV9uQmxvY2tTaXplICs9IHBCbG9jay0+bV9uQmxvY2tTaXplICsgc2l6ZW9mKENGWE1FTV9CbG9jayk7DQotICAgICAgICAgICAgcFByZXZCbG9jayA9IHBQcmV2UHJldjsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChkd0ZsYWdzICYgMHgwMSkgew0KLSAgICAgICAgICAgIG1fbkF2YWlsU2l6ZSArPSBzaXplb2YoQ0ZYTUVNX0Jsb2NrKTsNCi0gICAgICAgICAgICBwQ3VyQmxvY2stPm1fbkJsb2NrU2l6ZSArPSBwTmV4dEJsb2NrLT5tX25CbG9ja1NpemUgKyBzaXplb2YoQ0ZYTUVNX0Jsb2NrKTsNCi0gICAgICAgICAgICBwQ3VyQmxvY2stPm1fcE5leHRCbG9jayA9IHBOZXh0QmxvY2stPm1fcE5leHRCbG9jazsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwQ3VyQmxvY2sgIT0gcEJsb2NrKSB7DQotICAgICAgICAgICAgRlhTWVNfbWVtbW92ZTMyKChGWF9MUFZPSUQpKHBDdXJCbG9jayArIDEpLCBwLCBvbGRTaXplKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBBbGxvYyhwUHJldkJsb2NrLCBwQ3VyQmxvY2ssIG5ld1NpemUsIG9sZG5ld1NpemUpOw0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi12b2lkIENGWE1FTV9QYWdlOjpGcmVlKEZYX0xQVk9JRCBwKQ0KLXsNCi0gICAgRlhTWVNfYXNzZXJ0KHAgPiAoRlhfTFBWT0lEKXRoaXMgJiYgcCA8IChGWF9MUFZPSUQpbV9wTGltaXRQb3MpOw0KLSAgICBDRlhNRU1fQmxvY2sgKnBQcmV2QmxvY2sgPSAmbV9BdmFpbEhlYWQ7DQotICAgIENGWE1FTV9CbG9jayAqcE5leHRCbG9jazsNCi0gICAgQ0ZYTUVNX0Jsb2NrICpwQmxvY2sgPSAoQ0ZYTUVNX0Jsb2NrKilwIC0gMTsNCi0gICAgbV9uQXZhaWxTaXplICs9IHBCbG9jay0+bV9uQmxvY2tTaXplOw0KLSAgICB3aGlsZSAoVFJVRSkgew0KLSAgICAgICAgcE5leHRCbG9jayA9IHBQcmV2QmxvY2stPm1fcE5leHRCbG9jazsNCi0gICAgICAgIGlmIChwTmV4dEJsb2NrID09IE5VTEwgfHwgcE5leHRCbG9jayA+IHBCbG9jaykgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBQcmV2QmxvY2sgIT0gJm1fQXZhaWxIZWFkICYmIChGWF9MUEJZVEUpcE5leHRCbG9jayA9PSAoRlhfTFBCWVRFKShwUHJldkJsb2NrICsgMSkgKyBwUHJldkJsb2NrLT5tX25CbG9ja1NpemUpIHsNCi0gICAgICAgICAgICBtX25BdmFpbFNpemUgKz0gc2l6ZW9mKENGWE1FTV9CbG9jayk7DQotICAgICAgICAgICAgcFByZXZCbG9jay0+bV9uQmxvY2tTaXplICs9IHBOZXh0QmxvY2stPm1fbkJsb2NrU2l6ZSArIHNpemVvZihDRlhNRU1fQmxvY2spOw0KLSAgICAgICAgICAgIHBQcmV2QmxvY2stPm1fcE5leHRCbG9jayA9IHBOZXh0QmxvY2stPm1fcE5leHRCbG9jazsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcFByZXZCbG9jayA9IHBOZXh0QmxvY2s7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgd2hpbGUgKChGWF9MUEJZVEUpcE5leHRCbG9jayA9PSAoRlhfTFBCWVRFKShwQmxvY2sgKyAxKSArIHBCbG9jay0+bV9uQmxvY2tTaXplKSB7DQotICAgICAgICBtX25BdmFpbFNpemUgKz0gc2l6ZW9mKENGWE1FTV9CbG9jayk7DQotICAgICAgICBwQmxvY2stPm1fbkJsb2NrU2l6ZSArPSBwTmV4dEJsb2NrLT5tX25CbG9ja1NpemUgKyBzaXplb2YoQ0ZYTUVNX0Jsb2NrKTsNCi0gICAgICAgIHBOZXh0QmxvY2sgPSBwTmV4dEJsb2NrLT5tX3BOZXh0QmxvY2s7DQotICAgIH0NCi0gICAgcEJsb2NrLT5tX3BOZXh0QmxvY2sgPSBwTmV4dEJsb2NrOw0KLSAgICBpZiAocFByZXZCbG9jayAhPSAmbV9BdmFpbEhlYWQgJiYgKEZYX0xQQllURSlwQmxvY2sgPT0gKEZYX0xQQllURSkocFByZXZCbG9jayArIDEpICsgcFByZXZCbG9jay0+bV9uQmxvY2tTaXplKSB7DQotICAgICAgICBtX25BdmFpbFNpemUgKz0gc2l6ZW9mKENGWE1FTV9CbG9jayk7DQotICAgICAgICBwUHJldkJsb2NrLT5tX25CbG9ja1NpemUgKz0gcEJsb2NrLT5tX25CbG9ja1NpemUgKyBzaXplb2YoQ0ZYTUVNX0Jsb2NrKTsNCi0gICAgICAgIHBQcmV2QmxvY2stPm1fcE5leHRCbG9jayA9IHBCbG9jay0+bV9wTmV4dEJsb2NrOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgRlhTWVNfYXNzZXJ0KHBQcmV2QmxvY2sgIT0gcEJsb2NrKTsNCi0gICAgICAgIHBQcmV2QmxvY2stPm1fcE5leHRCbG9jayA9IHBCbG9jazsNCi0gICAgfQ0KLX0NCi12b2lkIENGWE1FTV9QYWdlczo6SW5pdGlhbGl6ZShGWF9MUEJZVEUgcFN0YXJ0LCBzaXplX3QgcGFnZVNpemUsIHNpemVfdCBwYWdlcykNCi17DQotICAgIG1fcFN0YXJ0UGFnZSA9IG1fcEN1clBhZ2UgPSAoQ0ZYTUVNX1BhZ2UqKXBTdGFydDsNCi0gICAgbV9uUGFnZVNpemUgPSBwYWdlU2l6ZTsNCi0gICAgZm9yIChzaXplX3QgbiA9IDA7IG4gPCBwYWdlczsgbisrKSB7DQotICAgICAgICAoKENGWE1FTV9QYWdlKilwU3RhcnQpLT5Jbml0aWFsaXplKHBhZ2VTaXplKTsNCi0gICAgICAgIHBTdGFydCArPSBwYWdlU2l6ZTsNCi0gICAgfQ0KLSAgICBtX3BMaW1pdFBvcyA9IChDRlhNRU1fUGFnZSopcFN0YXJ0Ow0KLX0NCi1GWF9CT09MIENGWE1FTV9QYWdlczo6SXNFbXB0eSgpIGNvbnN0DQotew0KLSAgICBpZiAobV9wU3RhcnRQYWdlID49IG1fcExpbWl0UG9zKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBGWF9MUEJZVEUgcFBhZ2UgPSAoRlhfTFBCWVRFKW1fcFN0YXJ0UGFnZTsNCi0gICAgd2hpbGUgKHBQYWdlIDwgKEZYX0xQQllURSltX3BMaW1pdFBvcykgew0KLSAgICAgICAgaWYgKCEoKENGWE1FTV9QYWdlKilwUGFnZSktPklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIHBQYWdlICs9IG1fblBhZ2VTaXplOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9MUFZPSUQgQ0ZYTUVNX1BhZ2VzOjpBbGxvYyhzaXplX3Qgc2l6ZSkNCi17DQotICAgIENGWE1FTV9QYWdlICpwQ3VyUGFnZSA9IG1fcEN1clBhZ2U7DQotICAgIGRvIHsNCi0gICAgICAgIEZYX0xQVk9JRCBwID0gbV9wQ3VyUGFnZS0+QWxsb2Moc2l6ZSk7DQotICAgICAgICBpZiAocCkgew0KLSAgICAgICAgICAgIHJldHVybiBwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wQ3VyUGFnZSA9IChDRlhNRU1fUGFnZSopKChGWF9MUEJZVEUpbV9wQ3VyUGFnZSArIG1fblBhZ2VTaXplKTsNCi0gICAgICAgIGlmIChtX3BDdXJQYWdlID09IG1fcExpbWl0UG9zKSB7DQotICAgICAgICAgICAgbV9wQ3VyUGFnZSA9IG1fcFN0YXJ0UGFnZTsNCi0gICAgICAgIH0NCi0gICAgfSB3aGlsZSAobV9wQ3VyUGFnZSAhPSBwQ3VyUGFnZSk7DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1GWF9MUFZPSUQgQ0ZYTUVNX1BhZ2VzOjpSZWFsbG9jKEZYX0xQVk9JRCBwLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpDQotew0KLSAgICBGWFNZU19hc3NlcnQgKHAgPiAoRlhfTFBWT0lEKW1fcFN0YXJ0UGFnZSAmJiBwIDwgKEZYX0xQVk9JRCltX3BMaW1pdFBvcyk7DQotICAgIENGWE1FTV9QYWdlKiBwUGFnZSA9IChDRlhNRU1fUGFnZSopKChGWF9MUEJZVEUpbV9wU3RhcnRQYWdlICsgKChGWF9MUEJZVEUpcCAtIChGWF9MUEJZVEUpbV9wU3RhcnRQYWdlKSAvIG1fblBhZ2VTaXplICogbV9uUGFnZVNpemUpOw0KLSAgICByZXR1cm4gcFBhZ2UtPlJlYWxsb2MocCwgb2xkU2l6ZSwgbmV3U2l6ZSk7DQotfQ0KLXZvaWQgQ0ZYTUVNX1BhZ2VzOjpGcmVlKEZYX0xQVk9JRCBwKQ0KLXsNCi0gICAgRlhTWVNfYXNzZXJ0IChwID4gKEZYX0xQVk9JRCltX3BTdGFydFBhZ2UgJiYgcCA8IChGWF9MUFZPSUQpbV9wTGltaXRQb3MpOw0KLSAgICBDRlhNRU1fUGFnZSogcFBhZ2UgPSAoQ0ZYTUVNX1BhZ2UqKSgoRlhfTFBCWVRFKW1fcFN0YXJ0UGFnZSArICgoRlhfTFBCWVRFKXAgLSAoRlhfTFBCWVRFKW1fcFN0YXJ0UGFnZSkgLyBtX25QYWdlU2l6ZSAqIG1fblBhZ2VTaXplKTsNCi0gICAgcFBhZ2UtPkZyZWUocCk7DQotfQ0KLXZvaWQgQ0ZYTUVNX1Bvb2w6OkluaXRpYWxpemUoY29uc3QgRlhfTUVNQ09ORklHKiBwTWVtQ29uZmlnLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHBhZ2VOdW04Qnl0ZXMsIHNpemVfdCBwYWdlTnVtMTZCeXRlcywgc2l6ZV90IHBhZ2VOdW0zMkJ5dGVzLCBzaXplX3QgcGFnZU51bU1pZCkNCi17DQotICAgIG1fcFByZXZQb29sID0gTlVMTDsNCi0gICAgbV9wTmV4dFBvb2wgPSBOVUxMOw0KLSAgICBtX2JBbG9uZSA9IEZBTFNFOw0KLSAgICBGWF9MUEJZVEUgcFBhZ2UgPSAoRlhfTFBCWVRFKXRoaXMgKyBzaXplb2YoQ0ZYTUVNX1Bvb2wpOw0KLSAgICBzaXplIC09IHNpemVvZihDRlhNRU1fUG9vbCk7DQotICAgIG1fOEJ5dGVzUGFnZXMuSW5pdGlhbGl6ZShwUGFnZSwgcGFnZU51bThCeXRlcyk7DQotICAgIHBQYWdlICs9IHBhZ2VOdW04Qnl0ZXMgKiBGWF9GSVhFRE1FTV9QQUdFU0laRTsNCi0gICAgc2l6ZSAtPSBwYWdlTnVtOEJ5dGVzICogRlhfRklYRURNRU1fUEFHRVNJWkU7DQotICAgIG1fMTZCeXRlc1BhZ2VzLkluaXRpYWxpemUocFBhZ2UsIHBhZ2VOdW0xNkJ5dGVzKTsNCi0gICAgcFBhZ2UgKz0gcGFnZU51bTE2Qnl0ZXMgKiBGWF9GSVhFRE1FTV9QQUdFU0laRTsNCi0gICAgc2l6ZSAtPSBwYWdlTnVtMTZCeXRlcyAqIEZYX0ZJWEVETUVNX1BBR0VTSVpFOw0KLSAgICBtXzMyQnl0ZXNQYWdlcy5Jbml0aWFsaXplKHBQYWdlLCBwYWdlTnVtMzJCeXRlcyk7DQotICAgIHBQYWdlICs9IHBhZ2VOdW0zMkJ5dGVzICogRlhfRklYRURNRU1fUEFHRVNJWkU7DQotICAgIHNpemUgLT0gcGFnZU51bTMyQnl0ZXMgKiBGWF9GSVhFRE1FTV9QQUdFU0laRTsNCi0gICAgbV9NaWRQYWdlcy5Jbml0aWFsaXplKHBQYWdlLCBwTWVtQ29uZmlnLT5uUGFnZVNpemVfTWlkICogRlhfRklYRURNRU1fUEFHRVNJWkUsIHBhZ2VOdW1NaWQpOw0KLSAgICBwUGFnZSArPSBwYWdlTnVtTWlkICogcE1lbUNvbmZpZy0+blBhZ2VTaXplX01pZCAqIEZYX0ZJWEVETUVNX1BBR0VTSVpFOw0KLSAgICBzaXplIC09IHBhZ2VOdW1NaWQgKiBwTWVtQ29uZmlnLT5uUGFnZVNpemVfTWlkICogRlhfRklYRURNRU1fUEFHRVNJWkU7DQotICAgIGlmIChzaXplIDwgRlhfRklYRURNRU1fTUlEQkxPQ0tTSVpFKSB7DQotICAgICAgICBtX3BMYXJnZVBhZ2UgPSBOVUxMOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wTGFyZ2VQYWdlID0gKENGWE1FTV9QYWdlKilwUGFnZTsNCi0gICAgICAgIG1fcExhcmdlUGFnZS0+SW5pdGlhbGl6ZShzaXplKTsNCi0gICAgfQ0KLSAgICBtX3BMaW1pdFBvcyA9IHBQYWdlICsgc2l6ZTsNCi19DQotRlhfQk9PTCBDRlhNRU1fUG9vbDo6SXNFbXB0eSgpIGNvbnN0DQotew0KLSAgICBpZiAoIW1fOEJ5dGVzUGFnZXMuSXNFbXB0eSgpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKCFtXzE2Qnl0ZXNQYWdlcy5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoIW1fMzJCeXRlc1BhZ2VzLklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmICghbV9NaWRQYWdlcy5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gIW1fcExhcmdlUGFnZSB8fCBtX3BMYXJnZVBhZ2UtPklzRW1wdHkoKTsNCi19DQotc2l6ZV90IENGWE1FTV9Qb29sOjpHZXRTaXplKEZYX0xQVk9JRCBwKSBjb25zdA0KLXsNCi0gICAgRlhTWVNfYXNzZXJ0KHAgPiAoRlhfTFBWT0lEKXRoaXMgJiYgcCA8IChGWF9MUFZPSUQpbV9wTGltaXRQb3MpOw0KLSAgICBpZiAocCA8IChGWF9MUFZPSUQpbV84Qnl0ZXNQYWdlcy5tX3BMaW1pdFBvcykgew0KLSAgICAgICAgcmV0dXJuIDg7DQotICAgIH0NCi0gICAgaWYgKHAgPCAoRlhfTFBWT0lEKW1fMTZCeXRlc1BhZ2VzLm1fcExpbWl0UG9zKSB7DQotICAgICAgICByZXR1cm4gMTY7DQotICAgIH0NCi0gICAgaWYgKHAgPCAoRlhfTFBWT0lEKW1fMzJCeXRlc1BhZ2VzLm1fcExpbWl0UG9zKSB7DQotICAgICAgICByZXR1cm4gMzI7DQotICAgIH0NCi0gICAgcmV0dXJuICgoQ0ZYTUVNX0Jsb2NrKilwIC0gMSktPm1fbkJsb2NrU2l6ZTsNCi19DQotRlhfTFBWT0lEIENGWE1FTV9Qb29sOjpSZWFsbG9jKEZYX0xQVk9JRCBwLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpDQotew0KLSAgICBGWFNZU19hc3NlcnQocCA+IChGWF9MUFZPSUQpdGhpcyAmJiBwIDwgKEZYX0xQVk9JRCltX3BMaW1pdFBvcyk7DQotICAgIGlmIChwID4gKEZYX0xQVk9JRCltXzMyQnl0ZXNQYWdlcy5tX3BMaW1pdFBvcykgew0KLSAgICAgICAgaWYgKHAgPCAoRlhfTFBWT0lEKW1fTWlkUGFnZXMubV9wTGltaXRQb3MpIHsNCi0gICAgICAgICAgICByZXR1cm4gbV9NaWRQYWdlcy5SZWFsbG9jKHAsIG9sZFNpemUsIG5ld1NpemUpOw0KLSAgICAgICAgfSBlbHNlIGlmIChtX3BMYXJnZVBhZ2UpIHsNCi0gICAgICAgICAgICByZXR1cm4gbV9wTGFyZ2VQYWdlLT5SZWFsbG9jKHAsIG9sZFNpemUsIG5ld1NpemUpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi12b2lkIENGWE1FTV9Qb29sOjpGcmVlKEZYX0xQVk9JRCBwKQ0KLXsNCi0gICAgRlhTWVNfYXNzZXJ0KHAgPiAoRlhfTFBWT0lEKXRoaXMgJiYgcCA8IChGWF9MUFZPSUQpbV9wTGltaXRQb3MpOw0KLSAgICBpZiAocCA8IChGWF9MUFZPSUQpbV8zMkJ5dGVzUGFnZXMubV9wTGltaXRQb3MpIHsNCi0gICAgICAgIGlmIChwIDwgKEZYX0xQVk9JRCltXzhCeXRlc1BhZ2VzLm1fcExpbWl0UG9zKSB7DQotICAgICAgICAgICAgbV84Qnl0ZXNQYWdlcy5GcmVlKHApOw0KLSAgICAgICAgfSBlbHNlIGlmIChwIDwgKEZYX0xQVk9JRCltXzE2Qnl0ZXNQYWdlcy5tX3BMaW1pdFBvcykgew0KLSAgICAgICAgICAgIG1fMTZCeXRlc1BhZ2VzLkZyZWUocCk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIG1fMzJCeXRlc1BhZ2VzLkZyZWUocCk7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm47DQotICAgIH0gZWxzZSBpZiAocCA8IChGWF9MUFZPSUQpbV9NaWRQYWdlcy5tX3BMaW1pdFBvcykgew0KLSAgICAgICAgbV9NaWRQYWdlcy5GcmVlKHApOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wTGFyZ2VQYWdlLT5GcmVlKHApOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0ZYTUVNX0ZpeGVkTWdyOjpJbml0aWFsaXplKHNpemVfdCBzaXplKQ0KLXsNCi0gICAgbV9NZW1Db25maWcgPSBnX01lbUNvbmZpZzsNCi0gICAgRlhTWVNfbWVtc2V0MzIoJm1fU3lzdGVtTWdyLCAwLCBzaXplb2YgbV9TeXN0ZW1NZ3IpOw0KLSAgICBtX1N5c3RlbU1nci5BbGxvYyA9IEZpeGVkQWxsb2M7DQotICAgIG1fU3lzdGVtTWdyLkFsbG9jRGVidWcgPSBGaXhlZEFsbG9jRGVidWc7DQotICAgIG1fU3lzdGVtTWdyLkZyZWUgPSBGaXhlZEZyZWU7DQotICAgIG1fU3lzdGVtTWdyLlJlYWxsb2MgPSBGaXhlZFJlYWxsb2M7DQotICAgIG1fU3lzdGVtTWdyLlJlYWxsb2NEZWJ1ZyA9IEZpeGVkUmVhbGxvY0RlYnVnOw0KLSAgICBtX1N5c3RlbU1nci5Db2xsZWN0QWxsID0gRml4ZWRDb2xsZWN0QWxsOw0KLSAgICBtX1N5c3RlbU1nci5QdXJnZSA9IEZpeGVkUHVyZ2U7DQotICAgIG1fU3lzdGVtTWdyLnVzZXIgPSB0aGlzOw0KLSAgICBzaXplIC09IHNpemVvZihDRlhNRU1fRml4ZWRNZ3IpOw0KLSAgICBzaXplX3Qgbk1pZFBhZ2VzID0gMDsNCi0gICAgaWYgKG1fTWVtQ29uZmlnLm5QYWdlU2l6ZV9NaWQpIHsNCi0gICAgICAgIG5NaWRQYWdlcyA9IChzaXplIC0gKG1fTWVtQ29uZmlnLm5QYWdlTnVtX0luaXQ4ICsgbV9NZW1Db25maWcublBhZ2VOdW1fSW5pdDE2ICsgbV9NZW1Db25maWcublBhZ2VOdW1fSW5pdDMyKSAqIEZYX0ZJWEVETUVNX1BBR0VTSVpFKSAvIChtX01lbUNvbmZpZy5uUGFnZVNpemVfTWlkICogRlhfRklYRURNRU1fUEFHRVNJWkUpOw0KLSAgICAgICAgaWYgKG5NaWRQYWdlcyA+IG1fTWVtQ29uZmlnLm5QYWdlTnVtX0luaXRNaWQpIHsNCi0gICAgICAgICAgICBuTWlkUGFnZXMgPSBtX01lbUNvbmZpZy5uUGFnZU51bV9Jbml0TWlkOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fRmlyc3RQb29sLkluaXRpYWxpemUoJm1fTWVtQ29uZmlnLCBzaXplLCBtX01lbUNvbmZpZy5uUGFnZU51bV9Jbml0OCwgbV9NZW1Db25maWcublBhZ2VOdW1fSW5pdDE2LCBtX01lbUNvbmZpZy5uUGFnZU51bV9Jbml0MzIsIG5NaWRQYWdlcyk7DQotfQ0KLUZYX0xQVk9JRCBDRlhNRU1fRml4ZWRNZ3I6OkFsbG9jMTYoQ0ZYTUVNX1Bvb2wgKipwcDMyUG9vbCwgc2l6ZV90IHNpemUpDQotew0KLSAgICBDRlhNRU1fUG9vbCAqcFBvb2wgPSAmbV9GaXJzdFBvb2w7DQotICAgIGRvIHsNCi0gICAgICAgIENGWE1FTV8xNkJ5dGVzUGFnZXMgJnBhZ2VzID0gcFBvb2wtPm1fMTZCeXRlc1BhZ2VzOw0KLSAgICAgICAgaWYgKHBhZ2VzLkhhc0ZyZWVCbG9jaygpKSB7DQotICAgICAgICAgICAgcmV0dXJuIHBhZ2VzLkFsbG9jKHNpemUpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBwMzJQb29sICYmIHBQb29sLT5tXzMyQnl0ZXNQYWdlcy5IYXNGcmVlQmxvY2soKSkgew0KLSAgICAgICAgICAgICpwcDMyUG9vbCA9IHBQb29sOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcFBvb2wgPSBwUG9vbC0+bV9wTmV4dFBvb2w7DQotICAgIH0gd2hpbGUocFBvb2wpOw0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotRlhfTFBWT0lEIENGWE1FTV9GaXhlZE1ncjo6QWxsb2MzMihzaXplX3Qgc2l6ZSkNCi17DQotICAgIGlmIChzaXplIDw9IDgpIHsNCi0gICAgICAgIENGWE1FTV84Qnl0ZXNQYWdlcyAmcGFnZXMgPSBtX0ZpcnN0UG9vbC5tXzhCeXRlc1BhZ2VzOw0KLSAgICAgICAgaWYgKHBhZ2VzLkhhc0ZyZWVCbG9jaygpKSB7DQotICAgICAgICAgICAgcmV0dXJuIHBhZ2VzLkFsbG9jKHNpemUpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIENGWE1FTV9Qb29sICpwMzJCeXRlc1Bvb2w7DQotICAgIGlmIChzaXplIDw9IDE2KSB7DQotICAgICAgICBwMzJCeXRlc1Bvb2wgPSBOVUxMOw0KLSAgICAgICAgRlhfTFBWT0lEIHAgPSBBbGxvYzE2KCZwMzJCeXRlc1Bvb2wsIHNpemUpOw0KLSAgICAgICAgaWYgKHApIHsNCi0gICAgICAgICAgICByZXR1cm4gcDsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHAzMkJ5dGVzUG9vbCA9ICZtX0ZpcnN0UG9vbDsNCi0gICAgfQ0KLSAgICB3aGlsZSAocDMyQnl0ZXNQb29sKSB7DQotICAgICAgICBDRlhNRU1fMzJCeXRlc1BhZ2VzICZwYWdlcyA9IHAzMkJ5dGVzUG9vbC0+bV8zMkJ5dGVzUGFnZXM7DQotICAgICAgICBpZiAocGFnZXMuSGFzRnJlZUJsb2NrKCkpIHsNCi0gICAgICAgICAgICByZXR1cm4gcGFnZXMuQWxsb2Moc2l6ZSk7DQotICAgICAgICB9DQotICAgICAgICBwMzJCeXRlc1Bvb2wgPSBwMzJCeXRlc1Bvb2wtPm1fcE5leHRQb29sOw0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1GWF9MUFZPSUQgQ0ZYTUVNX0ZpeGVkTWdyOjpBbGxvY1NtYWxsKHNpemVfdCBzaXplKQ0KLXsNCi0gICAgRlhfTFBWT0lEIHAgPSBBbGxvYzMyKHNpemUpOw0KLSAgICBpZiAocCkgew0KLSAgICAgICAgcmV0dXJuIHA7DQotICAgIH0NCi0gICAgaWYgKCFtX3BFeHRlbmRlcikgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgc2l6ZV90IHJlcXVpcmVkU2l6ZSA9IChtX01lbUNvbmZpZy5uUGFnZU51bV9Nb3JlMTYgKyBtX01lbUNvbmZpZy5uUGFnZU51bV9Nb3JlMzIpICogRlhfRklYRURNRU1fUEFHRVNJWkU7DQotICAgIGlmICghcmVxdWlyZWRTaXplKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDRlhNRU1fUG9vbCAqcE5ld1Bvb2wgPSBOVUxMOw0KLSAgICByZXF1aXJlZFNpemUgKz0gc2l6ZW9mKENGWE1FTV9Qb29sKTsNCi0gICAgc2l6ZV90IG5ld1NpemUgPSByZXF1aXJlZFNpemU7DQotICAgIGlmICghbV9wRXh0ZW5kZXItPk1vcmUobV9wRXh0ZW5kZXIsIG5ld1NpemUsICh2b2lkKiopJnBOZXdQb29sLCAmbmV3U2l6ZSkpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHNpemVfdCBuTWlkUGFnZXMgPSAwOw0KLSAgICBpZiAobV9NZW1Db25maWcublBhZ2VTaXplX01pZCkgew0KLSAgICAgICAgbk1pZFBhZ2VzID0gKG5ld1NpemUgLSByZXF1aXJlZFNpemUpIC8gKG1fTWVtQ29uZmlnLm5QYWdlU2l6ZV9NaWQgKiBGWF9GSVhFRE1FTV9QQUdFU0laRSk7DQotICAgICAgICBpZiAobk1pZFBhZ2VzID4gbV9NZW1Db25maWcublBhZ2VOdW1fTW9yZU1pZCkgew0KLSAgICAgICAgICAgIG5NaWRQYWdlcyA9IG1fTWVtQ29uZmlnLm5QYWdlTnVtX01vcmVNaWQ7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcE5ld1Bvb2wtPkluaXRpYWxpemUoJm1fTWVtQ29uZmlnLCBuZXdTaXplLCAwLCBtX01lbUNvbmZpZy5uUGFnZU51bV9Nb3JlMTYsIG1fTWVtQ29uZmlnLm5QYWdlTnVtX01vcmUzMiwgbk1pZFBhZ2VzKTsNCi0gICAgcE5ld1Bvb2wtPm1fcFByZXZQb29sID0gJm1fRmlyc3RQb29sOw0KLSAgICBDRlhNRU1fUG9vbCAqcFBvb2wgPSBtX0ZpcnN0UG9vbC5tX3BOZXh0UG9vbDsNCi0gICAgcE5ld1Bvb2wtPm1fcE5leHRQb29sID0gcFBvb2w7DQotICAgIGlmIChwUG9vbCkgew0KLSAgICAgICAgcFBvb2wtPm1fcFByZXZQb29sID0gcE5ld1Bvb2w7DQotICAgIH0NCi0gICAgbV9GaXJzdFBvb2wubV9wTmV4dFBvb2wgPSBwTmV3UG9vbDsNCi0gICAgcmV0dXJuIEFsbG9jMzIoc2l6ZSk7DQotfQ0KLUZYX0xQVk9JRCBDRlhNRU1fRml4ZWRNZ3I6OkFsbG9jTWlkKHNpemVfdCBzaXplKQ0KLXsNCi0gICAgQ0ZYTUVNX1Bvb2wgKnBQb29sID0gJm1fRmlyc3RQb29sOw0KLSAgICBkbyB7DQotICAgICAgICBDRlhNRU1fUGFnZXMgJnBhZ2VzID0gcFBvb2wtPm1fTWlkUGFnZXM7DQotICAgICAgICBpZiAocGFnZXMubV9wTGltaXRQb3MgPiBwYWdlcy5tX3BTdGFydFBhZ2UpIHsNCi0gICAgICAgICAgICBGWF9MUFZPSUQgcCA9IHBhZ2VzLkFsbG9jKHNpemUpOw0KLSAgICAgICAgICAgIGlmIChwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBwOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHBQb29sID0gcFBvb2wtPm1fcE5leHRQb29sOw0KLSAgICB9IHdoaWxlKHBQb29sKTsNCi0gICAgaWYgKCFtX3BFeHRlbmRlcikgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgc2l6ZV90IG5ld1NpemUgPSBtX01lbUNvbmZpZy5uUGFnZVNpemVfTWlkICogRlhfRklYRURNRU1fUEFHRVNJWkUgKiBtX01lbUNvbmZpZy5uUGFnZU51bV9Nb3JlTWlkOw0KLSAgICBpZiAoIW5ld1NpemUpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENGWE1FTV9Qb29sICpwTmV3UG9vbCA9IE5VTEw7DQotICAgIG5ld1NpemUgKz0gc2l6ZW9mKENGWE1FTV9Qb29sKTsNCi0gICAgaWYgKCFtX3BFeHRlbmRlci0+TW9yZShtX3BFeHRlbmRlciwgbmV3U2l6ZSwgKHZvaWQqKikmcE5ld1Bvb2wsICZuZXdTaXplKSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgc2l6ZV90IG5NaWRQYWdlcyA9IChuZXdTaXplIC0gc2l6ZW9mKENGWE1FTV9Qb29sKSkgLyAobV9NZW1Db25maWcublBhZ2VTaXplX01pZCAqIEZYX0ZJWEVETUVNX1BBR0VTSVpFKTsNCi0gICAgaWYgKG5NaWRQYWdlcyA+IG1fTWVtQ29uZmlnLm5QYWdlTnVtX01vcmVNaWQpIHsNCi0gICAgICAgIG5NaWRQYWdlcyA9IG1fTWVtQ29uZmlnLm5QYWdlTnVtX01vcmVNaWQ7DQotICAgIH0NCi0gICAgcE5ld1Bvb2wtPkluaXRpYWxpemUoJm1fTWVtQ29uZmlnLCBuZXdTaXplLCAwLCAwLCAwLCBuTWlkUGFnZXMpOw0KLSAgICBwTmV3UG9vbC0+bV9wUHJldlBvb2wgPSAmbV9GaXJzdFBvb2w7DQotICAgIHBQb29sID0gbV9GaXJzdFBvb2wubV9wTmV4dFBvb2w7DQotICAgIHBOZXdQb29sLT5tX3BOZXh0UG9vbCA9IHBQb29sOw0KLSAgICBpZiAocFBvb2wpIHsNCi0gICAgICAgIHBQb29sLT5tX3BQcmV2UG9vbCA9IHBOZXdQb29sOw0KLSAgICB9DQotICAgIG1fRmlyc3RQb29sLm1fcE5leHRQb29sID0gcE5ld1Bvb2w7DQotICAgIHJldHVybiBwTmV3UG9vbC0+bV9NaWRQYWdlcy5BbGxvYyhzaXplKTsNCi19DQotRlhfTFBWT0lEIENGWE1FTV9GaXhlZE1ncjo6QWxsb2NMYXJnZShzaXplX3Qgc2l6ZSkNCi17DQotICAgIENGWE1FTV9Qb29sICpwUG9vbCA9ICZtX0ZpcnN0UG9vbDsNCi0gICAgZG8gew0KLSAgICAgICAgaWYgKCFwUG9vbC0+bV9iQWxvbmUgJiYgcFBvb2wtPm1fcExhcmdlUGFnZSkgew0KLSAgICAgICAgICAgIEZYX0xQVk9JRCBwID0gcFBvb2wtPm1fcExhcmdlUGFnZS0+QWxsb2Moc2l6ZSk7DQotICAgICAgICAgICAgaWYgKHApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHA7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcFBvb2wgPSBwUG9vbC0+bV9wTmV4dFBvb2w7DQotICAgIH0gd2hpbGUocFBvb2wpOw0KLSAgICBpZiAoIW1fcEV4dGVuZGVyIHx8ICFtX01lbUNvbmZpZy5uUGFnZVNpemVfTGFyZ2UpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENGWE1FTV9Qb29sICpwTmV3UG9vbCA9IE5VTEw7DQotI2lmIF9GWF9XT1JEU0laRV8gPT0gX0ZYX1c2NF8NCi0gICAgc2l6ZV90IG5ld1NpemUgPSAoKHNpemUgKyAzMSkgLyAzMiAqIDMyICsgc2l6ZW9mKENGWE1FTV9Qb29sKSArIHNpemVvZihDRlhNRU1fUGFnZSkgKyBzaXplb2YoQ0ZYTUVNX0Jsb2NrKSArIDQwOTUpIC8gNDA5NiAqIDQwOTY7DQotI2Vsc2UNCi0gICAgc2l6ZV90IG5ld1NpemUgPSAoc2l6ZSArIDcpIC8gOCAqIDggKyBzaXplb2YoQ0ZYTUVNX1Bvb2wpICsgc2l6ZW9mKENGWE1FTV9QYWdlKSArIHNpemVvZihDRlhNRU1fQmxvY2spOw0KLSNlbmRpZg0KLSAgICBpZiAobmV3U2l6ZSA8IG1fTWVtQ29uZmlnLm5QYWdlU2l6ZV9MYXJnZSAqIEZYX0ZJWEVETUVNX1BBR0VTSVpFKSB7DQotICAgICAgICBuZXdTaXplID0gbV9NZW1Db25maWcublBhZ2VTaXplX0xhcmdlICogRlhfRklYRURNRU1fUEFHRVNJWkU7DQotICAgIH0NCi0gICAgaWYgKCFtX3BFeHRlbmRlci0+TW9yZShtX3BFeHRlbmRlciwgbmV3U2l6ZSwgKHZvaWQqKikmcE5ld1Bvb2wsICZuZXdTaXplKSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcE5ld1Bvb2wtPkluaXRpYWxpemUoJm1fTWVtQ29uZmlnLCBuZXdTaXplLCAwLCAwLCAwLCAwKTsNCi0gICAgcE5ld1Bvb2wtPm1fYkFsb25lID0gc2l6ZSA+PSBtX01lbUNvbmZpZy5uUGFnZVNpemVfQWxvbmUgKiBGWF9GSVhFRE1FTV9QQUdFU0laRTsNCi0gICAgcE5ld1Bvb2wtPm1fcFByZXZQb29sID0gJm1fRmlyc3RQb29sOw0KLSAgICBwUG9vbCA9IG1fRmlyc3RQb29sLm1fcE5leHRQb29sOw0KLSAgICBwTmV3UG9vbC0+bV9wTmV4dFBvb2wgPSBwUG9vbDsNCi0gICAgaWYgKHBQb29sKSB7DQotICAgICAgICBwUG9vbC0+bV9wUHJldlBvb2wgPSBwTmV3UG9vbDsNCi0gICAgfQ0KLSAgICBtX0ZpcnN0UG9vbC5tX3BOZXh0UG9vbCA9IHBOZXdQb29sOw0KLSAgICByZXR1cm4gcE5ld1Bvb2wtPm1fcExhcmdlUGFnZS0+QWxsb2Moc2l6ZSk7DQotfQ0KLXNpemVfdCBDRlhNRU1fRml4ZWRNZ3I6OkdldFNpemUoRlhfTFBWT0lEIHApIGNvbnN0DQotew0KLSAgICBjb25zdCBDRlhNRU1fUG9vbCAqcEZpbmQgPSAmbV9GaXJzdFBvb2w7DQotICAgIGRvIHsNCi0gICAgICAgIGlmIChwID4gKEZYX0xQVk9JRClwRmluZCAmJiBwIDwgcEZpbmQtPm1fcExpbWl0UG9zKSB7DQotICAgICAgICAgICAgcmV0dXJuIHBGaW5kLT5HZXRTaXplKHApOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcEZpbmQgPSBwRmluZC0+bV9wTmV4dFBvb2w7DQotICAgIH0gd2hpbGUgKHBGaW5kKTsNCi0gICAgcmV0dXJuIDA7DQotfQ0KLUZYX0xQVk9JRCBDRlhNRU1fRml4ZWRNZ3I6OkFsbG9jKHNpemVfdCBzaXplKQ0KLXsNCi0gICAgRlhfTFBWT0lEIHA7DQotICAgIGlmIChzaXplIDw9IDMyKSB7DQotICAgICAgICBwID0gQWxsb2NTbWFsbChzaXplKTsNCi0gICAgICAgIGlmIChwKSB7DQotICAgICAgICAgICAgcmV0dXJuIHA7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKHNpemUgPD0gRlhfRklYRURNRU1fTUlEQkxPQ0tTSVpFKSB7DQotICAgICAgICBwID0gQWxsb2NNaWQoc2l6ZSk7DQotICAgICAgICBpZiAocCkgew0KLSAgICAgICAgICAgIHJldHVybiBwOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHAgPSBBbGxvY0xhcmdlKHNpemUpOw0KLSAgICByZXR1cm4gcDsNCi19DQotRlhfTFBWT0lEIENGWE1FTV9GaXhlZE1ncjo6UmVhbGxvY1NtYWxsKENGWE1FTV9Qb29sKiBwUG9vbCwgRlhfTFBWT0lEIHAsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkNCi17DQotICAgIEZYX0xQVk9JRCBucCA9IEFsbG9jU21hbGwobmV3U2l6ZSk7DQotICAgIGlmICghbnApIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIEZYU1lTX21lbWNweTMyKG5wLCBwLCBvbGRTaXplKTsNCi0gICAgcFBvb2wtPkZyZWUocCk7DQotICAgIHJldHVybiBucDsNCi19DQotRlhfTFBWT0lEIENGWE1FTV9GaXhlZE1ncjo6UmVhbGxvYyhGWF9MUFZPSUQgcCwgc2l6ZV90IG5ld1NpemUpDQotew0KLSAgICBpZiAoIXApIHsNCi0gICAgICAgIHJldHVybiBBbGxvYyhuZXdTaXplKTsNCi0gICAgfQ0KLSAgICBzaXplX3Qgb2xkU2l6ZSA9IDA7DQotICAgIENGWE1FTV9Qb29sICpwRmluZCA9ICZtX0ZpcnN0UG9vbDsNCi0gICAgZG8gew0KLSAgICAgICAgaWYgKHAgPiAoRlhfTFBWT0lEKXBGaW5kICYmIHAgPCBwRmluZC0+bV9wTGltaXRQb3MpIHsNCi0gICAgICAgICAgICBvbGRTaXplID0gcEZpbmQtPkdldFNpemUocCk7DQotICAgICAgICAgICAgaWYgKG9sZFNpemUgPj0gbmV3U2l6ZSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gcDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBwRmluZCA9IHBGaW5kLT5tX3BOZXh0UG9vbDsNCi0gICAgfSB3aGlsZSAocEZpbmQpOw0KLSAgICBpZiAoIW9sZFNpemUgfHwgIXBGaW5kKSB7DQotICAgICAgICByZXR1cm4gQWxsb2MobmV3U2l6ZSk7DQotICAgIH0NCi0gICAgRlhfTFBWT0lEIG5wID0gTlVMTDsNCi0gICAgaWYgKG5ld1NpemUgPD0gMzIpIHsNCi0gICAgICAgIG5wID0gUmVhbGxvY1NtYWxsKHBGaW5kLCBwLCBvbGRTaXplLCBuZXdTaXplKTsNCi0gICAgICAgIGlmIChucCkgew0KLSAgICAgICAgICAgIHJldHVybiBucDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAobmV3U2l6ZSA8PSBGWF9GSVhFRE1FTV9NSURCTE9DS1NJWkUpIHsNCi0gICAgICAgIG5wID0gcEZpbmQtPlJlYWxsb2MocCwgb2xkU2l6ZSwgbmV3U2l6ZSk7DQotICAgICAgICBpZiAobnApIHsNCi0gICAgICAgICAgICByZXR1cm4gbnA7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbnAgPSBBbGxvYyhuZXdTaXplKTsNCi0gICAgaWYgKG5wKSB7DQotICAgICAgICBGWFNZU19tZW1jcHkzMihucCwgcCwgb2xkU2l6ZSk7DQotICAgICAgICBwRmluZC0+RnJlZShwKTsNCi0gICAgfQ0KLSAgICBpZiAocEZpbmQtPm1fYkFsb25lICYmIHBGaW5kLT5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIEZyZWVQb29sKHBGaW5kKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbnA7DQotfQ0KLXZvaWQgQ0ZYTUVNX0ZpeGVkTWdyOjpGcmVlKEZYX0xQVk9JRCBwKQ0KLXsNCi0gICAgQ0ZYTUVNX1Bvb2wgKnBGaW5kID0gJm1fRmlyc3RQb29sOw0KLSAgICBkbyB7DQotICAgICAgICBpZiAocCA+IChGWF9MUFZPSUQpcEZpbmQgJiYgcCA8IHBGaW5kLT5tX3BMaW1pdFBvcykgew0KLSAgICAgICAgICAgIHBGaW5kLT5GcmVlKHApOw0KLSAgICAgICAgICAgIGlmIChwRmluZC0+bV9iQWxvbmUgJiYgcEZpbmQtPklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgICAgICBGcmVlUG9vbChwRmluZCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIHBGaW5kID0gcEZpbmQtPm1fcE5leHRQb29sOw0KLSAgICB9IHdoaWxlIChwRmluZCk7DQotfQ0KLXZvaWQgQ0ZYTUVNX0ZpeGVkTWdyOjpGcmVlUG9vbChDRlhNRU1fUG9vbCogcFBvb2wpDQotew0KLSAgICBGWFNZU19hc3NlcnQocFBvb2wtPm1fYkFsb25lICYmIHBQb29sLT5Jc0VtcHR5KCkpOw0KLSAgICBGWFNZU19hc3NlcnQobV9wRXh0ZW5kZXIgIT0gTlVMTCk7DQotICAgIENGWE1FTV9Qb29sKiBwUHJldlBvb2wgPSBwUG9vbC0+bV9wUHJldlBvb2w7DQotICAgIENGWE1FTV9Qb29sKiBwTmV4dFBvb2wgPSBwUG9vbC0+bV9wTmV4dFBvb2w7DQotICAgIGlmIChwUHJldlBvb2wpIHsNCi0gICAgICAgIHBQcmV2UG9vbC0+bV9wTmV4dFBvb2wgPSBwTmV4dFBvb2w7DQotICAgIH0NCi0gICAgaWYgKHBOZXh0UG9vbCkgew0KLSAgICAgICAgcE5leHRQb29sLT5tX3BQcmV2UG9vbCA9IHBQcmV2UG9vbDsNCi0gICAgfQ0KLSAgICBtX3BFeHRlbmRlci0+RnJlZShtX3BFeHRlbmRlciwgcFBvb2wpOw0KLX0NCi12b2lkIENGWE1FTV9GaXhlZE1ncjo6RnJlZUFsbCgpDQotew0KLSAgICBpZiAoIW1fcEV4dGVuZGVyKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ0ZYTUVNX1Bvb2wqIHBQb29sID0gbV9GaXJzdFBvb2wubV9wTmV4dFBvb2w7DQotICAgIHdoaWxlIChwUG9vbCkgew0KLSAgICAgICAgQ0ZYTUVNX1Bvb2wqIHBQcmV2UG9vbCA9IHBQb29sOw0KLSAgICAgICAgcFBvb2wgPSBwUG9vbC0+bV9wTmV4dFBvb2w7DQotICAgICAgICBtX3BFeHRlbmRlci0+RnJlZShtX3BFeHRlbmRlciwgcFByZXZQb29sKTsNCi0gICAgfQ0KLSAgICBtX0ZpcnN0UG9vbC5tX3BOZXh0UG9vbCA9IE5VTEw7DQotfQ0KLXZvaWQgQ0ZYTUVNX0ZpeGVkTWdyOjpQdXJnZSgpDQotew0KLSAgICBpZiAoIW1fcEV4dGVuZGVyKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ0ZYTUVNX1Bvb2wqIHBQb29sID0gbV9GaXJzdFBvb2wubV9wTmV4dFBvb2w7DQotICAgIHdoaWxlIChwUG9vbCkgew0KLSAgICAgICAgQ0ZYTUVNX1Bvb2wqIHBOZXh0UG9vbCA9IHBQb29sLT5tX3BOZXh0UG9vbDsNCi0gICAgICAgIGlmIChwUG9vbC0+SXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgQ0ZYTUVNX1Bvb2wqIHBQcmV2UG9vbCA9IHBQb29sLT5tX3BQcmV2UG9vbDsNCi0gICAgICAgICAgICBwUHJldlBvb2wtPm1fcE5leHRQb29sID0gcE5leHRQb29sOw0KLSAgICAgICAgICAgIGlmIChwTmV4dFBvb2wpIHsNCi0gICAgICAgICAgICAgICAgcE5leHRQb29sLT5tX3BQcmV2UG9vbCA9IHBQcmV2UG9vbDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9wRXh0ZW5kZXItPkZyZWUobV9wRXh0ZW5kZXIsIHBQb29sKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHBQb29sID0gcE5leHRQb29sOw0KLSAgICB9DQotfQ0KLWV4dGVybiBjb25zdCBGWF9CWVRFIE9uZUxlYWRQb3NbMjU2XSA9IHsNCi0gICAgOCwgNywgNiwgNiwgNSwgNSwgNSwgNSwgNCwgNCwgNCwgNCwgNCwgNCwgNCwgNCwNCi0gICAgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywNCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwNCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwNCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwNCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwNCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwNCi0gICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwNCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwNCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwNCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwNCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwNCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwNCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwNCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwNCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwNCi19Ow0KLWV4dGVybiBjb25zdCBGWF9CWVRFIFplcm9MZWFkUG9zWzI1Nl0gPSB7DQotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsDQotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsDQotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsDQotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsDQotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsDQotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsDQotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsDQotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsDQotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsDQotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsDQotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsDQotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsDQotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsDQotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsDQotICAgIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsDQotICAgIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIDYsIDYsIDcsIDgsDQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGNydC9meF9leHQuaCIKKyNpbmNsdWRlICJtZW1faW50LmgiCisjaWZkZWYgX0ZQREZBUElfTUlOSV8KK3N0YXRpYyBGWF9NRU1DT05GSUcgZ19NZW1Db25maWcgPSB7CisgICAgMSwKKyAgICA1LAorICAgIDgsCisgICAgNCwKKyAgICAxMiwKKyAgICA4LAorICAgIDIsCisgICAgNCwKKyAgICAzMiwKKyAgICA2NCwKK307CisjZWxzZQorc3RhdGljIEZYX01FTUNPTkZJRyBnX01lbUNvbmZpZyA9IHsKKyAgICAxLAorICAgIDgsCisgICAgMjQsCisgICAgOCwKKyAgICAzMiwKKyAgICAxNiwKKyAgICA0LAorICAgIDgsCisgICAgMTI4LAorICAgIDY0LAorfTsKKyNlbmRpZgordm9pZCBGWE1FTV9TZXRDb25maWcoY29uc3QgRlhfTUVNQ09ORklHKiBtZW1Db25maWcpCit7CisgICAgZ19NZW1Db25maWcgPSAqbWVtQ29uZmlnOworfQorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorc3RhdGljIHZvaWQqIEZpeGVkQWxsb2MoRlhNRU1fU3lzdGVtTWdyKiBwTWdyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQoreworICAgIHJldHVybiAoKENGWE1FTV9GaXhlZE1nciopcE1nci0+dXNlciktPkFsbG9jKHNpemUpOworfQorc3RhdGljIHZvaWQqIEZpeGVkQWxsb2NEZWJ1ZyhGWE1FTV9TeXN0ZW1NZ3IqIHBNZ3IsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIEZYX0xQQ1NUUiBmaWxlLCBpbnQgbGluZSkKK3sKKyAgICByZXR1cm4gKChDRlhNRU1fRml4ZWRNZ3IqKXBNZ3ItPnVzZXIpLT5BbGxvYyhzaXplKTsKK30KK3N0YXRpYyB2b2lkKiBGaXhlZFJlYWxsb2MoRlhNRU1fU3lzdGVtTWdyKiBwTWdyLCB2b2lkKiBwb2ludGVyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQoreworICAgIHJldHVybiAoKENGWE1FTV9GaXhlZE1nciopcE1nci0+dXNlciktPlJlYWxsb2MocG9pbnRlciwgc2l6ZSk7Cit9CitzdGF0aWMgdm9pZCogRml4ZWRSZWFsbG9jRGVidWcoRlhNRU1fU3lzdGVtTWdyKiBwTWdyLCB2b2lkKiBwb2ludGVyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBGWF9MUENTVFIgZmlsZSwgaW50IGxpbmUpCit7CisgICAgcmV0dXJuICgoQ0ZYTUVNX0ZpeGVkTWdyKilwTWdyLT51c2VyKS0+UmVhbGxvYyhwb2ludGVyLCBzaXplKTsKK30KK3N0YXRpYyB2b2lkICBGaXhlZEZyZWUoRlhNRU1fU3lzdGVtTWdyKiBwTWdyLCB2b2lkKiBwb2ludGVyLCBpbnQgZmxhZ3MpCit7CisgICAgKChDRlhNRU1fRml4ZWRNZ3IqKXBNZ3ItPnVzZXIpLT5GcmVlKHBvaW50ZXIpOworfQorc3RhdGljIHZvaWQgIEZpeGVkUHVyZ2UoRlhNRU1fU3lzdGVtTWdyKiBwTWdyKQoreworICAgICgoQ0ZYTUVNX0ZpeGVkTWdyKilwTWdyLT51c2VyKS0+UHVyZ2UoKTsKK30KK3N0YXRpYyB2b2lkIEZpeGVkQ29sbGVjdEFsbChGWE1FTV9TeXN0ZW1NZ3IqIHBNZ3IpCit7CisgICAgKChDRlhNRU1fRml4ZWRNZ3IqKXBNZ3ItPnVzZXIpLT5GcmVlQWxsKCk7Cit9CisjZGVmaW5lIEZJWEVETUVNX01JTklNVU1TSVpFCSgxMDI0ICogMTAyNCAqIDgpCitGWE1FTV9Gb3hpdE1nciogRlhNRU1fQ3JlYXRlTWVtb3J5TWdyKHNpemVfdCBzaXplLCBGWF9CT09MIGV4dGVuc2libGUpCit7CisgICAgaWYgKHNpemUgPCBGSVhFRE1FTV9NSU5JTVVNU0laRSkgeworICAgICAgICBzaXplID0gRklYRURNRU1fTUlOSU1VTVNJWkU7CisgICAgfQorICAgIEZYX0xQVk9JRCBwTWVtb3J5ID0gbWFsbG9jKHNpemUpOworICAgIGlmICghcE1lbW9yeSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0ZpeGVkTWdyX1Byb3h5KiBwUHJveHkgPSAoQ0ZpeGVkTWdyX1Byb3h5KilwTWVtb3J5OworICAgIHNpemVfdCBvZmZzZXRTaXplID0gKHNpemVvZihDRml4ZWRNZ3JfUHJveHkpICsgMTUpIC8gMTYgKiAxNjsKKyAgICBGWE1FTV9Gb3hpdE1nciogcEZveGl0TWdyID0gcFByb3h5LT5Jbml0aWFsaXplKChGWF9MUEJZVEUpcFByb3h5ICsgb2Zmc2V0U2l6ZSwgc2l6ZSAtIG9mZnNldFNpemUsIGV4dGVuc2libGUpOworICAgIGlmICghcEZveGl0TWdyKSB7CisgICAgICAgIGZyZWUocE1lbW9yeSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBnX3BEZWZGb3hpdE1nciA9IChDRlhfTWVtb3J5TWdyKilwRm94aXRNZ3I7CisgICAgZ19wRGVmRm94aXRNZ3ItPm1fcEV4dGVybmFsTWVtb3J5ID0gcE1lbW9yeTsKKyAgICByZXR1cm4gcEZveGl0TWdyOworfQorRlhNRU1fRm94aXRNZ3IqIEZYTUVNX0NyZWF0ZUZpeGVkTWdyKHZvaWQqIHBNZW1vcnksIHNpemVfdCBzaXplLCBGWE1FTV9TeXN0ZW1NZ3IyKiBwU3lzdGVtTWdyKQoreworICAgIGlmIChwTWVtb3J5ID09IE5VTEwgfHwgc2l6ZSA8IEZYX0ZJWEVETUVNX1BBR0VTSVpFKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoIXBTeXN0ZW1NZ3IgJiYgc2l6ZSA+PSBGSVhFRE1FTV9QUk9YWVNJWkVfMSkgeworICAgICAgICBDRml4ZWRNZ3JfUHJveHkqIHBQcm94eSA9IChDRml4ZWRNZ3JfUHJveHkqKXBNZW1vcnk7CisgICAgICAgIHNpemVfdCBvZmZzZXRTaXplID0gKHNpemVvZihDRml4ZWRNZ3JfUHJveHkpICsgMTUpIC8gMTYgKiAxNjsKKyAgICAgICAgcmV0dXJuIHBQcm94eS0+SW5pdGlhbGl6ZSgoRlhfTFBCWVRFKXBQcm94eSArIG9mZnNldFNpemUsIHNpemUgLSBvZmZzZXRTaXplLCBGQUxTRSk7CisgICAgfQorICAgIENGWE1FTV9GaXhlZE1nciogcEhlYWRlciA9IChDRlhNRU1fRml4ZWRNZ3IqKXBNZW1vcnk7CisgICAgcEhlYWRlci0+SW5pdGlhbGl6ZShzaXplKTsKKyAgICBwSGVhZGVyLT5tX3BFeHRlbmRlciA9IHBTeXN0ZW1NZ3I7CisgICAgQ0ZYX01lbW9yeU1nciogcCA9IChDRlhfTWVtb3J5TWdyKilwSGVhZGVyLT5BbGxvYyhzaXplb2YoQ0ZYX01lbW9yeU1ncikpOworICAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHAtPkluaXQoJnBIZWFkZXItPm1fU3lzdGVtTWdyKTsKKyAgICByZXR1cm4gKEZYTUVNX0ZveGl0TWdyKilwOworfQorc2l6ZV90IEZYTUVNX0dldEJsb2NrU2l6ZUluRml4ZWRNZ3IoRlhNRU1fRm94aXRNZ3IqIHBGb3hpdE1nciwgdm9pZCogcHRyKQoreworICAgIHJldHVybiBwRm94aXRNZ3IgPyAoKENGWE1FTV9GaXhlZE1nciopKChDRlhfTWVtb3J5TWdyKilwRm94aXRNZ3IpLT5tX3BTeXN0ZW1NZ3ItPnVzZXIpLT5HZXRTaXplKHB0cikgOiAwOworfQorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK2NvbnN0IEZYX01FTUNPTkZJRyBnX1Byb3h5TWdyX01lbUNvbmZpZ3NbNl0gPSB7CisgICAgezEsICAgICAgMiwgICAgICA0LCAgICAgIDAsICAgICAgMiwgICAgICAyLCAgIDIsICAgICAgIDAsICAgICAgIDAsICAgICAwfSwKKyAgICB7MSwgICAgICA0LCAgICAgIDgsICAgICAgMCwgICAgICAyLCAgICAgIDIsICAgMiwgICAgICAgMCwgICAgICAgMCwgICAgIDB9LAorICAgIHsxLCAgICAgIDQsICAgICAgMTYsICAgICA0LCAgICAgIDgsICAgICAgOCwgICAyLCAgICAgICAxLCAgICAgICAxNiwgICAgMTZ9LAorICAgIHsxLCAgICAgIDgsICAgICAgMjQsICAgICA0LCAgICAgIDEyLCAgICAgMTIsICA0LCAgICAgICAyLCAgICAgICAzMiwgICAgMTZ9LAorICAgIHsxLCAgICAgIDgsICAgICAgMjQsICAgICA4LCAgICAgIDE2LCAgICAgMTYsICA0LCAgICAgICAyLCAgICAgICA2NCwgICAgMzJ9LAorICAgIHsxLCAgICAgIDgsICAgICAgMjQsICAgICA4LCAgICAgIDI0LCAgICAgMzIsICA0LCAgICAgICAyLCAgICAgICAxMjgsICAgNjR9LAorfTsKK2NvbnN0IEZYX01FTUNPTkZJRyoJRml4ZWRNZ3JfR2V0Q29uZmlnKHNpemVfdCBuU2l6ZSkKK3sKKyAgICBpbnQgaW5kZXggPSA1OworICAgIGlmIChuU2l6ZSA8PSBGSVhFRE1FTV9QUk9YWVNJWkVfMCkgeworICAgICAgICBpbmRleCA9IDA7CisgICAgfSBlbHNlIGlmIChuU2l6ZSA8PSBGSVhFRE1FTV9QUk9YWVNJWkVfMSkgeworICAgICAgICBpbmRleCA9IDE7CisgICAgfSBlbHNlIGlmIChuU2l6ZSA8PSBGSVhFRE1FTV9QUk9YWVNJWkVfMikgeworICAgICAgICBpbmRleCA9IDI7CisgICAgfSBlbHNlIGlmIChuU2l6ZSA8PSBGSVhFRE1FTV9QUk9YWVNJWkVfMykgeworICAgICAgICBpbmRleCA9IDM7CisgICAgfSBlbHNlIGlmIChuU2l6ZSA8PSBGSVhFRE1FTV9QUk9YWVNJWkVfNCkgeworICAgICAgICBpbmRleCA9IDQ7CisgICAgfQorICAgIHJldHVybiAmZ19Qcm94eU1ncl9NZW1Db25maWdzW2luZGV4XTsKK30KK0ZYTUVNX0ZveGl0TWdyKiBDRml4ZWRNZ3JfUHJveHk6OkluaXRpYWxpemUoRlhfTFBWT0lEIHBCdWZmZXIsIHNpemVfdCBuU2l6ZSwgRlhfQk9PTCBiRXh0ZW5zaWJsZSkKK3sKKyAgICBGWFNZU19hc3NlcnQocEJ1ZmZlciAhPSBOVUxMICYmIG5TaXplID49IEZJWEVETUVNX1BST1hZU0laRV8xIC0gc2l6ZW9mKENGaXhlZE1ncl9Qcm94eSkpOworICAgIEZYTUVNX1NldENvbmZpZyhGaXhlZE1ncl9HZXRDb25maWcoblNpemUpKTsKKyAgICBtX1N5c3RlbU1nci5Nb3JlID0gJkNGaXhlZE1ncl9Qcm94eTo6Q29tbW9uX01vcmU7CisgICAgbV9TeXN0ZW1NZ3IuRnJlZSA9ICZDRml4ZWRNZ3JfUHJveHk6OkNvbW1vbl9GcmVlOworICAgIG1fcEZpeGVkUGFnZSA9IChDRlhNRU1fUGFnZSopKChGWF9MUEJZVEUpcEJ1ZmZlciArIEZJWEVETUVNX1BST1hZU0laRV8wKTsKKyAgICBtX3BGaXhlZFBhZ2UtPkluaXRpYWxpemUoblNpemUgLSBGSVhFRE1FTV9QUk9YWVNJWkVfMCk7CisgICAgbV9wQnVmZmVyID0gcEJ1ZmZlcjsKKyAgICBtX25TaXplID0gblNpemU7CisgICAgbV9iRXh0ZW5zaWJsZSA9IGJFeHRlbnNpYmxlOworICAgIHJldHVybiBGWE1FTV9DcmVhdGVGaXhlZE1ncihwQnVmZmVyLCBGSVhFRE1FTV9QUk9YWVNJWkVfMCwgJm1fU3lzdGVtTWdyKTsKK30KK0ZYX0JPT0wgQ0ZpeGVkTWdyX1Byb3h5OjpDb21tb25fTW9yZShGWE1FTV9TeXN0ZW1NZ3IyKiBwTWdyLCBzaXplX3QgYWxsb2Nfc2l6ZSwgdm9pZCoqIG5ld19tZW1vcnksIHNpemVfdCogbmV3X3NpemUpCit7CisgICAgQ0ZpeGVkTWdyX1Byb3h5KiBwUHJveHlNZ3IgPSAoQ0ZpeGVkTWdyX1Byb3h5KilwTWdyOworICAgIEZYU1lTX2Fzc2VydChwUHJveHlNZ3IgIT0gTlVMTCAmJiBwUHJveHlNZ3ItPm1fcEZpeGVkUGFnZSAhPSBOVUxMKTsKKyAgICAqbmV3X3NpemUgPSBhbGxvY19zaXplOworICAgICpuZXdfbWVtb3J5ID0gcFByb3h5TWdyLT5tX3BGaXhlZFBhZ2UtPkFsbG9jKGFsbG9jX3NpemUpOworICAgIGlmICgqbmV3X21lbW9yeSA9PSBOVUxMICYmIHBQcm94eU1nci0+bV9iRXh0ZW5zaWJsZSkgeworICAgICAgICAqbmV3X21lbW9yeSA9IG1hbGxvYyhhbGxvY19zaXplKTsKKyAgICB9CisgICAgcmV0dXJuICpuZXdfbWVtb3J5ICE9IE5VTEw7Cit9Cit2b2lkIENGaXhlZE1ncl9Qcm94eTo6Q29tbW9uX0ZyZWUoRlhNRU1fU3lzdGVtTWdyMiogcE1nciwgdm9pZCogbWVtb3J5KQoreworICAgIENGaXhlZE1ncl9Qcm94eSogcFByb3h5TWdyID0gKENGaXhlZE1ncl9Qcm94eSopcE1ncjsKKyAgICBGWFNZU19hc3NlcnQocFByb3h5TWdyICE9IE5VTEwgJiYgcFByb3h5TWdyLT5tX3BGaXhlZFBhZ2UgIT0gTlVMTCk7CisgICAgaWYgKG1lbW9yeSA+IHBQcm94eU1nci0+bV9wQnVmZmVyICYmIG1lbW9yeSA8IChGWF9MUEJZVEUpcFByb3h5TWdyLT5tX3BCdWZmZXIgKyBwUHJveHlNZ3ItPm1fblNpemUpIHsKKyAgICAgICAgcFByb3h5TWdyLT5tX3BGaXhlZFBhZ2UtPkZyZWUobWVtb3J5KTsKKyAgICB9IGVsc2UgaWYgKHBQcm94eU1nci0+bV9iRXh0ZW5zaWJsZSkgeworICAgICAgICBmcmVlKG1lbW9yeSk7CisgICAgfQorfQordm9pZCBDRlhNRU1fUGFnZTo6SW5pdGlhbGl6ZShzaXplX3Qgc2l6ZSkKK3sKKyAgICBDRlhNRU1fQmxvY2sgKnBGaXJzdEJsb2NrID0gKENGWE1FTV9CbG9jayopKHRoaXMgKyAxKTsKKyAgICBtX25BdmFpbFNpemUgPSBzaXplIC0gc2l6ZW9mKENGWE1FTV9QYWdlKSAtIHNpemVvZihDRlhNRU1fQmxvY2spOworICAgIHBGaXJzdEJsb2NrLT5tX25CbG9ja1NpemUgPSBtX25BdmFpbFNpemU7CisgICAgcEZpcnN0QmxvY2stPm1fcE5leHRCbG9jayA9IE5VTEw7CisgICAgbV9BdmFpbEhlYWQubV9uQmxvY2tTaXplID0gbV9uQXZhaWxTaXplOworICAgIG1fQXZhaWxIZWFkLm1fcE5leHRCbG9jayA9IHBGaXJzdEJsb2NrOworICAgIG1fcExpbWl0UG9zID0gKENGWE1FTV9CbG9jayopKChGWF9MUEJZVEUpdGhpcyArIHNpemUpOworfQorRlhfTFBWT0lEIENGWE1FTV9QYWdlOjpBbGxvYyhDRlhNRU1fQmxvY2sqIHBQcmV2QmxvY2ssIENGWE1FTV9CbG9jayogcE5leHRCbG9jaywgc2l6ZV90IHNpemUsIHNpemVfdCBvbGRzaXplKQoreworICAgIHNpemVfdCBnYXAgPSBwTmV4dEJsb2NrLT5tX25CbG9ja1NpemUgLSBzaXplOworICAgIGlmIChnYXAgPD0gNjQgKyBzaXplb2YoQ0ZYTUVNX0Jsb2NrKSkgeworICAgICAgICBwUHJldkJsb2NrLT5tX3BOZXh0QmxvY2sgPSBwTmV4dEJsb2NrLT5tX3BOZXh0QmxvY2s7CisgICAgICAgIG1fbkF2YWlsU2l6ZSAtPSBwTmV4dEJsb2NrLT5tX25CbG9ja1NpemU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9uQXZhaWxTaXplIC09IHNpemUgKyBzaXplb2YoQ0ZYTUVNX0Jsb2NrKTsKKyAgICAgICAgcE5leHRCbG9jay0+bV9uQmxvY2tTaXplID0gc2l6ZTsKKyAgICAgICAgQ0ZYTUVNX0Jsb2NrICpwTmV3QmxvY2sgPSAoQ0ZYTUVNX0Jsb2NrKikoKEZYX0xQQllURSkocE5leHRCbG9jayArIDEpICsgc2l6ZSk7CisgICAgICAgIHBOZXdCbG9jay0+bV9uQmxvY2tTaXplID0gZ2FwIC0gc2l6ZW9mKENGWE1FTV9CbG9jayk7CisgICAgICAgIHBOZXdCbG9jay0+bV9wTmV4dEJsb2NrID0gcE5leHRCbG9jay0+bV9wTmV4dEJsb2NrOworICAgICAgICBwUHJldkJsb2NrLT5tX3BOZXh0QmxvY2sgPSBwTmV3QmxvY2s7CisgICAgfQorICAgIHJldHVybiAoRlhfTFBWT0lEKShwTmV4dEJsb2NrICsgMSk7Cit9CitGWF9MUFZPSUQgQ0ZYTUVNX1BhZ2U6OkFsbG9jKHNpemVfdCBzaXplKQoreworICAgIHNpemVfdCBvbGRzaXplID0gc2l6ZTsKKyNpZiBfRlhfV09SRFNJWkVfID09IF9GWF9XNjRfCisgICAgc2l6ZSA9IChzaXplICsgMzEpIC8gMzIgKiAzMjsKKyNlbHNlCisgICAgc2l6ZSA9IChzaXplICsgNykgLyA4ICogODsKKyNlbmRpZgorICAgIGlmIChtX25BdmFpbFNpemUgPCBzaXplKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDRlhNRU1fQmxvY2sgKnBOZXh0QmxvY2s7CisgICAgQ0ZYTUVNX0Jsb2NrICpwUHJldkJsb2NrID0gJm1fQXZhaWxIZWFkOworICAgIHdoaWxlIChUUlVFKSB7CisgICAgICAgIHBOZXh0QmxvY2sgPSBwUHJldkJsb2NrLT5tX3BOZXh0QmxvY2s7CisgICAgICAgIGlmICghcE5leHRCbG9jaykgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBOZXh0QmxvY2stPm1fbkJsb2NrU2l6ZSA+PSBzaXplKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBwUHJldkJsb2NrID0gcE5leHRCbG9jazsKKyAgICB9CisgICAgcmV0dXJuIEFsbG9jKHBQcmV2QmxvY2ssIHBOZXh0QmxvY2ssIHNpemUsIG9sZHNpemUpOworfQorRlhfTFBWT0lEIENGWE1FTV9QYWdlOjpSZWFsbG9jKEZYX0xQVk9JRCBwLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgRlhTWVNfYXNzZXJ0KHAgPiAoRlhfTFBWT0lEKXRoaXMgJiYgcCA8IChGWF9MUFZPSUQpbV9wTGltaXRQb3MpOworICAgIHNpemVfdCBvbGRuZXdTaXplID0gbmV3U2l6ZTsKKyNpZiBfRlhfV09SRFNJWkVfID09IF9GWF9XNjRfCisgICAgbmV3U2l6ZSA9IChuZXdTaXplICsgMzEpIC8gMzIgKiAzMjsKKyNlbHNlCisgICAgbmV3U2l6ZSA9IChuZXdTaXplICsgNykgLyA4ICogODsKKyNlbmRpZgorICAgIENGWE1FTV9CbG9jayAqcFByZXZCbG9jayA9ICZtX0F2YWlsSGVhZDsKKyAgICBDRlhNRU1fQmxvY2sgKnBOZXh0QmxvY2ssICpwUHJldlByZXY7CisgICAgQ0ZYTUVNX0Jsb2NrICpwQmxvY2sgPSAoQ0ZYTUVNX0Jsb2NrKilwIC0gMTsKKyAgICBwUHJldlByZXYgPSBOVUxMOworICAgIHdoaWxlIChUUlVFKSB7CisgICAgICAgIHBOZXh0QmxvY2sgPSBwUHJldkJsb2NrLT5tX3BOZXh0QmxvY2s7CisgICAgICAgIGlmIChwTmV4dEJsb2NrID09IE5VTEwgfHwgcE5leHRCbG9jayA+IHBCbG9jaykgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBQcmV2QmxvY2sgIT0gJm1fQXZhaWxIZWFkICYmIChGWF9MUEJZVEUpcE5leHRCbG9jayA9PSAoRlhfTFBCWVRFKShwUHJldkJsb2NrICsgMSkgKyBwUHJldkJsb2NrLT5tX25CbG9ja1NpemUpIHsKKyAgICAgICAgICAgIG1fbkF2YWlsU2l6ZSArPSBzaXplb2YoQ0ZYTUVNX0Jsb2NrKTsKKyAgICAgICAgICAgIHBQcmV2QmxvY2stPm1fbkJsb2NrU2l6ZSArPSBwTmV4dEJsb2NrLT5tX25CbG9ja1NpemUgKyBzaXplb2YoQ0ZYTUVNX0Jsb2NrKTsKKyAgICAgICAgICAgIHBQcmV2QmxvY2stPm1fcE5leHRCbG9jayA9IHBOZXh0QmxvY2stPm1fcE5leHRCbG9jazsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBQcmV2UHJldiA9IHBQcmV2QmxvY2s7CisgICAgICAgICAgICBwUHJldkJsb2NrID0gcE5leHRCbG9jazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocE5leHRCbG9jaykgeworICAgICAgICBDRlhNRU1fQmxvY2sqIHBDdXJCbG9jayA9IHBOZXh0QmxvY2stPm1fcE5leHRCbG9jazsKKyAgICAgICAgd2hpbGUgKChGWF9MUEJZVEUpcEN1ckJsb2NrID09IChGWF9MUEJZVEUpKHBOZXh0QmxvY2sgKyAxKSArIHBOZXh0QmxvY2stPm1fbkJsb2NrU2l6ZSkgeworICAgICAgICAgICAgbV9uQXZhaWxTaXplICs9IHNpemVvZihDRlhNRU1fQmxvY2spOworICAgICAgICAgICAgcE5leHRCbG9jay0+bV9uQmxvY2tTaXplICs9IHBDdXJCbG9jay0+bV9uQmxvY2tTaXplICsgc2l6ZW9mKENGWE1FTV9CbG9jayk7CisgICAgICAgICAgICBwQ3VyQmxvY2sgPSBwQ3VyQmxvY2stPm1fcE5leHRCbG9jazsKKyAgICAgICAgICAgIHBOZXh0QmxvY2stPm1fcE5leHRCbG9jayA9IHBDdXJCbG9jazsKKyAgICAgICAgfQorICAgIH0KKyAgICBzaXplX3Qgc2l6ZSA9IDA7CisgICAgRlhfRFdPUkQgZHdGbGFncyA9IDA7CisgICAgaWYgKHBQcmV2QmxvY2sgIT0gJm1fQXZhaWxIZWFkICYmIChGWF9MUEJZVEUpcEJsb2NrID09IChGWF9MUEJZVEUpKHBQcmV2QmxvY2sgKyAxKSArIHBQcmV2QmxvY2stPm1fbkJsb2NrU2l6ZSkgeworICAgICAgICBzaXplICs9IHBQcmV2QmxvY2stPm1fbkJsb2NrU2l6ZSArIG9sZFNpemUgKyBzaXplb2YoQ0ZYTUVNX0Jsb2NrKTsKKyAgICAgICAgZHdGbGFncyB8PSAweDEwOworICAgIH0KKyAgICBpZiAocE5leHRCbG9jayAmJiAoRlhfTFBCWVRFKXBOZXh0QmxvY2sgPT0gKEZYX0xQQllURSlwICsgb2xkU2l6ZSkgeworICAgICAgICBzaXplICs9IHBOZXh0QmxvY2stPm1fbkJsb2NrU2l6ZSArIHNpemVvZihDRlhNRU1fQmxvY2spOworICAgICAgICBkd0ZsYWdzIHw9IDB4MDE7CisgICAgfQorICAgIGlmIChzaXplID49IG5ld1NpemUpIHsKKyAgICAgICAgbV9uQXZhaWxTaXplICs9IHBCbG9jay0+bV9uQmxvY2tTaXplOworICAgICAgICBDRlhNRU1fQmxvY2sqIHBDdXJCbG9jayA9IHBCbG9jazsKKyAgICAgICAgaWYgKGR3RmxhZ3MgJiAweDEwKSB7CisgICAgICAgICAgICBwQ3VyQmxvY2sgPSBwUHJldkJsb2NrOworICAgICAgICAgICAgbV9uQXZhaWxTaXplICs9IHNpemVvZihDRlhNRU1fQmxvY2spOworICAgICAgICAgICAgcEN1ckJsb2NrLT5tX25CbG9ja1NpemUgKz0gcEJsb2NrLT5tX25CbG9ja1NpemUgKyBzaXplb2YoQ0ZYTUVNX0Jsb2NrKTsKKyAgICAgICAgICAgIHBQcmV2QmxvY2sgPSBwUHJldlByZXY7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGR3RmxhZ3MgJiAweDAxKSB7CisgICAgICAgICAgICBtX25BdmFpbFNpemUgKz0gc2l6ZW9mKENGWE1FTV9CbG9jayk7CisgICAgICAgICAgICBwQ3VyQmxvY2stPm1fbkJsb2NrU2l6ZSArPSBwTmV4dEJsb2NrLT5tX25CbG9ja1NpemUgKyBzaXplb2YoQ0ZYTUVNX0Jsb2NrKTsKKyAgICAgICAgICAgIHBDdXJCbG9jay0+bV9wTmV4dEJsb2NrID0gcE5leHRCbG9jay0+bV9wTmV4dEJsb2NrOworICAgICAgICB9CisgICAgICAgIGlmIChwQ3VyQmxvY2sgIT0gcEJsb2NrKSB7CisgICAgICAgICAgICBGWFNZU19tZW1tb3ZlMzIoKEZYX0xQVk9JRCkocEN1ckJsb2NrICsgMSksIHAsIG9sZFNpemUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBBbGxvYyhwUHJldkJsb2NrLCBwQ3VyQmxvY2ssIG5ld1NpemUsIG9sZG5ld1NpemUpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK3ZvaWQgQ0ZYTUVNX1BhZ2U6OkZyZWUoRlhfTFBWT0lEIHApCit7CisgICAgRlhTWVNfYXNzZXJ0KHAgPiAoRlhfTFBWT0lEKXRoaXMgJiYgcCA8IChGWF9MUFZPSUQpbV9wTGltaXRQb3MpOworICAgIENGWE1FTV9CbG9jayAqcFByZXZCbG9jayA9ICZtX0F2YWlsSGVhZDsKKyAgICBDRlhNRU1fQmxvY2sgKnBOZXh0QmxvY2s7CisgICAgQ0ZYTUVNX0Jsb2NrICpwQmxvY2sgPSAoQ0ZYTUVNX0Jsb2NrKilwIC0gMTsKKyAgICBtX25BdmFpbFNpemUgKz0gcEJsb2NrLT5tX25CbG9ja1NpemU7CisgICAgd2hpbGUgKFRSVUUpIHsKKyAgICAgICAgcE5leHRCbG9jayA9IHBQcmV2QmxvY2stPm1fcE5leHRCbG9jazsKKyAgICAgICAgaWYgKHBOZXh0QmxvY2sgPT0gTlVMTCB8fCBwTmV4dEJsb2NrID4gcEJsb2NrKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAocFByZXZCbG9jayAhPSAmbV9BdmFpbEhlYWQgJiYgKEZYX0xQQllURSlwTmV4dEJsb2NrID09IChGWF9MUEJZVEUpKHBQcmV2QmxvY2sgKyAxKSArIHBQcmV2QmxvY2stPm1fbkJsb2NrU2l6ZSkgeworICAgICAgICAgICAgbV9uQXZhaWxTaXplICs9IHNpemVvZihDRlhNRU1fQmxvY2spOworICAgICAgICAgICAgcFByZXZCbG9jay0+bV9uQmxvY2tTaXplICs9IHBOZXh0QmxvY2stPm1fbkJsb2NrU2l6ZSArIHNpemVvZihDRlhNRU1fQmxvY2spOworICAgICAgICAgICAgcFByZXZCbG9jay0+bV9wTmV4dEJsb2NrID0gcE5leHRCbG9jay0+bV9wTmV4dEJsb2NrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcFByZXZCbG9jayA9IHBOZXh0QmxvY2s7CisgICAgICAgIH0KKyAgICB9CisgICAgd2hpbGUgKChGWF9MUEJZVEUpcE5leHRCbG9jayA9PSAoRlhfTFBCWVRFKShwQmxvY2sgKyAxKSArIHBCbG9jay0+bV9uQmxvY2tTaXplKSB7CisgICAgICAgIG1fbkF2YWlsU2l6ZSArPSBzaXplb2YoQ0ZYTUVNX0Jsb2NrKTsKKyAgICAgICAgcEJsb2NrLT5tX25CbG9ja1NpemUgKz0gcE5leHRCbG9jay0+bV9uQmxvY2tTaXplICsgc2l6ZW9mKENGWE1FTV9CbG9jayk7CisgICAgICAgIHBOZXh0QmxvY2sgPSBwTmV4dEJsb2NrLT5tX3BOZXh0QmxvY2s7CisgICAgfQorICAgIHBCbG9jay0+bV9wTmV4dEJsb2NrID0gcE5leHRCbG9jazsKKyAgICBpZiAocFByZXZCbG9jayAhPSAmbV9BdmFpbEhlYWQgJiYgKEZYX0xQQllURSlwQmxvY2sgPT0gKEZYX0xQQllURSkocFByZXZCbG9jayArIDEpICsgcFByZXZCbG9jay0+bV9uQmxvY2tTaXplKSB7CisgICAgICAgIG1fbkF2YWlsU2l6ZSArPSBzaXplb2YoQ0ZYTUVNX0Jsb2NrKTsKKyAgICAgICAgcFByZXZCbG9jay0+bV9uQmxvY2tTaXplICs9IHBCbG9jay0+bV9uQmxvY2tTaXplICsgc2l6ZW9mKENGWE1FTV9CbG9jayk7CisgICAgICAgIHBQcmV2QmxvY2stPm1fcE5leHRCbG9jayA9IHBCbG9jay0+bV9wTmV4dEJsb2NrOworICAgIH0gZWxzZSB7CisgICAgICAgIEZYU1lTX2Fzc2VydChwUHJldkJsb2NrICE9IHBCbG9jayk7CisgICAgICAgIHBQcmV2QmxvY2stPm1fcE5leHRCbG9jayA9IHBCbG9jazsKKyAgICB9Cit9Cit2b2lkIENGWE1FTV9QYWdlczo6SW5pdGlhbGl6ZShGWF9MUEJZVEUgcFN0YXJ0LCBzaXplX3QgcGFnZVNpemUsIHNpemVfdCBwYWdlcykKK3sKKyAgICBtX3BTdGFydFBhZ2UgPSBtX3BDdXJQYWdlID0gKENGWE1FTV9QYWdlKilwU3RhcnQ7CisgICAgbV9uUGFnZVNpemUgPSBwYWdlU2l6ZTsKKyAgICBmb3IgKHNpemVfdCBuID0gMDsgbiA8IHBhZ2VzOyBuKyspIHsKKyAgICAgICAgKChDRlhNRU1fUGFnZSopcFN0YXJ0KS0+SW5pdGlhbGl6ZShwYWdlU2l6ZSk7CisgICAgICAgIHBTdGFydCArPSBwYWdlU2l6ZTsKKyAgICB9CisgICAgbV9wTGltaXRQb3MgPSAoQ0ZYTUVNX1BhZ2UqKXBTdGFydDsKK30KK0ZYX0JPT0wgQ0ZYTUVNX1BhZ2VzOjpJc0VtcHR5KCkgY29uc3QKK3sKKyAgICBpZiAobV9wU3RhcnRQYWdlID49IG1fcExpbWl0UG9zKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBGWF9MUEJZVEUgcFBhZ2UgPSAoRlhfTFBCWVRFKW1fcFN0YXJ0UGFnZTsKKyAgICB3aGlsZSAocFBhZ2UgPCAoRlhfTFBCWVRFKW1fcExpbWl0UG9zKSB7CisgICAgICAgIGlmICghKChDRlhNRU1fUGFnZSopcFBhZ2UpLT5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBwUGFnZSArPSBtX25QYWdlU2l6ZTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9MUFZPSUQgQ0ZYTUVNX1BhZ2VzOjpBbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgICBDRlhNRU1fUGFnZSAqcEN1clBhZ2UgPSBtX3BDdXJQYWdlOworICAgIGRvIHsKKyAgICAgICAgRlhfTFBWT0lEIHAgPSBtX3BDdXJQYWdlLT5BbGxvYyhzaXplKTsKKyAgICAgICAgaWYgKHApIHsKKyAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICB9CisgICAgICAgIG1fcEN1clBhZ2UgPSAoQ0ZYTUVNX1BhZ2UqKSgoRlhfTFBCWVRFKW1fcEN1clBhZ2UgKyBtX25QYWdlU2l6ZSk7CisgICAgICAgIGlmIChtX3BDdXJQYWdlID09IG1fcExpbWl0UG9zKSB7CisgICAgICAgICAgICBtX3BDdXJQYWdlID0gbV9wU3RhcnRQYWdlOworICAgICAgICB9CisgICAgfSB3aGlsZSAobV9wQ3VyUGFnZSAhPSBwQ3VyUGFnZSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CitGWF9MUFZPSUQgQ0ZYTUVNX1BhZ2VzOjpSZWFsbG9jKEZYX0xQVk9JRCBwLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgRlhTWVNfYXNzZXJ0IChwID4gKEZYX0xQVk9JRCltX3BTdGFydFBhZ2UgJiYgcCA8IChGWF9MUFZPSUQpbV9wTGltaXRQb3MpOworICAgIENGWE1FTV9QYWdlKiBwUGFnZSA9IChDRlhNRU1fUGFnZSopKChGWF9MUEJZVEUpbV9wU3RhcnRQYWdlICsgKChGWF9MUEJZVEUpcCAtIChGWF9MUEJZVEUpbV9wU3RhcnRQYWdlKSAvIG1fblBhZ2VTaXplICogbV9uUGFnZVNpemUpOworICAgIHJldHVybiBwUGFnZS0+UmVhbGxvYyhwLCBvbGRTaXplLCBuZXdTaXplKTsKK30KK3ZvaWQgQ0ZYTUVNX1BhZ2VzOjpGcmVlKEZYX0xQVk9JRCBwKQoreworICAgIEZYU1lTX2Fzc2VydCAocCA+IChGWF9MUFZPSUQpbV9wU3RhcnRQYWdlICYmIHAgPCAoRlhfTFBWT0lEKW1fcExpbWl0UG9zKTsKKyAgICBDRlhNRU1fUGFnZSogcFBhZ2UgPSAoQ0ZYTUVNX1BhZ2UqKSgoRlhfTFBCWVRFKW1fcFN0YXJ0UGFnZSArICgoRlhfTFBCWVRFKXAgLSAoRlhfTFBCWVRFKW1fcFN0YXJ0UGFnZSkgLyBtX25QYWdlU2l6ZSAqIG1fblBhZ2VTaXplKTsKKyAgICBwUGFnZS0+RnJlZShwKTsKK30KK3ZvaWQgQ0ZYTUVNX1Bvb2w6OkluaXRpYWxpemUoY29uc3QgRlhfTUVNQ09ORklHKiBwTWVtQ29uZmlnLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHBhZ2VOdW04Qnl0ZXMsIHNpemVfdCBwYWdlTnVtMTZCeXRlcywgc2l6ZV90IHBhZ2VOdW0zMkJ5dGVzLCBzaXplX3QgcGFnZU51bU1pZCkKK3sKKyAgICBtX3BQcmV2UG9vbCA9IE5VTEw7CisgICAgbV9wTmV4dFBvb2wgPSBOVUxMOworICAgIG1fYkFsb25lID0gRkFMU0U7CisgICAgRlhfTFBCWVRFIHBQYWdlID0gKEZYX0xQQllURSl0aGlzICsgc2l6ZW9mKENGWE1FTV9Qb29sKTsKKyAgICBzaXplIC09IHNpemVvZihDRlhNRU1fUG9vbCk7CisgICAgbV84Qnl0ZXNQYWdlcy5Jbml0aWFsaXplKHBQYWdlLCBwYWdlTnVtOEJ5dGVzKTsKKyAgICBwUGFnZSArPSBwYWdlTnVtOEJ5dGVzICogRlhfRklYRURNRU1fUEFHRVNJWkU7CisgICAgc2l6ZSAtPSBwYWdlTnVtOEJ5dGVzICogRlhfRklYRURNRU1fUEFHRVNJWkU7CisgICAgbV8xNkJ5dGVzUGFnZXMuSW5pdGlhbGl6ZShwUGFnZSwgcGFnZU51bTE2Qnl0ZXMpOworICAgIHBQYWdlICs9IHBhZ2VOdW0xNkJ5dGVzICogRlhfRklYRURNRU1fUEFHRVNJWkU7CisgICAgc2l6ZSAtPSBwYWdlTnVtMTZCeXRlcyAqIEZYX0ZJWEVETUVNX1BBR0VTSVpFOworICAgIG1fMzJCeXRlc1BhZ2VzLkluaXRpYWxpemUocFBhZ2UsIHBhZ2VOdW0zMkJ5dGVzKTsKKyAgICBwUGFnZSArPSBwYWdlTnVtMzJCeXRlcyAqIEZYX0ZJWEVETUVNX1BBR0VTSVpFOworICAgIHNpemUgLT0gcGFnZU51bTMyQnl0ZXMgKiBGWF9GSVhFRE1FTV9QQUdFU0laRTsKKyAgICBtX01pZFBhZ2VzLkluaXRpYWxpemUocFBhZ2UsIHBNZW1Db25maWctPm5QYWdlU2l6ZV9NaWQgKiBGWF9GSVhFRE1FTV9QQUdFU0laRSwgcGFnZU51bU1pZCk7CisgICAgcFBhZ2UgKz0gcGFnZU51bU1pZCAqIHBNZW1Db25maWctPm5QYWdlU2l6ZV9NaWQgKiBGWF9GSVhFRE1FTV9QQUdFU0laRTsKKyAgICBzaXplIC09IHBhZ2VOdW1NaWQgKiBwTWVtQ29uZmlnLT5uUGFnZVNpemVfTWlkICogRlhfRklYRURNRU1fUEFHRVNJWkU7CisgICAgaWYgKHNpemUgPCBGWF9GSVhFRE1FTV9NSURCTE9DS1NJWkUpIHsKKyAgICAgICAgbV9wTGFyZ2VQYWdlID0gTlVMTDsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3BMYXJnZVBhZ2UgPSAoQ0ZYTUVNX1BhZ2UqKXBQYWdlOworICAgICAgICBtX3BMYXJnZVBhZ2UtPkluaXRpYWxpemUoc2l6ZSk7CisgICAgfQorICAgIG1fcExpbWl0UG9zID0gcFBhZ2UgKyBzaXplOworfQorRlhfQk9PTCBDRlhNRU1fUG9vbDo6SXNFbXB0eSgpIGNvbnN0Cit7CisgICAgaWYgKCFtXzhCeXRlc1BhZ2VzLklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmICghbV8xNkJ5dGVzUGFnZXMuSXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKCFtXzMyQnl0ZXNQYWdlcy5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoIW1fTWlkUGFnZXMuSXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuICFtX3BMYXJnZVBhZ2UgfHwgbV9wTGFyZ2VQYWdlLT5Jc0VtcHR5KCk7Cit9CitzaXplX3QgQ0ZYTUVNX1Bvb2w6OkdldFNpemUoRlhfTFBWT0lEIHApIGNvbnN0Cit7CisgICAgRlhTWVNfYXNzZXJ0KHAgPiAoRlhfTFBWT0lEKXRoaXMgJiYgcCA8IChGWF9MUFZPSUQpbV9wTGltaXRQb3MpOworICAgIGlmIChwIDwgKEZYX0xQVk9JRCltXzhCeXRlc1BhZ2VzLm1fcExpbWl0UG9zKSB7CisgICAgICAgIHJldHVybiA4OworICAgIH0KKyAgICBpZiAocCA8IChGWF9MUFZPSUQpbV8xNkJ5dGVzUGFnZXMubV9wTGltaXRQb3MpIHsKKyAgICAgICAgcmV0dXJuIDE2OworICAgIH0KKyAgICBpZiAocCA8IChGWF9MUFZPSUQpbV8zMkJ5dGVzUGFnZXMubV9wTGltaXRQb3MpIHsKKyAgICAgICAgcmV0dXJuIDMyOworICAgIH0KKyAgICByZXR1cm4gKChDRlhNRU1fQmxvY2sqKXAgLSAxKS0+bV9uQmxvY2tTaXplOworfQorRlhfTFBWT0lEIENGWE1FTV9Qb29sOjpSZWFsbG9jKEZYX0xQVk9JRCBwLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgRlhTWVNfYXNzZXJ0KHAgPiAoRlhfTFBWT0lEKXRoaXMgJiYgcCA8IChGWF9MUFZPSUQpbV9wTGltaXRQb3MpOworICAgIGlmIChwID4gKEZYX0xQVk9JRCltXzMyQnl0ZXNQYWdlcy5tX3BMaW1pdFBvcykgeworICAgICAgICBpZiAocCA8IChGWF9MUFZPSUQpbV9NaWRQYWdlcy5tX3BMaW1pdFBvcykgeworICAgICAgICAgICAgcmV0dXJuIG1fTWlkUGFnZXMuUmVhbGxvYyhwLCBvbGRTaXplLCBuZXdTaXplKTsKKyAgICAgICAgfSBlbHNlIGlmIChtX3BMYXJnZVBhZ2UpIHsKKyAgICAgICAgICAgIHJldHVybiBtX3BMYXJnZVBhZ2UtPlJlYWxsb2MocCwgb2xkU2l6ZSwgbmV3U2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9Cit2b2lkIENGWE1FTV9Qb29sOjpGcmVlKEZYX0xQVk9JRCBwKQoreworICAgIEZYU1lTX2Fzc2VydChwID4gKEZYX0xQVk9JRCl0aGlzICYmIHAgPCAoRlhfTFBWT0lEKW1fcExpbWl0UG9zKTsKKyAgICBpZiAocCA8IChGWF9MUFZPSUQpbV8zMkJ5dGVzUGFnZXMubV9wTGltaXRQb3MpIHsKKyAgICAgICAgaWYgKHAgPCAoRlhfTFBWT0lEKW1fOEJ5dGVzUGFnZXMubV9wTGltaXRQb3MpIHsKKyAgICAgICAgICAgIG1fOEJ5dGVzUGFnZXMuRnJlZShwKTsKKyAgICAgICAgfSBlbHNlIGlmIChwIDwgKEZYX0xQVk9JRCltXzE2Qnl0ZXNQYWdlcy5tX3BMaW1pdFBvcykgeworICAgICAgICAgICAgbV8xNkJ5dGVzUGFnZXMuRnJlZShwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fMzJCeXRlc1BhZ2VzLkZyZWUocCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSBpZiAocCA8IChGWF9MUFZPSUQpbV9NaWRQYWdlcy5tX3BMaW1pdFBvcykgeworICAgICAgICBtX01pZFBhZ2VzLkZyZWUocCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wTGFyZ2VQYWdlLT5GcmVlKHApOworICAgIH0KK30KK3ZvaWQgQ0ZYTUVNX0ZpeGVkTWdyOjpJbml0aWFsaXplKHNpemVfdCBzaXplKQoreworICAgIG1fTWVtQ29uZmlnID0gZ19NZW1Db25maWc7CisgICAgRlhTWVNfbWVtc2V0MzIoJm1fU3lzdGVtTWdyLCAwLCBzaXplb2YgbV9TeXN0ZW1NZ3IpOworICAgIG1fU3lzdGVtTWdyLkFsbG9jID0gRml4ZWRBbGxvYzsKKyAgICBtX1N5c3RlbU1nci5BbGxvY0RlYnVnID0gRml4ZWRBbGxvY0RlYnVnOworICAgIG1fU3lzdGVtTWdyLkZyZWUgPSBGaXhlZEZyZWU7CisgICAgbV9TeXN0ZW1NZ3IuUmVhbGxvYyA9IEZpeGVkUmVhbGxvYzsKKyAgICBtX1N5c3RlbU1nci5SZWFsbG9jRGVidWcgPSBGaXhlZFJlYWxsb2NEZWJ1ZzsKKyAgICBtX1N5c3RlbU1nci5Db2xsZWN0QWxsID0gRml4ZWRDb2xsZWN0QWxsOworICAgIG1fU3lzdGVtTWdyLlB1cmdlID0gRml4ZWRQdXJnZTsKKyAgICBtX1N5c3RlbU1nci51c2VyID0gdGhpczsKKyAgICBzaXplIC09IHNpemVvZihDRlhNRU1fRml4ZWRNZ3IpOworICAgIHNpemVfdCBuTWlkUGFnZXMgPSAwOworICAgIGlmIChtX01lbUNvbmZpZy5uUGFnZVNpemVfTWlkKSB7CisgICAgICAgIG5NaWRQYWdlcyA9IChzaXplIC0gKG1fTWVtQ29uZmlnLm5QYWdlTnVtX0luaXQ4ICsgbV9NZW1Db25maWcublBhZ2VOdW1fSW5pdDE2ICsgbV9NZW1Db25maWcublBhZ2VOdW1fSW5pdDMyKSAqIEZYX0ZJWEVETUVNX1BBR0VTSVpFKSAvIChtX01lbUNvbmZpZy5uUGFnZVNpemVfTWlkICogRlhfRklYRURNRU1fUEFHRVNJWkUpOworICAgICAgICBpZiAobk1pZFBhZ2VzID4gbV9NZW1Db25maWcublBhZ2VOdW1fSW5pdE1pZCkgeworICAgICAgICAgICAgbk1pZFBhZ2VzID0gbV9NZW1Db25maWcublBhZ2VOdW1fSW5pdE1pZDsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX0ZpcnN0UG9vbC5Jbml0aWFsaXplKCZtX01lbUNvbmZpZywgc2l6ZSwgbV9NZW1Db25maWcublBhZ2VOdW1fSW5pdDgsIG1fTWVtQ29uZmlnLm5QYWdlTnVtX0luaXQxNiwgbV9NZW1Db25maWcublBhZ2VOdW1fSW5pdDMyLCBuTWlkUGFnZXMpOworfQorRlhfTFBWT0lEIENGWE1FTV9GaXhlZE1ncjo6QWxsb2MxNihDRlhNRU1fUG9vbCAqKnBwMzJQb29sLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBDRlhNRU1fUG9vbCAqcFBvb2wgPSAmbV9GaXJzdFBvb2w7CisgICAgZG8geworICAgICAgICBDRlhNRU1fMTZCeXRlc1BhZ2VzICZwYWdlcyA9IHBQb29sLT5tXzE2Qnl0ZXNQYWdlczsKKyAgICAgICAgaWYgKHBhZ2VzLkhhc0ZyZWVCbG9jaygpKSB7CisgICAgICAgICAgICByZXR1cm4gcGFnZXMuQWxsb2Moc2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBwMzJQb29sICYmIHBQb29sLT5tXzMyQnl0ZXNQYWdlcy5IYXNGcmVlQmxvY2soKSkgeworICAgICAgICAgICAgKnBwMzJQb29sID0gcFBvb2w7CisgICAgICAgIH0KKyAgICAgICAgcFBvb2wgPSBwUG9vbC0+bV9wTmV4dFBvb2w7CisgICAgfSB3aGlsZShwUG9vbCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CitGWF9MUFZPSUQgQ0ZYTUVNX0ZpeGVkTWdyOjpBbGxvYzMyKHNpemVfdCBzaXplKQoreworICAgIGlmIChzaXplIDw9IDgpIHsKKyAgICAgICAgQ0ZYTUVNXzhCeXRlc1BhZ2VzICZwYWdlcyA9IG1fRmlyc3RQb29sLm1fOEJ5dGVzUGFnZXM7CisgICAgICAgIGlmIChwYWdlcy5IYXNGcmVlQmxvY2soKSkgeworICAgICAgICAgICAgcmV0dXJuIHBhZ2VzLkFsbG9jKHNpemUpOworICAgICAgICB9CisgICAgfQorICAgIENGWE1FTV9Qb29sICpwMzJCeXRlc1Bvb2w7CisgICAgaWYgKHNpemUgPD0gMTYpIHsKKyAgICAgICAgcDMyQnl0ZXNQb29sID0gTlVMTDsKKyAgICAgICAgRlhfTFBWT0lEIHAgPSBBbGxvYzE2KCZwMzJCeXRlc1Bvb2wsIHNpemUpOworICAgICAgICBpZiAocCkgeworICAgICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBwMzJCeXRlc1Bvb2wgPSAmbV9GaXJzdFBvb2w7CisgICAgfQorICAgIHdoaWxlIChwMzJCeXRlc1Bvb2wpIHsKKyAgICAgICAgQ0ZYTUVNXzMyQnl0ZXNQYWdlcyAmcGFnZXMgPSBwMzJCeXRlc1Bvb2wtPm1fMzJCeXRlc1BhZ2VzOworICAgICAgICBpZiAocGFnZXMuSGFzRnJlZUJsb2NrKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBwYWdlcy5BbGxvYyhzaXplKTsKKyAgICAgICAgfQorICAgICAgICBwMzJCeXRlc1Bvb2wgPSBwMzJCeXRlc1Bvb2wtPm1fcE5leHRQb29sOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK0ZYX0xQVk9JRCBDRlhNRU1fRml4ZWRNZ3I6OkFsbG9jU21hbGwoc2l6ZV90IHNpemUpCit7CisgICAgRlhfTFBWT0lEIHAgPSBBbGxvYzMyKHNpemUpOworICAgIGlmIChwKSB7CisgICAgICAgIHJldHVybiBwOworICAgIH0KKyAgICBpZiAoIW1fcEV4dGVuZGVyKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzaXplX3QgcmVxdWlyZWRTaXplID0gKG1fTWVtQ29uZmlnLm5QYWdlTnVtX01vcmUxNiArIG1fTWVtQ29uZmlnLm5QYWdlTnVtX01vcmUzMikgKiBGWF9GSVhFRE1FTV9QQUdFU0laRTsKKyAgICBpZiAoIXJlcXVpcmVkU2l6ZSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0ZYTUVNX1Bvb2wgKnBOZXdQb29sID0gTlVMTDsKKyAgICByZXF1aXJlZFNpemUgKz0gc2l6ZW9mKENGWE1FTV9Qb29sKTsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IHJlcXVpcmVkU2l6ZTsKKyAgICBpZiAoIW1fcEV4dGVuZGVyLT5Nb3JlKG1fcEV4dGVuZGVyLCBuZXdTaXplLCAodm9pZCoqKSZwTmV3UG9vbCwgJm5ld1NpemUpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzaXplX3Qgbk1pZFBhZ2VzID0gMDsKKyAgICBpZiAobV9NZW1Db25maWcublBhZ2VTaXplX01pZCkgeworICAgICAgICBuTWlkUGFnZXMgPSAobmV3U2l6ZSAtIHJlcXVpcmVkU2l6ZSkgLyAobV9NZW1Db25maWcublBhZ2VTaXplX01pZCAqIEZYX0ZJWEVETUVNX1BBR0VTSVpFKTsKKyAgICAgICAgaWYgKG5NaWRQYWdlcyA+IG1fTWVtQ29uZmlnLm5QYWdlTnVtX01vcmVNaWQpIHsKKyAgICAgICAgICAgIG5NaWRQYWdlcyA9IG1fTWVtQ29uZmlnLm5QYWdlTnVtX01vcmVNaWQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcE5ld1Bvb2wtPkluaXRpYWxpemUoJm1fTWVtQ29uZmlnLCBuZXdTaXplLCAwLCBtX01lbUNvbmZpZy5uUGFnZU51bV9Nb3JlMTYsIG1fTWVtQ29uZmlnLm5QYWdlTnVtX01vcmUzMiwgbk1pZFBhZ2VzKTsKKyAgICBwTmV3UG9vbC0+bV9wUHJldlBvb2wgPSAmbV9GaXJzdFBvb2w7CisgICAgQ0ZYTUVNX1Bvb2wgKnBQb29sID0gbV9GaXJzdFBvb2wubV9wTmV4dFBvb2w7CisgICAgcE5ld1Bvb2wtPm1fcE5leHRQb29sID0gcFBvb2w7CisgICAgaWYgKHBQb29sKSB7CisgICAgICAgIHBQb29sLT5tX3BQcmV2UG9vbCA9IHBOZXdQb29sOworICAgIH0KKyAgICBtX0ZpcnN0UG9vbC5tX3BOZXh0UG9vbCA9IHBOZXdQb29sOworICAgIHJldHVybiBBbGxvYzMyKHNpemUpOworfQorRlhfTFBWT0lEIENGWE1FTV9GaXhlZE1ncjo6QWxsb2NNaWQoc2l6ZV90IHNpemUpCit7CisgICAgQ0ZYTUVNX1Bvb2wgKnBQb29sID0gJm1fRmlyc3RQb29sOworICAgIGRvIHsKKyAgICAgICAgQ0ZYTUVNX1BhZ2VzICZwYWdlcyA9IHBQb29sLT5tX01pZFBhZ2VzOworICAgICAgICBpZiAocGFnZXMubV9wTGltaXRQb3MgPiBwYWdlcy5tX3BTdGFydFBhZ2UpIHsKKyAgICAgICAgICAgIEZYX0xQVk9JRCBwID0gcGFnZXMuQWxsb2Moc2l6ZSk7CisgICAgICAgICAgICBpZiAocCkgeworICAgICAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBQb29sID0gcFBvb2wtPm1fcE5leHRQb29sOworICAgIH0gd2hpbGUocFBvb2wpOworICAgIGlmICghbV9wRXh0ZW5kZXIpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHNpemVfdCBuZXdTaXplID0gbV9NZW1Db25maWcublBhZ2VTaXplX01pZCAqIEZYX0ZJWEVETUVNX1BBR0VTSVpFICogbV9NZW1Db25maWcublBhZ2VOdW1fTW9yZU1pZDsKKyAgICBpZiAoIW5ld1NpemUpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENGWE1FTV9Qb29sICpwTmV3UG9vbCA9IE5VTEw7CisgICAgbmV3U2l6ZSArPSBzaXplb2YoQ0ZYTUVNX1Bvb2wpOworICAgIGlmICghbV9wRXh0ZW5kZXItPk1vcmUobV9wRXh0ZW5kZXIsIG5ld1NpemUsICh2b2lkKiopJnBOZXdQb29sLCAmbmV3U2l6ZSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHNpemVfdCBuTWlkUGFnZXMgPSAobmV3U2l6ZSAtIHNpemVvZihDRlhNRU1fUG9vbCkpIC8gKG1fTWVtQ29uZmlnLm5QYWdlU2l6ZV9NaWQgKiBGWF9GSVhFRE1FTV9QQUdFU0laRSk7CisgICAgaWYgKG5NaWRQYWdlcyA+IG1fTWVtQ29uZmlnLm5QYWdlTnVtX01vcmVNaWQpIHsKKyAgICAgICAgbk1pZFBhZ2VzID0gbV9NZW1Db25maWcublBhZ2VOdW1fTW9yZU1pZDsKKyAgICB9CisgICAgcE5ld1Bvb2wtPkluaXRpYWxpemUoJm1fTWVtQ29uZmlnLCBuZXdTaXplLCAwLCAwLCAwLCBuTWlkUGFnZXMpOworICAgIHBOZXdQb29sLT5tX3BQcmV2UG9vbCA9ICZtX0ZpcnN0UG9vbDsKKyAgICBwUG9vbCA9IG1fRmlyc3RQb29sLm1fcE5leHRQb29sOworICAgIHBOZXdQb29sLT5tX3BOZXh0UG9vbCA9IHBQb29sOworICAgIGlmIChwUG9vbCkgeworICAgICAgICBwUG9vbC0+bV9wUHJldlBvb2wgPSBwTmV3UG9vbDsKKyAgICB9CisgICAgbV9GaXJzdFBvb2wubV9wTmV4dFBvb2wgPSBwTmV3UG9vbDsKKyAgICByZXR1cm4gcE5ld1Bvb2wtPm1fTWlkUGFnZXMuQWxsb2Moc2l6ZSk7Cit9CitGWF9MUFZPSUQgQ0ZYTUVNX0ZpeGVkTWdyOjpBbGxvY0xhcmdlKHNpemVfdCBzaXplKQoreworICAgIENGWE1FTV9Qb29sICpwUG9vbCA9ICZtX0ZpcnN0UG9vbDsKKyAgICBkbyB7CisgICAgICAgIGlmICghcFBvb2wtPm1fYkFsb25lICYmIHBQb29sLT5tX3BMYXJnZVBhZ2UpIHsKKyAgICAgICAgICAgIEZYX0xQVk9JRCBwID0gcFBvb2wtPm1fcExhcmdlUGFnZS0+QWxsb2Moc2l6ZSk7CisgICAgICAgICAgICBpZiAocCkgeworICAgICAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBQb29sID0gcFBvb2wtPm1fcE5leHRQb29sOworICAgIH0gd2hpbGUocFBvb2wpOworICAgIGlmICghbV9wRXh0ZW5kZXIgfHwgIW1fTWVtQ29uZmlnLm5QYWdlU2l6ZV9MYXJnZSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0ZYTUVNX1Bvb2wgKnBOZXdQb29sID0gTlVMTDsKKyNpZiBfRlhfV09SRFNJWkVfID09IF9GWF9XNjRfCisgICAgc2l6ZV90IG5ld1NpemUgPSAoKHNpemUgKyAzMSkgLyAzMiAqIDMyICsgc2l6ZW9mKENGWE1FTV9Qb29sKSArIHNpemVvZihDRlhNRU1fUGFnZSkgKyBzaXplb2YoQ0ZYTUVNX0Jsb2NrKSArIDQwOTUpIC8gNDA5NiAqIDQwOTY7CisjZWxzZQorICAgIHNpemVfdCBuZXdTaXplID0gKHNpemUgKyA3KSAvIDggKiA4ICsgc2l6ZW9mKENGWE1FTV9Qb29sKSArIHNpemVvZihDRlhNRU1fUGFnZSkgKyBzaXplb2YoQ0ZYTUVNX0Jsb2NrKTsKKyNlbmRpZgorICAgIGlmIChuZXdTaXplIDwgbV9NZW1Db25maWcublBhZ2VTaXplX0xhcmdlICogRlhfRklYRURNRU1fUEFHRVNJWkUpIHsKKyAgICAgICAgbmV3U2l6ZSA9IG1fTWVtQ29uZmlnLm5QYWdlU2l6ZV9MYXJnZSAqIEZYX0ZJWEVETUVNX1BBR0VTSVpFOworICAgIH0KKyAgICBpZiAoIW1fcEV4dGVuZGVyLT5Nb3JlKG1fcEV4dGVuZGVyLCBuZXdTaXplLCAodm9pZCoqKSZwTmV3UG9vbCwgJm5ld1NpemUpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwTmV3UG9vbC0+SW5pdGlhbGl6ZSgmbV9NZW1Db25maWcsIG5ld1NpemUsIDAsIDAsIDAsIDApOworICAgIHBOZXdQb29sLT5tX2JBbG9uZSA9IHNpemUgPj0gbV9NZW1Db25maWcublBhZ2VTaXplX0Fsb25lICogRlhfRklYRURNRU1fUEFHRVNJWkU7CisgICAgcE5ld1Bvb2wtPm1fcFByZXZQb29sID0gJm1fRmlyc3RQb29sOworICAgIHBQb29sID0gbV9GaXJzdFBvb2wubV9wTmV4dFBvb2w7CisgICAgcE5ld1Bvb2wtPm1fcE5leHRQb29sID0gcFBvb2w7CisgICAgaWYgKHBQb29sKSB7CisgICAgICAgIHBQb29sLT5tX3BQcmV2UG9vbCA9IHBOZXdQb29sOworICAgIH0KKyAgICBtX0ZpcnN0UG9vbC5tX3BOZXh0UG9vbCA9IHBOZXdQb29sOworICAgIHJldHVybiBwTmV3UG9vbC0+bV9wTGFyZ2VQYWdlLT5BbGxvYyhzaXplKTsKK30KK3NpemVfdCBDRlhNRU1fRml4ZWRNZ3I6OkdldFNpemUoRlhfTFBWT0lEIHApIGNvbnN0Cit7CisgICAgY29uc3QgQ0ZYTUVNX1Bvb2wgKnBGaW5kID0gJm1fRmlyc3RQb29sOworICAgIGRvIHsKKyAgICAgICAgaWYgKHAgPiAoRlhfTFBWT0lEKXBGaW5kICYmIHAgPCBwRmluZC0+bV9wTGltaXRQb3MpIHsKKyAgICAgICAgICAgIHJldHVybiBwRmluZC0+R2V0U2l6ZShwKTsKKyAgICAgICAgfQorICAgICAgICBwRmluZCA9IHBGaW5kLT5tX3BOZXh0UG9vbDsKKyAgICB9IHdoaWxlIChwRmluZCk7CisgICAgcmV0dXJuIDA7Cit9CitGWF9MUFZPSUQgQ0ZYTUVNX0ZpeGVkTWdyOjpBbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgICBGWF9MUFZPSUQgcDsKKyAgICBpZiAoc2l6ZSA8PSAzMikgeworICAgICAgICBwID0gQWxsb2NTbWFsbChzaXplKTsKKyAgICAgICAgaWYgKHApIHsKKyAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICB9CisgICAgfQorICAgIGlmIChzaXplIDw9IEZYX0ZJWEVETUVNX01JREJMT0NLU0laRSkgeworICAgICAgICBwID0gQWxsb2NNaWQoc2l6ZSk7CisgICAgICAgIGlmIChwKSB7CisgICAgICAgICAgICByZXR1cm4gcDsKKyAgICAgICAgfQorICAgIH0KKyAgICBwID0gQWxsb2NMYXJnZShzaXplKTsKKyAgICByZXR1cm4gcDsKK30KK0ZYX0xQVk9JRCBDRlhNRU1fRml4ZWRNZ3I6OlJlYWxsb2NTbWFsbChDRlhNRU1fUG9vbCogcFBvb2wsIEZYX0xQVk9JRCBwLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgRlhfTFBWT0lEIG5wID0gQWxsb2NTbWFsbChuZXdTaXplKTsKKyAgICBpZiAoIW5wKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBGWFNZU19tZW1jcHkzMihucCwgcCwgb2xkU2l6ZSk7CisgICAgcFBvb2wtPkZyZWUocCk7CisgICAgcmV0dXJuIG5wOworfQorRlhfTFBWT0lEIENGWE1FTV9GaXhlZE1ncjo6UmVhbGxvYyhGWF9MUFZPSUQgcCwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgaWYgKCFwKSB7CisgICAgICAgIHJldHVybiBBbGxvYyhuZXdTaXplKTsKKyAgICB9CisgICAgc2l6ZV90IG9sZFNpemUgPSAwOworICAgIENGWE1FTV9Qb29sICpwRmluZCA9ICZtX0ZpcnN0UG9vbDsKKyAgICBkbyB7CisgICAgICAgIGlmIChwID4gKEZYX0xQVk9JRClwRmluZCAmJiBwIDwgcEZpbmQtPm1fcExpbWl0UG9zKSB7CisgICAgICAgICAgICBvbGRTaXplID0gcEZpbmQtPkdldFNpemUocCk7CisgICAgICAgICAgICBpZiAob2xkU2l6ZSA+PSBuZXdTaXplKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBwRmluZCA9IHBGaW5kLT5tX3BOZXh0UG9vbDsKKyAgICB9IHdoaWxlIChwRmluZCk7CisgICAgaWYgKCFvbGRTaXplIHx8ICFwRmluZCkgeworICAgICAgICByZXR1cm4gQWxsb2MobmV3U2l6ZSk7CisgICAgfQorICAgIEZYX0xQVk9JRCBucCA9IE5VTEw7CisgICAgaWYgKG5ld1NpemUgPD0gMzIpIHsKKyAgICAgICAgbnAgPSBSZWFsbG9jU21hbGwocEZpbmQsIHAsIG9sZFNpemUsIG5ld1NpemUpOworICAgICAgICBpZiAobnApIHsKKyAgICAgICAgICAgIHJldHVybiBucDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobmV3U2l6ZSA8PSBGWF9GSVhFRE1FTV9NSURCTE9DS1NJWkUpIHsKKyAgICAgICAgbnAgPSBwRmluZC0+UmVhbGxvYyhwLCBvbGRTaXplLCBuZXdTaXplKTsKKyAgICAgICAgaWYgKG5wKSB7CisgICAgICAgICAgICByZXR1cm4gbnA7CisgICAgICAgIH0KKyAgICB9CisgICAgbnAgPSBBbGxvYyhuZXdTaXplKTsKKyAgICBpZiAobnApIHsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIobnAsIHAsIG9sZFNpemUpOworICAgICAgICBwRmluZC0+RnJlZShwKTsKKyAgICB9CisgICAgaWYgKHBGaW5kLT5tX2JBbG9uZSAmJiBwRmluZC0+SXNFbXB0eSgpKSB7CisgICAgICAgIEZyZWVQb29sKHBGaW5kKTsKKyAgICB9CisgICAgcmV0dXJuIG5wOworfQordm9pZCBDRlhNRU1fRml4ZWRNZ3I6OkZyZWUoRlhfTFBWT0lEIHApCit7CisgICAgQ0ZYTUVNX1Bvb2wgKnBGaW5kID0gJm1fRmlyc3RQb29sOworICAgIGRvIHsKKyAgICAgICAgaWYgKHAgPiAoRlhfTFBWT0lEKXBGaW5kICYmIHAgPCBwRmluZC0+bV9wTGltaXRQb3MpIHsKKyAgICAgICAgICAgIHBGaW5kLT5GcmVlKHApOworICAgICAgICAgICAgaWYgKHBGaW5kLT5tX2JBbG9uZSAmJiBwRmluZC0+SXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgRnJlZVBvb2wocEZpbmQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHBGaW5kID0gcEZpbmQtPm1fcE5leHRQb29sOworICAgIH0gd2hpbGUgKHBGaW5kKTsKK30KK3ZvaWQgQ0ZYTUVNX0ZpeGVkTWdyOjpGcmVlUG9vbChDRlhNRU1fUG9vbCogcFBvb2wpCit7CisgICAgRlhTWVNfYXNzZXJ0KHBQb29sLT5tX2JBbG9uZSAmJiBwUG9vbC0+SXNFbXB0eSgpKTsKKyAgICBGWFNZU19hc3NlcnQobV9wRXh0ZW5kZXIgIT0gTlVMTCk7CisgICAgQ0ZYTUVNX1Bvb2wqIHBQcmV2UG9vbCA9IHBQb29sLT5tX3BQcmV2UG9vbDsKKyAgICBDRlhNRU1fUG9vbCogcE5leHRQb29sID0gcFBvb2wtPm1fcE5leHRQb29sOworICAgIGlmIChwUHJldlBvb2wpIHsKKyAgICAgICAgcFByZXZQb29sLT5tX3BOZXh0UG9vbCA9IHBOZXh0UG9vbDsKKyAgICB9CisgICAgaWYgKHBOZXh0UG9vbCkgeworICAgICAgICBwTmV4dFBvb2wtPm1fcFByZXZQb29sID0gcFByZXZQb29sOworICAgIH0KKyAgICBtX3BFeHRlbmRlci0+RnJlZShtX3BFeHRlbmRlciwgcFBvb2wpOworfQordm9pZCBDRlhNRU1fRml4ZWRNZ3I6OkZyZWVBbGwoKQoreworICAgIGlmICghbV9wRXh0ZW5kZXIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDRlhNRU1fUG9vbCogcFBvb2wgPSBtX0ZpcnN0UG9vbC5tX3BOZXh0UG9vbDsKKyAgICB3aGlsZSAocFBvb2wpIHsKKyAgICAgICAgQ0ZYTUVNX1Bvb2wqIHBQcmV2UG9vbCA9IHBQb29sOworICAgICAgICBwUG9vbCA9IHBQb29sLT5tX3BOZXh0UG9vbDsKKyAgICAgICAgbV9wRXh0ZW5kZXItPkZyZWUobV9wRXh0ZW5kZXIsIHBQcmV2UG9vbCk7CisgICAgfQorICAgIG1fRmlyc3RQb29sLm1fcE5leHRQb29sID0gTlVMTDsKK30KK3ZvaWQgQ0ZYTUVNX0ZpeGVkTWdyOjpQdXJnZSgpCit7CisgICAgaWYgKCFtX3BFeHRlbmRlcikgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENGWE1FTV9Qb29sKiBwUG9vbCA9IG1fRmlyc3RQb29sLm1fcE5leHRQb29sOworICAgIHdoaWxlIChwUG9vbCkgeworICAgICAgICBDRlhNRU1fUG9vbCogcE5leHRQb29sID0gcFBvb2wtPm1fcE5leHRQb29sOworICAgICAgICBpZiAocFBvb2wtPklzRW1wdHkoKSkgeworICAgICAgICAgICAgQ0ZYTUVNX1Bvb2wqIHBQcmV2UG9vbCA9IHBQb29sLT5tX3BQcmV2UG9vbDsKKyAgICAgICAgICAgIHBQcmV2UG9vbC0+bV9wTmV4dFBvb2wgPSBwTmV4dFBvb2w7CisgICAgICAgICAgICBpZiAocE5leHRQb29sKSB7CisgICAgICAgICAgICAgICAgcE5leHRQb29sLT5tX3BQcmV2UG9vbCA9IHBQcmV2UG9vbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcEV4dGVuZGVyLT5GcmVlKG1fcEV4dGVuZGVyLCBwUG9vbCk7CisgICAgICAgIH0KKyAgICAgICAgcFBvb2wgPSBwTmV4dFBvb2w7CisgICAgfQorfQorZXh0ZXJuIGNvbnN0IEZYX0JZVEUgT25lTGVhZFBvc1syNTZdID0geworICAgIDgsIDcsIDYsIDYsIDUsIDUsIDUsIDUsIDQsIDQsIDQsIDQsIDQsIDQsIDQsIDQsCisgICAgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCit9OworZXh0ZXJuIGNvbnN0IEZYX0JZVEUgWmVyb0xlYWRQb3NbMjU2XSA9IHsKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsCisgICAgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywKKyAgICA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA1LCA1LCA1LCA1LCA2LCA2LCA3LCA4LAorfTsKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX3BsZXguY3BwIGIvY29yZS9zcmMvZnhjcnQvZnhfYmFzaWNfcGxleC5jcHAKaW5kZXggZGQzYThiYS4uODBjMDE0YSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjcnQvZnhfYmFzaWNfcGxleC5jcHAKKysrIGIvY29yZS9zcmMvZnhjcnQvZnhfYmFzaWNfcGxleC5jcHAKQEAgLTEsMjggKzEsMjggQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2Jhc2ljLmgiDQotI2luY2x1ZGUgInBsZXguaCINCi1DRlhfUGxleCogQ0ZYX1BsZXg6OkNyZWF0ZShJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yLCBDRlhfUGxleComIHBIZWFkLCBGWF9EV09SRCBuTWF4LCBGWF9EV09SRCBjYkVsZW1lbnQpDQotew0KLSAgICBDRlhfUGxleCogcCA9IChDRlhfUGxleCopRlhfQWxsb2NhdG9yX0FsbG9jKHBBbGxvY2F0b3IsIEZYX0JZVEUsIHNpemVvZihDRlhfUGxleCkgKyBuTWF4ICogY2JFbGVtZW50KTsNCi0gICAgaWYgKCFwKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBwLT5wTmV4dCA9IHBIZWFkOw0KLSAgICBwSGVhZCA9IHA7DQotICAgIHJldHVybiBwOw0KLX0NCi12b2lkIENGWF9QbGV4OjpGcmVlRGF0YUNoYWluKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpDQotew0KLSAgICBDRlhfUGxleCogcCA9IHRoaXM7DQotICAgIHdoaWxlIChwICE9IE5VTEwpIHsNCi0gICAgICAgIEZYX0JZVEUqIGJ5dGVzID0gKEZYX0JZVEUqKSBwOw0KLSAgICAgICAgQ0ZYX1BsZXgqIHBOZXh0ID0gcC0+cE5leHQ7DQotICAgICAgICBGWF9BbGxvY2F0b3JfRnJlZShwQWxsb2NhdG9yLCBieXRlcyk7DQotICAgICAgICBwID0gcE5leHQ7DQotICAgIH0NCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfYmFzaWMuaCIKKyNpbmNsdWRlICJwbGV4LmgiCitDRlhfUGxleCogQ0ZYX1BsZXg6OkNyZWF0ZShJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yLCBDRlhfUGxleComIHBIZWFkLCBGWF9EV09SRCBuTWF4LCBGWF9EV09SRCBjYkVsZW1lbnQpCit7CisgICAgQ0ZYX1BsZXgqIHAgPSAoQ0ZYX1BsZXgqKUZYX0FsbG9jYXRvcl9BbGxvYyhwQWxsb2NhdG9yLCBGWF9CWVRFLCBzaXplb2YoQ0ZYX1BsZXgpICsgbk1heCAqIGNiRWxlbWVudCk7CisgICAgaWYgKCFwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwLT5wTmV4dCA9IHBIZWFkOworICAgIHBIZWFkID0gcDsKKyAgICByZXR1cm4gcDsKK30KK3ZvaWQgQ0ZYX1BsZXg6OkZyZWVEYXRhQ2hhaW4oSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikKK3sKKyAgICBDRlhfUGxleCogcCA9IHRoaXM7CisgICAgd2hpbGUgKHAgIT0gTlVMTCkgeworICAgICAgICBGWF9CWVRFKiBieXRlcyA9IChGWF9CWVRFKikgcDsKKyAgICAgICAgQ0ZYX1BsZXgqIHBOZXh0ID0gcC0+cE5leHQ7CisgICAgICAgIEZYX0FsbG9jYXRvcl9GcmVlKHBBbGxvY2F0b3IsIGJ5dGVzKTsKKyAgICAgICAgcCA9IHBOZXh0OworICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX3V0Zi5jcHAgYi9jb3JlL3NyYy9meGNydC9meF9iYXNpY191dGYuY3BwCmluZGV4IGI5NGUwOGQuLmM1YWEzNjAgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX3V0Zi5jcHAKKysrIGIvY29yZS9zcmMvZnhjcnQvZnhfYmFzaWNfdXRmLmNwcApAQCAtMSwxMDIgKzEsMTAyIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGNydC9meF9iYXNpYy5oIg0KLXZvaWQgQ0ZYX1VURjhEZWNvZGVyOjpDbGVhcigpDQotew0KLSAgICBtX0J1ZmZlci5DbGVhcigpOw0KLSAgICBtX1BlbmRpbmdCeXRlcyA9IDA7DQotfQ0KLXZvaWQgQ0ZYX1VURjhEZWNvZGVyOjpBcHBlbmRDaGFyKEZYX0RXT1JEIGNoKQ0KLXsNCi0gICAgbV9CdWZmZXIuQXBwZW5kQ2hhcigoRlhfV0NIQVIpY2gpOw0KLX0NCi12b2lkIENGWF9VVEY4RGVjb2Rlcjo6SW5wdXQoRlhfQllURSBieXRlKQ0KLXsNCi0gICAgaWYgKGJ5dGUgPCAweDgwKSB7DQotICAgICAgICBtX1BlbmRpbmdCeXRlcyA9IDA7DQotICAgICAgICBtX0J1ZmZlci5BcHBlbmRDaGFyKGJ5dGUpOw0KLSAgICB9IGVsc2UgaWYgKGJ5dGUgPCAweGMwKSB7DQotICAgICAgICBpZiAobV9QZW5kaW5nQnl0ZXMgPT0gMCkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fUGVuZGluZ0J5dGVzIC0tOw0KLSAgICAgICAgbV9QZW5kaW5nQ2hhciB8PSAoYnl0ZSAmIDB4M2YpIDw8IChtX1BlbmRpbmdCeXRlcyAqIDYpOw0KLSAgICAgICAgaWYgKG1fUGVuZGluZ0J5dGVzID09IDApIHsNCi0gICAgICAgICAgICBBcHBlbmRDaGFyKG1fUGVuZGluZ0NoYXIpOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2UgaWYgKGJ5dGUgPCAweGUwKSB7DQotICAgICAgICBtX1BlbmRpbmdCeXRlcyA9IDE7DQotICAgICAgICBtX1BlbmRpbmdDaGFyID0gKGJ5dGUgJiAweDFmKSA8PCA2Ow0KLSAgICB9IGVsc2UgaWYgKGJ5dGUgPCAweGYwKSB7DQotICAgICAgICBtX1BlbmRpbmdCeXRlcyA9IDI7DQotICAgICAgICBtX1BlbmRpbmdDaGFyID0gKGJ5dGUgJiAweDBmKSA8PCAxMjsNCi0gICAgfSBlbHNlIGlmIChieXRlIDwgMHhmOCkgew0KLSAgICAgICAgbV9QZW5kaW5nQnl0ZXMgPSAzOw0KLSAgICAgICAgbV9QZW5kaW5nQ2hhciA9IChieXRlICYgMHgwNykgPDwgMTg7DQotICAgIH0gZWxzZSBpZiAoYnl0ZSA8IDB4ZmMpIHsNCi0gICAgICAgIG1fUGVuZGluZ0J5dGVzID0gNDsNCi0gICAgICAgIG1fUGVuZGluZ0NoYXIgPSAoYnl0ZSAmIDB4MDMpIDw8IDI0Ow0KLSAgICB9IGVsc2UgaWYgKGJ5dGUgPCAweGZlKSB7DQotICAgICAgICBtX1BlbmRpbmdCeXRlcyA9IDU7DQotICAgICAgICBtX1BlbmRpbmdDaGFyID0gKGJ5dGUgJiAweDAxKSA8PCAzMDsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9VVEY4RW5jb2Rlcjo6SW5wdXQoRlhfV0NIQVIgdW5pY29kZSkNCi17DQotICAgIGlmICgoRlhfRFdPUkQpdW5pY29kZSA8IDB4ODApIHsNCi0gICAgICAgIG1fQnVmZmVyLkFwcGVuZENoYXIodW5pY29kZSk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZiAoKEZYX0RXT1JEKXVuaWNvZGUgPj0gMHg4MDAwMDAwMCkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBuYnl0ZXMgPSAwOw0KLSAgICAgICAgaWYgKChGWF9EV09SRCl1bmljb2RlIDwgMHg4MDApIHsNCi0gICAgICAgICAgICBuYnl0ZXMgPSAyOw0KLSAgICAgICAgfSBlbHNlIGlmICgoRlhfRFdPUkQpdW5pY29kZSA8IDB4MTAwMDApIHsNCi0gICAgICAgICAgICBuYnl0ZXMgPSAzOw0KLSAgICAgICAgfSBlbHNlIGlmICgoRlhfRFdPUkQpdW5pY29kZSA8IDB4MjAwMDAwKSB7DQotICAgICAgICAgICAgbmJ5dGVzID0gNDsNCi0gICAgICAgIH0gZWxzZSBpZiAoKEZYX0RXT1JEKXVuaWNvZGUgPCAweDQwMDAwMDApIHsNCi0gICAgICAgICAgICBuYnl0ZXMgPSA1Ow0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBuYnl0ZXMgPSA2Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgc3RhdGljIEZYX0JZVEUgcHJlZml4W10gPSB7MHhjMCwgMHhlMCwgMHhmMCwgMHhmOCwgMHhmY307DQotICAgICAgICBpbnQgb3JkZXIgPSAxIDw8ICgobmJ5dGVzIC0gMSkgKiA2KTsNCi0gICAgICAgIGludCBjb2RlID0gdW5pY29kZTsNCi0gICAgICAgIG1fQnVmZmVyLkFwcGVuZENoYXIocHJlZml4W25ieXRlcyAtIDJdIHwgKGNvZGUgLyBvcmRlcikpOw0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYnl0ZXMgLSAxOyBpICsrKSB7DQotICAgICAgICAgICAgY29kZSA9IGNvZGUgJSBvcmRlcjsNCi0gICAgICAgICAgICBvcmRlciA+Pj0gNjsNCi0gICAgICAgICAgICBtX0J1ZmZlci5BcHBlbmRDaGFyKDB4ODAgfCAoY29kZSAvIG9yZGVyKSk7DQotICAgICAgICB9DQotICAgIH0NCi19DQotQ0ZYX0J5dGVTdHJpbmcgRlhfVVRGOEVuY29kZShGWF9MUENXU1RSIHB3c1N0ciwgRlhfU1RSU0laRSBsZW4pDQotew0KLSAgICBGWFNZU19hc3NlcnQocHdzU3RyICE9IE5VTEwpOw0KLSAgICBpZiAobGVuIDwgMCkgew0KLSAgICAgICAgbGVuID0gKEZYX1NUUlNJWkUpRlhTWVNfd2NzbGVuKHB3c1N0cik7DQotICAgIH0NCi0gICAgQ0ZYX1VURjhFbmNvZGVyIGVuY29kZXI7DQotICAgIHdoaWxlIChsZW4gLS0gPiAwKSB7DQotICAgICAgICBlbmNvZGVyLklucHV0KCpwd3NTdHIgKyspOw0KLSAgICB9DQotICAgIHJldHVybiBlbmNvZGVyLkdldFJlc3VsdCgpOw0KLX0NCi12b2lkIEZYX1VURjhFbmNvZGUoRlhfTFBDV1NUUiBwd3NTdHIsIEZYX1NUUlNJWkUgbGVuLCBDRlhfQnl0ZVN0cmluZ0wgJnV0ZjhTdHIsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpDQotew0KLSAgICBGWFNZU19hc3NlcnQocHdzU3RyICE9IE5VTEwpOw0KLSAgICBpZiAobGVuIDwgMCkgew0KLSAgICAgICAgbGVuID0gKEZYX1NUUlNJWkUpRlhTWVNfd2NzbGVuKHB3c1N0cik7DQotICAgIH0NCi0gICAgQ0ZYX1VURjhFbmNvZGVyIGVuY29kZXIocEFsbG9jYXRvcik7DQotICAgIHdoaWxlIChsZW4gLS0gPiAwKSB7DQotICAgICAgICBlbmNvZGVyLklucHV0KCpwd3NTdHIgKyspOw0KLSAgICB9DQotICAgIGVuY29kZXIuR2V0UmVzdWx0KHV0ZjhTdHIpOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGNydC9meF9iYXNpYy5oIgordm9pZCBDRlhfVVRGOERlY29kZXI6OkNsZWFyKCkKK3sKKyAgICBtX0J1ZmZlci5DbGVhcigpOworICAgIG1fUGVuZGluZ0J5dGVzID0gMDsKK30KK3ZvaWQgQ0ZYX1VURjhEZWNvZGVyOjpBcHBlbmRDaGFyKEZYX0RXT1JEIGNoKQoreworICAgIG1fQnVmZmVyLkFwcGVuZENoYXIoKEZYX1dDSEFSKWNoKTsKK30KK3ZvaWQgQ0ZYX1VURjhEZWNvZGVyOjpJbnB1dChGWF9CWVRFIGJ5dGUpCit7CisgICAgaWYgKGJ5dGUgPCAweDgwKSB7CisgICAgICAgIG1fUGVuZGluZ0J5dGVzID0gMDsKKyAgICAgICAgbV9CdWZmZXIuQXBwZW5kQ2hhcihieXRlKTsKKyAgICB9IGVsc2UgaWYgKGJ5dGUgPCAweGMwKSB7CisgICAgICAgIGlmIChtX1BlbmRpbmdCeXRlcyA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9QZW5kaW5nQnl0ZXMgLS07CisgICAgICAgIG1fUGVuZGluZ0NoYXIgfD0gKGJ5dGUgJiAweDNmKSA8PCAobV9QZW5kaW5nQnl0ZXMgKiA2KTsKKyAgICAgICAgaWYgKG1fUGVuZGluZ0J5dGVzID09IDApIHsKKyAgICAgICAgICAgIEFwcGVuZENoYXIobV9QZW5kaW5nQ2hhcik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGJ5dGUgPCAweGUwKSB7CisgICAgICAgIG1fUGVuZGluZ0J5dGVzID0gMTsKKyAgICAgICAgbV9QZW5kaW5nQ2hhciA9IChieXRlICYgMHgxZikgPDwgNjsKKyAgICB9IGVsc2UgaWYgKGJ5dGUgPCAweGYwKSB7CisgICAgICAgIG1fUGVuZGluZ0J5dGVzID0gMjsKKyAgICAgICAgbV9QZW5kaW5nQ2hhciA9IChieXRlICYgMHgwZikgPDwgMTI7CisgICAgfSBlbHNlIGlmIChieXRlIDwgMHhmOCkgeworICAgICAgICBtX1BlbmRpbmdCeXRlcyA9IDM7CisgICAgICAgIG1fUGVuZGluZ0NoYXIgPSAoYnl0ZSAmIDB4MDcpIDw8IDE4OworICAgIH0gZWxzZSBpZiAoYnl0ZSA8IDB4ZmMpIHsKKyAgICAgICAgbV9QZW5kaW5nQnl0ZXMgPSA0OworICAgICAgICBtX1BlbmRpbmdDaGFyID0gKGJ5dGUgJiAweDAzKSA8PCAyNDsKKyAgICB9IGVsc2UgaWYgKGJ5dGUgPCAweGZlKSB7CisgICAgICAgIG1fUGVuZGluZ0J5dGVzID0gNTsKKyAgICAgICAgbV9QZW5kaW5nQ2hhciA9IChieXRlICYgMHgwMSkgPDwgMzA7CisgICAgfQorfQordm9pZCBDRlhfVVRGOEVuY29kZXI6OklucHV0KEZYX1dDSEFSIHVuaWNvZGUpCit7CisgICAgaWYgKChGWF9EV09SRCl1bmljb2RlIDwgMHg4MCkgeworICAgICAgICBtX0J1ZmZlci5BcHBlbmRDaGFyKHVuaWNvZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICgoRlhfRFdPUkQpdW5pY29kZSA+PSAweDgwMDAwMDAwKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaW50IG5ieXRlcyA9IDA7CisgICAgICAgIGlmICgoRlhfRFdPUkQpdW5pY29kZSA8IDB4ODAwKSB7CisgICAgICAgICAgICBuYnl0ZXMgPSAyOworICAgICAgICB9IGVsc2UgaWYgKChGWF9EV09SRCl1bmljb2RlIDwgMHgxMDAwMCkgeworICAgICAgICAgICAgbmJ5dGVzID0gMzsKKyAgICAgICAgfSBlbHNlIGlmICgoRlhfRFdPUkQpdW5pY29kZSA8IDB4MjAwMDAwKSB7CisgICAgICAgICAgICBuYnl0ZXMgPSA0OworICAgICAgICB9IGVsc2UgaWYgKChGWF9EV09SRCl1bmljb2RlIDwgMHg0MDAwMDAwKSB7CisgICAgICAgICAgICBuYnl0ZXMgPSA1OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbmJ5dGVzID0gNjsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgRlhfQllURSBwcmVmaXhbXSA9IHsweGMwLCAweGUwLCAweGYwLCAweGY4LCAweGZjfTsKKyAgICAgICAgaW50IG9yZGVyID0gMSA8PCAoKG5ieXRlcyAtIDEpICogNik7CisgICAgICAgIGludCBjb2RlID0gdW5pY29kZTsKKyAgICAgICAgbV9CdWZmZXIuQXBwZW5kQ2hhcihwcmVmaXhbbmJ5dGVzIC0gMl0gfCAoY29kZSAvIG9yZGVyKSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJ5dGVzIC0gMTsgaSArKykgeworICAgICAgICAgICAgY29kZSA9IGNvZGUgJSBvcmRlcjsKKyAgICAgICAgICAgIG9yZGVyID4+PSA2OworICAgICAgICAgICAgbV9CdWZmZXIuQXBwZW5kQ2hhcigweDgwIHwgKGNvZGUgLyBvcmRlcikpOworICAgICAgICB9CisgICAgfQorfQorQ0ZYX0J5dGVTdHJpbmcgRlhfVVRGOEVuY29kZShGWF9MUENXU1RSIHB3c1N0ciwgRlhfU1RSU0laRSBsZW4pCit7CisgICAgRlhTWVNfYXNzZXJ0KHB3c1N0ciAhPSBOVUxMKTsKKyAgICBpZiAobGVuIDwgMCkgeworICAgICAgICBsZW4gPSAoRlhfU1RSU0laRSlGWFNZU193Y3NsZW4ocHdzU3RyKTsKKyAgICB9CisgICAgQ0ZYX1VURjhFbmNvZGVyIGVuY29kZXI7CisgICAgd2hpbGUgKGxlbiAtLSA+IDApIHsKKyAgICAgICAgZW5jb2Rlci5JbnB1dCgqcHdzU3RyICsrKTsKKyAgICB9CisgICAgcmV0dXJuIGVuY29kZXIuR2V0UmVzdWx0KCk7Cit9Cit2b2lkIEZYX1VURjhFbmNvZGUoRlhfTFBDV1NUUiBwd3NTdHIsIEZYX1NUUlNJWkUgbGVuLCBDRlhfQnl0ZVN0cmluZ0wgJnV0ZjhTdHIsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpCit7CisgICAgRlhTWVNfYXNzZXJ0KHB3c1N0ciAhPSBOVUxMKTsKKyAgICBpZiAobGVuIDwgMCkgeworICAgICAgICBsZW4gPSAoRlhfU1RSU0laRSlGWFNZU193Y3NsZW4ocHdzU3RyKTsKKyAgICB9CisgICAgQ0ZYX1VURjhFbmNvZGVyIGVuY29kZXIocEFsbG9jYXRvcik7CisgICAgd2hpbGUgKGxlbiAtLSA+IDApIHsKKyAgICAgICAgZW5jb2Rlci5JbnB1dCgqcHdzU3RyICsrKTsKKyAgICB9CisgICAgZW5jb2Rlci5HZXRSZXN1bHQodXRmOFN0cik7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNydC9meF9iYXNpY191dGlsLmNwcCBiL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX3V0aWwuY3BwCmluZGV4IGFmNGQ0MmMuLjFkOTQ3ZDMgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX3V0aWwuY3BwCisrKyBiL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX3V0aWwuY3BwCkBAIC0xLDQ0NCArMSw0NDQgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2Jhc2ljLmgiDQotI2lmIF9GWE1fUExBVEZPUk1fICE9IF9GWE1fUExBVEZPUk1fV0lORE9XU18NCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQotI2luY2x1ZGUgPGRpcmVudC5oPg0KLSNlbHNlDQotI2luY2x1ZGUgPGRpcmVjdC5oPg0KLSNlbmRpZg0KLUNGWF9Qcml2YXRlRGF0YTo6fkNGWF9Qcml2YXRlRGF0YSgpDQotew0KLSAgICBDbGVhckFsbCgpOw0KLX0NCi12b2lkIEZYX1BSSVZBVEVEQVRBOjpGcmVlRGF0YSgpDQotew0KLSAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKG1fYlNlbGZEZXN0cnVjdCkgew0KLSAgICAgICAgZGVsZXRlIChDRlhfRGVzdHJ1Y3RPYmplY3QqKW1fcERhdGE7DQotICAgIH0gZWxzZSBpZiAobV9wQ2FsbGJhY2spIHsNCi0gICAgICAgIG1fcENhbGxiYWNrKG1fcERhdGEpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0ZYX1ByaXZhdGVEYXRhOjpBZGREYXRhKEZYX0xQVk9JRCBwTW9kdWxlSWQsIEZYX0xQVk9JRCBwRGF0YSwgUERfQ0FMTEJBQ0tfRlJFRURBVEEgY2FsbGJhY2ssIEZYX0JPT0wgYlNlbGZEZXN0cnVjdCkNCi17DQotICAgIGlmIChwTW9kdWxlSWQgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX1BSSVZBVEVEQVRBKiBwTGlzdCA9IG1fRGF0YUxpc3QuR2V0RGF0YSgpOw0KLSAgICBpbnQgY291bnQgPSBtX0RhdGFMaXN0LkdldFNpemUoKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSArKykgew0KLSAgICAgICAgaWYgKHBMaXN0W2ldLm1fcE1vZHVsZUlkID09IHBNb2R1bGVJZCkgew0KLSAgICAgICAgICAgIHBMaXN0W2ldLkZyZWVEYXRhKCk7DQotICAgICAgICAgICAgcExpc3RbaV0ubV9wRGF0YSA9IHBEYXRhOw0KLSAgICAgICAgICAgIHBMaXN0W2ldLm1fcENhbGxiYWNrID0gY2FsbGJhY2s7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIEZYX1BSSVZBVEVEQVRBIGRhdGEgPSB7cE1vZHVsZUlkLCBwRGF0YSwgY2FsbGJhY2ssIGJTZWxmRGVzdHJ1Y3R9Ow0KLSAgICBtX0RhdGFMaXN0LkFkZChkYXRhKTsNCi19DQotdm9pZCBDRlhfUHJpdmF0ZURhdGE6OlNldFByaXZhdGVEYXRhKEZYX0xQVk9JRCBwTW9kdWxlSWQsIEZYX0xQVk9JRCBwRGF0YSwgUERfQ0FMTEJBQ0tfRlJFRURBVEEgY2FsbGJhY2spDQotew0KLSAgICBBZGREYXRhKHBNb2R1bGVJZCwgcERhdGEsIGNhbGxiYWNrLCBGQUxTRSk7DQotfQ0KLXZvaWQgQ0ZYX1ByaXZhdGVEYXRhOjpTZXRQcml2YXRlT2JqKEZYX0xQVk9JRCBwTW9kdWxlSWQsIENGWF9EZXN0cnVjdE9iamVjdCogcE9iaikNCi17DQotICAgIEFkZERhdGEocE1vZHVsZUlkLCBwT2JqLCBOVUxMLCBUUlVFKTsNCi19DQotRlhfQk9PTCBDRlhfUHJpdmF0ZURhdGE6OlJlbW92ZVByaXZhdGVEYXRhKEZYX0xQVk9JRCBwTW9kdWxlSWQpDQotew0KLSAgICBpZiAocE1vZHVsZUlkID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWF9QUklWQVRFREFUQSogcExpc3QgPSBtX0RhdGFMaXN0LkdldERhdGEoKTsNCi0gICAgaW50IGNvdW50ID0gbV9EYXRhTGlzdC5HZXRTaXplKCk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkgKyspIHsNCi0gICAgICAgIGlmIChwTGlzdFtpXS5tX3BNb2R1bGVJZCA9PSBwTW9kdWxlSWQpIHsNCi0gICAgICAgICAgICBtX0RhdGFMaXN0LlJlbW92ZUF0KGkpOw0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotRlhfTFBWT0lEIENGWF9Qcml2YXRlRGF0YTo6R2V0UHJpdmF0ZURhdGEoRlhfTFBWT0lEIHBNb2R1bGVJZCkNCi17DQotICAgIGlmIChwTW9kdWxlSWQgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgRlhfUFJJVkFURURBVEEqIHBMaXN0ID0gbV9EYXRhTGlzdC5HZXREYXRhKCk7DQotICAgIGludCBjb3VudCA9IG1fRGF0YUxpc3QuR2V0U2l6ZSgpOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpICsrKSB7DQotICAgICAgICBpZiAocExpc3RbaV0ubV9wTW9kdWxlSWQgPT0gcE1vZHVsZUlkKSB7DQotICAgICAgICAgICAgcmV0dXJuIHBMaXN0W2ldLm1fcERhdGE7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLXZvaWQgQ0ZYX1ByaXZhdGVEYXRhOjpDbGVhckFsbCgpDQotew0KLSAgICBGWF9QUklWQVRFREFUQSogcExpc3QgPSBtX0RhdGFMaXN0LkdldERhdGEoKTsNCi0gICAgaW50IGNvdW50ID0gbV9EYXRhTGlzdC5HZXRTaXplKCk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkgKyspIHsNCi0gICAgICAgIHBMaXN0W2ldLkZyZWVEYXRhKCk7DQotICAgIH0NCi0gICAgbV9EYXRhTGlzdC5SZW1vdmVBbGwoKTsNCi19DQotdm9pZCBGWF9hdG9udW0oRlhfQlNUUiBzdHJjLCBGWF9CT09MJiBiSW50ZWdlciwgdm9pZCogcERhdGEpDQotew0KLSAgICBpZiAoRlhTWVNfbWVtY2hyKHN0cmMuR2V0UHRyKCksICcuJywgc3RyYy5HZXRMZW5ndGgoKSkgPT0gTlVMTCkgew0KLSAgICAgICAgYkludGVnZXIgPSBUUlVFOw0KLSAgICAgICAgaW50IGNjID0gMCwgaW50ZWdlciA9IDA7DQotICAgICAgICBGWF9MUENTVFIgc3RyID0gc3RyYy5HZXRDU3RyKCk7DQotICAgICAgICBpbnQgbGVuID0gc3RyYy5HZXRMZW5ndGgoKTsNCi0gICAgICAgIEZYX0JPT0wgYk5lZ2F0aXZlID0gRkFMU0U7DQotICAgICAgICBpZiAoc3RyWzBdID09ICcrJykgew0KLSAgICAgICAgICAgIGNjKys7DQotICAgICAgICB9IGVsc2UgaWYgKHN0clswXSA9PSAnLScpIHsNCi0gICAgICAgICAgICBiTmVnYXRpdmUgPSBUUlVFOw0KLSAgICAgICAgICAgIGNjKys7DQotICAgICAgICB9DQotICAgICAgICB3aGlsZSAoY2MgPCBsZW4pIHsNCi0gICAgICAgICAgICBpZiAoc3RyW2NjXSA8ICcwJyB8fCBzdHJbY2NdID4gJzknKSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpbnRlZ2VyID0gaW50ZWdlciAqIDEwICsgc3RyW2NjXSAtICcwJzsNCi0gICAgICAgICAgICBpZiAoaW50ZWdlciA8IDApIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNjICsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGJOZWdhdGl2ZSkgew0KLSAgICAgICAgICAgIGludGVnZXIgPSAtaW50ZWdlcjsNCi0gICAgICAgIH0NCi0gICAgICAgICooaW50KilwRGF0YSA9IGludGVnZXI7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBiSW50ZWdlciA9IEZBTFNFOw0KLSAgICAgICAgKihGWF9GTE9BVCopcERhdGEgPSBGWF9hdG9mKHN0cmMpOw0KLSAgICB9DQotfQ0KLUZYX0ZMT0FUIEZYX2F0b2YoRlhfQlNUUiBzdHJjKQ0KLXsNCi0gICAgaWYgKHN0cmMuR2V0TGVuZ3RoKCkgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIDAuMDsNCi0gICAgfQ0KLSAgICBpbnQgY2MgPSAwOw0KLSAgICBGWF9CT09MIGJOZWdhdGl2ZSA9IEZBTFNFOw0KLSAgICBGWF9MUENTVFIgc3RyID0gc3RyYy5HZXRDU3RyKCk7DQotICAgIGludCBsZW4gPSBzdHJjLkdldExlbmd0aCgpOw0KLSAgICBpZiAoc3RyWzBdID09ICcrJykgew0KLSAgICAgICAgY2MrKzsNCi0gICAgfSBlbHNlIGlmIChzdHJbMF0gPT0gJy0nKSB7DQotICAgICAgICBiTmVnYXRpdmUgPSBUUlVFOw0KLSAgICAgICAgY2MrKzsNCi0gICAgfQ0KLSAgICB3aGlsZSAoY2MgPCBsZW4pIHsNCi0gICAgICAgIGlmIChzdHJbY2NdICE9ICcrJyAmJiBzdHJbY2NdICE9ICctJykgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgY2MgKys7DQotICAgIH0NCi0gICAgRlhfRkxPQVQgdmFsdWUgPSAwOw0KLSAgICB3aGlsZSAoY2MgPCBsZW4pIHsNCi0gICAgICAgIGlmIChzdHJbY2NdID09ICcuJykgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgdmFsdWUgPSB2YWx1ZSAqIDEwICsgc3RyW2NjXSAtICcwJzsNCi0gICAgICAgIGNjICsrOw0KLSAgICB9DQotICAgIHN0YXRpYyBjb25zdCBGWF9GTE9BVCBmcmFjdGlvbl9zY2FsZXNbXSA9IHswLjFmLCAwLjAxZiwgMC4wMDFmLCAwLjAwMDFmLCAwLjAwMDAxZiwgMC4wMDAwMDFmLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wMDAwMDAxZiwgMC4wMDAwMDAwMWYsIDAuMDAwMDAwMDAxZiwgMC4wMDAwMDAwMDAxZiwgMC4wMDAwMDAwMDAwMWYNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsNCi0gICAgaW50IHNjYWxlID0gMDsNCi0gICAgaWYgKGNjIDwgbGVuICYmIHN0cltjY10gPT0gJy4nKSB7DQotICAgICAgICBjYyArKzsNCi0gICAgICAgIHdoaWxlIChjYyA8IGxlbikgew0KLSAgICAgICAgICAgIHZhbHVlICs9IGZyYWN0aW9uX3NjYWxlc1tzY2FsZV0gKiAoc3RyW2NjXSAtICcwJyk7DQotICAgICAgICAgICAgc2NhbGUgKys7DQotICAgICAgICAgICAgaWYgKHNjYWxlID09IHNpemVvZiBmcmFjdGlvbl9zY2FsZXMgLyBzaXplb2YoRlhfRkxPQVQpKSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjYyArKzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gYk5lZ2F0aXZlID8gLXZhbHVlIDogdmFsdWU7DQotfQ0KLXN0YXRpYyBGWF9CT09MIEZYX0lzRGlnaXQoRlhfQllURSBjaCkNCi17DQotICAgIHJldHVybiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgPyBUUlVFIDogRkFMU0U7DQotfQ0KLXN0YXRpYyBGWF9CT09MIEZYX0lzWERpZ2l0KEZYX0JZVEUgY2gpDQotew0KLSAgICByZXR1cm4gKEZYX0lzRGlnaXQoY2gpIHx8IChjaCA+PSAnQScgJiYgY2ggPD0gJ0YnKSB8fCAoY2ggPj0gJ2EnICYmIGNoIDw9ICdmJykpID8gVFJVRSA6IEZBTFNFOw0KLX0NCi1zdGF0aWMgRlhfQllURSBGWF9NYWtlVXBwZXIoRlhfQllURSBjaCkNCi17DQotICAgIGlmIChjaCA8ICdhJyB8fCBjaCA+ICd6Jykgew0KLSAgICAgICAgcmV0dXJuIGNoOw0KLSAgICB9DQotICAgIHJldHVybiBjaCAtIDMyOw0KLX0NCi1zdGF0aWMgaW50IEZYX0hleFRvSShGWF9CWVRFIGNoKQ0KLXsNCi0gICAgY2ggPSBGWF9NYWtlVXBwZXIoY2gpOw0KLSAgICByZXR1cm4gRlhfSXNEaWdpdChjaCkgPyAoY2ggLSAnMCcpIDogKGNoIC0gNTUpOw0KLX0NCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB1cmxfZW5jb2RlVGFibGVbMTI4XSA9IHsNCi0gICAgMSwgIDEsICAxLCAgMSwJCTEsICAxLCAgMSwgIDEsDQotICAgIDEsICAxLCAgMSwgIDEsCQkxLCAgMSwgIDEsICAxLA0KLSAgICAxLCAgMSwgIDEsICAxLAkJMSwgIDEsICAxLCAgMSwNCi0gICAgMSwgIDEsICAxLCAgMSwJCTEsICAxLCAgMSwgIDEsDQotICAgIDEsICAwLCAgMSwgIDEsCQkwLCAgMSwgIDAsICAwLA0KLSAgICAwLCAgMCwgIDAsICAwLAkJMCwgIDAsICAwLCAgMCwNCi0gICAgMCwgIDAsICAwLCAgMCwJCTAsICAwLCAgMCwgIDAsDQotICAgIDAsICAwLCAgMCwgIDAsCQkxLCAgMCwgIDEsICAwLA0KLSAgICAwLCAgMCwgIDAsICAwLAkJMCwgIDAsICAwLCAgMCwNCi0gICAgMCwgIDAsICAwLCAgMCwJCTAsICAwLCAgMCwgIDAsDQotICAgIDAsICAwLCAgMCwgIDAsCQkwLCAgMCwgIDAsICAwLA0KLSAgICAwLCAgMCwgIDAsICAxLAkJMSwgIDEsICAxLCAgMCwNCi0gICAgMSwgIDAsICAwLCAgMCwJCTAsICAwLCAgMCwgIDAsDQotICAgIDAsICAwLCAgMCwgIDAsCQkwLCAgMCwgIDAsICAwLA0KLSAgICAwLCAgMCwgIDAsICAwLAkJMCwgIDAsICAwLCAgMCwNCi0gICAgMCwgIDAsICAwLCAgMSwJCTEsICAxLCAgMSwgIDEsDQotfTsNCi1DRlhfQnl0ZVN0cmluZyBGWF9VcmxFbmNvZGUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHdzVXJsKQ0KLXsNCi0gICAgY29uc3QgY2hhciBhckRpZ2l0c1tdID0gIjAxMjM0NTY3ODlBQkNERUYiOw0KLSAgICBDRlhfQnl0ZVN0cmluZyByVXJsOw0KLSAgICBpbnQgbkxlbmd0aCA9IHdzVXJsLkdldExlbmd0aCgpOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5MZW5ndGg7IGkrKykgew0KLSAgICAgICAgRlhfRFdPUkQgd29yZCA9IHdzVXJsLkdldEF0KGkpOw0KLSAgICAgICAgaWYgKHdvcmQgPiAweDdGIHx8IHVybF9lbmNvZGVUYWJsZVt3b3JkXSA9PSAxKSB7DQotICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgYnNVcmkgPSBDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUoKEZYX1dPUkQpd29yZCk7DQotICAgICAgICAgICAgaW50IG5CeXRlID0gYnNVcmkuR2V0TGVuZ3RoKCk7DQotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuQnl0ZTsgaisrKSB7DQotICAgICAgICAgICAgICAgIHJVcmwgKz0gJyUnOw0KLSAgICAgICAgICAgICAgICBGWF9CWVRFIGNvZGUgPSBic1VyaS5HZXRBdChqKTsNCi0gICAgICAgICAgICAgICAgclVybCArPSBhckRpZ2l0c1tjb2RlID4+IDRdOw0KLSAgICAgICAgICAgICAgICByVXJsICs9IGFyRGlnaXRzW2NvZGUgJiAweDBGXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHJVcmwgKz0gQ0ZYX0J5dGVTdHJpbmc6OkZyb21Vbmljb2RlKChGWF9XT1JEKXdvcmQpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiByVXJsOw0KLX0NCi1DRlhfV2lkZVN0cmluZyBGWF9VcmxEZWNvZGUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGJzVXJsKQ0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgclVybDsNCi0gICAgaW50IG5MZW5ndGggPSBic1VybC5HZXRMZW5ndGgoKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuTGVuZ3RoOyBpKyspIHsNCi0gICAgICAgIGlmIChpIDwgbkxlbmd0aCAtIDIgJiYgYnNVcmxbaV0gPT0gJyUnICYmIEZYX0lzWERpZ2l0KGJzVXJsW2kgKyAxXSkgJiYgRlhfSXNYRGlnaXQoYnNVcmxbaSArIDJdKSkgew0KLSAgICAgICAgICAgIHJVcmwgKz0gKEZYX0hleFRvSShic1VybFtpICsgMV0pIDw8IDQgfCBGWF9IZXhUb0koYnNVcmxbaSArIDJdKSk7DQotICAgICAgICAgICAgaSArPSAyOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICByVXJsICs9IGJzVXJsW2ldOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKHJVcmwpOw0KLX0NCi1DRlhfQnl0ZVN0cmluZyBGWF9FbmNvZGVVUkkoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHdzVVJJKQ0KLXsNCi0gICAgY29uc3QgY2hhciBhckRpZ2l0c1tdID0gIjAxMjM0NTY3ODlBQkNERUYiOw0KLSAgICBDRlhfQnl0ZVN0cmluZyByVVJJOw0KLSAgICBDRlhfQnl0ZVN0cmluZyBic1VyaSA9IHdzVVJJLlVURjhFbmNvZGUoKTsNCi0gICAgaW50IG5MZW5ndGggPSBic1VyaS5HZXRMZW5ndGgoKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuTGVuZ3RoOyBpKyspIHsNCi0gICAgICAgIEZYX0JZVEUgY29kZSA9IGJzVXJpLkdldEF0KGkpOw0KLSAgICAgICAgaWYgKGNvZGUgPiAweDdGIHx8IHVybF9lbmNvZGVUYWJsZVtjb2RlXSA9PSAxKSB7DQotICAgICAgICAgICAgclVSSSArPSAnJSc7DQotICAgICAgICAgICAgclVSSSArPSBhckRpZ2l0c1tjb2RlID4+IDRdOw0KLSAgICAgICAgICAgIHJVUkkgKz0gYXJEaWdpdHNbY29kZSAmIDB4MEZdOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICByVVJJICs9IGNvZGU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIHJVUkk7DQotfQ0KLUNGWF9XaWRlU3RyaW5nIEZYX0RlY29kZVVSSShjb25zdCBDRlhfQnl0ZVN0cmluZyYgYnNVUkkpDQotew0KLSAgICBDRlhfQnl0ZVN0cmluZyByVVJJOw0KLSAgICBpbnQgbkxlbmd0aCA9IGJzVVJJLkdldExlbmd0aCgpOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5MZW5ndGg7IGkrKykgew0KLSAgICAgICAgaWYgKGkgPCBuTGVuZ3RoIC0gMiAmJiBic1VSSVtpXSA9PSAnJScgJiYgRlhfSXNYRGlnaXQoYnNVUklbaSArIDFdKSAmJiBGWF9Jc1hEaWdpdChic1VSSVtpICsgMl0pKSB7DQotICAgICAgICAgICAgclVSSSArPSAoRlhfSGV4VG9JKGJzVVJJW2kgKyAxXSkgPDwgNCB8IEZYX0hleFRvSShic1VSSVtpICsgMl0pKTsNCi0gICAgICAgICAgICBpICs9IDI7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHJVUkkgKz0gYnNVUklbaV07DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nOjpGcm9tVVRGOChyVVJJKTsNCi19DQotI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18NCi1jbGFzcyBDRmluZEZpbGVEYXRhIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICB2aXJ0dWFsIH5DRmluZEZpbGVEYXRhKCkge30NCi0gICAgSEFORExFCQkJCW1fSGFuZGxlOw0KLSAgICBGWF9CT09MCQkJCW1fYkVuZDsNCi19Ow0KLWNsYXNzIENGaW5kRmlsZURhdGFBIDogcHVibGljIENGaW5kRmlsZURhdGENCi17DQotcHVibGljOg0KLSAgICB2aXJ0dWFsIH5DRmluZEZpbGVEYXRhQSgpIHt9DQotICAgIFdJTjMyX0ZJTkRfREFUQUEJbV9GaW5kRGF0YTsNCi19Ow0KLWNsYXNzIENGaW5kRmlsZURhdGFXIDogcHVibGljIENGaW5kRmlsZURhdGENCi17DQotcHVibGljOg0KLSAgICB2aXJ0dWFsIH5DRmluZEZpbGVEYXRhVygpIHt9DQotICAgIFdJTjMyX0ZJTkRfREFUQVcJbV9GaW5kRGF0YTsNCi19Ow0KLSNlbmRpZg0KLXZvaWQqIEZYX09wZW5Gb2xkZXIoRlhfTFBDU1RSIHBhdGgpDQotew0KLSNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfDQotI2lmbmRlZiBfV0lOMzJfV0NFDQotICAgIENGaW5kRmlsZURhdGFBKiBwRGF0YSA9IEZYX05FVyBDRmluZEZpbGVEYXRhQTsNCi0gICAgaWYgKCFwRGF0YSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0jaWZkZWYgX0ZYX1dJTkFQSV9QQVJUSVRJT05fREVTS1RPUF8NCi0gICAgcERhdGEtPm1fSGFuZGxlID0gRmluZEZpcnN0RmlsZUEoQ0ZYX0J5dGVTdHJpbmcocGF0aCkgKyAiLyouKiIsICZwRGF0YS0+bV9GaW5kRGF0YSk7DQotI2Vsc2UNCi0gICAgcERhdGEtPm1fSGFuZGxlID0gRmluZEZpcnN0RmlsZUV4QShDRlhfQnl0ZVN0cmluZyhwYXRoKSArICIvKi4qIiwgRmluZEV4SW5mb1N0YW5kYXJkLCAmcERhdGEtPm1fRmluZERhdGEsIEZpbmRFeFNlYXJjaE5hbWVNYXRjaCwgTlVMTCwgMCk7DQotI2VuZGlmDQotI2Vsc2UNCi0gICAgQ0ZpbmRGaWxlRGF0YVcqIHBEYXRhID0gRlhfTkVXIENGaW5kRmlsZURhdGFXOw0KLSAgICBpZiAoIXBEYXRhKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBwRGF0YS0+bV9IYW5kbGUgPSBGaW5kRmlyc3RGaWxlVyhDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKHBhdGgpICsgTCIvKi4qIiwgJnBEYXRhLT5tX0ZpbmREYXRhKTsNCi0jZW5kaWYNCi0gICAgaWYgKHBEYXRhLT5tX0hhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgew0KLSAgICAgICAgZGVsZXRlIHBEYXRhOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcERhdGEtPm1fYkVuZCA9IEZBTFNFOw0KLSAgICByZXR1cm4gcERhdGE7DQotI2Vsc2UNCi0gICAgRElSKiBkaXIgPSBvcGVuZGlyKHBhdGgpOw0KLSAgICByZXR1cm4gZGlyOw0KLSNlbmRpZg0KLX0NCi12b2lkKiBGWF9PcGVuRm9sZGVyKEZYX0xQQ1dTVFIgcGF0aCkNCi17DQotI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18NCi0gICAgQ0ZpbmRGaWxlRGF0YVcqIHBEYXRhID0gRlhfTkVXIENGaW5kRmlsZURhdGFXOw0KLSAgICBpZiAoIXBEYXRhKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSNpZmRlZiBfRlhfV0lOQVBJX1BBUlRJVElPTl9ERVNLVE9QXw0KLSAgICBwRGF0YS0+bV9IYW5kbGUgPSBGaW5kRmlyc3RGaWxlVyhDRlhfV2lkZVN0cmluZyhwYXRoKSArIEwiLyouKiIsICZwRGF0YS0+bV9GaW5kRGF0YSk7DQotI2Vsc2UNCi0gICAgcERhdGEtPm1fSGFuZGxlID0gRmluZEZpcnN0RmlsZUV4VyhDRlhfV2lkZVN0cmluZyhwYXRoKSArIEwiLyouKiIsIEZpbmRFeEluZm9TdGFuZGFyZCwgJnBEYXRhLT5tX0ZpbmREYXRhLCBGaW5kRXhTZWFyY2hOYW1lTWF0Y2gsIE5VTEwsIDApOw0KLSNlbmRpZg0KLSAgICBpZiAocERhdGEtPm1fSGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7DQotICAgICAgICBkZWxldGUgcERhdGE7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBwRGF0YS0+bV9iRW5kID0gRkFMU0U7DQotICAgIHJldHVybiBwRGF0YTsNCi0jZWxzZQ0KLSAgICBESVIqIGRpciA9IG9wZW5kaXIoQ0ZYX0J5dGVTdHJpbmc6OkZyb21Vbmljb2RlKHBhdGgpKTsNCi0gICAgcmV0dXJuIGRpcjsNCi0jZW5kaWYNCi19DQotRlhfQk9PTCBGWF9HZXROZXh0RmlsZSh2b2lkKiBoYW5kbGUsIENGWF9CeXRlU3RyaW5nJiBmaWxlbmFtZSwgRlhfQk9PTCYgYkZvbGRlcikNCi17DQotICAgIGlmIChoYW5kbGUgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18NCi0jaWZuZGVmIF9XSU4zMl9XQ0UNCi0gICAgQ0ZpbmRGaWxlRGF0YUEqIHBEYXRhID0gKENGaW5kRmlsZURhdGFBKiloYW5kbGU7DQotICAgIGlmIChwRGF0YS0+bV9iRW5kKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgZmlsZW5hbWUgPSBwRGF0YS0+bV9GaW5kRGF0YS5jRmlsZU5hbWU7DQotICAgIGJGb2xkZXIgPSBwRGF0YS0+bV9GaW5kRGF0YS5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZOw0KLSAgICBpZiAoIUZpbmROZXh0RmlsZUEocERhdGEtPm1fSGFuZGxlLCAmcERhdGEtPm1fRmluZERhdGEpKSB7DQotICAgICAgICBwRGF0YS0+bV9iRW5kID0gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi0jZWxzZQ0KLSAgICBDRmluZEZpbGVEYXRhVyogcERhdGEgPSAoQ0ZpbmRGaWxlRGF0YVcqKWhhbmRsZTsNCi0gICAgaWYgKHBEYXRhLT5tX2JFbmQpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBmaWxlbmFtZSA9IENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShwRGF0YS0+bV9GaW5kRGF0YS5jRmlsZU5hbWUpOw0KLSAgICBiRm9sZGVyID0gcERhdGEtPm1fRmluZERhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWTsNCi0gICAgaWYgKCFGaW5kTmV4dEZpbGVXKHBEYXRhLT5tX0hhbmRsZSwgJnBEYXRhLT5tX0ZpbmREYXRhKSkgew0KLSAgICAgICAgcERhdGEtPm1fYkVuZCA9IFRSVUU7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotI2VuZGlmDQotI2VsaWYgZGVmaW5lZChfX25hdGl2ZV9jbGllbnRfXykNCi0gICAgYWJvcnQoKTsNCi0gICAgcmV0dXJuIEZBTFNFOw0KLSNlbHNlDQotICAgIHN0cnVjdCBkaXJlbnQgKmRlID0gcmVhZGRpcigoRElSKiloYW5kbGUpOw0KLSAgICBpZiAoZGUgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGZpbGVuYW1lID0gZGUtPmRfbmFtZTsNCi0gICAgYkZvbGRlciA9IGRlLT5kX3R5cGUgPT0gRFRfRElSOw0KLSAgICByZXR1cm4gVFJVRTsNCi0jZW5kaWYNCi19DQotRlhfQk9PTCBGWF9HZXROZXh0RmlsZSh2b2lkKiBoYW5kbGUsIENGWF9XaWRlU3RyaW5nJiBmaWxlbmFtZSwgRlhfQk9PTCYgYkZvbGRlcikNCi17DQotICAgIGlmIChoYW5kbGUgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18NCi0gICAgQ0ZpbmRGaWxlRGF0YVcqIHBEYXRhID0gKENGaW5kRmlsZURhdGFXKiloYW5kbGU7DQotICAgIGlmIChwRGF0YS0+bV9iRW5kKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgZmlsZW5hbWUgPSBwRGF0YS0+bV9GaW5kRGF0YS5jRmlsZU5hbWU7DQotICAgIGJGb2xkZXIgPSBwRGF0YS0+bV9GaW5kRGF0YS5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZOw0KLSAgICBpZiAoIUZpbmROZXh0RmlsZVcocERhdGEtPm1fSGFuZGxlLCAmcERhdGEtPm1fRmluZERhdGEpKSB7DQotICAgICAgICBwRGF0YS0+bV9iRW5kID0gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi0jZWxpZiBkZWZpbmVkKF9fbmF0aXZlX2NsaWVudF9fKQ0KLSAgICBhYm9ydCgpOw0KLSAgICByZXR1cm4gRkFMU0U7DQotI2Vsc2UNCi0gICAgc3RydWN0IGRpcmVudCAqZGUgPSByZWFkZGlyKChESVIqKWhhbmRsZSk7DQotICAgIGlmIChkZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgZmlsZW5hbWUgPSBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKGRlLT5kX25hbWUpOw0KLSAgICBiRm9sZGVyID0gZGUtPmRfdHlwZSA9PSBEVF9ESVI7DQotICAgIHJldHVybiBUUlVFOw0KLSNlbmRpZg0KLX0NCi12b2lkIEZYX0Nsb3NlRm9sZGVyKHZvaWQqIGhhbmRsZSkNCi17DQotICAgIGlmIChoYW5kbGUgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18NCi0gICAgQ0ZpbmRGaWxlRGF0YSogcERhdGEgPSAoQ0ZpbmRGaWxlRGF0YSopaGFuZGxlOw0KLSAgICBGaW5kQ2xvc2UocERhdGEtPm1fSGFuZGxlKTsNCi0gICAgZGVsZXRlIHBEYXRhOw0KLSNlbHNlDQotICAgIGNsb3NlZGlyKChESVIqKWhhbmRsZSk7DQotI2VuZGlmDQotfQ0KLUZYX1dDSEFSIEZYX0dldEZvbGRlclNlcGFyYXRvcigpDQotew0KLSNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfDQotICAgIHJldHVybiAnXFwnOw0KLSNlbHNlDQotICAgIHJldHVybiAnLyc7DQotI2VuZGlmDQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2Jhc2ljLmgiCisjaWYgX0ZYTV9QTEFURk9STV8gIT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2Vsc2UKKyNpbmNsdWRlIDxkaXJlY3QuaD4KKyNlbmRpZgorQ0ZYX1ByaXZhdGVEYXRhOjp+Q0ZYX1ByaXZhdGVEYXRhKCkKK3sKKyAgICBDbGVhckFsbCgpOworfQordm9pZCBGWF9QUklWQVRFREFUQTo6RnJlZURhdGEoKQoreworICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9iU2VsZkRlc3RydWN0KSB7CisgICAgICAgIGRlbGV0ZSAoQ0ZYX0Rlc3RydWN0T2JqZWN0KiltX3BEYXRhOworICAgIH0gZWxzZSBpZiAobV9wQ2FsbGJhY2spIHsKKyAgICAgICAgbV9wQ2FsbGJhY2sobV9wRGF0YSk7CisgICAgfQorfQordm9pZCBDRlhfUHJpdmF0ZURhdGE6OkFkZERhdGEoRlhfTFBWT0lEIHBNb2R1bGVJZCwgRlhfTFBWT0lEIHBEYXRhLCBQRF9DQUxMQkFDS19GUkVFREFUQSBjYWxsYmFjaywgRlhfQk9PTCBiU2VsZkRlc3RydWN0KQoreworICAgIGlmIChwTW9kdWxlSWQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX1BSSVZBVEVEQVRBKiBwTGlzdCA9IG1fRGF0YUxpc3QuR2V0RGF0YSgpOworICAgIGludCBjb3VudCA9IG1fRGF0YUxpc3QuR2V0U2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkgKyspIHsKKyAgICAgICAgaWYgKHBMaXN0W2ldLm1fcE1vZHVsZUlkID09IHBNb2R1bGVJZCkgeworICAgICAgICAgICAgcExpc3RbaV0uRnJlZURhdGEoKTsKKyAgICAgICAgICAgIHBMaXN0W2ldLm1fcERhdGEgPSBwRGF0YTsKKyAgICAgICAgICAgIHBMaXN0W2ldLm1fcENhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgRlhfUFJJVkFURURBVEEgZGF0YSA9IHtwTW9kdWxlSWQsIHBEYXRhLCBjYWxsYmFjaywgYlNlbGZEZXN0cnVjdH07CisgICAgbV9EYXRhTGlzdC5BZGQoZGF0YSk7Cit9Cit2b2lkIENGWF9Qcml2YXRlRGF0YTo6U2V0UHJpdmF0ZURhdGEoRlhfTFBWT0lEIHBNb2R1bGVJZCwgRlhfTFBWT0lEIHBEYXRhLCBQRF9DQUxMQkFDS19GUkVFREFUQSBjYWxsYmFjaykKK3sKKyAgICBBZGREYXRhKHBNb2R1bGVJZCwgcERhdGEsIGNhbGxiYWNrLCBGQUxTRSk7Cit9Cit2b2lkIENGWF9Qcml2YXRlRGF0YTo6U2V0UHJpdmF0ZU9iaihGWF9MUFZPSUQgcE1vZHVsZUlkLCBDRlhfRGVzdHJ1Y3RPYmplY3QqIHBPYmopCit7CisgICAgQWRkRGF0YShwTW9kdWxlSWQsIHBPYmosIE5VTEwsIFRSVUUpOworfQorRlhfQk9PTCBDRlhfUHJpdmF0ZURhdGE6OlJlbW92ZVByaXZhdGVEYXRhKEZYX0xQVk9JRCBwTW9kdWxlSWQpCit7CisgICAgaWYgKHBNb2R1bGVJZCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgRlhfUFJJVkFURURBVEEqIHBMaXN0ID0gbV9EYXRhTGlzdC5HZXREYXRhKCk7CisgICAgaW50IGNvdW50ID0gbV9EYXRhTGlzdC5HZXRTaXplKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSArKykgeworICAgICAgICBpZiAocExpc3RbaV0ubV9wTW9kdWxlSWQgPT0gcE1vZHVsZUlkKSB7CisgICAgICAgICAgICBtX0RhdGFMaXN0LlJlbW92ZUF0KGkpOworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorRlhfTFBWT0lEIENGWF9Qcml2YXRlRGF0YTo6R2V0UHJpdmF0ZURhdGEoRlhfTFBWT0lEIHBNb2R1bGVJZCkKK3sKKyAgICBpZiAocE1vZHVsZUlkID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIEZYX1BSSVZBVEVEQVRBKiBwTGlzdCA9IG1fRGF0YUxpc3QuR2V0RGF0YSgpOworICAgIGludCBjb3VudCA9IG1fRGF0YUxpc3QuR2V0U2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkgKyspIHsKKyAgICAgICAgaWYgKHBMaXN0W2ldLm1fcE1vZHVsZUlkID09IHBNb2R1bGVJZCkgeworICAgICAgICAgICAgcmV0dXJuIHBMaXN0W2ldLm1fcERhdGE7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9Cit2b2lkIENGWF9Qcml2YXRlRGF0YTo6Q2xlYXJBbGwoKQoreworICAgIEZYX1BSSVZBVEVEQVRBKiBwTGlzdCA9IG1fRGF0YUxpc3QuR2V0RGF0YSgpOworICAgIGludCBjb3VudCA9IG1fRGF0YUxpc3QuR2V0U2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkgKyspIHsKKyAgICAgICAgcExpc3RbaV0uRnJlZURhdGEoKTsKKyAgICB9CisgICAgbV9EYXRhTGlzdC5SZW1vdmVBbGwoKTsKK30KK3ZvaWQgRlhfYXRvbnVtKEZYX0JTVFIgc3RyYywgRlhfQk9PTCYgYkludGVnZXIsIHZvaWQqIHBEYXRhKQoreworICAgIGlmIChGWFNZU19tZW1jaHIoc3RyYy5HZXRQdHIoKSwgJy4nLCBzdHJjLkdldExlbmd0aCgpKSA9PSBOVUxMKSB7CisgICAgICAgIGJJbnRlZ2VyID0gVFJVRTsKKyAgICAgICAgaW50IGNjID0gMCwgaW50ZWdlciA9IDA7CisgICAgICAgIEZYX0xQQ1NUUiBzdHIgPSBzdHJjLkdldENTdHIoKTsKKyAgICAgICAgaW50IGxlbiA9IHN0cmMuR2V0TGVuZ3RoKCk7CisgICAgICAgIEZYX0JPT0wgYk5lZ2F0aXZlID0gRkFMU0U7CisgICAgICAgIGlmIChzdHJbMF0gPT0gJysnKSB7CisgICAgICAgICAgICBjYysrOworICAgICAgICB9IGVsc2UgaWYgKHN0clswXSA9PSAnLScpIHsKKyAgICAgICAgICAgIGJOZWdhdGl2ZSA9IFRSVUU7CisgICAgICAgICAgICBjYysrOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChjYyA8IGxlbikgeworICAgICAgICAgICAgaWYgKHN0cltjY10gPCAnMCcgfHwgc3RyW2NjXSA+ICc5JykgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50ZWdlciA9IGludGVnZXIgKiAxMCArIHN0cltjY10gLSAnMCc7CisgICAgICAgICAgICBpZiAoaW50ZWdlciA8IDApIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNjICsrOworICAgICAgICB9CisgICAgICAgIGlmIChiTmVnYXRpdmUpIHsKKyAgICAgICAgICAgIGludGVnZXIgPSAtaW50ZWdlcjsKKyAgICAgICAgfQorICAgICAgICAqKGludCopcERhdGEgPSBpbnRlZ2VyOworICAgIH0gZWxzZSB7CisgICAgICAgIGJJbnRlZ2VyID0gRkFMU0U7CisgICAgICAgICooRlhfRkxPQVQqKXBEYXRhID0gRlhfYXRvZihzdHJjKTsKKyAgICB9Cit9CitGWF9GTE9BVCBGWF9hdG9mKEZYX0JTVFIgc3RyYykKK3sKKyAgICBpZiAoc3RyYy5HZXRMZW5ndGgoKSA9PSAwKSB7CisgICAgICAgIHJldHVybiAwLjA7CisgICAgfQorICAgIGludCBjYyA9IDA7CisgICAgRlhfQk9PTCBiTmVnYXRpdmUgPSBGQUxTRTsKKyAgICBGWF9MUENTVFIgc3RyID0gc3RyYy5HZXRDU3RyKCk7CisgICAgaW50IGxlbiA9IHN0cmMuR2V0TGVuZ3RoKCk7CisgICAgaWYgKHN0clswXSA9PSAnKycpIHsKKyAgICAgICAgY2MrKzsKKyAgICB9IGVsc2UgaWYgKHN0clswXSA9PSAnLScpIHsKKyAgICAgICAgYk5lZ2F0aXZlID0gVFJVRTsKKyAgICAgICAgY2MrKzsKKyAgICB9CisgICAgd2hpbGUgKGNjIDwgbGVuKSB7CisgICAgICAgIGlmIChzdHJbY2NdICE9ICcrJyAmJiBzdHJbY2NdICE9ICctJykgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2MgKys7CisgICAgfQorICAgIEZYX0ZMT0FUIHZhbHVlID0gMDsKKyAgICB3aGlsZSAoY2MgPCBsZW4pIHsKKyAgICAgICAgaWYgKHN0cltjY10gPT0gJy4nKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICB2YWx1ZSA9IHZhbHVlICogMTAgKyBzdHJbY2NdIC0gJzAnOworICAgICAgICBjYyArKzsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IEZYX0ZMT0FUIGZyYWN0aW9uX3NjYWxlc1tdID0gezAuMWYsIDAuMDFmLCAwLjAwMWYsIDAuMDAwMWYsIDAuMDAwMDFmLCAwLjAwMDAwMWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMDAwMDAwMWYsIDAuMDAwMDAwMDFmLCAwLjAwMDAwMDAwMWYsIDAuMDAwMDAwMDAwMWYsIDAuMDAwMDAwMDAwMDFmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICBpbnQgc2NhbGUgPSAwOworICAgIGlmIChjYyA8IGxlbiAmJiBzdHJbY2NdID09ICcuJykgeworICAgICAgICBjYyArKzsKKyAgICAgICAgd2hpbGUgKGNjIDwgbGVuKSB7CisgICAgICAgICAgICB2YWx1ZSArPSBmcmFjdGlvbl9zY2FsZXNbc2NhbGVdICogKHN0cltjY10gLSAnMCcpOworICAgICAgICAgICAgc2NhbGUgKys7CisgICAgICAgICAgICBpZiAoc2NhbGUgPT0gc2l6ZW9mIGZyYWN0aW9uX3NjYWxlcyAvIHNpemVvZihGWF9GTE9BVCkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNjICsrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBiTmVnYXRpdmUgPyAtdmFsdWUgOiB2YWx1ZTsKK30KK3N0YXRpYyBGWF9CT09MIEZYX0lzRGlnaXQoRlhfQllURSBjaCkKK3sKKyAgICByZXR1cm4gKGNoID49ICcwJyAmJiBjaCA8PSAnOScpID8gVFJVRSA6IEZBTFNFOworfQorc3RhdGljIEZYX0JPT0wgRlhfSXNYRGlnaXQoRlhfQllURSBjaCkKK3sKKyAgICByZXR1cm4gKEZYX0lzRGlnaXQoY2gpIHx8IChjaCA+PSAnQScgJiYgY2ggPD0gJ0YnKSB8fCAoY2ggPj0gJ2EnICYmIGNoIDw9ICdmJykpID8gVFJVRSA6IEZBTFNFOworfQorc3RhdGljIEZYX0JZVEUgRlhfTWFrZVVwcGVyKEZYX0JZVEUgY2gpCit7CisgICAgaWYgKGNoIDwgJ2EnIHx8IGNoID4gJ3onKSB7CisgICAgICAgIHJldHVybiBjaDsKKyAgICB9CisgICAgcmV0dXJuIGNoIC0gMzI7Cit9CitzdGF0aWMgaW50IEZYX0hleFRvSShGWF9CWVRFIGNoKQoreworICAgIGNoID0gRlhfTWFrZVVwcGVyKGNoKTsKKyAgICByZXR1cm4gRlhfSXNEaWdpdChjaCkgPyAoY2ggLSAnMCcpIDogKGNoIC0gNTUpOworfQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgdXJsX2VuY29kZVRhYmxlWzEyOF0gPSB7CisgICAgMSwgIDEsICAxLCAgMSwJCTEsICAxLCAgMSwgIDEsCisgICAgMSwgIDEsICAxLCAgMSwJCTEsICAxLCAgMSwgIDEsCisgICAgMSwgIDEsICAxLCAgMSwJCTEsICAxLCAgMSwgIDEsCisgICAgMSwgIDEsICAxLCAgMSwJCTEsICAxLCAgMSwgIDEsCisgICAgMSwgIDAsICAxLCAgMSwJCTAsICAxLCAgMCwgIDAsCisgICAgMCwgIDAsICAwLCAgMCwJCTAsICAwLCAgMCwgIDAsCisgICAgMCwgIDAsICAwLCAgMCwJCTAsICAwLCAgMCwgIDAsCisgICAgMCwgIDAsICAwLCAgMCwJCTEsICAwLCAgMSwgIDAsCisgICAgMCwgIDAsICAwLCAgMCwJCTAsICAwLCAgMCwgIDAsCisgICAgMCwgIDAsICAwLCAgMCwJCTAsICAwLCAgMCwgIDAsCisgICAgMCwgIDAsICAwLCAgMCwJCTAsICAwLCAgMCwgIDAsCisgICAgMCwgIDAsICAwLCAgMSwJCTEsICAxLCAgMSwgIDAsCisgICAgMSwgIDAsICAwLCAgMCwJCTAsICAwLCAgMCwgIDAsCisgICAgMCwgIDAsICAwLCAgMCwJCTAsICAwLCAgMCwgIDAsCisgICAgMCwgIDAsICAwLCAgMCwJCTAsICAwLCAgMCwgIDAsCisgICAgMCwgIDAsICAwLCAgMSwJCTEsICAxLCAgMSwgIDEsCit9OworQ0ZYX0J5dGVTdHJpbmcgRlhfVXJsRW5jb2RlKGNvbnN0IENGWF9XaWRlU3RyaW5nJiB3c1VybCkKK3sKKyAgICBjb25zdCBjaGFyIGFyRGlnaXRzW10gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7CisgICAgQ0ZYX0J5dGVTdHJpbmcgclVybDsKKyAgICBpbnQgbkxlbmd0aCA9IHdzVXJsLkdldExlbmd0aCgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkxlbmd0aDsgaSsrKSB7CisgICAgICAgIEZYX0RXT1JEIHdvcmQgPSB3c1VybC5HZXRBdChpKTsKKyAgICAgICAgaWYgKHdvcmQgPiAweDdGIHx8IHVybF9lbmNvZGVUYWJsZVt3b3JkXSA9PSAxKSB7CisgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZyBic1VyaSA9IENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZSgoRlhfV09SRCl3b3JkKTsKKyAgICAgICAgICAgIGludCBuQnl0ZSA9IGJzVXJpLkdldExlbmd0aCgpOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuQnl0ZTsgaisrKSB7CisgICAgICAgICAgICAgICAgclVybCArPSAnJSc7CisgICAgICAgICAgICAgICAgRlhfQllURSBjb2RlID0gYnNVcmkuR2V0QXQoaik7CisgICAgICAgICAgICAgICAgclVybCArPSBhckRpZ2l0c1tjb2RlID4+IDRdOworICAgICAgICAgICAgICAgIHJVcmwgKz0gYXJEaWdpdHNbY29kZSAmIDB4MEZdOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgclVybCArPSBDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUoKEZYX1dPUkQpd29yZCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJVcmw7Cit9CitDRlhfV2lkZVN0cmluZyBGWF9VcmxEZWNvZGUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGJzVXJsKQoreworICAgIENGWF9CeXRlU3RyaW5nIHJVcmw7CisgICAgaW50IG5MZW5ndGggPSBic1VybC5HZXRMZW5ndGgoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5MZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoaSA8IG5MZW5ndGggLSAyICYmIGJzVXJsW2ldID09ICclJyAmJiBGWF9Jc1hEaWdpdChic1VybFtpICsgMV0pICYmIEZYX0lzWERpZ2l0KGJzVXJsW2kgKyAyXSkpIHsKKyAgICAgICAgICAgIHJVcmwgKz0gKEZYX0hleFRvSShic1VybFtpICsgMV0pIDw8IDQgfCBGWF9IZXhUb0koYnNVcmxbaSArIDJdKSk7CisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByVXJsICs9IGJzVXJsW2ldOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKHJVcmwpOworfQorQ0ZYX0J5dGVTdHJpbmcgRlhfRW5jb2RlVVJJKGNvbnN0IENGWF9XaWRlU3RyaW5nJiB3c1VSSSkKK3sKKyAgICBjb25zdCBjaGFyIGFyRGlnaXRzW10gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7CisgICAgQ0ZYX0J5dGVTdHJpbmcgclVSSTsKKyAgICBDRlhfQnl0ZVN0cmluZyBic1VyaSA9IHdzVVJJLlVURjhFbmNvZGUoKTsKKyAgICBpbnQgbkxlbmd0aCA9IGJzVXJpLkdldExlbmd0aCgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkxlbmd0aDsgaSsrKSB7CisgICAgICAgIEZYX0JZVEUgY29kZSA9IGJzVXJpLkdldEF0KGkpOworICAgICAgICBpZiAoY29kZSA+IDB4N0YgfHwgdXJsX2VuY29kZVRhYmxlW2NvZGVdID09IDEpIHsKKyAgICAgICAgICAgIHJVUkkgKz0gJyUnOworICAgICAgICAgICAgclVSSSArPSBhckRpZ2l0c1tjb2RlID4+IDRdOworICAgICAgICAgICAgclVSSSArPSBhckRpZ2l0c1tjb2RlICYgMHgwRl07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByVVJJICs9IGNvZGU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJVUkk7Cit9CitDRlhfV2lkZVN0cmluZyBGWF9EZWNvZGVVUkkoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGJzVVJJKQoreworICAgIENGWF9CeXRlU3RyaW5nIHJVUkk7CisgICAgaW50IG5MZW5ndGggPSBic1VSSS5HZXRMZW5ndGgoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5MZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoaSA8IG5MZW5ndGggLSAyICYmIGJzVVJJW2ldID09ICclJyAmJiBGWF9Jc1hEaWdpdChic1VSSVtpICsgMV0pICYmIEZYX0lzWERpZ2l0KGJzVVJJW2kgKyAyXSkpIHsKKyAgICAgICAgICAgIHJVUkkgKz0gKEZYX0hleFRvSShic1VSSVtpICsgMV0pIDw8IDQgfCBGWF9IZXhUb0koYnNVUklbaSArIDJdKSk7CisgICAgICAgICAgICBpICs9IDI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByVVJJICs9IGJzVVJJW2ldOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBDRlhfV2lkZVN0cmluZzo6RnJvbVVURjgoclVSSSk7Cit9CisjaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXworY2xhc3MgQ0ZpbmRGaWxlRGF0YSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q0ZpbmRGaWxlRGF0YSgpIHt9CisgICAgSEFORExFCQkJCW1fSGFuZGxlOworICAgIEZYX0JPT0wJCQkJbV9iRW5kOworfTsKK2NsYXNzIENGaW5kRmlsZURhdGFBIDogcHVibGljIENGaW5kRmlsZURhdGEKK3sKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DRmluZEZpbGVEYXRhQSgpIHt9CisgICAgV0lOMzJfRklORF9EQVRBQQltX0ZpbmREYXRhOworfTsKK2NsYXNzIENGaW5kRmlsZURhdGFXIDogcHVibGljIENGaW5kRmlsZURhdGEKK3sKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DRmluZEZpbGVEYXRhVygpIHt9CisgICAgV0lOMzJfRklORF9EQVRBVwltX0ZpbmREYXRhOworfTsKKyNlbmRpZgordm9pZCogRlhfT3BlbkZvbGRlcihGWF9MUENTVFIgcGF0aCkKK3sKKyNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfCisjaWZuZGVmIF9XSU4zMl9XQ0UKKyAgICBDRmluZEZpbGVEYXRhQSogcERhdGEgPSBGWF9ORVcgQ0ZpbmRGaWxlRGF0YUE7CisgICAgaWYgKCFwRGF0YSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisjaWZkZWYgX0ZYX1dJTkFQSV9QQVJUSVRJT05fREVTS1RPUF8KKyAgICBwRGF0YS0+bV9IYW5kbGUgPSBGaW5kRmlyc3RGaWxlQShDRlhfQnl0ZVN0cmluZyhwYXRoKSArICIvKi4qIiwgJnBEYXRhLT5tX0ZpbmREYXRhKTsKKyNlbHNlCisgICAgcERhdGEtPm1fSGFuZGxlID0gRmluZEZpcnN0RmlsZUV4QShDRlhfQnl0ZVN0cmluZyhwYXRoKSArICIvKi4qIiwgRmluZEV4SW5mb1N0YW5kYXJkLCAmcERhdGEtPm1fRmluZERhdGEsIEZpbmRFeFNlYXJjaE5hbWVNYXRjaCwgTlVMTCwgMCk7CisjZW5kaWYKKyNlbHNlCisgICAgQ0ZpbmRGaWxlRGF0YVcqIHBEYXRhID0gRlhfTkVXIENGaW5kRmlsZURhdGFXOworICAgIGlmICghcERhdGEpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBEYXRhLT5tX0hhbmRsZSA9IEZpbmRGaXJzdEZpbGVXKENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwocGF0aCkgKyBMIi8qLioiLCAmcERhdGEtPm1fRmluZERhdGEpOworI2VuZGlmCisgICAgaWYgKHBEYXRhLT5tX0hhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgICBkZWxldGUgcERhdGE7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwRGF0YS0+bV9iRW5kID0gRkFMU0U7CisgICAgcmV0dXJuIHBEYXRhOworI2Vsc2UKKyAgICBESVIqIGRpciA9IG9wZW5kaXIocGF0aCk7CisgICAgcmV0dXJuIGRpcjsKKyNlbmRpZgorfQordm9pZCogRlhfT3BlbkZvbGRlcihGWF9MUENXU1RSIHBhdGgpCit7CisjaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXworICAgIENGaW5kRmlsZURhdGFXKiBwRGF0YSA9IEZYX05FVyBDRmluZEZpbGVEYXRhVzsKKyAgICBpZiAoIXBEYXRhKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyNpZmRlZiBfRlhfV0lOQVBJX1BBUlRJVElPTl9ERVNLVE9QXworICAgIHBEYXRhLT5tX0hhbmRsZSA9IEZpbmRGaXJzdEZpbGVXKENGWF9XaWRlU3RyaW5nKHBhdGgpICsgTCIvKi4qIiwgJnBEYXRhLT5tX0ZpbmREYXRhKTsKKyNlbHNlCisgICAgcERhdGEtPm1fSGFuZGxlID0gRmluZEZpcnN0RmlsZUV4VyhDRlhfV2lkZVN0cmluZyhwYXRoKSArIEwiLyouKiIsIEZpbmRFeEluZm9TdGFuZGFyZCwgJnBEYXRhLT5tX0ZpbmREYXRhLCBGaW5kRXhTZWFyY2hOYW1lTWF0Y2gsIE5VTEwsIDApOworI2VuZGlmCisgICAgaWYgKHBEYXRhLT5tX0hhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgICBkZWxldGUgcERhdGE7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwRGF0YS0+bV9iRW5kID0gRkFMU0U7CisgICAgcmV0dXJuIHBEYXRhOworI2Vsc2UKKyAgICBESVIqIGRpciA9IG9wZW5kaXIoQ0ZYX0J5dGVTdHJpbmc6OkZyb21Vbmljb2RlKHBhdGgpKTsKKyAgICByZXR1cm4gZGlyOworI2VuZGlmCit9CitGWF9CT09MIEZYX0dldE5leHRGaWxlKHZvaWQqIGhhbmRsZSwgQ0ZYX0J5dGVTdHJpbmcmIGZpbGVuYW1lLCBGWF9CT09MJiBiRm9sZGVyKQoreworICAgIGlmIChoYW5kbGUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18KKyNpZm5kZWYgX1dJTjMyX1dDRQorICAgIENGaW5kRmlsZURhdGFBKiBwRGF0YSA9IChDRmluZEZpbGVEYXRhQSopaGFuZGxlOworICAgIGlmIChwRGF0YS0+bV9iRW5kKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgZmlsZW5hbWUgPSBwRGF0YS0+bV9GaW5kRGF0YS5jRmlsZU5hbWU7CisgICAgYkZvbGRlciA9IHBEYXRhLT5tX0ZpbmREYXRhLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlk7CisgICAgaWYgKCFGaW5kTmV4dEZpbGVBKHBEYXRhLT5tX0hhbmRsZSwgJnBEYXRhLT5tX0ZpbmREYXRhKSkgeworICAgICAgICBwRGF0YS0+bV9iRW5kID0gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7CisjZWxzZQorICAgIENGaW5kRmlsZURhdGFXKiBwRGF0YSA9IChDRmluZEZpbGVEYXRhVyopaGFuZGxlOworICAgIGlmIChwRGF0YS0+bV9iRW5kKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgZmlsZW5hbWUgPSBDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUocERhdGEtPm1fRmluZERhdGEuY0ZpbGVOYW1lKTsKKyAgICBiRm9sZGVyID0gcERhdGEtPm1fRmluZERhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWTsKKyAgICBpZiAoIUZpbmROZXh0RmlsZVcocERhdGEtPm1fSGFuZGxlLCAmcERhdGEtPm1fRmluZERhdGEpKSB7CisgICAgICAgIHBEYXRhLT5tX2JFbmQgPSBUUlVFOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKKyNlbmRpZgorI2VsaWYgZGVmaW5lZChfX25hdGl2ZV9jbGllbnRfXykKKyAgICBhYm9ydCgpOworICAgIHJldHVybiBGQUxTRTsKKyNlbHNlCisgICAgc3RydWN0IGRpcmVudCAqZGUgPSByZWFkZGlyKChESVIqKWhhbmRsZSk7CisgICAgaWYgKGRlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBmaWxlbmFtZSA9IGRlLT5kX25hbWU7CisgICAgYkZvbGRlciA9IGRlLT5kX3R5cGUgPT0gRFRfRElSOworICAgIHJldHVybiBUUlVFOworI2VuZGlmCit9CitGWF9CT09MIEZYX0dldE5leHRGaWxlKHZvaWQqIGhhbmRsZSwgQ0ZYX1dpZGVTdHJpbmcmIGZpbGVuYW1lLCBGWF9CT09MJiBiRm9sZGVyKQoreworICAgIGlmIChoYW5kbGUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18KKyAgICBDRmluZEZpbGVEYXRhVyogcERhdGEgPSAoQ0ZpbmRGaWxlRGF0YVcqKWhhbmRsZTsKKyAgICBpZiAocERhdGEtPm1fYkVuZCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGZpbGVuYW1lID0gcERhdGEtPm1fRmluZERhdGEuY0ZpbGVOYW1lOworICAgIGJGb2xkZXIgPSBwRGF0YS0+bV9GaW5kRGF0YS5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZOworICAgIGlmICghRmluZE5leHRGaWxlVyhwRGF0YS0+bV9IYW5kbGUsICZwRGF0YS0+bV9GaW5kRGF0YSkpIHsKKyAgICAgICAgcERhdGEtPm1fYkVuZCA9IFRSVUU7CisgICAgfQorICAgIHJldHVybiBUUlVFOworI2VsaWYgZGVmaW5lZChfX25hdGl2ZV9jbGllbnRfXykKKyAgICBhYm9ydCgpOworICAgIHJldHVybiBGQUxTRTsKKyNlbHNlCisgICAgc3RydWN0IGRpcmVudCAqZGUgPSByZWFkZGlyKChESVIqKWhhbmRsZSk7CisgICAgaWYgKGRlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBmaWxlbmFtZSA9IENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoZGUtPmRfbmFtZSk7CisgICAgYkZvbGRlciA9IGRlLT5kX3R5cGUgPT0gRFRfRElSOworICAgIHJldHVybiBUUlVFOworI2VuZGlmCit9Cit2b2lkIEZYX0Nsb3NlRm9sZGVyKHZvaWQqIGhhbmRsZSkKK3sKKyAgICBpZiAoaGFuZGxlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfCisgICAgQ0ZpbmRGaWxlRGF0YSogcERhdGEgPSAoQ0ZpbmRGaWxlRGF0YSopaGFuZGxlOworICAgIEZpbmRDbG9zZShwRGF0YS0+bV9IYW5kbGUpOworICAgIGRlbGV0ZSBwRGF0YTsKKyNlbHNlCisgICAgY2xvc2VkaXIoKERJUiopaGFuZGxlKTsKKyNlbmRpZgorfQorRlhfV0NIQVIgRlhfR2V0Rm9sZGVyU2VwYXJhdG9yKCkKK3sKKyNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfCisgICAgcmV0dXJuICdcXCc7CisjZWxzZQorICAgIHJldHVybiAnLyc7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y3J0L2Z4X2Jhc2ljX3dzdHJpbmcuY3BwIGIvY29yZS9zcmMvZnhjcnQvZnhfYmFzaWNfd3N0cmluZy5jcHAKaW5kZXggOTAwZjA1OC4uN2FmMzMwMyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjcnQvZnhfYmFzaWNfd3N0cmluZy5jcHAKKysrIGIvY29yZS9zcmMvZnhjcnQvZnhfYmFzaWNfd3N0cmluZy5jcHAKQEAgLTEsMTE2OCArMSwxMTY4IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGNydC9meF9iYXNpYy5oIg0KLXN0YXRpYyBDRlhfU3RyaW5nRGF0YVcqIEZYX0FsbG9jU3RyaW5nVyhpbnQgbkxlbikNCi17DQotICAgIGlmIChuTGVuID09IDApIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENGWF9TdHJpbmdEYXRhVyogcERhdGEgPSAoQ0ZYX1N0cmluZ0RhdGFXKilGWF9BbGxvYyhGWF9CWVRFLCBzaXplb2YobG9uZykgKiAzICsgKG5MZW4gKyAxKSAqIHNpemVvZihGWF9XQ0hBUikpOw0KLSAgICBpZiAoIXBEYXRhKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBwRGF0YS0+bV9uQWxsb2NMZW5ndGggPSBuTGVuOw0KLSAgICBwRGF0YS0+bV9uRGF0YUxlbmd0aCA9IG5MZW47DQotICAgIHBEYXRhLT5tX25SZWZzID0gMTsNCi0gICAgcERhdGEtPm1fU3RyaW5nW25MZW5dID0gMDsNCi0gICAgcmV0dXJuIHBEYXRhOw0KLX0NCi1zdGF0aWMgdm9pZCBGWF9SZWxlYXNlU3RyaW5nVyhDRlhfU3RyaW5nRGF0YVcqIHBEYXRhKQ0KLXsNCi0gICAgaWYgKHBEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBwRGF0YS0+bV9uUmVmcyAtLTsNCi0gICAgaWYgKHBEYXRhLT5tX25SZWZzIDw9IDApIHsNCi0gICAgICAgIEZYX0ZyZWUocERhdGEpOw0KLSAgICB9DQotfQ0KLUNGWF9XaWRlU3RyaW5nOjp+Q0ZYX1dpZGVTdHJpbmcoKQ0KLXsNCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fcERhdGEtPm1fblJlZnMgLS07DQotICAgIGlmIChtX3BEYXRhLT5tX25SZWZzIDwgMSkgew0KLSAgICAgICAgRlhfRnJlZShtX3BEYXRhKTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9XaWRlU3RyaW5nOjpJbml0U3RyKEZYX0xQQ1dTVFIgbHBzeiwgRlhfU1RSU0laRSBuTGVuKQ0KLXsNCi0gICAgaWYgKG5MZW4gPCAwKSB7DQotICAgICAgICBuTGVuID0gbHBzeiA/IChGWF9TVFJTSVpFKUZYU1lTX3djc2xlbihscHN6KSA6IDA7DQotICAgIH0NCi0gICAgaWYgKG5MZW4pIHsNCi0gICAgICAgIG1fcERhdGEgPSBGWF9BbGxvY1N0cmluZ1cobkxlbik7DQotICAgICAgICBpZiAoIW1fcERhdGEpIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhLT5tX1N0cmluZywgbHBzeiwgbkxlbiAqIHNpemVvZihGWF9XQ0hBUikpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wRGF0YSA9IE5VTEw7DQotICAgIH0NCi19DQotQ0ZYX1dpZGVTdHJpbmc6OkNGWF9XaWRlU3RyaW5nKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJpbmdTcmMpDQotew0KLSAgICBpZiAoc3RyaW5nU3JjLm1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgbV9wRGF0YSA9IE5VTEw7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKHN0cmluZ1NyYy5tX3BEYXRhLT5tX25SZWZzID49IDApIHsNCi0gICAgICAgIG1fcERhdGEgPSBzdHJpbmdTcmMubV9wRGF0YTsNCi0gICAgICAgIG1fcERhdGEtPm1fblJlZnMgKys7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBtX3BEYXRhID0gTlVMTDsNCi0gICAgICAgICp0aGlzID0gc3RyaW5nU3JjOw0KLSAgICB9DQotfQ0KLUNGWF9XaWRlU3RyaW5nOjpDRlhfV2lkZVN0cmluZyhGWF9XQ0hBUiBjaCkNCi17DQotICAgIG1fcERhdGEgPSBGWF9BbGxvY1N0cmluZ1coMSk7DQotICAgIGlmIChtX3BEYXRhKSB7DQotICAgICAgICBtX3BEYXRhLT5tX1N0cmluZ1swXSA9IGNoOw0KLSAgICB9DQotfQ0KLUNGWF9XaWRlU3RyaW5nOjpDRlhfV2lkZVN0cmluZyhjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHN0cikNCi17DQotICAgIGlmIChzdHIuSXNFbXB0eSgpKSB7DQotICAgICAgICBtX3BEYXRhID0gTlVMTDsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX3BEYXRhID0gRlhfQWxsb2NTdHJpbmdXKHN0ci5HZXRMZW5ndGgoKSk7DQotICAgIGlmIChtX3BEYXRhKSB7DQotICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhLT5tX1N0cmluZywgc3RyLkdldFB0cigpLCBzdHIuR2V0TGVuZ3RoKCkqc2l6ZW9mKEZYX1dDSEFSKSk7DQotICAgIH0NCi19DQotQ0ZYX1dpZGVTdHJpbmc6OkNGWF9XaWRlU3RyaW5nKGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgc3RyMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzdHIyKQ0KLXsNCi0gICAgbV9wRGF0YSA9IE5VTEw7DQotICAgIGludCBuTmV3TGVuID0gc3RyMS5HZXRMZW5ndGgoKSArIHN0cjIuR2V0TGVuZ3RoKCk7DQotICAgIGlmIChuTmV3TGVuID09IDApIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX3BEYXRhID0gRlhfQWxsb2NTdHJpbmdXKG5OZXdMZW4pOw0KLSAgICBpZiAobV9wRGF0YSkgew0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wRGF0YS0+bV9TdHJpbmcsIHN0cjEuR2V0UHRyKCksIHN0cjEuR2V0TGVuZ3RoKCkqc2l6ZW9mKEZYX1dDSEFSKSk7DQotICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhLT5tX1N0cmluZyArIHN0cjEuR2V0TGVuZ3RoKCksIHN0cjIuR2V0UHRyKCksIHN0cjIuR2V0TGVuZ3RoKCkqc2l6ZW9mKEZYX1dDSEFSKSk7DQotICAgIH0NCi19DQotdm9pZCBDRlhfV2lkZVN0cmluZzo6UmVsZWFzZUJ1ZmZlcihGWF9TVFJTSVpFIG5OZXdMZW5ndGgpDQotew0KLSAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ29weUJlZm9yZVdyaXRlKCk7DQotICAgIGlmIChuTmV3TGVuZ3RoID09IC0xKSB7DQotICAgICAgICBuTmV3TGVuZ3RoID0gbV9wRGF0YSA/IChGWF9TVFJTSVpFKUZYU1lTX3djc2xlbihtX3BEYXRhLT5tX1N0cmluZykgOiAwOw0KLSAgICB9DQotICAgIGlmIChuTmV3TGVuZ3RoID09IDApIHsNCi0gICAgICAgIEVtcHR5KCk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhTWVNfYXNzZXJ0KG5OZXdMZW5ndGggPD0gbV9wRGF0YS0+bV9uQWxsb2NMZW5ndGgpOw0KLSAgICBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoID0gbk5ld0xlbmd0aDsNCi0gICAgbV9wRGF0YS0+bV9TdHJpbmdbbk5ld0xlbmd0aF0gPSAwOw0KLX0NCi1jb25zdCBDRlhfV2lkZVN0cmluZyYgQ0ZYX1dpZGVTdHJpbmc6Om9wZXJhdG9yPShGWF9MUENXU1RSIGxwc3opDQotew0KLSAgICBpZiAobHBzeiA9PSBOVUxMIHx8IGxwc3pbMF0gPT0gMCkgew0KLSAgICAgICAgRW1wdHkoKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEFzc2lnbkNvcHkoKEZYX1NUUlNJWkUpRlhTWVNfd2NzbGVuKGxwc3opLCBscHN6KTsNCi0gICAgfQ0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLWNvbnN0IENGWF9XaWRlU3RyaW5nJiBDRlhfV2lkZVN0cmluZzo6b3BlcmF0b3I9KGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgc3RyaW5nU3JjKQ0KLXsNCi0gICAgaWYgKHN0cmluZ1NyYy5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIEVtcHR5KCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBBc3NpZ25Db3B5KHN0cmluZ1NyYy5HZXRMZW5ndGgoKSwgc3RyaW5nU3JjLkdldFB0cigpKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLWNvbnN0IENGWF9XaWRlU3RyaW5nJiBDRlhfV2lkZVN0cmluZzo6b3BlcmF0b3I9KGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJpbmdTcmMpDQotew0KLSAgICBpZiAobV9wRGF0YSA9PSBzdHJpbmdTcmMubV9wRGF0YSkgew0KLSAgICAgICAgcmV0dXJuICp0aGlzOw0KLSAgICB9DQotICAgIGlmIChzdHJpbmdTcmMuSXNFbXB0eSgpKSB7DQotICAgICAgICBFbXB0eSgpOw0KLSAgICB9IGVsc2UgaWYgKChtX3BEYXRhICYmIG1fcERhdGEtPm1fblJlZnMgPCAwKSB8fA0KLSAgICAgICAgICAgICAgIChzdHJpbmdTcmMubV9wRGF0YSAmJiBzdHJpbmdTcmMubV9wRGF0YS0+bV9uUmVmcyA8IDApKSB7DQotICAgICAgICBBc3NpZ25Db3B5KHN0cmluZ1NyYy5tX3BEYXRhLT5tX25EYXRhTGVuZ3RoLCBzdHJpbmdTcmMubV9wRGF0YS0+bV9TdHJpbmcpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgRW1wdHkoKTsNCi0gICAgICAgIG1fcERhdGEgPSBzdHJpbmdTcmMubV9wRGF0YTsNCi0gICAgICAgIGlmIChtX3BEYXRhKSB7DQotICAgICAgICAgICAgbV9wRGF0YS0+bV9uUmVmcyArKzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLWNvbnN0IENGWF9XaWRlU3RyaW5nJiBDRlhfV2lkZVN0cmluZzo6b3BlcmF0b3IrPShGWF9XQ0hBUiBjaCkNCi17DQotICAgIENvbmNhdEluUGxhY2UoMSwgJmNoKTsNCi0gICAgcmV0dXJuICp0aGlzOw0KLX0NCi1jb25zdCBDRlhfV2lkZVN0cmluZyYgQ0ZYX1dpZGVTdHJpbmc6Om9wZXJhdG9yKz0oRlhfTFBDV1NUUiBscHN6KQ0KLXsNCi0gICAgaWYgKGxwc3opIHsNCi0gICAgICAgIENvbmNhdEluUGxhY2UoKEZYX1NUUlNJWkUpRlhTWVNfd2NzbGVuKGxwc3opLCBscHN6KTsNCi0gICAgfQ0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLWNvbnN0IENGWF9XaWRlU3RyaW5nJiBDRlhfV2lkZVN0cmluZzo6b3BlcmF0b3IrPShjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyaW5nKQ0KLXsNCi0gICAgaWYgKHN0cmluZy5tX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAqdGhpczsNCi0gICAgfQ0KLSAgICBDb25jYXRJblBsYWNlKHN0cmluZy5tX3BEYXRhLT5tX25EYXRhTGVuZ3RoLCBzdHJpbmcubV9wRGF0YS0+bV9TdHJpbmcpOw0KLSAgICByZXR1cm4gKnRoaXM7DQotfQ0KLWNvbnN0IENGWF9XaWRlU3RyaW5nJiBDRlhfV2lkZVN0cmluZzo6b3BlcmF0b3IrPShjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHN0cmluZykNCi17DQotICAgIGlmIChzdHJpbmcuSXNFbXB0eSgpKSB7DQotICAgICAgICByZXR1cm4gKnRoaXM7DQotICAgIH0NCi0gICAgQ29uY2F0SW5QbGFjZShzdHJpbmcuR2V0TGVuZ3RoKCksIHN0cmluZy5HZXRQdHIoKSk7DQotICAgIHJldHVybiAqdGhpczsNCi19DQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzMSwgRlhfTFBDV1NUUiBzMikNCi17DQotICAgIHJldHVybiBzMS5FcXVhbChzMik7DQotfQ0KLWJvb2wgb3BlcmF0b3I9PShGWF9MUENXU1RSIHMxLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgczIpDQotew0KLSAgICByZXR1cm4gczIuRXF1YWwoczEpOw0KLX0NCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHMxLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgczIpDQotew0KLSAgICByZXR1cm4gczEuRXF1YWwoczIpOw0KLX0NCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHMxLCBjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHMyKQ0KLXsNCi0gICAgcmV0dXJuIHMxLkVxdWFsKHMyKTsNCi19DQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgczEsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzMikNCi17DQotICAgIHJldHVybiBzMi5FcXVhbChzMSk7DQotfQ0KLWJvb2wgb3BlcmF0b3IgIT0gKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzMSwgRlhfTFBDV1NUUiBzMikNCi17DQotICAgIHJldHVybiAhczEuRXF1YWwoczIpOw0KLX0NCi1ib29sIG9wZXJhdG9yIT0oY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHMxLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgczIpDQotew0KLSAgICByZXR1cm4gIXMxLkVxdWFsKHMyKTsNCi19DQotYm9vbCBvcGVyYXRvciE9KGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzMikNCi17DQotICAgIHJldHVybiAhczEuRXF1YWwoczIpOw0KLX0NCi1ib29sIG9wZXJhdG9yIT0oY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHMyKQ0KLXsNCi0gICAgcmV0dXJuICFzMi5FcXVhbChzMSk7DQotfQ0KLWJvb2wgQ0ZYX1dpZGVTdHJpbmc6OkVxdWFsKGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgc3RyKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIHN0ci5Jc0VtcHR5KCk7DQotICAgIH0NCi0gICAgcmV0dXJuIHN0ci5HZXRMZW5ndGgoKSA9PSBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoICYmDQotICAgICAgICAgICBGWFNZU19tZW1jbXAzMihzdHIuR2V0UHRyKCksIG1fcERhdGEtPm1fU3RyaW5nLCBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoICogc2l6ZW9mKEZYX1dDSEFSKSkgPT0gMDsNCi19DQotdm9pZCBDRlhfV2lkZVN0cmluZzo6RW1wdHkoKQ0KLXsNCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChtX3BEYXRhLT5tX25SZWZzID4gMSkgew0KLSAgICAgICAgbV9wRGF0YS0+bV9uUmVmcyAtLTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wRGF0YSk7DQotICAgIH0NCi0gICAgbV9wRGF0YSA9IE5VTEw7DQotfQ0KLXZvaWQgQ0ZYX1dpZGVTdHJpbmc6OkNvbmNhdEluUGxhY2UoRlhfU1RSU0laRSBuU3JjTGVuLCBGWF9MUENXU1RSIGxwc3pTcmNEYXRhKQ0KLXsNCi0gICAgaWYgKG5TcmNMZW4gPT0gMCB8fCBscHN6U3JjRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgbV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nVyhuU3JjTGVuKTsNCi0gICAgICAgIGlmIChtX3BEYXRhKSB7DQotICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wRGF0YS0+bV9TdHJpbmcsIGxwc3pTcmNEYXRhLCBuU3JjTGVuICogc2l6ZW9mKEZYX1dDSEFSKSk7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKG1fcERhdGEtPm1fblJlZnMgPiAxIHx8IG1fcERhdGEtPm1fbkRhdGFMZW5ndGggKyBuU3JjTGVuID4gbV9wRGF0YS0+bV9uQWxsb2NMZW5ndGgpIHsNCi0gICAgICAgIENGWF9TdHJpbmdEYXRhVyogcE9sZERhdGEgPSBtX3BEYXRhOw0KLSAgICAgICAgQ29uY2F0Q29weShtX3BEYXRhLT5tX25EYXRhTGVuZ3RoLCBtX3BEYXRhLT5tX1N0cmluZywgblNyY0xlbiwgbHBzelNyY0RhdGEpOw0KLSAgICAgICAgRlhfUmVsZWFzZVN0cmluZ1cocE9sZERhdGEpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wRGF0YS0+bV9TdHJpbmcgKyBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoLCBscHN6U3JjRGF0YSwgblNyY0xlbiAqIHNpemVvZihGWF9XQ0hBUikpOw0KLSAgICAgICAgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCArPSBuU3JjTGVuOw0KLSAgICAgICAgbV9wRGF0YS0+bV9TdHJpbmdbbV9wRGF0YS0+bV9uRGF0YUxlbmd0aF0gPSAwOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0ZYX1dpZGVTdHJpbmc6OkNvbmNhdENvcHkoRlhfU1RSU0laRSBuU3JjMUxlbiwgRlhfTFBDV1NUUiBscHN6U3JjMURhdGEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9TVFJTSVpFIG5TcmMyTGVuLCBGWF9MUENXU1RSIGxwc3pTcmMyRGF0YSkNCi17DQotICAgIEZYX1NUUlNJWkUgbk5ld0xlbiA9IG5TcmMxTGVuICsgblNyYzJMZW47DQotICAgIGlmIChuTmV3TGVuID09IDApIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX3BEYXRhID0gRlhfQWxsb2NTdHJpbmdXKG5OZXdMZW4pOw0KLSAgICBpZiAobV9wRGF0YSkgew0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wRGF0YS0+bV9TdHJpbmcsIGxwc3pTcmMxRGF0YSwgblNyYzFMZW4gKiBzaXplb2YoRlhfV0NIQVIpKTsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKG1fcERhdGEtPm1fU3RyaW5nICsgblNyYzFMZW4sIGxwc3pTcmMyRGF0YSwgblNyYzJMZW4gKiBzaXplb2YoRlhfV0NIQVIpKTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9XaWRlU3RyaW5nOjpDb3B5QmVmb3JlV3JpdGUoKQ0KLXsNCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCB8fCBtX3BEYXRhLT5tX25SZWZzIDw9IDEpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDRlhfU3RyaW5nRGF0YVcqIHBEYXRhID0gbV9wRGF0YTsNCi0gICAgbV9wRGF0YS0+bV9uUmVmcyAtLTsNCi0gICAgRlhfU1RSU0laRSBuRGF0YUxlbmd0aCA9IHBEYXRhLT5tX25EYXRhTGVuZ3RoOw0KLSAgICBtX3BEYXRhID0gRlhfQWxsb2NTdHJpbmdXKG5EYXRhTGVuZ3RoKTsNCi0gICAgaWYgKG1fcERhdGEgIT0gTlVMTCkgew0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wRGF0YS0+bV9TdHJpbmcsIHBEYXRhLT5tX1N0cmluZywgKG5EYXRhTGVuZ3RoICsgMSkgKiBzaXplb2YoRlhfV0NIQVIpKTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9XaWRlU3RyaW5nOjpBbGxvY0JlZm9yZVdyaXRlKEZYX1NUUlNJWkUgbkxlbikNCi17DQotICAgIGlmIChtX3BEYXRhICYmIG1fcERhdGEtPm1fblJlZnMgPD0gMSAmJiBtX3BEYXRhLT5tX25BbGxvY0xlbmd0aCA+PSBuTGVuKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRW1wdHkoKTsNCi0gICAgbV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nVyhuTGVuKTsNCi19DQotdm9pZCBDRlhfV2lkZVN0cmluZzo6QXNzaWduQ29weShGWF9TVFJTSVpFIG5TcmNMZW4sIEZYX0xQQ1dTVFIgbHBzelNyY0RhdGEpDQotew0KLSAgICBBbGxvY0JlZm9yZVdyaXRlKG5TcmNMZW4pOw0KLSAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhLT5tX1N0cmluZywgbHBzelNyY0RhdGEsIG5TcmNMZW4gKiBzaXplb2YoRlhfV0NIQVIpKTsNCi0gICAgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCA9IG5TcmNMZW47DQotICAgIG1fcERhdGEtPm1fU3RyaW5nW25TcmNMZW5dID0gMDsNCi19DQotaW50IENGWF9XaWRlU3RyaW5nOjpDb21wYXJlKEZYX0xQQ1dTVFIgbHBzeikgY29uc3QNCi17DQotICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAobHBzeiA9PSBOVUxMIHx8IGxwc3pbMF0gPT0gMCkgPyAwIDogLTE7DQotICAgIH0NCi0gICAgcmV0dXJuIEZYU1lTX3djc2NtcChtX3BEYXRhLT5tX1N0cmluZywgbHBzeik7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENGWF9XaWRlU3RyaW5nOjpVVEY4RW5jb2RlKCkgY29uc3QNCi17DQotICAgIHJldHVybiBGWF9VVEY4RW5jb2RlKCp0aGlzKTsNCi19DQotQ0ZYX0J5dGVTdHJpbmcgQ0ZYX1dpZGVTdHJpbmc6OlVURjE2TEVfRW5jb2RlKEZYX0JPT0wgYlRlcm1pbmF0ZSkgY29uc3QNCi17DQotICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBiVGVybWluYXRlID8gQ0ZYX0J5dGVTdHJpbmcoRlhfQlNUUkMoIlwwXDAiKSkgOiBDRlhfQnl0ZVN0cmluZygpOw0KLSAgICB9DQotICAgIGludCBsZW4gPSBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoOw0KLSAgICBDRlhfQnl0ZVN0cmluZyByZXN1bHQ7DQotICAgIEZYX0xQU1RSIGJ1ZmZlciA9IHJlc3VsdC5HZXRCdWZmZXIobGVuICogMiArIChiVGVybWluYXRlID8gMiA6IDApKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkgKyspIHsNCi0gICAgICAgIGJ1ZmZlcltpICogMl0gPSBtX3BEYXRhLT5tX1N0cmluZ1tpXSAmIDB4ZmY7DQotICAgICAgICBidWZmZXJbaSAqIDIgKyAxXSA9IG1fcERhdGEtPm1fU3RyaW5nW2ldID4+IDg7DQotICAgIH0NCi0gICAgaWYgKGJUZXJtaW5hdGUpIHsNCi0gICAgICAgIGJ1ZmZlcltsZW4gKiAyXSA9IDA7DQotICAgICAgICBidWZmZXJbbGVuICogMiArIDFdID0gMDsNCi0gICAgICAgIHJlc3VsdC5SZWxlYXNlQnVmZmVyKGxlbiAqIDIgKyAyKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHJlc3VsdC5SZWxlYXNlQnVmZmVyKGxlbiAqIDIpOw0KLSAgICB9DQotICAgIHJldHVybiByZXN1bHQ7DQotfQ0KLXZvaWQgQ0ZYX1dpZGVTdHJpbmc6OkNvbnZlcnRGcm9tKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIsIENGWF9DaGFyTWFwKiBwQ2hhck1hcCkNCi17DQotICAgIGlmIChwQ2hhck1hcCA9PSBOVUxMKSB7DQotICAgICAgICBwQ2hhck1hcCA9IENGWF9DaGFyTWFwOjpHZXREZWZhdWx0TWFwcGVyKCk7DQotICAgIH0NCi0gICAgKnRoaXMgPSBwQ2hhck1hcC0+bV9HZXRXaWRlU3RyaW5nKHBDaGFyTWFwLCBzdHIpOw0KLX0NCi12b2lkIENGWF9XaWRlU3RyaW5nOjpSZXNlcnZlKEZYX1NUUlNJWkUgbGVuKQ0KLXsNCi0gICAgR2V0QnVmZmVyKGxlbik7DQotICAgIFJlbGVhc2VCdWZmZXIoR2V0TGVuZ3RoKCkpOw0KLX0NCi1GWF9MUFdTVFIgQ0ZYX1dpZGVTdHJpbmc6OkdldEJ1ZmZlcihGWF9TVFJTSVpFIG5NaW5CdWZMZW5ndGgpDQotew0KLSAgICBpZiAobV9wRGF0YSA9PSBOVUxMICYmIG5NaW5CdWZMZW5ndGggPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKG1fcERhdGEgJiYgbV9wRGF0YS0+bV9uUmVmcyA8PSAxICYmIG1fcERhdGEtPm1fbkFsbG9jTGVuZ3RoID49IG5NaW5CdWZMZW5ndGgpIHsNCi0gICAgICAgIHJldHVybiBtX3BEYXRhLT5tX1N0cmluZzsNCi0gICAgfQ0KLSAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICBtX3BEYXRhID0gRlhfQWxsb2NTdHJpbmdXKG5NaW5CdWZMZW5ndGgpOw0KLSAgICAgICAgaWYgKCFtX3BEYXRhKSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoID0gMDsNCi0gICAgICAgIG1fcERhdGEtPm1fU3RyaW5nWzBdID0gMDsNCi0gICAgICAgIHJldHVybiBtX3BEYXRhLT5tX1N0cmluZzsNCi0gICAgfQ0KLSAgICBDRlhfU3RyaW5nRGF0YVcqIHBPbGREYXRhID0gbV9wRGF0YTsNCi0gICAgRlhfU1RSU0laRSBuT2xkTGVuID0gcE9sZERhdGEtPm1fbkRhdGFMZW5ndGg7DQotICAgIGlmIChuTWluQnVmTGVuZ3RoIDwgbk9sZExlbikgew0KLSAgICAgICAgbk1pbkJ1Zkxlbmd0aCA9IG5PbGRMZW47DQotICAgIH0NCi0gICAgbV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nVyhuTWluQnVmTGVuZ3RoKTsNCi0gICAgaWYgKCFtX3BEYXRhKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhLT5tX1N0cmluZywgcE9sZERhdGEtPm1fU3RyaW5nLCAobk9sZExlbiArIDEpKnNpemVvZihGWF9XQ0hBUikpOw0KLSAgICBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoID0gbk9sZExlbjsNCi0gICAgcE9sZERhdGEtPm1fblJlZnMgLS07DQotICAgIGlmIChwT2xkRGF0YS0+bV9uUmVmcyA8PSAwKSB7DQotICAgICAgICBGWF9GcmVlKHBPbGREYXRhKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wRGF0YS0+bV9TdHJpbmc7DQotfQ0KLUNGWF9XaWRlU3RyaW5nIENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoY29uc3QgY2hhciogc3RyLCBGWF9TVFJTSVpFIGxlbikNCi17DQotICAgIENGWF9XaWRlU3RyaW5nIHJlc3VsdDsNCi0gICAgcmVzdWx0LkNvbnZlcnRGcm9tKENGWF9CeXRlU3RyaW5nKHN0ciwgbGVuKSk7DQotICAgIHJldHVybiByZXN1bHQ7DQotfQ0KLUNGWF9XaWRlU3RyaW5nIENGWF9XaWRlU3RyaW5nOjpGcm9tVVRGOChjb25zdCBjaGFyKiBzdHIsIEZYX1NUUlNJWkUgbGVuKQ0KLXsNCi0gICAgaWYgKCFzdHIpIHsNCi0gICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZygpOw0KLSAgICB9DQotICAgIGlmIChsZW4gPCAwKSB7DQotICAgICAgICBsZW4gPSAwOw0KLSAgICAgICAgd2hpbGUgKHN0cltsZW5dKSB7DQotICAgICAgICAgICAgbGVuICsrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIENGWF9VVEY4RGVjb2RlciBkZWNvZGVyOw0KLSAgICBmb3IgKEZYX1NUUlNJWkUgaSA9IDA7IGkgPCBsZW47IGkgKyspIHsNCi0gICAgICAgIGRlY29kZXIuSW5wdXQoc3RyW2ldKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gZGVjb2Rlci5HZXRSZXN1bHQoKTsNCi19DQotQ0ZYX1dpZGVTdHJpbmcgQ0ZYX1dpZGVTdHJpbmc6OkZyb21VVEYxNkxFKGNvbnN0IHVuc2lnbmVkIHNob3J0KiB3c3RyLCBGWF9TVFJTSVpFIHdsZW4pDQotew0KLSAgICBpZiAoIXdzdHIgfHwgIXdsZW4pIHsNCi0gICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZygpOw0KLSAgICB9DQotICAgIGlmICh3bGVuIDwgMCkgew0KLSAgICAgICAgd2xlbiA9IDA7DQotICAgICAgICB3aGlsZSAod3N0clt3bGVuXSkgew0KLSAgICAgICAgICAgIHdsZW4gKys7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcgcmVzdWx0Ow0KLSAgICBGWF9XQ0hBUiogYnVmID0gcmVzdWx0LkdldEJ1ZmZlcih3bGVuKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3bGVuOyBpICsrKSB7DQotICAgICAgICBidWZbaV0gPSB3c3RyW2ldOw0KLSAgICB9DQotICAgIHJlc3VsdC5SZWxlYXNlQnVmZmVyKHdsZW4pOw0KLSAgICByZXR1cm4gcmVzdWx0Ow0KLX0NCi12b2lkIENGWF9XaWRlU3RyaW5nOjpBbGxvY0NvcHkoQ0ZYX1dpZGVTdHJpbmcmIGRlc3QsIEZYX1NUUlNJWkUgbkNvcHlMZW4sIEZYX1NUUlNJWkUgbkNvcHlJbmRleCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfU1RSU0laRSBuRXh0cmFMZW4pIGNvbnN0DQotew0KLSAgICBGWF9TVFJTSVpFIG5OZXdMZW4gPSBuQ29weUxlbiArIG5FeHRyYUxlbjsNCi0gICAgaWYgKG5OZXdMZW4gPT0gMCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEFTU0VSVChkZXN0Lm1fcERhdGEgPT0gTlVMTCk7DQotICAgIGRlc3QubV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nVyhuTmV3TGVuKTsNCi0gICAgaWYgKGRlc3QubV9wRGF0YSkgew0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIoZGVzdC5tX3BEYXRhLT5tX1N0cmluZywgbV9wRGF0YS0+bV9TdHJpbmcgKyBuQ29weUluZGV4LCBuQ29weUxlbiAqIHNpemVvZihGWF9XQ0hBUikpOw0KLSAgICB9DQotfQ0KLUNGWF9XaWRlU3RyaW5nIENGWF9XaWRlU3RyaW5nOjpMZWZ0KEZYX1NUUlNJWkUgbkNvdW50KSBjb25zdA0KLXsNCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7DQotICAgIH0NCi0gICAgaWYgKG5Db3VudCA8IDApIHsNCi0gICAgICAgIG5Db3VudCA9IDA7DQotICAgIH0NCi0gICAgaWYgKG5Db3VudCA+PSBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoKSB7DQotICAgICAgICByZXR1cm4gKnRoaXM7DQotICAgIH0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcgZGVzdDsNCi0gICAgQWxsb2NDb3B5KGRlc3QsIG5Db3VudCwgMCwgMCk7DQotICAgIHJldHVybiBkZXN0Ow0KLX0NCi1DRlhfV2lkZVN0cmluZyBDRlhfV2lkZVN0cmluZzo6TWlkKEZYX1NUUlNJWkUgbkZpcnN0KSBjb25zdA0KLXsNCi0gICAgcmV0dXJuIE1pZChuRmlyc3QsIG1fcERhdGEtPm1fbkRhdGFMZW5ndGggLSBuRmlyc3QpOw0KLX0NCi1DRlhfV2lkZVN0cmluZyBDRlhfV2lkZVN0cmluZzo6TWlkKEZYX1NUUlNJWkUgbkZpcnN0LCBGWF9TVFJTSVpFIG5Db3VudCkgY29uc3QNCi17DQotICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZygpOw0KLSAgICB9DQotICAgIGlmIChuRmlyc3QgPCAwKSB7DQotICAgICAgICBuRmlyc3QgPSAwOw0KLSAgICB9DQotICAgIGlmIChuQ291bnQgPCAwKSB7DQotICAgICAgICBuQ291bnQgPSAwOw0KLSAgICB9DQotICAgIGlmIChuRmlyc3QgKyBuQ291bnQgPiBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoKSB7DQotICAgICAgICBuQ291bnQgPSBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoIC0gbkZpcnN0Ow0KLSAgICB9DQotICAgIGlmIChuRmlyc3QgPiBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoKSB7DQotICAgICAgICBuQ291bnQgPSAwOw0KLSAgICB9DQotICAgIGlmIChuRmlyc3QgPT0gMCAmJiBuRmlyc3QgKyBuQ291bnQgPT0gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCkgew0KLSAgICAgICAgcmV0dXJuICp0aGlzOw0KLSAgICB9DQotICAgIENGWF9XaWRlU3RyaW5nIGRlc3Q7DQotICAgIEFsbG9jQ29weShkZXN0LCBuQ291bnQsIG5GaXJzdCwgMCk7DQotICAgIHJldHVybiBkZXN0Ow0KLX0NCi1DRlhfV2lkZVN0cmluZyBDRlhfV2lkZVN0cmluZzo6UmlnaHQoRlhfU1RSU0laRSBuQ291bnQpIGNvbnN0DQotew0KLSAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsNCi0gICAgfQ0KLSAgICBpZiAobkNvdW50IDwgMCkgew0KLSAgICAgICAgbkNvdW50ID0gMDsNCi0gICAgfQ0KLSAgICBpZiAobkNvdW50ID49IG1fcERhdGEtPm1fbkRhdGFMZW5ndGgpIHsNCi0gICAgICAgIHJldHVybiAqdGhpczsNCi0gICAgfQ0KLSAgICBDRlhfV2lkZVN0cmluZyBkZXN0Ow0KLSAgICBBbGxvY0NvcHkoZGVzdCwgbkNvdW50LCBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoIC0gbkNvdW50LCAwKTsNCi0gICAgcmV0dXJuIGRlc3Q7DQotfQ0KLWludCBDRlhfV2lkZVN0cmluZzo6Q29tcGFyZU5vQ2FzZShGWF9MUENXU1RSIGxwc3opIGNvbnN0DQotew0KLSAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gKGxwc3ogPT0gTlVMTCB8fCBscHN6WzBdID09IDApID8gMCA6IC0xOw0KLSAgICB9DQotICAgIHJldHVybiBGWFNZU193Y3NpY21wKG1fcERhdGEtPm1fU3RyaW5nLCBscHN6KTsNCi19DQotaW50IENGWF9XaWRlU3RyaW5nOjpDb21wYXJlKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHIpIGNvbnN0DQotew0KLSAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICBpZiAoc3RyLm1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9IGVsc2UgaWYgKHN0ci5tX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotICAgIGludCB0aGlzX2xlbiA9IG1fcERhdGEtPm1fbkRhdGFMZW5ndGg7DQotICAgIGludCB0aGF0X2xlbiA9IHN0ci5tX3BEYXRhLT5tX25EYXRhTGVuZ3RoOw0KLSAgICBpbnQgbWluX2xlbiA9IHRoaXNfbGVuIDwgdGhhdF9sZW4gPyB0aGlzX2xlbiA6IHRoYXRfbGVuOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1pbl9sZW47IGkgKyspIHsNCi0gICAgICAgIGlmIChtX3BEYXRhLT5tX1N0cmluZ1tpXSA8IHN0ci5tX3BEYXRhLT5tX1N0cmluZ1tpXSkgew0KLSAgICAgICAgICAgIHJldHVybiAtMTsNCi0gICAgICAgIH0gZWxzZSBpZiAobV9wRGF0YS0+bV9TdHJpbmdbaV0gPiBzdHIubV9wRGF0YS0+bV9TdHJpbmdbaV0pIHsNCi0gICAgICAgICAgICByZXR1cm4gMTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAodGhpc19sZW4gPCB0aGF0X2xlbikgew0KLSAgICAgICAgcmV0dXJuIC0xOw0KLSAgICB9IGVsc2UgaWYgKHRoaXNfbGVuID4gdGhhdF9sZW4pIHsNCi0gICAgICAgIHJldHVybiAxOw0KLSAgICB9DQotICAgIHJldHVybiAwOw0KLX0NCi1GWF9MUFdTVFIgQ0ZYX1dpZGVTdHJpbmc6OkxvY2tCdWZmZXIoKQ0KLXsNCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgRlhfTFBXU1RSIGxwc3ogPSBHZXRCdWZmZXIoMCk7DQotICAgIG1fcERhdGEtPm1fblJlZnMgPSAtMTsNCi0gICAgcmV0dXJuIGxwc3o7DQotfQ0KLXZvaWQgQ0ZYX1dpZGVTdHJpbmc6OlNldEF0KEZYX1NUUlNJWkUgbkluZGV4LCBGWF9XQ0hBUiBjaCkNCi17DQotICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBBU1NFUlQobkluZGV4ID49IDApOw0KLSAgICBBU1NFUlQobkluZGV4IDwgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCk7DQotICAgIENvcHlCZWZvcmVXcml0ZSgpOw0KLSAgICBtX3BEYXRhLT5tX1N0cmluZ1tuSW5kZXhdID0gY2g7DQotfQ0KLXZvaWQgQ0ZYX1dpZGVTdHJpbmc6Ok1ha2VMb3dlcigpDQotew0KLSAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ29weUJlZm9yZVdyaXRlKCk7DQotICAgIGlmIChHZXRMZW5ndGgoKSA8IDEpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWFNZU193Y3Nsd3IobV9wRGF0YS0+bV9TdHJpbmcpOw0KLX0NCi12b2lkIENGWF9XaWRlU3RyaW5nOjpNYWtlVXBwZXIoKQ0KLXsNCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENvcHlCZWZvcmVXcml0ZSgpOw0KLSAgICBpZiAoR2V0TGVuZ3RoKCkgPCAxKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhTWVNfd2NzdXByKG1fcERhdGEtPm1fU3RyaW5nKTsNCi19DQotRlhfU1RSU0laRSBDRlhfV2lkZVN0cmluZzo6RmluZChGWF9MUENXU1RSIGxwc3pTdWIsIEZYX1NUUlNJWkUgblN0YXJ0KSBjb25zdA0KLXsNCi0gICAgRlhfU1RSU0laRSBuTGVuZ3RoID0gR2V0TGVuZ3RoKCk7DQotICAgIGlmIChuTGVuZ3RoIDwgMSB8fCBuU3RhcnQgPiBuTGVuZ3RoKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgRlhfTFBDV1NUUiBscHN6ID0gKEZYX0xQQ1dTVFIpRlhTWVNfd2Nzc3RyKG1fcERhdGEtPm1fU3RyaW5nICsgblN0YXJ0LCBscHN6U3ViKTsNCi0gICAgcmV0dXJuIChscHN6ID09IE5VTEwpID8gLTEgOiAoaW50KShscHN6IC0gbV9wRGF0YS0+bV9TdHJpbmcpOw0KLX0NCi1GWF9TVFJTSVpFIENGWF9XaWRlU3RyaW5nOjpGaW5kKEZYX1dDSEFSIGNoLCBGWF9TVFJTSVpFIG5TdGFydCkgY29uc3QNCi17DQotICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBGWF9TVFJTSVpFIG5MZW5ndGggPSBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoOw0KLSAgICBpZiAoblN0YXJ0ID49IG5MZW5ndGgpIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBGWF9MUENXU1RSIGxwc3ogPSAoRlhfTFBDV1NUUilGWFNZU193Y3NjaHIobV9wRGF0YS0+bV9TdHJpbmcgKyBuU3RhcnQsIGNoKTsNCi0gICAgcmV0dXJuIChscHN6ID09IE5VTEwpID8gLTEgOiAoaW50KShscHN6IC0gbV9wRGF0YS0+bV9TdHJpbmcpOw0KLX0NCi12b2lkIENGWF9XaWRlU3RyaW5nOjpUcmltUmlnaHQoRlhfTFBDV1NUUiBscHN6VGFyZ2V0TGlzdCkNCi17DQotICAgIEZYU1lTX2Fzc2VydChscHN6VGFyZ2V0TGlzdCAhPSBOVUxMKTsNCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCB8fCAqbHBzelRhcmdldExpc3QgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENvcHlCZWZvcmVXcml0ZSgpOw0KLSAgICBGWF9TVFJTSVpFIGxlbiA9IEdldExlbmd0aCgpOw0KLSAgICBpZiAobGVuIDwgMSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX1NUUlNJWkUgcG9zID0gbGVuOw0KLSAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICBpZiAoRlhTWVNfd2NzY2hyKGxwc3pUYXJnZXRMaXN0LCBtX3BEYXRhLT5tX1N0cmluZ1twb3MgLSAxXSkgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcG9zIC0tOw0KLSAgICB9DQotICAgIGlmIChwb3MgPCBsZW4pIHsNCi0gICAgICAgIG1fcERhdGEtPm1fU3RyaW5nW3Bvc10gPSAwOw0KLSAgICAgICAgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCA9IHBvczsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9XaWRlU3RyaW5nOjpUcmltUmlnaHQoRlhfV0NIQVIgY2hUYXJnZXQpDQotew0KLSAgICBGWF9XQ0hBUiBzdHJbMl0gPSB7Y2hUYXJnZXQsIDB9Ow0KLSAgICBUcmltUmlnaHQoc3RyKTsNCi19DQotdm9pZCBDRlhfV2lkZVN0cmluZzo6VHJpbVJpZ2h0KCkNCi17DQotICAgIFRyaW1SaWdodChMIlx4MDlceDBhXHgwYlx4MGNceDBkXHgyMCIpOw0KLX0NCi12b2lkIENGWF9XaWRlU3RyaW5nOjpUcmltTGVmdChGWF9MUENXU1RSIGxwc3pUYXJnZXRzKQ0KLXsNCi0gICAgRlhTWVNfYXNzZXJ0KGxwc3pUYXJnZXRzICE9IE5VTEwpOw0KLSAgICBpZiAobV9wRGF0YSA9PSBOVUxMIHx8ICpscHN6VGFyZ2V0cyA9PSAwKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ29weUJlZm9yZVdyaXRlKCk7DQotICAgIGlmIChHZXRMZW5ndGgoKSA8IDEpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9MUENXU1RSIGxwc3ogPSBtX3BEYXRhLT5tX1N0cmluZzsNCi0gICAgd2hpbGUgKCpscHN6ICE9IDApIHsNCi0gICAgICAgIGlmIChGWFNZU193Y3NjaHIobHBzelRhcmdldHMsICpscHN6KSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBscHN6ICsrOw0KLSAgICB9DQotICAgIGlmIChscHN6ICE9IG1fcERhdGEtPm1fU3RyaW5nKSB7DQotICAgICAgICBpbnQgbkRhdGFMZW5ndGggPSBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoIC0gKEZYX1NUUlNJWkUpKGxwc3ogLSBtX3BEYXRhLT5tX1N0cmluZyk7DQotICAgICAgICBGWFNZU19tZW1tb3ZlMzIobV9wRGF0YS0+bV9TdHJpbmcsIGxwc3osIChuRGF0YUxlbmd0aCArIDEpKnNpemVvZihGWF9XQ0hBUikpOw0KLSAgICAgICAgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCA9IG5EYXRhTGVuZ3RoOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0ZYX1dpZGVTdHJpbmc6OlRyaW1MZWZ0KEZYX1dDSEFSIGNoVGFyZ2V0KQ0KLXsNCi0gICAgRlhfV0NIQVIgc3RyWzJdID0ge2NoVGFyZ2V0LCAwfTsNCi0gICAgVHJpbUxlZnQoc3RyKTsNCi19DQotdm9pZCBDRlhfV2lkZVN0cmluZzo6VHJpbUxlZnQoKQ0KLXsNCi0gICAgVHJpbUxlZnQoTCJceDA5XHgwYVx4MGJceDBjXHgwZFx4MjAiKTsNCi19DQotRlhfU1RSU0laRSBDRlhfV2lkZVN0cmluZzo6UmVwbGFjZShGWF9MUENXU1RSIGxwc3pPbGQsIEZYX0xQQ1dTVFIgbHBzek5ldykNCi17DQotICAgIGlmIChHZXRMZW5ndGgoKSA8IDEpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGlmIChscHN6T2xkID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIEZYX1NUUlNJWkUgblNvdXJjZUxlbiA9IChGWF9TVFJTSVpFKUZYU1lTX3djc2xlbihscHN6T2xkKTsNCi0gICAgaWYgKG5Tb3VyY2VMZW4gPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgRlhfU1RSU0laRSBuUmVwbGFjZW1lbnRMZW4gPSBscHN6TmV3ID8gKEZYX1NUUlNJWkUpRlhTWVNfd2NzbGVuKGxwc3pOZXcpIDogMDsNCi0gICAgRlhfU1RSU0laRSBuQ291bnQgPSAwOw0KLSAgICBGWF9MUFdTVFIgbHBzelN0YXJ0ID0gbV9wRGF0YS0+bV9TdHJpbmc7DQotICAgIEZYX0xQV1NUUiBscHN6RW5kID0gbV9wRGF0YS0+bV9TdHJpbmcgKyBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoOw0KLSAgICBGWF9MUFdTVFIgbHBzelRhcmdldDsNCi0gICAgew0KLSAgICAgICAgd2hpbGUgKChscHN6VGFyZ2V0ID0gKEZYX0xQV1NUUilGWFNZU193Y3NzdHIobHBzelN0YXJ0LCBscHN6T2xkKSkgIT0gTlVMTCAmJiBscHN6U3RhcnQgPCBscHN6RW5kKSB7DQotICAgICAgICAgICAgbkNvdW50Kys7DQotICAgICAgICAgICAgbHBzelN0YXJ0ID0gbHBzelRhcmdldCArIG5Tb3VyY2VMZW47DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKG5Db3VudCA+IDApIHsNCi0gICAgICAgIENvcHlCZWZvcmVXcml0ZSgpOw0KLSAgICAgICAgRlhfU1RSU0laRSBuT2xkTGVuZ3RoID0gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aDsNCi0gICAgICAgIEZYX1NUUlNJWkUgbk5ld0xlbmd0aCA9ICBuT2xkTGVuZ3RoICsgKG5SZXBsYWNlbWVudExlbiAtIG5Tb3VyY2VMZW4pICogbkNvdW50Ow0KLSAgICAgICAgaWYgKG1fcERhdGEtPm1fbkFsbG9jTGVuZ3RoIDwgbk5ld0xlbmd0aCB8fCBtX3BEYXRhLT5tX25SZWZzID4gMSkgew0KLSAgICAgICAgICAgIENGWF9TdHJpbmdEYXRhVyogcE9sZERhdGEgPSBtX3BEYXRhOw0KLSAgICAgICAgICAgIEZYX0xQQ1dTVFIgcHN0ciA9IG1fcERhdGEtPm1fU3RyaW5nOw0KLSAgICAgICAgICAgIG1fcERhdGEgPSBGWF9BbGxvY1N0cmluZ1cobk5ld0xlbmd0aCk7DQotICAgICAgICAgICAgaWYgKCFtX3BEYXRhKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhLT5tX1N0cmluZywgcHN0ciwgcE9sZERhdGEtPm1fbkRhdGFMZW5ndGggKiBzaXplb2YoRlhfV0NIQVIpKTsNCi0gICAgICAgICAgICBGWF9SZWxlYXNlU3RyaW5nVyhwT2xkRGF0YSk7DQotICAgICAgICB9DQotICAgICAgICBscHN6U3RhcnQgPSBtX3BEYXRhLT5tX1N0cmluZzsNCi0gICAgICAgIGxwc3pFbmQgPSBtX3BEYXRhLT5tX1N0cmluZyArIEZYX01BWChtX3BEYXRhLT5tX25EYXRhTGVuZ3RoLCBuTmV3TGVuZ3RoKTsNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB3aGlsZSAoKGxwc3pUYXJnZXQgPSAoRlhfTFBXU1RSKUZYU1lTX3djc3N0cihscHN6U3RhcnQsIGxwc3pPbGQpKSAhPSBOVUxMICYmIGxwc3pTdGFydCA8IGxwc3pFbmQpIHsNCi0gICAgICAgICAgICAgICAgRlhfU1RSU0laRSBuQmFsYW5jZSA9IG5PbGRMZW5ndGggLSAoRlhfU1RSU0laRSkobHBzelRhcmdldCAtIG1fcERhdGEtPm1fU3RyaW5nICsgblNvdXJjZUxlbik7DQotICAgICAgICAgICAgICAgIEZYU1lTX21lbW1vdmUzMihscHN6VGFyZ2V0ICsgblJlcGxhY2VtZW50TGVuLCBscHN6VGFyZ2V0ICsgblNvdXJjZUxlbiwgbkJhbGFuY2UgKiBzaXplb2YoRlhfV0NIQVIpKTsNCi0gICAgICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIobHBzelRhcmdldCwgbHBzek5ldywgblJlcGxhY2VtZW50TGVuICogc2l6ZW9mKEZYX1dDSEFSKSk7DQotICAgICAgICAgICAgICAgIGxwc3pTdGFydCA9IGxwc3pUYXJnZXQgKyBuUmVwbGFjZW1lbnRMZW47DQotICAgICAgICAgICAgICAgIGxwc3pTdGFydFtuQmFsYW5jZV0gPSAwOw0KLSAgICAgICAgICAgICAgICBuT2xkTGVuZ3RoICs9IChuUmVwbGFjZW1lbnRMZW4gLSBuU291cmNlTGVuKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBBU1NFUlQobV9wRGF0YS0+bV9TdHJpbmdbbk5ld0xlbmd0aF0gPT0gMCk7DQotICAgICAgICBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoID0gbk5ld0xlbmd0aDsNCi0gICAgfQ0KLSAgICByZXR1cm4gbkNvdW50Ow0KLX0NCi1GWF9TVFJTSVpFIENGWF9XaWRlU3RyaW5nOjpJbnNlcnQoRlhfU1RSU0laRSBuSW5kZXgsIEZYX1dDSEFSIGNoKQ0KLXsNCi0gICAgQ29weUJlZm9yZVdyaXRlKCk7DQotICAgIGlmIChuSW5kZXggPCAwKSB7DQotICAgICAgICBuSW5kZXggPSAwOw0KLSAgICB9DQotICAgIEZYX1NUUlNJWkUgbk5ld0xlbmd0aCA9IEdldExlbmd0aCgpOw0KLSAgICBpZiAobkluZGV4ID4gbk5ld0xlbmd0aCkgew0KLSAgICAgICAgbkluZGV4ID0gbk5ld0xlbmd0aDsNCi0gICAgfQ0KLSAgICBuTmV3TGVuZ3RoKys7DQotICAgIGlmIChtX3BEYXRhID09IE5VTEwgfHwgbV9wRGF0YS0+bV9uQWxsb2NMZW5ndGggPCBuTmV3TGVuZ3RoKSB7DQotICAgICAgICBDRlhfU3RyaW5nRGF0YVcqIHBPbGREYXRhID0gbV9wRGF0YTsNCi0gICAgICAgIEZYX0xQQ1dTVFIgcHN0ciA9IG1fcERhdGEtPm1fU3RyaW5nOw0KLSAgICAgICAgbV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nVyhuTmV3TGVuZ3RoKTsNCi0gICAgICAgIGlmICghbV9wRGF0YSkgew0KLSAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYocE9sZERhdGEgIT0gTlVMTCkgew0KLSAgICAgICAgICAgIEZYU1lTX21lbW1vdmUzMihtX3BEYXRhLT5tX1N0cmluZywgcHN0ciwgKHBPbGREYXRhLT5tX25EYXRhTGVuZ3RoICsgMSkqc2l6ZW9mKEZYX1dDSEFSKSk7DQotICAgICAgICAgICAgRlhfUmVsZWFzZVN0cmluZ1cocE9sZERhdGEpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBtX3BEYXRhLT5tX1N0cmluZ1swXSA9IDA7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhTWVNfbWVtbW92ZTMyKG1fcERhdGEtPm1fU3RyaW5nICsgbkluZGV4ICsgMSwNCi0gICAgICAgICAgICAgICAgICAgIG1fcERhdGEtPm1fU3RyaW5nICsgbkluZGV4LCAobk5ld0xlbmd0aCAtIG5JbmRleCkqc2l6ZW9mKEZYX1dDSEFSKSk7DQotICAgIG1fcERhdGEtPm1fU3RyaW5nW25JbmRleF0gPSBjaDsNCi0gICAgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCA9IG5OZXdMZW5ndGg7DQotICAgIHJldHVybiBuTmV3TGVuZ3RoOw0KLX0NCi1GWF9TVFJTSVpFIENGWF9XaWRlU3RyaW5nOjpEZWxldGUoRlhfU1RSU0laRSBuSW5kZXgsIEZYX1NUUlNJWkUgbkNvdW50KQ0KLXsNCi0gICAgaWYgKEdldExlbmd0aCgpIDwgMSkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgaWYgKG5JbmRleCA8IDApIHsNCi0gICAgICAgIG5JbmRleCA9IDA7DQotICAgIH0NCi0gICAgRlhfU1RSU0laRSBuT2xkTGVuZ3RoID0gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aDsNCi0gICAgaWYgKG5Db3VudCA+IDAgJiYgbkluZGV4IDwgbk9sZExlbmd0aCkgew0KLSAgICAgICAgQ29weUJlZm9yZVdyaXRlKCk7DQotICAgICAgICBpbnQgbkJ5dGVzVG9Db3B5ID0gbk9sZExlbmd0aCAtIChuSW5kZXggKyBuQ291bnQpICsgMTsNCi0gICAgICAgIEZYU1lTX21lbW1vdmUzMihtX3BEYXRhLT5tX1N0cmluZyArIG5JbmRleCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3BEYXRhLT5tX1N0cmluZyArIG5JbmRleCArIG5Db3VudCwgbkJ5dGVzVG9Db3B5ICogc2l6ZW9mKEZYX1dDSEFSKSk7DQotICAgICAgICBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoID0gbk9sZExlbmd0aCAtIG5Db3VudDsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aDsNCi19DQotRlhfU1RSU0laRSBDRlhfV2lkZVN0cmluZzo6UmVtb3ZlKEZYX1dDSEFSIGNoUmVtb3ZlKQ0KLXsNCi0gICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgQ29weUJlZm9yZVdyaXRlKCk7DQotICAgIGlmIChHZXRMZW5ndGgoKSA8IDEpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIEZYX0xQV1NUUiBwc3RyU291cmNlID0gbV9wRGF0YS0+bV9TdHJpbmc7DQotICAgIEZYX0xQV1NUUiBwc3RyRGVzdCA9IG1fcERhdGEtPm1fU3RyaW5nOw0KLSAgICBGWF9MUFdTVFIgcHN0ckVuZCA9IG1fcERhdGEtPm1fU3RyaW5nICsgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aDsNCi0gICAgd2hpbGUgKHBzdHJTb3VyY2UgPCBwc3RyRW5kKSB7DQotICAgICAgICBpZiAoKnBzdHJTb3VyY2UgIT0gY2hSZW1vdmUpIHsNCi0gICAgICAgICAgICAqcHN0ckRlc3QgPSAqcHN0clNvdXJjZTsNCi0gICAgICAgICAgICBwc3RyRGVzdCArKzsNCi0gICAgICAgIH0NCi0gICAgICAgIHBzdHJTb3VyY2UgKys7DQotICAgIH0NCi0gICAgKnBzdHJEZXN0ID0gMDsNCi0gICAgRlhfU1RSU0laRSBuQ291bnQgPSAoRlhfU1RSU0laRSkocHN0clNvdXJjZSAtIHBzdHJEZXN0KTsNCi0gICAgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCAtPSBuQ291bnQ7DQotICAgIHJldHVybiBuQ291bnQ7DQotfQ0KLSNkZWZpbmUgRk9SQ0VfQU5TSSAgICAgIDB4MTAwMDANCi0jZGVmaW5lIEZPUkNFX1VOSUNPREUgICAweDIwMDAwDQotI2RlZmluZSBGT1JDRV9JTlQ2NCAgICAgMHg0MDAwMA0KLXZvaWQgQ0ZYX1dpZGVTdHJpbmc6OkZvcm1hdFYoRlhfTFBDV1NUUiBscHN6Rm9ybWF0LCB2YV9saXN0IGFyZ0xpc3QpDQotew0KLSAgICB2YV9saXN0IGFyZ0xpc3RTYXZlOw0KLSNpZiBkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgfHwgKCFkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX0ZYX0NQVV8gPT0gX0ZYX1g2NF8gfHwgX0ZYX0NQVV8gPT0gX0ZYX0lBNjRfIHx8IF9GWF9DUFVfID09IF9GWF9BUk02NF8pKSB8fCBkZWZpbmVkKF9fbmF0aXZlX2NsaWVudF9fKQ0KLSAgICB2YV9jb3B5KGFyZ0xpc3RTYXZlLCBhcmdMaXN0KTsNCi0jZWxzZQ0KLSAgICBhcmdMaXN0U2F2ZSA9IGFyZ0xpc3Q7DQotI2VuZGlmDQotICAgIGludCBuTWF4TGVuID0gMDsNCi0gICAgZm9yIChGWF9MUENXU1RSIGxwc3ogPSBscHN6Rm9ybWF0OyAqbHBzeiAhPSAwOyBscHN6ICsrKSB7DQotICAgICAgICBpZiAoKmxwc3ogIT0gJyUnIHx8ICoobHBzeiA9IGxwc3ogKyAxKSA9PSAnJScpIHsNCi0gICAgICAgICAgICBuTWF4TGVuICs9IChGWF9TVFJTSVpFKUZYU1lTX3djc2xlbihscHN6KTsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBuSXRlbUxlbiA9IDA7DQotICAgICAgICBpbnQgbldpZHRoID0gMDsNCi0gICAgICAgIGZvciAoOyAqbHBzeiAhPSAwOyBscHN6ICsrKSB7DQotICAgICAgICAgICAgaWYgKCpscHN6ID09ICcjJykgew0KLSAgICAgICAgICAgICAgICBuTWF4TGVuICs9IDI7DQotICAgICAgICAgICAgfSBlbHNlIGlmICgqbHBzeiA9PSAnKicpIHsNCi0gICAgICAgICAgICAgICAgbldpZHRoID0gdmFfYXJnKGFyZ0xpc3QsIGludCk7DQotICAgICAgICAgICAgfSBlbHNlIGlmICgqbHBzeiA9PSAnLScgfHwgKmxwc3ogPT0gJysnIHx8ICpscHN6ID09ICcwJyB8fA0KLSAgICAgICAgICAgICAgICAgICAgICAgKmxwc3ogPT0gJyAnKQ0KLSAgICAgICAgICAgICAgICA7DQotICAgICAgICAgICAgZWxzZSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChuV2lkdGggPT0gMCkgew0KLSAgICAgICAgICAgIG5XaWR0aCA9IEZYU1lTX3d0b2kobHBzeik7DQotICAgICAgICAgICAgZm9yICg7ICpscHN6ICE9IDAgJiYgKCpscHN6KSA8PSAnOScgJiYgKCpscHN6KSA+PSAnMCc7IGxwc3ogKyspDQotICAgICAgICAgICAgICAgIDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChuV2lkdGggPCAwIHx8IG5XaWR0aCA+IDEyOCAqIDEwMjQpIHsNCi0gICAgICAgICAgICBscHN6Rm9ybWF0ID0gKEZYX0xQQ1dTVFIpTCJCYWQgd2lkdGgiOw0KLSAgICAgICAgICAgIG5NYXhMZW4gPSAxMDsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBuUHJlY2lzaW9uID0gMDsNCi0gICAgICAgIGlmICgqbHBzeiA9PSAnLicpIHsNCi0gICAgICAgICAgICBscHN6ICsrOw0KLSAgICAgICAgICAgIGlmICgqbHBzeiA9PSAnKicpIHsNCi0gICAgICAgICAgICAgICAgblByZWNpc2lvbiA9IHZhX2FyZyhhcmdMaXN0LCBpbnQpOw0KLSAgICAgICAgICAgICAgICBscHN6ICsrOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIG5QcmVjaXNpb24gPSBGWFNZU193dG9pKGxwc3opOw0KLSAgICAgICAgICAgICAgICBmb3IgKDsgKmxwc3ogIT0gMCAmJiAoKmxwc3opID49ICcwJyAmJiAoKmxwc3opIDw9ICc5JzsgbHBzeiArKykNCi0gICAgICAgICAgICAgICAgICAgIDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAoblByZWNpc2lvbiA8IDAgfHwgblByZWNpc2lvbiA+IDEyOCAqIDEwMjQpIHsNCi0gICAgICAgICAgICBscHN6Rm9ybWF0ID0gKEZYX0xQQ1dTVFIpTCJCYWQgcHJlY2lzaW9uIjsNCi0gICAgICAgICAgICBuTWF4TGVuID0gMTQ7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBpbnQgbk1vZGlmaWVyID0gMDsNCi0gICAgICAgIGlmICgqbHBzeiA9PSBMJ0knICYmICoobHBzeiArIDEpID09IEwnNicgJiYgKihscHN6ICsgMikgPT0gTCc0Jykgew0KLSAgICAgICAgICAgIGxwc3ogKz0gMzsNCi0gICAgICAgICAgICBuTW9kaWZpZXIgPSBGT1JDRV9JTlQ2NDsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc3dpdGNoICgqbHBzeikgew0KLSAgICAgICAgICAgICAgICBjYXNlICdoJzoNCi0gICAgICAgICAgICAgICAgICAgIG5Nb2RpZmllciA9IEZPUkNFX0FOU0k7DQotICAgICAgICAgICAgICAgICAgICBscHN6ICsrOw0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgJ2wnOg0KLSAgICAgICAgICAgICAgICAgICAgbk1vZGlmaWVyID0gRk9SQ0VfVU5JQ09ERTsNCi0gICAgICAgICAgICAgICAgICAgIGxwc3ogKys7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAnRic6DQotICAgICAgICAgICAgICAgIGNhc2UgJ04nOg0KLSAgICAgICAgICAgICAgICBjYXNlICdMJzoNCi0gICAgICAgICAgICAgICAgICAgIGxwc3ogKys7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBzd2l0Y2ggKCpscHN6IHwgbk1vZGlmaWVyKSB7DQotICAgICAgICAgICAgY2FzZSAnYyc6DQotICAgICAgICAgICAgY2FzZSAnQyc6DQotICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gMjsNCi0gICAgICAgICAgICAgICAgdmFfYXJnKGFyZ0xpc3QsIGludCk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgJ2MnfEZPUkNFX0FOU0k6DQotICAgICAgICAgICAgY2FzZSAnQyd8Rk9SQ0VfQU5TSToNCi0gICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSAyOw0KLSAgICAgICAgICAgICAgICB2YV9hcmcoYXJnTGlzdCwgaW50KTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSAnYyd8Rk9SQ0VfVU5JQ09ERToNCi0gICAgICAgICAgICBjYXNlICdDJ3xGT1JDRV9VTklDT0RFOg0KLSAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IDI7DQotICAgICAgICAgICAgICAgIHZhX2FyZyhhcmdMaXN0LCBpbnQpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlICdzJzogew0KLSAgICAgICAgICAgICAgICAgICAgRlhfTFBDV1NUUiBwc3RyTmV4dEFyZyA9IHZhX2FyZyhhcmdMaXN0LCBGWF9MUENXU1RSKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwc3RyTmV4dEFyZyA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSA2Ow0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IChGWF9TVFJTSVpFKUZYU1lTX3djc2xlbihwc3RyTmV4dEFyZyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5JdGVtTGVuIDwgMSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgJ1MnOiB7DQotICAgICAgICAgICAgICAgICAgICBGWF9MUENTVFIgcHN0ck5leHRBcmcgPSB2YV9hcmcoYXJnTGlzdCwgRlhfTFBDU1RSKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwc3RyTmV4dEFyZyA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSA2Ow0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IChGWF9TVFJTSVpFKUZYU1lTX3N0cmxlbihwc3RyTmV4dEFyZyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5JdGVtTGVuIDwgMSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgJ3MnfEZPUkNFX0FOU0k6DQotICAgICAgICAgICAgY2FzZSAnUyd8Rk9SQ0VfQU5TSTogew0KLSAgICAgICAgICAgICAgICAgICAgRlhfTFBDU1RSIHBzdHJOZXh0QXJnID0gdmFfYXJnKGFyZ0xpc3QsIEZYX0xQQ1NUUik7DQotICAgICAgICAgICAgICAgICAgICBpZiAocHN0ck5leHRBcmcgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gNjsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSAoRlhfU1RSU0laRSlGWFNZU19zdHJsZW4ocHN0ck5leHRBcmcpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuSXRlbUxlbiA8IDEpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlICdzJ3xGT1JDRV9VTklDT0RFOg0KLSAgICAgICAgICAgIGNhc2UgJ1MnfEZPUkNFX1VOSUNPREU6IHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0xQV1NUUiBwc3RyTmV4dEFyZyA9IHZhX2FyZyhhcmdMaXN0LCBGWF9MUFdTVFIpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBzdHJOZXh0QXJnID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IDY7DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gKEZYX1NUUlNJWkUpRlhTWVNfd2NzbGVuKHBzdHJOZXh0QXJnKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobkl0ZW1MZW4gPCAxKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBpZiAobkl0ZW1MZW4gIT0gMCkgew0KLSAgICAgICAgICAgIGlmIChuUHJlY2lzaW9uICE9IDAgJiYgbkl0ZW1MZW4gPiBuUHJlY2lzaW9uKSB7DQotICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gblByZWNpc2lvbjsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKG5JdGVtTGVuIDwgbldpZHRoKSB7DQotICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gbldpZHRoOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc3dpdGNoICgqbHBzeikgew0KLSAgICAgICAgICAgICAgICBjYXNlICdkJzoNCi0gICAgICAgICAgICAgICAgY2FzZSAnaSc6DQotICAgICAgICAgICAgICAgIGNhc2UgJ3UnOg0KLSAgICAgICAgICAgICAgICBjYXNlICd4JzoNCi0gICAgICAgICAgICAgICAgY2FzZSAnWCc6DQotICAgICAgICAgICAgICAgIGNhc2UgJ28nOg0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5Nb2RpZmllciAmIEZPUkNFX0lOVDY0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGFyZ0xpc3QsIEZYX0lOVDY0KTsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGFyZ0xpc3QsIGludCk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IDMyOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5JdGVtTGVuIDwgbldpZHRoICsgblByZWNpc2lvbikgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gbldpZHRoICsgblByZWNpc2lvbjsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlICdhJzoNCi0gICAgICAgICAgICAgICAgY2FzZSAnQSc6DQotICAgICAgICAgICAgICAgIGNhc2UgJ2UnOg0KLSAgICAgICAgICAgICAgICBjYXNlICdFJzoNCi0gICAgICAgICAgICAgICAgY2FzZSAnZyc6DQotICAgICAgICAgICAgICAgIGNhc2UgJ0cnOg0KLSAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGFyZ0xpc3QsIGRvdWJsZSk7DQotICAgICAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IDEyODsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChuSXRlbUxlbiA8IG5XaWR0aCArIG5QcmVjaXNpb24pIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IG5XaWR0aCArIG5QcmVjaXNpb247DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAnZic6DQotICAgICAgICAgICAgICAgICAgICBpZiAobldpZHRoICsgblByZWNpc2lvbiA+IDEwMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gblByZWNpc2lvbiArIG5XaWR0aCArIDEyODsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGY7DQotICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBwc3pUZW1wWzI1Nl07DQotICAgICAgICAgICAgICAgICAgICAgICAgZiA9IHZhX2FyZyhhcmdMaXN0LCBkb3VibGUpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYU1lTX3NucHJpbnRmKHBzelRlbXAsIHNpemVvZihwc3pUZW1wKSwgIiUqLipmIiwgbldpZHRoLCBuUHJlY2lzaW9uICsgNiwgZiApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gKEZYX1NUUlNJWkUpRlhTWVNfc3RybGVuKHBzelRlbXApOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgJ3AnOg0KLSAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGFyZ0xpc3QsIHZvaWQqKTsNCi0gICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gMzI7DQotICAgICAgICAgICAgICAgICAgICBpZiAobkl0ZW1MZW4gPCBuV2lkdGggKyBuUHJlY2lzaW9uKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSBuV2lkdGggKyBuUHJlY2lzaW9uOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgJ24nOg0KLSAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGFyZ0xpc3QsIGludCopOw0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgbk1heExlbiArPSBuSXRlbUxlbjsNCi0gICAgfQ0KLSAgICBHZXRCdWZmZXIobk1heExlbik7DQotICAgIGlmIChtX3BEYXRhKSB7DQotICAgICAgICBGWFNZU192c3dwcmludGYoKHdjaGFyX3QqKW1fcERhdGEtPm1fU3RyaW5nLCBuTWF4TGVuICsgMSwgKGNvbnN0IHdjaGFyX3QqKWxwc3pGb3JtYXQsIGFyZ0xpc3RTYXZlKTsNCi0gICAgICAgIFJlbGVhc2VCdWZmZXIoKTsNCi0gICAgfQ0KLSAgICB2YV9lbmQoYXJnTGlzdFNhdmUpOw0KLX0NCi12b2lkIENGWF9XaWRlU3RyaW5nOjpGb3JtYXQoRlhfTFBDV1NUUiBscHN6Rm9ybWF0LCAuLi4pDQotew0KLSAgICB2YV9saXN0IGFyZ0xpc3Q7DQotICAgIHZhX3N0YXJ0KGFyZ0xpc3QsIGxwc3pGb3JtYXQpOw0KLSAgICBGb3JtYXRWKGxwc3pGb3JtYXQsIGFyZ0xpc3QpOw0KLSAgICB2YV9lbmQoYXJnTGlzdCk7DQotfQ0KLUZYX0ZMT0FUIEZYX3d0b2YoRlhfTFBDV1NUUiBzdHIsIGludCBsZW4pDQotew0KLSAgICBpZiAobGVuID09IDApIHsNCi0gICAgICAgIHJldHVybiAwLjA7DQotICAgIH0NCi0gICAgaW50IGNjID0gMDsNCi0gICAgRlhfQk9PTCBiTmVnYXRpdmUgPSBGQUxTRTsNCi0gICAgaWYgKHN0clswXSA9PSAnKycpIHsNCi0gICAgICAgIGNjKys7DQotICAgIH0gZWxzZSBpZiAoc3RyWzBdID09ICctJykgew0KLSAgICAgICAgYk5lZ2F0aXZlID0gVFJVRTsNCi0gICAgICAgIGNjKys7DQotICAgIH0NCi0gICAgaW50IGludGVnZXIgPSAwOw0KLSAgICB3aGlsZSAoY2MgPCBsZW4pIHsNCi0gICAgICAgIGlmIChzdHJbY2NdID09ICcuJykgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW50ZWdlciA9IGludGVnZXIgKiAxMCArIHN0cltjY10gLSAnMCc7DQotICAgICAgICBjYyArKzsNCi0gICAgfQ0KLSAgICBGWF9GTE9BVCBmcmFjdGlvbiA9IDA7DQotICAgIGlmIChzdHJbY2NdID09ICcuJykgew0KLSAgICAgICAgY2MgKys7DQotICAgICAgICBGWF9GTE9BVCBzY2FsZSA9IDAuMWY7DQotICAgICAgICB3aGlsZSAoY2MgPCBsZW4pIHsNCi0gICAgICAgICAgICBmcmFjdGlvbiArPSBzY2FsZSAqIChzdHJbY2NdIC0gJzAnKTsNCi0gICAgICAgICAgICBzY2FsZSAqPSAwLjFmOw0KLSAgICAgICAgICAgIGNjICsrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGZyYWN0aW9uICs9IChGWF9GTE9BVClpbnRlZ2VyOw0KLSAgICByZXR1cm4gYk5lZ2F0aXZlID8gLWZyYWN0aW9uIDogZnJhY3Rpb247DQotfQ0KLWludCBDRlhfV2lkZVN0cmluZzo6R2V0SW50ZWdlcigpIGNvbnN0DQotew0KLSAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICByZXR1cm4gRlhTWVNfd3RvaShtX3BEYXRhLT5tX1N0cmluZyk7DQotfQ0KLUZYX0ZMT0FUIENGWF9XaWRlU3RyaW5nOjpHZXRGbG9hdCgpIGNvbnN0DQotew0KLSAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMC4wOw0KLSAgICB9DQotICAgIHJldHVybiBGWF93dG9mKG1fcERhdGEtPm1fU3RyaW5nLCBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoKTsNCi19DQotdm9pZCBDRlhfV2lkZVN0cmluZ0w6OkVtcHR5KElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpDQotew0KLSAgICBpZiAobV9QdHIpIHsNCi0gICAgICAgIEZYX0FsbG9jYXRvcl9GcmVlKHBBbGxvY2F0b3IsIChGWF9MUFZPSUQpbV9QdHIpOw0KLSAgICB9DQotICAgIG1fUHRyID0gTlVMTCwgbV9MZW5ndGggPSAwOw0KLX0NCi12b2lkIENGWF9XaWRlU3RyaW5nTDo6U2V0KEZYX1dTVFIgc3JjLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQ0KLXsNCi0gICAgRW1wdHkocEFsbG9jYXRvcik7DQotICAgIGlmIChzcmMuR2V0UHRyKCkgIT0gTlVMTCAmJiBzcmMuR2V0TGVuZ3RoKCkgPiAwKSB7DQotICAgICAgICBGWF9MUFdTVFIgc3RyID0gRlhfQWxsb2NhdG9yX0FsbG9jKHBBbGxvY2F0b3IsIEZYX1dDSEFSLCBzcmMuR2V0TGVuZ3RoKCkgKyAxKTsNCi0gICAgICAgIGlmICghc3RyKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIoc3RyLCBzcmMuR2V0UHRyKCksIHNyYy5HZXRMZW5ndGgoKSpzaXplb2YoRlhfV0NIQVIpKTsNCi0gICAgICAgIHN0cltzcmMuR2V0TGVuZ3RoKCldID0gJ1wwJzsNCi0gICAgICAgICooRlhfTFBXU1RSKikoJm1fUHRyKSA9IHN0cjsNCi0gICAgICAgIG1fTGVuZ3RoID0gc3JjLkdldExlbmd0aCgpOw0KLSAgICB9DQotfQ0KLWludCBDRlhfV2lkZVN0cmluZ0w6OkdldEludGVnZXIoKSBjb25zdA0KLXsNCi0gICAgaWYgKCFtX1B0cikgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgcmV0dXJuIEZYU1lTX3d0b2kobV9QdHIpOw0KLX0NCi1GWF9GTE9BVCBDRlhfV2lkZVN0cmluZ0w6OkdldEZsb2F0KCkgY29uc3QNCi17DQotICAgIGlmICghbV9QdHIpIHsNCi0gICAgICAgIHJldHVybiAwLjBmOw0KLSAgICB9DQotICAgIHJldHVybiBGWF93dG9mKG1fUHRyLCBtX0xlbmd0aCk7DQotfQ0KLXZvaWQgQ0ZYX1dpZGVTdHJpbmdMOjpUcmltUmlnaHQoRlhfTFBDV1NUUiBscHN6VGFyZ2V0cykNCi17DQotICAgIGlmICghbHBzelRhcmdldHMgfHwgKmxwc3pUYXJnZXRzID09IDAgfHwgIW1fUHRyIHx8IG1fTGVuZ3RoIDwgMSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX1NUUlNJWkUgcG9zID0gbV9MZW5ndGg7DQotICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgIGlmIChGWFNZU193Y3NjaHIobHBzelRhcmdldHMsIG1fUHRyW3BvcyAtIDFdKSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBwb3MgLS07DQotICAgIH0NCi0gICAgaWYgKHBvcyA8IG1fTGVuZ3RoKSB7DQotICAgICAgICAoKihGWF9MUFdTVFIqKSgmbV9QdHIpKVtwb3NdID0gMDsNCi0gICAgICAgIG1fTGVuZ3RoID0gcG9zOw0KLSAgICB9DQotfQ0KLXN0YXRpYyBDRlhfQnl0ZVN0cmluZyBfRGVmTWFwX0dldEJ5dGVTdHJpbmcoQ0ZYX0NoYXJNYXAqIHBDaGFyTWFwLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgd2lkZXN0cikNCi17DQotICAgIGludCBzcmNfbGVuID0gd2lkZXN0ci5HZXRMZW5ndGgoKTsNCi0gICAgaW50IGNvZGVwYWdlID0gcENoYXJNYXAtPm1fR2V0Q29kZVBhZ2UgPyBwQ2hhck1hcC0+bV9HZXRDb2RlUGFnZSgpIDogMDsNCi0gICAgaW50IGRlc3RfbGVuID0gRlhTWVNfV2lkZUNoYXJUb011bHRpQnl0ZShjb2RlcGFnZSwgMCwgd2lkZXN0ciwgc3JjX2xlbiwgTlVMTCwgMCwgTlVMTCwgTlVMTCk7DQotICAgIGlmIChkZXN0X2xlbiA9PSAwKSB7DQotICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVN0cmluZyBieXRlc3RyOw0KLSAgICBGWF9MUFNUUiBkZXN0X2J1ZiA9IGJ5dGVzdHIuR2V0QnVmZmVyKGRlc3RfbGVuKTsNCi0gICAgRlhTWVNfV2lkZUNoYXJUb011bHRpQnl0ZShjb2RlcGFnZSwgMCwgd2lkZXN0ciwgc3JjX2xlbiwgZGVzdF9idWYsIGRlc3RfbGVuLCBOVUxMLCBOVUxMKTsNCi0gICAgYnl0ZXN0ci5SZWxlYXNlQnVmZmVyKGRlc3RfbGVuKTsNCi0gICAgcmV0dXJuIGJ5dGVzdHI7DQotfQ0KLXN0YXRpYyBDRlhfV2lkZVN0cmluZyBfRGVmTWFwX0dldFdpZGVTdHJpbmcoQ0ZYX0NoYXJNYXAqIHBDaGFyTWFwLCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgYnl0ZXN0cikNCi17DQotICAgIGludCBzcmNfbGVuID0gYnl0ZXN0ci5HZXRMZW5ndGgoKTsNCi0gICAgaW50IGNvZGVwYWdlID0gcENoYXJNYXAtPm1fR2V0Q29kZVBhZ2UgPyBwQ2hhck1hcC0+bV9HZXRDb2RlUGFnZSgpIDogMDsNCi0gICAgaW50IGRlc3RfbGVuID0gRlhTWVNfTXVsdGlCeXRlVG9XaWRlQ2hhcihjb2RlcGFnZSwgMCwgYnl0ZXN0ciwgc3JjX2xlbiwgTlVMTCwgMCk7DQotICAgIGlmIChkZXN0X2xlbiA9PSAwKSB7DQotICAgICAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsNCi0gICAgfQ0KLSAgICBDRlhfV2lkZVN0cmluZyB3aWRlc3RyOw0KLSAgICBGWF9MUFdTVFIgZGVzdF9idWYgPSB3aWRlc3RyLkdldEJ1ZmZlcihkZXN0X2xlbik7DQotICAgIEZYU1lTX011bHRpQnl0ZVRvV2lkZUNoYXIoY29kZXBhZ2UsIDAsIGJ5dGVzdHIsIHNyY19sZW4sIGRlc3RfYnVmLCBkZXN0X2xlbik7DQotICAgIHdpZGVzdHIuUmVsZWFzZUJ1ZmZlcihkZXN0X2xlbik7DQotICAgIHJldHVybiB3aWRlc3RyOw0KLX0NCi1zdGF0aWMgaW50IF9EZWZNYXBfR2V0R0JLQ29kZVBhZ2UoKQ0KLXsNCi0gICAgcmV0dXJuIDkzNjsNCi19DQotc3RhdGljIGludCBfRGVmTWFwX0dldFVIQ0NvZGVQYWdlKCkNCi17DQotICAgIHJldHVybiA5NDk7DQotfQ0KLXN0YXRpYyBpbnQgX0RlZk1hcF9HZXRKSVNDb2RlUGFnZSgpDQotew0KLSAgICByZXR1cm4gOTMyOw0KLX0NCi1zdGF0aWMgaW50IF9EZWZNYXBfR2V0QmlnNUNvZGVQYWdlKCkNCi17DQotICAgIHJldHVybiA5NTA7DQotfQ0KLXN0YXRpYyBjb25zdCBDRlhfQ2hhck1hcCBnX0RlZmF1bHRNYXBwZXIgPSB7Jl9EZWZNYXBfR2V0V2lkZVN0cmluZywgJl9EZWZNYXBfR2V0Qnl0ZVN0cmluZywgTlVMTH07DQotc3RhdGljIGNvbnN0IENGWF9DaGFyTWFwIGdfRGVmYXVsdEdCS01hcHBlciA9IHsmX0RlZk1hcF9HZXRXaWRlU3RyaW5nLCAmX0RlZk1hcF9HZXRCeXRlU3RyaW5nLCAmX0RlZk1hcF9HZXRHQktDb2RlUGFnZX07DQotc3RhdGljIGNvbnN0IENGWF9DaGFyTWFwIGdfRGVmYXVsdEpJU01hcHBlciA9IHsmX0RlZk1hcF9HZXRXaWRlU3RyaW5nLCAmX0RlZk1hcF9HZXRCeXRlU3RyaW5nLCAmX0RlZk1hcF9HZXRKSVNDb2RlUGFnZX07DQotc3RhdGljIGNvbnN0IENGWF9DaGFyTWFwIGdfRGVmYXVsdFVIQ01hcHBlciA9IHsmX0RlZk1hcF9HZXRXaWRlU3RyaW5nLCAmX0RlZk1hcF9HZXRCeXRlU3RyaW5nLCAmX0RlZk1hcF9HZXRVSENDb2RlUGFnZX07DQotc3RhdGljIGNvbnN0IENGWF9DaGFyTWFwIGdfRGVmYXVsdEJpZzVNYXBwZXIgPSB7Jl9EZWZNYXBfR2V0V2lkZVN0cmluZywgJl9EZWZNYXBfR2V0Qnl0ZVN0cmluZywgJl9EZWZNYXBfR2V0QmlnNUNvZGVQYWdlfTsNCi1DRlhfQ2hhck1hcCogQ0ZYX0NoYXJNYXA6OkdldERlZmF1bHRNYXBwZXIoRlhfSU5UMzIgY29kZXBhZ2UpDQotew0KLSAgICBzd2l0Y2ggKGNvZGVwYWdlKSB7DQotICAgICAgICBjYXNlIDA6DQotICAgICAgICAgICAgcmV0dXJuIChDRlhfQ2hhck1hcCopJmdfRGVmYXVsdE1hcHBlcjsNCi0gICAgICAgIGNhc2UgOTMyOg0KLSAgICAgICAgICAgIHJldHVybiAoQ0ZYX0NoYXJNYXAqKSZnX0RlZmF1bHRKSVNNYXBwZXI7DQotICAgICAgICBjYXNlIDkzNjoNCi0gICAgICAgICAgICByZXR1cm4gKENGWF9DaGFyTWFwKikmZ19EZWZhdWx0R0JLTWFwcGVyOw0KLSAgICAgICAgY2FzZSA5NDk6DQotICAgICAgICAgICAgcmV0dXJuIChDRlhfQ2hhck1hcCopJmdfRGVmYXVsdFVIQ01hcHBlcjsNCi0gICAgICAgIGNhc2UgOTUwOg0KLSAgICAgICAgICAgIHJldHVybiAoQ0ZYX0NoYXJNYXAqKSZnX0RlZmF1bHRCaWc1TWFwcGVyOw0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGNydC9meF9iYXNpYy5oIgorc3RhdGljIENGWF9TdHJpbmdEYXRhVyogRlhfQWxsb2NTdHJpbmdXKGludCBuTGVuKQoreworICAgIGlmIChuTGVuID09IDApIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENGWF9TdHJpbmdEYXRhVyogcERhdGEgPSAoQ0ZYX1N0cmluZ0RhdGFXKilGWF9BbGxvYyhGWF9CWVRFLCBzaXplb2YobG9uZykgKiAzICsgKG5MZW4gKyAxKSAqIHNpemVvZihGWF9XQ0hBUikpOworICAgIGlmICghcERhdGEpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBEYXRhLT5tX25BbGxvY0xlbmd0aCA9IG5MZW47CisgICAgcERhdGEtPm1fbkRhdGFMZW5ndGggPSBuTGVuOworICAgIHBEYXRhLT5tX25SZWZzID0gMTsKKyAgICBwRGF0YS0+bV9TdHJpbmdbbkxlbl0gPSAwOworICAgIHJldHVybiBwRGF0YTsKK30KK3N0YXRpYyB2b2lkIEZYX1JlbGVhc2VTdHJpbmdXKENGWF9TdHJpbmdEYXRhVyogcERhdGEpCit7CisgICAgaWYgKHBEYXRhID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwRGF0YS0+bV9uUmVmcyAtLTsKKyAgICBpZiAocERhdGEtPm1fblJlZnMgPD0gMCkgeworICAgICAgICBGWF9GcmVlKHBEYXRhKTsKKyAgICB9Cit9CitDRlhfV2lkZVN0cmluZzo6fkNGWF9XaWRlU3RyaW5nKCkKK3sKKyAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wRGF0YS0+bV9uUmVmcyAtLTsKKyAgICBpZiAobV9wRGF0YS0+bV9uUmVmcyA8IDEpIHsKKyAgICAgICAgRlhfRnJlZShtX3BEYXRhKTsKKyAgICB9Cit9Cit2b2lkIENGWF9XaWRlU3RyaW5nOjpJbml0U3RyKEZYX0xQQ1dTVFIgbHBzeiwgRlhfU1RSU0laRSBuTGVuKQoreworICAgIGlmIChuTGVuIDwgMCkgeworICAgICAgICBuTGVuID0gbHBzeiA/IChGWF9TVFJTSVpFKUZYU1lTX3djc2xlbihscHN6KSA6IDA7CisgICAgfQorICAgIGlmIChuTGVuKSB7CisgICAgICAgIG1fcERhdGEgPSBGWF9BbGxvY1N0cmluZ1cobkxlbik7CisgICAgICAgIGlmICghbV9wRGF0YSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcERhdGEtPm1fU3RyaW5nLCBscHN6LCBuTGVuICogc2l6ZW9mKEZYX1dDSEFSKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wRGF0YSA9IE5VTEw7CisgICAgfQorfQorQ0ZYX1dpZGVTdHJpbmc6OkNGWF9XaWRlU3RyaW5nKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJpbmdTcmMpCit7CisgICAgaWYgKHN0cmluZ1NyYy5tX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgbV9wRGF0YSA9IE5VTEw7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHN0cmluZ1NyYy5tX3BEYXRhLT5tX25SZWZzID49IDApIHsKKyAgICAgICAgbV9wRGF0YSA9IHN0cmluZ1NyYy5tX3BEYXRhOworICAgICAgICBtX3BEYXRhLT5tX25SZWZzICsrOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcERhdGEgPSBOVUxMOworICAgICAgICAqdGhpcyA9IHN0cmluZ1NyYzsKKyAgICB9Cit9CitDRlhfV2lkZVN0cmluZzo6Q0ZYX1dpZGVTdHJpbmcoRlhfV0NIQVIgY2gpCit7CisgICAgbV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nVygxKTsKKyAgICBpZiAobV9wRGF0YSkgeworICAgICAgICBtX3BEYXRhLT5tX1N0cmluZ1swXSA9IGNoOworICAgIH0KK30KK0NGWF9XaWRlU3RyaW5nOjpDRlhfV2lkZVN0cmluZyhjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHN0cikKK3sKKyAgICBpZiAoc3RyLklzRW1wdHkoKSkgeworICAgICAgICBtX3BEYXRhID0gTlVMTDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3BEYXRhID0gRlhfQWxsb2NTdHJpbmdXKHN0ci5HZXRMZW5ndGgoKSk7CisgICAgaWYgKG1fcERhdGEpIHsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wRGF0YS0+bV9TdHJpbmcsIHN0ci5HZXRQdHIoKSwgc3RyLkdldExlbmd0aCgpKnNpemVvZihGWF9XQ0hBUikpOworICAgIH0KK30KK0NGWF9XaWRlU3RyaW5nOjpDRlhfV2lkZVN0cmluZyhjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHN0cjEsIGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgc3RyMikKK3sKKyAgICBtX3BEYXRhID0gTlVMTDsKKyAgICBpbnQgbk5ld0xlbiA9IHN0cjEuR2V0TGVuZ3RoKCkgKyBzdHIyLkdldExlbmd0aCgpOworICAgIGlmIChuTmV3TGVuID09IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3BEYXRhID0gRlhfQWxsb2NTdHJpbmdXKG5OZXdMZW4pOworICAgIGlmIChtX3BEYXRhKSB7CisgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcERhdGEtPm1fU3RyaW5nLCBzdHIxLkdldFB0cigpLCBzdHIxLkdldExlbmd0aCgpKnNpemVvZihGWF9XQ0hBUikpOworICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhLT5tX1N0cmluZyArIHN0cjEuR2V0TGVuZ3RoKCksIHN0cjIuR2V0UHRyKCksIHN0cjIuR2V0TGVuZ3RoKCkqc2l6ZW9mKEZYX1dDSEFSKSk7CisgICAgfQorfQordm9pZCBDRlhfV2lkZVN0cmluZzo6UmVsZWFzZUJ1ZmZlcihGWF9TVFJTSVpFIG5OZXdMZW5ndGgpCit7CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENvcHlCZWZvcmVXcml0ZSgpOworICAgIGlmIChuTmV3TGVuZ3RoID09IC0xKSB7CisgICAgICAgIG5OZXdMZW5ndGggPSBtX3BEYXRhID8gKEZYX1NUUlNJWkUpRlhTWVNfd2NzbGVuKG1fcERhdGEtPm1fU3RyaW5nKSA6IDA7CisgICAgfQorICAgIGlmIChuTmV3TGVuZ3RoID09IDApIHsKKyAgICAgICAgRW1wdHkoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGWFNZU19hc3NlcnQobk5ld0xlbmd0aCA8PSBtX3BEYXRhLT5tX25BbGxvY0xlbmd0aCk7CisgICAgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCA9IG5OZXdMZW5ndGg7CisgICAgbV9wRGF0YS0+bV9TdHJpbmdbbk5ld0xlbmd0aF0gPSAwOworfQorY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIENGWF9XaWRlU3RyaW5nOjpvcGVyYXRvcj0oRlhfTFBDV1NUUiBscHN6KQoreworICAgIGlmIChscHN6ID09IE5VTEwgfHwgbHBzelswXSA9PSAwKSB7CisgICAgICAgIEVtcHR5KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQXNzaWduQ29weSgoRlhfU1RSU0laRSlGWFNZU193Y3NsZW4obHBzeiksIGxwc3opOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7Cit9Citjb25zdCBDRlhfV2lkZVN0cmluZyYgQ0ZYX1dpZGVTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHN0cmluZ1NyYykKK3sKKyAgICBpZiAoc3RyaW5nU3JjLklzRW1wdHkoKSkgeworICAgICAgICBFbXB0eSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFzc2lnbkNvcHkoc3RyaW5nU3JjLkdldExlbmd0aCgpLCBzdHJpbmdTcmMuR2V0UHRyKCkpOworICAgIH0KKyAgICByZXR1cm4gKnRoaXM7Cit9Citjb25zdCBDRlhfV2lkZVN0cmluZyYgQ0ZYX1dpZGVTdHJpbmc6Om9wZXJhdG9yPShjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyaW5nU3JjKQoreworICAgIGlmIChtX3BEYXRhID09IHN0cmluZ1NyYy5tX3BEYXRhKSB7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgaWYgKHN0cmluZ1NyYy5Jc0VtcHR5KCkpIHsKKyAgICAgICAgRW1wdHkoKTsKKyAgICB9IGVsc2UgaWYgKChtX3BEYXRhICYmIG1fcERhdGEtPm1fblJlZnMgPCAwKSB8fAorICAgICAgICAgICAgICAgKHN0cmluZ1NyYy5tX3BEYXRhICYmIHN0cmluZ1NyYy5tX3BEYXRhLT5tX25SZWZzIDwgMCkpIHsKKyAgICAgICAgQXNzaWduQ29weShzdHJpbmdTcmMubV9wRGF0YS0+bV9uRGF0YUxlbmd0aCwgc3RyaW5nU3JjLm1fcERhdGEtPm1fU3RyaW5nKTsKKyAgICB9IGVsc2UgeworICAgICAgICBFbXB0eSgpOworICAgICAgICBtX3BEYXRhID0gc3RyaW5nU3JjLm1fcERhdGE7CisgICAgICAgIGlmIChtX3BEYXRhKSB7CisgICAgICAgICAgICBtX3BEYXRhLT5tX25SZWZzICsrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAqdGhpczsKK30KK2NvbnN0IENGWF9XaWRlU3RyaW5nJiBDRlhfV2lkZVN0cmluZzo6b3BlcmF0b3IrPShGWF9XQ0hBUiBjaCkKK3sKKyAgICBDb25jYXRJblBsYWNlKDEsICZjaCk7CisgICAgcmV0dXJuICp0aGlzOworfQorY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIENGWF9XaWRlU3RyaW5nOjpvcGVyYXRvcis9KEZYX0xQQ1dTVFIgbHBzeikKK3sKKyAgICBpZiAobHBzeikgeworICAgICAgICBDb25jYXRJblBsYWNlKChGWF9TVFJTSVpFKUZYU1lTX3djc2xlbihscHN6KSwgbHBzeik7CisgICAgfQorICAgIHJldHVybiAqdGhpczsKK30KK2NvbnN0IENGWF9XaWRlU3RyaW5nJiBDRlhfV2lkZVN0cmluZzo6b3BlcmF0b3IrPShjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyaW5nKQoreworICAgIGlmIChzdHJpbmcubV9wRGF0YSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgQ29uY2F0SW5QbGFjZShzdHJpbmcubV9wRGF0YS0+bV9uRGF0YUxlbmd0aCwgc3RyaW5nLm1fcERhdGEtPm1fU3RyaW5nKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9Citjb25zdCBDRlhfV2lkZVN0cmluZyYgQ0ZYX1dpZGVTdHJpbmc6Om9wZXJhdG9yKz0oY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzdHJpbmcpCit7CisgICAgaWYgKHN0cmluZy5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyAgICBDb25jYXRJblBsYWNlKHN0cmluZy5HZXRMZW5ndGgoKSwgc3RyaW5nLkdldFB0cigpKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9Citib29sIG9wZXJhdG9yPT0oY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHMxLCBGWF9MUENXU1RSIHMyKQoreworICAgIHJldHVybiBzMS5FcXVhbChzMik7Cit9Citib29sIG9wZXJhdG9yPT0oRlhfTFBDV1NUUiBzMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHMyKQoreworICAgIHJldHVybiBzMi5FcXVhbChzMSk7Cit9Citib29sIG9wZXJhdG9yPT0oY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHMxLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgczIpCit7CisgICAgcmV0dXJuIHMxLkVxdWFsKHMyKTsKK30KK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBDRlhfV2lkZVN0cmluZyYgczEsIGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgczIpCit7CisgICAgcmV0dXJuIHMxLkVxdWFsKHMyKTsKK30KK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBDRlhfV2lkZVN0cmluZ0MmIHMxLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgczIpCit7CisgICAgcmV0dXJuIHMyLkVxdWFsKHMxKTsKK30KK2Jvb2wgb3BlcmF0b3IgIT0gKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzMSwgRlhfTFBDV1NUUiBzMikKK3sKKyAgICByZXR1cm4gIXMxLkVxdWFsKHMyKTsKK30KK2Jvb2wgb3BlcmF0b3IhPShjb25zdCBDRlhfV2lkZVN0cmluZyYgczEsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzMikKK3sKKyAgICByZXR1cm4gIXMxLkVxdWFsKHMyKTsKK30KK2Jvb2wgb3BlcmF0b3IhPShjb25zdCBDRlhfV2lkZVN0cmluZyYgczEsIGNvbnN0IENGWF9XaWRlU3RyaW5nQyYgczIpCit7CisgICAgcmV0dXJuICFzMS5FcXVhbChzMik7Cit9Citib29sIG9wZXJhdG9yIT0oY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzMSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHMyKQoreworICAgIHJldHVybiAhczIuRXF1YWwoczEpOworfQorYm9vbCBDRlhfV2lkZVN0cmluZzo6RXF1YWwoY29uc3QgQ0ZYX1dpZGVTdHJpbmdDJiBzdHIpIGNvbnN0Cit7CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gc3RyLklzRW1wdHkoKTsKKyAgICB9CisgICAgcmV0dXJuIHN0ci5HZXRMZW5ndGgoKSA9PSBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoICYmCisgICAgICAgICAgIEZYU1lTX21lbWNtcDMyKHN0ci5HZXRQdHIoKSwgbV9wRGF0YS0+bV9TdHJpbmcsIG1fcERhdGEtPm1fbkRhdGFMZW5ndGggKiBzaXplb2YoRlhfV0NIQVIpKSA9PSAwOworfQordm9pZCBDRlhfV2lkZVN0cmluZzo6RW1wdHkoKQoreworICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9wRGF0YS0+bV9uUmVmcyA+IDEpIHsKKyAgICAgICAgbV9wRGF0YS0+bV9uUmVmcyAtLTsKKyAgICB9IGVsc2UgeworICAgICAgICBGWF9GcmVlKG1fcERhdGEpOworICAgIH0KKyAgICBtX3BEYXRhID0gTlVMTDsKK30KK3ZvaWQgQ0ZYX1dpZGVTdHJpbmc6OkNvbmNhdEluUGxhY2UoRlhfU1RSU0laRSBuU3JjTGVuLCBGWF9MUENXU1RSIGxwc3pTcmNEYXRhKQoreworICAgIGlmIChuU3JjTGVuID09IDAgfHwgbHBzelNyY0RhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgbV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nVyhuU3JjTGVuKTsKKyAgICAgICAgaWYgKG1fcERhdGEpIHsKKyAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcERhdGEtPm1fU3RyaW5nLCBscHN6U3JjRGF0YSwgblNyY0xlbiAqIHNpemVvZihGWF9XQ0hBUikpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fcERhdGEtPm1fblJlZnMgPiAxIHx8IG1fcERhdGEtPm1fbkRhdGFMZW5ndGggKyBuU3JjTGVuID4gbV9wRGF0YS0+bV9uQWxsb2NMZW5ndGgpIHsKKyAgICAgICAgQ0ZYX1N0cmluZ0RhdGFXKiBwT2xkRGF0YSA9IG1fcERhdGE7CisgICAgICAgIENvbmNhdENvcHkobV9wRGF0YS0+bV9uRGF0YUxlbmd0aCwgbV9wRGF0YS0+bV9TdHJpbmcsIG5TcmNMZW4sIGxwc3pTcmNEYXRhKTsKKyAgICAgICAgRlhfUmVsZWFzZVN0cmluZ1cocE9sZERhdGEpOworICAgIH0gZWxzZSB7CisgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcERhdGEtPm1fU3RyaW5nICsgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCwgbHBzelNyY0RhdGEsIG5TcmNMZW4gKiBzaXplb2YoRlhfV0NIQVIpKTsKKyAgICAgICAgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCArPSBuU3JjTGVuOworICAgICAgICBtX3BEYXRhLT5tX1N0cmluZ1ttX3BEYXRhLT5tX25EYXRhTGVuZ3RoXSA9IDA7CisgICAgfQorfQordm9pZCBDRlhfV2lkZVN0cmluZzo6Q29uY2F0Q29weShGWF9TVFJTSVpFIG5TcmMxTGVuLCBGWF9MUENXU1RSIGxwc3pTcmMxRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfU1RSU0laRSBuU3JjMkxlbiwgRlhfTFBDV1NUUiBscHN6U3JjMkRhdGEpCit7CisgICAgRlhfU1RSU0laRSBuTmV3TGVuID0gblNyYzFMZW4gKyBuU3JjMkxlbjsKKyAgICBpZiAobk5ld0xlbiA9PSAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nVyhuTmV3TGVuKTsKKyAgICBpZiAobV9wRGF0YSkgeworICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhLT5tX1N0cmluZywgbHBzelNyYzFEYXRhLCBuU3JjMUxlbiAqIHNpemVvZihGWF9XQ0hBUikpOworICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BEYXRhLT5tX1N0cmluZyArIG5TcmMxTGVuLCBscHN6U3JjMkRhdGEsIG5TcmMyTGVuICogc2l6ZW9mKEZYX1dDSEFSKSk7CisgICAgfQorfQordm9pZCBDRlhfV2lkZVN0cmluZzo6Q29weUJlZm9yZVdyaXRlKCkKK3sKKyAgICBpZiAobV9wRGF0YSA9PSBOVUxMIHx8IG1fcERhdGEtPm1fblJlZnMgPD0gMSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENGWF9TdHJpbmdEYXRhVyogcERhdGEgPSBtX3BEYXRhOworICAgIG1fcERhdGEtPm1fblJlZnMgLS07CisgICAgRlhfU1RSU0laRSBuRGF0YUxlbmd0aCA9IHBEYXRhLT5tX25EYXRhTGVuZ3RoOworICAgIG1fcERhdGEgPSBGWF9BbGxvY1N0cmluZ1cobkRhdGFMZW5ndGgpOworICAgIGlmIChtX3BEYXRhICE9IE5VTEwpIHsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wRGF0YS0+bV9TdHJpbmcsIHBEYXRhLT5tX1N0cmluZywgKG5EYXRhTGVuZ3RoICsgMSkgKiBzaXplb2YoRlhfV0NIQVIpKTsKKyAgICB9Cit9Cit2b2lkIENGWF9XaWRlU3RyaW5nOjpBbGxvY0JlZm9yZVdyaXRlKEZYX1NUUlNJWkUgbkxlbikKK3sKKyAgICBpZiAobV9wRGF0YSAmJiBtX3BEYXRhLT5tX25SZWZzIDw9IDEgJiYgbV9wRGF0YS0+bV9uQWxsb2NMZW5ndGggPj0gbkxlbikgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEVtcHR5KCk7CisgICAgbV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nVyhuTGVuKTsKK30KK3ZvaWQgQ0ZYX1dpZGVTdHJpbmc6OkFzc2lnbkNvcHkoRlhfU1RSU0laRSBuU3JjTGVuLCBGWF9MUENXU1RSIGxwc3pTcmNEYXRhKQoreworICAgIEFsbG9jQmVmb3JlV3JpdGUoblNyY0xlbik7CisgICAgRlhTWVNfbWVtY3B5MzIobV9wRGF0YS0+bV9TdHJpbmcsIGxwc3pTcmNEYXRhLCBuU3JjTGVuICogc2l6ZW9mKEZYX1dDSEFSKSk7CisgICAgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCA9IG5TcmNMZW47CisgICAgbV9wRGF0YS0+bV9TdHJpbmdbblNyY0xlbl0gPSAwOworfQoraW50IENGWF9XaWRlU3RyaW5nOjpDb21wYXJlKEZYX0xQQ1dTVFIgbHBzeikgY29uc3QKK3sKKyAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAobHBzeiA9PSBOVUxMIHx8IGxwc3pbMF0gPT0gMCkgPyAwIDogLTE7CisgICAgfQorICAgIHJldHVybiBGWFNZU193Y3NjbXAobV9wRGF0YS0+bV9TdHJpbmcsIGxwc3opOworfQorQ0ZYX0J5dGVTdHJpbmcgQ0ZYX1dpZGVTdHJpbmc6OlVURjhFbmNvZGUoKSBjb25zdAoreworICAgIHJldHVybiBGWF9VVEY4RW5jb2RlKCp0aGlzKTsKK30KK0NGWF9CeXRlU3RyaW5nIENGWF9XaWRlU3RyaW5nOjpVVEYxNkxFX0VuY29kZShGWF9CT09MIGJUZXJtaW5hdGUpIGNvbnN0Cit7CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gYlRlcm1pbmF0ZSA/IENGWF9CeXRlU3RyaW5nKEZYX0JTVFJDKCJcMFwwIikpIDogQ0ZYX0J5dGVTdHJpbmcoKTsKKyAgICB9CisgICAgaW50IGxlbiA9IG1fcERhdGEtPm1fbkRhdGFMZW5ndGg7CisgICAgQ0ZYX0J5dGVTdHJpbmcgcmVzdWx0OworICAgIEZYX0xQU1RSIGJ1ZmZlciA9IHJlc3VsdC5HZXRCdWZmZXIobGVuICogMiArIChiVGVybWluYXRlID8gMiA6IDApKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSArKykgeworICAgICAgICBidWZmZXJbaSAqIDJdID0gbV9wRGF0YS0+bV9TdHJpbmdbaV0gJiAweGZmOworICAgICAgICBidWZmZXJbaSAqIDIgKyAxXSA9IG1fcERhdGEtPm1fU3RyaW5nW2ldID4+IDg7CisgICAgfQorICAgIGlmIChiVGVybWluYXRlKSB7CisgICAgICAgIGJ1ZmZlcltsZW4gKiAyXSA9IDA7CisgICAgICAgIGJ1ZmZlcltsZW4gKiAyICsgMV0gPSAwOworICAgICAgICByZXN1bHQuUmVsZWFzZUJ1ZmZlcihsZW4gKiAyICsgMik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzdWx0LlJlbGVhc2VCdWZmZXIobGVuICogMik7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9Cit2b2lkIENGWF9XaWRlU3RyaW5nOjpDb252ZXJ0RnJvbShjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyLCBDRlhfQ2hhck1hcCogcENoYXJNYXApCit7CisgICAgaWYgKHBDaGFyTWFwID09IE5VTEwpIHsKKyAgICAgICAgcENoYXJNYXAgPSBDRlhfQ2hhck1hcDo6R2V0RGVmYXVsdE1hcHBlcigpOworICAgIH0KKyAgICAqdGhpcyA9IHBDaGFyTWFwLT5tX0dldFdpZGVTdHJpbmcocENoYXJNYXAsIHN0cik7Cit9Cit2b2lkIENGWF9XaWRlU3RyaW5nOjpSZXNlcnZlKEZYX1NUUlNJWkUgbGVuKQoreworICAgIEdldEJ1ZmZlcihsZW4pOworICAgIFJlbGVhc2VCdWZmZXIoR2V0TGVuZ3RoKCkpOworfQorRlhfTFBXU1RSIENGWF9XaWRlU3RyaW5nOjpHZXRCdWZmZXIoRlhfU1RSU0laRSBuTWluQnVmTGVuZ3RoKQoreworICAgIGlmIChtX3BEYXRhID09IE5VTEwgJiYgbk1pbkJ1Zkxlbmd0aCA9PSAwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAobV9wRGF0YSAmJiBtX3BEYXRhLT5tX25SZWZzIDw9IDEgJiYgbV9wRGF0YS0+bV9uQWxsb2NMZW5ndGggPj0gbk1pbkJ1Zkxlbmd0aCkgeworICAgICAgICByZXR1cm4gbV9wRGF0YS0+bV9TdHJpbmc7CisgICAgfQorICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgbV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nVyhuTWluQnVmTGVuZ3RoKTsKKyAgICAgICAgaWYgKCFtX3BEYXRhKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoID0gMDsKKyAgICAgICAgbV9wRGF0YS0+bV9TdHJpbmdbMF0gPSAwOworICAgICAgICByZXR1cm4gbV9wRGF0YS0+bV9TdHJpbmc7CisgICAgfQorICAgIENGWF9TdHJpbmdEYXRhVyogcE9sZERhdGEgPSBtX3BEYXRhOworICAgIEZYX1NUUlNJWkUgbk9sZExlbiA9IHBPbGREYXRhLT5tX25EYXRhTGVuZ3RoOworICAgIGlmIChuTWluQnVmTGVuZ3RoIDwgbk9sZExlbikgeworICAgICAgICBuTWluQnVmTGVuZ3RoID0gbk9sZExlbjsKKyAgICB9CisgICAgbV9wRGF0YSA9IEZYX0FsbG9jU3RyaW5nVyhuTWluQnVmTGVuZ3RoKTsKKyAgICBpZiAoIW1fcERhdGEpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIEZYU1lTX21lbWNweTMyKG1fcERhdGEtPm1fU3RyaW5nLCBwT2xkRGF0YS0+bV9TdHJpbmcsIChuT2xkTGVuICsgMSkqc2l6ZW9mKEZYX1dDSEFSKSk7CisgICAgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCA9IG5PbGRMZW47CisgICAgcE9sZERhdGEtPm1fblJlZnMgLS07CisgICAgaWYgKHBPbGREYXRhLT5tX25SZWZzIDw9IDApIHsKKyAgICAgICAgRlhfRnJlZShwT2xkRGF0YSk7CisgICAgfQorICAgIHJldHVybiBtX3BEYXRhLT5tX1N0cmluZzsKK30KK0NGWF9XaWRlU3RyaW5nIENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoY29uc3QgY2hhciogc3RyLCBGWF9TVFJTSVpFIGxlbikKK3sKKyAgICBDRlhfV2lkZVN0cmluZyByZXN1bHQ7CisgICAgcmVzdWx0LkNvbnZlcnRGcm9tKENGWF9CeXRlU3RyaW5nKHN0ciwgbGVuKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KK0NGWF9XaWRlU3RyaW5nIENGWF9XaWRlU3RyaW5nOjpGcm9tVVRGOChjb25zdCBjaGFyKiBzdHIsIEZYX1NUUlNJWkUgbGVuKQoreworICAgIGlmICghc3RyKSB7CisgICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZygpOworICAgIH0KKyAgICBpZiAobGVuIDwgMCkgeworICAgICAgICBsZW4gPSAwOworICAgICAgICB3aGlsZSAoc3RyW2xlbl0pIHsKKyAgICAgICAgICAgIGxlbiArKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBDRlhfVVRGOERlY29kZXIgZGVjb2RlcjsKKyAgICBmb3IgKEZYX1NUUlNJWkUgaSA9IDA7IGkgPCBsZW47IGkgKyspIHsKKyAgICAgICAgZGVjb2Rlci5JbnB1dChzdHJbaV0pOworICAgIH0KKyAgICByZXR1cm4gZGVjb2Rlci5HZXRSZXN1bHQoKTsKK30KK0NGWF9XaWRlU3RyaW5nIENGWF9XaWRlU3RyaW5nOjpGcm9tVVRGMTZMRShjb25zdCB1bnNpZ25lZCBzaG9ydCogd3N0ciwgRlhfU1RSU0laRSB3bGVuKQoreworICAgIGlmICghd3N0ciB8fCAhd2xlbikgeworICAgICAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsKKyAgICB9CisgICAgaWYgKHdsZW4gPCAwKSB7CisgICAgICAgIHdsZW4gPSAwOworICAgICAgICB3aGlsZSAod3N0clt3bGVuXSkgeworICAgICAgICAgICAgd2xlbiArKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBDRlhfV2lkZVN0cmluZyByZXN1bHQ7CisgICAgRlhfV0NIQVIqIGJ1ZiA9IHJlc3VsdC5HZXRCdWZmZXIod2xlbik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3bGVuOyBpICsrKSB7CisgICAgICAgIGJ1ZltpXSA9IHdzdHJbaV07CisgICAgfQorICAgIHJlc3VsdC5SZWxlYXNlQnVmZmVyKHdsZW4pOworICAgIHJldHVybiByZXN1bHQ7Cit9Cit2b2lkIENGWF9XaWRlU3RyaW5nOjpBbGxvY0NvcHkoQ0ZYX1dpZGVTdHJpbmcmIGRlc3QsIEZYX1NUUlNJWkUgbkNvcHlMZW4sIEZYX1NUUlNJWkUgbkNvcHlJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9TVFJTSVpFIG5FeHRyYUxlbikgY29uc3QKK3sKKyAgICBGWF9TVFJTSVpFIG5OZXdMZW4gPSBuQ29weUxlbiArIG5FeHRyYUxlbjsKKyAgICBpZiAobk5ld0xlbiA9PSAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKGRlc3QubV9wRGF0YSA9PSBOVUxMKTsKKyAgICBkZXN0Lm1fcERhdGEgPSBGWF9BbGxvY1N0cmluZ1cobk5ld0xlbik7CisgICAgaWYgKGRlc3QubV9wRGF0YSkgeworICAgICAgICBGWFNZU19tZW1jcHkzMihkZXN0Lm1fcERhdGEtPm1fU3RyaW5nLCBtX3BEYXRhLT5tX1N0cmluZyArIG5Db3B5SW5kZXgsIG5Db3B5TGVuICogc2l6ZW9mKEZYX1dDSEFSKSk7CisgICAgfQorfQorQ0ZYX1dpZGVTdHJpbmcgQ0ZYX1dpZGVTdHJpbmc6OkxlZnQoRlhfU1RSU0laRSBuQ291bnQpIGNvbnN0Cit7CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsKKyAgICB9CisgICAgaWYgKG5Db3VudCA8IDApIHsKKyAgICAgICAgbkNvdW50ID0gMDsKKyAgICB9CisgICAgaWYgKG5Db3VudCA+PSBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoKSB7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgQ0ZYX1dpZGVTdHJpbmcgZGVzdDsKKyAgICBBbGxvY0NvcHkoZGVzdCwgbkNvdW50LCAwLCAwKTsKKyAgICByZXR1cm4gZGVzdDsKK30KK0NGWF9XaWRlU3RyaW5nIENGWF9XaWRlU3RyaW5nOjpNaWQoRlhfU1RSU0laRSBuRmlyc3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIE1pZChuRmlyc3QsIG1fcERhdGEtPm1fbkRhdGFMZW5ndGggLSBuRmlyc3QpOworfQorQ0ZYX1dpZGVTdHJpbmcgQ0ZYX1dpZGVTdHJpbmc6Ok1pZChGWF9TVFJTSVpFIG5GaXJzdCwgRlhfU1RSU0laRSBuQ291bnQpIGNvbnN0Cit7CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsKKyAgICB9CisgICAgaWYgKG5GaXJzdCA8IDApIHsKKyAgICAgICAgbkZpcnN0ID0gMDsKKyAgICB9CisgICAgaWYgKG5Db3VudCA8IDApIHsKKyAgICAgICAgbkNvdW50ID0gMDsKKyAgICB9CisgICAgaWYgKG5GaXJzdCArIG5Db3VudCA+IG1fcERhdGEtPm1fbkRhdGFMZW5ndGgpIHsKKyAgICAgICAgbkNvdW50ID0gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCAtIG5GaXJzdDsKKyAgICB9CisgICAgaWYgKG5GaXJzdCA+IG1fcERhdGEtPm1fbkRhdGFMZW5ndGgpIHsKKyAgICAgICAgbkNvdW50ID0gMDsKKyAgICB9CisgICAgaWYgKG5GaXJzdCA9PSAwICYmIG5GaXJzdCArIG5Db3VudCA9PSBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoKSB7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAgQ0ZYX1dpZGVTdHJpbmcgZGVzdDsKKyAgICBBbGxvY0NvcHkoZGVzdCwgbkNvdW50LCBuRmlyc3QsIDApOworICAgIHJldHVybiBkZXN0OworfQorQ0ZYX1dpZGVTdHJpbmcgQ0ZYX1dpZGVTdHJpbmc6OlJpZ2h0KEZYX1NUUlNJWkUgbkNvdW50KSBjb25zdAoreworICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7CisgICAgfQorICAgIGlmIChuQ291bnQgPCAwKSB7CisgICAgICAgIG5Db3VudCA9IDA7CisgICAgfQorICAgIGlmIChuQ291bnQgPj0gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCkgeworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorICAgIENGWF9XaWRlU3RyaW5nIGRlc3Q7CisgICAgQWxsb2NDb3B5KGRlc3QsIG5Db3VudCwgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCAtIG5Db3VudCwgMCk7CisgICAgcmV0dXJuIGRlc3Q7Cit9CitpbnQgQ0ZYX1dpZGVTdHJpbmc6OkNvbXBhcmVOb0Nhc2UoRlhfTFBDV1NUUiBscHN6KSBjb25zdAoreworICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIChscHN6ID09IE5VTEwgfHwgbHBzelswXSA9PSAwKSA/IDAgOiAtMTsKKyAgICB9CisgICAgcmV0dXJuIEZYU1lTX3djc2ljbXAobV9wRGF0YS0+bV9TdHJpbmcsIGxwc3opOworfQoraW50IENGWF9XaWRlU3RyaW5nOjpDb21wYXJlKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHIpIGNvbnN0Cit7CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICBpZiAoc3RyLm1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0gZWxzZSBpZiAoc3RyLm1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgaW50IHRoaXNfbGVuID0gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aDsKKyAgICBpbnQgdGhhdF9sZW4gPSBzdHIubV9wRGF0YS0+bV9uRGF0YUxlbmd0aDsKKyAgICBpbnQgbWluX2xlbiA9IHRoaXNfbGVuIDwgdGhhdF9sZW4gPyB0aGlzX2xlbiA6IHRoYXRfbGVuOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWluX2xlbjsgaSArKykgeworICAgICAgICBpZiAobV9wRGF0YS0+bV9TdHJpbmdbaV0gPCBzdHIubV9wRGF0YS0+bV9TdHJpbmdbaV0pIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfSBlbHNlIGlmIChtX3BEYXRhLT5tX1N0cmluZ1tpXSA+IHN0ci5tX3BEYXRhLT5tX1N0cmluZ1tpXSkgeworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHRoaXNfbGVuIDwgdGhhdF9sZW4pIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0gZWxzZSBpZiAodGhpc19sZW4gPiB0aGF0X2xlbikgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CitGWF9MUFdTVFIgQ0ZYX1dpZGVTdHJpbmc6OkxvY2tCdWZmZXIoKQoreworICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIEZYX0xQV1NUUiBscHN6ID0gR2V0QnVmZmVyKDApOworICAgIG1fcERhdGEtPm1fblJlZnMgPSAtMTsKKyAgICByZXR1cm4gbHBzejsKK30KK3ZvaWQgQ0ZYX1dpZGVTdHJpbmc6OlNldEF0KEZYX1NUUlNJWkUgbkluZGV4LCBGWF9XQ0hBUiBjaCkKK3sKKyAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKG5JbmRleCA+PSAwKTsKKyAgICBBU1NFUlQobkluZGV4IDwgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCk7CisgICAgQ29weUJlZm9yZVdyaXRlKCk7CisgICAgbV9wRGF0YS0+bV9TdHJpbmdbbkluZGV4XSA9IGNoOworfQordm9pZCBDRlhfV2lkZVN0cmluZzo6TWFrZUxvd2VyKCkKK3sKKyAgICBpZiAobV9wRGF0YSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ29weUJlZm9yZVdyaXRlKCk7CisgICAgaWYgKEdldExlbmd0aCgpIDwgMSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYU1lTX3djc2x3cihtX3BEYXRhLT5tX1N0cmluZyk7Cit9Cit2b2lkIENGWF9XaWRlU3RyaW5nOjpNYWtlVXBwZXIoKQoreworICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDb3B5QmVmb3JlV3JpdGUoKTsKKyAgICBpZiAoR2V0TGVuZ3RoKCkgPCAxKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhTWVNfd2NzdXByKG1fcERhdGEtPm1fU3RyaW5nKTsKK30KK0ZYX1NUUlNJWkUgQ0ZYX1dpZGVTdHJpbmc6OkZpbmQoRlhfTFBDV1NUUiBscHN6U3ViLCBGWF9TVFJTSVpFIG5TdGFydCkgY29uc3QKK3sKKyAgICBGWF9TVFJTSVpFIG5MZW5ndGggPSBHZXRMZW5ndGgoKTsKKyAgICBpZiAobkxlbmd0aCA8IDEgfHwgblN0YXJ0ID4gbkxlbmd0aCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIEZYX0xQQ1dTVFIgbHBzeiA9IChGWF9MUENXU1RSKUZYU1lTX3djc3N0cihtX3BEYXRhLT5tX1N0cmluZyArIG5TdGFydCwgbHBzelN1Yik7CisgICAgcmV0dXJuIChscHN6ID09IE5VTEwpID8gLTEgOiAoaW50KShscHN6IC0gbV9wRGF0YS0+bV9TdHJpbmcpOworfQorRlhfU1RSU0laRSBDRlhfV2lkZVN0cmluZzo6RmluZChGWF9XQ0hBUiBjaCwgRlhfU1RSU0laRSBuU3RhcnQpIGNvbnN0Cit7CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIEZYX1NUUlNJWkUgbkxlbmd0aCA9IG1fcERhdGEtPm1fbkRhdGFMZW5ndGg7CisgICAgaWYgKG5TdGFydCA+PSBuTGVuZ3RoKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgRlhfTFBDV1NUUiBscHN6ID0gKEZYX0xQQ1dTVFIpRlhTWVNfd2NzY2hyKG1fcERhdGEtPm1fU3RyaW5nICsgblN0YXJ0LCBjaCk7CisgICAgcmV0dXJuIChscHN6ID09IE5VTEwpID8gLTEgOiAoaW50KShscHN6IC0gbV9wRGF0YS0+bV9TdHJpbmcpOworfQordm9pZCBDRlhfV2lkZVN0cmluZzo6VHJpbVJpZ2h0KEZYX0xQQ1dTVFIgbHBzelRhcmdldExpc3QpCit7CisgICAgRlhTWVNfYXNzZXJ0KGxwc3pUYXJnZXRMaXN0ICE9IE5VTEwpOworICAgIGlmIChtX3BEYXRhID09IE5VTEwgfHwgKmxwc3pUYXJnZXRMaXN0ID09IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDb3B5QmVmb3JlV3JpdGUoKTsKKyAgICBGWF9TVFJTSVpFIGxlbiA9IEdldExlbmd0aCgpOworICAgIGlmIChsZW4gPCAxKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfU1RSU0laRSBwb3MgPSBsZW47CisgICAgd2hpbGUgKHBvcykgeworICAgICAgICBpZiAoRlhTWVNfd2NzY2hyKGxwc3pUYXJnZXRMaXN0LCBtX3BEYXRhLT5tX1N0cmluZ1twb3MgLSAxXSkgPT0gTlVMTCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcG9zIC0tOworICAgIH0KKyAgICBpZiAocG9zIDwgbGVuKSB7CisgICAgICAgIG1fcERhdGEtPm1fU3RyaW5nW3Bvc10gPSAwOworICAgICAgICBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoID0gcG9zOworICAgIH0KK30KK3ZvaWQgQ0ZYX1dpZGVTdHJpbmc6OlRyaW1SaWdodChGWF9XQ0hBUiBjaFRhcmdldCkKK3sKKyAgICBGWF9XQ0hBUiBzdHJbMl0gPSB7Y2hUYXJnZXQsIDB9OworICAgIFRyaW1SaWdodChzdHIpOworfQordm9pZCBDRlhfV2lkZVN0cmluZzo6VHJpbVJpZ2h0KCkKK3sKKyAgICBUcmltUmlnaHQoTCJceDA5XHgwYVx4MGJceDBjXHgwZFx4MjAiKTsKK30KK3ZvaWQgQ0ZYX1dpZGVTdHJpbmc6OlRyaW1MZWZ0KEZYX0xQQ1dTVFIgbHBzelRhcmdldHMpCit7CisgICAgRlhTWVNfYXNzZXJ0KGxwc3pUYXJnZXRzICE9IE5VTEwpOworICAgIGlmIChtX3BEYXRhID09IE5VTEwgfHwgKmxwc3pUYXJnZXRzID09IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDb3B5QmVmb3JlV3JpdGUoKTsKKyAgICBpZiAoR2V0TGVuZ3RoKCkgPCAxKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhfTFBDV1NUUiBscHN6ID0gbV9wRGF0YS0+bV9TdHJpbmc7CisgICAgd2hpbGUgKCpscHN6ICE9IDApIHsKKyAgICAgICAgaWYgKEZYU1lTX3djc2NocihscHN6VGFyZ2V0cywgKmxwc3opID09IE5VTEwpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGxwc3ogKys7CisgICAgfQorICAgIGlmIChscHN6ICE9IG1fcERhdGEtPm1fU3RyaW5nKSB7CisgICAgICAgIGludCBuRGF0YUxlbmd0aCA9IG1fcERhdGEtPm1fbkRhdGFMZW5ndGggLSAoRlhfU1RSU0laRSkobHBzeiAtIG1fcERhdGEtPm1fU3RyaW5nKTsKKyAgICAgICAgRlhTWVNfbWVtbW92ZTMyKG1fcERhdGEtPm1fU3RyaW5nLCBscHN6LCAobkRhdGFMZW5ndGggKyAxKSpzaXplb2YoRlhfV0NIQVIpKTsKKyAgICAgICAgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCA9IG5EYXRhTGVuZ3RoOworICAgIH0KK30KK3ZvaWQgQ0ZYX1dpZGVTdHJpbmc6OlRyaW1MZWZ0KEZYX1dDSEFSIGNoVGFyZ2V0KQoreworICAgIEZYX1dDSEFSIHN0clsyXSA9IHtjaFRhcmdldCwgMH07CisgICAgVHJpbUxlZnQoc3RyKTsKK30KK3ZvaWQgQ0ZYX1dpZGVTdHJpbmc6OlRyaW1MZWZ0KCkKK3sKKyAgICBUcmltTGVmdChMIlx4MDlceDBhXHgwYlx4MGNceDBkXHgyMCIpOworfQorRlhfU1RSU0laRSBDRlhfV2lkZVN0cmluZzo6UmVwbGFjZShGWF9MUENXU1RSIGxwc3pPbGQsIEZYX0xQQ1dTVFIgbHBzek5ldykKK3sKKyAgICBpZiAoR2V0TGVuZ3RoKCkgPCAxKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAobHBzek9sZCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBGWF9TVFJTSVpFIG5Tb3VyY2VMZW4gPSAoRlhfU1RSU0laRSlGWFNZU193Y3NsZW4obHBzek9sZCk7CisgICAgaWYgKG5Tb3VyY2VMZW4gPT0gMCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgRlhfU1RSU0laRSBuUmVwbGFjZW1lbnRMZW4gPSBscHN6TmV3ID8gKEZYX1NUUlNJWkUpRlhTWVNfd2NzbGVuKGxwc3pOZXcpIDogMDsKKyAgICBGWF9TVFJTSVpFIG5Db3VudCA9IDA7CisgICAgRlhfTFBXU1RSIGxwc3pTdGFydCA9IG1fcERhdGEtPm1fU3RyaW5nOworICAgIEZYX0xQV1NUUiBscHN6RW5kID0gbV9wRGF0YS0+bV9TdHJpbmcgKyBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoOworICAgIEZYX0xQV1NUUiBscHN6VGFyZ2V0OworICAgIHsKKyAgICAgICAgd2hpbGUgKChscHN6VGFyZ2V0ID0gKEZYX0xQV1NUUilGWFNZU193Y3NzdHIobHBzelN0YXJ0LCBscHN6T2xkKSkgIT0gTlVMTCAmJiBscHN6U3RhcnQgPCBscHN6RW5kKSB7CisgICAgICAgICAgICBuQ291bnQrKzsKKyAgICAgICAgICAgIGxwc3pTdGFydCA9IGxwc3pUYXJnZXQgKyBuU291cmNlTGVuOworICAgICAgICB9CisgICAgfQorICAgIGlmIChuQ291bnQgPiAwKSB7CisgICAgICAgIENvcHlCZWZvcmVXcml0ZSgpOworICAgICAgICBGWF9TVFJTSVpFIG5PbGRMZW5ndGggPSBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoOworICAgICAgICBGWF9TVFJTSVpFIG5OZXdMZW5ndGggPSAgbk9sZExlbmd0aCArIChuUmVwbGFjZW1lbnRMZW4gLSBuU291cmNlTGVuKSAqIG5Db3VudDsKKyAgICAgICAgaWYgKG1fcERhdGEtPm1fbkFsbG9jTGVuZ3RoIDwgbk5ld0xlbmd0aCB8fCBtX3BEYXRhLT5tX25SZWZzID4gMSkgeworICAgICAgICAgICAgQ0ZYX1N0cmluZ0RhdGFXKiBwT2xkRGF0YSA9IG1fcERhdGE7CisgICAgICAgICAgICBGWF9MUENXU1RSIHBzdHIgPSBtX3BEYXRhLT5tX1N0cmluZzsKKyAgICAgICAgICAgIG1fcERhdGEgPSBGWF9BbGxvY1N0cmluZ1cobk5ld0xlbmd0aCk7CisgICAgICAgICAgICBpZiAoIW1fcERhdGEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcERhdGEtPm1fU3RyaW5nLCBwc3RyLCBwT2xkRGF0YS0+bV9uRGF0YUxlbmd0aCAqIHNpemVvZihGWF9XQ0hBUikpOworICAgICAgICAgICAgRlhfUmVsZWFzZVN0cmluZ1cocE9sZERhdGEpOworICAgICAgICB9CisgICAgICAgIGxwc3pTdGFydCA9IG1fcERhdGEtPm1fU3RyaW5nOworICAgICAgICBscHN6RW5kID0gbV9wRGF0YS0+bV9TdHJpbmcgKyBGWF9NQVgobV9wRGF0YS0+bV9uRGF0YUxlbmd0aCwgbk5ld0xlbmd0aCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlICgobHBzelRhcmdldCA9IChGWF9MUFdTVFIpRlhTWVNfd2Nzc3RyKGxwc3pTdGFydCwgbHBzek9sZCkpICE9IE5VTEwgJiYgbHBzelN0YXJ0IDwgbHBzekVuZCkgeworICAgICAgICAgICAgICAgIEZYX1NUUlNJWkUgbkJhbGFuY2UgPSBuT2xkTGVuZ3RoIC0gKEZYX1NUUlNJWkUpKGxwc3pUYXJnZXQgLSBtX3BEYXRhLT5tX1N0cmluZyArIG5Tb3VyY2VMZW4pOworICAgICAgICAgICAgICAgIEZYU1lTX21lbW1vdmUzMihscHN6VGFyZ2V0ICsgblJlcGxhY2VtZW50TGVuLCBscHN6VGFyZ2V0ICsgblNvdXJjZUxlbiwgbkJhbGFuY2UgKiBzaXplb2YoRlhfV0NIQVIpKTsKKyAgICAgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihscHN6VGFyZ2V0LCBscHN6TmV3LCBuUmVwbGFjZW1lbnRMZW4gKiBzaXplb2YoRlhfV0NIQVIpKTsKKyAgICAgICAgICAgICAgICBscHN6U3RhcnQgPSBscHN6VGFyZ2V0ICsgblJlcGxhY2VtZW50TGVuOworICAgICAgICAgICAgICAgIGxwc3pTdGFydFtuQmFsYW5jZV0gPSAwOworICAgICAgICAgICAgICAgIG5PbGRMZW5ndGggKz0gKG5SZXBsYWNlbWVudExlbiAtIG5Tb3VyY2VMZW4pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEFTU0VSVChtX3BEYXRhLT5tX1N0cmluZ1tuTmV3TGVuZ3RoXSA9PSAwKTsKKyAgICAgICAgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCA9IG5OZXdMZW5ndGg7CisgICAgfQorICAgIHJldHVybiBuQ291bnQ7Cit9CitGWF9TVFJTSVpFIENGWF9XaWRlU3RyaW5nOjpJbnNlcnQoRlhfU1RSU0laRSBuSW5kZXgsIEZYX1dDSEFSIGNoKQoreworICAgIENvcHlCZWZvcmVXcml0ZSgpOworICAgIGlmIChuSW5kZXggPCAwKSB7CisgICAgICAgIG5JbmRleCA9IDA7CisgICAgfQorICAgIEZYX1NUUlNJWkUgbk5ld0xlbmd0aCA9IEdldExlbmd0aCgpOworICAgIGlmIChuSW5kZXggPiBuTmV3TGVuZ3RoKSB7CisgICAgICAgIG5JbmRleCA9IG5OZXdMZW5ndGg7CisgICAgfQorICAgIG5OZXdMZW5ndGgrKzsKKyAgICBpZiAobV9wRGF0YSA9PSBOVUxMIHx8IG1fcERhdGEtPm1fbkFsbG9jTGVuZ3RoIDwgbk5ld0xlbmd0aCkgeworICAgICAgICBDRlhfU3RyaW5nRGF0YVcqIHBPbGREYXRhID0gbV9wRGF0YTsKKyAgICAgICAgRlhfTFBDV1NUUiBwc3RyID0gbV9wRGF0YS0+bV9TdHJpbmc7CisgICAgICAgIG1fcERhdGEgPSBGWF9BbGxvY1N0cmluZ1cobk5ld0xlbmd0aCk7CisgICAgICAgIGlmICghbV9wRGF0YSkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgaWYocE9sZERhdGEgIT0gTlVMTCkgeworICAgICAgICAgICAgRlhTWVNfbWVtbW92ZTMyKG1fcERhdGEtPm1fU3RyaW5nLCBwc3RyLCAocE9sZERhdGEtPm1fbkRhdGFMZW5ndGggKyAxKSpzaXplb2YoRlhfV0NIQVIpKTsKKyAgICAgICAgICAgIEZYX1JlbGVhc2VTdHJpbmdXKHBPbGREYXRhKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fcERhdGEtPm1fU3RyaW5nWzBdID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBGWFNZU19tZW1tb3ZlMzIobV9wRGF0YS0+bV9TdHJpbmcgKyBuSW5kZXggKyAxLAorICAgICAgICAgICAgICAgICAgICBtX3BEYXRhLT5tX1N0cmluZyArIG5JbmRleCwgKG5OZXdMZW5ndGggLSBuSW5kZXgpKnNpemVvZihGWF9XQ0hBUikpOworICAgIG1fcERhdGEtPm1fU3RyaW5nW25JbmRleF0gPSBjaDsKKyAgICBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoID0gbk5ld0xlbmd0aDsKKyAgICByZXR1cm4gbk5ld0xlbmd0aDsKK30KK0ZYX1NUUlNJWkUgQ0ZYX1dpZGVTdHJpbmc6OkRlbGV0ZShGWF9TVFJTSVpFIG5JbmRleCwgRlhfU1RSU0laRSBuQ291bnQpCit7CisgICAgaWYgKEdldExlbmd0aCgpIDwgMSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKG5JbmRleCA8IDApIHsKKyAgICAgICAgbkluZGV4ID0gMDsKKyAgICB9CisgICAgRlhfU1RSU0laRSBuT2xkTGVuZ3RoID0gbV9wRGF0YS0+bV9uRGF0YUxlbmd0aDsKKyAgICBpZiAobkNvdW50ID4gMCAmJiBuSW5kZXggPCBuT2xkTGVuZ3RoKSB7CisgICAgICAgIENvcHlCZWZvcmVXcml0ZSgpOworICAgICAgICBpbnQgbkJ5dGVzVG9Db3B5ID0gbk9sZExlbmd0aCAtIChuSW5kZXggKyBuQ291bnQpICsgMTsKKyAgICAgICAgRlhTWVNfbWVtbW92ZTMyKG1fcERhdGEtPm1fU3RyaW5nICsgbkluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgbV9wRGF0YS0+bV9TdHJpbmcgKyBuSW5kZXggKyBuQ291bnQsIG5CeXRlc1RvQ29weSAqIHNpemVvZihGWF9XQ0hBUikpOworICAgICAgICBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoID0gbk9sZExlbmd0aCAtIG5Db3VudDsKKyAgICB9CisgICAgcmV0dXJuIG1fcERhdGEtPm1fbkRhdGFMZW5ndGg7Cit9CitGWF9TVFJTSVpFIENGWF9XaWRlU3RyaW5nOjpSZW1vdmUoRlhfV0NIQVIgY2hSZW1vdmUpCit7CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgQ29weUJlZm9yZVdyaXRlKCk7CisgICAgaWYgKEdldExlbmd0aCgpIDwgMSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgRlhfTFBXU1RSIHBzdHJTb3VyY2UgPSBtX3BEYXRhLT5tX1N0cmluZzsKKyAgICBGWF9MUFdTVFIgcHN0ckRlc3QgPSBtX3BEYXRhLT5tX1N0cmluZzsKKyAgICBGWF9MUFdTVFIgcHN0ckVuZCA9IG1fcERhdGEtPm1fU3RyaW5nICsgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aDsKKyAgICB3aGlsZSAocHN0clNvdXJjZSA8IHBzdHJFbmQpIHsKKyAgICAgICAgaWYgKCpwc3RyU291cmNlICE9IGNoUmVtb3ZlKSB7CisgICAgICAgICAgICAqcHN0ckRlc3QgPSAqcHN0clNvdXJjZTsKKyAgICAgICAgICAgIHBzdHJEZXN0ICsrOworICAgICAgICB9CisgICAgICAgIHBzdHJTb3VyY2UgKys7CisgICAgfQorICAgICpwc3RyRGVzdCA9IDA7CisgICAgRlhfU1RSU0laRSBuQ291bnQgPSAoRlhfU1RSU0laRSkocHN0clNvdXJjZSAtIHBzdHJEZXN0KTsKKyAgICBtX3BEYXRhLT5tX25EYXRhTGVuZ3RoIC09IG5Db3VudDsKKyAgICByZXR1cm4gbkNvdW50OworfQorI2RlZmluZSBGT1JDRV9BTlNJICAgICAgMHgxMDAwMAorI2RlZmluZSBGT1JDRV9VTklDT0RFICAgMHgyMDAwMAorI2RlZmluZSBGT1JDRV9JTlQ2NCAgICAgMHg0MDAwMAordm9pZCBDRlhfV2lkZVN0cmluZzo6Rm9ybWF0VihGWF9MUENXU1RSIGxwc3pGb3JtYXQsIHZhX2xpc3QgYXJnTGlzdCkKK3sKKyAgICB2YV9saXN0IGFyZ0xpc3RTYXZlOworI2lmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSB8fCAoIWRlZmluZWQoX01TQ19WRVIpICYmIChfRlhfQ1BVXyA9PSBfRlhfWDY0XyB8fCBfRlhfQ1BVXyA9PSBfRlhfSUE2NF8gfHwgX0ZYX0NQVV8gPT0gX0ZYX0FSTTY0XykpIHx8IGRlZmluZWQoX19uYXRpdmVfY2xpZW50X18pCisgICAgdmFfY29weShhcmdMaXN0U2F2ZSwgYXJnTGlzdCk7CisjZWxzZQorICAgIGFyZ0xpc3RTYXZlID0gYXJnTGlzdDsKKyNlbmRpZgorICAgIGludCBuTWF4TGVuID0gMDsKKyAgICBmb3IgKEZYX0xQQ1dTVFIgbHBzeiA9IGxwc3pGb3JtYXQ7ICpscHN6ICE9IDA7IGxwc3ogKyspIHsKKyAgICAgICAgaWYgKCpscHN6ICE9ICclJyB8fCAqKGxwc3ogPSBscHN6ICsgMSkgPT0gJyUnKSB7CisgICAgICAgICAgICBuTWF4TGVuICs9IChGWF9TVFJTSVpFKUZYU1lTX3djc2xlbihscHN6KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGludCBuSXRlbUxlbiA9IDA7CisgICAgICAgIGludCBuV2lkdGggPSAwOworICAgICAgICBmb3IgKDsgKmxwc3ogIT0gMDsgbHBzeiArKykgeworICAgICAgICAgICAgaWYgKCpscHN6ID09ICcjJykgeworICAgICAgICAgICAgICAgIG5NYXhMZW4gKz0gMjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKmxwc3ogPT0gJyonKSB7CisgICAgICAgICAgICAgICAgbldpZHRoID0gdmFfYXJnKGFyZ0xpc3QsIGludCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCpscHN6ID09ICctJyB8fCAqbHBzeiA9PSAnKycgfHwgKmxwc3ogPT0gJzAnIHx8CisgICAgICAgICAgICAgICAgICAgICAgICpscHN6ID09ICcgJykKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobldpZHRoID09IDApIHsKKyAgICAgICAgICAgIG5XaWR0aCA9IEZYU1lTX3d0b2kobHBzeik7CisgICAgICAgICAgICBmb3IgKDsgKmxwc3ogIT0gMCAmJiAoKmxwc3opIDw9ICc5JyAmJiAoKmxwc3opID49ICcwJzsgbHBzeiArKykKKyAgICAgICAgICAgICAgICA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5XaWR0aCA8IDAgfHwgbldpZHRoID4gMTI4ICogMTAyNCkgeworICAgICAgICAgICAgbHBzekZvcm1hdCA9IChGWF9MUENXU1RSKUwiQmFkIHdpZHRoIjsKKyAgICAgICAgICAgIG5NYXhMZW4gPSAxMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGludCBuUHJlY2lzaW9uID0gMDsKKyAgICAgICAgaWYgKCpscHN6ID09ICcuJykgeworICAgICAgICAgICAgbHBzeiArKzsKKyAgICAgICAgICAgIGlmICgqbHBzeiA9PSAnKicpIHsKKyAgICAgICAgICAgICAgICBuUHJlY2lzaW9uID0gdmFfYXJnKGFyZ0xpc3QsIGludCk7CisgICAgICAgICAgICAgICAgbHBzeiArKzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgblByZWNpc2lvbiA9IEZYU1lTX3d0b2kobHBzeik7CisgICAgICAgICAgICAgICAgZm9yICg7ICpscHN6ICE9IDAgJiYgKCpscHN6KSA+PSAnMCcgJiYgKCpscHN6KSA8PSAnOSc7IGxwc3ogKyspCisgICAgICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoblByZWNpc2lvbiA8IDAgfHwgblByZWNpc2lvbiA+IDEyOCAqIDEwMjQpIHsKKyAgICAgICAgICAgIGxwc3pGb3JtYXQgPSAoRlhfTFBDV1NUUilMIkJhZCBwcmVjaXNpb24iOworICAgICAgICAgICAgbk1heExlbiA9IDE0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaW50IG5Nb2RpZmllciA9IDA7CisgICAgICAgIGlmICgqbHBzeiA9PSBMJ0knICYmICoobHBzeiArIDEpID09IEwnNicgJiYgKihscHN6ICsgMikgPT0gTCc0JykgeworICAgICAgICAgICAgbHBzeiArPSAzOworICAgICAgICAgICAgbk1vZGlmaWVyID0gRk9SQ0VfSU5UNjQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzd2l0Y2ggKCpscHN6KSB7CisgICAgICAgICAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgICAgICAgICAgIG5Nb2RpZmllciA9IEZPUkNFX0FOU0k7CisgICAgICAgICAgICAgICAgICAgIGxwc3ogKys7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ2wnOgorICAgICAgICAgICAgICAgICAgICBuTW9kaWZpZXIgPSBGT1JDRV9VTklDT0RFOworICAgICAgICAgICAgICAgICAgICBscHN6ICsrOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICdGJzoKKyAgICAgICAgICAgICAgICBjYXNlICdOJzoKKyAgICAgICAgICAgICAgICBjYXNlICdMJzoKKyAgICAgICAgICAgICAgICAgICAgbHBzeiArKzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoICgqbHBzeiB8IG5Nb2RpZmllcikgeworICAgICAgICAgICAgY2FzZSAnYyc6CisgICAgICAgICAgICBjYXNlICdDJzoKKyAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IDI7CisgICAgICAgICAgICAgICAgdmFfYXJnKGFyZ0xpc3QsIGludCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdjJ3xGT1JDRV9BTlNJOgorICAgICAgICAgICAgY2FzZSAnQyd8Rk9SQ0VfQU5TSToKKyAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IDI7CisgICAgICAgICAgICAgICAgdmFfYXJnKGFyZ0xpc3QsIGludCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdjJ3xGT1JDRV9VTklDT0RFOgorICAgICAgICAgICAgY2FzZSAnQyd8Rk9SQ0VfVU5JQ09ERToKKyAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IDI7CisgICAgICAgICAgICAgICAgdmFfYXJnKGFyZ0xpc3QsIGludCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdzJzogeworICAgICAgICAgICAgICAgICAgICBGWF9MUENXU1RSIHBzdHJOZXh0QXJnID0gdmFfYXJnKGFyZ0xpc3QsIEZYX0xQQ1dTVFIpOworICAgICAgICAgICAgICAgICAgICBpZiAocHN0ck5leHRBcmcgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSA2OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSAoRlhfU1RSU0laRSlGWFNZU193Y3NsZW4ocHN0ck5leHRBcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5JdGVtTGVuIDwgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1MnOiB7CisgICAgICAgICAgICAgICAgICAgIEZYX0xQQ1NUUiBwc3RyTmV4dEFyZyA9IHZhX2FyZyhhcmdMaXN0LCBGWF9MUENTVFIpOworICAgICAgICAgICAgICAgICAgICBpZiAocHN0ck5leHRBcmcgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSA2OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSAoRlhfU1RSU0laRSlGWFNZU19zdHJsZW4ocHN0ck5leHRBcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5JdGVtTGVuIDwgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3MnfEZPUkNFX0FOU0k6CisgICAgICAgICAgICBjYXNlICdTJ3xGT1JDRV9BTlNJOiB7CisgICAgICAgICAgICAgICAgICAgIEZYX0xQQ1NUUiBwc3RyTmV4dEFyZyA9IHZhX2FyZyhhcmdMaXN0LCBGWF9MUENTVFIpOworICAgICAgICAgICAgICAgICAgICBpZiAocHN0ck5leHRBcmcgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSA2OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSAoRlhfU1RSU0laRSlGWFNZU19zdHJsZW4ocHN0ck5leHRBcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5JdGVtTGVuIDwgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3MnfEZPUkNFX1VOSUNPREU6CisgICAgICAgICAgICBjYXNlICdTJ3xGT1JDRV9VTklDT0RFOiB7CisgICAgICAgICAgICAgICAgICAgIEZYX0xQV1NUUiBwc3RyTmV4dEFyZyA9IHZhX2FyZyhhcmdMaXN0LCBGWF9MUFdTVFIpOworICAgICAgICAgICAgICAgICAgICBpZiAocHN0ck5leHRBcmcgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSA2OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSAoRlhfU1RSU0laRSlGWFNZU193Y3NsZW4ocHN0ck5leHRBcmcpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5JdGVtTGVuIDwgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAobkl0ZW1MZW4gIT0gMCkgeworICAgICAgICAgICAgaWYgKG5QcmVjaXNpb24gIT0gMCAmJiBuSXRlbUxlbiA+IG5QcmVjaXNpb24pIHsKKyAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IG5QcmVjaXNpb247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobkl0ZW1MZW4gPCBuV2lkdGgpIHsKKyAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IG5XaWR0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN3aXRjaCAoKmxwc3opIHsKKyAgICAgICAgICAgICAgICBjYXNlICdkJzoKKyAgICAgICAgICAgICAgICBjYXNlICdpJzoKKyAgICAgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgICAgICAgICBjYXNlICdYJzoKKyAgICAgICAgICAgICAgICBjYXNlICdvJzoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5Nb2RpZmllciAmIEZPUkNFX0lOVDY0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoYXJnTGlzdCwgRlhfSU5UNjQpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGFyZ0xpc3QsIGludCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSAzMjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5JdGVtTGVuIDwgbldpZHRoICsgblByZWNpc2lvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSBuV2lkdGggKyBuUHJlY2lzaW9uOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ2EnOgorICAgICAgICAgICAgICAgIGNhc2UgJ0EnOgorICAgICAgICAgICAgICAgIGNhc2UgJ2UnOgorICAgICAgICAgICAgICAgIGNhc2UgJ0UnOgorICAgICAgICAgICAgICAgIGNhc2UgJ2cnOgorICAgICAgICAgICAgICAgIGNhc2UgJ0cnOgorICAgICAgICAgICAgICAgICAgICB2YV9hcmcoYXJnTGlzdCwgZG91YmxlKTsKKyAgICAgICAgICAgICAgICAgICAgbkl0ZW1MZW4gPSAxMjg7CisgICAgICAgICAgICAgICAgICAgIGlmIChuSXRlbUxlbiA8IG5XaWR0aCArIG5QcmVjaXNpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gbldpZHRoICsgblByZWNpc2lvbjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICdmJzoKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5XaWR0aCArIG5QcmVjaXNpb24gPiAxMDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gblByZWNpc2lvbiArIG5XaWR0aCArIDEyODsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBmOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBwc3pUZW1wWzI1Nl07CisgICAgICAgICAgICAgICAgICAgICAgICBmID0gdmFfYXJnKGFyZ0xpc3QsIGRvdWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBGWFNZU19zbnByaW50Zihwc3pUZW1wLCBzaXplb2YocHN6VGVtcCksICIlKi4qZiIsIG5XaWR0aCwgblByZWNpc2lvbiArIDYsIGYgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5JdGVtTGVuID0gKEZYX1NUUlNJWkUpRlhTWVNfc3RybGVuKHBzelRlbXApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ3AnOgorICAgICAgICAgICAgICAgICAgICB2YV9hcmcoYXJnTGlzdCwgdm9pZCopOworICAgICAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IDMyOworICAgICAgICAgICAgICAgICAgICBpZiAobkl0ZW1MZW4gPCBuV2lkdGggKyBuUHJlY2lzaW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuSXRlbUxlbiA9IG5XaWR0aCArIG5QcmVjaXNpb247CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnbic6CisgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhhcmdMaXN0LCBpbnQqKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbk1heExlbiArPSBuSXRlbUxlbjsKKyAgICB9CisgICAgR2V0QnVmZmVyKG5NYXhMZW4pOworICAgIGlmIChtX3BEYXRhKSB7CisgICAgICAgIEZYU1lTX3Zzd3ByaW50Zigod2NoYXJfdCopbV9wRGF0YS0+bV9TdHJpbmcsIG5NYXhMZW4gKyAxLCAoY29uc3Qgd2NoYXJfdCopbHBzekZvcm1hdCwgYXJnTGlzdFNhdmUpOworICAgICAgICBSZWxlYXNlQnVmZmVyKCk7CisgICAgfQorICAgIHZhX2VuZChhcmdMaXN0U2F2ZSk7Cit9Cit2b2lkIENGWF9XaWRlU3RyaW5nOjpGb3JtYXQoRlhfTFBDV1NUUiBscHN6Rm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdMaXN0OworICAgIHZhX3N0YXJ0KGFyZ0xpc3QsIGxwc3pGb3JtYXQpOworICAgIEZvcm1hdFYobHBzekZvcm1hdCwgYXJnTGlzdCk7CisgICAgdmFfZW5kKGFyZ0xpc3QpOworfQorRlhfRkxPQVQgRlhfd3RvZihGWF9MUENXU1RSIHN0ciwgaW50IGxlbikKK3sKKyAgICBpZiAobGVuID09IDApIHsKKyAgICAgICAgcmV0dXJuIDAuMDsKKyAgICB9CisgICAgaW50IGNjID0gMDsKKyAgICBGWF9CT09MIGJOZWdhdGl2ZSA9IEZBTFNFOworICAgIGlmIChzdHJbMF0gPT0gJysnKSB7CisgICAgICAgIGNjKys7CisgICAgfSBlbHNlIGlmIChzdHJbMF0gPT0gJy0nKSB7CisgICAgICAgIGJOZWdhdGl2ZSA9IFRSVUU7CisgICAgICAgIGNjKys7CisgICAgfQorICAgIGludCBpbnRlZ2VyID0gMDsKKyAgICB3aGlsZSAoY2MgPCBsZW4pIHsKKyAgICAgICAgaWYgKHN0cltjY10gPT0gJy4nKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpbnRlZ2VyID0gaW50ZWdlciAqIDEwICsgc3RyW2NjXSAtICcwJzsKKyAgICAgICAgY2MgKys7CisgICAgfQorICAgIEZYX0ZMT0FUIGZyYWN0aW9uID0gMDsKKyAgICBpZiAoc3RyW2NjXSA9PSAnLicpIHsKKyAgICAgICAgY2MgKys7CisgICAgICAgIEZYX0ZMT0FUIHNjYWxlID0gMC4xZjsKKyAgICAgICAgd2hpbGUgKGNjIDwgbGVuKSB7CisgICAgICAgICAgICBmcmFjdGlvbiArPSBzY2FsZSAqIChzdHJbY2NdIC0gJzAnKTsKKyAgICAgICAgICAgIHNjYWxlICo9IDAuMWY7CisgICAgICAgICAgICBjYyArKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBmcmFjdGlvbiArPSAoRlhfRkxPQVQpaW50ZWdlcjsKKyAgICByZXR1cm4gYk5lZ2F0aXZlID8gLWZyYWN0aW9uIDogZnJhY3Rpb247Cit9CitpbnQgQ0ZYX1dpZGVTdHJpbmc6OkdldEludGVnZXIoKSBjb25zdAoreworICAgIGlmIChtX3BEYXRhID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBGWFNZU193dG9pKG1fcERhdGEtPm1fU3RyaW5nKTsKK30KK0ZYX0ZMT0FUIENGWF9XaWRlU3RyaW5nOjpHZXRGbG9hdCgpIGNvbnN0Cit7CisgICAgaWYgKG1fcERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMC4wOworICAgIH0KKyAgICByZXR1cm4gRlhfd3RvZihtX3BEYXRhLT5tX1N0cmluZywgbV9wRGF0YS0+bV9uRGF0YUxlbmd0aCk7Cit9Cit2b2lkIENGWF9XaWRlU3RyaW5nTDo6RW1wdHkoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikKK3sKKyAgICBpZiAobV9QdHIpIHsKKyAgICAgICAgRlhfQWxsb2NhdG9yX0ZyZWUocEFsbG9jYXRvciwgKEZYX0xQVk9JRCltX1B0cik7CisgICAgfQorICAgIG1fUHRyID0gTlVMTCwgbV9MZW5ndGggPSAwOworfQordm9pZCBDRlhfV2lkZVN0cmluZ0w6OlNldChGWF9XU1RSIHNyYywgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikKK3sKKyAgICBFbXB0eShwQWxsb2NhdG9yKTsKKyAgICBpZiAoc3JjLkdldFB0cigpICE9IE5VTEwgJiYgc3JjLkdldExlbmd0aCgpID4gMCkgeworICAgICAgICBGWF9MUFdTVFIgc3RyID0gRlhfQWxsb2NhdG9yX0FsbG9jKHBBbGxvY2F0b3IsIEZYX1dDSEFSLCBzcmMuR2V0TGVuZ3RoKCkgKyAxKTsKKyAgICAgICAgaWYgKCFzdHIpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBGWFNZU19tZW1jcHkzMihzdHIsIHNyYy5HZXRQdHIoKSwgc3JjLkdldExlbmd0aCgpKnNpemVvZihGWF9XQ0hBUikpOworICAgICAgICBzdHJbc3JjLkdldExlbmd0aCgpXSA9ICdcMCc7CisgICAgICAgICooRlhfTFBXU1RSKikoJm1fUHRyKSA9IHN0cjsKKyAgICAgICAgbV9MZW5ndGggPSBzcmMuR2V0TGVuZ3RoKCk7CisgICAgfQorfQoraW50IENGWF9XaWRlU3RyaW5nTDo6R2V0SW50ZWdlcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX1B0cikgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIEZYU1lTX3d0b2kobV9QdHIpOworfQorRlhfRkxPQVQgQ0ZYX1dpZGVTdHJpbmdMOjpHZXRGbG9hdCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX1B0cikgeworICAgICAgICByZXR1cm4gMC4wZjsKKyAgICB9CisgICAgcmV0dXJuIEZYX3d0b2YobV9QdHIsIG1fTGVuZ3RoKTsKK30KK3ZvaWQgQ0ZYX1dpZGVTdHJpbmdMOjpUcmltUmlnaHQoRlhfTFBDV1NUUiBscHN6VGFyZ2V0cykKK3sKKyAgICBpZiAoIWxwc3pUYXJnZXRzIHx8ICpscHN6VGFyZ2V0cyA9PSAwIHx8ICFtX1B0ciB8fCBtX0xlbmd0aCA8IDEpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGWF9TVFJTSVpFIHBvcyA9IG1fTGVuZ3RoOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgaWYgKEZYU1lTX3djc2NocihscHN6VGFyZ2V0cywgbV9QdHJbcG9zIC0gMV0pID09IE5VTEwpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHBvcyAtLTsKKyAgICB9CisgICAgaWYgKHBvcyA8IG1fTGVuZ3RoKSB7CisgICAgICAgICgqKEZYX0xQV1NUUiopKCZtX1B0cikpW3Bvc10gPSAwOworICAgICAgICBtX0xlbmd0aCA9IHBvczsKKyAgICB9Cit9CitzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcgX0RlZk1hcF9HZXRCeXRlU3RyaW5nKENGWF9DaGFyTWFwKiBwQ2hhck1hcCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHdpZGVzdHIpCit7CisgICAgaW50IHNyY19sZW4gPSB3aWRlc3RyLkdldExlbmd0aCgpOworICAgIGludCBjb2RlcGFnZSA9IHBDaGFyTWFwLT5tX0dldENvZGVQYWdlID8gcENoYXJNYXAtPm1fR2V0Q29kZVBhZ2UoKSA6IDA7CisgICAgaW50IGRlc3RfbGVuID0gRlhTWVNfV2lkZUNoYXJUb011bHRpQnl0ZShjb2RlcGFnZSwgMCwgd2lkZXN0ciwgc3JjX2xlbiwgTlVMTCwgMCwgTlVMTCwgTlVMTCk7CisgICAgaWYgKGRlc3RfbGVuID09IDApIHsKKyAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKCk7CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIGJ5dGVzdHI7CisgICAgRlhfTFBTVFIgZGVzdF9idWYgPSBieXRlc3RyLkdldEJ1ZmZlcihkZXN0X2xlbik7CisgICAgRlhTWVNfV2lkZUNoYXJUb011bHRpQnl0ZShjb2RlcGFnZSwgMCwgd2lkZXN0ciwgc3JjX2xlbiwgZGVzdF9idWYsIGRlc3RfbGVuLCBOVUxMLCBOVUxMKTsKKyAgICBieXRlc3RyLlJlbGVhc2VCdWZmZXIoZGVzdF9sZW4pOworICAgIHJldHVybiBieXRlc3RyOworfQorc3RhdGljIENGWF9XaWRlU3RyaW5nIF9EZWZNYXBfR2V0V2lkZVN0cmluZyhDRlhfQ2hhck1hcCogcENoYXJNYXAsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBieXRlc3RyKQoreworICAgIGludCBzcmNfbGVuID0gYnl0ZXN0ci5HZXRMZW5ndGgoKTsKKyAgICBpbnQgY29kZXBhZ2UgPSBwQ2hhck1hcC0+bV9HZXRDb2RlUGFnZSA/IHBDaGFyTWFwLT5tX0dldENvZGVQYWdlKCkgOiAwOworICAgIGludCBkZXN0X2xlbiA9IEZYU1lTX011bHRpQnl0ZVRvV2lkZUNoYXIoY29kZXBhZ2UsIDAsIGJ5dGVzdHIsIHNyY19sZW4sIE5VTEwsIDApOworICAgIGlmIChkZXN0X2xlbiA9PSAwKSB7CisgICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZygpOworICAgIH0KKyAgICBDRlhfV2lkZVN0cmluZyB3aWRlc3RyOworICAgIEZYX0xQV1NUUiBkZXN0X2J1ZiA9IHdpZGVzdHIuR2V0QnVmZmVyKGRlc3RfbGVuKTsKKyAgICBGWFNZU19NdWx0aUJ5dGVUb1dpZGVDaGFyKGNvZGVwYWdlLCAwLCBieXRlc3RyLCBzcmNfbGVuLCBkZXN0X2J1ZiwgZGVzdF9sZW4pOworICAgIHdpZGVzdHIuUmVsZWFzZUJ1ZmZlcihkZXN0X2xlbik7CisgICAgcmV0dXJuIHdpZGVzdHI7Cit9CitzdGF0aWMgaW50IF9EZWZNYXBfR2V0R0JLQ29kZVBhZ2UoKQoreworICAgIHJldHVybiA5MzY7Cit9CitzdGF0aWMgaW50IF9EZWZNYXBfR2V0VUhDQ29kZVBhZ2UoKQoreworICAgIHJldHVybiA5NDk7Cit9CitzdGF0aWMgaW50IF9EZWZNYXBfR2V0SklTQ29kZVBhZ2UoKQoreworICAgIHJldHVybiA5MzI7Cit9CitzdGF0aWMgaW50IF9EZWZNYXBfR2V0QmlnNUNvZGVQYWdlKCkKK3sKKyAgICByZXR1cm4gOTUwOworfQorc3RhdGljIGNvbnN0IENGWF9DaGFyTWFwIGdfRGVmYXVsdE1hcHBlciA9IHsmX0RlZk1hcF9HZXRXaWRlU3RyaW5nLCAmX0RlZk1hcF9HZXRCeXRlU3RyaW5nLCBOVUxMfTsKK3N0YXRpYyBjb25zdCBDRlhfQ2hhck1hcCBnX0RlZmF1bHRHQktNYXBwZXIgPSB7Jl9EZWZNYXBfR2V0V2lkZVN0cmluZywgJl9EZWZNYXBfR2V0Qnl0ZVN0cmluZywgJl9EZWZNYXBfR2V0R0JLQ29kZVBhZ2V9Oworc3RhdGljIGNvbnN0IENGWF9DaGFyTWFwIGdfRGVmYXVsdEpJU01hcHBlciA9IHsmX0RlZk1hcF9HZXRXaWRlU3RyaW5nLCAmX0RlZk1hcF9HZXRCeXRlU3RyaW5nLCAmX0RlZk1hcF9HZXRKSVNDb2RlUGFnZX07CitzdGF0aWMgY29uc3QgQ0ZYX0NoYXJNYXAgZ19EZWZhdWx0VUhDTWFwcGVyID0geyZfRGVmTWFwX0dldFdpZGVTdHJpbmcsICZfRGVmTWFwX0dldEJ5dGVTdHJpbmcsICZfRGVmTWFwX0dldFVIQ0NvZGVQYWdlfTsKK3N0YXRpYyBjb25zdCBDRlhfQ2hhck1hcCBnX0RlZmF1bHRCaWc1TWFwcGVyID0geyZfRGVmTWFwX0dldFdpZGVTdHJpbmcsICZfRGVmTWFwX0dldEJ5dGVTdHJpbmcsICZfRGVmTWFwX0dldEJpZzVDb2RlUGFnZX07CitDRlhfQ2hhck1hcCogQ0ZYX0NoYXJNYXA6OkdldERlZmF1bHRNYXBwZXIoRlhfSU5UMzIgY29kZXBhZ2UpCit7CisgICAgc3dpdGNoIChjb2RlcGFnZSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICByZXR1cm4gKENGWF9DaGFyTWFwKikmZ19EZWZhdWx0TWFwcGVyOworICAgICAgICBjYXNlIDkzMjoKKyAgICAgICAgICAgIHJldHVybiAoQ0ZYX0NoYXJNYXAqKSZnX0RlZmF1bHRKSVNNYXBwZXI7CisgICAgICAgIGNhc2UgOTM2OgorICAgICAgICAgICAgcmV0dXJuIChDRlhfQ2hhck1hcCopJmdfRGVmYXVsdEdCS01hcHBlcjsKKyAgICAgICAgY2FzZSA5NDk6CisgICAgICAgICAgICByZXR1cm4gKENGWF9DaGFyTWFwKikmZ19EZWZhdWx0VUhDTWFwcGVyOworICAgICAgICBjYXNlIDk1MDoKKyAgICAgICAgICAgIHJldHVybiAoQ0ZYX0NoYXJNYXAqKSZnX0RlZmF1bHRCaWc1TWFwcGVyOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Y3J0L2Z4X2V4dGVuc2lvbi5jcHAgYi9jb3JlL3NyYy9meGNydC9meF9leHRlbnNpb24uY3BwCmluZGV4IDc5ZDMwMDYuLmU3MjcyY2YgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y3J0L2Z4X2V4dGVuc2lvbi5jcHAKKysrIGIvY29yZS9zcmMvZnhjcnQvZnhfZXh0ZW5zaW9uLmNwcApAQCAtMSw0MDEgKzEsNDAxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGNydC9meF9leHQuaCINCi0jaW5jbHVkZSAiZXh0ZW5zaW9uLmgiDQotI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18NCi0jaW5jbHVkZSA8d2luY3J5cHQuaD4NCi0jZWxzZQ0KLSNpbmNsdWRlIDxjdGltZT4NCi0jZW5kaWYNCi1GWF9IRklMRSBGWF9GaWxlX09wZW4oRlhfQlNUUiBmaWxlTmFtZSwgRlhfRFdPUkQgZHdNb2RlLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQ0KLXsNCi0gICAgSUZYQ1JUX0ZpbGVBY2Nlc3MqIHBGQSA9IEZYQ1JUX0ZpbGVBY2Nlc3NfQ3JlYXRlKHBBbGxvY2F0b3IpOw0KLSAgICBpZiAocEZBICYmICFwRkEtPk9wZW4oZmlsZU5hbWUsIGR3TW9kZSkpIHsNCi0gICAgICAgIHBGQS0+UmVsZWFzZShwQWxsb2NhdG9yKTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiAoRlhfSEZJTEUpcEZBOw0KLX0NCi1GWF9IRklMRSBGWF9GaWxlX09wZW4oRlhfV1NUUiBmaWxlTmFtZSwgRlhfRFdPUkQgZHdNb2RlLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQ0KLXsNCi0gICAgSUZYQ1JUX0ZpbGVBY2Nlc3MqIHBGQSA9IEZYQ1JUX0ZpbGVBY2Nlc3NfQ3JlYXRlKHBBbGxvY2F0b3IpOw0KLSAgICBpZiAocEZBICYmICFwRkEtPk9wZW4oZmlsZU5hbWUsIGR3TW9kZSkpIHsNCi0gICAgICAgIHBGQS0+UmVsZWFzZShwQWxsb2NhdG9yKTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiAoRlhfSEZJTEUpcEZBOw0KLX0NCi12b2lkIEZYX0ZpbGVfQ2xvc2UoRlhfSEZJTEUgaEZpbGUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpDQotew0KLSAgICBGWFNZU19hc3NlcnQoaEZpbGUgIT0gTlVMTCk7DQotICAgICgoSUZYQ1JUX0ZpbGVBY2Nlc3MqKWhGaWxlKS0+Q2xvc2UoKTsNCi0gICAgKChJRlhDUlRfRmlsZUFjY2VzcyopaEZpbGUpLT5SZWxlYXNlKHBBbGxvY2F0b3IpOw0KLX0NCi1GWF9GSUxFU0laRSBGWF9GaWxlX0dldFNpemUoRlhfSEZJTEUgaEZpbGUpDQotew0KLSAgICBGWFNZU19hc3NlcnQoaEZpbGUgIT0gTlVMTCk7DQotICAgIHJldHVybiAoKElGWENSVF9GaWxlQWNjZXNzKiloRmlsZSktPkdldFNpemUoKTsNCi19DQotRlhfRklMRVNJWkUgRlhfRmlsZV9HZXRQb3NpdGlvbihGWF9IRklMRSBoRmlsZSkNCi17DQotICAgIEZYU1lTX2Fzc2VydChoRmlsZSAhPSBOVUxMKTsNCi0gICAgcmV0dXJuICgoSUZYQ1JUX0ZpbGVBY2Nlc3MqKWhGaWxlKS0+R2V0UG9zaXRpb24oKTsNCi19DQotRlhfRklMRVNJWkUgRlhfRmlsZV9TZXRQb3NpdGlvbihGWF9IRklMRSBoRmlsZSwgRlhfRklMRVNJWkUgcG9zKQ0KLXsNCi0gICAgRlhTWVNfYXNzZXJ0KGhGaWxlICE9IE5VTEwpOw0KLSAgICByZXR1cm4gKChJRlhDUlRfRmlsZUFjY2VzcyopaEZpbGUpLT5TZXRQb3NpdGlvbihwb3MpOw0KLX0NCi1zaXplX3QgRlhfRmlsZV9SZWFkKEZYX0hGSUxFIGhGaWxlLCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIpDQotew0KLSAgICBGWFNZU19hc3NlcnQoaEZpbGUgIT0gTlVMTCk7DQotICAgIHJldHVybiAoKElGWENSVF9GaWxlQWNjZXNzKiloRmlsZSktPlJlYWQocEJ1ZmZlciwgc3pCdWZmZXIpOw0KLX0NCi1zaXplX3QgRlhfRmlsZV9SZWFkUG9zKEZYX0hGSUxFIGhGaWxlLCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIsIEZYX0ZJTEVTSVpFIHBvcykNCi17DQotICAgIEZYU1lTX2Fzc2VydChoRmlsZSAhPSBOVUxMKTsNCi0gICAgcmV0dXJuICgoSUZYQ1JUX0ZpbGVBY2Nlc3MqKWhGaWxlKS0+UmVhZFBvcyhwQnVmZmVyLCBzekJ1ZmZlciwgcG9zKTsNCi19DQotc2l6ZV90IEZYX0ZpbGVfV3JpdGUoRlhfSEZJTEUgaEZpbGUsIGNvbnN0IHZvaWQqIHBCdWZmZXIsIHNpemVfdCBzekJ1ZmZlcikNCi17DQotICAgIEZYU1lTX2Fzc2VydChoRmlsZSAhPSBOVUxMKTsNCi0gICAgcmV0dXJuICgoSUZYQ1JUX0ZpbGVBY2Nlc3MqKWhGaWxlKS0+V3JpdGUocEJ1ZmZlciwgc3pCdWZmZXIpOw0KLX0NCi1zaXplX3QgRlhfRmlsZV9Xcml0ZVBvcyhGWF9IRklMRSBoRmlsZSwgY29uc3Qgdm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyLCBGWF9GSUxFU0laRSBwb3MpDQotew0KLSAgICBGWFNZU19hc3NlcnQoaEZpbGUgIT0gTlVMTCk7DQotICAgIHJldHVybiAoKElGWENSVF9GaWxlQWNjZXNzKiloRmlsZSktPldyaXRlUG9zKHBCdWZmZXIsIHN6QnVmZmVyLCBwb3MpOw0KLX0NCi1GWF9CT09MIEZYX0ZpbGVfRmx1c2goRlhfSEZJTEUgaEZpbGUpDQotew0KLSAgICBGWFNZU19hc3NlcnQoaEZpbGUgIT0gTlVMTCk7DQotICAgIHJldHVybiAoKElGWENSVF9GaWxlQWNjZXNzKiloRmlsZSktPkZsdXNoKCk7DQotfQ0KLUZYX0JPT0wgRlhfRmlsZV9UcnVuY2F0ZShGWF9IRklMRSBoRmlsZSwgRlhfRklMRVNJWkUgc3pGaWxlKQ0KLXsNCi0gICAgRlhTWVNfYXNzZXJ0KGhGaWxlICE9IE5VTEwpOw0KLSAgICByZXR1cm4gKChJRlhDUlRfRmlsZUFjY2VzcyopaEZpbGUpLT5UcnVuY2F0ZShzekZpbGUpOw0KLX0NCi1JRlhfRmlsZVN0cmVhbSogRlhfQ3JlYXRlRmlsZVN0cmVhbShGWF9MUENTVFIgZmlsZW5hbWUsIEZYX0RXT1JEIGR3TW9kZXMsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpDQotew0KLSAgICBJRlhDUlRfRmlsZUFjY2VzcyogcEZBID0gRlhDUlRfRmlsZUFjY2Vzc19DcmVhdGUocEFsbG9jYXRvcik7DQotICAgIGlmICghcEZBKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAoIXBGQS0+T3BlbihmaWxlbmFtZSwgZHdNb2RlcykpIHsNCi0gICAgICAgIHBGQS0+UmVsZWFzZShwQWxsb2NhdG9yKTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmIChwQWxsb2NhdG9yKSB7DQotICAgICAgICByZXR1cm4gRlhfTmV3QXRBbGxvY2F0b3IocEFsbG9jYXRvcikgQ0ZYX0NSVEZpbGVTdHJlYW0ocEZBLCBwQWxsb2NhdG9yKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHJldHVybiBGWF9ORVcgQ0ZYX0NSVEZpbGVTdHJlYW0ocEZBLCBwQWxsb2NhdG9yKTsNCi0gICAgfQ0KLX0NCi1JRlhfRmlsZVN0cmVhbSogRlhfQ3JlYXRlRmlsZVN0cmVhbShGWF9MUENXU1RSIGZpbGVuYW1lLCBGWF9EV09SRCBkd01vZGVzLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQ0KLXsNCi0gICAgSUZYQ1JUX0ZpbGVBY2Nlc3MqIHBGQSA9IEZYQ1JUX0ZpbGVBY2Nlc3NfQ3JlYXRlKHBBbGxvY2F0b3IpOw0KLSAgICBpZiAoIXBGQSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKCFwRkEtPk9wZW4oZmlsZW5hbWUsIGR3TW9kZXMpKSB7DQotICAgICAgICBwRkEtPlJlbGVhc2UocEFsbG9jYXRvcik7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAocEFsbG9jYXRvcikgew0KLSAgICAgICAgcmV0dXJuIEZYX05ld0F0QWxsb2NhdG9yKHBBbGxvY2F0b3IpIENGWF9DUlRGaWxlU3RyZWFtKHBGQSwgcEFsbG9jYXRvcik7DQotICAgIH0gZWxzZSB7DQotICAgICAgICByZXR1cm4gRlhfTkVXIENGWF9DUlRGaWxlU3RyZWFtKHBGQSwgcEFsbG9jYXRvcik7DQotICAgIH0NCi19DQotSUZYX0ZpbGVXcml0ZSogRlhfQ3JlYXRlRmlsZVdyaXRlKEZYX0xQQ1NUUiBmaWxlbmFtZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikNCi17DQotICAgIHJldHVybiBGWF9DcmVhdGVGaWxlU3RyZWFtKGZpbGVuYW1lLCBGWF9GSUxFTU9ERV9UcnVuY2F0ZSwgcEFsbG9jYXRvcik7DQotfQ0KLUlGWF9GaWxlV3JpdGUqIEZYX0NyZWF0ZUZpbGVXcml0ZShGWF9MUENXU1RSIGZpbGVuYW1lLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQ0KLXsNCi0gICAgcmV0dXJuIEZYX0NyZWF0ZUZpbGVTdHJlYW0oZmlsZW5hbWUsIEZYX0ZJTEVNT0RFX1RydW5jYXRlLCBwQWxsb2NhdG9yKTsNCi19DQotSUZYX0ZpbGVSZWFkKiBGWF9DcmVhdGVGaWxlUmVhZChGWF9MUENTVFIgZmlsZW5hbWUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpDQotew0KLSAgICByZXR1cm4gRlhfQ3JlYXRlRmlsZVN0cmVhbShmaWxlbmFtZSwgRlhfRklMRU1PREVfUmVhZE9ubHksIHBBbGxvY2F0b3IpOw0KLX0NCi1JRlhfRmlsZVJlYWQqIEZYX0NyZWF0ZUZpbGVSZWFkKEZYX0xQQ1dTVFIgZmlsZW5hbWUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpDQotew0KLSAgICByZXR1cm4gRlhfQ3JlYXRlRmlsZVN0cmVhbShmaWxlbmFtZSwgRlhfRklMRU1PREVfUmVhZE9ubHksIHBBbGxvY2F0b3IpOw0KLX0NCi1JRlhfTWVtb3J5U3RyZWFtKiBGWF9DcmVhdGVNZW1vcnlTdHJlYW0oRlhfTFBCWVRFIHBCdWZmZXIsIHNpemVfdCBkd1NpemUsIEZYX0JPT0wgYlRha2VPdmVyLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQ0KLXsNCi0gICAgaWYgKHBBbGxvY2F0b3IpIHsNCi0gICAgICAgIHJldHVybiBGWF9OZXdBdEFsbG9jYXRvcihwQWxsb2NhdG9yKUNGWF9NZW1vcnlTdHJlYW0ocEJ1ZmZlciwgZHdTaXplLCBiVGFrZU92ZXIsIHBBbGxvY2F0b3IpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmV0dXJuIEZYX05FVyBDRlhfTWVtb3J5U3RyZWFtKHBCdWZmZXIsIGR3U2l6ZSwgYlRha2VPdmVyLCBOVUxMKTsNCi0gICAgfQ0KLX0NCi1JRlhfTWVtb3J5U3RyZWFtKiBGWF9DcmVhdGVNZW1vcnlTdHJlYW0oRlhfQk9PTCBiQ29uc2VjdXRpdmUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpDQotew0KLSAgICBpZiAocEFsbG9jYXRvcikgew0KLSAgICAgICAgcmV0dXJuIEZYX05ld0F0QWxsb2NhdG9yKHBBbGxvY2F0b3IpQ0ZYX01lbW9yeVN0cmVhbShiQ29uc2VjdXRpdmUsIHBBbGxvY2F0b3IpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmV0dXJuIEZYX05FVyBDRlhfTWVtb3J5U3RyZWFtKGJDb25zZWN1dGl2ZSwgTlVMTCk7DQotICAgIH0NCi19DQotI2lmZGVmIF9fY3BsdXNwbHVzDQotZXh0ZXJuICJDIiB7DQotI2VuZGlmDQotRlhfRkxPQVQgRlhTWVNfdGFuKEZYX0ZMT0FUIGEpDQotew0KLSAgICByZXR1cm4gKEZYX0ZMT0FUKXRhbihhKTsNCi19DQotRlhfRkxPQVQgRlhTWVNfbG9nYihGWF9GTE9BVCBiLCBGWF9GTE9BVCB4KQ0KLXsNCi0gICAgcmV0dXJuIEZYU1lTX2xvZyh4KSAvIEZYU1lTX2xvZyhiKTsNCi19DQotRlhfRkxPQVQgRlhTWVNfc3RydG9mKEZYX0xQQ1NUUiBwY3NTdHIsIEZYX0lOVDMyIGlMZW5ndGgsIEZYX0lOVDMyICpwVXNlZExlbikNCi17DQotICAgIEZYU1lTX2Fzc2VydChwY3NTdHIgIT0gTlVMTCk7DQotICAgIGlmIChpTGVuZ3RoIDwgMCkgew0KLSAgICAgICAgaUxlbmd0aCA9IChGWF9JTlQzMilGWFNZU19zdHJsZW4ocGNzU3RyKTsNCi0gICAgfQ0KLSAgICBDRlhfV2lkZVN0cmluZyB3cyA9IENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwocGNzU3RyLCBpTGVuZ3RoKTsNCi0gICAgcmV0dXJuIEZYU1lTX3djc3RvZigoRlhfTFBDV1NUUil3cywgaUxlbmd0aCwgcFVzZWRMZW4pOw0KLX0NCi1GWF9GTE9BVCBGWFNZU193Y3N0b2YoRlhfTFBDV1NUUiBwd3NTdHIsIEZYX0lOVDMyIGlMZW5ndGgsIEZYX0lOVDMyICpwVXNlZExlbikNCi17DQotICAgIEZYU1lTX2Fzc2VydChwd3NTdHIgIT0gTlVMTCk7DQotICAgIGlmIChpTGVuZ3RoIDwgMCkgew0KLSAgICAgICAgaUxlbmd0aCA9IChGWF9JTlQzMilGWFNZU193Y3NsZW4ocHdzU3RyKTsNCi0gICAgfQ0KLSAgICBpZiAoaUxlbmd0aCA9PSAwKSB7DQotICAgICAgICByZXR1cm4gMC4wZjsNCi0gICAgfQ0KLSAgICBGWF9JTlQzMiBpVXNlZExlbiA9IDA7DQotICAgIEZYX0JPT0wgYk5lZ3RpdmUgPSBGQUxTRTsNCi0gICAgc3dpdGNoIChwd3NTdHJbaVVzZWRMZW5dKSB7DQotICAgICAgICBjYXNlICctJzoNCi0gICAgICAgICAgICBiTmVndGl2ZSA9IFRSVUU7DQotICAgICAgICBjYXNlICcrJzoNCi0gICAgICAgICAgICBpVXNlZExlbisrOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICB9DQotICAgIEZYX0ZMT0FUIGZWYWx1ZSA9IDAuMGY7DQotICAgIHdoaWxlIChpVXNlZExlbiA8IGlMZW5ndGgpIHsNCi0gICAgICAgIEZYX1dDSEFSIHdjaCA9IHB3c1N0cltpVXNlZExlbl07DQotICAgICAgICBpZiAod2NoID49IEwnMCcgJiYgd2NoIDw9IEwnOScpIHsNCi0gICAgICAgICAgICBmVmFsdWUgPSBmVmFsdWUgKiAxMC4wZiArICh3Y2ggLSBMJzAnKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBpVXNlZExlbisrOw0KLSAgICB9DQotICAgIGlmIChpVXNlZExlbiA8IGlMZW5ndGggJiYgcHdzU3RyW2lVc2VkTGVuXSA9PSBMJy4nKSB7DQotICAgICAgICBGWF9GTE9BVCBmUHJlY2lzZSA9IDAuMWY7DQotICAgICAgICB3aGlsZSAoKytpVXNlZExlbiA8IGlMZW5ndGgpIHsNCi0gICAgICAgICAgICBGWF9XQ0hBUiB3Y2ggPSBwd3NTdHJbaVVzZWRMZW5dOw0KLSAgICAgICAgICAgIGlmICh3Y2ggPj0gTCcwJyAmJiB3Y2ggPD0gTCc5Jykgew0KLSAgICAgICAgICAgICAgICBmVmFsdWUgKz0gKHdjaCAtIEwnMCcpICogZlByZWNpc2U7DQotICAgICAgICAgICAgICAgIGZQcmVjaXNlICo9IDAuMWY7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChwVXNlZExlbikgew0KLSAgICAgICAgKnBVc2VkTGVuID0gaVVzZWRMZW47DQotICAgIH0NCi0gICAgcmV0dXJuIGJOZWd0aXZlID8gLWZWYWx1ZSA6IGZWYWx1ZTsNCi19DQotRlhfTFBXU1RSIEZYU1lTX3djc25jcHkoRlhfTFBXU1RSIGRzdFN0ciwgRlhfTFBDV1NUUiBzcmNTdHIsIHNpemVfdCBjb3VudCkNCi17DQotICAgIEZYU1lTX2Fzc2VydChkc3RTdHIgIT0gTlVMTCAmJiBzcmNTdHIgIT0gTlVMTCAmJiBjb3VudCA+IDApOw0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpDQotICAgICAgICBpZiAoKGRzdFN0cltpXSA9IHNyY1N0cltpXSkgPT0gTCdcMCcpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgcmV0dXJuIGRzdFN0cjsNCi19DQotRlhfSU5UMzIgRlhTWVNfd2NzbmljbXAoRlhfTFBDV1NUUiBzMSwgRlhfTFBDV1NUUiBzMiwgc2l6ZV90IGNvdW50KQ0KLXsNCi0gICAgRlhTWVNfYXNzZXJ0KHMxICE9IE5VTEwgJiYgczIgIT0gTlVMTCAmJiBjb3VudCA+IDApOw0KLSAgICBGWF9XQ0hBUiB3Y2gxID0gMCwgd2NoMiA9IDA7DQotICAgIHdoaWxlIChjb3VudC0tID4gMCkgew0KLSAgICAgICAgd2NoMSA9IChGWF9XQ0hBUilGWFNZU190b2xvd2VyKCpzMSsrKTsNCi0gICAgICAgIHdjaDIgPSAoRlhfV0NIQVIpRlhTWVNfdG9sb3dlcigqczIrKyk7DQotICAgICAgICBpZiAod2NoMSAhPSB3Y2gyKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIHdjaDEgLSB3Y2gyOw0KLX0NCi1GWF9JTlQzMiBGWFNZU19zdHJuaWNtcChGWF9MUENTVFIgczEsIEZYX0xQQ1NUUiBzMiwgc2l6ZV90IGNvdW50KQ0KLXsNCi0gICAgRlhTWVNfYXNzZXJ0KHMxICE9IE5VTEwgJiYgczIgIT0gTlVMTCAmJiBjb3VudCA+IDApOw0KLSAgICBGWF9DSEFSIGNoMSA9IDAsIGNoMiA9IDA7DQotICAgIHdoaWxlIChjb3VudC0tID4gMCkgew0KLSAgICAgICAgY2gxID0gKEZYX0NIQVIpRlhTWVNfdG9sb3dlcigqczErKyk7DQotICAgICAgICBjaDIgPSAoRlhfQ0hBUilGWFNZU190b2xvd2VyKCpzMisrKTsNCi0gICAgICAgIGlmIChjaDEgIT0gY2gyKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIGNoMSAtIGNoMjsNCi19DQotRlhfRFdPUkQgRlhfSGFzaENvZGVfU3RyaW5nX0dldEEoRlhfTFBDU1RSIHBTdHIsIEZYX0lOVDMyIGlMZW5ndGgsIEZYX0JPT0wgYklnbm9yZUNhc2UpDQotew0KLSAgICBGWFNZU19hc3NlcnQocFN0ciAhPSBOVUxMKTsNCi0gICAgaWYgKGlMZW5ndGggPCAwKSB7DQotICAgICAgICBpTGVuZ3RoID0gKEZYX0lOVDMyKUZYU1lTX3N0cmxlbihwU3RyKTsNCi0gICAgfQ0KLSAgICBGWF9MUENTVFIgcFN0ckVuZCA9IHBTdHIgKyBpTGVuZ3RoOw0KLSAgICBGWF9EV09SRCBkd0hhc2hDb2RlID0gMDsNCi0gICAgaWYgKGJJZ25vcmVDYXNlKSB7DQotICAgICAgICB3aGlsZSAocFN0ciA8IHBTdHJFbmQpIHsNCi0gICAgICAgICAgICBkd0hhc2hDb2RlID0gMzEgKiBkd0hhc2hDb2RlICsgRlhTWVNfdG9sb3dlcigqcFN0cisrKTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHdoaWxlIChwU3RyIDwgcFN0ckVuZCkgew0KLSAgICAgICAgICAgIGR3SGFzaENvZGUgPSAzMSAqIGR3SGFzaENvZGUgKyAqcFN0ciArKzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gZHdIYXNoQ29kZTsNCi19DQotRlhfRFdPUkQgRlhfSGFzaENvZGVfU3RyaW5nX0dldFcoRlhfTFBDV1NUUiBwU3RyLCBGWF9JTlQzMiBpTGVuZ3RoLCBGWF9CT09MIGJJZ25vcmVDYXNlKQ0KLXsNCi0gICAgRlhTWVNfYXNzZXJ0KHBTdHIgIT0gTlVMTCk7DQotICAgIGlmIChpTGVuZ3RoIDwgMCkgew0KLSAgICAgICAgaUxlbmd0aCA9IChGWF9JTlQzMilGWFNZU193Y3NsZW4ocFN0cik7DQotICAgIH0NCi0gICAgRlhfTFBDV1NUUiBwU3RyRW5kID0gcFN0ciArIGlMZW5ndGg7DQotICAgIEZYX0RXT1JEIGR3SGFzaENvZGUgPSAwOw0KLSAgICBpZiAoYklnbm9yZUNhc2UpIHsNCi0gICAgICAgIHdoaWxlIChwU3RyIDwgcFN0ckVuZCkgew0KLSAgICAgICAgICAgIGR3SGFzaENvZGUgPSAxMzEzICogZHdIYXNoQ29kZSArIEZYU1lTX3RvbG93ZXIoKnBTdHIrKyk7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICB3aGlsZSAocFN0ciA8IHBTdHJFbmQpIHsNCi0gICAgICAgICAgICBkd0hhc2hDb2RlID0gMTMxMyAqIGR3SGFzaENvZGUgKyAqcFN0ciArKzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gZHdIYXNoQ29kZTsNCi19DQotI2lmZGVmIF9fY3BsdXNwbHVzDQotfQ0KLSNlbmRpZg0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLWV4dGVybiAiQyIgew0KLSNlbmRpZg0KLUZYX0xQVk9JRCBGWF9SYW5kb21fTVRfU3RhcnQoRlhfRFdPUkQgZHdTZWVkKQ0KLXsNCi0gICAgRlhfTFBNVFJBTkRPTUNPTlRFWFQgcENvbnRleHQgPSBGWF9BbGxvYyhGWF9NVFJBTkRPTUNPTlRFWFQsIDEpOw0KLSAgICBpZiAoIXBDb250ZXh0KSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBwQ29udGV4dC0+bXRbMF0gPSBkd1NlZWQ7DQotICAgIEZYX0RXT1JEICZpID0gcENvbnRleHQtPm10aTsNCi0gICAgRlhfTFBEV09SRCBwQnVmID0gcENvbnRleHQtPm10Ow0KLSAgICBmb3IgKGkgPSAxOyBpIDwgTVRfTjsgaSArKykgew0KLSAgICAgICAgcEJ1ZltpXSA9ICgxODEyNDMzMjUzVUwgKiAocEJ1ZltpIC0gMV0gXiAocEJ1ZltpIC0gMV0gPj4gMzApKSArIGkpOw0KLSAgICB9DQotICAgIHBDb250ZXh0LT5iSGF2ZVNlZWQgPSBUUlVFOw0KLSAgICByZXR1cm4gcENvbnRleHQ7DQotfQ0KLUZYX0RXT1JEIEZYX1JhbmRvbV9NVF9HZW5lcmF0ZShGWF9MUFZPSUQgcENvbnRleHQpDQotew0KLSAgICBGWFNZU19hc3NlcnQocENvbnRleHQgIT0gTlVMTCk7DQotICAgIEZYX0xQTVRSQU5ET01DT05URVhUIHBNVEMgPSAoRlhfTFBNVFJBTkRPTUNPTlRFWFQpcENvbnRleHQ7DQotICAgIEZYX0RXT1JEIHY7DQotICAgIHN0YXRpYyBGWF9EV09SRCBtYWdbMl0gPSB7MCwgTVRfTWF0cml4X0F9Ow0KLSAgICBGWF9EV09SRCAmbXRpID0gcE1UQy0+bXRpOw0KLSAgICBGWF9MUERXT1JEIHBCdWYgPSBwTVRDLT5tdDsNCi0gICAgaWYgKChpbnQpbXRpIDwgMCB8fCBtdGkgPj0gTVRfTikgew0KLSAgICAgICAgaWYgKG10aSA+IE1UX04gJiYgIXBNVEMtPmJIYXZlU2VlZCkgew0KLSAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfRFdPUkQga2s7DQotICAgICAgICBmb3IgKGtrID0gMDsga2sgPCBNVF9OIC0gTVRfTTsga2sgKyspIHsNCi0gICAgICAgICAgICB2ID0gKHBCdWZba2tdICYgTVRfVXBwZXJfTWFzaykgfCAocEJ1ZltrayArIDFdICYgTVRfTG93ZXJfTWFzayk7DQotICAgICAgICAgICAgcEJ1Zltra10gPSBwQnVmW2trICsgTVRfTV0gXiAodiA+PiAxKSBeIG1hZ1t2ICYgMV07DQotICAgICAgICB9DQotICAgICAgICBmb3IgKDsga2sgPCBNVF9OIC0gMTsga2sgKyspIHsNCi0gICAgICAgICAgICB2ID0gKHBCdWZba2tdICYgTVRfVXBwZXJfTWFzaykgfCAocEJ1ZltrayArIDFdICYgTVRfTG93ZXJfTWFzayk7DQotICAgICAgICAgICAgcEJ1Zltra10gPSBwQnVmW2trICsgKE1UX00gLSBNVF9OKV0gXiAodiA+PiAxKSBeIG1hZ1t2ICYgMV07DQotICAgICAgICB9DQotICAgICAgICB2ID0gKHBCdWZbTVRfTiAtIDFdICYgTVRfVXBwZXJfTWFzaykgfCAocEJ1ZlswXSAmIE1UX0xvd2VyX01hc2spOw0KLSAgICAgICAgcEJ1ZltNVF9OIC0gMV0gPSBwQnVmW01UX00gLSAxXSBeICh2ID4+IDEpIF4gbWFnW3YgJiAxXTsNCi0gICAgICAgIG10aSA9IDA7DQotICAgIH0NCi0gICAgdiA9IHBCdWZbbXRpICsrXTsNCi0gICAgdiBePSAodiA+PiAxMSk7DQotICAgIHYgXj0gKHYgPDwgNykgJiAweDlkMmM1NjgwVUw7DQotICAgIHYgXj0gKHYgPDwgMTUpICYgMHhlZmM2MDAwMFVMOw0KLSAgICB2IF49ICh2ID4+IDE4KTsNCi0gICAgcmV0dXJuIHY7DQotfQ0KLXZvaWQgRlhfUmFuZG9tX01UX0Nsb3NlKEZYX0xQVk9JRCBwQ29udGV4dCkNCi17DQotICAgIEZYU1lTX2Fzc2VydChwQ29udGV4dCAhPSBOVUxMKTsNCi0gICAgRlhfRnJlZShwQ29udGV4dCk7DQotfQ0KLXZvaWQgRlhfUmFuZG9tX0dlbmVyYXRlTVQoRlhfTFBEV09SRCBwQnVmZmVyLCBGWF9JTlQzMiBpQ291bnQpDQotew0KLSAgICBGWF9EV09SRCBkd1NlZWQ7DQotI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18NCi0gICAgaWYgKCFGWF9HZW5lcmF0ZUNyeXB0b1JhbmRvbSgmZHdTZWVkLCAxKSkgew0KLSAgICAgICAgRlhfUmFuZG9tX0dlbmVyYXRlQmFzZSgmZHdTZWVkLCAxKTsNCi0gICAgfQ0KLSNlbHNlDQotICAgIEZYX1JhbmRvbV9HZW5lcmF0ZUJhc2UoJmR3U2VlZCwgMSk7DQotI2VuZGlmDQotICAgIEZYX0xQVk9JRCBwQ29udGV4dCA9IEZYX1JhbmRvbV9NVF9TdGFydChkd1NlZWQpOw0KLSAgICB3aGlsZSAoaUNvdW50IC0tID4gMCkgew0KLSAgICAgICAgKnBCdWZmZXIgKysgPSBGWF9SYW5kb21fTVRfR2VuZXJhdGUocENvbnRleHQpOw0KLSAgICB9DQotICAgIEZYX1JhbmRvbV9NVF9DbG9zZShwQ29udGV4dCk7DQotfQ0KLXZvaWQgRlhfUmFuZG9tX0dlbmVyYXRlQmFzZShGWF9MUERXT1JEIHBCdWZmZXIsIEZYX0lOVDMyIGlDb3VudCkNCi17DQotI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18NCi0gICAgU1lTVEVNVElNRSBzdDEsIHN0MjsNCi0gICAgOjpHZXRTeXN0ZW1UaW1lKCZzdDEpOw0KLSAgICBkbyB7DQotICAgICAgICA6OkdldFN5c3RlbVRpbWUoJnN0Mik7DQotICAgIH0gd2hpbGUgKEZYU1lTX21lbWNtcDMyKCZzdDEsICZzdDIsIHNpemVvZihTWVNURU1USU1FKSkgPT0gMCk7DQotICAgIEZYX0RXT1JEIGR3SGFzaDEgPSBGWF9IYXNoQ29kZV9TdHJpbmdfR2V0QSgoRlhfTFBDU1RSKSZzdDEsIHNpemVvZihzdDEpLCBUUlVFKTsNCi0gICAgRlhfRFdPUkQgZHdIYXNoMiA9IEZYX0hhc2hDb2RlX1N0cmluZ19HZXRBKChGWF9MUENTVFIpJnN0Miwgc2l6ZW9mKHN0MiksIFRSVUUpOw0KLSAgICA6OnNyYW5kKChkd0hhc2gxIDw8IDE2KSB8IChGWF9EV09SRClkd0hhc2gyKTsNCi0jZWxzZQ0KLSAgICB0aW1lX3QgdG1MYXN0ID0gdGltZShOVUxMKSwgdG1DdXI7DQotICAgIHdoaWxlICgodG1DdXIgPSB0aW1lKE5VTEwpKSA9PSB0bUxhc3QpOw0KLSAgICA6OnNyYW5kKCh0bUN1ciA8PCAxNikgfCAodG1MYXN0ICYgMHhGRkZGKSk7DQotI2VuZGlmDQotICAgIHdoaWxlIChpQ291bnQgLS0gPiAwKSB7DQotICAgICAgICAqcEJ1ZmZlciArKyA9IChGWF9EV09SRCkoKDo6cmFuZCgpIDw8IDE2KSB8ICg6OnJhbmQoKSAmIDB4RkZGRikpOw0KLSAgICB9DQotfQ0KLSNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfDQotRlhfQk9PTCBGWF9HZW5lcmF0ZUNyeXB0b1JhbmRvbShGWF9MUERXT1JEIHBCdWZmZXIsIEZYX0lOVDMyIGlDb3VudCkNCi17DQotICAgIEhDUllQVFBST1YgaENQID0gTlVMTDsNCi0gICAgaWYgKCE6OkNyeXB0QWNxdWlyZUNvbnRleHQoJmhDUCwgTlVMTCwgTlVMTCwgUFJPVl9SU0FfRlVMTCwgMCkgfHwgaENQID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICA6OkNyeXB0R2VuUmFuZG9tKGhDUCwgaUNvdW50ICogc2l6ZW9mKEZYX0RXT1JEKSwgKEZYX0xQQllURSlwQnVmZmVyKTsNCi0gICAgOjpDcnlwdFJlbGVhc2VDb250ZXh0KGhDUCwgMCk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi0jZW5kaWYNCi12b2lkIEZYX1JhbmRvbV9HZW5lcmF0ZUNyeXB0byhGWF9MUERXT1JEIHBCdWZmZXIsIEZYX0lOVDMyIGlDb3VudCkNCi17DQotI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18NCi0gICAgRlhfR2VuZXJhdGVDcnlwdG9SYW5kb20ocEJ1ZmZlciwgaUNvdW50KTsNCi0jZWxzZQ0KLSAgICBGWF9SYW5kb21fR2VuZXJhdGVCYXNlKHBCdWZmZXIsIGlDb3VudCk7DQotI2VuZGlmDQotfQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX0NCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGNydC9meF9leHQuaCIKKyNpbmNsdWRlICJleHRlbnNpb24uaCIKKyNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfCisjaW5jbHVkZSA8d2luY3J5cHQuaD4KKyNlbHNlCisjaW5jbHVkZSA8Y3RpbWU+CisjZW5kaWYKK0ZYX0hGSUxFIEZYX0ZpbGVfT3BlbihGWF9CU1RSIGZpbGVOYW1lLCBGWF9EV09SRCBkd01vZGUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpCit7CisgICAgSUZYQ1JUX0ZpbGVBY2Nlc3MqIHBGQSA9IEZYQ1JUX0ZpbGVBY2Nlc3NfQ3JlYXRlKHBBbGxvY2F0b3IpOworICAgIGlmIChwRkEgJiYgIXBGQS0+T3BlbihmaWxlTmFtZSwgZHdNb2RlKSkgeworICAgICAgICBwRkEtPlJlbGVhc2UocEFsbG9jYXRvcik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gKEZYX0hGSUxFKXBGQTsKK30KK0ZYX0hGSUxFIEZYX0ZpbGVfT3BlbihGWF9XU1RSIGZpbGVOYW1lLCBGWF9EV09SRCBkd01vZGUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpCit7CisgICAgSUZYQ1JUX0ZpbGVBY2Nlc3MqIHBGQSA9IEZYQ1JUX0ZpbGVBY2Nlc3NfQ3JlYXRlKHBBbGxvY2F0b3IpOworICAgIGlmIChwRkEgJiYgIXBGQS0+T3BlbihmaWxlTmFtZSwgZHdNb2RlKSkgeworICAgICAgICBwRkEtPlJlbGVhc2UocEFsbG9jYXRvcik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gKEZYX0hGSUxFKXBGQTsKK30KK3ZvaWQgRlhfRmlsZV9DbG9zZShGWF9IRklMRSBoRmlsZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikKK3sKKyAgICBGWFNZU19hc3NlcnQoaEZpbGUgIT0gTlVMTCk7CisgICAgKChJRlhDUlRfRmlsZUFjY2VzcyopaEZpbGUpLT5DbG9zZSgpOworICAgICgoSUZYQ1JUX0ZpbGVBY2Nlc3MqKWhGaWxlKS0+UmVsZWFzZShwQWxsb2NhdG9yKTsKK30KK0ZYX0ZJTEVTSVpFIEZYX0ZpbGVfR2V0U2l6ZShGWF9IRklMRSBoRmlsZSkKK3sKKyAgICBGWFNZU19hc3NlcnQoaEZpbGUgIT0gTlVMTCk7CisgICAgcmV0dXJuICgoSUZYQ1JUX0ZpbGVBY2Nlc3MqKWhGaWxlKS0+R2V0U2l6ZSgpOworfQorRlhfRklMRVNJWkUgRlhfRmlsZV9HZXRQb3NpdGlvbihGWF9IRklMRSBoRmlsZSkKK3sKKyAgICBGWFNZU19hc3NlcnQoaEZpbGUgIT0gTlVMTCk7CisgICAgcmV0dXJuICgoSUZYQ1JUX0ZpbGVBY2Nlc3MqKWhGaWxlKS0+R2V0UG9zaXRpb24oKTsKK30KK0ZYX0ZJTEVTSVpFIEZYX0ZpbGVfU2V0UG9zaXRpb24oRlhfSEZJTEUgaEZpbGUsIEZYX0ZJTEVTSVpFIHBvcykKK3sKKyAgICBGWFNZU19hc3NlcnQoaEZpbGUgIT0gTlVMTCk7CisgICAgcmV0dXJuICgoSUZYQ1JUX0ZpbGVBY2Nlc3MqKWhGaWxlKS0+U2V0UG9zaXRpb24ocG9zKTsKK30KK3NpemVfdCBGWF9GaWxlX1JlYWQoRlhfSEZJTEUgaEZpbGUsIHZvaWQqIHBCdWZmZXIsIHNpemVfdCBzekJ1ZmZlcikKK3sKKyAgICBGWFNZU19hc3NlcnQoaEZpbGUgIT0gTlVMTCk7CisgICAgcmV0dXJuICgoSUZYQ1JUX0ZpbGVBY2Nlc3MqKWhGaWxlKS0+UmVhZChwQnVmZmVyLCBzekJ1ZmZlcik7Cit9CitzaXplX3QgRlhfRmlsZV9SZWFkUG9zKEZYX0hGSUxFIGhGaWxlLCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIsIEZYX0ZJTEVTSVpFIHBvcykKK3sKKyAgICBGWFNZU19hc3NlcnQoaEZpbGUgIT0gTlVMTCk7CisgICAgcmV0dXJuICgoSUZYQ1JUX0ZpbGVBY2Nlc3MqKWhGaWxlKS0+UmVhZFBvcyhwQnVmZmVyLCBzekJ1ZmZlciwgcG9zKTsKK30KK3NpemVfdCBGWF9GaWxlX1dyaXRlKEZYX0hGSUxFIGhGaWxlLCBjb25zdCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIpCit7CisgICAgRlhTWVNfYXNzZXJ0KGhGaWxlICE9IE5VTEwpOworICAgIHJldHVybiAoKElGWENSVF9GaWxlQWNjZXNzKiloRmlsZSktPldyaXRlKHBCdWZmZXIsIHN6QnVmZmVyKTsKK30KK3NpemVfdCBGWF9GaWxlX1dyaXRlUG9zKEZYX0hGSUxFIGhGaWxlLCBjb25zdCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIsIEZYX0ZJTEVTSVpFIHBvcykKK3sKKyAgICBGWFNZU19hc3NlcnQoaEZpbGUgIT0gTlVMTCk7CisgICAgcmV0dXJuICgoSUZYQ1JUX0ZpbGVBY2Nlc3MqKWhGaWxlKS0+V3JpdGVQb3MocEJ1ZmZlciwgc3pCdWZmZXIsIHBvcyk7Cit9CitGWF9CT09MIEZYX0ZpbGVfRmx1c2goRlhfSEZJTEUgaEZpbGUpCit7CisgICAgRlhTWVNfYXNzZXJ0KGhGaWxlICE9IE5VTEwpOworICAgIHJldHVybiAoKElGWENSVF9GaWxlQWNjZXNzKiloRmlsZSktPkZsdXNoKCk7Cit9CitGWF9CT09MIEZYX0ZpbGVfVHJ1bmNhdGUoRlhfSEZJTEUgaEZpbGUsIEZYX0ZJTEVTSVpFIHN6RmlsZSkKK3sKKyAgICBGWFNZU19hc3NlcnQoaEZpbGUgIT0gTlVMTCk7CisgICAgcmV0dXJuICgoSUZYQ1JUX0ZpbGVBY2Nlc3MqKWhGaWxlKS0+VHJ1bmNhdGUoc3pGaWxlKTsKK30KK0lGWF9GaWxlU3RyZWFtKiBGWF9DcmVhdGVGaWxlU3RyZWFtKEZYX0xQQ1NUUiBmaWxlbmFtZSwgRlhfRFdPUkQgZHdNb2RlcywgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikKK3sKKyAgICBJRlhDUlRfRmlsZUFjY2VzcyogcEZBID0gRlhDUlRfRmlsZUFjY2Vzc19DcmVhdGUocEFsbG9jYXRvcik7CisgICAgaWYgKCFwRkEpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmICghcEZBLT5PcGVuKGZpbGVuYW1lLCBkd01vZGVzKSkgeworICAgICAgICBwRkEtPlJlbGVhc2UocEFsbG9jYXRvcik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAocEFsbG9jYXRvcikgeworICAgICAgICByZXR1cm4gRlhfTmV3QXRBbGxvY2F0b3IocEFsbG9jYXRvcikgQ0ZYX0NSVEZpbGVTdHJlYW0ocEZBLCBwQWxsb2NhdG9yKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gRlhfTkVXIENGWF9DUlRGaWxlU3RyZWFtKHBGQSwgcEFsbG9jYXRvcik7CisgICAgfQorfQorSUZYX0ZpbGVTdHJlYW0qIEZYX0NyZWF0ZUZpbGVTdHJlYW0oRlhfTFBDV1NUUiBmaWxlbmFtZSwgRlhfRFdPUkQgZHdNb2RlcywgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikKK3sKKyAgICBJRlhDUlRfRmlsZUFjY2VzcyogcEZBID0gRlhDUlRfRmlsZUFjY2Vzc19DcmVhdGUocEFsbG9jYXRvcik7CisgICAgaWYgKCFwRkEpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmICghcEZBLT5PcGVuKGZpbGVuYW1lLCBkd01vZGVzKSkgeworICAgICAgICBwRkEtPlJlbGVhc2UocEFsbG9jYXRvcik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAocEFsbG9jYXRvcikgeworICAgICAgICByZXR1cm4gRlhfTmV3QXRBbGxvY2F0b3IocEFsbG9jYXRvcikgQ0ZYX0NSVEZpbGVTdHJlYW0ocEZBLCBwQWxsb2NhdG9yKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gRlhfTkVXIENGWF9DUlRGaWxlU3RyZWFtKHBGQSwgcEFsbG9jYXRvcik7CisgICAgfQorfQorSUZYX0ZpbGVXcml0ZSogRlhfQ3JlYXRlRmlsZVdyaXRlKEZYX0xQQ1NUUiBmaWxlbmFtZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikKK3sKKyAgICByZXR1cm4gRlhfQ3JlYXRlRmlsZVN0cmVhbShmaWxlbmFtZSwgRlhfRklMRU1PREVfVHJ1bmNhdGUsIHBBbGxvY2F0b3IpOworfQorSUZYX0ZpbGVXcml0ZSogRlhfQ3JlYXRlRmlsZVdyaXRlKEZYX0xQQ1dTVFIgZmlsZW5hbWUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpCit7CisgICAgcmV0dXJuIEZYX0NyZWF0ZUZpbGVTdHJlYW0oZmlsZW5hbWUsIEZYX0ZJTEVNT0RFX1RydW5jYXRlLCBwQWxsb2NhdG9yKTsKK30KK0lGWF9GaWxlUmVhZCogRlhfQ3JlYXRlRmlsZVJlYWQoRlhfTFBDU1RSIGZpbGVuYW1lLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQoreworICAgIHJldHVybiBGWF9DcmVhdGVGaWxlU3RyZWFtKGZpbGVuYW1lLCBGWF9GSUxFTU9ERV9SZWFkT25seSwgcEFsbG9jYXRvcik7Cit9CitJRlhfRmlsZVJlYWQqIEZYX0NyZWF0ZUZpbGVSZWFkKEZYX0xQQ1dTVFIgZmlsZW5hbWUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpCit7CisgICAgcmV0dXJuIEZYX0NyZWF0ZUZpbGVTdHJlYW0oZmlsZW5hbWUsIEZYX0ZJTEVNT0RFX1JlYWRPbmx5LCBwQWxsb2NhdG9yKTsKK30KK0lGWF9NZW1vcnlTdHJlYW0qIEZYX0NyZWF0ZU1lbW9yeVN0cmVhbShGWF9MUEJZVEUgcEJ1ZmZlciwgc2l6ZV90IGR3U2l6ZSwgRlhfQk9PTCBiVGFrZU92ZXIsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpCit7CisgICAgaWYgKHBBbGxvY2F0b3IpIHsKKyAgICAgICAgcmV0dXJuIEZYX05ld0F0QWxsb2NhdG9yKHBBbGxvY2F0b3IpQ0ZYX01lbW9yeVN0cmVhbShwQnVmZmVyLCBkd1NpemUsIGJUYWtlT3ZlciwgcEFsbG9jYXRvcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIEZYX05FVyBDRlhfTWVtb3J5U3RyZWFtKHBCdWZmZXIsIGR3U2l6ZSwgYlRha2VPdmVyLCBOVUxMKTsKKyAgICB9Cit9CitJRlhfTWVtb3J5U3RyZWFtKiBGWF9DcmVhdGVNZW1vcnlTdHJlYW0oRlhfQk9PTCBiQ29uc2VjdXRpdmUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpCit7CisgICAgaWYgKHBBbGxvY2F0b3IpIHsKKyAgICAgICAgcmV0dXJuIEZYX05ld0F0QWxsb2NhdG9yKHBBbGxvY2F0b3IpQ0ZYX01lbW9yeVN0cmVhbShiQ29uc2VjdXRpdmUsIHBBbGxvY2F0b3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBGWF9ORVcgQ0ZYX01lbW9yeVN0cmVhbShiQ29uc2VjdXRpdmUsIE5VTEwpOworICAgIH0KK30KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK0ZYX0ZMT0FUIEZYU1lTX3RhbihGWF9GTE9BVCBhKQoreworICAgIHJldHVybiAoRlhfRkxPQVQpdGFuKGEpOworfQorRlhfRkxPQVQgRlhTWVNfbG9nYihGWF9GTE9BVCBiLCBGWF9GTE9BVCB4KQoreworICAgIHJldHVybiBGWFNZU19sb2coeCkgLyBGWFNZU19sb2coYik7Cit9CitGWF9GTE9BVCBGWFNZU19zdHJ0b2YoRlhfTFBDU1RSIHBjc1N0ciwgRlhfSU5UMzIgaUxlbmd0aCwgRlhfSU5UMzIgKnBVc2VkTGVuKQoreworICAgIEZYU1lTX2Fzc2VydChwY3NTdHIgIT0gTlVMTCk7CisgICAgaWYgKGlMZW5ndGggPCAwKSB7CisgICAgICAgIGlMZW5ndGggPSAoRlhfSU5UMzIpRlhTWVNfc3RybGVuKHBjc1N0cik7CisgICAgfQorICAgIENGWF9XaWRlU3RyaW5nIHdzID0gQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChwY3NTdHIsIGlMZW5ndGgpOworICAgIHJldHVybiBGWFNZU193Y3N0b2YoKEZYX0xQQ1dTVFIpd3MsIGlMZW5ndGgsIHBVc2VkTGVuKTsKK30KK0ZYX0ZMT0FUIEZYU1lTX3djc3RvZihGWF9MUENXU1RSIHB3c1N0ciwgRlhfSU5UMzIgaUxlbmd0aCwgRlhfSU5UMzIgKnBVc2VkTGVuKQoreworICAgIEZYU1lTX2Fzc2VydChwd3NTdHIgIT0gTlVMTCk7CisgICAgaWYgKGlMZW5ndGggPCAwKSB7CisgICAgICAgIGlMZW5ndGggPSAoRlhfSU5UMzIpRlhTWVNfd2NzbGVuKHB3c1N0cik7CisgICAgfQorICAgIGlmIChpTGVuZ3RoID09IDApIHsKKyAgICAgICAgcmV0dXJuIDAuMGY7CisgICAgfQorICAgIEZYX0lOVDMyIGlVc2VkTGVuID0gMDsKKyAgICBGWF9CT09MIGJOZWd0aXZlID0gRkFMU0U7CisgICAgc3dpdGNoIChwd3NTdHJbaVVzZWRMZW5dKSB7CisgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgYk5lZ3RpdmUgPSBUUlVFOworICAgICAgICBjYXNlICcrJzoKKyAgICAgICAgICAgIGlVc2VkTGVuKys7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgRlhfRkxPQVQgZlZhbHVlID0gMC4wZjsKKyAgICB3aGlsZSAoaVVzZWRMZW4gPCBpTGVuZ3RoKSB7CisgICAgICAgIEZYX1dDSEFSIHdjaCA9IHB3c1N0cltpVXNlZExlbl07CisgICAgICAgIGlmICh3Y2ggPj0gTCcwJyAmJiB3Y2ggPD0gTCc5JykgeworICAgICAgICAgICAgZlZhbHVlID0gZlZhbHVlICogMTAuMGYgKyAod2NoIC0gTCcwJyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpVXNlZExlbisrOworICAgIH0KKyAgICBpZiAoaVVzZWRMZW4gPCBpTGVuZ3RoICYmIHB3c1N0cltpVXNlZExlbl0gPT0gTCcuJykgeworICAgICAgICBGWF9GTE9BVCBmUHJlY2lzZSA9IDAuMWY7CisgICAgICAgIHdoaWxlICgrK2lVc2VkTGVuIDwgaUxlbmd0aCkgeworICAgICAgICAgICAgRlhfV0NIQVIgd2NoID0gcHdzU3RyW2lVc2VkTGVuXTsKKyAgICAgICAgICAgIGlmICh3Y2ggPj0gTCcwJyAmJiB3Y2ggPD0gTCc5JykgeworICAgICAgICAgICAgICAgIGZWYWx1ZSArPSAod2NoIC0gTCcwJykgKiBmUHJlY2lzZTsKKyAgICAgICAgICAgICAgICBmUHJlY2lzZSAqPSAwLjFmOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocFVzZWRMZW4pIHsKKyAgICAgICAgKnBVc2VkTGVuID0gaVVzZWRMZW47CisgICAgfQorICAgIHJldHVybiBiTmVndGl2ZSA/IC1mVmFsdWUgOiBmVmFsdWU7Cit9CitGWF9MUFdTVFIgRlhTWVNfd2NzbmNweShGWF9MUFdTVFIgZHN0U3RyLCBGWF9MUENXU1RSIHNyY1N0ciwgc2l6ZV90IGNvdW50KQoreworICAgIEZYU1lTX2Fzc2VydChkc3RTdHIgIT0gTlVMTCAmJiBzcmNTdHIgIT0gTlVMTCAmJiBjb3VudCA+IDApOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKKyAgICAgICAgaWYgKChkc3RTdHJbaV0gPSBzcmNTdHJbaV0pID09IEwnXDAnKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIHJldHVybiBkc3RTdHI7Cit9CitGWF9JTlQzMiBGWFNZU193Y3NuaWNtcChGWF9MUENXU1RSIHMxLCBGWF9MUENXU1RSIHMyLCBzaXplX3QgY291bnQpCit7CisgICAgRlhTWVNfYXNzZXJ0KHMxICE9IE5VTEwgJiYgczIgIT0gTlVMTCAmJiBjb3VudCA+IDApOworICAgIEZYX1dDSEFSIHdjaDEgPSAwLCB3Y2gyID0gMDsKKyAgICB3aGlsZSAoY291bnQtLSA+IDApIHsKKyAgICAgICAgd2NoMSA9IChGWF9XQ0hBUilGWFNZU190b2xvd2VyKCpzMSsrKTsKKyAgICAgICAgd2NoMiA9IChGWF9XQ0hBUilGWFNZU190b2xvd2VyKCpzMisrKTsKKyAgICAgICAgaWYgKHdjaDEgIT0gd2NoMikgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHdjaDEgLSB3Y2gyOworfQorRlhfSU5UMzIgRlhTWVNfc3RybmljbXAoRlhfTFBDU1RSIHMxLCBGWF9MUENTVFIgczIsIHNpemVfdCBjb3VudCkKK3sKKyAgICBGWFNZU19hc3NlcnQoczEgIT0gTlVMTCAmJiBzMiAhPSBOVUxMICYmIGNvdW50ID4gMCk7CisgICAgRlhfQ0hBUiBjaDEgPSAwLCBjaDIgPSAwOworICAgIHdoaWxlIChjb3VudC0tID4gMCkgeworICAgICAgICBjaDEgPSAoRlhfQ0hBUilGWFNZU190b2xvd2VyKCpzMSsrKTsKKyAgICAgICAgY2gyID0gKEZYX0NIQVIpRlhTWVNfdG9sb3dlcigqczIrKyk7CisgICAgICAgIGlmIChjaDEgIT0gY2gyKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY2gxIC0gY2gyOworfQorRlhfRFdPUkQgRlhfSGFzaENvZGVfU3RyaW5nX0dldEEoRlhfTFBDU1RSIHBTdHIsIEZYX0lOVDMyIGlMZW5ndGgsIEZYX0JPT0wgYklnbm9yZUNhc2UpCit7CisgICAgRlhTWVNfYXNzZXJ0KHBTdHIgIT0gTlVMTCk7CisgICAgaWYgKGlMZW5ndGggPCAwKSB7CisgICAgICAgIGlMZW5ndGggPSAoRlhfSU5UMzIpRlhTWVNfc3RybGVuKHBTdHIpOworICAgIH0KKyAgICBGWF9MUENTVFIgcFN0ckVuZCA9IHBTdHIgKyBpTGVuZ3RoOworICAgIEZYX0RXT1JEIGR3SGFzaENvZGUgPSAwOworICAgIGlmIChiSWdub3JlQ2FzZSkgeworICAgICAgICB3aGlsZSAocFN0ciA8IHBTdHJFbmQpIHsKKyAgICAgICAgICAgIGR3SGFzaENvZGUgPSAzMSAqIGR3SGFzaENvZGUgKyBGWFNZU190b2xvd2VyKCpwU3RyKyspOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgd2hpbGUgKHBTdHIgPCBwU3RyRW5kKSB7CisgICAgICAgICAgICBkd0hhc2hDb2RlID0gMzEgKiBkd0hhc2hDb2RlICsgKnBTdHIgKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGR3SGFzaENvZGU7Cit9CitGWF9EV09SRCBGWF9IYXNoQ29kZV9TdHJpbmdfR2V0VyhGWF9MUENXU1RSIHBTdHIsIEZYX0lOVDMyIGlMZW5ndGgsIEZYX0JPT0wgYklnbm9yZUNhc2UpCit7CisgICAgRlhTWVNfYXNzZXJ0KHBTdHIgIT0gTlVMTCk7CisgICAgaWYgKGlMZW5ndGggPCAwKSB7CisgICAgICAgIGlMZW5ndGggPSAoRlhfSU5UMzIpRlhTWVNfd2NzbGVuKHBTdHIpOworICAgIH0KKyAgICBGWF9MUENXU1RSIHBTdHJFbmQgPSBwU3RyICsgaUxlbmd0aDsKKyAgICBGWF9EV09SRCBkd0hhc2hDb2RlID0gMDsKKyAgICBpZiAoYklnbm9yZUNhc2UpIHsKKyAgICAgICAgd2hpbGUgKHBTdHIgPCBwU3RyRW5kKSB7CisgICAgICAgICAgICBkd0hhc2hDb2RlID0gMTMxMyAqIGR3SGFzaENvZGUgKyBGWFNZU190b2xvd2VyKCpwU3RyKyspOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgd2hpbGUgKHBTdHIgPCBwU3RyRW5kKSB7CisgICAgICAgICAgICBkd0hhc2hDb2RlID0gMTMxMyAqIGR3SGFzaENvZGUgKyAqcFN0ciArKzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZHdIYXNoQ29kZTsKK30KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCitGWF9MUFZPSUQgRlhfUmFuZG9tX01UX1N0YXJ0KEZYX0RXT1JEIGR3U2VlZCkKK3sKKyAgICBGWF9MUE1UUkFORE9NQ09OVEVYVCBwQ29udGV4dCA9IEZYX0FsbG9jKEZYX01UUkFORE9NQ09OVEVYVCwgMSk7CisgICAgaWYgKCFwQ29udGV4dCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcENvbnRleHQtPm10WzBdID0gZHdTZWVkOworICAgIEZYX0RXT1JEICZpID0gcENvbnRleHQtPm10aTsKKyAgICBGWF9MUERXT1JEIHBCdWYgPSBwQ29udGV4dC0+bXQ7CisgICAgZm9yIChpID0gMTsgaSA8IE1UX047IGkgKyspIHsKKyAgICAgICAgcEJ1ZltpXSA9ICgxODEyNDMzMjUzVUwgKiAocEJ1ZltpIC0gMV0gXiAocEJ1ZltpIC0gMV0gPj4gMzApKSArIGkpOworICAgIH0KKyAgICBwQ29udGV4dC0+YkhhdmVTZWVkID0gVFJVRTsKKyAgICByZXR1cm4gcENvbnRleHQ7Cit9CitGWF9EV09SRCBGWF9SYW5kb21fTVRfR2VuZXJhdGUoRlhfTFBWT0lEIHBDb250ZXh0KQoreworICAgIEZYU1lTX2Fzc2VydChwQ29udGV4dCAhPSBOVUxMKTsKKyAgICBGWF9MUE1UUkFORE9NQ09OVEVYVCBwTVRDID0gKEZYX0xQTVRSQU5ET01DT05URVhUKXBDb250ZXh0OworICAgIEZYX0RXT1JEIHY7CisgICAgc3RhdGljIEZYX0RXT1JEIG1hZ1syXSA9IHswLCBNVF9NYXRyaXhfQX07CisgICAgRlhfRFdPUkQgJm10aSA9IHBNVEMtPm10aTsKKyAgICBGWF9MUERXT1JEIHBCdWYgPSBwTVRDLT5tdDsKKyAgICBpZiAoKGludCltdGkgPCAwIHx8IG10aSA+PSBNVF9OKSB7CisgICAgICAgIGlmIChtdGkgPiBNVF9OICYmICFwTVRDLT5iSGF2ZVNlZWQpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIEZYX0RXT1JEIGtrOworICAgICAgICBmb3IgKGtrID0gMDsga2sgPCBNVF9OIC0gTVRfTTsga2sgKyspIHsKKyAgICAgICAgICAgIHYgPSAocEJ1Zltra10gJiBNVF9VcHBlcl9NYXNrKSB8IChwQnVmW2trICsgMV0gJiBNVF9Mb3dlcl9NYXNrKTsKKyAgICAgICAgICAgIHBCdWZba2tdID0gcEJ1ZltrayArIE1UX01dIF4gKHYgPj4gMSkgXiBtYWdbdiAmIDFdOworICAgICAgICB9CisgICAgICAgIGZvciAoOyBrayA8IE1UX04gLSAxOyBrayArKykgeworICAgICAgICAgICAgdiA9IChwQnVmW2trXSAmIE1UX1VwcGVyX01hc2spIHwgKHBCdWZba2sgKyAxXSAmIE1UX0xvd2VyX01hc2spOworICAgICAgICAgICAgcEJ1Zltra10gPSBwQnVmW2trICsgKE1UX00gLSBNVF9OKV0gXiAodiA+PiAxKSBeIG1hZ1t2ICYgMV07CisgICAgICAgIH0KKyAgICAgICAgdiA9IChwQnVmW01UX04gLSAxXSAmIE1UX1VwcGVyX01hc2spIHwgKHBCdWZbMF0gJiBNVF9Mb3dlcl9NYXNrKTsKKyAgICAgICAgcEJ1ZltNVF9OIC0gMV0gPSBwQnVmW01UX00gLSAxXSBeICh2ID4+IDEpIF4gbWFnW3YgJiAxXTsKKyAgICAgICAgbXRpID0gMDsKKyAgICB9CisgICAgdiA9IHBCdWZbbXRpICsrXTsKKyAgICB2IF49ICh2ID4+IDExKTsKKyAgICB2IF49ICh2IDw8IDcpICYgMHg5ZDJjNTY4MFVMOworICAgIHYgXj0gKHYgPDwgMTUpICYgMHhlZmM2MDAwMFVMOworICAgIHYgXj0gKHYgPj4gMTgpOworICAgIHJldHVybiB2OworfQordm9pZCBGWF9SYW5kb21fTVRfQ2xvc2UoRlhfTFBWT0lEIHBDb250ZXh0KQoreworICAgIEZYU1lTX2Fzc2VydChwQ29udGV4dCAhPSBOVUxMKTsKKyAgICBGWF9GcmVlKHBDb250ZXh0KTsKK30KK3ZvaWQgRlhfUmFuZG9tX0dlbmVyYXRlTVQoRlhfTFBEV09SRCBwQnVmZmVyLCBGWF9JTlQzMiBpQ291bnQpCit7CisgICAgRlhfRFdPUkQgZHdTZWVkOworI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18KKyAgICBpZiAoIUZYX0dlbmVyYXRlQ3J5cHRvUmFuZG9tKCZkd1NlZWQsIDEpKSB7CisgICAgICAgIEZYX1JhbmRvbV9HZW5lcmF0ZUJhc2UoJmR3U2VlZCwgMSk7CisgICAgfQorI2Vsc2UKKyAgICBGWF9SYW5kb21fR2VuZXJhdGVCYXNlKCZkd1NlZWQsIDEpOworI2VuZGlmCisgICAgRlhfTFBWT0lEIHBDb250ZXh0ID0gRlhfUmFuZG9tX01UX1N0YXJ0KGR3U2VlZCk7CisgICAgd2hpbGUgKGlDb3VudCAtLSA+IDApIHsKKyAgICAgICAgKnBCdWZmZXIgKysgPSBGWF9SYW5kb21fTVRfR2VuZXJhdGUocENvbnRleHQpOworICAgIH0KKyAgICBGWF9SYW5kb21fTVRfQ2xvc2UocENvbnRleHQpOworfQordm9pZCBGWF9SYW5kb21fR2VuZXJhdGVCYXNlKEZYX0xQRFdPUkQgcEJ1ZmZlciwgRlhfSU5UMzIgaUNvdW50KQoreworI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18KKyAgICBTWVNURU1USU1FIHN0MSwgc3QyOworICAgIDo6R2V0U3lzdGVtVGltZSgmc3QxKTsKKyAgICBkbyB7CisgICAgICAgIDo6R2V0U3lzdGVtVGltZSgmc3QyKTsKKyAgICB9IHdoaWxlIChGWFNZU19tZW1jbXAzMigmc3QxLCAmc3QyLCBzaXplb2YoU1lTVEVNVElNRSkpID09IDApOworICAgIEZYX0RXT1JEIGR3SGFzaDEgPSBGWF9IYXNoQ29kZV9TdHJpbmdfR2V0QSgoRlhfTFBDU1RSKSZzdDEsIHNpemVvZihzdDEpLCBUUlVFKTsKKyAgICBGWF9EV09SRCBkd0hhc2gyID0gRlhfSGFzaENvZGVfU3RyaW5nX0dldEEoKEZYX0xQQ1NUUikmc3QyLCBzaXplb2Yoc3QyKSwgVFJVRSk7CisgICAgOjpzcmFuZCgoZHdIYXNoMSA8PCAxNikgfCAoRlhfRFdPUkQpZHdIYXNoMik7CisjZWxzZQorICAgIHRpbWVfdCB0bUxhc3QgPSB0aW1lKE5VTEwpLCB0bUN1cjsKKyAgICB3aGlsZSAoKHRtQ3VyID0gdGltZShOVUxMKSkgPT0gdG1MYXN0KTsKKyAgICA6OnNyYW5kKCh0bUN1ciA8PCAxNikgfCAodG1MYXN0ICYgMHhGRkZGKSk7CisjZW5kaWYKKyAgICB3aGlsZSAoaUNvdW50IC0tID4gMCkgeworICAgICAgICAqcEJ1ZmZlciArKyA9IChGWF9EV09SRCkoKDo6cmFuZCgpIDw8IDE2KSB8ICg6OnJhbmQoKSAmIDB4RkZGRikpOworICAgIH0KK30KKyNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfCitGWF9CT09MIEZYX0dlbmVyYXRlQ3J5cHRvUmFuZG9tKEZYX0xQRFdPUkQgcEJ1ZmZlciwgRlhfSU5UMzIgaUNvdW50KQoreworICAgIEhDUllQVFBST1YgaENQID0gTlVMTDsKKyAgICBpZiAoITo6Q3J5cHRBY3F1aXJlQ29udGV4dCgmaENQLCBOVUxMLCBOVUxMLCBQUk9WX1JTQV9GVUxMLCAwKSB8fCBoQ1AgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIDo6Q3J5cHRHZW5SYW5kb20oaENQLCBpQ291bnQgKiBzaXplb2YoRlhfRFdPUkQpLCAoRlhfTFBCWVRFKXBCdWZmZXIpOworICAgIDo6Q3J5cHRSZWxlYXNlQ29udGV4dChoQ1AsIDApOworICAgIHJldHVybiBUUlVFOworfQorI2VuZGlmCit2b2lkIEZYX1JhbmRvbV9HZW5lcmF0ZUNyeXB0byhGWF9MUERXT1JEIHBCdWZmZXIsIEZYX0lOVDMyIGlDb3VudCkKK3sKKyNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfCisgICAgRlhfR2VuZXJhdGVDcnlwdG9SYW5kb20ocEJ1ZmZlciwgaUNvdW50KTsKKyNlbHNlCisgICAgRlhfUmFuZG9tX0dlbmVyYXRlQmFzZShwQnVmZmVyLCBpQ291bnQpOworI2VuZGlmCit9CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjcnQvZnhfeG1sX2NvbXBvc2VyLmNwcCBiL2NvcmUvc3JjL2Z4Y3J0L2Z4X3htbF9jb21wb3Nlci5jcHAKaW5kZXggZDY4ZGQxZi4uMWZjZTkwMCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjcnQvZnhfeG1sX2NvbXBvc2VyLmNwcAorKysgYi9jb3JlL3NyYy9meGNydC9meF94bWxfY29tcG9zZXIuY3BwCkBAIC0xLDQyICsxLDQyIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGNydC9meF94bWwuaCINCi0jaW5jbHVkZSAieG1sX2ludC5oIg0KLXZvaWQgRlhfWE1MX1NwbGl0UXVhbGlmaWVkTmFtZShGWF9CU1RSIGJzRnVsbE5hbWUsIENGWF9CeXRlU3RyaW5nQyAmYnNTcGFjZSwgQ0ZYX0J5dGVTdHJpbmdDICZic05hbWUpDQotew0KLSAgICBpZiAoYnNGdWxsTmFtZS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9JTlQzMiBpU3RhcnQgPSAwOw0KLSAgICBmb3IgKDsgaVN0YXJ0IDwgYnNGdWxsTmFtZS5HZXRMZW5ndGgoKTsgaVN0YXJ0ICsrKSB7DQotICAgICAgICBpZiAoYnNGdWxsTmFtZS5HZXRBdChpU3RhcnQpID09ICc6Jykgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChpU3RhcnQgPj0gYnNGdWxsTmFtZS5HZXRMZW5ndGgoKSkgew0KLSAgICAgICAgYnNOYW1lID0gYnNGdWxsTmFtZTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGJzU3BhY2UgPSBDRlhfQnl0ZVN0cmluZ0MoYnNGdWxsTmFtZS5HZXRDU3RyKCksIGlTdGFydCk7DQotICAgICAgICBpU3RhcnQgKys7DQotICAgICAgICBic05hbWUgPSBDRlhfQnl0ZVN0cmluZ0MoYnNGdWxsTmFtZS5HZXRDU3RyKCkgKyBpU3RhcnQsIGJzRnVsbE5hbWUuR2V0TGVuZ3RoKCkgLSBpU3RhcnQpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1hNTF9FbGVtZW50OjpTZXRUYWcoRlhfQlNUUiBxU3BhY2UsIEZYX0JTVFIgdGFnbmFtZSkNCi17DQotICAgIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBtX0NoaWxkcmVuLm1fcEFsbG9jYXRvcjsNCi0gICAgbV9RU3BhY2VOYW1lLlNldChxU3BhY2UsIHBBbGxvY2F0b3IpOw0KLSAgICBtX1RhZ05hbWUuU2V0KHRhZ25hbWUsIHBBbGxvY2F0b3IpOw0KLX0NCi12b2lkIENYTUxfRWxlbWVudDo6U2V0VGFnKEZYX0JTVFIgcVRhZ05hbWUpDQotew0KLSAgICBBU1NFUlQoIXFUYWdOYW1lLklzRW1wdHkoKSk7DQotICAgIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBtX0NoaWxkcmVuLm1fcEFsbG9jYXRvcjsNCi0gICAgQ0ZYX0J5dGVTdHJpbmdDIGJzU3BhY2UsIGJzTmFtZTsNCi0gICAgRlhfWE1MX1NwbGl0UXVhbGlmaWVkTmFtZShxVGFnTmFtZSwgYnNTcGFjZSwgYnNOYW1lKTsNCi0gICAgbV9RU3BhY2VOYW1lLlNldChic1NwYWNlLCBwQWxsb2NhdG9yKTsNCi0gICAgbV9UYWdOYW1lLlNldChic05hbWUsIHBBbGxvY2F0b3IpOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGNydC9meF94bWwuaCIKKyNpbmNsdWRlICJ4bWxfaW50LmgiCit2b2lkIEZYX1hNTF9TcGxpdFF1YWxpZmllZE5hbWUoRlhfQlNUUiBic0Z1bGxOYW1lLCBDRlhfQnl0ZVN0cmluZ0MgJmJzU3BhY2UsIENGWF9CeXRlU3RyaW5nQyAmYnNOYW1lKQoreworICAgIGlmIChic0Z1bGxOYW1lLklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX0lOVDMyIGlTdGFydCA9IDA7CisgICAgZm9yICg7IGlTdGFydCA8IGJzRnVsbE5hbWUuR2V0TGVuZ3RoKCk7IGlTdGFydCArKykgeworICAgICAgICBpZiAoYnNGdWxsTmFtZS5HZXRBdChpU3RhcnQpID09ICc6JykgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGlTdGFydCA+PSBic0Z1bGxOYW1lLkdldExlbmd0aCgpKSB7CisgICAgICAgIGJzTmFtZSA9IGJzRnVsbE5hbWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnNTcGFjZSA9IENGWF9CeXRlU3RyaW5nQyhic0Z1bGxOYW1lLkdldENTdHIoKSwgaVN0YXJ0KTsKKyAgICAgICAgaVN0YXJ0ICsrOworICAgICAgICBic05hbWUgPSBDRlhfQnl0ZVN0cmluZ0MoYnNGdWxsTmFtZS5HZXRDU3RyKCkgKyBpU3RhcnQsIGJzRnVsbE5hbWUuR2V0TGVuZ3RoKCkgLSBpU3RhcnQpOworICAgIH0KK30KK3ZvaWQgQ1hNTF9FbGVtZW50OjpTZXRUYWcoRlhfQlNUUiBxU3BhY2UsIEZYX0JTVFIgdGFnbmFtZSkKK3sKKyAgICBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gbV9DaGlsZHJlbi5tX3BBbGxvY2F0b3I7CisgICAgbV9RU3BhY2VOYW1lLlNldChxU3BhY2UsIHBBbGxvY2F0b3IpOworICAgIG1fVGFnTmFtZS5TZXQodGFnbmFtZSwgcEFsbG9jYXRvcik7Cit9Cit2b2lkIENYTUxfRWxlbWVudDo6U2V0VGFnKEZYX0JTVFIgcVRhZ05hbWUpCit7CisgICAgQVNTRVJUKCFxVGFnTmFtZS5Jc0VtcHR5KCkpOworICAgIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBtX0NoaWxkcmVuLm1fcEFsbG9jYXRvcjsKKyAgICBDRlhfQnl0ZVN0cmluZ0MgYnNTcGFjZSwgYnNOYW1lOworICAgIEZYX1hNTF9TcGxpdFF1YWxpZmllZE5hbWUocVRhZ05hbWUsIGJzU3BhY2UsIGJzTmFtZSk7CisgICAgbV9RU3BhY2VOYW1lLlNldChic1NwYWNlLCBwQWxsb2NhdG9yKTsKKyAgICBtX1RhZ05hbWUuU2V0KGJzTmFtZSwgcEFsbG9jYXRvcik7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNydC9meF94bWxfcGFyc2VyLmNwcCBiL2NvcmUvc3JjL2Z4Y3J0L2Z4X3htbF9wYXJzZXIuY3BwCmluZGV4IDg1ZTk1NDQuLmMzZDRiOWMgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y3J0L2Z4X3htbF9wYXJzZXIuY3BwCisrKyBiL2NvcmUvc3JjL2Z4Y3J0L2Z4X3htbF9wYXJzZXIuY3BwCkBAIC0xLDEwMTcgKzEsMTAxNyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfeG1sLmgiDQotI2luY2x1ZGUgInhtbF9pbnQuaCINCi1DWE1MX1BhcnNlcjo6fkNYTUxfUGFyc2VyKCkNCi17DQotICAgIGlmIChtX2JPd25lZFN0cmVhbSkgew0KLSAgICAgICAgbV9wRGF0YUFjYy0+UmVsZWFzZSgpOw0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1hNTF9QYXJzZXI6OkluaXQoRlhfTFBCWVRFIHBCdWZmZXIsIHNpemVfdCBzaXplKQ0KLXsNCi0gICAgaWYgKG1fcEFsbG9jYXRvcikgew0KLSAgICAgICAgbV9wRGF0YUFjYyA9IEZYX05ld0F0QWxsb2NhdG9yKG1fcEFsbG9jYXRvcilDWE1MX0RhdGFCdWZBY2MocEJ1ZmZlciwgc2l6ZSwgbV9wQWxsb2NhdG9yKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1fcERhdGFBY2MgPSBGWF9ORVcgQ1hNTF9EYXRhQnVmQWNjKHBCdWZmZXIsIHNpemUsIE5VTEwpOw0KLSAgICB9DQotICAgIGlmICghbV9wRGF0YUFjYykgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHJldHVybiBJbml0KFRSVUUpOw0KLX0NCi1GWF9CT09MIENYTUxfUGFyc2VyOjpJbml0KElGWF9GaWxlUmVhZCAqcEZpbGVSZWFkKQ0KLXsNCi0gICAgaWYgKG1fcEFsbG9jYXRvcikgew0KLSAgICAgICAgbV9wRGF0YUFjYyA9IEZYX05ld0F0QWxsb2NhdG9yKG1fcEFsbG9jYXRvcilDWE1MX0RhdGFTdG1BY2MocEZpbGVSZWFkLCBtX3BBbGxvY2F0b3IpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wRGF0YUFjYyA9IEZYX05FVyBDWE1MX0RhdGFTdG1BY2MocEZpbGVSZWFkLCBOVUxMKTsNCi0gICAgfQ0KLSAgICBpZiAoIW1fcERhdGFBY2MpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gSW5pdChUUlVFKTsNCi19DQotRlhfQk9PTCBDWE1MX1BhcnNlcjo6SW5pdChJRlhfQnVmZmVyUmVhZCAqcEJ1ZmZlcikNCi17DQotICAgIGlmICghcEJ1ZmZlcikgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fcERhdGFBY2MgPSBwQnVmZmVyOw0KLSAgICByZXR1cm4gSW5pdChGQUxTRSk7DQotfQ0KLUZYX0JPT0wgQ1hNTF9QYXJzZXI6OkluaXQoRlhfQk9PTCBiT3duZGVkU3RyZWFtKQ0KLXsNCi0gICAgbV9iT3duZWRTdHJlYW0gPSBiT3duZGVkU3RyZWFtOw0KLSAgICBtX25PZmZzZXQgPSAwOw0KLSAgICByZXR1cm4gUmVhZE5leHRCbG9jaygpOw0KLX0NCi1GWF9CT09MIENYTUxfUGFyc2VyOjpSZWFkTmV4dEJsb2NrKCkNCi17DQotICAgIGlmICghbV9wRGF0YUFjYy0+UmVhZE5leHRCbG9jaygpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbV9wQnVmZmVyID0gbV9wRGF0YUFjYy0+R2V0QmxvY2tCdWZmZXIoKTsNCi0gICAgbV9kd0J1ZmZlclNpemUgPSBtX3BEYXRhQWNjLT5HZXRCbG9ja1NpemUoKTsNCi0gICAgbV9uQnVmZmVyT2Zmc2V0ID0gbV9wRGF0YUFjYy0+R2V0QmxvY2tPZmZzZXQoKTsNCi0gICAgbV9kd0luZGV4ID0gMDsNCi0gICAgcmV0dXJuIG1fZHdCdWZmZXJTaXplID4gMDsNCi19DQotRlhfQk9PTCBDWE1MX1BhcnNlcjo6SXNFT0YoKQ0KLXsNCi0gICAgaWYgKCFtX3BEYXRhQWNjLT5Jc0VPRigpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgcmV0dXJuIG1fZHdJbmRleCA+PSBtX2R3QnVmZmVyU2l6ZTsNCi19DQotI2RlZmluZSBGWENSVE1fWE1MX0NIQVJUWVBFX05vcm1hbAkJCTB4MDANCi0jZGVmaW5lIEZYQ1JUTV9YTUxfQ0hBUlRZUEVfU3BhY2VDaGFyCQkweDAxDQotI2RlZmluZSBGWENSVE1fWE1MX0NIQVJUWVBFX0xldHRlcgkJCTB4MDINCi0jZGVmaW5lIEZYQ1JUTV9YTUxfQ0hBUlRZUEVfRGlnaXRhbAkJCTB4MDQNCi0jZGVmaW5lIEZYQ1JUTV9YTUxfQ0hBUlRZUEVfTmFtZUludHJvCQkweDA4DQotI2RlZmluZSBGWENSVE1fWE1MX0NIQVJUWVBFX05hbWVDaGFyCQkweDEwDQotI2RlZmluZSBGWENSVE1fWE1MX0NIQVJUWVBFX0hleERpZ2l0YWwJCTB4MjANCi0jZGVmaW5lIEZYQ1JUTV9YTUxfQ0hBUlRZUEVfSGV4TG93ZXJMZXR0ZXIJMHg0MA0KLSNkZWZpbmUgRlhDUlRNX1hNTF9DSEFSVFlQRV9IZXhVcHBlckxldHRlcgkweDYwDQotI2RlZmluZSBGWENSVE1fWE1MX0NIQVJUWVBFX0hleENoYXIJCQkweDYwDQotRlhfQllURSBnX0ZYQ1JUX1hNTF9CeXRlVHlwZXNbMjU2XSA9IHsNCi0gICAgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwNCi0gICAgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwNCi0gICAgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCwgMHgxMCwgMHgwMCwNCi0gICAgMHgzNCwgMHgzNCwgMHgzNCwgMHgzNCwgMHgzNCwgMHgzNCwgMHgzNCwgMHgzNCwgMHgzNCwgMHgzNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgMHgwMCwgMHg3QSwgMHg3QSwgMHg3QSwgMHg3QSwgMHg3QSwgMHg3QSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwNCi0gICAgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwNCi0gICAgMHgwMCwgMHg1QSwgMHg1QSwgMHg1QSwgMHg1QSwgMHg1QSwgMHg1QSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwNCi0gICAgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCi0gICAgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwNCi0gICAgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwNCi0gICAgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwNCi0gICAgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwNCi0gICAgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwNCi0gICAgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwNCi0gICAgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwNCi0gICAgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgwMSwgMHgwMSwNCi19Ow0KLUZYX0JPT0wgZ19GWENSVF9YTUxfSXNXaGl0ZVNwYWNlKEZYX0JZVEUgY2gpDQotew0KLSAgICByZXR1cm4gKGdfRlhDUlRfWE1MX0J5dGVUeXBlc1tjaF0gJiBGWENSVE1fWE1MX0NIQVJUWVBFX1NwYWNlQ2hhcikgIT0gMDsNCi19DQotRlhfQk9PTCBnX0ZYQ1JUX1hNTF9Jc0xldHRlcihGWF9CWVRFIGNoKQ0KLXsNCi0gICAgcmV0dXJuIChnX0ZYQ1JUX1hNTF9CeXRlVHlwZXNbY2hdICYgRlhDUlRNX1hNTF9DSEFSVFlQRV9MZXR0ZXIpICE9IDA7DQotfQ0KLUZYX0JPT0wgZ19GWENSVF9YTUxfSXNEaWdpdGFsKEZYX0JZVEUgY2gpDQotew0KLSAgICByZXR1cm4gKGdfRlhDUlRfWE1MX0J5dGVUeXBlc1tjaF0gJiBGWENSVE1fWE1MX0NIQVJUWVBFX0RpZ2l0YWwpICE9IDA7DQotfQ0KLUZYX0JPT0wgZ19GWENSVF9YTUxfSXNOYW1lSW50cm8oRlhfQllURSBjaCkNCi17DQotICAgIHJldHVybiAoZ19GWENSVF9YTUxfQnl0ZVR5cGVzW2NoXSAmIEZYQ1JUTV9YTUxfQ0hBUlRZUEVfTmFtZUludHJvKSAhPSAwOw0KLX0NCi1GWF9CT09MIGdfRlhDUlRfWE1MX0lzTmFtZUNoYXIoRlhfQllURSBjaCkNCi17DQotICAgIHJldHVybiAoZ19GWENSVF9YTUxfQnl0ZVR5cGVzW2NoXSAmIEZYQ1JUTV9YTUxfQ0hBUlRZUEVfTmFtZUNoYXIpICE9IDA7DQotfQ0KLUZYX0JPT0wgZ19GWENSVF9YTUxfSXNIZXhDaGFyKEZYX0JZVEUgY2gpDQotew0KLSAgICByZXR1cm4gKGdfRlhDUlRfWE1MX0J5dGVUeXBlc1tjaF0gJiBGWENSVE1fWE1MX0NIQVJUWVBFX0hleENoYXIpICE9IDA7DQotfQ0KLXZvaWQgQ1hNTF9QYXJzZXI6OlNraXBXaGl0ZVNwYWNlcygpDQotew0KLSAgICBtX25PZmZzZXQgPSBtX25CdWZmZXJPZmZzZXQgKyAoRlhfRklMRVNJWkUpbV9kd0luZGV4Ow0KLSAgICBpZiAoSXNFT0YoKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGRvIHsNCi0gICAgICAgIHdoaWxlIChtX2R3SW5kZXggPCBtX2R3QnVmZmVyU2l6ZSAmJiBnX0ZYQ1JUX1hNTF9Jc1doaXRlU3BhY2UobV9wQnVmZmVyW21fZHdJbmRleF0pKSB7DQotICAgICAgICAgICAgbV9kd0luZGV4ICsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9uT2Zmc2V0ID0gbV9uQnVmZmVyT2Zmc2V0ICsgKEZYX0ZJTEVTSVpFKW1fZHdJbmRleDsNCi0gICAgICAgIGlmIChtX2R3SW5kZXggPCBtX2R3QnVmZmVyU2l6ZSB8fCBJc0VPRigpKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0gd2hpbGUgKFJlYWROZXh0QmxvY2soKSk7DQotfQ0KLXZvaWQgQ1hNTF9QYXJzZXI6OkdldE5hbWUoQ0ZYX0J5dGVTdHJpbmdMICZzcGFjZSwgQ0ZYX0J5dGVTdHJpbmdMICZuYW1lKQ0KLXsNCi0gICAgbV9uT2Zmc2V0ID0gbV9uQnVmZmVyT2Zmc2V0ICsgKEZYX0ZJTEVTSVpFKW1fZHdJbmRleDsNCi0gICAgaWYgKElzRU9GKCkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVRleHRCdWYgYnVmKG1fcEFsbG9jYXRvcik7DQotICAgIEZYX0JZVEUgY2g7DQotICAgIGRvIHsNCi0gICAgICAgIHdoaWxlIChtX2R3SW5kZXggPCBtX2R3QnVmZmVyU2l6ZSkgew0KLSAgICAgICAgICAgIGNoID0gbV9wQnVmZmVyW21fZHdJbmRleF07DQotICAgICAgICAgICAgaWYgKGNoID09ICc6Jykgew0KLSAgICAgICAgICAgICAgICBidWYuR2V0Qnl0ZVN0cmluZ0woc3BhY2UpOw0KLSAgICAgICAgICAgICAgICBidWYuQ2xlYXIoKTsNCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGdfRlhDUlRfWE1MX0lzTmFtZUNoYXIoY2gpKSB7DQotICAgICAgICAgICAgICAgIGJ1Zi5BcHBlbmRDaGFyKGNoKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9kd0luZGV4ICsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9uT2Zmc2V0ID0gbV9uQnVmZmVyT2Zmc2V0ICsgKEZYX0ZJTEVTSVpFKW1fZHdJbmRleDsNCi0gICAgICAgIGlmIChtX2R3SW5kZXggPCBtX2R3QnVmZmVyU2l6ZSB8fCBJc0VPRigpKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0gd2hpbGUgKFJlYWROZXh0QmxvY2soKSk7DQotICAgIGJ1Zi5HZXRCeXRlU3RyaW5nTChuYW1lKTsNCi19DQotdm9pZCBDWE1MX1BhcnNlcjo6U2tpcExpdGVyYWxzKEZYX0JTVFIgc3RyKQ0KLXsNCi0gICAgbV9uT2Zmc2V0ID0gbV9uQnVmZmVyT2Zmc2V0ICsgKEZYX0ZJTEVTSVpFKW1fZHdJbmRleDsNCi0gICAgaWYgKElzRU9GKCkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9JTlQzMiBpID0gMCwgaUxlbiA9IHN0ci5HZXRMZW5ndGgoKTsNCi0gICAgZG8gew0KLSAgICAgICAgd2hpbGUgKG1fZHdJbmRleCA8IG1fZHdCdWZmZXJTaXplKSB7DQotICAgICAgICAgICAgaWYgKHN0ci5HZXRBdChpKSAhPSBtX3BCdWZmZXJbbV9kd0luZGV4ICsrXSkgew0KLSAgICAgICAgICAgICAgICBpID0gMDsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBpICsrOw0KLSAgICAgICAgICAgICAgICBpZiAoaSA9PSBpTGVuKSB7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIG1fbk9mZnNldCA9IG1fbkJ1ZmZlck9mZnNldCArIChGWF9GSUxFU0laRSltX2R3SW5kZXg7DQotICAgICAgICBpZiAoaSA9PSBpTGVuKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fZHdJbmRleCA8IG1fZHdCdWZmZXJTaXplIHx8IElzRU9GKCkpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfSB3aGlsZSAoUmVhZE5leHRCbG9jaygpKTsNCi0gICAgd2hpbGUgKCFtX3BEYXRhQWNjLT5Jc0VPRigpKSB7DQotICAgICAgICBSZWFkTmV4dEJsb2NrKCk7DQotICAgICAgICBtX25PZmZzZXQgPSBtX25CdWZmZXJPZmZzZXQgKyAoRlhfRklMRVNJWkUpbV9kd0J1ZmZlclNpemU7DQotICAgIH0NCi0gICAgbV9kd0luZGV4ID0gbV9kd0J1ZmZlclNpemU7DQotfQ0KLUZYX0RXT1JEIENYTUxfUGFyc2VyOjpHZXRDaGFyUmVmKCkNCi17DQotICAgIG1fbk9mZnNldCA9IG1fbkJ1ZmZlck9mZnNldCArIChGWF9GSUxFU0laRSltX2R3SW5kZXg7DQotICAgIGlmIChJc0VPRigpKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBGWF9CWVRFIGNoOw0KLSAgICBGWF9JTlQzMiBpU3RhdGUgPSAwOw0KLSAgICBDRlhfQnl0ZVRleHRCdWYgYnVmKG1fcEFsbG9jYXRvcik7DQotICAgIEZYX0RXT1JEIGNvZGUgPSAwOw0KLSAgICBkbyB7DQotICAgICAgICB3aGlsZSAobV9kd0luZGV4IDwgbV9kd0J1ZmZlclNpemUpIHsNCi0gICAgICAgICAgICBjaCA9IG1fcEJ1ZmZlclttX2R3SW5kZXhdOw0KLSAgICAgICAgICAgIHN3aXRjaCAoaVN0YXRlKSB7DQotICAgICAgICAgICAgICAgIGNhc2UgMDoNCi0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnIycpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2R3SW5kZXggKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgaVN0YXRlID0gMjsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGlTdGF0ZSA9IDE7DQotICAgICAgICAgICAgICAgIGNhc2UgMToNCi0gICAgICAgICAgICAgICAgICAgIG1fZHdJbmRleCArKzsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnOycpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZ0MgcmVmID0gYnVmLkdldEJ5dGVTdHJpbmcoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmID09IEZYX0JTVFJDKCJndCIpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAnPic7DQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZWYgPT0gRlhfQlNUUkMoImx0IikpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9ICc8JzsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlZiA9PSBGWF9CU1RSQygiYW1wIikpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9ICcmJzsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlZiA9PSBGWF9CU1RSQygiYXBvcyIpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAnXCcnOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVmID09IEZYX0JTVFJDKCJxdW90IikpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9ICciJzsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgaVN0YXRlID0gMTA7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBidWYuQXBwZW5kQnl0ZShjaCk7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAyOg0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICd4Jykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZHdJbmRleCArKzsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpU3RhdGUgPSA0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaVN0YXRlID0gMzsNCi0gICAgICAgICAgICAgICAgY2FzZSAzOg0KLSAgICAgICAgICAgICAgICAgICAgbV9kd0luZGV4ICsrOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICc7Jykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlTdGF0ZSA9IDEwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGdfRlhDUlRfWE1MX0lzRGlnaXRhbChjaCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDEwICsgY2ggLSAnMCc7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSA0Og0KLSAgICAgICAgICAgICAgICAgICAgbV9kd0luZGV4ICsrOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICc7Jykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlTdGF0ZSA9IDEwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgRlhfQllURSBuSGV4ID0gZ19GWENSVF9YTUxfQnl0ZVR5cGVzW2NoXSAmIEZYQ1JUTV9YTUxfQ0hBUlRZUEVfSGV4Q2hhcjsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChuSGV4KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5IZXggPT0gRlhDUlRNX1hNTF9DSEFSVFlQRV9IZXhEaWdpdGFsKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAoY29kZSA8PCA0KSArIGNoIC0gJzAnOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobkhleCA9PSBGWENSVE1fWE1MX0NIQVJUWVBFX0hleExvd2VyTGV0dGVyKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAoY29kZSA8PCA0KSArIGNoIC0gODc7DQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IChjb2RlIDw8IDQpICsgY2ggLSA1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGlTdGF0ZSA9PSAxMCkgew0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBtX25PZmZzZXQgPSBtX25CdWZmZXJPZmZzZXQgKyAoRlhfRklMRVNJWkUpbV9kd0luZGV4Ow0KLSAgICAgICAgaWYgKGlTdGF0ZSA9PSAxMCB8fCBtX2R3SW5kZXggPCBtX2R3QnVmZmVyU2l6ZSB8fCBJc0VPRigpKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0gd2hpbGUgKFJlYWROZXh0QmxvY2soKSk7DQotICAgIHJldHVybiBjb2RlOw0KLX0NCi12b2lkIENYTUxfUGFyc2VyOjpHZXRBdHRyVmFsdWUoQ0ZYX1dpZGVTdHJpbmdMICZ2YWx1ZSkNCi17DQotICAgIG1fbk9mZnNldCA9IG1fbkJ1ZmZlck9mZnNldCArIChGWF9GSUxFU0laRSltX2R3SW5kZXg7DQotICAgIGlmIChJc0VPRigpKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ0ZYX1VURjhEZWNvZGVyIGRlY29kZXIobV9wQWxsb2NhdG9yKTsNCi0gICAgRlhfQllURSBtYXJrID0gMCwgY2g7DQotICAgIGRvIHsNCi0gICAgICAgIHdoaWxlIChtX2R3SW5kZXggPCBtX2R3QnVmZmVyU2l6ZSkgew0KLSAgICAgICAgICAgIGNoID0gbV9wQnVmZmVyW21fZHdJbmRleF07DQotICAgICAgICAgICAgaWYgKG1hcmsgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBpZiAoY2ggIT0gJ1wnJyAmJiBjaCAhPSAnIicpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBtYXJrID0gY2g7DQotICAgICAgICAgICAgICAgIG1fZHdJbmRleCArKzsNCi0gICAgICAgICAgICAgICAgY2ggPSAwOw0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9kd0luZGV4ICsrOw0KLSAgICAgICAgICAgIGlmIChjaCA9PSBtYXJrKSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoY2ggPT0gJyYnKSB7DQotICAgICAgICAgICAgICAgIGRlY29kZXIuQXBwZW5kQ2hhcihHZXRDaGFyUmVmKCkpOw0KLSAgICAgICAgICAgICAgICBpZiAoSXNFT0YoKSkgew0KLSAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci5HZXRSZXN1bHQodmFsdWUpOw0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgZGVjb2Rlci5JbnB1dChjaCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9uT2Zmc2V0ID0gbV9uQnVmZmVyT2Zmc2V0ICsgKEZYX0ZJTEVTSVpFKW1fZHdJbmRleDsNCi0gICAgICAgIGlmIChjaCA9PSBtYXJrIHx8IG1fZHdJbmRleCA8IG1fZHdCdWZmZXJTaXplIHx8IElzRU9GKCkpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfSB3aGlsZSAoUmVhZE5leHRCbG9jaygpKTsNCi0gICAgZGVjb2Rlci5HZXRSZXN1bHQodmFsdWUpOw0KLX0NCi12b2lkIENYTUxfUGFyc2VyOjpHZXRUYWdOYW1lKENGWF9CeXRlU3RyaW5nTCAmc3BhY2UsIENGWF9CeXRlU3RyaW5nTCAmbmFtZSwgRlhfQk9PTCAmYkVuZFRhZywgRlhfQk9PTCBiU3RhcnRUYWcpDQotew0KLSAgICBtX25PZmZzZXQgPSBtX25CdWZmZXJPZmZzZXQgKyAoRlhfRklMRVNJWkUpbV9kd0luZGV4Ow0KLSAgICBpZiAoSXNFT0YoKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGJFbmRUYWcgPSBGQUxTRTsNCi0gICAgRlhfQllURSBjaDsNCi0gICAgRlhfSU5UMzIgaVN0YXRlID0gYlN0YXJ0VGFnID8gMSA6IDA7DQotICAgIGRvIHsNCi0gICAgICAgIHdoaWxlIChtX2R3SW5kZXggPCBtX2R3QnVmZmVyU2l6ZSkgew0KLSAgICAgICAgICAgIGNoID0gbV9wQnVmZmVyW21fZHdJbmRleF07DQotICAgICAgICAgICAgc3dpdGNoIChpU3RhdGUpIHsNCi0gICAgICAgICAgICAgICAgY2FzZSAwOg0KLSAgICAgICAgICAgICAgICAgICAgbV9kd0luZGV4ICsrOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoICE9ICc8Jykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaVN0YXRlID0gMTsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDE6DQotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJz8nKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9kd0luZGV4ICsrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNraXBMaXRlcmFscyhGWF9CU1RSQygiPz4iKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgaVN0YXRlID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJyEnKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9kd0luZGV4ICsrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNraXBMaXRlcmFscyhGWF9CU1RSQygiLS0+IikpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlTdGF0ZSA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJy8nKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9kd0luZGV4ICsrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIEdldE5hbWUoc3BhY2UsIG5hbWUpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJFbmRUYWcgPSBUUlVFOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBHZXROYW1lKHNwYWNlLCBuYW1lKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBiRW5kVGFnID0gRkFMU0U7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9uT2Zmc2V0ID0gbV9uQnVmZmVyT2Zmc2V0ICsgKEZYX0ZJTEVTSVpFKW1fZHdJbmRleDsNCi0gICAgICAgIGlmIChtX2R3SW5kZXggPCBtX2R3QnVmZmVyU2l6ZSB8fCBJc0VPRigpKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0gd2hpbGUgKFJlYWROZXh0QmxvY2soKSk7DQotfQ0KLUNYTUxfRWxlbWVudCogQ1hNTF9QYXJzZXI6OlBhcnNlRWxlbWVudChDWE1MX0VsZW1lbnQqIHBQYXJlbnQsIEZYX0JPT0wgYlN0YXJ0VGFnKQ0KLXsNCi0gICAgbV9uT2Zmc2V0ID0gbV9uQnVmZmVyT2Zmc2V0ICsgKEZYX0ZJTEVTSVpFKW1fZHdJbmRleDsNCi0gICAgaWYgKElzRU9GKCkpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nTCB0YWdfbmFtZSwgdGFnX3NwYWNlOw0KLSAgICBGWF9CT09MIGJFbmRUYWc7DQotICAgIEdldFRhZ05hbWUodGFnX3NwYWNlLCB0YWdfbmFtZSwgYkVuZFRhZywgYlN0YXJ0VGFnKTsNCi0gICAgaWYgKHRhZ19uYW1lLklzRW1wdHkoKSB8fCBiRW5kVGFnKSB7DQotICAgICAgICB0YWdfc3BhY2UuRW1wdHkobV9wQWxsb2NhdG9yKTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENYTUxfRWxlbWVudCogcEVsZW1lbnQ7DQotICAgIGlmIChtX3BBbGxvY2F0b3IpIHsNCi0gICAgICAgIHBFbGVtZW50ID0gRlhfTmV3QXRBbGxvY2F0b3IobV9wQWxsb2NhdG9yKUNYTUxfRWxlbWVudChtX3BBbGxvY2F0b3IpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcEVsZW1lbnQgPSBGWF9ORVcgQ1hNTF9FbGVtZW50Ow0KLSAgICB9DQotICAgIGlmIChwRWxlbWVudCkgew0KLSAgICAgICAgcEVsZW1lbnQtPm1fcFBhcmVudCA9IHBQYXJlbnQ7DQotICAgICAgICBwRWxlbWVudC0+U2V0VGFnKHRhZ19zcGFjZSwgdGFnX25hbWUpOw0KLSAgICB9DQotICAgIHRhZ19zcGFjZS5FbXB0eShtX3BBbGxvY2F0b3IpOw0KLSAgICB0YWdfbmFtZS5FbXB0eShtX3BBbGxvY2F0b3IpOw0KLSAgICBpZiAoIXBFbGVtZW50KSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBkbyB7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZ0wgYXR0cl9zcGFjZSwgYXR0cl9uYW1lOw0KLSAgICAgICAgd2hpbGUgKG1fZHdJbmRleCA8IG1fZHdCdWZmZXJTaXplKSB7DQotICAgICAgICAgICAgU2tpcFdoaXRlU3BhY2VzKCk7DQotICAgICAgICAgICAgaWYgKElzRU9GKCkpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmICghZ19GWENSVF9YTUxfSXNOYW1lSW50cm8obV9wQnVmZmVyW21fZHdJbmRleF0pKSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBhdHRyX3NwYWNlLkVtcHR5KG1fcEFsbG9jYXRvcik7DQotICAgICAgICAgICAgYXR0cl9uYW1lLkVtcHR5KG1fcEFsbG9jYXRvcik7DQotICAgICAgICAgICAgR2V0TmFtZShhdHRyX3NwYWNlLCBhdHRyX25hbWUpOw0KLSAgICAgICAgICAgIFNraXBXaGl0ZVNwYWNlcygpOw0KLSAgICAgICAgICAgIGlmIChJc0VPRigpKSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobV9wQnVmZmVyW21fZHdJbmRleF0gIT0gJz0nKSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBtX2R3SW5kZXggKys7DQotICAgICAgICAgICAgU2tpcFdoaXRlU3BhY2VzKCk7DQotICAgICAgICAgICAgaWYgKElzRU9GKCkpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nTCBhdHRyX3ZhbHVlOw0KLSAgICAgICAgICAgIEdldEF0dHJWYWx1ZShhdHRyX3ZhbHVlKTsNCi0gICAgICAgICAgICBwRWxlbWVudC0+bV9BdHRyTWFwLlNldEF0KGF0dHJfc3BhY2UsIGF0dHJfbmFtZSwgYXR0cl92YWx1ZSwgbV9wQWxsb2NhdG9yKTsNCi0gICAgICAgICAgICBhdHRyX3ZhbHVlLkVtcHR5KG1fcEFsbG9jYXRvcik7DQotICAgICAgICB9DQotICAgICAgICBhdHRyX3NwYWNlLkVtcHR5KG1fcEFsbG9jYXRvcik7DQotICAgICAgICBhdHRyX25hbWUuRW1wdHkobV9wQWxsb2NhdG9yKTsNCi0gICAgICAgIG1fbk9mZnNldCA9IG1fbkJ1ZmZlck9mZnNldCArIChGWF9GSUxFU0laRSltX2R3SW5kZXg7DQotICAgICAgICBpZiAobV9kd0luZGV4IDwgbV9kd0J1ZmZlclNpemUgfHwgSXNFT0YoKSkgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICB9IHdoaWxlIChSZWFkTmV4dEJsb2NrKCkpOw0KLSAgICBTa2lwV2hpdGVTcGFjZXMoKTsNCi0gICAgaWYgKElzRU9GKCkpIHsNCi0gICAgICAgIHJldHVybiBwRWxlbWVudDsNCi0gICAgfQ0KLSAgICBGWF9CWVRFIGNoID0gbV9wQnVmZmVyW21fZHdJbmRleCArK107DQotICAgIGlmIChjaCA9PSAnLycpIHsNCi0gICAgICAgIG1fZHdJbmRleCArKzsNCi0gICAgICAgIG1fbk9mZnNldCA9IG1fbkJ1ZmZlck9mZnNldCArIChGWF9GSUxFU0laRSltX2R3SW5kZXg7DQotICAgICAgICByZXR1cm4gcEVsZW1lbnQ7DQotICAgIH0NCi0gICAgaWYgKGNoICE9ICc+Jykgew0KLSAgICAgICAgbV9uT2Zmc2V0ID0gbV9uQnVmZmVyT2Zmc2V0ICsgKEZYX0ZJTEVTSVpFKW1fZHdJbmRleDsNCi0gICAgICAgIGlmIChtX3BBbGxvY2F0b3IpIHsNCi0gICAgICAgICAgICBGWF9EZWxldGVBdEFsbG9jYXRvcihwRWxlbWVudCwgbV9wQWxsb2NhdG9yLCBDWE1MX0VsZW1lbnQpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBkZWxldGUgcEVsZW1lbnQ7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBTa2lwV2hpdGVTcGFjZXMoKTsNCi0gICAgaWYgKElzRU9GKCkpIHsNCi0gICAgICAgIHJldHVybiBwRWxlbWVudDsNCi0gICAgfQ0KLSAgICBDRlhfVVRGOERlY29kZXIgZGVjb2RlcihtX3BBbGxvY2F0b3IpOw0KLSAgICBDRlhfV2lkZVRleHRCdWYgY29udGVudChtX3BBbGxvY2F0b3IpOw0KLSAgICBGWF9CT09MIGJDREFUQSA9IEZBTFNFOw0KLSAgICBGWF9JTlQzMiBpU3RhdGUgPSAwOw0KLSAgICBkbyB7DQotICAgICAgICB3aGlsZSAobV9kd0luZGV4IDwgbV9kd0J1ZmZlclNpemUpIHsNCi0gICAgICAgICAgICBjaCA9IG1fcEJ1ZmZlclttX2R3SW5kZXggKytdOw0KLSAgICAgICAgICAgIHN3aXRjaCAoaVN0YXRlKSB7DQotICAgICAgICAgICAgICAgIGNhc2UgMDoNCi0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnPCcpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpU3RhdGUgPSAxOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnJicpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLkNsZWFyU3RhdHVzKCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci5BcHBlbmRDaGFyKEdldENoYXJSZWYoKSk7DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXIuSW5wdXQoY2gpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMToNCi0gICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnIScpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpU3RhdGUgPSAyOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnPycpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBTa2lwTGl0ZXJhbHMoRlhfQlNUUkMoIj8+IikpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNraXBXaGl0ZVNwYWNlcygpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlTdGF0ZSA9IDA7DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICcvJykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nTCBzcGFjZSwgbmFtZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBHZXROYW1lKHNwYWNlLCBuYW1lKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzcGFjZS5FbXB0eShtX3BBbGxvY2F0b3IpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuRW1wdHkobV9wQWxsb2NhdG9yKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBTa2lwV2hpdGVTcGFjZXMoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2R3SW5kZXggKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgaVN0YXRlID0gMTA7DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPDwgZGVjb2Rlci5HZXRSZXN1bHQoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBDRlhfV2lkZVN0cmluZ0wgZGF0YVN0cjsNCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LkdldFdpZGVTdHJpbmdMKGRhdGFTdHIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYkNEQVRBICYmICFtX2JTYXZlU3BhY2VDaGFycykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU3RyLlRyaW1SaWdodCgoRlhfTFBDV1NUUilMIiBcdFxyXG4iKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJ0Q29udGVudFNlZ21lbnQoYkNEQVRBLCBkYXRhU3RyLCBwRWxlbWVudCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVN0ci5FbXB0eShtX3BBbGxvY2F0b3IpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuQ2xlYXIoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVyLkNsZWFyKCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgYkNEQVRBID0gRkFMU0U7DQotICAgICAgICAgICAgICAgICAgICAgICAgaVN0YXRlID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2R3SW5kZXggLS07DQotICAgICAgICAgICAgICAgICAgICAgICAgQ1hNTF9FbGVtZW50KiBwU3ViRWxlbWVudCA9IFBhcnNlRWxlbWVudChwRWxlbWVudCwgVFJVRSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBTdWJFbGVtZW50ID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBTdWJFbGVtZW50LT5tX3BQYXJlbnQgPSBwRWxlbWVudDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBwRWxlbWVudC0+bV9DaGlsZHJlbi5BZGQoKEZYX0xQVk9JRClDWE1MX0VsZW1lbnQ6OkVsZW1lbnQpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBFbGVtZW50LT5tX0NoaWxkcmVuLkFkZChwU3ViRWxlbWVudCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgU2tpcFdoaXRlU3BhY2VzKCk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAyOg0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICdbJykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNraXBMaXRlcmFscyhGWF9CU1RSQygiXV0+IikpOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnLScpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2R3SW5kZXggKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgU2tpcExpdGVyYWxzKEZYX0JTVFJDKCItLT4iKSk7DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNraXBMaXRlcmFscyhGWF9CU1RSQygiPiIpKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGRlY29kZXIuQ2xlYXIoKTsNCi0gICAgICAgICAgICAgICAgICAgIFNraXBXaGl0ZVNwYWNlcygpOw0KLSAgICAgICAgICAgICAgICAgICAgaVN0YXRlID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoaVN0YXRlID09IDEwKSB7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIG1fbk9mZnNldCA9IG1fbkJ1ZmZlck9mZnNldCArIChGWF9GSUxFU0laRSltX2R3SW5kZXg7DQotICAgICAgICBpZiAoaVN0YXRlID09IDEwIHx8IG1fZHdJbmRleCA8IG1fZHdCdWZmZXJTaXplIHx8IElzRU9GKCkpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfSB3aGlsZSAoUmVhZE5leHRCbG9jaygpKTsNCi0gICAgY29udGVudCA8PCBkZWNvZGVyLkdldFJlc3VsdCgpOw0KLSAgICBDRlhfV2lkZVN0cmluZ0wgZGF0YVN0cjsNCi0gICAgY29udGVudC5HZXRXaWRlU3RyaW5nTChkYXRhU3RyKTsNCi0gICAgaWYgKCFtX2JTYXZlU3BhY2VDaGFycykgew0KLSAgICAgICAgZGF0YVN0ci5UcmltUmlnaHQoKEZYX0xQQ1dTVFIpTCIgXHRcclxuIik7DQotICAgIH0NCi0gICAgSW5zZXJ0Q29udGVudFNlZ21lbnQoYkNEQVRBLCBkYXRhU3RyLCBwRWxlbWVudCk7DQotICAgIGRhdGFTdHIuRW1wdHkobV9wQWxsb2NhdG9yKTsNCi0gICAgY29udGVudC5DbGVhcigpOw0KLSAgICBkZWNvZGVyLkNsZWFyKCk7DQotICAgIGJDREFUQSA9IEZBTFNFOw0KLSAgICByZXR1cm4gcEVsZW1lbnQ7DQotfQ0KLXZvaWQgQ1hNTF9QYXJzZXI6Okluc2VydENvbnRlbnRTZWdtZW50KEZYX0JPT0wgYkNEQVRBLCBGWF9XU1RSIGNvbnRlbnQsIENYTUxfRWxlbWVudCogcEVsZW1lbnQpDQotew0KLSAgICBpZiAoY29udGVudC5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDWE1MX0NvbnRlbnQqIHBDb250ZW50Ow0KLSAgICBpZiAobV9wQWxsb2NhdG9yKSB7DQotICAgICAgICBwQ29udGVudCA9IEZYX05ld0F0QWxsb2NhdG9yKG1fcEFsbG9jYXRvcilDWE1MX0NvbnRlbnQ7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBwQ29udGVudCA9IEZYX05FVyBDWE1MX0NvbnRlbnQ7DQotICAgIH0NCi0gICAgaWYgKCFwQ29udGVudCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHBDb250ZW50LT5TZXQoYkNEQVRBLCBjb250ZW50LCBtX3BBbGxvY2F0b3IpOw0KLSAgICBwRWxlbWVudC0+bV9DaGlsZHJlbi5BZGQoKEZYX0xQVk9JRClDWE1MX0VsZW1lbnQ6OkNvbnRlbnQpOw0KLSAgICBwRWxlbWVudC0+bV9DaGlsZHJlbi5BZGQocENvbnRlbnQpOw0KLX0NCi1zdGF0aWMgQ1hNTF9FbGVtZW50KiBYTUxfQ29udGludWVQYXJzZShDWE1MX1BhcnNlciAmcGFyc2VyLCBGWF9CT09MIGJTYXZlU3BhY2VDaGFycywgRlhfRklMRVNJWkUqIHBQYXJzZWRTaXplKQ0KLXsNCi0gICAgcGFyc2VyLm1fYlNhdmVTcGFjZUNoYXJzID0gYlNhdmVTcGFjZUNoYXJzOw0KLSAgICBDWE1MX0VsZW1lbnQqIHBFbGVtZW50ID0gcGFyc2VyLlBhcnNlRWxlbWVudChOVUxMLCBGQUxTRSk7DQotICAgIGlmIChwUGFyc2VkU2l6ZSkgew0KLSAgICAgICAgKnBQYXJzZWRTaXplID0gcGFyc2VyLm1fbk9mZnNldDsNCi0gICAgfQ0KLSAgICByZXR1cm4gcEVsZW1lbnQ7DQotfQ0KLUNYTUxfRWxlbWVudCogQ1hNTF9FbGVtZW50OjpQYXJzZShjb25zdCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc2l6ZSwgRlhfQk9PTCBiU2F2ZVNwYWNlQ2hhcnMsIEZYX0ZJTEVTSVpFKiBwUGFyc2VkU2l6ZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikNCi17DQotICAgIENYTUxfUGFyc2VyIHBhcnNlcihwQWxsb2NhdG9yKTsNCi0gICAgaWYgKCFwYXJzZXIuSW5pdCgoRlhfTFBCWVRFKXBCdWZmZXIsIHNpemUpKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gWE1MX0NvbnRpbnVlUGFyc2UocGFyc2VyLCBiU2F2ZVNwYWNlQ2hhcnMsIHBQYXJzZWRTaXplKTsNCi19DQotQ1hNTF9FbGVtZW50KiBDWE1MX0VsZW1lbnQ6OlBhcnNlKElGWF9GaWxlUmVhZCAqcEZpbGUsIEZYX0JPT0wgYlNhdmVTcGFjZUNoYXJzLCBGWF9GSUxFU0laRSogcFBhcnNlZFNpemUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpDQotew0KLSAgICBDWE1MX1BhcnNlciBwYXJzZXIocEFsbG9jYXRvcik7DQotICAgIGlmICghcGFyc2VyLkluaXQocEZpbGUpKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gWE1MX0NvbnRpbnVlUGFyc2UocGFyc2VyLCBiU2F2ZVNwYWNlQ2hhcnMsIHBQYXJzZWRTaXplKTsNCi19DQotQ1hNTF9FbGVtZW50KiBDWE1MX0VsZW1lbnQ6OlBhcnNlKElGWF9CdWZmZXJSZWFkICpwQnVmZmVyLCBGWF9CT09MIGJTYXZlU3BhY2VDaGFycywgRlhfRklMRVNJWkUqIHBQYXJzZWRTaXplLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQ0KLXsNCi0gICAgQ1hNTF9QYXJzZXIgcGFyc2VyKHBBbGxvY2F0b3IpOw0KLSAgICBpZiAoIXBhcnNlci5Jbml0KHBCdWZmZXIpKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gWE1MX0NvbnRpbnVlUGFyc2UocGFyc2VyLCBiU2F2ZVNwYWNlQ2hhcnMsIHBQYXJzZWRTaXplKTsNCi19DQotQ1hNTF9FbGVtZW50OjpDWE1MX0VsZW1lbnQoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikNCi0gICAgOiBtX3BQYXJlbnQoTlVMTCkNCi0gICAgLCBtX1FTcGFjZU5hbWUoKQ0KLSAgICAsIG1fVGFnTmFtZSgpDQotICAgICwgbV9BdHRyTWFwKCkNCi0gICAgLCBtX0NoaWxkcmVuKHBBbGxvY2F0b3IpDQotew0KLX0NCi1DWE1MX0VsZW1lbnQ6OkNYTUxfRWxlbWVudChGWF9CU1RSIHFTcGFjZSwgRlhfQlNUUiB0YWdOYW1lLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQ0KLSAgICA6IG1fcFBhcmVudChOVUxMKQ0KLSAgICAsIG1fUVNwYWNlTmFtZSgpDQotICAgICwgbV9UYWdOYW1lKCkNCi0gICAgLCBtX0F0dHJNYXAoKQ0KLSAgICAsIG1fQ2hpbGRyZW4ocEFsbG9jYXRvcikNCi17DQotICAgIG1fUVNwYWNlTmFtZS5TZXQocVNwYWNlLCBwQWxsb2NhdG9yKTsNCi0gICAgbV9UYWdOYW1lLlNldCh0YWdOYW1lLCBwQWxsb2NhdG9yKTsNCi19DQotQ1hNTF9FbGVtZW50OjpDWE1MX0VsZW1lbnQoRlhfQlNUUiBxVGFnTmFtZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikNCi0gICAgOiBtX3BQYXJlbnQoTlVMTCkNCi0gICAgLCBtX1FTcGFjZU5hbWUoKQ0KLSAgICAsIG1fVGFnTmFtZSgpDQotICAgICwgbV9BdHRyTWFwKCkNCi0gICAgLCBtX0NoaWxkcmVuKHBBbGxvY2F0b3IpDQotew0KLSAgICBTZXRUYWcocVRhZ05hbWUpOw0KLX0NCi1DWE1MX0VsZW1lbnQ6On5DWE1MX0VsZW1lbnQoKQ0KLXsNCi0gICAgRW1wdHkoKTsNCi19DQotdm9pZCBDWE1MX0VsZW1lbnQ6OkVtcHR5KCkNCi17DQotICAgIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBtX0NoaWxkcmVuLm1fcEFsbG9jYXRvcjsNCi0gICAgbV9RU3BhY2VOYW1lLkVtcHR5KHBBbGxvY2F0b3IpOw0KLSAgICBtX1RhZ05hbWUuRW1wdHkocEFsbG9jYXRvcik7DQotICAgIG1fQXR0ck1hcC5SZW1vdmVBbGwocEFsbG9jYXRvcik7DQotICAgIFJlbW92ZUNoaWxkcmVuKCk7DQotfQ0KLXZvaWQgQ1hNTF9FbGVtZW50OjpSZW1vdmVDaGlsZHJlbigpDQotew0KLSAgICBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gbV9DaGlsZHJlbi5tX3BBbGxvY2F0b3I7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9DaGlsZHJlbi5HZXRTaXplKCk7IGkgKz0gMikgew0KLSAgICAgICAgQ2hpbGRUeXBlIHR5cGUgPSAoQ2hpbGRUeXBlKShGWF9VSU5UUFRSKW1fQ2hpbGRyZW4uR2V0QXQoaSk7DQotICAgICAgICBpZiAodHlwZSA9PSBDb250ZW50KSB7DQotICAgICAgICAgICAgQ1hNTF9Db250ZW50KiBjb250ZW50ID0gKENYTUxfQ29udGVudCopbV9DaGlsZHJlbi5HZXRBdChpICsgMSk7DQotICAgICAgICAgICAgaWYgKHBBbGxvY2F0b3IpIHsNCi0gICAgICAgICAgICAgICAgRlhfRGVsZXRlQXRBbGxvY2F0b3IoY29udGVudCwgcEFsbG9jYXRvciwgQ1hNTF9Db250ZW50KTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBkZWxldGUgY29udGVudDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gRWxlbWVudCkgew0KLSAgICAgICAgICAgIENYTUxfRWxlbWVudCogY2hpbGQgPSAoQ1hNTF9FbGVtZW50KiltX0NoaWxkcmVuLkdldEF0KGkgKyAxKTsNCi0gICAgICAgICAgICBjaGlsZC0+UmVtb3ZlQ2hpbGRyZW4oKTsNCi0gICAgICAgICAgICBpZiAocEFsbG9jYXRvcikgew0KLSAgICAgICAgICAgICAgICBGWF9EZWxldGVBdEFsbG9jYXRvcihjaGlsZCwgcEFsbG9jYXRvciwgQ1hNTF9FbGVtZW50KTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBkZWxldGUgY2hpbGQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fQ2hpbGRyZW4uUmVtb3ZlQWxsKCk7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENYTUxfRWxlbWVudDo6R2V0VGFnTmFtZShGWF9CT09MIGJRdWFsaWZpZWQpIGNvbnN0DQotew0KLSAgICBpZiAoIWJRdWFsaWZpZWQgfHwgbV9RU3BhY2VOYW1lLklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuIG1fVGFnTmFtZTsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVN0cmluZyBic1RhZyA9IG1fUVNwYWNlTmFtZTsNCi0gICAgYnNUYWcgKz0gIjoiOw0KLSAgICBic1RhZyArPSBtX1RhZ05hbWU7DQotICAgIHJldHVybiBic1RhZzsNCi19DQotdm9pZCBDWE1MX0VsZW1lbnQ6OkdldFRhZ05hbWUoQ0ZYX0J5dGVTdHJpbmdMICZ0YWdOYW1lLCBGWF9CT09MIGJRdWFsaWZpZWQpIGNvbnN0DQotew0KLSAgICBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gbV9DaGlsZHJlbi5tX3BBbGxvY2F0b3I7DQotICAgIGlmICghYlF1YWxpZmllZCB8fCBtX1FTcGFjZU5hbWUuSXNFbXB0eSgpKSB7DQotICAgICAgICB0YWdOYW1lLlNldChtX1RhZ05hbWUsIHBBbGxvY2F0b3IpOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX0xQU1RSIHN0ciA9IHRhZ05hbWUuQWxsb2NCdWZmZXIobV9RU3BhY2VOYW1lLkdldExlbmd0aCgpICsgbV9UYWdOYW1lLkdldExlbmd0aCgpICsgMiwgcEFsbG9jYXRvcik7DQotICAgIGlmICghc3RyKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhTWVNfbWVtY3B5MzIoc3RyLCBtX1FTcGFjZU5hbWUuR2V0Q1N0cigpLCBtX1FTcGFjZU5hbWUuR2V0TGVuZ3RoKCkpOw0KLSAgICBzdHIgKz0gbV9RU3BhY2VOYW1lLkdldExlbmd0aCgpOw0KLSAgICAqc3RyID0gJzonOw0KLSAgICBzdHIgKys7DQotICAgIEZYU1lTX21lbWNweTMyKHN0ciwgbV9UYWdOYW1lLkdldENTdHIoKSwgbV9UYWdOYW1lLkdldExlbmd0aCgpKTsNCi0gICAgc3RyICs9IG1fVGFnTmFtZS5HZXRMZW5ndGgoKTsNCi0gICAgKnN0ciA9ICdcMCc7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENYTUxfRWxlbWVudDo6R2V0TmFtZXNwYWNlKEZYX0JPT0wgYlF1YWxpZmllZCkgY29uc3QNCi17DQotICAgIGlmIChiUXVhbGlmaWVkKSB7DQotICAgICAgICByZXR1cm4gbV9RU3BhY2VOYW1lOw0KLSAgICB9DQotICAgIHJldHVybiBHZXROYW1lc3BhY2VVUkkobV9RU3BhY2VOYW1lKTsNCi19DQotdm9pZCBDWE1MX0VsZW1lbnQ6OkdldE5hbWVzcGFjZShDRlhfQnl0ZVN0cmluZ0wgJm5hbWVTcGFjZSwgRlhfQk9PTCBiUXVhbGlmaWVkKSBjb25zdA0KLXsNCi0gICAgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IG1fQ2hpbGRyZW4ubV9wQWxsb2NhdG9yOw0KLSAgICBpZiAoYlF1YWxpZmllZCkgew0KLSAgICAgICAgbmFtZVNwYWNlLlNldChtX1FTcGFjZU5hbWUsIHBBbGxvY2F0b3IpOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEdldE5hbWVzcGFjZVVSSShtX1FTcGFjZU5hbWUsIG5hbWVTcGFjZSk7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENYTUxfRWxlbWVudDo6R2V0TmFtZXNwYWNlVVJJKEZYX0JTVFIgcU5hbWUpIGNvbnN0DQotew0KLSAgICBjb25zdCBDRlhfV2lkZVN0cmluZ0wqIHB3c1NwYWNlOw0KLSAgICBjb25zdCBDWE1MX0VsZW1lbnQgKnBFbGVtZW50ID0gdGhpczsNCi0gICAgZG8gew0KLSAgICAgICAgaWYgKHFOYW1lLklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgIHB3c1NwYWNlID0gcEVsZW1lbnQtPm1fQXR0ck1hcC5Mb29rdXAoRlhfQlNUUkMoIiIpLCBGWF9CU1RSQygieG1sbnMiKSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHB3c1NwYWNlID0gcEVsZW1lbnQtPm1fQXR0ck1hcC5Mb29rdXAoRlhfQlNUUkMoInhtbG5zIiksIHFOYW1lKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwd3NTcGFjZSkgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcEVsZW1lbnQgPSBwRWxlbWVudC0+R2V0UGFyZW50KCk7DQotICAgIH0gd2hpbGUocEVsZW1lbnQpOw0KLSAgICByZXR1cm4gcHdzU3BhY2UgPyBGWF9VVEY4RW5jb2RlKCpwd3NTcGFjZSkgOiBDRlhfQnl0ZVN0cmluZygpOw0KLX0NCi12b2lkIENYTUxfRWxlbWVudDo6R2V0TmFtZXNwYWNlVVJJKEZYX0JTVFIgcU5hbWUsIENGWF9CeXRlU3RyaW5nTCAmdXJpKSBjb25zdA0KLXsNCi0gICAgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IG1fQ2hpbGRyZW4ubV9wQWxsb2NhdG9yOw0KLSAgICBjb25zdCBDRlhfV2lkZVN0cmluZ0wqIHB3c1NwYWNlOw0KLSAgICBjb25zdCBDWE1MX0VsZW1lbnQgKnBFbGVtZW50ID0gdGhpczsNCi0gICAgZG8gew0KLSAgICAgICAgaWYgKHFOYW1lLklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgIHB3c1NwYWNlID0gcEVsZW1lbnQtPm1fQXR0ck1hcC5Mb29rdXAoRlhfQlNUUkMoIiIpLCBGWF9CU1RSQygieG1sbnMiKSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHB3c1NwYWNlID0gcEVsZW1lbnQtPm1fQXR0ck1hcC5Mb29rdXAoRlhfQlNUUkMoInhtbG5zIiksIHFOYW1lKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwd3NTcGFjZSkgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcEVsZW1lbnQgPSBwRWxlbWVudC0+R2V0UGFyZW50KCk7DQotICAgIH0gd2hpbGUocEVsZW1lbnQpOw0KLSAgICBpZiAocHdzU3BhY2UpIHsNCi0gICAgICAgIEZYX1VURjhFbmNvZGUocHdzU3BhY2UtPkdldFB0cigpLCBwd3NTcGFjZS0+R2V0TGVuZ3RoKCksIHVyaSwgcEFsbG9jYXRvcik7DQotICAgIH0NCi19DQotdm9pZCBDWE1MX0VsZW1lbnQ6OkdldEF0dHJCeUluZGV4KGludCBpbmRleCwgQ0ZYX0J5dGVTdHJpbmcmIHNwYWNlLCBDRlhfQnl0ZVN0cmluZyYgbmFtZSwgQ0ZYX1dpZGVTdHJpbmcmIHZhbHVlKSBjb25zdA0KLXsNCi0gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtX0F0dHJNYXAuR2V0U2l6ZSgpKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ1hNTF9BdHRySXRlbSYgaXRlbSA9IG1fQXR0ck1hcC5HZXRBdChpbmRleCk7DQotICAgIHNwYWNlID0gaXRlbS5tX1FTcGFjZU5hbWU7DQotICAgIG5hbWUgPSBpdGVtLm1fQXR0ck5hbWU7DQotICAgIHZhbHVlID0gaXRlbS5tX1ZhbHVlOw0KLX0NCi12b2lkIENYTUxfRWxlbWVudDo6R2V0QXR0ckJ5SW5kZXgoaW50IGluZGV4LCBDRlhfQnl0ZVN0cmluZ0wgJnNwYWNlLCBDRlhfQnl0ZVN0cmluZ0wgJm5hbWUsIENGWF9XaWRlU3RyaW5nTCAmdmFsdWUpIGNvbnN0DQotew0KLSAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1fQXR0ck1hcC5HZXRTaXplKCkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gbV9DaGlsZHJlbi5tX3BBbGxvY2F0b3I7DQotICAgIENYTUxfQXR0ckl0ZW0mIGl0ZW0gPSBtX0F0dHJNYXAuR2V0QXQoaW5kZXgpOw0KLSAgICBzcGFjZS5TZXQoaXRlbS5tX1FTcGFjZU5hbWUsIHBBbGxvY2F0b3IpOw0KLSAgICBuYW1lLlNldChpdGVtLm1fQXR0ck5hbWUsIHBBbGxvY2F0b3IpOw0KLSAgICB2YWx1ZS5TZXQoaXRlbS5tX1ZhbHVlLCBwQWxsb2NhdG9yKTsNCi19DQotRlhfQk9PTCBDWE1MX0VsZW1lbnQ6Okhhc0F0dHIoRlhfQlNUUiBuYW1lKSBjb25zdA0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmdDIGJzU3BhY2UsIGJzTmFtZTsNCi0gICAgRlhfWE1MX1NwbGl0UXVhbGlmaWVkTmFtZShuYW1lLCBic1NwYWNlLCBic05hbWUpOw0KLSAgICByZXR1cm4gbV9BdHRyTWFwLkxvb2t1cChic1NwYWNlLCBic05hbWUpICE9IE5VTEw7DQotfQ0KLUZYX0JPT0wgQ1hNTF9FbGVtZW50OjpHZXRBdHRyVmFsdWUoRlhfQlNUUiBuYW1lLCBDRlhfV2lkZVN0cmluZyYgYXR0cmlidXRlKSBjb25zdA0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmdDIGJzU3BhY2UsIGJzTmFtZTsNCi0gICAgRlhfWE1MX1NwbGl0UXVhbGlmaWVkTmFtZShuYW1lLCBic1NwYWNlLCBic05hbWUpOw0KLSAgICBjb25zdCBDRlhfV2lkZVN0cmluZ0wqIHBWYWx1ZSA9IG1fQXR0ck1hcC5Mb29rdXAoYnNTcGFjZSwgYnNOYW1lKTsNCi0gICAgaWYgKHBWYWx1ZSkgew0KLSAgICAgICAgYXR0cmlidXRlID0gQ0ZYX1dpZGVTdHJpbmcocFZhbHVlLT5HZXRQdHIoKSwgcFZhbHVlLT5HZXRMZW5ndGgoKSk7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLWNvbnN0IENGWF9XaWRlU3RyaW5nTCogQ1hNTF9FbGVtZW50OjpHZXRBdHRyVmFsdWVQdHIoRlhfQlNUUiBuYW1lKSBjb25zdA0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmdDIGJzU3BhY2UsIGJzTmFtZTsNCi0gICAgRlhfWE1MX1NwbGl0UXVhbGlmaWVkTmFtZShuYW1lLCBic1NwYWNlLCBic05hbWUpOw0KLSAgICByZXR1cm4gbV9BdHRyTWFwLkxvb2t1cChic1NwYWNlLCBic05hbWUpOw0KLX0NCi1GWF9CT09MIENYTUxfRWxlbWVudDo6R2V0QXR0clZhbHVlKEZYX0JTVFIgc3BhY2UsIEZYX0JTVFIgbmFtZSwgQ0ZYX1dpZGVTdHJpbmcmIGF0dHJpYnV0ZSkgY29uc3QNCi17DQotICAgIGNvbnN0IENGWF9XaWRlU3RyaW5nTCogcFZhbHVlID0gbV9BdHRyTWFwLkxvb2t1cChzcGFjZSwgbmFtZSk7DQotICAgIGlmIChwVmFsdWUpIHsNCi0gICAgICAgIGF0dHJpYnV0ZSA9IENGWF9XaWRlU3RyaW5nKHBWYWx1ZS0+R2V0UHRyKCksIHBWYWx1ZS0+R2V0TGVuZ3RoKCkpOw0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1jb25zdCBDRlhfV2lkZVN0cmluZ0wqIENYTUxfRWxlbWVudDo6R2V0QXR0clZhbHVlUHRyKEZYX0JTVFIgc3BhY2UsIEZYX0JTVFIgbmFtZSkgY29uc3QNCi17DQotICAgIHJldHVybiBtX0F0dHJNYXAuTG9va3VwKHNwYWNlLCBuYW1lKTsNCi19DQotRlhfQk9PTCBDWE1MX0VsZW1lbnQ6OkdldEF0dHJJbnRlZ2VyKEZYX0JTVFIgbmFtZSwgaW50JiBhdHRyaWJ1dGUpIGNvbnN0DQotew0KLSAgICBDRlhfQnl0ZVN0cmluZ0MgYnNTcGFjZSwgYnNOYW1lOw0KLSAgICBGWF9YTUxfU3BsaXRRdWFsaWZpZWROYW1lKG5hbWUsIGJzU3BhY2UsIGJzTmFtZSk7DQotICAgIGNvbnN0IENGWF9XaWRlU3RyaW5nTCogcHdzVmFsdWUgPSBtX0F0dHJNYXAuTG9va3VwKGJzU3BhY2UsIGJzTmFtZSk7DQotICAgIGlmIChwd3NWYWx1ZSkgew0KLSAgICAgICAgYXR0cmlidXRlID0gcHdzVmFsdWUtPkdldEludGVnZXIoKTsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotRlhfQk9PTAlDWE1MX0VsZW1lbnQ6OkdldEF0dHJJbnRlZ2VyKEZYX0JTVFIgc3BhY2UsIEZYX0JTVFIgbmFtZSwgaW50JiBhdHRyaWJ1dGUpIGNvbnN0DQotew0KLSAgICBjb25zdCBDRlhfV2lkZVN0cmluZ0wqIHB3c1ZhbHVlID0gbV9BdHRyTWFwLkxvb2t1cChzcGFjZSwgbmFtZSk7DQotICAgIGlmIChwd3NWYWx1ZSkgew0KLSAgICAgICAgYXR0cmlidXRlID0gcHdzVmFsdWUtPkdldEludGVnZXIoKTsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotRlhfQk9PTCBDWE1MX0VsZW1lbnQ6OkdldEF0dHJGbG9hdChGWF9CU1RSIG5hbWUsIEZYX0ZMT0FUJiBhdHRyaWJ1dGUpIGNvbnN0DQotew0KLSAgICBDRlhfQnl0ZVN0cmluZ0MgYnNTcGFjZSwgYnNOYW1lOw0KLSAgICBGWF9YTUxfU3BsaXRRdWFsaWZpZWROYW1lKG5hbWUsIGJzU3BhY2UsIGJzTmFtZSk7DQotICAgIHJldHVybiBHZXRBdHRyRmxvYXQoYnNTcGFjZSwgYnNOYW1lLCBhdHRyaWJ1dGUpOw0KLX0NCi1GWF9CT09MIENYTUxfRWxlbWVudDo6R2V0QXR0ckZsb2F0KEZYX0JTVFIgc3BhY2UsIEZYX0JTVFIgbmFtZSwgRlhfRkxPQVQmIGF0dHJpYnV0ZSkgY29uc3QNCi17DQotICAgIENGWF9XaWRlU3RyaW5nIHZhbHVlOw0KLSAgICBjb25zdCBDRlhfV2lkZVN0cmluZ0wqIHBWYWx1ZSA9IG1fQXR0ck1hcC5Mb29rdXAoc3BhY2UsIG5hbWUpOw0KLSAgICBpZiAocFZhbHVlKSB7DQotICAgICAgICBhdHRyaWJ1dGUgPSBwVmFsdWUtPkdldEZsb2F0KCk7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUZYX0RXT1JEIENYTUxfRWxlbWVudDo6Q291bnRDaGlsZHJlbigpIGNvbnN0DQotew0KLSAgICByZXR1cm4gbV9DaGlsZHJlbi5HZXRTaXplKCkgLyAyOw0KLX0NCi1DWE1MX0VsZW1lbnQ6OkNoaWxkVHlwZSBDWE1MX0VsZW1lbnQ6OkdldENoaWxkVHlwZShGWF9EV09SRCBpbmRleCkgY29uc3QNCi17DQotICAgIGluZGV4IDw8PSAxOw0KLSAgICBpZiAoaW5kZXggPj0gKEZYX0RXT1JEKW1fQ2hpbGRyZW4uR2V0U2l6ZSgpKSB7DQotICAgICAgICByZXR1cm4gSW52YWxpZDsNCi0gICAgfQ0KLSAgICByZXR1cm4gKENoaWxkVHlwZSkoRlhfVUlOVFBUUiltX0NoaWxkcmVuLkdldEF0KGluZGV4KTsNCi19DQotQ0ZYX1dpZGVTdHJpbmcgQ1hNTF9FbGVtZW50OjpHZXRDb250ZW50KEZYX0RXT1JEIGluZGV4KSBjb25zdA0KLXsNCi0gICAgaW5kZXggPDw9IDE7DQotICAgIGlmIChpbmRleCA+PSAoRlhfRFdPUkQpbV9DaGlsZHJlbi5HZXRTaXplKCkgfHwNCi0gICAgICAgICAgICAoQ2hpbGRUeXBlKShGWF9VSU5UUFRSKW1fQ2hpbGRyZW4uR2V0QXQoaW5kZXgpICE9IENvbnRlbnQpIHsNCi0gICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZygpOw0KLSAgICB9DQotICAgIENYTUxfQ29udGVudCogcENvbnRlbnQgPSAoQ1hNTF9Db250ZW50KiltX0NoaWxkcmVuLkdldEF0KGluZGV4ICsgMSk7DQotICAgIGlmIChwQ29udGVudCkgew0KLSAgICAgICAgcmV0dXJuIHBDb250ZW50LT5tX0NvbnRlbnQ7DQotICAgIH0NCi0gICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7DQotfQ0KLWNvbnN0IENGWF9XaWRlU3RyaW5nTCogQ1hNTF9FbGVtZW50OjpHZXRDb250ZW50UHRyKEZYX0RXT1JEIGluZGV4KSBjb25zdA0KLXsNCi0gICAgaW5kZXggPDw9IDE7DQotICAgIGlmIChpbmRleCA+PSAoRlhfRFdPUkQpbV9DaGlsZHJlbi5HZXRTaXplKCkgfHwNCi0gICAgICAgICAgICAoQ2hpbGRUeXBlKShGWF9VSU5UUFRSKW1fQ2hpbGRyZW4uR2V0QXQoaW5kZXgpICE9IENvbnRlbnQpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENYTUxfQ29udGVudCogcENvbnRlbnQgPSAoQ1hNTF9Db250ZW50KiltX0NoaWxkcmVuLkdldEF0KGluZGV4ICsgMSk7DQotICAgIGlmIChwQ29udGVudCkgew0KLSAgICAgICAgcmV0dXJuICZwQ29udGVudC0+bV9Db250ZW50Ow0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1DWE1MX0VsZW1lbnQqIENYTUxfRWxlbWVudDo6R2V0RWxlbWVudChGWF9EV09SRCBpbmRleCkgY29uc3QNCi17DQotICAgIGluZGV4IDw8PSAxOw0KLSAgICBpZiAoaW5kZXggPj0gKEZYX0RXT1JEKW1fQ2hpbGRyZW4uR2V0U2l6ZSgpIHx8DQotICAgICAgICAgICAgKENoaWxkVHlwZSkoRlhfVUlOVFBUUiltX0NoaWxkcmVuLkdldEF0KGluZGV4KSAhPSBFbGVtZW50KSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gKENYTUxfRWxlbWVudCopbV9DaGlsZHJlbi5HZXRBdChpbmRleCArIDEpOw0KLX0NCi1GWF9EV09SRCBDWE1MX0VsZW1lbnQ6OkNvdW50RWxlbWVudHMoRlhfQlNUUiBzcGFjZSwgRlhfQlNUUiB0YWcpIGNvbnN0DQotew0KLSAgICBpbnQgY291bnQgPSAwOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fQ2hpbGRyZW4uR2V0U2l6ZSgpOyBpICs9IDIpIHsNCi0gICAgICAgIENoaWxkVHlwZSB0eXBlID0gKENoaWxkVHlwZSkoRlhfVUlOVFBUUiltX0NoaWxkcmVuLkdldEF0KGkpOw0KLSAgICAgICAgaWYgKHR5cGUgIT0gRWxlbWVudCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1hNTF9FbGVtZW50KiBwS2lkID0gKENYTUxfRWxlbWVudCopbV9DaGlsZHJlbi5HZXRBdChpICsgMSk7DQotICAgICAgICBpZiAoKHNwYWNlLklzRW1wdHkoKSB8fCBwS2lkLT5tX1FTcGFjZU5hbWUgPT0gc3BhY2UpICYmIHBLaWQtPm1fVGFnTmFtZSA9PSB0YWcpIHsNCi0gICAgICAgICAgICBjb3VudCArKzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gY291bnQ7DQotfQ0KLUNYTUxfRWxlbWVudCogQ1hNTF9FbGVtZW50OjpHZXRFbGVtZW50KEZYX0JTVFIgc3BhY2UsIEZYX0JTVFIgdGFnLCBpbnQgaW5kZXgpIGNvbnN0DQotew0KLSAgICBpZiAoaW5kZXggPCAwKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fQ2hpbGRyZW4uR2V0U2l6ZSgpOyBpICs9IDIpIHsNCi0gICAgICAgIENoaWxkVHlwZSB0eXBlID0gKENoaWxkVHlwZSkoRlhfVUlOVFBUUiltX0NoaWxkcmVuLkdldEF0KGkpOw0KLSAgICAgICAgaWYgKHR5cGUgIT0gRWxlbWVudCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ1hNTF9FbGVtZW50KiBwS2lkID0gKENYTUxfRWxlbWVudCopbV9DaGlsZHJlbi5HZXRBdChpICsgMSk7DQotICAgICAgICBpZiAoKCFzcGFjZS5Jc0VtcHR5KCkgJiYgcEtpZC0+bV9RU3BhY2VOYW1lICE9IHNwYWNlKSB8fCBwS2lkLT5tX1RhZ05hbWUgIT0gdGFnKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoaW5kZXggLS0gPT0gMCkgew0KLSAgICAgICAgICAgIHJldHVybiBwS2lkOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1GWF9EV09SRCBDWE1MX0VsZW1lbnQ6OkZpbmRFbGVtZW50KENYTUxfRWxlbWVudCAqcENoaWxkKSBjb25zdA0KLXsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX0NoaWxkcmVuLkdldFNpemUoKTsgaSArPSAyKSB7DQotICAgICAgICBpZiAoKENoaWxkVHlwZSkoRlhfVUlOVFBUUiltX0NoaWxkcmVuLkdldEF0KGkpID09IEVsZW1lbnQgJiYNCi0gICAgICAgICAgICAgICAgKENYTUxfRWxlbWVudCopbV9DaGlsZHJlbi5HZXRBdChpICsgMSkgPT0gcENoaWxkKSB7DQotICAgICAgICAgICAgcmV0dXJuIChGWF9EV09SRCkoaSA+PiAxKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gKEZYX0RXT1JEKSAtIDE7DQotfQ0KLWNvbnN0IENGWF9XaWRlU3RyaW5nTCogQ1hNTF9BdHRyTWFwOjpMb29rdXAoRlhfQlNUUiBzcGFjZSwgRlhfQlNUUiBuYW1lKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fcE1hcCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fcE1hcC0+R2V0U2l6ZSgpOyBpICsrKSB7DQotICAgICAgICBDWE1MX0F0dHJJdGVtJiBpdGVtID0gR2V0QXQoaSk7DQotICAgICAgICBpZiAoKHNwYWNlLklzRW1wdHkoKSB8fCBpdGVtLm1fUVNwYWNlTmFtZSA9PSBzcGFjZSkgJiYgaXRlbS5tX0F0dHJOYW1lID09IG5hbWUpIHsNCi0gICAgICAgICAgICByZXR1cm4gJml0ZW0ubV9WYWx1ZTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotdm9pZCBDWE1MX0F0dHJNYXA6OlNldEF0KEZYX0JTVFIgc3BhY2UsIEZYX0JTVFIgbmFtZSwgRlhfV1NUUiB2YWx1ZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikNCi17DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgR2V0U2l6ZSgpOyBpICsrKSB7DQotICAgICAgICBDWE1MX0F0dHJJdGVtJiBpdGVtID0gR2V0QXQoaSk7DQotICAgICAgICBpZiAoKHNwYWNlLklzRW1wdHkoKSB8fCBpdGVtLm1fUVNwYWNlTmFtZSA9PSBzcGFjZSkgJiYgaXRlbS5tX0F0dHJOYW1lID09IG5hbWUpIHsNCi0gICAgICAgICAgICBpdGVtLm1fVmFsdWUuU2V0KHZhbHVlLCBwQWxsb2NhdG9yKTsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKCFtX3BNYXApIHsNCi0gICAgICAgIGlmIChwQWxsb2NhdG9yKSB7DQotICAgICAgICAgICAgbV9wTWFwID0gRlhfTmV3QXRBbGxvY2F0b3IocEFsbG9jYXRvcilDRlhfT2JqZWN0QXJyYXk8Q1hNTF9BdHRySXRlbT4ocEFsbG9jYXRvcik7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIG1fcE1hcCA9IEZYX05FVyBDRlhfT2JqZWN0QXJyYXk8Q1hNTF9BdHRySXRlbT47DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKCFtX3BNYXApIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDWE1MX0F0dHJJdGVtKiBwSXRlbSA9IChDWE1MX0F0dHJJdGVtKiltX3BNYXAtPkFkZFNwYWNlKCk7DQotICAgIGlmICghcEl0ZW0pIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBwSXRlbS0+bV9RU3BhY2VOYW1lLlNldChzcGFjZSwgcEFsbG9jYXRvcik7DQotICAgIHBJdGVtLT5tX0F0dHJOYW1lLlNldChuYW1lLCBwQWxsb2NhdG9yKTsNCi0gICAgcEl0ZW0tPm1fVmFsdWUuU2V0KHZhbHVlLCBwQWxsb2NhdG9yKTsNCi19DQotdm9pZCBDWE1MX0F0dHJNYXA6OlJlbW92ZUF0KEZYX0JTVFIgc3BhY2UsIEZYX0JTVFIgbmFtZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikNCi17DQotICAgIGlmIChtX3BNYXAgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9wTWFwLT5HZXRTaXplKCk7IGkgKyspIHsNCi0gICAgICAgIENYTUxfQXR0ckl0ZW0mIGl0ZW0gPSBHZXRBdChpKTsNCi0gICAgICAgIGlmICgoc3BhY2UuSXNFbXB0eSgpIHx8IGl0ZW0ubV9RU3BhY2VOYW1lID09IHNwYWNlKSAmJiBpdGVtLm1fQXR0ck5hbWUgPT0gbmFtZSkgew0KLSAgICAgICAgICAgIGl0ZW0uRW1wdHkocEFsbG9jYXRvcik7DQotICAgICAgICAgICAgbV9wTWFwLT5SZW1vdmVBdChpKTsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgIH0NCi19DQotaW50IENYTUxfQXR0ck1hcDo6R2V0U2l6ZSgpIGNvbnN0DQotew0KLSAgICByZXR1cm4gbV9wTWFwID09IE5VTEwgPyAwIDogbV9wTWFwLT5HZXRTaXplKCk7DQotfQ0KLUNYTUxfQXR0ckl0ZW0mIENYTUxfQXR0ck1hcDo6R2V0QXQoaW50IGluZGV4KSBjb25zdA0KLXsNCi0gICAgQVNTRVJUKG1fcE1hcCAhPSBOVUxMKTsNCi0gICAgcmV0dXJuICgqbV9wTWFwKVtpbmRleF07DQotfQ0KLXZvaWQgQ1hNTF9BdHRyTWFwOjpSZW1vdmVBbGwoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikNCi17DQotICAgIGlmICghbV9wTWFwKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3BNYXAtPkdldFNpemUoKTsgaSArKykgew0KLSAgICAgICAgQ1hNTF9BdHRySXRlbSYgaXRlbSA9ICgqbV9wTWFwKVtpXTsNCi0gICAgICAgIGl0ZW0uRW1wdHkocEFsbG9jYXRvcik7DQotICAgIH0NCi0gICAgbV9wTWFwLT5SZW1vdmVBbGwoKTsNCi0gICAgaWYgKHBBbGxvY2F0b3IpIHsNCi0gICAgICAgIEZYX0RlbGV0ZUF0QWxsb2NhdG9yKG1fcE1hcCwgcEFsbG9jYXRvciwgQ0ZYX09iamVjdEFycmF5PENYTUxfQXR0ckl0ZW0+KTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BNYXA7DQotICAgIH0NCi0gICAgbV9wTWFwID0gTlVMTDsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfeG1sLmgiCisjaW5jbHVkZSAieG1sX2ludC5oIgorQ1hNTF9QYXJzZXI6On5DWE1MX1BhcnNlcigpCit7CisgICAgaWYgKG1fYk93bmVkU3RyZWFtKSB7CisgICAgICAgIG1fcERhdGFBY2MtPlJlbGVhc2UoKTsKKyAgICB9Cit9CitGWF9CT09MIENYTUxfUGFyc2VyOjpJbml0KEZYX0xQQllURSBwQnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAobV9wQWxsb2NhdG9yKSB7CisgICAgICAgIG1fcERhdGFBY2MgPSBGWF9OZXdBdEFsbG9jYXRvcihtX3BBbGxvY2F0b3IpQ1hNTF9EYXRhQnVmQWNjKHBCdWZmZXIsIHNpemUsIG1fcEFsbG9jYXRvcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wRGF0YUFjYyA9IEZYX05FVyBDWE1MX0RhdGFCdWZBY2MocEJ1ZmZlciwgc2l6ZSwgTlVMTCk7CisgICAgfQorICAgIGlmICghbV9wRGF0YUFjYykgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBJbml0KFRSVUUpOworfQorRlhfQk9PTCBDWE1MX1BhcnNlcjo6SW5pdChJRlhfRmlsZVJlYWQgKnBGaWxlUmVhZCkKK3sKKyAgICBpZiAobV9wQWxsb2NhdG9yKSB7CisgICAgICAgIG1fcERhdGFBY2MgPSBGWF9OZXdBdEFsbG9jYXRvcihtX3BBbGxvY2F0b3IpQ1hNTF9EYXRhU3RtQWNjKHBGaWxlUmVhZCwgbV9wQWxsb2NhdG9yKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3BEYXRhQWNjID0gRlhfTkVXIENYTUxfRGF0YVN0bUFjYyhwRmlsZVJlYWQsIE5VTEwpOworICAgIH0KKyAgICBpZiAoIW1fcERhdGFBY2MpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gSW5pdChUUlVFKTsKK30KK0ZYX0JPT0wgQ1hNTF9QYXJzZXI6OkluaXQoSUZYX0J1ZmZlclJlYWQgKnBCdWZmZXIpCit7CisgICAgaWYgKCFwQnVmZmVyKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9wRGF0YUFjYyA9IHBCdWZmZXI7CisgICAgcmV0dXJuIEluaXQoRkFMU0UpOworfQorRlhfQk9PTCBDWE1MX1BhcnNlcjo6SW5pdChGWF9CT09MIGJPd25kZWRTdHJlYW0pCit7CisgICAgbV9iT3duZWRTdHJlYW0gPSBiT3duZGVkU3RyZWFtOworICAgIG1fbk9mZnNldCA9IDA7CisgICAgcmV0dXJuIFJlYWROZXh0QmxvY2soKTsKK30KK0ZYX0JPT0wgQ1hNTF9QYXJzZXI6OlJlYWROZXh0QmxvY2soKQoreworICAgIGlmICghbV9wRGF0YUFjYy0+UmVhZE5leHRCbG9jaygpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9wQnVmZmVyID0gbV9wRGF0YUFjYy0+R2V0QmxvY2tCdWZmZXIoKTsKKyAgICBtX2R3QnVmZmVyU2l6ZSA9IG1fcERhdGFBY2MtPkdldEJsb2NrU2l6ZSgpOworICAgIG1fbkJ1ZmZlck9mZnNldCA9IG1fcERhdGFBY2MtPkdldEJsb2NrT2Zmc2V0KCk7CisgICAgbV9kd0luZGV4ID0gMDsKKyAgICByZXR1cm4gbV9kd0J1ZmZlclNpemUgPiAwOworfQorRlhfQk9PTCBDWE1MX1BhcnNlcjo6SXNFT0YoKQoreworICAgIGlmICghbV9wRGF0YUFjYy0+SXNFT0YoKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBtX2R3SW5kZXggPj0gbV9kd0J1ZmZlclNpemU7Cit9CisjZGVmaW5lIEZYQ1JUTV9YTUxfQ0hBUlRZUEVfTm9ybWFsCQkJMHgwMAorI2RlZmluZSBGWENSVE1fWE1MX0NIQVJUWVBFX1NwYWNlQ2hhcgkJMHgwMQorI2RlZmluZSBGWENSVE1fWE1MX0NIQVJUWVBFX0xldHRlcgkJCTB4MDIKKyNkZWZpbmUgRlhDUlRNX1hNTF9DSEFSVFlQRV9EaWdpdGFsCQkJMHgwNAorI2RlZmluZSBGWENSVE1fWE1MX0NIQVJUWVBFX05hbWVJbnRybwkJMHgwOAorI2RlZmluZSBGWENSVE1fWE1MX0NIQVJUWVBFX05hbWVDaGFyCQkweDEwCisjZGVmaW5lIEZYQ1JUTV9YTUxfQ0hBUlRZUEVfSGV4RGlnaXRhbAkJMHgyMAorI2RlZmluZSBGWENSVE1fWE1MX0NIQVJUWVBFX0hleExvd2VyTGV0dGVyCTB4NDAKKyNkZWZpbmUgRlhDUlRNX1hNTF9DSEFSVFlQRV9IZXhVcHBlckxldHRlcgkweDYwCisjZGVmaW5lIEZYQ1JUTV9YTUxfQ0hBUlRZUEVfSGV4Q2hhcgkJCTB4NjAKK0ZYX0JZVEUgZ19GWENSVF9YTUxfQnl0ZVR5cGVzWzI1Nl0gPSB7CisgICAgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKKyAgICAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAorICAgIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MTAsIDB4MDAsCisgICAgMHgzNCwgMHgzNCwgMHgzNCwgMHgzNCwgMHgzNCwgMHgzNCwgMHgzNCwgMHgzNCwgMHgzNCwgMHgzNCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDdBLCAweDdBLCAweDdBLCAweDdBLCAweDdBLCAweDdBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLAorICAgIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTgsCisgICAgMHgwMCwgMHg1QSwgMHg1QSwgMHg1QSwgMHg1QSwgMHg1QSwgMHg1QSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwKKyAgICAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsCisgICAgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwKKyAgICAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLAorICAgIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsCisgICAgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwKKyAgICAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLCAweDFBLAorICAgIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsIDB4MUEsCisgICAgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgxQSwgMHgwMSwgMHgwMSwKK307CitGWF9CT09MIGdfRlhDUlRfWE1MX0lzV2hpdGVTcGFjZShGWF9CWVRFIGNoKQoreworICAgIHJldHVybiAoZ19GWENSVF9YTUxfQnl0ZVR5cGVzW2NoXSAmIEZYQ1JUTV9YTUxfQ0hBUlRZUEVfU3BhY2VDaGFyKSAhPSAwOworfQorRlhfQk9PTCBnX0ZYQ1JUX1hNTF9Jc0xldHRlcihGWF9CWVRFIGNoKQoreworICAgIHJldHVybiAoZ19GWENSVF9YTUxfQnl0ZVR5cGVzW2NoXSAmIEZYQ1JUTV9YTUxfQ0hBUlRZUEVfTGV0dGVyKSAhPSAwOworfQorRlhfQk9PTCBnX0ZYQ1JUX1hNTF9Jc0RpZ2l0YWwoRlhfQllURSBjaCkKK3sKKyAgICByZXR1cm4gKGdfRlhDUlRfWE1MX0J5dGVUeXBlc1tjaF0gJiBGWENSVE1fWE1MX0NIQVJUWVBFX0RpZ2l0YWwpICE9IDA7Cit9CitGWF9CT09MIGdfRlhDUlRfWE1MX0lzTmFtZUludHJvKEZYX0JZVEUgY2gpCit7CisgICAgcmV0dXJuIChnX0ZYQ1JUX1hNTF9CeXRlVHlwZXNbY2hdICYgRlhDUlRNX1hNTF9DSEFSVFlQRV9OYW1lSW50cm8pICE9IDA7Cit9CitGWF9CT09MIGdfRlhDUlRfWE1MX0lzTmFtZUNoYXIoRlhfQllURSBjaCkKK3sKKyAgICByZXR1cm4gKGdfRlhDUlRfWE1MX0J5dGVUeXBlc1tjaF0gJiBGWENSVE1fWE1MX0NIQVJUWVBFX05hbWVDaGFyKSAhPSAwOworfQorRlhfQk9PTCBnX0ZYQ1JUX1hNTF9Jc0hleENoYXIoRlhfQllURSBjaCkKK3sKKyAgICByZXR1cm4gKGdfRlhDUlRfWE1MX0J5dGVUeXBlc1tjaF0gJiBGWENSVE1fWE1MX0NIQVJUWVBFX0hleENoYXIpICE9IDA7Cit9Cit2b2lkIENYTUxfUGFyc2VyOjpTa2lwV2hpdGVTcGFjZXMoKQoreworICAgIG1fbk9mZnNldCA9IG1fbkJ1ZmZlck9mZnNldCArIChGWF9GSUxFU0laRSltX2R3SW5kZXg7CisgICAgaWYgKElzRU9GKCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkbyB7CisgICAgICAgIHdoaWxlIChtX2R3SW5kZXggPCBtX2R3QnVmZmVyU2l6ZSAmJiBnX0ZYQ1JUX1hNTF9Jc1doaXRlU3BhY2UobV9wQnVmZmVyW21fZHdJbmRleF0pKSB7CisgICAgICAgICAgICBtX2R3SW5kZXggKys7CisgICAgICAgIH0KKyAgICAgICAgbV9uT2Zmc2V0ID0gbV9uQnVmZmVyT2Zmc2V0ICsgKEZYX0ZJTEVTSVpFKW1fZHdJbmRleDsKKyAgICAgICAgaWYgKG1fZHdJbmRleCA8IG1fZHdCdWZmZXJTaXplIHx8IElzRU9GKCkpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSB3aGlsZSAoUmVhZE5leHRCbG9jaygpKTsKK30KK3ZvaWQgQ1hNTF9QYXJzZXI6OkdldE5hbWUoQ0ZYX0J5dGVTdHJpbmdMICZzcGFjZSwgQ0ZYX0J5dGVTdHJpbmdMICZuYW1lKQoreworICAgIG1fbk9mZnNldCA9IG1fbkJ1ZmZlck9mZnNldCArIChGWF9GSUxFU0laRSltX2R3SW5kZXg7CisgICAgaWYgKElzRU9GKCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDRlhfQnl0ZVRleHRCdWYgYnVmKG1fcEFsbG9jYXRvcik7CisgICAgRlhfQllURSBjaDsKKyAgICBkbyB7CisgICAgICAgIHdoaWxlIChtX2R3SW5kZXggPCBtX2R3QnVmZmVyU2l6ZSkgeworICAgICAgICAgICAgY2ggPSBtX3BCdWZmZXJbbV9kd0luZGV4XTsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnOicpIHsKKyAgICAgICAgICAgICAgICBidWYuR2V0Qnl0ZVN0cmluZ0woc3BhY2UpOworICAgICAgICAgICAgICAgIGJ1Zi5DbGVhcigpOworICAgICAgICAgICAgfSBlbHNlIGlmIChnX0ZYQ1JUX1hNTF9Jc05hbWVDaGFyKGNoKSkgeworICAgICAgICAgICAgICAgIGJ1Zi5BcHBlbmRDaGFyKGNoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2R3SW5kZXggKys7CisgICAgICAgIH0KKyAgICAgICAgbV9uT2Zmc2V0ID0gbV9uQnVmZmVyT2Zmc2V0ICsgKEZYX0ZJTEVTSVpFKW1fZHdJbmRleDsKKyAgICAgICAgaWYgKG1fZHdJbmRleCA8IG1fZHdCdWZmZXJTaXplIHx8IElzRU9GKCkpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSB3aGlsZSAoUmVhZE5leHRCbG9jaygpKTsKKyAgICBidWYuR2V0Qnl0ZVN0cmluZ0wobmFtZSk7Cit9Cit2b2lkIENYTUxfUGFyc2VyOjpTa2lwTGl0ZXJhbHMoRlhfQlNUUiBzdHIpCit7CisgICAgbV9uT2Zmc2V0ID0gbV9uQnVmZmVyT2Zmc2V0ICsgKEZYX0ZJTEVTSVpFKW1fZHdJbmRleDsKKyAgICBpZiAoSXNFT0YoKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX0lOVDMyIGkgPSAwLCBpTGVuID0gc3RyLkdldExlbmd0aCgpOworICAgIGRvIHsKKyAgICAgICAgd2hpbGUgKG1fZHdJbmRleCA8IG1fZHdCdWZmZXJTaXplKSB7CisgICAgICAgICAgICBpZiAoc3RyLkdldEF0KGkpICE9IG1fcEJ1ZmZlclttX2R3SW5kZXggKytdKSB7CisgICAgICAgICAgICAgICAgaSA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGkgKys7CisgICAgICAgICAgICAgICAgaWYgKGkgPT0gaUxlbikgeworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9uT2Zmc2V0ID0gbV9uQnVmZmVyT2Zmc2V0ICsgKEZYX0ZJTEVTSVpFKW1fZHdJbmRleDsKKyAgICAgICAgaWYgKGkgPT0gaUxlbikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtX2R3SW5kZXggPCBtX2R3QnVmZmVyU2l6ZSB8fCBJc0VPRigpKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKFJlYWROZXh0QmxvY2soKSk7CisgICAgd2hpbGUgKCFtX3BEYXRhQWNjLT5Jc0VPRigpKSB7CisgICAgICAgIFJlYWROZXh0QmxvY2soKTsKKyAgICAgICAgbV9uT2Zmc2V0ID0gbV9uQnVmZmVyT2Zmc2V0ICsgKEZYX0ZJTEVTSVpFKW1fZHdCdWZmZXJTaXplOworICAgIH0KKyAgICBtX2R3SW5kZXggPSBtX2R3QnVmZmVyU2l6ZTsKK30KK0ZYX0RXT1JEIENYTUxfUGFyc2VyOjpHZXRDaGFyUmVmKCkKK3sKKyAgICBtX25PZmZzZXQgPSBtX25CdWZmZXJPZmZzZXQgKyAoRlhfRklMRVNJWkUpbV9kd0luZGV4OworICAgIGlmIChJc0VPRigpKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBGWF9CWVRFIGNoOworICAgIEZYX0lOVDMyIGlTdGF0ZSA9IDA7CisgICAgQ0ZYX0J5dGVUZXh0QnVmIGJ1ZihtX3BBbGxvY2F0b3IpOworICAgIEZYX0RXT1JEIGNvZGUgPSAwOworICAgIGRvIHsKKyAgICAgICAgd2hpbGUgKG1fZHdJbmRleCA8IG1fZHdCdWZmZXJTaXplKSB7CisgICAgICAgICAgICBjaCA9IG1fcEJ1ZmZlclttX2R3SW5kZXhdOworICAgICAgICAgICAgc3dpdGNoIChpU3RhdGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnIycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZHdJbmRleCArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlTdGF0ZSA9IDI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpU3RhdGUgPSAxOworICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgbV9kd0luZGV4ICsrOworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJzsnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDRlhfQnl0ZVN0cmluZ0MgcmVmID0gYnVmLkdldEJ5dGVTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWYgPT0gRlhfQlNUUkMoImd0IikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gJz4nOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZWYgPT0gRlhfQlNUUkMoImx0IikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gJzwnOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZWYgPT0gRlhfQlNUUkMoImFtcCIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9ICcmJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVmID09IEZYX0JTVFJDKCJhcG9zIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gJ1wnJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVmID09IEZYX0JTVFJDKCJxdW90IikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gJyInOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaVN0YXRlID0gMTA7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBidWYuQXBwZW5kQnl0ZShjaCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICd4JykgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9kd0luZGV4ICsrOworICAgICAgICAgICAgICAgICAgICAgICAgaVN0YXRlID0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlTdGF0ZSA9IDM7CisgICAgICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgICAgICBtX2R3SW5kZXggKys7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnOycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlTdGF0ZSA9IDEwOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGdfRlhDUlRfWE1MX0lzRGlnaXRhbChjaCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlICogMTAgKyBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICAgIG1fZHdJbmRleCArKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICc7JykgeworICAgICAgICAgICAgICAgICAgICAgICAgaVN0YXRlID0gMTA7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIG5IZXggPSBnX0ZYQ1JUX1hNTF9CeXRlVHlwZXNbY2hdICYgRlhDUlRNX1hNTF9DSEFSVFlQRV9IZXhDaGFyOworICAgICAgICAgICAgICAgICAgICBpZiAobkhleCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5IZXggPT0gRlhDUlRNX1hNTF9DSEFSVFlQRV9IZXhEaWdpdGFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IChjb2RlIDw8IDQpICsgY2ggLSAnMCc7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5IZXggPT0gRlhDUlRNX1hNTF9DSEFSVFlQRV9IZXhMb3dlckxldHRlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAoY29kZSA8PCA0KSArIGNoIC0gODc7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAoY29kZSA8PCA0KSArIGNoIC0gNTU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaVN0YXRlID09IDEwKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9uT2Zmc2V0ID0gbV9uQnVmZmVyT2Zmc2V0ICsgKEZYX0ZJTEVTSVpFKW1fZHdJbmRleDsKKyAgICAgICAgaWYgKGlTdGF0ZSA9PSAxMCB8fCBtX2R3SW5kZXggPCBtX2R3QnVmZmVyU2l6ZSB8fCBJc0VPRigpKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKFJlYWROZXh0QmxvY2soKSk7CisgICAgcmV0dXJuIGNvZGU7Cit9Cit2b2lkIENYTUxfUGFyc2VyOjpHZXRBdHRyVmFsdWUoQ0ZYX1dpZGVTdHJpbmdMICZ2YWx1ZSkKK3sKKyAgICBtX25PZmZzZXQgPSBtX25CdWZmZXJPZmZzZXQgKyAoRlhfRklMRVNJWkUpbV9kd0luZGV4OworICAgIGlmIChJc0VPRigpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZYX1VURjhEZWNvZGVyIGRlY29kZXIobV9wQWxsb2NhdG9yKTsKKyAgICBGWF9CWVRFIG1hcmsgPSAwLCBjaDsKKyAgICBkbyB7CisgICAgICAgIHdoaWxlIChtX2R3SW5kZXggPCBtX2R3QnVmZmVyU2l6ZSkgeworICAgICAgICAgICAgY2ggPSBtX3BCdWZmZXJbbV9kd0luZGV4XTsKKyAgICAgICAgICAgIGlmIChtYXJrID09IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggIT0gJ1wnJyAmJiBjaCAhPSAnIicpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYXJrID0gY2g7CisgICAgICAgICAgICAgICAgbV9kd0luZGV4ICsrOworICAgICAgICAgICAgICAgIGNoID0gMDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fZHdJbmRleCArKzsKKyAgICAgICAgICAgIGlmIChjaCA9PSBtYXJrKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2ggPT0gJyYnKSB7CisgICAgICAgICAgICAgICAgZGVjb2Rlci5BcHBlbmRDaGFyKEdldENoYXJSZWYoKSk7CisgICAgICAgICAgICAgICAgaWYgKElzRU9GKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci5HZXRSZXN1bHQodmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZWNvZGVyLklucHV0KGNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX25PZmZzZXQgPSBtX25CdWZmZXJPZmZzZXQgKyAoRlhfRklMRVNJWkUpbV9kd0luZGV4OworICAgICAgICBpZiAoY2ggPT0gbWFyayB8fCBtX2R3SW5kZXggPCBtX2R3QnVmZmVyU2l6ZSB8fCBJc0VPRigpKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKFJlYWROZXh0QmxvY2soKSk7CisgICAgZGVjb2Rlci5HZXRSZXN1bHQodmFsdWUpOworfQordm9pZCBDWE1MX1BhcnNlcjo6R2V0VGFnTmFtZShDRlhfQnl0ZVN0cmluZ0wgJnNwYWNlLCBDRlhfQnl0ZVN0cmluZ0wgJm5hbWUsIEZYX0JPT0wgJmJFbmRUYWcsIEZYX0JPT0wgYlN0YXJ0VGFnKQoreworICAgIG1fbk9mZnNldCA9IG1fbkJ1ZmZlck9mZnNldCArIChGWF9GSUxFU0laRSltX2R3SW5kZXg7CisgICAgaWYgKElzRU9GKCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBiRW5kVGFnID0gRkFMU0U7CisgICAgRlhfQllURSBjaDsKKyAgICBGWF9JTlQzMiBpU3RhdGUgPSBiU3RhcnRUYWcgPyAxIDogMDsKKyAgICBkbyB7CisgICAgICAgIHdoaWxlIChtX2R3SW5kZXggPCBtX2R3QnVmZmVyU2l6ZSkgeworICAgICAgICAgICAgY2ggPSBtX3BCdWZmZXJbbV9kd0luZGV4XTsKKyAgICAgICAgICAgIHN3aXRjaCAoaVN0YXRlKSB7CisgICAgICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgICAgICBtX2R3SW5kZXggKys7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCAhPSAnPCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlTdGF0ZSA9IDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICc/JykgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9kd0luZGV4ICsrOworICAgICAgICAgICAgICAgICAgICAgICAgU2tpcExpdGVyYWxzKEZYX0JTVFJDKCI/PiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlTdGF0ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnIScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZHdJbmRleCArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNraXBMaXRlcmFscyhGWF9CU1RSQygiLS0+IikpOworICAgICAgICAgICAgICAgICAgICAgICAgaVN0YXRlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZHdJbmRleCArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdldE5hbWUoc3BhY2UsIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgYkVuZFRhZyA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBHZXROYW1lKHNwYWNlLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJFbmRUYWcgPSBGQUxTRTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9uT2Zmc2V0ID0gbV9uQnVmZmVyT2Zmc2V0ICsgKEZYX0ZJTEVTSVpFKW1fZHdJbmRleDsKKyAgICAgICAgaWYgKG1fZHdJbmRleCA8IG1fZHdCdWZmZXJTaXplIHx8IElzRU9GKCkpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSB3aGlsZSAoUmVhZE5leHRCbG9jaygpKTsKK30KK0NYTUxfRWxlbWVudCogQ1hNTF9QYXJzZXI6OlBhcnNlRWxlbWVudChDWE1MX0VsZW1lbnQqIHBQYXJlbnQsIEZYX0JPT0wgYlN0YXJ0VGFnKQoreworICAgIG1fbk9mZnNldCA9IG1fbkJ1ZmZlck9mZnNldCArIChGWF9GSUxFU0laRSltX2R3SW5kZXg7CisgICAgaWYgKElzRU9GKCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nTCB0YWdfbmFtZSwgdGFnX3NwYWNlOworICAgIEZYX0JPT0wgYkVuZFRhZzsKKyAgICBHZXRUYWdOYW1lKHRhZ19zcGFjZSwgdGFnX25hbWUsIGJFbmRUYWcsIGJTdGFydFRhZyk7CisgICAgaWYgKHRhZ19uYW1lLklzRW1wdHkoKSB8fCBiRW5kVGFnKSB7CisgICAgICAgIHRhZ19zcGFjZS5FbXB0eShtX3BBbGxvY2F0b3IpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1hNTF9FbGVtZW50KiBwRWxlbWVudDsKKyAgICBpZiAobV9wQWxsb2NhdG9yKSB7CisgICAgICAgIHBFbGVtZW50ID0gRlhfTmV3QXRBbGxvY2F0b3IobV9wQWxsb2NhdG9yKUNYTUxfRWxlbWVudChtX3BBbGxvY2F0b3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIHBFbGVtZW50ID0gRlhfTkVXIENYTUxfRWxlbWVudDsKKyAgICB9CisgICAgaWYgKHBFbGVtZW50KSB7CisgICAgICAgIHBFbGVtZW50LT5tX3BQYXJlbnQgPSBwUGFyZW50OworICAgICAgICBwRWxlbWVudC0+U2V0VGFnKHRhZ19zcGFjZSwgdGFnX25hbWUpOworICAgIH0KKyAgICB0YWdfc3BhY2UuRW1wdHkobV9wQWxsb2NhdG9yKTsKKyAgICB0YWdfbmFtZS5FbXB0eShtX3BBbGxvY2F0b3IpOworICAgIGlmICghcEVsZW1lbnQpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGRvIHsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmdMIGF0dHJfc3BhY2UsIGF0dHJfbmFtZTsKKyAgICAgICAgd2hpbGUgKG1fZHdJbmRleCA8IG1fZHdCdWZmZXJTaXplKSB7CisgICAgICAgICAgICBTa2lwV2hpdGVTcGFjZXMoKTsKKyAgICAgICAgICAgIGlmIChJc0VPRigpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWdfRlhDUlRfWE1MX0lzTmFtZUludHJvKG1fcEJ1ZmZlclttX2R3SW5kZXhdKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXR0cl9zcGFjZS5FbXB0eShtX3BBbGxvY2F0b3IpOworICAgICAgICAgICAgYXR0cl9uYW1lLkVtcHR5KG1fcEFsbG9jYXRvcik7CisgICAgICAgICAgICBHZXROYW1lKGF0dHJfc3BhY2UsIGF0dHJfbmFtZSk7CisgICAgICAgICAgICBTa2lwV2hpdGVTcGFjZXMoKTsKKyAgICAgICAgICAgIGlmIChJc0VPRigpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9wQnVmZmVyW21fZHdJbmRleF0gIT0gJz0nKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2R3SW5kZXggKys7CisgICAgICAgICAgICBTa2lwV2hpdGVTcGFjZXMoKTsKKyAgICAgICAgICAgIGlmIChJc0VPRigpKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDRlhfV2lkZVN0cmluZ0wgYXR0cl92YWx1ZTsKKyAgICAgICAgICAgIEdldEF0dHJWYWx1ZShhdHRyX3ZhbHVlKTsKKyAgICAgICAgICAgIHBFbGVtZW50LT5tX0F0dHJNYXAuU2V0QXQoYXR0cl9zcGFjZSwgYXR0cl9uYW1lLCBhdHRyX3ZhbHVlLCBtX3BBbGxvY2F0b3IpOworICAgICAgICAgICAgYXR0cl92YWx1ZS5FbXB0eShtX3BBbGxvY2F0b3IpOworICAgICAgICB9CisgICAgICAgIGF0dHJfc3BhY2UuRW1wdHkobV9wQWxsb2NhdG9yKTsKKyAgICAgICAgYXR0cl9uYW1lLkVtcHR5KG1fcEFsbG9jYXRvcik7CisgICAgICAgIG1fbk9mZnNldCA9IG1fbkJ1ZmZlck9mZnNldCArIChGWF9GSUxFU0laRSltX2R3SW5kZXg7CisgICAgICAgIGlmIChtX2R3SW5kZXggPCBtX2R3QnVmZmVyU2l6ZSB8fCBJc0VPRigpKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKFJlYWROZXh0QmxvY2soKSk7CisgICAgU2tpcFdoaXRlU3BhY2VzKCk7CisgICAgaWYgKElzRU9GKCkpIHsKKyAgICAgICAgcmV0dXJuIHBFbGVtZW50OworICAgIH0KKyAgICBGWF9CWVRFIGNoID0gbV9wQnVmZmVyW21fZHdJbmRleCArK107CisgICAgaWYgKGNoID09ICcvJykgeworICAgICAgICBtX2R3SW5kZXggKys7CisgICAgICAgIG1fbk9mZnNldCA9IG1fbkJ1ZmZlck9mZnNldCArIChGWF9GSUxFU0laRSltX2R3SW5kZXg7CisgICAgICAgIHJldHVybiBwRWxlbWVudDsKKyAgICB9CisgICAgaWYgKGNoICE9ICc+JykgeworICAgICAgICBtX25PZmZzZXQgPSBtX25CdWZmZXJPZmZzZXQgKyAoRlhfRklMRVNJWkUpbV9kd0luZGV4OworICAgICAgICBpZiAobV9wQWxsb2NhdG9yKSB7CisgICAgICAgICAgICBGWF9EZWxldGVBdEFsbG9jYXRvcihwRWxlbWVudCwgbV9wQWxsb2NhdG9yLCBDWE1MX0VsZW1lbnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVsZXRlIHBFbGVtZW50OworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBTa2lwV2hpdGVTcGFjZXMoKTsKKyAgICBpZiAoSXNFT0YoKSkgeworICAgICAgICByZXR1cm4gcEVsZW1lbnQ7CisgICAgfQorICAgIENGWF9VVEY4RGVjb2RlciBkZWNvZGVyKG1fcEFsbG9jYXRvcik7CisgICAgQ0ZYX1dpZGVUZXh0QnVmIGNvbnRlbnQobV9wQWxsb2NhdG9yKTsKKyAgICBGWF9CT09MIGJDREFUQSA9IEZBTFNFOworICAgIEZYX0lOVDMyIGlTdGF0ZSA9IDA7CisgICAgZG8geworICAgICAgICB3aGlsZSAobV9kd0luZGV4IDwgbV9kd0J1ZmZlclNpemUpIHsKKyAgICAgICAgICAgIGNoID0gbV9wQnVmZmVyW21fZHdJbmRleCArK107CisgICAgICAgICAgICBzd2l0Y2ggKGlTdGF0ZSkgeworICAgICAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICc8JykgeworICAgICAgICAgICAgICAgICAgICAgICAgaVN0YXRlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnJicpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXIuQ2xlYXJTdGF0dXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZXIuQXBwZW5kQ2hhcihHZXRDaGFyUmVmKCkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci5JbnB1dChjaCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJyEnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpU3RhdGUgPSAyOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICc/JykgeworICAgICAgICAgICAgICAgICAgICAgICAgU2tpcExpdGVyYWxzKEZYX0JTVFJDKCI/PiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNraXBXaGl0ZVNwYWNlcygpOworICAgICAgICAgICAgICAgICAgICAgICAgaVN0YXRlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nTCBzcGFjZSwgbmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdldE5hbWUoc3BhY2UsIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UuRW1wdHkobV9wQWxsb2NhdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUuRW1wdHkobV9wQWxsb2NhdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNraXBXaGl0ZVNwYWNlcygpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9kd0luZGV4ICsrOworICAgICAgICAgICAgICAgICAgICAgICAgaVN0YXRlID0gMTA7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50IDw8IGRlY29kZXIuR2V0UmVzdWx0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBDRlhfV2lkZVN0cmluZ0wgZGF0YVN0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQuR2V0V2lkZVN0cmluZ0woZGF0YVN0cik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJDREFUQSAmJiAhbV9iU2F2ZVNwYWNlQ2hhcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU3RyLlRyaW1SaWdodCgoRlhfTFBDV1NUUilMIiBcdFxyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIEluc2VydENvbnRlbnRTZWdtZW50KGJDREFUQSwgZGF0YVN0ciwgcEVsZW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVN0ci5FbXB0eShtX3BBbGxvY2F0b3IpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudC5DbGVhcigpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci5DbGVhcigpOworICAgICAgICAgICAgICAgICAgICAgICAgYkNEQVRBID0gRkFMU0U7CisgICAgICAgICAgICAgICAgICAgICAgICBpU3RhdGUgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgbV9kd0luZGV4IC0tOworICAgICAgICAgICAgICAgICAgICAgICAgQ1hNTF9FbGVtZW50KiBwU3ViRWxlbWVudCA9IFBhcnNlRWxlbWVudChwRWxlbWVudCwgVFJVRSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocFN1YkVsZW1lbnQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcFN1YkVsZW1lbnQtPm1fcFBhcmVudCA9IHBFbGVtZW50OworICAgICAgICAgICAgICAgICAgICAgICAgcEVsZW1lbnQtPm1fQ2hpbGRyZW4uQWRkKChGWF9MUFZPSUQpQ1hNTF9FbGVtZW50OjpFbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBFbGVtZW50LT5tX0NoaWxkcmVuLkFkZChwU3ViRWxlbWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTa2lwV2hpdGVTcGFjZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnWycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNraXBMaXRlcmFscyhGWF9CU1RSQygiXV0+IikpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICctJykgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9kd0luZGV4ICsrOworICAgICAgICAgICAgICAgICAgICAgICAgU2tpcExpdGVyYWxzKEZYX0JTVFJDKCItLT4iKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTa2lwTGl0ZXJhbHMoRlhfQlNUUkMoIj4iKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci5DbGVhcigpOworICAgICAgICAgICAgICAgICAgICBTa2lwV2hpdGVTcGFjZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgaVN0YXRlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaVN0YXRlID09IDEwKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9uT2Zmc2V0ID0gbV9uQnVmZmVyT2Zmc2V0ICsgKEZYX0ZJTEVTSVpFKW1fZHdJbmRleDsKKyAgICAgICAgaWYgKGlTdGF0ZSA9PSAxMCB8fCBtX2R3SW5kZXggPCBtX2R3QnVmZmVyU2l6ZSB8fCBJc0VPRigpKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKFJlYWROZXh0QmxvY2soKSk7CisgICAgY29udGVudCA8PCBkZWNvZGVyLkdldFJlc3VsdCgpOworICAgIENGWF9XaWRlU3RyaW5nTCBkYXRhU3RyOworICAgIGNvbnRlbnQuR2V0V2lkZVN0cmluZ0woZGF0YVN0cik7CisgICAgaWYgKCFtX2JTYXZlU3BhY2VDaGFycykgeworICAgICAgICBkYXRhU3RyLlRyaW1SaWdodCgoRlhfTFBDV1NUUilMIiBcdFxyXG4iKTsKKyAgICB9CisgICAgSW5zZXJ0Q29udGVudFNlZ21lbnQoYkNEQVRBLCBkYXRhU3RyLCBwRWxlbWVudCk7CisgICAgZGF0YVN0ci5FbXB0eShtX3BBbGxvY2F0b3IpOworICAgIGNvbnRlbnQuQ2xlYXIoKTsKKyAgICBkZWNvZGVyLkNsZWFyKCk7CisgICAgYkNEQVRBID0gRkFMU0U7CisgICAgcmV0dXJuIHBFbGVtZW50OworfQordm9pZCBDWE1MX1BhcnNlcjo6SW5zZXJ0Q29udGVudFNlZ21lbnQoRlhfQk9PTCBiQ0RBVEEsIEZYX1dTVFIgY29udGVudCwgQ1hNTF9FbGVtZW50KiBwRWxlbWVudCkKK3sKKyAgICBpZiAoY29udGVudC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDWE1MX0NvbnRlbnQqIHBDb250ZW50OworICAgIGlmIChtX3BBbGxvY2F0b3IpIHsKKyAgICAgICAgcENvbnRlbnQgPSBGWF9OZXdBdEFsbG9jYXRvcihtX3BBbGxvY2F0b3IpQ1hNTF9Db250ZW50OworICAgIH0gZWxzZSB7CisgICAgICAgIHBDb250ZW50ID0gRlhfTkVXIENYTUxfQ29udGVudDsKKyAgICB9CisgICAgaWYgKCFwQ29udGVudCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHBDb250ZW50LT5TZXQoYkNEQVRBLCBjb250ZW50LCBtX3BBbGxvY2F0b3IpOworICAgIHBFbGVtZW50LT5tX0NoaWxkcmVuLkFkZCgoRlhfTFBWT0lEKUNYTUxfRWxlbWVudDo6Q29udGVudCk7CisgICAgcEVsZW1lbnQtPm1fQ2hpbGRyZW4uQWRkKHBDb250ZW50KTsKK30KK3N0YXRpYyBDWE1MX0VsZW1lbnQqIFhNTF9Db250aW51ZVBhcnNlKENYTUxfUGFyc2VyICZwYXJzZXIsIEZYX0JPT0wgYlNhdmVTcGFjZUNoYXJzLCBGWF9GSUxFU0laRSogcFBhcnNlZFNpemUpCit7CisgICAgcGFyc2VyLm1fYlNhdmVTcGFjZUNoYXJzID0gYlNhdmVTcGFjZUNoYXJzOworICAgIENYTUxfRWxlbWVudCogcEVsZW1lbnQgPSBwYXJzZXIuUGFyc2VFbGVtZW50KE5VTEwsIEZBTFNFKTsKKyAgICBpZiAocFBhcnNlZFNpemUpIHsKKyAgICAgICAgKnBQYXJzZWRTaXplID0gcGFyc2VyLm1fbk9mZnNldDsKKyAgICB9CisgICAgcmV0dXJuIHBFbGVtZW50OworfQorQ1hNTF9FbGVtZW50KiBDWE1MX0VsZW1lbnQ6OlBhcnNlKGNvbnN0IHZvaWQqIHBCdWZmZXIsIHNpemVfdCBzaXplLCBGWF9CT09MIGJTYXZlU3BhY2VDaGFycywgRlhfRklMRVNJWkUqIHBQYXJzZWRTaXplLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQoreworICAgIENYTUxfUGFyc2VyIHBhcnNlcihwQWxsb2NhdG9yKTsKKyAgICBpZiAoIXBhcnNlci5Jbml0KChGWF9MUEJZVEUpcEJ1ZmZlciwgc2l6ZSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBYTUxfQ29udGludWVQYXJzZShwYXJzZXIsIGJTYXZlU3BhY2VDaGFycywgcFBhcnNlZFNpemUpOworfQorQ1hNTF9FbGVtZW50KiBDWE1MX0VsZW1lbnQ6OlBhcnNlKElGWF9GaWxlUmVhZCAqcEZpbGUsIEZYX0JPT0wgYlNhdmVTcGFjZUNoYXJzLCBGWF9GSUxFU0laRSogcFBhcnNlZFNpemUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpCit7CisgICAgQ1hNTF9QYXJzZXIgcGFyc2VyKHBBbGxvY2F0b3IpOworICAgIGlmICghcGFyc2VyLkluaXQocEZpbGUpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gWE1MX0NvbnRpbnVlUGFyc2UocGFyc2VyLCBiU2F2ZVNwYWNlQ2hhcnMsIHBQYXJzZWRTaXplKTsKK30KK0NYTUxfRWxlbWVudCogQ1hNTF9FbGVtZW50OjpQYXJzZShJRlhfQnVmZmVyUmVhZCAqcEJ1ZmZlciwgRlhfQk9PTCBiU2F2ZVNwYWNlQ2hhcnMsIEZYX0ZJTEVTSVpFKiBwUGFyc2VkU2l6ZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikKK3sKKyAgICBDWE1MX1BhcnNlciBwYXJzZXIocEFsbG9jYXRvcik7CisgICAgaWYgKCFwYXJzZXIuSW5pdChwQnVmZmVyKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIFhNTF9Db250aW51ZVBhcnNlKHBhcnNlciwgYlNhdmVTcGFjZUNoYXJzLCBwUGFyc2VkU2l6ZSk7Cit9CitDWE1MX0VsZW1lbnQ6OkNYTUxfRWxlbWVudChJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQorICAgIDogbV9wUGFyZW50KE5VTEwpCisgICAgLCBtX1FTcGFjZU5hbWUoKQorICAgICwgbV9UYWdOYW1lKCkKKyAgICAsIG1fQXR0ck1hcCgpCisgICAgLCBtX0NoaWxkcmVuKHBBbGxvY2F0b3IpCit7Cit9CitDWE1MX0VsZW1lbnQ6OkNYTUxfRWxlbWVudChGWF9CU1RSIHFTcGFjZSwgRlhfQlNUUiB0YWdOYW1lLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQorICAgIDogbV9wUGFyZW50KE5VTEwpCisgICAgLCBtX1FTcGFjZU5hbWUoKQorICAgICwgbV9UYWdOYW1lKCkKKyAgICAsIG1fQXR0ck1hcCgpCisgICAgLCBtX0NoaWxkcmVuKHBBbGxvY2F0b3IpCit7CisgICAgbV9RU3BhY2VOYW1lLlNldChxU3BhY2UsIHBBbGxvY2F0b3IpOworICAgIG1fVGFnTmFtZS5TZXQodGFnTmFtZSwgcEFsbG9jYXRvcik7Cit9CitDWE1MX0VsZW1lbnQ6OkNYTUxfRWxlbWVudChGWF9CU1RSIHFUYWdOYW1lLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQorICAgIDogbV9wUGFyZW50KE5VTEwpCisgICAgLCBtX1FTcGFjZU5hbWUoKQorICAgICwgbV9UYWdOYW1lKCkKKyAgICAsIG1fQXR0ck1hcCgpCisgICAgLCBtX0NoaWxkcmVuKHBBbGxvY2F0b3IpCit7CisgICAgU2V0VGFnKHFUYWdOYW1lKTsKK30KK0NYTUxfRWxlbWVudDo6fkNYTUxfRWxlbWVudCgpCit7CisgICAgRW1wdHkoKTsKK30KK3ZvaWQgQ1hNTF9FbGVtZW50OjpFbXB0eSgpCit7CisgICAgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IG1fQ2hpbGRyZW4ubV9wQWxsb2NhdG9yOworICAgIG1fUVNwYWNlTmFtZS5FbXB0eShwQWxsb2NhdG9yKTsKKyAgICBtX1RhZ05hbWUuRW1wdHkocEFsbG9jYXRvcik7CisgICAgbV9BdHRyTWFwLlJlbW92ZUFsbChwQWxsb2NhdG9yKTsKKyAgICBSZW1vdmVDaGlsZHJlbigpOworfQordm9pZCBDWE1MX0VsZW1lbnQ6OlJlbW92ZUNoaWxkcmVuKCkKK3sKKyAgICBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gbV9DaGlsZHJlbi5tX3BBbGxvY2F0b3I7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX0NoaWxkcmVuLkdldFNpemUoKTsgaSArPSAyKSB7CisgICAgICAgIENoaWxkVHlwZSB0eXBlID0gKENoaWxkVHlwZSkoRlhfVUlOVFBUUiltX0NoaWxkcmVuLkdldEF0KGkpOworICAgICAgICBpZiAodHlwZSA9PSBDb250ZW50KSB7CisgICAgICAgICAgICBDWE1MX0NvbnRlbnQqIGNvbnRlbnQgPSAoQ1hNTF9Db250ZW50KiltX0NoaWxkcmVuLkdldEF0KGkgKyAxKTsKKyAgICAgICAgICAgIGlmIChwQWxsb2NhdG9yKSB7CisgICAgICAgICAgICAgICAgRlhfRGVsZXRlQXRBbGxvY2F0b3IoY29udGVudCwgcEFsbG9jYXRvciwgQ1hNTF9Db250ZW50KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVsZXRlIGNvbnRlbnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBFbGVtZW50KSB7CisgICAgICAgICAgICBDWE1MX0VsZW1lbnQqIGNoaWxkID0gKENYTUxfRWxlbWVudCopbV9DaGlsZHJlbi5HZXRBdChpICsgMSk7CisgICAgICAgICAgICBjaGlsZC0+UmVtb3ZlQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIGlmIChwQWxsb2NhdG9yKSB7CisgICAgICAgICAgICAgICAgRlhfRGVsZXRlQXRBbGxvY2F0b3IoY2hpbGQsIHBBbGxvY2F0b3IsIENYTUxfRWxlbWVudCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBjaGlsZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBtX0NoaWxkcmVuLlJlbW92ZUFsbCgpOworfQorQ0ZYX0J5dGVTdHJpbmcgQ1hNTF9FbGVtZW50OjpHZXRUYWdOYW1lKEZYX0JPT0wgYlF1YWxpZmllZCkgY29uc3QKK3sKKyAgICBpZiAoIWJRdWFsaWZpZWQgfHwgbV9RU3BhY2VOYW1lLklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gbV9UYWdOYW1lOworICAgIH0KKyAgICBDRlhfQnl0ZVN0cmluZyBic1RhZyA9IG1fUVNwYWNlTmFtZTsKKyAgICBic1RhZyArPSAiOiI7CisgICAgYnNUYWcgKz0gbV9UYWdOYW1lOworICAgIHJldHVybiBic1RhZzsKK30KK3ZvaWQgQ1hNTF9FbGVtZW50OjpHZXRUYWdOYW1lKENGWF9CeXRlU3RyaW5nTCAmdGFnTmFtZSwgRlhfQk9PTCBiUXVhbGlmaWVkKSBjb25zdAoreworICAgIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBtX0NoaWxkcmVuLm1fcEFsbG9jYXRvcjsKKyAgICBpZiAoIWJRdWFsaWZpZWQgfHwgbV9RU3BhY2VOYW1lLklzRW1wdHkoKSkgeworICAgICAgICB0YWdOYW1lLlNldChtX1RhZ05hbWUsIHBBbGxvY2F0b3IpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX0xQU1RSIHN0ciA9IHRhZ05hbWUuQWxsb2NCdWZmZXIobV9RU3BhY2VOYW1lLkdldExlbmd0aCgpICsgbV9UYWdOYW1lLkdldExlbmd0aCgpICsgMiwgcEFsbG9jYXRvcik7CisgICAgaWYgKCFzdHIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGWFNZU19tZW1jcHkzMihzdHIsIG1fUVNwYWNlTmFtZS5HZXRDU3RyKCksIG1fUVNwYWNlTmFtZS5HZXRMZW5ndGgoKSk7CisgICAgc3RyICs9IG1fUVNwYWNlTmFtZS5HZXRMZW5ndGgoKTsKKyAgICAqc3RyID0gJzonOworICAgIHN0ciArKzsKKyAgICBGWFNZU19tZW1jcHkzMihzdHIsIG1fVGFnTmFtZS5HZXRDU3RyKCksIG1fVGFnTmFtZS5HZXRMZW5ndGgoKSk7CisgICAgc3RyICs9IG1fVGFnTmFtZS5HZXRMZW5ndGgoKTsKKyAgICAqc3RyID0gJ1wwJzsKK30KK0NGWF9CeXRlU3RyaW5nIENYTUxfRWxlbWVudDo6R2V0TmFtZXNwYWNlKEZYX0JPT0wgYlF1YWxpZmllZCkgY29uc3QKK3sKKyAgICBpZiAoYlF1YWxpZmllZCkgeworICAgICAgICByZXR1cm4gbV9RU3BhY2VOYW1lOworICAgIH0KKyAgICByZXR1cm4gR2V0TmFtZXNwYWNlVVJJKG1fUVNwYWNlTmFtZSk7Cit9Cit2b2lkIENYTUxfRWxlbWVudDo6R2V0TmFtZXNwYWNlKENGWF9CeXRlU3RyaW5nTCAmbmFtZVNwYWNlLCBGWF9CT09MIGJRdWFsaWZpZWQpIGNvbnN0Cit7CisgICAgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IG1fQ2hpbGRyZW4ubV9wQWxsb2NhdG9yOworICAgIGlmIChiUXVhbGlmaWVkKSB7CisgICAgICAgIG5hbWVTcGFjZS5TZXQobV9RU3BhY2VOYW1lLCBwQWxsb2NhdG9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBHZXROYW1lc3BhY2VVUkkobV9RU3BhY2VOYW1lLCBuYW1lU3BhY2UpOworfQorQ0ZYX0J5dGVTdHJpbmcgQ1hNTF9FbGVtZW50OjpHZXROYW1lc3BhY2VVUkkoRlhfQlNUUiBxTmFtZSkgY29uc3QKK3sKKyAgICBjb25zdCBDRlhfV2lkZVN0cmluZ0wqIHB3c1NwYWNlOworICAgIGNvbnN0IENYTUxfRWxlbWVudCAqcEVsZW1lbnQgPSB0aGlzOworICAgIGRvIHsKKyAgICAgICAgaWYgKHFOYW1lLklzRW1wdHkoKSkgeworICAgICAgICAgICAgcHdzU3BhY2UgPSBwRWxlbWVudC0+bV9BdHRyTWFwLkxvb2t1cChGWF9CU1RSQygiIiksIEZYX0JTVFJDKCJ4bWxucyIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB3c1NwYWNlID0gcEVsZW1lbnQtPm1fQXR0ck1hcC5Mb29rdXAoRlhfQlNUUkMoInhtbG5zIiksIHFOYW1lKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocHdzU3BhY2UpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHBFbGVtZW50ID0gcEVsZW1lbnQtPkdldFBhcmVudCgpOworICAgIH0gd2hpbGUocEVsZW1lbnQpOworICAgIHJldHVybiBwd3NTcGFjZSA/IEZYX1VURjhFbmNvZGUoKnB3c1NwYWNlKSA6IENGWF9CeXRlU3RyaW5nKCk7Cit9Cit2b2lkIENYTUxfRWxlbWVudDo6R2V0TmFtZXNwYWNlVVJJKEZYX0JTVFIgcU5hbWUsIENGWF9CeXRlU3RyaW5nTCAmdXJpKSBjb25zdAoreworICAgIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBtX0NoaWxkcmVuLm1fcEFsbG9jYXRvcjsKKyAgICBjb25zdCBDRlhfV2lkZVN0cmluZ0wqIHB3c1NwYWNlOworICAgIGNvbnN0IENYTUxfRWxlbWVudCAqcEVsZW1lbnQgPSB0aGlzOworICAgIGRvIHsKKyAgICAgICAgaWYgKHFOYW1lLklzRW1wdHkoKSkgeworICAgICAgICAgICAgcHdzU3BhY2UgPSBwRWxlbWVudC0+bV9BdHRyTWFwLkxvb2t1cChGWF9CU1RSQygiIiksIEZYX0JTVFJDKCJ4bWxucyIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB3c1NwYWNlID0gcEVsZW1lbnQtPm1fQXR0ck1hcC5Mb29rdXAoRlhfQlNUUkMoInhtbG5zIiksIHFOYW1lKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocHdzU3BhY2UpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHBFbGVtZW50ID0gcEVsZW1lbnQtPkdldFBhcmVudCgpOworICAgIH0gd2hpbGUocEVsZW1lbnQpOworICAgIGlmIChwd3NTcGFjZSkgeworICAgICAgICBGWF9VVEY4RW5jb2RlKHB3c1NwYWNlLT5HZXRQdHIoKSwgcHdzU3BhY2UtPkdldExlbmd0aCgpLCB1cmksIHBBbGxvY2F0b3IpOworICAgIH0KK30KK3ZvaWQgQ1hNTF9FbGVtZW50OjpHZXRBdHRyQnlJbmRleChpbnQgaW5kZXgsIENGWF9CeXRlU3RyaW5nJiBzcGFjZSwgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUsIENGWF9XaWRlU3RyaW5nJiB2YWx1ZSkgY29uc3QKK3sKKyAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1fQXR0ck1hcC5HZXRTaXplKCkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDWE1MX0F0dHJJdGVtJiBpdGVtID0gbV9BdHRyTWFwLkdldEF0KGluZGV4KTsKKyAgICBzcGFjZSA9IGl0ZW0ubV9RU3BhY2VOYW1lOworICAgIG5hbWUgPSBpdGVtLm1fQXR0ck5hbWU7CisgICAgdmFsdWUgPSBpdGVtLm1fVmFsdWU7Cit9Cit2b2lkIENYTUxfRWxlbWVudDo6R2V0QXR0ckJ5SW5kZXgoaW50IGluZGV4LCBDRlhfQnl0ZVN0cmluZ0wgJnNwYWNlLCBDRlhfQnl0ZVN0cmluZ0wgJm5hbWUsIENGWF9XaWRlU3RyaW5nTCAmdmFsdWUpIGNvbnN0Cit7CisgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBtX0F0dHJNYXAuR2V0U2l6ZSgpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IG1fQ2hpbGRyZW4ubV9wQWxsb2NhdG9yOworICAgIENYTUxfQXR0ckl0ZW0mIGl0ZW0gPSBtX0F0dHJNYXAuR2V0QXQoaW5kZXgpOworICAgIHNwYWNlLlNldChpdGVtLm1fUVNwYWNlTmFtZSwgcEFsbG9jYXRvcik7CisgICAgbmFtZS5TZXQoaXRlbS5tX0F0dHJOYW1lLCBwQWxsb2NhdG9yKTsKKyAgICB2YWx1ZS5TZXQoaXRlbS5tX1ZhbHVlLCBwQWxsb2NhdG9yKTsKK30KK0ZYX0JPT0wgQ1hNTF9FbGVtZW50OjpIYXNBdHRyKEZYX0JTVFIgbmFtZSkgY29uc3QKK3sKKyAgICBDRlhfQnl0ZVN0cmluZ0MgYnNTcGFjZSwgYnNOYW1lOworICAgIEZYX1hNTF9TcGxpdFF1YWxpZmllZE5hbWUobmFtZSwgYnNTcGFjZSwgYnNOYW1lKTsKKyAgICByZXR1cm4gbV9BdHRyTWFwLkxvb2t1cChic1NwYWNlLCBic05hbWUpICE9IE5VTEw7Cit9CitGWF9CT09MIENYTUxfRWxlbWVudDo6R2V0QXR0clZhbHVlKEZYX0JTVFIgbmFtZSwgQ0ZYX1dpZGVTdHJpbmcmIGF0dHJpYnV0ZSkgY29uc3QKK3sKKyAgICBDRlhfQnl0ZVN0cmluZ0MgYnNTcGFjZSwgYnNOYW1lOworICAgIEZYX1hNTF9TcGxpdFF1YWxpZmllZE5hbWUobmFtZSwgYnNTcGFjZSwgYnNOYW1lKTsKKyAgICBjb25zdCBDRlhfV2lkZVN0cmluZ0wqIHBWYWx1ZSA9IG1fQXR0ck1hcC5Mb29rdXAoYnNTcGFjZSwgYnNOYW1lKTsKKyAgICBpZiAocFZhbHVlKSB7CisgICAgICAgIGF0dHJpYnV0ZSA9IENGWF9XaWRlU3RyaW5nKHBWYWx1ZS0+R2V0UHRyKCksIHBWYWx1ZS0+R2V0TGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorY29uc3QgQ0ZYX1dpZGVTdHJpbmdMKiBDWE1MX0VsZW1lbnQ6OkdldEF0dHJWYWx1ZVB0cihGWF9CU1RSIG5hbWUpIGNvbnN0Cit7CisgICAgQ0ZYX0J5dGVTdHJpbmdDIGJzU3BhY2UsIGJzTmFtZTsKKyAgICBGWF9YTUxfU3BsaXRRdWFsaWZpZWROYW1lKG5hbWUsIGJzU3BhY2UsIGJzTmFtZSk7CisgICAgcmV0dXJuIG1fQXR0ck1hcC5Mb29rdXAoYnNTcGFjZSwgYnNOYW1lKTsKK30KK0ZYX0JPT0wgQ1hNTF9FbGVtZW50OjpHZXRBdHRyVmFsdWUoRlhfQlNUUiBzcGFjZSwgRlhfQlNUUiBuYW1lLCBDRlhfV2lkZVN0cmluZyYgYXR0cmlidXRlKSBjb25zdAoreworICAgIGNvbnN0IENGWF9XaWRlU3RyaW5nTCogcFZhbHVlID0gbV9BdHRyTWFwLkxvb2t1cChzcGFjZSwgbmFtZSk7CisgICAgaWYgKHBWYWx1ZSkgeworICAgICAgICBhdHRyaWJ1dGUgPSBDRlhfV2lkZVN0cmluZyhwVmFsdWUtPkdldFB0cigpLCBwVmFsdWUtPkdldExlbmd0aCgpKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK2NvbnN0IENGWF9XaWRlU3RyaW5nTCogQ1hNTF9FbGVtZW50OjpHZXRBdHRyVmFsdWVQdHIoRlhfQlNUUiBzcGFjZSwgRlhfQlNUUiBuYW1lKSBjb25zdAoreworICAgIHJldHVybiBtX0F0dHJNYXAuTG9va3VwKHNwYWNlLCBuYW1lKTsKK30KK0ZYX0JPT0wgQ1hNTF9FbGVtZW50OjpHZXRBdHRySW50ZWdlcihGWF9CU1RSIG5hbWUsIGludCYgYXR0cmlidXRlKSBjb25zdAoreworICAgIENGWF9CeXRlU3RyaW5nQyBic1NwYWNlLCBic05hbWU7CisgICAgRlhfWE1MX1NwbGl0UXVhbGlmaWVkTmFtZShuYW1lLCBic1NwYWNlLCBic05hbWUpOworICAgIGNvbnN0IENGWF9XaWRlU3RyaW5nTCogcHdzVmFsdWUgPSBtX0F0dHJNYXAuTG9va3VwKGJzU3BhY2UsIGJzTmFtZSk7CisgICAgaWYgKHB3c1ZhbHVlKSB7CisgICAgICAgIGF0dHJpYnV0ZSA9IHB3c1ZhbHVlLT5HZXRJbnRlZ2VyKCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitGWF9CT09MCUNYTUxfRWxlbWVudDo6R2V0QXR0ckludGVnZXIoRlhfQlNUUiBzcGFjZSwgRlhfQlNUUiBuYW1lLCBpbnQmIGF0dHJpYnV0ZSkgY29uc3QKK3sKKyAgICBjb25zdCBDRlhfV2lkZVN0cmluZ0wqIHB3c1ZhbHVlID0gbV9BdHRyTWFwLkxvb2t1cChzcGFjZSwgbmFtZSk7CisgICAgaWYgKHB3c1ZhbHVlKSB7CisgICAgICAgIGF0dHJpYnV0ZSA9IHB3c1ZhbHVlLT5HZXRJbnRlZ2VyKCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitGWF9CT09MIENYTUxfRWxlbWVudDo6R2V0QXR0ckZsb2F0KEZYX0JTVFIgbmFtZSwgRlhfRkxPQVQmIGF0dHJpYnV0ZSkgY29uc3QKK3sKKyAgICBDRlhfQnl0ZVN0cmluZ0MgYnNTcGFjZSwgYnNOYW1lOworICAgIEZYX1hNTF9TcGxpdFF1YWxpZmllZE5hbWUobmFtZSwgYnNTcGFjZSwgYnNOYW1lKTsKKyAgICByZXR1cm4gR2V0QXR0ckZsb2F0KGJzU3BhY2UsIGJzTmFtZSwgYXR0cmlidXRlKTsKK30KK0ZYX0JPT0wgQ1hNTF9FbGVtZW50OjpHZXRBdHRyRmxvYXQoRlhfQlNUUiBzcGFjZSwgRlhfQlNUUiBuYW1lLCBGWF9GTE9BVCYgYXR0cmlidXRlKSBjb25zdAoreworICAgIENGWF9XaWRlU3RyaW5nIHZhbHVlOworICAgIGNvbnN0IENGWF9XaWRlU3RyaW5nTCogcFZhbHVlID0gbV9BdHRyTWFwLkxvb2t1cChzcGFjZSwgbmFtZSk7CisgICAgaWYgKHBWYWx1ZSkgeworICAgICAgICBhdHRyaWJ1dGUgPSBwVmFsdWUtPkdldEZsb2F0KCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitGWF9EV09SRCBDWE1MX0VsZW1lbnQ6OkNvdW50Q2hpbGRyZW4oKSBjb25zdAoreworICAgIHJldHVybiBtX0NoaWxkcmVuLkdldFNpemUoKSAvIDI7Cit9CitDWE1MX0VsZW1lbnQ6OkNoaWxkVHlwZSBDWE1MX0VsZW1lbnQ6OkdldENoaWxkVHlwZShGWF9EV09SRCBpbmRleCkgY29uc3QKK3sKKyAgICBpbmRleCA8PD0gMTsKKyAgICBpZiAoaW5kZXggPj0gKEZYX0RXT1JEKW1fQ2hpbGRyZW4uR2V0U2l6ZSgpKSB7CisgICAgICAgIHJldHVybiBJbnZhbGlkOworICAgIH0KKyAgICByZXR1cm4gKENoaWxkVHlwZSkoRlhfVUlOVFBUUiltX0NoaWxkcmVuLkdldEF0KGluZGV4KTsKK30KK0NGWF9XaWRlU3RyaW5nIENYTUxfRWxlbWVudDo6R2V0Q29udGVudChGWF9EV09SRCBpbmRleCkgY29uc3QKK3sKKyAgICBpbmRleCA8PD0gMTsKKyAgICBpZiAoaW5kZXggPj0gKEZYX0RXT1JEKW1fQ2hpbGRyZW4uR2V0U2l6ZSgpIHx8CisgICAgICAgICAgICAoQ2hpbGRUeXBlKShGWF9VSU5UUFRSKW1fQ2hpbGRyZW4uR2V0QXQoaW5kZXgpICE9IENvbnRlbnQpIHsKKyAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7CisgICAgfQorICAgIENYTUxfQ29udGVudCogcENvbnRlbnQgPSAoQ1hNTF9Db250ZW50KiltX0NoaWxkcmVuLkdldEF0KGluZGV4ICsgMSk7CisgICAgaWYgKHBDb250ZW50KSB7CisgICAgICAgIHJldHVybiBwQ29udGVudC0+bV9Db250ZW50OworICAgIH0KKyAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsKK30KK2NvbnN0IENGWF9XaWRlU3RyaW5nTCogQ1hNTF9FbGVtZW50OjpHZXRDb250ZW50UHRyKEZYX0RXT1JEIGluZGV4KSBjb25zdAoreworICAgIGluZGV4IDw8PSAxOworICAgIGlmIChpbmRleCA+PSAoRlhfRFdPUkQpbV9DaGlsZHJlbi5HZXRTaXplKCkgfHwKKyAgICAgICAgICAgIChDaGlsZFR5cGUpKEZYX1VJTlRQVFIpbV9DaGlsZHJlbi5HZXRBdChpbmRleCkgIT0gQ29udGVudCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ1hNTF9Db250ZW50KiBwQ29udGVudCA9IChDWE1MX0NvbnRlbnQqKW1fQ2hpbGRyZW4uR2V0QXQoaW5kZXggKyAxKTsKKyAgICBpZiAocENvbnRlbnQpIHsKKyAgICAgICAgcmV0dXJuICZwQ29udGVudC0+bV9Db250ZW50OworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK0NYTUxfRWxlbWVudCogQ1hNTF9FbGVtZW50OjpHZXRFbGVtZW50KEZYX0RXT1JEIGluZGV4KSBjb25zdAoreworICAgIGluZGV4IDw8PSAxOworICAgIGlmIChpbmRleCA+PSAoRlhfRFdPUkQpbV9DaGlsZHJlbi5HZXRTaXplKCkgfHwKKyAgICAgICAgICAgIChDaGlsZFR5cGUpKEZYX1VJTlRQVFIpbV9DaGlsZHJlbi5HZXRBdChpbmRleCkgIT0gRWxlbWVudCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIChDWE1MX0VsZW1lbnQqKW1fQ2hpbGRyZW4uR2V0QXQoaW5kZXggKyAxKTsKK30KK0ZYX0RXT1JEIENYTUxfRWxlbWVudDo6Q291bnRFbGVtZW50cyhGWF9CU1RSIHNwYWNlLCBGWF9CU1RSIHRhZykgY29uc3QKK3sKKyAgICBpbnQgY291bnQgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9DaGlsZHJlbi5HZXRTaXplKCk7IGkgKz0gMikgeworICAgICAgICBDaGlsZFR5cGUgdHlwZSA9IChDaGlsZFR5cGUpKEZYX1VJTlRQVFIpbV9DaGlsZHJlbi5HZXRBdChpKTsKKyAgICAgICAgaWYgKHR5cGUgIT0gRWxlbWVudCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgQ1hNTF9FbGVtZW50KiBwS2lkID0gKENYTUxfRWxlbWVudCopbV9DaGlsZHJlbi5HZXRBdChpICsgMSk7CisgICAgICAgIGlmICgoc3BhY2UuSXNFbXB0eSgpIHx8IHBLaWQtPm1fUVNwYWNlTmFtZSA9PSBzcGFjZSkgJiYgcEtpZC0+bV9UYWdOYW1lID09IHRhZykgeworICAgICAgICAgICAgY291bnQgKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNvdW50OworfQorQ1hNTF9FbGVtZW50KiBDWE1MX0VsZW1lbnQ6OkdldEVsZW1lbnQoRlhfQlNUUiBzcGFjZSwgRlhfQlNUUiB0YWcsIGludCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAoaW5kZXggPCAwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fQ2hpbGRyZW4uR2V0U2l6ZSgpOyBpICs9IDIpIHsKKyAgICAgICAgQ2hpbGRUeXBlIHR5cGUgPSAoQ2hpbGRUeXBlKShGWF9VSU5UUFRSKW1fQ2hpbGRyZW4uR2V0QXQoaSk7CisgICAgICAgIGlmICh0eXBlICE9IEVsZW1lbnQpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIENYTUxfRWxlbWVudCogcEtpZCA9IChDWE1MX0VsZW1lbnQqKW1fQ2hpbGRyZW4uR2V0QXQoaSArIDEpOworICAgICAgICBpZiAoKCFzcGFjZS5Jc0VtcHR5KCkgJiYgcEtpZC0+bV9RU3BhY2VOYW1lICE9IHNwYWNlKSB8fCBwS2lkLT5tX1RhZ05hbWUgIT0gdGFnKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5kZXggLS0gPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIHBLaWQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CitGWF9EV09SRCBDWE1MX0VsZW1lbnQ6OkZpbmRFbGVtZW50KENYTUxfRWxlbWVudCAqcENoaWxkKSBjb25zdAoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9DaGlsZHJlbi5HZXRTaXplKCk7IGkgKz0gMikgeworICAgICAgICBpZiAoKENoaWxkVHlwZSkoRlhfVUlOVFBUUiltX0NoaWxkcmVuLkdldEF0KGkpID09IEVsZW1lbnQgJiYKKyAgICAgICAgICAgICAgICAoQ1hNTF9FbGVtZW50KiltX0NoaWxkcmVuLkdldEF0KGkgKyAxKSA9PSBwQ2hpbGQpIHsKKyAgICAgICAgICAgIHJldHVybiAoRlhfRFdPUkQpKGkgPj4gMSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIChGWF9EV09SRCkgLSAxOworfQorY29uc3QgQ0ZYX1dpZGVTdHJpbmdMKiBDWE1MX0F0dHJNYXA6Okxvb2t1cChGWF9CU1RSIHNwYWNlLCBGWF9CU1RSIG5hbWUpIGNvbnN0Cit7CisgICAgaWYgKG1fcE1hcCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fcE1hcC0+R2V0U2l6ZSgpOyBpICsrKSB7CisgICAgICAgIENYTUxfQXR0ckl0ZW0mIGl0ZW0gPSBHZXRBdChpKTsKKyAgICAgICAgaWYgKChzcGFjZS5Jc0VtcHR5KCkgfHwgaXRlbS5tX1FTcGFjZU5hbWUgPT0gc3BhY2UpICYmIGl0ZW0ubV9BdHRyTmFtZSA9PSBuYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gJml0ZW0ubV9WYWx1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK3ZvaWQgQ1hNTF9BdHRyTWFwOjpTZXRBdChGWF9CU1RSIHNwYWNlLCBGWF9CU1RSIG5hbWUsIEZYX1dTVFIgdmFsdWUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBHZXRTaXplKCk7IGkgKyspIHsKKyAgICAgICAgQ1hNTF9BdHRySXRlbSYgaXRlbSA9IEdldEF0KGkpOworICAgICAgICBpZiAoKHNwYWNlLklzRW1wdHkoKSB8fCBpdGVtLm1fUVNwYWNlTmFtZSA9PSBzcGFjZSkgJiYgaXRlbS5tX0F0dHJOYW1lID09IG5hbWUpIHsKKyAgICAgICAgICAgIGl0ZW0ubV9WYWx1ZS5TZXQodmFsdWUsIHBBbGxvY2F0b3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIGlmICghbV9wTWFwKSB7CisgICAgICAgIGlmIChwQWxsb2NhdG9yKSB7CisgICAgICAgICAgICBtX3BNYXAgPSBGWF9OZXdBdEFsbG9jYXRvcihwQWxsb2NhdG9yKUNGWF9PYmplY3RBcnJheTxDWE1MX0F0dHJJdGVtPihwQWxsb2NhdG9yKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fcE1hcCA9IEZYX05FVyBDRlhfT2JqZWN0QXJyYXk8Q1hNTF9BdHRySXRlbT47CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFtX3BNYXApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDWE1MX0F0dHJJdGVtKiBwSXRlbSA9IChDWE1MX0F0dHJJdGVtKiltX3BNYXAtPkFkZFNwYWNlKCk7CisgICAgaWYgKCFwSXRlbSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHBJdGVtLT5tX1FTcGFjZU5hbWUuU2V0KHNwYWNlLCBwQWxsb2NhdG9yKTsKKyAgICBwSXRlbS0+bV9BdHRyTmFtZS5TZXQobmFtZSwgcEFsbG9jYXRvcik7CisgICAgcEl0ZW0tPm1fVmFsdWUuU2V0KHZhbHVlLCBwQWxsb2NhdG9yKTsKK30KK3ZvaWQgQ1hNTF9BdHRyTWFwOjpSZW1vdmVBdChGWF9CU1RSIHNwYWNlLCBGWF9CU1RSIG5hbWUsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpCit7CisgICAgaWYgKG1fcE1hcCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3BNYXAtPkdldFNpemUoKTsgaSArKykgeworICAgICAgICBDWE1MX0F0dHJJdGVtJiBpdGVtID0gR2V0QXQoaSk7CisgICAgICAgIGlmICgoc3BhY2UuSXNFbXB0eSgpIHx8IGl0ZW0ubV9RU3BhY2VOYW1lID09IHNwYWNlKSAmJiBpdGVtLm1fQXR0ck5hbWUgPT0gbmFtZSkgeworICAgICAgICAgICAgaXRlbS5FbXB0eShwQWxsb2NhdG9yKTsKKyAgICAgICAgICAgIG1fcE1hcC0+UmVtb3ZlQXQoaSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CitpbnQgQ1hNTF9BdHRyTWFwOjpHZXRTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wTWFwID09IE5VTEwgPyAwIDogbV9wTWFwLT5HZXRTaXplKCk7Cit9CitDWE1MX0F0dHJJdGVtJiBDWE1MX0F0dHJNYXA6OkdldEF0KGludCBpbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wTWFwICE9IE5VTEwpOworICAgIHJldHVybiAoKm1fcE1hcClbaW5kZXhdOworfQordm9pZCBDWE1MX0F0dHJNYXA6OlJlbW92ZUFsbChJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQoreworICAgIGlmICghbV9wTWFwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3BNYXAtPkdldFNpemUoKTsgaSArKykgeworICAgICAgICBDWE1MX0F0dHJJdGVtJiBpdGVtID0gKCptX3BNYXApW2ldOworICAgICAgICBpdGVtLkVtcHR5KHBBbGxvY2F0b3IpOworICAgIH0KKyAgICBtX3BNYXAtPlJlbW92ZUFsbCgpOworICAgIGlmIChwQWxsb2NhdG9yKSB7CisgICAgICAgIEZYX0RlbGV0ZUF0QWxsb2NhdG9yKG1fcE1hcCwgcEFsbG9jYXRvciwgQ0ZYX09iamVjdEFycmF5PENYTUxfQXR0ckl0ZW0+KTsKKyAgICB9IGVsc2UgeworICAgICAgICBkZWxldGUgbV9wTWFwOworICAgIH0KKyAgICBtX3BNYXAgPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjcnQvZnhjcnRfcGxhdGZvcm1zLmNwcCBiL2NvcmUvc3JjL2Z4Y3J0L2Z4Y3J0X3BsYXRmb3Jtcy5jcHAKaW5kZXggMTQ3OWI3Yi4uN2ZiM2FkYSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjcnQvZnhjcnRfcGxhdGZvcm1zLmNwcAorKysgYi9jb3JlL3NyYy9meGNydC9meGNydF9wbGF0Zm9ybXMuY3BwCkBAIC0xLDIwMyArMSwyMDMgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2V4dC5oIg0KLSNpbmNsdWRlICJmeGNydF9wbGF0Zm9ybXMuaCINCi0jaWYgKF9GWE1fUExBVEZPUk1fICE9IF9GWE1fUExBVEZPUk1fV0lORE9XU18gJiYgX0ZYTV9QTEFURk9STV8gIT0gX0ZYTV9QTEFURk9STV9MSU5VWF8gJiYgX0ZYTV9QTEFURk9STV8gIT0gX0ZYTV9QTEFURk9STV9BUFBMRV8gJiYgX0ZYTV9QTEFURk9STV8gIT0gX0ZYTV9QTEFURk9STV9BTkRST0lEXykNCi1JRlhDUlRfRmlsZUFjY2VzcyogRlhDUlRfRmlsZUFjY2Vzc19DcmVhdGUoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikNCi17DQotICAgIGlmIChwQWxsb2NhdG9yKSB7DQotICAgICAgICByZXR1cm4gRlhfTmV3QXRBbGxvY2F0b3IocEFsbG9jYXRvcikgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfQ1JUOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmV0dXJuIEZYX05FVyBDRlhDUlRfRmlsZUFjY2Vzc19DUlQ7DQotICAgIH0NCi19DQotdm9pZCBGWENSVF9HZXRGaWxlTW9kZVN0cmluZyhGWF9EV09SRCBkd01vZGVzLCBDRlhfQnl0ZVN0cmluZyAmYnNNb2RlKQ0KLXsNCi0gICAgaWYgKGR3TW9kZXMgJiBGWF9GSUxFTU9ERV9SZWFkT25seSkgew0KLSAgICAgICAgYnNNb2RlID0gRlhfQlNUUkMoInJiIik7DQotICAgIH0gZWxzZSBpZiAoZHdNb2RlcyAmIEZYX0ZJTEVNT0RFX1RydW5jYXRlKSB7DQotICAgICAgICBic01vZGUgPSBGWF9CU1RSQygidytiIik7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBic01vZGUgPSBGWF9CU1RSQygiYStiIik7DQotICAgIH0NCi19DQotdm9pZCBGWENSVF9HZXRGaWxlTW9kZVN0cmluZyhGWF9EV09SRCBkd01vZGVzLCBDRlhfV2lkZVN0cmluZyAmd3NNb2RlKQ0KLXsNCi0gICAgaWYgKGR3TW9kZXMgJiBGWF9GSUxFTU9ERV9SZWFkT25seSkgew0KLSAgICAgICAgd3NNb2RlID0gRlhfV1NUUkMoTCJyYiIpOw0KLSAgICB9IGVsc2UgaWYgKGR3TW9kZXMgJiBGWF9GSUxFTU9ERV9UcnVuY2F0ZSkgew0KLSAgICAgICAgd3NNb2RlID0gRlhfV1NUUkMoTCJ3K2IiKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHdzTW9kZSA9IEZYX1dTVFJDKEwiYStiIik7DQotICAgIH0NCi19DQotQ0ZYQ1JUX0ZpbGVBY2Nlc3NfQ1JUOjpDRlhDUlRfRmlsZUFjY2Vzc19DUlQoKQ0KLSAgICA6IG1faEZpbGUoTlVMTCkNCi17DQotfQ0KLUNGWENSVF9GaWxlQWNjZXNzX0NSVDo6fkNGWENSVF9GaWxlQWNjZXNzX0NSVCgpDQotew0KLSAgICBDbG9zZSgpOw0KLX0NCi1GWF9CT09MIENGWENSVF9GaWxlQWNjZXNzX0NSVDo6T3BlbihGWF9CU1RSIGZpbGVOYW1lLCBGWF9EV09SRCBkd01vZGUpDQotew0KLSAgICBpZiAobV9oRmlsZSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIHN0ck1vZGU7DQotICAgIEZYQ1JUX0dldEZpbGVNb2RlU3RyaW5nKGR3TW9kZSwgc3RyTW9kZSk7DQotICAgIG1faEZpbGUgPSBGWFNZU19mb3BlbihmaWxlTmFtZS5HZXRDU3RyKCksIChGWF9MUENTVFIpc3RyTW9kZSk7DQotICAgIHJldHVybiBtX2hGaWxlICE9IE5VTEw7DQotfQ0KLUZYX0JPT0wgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfQ1JUOjpPcGVuKEZYX1dTVFIgZmlsZU5hbWUsIEZYX0RXT1JEIGR3TW9kZSkNCi17DQotICAgIGlmIChtX2hGaWxlKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ0ZYX1dpZGVTdHJpbmcgc3RyTW9kZTsNCi0gICAgRlhDUlRfR2V0RmlsZU1vZGVTdHJpbmcoZHdNb2RlLCBzdHJNb2RlKTsNCi0gICAgbV9oRmlsZSA9IEZYU1lTX3dmb3BlbihmaWxlTmFtZS5HZXRQdHIoKSwgKEZYX0xQQ1dTVFIpc3RyTW9kZSk7DQotICAgIHJldHVybiBtX2hGaWxlICE9IE5VTEw7DQotfQ0KLXZvaWQgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfQ1JUOjpDbG9zZSgpDQotew0KLSAgICBpZiAoIW1faEZpbGUpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWFNZU19mY2xvc2UobV9oRmlsZSk7DQotICAgIG1faEZpbGUgPSBOVUxMOw0KLX0NCi12b2lkIENGWENSVF9GaWxlQWNjZXNzX0NSVDo6UmVsZWFzZShJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQ0KLXsNCi0gICAgaWYgKHBBbGxvY2F0b3IpIHsNCi0gICAgICAgIEZYX0RlbGV0ZUF0QWxsb2NhdG9yKHRoaXMsIHBBbGxvY2F0b3IsIENGWENSVF9GaWxlQWNjZXNzX0NSVCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBkZWxldGUgdGhpczsNCi0gICAgfQ0KLX0NCi1GWF9GSUxFU0laRSBDRlhDUlRfRmlsZUFjY2Vzc19DUlQ6OkdldFNpemUoKSBjb25zdA0KLXsNCi0gICAgaWYgKCFtX2hGaWxlKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBGWF9GSUxFU0laRSBwb3MgPSAoRlhfRklMRVNJWkUpRlhTWVNfZnRlbGwobV9oRmlsZSk7DQotICAgIEZYU1lTX2ZzZWVrKG1faEZpbGUsIDAsIEZYU1lTX1NFRUtfRU5EKTsNCi0gICAgRlhfRklMRVNJWkUgc2l6ZSA9IChGWF9GSUxFU0laRSlGWFNZU19mdGVsbChtX2hGaWxlKTsNCi0gICAgRlhTWVNfZnNlZWsobV9oRmlsZSwgcG9zLCBGWFNZU19TRUVLX1NFVCk7DQotICAgIHJldHVybiBzaXplOw0KLX0NCi1GWF9GSUxFU0laRSBDRlhDUlRfRmlsZUFjY2Vzc19DUlQ6OkdldFBvc2l0aW9uKCkgY29uc3QNCi17DQotICAgIGlmICghbV9oRmlsZSkgew0KLSAgICAgICAgcmV0dXJuIChGWF9GSUxFU0laRSkgLSAxOw0KLSAgICB9DQotICAgIHJldHVybiAoRlhfRklMRVNJWkUpRlhTWVNfZnRlbGwobV9oRmlsZSk7DQotfQ0KLUZYX0ZJTEVTSVpFIENGWENSVF9GaWxlQWNjZXNzX0NSVDo6U2V0UG9zaXRpb24oRlhfRklMRVNJWkUgcG9zKQ0KLXsNCi0gICAgaWYgKCFtX2hGaWxlKSB7DQotICAgICAgICByZXR1cm4gKEZYX0ZJTEVTSVpFKSAtIDE7DQotICAgIH0NCi0gICAgRlhTWVNfZnNlZWsobV9oRmlsZSwgcG9zLCBGWFNZU19TRUVLX1NFVCk7DQotICAgIHJldHVybiAoRlhfRklMRVNJWkUpRlhTWVNfZnRlbGwobV9oRmlsZSk7DQotfQ0KLXNpemVfdCBDRlhDUlRfRmlsZUFjY2Vzc19DUlQ6OlJlYWQodm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyKQ0KLXsNCi0gICAgaWYgKCFtX2hGaWxlKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICByZXR1cm4gRlhTWVNfZnJlYWQocEJ1ZmZlciwgMSwgc3pCdWZmZXIsIG1faEZpbGUpOw0KLX0NCi1zaXplX3QgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfQ1JUOjpXcml0ZShjb25zdCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIpDQotew0KLSAgICBpZiAoIW1faEZpbGUpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIHJldHVybiBGWFNZU19md3JpdGUocEJ1ZmZlciwgMSwgc3pCdWZmZXIsIG1faEZpbGUpOw0KLX0NCi1zaXplX3QgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfQ1JUOjpSZWFkUG9zKHZvaWQqIHBCdWZmZXIsIHNpemVfdCBzekJ1ZmZlciwgRlhfRklMRVNJWkUgcG9zKQ0KLXsNCi0gICAgaWYgKCFtX2hGaWxlKSB7DQotICAgICAgICByZXR1cm4gKEZYX0ZJTEVTSVpFKSAtIDE7DQotICAgIH0NCi0gICAgRlhTWVNfZnNlZWsobV9oRmlsZSwgcG9zLCBGWFNZU19TRUVLX1NFVCk7DQotICAgIHJldHVybiBGWFNZU19mcmVhZChwQnVmZmVyLCAxLCBzekJ1ZmZlciwgbV9oRmlsZSk7DQotfQ0KLXNpemVfdCBDRlhDUlRfRmlsZUFjY2Vzc19DUlQ6OldyaXRlUG9zKGNvbnN0IHZvaWQqIHBCdWZmZXIsIHNpemVfdCBzekJ1ZmZlciwgRlhfRklMRVNJWkUgcG9zKQ0KLXsNCi0gICAgaWYgKCFtX2hGaWxlKSB7DQotICAgICAgICByZXR1cm4gKEZYX0ZJTEVTSVpFKSAtIDE7DQotICAgIH0NCi0gICAgRlhTWVNfZnNlZWsobV9oRmlsZSwgcG9zLCBGWFNZU19TRUVLX1NFVCk7DQotICAgIHJldHVybiBGWFNZU19md3JpdGUocEJ1ZmZlciwgMSwgc3pCdWZmZXIsIG1faEZpbGUpOw0KLX0NCi1GWF9CT09MIENGWENSVF9GaWxlQWNjZXNzX0NSVDo6Rmx1c2goKQ0KLXsNCi0gICAgaWYgKCFtX2hGaWxlKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgcmV0dXJuICFGWFNZU19mZmx1c2gobV9oRmlsZSk7DQotfQ0KLUZYX0JPT0wgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfQ1JUOjpUcnVuY2F0ZShGWF9GSUxFU0laRSBzekZpbGUpDQotew0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUZYX0JPT0wgRlhfRmlsZV9FeGlzdChGWF9CU1RSIGZpbGVOYW1lKQ0KLXsNCi0gICAgcmV0dXJuIGFjY2VzcyhmaWxlTmFtZS5HZXRDU3RyKCksIEZfT0spID4gLTE7DQotfQ0KLUZYX0JPT0wgRlhfRmlsZV9FeGlzdChGWF9XU1RSIGZpbGVOYW1lKQ0KLXsNCi0gICAgcmV0dXJuIEZYX0ZpbGVfRXhpc3QoRlhfVVRGOEVuY29kZShmaWxlTmFtZSkpOw0KLX0NCi1GWF9CT09MIEZYX0ZpbGVfRGVsZXRlKEZYX0JTVFIgZmlsZU5hbWUpDQotew0KLSAgICByZXR1cm4gcmVtb3ZlKGZpbGVOYW1lLkdldENTdHIoKSkgPiAtMTsNCi19DQotRlhfQk9PTCBGWF9GaWxlX0RlbGV0ZShGWF9XU1RSIGZpbGVOYW1lKQ0KLXsNCi0gICAgcmV0dXJuIEZYX0ZpbGVfRGVsZXRlKEZYX1VURjhFbmNvZGUoZmlsZU5hbWUpKTsNCi19DQotRlhfQk9PTCBGWF9GaWxlX0NvcHkoRlhfQlNUUiBmaWxlTmFtZVNyYywgRlhfQlNUUiBmaWxlTmFtZURzdCkNCi17DQotICAgIENGWENSVF9GaWxlQWNjZXNzX0NSVCBzcmMsIGRzdDsNCi0gICAgaWYgKCFzcmMuT3BlbihmaWxlTmFtZVNyYywgRlhfRklMRU1PREVfUmVhZE9ubHkpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgRlhfRklMRVNJWkUgc2l6ZSA9IHNyYy5HZXRTaXplKCk7DQotICAgIGlmICghc2l6ZSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmICghZHN0Lk9wZW4oZmlsZU5hbWVEc3QsIEZYX0ZJTEVNT0RFX1RydW5jYXRlKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYX0ZJTEVTSVpFIG51bSA9IDA7DQotICAgIEZYX0xQQllURSBwQnVmZmVyID0gRlhfQWxsb2MoRlhfQllURSwgMzI3NjgpOw0KLSAgICBpZiAoIXBCdWZmZXIpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICB3aGlsZSAobnVtID0gc3JjLlJlYWQocEJ1ZmZlciwgMzI3NjgpKSB7DQotICAgICAgICBpZiAoZHN0LldyaXRlKHBCdWZmZXIsIG51bSkgIT0gbnVtKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhfRnJlZShwQnVmZmVyKTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgRlhfRmlsZV9Db3B5KEZYX1dTVFIgZmlsZU5hbWVTcmMsIEZYX1dTVFIgZmlsZU5hbWVEc3QpDQotew0KLSAgICByZXR1cm4gRlhfRmlsZV9Db3B5KEZYX1VURjhFbmNvZGUoZmlsZU5hbWVTcmMpLCBGWF9VVEY4RW5jb2RlKGZpbGVOYW1lRHN0KSk7DQotfQ0KLUZYX0JPT0wgRlhfRmlsZV9Nb3ZlKEZYX0JTVFIgZmlsZU5hbWVTcmMsIEZYX0JTVFIgZmlsZU5hbWVEc3QpDQotew0KLSAgICByZXR1cm4gcmVuYW1lKGZpbGVOYW1lU3JjLkdldENTdHIoKSwgZmlsZU5hbWVEc3QuR2V0Q1N0cigpKTsNCi19DQotRlhfQk9PTCBGWF9GaWxlX01vdmUoRlhfV1NUUiBmaWxlTmFtZVNyYywgRlhfV1NUUiBmaWxlTmFtZURzdCkNCi17DQotICAgIHJldHVybiBGWF9GaWxlX01vdmUoRlhfVVRGOEVuY29kZShmaWxlTmFtZVNyYyksIEZYX1VURjhFbmNvZGUoZmlsZU5hbWVEc3QpKTsNCi19DQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfZXh0LmgiCisjaW5jbHVkZSAiZnhjcnRfcGxhdGZvcm1zLmgiCisjaWYgKF9GWE1fUExBVEZPUk1fICE9IF9GWE1fUExBVEZPUk1fV0lORE9XU18gJiYgX0ZYTV9QTEFURk9STV8gIT0gX0ZYTV9QTEFURk9STV9MSU5VWF8gJiYgX0ZYTV9QTEFURk9STV8gIT0gX0ZYTV9QTEFURk9STV9BUFBMRV8gJiYgX0ZYTV9QTEFURk9STV8gIT0gX0ZYTV9QTEFURk9STV9BTkRST0lEXykKK0lGWENSVF9GaWxlQWNjZXNzKiBGWENSVF9GaWxlQWNjZXNzX0NyZWF0ZShJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQoreworICAgIGlmIChwQWxsb2NhdG9yKSB7CisgICAgICAgIHJldHVybiBGWF9OZXdBdEFsbG9jYXRvcihwQWxsb2NhdG9yKSBDRlhDUlRfRmlsZUFjY2Vzc19DUlQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIEZYX05FVyBDRlhDUlRfRmlsZUFjY2Vzc19DUlQ7CisgICAgfQorfQordm9pZCBGWENSVF9HZXRGaWxlTW9kZVN0cmluZyhGWF9EV09SRCBkd01vZGVzLCBDRlhfQnl0ZVN0cmluZyAmYnNNb2RlKQoreworICAgIGlmIChkd01vZGVzICYgRlhfRklMRU1PREVfUmVhZE9ubHkpIHsKKyAgICAgICAgYnNNb2RlID0gRlhfQlNUUkMoInJiIik7CisgICAgfSBlbHNlIGlmIChkd01vZGVzICYgRlhfRklMRU1PREVfVHJ1bmNhdGUpIHsKKyAgICAgICAgYnNNb2RlID0gRlhfQlNUUkMoIncrYiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGJzTW9kZSA9IEZYX0JTVFJDKCJhK2IiKTsKKyAgICB9Cit9Cit2b2lkIEZYQ1JUX0dldEZpbGVNb2RlU3RyaW5nKEZYX0RXT1JEIGR3TW9kZXMsIENGWF9XaWRlU3RyaW5nICZ3c01vZGUpCit7CisgICAgaWYgKGR3TW9kZXMgJiBGWF9GSUxFTU9ERV9SZWFkT25seSkgeworICAgICAgICB3c01vZGUgPSBGWF9XU1RSQyhMInJiIik7CisgICAgfSBlbHNlIGlmIChkd01vZGVzICYgRlhfRklMRU1PREVfVHJ1bmNhdGUpIHsKKyAgICAgICAgd3NNb2RlID0gRlhfV1NUUkMoTCJ3K2IiKTsKKyAgICB9IGVsc2UgeworICAgICAgICB3c01vZGUgPSBGWF9XU1RSQyhMImErYiIpOworICAgIH0KK30KK0NGWENSVF9GaWxlQWNjZXNzX0NSVDo6Q0ZYQ1JUX0ZpbGVBY2Nlc3NfQ1JUKCkKKyAgICA6IG1faEZpbGUoTlVMTCkKK3sKK30KK0NGWENSVF9GaWxlQWNjZXNzX0NSVDo6fkNGWENSVF9GaWxlQWNjZXNzX0NSVCgpCit7CisgICAgQ2xvc2UoKTsKK30KK0ZYX0JPT0wgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfQ1JUOjpPcGVuKEZYX0JTVFIgZmlsZU5hbWUsIEZYX0RXT1JEIGR3TW9kZSkKK3sKKyAgICBpZiAobV9oRmlsZSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIHN0ck1vZGU7CisgICAgRlhDUlRfR2V0RmlsZU1vZGVTdHJpbmcoZHdNb2RlLCBzdHJNb2RlKTsKKyAgICBtX2hGaWxlID0gRlhTWVNfZm9wZW4oZmlsZU5hbWUuR2V0Q1N0cigpLCAoRlhfTFBDU1RSKXN0ck1vZGUpOworICAgIHJldHVybiBtX2hGaWxlICE9IE5VTEw7Cit9CitGWF9CT09MIENGWENSVF9GaWxlQWNjZXNzX0NSVDo6T3BlbihGWF9XU1RSIGZpbGVOYW1lLCBGWF9EV09SRCBkd01vZGUpCit7CisgICAgaWYgKG1faEZpbGUpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDRlhfV2lkZVN0cmluZyBzdHJNb2RlOworICAgIEZYQ1JUX0dldEZpbGVNb2RlU3RyaW5nKGR3TW9kZSwgc3RyTW9kZSk7CisgICAgbV9oRmlsZSA9IEZYU1lTX3dmb3BlbihmaWxlTmFtZS5HZXRQdHIoKSwgKEZYX0xQQ1dTVFIpc3RyTW9kZSk7CisgICAgcmV0dXJuIG1faEZpbGUgIT0gTlVMTDsKK30KK3ZvaWQgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfQ1JUOjpDbG9zZSgpCit7CisgICAgaWYgKCFtX2hGaWxlKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgRlhTWVNfZmNsb3NlKG1faEZpbGUpOworICAgIG1faEZpbGUgPSBOVUxMOworfQordm9pZCBDRlhDUlRfRmlsZUFjY2Vzc19DUlQ6OlJlbGVhc2UoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikKK3sKKyAgICBpZiAocEFsbG9jYXRvcikgeworICAgICAgICBGWF9EZWxldGVBdEFsbG9jYXRvcih0aGlzLCBwQWxsb2NhdG9yLCBDRlhDUlRfRmlsZUFjY2Vzc19DUlQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIH0KK30KK0ZYX0ZJTEVTSVpFIENGWENSVF9GaWxlQWNjZXNzX0NSVDo6R2V0U2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2hGaWxlKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBGWF9GSUxFU0laRSBwb3MgPSAoRlhfRklMRVNJWkUpRlhTWVNfZnRlbGwobV9oRmlsZSk7CisgICAgRlhTWVNfZnNlZWsobV9oRmlsZSwgMCwgRlhTWVNfU0VFS19FTkQpOworICAgIEZYX0ZJTEVTSVpFIHNpemUgPSAoRlhfRklMRVNJWkUpRlhTWVNfZnRlbGwobV9oRmlsZSk7CisgICAgRlhTWVNfZnNlZWsobV9oRmlsZSwgcG9zLCBGWFNZU19TRUVLX1NFVCk7CisgICAgcmV0dXJuIHNpemU7Cit9CitGWF9GSUxFU0laRSBDRlhDUlRfRmlsZUFjY2Vzc19DUlQ6OkdldFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faEZpbGUpIHsKKyAgICAgICAgcmV0dXJuIChGWF9GSUxFU0laRSkgLSAxOworICAgIH0KKyAgICByZXR1cm4gKEZYX0ZJTEVTSVpFKUZYU1lTX2Z0ZWxsKG1faEZpbGUpOworfQorRlhfRklMRVNJWkUgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfQ1JUOjpTZXRQb3NpdGlvbihGWF9GSUxFU0laRSBwb3MpCit7CisgICAgaWYgKCFtX2hGaWxlKSB7CisgICAgICAgIHJldHVybiAoRlhfRklMRVNJWkUpIC0gMTsKKyAgICB9CisgICAgRlhTWVNfZnNlZWsobV9oRmlsZSwgcG9zLCBGWFNZU19TRUVLX1NFVCk7CisgICAgcmV0dXJuIChGWF9GSUxFU0laRSlGWFNZU19mdGVsbChtX2hGaWxlKTsKK30KK3NpemVfdCBDRlhDUlRfRmlsZUFjY2Vzc19DUlQ6OlJlYWQodm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyKQoreworICAgIGlmICghbV9oRmlsZSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIEZYU1lTX2ZyZWFkKHBCdWZmZXIsIDEsIHN6QnVmZmVyLCBtX2hGaWxlKTsKK30KK3NpemVfdCBDRlhDUlRfRmlsZUFjY2Vzc19DUlQ6OldyaXRlKGNvbnN0IHZvaWQqIHBCdWZmZXIsIHNpemVfdCBzekJ1ZmZlcikKK3sKKyAgICBpZiAoIW1faEZpbGUpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBGWFNZU19md3JpdGUocEJ1ZmZlciwgMSwgc3pCdWZmZXIsIG1faEZpbGUpOworfQorc2l6ZV90IENGWENSVF9GaWxlQWNjZXNzX0NSVDo6UmVhZFBvcyh2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIsIEZYX0ZJTEVTSVpFIHBvcykKK3sKKyAgICBpZiAoIW1faEZpbGUpIHsKKyAgICAgICAgcmV0dXJuIChGWF9GSUxFU0laRSkgLSAxOworICAgIH0KKyAgICBGWFNZU19mc2VlayhtX2hGaWxlLCBwb3MsIEZYU1lTX1NFRUtfU0VUKTsKKyAgICByZXR1cm4gRlhTWVNfZnJlYWQocEJ1ZmZlciwgMSwgc3pCdWZmZXIsIG1faEZpbGUpOworfQorc2l6ZV90IENGWENSVF9GaWxlQWNjZXNzX0NSVDo6V3JpdGVQb3MoY29uc3Qgdm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyLCBGWF9GSUxFU0laRSBwb3MpCit7CisgICAgaWYgKCFtX2hGaWxlKSB7CisgICAgICAgIHJldHVybiAoRlhfRklMRVNJWkUpIC0gMTsKKyAgICB9CisgICAgRlhTWVNfZnNlZWsobV9oRmlsZSwgcG9zLCBGWFNZU19TRUVLX1NFVCk7CisgICAgcmV0dXJuIEZYU1lTX2Z3cml0ZShwQnVmZmVyLCAxLCBzekJ1ZmZlciwgbV9oRmlsZSk7Cit9CitGWF9CT09MIENGWENSVF9GaWxlQWNjZXNzX0NSVDo6Rmx1c2goKQoreworICAgIGlmICghbV9oRmlsZSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiAhRlhTWVNfZmZsdXNoKG1faEZpbGUpOworfQorRlhfQk9PTCBDRlhDUlRfRmlsZUFjY2Vzc19DUlQ6OlRydW5jYXRlKEZYX0ZJTEVTSVpFIHN6RmlsZSkKK3sKKyAgICByZXR1cm4gRkFMU0U7Cit9CitGWF9CT09MIEZYX0ZpbGVfRXhpc3QoRlhfQlNUUiBmaWxlTmFtZSkKK3sKKyAgICByZXR1cm4gYWNjZXNzKGZpbGVOYW1lLkdldENTdHIoKSwgRl9PSykgPiAtMTsKK30KK0ZYX0JPT0wgRlhfRmlsZV9FeGlzdChGWF9XU1RSIGZpbGVOYW1lKQoreworICAgIHJldHVybiBGWF9GaWxlX0V4aXN0KEZYX1VURjhFbmNvZGUoZmlsZU5hbWUpKTsKK30KK0ZYX0JPT0wgRlhfRmlsZV9EZWxldGUoRlhfQlNUUiBmaWxlTmFtZSkKK3sKKyAgICByZXR1cm4gcmVtb3ZlKGZpbGVOYW1lLkdldENTdHIoKSkgPiAtMTsKK30KK0ZYX0JPT0wgRlhfRmlsZV9EZWxldGUoRlhfV1NUUiBmaWxlTmFtZSkKK3sKKyAgICByZXR1cm4gRlhfRmlsZV9EZWxldGUoRlhfVVRGOEVuY29kZShmaWxlTmFtZSkpOworfQorRlhfQk9PTCBGWF9GaWxlX0NvcHkoRlhfQlNUUiBmaWxlTmFtZVNyYywgRlhfQlNUUiBmaWxlTmFtZURzdCkKK3sKKyAgICBDRlhDUlRfRmlsZUFjY2Vzc19DUlQgc3JjLCBkc3Q7CisgICAgaWYgKCFzcmMuT3BlbihmaWxlTmFtZVNyYywgRlhfRklMRU1PREVfUmVhZE9ubHkpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgRlhfRklMRVNJWkUgc2l6ZSA9IHNyYy5HZXRTaXplKCk7CisgICAgaWYgKCFzaXplKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKCFkc3QuT3BlbihmaWxlTmFtZURzdCwgRlhfRklMRU1PREVfVHJ1bmNhdGUpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgRlhfRklMRVNJWkUgbnVtID0gMDsKKyAgICBGWF9MUEJZVEUgcEJ1ZmZlciA9IEZYX0FsbG9jKEZYX0JZVEUsIDMyNzY4KTsKKyAgICBpZiAoIXBCdWZmZXIpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICB3aGlsZSAobnVtID0gc3JjLlJlYWQocEJ1ZmZlciwgMzI3NjgpKSB7CisgICAgICAgIGlmIChkc3QuV3JpdGUocEJ1ZmZlciwgbnVtKSAhPSBudW0pIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIEZYX0ZyZWUocEJ1ZmZlcik7CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIEZYX0ZpbGVfQ29weShGWF9XU1RSIGZpbGVOYW1lU3JjLCBGWF9XU1RSIGZpbGVOYW1lRHN0KQoreworICAgIHJldHVybiBGWF9GaWxlX0NvcHkoRlhfVVRGOEVuY29kZShmaWxlTmFtZVNyYyksIEZYX1VURjhFbmNvZGUoZmlsZU5hbWVEc3QpKTsKK30KK0ZYX0JPT0wgRlhfRmlsZV9Nb3ZlKEZYX0JTVFIgZmlsZU5hbWVTcmMsIEZYX0JTVFIgZmlsZU5hbWVEc3QpCit7CisgICAgcmV0dXJuIHJlbmFtZShmaWxlTmFtZVNyYy5HZXRDU3RyKCksIGZpbGVOYW1lRHN0LkdldENTdHIoKSk7Cit9CitGWF9CT09MIEZYX0ZpbGVfTW92ZShGWF9XU1RSIGZpbGVOYW1lU3JjLCBGWF9XU1RSIGZpbGVOYW1lRHN0KQoreworICAgIHJldHVybiBGWF9GaWxlX01vdmUoRlhfVVRGOEVuY29kZShmaWxlTmFtZVNyYyksIEZYX1VURjhFbmNvZGUoZmlsZU5hbWVEc3QpKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjcnQvZnhjcnRfcGxhdGZvcm1zLmggYi9jb3JlL3NyYy9meGNydC9meGNydF9wbGF0Zm9ybXMuaAppbmRleCA2MzNiODg4Li40Y2I4Mzk5IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNydC9meGNydF9wbGF0Zm9ybXMuaAorKysgYi9jb3JlL3NyYy9meGNydC9meGNydF9wbGF0Zm9ybXMuaApAQCAtMSwzNSArMSwzNSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlhDUlRfUExBVEZPUk1TXw0KLSNkZWZpbmUgX0ZYQ1JUX1BMQVRGT1JNU18NCi0jaW5jbHVkZSAiZXh0ZW5zaW9uLmgiDQotI2lmIF9GWF9PU18gPT0gX0ZYX0FORFJPSURfDQotdm9pZAlGWENSVF9HZXRGaWxlTW9kZVN0cmluZyhGWF9EV09SRCBkd01vZGVzLCBDRlhfQnl0ZVN0cmluZyAmYnNNb2RlKTsNCi12b2lkCUZYQ1JUX0dldEZpbGVNb2RlU3RyaW5nKEZYX0RXT1JEIGR3TW9kZXMsIENGWF9XaWRlU3RyaW5nICZ3c01vZGUpOw0KLWNsYXNzIENGWENSVF9GaWxlQWNjZXNzX0NSVCA6IHB1YmxpYyBJRlhDUlRfRmlsZUFjY2VzcywgcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDRlhDUlRfRmlsZUFjY2Vzc19DUlQoKTsNCi0gICAgdmlydHVhbCB+Q0ZYQ1JUX0ZpbGVBY2Nlc3NfQ1JUKCk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJT3BlbihGWF9CU1RSIGZpbGVOYW1lLCBGWF9EV09SRCBkd01vZGUpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCU9wZW4oRlhfV1NUUiBmaWxlTmFtZSwgRlhfRFdPUkQgZHdNb2RlKTsNCi0gICAgdmlydHVhbCB2b2lkCQlDbG9zZSgpOw0KLSAgICB2aXJ0dWFsIHZvaWQJCVJlbGVhc2UoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpOw0KLSAgICB2aXJ0dWFsIEZYX0ZJTEVTSVpFCUdldFNpemUoKSBjb25zdDsNCi0gICAgdmlydHVhbCBGWF9GSUxFU0laRQlHZXRQb3NpdGlvbigpIGNvbnN0Ow0KLSAgICB2aXJ0dWFsIEZYX0ZJTEVTSVpFCVNldFBvc2l0aW9uKEZYX0ZJTEVTSVpFIHBvcyk7DQotICAgIHZpcnR1YWwgc2l6ZV90CQlSZWFkKHZvaWQqIHBCdWZmZXIsIHNpemVfdCBzekJ1ZmZlcik7DQotICAgIHZpcnR1YWwgc2l6ZV90CQlXcml0ZShjb25zdCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIpOw0KLSAgICB2aXJ0dWFsIHNpemVfdAkJUmVhZFBvcyh2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIsIEZYX0ZJTEVTSVpFIHBvcyk7DQotICAgIHZpcnR1YWwgc2l6ZV90CQlXcml0ZVBvcyhjb25zdCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIsIEZYX0ZJTEVTSVpFIHBvcyk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJRmx1c2goKTsNCi0gICAgdmlydHVhbCBGWF9CT09MCQlUcnVuY2F0ZShGWF9GSUxFU0laRSBzekZpbGUpOw0KLXByb3RlY3RlZDoNCi0gICAgRlhTWVNfRklMRSoJbV9oRmlsZTsNCi19Ow0KLSNlbmRpZg0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZYQ1JUX1BMQVRGT1JNU18KKyNkZWZpbmUgX0ZYQ1JUX1BMQVRGT1JNU18KKyNpbmNsdWRlICJleHRlbnNpb24uaCIKKyNpZiBfRlhfT1NfID09IF9GWF9BTkRST0lEXwordm9pZAlGWENSVF9HZXRGaWxlTW9kZVN0cmluZyhGWF9EV09SRCBkd01vZGVzLCBDRlhfQnl0ZVN0cmluZyAmYnNNb2RlKTsKK3ZvaWQJRlhDUlRfR2V0RmlsZU1vZGVTdHJpbmcoRlhfRFdPUkQgZHdNb2RlcywgQ0ZYX1dpZGVTdHJpbmcgJndzTW9kZSk7CitjbGFzcyBDRlhDUlRfRmlsZUFjY2Vzc19DUlQgOiBwdWJsaWMgSUZYQ1JUX0ZpbGVBY2Nlc3MsIHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfQ1JUKCk7CisgICAgdmlydHVhbCB+Q0ZYQ1JUX0ZpbGVBY2Nlc3NfQ1JUKCk7CisgICAgdmlydHVhbCBGWF9CT09MCQlPcGVuKEZYX0JTVFIgZmlsZU5hbWUsIEZYX0RXT1JEIGR3TW9kZSk7CisgICAgdmlydHVhbCBGWF9CT09MCQlPcGVuKEZYX1dTVFIgZmlsZU5hbWUsIEZYX0RXT1JEIGR3TW9kZSk7CisgICAgdmlydHVhbCB2b2lkCQlDbG9zZSgpOworICAgIHZpcnR1YWwgdm9pZAkJUmVsZWFzZShJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCk7CisgICAgdmlydHVhbCBGWF9GSUxFU0laRQlHZXRTaXplKCkgY29uc3Q7CisgICAgdmlydHVhbCBGWF9GSUxFU0laRQlHZXRQb3NpdGlvbigpIGNvbnN0OworICAgIHZpcnR1YWwgRlhfRklMRVNJWkUJU2V0UG9zaXRpb24oRlhfRklMRVNJWkUgcG9zKTsKKyAgICB2aXJ0dWFsIHNpemVfdAkJUmVhZCh2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIpOworICAgIHZpcnR1YWwgc2l6ZV90CQlXcml0ZShjb25zdCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIpOworICAgIHZpcnR1YWwgc2l6ZV90CQlSZWFkUG9zKHZvaWQqIHBCdWZmZXIsIHNpemVfdCBzekJ1ZmZlciwgRlhfRklMRVNJWkUgcG9zKTsKKyAgICB2aXJ0dWFsIHNpemVfdAkJV3JpdGVQb3MoY29uc3Qgdm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyLCBGWF9GSUxFU0laRSBwb3MpOworICAgIHZpcnR1YWwgRlhfQk9PTAkJRmx1c2goKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCVRydW5jYXRlKEZYX0ZJTEVTSVpFIHN6RmlsZSk7Citwcm90ZWN0ZWQ6CisgICAgRlhTWVNfRklMRSoJbV9oRmlsZTsKK307CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjcnQvZnhjcnRfcG9zaXguY3BwIGIvY29yZS9zcmMvZnhjcnQvZnhjcnRfcG9zaXguY3BwCmluZGV4IDY3NTJlMGEuLjU1OGYzMzQgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y3J0L2Z4Y3J0X3Bvc2l4LmNwcAorKysgYi9jb3JlL3NyYy9meGNydC9meGNydF9wb3NpeC5jcHAKQEAgLTEsMjAxICsxLDIwMSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfZXh0LmgiDQotI2luY2x1ZGUgImZ4Y3J0X3Bvc2l4LmgiDQotI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fTElOVVhfIHx8IF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fQVBQTEVfIHx8IF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fQU5EUk9JRF8NCi1JRlhDUlRfRmlsZUFjY2VzcyogRlhDUlRfRmlsZUFjY2Vzc19DcmVhdGUoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikNCi17DQotICAgIGlmIChwQWxsb2NhdG9yKSB7DQotICAgICAgICByZXR1cm4gRlhfTmV3QXRBbGxvY2F0b3IocEFsbG9jYXRvcikgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfUG9zaXgoKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHJldHVybiBGWF9ORVcgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfUG9zaXg7DQotICAgIH0NCi19DQotdm9pZCBGWENSVF9Qb3NpeF9HZXRGaWxlTW9kZShGWF9EV09SRCBkd01vZGVzLCBGWF9JTlQzMiAmbkZsYWdzLCBGWF9JTlQzMiAmbk1hc2tzKQ0KLXsNCi0gICAgbkZsYWdzID0gT19CSU5BUlkgfCBPX0xBUkdFRklMRTsNCi0gICAgaWYgKGR3TW9kZXMgJiBGWF9GSUxFTU9ERV9SZWFkT25seSkgew0KLSAgICAgICAgbkZsYWdzIHw9IE9fUkRPTkxZOw0KLSAgICAgICAgbk1hc2tzID0gMDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG5GbGFncyB8PSBPX1JEV1IgfCBPX0NSRUFUOw0KLSAgICAgICAgaWYgKGR3TW9kZXMgJiBGWF9GSUxFTU9ERV9UcnVuY2F0ZSkgew0KLSAgICAgICAgICAgIG5GbGFncyB8PSBPX1RSVU5DOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbk1hc2tzID0gU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JUk9USDsNCi0gICAgfQ0KLX0NCi1DRlhDUlRfRmlsZUFjY2Vzc19Qb3NpeDo6Q0ZYQ1JUX0ZpbGVBY2Nlc3NfUG9zaXgoKQ0KLSAgICA6IG1fbkZEKC0xKQ0KLXsNCi19DQotQ0ZYQ1JUX0ZpbGVBY2Nlc3NfUG9zaXg6On5DRlhDUlRfRmlsZUFjY2Vzc19Qb3NpeCgpDQotew0KLSAgICBDbG9zZSgpOw0KLX0NCi1GWF9CT09MIENGWENSVF9GaWxlQWNjZXNzX1Bvc2l4OjpPcGVuKEZYX0JTVFIgZmlsZU5hbWUsIEZYX0RXT1JEIGR3TW9kZSkNCi17DQotICAgIGlmIChtX25GRCA+IC0xKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgRlhfSU5UMzIgbkZsYWdzLCBuTWFza3M7DQotICAgIEZYQ1JUX1Bvc2l4X0dldEZpbGVNb2RlKGR3TW9kZSwgbkZsYWdzLCBuTWFza3MpOw0KLSAgICBtX25GRCA9IG9wZW4oZmlsZU5hbWUuR2V0Q1N0cigpLCBuRmxhZ3MsIG5NYXNrcyk7DQotICAgIHJldHVybiBtX25GRCA+IC0xOw0KLX0NCi1GWF9CT09MIENGWENSVF9GaWxlQWNjZXNzX1Bvc2l4OjpPcGVuKEZYX1dTVFIgZmlsZU5hbWUsIEZYX0RXT1JEIGR3TW9kZSkNCi17DQotICAgIHJldHVybiBPcGVuKEZYX1VURjhFbmNvZGUoZmlsZU5hbWUpLCBkd01vZGUpOw0KLX0NCi12b2lkIENGWENSVF9GaWxlQWNjZXNzX1Bvc2l4OjpDbG9zZSgpDQotew0KLSAgICBpZiAobV9uRkQgPCAwKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgY2xvc2UobV9uRkQpOw0KLSAgICBtX25GRCA9IC0xOw0KLX0NCi12b2lkIENGWENSVF9GaWxlQWNjZXNzX1Bvc2l4OjpSZWxlYXNlKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpDQotew0KLSAgICBpZiAocEFsbG9jYXRvcikgew0KLSAgICAgICAgRlhfRGVsZXRlQXRBbGxvY2F0b3IodGhpcywgcEFsbG9jYXRvciwgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfUG9zaXgpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZGVsZXRlIHRoaXM7DQotICAgIH0NCi19DQotRlhfRklMRVNJWkUgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfUG9zaXg6OkdldFNpemUoKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fbkZEIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgc3RydWN0IHN0YXQgczsNCi0gICAgRlhTWVNfbWVtc2V0MzIoJnMsIDAsIHNpemVvZihzKSk7DQotICAgIGZzdGF0KG1fbkZELCAmcyk7DQotICAgIHJldHVybiBzLnN0X3NpemU7DQotfQ0KLUZYX0ZJTEVTSVpFIENGWENSVF9GaWxlQWNjZXNzX1Bvc2l4OjpHZXRQb3NpdGlvbigpIGNvbnN0DQotew0KLSAgICBpZiAobV9uRkQgPCAwKSB7DQotICAgICAgICByZXR1cm4gKEZYX0ZJTEVTSVpFKSAtIDE7DQotICAgIH0NCi0gICAgcmV0dXJuIGxzZWVrKG1fbkZELCAwLCBTRUVLX0NVUik7DQotfQ0KLUZYX0ZJTEVTSVpFIENGWENSVF9GaWxlQWNjZXNzX1Bvc2l4OjpTZXRQb3NpdGlvbihGWF9GSUxFU0laRSBwb3MpDQotew0KLSAgICBpZiAobV9uRkQgPCAwKSB7DQotICAgICAgICByZXR1cm4gKEZYX0ZJTEVTSVpFKSAtIDE7DQotICAgIH0NCi0gICAgcmV0dXJuIGxzZWVrKG1fbkZELCBwb3MsIFNFRUtfU0VUKTsNCi19DQotc2l6ZV90IENGWENSVF9GaWxlQWNjZXNzX1Bvc2l4OjpSZWFkKHZvaWQqIHBCdWZmZXIsIHNpemVfdCBzekJ1ZmZlcikNCi17DQotICAgIGlmIChtX25GRCA8IDApIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIHJldHVybiByZWFkKG1fbkZELCBwQnVmZmVyLCBzekJ1ZmZlcik7DQotfQ0KLXNpemVfdCBDRlhDUlRfRmlsZUFjY2Vzc19Qb3NpeDo6V3JpdGUoY29uc3Qgdm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyKQ0KLXsNCi0gICAgaWYgKG1fbkZEIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgcmV0dXJuIHdyaXRlKG1fbkZELCBwQnVmZmVyLCBzekJ1ZmZlcik7DQotfQ0KLXNpemVfdCBDRlhDUlRfRmlsZUFjY2Vzc19Qb3NpeDo6UmVhZFBvcyh2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIsIEZYX0ZJTEVTSVpFIHBvcykNCi17DQotICAgIGlmIChtX25GRCA8IDApIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGlmIChwb3MgPj0gR2V0U2l6ZSgpKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBpZiAoU2V0UG9zaXRpb24ocG9zKSA9PSAoRlhfRklMRVNJWkUpIC0gMSkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgcmV0dXJuIFJlYWQocEJ1ZmZlciwgc3pCdWZmZXIpOw0KLX0NCi1zaXplX3QgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfUG9zaXg6OldyaXRlUG9zKGNvbnN0IHZvaWQqIHBCdWZmZXIsIHNpemVfdCBzekJ1ZmZlciwgRlhfRklMRVNJWkUgcG9zKQ0KLXsNCi0gICAgaWYgKG1fbkZEIDwgMCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgaWYgKFNldFBvc2l0aW9uKHBvcykgPT0gKEZYX0ZJTEVTSVpFKSAtIDEpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIHJldHVybiBXcml0ZShwQnVmZmVyLCBzekJ1ZmZlcik7DQotfQ0KLUZYX0JPT0wgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfUG9zaXg6OkZsdXNoKCkNCi17DQotICAgIGlmIChtX25GRCA8IDApIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gZnN5bmMobV9uRkQpID4gLTE7DQotfQ0KLUZYX0JPT0wgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfUG9zaXg6OlRydW5jYXRlKEZYX0ZJTEVTSVpFIHN6RmlsZSkNCi17DQotICAgIGlmIChtX25GRCA8IDApIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gIWZ0cnVuY2F0ZShtX25GRCwgc3pGaWxlKTsNCi19DQotRlhfQk9PTCBGWF9GaWxlX0V4aXN0KEZYX0JTVFIgZmlsZU5hbWUpDQotew0KLSAgICByZXR1cm4gYWNjZXNzKGZpbGVOYW1lLkdldENTdHIoKSwgRl9PSykgPiAtMTsNCi19DQotRlhfQk9PTCBGWF9GaWxlX0V4aXN0KEZYX1dTVFIgZmlsZU5hbWUpDQotew0KLSAgICByZXR1cm4gRlhfRmlsZV9FeGlzdChGWF9VVEY4RW5jb2RlKGZpbGVOYW1lKSk7DQotfQ0KLUZYX0JPT0wgRlhfRmlsZV9EZWxldGUoRlhfQlNUUiBmaWxlTmFtZSkNCi17DQotICAgIHJldHVybiByZW1vdmUoZmlsZU5hbWUuR2V0Q1N0cigpKSA+IC0xOw0KLX0NCi1GWF9CT09MIEZYX0ZpbGVfRGVsZXRlKEZYX1dTVFIgZmlsZU5hbWUpDQotew0KLSAgICByZXR1cm4gRlhfRmlsZV9EZWxldGUoRlhfVVRGOEVuY29kZShmaWxlTmFtZSkpOw0KLX0NCi1GWF9CT09MIEZYX0ZpbGVfQ29weShGWF9CU1RSIGZpbGVOYW1lU3JjLCBGWF9CU1RSIGZpbGVOYW1lRHN0KQ0KLXsNCi0gICAgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfUG9zaXggc3JjLCBkc3Q7DQotICAgIGlmICghc3JjLk9wZW4oZmlsZU5hbWVTcmMsIEZYX0ZJTEVNT0RFX1JlYWRPbmx5KSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYX0ZJTEVTSVpFIHNpemUgPSBzcmMuR2V0U2l6ZSgpOw0KLSAgICBpZiAoIXNpemUpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoIWRzdC5PcGVuKGZpbGVOYW1lRHN0LCBGWF9GSUxFTU9ERV9UcnVuY2F0ZSkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBzaXplX3QgbnVtID0gMDsNCi0gICAgRlhfTFBCWVRFIHBCdWZmZXIgPSBGWF9BbGxvYyhGWF9CWVRFLCAzMjc2OCk7DQotICAgIGlmICghcEJ1ZmZlcikgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG51bSA9IHNyYy5SZWFkKHBCdWZmZXIsIDMyNzY4KTsNCi0gICAgd2hpbGUgKG51bSkgew0KLSAgICAgICAgaWYgKGRzdC5Xcml0ZShwQnVmZmVyLCBudW0pICE9IG51bSkgew0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbnVtID0gc3JjLlJlYWQocEJ1ZmZlciwgMzI3NjgpOw0KLSAgICB9DQotICAgIEZYX0ZyZWUocEJ1ZmZlcik7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIEZYX0ZpbGVfQ29weShGWF9XU1RSIGZpbGVOYW1lU3JjLCBGWF9XU1RSIGZpbGVOYW1lRHN0KQ0KLXsNCi0gICAgcmV0dXJuIEZYX0ZpbGVfQ29weShGWF9VVEY4RW5jb2RlKGZpbGVOYW1lU3JjKSwgRlhfVVRGOEVuY29kZShmaWxlTmFtZURzdCkpOw0KLX0NCi1GWF9CT09MIEZYX0ZpbGVfTW92ZShGWF9CU1RSIGZpbGVOYW1lU3JjLCBGWF9CU1RSIGZpbGVOYW1lRHN0KQ0KLXsNCi0gICAgcmV0dXJuIHJlbmFtZShmaWxlTmFtZVNyYy5HZXRDU3RyKCksIGZpbGVOYW1lRHN0LkdldENTdHIoKSk7DQotfQ0KLUZYX0JPT0wgRlhfRmlsZV9Nb3ZlKEZYX1dTVFIgZmlsZU5hbWVTcmMsIEZYX1dTVFIgZmlsZU5hbWVEc3QpDQotew0KLSAgICByZXR1cm4gRlhfRmlsZV9Nb3ZlKEZYX1VURjhFbmNvZGUoZmlsZU5hbWVTcmMpLCBGWF9VVEY4RW5jb2RlKGZpbGVOYW1lRHN0KSk7DQotfQ0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2V4dC5oIgorI2luY2x1ZGUgImZ4Y3J0X3Bvc2l4LmgiCisjaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9MSU5VWF8gfHwgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8gfHwgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9BTkRST0lEXworSUZYQ1JUX0ZpbGVBY2Nlc3MqIEZYQ1JUX0ZpbGVBY2Nlc3NfQ3JlYXRlKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpCit7CisgICAgaWYgKHBBbGxvY2F0b3IpIHsKKyAgICAgICAgcmV0dXJuIEZYX05ld0F0QWxsb2NhdG9yKHBBbGxvY2F0b3IpIENGWENSVF9GaWxlQWNjZXNzX1Bvc2l4KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIEZYX05FVyBDRlhDUlRfRmlsZUFjY2Vzc19Qb3NpeDsKKyAgICB9Cit9Cit2b2lkIEZYQ1JUX1Bvc2l4X0dldEZpbGVNb2RlKEZYX0RXT1JEIGR3TW9kZXMsIEZYX0lOVDMyICZuRmxhZ3MsIEZYX0lOVDMyICZuTWFza3MpCit7CisgICAgbkZsYWdzID0gT19CSU5BUlkgfCBPX0xBUkdFRklMRTsKKyAgICBpZiAoZHdNb2RlcyAmIEZYX0ZJTEVNT0RFX1JlYWRPbmx5KSB7CisgICAgICAgIG5GbGFncyB8PSBPX1JET05MWTsKKyAgICAgICAgbk1hc2tzID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBuRmxhZ3MgfD0gT19SRFdSIHwgT19DUkVBVDsKKyAgICAgICAgaWYgKGR3TW9kZXMgJiBGWF9GSUxFTU9ERV9UcnVuY2F0ZSkgeworICAgICAgICAgICAgbkZsYWdzIHw9IE9fVFJVTkM7CisgICAgICAgIH0KKyAgICAgICAgbk1hc2tzID0gU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQIHwgU19JUk9USDsKKyAgICB9Cit9CitDRlhDUlRfRmlsZUFjY2Vzc19Qb3NpeDo6Q0ZYQ1JUX0ZpbGVBY2Nlc3NfUG9zaXgoKQorICAgIDogbV9uRkQoLTEpCit7Cit9CitDRlhDUlRfRmlsZUFjY2Vzc19Qb3NpeDo6fkNGWENSVF9GaWxlQWNjZXNzX1Bvc2l4KCkKK3sKKyAgICBDbG9zZSgpOworfQorRlhfQk9PTCBDRlhDUlRfRmlsZUFjY2Vzc19Qb3NpeDo6T3BlbihGWF9CU1RSIGZpbGVOYW1lLCBGWF9EV09SRCBkd01vZGUpCit7CisgICAgaWYgKG1fbkZEID4gLTEpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWF9JTlQzMiBuRmxhZ3MsIG5NYXNrczsKKyAgICBGWENSVF9Qb3NpeF9HZXRGaWxlTW9kZShkd01vZGUsIG5GbGFncywgbk1hc2tzKTsKKyAgICBtX25GRCA9IG9wZW4oZmlsZU5hbWUuR2V0Q1N0cigpLCBuRmxhZ3MsIG5NYXNrcyk7CisgICAgcmV0dXJuIG1fbkZEID4gLTE7Cit9CitGWF9CT09MIENGWENSVF9GaWxlQWNjZXNzX1Bvc2l4OjpPcGVuKEZYX1dTVFIgZmlsZU5hbWUsIEZYX0RXT1JEIGR3TW9kZSkKK3sKKyAgICByZXR1cm4gT3BlbihGWF9VVEY4RW5jb2RlKGZpbGVOYW1lKSwgZHdNb2RlKTsKK30KK3ZvaWQgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfUG9zaXg6OkNsb3NlKCkKK3sKKyAgICBpZiAobV9uRkQgPCAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2xvc2UobV9uRkQpOworICAgIG1fbkZEID0gLTE7Cit9Cit2b2lkIENGWENSVF9GaWxlQWNjZXNzX1Bvc2l4OjpSZWxlYXNlKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpCit7CisgICAgaWYgKHBBbGxvY2F0b3IpIHsKKyAgICAgICAgRlhfRGVsZXRlQXRBbGxvY2F0b3IodGhpcywgcEFsbG9jYXRvciwgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfUG9zaXgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIH0KK30KK0ZYX0ZJTEVTSVpFIENGWENSVF9GaWxlQWNjZXNzX1Bvc2l4OjpHZXRTaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9uRkQgPCAwKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBzdHJ1Y3Qgc3RhdCBzOworICAgIEZYU1lTX21lbXNldDMyKCZzLCAwLCBzaXplb2YocykpOworICAgIGZzdGF0KG1fbkZELCAmcyk7CisgICAgcmV0dXJuIHMuc3Rfc2l6ZTsKK30KK0ZYX0ZJTEVTSVpFIENGWENSVF9GaWxlQWNjZXNzX1Bvc2l4OjpHZXRQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKG1fbkZEIDwgMCkgeworICAgICAgICByZXR1cm4gKEZYX0ZJTEVTSVpFKSAtIDE7CisgICAgfQorICAgIHJldHVybiBsc2VlayhtX25GRCwgMCwgU0VFS19DVVIpOworfQorRlhfRklMRVNJWkUgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfUG9zaXg6OlNldFBvc2l0aW9uKEZYX0ZJTEVTSVpFIHBvcykKK3sKKyAgICBpZiAobV9uRkQgPCAwKSB7CisgICAgICAgIHJldHVybiAoRlhfRklMRVNJWkUpIC0gMTsKKyAgICB9CisgICAgcmV0dXJuIGxzZWVrKG1fbkZELCBwb3MsIFNFRUtfU0VUKTsKK30KK3NpemVfdCBDRlhDUlRfRmlsZUFjY2Vzc19Qb3NpeDo6UmVhZCh2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIpCit7CisgICAgaWYgKG1fbkZEIDwgMCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlYWQobV9uRkQsIHBCdWZmZXIsIHN6QnVmZmVyKTsKK30KK3NpemVfdCBDRlhDUlRfRmlsZUFjY2Vzc19Qb3NpeDo6V3JpdGUoY29uc3Qgdm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyKQoreworICAgIGlmIChtX25GRCA8IDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiB3cml0ZShtX25GRCwgcEJ1ZmZlciwgc3pCdWZmZXIpOworfQorc2l6ZV90IENGWENSVF9GaWxlQWNjZXNzX1Bvc2l4OjpSZWFkUG9zKHZvaWQqIHBCdWZmZXIsIHNpemVfdCBzekJ1ZmZlciwgRlhfRklMRVNJWkUgcG9zKQoreworICAgIGlmIChtX25GRCA8IDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChwb3MgPj0gR2V0U2l6ZSgpKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoU2V0UG9zaXRpb24ocG9zKSA9PSAoRlhfRklMRVNJWkUpIC0gMSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIFJlYWQocEJ1ZmZlciwgc3pCdWZmZXIpOworfQorc2l6ZV90IENGWENSVF9GaWxlQWNjZXNzX1Bvc2l4OjpXcml0ZVBvcyhjb25zdCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIsIEZYX0ZJTEVTSVpFIHBvcykKK3sKKyAgICBpZiAobV9uRkQgPCAwKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoU2V0UG9zaXRpb24ocG9zKSA9PSAoRlhfRklMRVNJWkUpIC0gMSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIFdyaXRlKHBCdWZmZXIsIHN6QnVmZmVyKTsKK30KK0ZYX0JPT0wgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfUG9zaXg6OkZsdXNoKCkKK3sKKyAgICBpZiAobV9uRkQgPCAwKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIGZzeW5jKG1fbkZEKSA+IC0xOworfQorRlhfQk9PTCBDRlhDUlRfRmlsZUFjY2Vzc19Qb3NpeDo6VHJ1bmNhdGUoRlhfRklMRVNJWkUgc3pGaWxlKQoreworICAgIGlmIChtX25GRCA8IDApIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gIWZ0cnVuY2F0ZShtX25GRCwgc3pGaWxlKTsKK30KK0ZYX0JPT0wgRlhfRmlsZV9FeGlzdChGWF9CU1RSIGZpbGVOYW1lKQoreworICAgIHJldHVybiBhY2Nlc3MoZmlsZU5hbWUuR2V0Q1N0cigpLCBGX09LKSA+IC0xOworfQorRlhfQk9PTCBGWF9GaWxlX0V4aXN0KEZYX1dTVFIgZmlsZU5hbWUpCit7CisgICAgcmV0dXJuIEZYX0ZpbGVfRXhpc3QoRlhfVVRGOEVuY29kZShmaWxlTmFtZSkpOworfQorRlhfQk9PTCBGWF9GaWxlX0RlbGV0ZShGWF9CU1RSIGZpbGVOYW1lKQoreworICAgIHJldHVybiByZW1vdmUoZmlsZU5hbWUuR2V0Q1N0cigpKSA+IC0xOworfQorRlhfQk9PTCBGWF9GaWxlX0RlbGV0ZShGWF9XU1RSIGZpbGVOYW1lKQoreworICAgIHJldHVybiBGWF9GaWxlX0RlbGV0ZShGWF9VVEY4RW5jb2RlKGZpbGVOYW1lKSk7Cit9CitGWF9CT09MIEZYX0ZpbGVfQ29weShGWF9CU1RSIGZpbGVOYW1lU3JjLCBGWF9CU1RSIGZpbGVOYW1lRHN0KQoreworICAgIENGWENSVF9GaWxlQWNjZXNzX1Bvc2l4IHNyYywgZHN0OworICAgIGlmICghc3JjLk9wZW4oZmlsZU5hbWVTcmMsIEZYX0ZJTEVNT0RFX1JlYWRPbmx5KSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEZYX0ZJTEVTSVpFIHNpemUgPSBzcmMuR2V0U2l6ZSgpOworICAgIGlmICghc2l6ZSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmICghZHN0Lk9wZW4oZmlsZU5hbWVEc3QsIEZYX0ZJTEVNT0RFX1RydW5jYXRlKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHNpemVfdCBudW0gPSAwOworICAgIEZYX0xQQllURSBwQnVmZmVyID0gRlhfQWxsb2MoRlhfQllURSwgMzI3NjgpOworICAgIGlmICghcEJ1ZmZlcikgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG51bSA9IHNyYy5SZWFkKHBCdWZmZXIsIDMyNzY4KTsKKyAgICB3aGlsZSAobnVtKSB7CisgICAgICAgIGlmIChkc3QuV3JpdGUocEJ1ZmZlciwgbnVtKSAhPSBudW0pIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG51bSA9IHNyYy5SZWFkKHBCdWZmZXIsIDMyNzY4KTsKKyAgICB9CisgICAgRlhfRnJlZShwQnVmZmVyKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgRlhfRmlsZV9Db3B5KEZYX1dTVFIgZmlsZU5hbWVTcmMsIEZYX1dTVFIgZmlsZU5hbWVEc3QpCit7CisgICAgcmV0dXJuIEZYX0ZpbGVfQ29weShGWF9VVEY4RW5jb2RlKGZpbGVOYW1lU3JjKSwgRlhfVVRGOEVuY29kZShmaWxlTmFtZURzdCkpOworfQorRlhfQk9PTCBGWF9GaWxlX01vdmUoRlhfQlNUUiBmaWxlTmFtZVNyYywgRlhfQlNUUiBmaWxlTmFtZURzdCkKK3sKKyAgICByZXR1cm4gcmVuYW1lKGZpbGVOYW1lU3JjLkdldENTdHIoKSwgZmlsZU5hbWVEc3QuR2V0Q1N0cigpKTsKK30KK0ZYX0JPT0wgRlhfRmlsZV9Nb3ZlKEZYX1dTVFIgZmlsZU5hbWVTcmMsIEZYX1dTVFIgZmlsZU5hbWVEc3QpCit7CisgICAgcmV0dXJuIEZYX0ZpbGVfTW92ZShGWF9VVEY4RW5jb2RlKGZpbGVOYW1lU3JjKSwgRlhfVVRGOEVuY29kZShmaWxlTmFtZURzdCkpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNydC9meGNydF9wb3NpeC5oIGIvY29yZS9zcmMvZnhjcnQvZnhjcnRfcG9zaXguaAppbmRleCAyOWM4NGFkLi5mNzZlMzVjIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNydC9meGNydF9wb3NpeC5oCisrKyBiL2NvcmUvc3JjL2Z4Y3J0L2Z4Y3J0X3Bvc2l4LmgKQEAgLTEsMzMgKzEsMzMgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0ZYQ1JUX0xJTlVYXw0KLSNkZWZpbmUgX0ZYQ1JUX0xJTlVYXw0KLSNpbmNsdWRlICJleHRlbnNpb24uaCINCi0jaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9MSU5VWF8gfHwgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8gfHwgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9BTkRST0lEXw0KLWNsYXNzIENGWENSVF9GaWxlQWNjZXNzX1Bvc2l4IDogcHVibGljIElGWENSVF9GaWxlQWNjZXNzLCBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENGWENSVF9GaWxlQWNjZXNzX1Bvc2l4KCk7DQotICAgIHZpcnR1YWwgfkNGWENSVF9GaWxlQWNjZXNzX1Bvc2l4KCk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJT3BlbihGWF9CU1RSIGZpbGVOYW1lLCBGWF9EV09SRCBkd01vZGUpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCU9wZW4oRlhfV1NUUiBmaWxlTmFtZSwgRlhfRFdPUkQgZHdNb2RlKTsNCi0gICAgdmlydHVhbCB2b2lkCQlDbG9zZSgpOw0KLSAgICB2aXJ0dWFsIHZvaWQJCVJlbGVhc2UoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpOw0KLSAgICB2aXJ0dWFsIEZYX0ZJTEVTSVpFCUdldFNpemUoKSBjb25zdDsNCi0gICAgdmlydHVhbCBGWF9GSUxFU0laRQlHZXRQb3NpdGlvbigpIGNvbnN0Ow0KLSAgICB2aXJ0dWFsIEZYX0ZJTEVTSVpFCVNldFBvc2l0aW9uKEZYX0ZJTEVTSVpFIHBvcyk7DQotICAgIHZpcnR1YWwgc2l6ZV90CQlSZWFkKHZvaWQqIHBCdWZmZXIsIHNpemVfdCBzekJ1ZmZlcik7DQotICAgIHZpcnR1YWwgc2l6ZV90CQlXcml0ZShjb25zdCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIpOw0KLSAgICB2aXJ0dWFsIHNpemVfdAkJUmVhZFBvcyh2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIsIEZYX0ZJTEVTSVpFIHBvcyk7DQotICAgIHZpcnR1YWwgc2l6ZV90CQlXcml0ZVBvcyhjb25zdCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIsIEZYX0ZJTEVTSVpFIHBvcyk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJRmx1c2goKTsNCi0gICAgdmlydHVhbCBGWF9CT09MCQlUcnVuY2F0ZShGWF9GSUxFU0laRSBzekZpbGUpOw0KLXByb3RlY3RlZDoNCi0gICAgRlhfSU5UMzIJbV9uRkQ7DQotfTsNCi0jZW5kaWYNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9GWENSVF9MSU5VWF8KKyNkZWZpbmUgX0ZYQ1JUX0xJTlVYXworI2luY2x1ZGUgImV4dGVuc2lvbi5oIgorI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fTElOVVhfIHx8IF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fQVBQTEVfIHx8IF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fQU5EUk9JRF8KK2NsYXNzIENGWENSVF9GaWxlQWNjZXNzX1Bvc2l4IDogcHVibGljIElGWENSVF9GaWxlQWNjZXNzLCBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENGWENSVF9GaWxlQWNjZXNzX1Bvc2l4KCk7CisgICAgdmlydHVhbCB+Q0ZYQ1JUX0ZpbGVBY2Nlc3NfUG9zaXgoKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCU9wZW4oRlhfQlNUUiBmaWxlTmFtZSwgRlhfRFdPUkQgZHdNb2RlKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCU9wZW4oRlhfV1NUUiBmaWxlTmFtZSwgRlhfRFdPUkQgZHdNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQJCUNsb3NlKCk7CisgICAgdmlydHVhbCB2b2lkCQlSZWxlYXNlKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsKKyAgICB2aXJ0dWFsIEZYX0ZJTEVTSVpFCUdldFNpemUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZYX0ZJTEVTSVpFCUdldFBvc2l0aW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBGWF9GSUxFU0laRQlTZXRQb3NpdGlvbihGWF9GSUxFU0laRSBwb3MpOworICAgIHZpcnR1YWwgc2l6ZV90CQlSZWFkKHZvaWQqIHBCdWZmZXIsIHNpemVfdCBzekJ1ZmZlcik7CisgICAgdmlydHVhbCBzaXplX3QJCVdyaXRlKGNvbnN0IHZvaWQqIHBCdWZmZXIsIHNpemVfdCBzekJ1ZmZlcik7CisgICAgdmlydHVhbCBzaXplX3QJCVJlYWRQb3Modm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyLCBGWF9GSUxFU0laRSBwb3MpOworICAgIHZpcnR1YWwgc2l6ZV90CQlXcml0ZVBvcyhjb25zdCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIsIEZYX0ZJTEVTSVpFIHBvcyk7CisgICAgdmlydHVhbCBGWF9CT09MCQlGbHVzaCgpOworICAgIHZpcnR1YWwgRlhfQk9PTAkJVHJ1bmNhdGUoRlhfRklMRVNJWkUgc3pGaWxlKTsKK3Byb3RlY3RlZDoKKyAgICBGWF9JTlQzMgltX25GRDsKK307CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjcnQvZnhjcnRfd2luZG93cy5jcHAgYi9jb3JlL3NyYy9meGNydC9meGNydF93aW5kb3dzLmNwcAppbmRleCBlMDNiZmRhLi45Yjc3YjMzIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGNydC9meGNydF93aW5kb3dzLmNwcAorKysgYi9jb3JlL3NyYy9meGNydC9meGNydF93aW5kb3dzLmNwcApAQCAtMSwyMjIgKzEsMjIyIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGNydC9meF9leHQuaCINCi0jaW5jbHVkZSAiZnhjcnRfd2luZG93cy5oIg0KLSNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfDQotRlhfQk9PTCBGWF9GaWxlX0V4aXN0KEZYX0JTVFIgZmlsZU5hbWUpDQotew0KLSAgICBGWF9EV09SRCBkd0F0dHJpID0gOjpHZXRGaWxlQXR0cmlidXRlc0EoZmlsZU5hbWUuR2V0Q1N0cigpKTsNCi0gICAgaWYgKGR3QXR0cmkgPT0gLTEpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gKGR3QXR0cmkgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpID09IDA7DQotfQ0KLUZYX0JPT0wgRlhfRmlsZV9FeGlzdChGWF9XU1RSIGZpbGVOYW1lKQ0KLXsNCi0gICAgRlhfRFdPUkQgZHdBdHRyaSA9IDo6R2V0RmlsZUF0dHJpYnV0ZXNXKChMUENXU1RSKWZpbGVOYW1lLkdldFB0cigpKTsNCi0gICAgaWYgKGR3QXR0cmkgPT0gLTEpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gKGR3QXR0cmkgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpID09IDA7DQotfQ0KLUlGWENSVF9GaWxlQWNjZXNzKiBGWENSVF9GaWxlQWNjZXNzX0NyZWF0ZShJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQ0KLXsNCi0gICAgaWYgKHBBbGxvY2F0b3IpIHsNCi0gICAgICAgIHJldHVybiBGWF9OZXdBdEFsbG9jYXRvcihwQWxsb2NhdG9yKSBDRlhDUlRfRmlsZUFjY2Vzc19XaW42NDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHJldHVybiBGWF9ORVcgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfV2luNjQ7DQotICAgIH0NCi19DQotdm9pZCBGWENSVF9XaW5kb3dzX0dldEZpbGVNb2RlKEZYX0RXT1JEIGR3TW9kZSwgRlhfRFdPUkQgJmR3QWNjZXNzLCBGWF9EV09SRCAmZHdTaGFyZSwgRlhfRFdPUkQgJmR3Q3JlYXRpb24pDQotew0KLSAgICBkd0FjY2VzcyA9IEdFTkVSSUNfUkVBRDsNCi0gICAgZHdTaGFyZSA9IEZJTEVfU0hBUkVfUkVBRCB8IEZJTEVfU0hBUkVfV1JJVEU7DQotICAgIGlmICghKGR3TW9kZSAmIEZYX0ZJTEVNT0RFX1JlYWRPbmx5KSkgew0KLSAgICAgICAgZHdBY2Nlc3MgfD0gR0VORVJJQ19XUklURTsNCi0gICAgICAgIGR3Q3JlYXRpb24gPSAoZHdNb2RlICYgRlhfRklMRU1PREVfVHJ1bmNhdGUpID8gQ1JFQVRFX0FMV0FZUyA6IE9QRU5fQUxXQVlTOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZHdDcmVhdGlvbiA9IE9QRU5fRVhJU1RJTkc7DQotICAgIH0NCi19DQotI2lmZGVmIF9fY3BsdXNwbHVzDQotZXh0ZXJuICJDIiB7DQotI2VuZGlmDQotV0lOQkFTRUFQSSBCT09MIFdJTkFQSSBHZXRGaWxlU2l6ZUV4KEhBTkRMRSBoRmlsZSwgUExBUkdFX0lOVEVHRVIgbHBGaWxlU2l6ZSk7DQotV0lOQkFTRUFQSSBCT09MIFdJTkFQSSBTZXRGaWxlUG9pbnRlckV4KEhBTkRMRSBoRmlsZSwgTEFSR0VfSU5URUdFUiBsaURpc3RhbmNlVG9Nb3ZlLCBQTEFSR0VfSU5URUdFUiBscE5ld0ZpbGVQb2ludGVyLCBEV09SRCBkd01vdmVNZXRob2QpOw0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX0NCi0jZW5kaWYNCi1DRlhDUlRfRmlsZUFjY2Vzc19XaW42NDo6Q0ZYQ1JUX0ZpbGVBY2Nlc3NfV2luNjQoKQ0KLSAgICA6IG1faEZpbGUoTlVMTCkNCi17DQotfQ0KLUNGWENSVF9GaWxlQWNjZXNzX1dpbjY0Ojp+Q0ZYQ1JUX0ZpbGVBY2Nlc3NfV2luNjQoKQ0KLXsNCi0gICAgQ2xvc2UoKTsNCi19DQotRlhfQk9PTCBDRlhDUlRfRmlsZUFjY2Vzc19XaW42NDo6T3BlbihGWF9CU1RSIGZpbGVOYW1lLCBGWF9EV09SRCBkd01vZGUpDQotew0KLSAgICBpZiAobV9oRmlsZSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYX0RXT1JEIGR3QWNjZXNzLCBkd1NoYXJlLCBkd0NyZWF0aW9uOw0KLSAgICBGWENSVF9XaW5kb3dzX0dldEZpbGVNb2RlKGR3TW9kZSwgZHdBY2Nlc3MsIGR3U2hhcmUsIGR3Q3JlYXRpb24pOw0KLSAgICBtX2hGaWxlID0gOjpDcmVhdGVGaWxlQShmaWxlTmFtZS5HZXRDU3RyKCksIGR3QWNjZXNzLCBkd1NoYXJlLCBOVUxMLCBkd0NyZWF0aW9uLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwsIE5VTEwpOw0KLSAgICBpZiAobV9oRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgew0KLSAgICAgICAgbV9oRmlsZSA9IE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIG1faEZpbGUgIT0gTlVMTDsNCi19DQotRlhfQk9PTCBDRlhDUlRfRmlsZUFjY2Vzc19XaW42NDo6T3BlbihGWF9XU1RSIGZpbGVOYW1lLCBGWF9EV09SRCBkd01vZGUpDQotew0KLSAgICBpZiAobV9oRmlsZSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYX0RXT1JEIGR3QWNjZXNzLCBkd1NoYXJlLCBkd0NyZWF0aW9uOw0KLSAgICBGWENSVF9XaW5kb3dzX0dldEZpbGVNb2RlKGR3TW9kZSwgZHdBY2Nlc3MsIGR3U2hhcmUsIGR3Q3JlYXRpb24pOw0KLSAgICBtX2hGaWxlID0gOjpDcmVhdGVGaWxlVygoTFBDV1NUUilmaWxlTmFtZS5HZXRQdHIoKSwgZHdBY2Nlc3MsIGR3U2hhcmUsIE5VTEwsIGR3Q3JlYXRpb24sIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgTlVMTCk7DQotICAgIGlmIChtX2hGaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7DQotICAgICAgICBtX2hGaWxlID0gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9oRmlsZSAhPSBOVUxMOw0KLX0NCi12b2lkIENGWENSVF9GaWxlQWNjZXNzX1dpbjY0OjpDbG9zZSgpDQotew0KLSAgICBpZiAoIW1faEZpbGUpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICA6OkNsb3NlSGFuZGxlKG1faEZpbGUpOw0KLSAgICBtX2hGaWxlID0gTlVMTDsNCi19DQotdm9pZCBDRlhDUlRfRmlsZUFjY2Vzc19XaW42NDo6UmVsZWFzZShJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yKQ0KLXsNCi0gICAgaWYgKHBBbGxvY2F0b3IpIHsNCi0gICAgICAgIEZYX0RlbGV0ZUF0QWxsb2NhdG9yKHRoaXMsIHBBbGxvY2F0b3IsIENGWENSVF9GaWxlQWNjZXNzX1dpbjY0KTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGRlbGV0ZSB0aGlzOw0KLSAgICB9DQotfQ0KLUZYX0ZJTEVTSVpFIENGWENSVF9GaWxlQWNjZXNzX1dpbjY0OjpHZXRTaXplKCkgY29uc3QNCi17DQotICAgIGlmICghbV9oRmlsZSkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgTEFSR0VfSU5URUdFUiBzaXplID0gezAsIDB9Ow0KLSAgICBpZiAoITo6R2V0RmlsZVNpemVFeChtX2hGaWxlLCAmc2l6ZSkpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIHJldHVybiAoRlhfRklMRVNJWkUpc2l6ZS5RdWFkUGFydDsNCi19DQotRlhfRklMRVNJWkUgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfV2luNjQ6OkdldFBvc2l0aW9uKCkgY29uc3QNCi17DQotICAgIGlmICghbV9oRmlsZSkgew0KLSAgICAgICAgcmV0dXJuIChGWF9GSUxFU0laRSkgLSAxOw0KLSAgICB9DQotICAgIExBUkdFX0lOVEVHRVIgZGlzdCA9IHswLCAwfTsNCi0gICAgTEFSR0VfSU5URUdFUiBuZXdQb3MgPSB7MCwgMH07DQotICAgIGlmICghOjpTZXRGaWxlUG9pbnRlckV4KG1faEZpbGUsIGRpc3QsICZuZXdQb3MsIEZJTEVfQ1VSUkVOVCkpIHsNCi0gICAgICAgIHJldHVybiAoRlhfRklMRVNJWkUpIC0gMTsNCi0gICAgfQ0KLSAgICByZXR1cm4gKEZYX0ZJTEVTSVpFKW5ld1Bvcy5RdWFkUGFydDsNCi19DQotRlhfRklMRVNJWkUgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfV2luNjQ6OlNldFBvc2l0aW9uKEZYX0ZJTEVTSVpFIHBvcykNCi17DQotICAgIGlmICghbV9oRmlsZSkgew0KLSAgICAgICAgcmV0dXJuIChGWF9GSUxFU0laRSkgLSAxOw0KLSAgICB9DQotICAgIExBUkdFX0lOVEVHRVIgZGlzdDsNCi0gICAgZGlzdC5RdWFkUGFydCA9IHBvczsNCi0gICAgTEFSR0VfSU5URUdFUiBuZXdQb3MgPSB7MCwgMH07DQotICAgIGlmICghOjpTZXRGaWxlUG9pbnRlckV4KG1faEZpbGUsIGRpc3QsICZuZXdQb3MsIEZJTEVfQkVHSU4pKSB7DQotICAgICAgICByZXR1cm4gKEZYX0ZJTEVTSVpFKSAtIDE7DQotICAgIH0NCi0gICAgcmV0dXJuIChGWF9GSUxFU0laRSluZXdQb3MuUXVhZFBhcnQ7DQotfQ0KLXNpemVfdCBDRlhDUlRfRmlsZUFjY2Vzc19XaW42NDo6UmVhZCh2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIpDQotew0KLSAgICBpZiAoIW1faEZpbGUpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIHNpemVfdCBzelJlYWQgPSAwOw0KLSAgICBpZiAoITo6UmVhZEZpbGUobV9oRmlsZSwgcEJ1ZmZlciwgKERXT1JEKXN6QnVmZmVyLCAoTFBEV09SRCkmc3pSZWFkLCBOVUxMKSkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgcmV0dXJuIHN6UmVhZDsNCi19DQotc2l6ZV90IENGWENSVF9GaWxlQWNjZXNzX1dpbjY0OjpXcml0ZShjb25zdCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIpDQotew0KLSAgICBpZiAoIW1faEZpbGUpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIHNpemVfdCBzeldyaXRlID0gMDsNCi0gICAgaWYgKCE6OldyaXRlRmlsZShtX2hGaWxlLCBwQnVmZmVyLCAoRFdPUkQpc3pCdWZmZXIsIChMUERXT1JEKSZzeldyaXRlLCBOVUxMKSkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgcmV0dXJuIHN6V3JpdGU7DQotfQ0KLXNpemVfdCBDRlhDUlRfRmlsZUFjY2Vzc19XaW42NDo6UmVhZFBvcyh2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIsIEZYX0ZJTEVTSVpFIHBvcykNCi17DQotICAgIGlmICghbV9oRmlsZSkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgaWYgKHBvcyA+PSBHZXRTaXplKCkpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGlmIChTZXRQb3NpdGlvbihwb3MpID09IChGWF9GSUxFU0laRSkgLSAxKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICByZXR1cm4gUmVhZChwQnVmZmVyLCBzekJ1ZmZlcik7DQotfQ0KLXNpemVfdCBDRlhDUlRfRmlsZUFjY2Vzc19XaW42NDo6V3JpdGVQb3MoY29uc3Qgdm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyLCBGWF9GSUxFU0laRSBwb3MpDQotew0KLSAgICBpZiAoIW1faEZpbGUpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGlmIChTZXRQb3NpdGlvbihwb3MpID09IChGWF9GSUxFU0laRSkgLSAxKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICByZXR1cm4gV3JpdGUocEJ1ZmZlciwgc3pCdWZmZXIpOw0KLX0NCi1GWF9CT09MIENGWENSVF9GaWxlQWNjZXNzX1dpbjY0OjpGbHVzaCgpDQotew0KLSAgICBpZiAoIW1faEZpbGUpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gOjpGbHVzaEZpbGVCdWZmZXJzKG1faEZpbGUpOw0KLX0NCi1GWF9CT09MIENGWENSVF9GaWxlQWNjZXNzX1dpbjY0OjpUcnVuY2F0ZShGWF9GSUxFU0laRSBzekZpbGUpDQotew0KLSAgICBpZiAoU2V0UG9zaXRpb24oc3pGaWxlKSA9PSAoRlhfRklMRVNJWkUpIC0gMSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHJldHVybiA6OlNldEVuZE9mRmlsZShtX2hGaWxlKTsNCi19DQotRlhfQk9PTCBGWF9GaWxlX0RlbGV0ZShGWF9CU1RSIGZpbGVOYW1lKQ0KLXsNCi0gICAgcmV0dXJuIDo6RGVsZXRlRmlsZUEoZmlsZU5hbWUuR2V0Q1N0cigpKTsNCi19DQotRlhfQk9PTCBGWF9GaWxlX0RlbGV0ZShGWF9XU1RSIGZpbGVOYW1lKQ0KLXsNCi0gICAgcmV0dXJuIDo6RGVsZXRlRmlsZVcoKExQQ1dTVFIpZmlsZU5hbWUuR2V0UHRyKCkpOw0KLX0NCi1GWF9CT09MIEZYX0ZpbGVfQ29weShGWF9CU1RSIGZpbGVOYW1lU3JjLCBGWF9CU1RSIGZpbGVOYW1lRHN0KQ0KLXsNCi0gICAgcmV0dXJuIDo6Q29weUZpbGVBKGZpbGVOYW1lU3JjLkdldENTdHIoKSwgZmlsZU5hbWVEc3QuR2V0Q1N0cigpLCBGQUxTRSk7DQotfQ0KLUZYX0JPT0wgRlhfRmlsZV9Db3B5KEZYX1dTVFIgZmlsZU5hbWVTcmMsIEZYX1dTVFIgZmlsZU5hbWVEc3QpDQotew0KLSAgICByZXR1cm4gOjpDb3B5RmlsZVcoKExQQ1dTVFIpZmlsZU5hbWVTcmMuR2V0UHRyKCksIChMUENXU1RSKWZpbGVOYW1lRHN0LkdldFB0cigpLCBGQUxTRSk7DQotfQ0KLUZYX0JPT0wgRlhfRmlsZV9Nb3ZlKEZYX0JTVFIgZmlsZU5hbWVTcmMsIEZYX0JTVFIgZmlsZU5hbWVEc3QpDQotew0KLSAgICByZXR1cm4gOjpNb3ZlRmlsZUEoZmlsZU5hbWVTcmMuR2V0Q1N0cigpLCBmaWxlTmFtZURzdC5HZXRDU3RyKCkpOw0KLX0NCi1GWF9CT09MIEZYX0ZpbGVfTW92ZShGWF9XU1RSIGZpbGVOYW1lU3JjLCBGWF9XU1RSIGZpbGVOYW1lRHN0KQ0KLXsNCi0gICAgcmV0dXJuIDo6TW92ZUZpbGVXKChMUENXU1RSKWZpbGVOYW1lU3JjLkdldFB0cigpLCAoTFBDV1NUUilmaWxlTmFtZURzdC5HZXRQdHIoKSk7DQotfQ0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2V4dC5oIgorI2luY2x1ZGUgImZ4Y3J0X3dpbmRvd3MuaCIKKyNpZiBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX1dJTkRPV1NfCitGWF9CT09MIEZYX0ZpbGVfRXhpc3QoRlhfQlNUUiBmaWxlTmFtZSkKK3sKKyAgICBGWF9EV09SRCBkd0F0dHJpID0gOjpHZXRGaWxlQXR0cmlidXRlc0EoZmlsZU5hbWUuR2V0Q1N0cigpKTsKKyAgICBpZiAoZHdBdHRyaSA9PSAtMSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiAoZHdBdHRyaSAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkgPT0gMDsKK30KK0ZYX0JPT0wgRlhfRmlsZV9FeGlzdChGWF9XU1RSIGZpbGVOYW1lKQoreworICAgIEZYX0RXT1JEIGR3QXR0cmkgPSA6OkdldEZpbGVBdHRyaWJ1dGVzVygoTFBDV1NUUilmaWxlTmFtZS5HZXRQdHIoKSk7CisgICAgaWYgKGR3QXR0cmkgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gKGR3QXR0cmkgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpID09IDA7Cit9CitJRlhDUlRfRmlsZUFjY2VzcyogRlhDUlRfRmlsZUFjY2Vzc19DcmVhdGUoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikKK3sKKyAgICBpZiAocEFsbG9jYXRvcikgeworICAgICAgICByZXR1cm4gRlhfTmV3QXRBbGxvY2F0b3IocEFsbG9jYXRvcikgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfV2luNjQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIEZYX05FVyBDRlhDUlRfRmlsZUFjY2Vzc19XaW42NDsKKyAgICB9Cit9Cit2b2lkIEZYQ1JUX1dpbmRvd3NfR2V0RmlsZU1vZGUoRlhfRFdPUkQgZHdNb2RlLCBGWF9EV09SRCAmZHdBY2Nlc3MsIEZYX0RXT1JEICZkd1NoYXJlLCBGWF9EV09SRCAmZHdDcmVhdGlvbikKK3sKKyAgICBkd0FjY2VzcyA9IEdFTkVSSUNfUkVBRDsKKyAgICBkd1NoYXJlID0gRklMRV9TSEFSRV9SRUFEIHwgRklMRV9TSEFSRV9XUklURTsKKyAgICBpZiAoIShkd01vZGUgJiBGWF9GSUxFTU9ERV9SZWFkT25seSkpIHsKKyAgICAgICAgZHdBY2Nlc3MgfD0gR0VORVJJQ19XUklURTsKKyAgICAgICAgZHdDcmVhdGlvbiA9IChkd01vZGUgJiBGWF9GSUxFTU9ERV9UcnVuY2F0ZSkgPyBDUkVBVEVfQUxXQVlTIDogT1BFTl9BTFdBWVM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZHdDcmVhdGlvbiA9IE9QRU5fRVhJU1RJTkc7CisgICAgfQorfQorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorV0lOQkFTRUFQSSBCT09MIFdJTkFQSSBHZXRGaWxlU2l6ZUV4KEhBTkRMRSBoRmlsZSwgUExBUkdFX0lOVEVHRVIgbHBGaWxlU2l6ZSk7CitXSU5CQVNFQVBJIEJPT0wgV0lOQVBJIFNldEZpbGVQb2ludGVyRXgoSEFORExFIGhGaWxlLCBMQVJHRV9JTlRFR0VSIGxpRGlzdGFuY2VUb01vdmUsIFBMQVJHRV9JTlRFR0VSIGxwTmV3RmlsZVBvaW50ZXIsIERXT1JEIGR3TW92ZU1ldGhvZCk7CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorQ0ZYQ1JUX0ZpbGVBY2Nlc3NfV2luNjQ6OkNGWENSVF9GaWxlQWNjZXNzX1dpbjY0KCkKKyAgICA6IG1faEZpbGUoTlVMTCkKK3sKK30KK0NGWENSVF9GaWxlQWNjZXNzX1dpbjY0Ojp+Q0ZYQ1JUX0ZpbGVBY2Nlc3NfV2luNjQoKQoreworICAgIENsb3NlKCk7Cit9CitGWF9CT09MIENGWENSVF9GaWxlQWNjZXNzX1dpbjY0OjpPcGVuKEZYX0JTVFIgZmlsZU5hbWUsIEZYX0RXT1JEIGR3TW9kZSkKK3sKKyAgICBpZiAobV9oRmlsZSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEZYX0RXT1JEIGR3QWNjZXNzLCBkd1NoYXJlLCBkd0NyZWF0aW9uOworICAgIEZYQ1JUX1dpbmRvd3NfR2V0RmlsZU1vZGUoZHdNb2RlLCBkd0FjY2VzcywgZHdTaGFyZSwgZHdDcmVhdGlvbik7CisgICAgbV9oRmlsZSA9IDo6Q3JlYXRlRmlsZUEoZmlsZU5hbWUuR2V0Q1N0cigpLCBkd0FjY2VzcywgZHdTaGFyZSwgTlVMTCwgZHdDcmVhdGlvbiwgRklMRV9BVFRSSUJVVEVfTk9STUFMLCBOVUxMKTsKKyAgICBpZiAobV9oRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgICBtX2hGaWxlID0gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIG1faEZpbGUgIT0gTlVMTDsKK30KK0ZYX0JPT0wgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfV2luNjQ6Ok9wZW4oRlhfV1NUUiBmaWxlTmFtZSwgRlhfRFdPUkQgZHdNb2RlKQoreworICAgIGlmIChtX2hGaWxlKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgRlhfRFdPUkQgZHdBY2Nlc3MsIGR3U2hhcmUsIGR3Q3JlYXRpb247CisgICAgRlhDUlRfV2luZG93c19HZXRGaWxlTW9kZShkd01vZGUsIGR3QWNjZXNzLCBkd1NoYXJlLCBkd0NyZWF0aW9uKTsKKyAgICBtX2hGaWxlID0gOjpDcmVhdGVGaWxlVygoTFBDV1NUUilmaWxlTmFtZS5HZXRQdHIoKSwgZHdBY2Nlc3MsIGR3U2hhcmUsIE5VTEwsIGR3Q3JlYXRpb24sIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgTlVMTCk7CisgICAgaWYgKG1faEZpbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgbV9oRmlsZSA9IE5VTEw7CisgICAgfQorICAgIHJldHVybiBtX2hGaWxlICE9IE5VTEw7Cit9Cit2b2lkIENGWENSVF9GaWxlQWNjZXNzX1dpbjY0OjpDbG9zZSgpCit7CisgICAgaWYgKCFtX2hGaWxlKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgOjpDbG9zZUhhbmRsZShtX2hGaWxlKTsKKyAgICBtX2hGaWxlID0gTlVMTDsKK30KK3ZvaWQgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfV2luNjQ6OlJlbGVhc2UoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcikKK3sKKyAgICBpZiAocEFsbG9jYXRvcikgeworICAgICAgICBGWF9EZWxldGVBdEFsbG9jYXRvcih0aGlzLCBwQWxsb2NhdG9yLCBDRlhDUlRfRmlsZUFjY2Vzc19XaW42NCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorfQorRlhfRklMRVNJWkUgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfV2luNjQ6OkdldFNpemUoKSBjb25zdAoreworICAgIGlmICghbV9oRmlsZSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgTEFSR0VfSU5URUdFUiBzaXplID0gezAsIDB9OworICAgIGlmICghOjpHZXRGaWxlU2l6ZUV4KG1faEZpbGUsICZzaXplKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIChGWF9GSUxFU0laRSlzaXplLlF1YWRQYXJ0OworfQorRlhfRklMRVNJWkUgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfV2luNjQ6OkdldFBvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1faEZpbGUpIHsKKyAgICAgICAgcmV0dXJuIChGWF9GSUxFU0laRSkgLSAxOworICAgIH0KKyAgICBMQVJHRV9JTlRFR0VSIGRpc3QgPSB7MCwgMH07CisgICAgTEFSR0VfSU5URUdFUiBuZXdQb3MgPSB7MCwgMH07CisgICAgaWYgKCE6OlNldEZpbGVQb2ludGVyRXgobV9oRmlsZSwgZGlzdCwgJm5ld1BvcywgRklMRV9DVVJSRU5UKSkgeworICAgICAgICByZXR1cm4gKEZYX0ZJTEVTSVpFKSAtIDE7CisgICAgfQorICAgIHJldHVybiAoRlhfRklMRVNJWkUpbmV3UG9zLlF1YWRQYXJ0OworfQorRlhfRklMRVNJWkUgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfV2luNjQ6OlNldFBvc2l0aW9uKEZYX0ZJTEVTSVpFIHBvcykKK3sKKyAgICBpZiAoIW1faEZpbGUpIHsKKyAgICAgICAgcmV0dXJuIChGWF9GSUxFU0laRSkgLSAxOworICAgIH0KKyAgICBMQVJHRV9JTlRFR0VSIGRpc3Q7CisgICAgZGlzdC5RdWFkUGFydCA9IHBvczsKKyAgICBMQVJHRV9JTlRFR0VSIG5ld1BvcyA9IHswLCAwfTsKKyAgICBpZiAoITo6U2V0RmlsZVBvaW50ZXJFeChtX2hGaWxlLCBkaXN0LCAmbmV3UG9zLCBGSUxFX0JFR0lOKSkgeworICAgICAgICByZXR1cm4gKEZYX0ZJTEVTSVpFKSAtIDE7CisgICAgfQorICAgIHJldHVybiAoRlhfRklMRVNJWkUpbmV3UG9zLlF1YWRQYXJ0OworfQorc2l6ZV90IENGWENSVF9GaWxlQWNjZXNzX1dpbjY0OjpSZWFkKHZvaWQqIHBCdWZmZXIsIHNpemVfdCBzekJ1ZmZlcikKK3sKKyAgICBpZiAoIW1faEZpbGUpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHNpemVfdCBzelJlYWQgPSAwOworICAgIGlmICghOjpSZWFkRmlsZShtX2hGaWxlLCBwQnVmZmVyLCAoRFdPUkQpc3pCdWZmZXIsIChMUERXT1JEKSZzelJlYWQsIE5VTEwpKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gc3pSZWFkOworfQorc2l6ZV90IENGWENSVF9GaWxlQWNjZXNzX1dpbjY0OjpXcml0ZShjb25zdCB2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIpCit7CisgICAgaWYgKCFtX2hGaWxlKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBzaXplX3Qgc3pXcml0ZSA9IDA7CisgICAgaWYgKCE6OldyaXRlRmlsZShtX2hGaWxlLCBwQnVmZmVyLCAoRFdPUkQpc3pCdWZmZXIsIChMUERXT1JEKSZzeldyaXRlLCBOVUxMKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIHN6V3JpdGU7Cit9CitzaXplX3QgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfV2luNjQ6OlJlYWRQb3Modm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyLCBGWF9GSUxFU0laRSBwb3MpCit7CisgICAgaWYgKCFtX2hGaWxlKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAocG9zID49IEdldFNpemUoKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKFNldFBvc2l0aW9uKHBvcykgPT0gKEZYX0ZJTEVTSVpFKSAtIDEpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBSZWFkKHBCdWZmZXIsIHN6QnVmZmVyKTsKK30KK3NpemVfdCBDRlhDUlRfRmlsZUFjY2Vzc19XaW42NDo6V3JpdGVQb3MoY29uc3Qgdm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyLCBGWF9GSUxFU0laRSBwb3MpCit7CisgICAgaWYgKCFtX2hGaWxlKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoU2V0UG9zaXRpb24ocG9zKSA9PSAoRlhfRklMRVNJWkUpIC0gMSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIFdyaXRlKHBCdWZmZXIsIHN6QnVmZmVyKTsKK30KK0ZYX0JPT0wgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfV2luNjQ6OkZsdXNoKCkKK3sKKyAgICBpZiAoIW1faEZpbGUpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gOjpGbHVzaEZpbGVCdWZmZXJzKG1faEZpbGUpOworfQorRlhfQk9PTCBDRlhDUlRfRmlsZUFjY2Vzc19XaW42NDo6VHJ1bmNhdGUoRlhfRklMRVNJWkUgc3pGaWxlKQoreworICAgIGlmIChTZXRQb3NpdGlvbihzekZpbGUpID09IChGWF9GSUxFU0laRSkgLSAxKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIDo6U2V0RW5kT2ZGaWxlKG1faEZpbGUpOworfQorRlhfQk9PTCBGWF9GaWxlX0RlbGV0ZShGWF9CU1RSIGZpbGVOYW1lKQoreworICAgIHJldHVybiA6OkRlbGV0ZUZpbGVBKGZpbGVOYW1lLkdldENTdHIoKSk7Cit9CitGWF9CT09MIEZYX0ZpbGVfRGVsZXRlKEZYX1dTVFIgZmlsZU5hbWUpCit7CisgICAgcmV0dXJuIDo6RGVsZXRlRmlsZVcoKExQQ1dTVFIpZmlsZU5hbWUuR2V0UHRyKCkpOworfQorRlhfQk9PTCBGWF9GaWxlX0NvcHkoRlhfQlNUUiBmaWxlTmFtZVNyYywgRlhfQlNUUiBmaWxlTmFtZURzdCkKK3sKKyAgICByZXR1cm4gOjpDb3B5RmlsZUEoZmlsZU5hbWVTcmMuR2V0Q1N0cigpLCBmaWxlTmFtZURzdC5HZXRDU3RyKCksIEZBTFNFKTsKK30KK0ZYX0JPT0wgRlhfRmlsZV9Db3B5KEZYX1dTVFIgZmlsZU5hbWVTcmMsIEZYX1dTVFIgZmlsZU5hbWVEc3QpCit7CisgICAgcmV0dXJuIDo6Q29weUZpbGVXKChMUENXU1RSKWZpbGVOYW1lU3JjLkdldFB0cigpLCAoTFBDV1NUUilmaWxlTmFtZURzdC5HZXRQdHIoKSwgRkFMU0UpOworfQorRlhfQk9PTCBGWF9GaWxlX01vdmUoRlhfQlNUUiBmaWxlTmFtZVNyYywgRlhfQlNUUiBmaWxlTmFtZURzdCkKK3sKKyAgICByZXR1cm4gOjpNb3ZlRmlsZUEoZmlsZU5hbWVTcmMuR2V0Q1N0cigpLCBmaWxlTmFtZURzdC5HZXRDU3RyKCkpOworfQorRlhfQk9PTCBGWF9GaWxlX01vdmUoRlhfV1NUUiBmaWxlTmFtZVNyYywgRlhfV1NUUiBmaWxlTmFtZURzdCkKK3sKKyAgICByZXR1cm4gOjpNb3ZlRmlsZVcoKExQQ1dTVFIpZmlsZU5hbWVTcmMuR2V0UHRyKCksIChMUENXU1RSKWZpbGVOYW1lRHN0LkdldFB0cigpKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjcnQvZnhjcnRfd2luZG93cy5oIGIvY29yZS9zcmMvZnhjcnQvZnhjcnRfd2luZG93cy5oCmluZGV4IGJlYjY4NGQuLjljMmU0MjggMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y3J0L2Z4Y3J0X3dpbmRvd3MuaAorKysgYi9jb3JlL3NyYy9meGNydC9meGNydF93aW5kb3dzLmgKQEAgLTEsMzMgKzEsMzMgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0ZYQ1JUX1dJTkRPV1NfDQotI2RlZmluZSBfRlhDUlRfV0lORE9XU18NCi0jaW5jbHVkZSAiZXh0ZW5zaW9uLmgiDQotI2lmIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18NCi1jbGFzcyBDRlhDUlRfRmlsZUFjY2Vzc19XaW42NCA6IHB1YmxpYyBJRlhDUlRfRmlsZUFjY2VzcywgcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDRlhDUlRfRmlsZUFjY2Vzc19XaW42NCgpOw0KLSAgICB2aXJ0dWFsIH5DRlhDUlRfRmlsZUFjY2Vzc19XaW42NCgpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCU9wZW4oRlhfQlNUUiBmaWxlTmFtZSwgRlhfRFdPUkQgZHdNb2RlKTsNCi0gICAgdmlydHVhbCBGWF9CT09MCQlPcGVuKEZYX1dTVFIgZmlsZU5hbWUsIEZYX0RXT1JEIGR3TW9kZSk7DQotICAgIHZpcnR1YWwgdm9pZAkJQ2xvc2UoKTsNCi0gICAgdmlydHVhbCB2b2lkCQlSZWxlYXNlKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKTsNCi0gICAgdmlydHVhbCBGWF9GSUxFU0laRQlHZXRTaXplKCkgY29uc3Q7DQotICAgIHZpcnR1YWwgRlhfRklMRVNJWkUJR2V0UG9zaXRpb24oKSBjb25zdDsNCi0gICAgdmlydHVhbCBGWF9GSUxFU0laRQlTZXRQb3NpdGlvbihGWF9GSUxFU0laRSBwb3MpOw0KLSAgICB2aXJ0dWFsIHNpemVfdAkJUmVhZCh2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIpOw0KLSAgICB2aXJ0dWFsIHNpemVfdAkJV3JpdGUoY29uc3Qgdm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyKTsNCi0gICAgdmlydHVhbCBzaXplX3QJCVJlYWRQb3Modm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyLCBGWF9GSUxFU0laRSBwb3MpOw0KLSAgICB2aXJ0dWFsIHNpemVfdAkJV3JpdGVQb3MoY29uc3Qgdm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyLCBGWF9GSUxFU0laRSBwb3MpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCUZsdXNoKCk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJVHJ1bmNhdGUoRlhfRklMRVNJWkUgc3pGaWxlKTsNCi1wcm90ZWN0ZWQ6DQotICAgIEZYX0xQVk9JRAltX2hGaWxlOw0KLX07DQotI2VuZGlmDQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlhDUlRfV0lORE9XU18KKyNkZWZpbmUgX0ZYQ1JUX1dJTkRPV1NfCisjaW5jbHVkZSAiZXh0ZW5zaW9uLmgiCisjaWYgX0ZYTV9QTEFURk9STV8gPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXworY2xhc3MgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfV2luNjQgOiBwdWJsaWMgSUZYQ1JUX0ZpbGVBY2Nlc3MsIHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ0ZYQ1JUX0ZpbGVBY2Nlc3NfV2luNjQoKTsKKyAgICB2aXJ0dWFsIH5DRlhDUlRfRmlsZUFjY2Vzc19XaW42NCgpOworICAgIHZpcnR1YWwgRlhfQk9PTAkJT3BlbihGWF9CU1RSIGZpbGVOYW1lLCBGWF9EV09SRCBkd01vZGUpOworICAgIHZpcnR1YWwgRlhfQk9PTAkJT3BlbihGWF9XU1RSIGZpbGVOYW1lLCBGWF9EV09SRCBkd01vZGUpOworICAgIHZpcnR1YWwgdm9pZAkJQ2xvc2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQJCVJlbGVhc2UoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpOworICAgIHZpcnR1YWwgRlhfRklMRVNJWkUJR2V0U2l6ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgRlhfRklMRVNJWkUJR2V0UG9zaXRpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIEZYX0ZJTEVTSVpFCVNldFBvc2l0aW9uKEZYX0ZJTEVTSVpFIHBvcyk7CisgICAgdmlydHVhbCBzaXplX3QJCVJlYWQodm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyKTsKKyAgICB2aXJ0dWFsIHNpemVfdAkJV3JpdGUoY29uc3Qgdm9pZCogcEJ1ZmZlciwgc2l6ZV90IHN6QnVmZmVyKTsKKyAgICB2aXJ0dWFsIHNpemVfdAkJUmVhZFBvcyh2b2lkKiBwQnVmZmVyLCBzaXplX3Qgc3pCdWZmZXIsIEZYX0ZJTEVTSVpFIHBvcyk7CisgICAgdmlydHVhbCBzaXplX3QJCVdyaXRlUG9zKGNvbnN0IHZvaWQqIHBCdWZmZXIsIHNpemVfdCBzekJ1ZmZlciwgRlhfRklMRVNJWkUgcG9zKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJCUZsdXNoKCk7CisgICAgdmlydHVhbCBGWF9CT09MCQlUcnVuY2F0ZShGWF9GSUxFU0laRSBzekZpbGUpOworcHJvdGVjdGVkOgorICAgIEZYX0xQVk9JRAltX2hGaWxlOworfTsKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNydC9tZW1faW50LmggYi9jb3JlL3NyYy9meGNydC9tZW1faW50LmgKaW5kZXggZGE0MzAyMy4uM2UzZDI1YSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjcnQvbWVtX2ludC5oCisrKyBiL2NvcmUvc3JjL2Z4Y3J0L21lbV9pbnQuaApAQCAtMSwyMzIgKzEsMjMyIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GWE1fTUVNX0lOVF9IXw0KLSNkZWZpbmUgX0ZYTV9NRU1fSU5UX0hfDQotc3RydWN0IEZYX0RlZkFsbG9jYXRvciB7DQotICAgIElGWF9BbGxvY2F0b3IJCQltX0FsbG9jYXRvcjsNCi0gICAgc3RydWN0IENGWF9NZW1vcnlNZ3IqCW1fcEZveGl0TWdyOw0KLX07DQotc3RydWN0IENGWF9NZW1vcnlNZ3Igew0KLXB1YmxpYzoNCi0gICAgRlhNRU1fU3lzdGVtTWdyKgltX3BTeXN0ZW1NZ3I7DQotICAgIEZYX0RlZkFsbG9jYXRvcgkJbV9EZWZBbGxvY2F0b3I7DQotICAgIEZYX0xQVk9JRAkJCW1fcEV4dGVybmFsTWVtb3J5Ow0KLSAgICBGWF9CT09MCQkJCW1fYlJlbGVhc2VNZ3I7DQotICAgIHZvaWQJCQlJbml0KEZYTUVNX1N5c3RlbU1nciogcFN5c3RlbU1ncik7DQotICAgIHZvaWQqCQkJQWxsb2Moc2l6ZV90IHNpemUsIGludCBmbGFncyk7DQotICAgIHZvaWQqCQkJQWxsb2NEZWJ1ZyhzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBGWF9MUENTVFIgZmlsZSwgaW50IGxpbmUpOw0KLSAgICB2b2lkKgkJCVJlYWxsb2Modm9pZCogcCwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7DQotICAgIHZvaWQqCQkJUmVhbGxvY0RlYnVnKHZvaWQqIHAsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsIEZYX0xQQ1NUUiBmaWxlLCBpbnQgbGluZSk7DQotICAgIHZvaWQJCQlGcmVlKHZvaWQqIHAsIGludCBmbGFncyk7DQotICAgIHZvaWQJCQlQdXJnZU1ncigpOw0KLX07DQotZXh0ZXJuIENGWF9NZW1vcnlNZ3IqIGdfcERlZkZveGl0TWdyOw0KLSNkZWZpbmUgRklYRURNRU1fUEFHRV9FWFRSQVNQQUNFCQlzaXplb2Yoc2l6ZV90KQ0KLSNkZWZpbmUgRklYRURNRU1fQkxPQ0tOVU0oYnMpCQkJKDggKiAoRlhfRklYRURNRU1fUEFHRVNJWkUgLSBGSVhFRE1FTV9QQUdFX0VYVFJBU1BBQ0UpIC8gKDggKiBicyArIDEpKQ0KLSNkZWZpbmUgRklYRURNRU1fOEJZVEVTX0JMT0NLTlVNCQlGSVhFRE1FTV9CTE9DS05VTSg4KQ0KLSNkZWZpbmUgRklYRURNRU1fMTZCWVRFU19CTE9DS05VTQkJRklYRURNRU1fQkxPQ0tOVU0oMTYpDQotI2RlZmluZSBGSVhFRE1FTV8zMkJZVEVTX0JMT0NLTlVNCQlGSVhFRE1FTV9CTE9DS05VTSgzMikNCi1leHRlcm4gY29uc3QgRlhfQllURSBaZXJvTGVhZFBvc1syNTZdOw0KLWV4dGVybiBjb25zdCBGWF9CWVRFIE9uZUxlYWRQb3NbMjU2XTsNCi10ZW1wbGF0ZSA8c2l6ZV90IGJsb2NrTnVtLCBzaXplX3QgYmxvY2tTaXplPg0KLWNsYXNzIENGWE1FTV9GaXhlZFBhZ2UNCi17DQotcHVibGljOg0KLSAgICB2b2lkCQlJbml0aWFsaXplKCkNCi0gICAgew0KLSAgICAgICAgbV9uQXZhaWxDb3VudCA9IGJsb2NrTnVtOw0KLSAgICAgICAgRlhTWVNfbWVtc2V0MzIobV9CdXN5TWFwLCAwLCAoYmxvY2tOdW0gKyA3KSAvIDgpOw0KLSAgICB9DQotICAgIEZYX0JPT0wJCUhhc0ZyZWVCbG9jaygpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiAoRlhfQk9PTCltX25BdmFpbENvdW50Ow0KLSAgICB9DQotICAgIEZYX0xQVk9JRAlBbGxvYyhzaXplX3Qgc2l6ZSkNCi0gICAgew0KLSAgICAgICAgRlhTWVNfYXNzZXJ0KG1fbkF2YWlsQ291bnQpOw0KLSAgICAgICAgRlhfTFBEV09SRCBwRmluZCA9IChGWF9MUERXT1JEKW1fQnVzeU1hcDsNCi0gICAgICAgIHNpemVfdCBpID0gMDsNCi0gICAgICAgIHdoaWxlIChpIDwgKGJsb2NrTnVtICsgNykgLyA4IC8gNCAmJiBwRmluZFtpXSA9PSAweEZGRkZGRkZGKSB7DQotICAgICAgICAgICAgaSArKzsNCi0gICAgICAgIH0NCi0gICAgICAgIGkgKj0gNDsNCi0gICAgICAgIHdoaWxlIChtX0J1c3lNYXBbaV0gPT0gMHhGRikgew0KLSAgICAgICAgICAgIGkgKys7DQotICAgICAgICB9DQotICAgICAgICBzaXplX3QgcG9zID0gWmVyb0xlYWRQb3NbbV9CdXN5TWFwW2ldXTsNCi0gICAgICAgIG1fQnVzeU1hcFtpXSB8PSAxIDw8ICg3IC0gcG9zKTsNCi0gICAgICAgIG1fbkF2YWlsQ291bnQgLS07DQotICAgICAgICByZXR1cm4gKEZYX0xQQllURSkodGhpcyArIDEpICsgKGkgKiA4ICsgcG9zKSAqIGJsb2NrU2l6ZTsNCi0gICAgfQ0KLSAgICB2b2lkCQlGcmVlKEZYX0xQVk9JRCBwKQ0KLSAgICB7DQotICAgICAgICBGWFNZU19hc3NlcnQocCA+IChGWF9MUFZPSUQpdGhpcyAmJiBwIDwgKEZYX0xQVk9JRCkoKEZYX0xQQllURSl0aGlzICsgRlhfRklYRURNRU1fUEFHRVNJWkUpKTsNCi0gICAgICAgIHNpemVfdCBwb3MgPSAoKEZYX0xQQllURSlwIC0gKEZYX0xQQllURSkodGhpcyArIDEpKSAvIGJsb2NrU2l6ZTsNCi0gICAgICAgIG1fQnVzeU1hcFtwb3MgLyA4XSAmPSB+KDEgPDwgKDcgLSAocG9zICUgOCkpKTsNCi0gICAgICAgIG1fbkF2YWlsQ291bnQgKys7DQotICAgIH0NCi0gICAgdm9sYXRpbGUgc2l6ZV90CW1fbkF2YWlsQ291bnQ7DQotICAgIEZYX0JZVEUJCQltX0J1c3lNYXBbKGJsb2NrTnVtICsgNykgLyA4XTsNCi19Ow0KLXR5cGVkZWYgQ0ZYTUVNX0ZpeGVkUGFnZTxGSVhFRE1FTV84QllURVNfQkxPQ0tOVU0sIDg+CUNGWE1FTV84Qnl0ZXNQYWdlOw0KLXR5cGVkZWYgQ0ZYTUVNX0ZpeGVkUGFnZTxGSVhFRE1FTV8xNkJZVEVTX0JMT0NLTlVNLCAxNj4JQ0ZYTUVNXzE2Qnl0ZXNQYWdlOw0KLXR5cGVkZWYgQ0ZYTUVNX0ZpeGVkUGFnZTxGSVhFRE1FTV8zMkJZVEVTX0JMT0NLTlVNLCAzMj4JQ0ZYTUVNXzMyQnl0ZXNQYWdlOw0KLXRlbXBsYXRlIDxzaXplX3QgYmxvY2tOdW0sIHNpemVfdCBibG9ja1NpemU+DQotY2xhc3MgQ0ZYTUVNX0ZpeGVkUGFnZXMNCi17DQotcHVibGljOg0KLSAgICB0eXBlZGVmIENGWE1FTV9GaXhlZFBhZ2U8YmxvY2tOdW0sIGJsb2NrU2l6ZT4gVDsNCi0gICAgRlhfTFBCWVRFCQltX3BTdGFydFBhZ2U7DQotICAgIEZYX0xQQllURQkJbV9wTGltaXRQb3M7DQotICAgIEZYX0xQQllURQkJbV9wQ3VyUGFnZTsNCi0gICAgdm9sYXRpbGUgc2l6ZV90CW1fbkF2YWlsQmxvY2tzOw0KLSAgICB2b2lkCQlJbml0aWFsaXplKEZYX0xQQllURSBwU3RhcnQsIHNpemVfdCBwYWdlcykNCi0gICAgew0KLSAgICAgICAgbV9wU3RhcnRQYWdlID0gbV9wQ3VyUGFnZSA9IHBTdGFydDsNCi0gICAgICAgIG1fbkF2YWlsQmxvY2tzID0gcGFnZXMgKiBibG9ja051bTsNCi0gICAgICAgIGZvciAoc2l6ZV90IG4gPSAwOyBuIDwgcGFnZXM7IG4gKyspIHsNCi0gICAgICAgICAgICAoKFQqKXBTdGFydCktPkluaXRpYWxpemUoKTsNCi0gICAgICAgICAgICBwU3RhcnQgKz0gRlhfRklYRURNRU1fUEFHRVNJWkU7DQotICAgICAgICB9DQotICAgICAgICBtX3BMaW1pdFBvcyA9IHBTdGFydDsNCi0gICAgfQ0KLSAgICBGWF9CT09MCQlJc0VtcHR5KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fbkF2YWlsQmxvY2tzID09IChtX3BMaW1pdFBvcyAtIG1fcFN0YXJ0UGFnZSkgLyBGWF9GSVhFRE1FTV9QQUdFU0laRSAqIGJsb2NrTnVtOw0KLSAgICB9DQotICAgIEZYX0JPT0wJCUhhc0ZyZWVCbG9jaygpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiAoRlhfQk9PTCltX25BdmFpbEJsb2NrczsNCi0gICAgfQ0KLSAgICBGWF9MUFZPSUQJQWxsb2Moc2l6ZV90IHNpemUpDQotICAgIHsNCi0gICAgICAgIEZYU1lTX2Fzc2VydChtX25BdmFpbEJsb2Nrcyk7DQotICAgICAgICBkbyB7DQotICAgICAgICAgICAgaWYgKCgoVCopbV9wQ3VyUGFnZSktPkhhc0ZyZWVCbG9jaygpKSB7DQotICAgICAgICAgICAgICAgIG1fbkF2YWlsQmxvY2tzIC0tOw0KLSAgICAgICAgICAgICAgICByZXR1cm4gKChUKiltX3BDdXJQYWdlKS0+QWxsb2Moc2l6ZSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIG1fcEN1clBhZ2UgKz0gRlhfRklYRURNRU1fUEFHRVNJWkU7DQotICAgICAgICAgICAgaWYgKG1fcEN1clBhZ2UgPT0gbV9wTGltaXRQb3MpIHsNCi0gICAgICAgICAgICAgICAgbV9wQ3VyUGFnZSA9IG1fcFN0YXJ0UGFnZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IHdoaWxlIChUUlVFKTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHZvaWQJCUZyZWUoRlhfTFBWT0lEIHApDQotICAgIHsNCi0gICAgICAgIEZYU1lTX2Fzc2VydChwID4gKEZYX0xQVk9JRCltX3BTdGFydFBhZ2UgJiYgcCA8IChGWF9MUFZPSUQpbV9wTGltaXRQb3MpOw0KLSAgICAgICAgKChUKikobV9wU3RhcnRQYWdlICsgKChGWF9MUEJZVEUpcCAtIG1fcFN0YXJ0UGFnZSkgLyBGWF9GSVhFRE1FTV9QQUdFU0laRSAqIEZYX0ZJWEVETUVNX1BBR0VTSVpFKSktPkZyZWUocCk7DQotICAgICAgICBtX25BdmFpbEJsb2NrcyArKzsNCi0gICAgfQ0KLX07DQotdHlwZWRlZiBDRlhNRU1fRml4ZWRQYWdlczxGSVhFRE1FTV84QllURVNfQkxPQ0tOVU0sIDg+CQlDRlhNRU1fOEJ5dGVzUGFnZXM7DQotdHlwZWRlZiBDRlhNRU1fRml4ZWRQYWdlczxGSVhFRE1FTV8xNkJZVEVTX0JMT0NLTlVNLCAxNj4JQ0ZYTUVNXzE2Qnl0ZXNQYWdlczsNCi10eXBlZGVmIENGWE1FTV9GaXhlZFBhZ2VzPEZJWEVETUVNXzMyQllURVNfQkxPQ0tOVU0sIDMyPglDRlhNRU1fMzJCeXRlc1BhZ2VzOw0KLWNsYXNzIENGWE1FTV9CbG9jaw0KLXsNCi1wdWJsaWM6DQotICAgIHNpemVfdAkJCW1fbkJsb2NrU2l6ZTsNCi0gICAgQ0ZYTUVNX0Jsb2NrKgltX3BOZXh0QmxvY2s7DQotfTsNCi1jbGFzcyBDRlhNRU1fUGFnZQ0KLXsNCi1wdWJsaWM6DQotICAgIHNpemVfdAkJCW1fbkF2YWlsU2l6ZTsNCi0gICAgQ0ZYTUVNX0Jsb2NrKgltX3BMaW1pdFBvczsNCi0gICAgQ0ZYTUVNX0Jsb2NrCW1fQXZhaWxIZWFkOw0KLSAgICB2b2lkCQlJbml0aWFsaXplKHNpemVfdCBzaXplKTsNCi0gICAgRlhfQk9PTAkJSXNFbXB0eSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX0F2YWlsSGVhZC5tX3BOZXh0QmxvY2sgJiYgbV9BdmFpbEhlYWQubV9uQmxvY2tTaXplID09IG1fQXZhaWxIZWFkLm1fcE5leHRCbG9jay0+bV9uQmxvY2tTaXplOw0KLSAgICB9DQotICAgIEZYX0xQVk9JRAlBbGxvYyhzaXplX3Qgc2l6ZSk7DQotICAgIEZYX0xQVk9JRAlSZWFsbG9jKEZYX0xQVk9JRCBwLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOw0KLSAgICB2b2lkCQlGcmVlKEZYX0xQVk9JRCBwKTsNCi1wcm90ZWN0ZWQ6DQotICAgIEZYX0xQVk9JRAlBbGxvYyhDRlhNRU1fQmxvY2sqIHBQcmV2QmxvY2ssIENGWE1FTV9CbG9jayogcE5leHRCbG9jaywgc2l6ZV90IHNpemUsIHNpemVfdCBvbGRzaXplKTsNCi19Ow0KLWNsYXNzIENGWE1FTV9QYWdlcw0KLXsNCi1wdWJsaWM6DQotICAgIENGWE1FTV9QYWdlKgltX3BTdGFydFBhZ2U7DQotICAgIENGWE1FTV9QYWdlKgltX3BMaW1pdFBvczsNCi0gICAgQ0ZYTUVNX1BhZ2UqCW1fcEN1clBhZ2U7DQotICAgIHNpemVfdAkJCW1fblBhZ2VTaXplOw0KLSAgICB2b2lkCQlJbml0aWFsaXplKEZYX0xQQllURSBwU3RhcnQsIHNpemVfdCBwYWdlU2l6ZSwgc2l6ZV90IHBhZ2VzKTsNCi0gICAgRlhfQk9PTAkJSXNFbXB0eSgpIGNvbnN0Ow0KLSAgICBGWF9MUFZPSUQJQWxsb2Moc2l6ZV90IHNpemUpOw0KLSAgICBGWF9MUFZPSUQJUmVhbGxvYyhGWF9MUFZPSUQgcCwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsNCi0gICAgdm9pZAkJRnJlZShGWF9MUFZPSUQgcCk7DQotfTsNCi1jbGFzcyBDRlhNRU1fUG9vbA0KLXsNCi1wdWJsaWM6DQotICAgIENGWE1FTV9Qb29sKgkJCW1fcFByZXZQb29sOw0KLSAgICBDRlhNRU1fUG9vbCoJCQltX3BOZXh0UG9vbDsNCi0gICAgQ0ZYTUVNXzhCeXRlc1BhZ2VzCQltXzhCeXRlc1BhZ2VzOw0KLSAgICBDRlhNRU1fMTZCeXRlc1BhZ2VzCQltXzE2Qnl0ZXNQYWdlczsNCi0gICAgQ0ZYTUVNXzMyQnl0ZXNQYWdlcwkJbV8zMkJ5dGVzUGFnZXM7DQotICAgIENGWE1FTV9QYWdlcwkJCW1fTWlkUGFnZXM7DQotICAgIEZYX0JPT0wJCQkJCW1fYkFsb25lOw0KLSAgICBGWF9EV09SRAkJCQltX2R3UmVzZXJ2ZWRbM107DQotICAgIEZYX0xQVk9JRAkJCQltX3BMaW1pdFBvczsNCi0gICAgQ0ZYTUVNX1BhZ2UqCQkJbV9wTGFyZ2VQYWdlOw0KLSAgICB2b2lkCQlJbml0aWFsaXplKGNvbnN0IEZYX01FTUNPTkZJRyogcE1lbUNvbmZpZywgc2l6ZV90IHNpemUsIHNpemVfdCBwYWdlTnVtOEJ5dGVzLCBzaXplX3QgcGFnZU51bTE2Qnl0ZXMsIHNpemVfdCBwYWdlTnVtMzJCeXRlcywgc2l6ZV90IHBhZ2VOdW1NaWQpOw0KLSAgICBGWF9CT09MCQlJc0VtcHR5KCkgY29uc3Q7DQotICAgIHNpemVfdAkJR2V0U2l6ZShGWF9MUFZPSUQgcCkgY29uc3Q7DQotICAgIEZYX0xQVk9JRAlSZWFsbG9jKEZYX0xQVk9JRCBwLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOw0KLSAgICB2b2lkCQlGcmVlKEZYX0xQVk9JRCBwKTsNCi19Ow0KLWNsYXNzIENGWE1FTV9GaXhlZE1ncg0KLXsNCi1wdWJsaWM6DQotICAgIHZvaWQJCQlJbml0aWFsaXplKHNpemVfdCBzaXplKTsNCi0gICAgRlhfTFBWT0lECQlBbGxvYyhzaXplX3Qgc2l6ZSk7DQotICAgIEZYX0xQVk9JRAkJUmVhbGxvYyhGWF9MUFZPSUQgcCwgc2l6ZV90IG5ld1NpemUpOw0KLSAgICB2b2lkCQkJRnJlZShGWF9MUFZPSUQgcCk7DQotICAgIHZvaWQJCQlGcmVlQWxsKCk7DQotICAgIHZvaWQJCQlQdXJnZSgpOw0KLSAgICBDRlhNRU1fUG9vbCoJR2V0Rmlyc3RQb29sKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuICZtX0ZpcnN0UG9vbDsNCi0gICAgfQ0KLSAgICBzaXplX3QJCQlHZXRTaXplKEZYX0xQVk9JRCBwKSBjb25zdDsNCi0gICAgRlhNRU1fU3lzdGVtTWdyCQltX1N5c3RlbU1ncjsNCi0gICAgRlhNRU1fU3lzdGVtTWdyMioJbV9wRXh0ZW5kZXI7DQotICAgIEZYX0xQVk9JRAkJCW1fcFJlc2VydmVkOw0KLSAgICBGWF9NRU1DT05GSUcJCW1fTWVtQ29uZmlnOw0KLXByb3RlY3RlZDoNCi0gICAgRlhfTFBWT0lECQlBbGxvYzE2KENGWE1FTV9Qb29sICoqcHAzMlBvb2wgPSBOVUxMLCBzaXplX3Qgc2l6ZSA9IDApOw0KLSAgICBGWF9MUFZPSUQJCUFsbG9jMzIoc2l6ZV90IHNpemUpOw0KLSAgICBGWF9MUFZPSUQJCUFsbG9jU21hbGwoc2l6ZV90IHNpemUpOw0KLSAgICBGWF9MUFZPSUQJCUFsbG9jTWlkKHNpemVfdCBzaXplKTsNCi0gICAgRlhfTFBWT0lECQlBbGxvY0xhcmdlKHNpemVfdCBzaXplKTsNCi0gICAgRlhfTFBWT0lECQlSZWFsbG9jU21hbGwoQ0ZYTUVNX1Bvb2wqIHBQb29sLCBGWF9MUFZPSUQgcCwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsNCi0gICAgdm9pZAkJCUZyZWVQb29sKENGWE1FTV9Qb29sKiBwUG9vbCk7DQotICAgIENGWE1FTV9Qb29sCQltX0ZpcnN0UG9vbDsNCi19Ow0KLSNkZWZpbmUgRklYRURNRU1fUFJPWFlTSVpFXzAJKDEwMjQgKiAxMDI0ICogOCkNCi0jZGVmaW5lIEZJWEVETUVNX1BST1hZU0laRV8xCSgxMDI0ICogMTAyNCAqIDE2KQ0KLSNkZWZpbmUgRklYRURNRU1fUFJPWFlTSVpFXzIJKDEwMjQgKiAxMDI0ICogMzIpDQotI2RlZmluZSBGSVhFRE1FTV9QUk9YWVNJWkVfMwkoMTAyNCAqIDEwMjQgKiA2NCkNCi0jZGVmaW5lIEZJWEVETUVNX1BST1hZU0laRV80CSgxMDI0ICogMTAyNCAqIDEyOCkNCi0jZGVmaW5lIEZJWEVETUVNX1BST1hZU0laRV81CSgxMDI0ICogMTAyNCAqIDI1NikNCi1jb25zdCBGWF9NRU1DT05GSUcqCUZpeGVkTWdyX0dldENvbmZpZyhzaXplX3QgblNpemUpOw0KLWNsYXNzIENGaXhlZE1ncl9Qcm94eQ0KLXsNCi1wdWJsaWM6DQotICAgIEZYTUVNX0ZveGl0TWdyKglJbml0aWFsaXplKEZYX0xQVk9JRCBwQnVmZmVyLCBzaXplX3QgblNpemUsIEZYX0JPT0wgYkV4dGVuc2libGUpOw0KLSAgICBzdGF0aWMgRlhfQk9PTAlDb21tb25fTW9yZShGWE1FTV9TeXN0ZW1NZ3IyKiBwTWdyLCBzaXplX3QgYWxsb2Nfc2l6ZSwgdm9pZCoqIG5ld19tZW1vcnksIHNpemVfdCogbmV3X3NpemUpOw0KLSAgICBzdGF0aWMgdm9pZAkJQ29tbW9uX0ZyZWUoRlhNRU1fU3lzdGVtTWdyMiogcE1nciwgdm9pZCogbWVtb3J5KTsNCi0gICAgRlhNRU1fU3lzdGVtTWdyMgltX1N5c3RlbU1ncjsNCi0gICAgQ0ZYTUVNX1BhZ2UqCQltX3BGaXhlZFBhZ2U7DQotICAgIEZYX0xQVk9JRAkJCW1fcEJ1ZmZlcjsNCi0gICAgc2l6ZV90CQkJCW1fblNpemU7DQotICAgIEZYX0JPT0wJCQkJbV9iRXh0ZW5zaWJsZTsNCi19Ow0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZYTV9NRU1fSU5UX0hfCisjZGVmaW5lIF9GWE1fTUVNX0lOVF9IXworc3RydWN0IEZYX0RlZkFsbG9jYXRvciB7CisgICAgSUZYX0FsbG9jYXRvcgkJCW1fQWxsb2NhdG9yOworICAgIHN0cnVjdCBDRlhfTWVtb3J5TWdyKgltX3BGb3hpdE1ncjsKK307CitzdHJ1Y3QgQ0ZYX01lbW9yeU1nciB7CitwdWJsaWM6CisgICAgRlhNRU1fU3lzdGVtTWdyKgltX3BTeXN0ZW1NZ3I7CisgICAgRlhfRGVmQWxsb2NhdG9yCQltX0RlZkFsbG9jYXRvcjsKKyAgICBGWF9MUFZPSUQJCQltX3BFeHRlcm5hbE1lbW9yeTsKKyAgICBGWF9CT09MCQkJCW1fYlJlbGVhc2VNZ3I7CisgICAgdm9pZAkJCUluaXQoRlhNRU1fU3lzdGVtTWdyKiBwU3lzdGVtTWdyKTsKKyAgICB2b2lkKgkJCUFsbG9jKHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworICAgIHZvaWQqCQkJQWxsb2NEZWJ1ZyhzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBGWF9MUENTVFIgZmlsZSwgaW50IGxpbmUpOworICAgIHZvaWQqCQkJUmVhbGxvYyh2b2lkKiBwLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKKyAgICB2b2lkKgkJCVJlYWxsb2NEZWJ1Zyh2b2lkKiBwLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzLCBGWF9MUENTVFIgZmlsZSwgaW50IGxpbmUpOworICAgIHZvaWQJCQlGcmVlKHZvaWQqIHAsIGludCBmbGFncyk7CisgICAgdm9pZAkJCVB1cmdlTWdyKCk7Cit9OworZXh0ZXJuIENGWF9NZW1vcnlNZ3IqIGdfcERlZkZveGl0TWdyOworI2RlZmluZSBGSVhFRE1FTV9QQUdFX0VYVFJBU1BBQ0UJCXNpemVvZihzaXplX3QpCisjZGVmaW5lIEZJWEVETUVNX0JMT0NLTlVNKGJzKQkJCSg4ICogKEZYX0ZJWEVETUVNX1BBR0VTSVpFIC0gRklYRURNRU1fUEFHRV9FWFRSQVNQQUNFKSAvICg4ICogYnMgKyAxKSkKKyNkZWZpbmUgRklYRURNRU1fOEJZVEVTX0JMT0NLTlVNCQlGSVhFRE1FTV9CTE9DS05VTSg4KQorI2RlZmluZSBGSVhFRE1FTV8xNkJZVEVTX0JMT0NLTlVNCQlGSVhFRE1FTV9CTE9DS05VTSgxNikKKyNkZWZpbmUgRklYRURNRU1fMzJCWVRFU19CTE9DS05VTQkJRklYRURNRU1fQkxPQ0tOVU0oMzIpCitleHRlcm4gY29uc3QgRlhfQllURSBaZXJvTGVhZFBvc1syNTZdOworZXh0ZXJuIGNvbnN0IEZYX0JZVEUgT25lTGVhZFBvc1syNTZdOwordGVtcGxhdGUgPHNpemVfdCBibG9ja051bSwgc2l6ZV90IGJsb2NrU2l6ZT4KK2NsYXNzIENGWE1FTV9GaXhlZFBhZ2UKK3sKK3B1YmxpYzoKKyAgICB2b2lkCQlJbml0aWFsaXplKCkKKyAgICB7CisgICAgICAgIG1fbkF2YWlsQ291bnQgPSBibG9ja051bTsKKyAgICAgICAgRlhTWVNfbWVtc2V0MzIobV9CdXN5TWFwLCAwLCAoYmxvY2tOdW0gKyA3KSAvIDgpOworICAgIH0KKyAgICBGWF9CT09MCQlIYXNGcmVlQmxvY2soKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChGWF9CT09MKW1fbkF2YWlsQ291bnQ7CisgICAgfQorICAgIEZYX0xQVk9JRAlBbGxvYyhzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIEZYU1lTX2Fzc2VydChtX25BdmFpbENvdW50KTsKKyAgICAgICAgRlhfTFBEV09SRCBwRmluZCA9IChGWF9MUERXT1JEKW1fQnVzeU1hcDsKKyAgICAgICAgc2l6ZV90IGkgPSAwOworICAgICAgICB3aGlsZSAoaSA8IChibG9ja051bSArIDcpIC8gOCAvIDQgJiYgcEZpbmRbaV0gPT0gMHhGRkZGRkZGRikgeworICAgICAgICAgICAgaSArKzsKKyAgICAgICAgfQorICAgICAgICBpICo9IDQ7CisgICAgICAgIHdoaWxlIChtX0J1c3lNYXBbaV0gPT0gMHhGRikgeworICAgICAgICAgICAgaSArKzsKKyAgICAgICAgfQorICAgICAgICBzaXplX3QgcG9zID0gWmVyb0xlYWRQb3NbbV9CdXN5TWFwW2ldXTsKKyAgICAgICAgbV9CdXN5TWFwW2ldIHw9IDEgPDwgKDcgLSBwb3MpOworICAgICAgICBtX25BdmFpbENvdW50IC0tOworICAgICAgICByZXR1cm4gKEZYX0xQQllURSkodGhpcyArIDEpICsgKGkgKiA4ICsgcG9zKSAqIGJsb2NrU2l6ZTsKKyAgICB9CisgICAgdm9pZAkJRnJlZShGWF9MUFZPSUQgcCkKKyAgICB7CisgICAgICAgIEZYU1lTX2Fzc2VydChwID4gKEZYX0xQVk9JRCl0aGlzICYmIHAgPCAoRlhfTFBWT0lEKSgoRlhfTFBCWVRFKXRoaXMgKyBGWF9GSVhFRE1FTV9QQUdFU0laRSkpOworICAgICAgICBzaXplX3QgcG9zID0gKChGWF9MUEJZVEUpcCAtIChGWF9MUEJZVEUpKHRoaXMgKyAxKSkgLyBibG9ja1NpemU7CisgICAgICAgIG1fQnVzeU1hcFtwb3MgLyA4XSAmPSB+KDEgPDwgKDcgLSAocG9zICUgOCkpKTsKKyAgICAgICAgbV9uQXZhaWxDb3VudCArKzsKKyAgICB9CisgICAgdm9sYXRpbGUgc2l6ZV90CW1fbkF2YWlsQ291bnQ7CisgICAgRlhfQllURQkJCW1fQnVzeU1hcFsoYmxvY2tOdW0gKyA3KSAvIDhdOworfTsKK3R5cGVkZWYgQ0ZYTUVNX0ZpeGVkUGFnZTxGSVhFRE1FTV84QllURVNfQkxPQ0tOVU0sIDg+CUNGWE1FTV84Qnl0ZXNQYWdlOwordHlwZWRlZiBDRlhNRU1fRml4ZWRQYWdlPEZJWEVETUVNXzE2QllURVNfQkxPQ0tOVU0sIDE2PglDRlhNRU1fMTZCeXRlc1BhZ2U7Cit0eXBlZGVmIENGWE1FTV9GaXhlZFBhZ2U8RklYRURNRU1fMzJCWVRFU19CTE9DS05VTSwgMzI+CUNGWE1FTV8zMkJ5dGVzUGFnZTsKK3RlbXBsYXRlIDxzaXplX3QgYmxvY2tOdW0sIHNpemVfdCBibG9ja1NpemU+CitjbGFzcyBDRlhNRU1fRml4ZWRQYWdlcworeworcHVibGljOgorICAgIHR5cGVkZWYgQ0ZYTUVNX0ZpeGVkUGFnZTxibG9ja051bSwgYmxvY2tTaXplPiBUOworICAgIEZYX0xQQllURQkJbV9wU3RhcnRQYWdlOworICAgIEZYX0xQQllURQkJbV9wTGltaXRQb3M7CisgICAgRlhfTFBCWVRFCQltX3BDdXJQYWdlOworICAgIHZvbGF0aWxlIHNpemVfdAltX25BdmFpbEJsb2NrczsKKyAgICB2b2lkCQlJbml0aWFsaXplKEZYX0xQQllURSBwU3RhcnQsIHNpemVfdCBwYWdlcykKKyAgICB7CisgICAgICAgIG1fcFN0YXJ0UGFnZSA9IG1fcEN1clBhZ2UgPSBwU3RhcnQ7CisgICAgICAgIG1fbkF2YWlsQmxvY2tzID0gcGFnZXMgKiBibG9ja051bTsKKyAgICAgICAgZm9yIChzaXplX3QgbiA9IDA7IG4gPCBwYWdlczsgbiArKykgeworICAgICAgICAgICAgKChUKilwU3RhcnQpLT5Jbml0aWFsaXplKCk7CisgICAgICAgICAgICBwU3RhcnQgKz0gRlhfRklYRURNRU1fUEFHRVNJWkU7CisgICAgICAgIH0KKyAgICAgICAgbV9wTGltaXRQb3MgPSBwU3RhcnQ7CisgICAgfQorICAgIEZYX0JPT0wJCUlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbkF2YWlsQmxvY2tzID09IChtX3BMaW1pdFBvcyAtIG1fcFN0YXJ0UGFnZSkgLyBGWF9GSVhFRE1FTV9QQUdFU0laRSAqIGJsb2NrTnVtOworICAgIH0KKyAgICBGWF9CT09MCQlIYXNGcmVlQmxvY2soKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChGWF9CT09MKW1fbkF2YWlsQmxvY2tzOworICAgIH0KKyAgICBGWF9MUFZPSUQJQWxsb2Moc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBGWFNZU19hc3NlcnQobV9uQXZhaWxCbG9ja3MpOworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAoKChUKiltX3BDdXJQYWdlKS0+SGFzRnJlZUJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICBtX25BdmFpbEJsb2NrcyAtLTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKChUKiltX3BDdXJQYWdlKS0+QWxsb2Moc2l6ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3BDdXJQYWdlICs9IEZYX0ZJWEVETUVNX1BBR0VTSVpFOworICAgICAgICAgICAgaWYgKG1fcEN1clBhZ2UgPT0gbV9wTGltaXRQb3MpIHsKKyAgICAgICAgICAgICAgICBtX3BDdXJQYWdlID0gbV9wU3RhcnRQYWdlOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChUUlVFKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHZvaWQJCUZyZWUoRlhfTFBWT0lEIHApCisgICAgeworICAgICAgICBGWFNZU19hc3NlcnQocCA+IChGWF9MUFZPSUQpbV9wU3RhcnRQYWdlICYmIHAgPCAoRlhfTFBWT0lEKW1fcExpbWl0UG9zKTsKKyAgICAgICAgKChUKikobV9wU3RhcnRQYWdlICsgKChGWF9MUEJZVEUpcCAtIG1fcFN0YXJ0UGFnZSkgLyBGWF9GSVhFRE1FTV9QQUdFU0laRSAqIEZYX0ZJWEVETUVNX1BBR0VTSVpFKSktPkZyZWUocCk7CisgICAgICAgIG1fbkF2YWlsQmxvY2tzICsrOworICAgIH0KK307Cit0eXBlZGVmIENGWE1FTV9GaXhlZFBhZ2VzPEZJWEVETUVNXzhCWVRFU19CTE9DS05VTSwgOD4JCUNGWE1FTV84Qnl0ZXNQYWdlczsKK3R5cGVkZWYgQ0ZYTUVNX0ZpeGVkUGFnZXM8RklYRURNRU1fMTZCWVRFU19CTE9DS05VTSwgMTY+CUNGWE1FTV8xNkJ5dGVzUGFnZXM7Cit0eXBlZGVmIENGWE1FTV9GaXhlZFBhZ2VzPEZJWEVETUVNXzMyQllURVNfQkxPQ0tOVU0sIDMyPglDRlhNRU1fMzJCeXRlc1BhZ2VzOworY2xhc3MgQ0ZYTUVNX0Jsb2NrCit7CitwdWJsaWM6CisgICAgc2l6ZV90CQkJbV9uQmxvY2tTaXplOworICAgIENGWE1FTV9CbG9jayoJbV9wTmV4dEJsb2NrOworfTsKK2NsYXNzIENGWE1FTV9QYWdlCit7CitwdWJsaWM6CisgICAgc2l6ZV90CQkJbV9uQXZhaWxTaXplOworICAgIENGWE1FTV9CbG9jayoJbV9wTGltaXRQb3M7CisgICAgQ0ZYTUVNX0Jsb2NrCW1fQXZhaWxIZWFkOworICAgIHZvaWQJCUluaXRpYWxpemUoc2l6ZV90IHNpemUpOworICAgIEZYX0JPT0wJCUlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fQXZhaWxIZWFkLm1fcE5leHRCbG9jayAmJiBtX0F2YWlsSGVhZC5tX25CbG9ja1NpemUgPT0gbV9BdmFpbEhlYWQubV9wTmV4dEJsb2NrLT5tX25CbG9ja1NpemU7CisgICAgfQorICAgIEZYX0xQVk9JRAlBbGxvYyhzaXplX3Qgc2l6ZSk7CisgICAgRlhfTFBWT0lECVJlYWxsb2MoRlhfTFBWT0lEIHAsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7CisgICAgdm9pZAkJRnJlZShGWF9MUFZPSUQgcCk7Citwcm90ZWN0ZWQ6CisgICAgRlhfTFBWT0lECUFsbG9jKENGWE1FTV9CbG9jayogcFByZXZCbG9jaywgQ0ZYTUVNX0Jsb2NrKiBwTmV4dEJsb2NrLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG9sZHNpemUpOworfTsKK2NsYXNzIENGWE1FTV9QYWdlcworeworcHVibGljOgorICAgIENGWE1FTV9QYWdlKgltX3BTdGFydFBhZ2U7CisgICAgQ0ZYTUVNX1BhZ2UqCW1fcExpbWl0UG9zOworICAgIENGWE1FTV9QYWdlKgltX3BDdXJQYWdlOworICAgIHNpemVfdAkJCW1fblBhZ2VTaXplOworICAgIHZvaWQJCUluaXRpYWxpemUoRlhfTFBCWVRFIHBTdGFydCwgc2l6ZV90IHBhZ2VTaXplLCBzaXplX3QgcGFnZXMpOworICAgIEZYX0JPT0wJCUlzRW1wdHkoKSBjb25zdDsKKyAgICBGWF9MUFZPSUQJQWxsb2Moc2l6ZV90IHNpemUpOworICAgIEZYX0xQVk9JRAlSZWFsbG9jKEZYX0xQVk9JRCBwLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUpOworICAgIHZvaWQJCUZyZWUoRlhfTFBWT0lEIHApOworfTsKK2NsYXNzIENGWE1FTV9Qb29sCit7CitwdWJsaWM6CisgICAgQ0ZYTUVNX1Bvb2wqCQkJbV9wUHJldlBvb2w7CisgICAgQ0ZYTUVNX1Bvb2wqCQkJbV9wTmV4dFBvb2w7CisgICAgQ0ZYTUVNXzhCeXRlc1BhZ2VzCQltXzhCeXRlc1BhZ2VzOworICAgIENGWE1FTV8xNkJ5dGVzUGFnZXMJCW1fMTZCeXRlc1BhZ2VzOworICAgIENGWE1FTV8zMkJ5dGVzUGFnZXMJCW1fMzJCeXRlc1BhZ2VzOworICAgIENGWE1FTV9QYWdlcwkJCW1fTWlkUGFnZXM7CisgICAgRlhfQk9PTAkJCQkJbV9iQWxvbmU7CisgICAgRlhfRFdPUkQJCQkJbV9kd1Jlc2VydmVkWzNdOworICAgIEZYX0xQVk9JRAkJCQltX3BMaW1pdFBvczsKKyAgICBDRlhNRU1fUGFnZSoJCQltX3BMYXJnZVBhZ2U7CisgICAgdm9pZAkJSW5pdGlhbGl6ZShjb25zdCBGWF9NRU1DT05GSUcqIHBNZW1Db25maWcsIHNpemVfdCBzaXplLCBzaXplX3QgcGFnZU51bThCeXRlcywgc2l6ZV90IHBhZ2VOdW0xNkJ5dGVzLCBzaXplX3QgcGFnZU51bTMyQnl0ZXMsIHNpemVfdCBwYWdlTnVtTWlkKTsKKyAgICBGWF9CT09MCQlJc0VtcHR5KCkgY29uc3Q7CisgICAgc2l6ZV90CQlHZXRTaXplKEZYX0xQVk9JRCBwKSBjb25zdDsKKyAgICBGWF9MUFZPSUQJUmVhbGxvYyhGWF9MUFZPSUQgcCwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKTsKKyAgICB2b2lkCQlGcmVlKEZYX0xQVk9JRCBwKTsKK307CitjbGFzcyBDRlhNRU1fRml4ZWRNZ3IKK3sKK3B1YmxpYzoKKyAgICB2b2lkCQkJSW5pdGlhbGl6ZShzaXplX3Qgc2l6ZSk7CisgICAgRlhfTFBWT0lECQlBbGxvYyhzaXplX3Qgc2l6ZSk7CisgICAgRlhfTFBWT0lECQlSZWFsbG9jKEZYX0xQVk9JRCBwLCBzaXplX3QgbmV3U2l6ZSk7CisgICAgdm9pZAkJCUZyZWUoRlhfTFBWT0lEIHApOworICAgIHZvaWQJCQlGcmVlQWxsKCk7CisgICAgdm9pZAkJCVB1cmdlKCk7CisgICAgQ0ZYTUVNX1Bvb2wqCUdldEZpcnN0UG9vbCgpCisgICAgeworICAgICAgICByZXR1cm4gJm1fRmlyc3RQb29sOworICAgIH0KKyAgICBzaXplX3QJCQlHZXRTaXplKEZYX0xQVk9JRCBwKSBjb25zdDsKKyAgICBGWE1FTV9TeXN0ZW1NZ3IJCW1fU3lzdGVtTWdyOworICAgIEZYTUVNX1N5c3RlbU1ncjIqCW1fcEV4dGVuZGVyOworICAgIEZYX0xQVk9JRAkJCW1fcFJlc2VydmVkOworICAgIEZYX01FTUNPTkZJRwkJbV9NZW1Db25maWc7Citwcm90ZWN0ZWQ6CisgICAgRlhfTFBWT0lECQlBbGxvYzE2KENGWE1FTV9Qb29sICoqcHAzMlBvb2wgPSBOVUxMLCBzaXplX3Qgc2l6ZSA9IDApOworICAgIEZYX0xQVk9JRAkJQWxsb2MzMihzaXplX3Qgc2l6ZSk7CisgICAgRlhfTFBWT0lECQlBbGxvY1NtYWxsKHNpemVfdCBzaXplKTsKKyAgICBGWF9MUFZPSUQJCUFsbG9jTWlkKHNpemVfdCBzaXplKTsKKyAgICBGWF9MUFZPSUQJCUFsbG9jTGFyZ2Uoc2l6ZV90IHNpemUpOworICAgIEZYX0xQVk9JRAkJUmVhbGxvY1NtYWxsKENGWE1FTV9Qb29sKiBwUG9vbCwgRlhfTFBWT0lEIHAsIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSk7CisgICAgdm9pZAkJCUZyZWVQb29sKENGWE1FTV9Qb29sKiBwUG9vbCk7CisgICAgQ0ZYTUVNX1Bvb2wJCW1fRmlyc3RQb29sOworfTsKKyNkZWZpbmUgRklYRURNRU1fUFJPWFlTSVpFXzAJKDEwMjQgKiAxMDI0ICogOCkKKyNkZWZpbmUgRklYRURNRU1fUFJPWFlTSVpFXzEJKDEwMjQgKiAxMDI0ICogMTYpCisjZGVmaW5lIEZJWEVETUVNX1BST1hZU0laRV8yCSgxMDI0ICogMTAyNCAqIDMyKQorI2RlZmluZSBGSVhFRE1FTV9QUk9YWVNJWkVfMwkoMTAyNCAqIDEwMjQgKiA2NCkKKyNkZWZpbmUgRklYRURNRU1fUFJPWFlTSVpFXzQJKDEwMjQgKiAxMDI0ICogMTI4KQorI2RlZmluZSBGSVhFRE1FTV9QUk9YWVNJWkVfNQkoMTAyNCAqIDEwMjQgKiAyNTYpCitjb25zdCBGWF9NRU1DT05GSUcqCUZpeGVkTWdyX0dldENvbmZpZyhzaXplX3QgblNpemUpOworY2xhc3MgQ0ZpeGVkTWdyX1Byb3h5Cit7CitwdWJsaWM6CisgICAgRlhNRU1fRm94aXRNZ3IqCUluaXRpYWxpemUoRlhfTFBWT0lEIHBCdWZmZXIsIHNpemVfdCBuU2l6ZSwgRlhfQk9PTCBiRXh0ZW5zaWJsZSk7CisgICAgc3RhdGljIEZYX0JPT0wJQ29tbW9uX01vcmUoRlhNRU1fU3lzdGVtTWdyMiogcE1nciwgc2l6ZV90IGFsbG9jX3NpemUsIHZvaWQqKiBuZXdfbWVtb3J5LCBzaXplX3QqIG5ld19zaXplKTsKKyAgICBzdGF0aWMgdm9pZAkJQ29tbW9uX0ZyZWUoRlhNRU1fU3lzdGVtTWdyMiogcE1nciwgdm9pZCogbWVtb3J5KTsKKyAgICBGWE1FTV9TeXN0ZW1NZ3IyCW1fU3lzdGVtTWdyOworICAgIENGWE1FTV9QYWdlKgkJbV9wRml4ZWRQYWdlOworICAgIEZYX0xQVk9JRAkJCW1fcEJ1ZmZlcjsKKyAgICBzaXplX3QJCQkJbV9uU2l6ZTsKKyAgICBGWF9CT09MCQkJCW1fYkV4dGVuc2libGU7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGNydC9wbGV4LmggYi9jb3JlL3NyYy9meGNydC9wbGV4LmgKaW5kZXggMzJhMjdjYi4uZTk4MmZkNiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhjcnQvcGxleC5oCisrKyBiL2NvcmUvc3JjL2Z4Y3J0L3BsZXguaApAQCAtMSwxNSArMSwxNSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotc3RydWN0IENGWF9QbGV4IHsNCi0gICAgQ0ZYX1BsZXgqIHBOZXh0Ow0KLSAgICB2b2lkKiBkYXRhKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIHRoaXMgKyAxOw0KLSAgICB9DQotICAgIHN0YXRpYyBDRlhfUGxleCogQ3JlYXRlKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IsIENGWF9QbGV4KiYgaGVhZCwgRlhfRFdPUkQgbk1heCwgRlhfRFdPUkQgY2JFbGVtZW50KTsNCi0gICAgdm9pZCBGcmVlRGF0YUNoYWluKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IpOw0KLX07DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworc3RydWN0IENGWF9QbGV4IHsKKyAgICBDRlhfUGxleCogcE5leHQ7CisgICAgdm9pZCogZGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcyArIDE7CisgICAgfQorICAgIHN0YXRpYyBDRlhfUGxleCogQ3JlYXRlKElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IsIENGWF9QbGV4KiYgaGVhZCwgRlhfRFdPUkQgbk1heCwgRlhfRFdPUkQgY2JFbGVtZW50KTsKKyAgICB2b2lkIEZyZWVEYXRhQ2hhaW4oSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvcik7Cit9OwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhjcnQveG1sX2ludC5oIGIvY29yZS9zcmMvZnhjcnQveG1sX2ludC5oCmluZGV4IDhhZDhlZjQuLjA5NzM3ODkgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Y3J0L3htbF9pbnQuaAorKysgYi9jb3JlL3NyYy9meGNydC94bWxfaW50LmgKQEAgLTEsMTc4ICsxLDE3OCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlhDUlRfWE1MX0lOVF8NCi0jZGVmaW5lIF9GWENSVF9YTUxfSU5UXw0KLWNsYXNzIENYTUxfRGF0YUJ1ZkFjYyA6IHB1YmxpYyBJRlhfQnVmZmVyUmVhZCwgcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDWE1MX0RhdGFCdWZBY2MoRlhfTFBDQllURSBwQnVmZmVyLCBzaXplX3Qgc2l6ZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpDQotICAgICAgICA6IG1fcEFsbG9jYXRvcihwQWxsb2NhdG9yKQ0KLSAgICAgICAgLCBtX3BCdWZmZXIocEJ1ZmZlcikNCi0gICAgICAgICwgbV9kd1NpemUoc2l6ZSkNCi0gICAgICAgICwgbV9kd0N1clBvcygwKQ0KLSAgICB7DQotICAgIH0NCi0gICAgdmlydHVhbCB+Q1hNTF9EYXRhQnVmQWNjKCkge30NCi0gICAgdmlydHVhbCB2b2lkCQkJUmVsZWFzZSgpDQotICAgIHsNCi0gICAgICAgIGlmIChtX3BBbGxvY2F0b3IpIHsNCi0gICAgICAgICAgICBGWF9EZWxldGVBdEFsbG9jYXRvcih0aGlzLCBtX3BBbGxvY2F0b3IsIENYTUxfRGF0YUJ1ZkFjYyk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCUlzRU9GKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fZHdDdXJQb3MgPj0gbV9kd1NpemU7DQotICAgIH0NCi0gICAgdmlydHVhbCBGWF9GSUxFU0laRQkJR2V0UG9zaXRpb24oKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gKEZYX0ZJTEVTSVpFKW1fZHdDdXJQb3M7DQotICAgIH0NCi0gICAgdmlydHVhbCBzaXplX3QJCQlSZWFkQmxvY2sodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJUmVhZE5leHRCbG9jayhGWF9CT09MIGJSZXN0YXJ0ID0gRkFMU0UpDQotICAgIHsNCi0gICAgICAgIGlmIChiUmVzdGFydCkgew0KLSAgICAgICAgICAgIG1fZHdDdXJQb3MgPSAwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fZHdDdXJQb3MgPCBtX2R3U2l6ZSkgew0KLSAgICAgICAgICAgIG1fZHdDdXJQb3MgPSBtX2R3U2l6ZTsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIEZYX0xQQ0JZVEUJCUdldEJsb2NrQnVmZmVyKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fcEJ1ZmZlcjsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIHNpemVfdAkJCUdldEJsb2NrU2l6ZSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX2R3U2l6ZTsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIEZYX0ZJTEVTSVpFCQlHZXRCbG9ja09mZnNldCgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotcHJvdGVjdGVkOg0KLSAgICBJRlhfQWxsb2NhdG9yKgltX3BBbGxvY2F0b3I7DQotICAgIEZYX0xQQ0JZVEUJCW1fcEJ1ZmZlcjsNCi0gICAgc2l6ZV90CQkJbV9kd1NpemU7DQotICAgIHNpemVfdAkJCW1fZHdDdXJQb3M7DQotfTsNCi0jZGVmaW5lIEZYX1hNTERBVEFTVFJFQU1fQnVmZmVyU2l6ZQkJKDMyICogMTAyNCkNCi1jbGFzcyBDWE1MX0RhdGFTdG1BY2MgOiBwdWJsaWMgSUZYX0J1ZmZlclJlYWQsIHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgQ1hNTF9EYXRhU3RtQWNjKElGWF9GaWxlUmVhZCAqcEZpbGVSZWFkLCBJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCkNCi0gICAgICAgIDogbV9wQWxsb2NhdG9yKHBBbGxvY2F0b3IpDQotICAgICAgICAsIG1fcEZpbGVSZWFkKHBGaWxlUmVhZCkNCi0gICAgICAgICwgbV9wQnVmZmVyKE5VTEwpDQotICAgICAgICAsIG1fblN0YXJ0KDApDQotICAgICAgICAsIG1fZHdTaXplKDApDQotICAgIHsNCi0gICAgICAgIEZYU1lTX2Fzc2VydChtX3BGaWxlUmVhZCAhPSBOVUxMKTsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIH5DWE1MX0RhdGFTdG1BY2MoKQ0KLSAgICB7DQotICAgICAgICBpZiAobV9wQnVmZmVyKSB7DQotICAgICAgICAgICAgRlhfQWxsb2NhdG9yX0ZyZWUobV9wQWxsb2NhdG9yLCBtX3BCdWZmZXIpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHZpcnR1YWwgdm9pZAkJCVJlbGVhc2UoKQ0KLSAgICB7DQotICAgICAgICBpZiAobV9wQWxsb2NhdG9yKSB7DQotICAgICAgICAgICAgRlhfRGVsZXRlQXRBbGxvY2F0b3IodGhpcywgbV9wQWxsb2NhdG9yLCBDWE1MX0RhdGFTdG1BY2MpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBkZWxldGUgdGhpczsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQlJc0VPRigpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX25TdGFydCArIChGWF9GSUxFU0laRSltX2R3U2l6ZSA+PSBtX3BGaWxlUmVhZC0+R2V0U2l6ZSgpOw0KLSAgICB9DQotICAgIHZpcnR1YWwgRlhfRklMRVNJWkUJCUdldFBvc2l0aW9uKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fblN0YXJ0ICsgKEZYX0ZJTEVTSVpFKW1fZHdTaXplOw0KLSAgICB9DQotICAgIHZpcnR1YWwgc2l6ZV90CQkJUmVhZEJsb2NrKHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCVJlYWROZXh0QmxvY2soRlhfQk9PTCBiUmVzdGFydCA9IEZBTFNFKQ0KLSAgICB7DQotICAgICAgICBpZiAoYlJlc3RhcnQpIHsNCi0gICAgICAgICAgICBtX25TdGFydCA9IDA7DQotICAgICAgICB9DQotICAgICAgICBGWF9GSUxFU0laRSBuTGVuZ3RoID0gbV9wRmlsZVJlYWQtPkdldFNpemUoKTsNCi0gICAgICAgIG1fblN0YXJ0ICs9IChGWF9GSUxFU0laRSltX2R3U2l6ZTsNCi0gICAgICAgIGlmIChtX25TdGFydCA+PSBuTGVuZ3RoKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9kd1NpemUgPSAoc2l6ZV90KUZYX01JTihGWF9YTUxEQVRBU1RSRUFNX0J1ZmZlclNpemUsIG5MZW5ndGggLSBtX25TdGFydCk7DQotICAgICAgICBpZiAoIW1fcEJ1ZmZlcikgew0KLSAgICAgICAgICAgIG1fcEJ1ZmZlciA9IEZYX0FsbG9jYXRvcl9BbGxvYyhtX3BBbGxvY2F0b3IsIEZYX0JZVEUsIG1fZHdTaXplKTsNCi0gICAgICAgICAgICBpZiAoIW1fcEJ1ZmZlcikgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIG1fcEZpbGVSZWFkLT5SZWFkQmxvY2sobV9wQnVmZmVyLCBtX25TdGFydCwgbV9kd1NpemUpOw0KLSAgICB9DQotICAgIHZpcnR1YWwgRlhfTFBDQllURQkJR2V0QmxvY2tCdWZmZXIoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gKEZYX0xQQ0JZVEUpbV9wQnVmZmVyOw0KLSAgICB9DQotICAgIHZpcnR1YWwgc2l6ZV90CQkJR2V0QmxvY2tTaXplKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fZHdTaXplOw0KLSAgICB9DQotICAgIHZpcnR1YWwgRlhfRklMRVNJWkUJCUdldEJsb2NrT2Zmc2V0KCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fblN0YXJ0Ow0KLSAgICB9DQotcHJvdGVjdGVkOg0KLSAgICBJRlhfQWxsb2NhdG9yKgltX3BBbGxvY2F0b3I7DQotICAgIElGWF9GaWxlUmVhZAkqbV9wRmlsZVJlYWQ7DQotICAgIEZYX0xQQllURQkJbV9wQnVmZmVyOw0KLSAgICBGWF9GSUxFU0laRQkJbV9uU3RhcnQ7DQotICAgIHNpemVfdAkJCW1fZHdTaXplOw0KLX07DQotY2xhc3MgQ1hNTF9QYXJzZXINCi17DQotcHVibGljOg0KLSAgICBDWE1MX1BhcnNlcihJRlhfQWxsb2NhdG9yKiBwQWxsb2NhdG9yID0gTlVMTCkgOiBtX3BBbGxvY2F0b3IocEFsbG9jYXRvcikge30NCi0gICAgfkNYTUxfUGFyc2VyKCk7DQotICAgIElGWF9BbGxvY2F0b3IqCW1fcEFsbG9jYXRvcjsNCi0gICAgSUZYX0J1ZmZlclJlYWQqCW1fcERhdGFBY2M7DQotICAgIEZYX0JPT0wJCQltX2JPd25lZFN0cmVhbTsNCi0gICAgRlhfRklMRVNJWkUJCW1fbk9mZnNldDsNCi0gICAgRlhfQk9PTAkJCW1fYlNhdmVTcGFjZUNoYXJzOw0KLSAgICBGWF9MUENCWVRFCQltX3BCdWZmZXI7DQotICAgIHNpemVfdAkJCW1fZHdCdWZmZXJTaXplOw0KLSAgICBGWF9GSUxFU0laRQkJbV9uQnVmZmVyT2Zmc2V0Ow0KLSAgICBzaXplX3QJCQltX2R3SW5kZXg7DQotICAgIEZYX0JPT0wJCQlJbml0KEZYX0xQQllURSBwQnVmZmVyLCBzaXplX3Qgc2l6ZSk7DQotICAgIEZYX0JPT0wJCQlJbml0KElGWF9GaWxlUmVhZCAqcEZpbGVSZWFkKTsNCi0gICAgRlhfQk9PTAkJCUluaXQoSUZYX0J1ZmZlclJlYWQgKnBCdWZmZXIpOw0KLSAgICBGWF9CT09MCQkJSW5pdChGWF9CT09MIGJPd25kZWRTdHJlYW0pOw0KLSAgICBGWF9CT09MCQkJUmVhZE5leHRCbG9jaygpOw0KLSAgICBGWF9CT09MCQkJSXNFT0YoKTsNCi0gICAgRlhfQk9PTAkJCUhhdmVBdmFpbERhdGEoKTsNCi0gICAgdm9pZAkJCVNraXBXaGl0ZVNwYWNlcygpOw0KLSAgICB2b2lkCQkJR2V0TmFtZShDRlhfQnl0ZVN0cmluZ0wgJnNwYWNlLCBDRlhfQnl0ZVN0cmluZ0wgJm5hbWUpOw0KLSAgICB2b2lkCQkJR2V0QXR0clZhbHVlKENGWF9XaWRlU3RyaW5nTCAmdmFsdWUpOw0KLSAgICBGWF9EV09SRAkJR2V0Q2hhclJlZigpOw0KLSAgICB2b2lkCQkJR2V0VGFnTmFtZShDRlhfQnl0ZVN0cmluZ0wgJnNwYWNlLCBDRlhfQnl0ZVN0cmluZ0wgJm5hbWUsIEZYX0JPT0wgJmJFbmRUYWcsIEZYX0JPT0wgYlN0YXJ0VGFnID0gRkFMU0UpOw0KLSAgICB2b2lkCQkJU2tpcExpdGVyYWxzKEZYX0JTVFIgc3RyKTsNCi0gICAgQ1hNTF9FbGVtZW50KglQYXJzZUVsZW1lbnQoQ1hNTF9FbGVtZW50KiBwUGFyZW50LCBGWF9CT09MIGJTdGFydFRhZyA9IEZBTFNFKTsNCi0gICAgdm9pZAkJCUluc2VydENvbnRlbnRTZWdtZW50KEZYX0JPT0wgYkNEQVRBLCBGWF9XU1RSIGNvbnRlbnQsIENYTUxfRWxlbWVudCogcEVsZW1lbnQpOw0KLSAgICB2b2lkCQkJSW5zZXJ0Q0RBVEFTZWdtZW50KENGWF9VVEY4RGVjb2RlciYgZGVjb2RlciwgQ1hNTF9FbGVtZW50KiBwRWxlbWVudCk7DQotfTsNCi12b2lkIEZYX1hNTF9TcGxpdFF1YWxpZmllZE5hbWUoRlhfQlNUUiBic0Z1bGxOYW1lLCBDRlhfQnl0ZVN0cmluZ0MgJmJzU3BhY2UsIENGWF9CeXRlU3RyaW5nQyAmYnNOYW1lKTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9GWENSVF9YTUxfSU5UXworI2RlZmluZSBfRlhDUlRfWE1MX0lOVF8KK2NsYXNzIENYTUxfRGF0YUJ1ZkFjYyA6IHB1YmxpYyBJRlhfQnVmZmVyUmVhZCwgcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBDWE1MX0RhdGFCdWZBY2MoRlhfTFBDQllURSBwQnVmZmVyLCBzaXplX3Qgc2l6ZSwgSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpCisgICAgICAgIDogbV9wQWxsb2NhdG9yKHBBbGxvY2F0b3IpCisgICAgICAgICwgbV9wQnVmZmVyKHBCdWZmZXIpCisgICAgICAgICwgbV9kd1NpemUoc2l6ZSkKKyAgICAgICAgLCBtX2R3Q3VyUG9zKDApCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5DWE1MX0RhdGFCdWZBY2MoKSB7fQorICAgIHZpcnR1YWwgdm9pZAkJCVJlbGVhc2UoKQorICAgIHsKKyAgICAgICAgaWYgKG1fcEFsbG9jYXRvcikgeworICAgICAgICAgICAgRlhfRGVsZXRlQXRBbGxvY2F0b3IodGhpcywgbV9wQWxsb2NhdG9yLCBDWE1MX0RhdGFCdWZBY2MpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAgIH0KKyAgICB9CisgICAgdmlydHVhbCBGWF9CT09MCQkJSXNFT0YoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZHdDdXJQb3MgPj0gbV9kd1NpemU7CisgICAgfQorICAgIHZpcnR1YWwgRlhfRklMRVNJWkUJCUdldFBvc2l0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiAoRlhfRklMRVNJWkUpbV9kd0N1clBvczsKKyAgICB9CisgICAgdmlydHVhbCBzaXplX3QJCQlSZWFkQmxvY2sodm9pZCogYnVmZmVyLCBzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQlSZWFkTmV4dEJsb2NrKEZYX0JPT0wgYlJlc3RhcnQgPSBGQUxTRSkKKyAgICB7CisgICAgICAgIGlmIChiUmVzdGFydCkgeworICAgICAgICAgICAgbV9kd0N1clBvcyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fZHdDdXJQb3MgPCBtX2R3U2l6ZSkgeworICAgICAgICAgICAgbV9kd0N1clBvcyA9IG1fZHdTaXplOworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICB2aXJ0dWFsIEZYX0xQQ0JZVEUJCUdldEJsb2NrQnVmZmVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BCdWZmZXI7CisgICAgfQorICAgIHZpcnR1YWwgc2l6ZV90CQkJR2V0QmxvY2tTaXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2R3U2l6ZTsKKyAgICB9CisgICAgdmlydHVhbCBGWF9GSUxFU0laRQkJR2V0QmxvY2tPZmZzZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorcHJvdGVjdGVkOgorICAgIElGWF9BbGxvY2F0b3IqCW1fcEFsbG9jYXRvcjsKKyAgICBGWF9MUENCWVRFCQltX3BCdWZmZXI7CisgICAgc2l6ZV90CQkJbV9kd1NpemU7CisgICAgc2l6ZV90CQkJbV9kd0N1clBvczsKK307CisjZGVmaW5lIEZYX1hNTERBVEFTVFJFQU1fQnVmZmVyU2l6ZQkJKDMyICogMTAyNCkKK2NsYXNzIENYTUxfRGF0YVN0bUFjYyA6IHB1YmxpYyBJRlhfQnVmZmVyUmVhZCwgcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBDWE1MX0RhdGFTdG1BY2MoSUZYX0ZpbGVSZWFkICpwRmlsZVJlYWQsIElGWF9BbGxvY2F0b3IqIHBBbGxvY2F0b3IgPSBOVUxMKQorICAgICAgICA6IG1fcEFsbG9jYXRvcihwQWxsb2NhdG9yKQorICAgICAgICAsIG1fcEZpbGVSZWFkKHBGaWxlUmVhZCkKKyAgICAgICAgLCBtX3BCdWZmZXIoTlVMTCkKKyAgICAgICAgLCBtX25TdGFydCgwKQorICAgICAgICAsIG1fZHdTaXplKDApCisgICAgeworICAgICAgICBGWFNZU19hc3NlcnQobV9wRmlsZVJlYWQgIT0gTlVMTCk7CisgICAgfQorICAgIHZpcnR1YWwgfkNYTUxfRGF0YVN0bUFjYygpCisgICAgeworICAgICAgICBpZiAobV9wQnVmZmVyKSB7CisgICAgICAgICAgICBGWF9BbGxvY2F0b3JfRnJlZShtX3BBbGxvY2F0b3IsIG1fcEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICB9CisgICAgdmlydHVhbCB2b2lkCQkJUmVsZWFzZSgpCisgICAgeworICAgICAgICBpZiAobV9wQWxsb2NhdG9yKSB7CisgICAgICAgICAgICBGWF9EZWxldGVBdEFsbG9jYXRvcih0aGlzLCBtX3BBbGxvY2F0b3IsIENYTUxfRGF0YVN0bUFjYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZWxldGUgdGhpczsKKyAgICAgICAgfQorICAgIH0KKyAgICB2aXJ0dWFsIEZYX0JPT0wJCQlJc0VPRigpCisgICAgeworICAgICAgICByZXR1cm4gbV9uU3RhcnQgKyAoRlhfRklMRVNJWkUpbV9kd1NpemUgPj0gbV9wRmlsZVJlYWQtPkdldFNpemUoKTsKKyAgICB9CisgICAgdmlydHVhbCBGWF9GSUxFU0laRQkJR2V0UG9zaXRpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fblN0YXJ0ICsgKEZYX0ZJTEVTSVpFKW1fZHdTaXplOworICAgIH0KKyAgICB2aXJ0dWFsIHNpemVfdAkJCVJlYWRCbG9jayh2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHZpcnR1YWwgRlhfQk9PTAkJCVJlYWROZXh0QmxvY2soRlhfQk9PTCBiUmVzdGFydCA9IEZBTFNFKQorICAgIHsKKyAgICAgICAgaWYgKGJSZXN0YXJ0KSB7CisgICAgICAgICAgICBtX25TdGFydCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgRlhfRklMRVNJWkUgbkxlbmd0aCA9IG1fcEZpbGVSZWFkLT5HZXRTaXplKCk7CisgICAgICAgIG1fblN0YXJ0ICs9IChGWF9GSUxFU0laRSltX2R3U2l6ZTsKKyAgICAgICAgaWYgKG1fblN0YXJ0ID49IG5MZW5ndGgpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBtX2R3U2l6ZSA9IChzaXplX3QpRlhfTUlOKEZYX1hNTERBVEFTVFJFQU1fQnVmZmVyU2l6ZSwgbkxlbmd0aCAtIG1fblN0YXJ0KTsKKyAgICAgICAgaWYgKCFtX3BCdWZmZXIpIHsKKyAgICAgICAgICAgIG1fcEJ1ZmZlciA9IEZYX0FsbG9jYXRvcl9BbGxvYyhtX3BBbGxvY2F0b3IsIEZYX0JZVEUsIG1fZHdTaXplKTsKKyAgICAgICAgICAgIGlmICghbV9wQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3BGaWxlUmVhZC0+UmVhZEJsb2NrKG1fcEJ1ZmZlciwgbV9uU3RhcnQsIG1fZHdTaXplKTsKKyAgICB9CisgICAgdmlydHVhbCBGWF9MUENCWVRFCQlHZXRCbG9ja0J1ZmZlcigpCisgICAgeworICAgICAgICByZXR1cm4gKEZYX0xQQ0JZVEUpbV9wQnVmZmVyOworICAgIH0KKyAgICB2aXJ0dWFsIHNpemVfdAkJCUdldEJsb2NrU2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9kd1NpemU7CisgICAgfQorICAgIHZpcnR1YWwgRlhfRklMRVNJWkUJCUdldEJsb2NrT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX25TdGFydDsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgSUZYX0FsbG9jYXRvcioJbV9wQWxsb2NhdG9yOworICAgIElGWF9GaWxlUmVhZAkqbV9wRmlsZVJlYWQ7CisgICAgRlhfTFBCWVRFCQltX3BCdWZmZXI7CisgICAgRlhfRklMRVNJWkUJCW1fblN0YXJ0OworICAgIHNpemVfdAkJCW1fZHdTaXplOworfTsKK2NsYXNzIENYTUxfUGFyc2VyCit7CitwdWJsaWM6CisgICAgQ1hNTF9QYXJzZXIoSUZYX0FsbG9jYXRvciogcEFsbG9jYXRvciA9IE5VTEwpIDogbV9wQWxsb2NhdG9yKHBBbGxvY2F0b3IpIHt9CisgICAgfkNYTUxfUGFyc2VyKCk7CisgICAgSUZYX0FsbG9jYXRvcioJbV9wQWxsb2NhdG9yOworICAgIElGWF9CdWZmZXJSZWFkKgltX3BEYXRhQWNjOworICAgIEZYX0JPT0wJCQltX2JPd25lZFN0cmVhbTsKKyAgICBGWF9GSUxFU0laRQkJbV9uT2Zmc2V0OworICAgIEZYX0JPT0wJCQltX2JTYXZlU3BhY2VDaGFyczsKKyAgICBGWF9MUENCWVRFCQltX3BCdWZmZXI7CisgICAgc2l6ZV90CQkJbV9kd0J1ZmZlclNpemU7CisgICAgRlhfRklMRVNJWkUJCW1fbkJ1ZmZlck9mZnNldDsKKyAgICBzaXplX3QJCQltX2R3SW5kZXg7CisgICAgRlhfQk9PTAkJCUluaXQoRlhfTFBCWVRFIHBCdWZmZXIsIHNpemVfdCBzaXplKTsKKyAgICBGWF9CT09MCQkJSW5pdChJRlhfRmlsZVJlYWQgKnBGaWxlUmVhZCk7CisgICAgRlhfQk9PTAkJCUluaXQoSUZYX0J1ZmZlclJlYWQgKnBCdWZmZXIpOworICAgIEZYX0JPT0wJCQlJbml0KEZYX0JPT0wgYk93bmRlZFN0cmVhbSk7CisgICAgRlhfQk9PTAkJCVJlYWROZXh0QmxvY2soKTsKKyAgICBGWF9CT09MCQkJSXNFT0YoKTsKKyAgICBGWF9CT09MCQkJSGF2ZUF2YWlsRGF0YSgpOworICAgIHZvaWQJCQlTa2lwV2hpdGVTcGFjZXMoKTsKKyAgICB2b2lkCQkJR2V0TmFtZShDRlhfQnl0ZVN0cmluZ0wgJnNwYWNlLCBDRlhfQnl0ZVN0cmluZ0wgJm5hbWUpOworICAgIHZvaWQJCQlHZXRBdHRyVmFsdWUoQ0ZYX1dpZGVTdHJpbmdMICZ2YWx1ZSk7CisgICAgRlhfRFdPUkQJCUdldENoYXJSZWYoKTsKKyAgICB2b2lkCQkJR2V0VGFnTmFtZShDRlhfQnl0ZVN0cmluZ0wgJnNwYWNlLCBDRlhfQnl0ZVN0cmluZ0wgJm5hbWUsIEZYX0JPT0wgJmJFbmRUYWcsIEZYX0JPT0wgYlN0YXJ0VGFnID0gRkFMU0UpOworICAgIHZvaWQJCQlTa2lwTGl0ZXJhbHMoRlhfQlNUUiBzdHIpOworICAgIENYTUxfRWxlbWVudCoJUGFyc2VFbGVtZW50KENYTUxfRWxlbWVudCogcFBhcmVudCwgRlhfQk9PTCBiU3RhcnRUYWcgPSBGQUxTRSk7CisgICAgdm9pZAkJCUluc2VydENvbnRlbnRTZWdtZW50KEZYX0JPT0wgYkNEQVRBLCBGWF9XU1RSIGNvbnRlbnQsIENYTUxfRWxlbWVudCogcEVsZW1lbnQpOworICAgIHZvaWQJCQlJbnNlcnRDREFUQVNlZ21lbnQoQ0ZYX1VURjhEZWNvZGVyJiBkZWNvZGVyLCBDWE1MX0VsZW1lbnQqIHBFbGVtZW50KTsKK307Cit2b2lkIEZYX1hNTF9TcGxpdFF1YWxpZmllZE5hbWUoRlhfQlNUUiBic0Z1bGxOYW1lLCBDRlhfQnl0ZVN0cmluZ0MgJmJzU3BhY2UsIENGWF9CeXRlU3RyaW5nQyAmYnNOYW1lKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvRFdyaXRlLmggYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9EV3JpdGUuaAppbmRleCA3MGY5OThhLi4wMzc0Njk0IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9EV3JpdGUuaAorKysgYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9EV3JpdGUuaApAQCAtMSw1MDA2ICsxLDUwMDYgQEAKLS8vKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8NCi0vLyAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vDQotLy8gIEFic3RyYWN0Og0KLS8vICAgICBEaXJlY3RYIFR5cG9ncmFwaHkgU2VydmljZXMgcHVibGljIEFQSSBkZWZpbml0aW9ucy4NCi0vLw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLSNpZm5kZWYgRFdSSVRFX0hfSU5DTFVERUQNCi0jZGVmaW5lIERXUklURV9IX0lOQ0xVREVEDQotDQotI2lmIF9NU0NfVkVSID4gMTAwMA0KLSNwcmFnbWEgb25jZQ0KLSNlbmRpZg0KLQ0KLSNpZm5kZWYgRFdSSVRFX05PX1dJTkRPV1NfSA0KLQ0KLSNpbmNsdWRlICJzcGVjc3RyaW5ncy5oIg0KLSNpbmNsdWRlICJ1bmtud24uaCINCi0NCi0jZW5kaWYgLy8gRFdSSVRFX05PX1dJTkRPV1NfSA0KLQ0KLSNpbmNsdWRlICJkY29tbW9uLmgiDQotDQotI2lmIF9GWF9DT01QSUxFUl8gPT0gX0ZYX1ZDNl8NCi10eXBlZGVmIHNpZ25lZCBjaGFyICAgICAgICAgSU5UOCwgKlBJTlQ4Ow0KLXR5cGVkZWYgc2lnbmVkIHNob3J0ICAgICAgICBJTlQxNiwgKlBJTlQxNjsNCi10eXBlZGVmIHNpZ25lZCBpbnQgICAgICAgICAgSU5UMzIsICpQSU5UMzI7DQotdHlwZWRlZiBzaWduZWQgX19pbnQ2NCAgICAgIElOVDY0LCAqUElOVDY0Ow0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgICAgICBVSU5UOCwgKlBVSU5UODsNCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgICAgVUlOVDE2LCAqUFVJTlQxNjsNCi10eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICAgVUlOVDMyLCAqUFVJTlQzMjsNCi10eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgICAgVUlOVDY0LCAqUFVJTlQ2NDsNCi0jZW5kaWYNCi0NCi0jaWZuZGVmIERXUklURV9ERUNMQVJFX0lOVEVSRkFDRQ0KLSNkZWZpbmUgRFdSSVRFX0RFQ0xBUkVfSU5URVJGQUNFKGlpZCkgREVDTFNQRUNfVVVJRChpaWQpIERFQ0xTUEVDX05PVlRBQkxFDQotI2VuZGlmDQotDQotI2lmbmRlZiBEV1JJVEVfRVhQT1JUDQotI2RlZmluZSBEV1JJVEVfRVhQT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBXSU5BUEkNCi0jZW5kaWYNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIFRoZSB0eXBlIG9mIGEgZm9udCByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBmb250IGZpbGUuDQotLy8vIEZvbnQgZm9ybWF0cyB0aGF0IGNvbnNpc3Qgb2YgbXVsdGlwbGUgZmlsZXMsIGUuZy4gVHlwZSAxIC5QRk0gYW5kIC5QRkIsIGhhdmUNCi0vLy8gc2VwYXJhdGUgZW51bSB2YWx1ZXMgZm9yIGVhY2ggb2YgdGhlIGZpbGUgdHlwZS4NCi0vLy8gPC9zdW1tYXJ5Pg0KLWVudW0gRFdSSVRFX0ZPTlRfRklMRV9UWVBFDQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBGb250IHR5cGUgaXMgbm90IHJlY29nbml6ZWQgYnkgdGhlIERpcmVjdFdyaXRlIGZvbnQgc3lzdGVtLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfRk9OVF9GSUxFX1RZUEVfVU5LTk9XTiwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gT3BlblR5cGUgZm9udCB3aXRoIENGRiBvdXRsaW5lcy4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0ZPTlRfRklMRV9UWVBFX0NGRiwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gT3BlblR5cGUgZm9udCB3aXRoIFRydWVUeXBlIG91dGxpbmVzLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfRk9OVF9GSUxFX1RZUEVfVFJVRVRZUEUsDQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIE9wZW5UeXBlIGZvbnQgdGhhdCBjb250YWlucyBhIFRydWVUeXBlIGNvbGxlY3Rpb24uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9GT05UX0ZJTEVfVFlQRV9UUlVFVFlQRV9DT0xMRUNUSU9OLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBUeXBlIDEgUEZNIGZvbnQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9GT05UX0ZJTEVfVFlQRV9UWVBFMV9QRk0sDQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFR5cGUgMSBQRkIgZm9udC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0ZPTlRfRklMRV9UWVBFX1RZUEUxX1BGQiwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVmVjdG9yIC5GT04gZm9udC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0ZPTlRfRklMRV9UWVBFX1ZFQ1RPUiwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gQml0bWFwIC5GT04gZm9udC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0ZPTlRfRklMRV9UWVBFX0JJVE1BUA0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgZmlsZSBmb3JtYXQgb2YgYSBjb21wbGV0ZSBmb250IGZhY2UuDQotLy8vIEZvbnQgZm9ybWF0cyB0aGF0IGNvbnNpc3Qgb2YgbXVsdGlwbGUgZmlsZXMsIGUuZy4gVHlwZSAxIC5QRk0gYW5kIC5QRkIsIGhhdmUNCi0vLy8gYSBzaW5nbGUgZW51bSBlbnRyeS4NCi0vLy8gPC9zdW1tYXJ5Pg0KLWVudW0gRFdSSVRFX0ZPTlRfRkFDRV9UWVBFDQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBPcGVuVHlwZSBmb250IGZhY2Ugd2l0aCBDRkYgb3V0bGluZXMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9GT05UX0ZBQ0VfVFlQRV9DRkYsDQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIE9wZW5UeXBlIGZvbnQgZmFjZSB3aXRoIFRydWVUeXBlIG91dGxpbmVzLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfRk9OVF9GQUNFX1RZUEVfVFJVRVRZUEUsDQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIE9wZW5UeXBlIGZvbnQgZmFjZSB0aGF0IGlzIGEgcGFydCBvZiBhIFRydWVUeXBlIGNvbGxlY3Rpb24uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9GT05UX0ZBQ0VfVFlQRV9UUlVFVFlQRV9DT0xMRUNUSU9OLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBBIFR5cGUgMSBmb250IGZhY2UuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9GT05UX0ZBQ0VfVFlQRV9UWVBFMSwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gQSB2ZWN0b3IgLkZPTiBmb3JtYXQgZm9udCBmYWNlLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfRk9OVF9GQUNFX1RZUEVfVkVDVE9SLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBBIGJpdG1hcCAuRk9OIGZvcm1hdCBmb250IGZhY2UuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9GT05UX0ZBQ0VfVFlQRV9CSVRNQVAsDQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEZvbnQgZmFjZSB0eXBlIGlzIG5vdCByZWNvZ25pemVkIGJ5IHRoZSBEaXJlY3RXcml0ZSBmb250IHN5c3RlbS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0ZPTlRfRkFDRV9UWVBFX1VOS05PV04NCi19Ow0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gU3BlY2lmaWVzIGFsZ29yaXRobWljIHN0eWxlIHNpbXVsYXRpb25zIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGZvbnQgZmFjZS4NCi0vLy8gQm9sZCBhbmQgb2JsaXF1ZSBzaW11bGF0aW9ucyBjYW4gYmUgY29tYmluZWQgdmlhIGJpdHdpc2UgT1Igb3BlcmF0aW9uLg0KLS8vLyA8L3N1bW1hcnk+DQotZW51bSBEV1JJVEVfRk9OVF9TSU1VTEFUSU9OUw0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gTm8gc2ltdWxhdGlvbnMgYXJlIHBlcmZvcm1lZC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0ZPTlRfU0lNVUxBVElPTlNfTk9ORSAgICA9IDB4MDAwMCwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gQWxnb3JpdGhtaWMgZW1ib2xkZW5pbmcgaXMgcGVyZm9ybWVkLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfRk9OVF9TSU1VTEFUSU9OU19CT0xEICAgID0gMHgwMDAxLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBBbGdvcml0aG1pYyBpdGFsaWNpemF0aW9uIGlzIHBlcmZvcm1lZC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0ZPTlRfU0lNVUxBVElPTlNfT0JMSVFVRSA9IDB4MDAwMg0KLX07DQotDQotI2lmZGVmIERFRklORV9FTlVNX0ZMQUdfT1BFUkFUT1JTDQotREVGSU5FX0VOVU1fRkxBR19PUEVSQVRPUlMoRFdSSVRFX0ZPTlRfU0lNVUxBVElPTlMpOw0KLSNlbmRpZg0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gVGhlIGZvbnQgd2VpZ2h0IGVudW1lcmF0aW9uIGRlc2NyaWJlcyBjb21tb24gdmFsdWVzIGZvciBkZWdyZWUgb2YgYmxhY2tuZXNzIG9yIHRoaWNrbmVzcyBvZiBzdHJva2VzIG9mIGNoYXJhY3RlcnMgaW4gYSBmb250Lg0KLS8vLyBGb250IHdlaWdodCB2YWx1ZXMgbGVzcyB0aGFuIDEgb3IgZ3JlYXRlciB0aGFuIDk5OSBhcmUgY29uc2lkZXJlZCB0byBiZSBpbnZhbGlkLCBhbmQgdGhleSBhcmUgcmVqZWN0ZWQgYnkgZm9udCBBUEkgZnVuY3Rpb25zLg0KLS8vLyA8L3N1bW1hcnk+DQotZW51bSBEV1JJVEVfRk9OVF9XRUlHSFQNCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFByZWRlZmluZWQgZm9udCB3ZWlnaHQgOiBUaGluICgxMDApLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfRk9OVF9XRUlHSFRfVEhJTiA9IDEwMCwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gUHJlZGVmaW5lZCBmb250IHdlaWdodCA6IEV4dHJhLWxpZ2h0ICgyMDApLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfRk9OVF9XRUlHSFRfRVhUUkFfTElHSFQgPSAyMDAsDQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFByZWRlZmluZWQgZm9udCB3ZWlnaHQgOiBVbHRyYS1saWdodCAoMjAwKS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0ZPTlRfV0VJR0hUX1VMVFJBX0xJR0hUID0gMjAwLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBQcmVkZWZpbmVkIGZvbnQgd2VpZ2h0IDogTGlnaHQgKDMwMCkuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9GT05UX1dFSUdIVF9MSUdIVCA9IDMwMCwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gUHJlZGVmaW5lZCBmb250IHdlaWdodCA6IE5vcm1hbCAoNDAwKS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0ZPTlRfV0VJR0hUX05PUk1BTCA9IDQwMCwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gUHJlZGVmaW5lZCBmb250IHdlaWdodCA6IFJlZ3VsYXIgKDQwMCkuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9GT05UX1dFSUdIVF9SRUdVTEFSID0gNDAwLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBQcmVkZWZpbmVkIGZvbnQgd2VpZ2h0IDogTWVkaXVtICg1MDApLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfRk9OVF9XRUlHSFRfTUVESVVNID0gNTAwLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBQcmVkZWZpbmVkIGZvbnQgd2VpZ2h0IDogRGVtaS1ib2xkICg2MDApLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfRk9OVF9XRUlHSFRfREVNSV9CT0xEID0gNjAwLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBQcmVkZWZpbmVkIGZvbnQgd2VpZ2h0IDogU2VtaS1ib2xkICg2MDApLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfRk9OVF9XRUlHSFRfU0VNSV9CT0xEID0gNjAwLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBQcmVkZWZpbmVkIGZvbnQgd2VpZ2h0IDogQm9sZCAoNzAwKS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0ZPTlRfV0VJR0hUX0JPTEQgPSA3MDAsDQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFByZWRlZmluZWQgZm9udCB3ZWlnaHQgOiBFeHRyYS1ib2xkICg4MDApLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfRk9OVF9XRUlHSFRfRVhUUkFfQk9MRCA9IDgwMCwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gUHJlZGVmaW5lZCBmb250IHdlaWdodCA6IFVsdHJhLWJvbGQgKDgwMCkuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9GT05UX1dFSUdIVF9VTFRSQV9CT0xEID0gODAwLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBQcmVkZWZpbmVkIGZvbnQgd2VpZ2h0IDogQmxhY2sgKDkwMCkuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9GT05UX1dFSUdIVF9CTEFDSyA9IDkwMCwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gUHJlZGVmaW5lZCBmb250IHdlaWdodCA6IEhlYXZ5ICg5MDApLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfRk9OVF9XRUlHSFRfSEVBVlkgPSA5MDAsDQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFByZWRlZmluZWQgZm9udCB3ZWlnaHQgOiBFeHRyYS1ibGFjayAoOTUwKS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0ZPTlRfV0VJR0hUX0VYVFJBX0JMQUNLID0gOTUwLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBQcmVkZWZpbmVkIGZvbnQgd2VpZ2h0IDogVWx0cmEtYmxhY2sgKDk1MCkuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9GT05UX1dFSUdIVF9VTFRSQV9CTEFDSyA9IDk1MA0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgZm9udCBzdHJldGNoIGVudW1lcmF0aW9uIGRlc2NyaWJlcyByZWxhdGl2ZSBjaGFuZ2UgZnJvbSB0aGUgbm9ybWFsIGFzcGVjdCByYXRpbw0KLS8vLyBhcyBzcGVjaWZpZWQgYnkgYSBmb250IGRlc2lnbmVyIGZvciB0aGUgZ2x5cGhzIGluIGEgZm9udC4NCi0vLy8gVmFsdWVzIGxlc3MgdGhhbiAxIG9yIGdyZWF0ZXIgdGhhbiA5IGFyZSBjb25zaWRlcmVkIHRvIGJlIGludmFsaWQsIGFuZCB0aGV5IGFyZSByZWplY3RlZCBieSBmb250IEFQSSBmdW5jdGlvbnMuDQotLy8vIDwvc3VtbWFyeT4NCi1lbnVtIERXUklURV9GT05UX1NUUkVUQ0gNCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFByZWRlZmluZWQgZm9udCBzdHJldGNoIDogTm90IGtub3duICgwKS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0ZPTlRfU1RSRVRDSF9VTkRFRklORUQgPSAwLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBQcmVkZWZpbmVkIGZvbnQgc3RyZXRjaCA6IFVsdHJhLWNvbmRlbnNlZCAoMSkuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9GT05UX1NUUkVUQ0hfVUxUUkFfQ09OREVOU0VEID0gMSwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gUHJlZGVmaW5lZCBmb250IHN0cmV0Y2ggOiBFeHRyYS1jb25kZW5zZWQgKDIpLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfRk9OVF9TVFJFVENIX0VYVFJBX0NPTkRFTlNFRCA9IDIsDQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFByZWRlZmluZWQgZm9udCBzdHJldGNoIDogQ29uZGVuc2VkICgzKS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0ZPTlRfU1RSRVRDSF9DT05ERU5TRUQgPSAzLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBQcmVkZWZpbmVkIGZvbnQgc3RyZXRjaCA6IFNlbWktY29uZGVuc2VkICg0KS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0ZPTlRfU1RSRVRDSF9TRU1JX0NPTkRFTlNFRCA9IDQsDQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFByZWRlZmluZWQgZm9udCBzdHJldGNoIDogTm9ybWFsICg1KS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0ZPTlRfU1RSRVRDSF9OT1JNQUwgPSA1LA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBQcmVkZWZpbmVkIGZvbnQgc3RyZXRjaCA6IE1lZGl1bSAoNSkuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9GT05UX1NUUkVUQ0hfTUVESVVNID0gNSwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gUHJlZGVmaW5lZCBmb250IHN0cmV0Y2ggOiBTZW1pLWV4cGFuZGVkICg2KS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0ZPTlRfU1RSRVRDSF9TRU1JX0VYUEFOREVEID0gNiwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gUHJlZGVmaW5lZCBmb250IHN0cmV0Y2ggOiBFeHBhbmRlZCAoNykuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9GT05UX1NUUkVUQ0hfRVhQQU5ERUQgPSA3LA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBQcmVkZWZpbmVkIGZvbnQgc3RyZXRjaCA6IEV4dHJhLWV4cGFuZGVkICg4KS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0ZPTlRfU1RSRVRDSF9FWFRSQV9FWFBBTkRFRCA9IDgsDQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFByZWRlZmluZWQgZm9udCBzdHJldGNoIDogVWx0cmEtZXhwYW5kZWQgKDkpLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfRk9OVF9TVFJFVENIX1VMVFJBX0VYUEFOREVEID0gOQ0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgZm9udCBzdHlsZSBlbnVtZXJhdGlvbiBkZXNjcmliZXMgdGhlIHNsb3BlIHN0eWxlIG9mIGEgZm9udCBmYWNlLCBzdWNoIGFzIE5vcm1hbCwgSXRhbGljIG9yIE9ibGlxdWUuDQotLy8vIFZhbHVlcyBvdGhlciB0aGFuIHRoZSBvbmVzIGRlZmluZWQgaW4gdGhlIGVudW1lcmF0aW9uIGFyZSBjb25zaWRlcmVkIHRvIGJlIGludmFsaWQsIGFuZCB0aGV5IGFyZSByZWplY3RlZCBieSBmb250IEFQSSBmdW5jdGlvbnMuDQotLy8vIDwvc3VtbWFyeT4NCi1lbnVtIERXUklURV9GT05UX1NUWUxFDQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBGb250IHNsb3BlIHN0eWxlIDogTm9ybWFsLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfRk9OVF9TVFlMRV9OT1JNQUwsDQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEZvbnQgc2xvcGUgc3R5bGUgOiBPYmxpcXVlLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfRk9OVF9TVFlMRV9PQkxJUVVFLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBGb250IHNsb3BlIHN0eWxlIDogSXRhbGljLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfRk9OVF9TVFlMRV9JVEFMSUMNCi0NCi19Ow0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gVGhlIGluZm9ybWF0aW9uYWwgc3RyaW5nIGVudW1lcmF0aW9uIGlkZW50aWZpZXMgYSBzdHJpbmcgaW4gYSBmb250Lg0KLS8vLyA8L3N1bW1hcnk+DQotZW51bSBEV1JJVEVfSU5GT1JNQVRJT05BTF9TVFJJTkdfSUQNCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFVuc3BlY2lmaWVkIG5hbWUgSUQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9JTkZPUk1BVElPTkFMX1NUUklOR19OT05FLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBDb3B5cmlnaHQgbm90aWNlIHByb3ZpZGVkIGJ5IHRoZSBmb250Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfSU5GT1JNQVRJT05BTF9TVFJJTkdfQ09QWVJJR0hUX05PVElDRSwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gU3RyaW5nIGNvbnRhaW5pbmcgYSB2ZXJzaW9uIG51bWJlci4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0lORk9STUFUSU9OQUxfU1RSSU5HX1ZFUlNJT05fU1RSSU5HUywNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVHJhZGVtYXJrIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBmb250Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfSU5GT1JNQVRJT05BTF9TVFJJTkdfVFJBREVNQVJLLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBOYW1lIG9mIHRoZSBmb250IG1hbnVmYWN0dXJlci4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0lORk9STUFUSU9OQUxfU1RSSU5HX01BTlVGQUNUVVJFUiwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gTmFtZSBvZiB0aGUgZm9udCBkZXNpZ25lci4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0lORk9STUFUSU9OQUxfU1RSSU5HX0RFU0lHTkVSLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBVUkwgb2YgZm9udCBkZXNpZ25lciAod2l0aCBwcm90b2NvbCwgZS5nLiwgaHR0cDovLywgZnRwOi8vKS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0lORk9STUFUSU9OQUxfU1RSSU5HX0RFU0lHTkVSX1VSTCwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gRGVzY3JpcHRpb24gb2YgdGhlIGZvbnQuIENhbiBjb250YWluIHJldmlzaW9uIGluZm9ybWF0aW9uLCB1c2FnZSByZWNvbW1lbmRhdGlvbnMsIGhpc3RvcnksIGZlYXR1cmVzLCBldGMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9JTkZPUk1BVElPTkFMX1NUUklOR19ERVNDUklQVElPTiwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVVJMIG9mIGZvbnQgdmVuZG9yICh3aXRoIHByb3RvY29sLCBlLmcuLCBodHRwOi8vLCBmdHA6Ly8pLiBJZiBhIHVuaXF1ZSBzZXJpYWwgbnVtYmVyIGlzIGVtYmVkZGVkIGluIHRoZSBVUkwsIGl0IGNhbiBiZSB1c2VkIHRvIHJlZ2lzdGVyIHRoZSBmb250Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfSU5GT1JNQVRJT05BTF9TVFJJTkdfRk9OVF9WRU5ET1JfVVJMLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBEZXNjcmlwdGlvbiBvZiBob3cgdGhlIGZvbnQgbWF5IGJlIGxlZ2FsbHkgdXNlZCwgb3IgZGlmZmVyZW50IGV4YW1wbGUgc2NlbmFyaW9zIGZvciBsaWNlbnNlZCB1c2UuIFRoaXMgZmllbGQgc2hvdWxkIGJlIHdyaXR0ZW4gaW4gcGxhaW4gbGFuZ3VhZ2UsIG5vdCBsZWdhbGVzZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0lORk9STUFUSU9OQUxfU1RSSU5HX0xJQ0VOU0VfREVTQ1JJUFRJT04sDQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFVSTCB3aGVyZSBhZGRpdGlvbmFsIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9JTkZPUk1BVElPTkFMX1NUUklOR19MSUNFTlNFX0lORk9fVVJMLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHREktY29tcGF0aWJsZSBmYW1pbHkgbmFtZS4gQmVjYXVzZSBHREkgYWxsb3dzIGEgbWF4aW11bSBvZiBmb3VyIGZvbnRzIHBlciBmYW1pbHksIGZvbnRzIGluIHRoZSBzYW1lIGZhbWlseSBtYXkgaGF2ZSBkaWZmZXJlbnQgR0RJLWNvbXBhdGlibGUgZmFtaWx5IG5hbWVzDQotICAgIC8vLyAoZS5nLiwgIkFyaWFsIiwgIkFyaWFsIE5hcnJvdyIsICJBcmlhbCBCbGFjayIpLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfSU5GT1JNQVRJT05BTF9TVFJJTkdfV0lOMzJfRkFNSUxZX05BTUVTLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHREktY29tcGF0aWJsZSBzdWJmYW1pbHkgbmFtZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0lORk9STUFUSU9OQUxfU1RSSU5HX1dJTjMyX1NVQkZBTUlMWV9OQU1FUywNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gRmFtaWx5IG5hbWUgcHJlZmVycmVkIGJ5IHRoZSBkZXNpZ25lci4gVGhpcyBlbmFibGVzIGZvbnQgZGVzaWduZXJzIHRvIGdyb3VwIG1vcmUgdGhhbiBmb3VyIGZvbnRzIGluIGEgc2luZ2xlIGZhbWlseSB3aXRob3V0IGxvc2luZyBjb21wYXRpYmlsaXR5IHdpdGgNCi0gICAgLy8vIEdESS4gVGhpcyBuYW1lIGlzIHR5cGljYWxseSBvbmx5IHByZXNlbnQgaWYgaXQgZGlmZmVycyBmcm9tIHRoZSBHREktY29tcGF0aWJsZSBmYW1pbHkgbmFtZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0lORk9STUFUSU9OQUxfU1RSSU5HX1BSRUZFUlJFRF9GQU1JTFlfTkFNRVMsDQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFN1YmZhbWlseSBuYW1lIHByZWZlcnJlZCBieSB0aGUgZGVzaWduZXIuIFRoaXMgbmFtZSBpcyB0eXBpY2FsbHkgb25seSBwcmVzZW50IGlmIGl0IGRpZmZlcnMgZnJvbSB0aGUgR0RJLWNvbXBhdGlibGUgc3ViZmFtaWx5IG5hbWUuIA0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfSU5GT1JNQVRJT05BTF9TVFJJTkdfUFJFRkVSUkVEX1NVQkZBTUlMWV9OQU1FUywNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gU2FtcGxlIHRleHQuIFRoaXMgY2FuIGJlIHRoZSBmb250IG5hbWUgb3IgYW55IG90aGVyIHRleHQgdGhhdCB0aGUgZGVzaWduZXIgdGhpbmtzIGlzIHRoZSBiZXN0IGV4YW1wbGUgdG8gZGlzcGxheSB0aGUgZm9udCBpbi4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0lORk9STUFUSU9OQUxfU1RSSU5HX1NBTVBMRV9URVhUDQotfTsNCi0NCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIFRoZSBEV1JJVEVfRk9OVF9NRVRSSUNTIHN0cnVjdHVyZSBzcGVjaWZpZXMgdGhlIG1ldHJpY3Mgb2YgYSBmb250IGZhY2UgdGhhdA0KLS8vLyBhcmUgYXBwbGljYWJsZSB0byBhbGwgZ2x5cGhzIHdpdGhpbiB0aGUgZm9udCBmYWNlLg0KLS8vLyA8L3N1bW1hcnk+DQotc3RydWN0IERXUklURV9GT05UX01FVFJJQ1MNCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRoZSBudW1iZXIgb2YgZm9udCBkZXNpZ24gdW5pdHMgcGVyIGVtIHVuaXQuDQotICAgIC8vLyBGb250IGZpbGVzIHVzZSB0aGVpciBvd24gY29vcmRpbmF0ZSBzeXN0ZW0gb2YgZm9udCBkZXNpZ24gdW5pdHMuDQotICAgIC8vLyBBIGZvbnQgZGVzaWduIHVuaXQgaXMgdGhlIHNtYWxsZXN0IG1lYXN1cmFibGUgdW5pdCBpbiB0aGUgZW0gc3F1YXJlLA0KLSAgICAvLy8gYW4gaW1hZ2luYXJ5IHNxdWFyZSB0aGF0IGlzIHVzZWQgdG8gc2l6ZSBhbmQgYWxpZ24gZ2x5cGhzLg0KLSAgICAvLy8gVGhlIGNvbmNlcHQgb2YgZW0gc3F1YXJlIGlzIHVzZWQgYXMgYSByZWZlcmVuY2Ugc2NhbGUgZmFjdG9yIHdoZW4gZGVmaW5pbmcgZm9udCBzaXplIGFuZCBkZXZpY2UgdHJhbnNmb3JtYXRpb24gc2VtYW50aWNzLg0KLSAgICAvLy8gVGhlIHNpemUgb2Ygb25lIGVtIHNxdWFyZSBpcyBhbHNvIGNvbW1vbmx5IHVzZWQgdG8gY29tcHV0ZSB0aGUgcGFyYWdyYXBoIGlkZW50YXRpb24gdmFsdWUuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFVJTlQxNiBkZXNpZ25Vbml0c1BlckVtOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBBc2NlbnQgdmFsdWUgb2YgdGhlIGZvbnQgZmFjZSBpbiBmb250IGRlc2lnbiB1bml0cy4NCi0gICAgLy8vIEFzY2VudCBpcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgdG9wIG9mIGZvbnQgY2hhcmFjdGVyIGFsaWdubWVudCBib3ggdG8gRW5nbGlzaCBiYXNlbGluZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgVUlOVDE2IGFzY2VudDsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gRGVzY2VudCB2YWx1ZSBvZiB0aGUgZm9udCBmYWNlIGluIGZvbnQgZGVzaWduIHVuaXRzLg0KLSAgICAvLy8gRGVzY2VudCBpcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgYm90dG9tIG9mIGZvbnQgY2hhcmFjdGVyIGFsaWdubWVudCBib3ggdG8gRW5nbGlzaCBiYXNlbGluZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgVUlOVDE2IGRlc2NlbnQ7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIExpbmUgZ2FwIGluIGZvbnQgZGVzaWduIHVuaXRzLg0KLSAgICAvLy8gUmVjb21tZW5kZWQgYWRkaXRpb25hbCB3aGl0ZSBzcGFjZSB0byBhZGQgYmV0d2VlbiBsaW5lcyB0byBpbXByb3ZlIGxlZ2liaWxpdHkuIFRoZSByZWNvbW1lbmRlZCBsaW5lIHNwYWNpbmcgDQotICAgIC8vLyAoYmFzZWxpbmUtdG8tYmFzZWxpbmUgZGlzdGFuY2UpIGlzIHRodXMgdGhlIHN1bSBvZiBhc2NlbnQsIGRlc2NlbnQsIGFuZCBsaW5lR2FwLiBUaGUgbGluZSBnYXAgaXMgdXN1YWxseSANCi0gICAgLy8vIHBvc2l0aXZlIG9yIHplcm8gYnV0IGNhbiBiZSBuZWdhdGl2ZSwgaW4gd2hpY2ggY2FzZSB0aGUgcmVjb21tZW5kZWQgbGluZSBzcGFjaW5nIGlzIGxlc3MgdGhhbiB0aGUgaGVpZ2h0DQotICAgIC8vLyBvZiB0aGUgY2hhcmFjdGVyIGFsaWdubWVudCBib3guDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIElOVDE2IGxpbmVHYXA7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIENhcCBoZWlnaHQgdmFsdWUgb2YgdGhlIGZvbnQgZmFjZSBpbiBmb250IGRlc2lnbiB1bml0cy4NCi0gICAgLy8vIENhcCBoZWlnaHQgaXMgdGhlIGRpc3RhbmNlIGZyb20gRW5nbGlzaCBiYXNlbGluZSB0byB0aGUgdG9wIG9mIGEgdHlwaWNhbCBFbmdsaXNoIGNhcGl0YWwuDQotICAgIC8vLyBDYXBpdGFsICJIIiBpcyBvZnRlbiB1c2VkIGFzIGEgcmVmZXJlbmNlIGNoYXJhY3RlciBmb3IgdGhlIHB1cnBvc2Ugb2YgY2FsY3VsYXRpbmcgdGhlIGNhcCBoZWlnaHQgdmFsdWUuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFVJTlQxNiBjYXBIZWlnaHQ7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIHgtaGVpZ2h0IHZhbHVlIG9mIHRoZSBmb250IGZhY2UgaW4gZm9udCBkZXNpZ24gdW5pdHMuDQotICAgIC8vLyB4LWhlaWdodCBpcyB0aGUgZGlzdGFuY2UgZnJvbSBFbmdsaXNoIGJhc2VsaW5lIHRvIHRoZSB0b3Agb2YgbG93ZXJjYXNlIGxldHRlciAieCIsIG9yIGEgc2ltaWxhciBsb3dlcmNhc2UgY2hhcmFjdGVyLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBVSU5UMTYgeEhlaWdodDsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVGhlIHVuZGVybGluZSBwb3NpdGlvbiB2YWx1ZSBvZiB0aGUgZm9udCBmYWNlIGluIGZvbnQgZGVzaWduIHVuaXRzLg0KLSAgICAvLy8gVW5kZXJsaW5lIHBvc2l0aW9uIGlzIHRoZSBwb3NpdGlvbiBvZiB1bmRlcmxpbmUgcmVsYXRpdmUgdG8gdGhlIEVuZ2xpc2ggYmFzZWxpbmUuDQotICAgIC8vLyBUaGUgdmFsdWUgaXMgdXN1YWxseSBtYWRlIG5lZ2F0aXZlIGluIG9yZGVyIHRvIHBsYWNlIHRoZSB1bmRlcmxpbmUgYmVsb3cgdGhlIGJhc2VsaW5lLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBJTlQxNiB1bmRlcmxpbmVQb3NpdGlvbjsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVGhlIHN1Z2dlc3RlZCB1bmRlcmxpbmUgdGhpY2tuZXNzIHZhbHVlIG9mIHRoZSBmb250IGZhY2UgaW4gZm9udCBkZXNpZ24gdW5pdHMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFVJTlQxNiB1bmRlcmxpbmVUaGlja25lc3M7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRoZSBzdHJpa2V0aHJvdWdoIHBvc2l0aW9uIHZhbHVlIG9mIHRoZSBmb250IGZhY2UgaW4gZm9udCBkZXNpZ24gdW5pdHMuDQotICAgIC8vLyBTdHJpa2V0aHJvdWdoIHBvc2l0aW9uIGlzIHRoZSBwb3NpdGlvbiBvZiBzdHJpa2V0aHJvdWdoIHJlbGF0aXZlIHRvIHRoZSBFbmdsaXNoIGJhc2VsaW5lLg0KLSAgICAvLy8gVGhlIHZhbHVlIGlzIHVzdWFsbHkgbWFkZSBwb3NpdGl2ZSBpbiBvcmRlciB0byBwbGFjZSB0aGUgc3RyaWtldGhyb3VnaCBhYm92ZSB0aGUgYmFzZWxpbmUuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIElOVDE2IHN0cmlrZXRocm91Z2hQb3NpdGlvbjsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVGhlIHN1Z2dlc3RlZCBzdHJpa2V0aHJvdWdoIHRoaWNrbmVzcyB2YWx1ZSBvZiB0aGUgZm9udCBmYWNlIGluIGZvbnQgZGVzaWduIHVuaXRzLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBVSU5UMTYgc3RyaWtldGhyb3VnaFRoaWNrbmVzczsNCi19Ow0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gVGhlIERXUklURV9HTFlQSF9NRVRSSUNTIHN0cnVjdHVyZSBzcGVjaWZpZXMgdGhlIG1ldHJpY3Mgb2YgYW4gaW5kaXZpZHVhbCBnbHlwaC4NCi0vLy8gVGhlIHVuaXRzIGRlcGVuZCBvbiBob3cgdGhlIG1ldHJpY3MgYXJlIG9idGFpbmVkLg0KLS8vLyA8L3N1bW1hcnk+DQotc3RydWN0IERXUklURV9HTFlQSF9NRVRSSUNTDQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBTcGVjaWZpZXMgdGhlIFggb2Zmc2V0IGZyb20gdGhlIGdseXBoIG9yaWdpbiB0byB0aGUgbGVmdCBlZGdlIG9mIHRoZSBibGFjayBib3guDQotICAgIC8vLyBUaGUgZ2x5cGggb3JpZ2luIGlzIHRoZSBjdXJyZW50IGhvcml6b250YWwgd3JpdGluZyBwb3NpdGlvbi4NCi0gICAgLy8vIEEgbmVnYXRpdmUgdmFsdWUgbWVhbnMgdGhlIGJsYWNrIGJveCBleHRlbmRzIHRvIHRoZSBsZWZ0IG9mIHRoZSBvcmlnaW4gKG9mdGVuIHRydWUgZm9yIGxvd2VyY2FzZSBpdGFsaWMgJ2YnKS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgSU5UMzIgbGVmdFNpZGVCZWFyaW5nOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBTcGVjaWZpZXMgdGhlIFggb2Zmc2V0IGZyb20gdGhlIG9yaWdpbiBvZiB0aGUgY3VycmVudCBnbHlwaCB0byB0aGUgb3JpZ2luIG9mIHRoZSBuZXh0IGdseXBoIHdoZW4gd3JpdGluZyBob3Jpem9udGFsbHkuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFVJTlQzMiBhZHZhbmNlV2lkdGg7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFNwZWNpZmllcyB0aGUgWCBvZmZzZXQgZnJvbSB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgYmxhY2sgYm94IHRvIHRoZSBvcmlnaW4gb2YgdGhlIG5leHQgZ2x5cGggd2hlbiB3cml0aW5nIGhvcml6b250YWxseS4NCi0gICAgLy8vIFRoZSB2YWx1ZSBpcyBuZWdhdGl2ZSB3aGVuIHRoZSByaWdodCBlZGdlIG9mIHRoZSBibGFjayBib3ggb3ZlcmhhbmdzIHRoZSBsYXlvdXQgYm94Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBJTlQzMiByaWdodFNpZGVCZWFyaW5nOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBTcGVjaWZpZXMgdGhlIHZlcnRpY2FsIG9mZnNldCBmcm9tIHRoZSB2ZXJ0aWNhbCBvcmlnaW4gdG8gdGhlIHRvcCBvZiB0aGUgYmxhY2sgYm94Lg0KLSAgICAvLy8gVGh1cywgYSBwb3NpdGl2ZSB2YWx1ZSBhZGRzIHdoaXRlc3BhY2Ugd2hlcmVhcyBhIG5lZ2F0aXZlIHZhbHVlIG1lYW5zIHRoZSBnbHlwaCBvdmVyaGFuZ3MgdGhlIHRvcCBvZiB0aGUgbGF5b3V0IGJveC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgSU5UMzIgdG9wU2lkZUJlYXJpbmc7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFNwZWNpZmllcyB0aGUgWSBvZmZzZXQgZnJvbSB0aGUgdmVydGljYWwgb3JpZ2luIG9mIHRoZSBjdXJyZW50IGdseXBoIHRvIHRoZSB2ZXJ0aWNhbCBvcmlnaW4gb2YgdGhlIG5leHQgZ2x5cGggd2hlbiB3cml0aW5nIHZlcnRpY2FsbHkuDQotICAgIC8vLyAoTm90ZSB0aGF0IHRoZSB0ZXJtICJvcmlnaW4iIGJ5IGl0c2VsZiBkZW5vdGVzIHRoZSBob3Jpem9udGFsIG9yaWdpbi4gVGhlIHZlcnRpY2FsIG9yaWdpbiBpcyBkaWZmZXJlbnQuDQotICAgIC8vLyBJdHMgWSBjb29yZGluYXRlIGlzIHNwZWNpZmllZCBieSB2ZXJ0aWNhbE9yaWdpblkgdmFsdWUsDQotICAgIC8vLyBhbmQgaXRzIFggY29vcmRpbmF0ZSBpcyBoYWxmIHRoZSBhZHZhbmNlV2lkdGggdG8gdGhlIHJpZ2h0IG9mIHRoZSBob3Jpem9udGFsIG9yaWdpbikuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFVJTlQzMiBhZHZhbmNlSGVpZ2h0Ow0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBTcGVjaWZpZXMgdGhlIHZlcnRpY2FsIGRpc3RhbmNlIGZyb20gdGhlIGJsYWNrIGJveCdzIGJvdHRvbSBlZGdlIHRvIHRoZSBhZHZhbmNlIGhlaWdodC4NCi0gICAgLy8vIFBvc2l0aXZlIHdoZW4gdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSBibGFjayBib3ggaXMgd2l0aGluIHRoZSBsYXlvdXQgYm94Lg0KLSAgICAvLy8gTmVnYXRpdmUgd2hlbiB0aGUgYm90dG9tIGVkZ2Ugb2YgYmxhY2sgYm94IG92ZXJoYW5ncyB0aGUgbGF5b3V0IGJveC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgSU5UMzIgYm90dG9tU2lkZUJlYXJpbmc7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFNwZWNpZmllcyB0aGUgWSBjb29yZGluYXRlIG9mIGEgZ2x5cGgncyB2ZXJ0aWNhbCBvcmlnaW4sIGluIHRoZSBmb250J3MgZGVzaWduIGNvb3JkaW5hdGUgc3lzdGVtLg0KLSAgICAvLy8gVGhlIHkgY29vcmRpbmF0ZSBvZiBhIGdseXBoJ3MgdmVydGljYWwgb3JpZ2luIGlzIHRoZSBzdW0gb2YgdGhlIGdseXBoJ3MgdG9wIHNpZGUgYmVhcmluZw0KLSAgICAvLy8gYW5kIHRoZSB0b3AgKGkuZS4geU1heCkgb2YgdGhlIGdseXBoJ3MgYm91bmRpbmcgYm94Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBJTlQzMiB2ZXJ0aWNhbE9yaWdpblk7DQotfTsNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIE9wdGlvbmFsIGFkanVzdG1lbnQgdG8gYSBnbHlwaCdzIHBvc2l0aW9uLiBBbiBnbHlwaCBvZmZzZXQgY2hhbmdlcyB0aGUgcG9zaXRpb24gb2YgYSBnbHlwaCB3aXRob3V0IGFmZmVjdGluZw0KLS8vLyB0aGUgcGVuIHBvc2l0aW9uLiBPZmZzZXRzIGFyZSBpbiBsb2dpY2FsLCBwcmUtdHJhbnNmb3JtIHVuaXRzLg0KLS8vLyA8L3N1bW1hcnk+DQotc3RydWN0IERXUklURV9HTFlQSF9PRkZTRVQNCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIE9mZnNldCBpbiB0aGUgYWR2YW5jZSBkaXJlY3Rpb24gb2YgdGhlIHJ1bi4gQSBwb3NpdGl2ZSBhZHZhbmNlIG9mZnNldCBtb3ZlcyB0aGUgZ2x5cGggdG8gdGhlIHJpZ2h0DQotICAgIC8vLyAoaW4gcHJlLXRyYW5zZm9ybSBjb29yZGluYXRlcykgaWYgdGhlIHJ1biBpcyBsZWZ0LXRvLXJpZ2h0IG9yIHRvIHRoZSBsZWZ0IGlmIHRoZSBydW4gaXMgcmlnaHQtdG8tbGVmdC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRkxPQVQgYWR2YW5jZU9mZnNldDsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gT2Zmc2V0IGluIHRoZSBhc2NlbnQgZGlyZWN0aW9uLCBpLmUuLCB0aGUgZGlyZWN0aW9uIGFzY2VuZGVycyBwb2ludC4gQSBwb3NpdGl2ZSBhc2NlbmRlciBvZmZzZXQgbW92ZXMNCi0gICAgLy8vIHRoZSBnbHlwaCB1cCAoaW4gcHJlLXRyYW5zZm9ybSBjb29yZGluYXRlcykuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIEZMT0FUIGFzY2VuZGVyT2Zmc2V0Ow0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgRGlyZWN0V3JpdGUgZmFjdG9yeSBvYmplY3QuDQotLy8vIERpcmVjdFdyaXRlIGZhY3RvcnkgY29udGFpbnMgaW50ZXJuYWwgc3RhdGUgc3VjaCBhcyBmb250IGxvYWRlciByZWdpc3RyYXRpb24gYW5kIGNhY2hlZCBmb250IGRhdGEuDQotLy8vIEluIG1vc3QgY2FzZXMgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBzaGFyZWQgZmFjdG9yeSBvYmplY3QsIGJlY2F1c2UgaXQgYWxsb3dzIG11bHRpcGxlIGNvbXBvbmVudHMNCi0vLy8gdGhhdCB1c2UgRGlyZWN0V3JpdGUgdG8gc2hhcmUgaW50ZXJuYWwgRGlyZWN0V3JpdGUgc3RhdGUgYW5kIHJlZHVjZSBtZW1vcnkgdXNhZ2UuDQotLy8vIEhvd2V2ZXIsIHRoZXJlIGFyZSBjYXNlcyB3aGVuIGl0IGlzIGRlc2lyYWJsZSB0byByZWR1Y2UgdGhlIGltcGFjdCBvZiBhIGNvbXBvbmVudCwNCi0vLy8gc3VjaCBhcyBhIHBsdWctaW4gZnJvbSBhbiB1bnRydXN0ZWQgc291cmNlLCBvbiB0aGUgcmVzdCBvZiB0aGUgcHJvY2VzcyBieSBzYW5kYm94aW5nIGFuZCBpc29sYXRpbmcgaXQNCi0vLy8gZnJvbSB0aGUgcmVzdCBvZiB0aGUgcHJvY2VzcyBjb21wb25lbnRzLiBJbiBzdWNoIGNhc2VzLCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgYW4gaXNvbGF0ZWQgZmFjdG9yeSBmb3IgdGhlIHNhbmRib3hlZA0KLS8vLyBjb21wb25lbnQuDQotLy8vIDwvc3VtbWFyeT4NCi1lbnVtIERXUklURV9GQUNUT1JZX1RZUEUNCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFNoYXJlZCBmYWN0b3J5IGFsbG93IGZvciByZS11c2Ugb2YgY2FjaGVkIGZvbnQgZGF0YSBhY3Jvc3MgbXVsdGlwbGUgaW4gcHJvY2VzcyBjb21wb25lbnRzLg0KLSAgICAvLy8gU3VjaCBmYWN0b3JpZXMgYWxzbyB0YWtlIGFkdmFudGFnZSBvZiBjcm9zcyBwcm9jZXNzIGZvbnQgY2FjaGluZyBjb21wb25lbnRzIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9GQUNUT1JZX1RZUEVfU0hBUkVELA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBPYmplY3RzIGNyZWF0ZWQgZnJvbSB0aGUgaXNvbGF0ZWQgZmFjdG9yeSBkbyBub3QgaW50ZXJhY3Qgd2l0aCBpbnRlcm5hbCBEaXJlY3RXcml0ZSBzdGF0ZSBmcm9tIG90aGVyIGNvbXBvbmVudHMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9GQUNUT1JZX1RZUEVfSVNPTEFURUQNCi19Ow0KLQ0KLS8vIENyZWF0ZXMgYW4gT3BlblR5cGUgdGFnIGFzIGEgMzJiaXQgaW50ZWdlciBzdWNoIHRoYXQNCi0vLyB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSB0YWcgaXMgdGhlIGxvd2VzdCBieXRlLA0KLS8vIChsZWFzdCBzaWduaWZpY2FudCBvbiBsaXR0bGUgZW5kaWFuIGFyY2hpdGVjdHVyZXMpDQotLy8gd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29tcGFyZSB3aXRoIHRhZ3MgaW4gdGhlIGZvbnQgZmlsZS4NCi0vLyBUaGlzIG1hY3JvIGlzIGNvbXBhdGlibGUgd2l0aCBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBRy4NCi0vLw0KLS8vIEV4YW1wbGU6IERXUklURV9NQUtFX09QRU5UWVBFX1RBRygnYycsJ2MnLCdtJywncCcpDQotLy8gRHdvcmQ6ICAgMHg3MDZENjM2Mw0KLS8vDQotI2RlZmluZSBEV1JJVEVfTUFLRV9PUEVOVFlQRV9UQUcoYSxiLGMsZCkgKCBcDQotICAgIChzdGF0aWNfY2FzdDxVSU5UMzI+KHN0YXRpY19jYXN0PFVJTlQ4PihkKSkgPDwgMjQpIHwgXA0KLSAgICAoc3RhdGljX2Nhc3Q8VUlOVDMyPihzdGF0aWNfY2FzdDxVSU5UOD4oYykpIDw8IDE2KSB8IFwNCi0gICAgKHN0YXRpY19jYXN0PFVJTlQzMj4oc3RhdGljX2Nhc3Q8VUlOVDg+KGIpKSA8PCA4KSAgfCBcDQotICAgICBzdGF0aWNfY2FzdDxVSU5UMzI+KHN0YXRpY19jYXN0PFVJTlQ4PihhKSkpDQotDQotaW50ZXJmYWNlIElEV3JpdGVGb250RmlsZVN0cmVhbTsNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIEZvbnQgZmlsZSBsb2FkZXIgaW50ZXJmYWNlIGhhbmRsZXMgbG9hZGluZyBmb250IGZpbGUgcmVzb3VyY2VzIG9mIGEgcGFydGljdWxhciB0eXBlIGZyb20gYSBrZXkuDQotLy8vIFRoZSBmb250IGZpbGUgbG9hZGVyIGludGVyZmFjZSBpcyByZWNvbW1lbmRlZCB0byBiZSBpbXBsZW1lbnRlZCBieSBhIHNpbmdsZXRvbiBvYmplY3QuDQotLy8vIElNUE9SVEFOVDogZm9udCBmaWxlIGxvYWRlciBpbXBsZW1lbnRhdGlvbnMgbXVzdCBub3QgcmVnaXN0ZXIgdGhlbXNlbHZlcyB3aXRoIERpcmVjdFdyaXRlIGZhY3RvcnkNCi0vLy8gaW5zaWRlIHRoZWlyIGNvbnN0cnVjdG9ycyBhbmQgbXVzdCBub3QgdW5yZWdpc3RlciB0aGVtc2VsdmVzIGluIHRoZWlyIGRlc3RydWN0b3JzLCBiZWNhdXNlDQotLy8vIHJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRvbiBvcGVyYXRpb25zIGluY3JlbWVudCBhbmQgZGVjcmVtZW50IHRoZSBvYmplY3QgcmVmZXJlbmNlIGNvdW50IHJlc3BlY3RpdmVseS4NCi0vLy8gSW5zdGVhZCwgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBvZiBmb250IGZpbGUgbG9hZGVycyB3aXRoIERpcmVjdFdyaXRlIGZhY3Rvcnkgc2hvdWxkIGJlIHBlcmZvcm1lZA0KLS8vLyBvdXRzaWRlIG9mIHRoZSBmb250IGZpbGUgbG9hZGVyIGltcGxlbWVudGF0aW9uIGFzIGEgc2VwYXJhdGUgc3RlcC4NCi0vLy8gPC9zdW1tYXJ5Pg0KLWludGVyZmFjZSBEV1JJVEVfREVDTEFSRV9JTlRFUkZBQ0UoIjcyN2NhZDRlLWQ2YWYtNGM5ZS04YTA4LWQ2OTViMTFjYWE0OSIpIElEV3JpdGVGb250RmlsZUxvYWRlciA6IHB1YmxpYyBJVW5rbm93bg0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gQ3JlYXRlcyBhIGZvbnQgZmlsZSBzdHJlYW0gb2JqZWN0IHRoYXQgZW5jYXBzdWxhdGVzIGFuIG9wZW4gZmlsZSByZXNvdXJjZS4NCi0gICAgLy8vIFRoZSByZXNvdXJjZSBpcyBjbG9zZWQgd2hlbiB0aGUgbGFzdCByZWZlcmVuY2UgdG8gZm9udEZpbGVTdHJlYW0gaXMgcmVsZWFzZWQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVSZWZlcmVuY2VLZXkiPkZvbnQgZmlsZSByZWZlcmVuY2Uga2V5IHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgZm9udCBmaWxlIHJlc291cmNlDQotICAgIC8vLyB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBmb250IGxvYWRlciBiZWluZyB1c2VkLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVSZWZlcmVuY2VLZXlTaXplIj5TaXplIG9mIGZvbnQgZmlsZSByZWZlcmVuY2Uga2V5IGluIGJ5dGVzLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVTdHJlYW0iPlBvaW50ZXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgZm9udCBmaWxlIHN0cmVhbS48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChDcmVhdGVTdHJlYW1Gcm9tS2V5KSgNCi0gICAgICAgIF9faW5fYmNvdW50KGZvbnRGaWxlUmVmZXJlbmNlS2V5U2l6ZSkgdm9pZCBjb25zdCogZm9udEZpbGVSZWZlcmVuY2VLZXksDQotICAgICAgICBVSU5UMzIgZm9udEZpbGVSZWZlcmVuY2VLZXlTaXplLA0KLSAgICAgICAgX19vdXQgSURXcml0ZUZvbnRGaWxlU3RyZWFtKiogZm9udEZpbGVTdHJlYW0NCi0gICAgICAgICkgUFVSRTsNCi19Ow0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gQSBidWlsdC1pbiBpbXBsZW1lbnRhdGlvbiBvZiBJRFdyaXRlRm9udEZpbGVMb2FkZXIgaW50ZXJmYWNlIHRoYXQgb3BlcmF0ZXMgb24gbG9jYWwgZm9udCBmaWxlcw0KLS8vLyBhbmQgZXhwb3NlcyBsb2NhbCBmb250IGZpbGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgZm9udCBmaWxlIHJlZmVyZW5jZSBrZXkuDQotLy8vIEZvbnQgZmlsZSByZWZlcmVuY2VzIGNyZWF0ZWQgdXNpbmcgQ3JlYXRlRm9udEZpbGVSZWZlcmVuY2UgdXNlIHRoaXMgZm9udCBmaWxlIGxvYWRlci4NCi0vLy8gPC9zdW1tYXJ5Pg0KLWludGVyZmFjZSBEV1JJVEVfREVDTEFSRV9JTlRFUkZBQ0UoImIyZDlmM2VjLWM5ZmUtNGExMS1hMmVjLWQ4NjIwOGY3YzBhMiIpIElEV3JpdGVMb2NhbEZvbnRGaWxlTG9hZGVyIDogcHVibGljIElEV3JpdGVGb250RmlsZUxvYWRlcg0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gT2J0YWlucyB0aGUgbGVuZ3RoIG9mIHRoZSBhYnNvbHV0ZSBmaWxlIHBhdGggZnJvbSB0aGUgZm9udCBmaWxlIHJlZmVyZW5jZSBrZXkuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVSZWZlcmVuY2VLZXkiPkZvbnQgZmlsZSByZWZlcmVuY2Uga2V5IHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgbG9jYWwgZm9udCBmaWxlDQotICAgIC8vLyB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBmb250IGxvYWRlciBiZWluZyB1c2VkLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVSZWZlcmVuY2VLZXlTaXplIj5TaXplIG9mIGZvbnQgZmlsZSByZWZlcmVuY2Uga2V5IGluIGJ5dGVzLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZmlsZVBhdGhMZW5ndGgiPkxlbmd0aCBvZiB0aGUgZmlsZSBwYXRoIHN0cmluZyBub3QgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGVkIE5VTEwgY2hhcmFjdGVyLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKEdldEZpbGVQYXRoTGVuZ3RoRnJvbUtleSkoDQotICAgICAgICBfX2luX2Jjb3VudChmb250RmlsZVJlZmVyZW5jZUtleVNpemUpIHZvaWQgY29uc3QqIGZvbnRGaWxlUmVmZXJlbmNlS2V5LA0KLSAgICAgICAgVUlOVDMyIGZvbnRGaWxlUmVmZXJlbmNlS2V5U2l6ZSwNCi0gICAgICAgIF9fb3V0IFVJTlQzMiogZmlsZVBhdGhMZW5ndGgNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gT2J0YWlucyB0aGUgYWJzb2x1dGUgZm9udCBmaWxlIHBhdGggZnJvbSB0aGUgZm9udCBmaWxlIHJlZmVyZW5jZSBrZXkuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVSZWZlcmVuY2VLZXkiPkZvbnQgZmlsZSByZWZlcmVuY2Uga2V5IHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgbG9jYWwgZm9udCBmaWxlDQotICAgIC8vLyB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBmb250IGxvYWRlciBiZWluZyB1c2VkLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVSZWZlcmVuY2VLZXlTaXplIj5TaXplIG9mIGZvbnQgZmlsZSByZWZlcmVuY2Uga2V5IGluIGJ5dGVzLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZmlsZVBhdGgiPkNoYXJhY3RlciBhcnJheSB0aGF0IHJlY2VpdmVzIHRoZSBsb2NhbCBmaWxlIHBhdGguPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmaWxlUGF0aFNpemUiPlNpemUgb2YgdGhlIGZpbGVQYXRoIGFycmF5IGluIGNoYXJhY3RlciBjb3VudCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0ZWQgTlVMTCBjaGFyYWN0ZXIuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoR2V0RmlsZVBhdGhGcm9tS2V5KSgNCi0gICAgICAgIF9faW5fYmNvdW50KGZvbnRGaWxlUmVmZXJlbmNlS2V5U2l6ZSkgdm9pZCBjb25zdCogZm9udEZpbGVSZWZlcmVuY2VLZXksDQotICAgICAgICBVSU5UMzIgZm9udEZpbGVSZWZlcmVuY2VLZXlTaXplLA0KLSAgICAgICAgX19vdXRfZWNvdW50X3ooZmlsZVBhdGhTaXplKSBXQ0hBUiogZmlsZVBhdGgsDQotICAgICAgICBVSU5UMzIgZmlsZVBhdGhTaXplDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIE9idGFpbnMgdGhlIGxhc3Qgd3JpdGUgdGltZSBvZiB0aGUgZmlsZSBmcm9tIHRoZSBmb250IGZpbGUgcmVmZXJlbmNlIGtleS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RmlsZVJlZmVyZW5jZUtleSI+Rm9udCBmaWxlIHJlZmVyZW5jZSBrZXkgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSBsb2NhbCBmb250IGZpbGUNCi0gICAgLy8vIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIGZvbnQgbG9hZGVyIGJlaW5nIHVzZWQuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RmlsZVJlZmVyZW5jZUtleVNpemUiPlNpemUgb2YgZm9udCBmaWxlIHJlZmVyZW5jZSBrZXkgaW4gYnl0ZXMuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJsYXN0V3JpdGVUaW1lIj5MYXN0IG1vZGlmaWVkIHRpbWUgb2YgdGhlIGZvbnQgZmlsZS48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRMYXN0V3JpdGVUaW1lRnJvbUtleSkoDQotICAgICAgICBfX2luX2Jjb3VudChmb250RmlsZVJlZmVyZW5jZUtleVNpemUpIHZvaWQgY29uc3QqIGZvbnRGaWxlUmVmZXJlbmNlS2V5LA0KLSAgICAgICAgVUlOVDMyIGZvbnRGaWxlUmVmZXJlbmNlS2V5U2l6ZSwNCi0gICAgICAgIF9fb3V0IEZJTEVUSU1FKiBsYXN0V3JpdGVUaW1lDQotICAgICAgICApIFBVUkU7DQotfTsNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIFRoZSBpbnRlcmZhY2UgZm9yIGxvYWRpbmcgZm9udCBmaWxlIGRhdGEuDQotLy8vIDwvc3VtbWFyeT4NCi1pbnRlcmZhY2UgRFdSSVRFX0RFQ0xBUkVfSU5URVJGQUNFKCI2ZDQ4NjVmZS0wYWI4LTRkOTEtOGY2Mi01ZGQ2YmUzNGEzZTAiKSBJRFdyaXRlRm9udEZpbGVTdHJlYW0gOiBwdWJsaWMgSVVua25vd24NCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFJlYWRzIGEgZnJhZ21lbnQgZnJvbSBhIGZpbGUuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZnJhZ21lbnRTdGFydCI+UmVjZWl2ZXMgdGhlIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmb250IGZpbGUgZnJhZ21lbnQuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmaWxlT2Zmc2V0Ij5PZmZzZXQgb2YgdGhlIGZyYWdtZW50IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZm9udCBmaWxlLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZnJhZ21lbnRTaXplIj5TaXplIG9mIHRoZSBmcmFnbWVudCBpbiBieXRlcy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZyYWdtZW50Q29udGV4dCI+VGhlIGNsaWVudCBkZWZpbmVkIGNvbnRleHQgdG8gYmUgcGFzc2VkIHRvIHRoZSBSZWxlYXNlRmlsZUZyYWdtZW50LjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgLy8vIDxyZW1hcmtzPg0KLSAgICAvLy8gSU1QT1JUQU5UOiBSZWFkRmlsZUZyYWdtZW50KCkgaW1wbGVtZW50YXRpb25zIG11c3QgY2hlY2sgd2hldGhlciB0aGUgcmVxdWVzdGVkIGZpbGUgZnJhZ21lbnQNCi0gICAgLy8vIGlzIHdpdGhpbiB0aGUgZmlsZSBib3VuZHMuIE90aGVyd2lzZSwgYW4gZXJyb3Igc2hvdWxkIGJlIHJldHVybmVkIGZyb20gUmVhZEZpbGVGcmFnbWVudC4NCi0gICAgLy8vIDwvcmVtYXJrcz4NCi0gICAgU1RETUVUSE9EKFJlYWRGaWxlRnJhZ21lbnQpKA0KLSAgICAgICAgX19kZXJlZl9vdXRfYmNvdW50KGZyYWdtZW50U2l6ZSkgdm9pZCBjb25zdCoqIGZyYWdtZW50U3RhcnQsDQotICAgICAgICBVSU5UNjQgZmlsZU9mZnNldCwNCi0gICAgICAgIFVJTlQ2NCBmcmFnbWVudFNpemUsDQotICAgICAgICBfX291dCB2b2lkKiogZnJhZ21lbnRDb250ZXh0DQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFJlbGVhc2VzIGEgZnJhZ21lbnQgZnJvbSBhIGZpbGUuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZnJhZ21lbnRDb250ZXh0Ij5UaGUgY2xpZW50IGRlZmluZWQgY29udGV4dCBvZiBhIGZvbnQgZnJhZ21lbnQgcmV0dXJuZWQgZnJvbSBSZWFkRmlsZUZyYWdtZW50LjwvcGFyYW0+DQotICAgIFNURE1FVEhPRF8odm9pZCwgUmVsZWFzZUZpbGVGcmFnbWVudCkoDQotICAgICAgICB2b2lkKiBmcmFnbWVudENvbnRleHQNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gT2J0YWlucyB0aGUgdG90YWwgc2l6ZSBvZiBhIGZpbGUuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZmlsZVNpemUiPlJlY2VpdmVzIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBmaWxlLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgLy8vIDxyZW1hcmtzPg0KLSAgICAvLy8gSW1wbGVtZW50aW5nIEdldEZpbGVTaXplKCkgZm9yIGFzeW5jaHJvbm91c2x5IGxvYWRlZCBmb250IGZpbGVzIG1heSByZXF1aXJlDQotICAgIC8vLyBkb3dubG9hZGluZyB0aGUgY29tcGxldGUgZmlsZSBjb250ZW50cywgdGhlcmVmb3JlIHRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIG9wZXJhdGlvbnMgdGhhdA0KLSAgICAvLy8gZWl0aGVyIHJlcXVpcmUgY29tcGxldGUgZm9udCBmaWxlIHRvIGJlIGxvYWRlZCAoZS5nLiwgY29weWluZyBhIGZvbnQgZmlsZSkgb3IgbmVlZCB0byBtYWtlDQotICAgIC8vLyBkZWNpc2lvbnMgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoZSBmaWxlIHNpemUgKGUuZy4sIHZhbGlkYXRpb24gYWdhaW5zdCBhIHBlcnNpc3RlZCBmaWxlIHNpemUpLg0KLSAgICAvLy8gPC9yZW1hcmtzPg0KLSAgICBTVERNRVRIT0QoR2V0RmlsZVNpemUpKA0KLSAgICAgICAgX19vdXQgVUlOVDY0KiBmaWxlU2l6ZQ0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBPYnRhaW5zIHRoZSBsYXN0IG1vZGlmaWVkIHRpbWUgb2YgdGhlIGZpbGUuIFRoZSBsYXN0IG1vZGlmaWVkIHRpbWUgaXMgdXNlZCBieSBEaXJlY3RXcml0ZSBmb250IHNlbGVjdGlvbiBhbGdvcml0aG1zDQotICAgIC8vLyB0byBkZXRlcm1pbmUgd2hldGhlciBvbmUgZm9udCByZXNvdXJjZSBpcyBtb3JlIHVwIHRvIGRhdGUgdGhhbiBhbm90aGVyIG9uZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJsYXN0V3JpdGVUaW1lIj5SZWNlaXZlcyB0aGUgbGFzdCBtb2RpZmVkIHRpbWUgb2YgdGhlIGZpbGUgaW4gdGhlIGZvcm1hdCB0aGF0IHJlcHJlc2VudHMNCi0gICAgLy8vIHRoZSBudW1iZXIgb2YgMTAwLW5hbm9zZWNvbmQgaW50ZXJ2YWxzIHNpbmNlIEphbnVhcnkgMSwgMTYwMSAoVVRDKS48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuIEZvciByZXNvdXJjZXMgdGhhdCBkb24ndCBoYXZlIGEgY29uY2VwdCBvZiB0aGUgbGFzdCBtb2RpZmllZCB0aW1lLCB0aGUgaW1wbGVtZW50YXRpb24gb2YNCi0gICAgLy8vIEdldExhc3RXcml0ZVRpbWUgc2hvdWxkIHJldHVybiBFX05PVElNUEwuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRMYXN0V3JpdGVUaW1lKSgNCi0gICAgICAgIF9fb3V0IFVJTlQ2NCogbGFzdFdyaXRlVGltZQ0KLSAgICAgICAgKSBQVVJFOw0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgaW50ZXJmYWNlIHRoYXQgcmVwcmVzZW50cyBhIHJlZmVyZW5jZSB0byBhIGZvbnQgZmlsZS4NCi0vLy8gPC9zdW1tYXJ5Pg0KLWludGVyZmFjZSBEV1JJVEVfREVDTEFSRV9JTlRFUkZBQ0UoIjczOWQ4ODZhLWNlZjUtNDdkYy04NzY5LTFhOGI0MWJlYmJiMCIpIElEV3JpdGVGb250RmlsZSA6IHB1YmxpYyBJVW5rbm93bg0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVGhpcyBtZXRob2Qgb2J0YWlucyB0aGUgcG9pbnRlciB0byB0aGUgcmVmZXJlbmNlIGtleSBvZiBhIGZvbnQgZmlsZS4gVGhlIHBvaW50ZXIgaXMgb25seSB2YWxpZCB1bnRpbCB0aGUgb2JqZWN0IHRoYXQgcmVmZXJzIHRvIGl0IGlzIHJlbGVhc2VkLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGaWxlUmVmZXJlbmNlS2V5Ij5Qb2ludGVyIHRvIHRoZSBmb250IGZpbGUgcmVmZXJlbmNlIGtleS4NCi0gICAgLy8vIElNUE9SVEFOVDogVGhlIHBvaW50ZXIgdmFsdWUgaXMgdmFsaWQgdW50aWwgdGhlIGZvbnQgZmlsZSByZWZlcmVuY2Ugb2JqZWN0IGl0IGlzIG9idGFpbmVkIGZyb20gaXMgcmVsZWFzZWQuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RmlsZVJlZmVyZW5jZUtleVNpemUiPlNpemUgb2YgZm9udCBmaWxlIHJlZmVyZW5jZSBrZXkgaW4gYnl0ZXMuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoR2V0UmVmZXJlbmNlS2V5KSgNCi0gICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudCgqZm9udEZpbGVSZWZlcmVuY2VLZXlTaXplKSB2b2lkIGNvbnN0KiogZm9udEZpbGVSZWZlcmVuY2VLZXksDQotICAgICAgICBfX291dCBVSU5UMzIqIGZvbnRGaWxlUmVmZXJlbmNlS2V5U2l6ZQ0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBPYnRhaW5zIHRoZSBmaWxlIGxvYWRlciBhc3NvY2lhdGVkIHdpdGggYSBmb250IGZpbGUgb2JqZWN0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGaWxlTG9hZGVyIj5UaGUgZm9udCBmaWxlIGxvYWRlciBhc3NvY2lhdGVkIHdpdGggdGhlIGZvbnQgZmlsZSBvYmplY3QuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoR2V0TG9hZGVyKSgNCi0gICAgICAgIF9fb3V0IElEV3JpdGVGb250RmlsZUxvYWRlcioqIGZvbnRGaWxlTG9hZGVyDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEFuYWx5emVzIGEgZmlsZSBhbmQgcmV0dXJucyB3aGV0aGVyIGl0IHJlcHJlc2VudHMgYSBmb250LCBhbmQgd2hldGhlciB0aGUgZm9udCB0eXBlIGlzIHN1cHBvcnRlZCBieSB0aGUgZm9udCBzeXN0ZW0uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iaXNTdXBwb3J0ZWRGb250VHlwZSI+VFJVRSBpZiB0aGUgZm9udCB0eXBlIGlzIHN1cHBvcnRlZCBieSB0aGUgZm9udCBzeXN0ZW0sIEZBTFNFIG90aGVyd2lzZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGaWxlVHlwZSI+VGhlIHR5cGUgb2YgdGhlIGZvbnQgZmlsZS4gTm90ZSB0aGF0IGV2ZW4gaWYgaXNTdXBwb3J0ZWRGb250VHlwZSBpcyBGQUxTRSwNCi0gICAgLy8vIHRoZSBmb250RmlsZVR5cGUgdmFsdWUgbWF5IGJlIGRpZmZlcmVudCBmcm9tIERXUklURV9GT05UX0ZJTEVfVFlQRV9VTktOT1dOLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZhY2VUeXBlIj5UaGUgdHlwZSBvZiB0aGUgZm9udCBmYWNlIHRoYXQgY2FuIGJlIGNvbnN0cnVjdGVkIGZyb20gdGhlIGZvbnQgZmlsZS4NCi0gICAgLy8vIE5vdGUgdGhhdCBldmVuIGlmIGlzU3VwcG9ydGVkRm9udFR5cGUgaXMgRkFMU0UsIHRoZSBmb250RmFjZVR5cGUgdmFsdWUgbWF5IGJlIGRpZmZlcmVudCBmcm9tDQotICAgIC8vLyBEV1JJVEVfRk9OVF9GQUNFX1RZUEVfVU5LTk9XTi48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Im51bWJlck9mRmFjZXMiPk51bWJlciBvZiBmb250IGZhY2VzIGNvbnRhaW5lZCBpbiB0aGUgZm9udCBmaWxlLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZSBpZiB0aGVyZSB3YXMgYSBwcm9jZXNzaW5nIGVycm9yIGR1cmluZyBhbmFseXNpcy4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgLy8vIDxyZW1hcmtzPg0KLSAgICAvLy8gSU1QT1JUQU5UOiBjZXJ0YWluIGZvbnQgZmlsZSB0eXBlcyBhcmUgcmVjb2duaXplZCwgYnV0IG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGZvbnQgc3lzdGVtLg0KLSAgICAvLy8gRm9yIGV4YW1wbGUsIHRoZSBmb250IHN5c3RlbSB3aWxsIHJlY29nbml6ZSBhIGZpbGUgYXMgYSBUeXBlIDEgZm9udCBmaWxlLA0KLSAgICAvLy8gYnV0IHdpbGwgbm90IGJlIGFibGUgdG8gY29uc3RydWN0IGEgZm9udCBmYWNlIG9iamVjdCBmcm9tIGl0LiBJbiBzdWNoIHNpdHVhdGlvbnMsIEFuYWx5emUgd2lsbCBzZXQNCi0gICAgLy8vIGlzU3VwcG9ydGVkRm9udFR5cGUgb3V0cHV0IHBhcmFtZXRlciB0byBGQUxTRS4NCi0gICAgLy8vIDwvcmVtYXJrcz4NCi0gICAgU1RETUVUSE9EKEFuYWx5emUpKA0KLSAgICAgICAgX19vdXQgQk9PTCogaXNTdXBwb3J0ZWRGb250VHlwZSwNCi0gICAgICAgIF9fb3V0IERXUklURV9GT05UX0ZJTEVfVFlQRSogZm9udEZpbGVUeXBlLA0KLSAgICAgICAgX19vdXRfb3B0IERXUklURV9GT05UX0ZBQ0VfVFlQRSogZm9udEZhY2VUeXBlLA0KLSAgICAgICAgX19vdXQgVUlOVDMyKiBudW1iZXJPZkZhY2VzDQotICAgICAgICApIFBVUkU7DQotfTsNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIFJlcHJlc2VudHMgdGhlIGludGVybmFsIHN0cnVjdHVyZSBvZiBhIGRldmljZSBwaXhlbCAoaS5lLiwgdGhlIHBoeXNpY2FsIGFycmFuZ2VtZW50IG9mIHJlZCwNCi0vLy8gZ3JlZW4sIGFuZCBibHVlIGNvbG9yIGNvbXBvbmVudHMpIHRoYXQgaXMgYXNzdW1lZCBmb3IgcHVycG9zZXMgb2YgcmVuZGVyaW5nIHRleHQuDQotLy8vIDwvc3VtbWFyeT4NCi0jaWZuZGVmIERXUklURV9QSVhFTF9HRU9NRVRSWV9ERUZJTkVEDQotZW51bSBEV1JJVEVfUElYRUxfR0VPTUVUUlkNCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRoZSByZWQsIGdyZWVuLCBhbmQgYmx1ZSBjb2xvciBjb21wb25lbnRzIG9mIGVhY2ggcGl4ZWwgYXJlIGFzc3VtZWQgdG8gb2NjdXB5IHRoZSBzYW1lIHBvaW50Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfUElYRUxfR0VPTUVUUllfRkxBVCwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gRWFjaCBwaXhlbCBjb21wcmlzZXMgdGhyZWUgdmVydGljYWwgc3RyaXBlcywgd2l0aCByZWQgb24gdGhlIGxlZnQsIGdyZWVuIGluIHRoZSBjZW50ZXIsIGFuZCANCi0gICAgLy8vIGJsdWUgb24gdGhlIHJpZ2h0LiBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBwaXhlbCBnZW9tZXRyeSBmb3IgTENEIG1vbml0b3JzLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfUElYRUxfR0VPTUVUUllfUkdCLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBFYWNoIHBpeGVsIGNvbXByaXNlcyB0aHJlZSB2ZXJ0aWNhbCBzdHJpcGVzLCB3aXRoIGJsdWUgb24gdGhlIGxlZnQsIGdyZWVuIGluIHRoZSBjZW50ZXIsIGFuZCANCi0gICAgLy8vIHJlZCBvbiB0aGUgcmlnaHQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9QSVhFTF9HRU9NRVRSWV9CR1INCi19Ow0KLSNkZWZpbmUgRFdSSVRFX1BJWEVMX0dFT01FVFJZX0RFRklORUQNCi0jZW5kaWYNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIFJlcHJlc2VudHMgYSBtZXRob2Qgb2YgcmVuZGVyaW5nIGdseXBocy4NCi0vLy8gPC9zdW1tYXJ5Pg0KLWVudW0gRFdSSVRFX1JFTkRFUklOR19NT0RFDQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBTcGVjaWZpZXMgdGhhdCB0aGUgcmVuZGVyaW5nIG1vZGUgaXMgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHRoZSBmb250IGFuZCBzaXplLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfUkVOREVSSU5HX01PREVfREVGQVVMVCwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gU3BlY2lmaWVzIHRoYXQgbm8gYW50aS1hbGlhc2luZyBpcyBwZXJmb3JtZWQuIEVhY2ggcGl4ZWwgaXMgZWl0aGVyIHNldCB0byB0aGUgZm9yZWdyb3VuZCANCi0gICAgLy8vIGNvbG9yIG9mIHRoZSB0ZXh0IG9yIHJldGFpbnMgdGhlIGNvbG9yIG9mIHRoZSBiYWNrZ3JvdW5kLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfUkVOREVSSU5HX01PREVfQUxJQVNFRCwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gU3BlY2lmaWVzIENsZWFyVHlwZSByZW5kZXJpbmcgd2l0aCB0aGUgc2FtZSBtZXRyaWNzIGFzIGFsaWFzZWQgdGV4dC4gR2x5cGhzIGNhbiBvbmx5DQotICAgIC8vLyBiZSBwb3NpdGlvbmVkIG9uIHdob2xlLXBpeGVsIGJvdW5kYXJpZXMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9SRU5ERVJJTkdfTU9ERV9DTEVBUlRZUEVfR0RJX0NMQVNTSUMsDQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFNwZWNpZmllcyBDbGVhclR5cGUgcmVuZGVyaW5nIHdpdGggdGhlIHNhbWUgbWV0cmljcyBhcyB0ZXh0IHJlbmRlcmluZyB1c2luZyBHREkgdXNpbmcgYSBmb250DQotICAgIC8vLyBjcmVhdGVkIHdpdGggQ0xFQVJUWVBFX05BVFVSQUxfUVVBTElUWS4gR2x5cGggbWV0cmljcyBhcmUgY2xvc2VyIHRvIHRoZWlyIGlkZWFsIHZhbHVlcyB0aGFuIA0KLSAgICAvLy8gd2l0aCBhbGlhc2VkIHRleHQsIGJ1dCBnbHlwaHMgYXJlIHN0aWxsIHBvc2l0aW9uZWQgb24gd2hvbGUtcGl4ZWwgYm91bmRhcmllcy4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX1JFTkRFUklOR19NT0RFX0NMRUFSVFlQRV9HRElfTkFUVVJBTCwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gU3BlY2lmaWVzIENsZWFyVHlwZSByZW5kZXJpbmcgd2l0aCBhbnRpLWFsaWFzaW5nIGluIHRoZSBob3Jpem9udGFsIGRpbWVuc2lvbiBvbmx5LiBUaGlzIGlzIA0KLSAgICAvLy8gdHlwaWNhbGx5IHVzZWQgd2l0aCBzbWFsbCB0byBtZWRpdW0gZm9udCBzaXplcyAodXAgdG8gMTYgcHBlbSkuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9SRU5ERVJJTkdfTU9ERV9DTEVBUlRZUEVfTkFUVVJBTCwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gU3BlY2lmaWVzIENsZWFyVHlwZSByZW5kZXJpbmcgd2l0aCBhbnRpLWFsaWFzaW5nIGluIGJvdGggaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgZGltZW5zaW9ucy4gDQotICAgIC8vLyBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGF0IGxhcmdlciBzaXplcyB0byBtYWtlcyBjdXJ2ZXMgYW5kIGRpYWdvbmFsIGxpbmVzIGxvb2sgc21vb3RoZXIsIGF0IA0KLSAgICAvLy8gdGhlIGV4cGVuc2Ugb2Ygc29tZSBzb2Z0bmVzcy4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX1JFTkRFUklOR19NT0RFX0NMRUFSVFlQRV9OQVRVUkFMX1NZTU1FVFJJQywNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gU3BlY2lmaWVzIHRoYXQgcmVuZGVyaW5nIHNob3VsZCBieXBhc3MgdGhlIHJhc3Rlcml6ZXIgYW5kIHVzZSB0aGUgb3V0bGluZXMgZGlyZWN0bHkuIFRoaXMgaXMgDQotICAgIC8vLyB0eXBpY2FsbHkgdXNlZCBhdCB2ZXJ5IGxhcmdlIHNpemVzLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfUkVOREVSSU5HX01PREVfT1VUTElORQ0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgRFdSSVRFX01BVFJJWCBzdHJ1Y3R1cmUgc3BlY2lmaWVzIHRoZSBncmFwaGljcyB0cmFuc2Zvcm0gdG8gYmUgYXBwbGllZA0KLS8vLyB0byByZW5kZXJlZCBnbHlwaHMuDQotLy8vIDwvc3VtbWFyeT4NCi1zdHJ1Y3QgRFdSSVRFX01BVFJJWA0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gSG9yaXpvbnRhbCBzY2FsaW5nIC8gY29zaW5lIG9mIHJvdGF0aW9uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIEZMT0FUIG0xMTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVmVydGljYWwgc2hlYXIgLyBzaW5lIG9mIHJvdGF0aW9uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIEZMT0FUIG0xMjsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gSG9yaXpvbnRhbCBzaGVhciAvIG5lZ2F0aXZlIHNpbmUgb2Ygcm90YXRpb24NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRkxPQVQgbTIxOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBWZXJ0aWNhbCBzY2FsaW5nIC8gY29zaW5lIG9mIHJvdGF0aW9uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIEZMT0FUIG0yMjsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gSG9yaXpvbnRhbCBzaGlmdCAoYWx3YXlzIG9ydGhvZ29uYWwgcmVnYXJkbGVzcyBvZiByb3RhdGlvbikNCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRkxPQVQgZHg7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFZlcnRpY2FsIHNoaWZ0IChhbHdheXMgb3J0aG9nb25hbCByZWdhcmRsZXNzIG9mIHJvdGF0aW9uKQ0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBGTE9BVCBkeTsNCi19Ow0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gVGhlIGludGVyZmFjZSB0aGF0IHJlcHJlc2VudHMgdGV4dCByZW5kZXJpbmcgc2V0dGluZ3MgZm9yIGdseXBoIHJhc3Rlcml6YXRpb24gYW5kIGZpbHRlcmluZy4NCi0vLy8gPC9zdW1tYXJ5Pg0KLWludGVyZmFjZSBEV1JJVEVfREVDTEFSRV9JTlRFUkZBQ0UoIjJmMGRhNTNhLTJhZGQtNDdjZC04MmVlLWQ5ZWMzNDY4OGU3NSIpIElEV3JpdGVSZW5kZXJpbmdQYXJhbXMgOiBwdWJsaWMgSVVua25vd24NCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldHMgdGhlIGdhbW1hIHZhbHVlIHVzZWQgZm9yIGdhbW1hIGNvcnJlY3Rpb24uIFZhbGlkIHZhbHVlcyBtdXN0IGJlDQotICAgIC8vLyBncmVhdGVyIHRoYW4gemVybyBhbmQgY2Fubm90IGV4Y2VlZCAyNTYuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFNURE1FVEhPRF8oRkxPQVQsIEdldEdhbW1hKSgpIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldHMgdGhlIGFtb3VudCBvZiBjb250cmFzdCBlbmhhbmNlbWVudC4gVmFsaWQgdmFsdWVzIGFyZSBncmVhdGVyIHRoYW4NCi0gICAgLy8vIG9yIGVxdWFsIHRvIHplcm8uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFNURE1FVEhPRF8oRkxPQVQsIEdldEVuaGFuY2VkQ29udHJhc3QpKCkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0cyB0aGUgQ2xlYXJUeXBlIGxldmVsLiBWYWxpZCB2YWx1ZXMgcmFuZ2UgZnJvbSAwLjBmIChubyBDbGVhclR5cGUpIA0KLSAgICAvLy8gdG8gMS4wZiAoZnVsbCBDbGVhclR5cGUpLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBTVERNRVRIT0RfKEZMT0FULCBHZXRDbGVhclR5cGVMZXZlbCkoKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXRzIHRoZSBwaXhlbCBnZW9tZXRyeS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgU1RETUVUSE9EXyhEV1JJVEVfUElYRUxfR0VPTUVUUlksIEdldFBpeGVsR2VvbWV0cnkpKCkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0cyB0aGUgcmVuZGVyaW5nIG1vZGUuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFNURE1FVEhPRF8oRFdSSVRFX1JFTkRFUklOR19NT0RFLCBHZXRSZW5kZXJpbmdNb2RlKSgpIFBVUkU7DQotfTsNCi0NCi0vLyBGb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiBEMkQgdHlwZXMNCi1pbnRlcmZhY2UgSUQyRDFTaW1wbGlmaWVkR2VvbWV0cnlTaW5rOw0KLQ0KLXR5cGVkZWYgSUQyRDFTaW1wbGlmaWVkR2VvbWV0cnlTaW5rIElEV3JpdGVHZW9tZXRyeVNpbms7DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgaW50ZXJmYWNlIHRoYXQgcmVwcmVzZW50cyBhbiBhYnNvbHV0ZSByZWZlcmVuY2UgdG8gYSBmb250IGZhY2UuDQotLy8vIEl0IGNvbnRhaW5zIGZvbnQgZmFjZSB0eXBlLCBhcHByb3ByaWF0ZSBmaWxlIHJlZmVyZW5jZXMgYW5kIGZhY2UgaWRlbnRpZmljYXRpb24gZGF0YS4NCi0vLy8gVmFyaW91cyBmb250IGRhdGEgc3VjaCBhcyBtZXRyaWNzLCBuYW1lcyBhbmQgZ2x5cGggb3V0bGluZXMgaXMgb2J0YWluZWQgZnJvbSBJRFdyaXRlRm9udEZhY2UuDQotLy8vIDwvc3VtbWFyeT4NCi1pbnRlcmZhY2UgRFdSSVRFX0RFQ0xBUkVfSU5URVJGQUNFKCI1ZjQ5ODA0ZC03MDI0LTRkNDMtYmZhOS1kMjU5ODRmNTM4NDkiKSBJRFdyaXRlRm9udEZhY2UgOiBwdWJsaWMgSVVua25vd24NCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIE9idGFpbnMgdGhlIGZpbGUgZm9ybWF0IHR5cGUgb2YgYSBmb250IGZhY2UuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFNURE1FVEhPRF8oRFdSSVRFX0ZPTlRfRkFDRV9UWVBFLCBHZXRUeXBlKSgpIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIE9idGFpbnMgdGhlIGZvbnQgZmlsZXMgcmVwcmVzZW50aW5nIGEgZm9udCBmYWNlLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Im51bWJlck9mRmlsZXMiPlRoZSBudW1iZXIgb2YgZmlsZXMgcmVwcmVzZW50aW5nIHRoZSBmb250IGZhY2UuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RmlsZXMiPlVzZXIgcHJvdmlkZWQgYXJyYXkgdGhhdCBzdG9yZXMgcG9pbnRlcnMgdG8gZm9udCBmaWxlcyByZXByZXNlbnRpbmcgdGhlIGZvbnQgZmFjZS4NCi0gICAgLy8vIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBOVUxMIGlmIHRoZSB1c2VyIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgbnVtYmVyIG9mIGZpbGVzIHJlcHJlc2VudGluZyB0aGUgZm9udCBmYWNlLg0KLSAgICAvLy8gVGhpcyBBUEkgaW5jcmVtZW50cyByZWZlcmVuY2UgY291bnQgb2YgdGhlIGZvbnQgZmlsZSBwb2ludGVycyByZXR1cm5lZCBhY2NvcmRpbmcgdG8gQ09NIGNvbnZlbnRpb25zLCBhbmQgdGhlIGNsaWVudA0KLSAgICAvLy8gc2hvdWxkIHJlbGVhc2UgdGhlbSB3aGVuIGZpbmlzaGVkLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKEdldEZpbGVzKSgNCi0gICAgICAgIF9faW5vdXQgVUlOVDMyKiBudW1iZXJPZkZpbGVzLA0KLSAgICAgICAgX19vdXRfZWNvdW50X29wdCgqbnVtYmVyT2ZGaWxlcykgSURXcml0ZUZvbnRGaWxlKiogZm9udEZpbGVzDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIE9idGFpbnMgdGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGZvbnQgZmFjZSBpbiBpdHMgZm9udCBmaWxlIG9yIGZpbGVzLiBJZiB0aGUgZm9udCBmaWxlcyBjb250YWluIGEgc2luZ2xlIGZhY2UsDQotICAgIC8vLyB0aGUgcmV0dXJuIHZhbHVlIGlzIHplcm8uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFNURE1FVEhPRF8oVUlOVDMyLCBHZXRJbmRleCkoKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBPYnRhaW5zIHRoZSBhbGdvcml0aG1pYyBzdHlsZSBzaW11bGF0aW9uIGZsYWdzIG9mIGEgZm9udCBmYWNlLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBTVERNRVRIT0RfKERXUklURV9GT05UX1NJTVVMQVRJT05TLCBHZXRTaW11bGF0aW9ucykoKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZvbnQgaXMgYSBzeW1ib2wgZm9udC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgU1RETUVUSE9EXyhCT09MLCBJc1N5bWJvbEZvbnQpKCkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gT2J0YWlucyBkZXNpZ24gdW5pdHMgYW5kIGNvbW1vbiBtZXRyaWNzIGZvciB0aGUgZm9udCBmYWNlLg0KLSAgICAvLy8gVGhlc2UgbWV0cmljcyBhcmUgYXBwbGljYWJsZSB0byBhbGwgdGhlIGdseXBocyB3aXRoaW4gYSBmb250ZmFjZSBhbmQgYXJlIHVzZWQgYnkgYXBwbGljYXRpb25zIGZvciBsYXlvdXQgY2FsY3VsYXRpb25zLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGYWNlTWV0cmljcyI+UG9pbnRzIHRvIGEgRFdSSVRFX0ZPTlRfTUVUUklDUyBzdHJ1Y3R1cmUgdG8gZmlsbCBpbi4NCi0gICAgLy8vIFRoZSBtZXRyaWNzIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gYXJlIGluIGZvbnQgZGVzaWduIHVuaXRzLjwvcGFyYW0+DQotICAgIFNURE1FVEhPRF8odm9pZCwgR2V0TWV0cmljcykoDQotICAgICAgICBfX291dCBEV1JJVEVfRk9OVF9NRVRSSUNTKiBmb250RmFjZU1ldHJpY3MNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gT2J0YWlucyB0aGUgbnVtYmVyIG9mIGdseXBocyBpbiB0aGUgZm9udCBmYWNlLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBTVERNRVRIT0RfKFVJTlQxNiwgR2V0R2x5cGhDb3VudCkoKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBPYnRhaW5zIGlkZWFsIGdseXBoIG1ldHJpY3MgaW4gZm9udCBkZXNpZ24gdW5pdHMuIERlc2lnbiBnbHlwaHMgbWV0cmljcyBhcmUgdXNlZCBmb3IgZ2x5cGggcG9zaXRpb25pbmcuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2x5cGhJbmRpY2VzIj5BbiBhcnJheSBvZiBnbHlwaCBpbmRpY2VzIHRvIGNvbXB1dGUgdGhlIG1ldHJpY3MgZm9yLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2x5cGhDb3VudCI+VGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZ2x5cGhJbmRpY2VzIGFycmF5LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2x5cGhNZXRyaWNzIj5BcnJheSBvZiBEV1JJVEVfR0xZUEhfTUVUUklDUyBzdHJ1Y3R1cmVzIGZpbGxlZCBieSB0aGlzIGZ1bmN0aW9uLg0KLSAgICAvLy8gVGhlIG1ldHJpY3MgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBhcmUgaW4gZm9udCBkZXNpZ24gdW5pdHMuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJpc1NpZGV3YXlzIj5JbmRpY2F0ZXMgd2hldGhlciB0aGUgZm9udCBpcyBiZWluZyB1c2VkIGluIGEgc2lkZXdheXMgcnVuLg0KLSAgICAvLy8gVGhpcyBjYW4gYWZmZWN0IHRoZSBnbHlwaCBtZXRyaWNzIGlmIHRoZSBmb250IGhhcyBvYmxpcXVlIHNpbXVsYXRpb24NCi0gICAgLy8vIGJlY2F1c2Ugc2lkZXdheXMgb2JsaXF1ZSBzaW11bGF0aW9uIGRpZmZlcnMgZnJvbSBub24tc2lkZXdheXMgb2JsaXF1ZSBzaW11bGF0aW9uLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4gSWYgYW55IG9mIHRoZSBpbnB1dCBnbHlwaCBpbmRpY2VzIGFyZSBvdXRzaWRlIG9mIHRoZSB2YWxpZCBnbHlwaCBpbmRleCByYW5nZQ0KLSAgICAvLy8gZm9yIHRoZSBjdXJyZW50IGZvbnQgZmFjZSwgRV9JTlZBTElEQVJHIHdpbGwgYmUgcmV0dXJuZWQuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXREZXNpZ25HbHlwaE1ldHJpY3MpKA0KLSAgICAgICAgX19pbl9lY291bnQoZ2x5cGhDb3VudCkgVUlOVDE2IGNvbnN0KiBnbHlwaEluZGljZXMsDQotICAgICAgICBVSU5UMzIgZ2x5cGhDb3VudCwNCi0gICAgICAgIF9fb3V0X2Vjb3VudChnbHlwaENvdW50KSBEV1JJVEVfR0xZUEhfTUVUUklDUyogZ2x5cGhNZXRyaWNzLA0KLSAgICAgICAgQk9PTCBpc1NpZGV3YXlzID0gRkFMU0UNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gUmV0dXJucyB0aGUgbm9taW5hbCBtYXBwaW5nIG9mIFVDUzQgVW5pY29kZSBjb2RlIHBvaW50cyB0byBnbHlwaCBpbmRpY2VzIGFzIGRlZmluZWQgYnkgdGhlIGZvbnQgJ0NNQVAnIHRhYmxlLg0KLSAgICAvLy8gTm90ZSB0aGF0IHRoaXMgbWFwcGluZyBpcyBwcmltYXJpbHkgcHJvdmlkZWQgZm9yIGxpbmUgbGF5b3V0IGVuZ2luZXMgYnVpbHQgb24gdG9wIG9mIHRoZSBwaHlzaWNhbCBmb250IEFQSS4NCi0gICAgLy8vIEJlY2F1c2Ugb2YgT3BlblR5cGUgZ2x5cGggc3Vic3RpdHV0aW9uIGFuZCBsaW5lIGxheW91dCBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9uLCB0aGUgbm9taW5hbCBjb252ZXJzaW9uIGRvZXMgbm90IGFsd2F5cyBjb3JyZXNwb25kDQotICAgIC8vLyB0byBob3cgYSBVbmljb2RlIHN0cmluZyB3aWxsIG1hcCB0byBnbHlwaCBpbmRpY2VzIHdoZW4gcmVuZGVyaW5nIHVzaW5nIGEgcGFydGljdWxhciBmb250IGZhY2UuDQotICAgIC8vLyBBbHNvLCBub3RlIHRoYXQgVW5pY29kZSBWYXJpYW50IFNlbGVjdG9ycyBwcm92aWRlIGZvciBhbHRlcm5hdGUgbWFwcGluZ3MgZm9yIGNoYXJhY3RlciB0byBnbHlwaC4NCi0gICAgLy8vIFRoaXMgY2FsbCB3aWxsIGFsd2F5cyByZXR1cm4gdGhlIGRlZmF1bHQgdmFyaWFudC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJjb2RlUG9pbnRzIj5BbiBhcnJheSBvZiBVU0M0IGNvZGUgcG9pbnRzIHRvIG9idGFpbiBub21pbmFsIGdseXBoIGluZGljZXMgZnJvbS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImNvZGVQb2ludENvdW50Ij5UaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBjb2RlUG9pbnRzIGFycmF5LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2x5cGhJbmRpY2VzIj5BcnJheSBvZiBub21pbmFsIGdseXBoIGluZGljZXMgZmlsbGVkIGJ5IHRoaXMgZnVuY3Rpb24uPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoR2V0R2x5cGhJbmRpY2VzKSgNCi0gICAgICAgIF9faW5fZWNvdW50KGNvZGVQb2ludENvdW50KSBVSU5UMzIgY29uc3QqIGNvZGVQb2ludHMsDQotICAgICAgICBVSU5UMzIgY29kZVBvaW50Q291bnQsDQotICAgICAgICBfX291dF9lY291bnQoY29kZVBvaW50Q291bnQpIFVJTlQxNiogZ2x5cGhJbmRpY2VzDQotICAgICAgICApIFBVUkU7DQotIA0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBGaW5kcyB0aGUgc3BlY2lmaWVkIE9wZW5UeXBlIGZvbnQgdGFibGUgaWYgaXQgZXhpc3RzIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBpdC4NCi0gICAgLy8vIFRoZSBmdW5jdGlvbiBhY2Nlc3NlcyB0aGUgdW5kZXJsaW5nIGZvbnQgZGF0YSB2aWEgdGhlIElEV3JpdGVGb250U3RyZWFtIGludGVyZmFjZQ0KLSAgICAvLy8gaW1wbGVtZW50ZWQgYnkgdGhlIGZvbnQgZmlsZSBsb2FkZXIuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ib3BlblR5cGVUYWJsZVRhZyI+Rm91ciBjaGFyYWN0ZXIgdGFnIG9mIHRhYmxlIHRvIGZpbmQuDQotICAgIC8vLyAgICAgVXNlIHRoZSBEV1JJVEVfTUFLRV9PUEVOVFlQRV9UQUcoKSBtYWNybyB0byBjcmVhdGUgaXQuDQotICAgIC8vLyAgICAgVW5saWtlIEdESSwgaXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgc3BlY2lhbCBUVENGIGFuZCBudWxsIHRhZ3MgdG8gYWNjZXNzIHRoZSB3aG9sZSBmb250LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGFibGVEYXRhIj4NCi0gICAgLy8vICAgICBQb2ludGVyIHRvIGJhc2Ugb2YgdGFibGUgaW4gbWVtb3J5Lg0KLSAgICAvLy8gICAgIFRoZSBwb2ludGVyIGlzIG9ubHkgdmFsaWQgc28gbG9uZyBhcyB0aGUgRm9udEZhY2UgdXNlZCB0byBnZXQgdGhlIGZvbnQgdGFibGUgc3RpbGwgZXhpc3RzDQotICAgIC8vLyAgICAgKG5vdCBhbnkgb3RoZXIgRm9udEZhY2UsIGV2ZW4gaWYgaXQgYWN0dWFsbHkgcmVmZXJzIHRvIHRoZSBzYW1lIHBoeXNpY2FsIGZvbnQpLg0KLSAgICAvLy8gPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0YWJsZVNpemUiPkJ5dGUgc2l6ZSBvZiB0YWJsZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRhYmxlQ29udGV4dCI+DQotICAgIC8vLyAgICAgT3BhcXVlIGNvbnRleHQgd2hpY2ggbXVzdCBiZSBmcmVlZCBieSBjYWxsaW5nIFJlbGVhc2VGb250VGFibGUuDQotICAgIC8vLyAgICAgVGhlIGNvbnRleHQgYWN0dWFsbHkgY29tZXMgZnJvbSB0aGUgbG93ZXIgbGV2ZWwgSURXcml0ZUZvbnRGaWxlU3RyZWFtLA0KLSAgICAvLy8gICAgIHdoaWNoIG1heSBiZSBpbXBsZW1lbnRlZCBieSB0aGUgYXBwbGljYXRpb24gb3IgRFdyaXRlIGl0c2VsZi4NCi0gICAgLy8vICAgICBJdCBpcyBwb3NzaWJsZSBmb3IgYSBOVUxMIHRhYmxlQ29udGV4dCB0byBiZSByZXR1cm5lZCwgZXNwZWNpYWxseSBpZg0KLSAgICAvLy8gICAgIHRoZSBpbXBsZW1lbnRhdGlvbiBkaXJlY3RseSBtZW1vcnkgbWFwcyB0aGUgd2hvbGUgZmlsZS4NCi0gICAgLy8vICAgICBOZXZlcnRoZWxlc3MsIGFsd2F5cyByZWxlYXNlIGl0IGxhdGVyLCBhbmQgZG8gbm90IHVzZSBpdCBhcyBhIHRlc3QgZm9yIGZ1bmN0aW9uIHN1Y2Nlc3MuDQotICAgIC8vLyAgICAgVGhlIHNhbWUgdGFibGUgY2FuIGJlIHF1ZXJpZWQgbXVsdGlwbGUgdGltZXMsDQotICAgIC8vLyAgICAgYnV0IGVhY2ggcmV0dXJuZWQgY29udGV4dCBjYW4gYmUgZGlmZmVyZW50LCBzbyByZWxlYXNlIGVhY2ggc2VwYXJhdGVseS4NCi0gICAgLy8vIDwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZXhpc3RzIj5UcnVlIGlmIHRhYmxlIGV4aXN0cy48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyBJZiBhIHRhYmxlIGNhbiBub3QgYmUgZm91bmQsIHRoZSBmdW5jdGlvbiB3aWxsIG5vdCByZXR1cm4gYW4gZXJyb3IsIGJ1dCB0aGUgc2l6ZSB3aWxsIGJlIDAsIHRhYmxlIE5VTEwsIGFuZCBleGlzdHMgPSBGQUxTRS4NCi0gICAgLy8vIFRoZSBjb250ZXh0IGRvZXMgbm90IG5lZWQgdG8gYmUgZnJlZWQgaWYgdGhlIHRhYmxlIHdhcyBub3QgZm91bmQuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIC8vLyA8cmVtYXJrcz4NCi0gICAgLy8vIFRoZSBjb250ZXh0IGZvciB0aGUgc2FtZSB0YWcgbWF5IGJlIGRpZmZlcmVudCBmb3IgZWFjaCBjYWxsLA0KLSAgICAvLy8gc28gZWFjaCBvbmUgbXVzdCBiZSBoZWxkIGFuZCByZWxlYXNlZCBzZXBhcmF0ZWx5Lg0KLSAgICAvLy8gPC9yZW1hcmtzPg0KLSAgICBTVERNRVRIT0QoVHJ5R2V0Rm9udFRhYmxlKSgNCi0gICAgICAgIF9faW4gVUlOVDMyIG9wZW5UeXBlVGFibGVUYWcsDQotICAgICAgICBfX2RlcmVmX291dF9iY291bnQoKnRhYmxlU2l6ZSkgY29uc3Qgdm9pZCoqIHRhYmxlRGF0YSwNCi0gICAgICAgIF9fb3V0IFVJTlQzMiogdGFibGVTaXplLA0KLSAgICAgICAgX19vdXQgdm9pZCoqIHRhYmxlQ29udGV4dCwNCi0gICAgICAgIF9fb3V0IEJPT0wqIGV4aXN0cw0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBSZWxlYXNlcyB0aGUgdGFibGUgb2J0YWluZWQgZWFybGllciBmcm9tIFRyeUdldEZvbnRUYWJsZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0YWJsZUNvbnRleHQiPk9wYXF1ZSBjb250ZXh0IGZyb20gVHJ5R2V0Rm9udFRhYmxlLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EXyh2b2lkLCBSZWxlYXNlRm9udFRhYmxlKSgNCi0gICAgICAgIF9faW4gdm9pZCogdGFibGVDb250ZXh0DQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIENvbXB1dGVzIHRoZSBvdXRsaW5lIG9mIGEgcnVuIG9mIGdseXBocyBieSBjYWxsaW5nIGJhY2sgdG8gdGhlIG91dGxpbmUgc2luayBpbnRlcmZhY2UuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZW1TaXplIj5Mb2dpY2FsIHNpemUgb2YgdGhlIGZvbnQgaW4gRElQIHVuaXRzLiBBIERJUCAoImRldmljZS1pbmRlcGVuZGVudCBwaXhlbCIpIGVxdWFscyAxLzk2IGluY2guPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaEluZGljZXMiPkFycmF5IG9mIGdseXBoIGluZGljZXMuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaEFkdmFuY2VzIj5PcHRpb25hbCBhcnJheSBvZiBnbHlwaCBhZHZhbmNlcyBpbiBESVBzLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2x5cGhPZmZzZXRzIj5PcHRpb25hbCBhcnJheSBvZiBnbHlwaCBvZmZzZXRzLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2x5cGhDb3VudCI+TnVtYmVyIG9mIGdseXBocy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImlzU2lkZXdheXMiPklmIHRydWUsIHNwZWNpZmllcyB0aGF0IGdseXBocyBhcmUgcm90YXRlZCA5MCBkZWdyZWVzIHRvIHRoZSBsZWZ0IGFuZCB2ZXJ0aWNhbCBtZXRyaWNzIGFyZSB1c2VkLg0KLSAgICAvLy8gQSBjbGllbnQgY2FuIHJlbmRlciBhIHZlcnRpY2FsIHJ1biBieSBzcGVjaWZ5aW5nIGlzU2lkZXdheXMgPSB0cnVlIGFuZCByb3RhdGluZyB0aGUgcmVzdWx0aW5nIGdlb21ldHJ5IDkwIGRlZ3JlZXMgdG8gdGhlDQotICAgIC8vLyByaWdodCB1c2luZyBhIHRyYW5zZm9ybS4gVGhlIGlzU2lkZXdheXMgYW5kIGlzUmlnaHRUb0xlZnQgcGFyYW1ldGVycyBjYW5ub3QgYm90aCBiZSB0cnVlLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iaXNSaWdodFRvTGVmdCI+SWYgdHJ1ZSwgc3BlY2lmaWVzIHRoYXQgdGhlIGFkdmFuY2UgZGlyZWN0aW9uIGlzIHJpZ2h0IHRvIGxlZnQuIEJ5IGRlZmF1bHQsIHRoZSBhZHZhbmNlIGRpcmVjdGlvbg0KLSAgICAvLy8gaXMgbGVmdCB0byByaWdodC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Imdlb21ldHJ5U2luayI+SW50ZXJmYWNlIHRoZSBmdW5jdGlvbiBjYWxscyBiYWNrIHRvIGRyYXcgZWFjaCBlbGVtZW50IG9mIHRoZSBnZW9tZXRyeS48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRHbHlwaFJ1bk91dGxpbmUpKA0KLSAgICAgICAgRkxPQVQgZW1TaXplLA0KLSAgICAgICAgX19pbl9lY291bnQoZ2x5cGhDb3VudCkgVUlOVDE2IGNvbnN0KiBnbHlwaEluZGljZXMsDQotICAgICAgICBfX2luX2Vjb3VudF9vcHQoZ2x5cGhDb3VudCkgRkxPQVQgY29uc3QqIGdseXBoQWR2YW5jZXMsDQotICAgICAgICBfX2luX2Vjb3VudF9vcHQoZ2x5cGhDb3VudCkgRFdSSVRFX0dMWVBIX09GRlNFVCBjb25zdCogZ2x5cGhPZmZzZXRzLA0KLSAgICAgICAgVUlOVDMyIGdseXBoQ291bnQsDQotICAgICAgICBCT09MIGlzU2lkZXdheXMsDQotICAgICAgICBCT09MIGlzUmlnaHRUb0xlZnQsDQotICAgICAgICBJRFdyaXRlR2VvbWV0cnlTaW5rKiBnZW9tZXRyeVNpbmsNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gRGV0ZXJtaW5lcyB0aGUgcmVjb21tZW5kZWQgcmVuZGVyaW5nIG1vZGUgZm9yIHRoZSBmb250IGdpdmVuIHRoZSBzcGVjaWZpZWQgc2l6ZSBhbmQgcmVuZGVyaW5nIHBhcmFtZXRlcnMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZW1TaXplIj5Mb2dpY2FsIHNpemUgb2YgdGhlIGZvbnQgaW4gRElQIHVuaXRzLiBBIERJUCAoImRldmljZS1pbmRlcGVuZGVudCBwaXhlbCIpIGVxdWFscyAxLzk2IGluY2guPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJwaXhlbHNQZXJEaXAiPk51bWJlciBvZiBwaHlzaWNhbCBwaXhlbHMgcGVyIERJUC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBEUEkgb2YgdGhlIHJlbmRlcmluZyBzdXJmYWNlIGlzIDk2IHRoaXMgDQotICAgIC8vLyB2YWx1ZSBpcyAxLjBmLiBJZiB0aGUgRFBJIGlzIDEyMCwgdGhpcyB2YWx1ZSBpcyAxMjAuMGYvOTYuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJtZWFzdXJpbmdNb2RlIj5TcGVjaWZpZXMgbWVhc3VyaW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgZ2x5cGhzIGluIHRoZSBmb250Lg0KLSAgICAvLy8gUmVuZGVyZXIgaW1wbGVtZW50YXRpb25zIG1heSBjaG9vc2UgZGlmZmVyZW50IHJlbmRlcmluZyBtb2RlcyBmb3IgZ2l2ZW4gbWVhc3VyaW5nIG1ldGhvZHMsIGJ1dA0KLSAgICAvLy8gYmVzdCByZXN1bHRzIGFyZSBzZWVuIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgbW9kZXMgbWF0Y2g6DQotICAgIC8vLyBEV1JJVEVfUkVOREVSSU5HX01PREVfQ0xFQVJUWVBFX05BVFVSQUwgZm9yIERXUklURV9NRUFTVVJJTkdfTU9ERV9OQVRVUkFMDQotICAgIC8vLyBEV1JJVEVfUkVOREVSSU5HX01PREVfQ0xFQVJUWVBFX0dESV9DTEFTU0lDIGZvciBEV1JJVEVfTUVBU1VSSU5HX01PREVfR0RJX0NMQVNTSUMNCi0gICAgLy8vIERXUklURV9SRU5ERVJJTkdfTU9ERV9DTEVBUlRZUEVfR0RJX05BVFVSQUwgZm9yIERXUklURV9NRUFTVVJJTkdfTU9ERV9HRElfTkFUVVJBTA0KLSAgICAvLy8gPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJyZW5kZXJpbmdQYXJhbXMiPlJlbmRlcmluZyBwYXJhbWV0ZXJzIG9iamVjdC4gVGhpcyBwYXJhbWV0ZXIgaXMgbmVjZXNzYXJ5IGluIGNhc2UgdGhlIHJlbmRlcmluZyBwYXJhbWV0ZXJzIA0KLSAgICAvLy8gb2JqZWN0IG92ZXJyaWRlcyB0aGUgcmVuZGVyaW5nIG1vZGUuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJyZW5kZXJpbmdNb2RlIj5SZWNlaXZlcyB0aGUgcmVjb21tZW5kZWQgcmVuZGVyaW5nIG1vZGUgdG8gdXNlLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKEdldFJlY29tbWVuZGVkUmVuZGVyaW5nTW9kZSkoDQotICAgICAgICBGTE9BVCBlbVNpemUsDQotICAgICAgICBGTE9BVCBwaXhlbHNQZXJEaXAsDQotICAgICAgICBEV1JJVEVfTUVBU1VSSU5HX01PREUgbWVhc3VyaW5nTW9kZSwNCi0gICAgICAgIElEV3JpdGVSZW5kZXJpbmdQYXJhbXMqIHJlbmRlcmluZ1BhcmFtcywNCi0gICAgICAgIF9fb3V0IERXUklURV9SRU5ERVJJTkdfTU9ERSogcmVuZGVyaW5nTW9kZQ0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBPYnRhaW5zIGRlc2lnbiB1bml0cyBhbmQgY29tbW9uIG1ldHJpY3MgZm9yIHRoZSBmb250IGZhY2UuDQotICAgIC8vLyBUaGVzZSBtZXRyaWNzIGFyZSBhcHBsaWNhYmxlIHRvIGFsbCB0aGUgZ2x5cGhzIHdpdGhpbiBhIGZvbnRmYWNlIGFuZCBhcmUgdXNlZCBieSBhcHBsaWNhdGlvbnMgZm9yIGxheW91dCBjYWxjdWxhdGlvbnMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZW1TaXplIj5Mb2dpY2FsIHNpemUgb2YgdGhlIGZvbnQgaW4gRElQIHVuaXRzLiBBIERJUCAoImRldmljZS1pbmRlcGVuZGVudCBwaXhlbCIpIGVxdWFscyAxLzk2IGluY2guPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJwaXhlbHNQZXJEaXAiPk51bWJlciBvZiBwaHlzaWNhbCBwaXhlbHMgcGVyIERJUC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBEUEkgb2YgdGhlIHJlbmRlcmluZyBzdXJmYWNlIGlzIDk2IHRoaXMgDQotICAgIC8vLyB2YWx1ZSBpcyAxLjBmLiBJZiB0aGUgRFBJIGlzIDEyMCwgdGhpcyB2YWx1ZSBpcyAxMjAuMGYvOTYuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0cmFuc2Zvcm0iPk9wdGlvbmFsIHRyYW5zZm9ybSBhcHBsaWVkIHRvIHRoZSBnbHlwaHMgYW5kIHRoZWlyIHBvc2l0aW9ucy4gVGhpcyB0cmFuc2Zvcm0gaXMgYXBwbGllZCBhZnRlciB0aGUNCi0gICAgLy8vIHNjYWxpbmcgc3BlY2lmaWVkIGJ5IHRoZSBmb250IHNpemUgYW5kIHBpeGVsc1BlckRpcC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGYWNlTWV0cmljcyI+UG9pbnRzIHRvIGEgRFdSSVRFX0ZPTlRfTUVUUklDUyBzdHJ1Y3R1cmUgdG8gZmlsbCBpbi4NCi0gICAgLy8vIFRoZSBtZXRyaWNzIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gYXJlIGluIGZvbnQgZGVzaWduIHVuaXRzLjwvcGFyYW0+DQotICAgIFNURE1FVEhPRChHZXRHZGlDb21wYXRpYmxlTWV0cmljcykoDQotICAgICAgICBGTE9BVCBlbVNpemUsDQotICAgICAgICBGTE9BVCBwaXhlbHNQZXJEaXAsDQotICAgICAgICBfX2luX29wdCBEV1JJVEVfTUFUUklYIGNvbnN0KiB0cmFuc2Zvcm0sDQotICAgICAgICBfX291dCBEV1JJVEVfRk9OVF9NRVRSSUNTKiBmb250RmFjZU1ldHJpY3MNCi0gICAgICAgICkgUFVSRTsNCi0NCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gT2J0YWlucyBnbHlwaCBtZXRyaWNzIGluIGZvbnQgZGVzaWduIHVuaXRzIHdpdGggdGhlIHJldHVybiB2YWx1ZXMgY29tcGF0aWJsZSB3aXRoIHdoYXQgR0RJIHdvdWxkIHByb2R1Y2UuDQotICAgIC8vLyBHbHlwaHMgbWV0cmljcyBhcmUgdXNlZCBmb3IgcG9zaXRpb25pbmcgb2YgaW5kaXZpZHVhbCBnbHlwaHMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZW1TaXplIj5Mb2dpY2FsIHNpemUgb2YgdGhlIGZvbnQgaW4gRElQIHVuaXRzLiBBIERJUCAoImRldmljZS1pbmRlcGVuZGVudCBwaXhlbCIpIGVxdWFscyAxLzk2IGluY2guPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJwaXhlbHNQZXJEaXAiPk51bWJlciBvZiBwaHlzaWNhbCBwaXhlbHMgcGVyIERJUC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBEUEkgb2YgdGhlIHJlbmRlcmluZyBzdXJmYWNlIGlzIDk2IHRoaXMgDQotICAgIC8vLyB2YWx1ZSBpcyAxLjBmLiBJZiB0aGUgRFBJIGlzIDEyMCwgdGhpcyB2YWx1ZSBpcyAxMjAuMGYvOTYuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0cmFuc2Zvcm0iPk9wdGlvbmFsIHRyYW5zZm9ybSBhcHBsaWVkIHRvIHRoZSBnbHlwaHMgYW5kIHRoZWlyIHBvc2l0aW9ucy4gVGhpcyB0cmFuc2Zvcm0gaXMgYXBwbGllZCBhZnRlciB0aGUNCi0gICAgLy8vIHNjYWxpbmcgc3BlY2lmaWVkIGJ5IHRoZSBmb250IHNpemUgYW5kIHBpeGVsc1BlckRpcC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InVzZUdkaU5hdHVyYWwiPg0KLSAgICAvLy8gV2hlbiBzZXQgdG8gRkFMU0UsIHRoZSBtZXRyaWNzIGFyZSB0aGUgc2FtZSBhcyB0aGUgbWV0cmljcyBvZiBHREkgYWxpYXNlZCB0ZXh0Lg0KLSAgICAvLy8gV2hlbiBzZXQgdG8gVFJVRSwgdGhlIG1ldHJpY3MgYXJlIHRoZSBzYW1lIGFzIHRoZSBtZXRyaWNzIG9mIHRleHQgbWVhc3VyZWQgYnkgR0RJIHVzaW5nIGEgZm9udA0KLSAgICAvLy8gY3JlYXRlZCB3aXRoIENMRUFSVFlQRV9OQVRVUkFMX1FVQUxJVFkuDQotICAgIC8vLyA8L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImdseXBoSW5kaWNlcyI+QW4gYXJyYXkgb2YgZ2x5cGggaW5kaWNlcyB0byBjb21wdXRlIHRoZSBtZXRyaWNzIGZvci48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImdseXBoQ291bnQiPlRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGdseXBoSW5kaWNlcyBhcnJheS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImdseXBoTWV0cmljcyI+QXJyYXkgb2YgRFdSSVRFX0dMWVBIX01FVFJJQ1Mgc3RydWN0dXJlcyBmaWxsZWQgYnkgdGhpcyBmdW5jdGlvbi4NCi0gICAgLy8vIFRoZSBtZXRyaWNzIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gYXJlIGluIGZvbnQgZGVzaWduIHVuaXRzLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iaXNTaWRld2F5cyI+SW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZvbnQgaXMgYmVpbmcgdXNlZCBpbiBhIHNpZGV3YXlzIHJ1bi4NCi0gICAgLy8vIFRoaXMgY2FuIGFmZmVjdCB0aGUgZ2x5cGggbWV0cmljcyBpZiB0aGUgZm9udCBoYXMgb2JsaXF1ZSBzaW11bGF0aW9uDQotICAgIC8vLyBiZWNhdXNlIHNpZGV3YXlzIG9ibGlxdWUgc2ltdWxhdGlvbiBkaWZmZXJzIGZyb20gbm9uLXNpZGV3YXlzIG9ibGlxdWUgc2ltdWxhdGlvbi48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuIElmIGFueSBvZiB0aGUgaW5wdXQgZ2x5cGggaW5kaWNlcyBhcmUgb3V0c2lkZSBvZiB0aGUgdmFsaWQgZ2x5cGggaW5kZXggcmFuZ2UNCi0gICAgLy8vIGZvciB0aGUgY3VycmVudCBmb250IGZhY2UsIEVfSU5WQUxJREFSRyB3aWxsIGJlIHJldHVybmVkLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoR2V0R2RpQ29tcGF0aWJsZUdseXBoTWV0cmljcykoDQotICAgICAgICBGTE9BVCBlbVNpemUsDQotICAgICAgICBGTE9BVCBwaXhlbHNQZXJEaXAsDQotICAgICAgICBfX2luX29wdCBEV1JJVEVfTUFUUklYIGNvbnN0KiB0cmFuc2Zvcm0sDQotICAgICAgICBCT09MIHVzZUdkaU5hdHVyYWwsDQotICAgICAgICBfX2luX2Vjb3VudChnbHlwaENvdW50KSBVSU5UMTYgY29uc3QqIGdseXBoSW5kaWNlcywNCi0gICAgICAgIFVJTlQzMiBnbHlwaENvdW50LA0KLSAgICAgICAgX19vdXRfZWNvdW50KGdseXBoQ291bnQpIERXUklURV9HTFlQSF9NRVRSSUNTKiBnbHlwaE1ldHJpY3MsDQotICAgICAgICBCT09MIGlzU2lkZXdheXMgPSBGQUxTRQ0KLSAgICAgICAgKSBQVVJFOw0KLX07DQotDQotaW50ZXJmYWNlIElEV3JpdGVGYWN0b3J5Ow0KLWludGVyZmFjZSBJRFdyaXRlRm9udEZpbGVFbnVtZXJhdG9yOw0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gVGhlIGZvbnQgY29sbGVjdGlvbiBsb2FkZXIgaW50ZXJmYWNlIGlzIHVzZWQgdG8gY29uc3RydWN0IGEgY29sbGVjdGlvbiBvZiBmb250cyBnaXZlbiBhIHBhcnRpY3VsYXIgdHlwZSBvZiBrZXkuDQotLy8vIFRoZSBmb250IGNvbGxlY3Rpb24gbG9hZGVyIGludGVyZmFjZSBpcyByZWNvbW1lbmRlZCB0byBiZSBpbXBsZW1lbnRlZCBieSBhIHNpbmdsZXRvbiBvYmplY3QuDQotLy8vIElNUE9SVEFOVDogZm9udCBjb2xsZWN0aW9uIGxvYWRlciBpbXBsZW1lbnRhdGlvbnMgbXVzdCBub3QgcmVnaXN0ZXIgdGhlbXNlbHZlcyB3aXRoIGEgRGlyZWN0V3JpdGUgZmFjdG9yeQ0KLS8vLyBpbnNpZGUgdGhlaXIgY29uc3RydWN0b3JzIGFuZCBtdXN0IG5vdCB1bnJlZ2lzdGVyIHRoZW1zZWx2ZXMgaW4gdGhlaXIgZGVzdHJ1Y3RvcnMsIGJlY2F1c2UNCi0vLy8gcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdG9uIG9wZXJhdGlvbnMgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgdGhlIG9iamVjdCByZWZlcmVuY2UgY291bnQgcmVzcGVjdGl2ZWx5Lg0KLS8vLyBJbnN0ZWFkLCByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIG9mIGZvbnQgZmlsZSBsb2FkZXJzIHdpdGggRGlyZWN0V3JpdGUgZmFjdG9yeSBzaG91bGQgYmUgcGVyZm9ybWVkDQotLy8vIG91dHNpZGUgb2YgdGhlIGZvbnQgZmlsZSBsb2FkZXIgaW1wbGVtZW50YXRpb24gYXMgYSBzZXBhcmF0ZSBzdGVwLg0KLS8vLyA8L3N1bW1hcnk+DQotaW50ZXJmYWNlIERXUklURV9ERUNMQVJFX0lOVEVSRkFDRSgiY2NhOTIwZTQtNTJmMC00OTJiLWJmYTgtMjljNzJlZTBhNDY4IikgSURXcml0ZUZvbnRDb2xsZWN0aW9uTG9hZGVyIDogcHVibGljIElVbmtub3duDQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBDcmVhdGVzIGEgZm9udCBmaWxlIGVudW1lcmF0b3Igb2JqZWN0IHRoYXQgZW5jYXBzdWxhdGVzIGEgY29sbGVjdGlvbiBvZiBmb250IGZpbGVzLg0KLSAgICAvLy8gVGhlIGZvbnQgc3lzdGVtIGNhbGxzIGJhY2sgdG8gdGhpcyBpbnRlcmZhY2UgdG8gY3JlYXRlIGEgZm9udCBjb2xsZWN0aW9uLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZhY3RvcnkiPkZhY3RvcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBsb2FkZXIuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJjb2xsZWN0aW9uS2V5Ij5Gb250IGNvbGxlY3Rpb24ga2V5IHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgY29sbGVjdGlvbiBvZiBmb250IGZpbGVzIHdpdGhpbg0KLSAgICAvLy8gdGhlIHNjb3BlIG9mIHRoZSBmb250IGNvbGxlY3Rpb24gbG9hZGVyIGJlaW5nIHVzZWQuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJjb2xsZWN0aW9uS2V5U2l6ZSI+U2l6ZSBvZiB0aGUgZm9udCBjb2xsZWN0aW9uIGtleSBpbiBieXRlcy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGaWxlRW51bWVyYXRvciI+UG9pbnRlciB0byB0aGUgbmV3bHkgY3JlYXRlZCBmb250IGZpbGUgZW51bWVyYXRvci48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChDcmVhdGVFbnVtZXJhdG9yRnJvbUtleSkoDQotICAgICAgICBJRFdyaXRlRmFjdG9yeSogZmFjdG9yeSwNCi0gICAgICAgIF9faW5fYmNvdW50KGNvbGxlY3Rpb25LZXlTaXplKSB2b2lkIGNvbnN0KiBjb2xsZWN0aW9uS2V5LA0KLSAgICAgICAgVUlOVDMyIGNvbGxlY3Rpb25LZXlTaXplLA0KLSAgICAgICAgX19vdXQgSURXcml0ZUZvbnRGaWxlRW51bWVyYXRvcioqIGZvbnRGaWxlRW51bWVyYXRvcg0KLSAgICAgICAgKSBQVVJFOw0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgZm9udCBmaWxlIGVudW1lcmF0b3IgaW50ZXJmYWNlIGVuY2Fwc3VsYXRlcyBhIGNvbGxlY3Rpb24gb2YgZm9udCBmaWxlcy4gVGhlIGZvbnQgc3lzdGVtIHVzZXMgdGhpcyBpbnRlcmZhY2UNCi0vLy8gdG8gZW51bWVyYXRlIGZvbnQgZmlsZXMgd2hlbiBidWlsZGluZyBhIGZvbnQgY29sbGVjdGlvbi4NCi0vLy8gPC9zdW1tYXJ5Pg0KLWludGVyZmFjZSBEV1JJVEVfREVDTEFSRV9JTlRFUkZBQ0UoIjcyNzU1MDQ5LTVmZjctNDM1ZC04MzQ4LTRiZTk3Y2ZhNmM3YyIpIElEV3JpdGVGb250RmlsZUVudW1lcmF0b3IgOiBwdWJsaWMgSVVua25vd24NCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEFkdmFuY2VzIHRvIHRoZSBuZXh0IGZvbnQgZmlsZSBpbiB0aGUgY29sbGVjdGlvbi4gV2hlbiBpdCBpcyBmaXJzdCBjcmVhdGVkLCB0aGUgZW51bWVyYXRvciBpcyBwb3NpdGlvbmVkDQotICAgIC8vLyBiZWZvcmUgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGNvbGxlY3Rpb24gYW5kIHRoZSBmaXJzdCBjYWxsIHRvIE1vdmVOZXh0IGFkdmFuY2VzIHRvIHRoZSBmaXJzdCBmaWxlLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Imhhc0N1cnJlbnRGaWxlIj5SZWNlaXZlcyB0aGUgdmFsdWUgVFJVRSBpZiB0aGUgZW51bWVyYXRvciBhZHZhbmNlcyB0byBhIGZpbGUsIG9yIEZBTFNFIGlmDQotICAgIC8vLyB0aGUgZW51bWVyYXRvciBhZHZhbmNlZCBwYXN0IHRoZSBsYXN0IGZpbGUgaW4gdGhlIGNvbGxlY3Rpb24uPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoTW92ZU5leHQpKA0KLSAgICAgICAgX19vdXQgQk9PTCogaGFzQ3VycmVudEZpbGUNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0cyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmb250IGZpbGUuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGUiPlBvaW50ZXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgZm9udCBmaWxlIG9iamVjdC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRDdXJyZW50Rm9udEZpbGUpKA0KLSAgICAgICAgX19vdXQgSURXcml0ZUZvbnRGaWxlKiogZm9udEZpbGUNCi0gICAgICAgICkgUFVSRTsNCi19Ow0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gUmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2Ygc3RyaW5ncyBpbmRleGVkIGJ5IGxvY2FsZSBuYW1lLg0KLS8vLyA8L3N1bW1hcnk+DQotaW50ZXJmYWNlIERXUklURV9ERUNMQVJFX0lOVEVSRkFDRSgiMDgyNTYyMDktMDk5YS00YjM0LWI4NmQtYzIyYjExMGU3NzcxIikgSURXcml0ZUxvY2FsaXplZFN0cmluZ3MgOiBwdWJsaWMgSVVua25vd24NCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldHMgdGhlIG51bWJlciBvZiBsYW5ndWFnZS9zdHJpbmcgcGFpcnMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFNURE1FVEhPRF8oVUlOVDMyLCBHZXRDb3VudCkoKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXRzIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3aXRoIHRoZSBzcGVjaWZpZWQgbG9jYWxlIG5hbWUuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ibG9jYWxlTmFtZSI+TG9jYWxlIG5hbWUgdG8gbG9vayBmb3IuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJpbmRleCI+UmVjZWl2ZXMgdGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGxvY2FsZSBuYW1lL3N0cmluZyBwYWlyLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZXhpc3RzIj5SZWNlaXZlcyBUUlVFIGlmIHRoZSBsb2NhbGUgbmFtZSBleGlzdHMgb3IgRkFMU0UgaWYgbm90LjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4gSWYgdGhlIHNwZWNpZmllZCBsb2NhbGUgbmFtZSBkb2VzIG5vdCBleGlzdCwgdGhlIHJldHVybiB2YWx1ZSBpcyBTX09LLCANCi0gICAgLy8vIGJ1dCAqaW5kZXggaXMgVUlOVF9NQVggYW5kICpleGlzdHMgaXMgRkFMU0UuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChGaW5kTG9jYWxlTmFtZSkoDQotICAgICAgICBfX2luX3ogV0NIQVIgY29uc3QqIGxvY2FsZU5hbWUsIA0KLSAgICAgICAgX19vdXQgVUlOVDMyKiBpbmRleCwNCi0gICAgICAgIF9fb3V0IEJPT0wqIGV4aXN0cw0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXRzIHRoZSBsZW5ndGggaW4gY2hhcmFjdGVycyAobm90IGluY2x1ZGluZyB0aGUgbnVsbCB0ZXJtaW5hdG9yKSBvZiB0aGUgbG9jYWxlIG5hbWUgd2l0aCB0aGUgc3BlY2lmaWVkIGluZGV4Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImluZGV4Ij5aZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBsb2NhbGUgbmFtZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Imxlbmd0aCI+UmVjZWl2ZXMgdGhlIGxlbmd0aCBpbiBjaGFyYWN0ZXJzLCBub3QgaW5jbHVkaW5nIHRoZSBudWxsIHRlcm1pbmF0b3IuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoR2V0TG9jYWxlTmFtZUxlbmd0aCkoDQotICAgICAgICBVSU5UMzIgaW5kZXgsDQotICAgICAgICBfX291dCBVSU5UMzIqIGxlbmd0aA0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBDb3BpZXMgdGhlIGxvY2FsZSBuYW1lIHdpdGggdGhlIHNwZWNpZmllZCBpbmRleCB0byB0aGUgc3BlY2lmaWVkIGFycmF5Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImluZGV4Ij5aZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBsb2NhbGUgbmFtZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImxvY2FsZU5hbWUiPkNoYXJhY3RlciBhcnJheSB0aGF0IHJlY2VpdmVzIHRoZSBsb2NhbGUgbmFtZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InNpemUiPlNpemUgb2YgdGhlIGFycmF5IGluIGNoYXJhY3RlcnMuIFRoZSBzaXplIG11c3QgaW5jbHVkZSBzcGFjZSBmb3IgdGhlIHRlcm1pbmF0aW5nDQotICAgIC8vLyBudWxsIGNoYXJhY3Rlci48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRMb2NhbGVOYW1lKSgNCi0gICAgICAgIFVJTlQzMiBpbmRleCwNCi0gICAgICAgIF9fb3V0X2Vjb3VudF96KHNpemUpIFdDSEFSKiBsb2NhbGVOYW1lLA0KLSAgICAgICAgVUlOVDMyIHNpemUNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0cyB0aGUgbGVuZ3RoIGluIGNoYXJhY3RlcnMgKG5vdCBpbmNsdWRpbmcgdGhlIG51bGwgdGVybWluYXRvcikgb2YgdGhlIHN0cmluZyB3aXRoIHRoZSBzcGVjaWZpZWQgaW5kZXguDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iaW5kZXgiPlplcm8tYmFzZWQgaW5kZXggb2YgdGhlIHN0cmluZy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Imxlbmd0aCI+UmVjZWl2ZXMgdGhlIGxlbmd0aCBpbiBjaGFyYWN0ZXJzLCBub3QgaW5jbHVkaW5nIHRoZSBudWxsIHRlcm1pbmF0b3IuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoR2V0U3RyaW5nTGVuZ3RoKSgNCi0gICAgICAgIFVJTlQzMiBpbmRleCwNCi0gICAgICAgIF9fb3V0IFVJTlQzMiogbGVuZ3RoDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIENvcGllcyB0aGUgc3RyaW5nIHdpdGggdGhlIHNwZWNpZmllZCBpbmRleCB0byB0aGUgc3BlY2lmaWVkIGFycmF5Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImluZGV4Ij5aZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBzdHJpbmcuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJpbmdCdWZmZXIiPkNoYXJhY3RlciBhcnJheSB0aGF0IHJlY2VpdmVzIHRoZSBzdHJpbmcuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJzaXplIj5TaXplIG9mIHRoZSBhcnJheSBpbiBjaGFyYWN0ZXJzLiBUaGUgc2l6ZSBtdXN0IGluY2x1ZGUgc3BhY2UgZm9yIHRoZSB0ZXJtaW5hdGluZw0KLSAgICAvLy8gbnVsbCBjaGFyYWN0ZXIuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoR2V0U3RyaW5nKSgNCi0gICAgICAgIFVJTlQzMiBpbmRleCwNCi0gICAgICAgIF9fb3V0X2Vjb3VudF96KHNpemUpIFdDSEFSKiBzdHJpbmdCdWZmZXIsDQotICAgICAgICBVSU5UMzIgc2l6ZQ0KLSAgICAgICAgKSBQVVJFOw0KLX07DQotDQotaW50ZXJmYWNlIElEV3JpdGVGb250RmFtaWx5Ow0KLWludGVyZmFjZSBJRFdyaXRlRm9udDsNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIFRoZSBJRFdyaXRlRm9udENvbGxlY3Rpb24gZW5jYXBzdWxhdGVzIGEgY29sbGVjdGlvbiBvZiBmb250cy4NCi0vLy8gPC9zdW1tYXJ5Pg0KLWludGVyZmFjZSBEV1JJVEVfREVDTEFSRV9JTlRFUkZBQ0UoImE4NGNlZTAyLTNlZWEtNGVlZS1hODI3LTg3YzFhMDJhMGZjYyIpIElEV3JpdGVGb250Q29sbGVjdGlvbiA6IHB1YmxpYyBJVW5rbm93bg0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0cyB0aGUgbnVtYmVyIG9mIGZvbnQgZmFtaWxpZXMgaW4gdGhlIGNvbGxlY3Rpb24uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFNURE1FVEhPRF8oVUlOVDMyLCBHZXRGb250RmFtaWx5Q291bnQpKCkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gQ3JlYXRlcyBhIGZvbnQgZmFtaWx5IG9iamVjdCBnaXZlbiBhIHplcm8tYmFzZWQgZm9udCBmYW1pbHkgaW5kZXguDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iaW5kZXgiPlplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGZvbnQgZmFtaWx5LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZhbWlseSI+UmVjZWl2ZXMgYSBwb2ludGVyIHRoZSBuZXdseSBjcmVhdGVkIGZvbnQgZmFtaWx5IG9iamVjdC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRGb250RmFtaWx5KSgNCi0gICAgICAgIFVJTlQzMiBpbmRleCwNCi0gICAgICAgIF9fb3V0IElEV3JpdGVGb250RmFtaWx5KiogZm9udEZhbWlseQ0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBGaW5kcyB0aGUgZm9udCBmYW1pbHkgd2l0aCB0aGUgc3BlY2lmaWVkIGZhbWlseSBuYW1lLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZhbWlseU5hbWUiPk5hbWUgb2YgdGhlIGZvbnQgZmFtaWx5LiBUaGUgbmFtZSBpcyBub3QgY2FzZS1zZW5zaXRpdmUgYnV0IG11c3Qgb3RoZXJ3aXNlIGV4YWN0bHkgbWF0Y2ggYSBmYW1pbHkgbmFtZSBpbiB0aGUgY29sbGVjdGlvbi48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImluZGV4Ij5SZWNlaXZlcyB0aGUgemVyby1iYXNlZCBpbmRleCBvZiB0aGUgbWF0Y2hpbmcgZm9udCBmYW1pbHkgaWYgdGhlIGZhbWlseSBuYW1lIHdhcyBmb3VuZCBvciBVSU5UX01BWCBvdGhlcndpc2UuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJleGlzdHMiPlJlY2VpdmVzIFRSVUUgaWYgdGhlIGZhbWlseSBuYW1lIGV4aXN0cyBvciBGQUxTRSBvdGhlcndpc2UuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLiBJZiB0aGUgc3BlY2lmaWVkIGZhbWlseSBuYW1lIGRvZXMgbm90IGV4aXN0LCB0aGUgcmV0dXJuIHZhbHVlIGlzIFNfT0ssIGJ1dCAqaW5kZXggaXMgVUlOVF9NQVggYW5kICpleGlzdHMgaXMgRkFMU0UuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChGaW5kRmFtaWx5TmFtZSkoDQotICAgICAgICBfX2luX3ogV0NIQVIgY29uc3QqIGZhbWlseU5hbWUsDQotICAgICAgICBfX291dCBVSU5UMzIqIGluZGV4LA0KLSAgICAgICAgX19vdXQgQk9PTCogZXhpc3RzDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldHMgdGhlIGZvbnQgb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHNhbWUgcGh5c2ljYWwgZm9udCBhcyB0aGUgc3BlY2lmaWVkIGZvbnQgZmFjZSBvYmplY3QuIFRoZSBzcGVjaWZpZWQgcGh5c2ljYWwgZm9udCBtdXN0IGJlbG9uZyANCi0gICAgLy8vIHRvIHRoZSBmb250IGNvbGxlY3Rpb24uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZhY2UiPkZvbnQgZmFjZSBvYmplY3QgdGhhdCBzcGVjaWZpZXMgdGhlIHBoeXNpY2FsIGZvbnQuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250Ij5SZWNlaXZlcyBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgZm9udCBvYmplY3QgaWYgc3VjY2Vzc2Z1bCBvciBOVUxMIG90aGVyd2lzZS48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuIElmIHRoZSBzcGVjaWZpZWQgcGh5c2ljYWwgZm9udCBpcyBub3QgcGFydCBvZiB0aGUgZm9udCBjb2xsZWN0aW9uIHRoZSByZXR1cm4gdmFsdWUgaXMgRFdSSVRFX0VfTk9GT05ULg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoR2V0Rm9udEZyb21Gb250RmFjZSkoDQotICAgICAgICBJRFdyaXRlRm9udEZhY2UqIGZvbnRGYWNlLA0KLSAgICAgICAgX19vdXQgSURXcml0ZUZvbnQqKiBmb250DQotICAgICAgICApIFBVUkU7DQotfTsNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIFRoZSBJRFdyaXRlRm9udExpc3QgaW50ZXJmYWNlIHJlcHJlc2VudHMgYSBsaXN0IG9mIGZvbnRzLg0KLS8vLyA8L3N1bW1hcnk+DQotaW50ZXJmYWNlIERXUklURV9ERUNMQVJFX0lOVEVSRkFDRSgiMWEwZDg0MzgtMWQ5Ny00ZWMxLWFlZjktYTJmYjg2ZWQ2YWNiIikgSURXcml0ZUZvbnRMaXN0IDogcHVibGljIElVbmtub3duDQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXRzIHRoZSBmb250IGNvbGxlY3Rpb24gdGhhdCBjb250YWlucyB0aGUgZm9udHMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udENvbGxlY3Rpb24iPlJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgZm9udCBjb2xsZWN0aW9uIG9iamVjdC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRGb250Q29sbGVjdGlvbikoDQotICAgICAgICBfX291dCBJRFdyaXRlRm9udENvbGxlY3Rpb24qKiBmb250Q29sbGVjdGlvbg0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXRzIHRoZSBudW1iZXIgb2YgZm9udHMgaW4gdGhlIGZvbnQgbGlzdC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgU1RETUVUSE9EXyhVSU5UMzIsIEdldEZvbnRDb3VudCkoKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXRzIGEgZm9udCBnaXZlbiBpdHMgemVyby1iYXNlZCBpbmRleC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJpbmRleCI+WmVyby1iYXNlZCBpbmRleCBvZiB0aGUgZm9udCBpbiB0aGUgZm9udCBsaXN0LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udCI+UmVjZWl2ZXMgYSBwb2ludGVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIGZvbnQgb2JqZWN0LjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKEdldEZvbnQpKA0KLSAgICAgICAgVUlOVDMyIGluZGV4LCANCi0gICAgICAgIF9fb3V0IElEV3JpdGVGb250KiogZm9udA0KLSAgICAgICAgKSBQVVJFOw0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgSURXcml0ZUZvbnRGYW1pbHkgaW50ZXJmYWNlIHJlcHJlc2VudHMgYSBzZXQgb2YgZm9udHMgdGhhdCBzaGFyZSB0aGUgc2FtZSBkZXNpZ24gYnV0IGFyZSBkaWZmZXJlbnRpYXRlZA0KLS8vLyBieSB3ZWlnaHQsIHN0cmV0Y2gsIGFuZCBzdHlsZS4NCi0vLy8gPC9zdW1tYXJ5Pg0KLWludGVyZmFjZSBEV1JJVEVfREVDTEFSRV9JTlRFUkZBQ0UoImRhMjBkOGVmLTgxMmEtNGM0My05ODAyLTYyZWM0YWJkN2FkZCIpIElEV3JpdGVGb250RmFtaWx5IDogcHVibGljIElEV3JpdGVGb250TGlzdA0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gQ3JlYXRlcyBhbiBsb2NhbGl6ZWQgc3RyaW5ncyBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgZmFtaWx5IG5hbWVzIGZvciB0aGUgZm9udCBmYW1pbHksIGluZGV4ZWQgYnkgbG9jYWxlIG5hbWUuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ibmFtZXMiPlJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgY3JlYXRlZCBsb2NhbGl6ZWQgc3RyaW5ncyBvYmplY3QuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoR2V0RmFtaWx5TmFtZXMpKA0KLSAgICAgICAgX19vdXQgSURXcml0ZUxvY2FsaXplZFN0cmluZ3MqKiBuYW1lcw0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXRzIHRoZSBmb250IHRoYXQgYmVzdCBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ3ZWlnaHQiPlJlcXVlc3RlZCBmb250IHdlaWdodC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmV0Y2giPlJlcXVlc3RlZCBmb250IHN0cmV0Y2guPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJzdHlsZSI+UmVxdWVzdGVkIGZvbnQgc3R5bGUuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJtYXRjaGluZ0ZvbnQiPlJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgY3JlYXRlZCBmb250IG9iamVjdC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRGaXJzdE1hdGNoaW5nRm9udCkoDQotICAgICAgICBEV1JJVEVfRk9OVF9XRUlHSFQgIHdlaWdodCwNCi0gICAgICAgIERXUklURV9GT05UX1NUUkVUQ0ggc3RyZXRjaCwNCi0gICAgICAgIERXUklURV9GT05UX1NUWUxFICAgc3R5bGUsDQotICAgICAgICBfX291dCBJRFdyaXRlRm9udCoqIG1hdGNoaW5nRm9udA0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXRzIGEgbGlzdCBvZiBmb250cyBpbiB0aGUgZm9udCBmYW1pbHkgcmFua2VkIGluIG9yZGVyIG9mIGhvdyB3ZWxsIHRoZXkgbWF0Y2ggdGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9IndlaWdodCI+UmVxdWVzdGVkIGZvbnQgd2VpZ2h0LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyZXRjaCI+UmVxdWVzdGVkIGZvbnQgc3RyZXRjaC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InN0eWxlIj5SZXF1ZXN0ZWQgZm9udCBzdHlsZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Im1hdGNoaW5nRm9udHMiPlJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgY3JlYXRlZCBmb250IGxpc3Qgb2JqZWN0LjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKEdldE1hdGNoaW5nRm9udHMpKA0KLSAgICAgICAgRFdSSVRFX0ZPTlRfV0VJR0hUICAgICAgd2VpZ2h0LA0KLSAgICAgICAgRFdSSVRFX0ZPTlRfU1RSRVRDSCAgICAgc3RyZXRjaCwNCi0gICAgICAgIERXUklURV9GT05UX1NUWUxFICAgICAgIHN0eWxlLA0KLSAgICAgICAgX19vdXQgSURXcml0ZUZvbnRMaXN0KiogbWF0Y2hpbmdGb250cw0KLSAgICAgICAgKSBQVVJFOw0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgSURXcml0ZUZvbnQgaW50ZXJmYWNlIHJlcHJlc2VudHMgYSBwaHlzaWNhbCBmb250IGluIGEgZm9udCBjb2xsZWN0aW9uLg0KLS8vLyA8L3N1bW1hcnk+DQotaW50ZXJmYWNlIERXUklURV9ERUNMQVJFX0lOVEVSRkFDRSgiYWNkMTY2OTYtOGMxNC00ZjVkLTg3N2UtZmUzZmMxZDMyNzM3IikgSURXcml0ZUZvbnQgOiBwdWJsaWMgSVVua25vd24NCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldHMgdGhlIGZvbnQgZmFtaWx5IHRvIHdoaWNoIHRoZSBzcGVjaWZpZWQgZm9udCBiZWxvbmdzLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGYW1pbHkiPlJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgZm9udCBmYW1pbHkgb2JqZWN0LjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKEdldEZvbnRGYW1pbHkpKA0KLSAgICAgICAgX19vdXQgSURXcml0ZUZvbnRGYW1pbHkqKiBmb250RmFtaWx5DQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldHMgdGhlIHdlaWdodCBvZiB0aGUgc3BlY2lmaWVkIGZvbnQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFNURE1FVEhPRF8oRFdSSVRFX0ZPTlRfV0VJR0hULCBHZXRXZWlnaHQpKCkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0cyB0aGUgc3RyZXRjaCAoYWthLiB3aWR0aCkgb2YgdGhlIHNwZWNpZmllZCBmb250Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBTVERNRVRIT0RfKERXUklURV9GT05UX1NUUkVUQ0gsIEdldFN0cmV0Y2gpKCkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0cyB0aGUgc3R5bGUgKGFrYS4gc2xvcGUpIG9mIHRoZSBzcGVjaWZpZWQgZm9udC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgU1RETUVUSE9EXyhEV1JJVEVfRk9OVF9TVFlMRSwgR2V0U3R5bGUpKCkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gUmV0dXJucyBUUlVFIGlmIHRoZSBmb250IGlzIGEgc3ltYm9sIGZvbnQgb3IgRkFMU0UgaWYgbm90Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBTVERNRVRIT0RfKEJPT0wsIElzU3ltYm9sRm9udCkoKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXRzIGEgbG9jYWxpemVkIHN0cmluZ3MgY29sbGVjdGlvbiBjb250YWluaW5nIHRoZSBmYWNlIG5hbWVzIGZvciB0aGUgZm9udCAoZS5nLiwgUmVndWxhciBvciBCb2xkKSwgaW5kZXhlZCBieSBsb2NhbGUgbmFtZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJuYW1lcyI+UmVjZWl2ZXMgYSBwb2ludGVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIGxvY2FsaXplZCBzdHJpbmdzIG9iamVjdC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRGYWNlTmFtZXMpKA0KLSAgICAgICAgX19vdXQgSURXcml0ZUxvY2FsaXplZFN0cmluZ3MqKiBuYW1lcw0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXRzIGEgbG9jYWxpemVkIHN0cmluZ3MgY29sbGVjdGlvbiBjb250YWluaW5nIHRoZSBzcGVjaWZpZWQgaW5mb3JtYXRpb25hbCBzdHJpbmdzLCBpbmRleGVkIGJ5IGxvY2FsZSBuYW1lLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImluZm9ybWF0aW9uYWxTdHJpbmdJRCI+SWRlbnRpZmllcyB0aGUgc3RyaW5nIHRvIGdldC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImluZm9ybWF0aW9uYWxTdHJpbmdzIj5SZWNlaXZlcyBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgbG9jYWxpemVkIHN0cmluZ3Mgb2JqZWN0LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZXhpc3RzIj5SZWNlaXZlcyB0aGUgdmFsdWUgVFJVRSBpZiB0aGUgZm9udCBjb250YWlucyB0aGUgc3BlY2lmaWVkIHN0cmluZyBJRCBvciBGQUxTRSBpZiBub3QuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLiBJZiB0aGUgZm9udCBkb2VzIG5vdCBjb250YWluIHRoZSBzcGVjaWZpZWQgc3RyaW5nLCB0aGUgcmV0dXJuIHZhbHVlIGlzIFNfT0sgYnV0IA0KLSAgICAvLy8gaW5mb3JtYXRpb25hbFN0cmluZ3MgcmVjZWl2ZXMgYSBOVUxMIHBvaW50ZXIgYW5kIGV4aXN0cyByZWNlaXZlcyB0aGUgdmFsdWUgRkFMU0UuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRJbmZvcm1hdGlvbmFsU3RyaW5ncykoDQotICAgICAgICBEV1JJVEVfSU5GT1JNQVRJT05BTF9TVFJJTkdfSUQgaW5mb3JtYXRpb25hbFN0cmluZ0lELA0KLSAgICAgICAgX19vdXQgSURXcml0ZUxvY2FsaXplZFN0cmluZ3MqKiBpbmZvcm1hdGlvbmFsU3RyaW5ncywNCi0gICAgICAgIF9fb3V0IEJPT0wqIGV4aXN0cw0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXRzIGEgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hhdCBzaW11bGF0aW9uIGFyZSBhcHBsaWVkIHRvIHRoZSBzcGVjaWZpZWQgZm9udC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgU1RETUVUSE9EXyhEV1JJVEVfRk9OVF9TSU1VTEFUSU9OUywgR2V0U2ltdWxhdGlvbnMpKCkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0cyB0aGUgbWV0cmljcyBmb3IgdGhlIGZvbnQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udE1ldHJpY3MiPlJlY2VpdmVzIHRoZSBmb250IG1ldHJpY3MuPC9wYXJhbT4NCi0gICAgU1RETUVUSE9EXyh2b2lkLCBHZXRNZXRyaWNzKSgNCi0gICAgICAgIF9fb3V0IERXUklURV9GT05UX01FVFJJQ1MqIGZvbnRNZXRyaWNzDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIERldGVybWluZXMgd2hldGhlciB0aGUgZm9udCBzdXBwb3J0cyB0aGUgc3BlY2lmaWVkIGNoYXJhY3Rlci4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ1bmljb2RlVmFsdWUiPlVuaWNvZGUgKFVDUy00KSBjaGFyYWN0ZXIgdmFsdWUuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJleGlzdHMiPlJlY2VpdmVzIHRoZSB2YWx1ZSBUUlVFIGlmIHRoZSBmb250IHN1cHBvcnRzIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIG9yIEZBTFNFIGlmIG5vdC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChIYXNDaGFyYWN0ZXIpKA0KLSAgICAgICAgVUlOVDMyIHVuaWNvZGVWYWx1ZSwNCi0gICAgICAgIF9fb3V0IEJPT0wqIGV4aXN0cw0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBDcmVhdGVzIGEgZm9udCBmYWNlIG9iamVjdCBmb3IgdGhlIGZvbnQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZhY2UiPlJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgY3JlYXRlZCBmb250IGZhY2Ugb2JqZWN0LjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKENyZWF0ZUZvbnRGYWNlKSgNCi0gICAgICAgIF9fb3V0IElEV3JpdGVGb250RmFjZSoqIGZvbnRGYWNlDQotICAgICAgICApIFBVUkU7DQotfTsNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIERpcmVjdGlvbiBmb3IgaG93IHJlYWRpbmcgcHJvZ3Jlc3Nlcy4NCi0vLy8gPC9zdW1tYXJ5Pg0KLWVudW0gRFdSSVRFX1JFQURJTkdfRElSRUNUSU9ODQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBSZWFkaW5nIHByb2dyZXNzZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfUkVBRElOR19ESVJFQ1RJT05fTEVGVF9UT19SSUdIVCwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gUmVhZGluZyBwcm9ncmVzc2VzIGZyb20gcmlnaHQgdG8gbGVmdC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX1JFQURJTkdfRElSRUNUSU9OX1JJR0hUX1RPX0xFRlQNCi19Ow0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gRGlyZWN0aW9uIGZvciBob3cgbGluZXMgb2YgdGV4dCBhcmUgcGxhY2VkIHJlbGF0aXZlIHRvIG9uZSBhbm90aGVyLg0KLS8vLyA8L3N1bW1hcnk+DQotZW51bSBEV1JJVEVfRkxPV19ESVJFQ1RJT04NCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRleHQgbGluZXMgYXJlIHBsYWNlZCBmcm9tIHRvcCB0byBib3R0b20uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9GTE9XX0RJUkVDVElPTl9UT1BfVE9fQk9UVE9NDQotfTsNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIEFsaWdubWVudCBvZiBwYXJhZ3JhcGggdGV4dCBhbG9uZyB0aGUgcmVhZGluZyBkaXJlY3Rpb24gYXhpcyByZWxhdGl2ZSB0byANCi0vLy8gdGhlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGxheW91dCBib3guDQotLy8vIDwvc3VtbWFyeT4NCi1lbnVtIERXUklURV9URVhUX0FMSUdOTUVOVA0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUgcGFyYWdyYXBoIHRleHQgaXMgYWxpZ25lZCB0byB0aGUgbGF5b3V0IGJveCdzIGxlYWRpbmcgZWRnZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX1RFWFRfQUxJR05NRU5UX0xFQURJTkcsDQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSBwYXJhZ3JhcGggdGV4dCBpcyBhbGlnbmVkIHRvIHRoZSBsYXlvdXQgYm94J3MgdHJhaWxpbmcgZWRnZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX1RFWFRfQUxJR05NRU5UX1RSQUlMSU5HLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBUaGUgY2VudGVyIG9mIHRoZSBwYXJhZ3JhcGggdGV4dCBpcyBhbGlnbmVkIHRvIHRoZSBjZW50ZXIgb2YgdGhlIGxheW91dCBib3guDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9URVhUX0FMSUdOTUVOVF9DRU5URVINCi19Ow0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gQWxpZ25tZW50IG9mIHBhcmFncmFwaCB0ZXh0IGFsb25nIHRoZSBmbG93IGRpcmVjdGlvbiBheGlzIHJlbGF0aXZlIHRvIHRoZQ0KLS8vLyBmbG93J3MgYmVnaW5uaW5nIGFuZCBlbmRpbmcgZWRnZSBvZiB0aGUgbGF5b3V0IGJveC4NCi0vLy8gPC9zdW1tYXJ5Pg0KLWVudW0gRFdSSVRFX1BBUkFHUkFQSF9BTElHTk1FTlQNCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRoZSBmaXJzdCBsaW5lIG9mIHBhcmFncmFwaCBpcyBhbGlnbmVkIHRvIHRoZSBmbG93J3MgYmVnaW5uaW5nIGVkZ2Ugb2YgdGhlIGxheW91dCBib3guDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9QQVJBR1JBUEhfQUxJR05NRU5UX05FQVIsDQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRoZSBsYXN0IGxpbmUgb2YgcGFyYWdyYXBoIGlzIGFsaWduZWQgdG8gdGhlIGZsb3cncyBlbmRpbmcgZWRnZSBvZiB0aGUgbGF5b3V0IGJveC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX1BBUkFHUkFQSF9BTElHTk1FTlRfRkFSLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBUaGUgY2VudGVyIG9mIHRoZSBwYXJhZ3JhcGggaXMgYWxpZ25lZCB0byB0aGUgY2VudGVyIG9mIHRoZSBmbG93IG9mIHRoZSBsYXlvdXQgYm94Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfUEFSQUdSQVBIX0FMSUdOTUVOVF9DRU5URVINCi19Ow0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gV29yZCB3cmFwcGluZyBpbiBtdWx0aWxpbmUgcGFyYWdyYXBoLg0KLS8vLyA8L3N1bW1hcnk+DQotZW51bSBEV1JJVEVfV09SRF9XUkFQUElORw0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gV29yZHMgYXJlIGJyb2tlbiBhY3Jvc3MgbGluZXMgdG8gYXZvaWQgdGV4dCBvdmVyZmxvd2luZyB0aGUgbGF5b3V0IGJveC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX1dPUkRfV1JBUFBJTkdfV1JBUCwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gV29yZHMgYXJlIGtlcHQgd2l0aGluIHRoZSBzYW1lIGxpbmUgZXZlbiB3aGVuIGl0IG92ZXJmbG93cyB0aGUgbGF5b3V0IGJveC4NCi0gICAgLy8vIFRoaXMgb3B0aW9uIGlzIG9mdGVuIHVzZWQgd2l0aCBzY3JvbGxpbmcgdG8gcmV2ZWFsIG92ZXJmbG93IHRleHQuIA0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfV09SRF9XUkFQUElOR19OT19XUkFQDQotfTsNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIFRoZSBtZXRob2QgdXNlZCBmb3IgbGluZSBzcGFjaW5nIGluIGxheW91dC4NCi0vLy8gPC9zdW1tYXJ5Pg0KLWVudW0gRFdSSVRFX0xJTkVfU1BBQ0lOR19NRVRIT0QNCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIExpbmUgc3BhY2luZyBkZXBlbmRzIHNvbGVseSBvbiB0aGUgY29udGVudCwgZ3Jvd2luZyB0byBhY2NvbW9kYXRlIHRoZSBzaXplIG9mIGZvbnRzIGFuZCBpbmxpbmUgb2JqZWN0cy4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0xJTkVfU1BBQ0lOR19NRVRIT0RfREVGQVVMVCwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gTGluZXMgYXJlIGV4cGxpY2l0bHkgc2V0IHRvIHVuaWZvcm0gc3BhY2luZywgcmVnYXJkbGVzcyBvZiBjb250YWluZWQgZm9udCBzaXplcy4NCi0gICAgLy8vIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBhdm9pZCB0aGUgdW5ldmVuIGFwcGVhcmFuY2UgdGhhdCBjYW4gb2NjdXIgZnJvbSBmb250IGZhbGxiYWNrLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfTElORV9TUEFDSU5HX01FVEhPRF9VTklGT1JNDQotfTsNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIFRleHQgZ3JhbnVsYXJpdHkgdXNlZCB0byB0cmltIHRleHQgb3ZlcmZsb3dpbmcgdGhlIGxheW91dCBib3guDQotLy8vIDwvc3VtbWFyeT4NCi1lbnVtIERXUklURV9UUklNTUlOR19HUkFOVUxBUklUWQ0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gTm8gdHJpbW1pbmcgb2NjdXJzLiBUZXh0IGZsb3dzIGJleW9uZCB0aGUgbGF5b3V0IHdpZHRoLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfVFJJTU1JTkdfR1JBTlVMQVJJVFlfTk9ORSwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVHJpbW1pbmcgb2NjdXJzIGF0IGNoYXJhY3RlciBjbHVzdGVyIGJvdW5kYXJ5Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfVFJJTU1JTkdfR1JBTlVMQVJJVFlfQ0hBUkFDVEVSLA0KLSAgICANCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVHJpbW1pbmcgb2NjdXJzIGF0IHdvcmQgYm91bmRhcnkuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9UUklNTUlOR19HUkFOVUxBUklUWV9XT1JECQ0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUeXBvZ3JhcGhpYyBmZWF0dXJlIG9mIHRleHQgc3VwcGxpZWQgYnkgdGhlIGZvbnQuDQotLy8vIDwvc3VtbWFyeT4NCi1lbnVtIERXUklURV9GT05UX0ZFQVRVUkVfVEFHDQotew0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19BTFRFUk5BVElWRV9GUkFDVElPTlMgICAgICAgICAgICAgICA9IDB4NjM3MjY2NjEsIC8vICdhZnJjJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19QRVRJVEVfQ0FQSVRBTFNfRlJPTV9DQVBJVEFMUyAgICAgICA9IDB4NjM3MDMyNjMsIC8vICdjMnBjJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TTUFMTF9DQVBJVEFMU19GUk9NX0NBUElUQUxTICAgICAgICA9IDB4NjM3MzMyNjMsIC8vICdjMnNjJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19DT05URVhUVUFMX0FMVEVSTkFURVMgICAgICAgICAgICAgICA9IDB4NzQ2YzYxNjMsIC8vICdjYWx0Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19DQVNFX1NFTlNJVElWRV9GT1JNUyAgICAgICAgICAgICAgICA9IDB4NjU3MzYxNjMsIC8vICdjYXNlJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19HTFlQSF9DT01QT1NJVElPTl9ERUNPTVBPU0lUSU9OICAgICA9IDB4NzA2ZDYzNjMsIC8vICdjY21wJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19DT05URVhUVUFMX0xJR0FUVVJFUyAgICAgICAgICAgICAgICA9IDB4Njc2OTZjNjMsIC8vICdjbGlnJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19DQVBJVEFMX1NQQUNJTkcgICAgICAgICAgICAgICAgICAgICA9IDB4NzA3MzcwNjMsIC8vICdjcHNwJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19DT05URVhUVUFMX1NXQVNIICAgICAgICAgICAgICAgICAgICA9IDB4Njg3NzczNjMsIC8vICdjc3doJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19DVVJTSVZFX1BPU0lUSU9OSU5HICAgICAgICAgICAgICAgICA9IDB4NzM3Mjc1NjMsIC8vICdjdXJzJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19ERUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NzQ2YzY2NjQsIC8vICdkZmx0Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19ESVNDUkVUSU9OQVJZX0xJR0FUVVJFUyAgICAgICAgICAgICA9IDB4Njc2OTZjNjQsIC8vICdkbGlnJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19FWFBFUlRfRk9STVMgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NzQ3MDc4NjUsIC8vICdleHB0Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19GUkFDVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NjM2MTcyNjYsIC8vICdmcmFjJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19GVUxMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NjQ2OTc3NjYsIC8vICdmd2lkJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19IQUxGX0ZPUk1TICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NjY2YzYxNjgsIC8vICdoYWxmJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19IQUxBTlRfRk9STVMgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NmU2YzYxNjgsIC8vICdoYWxuJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19BTFRFUk5BVEVfSEFMRl9XSURUSCAgICAgICAgICAgICAgICA9IDB4NzQ2YzYxNjgsIC8vICdoYWx0Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19ISVNUT1JJQ0FMX0ZPUk1TICAgICAgICAgICAgICAgICAgICA9IDB4NzQ3MzY5NjgsIC8vICdoaXN0Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19IT1JJWk9OVEFMX0tBTkFfQUxURVJOQVRFUyAgICAgICAgICA9IDB4NjE2ZTZiNjgsIC8vICdoa25hJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19ISVNUT1JJQ0FMX0xJR0FUVVJFUyAgICAgICAgICAgICAgICA9IDB4Njc2OTZjNjgsIC8vICdobGlnJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19IQUxGX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NjQ2OTc3NjgsIC8vICdod2lkJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19IT0pPX0tBTkpJX0ZPUk1TICAgICAgICAgICAgICAgICAgICA9IDB4NmY2YTZmNjgsIC8vICdob2pvJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19KSVMwNF9GT1JNUyAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzQzMDcwNmEsIC8vICdqcDA0Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19KSVM3OF9GT1JNUyAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzgzNzcwNmEsIC8vICdqcDc4Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19KSVM4M19GT1JNUyAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzMzODcwNmEsIC8vICdqcDgzJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19KSVM5MF9GT1JNUyAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzAzOTcwNmEsIC8vICdqcDkwJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19LRVJOSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NmU3MjY1NmIsIC8vICdrZXJuJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVEFOREFSRF9MSUdBVFVSRVMgICAgICAgICAgICAgICAgICA9IDB4NjE2NzY5NmMsIC8vICdsaWdhJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19MSU5JTkdfRklHVVJFUyAgICAgICAgICAgICAgICAgICAgICA9IDB4NmQ3NTZlNmMsIC8vICdsbnVtJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19MT0NBTElaRURfRk9STVMgICAgICAgICAgICAgICAgICAgICA9IDB4NmM2MzZmNmMsIC8vICdsb2NsJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19NQVJLX1BPU0lUSU9OSU5HICAgICAgICAgICAgICAgICAgICA9IDB4NmI3MjYxNmQsIC8vICdtYXJrJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19NQVRIRU1BVElDQUxfR1JFRUsgICAgICAgICAgICAgICAgICA9IDB4NmI3MjY3NmQsIC8vICdtZ3JrJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19NQVJLX1RPX01BUktfUE9TSVRJT05JTkcgICAgICAgICAgICA9IDB4NmI2ZDZiNmQsIC8vICdta21rJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19BTFRFUk5BVEVfQU5OT1RBVElPTl9GT1JNUyAgICAgICAgICA9IDB4NzQ2YzYxNmUsIC8vICduYWx0Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19OTENfS0FOSklfRk9STVMgICAgICAgICAgICAgICAgICAgICA9IDB4NmI2MzZjNmUsIC8vICdubGNrJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19PTERfU1RZTEVfRklHVVJFUyAgICAgICAgICAgICAgICAgICA9IDB4NmQ3NTZlNmYsIC8vICdvbnVtJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19PUkRJTkFMUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NmU2NDcyNmYsIC8vICdvcmRuJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19QUk9QT1JUSU9OQUxfQUxURVJOQVRFX1dJRFRIICAgICAgICA9IDB4NzQ2YzYxNzAsIC8vICdwYWx0Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19QRVRJVEVfQ0FQSVRBTFMgICAgICAgICAgICAgICAgICAgICA9IDB4NzA2MTYzNzAsIC8vICdwY2FwJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19QUk9QT1JUSU9OQUxfRklHVVJFUyAgICAgICAgICAgICAgICA9IDB4NmQ3NTZlNzAsIC8vICdwbnVtJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19QUk9QT1JUSU9OQUxfV0lEVEhTICAgICAgICAgICAgICAgICA9IDB4NjQ2OTc3NzAsIC8vICdwd2lkJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19RVUFSVEVSX1dJRFRIUyAgICAgICAgICAgICAgICAgICAgICA9IDB4NjQ2OTc3NzEsIC8vICdxd2lkJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19SRVFVSVJFRF9MSUdBVFVSRVMgICAgICAgICAgICAgICAgICA9IDB4Njc2OTZjNzIsIC8vICdybGlnJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19SVUJZX05PVEFUSU9OX0ZPUk1TICAgICAgICAgICAgICAgICA9IDB4Nzk2Mjc1NzIsIC8vICdydWJ5Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfQUxURVJOQVRFUyAgICAgICAgICAgICAgICA9IDB4NzQ2YzYxNzMsIC8vICdzYWx0Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TQ0lFTlRJRklDX0lORkVSSU9SUyAgICAgICAgICAgICAgICA9IDB4NjY2ZTY5NzMsIC8vICdzaW5mJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TTUFMTF9DQVBJVEFMUyAgICAgICAgICAgICAgICAgICAgICA9IDB4NzA2MzZkNzMsIC8vICdzbWNwJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TSU1QTElGSUVEX0ZPUk1TICAgICAgICAgICAgICAgICAgICA9IDB4NmM3MDZkNzMsIC8vICdzbXBsJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzEgICAgICAgICAgICAgICAgICAgICA9IDB4MzEzMDczNzMsIC8vICdzczAxJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzIgICAgICAgICAgICAgICAgICAgICA9IDB4MzIzMDczNzMsIC8vICdzczAyJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzMgICAgICAgICAgICAgICAgICAgICA9IDB4MzMzMDczNzMsIC8vICdzczAzJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzQgICAgICAgICAgICAgICAgICAgICA9IDB4MzQzMDczNzMsIC8vICdzczA0Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzUgICAgICAgICAgICAgICAgICAgICA9IDB4MzUzMDczNzMsIC8vICdzczA1Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzYgICAgICAgICAgICAgICAgICAgICA9IDB4MzYzMDczNzMsIC8vICdzczA2Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzcgICAgICAgICAgICAgICAgICAgICA9IDB4MzczMDczNzMsIC8vICdzczA3Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzggICAgICAgICAgICAgICAgICAgICA9IDB4MzgzMDczNzMsIC8vICdzczA4Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzkgICAgICAgICAgICAgICAgICAgICA9IDB4MzkzMDczNzMsIC8vICdzczA5Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzEwICAgICAgICAgICAgICAgICAgICA9IDB4MzAzMTczNzMsIC8vICdzczEwJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzExICAgICAgICAgICAgICAgICAgICA9IDB4MzEzMTczNzMsIC8vICdzczExJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzEyICAgICAgICAgICAgICAgICAgICA9IDB4MzIzMTczNzMsIC8vICdzczEyJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzEzICAgICAgICAgICAgICAgICAgICA9IDB4MzMzMTczNzMsIC8vICdzczEzJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzE0ICAgICAgICAgICAgICAgICAgICA9IDB4MzQzMTczNzMsIC8vICdzczE0Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzE1ICAgICAgICAgICAgICAgICAgICA9IDB4MzUzMTczNzMsIC8vICdzczE1Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzE2ICAgICAgICAgICAgICAgICAgICA9IDB4MzYzMTczNzMsIC8vICdzczE2Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzE3ICAgICAgICAgICAgICAgICAgICA9IDB4MzczMTczNzMsIC8vICdzczE3Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzE4ICAgICAgICAgICAgICAgICAgICA9IDB4MzgzMTczNzMsIC8vICdzczE4Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzE5ICAgICAgICAgICAgICAgICAgICA9IDB4MzkzMTczNzMsIC8vICdzczE5Jw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzIwICAgICAgICAgICAgICAgICAgICA9IDB4MzAzMjczNzMsIC8vICdzczIwJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVUJTQ1JJUFQgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NzM2Mjc1NzMsIC8vICdzdWJzJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVVBFUlNDUklQVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NzM3MDc1NzMsIC8vICdzdXBzJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TV0FTSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4Njg3Mzc3NzMsIC8vICdzd3NoJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19USVRMSU5HICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NmM3NDY5NzQsIC8vICd0aXRsJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19UUkFESVRJT05BTF9OQU1FX0ZPUk1TICAgICAgICAgICAgICA9IDB4NmQ2MTZlNzQsIC8vICd0bmFtJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19UQUJVTEFSX0ZJR1VSRVMgICAgICAgICAgICAgICAgICAgICA9IDB4NmQ3NTZlNzQsIC8vICd0bnVtJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19UUkFESVRJT05BTF9GT1JNUyAgICAgICAgICAgICAgICAgICA9IDB4NjQ2MTcyNzQsIC8vICd0cmFkJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19USElSRF9XSURUSFMgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NjQ2OTc3NzQsIC8vICd0d2lkJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19VTklDQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NjM2OTZlNzUsIC8vICd1bmljJw0KLSAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TTEFTSEVEX1pFUk8gICAgICAgICAgICAgICAgICAgICAgICA9IDB4NmY3MjY1N2EsIC8vICd6ZXJvJw0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgRFdSSVRFX1RFWFRfUkFOR0Ugc3RydWN0dXJlIHNwZWNpZmllcyBhIHJhbmdlIG9mIHRleHQgcG9zaXRpb25zIHdoZXJlIGZvcm1hdCBpcyBhcHBsaWVkLg0KLS8vLyA8L3N1bW1hcnk+DQotc3RydWN0IERXUklURV9URVhUX1JBTkdFDQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBUaGUgc3RhcnQgdGV4dCBwb3NpdGlvbiBvZiB0aGUgcmFuZ2UuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFVJTlQzMiBzdGFydFBvc2l0aW9uOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBUaGUgbnVtYmVyIG9mIHRleHQgcG9zaXRpb25zIGluIHRoZSByYW5nZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgVUlOVDMyIGxlbmd0aDsNCi19Ow0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gVGhlIERXUklURV9GT05UX0ZFQVRVUkUgc3RydWN0dXJlIHNwZWNpZmllcyBwcm9wZXJ0aWVzIHVzZWQgdG8gaWRlbnRpZnkgYW5kIGV4ZWN1dGUgdHlwb2dyYXBoaWMgZmVhdHVyZSBpbiB0aGUgZm9udC4NCi0vLy8gPC9zdW1tYXJ5Pg0KLXN0cnVjdCBEV1JJVEVfRk9OVF9GRUFUVVJFDQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBUaGUgZmVhdHVyZSBPcGVuVHlwZSBuYW1lIGlkZW50aWZpZXIuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHIG5hbWVUYWc7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEV4ZWN1dGlvbiBwYXJhbWV0ZXIgb2YgdGhlIGZlYXR1cmUuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cmVtYXJrcz4NCi0gICAgLy8vIFRoZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIG5vbi16ZXJvIHRvIGVuYWJsZSB0aGUgZmVhdHVyZS4gIE9uY2UgZW5hYmxlZCwgYSBmZWF0dXJlIGNhbid0IGJlIGRpc2FibGVkIGFnYWluIHdpdGhpbg0KLSAgICAvLy8gdGhlIHNhbWUgcmFuZ2UuICBGZWF0dXJlcyByZXF1aXJpbmcgYSBzZWxlY3RvciB1c2UgdGhpcyB2YWx1ZSB0byBpbmRpY2F0ZSB0aGUgc2VsZWN0b3IgaW5kZXguIA0KLSAgICAvLy8gPC9yZW1hcmtzPg0KLSAgICBVSU5UMzIgcGFyYW1ldGVyOw0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBEZWZpbmVzIGEgc2V0IG9mIHR5cG9ncmFwaGljIGZlYXR1cmVzIHRvIGJlIGFwcGxpZWQgZHVyaW5nIHNoYXBpbmcuDQotLy8vIE5vdGljZSB0aGUgY2hhcmFjdGVyIHJhbmdlIHdoaWNoIHRoaXMgZmVhdHVyZSBsaXN0IHNwYW5zIGlzIHNwZWNpZmllZA0KLS8vLyBhcyBhIHNlcGFyYXRlIHBhcmFtZXRlciB0byBHZXRHbHlwaHMuDQotLy8vIDwvc3VtbWFyeT4NCi1zdHJ1Y3QgRFdSSVRFX1RZUE9HUkFQSElDX0ZFQVRVUkVTDQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBBcnJheSBvZiBmb250IGZlYXR1cmVzLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBfX2ZpZWxkX2Vjb3VudChmZWF0dXJlQ291bnQpIERXUklURV9GT05UX0ZFQVRVUkUqIGZlYXR1cmVzOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBUaGUgbnVtYmVyIG9mIGZlYXR1cmVzLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBVSU5UMzIgZmVhdHVyZUNvdW50Ow0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgRFdSSVRFX1RSSU1NSU5HIHN0cnVjdHVyZSBzcGVjaWZpZXMgdGhlIHRyaW1taW5nIG9wdGlvbiBmb3IgdGV4dCBvdmVyZmxvd2luZyB0aGUgbGF5b3V0IGJveC4NCi0vLy8gPC9zdW1tYXJ5Pg0KLXN0cnVjdCBEV1JJVEVfVFJJTU1JTkcNCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRleHQgZ3JhbnVsYXJpdHkgb2Ygd2hpY2ggdHJpbW1pbmcgYXBwbGllcy4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX1RSSU1NSU5HX0dSQU5VTEFSSVRZIGdyYW51bGFyaXR5Ow0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBDaGFyYWN0ZXIgY29kZSB1c2VkIGFzIHRoZSBkZWxpbWl0ZXIgc2lnbmFsaW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBvcnRpb24gb2YgdGV4dCB0byBiZSBwcmVzZXJ2ZWQsDQotICAgIC8vLyBtb3N0IHVzZWZ1bCBmb3IgcGF0aCBlbGxpcHNpcywgd2hlcmUgdGhlIGRlbGltZXRlciB3b3VsZCBiZSBhIHNsYXNoLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBVSU5UMzIgZGVsaW1pdGVyOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBIb3cgbWFueSBvY2N1cmVuY2VzIG9mIHRoZSBkZWxpbWl0ZXIgdG8gc3RlcCBiYWNrLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBVSU5UMzIgZGVsaW1pdGVyQ291bnQ7DQotfTsNCi0NCi0NCi1pbnRlcmZhY2UgSURXcml0ZVR5cG9ncmFwaHk7DQotaW50ZXJmYWNlIElEV3JpdGVJbmxpbmVPYmplY3Q7DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgZm9ybWF0IG9mIHRleHQgdXNlZCBmb3IgdGV4dCBsYXlvdXQgcHVycG9zZS4NCi0vLy8gPC9zdW1tYXJ5Pg0KLS8vLyA8cmVtYXJrcz4NCi0vLy8gVGhpcyBvYmplY3QgbWF5IG5vdCBiZSB0aHJlYWQtc2FmZSBhbmQgaXQgbWF5IGNhcnJ5IHRoZSBzdGF0ZSBvZiB0ZXh0IGZvcm1hdCBjaGFuZ2UuDQotLy8vIDwvcmVtYXJrcz4NCi1pbnRlcmZhY2UgRFdSSVRFX0RFQ0xBUkVfSU5URVJGQUNFKCI5YzkwNjgxOC0zMWQ3LTRmZDMtYTE1MS03YzVlMjI1ZGI1NWEiKSBJRFdyaXRlVGV4dEZvcm1hdCA6IHB1YmxpYyBJVW5rbm93bg0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gU2V0IGFsaWdubWVudCBvcHRpb24gb2YgdGV4dCByZWxhdGl2ZSB0byBsYXlvdXQgYm94J3MgbGVhZGluZyBhbmQgdHJhaWxpbmcgZWRnZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0QWxpZ25tZW50Ij5UZXh0IGFsaWdubWVudCBvcHRpb248L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChTZXRUZXh0QWxpZ25tZW50KSgNCi0gICAgICAgIERXUklURV9URVhUX0FMSUdOTUVOVCB0ZXh0QWxpZ25tZW50DQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFNldCBhbGlnbm1lbnQgb3B0aW9uIG9mIHBhcmFncmFwaCByZWxhdGl2ZSB0byBsYXlvdXQgYm94J3MgdG9wIGFuZCBib3R0b20gZWRnZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJwYXJhZ3JhcGhBbGlnbm1lbnQiPlBhcmFncmFwaCBhbGlnbm1lbnQgb3B0aW9uPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoU2V0UGFyYWdyYXBoQWxpZ25tZW50KSgNCi0gICAgICAgIERXUklURV9QQVJBR1JBUEhfQUxJR05NRU5UIHBhcmFncmFwaEFsaWdubWVudA0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBTZXQgd29yZCB3cmFwcGluZyBvcHRpb24uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0id29yZFdyYXBwaW5nIj5Xb3JkIHdyYXBwaW5nIG9wdGlvbjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKFNldFdvcmRXcmFwcGluZykoDQotICAgICAgICBEV1JJVEVfV09SRF9XUkFQUElORyB3b3JkV3JhcHBpbmcNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gU2V0IHBhcmFncmFwaCByZWFkaW5nIGRpcmVjdGlvbi4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJyZWFkaW5nRGlyZWN0aW9uIj5UZXh0IHJlYWRpbmcgZGlyZWN0aW9uPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoU2V0UmVhZGluZ0RpcmVjdGlvbikoDQotICAgICAgICBEV1JJVEVfUkVBRElOR19ESVJFQ1RJT04gcmVhZGluZ0RpcmVjdGlvbg0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBTZXQgcGFyYWdyYXBoIGZsb3cgZGlyZWN0aW9uLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZsb3dEaXJlY3Rpb24iPlBhcmFncmFwaCBmbG93IGRpcmVjdGlvbjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKFNldEZsb3dEaXJlY3Rpb24pKA0KLSAgICAgICAgRFdSSVRFX0ZMT1dfRElSRUNUSU9OIGZsb3dEaXJlY3Rpb24NCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gU2V0IGluY3JlbWVudGFsIHRhYiBzdG9wIHBvc2l0aW9uLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImluY3JlbWVudGFsVGFiU3RvcCI+VGhlIGluY3JlbWVudGFsIHRhYiBzdG9wIHZhbHVlPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoU2V0SW5jcmVtZW50YWxUYWJTdG9wKSgNCi0gICAgICAgIEZMT0FUIGluY3JlbWVudGFsVGFiU3RvcA0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBTZXQgdHJpbW1pbmcgb3B0aW9ucyBmb3IgYW55IHRyYWlsaW5nIHRleHQgZXhjZWVkaW5nIHRoZSBsYXlvdXQgd2lkdGgNCi0gICAgLy8vIG9yIGZvciBhbnkgZmFyIHRleHQgZXhjZWVkaW5nIHRoZSBsYXlvdXQgaGVpZ2h0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRyaW1taW5nT3B0aW9ucyI+VGV4dCB0cmltbWluZyBvcHRpb25zLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idHJpbW1pbmdTaWduIj5BcHBsaWNhdGlvbi1kZWZpbmVkIG9taXNzaW9uIHNpZ24uIFRoaXMgcGFyYW1ldGVyIG1heSBiZSBOVUxMIGlmIG5vIHRyaW1taW5nIHNpZ24gaXMgZGVzaXJlZC48L3BhcmFtPg0KLSAgICAvLy8gPHJlbWFya3M+DQotICAgIC8vLyBBbnkgaW5saW5lIG9iamVjdCBjYW4gYmUgdXNlZCBmb3IgdGhlIHRyaW1taW5nIHNpZ24sIGJ1dCBDcmVhdGVFbGxpcHNpc1RyaW1taW5nU2lnbg0KLSAgICAvLy8gcHJvdmlkZXMgYSB0eXBpY2FsIGVsbGlwc2lzIHN5bWJvbC4gVHJpbW1pbmcgaXMgYWxzbyB1c2VmdWwgdmVydGljYWxseSBmb3IgaGlkaW5nDQotICAgIC8vLyBwYXJ0aWFsIGxpbmVzLg0KLSAgICAvLy8gPC9yZW1hcmtzPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChTZXRUcmltbWluZykoDQotICAgICAgICBfX2luIERXUklURV9UUklNTUlORyBjb25zdCogdHJpbW1pbmdPcHRpb25zLA0KLSAgICAgICAgSURXcml0ZUlubGluZU9iamVjdCogdHJpbW1pbmdTaWduDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFNldCBsaW5lIHNwYWNpbmcuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ibGluZVNwYWNpbmdNZXRob2QiPkhvdyB0byBkZXRlcm1pbmUgbGluZSBoZWlnaHQuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJsaW5lU3BhY2luZyI+VGhlIGxpbmUgaGVpZ2h0LCBvciByYXRoZXIgZGlzdGFuY2UgYmV0d2VlbiBvbmUgYmFzZWxpbmUgdG8gYW5vdGhlci48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImJhc2VsaW5lIj5EaXN0YW5jZSBmcm9tIHRvcCBvZiBsaW5lIHRvIGJhc2VsaW5lLiBBIHJlYXNvbmFibGUgcmF0aW8gdG8gbGluZVNwYWNpbmcgaXMgODAlLjwvcGFyYW0+DQotICAgIC8vLyA8cmVtYXJrcz4NCi0gICAgLy8vIEZvciB0aGUgZGVmYXVsdCBtZXRob2QsIHNwYWNpbmcgZGVwZW5kcyBzb2xlbHkgb24gdGhlIGNvbnRlbnQuDQotICAgIC8vLyBGb3IgdW5pZm9ybSBzcGFjaW5nLCB0aGUgZ2l2ZW4gbGluZSBoZWlnaHQgd2lsbCBvdmVycmlkZSB0aGUgY29udGVudC4NCi0gICAgLy8vIDwvcmVtYXJrcz4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoU2V0TGluZVNwYWNpbmcpKA0KLSAgICAgICAgRFdSSVRFX0xJTkVfU1BBQ0lOR19NRVRIT0QgbGluZVNwYWNpbmdNZXRob2QsDQotICAgICAgICBGTE9BVCBsaW5lU3BhY2luZywNCi0gICAgICAgIEZMT0FUIGJhc2VsaW5lDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldCBhbGlnbm1lbnQgb3B0aW9uIG9mIHRleHQgcmVsYXRpdmUgdG8gbGF5b3V0IGJveCdzIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGVkZ2UuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFNURE1FVEhPRF8oRFdSSVRFX1RFWFRfQUxJR05NRU5ULCBHZXRUZXh0QWxpZ25tZW50KSgpIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldCBhbGlnbm1lbnQgb3B0aW9uIG9mIHBhcmFncmFwaCByZWxhdGl2ZSB0byBsYXlvdXQgYm94J3MgdG9wIGFuZCBib3R0b20gZWRnZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgU1RETUVUSE9EXyhEV1JJVEVfUEFSQUdSQVBIX0FMSUdOTUVOVCwgR2V0UGFyYWdyYXBoQWxpZ25tZW50KSgpIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldCB3b3JkIHdyYXBwaW5nIG9wdGlvbi4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgU1RETUVUSE9EXyhEV1JJVEVfV09SRF9XUkFQUElORywgR2V0V29yZFdyYXBwaW5nKSgpIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldCBwYXJhZ3JhcGggcmVhZGluZyBkaXJlY3Rpb24uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFNURE1FVEhPRF8oRFdSSVRFX1JFQURJTkdfRElSRUNUSU9OLCBHZXRSZWFkaW5nRGlyZWN0aW9uKSgpIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldCBwYXJhZ3JhcGggZmxvdyBkaXJlY3Rpb24uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFNURE1FVEhPRF8oRFdSSVRFX0ZMT1dfRElSRUNUSU9OLCBHZXRGbG93RGlyZWN0aW9uKSgpIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldCBpbmNyZW1lbnRhbCB0YWIgc3RvcCBwb3NpdGlvbi4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgU1RETUVUSE9EXyhGTE9BVCwgR2V0SW5jcmVtZW50YWxUYWJTdG9wKSgpIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldCB0cmltbWluZyBvcHRpb25zIGZvciB0ZXh0IG92ZXJmbG93aW5nIHRoZSBsYXlvdXQgd2lkdGguDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idHJpbW1pbmdPcHRpb25zIj5UZXh0IHRyaW1taW5nIG9wdGlvbnMuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0cmltbWluZ1NpZ24iPlRyaW1taW5nIG9taXNzaW9uIHNpZ24uIFRoaXMgcGFyYW1ldGVyIG1heSBiZSBOVUxMLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKEdldFRyaW1taW5nKSgNCi0gICAgICAgIF9fb3V0IERXUklURV9UUklNTUlORyogdHJpbW1pbmdPcHRpb25zLA0KLSAgICAgICAgX19vdXQgSURXcml0ZUlubGluZU9iamVjdCoqIHRyaW1taW5nU2lnbg0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXQgbGluZSBzcGFjaW5nLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImxpbmVTcGFjaW5nTWV0aG9kIj5Ib3cgbGluZSBoZWlnaHQgaXMgZGV0ZXJtaW5lZC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImxpbmVTcGFjaW5nIj5UaGUgbGluZSBoZWlnaHQsIG9yIHJhdGhlciBkaXN0YW5jZSBiZXR3ZWVuIG9uZSBiYXNlbGluZSB0byBhbm90aGVyLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iYmFzZWxpbmUiPkRpc3RhbmNlIGZyb20gdG9wIG9mIGxpbmUgdG8gYmFzZWxpbmUuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoR2V0TGluZVNwYWNpbmcpKA0KLSAgICAgICAgX19vdXQgRFdSSVRFX0xJTkVfU1BBQ0lOR19NRVRIT0QqIGxpbmVTcGFjaW5nTWV0aG9kLA0KLSAgICAgICAgX19vdXQgRkxPQVQqIGxpbmVTcGFjaW5nLA0KLSAgICAgICAgX19vdXQgRkxPQVQqIGJhc2VsaW5lDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldCB0aGUgZm9udCBjb2xsZWN0aW9uLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRDb2xsZWN0aW9uIj5UaGUgY3VycmVudCBmb250IGNvbGxlY3Rpb24uPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoR2V0Rm9udENvbGxlY3Rpb24pKA0KLSAgICAgICAgX19vdXQgSURXcml0ZUZvbnRDb2xsZWN0aW9uKiogZm9udENvbGxlY3Rpb24NCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0IHRoZSBsZW5ndGggb2YgdGhlIGZvbnQgZmFtaWx5IG5hbWUsIGluIGNoYXJhY3RlcnMsIG5vdCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIE5VTEwgY2hhcmFjdGVyLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBTVERNRVRIT0RfKFVJTlQzMiwgR2V0Rm9udEZhbWlseU5hbWVMZW5ndGgpKCkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0IGEgY29weSBvZiB0aGUgZm9udCBmYW1pbHkgbmFtZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RmFtaWx5TmFtZSI+Q2hhcmFjdGVyIGFycmF5IHRoYXQgcmVjZWl2ZXMgdGhlIGN1cnJlbnQgZm9udCBmYW1pbHkgbmFtZTwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ibmFtZVNpemUiPlNpemUgb2YgdGhlIGNoYXJhY3RlciBhcnJheSBpbiBjaGFyYWN0ZXIgY291bnQgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGVkIE5VTEwgY2hhcmFjdGVyLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKEdldEZvbnRGYW1pbHlOYW1lKSgNCi0gICAgICAgIF9fb3V0X2Vjb3VudF96KG5hbWVTaXplKSBXQ0hBUiogZm9udEZhbWlseU5hbWUsDQotICAgICAgICBVSU5UMzIgbmFtZVNpemUNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0IHRoZSBmb250IHdlaWdodC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgU1RETUVUSE9EXyhEV1JJVEVfRk9OVF9XRUlHSFQsIEdldEZvbnRXZWlnaHQpKCkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0IHRoZSBmb250IHN0eWxlLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBTVERNRVRIT0RfKERXUklURV9GT05UX1NUWUxFLCBHZXRGb250U3R5bGUpKCkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0IHRoZSBmb250IHN0cmV0Y2guDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFNURE1FVEhPRF8oRFdSSVRFX0ZPTlRfU1RSRVRDSCwgR2V0Rm9udFN0cmV0Y2gpKCkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0IHRoZSBmb250IGVtIGhlaWdodC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgU1RETUVUSE9EXyhGTE9BVCwgR2V0Rm9udFNpemUpKCkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0IHRoZSBsZW5ndGggb2YgdGhlIGxvY2FsZSBuYW1lLCBpbiBjaGFyYWN0ZXJzLCBub3QgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBOVUxMIGNoYXJhY3Rlci4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgU1RETUVUSE9EXyhVSU5UMzIsIEdldExvY2FsZU5hbWVMZW5ndGgpKCkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0IGEgY29weSBvZiB0aGUgbG9jYWxlIG5hbWUuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ibG9jYWxlTmFtZSI+Q2hhcmFjdGVyIGFycmF5IHRoYXQgcmVjZWl2ZXMgdGhlIGN1cnJlbnQgbG9jYWxlIG5hbWU8L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Im5hbWVTaXplIj5TaXplIG9mIHRoZSBjaGFyYWN0ZXIgYXJyYXkgaW4gY2hhcmFjdGVyIGNvdW50IGluY2x1ZGluZyB0aGUgdGVybWluYXRlZCBOVUxMIGNoYXJhY3Rlci48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRMb2NhbGVOYW1lKSgNCi0gICAgICAgIF9fb3V0X2Vjb3VudF96KG5hbWVTaXplKSBXQ0hBUiogbG9jYWxlTmFtZSwNCi0gICAgICAgIFVJTlQzMiBuYW1lU2l6ZQ0KLSAgICAgICAgKSBQVVJFOw0KLX07DQotDQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBGb250IHR5cG9ncmFwaHkgc2V0dGluZy4NCi0vLy8gPC9zdW1tYXJ5Pg0KLWludGVyZmFjZSBEV1JJVEVfREVDTEFSRV9JTlRFUkZBQ0UoIjU1ZjExMTJiLTFkYzItNGIzYy05NTQxLWY0Njg5NGVkODViNiIpIElEV3JpdGVUeXBvZ3JhcGh5IDogcHVibGljIElVbmtub3duDQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBBZGQgZm9udCBmZWF0dXJlLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGZWF0dXJlIj5UaGUgZm9udCBmZWF0dXJlIHRvIGFkZC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChBZGRGb250RmVhdHVyZSkoDQotICAgICAgICBEV1JJVEVfRk9OVF9GRUFUVVJFIGZvbnRGZWF0dXJlDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldCB0aGUgbnVtYmVyIG9mIGZvbnQgZmVhdHVyZXMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFNURE1FVEhPRF8oVUlOVDMyLCBHZXRGb250RmVhdHVyZUNvdW50KSgpIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldCB0aGUgZm9udCBmZWF0dXJlIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZlYXR1cmVJbmRleCI+VGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGZvbnQgZmVhdHVyZSB0byBnZXQuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RmVhdHVyZSI+VGhlIGZvbnQgZmVhdHVyZS48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRGb250RmVhdHVyZSkoDQotICAgICAgICBVSU5UMzIgZm9udEZlYXR1cmVJbmRleCwNCi0gICAgICAgIF9fb3V0IERXUklURV9GT05UX0ZFQVRVUkUqIGZvbnRGZWF0dXJlDQotICAgICAgICApIFBVUkU7DQotfTsNCi0NCi1lbnVtIERXUklURV9TQ1JJUFRfU0hBUEVTDQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBObyBhZGRpdGlvbmFsIHNoYXBpbmcgcmVxdWlyZW1lbnQuIFRleHQgaXMgc2hhcGVkIHdpdGggdGhlIHdyaXRpbmcgc3lzdGVtIGRlZmF1bHQgYmVoYXZpb3IuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9TQ1JJUFRfU0hBUEVTX0RFRkFVTFQgPSAwLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBUZXh0IHNob3VsZCBsZWF2ZSBubyB2aXN1YWwgb24gZGlzcGxheSBpLmUuIGNvbnRyb2wgb3IgZm9ybWF0IGNvbnRyb2wgY2hhcmFjdGVycy4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX1NDUklQVF9TSEFQRVNfTk9fVklTVUFMID0gMQ0KLX07DQotDQotI2lmZGVmIERFRklORV9FTlVNX0ZMQUdfT1BFUkFUT1JTDQotREVGSU5FX0VOVU1fRkxBR19PUEVSQVRPUlMoRFdSSVRFX1NDUklQVF9TSEFQRVMpOw0KLSNlbmRpZg0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gQXNzb2NpYXRpb24gb2YgdGV4dCBhbmQgaXRzIHdyaXRpbmcgc3lzdGVtIHNjcmlwdCBhcyB3ZWxsIGFzIHNvbWUgZGlzcGxheSBhdHRyaWJ1dGVzLg0KLS8vLyA8L3N1bW1hcnk+DQotc3RydWN0IERXUklURV9TQ1JJUFRfQU5BTFlTSVMNCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFplcm8tYmFzZWQgaW5kZXggcmVwcmVzZW50YXRpb24gb2Ygd3JpdGluZyBzeXN0ZW0gc2NyaXB0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBVSU5UMTYgc2NyaXB0Ow0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBBZGRpdGlvbmFsIHNoYXBpbmcgcmVxdWlyZW1lbnQgb2YgdGV4dC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX1NDUklQVF9TSEFQRVMgc2hhcGVzOw0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBDb25kaXRpb24gYXQgdGhlIGVkZ2VzIG9mIGlubGluZSBvYmplY3Qgb3IgdGV4dCB1c2VkIHRvIGRldGVybWluZQ0KLS8vLyBsaW5lLWJyZWFraW5nIGJlaGF2aW9yLg0KLS8vLyA8L3N1bW1hcnk+DQotZW51bSBEV1JJVEVfQlJFQUtfQ09ORElUSU9ODQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBXaGV0aGVyIGEgYnJlYWsgaXMgYWxsb3dlZCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBjb25kaXRpb24gb2YgdGhlDQotICAgIC8vLyBuZWlnaGJvcmluZyB0ZXh0IHNwYW4gb3IgaW5saW5lIG9iamVjdC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0JSRUFLX0NPTkRJVElPTl9ORVVUUkFMLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBBIGJyZWFrIGlzIGFsbG93ZWQsIHVubGVzcyBvdmVycnVsZWQgYnkgdGhlIGNvbmRpdGlvbiBvZiB0aGUNCi0gICAgLy8vIG5laWdoYm9yaW5nIHRleHQgc3BhbiBvciBpbmxpbmUgb2JqZWN0LCBlaXRoZXIgcHJvaGliaXRlZCBieSBhDQotICAgIC8vLyBNYXkgTm90IG9yIGZvcmNlZCBieSBhIE11c3QuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9CUkVBS19DT05ESVRJT05fQ0FOX0JSRUFLLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBUaGVyZSBzaG91bGQgYmUgbm8gYnJlYWssIHVubGVzcyBvdmVycnVsZWQgYnkgYSBNdXN0IGNvbmRpdGlvbiBmcm9tDQotICAgIC8vLyB0aGUgbmVpZ2hib3JpbmcgdGV4dCBzcGFuIG9yIGlubGluZSBvYmplY3QuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9CUkVBS19DT05ESVRJT05fTUFZX05PVF9CUkVBSywNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVGhlIGJyZWFrIG11c3QgaGFwcGVuLCByZWdhcmRsZXNzIG9mIHRoZSBjb25kaXRpb24gb2YgdGhlIGFkamFjZW50DQotICAgIC8vLyB0ZXh0IHNwYW4gb3IgaW5saW5lIG9iamVjdC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0JSRUFLX0NPTkRJVElPTl9NVVNUX0JSRUFLDQotfTsNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIExpbmUgYnJlYWtwb2ludCBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSBjaGFyYWN0ZXIuDQotLy8vIDwvc3VtbWFyeT4NCi1zdHJ1Y3QgRFdSSVRFX0xJTkVfQlJFQUtQT0lOVA0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gQnJlYWtpbmcgY29uZGl0aW9uIGJlZm9yZSB0aGUgY2hhcmFjdGVyLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBVSU5UOCBicmVha0NvbmRpdGlvbkJlZm9yZSAgOiAyOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBCcmVha2luZyBjb25kaXRpb24gYWZ0ZXIgdGhlIGNoYXJhY3Rlci4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgVUlOVDggYnJlYWtDb25kaXRpb25BZnRlciAgIDogMjsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVGhlIGNoYXJhY3RlciBpcyBzb21lIGZvcm0gb2Ygd2hpdGVzcGFjZSwgd2hpY2ggbWF5IGJlIG1lYW5pbmdmdWwNCi0gICAgLy8vIGZvciBqdXN0aWZpY2F0aW9uLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBVSU5UOCBpc1doaXRlc3BhY2UgICAgICAgICAgOiAxOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBUaGUgY2hhcmFjdGVyIGlzIGEgc29mdCBoeXBoZW4sIG9mdGVuIHVzZWQgdG8gaW5kaWNhdGUgaHlwaGVuYXRpb24NCi0gICAgLy8vIHBvaW50cyBpbnNpZGUgd29yZHMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFVJTlQ4IGlzU29mdEh5cGhlbiAgICAgICAgICA6IDE7DQotDQotICAgIFVJTlQ4IHBhZGRpbmcgICAgICAgICAgICAgICA6IDI7DQotfTsNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIEhvdyB0byBhcHBseSBudW1iZXIgc3Vic3RpdHV0aW9uIG9uIGRpZ2l0cyBhbmQgcmVsYXRlZCBwdW5jdHVhdGlvbi4NCi0vLy8gPC9zdW1tYXJ5Pg0KLWVudW0gRFdSSVRFX05VTUJFUl9TVUJTVElUVVRJT05fTUVUSE9EDQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBTcGVjaWZpZXMgdGhhdCB0aGUgc3Vic3RpdHV0aW9uIG1ldGhvZCBzaG91bGQgYmUgZGV0ZXJtaW5lZCBiYXNlZA0KLSAgICAvLy8gb24gTE9DQUxFX0lESUdJVFNVQlNUSVRVVElPTiB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHRleHQgY3VsdHVyZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX05VTUJFUl9TVUJTVElUVVRJT05fTUVUSE9EX0ZST01fQ1VMVFVSRSwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gSWYgdGhlIGN1bHR1cmUgaXMgQXJhYmljIG9yIEZhcnNpLCBzcGVjaWZpZXMgdGhhdCB0aGUgbnVtYmVyIHNoYXBlDQotICAgIC8vLyBkZXBlbmQgb24gdGhlIGNvbnRleHQuIEVpdGhlciB0cmFkaXRpb25hbCBvciBub21pbmFsIG51bWJlciBzaGFwZQ0KLSAgICAvLy8gYXJlIHVzZWQgZGVwZW5kaW5nIG9uIHRoZSBuZWFyZXN0IHByZWNlZGluZyBzdHJvbmcgY2hhcmFjdGVyIG9yIChpZg0KLSAgICAvLy8gdGhlcmUgaXMgbm9uZSkgdGhlIHJlYWRpbmcgZGlyZWN0aW9uIG9mIHRoZSBwYXJhZ3JhcGguDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9OVU1CRVJfU1VCU1RJVFVUSU9OX01FVEhPRF9DT05URVhUVUFMLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBTcGVjaWZpZXMgdGhhdCBjb2RlIHBvaW50cyAweDMwLTB4MzkgYXJlIGFsd2F5cyByZW5kZXJlZCBhcyBub21pbmFsIG51bWVyYWwgDQotICAgIC8vLyBzaGFwZXMgKG9uZXMgb2YgdGhlIEV1cm9wZWFuIG51bWJlciksIGkuZS4sIG5vIHN1YnN0aXR1dGlvbiBpcyBwZXJmb3JtZWQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9OVU1CRVJfU1VCU1RJVFVUSU9OX01FVEhPRF9OT05FLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBTcGVjaWZpZXMgdGhhdCBudW1iZXIgYXJlIHJlbmRlcmVkIHVzaW5nIHRoZSBuYXRpb25hbCBudW1iZXIgc2hhcGUgDQotICAgIC8vLyBhcyBzcGVjaWZpZWQgYnkgdGhlIExPQ0FMRV9TTkFUSVZFRElHSVRTIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgdGV4dCBjdWx0dXJlLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfTlVNQkVSX1NVQlNUSVRVVElPTl9NRVRIT0RfTkFUSU9OQUwsDQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFNwZWNpZmllcyB0aGF0IG51bWJlciBhcmUgcmVuZGVyZWQgdXNpbmcgdGhlIHRyYWRpdGlvbmFsIHNoYXBlDQotICAgIC8vLyBmb3IgdGhlIHNwZWNpZmllZCBjdWx0dXJlLiBGb3IgbW9zdCBjdWx0dXJlcywgdGhpcyBpcyB0aGUgc2FtZSBhcw0KLSAgICAvLy8gTmF0aXZlTmF0aW9uYWwuIEhvd2V2ZXIsIE5hdGl2ZU5hdGlvbmFsIHJlc3VsdHMgaW4gTGF0aW4gbnVtYmVyDQotICAgIC8vLyBmb3Igc29tZSBBcmFiaWMgY3VsdHVyZXMsIHdoZXJlYXMgdGhpcyB2YWx1ZSByZXN1bHRzIGluIEFyYWJpYw0KLSAgICAvLy8gbnVtYmVyIGZvciBhbGwgQXJhYmljIGN1bHR1cmVzLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfTlVNQkVSX1NVQlNUSVRVVElPTl9NRVRIT0RfVFJBRElUSU9OQUwNCi19Ow0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gSG9sZHMgdGhlIGFwcHJvcHJpYXRlIGRpZ2l0cyBhbmQgbnVtZXJpYyBwdW5jdHVhdGlvbiBmb3IgYSBnaXZlbiBsb2NhbGUuDQotLy8vIDwvc3VtbWFyeT4NCi1pbnRlcmZhY2UgREVDTFNQRUNfVVVJRCgiMTQ4ODVDQzktQkFCMC00ZjkwLUI2RUQtNUMzNjZBMkNEMDNEIikgREVDTFNQRUNfTk9WVEFCTEUgSURXcml0ZU51bWJlclN1YnN0aXR1dGlvbiA6IHB1YmxpYyBJVW5rbm93bg0KLXsNCi19Ow0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gU2hhcGluZyBvdXRwdXQgcHJvcGVydGllcyBwZXIgaW5wdXQgY2hhcmFjdGVyLg0KLS8vLyA8L3N1bW1hcnk+DQotc3RydWN0IERXUklURV9TSEFQSU5HX1RFWFRfUFJPUEVSVElFUw0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVGhpcyBjaGFyYWN0ZXIgY2FuIGJlIHNoYXBlZCBpbmRlcGVuZGVudGx5IGZyb20gdGhlIG90aGVycw0KLSAgICAvLy8gKHVzdWFsbHkgc2V0IGZvciB0aGUgc3BhY2UgY2hhcmFjdGVyKS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgVUlOVDE2ICBpc1NoYXBlZEFsb25lICAgICAgIDogMTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gUmVzZXJ2ZWQgZm9yIHVzZSBieSBzaGFwaW5nIGVuZ2luZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgVUlOVDE2ICByZXNlcnZlZCAgICAgICAgICAgIDogMTU7DQotfTsNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIFNoYXBpbmcgb3V0cHV0IHByb3BlcnRpZXMgcGVyIG91dHB1dCBnbHlwaC4NCi0vLy8gPC9zdW1tYXJ5Pg0KLXN0cnVjdCBEV1JJVEVfU0hBUElOR19HTFlQSF9QUk9QRVJUSUVTDQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBKdXN0aWZpY2F0aW9uIGNsYXNzLCB3aGV0aGVyIHRvIHVzZSBzcGFjaW5nLCBrYXNoaWRhcywgb3INCi0gICAgLy8vIGFub3RoZXIgbWV0aG9kLiBUaGlzIGV4aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkNCi0gICAgLy8vIHdpdGggVW5pc2NyaWJlJ3MgU0NSSVBUX0pVU1RJRlkgZW51bS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgVUlOVDE2ICBqdXN0aWZpY2F0aW9uICAgICAgIDogNDsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gSW5kaWNhdGVzIGdseXBoIGlzIHRoZSBmaXJzdCBvZiBhIGNsdXN0ZXIuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFVJTlQxNiAgaXNDbHVzdGVyU3RhcnQgICAgICA6IDE7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdseXBoIGlzIGEgZGlhY3JpdGljLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBVSU5UMTYgIGlzRGlhY3JpdGljICAgICAgICAgOiAxOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHbHlwaCBoYXMgbm8gd2lkdGgsIGJsYW5rLCBaV0osIFpXTkogZXRjLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBVSU5UMTYgIGlzWmVyb1dpZHRoU3BhY2UgICAgOiAxOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBSZXNlcnZlZCBmb3IgdXNlIGJ5IHNoYXBpbmcgZW5naW5lLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBVSU5UMTYgIHJlc2VydmVkICAgICAgICAgICAgOiA5Ow0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgaW50ZXJmYWNlIGltcGxlbWVudGVkIGJ5IHRoZSB0ZXh0IGFuYWx5emVyJ3MgY2xpZW50IHRvIHByb3ZpZGUgdGV4dCB0bw0KLS8vLyB0aGUgYW5hbHl6ZXIuIEl0IGFsbG93cyB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIHRoZSBsb2dpY2FsIHZpZXcgb2YgdGV4dCBhcw0KLS8vLyBhIGNvbnRpbnVvdXMgc3RyZWFtIG9mIGNoYXJhY3RlcnMgaWRlbnRpZmlhYmxlIGJ5IHVuaXF1ZSB0ZXh0IHBvc2l0aW9ucywNCi0vLy8gYW5kIHRoZSBhY3R1YWwgbWVtb3J5IGxheW91dCBvZiBwb3RlbnRpYWxseSBkaXNjcmV0ZSBibG9ja3Mgb2YgdGV4dCBpbiB0aGUNCi0vLy8gY2xpZW50J3MgYmFja2luZyBzdG9yZS4NCi0vLy8NCi0vLy8gSWYgYW55IG9mIHRoZXNlIGNhbGxiYWNrcyByZXR1cm5zIGFuIGVycm9yLCB0aGUgYW5hbHlzaXMgZnVuY3Rpb25zIHdpbGwNCi0vLy8gc3RvcCBwcmVtYXR1cmVseSBhbmQgcmV0dXJuIGEgY2FsbGJhY2sgZXJyb3IuIFJhdGhlciB0aGFuIHJldHVybiBFX05PVElNUEwsDQotLy8vIGFuIGFwcGxpY2F0aW9uIHNob3VsZCBzdHViIHRoZSBtZXRob2QgYW5kIHJldHVybiBhIGNvbnN0YW50L251bGwgYW5kIFNfT0suDQotLy8vIDwvc3VtbWFyeT4NCi1pbnRlcmZhY2UgREVDTFNQRUNfVVVJRCgiNjg4ZTFhNTgtNTA5NC00N2M4LWFkYzgtZmJjZWE2MGFlOTJiIikgREVDTFNQRUNfTk9WVEFCTEUgSURXcml0ZVRleHRBbmFseXNpc1NvdXJjZSA6IHB1YmxpYyBJVW5rbm93bg0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0IGEgYmxvY2sgb2YgdGV4dCBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIHRleHQgcG9zaXRpb24uDQotICAgIC8vLyBSZXR1cm5pbmcgTlVMTCBpbmRpY2F0ZXMgdGhlIGVuZCBvZiB0ZXh0IC0gdGhlIHBvc2l0aW9uIGlzIGFmdGVyDQotICAgIC8vLyB0aGUgbGFzdCBjaGFyYWN0ZXIuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGl0ZXJhdGl2ZWx5IGZvcg0KLSAgICAvLy8gZWFjaCBjb25zZWN1dGl2ZSBibG9jaywgdHlpbmcgdG9nZXRoZXIgc2V2ZXJhbCBmcmFnbWVudGVkIGJsb2Nrcw0KLSAgICAvLy8gaW4gdGhlIGJhY2tpbmcgc3RvcmUgaW50byBhIHZpcnR1YWwgY29udGlndW91cyBzdHJpbmcuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFBvc2l0aW9uIj5GaXJzdCBwb3NpdGlvbiBvZiB0aGUgcGllY2UgdG8gb2J0YWluLiBBbGwNCi0gICAgLy8vICAgICBwb3NpdGlvbnMgYXJlIGluIFVURjE2IGNvZGUtdW5pdHMsIG5vdCB3aG9sZSBjaGFyYWN0ZXJzLCB3aGljaA0KLSAgICAvLy8gICAgIG1hdHRlcnMgd2hlbiBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMgYXJlIHVzZWQuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0U3RyaW5nIj5BZGRyZXNzIHRoYXQgcmVjZWl2ZXMgYSBwb2ludGVyIHRvIHRoZSB0ZXh0IGJsb2NrDQotICAgIC8vLyAgICAgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRMZW5ndGgiPk51bWJlciBvZiBVVEYxNiB1bml0cyBvZiB0aGUgcmV0cmlldmVkIGNodW5rLg0KLSAgICAvLy8gICAgIFRoZSByZXR1cm5lZCBsZW5ndGggaXMgbm90IHRoZSBsZW5ndGggb2YgdGhlIGJsb2NrLCBidXQgdGhlIGxlbmd0aA0KLSAgICAvLy8gICAgIHJlbWFpbmluZyBpbiB0aGUgYmxvY2ssIGZyb20gdGhlIGdpdmVuIHBvc2l0aW9uIHVudGlsIGl0cyBlbmQuDQotICAgIC8vLyAgICAgU28gcXVlcnlpbmcgZm9yIGEgcG9zaXRpb24gdGhhdCBpcyA3NSBwb3NpdGlvbnMgaW50byBhIDEwMA0KLSAgICAvLy8gICAgIHBvc3RpdGlvbiBibG9jayB3b3VsZCByZXR1cm4gMjUuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPlBvaW50ZXIgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhdCB0aGUgZ2l2ZW4gdGV4dCBwb3NpdGlvbi4NCi0gICAgLy8vIE5VTEwgaW5kaWNhdGVzIG5vIGNodW5rIGF2YWlsYWJsZSBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLCBlaXRoZXINCi0gICAgLy8vIGJlY2F1c2UgdGV4dFBvc2l0aW9uID49IHRoZSBlbnRpcmUgdGV4dCBjb250ZW50IGxlbmd0aCBvciBiZWNhdXNlIHRoZQ0KLSAgICAvLy8gcXVlcmllZCBwb3NpdGlvbiBpcyBub3QgbWFwcGVkIGludG8gdGhlIGFwcCdzIGJhY2tpbmcgc3RvcmUuPC9yZXR1cm5zPg0KLSAgICAvLy8gPHJlbWFya3M+DQotICAgIC8vLyBBbHRob3VnaCBhcHBzIGNhbiBpbXBsZW1lbnQgc3BhcnNlIHRleHR1YWwgY29udGVudCB0aGF0IG9ubHkgbWFwcyBwYXJ0IG9mDQotICAgIC8vLyB0aGUgYmFja2luZyBzdG9yZSwgdGhlIGFwcCBtdXN0IG1hcCBhbnkgdGV4dCB0aGF0IGlzIGluIHRoZSByYW5nZSBwYXNzZWQNCi0gICAgLy8vIHRvIGFueSBhbmFseXNpcyBmdW5jdGlvbnMuDQotICAgIC8vLyA8L3JlbWFya3M+DQotICAgIFNURE1FVEhPRChHZXRUZXh0QXRQb3NpdGlvbikoDQotICAgICAgICBVSU5UMzIgdGV4dFBvc2l0aW9uLA0KLSAgICAgICAgX19vdXQgV0NIQVIgY29uc3QqKiB0ZXh0U3RyaW5nLA0KLSAgICAgICAgX19vdXQgVUlOVDMyKiB0ZXh0TGVuZ3RoDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldCBhIGJsb2NrIG9mIHRleHQgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFBvc2l0aW9uIj5Qb3NpdGlvbiBpbW1lZGlhdGVseSBhZnRlciB0aGUgbGFzdCBwb3NpdGlvbiBvZiB0aGUgY2h1bmsgdG8gb2J0YWluLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFN0cmluZyI+QWRkcmVzcyB0aGF0IHJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgdGV4dCBibG9jaw0KLSAgICAvLy8gICAgIGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0TGVuZ3RoIj5OdW1iZXIgb2YgVVRGMTYgdW5pdHMgb2YgdGhlIHJldHJpZXZlZCBibG9jay4NCi0gICAgLy8vICAgICBUaGUgbGVuZ3RoIHJldHVybmVkIGlzIGZyb20gdGhlIGdpdmVuIHBvc2l0aW9uIHRvIHRoZSBmcm9udCBvZg0KLSAgICAvLy8gICAgIHRoZSBibG9jay48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+UG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGF0ICh0ZXh0UG9zaXRpb24gLSB0ZXh0TGVuZ3RoKS4NCi0gICAgLy8vIE5VTEwgaW5kaWNhdGVzIG5vIGNodW5rIGF2YWlsYWJsZSBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLCBlaXRoZXINCi0gICAgLy8vIGJlY2F1c2UgdGV4dFBvc2l0aW9uID09IDAsdGhlIHRleHRQb3NpdGlvbiA+IHRoZSBlbnRpcmUgdGV4dCBjb250ZW50DQotICAgIC8vLyBsZW5ndGgsIG9yIHRoZSBxdWVyaWVkIHBvc2l0aW9uIGlzIG5vdCBtYXBwZWQgaW50byB0aGUgYXBwJ3MgYmFja2luZw0KLSAgICAvLy8gc3RvcmUuPC9yZXR1cm5zPg0KLSAgICAvLy8gPHJlbWFya3M+DQotICAgIC8vLyBBbHRob3VnaCBhcHBzIGNhbiBpbXBsZW1lbnQgc3BhcnNlIHRleHR1YWwgY29udGVudCB0aGF0IG9ubHkgbWFwcyBwYXJ0IG9mDQotICAgIC8vLyB0aGUgYmFja2luZyBzdG9yZSwgdGhlIGFwcCBtdXN0IG1hcCBhbnkgdGV4dCB0aGF0IGlzIGluIHRoZSByYW5nZSBwYXNzZWQNCi0gICAgLy8vIHRvIGFueSBhbmFseXNpcyBmdW5jdGlvbnMuDQotICAgIC8vLyA8L3JlbWFya3M+DQotICAgIFNURE1FVEhPRChHZXRUZXh0QmVmb3JlUG9zaXRpb24pKA0KLSAgICAgICAgVUlOVDMyIHRleHRQb3NpdGlvbiwNCi0gICAgICAgIF9fb3V0IFdDSEFSIGNvbnN0KiogdGV4dFN0cmluZywNCi0gICAgICAgIF9fb3V0IFVJTlQzMiogdGV4dExlbmd0aA0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXQgcGFyYWdyYXBoIHJlYWRpbmcgZGlyZWN0aW9uLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBTVERNRVRIT0RfKERXUklURV9SRUFESU5HX0RJUkVDVElPTiwgR2V0UGFyYWdyYXBoUmVhZGluZ0RpcmVjdGlvbikoKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXQgbG9jYWxlIG5hbWUgb24gdGhlIHJhbmdlIGFmZmVjdGVkIGJ5IGl0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRQb3NpdGlvbiI+UG9zaXRpb24gdG8gZ2V0IHRoZSBsb2NhbGUgbmFtZSBvZi48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRMZW5ndGgiPlJlY2VpdmVzIHRoZSBsZW5ndGggZnJvbSB0aGUgZ2l2ZW4gcG9zaXRpb24gdXAgdG8gdGhlDQotICAgIC8vLyAgICAgbmV4dCBkaWZmZXJpbmcgbG9jYWxlLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ibG9jYWxlTmFtZSI+QWRkcmVzcyB0aGF0IHJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgbG9jYWxlDQotICAgIC8vLyAgICAgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi48L3BhcmFtPg0KLSAgICAvLy8gPHJlbWFya3M+DQotICAgIC8vLyBUaGUgbG9jYWxlTmFtZSBwb2ludGVyIG11c3QgcmVtYWluIHZhbGlkIHVudGlsIHRoZSBuZXh0IGNhbGwgb3IgdW50aWwNCi0gICAgLy8vIHRoZSBhbmFseXNpcyByZXR1cm5zLg0KLSAgICAvLy8gPC9yZW1hcmtzPg0KLSAgICBTVERNRVRIT0QoR2V0TG9jYWxlTmFtZSkoDQotICAgICAgICBVSU5UMzIgdGV4dFBvc2l0aW9uLA0KLSAgICAgICAgX19vdXQgVUlOVDMyKiB0ZXh0TGVuZ3RoLA0KLSAgICAgICAgX19vdXRfeiBXQ0hBUiBjb25zdCoqIGxvY2FsZU5hbWUNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0IG51bWJlciBzdWJzdGl0dXRpb24gb24gdGhlIHJhbmdlIGFmZmVjdGVkIGJ5IGl0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRQb3NpdGlvbiI+UG9zaXRpb24gdG8gZ2V0IHRoZSBudW1iZXIgc3Vic3RpdHV0aW9uIG9mLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dExlbmd0aCI+UmVjZWl2ZXMgdGhlIGxlbmd0aCBmcm9tIHRoZSBnaXZlbiBwb3NpdGlvbiB1cCB0byB0aGUNCi0gICAgLy8vICAgICBuZXh0IGRpZmZlcmluZyBudW1iZXIgc3Vic3RpdHV0aW9uLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ibnVtYmVyU3Vic3RpdHV0aW9uIj5BZGRyZXNzIHRoYXQgcmVjZWl2ZXMgYSBwb2ludGVyIHRvIHRoZSBudW1iZXIgc3Vic3RpdHV0aW9uDQotICAgIC8vLyAgICAgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi48L3BhcmFtPg0KLSAgICAvLy8gPHJlbWFya3M+DQotICAgIC8vLyBBbnkgaW1wbGVtZW50YXRpb24gc2hvdWxkIHJldHVybiB0aGUgbnVtYmVyIHN1YnN0aXR1dGlvbiB3aXRoIGFuDQotICAgIC8vLyBpbmNyZW1lbnRlZCByZWYgY291bnQsIGFuZCB0aGUgYW5hbHlzaXMgd2lsbCByZWxlYXNlIHdoZW4gZmluaXNoZWQNCi0gICAgLy8vIHdpdGggaXQgKGVpdGhlciBiZWZvcmUgdGhlIG5leHQgY2FsbCBvciBiZWZvcmUgaXQgcmV0dXJucykuIEhvd2V2ZXIsDQotICAgIC8vLyB0aGUgc2luayBjYWxsYmFjayBtYXkgaG9sZCBvbnRvIGl0IGFmdGVyIHRoYXQuDQotICAgIC8vLyA8L3JlbWFya3M+DQotICAgIFNURE1FVEhPRChHZXROdW1iZXJTdWJzdGl0dXRpb24pKA0KLSAgICAgICAgVUlOVDMyIHRleHRQb3NpdGlvbiwNCi0gICAgICAgIF9fb3V0IFVJTlQzMiogdGV4dExlbmd0aCwNCi0gICAgICAgIF9fb3V0IElEV3JpdGVOdW1iZXJTdWJzdGl0dXRpb24qKiBudW1iZXJTdWJzdGl0dXRpb24NCi0gICAgICAgICkgUFVSRTsNCi19Ow0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gVGhlIGludGVyZmFjZSBpbXBsZW1lbnRlZCBieSB0aGUgdGV4dCBhbmFseXplcidzIGNsaWVudCB0byByZWNlaXZlIHRoZQ0KLS8vLyBvdXRwdXQgb2YgYSBnaXZlbiB0ZXh0IGFuYWx5c2lzLiBUaGUgVGV4dCBhbmFseXplciBkaXNyZWdhcmRzIGFueSBjdXJyZW50DQotLy8vIHN0YXRlIG9mIHRoZSBhbmFseXNpcyBzaW5rLCB0aGVyZWZvcmUgYSBTZXQgbWV0aG9kIGNhbGwgb24gYSByYW5nZQ0KLS8vLyBvdmVyd3JpdGVzIHRoZSBwcmV2aW91c2x5IHNldCBhbmFseXNpcyByZXN1bHQgb2YgdGhlIHNhbWUgcmFuZ2UuIA0KLS8vLyA8L3N1bW1hcnk+DQotaW50ZXJmYWNlIERFQ0xTUEVDX1VVSUQoIjU4MTBjZDQ0LTBjYTAtNDcwMS1iM2ZhLWJlYzUxODJhZTRmNiIpIERFQ0xTUEVDX05PVlRBQkxFIElEV3JpdGVUZXh0QW5hbHlzaXNTaW5rIDogcHVibGljIElVbmtub3duDQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBSZXBvcnQgc2NyaXB0IGFuYWx5c2lzIGZvciB0aGUgdGV4dCByYW5nZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0UG9zaXRpb24iPlN0YXJ0aW5nIHBvc2l0aW9uIHRvIHJlcG9ydCBmcm9tLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dExlbmd0aCI+TnVtYmVyIG9mIFVURjE2IHVuaXRzIG9mIHRoZSByZXBvcnRlZCByYW5nZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InNjcmlwdEFuYWx5c2lzIj5TY3JpcHQgYW5hbHlzaXMgb2YgY2hhcmFjdGVycyBpbiByYW5nZS48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBBIHN1Y2Nlc3NmdWwgY29kZSBvciBlcnJvciBjb2RlIHRvIGFib3J0IGFuYWx5c2lzLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoU2V0U2NyaXB0QW5hbHlzaXMpKA0KLSAgICAgICAgVUlOVDMyIHRleHRQb3NpdGlvbiwNCi0gICAgICAgIFVJTlQzMiB0ZXh0TGVuZ3RoLA0KLSAgICAgICAgX19pbiBEV1JJVEVfU0NSSVBUX0FOQUxZU0lTIGNvbnN0KiBzY3JpcHRBbmFseXNpcw0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBSZXBwb3J0IGxpbmUtYnJlYWsgb3Bwb3J0dW5pdGllcyBmb3IgZWFjaCBjaGFyYWN0ZXIsIHN0YXJ0aW5nIGZyb20NCi0gICAgLy8vIHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFBvc2l0aW9uIj5TdGFydGluZyBwb3NpdGlvbiB0byByZXBvcnQgZnJvbS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRMZW5ndGgiPk51bWJlciBvZiBVVEYxNiB1bml0cyBvZiB0aGUgcmVwb3J0ZWQgcmFuZ2UuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJsaW5lQnJlYWtwb2ludHMiPkJyZWFraW5nIGNvbmRpdGlvbnMgZm9yIGVhY2ggY2hhcmFjdGVyLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIEEgc3VjY2Vzc2Z1bCBjb2RlIG9yIGVycm9yIGNvZGUgdG8gYWJvcnQgYW5hbHlzaXMuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChTZXRMaW5lQnJlYWtwb2ludHMpKA0KLSAgICAgICAgVUlOVDMyIHRleHRQb3NpdGlvbiwNCi0gICAgICAgIFVJTlQzMiB0ZXh0TGVuZ3RoLA0KLSAgICAgICAgX19pbl9lY291bnQodGV4dExlbmd0aCkgRFdSSVRFX0xJTkVfQlJFQUtQT0lOVCBjb25zdCogbGluZUJyZWFrcG9pbnRzDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFNldCBiaWRpcmVjdGlvbmFsIGxldmVsIG9uIHRoZSByYW5nZSwgY2FsbGVkIG9uY2UgcGVyIGVhY2gNCi0gICAgLy8vIGxldmVsIHJ1biBjaGFuZ2UgKGVpdGhlciBleHBsaWNpdCBvciByZXNvbHZlZCBpbXBsaWNpdCkuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFBvc2l0aW9uIj5TdGFydGluZyBwb3NpdGlvbiB0byByZXBvcnQgZnJvbS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRMZW5ndGgiPk51bWJlciBvZiBVVEYxNiB1bml0cyBvZiB0aGUgcmVwb3J0ZWQgcmFuZ2UuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJleHBsaWNpdExldmVsIj5FeHBsaWNpdCBsZXZlbCBmcm9tIGVtYmVkZGVkIGNvbnRyb2wgY29kZXMNCi0gICAgLy8vICAgICBSTEUvUkxPL0xSRS9MUk8vUERGLCBkZXRlcm1pbmVkIGJlZm9yZSBhbnkgYWRkaXRpb25hbCBydWxlcy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InJlc29sdmVkTGV2ZWwiPkZpbmFsIGltcGxpY2l0IGxldmVsIGNvbnNpZGVyaW5nIHRoZQ0KLSAgICAvLy8gICAgIGV4cGxpY2l0IGxldmVsIGFuZCBjaGFyYWN0ZXJzJyBuYXR1cmFsIGRpcmVjdGlvbmFsaXR5LCBhZnRlciBhbGwNCi0gICAgLy8vICAgICBCaWRpIHJ1bGVzIGhhdmUgYmVlbiBhcHBsaWVkLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIEEgc3VjY2Vzc2Z1bCBjb2RlIG9yIGVycm9yIGNvZGUgdG8gYWJvcnQgYW5hbHlzaXMuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChTZXRCaWRpTGV2ZWwpKA0KLSAgICAgICAgVUlOVDMyIHRleHRQb3NpdGlvbiwNCi0gICAgICAgIFVJTlQzMiB0ZXh0TGVuZ3RoLA0KLSAgICAgICAgVUlOVDggZXhwbGljaXRMZXZlbCwNCi0gICAgICAgIFVJTlQ4IHJlc29sdmVkTGV2ZWwNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gU2V0IG51bWJlciBzdWJzdGl0dXRpb24gb24gdGhlIHJhbmdlLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRQb3NpdGlvbiI+U3RhcnRpbmcgcG9zaXRpb24gdG8gcmVwb3J0IGZyb20uPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0TGVuZ3RoIj5OdW1iZXIgb2YgVVRGMTYgdW5pdHMgb2YgdGhlIHJlcG9ydGVkIHJhbmdlLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ibnVtYmVyU3Vic3RpdHV0aW9uIj5UaGUgbnVtYmVyIHN1YnN0aXR1dGlvbiBhcHBsaWNhYmxlIHRvDQotICAgIC8vLyAgICAgdGhlIHJldHVybmVkIHJhbmdlIG9mIHRleHQuIFRoZSBzaW5rIGNhbGxiYWNrIG1heSBob2xkIG9udG8gaXQgYnkNCi0gICAgLy8vICAgICBpbmNyZW1lbnRpbmcgaXRzIHJlZiBjb3VudC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBBIHN1Y2Nlc3NmdWwgY29kZSBvciBlcnJvciBjb2RlIHRvIGFib3J0IGFuYWx5c2lzLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICAvLy8gPHJlbWFyaz4NCi0gICAgLy8vIFVubGlrZSBzY3JpcHQgYW5kIGJpZGkgYW5hbHlzaXMsIHdoZXJlIGV2ZXJ5IGNoYXJhY3RlciBwYXNzZWQgdG8gdGhlDQotICAgIC8vLyBhbmFseXplciBoYXMgYSByZXN1bHQsIHRoaXMgd2lsbCBvbmx5IGJlIGNhbGxlZCBmb3IgdGhvc2UgcmFuZ2VzIHdoZXJlDQotICAgIC8vLyBzdWJzdGl0dXRpb24gaXMgYXBwbGljYWJsZS4gRm9yIGFueSBvdGhlciByYW5nZSwgeW91IHdpbGwgc2ltcGx5IG5vdA0KLSAgICAvLy8gYmUgY2FsbGVkLg0KLSAgICAvLy8gPC9yZW1hcms+DQotICAgIFNURE1FVEhPRChTZXROdW1iZXJTdWJzdGl0dXRpb24pKA0KLSAgICAgICAgVUlOVDMyIHRleHRQb3NpdGlvbiwNCi0gICAgICAgIFVJTlQzMiB0ZXh0TGVuZ3RoLA0KLSAgICAgICAgX19ub3RudWxsIElEV3JpdGVOdW1iZXJTdWJzdGl0dXRpb24qIG51bWJlclN1YnN0aXR1dGlvbg0KLSAgICAgICAgKSBQVVJFOw0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBBbmFseXplcyB2YXJpb3VzIHRleHQgcHJvcGVydGllcyBmb3IgY29tcGxleCBzY3JpcHQgcHJvY2Vzc2luZy4NCi0vLy8gPC9zdW1tYXJ5Pg0KLWludGVyZmFjZSBEV1JJVEVfREVDTEFSRV9JTlRFUkZBQ0UoImI3ZTYxNjNlLTdmNDYtNDNiNC04NGIzLWU0ZTYyNDljMzY1ZCIpIElEV3JpdGVUZXh0QW5hbHl6ZXIgOiBwdWJsaWMgSVVua25vd24NCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEFuYWx5emVzIGEgdGV4dCByYW5nZSBmb3Igc2NyaXB0IGJvdW5kYXJpZXMsIHJlYWRpbmcgdGV4dCBhdHRyaWJ1dGVzDQotICAgIC8vLyBmcm9tIHRoZSBzb3VyY2UgYW5kIHJlcG9ydGluZyB0aGUgVW5pY29kZSBzY3JpcHQgSUQgdG8gdGhlIHNpbmsgDQotICAgIC8vLyBjYWxsYmFjayBTZXRTY3JpcHQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iYW5hbHlzaXNTb3VyY2UiPlNvdXJjZSBvYmplY3QgdG8gYW5hbHl6ZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRQb3NpdGlvbiI+U3RhcnRpbmcgcG9zaXRpb24gd2l0aGluIHRoZSBzb3VyY2Ugb2JqZWN0LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dExlbmd0aCI+TGVuZ3RoIHRvIGFuYWx5emUuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJhbmFseXNpc1NpbmsiPkNhbGxiYWNrIG9iamVjdC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChBbmFseXplU2NyaXB0KSgNCi0gICAgICAgIElEV3JpdGVUZXh0QW5hbHlzaXNTb3VyY2UqIGFuYWx5c2lzU291cmNlLA0KLSAgICAgICAgVUlOVDMyIHRleHRQb3NpdGlvbiwNCi0gICAgICAgIFVJTlQzMiB0ZXh0TGVuZ3RoLA0KLSAgICAgICAgSURXcml0ZVRleHRBbmFseXNpc1NpbmsqIGFuYWx5c2lzU2luaw0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBBbmFseXplcyBhIHRleHQgcmFuZ2UgZm9yIHNjcmlwdCBkaXJlY3Rpb25hbGl0eSwgcmVhZGluZyBhdHRyaWJ1dGVzDQotICAgIC8vLyBmcm9tIHRoZSBzb3VyY2UgYW5kIHJlcG9ydGluZyBsZXZlbHMgdG8gdGhlIHNpbmsgY2FsbGJhY2sgU2V0QmlkaUxldmVsLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImFuYWx5c2lzU291cmNlIj5Tb3VyY2Ugb2JqZWN0IHRvIGFuYWx5emUuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0UG9zaXRpb24iPlN0YXJ0aW5nIHBvc2l0aW9uIHdpdGhpbiB0aGUgc291cmNlIG9iamVjdC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRMZW5ndGgiPkxlbmd0aCB0byBhbmFseXplLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iYW5hbHlzaXNTaW5rIj5DYWxsYmFjayBvYmplY3QuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICAvLy8gPHJlbWFya3M+DQotICAgIC8vLyBXaGlsZSB0aGUgZnVuY3Rpb24gY2FuIGhhbmRsZSBtdWx0aXBsZSBwYXJhZ3JhcGhzLCB0aGUgdGV4dCByYW5nZQ0KLSAgICAvLy8gc2hvdWxkIG5vdCBhcmJpdHJhcmlseSBzcGxpdCB0aGUgbWlkZGxlIG9mIHBhcmFncmFwaHMuIE90aGVyd2lzZSB0aGUNCi0gICAgLy8vIHJldHVybmVkIGxldmVscyBtYXkgYmUgd3JvbmcsIHNpbmNlIHRoZSBCaWRpIGFsZ29yaXRobSBpcyBtZWFudCB0bw0KLSAgICAvLy8gYXBwbHkgdG8gdGhlIHBhcmFncmFwaCBhcyBhIHdob2xlLg0KLSAgICAvLy8gPC9yZW1hcmtzPg0KLSAgICAvLy8gPHJlbWFya3M+DQotICAgIC8vLyBFbWJlZGRlZCBjb250cm9sIGNvZGVzIChMUkUvTFJPL1JMRS9STE8vUERGKSBhcmUgdGFrZW4gaW50byBhY2NvdW50Lg0KLSAgICAvLy8gPC9yZW1hcmtzPg0KLSAgICBTVERNRVRIT0QoQW5hbHl6ZUJpZGkpKA0KLSAgICAgICAgSURXcml0ZVRleHRBbmFseXNpc1NvdXJjZSogYW5hbHlzaXNTb3VyY2UsDQotICAgICAgICBVSU5UMzIgdGV4dFBvc2l0aW9uLA0KLSAgICAgICAgVUlOVDMyIHRleHRMZW5ndGgsDQotICAgICAgICBJRFdyaXRlVGV4dEFuYWx5c2lzU2luayogYW5hbHlzaXNTaW5rDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEFuYWx5emVzIGEgdGV4dCByYW5nZSBmb3Igc3BhbnMgd2hlcmUgbnVtYmVyIHN1YnN0aXR1dGlvbiBpcyBhcHBsaWNhYmxlLA0KLSAgICAvLy8gcmVhZGluZyBhdHRyaWJ1dGVzIGZyb20gdGhlIHNvdXJjZSBhbmQgcmVwb3J0aW5nIHN1YnN0aXR1dGFibGUgcmFuZ2VzDQotICAgIC8vLyB0byB0aGUgc2luayBjYWxsYmFjayBTZXROdW1iZXJTdWJzdGl0dXRpb24uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iYW5hbHlzaXNTb3VyY2UiPlNvdXJjZSBvYmplY3QgdG8gYW5hbHl6ZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRQb3NpdGlvbiI+U3RhcnRpbmcgcG9zaXRpb24gd2l0aGluIHRoZSBzb3VyY2Ugb2JqZWN0LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dExlbmd0aCI+TGVuZ3RoIHRvIGFuYWx5emUuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJhbmFseXNpc1NpbmsiPkNhbGxiYWNrIG9iamVjdC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIC8vLyA8cmVtYXJrcz4NCi0gICAgLy8vIFdoaWxlIHRoZSBmdW5jdGlvbiBjYW4gaGFuZGxlIG11bHRpcGxlIHJhbmdlcyBvZiBkaWZmZXJpbmcgbnVtYmVyDQotICAgIC8vLyBzdWJzdGl0dXRpb25zLCB0aGUgdGV4dCByYW5nZXMgc2hvdWxkIG5vdCBhcmJpdHJhcmlseSBzcGxpdCB0aGUNCi0gICAgLy8vIG1pZGRsZSBvZiBudW1iZXJzLiBPdGhlcndpc2UgaXQgd2lsbCB0cmVhdCB0aGUgbnVtYmVycyBzZXBhcmF0ZWx5DQotICAgIC8vLyBhbmQgd2lsbCBub3QgdHJhbnNsYXRlIGFueSBpbnRlcnZlbmluZyBwdW5jdHVhdGlvbi4NCi0gICAgLy8vIDwvcmVtYXJrcz4NCi0gICAgLy8vIDxyZW1hcmtzPg0KLSAgICAvLy8gRW1iZWRkZWQgY29udHJvbCBjb2RlcyAoTFJFL0xSTy9STEUvUkxPL1BERikgYXJlIHRha2VuIGludG8gYWNjb3VudC4NCi0gICAgLy8vIDwvcmVtYXJrcz4NCi0gICAgU1RETUVUSE9EKEFuYWx5emVOdW1iZXJTdWJzdGl0dXRpb24pKA0KLSAgICAgICAgSURXcml0ZVRleHRBbmFseXNpc1NvdXJjZSogYW5hbHlzaXNTb3VyY2UsDQotICAgICAgICBVSU5UMzIgdGV4dFBvc2l0aW9uLA0KLSAgICAgICAgVUlOVDMyIHRleHRMZW5ndGgsDQotICAgICAgICBJRFdyaXRlVGV4dEFuYWx5c2lzU2luayogYW5hbHlzaXNTaW5rDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEFuYWx5emVzIGEgdGV4dCByYW5nZSBmb3IgcG90ZW50aWFsIGJyZWFrcG9pbnQgb3Bwb3J0dW5pdGllcywgcmVhZGluZw0KLSAgICAvLy8gYXR0cmlidXRlcyBmcm9tIHRoZSBzb3VyY2UgYW5kIHJlcG9ydGluZyBicmVha3BvaW50IG9wcG9ydHVuaXRpZXMgdG8NCi0gICAgLy8vIHRoZSBzaW5rIGNhbGxiYWNrIFNldExpbmVCcmVha3BvaW50cy4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJhbmFseXNpc1NvdXJjZSI+U291cmNlIG9iamVjdCB0byBhbmFseXplLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFBvc2l0aW9uIj5TdGFydGluZyBwb3NpdGlvbiB3aXRoaW4gdGhlIHNvdXJjZSBvYmplY3QuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0TGVuZ3RoIj5MZW5ndGggdG8gYW5hbHl6ZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImFuYWx5c2lzU2luayI+Q2FsbGJhY2sgb2JqZWN0LjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgLy8vIDxyZW1hcmtzPg0KLSAgICAvLy8gV2hpbGUgdGhlIGZ1bmN0aW9uIGNhbiBoYW5kbGUgbXVsdGlwbGUgcGFyYWdyYXBocywgdGhlIHRleHQgcmFuZ2UNCi0gICAgLy8vIHNob3VsZCBub3QgYXJiaXRyYXJpbHkgc3BsaXQgdGhlIG1pZGRsZSBvZiBwYXJhZ3JhcGhzLCB1bmxlc3MgdGhlDQotICAgIC8vLyBnaXZlbiB0ZXh0IHNwYW4gaXMgY29uc2lkZXJlZCBhIHdob2xlIHVuaXQuIE90aGVyd2lzZSB0aGUNCi0gICAgLy8vIHJldHVybmVkIHByb3BlcnRpZXMgZm9yIHRoZSBmaXJzdCBhbmQgbGFzdCBjaGFyYWN0ZXJzIHdpbGwNCi0gICAgLy8vIGluYXBwcm9wcmlhdGVseSBhbGxvdyBicmVha3MuDQotICAgIC8vLyA8L3JlbWFya3M+DQotICAgIC8vLyA8cmVtYXJrcz4NCi0gICAgLy8vIFNwZWNpYWwgY2FzZXMgaW5jbHVkZSB0aGUgZmlyc3QsIGxhc3QsIGFuZCBzdXJyb2dhdGUgY2hhcmFjdGVycy4gQW55DQotICAgIC8vLyB0ZXh0IHNwYW4gaXMgdHJlYXRlZCBhcyBpZiBhZGphY2VudCB0byBpbmxpbmUgb2JqZWN0cyBvbiBlaXRoZXIgc2lkZS4NCi0gICAgLy8vIFNvIHRoZSBydWxlcyB3aXRoIGNvbnRpbmdlbnQtYnJlYWsgb3Bwb3J0dW5pdGllcyBhcmUgdXNlZCwgd2hlcmUgdGhlIA0KLSAgICAvLy8gZWRnZSBiZXR3ZWVuIHRleHQgYW5kIGlubGluZSBvYmplY3RzIGlzIGFsd2F5cyB0cmVhdGVkIGFzIGEgcG90ZW50aWFsDQotICAgIC8vLyBicmVhayBvcHBvcnR1bml0eSwgZGVwZW5kZW50IG9uIGFueSBvdmVycmlkaW5nIHJ1bGVzIG9mIHRoZSBhZGphY2VudA0KLSAgICAvLy8gb2JqZWN0cyB0byBwcm9oaWJpdCBvciBmb3JjZSB0aGUgYnJlYWsgKHNlZSBVbmljb2RlIFRSICMxNCkuDQotICAgIC8vLyBTdXJyb2dhdGUgcGFpcnMgbmV2ZXIgYnJlYWsgYmV0d2Vlbi4NCi0gICAgLy8vIDwvcmVtYXJrcz4NCi0gICAgU1RETUVUSE9EKEFuYWx5emVMaW5lQnJlYWtwb2ludHMpKA0KLSAgICAgICAgSURXcml0ZVRleHRBbmFseXNpc1NvdXJjZSogYW5hbHlzaXNTb3VyY2UsDQotICAgICAgICBVSU5UMzIgdGV4dFBvc2l0aW9uLA0KLSAgICAgICAgVUlOVDMyIHRleHRMZW5ndGgsDQotICAgICAgICBJRFdyaXRlVGV4dEFuYWx5c2lzU2luayogYW5hbHlzaXNTaW5rDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFBhcnNlcyB0aGUgaW5wdXQgdGV4dCBzdHJpbmcgYW5kIG1hcHMgaXQgdG8gdGhlIHNldCBvZiBnbHlwaHMgYW5kIGFzc29jaWF0ZWQgZ2x5cGggZGF0YQ0KLSAgICAvLy8gYWNjb3JkaW5nIHRvIHRoZSBmb250IGFuZCB0aGUgd3JpdGluZyBzeXN0ZW0ncyByZW5kZXJpbmcgcnVsZXMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFN0cmluZyI+VGhlIHN0cmluZyB0byBjb252ZXJ0IHRvIGdseXBocy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRMZW5ndGgiPlRoZSBsZW5ndGggb2YgdGV4dFN0cmluZy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGYWNlIj5UaGUgZm9udCBmYWNlIHRvIGdldCBnbHlwaHMgZnJvbS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImlzU2lkZXdheXMiPlNldCB0byB0cnVlIGlmIHRoZSB0ZXh0IGlzIGludGVuZGVkIHRvIGJlDQotICAgIC8vLyBkcmF3biB2ZXJ0aWNhbGx5LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iaXNSaWdodFRvTGVmdCI+U2V0IHRvIFRSVUUgZm9yIHJpZ2h0LXRvLWxlZnQgdGV4dC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InNjcmlwdEFuYWx5c2lzIj5TY3JpcHQgYW5hbHlzaXMgcmVzdWx0IGZyb20gQW5hbHl6ZVNjcmlwdC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImxvY2FsZU5hbWUiPlRoZSBsb2NhbGUgdG8gdXNlIHdoZW4gc2VsZWN0aW5nIGdseXBocy4NCi0gICAgLy8vIGUuZy4gdGhlIHNhbWUgY2hhcmFjdGVyIG1heSBtYXAgdG8gZGlmZmVyZW50IGdseXBocyBmb3IgamEtanAgdnMgemgtY2hzLg0KLSAgICAvLy8gSWYgdGhpcyBpcyBOVUxMIHRoZW4gdGhlIGRlZmF1bHQgbWFwcGluZyBiYXNlZCBvbiB0aGUgc2NyaXB0IGlzIHVzZWQuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJudW1iZXJTdWJzdGl0dXRpb24iPk9wdGlvbmFsIG51bWJlciBzdWJzdGl0dXRpb24gd2hpY2gNCi0gICAgLy8vIHNlbGVjdHMgdGhlIGFwcHJvcHJpYXRlIGdseXBocyBmb3IgZGlnaXRzIGFuZCByZWxhdGVkIG51bWVyaWMgY2hhcmFjdGVycywNCi0gICAgLy8vIGRlcGVuZGluZyBvbiB0aGUgcmVzdWx0cyBvYnRhaW5lZCBmcm9tIEFuYWx5emVOdW1iZXJTdWJzdGl0dXRpb24uIFBhc3NpbmcNCi0gICAgLy8vIG51bGwgaW5kaWNhdGVzIHRoYXQgbm8gc3Vic3RpdHV0aW9uIGlzIG5lZWRlZCBhbmQgdGhhdCB0aGUgZGlnaXRzIHNob3VsZA0KLSAgICAvLy8gcmVjZWl2ZSBub21pbmFsIGdseXBocy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZlYXR1cmVzIj5BbiBhcnJheSBvZiBwb2ludGVycyB0byB0aGUgc2V0cyBvZiB0eXBvZ3JhcGhpYyANCi0gICAgLy8vIGZlYXR1cmVzIHRvIHVzZSBpbiBlYWNoIGZlYXR1cmUgcmFuZ2UuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmZWF0dXJlUmFuZ2VMZW5ndGhzIj5UaGUgbGVuZ3RoIG9mIGVhY2ggZmVhdHVyZSByYW5nZSwgaW4gY2hhcmFjdGVycy4gIA0KLSAgICAvLy8gVGhlIHN1bSBvZiBhbGwgbGVuZ3RocyBzaG91bGQgYmUgZXF1YWwgdG8gdGV4dExlbmd0aC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZlYXR1cmVSYW5nZXMiPlRoZSBudW1iZXIgb2YgZmVhdHVyZSByYW5nZXMuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJtYXhHbHlwaENvdW50Ij5UaGUgbWF4aW11bSBudW1iZXIgb2YgZ2x5cGhzIHRoYXQgY2FuIGJlDQotICAgIC8vLyByZXR1cm5lZC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImNsdXN0ZXJNYXAiPlRoZSBtYXBwaW5nIGZyb20gY2hhcmFjdGVyIHJhbmdlcyB0byBnbHlwaCANCi0gICAgLy8vIHJhbmdlcy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRQcm9wcyI+UGVyLWNoYXJhY3RlciBvdXRwdXQgcHJvcGVydGllcy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImdseXBoSW5kaWNlcyI+T3V0cHV0IGdseXBoIGluZGljZXMuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaFByb3BzIj5QZXItZ2x5cGggb3V0cHV0IHByb3BlcnRpZXMuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJhY3R1YWxHbHlwaENvdW50Ij5UaGUgYWN0dWFsIG51bWJlciBvZiBnbHlwaHMgcmV0dXJuZWQgaWYNCi0gICAgLy8vIHRoZSBjYWxsIHN1Y2NlZWRzLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgLy8vIDxyZW1hcmtzPg0KLSAgICAvLy8gTm90ZSB0aGF0IHRoZSBtYXBwaW5nIGZyb20gY2hhcmFjdGVycyB0byBnbHlwaHMgaXMsIGluIGdlbmVyYWwsIG1hbnktDQotICAgIC8vLyB0by1tYW55LiAgVGhlIHJlY29tbWVuZGVkIGVzdGltYXRlIGZvciB0aGUgcGVyLWdseXBoIG91dHB1dCBidWZmZXJzIGlzDQotICAgIC8vLyAoMyAqIHRleHRMZW5ndGggLyAyICsgMTYpLiAgVGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBzdWZmaWNpZW50Lg0KLSAgICAvLy8NCi0gICAgLy8vIFRoZSB2YWx1ZSBvZiB0aGUgYWN0dWFsR2x5cGhDb3VudCBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCBpZiB0aGUgY2FsbA0KLSAgICAvLy8gc3VjY2VlZHMuICBJbiB0aGUgZXZlbnQgdGhhdCBtYXhHbHlwaENvdW50IGlzIG5vdCBiaWcgZW5vdWdoDQotICAgIC8vLyBFX05PVF9TVUZGSUNJRU5UX0JVRkZFUiwgd2hpY2ggaXMgZXF1aXZhbGVudCB0byBIUkVTVUxUX0ZST01fV0lOMzIoRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUiksDQotICAgIC8vLyB3aWxsIGJlIHJldHVybmVkLiAgVGhlIGFwcGxpY2F0aW9uIHNob3VsZCBhbGxvY2F0ZSBhIGxhcmdlciBidWZmZXIgYW5kIHRyeSBhZ2Fpbi4NCi0gICAgLy8vIDwvcmVtYXJrcz4NCi0gICAgU1RETUVUSE9EKEdldEdseXBocykoDQotICAgICAgICBfX2luX2Vjb3VudCh0ZXh0TGVuZ3RoKSBXQ0hBUiBjb25zdCogdGV4dFN0cmluZywNCi0gICAgICAgIFVJTlQzMiB0ZXh0TGVuZ3RoLA0KLSAgICAgICAgSURXcml0ZUZvbnRGYWNlKiBmb250RmFjZSwNCi0gICAgICAgIEJPT0wgaXNTaWRld2F5cywNCi0gICAgICAgIEJPT0wgaXNSaWdodFRvTGVmdCwNCi0gICAgICAgIF9faW4gRFdSSVRFX1NDUklQVF9BTkFMWVNJUyBjb25zdCogc2NyaXB0QW5hbHlzaXMsDQotICAgICAgICBfX2luX3pfb3B0IFdDSEFSIGNvbnN0KiBsb2NhbGVOYW1lLA0KLSAgICAgICAgX19tYXliZW51bGwgSURXcml0ZU51bWJlclN1YnN0aXR1dGlvbiogbnVtYmVyU3Vic3RpdHV0aW9uLA0KLSAgICAgICAgX19pbl9lY291bnRfb3B0KGZlYXR1cmVSYW5nZXMpIERXUklURV9UWVBPR1JBUEhJQ19GRUFUVVJFUyBjb25zdCoqIGZlYXR1cmVzLA0KLSAgICAgICAgX19pbl9lY291bnRfb3B0KGZlYXR1cmVSYW5nZXMpIFVJTlQzMiBjb25zdCogZmVhdHVyZVJhbmdlTGVuZ3RocywNCi0gICAgICAgIFVJTlQzMiBmZWF0dXJlUmFuZ2VzLA0KLSAgICAgICAgVUlOVDMyIG1heEdseXBoQ291bnQsDQotICAgICAgICBfX291dF9lY291bnQodGV4dExlbmd0aCkgVUlOVDE2KiBjbHVzdGVyTWFwLA0KLSAgICAgICAgX19vdXRfZWNvdW50KHRleHRMZW5ndGgpIERXUklURV9TSEFQSU5HX1RFWFRfUFJPUEVSVElFUyogdGV4dFByb3BzLA0KLSAgICAgICAgX19vdXRfZWNvdW50KG1heEdseXBoQ291bnQpIFVJTlQxNiogZ2x5cGhJbmRpY2VzLA0KLSAgICAgICAgX19vdXRfZWNvdW50KG1heEdseXBoQ291bnQpIERXUklURV9TSEFQSU5HX0dMWVBIX1BST1BFUlRJRVMqIGdseXBoUHJvcHMsDQotICAgICAgICBfX291dCBVSU5UMzIqIGFjdHVhbEdseXBoQ291bnQNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gUGxhY2UgZ2x5cGhzIG91dHB1dCBmcm9tIHRoZSBHZXRHbHlwaHMgbWV0aG9kIGFjY29yZGluZyB0byB0aGUgZm9udCANCi0gICAgLy8vIGFuZCB0aGUgd3JpdGluZyBzeXN0ZW0ncyByZW5kZXJpbmcgcnVsZXMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFN0cmluZyI+VGhlIG9yaWdpbmFsIHN0cmluZyB0aGUgZ2x5cGhzIGNhbWUgZnJvbS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImNsdXN0ZXJNYXAiPlRoZSBtYXBwaW5nIGZyb20gY2hhcmFjdGVyIHJhbmdlcyB0byBnbHlwaCANCi0gICAgLy8vIHJhbmdlcy4gUmV0dXJuZWQgYnkgR2V0R2x5cGhzLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFByb3BzIj5QZXItY2hhcmFjdGVyIHByb3BlcnRpZXMuIFJldHVybmVkIGJ5IA0KLSAgICAvLy8gR2V0R2x5cGhzLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dExlbmd0aCI+VGhlIGxlbmd0aCBvZiB0ZXh0U3RyaW5nLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2x5cGhJbmRpY2VzIj5HbHlwaCBpbmRpY2VzLiBTZWUgR2V0R2x5cGhzPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaFByb3BzIj5QZXItZ2x5cGggcHJvcGVydGllcy4gU2VlIEdldEdseXBoczwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2x5cGhDb3VudCI+VGhlIG51bWJlciBvZiBnbHlwaHMuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RmFjZSI+VGhlIGZvbnQgZmFjZSB0aGUgZ2x5cGhzIGNhbWUgZnJvbS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRFbVNpemUiPkxvZ2ljYWwgZm9udCBzaXplIGluIERJUCdzLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iaXNTaWRld2F5cyI+U2V0IHRvIHRydWUgaWYgdGhlIHRleHQgaXMgaW50ZW5kZWQgdG8gYmUNCi0gICAgLy8vIGRyYXduIHZlcnRpY2FsbHkuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJpc1JpZ2h0VG9MZWZ0Ij5TZXQgdG8gVFJVRSBmb3IgcmlnaHQtdG8tbGVmdCB0ZXh0LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ic2NyaXB0QW5hbHlzaXMiPlNjcmlwdCBhbmFseXNpcyByZXN1bHQgZnJvbSBBbmFseXplU2NyaXB0LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ibG9jYWxlTmFtZSI+VGhlIGxvY2FsZSB0byB1c2Ugd2hlbiBzZWxlY3RpbmcgZ2x5cGhzLg0KLSAgICAvLy8gZS5nLiB0aGUgc2FtZSBjaGFyYWN0ZXIgbWF5IG1hcCB0byBkaWZmZXJlbnQgZ2x5cGhzIGZvciBqYS1qcCB2cyB6aC1jaHMuDQotICAgIC8vLyBJZiB0aGlzIGlzIE5VTEwgdGhlbiB0aGUgZGVmYXVsdCBtYXBwaW5nIGJhc2VkIG9uIHRoZSBzY3JpcHQgaXMgdXNlZC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZlYXR1cmVzIj5BbiBhcnJheSBvZiBwb2ludGVycyB0byB0aGUgc2V0cyBvZiB0eXBvZ3JhcGhpYyANCi0gICAgLy8vIGZlYXR1cmVzIHRvIHVzZSBpbiBlYWNoIGZlYXR1cmUgcmFuZ2UuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmZWF0dXJlUmFuZ2VMZW5ndGhzIj5UaGUgbGVuZ3RoIG9mIGVhY2ggZmVhdHVyZSByYW5nZSwgaW4gY2hhcmFjdGVycy4gIA0KLSAgICAvLy8gVGhlIHN1bSBvZiBhbGwgbGVuZ3RocyBzaG91bGQgYmUgZXF1YWwgdG8gdGV4dExlbmd0aC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZlYXR1cmVSYW5nZXMiPlRoZSBudW1iZXIgb2YgZmVhdHVyZSByYW5nZXMuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaEFkdmFuY2VzIj5UaGUgYWR2YW5jZSB3aWR0aCBvZiBlYWNoIGdseXBoLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2x5cGhPZmZzZXRzIj5UaGUgb2Zmc2V0IG9mIHRoZSBvcmlnaW4gb2YgZWFjaCBnbHlwaC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRHbHlwaFBsYWNlbWVudHMpKA0KLSAgICAgICAgX19pbl9lY291bnQodGV4dExlbmd0aCkgV0NIQVIgY29uc3QqIHRleHRTdHJpbmcsDQotICAgICAgICBfX2luX2Vjb3VudCh0ZXh0TGVuZ3RoKSBVSU5UMTYgY29uc3QqIGNsdXN0ZXJNYXAsDQotICAgICAgICBfX2luX2Vjb3VudCh0ZXh0TGVuZ3RoKSBEV1JJVEVfU0hBUElOR19URVhUX1BST1BFUlRJRVMqIHRleHRQcm9wcywNCi0gICAgICAgIFVJTlQzMiB0ZXh0TGVuZ3RoLA0KLSAgICAgICAgX19pbl9lY291bnQoZ2x5cGhDb3VudCkgVUlOVDE2IGNvbnN0KiBnbHlwaEluZGljZXMsDQotICAgICAgICBfX2luX2Vjb3VudChnbHlwaENvdW50KSBEV1JJVEVfU0hBUElOR19HTFlQSF9QUk9QRVJUSUVTIGNvbnN0KiBnbHlwaFByb3BzLA0KLSAgICAgICAgVUlOVDMyIGdseXBoQ291bnQsDQotICAgICAgICBJRFdyaXRlRm9udEZhY2UgKiBmb250RmFjZSwNCi0gICAgICAgIEZMT0FUIGZvbnRFbVNpemUsDQotICAgICAgICBCT09MIGlzU2lkZXdheXMsDQotICAgICAgICBCT09MIGlzUmlnaHRUb0xlZnQsDQotICAgICAgICBfX2luIERXUklURV9TQ1JJUFRfQU5BTFlTSVMgY29uc3QqIHNjcmlwdEFuYWx5c2lzLA0KLSAgICAgICAgX19pbl96X29wdCBXQ0hBUiBjb25zdCogbG9jYWxlTmFtZSwNCi0gICAgICAgIF9faW5fZWNvdW50X29wdChmZWF0dXJlUmFuZ2VzKSBEV1JJVEVfVFlQT0dSQVBISUNfRkVBVFVSRVMgY29uc3QqKiBmZWF0dXJlcywNCi0gICAgICAgIF9faW5fZWNvdW50X29wdChmZWF0dXJlUmFuZ2VzKSBVSU5UMzIgY29uc3QqIGZlYXR1cmVSYW5nZUxlbmd0aHMsDQotICAgICAgICBVSU5UMzIgZmVhdHVyZVJhbmdlcywNCi0gICAgICAgIF9fb3V0X2Vjb3VudChnbHlwaENvdW50KSBGTE9BVCogZ2x5cGhBZHZhbmNlcywNCi0gICAgICAgIF9fb3V0X2Vjb3VudChnbHlwaENvdW50KSBEV1JJVEVfR0xZUEhfT0ZGU0VUKiBnbHlwaE9mZnNldHMNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gUGxhY2UgZ2x5cGhzIG91dHB1dCBmcm9tIHRoZSBHZXRHbHlwaHMgbWV0aG9kIGFjY29yZGluZyB0byB0aGUgZm9udCANCi0gICAgLy8vIGFuZCB0aGUgd3JpdGluZyBzeXN0ZW0ncyByZW5kZXJpbmcgcnVsZXMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFN0cmluZyI+VGhlIG9yaWdpbmFsIHN0cmluZyB0aGUgZ2x5cGhzIGNhbWUgZnJvbS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImNsdXN0ZXJNYXAiPlRoZSBtYXBwaW5nIGZyb20gY2hhcmFjdGVyIHJhbmdlcyB0byBnbHlwaCANCi0gICAgLy8vIHJhbmdlcy4gUmV0dXJuZWQgYnkgR2V0R2x5cGhzLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFByb3BzIj5QZXItY2hhcmFjdGVyIHByb3BlcnRpZXMuIFJldHVybmVkIGJ5IA0KLSAgICAvLy8gR2V0R2x5cGhzLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dExlbmd0aCI+VGhlIGxlbmd0aCBvZiB0ZXh0U3RyaW5nLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2x5cGhJbmRpY2VzIj5HbHlwaCBpbmRpY2VzLiBTZWUgR2V0R2x5cGhzPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaFByb3BzIj5QZXItZ2x5cGggcHJvcGVydGllcy4gU2VlIEdldEdseXBoczwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2x5cGhDb3VudCI+VGhlIG51bWJlciBvZiBnbHlwaHMuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RmFjZSI+VGhlIGZvbnQgZmFjZSB0aGUgZ2x5cGhzIGNhbWUgZnJvbS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRFbVNpemUiPkxvZ2ljYWwgZm9udCBzaXplIGluIERJUCdzLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0icGl4ZWxzUGVyRGlwIj5OdW1iZXIgb2YgcGh5c2ljYWwgcGl4ZWxzIHBlciBESVAuIEZvciBleGFtcGxlLCBpZiB0aGUgRFBJIG9mIHRoZSByZW5kZXJpbmcgc3VyZmFjZSBpcyA5NiB0aGlzIA0KLSAgICAvLy8gdmFsdWUgaXMgMS4wZi4gSWYgdGhlIERQSSBpcyAxMjAsIHRoaXMgdmFsdWUgaXMgMTIwLjBmLzk2LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idHJhbnNmb3JtIj5PcHRpb25hbCB0cmFuc2Zvcm0gYXBwbGllZCB0byB0aGUgZ2x5cGhzIGFuZCB0aGVpciBwb3NpdGlvbnMuIFRoaXMgdHJhbnNmb3JtIGlzIGFwcGxpZWQgYWZ0ZXIgdGhlDQotICAgIC8vLyBzY2FsaW5nIHNwZWNpZmllZCBieSB0aGUgZm9udCBzaXplIGFuZCBwaXhlbHNQZXJEaXAuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ1c2VHZGlOYXR1cmFsIj4NCi0gICAgLy8vIFdoZW4gc2V0IHRvIEZBTFNFLCB0aGUgbWV0cmljcyBhcmUgdGhlIHNhbWUgYXMgdGhlIG1ldHJpY3Mgb2YgR0RJIGFsaWFzZWQgdGV4dC4NCi0gICAgLy8vIFdoZW4gc2V0IHRvIFRSVUUsIHRoZSBtZXRyaWNzIGFyZSB0aGUgc2FtZSBhcyB0aGUgbWV0cmljcyBvZiB0ZXh0IG1lYXN1cmVkIGJ5IEdESSB1c2luZyBhIGZvbnQNCi0gICAgLy8vIGNyZWF0ZWQgd2l0aCBDTEVBUlRZUEVfTkFUVVJBTF9RVUFMSVRZLg0KLSAgICAvLy8gPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJpc1NpZGV3YXlzIj5TZXQgdG8gdHJ1ZSBpZiB0aGUgdGV4dCBpcyBpbnRlbmRlZCB0byBiZQ0KLSAgICAvLy8gZHJhd24gdmVydGljYWxseS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImlzUmlnaHRUb0xlZnQiPlNldCB0byBUUlVFIGZvciByaWdodC10by1sZWZ0IHRleHQuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJzY3JpcHRBbmFseXNpcyI+U2NyaXB0IGFuYWx5c2lzIHJlc3VsdCBmcm9tIEFuYWx5emVTY3JpcHQuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJsb2NhbGVOYW1lIj5UaGUgbG9jYWxlIHRvIHVzZSB3aGVuIHNlbGVjdGluZyBnbHlwaHMuDQotICAgIC8vLyBlLmcuIHRoZSBzYW1lIGNoYXJhY3RlciBtYXkgbWFwIHRvIGRpZmZlcmVudCBnbHlwaHMgZm9yIGphLWpwIHZzIHpoLWNocy4NCi0gICAgLy8vIElmIHRoaXMgaXMgTlVMTCB0aGVuIHRoZSBkZWZhdWx0IG1hcHBpbmcgYmFzZWQgb24gdGhlIHNjcmlwdCBpcyB1c2VkLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZmVhdHVyZXMiPkFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZSBzZXRzIG9mIHR5cG9ncmFwaGljIA0KLSAgICAvLy8gZmVhdHVyZXMgdG8gdXNlIGluIGVhY2ggZmVhdHVyZSByYW5nZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZlYXR1cmVSYW5nZUxlbmd0aHMiPlRoZSBsZW5ndGggb2YgZWFjaCBmZWF0dXJlIHJhbmdlLCBpbiBjaGFyYWN0ZXJzLiAgDQotICAgIC8vLyBUaGUgc3VtIG9mIGFsbCBsZW5ndGhzIHNob3VsZCBiZSBlcXVhbCB0byB0ZXh0TGVuZ3RoLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZmVhdHVyZVJhbmdlcyI+VGhlIG51bWJlciBvZiBmZWF0dXJlIHJhbmdlcy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImdseXBoQWR2YW5jZXMiPlRoZSBhZHZhbmNlIHdpZHRoIG9mIGVhY2ggZ2x5cGguPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaE9mZnNldHMiPlRoZSBvZmZzZXQgb2YgdGhlIG9yaWdpbiBvZiBlYWNoIGdseXBoLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKEdldEdkaUNvbXBhdGlibGVHbHlwaFBsYWNlbWVudHMpKA0KLSAgICAgICAgX19pbl9lY291bnQodGV4dExlbmd0aCkgV0NIQVIgY29uc3QqIHRleHRTdHJpbmcsDQotICAgICAgICBfX2luX2Vjb3VudCh0ZXh0TGVuZ3RoKSBVSU5UMTYgY29uc3QqIGNsdXN0ZXJNYXAsDQotICAgICAgICBfX2luX2Vjb3VudCh0ZXh0TGVuZ3RoKSBEV1JJVEVfU0hBUElOR19URVhUX1BST1BFUlRJRVMqIHRleHRQcm9wcywNCi0gICAgICAgIFVJTlQzMiB0ZXh0TGVuZ3RoLA0KLSAgICAgICAgX19pbl9lY291bnQoZ2x5cGhDb3VudCkgVUlOVDE2IGNvbnN0KiBnbHlwaEluZGljZXMsDQotICAgICAgICBfX2luX2Vjb3VudChnbHlwaENvdW50KSBEV1JJVEVfU0hBUElOR19HTFlQSF9QUk9QRVJUSUVTIGNvbnN0KiBnbHlwaFByb3BzLA0KLSAgICAgICAgVUlOVDMyIGdseXBoQ291bnQsDQotICAgICAgICBJRFdyaXRlRm9udEZhY2UgKiBmb250RmFjZSwNCi0gICAgICAgIEZMT0FUIGZvbnRFbVNpemUsDQotICAgICAgICBGTE9BVCBwaXhlbHNQZXJEaXAsDQotICAgICAgICBfX2luX29wdCBEV1JJVEVfTUFUUklYIGNvbnN0KiB0cmFuc2Zvcm0sDQotICAgICAgICBCT09MIHVzZUdkaU5hdHVyYWwsDQotICAgICAgICBCT09MIGlzU2lkZXdheXMsDQotICAgICAgICBCT09MIGlzUmlnaHRUb0xlZnQsDQotICAgICAgICBfX2luIERXUklURV9TQ1JJUFRfQU5BTFlTSVMgY29uc3QqIHNjcmlwdEFuYWx5c2lzLA0KLSAgICAgICAgX19pbl96X29wdCBXQ0hBUiBjb25zdCogbG9jYWxlTmFtZSwNCi0gICAgICAgIF9faW5fZWNvdW50X29wdChmZWF0dXJlUmFuZ2VzKSBEV1JJVEVfVFlQT0dSQVBISUNfRkVBVFVSRVMgY29uc3QqKiBmZWF0dXJlcywNCi0gICAgICAgIF9faW5fZWNvdW50X29wdChmZWF0dXJlUmFuZ2VzKSBVSU5UMzIgY29uc3QqIGZlYXR1cmVSYW5nZUxlbmd0aHMsDQotICAgICAgICBVSU5UMzIgZmVhdHVyZVJhbmdlcywNCi0gICAgICAgIF9fb3V0X2Vjb3VudChnbHlwaENvdW50KSBGTE9BVCogZ2x5cGhBZHZhbmNlcywNCi0gICAgICAgIF9fb3V0X2Vjb3VudChnbHlwaENvdW50KSBEV1JJVEVfR0xZUEhfT0ZGU0VUKiBnbHlwaE9mZnNldHMNCi0gICAgICAgICkgUFVSRTsNCi19Ow0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gVGhlIERXUklURV9HTFlQSF9SVU4gc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgYnkgcmVuZGVyZXJzDQotLy8vIHRvIGRyYXcgZ2x5cGggcnVucy4gQWxsIGNvb3JkaW5hdGVzIGFyZSBpbiBkZXZpY2UgaW5kZXBlbmRlbnQgcGl4ZWxzIChESVBzKS4NCi0vLy8gPC9zdW1tYXJ5Pg0KLXN0cnVjdCBEV1JJVEVfR0xZUEhfUlVODQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBUaGUgcGh5c2ljYWwgZm9udCBmYWNlIHRvIGRyYXcgd2l0aC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgX19ub3RudWxsIElEV3JpdGVGb250RmFjZSogZm9udEZhY2U7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIExvZ2ljYWwgc2l6ZSBvZiB0aGUgZm9udCBpbiBESVBzLCBub3QgcG9pbnRzIChlcXVhbHMgMS85NiBpbmNoKS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRkxPQVQgZm9udEVtU2l6ZTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVGhlIG51bWJlciBvZiBnbHlwaHMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFVJTlQzMiBnbHlwaENvdW50Ow0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBUaGUgaW5kaWNlcyB0byByZW5kZXIuDQotICAgIC8vLyA8L3N1bW1hcnk+ICAgIA0KLSAgICBfX2ZpZWxkX2Vjb3VudChnbHlwaENvdW50KSBVSU5UMTYgY29uc3QqIGdseXBoSW5kaWNlczsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2x5cGggYWR2YW5jZSB3aWR0aHMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIF9fZmllbGRfZWNvdW50X29wdChnbHlwaENvdW50KSBGTE9BVCBjb25zdCogZ2x5cGhBZHZhbmNlczsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2x5cGggb2Zmc2V0cy4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgX19maWVsZF9lY291bnRfb3B0KGdseXBoQ291bnQpIERXUklURV9HTFlQSF9PRkZTRVQgY29uc3QqIGdseXBoT2Zmc2V0czsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gSWYgdHJ1ZSwgc3BlY2lmaWVzIHRoYXQgZ2x5cGhzIGFyZSByb3RhdGVkIDkwIGRlZ3JlZXMgdG8gdGhlIGxlZnQgYW5kDQotICAgIC8vLyB2ZXJ0aWNhbCBtZXRyaWNzIGFyZSB1c2VkLiBWZXJ0aWNhbCB3cml0aW5nIGlzIGFjaGlldmVkIGJ5IHNwZWNpZnlpbmcNCi0gICAgLy8vIGlzU2lkZXdheXMgPSB0cnVlIGFuZCByb3RhdGluZyB0aGUgZW50aXJlIHJ1biA5MCBkZWdyZWVzIHRvIHRoZSByaWdodA0KLSAgICAvLy8gdmlhIGEgcm90YXRlIHRyYW5zZm9ybS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgQk9PTCBpc1NpZGV3YXlzOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBUaGUgaW1wbGljaXQgcmVzb2x2ZWQgYmlkaSBsZXZlbCBvZiB0aGUgcnVuLiBPZGQgbGV2ZWxzIGluZGljYXRlDQotICAgIC8vLyByaWdodC10by1sZWZ0IGxhbmd1YWdlcyBsaWtlIEhlYnJldyBhbmQgQXJhYmljLCB3aGlsZSBldmVuIGxldmVscw0KLSAgICAvLy8gaW5kaWNhdGUgbGVmdC10by1yaWdodCBsYW5ndWFnZXMgbGlrZSBFbmdsaXNoIGFuZCBKYXBhbmVzZSAod2hlbg0KLSAgICAvLy8gd3JpdHRlbiBob3Jpem9udGFsbHkpLiBGb3IgcmlnaHQtdG8tbGVmdCBsYW5ndWFnZXMsIHRoZSB0ZXh0IG9yaWdpbg0KLSAgICAvLy8gaXMgb24gdGhlIHJpZ2h0LCBhbmQgdGV4dCBzaG91bGQgYmUgZHJhd24gdG8gdGhlIGxlZnQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFVJTlQzMiBiaWRpTGV2ZWw7DQotfTsNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIFRoZSBEV1JJVEVfR0xZUEhfUlVOX0RFU0NSSVBUSU9OIHN0cnVjdHVyZSBjb250YWlucyBhZGRpdGlvbmFsIHByb3BlcnRpZXMNCi0vLy8gcmVsYXRlZCB0byB0aG9zZSBpbiBEV1JJVEVfR0xZUEhfUlVOLg0KLS8vLyA8L3N1bW1hcnk+DQotc3RydWN0IERXUklURV9HTFlQSF9SVU5fREVTQ1JJUFRJT04NCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRoZSBsb2NhbGUgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBydW4uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIF9fbnVsbHRlcm1pbmF0ZWQgV0NIQVIgY29uc3QqIGxvY2FsZU5hbWU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRoZSB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2x5cGhzLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBfX2ZpZWxkX2Vjb3VudChzdHJpbmdMZW5ndGgpIFdDSEFSIGNvbnN0KiBzdHJpbmc7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyAoVVRGMTYgY29kZS11bml0cykuDQotICAgIC8vLyBOb3RlIHRoYXQgdGhpcyBtYXkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIG51bWJlciBvZiBnbHlwaHMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFVJTlQzMiBzdHJpbmdMZW5ndGg7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEFuIGFycmF5IG9mIGluZGljZXMgdG8gdGhlIGdseXBoIGluZGljZXMgYXJyYXksIG9mIHRoZSBmaXJzdCBnbHlwaHMgb2YNCi0gICAgLy8vIGFsbCB0aGUgZ2x5cGggY2x1c3RlcnMgb2YgdGhlIGdseXBocyB0byByZW5kZXIuIA0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBfX2ZpZWxkX2Vjb3VudChzdHJpbmdMZW5ndGgpIFVJTlQxNiBjb25zdCogY2x1c3Rlck1hcDsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gQ29ycmVzcG9uZGluZyB0ZXh0IHBvc2l0aW9uIGluIHRoZSBvcmlnaW5hbCBzdHJpbmcNCi0gICAgLy8vIHRoaXMgZ2x5cGggcnVuIGNhbWUgZnJvbS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgVUlOVDMyIHRleHRQb3NpdGlvbjsNCi19Ow0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gVGhlIERXUklURV9VTkRFUkxJTkUgc3RydWN0dXJlIGNvbnRhaW5zIGFib3V0IHRoZSBzaXplIGFuZCBwbGFjZW1lbnQgb2YgDQotLy8vIHVuZGVybGluZXMuIEFsbCBjb29yZGluYXRlcyBhcmUgaW4gZGV2aWNlIGluZGVwZW5kZW50IHBpeGVscyAoRElQcykuDQotLy8vIDwvc3VtbWFyeT4NCi1zdHJ1Y3QgRFdSSVRFX1VOREVSTElORQ0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gV2lkdGggb2YgdGhlIHVuZGVybGluZSwgbWVhc3VyZWQgcGFyYWxsZWwgdG8gdGhlIGJhc2VsaW5lLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBGTE9BVCB3aWR0aDsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVGhpY2tuZXNzIG9mIHRoZSB1bmRlcmxpbmUsIG1lYXN1cmVkIHBlcnBlbmRpY3VsYXIgdG8gdGhlDQotICAgIC8vLyBiYXNlbGluZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRkxPQVQgdGhpY2tuZXNzOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBPZmZzZXQgb2YgdGhlIHVuZGVybGluZSBmcm9tIHRoZSBiYXNlbGluZS4NCi0gICAgLy8vIEEgcG9zaXRpdmUgb2Zmc2V0IHJlcHJlc2VudHMgYSBwb3NpdGlvbiBiZWxvdyB0aGUgYmFzZWxpbmUgYW5kDQotICAgIC8vLyBhIG5lZ2F0aXZlIG9mZnNldCBpcyBhYm92ZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRkxPQVQgb2Zmc2V0Ow0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBIZWlnaHQgb2YgdGhlIHRhbGxlc3QgcnVuIHdoZXJlIHRoZSB1bmRlcmxpbmUgYXBwbGllcy4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRkxPQVQgcnVuSGVpZ2h0Ow0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBSZWFkaW5nIGRpcmVjdGlvbiBvZiB0aGUgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlIHVuZGVybGluZS4gIFRoaXMgDQotICAgIC8vLyB2YWx1ZSBpcyB1c2VkIHRvIGludGVycHJldCB3aGV0aGVyIHRoZSB3aWR0aCB2YWx1ZSBydW5zIGhvcml6b250YWxseSANCi0gICAgLy8vIG9yIHZlcnRpY2FsbHkuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9SRUFESU5HX0RJUkVDVElPTiByZWFkaW5nRGlyZWN0aW9uOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBGbG93IGRpcmVjdGlvbiBvZiB0aGUgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlIHVuZGVybGluZS4gIFRoaXMgdmFsdWUNCi0gICAgLy8vIGlzIHVzZWQgdG8gaW50ZXJwcmV0IHdoZXRoZXIgdGhlIHRoaWNrbmVzcyB2YWx1ZSBhZHZhbmNlcyB0b3AgdG8gDQotICAgIC8vLyBib3R0b20sIGxlZnQgdG8gcmlnaHQsIG9yIHJpZ2h0IHRvIGxlZnQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9GTE9XX0RJUkVDVElPTiBmbG93RGlyZWN0aW9uOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBMb2NhbGUgb2YgdGhlIHRleHQgdGhlIHVuZGVybGluZSBpcyBiZWluZyBkcmF3biB1bmRlci4gQ2FuIGJlDQotICAgIC8vLyBwZXJ0aW5lbnQgd2hlcmUgdGhlIGxvY2FsZSBhZmZlY3RzIGhvdyB0aGUgdW5kZXJsaW5lIGlzIGRyYXduLg0KLSAgICAvLy8gRm9yIGV4YW1wbGUsIGluIHZlcnRpY2FsIHRleHQsIHRoZSB1bmRlcmxpbmUgYmVsb25ncyBvbiB0aGUNCi0gICAgLy8vIGxlZnQgZm9yIENoaW5lc2UgYnV0IG9uIHRoZSByaWdodCBmb3IgSmFwYW5lc2UuDQotICAgIC8vLyBUaGlzIGNob2ljZSBpcyBjb21wbGV0ZWx5IGxlZnQgdXAgdG8gaGlnaGVyIGxldmVscy4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgX19udWxsdGVybWluYXRlZCBXQ0hBUiBjb25zdCogbG9jYWxlTmFtZTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVGhlIG1lYXN1cmluZyBtb2RlIGNhbiBiZSB1c2VmdWwgdG8gdGhlIHJlbmRlcmVyIHRvIGRldGVybWluZSBob3cNCi0gICAgLy8vIHVuZGVybGluZXMgYXJlIHJlbmRlcmVkLCBlLmcuIHJvdW5kaW5nIHRoZSB0aGlja25lc3MgdG8gYSB3aG9sZSBwaXhlbA0KLSAgICAvLy8gaW4gR0RJLWNvbXBhdGlibGUgbW9kZXMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9NRUFTVVJJTkdfTU9ERSBtZWFzdXJpbmdNb2RlOw0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgRFdSSVRFX1NUUklLRVRIUk9VR0ggc3RydWN0dXJlIGNvbnRhaW5zIGFib3V0IHRoZSBzaXplIGFuZCBwbGFjZW1lbnQgb2YgDQotLy8vIHN0cmlja3Rocm91Z2hzLiBBbGwgY29vcmRpbmF0ZXMgYXJlIGluIGRldmljZSBpbmRlcGVuZGVudCBwaXhlbHMgKERJUHMpLg0KLS8vLyA8L3N1bW1hcnk+DQotc3RydWN0IERXUklURV9TVFJJS0VUSFJPVUdIDQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBXaWR0aCBvZiB0aGUgc3RyaWtldGhyb3VnaCwgbWVhc3VyZWQgcGFyYWxsZWwgdG8gdGhlIGJhc2VsaW5lLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBGTE9BVCB3aWR0aDsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVGhpY2tuZXNzIG9mIHRoZSBzdHJpa2V0aHJvdWdoLCBtZWFzdXJlZCBwZXJwZW5kaWN1bGFyIHRvIHRoZQ0KLSAgICAvLy8gYmFzZWxpbmUuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIEZMT0FUIHRoaWNrbmVzczsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gT2Zmc2V0IG9mIHRoZSBzdGlrZXRocm91Z2ggZnJvbSB0aGUgYmFzZWxpbmUuDQotICAgIC8vLyBBIHBvc2l0aXZlIG9mZnNldCByZXByZXNlbnRzIGEgcG9zaXRpb24gYmVsb3cgdGhlIGJhc2VsaW5lIGFuZA0KLSAgICAvLy8gYSBuZWdhdGl2ZSBvZmZzZXQgaXMgYWJvdmUuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIEZMT0FUIG9mZnNldDsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gUmVhZGluZyBkaXJlY3Rpb24gb2YgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdHJpa2V0aHJvdWdoLiAgVGhpcw0KLSAgICAvLy8gdmFsdWUgaXMgdXNlZCB0byBpbnRlcnByZXQgd2hldGhlciB0aGUgd2lkdGggdmFsdWUgcnVucyBob3Jpem9udGFsbHkgDQotICAgIC8vLyBvciB2ZXJ0aWNhbGx5Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfUkVBRElOR19ESVJFQ1RJT04gcmVhZGluZ0RpcmVjdGlvbjsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gRmxvdyBkaXJlY3Rpb24gb2YgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdHJpa2V0aHJvdWdoLiAgVGhpcyANCi0gICAgLy8vIHZhbHVlIGlzIHVzZWQgdG8gaW50ZXJwcmV0IHdoZXRoZXIgdGhlIHRoaWNrbmVzcyB2YWx1ZSBhZHZhbmNlcyB0b3AgdG8NCi0gICAgLy8vIGJvdHRvbSwgbGVmdCB0byByaWdodCwgb3IgcmlnaHQgdG8gbGVmdC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX0ZMT1dfRElSRUNUSU9OIGZsb3dEaXJlY3Rpb247DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIExvY2FsZSBvZiB0aGUgcmFuZ2UuIENhbiBiZSBwZXJ0aW5lbnQgd2hlcmUgdGhlIGxvY2FsZSBhZmZlY3RzIHRoZSBzdHlsZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgX19udWxsdGVybWluYXRlZCBXQ0hBUiBjb25zdCogbG9jYWxlTmFtZTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVGhlIG1lYXN1cmluZyBtb2RlIGNhbiBiZSB1c2VmdWwgdG8gdGhlIHJlbmRlcmVyIHRvIGRldGVybWluZSBob3cNCi0gICAgLy8vIHVuZGVybGluZXMgYXJlIHJlbmRlcmVkLCBlLmcuIHJvdW5kaW5nIHRoZSB0aGlja25lc3MgdG8gYSB3aG9sZSBwaXhlbA0KLSAgICAvLy8gaW4gR0RJLWNvbXBhdGlibGUgbW9kZXMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIERXUklURV9NRUFTVVJJTkdfTU9ERSBtZWFzdXJpbmdNb2RlOw0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgRFdSSVRFX0xJTkVfTUVUUklDUyBzdHJ1Y3R1cmUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBmb3JtYXR0ZWQNCi0vLy8gbGluZSBvZiB0ZXh0Lg0KLS8vLyA8L3N1bW1hcnk+DQotc3RydWN0IERXUklURV9MSU5FX01FVFJJQ1MNCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRoZSBudW1iZXIgb2YgdG90YWwgdGV4dCBwb3NpdGlvbnMgaW4gdGhlIGxpbmUuDQotICAgIC8vLyBUaGlzIGluY2x1ZGVzIGFueSB0cmFpbGluZyB3aGl0ZXNwYWNlIGFuZCBuZXdsaW5lIGNoYXJhY3RlcnMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFVJTlQzMiBsZW5ndGg7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRoZSBudW1iZXIgb2Ygd2hpdGVzcGFjZSBwb3NpdGlvbnMgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4gIE5ld2xpbmUNCi0gICAgLy8vIHNlcXVlbmNlcyBhcmUgY29uc2lkZXJlZCB3aGl0ZXNwYWNlLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBVSU5UMzIgdHJhaWxpbmdXaGl0ZXNwYWNlTGVuZ3RoOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIG5ld2xpbmUgc2VxdWVuY2UgYXQgdGhlIGVuZCBvZiB0aGUgbGluZS4NCi0gICAgLy8vIElmIHRoZSBjb3VudCBpcyB6ZXJvLCB0aGVuIHRoZSBsaW5lIHdhcyBlaXRoZXIgd3JhcHBlZCBvciBpdCBpcyB0aGUNCi0gICAgLy8vIGVuZCBvZiB0aGUgdGV4dC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgVUlOVDMyIG5ld2xpbmVMZW5ndGg7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEhlaWdodCBvZiB0aGUgbGluZSBhcyBtZWFzdXJlZCBmcm9tIHRvcCB0byBib3R0b20uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIEZMT0FUIGhlaWdodDsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gRGlzdGFuY2UgZnJvbSB0aGUgdG9wIG9mIHRoZSBsaW5lIHRvIGl0cyBiYXNlbGluZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRkxPQVQgYmFzZWxpbmU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRoZSBsaW5lIGlzIHRyaW1tZWQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIEJPT0wgaXNUcmltbWVkOw0KLX07DQotDQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgRFdSSVRFX0NMVVNURVJfTUVUUklDUyBzdHJ1Y3R1cmUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBnbHlwaCBjbHVzdGVyLg0KLS8vLyA8L3N1bW1hcnk+DQotc3RydWN0IERXUklURV9DTFVTVEVSX01FVFJJQ1MNCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRoZSB0b3RhbCBhZHZhbmNlIHdpZHRoIG9mIGFsbCBnbHlwaHMgaW4gdGhlIGNsdXN0ZXIuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIEZMT0FUIHdpZHRoOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBUaGUgbnVtYmVyIG9mIHRleHQgcG9zaXRpb25zIGluIHRoZSBjbHVzdGVyLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBVSU5UMTYgbGVuZ3RoOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBJbmRpY2F0ZSB3aGV0aGVyIGxpbmUgY2FuIGJlIGJyb2tlbiByaWdodCBhZnRlciB0aGUgY2x1c3Rlci4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgVUlOVDE2IGNhbldyYXBMaW5lQWZ0ZXIgOiAxOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBJbmRpY2F0ZSB3aGV0aGVyIHRoZSBjbHVzdGVyIGNvcnJlc3BvbmRzIHRvIHdoaXRlc3BhY2UgY2hhcmFjdGVyLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBVSU5UMTYgaXNXaGl0ZXNwYWNlIDogMTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gSW5kaWNhdGUgd2hldGhlciB0aGUgY2x1c3RlciBjb3JyZXNwb25kcyB0byBhIG5ld2xpbmUgY2hhcmFjdGVyLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBVSU5UMTYgaXNOZXdsaW5lIDogMTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gSW5kaWNhdGUgd2hldGhlciB0aGUgY2x1c3RlciBjb3JyZXNwb25kcyB0byBzb2Z0IGh5cGhlbiBjaGFyYWN0ZXIuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFVJTlQxNiBpc1NvZnRIeXBoZW4gOiAxOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBJbmRpY2F0ZSB3aGV0aGVyIHRoZSBjbHVzdGVyIGlzIHJlYWQgZnJvbSByaWdodCB0byBsZWZ0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBVSU5UMTYgaXNSaWdodFRvTGVmdCA6IDE7DQotDQotICAgIFVJTlQxNiBwYWRkaW5nIDogMTE7DQotfTsNCi0NCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIE92ZXJhbGwgbWV0cmljcyBhc3NvY2lhdGVkIHdpdGggdGV4dCBhZnRlciBsYXlvdXQuDQotLy8vIEFsbCBjb29yZGluYXRlcyBhcmUgaW4gZGV2aWNlIGluZGVwZW5kZW50IHBpeGVscyAoRElQcykuDQotLy8vIDwvc3VtbWFyeT4NCi1zdHJ1Y3QgRFdSSVRFX1RFWFRfTUVUUklDUw0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gTGVmdC1tb3N0IHBvaW50IG9mIGZvcm1hdHRlZCB0ZXh0IHJlbGF0aXZlIHRvIGxheW91dCBib3gNCi0gICAgLy8vIChleGNsdWRpbmcgYW55IGdseXBoIG92ZXJoYW5nKS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRkxPQVQgbGVmdDsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVG9wLW1vc3QgcG9pbnQgb2YgZm9ybWF0dGVkIHRleHQgcmVsYXRpdmUgdG8gbGF5b3V0IGJveA0KLSAgICAvLy8gKGV4Y2x1ZGluZyBhbnkgZ2x5cGggb3ZlcmhhbmcpLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBGTE9BVCB0b3A7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRoZSB3aWR0aCBvZiB0aGUgZm9ybWF0dGVkIHRleHQgaWdub3JpbmcgdHJhaWxpbmcgd2hpdGVzcGFjZQ0KLSAgICAvLy8gYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIEZMT0FUIHdpZHRoOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBUaGUgd2lkdGggb2YgdGhlIGZvcm1hdHRlZCB0ZXh0IHRha2luZyBpbnRvIGFjY291bnQgdGhlDQotICAgIC8vLyB0cmFpbGluZyB3aGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBGTE9BVCB3aWR0aEluY2x1ZGluZ1RyYWlsaW5nV2hpdGVzcGFjZTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVGhlIGhlaWdodCBvZiB0aGUgZm9ybWF0dGVkIHRleHQuIFRoZSBoZWlnaHQgb2YgYW4gZW1wdHkgc3RyaW5nDQotICAgIC8vLyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBzaXplIG9mIHRoZSBkZWZhdWx0IGZvbnQncyBsaW5lIGhlaWdodC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRkxPQVQgaGVpZ2h0Ow0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBJbml0aWFsIHdpZHRoIGdpdmVuIHRvIHRoZSBsYXlvdXQuIERlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSB0ZXh0DQotICAgIC8vLyB3YXMgd3JhcHBlZCBvciBub3QsIGl0IGNhbiBiZSBlaXRoZXIgbGFyZ2VyIG9yIHNtYWxsZXIgdGhhbiB0aGUNCi0gICAgLy8vIHRleHQgY29udGVudCB3aWR0aC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRkxPQVQgbGF5b3V0V2lkdGg7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEluaXRpYWwgaGVpZ2h0IGdpdmVuIHRvIHRoZSBsYXlvdXQuIERlcGVuZGluZyBvbiB0aGUgbGVuZ3RoIG9mIHRoZQ0KLSAgICAvLy8gdGV4dCwgaXQgbWF5IGJlIGxhcmdlciBvciBzbWFsbGVyIHRoYW4gdGhlIHRleHQgY29udGVudCBoZWlnaHQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIEZMT0FUIGxheW91dEhlaWdodDsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVGhlIG1heGltdW0gcmVvcmRlcmluZyBjb3VudCBvZiBhbnkgbGluZSBvZiB0ZXh0LCB1c2VkDQotICAgIC8vLyB0byBjYWxjdWxhdGUgdGhlIG1vc3QgbnVtYmVyIG9mIGhpdC10ZXN0aW5nIGJveGVzIG5lZWRlZC4NCi0gICAgLy8vIElmIHRoZSBsYXlvdXQgaGFzIG5vIGJpZGlyZWN0aW9uYWwgdGV4dCBvciBubyB0ZXh0IGF0IGFsbCwNCi0gICAgLy8vIHRoZSBtaW5pbXVtIGxldmVsIGlzIDEuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFVJTlQzMiBtYXhCaWRpUmVvcmRlcmluZ0RlcHRoOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBUb3RhbCBudW1iZXIgb2YgbGluZXMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIFVJTlQzMiBsaW5lQ291bnQ7DQotfTsNCi0NCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIFByb3BlcnRpZXMgZGVzY3JpYmluZyB0aGUgZ2VvbWV0cmljIG1lYXN1cmVtZW50IG9mIGFuDQotLy8vIGFwcGxpY2F0aW9uLWRlZmluZWQgaW5saW5lIG9iamVjdC4NCi0vLy8gPC9zdW1tYXJ5Pg0KLXN0cnVjdCBEV1JJVEVfSU5MSU5FX09CSkVDVF9NRVRSSUNTDQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBXaWR0aCBvZiB0aGUgaW5saW5lIG9iamVjdC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRkxPQVQgd2lkdGg7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEhlaWdodCBvZiB0aGUgaW5saW5lIG9iamVjdCBhcyBtZWFzdXJlZCBmcm9tIHRvcCB0byBib3R0b20uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIEZMT0FUIGhlaWdodDsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gRGlzdGFuY2UgZnJvbSB0aGUgdG9wIG9mIHRoZSBvYmplY3QgdG8gdGhlIGJhc2VsaW5lIHdoZXJlIGl0IGlzIGxpbmVkIHVwIHdpdGggdGhlIGFkamFjZW50IHRleHQuDQotICAgIC8vLyBJZiB0aGUgYmFzZWxpbmUgaXMgYXQgdGhlIGJvdHRvbSwgYmFzZWxpbmUgc2ltcGx5IGVxdWFscyBoZWlnaHQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIEZMT0FUIGJhc2VsaW5lOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBGbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgb2JqZWN0IGlzIHRvIGJlIHBsYWNlZCB1cHJpZ2h0IG9yIGFsb25nc2lkZSB0aGUgdGV4dCBiYXNlbGluZQ0KLSAgICAvLy8gZm9yIHZlcnRpY2FsIHRleHQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIEJPT0wgIHN1cHBvcnRzU2lkZXdheXM7DQotfTsNCi0NCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIFRoZSBEV1JJVEVfT1ZFUkhBTkdfTUVUUklDUyBzdHJ1Y3R1cmUgaG9sZHMgaG93IG11Y2ggYW55IHZpc2libGUgcGl4ZWxzDQotLy8vIChpbiBESVBzKSBvdmVyc2hvb3QgZWFjaCBzaWRlIG9mIHRoZSBsYXlvdXQgb3IgaW5saW5lIG9iamVjdHMuDQotLy8vIDwvc3VtbWFyeT4NCi0vLy8gPHJlbWFya3M+DQotLy8vIFBvc2l0aXZlIG92ZXJoYW5ncyBpbmRpY2F0ZSB0aGF0IHRoZSB2aXNpYmxlIGFyZWEgZXh0ZW5kcyBvdXRzaWRlIHRoZSBsYXlvdXQNCi0vLy8gYm94IG9yIGlubGluZSBvYmplY3QsIHdoaWxlIG5lZ2F0aXZlIHZhbHVlcyBtZWFuIHRoZXJlIGlzIHdoaXRlc3BhY2UgaW5zaWRlLg0KLS8vLyBUaGUgcmV0dXJuZWQgdmFsdWVzIGFyZSB1bmFmZmVjdGVkIGJ5IHJlbmRlcmluZyB0cmFuc2Zvcm1zIG9yIHBpeGVsIHNuYXBwaW5nLg0KLS8vLyBBZGRpdGlvbmFsbHksIHRoZXkgbWF5IG5vdCBleGFjdGx5IG1hdGNoIGZpbmFsIHRhcmdldCdzIHBpeGVsIGJvdW5kcyBhZnRlcg0KLS8vLyBhcHBseWluZyBncmlkIGZpdHRpbmcgYW5kIGhpbnRpbmcuDQotLy8vIDwvcmVtYXJrcz4NCi1zdHJ1Y3QgRFdSSVRFX09WRVJIQU5HX01FVFJJQ1MNCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRoZSBkaXN0YW5jZSBmcm9tIHRoZSBsZWZ0LW1vc3QgdmlzaWJsZSBESVAgdG8gaXRzIGxlZnQgYWxpZ25tZW50IGVkZ2UuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIEZMT0FUIGxlZnQ7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRoZSBkaXN0YW5jZSBmcm9tIHRoZSB0b3AtbW9zdCB2aXNpYmxlIERJUCB0byBpdHMgdG9wIGFsaWdubWVudCBlZGdlLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBGTE9BVCB0b3A7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRoZSBkaXN0YW5jZSBmcm9tIHRoZSByaWdodC1tb3N0IHZpc2libGUgRElQIHRvIGl0cyByaWdodCBhbGlnbm1lbnQgZWRnZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRkxPQVQgcmlnaHQ7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRoZSBkaXN0YW5jZSBmcm9tIHRoZSBib3R0b20tbW9zdCB2aXNpYmxlIERJUCB0byBpdHMgYm90dG9tIGFsaWdubWVudCBlZGdlLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBGTE9BVCBib3R0b207DQotfTsNCi0NCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIEdlb21ldHJ5IGVuY2xvc2luZyBvZiB0ZXh0IHBvc2l0aW9ucy4NCi0vLy8gPC9zdW1tYXJ5Pg0KLXN0cnVjdCBEV1JJVEVfSElUX1RFU1RfTUVUUklDUw0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gRmlyc3QgdGV4dCBwb3NpdGlvbiB3aXRoaW4gdGhlIGdlb21ldHJ5Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBVSU5UMzIgdGV4dFBvc2l0aW9uOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBOdW1iZXIgb2YgdGV4dCBwb3NpdGlvbnMgd2l0aGluIHRoZSBnZW9tZXRyeS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgVUlOVDMyIGxlbmd0aDsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gTGVmdCBwb3NpdGlvbiBvZiB0aGUgdG9wLWxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgZ2VvbWV0cnkuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIEZMT0FUIGxlZnQ7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRvcCBwb3NpdGlvbiBvZiB0aGUgdG9wLWxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgZ2VvbWV0cnkuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIEZMT0FUIHRvcDsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2VvbWV0cnkncyB3aWR0aC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRkxPQVQgd2lkdGg7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdlb21ldHJ5J3MgaGVpZ2h0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBGTE9BVCBoZWlnaHQ7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEJpZGkgbGV2ZWwgb2YgdGV4dCBwb3NpdGlvbnMgZW5jbG9zZWQgd2l0aGluIHRoZSBnZW9tZXRyeS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgVUlOVDMyIGJpZGlMZXZlbDsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2VvbWV0cnkgZW5jbG9zZXMgdGV4dD8NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgQk9PTCBpc1RleHQ7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFJhbmdlIGlzIHRyaW1tZWQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIEJPT0wgaXNUcmltbWVkOw0KLX07DQotDQotDQotaW50ZXJmYWNlIElEV3JpdGVUZXh0UmVuZGVyZXI7DQotDQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgSURXcml0ZUlubGluZU9iamVjdCBpbnRlcmZhY2Ugd3JhcHMgYW4gYXBwbGljYXRpb24gZGVmaW5lZCBpbmxpbmUgZ3JhcGhpYywNCi0vLy8gYWxsb3dpbmcgRFdyaXRlIHRvIHF1ZXJ5IG1ldHJpY3MgYXMgaWYgaXQgd2FzIGEgZ2x5cGggaW5saW5lIHdpdGggdGhlIHRleHQuDQotLy8vIDwvc3VtbWFyeT4NCi1pbnRlcmZhY2UgRFdSSVRFX0RFQ0xBUkVfSU5URVJGQUNFKCI4MzM5RkRFMy0xMDZGLTQ3YWItODM3My0xQzYyOTVFQjEwQjMiKSBJRFdyaXRlSW5saW5lT2JqZWN0IDogcHVibGljIElVbmtub3duDQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBUaGUgYXBwbGljYXRpb24gaW1wbGVtZW50ZWQgcmVuZGVyaW5nIGNhbGxiYWNrIChJRFdyaXRlVGV4dFJlbmRlcmVyOjpEcmF3SW5saW5lT2JqZWN0KQ0KLSAgICAvLy8gY2FuIHVzZSB0aGlzIHRvIGRyYXcgdGhlIGlubGluZSBvYmplY3Qgd2l0aG91dCBuZWVkaW5nIHRvIGNhc3Qgb3IgcXVlcnkgdGhlIG9iamVjdA0KLSAgICAvLy8gdHlwZS4gVGhlIHRleHQgbGF5b3V0IGRvZXMgbm90IGNhbGwgdGhpcyBtZXRob2QgZGlyZWN0bHkuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iY2xpZW50RHJhd2luZ0NvbnRleHQiPlRoZSBjb250ZXh0IHBhc3NlZCB0byBJRFdyaXRlVGV4dExheW91dDo6RHJhdy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InJlbmRlcmVyIj5UaGUgcmVuZGVyZXIgcGFzc2VkIHRvIElEV3JpdGVUZXh0TGF5b3V0OjpEcmF3IGFzIHRoZSBvYmplY3QncyBjb250YWluaW5nIHBhcmVudC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Im9yaWdpblgiPlgtY29vcmRpbmF0ZSBhdCB0aGUgdG9wLWxlZnQgY29ybmVyIG9mIHRoZSBpbmxpbmUgb2JqZWN0LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ib3JpZ2luWSI+WS1jb29yZGluYXRlIGF0IHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIGlubGluZSBvYmplY3QuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJpc1NpZGV3YXlzIj5UaGUgb2JqZWN0IHNob3VsZCBiZSBkcmF3biBvbiBpdHMgc2lkZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImlzUmlnaHRUb0xlZnQiPlRoZSBvYmplY3QgaXMgaW4gYW4gcmlnaHQtdG8tbGVmdCBjb250ZXh0IGFuZCBzaG91bGQgYmUgZHJhd24gZmxpcHBlZC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImNsaWVudERyYXdpbmdFZmZlY3QiPlRoZSBkcmF3aW5nIGVmZmVjdCBzZXQgaW4gSURXcml0ZVRleHRMYXlvdXQ6OlNldERyYXdpbmdFZmZlY3QuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoRHJhdykoDQotICAgICAgICBfX21heWJlbnVsbCB2b2lkKiBjbGllbnREcmF3aW5nQ29udGV4dCwNCi0gICAgICAgIElEV3JpdGVUZXh0UmVuZGVyZXIqIHJlbmRlcmVyLA0KLSAgICAgICAgRkxPQVQgb3JpZ2luWCwNCi0gICAgICAgIEZMT0FUIG9yaWdpblksDQotICAgICAgICBCT09MIGlzU2lkZXdheXMsDQotICAgICAgICBCT09MIGlzUmlnaHRUb0xlZnQsDQotICAgICAgICBfX21heWJlbnVsbCBJVW5rbm93biogY2xpZW50RHJhd2luZ0VmZmVjdA0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBUZXh0TGF5b3V0IGNhbGxzIHRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IHRoZSBtZWFzdXJlbWVudCBvZiB0aGUgaW5saW5lIG9iamVjdC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJtZXRyaWNzIj5SZXR1cm5lZCBtZXRyaWNzPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoR2V0TWV0cmljcykoDQotICAgICAgICBfX291dCBEV1JJVEVfSU5MSU5FX09CSkVDVF9NRVRSSUNTKiBtZXRyaWNzDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRleHRMYXlvdXQgY2FsbHMgdGhpcyBjYWxsYmFjayBmdW5jdGlvbiB0byBnZXQgdGhlIHZpc2libGUgZXh0ZW50cyAoaW4gRElQcykgb2YgdGhlIGlubGluZSBvYmplY3QuDQotICAgIC8vLyBJbiB0aGUgY2FzZSBvZiBhIHNpbXBsZSBiaXRtYXAsIHdpdGggbm8gcGFkZGluZyBhbmQgbm8gb3ZlcmhhbmcsIGFsbCB0aGUgb3ZlcmhhbmdzIHdpbGwNCi0gICAgLy8vIHNpbXBseSBiZSB6ZXJvZXMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ib3ZlcmhhbmdzIj5PdmVyc2hvb3Qgb2YgdmlzaWJsZSBleHRlbnRzIChpbiBESVBzKSBvdXRzaWRlIHRoZSBvYmplY3QuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICAvLy8gPHJlbWFya3M+DQotICAgIC8vLyBUaGUgb3ZlcmhhbmdzIHNob3VsZCBiZSByZXR1cm5lZCByZWxhdGl2ZSB0byB0aGUgcmVwb3J0ZWQgc2l6ZSBvZiB0aGUgb2JqZWN0DQotICAgIC8vLyAoRFdSSVRFX0lOTElORV9PQkpFQ1RfTUVUUklDUzo6d2lkdGgvaGVpZ2h0KSwgYW5kIHNob3VsZCBub3QgYmUgYmFzZWxpbmUNCi0gICAgLy8vIGFkanVzdGVkLiBJZiB5b3UgaGF2ZSBhbiBpbWFnZSB0aGF0IGlzIGFjdHVhbGx5IDEwMHgxMDAgRElQcywgYnV0IHlvdSB3YW50IGl0DQotICAgIC8vLyBzbGlnaHRseSBpbnNldCAocGVyaGFwcyBpdCBoYXMgYSBnbG93KSBieSAyMCBESVBzIG9uIGVhY2ggc2lkZSwgeW91IHdvdWxkDQotICAgIC8vLyByZXR1cm4gYSB3aWR0aC9oZWlnaHQgb2YgNjB4NjAgYW5kIGZvdXIgb3ZlcmhhbmdzIG9mIDIwIERJUHMuDQotICAgIC8vLyA8L3JlbWFya3M+DQotICAgIFNURE1FVEhPRChHZXRPdmVyaGFuZ01ldHJpY3MpKA0KLSAgICAgICAgX19vdXQgRFdSSVRFX09WRVJIQU5HX01FVFJJQ1MqIG92ZXJoYW5ncw0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBMYXlvdXQgdXNlcyB0aGlzIHRvIGRldGVybWluZSB0aGUgbGluZSBicmVha2luZyBiZWhhdmlvciBvZiB0aGUgaW5saW5lIG9iamVjdA0KLSAgICAvLy8gYW1pZHN0IHRoZSB0ZXh0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImJyZWFrQ29uZGl0aW9uQmVmb3JlIj5MaW5lLWJyZWFraW5nIGNvbmRpdGlvbiBiZXR3ZWVuIHRoZSBvYmplY3QgYW5kIHRoZSBjb250ZW50IGltbWVkaWF0ZWx5IHByZWNlZGluZyBpdC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImJyZWFrQ29uZGl0aW9uQWZ0ZXIiID5MaW5lLWJyZWFraW5nIGNvbmRpdGlvbiBiZXR3ZWVuIHRoZSBvYmplY3QgYW5kIHRoZSBjb250ZW50IGltbWVkaWF0ZWx5IGZvbGxvd2luZyBpdC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRCcmVha0NvbmRpdGlvbnMpKA0KLSAgICAgICAgX19vdXQgRFdSSVRFX0JSRUFLX0NPTkRJVElPTiogYnJlYWtDb25kaXRpb25CZWZvcmUsDQotICAgICAgICBfX291dCBEV1JJVEVfQlJFQUtfQ09ORElUSU9OKiBicmVha0NvbmRpdGlvbkFmdGVyDQotICAgICAgICApIFBVUkU7DQotfTsNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIFRoZSBJRFdyaXRlUGl4ZWxTbmFwcGluZyBpbnRlcmZhY2UgZGVmaW5lcyB0aGUgcGl4ZWwgc25hcHBpbmcgcHJvcGVydGllcyBvZiBhIHRleHQgcmVuZGVyZXIuDQotLy8vIDwvc3VtbWFyeT4NCi1pbnRlcmZhY2UgRFdSSVRFX0RFQ0xBUkVfSU5URVJGQUNFKCJlYWYzYTJkYS1lY2Y0LTRkMjQtYjY0NC1iMzRmNjg0MjAyNGIiKSBJRFdyaXRlUGl4ZWxTbmFwcGluZyA6IHB1YmxpYyBJVW5rbm93bg0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHBpeGVsIHNuYXBwaW5nIGlzIGRpc2FibGVkLiBUaGUgcmVjb21tZW5kZWQgZGVmYXVsdCBpcyBGQUxTRSwNCi0gICAgLy8vIHVubGVzcyBkb2luZyBhbmltYXRpb24gdGhhdCByZXF1aXJlcyBzdWJwaXhlbCB2ZXJ0aWNhbCBwbGFjZW1lbnQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iY2xpZW50RHJhd2luZ0NvbnRleHQiPlRoZSBjb250ZXh0IHBhc3NlZCB0byBJRFdyaXRlVGV4dExheW91dDo6RHJhdy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImlzRGlzYWJsZWQiPlJlY2VpdmVzIFRSVUUgaWYgcGl4ZWwgc25hcHBpbmcgaXMgZGlzYWJsZWQgb3IgRkFMU0UgaWYgaXQgbm90LjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKElzUGl4ZWxTbmFwcGluZ0Rpc2FibGVkKSgNCi0gICAgICAgIF9fbWF5YmVudWxsIHZvaWQqIGNsaWVudERyYXdpbmdDb250ZXh0LA0KLSAgICAgICAgX19vdXQgQk9PTCogaXNEaXNhYmxlZA0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXRzIHRoZSBjdXJyZW50IHRyYW5zZm9ybSB0aGF0IG1hcHMgYWJzdHJhY3QgY29vcmRpbmF0ZXMgdG8gRElQcywNCi0gICAgLy8vIHdoaWNoIG1heSBkaXNhYmxlIHBpeGVsIHNuYXBwaW5nIHVwb24gYW55IHJvdGF0aW9uIG9yIHNoZWFyLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImNsaWVudERyYXdpbmdDb250ZXh0Ij5UaGUgY29udGV4dCBwYXNzZWQgdG8gSURXcml0ZVRleHRMYXlvdXQ6OkRyYXcuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0cmFuc2Zvcm0iPlJlY2VpdmVzIHRoZSB0cmFuc2Zvcm0uPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoR2V0Q3VycmVudFRyYW5zZm9ybSkoDQotICAgICAgICBfX21heWJlbnVsbCB2b2lkKiBjbGllbnREcmF3aW5nQ29udGV4dCwNCi0gICAgICAgIF9fb3V0IERXUklURV9NQVRSSVgqIHRyYW5zZm9ybQ0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXRzIHRoZSBudW1iZXIgb2YgcGh5c2ljYWwgcGl4ZWxzIHBlciBESVAuIEEgRElQIChkZXZpY2UtaW5kZXBlbmRlbnQgcGl4ZWwpIGlzIDEvOTYgaW5jaCwNCi0gICAgLy8vIHNvIHRoZSBwaXhlbHNQZXJEaXAgdmFsdWUgaXMgdGhlIG51bWJlciBvZiBsb2dpY2FsIHBpeGVscyBwZXIgaW5jaCBkaXZpZGVkIGJ5IDk2ICh5aWVsZGluZw0KLSAgICAvLy8gYSB2YWx1ZSBvZiAxIGZvciA5NiBEUEkgYW5kIDEuMjUgZm9yIDEyMCkuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iY2xpZW50RHJhd2luZ0NvbnRleHQiPlRoZSBjb250ZXh0IHBhc3NlZCB0byBJRFdyaXRlVGV4dExheW91dDo6RHJhdy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InBpeGVsc1BlckRpcCI+UmVjZWl2ZXMgdGhlIG51bWJlciBvZiBwaHlzaWNhbCBwaXhlbHMgcGVyIERJUC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRQaXhlbHNQZXJEaXApKA0KLSAgICAgICAgX19tYXliZW51bGwgdm9pZCogY2xpZW50RHJhd2luZ0NvbnRleHQsDQotICAgICAgICBfX291dCBGTE9BVCogcGl4ZWxzUGVyRGlwDQotICAgICAgICApIFBVUkU7DQotfTsNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIFRoZSBJRFdyaXRlVGV4dExheW91dCBpbnRlcmZhY2UgcmVwcmVzZW50cyBhIHNldCBvZiBhcHBsaWNhdGlvbi1kZWZpbmVkDQotLy8vIGNhbGxiYWNrcyB0aGF0IHBlcmZvcm0gcmVuZGVyaW5nIG9mIHRleHQsIGlubGluZSBvYmplY3RzLCBhbmQgZGVjb3JhdGlvbnMNCi0vLy8gc3VjaCBhcyB1bmRlcmxpbmVzLg0KLS8vLyA8L3N1bW1hcnk+DQotaW50ZXJmYWNlIERXUklURV9ERUNMQVJFX0lOVEVSRkFDRSgiZWY4YTgxMzUtNWNjNi00NWZlLTg4MjUtYzVhMDcyNGViODE5IikgSURXcml0ZVRleHRSZW5kZXJlciA6IHB1YmxpYyBJRFdyaXRlUGl4ZWxTbmFwcGluZw0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gSURXcml0ZVRleHRMYXlvdXQ6OkRyYXcgY2FsbHMgdGhpcyBmdW5jdGlvbiB0byBpbnN0cnVjdCB0aGUgY2xpZW50IHRvDQotICAgIC8vLyByZW5kZXIgYSBydW4gb2YgZ2x5cGhzLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImNsaWVudERyYXdpbmdDb250ZXh0Ij5UaGUgY29udGV4dCBwYXNzZWQgdG8gDQotICAgIC8vLyBJRFdyaXRlVGV4dExheW91dDo6RHJhdy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImJhc2VsaW5lT3JpZ2luWCI+WC1jb29yZGluYXRlIG9mIHRoZSBiYXNlbGluZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImJhc2VsaW5lT3JpZ2luWSI+WS1jb29yZGluYXRlIG9mIHRoZSBiYXNlbGluZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Im1lYXN1cmluZ01vZGUiPlNwZWNpZmllcyBtZWFzdXJpbmcgbWV0aG9kIGZvciBnbHlwaHMgaW4gdGhlIHJ1bi4NCi0gICAgLy8vIFJlbmRlcmVyIGltcGxlbWVudGF0aW9ucyBtYXkgY2hvb3NlIGRpZmZlcmVudCByZW5kZXJpbmcgbW9kZXMgZm9yIGdpdmVuIG1lYXN1cmluZyBtZXRob2RzLA0KLSAgICAvLy8gYnV0IGJlc3QgcmVzdWx0cyBhcmUgc2VlbiB3aGVuIHRoZSByZW5kZXJpbmcgbW9kZSBtYXRjaGVzIHRoZSBjb3JyZXNwb25kaW5nIG1lYXN1cmluZyBtb2RlOg0KLSAgICAvLy8gRFdSSVRFX1JFTkRFUklOR19NT0RFX0NMRUFSVFlQRV9OQVRVUkFMIGZvciBEV1JJVEVfTUVBU1VSSU5HX01PREVfTkFUVVJBTA0KLSAgICAvLy8gRFdSSVRFX1JFTkRFUklOR19NT0RFX0NMRUFSVFlQRV9HRElfQ0xBU1NJQyBmb3IgRFdSSVRFX01FQVNVUklOR19NT0RFX0dESV9DTEFTU0lDDQotICAgIC8vLyBEV1JJVEVfUkVOREVSSU5HX01PREVfQ0xFQVJUWVBFX0dESV9OQVRVUkFMIGZvciBEV1JJVEVfTUVBU1VSSU5HX01PREVfR0RJX05BVFVSQUwNCi0gICAgLy8vIDwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2x5cGhSdW4iPlRoZSBnbHlwaCBydW4gdG8gZHJhdy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImdseXBoUnVuRGVzY3JpcHRpb24iPlByb3BlcnRpZXMgb2YgdGhlIGNoYXJhY3RlcnMgDQotICAgIC8vLyBhc3NvY2lhdGVkIHdpdGggdGhpcyBydW4uPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJjbGllbnREcmF3aW5nRWZmZWN0Ij5UaGUgZHJhd2luZyBlZmZlY3Qgc2V0IGluDQotICAgIC8vLyBJRFdyaXRlVGV4dExheW91dDo6U2V0RHJhd2luZ0VmZmVjdC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChEcmF3R2x5cGhSdW4pKA0KLSAgICAgICAgX19tYXliZW51bGwgdm9pZCogY2xpZW50RHJhd2luZ0NvbnRleHQsDQotICAgICAgICBGTE9BVCBiYXNlbGluZU9yaWdpblgsDQotICAgICAgICBGTE9BVCBiYXNlbGluZU9yaWdpblksDQotICAgICAgICBEV1JJVEVfTUVBU1VSSU5HX01PREUgbWVhc3VyaW5nTW9kZSwNCi0gICAgICAgIF9faW4gRFdSSVRFX0dMWVBIX1JVTiBjb25zdCogZ2x5cGhSdW4sDQotICAgICAgICBfX2luIERXUklURV9HTFlQSF9SVU5fREVTQ1JJUFRJT04gY29uc3QqIGdseXBoUnVuRGVzY3JpcHRpb24sDQotICAgICAgICBfX21heWJlbnVsbCBJVW5rbm93biogY2xpZW50RHJhd2luZ0VmZmVjdA0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBJRFdyaXRlVGV4dExheW91dDo6RHJhdyBjYWxscyB0aGlzIGZ1bmN0aW9uIHRvIGluc3RydWN0IHRoZSBjbGllbnQgdG8gZHJhdw0KLSAgICAvLy8gYW4gdW5kZXJsaW5lLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImNsaWVudERyYXdpbmdDb250ZXh0Ij5UaGUgY29udGV4dCBwYXNzZWQgdG8gDQotICAgIC8vLyBJRFdyaXRlVGV4dExheW91dDo6RHJhdy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImJhc2VsaW5lT3JpZ2luWCI+WC1jb29yZGluYXRlIG9mIHRoZSBiYXNlbGluZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImJhc2VsaW5lT3JpZ2luWSI+WS1jb29yZGluYXRlIG9mIHRoZSBiYXNlbGluZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InVuZGVybGluZSI+VW5kZXJsaW5lIGxvZ2ljYWwgaW5mb3JtYXRpb24uPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJjbGllbnREcmF3aW5nRWZmZWN0Ij5UaGUgZHJhd2luZyBlZmZlY3Qgc2V0IGluDQotICAgIC8vLyBJRFdyaXRlVGV4dExheW91dDo6U2V0RHJhd2luZ0VmZmVjdC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIC8vLyA8cmVtYXJrcz4NCi0gICAgLy8vIEEgc2luZ2xlIHVuZGVybGluZSBjYW4gYmUgYnJva2VuIGludG8gbXVsdGlwbGUgY2FsbHMsIGRlcGVuZGluZyBvbg0KLSAgICAvLy8gaG93IHRoZSBmb3JtYXR0aW5nIGNoYW5nZXMgYXR0cmlidXRlcy4gSWYgZm9udCBzaXplcy9zdHlsZXMgY2hhbmdlDQotICAgIC8vLyB3aXRoaW4gYW4gdW5kZXJsaW5lLCB0aGUgdGhpY2tuZXNzIGFuZCBvZmZzZXQgd2lsbCBiZSBhdmVyYWdlZA0KLSAgICAvLy8gd2VpZ2h0ZWQgYWNjb3JkaW5nIHRvIGNoYXJhY3RlcnMuDQotICAgIC8vLyBUbyBnZXQgdGhlIGNvcnJlY3QgdG9wIGNvb3JkaW5hdGUgb2YgdGhlIHVuZGVybGluZSByZWN0LCBhZGQgdW5kZXJsaW5lOjpvZmZzZXQNCi0gICAgLy8vIHRvIHRoZSBiYXNlbGluZSdzIFkuIE90aGVyd2lzZSB0aGUgdW5kZXJsaW5lIHdpbGwgYmUgaW1tZWRpYXRlbHkgdW5kZXIgdGhlIHRleHQuDQotICAgIC8vLyBUaGUgeCBjb29yZGluYXRlIHdpbGwgYWx3YXlzIGJlIHBhc3NlZCBhcyB0aGUgbGVmdCBzaWRlLCByZWdhcmRsZXNzDQotICAgIC8vLyBvZiB0ZXh0IGRpcmVjdGlvbmFsaXR5LiBUaGlzIHNpbXBsaWZpZXMgZHJhd2luZyBhbmQgcmVkdWNlcyB0aGUNCi0gICAgLy8vIHByb2JsZW0gb2Ygcm91bmQtb2ZmIHRoYXQgY291bGQgcG90ZW50aWFsbHkgY2F1c2UgZ2FwcyBvciBhIGRvdWJsZQ0KLSAgICAvLy8gc3RhbXBlZCBhbHBoYSBibGVuZC4gVG8gYXZvaWQgYWxwaGEgb3ZlcmxhcCwgcm91bmQgdGhlIGVuZCBwb2ludHMNCi0gICAgLy8vIHRvIHRoZSBuZWFyZXN0IGRldmljZSBwaXhlbC4NCi0gICAgLy8vIDwvcmVtYXJrcz4NCi0gICAgU1RETUVUSE9EKERyYXdVbmRlcmxpbmUpKA0KLSAgICAgICAgX19tYXliZW51bGwgdm9pZCogY2xpZW50RHJhd2luZ0NvbnRleHQsDQotICAgICAgICBGTE9BVCBiYXNlbGluZU9yaWdpblgsDQotICAgICAgICBGTE9BVCBiYXNlbGluZU9yaWdpblksDQotICAgICAgICBfX2luIERXUklURV9VTkRFUkxJTkUgY29uc3QqIHVuZGVybGluZSwNCi0gICAgICAgIF9fbWF5YmVudWxsIElVbmtub3duKiBjbGllbnREcmF3aW5nRWZmZWN0DQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIElEV3JpdGVUZXh0TGF5b3V0OjpEcmF3IGNhbGxzIHRoaXMgZnVuY3Rpb24gdG8gaW5zdHJ1Y3QgdGhlIGNsaWVudCB0byBkcmF3DQotICAgIC8vLyBhIHN0cmlrZXRocm91Z2guDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iY2xpZW50RHJhd2luZ0NvbnRleHQiPlRoZSBjb250ZXh0IHBhc3NlZCB0byANCi0gICAgLy8vIElEV3JpdGVUZXh0TGF5b3V0OjpEcmF3LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iYmFzZWxpbmVPcmlnaW5YIj5YLWNvb3JkaW5hdGUgb2YgdGhlIGJhc2VsaW5lLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iYmFzZWxpbmVPcmlnaW5ZIj5ZLWNvb3JkaW5hdGUgb2YgdGhlIGJhc2VsaW5lLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyaWtldGhyb3VnaCI+U3RyaWtldGhyb3VnaCBsb2dpY2FsIGluZm9ybWF0aW9uLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iY2xpZW50RHJhd2luZ0VmZmVjdCI+VGhlIGRyYXdpbmcgZWZmZWN0IHNldCBpbg0KLSAgICAvLy8gSURXcml0ZVRleHRMYXlvdXQ6OlNldERyYXdpbmdFZmZlY3QuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICAvLy8gPHJlbWFya3M+DQotICAgIC8vLyBBIHNpbmdsZSBzdHJpa2V0aHJvdWdoIGNhbiBiZSBicm9rZW4gaW50byBtdWx0aXBsZSBjYWxscywgZGVwZW5kaW5nIG9uDQotICAgIC8vLyBob3cgdGhlIGZvcm1hdHRpbmcgY2hhbmdlcyBhdHRyaWJ1dGVzLiBTdHJpa2V0aHJvdWdoIGlzIG5vdCBhdmVyYWdlZA0KLSAgICAvLy8gYWNyb3NzIGZvbnQgc2l6ZXMvc3R5bGVzIGNoYW5nZXMuDQotICAgIC8vLyBUbyBnZXQgdGhlIGNvcnJlY3QgdG9wIGNvb3JkaW5hdGUgb2YgdGhlIHN0cmlrZXRocm91Z2ggcmVjdCwNCi0gICAgLy8vIGFkZCBzdHJpa2V0aHJvdWdoOjpvZmZzZXQgdG8gdGhlIGJhc2VsaW5lJ3MgWS4NCi0gICAgLy8vIExpa2UgdW5kZXJsaW5lcywgdGhlIHggY29vcmRpbmF0ZSB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgYXMgdGhlIGxlZnQgc2lkZSwNCi0gICAgLy8vIHJlZ2FyZGxlc3Mgb2YgdGV4dCBkaXJlY3Rpb25hbGl0eS4NCi0gICAgLy8vIDwvcmVtYXJrcz4NCi0gICAgU1RETUVUSE9EKERyYXdTdHJpa2V0aHJvdWdoKSgNCi0gICAgICAgIF9fbWF5YmVudWxsIHZvaWQqIGNsaWVudERyYXdpbmdDb250ZXh0LA0KLSAgICAgICAgRkxPQVQgYmFzZWxpbmVPcmlnaW5YLA0KLSAgICAgICAgRkxPQVQgYmFzZWxpbmVPcmlnaW5ZLA0KLSAgICAgICAgX19pbiBEV1JJVEVfU1RSSUtFVEhST1VHSCBjb25zdCogc3RyaWtldGhyb3VnaCwNCi0gICAgICAgIF9fbWF5YmVudWxsIElVbmtub3duKiBjbGllbnREcmF3aW5nRWZmZWN0DQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIElEV3JpdGVUZXh0TGF5b3V0OjpEcmF3IGNhbGxzIHRoaXMgYXBwbGljYXRpb24gY2FsbGJhY2sgd2hlbiBpdCBuZWVkcyB0bw0KLSAgICAvLy8gZHJhdyBhbiBpbmxpbmUgb2JqZWN0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImNsaWVudERyYXdpbmdDb250ZXh0Ij5UaGUgY29udGV4dCBwYXNzZWQgdG8gSURXcml0ZVRleHRMYXlvdXQ6OkRyYXcuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJvcmlnaW5YIj5YLWNvb3JkaW5hdGUgYXQgdGhlIHRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgaW5saW5lIG9iamVjdC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Im9yaWdpblkiPlktY29vcmRpbmF0ZSBhdCB0aGUgdG9wLWxlZnQgY29ybmVyIG9mIHRoZSBpbmxpbmUgb2JqZWN0LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iaW5saW5lT2JqZWN0Ij5UaGUgb2JqZWN0IHNldCB1c2luZyBJRFdyaXRlVGV4dExheW91dDo6U2V0SW5saW5lT2JqZWN0LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iaXNTaWRld2F5cyI+VGhlIG9iamVjdCBzaG91bGQgYmUgZHJhd24gb24gaXRzIHNpZGUuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJpc1JpZ2h0VG9MZWZ0Ij5UaGUgb2JqZWN0IGlzIGluIGFuIHJpZ2h0LXRvLWxlZnQgY29udGV4dCBhbmQgc2hvdWxkIGJlIGRyYXduIGZsaXBwZWQuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJjbGllbnREcmF3aW5nRWZmZWN0Ij5UaGUgZHJhd2luZyBlZmZlY3Qgc2V0IGluDQotICAgIC8vLyBJRFdyaXRlVGV4dExheW91dDo6U2V0RHJhd2luZ0VmZmVjdC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIC8vLyA8cmVtYXJrcz4NCi0gICAgLy8vIFRoZSByaWdodC10by1sZWZ0IGZsYWcgaXMgYSBoaW50IGZvciB0aG9zZSBjYXNlcyB3aGVyZSBpdCB3b3VsZCBsb29rDQotICAgIC8vLyBzdHJhbmdlIGZvciB0aGUgaW1hZ2UgdG8gYmUgc2hvd24gbm9ybWFsbHkgKGxpa2UgYW4gYXJyb3cgcG9pbnRpbmcgdG8NCi0gICAgLy8vIHJpZ2h0IHRvIGluZGljYXRlIGEgc3VibWVudSkuDQotICAgIC8vLyA8L3JlbWFya3M+DQotICAgIFNURE1FVEhPRChEcmF3SW5saW5lT2JqZWN0KSgNCi0gICAgICAgIF9fbWF5YmVudWxsIHZvaWQqIGNsaWVudERyYXdpbmdDb250ZXh0LA0KLSAgICAgICAgRkxPQVQgb3JpZ2luWCwNCi0gICAgICAgIEZMT0FUIG9yaWdpblksDQotICAgICAgICBJRFdyaXRlSW5saW5lT2JqZWN0KiBpbmxpbmVPYmplY3QsDQotICAgICAgICBCT09MIGlzU2lkZXdheXMsDQotICAgICAgICBCT09MIGlzUmlnaHRUb0xlZnQsDQotICAgICAgICBfX21heWJlbnVsbCBJVW5rbm93biogY2xpZW50RHJhd2luZ0VmZmVjdA0KLSAgICAgICAgKSBQVVJFOw0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgSURXcml0ZVRleHRMYXlvdXQgaW50ZXJmYWNlIHJlcHJlc2VudHMgYSBibG9jayBvZiB0ZXh0IGFmdGVyIGl0IGhhcw0KLS8vLyBiZWVuIGZ1bGx5IGFuYWx5emVkIGFuZCBmb3JtYXR0ZWQuDQotLy8vDQotLy8vIEFsbCBjb29yZGluYXRlcyBhcmUgaW4gZGV2aWNlIGluZGVwZW5kZW50IHBpeGVscyAoRElQcykuDQotLy8vIDwvc3VtbWFyeT4NCi1pbnRlcmZhY2UgRFdSSVRFX0RFQ0xBUkVfSU5URVJGQUNFKCI1MzczNzAzNy02ZDE0LTQxMGItOWJmZS0wYjE4MmJiNzA5NjEiKSBJRFdyaXRlVGV4dExheW91dCA6IHB1YmxpYyBJRFdyaXRlVGV4dEZvcm1hdA0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gU2V0IGxheW91dCBtYXhpbXVtIHdpZHRoDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ibWF4V2lkdGgiPkxheW91dCBtYXhpbXVtIHdpZHRoPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoU2V0TWF4V2lkdGgpKA0KLSAgICAgICAgRkxPQVQgbWF4V2lkdGgNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gU2V0IGxheW91dCBtYXhpbXVtIGhlaWdodA0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Im1heEhlaWdodCI+TGF5b3V0IG1heGltdW0gaGVpZ2h0PC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoU2V0TWF4SGVpZ2h0KSgNCi0gICAgICAgIEZMT0FUIG1heEhlaWdodA0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBTZXQgdGhlIGZvbnQgY29sbGVjdGlvbi4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250Q29sbGVjdGlvbiI+VGhlIGZvbnQgY29sbGVjdGlvbiB0byBzZXQ8L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRSYW5nZSI+VGV4dCByYW5nZSB0byB3aGljaCB0aGlzIGNoYW5nZSBhcHBsaWVzLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKFNldEZvbnRDb2xsZWN0aW9uKSgNCi0gICAgICAgIElEV3JpdGVGb250Q29sbGVjdGlvbiogZm9udENvbGxlY3Rpb24sDQotICAgICAgICBEV1JJVEVfVEVYVF9SQU5HRSB0ZXh0UmFuZ2UNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gU2V0IG51bGwtdGVybWluYXRlZCBmb250IGZhbWlseSBuYW1lLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGYW1pbHlOYW1lIj5Gb250IGZhbWlseSBuYW1lPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0UmFuZ2UiPlRleHQgcmFuZ2UgdG8gd2hpY2ggdGhpcyBjaGFuZ2UgYXBwbGllcy48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChTZXRGb250RmFtaWx5TmFtZSkoDQotICAgICAgICBfX2luX3ogV0NIQVIgY29uc3QqIGZvbnRGYW1pbHlOYW1lLA0KLSAgICAgICAgRFdSSVRFX1RFWFRfUkFOR0UgdGV4dFJhbmdlDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFNldCBmb250IHdlaWdodC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250V2VpZ2h0Ij5Gb250IHdlaWdodDwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UZXh0IHJhbmdlIHRvIHdoaWNoIHRoaXMgY2hhbmdlIGFwcGxpZXMuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoU2V0Rm9udFdlaWdodCkoDQotICAgICAgICBEV1JJVEVfRk9OVF9XRUlHSFQgZm9udFdlaWdodCwNCi0gICAgICAgIERXUklURV9URVhUX1JBTkdFIHRleHRSYW5nZQ0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBTZXQgZm9udCBzdHlsZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250U3R5bGUiPkZvbnQgc3R5bGU8L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRSYW5nZSI+VGV4dCByYW5nZSB0byB3aGljaCB0aGlzIGNoYW5nZSBhcHBsaWVzLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKFNldEZvbnRTdHlsZSkoDQotICAgICAgICBEV1JJVEVfRk9OVF9TVFlMRSBmb250U3R5bGUsDQotICAgICAgICBEV1JJVEVfVEVYVF9SQU5HRSB0ZXh0UmFuZ2UNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gU2V0IGZvbnQgc3RyZXRjaC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250U3RyZXRjaCI+Zm9udCBzdHJldGNoPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0UmFuZ2UiPlRleHQgcmFuZ2UgdG8gd2hpY2ggdGhpcyBjaGFuZ2UgYXBwbGllcy48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChTZXRGb250U3RyZXRjaCkoDQotICAgICAgICBEV1JJVEVfRk9OVF9TVFJFVENIIGZvbnRTdHJldGNoLA0KLSAgICAgICAgRFdSSVRFX1RFWFRfUkFOR0UgdGV4dFJhbmdlDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFNldCBmb250IGVtIGhlaWdodC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250U2l6ZSI+Rm9udCBlbSBoZWlnaHQ8L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRSYW5nZSI+VGV4dCByYW5nZSB0byB3aGljaCB0aGlzIGNoYW5nZSBhcHBsaWVzLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKFNldEZvbnRTaXplKSgNCi0gICAgICAgIEZMT0FUIGZvbnRTaXplLA0KLSAgICAgICAgRFdSSVRFX1RFWFRfUkFOR0UgdGV4dFJhbmdlDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFNldCB1bmRlcmxpbmUuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iaGFzVW5kZXJsaW5lIj5UaGUgQm9vbGVhbiBmbGFnIGluZGljYXRlcyB3aGV0aGVyIHVuZGVybGluZSB0YWtlcyBwbGFjZTwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UZXh0IHJhbmdlIHRvIHdoaWNoIHRoaXMgY2hhbmdlIGFwcGxpZXMuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoU2V0VW5kZXJsaW5lKSgNCi0gICAgICAgIEJPT0wgaGFzVW5kZXJsaW5lLA0KLSAgICAgICAgRFdSSVRFX1RFWFRfUkFOR0UgdGV4dFJhbmdlDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFNldCBzdHJpa2V0aHJvdWdoLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Imhhc1N0cmlrZXRocm91Z2giPlRoZSBCb29sZWFuIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgc3RyaWtldGhyb3VnaCB0YWtlcyBwbGFjZTwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UZXh0IHJhbmdlIHRvIHdoaWNoIHRoaXMgY2hhbmdlIGFwcGxpZXMuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoU2V0U3RyaWtldGhyb3VnaCkoDQotICAgICAgICBCT09MIGhhc1N0cmlrZXRocm91Z2gsDQotICAgICAgICBEV1JJVEVfVEVYVF9SQU5HRSB0ZXh0UmFuZ2UNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gU2V0IGFwcGxpY2F0aW9uLWRlZmluZWQgZHJhd2luZyBlZmZlY3QuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZHJhd2luZ0VmZmVjdCI+UG9pbnRlciB0byBhbiBhcHBsaWNhdGlvbi1kZWZpbmVkIGRyYXdpbmcgZWZmZWN0LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UZXh0IHJhbmdlIHRvIHdoaWNoIHRoaXMgY2hhbmdlIGFwcGxpZXMuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICAvLy8gPHJlbWFya3M+DQotICAgIC8vLyBUaGlzIGRyYXdpbmcgZWZmZWN0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIHJhbmdlIGFuZCB3aWxsIGJlIHBhc3NlZCBiYWNrDQotICAgIC8vLyB0byB0aGUgYXBwbGljYXRpb24gdmlhIHRoZSBjYWxsYmFjayB3aGVuIHRoZSByYW5nZSBpcyBkcmF3biBhdCBkcmF3aW5nIHRpbWUuDQotICAgIC8vLyA8L3JlbWFya3M+DQotICAgIFNURE1FVEhPRChTZXREcmF3aW5nRWZmZWN0KSgNCi0gICAgICAgIElVbmtub3duKiBkcmF3aW5nRWZmZWN0LA0KLSAgICAgICAgRFdSSVRFX1RFWFRfUkFOR0UgdGV4dFJhbmdlDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFNldCBpbmxpbmUgb2JqZWN0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImlubGluZU9iamVjdCI+UG9pbnRlciB0byBhbiBhcHBsaWNhdGlvbi1pbXBsZW1lbnRlZCBpbmxpbmUgb2JqZWN0LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UZXh0IHJhbmdlIHRvIHdoaWNoIHRoaXMgY2hhbmdlIGFwcGxpZXMuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICAvLy8gPHJlbWFya3M+DQotICAgIC8vLyBUaGlzIGlubGluZSBvYmplY3QgYXBwbGllcyB0byB0aGUgc3BlY2lmaWVkIHJhbmdlIGFuZCB3aWxsIGJlIHBhc3NlZCBiYWNrDQotICAgIC8vLyB0byB0aGUgYXBwbGljYXRpb24gdmlhIHRoZSBEcmF3SW5saW5lT2JqZWN0IGNhbGxiYWNrIHdoZW4gdGhlIHJhbmdlIGlzIGRyYXduLg0KLSAgICAvLy8gQW55IHRleHQgaW4gdGhhdCByYW5nZSB3aWxsIGJlIHN1cHByZXNzZWQuDQotICAgIC8vLyA8L3JlbWFya3M+DQotICAgIFNURE1FVEhPRChTZXRJbmxpbmVPYmplY3QpKA0KLSAgICAgICAgSURXcml0ZUlubGluZU9iamVjdCogaW5saW5lT2JqZWN0LA0KLSAgICAgICAgRFdSSVRFX1RFWFRfUkFOR0UgdGV4dFJhbmdlDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFNldCBmb250IHR5cG9ncmFwaHkgZmVhdHVyZXMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idHlwb2dyYXBoeSI+UG9pbnRlciB0byBmb250IHR5cG9ncmFwaHkgc2V0dGluZy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRSYW5nZSI+VGV4dCByYW5nZSB0byB3aGljaCB0aGlzIGNoYW5nZSBhcHBsaWVzLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKFNldFR5cG9ncmFwaHkpKA0KLSAgICAgICAgSURXcml0ZVR5cG9ncmFwaHkqIHR5cG9ncmFwaHksDQotICAgICAgICBEV1JJVEVfVEVYVF9SQU5HRSB0ZXh0UmFuZ2UNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gU2V0IGxvY2FsZSBuYW1lLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImxvY2FsZU5hbWUiPkxvY2FsZSBuYW1lPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0UmFuZ2UiPlRleHQgcmFuZ2UgdG8gd2hpY2ggdGhpcyBjaGFuZ2UgYXBwbGllcy48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChTZXRMb2NhbGVOYW1lKSgNCi0gICAgICAgIF9faW5feiBXQ0hBUiBjb25zdCogbG9jYWxlTmFtZSwNCi0gICAgICAgIERXUklURV9URVhUX1JBTkdFIHRleHRSYW5nZQ0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXQgbGF5b3V0IG1heGltdW0gd2lkdGgNCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgU1RETUVUSE9EXyhGTE9BVCwgR2V0TWF4V2lkdGgpKCkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0IGxheW91dCBtYXhpbXVtIGhlaWdodA0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBTVERNRVRIT0RfKEZMT0FULCBHZXRNYXhIZWlnaHQpKCkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0IHRoZSBmb250IGNvbGxlY3Rpb24gd2hlcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgYXQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iY3VycmVudFBvc2l0aW9uIj5UaGUgY3VycmVudCB0ZXh0IHBvc2l0aW9uLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udENvbGxlY3Rpb24iPlRoZSBjdXJyZW50IGZvbnQgY29sbGVjdGlvbjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UZXh0IHJhbmdlIHRvIHdoaWNoIHRoaXMgY2hhbmdlIGFwcGxpZXMuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoR2V0Rm9udENvbGxlY3Rpb24pKA0KLSAgICAgICAgVUlOVDMyIGN1cnJlbnRQb3NpdGlvbiwNCi0gICAgICAgIF9fb3V0IElEV3JpdGVGb250Q29sbGVjdGlvbioqIGZvbnRDb2xsZWN0aW9uLA0KLSAgICAgICAgX19vdXRfb3B0IERXUklURV9URVhUX1JBTkdFKiB0ZXh0UmFuZ2UgPSBOVUxMDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBmb250IGZhbWlseSBuYW1lIHdoZXJlIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIGF0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImN1cnJlbnRQb3NpdGlvbiI+VGhlIGN1cnJlbnQgdGV4dCBwb3NpdGlvbi48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Im5hbWVMZW5ndGgiPlNpemUgb2YgdGhlIGNoYXJhY3RlciBhcnJheSBpbiBjaGFyYWN0ZXIgY291bnQgbm90IGluY2x1ZGluZyB0aGUgdGVybWluYXRlZCBOVUxMIGNoYXJhY3Rlci48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRSYW5nZSI+VGhlIHBvc2l0aW9uIHJhbmdlIG9mIHRoZSBjdXJyZW50IGZvcm1hdC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRGb250RmFtaWx5TmFtZUxlbmd0aCkoDQotICAgICAgICBVSU5UMzIgY3VycmVudFBvc2l0aW9uLA0KLSAgICAgICAgX19vdXQgVUlOVDMyKiBuYW1lTGVuZ3RoLA0KLSAgICAgICAgX19vdXRfb3B0IERXUklURV9URVhUX1JBTkdFKiB0ZXh0UmFuZ2UgPSBOVUxMDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIENvcHkgdGhlIGZvbnQgZmFtaWx5IG5hbWUgd2hlcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgYXQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iY3VycmVudFBvc2l0aW9uIj5UaGUgY3VycmVudCB0ZXh0IHBvc2l0aW9uLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZhbWlseU5hbWUiPkNoYXJhY3RlciBhcnJheSB0aGF0IHJlY2VpdmVzIHRoZSBjdXJyZW50IGZvbnQgZmFtaWx5IG5hbWU8L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Im5hbWVTaXplIj5TaXplIG9mIHRoZSBjaGFyYWN0ZXIgYXJyYXkgaW4gY2hhcmFjdGVyIGNvdW50IGluY2x1ZGluZyB0aGUgdGVybWluYXRlZCBOVUxMIGNoYXJhY3Rlci48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRSYW5nZSI+VGhlIHBvc2l0aW9uIHJhbmdlIG9mIHRoZSBjdXJyZW50IGZvcm1hdC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRGb250RmFtaWx5TmFtZSkoDQotICAgICAgICBVSU5UMzIgY3VycmVudFBvc2l0aW9uLA0KLSAgICAgICAgX19vdXRfZWNvdW50X3oobmFtZVNpemUpIFdDSEFSKiBmb250RmFtaWx5TmFtZSwNCi0gICAgICAgIFVJTlQzMiBuYW1lU2l6ZSwNCi0gICAgICAgIF9fb3V0X29wdCBEV1JJVEVfVEVYVF9SQU5HRSogdGV4dFJhbmdlID0gTlVMTA0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXQgdGhlIGZvbnQgd2VpZ2h0IHdoZXJlIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIGF0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImN1cnJlbnRQb3NpdGlvbiI+VGhlIGN1cnJlbnQgdGV4dCBwb3NpdGlvbi48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRXZWlnaHQiPlRoZSBjdXJyZW50IGZvbnQgd2VpZ2h0PC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0UmFuZ2UiPlRoZSBwb3NpdGlvbiByYW5nZSBvZiB0aGUgY3VycmVudCBmb3JtYXQuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoR2V0Rm9udFdlaWdodCkoDQotICAgICAgICBVSU5UMzIgY3VycmVudFBvc2l0aW9uLA0KLSAgICAgICAgX19vdXQgRFdSSVRFX0ZPTlRfV0VJR0hUKiBmb250V2VpZ2h0LA0KLSAgICAgICAgX19vdXRfb3B0IERXUklURV9URVhUX1JBTkdFKiB0ZXh0UmFuZ2UgPSBOVUxMDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldCB0aGUgZm9udCBzdHlsZSB3aGVyZSB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBhdC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJjdXJyZW50UG9zaXRpb24iPlRoZSBjdXJyZW50IHRleHQgcG9zaXRpb24uPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250U3R5bGUiPlRoZSBjdXJyZW50IGZvbnQgc3R5bGU8L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRSYW5nZSI+VGhlIHBvc2l0aW9uIHJhbmdlIG9mIHRoZSBjdXJyZW50IGZvcm1hdC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRGb250U3R5bGUpKA0KLSAgICAgICAgVUlOVDMyIGN1cnJlbnRQb3NpdGlvbiwNCi0gICAgICAgIF9fb3V0IERXUklURV9GT05UX1NUWUxFKiBmb250U3R5bGUsDQotICAgICAgICBfX291dF9vcHQgRFdSSVRFX1RFWFRfUkFOR0UqIHRleHRSYW5nZSA9IE5VTEwNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0IHRoZSBmb250IHN0cmV0Y2ggd2hlcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgYXQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iY3VycmVudFBvc2l0aW9uIj5UaGUgY3VycmVudCB0ZXh0IHBvc2l0aW9uLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udFN0cmV0Y2giPlRoZSBjdXJyZW50IGZvbnQgc3RyZXRjaDwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UaGUgcG9zaXRpb24gcmFuZ2Ugb2YgdGhlIGN1cnJlbnQgZm9ybWF0LjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKEdldEZvbnRTdHJldGNoKSgNCi0gICAgICAgIFVJTlQzMiBjdXJyZW50UG9zaXRpb24sDQotICAgICAgICBfX291dCBEV1JJVEVfRk9OVF9TVFJFVENIKiBmb250U3RyZXRjaCwNCi0gICAgICAgIF9fb3V0X29wdCBEV1JJVEVfVEVYVF9SQU5HRSogdGV4dFJhbmdlID0gTlVMTA0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXQgdGhlIGZvbnQgZW0gaGVpZ2h0IHdoZXJlIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIGF0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImN1cnJlbnRQb3NpdGlvbiI+VGhlIGN1cnJlbnQgdGV4dCBwb3NpdGlvbi48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRTaXplIj5UaGUgY3VycmVudCBmb250IGVtIGhlaWdodDwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UaGUgcG9zaXRpb24gcmFuZ2Ugb2YgdGhlIGN1cnJlbnQgZm9ybWF0LjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKEdldEZvbnRTaXplKSgNCi0gICAgICAgIFVJTlQzMiBjdXJyZW50UG9zaXRpb24sDQotICAgICAgICBfX291dCBGTE9BVCogZm9udFNpemUsDQotICAgICAgICBfX291dF9vcHQgRFdSSVRFX1RFWFRfUkFOR0UqIHRleHRSYW5nZSA9IE5VTEwNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0IHRoZSB1bmRlcmxpbmUgcHJlc2VuY2Ugd2hlcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgYXQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iY3VycmVudFBvc2l0aW9uIj5UaGUgY3VycmVudCB0ZXh0IHBvc2l0aW9uLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iaGFzVW5kZXJsaW5lIj5UaGUgQm9vbGVhbiBmbGFnIGluZGljYXRlcyB3aGV0aGVyIHRleHQgaXMgdW5kZXJsaW5lZC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRSYW5nZSI+VGhlIHBvc2l0aW9uIHJhbmdlIG9mIHRoZSBjdXJyZW50IGZvcm1hdC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRVbmRlcmxpbmUpKA0KLSAgICAgICAgVUlOVDMyIGN1cnJlbnRQb3NpdGlvbiwNCi0gICAgICAgIF9fb3V0IEJPT0wqIGhhc1VuZGVybGluZSwNCi0gICAgICAgIF9fb3V0X29wdCBEV1JJVEVfVEVYVF9SQU5HRSogdGV4dFJhbmdlID0gTlVMTA0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXQgdGhlIHN0cmlrZXRocm91Z2ggcHJlc2VuY2Ugd2hlcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgYXQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iY3VycmVudFBvc2l0aW9uIj5UaGUgY3VycmVudCB0ZXh0IHBvc2l0aW9uLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iaGFzU3RyaWtldGhyb3VnaCI+VGhlIEJvb2xlYW4gZmxhZyBpbmRpY2F0ZXMgd2hldGhlciB0ZXh0IGhhcyBzdHJpa2V0aHJvdWdoLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UaGUgcG9zaXRpb24gcmFuZ2Ugb2YgdGhlIGN1cnJlbnQgZm9ybWF0LjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKEdldFN0cmlrZXRocm91Z2gpKA0KLSAgICAgICAgVUlOVDMyIGN1cnJlbnRQb3NpdGlvbiwNCi0gICAgICAgIF9fb3V0IEJPT0wqIGhhc1N0cmlrZXRocm91Z2gsDQotICAgICAgICBfX291dF9vcHQgRFdSSVRFX1RFWFRfUkFOR0UqIHRleHRSYW5nZSA9IE5VTEwNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0IHRoZSBhcHBsaWNhdGlvbi1kZWZpbmVkIGRyYXdpbmcgZWZmZWN0IHdoZXJlIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIGF0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImN1cnJlbnRQb3NpdGlvbiI+VGhlIGN1cnJlbnQgdGV4dCBwb3NpdGlvbi48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImRyYXdpbmdFZmZlY3QiPlRoZSBjdXJyZW50IGFwcGxpY2F0aW9uLWRlZmluZWQgZHJhd2luZyBlZmZlY3QuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0UmFuZ2UiPlRoZSBwb3NpdGlvbiByYW5nZSBvZiB0aGUgY3VycmVudCBmb3JtYXQuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoR2V0RHJhd2luZ0VmZmVjdCkoDQotICAgICAgICBVSU5UMzIgY3VycmVudFBvc2l0aW9uLA0KLSAgICAgICAgX19vdXQgSVVua25vd24qKiBkcmF3aW5nRWZmZWN0LA0KLSAgICAgICAgX19vdXRfb3B0IERXUklURV9URVhUX1JBTkdFKiB0ZXh0UmFuZ2UgPSBOVUxMDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldCB0aGUgaW5saW5lIG9iamVjdCBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iY3VycmVudFBvc2l0aW9uIj5UaGUgZ2l2ZW4gdGV4dCBwb3NpdGlvbi48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImlubGluZU9iamVjdCI+VGhlIGlubGluZSBvYmplY3QuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0UmFuZ2UiPlRoZSBwb3NpdGlvbiByYW5nZSBvZiB0aGUgY3VycmVudCBmb3JtYXQuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoR2V0SW5saW5lT2JqZWN0KSgNCi0gICAgICAgIFVJTlQzMiBjdXJyZW50UG9zaXRpb24sDQotICAgICAgICBfX291dCBJRFdyaXRlSW5saW5lT2JqZWN0KiogaW5saW5lT2JqZWN0LA0KLSAgICAgICAgX19vdXRfb3B0IERXUklURV9URVhUX1JBTkdFKiB0ZXh0UmFuZ2UgPSBOVUxMDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldCB0aGUgdHlwb2dyYXBoeSBzZXR0aW5nIHdoZXJlIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIGF0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImN1cnJlbnRQb3NpdGlvbiI+VGhlIGN1cnJlbnQgdGV4dCBwb3NpdGlvbi48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InR5cG9ncmFwaHkiPlRoZSBjdXJyZW50IHR5cG9ncmFwaHkgc2V0dGluZy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRSYW5nZSI+VGhlIHBvc2l0aW9uIHJhbmdlIG9mIHRoZSBjdXJyZW50IGZvcm1hdC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRUeXBvZ3JhcGh5KSgNCi0gICAgICAgIFVJTlQzMiBjdXJyZW50UG9zaXRpb24sDQotICAgICAgICBfX291dCBJRFdyaXRlVHlwb2dyYXBoeSoqIHR5cG9ncmFwaHksDQotICAgICAgICBfX291dF9vcHQgRFdSSVRFX1RFWFRfUkFOR0UqIHRleHRSYW5nZSA9IE5VTEwNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0IHRoZSBsZW5ndGggb2YgdGhlIGxvY2FsZSBuYW1lIHdoZXJlIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIGF0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImN1cnJlbnRQb3NpdGlvbiI+VGhlIGN1cnJlbnQgdGV4dCBwb3NpdGlvbi48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Im5hbWVMZW5ndGgiPlNpemUgb2YgdGhlIGNoYXJhY3RlciBhcnJheSBpbiBjaGFyYWN0ZXIgY291bnQgbm90IGluY2x1ZGluZyB0aGUgdGVybWluYXRlZCBOVUxMIGNoYXJhY3Rlci48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRSYW5nZSI+VGhlIHBvc2l0aW9uIHJhbmdlIG9mIHRoZSBjdXJyZW50IGZvcm1hdC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRMb2NhbGVOYW1lTGVuZ3RoKSgNCi0gICAgICAgIFVJTlQzMiBjdXJyZW50UG9zaXRpb24sDQotICAgICAgICBfX291dCBVSU5UMzIqIG5hbWVMZW5ndGgsDQotICAgICAgICBfX291dF9vcHQgRFdSSVRFX1RFWFRfUkFOR0UqIHRleHRSYW5nZSA9IE5VTEwNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0IHRoZSBsb2NhbGUgbmFtZSB3aGVyZSB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBhdC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJjdXJyZW50UG9zaXRpb24iPlRoZSBjdXJyZW50IHRleHQgcG9zaXRpb24uPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJsb2NhbGVOYW1lIj5DaGFyYWN0ZXIgYXJyYXkgdGhhdCByZWNlaXZlcyB0aGUgY3VycmVudCBsb2NhbGUgbmFtZTwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ibmFtZVNpemUiPlNpemUgb2YgdGhlIGNoYXJhY3RlciBhcnJheSBpbiBjaGFyYWN0ZXIgY291bnQgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGVkIE5VTEwgY2hhcmFjdGVyLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UaGUgcG9zaXRpb24gcmFuZ2Ugb2YgdGhlIGN1cnJlbnQgZm9ybWF0LjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKEdldExvY2FsZU5hbWUpKA0KLSAgICAgICAgVUlOVDMyIGN1cnJlbnRQb3NpdGlvbiwNCi0gICAgICAgIF9fb3V0X2Vjb3VudF96KG5hbWVTaXplKSBXQ0hBUiogbG9jYWxlTmFtZSwNCi0gICAgICAgIFVJTlQzMiBuYW1lU2l6ZSwNCi0gICAgICAgIF9fb3V0X29wdCBEV1JJVEVfVEVYVF9SQU5HRSogdGV4dFJhbmdlID0gTlVMTA0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBJbml0aWF0ZSBkcmF3aW5nIG9mIHRoZSB0ZXh0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImNsaWVudERyYXdpbmdDb250ZXh0Ij5BbiBhcHBsaWNhdGlvbiBkZWZpbmVkIHZhbHVlDQotICAgIC8vLyBpbmNsdWRlZCBpbiByZW5kZXJpbmcgY2FsbGJhY2tzLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0icmVuZGVyZXIiPlRoZSBzZXQgb2YgYXBwbGljYXRpb24tZGVmaW5lZCBjYWxsYmFja3MgdGhhdCBkbw0KLSAgICAvLy8gdGhlIGFjdHVhbCByZW5kZXJpbmcuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJvcmlnaW5YIj5YLWNvb3JkaW5hdGUgb2YgdGhlIGxheW91dCdzIGxlZnQgc2lkZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Im9yaWdpblkiPlktY29vcmRpbmF0ZSBvZiB0aGUgbGF5b3V0J3MgdG9wIHNpZGUuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoRHJhdykoDQotICAgICAgICBfX21heWJlbnVsbCB2b2lkKiBjbGllbnREcmF3aW5nQ29udGV4dCwNCi0gICAgICAgIElEV3JpdGVUZXh0UmVuZGVyZXIqIHJlbmRlcmVyLA0KLSAgICAgICAgRkxPQVQgb3JpZ2luWCwNCi0gICAgICAgIEZMT0FUIG9yaWdpblkNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0TGluZU1ldHJpY3MgcmV0dXJucyBwcm9wZXJ0aWVzIG9mIGVhY2ggbGluZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJsaW5lTWV0cmljcyI+VGhlIGFycmF5IHRvIGZpbGwgd2l0aCBsaW5lIGluZm9ybWF0aW9uLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ibWF4TGluZUNvdW50Ij5UaGUgbWF4aW11bSBzaXplIG9mIHRoZSBsaW5lTWV0cmljcyBhcnJheS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImFjdHVhbExpbmVDb3VudCI+VGhlIGFjdHVhbCBzaXplIG9mIHRoZSBsaW5lTWV0cmljcw0KLSAgICAvLy8gYXJyYXkgdGhhdCBpcyBuZWVkZWQuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICAvLy8gPHJlbWFya3M+DQotICAgIC8vLyBJZiBtYXhMaW5lQ291bnQgaXMgbm90IGxhcmdlIGVub3VnaCBFX05PVF9TVUZGSUNJRU5UX0JVRkZFUiwgDQotICAgIC8vLyB3aGljaCBpcyBlcXVpdmFsZW50IHRvIEhSRVNVTFRfRlJPTV9XSU4zMihFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSKSwNCi0gICAgLy8vIGlzIHJldHVybmVkIGFuZCAqYWN0dWFsTGluZUNvdW50IGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIGxpbmVzDQotICAgIC8vLyBuZWVkZWQuDQotICAgIC8vLyA8L3JlbWFya3M+DQotICAgIFNURE1FVEhPRChHZXRMaW5lTWV0cmljcykoDQotICAgICAgICBfX291dF9lY291bnRfb3B0KG1heExpbmVDb3VudCkgRFdSSVRFX0xJTkVfTUVUUklDUyogbGluZU1ldHJpY3MsDQotICAgICAgICBVSU5UMzIgbWF4TGluZUNvdW50LA0KLSAgICAgICAgX19vdXQgVUlOVDMyKiBhY3R1YWxMaW5lQ291bnQNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0TWV0cmljcyByZXRyaWV2ZXMgb3ZlcmFsbCBtZXRyaWNzIGZvciB0aGUgZm9ybWF0dGVkIHN0cmluZy4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0TWV0cmljcyI+VGhlIHJldHVybmVkIG1ldHJpY3MuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICAvLy8gPHJlbWFya3M+DQotICAgIC8vLyBEcmF3aW5nIGVmZmVjdHMgbGlrZSB1bmRlcmxpbmUgYW5kIHN0cmlrZXRocm91Z2ggZG8gbm90IGNvbnRyaWJ1dGUNCi0gICAgLy8vIHRvIHRoZSB0ZXh0IHNpemUsIHdoaWNoIGlzIGVzc2VudGlhbGx5IHRoZSBzdW0gb2YgYWR2YW5jZSB3aWR0aHMgYW5kDQotICAgIC8vLyBsaW5lIGhlaWdodHMuIEFkZGl0aW9uYWxseSwgdmlzaWJsZSBzd2FzaGVzIGFuZCBvdGhlciBncmFwaGljDQotICAgIC8vLyBhZG9ybm1lbnRzIG1heSBleHRlbmQgb3V0c2lkZSB0aGUgcmV0dXJuZWQgd2lkdGggYW5kIGhlaWdodC4NCi0gICAgLy8vIDwvcmVtYXJrcz4NCi0gICAgU1RETUVUSE9EKEdldE1ldHJpY3MpKA0KLSAgICAgICAgX19vdXQgRFdSSVRFX1RFWFRfTUVUUklDUyogdGV4dE1ldHJpY3MNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0T3ZlcmhhbmdNZXRyaWNzIHJldHVybnMgdGhlIG92ZXJoYW5ncyAoaW4gRElQcykgb2YgdGhlIGxheW91dCBhbmQgYWxsDQotICAgIC8vLyBvYmplY3RzIGNvbnRhaW5lZCBpbiBpdCwgaW5jbHVkaW5nIHRleHQgZ2x5cGhzIGFuZCBpbmxpbmUgb2JqZWN0cy4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJvdmVyaGFuZ3MiPk92ZXJzaG9vdHMgb2YgdmlzaWJsZSBleHRlbnRzIChpbiBESVBzKSBvdXRzaWRlIHRoZSBsYXlvdXQuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICAvLy8gPHJlbWFya3M+DQotICAgIC8vLyBBbnkgdW5kZXJsaW5lIGFuZCBzdHJpa2V0aHJvdWdoIGRvIG5vdCBjb250cmlidXRlIHRvIHRoZSBibGFjayBib3gNCi0gICAgLy8vIGRldGVybWluYXRpb24sIHNpbmNlIHRoZXNlIGFyZSBhY3R1YWxseSBkcmF3biBieSB0aGUgcmVuZGVyZXIsIHdoaWNoDQotICAgIC8vLyBpcyBhbGxvd2VkIHRvIGRyYXcgdGhlbSBpbiBhbnkgdmFyaWV0eSBvZiBzdHlsZXMuDQotICAgIC8vLyA8L3JlbWFya3M+DQotICAgIFNURE1FVEhPRChHZXRPdmVyaGFuZ01ldHJpY3MpKA0KLSAgICAgICAgX19vdXQgRFdSSVRFX09WRVJIQU5HX01FVFJJQ1MqIG92ZXJoYW5ncw0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBSZXRyaWV2ZSBsb2dpY2FsIHByb3BlcnRpZXMgYW5kIG1lYXN1cmVtZW50IG9mIGVhY2ggY2x1c3Rlci4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJjbHVzdGVyTWV0cmljcyI+VGhlIGFycmF5IHRvIGZpbGwgd2l0aCBjbHVzdGVyIGluZm9ybWF0aW9uLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ibWF4Q2x1c3RlckNvdW50Ij5UaGUgbWF4aW11bSBzaXplIG9mIHRoZSBjbHVzdGVyTWV0cmljcyBhcnJheS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImFjdHVhbENsdXN0ZXJDb3VudCI+VGhlIGFjdHVhbCBzaXplIG9mIHRoZSBjbHVzdGVyTWV0cmljcyBhcnJheSB0aGF0IGlzIG5lZWRlZC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIC8vLyA8cmVtYXJrcz4NCi0gICAgLy8vIElmIG1heENsdXN0ZXJDb3VudCBpcyBub3QgbGFyZ2UgZW5vdWdoIEVfTk9UX1NVRkZJQ0lFTlRfQlVGRkVSLCANCi0gICAgLy8vIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gSFJFU1VMVF9GUk9NX1dJTjMyKEVSUk9SX0lOU1VGRklDSUVOVF9CVUZGRVIpLCANCi0gICAgLy8vIGlzIHJldHVybmVkIGFuZCAqYWN0dWFsQ2x1c3RlckNvdW50IGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIGNsdXN0ZXJzDQotICAgIC8vLyBuZWVkZWQuDQotICAgIC8vLyA8L3JlbWFya3M+DQotICAgIFNURE1FVEhPRChHZXRDbHVzdGVyTWV0cmljcykoDQotICAgICAgICBfX291dF9lY291bnRfb3B0KG1heENsdXN0ZXJDb3VudCkgRFdSSVRFX0NMVVNURVJfTUVUUklDUyogY2x1c3Rlck1ldHJpY3MsDQotICAgICAgICBVSU5UMzIgbWF4Q2x1c3RlckNvdW50LA0KLSAgICAgICAgX19vdXQgVUlOVDMyKiBhY3R1YWxDbHVzdGVyQ291bnQNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gRGV0ZXJtaW5lcyB0aGUgbWluaW11bSBwb3NzaWJsZSB3aWR0aCB0aGUgbGF5b3V0IGNhbiBiZSBzZXQgdG8gd2l0aG91dA0KLSAgICAvLy8gZW1lcmdlbmN5IGJyZWFraW5nIGJldHdlZW4gdGhlIGNoYXJhY3RlcnMgb2Ygd2hvbGUgd29yZHMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ibWluV2lkdGgiPk1pbmltdW0gd2lkdGguPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoRGV0ZXJtaW5lTWluV2lkdGgpKA0KLSAgICAgICAgX19vdXQgRkxPQVQqIG1pbldpZHRoDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdpdmVuIGEgY29vcmRpbmF0ZSAoaW4gRElQcykgcmVsYXRpdmUgdG8gdGhlIHRvcC1sZWZ0IG9mIHRoZSBsYXlvdXQgYm94LA0KLSAgICAvLy8gdGhpcyByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGhpdC10ZXN0IG1ldHJpY3Mgb2YgdGhlIHRleHQgc3RyaW5nIHdoZXJlDQotICAgIC8vLyB0aGUgaGl0LXRlc3QgaGFzIG9jY3VycmVkLiBUaGlzIGlzIHVzZWZ1bCBmb3IgbWFwcGluZyBtb3VzZSBjbGlja3MgdG8gY2FyZXQNCi0gICAgLy8vIHBvc2l0aW9ucy4gV2hlbiB0aGUgZ2l2ZW4gY29vcmRpbmF0ZSBpcyBvdXRzaWRlIHRoZSB0ZXh0IHN0cmluZywgdGhlIGZ1bmN0aW9uDQotICAgIC8vLyBzZXRzIHRoZSBvdXRwdXQgdmFsdWUgKmlzSW5zaWRlIHRvIGZhbHNlIGJ1dCByZXR1cm5zIHRoZSBuZWFyZXN0IGNoYXJhY3Rlcg0KLSAgICAvLy8gcG9zaXRpb24uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0icG9pbnRYIj5YIGNvb3JkaW5hdGUgdG8gaGl0LXRlc3QsIHJlbGF0aXZlIHRvIHRoZSB0b3AtbGVmdCBsb2NhdGlvbiBvZiB0aGUgbGF5b3V0IGJveC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InBvaW50WSI+WSBjb29yZGluYXRlIHRvIGhpdC10ZXN0LCByZWxhdGl2ZSB0byB0aGUgdG9wLWxlZnQgbG9jYXRpb24gb2YgdGhlIGxheW91dCBib3guPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJpc1RyYWlsaW5nSGl0Ij5PdXRwdXQgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGhpdC10ZXN0IGxvY2F0aW9uIGlzIGF0IHRoZSBsZWFkaW5nIG9yIHRoZSB0cmFpbGluZw0KLSAgICAvLy8gICAgIHNpZGUgb2YgdGhlIGNoYXJhY3Rlci4gV2hlbiB0aGUgb3V0cHV0ICppc0luc2lkZSB2YWx1ZSBpcyBzZXQgdG8gZmFsc2UsIHRoaXMgdmFsdWUgaXMgc2V0IGFjY29yZGluZyB0byB0aGUgb3V0cHV0DQotICAgIC8vLyAgICAgKnBvc2l0aW9uIHZhbHVlIHRvIHJlcHJlc2VudCB0aGUgZWRnZSBjbG9zZXN0IHRvIHRoZSBoaXQtdGVzdCBsb2NhdGlvbi4gPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJpc0luc2lkZSI+T3V0cHV0IGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBoaXQtdGVzdCBsb2NhdGlvbiBpcyBpbnNpZGUgdGhlIHRleHQgc3RyaW5nLg0KLSAgICAvLy8gICAgIFdoZW4gZmFsc2UsIHRoZSBwb3NpdGlvbiBuZWFyZXN0IHRoZSB0ZXh0J3MgZWRnZSBpcyByZXR1cm5lZC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImhpdFRlc3RNZXRyaWNzIj5PdXRwdXQgZ2VvbWV0cnkgZnVsbHkgZW5jbG9zaW5nIHRoZSBoaXQtdGVzdCBsb2NhdGlvbi4gV2hlbiB0aGUgb3V0cHV0ICppc0luc2lkZSB2YWx1ZQ0KLSAgICAvLy8gICAgIGlzIHNldCB0byBmYWxzZSwgdGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgZ2VvbWV0cnkgZW5jbG9zaW5nIHRoZSBlZGdlIGNsb3Nlc3QgdG8gdGhlIGhpdC10ZXN0IGxvY2F0aW9uLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKEhpdFRlc3RQb2ludCkoDQotICAgICAgICBGTE9BVCBwb2ludFgsDQotICAgICAgICBGTE9BVCBwb2ludFksDQotICAgICAgICBfX291dCBCT09MKiBpc1RyYWlsaW5nSGl0LA0KLSAgICAgICAgX19vdXQgQk9PTCogaXNJbnNpZGUsDQotICAgICAgICBfX291dCBEV1JJVEVfSElUX1RFU1RfTUVUUklDUyogaGl0VGVzdE1ldHJpY3MNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2l2ZW4gYSB0ZXh0IHBvc2l0aW9uIGFuZCB3aGV0aGVyIHRoZSBjYXJldCBpcyBvbiB0aGUgbGVhZGluZyBvciB0cmFpbGluZw0KLSAgICAvLy8gZWRnZSBvZiB0aGF0IHBvc2l0aW9uLCB0aGlzIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgY29vcmRpbmF0ZSAoaW4gRElQcykNCi0gICAgLy8vIHJlbGF0aXZlIHRvIHRoZSB0b3AtbGVmdCBvZiB0aGUgbGF5b3V0IGJveC4gVGhpcyBpcyBtb3N0IHVzZWZ1bCBmb3IgZHJhd2luZw0KLSAgICAvLy8gdGhlIGNhcmV0J3MgY3VycmVudCBwb3NpdGlvbiwgYnV0IGl0IGNvdWxkIGFsc28gYmUgdXNlZCB0byBhbmNob3IgYW4gSU1FIHRvIHRoZQ0KLSAgICAvLy8gdHlwZWQgdGV4dCBvciBhdHRhY2ggYSBmbG9hdGluZyBtZW51IG5lYXIgdGhlIHBvaW50IG9mIGludGVyZXN0LiBJdCBtYXkgYWxzbyBiZQ0KLSAgICAvLy8gdXNlZCB0byBwcm9ncmFtbWF0aWNhbGx5IG9idGFpbiB0aGUgZ2VvbWV0cnkgb2YgYSBwYXJ0aWN1bGFyIHRleHQgcG9zaXRpb24NCi0gICAgLy8vIGZvciBVSSBhdXRvbWF0aW9uLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRQb3NpdGlvbiI+VGV4dCBwb3NpdGlvbiB0byBnZXQgdGhlIGNvb3JkaW5hdGUgb2YuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJpc1RyYWlsaW5nSGl0Ij5GbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgbG9jYXRpb24gaXMgb2YgdGhlIGxlYWRpbmcgb3IgdGhlIHRyYWlsaW5nIHNpZGUgb2YgdGhlIHNwZWNpZmllZCB0ZXh0IHBvc2l0aW9uLiA8L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InBvaW50WCI+T3V0cHV0IGNhcmV0IFgsIHJlbGF0aXZlIHRvIHRoZSB0b3AtbGVmdCBvZiB0aGUgbGF5b3V0IGJveC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InBvaW50WSI+T3V0cHV0IGNhcmV0IFksIHJlbGF0aXZlIHRvIHRoZSB0b3AtbGVmdCBvZiB0aGUgbGF5b3V0IGJveC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImhpdFRlc3RNZXRyaWNzIj5PdXRwdXQgZ2VvbWV0cnkgZnVsbHkgZW5jbG9zaW5nIHRoZSBzcGVjaWZpZWQgdGV4dCBwb3NpdGlvbi48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIC8vLyA8cmVtYXJrcz4NCi0gICAgLy8vIFdoZW4gZHJhd2luZyBhIGNhcmV0IGF0IHRoZSByZXR1cm5lZCBYLFksIGl0IHNob3VsZCBzaG91bGQgYmUgY2VudGVyZWQgb24gWA0KLSAgICAvLy8gYW5kIGRyYXduIGZyb20gdGhlIFkgY29vcmRpbmF0ZSBkb3duLiBUaGUgaGVpZ2h0IHdpbGwgYmUgdGhlIHNpemUgb2YgdGhlDQotICAgIC8vLyBoaXQtdGVzdGVkIHRleHQgKHdoaWNoIGNhbiB2YXJ5IGluIHNpemUgd2l0aGluIGEgbGluZSkuDQotICAgIC8vLyBSZWFkaW5nIGRpcmVjdGlvbiBhbHNvIGFmZmVjdHMgd2hpY2ggc2lkZSBvZiB0aGUgY2hhcmFjdGVyIHRoZSBjYXJldCBpcyBkcmF3bi4NCi0gICAgLy8vIEhvd2V2ZXIsIHRoZSByZXR1cm5lZCBYIGNvb3JkaW5hdGUgd2lsbCBiZSBjb3JyZWN0IGZvciBlaXRoZXIgY2FzZS4NCi0gICAgLy8vIFlvdSBjYW4gZ2V0IGEgdGV4dCBsZW5ndGggYmFjayB0aGF0IGlzIGxhcmdlciB0aGFuIGEgc2luZ2xlIGNoYXJhY3Rlci4NCi0gICAgLy8vIFRoaXMgaGFwcGVucyBmb3IgY29tcGxleCBzY3JpcHRzIHdoZW4gbXVsdGlwbGUgY2hhcmFjdGVycyBmb3JtIGEgc2luZ2xlIGNsdXN0ZXIsDQotICAgIC8vLyB3aGVuIGRpYWNyaXRpY3Mgam9pbiB0aGVpciBiYXNlIGNoYXJhY3Rlciwgb3Igd2hlbiB5b3UgdGVzdCBhIHN1cnJvZ2F0ZSBwYWlyLg0KLSAgICAvLy8gPC9yZW1hcmtzPg0KLSAgICBTVERNRVRIT0QoSGl0VGVzdFRleHRQb3NpdGlvbikoDQotICAgICAgICBVSU5UMzIgdGV4dFBvc2l0aW9uLA0KLSAgICAgICAgQk9PTCBpc1RyYWlsaW5nSGl0LA0KLSAgICAgICAgX19vdXQgRkxPQVQqIHBvaW50WCwNCi0gICAgICAgIF9fb3V0IEZMT0FUKiBwb2ludFksDQotICAgICAgICBfX291dCBEV1JJVEVfSElUX1RFU1RfTUVUUklDUyogaGl0VGVzdE1ldHJpY3MNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVGhlIGFwcGxpY2F0aW9uIGNhbGxzIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IGEgc2V0IG9mIGhpdC10ZXN0IG1ldHJpY3MNCi0gICAgLy8vIGNvcnJlc3BvbmRpbmcgdG8gYSByYW5nZSBvZiB0ZXh0IHBvc2l0aW9ucy4gVGhlIG1haW4gdXNhZ2UgZm9yIHRoaXMNCi0gICAgLy8vIGlzIHRvIGRyYXcgaGlnaGxpZ2h0ZWQgc2VsZWN0aW9uIG9mIHRoZSB0ZXh0IHN0cmluZy4NCi0gICAgLy8vDQotICAgIC8vLyBUaGUgZnVuY3Rpb24gcmV0dXJucyBFX05PVF9TVUZGSUNJRU5UX0JVRkZFUiwgd2hpY2ggaXMgZXF1aXZhbGVudCB0byANCi0gICAgLy8vIEhSRVNVTFRfRlJPTV9XSU4zMihFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSKSwgd2hlbiB0aGUgYnVmZmVyIHNpemUgb2YNCi0gICAgLy8vIGhpdFRlc3RNZXRyaWNzIGlzIHRvbyBzbWFsbCB0byBob2xkIGFsbCB0aGUgcmVnaW9ucyBjYWxjdWxhdGVkIGJ5IHRoZQ0KLSAgICAvLy8gZnVuY3Rpb24uIEluIHN1Y2ggc2l0dWF0aW9uLCB0aGUgZnVuY3Rpb24gc2V0cyB0aGUgb3V0cHV0IHZhbHVlDQotICAgIC8vLyAqYWN0dWFsSGl0VGVzdE1ldHJpY3NDb3VudCB0byB0aGUgbnVtYmVyIG9mIGdlb21ldHJpZXMgY2FsY3VsYXRlZC4NCi0gICAgLy8vIFRoZSBhcHBsaWNhdGlvbiBpcyByZXNwb25zaWJsZSB0byBhbGxvY2F0ZSBhIG5ldyBidWZmZXIgb2YgZ3JlYXRlcg0KLSAgICAvLy8gc2l6ZSBhbmQgY2FsbCB0aGUgZnVuY3Rpb24gYWdhaW4uDQotICAgIC8vLw0KLSAgICAvLy8gQSBnb29kIHZhbHVlIHRvIHVzZSBhcyBhbiBpbml0aWFsIHZhbHVlIGZvciBtYXhIaXRUZXN0TWV0cmljc0NvdW50IG1heQ0KLSAgICAvLy8gYmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBmb2xsb3dpbmcgZXF1YXRpb246DQotICAgIC8vLyAgICAgbWF4SGl0VGVzdE1ldHJpY3NDb3VudCA9IGxpbmVDb3VudCAqIG1heEJpZGlSZW9yZGVyaW5nRGVwdGgNCi0gICAgLy8vDQotICAgIC8vLyB3aGVyZSBsaW5lQ291bnQgaXMgb2J0YWluZWQgZnJvbSB0aGUgdmFsdWUgb2YgdGhlIG91dHB1dCBhcmd1bWVudA0KLSAgICAvLy8gKmFjdHVhbExpbmVDb3VudCBmcm9tIHRoZSBmdW5jdGlvbiBJRFdyaXRlVGV4dExheW91dDo6R2V0TGluZU1ldHJpY3MsDQotICAgIC8vLyBhbmQgdGhlIG1heEJpZGlSZW9yZGVyaW5nRGVwdGggdmFsdWUgZnJvbSB0aGUgRFdSSVRFX1RFWFRfTUVUUklDUw0KLSAgICAvLy8gc3RydWN0dXJlIG9mIHRoZSBvdXRwdXQgYXJndW1lbnQgKnRleHRNZXRyaWNzIGZyb20gdGhlIGZ1bmN0aW9uDQotICAgIC8vLyBJRFdyaXRlRmFjdG9yeTo6Q3JlYXRlVGV4dExheW91dC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0UG9zaXRpb24iPkZpcnN0IHRleHQgcG9zaXRpb24gb2YgdGhlIHNwZWNpZmllZCByYW5nZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRMZW5ndGgiPk51bWJlciBvZiBwb3NpdGlvbnMgb2YgdGhlIHNwZWNpZmllZCByYW5nZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Im9yaWdpblgiPk9mZnNldCBvZiB0aGUgWCBvcmlnaW4gKGxlZnQgb2YgdGhlIGxheW91dCBib3gpIHdoaWNoIGlzIGFkZGVkIHRvIGVhY2ggb2YgdGhlIGhpdC10ZXN0IG1ldHJpY3MgcmV0dXJuZWQuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJvcmlnaW5ZIj5PZmZzZXQgb2YgdGhlIFkgb3JpZ2luICh0b3Agb2YgdGhlIGxheW91dCBib3gpIHdoaWNoIGlzIGFkZGVkIHRvIGVhY2ggb2YgdGhlIGhpdC10ZXN0IG1ldHJpY3MgcmV0dXJuZWQuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJoaXRUZXN0TWV0cmljcyI+UG9pbnRlciB0byBhIGJ1ZmZlciBvZiB0aGUgb3V0cHV0IGdlb21ldHJ5IGZ1bGx5IGVuY2xvc2luZyB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIHJhbmdlLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ibWF4SGl0VGVzdE1ldHJpY3NDb3VudCI+TWF4aW11bSBudW1iZXIgb2YgZGlzdGluY3QgbWV0cmljcyBpdCBjb3VsZCBob2xkIGluIGl0cyBidWZmZXIgbWVtb3J5LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iYWN0dWFsSGl0VGVzdE1ldHJpY3NDb3VudCI+QWN0dWFsIG51bWJlciBvZiBtZXRyaWNzIHJldHVybmVkIG9yIG5lZWRlZC48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIC8vLyA8cmVtYXJrcz4NCi0gICAgLy8vIFRoZXJlIGFyZSBubyBnYXBzIGluIHRoZSByZXR1cm5lZCBtZXRyaWNzLiBXaGlsZSB0aGVyZSBjb3VsZCBiZSB2aXN1YWwgZ2FwcywNCi0gICAgLy8vIGRlcGVuZGluZyBvbiBiaWRpIG9yZGVyaW5nLCBlYWNoIHJhbmdlIGlzIGNvbnRpZ3VvdXMgYW5kIHJlcG9ydHMgYWxsIHRoZSB0ZXh0LA0KLSAgICAvLy8gaW5jbHVkaW5nIGFueSBoaWRkZW4gY2hhcmFjdGVycyBhbmQgdHJpbW1lZCB0ZXh0Lg0KLSAgICAvLy8gVGhlIGhlaWdodCBvZiBlYWNoIHJldHVybmVkIHJhbmdlIHdpbGwgYmUgdGhlIHNhbWUgd2l0aGluIGVhY2ggbGluZSwgcmVnYXJkbGVzcw0KLSAgICAvLy8gb2YgaG93IHRoZSBmb250IHNpemVzIHZhcnkuDQotICAgIC8vLyA8L3JlbWFya3M+DQotICAgIFNURE1FVEhPRChIaXRUZXN0VGV4dFJhbmdlKSgNCi0gICAgICAgIFVJTlQzMiB0ZXh0UG9zaXRpb24sDQotICAgICAgICBVSU5UMzIgdGV4dExlbmd0aCwNCi0gICAgICAgIEZMT0FUIG9yaWdpblgsDQotICAgICAgICBGTE9BVCBvcmlnaW5ZLA0KLSAgICAgICAgX19vdXRfZWNvdW50X29wdChtYXhIaXRUZXN0TWV0cmljc0NvdW50KSBEV1JJVEVfSElUX1RFU1RfTUVUUklDUyogaGl0VGVzdE1ldHJpY3MsDQotICAgICAgICBVSU5UMzIgbWF4SGl0VGVzdE1ldHJpY3NDb3VudCwNCi0gICAgICAgIF9fb3V0IFVJTlQzMiogYWN0dWFsSGl0VGVzdE1ldHJpY3NDb3VudA0KLSAgICAgICAgKSBQVVJFOw0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBFbmNhcHN1bGF0ZXMgYSAzMi1iaXQgZGV2aWNlIGluZGVwZW5kZW50IGJpdG1hcCBhbmQgZGV2aWNlIGNvbnRleHQsIHdoaWNoIGNhbiBiZSB1c2VkIGZvciByZW5kZXJpbmcgZ2x5cGhzLg0KLS8vLyA8L3N1bW1hcnk+DQotaW50ZXJmYWNlIERXUklURV9ERUNMQVJFX0lOVEVSRkFDRSgiNWU1YTMyYTMtOGRmZi00NzczLTlmZjYtMDY5NmVhYjc3MjY3IikgSURXcml0ZUJpdG1hcFJlbmRlclRhcmdldCA6IHB1YmxpYyBJVW5rbm93bg0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gRHJhd3MgYSBydW4gb2YgZ2x5cGhzIHRvIHRoZSBiaXRtYXAuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iYmFzZWxpbmVPcmlnaW5YIj5Ib3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBiYXNlbGluZSBvcmlnaW4sIGluIERJUHMsIHJlbGF0aXZlIHRvIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgRElCLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iYmFzZWxpbmVPcmlnaW5ZIj5WZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgYmFzZWxpbmUgb3JpZ2luLCBpbiBESVBzLCByZWxhdGl2ZSB0byB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIERJQi48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Im1lYXN1cmluZ01vZGUiPlNwZWNpZmllcyBtZWFzdXJpbmcgbWV0aG9kIGZvciBnbHlwaHMgaW4gdGhlIHJ1bi4NCi0gICAgLy8vIFJlbmRlcmVyIGltcGxlbWVudGF0aW9ucyBtYXkgY2hvb3NlIGRpZmZlcmVudCByZW5kZXJpbmcgbW9kZXMgZm9yIGRpZmZlcmVudCBtZWFzdXJpbmcgbWV0aG9kcywgZm9yIGV4YW1wbGUNCi0gICAgLy8vIERXUklURV9SRU5ERVJJTkdfTU9ERV9DTEVBUlRZUEVfTkFUVVJBTCBmb3IgRFdSSVRFX01FQVNVUklOR19NT0RFX05BVFVSQUwsDQotICAgIC8vLyBEV1JJVEVfUkVOREVSSU5HX01PREVfQ0xFQVJUWVBFX0dESV9DTEFTU0lDIGZvciBEV1JJVEVfTUVBU1VSSU5HX01PREVfR0RJX0NMQVNTSUMsIGFuZA0KLSAgICAvLy8gRFdSSVRFX1JFTkRFUklOR19NT0RFX0NMRUFSVFlQRV9HRElfTkFUVVJBTCBmb3IgRFdSSVRFX01FQVNVUklOR19NT0RFX0dESV9OQVRVUkFMLg0KLSAgICAvLy8gPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaFJ1biI+U3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdseXBoIHJ1bi48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InJlbmRlcmluZ1BhcmFtcyI+T2JqZWN0IHRoYXQgY29udHJvbHMgcmVuZGVyaW5nIGJlaGF2aW9yLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dENvbG9yIj5TcGVjaWZpZXMgdGhlIGZvcmVncm91bmQgY29sb3Igb2YgdGhlIHRleHQuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJibGFja0JveFJlY3QiPk9wdGlvbmFsIHJlY3RhbmdsZSB0aGF0IHJlY2VpdmVzIHRoZSBib3VuZGluZyBib3ggKGluIHBpeGVscyBub3QgRElQcykgb2YgYWxsIHRoZSBwaXhlbHMgYWZmZWN0ZWQgYnkgDQotICAgIC8vLyBkcmF3aW5nIHRoZSBnbHlwaCBydW4uIFRoZSBibGFjayBib3ggcmVjdGFuZ2xlIG1heSBleHRlbmQgYmV5b25kIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBiaXRtYXAuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoRHJhd0dseXBoUnVuKSgNCi0gICAgICAgIEZMT0FUIGJhc2VsaW5lT3JpZ2luWCwNCi0gICAgICAgIEZMT0FUIGJhc2VsaW5lT3JpZ2luWSwNCi0gICAgICAgIERXUklURV9NRUFTVVJJTkdfTU9ERSBtZWFzdXJpbmdNb2RlLA0KLSAgICAgICAgX19pbiBEV1JJVEVfR0xZUEhfUlVOIGNvbnN0KiBnbHlwaFJ1biwNCi0gICAgICAgIElEV3JpdGVSZW5kZXJpbmdQYXJhbXMqIHJlbmRlcmluZ1BhcmFtcywNCi0gICAgICAgIENPTE9SUkVGIHRleHRDb2xvciwNCi0gICAgICAgIF9fb3V0X29wdCBSRUNUKiBibGFja0JveFJlY3QgPSBOVUxMDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldHMgYSBoYW5kbGUgdG8gdGhlIG1lbW9yeSBkZXZpY2UgY29udGV4dC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gUmV0dXJucyB0aGUgZGV2aWNlIGNvbnRleHQgaGFuZGxlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICAvLy8gPHJlbWFya3M+DQotICAgIC8vLyBBbiBhcHBsaWNhdGlvbiBjYW4gdXNlIHRoZSBkZXZpY2UgY29udGV4dCB0byBkcmF3IHVzaW5nIEdESSBmdW5jdGlvbnMuIEFuIGFwcGxpY2F0aW9uIGNhbiBvYnRhaW4gdGhlIGJpdG1hcCBoYW5kbGUNCi0gICAgLy8vIChIQklUTUFQKSBieSBjYWxsaW5nIEdldEN1cnJlbnRPYmplY3QuIEFuIGFwcGxpY2F0aW9uIHRoYXQgd2FudHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVuZGVybHlpbmcgYml0bWFwLCBpbmNsdWRpbmcNCi0gICAgLy8vIGEgcG9pbnRlciB0byB0aGUgcGl4ZWwgZGF0YSwgY2FuIGNhbGwgR2V0T2JqZWN0IHRvIGZpbGwgaW4gYSBESUJTRUNUSU9OIHN0cnVjdHVyZS4gVGhlIGJpdG1hcCBpcyBhbHdheXMgYSAzMi1iaXQgDQotICAgIC8vLyB0b3AtZG93biBESUIuDQotICAgIC8vLyA8L3JlbWFya3M+DQotICAgIFNURE1FVEhPRF8oSERDLCBHZXRNZW1vcnlEQykoKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXRzIHRoZSBudW1iZXIgb2YgYml0bWFwIHBpeGVscyBwZXIgRElQLiBBIERJUCAoZGV2aWNlLWluZGVwZW5kZW50IHBpeGVsKSBpcyAxLzk2IGluY2ggc28gdGhpcyB2YWx1ZSBpcyB0aGUgbnVtYmVyDQotICAgIC8vLyBpZiBwaXhlbHMgcGVyIGluY2ggZGl2aWRlZCBieSA5Ni4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJpdG1hcCBwaXhlbHMgcGVyIERJUC4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EXyhGTE9BVCwgR2V0UGl4ZWxzUGVyRGlwKSgpIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFNldHMgdGhlIG51bWJlciBvZiBiaXRtYXAgcGl4ZWxzIHBlciBESVAuIEEgRElQIChkZXZpY2UtaW5kZXBlbmRlbnQgcGl4ZWwpIGlzIDEvOTYgaW5jaCBzbyB0aGlzIHZhbHVlIGlzIHRoZSBudW1iZXINCi0gICAgLy8vIGlmIHBpeGVscyBwZXIgaW5jaCBkaXZpZGVkIGJ5IDk2Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InBpeGVsc1BlckRpcCI+U3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcGl4ZWxzIHBlciBESVAuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoU2V0UGl4ZWxzUGVyRGlwKSgNCi0gICAgICAgIEZMT0FUIHBpeGVsc1BlckRpcA0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBHZXRzIHRoZSB0cmFuc2Zvcm0gdGhhdCBtYXBzIGFic3RyYWN0IGNvb3JkaW5hdGUgdG8gRElQcy4gQnkgZGVmYXVsdCB0aGlzIGlzIHRoZSBpZGVudGl0eSANCi0gICAgLy8vIHRyYW5zZm9ybS4gTm90ZSB0aGF0IHRoaXMgaXMgdW5yZWxhdGVkIHRvIHRoZSB3b3JsZCB0cmFuc2Zvcm0gb2YgdGhlIHVuZGVybHlpbmcgZGV2aWNlDQotICAgIC8vLyBjb250ZXh0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRyYW5zZm9ybSI+UmVjZWl2ZXMgdGhlIHRyYW5zZm9ybS48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRDdXJyZW50VHJhbnNmb3JtKSgNCi0gICAgICAgIF9fb3V0IERXUklURV9NQVRSSVgqIHRyYW5zZm9ybQ0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBTZXRzIHRoZSB0cmFuc2Zvcm0gdGhhdCBtYXBzIGFic3RyYWN0IGNvb3JkaW5hdGUgdG8gRElQcy4gVGhpcyBkb2VzIG5vdCBhZmZlY3QgdGhlIHdvcmxkDQotICAgIC8vLyB0cmFuc2Zvcm0gb2YgdGhlIHVuZGVybHlpbmcgZGV2aWNlIGNvbnRleHQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idHJhbnNmb3JtIj5TcGVjaWZpZXMgdGhlIG5ldyB0cmFuc2Zvcm0uIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBOVUxMLCBpbiB3aGljaA0KLSAgICAvLy8gY2FzZSB0aGUgaWRlbnRpdHkgdHJhbnNmb3JtIGlzIGltcGxpZWQuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoU2V0Q3VycmVudFRyYW5zZm9ybSkoDQotICAgICAgICBfX2luX29wdCBEV1JJVEVfTUFUUklYIGNvbnN0KiB0cmFuc2Zvcm0NCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0cyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgYml0bWFwLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InNpemUiPlJlY2VpdmVzIHRoZSBzaXplIG9mIHRoZSBiaXRtYXAgaW4gcGl4ZWxzLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKEdldFNpemUpKA0KLSAgICAgICAgX19vdXQgU0laRSogc2l6ZQ0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBSZXNpemVzIHRoZSBiaXRtYXAuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0id2lkdGgiPk5ldyBiaXRtYXAgd2lkdGgsIGluIHBpeGVscy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImhlaWdodCI+TmV3IGJpdG1hcCBoZWlnaHQsIGluIHBpeGVscy48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChSZXNpemUpKA0KLSAgICAgICAgVUlOVDMyIHdpZHRoLA0KLSAgICAgICAgVUlOVDMyIGhlaWdodA0KLSAgICAgICAgKSBQVVJFOw0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgR0RJIGludGVyb3AgaW50ZXJmYWNlIHByb3ZpZGVzIGludGVyb3BlcmFiaWxpdHkgd2l0aCBHREkuDQotLy8vIDwvc3VtbWFyeT4NCi1pbnRlcmZhY2UgRFdSSVRFX0RFQ0xBUkVfSU5URVJGQUNFKCIxZWRkOTQ5MS05ODUzLTQyOTktODk4Zi02NDMyOTgzYjZmM2EiKSBJRFdyaXRlR2RpSW50ZXJvcCA6IHB1YmxpYyBJVW5rbm93bg0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gQ3JlYXRlcyBhIGZvbnQgb2JqZWN0IHRoYXQgbWF0Y2hlcyB0aGUgcHJvcGVydGllcyBzcGVjaWZpZWQgYnkgdGhlIExPR0ZPTlQgc3RydWN0dXJlLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImxvZ0ZvbnQiPlN0cnVjdHVyZSBjb250YWluaW5nIGEgR0RJLWNvbXBhdGlibGUgZm9udCBkZXNjcmlwdGlvbi48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnQiPlJlY2VpdmVzIGEgbmV3bHkgY3JlYXRlZCBmb250IG9iamVjdCBpZiBzdWNjZXNzZnVsLCBvciBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoQ3JlYXRlRm9udEZyb21MT0dGT05UKSgNCi0gICAgICAgIF9faW4gTE9HRk9OVFcgY29uc3QqIGxvZ0ZvbnQsDQotICAgICAgICBfX291dCBJRFdyaXRlRm9udCoqIGZvbnQNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gSW5pdGlhbGl6ZXMgYSBMT0dGT05UIHN0cnVjdHVyZSBiYXNlZCBvbiB0aGUgR0RJLWNvbXBhdGlibGUgcHJvcGVydGllcyBvZiB0aGUgc3BlY2lmaWVkIGZvbnQuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udCI+U3BlY2lmaWVzIGEgZm9udCBpbiB0aGUgc3lzdGVtIGZvbnQgY29sbGVjdGlvbi48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImxvZ0ZvbnQiPlN0cnVjdHVyZSB0aGF0IHJlY2VpdmVzIGEgR0RJLWNvbXBhdGlibGUgZm9udCBkZXNjcmlwdGlvbi48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImlzU3lzdGVtRm9udCI+Q29udGFpbnMgVFJVRSBpZiB0aGUgc3BlY2lmaWVkIGZvbnQgb2JqZWN0IGlzIHBhcnQgb2YgdGhlIHN5c3RlbSBmb250IGNvbGxlY3Rpb24NCi0gICAgLy8vIG9yIEZBTFNFIG90aGVyd2lzZS48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChDb252ZXJ0Rm9udFRvTE9HRk9OVCkoDQotICAgICAgICBJRFdyaXRlRm9udCogZm9udCwNCi0gICAgICAgIF9fb3V0IExPR0ZPTlRXKiBsb2dGb250LA0KLSAgICAgICAgX19vdXQgQk9PTCogaXNTeXN0ZW1Gb250DQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEluaXRpYWxpemVzIGEgTE9HRk9OVCBzdHJ1Y3R1cmUgYmFzZWQgb24gdGhlIEdESS1jb21wYXRpYmxlIHByb3BlcnRpZXMgb2YgdGhlIHNwZWNpZmllZCBmb250Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnQiPlNwZWNpZmllcyBhIGZvbnQgZmFjZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImxvZ0ZvbnQiPlN0cnVjdHVyZSB0aGF0IHJlY2VpdmVzIGEgR0RJLWNvbXBhdGlibGUgZm9udCBkZXNjcmlwdGlvbi48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChDb252ZXJ0Rm9udEZhY2VUb0xPR0ZPTlQpKA0KLSAgICAgICAgSURXcml0ZUZvbnRGYWNlKiBmb250LA0KLSAgICAgICAgX19vdXQgTE9HRk9OVFcqIGxvZ0ZvbnQNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gQ3JlYXRlcyBhIGZvbnQgZmFjZSBvYmplY3QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIEhGT05ULg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImhkYyI+SGFuZGxlIHRvIGEgZGV2aWNlIGNvbnRleHQgaW50byB3aGljaCBhIGZvbnQgaGFzIGJlZW4gc2VsZWN0ZWQuIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgY2xpZW50DQotICAgIC8vLyBoYXMgYWxyZWFkeSBwZXJmb3JtZWQgZm9udCBtYXBwaW5nIGFuZCB0aGF0IHRoZSBmb250IHNlbGVjdGVkIGludG8gdGhlIERDIGlzIHRoZSBhY3R1YWwgZm9udCB0aGF0IHdvdWxkIGJlIHVzZWQgDQotICAgIC8vLyBmb3IgcmVuZGVyaW5nIGdseXBocy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGYWNlIj5Db250YWlucyB0aGUgbmV3bHkgY3JlYXRlZCBmb250IGZhY2Ugb2JqZWN0LCBvciBOVUxMIGluIGNhc2Ugb2YgZmFpbHVyZS48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChDcmVhdGVGb250RmFjZUZyb21IZGMpKA0KLSAgICAgICAgSERDIGhkYywNCi0gICAgICAgIF9fb3V0IElEV3JpdGVGb250RmFjZSoqIGZvbnRGYWNlDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIENyZWF0ZXMgYW4gb2JqZWN0IHRoYXQgZW5jYXBzdWxhdGVzIGEgYml0bWFwIGFuZCBtZW1vcnkgREMgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHJlbmRlcmluZyBnbHlwaHMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iaGRjIj5PcHRpb25hbCBkZXZpY2UgY29udGV4dCB1c2VkIHRvIGNyZWF0ZSBhIGNvbXBhdGlibGUgbWVtb3J5IERDLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0id2lkdGgiPldpZHRoIG9mIHRoZSBiaXRtYXAuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJoZWlnaHQiPkhlaWdodCBvZiB0aGUgYml0bWFwLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0icmVuZGVyVGFyZ2V0Ij5SZWNlaXZlcyBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgcmVuZGVyIHRhcmdldC48L3BhcmFtPg0KLSAgICBTVERNRVRIT0QoQ3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0KSgNCi0gICAgICAgIF9faW5fb3B0IEhEQyBoZGMsDQotICAgICAgICBVSU5UMzIgd2lkdGgsDQotICAgICAgICBVSU5UMzIgaGVpZ2h0LA0KLSAgICAgICAgX19vdXQgSURXcml0ZUJpdG1hcFJlbmRlclRhcmdldCoqIHJlbmRlclRhcmdldA0KLSAgICAgICAgKSBQVVJFOw0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgRFdSSVRFX1RFWFRVUkVfVFlQRSBlbnVtZXJhdGlvbiBpZGVudGlmaWVzIGEgdHlwZSBvZiBhbHBoYSB0ZXh0dXJlLiBBbiBhbHBoYSB0ZXh0dXJlIGlzIGEgYml0bWFwIG9mIGFscGhhIHZhbHVlcywgZWFjaA0KLS8vLyByZXByZXNlbnRpbmcgdGhlIGRhcmtuZXNzIChpLmUuLCBvcGFjaXR5KSBvZiBhIHBpeGVsIG9yIHN1YnBpeGVsLg0KLS8vLyA8L3N1bW1hcnk+DQotZW51bSBEV1JJVEVfVEVYVFVSRV9UWVBFDQotew0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBTcGVjaWZpZXMgYW4gYWxwaGEgdGV4dHVyZSBmb3IgYWxpYXNlZCB0ZXh0IHJlbmRlcmluZyAoaS5lLiwgYmktbGV2ZWwsIHdoZXJlIGVhY2ggcGl4ZWwgaXMgZWl0aGVyIGZ1bGx5IG9wYXF1ZSBvciBmdWxseSB0cmFuc3BhcmVudCksDQotICAgIC8vLyB3aXRoIG9uZSBieXRlIHBlciBwaXhlbC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX1RFWFRVUkVfQUxJQVNFRF8xeDEsDQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFNwZWNpZmllcyBhbiBhbHBoYSB0ZXh0dXJlIGZvciBDbGVhclR5cGUgdGV4dCByZW5kZXJpbmcsIHdpdGggdGhyZWUgYnl0ZXMgcGVyIHBpeGVsIGluIHRoZSBob3Jpem9udGFsIGRpbWVuc2lvbiBhbmQgDQotICAgIC8vLyBvbmUgYnl0ZSBwZXIgcGl4ZWwgaW4gdGhlIHZlcnRpY2FsIGRpbWVuc2lvbi4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX1RFWFRVUkVfQ0xFQVJUWVBFXzN4MQ0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBNYXhpbXVtIGFscGhhIHZhbHVlIGluIGEgdGV4dHVyZSByZXR1cm5lZCBieSBJRFdyaXRlR2x5cGhSdW5BbmFseXNpczo6Q3JlYXRlQWxwaGFUZXh0dXJlLg0KLS8vLyA8L3N1bW1hcnk+DQotI2RlZmluZSBEV1JJVEVfQUxQSEFfTUFYIDI1NQ0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gSW50ZXJmYWNlIHRoYXQgZW5jYXBzdWxhdGVzIGluZm9ybWF0aW9uIHVzZWQgdG8gcmVuZGVyIGEgZ2x5cGggcnVuLg0KLS8vLyA8L3N1bW1hcnk+DQotaW50ZXJmYWNlIERXUklURV9ERUNMQVJFX0lOVEVSRkFDRSgiN2Q5N2RiZjctZTA4NS00MmQ0LTgxZTMtNmE4ODNiZGVkMTE4IikgSURXcml0ZUdseXBoUnVuQW5hbHlzaXMgOiBwdWJsaWMgSVVua25vd24NCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldHMgdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBvZiB0aGUgcGh5c2ljYWwgcGl4ZWxzIGFmZmVjdGVkIGJ5IHRoZSBnbHlwaCBydW4uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dHVyZVR5cGUiPlNwZWNpZmllcyB0aGUgdHlwZSBvZiB0ZXh0dXJlIHJlcXVlc3RlZC4gSWYgYSBiaS1sZXZlbCB0ZXh0dXJlIGlzIHJlcXVlc3RlZCwgdGhlDQotICAgIC8vLyBib3VuZGluZyByZWN0YW5nbGUgaW5jbHVkZXMgb25seSBiaS1sZXZlbCBnbHlwaHMuIE90aGVyd2lzZSwgdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSBpbmNsdWRlcyBvbmx5IGFudGktYWxpYXNlZA0KLSAgICAvLy8gZ2x5cGhzLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dHVyZUJvdW5kcyI+UmVjZWl2ZXMgdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSwgb3IgYW4gZW1wdHkgcmVjdGFuZ2xlIGlmIHRoZXJlIGFyZSBubyBnbHlwaHMNCi0gICAgLy8vIGlmIHRoZSBzcGVjaWZpZWQgdHlwZS48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRBbHBoYVRleHR1cmVCb3VuZHMpKA0KLSAgICAgICAgRFdSSVRFX1RFWFRVUkVfVFlQRSB0ZXh0dXJlVHlwZSwNCi0gICAgICAgIF9fb3V0IFJFQ1QqIHRleHR1cmVCb3VuZHMNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gQ3JlYXRlcyBhbiBhbHBoYSB0ZXh0dXJlIG9mIHRoZSBzcGVjaWZpZWQgdHlwZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0dXJlVHlwZSI+U3BlY2lmaWVzIHRoZSB0eXBlIG9mIHRleHR1cmUgcmVxdWVzdGVkLiBJZiBhIGJpLWxldmVsIHRleHR1cmUgaXMgcmVxdWVzdGVkLCB0aGUNCi0gICAgLy8vIHRleHR1cmUgY29udGFpbnMgb25seSBiaS1sZXZlbCBnbHlwaHMuIE90aGVyd2lzZSwgdGhlIHRleHR1cmUgY29udGFpbnMgb25seSBhbnRpLWFsaWFzZWQgZ2x5cGhzLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dHVyZUJvdW5kcyI+U3BlY2lmaWVzIHRoZSBib3VuZGluZyByZWN0YW5nbGUgb2YgdGhlIHRleHR1cmUsIHdoaWNoIGNhbiBiZSBkaWZmZXJlbnQgdGhhbg0KLSAgICAvLy8gdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSByZXR1cm5lZCBieSBHZXRBbHBoYVRleHR1cmVCb3VuZHMuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJhbHBoYVZhbHVlcyI+UmVjZWl2ZXMgdGhlIGFycmF5IG9mIGFscGhhIHZhbHVlcy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImJ1ZmZlclNpemUiPlNpemUgb2YgdGhlIGFscGhhVmFsdWVzIGFycmF5LiBUaGUgbWluaW11bSBzaXplIGRlcGVuZHMgb24gdGhlIGRpbWVuc2lvbnMgb2YgdGhlDQotICAgIC8vLyByZWN0YW5nbGUgYW5kIHRoZSB0eXBlIG9mIHRleHR1cmUgcmVxdWVzdGVkLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKENyZWF0ZUFscGhhVGV4dHVyZSkoDQotICAgICAgICBEV1JJVEVfVEVYVFVSRV9UWVBFIHRleHR1cmVUeXBlLA0KLSAgICAgICAgX19pbiBSRUNUIGNvbnN0KiB0ZXh0dXJlQm91bmRzLA0KLSAgICAgICAgX19vdXRfYmNvdW50KGJ1ZmZlclNpemUpIEJZVEUqIGFscGhhVmFsdWVzLA0KLSAgICAgICAgVUlOVDMyIGJ1ZmZlclNpemUNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gR2V0cyBwcm9wZXJ0aWVzIHJlcXVpcmVkIGZvciBDbGVhclR5cGUgYmxlbmRpbmcuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0icmVuZGVyaW5nUGFyYW1zIj5SZW5kZXJpbmcgcGFyYW1ldGVycyBvYmplY3QuIEluIG1vc3QgY2FzZXMsIHRoZSB2YWx1ZXMgcmV0dXJuZWQgaW4gdGhlIG91dHB1dA0KLSAgICAvLy8gcGFyYW1ldGVycyBhcmUgYmFzZWQgb24gdGhlIHByb3BlcnRpZXMgb2YgdGhpcyBvYmplY3QuIFRoZSBleGNlcHRpb24gaXMgaWYgYSBHREktY29tcGF0aWJsZSByZW5kZXJpbmcgbW9kZQ0KLSAgICAvLy8gaXMgc3BlY2lmaWVkLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iYmxlbmRHYW1tYSI+UmVjZWl2ZXMgdGhlIGdhbW1hIHZhbHVlIHRvIHVzZSBmb3IgZ2FtbWEgY29ycmVjdGlvbi48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImJsZW5kRW5oYW5jZWRDb250cmFzdCI+UmVjZWl2ZXMgdGhlIGVuaGFuY2VkIGNvbnRyYXN0IHZhbHVlLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iYmxlbmRDbGVhclR5cGVMZXZlbCI+UmVjZWl2ZXMgdGhlIENsZWFyVHlwZSBsZXZlbC48L3BhcmFtPg0KLSAgICBTVERNRVRIT0QoR2V0QWxwaGFCbGVuZFBhcmFtcykoDQotICAgICAgICBJRFdyaXRlUmVuZGVyaW5nUGFyYW1zKiByZW5kZXJpbmdQYXJhbXMsDQotICAgICAgICBfX291dCBGTE9BVCogYmxlbmRHYW1tYSwNCi0gICAgICAgIF9fb3V0IEZMT0FUKiBibGVuZEVuaGFuY2VkQ29udHJhc3QsDQotICAgICAgICBfX291dCBGTE9BVCogYmxlbmRDbGVhclR5cGVMZXZlbA0KLSAgICAgICAgKSBQVVJFOw0KLX07DQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgcm9vdCBmYWN0b3J5IGludGVyZmFjZSBmb3IgYWxsIERXcml0ZSBvYmplY3RzLg0KLS8vLyA8L3N1bW1hcnk+DQotaW50ZXJmYWNlIERXUklURV9ERUNMQVJFX0lOVEVSRkFDRSgiYjg1OWVlNWEtZDgzOC00YjViLWEyZTgtMWFkYzdkOTNkYjQ4IikgSURXcml0ZUZhY3RvcnkgOiBwdWJsaWMgSVVua25vd24NCi17DQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIEdldHMgYSBmb250IGNvbGxlY3Rpb24gcmVwcmVzZW50aW5nIHRoZSBzZXQgb2YgaW5zdGFsbGVkIGZvbnRzLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRDb2xsZWN0aW9uIj5SZWNlaXZlcyBhIHBvaW50ZXIgdG8gdGhlIHN5c3RlbSBmb250IGNvbGxlY3Rpb24gb2JqZWN0LCBvciBOVUxMIGluIGNhc2Ugb2YgZmFpbHVyZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImNoZWNrRm9yVXBkYXRlcyI+SWYgdGhpcyBwYXJhbWV0ZXIgaXMgbm9uemVybywgdGhlIGZ1bmN0aW9uIHBlcmZvcm1zIGFuIGltbWVkaWF0ZSBjaGVjayBmb3IgY2hhbmdlcyB0byB0aGUgc2V0IG9mDQotICAgIC8vLyBpbnN0YWxsZWQgZm9udHMuIElmIHRoaXMgcGFyYW1ldGVyIGlzIEZBTFNFLCB0aGUgZnVuY3Rpb24gd2lsbCBzdGlsbCBkZXRlY3QgY2hhbmdlcyBpZiB0aGUgZm9udCBjYWNoZSBzZXJ2aWNlIGlzIHJ1bm5pbmcsIGJ1dA0KLSAgICAvLy8gdGhlcmUgbWF5IGJlIHNvbWUgbGF0ZW5jeS4gRm9yIGV4YW1wbGUsIGFuIGFwcGxpY2F0aW9uIG1pZ2h0IHNwZWNpZnkgVFJVRSBpZiBpdCBoYXMgaXRzZWxmIGp1c3QgaW5zdGFsbGVkIGEgZm9udCBhbmQgd2FudHMgdG8gDQotICAgIC8vLyBiZSBzdXJlIHRoZSBmb250IGNvbGxlY3Rpb24gY29udGFpbnMgdGhhdCBmb250LjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKEdldFN5c3RlbUZvbnRDb2xsZWN0aW9uKSgNCi0gICAgICAgIF9fb3V0IElEV3JpdGVGb250Q29sbGVjdGlvbioqIGZvbnRDb2xsZWN0aW9uLA0KLSAgICAgICAgQk9PTCBjaGVja0ZvclVwZGF0ZXMgPSBGQUxTRQ0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBDcmVhdGVzIGEgZm9udCBjb2xsZWN0aW9uIHVzaW5nIGEgY3VzdG9tIGZvbnQgY29sbGVjdGlvbiBsb2FkZXIuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iY29sbGVjdGlvbkxvYWRlciI+QXBwbGljYXRpb24tZGVmaW5lZCBmb250IGNvbGxlY3Rpb24gbG9hZGVyLCB3aGljaCBtdXN0IGhhdmUgYmVlbiBwcmV2aW91c2x5DQotICAgIC8vLyByZWdpc3RlcmVkIHVzaW5nIFJlZ2lzdGVyRm9udENvbGxlY3Rpb25Mb2FkZXIuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJjb2xsZWN0aW9uS2V5Ij5LZXkgdXNlZCBieSB0aGUgbG9hZGVyIHRvIGlkZW50aWZ5IGEgY29sbGVjdGlvbiBvZiBmb250IGZpbGVzLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iY29sbGVjdGlvbktleVNpemUiPlNpemUgaW4gYnl0ZXMgb2YgdGhlIGNvbGxlY3Rpb24ga2V5LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udENvbGxlY3Rpb24iPlJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgc3lzdGVtIGZvbnQgY29sbGVjdGlvbiBvYmplY3QsIG9yIE5VTEwgaW4gY2FzZSBvZiBmYWlsdXJlLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKENyZWF0ZUN1c3RvbUZvbnRDb2xsZWN0aW9uKSgNCi0gICAgICAgIElEV3JpdGVGb250Q29sbGVjdGlvbkxvYWRlciogY29sbGVjdGlvbkxvYWRlciwNCi0gICAgICAgIF9faW5fYmNvdW50KGNvbGxlY3Rpb25LZXlTaXplKSB2b2lkIGNvbnN0KiBjb2xsZWN0aW9uS2V5LA0KLSAgICAgICAgVUlOVDMyIGNvbGxlY3Rpb25LZXlTaXplLA0KLSAgICAgICAgX19vdXQgSURXcml0ZUZvbnRDb2xsZWN0aW9uKiogZm9udENvbGxlY3Rpb24NCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gUmVnaXN0ZXJzIGEgY3VzdG9tIGZvbnQgY29sbGVjdGlvbiBsb2FkZXIgd2l0aCB0aGUgZmFjdG9yeSBvYmplY3QuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udENvbGxlY3Rpb25Mb2FkZXIiPkFwcGxpY2F0aW9uLWRlZmluZWQgZm9udCBjb2xsZWN0aW9uIGxvYWRlci48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChSZWdpc3RlckZvbnRDb2xsZWN0aW9uTG9hZGVyKSgNCi0gICAgICAgIElEV3JpdGVGb250Q29sbGVjdGlvbkxvYWRlciogZm9udENvbGxlY3Rpb25Mb2FkZXINCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVW5yZWdpc3RlcnMgYSBjdXN0b20gZm9udCBjb2xsZWN0aW9uIGxvYWRlciB0aGF0IHdhcyBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgdXNpbmcgUmVnaXN0ZXJGb250Q29sbGVjdGlvbkxvYWRlci4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250Q29sbGVjdGlvbkxvYWRlciI+QXBwbGljYXRpb24tZGVmaW5lZCBmb250IGNvbGxlY3Rpb24gbG9hZGVyLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKFVucmVnaXN0ZXJGb250Q29sbGVjdGlvbkxvYWRlcikoDQotICAgICAgICBJRFdyaXRlRm9udENvbGxlY3Rpb25Mb2FkZXIqIGZvbnRDb2xsZWN0aW9uTG9hZGVyDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIENyZWF0ZUZvbnRGaWxlUmVmZXJlbmNlIGNyZWF0ZXMgYSBmb250IGZpbGUgcmVmZXJlbmNlIG9iamVjdCBmcm9tIGEgbG9jYWwgZm9udCBmaWxlLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZpbGVQYXRoIj5BYnNvbHV0ZSBmaWxlIHBhdGguIFN1YnNlcXVlbnQgb3BlcmF0aW9ucyBvbiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IG1heSBmYWlsDQotICAgIC8vLyBpZiB0aGUgdXNlciBwcm92aWRlZCBmaWxlUGF0aCBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYSB2YWxpZCBmaWxlIG9uIHRoZSBkaXNrLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ibGFzdFdyaXRlVGltZSI+TGFzdCBtb2RpZmllZCB0aW1lIG9mIHRoZSBpbnB1dCBmaWxlIHBhdGguIElmIHRoZSBwYXJhbWV0ZXIgaXMgb21pdHRlZCwNCi0gICAgLy8vIHRoZSBmdW5jdGlvbiB3aWxsIGFjY2VzcyB0aGUgZm9udCBmaWxlIHRvIG9idGFpbiBpdHMgbGFzdCB3cml0ZSB0aW1lLCBzbyB0aGUgY2xpZW50cyBhcmUgZW5jb3VyYWdlZCB0byBzcGVjaWZ5IHRoaXMgdmFsdWUNCi0gICAgLy8vIHRvIGF2b2lkIGV4dHJhIGRpc2sgYWNjZXNzLiBTdWJzZXF1ZW50IG9wZXJhdGlvbnMgb24gdGhlIGNvbnN0cnVjdGVkIG9iamVjdCBtYXkgZmFpbA0KLSAgICAvLy8gaWYgdGhlIHVzZXIgcHJvdmlkZWQgbGFzdFdyaXRlVGltZSBkb2Vzbid0IG1hdGNoIHRoZSBmaWxlIG9uIHRoZSBkaXNrLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGUiPkNvbnRhaW5zIG5ld2x5IGNyZWF0ZWQgZm9udCBmaWxlIHJlZmVyZW5jZSBvYmplY3QsIG9yIE5VTEwgaW4gY2FzZSBvZiBmYWlsdXJlLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKENyZWF0ZUZvbnRGaWxlUmVmZXJlbmNlKSgNCi0gICAgICAgIF9faW5feiBXQ0hBUiBjb25zdCogZmlsZVBhdGgsDQotICAgICAgICBfX2luX29wdCBGSUxFVElNRSBjb25zdCogbGFzdFdyaXRlVGltZSwNCi0gICAgICAgIF9fb3V0IElEV3JpdGVGb250RmlsZSoqIGZvbnRGaWxlDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIENyZWF0ZUN1c3RvbUZvbnRGaWxlUmVmZXJlbmNlIGNyZWF0ZXMgYSByZWZlcmVuY2UgdG8gYW4gYXBwbGljYXRpb24gc3BlY2lmaWMgZm9udCBmaWxlIHJlc291cmNlLg0KLSAgICAvLy8gVGhpcyBmdW5jdGlvbiBlbmFibGVzIGFuIGFwcGxpY2F0aW9uIG9yIGEgZG9jdW1lbnQgdG8gdXNlIGEgZm9udCB3aXRob3V0IGhhdmluZyB0byBpbnN0YWxsIGl0IG9uIHRoZSBzeXN0ZW0uDQotICAgIC8vLyBUaGUgZm9udEZpbGVSZWZlcmVuY2VLZXkgaGFzIHRvIGJlIHVuaXF1ZSBvbmx5IGluIHRoZSBzY29wZSBvZiB0aGUgZm9udEZpbGVMb2FkZXIgdXNlZCBpbiB0aGlzIGNhbGwuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVSZWZlcmVuY2VLZXkiPkZvbnQgZmlsZSByZWZlcmVuY2Uga2V5IHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgZm9udCBmaWxlIHJlc291cmNlDQotICAgIC8vLyBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mIGZvbnRGaWxlTG9hZGVyLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVSZWZlcmVuY2VLZXlTaXplIj5TaXplIG9mIGZvbnQgZmlsZSByZWZlcmVuY2Uga2V5IGluIGJ5dGVzLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVMb2FkZXIiPkZvbnQgZmlsZSBsb2FkZXIgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdGhlIGZvbnQgc3lzdGVtIHRvIGxvYWQgZGF0YSBmcm9tIHRoZSBmaWxlIGlkZW50aWZpZWQgYnkNCi0gICAgLy8vIGZvbnRGaWxlUmVmZXJlbmNlS2V5LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGUiPkNvbnRhaW5zIHRoZSBuZXdseSBjcmVhdGVkIGZvbnQgZmlsZSBvYmplY3QsIG9yIE5VTEwgaW4gY2FzZSBvZiBmYWlsdXJlLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgLy8vIDxyZW1hcmtzPg0KLSAgICAvLy8gVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlZCBmb3IgY2FzZXMgd2hlbiBhbiBhcHBsaWNhdGlvbiBvciBhIGRvY3VtZW50IG5lZWRzIHRvIHVzZSBhIGZvbnQNCi0gICAgLy8vIHdpdGhvdXQgaGF2aW5nIHRvIGluc3RhbGwgaXQgb24gdGhlIHN5c3RlbS4gZm9udEZpbGVSZWZlcmVuY2VLZXkgaGFzIHRvIGJlIHVuaXF1ZSBvbmx5IGluIHRoZSBzY29wZQ0KLSAgICAvLy8gb2YgdGhlIGZvbnRGaWxlTG9hZGVyIHVzZWQgaW4gdGhpcyBjYWxsLg0KLSAgICAvLy8gPC9yZW1hcmtzPg0KLSAgICBTVERNRVRIT0QoQ3JlYXRlQ3VzdG9tRm9udEZpbGVSZWZlcmVuY2UpKA0KLSAgICAgICAgX19pbl9iY291bnQoZm9udEZpbGVSZWZlcmVuY2VLZXlTaXplKSB2b2lkIGNvbnN0KiBmb250RmlsZVJlZmVyZW5jZUtleSwNCi0gICAgICAgIFVJTlQzMiBmb250RmlsZVJlZmVyZW5jZUtleVNpemUsDQotICAgICAgICBJRFdyaXRlRm9udEZpbGVMb2FkZXIqIGZvbnRGaWxlTG9hZGVyLA0KLSAgICAgICAgX19vdXQgSURXcml0ZUZvbnRGaWxlKiogZm9udEZpbGUNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gQ3JlYXRlcyBhIGZvbnQgZmFjZSBvYmplY3QuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZhY2VUeXBlIj5UaGUgZmlsZSBmb3JtYXQgb2YgdGhlIGZvbnQgZmFjZS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Im51bWJlck9mRmlsZXMiPlRoZSBudW1iZXIgb2YgZm9udCBmaWxlcyByZXF1aXJlIHRvIHJlcHJlc2VudCB0aGUgZm9udCBmYWNlLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVzIj5Gb250IGZpbGVzIHJlcHJlc2VudGluZyB0aGUgZm9udCBmYWNlLiBTaW5jZSBJRFdyaXRlRm9udEZhY2UgbWFpbnRhaW5zIGl0cyBvd24gcmVmZXJlbmNlcw0KLSAgICAvLy8gdG8gdGhlIGlucHV0IGZvbnQgZmlsZSBvYmplY3RzLCBpdCdzIE9LIHRvIHJlbGVhc2UgdGhlbSBhZnRlciB0aGlzIGNhbGwuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmYWNlSW5kZXgiPlRoZSB6ZXJvIGJhc2VkIGluZGV4IG9mIGEgZm9udCBmYWNlIGluIGNhc2VzIHdoZW4gdGhlIGZvbnQgZmlsZXMgY29udGFpbiBhIGNvbGxlY3Rpb24gb2YgZm9udCBmYWNlcy4NCi0gICAgLy8vIElmIHRoZSBmb250IGZpbGVzIGNvbnRhaW4gYSBzaW5nbGUgZmFjZSwgdGhpcyB2YWx1ZSBzaG91bGQgYmUgemVyby48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGYWNlU2ltdWxhdGlvbkZsYWdzIj5Gb250IGZhY2Ugc2ltdWxhdGlvbiBmbGFncyBmb3IgYWxnb3JpdGhtaWMgZW1ib2xkZW5pbmcgYW5kIGl0YWxpY2l6YXRpb24uPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RmFjZSI+Q29udGFpbnMgdGhlIG5ld2x5IGNyZWF0ZWQgZm9udCBmYWNlIG9iamVjdCwgb3IgTlVMTCBpbiBjYXNlIG9mIGZhaWx1cmUuPC9wYXJhbT4NCi0gICAgLy8vIDxyZXR1cm5zPg0KLSAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLSAgICAvLy8gPC9yZXR1cm5zPg0KLSAgICBTVERNRVRIT0QoQ3JlYXRlRm9udEZhY2UpKA0KLSAgICAgICAgRFdSSVRFX0ZPTlRfRkFDRV9UWVBFIGZvbnRGYWNlVHlwZSwNCi0gICAgICAgIFVJTlQzMiBudW1iZXJPZkZpbGVzLA0KLSAgICAgICAgX19pbl9lY291bnQobnVtYmVyT2ZGaWxlcykgSURXcml0ZUZvbnRGaWxlKiBjb25zdCogZm9udEZpbGVzLA0KLSAgICAgICAgVUlOVDMyIGZhY2VJbmRleCwNCi0gICAgICAgIERXUklURV9GT05UX1NJTVVMQVRJT05TIGZvbnRGYWNlU2ltdWxhdGlvbkZsYWdzLA0KLSAgICAgICAgX19vdXQgSURXcml0ZUZvbnRGYWNlKiogZm9udEZhY2UNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gQ3JlYXRlcyBhIHJlbmRlcmluZyBwYXJhbWV0ZXJzIG9iamVjdCB3aXRoIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBwcmltYXJ5IG1vbml0b3IuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0icmVuZGVyaW5nUGFyYW1zIj5Ib2xkcyB0aGUgbmV3bHkgY3JlYXRlZCByZW5kZXJpbmcgcGFyYW1ldGVycyBvYmplY3QsIG9yIE5VTEwgaW4gY2FzZSBvZiBmYWlsdXJlLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKENyZWF0ZVJlbmRlcmluZ1BhcmFtcykoDQotICAgICAgICBfX291dCBJRFdyaXRlUmVuZGVyaW5nUGFyYW1zKiogcmVuZGVyaW5nUGFyYW1zDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIENyZWF0ZXMgYSByZW5kZXJpbmcgcGFyYW1ldGVycyBvYmplY3Qgd2l0aCBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgc3BlY2lmaWVkIG1vbml0b3IuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ibW9uaXRvciI+VGhlIG1vbml0b3IgdG8gcmVhZCB0aGUgZGVmYXVsdCB2YWx1ZXMgZnJvbS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InJlbmRlcmluZ1BhcmFtcyI+SG9sZHMgdGhlIG5ld2x5IGNyZWF0ZWQgcmVuZGVyaW5nIHBhcmFtZXRlcnMgb2JqZWN0LCBvciBOVUxMIGluIGNhc2Ugb2YgZmFpbHVyZS48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChDcmVhdGVNb25pdG9yUmVuZGVyaW5nUGFyYW1zKSgNCi0gICAgICAgIEhNT05JVE9SIG1vbml0b3IsDQotICAgICAgICBfX291dCBJRFdyaXRlUmVuZGVyaW5nUGFyYW1zKiogcmVuZGVyaW5nUGFyYW1zDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIENyZWF0ZXMgYSByZW5kZXJpbmcgcGFyYW1ldGVycyBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2FtbWEiPlRoZSBnYW1tYSB2YWx1ZSB1c2VkIGZvciBnYW1tYSBjb3JyZWN0aW9uLCB3aGljaCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBjYW5ub3QgZXhjZWVkIDI1Ni48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImVuaGFuY2VkQ29udHJhc3QiPlRoZSBhbW91bnQgb2YgY29udHJhc3QgZW5oYW5jZW1lbnQsIHplcm8gb3IgZ3JlYXRlci48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImNsZWFyVHlwZUxldmVsIj5UaGUgZGVncmVlIG9mIENsZWFyVHlwZSBsZXZlbCwgZnJvbSAwLjBmIChubyBDbGVhclR5cGUpIHRvIDEuMGYgKGZ1bGwgQ2xlYXJUeXBlKS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InBpeGVsR2VvbWV0cnkiPlRoZSBnZW9tZXRyeSBvZiBhIGRldmljZSBwaXhlbC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InJlbmRlcmluZ01vZGUiPk1ldGhvZCBvZiByZW5kZXJpbmcgZ2x5cGhzLiBJbiBtb3N0IGNhc2VzLCB0aGlzIHNob3VsZCBiZSBEV1JJVEVfUkVOREVSSU5HX01PREVfREVGQVVMVCB0byBhdXRvbWF0aWNhbGx5IHVzZSBhbiBhcHByb3ByaWF0ZSBtb2RlLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0icmVuZGVyaW5nUGFyYW1zIj5Ib2xkcyB0aGUgbmV3bHkgY3JlYXRlZCByZW5kZXJpbmcgcGFyYW1ldGVycyBvYmplY3QsIG9yIE5VTEwgaW4gY2FzZSBvZiBmYWlsdXJlLjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKENyZWF0ZUN1c3RvbVJlbmRlcmluZ1BhcmFtcykoDQotICAgICAgICBGTE9BVCBnYW1tYSwNCi0gICAgICAgIEZMT0FUIGVuaGFuY2VkQ29udHJhc3QsDQotICAgICAgICBGTE9BVCBjbGVhclR5cGVMZXZlbCwNCi0gICAgICAgIERXUklURV9QSVhFTF9HRU9NRVRSWSBwaXhlbEdlb21ldHJ5LA0KLSAgICAgICAgRFdSSVRFX1JFTkRFUklOR19NT0RFIHJlbmRlcmluZ01vZGUsDQotICAgICAgICBfX291dCBJRFdyaXRlUmVuZGVyaW5nUGFyYW1zKiogcmVuZGVyaW5nUGFyYW1zDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFJlZ2lzdGVycyBhIGZvbnQgZmlsZSBsb2FkZXIgd2l0aCBEaXJlY3RXcml0ZS4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RmlsZUxvYWRlciI+UG9pbnRlciB0byB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIElEV3JpdGVGb250RmlsZUxvYWRlciBmb3IgYSBwYXJ0aWN1bGFyIGZpbGUgcmVzb3VyY2UgdHlwZS48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIC8vLyA8cmVtYXJrcz4NCi0gICAgLy8vIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGEgZm9udCBmaWxlIGxvYWRlciB3aXRoIERpcmVjdFdyaXRlLg0KLSAgICAvLy8gRm9udCBmaWxlIGxvYWRlciBpbnRlcmZhY2UgaGFuZGxlcyBsb2FkaW5nIGZvbnQgZmlsZSByZXNvdXJjZXMgb2YgYSBwYXJ0aWN1bGFyIHR5cGUgZnJvbSBhIGtleS4NCi0gICAgLy8vIFRoZSBmb250IGZpbGUgbG9hZGVyIGludGVyZmFjZSBpcyByZWNvbW1lbmRlZCB0byBiZSBpbXBsZW1lbnRlZCBieSBhIHNpbmdsZXRvbiBvYmplY3QuDQotICAgIC8vLyBBIGdpdmVuIGluc3RhbmNlIGNhbiBvbmx5IGJlIHJlZ2lzdGVyZWQgb25jZS4NCi0gICAgLy8vIFN1Y2NlZWRpbmcgYXR0ZW1wdHMgd2lsbCByZXR1cm4gYW4gZXJyb3IgdGhhdCBpdCBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQuDQotICAgIC8vLyBJTVBPUlRBTlQ6IGZvbnQgZmlsZSBsb2FkZXIgaW1wbGVtZW50YXRpb25zIG11c3Qgbm90IHJlZ2lzdGVyIHRoZW1zZWx2ZXMgd2l0aCBEaXJlY3RXcml0ZQ0KLSAgICAvLy8gaW5zaWRlIHRoZWlyIGNvbnN0cnVjdG9ycyBhbmQgbXVzdCBub3QgdW5yZWdpc3RlciB0aGVtc2VsdmVzIGluIHRoZWlyIGRlc3RydWN0b3JzLCBiZWNhdXNlDQotICAgIC8vLyByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0b24gb3BlcmF0aW9ucyBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCB0aGUgb2JqZWN0IHJlZmVyZW5jZSBjb3VudCByZXNwZWN0aXZlbHkuDQotICAgIC8vLyBJbnN0ZWFkLCByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIG9mIGZvbnQgZmlsZSBsb2FkZXJzIHdpdGggRGlyZWN0V3JpdGUgc2hvdWxkIGJlIHBlcmZvcm1lZA0KLSAgICAvLy8gb3V0c2lkZSBvZiB0aGUgZm9udCBmaWxlIGxvYWRlciBpbXBsZW1lbnRhdGlvbiBhcyBhIHNlcGFyYXRlIHN0ZXAuDQotICAgIC8vLyA8L3JlbWFya3M+DQotICAgIFNURE1FVEhPRChSZWdpc3RlckZvbnRGaWxlTG9hZGVyKSgNCi0gICAgICAgIElEV3JpdGVGb250RmlsZUxvYWRlciogZm9udEZpbGVMb2FkZXINCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVW5yZWdpc3RlcnMgYSBmb250IGZpbGUgbG9hZGVyIHRoYXQgd2FzIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB3aXRoIHRoZSBEaXJlY3RXcml0ZSBmb250IHN5c3RlbSB1c2luZyBSZWdpc3RlckZvbnRGaWxlTG9hZGVyLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGaWxlTG9hZGVyIj5Qb2ludGVyIHRvIHRoZSBmaWxlIGxvYWRlciB0aGF0IHdhcyBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgd2l0aCB0aGUgRGlyZWN0V3JpdGUgZm9udCBzeXN0ZW0gdXNpbmcgUmVnaXN0ZXJGb250RmlsZUxvYWRlci48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBUaGlzIGZ1bmN0aW9uIHdpbGwgc3VjY2VlZCBpZiB0aGUgdXNlciBsb2FkZXIgaXMgcmVxdWVzdGVkIHRvIGJlIHJlbW92ZWQuDQotICAgIC8vLyBJdCB3aWxsIGZhaWwgaWYgdGhlIHBvaW50ZXIgdG8gdGhlIGZpbGUgbG9hZGVyIGlkZW50aWZpZXMgYSBzdGFuZGFyZCBEaXJlY3RXcml0ZSBsb2FkZXIsDQotICAgIC8vLyBvciBhIGxvYWRlciB0aGF0IGlzIG5ldmVyIHJlZ2lzdGVyZWQgb3IgaGFzIGFscmVhZHkgYmVlbiB1bnJlZ2lzdGVyZWQuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIC8vLyA8cmVtYXJrcz4NCi0gICAgLy8vIFRoaXMgZnVuY3Rpb24gdW5yZWdpc3RlcnMgZm9udCBmaWxlIGxvYWRlciBjYWxsYmFja3Mgd2l0aCB0aGUgRGlyZWN0V3JpdGUgZm9udCBzeXN0ZW0uDQotICAgIC8vLyBUaGUgZm9udCBmaWxlIGxvYWRlciBpbnRlcmZhY2UgaXMgcmVjb21tZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgYSBzaW5nbGV0b24gb2JqZWN0Lg0KLSAgICAvLy8gSU1QT1JUQU5UOiBmb250IGZpbGUgbG9hZGVyIGltcGxlbWVudGF0aW9ucyBtdXN0IG5vdCByZWdpc3RlciB0aGVtc2VsdmVzIHdpdGggRGlyZWN0V3JpdGUNCi0gICAgLy8vIGluc2lkZSB0aGVpciBjb25zdHJ1Y3RvcnMgYW5kIG11c3Qgbm90IHVucmVnaXN0ZXIgdGhlbXNlbHZlcyBpbiB0aGVpciBkZXN0cnVjdG9ycywgYmVjYXVzZQ0KLSAgICAvLy8gcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdG9uIG9wZXJhdGlvbnMgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgdGhlIG9iamVjdCByZWZlcmVuY2UgY291bnQgcmVzcGVjdGl2ZWx5Lg0KLSAgICAvLy8gSW5zdGVhZCwgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBvZiBmb250IGZpbGUgbG9hZGVycyB3aXRoIERpcmVjdFdyaXRlIHNob3VsZCBiZSBwZXJmb3JtZWQNCi0gICAgLy8vIG91dHNpZGUgb2YgdGhlIGZvbnQgZmlsZSBsb2FkZXIgaW1wbGVtZW50YXRpb24gYXMgYSBzZXBhcmF0ZSBzdGVwLg0KLSAgICAvLy8gPC9yZW1hcmtzPg0KLSAgICBTVERNRVRIT0QoVW5yZWdpc3RlckZvbnRGaWxlTG9hZGVyKSgNCi0gICAgICAgIElEV3JpdGVGb250RmlsZUxvYWRlciogZm9udEZpbGVMb2FkZXINCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gQ3JlYXRlIGEgdGV4dCBmb3JtYXQgb2JqZWN0IHVzZWQgZm9yIHRleHQgbGF5b3V0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGYW1pbHlOYW1lIj5OYW1lIG9mIHRoZSBmb250IGZhbWlseTwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udENvbGxlY3Rpb24iPkZvbnQgY29sbGVjdGlvbi4gTlVMTCBpbmRpY2F0ZXMgdGhlIHN5c3RlbSBmb250IGNvbGxlY3Rpb24uPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250V2VpZ2h0Ij5Gb250IHdlaWdodDwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udFN0eWxlIj5Gb250IHN0eWxlPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250U3RyZXRjaCI+Rm9udCBzdHJldGNoPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJmb250U2l6ZSI+TG9naWNhbCBzaXplIG9mIHRoZSBmb250IGluIERJUCB1bml0cy4gQSBESVAgKCJkZXZpY2UtaW5kZXBlbmRlbnQgcGl4ZWwiKSBlcXVhbHMgMS85NiBpbmNoLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ibG9jYWxlTmFtZSI+TG9jYWxlIG5hbWU8L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRGb3JtYXQiPkNvbnRhaW5zIG5ld2x5IGNyZWF0ZWQgdGV4dCBmb3JtYXQgb2JqZWN0LCBvciBOVUxMIGluIGNhc2Ugb2YgZmFpbHVyZS48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChDcmVhdGVUZXh0Rm9ybWF0KSgNCi0gICAgICAgIF9faW5feiBXQ0hBUiBjb25zdCogZm9udEZhbWlseU5hbWUsDQotICAgICAgICBfX21heWJlbnVsbCBJRFdyaXRlRm9udENvbGxlY3Rpb24qIGZvbnRDb2xsZWN0aW9uLA0KLSAgICAgICAgRFdSSVRFX0ZPTlRfV0VJR0hUIGZvbnRXZWlnaHQsDQotICAgICAgICBEV1JJVEVfRk9OVF9TVFlMRSBmb250U3R5bGUsDQotICAgICAgICBEV1JJVEVfRk9OVF9TVFJFVENIIGZvbnRTdHJldGNoLA0KLSAgICAgICAgRkxPQVQgZm9udFNpemUsDQotICAgICAgICBfX2luX3ogV0NIQVIgY29uc3QqIGxvY2FsZU5hbWUsDQotICAgICAgICBfX291dCBJRFdyaXRlVGV4dEZvcm1hdCoqIHRleHRGb3JtYXQNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gQ3JlYXRlIGEgdHlwb2dyYXBoeSBvYmplY3QgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRleHQgZm9ybWF0IGZvciB0ZXh0IGxheW91dC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0eXBvZ3JhcGh5Ij5Db250YWlucyBuZXdseSBjcmVhdGVkIHR5cG9ncmFwaHkgb2JqZWN0LCBvciBOVUxMIGluIGNhc2Ugb2YgZmFpbHVyZS48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChDcmVhdGVUeXBvZ3JhcGh5KSgNCi0gICAgICAgIF9fb3V0IElEV3JpdGVUeXBvZ3JhcGh5KiogdHlwb2dyYXBoeQ0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBDcmVhdGUgYW4gb2JqZWN0IHVzZWQgZm9yIGludGVyb3BlcmFiaWxpdHkgd2l0aCBHREkuDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2RpSW50ZXJvcCI+UmVjZWl2ZXMgdGhlIEdESSBpbnRlcm9wIG9iamVjdCBpZiBzdWNjZXNzZnVsLCBvciBOVUxMIGluIGNhc2Ugb2YgZmFpbHVyZS48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChHZXRHZGlJbnRlcm9wKSgNCi0gICAgICAgIF9fb3V0IElEV3JpdGVHZGlJbnRlcm9wKiogZ2RpSW50ZXJvcA0KLSAgICAgICAgKSBQVVJFOw0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBDcmVhdGVUZXh0TGF5b3V0IHRha2VzIGEgc3RyaW5nLCBmb3JtYXQsIGFuZCBhc3NvY2lhdGVkIGNvbnN0cmFpbnRzDQotICAgIC8vLyBhbmQgcHJvZHVjZXMgYW5kIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGZ1bGx5IGFuYWx5emVkDQotICAgIC8vLyBhbmQgZm9ybWF0dGVkIHJlc3VsdC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJpbmciPlRoZSBzdHJpbmcgdG8gbGF5b3V0LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyaW5nTGVuZ3RoIj5UaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0Rm9ybWF0Ij5UaGUgZm9ybWF0IHRvIGFwcGx5IHRvIHRoZSBzdHJpbmcuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJtYXhXaWR0aCI+V2lkdGggb2YgdGhlIGxheW91dCBib3guPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJtYXhIZWlnaHQiPkhlaWdodCBvZiB0aGUgbGF5b3V0IGJveC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRMYXlvdXQiPlRoZSByZXN1bHRhbnQgb2JqZWN0LjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKENyZWF0ZVRleHRMYXlvdXQpKA0KLSAgICAgICAgX19pbl9lY291bnQoc3RyaW5nTGVuZ3RoKSBXQ0hBUiBjb25zdCogc3RyaW5nLA0KLSAgICAgICAgVUlOVDMyIHN0cmluZ0xlbmd0aCwNCi0gICAgICAgIElEV3JpdGVUZXh0Rm9ybWF0KiB0ZXh0Rm9ybWF0LA0KLSAgICAgICAgRkxPQVQgbWF4V2lkdGgsDQotICAgICAgICBGTE9BVCBtYXhIZWlnaHQsDQotICAgICAgICBfX291dCBJRFdyaXRlVGV4dExheW91dCoqIHRleHRMYXlvdXQNCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gQ3JlYXRlR2RpQ29tcGF0aWJsZVRleHRMYXlvdXQgdGFrZXMgYSBzdHJpbmcsIGZvcm1hdCwgYW5kIGFzc29jaWF0ZWQgY29uc3RyYWludHMNCi0gICAgLy8vIGFuZCBwcm9kdWNlcyBhbmQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzdWx0IGZvcm1hdHRlZCBmb3IgYSBwYXJ0aWN1bGFyIGRpc3BsYXkgcmVzb2x1dGlvbg0KLSAgICAvLy8gYW5kIG1lYXN1cmluZyBtZXRob2QuIFRoZSByZXN1bHRpbmcgdGV4dCBsYXlvdXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdGhlIGludGVuZGVkIHJlc29sdXRpb24sDQotICAgIC8vLyBhbmQgZm9yIGNhc2VzIHdoZXJlIHRleHQgc2NhbGFiaWxpdHkgaXMgZGVzaXJlZCwgQ3JlYXRlVGV4dExheW91dCBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmluZyI+VGhlIHN0cmluZyB0byBsYXlvdXQuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJpbmdMZW5ndGgiPlRoZSBsZW5ndGggb2YgdGhlIHN0cmluZy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRGb3JtYXQiPlRoZSBmb3JtYXQgdG8gYXBwbHkgdG8gdGhlIHN0cmluZy48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImxheW91dFdpZHRoIj5XaWR0aCBvZiB0aGUgbGF5b3V0IGJveC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9ImxheW91dEhlaWdodCI+SGVpZ2h0IG9mIHRoZSBsYXlvdXQgYm94LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0icGl4ZWxzUGVyRGlwIj5OdW1iZXIgb2YgcGh5c2ljYWwgcGl4ZWxzIHBlciBESVAuIEZvciBleGFtcGxlLCBpZiByZW5kZXJpbmcgb250byBhIDk2IERQSSBkZXZpY2UgdGhlbiBwaXhlbHNQZXJEaXANCi0gICAgLy8vIGlzIDEuIElmIHJlbmRlcmluZyBvbnRvIGEgMTIwIERQSSBkZXZpY2UgdGhlbiBwaXhlbHNQZXJEaXAgaXMgMTIwLzk2LjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0idHJhbnNmb3JtIj5PcHRpb25hbCB0cmFuc2Zvcm0gYXBwbGllZCB0byB0aGUgZ2x5cGhzIGFuZCB0aGVpciBwb3NpdGlvbnMuIFRoaXMgdHJhbnNmb3JtIGlzIGFwcGxpZWQgYWZ0ZXIgdGhlDQotICAgIC8vLyBzY2FsaW5nIHNwZWNpZmllZCB0aGUgZm9udCBzaXplIGFuZCBwaXhlbHNQZXJEaXAuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ1c2VHZGlOYXR1cmFsIj4NCi0gICAgLy8vIFdoZW4gc2V0IHRvIEZBTFNFLCBpbnN0cnVjdHMgdGhlIHRleHQgbGF5b3V0IHRvIHVzZSB0aGUgc2FtZSBtZXRyaWNzIGFzIEdESSBhbGlhc2VkIHRleHQuDQotICAgIC8vLyBXaGVuIHNldCB0byBUUlVFLCBpbnN0cnVjdHMgdGhlIHRleHQgbGF5b3V0IHRvIHVzZSB0aGUgc2FtZSBtZXRyaWNzIGFzIHRleHQgbWVhc3VyZWQgYnkgR0RJIHVzaW5nIGEgZm9udA0KLSAgICAvLy8gY3JlYXRlZCB3aXRoIENMRUFSVFlQRV9OQVRVUkFMX1FVQUxJVFkuDQotICAgIC8vLyA8L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRMYXlvdXQiPlRoZSByZXN1bHRhbnQgb2JqZWN0LjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKENyZWF0ZUdkaUNvbXBhdGlibGVUZXh0TGF5b3V0KSgNCi0gICAgICAgIF9faW5fZWNvdW50KHN0cmluZ0xlbmd0aCkgV0NIQVIgY29uc3QqIHN0cmluZywNCi0gICAgICAgIFVJTlQzMiBzdHJpbmdMZW5ndGgsDQotICAgICAgICBJRFdyaXRlVGV4dEZvcm1hdCogdGV4dEZvcm1hdCwNCi0gICAgICAgIEZMT0FUIGxheW91dFdpZHRoLA0KLSAgICAgICAgRkxPQVQgbGF5b3V0SGVpZ2h0LA0KLSAgICAgICAgRkxPQVQgcGl4ZWxzUGVyRGlwLA0KLSAgICAgICAgX19pbl9vcHQgRFdSSVRFX01BVFJJWCBjb25zdCogdHJhbnNmb3JtLA0KLSAgICAgICAgQk9PTCB1c2VHZGlOYXR1cmFsLA0KLSAgICAgICAgX19vdXQgSURXcml0ZVRleHRMYXlvdXQqKiB0ZXh0TGF5b3V0DQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIFRoZSBhcHBsaWNhdGlvbiBtYXkgY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhbiBpbmxpbmUgb2JqZWN0IGZvciB0cmltbWluZywgdXNpbmcgYW4gZWxsaXBzaXMgYXMgdGhlIG9taXNzaW9uIHNpZ24uDQotICAgIC8vLyBUaGUgZWxsaXBzaXMgd2lsbCBiZSBjcmVhdGVkIHVzaW5nIHRoZSBjdXJyZW50IHNldHRpbmdzIG9mIHRoZSBmb3JtYXQsIGluY2x1ZGluZyBiYXNlIGZvbnQsIHN0eWxlLCBhbmQgYW55IGVmZmVjdHMuDQotICAgIC8vLyBBbHRlcm5hdGUgb21pc3Npb24gc2lnbnMgY2FuIGJlIGNyZWF0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGJ5IGltcGxlbWVudGluZyBJRFdyaXRlSW5saW5lT2JqZWN0Lg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRGb3JtYXQiPlRleHQgZm9ybWF0IHVzZWQgYXMgYSB0ZW1wbGF0ZSBmb3IgdGhlIG9taXNzaW9uIHNpZ24uPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0cmltbWluZ1NpZ24iPkNyZWF0ZWQgb21pc3Npb24gc2lnbi48L3BhcmFtPg0KLSAgICAvLy8gPHJldHVybnM+DQotICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuDQotICAgIC8vLyA8L3JldHVybnM+DQotICAgIFNURE1FVEhPRChDcmVhdGVFbGxpcHNpc1RyaW1taW5nU2lnbikoDQotICAgICAgICBJRFdyaXRlVGV4dEZvcm1hdCogdGV4dEZvcm1hdCwNCi0gICAgICAgIF9fb3V0IElEV3JpdGVJbmxpbmVPYmplY3QqKiB0cmltbWluZ1NpZ24NCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gUmV0dXJuIGFuIGludGVyZmFjZSB0byBwZXJmb3JtIHRleHQgYW5hbHlzaXMgd2l0aC4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0QW5hbHl6ZXIiPlRoZSByZXN1bHRhbnQgb2JqZWN0LjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKENyZWF0ZVRleHRBbmFseXplcikoDQotICAgICAgICBfX291dCBJRFdyaXRlVGV4dEFuYWx5emVyKiogdGV4dEFuYWx5emVyDQotICAgICAgICApIFBVUkU7DQotDQotICAgIC8vLyA8c3VtbWFyeT4NCi0gICAgLy8vIENyZWF0ZXMgYSBudW1iZXIgc3Vic3RpdHV0aW9uIG9iamVjdCB1c2luZyBhIGxvY2FsZSBuYW1lLA0KLSAgICAvLy8gc3Vic3RpdHV0aW9uIG1ldGhvZCwgYW5kIHdoZXRoZXIgdG8gaWdub3JlIHVzZXIgb3ZlcnJpZGVzICh1c2VzIE5MUw0KLSAgICAvLy8gZGVmYXVsdHMgZm9yIHRoZSBnaXZlbiBjdWx0dXJlIGluc3RlYWQpLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InN1YnN0aXR1dGlvbk1ldGhvZCI+TWV0aG9kIG9mIG51bWJlciBzdWJzdGl0dXRpb24gdG8gdXNlLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ibG9jYWxlTmFtZSI+V2hpY2ggbG9jYWxlIHRvIG9idGFpbiB0aGUgZGlnaXRzIGZyb20uPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJpZ25vcmVVc2VyT3ZlcnJpZGUiPklnbm9yZSB0aGUgdXNlcidzIHNldHRpbmdzIGFuZCB1c2UgdGhlIGxvY2FsZSBkZWZhdWx0czwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0ibnVtYmVyU3Vic3RpdHV0aW9uIj5SZWNlaXZlcyBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LjwvcGFyYW0+DQotICAgIFNURE1FVEhPRChDcmVhdGVOdW1iZXJTdWJzdGl0dXRpb24pKA0KLSAgICAgICAgX19pbiBEV1JJVEVfTlVNQkVSX1NVQlNUSVRVVElPTl9NRVRIT0Qgc3Vic3RpdHV0aW9uTWV0aG9kLA0KLSAgICAgICAgX19pbl96IFdDSEFSIGNvbnN0KiBsb2NhbGVOYW1lLA0KLSAgICAgICAgX19pbiBCT09MIGlnbm9yZVVzZXJPdmVycmlkZSwNCi0gICAgICAgIF9fb3V0IElEV3JpdGVOdW1iZXJTdWJzdGl0dXRpb24qKiBudW1iZXJTdWJzdGl0dXRpb24NCi0gICAgICAgICkgUFVSRTsNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gQ3JlYXRlcyBhIGdseXBoIHJ1biBhbmFseXNpcyBvYmplY3QsIHdoaWNoIGVuY2Fwc3VsYXRlcyBpbmZvcm1hdGlvbg0KLSAgICAvLy8gdXNlZCB0byByZW5kZXIgYSBnbHlwaCBydW4uDQotICAgIC8vLyA8L3N1bW1hcnk+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2x5cGhSdW4iPlN0cnVjdHVyZSBzcGVjaWZ5aW5nIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBnbHlwaCBydW4uPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJwaXhlbHNQZXJEaXAiPk51bWJlciBvZiBwaHlzaWNhbCBwaXhlbHMgcGVyIERJUC4gRm9yIGV4YW1wbGUsIGlmIHJlbmRlcmluZyBvbnRvIGEgOTYgRFBJIGJpdG1hcCB0aGVuIHBpeGVsc1BlckRpcA0KLSAgICAvLy8gaXMgMS4gSWYgcmVuZGVyaW5nIG9udG8gYSAxMjAgRFBJIGJpdG1hcCB0aGVuIHBpeGVsc1BlckRpcCBpcyAxMjAvOTYuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJ0cmFuc2Zvcm0iPk9wdGlvbmFsIHRyYW5zZm9ybSBhcHBsaWVkIHRvIHRoZSBnbHlwaHMgYW5kIHRoZWlyIHBvc2l0aW9ucy4gVGhpcyB0cmFuc2Zvcm0gaXMgYXBwbGllZCBhZnRlciB0aGUNCi0gICAgLy8vIHNjYWxpbmcgc3BlY2lmaWVkIHRoZSBlbVNpemUgYW5kIHBpeGVsc1BlckRpcC48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9InJlbmRlcmluZ01vZGUiPlNwZWNpZmllcyB0aGUgcmVuZGVyaW5nIG1vZGUsIHdoaWNoIG11c3QgYmUgb25lIG9mIHRoZSByYXN0ZXIgcmVuZGVyaW5nIG1vZGVzIChpLmUuLCBub3QgZGVmYXVsdA0KLSAgICAvLy8gYW5kIG5vdCBvdXRsaW5lKS48L3BhcmFtPg0KLSAgICAvLy8gPHBhcmFtIG5hbWU9Im1lYXN1cmluZ01vZGUiPlNwZWNpZmllcyB0aGUgbWV0aG9kIHRvIG1lYXN1cmUgZ2x5cGhzLjwvcGFyYW0+DQotICAgIC8vLyA8cGFyYW0gbmFtZT0iYmFzZWxpbmVPcmlnaW5YIj5Ib3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBiYXNlbGluZSBvcmlnaW4sIGluIERJUHMuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJiYXNlbGluZU9yaWdpblkiPlZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSBiYXNlbGluZSBvcmlnaW4sIGluIERJUHMuPC9wYXJhbT4NCi0gICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaFJ1bkFuYWx5c2lzIj5SZWNlaXZlcyBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LjwvcGFyYW0+DQotICAgIC8vLyA8cmV0dXJucz4NCi0gICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4NCi0gICAgLy8vIDwvcmV0dXJucz4NCi0gICAgU1RETUVUSE9EKENyZWF0ZUdseXBoUnVuQW5hbHlzaXMpKA0KLSAgICAgICAgX19pbiBEV1JJVEVfR0xZUEhfUlVOIGNvbnN0KiBnbHlwaFJ1biwNCi0gICAgICAgIEZMT0FUIHBpeGVsc1BlckRpcCwNCi0gICAgICAgIF9faW5fb3B0IERXUklURV9NQVRSSVggY29uc3QqIHRyYW5zZm9ybSwNCi0gICAgICAgIERXUklURV9SRU5ERVJJTkdfTU9ERSByZW5kZXJpbmdNb2RlLA0KLSAgICAgICAgRFdSSVRFX01FQVNVUklOR19NT0RFIG1lYXN1cmluZ01vZGUsDQotICAgICAgICBGTE9BVCBiYXNlbGluZU9yaWdpblgsDQotICAgICAgICBGTE9BVCBiYXNlbGluZU9yaWdpblksDQotICAgICAgICBfX291dCBJRFdyaXRlR2x5cGhSdW5BbmFseXNpcyoqIGdseXBoUnVuQW5hbHlzaXMNCi0gICAgICAgICkgUFVSRTsNCi0NCi19OyAvLyBpbnRlcmZhY2UgSURXcml0ZUZhY3RvcnkNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIENyZWF0ZXMgYSBEaXJlY3RXcml0ZSBmYWN0b3J5IG9iamVjdCB0aGF0IGlzIHVzZWQgZm9yIHN1YnNlcXVlbnQgY3JlYXRpb24gb2YgaW5kaXZpZHVhbCBEaXJlY3RXcml0ZSBvYmplY3RzLg0KLS8vLyA8L3N1bW1hcnk+DQotLy8vIDxwYXJhbSBuYW1lPSJmYWN0b3J5VHlwZSI+SWRlbnRpZmllcyB3aGV0aGVyIHRoZSBmYWN0b3J5IG9iamVjdCB3aWxsIGJlIHNoYXJlZCBvciBpc29sYXRlZC48L3BhcmFtPg0KLS8vLyA8cGFyYW0gbmFtZT0iaWlkIj5JZGVudGlmaWVzIHRoZSBEaXJlY3RXcml0ZSBmYWN0b3J5IGludGVyZmFjZSwgc3VjaCBhcyBfX3V1aWRvZihJRFdyaXRlRmFjdG9yeSkuPC9wYXJhbT4NCi0vLy8gPHBhcmFtIG5hbWU9ImZhY3RvcnkiPlJlY2VpdmVzIHRoZSBEaXJlY3RXcml0ZSBmYWN0b3J5IG9iamVjdC48L3BhcmFtPg0KLS8vLyA8cmV0dXJucz4NCi0vLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLg0KLS8vLyA8L3JldHVybnM+DQotLy8vIDxyZW1hcmtzPg0KLS8vLyBPYnRhaW5zIERpcmVjdFdyaXRlIGZhY3Rvcnkgb2JqZWN0IHRoYXQgaXMgdXNlZCBmb3Igc3Vic2VxdWVudCBjcmVhdGlvbiBvZiBpbmRpdmlkdWFsIERpcmVjdFdyaXRlIGNsYXNzZXMuDQotLy8vIERpcmVjdFdyaXRlIGZhY3RvcnkgY29udGFpbnMgaW50ZXJuYWwgc3RhdGUgc3VjaCBhcyBmb250IGxvYWRlciByZWdpc3RyYXRpb24gYW5kIGNhY2hlZCBmb250IGRhdGEuDQotLy8vIEluIG1vc3QgY2FzZXMgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBzaGFyZWQgZmFjdG9yeSBvYmplY3QsIGJlY2F1c2UgaXQgYWxsb3dzIG11bHRpcGxlIGNvbXBvbmVudHMNCi0vLy8gdGhhdCB1c2UgRGlyZWN0V3JpdGUgdG8gc2hhcmUgaW50ZXJuYWwgRGlyZWN0V3JpdGUgc3RhdGUgYW5kIHJlZHVjZSBtZW1vcnkgdXNhZ2UuDQotLy8vIEhvd2V2ZXIsIHRoZXJlIGFyZSBjYXNlcyB3aGVuIGl0IGlzIGRlc2lyYWJsZSB0byByZWR1Y2UgdGhlIGltcGFjdCBvZiBhIGNvbXBvbmVudCwNCi0vLy8gc3VjaCBhcyBhIHBsdWctaW4gZnJvbSBhbiB1bnRydXN0ZWQgc291cmNlLCBvbiB0aGUgcmVzdCBvZiB0aGUgcHJvY2VzcyBieSBzYW5kYm94aW5nIGFuZCBpc29sYXRpbmcgaXQNCi0vLy8gZnJvbSB0aGUgcmVzdCBvZiB0aGUgcHJvY2VzcyBjb21wb25lbnRzLiBJbiBzdWNoIGNhc2VzLCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgYW4gaXNvbGF0ZWQgZmFjdG9yeSBmb3IgdGhlIHNhbmRib3hlZA0KLS8vLyBjb21wb25lbnQuDQotLy8vIDwvcmVtYXJrcz4NCi1FWFRFUk5fQyBIUkVTVUxUIERXUklURV9FWFBPUlQgRFdyaXRlQ3JlYXRlRmFjdG9yeSgNCi0gICAgX19pbiBEV1JJVEVfRkFDVE9SWV9UWVBFIGZhY3RvcnlUeXBlLA0KLSAgICBfX2luIFJFRklJRCBpaWQsDQotICAgIF9fb3V0IElVbmtub3duICoqZmFjdG9yeQ0KLSAgICApOw0KLQ0KLS8vIE1hY3JvcyB1c2VkIHRvIGRlZmluZSBEaXJlY3RXcml0ZSBlcnJvciBjb2Rlcy4NCi0jZGVmaW5lIEZBQ0lMSVRZX0RXUklURSAweDg5OA0KLSNkZWZpbmUgRFdSSVRFX0VSUl9CQVNFIDB4NTAwMA0KLSNkZWZpbmUgTUFLRV9EV1JJVEVfSFIoc2V2ZXJpdHksIGNvZGUpIE1BS0VfSFJFU1VMVChzZXZlcml0eSwgRkFDSUxJVFlfRFdSSVRFLCAoRFdSSVRFX0VSUl9CQVNFICsgY29kZSkpDQotI2RlZmluZSBNQUtFX0RXUklURV9IUl9FUlIoY29kZSkgTUFLRV9EV1JJVEVfSFIoU0VWRVJJVFlfRVJST1IsIGNvZGUpDQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBJbmRpY2F0ZXMgYW4gZXJyb3IgaW4gYW4gaW5wdXQgZmlsZSBzdWNoIGFzIGEgZm9udCBmaWxlLg0KLS8vLyA8L3N1bW1hcnk+DQotI2RlZmluZSBEV1JJVEVfRV9GSUxFRk9STUFUICAgICAgICAgICAgIE1BS0VfRFdSSVRFX0hSX0VSUigweDAwMCkNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIEluZGljYXRlcyBhbiBlcnJvciBvcmlnaW5hdGluZyBpbiBEaXJlY3RXcml0ZSBjb2RlLCB3aGljaCBpcyBub3QgZXhwZWN0ZWQgdG8gb2NjdXIgYnV0IGlzIHNhZmUgdG8gcmVjb3ZlciBmcm9tLg0KLS8vLyA8L3N1bW1hcnk+DQotI2RlZmluZSBEV1JJVEVfRV9VTkVYUEVDVEVEICAgICAgICAgICAgIE1BS0VfRFdSSVRFX0hSX0VSUigweDAwMSkNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIEluZGljYXRlcyB0aGUgc3BlY2lmaWVkIGZvbnQgZG9lcyBub3QgZXhpc3QuDQotLy8vIDwvc3VtbWFyeT4NCi0jZGVmaW5lIERXUklURV9FX05PRk9OVCAgICAgICAgICAgICAgICAgTUFLRV9EV1JJVEVfSFJfRVJSKDB4MDAyKQ0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gQSBmb250IGZpbGUgY291bGQgbm90IGJlIG9wZW5lZCBiZWNhdXNlIHRoZSBmaWxlLCBkaXJlY3RvcnksIG5ldHdvcmsgbG9jYXRpb24sIGRyaXZlLCBvciBvdGhlciBzdG9yYWdlDQotLy8vIGxvY2F0aW9uIGRvZXMgbm90IGV4aXN0IG9yIGlzIHVuYXZhaWxhYmxlLg0KLS8vLyA8L3N1bW1hcnk+DQotI2RlZmluZSBEV1JJVEVfRV9GSUxFTk9URk9VTkQgICAgICAgICAgIE1BS0VfRFdSSVRFX0hSX0VSUigweDAwMykNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIEEgZm9udCBmaWxlIGV4aXN0cyBidXQgY291bGQgbm90IGJlIG9wZW5lZCBkdWUgdG8gYWNjZXNzIGRlbmllZCwgc2hhcmluZyB2aW9sYXRpb24sIG9yIHNpbWlsYXIgZXJyb3IuDQotLy8vIDwvc3VtbWFyeT4NCi0jZGVmaW5lIERXUklURV9FX0ZJTEVBQ0NFU1MgICAgICAgICAgICAgTUFLRV9EV1JJVEVfSFJfRVJSKDB4MDA0KQ0KLQ0KLS8vLyA8c3VtbWFyeT4NCi0vLy8gQSBmb250IGNvbGxlY3Rpb24gaXMgb2Jzb2xldGUgZHVlIHRvIGNoYW5nZXMgaW4gdGhlIHN5c3RlbS4NCi0vLy8gPC9zdW1tYXJ5Pg0KLSNkZWZpbmUgRFdSSVRFX0VfRk9OVENPTExFQ1RJT05PQlNPTEVURSBNQUtFX0RXUklURV9IUl9FUlIoMHgwMDUpDQotDQotLy8vIDxzdW1tYXJ5Pg0KLS8vLyBUaGUgZ2l2ZW4gaW50ZXJmYWNlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC4NCi0vLy8gPC9zdW1tYXJ5Pg0KLSNkZWZpbmUgRFdSSVRFX0VfQUxSRUFEWVJFR0lTVEVSRUQgICAgICBNQUtFX0RXUklURV9IUl9FUlIoMHgwMDYpDQotDQotI2VuZGlmIC8qIERXUklURV9IX0lOQ0xVREVEICovDQorLy8rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisvLyAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vICBBYnN0cmFjdDoKKy8vICAgICBEaXJlY3RYIFR5cG9ncmFwaHkgU2VydmljZXMgcHVibGljIEFQSSBkZWZpbml0aW9ucy4KKy8vCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2lmbmRlZiBEV1JJVEVfSF9JTkNMVURFRAorI2RlZmluZSBEV1JJVEVfSF9JTkNMVURFRAorCisjaWYgX01TQ19WRVIgPiAxMDAwCisjcHJhZ21hIG9uY2UKKyNlbmRpZgorCisjaWZuZGVmIERXUklURV9OT19XSU5ET1dTX0gKKworI2luY2x1ZGUgInNwZWNzdHJpbmdzLmgiCisjaW5jbHVkZSAidW5rbnduLmgiCisKKyNlbmRpZiAvLyBEV1JJVEVfTk9fV0lORE9XU19ICisKKyNpbmNsdWRlICJkY29tbW9uLmgiCisKKyNpZiBfRlhfQ09NUElMRVJfID09IF9GWF9WQzZfCit0eXBlZGVmIHNpZ25lZCBjaGFyICAgICAgICAgSU5UOCwgKlBJTlQ4OwordHlwZWRlZiBzaWduZWQgc2hvcnQgICAgICAgIElOVDE2LCAqUElOVDE2OwordHlwZWRlZiBzaWduZWQgaW50ICAgICAgICAgIElOVDMyLCAqUElOVDMyOwordHlwZWRlZiBzaWduZWQgX19pbnQ2NCAgICAgIElOVDY0LCAqUElOVDY0OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgICAgIFVJTlQ4LCAqUFVJTlQ4OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICAgIFVJTlQxNiwgKlBVSU5UMTY7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICAgVUlOVDMyLCAqUFVJTlQzMjsKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCAgICBVSU5UNjQsICpQVUlOVDY0OworI2VuZGlmCisKKyNpZm5kZWYgRFdSSVRFX0RFQ0xBUkVfSU5URVJGQUNFCisjZGVmaW5lIERXUklURV9ERUNMQVJFX0lOVEVSRkFDRShpaWQpIERFQ0xTUEVDX1VVSUQoaWlkKSBERUNMU1BFQ19OT1ZUQUJMRQorI2VuZGlmCisKKyNpZm5kZWYgRFdSSVRFX0VYUE9SVAorI2RlZmluZSBEV1JJVEVfRVhQT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBXSU5BUEkKKyNlbmRpZgorCisvLy8gPHN1bW1hcnk+CisvLy8gVGhlIHR5cGUgb2YgYSBmb250IHJlcHJlc2VudGVkIGJ5IGEgc2luZ2xlIGZvbnQgZmlsZS4KKy8vLyBGb250IGZvcm1hdHMgdGhhdCBjb25zaXN0IG9mIG11bHRpcGxlIGZpbGVzLCBlLmcuIFR5cGUgMSAuUEZNIGFuZCAuUEZCLCBoYXZlCisvLy8gc2VwYXJhdGUgZW51bSB2YWx1ZXMgZm9yIGVhY2ggb2YgdGhlIGZpbGUgdHlwZS4KKy8vLyA8L3N1bW1hcnk+CitlbnVtIERXUklURV9GT05UX0ZJTEVfVFlQRQoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gRm9udCB0eXBlIGlzIG5vdCByZWNvZ25pemVkIGJ5IHRoZSBEaXJlY3RXcml0ZSBmb250IHN5c3RlbS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9GT05UX0ZJTEVfVFlQRV9VTktOT1dOLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBPcGVuVHlwZSBmb250IHdpdGggQ0ZGIG91dGxpbmVzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0ZPTlRfRklMRV9UWVBFX0NGRiwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gT3BlblR5cGUgZm9udCB3aXRoIFRydWVUeXBlIG91dGxpbmVzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0ZPTlRfRklMRV9UWVBFX1RSVUVUWVBFLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBPcGVuVHlwZSBmb250IHRoYXQgY29udGFpbnMgYSBUcnVlVHlwZSBjb2xsZWN0aW9uLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0ZPTlRfRklMRV9UWVBFX1RSVUVUWVBFX0NPTExFQ1RJT04sCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFR5cGUgMSBQRk0gZm9udC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9GT05UX0ZJTEVfVFlQRV9UWVBFMV9QRk0sCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFR5cGUgMSBQRkIgZm9udC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9GT05UX0ZJTEVfVFlQRV9UWVBFMV9QRkIsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFZlY3RvciAuRk9OIGZvbnQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRk9OVF9GSUxFX1RZUEVfVkVDVE9SLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBCaXRtYXAgLkZPTiBmb250LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0ZPTlRfRklMRV9UWVBFX0JJVE1BUAorfTsKKworLy8vIDxzdW1tYXJ5PgorLy8vIFRoZSBmaWxlIGZvcm1hdCBvZiBhIGNvbXBsZXRlIGZvbnQgZmFjZS4KKy8vLyBGb250IGZvcm1hdHMgdGhhdCBjb25zaXN0IG9mIG11bHRpcGxlIGZpbGVzLCBlLmcuIFR5cGUgMSAuUEZNIGFuZCAuUEZCLCBoYXZlCisvLy8gYSBzaW5nbGUgZW51bSBlbnRyeS4KKy8vLyA8L3N1bW1hcnk+CitlbnVtIERXUklURV9GT05UX0ZBQ0VfVFlQRQoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gT3BlblR5cGUgZm9udCBmYWNlIHdpdGggQ0ZGIG91dGxpbmVzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0ZPTlRfRkFDRV9UWVBFX0NGRiwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gT3BlblR5cGUgZm9udCBmYWNlIHdpdGggVHJ1ZVR5cGUgb3V0bGluZXMuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRk9OVF9GQUNFX1RZUEVfVFJVRVRZUEUsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIE9wZW5UeXBlIGZvbnQgZmFjZSB0aGF0IGlzIGEgcGFydCBvZiBhIFRydWVUeXBlIGNvbGxlY3Rpb24uCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRk9OVF9GQUNFX1RZUEVfVFJVRVRZUEVfQ09MTEVDVElPTiwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQSBUeXBlIDEgZm9udCBmYWNlLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0ZPTlRfRkFDRV9UWVBFX1RZUEUxLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBBIHZlY3RvciAuRk9OIGZvcm1hdCBmb250IGZhY2UuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRk9OVF9GQUNFX1RZUEVfVkVDVE9SLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBBIGJpdG1hcCAuRk9OIGZvcm1hdCBmb250IGZhY2UuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRk9OVF9GQUNFX1RZUEVfQklUTUFQLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBGb250IGZhY2UgdHlwZSBpcyBub3QgcmVjb2duaXplZCBieSB0aGUgRGlyZWN0V3JpdGUgZm9udCBzeXN0ZW0uCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRk9OVF9GQUNFX1RZUEVfVU5LTk9XTgorfTsKKworLy8vIDxzdW1tYXJ5PgorLy8vIFNwZWNpZmllcyBhbGdvcml0aG1pYyBzdHlsZSBzaW11bGF0aW9ucyB0byBiZSBhcHBsaWVkIHRvIHRoZSBmb250IGZhY2UuCisvLy8gQm9sZCBhbmQgb2JsaXF1ZSBzaW11bGF0aW9ucyBjYW4gYmUgY29tYmluZWQgdmlhIGJpdHdpc2UgT1Igb3BlcmF0aW9uLgorLy8vIDwvc3VtbWFyeT4KK2VudW0gRFdSSVRFX0ZPTlRfU0lNVUxBVElPTlMKK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIE5vIHNpbXVsYXRpb25zIGFyZSBwZXJmb3JtZWQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRk9OVF9TSU1VTEFUSU9OU19OT05FICAgID0gMHgwMDAwLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBBbGdvcml0aG1pYyBlbWJvbGRlbmluZyBpcyBwZXJmb3JtZWQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRk9OVF9TSU1VTEFUSU9OU19CT0xEICAgID0gMHgwMDAxLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBBbGdvcml0aG1pYyBpdGFsaWNpemF0aW9uIGlzIHBlcmZvcm1lZC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9GT05UX1NJTVVMQVRJT05TX09CTElRVUUgPSAweDAwMDIKK307CisKKyNpZmRlZiBERUZJTkVfRU5VTV9GTEFHX09QRVJBVE9SUworREVGSU5FX0VOVU1fRkxBR19PUEVSQVRPUlMoRFdSSVRFX0ZPTlRfU0lNVUxBVElPTlMpOworI2VuZGlmCisKKy8vLyA8c3VtbWFyeT4KKy8vLyBUaGUgZm9udCB3ZWlnaHQgZW51bWVyYXRpb24gZGVzY3JpYmVzIGNvbW1vbiB2YWx1ZXMgZm9yIGRlZ3JlZSBvZiBibGFja25lc3Mgb3IgdGhpY2tuZXNzIG9mIHN0cm9rZXMgb2YgY2hhcmFjdGVycyBpbiBhIGZvbnQuCisvLy8gRm9udCB3ZWlnaHQgdmFsdWVzIGxlc3MgdGhhbiAxIG9yIGdyZWF0ZXIgdGhhbiA5OTkgYXJlIGNvbnNpZGVyZWQgdG8gYmUgaW52YWxpZCwgYW5kIHRoZXkgYXJlIHJlamVjdGVkIGJ5IGZvbnQgQVBJIGZ1bmN0aW9ucy4KKy8vLyA8L3N1bW1hcnk+CitlbnVtIERXUklURV9GT05UX1dFSUdIVAoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gUHJlZGVmaW5lZCBmb250IHdlaWdodCA6IFRoaW4gKDEwMCkuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRk9OVF9XRUlHSFRfVEhJTiA9IDEwMCwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gUHJlZGVmaW5lZCBmb250IHdlaWdodCA6IEV4dHJhLWxpZ2h0ICgyMDApLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0ZPTlRfV0VJR0hUX0VYVFJBX0xJR0hUID0gMjAwLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBQcmVkZWZpbmVkIGZvbnQgd2VpZ2h0IDogVWx0cmEtbGlnaHQgKDIwMCkuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRk9OVF9XRUlHSFRfVUxUUkFfTElHSFQgPSAyMDAsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFByZWRlZmluZWQgZm9udCB3ZWlnaHQgOiBMaWdodCAoMzAwKS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9GT05UX1dFSUdIVF9MSUdIVCA9IDMwMCwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gUHJlZGVmaW5lZCBmb250IHdlaWdodCA6IE5vcm1hbCAoNDAwKS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9GT05UX1dFSUdIVF9OT1JNQUwgPSA0MDAsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFByZWRlZmluZWQgZm9udCB3ZWlnaHQgOiBSZWd1bGFyICg0MDApLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0ZPTlRfV0VJR0hUX1JFR1VMQVIgPSA0MDAsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFByZWRlZmluZWQgZm9udCB3ZWlnaHQgOiBNZWRpdW0gKDUwMCkuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRk9OVF9XRUlHSFRfTUVESVVNID0gNTAwLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBQcmVkZWZpbmVkIGZvbnQgd2VpZ2h0IDogRGVtaS1ib2xkICg2MDApLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0ZPTlRfV0VJR0hUX0RFTUlfQk9MRCA9IDYwMCwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gUHJlZGVmaW5lZCBmb250IHdlaWdodCA6IFNlbWktYm9sZCAoNjAwKS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9GT05UX1dFSUdIVF9TRU1JX0JPTEQgPSA2MDAsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFByZWRlZmluZWQgZm9udCB3ZWlnaHQgOiBCb2xkICg3MDApLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0ZPTlRfV0VJR0hUX0JPTEQgPSA3MDAsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFByZWRlZmluZWQgZm9udCB3ZWlnaHQgOiBFeHRyYS1ib2xkICg4MDApLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0ZPTlRfV0VJR0hUX0VYVFJBX0JPTEQgPSA4MDAsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFByZWRlZmluZWQgZm9udCB3ZWlnaHQgOiBVbHRyYS1ib2xkICg4MDApLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0ZPTlRfV0VJR0hUX1VMVFJBX0JPTEQgPSA4MDAsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFByZWRlZmluZWQgZm9udCB3ZWlnaHQgOiBCbGFjayAoOTAwKS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9GT05UX1dFSUdIVF9CTEFDSyA9IDkwMCwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gUHJlZGVmaW5lZCBmb250IHdlaWdodCA6IEhlYXZ5ICg5MDApLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0ZPTlRfV0VJR0hUX0hFQVZZID0gOTAwLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBQcmVkZWZpbmVkIGZvbnQgd2VpZ2h0IDogRXh0cmEtYmxhY2sgKDk1MCkuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRk9OVF9XRUlHSFRfRVhUUkFfQkxBQ0sgPSA5NTAsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFByZWRlZmluZWQgZm9udCB3ZWlnaHQgOiBVbHRyYS1ibGFjayAoOTUwKS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9GT05UX1dFSUdIVF9VTFRSQV9CTEFDSyA9IDk1MAorfTsKKworLy8vIDxzdW1tYXJ5PgorLy8vIFRoZSBmb250IHN0cmV0Y2ggZW51bWVyYXRpb24gZGVzY3JpYmVzIHJlbGF0aXZlIGNoYW5nZSBmcm9tIHRoZSBub3JtYWwgYXNwZWN0IHJhdGlvCisvLy8gYXMgc3BlY2lmaWVkIGJ5IGEgZm9udCBkZXNpZ25lciBmb3IgdGhlIGdseXBocyBpbiBhIGZvbnQuCisvLy8gVmFsdWVzIGxlc3MgdGhhbiAxIG9yIGdyZWF0ZXIgdGhhbiA5IGFyZSBjb25zaWRlcmVkIHRvIGJlIGludmFsaWQsIGFuZCB0aGV5IGFyZSByZWplY3RlZCBieSBmb250IEFQSSBmdW5jdGlvbnMuCisvLy8gPC9zdW1tYXJ5PgorZW51bSBEV1JJVEVfRk9OVF9TVFJFVENICit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBQcmVkZWZpbmVkIGZvbnQgc3RyZXRjaCA6IE5vdCBrbm93biAoMCkuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRk9OVF9TVFJFVENIX1VOREVGSU5FRCA9IDAsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFByZWRlZmluZWQgZm9udCBzdHJldGNoIDogVWx0cmEtY29uZGVuc2VkICgxKS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9GT05UX1NUUkVUQ0hfVUxUUkFfQ09OREVOU0VEID0gMSwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gUHJlZGVmaW5lZCBmb250IHN0cmV0Y2ggOiBFeHRyYS1jb25kZW5zZWQgKDIpLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0ZPTlRfU1RSRVRDSF9FWFRSQV9DT05ERU5TRUQgPSAyLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBQcmVkZWZpbmVkIGZvbnQgc3RyZXRjaCA6IENvbmRlbnNlZCAoMykuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRk9OVF9TVFJFVENIX0NPTkRFTlNFRCA9IDMsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFByZWRlZmluZWQgZm9udCBzdHJldGNoIDogU2VtaS1jb25kZW5zZWQgKDQpLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0ZPTlRfU1RSRVRDSF9TRU1JX0NPTkRFTlNFRCA9IDQsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFByZWRlZmluZWQgZm9udCBzdHJldGNoIDogTm9ybWFsICg1KS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9GT05UX1NUUkVUQ0hfTk9STUFMID0gNSwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gUHJlZGVmaW5lZCBmb250IHN0cmV0Y2ggOiBNZWRpdW0gKDUpLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0ZPTlRfU1RSRVRDSF9NRURJVU0gPSA1LAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBQcmVkZWZpbmVkIGZvbnQgc3RyZXRjaCA6IFNlbWktZXhwYW5kZWQgKDYpLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0ZPTlRfU1RSRVRDSF9TRU1JX0VYUEFOREVEID0gNiwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gUHJlZGVmaW5lZCBmb250IHN0cmV0Y2ggOiBFeHBhbmRlZCAoNykuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRk9OVF9TVFJFVENIX0VYUEFOREVEID0gNywKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gUHJlZGVmaW5lZCBmb250IHN0cmV0Y2ggOiBFeHRyYS1leHBhbmRlZCAoOCkuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRk9OVF9TVFJFVENIX0VYVFJBX0VYUEFOREVEID0gOCwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gUHJlZGVmaW5lZCBmb250IHN0cmV0Y2ggOiBVbHRyYS1leHBhbmRlZCAoOSkuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRk9OVF9TVFJFVENIX1VMVFJBX0VYUEFOREVEID0gOQorfTsKKworLy8vIDxzdW1tYXJ5PgorLy8vIFRoZSBmb250IHN0eWxlIGVudW1lcmF0aW9uIGRlc2NyaWJlcyB0aGUgc2xvcGUgc3R5bGUgb2YgYSBmb250IGZhY2UsIHN1Y2ggYXMgTm9ybWFsLCBJdGFsaWMgb3IgT2JsaXF1ZS4KKy8vLyBWYWx1ZXMgb3RoZXIgdGhhbiB0aGUgb25lcyBkZWZpbmVkIGluIHRoZSBlbnVtZXJhdGlvbiBhcmUgY29uc2lkZXJlZCB0byBiZSBpbnZhbGlkLCBhbmQgdGhleSBhcmUgcmVqZWN0ZWQgYnkgZm9udCBBUEkgZnVuY3Rpb25zLgorLy8vIDwvc3VtbWFyeT4KK2VudW0gRFdSSVRFX0ZPTlRfU1RZTEUKK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEZvbnQgc2xvcGUgc3R5bGUgOiBOb3JtYWwuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRk9OVF9TVFlMRV9OT1JNQUwsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEZvbnQgc2xvcGUgc3R5bGUgOiBPYmxpcXVlLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0ZPTlRfU1RZTEVfT0JMSVFVRSwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gRm9udCBzbG9wZSBzdHlsZSA6IEl0YWxpYy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9GT05UX1NUWUxFX0lUQUxJQworCit9OworCisvLy8gPHN1bW1hcnk+CisvLy8gVGhlIGluZm9ybWF0aW9uYWwgc3RyaW5nIGVudW1lcmF0aW9uIGlkZW50aWZpZXMgYSBzdHJpbmcgaW4gYSBmb250LgorLy8vIDwvc3VtbWFyeT4KK2VudW0gRFdSSVRFX0lORk9STUFUSU9OQUxfU1RSSU5HX0lECit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBVbnNwZWNpZmllZCBuYW1lIElELgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0lORk9STUFUSU9OQUxfU1RSSU5HX05PTkUsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIENvcHlyaWdodCBub3RpY2UgcHJvdmlkZWQgYnkgdGhlIGZvbnQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfSU5GT1JNQVRJT05BTF9TVFJJTkdfQ09QWVJJR0hUX05PVElDRSwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gU3RyaW5nIGNvbnRhaW5pbmcgYSB2ZXJzaW9uIG51bWJlci4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9JTkZPUk1BVElPTkFMX1NUUklOR19WRVJTSU9OX1NUUklOR1MsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFRyYWRlbWFyayBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSB0aGUgZm9udC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9JTkZPUk1BVElPTkFMX1NUUklOR19UUkFERU1BUkssCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIE5hbWUgb2YgdGhlIGZvbnQgbWFudWZhY3R1cmVyLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0lORk9STUFUSU9OQUxfU1RSSU5HX01BTlVGQUNUVVJFUiwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gTmFtZSBvZiB0aGUgZm9udCBkZXNpZ25lci4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9JTkZPUk1BVElPTkFMX1NUUklOR19ERVNJR05FUiwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVVJMIG9mIGZvbnQgZGVzaWduZXIgKHdpdGggcHJvdG9jb2wsIGUuZy4sIGh0dHA6Ly8sIGZ0cDovLykuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfSU5GT1JNQVRJT05BTF9TVFJJTkdfREVTSUdORVJfVVJMLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBEZXNjcmlwdGlvbiBvZiB0aGUgZm9udC4gQ2FuIGNvbnRhaW4gcmV2aXNpb24gaW5mb3JtYXRpb24sIHVzYWdlIHJlY29tbWVuZGF0aW9ucywgaGlzdG9yeSwgZmVhdHVyZXMsIGV0Yy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9JTkZPUk1BVElPTkFMX1NUUklOR19ERVNDUklQVElPTiwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVVJMIG9mIGZvbnQgdmVuZG9yICh3aXRoIHByb3RvY29sLCBlLmcuLCBodHRwOi8vLCBmdHA6Ly8pLiBJZiBhIHVuaXF1ZSBzZXJpYWwgbnVtYmVyIGlzIGVtYmVkZGVkIGluIHRoZSBVUkwsIGl0IGNhbiBiZSB1c2VkIHRvIHJlZ2lzdGVyIHRoZSBmb250LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0lORk9STUFUSU9OQUxfU1RSSU5HX0ZPTlRfVkVORE9SX1VSTCwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gRGVzY3JpcHRpb24gb2YgaG93IHRoZSBmb250IG1heSBiZSBsZWdhbGx5IHVzZWQsIG9yIGRpZmZlcmVudCBleGFtcGxlIHNjZW5hcmlvcyBmb3IgbGljZW5zZWQgdXNlLiBUaGlzIGZpZWxkIHNob3VsZCBiZSB3cml0dGVuIGluIHBsYWluIGxhbmd1YWdlLCBub3QgbGVnYWxlc2UuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfSU5GT1JNQVRJT05BTF9TVFJJTkdfTElDRU5TRV9ERVNDUklQVElPTiwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVVJMIHdoZXJlIGFkZGl0aW9uYWwgbGljZW5zaW5nIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9JTkZPUk1BVElPTkFMX1NUUklOR19MSUNFTlNFX0lORk9fVVJMLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHREktY29tcGF0aWJsZSBmYW1pbHkgbmFtZS4gQmVjYXVzZSBHREkgYWxsb3dzIGEgbWF4aW11bSBvZiBmb3VyIGZvbnRzIHBlciBmYW1pbHksIGZvbnRzIGluIHRoZSBzYW1lIGZhbWlseSBtYXkgaGF2ZSBkaWZmZXJlbnQgR0RJLWNvbXBhdGlibGUgZmFtaWx5IG5hbWVzCisgICAgLy8vIChlLmcuLCAiQXJpYWwiLCAiQXJpYWwgTmFycm93IiwgIkFyaWFsIEJsYWNrIikuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfSU5GT1JNQVRJT05BTF9TVFJJTkdfV0lOMzJfRkFNSUxZX05BTUVTLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHREktY29tcGF0aWJsZSBzdWJmYW1pbHkgbmFtZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9JTkZPUk1BVElPTkFMX1NUUklOR19XSU4zMl9TVUJGQU1JTFlfTkFNRVMsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEZhbWlseSBuYW1lIHByZWZlcnJlZCBieSB0aGUgZGVzaWduZXIuIFRoaXMgZW5hYmxlcyBmb250IGRlc2lnbmVycyB0byBncm91cCBtb3JlIHRoYW4gZm91ciBmb250cyBpbiBhIHNpbmdsZSBmYW1pbHkgd2l0aG91dCBsb3NpbmcgY29tcGF0aWJpbGl0eSB3aXRoCisgICAgLy8vIEdESS4gVGhpcyBuYW1lIGlzIHR5cGljYWxseSBvbmx5IHByZXNlbnQgaWYgaXQgZGlmZmVycyBmcm9tIHRoZSBHREktY29tcGF0aWJsZSBmYW1pbHkgbmFtZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9JTkZPUk1BVElPTkFMX1NUUklOR19QUkVGRVJSRURfRkFNSUxZX05BTUVTLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTdWJmYW1pbHkgbmFtZSBwcmVmZXJyZWQgYnkgdGhlIGRlc2lnbmVyLiBUaGlzIG5hbWUgaXMgdHlwaWNhbGx5IG9ubHkgcHJlc2VudCBpZiBpdCBkaWZmZXJzIGZyb20gdGhlIEdESS1jb21wYXRpYmxlIHN1YmZhbWlseSBuYW1lLiAKKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9JTkZPUk1BVElPTkFMX1NUUklOR19QUkVGRVJSRURfU1VCRkFNSUxZX05BTUVTLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTYW1wbGUgdGV4dC4gVGhpcyBjYW4gYmUgdGhlIGZvbnQgbmFtZSBvciBhbnkgb3RoZXIgdGV4dCB0aGF0IHRoZSBkZXNpZ25lciB0aGlua3MgaXMgdGhlIGJlc3QgZXhhbXBsZSB0byBkaXNwbGF5IHRoZSBmb250IGluLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0lORk9STUFUSU9OQUxfU1RSSU5HX1NBTVBMRV9URVhUCit9OworCisKKy8vLyA8c3VtbWFyeT4KKy8vLyBUaGUgRFdSSVRFX0ZPTlRfTUVUUklDUyBzdHJ1Y3R1cmUgc3BlY2lmaWVzIHRoZSBtZXRyaWNzIG9mIGEgZm9udCBmYWNlIHRoYXQKKy8vLyBhcmUgYXBwbGljYWJsZSB0byBhbGwgZ2x5cGhzIHdpdGhpbiB0aGUgZm9udCBmYWNlLgorLy8vIDwvc3VtbWFyeT4KK3N0cnVjdCBEV1JJVEVfRk9OVF9NRVRSSUNTCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGUgbnVtYmVyIG9mIGZvbnQgZGVzaWduIHVuaXRzIHBlciBlbSB1bml0LgorICAgIC8vLyBGb250IGZpbGVzIHVzZSB0aGVpciBvd24gY29vcmRpbmF0ZSBzeXN0ZW0gb2YgZm9udCBkZXNpZ24gdW5pdHMuCisgICAgLy8vIEEgZm9udCBkZXNpZ24gdW5pdCBpcyB0aGUgc21hbGxlc3QgbWVhc3VyYWJsZSB1bml0IGluIHRoZSBlbSBzcXVhcmUsCisgICAgLy8vIGFuIGltYWdpbmFyeSBzcXVhcmUgdGhhdCBpcyB1c2VkIHRvIHNpemUgYW5kIGFsaWduIGdseXBocy4KKyAgICAvLy8gVGhlIGNvbmNlcHQgb2YgZW0gc3F1YXJlIGlzIHVzZWQgYXMgYSByZWZlcmVuY2Ugc2NhbGUgZmFjdG9yIHdoZW4gZGVmaW5pbmcgZm9udCBzaXplIGFuZCBkZXZpY2UgdHJhbnNmb3JtYXRpb24gc2VtYW50aWNzLgorICAgIC8vLyBUaGUgc2l6ZSBvZiBvbmUgZW0gc3F1YXJlIGlzIGFsc28gY29tbW9ubHkgdXNlZCB0byBjb21wdXRlIHRoZSBwYXJhZ3JhcGggaWRlbnRhdGlvbiB2YWx1ZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFVJTlQxNiBkZXNpZ25Vbml0c1BlckVtOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBBc2NlbnQgdmFsdWUgb2YgdGhlIGZvbnQgZmFjZSBpbiBmb250IGRlc2lnbiB1bml0cy4KKyAgICAvLy8gQXNjZW50IGlzIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSB0b3Agb2YgZm9udCBjaGFyYWN0ZXIgYWxpZ25tZW50IGJveCB0byBFbmdsaXNoIGJhc2VsaW5lLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgVUlOVDE2IGFzY2VudDsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gRGVzY2VudCB2YWx1ZSBvZiB0aGUgZm9udCBmYWNlIGluIGZvbnQgZGVzaWduIHVuaXRzLgorICAgIC8vLyBEZXNjZW50IGlzIHRoZSBkaXN0YW5jZSBmcm9tIHRoZSBib3R0b20gb2YgZm9udCBjaGFyYWN0ZXIgYWxpZ25tZW50IGJveCB0byBFbmdsaXNoIGJhc2VsaW5lLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgVUlOVDE2IGRlc2NlbnQ7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIExpbmUgZ2FwIGluIGZvbnQgZGVzaWduIHVuaXRzLgorICAgIC8vLyBSZWNvbW1lbmRlZCBhZGRpdGlvbmFsIHdoaXRlIHNwYWNlIHRvIGFkZCBiZXR3ZWVuIGxpbmVzIHRvIGltcHJvdmUgbGVnaWJpbGl0eS4gVGhlIHJlY29tbWVuZGVkIGxpbmUgc3BhY2luZyAKKyAgICAvLy8gKGJhc2VsaW5lLXRvLWJhc2VsaW5lIGRpc3RhbmNlKSBpcyB0aHVzIHRoZSBzdW0gb2YgYXNjZW50LCBkZXNjZW50LCBhbmQgbGluZUdhcC4gVGhlIGxpbmUgZ2FwIGlzIHVzdWFsbHkgCisgICAgLy8vIHBvc2l0aXZlIG9yIHplcm8gYnV0IGNhbiBiZSBuZWdhdGl2ZSwgaW4gd2hpY2ggY2FzZSB0aGUgcmVjb21tZW5kZWQgbGluZSBzcGFjaW5nIGlzIGxlc3MgdGhhbiB0aGUgaGVpZ2h0CisgICAgLy8vIG9mIHRoZSBjaGFyYWN0ZXIgYWxpZ25tZW50IGJveC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIElOVDE2IGxpbmVHYXA7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIENhcCBoZWlnaHQgdmFsdWUgb2YgdGhlIGZvbnQgZmFjZSBpbiBmb250IGRlc2lnbiB1bml0cy4KKyAgICAvLy8gQ2FwIGhlaWdodCBpcyB0aGUgZGlzdGFuY2UgZnJvbSBFbmdsaXNoIGJhc2VsaW5lIHRvIHRoZSB0b3Agb2YgYSB0eXBpY2FsIEVuZ2xpc2ggY2FwaXRhbC4KKyAgICAvLy8gQ2FwaXRhbCAiSCIgaXMgb2Z0ZW4gdXNlZCBhcyBhIHJlZmVyZW5jZSBjaGFyYWN0ZXIgZm9yIHRoZSBwdXJwb3NlIG9mIGNhbGN1bGF0aW5nIHRoZSBjYXAgaGVpZ2h0IHZhbHVlLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgVUlOVDE2IGNhcEhlaWdodDsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8geC1oZWlnaHQgdmFsdWUgb2YgdGhlIGZvbnQgZmFjZSBpbiBmb250IGRlc2lnbiB1bml0cy4KKyAgICAvLy8geC1oZWlnaHQgaXMgdGhlIGRpc3RhbmNlIGZyb20gRW5nbGlzaCBiYXNlbGluZSB0byB0aGUgdG9wIG9mIGxvd2VyY2FzZSBsZXR0ZXIgIngiLCBvciBhIHNpbWlsYXIgbG93ZXJjYXNlIGNoYXJhY3Rlci4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFVJTlQxNiB4SGVpZ2h0OworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGUgdW5kZXJsaW5lIHBvc2l0aW9uIHZhbHVlIG9mIHRoZSBmb250IGZhY2UgaW4gZm9udCBkZXNpZ24gdW5pdHMuCisgICAgLy8vIFVuZGVybGluZSBwb3NpdGlvbiBpcyB0aGUgcG9zaXRpb24gb2YgdW5kZXJsaW5lIHJlbGF0aXZlIHRvIHRoZSBFbmdsaXNoIGJhc2VsaW5lLgorICAgIC8vLyBUaGUgdmFsdWUgaXMgdXN1YWxseSBtYWRlIG5lZ2F0aXZlIGluIG9yZGVyIHRvIHBsYWNlIHRoZSB1bmRlcmxpbmUgYmVsb3cgdGhlIGJhc2VsaW5lLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgSU5UMTYgdW5kZXJsaW5lUG9zaXRpb247CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFRoZSBzdWdnZXN0ZWQgdW5kZXJsaW5lIHRoaWNrbmVzcyB2YWx1ZSBvZiB0aGUgZm9udCBmYWNlIGluIGZvbnQgZGVzaWduIHVuaXRzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgVUlOVDE2IHVuZGVybGluZVRoaWNrbmVzczsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVGhlIHN0cmlrZXRocm91Z2ggcG9zaXRpb24gdmFsdWUgb2YgdGhlIGZvbnQgZmFjZSBpbiBmb250IGRlc2lnbiB1bml0cy4KKyAgICAvLy8gU3RyaWtldGhyb3VnaCBwb3NpdGlvbiBpcyB0aGUgcG9zaXRpb24gb2Ygc3RyaWtldGhyb3VnaCByZWxhdGl2ZSB0byB0aGUgRW5nbGlzaCBiYXNlbGluZS4KKyAgICAvLy8gVGhlIHZhbHVlIGlzIHVzdWFsbHkgbWFkZSBwb3NpdGl2ZSBpbiBvcmRlciB0byBwbGFjZSB0aGUgc3RyaWtldGhyb3VnaCBhYm92ZSB0aGUgYmFzZWxpbmUuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBJTlQxNiBzdHJpa2V0aHJvdWdoUG9zaXRpb247CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFRoZSBzdWdnZXN0ZWQgc3RyaWtldGhyb3VnaCB0aGlja25lc3MgdmFsdWUgb2YgdGhlIGZvbnQgZmFjZSBpbiBmb250IGRlc2lnbiB1bml0cy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFVJTlQxNiBzdHJpa2V0aHJvdWdoVGhpY2tuZXNzOworfTsKKworLy8vIDxzdW1tYXJ5PgorLy8vIFRoZSBEV1JJVEVfR0xZUEhfTUVUUklDUyBzdHJ1Y3R1cmUgc3BlY2lmaWVzIHRoZSBtZXRyaWNzIG9mIGFuIGluZGl2aWR1YWwgZ2x5cGguCisvLy8gVGhlIHVuaXRzIGRlcGVuZCBvbiBob3cgdGhlIG1ldHJpY3MgYXJlIG9idGFpbmVkLgorLy8vIDwvc3VtbWFyeT4KK3N0cnVjdCBEV1JJVEVfR0xZUEhfTUVUUklDUworeworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gU3BlY2lmaWVzIHRoZSBYIG9mZnNldCBmcm9tIHRoZSBnbHlwaCBvcmlnaW4gdG8gdGhlIGxlZnQgZWRnZSBvZiB0aGUgYmxhY2sgYm94LgorICAgIC8vLyBUaGUgZ2x5cGggb3JpZ2luIGlzIHRoZSBjdXJyZW50IGhvcml6b250YWwgd3JpdGluZyBwb3NpdGlvbi4KKyAgICAvLy8gQSBuZWdhdGl2ZSB2YWx1ZSBtZWFucyB0aGUgYmxhY2sgYm94IGV4dGVuZHMgdG8gdGhlIGxlZnQgb2YgdGhlIG9yaWdpbiAob2Z0ZW4gdHJ1ZSBmb3IgbG93ZXJjYXNlIGl0YWxpYyAnZicpLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgSU5UMzIgbGVmdFNpZGVCZWFyaW5nOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTcGVjaWZpZXMgdGhlIFggb2Zmc2V0IGZyb20gdGhlIG9yaWdpbiBvZiB0aGUgY3VycmVudCBnbHlwaCB0byB0aGUgb3JpZ2luIG9mIHRoZSBuZXh0IGdseXBoIHdoZW4gd3JpdGluZyBob3Jpem9udGFsbHkuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBVSU5UMzIgYWR2YW5jZVdpZHRoOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTcGVjaWZpZXMgdGhlIFggb2Zmc2V0IGZyb20gdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIGJsYWNrIGJveCB0byB0aGUgb3JpZ2luIG9mIHRoZSBuZXh0IGdseXBoIHdoZW4gd3JpdGluZyBob3Jpem9udGFsbHkuCisgICAgLy8vIFRoZSB2YWx1ZSBpcyBuZWdhdGl2ZSB3aGVuIHRoZSByaWdodCBlZGdlIG9mIHRoZSBibGFjayBib3ggb3ZlcmhhbmdzIHRoZSBsYXlvdXQgYm94LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgSU5UMzIgcmlnaHRTaWRlQmVhcmluZzsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gU3BlY2lmaWVzIHRoZSB2ZXJ0aWNhbCBvZmZzZXQgZnJvbSB0aGUgdmVydGljYWwgb3JpZ2luIHRvIHRoZSB0b3Agb2YgdGhlIGJsYWNrIGJveC4KKyAgICAvLy8gVGh1cywgYSBwb3NpdGl2ZSB2YWx1ZSBhZGRzIHdoaXRlc3BhY2Ugd2hlcmVhcyBhIG5lZ2F0aXZlIHZhbHVlIG1lYW5zIHRoZSBnbHlwaCBvdmVyaGFuZ3MgdGhlIHRvcCBvZiB0aGUgbGF5b3V0IGJveC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIElOVDMyIHRvcFNpZGVCZWFyaW5nOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTcGVjaWZpZXMgdGhlIFkgb2Zmc2V0IGZyb20gdGhlIHZlcnRpY2FsIG9yaWdpbiBvZiB0aGUgY3VycmVudCBnbHlwaCB0byB0aGUgdmVydGljYWwgb3JpZ2luIG9mIHRoZSBuZXh0IGdseXBoIHdoZW4gd3JpdGluZyB2ZXJ0aWNhbGx5LgorICAgIC8vLyAoTm90ZSB0aGF0IHRoZSB0ZXJtICJvcmlnaW4iIGJ5IGl0c2VsZiBkZW5vdGVzIHRoZSBob3Jpem9udGFsIG9yaWdpbi4gVGhlIHZlcnRpY2FsIG9yaWdpbiBpcyBkaWZmZXJlbnQuCisgICAgLy8vIEl0cyBZIGNvb3JkaW5hdGUgaXMgc3BlY2lmaWVkIGJ5IHZlcnRpY2FsT3JpZ2luWSB2YWx1ZSwKKyAgICAvLy8gYW5kIGl0cyBYIGNvb3JkaW5hdGUgaXMgaGFsZiB0aGUgYWR2YW5jZVdpZHRoIHRvIHRoZSByaWdodCBvZiB0aGUgaG9yaXpvbnRhbCBvcmlnaW4pLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgVUlOVDMyIGFkdmFuY2VIZWlnaHQ7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFNwZWNpZmllcyB0aGUgdmVydGljYWwgZGlzdGFuY2UgZnJvbSB0aGUgYmxhY2sgYm94J3MgYm90dG9tIGVkZ2UgdG8gdGhlIGFkdmFuY2UgaGVpZ2h0LgorICAgIC8vLyBQb3NpdGl2ZSB3aGVuIHRoZSBib3R0b20gZWRnZSBvZiB0aGUgYmxhY2sgYm94IGlzIHdpdGhpbiB0aGUgbGF5b3V0IGJveC4KKyAgICAvLy8gTmVnYXRpdmUgd2hlbiB0aGUgYm90dG9tIGVkZ2Ugb2YgYmxhY2sgYm94IG92ZXJoYW5ncyB0aGUgbGF5b3V0IGJveC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIElOVDMyIGJvdHRvbVNpZGVCZWFyaW5nOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTcGVjaWZpZXMgdGhlIFkgY29vcmRpbmF0ZSBvZiBhIGdseXBoJ3MgdmVydGljYWwgb3JpZ2luLCBpbiB0aGUgZm9udCdzIGRlc2lnbiBjb29yZGluYXRlIHN5c3RlbS4KKyAgICAvLy8gVGhlIHkgY29vcmRpbmF0ZSBvZiBhIGdseXBoJ3MgdmVydGljYWwgb3JpZ2luIGlzIHRoZSBzdW0gb2YgdGhlIGdseXBoJ3MgdG9wIHNpZGUgYmVhcmluZworICAgIC8vLyBhbmQgdGhlIHRvcCAoaS5lLiB5TWF4KSBvZiB0aGUgZ2x5cGgncyBib3VuZGluZyBib3guCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBJTlQzMiB2ZXJ0aWNhbE9yaWdpblk7Cit9OworCisvLy8gPHN1bW1hcnk+CisvLy8gT3B0aW9uYWwgYWRqdXN0bWVudCB0byBhIGdseXBoJ3MgcG9zaXRpb24uIEFuIGdseXBoIG9mZnNldCBjaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiBhIGdseXBoIHdpdGhvdXQgYWZmZWN0aW5nCisvLy8gdGhlIHBlbiBwb3NpdGlvbi4gT2Zmc2V0cyBhcmUgaW4gbG9naWNhbCwgcHJlLXRyYW5zZm9ybSB1bml0cy4KKy8vLyA8L3N1bW1hcnk+CitzdHJ1Y3QgRFdSSVRFX0dMWVBIX09GRlNFVAoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gT2Zmc2V0IGluIHRoZSBhZHZhbmNlIGRpcmVjdGlvbiBvZiB0aGUgcnVuLiBBIHBvc2l0aXZlIGFkdmFuY2Ugb2Zmc2V0IG1vdmVzIHRoZSBnbHlwaCB0byB0aGUgcmlnaHQKKyAgICAvLy8gKGluIHByZS10cmFuc2Zvcm0gY29vcmRpbmF0ZXMpIGlmIHRoZSBydW4gaXMgbGVmdC10by1yaWdodCBvciB0byB0aGUgbGVmdCBpZiB0aGUgcnVuIGlzIHJpZ2h0LXRvLWxlZnQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBGTE9BVCBhZHZhbmNlT2Zmc2V0OworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBPZmZzZXQgaW4gdGhlIGFzY2VudCBkaXJlY3Rpb24sIGkuZS4sIHRoZSBkaXJlY3Rpb24gYXNjZW5kZXJzIHBvaW50LiBBIHBvc2l0aXZlIGFzY2VuZGVyIG9mZnNldCBtb3ZlcworICAgIC8vLyB0aGUgZ2x5cGggdXAgKGluIHByZS10cmFuc2Zvcm0gY29vcmRpbmF0ZXMpLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRkxPQVQgYXNjZW5kZXJPZmZzZXQ7Cit9OworCisvLy8gPHN1bW1hcnk+CisvLy8gU3BlY2lmaWVzIHRoZSB0eXBlIG9mIERpcmVjdFdyaXRlIGZhY3Rvcnkgb2JqZWN0LgorLy8vIERpcmVjdFdyaXRlIGZhY3RvcnkgY29udGFpbnMgaW50ZXJuYWwgc3RhdGUgc3VjaCBhcyBmb250IGxvYWRlciByZWdpc3RyYXRpb24gYW5kIGNhY2hlZCBmb250IGRhdGEuCisvLy8gSW4gbW9zdCBjYXNlcyBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIHNoYXJlZCBmYWN0b3J5IG9iamVjdCwgYmVjYXVzZSBpdCBhbGxvd3MgbXVsdGlwbGUgY29tcG9uZW50cworLy8vIHRoYXQgdXNlIERpcmVjdFdyaXRlIHRvIHNoYXJlIGludGVybmFsIERpcmVjdFdyaXRlIHN0YXRlIGFuZCByZWR1Y2UgbWVtb3J5IHVzYWdlLgorLy8vIEhvd2V2ZXIsIHRoZXJlIGFyZSBjYXNlcyB3aGVuIGl0IGlzIGRlc2lyYWJsZSB0byByZWR1Y2UgdGhlIGltcGFjdCBvZiBhIGNvbXBvbmVudCwKKy8vLyBzdWNoIGFzIGEgcGx1Zy1pbiBmcm9tIGFuIHVudHJ1c3RlZCBzb3VyY2UsIG9uIHRoZSByZXN0IG9mIHRoZSBwcm9jZXNzIGJ5IHNhbmRib3hpbmcgYW5kIGlzb2xhdGluZyBpdAorLy8vIGZyb20gdGhlIHJlc3Qgb2YgdGhlIHByb2Nlc3MgY29tcG9uZW50cy4gSW4gc3VjaCBjYXNlcywgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGFuIGlzb2xhdGVkIGZhY3RvcnkgZm9yIHRoZSBzYW5kYm94ZWQKKy8vLyBjb21wb25lbnQuCisvLy8gPC9zdW1tYXJ5PgorZW51bSBEV1JJVEVfRkFDVE9SWV9UWVBFCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTaGFyZWQgZmFjdG9yeSBhbGxvdyBmb3IgcmUtdXNlIG9mIGNhY2hlZCBmb250IGRhdGEgYWNyb3NzIG11bHRpcGxlIGluIHByb2Nlc3MgY29tcG9uZW50cy4KKyAgICAvLy8gU3VjaCBmYWN0b3JpZXMgYWxzbyB0YWtlIGFkdmFudGFnZSBvZiBjcm9zcyBwcm9jZXNzIGZvbnQgY2FjaGluZyBjb21wb25lbnRzIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRkFDVE9SWV9UWVBFX1NIQVJFRCwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gT2JqZWN0cyBjcmVhdGVkIGZyb20gdGhlIGlzb2xhdGVkIGZhY3RvcnkgZG8gbm90IGludGVyYWN0IHdpdGggaW50ZXJuYWwgRGlyZWN0V3JpdGUgc3RhdGUgZnJvbSBvdGhlciBjb21wb25lbnRzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0ZBQ1RPUllfVFlQRV9JU09MQVRFRAorfTsKKworLy8gQ3JlYXRlcyBhbiBPcGVuVHlwZSB0YWcgYXMgYSAzMmJpdCBpbnRlZ2VyIHN1Y2ggdGhhdAorLy8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgdGFnIGlzIHRoZSBsb3dlc3QgYnl0ZSwKKy8vIChsZWFzdCBzaWduaWZpY2FudCBvbiBsaXR0bGUgZW5kaWFuIGFyY2hpdGVjdHVyZXMpCisvLyB3aGljaCBjYW4gYmUgdXNlZCB0byBjb21wYXJlIHdpdGggdGFncyBpbiB0aGUgZm9udCBmaWxlLgorLy8gVGhpcyBtYWNybyBpcyBjb21wYXRpYmxlIHdpdGggRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUcuCisvLworLy8gRXhhbXBsZTogRFdSSVRFX01BS0VfT1BFTlRZUEVfVEFHKCdjJywnYycsJ20nLCdwJykKKy8vIER3b3JkOiAgIDB4NzA2RDYzNjMKKy8vCisjZGVmaW5lIERXUklURV9NQUtFX09QRU5UWVBFX1RBRyhhLGIsYyxkKSAoIFwKKyAgICAoc3RhdGljX2Nhc3Q8VUlOVDMyPihzdGF0aWNfY2FzdDxVSU5UOD4oZCkpIDw8IDI0KSB8IFwKKyAgICAoc3RhdGljX2Nhc3Q8VUlOVDMyPihzdGF0aWNfY2FzdDxVSU5UOD4oYykpIDw8IDE2KSB8IFwKKyAgICAoc3RhdGljX2Nhc3Q8VUlOVDMyPihzdGF0aWNfY2FzdDxVSU5UOD4oYikpIDw8IDgpICB8IFwKKyAgICAgc3RhdGljX2Nhc3Q8VUlOVDMyPihzdGF0aWNfY2FzdDxVSU5UOD4oYSkpKQorCitpbnRlcmZhY2UgSURXcml0ZUZvbnRGaWxlU3RyZWFtOworCisvLy8gPHN1bW1hcnk+CisvLy8gRm9udCBmaWxlIGxvYWRlciBpbnRlcmZhY2UgaGFuZGxlcyBsb2FkaW5nIGZvbnQgZmlsZSByZXNvdXJjZXMgb2YgYSBwYXJ0aWN1bGFyIHR5cGUgZnJvbSBhIGtleS4KKy8vLyBUaGUgZm9udCBmaWxlIGxvYWRlciBpbnRlcmZhY2UgaXMgcmVjb21tZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgYSBzaW5nbGV0b24gb2JqZWN0LgorLy8vIElNUE9SVEFOVDogZm9udCBmaWxlIGxvYWRlciBpbXBsZW1lbnRhdGlvbnMgbXVzdCBub3QgcmVnaXN0ZXIgdGhlbXNlbHZlcyB3aXRoIERpcmVjdFdyaXRlIGZhY3RvcnkKKy8vLyBpbnNpZGUgdGhlaXIgY29uc3RydWN0b3JzIGFuZCBtdXN0IG5vdCB1bnJlZ2lzdGVyIHRoZW1zZWx2ZXMgaW4gdGhlaXIgZGVzdHJ1Y3RvcnMsIGJlY2F1c2UKKy8vLyByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0b24gb3BlcmF0aW9ucyBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCB0aGUgb2JqZWN0IHJlZmVyZW5jZSBjb3VudCByZXNwZWN0aXZlbHkuCisvLy8gSW5zdGVhZCwgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBvZiBmb250IGZpbGUgbG9hZGVycyB3aXRoIERpcmVjdFdyaXRlIGZhY3Rvcnkgc2hvdWxkIGJlIHBlcmZvcm1lZAorLy8vIG91dHNpZGUgb2YgdGhlIGZvbnQgZmlsZSBsb2FkZXIgaW1wbGVtZW50YXRpb24gYXMgYSBzZXBhcmF0ZSBzdGVwLgorLy8vIDwvc3VtbWFyeT4KK2ludGVyZmFjZSBEV1JJVEVfREVDTEFSRV9JTlRFUkZBQ0UoIjcyN2NhZDRlLWQ2YWYtNGM5ZS04YTA4LWQ2OTViMTFjYWE0OSIpIElEV3JpdGVGb250RmlsZUxvYWRlciA6IHB1YmxpYyBJVW5rbm93bgoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQ3JlYXRlcyBhIGZvbnQgZmlsZSBzdHJlYW0gb2JqZWN0IHRoYXQgZW5jYXBzdWxhdGVzIGFuIG9wZW4gZmlsZSByZXNvdXJjZS4KKyAgICAvLy8gVGhlIHJlc291cmNlIGlzIGNsb3NlZCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZSB0byBmb250RmlsZVN0cmVhbSBpcyByZWxlYXNlZC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVSZWZlcmVuY2VLZXkiPkZvbnQgZmlsZSByZWZlcmVuY2Uga2V5IHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgZm9udCBmaWxlIHJlc291cmNlCisgICAgLy8vIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIGZvbnQgbG9hZGVyIGJlaW5nIHVzZWQuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGaWxlUmVmZXJlbmNlS2V5U2l6ZSI+U2l6ZSBvZiBmb250IGZpbGUgcmVmZXJlbmNlIGtleSBpbiBieXRlcy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVTdHJlYW0iPlBvaW50ZXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgZm9udCBmaWxlIHN0cmVhbS48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKENyZWF0ZVN0cmVhbUZyb21LZXkpKAorICAgICAgICBfX2luX2Jjb3VudChmb250RmlsZVJlZmVyZW5jZUtleVNpemUpIHZvaWQgY29uc3QqIGZvbnRGaWxlUmVmZXJlbmNlS2V5LAorICAgICAgICBVSU5UMzIgZm9udEZpbGVSZWZlcmVuY2VLZXlTaXplLAorICAgICAgICBfX291dCBJRFdyaXRlRm9udEZpbGVTdHJlYW0qKiBmb250RmlsZVN0cmVhbQorICAgICAgICApIFBVUkU7Cit9OworCisvLy8gPHN1bW1hcnk+CisvLy8gQSBidWlsdC1pbiBpbXBsZW1lbnRhdGlvbiBvZiBJRFdyaXRlRm9udEZpbGVMb2FkZXIgaW50ZXJmYWNlIHRoYXQgb3BlcmF0ZXMgb24gbG9jYWwgZm9udCBmaWxlcworLy8vIGFuZCBleHBvc2VzIGxvY2FsIGZvbnQgZmlsZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmb250IGZpbGUgcmVmZXJlbmNlIGtleS4KKy8vLyBGb250IGZpbGUgcmVmZXJlbmNlcyBjcmVhdGVkIHVzaW5nIENyZWF0ZUZvbnRGaWxlUmVmZXJlbmNlIHVzZSB0aGlzIGZvbnQgZmlsZSBsb2FkZXIuCisvLy8gPC9zdW1tYXJ5PgoraW50ZXJmYWNlIERXUklURV9ERUNMQVJFX0lOVEVSRkFDRSgiYjJkOWYzZWMtYzlmZS00YTExLWEyZWMtZDg2MjA4ZjdjMGEyIikgSURXcml0ZUxvY2FsRm9udEZpbGVMb2FkZXIgOiBwdWJsaWMgSURXcml0ZUZvbnRGaWxlTG9hZGVyCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBPYnRhaW5zIHRoZSBsZW5ndGggb2YgdGhlIGFic29sdXRlIGZpbGUgcGF0aCBmcm9tIHRoZSBmb250IGZpbGUgcmVmZXJlbmNlIGtleS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVSZWZlcmVuY2VLZXkiPkZvbnQgZmlsZSByZWZlcmVuY2Uga2V5IHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgbG9jYWwgZm9udCBmaWxlCisgICAgLy8vIHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhlIGZvbnQgbG9hZGVyIGJlaW5nIHVzZWQuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGaWxlUmVmZXJlbmNlS2V5U2l6ZSI+U2l6ZSBvZiBmb250IGZpbGUgcmVmZXJlbmNlIGtleSBpbiBieXRlcy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZmlsZVBhdGhMZW5ndGgiPkxlbmd0aCBvZiB0aGUgZmlsZSBwYXRoIHN0cmluZyBub3QgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGVkIE5VTEwgY2hhcmFjdGVyLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0RmlsZVBhdGhMZW5ndGhGcm9tS2V5KSgKKyAgICAgICAgX19pbl9iY291bnQoZm9udEZpbGVSZWZlcmVuY2VLZXlTaXplKSB2b2lkIGNvbnN0KiBmb250RmlsZVJlZmVyZW5jZUtleSwKKyAgICAgICAgVUlOVDMyIGZvbnRGaWxlUmVmZXJlbmNlS2V5U2l6ZSwKKyAgICAgICAgX19vdXQgVUlOVDMyKiBmaWxlUGF0aExlbmd0aAorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIE9idGFpbnMgdGhlIGFic29sdXRlIGZvbnQgZmlsZSBwYXRoIGZyb20gdGhlIGZvbnQgZmlsZSByZWZlcmVuY2Uga2V5LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RmlsZVJlZmVyZW5jZUtleSI+Rm9udCBmaWxlIHJlZmVyZW5jZSBrZXkgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSBsb2NhbCBmb250IGZpbGUKKyAgICAvLy8gd2l0aGluIHRoZSBzY29wZSBvZiB0aGUgZm9udCBsb2FkZXIgYmVpbmcgdXNlZC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVSZWZlcmVuY2VLZXlTaXplIj5TaXplIG9mIGZvbnQgZmlsZSByZWZlcmVuY2Uga2V5IGluIGJ5dGVzLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmaWxlUGF0aCI+Q2hhcmFjdGVyIGFycmF5IHRoYXQgcmVjZWl2ZXMgdGhlIGxvY2FsIGZpbGUgcGF0aC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZmlsZVBhdGhTaXplIj5TaXplIG9mIHRoZSBmaWxlUGF0aCBhcnJheSBpbiBjaGFyYWN0ZXIgY291bnQgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGVkIE5VTEwgY2hhcmFjdGVyLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0RmlsZVBhdGhGcm9tS2V5KSgKKyAgICAgICAgX19pbl9iY291bnQoZm9udEZpbGVSZWZlcmVuY2VLZXlTaXplKSB2b2lkIGNvbnN0KiBmb250RmlsZVJlZmVyZW5jZUtleSwKKyAgICAgICAgVUlOVDMyIGZvbnRGaWxlUmVmZXJlbmNlS2V5U2l6ZSwKKyAgICAgICAgX19vdXRfZWNvdW50X3ooZmlsZVBhdGhTaXplKSBXQ0hBUiogZmlsZVBhdGgsCisgICAgICAgIFVJTlQzMiBmaWxlUGF0aFNpemUKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBPYnRhaW5zIHRoZSBsYXN0IHdyaXRlIHRpbWUgb2YgdGhlIGZpbGUgZnJvbSB0aGUgZm9udCBmaWxlIHJlZmVyZW5jZSBrZXkuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGaWxlUmVmZXJlbmNlS2V5Ij5Gb250IGZpbGUgcmVmZXJlbmNlIGtleSB0aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIGxvY2FsIGZvbnQgZmlsZQorICAgIC8vLyB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBmb250IGxvYWRlciBiZWluZyB1c2VkLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RmlsZVJlZmVyZW5jZUtleVNpemUiPlNpemUgb2YgZm9udCBmaWxlIHJlZmVyZW5jZSBrZXkgaW4gYnl0ZXMuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9Imxhc3RXcml0ZVRpbWUiPkxhc3QgbW9kaWZpZWQgdGltZSBvZiB0aGUgZm9udCBmaWxlLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0TGFzdFdyaXRlVGltZUZyb21LZXkpKAorICAgICAgICBfX2luX2Jjb3VudChmb250RmlsZVJlZmVyZW5jZUtleVNpemUpIHZvaWQgY29uc3QqIGZvbnRGaWxlUmVmZXJlbmNlS2V5LAorICAgICAgICBVSU5UMzIgZm9udEZpbGVSZWZlcmVuY2VLZXlTaXplLAorICAgICAgICBfX291dCBGSUxFVElNRSogbGFzdFdyaXRlVGltZQorICAgICAgICApIFBVUkU7Cit9OworCisvLy8gPHN1bW1hcnk+CisvLy8gVGhlIGludGVyZmFjZSBmb3IgbG9hZGluZyBmb250IGZpbGUgZGF0YS4KKy8vLyA8L3N1bW1hcnk+CitpbnRlcmZhY2UgRFdSSVRFX0RFQ0xBUkVfSU5URVJGQUNFKCI2ZDQ4NjVmZS0wYWI4LTRkOTEtOGY2Mi01ZGQ2YmUzNGEzZTAiKSBJRFdyaXRlRm9udEZpbGVTdHJlYW0gOiBwdWJsaWMgSVVua25vd24KK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFJlYWRzIGEgZnJhZ21lbnQgZnJvbSBhIGZpbGUuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZyYWdtZW50U3RhcnQiPlJlY2VpdmVzIHRoZSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgZm9udCBmaWxlIGZyYWdtZW50LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmaWxlT2Zmc2V0Ij5PZmZzZXQgb2YgdGhlIGZyYWdtZW50IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZm9udCBmaWxlLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmcmFnbWVudFNpemUiPlNpemUgb2YgdGhlIGZyYWdtZW50IGluIGJ5dGVzLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmcmFnbWVudENvbnRleHQiPlRoZSBjbGllbnQgZGVmaW5lZCBjb250ZXh0IHRvIGJlIHBhc3NlZCB0byB0aGUgUmVsZWFzZUZpbGVGcmFnbWVudC48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgLy8vIDxyZW1hcmtzPgorICAgIC8vLyBJTVBPUlRBTlQ6IFJlYWRGaWxlRnJhZ21lbnQoKSBpbXBsZW1lbnRhdGlvbnMgbXVzdCBjaGVjayB3aGV0aGVyIHRoZSByZXF1ZXN0ZWQgZmlsZSBmcmFnbWVudAorICAgIC8vLyBpcyB3aXRoaW4gdGhlIGZpbGUgYm91bmRzLiBPdGhlcndpc2UsIGFuIGVycm9yIHNob3VsZCBiZSByZXR1cm5lZCBmcm9tIFJlYWRGaWxlRnJhZ21lbnQuCisgICAgLy8vIDwvcmVtYXJrcz4KKyAgICBTVERNRVRIT0QoUmVhZEZpbGVGcmFnbWVudCkoCisgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudChmcmFnbWVudFNpemUpIHZvaWQgY29uc3QqKiBmcmFnbWVudFN0YXJ0LAorICAgICAgICBVSU5UNjQgZmlsZU9mZnNldCwKKyAgICAgICAgVUlOVDY0IGZyYWdtZW50U2l6ZSwKKyAgICAgICAgX19vdXQgdm9pZCoqIGZyYWdtZW50Q29udGV4dAorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFJlbGVhc2VzIGEgZnJhZ21lbnQgZnJvbSBhIGZpbGUuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZyYWdtZW50Q29udGV4dCI+VGhlIGNsaWVudCBkZWZpbmVkIGNvbnRleHQgb2YgYSBmb250IGZyYWdtZW50IHJldHVybmVkIGZyb20gUmVhZEZpbGVGcmFnbWVudC48L3BhcmFtPgorICAgIFNURE1FVEhPRF8odm9pZCwgUmVsZWFzZUZpbGVGcmFnbWVudCkoCisgICAgICAgIHZvaWQqIGZyYWdtZW50Q29udGV4dAorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIE9idGFpbnMgdGhlIHRvdGFsIHNpemUgb2YgYSBmaWxlLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmaWxlU2l6ZSI+UmVjZWl2ZXMgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGZpbGUuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIC8vLyA8cmVtYXJrcz4KKyAgICAvLy8gSW1wbGVtZW50aW5nIEdldEZpbGVTaXplKCkgZm9yIGFzeW5jaHJvbm91c2x5IGxvYWRlZCBmb250IGZpbGVzIG1heSByZXF1aXJlCisgICAgLy8vIGRvd25sb2FkaW5nIHRoZSBjb21wbGV0ZSBmaWxlIGNvbnRlbnRzLCB0aGVyZWZvcmUgdGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3Igb3BlcmF0aW9ucyB0aGF0CisgICAgLy8vIGVpdGhlciByZXF1aXJlIGNvbXBsZXRlIGZvbnQgZmlsZSB0byBiZSBsb2FkZWQgKGUuZy4sIGNvcHlpbmcgYSBmb250IGZpbGUpIG9yIG5lZWQgdG8gbWFrZQorICAgIC8vLyBkZWNpc2lvbnMgYmFzZWQgb24gdGhlIHZhbHVlIG9mIHRoZSBmaWxlIHNpemUgKGUuZy4sIHZhbGlkYXRpb24gYWdhaW5zdCBhIHBlcnNpc3RlZCBmaWxlIHNpemUpLgorICAgIC8vLyA8L3JlbWFya3M+CisgICAgU1RETUVUSE9EKEdldEZpbGVTaXplKSgKKyAgICAgICAgX19vdXQgVUlOVDY0KiBmaWxlU2l6ZQorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIE9idGFpbnMgdGhlIGxhc3QgbW9kaWZpZWQgdGltZSBvZiB0aGUgZmlsZS4gVGhlIGxhc3QgbW9kaWZpZWQgdGltZSBpcyB1c2VkIGJ5IERpcmVjdFdyaXRlIGZvbnQgc2VsZWN0aW9uIGFsZ29yaXRobXMKKyAgICAvLy8gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb25lIGZvbnQgcmVzb3VyY2UgaXMgbW9yZSB1cCB0byBkYXRlIHRoYW4gYW5vdGhlciBvbmUuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9Imxhc3RXcml0ZVRpbWUiPlJlY2VpdmVzIHRoZSBsYXN0IG1vZGlmZWQgdGltZSBvZiB0aGUgZmlsZSBpbiB0aGUgZm9ybWF0IHRoYXQgcmVwcmVzZW50cworICAgIC8vLyB0aGUgbnVtYmVyIG9mIDEwMC1uYW5vc2Vjb25kIGludGVydmFscyBzaW5jZSBKYW51YXJ5IDEsIDE2MDEgKFVUQykuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4gRm9yIHJlc291cmNlcyB0aGF0IGRvbid0IGhhdmUgYSBjb25jZXB0IG9mIHRoZSBsYXN0IG1vZGlmaWVkIHRpbWUsIHRoZSBpbXBsZW1lbnRhdGlvbiBvZgorICAgIC8vLyBHZXRMYXN0V3JpdGVUaW1lIHNob3VsZCByZXR1cm4gRV9OT1RJTVBMLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKEdldExhc3RXcml0ZVRpbWUpKAorICAgICAgICBfX291dCBVSU5UNjQqIGxhc3RXcml0ZVRpbWUKKyAgICAgICAgKSBQVVJFOworfTsKKworLy8vIDxzdW1tYXJ5PgorLy8vIFRoZSBpbnRlcmZhY2UgdGhhdCByZXByZXNlbnRzIGEgcmVmZXJlbmNlIHRvIGEgZm9udCBmaWxlLgorLy8vIDwvc3VtbWFyeT4KK2ludGVyZmFjZSBEV1JJVEVfREVDTEFSRV9JTlRFUkZBQ0UoIjczOWQ4ODZhLWNlZjUtNDdkYy04NzY5LTFhOGI0MWJlYmJiMCIpIElEV3JpdGVGb250RmlsZSA6IHB1YmxpYyBJVW5rbm93bgoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVGhpcyBtZXRob2Qgb2J0YWlucyB0aGUgcG9pbnRlciB0byB0aGUgcmVmZXJlbmNlIGtleSBvZiBhIGZvbnQgZmlsZS4gVGhlIHBvaW50ZXIgaXMgb25seSB2YWxpZCB1bnRpbCB0aGUgb2JqZWN0IHRoYXQgcmVmZXJzIHRvIGl0IGlzIHJlbGVhc2VkLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RmlsZVJlZmVyZW5jZUtleSI+UG9pbnRlciB0byB0aGUgZm9udCBmaWxlIHJlZmVyZW5jZSBrZXkuCisgICAgLy8vIElNUE9SVEFOVDogVGhlIHBvaW50ZXIgdmFsdWUgaXMgdmFsaWQgdW50aWwgdGhlIGZvbnQgZmlsZSByZWZlcmVuY2Ugb2JqZWN0IGl0IGlzIG9idGFpbmVkIGZyb20gaXMgcmVsZWFzZWQuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGaWxlUmVmZXJlbmNlS2V5U2l6ZSI+U2l6ZSBvZiBmb250IGZpbGUgcmVmZXJlbmNlIGtleSBpbiBieXRlcy48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKEdldFJlZmVyZW5jZUtleSkoCisgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudCgqZm9udEZpbGVSZWZlcmVuY2VLZXlTaXplKSB2b2lkIGNvbnN0KiogZm9udEZpbGVSZWZlcmVuY2VLZXksCisgICAgICAgIF9fb3V0IFVJTlQzMiogZm9udEZpbGVSZWZlcmVuY2VLZXlTaXplCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gT2J0YWlucyB0aGUgZmlsZSBsb2FkZXIgYXNzb2NpYXRlZCB3aXRoIGEgZm9udCBmaWxlIG9iamVjdC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVMb2FkZXIiPlRoZSBmb250IGZpbGUgbG9hZGVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgZm9udCBmaWxlIG9iamVjdC48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKEdldExvYWRlcikoCisgICAgICAgIF9fb3V0IElEV3JpdGVGb250RmlsZUxvYWRlcioqIGZvbnRGaWxlTG9hZGVyCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQW5hbHl6ZXMgYSBmaWxlIGFuZCByZXR1cm5zIHdoZXRoZXIgaXQgcmVwcmVzZW50cyBhIGZvbnQsIGFuZCB3aGV0aGVyIHRoZSBmb250IHR5cGUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBmb250IHN5c3RlbS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaXNTdXBwb3J0ZWRGb250VHlwZSI+VFJVRSBpZiB0aGUgZm9udCB0eXBlIGlzIHN1cHBvcnRlZCBieSB0aGUgZm9udCBzeXN0ZW0sIEZBTFNFIG90aGVyd2lzZS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVUeXBlIj5UaGUgdHlwZSBvZiB0aGUgZm9udCBmaWxlLiBOb3RlIHRoYXQgZXZlbiBpZiBpc1N1cHBvcnRlZEZvbnRUeXBlIGlzIEZBTFNFLAorICAgIC8vLyB0aGUgZm9udEZpbGVUeXBlIHZhbHVlIG1heSBiZSBkaWZmZXJlbnQgZnJvbSBEV1JJVEVfRk9OVF9GSUxFX1RZUEVfVU5LTk9XTi48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZhY2VUeXBlIj5UaGUgdHlwZSBvZiB0aGUgZm9udCBmYWNlIHRoYXQgY2FuIGJlIGNvbnN0cnVjdGVkIGZyb20gdGhlIGZvbnQgZmlsZS4KKyAgICAvLy8gTm90ZSB0aGF0IGV2ZW4gaWYgaXNTdXBwb3J0ZWRGb250VHlwZSBpcyBGQUxTRSwgdGhlIGZvbnRGYWNlVHlwZSB2YWx1ZSBtYXkgYmUgZGlmZmVyZW50IGZyb20KKyAgICAvLy8gRFdSSVRFX0ZPTlRfRkFDRV9UWVBFX1VOS05PV04uPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9Im51bWJlck9mRmFjZXMiPk51bWJlciBvZiBmb250IGZhY2VzIGNvbnRhaW5lZCBpbiB0aGUgZm9udCBmaWxlLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUgaWYgdGhlcmUgd2FzIGEgcHJvY2Vzc2luZyBlcnJvciBkdXJpbmcgYW5hbHlzaXMuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICAvLy8gPHJlbWFya3M+CisgICAgLy8vIElNUE9SVEFOVDogY2VydGFpbiBmb250IGZpbGUgdHlwZXMgYXJlIHJlY29nbml6ZWQsIGJ1dCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBmb250IHN5c3RlbS4KKyAgICAvLy8gRm9yIGV4YW1wbGUsIHRoZSBmb250IHN5c3RlbSB3aWxsIHJlY29nbml6ZSBhIGZpbGUgYXMgYSBUeXBlIDEgZm9udCBmaWxlLAorICAgIC8vLyBidXQgd2lsbCBub3QgYmUgYWJsZSB0byBjb25zdHJ1Y3QgYSBmb250IGZhY2Ugb2JqZWN0IGZyb20gaXQuIEluIHN1Y2ggc2l0dWF0aW9ucywgQW5hbHl6ZSB3aWxsIHNldAorICAgIC8vLyBpc1N1cHBvcnRlZEZvbnRUeXBlIG91dHB1dCBwYXJhbWV0ZXIgdG8gRkFMU0UuCisgICAgLy8vIDwvcmVtYXJrcz4KKyAgICBTVERNRVRIT0QoQW5hbHl6ZSkoCisgICAgICAgIF9fb3V0IEJPT0wqIGlzU3VwcG9ydGVkRm9udFR5cGUsCisgICAgICAgIF9fb3V0IERXUklURV9GT05UX0ZJTEVfVFlQRSogZm9udEZpbGVUeXBlLAorICAgICAgICBfX291dF9vcHQgRFdSSVRFX0ZPTlRfRkFDRV9UWVBFKiBmb250RmFjZVR5cGUsCisgICAgICAgIF9fb3V0IFVJTlQzMiogbnVtYmVyT2ZGYWNlcworICAgICAgICApIFBVUkU7Cit9OworCisvLy8gPHN1bW1hcnk+CisvLy8gUmVwcmVzZW50cyB0aGUgaW50ZXJuYWwgc3RydWN0dXJlIG9mIGEgZGV2aWNlIHBpeGVsIChpLmUuLCB0aGUgcGh5c2ljYWwgYXJyYW5nZW1lbnQgb2YgcmVkLAorLy8vIGdyZWVuLCBhbmQgYmx1ZSBjb2xvciBjb21wb25lbnRzKSB0aGF0IGlzIGFzc3VtZWQgZm9yIHB1cnBvc2VzIG9mIHJlbmRlcmluZyB0ZXh0LgorLy8vIDwvc3VtbWFyeT4KKyNpZm5kZWYgRFdSSVRFX1BJWEVMX0dFT01FVFJZX0RFRklORUQKK2VudW0gRFdSSVRFX1BJWEVMX0dFT01FVFJZCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGUgcmVkLCBncmVlbiwgYW5kIGJsdWUgY29sb3IgY29tcG9uZW50cyBvZiBlYWNoIHBpeGVsIGFyZSBhc3N1bWVkIHRvIG9jY3VweSB0aGUgc2FtZSBwb2ludC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9QSVhFTF9HRU9NRVRSWV9GTEFULAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBFYWNoIHBpeGVsIGNvbXByaXNlcyB0aHJlZSB2ZXJ0aWNhbCBzdHJpcGVzLCB3aXRoIHJlZCBvbiB0aGUgbGVmdCwgZ3JlZW4gaW4gdGhlIGNlbnRlciwgYW5kIAorICAgIC8vLyBibHVlIG9uIHRoZSByaWdodC4gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gcGl4ZWwgZ2VvbWV0cnkgZm9yIExDRCBtb25pdG9ycy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9QSVhFTF9HRU9NRVRSWV9SR0IsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEVhY2ggcGl4ZWwgY29tcHJpc2VzIHRocmVlIHZlcnRpY2FsIHN0cmlwZXMsIHdpdGggYmx1ZSBvbiB0aGUgbGVmdCwgZ3JlZW4gaW4gdGhlIGNlbnRlciwgYW5kIAorICAgIC8vLyByZWQgb24gdGhlIHJpZ2h0LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX1BJWEVMX0dFT01FVFJZX0JHUgorfTsKKyNkZWZpbmUgRFdSSVRFX1BJWEVMX0dFT01FVFJZX0RFRklORUQKKyNlbmRpZgorCisvLy8gPHN1bW1hcnk+CisvLy8gUmVwcmVzZW50cyBhIG1ldGhvZCBvZiByZW5kZXJpbmcgZ2x5cGhzLgorLy8vIDwvc3VtbWFyeT4KK2VudW0gRFdSSVRFX1JFTkRFUklOR19NT0RFCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTcGVjaWZpZXMgdGhhdCB0aGUgcmVuZGVyaW5nIG1vZGUgaXMgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHRoZSBmb250IGFuZCBzaXplLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX1JFTkRFUklOR19NT0RFX0RFRkFVTFQsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFNwZWNpZmllcyB0aGF0IG5vIGFudGktYWxpYXNpbmcgaXMgcGVyZm9ybWVkLiBFYWNoIHBpeGVsIGlzIGVpdGhlciBzZXQgdG8gdGhlIGZvcmVncm91bmQgCisgICAgLy8vIGNvbG9yIG9mIHRoZSB0ZXh0IG9yIHJldGFpbnMgdGhlIGNvbG9yIG9mIHRoZSBiYWNrZ3JvdW5kLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX1JFTkRFUklOR19NT0RFX0FMSUFTRUQsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFNwZWNpZmllcyBDbGVhclR5cGUgcmVuZGVyaW5nIHdpdGggdGhlIHNhbWUgbWV0cmljcyBhcyBhbGlhc2VkIHRleHQuIEdseXBocyBjYW4gb25seQorICAgIC8vLyBiZSBwb3NpdGlvbmVkIG9uIHdob2xlLXBpeGVsIGJvdW5kYXJpZXMuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfUkVOREVSSU5HX01PREVfQ0xFQVJUWVBFX0dESV9DTEFTU0lDLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTcGVjaWZpZXMgQ2xlYXJUeXBlIHJlbmRlcmluZyB3aXRoIHRoZSBzYW1lIG1ldHJpY3MgYXMgdGV4dCByZW5kZXJpbmcgdXNpbmcgR0RJIHVzaW5nIGEgZm9udAorICAgIC8vLyBjcmVhdGVkIHdpdGggQ0xFQVJUWVBFX05BVFVSQUxfUVVBTElUWS4gR2x5cGggbWV0cmljcyBhcmUgY2xvc2VyIHRvIHRoZWlyIGlkZWFsIHZhbHVlcyB0aGFuIAorICAgIC8vLyB3aXRoIGFsaWFzZWQgdGV4dCwgYnV0IGdseXBocyBhcmUgc3RpbGwgcG9zaXRpb25lZCBvbiB3aG9sZS1waXhlbCBib3VuZGFyaWVzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX1JFTkRFUklOR19NT0RFX0NMRUFSVFlQRV9HRElfTkFUVVJBTCwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gU3BlY2lmaWVzIENsZWFyVHlwZSByZW5kZXJpbmcgd2l0aCBhbnRpLWFsaWFzaW5nIGluIHRoZSBob3Jpem9udGFsIGRpbWVuc2lvbiBvbmx5LiBUaGlzIGlzIAorICAgIC8vLyB0eXBpY2FsbHkgdXNlZCB3aXRoIHNtYWxsIHRvIG1lZGl1bSBmb250IHNpemVzICh1cCB0byAxNiBwcGVtKS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9SRU5ERVJJTkdfTU9ERV9DTEVBUlRZUEVfTkFUVVJBTCwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gU3BlY2lmaWVzIENsZWFyVHlwZSByZW5kZXJpbmcgd2l0aCBhbnRpLWFsaWFzaW5nIGluIGJvdGggaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgZGltZW5zaW9ucy4gCisgICAgLy8vIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgYXQgbGFyZ2VyIHNpemVzIHRvIG1ha2VzIGN1cnZlcyBhbmQgZGlhZ29uYWwgbGluZXMgbG9vayBzbW9vdGhlciwgYXQgCisgICAgLy8vIHRoZSBleHBlbnNlIG9mIHNvbWUgc29mdG5lc3MuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfUkVOREVSSU5HX01PREVfQ0xFQVJUWVBFX05BVFVSQUxfU1lNTUVUUklDLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTcGVjaWZpZXMgdGhhdCByZW5kZXJpbmcgc2hvdWxkIGJ5cGFzcyB0aGUgcmFzdGVyaXplciBhbmQgdXNlIHRoZSBvdXRsaW5lcyBkaXJlY3RseS4gVGhpcyBpcyAKKyAgICAvLy8gdHlwaWNhbGx5IHVzZWQgYXQgdmVyeSBsYXJnZSBzaXplcy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9SRU5ERVJJTkdfTU9ERV9PVVRMSU5FCit9OworCisvLy8gPHN1bW1hcnk+CisvLy8gVGhlIERXUklURV9NQVRSSVggc3RydWN0dXJlIHNwZWNpZmllcyB0aGUgZ3JhcGhpY3MgdHJhbnNmb3JtIHRvIGJlIGFwcGxpZWQKKy8vLyB0byByZW5kZXJlZCBnbHlwaHMuCisvLy8gPC9zdW1tYXJ5Pgorc3RydWN0IERXUklURV9NQVRSSVgKK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEhvcml6b250YWwgc2NhbGluZyAvIGNvc2luZSBvZiByb3RhdGlvbgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRkxPQVQgbTExOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBWZXJ0aWNhbCBzaGVhciAvIHNpbmUgb2Ygcm90YXRpb24KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIEZMT0FUIG0xMjsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gSG9yaXpvbnRhbCBzaGVhciAvIG5lZ2F0aXZlIHNpbmUgb2Ygcm90YXRpb24KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIEZMT0FUIG0yMTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVmVydGljYWwgc2NhbGluZyAvIGNvc2luZSBvZiByb3RhdGlvbgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRkxPQVQgbTIyOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBIb3Jpem9udGFsIHNoaWZ0IChhbHdheXMgb3J0aG9nb25hbCByZWdhcmRsZXNzIG9mIHJvdGF0aW9uKQorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRkxPQVQgZHg7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFZlcnRpY2FsIHNoaWZ0IChhbHdheXMgb3J0aG9nb25hbCByZWdhcmRsZXNzIG9mIHJvdGF0aW9uKQorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRkxPQVQgZHk7Cit9OworCisvLy8gPHN1bW1hcnk+CisvLy8gVGhlIGludGVyZmFjZSB0aGF0IHJlcHJlc2VudHMgdGV4dCByZW5kZXJpbmcgc2V0dGluZ3MgZm9yIGdseXBoIHJhc3Rlcml6YXRpb24gYW5kIGZpbHRlcmluZy4KKy8vLyA8L3N1bW1hcnk+CitpbnRlcmZhY2UgRFdSSVRFX0RFQ0xBUkVfSU5URVJGQUNFKCIyZjBkYTUzYS0yYWRkLTQ3Y2QtODJlZS1kOWVjMzQ2ODhlNzUiKSBJRFdyaXRlUmVuZGVyaW5nUGFyYW1zIDogcHVibGljIElVbmtub3duCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXRzIHRoZSBnYW1tYSB2YWx1ZSB1c2VkIGZvciBnYW1tYSBjb3JyZWN0aW9uLiBWYWxpZCB2YWx1ZXMgbXVzdCBiZQorICAgIC8vLyBncmVhdGVyIHRoYW4gemVybyBhbmQgY2Fubm90IGV4Y2VlZCAyNTYuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBTVERNRVRIT0RfKEZMT0FULCBHZXRHYW1tYSkoKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXRzIHRoZSBhbW91bnQgb2YgY29udHJhc3QgZW5oYW5jZW1lbnQuIFZhbGlkIHZhbHVlcyBhcmUgZ3JlYXRlciB0aGFuCisgICAgLy8vIG9yIGVxdWFsIHRvIHplcm8uCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBTVERNRVRIT0RfKEZMT0FULCBHZXRFbmhhbmNlZENvbnRyYXN0KSgpIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldHMgdGhlIENsZWFyVHlwZSBsZXZlbC4gVmFsaWQgdmFsdWVzIHJhbmdlIGZyb20gMC4wZiAobm8gQ2xlYXJUeXBlKSAKKyAgICAvLy8gdG8gMS4wZiAoZnVsbCBDbGVhclR5cGUpLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgU1RETUVUSE9EXyhGTE9BVCwgR2V0Q2xlYXJUeXBlTGV2ZWwpKCkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0cyB0aGUgcGl4ZWwgZ2VvbWV0cnkuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBTVERNRVRIT0RfKERXUklURV9QSVhFTF9HRU9NRVRSWSwgR2V0UGl4ZWxHZW9tZXRyeSkoKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXRzIHRoZSByZW5kZXJpbmcgbW9kZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFNURE1FVEhPRF8oRFdSSVRFX1JFTkRFUklOR19NT0RFLCBHZXRSZW5kZXJpbmdNb2RlKSgpIFBVUkU7Cit9OworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiBEMkQgdHlwZXMKK2ludGVyZmFjZSBJRDJEMVNpbXBsaWZpZWRHZW9tZXRyeVNpbms7CisKK3R5cGVkZWYgSUQyRDFTaW1wbGlmaWVkR2VvbWV0cnlTaW5rIElEV3JpdGVHZW9tZXRyeVNpbms7CisKKy8vLyA8c3VtbWFyeT4KKy8vLyBUaGUgaW50ZXJmYWNlIHRoYXQgcmVwcmVzZW50cyBhbiBhYnNvbHV0ZSByZWZlcmVuY2UgdG8gYSBmb250IGZhY2UuCisvLy8gSXQgY29udGFpbnMgZm9udCBmYWNlIHR5cGUsIGFwcHJvcHJpYXRlIGZpbGUgcmVmZXJlbmNlcyBhbmQgZmFjZSBpZGVudGlmaWNhdGlvbiBkYXRhLgorLy8vIFZhcmlvdXMgZm9udCBkYXRhIHN1Y2ggYXMgbWV0cmljcywgbmFtZXMgYW5kIGdseXBoIG91dGxpbmVzIGlzIG9idGFpbmVkIGZyb20gSURXcml0ZUZvbnRGYWNlLgorLy8vIDwvc3VtbWFyeT4KK2ludGVyZmFjZSBEV1JJVEVfREVDTEFSRV9JTlRFUkZBQ0UoIjVmNDk4MDRkLTcwMjQtNGQ0My1iZmE5LWQyNTk4NGY1Mzg0OSIpIElEV3JpdGVGb250RmFjZSA6IHB1YmxpYyBJVW5rbm93bgoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gT2J0YWlucyB0aGUgZmlsZSBmb3JtYXQgdHlwZSBvZiBhIGZvbnQgZmFjZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFNURE1FVEhPRF8oRFdSSVRFX0ZPTlRfRkFDRV9UWVBFLCBHZXRUeXBlKSgpIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIE9idGFpbnMgdGhlIGZvbnQgZmlsZXMgcmVwcmVzZW50aW5nIGEgZm9udCBmYWNlLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJudW1iZXJPZkZpbGVzIj5UaGUgbnVtYmVyIG9mIGZpbGVzIHJlcHJlc2VudGluZyB0aGUgZm9udCBmYWNlLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RmlsZXMiPlVzZXIgcHJvdmlkZWQgYXJyYXkgdGhhdCBzdG9yZXMgcG9pbnRlcnMgdG8gZm9udCBmaWxlcyByZXByZXNlbnRpbmcgdGhlIGZvbnQgZmFjZS4KKyAgICAvLy8gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIE5VTEwgaWYgdGhlIHVzZXIgaXMgb25seSBpbnRlcmVzdGVkIGluIHRoZSBudW1iZXIgb2YgZmlsZXMgcmVwcmVzZW50aW5nIHRoZSBmb250IGZhY2UuCisgICAgLy8vIFRoaXMgQVBJIGluY3JlbWVudHMgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBmb250IGZpbGUgcG9pbnRlcnMgcmV0dXJuZWQgYWNjb3JkaW5nIHRvIENPTSBjb252ZW50aW9ucywgYW5kIHRoZSBjbGllbnQKKyAgICAvLy8gc2hvdWxkIHJlbGVhc2UgdGhlbSB3aGVuIGZpbmlzaGVkLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0RmlsZXMpKAorICAgICAgICBfX2lub3V0IFVJTlQzMiogbnVtYmVyT2ZGaWxlcywKKyAgICAgICAgX19vdXRfZWNvdW50X29wdCgqbnVtYmVyT2ZGaWxlcykgSURXcml0ZUZvbnRGaWxlKiogZm9udEZpbGVzCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gT2J0YWlucyB0aGUgemVyby1iYXNlZCBpbmRleCBvZiB0aGUgZm9udCBmYWNlIGluIGl0cyBmb250IGZpbGUgb3IgZmlsZXMuIElmIHRoZSBmb250IGZpbGVzIGNvbnRhaW4gYSBzaW5nbGUgZmFjZSwKKyAgICAvLy8gdGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJvLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgU1RETUVUSE9EXyhVSU5UMzIsIEdldEluZGV4KSgpIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIE9idGFpbnMgdGhlIGFsZ29yaXRobWljIHN0eWxlIHNpbXVsYXRpb24gZmxhZ3Mgb2YgYSBmb250IGZhY2UuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBTVERNRVRIT0RfKERXUklURV9GT05UX1NJTVVMQVRJT05TLCBHZXRTaW11bGF0aW9ucykoKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGZvbnQgaXMgYSBzeW1ib2wgZm9udC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFNURE1FVEhPRF8oQk9PTCwgSXNTeW1ib2xGb250KSgpIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIE9idGFpbnMgZGVzaWduIHVuaXRzIGFuZCBjb21tb24gbWV0cmljcyBmb3IgdGhlIGZvbnQgZmFjZS4KKyAgICAvLy8gVGhlc2UgbWV0cmljcyBhcmUgYXBwbGljYWJsZSB0byBhbGwgdGhlIGdseXBocyB3aXRoaW4gYSBmb250ZmFjZSBhbmQgYXJlIHVzZWQgYnkgYXBwbGljYXRpb25zIGZvciBsYXlvdXQgY2FsY3VsYXRpb25zLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RmFjZU1ldHJpY3MiPlBvaW50cyB0byBhIERXUklURV9GT05UX01FVFJJQ1Mgc3RydWN0dXJlIHRvIGZpbGwgaW4uCisgICAgLy8vIFRoZSBtZXRyaWNzIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gYXJlIGluIGZvbnQgZGVzaWduIHVuaXRzLjwvcGFyYW0+CisgICAgU1RETUVUSE9EXyh2b2lkLCBHZXRNZXRyaWNzKSgKKyAgICAgICAgX19vdXQgRFdSSVRFX0ZPTlRfTUVUUklDUyogZm9udEZhY2VNZXRyaWNzCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gT2J0YWlucyB0aGUgbnVtYmVyIG9mIGdseXBocyBpbiB0aGUgZm9udCBmYWNlLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgU1RETUVUSE9EXyhVSU5UMTYsIEdldEdseXBoQ291bnQpKCkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gT2J0YWlucyBpZGVhbCBnbHlwaCBtZXRyaWNzIGluIGZvbnQgZGVzaWduIHVuaXRzLiBEZXNpZ24gZ2x5cGhzIG1ldHJpY3MgYXJlIHVzZWQgZm9yIGdseXBoIHBvc2l0aW9uaW5nLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaEluZGljZXMiPkFuIGFycmF5IG9mIGdseXBoIGluZGljZXMgdG8gY29tcHV0ZSB0aGUgbWV0cmljcyBmb3IuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImdseXBoQ291bnQiPlRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGdseXBoSW5kaWNlcyBhcnJheS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2x5cGhNZXRyaWNzIj5BcnJheSBvZiBEV1JJVEVfR0xZUEhfTUVUUklDUyBzdHJ1Y3R1cmVzIGZpbGxlZCBieSB0aGlzIGZ1bmN0aW9uLgorICAgIC8vLyBUaGUgbWV0cmljcyByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGFyZSBpbiBmb250IGRlc2lnbiB1bml0cy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaXNTaWRld2F5cyI+SW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZvbnQgaXMgYmVpbmcgdXNlZCBpbiBhIHNpZGV3YXlzIHJ1bi4KKyAgICAvLy8gVGhpcyBjYW4gYWZmZWN0IHRoZSBnbHlwaCBtZXRyaWNzIGlmIHRoZSBmb250IGhhcyBvYmxpcXVlIHNpbXVsYXRpb24KKyAgICAvLy8gYmVjYXVzZSBzaWRld2F5cyBvYmxpcXVlIHNpbXVsYXRpb24gZGlmZmVycyBmcm9tIG5vbi1zaWRld2F5cyBvYmxpcXVlIHNpbXVsYXRpb24uPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4gSWYgYW55IG9mIHRoZSBpbnB1dCBnbHlwaCBpbmRpY2VzIGFyZSBvdXRzaWRlIG9mIHRoZSB2YWxpZCBnbHlwaCBpbmRleCByYW5nZQorICAgIC8vLyBmb3IgdGhlIGN1cnJlbnQgZm9udCBmYWNlLCBFX0lOVkFMSURBUkcgd2lsbCBiZSByZXR1cm5lZC4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChHZXREZXNpZ25HbHlwaE1ldHJpY3MpKAorICAgICAgICBfX2luX2Vjb3VudChnbHlwaENvdW50KSBVSU5UMTYgY29uc3QqIGdseXBoSW5kaWNlcywKKyAgICAgICAgVUlOVDMyIGdseXBoQ291bnQsCisgICAgICAgIF9fb3V0X2Vjb3VudChnbHlwaENvdW50KSBEV1JJVEVfR0xZUEhfTUVUUklDUyogZ2x5cGhNZXRyaWNzLAorICAgICAgICBCT09MIGlzU2lkZXdheXMgPSBGQUxTRQorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFJldHVybnMgdGhlIG5vbWluYWwgbWFwcGluZyBvZiBVQ1M0IFVuaWNvZGUgY29kZSBwb2ludHMgdG8gZ2x5cGggaW5kaWNlcyBhcyBkZWZpbmVkIGJ5IHRoZSBmb250ICdDTUFQJyB0YWJsZS4KKyAgICAvLy8gTm90ZSB0aGF0IHRoaXMgbWFwcGluZyBpcyBwcmltYXJpbHkgcHJvdmlkZWQgZm9yIGxpbmUgbGF5b3V0IGVuZ2luZXMgYnVpbHQgb24gdG9wIG9mIHRoZSBwaHlzaWNhbCBmb250IEFQSS4KKyAgICAvLy8gQmVjYXVzZSBvZiBPcGVuVHlwZSBnbHlwaCBzdWJzdGl0dXRpb24gYW5kIGxpbmUgbGF5b3V0IGNoYXJhY3RlciBzdWJzdGl0dXRpb24sIHRoZSBub21pbmFsIGNvbnZlcnNpb24gZG9lcyBub3QgYWx3YXlzIGNvcnJlc3BvbmQKKyAgICAvLy8gdG8gaG93IGEgVW5pY29kZSBzdHJpbmcgd2lsbCBtYXAgdG8gZ2x5cGggaW5kaWNlcyB3aGVuIHJlbmRlcmluZyB1c2luZyBhIHBhcnRpY3VsYXIgZm9udCBmYWNlLgorICAgIC8vLyBBbHNvLCBub3RlIHRoYXQgVW5pY29kZSBWYXJpYW50IFNlbGVjdG9ycyBwcm92aWRlIGZvciBhbHRlcm5hdGUgbWFwcGluZ3MgZm9yIGNoYXJhY3RlciB0byBnbHlwaC4KKyAgICAvLy8gVGhpcyBjYWxsIHdpbGwgYWx3YXlzIHJldHVybiB0aGUgZGVmYXVsdCB2YXJpYW50LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJjb2RlUG9pbnRzIj5BbiBhcnJheSBvZiBVU0M0IGNvZGUgcG9pbnRzIHRvIG9idGFpbiBub21pbmFsIGdseXBoIGluZGljZXMgZnJvbS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iY29kZVBvaW50Q291bnQiPlRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGNvZGVQb2ludHMgYXJyYXkuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImdseXBoSW5kaWNlcyI+QXJyYXkgb2Ygbm9taW5hbCBnbHlwaCBpbmRpY2VzIGZpbGxlZCBieSB0aGlzIGZ1bmN0aW9uLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0R2x5cGhJbmRpY2VzKSgKKyAgICAgICAgX19pbl9lY291bnQoY29kZVBvaW50Q291bnQpIFVJTlQzMiBjb25zdCogY29kZVBvaW50cywKKyAgICAgICAgVUlOVDMyIGNvZGVQb2ludENvdW50LAorICAgICAgICBfX291dF9lY291bnQoY29kZVBvaW50Q291bnQpIFVJTlQxNiogZ2x5cGhJbmRpY2VzCisgICAgICAgICkgUFVSRTsKKyAKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEZpbmRzIHRoZSBzcGVjaWZpZWQgT3BlblR5cGUgZm9udCB0YWJsZSBpZiBpdCBleGlzdHMgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIGl0LgorICAgIC8vLyBUaGUgZnVuY3Rpb24gYWNjZXNzZXMgdGhlIHVuZGVybGluZyBmb250IGRhdGEgdmlhIHRoZSBJRFdyaXRlRm9udFN0cmVhbSBpbnRlcmZhY2UKKyAgICAvLy8gaW1wbGVtZW50ZWQgYnkgdGhlIGZvbnQgZmlsZSBsb2FkZXIuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9Im9wZW5UeXBlVGFibGVUYWciPkZvdXIgY2hhcmFjdGVyIHRhZyBvZiB0YWJsZSB0byBmaW5kLgorICAgIC8vLyAgICAgVXNlIHRoZSBEV1JJVEVfTUFLRV9PUEVOVFlQRV9UQUcoKSBtYWNybyB0byBjcmVhdGUgaXQuCisgICAgLy8vICAgICBVbmxpa2UgR0RJLCBpdCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBzcGVjaWFsIFRUQ0YgYW5kIG51bGwgdGFncyB0byBhY2Nlc3MgdGhlIHdob2xlIGZvbnQuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRhYmxlRGF0YSI+CisgICAgLy8vICAgICBQb2ludGVyIHRvIGJhc2Ugb2YgdGFibGUgaW4gbWVtb3J5LgorICAgIC8vLyAgICAgVGhlIHBvaW50ZXIgaXMgb25seSB2YWxpZCBzbyBsb25nIGFzIHRoZSBGb250RmFjZSB1c2VkIHRvIGdldCB0aGUgZm9udCB0YWJsZSBzdGlsbCBleGlzdHMKKyAgICAvLy8gICAgIChub3QgYW55IG90aGVyIEZvbnRGYWNlLCBldmVuIGlmIGl0IGFjdHVhbGx5IHJlZmVycyB0byB0aGUgc2FtZSBwaHlzaWNhbCBmb250KS4KKyAgICAvLy8gPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRhYmxlU2l6ZSI+Qnl0ZSBzaXplIG9mIHRhYmxlLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0YWJsZUNvbnRleHQiPgorICAgIC8vLyAgICAgT3BhcXVlIGNvbnRleHQgd2hpY2ggbXVzdCBiZSBmcmVlZCBieSBjYWxsaW5nIFJlbGVhc2VGb250VGFibGUuCisgICAgLy8vICAgICBUaGUgY29udGV4dCBhY3R1YWxseSBjb21lcyBmcm9tIHRoZSBsb3dlciBsZXZlbCBJRFdyaXRlRm9udEZpbGVTdHJlYW0sCisgICAgLy8vICAgICB3aGljaCBtYXkgYmUgaW1wbGVtZW50ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIG9yIERXcml0ZSBpdHNlbGYuCisgICAgLy8vICAgICBJdCBpcyBwb3NzaWJsZSBmb3IgYSBOVUxMIHRhYmxlQ29udGV4dCB0byBiZSByZXR1cm5lZCwgZXNwZWNpYWxseSBpZgorICAgIC8vLyAgICAgdGhlIGltcGxlbWVudGF0aW9uIGRpcmVjdGx5IG1lbW9yeSBtYXBzIHRoZSB3aG9sZSBmaWxlLgorICAgIC8vLyAgICAgTmV2ZXJ0aGVsZXNzLCBhbHdheXMgcmVsZWFzZSBpdCBsYXRlciwgYW5kIGRvIG5vdCB1c2UgaXQgYXMgYSB0ZXN0IGZvciBmdW5jdGlvbiBzdWNjZXNzLgorICAgIC8vLyAgICAgVGhlIHNhbWUgdGFibGUgY2FuIGJlIHF1ZXJpZWQgbXVsdGlwbGUgdGltZXMsCisgICAgLy8vICAgICBidXQgZWFjaCByZXR1cm5lZCBjb250ZXh0IGNhbiBiZSBkaWZmZXJlbnQsIHNvIHJlbGVhc2UgZWFjaCBzZXBhcmF0ZWx5LgorICAgIC8vLyA8L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZXhpc3RzIj5UcnVlIGlmIHRhYmxlIGV4aXN0cy48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyBJZiBhIHRhYmxlIGNhbiBub3QgYmUgZm91bmQsIHRoZSBmdW5jdGlvbiB3aWxsIG5vdCByZXR1cm4gYW4gZXJyb3IsIGJ1dCB0aGUgc2l6ZSB3aWxsIGJlIDAsIHRhYmxlIE5VTEwsIGFuZCBleGlzdHMgPSBGQUxTRS4KKyAgICAvLy8gVGhlIGNvbnRleHQgZG9lcyBub3QgbmVlZCB0byBiZSBmcmVlZCBpZiB0aGUgdGFibGUgd2FzIG5vdCBmb3VuZC4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIC8vLyA8cmVtYXJrcz4KKyAgICAvLy8gVGhlIGNvbnRleHQgZm9yIHRoZSBzYW1lIHRhZyBtYXkgYmUgZGlmZmVyZW50IGZvciBlYWNoIGNhbGwsCisgICAgLy8vIHNvIGVhY2ggb25lIG11c3QgYmUgaGVsZCBhbmQgcmVsZWFzZWQgc2VwYXJhdGVseS4KKyAgICAvLy8gPC9yZW1hcmtzPgorICAgIFNURE1FVEhPRChUcnlHZXRGb250VGFibGUpKAorICAgICAgICBfX2luIFVJTlQzMiBvcGVuVHlwZVRhYmxlVGFnLAorICAgICAgICBfX2RlcmVmX291dF9iY291bnQoKnRhYmxlU2l6ZSkgY29uc3Qgdm9pZCoqIHRhYmxlRGF0YSwKKyAgICAgICAgX19vdXQgVUlOVDMyKiB0YWJsZVNpemUsCisgICAgICAgIF9fb3V0IHZvaWQqKiB0YWJsZUNvbnRleHQsCisgICAgICAgIF9fb3V0IEJPT0wqIGV4aXN0cworICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFJlbGVhc2VzIHRoZSB0YWJsZSBvYnRhaW5lZCBlYXJsaWVyIGZyb20gVHJ5R2V0Rm9udFRhYmxlLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0YWJsZUNvbnRleHQiPk9wYXF1ZSBjb250ZXh0IGZyb20gVHJ5R2V0Rm9udFRhYmxlLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0RfKHZvaWQsIFJlbGVhc2VGb250VGFibGUpKAorICAgICAgICBfX2luIHZvaWQqIHRhYmxlQ29udGV4dAorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIENvbXB1dGVzIHRoZSBvdXRsaW5lIG9mIGEgcnVuIG9mIGdseXBocyBieSBjYWxsaW5nIGJhY2sgdG8gdGhlIG91dGxpbmUgc2luayBpbnRlcmZhY2UuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImVtU2l6ZSI+TG9naWNhbCBzaXplIG9mIHRoZSBmb250IGluIERJUCB1bml0cy4gQSBESVAgKCJkZXZpY2UtaW5kZXBlbmRlbnQgcGl4ZWwiKSBlcXVhbHMgMS85NiBpbmNoLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaEluZGljZXMiPkFycmF5IG9mIGdseXBoIGluZGljZXMuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImdseXBoQWR2YW5jZXMiPk9wdGlvbmFsIGFycmF5IG9mIGdseXBoIGFkdmFuY2VzIGluIERJUHMuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImdseXBoT2Zmc2V0cyI+T3B0aW9uYWwgYXJyYXkgb2YgZ2x5cGggb2Zmc2V0cy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2x5cGhDb3VudCI+TnVtYmVyIG9mIGdseXBocy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaXNTaWRld2F5cyI+SWYgdHJ1ZSwgc3BlY2lmaWVzIHRoYXQgZ2x5cGhzIGFyZSByb3RhdGVkIDkwIGRlZ3JlZXMgdG8gdGhlIGxlZnQgYW5kIHZlcnRpY2FsIG1ldHJpY3MgYXJlIHVzZWQuCisgICAgLy8vIEEgY2xpZW50IGNhbiByZW5kZXIgYSB2ZXJ0aWNhbCBydW4gYnkgc3BlY2lmeWluZyBpc1NpZGV3YXlzID0gdHJ1ZSBhbmQgcm90YXRpbmcgdGhlIHJlc3VsdGluZyBnZW9tZXRyeSA5MCBkZWdyZWVzIHRvIHRoZQorICAgIC8vLyByaWdodCB1c2luZyBhIHRyYW5zZm9ybS4gVGhlIGlzU2lkZXdheXMgYW5kIGlzUmlnaHRUb0xlZnQgcGFyYW1ldGVycyBjYW5ub3QgYm90aCBiZSB0cnVlLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJpc1JpZ2h0VG9MZWZ0Ij5JZiB0cnVlLCBzcGVjaWZpZXMgdGhhdCB0aGUgYWR2YW5jZSBkaXJlY3Rpb24gaXMgcmlnaHQgdG8gbGVmdC4gQnkgZGVmYXVsdCwgdGhlIGFkdmFuY2UgZGlyZWN0aW9uCisgICAgLy8vIGlzIGxlZnQgdG8gcmlnaHQuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9Imdlb21ldHJ5U2luayI+SW50ZXJmYWNlIHRoZSBmdW5jdGlvbiBjYWxscyBiYWNrIHRvIGRyYXcgZWFjaCBlbGVtZW50IG9mIHRoZSBnZW9tZXRyeS48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKEdldEdseXBoUnVuT3V0bGluZSkoCisgICAgICAgIEZMT0FUIGVtU2l6ZSwKKyAgICAgICAgX19pbl9lY291bnQoZ2x5cGhDb3VudCkgVUlOVDE2IGNvbnN0KiBnbHlwaEluZGljZXMsCisgICAgICAgIF9faW5fZWNvdW50X29wdChnbHlwaENvdW50KSBGTE9BVCBjb25zdCogZ2x5cGhBZHZhbmNlcywKKyAgICAgICAgX19pbl9lY291bnRfb3B0KGdseXBoQ291bnQpIERXUklURV9HTFlQSF9PRkZTRVQgY29uc3QqIGdseXBoT2Zmc2V0cywKKyAgICAgICAgVUlOVDMyIGdseXBoQ291bnQsCisgICAgICAgIEJPT0wgaXNTaWRld2F5cywKKyAgICAgICAgQk9PTCBpc1JpZ2h0VG9MZWZ0LAorICAgICAgICBJRFdyaXRlR2VvbWV0cnlTaW5rKiBnZW9tZXRyeVNpbmsKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBEZXRlcm1pbmVzIHRoZSByZWNvbW1lbmRlZCByZW5kZXJpbmcgbW9kZSBmb3IgdGhlIGZvbnQgZ2l2ZW4gdGhlIHNwZWNpZmllZCBzaXplIGFuZCByZW5kZXJpbmcgcGFyYW1ldGVycy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZW1TaXplIj5Mb2dpY2FsIHNpemUgb2YgdGhlIGZvbnQgaW4gRElQIHVuaXRzLiBBIERJUCAoImRldmljZS1pbmRlcGVuZGVudCBwaXhlbCIpIGVxdWFscyAxLzk2IGluY2guPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InBpeGVsc1BlckRpcCI+TnVtYmVyIG9mIHBoeXNpY2FsIHBpeGVscyBwZXIgRElQLiBGb3IgZXhhbXBsZSwgaWYgdGhlIERQSSBvZiB0aGUgcmVuZGVyaW5nIHN1cmZhY2UgaXMgOTYgdGhpcyAKKyAgICAvLy8gdmFsdWUgaXMgMS4wZi4gSWYgdGhlIERQSSBpcyAxMjAsIHRoaXMgdmFsdWUgaXMgMTIwLjBmLzk2LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJtZWFzdXJpbmdNb2RlIj5TcGVjaWZpZXMgbWVhc3VyaW5nIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgZ2x5cGhzIGluIHRoZSBmb250LgorICAgIC8vLyBSZW5kZXJlciBpbXBsZW1lbnRhdGlvbnMgbWF5IGNob29zZSBkaWZmZXJlbnQgcmVuZGVyaW5nIG1vZGVzIGZvciBnaXZlbiBtZWFzdXJpbmcgbWV0aG9kcywgYnV0CisgICAgLy8vIGJlc3QgcmVzdWx0cyBhcmUgc2VlbiB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIG1vZGVzIG1hdGNoOgorICAgIC8vLyBEV1JJVEVfUkVOREVSSU5HX01PREVfQ0xFQVJUWVBFX05BVFVSQUwgZm9yIERXUklURV9NRUFTVVJJTkdfTU9ERV9OQVRVUkFMCisgICAgLy8vIERXUklURV9SRU5ERVJJTkdfTU9ERV9DTEVBUlRZUEVfR0RJX0NMQVNTSUMgZm9yIERXUklURV9NRUFTVVJJTkdfTU9ERV9HRElfQ0xBU1NJQworICAgIC8vLyBEV1JJVEVfUkVOREVSSU5HX01PREVfQ0xFQVJUWVBFX0dESV9OQVRVUkFMIGZvciBEV1JJVEVfTUVBU1VSSU5HX01PREVfR0RJX05BVFVSQUwKKyAgICAvLy8gPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InJlbmRlcmluZ1BhcmFtcyI+UmVuZGVyaW5nIHBhcmFtZXRlcnMgb2JqZWN0LiBUaGlzIHBhcmFtZXRlciBpcyBuZWNlc3NhcnkgaW4gY2FzZSB0aGUgcmVuZGVyaW5nIHBhcmFtZXRlcnMgCisgICAgLy8vIG9iamVjdCBvdmVycmlkZXMgdGhlIHJlbmRlcmluZyBtb2RlLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJyZW5kZXJpbmdNb2RlIj5SZWNlaXZlcyB0aGUgcmVjb21tZW5kZWQgcmVuZGVyaW5nIG1vZGUgdG8gdXNlLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0UmVjb21tZW5kZWRSZW5kZXJpbmdNb2RlKSgKKyAgICAgICAgRkxPQVQgZW1TaXplLAorICAgICAgICBGTE9BVCBwaXhlbHNQZXJEaXAsCisgICAgICAgIERXUklURV9NRUFTVVJJTkdfTU9ERSBtZWFzdXJpbmdNb2RlLAorICAgICAgICBJRFdyaXRlUmVuZGVyaW5nUGFyYW1zKiByZW5kZXJpbmdQYXJhbXMsCisgICAgICAgIF9fb3V0IERXUklURV9SRU5ERVJJTkdfTU9ERSogcmVuZGVyaW5nTW9kZQorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIE9idGFpbnMgZGVzaWduIHVuaXRzIGFuZCBjb21tb24gbWV0cmljcyBmb3IgdGhlIGZvbnQgZmFjZS4KKyAgICAvLy8gVGhlc2UgbWV0cmljcyBhcmUgYXBwbGljYWJsZSB0byBhbGwgdGhlIGdseXBocyB3aXRoaW4gYSBmb250ZmFjZSBhbmQgYXJlIHVzZWQgYnkgYXBwbGljYXRpb25zIGZvciBsYXlvdXQgY2FsY3VsYXRpb25zLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJlbVNpemUiPkxvZ2ljYWwgc2l6ZSBvZiB0aGUgZm9udCBpbiBESVAgdW5pdHMuIEEgRElQICgiZGV2aWNlLWluZGVwZW5kZW50IHBpeGVsIikgZXF1YWxzIDEvOTYgaW5jaC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0icGl4ZWxzUGVyRGlwIj5OdW1iZXIgb2YgcGh5c2ljYWwgcGl4ZWxzIHBlciBESVAuIEZvciBleGFtcGxlLCBpZiB0aGUgRFBJIG9mIHRoZSByZW5kZXJpbmcgc3VyZmFjZSBpcyA5NiB0aGlzIAorICAgIC8vLyB2YWx1ZSBpcyAxLjBmLiBJZiB0aGUgRFBJIGlzIDEyMCwgdGhpcyB2YWx1ZSBpcyAxMjAuMGYvOTYuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRyYW5zZm9ybSI+T3B0aW9uYWwgdHJhbnNmb3JtIGFwcGxpZWQgdG8gdGhlIGdseXBocyBhbmQgdGhlaXIgcG9zaXRpb25zLiBUaGlzIHRyYW5zZm9ybSBpcyBhcHBsaWVkIGFmdGVyIHRoZQorICAgIC8vLyBzY2FsaW5nIHNwZWNpZmllZCBieSB0aGUgZm9udCBzaXplIGFuZCBwaXhlbHNQZXJEaXAuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGYWNlTWV0cmljcyI+UG9pbnRzIHRvIGEgRFdSSVRFX0ZPTlRfTUVUUklDUyBzdHJ1Y3R1cmUgdG8gZmlsbCBpbi4KKyAgICAvLy8gVGhlIG1ldHJpY3MgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBhcmUgaW4gZm9udCBkZXNpZ24gdW5pdHMuPC9wYXJhbT4KKyAgICBTVERNRVRIT0QoR2V0R2RpQ29tcGF0aWJsZU1ldHJpY3MpKAorICAgICAgICBGTE9BVCBlbVNpemUsCisgICAgICAgIEZMT0FUIHBpeGVsc1BlckRpcCwKKyAgICAgICAgX19pbl9vcHQgRFdSSVRFX01BVFJJWCBjb25zdCogdHJhbnNmb3JtLAorICAgICAgICBfX291dCBEV1JJVEVfRk9OVF9NRVRSSUNTKiBmb250RmFjZU1ldHJpY3MKKyAgICAgICAgKSBQVVJFOworCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIE9idGFpbnMgZ2x5cGggbWV0cmljcyBpbiBmb250IGRlc2lnbiB1bml0cyB3aXRoIHRoZSByZXR1cm4gdmFsdWVzIGNvbXBhdGlibGUgd2l0aCB3aGF0IEdESSB3b3VsZCBwcm9kdWNlLgorICAgIC8vLyBHbHlwaHMgbWV0cmljcyBhcmUgdXNlZCBmb3IgcG9zaXRpb25pbmcgb2YgaW5kaXZpZHVhbCBnbHlwaHMuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImVtU2l6ZSI+TG9naWNhbCBzaXplIG9mIHRoZSBmb250IGluIERJUCB1bml0cy4gQSBESVAgKCJkZXZpY2UtaW5kZXBlbmRlbnQgcGl4ZWwiKSBlcXVhbHMgMS85NiBpbmNoLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJwaXhlbHNQZXJEaXAiPk51bWJlciBvZiBwaHlzaWNhbCBwaXhlbHMgcGVyIERJUC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBEUEkgb2YgdGhlIHJlbmRlcmluZyBzdXJmYWNlIGlzIDk2IHRoaXMgCisgICAgLy8vIHZhbHVlIGlzIDEuMGYuIElmIHRoZSBEUEkgaXMgMTIwLCB0aGlzIHZhbHVlIGlzIDEyMC4wZi85Ni48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idHJhbnNmb3JtIj5PcHRpb25hbCB0cmFuc2Zvcm0gYXBwbGllZCB0byB0aGUgZ2x5cGhzIGFuZCB0aGVpciBwb3NpdGlvbnMuIFRoaXMgdHJhbnNmb3JtIGlzIGFwcGxpZWQgYWZ0ZXIgdGhlCisgICAgLy8vIHNjYWxpbmcgc3BlY2lmaWVkIGJ5IHRoZSBmb250IHNpemUgYW5kIHBpeGVsc1BlckRpcC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idXNlR2RpTmF0dXJhbCI+CisgICAgLy8vIFdoZW4gc2V0IHRvIEZBTFNFLCB0aGUgbWV0cmljcyBhcmUgdGhlIHNhbWUgYXMgdGhlIG1ldHJpY3Mgb2YgR0RJIGFsaWFzZWQgdGV4dC4KKyAgICAvLy8gV2hlbiBzZXQgdG8gVFJVRSwgdGhlIG1ldHJpY3MgYXJlIHRoZSBzYW1lIGFzIHRoZSBtZXRyaWNzIG9mIHRleHQgbWVhc3VyZWQgYnkgR0RJIHVzaW5nIGEgZm9udAorICAgIC8vLyBjcmVhdGVkIHdpdGggQ0xFQVJUWVBFX05BVFVSQUxfUVVBTElUWS4KKyAgICAvLy8gPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImdseXBoSW5kaWNlcyI+QW4gYXJyYXkgb2YgZ2x5cGggaW5kaWNlcyB0byBjb21wdXRlIHRoZSBtZXRyaWNzIGZvci48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2x5cGhDb3VudCI+VGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZ2x5cGhJbmRpY2VzIGFycmF5LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaE1ldHJpY3MiPkFycmF5IG9mIERXUklURV9HTFlQSF9NRVRSSUNTIHN0cnVjdHVyZXMgZmlsbGVkIGJ5IHRoaXMgZnVuY3Rpb24uCisgICAgLy8vIFRoZSBtZXRyaWNzIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gYXJlIGluIGZvbnQgZGVzaWduIHVuaXRzLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJpc1NpZGV3YXlzIj5JbmRpY2F0ZXMgd2hldGhlciB0aGUgZm9udCBpcyBiZWluZyB1c2VkIGluIGEgc2lkZXdheXMgcnVuLgorICAgIC8vLyBUaGlzIGNhbiBhZmZlY3QgdGhlIGdseXBoIG1ldHJpY3MgaWYgdGhlIGZvbnQgaGFzIG9ibGlxdWUgc2ltdWxhdGlvbgorICAgIC8vLyBiZWNhdXNlIHNpZGV3YXlzIG9ibGlxdWUgc2ltdWxhdGlvbiBkaWZmZXJzIGZyb20gbm9uLXNpZGV3YXlzIG9ibGlxdWUgc2ltdWxhdGlvbi48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLiBJZiBhbnkgb2YgdGhlIGlucHV0IGdseXBoIGluZGljZXMgYXJlIG91dHNpZGUgb2YgdGhlIHZhbGlkIGdseXBoIGluZGV4IHJhbmdlCisgICAgLy8vIGZvciB0aGUgY3VycmVudCBmb250IGZhY2UsIEVfSU5WQUxJREFSRyB3aWxsIGJlIHJldHVybmVkLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKEdldEdkaUNvbXBhdGlibGVHbHlwaE1ldHJpY3MpKAorICAgICAgICBGTE9BVCBlbVNpemUsCisgICAgICAgIEZMT0FUIHBpeGVsc1BlckRpcCwKKyAgICAgICAgX19pbl9vcHQgRFdSSVRFX01BVFJJWCBjb25zdCogdHJhbnNmb3JtLAorICAgICAgICBCT09MIHVzZUdkaU5hdHVyYWwsCisgICAgICAgIF9faW5fZWNvdW50KGdseXBoQ291bnQpIFVJTlQxNiBjb25zdCogZ2x5cGhJbmRpY2VzLAorICAgICAgICBVSU5UMzIgZ2x5cGhDb3VudCwKKyAgICAgICAgX19vdXRfZWNvdW50KGdseXBoQ291bnQpIERXUklURV9HTFlQSF9NRVRSSUNTKiBnbHlwaE1ldHJpY3MsCisgICAgICAgIEJPT0wgaXNTaWRld2F5cyA9IEZBTFNFCisgICAgICAgICkgUFVSRTsKK307CisKK2ludGVyZmFjZSBJRFdyaXRlRmFjdG9yeTsKK2ludGVyZmFjZSBJRFdyaXRlRm9udEZpbGVFbnVtZXJhdG9yOworCisvLy8gPHN1bW1hcnk+CisvLy8gVGhlIGZvbnQgY29sbGVjdGlvbiBsb2FkZXIgaW50ZXJmYWNlIGlzIHVzZWQgdG8gY29uc3RydWN0IGEgY29sbGVjdGlvbiBvZiBmb250cyBnaXZlbiBhIHBhcnRpY3VsYXIgdHlwZSBvZiBrZXkuCisvLy8gVGhlIGZvbnQgY29sbGVjdGlvbiBsb2FkZXIgaW50ZXJmYWNlIGlzIHJlY29tbWVuZGVkIHRvIGJlIGltcGxlbWVudGVkIGJ5IGEgc2luZ2xldG9uIG9iamVjdC4KKy8vLyBJTVBPUlRBTlQ6IGZvbnQgY29sbGVjdGlvbiBsb2FkZXIgaW1wbGVtZW50YXRpb25zIG11c3Qgbm90IHJlZ2lzdGVyIHRoZW1zZWx2ZXMgd2l0aCBhIERpcmVjdFdyaXRlIGZhY3RvcnkKKy8vLyBpbnNpZGUgdGhlaXIgY29uc3RydWN0b3JzIGFuZCBtdXN0IG5vdCB1bnJlZ2lzdGVyIHRoZW1zZWx2ZXMgaW4gdGhlaXIgZGVzdHJ1Y3RvcnMsIGJlY2F1c2UKKy8vLyByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0b24gb3BlcmF0aW9ucyBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCB0aGUgb2JqZWN0IHJlZmVyZW5jZSBjb3VudCByZXNwZWN0aXZlbHkuCisvLy8gSW5zdGVhZCwgcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbiBvZiBmb250IGZpbGUgbG9hZGVycyB3aXRoIERpcmVjdFdyaXRlIGZhY3Rvcnkgc2hvdWxkIGJlIHBlcmZvcm1lZAorLy8vIG91dHNpZGUgb2YgdGhlIGZvbnQgZmlsZSBsb2FkZXIgaW1wbGVtZW50YXRpb24gYXMgYSBzZXBhcmF0ZSBzdGVwLgorLy8vIDwvc3VtbWFyeT4KK2ludGVyZmFjZSBEV1JJVEVfREVDTEFSRV9JTlRFUkZBQ0UoImNjYTkyMGU0LTUyZjAtNDkyYi1iZmE4LTI5YzcyZWUwYTQ2OCIpIElEV3JpdGVGb250Q29sbGVjdGlvbkxvYWRlciA6IHB1YmxpYyBJVW5rbm93bgoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQ3JlYXRlcyBhIGZvbnQgZmlsZSBlbnVtZXJhdG9yIG9iamVjdCB0aGF0IGVuY2Fwc3VsYXRlcyBhIGNvbGxlY3Rpb24gb2YgZm9udCBmaWxlcy4KKyAgICAvLy8gVGhlIGZvbnQgc3lzdGVtIGNhbGxzIGJhY2sgdG8gdGhpcyBpbnRlcmZhY2UgdG8gY3JlYXRlIGEgZm9udCBjb2xsZWN0aW9uLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmYWN0b3J5Ij5GYWN0b3J5IGFzc29jaWF0ZWQgd2l0aCB0aGUgbG9hZGVyLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJjb2xsZWN0aW9uS2V5Ij5Gb250IGNvbGxlY3Rpb24ga2V5IHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgY29sbGVjdGlvbiBvZiBmb250IGZpbGVzIHdpdGhpbgorICAgIC8vLyB0aGUgc2NvcGUgb2YgdGhlIGZvbnQgY29sbGVjdGlvbiBsb2FkZXIgYmVpbmcgdXNlZC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iY29sbGVjdGlvbktleVNpemUiPlNpemUgb2YgdGhlIGZvbnQgY29sbGVjdGlvbiBrZXkgaW4gYnl0ZXMuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGaWxlRW51bWVyYXRvciI+UG9pbnRlciB0byB0aGUgbmV3bHkgY3JlYXRlZCBmb250IGZpbGUgZW51bWVyYXRvci48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKENyZWF0ZUVudW1lcmF0b3JGcm9tS2V5KSgKKyAgICAgICAgSURXcml0ZUZhY3RvcnkqIGZhY3RvcnksCisgICAgICAgIF9faW5fYmNvdW50KGNvbGxlY3Rpb25LZXlTaXplKSB2b2lkIGNvbnN0KiBjb2xsZWN0aW9uS2V5LAorICAgICAgICBVSU5UMzIgY29sbGVjdGlvbktleVNpemUsCisgICAgICAgIF9fb3V0IElEV3JpdGVGb250RmlsZUVudW1lcmF0b3IqKiBmb250RmlsZUVudW1lcmF0b3IKKyAgICAgICAgKSBQVVJFOworfTsKKworLy8vIDxzdW1tYXJ5PgorLy8vIFRoZSBmb250IGZpbGUgZW51bWVyYXRvciBpbnRlcmZhY2UgZW5jYXBzdWxhdGVzIGEgY29sbGVjdGlvbiBvZiBmb250IGZpbGVzLiBUaGUgZm9udCBzeXN0ZW0gdXNlcyB0aGlzIGludGVyZmFjZQorLy8vIHRvIGVudW1lcmF0ZSBmb250IGZpbGVzIHdoZW4gYnVpbGRpbmcgYSBmb250IGNvbGxlY3Rpb24uCisvLy8gPC9zdW1tYXJ5PgoraW50ZXJmYWNlIERXUklURV9ERUNMQVJFX0lOVEVSRkFDRSgiNzI3NTUwNDktNWZmNy00MzVkLTgzNDgtNGJlOTdjZmE2YzdjIikgSURXcml0ZUZvbnRGaWxlRW51bWVyYXRvciA6IHB1YmxpYyBJVW5rbm93bgoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQWR2YW5jZXMgdG8gdGhlIG5leHQgZm9udCBmaWxlIGluIHRoZSBjb2xsZWN0aW9uLiBXaGVuIGl0IGlzIGZpcnN0IGNyZWF0ZWQsIHRoZSBlbnVtZXJhdG9yIGlzIHBvc2l0aW9uZWQKKyAgICAvLy8gYmVmb3JlIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBjb2xsZWN0aW9uIGFuZCB0aGUgZmlyc3QgY2FsbCB0byBNb3ZlTmV4dCBhZHZhbmNlcyB0byB0aGUgZmlyc3QgZmlsZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaGFzQ3VycmVudEZpbGUiPlJlY2VpdmVzIHRoZSB2YWx1ZSBUUlVFIGlmIHRoZSBlbnVtZXJhdG9yIGFkdmFuY2VzIHRvIGEgZmlsZSwgb3IgRkFMU0UgaWYKKyAgICAvLy8gdGhlIGVudW1lcmF0b3IgYWR2YW5jZWQgcGFzdCB0aGUgbGFzdCBmaWxlIGluIHRoZSBjb2xsZWN0aW9uLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoTW92ZU5leHQpKAorICAgICAgICBfX291dCBCT09MKiBoYXNDdXJyZW50RmlsZQorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldHMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZm9udCBmaWxlLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RmlsZSI+UG9pbnRlciB0byB0aGUgbmV3bHkgY3JlYXRlZCBmb250IGZpbGUgb2JqZWN0LjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0Q3VycmVudEZvbnRGaWxlKSgKKyAgICAgICAgX19vdXQgSURXcml0ZUZvbnRGaWxlKiogZm9udEZpbGUKKyAgICAgICAgKSBQVVJFOworfTsKKworLy8vIDxzdW1tYXJ5PgorLy8vIFJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIHN0cmluZ3MgaW5kZXhlZCBieSBsb2NhbGUgbmFtZS4KKy8vLyA8L3N1bW1hcnk+CitpbnRlcmZhY2UgRFdSSVRFX0RFQ0xBUkVfSU5URVJGQUNFKCIwODI1NjIwOS0wOTlhLTRiMzQtYjg2ZC1jMjJiMTEwZTc3NzEiKSBJRFdyaXRlTG9jYWxpemVkU3RyaW5ncyA6IHB1YmxpYyBJVW5rbm93bgoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0cyB0aGUgbnVtYmVyIG9mIGxhbmd1YWdlL3N0cmluZyBwYWlycy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFNURE1FVEhPRF8oVUlOVDMyLCBHZXRDb3VudCkoKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXRzIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3aXRoIHRoZSBzcGVjaWZpZWQgbG9jYWxlIG5hbWUuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImxvY2FsZU5hbWUiPkxvY2FsZSBuYW1lIHRvIGxvb2sgZm9yLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJpbmRleCI+UmVjZWl2ZXMgdGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGxvY2FsZSBuYW1lL3N0cmluZyBwYWlyLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJleGlzdHMiPlJlY2VpdmVzIFRSVUUgaWYgdGhlIGxvY2FsZSBuYW1lIGV4aXN0cyBvciBGQUxTRSBpZiBub3QuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4gSWYgdGhlIHNwZWNpZmllZCBsb2NhbGUgbmFtZSBkb2VzIG5vdCBleGlzdCwgdGhlIHJldHVybiB2YWx1ZSBpcyBTX09LLCAKKyAgICAvLy8gYnV0ICppbmRleCBpcyBVSU5UX01BWCBhbmQgKmV4aXN0cyBpcyBGQUxTRS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChGaW5kTG9jYWxlTmFtZSkoCisgICAgICAgIF9faW5feiBXQ0hBUiBjb25zdCogbG9jYWxlTmFtZSwgCisgICAgICAgIF9fb3V0IFVJTlQzMiogaW5kZXgsCisgICAgICAgIF9fb3V0IEJPT0wqIGV4aXN0cworICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldHMgdGhlIGxlbmd0aCBpbiBjaGFyYWN0ZXJzIChub3QgaW5jbHVkaW5nIHRoZSBudWxsIHRlcm1pbmF0b3IpIG9mIHRoZSBsb2NhbGUgbmFtZSB3aXRoIHRoZSBzcGVjaWZpZWQgaW5kZXguCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImluZGV4Ij5aZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBsb2NhbGUgbmFtZS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibGVuZ3RoIj5SZWNlaXZlcyB0aGUgbGVuZ3RoIGluIGNoYXJhY3RlcnMsIG5vdCBpbmNsdWRpbmcgdGhlIG51bGwgdGVybWluYXRvci48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKEdldExvY2FsZU5hbWVMZW5ndGgpKAorICAgICAgICBVSU5UMzIgaW5kZXgsCisgICAgICAgIF9fb3V0IFVJTlQzMiogbGVuZ3RoCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQ29waWVzIHRoZSBsb2NhbGUgbmFtZSB3aXRoIHRoZSBzcGVjaWZpZWQgaW5kZXggdG8gdGhlIHNwZWNpZmllZCBhcnJheS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaW5kZXgiPlplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGxvY2FsZSBuYW1lLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJsb2NhbGVOYW1lIj5DaGFyYWN0ZXIgYXJyYXkgdGhhdCByZWNlaXZlcyB0aGUgbG9jYWxlIG5hbWUuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InNpemUiPlNpemUgb2YgdGhlIGFycmF5IGluIGNoYXJhY3RlcnMuIFRoZSBzaXplIG11c3QgaW5jbHVkZSBzcGFjZSBmb3IgdGhlIHRlcm1pbmF0aW5nCisgICAgLy8vIG51bGwgY2hhcmFjdGVyLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0TG9jYWxlTmFtZSkoCisgICAgICAgIFVJTlQzMiBpbmRleCwKKyAgICAgICAgX19vdXRfZWNvdW50X3ooc2l6ZSkgV0NIQVIqIGxvY2FsZU5hbWUsCisgICAgICAgIFVJTlQzMiBzaXplCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0cyB0aGUgbGVuZ3RoIGluIGNoYXJhY3RlcnMgKG5vdCBpbmNsdWRpbmcgdGhlIG51bGwgdGVybWluYXRvcikgb2YgdGhlIHN0cmluZyB3aXRoIHRoZSBzcGVjaWZpZWQgaW5kZXguCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImluZGV4Ij5aZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBzdHJpbmcuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9Imxlbmd0aCI+UmVjZWl2ZXMgdGhlIGxlbmd0aCBpbiBjaGFyYWN0ZXJzLCBub3QgaW5jbHVkaW5nIHRoZSBudWxsIHRlcm1pbmF0b3IuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChHZXRTdHJpbmdMZW5ndGgpKAorICAgICAgICBVSU5UMzIgaW5kZXgsCisgICAgICAgIF9fb3V0IFVJTlQzMiogbGVuZ3RoCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQ29waWVzIHRoZSBzdHJpbmcgd2l0aCB0aGUgc3BlY2lmaWVkIGluZGV4IHRvIHRoZSBzcGVjaWZpZWQgYXJyYXkuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImluZGV4Ij5aZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBzdHJpbmcuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmluZ0J1ZmZlciI+Q2hhcmFjdGVyIGFycmF5IHRoYXQgcmVjZWl2ZXMgdGhlIHN0cmluZy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ic2l6ZSI+U2l6ZSBvZiB0aGUgYXJyYXkgaW4gY2hhcmFjdGVycy4gVGhlIHNpemUgbXVzdCBpbmNsdWRlIHNwYWNlIGZvciB0aGUgdGVybWluYXRpbmcKKyAgICAvLy8gbnVsbCBjaGFyYWN0ZXIuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChHZXRTdHJpbmcpKAorICAgICAgICBVSU5UMzIgaW5kZXgsCisgICAgICAgIF9fb3V0X2Vjb3VudF96KHNpemUpIFdDSEFSKiBzdHJpbmdCdWZmZXIsCisgICAgICAgIFVJTlQzMiBzaXplCisgICAgICAgICkgUFVSRTsKK307CisKK2ludGVyZmFjZSBJRFdyaXRlRm9udEZhbWlseTsKK2ludGVyZmFjZSBJRFdyaXRlRm9udDsKKworLy8vIDxzdW1tYXJ5PgorLy8vIFRoZSBJRFdyaXRlRm9udENvbGxlY3Rpb24gZW5jYXBzdWxhdGVzIGEgY29sbGVjdGlvbiBvZiBmb250cy4KKy8vLyA8L3N1bW1hcnk+CitpbnRlcmZhY2UgRFdSSVRFX0RFQ0xBUkVfSU5URVJGQUNFKCJhODRjZWUwMi0zZWVhLTRlZWUtYTgyNy04N2MxYTAyYTBmY2MiKSBJRFdyaXRlRm9udENvbGxlY3Rpb24gOiBwdWJsaWMgSVVua25vd24KK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldHMgdGhlIG51bWJlciBvZiBmb250IGZhbWlsaWVzIGluIHRoZSBjb2xsZWN0aW9uLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgU1RETUVUSE9EXyhVSU5UMzIsIEdldEZvbnRGYW1pbHlDb3VudCkoKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBDcmVhdGVzIGEgZm9udCBmYW1pbHkgb2JqZWN0IGdpdmVuIGEgemVyby1iYXNlZCBmb250IGZhbWlseSBpbmRleC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaW5kZXgiPlplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGZvbnQgZmFtaWx5LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RmFtaWx5Ij5SZWNlaXZlcyBhIHBvaW50ZXIgdGhlIG5ld2x5IGNyZWF0ZWQgZm9udCBmYW1pbHkgb2JqZWN0LjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0Rm9udEZhbWlseSkoCisgICAgICAgIFVJTlQzMiBpbmRleCwKKyAgICAgICAgX19vdXQgSURXcml0ZUZvbnRGYW1pbHkqKiBmb250RmFtaWx5CisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gRmluZHMgdGhlIGZvbnQgZmFtaWx5IHdpdGggdGhlIHNwZWNpZmllZCBmYW1pbHkgbmFtZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZmFtaWx5TmFtZSI+TmFtZSBvZiB0aGUgZm9udCBmYW1pbHkuIFRoZSBuYW1lIGlzIG5vdCBjYXNlLXNlbnNpdGl2ZSBidXQgbXVzdCBvdGhlcndpc2UgZXhhY3RseSBtYXRjaCBhIGZhbWlseSBuYW1lIGluIHRoZSBjb2xsZWN0aW9uLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJpbmRleCI+UmVjZWl2ZXMgdGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIG1hdGNoaW5nIGZvbnQgZmFtaWx5IGlmIHRoZSBmYW1pbHkgbmFtZSB3YXMgZm91bmQgb3IgVUlOVF9NQVggb3RoZXJ3aXNlLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJleGlzdHMiPlJlY2VpdmVzIFRSVUUgaWYgdGhlIGZhbWlseSBuYW1lIGV4aXN0cyBvciBGQUxTRSBvdGhlcndpc2UuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4gSWYgdGhlIHNwZWNpZmllZCBmYW1pbHkgbmFtZSBkb2VzIG5vdCBleGlzdCwgdGhlIHJldHVybiB2YWx1ZSBpcyBTX09LLCBidXQgKmluZGV4IGlzIFVJTlRfTUFYIGFuZCAqZXhpc3RzIGlzIEZBTFNFLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKEZpbmRGYW1pbHlOYW1lKSgKKyAgICAgICAgX19pbl96IFdDSEFSIGNvbnN0KiBmYW1pbHlOYW1lLAorICAgICAgICBfX291dCBVSU5UMzIqIGluZGV4LAorICAgICAgICBfX291dCBCT09MKiBleGlzdHMKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXRzIHRoZSBmb250IG9iamVjdCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBzYW1lIHBoeXNpY2FsIGZvbnQgYXMgdGhlIHNwZWNpZmllZCBmb250IGZhY2Ugb2JqZWN0LiBUaGUgc3BlY2lmaWVkIHBoeXNpY2FsIGZvbnQgbXVzdCBiZWxvbmcgCisgICAgLy8vIHRvIHRoZSBmb250IGNvbGxlY3Rpb24uCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGYWNlIj5Gb250IGZhY2Ugb2JqZWN0IHRoYXQgc3BlY2lmaWVzIHRoZSBwaHlzaWNhbCBmb250LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmb250Ij5SZWNlaXZlcyBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgZm9udCBvYmplY3QgaWYgc3VjY2Vzc2Z1bCBvciBOVUxMIG90aGVyd2lzZS48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLiBJZiB0aGUgc3BlY2lmaWVkIHBoeXNpY2FsIGZvbnQgaXMgbm90IHBhcnQgb2YgdGhlIGZvbnQgY29sbGVjdGlvbiB0aGUgcmV0dXJuIHZhbHVlIGlzIERXUklURV9FX05PRk9OVC4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChHZXRGb250RnJvbUZvbnRGYWNlKSgKKyAgICAgICAgSURXcml0ZUZvbnRGYWNlKiBmb250RmFjZSwKKyAgICAgICAgX19vdXQgSURXcml0ZUZvbnQqKiBmb250CisgICAgICAgICkgUFVSRTsKK307CisKKy8vLyA8c3VtbWFyeT4KKy8vLyBUaGUgSURXcml0ZUZvbnRMaXN0IGludGVyZmFjZSByZXByZXNlbnRzIGEgbGlzdCBvZiBmb250cy4KKy8vLyA8L3N1bW1hcnk+CitpbnRlcmZhY2UgRFdSSVRFX0RFQ0xBUkVfSU5URVJGQUNFKCIxYTBkODQzOC0xZDk3LTRlYzEtYWVmOS1hMmZiODZlZDZhY2IiKSBJRFdyaXRlRm9udExpc3QgOiBwdWJsaWMgSVVua25vd24KK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldHMgdGhlIGZvbnQgY29sbGVjdGlvbiB0aGF0IGNvbnRhaW5zIHRoZSBmb250cy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udENvbGxlY3Rpb24iPlJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgZm9udCBjb2xsZWN0aW9uIG9iamVjdC48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKEdldEZvbnRDb2xsZWN0aW9uKSgKKyAgICAgICAgX19vdXQgSURXcml0ZUZvbnRDb2xsZWN0aW9uKiogZm9udENvbGxlY3Rpb24KKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXRzIHRoZSBudW1iZXIgb2YgZm9udHMgaW4gdGhlIGZvbnQgbGlzdC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFNURE1FVEhPRF8oVUlOVDMyLCBHZXRGb250Q291bnQpKCkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0cyBhIGZvbnQgZ2l2ZW4gaXRzIHplcm8tYmFzZWQgaW5kZXguCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImluZGV4Ij5aZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBmb250IGluIHRoZSBmb250IGxpc3QuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnQiPlJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgY3JlYXRlZCBmb250IG9iamVjdC48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKEdldEZvbnQpKAorICAgICAgICBVSU5UMzIgaW5kZXgsIAorICAgICAgICBfX291dCBJRFdyaXRlRm9udCoqIGZvbnQKKyAgICAgICAgKSBQVVJFOworfTsKKworLy8vIDxzdW1tYXJ5PgorLy8vIFRoZSBJRFdyaXRlRm9udEZhbWlseSBpbnRlcmZhY2UgcmVwcmVzZW50cyBhIHNldCBvZiBmb250cyB0aGF0IHNoYXJlIHRoZSBzYW1lIGRlc2lnbiBidXQgYXJlIGRpZmZlcmVudGlhdGVkCisvLy8gYnkgd2VpZ2h0LCBzdHJldGNoLCBhbmQgc3R5bGUuCisvLy8gPC9zdW1tYXJ5PgoraW50ZXJmYWNlIERXUklURV9ERUNMQVJFX0lOVEVSRkFDRSgiZGEyMGQ4ZWYtODEyYS00YzQzLTk4MDItNjJlYzRhYmQ3YWRkIikgSURXcml0ZUZvbnRGYW1pbHkgOiBwdWJsaWMgSURXcml0ZUZvbnRMaXN0Cit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBDcmVhdGVzIGFuIGxvY2FsaXplZCBzdHJpbmdzIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBmYW1pbHkgbmFtZXMgZm9yIHRoZSBmb250IGZhbWlseSwgaW5kZXhlZCBieSBsb2NhbGUgbmFtZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibmFtZXMiPlJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgY3JlYXRlZCBsb2NhbGl6ZWQgc3RyaW5ncyBvYmplY3QuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChHZXRGYW1pbHlOYW1lcykoCisgICAgICAgIF9fb3V0IElEV3JpdGVMb2NhbGl6ZWRTdHJpbmdzKiogbmFtZXMKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXRzIHRoZSBmb250IHRoYXQgYmVzdCBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0id2VpZ2h0Ij5SZXF1ZXN0ZWQgZm9udCB3ZWlnaHQuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmV0Y2giPlJlcXVlc3RlZCBmb250IHN0cmV0Y2guPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InN0eWxlIj5SZXF1ZXN0ZWQgZm9udCBzdHlsZS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibWF0Y2hpbmdGb250Ij5SZWNlaXZlcyBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgZm9udCBvYmplY3QuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChHZXRGaXJzdE1hdGNoaW5nRm9udCkoCisgICAgICAgIERXUklURV9GT05UX1dFSUdIVCAgd2VpZ2h0LAorICAgICAgICBEV1JJVEVfRk9OVF9TVFJFVENIIHN0cmV0Y2gsCisgICAgICAgIERXUklURV9GT05UX1NUWUxFICAgc3R5bGUsCisgICAgICAgIF9fb3V0IElEV3JpdGVGb250KiogbWF0Y2hpbmdGb250CisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0cyBhIGxpc3Qgb2YgZm9udHMgaW4gdGhlIGZvbnQgZmFtaWx5IHJhbmtlZCBpbiBvcmRlciBvZiBob3cgd2VsbCB0aGV5IG1hdGNoIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0id2VpZ2h0Ij5SZXF1ZXN0ZWQgZm9udCB3ZWlnaHQuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmV0Y2giPlJlcXVlc3RlZCBmb250IHN0cmV0Y2guPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InN0eWxlIj5SZXF1ZXN0ZWQgZm9udCBzdHlsZS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibWF0Y2hpbmdGb250cyI+UmVjZWl2ZXMgYSBwb2ludGVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIGZvbnQgbGlzdCBvYmplY3QuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChHZXRNYXRjaGluZ0ZvbnRzKSgKKyAgICAgICAgRFdSSVRFX0ZPTlRfV0VJR0hUICAgICAgd2VpZ2h0LAorICAgICAgICBEV1JJVEVfRk9OVF9TVFJFVENIICAgICBzdHJldGNoLAorICAgICAgICBEV1JJVEVfRk9OVF9TVFlMRSAgICAgICBzdHlsZSwKKyAgICAgICAgX19vdXQgSURXcml0ZUZvbnRMaXN0KiogbWF0Y2hpbmdGb250cworICAgICAgICApIFBVUkU7Cit9OworCisvLy8gPHN1bW1hcnk+CisvLy8gVGhlIElEV3JpdGVGb250IGludGVyZmFjZSByZXByZXNlbnRzIGEgcGh5c2ljYWwgZm9udCBpbiBhIGZvbnQgY29sbGVjdGlvbi4KKy8vLyA8L3N1bW1hcnk+CitpbnRlcmZhY2UgRFdSSVRFX0RFQ0xBUkVfSU5URVJGQUNFKCJhY2QxNjY5Ni04YzE0LTRmNWQtODc3ZS1mZTNmYzFkMzI3MzciKSBJRFdyaXRlRm9udCA6IHB1YmxpYyBJVW5rbm93bgoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0cyB0aGUgZm9udCBmYW1pbHkgdG8gd2hpY2ggdGhlIHNwZWNpZmllZCBmb250IGJlbG9uZ3MuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGYW1pbHkiPlJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgZm9udCBmYW1pbHkgb2JqZWN0LjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0Rm9udEZhbWlseSkoCisgICAgICAgIF9fb3V0IElEV3JpdGVGb250RmFtaWx5KiogZm9udEZhbWlseQorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldHMgdGhlIHdlaWdodCBvZiB0aGUgc3BlY2lmaWVkIGZvbnQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBTVERNRVRIT0RfKERXUklURV9GT05UX1dFSUdIVCwgR2V0V2VpZ2h0KSgpIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldHMgdGhlIHN0cmV0Y2ggKGFrYS4gd2lkdGgpIG9mIHRoZSBzcGVjaWZpZWQgZm9udC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFNURE1FVEhPRF8oRFdSSVRFX0ZPTlRfU1RSRVRDSCwgR2V0U3RyZXRjaCkoKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXRzIHRoZSBzdHlsZSAoYWthLiBzbG9wZSkgb2YgdGhlIHNwZWNpZmllZCBmb250LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgU1RETUVUSE9EXyhEV1JJVEVfRk9OVF9TVFlMRSwgR2V0U3R5bGUpKCkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gUmV0dXJucyBUUlVFIGlmIHRoZSBmb250IGlzIGEgc3ltYm9sIGZvbnQgb3IgRkFMU0UgaWYgbm90LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgU1RETUVUSE9EXyhCT09MLCBJc1N5bWJvbEZvbnQpKCkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0cyBhIGxvY2FsaXplZCBzdHJpbmdzIGNvbGxlY3Rpb24gY29udGFpbmluZyB0aGUgZmFjZSBuYW1lcyBmb3IgdGhlIGZvbnQgKGUuZy4sIFJlZ3VsYXIgb3IgQm9sZCksIGluZGV4ZWQgYnkgbG9jYWxlIG5hbWUuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9Im5hbWVzIj5SZWNlaXZlcyBhIHBvaW50ZXIgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgbG9jYWxpemVkIHN0cmluZ3Mgb2JqZWN0LjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0RmFjZU5hbWVzKSgKKyAgICAgICAgX19vdXQgSURXcml0ZUxvY2FsaXplZFN0cmluZ3MqKiBuYW1lcworICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldHMgYSBsb2NhbGl6ZWQgc3RyaW5ncyBjb2xsZWN0aW9uIGNvbnRhaW5pbmcgdGhlIHNwZWNpZmllZCBpbmZvcm1hdGlvbmFsIHN0cmluZ3MsIGluZGV4ZWQgYnkgbG9jYWxlIG5hbWUuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImluZm9ybWF0aW9uYWxTdHJpbmdJRCI+SWRlbnRpZmllcyB0aGUgc3RyaW5nIHRvIGdldC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaW5mb3JtYXRpb25hbFN0cmluZ3MiPlJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgY3JlYXRlZCBsb2NhbGl6ZWQgc3RyaW5ncyBvYmplY3QuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImV4aXN0cyI+UmVjZWl2ZXMgdGhlIHZhbHVlIFRSVUUgaWYgdGhlIGZvbnQgY29udGFpbnMgdGhlIHNwZWNpZmllZCBzdHJpbmcgSUQgb3IgRkFMU0UgaWYgbm90LjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuIElmIHRoZSBmb250IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNwZWNpZmllZCBzdHJpbmcsIHRoZSByZXR1cm4gdmFsdWUgaXMgU19PSyBidXQgCisgICAgLy8vIGluZm9ybWF0aW9uYWxTdHJpbmdzIHJlY2VpdmVzIGEgTlVMTCBwb2ludGVyIGFuZCBleGlzdHMgcmVjZWl2ZXMgdGhlIHZhbHVlIEZBTFNFLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKEdldEluZm9ybWF0aW9uYWxTdHJpbmdzKSgKKyAgICAgICAgRFdSSVRFX0lORk9STUFUSU9OQUxfU1RSSU5HX0lEIGluZm9ybWF0aW9uYWxTdHJpbmdJRCwKKyAgICAgICAgX19vdXQgSURXcml0ZUxvY2FsaXplZFN0cmluZ3MqKiBpbmZvcm1hdGlvbmFsU3RyaW5ncywKKyAgICAgICAgX19vdXQgQk9PTCogZXhpc3RzCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0cyBhIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoYXQgc2ltdWxhdGlvbiBhcmUgYXBwbGllZCB0byB0aGUgc3BlY2lmaWVkIGZvbnQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBTVERNRVRIT0RfKERXUklURV9GT05UX1NJTVVMQVRJT05TLCBHZXRTaW11bGF0aW9ucykoKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXRzIHRoZSBtZXRyaWNzIGZvciB0aGUgZm9udC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udE1ldHJpY3MiPlJlY2VpdmVzIHRoZSBmb250IG1ldHJpY3MuPC9wYXJhbT4KKyAgICBTVERNRVRIT0RfKHZvaWQsIEdldE1ldHJpY3MpKAorICAgICAgICBfX291dCBEV1JJVEVfRk9OVF9NRVRSSUNTKiBmb250TWV0cmljcworICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIERldGVybWluZXMgd2hldGhlciB0aGUgZm9udCBzdXBwb3J0cyB0aGUgc3BlY2lmaWVkIGNoYXJhY3Rlci4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0idW5pY29kZVZhbHVlIj5Vbmljb2RlIChVQ1MtNCkgY2hhcmFjdGVyIHZhbHVlLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJleGlzdHMiPlJlY2VpdmVzIHRoZSB2YWx1ZSBUUlVFIGlmIHRoZSBmb250IHN1cHBvcnRzIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyIG9yIEZBTFNFIGlmIG5vdC48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKEhhc0NoYXJhY3RlcikoCisgICAgICAgIFVJTlQzMiB1bmljb2RlVmFsdWUsCisgICAgICAgIF9fb3V0IEJPT0wqIGV4aXN0cworICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIENyZWF0ZXMgYSBmb250IGZhY2Ugb2JqZWN0IGZvciB0aGUgZm9udC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZhY2UiPlJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgY3JlYXRlZCBmb250IGZhY2Ugb2JqZWN0LjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoQ3JlYXRlRm9udEZhY2UpKAorICAgICAgICBfX291dCBJRFdyaXRlRm9udEZhY2UqKiBmb250RmFjZQorICAgICAgICApIFBVUkU7Cit9OworCisvLy8gPHN1bW1hcnk+CisvLy8gRGlyZWN0aW9uIGZvciBob3cgcmVhZGluZyBwcm9ncmVzc2VzLgorLy8vIDwvc3VtbWFyeT4KK2VudW0gRFdSSVRFX1JFQURJTkdfRElSRUNUSU9OCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBSZWFkaW5nIHByb2dyZXNzZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX1JFQURJTkdfRElSRUNUSU9OX0xFRlRfVE9fUklHSFQsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFJlYWRpbmcgcHJvZ3Jlc3NlcyBmcm9tIHJpZ2h0IHRvIGxlZnQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfUkVBRElOR19ESVJFQ1RJT05fUklHSFRfVE9fTEVGVAorfTsKKworLy8vIDxzdW1tYXJ5PgorLy8vIERpcmVjdGlvbiBmb3IgaG93IGxpbmVzIG9mIHRleHQgYXJlIHBsYWNlZCByZWxhdGl2ZSB0byBvbmUgYW5vdGhlci4KKy8vLyA8L3N1bW1hcnk+CitlbnVtIERXUklURV9GTE9XX0RJUkVDVElPTgoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVGV4dCBsaW5lcyBhcmUgcGxhY2VkIGZyb20gdG9wIHRvIGJvdHRvbS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9GTE9XX0RJUkVDVElPTl9UT1BfVE9fQk9UVE9NCit9OworCisvLy8gPHN1bW1hcnk+CisvLy8gQWxpZ25tZW50IG9mIHBhcmFncmFwaCB0ZXh0IGFsb25nIHRoZSByZWFkaW5nIGRpcmVjdGlvbiBheGlzIHJlbGF0aXZlIHRvIAorLy8vIHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBlZGdlIG9mIHRoZSBsYXlvdXQgYm94LgorLy8vIDwvc3VtbWFyeT4KK2VudW0gRFdSSVRFX1RFWFRfQUxJR05NRU5UCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGUgbGVhZGluZyBlZGdlIG9mIHRoZSBwYXJhZ3JhcGggdGV4dCBpcyBhbGlnbmVkIHRvIHRoZSBsYXlvdXQgYm94J3MgbGVhZGluZyBlZGdlLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX1RFWFRfQUxJR05NRU5UX0xFQURJTkcsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSBwYXJhZ3JhcGggdGV4dCBpcyBhbGlnbmVkIHRvIHRoZSBsYXlvdXQgYm94J3MgdHJhaWxpbmcgZWRnZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9URVhUX0FMSUdOTUVOVF9UUkFJTElORywKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVGhlIGNlbnRlciBvZiB0aGUgcGFyYWdyYXBoIHRleHQgaXMgYWxpZ25lZCB0byB0aGUgY2VudGVyIG9mIHRoZSBsYXlvdXQgYm94LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX1RFWFRfQUxJR05NRU5UX0NFTlRFUgorfTsKKworLy8vIDxzdW1tYXJ5PgorLy8vIEFsaWdubWVudCBvZiBwYXJhZ3JhcGggdGV4dCBhbG9uZyB0aGUgZmxvdyBkaXJlY3Rpb24gYXhpcyByZWxhdGl2ZSB0byB0aGUKKy8vLyBmbG93J3MgYmVnaW5uaW5nIGFuZCBlbmRpbmcgZWRnZSBvZiB0aGUgbGF5b3V0IGJveC4KKy8vLyA8L3N1bW1hcnk+CitlbnVtIERXUklURV9QQVJBR1JBUEhfQUxJR05NRU5UCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGUgZmlyc3QgbGluZSBvZiBwYXJhZ3JhcGggaXMgYWxpZ25lZCB0byB0aGUgZmxvdydzIGJlZ2lubmluZyBlZGdlIG9mIHRoZSBsYXlvdXQgYm94LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX1BBUkFHUkFQSF9BTElHTk1FTlRfTkVBUiwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVGhlIGxhc3QgbGluZSBvZiBwYXJhZ3JhcGggaXMgYWxpZ25lZCB0byB0aGUgZmxvdydzIGVuZGluZyBlZGdlIG9mIHRoZSBsYXlvdXQgYm94LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX1BBUkFHUkFQSF9BTElHTk1FTlRfRkFSLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGUgY2VudGVyIG9mIHRoZSBwYXJhZ3JhcGggaXMgYWxpZ25lZCB0byB0aGUgY2VudGVyIG9mIHRoZSBmbG93IG9mIHRoZSBsYXlvdXQgYm94LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX1BBUkFHUkFQSF9BTElHTk1FTlRfQ0VOVEVSCit9OworCisvLy8gPHN1bW1hcnk+CisvLy8gV29yZCB3cmFwcGluZyBpbiBtdWx0aWxpbmUgcGFyYWdyYXBoLgorLy8vIDwvc3VtbWFyeT4KK2VudW0gRFdSSVRFX1dPUkRfV1JBUFBJTkcKK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFdvcmRzIGFyZSBicm9rZW4gYWNyb3NzIGxpbmVzIHRvIGF2b2lkIHRleHQgb3ZlcmZsb3dpbmcgdGhlIGxheW91dCBib3guCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfV09SRF9XUkFQUElOR19XUkFQLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBXb3JkcyBhcmUga2VwdCB3aXRoaW4gdGhlIHNhbWUgbGluZSBldmVuIHdoZW4gaXQgb3ZlcmZsb3dzIHRoZSBsYXlvdXQgYm94LgorICAgIC8vLyBUaGlzIG9wdGlvbiBpcyBvZnRlbiB1c2VkIHdpdGggc2Nyb2xsaW5nIHRvIHJldmVhbCBvdmVyZmxvdyB0ZXh0LiAKKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9XT1JEX1dSQVBQSU5HX05PX1dSQVAKK307CisKKy8vLyA8c3VtbWFyeT4KKy8vLyBUaGUgbWV0aG9kIHVzZWQgZm9yIGxpbmUgc3BhY2luZyBpbiBsYXlvdXQuCisvLy8gPC9zdW1tYXJ5PgorZW51bSBEV1JJVEVfTElORV9TUEFDSU5HX01FVEhPRAoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gTGluZSBzcGFjaW5nIGRlcGVuZHMgc29sZWx5IG9uIHRoZSBjb250ZW50LCBncm93aW5nIHRvIGFjY29tb2RhdGUgdGhlIHNpemUgb2YgZm9udHMgYW5kIGlubGluZSBvYmplY3RzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0xJTkVfU1BBQ0lOR19NRVRIT0RfREVGQVVMVCwKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gTGluZXMgYXJlIGV4cGxpY2l0bHkgc2V0IHRvIHVuaWZvcm0gc3BhY2luZywgcmVnYXJkbGVzcyBvZiBjb250YWluZWQgZm9udCBzaXplcy4KKyAgICAvLy8gVGhpcyBjYW4gYmUgdXNlZnVsIHRvIGF2b2lkIHRoZSB1bmV2ZW4gYXBwZWFyYW5jZSB0aGF0IGNhbiBvY2N1ciBmcm9tIGZvbnQgZmFsbGJhY2suCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfTElORV9TUEFDSU5HX01FVEhPRF9VTklGT1JNCit9OworCisvLy8gPHN1bW1hcnk+CisvLy8gVGV4dCBncmFudWxhcml0eSB1c2VkIHRvIHRyaW0gdGV4dCBvdmVyZmxvd2luZyB0aGUgbGF5b3V0IGJveC4KKy8vLyA8L3N1bW1hcnk+CitlbnVtIERXUklURV9UUklNTUlOR19HUkFOVUxBUklUWQoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gTm8gdHJpbW1pbmcgb2NjdXJzLiBUZXh0IGZsb3dzIGJleW9uZCB0aGUgbGF5b3V0IHdpZHRoLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX1RSSU1NSU5HX0dSQU5VTEFSSVRZX05PTkUsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFRyaW1taW5nIG9jY3VycyBhdCBjaGFyYWN0ZXIgY2x1c3RlciBib3VuZGFyeS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9UUklNTUlOR19HUkFOVUxBUklUWV9DSEFSQUNURVIsCisgICAgCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUcmltbWluZyBvY2N1cnMgYXQgd29yZCBib3VuZGFyeS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9UUklNTUlOR19HUkFOVUxBUklUWV9XT1JECQorfTsKKworLy8vIDxzdW1tYXJ5PgorLy8vIFR5cG9ncmFwaGljIGZlYXR1cmUgb2YgdGV4dCBzdXBwbGllZCBieSB0aGUgZm9udC4KKy8vLyA8L3N1bW1hcnk+CitlbnVtIERXUklURV9GT05UX0ZFQVRVUkVfVEFHCit7CisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfQUxURVJOQVRJVkVfRlJBQ1RJT05TICAgICAgICAgICAgICAgPSAweDYzNzI2NjYxLCAvLyAnYWZyYycKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19QRVRJVEVfQ0FQSVRBTFNfRlJPTV9DQVBJVEFMUyAgICAgICA9IDB4NjM3MDMyNjMsIC8vICdjMnBjJworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX1NNQUxMX0NBUElUQUxTX0ZST01fQ0FQSVRBTFMgICAgICAgID0gMHg2MzczMzI2MywgLy8gJ2Myc2MnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfQ09OVEVYVFVBTF9BTFRFUk5BVEVTICAgICAgICAgICAgICAgPSAweDc0NmM2MTYzLCAvLyAnY2FsdCcKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19DQVNFX1NFTlNJVElWRV9GT1JNUyAgICAgICAgICAgICAgICA9IDB4NjU3MzYxNjMsIC8vICdjYXNlJworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX0dMWVBIX0NPTVBPU0lUSU9OX0RFQ09NUE9TSVRJT04gICAgID0gMHg3MDZkNjM2MywgLy8gJ2NjbXAnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfQ09OVEVYVFVBTF9MSUdBVFVSRVMgICAgICAgICAgICAgICAgPSAweDY3Njk2YzYzLCAvLyAnY2xpZycKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19DQVBJVEFMX1NQQUNJTkcgICAgICAgICAgICAgICAgICAgICA9IDB4NzA3MzcwNjMsIC8vICdjcHNwJworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX0NPTlRFWFRVQUxfU1dBU0ggICAgICAgICAgICAgICAgICAgID0gMHg2ODc3NzM2MywgLy8gJ2Nzd2gnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfQ1VSU0lWRV9QT1NJVElPTklORyAgICAgICAgICAgICAgICAgPSAweDczNzI3NTYzLCAvLyAnY3VycycKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19ERUZBVUxUICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NzQ2YzY2NjQsIC8vICdkZmx0JworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX0RJU0NSRVRJT05BUllfTElHQVRVUkVTICAgICAgICAgICAgID0gMHg2NzY5NmM2NCwgLy8gJ2RsaWcnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfRVhQRVJUX0ZPUk1TICAgICAgICAgICAgICAgICAgICAgICAgPSAweDc0NzA3ODY1LCAvLyAnZXhwdCcKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19GUkFDVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NjM2MTcyNjYsIC8vICdmcmFjJworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX0ZVTExfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2NDY5Nzc2NiwgLy8gJ2Z3aWQnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfSEFMRl9GT1JNUyAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDY2NmM2MTY4LCAvLyAnaGFsZicKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19IQUxBTlRfRk9STVMgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NmU2YzYxNjgsIC8vICdoYWxuJworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX0FMVEVSTkFURV9IQUxGX1dJRFRIICAgICAgICAgICAgICAgID0gMHg3NDZjNjE2OCwgLy8gJ2hhbHQnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfSElTVE9SSUNBTF9GT1JNUyAgICAgICAgICAgICAgICAgICAgPSAweDc0NzM2OTY4LCAvLyAnaGlzdCcKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19IT1JJWk9OVEFMX0tBTkFfQUxURVJOQVRFUyAgICAgICAgICA9IDB4NjE2ZTZiNjgsIC8vICdoa25hJworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX0hJU1RPUklDQUxfTElHQVRVUkVTICAgICAgICAgICAgICAgID0gMHg2NzY5NmM2OCwgLy8gJ2hsaWcnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfSEFMRl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDY0Njk3NzY4LCAvLyAnaHdpZCcKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19IT0pPX0tBTkpJX0ZPUk1TICAgICAgICAgICAgICAgICAgICA9IDB4NmY2YTZmNjgsIC8vICdob2pvJworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX0pJUzA0X0ZPUk1TICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzNDMwNzA2YSwgLy8gJ2pwMDQnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfSklTNzhfRk9STVMgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDM4Mzc3MDZhLCAvLyAnanA3OCcKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19KSVM4M19GT1JNUyAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MzMzODcwNmEsIC8vICdqcDgzJworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX0pJUzkwX0ZPUk1TICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgzMDM5NzA2YSwgLy8gJ2pwOTAnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfS0VSTklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDZlNzI2NTZiLCAvLyAna2VybicKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVEFOREFSRF9MSUdBVFVSRVMgICAgICAgICAgICAgICAgICA9IDB4NjE2NzY5NmMsIC8vICdsaWdhJworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX0xJTklOR19GSUdVUkVTICAgICAgICAgICAgICAgICAgICAgID0gMHg2ZDc1NmU2YywgLy8gJ2xudW0nCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfTE9DQUxJWkVEX0ZPUk1TICAgICAgICAgICAgICAgICAgICAgPSAweDZjNjM2ZjZjLCAvLyAnbG9jbCcKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19NQVJLX1BPU0lUSU9OSU5HICAgICAgICAgICAgICAgICAgICA9IDB4NmI3MjYxNmQsIC8vICdtYXJrJworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX01BVEhFTUFUSUNBTF9HUkVFSyAgICAgICAgICAgICAgICAgID0gMHg2YjcyNjc2ZCwgLy8gJ21ncmsnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfTUFSS19UT19NQVJLX1BPU0lUSU9OSU5HICAgICAgICAgICAgPSAweDZiNmQ2YjZkLCAvLyAnbWttaycKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19BTFRFUk5BVEVfQU5OT1RBVElPTl9GT1JNUyAgICAgICAgICA9IDB4NzQ2YzYxNmUsIC8vICduYWx0JworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX05MQ19LQU5KSV9GT1JNUyAgICAgICAgICAgICAgICAgICAgID0gMHg2YjYzNmM2ZSwgLy8gJ25sY2snCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfT0xEX1NUWUxFX0ZJR1VSRVMgICAgICAgICAgICAgICAgICAgPSAweDZkNzU2ZTZmLCAvLyAnb251bScKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19PUkRJTkFMUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NmU2NDcyNmYsIC8vICdvcmRuJworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX1BST1BPUlRJT05BTF9BTFRFUk5BVEVfV0lEVEggICAgICAgID0gMHg3NDZjNjE3MCwgLy8gJ3BhbHQnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfUEVUSVRFX0NBUElUQUxTICAgICAgICAgICAgICAgICAgICAgPSAweDcwNjE2MzcwLCAvLyAncGNhcCcKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19QUk9QT1JUSU9OQUxfRklHVVJFUyAgICAgICAgICAgICAgICA9IDB4NmQ3NTZlNzAsIC8vICdwbnVtJworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX1BST1BPUlRJT05BTF9XSURUSFMgICAgICAgICAgICAgICAgID0gMHg2NDY5Nzc3MCwgLy8gJ3B3aWQnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfUVVBUlRFUl9XSURUSFMgICAgICAgICAgICAgICAgICAgICAgPSAweDY0Njk3NzcxLCAvLyAncXdpZCcKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19SRVFVSVJFRF9MSUdBVFVSRVMgICAgICAgICAgICAgICAgICA9IDB4Njc2OTZjNzIsIC8vICdybGlnJworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX1JVQllfTk9UQVRJT05fRk9STVMgICAgICAgICAgICAgICAgID0gMHg3OTYyNzU3MiwgLy8gJ3J1YnknCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfU1RZTElTVElDX0FMVEVSTkFURVMgICAgICAgICAgICAgICAgPSAweDc0NmM2MTczLCAvLyAnc2FsdCcKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TQ0lFTlRJRklDX0lORkVSSU9SUyAgICAgICAgICAgICAgICA9IDB4NjY2ZTY5NzMsIC8vICdzaW5mJworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX1NNQUxMX0NBUElUQUxTICAgICAgICAgICAgICAgICAgICAgID0gMHg3MDYzNmQ3MywgLy8gJ3NtY3AnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfU0lNUExJRklFRF9GT1JNUyAgICAgICAgICAgICAgICAgICAgPSAweDZjNzA2ZDczLCAvLyAnc21wbCcKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzEgICAgICAgICAgICAgICAgICAgICA9IDB4MzEzMDczNzMsIC8vICdzczAxJworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX1NUWUxJU1RJQ19TRVRfMiAgICAgICAgICAgICAgICAgICAgID0gMHgzMjMwNzM3MywgLy8gJ3NzMDInCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfU1RZTElTVElDX1NFVF8zICAgICAgICAgICAgICAgICAgICAgPSAweDMzMzA3MzczLCAvLyAnc3MwMycKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzQgICAgICAgICAgICAgICAgICAgICA9IDB4MzQzMDczNzMsIC8vICdzczA0JworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX1NUWUxJU1RJQ19TRVRfNSAgICAgICAgICAgICAgICAgICAgID0gMHgzNTMwNzM3MywgLy8gJ3NzMDUnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfU1RZTElTVElDX1NFVF82ICAgICAgICAgICAgICAgICAgICAgPSAweDM2MzA3MzczLCAvLyAnc3MwNicKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzcgICAgICAgICAgICAgICAgICAgICA9IDB4MzczMDczNzMsIC8vICdzczA3JworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX1NUWUxJU1RJQ19TRVRfOCAgICAgICAgICAgICAgICAgICAgID0gMHgzODMwNzM3MywgLy8gJ3NzMDgnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfU1RZTElTVElDX1NFVF85ICAgICAgICAgICAgICAgICAgICAgPSAweDM5MzA3MzczLCAvLyAnc3MwOScKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzEwICAgICAgICAgICAgICAgICAgICA9IDB4MzAzMTczNzMsIC8vICdzczEwJworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX1NUWUxJU1RJQ19TRVRfMTEgICAgICAgICAgICAgICAgICAgID0gMHgzMTMxNzM3MywgLy8gJ3NzMTEnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfU1RZTElTVElDX1NFVF8xMiAgICAgICAgICAgICAgICAgICAgPSAweDMyMzE3MzczLCAvLyAnc3MxMicKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzEzICAgICAgICAgICAgICAgICAgICA9IDB4MzMzMTczNzMsIC8vICdzczEzJworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX1NUWUxJU1RJQ19TRVRfMTQgICAgICAgICAgICAgICAgICAgID0gMHgzNDMxNzM3MywgLy8gJ3NzMTQnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfU1RZTElTVElDX1NFVF8xNSAgICAgICAgICAgICAgICAgICAgPSAweDM1MzE3MzczLCAvLyAnc3MxNScKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzE2ICAgICAgICAgICAgICAgICAgICA9IDB4MzYzMTczNzMsIC8vICdzczE2JworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX1NUWUxJU1RJQ19TRVRfMTcgICAgICAgICAgICAgICAgICAgID0gMHgzNzMxNzM3MywgLy8gJ3NzMTcnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfU1RZTElTVElDX1NFVF8xOCAgICAgICAgICAgICAgICAgICAgPSAweDM4MzE3MzczLCAvLyAnc3MxOCcKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVFlMSVNUSUNfU0VUXzE5ICAgICAgICAgICAgICAgICAgICA9IDB4MzkzMTczNzMsIC8vICdzczE5JworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX1NUWUxJU1RJQ19TRVRfMjAgICAgICAgICAgICAgICAgICAgID0gMHgzMDMyNzM3MywgLy8gJ3NzMjAnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfU1VCU0NSSVBUICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDczNjI3NTczLCAvLyAnc3VicycKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19TVVBFUlNDUklQVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NzM3MDc1NzMsIC8vICdzdXBzJworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX1NXQVNIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2ODczNzc3MywgLy8gJ3N3c2gnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfVElUTElORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDZjNzQ2OTc0LCAvLyAndGl0bCcKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19UUkFESVRJT05BTF9OQU1FX0ZPUk1TICAgICAgICAgICAgICA9IDB4NmQ2MTZlNzQsIC8vICd0bmFtJworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX1RBQlVMQVJfRklHVVJFUyAgICAgICAgICAgICAgICAgICAgID0gMHg2ZDc1NmU3NCwgLy8gJ3RudW0nCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfVFJBRElUSU9OQUxfRk9STVMgICAgICAgICAgICAgICAgICAgPSAweDY0NjE3Mjc0LCAvLyAndHJhZCcKKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBR19USElSRF9XSURUSFMgICAgICAgICAgICAgICAgICAgICAgICA9IDB4NjQ2OTc3NzQsIC8vICd0d2lkJworICAgIERXUklURV9GT05UX0ZFQVRVUkVfVEFHX1VOSUNBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg2MzY5NmU3NSwgLy8gJ3VuaWMnCisgICAgRFdSSVRFX0ZPTlRfRkVBVFVSRV9UQUdfU0xBU0hFRF9aRVJPICAgICAgICAgICAgICAgICAgICAgICAgPSAweDZmNzI2NTdhLCAvLyAnemVybycKK307CisKKy8vLyA8c3VtbWFyeT4KKy8vLyBUaGUgRFdSSVRFX1RFWFRfUkFOR0Ugc3RydWN0dXJlIHNwZWNpZmllcyBhIHJhbmdlIG9mIHRleHQgcG9zaXRpb25zIHdoZXJlIGZvcm1hdCBpcyBhcHBsaWVkLgorLy8vIDwvc3VtbWFyeT4KK3N0cnVjdCBEV1JJVEVfVEVYVF9SQU5HRQoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVGhlIHN0YXJ0IHRleHQgcG9zaXRpb24gb2YgdGhlIHJhbmdlLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgVUlOVDMyIHN0YXJ0UG9zaXRpb247CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFRoZSBudW1iZXIgb2YgdGV4dCBwb3NpdGlvbnMgaW4gdGhlIHJhbmdlLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgVUlOVDMyIGxlbmd0aDsKK307CisKKy8vLyA8c3VtbWFyeT4KKy8vLyBUaGUgRFdSSVRFX0ZPTlRfRkVBVFVSRSBzdHJ1Y3R1cmUgc3BlY2lmaWVzIHByb3BlcnRpZXMgdXNlZCB0byBpZGVudGlmeSBhbmQgZXhlY3V0ZSB0eXBvZ3JhcGhpYyBmZWF0dXJlIGluIHRoZSBmb250LgorLy8vIDwvc3VtbWFyeT4KK3N0cnVjdCBEV1JJVEVfRk9OVF9GRUFUVVJFCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGUgZmVhdHVyZSBPcGVuVHlwZSBuYW1lIGlkZW50aWZpZXIuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRk9OVF9GRUFUVVJFX1RBRyBuYW1lVGFnOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBFeGVjdXRpb24gcGFyYW1ldGVyIG9mIHRoZSBmZWF0dXJlLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxyZW1hcmtzPgorICAgIC8vLyBUaGUgcGFyYW1ldGVyIHNob3VsZCBiZSBub24temVybyB0byBlbmFibGUgdGhlIGZlYXR1cmUuICBPbmNlIGVuYWJsZWQsIGEgZmVhdHVyZSBjYW4ndCBiZSBkaXNhYmxlZCBhZ2FpbiB3aXRoaW4KKyAgICAvLy8gdGhlIHNhbWUgcmFuZ2UuICBGZWF0dXJlcyByZXF1aXJpbmcgYSBzZWxlY3RvciB1c2UgdGhpcyB2YWx1ZSB0byBpbmRpY2F0ZSB0aGUgc2VsZWN0b3IgaW5kZXguIAorICAgIC8vLyA8L3JlbWFya3M+CisgICAgVUlOVDMyIHBhcmFtZXRlcjsKK307CisKKy8vLyA8c3VtbWFyeT4KKy8vLyBEZWZpbmVzIGEgc2V0IG9mIHR5cG9ncmFwaGljIGZlYXR1cmVzIHRvIGJlIGFwcGxpZWQgZHVyaW5nIHNoYXBpbmcuCisvLy8gTm90aWNlIHRoZSBjaGFyYWN0ZXIgcmFuZ2Ugd2hpY2ggdGhpcyBmZWF0dXJlIGxpc3Qgc3BhbnMgaXMgc3BlY2lmaWVkCisvLy8gYXMgYSBzZXBhcmF0ZSBwYXJhbWV0ZXIgdG8gR2V0R2x5cGhzLgorLy8vIDwvc3VtbWFyeT4KK3N0cnVjdCBEV1JJVEVfVFlQT0dSQVBISUNfRkVBVFVSRVMKK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEFycmF5IG9mIGZvbnQgZmVhdHVyZXMuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBfX2ZpZWxkX2Vjb3VudChmZWF0dXJlQ291bnQpIERXUklURV9GT05UX0ZFQVRVUkUqIGZlYXR1cmVzOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGUgbnVtYmVyIG9mIGZlYXR1cmVzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgVUlOVDMyIGZlYXR1cmVDb3VudDsKK307CisKKy8vLyA8c3VtbWFyeT4KKy8vLyBUaGUgRFdSSVRFX1RSSU1NSU5HIHN0cnVjdHVyZSBzcGVjaWZpZXMgdGhlIHRyaW1taW5nIG9wdGlvbiBmb3IgdGV4dCBvdmVyZmxvd2luZyB0aGUgbGF5b3V0IGJveC4KKy8vLyA8L3N1bW1hcnk+CitzdHJ1Y3QgRFdSSVRFX1RSSU1NSU5HCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUZXh0IGdyYW51bGFyaXR5IG9mIHdoaWNoIHRyaW1taW5nIGFwcGxpZXMuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfVFJJTU1JTkdfR1JBTlVMQVJJVFkgZ3JhbnVsYXJpdHk7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIENoYXJhY3RlciBjb2RlIHVzZWQgYXMgdGhlIGRlbGltaXRlciBzaWduYWxpbmcgdGhlIGJlZ2lubmluZyBvZiB0aGUgcG9ydGlvbiBvZiB0ZXh0IHRvIGJlIHByZXNlcnZlZCwKKyAgICAvLy8gbW9zdCB1c2VmdWwgZm9yIHBhdGggZWxsaXBzaXMsIHdoZXJlIHRoZSBkZWxpbWV0ZXIgd291bGQgYmUgYSBzbGFzaC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFVJTlQzMiBkZWxpbWl0ZXI7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEhvdyBtYW55IG9jY3VyZW5jZXMgb2YgdGhlIGRlbGltaXRlciB0byBzdGVwIGJhY2suCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBVSU5UMzIgZGVsaW1pdGVyQ291bnQ7Cit9OworCisKK2ludGVyZmFjZSBJRFdyaXRlVHlwb2dyYXBoeTsKK2ludGVyZmFjZSBJRFdyaXRlSW5saW5lT2JqZWN0OworCisvLy8gPHN1bW1hcnk+CisvLy8gVGhlIGZvcm1hdCBvZiB0ZXh0IHVzZWQgZm9yIHRleHQgbGF5b3V0IHB1cnBvc2UuCisvLy8gPC9zdW1tYXJ5PgorLy8vIDxyZW1hcmtzPgorLy8vIFRoaXMgb2JqZWN0IG1heSBub3QgYmUgdGhyZWFkLXNhZmUgYW5kIGl0IG1heSBjYXJyeSB0aGUgc3RhdGUgb2YgdGV4dCBmb3JtYXQgY2hhbmdlLgorLy8vIDwvcmVtYXJrcz4KK2ludGVyZmFjZSBEV1JJVEVfREVDTEFSRV9JTlRFUkZBQ0UoIjljOTA2ODE4LTMxZDctNGZkMy1hMTUxLTdjNWUyMjVkYjU1YSIpIElEV3JpdGVUZXh0Rm9ybWF0IDogcHVibGljIElVbmtub3duCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTZXQgYWxpZ25tZW50IG9wdGlvbiBvZiB0ZXh0IHJlbGF0aXZlIHRvIGxheW91dCBib3gncyBsZWFkaW5nIGFuZCB0cmFpbGluZyBlZGdlLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0QWxpZ25tZW50Ij5UZXh0IGFsaWdubWVudCBvcHRpb248L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKFNldFRleHRBbGlnbm1lbnQpKAorICAgICAgICBEV1JJVEVfVEVYVF9BTElHTk1FTlQgdGV4dEFsaWdubWVudAorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFNldCBhbGlnbm1lbnQgb3B0aW9uIG9mIHBhcmFncmFwaCByZWxhdGl2ZSB0byBsYXlvdXQgYm94J3MgdG9wIGFuZCBib3R0b20gZWRnZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0icGFyYWdyYXBoQWxpZ25tZW50Ij5QYXJhZ3JhcGggYWxpZ25tZW50IG9wdGlvbjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoU2V0UGFyYWdyYXBoQWxpZ25tZW50KSgKKyAgICAgICAgRFdSSVRFX1BBUkFHUkFQSF9BTElHTk1FTlQgcGFyYWdyYXBoQWxpZ25tZW50CisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gU2V0IHdvcmQgd3JhcHBpbmcgb3B0aW9uLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ3b3JkV3JhcHBpbmciPldvcmQgd3JhcHBpbmcgb3B0aW9uPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChTZXRXb3JkV3JhcHBpbmcpKAorICAgICAgICBEV1JJVEVfV09SRF9XUkFQUElORyB3b3JkV3JhcHBpbmcKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTZXQgcGFyYWdyYXBoIHJlYWRpbmcgZGlyZWN0aW9uLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJyZWFkaW5nRGlyZWN0aW9uIj5UZXh0IHJlYWRpbmcgZGlyZWN0aW9uPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChTZXRSZWFkaW5nRGlyZWN0aW9uKSgKKyAgICAgICAgRFdSSVRFX1JFQURJTkdfRElSRUNUSU9OIHJlYWRpbmdEaXJlY3Rpb24KKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTZXQgcGFyYWdyYXBoIGZsb3cgZGlyZWN0aW9uLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmbG93RGlyZWN0aW9uIj5QYXJhZ3JhcGggZmxvdyBkaXJlY3Rpb248L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKFNldEZsb3dEaXJlY3Rpb24pKAorICAgICAgICBEV1JJVEVfRkxPV19ESVJFQ1RJT04gZmxvd0RpcmVjdGlvbgorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFNldCBpbmNyZW1lbnRhbCB0YWIgc3RvcCBwb3NpdGlvbi4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaW5jcmVtZW50YWxUYWJTdG9wIj5UaGUgaW5jcmVtZW50YWwgdGFiIHN0b3AgdmFsdWU8L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKFNldEluY3JlbWVudGFsVGFiU3RvcCkoCisgICAgICAgIEZMT0FUIGluY3JlbWVudGFsVGFiU3RvcAorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFNldCB0cmltbWluZyBvcHRpb25zIGZvciBhbnkgdHJhaWxpbmcgdGV4dCBleGNlZWRpbmcgdGhlIGxheW91dCB3aWR0aAorICAgIC8vLyBvciBmb3IgYW55IGZhciB0ZXh0IGV4Y2VlZGluZyB0aGUgbGF5b3V0IGhlaWdodC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0idHJpbW1pbmdPcHRpb25zIj5UZXh0IHRyaW1taW5nIG9wdGlvbnMuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRyaW1taW5nU2lnbiI+QXBwbGljYXRpb24tZGVmaW5lZCBvbWlzc2lvbiBzaWduLiBUaGlzIHBhcmFtZXRlciBtYXkgYmUgTlVMTCBpZiBubyB0cmltbWluZyBzaWduIGlzIGRlc2lyZWQuPC9wYXJhbT4KKyAgICAvLy8gPHJlbWFya3M+CisgICAgLy8vIEFueSBpbmxpbmUgb2JqZWN0IGNhbiBiZSB1c2VkIGZvciB0aGUgdHJpbW1pbmcgc2lnbiwgYnV0IENyZWF0ZUVsbGlwc2lzVHJpbW1pbmdTaWduCisgICAgLy8vIHByb3ZpZGVzIGEgdHlwaWNhbCBlbGxpcHNpcyBzeW1ib2wuIFRyaW1taW5nIGlzIGFsc28gdXNlZnVsIHZlcnRpY2FsbHkgZm9yIGhpZGluZworICAgIC8vLyBwYXJ0aWFsIGxpbmVzLgorICAgIC8vLyA8L3JlbWFya3M+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoU2V0VHJpbW1pbmcpKAorICAgICAgICBfX2luIERXUklURV9UUklNTUlORyBjb25zdCogdHJpbW1pbmdPcHRpb25zLAorICAgICAgICBJRFdyaXRlSW5saW5lT2JqZWN0KiB0cmltbWluZ1NpZ24KKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTZXQgbGluZSBzcGFjaW5nLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJsaW5lU3BhY2luZ01ldGhvZCI+SG93IHRvIGRldGVybWluZSBsaW5lIGhlaWdodC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibGluZVNwYWNpbmciPlRoZSBsaW5lIGhlaWdodCwgb3IgcmF0aGVyIGRpc3RhbmNlIGJldHdlZW4gb25lIGJhc2VsaW5lIHRvIGFub3RoZXIuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImJhc2VsaW5lIj5EaXN0YW5jZSBmcm9tIHRvcCBvZiBsaW5lIHRvIGJhc2VsaW5lLiBBIHJlYXNvbmFibGUgcmF0aW8gdG8gbGluZVNwYWNpbmcgaXMgODAlLjwvcGFyYW0+CisgICAgLy8vIDxyZW1hcmtzPgorICAgIC8vLyBGb3IgdGhlIGRlZmF1bHQgbWV0aG9kLCBzcGFjaW5nIGRlcGVuZHMgc29sZWx5IG9uIHRoZSBjb250ZW50LgorICAgIC8vLyBGb3IgdW5pZm9ybSBzcGFjaW5nLCB0aGUgZ2l2ZW4gbGluZSBoZWlnaHQgd2lsbCBvdmVycmlkZSB0aGUgY29udGVudC4KKyAgICAvLy8gPC9yZW1hcmtzPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKFNldExpbmVTcGFjaW5nKSgKKyAgICAgICAgRFdSSVRFX0xJTkVfU1BBQ0lOR19NRVRIT0QgbGluZVNwYWNpbmdNZXRob2QsCisgICAgICAgIEZMT0FUIGxpbmVTcGFjaW5nLAorICAgICAgICBGTE9BVCBiYXNlbGluZQorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldCBhbGlnbm1lbnQgb3B0aW9uIG9mIHRleHQgcmVsYXRpdmUgdG8gbGF5b3V0IGJveCdzIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGVkZ2UuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBTVERNRVRIT0RfKERXUklURV9URVhUX0FMSUdOTUVOVCwgR2V0VGV4dEFsaWdubWVudCkoKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXQgYWxpZ25tZW50IG9wdGlvbiBvZiBwYXJhZ3JhcGggcmVsYXRpdmUgdG8gbGF5b3V0IGJveCdzIHRvcCBhbmQgYm90dG9tIGVkZ2UuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBTVERNRVRIT0RfKERXUklURV9QQVJBR1JBUEhfQUxJR05NRU5ULCBHZXRQYXJhZ3JhcGhBbGlnbm1lbnQpKCkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0IHdvcmQgd3JhcHBpbmcgb3B0aW9uLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgU1RETUVUSE9EXyhEV1JJVEVfV09SRF9XUkFQUElORywgR2V0V29yZFdyYXBwaW5nKSgpIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldCBwYXJhZ3JhcGggcmVhZGluZyBkaXJlY3Rpb24uCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBTVERNRVRIT0RfKERXUklURV9SRUFESU5HX0RJUkVDVElPTiwgR2V0UmVhZGluZ0RpcmVjdGlvbikoKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXQgcGFyYWdyYXBoIGZsb3cgZGlyZWN0aW9uLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgU1RETUVUSE9EXyhEV1JJVEVfRkxPV19ESVJFQ1RJT04sIEdldEZsb3dEaXJlY3Rpb24pKCkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0IGluY3JlbWVudGFsIHRhYiBzdG9wIHBvc2l0aW9uLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgU1RETUVUSE9EXyhGTE9BVCwgR2V0SW5jcmVtZW50YWxUYWJTdG9wKSgpIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldCB0cmltbWluZyBvcHRpb25zIGZvciB0ZXh0IG92ZXJmbG93aW5nIHRoZSBsYXlvdXQgd2lkdGguCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRyaW1taW5nT3B0aW9ucyI+VGV4dCB0cmltbWluZyBvcHRpb25zLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0cmltbWluZ1NpZ24iPlRyaW1taW5nIG9taXNzaW9uIHNpZ24uIFRoaXMgcGFyYW1ldGVyIG1heSBiZSBOVUxMLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0VHJpbW1pbmcpKAorICAgICAgICBfX291dCBEV1JJVEVfVFJJTU1JTkcqIHRyaW1taW5nT3B0aW9ucywKKyAgICAgICAgX19vdXQgSURXcml0ZUlubGluZU9iamVjdCoqIHRyaW1taW5nU2lnbgorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldCBsaW5lIHNwYWNpbmcuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImxpbmVTcGFjaW5nTWV0aG9kIj5Ib3cgbGluZSBoZWlnaHQgaXMgZGV0ZXJtaW5lZC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibGluZVNwYWNpbmciPlRoZSBsaW5lIGhlaWdodCwgb3IgcmF0aGVyIGRpc3RhbmNlIGJldHdlZW4gb25lIGJhc2VsaW5lIHRvIGFub3RoZXIuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImJhc2VsaW5lIj5EaXN0YW5jZSBmcm9tIHRvcCBvZiBsaW5lIHRvIGJhc2VsaW5lLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0TGluZVNwYWNpbmcpKAorICAgICAgICBfX291dCBEV1JJVEVfTElORV9TUEFDSU5HX01FVEhPRCogbGluZVNwYWNpbmdNZXRob2QsCisgICAgICAgIF9fb3V0IEZMT0FUKiBsaW5lU3BhY2luZywKKyAgICAgICAgX19vdXQgRkxPQVQqIGJhc2VsaW5lCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0IHRoZSBmb250IGNvbGxlY3Rpb24uCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRDb2xsZWN0aW9uIj5UaGUgY3VycmVudCBmb250IGNvbGxlY3Rpb24uPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChHZXRGb250Q29sbGVjdGlvbikoCisgICAgICAgIF9fb3V0IElEV3JpdGVGb250Q29sbGVjdGlvbioqIGZvbnRDb2xsZWN0aW9uCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0IHRoZSBsZW5ndGggb2YgdGhlIGZvbnQgZmFtaWx5IG5hbWUsIGluIGNoYXJhY3RlcnMsIG5vdCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIE5VTEwgY2hhcmFjdGVyLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgU1RETUVUSE9EXyhVSU5UMzIsIEdldEZvbnRGYW1pbHlOYW1lTGVuZ3RoKSgpIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldCBhIGNvcHkgb2YgdGhlIGZvbnQgZmFtaWx5IG5hbWUuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGYW1pbHlOYW1lIj5DaGFyYWN0ZXIgYXJyYXkgdGhhdCByZWNlaXZlcyB0aGUgY3VycmVudCBmb250IGZhbWlseSBuYW1lPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9Im5hbWVTaXplIj5TaXplIG9mIHRoZSBjaGFyYWN0ZXIgYXJyYXkgaW4gY2hhcmFjdGVyIGNvdW50IGluY2x1ZGluZyB0aGUgdGVybWluYXRlZCBOVUxMIGNoYXJhY3Rlci48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKEdldEZvbnRGYW1pbHlOYW1lKSgKKyAgICAgICAgX19vdXRfZWNvdW50X3oobmFtZVNpemUpIFdDSEFSKiBmb250RmFtaWx5TmFtZSwKKyAgICAgICAgVUlOVDMyIG5hbWVTaXplCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0IHRoZSBmb250IHdlaWdodC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFNURE1FVEhPRF8oRFdSSVRFX0ZPTlRfV0VJR0hULCBHZXRGb250V2VpZ2h0KSgpIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldCB0aGUgZm9udCBzdHlsZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFNURE1FVEhPRF8oRFdSSVRFX0ZPTlRfU1RZTEUsIEdldEZvbnRTdHlsZSkoKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXQgdGhlIGZvbnQgc3RyZXRjaC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFNURE1FVEhPRF8oRFdSSVRFX0ZPTlRfU1RSRVRDSCwgR2V0Rm9udFN0cmV0Y2gpKCkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0IHRoZSBmb250IGVtIGhlaWdodC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFNURE1FVEhPRF8oRkxPQVQsIEdldEZvbnRTaXplKSgpIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBsb2NhbGUgbmFtZSwgaW4gY2hhcmFjdGVycywgbm90IGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgTlVMTCBjaGFyYWN0ZXIuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBTVERNRVRIT0RfKFVJTlQzMiwgR2V0TG9jYWxlTmFtZUxlbmd0aCkoKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXQgYSBjb3B5IG9mIHRoZSBsb2NhbGUgbmFtZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibG9jYWxlTmFtZSI+Q2hhcmFjdGVyIGFycmF5IHRoYXQgcmVjZWl2ZXMgdGhlIGN1cnJlbnQgbG9jYWxlIG5hbWU8L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibmFtZVNpemUiPlNpemUgb2YgdGhlIGNoYXJhY3RlciBhcnJheSBpbiBjaGFyYWN0ZXIgY291bnQgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGVkIE5VTEwgY2hhcmFjdGVyLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0TG9jYWxlTmFtZSkoCisgICAgICAgIF9fb3V0X2Vjb3VudF96KG5hbWVTaXplKSBXQ0hBUiogbG9jYWxlTmFtZSwKKyAgICAgICAgVUlOVDMyIG5hbWVTaXplCisgICAgICAgICkgUFVSRTsKK307CisKKworLy8vIDxzdW1tYXJ5PgorLy8vIEZvbnQgdHlwb2dyYXBoeSBzZXR0aW5nLgorLy8vIDwvc3VtbWFyeT4KK2ludGVyZmFjZSBEV1JJVEVfREVDTEFSRV9JTlRFUkZBQ0UoIjU1ZjExMTJiLTFkYzItNGIzYy05NTQxLWY0Njg5NGVkODViNiIpIElEV3JpdGVUeXBvZ3JhcGh5IDogcHVibGljIElVbmtub3duCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBBZGQgZm9udCBmZWF0dXJlLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RmVhdHVyZSI+VGhlIGZvbnQgZmVhdHVyZSB0byBhZGQuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChBZGRGb250RmVhdHVyZSkoCisgICAgICAgIERXUklURV9GT05UX0ZFQVRVUkUgZm9udEZlYXR1cmUKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXQgdGhlIG51bWJlciBvZiBmb250IGZlYXR1cmVzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgU1RETUVUSE9EXyhVSU5UMzIsIEdldEZvbnRGZWF0dXJlQ291bnQpKCkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0IHRoZSBmb250IGZlYXR1cmUgYXQgdGhlIHNwZWNpZmllZCBpbmRleC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZlYXR1cmVJbmRleCI+VGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGZvbnQgZmVhdHVyZSB0byBnZXQuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGZWF0dXJlIj5UaGUgZm9udCBmZWF0dXJlLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0Rm9udEZlYXR1cmUpKAorICAgICAgICBVSU5UMzIgZm9udEZlYXR1cmVJbmRleCwKKyAgICAgICAgX19vdXQgRFdSSVRFX0ZPTlRfRkVBVFVSRSogZm9udEZlYXR1cmUKKyAgICAgICAgKSBQVVJFOworfTsKKworZW51bSBEV1JJVEVfU0NSSVBUX1NIQVBFUworeworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gTm8gYWRkaXRpb25hbCBzaGFwaW5nIHJlcXVpcmVtZW50LiBUZXh0IGlzIHNoYXBlZCB3aXRoIHRoZSB3cml0aW5nIHN5c3RlbSBkZWZhdWx0IGJlaGF2aW9yLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX1NDUklQVF9TSEFQRVNfREVGQVVMVCA9IDAsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFRleHQgc2hvdWxkIGxlYXZlIG5vIHZpc3VhbCBvbiBkaXNwbGF5IGkuZS4gY29udHJvbCBvciBmb3JtYXQgY29udHJvbCBjaGFyYWN0ZXJzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX1NDUklQVF9TSEFQRVNfTk9fVklTVUFMID0gMQorfTsKKworI2lmZGVmIERFRklORV9FTlVNX0ZMQUdfT1BFUkFUT1JTCitERUZJTkVfRU5VTV9GTEFHX09QRVJBVE9SUyhEV1JJVEVfU0NSSVBUX1NIQVBFUyk7CisjZW5kaWYKKworLy8vIDxzdW1tYXJ5PgorLy8vIEFzc29jaWF0aW9uIG9mIHRleHQgYW5kIGl0cyB3cml0aW5nIHN5c3RlbSBzY3JpcHQgYXMgd2VsbCBhcyBzb21lIGRpc3BsYXkgYXR0cmlidXRlcy4KKy8vLyA8L3N1bW1hcnk+CitzdHJ1Y3QgRFdSSVRFX1NDUklQVF9BTkFMWVNJUworeworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gWmVyby1iYXNlZCBpbmRleCByZXByZXNlbnRhdGlvbiBvZiB3cml0aW5nIHN5c3RlbSBzY3JpcHQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBVSU5UMTYgc2NyaXB0OworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBBZGRpdGlvbmFsIHNoYXBpbmcgcmVxdWlyZW1lbnQgb2YgdGV4dC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9TQ1JJUFRfU0hBUEVTIHNoYXBlczsKK307CisKKy8vLyA8c3VtbWFyeT4KKy8vLyBDb25kaXRpb24gYXQgdGhlIGVkZ2VzIG9mIGlubGluZSBvYmplY3Qgb3IgdGV4dCB1c2VkIHRvIGRldGVybWluZQorLy8vIGxpbmUtYnJlYWtpbmcgYmVoYXZpb3IuCisvLy8gPC9zdW1tYXJ5PgorZW51bSBEV1JJVEVfQlJFQUtfQ09ORElUSU9OCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBXaGV0aGVyIGEgYnJlYWsgaXMgYWxsb3dlZCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBjb25kaXRpb24gb2YgdGhlCisgICAgLy8vIG5laWdoYm9yaW5nIHRleHQgc3BhbiBvciBpbmxpbmUgb2JqZWN0LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0JSRUFLX0NPTkRJVElPTl9ORVVUUkFMLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBBIGJyZWFrIGlzIGFsbG93ZWQsIHVubGVzcyBvdmVycnVsZWQgYnkgdGhlIGNvbmRpdGlvbiBvZiB0aGUKKyAgICAvLy8gbmVpZ2hib3JpbmcgdGV4dCBzcGFuIG9yIGlubGluZSBvYmplY3QsIGVpdGhlciBwcm9oaWJpdGVkIGJ5IGEKKyAgICAvLy8gTWF5IE5vdCBvciBmb3JjZWQgYnkgYSBNdXN0LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0JSRUFLX0NPTkRJVElPTl9DQU5fQlJFQUssCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFRoZXJlIHNob3VsZCBiZSBubyBicmVhaywgdW5sZXNzIG92ZXJydWxlZCBieSBhIE11c3QgY29uZGl0aW9uIGZyb20KKyAgICAvLy8gdGhlIG5laWdoYm9yaW5nIHRleHQgc3BhbiBvciBpbmxpbmUgb2JqZWN0LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX0JSRUFLX0NPTkRJVElPTl9NQVlfTk9UX0JSRUFLLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGUgYnJlYWsgbXVzdCBoYXBwZW4sIHJlZ2FyZGxlc3Mgb2YgdGhlIGNvbmRpdGlvbiBvZiB0aGUgYWRqYWNlbnQKKyAgICAvLy8gdGV4dCBzcGFuIG9yIGlubGluZSBvYmplY3QuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfQlJFQUtfQ09ORElUSU9OX01VU1RfQlJFQUsKK307CisKKy8vLyA8c3VtbWFyeT4KKy8vLyBMaW5lIGJyZWFrcG9pbnQgY2hhcmFjdGVyaXN0aWNzIG9mIGEgY2hhcmFjdGVyLgorLy8vIDwvc3VtbWFyeT4KK3N0cnVjdCBEV1JJVEVfTElORV9CUkVBS1BPSU5UCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBCcmVha2luZyBjb25kaXRpb24gYmVmb3JlIHRoZSBjaGFyYWN0ZXIuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBVSU5UOCBicmVha0NvbmRpdGlvbkJlZm9yZSAgOiAyOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBCcmVha2luZyBjb25kaXRpb24gYWZ0ZXIgdGhlIGNoYXJhY3Rlci4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFVJTlQ4IGJyZWFrQ29uZGl0aW9uQWZ0ZXIgICA6IDI7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFRoZSBjaGFyYWN0ZXIgaXMgc29tZSBmb3JtIG9mIHdoaXRlc3BhY2UsIHdoaWNoIG1heSBiZSBtZWFuaW5nZnVsCisgICAgLy8vIGZvciBqdXN0aWZpY2F0aW9uLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgVUlOVDggaXNXaGl0ZXNwYWNlICAgICAgICAgIDogMTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVGhlIGNoYXJhY3RlciBpcyBhIHNvZnQgaHlwaGVuLCBvZnRlbiB1c2VkIHRvIGluZGljYXRlIGh5cGhlbmF0aW9uCisgICAgLy8vIHBvaW50cyBpbnNpZGUgd29yZHMuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBVSU5UOCBpc1NvZnRIeXBoZW4gICAgICAgICAgOiAxOworCisgICAgVUlOVDggcGFkZGluZyAgICAgICAgICAgICAgIDogMjsKK307CisKKy8vLyA8c3VtbWFyeT4KKy8vLyBIb3cgdG8gYXBwbHkgbnVtYmVyIHN1YnN0aXR1dGlvbiBvbiBkaWdpdHMgYW5kIHJlbGF0ZWQgcHVuY3R1YXRpb24uCisvLy8gPC9zdW1tYXJ5PgorZW51bSBEV1JJVEVfTlVNQkVSX1NVQlNUSVRVVElPTl9NRVRIT0QKK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFNwZWNpZmllcyB0aGF0IHRoZSBzdWJzdGl0dXRpb24gbWV0aG9kIHNob3VsZCBiZSBkZXRlcm1pbmVkIGJhc2VkCisgICAgLy8vIG9uIExPQ0FMRV9JRElHSVRTVUJTVElUVVRJT04gdmFsdWUgb2YgdGhlIHNwZWNpZmllZCB0ZXh0IGN1bHR1cmUuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfTlVNQkVSX1NVQlNUSVRVVElPTl9NRVRIT0RfRlJPTV9DVUxUVVJFLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBJZiB0aGUgY3VsdHVyZSBpcyBBcmFiaWMgb3IgRmFyc2ksIHNwZWNpZmllcyB0aGF0IHRoZSBudW1iZXIgc2hhcGUKKyAgICAvLy8gZGVwZW5kIG9uIHRoZSBjb250ZXh0LiBFaXRoZXIgdHJhZGl0aW9uYWwgb3Igbm9taW5hbCBudW1iZXIgc2hhcGUKKyAgICAvLy8gYXJlIHVzZWQgZGVwZW5kaW5nIG9uIHRoZSBuZWFyZXN0IHByZWNlZGluZyBzdHJvbmcgY2hhcmFjdGVyIG9yIChpZgorICAgIC8vLyB0aGVyZSBpcyBub25lKSB0aGUgcmVhZGluZyBkaXJlY3Rpb24gb2YgdGhlIHBhcmFncmFwaC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9OVU1CRVJfU1VCU1RJVFVUSU9OX01FVEhPRF9DT05URVhUVUFMLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTcGVjaWZpZXMgdGhhdCBjb2RlIHBvaW50cyAweDMwLTB4MzkgYXJlIGFsd2F5cyByZW5kZXJlZCBhcyBub21pbmFsIG51bWVyYWwgCisgICAgLy8vIHNoYXBlcyAob25lcyBvZiB0aGUgRXVyb3BlYW4gbnVtYmVyKSwgaS5lLiwgbm8gc3Vic3RpdHV0aW9uIGlzIHBlcmZvcm1lZC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9OVU1CRVJfU1VCU1RJVFVUSU9OX01FVEhPRF9OT05FLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTcGVjaWZpZXMgdGhhdCBudW1iZXIgYXJlIHJlbmRlcmVkIHVzaW5nIHRoZSBuYXRpb25hbCBudW1iZXIgc2hhcGUgCisgICAgLy8vIGFzIHNwZWNpZmllZCBieSB0aGUgTE9DQUxFX1NOQVRJVkVESUdJVFMgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCB0ZXh0IGN1bHR1cmUuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfTlVNQkVSX1NVQlNUSVRVVElPTl9NRVRIT0RfTkFUSU9OQUwsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFNwZWNpZmllcyB0aGF0IG51bWJlciBhcmUgcmVuZGVyZWQgdXNpbmcgdGhlIHRyYWRpdGlvbmFsIHNoYXBlCisgICAgLy8vIGZvciB0aGUgc3BlY2lmaWVkIGN1bHR1cmUuIEZvciBtb3N0IGN1bHR1cmVzLCB0aGlzIGlzIHRoZSBzYW1lIGFzCisgICAgLy8vIE5hdGl2ZU5hdGlvbmFsLiBIb3dldmVyLCBOYXRpdmVOYXRpb25hbCByZXN1bHRzIGluIExhdGluIG51bWJlcgorICAgIC8vLyBmb3Igc29tZSBBcmFiaWMgY3VsdHVyZXMsIHdoZXJlYXMgdGhpcyB2YWx1ZSByZXN1bHRzIGluIEFyYWJpYworICAgIC8vLyBudW1iZXIgZm9yIGFsbCBBcmFiaWMgY3VsdHVyZXMuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfTlVNQkVSX1NVQlNUSVRVVElPTl9NRVRIT0RfVFJBRElUSU9OQUwKK307CisKKy8vLyA8c3VtbWFyeT4KKy8vLyBIb2xkcyB0aGUgYXBwcm9wcmlhdGUgZGlnaXRzIGFuZCBudW1lcmljIHB1bmN0dWF0aW9uIGZvciBhIGdpdmVuIGxvY2FsZS4KKy8vLyA8L3N1bW1hcnk+CitpbnRlcmZhY2UgREVDTFNQRUNfVVVJRCgiMTQ4ODVDQzktQkFCMC00ZjkwLUI2RUQtNUMzNjZBMkNEMDNEIikgREVDTFNQRUNfTk9WVEFCTEUgSURXcml0ZU51bWJlclN1YnN0aXR1dGlvbiA6IHB1YmxpYyBJVW5rbm93bgoreworfTsKKworLy8vIDxzdW1tYXJ5PgorLy8vIFNoYXBpbmcgb3V0cHV0IHByb3BlcnRpZXMgcGVyIGlucHV0IGNoYXJhY3Rlci4KKy8vLyA8L3N1bW1hcnk+CitzdHJ1Y3QgRFdSSVRFX1NIQVBJTkdfVEVYVF9QUk9QRVJUSUVTCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGlzIGNoYXJhY3RlciBjYW4gYmUgc2hhcGVkIGluZGVwZW5kZW50bHkgZnJvbSB0aGUgb3RoZXJzCisgICAgLy8vICh1c3VhbGx5IHNldCBmb3IgdGhlIHNwYWNlIGNoYXJhY3RlcikuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBVSU5UMTYgIGlzU2hhcGVkQWxvbmUgICAgICAgOiAxOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBSZXNlcnZlZCBmb3IgdXNlIGJ5IHNoYXBpbmcgZW5naW5lLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgVUlOVDE2ICByZXNlcnZlZCAgICAgICAgICAgIDogMTU7Cit9OworCisvLy8gPHN1bW1hcnk+CisvLy8gU2hhcGluZyBvdXRwdXQgcHJvcGVydGllcyBwZXIgb3V0cHV0IGdseXBoLgorLy8vIDwvc3VtbWFyeT4KK3N0cnVjdCBEV1JJVEVfU0hBUElOR19HTFlQSF9QUk9QRVJUSUVTCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBKdXN0aWZpY2F0aW9uIGNsYXNzLCB3aGV0aGVyIHRvIHVzZSBzcGFjaW5nLCBrYXNoaWRhcywgb3IKKyAgICAvLy8gYW5vdGhlciBtZXRob2QuIFRoaXMgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorICAgIC8vLyB3aXRoIFVuaXNjcmliZSdzIFNDUklQVF9KVVNUSUZZIGVudW0uCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBVSU5UMTYgIGp1c3RpZmljYXRpb24gICAgICAgOiA0OworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBJbmRpY2F0ZXMgZ2x5cGggaXMgdGhlIGZpcnN0IG9mIGEgY2x1c3Rlci4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFVJTlQxNiAgaXNDbHVzdGVyU3RhcnQgICAgICA6IDE7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdseXBoIGlzIGEgZGlhY3JpdGljLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgVUlOVDE2ICBpc0RpYWNyaXRpYyAgICAgICAgIDogMTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2x5cGggaGFzIG5vIHdpZHRoLCBibGFuaywgWldKLCBaV05KIGV0Yy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFVJTlQxNiAgaXNaZXJvV2lkdGhTcGFjZSAgICA6IDE7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFJlc2VydmVkIGZvciB1c2UgYnkgc2hhcGluZyBlbmdpbmUuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBVSU5UMTYgIHJlc2VydmVkICAgICAgICAgICAgOiA5OworfTsKKworLy8vIDxzdW1tYXJ5PgorLy8vIFRoZSBpbnRlcmZhY2UgaW1wbGVtZW50ZWQgYnkgdGhlIHRleHQgYW5hbHl6ZXIncyBjbGllbnQgdG8gcHJvdmlkZSB0ZXh0IHRvCisvLy8gdGhlIGFuYWx5emVyLiBJdCBhbGxvd3MgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiB0aGUgbG9naWNhbCB2aWV3IG9mIHRleHQgYXMKKy8vLyBhIGNvbnRpbnVvdXMgc3RyZWFtIG9mIGNoYXJhY3RlcnMgaWRlbnRpZmlhYmxlIGJ5IHVuaXF1ZSB0ZXh0IHBvc2l0aW9ucywKKy8vLyBhbmQgdGhlIGFjdHVhbCBtZW1vcnkgbGF5b3V0IG9mIHBvdGVudGlhbGx5IGRpc2NyZXRlIGJsb2NrcyBvZiB0ZXh0IGluIHRoZQorLy8vIGNsaWVudCdzIGJhY2tpbmcgc3RvcmUuCisvLy8KKy8vLyBJZiBhbnkgb2YgdGhlc2UgY2FsbGJhY2tzIHJldHVybnMgYW4gZXJyb3IsIHRoZSBhbmFseXNpcyBmdW5jdGlvbnMgd2lsbAorLy8vIHN0b3AgcHJlbWF0dXJlbHkgYW5kIHJldHVybiBhIGNhbGxiYWNrIGVycm9yLiBSYXRoZXIgdGhhbiByZXR1cm4gRV9OT1RJTVBMLAorLy8vIGFuIGFwcGxpY2F0aW9uIHNob3VsZCBzdHViIHRoZSBtZXRob2QgYW5kIHJldHVybiBhIGNvbnN0YW50L251bGwgYW5kIFNfT0suCisvLy8gPC9zdW1tYXJ5PgoraW50ZXJmYWNlIERFQ0xTUEVDX1VVSUQoIjY4OGUxYTU4LTUwOTQtNDdjOC1hZGM4LWZiY2VhNjBhZTkyYiIpIERFQ0xTUEVDX05PVlRBQkxFIElEV3JpdGVUZXh0QW5hbHlzaXNTb3VyY2UgOiBwdWJsaWMgSVVua25vd24KK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldCBhIGJsb2NrIG9mIHRleHQgc3RhcnRpbmcgYXQgdGhlIHNwZWNpZmllZCB0ZXh0IHBvc2l0aW9uLgorICAgIC8vLyBSZXR1cm5pbmcgTlVMTCBpbmRpY2F0ZXMgdGhlIGVuZCBvZiB0ZXh0IC0gdGhlIHBvc2l0aW9uIGlzIGFmdGVyCisgICAgLy8vIHRoZSBsYXN0IGNoYXJhY3Rlci4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaXRlcmF0aXZlbHkgZm9yCisgICAgLy8vIGVhY2ggY29uc2VjdXRpdmUgYmxvY2ssIHR5aW5nIHRvZ2V0aGVyIHNldmVyYWwgZnJhZ21lbnRlZCBibG9ja3MKKyAgICAvLy8gaW4gdGhlIGJhY2tpbmcgc3RvcmUgaW50byBhIHZpcnR1YWwgY29udGlndW91cyBzdHJpbmcuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRQb3NpdGlvbiI+Rmlyc3QgcG9zaXRpb24gb2YgdGhlIHBpZWNlIHRvIG9idGFpbi4gQWxsCisgICAgLy8vICAgICBwb3NpdGlvbnMgYXJlIGluIFVURjE2IGNvZGUtdW5pdHMsIG5vdCB3aG9sZSBjaGFyYWN0ZXJzLCB3aGljaAorICAgIC8vLyAgICAgbWF0dGVycyB3aGVuIHN1cHBsZW1lbnRhcnkgY2hhcmFjdGVycyBhcmUgdXNlZC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFN0cmluZyI+QWRkcmVzcyB0aGF0IHJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgdGV4dCBibG9jaworICAgIC8vLyAgICAgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dExlbmd0aCI+TnVtYmVyIG9mIFVURjE2IHVuaXRzIG9mIHRoZSByZXRyaWV2ZWQgY2h1bmsuCisgICAgLy8vICAgICBUaGUgcmV0dXJuZWQgbGVuZ3RoIGlzIG5vdCB0aGUgbGVuZ3RoIG9mIHRoZSBibG9jaywgYnV0IHRoZSBsZW5ndGgKKyAgICAvLy8gICAgIHJlbWFpbmluZyBpbiB0aGUgYmxvY2ssIGZyb20gdGhlIGdpdmVuIHBvc2l0aW9uIHVudGlsIGl0cyBlbmQuCisgICAgLy8vICAgICBTbyBxdWVyeWluZyBmb3IgYSBwb3NpdGlvbiB0aGF0IGlzIDc1IHBvc2l0aW9ucyBpbnRvIGEgMTAwCisgICAgLy8vICAgICBwb3N0aXRpb24gYmxvY2sgd291bGQgcmV0dXJuIDI1LjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPlBvaW50ZXIgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhdCB0aGUgZ2l2ZW4gdGV4dCBwb3NpdGlvbi4KKyAgICAvLy8gTlVMTCBpbmRpY2F0ZXMgbm8gY2h1bmsgYXZhaWxhYmxlIGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24sIGVpdGhlcgorICAgIC8vLyBiZWNhdXNlIHRleHRQb3NpdGlvbiA+PSB0aGUgZW50aXJlIHRleHQgY29udGVudCBsZW5ndGggb3IgYmVjYXVzZSB0aGUKKyAgICAvLy8gcXVlcmllZCBwb3NpdGlvbiBpcyBub3QgbWFwcGVkIGludG8gdGhlIGFwcCdzIGJhY2tpbmcgc3RvcmUuPC9yZXR1cm5zPgorICAgIC8vLyA8cmVtYXJrcz4KKyAgICAvLy8gQWx0aG91Z2ggYXBwcyBjYW4gaW1wbGVtZW50IHNwYXJzZSB0ZXh0dWFsIGNvbnRlbnQgdGhhdCBvbmx5IG1hcHMgcGFydCBvZgorICAgIC8vLyB0aGUgYmFja2luZyBzdG9yZSwgdGhlIGFwcCBtdXN0IG1hcCBhbnkgdGV4dCB0aGF0IGlzIGluIHRoZSByYW5nZSBwYXNzZWQKKyAgICAvLy8gdG8gYW55IGFuYWx5c2lzIGZ1bmN0aW9ucy4KKyAgICAvLy8gPC9yZW1hcmtzPgorICAgIFNURE1FVEhPRChHZXRUZXh0QXRQb3NpdGlvbikoCisgICAgICAgIFVJTlQzMiB0ZXh0UG9zaXRpb24sCisgICAgICAgIF9fb3V0IFdDSEFSIGNvbnN0KiogdGV4dFN0cmluZywKKyAgICAgICAgX19vdXQgVUlOVDMyKiB0ZXh0TGVuZ3RoCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0IGEgYmxvY2sgb2YgdGV4dCBpbW1lZGlhdGVseSBwcmVjZWRpbmcgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFBvc2l0aW9uIj5Qb3NpdGlvbiBpbW1lZGlhdGVseSBhZnRlciB0aGUgbGFzdCBwb3NpdGlvbiBvZiB0aGUgY2h1bmsgdG8gb2J0YWluLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0U3RyaW5nIj5BZGRyZXNzIHRoYXQgcmVjZWl2ZXMgYSBwb2ludGVyIHRvIHRoZSB0ZXh0IGJsb2NrCisgICAgLy8vICAgICBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0TGVuZ3RoIj5OdW1iZXIgb2YgVVRGMTYgdW5pdHMgb2YgdGhlIHJldHJpZXZlZCBibG9jay4KKyAgICAvLy8gICAgIFRoZSBsZW5ndGggcmV0dXJuZWQgaXMgZnJvbSB0aGUgZ2l2ZW4gcG9zaXRpb24gdG8gdGhlIGZyb250IG9mCisgICAgLy8vICAgICB0aGUgYmxvY2suPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+UG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGF0ICh0ZXh0UG9zaXRpb24gLSB0ZXh0TGVuZ3RoKS4KKyAgICAvLy8gTlVMTCBpbmRpY2F0ZXMgbm8gY2h1bmsgYXZhaWxhYmxlIGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24sIGVpdGhlcgorICAgIC8vLyBiZWNhdXNlIHRleHRQb3NpdGlvbiA9PSAwLHRoZSB0ZXh0UG9zaXRpb24gPiB0aGUgZW50aXJlIHRleHQgY29udGVudAorICAgIC8vLyBsZW5ndGgsIG9yIHRoZSBxdWVyaWVkIHBvc2l0aW9uIGlzIG5vdCBtYXBwZWQgaW50byB0aGUgYXBwJ3MgYmFja2luZworICAgIC8vLyBzdG9yZS48L3JldHVybnM+CisgICAgLy8vIDxyZW1hcmtzPgorICAgIC8vLyBBbHRob3VnaCBhcHBzIGNhbiBpbXBsZW1lbnQgc3BhcnNlIHRleHR1YWwgY29udGVudCB0aGF0IG9ubHkgbWFwcyBwYXJ0IG9mCisgICAgLy8vIHRoZSBiYWNraW5nIHN0b3JlLCB0aGUgYXBwIG11c3QgbWFwIGFueSB0ZXh0IHRoYXQgaXMgaW4gdGhlIHJhbmdlIHBhc3NlZAorICAgIC8vLyB0byBhbnkgYW5hbHlzaXMgZnVuY3Rpb25zLgorICAgIC8vLyA8L3JlbWFya3M+CisgICAgU1RETUVUSE9EKEdldFRleHRCZWZvcmVQb3NpdGlvbikoCisgICAgICAgIFVJTlQzMiB0ZXh0UG9zaXRpb24sCisgICAgICAgIF9fb3V0IFdDSEFSIGNvbnN0KiogdGV4dFN0cmluZywKKyAgICAgICAgX19vdXQgVUlOVDMyKiB0ZXh0TGVuZ3RoCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0IHBhcmFncmFwaCByZWFkaW5nIGRpcmVjdGlvbi4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFNURE1FVEhPRF8oRFdSSVRFX1JFQURJTkdfRElSRUNUSU9OLCBHZXRQYXJhZ3JhcGhSZWFkaW5nRGlyZWN0aW9uKSgpIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldCBsb2NhbGUgbmFtZSBvbiB0aGUgcmFuZ2UgYWZmZWN0ZWQgYnkgaXQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRQb3NpdGlvbiI+UG9zaXRpb24gdG8gZ2V0IHRoZSBsb2NhbGUgbmFtZSBvZi48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dExlbmd0aCI+UmVjZWl2ZXMgdGhlIGxlbmd0aCBmcm9tIHRoZSBnaXZlbiBwb3NpdGlvbiB1cCB0byB0aGUKKyAgICAvLy8gICAgIG5leHQgZGlmZmVyaW5nIGxvY2FsZS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibG9jYWxlTmFtZSI+QWRkcmVzcyB0aGF0IHJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgbG9jYWxlCisgICAgLy8vICAgICBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLjwvcGFyYW0+CisgICAgLy8vIDxyZW1hcmtzPgorICAgIC8vLyBUaGUgbG9jYWxlTmFtZSBwb2ludGVyIG11c3QgcmVtYWluIHZhbGlkIHVudGlsIHRoZSBuZXh0IGNhbGwgb3IgdW50aWwKKyAgICAvLy8gdGhlIGFuYWx5c2lzIHJldHVybnMuCisgICAgLy8vIDwvcmVtYXJrcz4KKyAgICBTVERNRVRIT0QoR2V0TG9jYWxlTmFtZSkoCisgICAgICAgIFVJTlQzMiB0ZXh0UG9zaXRpb24sCisgICAgICAgIF9fb3V0IFVJTlQzMiogdGV4dExlbmd0aCwKKyAgICAgICAgX19vdXRfeiBXQ0hBUiBjb25zdCoqIGxvY2FsZU5hbWUKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXQgbnVtYmVyIHN1YnN0aXR1dGlvbiBvbiB0aGUgcmFuZ2UgYWZmZWN0ZWQgYnkgaXQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRQb3NpdGlvbiI+UG9zaXRpb24gdG8gZ2V0IHRoZSBudW1iZXIgc3Vic3RpdHV0aW9uIG9mLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0TGVuZ3RoIj5SZWNlaXZlcyB0aGUgbGVuZ3RoIGZyb20gdGhlIGdpdmVuIHBvc2l0aW9uIHVwIHRvIHRoZQorICAgIC8vLyAgICAgbmV4dCBkaWZmZXJpbmcgbnVtYmVyIHN1YnN0aXR1dGlvbi48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibnVtYmVyU3Vic3RpdHV0aW9uIj5BZGRyZXNzIHRoYXQgcmVjZWl2ZXMgYSBwb2ludGVyIHRvIHRoZSBudW1iZXIgc3Vic3RpdHV0aW9uCisgICAgLy8vICAgICBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLjwvcGFyYW0+CisgICAgLy8vIDxyZW1hcmtzPgorICAgIC8vLyBBbnkgaW1wbGVtZW50YXRpb24gc2hvdWxkIHJldHVybiB0aGUgbnVtYmVyIHN1YnN0aXR1dGlvbiB3aXRoIGFuCisgICAgLy8vIGluY3JlbWVudGVkIHJlZiBjb3VudCwgYW5kIHRoZSBhbmFseXNpcyB3aWxsIHJlbGVhc2Ugd2hlbiBmaW5pc2hlZAorICAgIC8vLyB3aXRoIGl0IChlaXRoZXIgYmVmb3JlIHRoZSBuZXh0IGNhbGwgb3IgYmVmb3JlIGl0IHJldHVybnMpLiBIb3dldmVyLAorICAgIC8vLyB0aGUgc2luayBjYWxsYmFjayBtYXkgaG9sZCBvbnRvIGl0IGFmdGVyIHRoYXQuCisgICAgLy8vIDwvcmVtYXJrcz4KKyAgICBTVERNRVRIT0QoR2V0TnVtYmVyU3Vic3RpdHV0aW9uKSgKKyAgICAgICAgVUlOVDMyIHRleHRQb3NpdGlvbiwKKyAgICAgICAgX19vdXQgVUlOVDMyKiB0ZXh0TGVuZ3RoLAorICAgICAgICBfX291dCBJRFdyaXRlTnVtYmVyU3Vic3RpdHV0aW9uKiogbnVtYmVyU3Vic3RpdHV0aW9uCisgICAgICAgICkgUFVSRTsKK307CisKKy8vLyA8c3VtbWFyeT4KKy8vLyBUaGUgaW50ZXJmYWNlIGltcGxlbWVudGVkIGJ5IHRoZSB0ZXh0IGFuYWx5emVyJ3MgY2xpZW50IHRvIHJlY2VpdmUgdGhlCisvLy8gb3V0cHV0IG9mIGEgZ2l2ZW4gdGV4dCBhbmFseXNpcy4gVGhlIFRleHQgYW5hbHl6ZXIgZGlzcmVnYXJkcyBhbnkgY3VycmVudAorLy8vIHN0YXRlIG9mIHRoZSBhbmFseXNpcyBzaW5rLCB0aGVyZWZvcmUgYSBTZXQgbWV0aG9kIGNhbGwgb24gYSByYW5nZQorLy8vIG92ZXJ3cml0ZXMgdGhlIHByZXZpb3VzbHkgc2V0IGFuYWx5c2lzIHJlc3VsdCBvZiB0aGUgc2FtZSByYW5nZS4gCisvLy8gPC9zdW1tYXJ5PgoraW50ZXJmYWNlIERFQ0xTUEVDX1VVSUQoIjU4MTBjZDQ0LTBjYTAtNDcwMS1iM2ZhLWJlYzUxODJhZTRmNiIpIERFQ0xTUEVDX05PVlRBQkxFIElEV3JpdGVUZXh0QW5hbHlzaXNTaW5rIDogcHVibGljIElVbmtub3duCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBSZXBvcnQgc2NyaXB0IGFuYWx5c2lzIGZvciB0aGUgdGV4dCByYW5nZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFBvc2l0aW9uIj5TdGFydGluZyBwb3NpdGlvbiB0byByZXBvcnQgZnJvbS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dExlbmd0aCI+TnVtYmVyIG9mIFVURjE2IHVuaXRzIG9mIHRoZSByZXBvcnRlZCByYW5nZS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ic2NyaXB0QW5hbHlzaXMiPlNjcmlwdCBhbmFseXNpcyBvZiBjaGFyYWN0ZXJzIGluIHJhbmdlLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBBIHN1Y2Nlc3NmdWwgY29kZSBvciBlcnJvciBjb2RlIHRvIGFib3J0IGFuYWx5c2lzLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKFNldFNjcmlwdEFuYWx5c2lzKSgKKyAgICAgICAgVUlOVDMyIHRleHRQb3NpdGlvbiwKKyAgICAgICAgVUlOVDMyIHRleHRMZW5ndGgsCisgICAgICAgIF9faW4gRFdSSVRFX1NDUklQVF9BTkFMWVNJUyBjb25zdCogc2NyaXB0QW5hbHlzaXMKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBSZXBwb3J0IGxpbmUtYnJlYWsgb3Bwb3J0dW5pdGllcyBmb3IgZWFjaCBjaGFyYWN0ZXIsIHN0YXJ0aW5nIGZyb20KKyAgICAvLy8gdGhlIHNwZWNpZmllZCBwb3NpdGlvbi4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFBvc2l0aW9uIj5TdGFydGluZyBwb3NpdGlvbiB0byByZXBvcnQgZnJvbS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dExlbmd0aCI+TnVtYmVyIG9mIFVURjE2IHVuaXRzIG9mIHRoZSByZXBvcnRlZCByYW5nZS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibGluZUJyZWFrcG9pbnRzIj5CcmVha2luZyBjb25kaXRpb25zIGZvciBlYWNoIGNoYXJhY3Rlci48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gQSBzdWNjZXNzZnVsIGNvZGUgb3IgZXJyb3IgY29kZSB0byBhYm9ydCBhbmFseXNpcy4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChTZXRMaW5lQnJlYWtwb2ludHMpKAorICAgICAgICBVSU5UMzIgdGV4dFBvc2l0aW9uLAorICAgICAgICBVSU5UMzIgdGV4dExlbmd0aCwKKyAgICAgICAgX19pbl9lY291bnQodGV4dExlbmd0aCkgRFdSSVRFX0xJTkVfQlJFQUtQT0lOVCBjb25zdCogbGluZUJyZWFrcG9pbnRzCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gU2V0IGJpZGlyZWN0aW9uYWwgbGV2ZWwgb24gdGhlIHJhbmdlLCBjYWxsZWQgb25jZSBwZXIgZWFjaAorICAgIC8vLyBsZXZlbCBydW4gY2hhbmdlIChlaXRoZXIgZXhwbGljaXQgb3IgcmVzb2x2ZWQgaW1wbGljaXQpLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0UG9zaXRpb24iPlN0YXJ0aW5nIHBvc2l0aW9uIHRvIHJlcG9ydCBmcm9tLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0TGVuZ3RoIj5OdW1iZXIgb2YgVVRGMTYgdW5pdHMgb2YgdGhlIHJlcG9ydGVkIHJhbmdlLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJleHBsaWNpdExldmVsIj5FeHBsaWNpdCBsZXZlbCBmcm9tIGVtYmVkZGVkIGNvbnRyb2wgY29kZXMKKyAgICAvLy8gICAgIFJMRS9STE8vTFJFL0xSTy9QREYsIGRldGVybWluZWQgYmVmb3JlIGFueSBhZGRpdGlvbmFsIHJ1bGVzLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJyZXNvbHZlZExldmVsIj5GaW5hbCBpbXBsaWNpdCBsZXZlbCBjb25zaWRlcmluZyB0aGUKKyAgICAvLy8gICAgIGV4cGxpY2l0IGxldmVsIGFuZCBjaGFyYWN0ZXJzJyBuYXR1cmFsIGRpcmVjdGlvbmFsaXR5LCBhZnRlciBhbGwKKyAgICAvLy8gICAgIEJpZGkgcnVsZXMgaGF2ZSBiZWVuIGFwcGxpZWQuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIEEgc3VjY2Vzc2Z1bCBjb2RlIG9yIGVycm9yIGNvZGUgdG8gYWJvcnQgYW5hbHlzaXMuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoU2V0QmlkaUxldmVsKSgKKyAgICAgICAgVUlOVDMyIHRleHRQb3NpdGlvbiwKKyAgICAgICAgVUlOVDMyIHRleHRMZW5ndGgsCisgICAgICAgIFVJTlQ4IGV4cGxpY2l0TGV2ZWwsCisgICAgICAgIFVJTlQ4IHJlc29sdmVkTGV2ZWwKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTZXQgbnVtYmVyIHN1YnN0aXR1dGlvbiBvbiB0aGUgcmFuZ2UuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRQb3NpdGlvbiI+U3RhcnRpbmcgcG9zaXRpb24gdG8gcmVwb3J0IGZyb20uPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRMZW5ndGgiPk51bWJlciBvZiBVVEYxNiB1bml0cyBvZiB0aGUgcmVwb3J0ZWQgcmFuZ2UuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9Im51bWJlclN1YnN0aXR1dGlvbiI+VGhlIG51bWJlciBzdWJzdGl0dXRpb24gYXBwbGljYWJsZSB0bworICAgIC8vLyAgICAgdGhlIHJldHVybmVkIHJhbmdlIG9mIHRleHQuIFRoZSBzaW5rIGNhbGxiYWNrIG1heSBob2xkIG9udG8gaXQgYnkKKyAgICAvLy8gICAgIGluY3JlbWVudGluZyBpdHMgcmVmIGNvdW50LjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBBIHN1Y2Nlc3NmdWwgY29kZSBvciBlcnJvciBjb2RlIHRvIGFib3J0IGFuYWx5c2lzLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgLy8vIDxyZW1hcms+CisgICAgLy8vIFVubGlrZSBzY3JpcHQgYW5kIGJpZGkgYW5hbHlzaXMsIHdoZXJlIGV2ZXJ5IGNoYXJhY3RlciBwYXNzZWQgdG8gdGhlCisgICAgLy8vIGFuYWx5emVyIGhhcyBhIHJlc3VsdCwgdGhpcyB3aWxsIG9ubHkgYmUgY2FsbGVkIGZvciB0aG9zZSByYW5nZXMgd2hlcmUKKyAgICAvLy8gc3Vic3RpdHV0aW9uIGlzIGFwcGxpY2FibGUuIEZvciBhbnkgb3RoZXIgcmFuZ2UsIHlvdSB3aWxsIHNpbXBseSBub3QKKyAgICAvLy8gYmUgY2FsbGVkLgorICAgIC8vLyA8L3JlbWFyaz4KKyAgICBTVERNRVRIT0QoU2V0TnVtYmVyU3Vic3RpdHV0aW9uKSgKKyAgICAgICAgVUlOVDMyIHRleHRQb3NpdGlvbiwKKyAgICAgICAgVUlOVDMyIHRleHRMZW5ndGgsCisgICAgICAgIF9fbm90bnVsbCBJRFdyaXRlTnVtYmVyU3Vic3RpdHV0aW9uKiBudW1iZXJTdWJzdGl0dXRpb24KKyAgICAgICAgKSBQVVJFOworfTsKKworLy8vIDxzdW1tYXJ5PgorLy8vIEFuYWx5emVzIHZhcmlvdXMgdGV4dCBwcm9wZXJ0aWVzIGZvciBjb21wbGV4IHNjcmlwdCBwcm9jZXNzaW5nLgorLy8vIDwvc3VtbWFyeT4KK2ludGVyZmFjZSBEV1JJVEVfREVDTEFSRV9JTlRFUkZBQ0UoImI3ZTYxNjNlLTdmNDYtNDNiNC04NGIzLWU0ZTYyNDljMzY1ZCIpIElEV3JpdGVUZXh0QW5hbHl6ZXIgOiBwdWJsaWMgSVVua25vd24KK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEFuYWx5emVzIGEgdGV4dCByYW5nZSBmb3Igc2NyaXB0IGJvdW5kYXJpZXMsIHJlYWRpbmcgdGV4dCBhdHRyaWJ1dGVzCisgICAgLy8vIGZyb20gdGhlIHNvdXJjZSBhbmQgcmVwb3J0aW5nIHRoZSBVbmljb2RlIHNjcmlwdCBJRCB0byB0aGUgc2luayAKKyAgICAvLy8gY2FsbGJhY2sgU2V0U2NyaXB0LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJhbmFseXNpc1NvdXJjZSI+U291cmNlIG9iamVjdCB0byBhbmFseXplLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0UG9zaXRpb24iPlN0YXJ0aW5nIHBvc2l0aW9uIHdpdGhpbiB0aGUgc291cmNlIG9iamVjdC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dExlbmd0aCI+TGVuZ3RoIHRvIGFuYWx5emUuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImFuYWx5c2lzU2luayI+Q2FsbGJhY2sgb2JqZWN0LjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoQW5hbHl6ZVNjcmlwdCkoCisgICAgICAgIElEV3JpdGVUZXh0QW5hbHlzaXNTb3VyY2UqIGFuYWx5c2lzU291cmNlLAorICAgICAgICBVSU5UMzIgdGV4dFBvc2l0aW9uLAorICAgICAgICBVSU5UMzIgdGV4dExlbmd0aCwKKyAgICAgICAgSURXcml0ZVRleHRBbmFseXNpc1NpbmsqIGFuYWx5c2lzU2luaworICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEFuYWx5emVzIGEgdGV4dCByYW5nZSBmb3Igc2NyaXB0IGRpcmVjdGlvbmFsaXR5LCByZWFkaW5nIGF0dHJpYnV0ZXMKKyAgICAvLy8gZnJvbSB0aGUgc291cmNlIGFuZCByZXBvcnRpbmcgbGV2ZWxzIHRvIHRoZSBzaW5rIGNhbGxiYWNrIFNldEJpZGlMZXZlbC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iYW5hbHlzaXNTb3VyY2UiPlNvdXJjZSBvYmplY3QgdG8gYW5hbHl6ZS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFBvc2l0aW9uIj5TdGFydGluZyBwb3NpdGlvbiB3aXRoaW4gdGhlIHNvdXJjZSBvYmplY3QuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRMZW5ndGgiPkxlbmd0aCB0byBhbmFseXplLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJhbmFseXNpc1NpbmsiPkNhbGxiYWNrIG9iamVjdC48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgLy8vIDxyZW1hcmtzPgorICAgIC8vLyBXaGlsZSB0aGUgZnVuY3Rpb24gY2FuIGhhbmRsZSBtdWx0aXBsZSBwYXJhZ3JhcGhzLCB0aGUgdGV4dCByYW5nZQorICAgIC8vLyBzaG91bGQgbm90IGFyYml0cmFyaWx5IHNwbGl0IHRoZSBtaWRkbGUgb2YgcGFyYWdyYXBocy4gT3RoZXJ3aXNlIHRoZQorICAgIC8vLyByZXR1cm5lZCBsZXZlbHMgbWF5IGJlIHdyb25nLCBzaW5jZSB0aGUgQmlkaSBhbGdvcml0aG0gaXMgbWVhbnQgdG8KKyAgICAvLy8gYXBwbHkgdG8gdGhlIHBhcmFncmFwaCBhcyBhIHdob2xlLgorICAgIC8vLyA8L3JlbWFya3M+CisgICAgLy8vIDxyZW1hcmtzPgorICAgIC8vLyBFbWJlZGRlZCBjb250cm9sIGNvZGVzIChMUkUvTFJPL1JMRS9STE8vUERGKSBhcmUgdGFrZW4gaW50byBhY2NvdW50LgorICAgIC8vLyA8L3JlbWFya3M+CisgICAgU1RETUVUSE9EKEFuYWx5emVCaWRpKSgKKyAgICAgICAgSURXcml0ZVRleHRBbmFseXNpc1NvdXJjZSogYW5hbHlzaXNTb3VyY2UsCisgICAgICAgIFVJTlQzMiB0ZXh0UG9zaXRpb24sCisgICAgICAgIFVJTlQzMiB0ZXh0TGVuZ3RoLAorICAgICAgICBJRFdyaXRlVGV4dEFuYWx5c2lzU2luayogYW5hbHlzaXNTaW5rCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQW5hbHl6ZXMgYSB0ZXh0IHJhbmdlIGZvciBzcGFucyB3aGVyZSBudW1iZXIgc3Vic3RpdHV0aW9uIGlzIGFwcGxpY2FibGUsCisgICAgLy8vIHJlYWRpbmcgYXR0cmlidXRlcyBmcm9tIHRoZSBzb3VyY2UgYW5kIHJlcG9ydGluZyBzdWJzdGl0dXRhYmxlIHJhbmdlcworICAgIC8vLyB0byB0aGUgc2luayBjYWxsYmFjayBTZXROdW1iZXJTdWJzdGl0dXRpb24uCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImFuYWx5c2lzU291cmNlIj5Tb3VyY2Ugb2JqZWN0IHRvIGFuYWx5emUuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRQb3NpdGlvbiI+U3RhcnRpbmcgcG9zaXRpb24gd2l0aGluIHRoZSBzb3VyY2Ugb2JqZWN0LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0TGVuZ3RoIj5MZW5ndGggdG8gYW5hbHl6ZS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iYW5hbHlzaXNTaW5rIj5DYWxsYmFjayBvYmplY3QuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIC8vLyA8cmVtYXJrcz4KKyAgICAvLy8gV2hpbGUgdGhlIGZ1bmN0aW9uIGNhbiBoYW5kbGUgbXVsdGlwbGUgcmFuZ2VzIG9mIGRpZmZlcmluZyBudW1iZXIKKyAgICAvLy8gc3Vic3RpdHV0aW9ucywgdGhlIHRleHQgcmFuZ2VzIHNob3VsZCBub3QgYXJiaXRyYXJpbHkgc3BsaXQgdGhlCisgICAgLy8vIG1pZGRsZSBvZiBudW1iZXJzLiBPdGhlcndpc2UgaXQgd2lsbCB0cmVhdCB0aGUgbnVtYmVycyBzZXBhcmF0ZWx5CisgICAgLy8vIGFuZCB3aWxsIG5vdCB0cmFuc2xhdGUgYW55IGludGVydmVuaW5nIHB1bmN0dWF0aW9uLgorICAgIC8vLyA8L3JlbWFya3M+CisgICAgLy8vIDxyZW1hcmtzPgorICAgIC8vLyBFbWJlZGRlZCBjb250cm9sIGNvZGVzIChMUkUvTFJPL1JMRS9STE8vUERGKSBhcmUgdGFrZW4gaW50byBhY2NvdW50LgorICAgIC8vLyA8L3JlbWFya3M+CisgICAgU1RETUVUSE9EKEFuYWx5emVOdW1iZXJTdWJzdGl0dXRpb24pKAorICAgICAgICBJRFdyaXRlVGV4dEFuYWx5c2lzU291cmNlKiBhbmFseXNpc1NvdXJjZSwKKyAgICAgICAgVUlOVDMyIHRleHRQb3NpdGlvbiwKKyAgICAgICAgVUlOVDMyIHRleHRMZW5ndGgsCisgICAgICAgIElEV3JpdGVUZXh0QW5hbHlzaXNTaW5rKiBhbmFseXNpc1NpbmsKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBBbmFseXplcyBhIHRleHQgcmFuZ2UgZm9yIHBvdGVudGlhbCBicmVha3BvaW50IG9wcG9ydHVuaXRpZXMsIHJlYWRpbmcKKyAgICAvLy8gYXR0cmlidXRlcyBmcm9tIHRoZSBzb3VyY2UgYW5kIHJlcG9ydGluZyBicmVha3BvaW50IG9wcG9ydHVuaXRpZXMgdG8KKyAgICAvLy8gdGhlIHNpbmsgY2FsbGJhY2sgU2V0TGluZUJyZWFrcG9pbnRzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJhbmFseXNpc1NvdXJjZSI+U291cmNlIG9iamVjdCB0byBhbmFseXplLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0UG9zaXRpb24iPlN0YXJ0aW5nIHBvc2l0aW9uIHdpdGhpbiB0aGUgc291cmNlIG9iamVjdC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dExlbmd0aCI+TGVuZ3RoIHRvIGFuYWx5emUuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImFuYWx5c2lzU2luayI+Q2FsbGJhY2sgb2JqZWN0LjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICAvLy8gPHJlbWFya3M+CisgICAgLy8vIFdoaWxlIHRoZSBmdW5jdGlvbiBjYW4gaGFuZGxlIG11bHRpcGxlIHBhcmFncmFwaHMsIHRoZSB0ZXh0IHJhbmdlCisgICAgLy8vIHNob3VsZCBub3QgYXJiaXRyYXJpbHkgc3BsaXQgdGhlIG1pZGRsZSBvZiBwYXJhZ3JhcGhzLCB1bmxlc3MgdGhlCisgICAgLy8vIGdpdmVuIHRleHQgc3BhbiBpcyBjb25zaWRlcmVkIGEgd2hvbGUgdW5pdC4gT3RoZXJ3aXNlIHRoZQorICAgIC8vLyByZXR1cm5lZCBwcm9wZXJ0aWVzIGZvciB0aGUgZmlyc3QgYW5kIGxhc3QgY2hhcmFjdGVycyB3aWxsCisgICAgLy8vIGluYXBwcm9wcmlhdGVseSBhbGxvdyBicmVha3MuCisgICAgLy8vIDwvcmVtYXJrcz4KKyAgICAvLy8gPHJlbWFya3M+CisgICAgLy8vIFNwZWNpYWwgY2FzZXMgaW5jbHVkZSB0aGUgZmlyc3QsIGxhc3QsIGFuZCBzdXJyb2dhdGUgY2hhcmFjdGVycy4gQW55CisgICAgLy8vIHRleHQgc3BhbiBpcyB0cmVhdGVkIGFzIGlmIGFkamFjZW50IHRvIGlubGluZSBvYmplY3RzIG9uIGVpdGhlciBzaWRlLgorICAgIC8vLyBTbyB0aGUgcnVsZXMgd2l0aCBjb250aW5nZW50LWJyZWFrIG9wcG9ydHVuaXRpZXMgYXJlIHVzZWQsIHdoZXJlIHRoZSAKKyAgICAvLy8gZWRnZSBiZXR3ZWVuIHRleHQgYW5kIGlubGluZSBvYmplY3RzIGlzIGFsd2F5cyB0cmVhdGVkIGFzIGEgcG90ZW50aWFsCisgICAgLy8vIGJyZWFrIG9wcG9ydHVuaXR5LCBkZXBlbmRlbnQgb24gYW55IG92ZXJyaWRpbmcgcnVsZXMgb2YgdGhlIGFkamFjZW50CisgICAgLy8vIG9iamVjdHMgdG8gcHJvaGliaXQgb3IgZm9yY2UgdGhlIGJyZWFrIChzZWUgVW5pY29kZSBUUiAjMTQpLgorICAgIC8vLyBTdXJyb2dhdGUgcGFpcnMgbmV2ZXIgYnJlYWsgYmV0d2Vlbi4KKyAgICAvLy8gPC9yZW1hcmtzPgorICAgIFNURE1FVEhPRChBbmFseXplTGluZUJyZWFrcG9pbnRzKSgKKyAgICAgICAgSURXcml0ZVRleHRBbmFseXNpc1NvdXJjZSogYW5hbHlzaXNTb3VyY2UsCisgICAgICAgIFVJTlQzMiB0ZXh0UG9zaXRpb24sCisgICAgICAgIFVJTlQzMiB0ZXh0TGVuZ3RoLAorICAgICAgICBJRFdyaXRlVGV4dEFuYWx5c2lzU2luayogYW5hbHlzaXNTaW5rCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gUGFyc2VzIHRoZSBpbnB1dCB0ZXh0IHN0cmluZyBhbmQgbWFwcyBpdCB0byB0aGUgc2V0IG9mIGdseXBocyBhbmQgYXNzb2NpYXRlZCBnbHlwaCBkYXRhCisgICAgLy8vIGFjY29yZGluZyB0byB0aGUgZm9udCBhbmQgdGhlIHdyaXRpbmcgc3lzdGVtJ3MgcmVuZGVyaW5nIHJ1bGVzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0U3RyaW5nIj5UaGUgc3RyaW5nIHRvIGNvbnZlcnQgdG8gZ2x5cGhzLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0TGVuZ3RoIj5UaGUgbGVuZ3RoIG9mIHRleHRTdHJpbmcuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGYWNlIj5UaGUgZm9udCBmYWNlIHRvIGdldCBnbHlwaHMgZnJvbS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaXNTaWRld2F5cyI+U2V0IHRvIHRydWUgaWYgdGhlIHRleHQgaXMgaW50ZW5kZWQgdG8gYmUKKyAgICAvLy8gZHJhd24gdmVydGljYWxseS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaXNSaWdodFRvTGVmdCI+U2V0IHRvIFRSVUUgZm9yIHJpZ2h0LXRvLWxlZnQgdGV4dC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ic2NyaXB0QW5hbHlzaXMiPlNjcmlwdCBhbmFseXNpcyByZXN1bHQgZnJvbSBBbmFseXplU2NyaXB0LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJsb2NhbGVOYW1lIj5UaGUgbG9jYWxlIHRvIHVzZSB3aGVuIHNlbGVjdGluZyBnbHlwaHMuCisgICAgLy8vIGUuZy4gdGhlIHNhbWUgY2hhcmFjdGVyIG1heSBtYXAgdG8gZGlmZmVyZW50IGdseXBocyBmb3IgamEtanAgdnMgemgtY2hzLgorICAgIC8vLyBJZiB0aGlzIGlzIE5VTEwgdGhlbiB0aGUgZGVmYXVsdCBtYXBwaW5nIGJhc2VkIG9uIHRoZSBzY3JpcHQgaXMgdXNlZC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibnVtYmVyU3Vic3RpdHV0aW9uIj5PcHRpb25hbCBudW1iZXIgc3Vic3RpdHV0aW9uIHdoaWNoCisgICAgLy8vIHNlbGVjdHMgdGhlIGFwcHJvcHJpYXRlIGdseXBocyBmb3IgZGlnaXRzIGFuZCByZWxhdGVkIG51bWVyaWMgY2hhcmFjdGVycywKKyAgICAvLy8gZGVwZW5kaW5nIG9uIHRoZSByZXN1bHRzIG9idGFpbmVkIGZyb20gQW5hbHl6ZU51bWJlclN1YnN0aXR1dGlvbi4gUGFzc2luZworICAgIC8vLyBudWxsIGluZGljYXRlcyB0aGF0IG5vIHN1YnN0aXR1dGlvbiBpcyBuZWVkZWQgYW5kIHRoYXQgdGhlIGRpZ2l0cyBzaG91bGQKKyAgICAvLy8gcmVjZWl2ZSBub21pbmFsIGdseXBocy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZmVhdHVyZXMiPkFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZSBzZXRzIG9mIHR5cG9ncmFwaGljIAorICAgIC8vLyBmZWF0dXJlcyB0byB1c2UgaW4gZWFjaCBmZWF0dXJlIHJhbmdlLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmZWF0dXJlUmFuZ2VMZW5ndGhzIj5UaGUgbGVuZ3RoIG9mIGVhY2ggZmVhdHVyZSByYW5nZSwgaW4gY2hhcmFjdGVycy4gIAorICAgIC8vLyBUaGUgc3VtIG9mIGFsbCBsZW5ndGhzIHNob3VsZCBiZSBlcXVhbCB0byB0ZXh0TGVuZ3RoLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmZWF0dXJlUmFuZ2VzIj5UaGUgbnVtYmVyIG9mIGZlYXR1cmUgcmFuZ2VzLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJtYXhHbHlwaENvdW50Ij5UaGUgbWF4aW11bSBudW1iZXIgb2YgZ2x5cGhzIHRoYXQgY2FuIGJlCisgICAgLy8vIHJldHVybmVkLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJjbHVzdGVyTWFwIj5UaGUgbWFwcGluZyBmcm9tIGNoYXJhY3RlciByYW5nZXMgdG8gZ2x5cGggCisgICAgLy8vIHJhbmdlcy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFByb3BzIj5QZXItY2hhcmFjdGVyIG91dHB1dCBwcm9wZXJ0aWVzLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaEluZGljZXMiPk91dHB1dCBnbHlwaCBpbmRpY2VzLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaFByb3BzIj5QZXItZ2x5cGggb3V0cHV0IHByb3BlcnRpZXMuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImFjdHVhbEdseXBoQ291bnQiPlRoZSBhY3R1YWwgbnVtYmVyIG9mIGdseXBocyByZXR1cm5lZCBpZgorICAgIC8vLyB0aGUgY2FsbCBzdWNjZWVkcy48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgLy8vIDxyZW1hcmtzPgorICAgIC8vLyBOb3RlIHRoYXQgdGhlIG1hcHBpbmcgZnJvbSBjaGFyYWN0ZXJzIHRvIGdseXBocyBpcywgaW4gZ2VuZXJhbCwgbWFueS0KKyAgICAvLy8gdG8tbWFueS4gIFRoZSByZWNvbW1lbmRlZCBlc3RpbWF0ZSBmb3IgdGhlIHBlci1nbHlwaCBvdXRwdXQgYnVmZmVycyBpcworICAgIC8vLyAoMyAqIHRleHRMZW5ndGggLyAyICsgMTYpLiAgVGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBzdWZmaWNpZW50LgorICAgIC8vLworICAgIC8vLyBUaGUgdmFsdWUgb2YgdGhlIGFjdHVhbEdseXBoQ291bnQgcGFyYW1ldGVyIGlzIG9ubHkgdmFsaWQgaWYgdGhlIGNhbGwKKyAgICAvLy8gc3VjY2VlZHMuICBJbiB0aGUgZXZlbnQgdGhhdCBtYXhHbHlwaENvdW50IGlzIG5vdCBiaWcgZW5vdWdoCisgICAgLy8vIEVfTk9UX1NVRkZJQ0lFTlRfQlVGRkVSLCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIEhSRVNVTFRfRlJPTV9XSU4zMihFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSKSwKKyAgICAvLy8gd2lsbCBiZSByZXR1cm5lZC4gIFRoZSBhcHBsaWNhdGlvbiBzaG91bGQgYWxsb2NhdGUgYSBsYXJnZXIgYnVmZmVyIGFuZCB0cnkgYWdhaW4uCisgICAgLy8vIDwvcmVtYXJrcz4KKyAgICBTVERNRVRIT0QoR2V0R2x5cGhzKSgKKyAgICAgICAgX19pbl9lY291bnQodGV4dExlbmd0aCkgV0NIQVIgY29uc3QqIHRleHRTdHJpbmcsCisgICAgICAgIFVJTlQzMiB0ZXh0TGVuZ3RoLAorICAgICAgICBJRFdyaXRlRm9udEZhY2UqIGZvbnRGYWNlLAorICAgICAgICBCT09MIGlzU2lkZXdheXMsCisgICAgICAgIEJPT0wgaXNSaWdodFRvTGVmdCwKKyAgICAgICAgX19pbiBEV1JJVEVfU0NSSVBUX0FOQUxZU0lTIGNvbnN0KiBzY3JpcHRBbmFseXNpcywKKyAgICAgICAgX19pbl96X29wdCBXQ0hBUiBjb25zdCogbG9jYWxlTmFtZSwKKyAgICAgICAgX19tYXliZW51bGwgSURXcml0ZU51bWJlclN1YnN0aXR1dGlvbiogbnVtYmVyU3Vic3RpdHV0aW9uLAorICAgICAgICBfX2luX2Vjb3VudF9vcHQoZmVhdHVyZVJhbmdlcykgRFdSSVRFX1RZUE9HUkFQSElDX0ZFQVRVUkVTIGNvbnN0KiogZmVhdHVyZXMsCisgICAgICAgIF9faW5fZWNvdW50X29wdChmZWF0dXJlUmFuZ2VzKSBVSU5UMzIgY29uc3QqIGZlYXR1cmVSYW5nZUxlbmd0aHMsCisgICAgICAgIFVJTlQzMiBmZWF0dXJlUmFuZ2VzLAorICAgICAgICBVSU5UMzIgbWF4R2x5cGhDb3VudCwKKyAgICAgICAgX19vdXRfZWNvdW50KHRleHRMZW5ndGgpIFVJTlQxNiogY2x1c3Rlck1hcCwKKyAgICAgICAgX19vdXRfZWNvdW50KHRleHRMZW5ndGgpIERXUklURV9TSEFQSU5HX1RFWFRfUFJPUEVSVElFUyogdGV4dFByb3BzLAorICAgICAgICBfX291dF9lY291bnQobWF4R2x5cGhDb3VudCkgVUlOVDE2KiBnbHlwaEluZGljZXMsCisgICAgICAgIF9fb3V0X2Vjb3VudChtYXhHbHlwaENvdW50KSBEV1JJVEVfU0hBUElOR19HTFlQSF9QUk9QRVJUSUVTKiBnbHlwaFByb3BzLAorICAgICAgICBfX291dCBVSU5UMzIqIGFjdHVhbEdseXBoQ291bnQKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBQbGFjZSBnbHlwaHMgb3V0cHV0IGZyb20gdGhlIEdldEdseXBocyBtZXRob2QgYWNjb3JkaW5nIHRvIHRoZSBmb250IAorICAgIC8vLyBhbmQgdGhlIHdyaXRpbmcgc3lzdGVtJ3MgcmVuZGVyaW5nIHJ1bGVzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0U3RyaW5nIj5UaGUgb3JpZ2luYWwgc3RyaW5nIHRoZSBnbHlwaHMgY2FtZSBmcm9tLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJjbHVzdGVyTWFwIj5UaGUgbWFwcGluZyBmcm9tIGNoYXJhY3RlciByYW5nZXMgdG8gZ2x5cGggCisgICAgLy8vIHJhbmdlcy4gUmV0dXJuZWQgYnkgR2V0R2x5cGhzLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0UHJvcHMiPlBlci1jaGFyYWN0ZXIgcHJvcGVydGllcy4gUmV0dXJuZWQgYnkgCisgICAgLy8vIEdldEdseXBocy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dExlbmd0aCI+VGhlIGxlbmd0aCBvZiB0ZXh0U3RyaW5nLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaEluZGljZXMiPkdseXBoIGluZGljZXMuIFNlZSBHZXRHbHlwaHM8L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2x5cGhQcm9wcyI+UGVyLWdseXBoIHByb3BlcnRpZXMuIFNlZSBHZXRHbHlwaHM8L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2x5cGhDb3VudCI+VGhlIG51bWJlciBvZiBnbHlwaHMuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGYWNlIj5UaGUgZm9udCBmYWNlIHRoZSBnbHlwaHMgY2FtZSBmcm9tLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RW1TaXplIj5Mb2dpY2FsIGZvbnQgc2l6ZSBpbiBESVAncy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaXNTaWRld2F5cyI+U2V0IHRvIHRydWUgaWYgdGhlIHRleHQgaXMgaW50ZW5kZWQgdG8gYmUKKyAgICAvLy8gZHJhd24gdmVydGljYWxseS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaXNSaWdodFRvTGVmdCI+U2V0IHRvIFRSVUUgZm9yIHJpZ2h0LXRvLWxlZnQgdGV4dC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ic2NyaXB0QW5hbHlzaXMiPlNjcmlwdCBhbmFseXNpcyByZXN1bHQgZnJvbSBBbmFseXplU2NyaXB0LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJsb2NhbGVOYW1lIj5UaGUgbG9jYWxlIHRvIHVzZSB3aGVuIHNlbGVjdGluZyBnbHlwaHMuCisgICAgLy8vIGUuZy4gdGhlIHNhbWUgY2hhcmFjdGVyIG1heSBtYXAgdG8gZGlmZmVyZW50IGdseXBocyBmb3IgamEtanAgdnMgemgtY2hzLgorICAgIC8vLyBJZiB0aGlzIGlzIE5VTEwgdGhlbiB0aGUgZGVmYXVsdCBtYXBwaW5nIGJhc2VkIG9uIHRoZSBzY3JpcHQgaXMgdXNlZC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZmVhdHVyZXMiPkFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZSBzZXRzIG9mIHR5cG9ncmFwaGljIAorICAgIC8vLyBmZWF0dXJlcyB0byB1c2UgaW4gZWFjaCBmZWF0dXJlIHJhbmdlLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmZWF0dXJlUmFuZ2VMZW5ndGhzIj5UaGUgbGVuZ3RoIG9mIGVhY2ggZmVhdHVyZSByYW5nZSwgaW4gY2hhcmFjdGVycy4gIAorICAgIC8vLyBUaGUgc3VtIG9mIGFsbCBsZW5ndGhzIHNob3VsZCBiZSBlcXVhbCB0byB0ZXh0TGVuZ3RoLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmZWF0dXJlUmFuZ2VzIj5UaGUgbnVtYmVyIG9mIGZlYXR1cmUgcmFuZ2VzLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaEFkdmFuY2VzIj5UaGUgYWR2YW5jZSB3aWR0aCBvZiBlYWNoIGdseXBoLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaE9mZnNldHMiPlRoZSBvZmZzZXQgb2YgdGhlIG9yaWdpbiBvZiBlYWNoIGdseXBoLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0R2x5cGhQbGFjZW1lbnRzKSgKKyAgICAgICAgX19pbl9lY291bnQodGV4dExlbmd0aCkgV0NIQVIgY29uc3QqIHRleHRTdHJpbmcsCisgICAgICAgIF9faW5fZWNvdW50KHRleHRMZW5ndGgpIFVJTlQxNiBjb25zdCogY2x1c3Rlck1hcCwKKyAgICAgICAgX19pbl9lY291bnQodGV4dExlbmd0aCkgRFdSSVRFX1NIQVBJTkdfVEVYVF9QUk9QRVJUSUVTKiB0ZXh0UHJvcHMsCisgICAgICAgIFVJTlQzMiB0ZXh0TGVuZ3RoLAorICAgICAgICBfX2luX2Vjb3VudChnbHlwaENvdW50KSBVSU5UMTYgY29uc3QqIGdseXBoSW5kaWNlcywKKyAgICAgICAgX19pbl9lY291bnQoZ2x5cGhDb3VudCkgRFdSSVRFX1NIQVBJTkdfR0xZUEhfUFJPUEVSVElFUyBjb25zdCogZ2x5cGhQcm9wcywKKyAgICAgICAgVUlOVDMyIGdseXBoQ291bnQsCisgICAgICAgIElEV3JpdGVGb250RmFjZSAqIGZvbnRGYWNlLAorICAgICAgICBGTE9BVCBmb250RW1TaXplLAorICAgICAgICBCT09MIGlzU2lkZXdheXMsCisgICAgICAgIEJPT0wgaXNSaWdodFRvTGVmdCwKKyAgICAgICAgX19pbiBEV1JJVEVfU0NSSVBUX0FOQUxZU0lTIGNvbnN0KiBzY3JpcHRBbmFseXNpcywKKyAgICAgICAgX19pbl96X29wdCBXQ0hBUiBjb25zdCogbG9jYWxlTmFtZSwKKyAgICAgICAgX19pbl9lY291bnRfb3B0KGZlYXR1cmVSYW5nZXMpIERXUklURV9UWVBPR1JBUEhJQ19GRUFUVVJFUyBjb25zdCoqIGZlYXR1cmVzLAorICAgICAgICBfX2luX2Vjb3VudF9vcHQoZmVhdHVyZVJhbmdlcykgVUlOVDMyIGNvbnN0KiBmZWF0dXJlUmFuZ2VMZW5ndGhzLAorICAgICAgICBVSU5UMzIgZmVhdHVyZVJhbmdlcywKKyAgICAgICAgX19vdXRfZWNvdW50KGdseXBoQ291bnQpIEZMT0FUKiBnbHlwaEFkdmFuY2VzLAorICAgICAgICBfX291dF9lY291bnQoZ2x5cGhDb3VudCkgRFdSSVRFX0dMWVBIX09GRlNFVCogZ2x5cGhPZmZzZXRzCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gUGxhY2UgZ2x5cGhzIG91dHB1dCBmcm9tIHRoZSBHZXRHbHlwaHMgbWV0aG9kIGFjY29yZGluZyB0byB0aGUgZm9udCAKKyAgICAvLy8gYW5kIHRoZSB3cml0aW5nIHN5c3RlbSdzIHJlbmRlcmluZyBydWxlcy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFN0cmluZyI+VGhlIG9yaWdpbmFsIHN0cmluZyB0aGUgZ2x5cGhzIGNhbWUgZnJvbS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iY2x1c3Rlck1hcCI+VGhlIG1hcHBpbmcgZnJvbSBjaGFyYWN0ZXIgcmFuZ2VzIHRvIGdseXBoIAorICAgIC8vLyByYW5nZXMuIFJldHVybmVkIGJ5IEdldEdseXBocy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFByb3BzIj5QZXItY2hhcmFjdGVyIHByb3BlcnRpZXMuIFJldHVybmVkIGJ5IAorICAgIC8vLyBHZXRHbHlwaHMuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRMZW5ndGgiPlRoZSBsZW5ndGggb2YgdGV4dFN0cmluZy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2x5cGhJbmRpY2VzIj5HbHlwaCBpbmRpY2VzLiBTZWUgR2V0R2x5cGhzPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImdseXBoUHJvcHMiPlBlci1nbHlwaCBwcm9wZXJ0aWVzLiBTZWUgR2V0R2x5cGhzPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImdseXBoQ291bnQiPlRoZSBudW1iZXIgb2YgZ2x5cGhzLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RmFjZSI+VGhlIGZvbnQgZmFjZSB0aGUgZ2x5cGhzIGNhbWUgZnJvbS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEVtU2l6ZSI+TG9naWNhbCBmb250IHNpemUgaW4gRElQJ3MuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InBpeGVsc1BlckRpcCI+TnVtYmVyIG9mIHBoeXNpY2FsIHBpeGVscyBwZXIgRElQLiBGb3IgZXhhbXBsZSwgaWYgdGhlIERQSSBvZiB0aGUgcmVuZGVyaW5nIHN1cmZhY2UgaXMgOTYgdGhpcyAKKyAgICAvLy8gdmFsdWUgaXMgMS4wZi4gSWYgdGhlIERQSSBpcyAxMjAsIHRoaXMgdmFsdWUgaXMgMTIwLjBmLzk2LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0cmFuc2Zvcm0iPk9wdGlvbmFsIHRyYW5zZm9ybSBhcHBsaWVkIHRvIHRoZSBnbHlwaHMgYW5kIHRoZWlyIHBvc2l0aW9ucy4gVGhpcyB0cmFuc2Zvcm0gaXMgYXBwbGllZCBhZnRlciB0aGUKKyAgICAvLy8gc2NhbGluZyBzcGVjaWZpZWQgYnkgdGhlIGZvbnQgc2l6ZSBhbmQgcGl4ZWxzUGVyRGlwLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ1c2VHZGlOYXR1cmFsIj4KKyAgICAvLy8gV2hlbiBzZXQgdG8gRkFMU0UsIHRoZSBtZXRyaWNzIGFyZSB0aGUgc2FtZSBhcyB0aGUgbWV0cmljcyBvZiBHREkgYWxpYXNlZCB0ZXh0LgorICAgIC8vLyBXaGVuIHNldCB0byBUUlVFLCB0aGUgbWV0cmljcyBhcmUgdGhlIHNhbWUgYXMgdGhlIG1ldHJpY3Mgb2YgdGV4dCBtZWFzdXJlZCBieSBHREkgdXNpbmcgYSBmb250CisgICAgLy8vIGNyZWF0ZWQgd2l0aCBDTEVBUlRZUEVfTkFUVVJBTF9RVUFMSVRZLgorICAgIC8vLyA8L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaXNTaWRld2F5cyI+U2V0IHRvIHRydWUgaWYgdGhlIHRleHQgaXMgaW50ZW5kZWQgdG8gYmUKKyAgICAvLy8gZHJhd24gdmVydGljYWxseS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaXNSaWdodFRvTGVmdCI+U2V0IHRvIFRSVUUgZm9yIHJpZ2h0LXRvLWxlZnQgdGV4dC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ic2NyaXB0QW5hbHlzaXMiPlNjcmlwdCBhbmFseXNpcyByZXN1bHQgZnJvbSBBbmFseXplU2NyaXB0LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJsb2NhbGVOYW1lIj5UaGUgbG9jYWxlIHRvIHVzZSB3aGVuIHNlbGVjdGluZyBnbHlwaHMuCisgICAgLy8vIGUuZy4gdGhlIHNhbWUgY2hhcmFjdGVyIG1heSBtYXAgdG8gZGlmZmVyZW50IGdseXBocyBmb3IgamEtanAgdnMgemgtY2hzLgorICAgIC8vLyBJZiB0aGlzIGlzIE5VTEwgdGhlbiB0aGUgZGVmYXVsdCBtYXBwaW5nIGJhc2VkIG9uIHRoZSBzY3JpcHQgaXMgdXNlZC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZmVhdHVyZXMiPkFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZSBzZXRzIG9mIHR5cG9ncmFwaGljIAorICAgIC8vLyBmZWF0dXJlcyB0byB1c2UgaW4gZWFjaCBmZWF0dXJlIHJhbmdlLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmZWF0dXJlUmFuZ2VMZW5ndGhzIj5UaGUgbGVuZ3RoIG9mIGVhY2ggZmVhdHVyZSByYW5nZSwgaW4gY2hhcmFjdGVycy4gIAorICAgIC8vLyBUaGUgc3VtIG9mIGFsbCBsZW5ndGhzIHNob3VsZCBiZSBlcXVhbCB0byB0ZXh0TGVuZ3RoLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmZWF0dXJlUmFuZ2VzIj5UaGUgbnVtYmVyIG9mIGZlYXR1cmUgcmFuZ2VzLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaEFkdmFuY2VzIj5UaGUgYWR2YW5jZSB3aWR0aCBvZiBlYWNoIGdseXBoLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaE9mZnNldHMiPlRoZSBvZmZzZXQgb2YgdGhlIG9yaWdpbiBvZiBlYWNoIGdseXBoLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0R2RpQ29tcGF0aWJsZUdseXBoUGxhY2VtZW50cykoCisgICAgICAgIF9faW5fZWNvdW50KHRleHRMZW5ndGgpIFdDSEFSIGNvbnN0KiB0ZXh0U3RyaW5nLAorICAgICAgICBfX2luX2Vjb3VudCh0ZXh0TGVuZ3RoKSBVSU5UMTYgY29uc3QqIGNsdXN0ZXJNYXAsCisgICAgICAgIF9faW5fZWNvdW50KHRleHRMZW5ndGgpIERXUklURV9TSEFQSU5HX1RFWFRfUFJPUEVSVElFUyogdGV4dFByb3BzLAorICAgICAgICBVSU5UMzIgdGV4dExlbmd0aCwKKyAgICAgICAgX19pbl9lY291bnQoZ2x5cGhDb3VudCkgVUlOVDE2IGNvbnN0KiBnbHlwaEluZGljZXMsCisgICAgICAgIF9faW5fZWNvdW50KGdseXBoQ291bnQpIERXUklURV9TSEFQSU5HX0dMWVBIX1BST1BFUlRJRVMgY29uc3QqIGdseXBoUHJvcHMsCisgICAgICAgIFVJTlQzMiBnbHlwaENvdW50LAorICAgICAgICBJRFdyaXRlRm9udEZhY2UgKiBmb250RmFjZSwKKyAgICAgICAgRkxPQVQgZm9udEVtU2l6ZSwKKyAgICAgICAgRkxPQVQgcGl4ZWxzUGVyRGlwLAorICAgICAgICBfX2luX29wdCBEV1JJVEVfTUFUUklYIGNvbnN0KiB0cmFuc2Zvcm0sCisgICAgICAgIEJPT0wgdXNlR2RpTmF0dXJhbCwKKyAgICAgICAgQk9PTCBpc1NpZGV3YXlzLAorICAgICAgICBCT09MIGlzUmlnaHRUb0xlZnQsCisgICAgICAgIF9faW4gRFdSSVRFX1NDUklQVF9BTkFMWVNJUyBjb25zdCogc2NyaXB0QW5hbHlzaXMsCisgICAgICAgIF9faW5fel9vcHQgV0NIQVIgY29uc3QqIGxvY2FsZU5hbWUsCisgICAgICAgIF9faW5fZWNvdW50X29wdChmZWF0dXJlUmFuZ2VzKSBEV1JJVEVfVFlQT0dSQVBISUNfRkVBVFVSRVMgY29uc3QqKiBmZWF0dXJlcywKKyAgICAgICAgX19pbl9lY291bnRfb3B0KGZlYXR1cmVSYW5nZXMpIFVJTlQzMiBjb25zdCogZmVhdHVyZVJhbmdlTGVuZ3RocywKKyAgICAgICAgVUlOVDMyIGZlYXR1cmVSYW5nZXMsCisgICAgICAgIF9fb3V0X2Vjb3VudChnbHlwaENvdW50KSBGTE9BVCogZ2x5cGhBZHZhbmNlcywKKyAgICAgICAgX19vdXRfZWNvdW50KGdseXBoQ291bnQpIERXUklURV9HTFlQSF9PRkZTRVQqIGdseXBoT2Zmc2V0cworICAgICAgICApIFBVUkU7Cit9OworCisvLy8gPHN1bW1hcnk+CisvLy8gVGhlIERXUklURV9HTFlQSF9SVU4gc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgYnkgcmVuZGVyZXJzCisvLy8gdG8gZHJhdyBnbHlwaCBydW5zLiBBbGwgY29vcmRpbmF0ZXMgYXJlIGluIGRldmljZSBpbmRlcGVuZGVudCBwaXhlbHMgKERJUHMpLgorLy8vIDwvc3VtbWFyeT4KK3N0cnVjdCBEV1JJVEVfR0xZUEhfUlVOCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGUgcGh5c2ljYWwgZm9udCBmYWNlIHRvIGRyYXcgd2l0aC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIF9fbm90bnVsbCBJRFdyaXRlRm9udEZhY2UqIGZvbnRGYWNlOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBMb2dpY2FsIHNpemUgb2YgdGhlIGZvbnQgaW4gRElQcywgbm90IHBvaW50cyAoZXF1YWxzIDEvOTYgaW5jaCkuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBGTE9BVCBmb250RW1TaXplOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGUgbnVtYmVyIG9mIGdseXBocy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFVJTlQzMiBnbHlwaENvdW50OworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGUgaW5kaWNlcyB0byByZW5kZXIuCisgICAgLy8vIDwvc3VtbWFyeT4gICAgCisgICAgX19maWVsZF9lY291bnQoZ2x5cGhDb3VudCkgVUlOVDE2IGNvbnN0KiBnbHlwaEluZGljZXM7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdseXBoIGFkdmFuY2Ugd2lkdGhzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgX19maWVsZF9lY291bnRfb3B0KGdseXBoQ291bnQpIEZMT0FUIGNvbnN0KiBnbHlwaEFkdmFuY2VzOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHbHlwaCBvZmZzZXRzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgX19maWVsZF9lY291bnRfb3B0KGdseXBoQ291bnQpIERXUklURV9HTFlQSF9PRkZTRVQgY29uc3QqIGdseXBoT2Zmc2V0czsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gSWYgdHJ1ZSwgc3BlY2lmaWVzIHRoYXQgZ2x5cGhzIGFyZSByb3RhdGVkIDkwIGRlZ3JlZXMgdG8gdGhlIGxlZnQgYW5kCisgICAgLy8vIHZlcnRpY2FsIG1ldHJpY3MgYXJlIHVzZWQuIFZlcnRpY2FsIHdyaXRpbmcgaXMgYWNoaWV2ZWQgYnkgc3BlY2lmeWluZworICAgIC8vLyBpc1NpZGV3YXlzID0gdHJ1ZSBhbmQgcm90YXRpbmcgdGhlIGVudGlyZSBydW4gOTAgZGVncmVlcyB0byB0aGUgcmlnaHQKKyAgICAvLy8gdmlhIGEgcm90YXRlIHRyYW5zZm9ybS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIEJPT0wgaXNTaWRld2F5czsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVGhlIGltcGxpY2l0IHJlc29sdmVkIGJpZGkgbGV2ZWwgb2YgdGhlIHJ1bi4gT2RkIGxldmVscyBpbmRpY2F0ZQorICAgIC8vLyByaWdodC10by1sZWZ0IGxhbmd1YWdlcyBsaWtlIEhlYnJldyBhbmQgQXJhYmljLCB3aGlsZSBldmVuIGxldmVscworICAgIC8vLyBpbmRpY2F0ZSBsZWZ0LXRvLXJpZ2h0IGxhbmd1YWdlcyBsaWtlIEVuZ2xpc2ggYW5kIEphcGFuZXNlICh3aGVuCisgICAgLy8vIHdyaXR0ZW4gaG9yaXpvbnRhbGx5KS4gRm9yIHJpZ2h0LXRvLWxlZnQgbGFuZ3VhZ2VzLCB0aGUgdGV4dCBvcmlnaW4KKyAgICAvLy8gaXMgb24gdGhlIHJpZ2h0LCBhbmQgdGV4dCBzaG91bGQgYmUgZHJhd24gdG8gdGhlIGxlZnQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBVSU5UMzIgYmlkaUxldmVsOworfTsKKworLy8vIDxzdW1tYXJ5PgorLy8vIFRoZSBEV1JJVEVfR0xZUEhfUlVOX0RFU0NSSVBUSU9OIHN0cnVjdHVyZSBjb250YWlucyBhZGRpdGlvbmFsIHByb3BlcnRpZXMKKy8vLyByZWxhdGVkIHRvIHRob3NlIGluIERXUklURV9HTFlQSF9SVU4uCisvLy8gPC9zdW1tYXJ5Pgorc3RydWN0IERXUklURV9HTFlQSF9SVU5fREVTQ1JJUFRJT04KK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFRoZSBsb2NhbGUgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBydW4uCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBfX251bGx0ZXJtaW5hdGVkIFdDSEFSIGNvbnN0KiBsb2NhbGVOYW1lOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGUgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlIGdseXBocy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIF9fZmllbGRfZWNvdW50KHN0cmluZ0xlbmd0aCkgV0NIQVIgY29uc3QqIHN0cmluZzsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIChVVEYxNiBjb2RlLXVuaXRzKS4KKyAgICAvLy8gTm90ZSB0aGF0IHRoaXMgbWF5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBudW1iZXIgb2YgZ2x5cGhzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgVUlOVDMyIHN0cmluZ0xlbmd0aDsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQW4gYXJyYXkgb2YgaW5kaWNlcyB0byB0aGUgZ2x5cGggaW5kaWNlcyBhcnJheSwgb2YgdGhlIGZpcnN0IGdseXBocyBvZgorICAgIC8vLyBhbGwgdGhlIGdseXBoIGNsdXN0ZXJzIG9mIHRoZSBnbHlwaHMgdG8gcmVuZGVyLiAKKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIF9fZmllbGRfZWNvdW50KHN0cmluZ0xlbmd0aCkgVUlOVDE2IGNvbnN0KiBjbHVzdGVyTWFwOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBDb3JyZXNwb25kaW5nIHRleHQgcG9zaXRpb24gaW4gdGhlIG9yaWdpbmFsIHN0cmluZworICAgIC8vLyB0aGlzIGdseXBoIHJ1biBjYW1lIGZyb20uCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBVSU5UMzIgdGV4dFBvc2l0aW9uOworfTsKKworLy8vIDxzdW1tYXJ5PgorLy8vIFRoZSBEV1JJVEVfVU5ERVJMSU5FIHN0cnVjdHVyZSBjb250YWlucyBhYm91dCB0aGUgc2l6ZSBhbmQgcGxhY2VtZW50IG9mIAorLy8vIHVuZGVybGluZXMuIEFsbCBjb29yZGluYXRlcyBhcmUgaW4gZGV2aWNlIGluZGVwZW5kZW50IHBpeGVscyAoRElQcykuCisvLy8gPC9zdW1tYXJ5Pgorc3RydWN0IERXUklURV9VTkRFUkxJTkUKK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFdpZHRoIG9mIHRoZSB1bmRlcmxpbmUsIG1lYXN1cmVkIHBhcmFsbGVsIHRvIHRoZSBiYXNlbGluZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIEZMT0FUIHdpZHRoOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGlja25lc3Mgb2YgdGhlIHVuZGVybGluZSwgbWVhc3VyZWQgcGVycGVuZGljdWxhciB0byB0aGUKKyAgICAvLy8gYmFzZWxpbmUuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBGTE9BVCB0aGlja25lc3M7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIE9mZnNldCBvZiB0aGUgdW5kZXJsaW5lIGZyb20gdGhlIGJhc2VsaW5lLgorICAgIC8vLyBBIHBvc2l0aXZlIG9mZnNldCByZXByZXNlbnRzIGEgcG9zaXRpb24gYmVsb3cgdGhlIGJhc2VsaW5lIGFuZAorICAgIC8vLyBhIG5lZ2F0aXZlIG9mZnNldCBpcyBhYm92ZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIEZMT0FUIG9mZnNldDsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gSGVpZ2h0IG9mIHRoZSB0YWxsZXN0IHJ1biB3aGVyZSB0aGUgdW5kZXJsaW5lIGFwcGxpZXMuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBGTE9BVCBydW5IZWlnaHQ7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFJlYWRpbmcgZGlyZWN0aW9uIG9mIHRoZSB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGUgdW5kZXJsaW5lLiAgVGhpcyAKKyAgICAvLy8gdmFsdWUgaXMgdXNlZCB0byBpbnRlcnByZXQgd2hldGhlciB0aGUgd2lkdGggdmFsdWUgcnVucyBob3Jpem9udGFsbHkgCisgICAgLy8vIG9yIHZlcnRpY2FsbHkuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfUkVBRElOR19ESVJFQ1RJT04gcmVhZGluZ0RpcmVjdGlvbjsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gRmxvdyBkaXJlY3Rpb24gb2YgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSB1bmRlcmxpbmUuICBUaGlzIHZhbHVlCisgICAgLy8vIGlzIHVzZWQgdG8gaW50ZXJwcmV0IHdoZXRoZXIgdGhlIHRoaWNrbmVzcyB2YWx1ZSBhZHZhbmNlcyB0b3AgdG8gCisgICAgLy8vIGJvdHRvbSwgbGVmdCB0byByaWdodCwgb3IgcmlnaHQgdG8gbGVmdC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9GTE9XX0RJUkVDVElPTiBmbG93RGlyZWN0aW9uOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBMb2NhbGUgb2YgdGhlIHRleHQgdGhlIHVuZGVybGluZSBpcyBiZWluZyBkcmF3biB1bmRlci4gQ2FuIGJlCisgICAgLy8vIHBlcnRpbmVudCB3aGVyZSB0aGUgbG9jYWxlIGFmZmVjdHMgaG93IHRoZSB1bmRlcmxpbmUgaXMgZHJhd24uCisgICAgLy8vIEZvciBleGFtcGxlLCBpbiB2ZXJ0aWNhbCB0ZXh0LCB0aGUgdW5kZXJsaW5lIGJlbG9uZ3Mgb24gdGhlCisgICAgLy8vIGxlZnQgZm9yIENoaW5lc2UgYnV0IG9uIHRoZSByaWdodCBmb3IgSmFwYW5lc2UuCisgICAgLy8vIFRoaXMgY2hvaWNlIGlzIGNvbXBsZXRlbHkgbGVmdCB1cCB0byBoaWdoZXIgbGV2ZWxzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgX19udWxsdGVybWluYXRlZCBXQ0hBUiBjb25zdCogbG9jYWxlTmFtZTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVGhlIG1lYXN1cmluZyBtb2RlIGNhbiBiZSB1c2VmdWwgdG8gdGhlIHJlbmRlcmVyIHRvIGRldGVybWluZSBob3cKKyAgICAvLy8gdW5kZXJsaW5lcyBhcmUgcmVuZGVyZWQsIGUuZy4gcm91bmRpbmcgdGhlIHRoaWNrbmVzcyB0byBhIHdob2xlIHBpeGVsCisgICAgLy8vIGluIEdESS1jb21wYXRpYmxlIG1vZGVzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX01FQVNVUklOR19NT0RFIG1lYXN1cmluZ01vZGU7Cit9OworCisvLy8gPHN1bW1hcnk+CisvLy8gVGhlIERXUklURV9TVFJJS0VUSFJPVUdIIHN0cnVjdHVyZSBjb250YWlucyBhYm91dCB0aGUgc2l6ZSBhbmQgcGxhY2VtZW50IG9mIAorLy8vIHN0cmlja3Rocm91Z2hzLiBBbGwgY29vcmRpbmF0ZXMgYXJlIGluIGRldmljZSBpbmRlcGVuZGVudCBwaXhlbHMgKERJUHMpLgorLy8vIDwvc3VtbWFyeT4KK3N0cnVjdCBEV1JJVEVfU1RSSUtFVEhST1VHSAoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gV2lkdGggb2YgdGhlIHN0cmlrZXRocm91Z2gsIG1lYXN1cmVkIHBhcmFsbGVsIHRvIHRoZSBiYXNlbGluZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIEZMT0FUIHdpZHRoOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGlja25lc3Mgb2YgdGhlIHN0cmlrZXRocm91Z2gsIG1lYXN1cmVkIHBlcnBlbmRpY3VsYXIgdG8gdGhlCisgICAgLy8vIGJhc2VsaW5lLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRkxPQVQgdGhpY2tuZXNzOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBPZmZzZXQgb2YgdGhlIHN0aWtldGhyb3VnaCBmcm9tIHRoZSBiYXNlbGluZS4KKyAgICAvLy8gQSBwb3NpdGl2ZSBvZmZzZXQgcmVwcmVzZW50cyBhIHBvc2l0aW9uIGJlbG93IHRoZSBiYXNlbGluZSBhbmQKKyAgICAvLy8gYSBuZWdhdGl2ZSBvZmZzZXQgaXMgYWJvdmUuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBGTE9BVCBvZmZzZXQ7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFJlYWRpbmcgZGlyZWN0aW9uIG9mIHRoZSB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RyaWtldGhyb3VnaC4gIFRoaXMKKyAgICAvLy8gdmFsdWUgaXMgdXNlZCB0byBpbnRlcnByZXQgd2hldGhlciB0aGUgd2lkdGggdmFsdWUgcnVucyBob3Jpem9udGFsbHkgCisgICAgLy8vIG9yIHZlcnRpY2FsbHkuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfUkVBRElOR19ESVJFQ1RJT04gcmVhZGluZ0RpcmVjdGlvbjsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gRmxvdyBkaXJlY3Rpb24gb2YgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdHJpa2V0aHJvdWdoLiAgVGhpcyAKKyAgICAvLy8gdmFsdWUgaXMgdXNlZCB0byBpbnRlcnByZXQgd2hldGhlciB0aGUgdGhpY2tuZXNzIHZhbHVlIGFkdmFuY2VzIHRvcCB0bworICAgIC8vLyBib3R0b20sIGxlZnQgdG8gcmlnaHQsIG9yIHJpZ2h0IHRvIGxlZnQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfRkxPV19ESVJFQ1RJT04gZmxvd0RpcmVjdGlvbjsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gTG9jYWxlIG9mIHRoZSByYW5nZS4gQ2FuIGJlIHBlcnRpbmVudCB3aGVyZSB0aGUgbG9jYWxlIGFmZmVjdHMgdGhlIHN0eWxlLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgX19udWxsdGVybWluYXRlZCBXQ0hBUiBjb25zdCogbG9jYWxlTmFtZTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVGhlIG1lYXN1cmluZyBtb2RlIGNhbiBiZSB1c2VmdWwgdG8gdGhlIHJlbmRlcmVyIHRvIGRldGVybWluZSBob3cKKyAgICAvLy8gdW5kZXJsaW5lcyBhcmUgcmVuZGVyZWQsIGUuZy4gcm91bmRpbmcgdGhlIHRoaWNrbmVzcyB0byBhIHdob2xlIHBpeGVsCisgICAgLy8vIGluIEdESS1jb21wYXRpYmxlIG1vZGVzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX01FQVNVUklOR19NT0RFIG1lYXN1cmluZ01vZGU7Cit9OworCisvLy8gPHN1bW1hcnk+CisvLy8gVGhlIERXUklURV9MSU5FX01FVFJJQ1Mgc3RydWN0dXJlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgZm9ybWF0dGVkCisvLy8gbGluZSBvZiB0ZXh0LgorLy8vIDwvc3VtbWFyeT4KK3N0cnVjdCBEV1JJVEVfTElORV9NRVRSSUNTCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGUgbnVtYmVyIG9mIHRvdGFsIHRleHQgcG9zaXRpb25zIGluIHRoZSBsaW5lLgorICAgIC8vLyBUaGlzIGluY2x1ZGVzIGFueSB0cmFpbGluZyB3aGl0ZXNwYWNlIGFuZCBuZXdsaW5lIGNoYXJhY3RlcnMuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBVSU5UMzIgbGVuZ3RoOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGUgbnVtYmVyIG9mIHdoaXRlc3BhY2UgcG9zaXRpb25zIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUuICBOZXdsaW5lCisgICAgLy8vIHNlcXVlbmNlcyBhcmUgY29uc2lkZXJlZCB3aGl0ZXNwYWNlLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgVUlOVDMyIHRyYWlsaW5nV2hpdGVzcGFjZUxlbmd0aDsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBuZXdsaW5lIHNlcXVlbmNlIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUuCisgICAgLy8vIElmIHRoZSBjb3VudCBpcyB6ZXJvLCB0aGVuIHRoZSBsaW5lIHdhcyBlaXRoZXIgd3JhcHBlZCBvciBpdCBpcyB0aGUKKyAgICAvLy8gZW5kIG9mIHRoZSB0ZXh0LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgVUlOVDMyIG5ld2xpbmVMZW5ndGg7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEhlaWdodCBvZiB0aGUgbGluZSBhcyBtZWFzdXJlZCBmcm9tIHRvcCB0byBib3R0b20uCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBGTE9BVCBoZWlnaHQ7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIERpc3RhbmNlIGZyb20gdGhlIHRvcCBvZiB0aGUgbGluZSB0byBpdHMgYmFzZWxpbmUuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBGTE9BVCBiYXNlbGluZTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVGhlIGxpbmUgaXMgdHJpbW1lZC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIEJPT0wgaXNUcmltbWVkOworfTsKKworCisvLy8gPHN1bW1hcnk+CisvLy8gVGhlIERXUklURV9DTFVTVEVSX01FVFJJQ1Mgc3RydWN0dXJlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGEgZ2x5cGggY2x1c3Rlci4KKy8vLyA8L3N1bW1hcnk+CitzdHJ1Y3QgRFdSSVRFX0NMVVNURVJfTUVUUklDUworeworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVGhlIHRvdGFsIGFkdmFuY2Ugd2lkdGggb2YgYWxsIGdseXBocyBpbiB0aGUgY2x1c3Rlci4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIEZMT0FUIHdpZHRoOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGUgbnVtYmVyIG9mIHRleHQgcG9zaXRpb25zIGluIHRoZSBjbHVzdGVyLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgVUlOVDE2IGxlbmd0aDsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gSW5kaWNhdGUgd2hldGhlciBsaW5lIGNhbiBiZSBicm9rZW4gcmlnaHQgYWZ0ZXIgdGhlIGNsdXN0ZXIuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBVSU5UMTYgY2FuV3JhcExpbmVBZnRlciA6IDE7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEluZGljYXRlIHdoZXRoZXIgdGhlIGNsdXN0ZXIgY29ycmVzcG9uZHMgdG8gd2hpdGVzcGFjZSBjaGFyYWN0ZXIuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBVSU5UMTYgaXNXaGl0ZXNwYWNlIDogMTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gSW5kaWNhdGUgd2hldGhlciB0aGUgY2x1c3RlciBjb3JyZXNwb25kcyB0byBhIG5ld2xpbmUgY2hhcmFjdGVyLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgVUlOVDE2IGlzTmV3bGluZSA6IDE7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEluZGljYXRlIHdoZXRoZXIgdGhlIGNsdXN0ZXIgY29ycmVzcG9uZHMgdG8gc29mdCBoeXBoZW4gY2hhcmFjdGVyLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgVUlOVDE2IGlzU29mdEh5cGhlbiA6IDE7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEluZGljYXRlIHdoZXRoZXIgdGhlIGNsdXN0ZXIgaXMgcmVhZCBmcm9tIHJpZ2h0IHRvIGxlZnQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBVSU5UMTYgaXNSaWdodFRvTGVmdCA6IDE7CisKKyAgICBVSU5UMTYgcGFkZGluZyA6IDExOworfTsKKworCisvLy8gPHN1bW1hcnk+CisvLy8gT3ZlcmFsbCBtZXRyaWNzIGFzc29jaWF0ZWQgd2l0aCB0ZXh0IGFmdGVyIGxheW91dC4KKy8vLyBBbGwgY29vcmRpbmF0ZXMgYXJlIGluIGRldmljZSBpbmRlcGVuZGVudCBwaXhlbHMgKERJUHMpLgorLy8vIDwvc3VtbWFyeT4KK3N0cnVjdCBEV1JJVEVfVEVYVF9NRVRSSUNTCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBMZWZ0LW1vc3QgcG9pbnQgb2YgZm9ybWF0dGVkIHRleHQgcmVsYXRpdmUgdG8gbGF5b3V0IGJveAorICAgIC8vLyAoZXhjbHVkaW5nIGFueSBnbHlwaCBvdmVyaGFuZykuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBGTE9BVCBsZWZ0OworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUb3AtbW9zdCBwb2ludCBvZiBmb3JtYXR0ZWQgdGV4dCByZWxhdGl2ZSB0byBsYXlvdXQgYm94CisgICAgLy8vIChleGNsdWRpbmcgYW55IGdseXBoIG92ZXJoYW5nKS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIEZMT0FUIHRvcDsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVGhlIHdpZHRoIG9mIHRoZSBmb3JtYXR0ZWQgdGV4dCBpZ25vcmluZyB0cmFpbGluZyB3aGl0ZXNwYWNlCisgICAgLy8vIGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRkxPQVQgd2lkdGg7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFRoZSB3aWR0aCBvZiB0aGUgZm9ybWF0dGVkIHRleHQgdGFraW5nIGludG8gYWNjb3VudCB0aGUKKyAgICAvLy8gdHJhaWxpbmcgd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIEZMT0FUIHdpZHRoSW5jbHVkaW5nVHJhaWxpbmdXaGl0ZXNwYWNlOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGUgaGVpZ2h0IG9mIHRoZSBmb3JtYXR0ZWQgdGV4dC4gVGhlIGhlaWdodCBvZiBhbiBlbXB0eSBzdHJpbmcKKyAgICAvLy8gaXMgZGV0ZXJtaW5lZCBieSB0aGUgc2l6ZSBvZiB0aGUgZGVmYXVsdCBmb250J3MgbGluZSBoZWlnaHQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBGTE9BVCBoZWlnaHQ7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEluaXRpYWwgd2lkdGggZ2l2ZW4gdG8gdGhlIGxheW91dC4gRGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHRleHQKKyAgICAvLy8gd2FzIHdyYXBwZWQgb3Igbm90LCBpdCBjYW4gYmUgZWl0aGVyIGxhcmdlciBvciBzbWFsbGVyIHRoYW4gdGhlCisgICAgLy8vIHRleHQgY29udGVudCB3aWR0aC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIEZMT0FUIGxheW91dFdpZHRoOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBJbml0aWFsIGhlaWdodCBnaXZlbiB0byB0aGUgbGF5b3V0LiBEZXBlbmRpbmcgb24gdGhlIGxlbmd0aCBvZiB0aGUKKyAgICAvLy8gdGV4dCwgaXQgbWF5IGJlIGxhcmdlciBvciBzbWFsbGVyIHRoYW4gdGhlIHRleHQgY29udGVudCBoZWlnaHQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBGTE9BVCBsYXlvdXRIZWlnaHQ7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFRoZSBtYXhpbXVtIHJlb3JkZXJpbmcgY291bnQgb2YgYW55IGxpbmUgb2YgdGV4dCwgdXNlZAorICAgIC8vLyB0byBjYWxjdWxhdGUgdGhlIG1vc3QgbnVtYmVyIG9mIGhpdC10ZXN0aW5nIGJveGVzIG5lZWRlZC4KKyAgICAvLy8gSWYgdGhlIGxheW91dCBoYXMgbm8gYmlkaXJlY3Rpb25hbCB0ZXh0IG9yIG5vIHRleHQgYXQgYWxsLAorICAgIC8vLyB0aGUgbWluaW11bSBsZXZlbCBpcyAxLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgVUlOVDMyIG1heEJpZGlSZW9yZGVyaW5nRGVwdGg7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFRvdGFsIG51bWJlciBvZiBsaW5lcy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFVJTlQzMiBsaW5lQ291bnQ7Cit9OworCisKKy8vLyA8c3VtbWFyeT4KKy8vLyBQcm9wZXJ0aWVzIGRlc2NyaWJpbmcgdGhlIGdlb21ldHJpYyBtZWFzdXJlbWVudCBvZiBhbgorLy8vIGFwcGxpY2F0aW9uLWRlZmluZWQgaW5saW5lIG9iamVjdC4KKy8vLyA8L3N1bW1hcnk+CitzdHJ1Y3QgRFdSSVRFX0lOTElORV9PQkpFQ1RfTUVUUklDUworeworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gV2lkdGggb2YgdGhlIGlubGluZSBvYmplY3QuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBGTE9BVCB3aWR0aDsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gSGVpZ2h0IG9mIHRoZSBpbmxpbmUgb2JqZWN0IGFzIG1lYXN1cmVkIGZyb20gdG9wIHRvIGJvdHRvbS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIEZMT0FUIGhlaWdodDsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gRGlzdGFuY2UgZnJvbSB0aGUgdG9wIG9mIHRoZSBvYmplY3QgdG8gdGhlIGJhc2VsaW5lIHdoZXJlIGl0IGlzIGxpbmVkIHVwIHdpdGggdGhlIGFkamFjZW50IHRleHQuCisgICAgLy8vIElmIHRoZSBiYXNlbGluZSBpcyBhdCB0aGUgYm90dG9tLCBiYXNlbGluZSBzaW1wbHkgZXF1YWxzIGhlaWdodC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIEZMT0FUIGJhc2VsaW5lOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBGbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgb2JqZWN0IGlzIHRvIGJlIHBsYWNlZCB1cHJpZ2h0IG9yIGFsb25nc2lkZSB0aGUgdGV4dCBiYXNlbGluZQorICAgIC8vLyBmb3IgdmVydGljYWwgdGV4dC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIEJPT0wgIHN1cHBvcnRzU2lkZXdheXM7Cit9OworCisKKy8vLyA8c3VtbWFyeT4KKy8vLyBUaGUgRFdSSVRFX09WRVJIQU5HX01FVFJJQ1Mgc3RydWN0dXJlIGhvbGRzIGhvdyBtdWNoIGFueSB2aXNpYmxlIHBpeGVscworLy8vIChpbiBESVBzKSBvdmVyc2hvb3QgZWFjaCBzaWRlIG9mIHRoZSBsYXlvdXQgb3IgaW5saW5lIG9iamVjdHMuCisvLy8gPC9zdW1tYXJ5PgorLy8vIDxyZW1hcmtzPgorLy8vIFBvc2l0aXZlIG92ZXJoYW5ncyBpbmRpY2F0ZSB0aGF0IHRoZSB2aXNpYmxlIGFyZWEgZXh0ZW5kcyBvdXRzaWRlIHRoZSBsYXlvdXQKKy8vLyBib3ggb3IgaW5saW5lIG9iamVjdCwgd2hpbGUgbmVnYXRpdmUgdmFsdWVzIG1lYW4gdGhlcmUgaXMgd2hpdGVzcGFjZSBpbnNpZGUuCisvLy8gVGhlIHJldHVybmVkIHZhbHVlcyBhcmUgdW5hZmZlY3RlZCBieSByZW5kZXJpbmcgdHJhbnNmb3JtcyBvciBwaXhlbCBzbmFwcGluZy4KKy8vLyBBZGRpdGlvbmFsbHksIHRoZXkgbWF5IG5vdCBleGFjdGx5IG1hdGNoIGZpbmFsIHRhcmdldCdzIHBpeGVsIGJvdW5kcyBhZnRlcgorLy8vIGFwcGx5aW5nIGdyaWQgZml0dGluZyBhbmQgaGludGluZy4KKy8vLyA8L3JlbWFya3M+CitzdHJ1Y3QgRFdSSVRFX09WRVJIQU5HX01FVFJJQ1MKK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFRoZSBkaXN0YW5jZSBmcm9tIHRoZSBsZWZ0LW1vc3QgdmlzaWJsZSBESVAgdG8gaXRzIGxlZnQgYWxpZ25tZW50IGVkZ2UuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBGTE9BVCBsZWZ0OworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUaGUgZGlzdGFuY2UgZnJvbSB0aGUgdG9wLW1vc3QgdmlzaWJsZSBESVAgdG8gaXRzIHRvcCBhbGlnbm1lbnQgZWRnZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIEZMT0FUIHRvcDsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVGhlIGRpc3RhbmNlIGZyb20gdGhlIHJpZ2h0LW1vc3QgdmlzaWJsZSBESVAgdG8gaXRzIHJpZ2h0IGFsaWdubWVudCBlZGdlLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRkxPQVQgcmlnaHQ7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFRoZSBkaXN0YW5jZSBmcm9tIHRoZSBib3R0b20tbW9zdCB2aXNpYmxlIERJUCB0byBpdHMgYm90dG9tIGFsaWdubWVudCBlZGdlLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRkxPQVQgYm90dG9tOworfTsKKworCisvLy8gPHN1bW1hcnk+CisvLy8gR2VvbWV0cnkgZW5jbG9zaW5nIG9mIHRleHQgcG9zaXRpb25zLgorLy8vIDwvc3VtbWFyeT4KK3N0cnVjdCBEV1JJVEVfSElUX1RFU1RfTUVUUklDUworeworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gRmlyc3QgdGV4dCBwb3NpdGlvbiB3aXRoaW4gdGhlIGdlb21ldHJ5LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgVUlOVDMyIHRleHRQb3NpdGlvbjsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gTnVtYmVyIG9mIHRleHQgcG9zaXRpb25zIHdpdGhpbiB0aGUgZ2VvbWV0cnkuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBVSU5UMzIgbGVuZ3RoOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBMZWZ0IHBvc2l0aW9uIG9mIHRoZSB0b3AtbGVmdCBjb29yZGluYXRlIG9mIHRoZSBnZW9tZXRyeS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIEZMT0FUIGxlZnQ7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFRvcCBwb3NpdGlvbiBvZiB0aGUgdG9wLWxlZnQgY29vcmRpbmF0ZSBvZiB0aGUgZ2VvbWV0cnkuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBGTE9BVCB0b3A7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdlb21ldHJ5J3Mgd2lkdGguCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBGTE9BVCB3aWR0aDsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2VvbWV0cnkncyBoZWlnaHQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBGTE9BVCBoZWlnaHQ7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEJpZGkgbGV2ZWwgb2YgdGV4dCBwb3NpdGlvbnMgZW5jbG9zZWQgd2l0aGluIHRoZSBnZW9tZXRyeS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIFVJTlQzMiBiaWRpTGV2ZWw7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdlb21ldHJ5IGVuY2xvc2VzIHRleHQ/CisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBCT09MIGlzVGV4dDsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gUmFuZ2UgaXMgdHJpbW1lZC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIEJPT0wgaXNUcmltbWVkOworfTsKKworCitpbnRlcmZhY2UgSURXcml0ZVRleHRSZW5kZXJlcjsKKworCisvLy8gPHN1bW1hcnk+CisvLy8gVGhlIElEV3JpdGVJbmxpbmVPYmplY3QgaW50ZXJmYWNlIHdyYXBzIGFuIGFwcGxpY2F0aW9uIGRlZmluZWQgaW5saW5lIGdyYXBoaWMsCisvLy8gYWxsb3dpbmcgRFdyaXRlIHRvIHF1ZXJ5IG1ldHJpY3MgYXMgaWYgaXQgd2FzIGEgZ2x5cGggaW5saW5lIHdpdGggdGhlIHRleHQuCisvLy8gPC9zdW1tYXJ5PgoraW50ZXJmYWNlIERXUklURV9ERUNMQVJFX0lOVEVSRkFDRSgiODMzOUZERTMtMTA2Ri00N2FiLTgzNzMtMUM2Mjk1RUIxMEIzIikgSURXcml0ZUlubGluZU9iamVjdCA6IHB1YmxpYyBJVW5rbm93bgoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVGhlIGFwcGxpY2F0aW9uIGltcGxlbWVudGVkIHJlbmRlcmluZyBjYWxsYmFjayAoSURXcml0ZVRleHRSZW5kZXJlcjo6RHJhd0lubGluZU9iamVjdCkKKyAgICAvLy8gY2FuIHVzZSB0aGlzIHRvIGRyYXcgdGhlIGlubGluZSBvYmplY3Qgd2l0aG91dCBuZWVkaW5nIHRvIGNhc3Qgb3IgcXVlcnkgdGhlIG9iamVjdAorICAgIC8vLyB0eXBlLiBUaGUgdGV4dCBsYXlvdXQgZG9lcyBub3QgY2FsbCB0aGlzIG1ldGhvZCBkaXJlY3RseS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iY2xpZW50RHJhd2luZ0NvbnRleHQiPlRoZSBjb250ZXh0IHBhc3NlZCB0byBJRFdyaXRlVGV4dExheW91dDo6RHJhdy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0icmVuZGVyZXIiPlRoZSByZW5kZXJlciBwYXNzZWQgdG8gSURXcml0ZVRleHRMYXlvdXQ6OkRyYXcgYXMgdGhlIG9iamVjdCdzIGNvbnRhaW5pbmcgcGFyZW50LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJvcmlnaW5YIj5YLWNvb3JkaW5hdGUgYXQgdGhlIHRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgaW5saW5lIG9iamVjdC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ib3JpZ2luWSI+WS1jb29yZGluYXRlIGF0IHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIGlubGluZSBvYmplY3QuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImlzU2lkZXdheXMiPlRoZSBvYmplY3Qgc2hvdWxkIGJlIGRyYXduIG9uIGl0cyBzaWRlLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJpc1JpZ2h0VG9MZWZ0Ij5UaGUgb2JqZWN0IGlzIGluIGFuIHJpZ2h0LXRvLWxlZnQgY29udGV4dCBhbmQgc2hvdWxkIGJlIGRyYXduIGZsaXBwZWQuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImNsaWVudERyYXdpbmdFZmZlY3QiPlRoZSBkcmF3aW5nIGVmZmVjdCBzZXQgaW4gSURXcml0ZVRleHRMYXlvdXQ6OlNldERyYXdpbmdFZmZlY3QuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChEcmF3KSgKKyAgICAgICAgX19tYXliZW51bGwgdm9pZCogY2xpZW50RHJhd2luZ0NvbnRleHQsCisgICAgICAgIElEV3JpdGVUZXh0UmVuZGVyZXIqIHJlbmRlcmVyLAorICAgICAgICBGTE9BVCBvcmlnaW5YLAorICAgICAgICBGTE9BVCBvcmlnaW5ZLAorICAgICAgICBCT09MIGlzU2lkZXdheXMsCisgICAgICAgIEJPT0wgaXNSaWdodFRvTGVmdCwKKyAgICAgICAgX19tYXliZW51bGwgSVVua25vd24qIGNsaWVudERyYXdpbmdFZmZlY3QKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUZXh0TGF5b3V0IGNhbGxzIHRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IHRoZSBtZWFzdXJlbWVudCBvZiB0aGUgaW5saW5lIG9iamVjdC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibWV0cmljcyI+UmV0dXJuZWQgbWV0cmljczwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0TWV0cmljcykoCisgICAgICAgIF9fb3V0IERXUklURV9JTkxJTkVfT0JKRUNUX01FVFJJQ1MqIG1ldHJpY3MKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBUZXh0TGF5b3V0IGNhbGxzIHRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZ2V0IHRoZSB2aXNpYmxlIGV4dGVudHMgKGluIERJUHMpIG9mIHRoZSBpbmxpbmUgb2JqZWN0LgorICAgIC8vLyBJbiB0aGUgY2FzZSBvZiBhIHNpbXBsZSBiaXRtYXAsIHdpdGggbm8gcGFkZGluZyBhbmQgbm8gb3ZlcmhhbmcsIGFsbCB0aGUgb3ZlcmhhbmdzIHdpbGwKKyAgICAvLy8gc2ltcGx5IGJlIHplcm9lcy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0ib3ZlcmhhbmdzIj5PdmVyc2hvb3Qgb2YgdmlzaWJsZSBleHRlbnRzIChpbiBESVBzKSBvdXRzaWRlIHRoZSBvYmplY3QuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIC8vLyA8cmVtYXJrcz4KKyAgICAvLy8gVGhlIG92ZXJoYW5ncyBzaG91bGQgYmUgcmV0dXJuZWQgcmVsYXRpdmUgdG8gdGhlIHJlcG9ydGVkIHNpemUgb2YgdGhlIG9iamVjdAorICAgIC8vLyAoRFdSSVRFX0lOTElORV9PQkpFQ1RfTUVUUklDUzo6d2lkdGgvaGVpZ2h0KSwgYW5kIHNob3VsZCBub3QgYmUgYmFzZWxpbmUKKyAgICAvLy8gYWRqdXN0ZWQuIElmIHlvdSBoYXZlIGFuIGltYWdlIHRoYXQgaXMgYWN0dWFsbHkgMTAweDEwMCBESVBzLCBidXQgeW91IHdhbnQgaXQKKyAgICAvLy8gc2xpZ2h0bHkgaW5zZXQgKHBlcmhhcHMgaXQgaGFzIGEgZ2xvdykgYnkgMjAgRElQcyBvbiBlYWNoIHNpZGUsIHlvdSB3b3VsZAorICAgIC8vLyByZXR1cm4gYSB3aWR0aC9oZWlnaHQgb2YgNjB4NjAgYW5kIGZvdXIgb3ZlcmhhbmdzIG9mIDIwIERJUHMuCisgICAgLy8vIDwvcmVtYXJrcz4KKyAgICBTVERNRVRIT0QoR2V0T3ZlcmhhbmdNZXRyaWNzKSgKKyAgICAgICAgX19vdXQgRFdSSVRFX09WRVJIQU5HX01FVFJJQ1MqIG92ZXJoYW5ncworICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIExheW91dCB1c2VzIHRoaXMgdG8gZGV0ZXJtaW5lIHRoZSBsaW5lIGJyZWFraW5nIGJlaGF2aW9yIG9mIHRoZSBpbmxpbmUgb2JqZWN0CisgICAgLy8vIGFtaWRzdCB0aGUgdGV4dC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iYnJlYWtDb25kaXRpb25CZWZvcmUiPkxpbmUtYnJlYWtpbmcgY29uZGl0aW9uIGJldHdlZW4gdGhlIG9iamVjdCBhbmQgdGhlIGNvbnRlbnQgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGl0LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJicmVha0NvbmRpdGlvbkFmdGVyIiA+TGluZS1icmVha2luZyBjb25kaXRpb24gYmV0d2VlbiB0aGUgb2JqZWN0IGFuZCB0aGUgY29udGVudCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgaXQuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChHZXRCcmVha0NvbmRpdGlvbnMpKAorICAgICAgICBfX291dCBEV1JJVEVfQlJFQUtfQ09ORElUSU9OKiBicmVha0NvbmRpdGlvbkJlZm9yZSwKKyAgICAgICAgX19vdXQgRFdSSVRFX0JSRUFLX0NPTkRJVElPTiogYnJlYWtDb25kaXRpb25BZnRlcgorICAgICAgICApIFBVUkU7Cit9OworCisvLy8gPHN1bW1hcnk+CisvLy8gVGhlIElEV3JpdGVQaXhlbFNuYXBwaW5nIGludGVyZmFjZSBkZWZpbmVzIHRoZSBwaXhlbCBzbmFwcGluZyBwcm9wZXJ0aWVzIG9mIGEgdGV4dCByZW5kZXJlci4KKy8vLyA8L3N1bW1hcnk+CitpbnRlcmZhY2UgRFdSSVRFX0RFQ0xBUkVfSU5URVJGQUNFKCJlYWYzYTJkYS1lY2Y0LTRkMjQtYjY0NC1iMzRmNjg0MjAyNGIiKSBJRFdyaXRlUGl4ZWxTbmFwcGluZyA6IHB1YmxpYyBJVW5rbm93bgoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHBpeGVsIHNuYXBwaW5nIGlzIGRpc2FibGVkLiBUaGUgcmVjb21tZW5kZWQgZGVmYXVsdCBpcyBGQUxTRSwKKyAgICAvLy8gdW5sZXNzIGRvaW5nIGFuaW1hdGlvbiB0aGF0IHJlcXVpcmVzIHN1YnBpeGVsIHZlcnRpY2FsIHBsYWNlbWVudC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iY2xpZW50RHJhd2luZ0NvbnRleHQiPlRoZSBjb250ZXh0IHBhc3NlZCB0byBJRFdyaXRlVGV4dExheW91dDo6RHJhdy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaXNEaXNhYmxlZCI+UmVjZWl2ZXMgVFJVRSBpZiBwaXhlbCBzbmFwcGluZyBpcyBkaXNhYmxlZCBvciBGQUxTRSBpZiBpdCBub3QuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChJc1BpeGVsU25hcHBpbmdEaXNhYmxlZCkoCisgICAgICAgIF9fbWF5YmVudWxsIHZvaWQqIGNsaWVudERyYXdpbmdDb250ZXh0LAorICAgICAgICBfX291dCBCT09MKiBpc0Rpc2FibGVkCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0cyB0aGUgY3VycmVudCB0cmFuc2Zvcm0gdGhhdCBtYXBzIGFic3RyYWN0IGNvb3JkaW5hdGVzIHRvIERJUHMsCisgICAgLy8vIHdoaWNoIG1heSBkaXNhYmxlIHBpeGVsIHNuYXBwaW5nIHVwb24gYW55IHJvdGF0aW9uIG9yIHNoZWFyLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJjbGllbnREcmF3aW5nQ29udGV4dCI+VGhlIGNvbnRleHQgcGFzc2VkIHRvIElEV3JpdGVUZXh0TGF5b3V0OjpEcmF3LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0cmFuc2Zvcm0iPlJlY2VpdmVzIHRoZSB0cmFuc2Zvcm0uPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChHZXRDdXJyZW50VHJhbnNmb3JtKSgKKyAgICAgICAgX19tYXliZW51bGwgdm9pZCogY2xpZW50RHJhd2luZ0NvbnRleHQsCisgICAgICAgIF9fb3V0IERXUklURV9NQVRSSVgqIHRyYW5zZm9ybQorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldHMgdGhlIG51bWJlciBvZiBwaHlzaWNhbCBwaXhlbHMgcGVyIERJUC4gQSBESVAgKGRldmljZS1pbmRlcGVuZGVudCBwaXhlbCkgaXMgMS85NiBpbmNoLAorICAgIC8vLyBzbyB0aGUgcGl4ZWxzUGVyRGlwIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgbG9naWNhbCBwaXhlbHMgcGVyIGluY2ggZGl2aWRlZCBieSA5NiAoeWllbGRpbmcKKyAgICAvLy8gYSB2YWx1ZSBvZiAxIGZvciA5NiBEUEkgYW5kIDEuMjUgZm9yIDEyMCkuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImNsaWVudERyYXdpbmdDb250ZXh0Ij5UaGUgY29udGV4dCBwYXNzZWQgdG8gSURXcml0ZVRleHRMYXlvdXQ6OkRyYXcuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InBpeGVsc1BlckRpcCI+UmVjZWl2ZXMgdGhlIG51bWJlciBvZiBwaHlzaWNhbCBwaXhlbHMgcGVyIERJUC48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKEdldFBpeGVsc1BlckRpcCkoCisgICAgICAgIF9fbWF5YmVudWxsIHZvaWQqIGNsaWVudERyYXdpbmdDb250ZXh0LAorICAgICAgICBfX291dCBGTE9BVCogcGl4ZWxzUGVyRGlwCisgICAgICAgICkgUFVSRTsKK307CisKKy8vLyA8c3VtbWFyeT4KKy8vLyBUaGUgSURXcml0ZVRleHRMYXlvdXQgaW50ZXJmYWNlIHJlcHJlc2VudHMgYSBzZXQgb2YgYXBwbGljYXRpb24tZGVmaW5lZAorLy8vIGNhbGxiYWNrcyB0aGF0IHBlcmZvcm0gcmVuZGVyaW5nIG9mIHRleHQsIGlubGluZSBvYmplY3RzLCBhbmQgZGVjb3JhdGlvbnMKKy8vLyBzdWNoIGFzIHVuZGVybGluZXMuCisvLy8gPC9zdW1tYXJ5PgoraW50ZXJmYWNlIERXUklURV9ERUNMQVJFX0lOVEVSRkFDRSgiZWY4YTgxMzUtNWNjNi00NWZlLTg4MjUtYzVhMDcyNGViODE5IikgSURXcml0ZVRleHRSZW5kZXJlciA6IHB1YmxpYyBJRFdyaXRlUGl4ZWxTbmFwcGluZworeworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gSURXcml0ZVRleHRMYXlvdXQ6OkRyYXcgY2FsbHMgdGhpcyBmdW5jdGlvbiB0byBpbnN0cnVjdCB0aGUgY2xpZW50IHRvCisgICAgLy8vIHJlbmRlciBhIHJ1biBvZiBnbHlwaHMuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImNsaWVudERyYXdpbmdDb250ZXh0Ij5UaGUgY29udGV4dCBwYXNzZWQgdG8gCisgICAgLy8vIElEV3JpdGVUZXh0TGF5b3V0OjpEcmF3LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJiYXNlbGluZU9yaWdpblgiPlgtY29vcmRpbmF0ZSBvZiB0aGUgYmFzZWxpbmUuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImJhc2VsaW5lT3JpZ2luWSI+WS1jb29yZGluYXRlIG9mIHRoZSBiYXNlbGluZS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibWVhc3VyaW5nTW9kZSI+U3BlY2lmaWVzIG1lYXN1cmluZyBtZXRob2QgZm9yIGdseXBocyBpbiB0aGUgcnVuLgorICAgIC8vLyBSZW5kZXJlciBpbXBsZW1lbnRhdGlvbnMgbWF5IGNob29zZSBkaWZmZXJlbnQgcmVuZGVyaW5nIG1vZGVzIGZvciBnaXZlbiBtZWFzdXJpbmcgbWV0aG9kcywKKyAgICAvLy8gYnV0IGJlc3QgcmVzdWx0cyBhcmUgc2VlbiB3aGVuIHRoZSByZW5kZXJpbmcgbW9kZSBtYXRjaGVzIHRoZSBjb3JyZXNwb25kaW5nIG1lYXN1cmluZyBtb2RlOgorICAgIC8vLyBEV1JJVEVfUkVOREVSSU5HX01PREVfQ0xFQVJUWVBFX05BVFVSQUwgZm9yIERXUklURV9NRUFTVVJJTkdfTU9ERV9OQVRVUkFMCisgICAgLy8vIERXUklURV9SRU5ERVJJTkdfTU9ERV9DTEVBUlRZUEVfR0RJX0NMQVNTSUMgZm9yIERXUklURV9NRUFTVVJJTkdfTU9ERV9HRElfQ0xBU1NJQworICAgIC8vLyBEV1JJVEVfUkVOREVSSU5HX01PREVfQ0xFQVJUWVBFX0dESV9OQVRVUkFMIGZvciBEV1JJVEVfTUVBU1VSSU5HX01PREVfR0RJX05BVFVSQUwKKyAgICAvLy8gPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImdseXBoUnVuIj5UaGUgZ2x5cGggcnVuIHRvIGRyYXcuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImdseXBoUnVuRGVzY3JpcHRpb24iPlByb3BlcnRpZXMgb2YgdGhlIGNoYXJhY3RlcnMgCisgICAgLy8vIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJ1bi48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iY2xpZW50RHJhd2luZ0VmZmVjdCI+VGhlIGRyYXdpbmcgZWZmZWN0IHNldCBpbgorICAgIC8vLyBJRFdyaXRlVGV4dExheW91dDo6U2V0RHJhd2luZ0VmZmVjdC48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKERyYXdHbHlwaFJ1bikoCisgICAgICAgIF9fbWF5YmVudWxsIHZvaWQqIGNsaWVudERyYXdpbmdDb250ZXh0LAorICAgICAgICBGTE9BVCBiYXNlbGluZU9yaWdpblgsCisgICAgICAgIEZMT0FUIGJhc2VsaW5lT3JpZ2luWSwKKyAgICAgICAgRFdSSVRFX01FQVNVUklOR19NT0RFIG1lYXN1cmluZ01vZGUsCisgICAgICAgIF9faW4gRFdSSVRFX0dMWVBIX1JVTiBjb25zdCogZ2x5cGhSdW4sCisgICAgICAgIF9faW4gRFdSSVRFX0dMWVBIX1JVTl9ERVNDUklQVElPTiBjb25zdCogZ2x5cGhSdW5EZXNjcmlwdGlvbiwKKyAgICAgICAgX19tYXliZW51bGwgSVVua25vd24qIGNsaWVudERyYXdpbmdFZmZlY3QKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBJRFdyaXRlVGV4dExheW91dDo6RHJhdyBjYWxscyB0aGlzIGZ1bmN0aW9uIHRvIGluc3RydWN0IHRoZSBjbGllbnQgdG8gZHJhdworICAgIC8vLyBhbiB1bmRlcmxpbmUuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImNsaWVudERyYXdpbmdDb250ZXh0Ij5UaGUgY29udGV4dCBwYXNzZWQgdG8gCisgICAgLy8vIElEV3JpdGVUZXh0TGF5b3V0OjpEcmF3LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJiYXNlbGluZU9yaWdpblgiPlgtY29vcmRpbmF0ZSBvZiB0aGUgYmFzZWxpbmUuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImJhc2VsaW5lT3JpZ2luWSI+WS1jb29yZGluYXRlIG9mIHRoZSBiYXNlbGluZS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idW5kZXJsaW5lIj5VbmRlcmxpbmUgbG9naWNhbCBpbmZvcm1hdGlvbi48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iY2xpZW50RHJhd2luZ0VmZmVjdCI+VGhlIGRyYXdpbmcgZWZmZWN0IHNldCBpbgorICAgIC8vLyBJRFdyaXRlVGV4dExheW91dDo6U2V0RHJhd2luZ0VmZmVjdC48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgLy8vIDxyZW1hcmtzPgorICAgIC8vLyBBIHNpbmdsZSB1bmRlcmxpbmUgY2FuIGJlIGJyb2tlbiBpbnRvIG11bHRpcGxlIGNhbGxzLCBkZXBlbmRpbmcgb24KKyAgICAvLy8gaG93IHRoZSBmb3JtYXR0aW5nIGNoYW5nZXMgYXR0cmlidXRlcy4gSWYgZm9udCBzaXplcy9zdHlsZXMgY2hhbmdlCisgICAgLy8vIHdpdGhpbiBhbiB1bmRlcmxpbmUsIHRoZSB0aGlja25lc3MgYW5kIG9mZnNldCB3aWxsIGJlIGF2ZXJhZ2VkCisgICAgLy8vIHdlaWdodGVkIGFjY29yZGluZyB0byBjaGFyYWN0ZXJzLgorICAgIC8vLyBUbyBnZXQgdGhlIGNvcnJlY3QgdG9wIGNvb3JkaW5hdGUgb2YgdGhlIHVuZGVybGluZSByZWN0LCBhZGQgdW5kZXJsaW5lOjpvZmZzZXQKKyAgICAvLy8gdG8gdGhlIGJhc2VsaW5lJ3MgWS4gT3RoZXJ3aXNlIHRoZSB1bmRlcmxpbmUgd2lsbCBiZSBpbW1lZGlhdGVseSB1bmRlciB0aGUgdGV4dC4KKyAgICAvLy8gVGhlIHggY29vcmRpbmF0ZSB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgYXMgdGhlIGxlZnQgc2lkZSwgcmVnYXJkbGVzcworICAgIC8vLyBvZiB0ZXh0IGRpcmVjdGlvbmFsaXR5LiBUaGlzIHNpbXBsaWZpZXMgZHJhd2luZyBhbmQgcmVkdWNlcyB0aGUKKyAgICAvLy8gcHJvYmxlbSBvZiByb3VuZC1vZmYgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBjYXVzZSBnYXBzIG9yIGEgZG91YmxlCisgICAgLy8vIHN0YW1wZWQgYWxwaGEgYmxlbmQuIFRvIGF2b2lkIGFscGhhIG92ZXJsYXAsIHJvdW5kIHRoZSBlbmQgcG9pbnRzCisgICAgLy8vIHRvIHRoZSBuZWFyZXN0IGRldmljZSBwaXhlbC4KKyAgICAvLy8gPC9yZW1hcmtzPgorICAgIFNURE1FVEhPRChEcmF3VW5kZXJsaW5lKSgKKyAgICAgICAgX19tYXliZW51bGwgdm9pZCogY2xpZW50RHJhd2luZ0NvbnRleHQsCisgICAgICAgIEZMT0FUIGJhc2VsaW5lT3JpZ2luWCwKKyAgICAgICAgRkxPQVQgYmFzZWxpbmVPcmlnaW5ZLAorICAgICAgICBfX2luIERXUklURV9VTkRFUkxJTkUgY29uc3QqIHVuZGVybGluZSwKKyAgICAgICAgX19tYXliZW51bGwgSVVua25vd24qIGNsaWVudERyYXdpbmdFZmZlY3QKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBJRFdyaXRlVGV4dExheW91dDo6RHJhdyBjYWxscyB0aGlzIGZ1bmN0aW9uIHRvIGluc3RydWN0IHRoZSBjbGllbnQgdG8gZHJhdworICAgIC8vLyBhIHN0cmlrZXRocm91Z2guCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImNsaWVudERyYXdpbmdDb250ZXh0Ij5UaGUgY29udGV4dCBwYXNzZWQgdG8gCisgICAgLy8vIElEV3JpdGVUZXh0TGF5b3V0OjpEcmF3LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJiYXNlbGluZU9yaWdpblgiPlgtY29vcmRpbmF0ZSBvZiB0aGUgYmFzZWxpbmUuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImJhc2VsaW5lT3JpZ2luWSI+WS1jb29yZGluYXRlIG9mIHRoZSBiYXNlbGluZS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RyaWtldGhyb3VnaCI+U3RyaWtldGhyb3VnaCBsb2dpY2FsIGluZm9ybWF0aW9uLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJjbGllbnREcmF3aW5nRWZmZWN0Ij5UaGUgZHJhd2luZyBlZmZlY3Qgc2V0IGluCisgICAgLy8vIElEV3JpdGVUZXh0TGF5b3V0OjpTZXREcmF3aW5nRWZmZWN0LjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICAvLy8gPHJlbWFya3M+CisgICAgLy8vIEEgc2luZ2xlIHN0cmlrZXRocm91Z2ggY2FuIGJlIGJyb2tlbiBpbnRvIG11bHRpcGxlIGNhbGxzLCBkZXBlbmRpbmcgb24KKyAgICAvLy8gaG93IHRoZSBmb3JtYXR0aW5nIGNoYW5nZXMgYXR0cmlidXRlcy4gU3RyaWtldGhyb3VnaCBpcyBub3QgYXZlcmFnZWQKKyAgICAvLy8gYWNyb3NzIGZvbnQgc2l6ZXMvc3R5bGVzIGNoYW5nZXMuCisgICAgLy8vIFRvIGdldCB0aGUgY29ycmVjdCB0b3AgY29vcmRpbmF0ZSBvZiB0aGUgc3RyaWtldGhyb3VnaCByZWN0LAorICAgIC8vLyBhZGQgc3RyaWtldGhyb3VnaDo6b2Zmc2V0IHRvIHRoZSBiYXNlbGluZSdzIFkuCisgICAgLy8vIExpa2UgdW5kZXJsaW5lcywgdGhlIHggY29vcmRpbmF0ZSB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgYXMgdGhlIGxlZnQgc2lkZSwKKyAgICAvLy8gcmVnYXJkbGVzcyBvZiB0ZXh0IGRpcmVjdGlvbmFsaXR5LgorICAgIC8vLyA8L3JlbWFya3M+CisgICAgU1RETUVUSE9EKERyYXdTdHJpa2V0aHJvdWdoKSgKKyAgICAgICAgX19tYXliZW51bGwgdm9pZCogY2xpZW50RHJhd2luZ0NvbnRleHQsCisgICAgICAgIEZMT0FUIGJhc2VsaW5lT3JpZ2luWCwKKyAgICAgICAgRkxPQVQgYmFzZWxpbmVPcmlnaW5ZLAorICAgICAgICBfX2luIERXUklURV9TVFJJS0VUSFJPVUdIIGNvbnN0KiBzdHJpa2V0aHJvdWdoLAorICAgICAgICBfX21heWJlbnVsbCBJVW5rbm93biogY2xpZW50RHJhd2luZ0VmZmVjdAorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIElEV3JpdGVUZXh0TGF5b3V0OjpEcmF3IGNhbGxzIHRoaXMgYXBwbGljYXRpb24gY2FsbGJhY2sgd2hlbiBpdCBuZWVkcyB0bworICAgIC8vLyBkcmF3IGFuIGlubGluZSBvYmplY3QuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImNsaWVudERyYXdpbmdDb250ZXh0Ij5UaGUgY29udGV4dCBwYXNzZWQgdG8gSURXcml0ZVRleHRMYXlvdXQ6OkRyYXcuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9Im9yaWdpblgiPlgtY29vcmRpbmF0ZSBhdCB0aGUgdG9wLWxlZnQgY29ybmVyIG9mIHRoZSBpbmxpbmUgb2JqZWN0LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJvcmlnaW5ZIj5ZLWNvb3JkaW5hdGUgYXQgdGhlIHRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgaW5saW5lIG9iamVjdC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaW5saW5lT2JqZWN0Ij5UaGUgb2JqZWN0IHNldCB1c2luZyBJRFdyaXRlVGV4dExheW91dDo6U2V0SW5saW5lT2JqZWN0LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJpc1NpZGV3YXlzIj5UaGUgb2JqZWN0IHNob3VsZCBiZSBkcmF3biBvbiBpdHMgc2lkZS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaXNSaWdodFRvTGVmdCI+VGhlIG9iamVjdCBpcyBpbiBhbiByaWdodC10by1sZWZ0IGNvbnRleHQgYW5kIHNob3VsZCBiZSBkcmF3biBmbGlwcGVkLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJjbGllbnREcmF3aW5nRWZmZWN0Ij5UaGUgZHJhd2luZyBlZmZlY3Qgc2V0IGluCisgICAgLy8vIElEV3JpdGVUZXh0TGF5b3V0OjpTZXREcmF3aW5nRWZmZWN0LjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICAvLy8gPHJlbWFya3M+CisgICAgLy8vIFRoZSByaWdodC10by1sZWZ0IGZsYWcgaXMgYSBoaW50IGZvciB0aG9zZSBjYXNlcyB3aGVyZSBpdCB3b3VsZCBsb29rCisgICAgLy8vIHN0cmFuZ2UgZm9yIHRoZSBpbWFnZSB0byBiZSBzaG93biBub3JtYWxseSAobGlrZSBhbiBhcnJvdyBwb2ludGluZyB0bworICAgIC8vLyByaWdodCB0byBpbmRpY2F0ZSBhIHN1Ym1lbnUpLgorICAgIC8vLyA8L3JlbWFya3M+CisgICAgU1RETUVUSE9EKERyYXdJbmxpbmVPYmplY3QpKAorICAgICAgICBfX21heWJlbnVsbCB2b2lkKiBjbGllbnREcmF3aW5nQ29udGV4dCwKKyAgICAgICAgRkxPQVQgb3JpZ2luWCwKKyAgICAgICAgRkxPQVQgb3JpZ2luWSwKKyAgICAgICAgSURXcml0ZUlubGluZU9iamVjdCogaW5saW5lT2JqZWN0LAorICAgICAgICBCT09MIGlzU2lkZXdheXMsCisgICAgICAgIEJPT0wgaXNSaWdodFRvTGVmdCwKKyAgICAgICAgX19tYXliZW51bGwgSVVua25vd24qIGNsaWVudERyYXdpbmdFZmZlY3QKKyAgICAgICAgKSBQVVJFOworfTsKKworLy8vIDxzdW1tYXJ5PgorLy8vIFRoZSBJRFdyaXRlVGV4dExheW91dCBpbnRlcmZhY2UgcmVwcmVzZW50cyBhIGJsb2NrIG9mIHRleHQgYWZ0ZXIgaXQgaGFzCisvLy8gYmVlbiBmdWxseSBhbmFseXplZCBhbmQgZm9ybWF0dGVkLgorLy8vCisvLy8gQWxsIGNvb3JkaW5hdGVzIGFyZSBpbiBkZXZpY2UgaW5kZXBlbmRlbnQgcGl4ZWxzIChESVBzKS4KKy8vLyA8L3N1bW1hcnk+CitpbnRlcmZhY2UgRFdSSVRFX0RFQ0xBUkVfSU5URVJGQUNFKCI1MzczNzAzNy02ZDE0LTQxMGItOWJmZS0wYjE4MmJiNzA5NjEiKSBJRFdyaXRlVGV4dExheW91dCA6IHB1YmxpYyBJRFdyaXRlVGV4dEZvcm1hdAoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gU2V0IGxheW91dCBtYXhpbXVtIHdpZHRoCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9Im1heFdpZHRoIj5MYXlvdXQgbWF4aW11bSB3aWR0aDwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoU2V0TWF4V2lkdGgpKAorICAgICAgICBGTE9BVCBtYXhXaWR0aAorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFNldCBsYXlvdXQgbWF4aW11bSBoZWlnaHQKKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibWF4SGVpZ2h0Ij5MYXlvdXQgbWF4aW11bSBoZWlnaHQ8L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKFNldE1heEhlaWdodCkoCisgICAgICAgIEZMT0FUIG1heEhlaWdodAorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFNldCB0aGUgZm9udCBjb2xsZWN0aW9uLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmb250Q29sbGVjdGlvbiI+VGhlIGZvbnQgY29sbGVjdGlvbiB0byBzZXQ8L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UZXh0IHJhbmdlIHRvIHdoaWNoIHRoaXMgY2hhbmdlIGFwcGxpZXMuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChTZXRGb250Q29sbGVjdGlvbikoCisgICAgICAgIElEV3JpdGVGb250Q29sbGVjdGlvbiogZm9udENvbGxlY3Rpb24sCisgICAgICAgIERXUklURV9URVhUX1JBTkdFIHRleHRSYW5nZQorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFNldCBudWxsLXRlcm1pbmF0ZWQgZm9udCBmYW1pbHkgbmFtZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZhbWlseU5hbWUiPkZvbnQgZmFtaWx5IG5hbWU8L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UZXh0IHJhbmdlIHRvIHdoaWNoIHRoaXMgY2hhbmdlIGFwcGxpZXMuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChTZXRGb250RmFtaWx5TmFtZSkoCisgICAgICAgIF9faW5feiBXQ0hBUiBjb25zdCogZm9udEZhbWlseU5hbWUsCisgICAgICAgIERXUklURV9URVhUX1JBTkdFIHRleHRSYW5nZQorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFNldCBmb250IHdlaWdodC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udFdlaWdodCI+Rm9udCB3ZWlnaHQ8L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UZXh0IHJhbmdlIHRvIHdoaWNoIHRoaXMgY2hhbmdlIGFwcGxpZXMuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChTZXRGb250V2VpZ2h0KSgKKyAgICAgICAgRFdSSVRFX0ZPTlRfV0VJR0hUIGZvbnRXZWlnaHQsCisgICAgICAgIERXUklURV9URVhUX1JBTkdFIHRleHRSYW5nZQorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFNldCBmb250IHN0eWxlLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmb250U3R5bGUiPkZvbnQgc3R5bGU8L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UZXh0IHJhbmdlIHRvIHdoaWNoIHRoaXMgY2hhbmdlIGFwcGxpZXMuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChTZXRGb250U3R5bGUpKAorICAgICAgICBEV1JJVEVfRk9OVF9TVFlMRSBmb250U3R5bGUsCisgICAgICAgIERXUklURV9URVhUX1JBTkdFIHRleHRSYW5nZQorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFNldCBmb250IHN0cmV0Y2guCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRTdHJldGNoIj5mb250IHN0cmV0Y2g8L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UZXh0IHJhbmdlIHRvIHdoaWNoIHRoaXMgY2hhbmdlIGFwcGxpZXMuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChTZXRGb250U3RyZXRjaCkoCisgICAgICAgIERXUklURV9GT05UX1NUUkVUQ0ggZm9udFN0cmV0Y2gsCisgICAgICAgIERXUklURV9URVhUX1JBTkdFIHRleHRSYW5nZQorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFNldCBmb250IGVtIGhlaWdodC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udFNpemUiPkZvbnQgZW0gaGVpZ2h0PC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRSYW5nZSI+VGV4dCByYW5nZSB0byB3aGljaCB0aGlzIGNoYW5nZSBhcHBsaWVzLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoU2V0Rm9udFNpemUpKAorICAgICAgICBGTE9BVCBmb250U2l6ZSwKKyAgICAgICAgRFdSSVRFX1RFWFRfUkFOR0UgdGV4dFJhbmdlCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gU2V0IHVuZGVybGluZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaGFzVW5kZXJsaW5lIj5UaGUgQm9vbGVhbiBmbGFnIGluZGljYXRlcyB3aGV0aGVyIHVuZGVybGluZSB0YWtlcyBwbGFjZTwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0UmFuZ2UiPlRleHQgcmFuZ2UgdG8gd2hpY2ggdGhpcyBjaGFuZ2UgYXBwbGllcy48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKFNldFVuZGVybGluZSkoCisgICAgICAgIEJPT0wgaGFzVW5kZXJsaW5lLAorICAgICAgICBEV1JJVEVfVEVYVF9SQU5HRSB0ZXh0UmFuZ2UKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTZXQgc3RyaWtldGhyb3VnaC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaGFzU3RyaWtldGhyb3VnaCI+VGhlIEJvb2xlYW4gZmxhZyBpbmRpY2F0ZXMgd2hldGhlciBzdHJpa2V0aHJvdWdoIHRha2VzIHBsYWNlPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRSYW5nZSI+VGV4dCByYW5nZSB0byB3aGljaCB0aGlzIGNoYW5nZSBhcHBsaWVzLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoU2V0U3RyaWtldGhyb3VnaCkoCisgICAgICAgIEJPT0wgaGFzU3RyaWtldGhyb3VnaCwKKyAgICAgICAgRFdSSVRFX1RFWFRfUkFOR0UgdGV4dFJhbmdlCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gU2V0IGFwcGxpY2F0aW9uLWRlZmluZWQgZHJhd2luZyBlZmZlY3QuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImRyYXdpbmdFZmZlY3QiPlBvaW50ZXIgdG8gYW4gYXBwbGljYXRpb24tZGVmaW5lZCBkcmF3aW5nIGVmZmVjdC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UZXh0IHJhbmdlIHRvIHdoaWNoIHRoaXMgY2hhbmdlIGFwcGxpZXMuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIC8vLyA8cmVtYXJrcz4KKyAgICAvLy8gVGhpcyBkcmF3aW5nIGVmZmVjdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCByYW5nZSBhbmQgd2lsbCBiZSBwYXNzZWQgYmFjaworICAgIC8vLyB0byB0aGUgYXBwbGljYXRpb24gdmlhIHRoZSBjYWxsYmFjayB3aGVuIHRoZSByYW5nZSBpcyBkcmF3biBhdCBkcmF3aW5nIHRpbWUuCisgICAgLy8vIDwvcmVtYXJrcz4KKyAgICBTVERNRVRIT0QoU2V0RHJhd2luZ0VmZmVjdCkoCisgICAgICAgIElVbmtub3duKiBkcmF3aW5nRWZmZWN0LAorICAgICAgICBEV1JJVEVfVEVYVF9SQU5HRSB0ZXh0UmFuZ2UKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTZXQgaW5saW5lIG9iamVjdC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaW5saW5lT2JqZWN0Ij5Qb2ludGVyIHRvIGFuIGFwcGxpY2F0aW9uLWltcGxlbWVudGVkIGlubGluZSBvYmplY3QuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRSYW5nZSI+VGV4dCByYW5nZSB0byB3aGljaCB0aGlzIGNoYW5nZSBhcHBsaWVzLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICAvLy8gPHJlbWFya3M+CisgICAgLy8vIFRoaXMgaW5saW5lIG9iamVjdCBhcHBsaWVzIHRvIHRoZSBzcGVjaWZpZWQgcmFuZ2UgYW5kIHdpbGwgYmUgcGFzc2VkIGJhY2sKKyAgICAvLy8gdG8gdGhlIGFwcGxpY2F0aW9uIHZpYSB0aGUgRHJhd0lubGluZU9iamVjdCBjYWxsYmFjayB3aGVuIHRoZSByYW5nZSBpcyBkcmF3bi4KKyAgICAvLy8gQW55IHRleHQgaW4gdGhhdCByYW5nZSB3aWxsIGJlIHN1cHByZXNzZWQuCisgICAgLy8vIDwvcmVtYXJrcz4KKyAgICBTVERNRVRIT0QoU2V0SW5saW5lT2JqZWN0KSgKKyAgICAgICAgSURXcml0ZUlubGluZU9iamVjdCogaW5saW5lT2JqZWN0LAorICAgICAgICBEV1JJVEVfVEVYVF9SQU5HRSB0ZXh0UmFuZ2UKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTZXQgZm9udCB0eXBvZ3JhcGh5IGZlYXR1cmVzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0eXBvZ3JhcGh5Ij5Qb2ludGVyIHRvIGZvbnQgdHlwb2dyYXBoeSBzZXR0aW5nLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0UmFuZ2UiPlRleHQgcmFuZ2UgdG8gd2hpY2ggdGhpcyBjaGFuZ2UgYXBwbGllcy48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKFNldFR5cG9ncmFwaHkpKAorICAgICAgICBJRFdyaXRlVHlwb2dyYXBoeSogdHlwb2dyYXBoeSwKKyAgICAgICAgRFdSSVRFX1RFWFRfUkFOR0UgdGV4dFJhbmdlCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gU2V0IGxvY2FsZSBuYW1lLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJsb2NhbGVOYW1lIj5Mb2NhbGUgbmFtZTwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0UmFuZ2UiPlRleHQgcmFuZ2UgdG8gd2hpY2ggdGhpcyBjaGFuZ2UgYXBwbGllcy48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKFNldExvY2FsZU5hbWUpKAorICAgICAgICBfX2luX3ogV0NIQVIgY29uc3QqIGxvY2FsZU5hbWUsCisgICAgICAgIERXUklURV9URVhUX1JBTkdFIHRleHRSYW5nZQorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldCBsYXlvdXQgbWF4aW11bSB3aWR0aAorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgU1RETUVUSE9EXyhGTE9BVCwgR2V0TWF4V2lkdGgpKCkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0IGxheW91dCBtYXhpbXVtIGhlaWdodAorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgU1RETUVUSE9EXyhGTE9BVCwgR2V0TWF4SGVpZ2h0KSgpIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldCB0aGUgZm9udCBjb2xsZWN0aW9uIHdoZXJlIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIGF0LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJjdXJyZW50UG9zaXRpb24iPlRoZSBjdXJyZW50IHRleHQgcG9zaXRpb24uPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRDb2xsZWN0aW9uIj5UaGUgY3VycmVudCBmb250IGNvbGxlY3Rpb248L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UZXh0IHJhbmdlIHRvIHdoaWNoIHRoaXMgY2hhbmdlIGFwcGxpZXMuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChHZXRGb250Q29sbGVjdGlvbikoCisgICAgICAgIFVJTlQzMiBjdXJyZW50UG9zaXRpb24sCisgICAgICAgIF9fb3V0IElEV3JpdGVGb250Q29sbGVjdGlvbioqIGZvbnRDb2xsZWN0aW9uLAorICAgICAgICBfX291dF9vcHQgRFdSSVRFX1RFWFRfUkFOR0UqIHRleHRSYW5nZSA9IE5VTEwKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgZm9udCBmYW1pbHkgbmFtZSB3aGVyZSB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBhdC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iY3VycmVudFBvc2l0aW9uIj5UaGUgY3VycmVudCB0ZXh0IHBvc2l0aW9uLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJuYW1lTGVuZ3RoIj5TaXplIG9mIHRoZSBjaGFyYWN0ZXIgYXJyYXkgaW4gY2hhcmFjdGVyIGNvdW50IG5vdCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0ZWQgTlVMTCBjaGFyYWN0ZXIuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRSYW5nZSI+VGhlIHBvc2l0aW9uIHJhbmdlIG9mIHRoZSBjdXJyZW50IGZvcm1hdC48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKEdldEZvbnRGYW1pbHlOYW1lTGVuZ3RoKSgKKyAgICAgICAgVUlOVDMyIGN1cnJlbnRQb3NpdGlvbiwKKyAgICAgICAgX19vdXQgVUlOVDMyKiBuYW1lTGVuZ3RoLAorICAgICAgICBfX291dF9vcHQgRFdSSVRFX1RFWFRfUkFOR0UqIHRleHRSYW5nZSA9IE5VTEwKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBDb3B5IHRoZSBmb250IGZhbWlseSBuYW1lIHdoZXJlIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIGF0LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJjdXJyZW50UG9zaXRpb24iPlRoZSBjdXJyZW50IHRleHQgcG9zaXRpb24uPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGYW1pbHlOYW1lIj5DaGFyYWN0ZXIgYXJyYXkgdGhhdCByZWNlaXZlcyB0aGUgY3VycmVudCBmb250IGZhbWlseSBuYW1lPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9Im5hbWVTaXplIj5TaXplIG9mIHRoZSBjaGFyYWN0ZXIgYXJyYXkgaW4gY2hhcmFjdGVyIGNvdW50IGluY2x1ZGluZyB0aGUgdGVybWluYXRlZCBOVUxMIGNoYXJhY3Rlci48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UaGUgcG9zaXRpb24gcmFuZ2Ugb2YgdGhlIGN1cnJlbnQgZm9ybWF0LjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0Rm9udEZhbWlseU5hbWUpKAorICAgICAgICBVSU5UMzIgY3VycmVudFBvc2l0aW9uLAorICAgICAgICBfX291dF9lY291bnRfeihuYW1lU2l6ZSkgV0NIQVIqIGZvbnRGYW1pbHlOYW1lLAorICAgICAgICBVSU5UMzIgbmFtZVNpemUsCisgICAgICAgIF9fb3V0X29wdCBEV1JJVEVfVEVYVF9SQU5HRSogdGV4dFJhbmdlID0gTlVMTAorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldCB0aGUgZm9udCB3ZWlnaHQgd2hlcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgYXQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImN1cnJlbnRQb3NpdGlvbiI+VGhlIGN1cnJlbnQgdGV4dCBwb3NpdGlvbi48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udFdlaWdodCI+VGhlIGN1cnJlbnQgZm9udCB3ZWlnaHQ8L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UaGUgcG9zaXRpb24gcmFuZ2Ugb2YgdGhlIGN1cnJlbnQgZm9ybWF0LjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0Rm9udFdlaWdodCkoCisgICAgICAgIFVJTlQzMiBjdXJyZW50UG9zaXRpb24sCisgICAgICAgIF9fb3V0IERXUklURV9GT05UX1dFSUdIVCogZm9udFdlaWdodCwKKyAgICAgICAgX19vdXRfb3B0IERXUklURV9URVhUX1JBTkdFKiB0ZXh0UmFuZ2UgPSBOVUxMCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0IHRoZSBmb250IHN0eWxlIHdoZXJlIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIGF0LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJjdXJyZW50UG9zaXRpb24iPlRoZSBjdXJyZW50IHRleHQgcG9zaXRpb24uPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRTdHlsZSI+VGhlIGN1cnJlbnQgZm9udCBzdHlsZTwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0UmFuZ2UiPlRoZSBwb3NpdGlvbiByYW5nZSBvZiB0aGUgY3VycmVudCBmb3JtYXQuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChHZXRGb250U3R5bGUpKAorICAgICAgICBVSU5UMzIgY3VycmVudFBvc2l0aW9uLAorICAgICAgICBfX291dCBEV1JJVEVfRk9OVF9TVFlMRSogZm9udFN0eWxlLAorICAgICAgICBfX291dF9vcHQgRFdSSVRFX1RFWFRfUkFOR0UqIHRleHRSYW5nZSA9IE5VTEwKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXQgdGhlIGZvbnQgc3RyZXRjaCB3aGVyZSB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBhdC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iY3VycmVudFBvc2l0aW9uIj5UaGUgY3VycmVudCB0ZXh0IHBvc2l0aW9uLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmb250U3RyZXRjaCI+VGhlIGN1cnJlbnQgZm9udCBzdHJldGNoPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRSYW5nZSI+VGhlIHBvc2l0aW9uIHJhbmdlIG9mIHRoZSBjdXJyZW50IGZvcm1hdC48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKEdldEZvbnRTdHJldGNoKSgKKyAgICAgICAgVUlOVDMyIGN1cnJlbnRQb3NpdGlvbiwKKyAgICAgICAgX19vdXQgRFdSSVRFX0ZPTlRfU1RSRVRDSCogZm9udFN0cmV0Y2gsCisgICAgICAgIF9fb3V0X29wdCBEV1JJVEVfVEVYVF9SQU5HRSogdGV4dFJhbmdlID0gTlVMTAorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldCB0aGUgZm9udCBlbSBoZWlnaHQgd2hlcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgYXQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImN1cnJlbnRQb3NpdGlvbiI+VGhlIGN1cnJlbnQgdGV4dCBwb3NpdGlvbi48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udFNpemUiPlRoZSBjdXJyZW50IGZvbnQgZW0gaGVpZ2h0PC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRSYW5nZSI+VGhlIHBvc2l0aW9uIHJhbmdlIG9mIHRoZSBjdXJyZW50IGZvcm1hdC48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKEdldEZvbnRTaXplKSgKKyAgICAgICAgVUlOVDMyIGN1cnJlbnRQb3NpdGlvbiwKKyAgICAgICAgX19vdXQgRkxPQVQqIGZvbnRTaXplLAorICAgICAgICBfX291dF9vcHQgRFdSSVRFX1RFWFRfUkFOR0UqIHRleHRSYW5nZSA9IE5VTEwKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXQgdGhlIHVuZGVybGluZSBwcmVzZW5jZSB3aGVyZSB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBhdC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iY3VycmVudFBvc2l0aW9uIj5UaGUgY3VycmVudCB0ZXh0IHBvc2l0aW9uLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJoYXNVbmRlcmxpbmUiPlRoZSBCb29sZWFuIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgdGV4dCBpcyB1bmRlcmxpbmVkLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0UmFuZ2UiPlRoZSBwb3NpdGlvbiByYW5nZSBvZiB0aGUgY3VycmVudCBmb3JtYXQuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChHZXRVbmRlcmxpbmUpKAorICAgICAgICBVSU5UMzIgY3VycmVudFBvc2l0aW9uLAorICAgICAgICBfX291dCBCT09MKiBoYXNVbmRlcmxpbmUsCisgICAgICAgIF9fb3V0X29wdCBEV1JJVEVfVEVYVF9SQU5HRSogdGV4dFJhbmdlID0gTlVMTAorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldCB0aGUgc3RyaWtldGhyb3VnaCBwcmVzZW5jZSB3aGVyZSB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBhdC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iY3VycmVudFBvc2l0aW9uIj5UaGUgY3VycmVudCB0ZXh0IHBvc2l0aW9uLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJoYXNTdHJpa2V0aHJvdWdoIj5UaGUgQm9vbGVhbiBmbGFnIGluZGljYXRlcyB3aGV0aGVyIHRleHQgaGFzIHN0cmlrZXRocm91Z2guPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRSYW5nZSI+VGhlIHBvc2l0aW9uIHJhbmdlIG9mIHRoZSBjdXJyZW50IGZvcm1hdC48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKEdldFN0cmlrZXRocm91Z2gpKAorICAgICAgICBVSU5UMzIgY3VycmVudFBvc2l0aW9uLAorICAgICAgICBfX291dCBCT09MKiBoYXNTdHJpa2V0aHJvdWdoLAorICAgICAgICBfX291dF9vcHQgRFdSSVRFX1RFWFRfUkFOR0UqIHRleHRSYW5nZSA9IE5VTEwKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXQgdGhlIGFwcGxpY2F0aW9uLWRlZmluZWQgZHJhd2luZyBlZmZlY3Qgd2hlcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgYXQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImN1cnJlbnRQb3NpdGlvbiI+VGhlIGN1cnJlbnQgdGV4dCBwb3NpdGlvbi48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZHJhd2luZ0VmZmVjdCI+VGhlIGN1cnJlbnQgYXBwbGljYXRpb24tZGVmaW5lZCBkcmF3aW5nIGVmZmVjdC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UaGUgcG9zaXRpb24gcmFuZ2Ugb2YgdGhlIGN1cnJlbnQgZm9ybWF0LjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0RHJhd2luZ0VmZmVjdCkoCisgICAgICAgIFVJTlQzMiBjdXJyZW50UG9zaXRpb24sCisgICAgICAgIF9fb3V0IElVbmtub3duKiogZHJhd2luZ0VmZmVjdCwKKyAgICAgICAgX19vdXRfb3B0IERXUklURV9URVhUX1JBTkdFKiB0ZXh0UmFuZ2UgPSBOVUxMCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0IHRoZSBpbmxpbmUgb2JqZWN0IGF0IHRoZSBnaXZlbiBwb3NpdGlvbi4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iY3VycmVudFBvc2l0aW9uIj5UaGUgZ2l2ZW4gdGV4dCBwb3NpdGlvbi48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaW5saW5lT2JqZWN0Ij5UaGUgaW5saW5lIG9iamVjdC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UaGUgcG9zaXRpb24gcmFuZ2Ugb2YgdGhlIGN1cnJlbnQgZm9ybWF0LjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0SW5saW5lT2JqZWN0KSgKKyAgICAgICAgVUlOVDMyIGN1cnJlbnRQb3NpdGlvbiwKKyAgICAgICAgX19vdXQgSURXcml0ZUlubGluZU9iamVjdCoqIGlubGluZU9iamVjdCwKKyAgICAgICAgX19vdXRfb3B0IERXUklURV9URVhUX1JBTkdFKiB0ZXh0UmFuZ2UgPSBOVUxMCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0IHRoZSB0eXBvZ3JhcGh5IHNldHRpbmcgd2hlcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgYXQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImN1cnJlbnRQb3NpdGlvbiI+VGhlIGN1cnJlbnQgdGV4dCBwb3NpdGlvbi48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idHlwb2dyYXBoeSI+VGhlIGN1cnJlbnQgdHlwb2dyYXBoeSBzZXR0aW5nLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0UmFuZ2UiPlRoZSBwb3NpdGlvbiByYW5nZSBvZiB0aGUgY3VycmVudCBmb3JtYXQuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChHZXRUeXBvZ3JhcGh5KSgKKyAgICAgICAgVUlOVDMyIGN1cnJlbnRQb3NpdGlvbiwKKyAgICAgICAgX19vdXQgSURXcml0ZVR5cG9ncmFwaHkqKiB0eXBvZ3JhcGh5LAorICAgICAgICBfX291dF9vcHQgRFdSSVRFX1RFWFRfUkFOR0UqIHRleHRSYW5nZSA9IE5VTEwKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgbG9jYWxlIG5hbWUgd2hlcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgYXQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImN1cnJlbnRQb3NpdGlvbiI+VGhlIGN1cnJlbnQgdGV4dCBwb3NpdGlvbi48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibmFtZUxlbmd0aCI+U2l6ZSBvZiB0aGUgY2hhcmFjdGVyIGFycmF5IGluIGNoYXJhY3RlciBjb3VudCBub3QgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGVkIE5VTEwgY2hhcmFjdGVyLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0UmFuZ2UiPlRoZSBwb3NpdGlvbiByYW5nZSBvZiB0aGUgY3VycmVudCBmb3JtYXQuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChHZXRMb2NhbGVOYW1lTGVuZ3RoKSgKKyAgICAgICAgVUlOVDMyIGN1cnJlbnRQb3NpdGlvbiwKKyAgICAgICAgX19vdXQgVUlOVDMyKiBuYW1lTGVuZ3RoLAorICAgICAgICBfX291dF9vcHQgRFdSSVRFX1RFWFRfUkFOR0UqIHRleHRSYW5nZSA9IE5VTEwKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXQgdGhlIGxvY2FsZSBuYW1lIHdoZXJlIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIGF0LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJjdXJyZW50UG9zaXRpb24iPlRoZSBjdXJyZW50IHRleHQgcG9zaXRpb24uPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImxvY2FsZU5hbWUiPkNoYXJhY3RlciBhcnJheSB0aGF0IHJlY2VpdmVzIHRoZSBjdXJyZW50IGxvY2FsZSBuYW1lPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9Im5hbWVTaXplIj5TaXplIG9mIHRoZSBjaGFyYWN0ZXIgYXJyYXkgaW4gY2hhcmFjdGVyIGNvdW50IGluY2x1ZGluZyB0aGUgdGVybWluYXRlZCBOVUxMIGNoYXJhY3Rlci48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dFJhbmdlIj5UaGUgcG9zaXRpb24gcmFuZ2Ugb2YgdGhlIGN1cnJlbnQgZm9ybWF0LjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0TG9jYWxlTmFtZSkoCisgICAgICAgIFVJTlQzMiBjdXJyZW50UG9zaXRpb24sCisgICAgICAgIF9fb3V0X2Vjb3VudF96KG5hbWVTaXplKSBXQ0hBUiogbG9jYWxlTmFtZSwKKyAgICAgICAgVUlOVDMyIG5hbWVTaXplLAorICAgICAgICBfX291dF9vcHQgRFdSSVRFX1RFWFRfUkFOR0UqIHRleHRSYW5nZSA9IE5VTEwKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBJbml0aWF0ZSBkcmF3aW5nIG9mIHRoZSB0ZXh0LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJjbGllbnREcmF3aW5nQ29udGV4dCI+QW4gYXBwbGljYXRpb24gZGVmaW5lZCB2YWx1ZQorICAgIC8vLyBpbmNsdWRlZCBpbiByZW5kZXJpbmcgY2FsbGJhY2tzLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJyZW5kZXJlciI+VGhlIHNldCBvZiBhcHBsaWNhdGlvbi1kZWZpbmVkIGNhbGxiYWNrcyB0aGF0IGRvCisgICAgLy8vIHRoZSBhY3R1YWwgcmVuZGVyaW5nLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJvcmlnaW5YIj5YLWNvb3JkaW5hdGUgb2YgdGhlIGxheW91dCdzIGxlZnQgc2lkZS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ib3JpZ2luWSI+WS1jb29yZGluYXRlIG9mIHRoZSBsYXlvdXQncyB0b3Agc2lkZS48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKERyYXcpKAorICAgICAgICBfX21heWJlbnVsbCB2b2lkKiBjbGllbnREcmF3aW5nQ29udGV4dCwKKyAgICAgICAgSURXcml0ZVRleHRSZW5kZXJlciogcmVuZGVyZXIsCisgICAgICAgIEZMT0FUIG9yaWdpblgsCisgICAgICAgIEZMT0FUIG9yaWdpblkKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXRMaW5lTWV0cmljcyByZXR1cm5zIHByb3BlcnRpZXMgb2YgZWFjaCBsaW5lLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJsaW5lTWV0cmljcyI+VGhlIGFycmF5IHRvIGZpbGwgd2l0aCBsaW5lIGluZm9ybWF0aW9uLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJtYXhMaW5lQ291bnQiPlRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGxpbmVNZXRyaWNzIGFycmF5LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJhY3R1YWxMaW5lQ291bnQiPlRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgbGluZU1ldHJpY3MKKyAgICAvLy8gYXJyYXkgdGhhdCBpcyBuZWVkZWQuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIC8vLyA8cmVtYXJrcz4KKyAgICAvLy8gSWYgbWF4TGluZUNvdW50IGlzIG5vdCBsYXJnZSBlbm91Z2ggRV9OT1RfU1VGRklDSUVOVF9CVUZGRVIsIAorICAgIC8vLyB3aGljaCBpcyBlcXVpdmFsZW50IHRvIEhSRVNVTFRfRlJPTV9XSU4zMihFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSKSwKKyAgICAvLy8gaXMgcmV0dXJuZWQgYW5kICphY3R1YWxMaW5lQ291bnQgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgbGluZXMKKyAgICAvLy8gbmVlZGVkLgorICAgIC8vLyA8L3JlbWFya3M+CisgICAgU1RETUVUSE9EKEdldExpbmVNZXRyaWNzKSgKKyAgICAgICAgX19vdXRfZWNvdW50X29wdChtYXhMaW5lQ291bnQpIERXUklURV9MSU5FX01FVFJJQ1MqIGxpbmVNZXRyaWNzLAorICAgICAgICBVSU5UMzIgbWF4TGluZUNvdW50LAorICAgICAgICBfX291dCBVSU5UMzIqIGFjdHVhbExpbmVDb3VudAorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldE1ldHJpY3MgcmV0cmlldmVzIG92ZXJhbGwgbWV0cmljcyBmb3IgdGhlIGZvcm1hdHRlZCBzdHJpbmcuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRNZXRyaWNzIj5UaGUgcmV0dXJuZWQgbWV0cmljcy48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgLy8vIDxyZW1hcmtzPgorICAgIC8vLyBEcmF3aW5nIGVmZmVjdHMgbGlrZSB1bmRlcmxpbmUgYW5kIHN0cmlrZXRocm91Z2ggZG8gbm90IGNvbnRyaWJ1dGUKKyAgICAvLy8gdG8gdGhlIHRleHQgc2l6ZSwgd2hpY2ggaXMgZXNzZW50aWFsbHkgdGhlIHN1bSBvZiBhZHZhbmNlIHdpZHRocyBhbmQKKyAgICAvLy8gbGluZSBoZWlnaHRzLiBBZGRpdGlvbmFsbHksIHZpc2libGUgc3dhc2hlcyBhbmQgb3RoZXIgZ3JhcGhpYworICAgIC8vLyBhZG9ybm1lbnRzIG1heSBleHRlbmQgb3V0c2lkZSB0aGUgcmV0dXJuZWQgd2lkdGggYW5kIGhlaWdodC4KKyAgICAvLy8gPC9yZW1hcmtzPgorICAgIFNURE1FVEhPRChHZXRNZXRyaWNzKSgKKyAgICAgICAgX19vdXQgRFdSSVRFX1RFWFRfTUVUUklDUyogdGV4dE1ldHJpY3MKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXRPdmVyaGFuZ01ldHJpY3MgcmV0dXJucyB0aGUgb3ZlcmhhbmdzIChpbiBESVBzKSBvZiB0aGUgbGF5b3V0IGFuZCBhbGwKKyAgICAvLy8gb2JqZWN0cyBjb250YWluZWQgaW4gaXQsIGluY2x1ZGluZyB0ZXh0IGdseXBocyBhbmQgaW5saW5lIG9iamVjdHMuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9Im92ZXJoYW5ncyI+T3ZlcnNob290cyBvZiB2aXNpYmxlIGV4dGVudHMgKGluIERJUHMpIG91dHNpZGUgdGhlIGxheW91dC48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgLy8vIDxyZW1hcmtzPgorICAgIC8vLyBBbnkgdW5kZXJsaW5lIGFuZCBzdHJpa2V0aHJvdWdoIGRvIG5vdCBjb250cmlidXRlIHRvIHRoZSBibGFjayBib3gKKyAgICAvLy8gZGV0ZXJtaW5hdGlvbiwgc2luY2UgdGhlc2UgYXJlIGFjdHVhbGx5IGRyYXduIGJ5IHRoZSByZW5kZXJlciwgd2hpY2gKKyAgICAvLy8gaXMgYWxsb3dlZCB0byBkcmF3IHRoZW0gaW4gYW55IHZhcmlldHkgb2Ygc3R5bGVzLgorICAgIC8vLyA8L3JlbWFya3M+CisgICAgU1RETUVUSE9EKEdldE92ZXJoYW5nTWV0cmljcykoCisgICAgICAgIF9fb3V0IERXUklURV9PVkVSSEFOR19NRVRSSUNTKiBvdmVyaGFuZ3MKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBSZXRyaWV2ZSBsb2dpY2FsIHByb3BlcnRpZXMgYW5kIG1lYXN1cmVtZW50IG9mIGVhY2ggY2x1c3Rlci4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iY2x1c3Rlck1ldHJpY3MiPlRoZSBhcnJheSB0byBmaWxsIHdpdGggY2x1c3RlciBpbmZvcm1hdGlvbi48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibWF4Q2x1c3RlckNvdW50Ij5UaGUgbWF4aW11bSBzaXplIG9mIHRoZSBjbHVzdGVyTWV0cmljcyBhcnJheS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iYWN0dWFsQ2x1c3RlckNvdW50Ij5UaGUgYWN0dWFsIHNpemUgb2YgdGhlIGNsdXN0ZXJNZXRyaWNzIGFycmF5IHRoYXQgaXMgbmVlZGVkLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICAvLy8gPHJlbWFya3M+CisgICAgLy8vIElmIG1heENsdXN0ZXJDb3VudCBpcyBub3QgbGFyZ2UgZW5vdWdoIEVfTk9UX1NVRkZJQ0lFTlRfQlVGRkVSLCAKKyAgICAvLy8gd2hpY2ggaXMgZXF1aXZhbGVudCB0byBIUkVTVUxUX0ZST01fV0lOMzIoRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUiksIAorICAgIC8vLyBpcyByZXR1cm5lZCBhbmQgKmFjdHVhbENsdXN0ZXJDb3VudCBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiBjbHVzdGVycworICAgIC8vLyBuZWVkZWQuCisgICAgLy8vIDwvcmVtYXJrcz4KKyAgICBTVERNRVRIT0QoR2V0Q2x1c3Rlck1ldHJpY3MpKAorICAgICAgICBfX291dF9lY291bnRfb3B0KG1heENsdXN0ZXJDb3VudCkgRFdSSVRFX0NMVVNURVJfTUVUUklDUyogY2x1c3Rlck1ldHJpY3MsCisgICAgICAgIFVJTlQzMiBtYXhDbHVzdGVyQ291bnQsCisgICAgICAgIF9fb3V0IFVJTlQzMiogYWN0dWFsQ2x1c3RlckNvdW50CisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gRGV0ZXJtaW5lcyB0aGUgbWluaW11bSBwb3NzaWJsZSB3aWR0aCB0aGUgbGF5b3V0IGNhbiBiZSBzZXQgdG8gd2l0aG91dAorICAgIC8vLyBlbWVyZ2VuY3kgYnJlYWtpbmcgYmV0d2VlbiB0aGUgY2hhcmFjdGVycyBvZiB3aG9sZSB3b3Jkcy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibWluV2lkdGgiPk1pbmltdW0gd2lkdGguPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChEZXRlcm1pbmVNaW5XaWR0aCkoCisgICAgICAgIF9fb3V0IEZMT0FUKiBtaW5XaWR0aAorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdpdmVuIGEgY29vcmRpbmF0ZSAoaW4gRElQcykgcmVsYXRpdmUgdG8gdGhlIHRvcC1sZWZ0IG9mIHRoZSBsYXlvdXQgYm94LAorICAgIC8vLyB0aGlzIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgaGl0LXRlc3QgbWV0cmljcyBvZiB0aGUgdGV4dCBzdHJpbmcgd2hlcmUKKyAgICAvLy8gdGhlIGhpdC10ZXN0IGhhcyBvY2N1cnJlZC4gVGhpcyBpcyB1c2VmdWwgZm9yIG1hcHBpbmcgbW91c2UgY2xpY2tzIHRvIGNhcmV0CisgICAgLy8vIHBvc2l0aW9ucy4gV2hlbiB0aGUgZ2l2ZW4gY29vcmRpbmF0ZSBpcyBvdXRzaWRlIHRoZSB0ZXh0IHN0cmluZywgdGhlIGZ1bmN0aW9uCisgICAgLy8vIHNldHMgdGhlIG91dHB1dCB2YWx1ZSAqaXNJbnNpZGUgdG8gZmFsc2UgYnV0IHJldHVybnMgdGhlIG5lYXJlc3QgY2hhcmFjdGVyCisgICAgLy8vIHBvc2l0aW9uLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJwb2ludFgiPlggY29vcmRpbmF0ZSB0byBoaXQtdGVzdCwgcmVsYXRpdmUgdG8gdGhlIHRvcC1sZWZ0IGxvY2F0aW9uIG9mIHRoZSBsYXlvdXQgYm94LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJwb2ludFkiPlkgY29vcmRpbmF0ZSB0byBoaXQtdGVzdCwgcmVsYXRpdmUgdG8gdGhlIHRvcC1sZWZ0IGxvY2F0aW9uIG9mIHRoZSBsYXlvdXQgYm94LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJpc1RyYWlsaW5nSGl0Ij5PdXRwdXQgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGhpdC10ZXN0IGxvY2F0aW9uIGlzIGF0IHRoZSBsZWFkaW5nIG9yIHRoZSB0cmFpbGluZworICAgIC8vLyAgICAgc2lkZSBvZiB0aGUgY2hhcmFjdGVyLiBXaGVuIHRoZSBvdXRwdXQgKmlzSW5zaWRlIHZhbHVlIGlzIHNldCB0byBmYWxzZSwgdGhpcyB2YWx1ZSBpcyBzZXQgYWNjb3JkaW5nIHRvIHRoZSBvdXRwdXQKKyAgICAvLy8gICAgICpwb3NpdGlvbiB2YWx1ZSB0byByZXByZXNlbnQgdGhlIGVkZ2UgY2xvc2VzdCB0byB0aGUgaGl0LXRlc3QgbG9jYXRpb24uIDwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJpc0luc2lkZSI+T3V0cHV0IGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBoaXQtdGVzdCBsb2NhdGlvbiBpcyBpbnNpZGUgdGhlIHRleHQgc3RyaW5nLgorICAgIC8vLyAgICAgV2hlbiBmYWxzZSwgdGhlIHBvc2l0aW9uIG5lYXJlc3QgdGhlIHRleHQncyBlZGdlIGlzIHJldHVybmVkLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJoaXRUZXN0TWV0cmljcyI+T3V0cHV0IGdlb21ldHJ5IGZ1bGx5IGVuY2xvc2luZyB0aGUgaGl0LXRlc3QgbG9jYXRpb24uIFdoZW4gdGhlIG91dHB1dCAqaXNJbnNpZGUgdmFsdWUKKyAgICAvLy8gICAgIGlzIHNldCB0byBmYWxzZSwgdGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgZ2VvbWV0cnkgZW5jbG9zaW5nIHRoZSBlZGdlIGNsb3Nlc3QgdG8gdGhlIGhpdC10ZXN0IGxvY2F0aW9uLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoSGl0VGVzdFBvaW50KSgKKyAgICAgICAgRkxPQVQgcG9pbnRYLAorICAgICAgICBGTE9BVCBwb2ludFksCisgICAgICAgIF9fb3V0IEJPT0wqIGlzVHJhaWxpbmdIaXQsCisgICAgICAgIF9fb3V0IEJPT0wqIGlzSW5zaWRlLAorICAgICAgICBfX291dCBEV1JJVEVfSElUX1RFU1RfTUVUUklDUyogaGl0VGVzdE1ldHJpY3MKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHaXZlbiBhIHRleHQgcG9zaXRpb24gYW5kIHdoZXRoZXIgdGhlIGNhcmV0IGlzIG9uIHRoZSBsZWFkaW5nIG9yIHRyYWlsaW5nCisgICAgLy8vIGVkZ2Ugb2YgdGhhdCBwb3NpdGlvbiwgdGhpcyByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGNvb3JkaW5hdGUgKGluIERJUHMpCisgICAgLy8vIHJlbGF0aXZlIHRvIHRoZSB0b3AtbGVmdCBvZiB0aGUgbGF5b3V0IGJveC4gVGhpcyBpcyBtb3N0IHVzZWZ1bCBmb3IgZHJhd2luZworICAgIC8vLyB0aGUgY2FyZXQncyBjdXJyZW50IHBvc2l0aW9uLCBidXQgaXQgY291bGQgYWxzbyBiZSB1c2VkIHRvIGFuY2hvciBhbiBJTUUgdG8gdGhlCisgICAgLy8vIHR5cGVkIHRleHQgb3IgYXR0YWNoIGEgZmxvYXRpbmcgbWVudSBuZWFyIHRoZSBwb2ludCBvZiBpbnRlcmVzdC4gSXQgbWF5IGFsc28gYmUKKyAgICAvLy8gdXNlZCB0byBwcm9ncmFtbWF0aWNhbGx5IG9idGFpbiB0aGUgZ2VvbWV0cnkgb2YgYSBwYXJ0aWN1bGFyIHRleHQgcG9zaXRpb24KKyAgICAvLy8gZm9yIFVJIGF1dG9tYXRpb24uCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRQb3NpdGlvbiI+VGV4dCBwb3NpdGlvbiB0byBnZXQgdGhlIGNvb3JkaW5hdGUgb2YuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImlzVHJhaWxpbmdIaXQiPkZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBsb2NhdGlvbiBpcyBvZiB0aGUgbGVhZGluZyBvciB0aGUgdHJhaWxpbmcgc2lkZSBvZiB0aGUgc3BlY2lmaWVkIHRleHQgcG9zaXRpb24uIDwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJwb2ludFgiPk91dHB1dCBjYXJldCBYLCByZWxhdGl2ZSB0byB0aGUgdG9wLWxlZnQgb2YgdGhlIGxheW91dCBib3guPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InBvaW50WSI+T3V0cHV0IGNhcmV0IFksIHJlbGF0aXZlIHRvIHRoZSB0b3AtbGVmdCBvZiB0aGUgbGF5b3V0IGJveC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaGl0VGVzdE1ldHJpY3MiPk91dHB1dCBnZW9tZXRyeSBmdWxseSBlbmNsb3NpbmcgdGhlIHNwZWNpZmllZCB0ZXh0IHBvc2l0aW9uLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICAvLy8gPHJlbWFya3M+CisgICAgLy8vIFdoZW4gZHJhd2luZyBhIGNhcmV0IGF0IHRoZSByZXR1cm5lZCBYLFksIGl0IHNob3VsZCBzaG91bGQgYmUgY2VudGVyZWQgb24gWAorICAgIC8vLyBhbmQgZHJhd24gZnJvbSB0aGUgWSBjb29yZGluYXRlIGRvd24uIFRoZSBoZWlnaHQgd2lsbCBiZSB0aGUgc2l6ZSBvZiB0aGUKKyAgICAvLy8gaGl0LXRlc3RlZCB0ZXh0ICh3aGljaCBjYW4gdmFyeSBpbiBzaXplIHdpdGhpbiBhIGxpbmUpLgorICAgIC8vLyBSZWFkaW5nIGRpcmVjdGlvbiBhbHNvIGFmZmVjdHMgd2hpY2ggc2lkZSBvZiB0aGUgY2hhcmFjdGVyIHRoZSBjYXJldCBpcyBkcmF3bi4KKyAgICAvLy8gSG93ZXZlciwgdGhlIHJldHVybmVkIFggY29vcmRpbmF0ZSB3aWxsIGJlIGNvcnJlY3QgZm9yIGVpdGhlciBjYXNlLgorICAgIC8vLyBZb3UgY2FuIGdldCBhIHRleHQgbGVuZ3RoIGJhY2sgdGhhdCBpcyBsYXJnZXIgdGhhbiBhIHNpbmdsZSBjaGFyYWN0ZXIuCisgICAgLy8vIFRoaXMgaGFwcGVucyBmb3IgY29tcGxleCBzY3JpcHRzIHdoZW4gbXVsdGlwbGUgY2hhcmFjdGVycyBmb3JtIGEgc2luZ2xlIGNsdXN0ZXIsCisgICAgLy8vIHdoZW4gZGlhY3JpdGljcyBqb2luIHRoZWlyIGJhc2UgY2hhcmFjdGVyLCBvciB3aGVuIHlvdSB0ZXN0IGEgc3Vycm9nYXRlIHBhaXIuCisgICAgLy8vIDwvcmVtYXJrcz4KKyAgICBTVERNRVRIT0QoSGl0VGVzdFRleHRQb3NpdGlvbikoCisgICAgICAgIFVJTlQzMiB0ZXh0UG9zaXRpb24sCisgICAgICAgIEJPT0wgaXNUcmFpbGluZ0hpdCwKKyAgICAgICAgX19vdXQgRkxPQVQqIHBvaW50WCwKKyAgICAgICAgX19vdXQgRkxPQVQqIHBvaW50WSwKKyAgICAgICAgX19vdXQgRFdSSVRFX0hJVF9URVNUX01FVFJJQ1MqIGhpdFRlc3RNZXRyaWNzCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVGhlIGFwcGxpY2F0aW9uIGNhbGxzIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IGEgc2V0IG9mIGhpdC10ZXN0IG1ldHJpY3MKKyAgICAvLy8gY29ycmVzcG9uZGluZyB0byBhIHJhbmdlIG9mIHRleHQgcG9zaXRpb25zLiBUaGUgbWFpbiB1c2FnZSBmb3IgdGhpcworICAgIC8vLyBpcyB0byBkcmF3IGhpZ2hsaWdodGVkIHNlbGVjdGlvbiBvZiB0aGUgdGV4dCBzdHJpbmcuCisgICAgLy8vCisgICAgLy8vIFRoZSBmdW5jdGlvbiByZXR1cm5zIEVfTk9UX1NVRkZJQ0lFTlRfQlVGRkVSLCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIAorICAgIC8vLyBIUkVTVUxUX0ZST01fV0lOMzIoRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUiksIHdoZW4gdGhlIGJ1ZmZlciBzaXplIG9mCisgICAgLy8vIGhpdFRlc3RNZXRyaWNzIGlzIHRvbyBzbWFsbCB0byBob2xkIGFsbCB0aGUgcmVnaW9ucyBjYWxjdWxhdGVkIGJ5IHRoZQorICAgIC8vLyBmdW5jdGlvbi4gSW4gc3VjaCBzaXR1YXRpb24sIHRoZSBmdW5jdGlvbiBzZXRzIHRoZSBvdXRwdXQgdmFsdWUKKyAgICAvLy8gKmFjdHVhbEhpdFRlc3RNZXRyaWNzQ291bnQgdG8gdGhlIG51bWJlciBvZiBnZW9tZXRyaWVzIGNhbGN1bGF0ZWQuCisgICAgLy8vIFRoZSBhcHBsaWNhdGlvbiBpcyByZXNwb25zaWJsZSB0byBhbGxvY2F0ZSBhIG5ldyBidWZmZXIgb2YgZ3JlYXRlcgorICAgIC8vLyBzaXplIGFuZCBjYWxsIHRoZSBmdW5jdGlvbiBhZ2Fpbi4KKyAgICAvLy8KKyAgICAvLy8gQSBnb29kIHZhbHVlIHRvIHVzZSBhcyBhbiBpbml0aWFsIHZhbHVlIGZvciBtYXhIaXRUZXN0TWV0cmljc0NvdW50IG1heQorICAgIC8vLyBiZSBjYWxjdWxhdGVkIGZyb20gdGhlIGZvbGxvd2luZyBlcXVhdGlvbjoKKyAgICAvLy8gICAgIG1heEhpdFRlc3RNZXRyaWNzQ291bnQgPSBsaW5lQ291bnQgKiBtYXhCaWRpUmVvcmRlcmluZ0RlcHRoCisgICAgLy8vCisgICAgLy8vIHdoZXJlIGxpbmVDb3VudCBpcyBvYnRhaW5lZCBmcm9tIHRoZSB2YWx1ZSBvZiB0aGUgb3V0cHV0IGFyZ3VtZW50CisgICAgLy8vICphY3R1YWxMaW5lQ291bnQgZnJvbSB0aGUgZnVuY3Rpb24gSURXcml0ZVRleHRMYXlvdXQ6OkdldExpbmVNZXRyaWNzLAorICAgIC8vLyBhbmQgdGhlIG1heEJpZGlSZW9yZGVyaW5nRGVwdGggdmFsdWUgZnJvbSB0aGUgRFdSSVRFX1RFWFRfTUVUUklDUworICAgIC8vLyBzdHJ1Y3R1cmUgb2YgdGhlIG91dHB1dCBhcmd1bWVudCAqdGV4dE1ldHJpY3MgZnJvbSB0aGUgZnVuY3Rpb24KKyAgICAvLy8gSURXcml0ZUZhY3Rvcnk6OkNyZWF0ZVRleHRMYXlvdXQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRQb3NpdGlvbiI+Rmlyc3QgdGV4dCBwb3NpdGlvbiBvZiB0aGUgc3BlY2lmaWVkIHJhbmdlLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0TGVuZ3RoIj5OdW1iZXIgb2YgcG9zaXRpb25zIG9mIHRoZSBzcGVjaWZpZWQgcmFuZ2UuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9Im9yaWdpblgiPk9mZnNldCBvZiB0aGUgWCBvcmlnaW4gKGxlZnQgb2YgdGhlIGxheW91dCBib3gpIHdoaWNoIGlzIGFkZGVkIHRvIGVhY2ggb2YgdGhlIGhpdC10ZXN0IG1ldHJpY3MgcmV0dXJuZWQuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9Im9yaWdpblkiPk9mZnNldCBvZiB0aGUgWSBvcmlnaW4gKHRvcCBvZiB0aGUgbGF5b3V0IGJveCkgd2hpY2ggaXMgYWRkZWQgdG8gZWFjaCBvZiB0aGUgaGl0LXRlc3QgbWV0cmljcyByZXR1cm5lZC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaGl0VGVzdE1ldHJpY3MiPlBvaW50ZXIgdG8gYSBidWZmZXIgb2YgdGhlIG91dHB1dCBnZW9tZXRyeSBmdWxseSBlbmNsb3NpbmcgdGhlIHNwZWNpZmllZCBwb3NpdGlvbiByYW5nZS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibWF4SGl0VGVzdE1ldHJpY3NDb3VudCI+TWF4aW11bSBudW1iZXIgb2YgZGlzdGluY3QgbWV0cmljcyBpdCBjb3VsZCBob2xkIGluIGl0cyBidWZmZXIgbWVtb3J5LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJhY3R1YWxIaXRUZXN0TWV0cmljc0NvdW50Ij5BY3R1YWwgbnVtYmVyIG9mIG1ldHJpY3MgcmV0dXJuZWQgb3IgbmVlZGVkLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICAvLy8gPHJlbWFya3M+CisgICAgLy8vIFRoZXJlIGFyZSBubyBnYXBzIGluIHRoZSByZXR1cm5lZCBtZXRyaWNzLiBXaGlsZSB0aGVyZSBjb3VsZCBiZSB2aXN1YWwgZ2FwcywKKyAgICAvLy8gZGVwZW5kaW5nIG9uIGJpZGkgb3JkZXJpbmcsIGVhY2ggcmFuZ2UgaXMgY29udGlndW91cyBhbmQgcmVwb3J0cyBhbGwgdGhlIHRleHQsCisgICAgLy8vIGluY2x1ZGluZyBhbnkgaGlkZGVuIGNoYXJhY3RlcnMgYW5kIHRyaW1tZWQgdGV4dC4KKyAgICAvLy8gVGhlIGhlaWdodCBvZiBlYWNoIHJldHVybmVkIHJhbmdlIHdpbGwgYmUgdGhlIHNhbWUgd2l0aGluIGVhY2ggbGluZSwgcmVnYXJkbGVzcworICAgIC8vLyBvZiBob3cgdGhlIGZvbnQgc2l6ZXMgdmFyeS4KKyAgICAvLy8gPC9yZW1hcmtzPgorICAgIFNURE1FVEhPRChIaXRUZXN0VGV4dFJhbmdlKSgKKyAgICAgICAgVUlOVDMyIHRleHRQb3NpdGlvbiwKKyAgICAgICAgVUlOVDMyIHRleHRMZW5ndGgsCisgICAgICAgIEZMT0FUIG9yaWdpblgsCisgICAgICAgIEZMT0FUIG9yaWdpblksCisgICAgICAgIF9fb3V0X2Vjb3VudF9vcHQobWF4SGl0VGVzdE1ldHJpY3NDb3VudCkgRFdSSVRFX0hJVF9URVNUX01FVFJJQ1MqIGhpdFRlc3RNZXRyaWNzLAorICAgICAgICBVSU5UMzIgbWF4SGl0VGVzdE1ldHJpY3NDb3VudCwKKyAgICAgICAgX19vdXQgVUlOVDMyKiBhY3R1YWxIaXRUZXN0TWV0cmljc0NvdW50CisgICAgICAgICkgUFVSRTsKK307CisKKy8vLyA8c3VtbWFyeT4KKy8vLyBFbmNhcHN1bGF0ZXMgYSAzMi1iaXQgZGV2aWNlIGluZGVwZW5kZW50IGJpdG1hcCBhbmQgZGV2aWNlIGNvbnRleHQsIHdoaWNoIGNhbiBiZSB1c2VkIGZvciByZW5kZXJpbmcgZ2x5cGhzLgorLy8vIDwvc3VtbWFyeT4KK2ludGVyZmFjZSBEV1JJVEVfREVDTEFSRV9JTlRFUkZBQ0UoIjVlNWEzMmEzLThkZmYtNDc3My05ZmY2LTA2OTZlYWI3NzI2NyIpIElEV3JpdGVCaXRtYXBSZW5kZXJUYXJnZXQgOiBwdWJsaWMgSVVua25vd24KK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIERyYXdzIGEgcnVuIG9mIGdseXBocyB0byB0aGUgYml0bWFwLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJiYXNlbGluZU9yaWdpblgiPkhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIGJhc2VsaW5lIG9yaWdpbiwgaW4gRElQcywgcmVsYXRpdmUgdG8gdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBESUIuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImJhc2VsaW5lT3JpZ2luWSI+VmVydGljYWwgcG9zaXRpb24gb2YgdGhlIGJhc2VsaW5lIG9yaWdpbiwgaW4gRElQcywgcmVsYXRpdmUgdG8gdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBESUIuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9Im1lYXN1cmluZ01vZGUiPlNwZWNpZmllcyBtZWFzdXJpbmcgbWV0aG9kIGZvciBnbHlwaHMgaW4gdGhlIHJ1bi4KKyAgICAvLy8gUmVuZGVyZXIgaW1wbGVtZW50YXRpb25zIG1heSBjaG9vc2UgZGlmZmVyZW50IHJlbmRlcmluZyBtb2RlcyBmb3IgZGlmZmVyZW50IG1lYXN1cmluZyBtZXRob2RzLCBmb3IgZXhhbXBsZQorICAgIC8vLyBEV1JJVEVfUkVOREVSSU5HX01PREVfQ0xFQVJUWVBFX05BVFVSQUwgZm9yIERXUklURV9NRUFTVVJJTkdfTU9ERV9OQVRVUkFMLAorICAgIC8vLyBEV1JJVEVfUkVOREVSSU5HX01PREVfQ0xFQVJUWVBFX0dESV9DTEFTU0lDIGZvciBEV1JJVEVfTUVBU1VSSU5HX01PREVfR0RJX0NMQVNTSUMsIGFuZAorICAgIC8vLyBEV1JJVEVfUkVOREVSSU5HX01PREVfQ0xFQVJUWVBFX0dESV9OQVRVUkFMIGZvciBEV1JJVEVfTUVBU1VSSU5HX01PREVfR0RJX05BVFVSQUwuCisgICAgLy8vIDwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaFJ1biI+U3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdseXBoIHJ1bi48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0icmVuZGVyaW5nUGFyYW1zIj5PYmplY3QgdGhhdCBjb250cm9scyByZW5kZXJpbmcgYmVoYXZpb3IuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRDb2xvciI+U3BlY2lmaWVzIHRoZSBmb3JlZ3JvdW5kIGNvbG9yIG9mIHRoZSB0ZXh0LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJibGFja0JveFJlY3QiPk9wdGlvbmFsIHJlY3RhbmdsZSB0aGF0IHJlY2VpdmVzIHRoZSBib3VuZGluZyBib3ggKGluIHBpeGVscyBub3QgRElQcykgb2YgYWxsIHRoZSBwaXhlbHMgYWZmZWN0ZWQgYnkgCisgICAgLy8vIGRyYXdpbmcgdGhlIGdseXBoIHJ1bi4gVGhlIGJsYWNrIGJveCByZWN0YW5nbGUgbWF5IGV4dGVuZCBiZXlvbmQgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGJpdG1hcC48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKERyYXdHbHlwaFJ1bikoCisgICAgICAgIEZMT0FUIGJhc2VsaW5lT3JpZ2luWCwKKyAgICAgICAgRkxPQVQgYmFzZWxpbmVPcmlnaW5ZLAorICAgICAgICBEV1JJVEVfTUVBU1VSSU5HX01PREUgbWVhc3VyaW5nTW9kZSwKKyAgICAgICAgX19pbiBEV1JJVEVfR0xZUEhfUlVOIGNvbnN0KiBnbHlwaFJ1biwKKyAgICAgICAgSURXcml0ZVJlbmRlcmluZ1BhcmFtcyogcmVuZGVyaW5nUGFyYW1zLAorICAgICAgICBDT0xPUlJFRiB0ZXh0Q29sb3IsCisgICAgICAgIF9fb3V0X29wdCBSRUNUKiBibGFja0JveFJlY3QgPSBOVUxMCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0cyBhIGhhbmRsZSB0byB0aGUgbWVtb3J5IGRldmljZSBjb250ZXh0LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBSZXR1cm5zIHRoZSBkZXZpY2UgY29udGV4dCBoYW5kbGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICAvLy8gPHJlbWFya3M+CisgICAgLy8vIEFuIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlIGRldmljZSBjb250ZXh0IHRvIGRyYXcgdXNpbmcgR0RJIGZ1bmN0aW9ucy4gQW4gYXBwbGljYXRpb24gY2FuIG9idGFpbiB0aGUgYml0bWFwIGhhbmRsZQorICAgIC8vLyAoSEJJVE1BUCkgYnkgY2FsbGluZyBHZXRDdXJyZW50T2JqZWN0LiBBbiBhcHBsaWNhdGlvbiB0aGF0IHdhbnRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB1bmRlcmx5aW5nIGJpdG1hcCwgaW5jbHVkaW5nCisgICAgLy8vIGEgcG9pbnRlciB0byB0aGUgcGl4ZWwgZGF0YSwgY2FuIGNhbGwgR2V0T2JqZWN0IHRvIGZpbGwgaW4gYSBESUJTRUNUSU9OIHN0cnVjdHVyZS4gVGhlIGJpdG1hcCBpcyBhbHdheXMgYSAzMi1iaXQgCisgICAgLy8vIHRvcC1kb3duIERJQi4KKyAgICAvLy8gPC9yZW1hcmtzPgorICAgIFNURE1FVEhPRF8oSERDLCBHZXRNZW1vcnlEQykoKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXRzIHRoZSBudW1iZXIgb2YgYml0bWFwIHBpeGVscyBwZXIgRElQLiBBIERJUCAoZGV2aWNlLWluZGVwZW5kZW50IHBpeGVsKSBpcyAxLzk2IGluY2ggc28gdGhpcyB2YWx1ZSBpcyB0aGUgbnVtYmVyCisgICAgLy8vIGlmIHBpeGVscyBwZXIgaW5jaCBkaXZpZGVkIGJ5IDk2LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYml0bWFwIHBpeGVscyBwZXIgRElQLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EXyhGTE9BVCwgR2V0UGl4ZWxzUGVyRGlwKSgpIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFNldHMgdGhlIG51bWJlciBvZiBiaXRtYXAgcGl4ZWxzIHBlciBESVAuIEEgRElQIChkZXZpY2UtaW5kZXBlbmRlbnQgcGl4ZWwpIGlzIDEvOTYgaW5jaCBzbyB0aGlzIHZhbHVlIGlzIHRoZSBudW1iZXIKKyAgICAvLy8gaWYgcGl4ZWxzIHBlciBpbmNoIGRpdmlkZWQgYnkgOTYuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InBpeGVsc1BlckRpcCI+U3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcGl4ZWxzIHBlciBESVAuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChTZXRQaXhlbHNQZXJEaXApKAorICAgICAgICBGTE9BVCBwaXhlbHNQZXJEaXAKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXRzIHRoZSB0cmFuc2Zvcm0gdGhhdCBtYXBzIGFic3RyYWN0IGNvb3JkaW5hdGUgdG8gRElQcy4gQnkgZGVmYXVsdCB0aGlzIGlzIHRoZSBpZGVudGl0eSAKKyAgICAvLy8gdHJhbnNmb3JtLiBOb3RlIHRoYXQgdGhpcyBpcyB1bnJlbGF0ZWQgdG8gdGhlIHdvcmxkIHRyYW5zZm9ybSBvZiB0aGUgdW5kZXJseWluZyBkZXZpY2UKKyAgICAvLy8gY29udGV4dC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0idHJhbnNmb3JtIj5SZWNlaXZlcyB0aGUgdHJhbnNmb3JtLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0Q3VycmVudFRyYW5zZm9ybSkoCisgICAgICAgIF9fb3V0IERXUklURV9NQVRSSVgqIHRyYW5zZm9ybQorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFNldHMgdGhlIHRyYW5zZm9ybSB0aGF0IG1hcHMgYWJzdHJhY3QgY29vcmRpbmF0ZSB0byBESVBzLiBUaGlzIGRvZXMgbm90IGFmZmVjdCB0aGUgd29ybGQKKyAgICAvLy8gdHJhbnNmb3JtIG9mIHRoZSB1bmRlcmx5aW5nIGRldmljZSBjb250ZXh0LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0cmFuc2Zvcm0iPlNwZWNpZmllcyB0aGUgbmV3IHRyYW5zZm9ybS4gVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIE5VTEwsIGluIHdoaWNoCisgICAgLy8vIGNhc2UgdGhlIGlkZW50aXR5IHRyYW5zZm9ybSBpcyBpbXBsaWVkLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoU2V0Q3VycmVudFRyYW5zZm9ybSkoCisgICAgICAgIF9faW5fb3B0IERXUklURV9NQVRSSVggY29uc3QqIHRyYW5zZm9ybQorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIEdldHMgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGJpdG1hcC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0ic2l6ZSI+UmVjZWl2ZXMgdGhlIHNpemUgb2YgdGhlIGJpdG1hcCBpbiBwaXhlbHMuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChHZXRTaXplKSgKKyAgICAgICAgX19vdXQgU0laRSogc2l6ZQorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFJlc2l6ZXMgdGhlIGJpdG1hcC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0id2lkdGgiPk5ldyBiaXRtYXAgd2lkdGgsIGluIHBpeGVscy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaGVpZ2h0Ij5OZXcgYml0bWFwIGhlaWdodCwgaW4gcGl4ZWxzLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoUmVzaXplKSgKKyAgICAgICAgVUlOVDMyIHdpZHRoLAorICAgICAgICBVSU5UMzIgaGVpZ2h0CisgICAgICAgICkgUFVSRTsKK307CisKKy8vLyA8c3VtbWFyeT4KKy8vLyBUaGUgR0RJIGludGVyb3AgaW50ZXJmYWNlIHByb3ZpZGVzIGludGVyb3BlcmFiaWxpdHkgd2l0aCBHREkuCisvLy8gPC9zdW1tYXJ5PgoraW50ZXJmYWNlIERXUklURV9ERUNMQVJFX0lOVEVSRkFDRSgiMWVkZDk0OTEtOTg1My00Mjk5LTg5OGYtNjQzMjk4M2I2ZjNhIikgSURXcml0ZUdkaUludGVyb3AgOiBwdWJsaWMgSVVua25vd24KK3sKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIENyZWF0ZXMgYSBmb250IG9iamVjdCB0aGF0IG1hdGNoZXMgdGhlIHByb3BlcnRpZXMgc3BlY2lmaWVkIGJ5IHRoZSBMT0dGT05UIHN0cnVjdHVyZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibG9nRm9udCI+U3RydWN0dXJlIGNvbnRhaW5pbmcgYSBHREktY29tcGF0aWJsZSBmb250IGRlc2NyaXB0aW9uLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmb250Ij5SZWNlaXZlcyBhIG5ld2x5IGNyZWF0ZWQgZm9udCBvYmplY3QgaWYgc3VjY2Vzc2Z1bCwgb3IgTlVMTCBpbiBjYXNlIG9mIGVycm9yLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoQ3JlYXRlRm9udEZyb21MT0dGT05UKSgKKyAgICAgICAgX19pbiBMT0dGT05UVyBjb25zdCogbG9nRm9udCwKKyAgICAgICAgX19vdXQgSURXcml0ZUZvbnQqKiBmb250CisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gSW5pdGlhbGl6ZXMgYSBMT0dGT05UIHN0cnVjdHVyZSBiYXNlZCBvbiB0aGUgR0RJLWNvbXBhdGlibGUgcHJvcGVydGllcyBvZiB0aGUgc3BlY2lmaWVkIGZvbnQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnQiPlNwZWNpZmllcyBhIGZvbnQgaW4gdGhlIHN5c3RlbSBmb250IGNvbGxlY3Rpb24uPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImxvZ0ZvbnQiPlN0cnVjdHVyZSB0aGF0IHJlY2VpdmVzIGEgR0RJLWNvbXBhdGlibGUgZm9udCBkZXNjcmlwdGlvbi48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaXNTeXN0ZW1Gb250Ij5Db250YWlucyBUUlVFIGlmIHRoZSBzcGVjaWZpZWQgZm9udCBvYmplY3QgaXMgcGFydCBvZiB0aGUgc3lzdGVtIGZvbnQgY29sbGVjdGlvbgorICAgIC8vLyBvciBGQUxTRSBvdGhlcndpc2UuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChDb252ZXJ0Rm9udFRvTE9HRk9OVCkoCisgICAgICAgIElEV3JpdGVGb250KiBmb250LAorICAgICAgICBfX291dCBMT0dGT05UVyogbG9nRm9udCwKKyAgICAgICAgX19vdXQgQk9PTCogaXNTeXN0ZW1Gb250CisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gSW5pdGlhbGl6ZXMgYSBMT0dGT05UIHN0cnVjdHVyZSBiYXNlZCBvbiB0aGUgR0RJLWNvbXBhdGlibGUgcHJvcGVydGllcyBvZiB0aGUgc3BlY2lmaWVkIGZvbnQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnQiPlNwZWNpZmllcyBhIGZvbnQgZmFjZS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibG9nRm9udCI+U3RydWN0dXJlIHRoYXQgcmVjZWl2ZXMgYSBHREktY29tcGF0aWJsZSBmb250IGRlc2NyaXB0aW9uLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoQ29udmVydEZvbnRGYWNlVG9MT0dGT05UKSgKKyAgICAgICAgSURXcml0ZUZvbnRGYWNlKiBmb250LAorICAgICAgICBfX291dCBMT0dGT05UVyogbG9nRm9udAorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIENyZWF0ZXMgYSBmb250IGZhY2Ugb2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBIRk9OVC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iaGRjIj5IYW5kbGUgdG8gYSBkZXZpY2UgY29udGV4dCBpbnRvIHdoaWNoIGEgZm9udCBoYXMgYmVlbiBzZWxlY3RlZC4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBjbGllbnQKKyAgICAvLy8gaGFzIGFscmVhZHkgcGVyZm9ybWVkIGZvbnQgbWFwcGluZyBhbmQgdGhhdCB0aGUgZm9udCBzZWxlY3RlZCBpbnRvIHRoZSBEQyBpcyB0aGUgYWN0dWFsIGZvbnQgdGhhdCB3b3VsZCBiZSB1c2VkIAorICAgIC8vLyBmb3IgcmVuZGVyaW5nIGdseXBocy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZhY2UiPkNvbnRhaW5zIHRoZSBuZXdseSBjcmVhdGVkIGZvbnQgZmFjZSBvYmplY3QsIG9yIE5VTEwgaW4gY2FzZSBvZiBmYWlsdXJlLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoQ3JlYXRlRm9udEZhY2VGcm9tSGRjKSgKKyAgICAgICAgSERDIGhkYywKKyAgICAgICAgX19vdXQgSURXcml0ZUZvbnRGYWNlKiogZm9udEZhY2UKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBDcmVhdGVzIGFuIG9iamVjdCB0aGF0IGVuY2Fwc3VsYXRlcyBhIGJpdG1hcCBhbmQgbWVtb3J5IERDIHdoaWNoIGNhbiBiZSB1c2VkIGZvciByZW5kZXJpbmcgZ2x5cGhzLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJoZGMiPk9wdGlvbmFsIGRldmljZSBjb250ZXh0IHVzZWQgdG8gY3JlYXRlIGEgY29tcGF0aWJsZSBtZW1vcnkgREMuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9IndpZHRoIj5XaWR0aCBvZiB0aGUgYml0bWFwLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJoZWlnaHQiPkhlaWdodCBvZiB0aGUgYml0bWFwLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJyZW5kZXJUYXJnZXQiPlJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgY3JlYXRlZCByZW5kZXIgdGFyZ2V0LjwvcGFyYW0+CisgICAgU1RETUVUSE9EKENyZWF0ZUJpdG1hcFJlbmRlclRhcmdldCkoCisgICAgICAgIF9faW5fb3B0IEhEQyBoZGMsCisgICAgICAgIFVJTlQzMiB3aWR0aCwKKyAgICAgICAgVUlOVDMyIGhlaWdodCwKKyAgICAgICAgX19vdXQgSURXcml0ZUJpdG1hcFJlbmRlclRhcmdldCoqIHJlbmRlclRhcmdldAorICAgICAgICApIFBVUkU7Cit9OworCisvLy8gPHN1bW1hcnk+CisvLy8gVGhlIERXUklURV9URVhUVVJFX1RZUEUgZW51bWVyYXRpb24gaWRlbnRpZmllcyBhIHR5cGUgb2YgYWxwaGEgdGV4dHVyZS4gQW4gYWxwaGEgdGV4dHVyZSBpcyBhIGJpdG1hcCBvZiBhbHBoYSB2YWx1ZXMsIGVhY2gKKy8vLyByZXByZXNlbnRpbmcgdGhlIGRhcmtuZXNzIChpLmUuLCBvcGFjaXR5KSBvZiBhIHBpeGVsIG9yIHN1YnBpeGVsLgorLy8vIDwvc3VtbWFyeT4KK2VudW0gRFdSSVRFX1RFWFRVUkVfVFlQRQoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gU3BlY2lmaWVzIGFuIGFscGhhIHRleHR1cmUgZm9yIGFsaWFzZWQgdGV4dCByZW5kZXJpbmcgKGkuZS4sIGJpLWxldmVsLCB3aGVyZSBlYWNoIHBpeGVsIGlzIGVpdGhlciBmdWxseSBvcGFxdWUgb3IgZnVsbHkgdHJhbnNwYXJlbnQpLAorICAgIC8vLyB3aXRoIG9uZSBieXRlIHBlciBwaXhlbC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9URVhUVVJFX0FMSUFTRURfMXgxLAorCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBTcGVjaWZpZXMgYW4gYWxwaGEgdGV4dHVyZSBmb3IgQ2xlYXJUeXBlIHRleHQgcmVuZGVyaW5nLCB3aXRoIHRocmVlIGJ5dGVzIHBlciBwaXhlbCBpbiB0aGUgaG9yaXpvbnRhbCBkaW1lbnNpb24gYW5kIAorICAgIC8vLyBvbmUgYnl0ZSBwZXIgcGl4ZWwgaW4gdGhlIHZlcnRpY2FsIGRpbWVuc2lvbi4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9URVhUVVJFX0NMRUFSVFlQRV8zeDEKK307CisKKy8vLyA8c3VtbWFyeT4KKy8vLyBNYXhpbXVtIGFscGhhIHZhbHVlIGluIGEgdGV4dHVyZSByZXR1cm5lZCBieSBJRFdyaXRlR2x5cGhSdW5BbmFseXNpczo6Q3JlYXRlQWxwaGFUZXh0dXJlLgorLy8vIDwvc3VtbWFyeT4KKyNkZWZpbmUgRFdSSVRFX0FMUEhBX01BWCAyNTUKKworLy8vIDxzdW1tYXJ5PgorLy8vIEludGVyZmFjZSB0aGF0IGVuY2Fwc3VsYXRlcyBpbmZvcm1hdGlvbiB1c2VkIHRvIHJlbmRlciBhIGdseXBoIHJ1bi4KKy8vLyA8L3N1bW1hcnk+CitpbnRlcmZhY2UgRFdSSVRFX0RFQ0xBUkVfSU5URVJGQUNFKCI3ZDk3ZGJmNy1lMDg1LTQyZDQtODFlMy02YTg4M2JkZWQxMTgiKSBJRFdyaXRlR2x5cGhSdW5BbmFseXNpcyA6IHB1YmxpYyBJVW5rbm93bgoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gR2V0cyB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIG9mIHRoZSBwaHlzaWNhbCBwaXhlbHMgYWZmZWN0ZWQgYnkgdGhlIGdseXBoIHJ1bi4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dHVyZVR5cGUiPlNwZWNpZmllcyB0aGUgdHlwZSBvZiB0ZXh0dXJlIHJlcXVlc3RlZC4gSWYgYSBiaS1sZXZlbCB0ZXh0dXJlIGlzIHJlcXVlc3RlZCwgdGhlCisgICAgLy8vIGJvdW5kaW5nIHJlY3RhbmdsZSBpbmNsdWRlcyBvbmx5IGJpLWxldmVsIGdseXBocy4gT3RoZXJ3aXNlLCB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIGluY2x1ZGVzIG9ubHkgYW50aS1hbGlhc2VkCisgICAgLy8vIGdseXBocy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dHVyZUJvdW5kcyI+UmVjZWl2ZXMgdGhlIGJvdW5kaW5nIHJlY3RhbmdsZSwgb3IgYW4gZW1wdHkgcmVjdGFuZ2xlIGlmIHRoZXJlIGFyZSBubyBnbHlwaHMKKyAgICAvLy8gaWYgdGhlIHNwZWNpZmllZCB0eXBlLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoR2V0QWxwaGFUZXh0dXJlQm91bmRzKSgKKyAgICAgICAgRFdSSVRFX1RFWFRVUkVfVFlQRSB0ZXh0dXJlVHlwZSwKKyAgICAgICAgX19vdXQgUkVDVCogdGV4dHVyZUJvdW5kcworICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIENyZWF0ZXMgYW4gYWxwaGEgdGV4dHVyZSBvZiB0aGUgc3BlY2lmaWVkIHR5cGUuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHR1cmVUeXBlIj5TcGVjaWZpZXMgdGhlIHR5cGUgb2YgdGV4dHVyZSByZXF1ZXN0ZWQuIElmIGEgYmktbGV2ZWwgdGV4dHVyZSBpcyByZXF1ZXN0ZWQsIHRoZQorICAgIC8vLyB0ZXh0dXJlIGNvbnRhaW5zIG9ubHkgYmktbGV2ZWwgZ2x5cGhzLiBPdGhlcndpc2UsIHRoZSB0ZXh0dXJlIGNvbnRhaW5zIG9ubHkgYW50aS1hbGlhc2VkIGdseXBocy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dHVyZUJvdW5kcyI+U3BlY2lmaWVzIHRoZSBib3VuZGluZyByZWN0YW5nbGUgb2YgdGhlIHRleHR1cmUsIHdoaWNoIGNhbiBiZSBkaWZmZXJlbnQgdGhhbgorICAgIC8vLyB0aGUgYm91bmRpbmcgcmVjdGFuZ2xlIHJldHVybmVkIGJ5IEdldEFscGhhVGV4dHVyZUJvdW5kcy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iYWxwaGFWYWx1ZXMiPlJlY2VpdmVzIHRoZSBhcnJheSBvZiBhbHBoYSB2YWx1ZXMuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImJ1ZmZlclNpemUiPlNpemUgb2YgdGhlIGFscGhhVmFsdWVzIGFycmF5LiBUaGUgbWluaW11bSBzaXplIGRlcGVuZHMgb24gdGhlIGRpbWVuc2lvbnMgb2YgdGhlCisgICAgLy8vIHJlY3RhbmdsZSBhbmQgdGhlIHR5cGUgb2YgdGV4dHVyZSByZXF1ZXN0ZWQuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChDcmVhdGVBbHBoYVRleHR1cmUpKAorICAgICAgICBEV1JJVEVfVEVYVFVSRV9UWVBFIHRleHR1cmVUeXBlLAorICAgICAgICBfX2luIFJFQ1QgY29uc3QqIHRleHR1cmVCb3VuZHMsCisgICAgICAgIF9fb3V0X2Jjb3VudChidWZmZXJTaXplKSBCWVRFKiBhbHBoYVZhbHVlcywKKyAgICAgICAgVUlOVDMyIGJ1ZmZlclNpemUKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXRzIHByb3BlcnRpZXMgcmVxdWlyZWQgZm9yIENsZWFyVHlwZSBibGVuZGluZy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0icmVuZGVyaW5nUGFyYW1zIj5SZW5kZXJpbmcgcGFyYW1ldGVycyBvYmplY3QuIEluIG1vc3QgY2FzZXMsIHRoZSB2YWx1ZXMgcmV0dXJuZWQgaW4gdGhlIG91dHB1dAorICAgIC8vLyBwYXJhbWV0ZXJzIGFyZSBiYXNlZCBvbiB0aGUgcHJvcGVydGllcyBvZiB0aGlzIG9iamVjdC4gVGhlIGV4Y2VwdGlvbiBpcyBpZiBhIEdESS1jb21wYXRpYmxlIHJlbmRlcmluZyBtb2RlCisgICAgLy8vIGlzIHNwZWNpZmllZC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iYmxlbmRHYW1tYSI+UmVjZWl2ZXMgdGhlIGdhbW1hIHZhbHVlIHRvIHVzZSBmb3IgZ2FtbWEgY29ycmVjdGlvbi48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iYmxlbmRFbmhhbmNlZENvbnRyYXN0Ij5SZWNlaXZlcyB0aGUgZW5oYW5jZWQgY29udHJhc3QgdmFsdWUuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImJsZW5kQ2xlYXJUeXBlTGV2ZWwiPlJlY2VpdmVzIHRoZSBDbGVhclR5cGUgbGV2ZWwuPC9wYXJhbT4KKyAgICBTVERNRVRIT0QoR2V0QWxwaGFCbGVuZFBhcmFtcykoCisgICAgICAgIElEV3JpdGVSZW5kZXJpbmdQYXJhbXMqIHJlbmRlcmluZ1BhcmFtcywKKyAgICAgICAgX19vdXQgRkxPQVQqIGJsZW5kR2FtbWEsCisgICAgICAgIF9fb3V0IEZMT0FUKiBibGVuZEVuaGFuY2VkQ29udHJhc3QsCisgICAgICAgIF9fb3V0IEZMT0FUKiBibGVuZENsZWFyVHlwZUxldmVsCisgICAgICAgICkgUFVSRTsKK307CisKKy8vLyA8c3VtbWFyeT4KKy8vLyBUaGUgcm9vdCBmYWN0b3J5IGludGVyZmFjZSBmb3IgYWxsIERXcml0ZSBvYmplY3RzLgorLy8vIDwvc3VtbWFyeT4KK2ludGVyZmFjZSBEV1JJVEVfREVDTEFSRV9JTlRFUkZBQ0UoImI4NTllZTVhLWQ4MzgtNGI1Yi1hMmU4LTFhZGM3ZDkzZGI0OCIpIElEV3JpdGVGYWN0b3J5IDogcHVibGljIElVbmtub3duCit7CisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBHZXRzIGEgZm9udCBjb2xsZWN0aW9uIHJlcHJlc2VudGluZyB0aGUgc2V0IG9mIGluc3RhbGxlZCBmb250cy4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udENvbGxlY3Rpb24iPlJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgc3lzdGVtIGZvbnQgY29sbGVjdGlvbiBvYmplY3QsIG9yIE5VTEwgaW4gY2FzZSBvZiBmYWlsdXJlLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJjaGVja0ZvclVwZGF0ZXMiPklmIHRoaXMgcGFyYW1ldGVyIGlzIG5vbnplcm8sIHRoZSBmdW5jdGlvbiBwZXJmb3JtcyBhbiBpbW1lZGlhdGUgY2hlY2sgZm9yIGNoYW5nZXMgdG8gdGhlIHNldCBvZgorICAgIC8vLyBpbnN0YWxsZWQgZm9udHMuIElmIHRoaXMgcGFyYW1ldGVyIGlzIEZBTFNFLCB0aGUgZnVuY3Rpb24gd2lsbCBzdGlsbCBkZXRlY3QgY2hhbmdlcyBpZiB0aGUgZm9udCBjYWNoZSBzZXJ2aWNlIGlzIHJ1bm5pbmcsIGJ1dAorICAgIC8vLyB0aGVyZSBtYXkgYmUgc29tZSBsYXRlbmN5LiBGb3IgZXhhbXBsZSwgYW4gYXBwbGljYXRpb24gbWlnaHQgc3BlY2lmeSBUUlVFIGlmIGl0IGhhcyBpdHNlbGYganVzdCBpbnN0YWxsZWQgYSBmb250IGFuZCB3YW50cyB0byAKKyAgICAvLy8gYmUgc3VyZSB0aGUgZm9udCBjb2xsZWN0aW9uIGNvbnRhaW5zIHRoYXQgZm9udC48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKEdldFN5c3RlbUZvbnRDb2xsZWN0aW9uKSgKKyAgICAgICAgX19vdXQgSURXcml0ZUZvbnRDb2xsZWN0aW9uKiogZm9udENvbGxlY3Rpb24sCisgICAgICAgIEJPT0wgY2hlY2tGb3JVcGRhdGVzID0gRkFMU0UKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBDcmVhdGVzIGEgZm9udCBjb2xsZWN0aW9uIHVzaW5nIGEgY3VzdG9tIGZvbnQgY29sbGVjdGlvbiBsb2FkZXIuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImNvbGxlY3Rpb25Mb2FkZXIiPkFwcGxpY2F0aW9uLWRlZmluZWQgZm9udCBjb2xsZWN0aW9uIGxvYWRlciwgd2hpY2ggbXVzdCBoYXZlIGJlZW4gcHJldmlvdXNseQorICAgIC8vLyByZWdpc3RlcmVkIHVzaW5nIFJlZ2lzdGVyRm9udENvbGxlY3Rpb25Mb2FkZXIuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImNvbGxlY3Rpb25LZXkiPktleSB1c2VkIGJ5IHRoZSBsb2FkZXIgdG8gaWRlbnRpZnkgYSBjb2xsZWN0aW9uIG9mIGZvbnQgZmlsZXMuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImNvbGxlY3Rpb25LZXlTaXplIj5TaXplIGluIGJ5dGVzIG9mIHRoZSBjb2xsZWN0aW9uIGtleS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udENvbGxlY3Rpb24iPlJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgc3lzdGVtIGZvbnQgY29sbGVjdGlvbiBvYmplY3QsIG9yIE5VTEwgaW4gY2FzZSBvZiBmYWlsdXJlLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoQ3JlYXRlQ3VzdG9tRm9udENvbGxlY3Rpb24pKAorICAgICAgICBJRFdyaXRlRm9udENvbGxlY3Rpb25Mb2FkZXIqIGNvbGxlY3Rpb25Mb2FkZXIsCisgICAgICAgIF9faW5fYmNvdW50KGNvbGxlY3Rpb25LZXlTaXplKSB2b2lkIGNvbnN0KiBjb2xsZWN0aW9uS2V5LAorICAgICAgICBVSU5UMzIgY29sbGVjdGlvbktleVNpemUsCisgICAgICAgIF9fb3V0IElEV3JpdGVGb250Q29sbGVjdGlvbioqIGZvbnRDb2xsZWN0aW9uCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gUmVnaXN0ZXJzIGEgY3VzdG9tIGZvbnQgY29sbGVjdGlvbiBsb2FkZXIgd2l0aCB0aGUgZmFjdG9yeSBvYmplY3QuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRDb2xsZWN0aW9uTG9hZGVyIj5BcHBsaWNhdGlvbi1kZWZpbmVkIGZvbnQgY29sbGVjdGlvbiBsb2FkZXIuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChSZWdpc3RlckZvbnRDb2xsZWN0aW9uTG9hZGVyKSgKKyAgICAgICAgSURXcml0ZUZvbnRDb2xsZWN0aW9uTG9hZGVyKiBmb250Q29sbGVjdGlvbkxvYWRlcgorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFVucmVnaXN0ZXJzIGEgY3VzdG9tIGZvbnQgY29sbGVjdGlvbiBsb2FkZXIgdGhhdCB3YXMgcHJldmlvdXNseSByZWdpc3RlcmVkIHVzaW5nIFJlZ2lzdGVyRm9udENvbGxlY3Rpb25Mb2FkZXIuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRDb2xsZWN0aW9uTG9hZGVyIj5BcHBsaWNhdGlvbi1kZWZpbmVkIGZvbnQgY29sbGVjdGlvbiBsb2FkZXIuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChVbnJlZ2lzdGVyRm9udENvbGxlY3Rpb25Mb2FkZXIpKAorICAgICAgICBJRFdyaXRlRm9udENvbGxlY3Rpb25Mb2FkZXIqIGZvbnRDb2xsZWN0aW9uTG9hZGVyCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQ3JlYXRlRm9udEZpbGVSZWZlcmVuY2UgY3JlYXRlcyBhIGZvbnQgZmlsZSByZWZlcmVuY2Ugb2JqZWN0IGZyb20gYSBsb2NhbCBmb250IGZpbGUuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZpbGVQYXRoIj5BYnNvbHV0ZSBmaWxlIHBhdGguIFN1YnNlcXVlbnQgb3BlcmF0aW9ucyBvbiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IG1heSBmYWlsCisgICAgLy8vIGlmIHRoZSB1c2VyIHByb3ZpZGVkIGZpbGVQYXRoIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhIHZhbGlkIGZpbGUgb24gdGhlIGRpc2suPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9Imxhc3RXcml0ZVRpbWUiPkxhc3QgbW9kaWZpZWQgdGltZSBvZiB0aGUgaW5wdXQgZmlsZSBwYXRoLiBJZiB0aGUgcGFyYW1ldGVyIGlzIG9taXR0ZWQsCisgICAgLy8vIHRoZSBmdW5jdGlvbiB3aWxsIGFjY2VzcyB0aGUgZm9udCBmaWxlIHRvIG9idGFpbiBpdHMgbGFzdCB3cml0ZSB0aW1lLCBzbyB0aGUgY2xpZW50cyBhcmUgZW5jb3VyYWdlZCB0byBzcGVjaWZ5IHRoaXMgdmFsdWUKKyAgICAvLy8gdG8gYXZvaWQgZXh0cmEgZGlzayBhY2Nlc3MuIFN1YnNlcXVlbnQgb3BlcmF0aW9ucyBvbiB0aGUgY29uc3RydWN0ZWQgb2JqZWN0IG1heSBmYWlsCisgICAgLy8vIGlmIHRoZSB1c2VyIHByb3ZpZGVkIGxhc3RXcml0ZVRpbWUgZG9lc24ndCBtYXRjaCB0aGUgZmlsZSBvbiB0aGUgZGlzay48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGUiPkNvbnRhaW5zIG5ld2x5IGNyZWF0ZWQgZm9udCBmaWxlIHJlZmVyZW5jZSBvYmplY3QsIG9yIE5VTEwgaW4gY2FzZSBvZiBmYWlsdXJlLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoQ3JlYXRlRm9udEZpbGVSZWZlcmVuY2UpKAorICAgICAgICBfX2luX3ogV0NIQVIgY29uc3QqIGZpbGVQYXRoLAorICAgICAgICBfX2luX29wdCBGSUxFVElNRSBjb25zdCogbGFzdFdyaXRlVGltZSwKKyAgICAgICAgX19vdXQgSURXcml0ZUZvbnRGaWxlKiogZm9udEZpbGUKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBDcmVhdGVDdXN0b21Gb250RmlsZVJlZmVyZW5jZSBjcmVhdGVzIGEgcmVmZXJlbmNlIHRvIGFuIGFwcGxpY2F0aW9uIHNwZWNpZmljIGZvbnQgZmlsZSByZXNvdXJjZS4KKyAgICAvLy8gVGhpcyBmdW5jdGlvbiBlbmFibGVzIGFuIGFwcGxpY2F0aW9uIG9yIGEgZG9jdW1lbnQgdG8gdXNlIGEgZm9udCB3aXRob3V0IGhhdmluZyB0byBpbnN0YWxsIGl0IG9uIHRoZSBzeXN0ZW0uCisgICAgLy8vIFRoZSBmb250RmlsZVJlZmVyZW5jZUtleSBoYXMgdG8gYmUgdW5pcXVlIG9ubHkgaW4gdGhlIHNjb3BlIG9mIHRoZSBmb250RmlsZUxvYWRlciB1c2VkIGluIHRoaXMgY2FsbC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVSZWZlcmVuY2VLZXkiPkZvbnQgZmlsZSByZWZlcmVuY2Uga2V5IHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgZm9udCBmaWxlIHJlc291cmNlCisgICAgLy8vIGR1cmluZyB0aGUgbGlmZXRpbWUgb2YgZm9udEZpbGVMb2FkZXIuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGaWxlUmVmZXJlbmNlS2V5U2l6ZSI+U2l6ZSBvZiBmb250IGZpbGUgcmVmZXJlbmNlIGtleSBpbiBieXRlcy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVMb2FkZXIiPkZvbnQgZmlsZSBsb2FkZXIgdGhhdCB3aWxsIGJlIHVzZWQgYnkgdGhlIGZvbnQgc3lzdGVtIHRvIGxvYWQgZGF0YSBmcm9tIHRoZSBmaWxlIGlkZW50aWZpZWQgYnkKKyAgICAvLy8gZm9udEZpbGVSZWZlcmVuY2VLZXkuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGaWxlIj5Db250YWlucyB0aGUgbmV3bHkgY3JlYXRlZCBmb250IGZpbGUgb2JqZWN0LCBvciBOVUxMIGluIGNhc2Ugb2YgZmFpbHVyZS48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgLy8vIDxyZW1hcmtzPgorICAgIC8vLyBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGZvciBjYXNlcyB3aGVuIGFuIGFwcGxpY2F0aW9uIG9yIGEgZG9jdW1lbnQgbmVlZHMgdG8gdXNlIGEgZm9udAorICAgIC8vLyB3aXRob3V0IGhhdmluZyB0byBpbnN0YWxsIGl0IG9uIHRoZSBzeXN0ZW0uIGZvbnRGaWxlUmVmZXJlbmNlS2V5IGhhcyB0byBiZSB1bmlxdWUgb25seSBpbiB0aGUgc2NvcGUKKyAgICAvLy8gb2YgdGhlIGZvbnRGaWxlTG9hZGVyIHVzZWQgaW4gdGhpcyBjYWxsLgorICAgIC8vLyA8L3JlbWFya3M+CisgICAgU1RETUVUSE9EKENyZWF0ZUN1c3RvbUZvbnRGaWxlUmVmZXJlbmNlKSgKKyAgICAgICAgX19pbl9iY291bnQoZm9udEZpbGVSZWZlcmVuY2VLZXlTaXplKSB2b2lkIGNvbnN0KiBmb250RmlsZVJlZmVyZW5jZUtleSwKKyAgICAgICAgVUlOVDMyIGZvbnRGaWxlUmVmZXJlbmNlS2V5U2l6ZSwKKyAgICAgICAgSURXcml0ZUZvbnRGaWxlTG9hZGVyKiBmb250RmlsZUxvYWRlciwKKyAgICAgICAgX19vdXQgSURXcml0ZUZvbnRGaWxlKiogZm9udEZpbGUKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBDcmVhdGVzIGEgZm9udCBmYWNlIG9iamVjdC4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZhY2VUeXBlIj5UaGUgZmlsZSBmb3JtYXQgb2YgdGhlIGZvbnQgZmFjZS48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibnVtYmVyT2ZGaWxlcyI+VGhlIG51bWJlciBvZiBmb250IGZpbGVzIHJlcXVpcmUgdG8gcmVwcmVzZW50IHRoZSBmb250IGZhY2UuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGaWxlcyI+Rm9udCBmaWxlcyByZXByZXNlbnRpbmcgdGhlIGZvbnQgZmFjZS4gU2luY2UgSURXcml0ZUZvbnRGYWNlIG1haW50YWlucyBpdHMgb3duIHJlZmVyZW5jZXMKKyAgICAvLy8gdG8gdGhlIGlucHV0IGZvbnQgZmlsZSBvYmplY3RzLCBpdCdzIE9LIHRvIHJlbGVhc2UgdGhlbSBhZnRlciB0aGlzIGNhbGwuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZhY2VJbmRleCI+VGhlIHplcm8gYmFzZWQgaW5kZXggb2YgYSBmb250IGZhY2UgaW4gY2FzZXMgd2hlbiB0aGUgZm9udCBmaWxlcyBjb250YWluIGEgY29sbGVjdGlvbiBvZiBmb250IGZhY2VzLgorICAgIC8vLyBJZiB0aGUgZm9udCBmaWxlcyBjb250YWluIGEgc2luZ2xlIGZhY2UsIHRoaXMgdmFsdWUgc2hvdWxkIGJlIHplcm8uPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGYWNlU2ltdWxhdGlvbkZsYWdzIj5Gb250IGZhY2Ugc2ltdWxhdGlvbiBmbGFncyBmb3IgYWxnb3JpdGhtaWMgZW1ib2xkZW5pbmcgYW5kIGl0YWxpY2l6YXRpb24uPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRGYWNlIj5Db250YWlucyB0aGUgbmV3bHkgY3JlYXRlZCBmb250IGZhY2Ugb2JqZWN0LCBvciBOVUxMIGluIGNhc2Ugb2YgZmFpbHVyZS48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKENyZWF0ZUZvbnRGYWNlKSgKKyAgICAgICAgRFdSSVRFX0ZPTlRfRkFDRV9UWVBFIGZvbnRGYWNlVHlwZSwKKyAgICAgICAgVUlOVDMyIG51bWJlck9mRmlsZXMsCisgICAgICAgIF9faW5fZWNvdW50KG51bWJlck9mRmlsZXMpIElEV3JpdGVGb250RmlsZSogY29uc3QqIGZvbnRGaWxlcywKKyAgICAgICAgVUlOVDMyIGZhY2VJbmRleCwKKyAgICAgICAgRFdSSVRFX0ZPTlRfU0lNVUxBVElPTlMgZm9udEZhY2VTaW11bGF0aW9uRmxhZ3MsCisgICAgICAgIF9fb3V0IElEV3JpdGVGb250RmFjZSoqIGZvbnRGYWNlCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQ3JlYXRlcyBhIHJlbmRlcmluZyBwYXJhbWV0ZXJzIG9iamVjdCB3aXRoIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBwcmltYXJ5IG1vbml0b3IuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InJlbmRlcmluZ1BhcmFtcyI+SG9sZHMgdGhlIG5ld2x5IGNyZWF0ZWQgcmVuZGVyaW5nIHBhcmFtZXRlcnMgb2JqZWN0LCBvciBOVUxMIGluIGNhc2Ugb2YgZmFpbHVyZS48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKENyZWF0ZVJlbmRlcmluZ1BhcmFtcykoCisgICAgICAgIF9fb3V0IElEV3JpdGVSZW5kZXJpbmdQYXJhbXMqKiByZW5kZXJpbmdQYXJhbXMKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBDcmVhdGVzIGEgcmVuZGVyaW5nIHBhcmFtZXRlcnMgb2JqZWN0IHdpdGggZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIHNwZWNpZmllZCBtb25pdG9yLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJtb25pdG9yIj5UaGUgbW9uaXRvciB0byByZWFkIHRoZSBkZWZhdWx0IHZhbHVlcyBmcm9tLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJyZW5kZXJpbmdQYXJhbXMiPkhvbGRzIHRoZSBuZXdseSBjcmVhdGVkIHJlbmRlcmluZyBwYXJhbWV0ZXJzIG9iamVjdCwgb3IgTlVMTCBpbiBjYXNlIG9mIGZhaWx1cmUuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChDcmVhdGVNb25pdG9yUmVuZGVyaW5nUGFyYW1zKSgKKyAgICAgICAgSE1PTklUT1IgbW9uaXRvciwKKyAgICAgICAgX19vdXQgSURXcml0ZVJlbmRlcmluZ1BhcmFtcyoqIHJlbmRlcmluZ1BhcmFtcworICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIENyZWF0ZXMgYSByZW5kZXJpbmcgcGFyYW1ldGVycyBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImdhbW1hIj5UaGUgZ2FtbWEgdmFsdWUgdXNlZCBmb3IgZ2FtbWEgY29ycmVjdGlvbiwgd2hpY2ggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyBhbmQgY2Fubm90IGV4Y2VlZCAyNTYuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImVuaGFuY2VkQ29udHJhc3QiPlRoZSBhbW91bnQgb2YgY29udHJhc3QgZW5oYW5jZW1lbnQsIHplcm8gb3IgZ3JlYXRlci48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iY2xlYXJUeXBlTGV2ZWwiPlRoZSBkZWdyZWUgb2YgQ2xlYXJUeXBlIGxldmVsLCBmcm9tIDAuMGYgKG5vIENsZWFyVHlwZSkgdG8gMS4wZiAoZnVsbCBDbGVhclR5cGUpLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJwaXhlbEdlb21ldHJ5Ij5UaGUgZ2VvbWV0cnkgb2YgYSBkZXZpY2UgcGl4ZWwuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InJlbmRlcmluZ01vZGUiPk1ldGhvZCBvZiByZW5kZXJpbmcgZ2x5cGhzLiBJbiBtb3N0IGNhc2VzLCB0aGlzIHNob3VsZCBiZSBEV1JJVEVfUkVOREVSSU5HX01PREVfREVGQVVMVCB0byBhdXRvbWF0aWNhbGx5IHVzZSBhbiBhcHByb3ByaWF0ZSBtb2RlLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJyZW5kZXJpbmdQYXJhbXMiPkhvbGRzIHRoZSBuZXdseSBjcmVhdGVkIHJlbmRlcmluZyBwYXJhbWV0ZXJzIG9iamVjdCwgb3IgTlVMTCBpbiBjYXNlIG9mIGZhaWx1cmUuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChDcmVhdGVDdXN0b21SZW5kZXJpbmdQYXJhbXMpKAorICAgICAgICBGTE9BVCBnYW1tYSwKKyAgICAgICAgRkxPQVQgZW5oYW5jZWRDb250cmFzdCwKKyAgICAgICAgRkxPQVQgY2xlYXJUeXBlTGV2ZWwsCisgICAgICAgIERXUklURV9QSVhFTF9HRU9NRVRSWSBwaXhlbEdlb21ldHJ5LAorICAgICAgICBEV1JJVEVfUkVOREVSSU5HX01PREUgcmVuZGVyaW5nTW9kZSwKKyAgICAgICAgX19vdXQgSURXcml0ZVJlbmRlcmluZ1BhcmFtcyoqIHJlbmRlcmluZ1BhcmFtcworICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFJlZ2lzdGVycyBhIGZvbnQgZmlsZSBsb2FkZXIgd2l0aCBEaXJlY3RXcml0ZS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVMb2FkZXIiPlBvaW50ZXIgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJRFdyaXRlRm9udEZpbGVMb2FkZXIgZm9yIGEgcGFydGljdWxhciBmaWxlIHJlc291cmNlIHR5cGUuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIC8vLyA8cmVtYXJrcz4KKyAgICAvLy8gVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBmb250IGZpbGUgbG9hZGVyIHdpdGggRGlyZWN0V3JpdGUuCisgICAgLy8vIEZvbnQgZmlsZSBsb2FkZXIgaW50ZXJmYWNlIGhhbmRsZXMgbG9hZGluZyBmb250IGZpbGUgcmVzb3VyY2VzIG9mIGEgcGFydGljdWxhciB0eXBlIGZyb20gYSBrZXkuCisgICAgLy8vIFRoZSBmb250IGZpbGUgbG9hZGVyIGludGVyZmFjZSBpcyByZWNvbW1lbmRlZCB0byBiZSBpbXBsZW1lbnRlZCBieSBhIHNpbmdsZXRvbiBvYmplY3QuCisgICAgLy8vIEEgZ2l2ZW4gaW5zdGFuY2UgY2FuIG9ubHkgYmUgcmVnaXN0ZXJlZCBvbmNlLgorICAgIC8vLyBTdWNjZWVkaW5nIGF0dGVtcHRzIHdpbGwgcmV0dXJuIGFuIGVycm9yIHRoYXQgaXQgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkLgorICAgIC8vLyBJTVBPUlRBTlQ6IGZvbnQgZmlsZSBsb2FkZXIgaW1wbGVtZW50YXRpb25zIG11c3Qgbm90IHJlZ2lzdGVyIHRoZW1zZWx2ZXMgd2l0aCBEaXJlY3RXcml0ZQorICAgIC8vLyBpbnNpZGUgdGhlaXIgY29uc3RydWN0b3JzIGFuZCBtdXN0IG5vdCB1bnJlZ2lzdGVyIHRoZW1zZWx2ZXMgaW4gdGhlaXIgZGVzdHJ1Y3RvcnMsIGJlY2F1c2UKKyAgICAvLy8gcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdG9uIG9wZXJhdGlvbnMgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgdGhlIG9iamVjdCByZWZlcmVuY2UgY291bnQgcmVzcGVjdGl2ZWx5LgorICAgIC8vLyBJbnN0ZWFkLCByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIG9mIGZvbnQgZmlsZSBsb2FkZXJzIHdpdGggRGlyZWN0V3JpdGUgc2hvdWxkIGJlIHBlcmZvcm1lZAorICAgIC8vLyBvdXRzaWRlIG9mIHRoZSBmb250IGZpbGUgbG9hZGVyIGltcGxlbWVudGF0aW9uIGFzIGEgc2VwYXJhdGUgc3RlcC4KKyAgICAvLy8gPC9yZW1hcmtzPgorICAgIFNURE1FVEhPRChSZWdpc3RlckZvbnRGaWxlTG9hZGVyKSgKKyAgICAgICAgSURXcml0ZUZvbnRGaWxlTG9hZGVyKiBmb250RmlsZUxvYWRlcgorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFVucmVnaXN0ZXJzIGEgZm9udCBmaWxlIGxvYWRlciB0aGF0IHdhcyBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgd2l0aCB0aGUgRGlyZWN0V3JpdGUgZm9udCBzeXN0ZW0gdXNpbmcgUmVnaXN0ZXJGb250RmlsZUxvYWRlci4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udEZpbGVMb2FkZXIiPlBvaW50ZXIgdG8gdGhlIGZpbGUgbG9hZGVyIHRoYXQgd2FzIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB3aXRoIHRoZSBEaXJlY3RXcml0ZSBmb250IHN5c3RlbSB1c2luZyBSZWdpc3RlckZvbnRGaWxlTG9hZGVyLjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBUaGlzIGZ1bmN0aW9uIHdpbGwgc3VjY2VlZCBpZiB0aGUgdXNlciBsb2FkZXIgaXMgcmVxdWVzdGVkIHRvIGJlIHJlbW92ZWQuCisgICAgLy8vIEl0IHdpbGwgZmFpbCBpZiB0aGUgcG9pbnRlciB0byB0aGUgZmlsZSBsb2FkZXIgaWRlbnRpZmllcyBhIHN0YW5kYXJkIERpcmVjdFdyaXRlIGxvYWRlciwKKyAgICAvLy8gb3IgYSBsb2FkZXIgdGhhdCBpcyBuZXZlciByZWdpc3RlcmVkIG9yIGhhcyBhbHJlYWR5IGJlZW4gdW5yZWdpc3RlcmVkLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgLy8vIDxyZW1hcmtzPgorICAgIC8vLyBUaGlzIGZ1bmN0aW9uIHVucmVnaXN0ZXJzIGZvbnQgZmlsZSBsb2FkZXIgY2FsbGJhY2tzIHdpdGggdGhlIERpcmVjdFdyaXRlIGZvbnQgc3lzdGVtLgorICAgIC8vLyBUaGUgZm9udCBmaWxlIGxvYWRlciBpbnRlcmZhY2UgaXMgcmVjb21tZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgYnkgYSBzaW5nbGV0b24gb2JqZWN0LgorICAgIC8vLyBJTVBPUlRBTlQ6IGZvbnQgZmlsZSBsb2FkZXIgaW1wbGVtZW50YXRpb25zIG11c3Qgbm90IHJlZ2lzdGVyIHRoZW1zZWx2ZXMgd2l0aCBEaXJlY3RXcml0ZQorICAgIC8vLyBpbnNpZGUgdGhlaXIgY29uc3RydWN0b3JzIGFuZCBtdXN0IG5vdCB1bnJlZ2lzdGVyIHRoZW1zZWx2ZXMgaW4gdGhlaXIgZGVzdHJ1Y3RvcnMsIGJlY2F1c2UKKyAgICAvLy8gcmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdG9uIG9wZXJhdGlvbnMgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgdGhlIG9iamVjdCByZWZlcmVuY2UgY291bnQgcmVzcGVjdGl2ZWx5LgorICAgIC8vLyBJbnN0ZWFkLCByZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIG9mIGZvbnQgZmlsZSBsb2FkZXJzIHdpdGggRGlyZWN0V3JpdGUgc2hvdWxkIGJlIHBlcmZvcm1lZAorICAgIC8vLyBvdXRzaWRlIG9mIHRoZSBmb250IGZpbGUgbG9hZGVyIGltcGxlbWVudGF0aW9uIGFzIGEgc2VwYXJhdGUgc3RlcC4KKyAgICAvLy8gPC9yZW1hcmtzPgorICAgIFNURE1FVEhPRChVbnJlZ2lzdGVyRm9udEZpbGVMb2FkZXIpKAorICAgICAgICBJRFdyaXRlRm9udEZpbGVMb2FkZXIqIGZvbnRGaWxlTG9hZGVyCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQ3JlYXRlIGEgdGV4dCBmb3JtYXQgb2JqZWN0IHVzZWQgZm9yIHRleHQgbGF5b3V0LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmb250RmFtaWx5TmFtZSI+TmFtZSBvZiB0aGUgZm9udCBmYW1pbHk8L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZm9udENvbGxlY3Rpb24iPkZvbnQgY29sbGVjdGlvbi4gTlVMTCBpbmRpY2F0ZXMgdGhlIHN5c3RlbSBmb250IGNvbGxlY3Rpb24uPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRXZWlnaHQiPkZvbnQgd2VpZ2h0PC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRTdHlsZSI+Rm9udCBzdHlsZTwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJmb250U3RyZXRjaCI+Rm9udCBzdHJldGNoPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImZvbnRTaXplIj5Mb2dpY2FsIHNpemUgb2YgdGhlIGZvbnQgaW4gRElQIHVuaXRzLiBBIERJUCAoImRldmljZS1pbmRlcGVuZGVudCBwaXhlbCIpIGVxdWFscyAxLzk2IGluY2guPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImxvY2FsZU5hbWUiPkxvY2FsZSBuYW1lPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRleHRGb3JtYXQiPkNvbnRhaW5zIG5ld2x5IGNyZWF0ZWQgdGV4dCBmb3JtYXQgb2JqZWN0LCBvciBOVUxMIGluIGNhc2Ugb2YgZmFpbHVyZS48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKENyZWF0ZVRleHRGb3JtYXQpKAorICAgICAgICBfX2luX3ogV0NIQVIgY29uc3QqIGZvbnRGYW1pbHlOYW1lLAorICAgICAgICBfX21heWJlbnVsbCBJRFdyaXRlRm9udENvbGxlY3Rpb24qIGZvbnRDb2xsZWN0aW9uLAorICAgICAgICBEV1JJVEVfRk9OVF9XRUlHSFQgZm9udFdlaWdodCwKKyAgICAgICAgRFdSSVRFX0ZPTlRfU1RZTEUgZm9udFN0eWxlLAorICAgICAgICBEV1JJVEVfRk9OVF9TVFJFVENIIGZvbnRTdHJldGNoLAorICAgICAgICBGTE9BVCBmb250U2l6ZSwKKyAgICAgICAgX19pbl96IFdDSEFSIGNvbnN0KiBsb2NhbGVOYW1lLAorICAgICAgICBfX291dCBJRFdyaXRlVGV4dEZvcm1hdCoqIHRleHRGb3JtYXQKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBDcmVhdGUgYSB0eXBvZ3JhcGh5IG9iamVjdCB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGV4dCBmb3JtYXQgZm9yIHRleHQgbGF5b3V0LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0eXBvZ3JhcGh5Ij5Db250YWlucyBuZXdseSBjcmVhdGVkIHR5cG9ncmFwaHkgb2JqZWN0LCBvciBOVUxMIGluIGNhc2Ugb2YgZmFpbHVyZS48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKENyZWF0ZVR5cG9ncmFwaHkpKAorICAgICAgICBfX291dCBJRFdyaXRlVHlwb2dyYXBoeSoqIHR5cG9ncmFwaHkKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBDcmVhdGUgYW4gb2JqZWN0IHVzZWQgZm9yIGludGVyb3BlcmFiaWxpdHkgd2l0aCBHREkuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImdkaUludGVyb3AiPlJlY2VpdmVzIHRoZSBHREkgaW50ZXJvcCBvYmplY3QgaWYgc3VjY2Vzc2Z1bCwgb3IgTlVMTCBpbiBjYXNlIG9mIGZhaWx1cmUuPC9wYXJhbT4KKyAgICAvLy8gPHJldHVybnM+CisgICAgLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKyAgICAvLy8gPC9yZXR1cm5zPgorICAgIFNURE1FVEhPRChHZXRHZGlJbnRlcm9wKSgKKyAgICAgICAgX19vdXQgSURXcml0ZUdkaUludGVyb3AqKiBnZGlJbnRlcm9wCisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gQ3JlYXRlVGV4dExheW91dCB0YWtlcyBhIHN0cmluZywgZm9ybWF0LCBhbmQgYXNzb2NpYXRlZCBjb25zdHJhaW50cworICAgIC8vLyBhbmQgcHJvZHVjZXMgYW5kIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGZ1bGx5IGFuYWx5emVkCisgICAgLy8vIGFuZCBmb3JtYXR0ZWQgcmVzdWx0LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJpbmciPlRoZSBzdHJpbmcgdG8gbGF5b3V0LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJzdHJpbmdMZW5ndGgiPlRoZSBsZW5ndGggb2YgdGhlIHN0cmluZy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0idGV4dEZvcm1hdCI+VGhlIGZvcm1hdCB0byBhcHBseSB0byB0aGUgc3RyaW5nLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJtYXhXaWR0aCI+V2lkdGggb2YgdGhlIGxheW91dCBib3guPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9Im1heEhlaWdodCI+SGVpZ2h0IG9mIHRoZSBsYXlvdXQgYm94LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0TGF5b3V0Ij5UaGUgcmVzdWx0YW50IG9iamVjdC48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKENyZWF0ZVRleHRMYXlvdXQpKAorICAgICAgICBfX2luX2Vjb3VudChzdHJpbmdMZW5ndGgpIFdDSEFSIGNvbnN0KiBzdHJpbmcsCisgICAgICAgIFVJTlQzMiBzdHJpbmdMZW5ndGgsCisgICAgICAgIElEV3JpdGVUZXh0Rm9ybWF0KiB0ZXh0Rm9ybWF0LAorICAgICAgICBGTE9BVCBtYXhXaWR0aCwKKyAgICAgICAgRkxPQVQgbWF4SGVpZ2h0LAorICAgICAgICBfX291dCBJRFdyaXRlVGV4dExheW91dCoqIHRleHRMYXlvdXQKKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBDcmVhdGVHZGlDb21wYXRpYmxlVGV4dExheW91dCB0YWtlcyBhIHN0cmluZywgZm9ybWF0LCBhbmQgYXNzb2NpYXRlZCBjb25zdHJhaW50cworICAgIC8vLyBhbmQgcHJvZHVjZXMgYW5kIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBmb3JtYXR0ZWQgZm9yIGEgcGFydGljdWxhciBkaXNwbGF5IHJlc29sdXRpb24KKyAgICAvLy8gYW5kIG1lYXN1cmluZyBtZXRob2QuIFRoZSByZXN1bHRpbmcgdGV4dCBsYXlvdXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdGhlIGludGVuZGVkIHJlc29sdXRpb24sCisgICAgLy8vIGFuZCBmb3IgY2FzZXMgd2hlcmUgdGV4dCBzY2FsYWJpbGl0eSBpcyBkZXNpcmVkLCBDcmVhdGVUZXh0TGF5b3V0IHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmluZyI+VGhlIHN0cmluZyB0byBsYXlvdXQuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InN0cmluZ0xlbmd0aCI+VGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0Rm9ybWF0Ij5UaGUgZm9ybWF0IHRvIGFwcGx5IHRvIHRoZSBzdHJpbmcuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImxheW91dFdpZHRoIj5XaWR0aCBvZiB0aGUgbGF5b3V0IGJveC48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0ibGF5b3V0SGVpZ2h0Ij5IZWlnaHQgb2YgdGhlIGxheW91dCBib3guPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InBpeGVsc1BlckRpcCI+TnVtYmVyIG9mIHBoeXNpY2FsIHBpeGVscyBwZXIgRElQLiBGb3IgZXhhbXBsZSwgaWYgcmVuZGVyaW5nIG9udG8gYSA5NiBEUEkgZGV2aWNlIHRoZW4gcGl4ZWxzUGVyRGlwCisgICAgLy8vIGlzIDEuIElmIHJlbmRlcmluZyBvbnRvIGEgMTIwIERQSSBkZXZpY2UgdGhlbiBwaXhlbHNQZXJEaXAgaXMgMTIwLzk2LjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0cmFuc2Zvcm0iPk9wdGlvbmFsIHRyYW5zZm9ybSBhcHBsaWVkIHRvIHRoZSBnbHlwaHMgYW5kIHRoZWlyIHBvc2l0aW9ucy4gVGhpcyB0cmFuc2Zvcm0gaXMgYXBwbGllZCBhZnRlciB0aGUKKyAgICAvLy8gc2NhbGluZyBzcGVjaWZpZWQgdGhlIGZvbnQgc2l6ZSBhbmQgcGl4ZWxzUGVyRGlwLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ1c2VHZGlOYXR1cmFsIj4KKyAgICAvLy8gV2hlbiBzZXQgdG8gRkFMU0UsIGluc3RydWN0cyB0aGUgdGV4dCBsYXlvdXQgdG8gdXNlIHRoZSBzYW1lIG1ldHJpY3MgYXMgR0RJIGFsaWFzZWQgdGV4dC4KKyAgICAvLy8gV2hlbiBzZXQgdG8gVFJVRSwgaW5zdHJ1Y3RzIHRoZSB0ZXh0IGxheW91dCB0byB1c2UgdGhlIHNhbWUgbWV0cmljcyBhcyB0ZXh0IG1lYXN1cmVkIGJ5IEdESSB1c2luZyBhIGZvbnQKKyAgICAvLy8gY3JlYXRlZCB3aXRoIENMRUFSVFlQRV9OQVRVUkFMX1FVQUxJVFkuCisgICAgLy8vIDwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0TGF5b3V0Ij5UaGUgcmVzdWx0YW50IG9iamVjdC48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKENyZWF0ZUdkaUNvbXBhdGlibGVUZXh0TGF5b3V0KSgKKyAgICAgICAgX19pbl9lY291bnQoc3RyaW5nTGVuZ3RoKSBXQ0hBUiBjb25zdCogc3RyaW5nLAorICAgICAgICBVSU5UMzIgc3RyaW5nTGVuZ3RoLAorICAgICAgICBJRFdyaXRlVGV4dEZvcm1hdCogdGV4dEZvcm1hdCwKKyAgICAgICAgRkxPQVQgbGF5b3V0V2lkdGgsCisgICAgICAgIEZMT0FUIGxheW91dEhlaWdodCwKKyAgICAgICAgRkxPQVQgcGl4ZWxzUGVyRGlwLAorICAgICAgICBfX2luX29wdCBEV1JJVEVfTUFUUklYIGNvbnN0KiB0cmFuc2Zvcm0sCisgICAgICAgIEJPT0wgdXNlR2RpTmF0dXJhbCwKKyAgICAgICAgX19vdXQgSURXcml0ZVRleHRMYXlvdXQqKiB0ZXh0TGF5b3V0CisgICAgICAgICkgUFVSRTsKKworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVGhlIGFwcGxpY2F0aW9uIG1heSBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gY3JlYXRlIGFuIGlubGluZSBvYmplY3QgZm9yIHRyaW1taW5nLCB1c2luZyBhbiBlbGxpcHNpcyBhcyB0aGUgb21pc3Npb24gc2lnbi4KKyAgICAvLy8gVGhlIGVsbGlwc2lzIHdpbGwgYmUgY3JlYXRlZCB1c2luZyB0aGUgY3VycmVudCBzZXR0aW5ncyBvZiB0aGUgZm9ybWF0LCBpbmNsdWRpbmcgYmFzZSBmb250LCBzdHlsZSwgYW5kIGFueSBlZmZlY3RzLgorICAgIC8vLyBBbHRlcm5hdGUgb21pc3Npb24gc2lnbnMgY2FuIGJlIGNyZWF0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGJ5IGltcGxlbWVudGluZyBJRFdyaXRlSW5saW5lT2JqZWN0LgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0Rm9ybWF0Ij5UZXh0IGZvcm1hdCB1c2VkIGFzIGEgdGVtcGxhdGUgZm9yIHRoZSBvbWlzc2lvbiBzaWduLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0cmltbWluZ1NpZ24iPkNyZWF0ZWQgb21pc3Npb24gc2lnbi48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKENyZWF0ZUVsbGlwc2lzVHJpbW1pbmdTaWduKSgKKyAgICAgICAgSURXcml0ZVRleHRGb3JtYXQqIHRleHRGb3JtYXQsCisgICAgICAgIF9fb3V0IElEV3JpdGVJbmxpbmVPYmplY3QqKiB0cmltbWluZ1NpZ24KKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBSZXR1cm4gYW4gaW50ZXJmYWNlIHRvIHBlcmZvcm0gdGV4dCBhbmFseXNpcyB3aXRoLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJ0ZXh0QW5hbHl6ZXIiPlRoZSByZXN1bHRhbnQgb2JqZWN0LjwvcGFyYW0+CisgICAgLy8vIDxyZXR1cm5zPgorICAgIC8vLyBTdGFuZGFyZCBIUkVTVUxUIGVycm9yIGNvZGUuCisgICAgLy8vIDwvcmV0dXJucz4KKyAgICBTVERNRVRIT0QoQ3JlYXRlVGV4dEFuYWx5emVyKSgKKyAgICAgICAgX19vdXQgSURXcml0ZVRleHRBbmFseXplcioqIHRleHRBbmFseXplcgorICAgICAgICApIFBVUkU7CisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIENyZWF0ZXMgYSBudW1iZXIgc3Vic3RpdHV0aW9uIG9iamVjdCB1c2luZyBhIGxvY2FsZSBuYW1lLAorICAgIC8vLyBzdWJzdGl0dXRpb24gbWV0aG9kLCBhbmQgd2hldGhlciB0byBpZ25vcmUgdXNlciBvdmVycmlkZXMgKHVzZXMgTkxTCisgICAgLy8vIGRlZmF1bHRzIGZvciB0aGUgZ2l2ZW4gY3VsdHVyZSBpbnN0ZWFkKS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIC8vLyA8cGFyYW0gbmFtZT0ic3Vic3RpdHV0aW9uTWV0aG9kIj5NZXRob2Qgb2YgbnVtYmVyIHN1YnN0aXR1dGlvbiB0byB1c2UuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImxvY2FsZU5hbWUiPldoaWNoIGxvY2FsZSB0byBvYnRhaW4gdGhlIGRpZ2l0cyBmcm9tLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJpZ25vcmVVc2VyT3ZlcnJpZGUiPklnbm9yZSB0aGUgdXNlcidzIHNldHRpbmdzIGFuZCB1c2UgdGhlIGxvY2FsZSBkZWZhdWx0czwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJudW1iZXJTdWJzdGl0dXRpb24iPlJlY2VpdmVzIGEgcG9pbnRlciB0byB0aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QuPC9wYXJhbT4KKyAgICBTVERNRVRIT0QoQ3JlYXRlTnVtYmVyU3Vic3RpdHV0aW9uKSgKKyAgICAgICAgX19pbiBEV1JJVEVfTlVNQkVSX1NVQlNUSVRVVElPTl9NRVRIT0Qgc3Vic3RpdHV0aW9uTWV0aG9kLAorICAgICAgICBfX2luX3ogV0NIQVIgY29uc3QqIGxvY2FsZU5hbWUsCisgICAgICAgIF9faW4gQk9PTCBpZ25vcmVVc2VyT3ZlcnJpZGUsCisgICAgICAgIF9fb3V0IElEV3JpdGVOdW1iZXJTdWJzdGl0dXRpb24qKiBudW1iZXJTdWJzdGl0dXRpb24KKyAgICAgICAgKSBQVVJFOworCisgICAgLy8vIDxzdW1tYXJ5PgorICAgIC8vLyBDcmVhdGVzIGEgZ2x5cGggcnVuIGFuYWx5c2lzIG9iamVjdCwgd2hpY2ggZW5jYXBzdWxhdGVzIGluZm9ybWF0aW9uCisgICAgLy8vIHVzZWQgdG8gcmVuZGVyIGEgZ2x5cGggcnVuLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJnbHlwaFJ1biI+U3RydWN0dXJlIHNwZWNpZnlpbmcgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGdseXBoIHJ1bi48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0icGl4ZWxzUGVyRGlwIj5OdW1iZXIgb2YgcGh5c2ljYWwgcGl4ZWxzIHBlciBESVAuIEZvciBleGFtcGxlLCBpZiByZW5kZXJpbmcgb250byBhIDk2IERQSSBiaXRtYXAgdGhlbiBwaXhlbHNQZXJEaXAKKyAgICAvLy8gaXMgMS4gSWYgcmVuZGVyaW5nIG9udG8gYSAxMjAgRFBJIGJpdG1hcCB0aGVuIHBpeGVsc1BlckRpcCBpcyAxMjAvOTYuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InRyYW5zZm9ybSI+T3B0aW9uYWwgdHJhbnNmb3JtIGFwcGxpZWQgdG8gdGhlIGdseXBocyBhbmQgdGhlaXIgcG9zaXRpb25zLiBUaGlzIHRyYW5zZm9ybSBpcyBhcHBsaWVkIGFmdGVyIHRoZQorICAgIC8vLyBzY2FsaW5nIHNwZWNpZmllZCB0aGUgZW1TaXplIGFuZCBwaXhlbHNQZXJEaXAuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9InJlbmRlcmluZ01vZGUiPlNwZWNpZmllcyB0aGUgcmVuZGVyaW5nIG1vZGUsIHdoaWNoIG11c3QgYmUgb25lIG9mIHRoZSByYXN0ZXIgcmVuZGVyaW5nIG1vZGVzIChpLmUuLCBub3QgZGVmYXVsdAorICAgIC8vLyBhbmQgbm90IG91dGxpbmUpLjwvcGFyYW0+CisgICAgLy8vIDxwYXJhbSBuYW1lPSJtZWFzdXJpbmdNb2RlIj5TcGVjaWZpZXMgdGhlIG1ldGhvZCB0byBtZWFzdXJlIGdseXBocy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iYmFzZWxpbmVPcmlnaW5YIj5Ib3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBiYXNlbGluZSBvcmlnaW4sIGluIERJUHMuPC9wYXJhbT4KKyAgICAvLy8gPHBhcmFtIG5hbWU9ImJhc2VsaW5lT3JpZ2luWSI+VmVydGljYWwgcG9zaXRpb24gb2YgdGhlIGJhc2VsaW5lIG9yaWdpbiwgaW4gRElQcy48L3BhcmFtPgorICAgIC8vLyA8cGFyYW0gbmFtZT0iZ2x5cGhSdW5BbmFseXNpcyI+UmVjZWl2ZXMgYSBwb2ludGVyIHRvIHRoZSBuZXdseSBjcmVhdGVkIG9iamVjdC48L3BhcmFtPgorICAgIC8vLyA8cmV0dXJucz4KKyAgICAvLy8gU3RhbmRhcmQgSFJFU1VMVCBlcnJvciBjb2RlLgorICAgIC8vLyA8L3JldHVybnM+CisgICAgU1RETUVUSE9EKENyZWF0ZUdseXBoUnVuQW5hbHlzaXMpKAorICAgICAgICBfX2luIERXUklURV9HTFlQSF9SVU4gY29uc3QqIGdseXBoUnVuLAorICAgICAgICBGTE9BVCBwaXhlbHNQZXJEaXAsCisgICAgICAgIF9faW5fb3B0IERXUklURV9NQVRSSVggY29uc3QqIHRyYW5zZm9ybSwKKyAgICAgICAgRFdSSVRFX1JFTkRFUklOR19NT0RFIHJlbmRlcmluZ01vZGUsCisgICAgICAgIERXUklURV9NRUFTVVJJTkdfTU9ERSBtZWFzdXJpbmdNb2RlLAorICAgICAgICBGTE9BVCBiYXNlbGluZU9yaWdpblgsCisgICAgICAgIEZMT0FUIGJhc2VsaW5lT3JpZ2luWSwKKyAgICAgICAgX19vdXQgSURXcml0ZUdseXBoUnVuQW5hbHlzaXMqKiBnbHlwaFJ1bkFuYWx5c2lzCisgICAgICAgICkgUFVSRTsKKworfTsgLy8gaW50ZXJmYWNlIElEV3JpdGVGYWN0b3J5CisKKy8vLyA8c3VtbWFyeT4KKy8vLyBDcmVhdGVzIGEgRGlyZWN0V3JpdGUgZmFjdG9yeSBvYmplY3QgdGhhdCBpcyB1c2VkIGZvciBzdWJzZXF1ZW50IGNyZWF0aW9uIG9mIGluZGl2aWR1YWwgRGlyZWN0V3JpdGUgb2JqZWN0cy4KKy8vLyA8L3N1bW1hcnk+CisvLy8gPHBhcmFtIG5hbWU9ImZhY3RvcnlUeXBlIj5JZGVudGlmaWVzIHdoZXRoZXIgdGhlIGZhY3Rvcnkgb2JqZWN0IHdpbGwgYmUgc2hhcmVkIG9yIGlzb2xhdGVkLjwvcGFyYW0+CisvLy8gPHBhcmFtIG5hbWU9ImlpZCI+SWRlbnRpZmllcyB0aGUgRGlyZWN0V3JpdGUgZmFjdG9yeSBpbnRlcmZhY2UsIHN1Y2ggYXMgX191dWlkb2YoSURXcml0ZUZhY3RvcnkpLjwvcGFyYW0+CisvLy8gPHBhcmFtIG5hbWU9ImZhY3RvcnkiPlJlY2VpdmVzIHRoZSBEaXJlY3RXcml0ZSBmYWN0b3J5IG9iamVjdC48L3BhcmFtPgorLy8vIDxyZXR1cm5zPgorLy8vIFN0YW5kYXJkIEhSRVNVTFQgZXJyb3IgY29kZS4KKy8vLyA8L3JldHVybnM+CisvLy8gPHJlbWFya3M+CisvLy8gT2J0YWlucyBEaXJlY3RXcml0ZSBmYWN0b3J5IG9iamVjdCB0aGF0IGlzIHVzZWQgZm9yIHN1YnNlcXVlbnQgY3JlYXRpb24gb2YgaW5kaXZpZHVhbCBEaXJlY3RXcml0ZSBjbGFzc2VzLgorLy8vIERpcmVjdFdyaXRlIGZhY3RvcnkgY29udGFpbnMgaW50ZXJuYWwgc3RhdGUgc3VjaCBhcyBmb250IGxvYWRlciByZWdpc3RyYXRpb24gYW5kIGNhY2hlZCBmb250IGRhdGEuCisvLy8gSW4gbW9zdCBjYXNlcyBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIHNoYXJlZCBmYWN0b3J5IG9iamVjdCwgYmVjYXVzZSBpdCBhbGxvd3MgbXVsdGlwbGUgY29tcG9uZW50cworLy8vIHRoYXQgdXNlIERpcmVjdFdyaXRlIHRvIHNoYXJlIGludGVybmFsIERpcmVjdFdyaXRlIHN0YXRlIGFuZCByZWR1Y2UgbWVtb3J5IHVzYWdlLgorLy8vIEhvd2V2ZXIsIHRoZXJlIGFyZSBjYXNlcyB3aGVuIGl0IGlzIGRlc2lyYWJsZSB0byByZWR1Y2UgdGhlIGltcGFjdCBvZiBhIGNvbXBvbmVudCwKKy8vLyBzdWNoIGFzIGEgcGx1Zy1pbiBmcm9tIGFuIHVudHJ1c3RlZCBzb3VyY2UsIG9uIHRoZSByZXN0IG9mIHRoZSBwcm9jZXNzIGJ5IHNhbmRib3hpbmcgYW5kIGlzb2xhdGluZyBpdAorLy8vIGZyb20gdGhlIHJlc3Qgb2YgdGhlIHByb2Nlc3MgY29tcG9uZW50cy4gSW4gc3VjaCBjYXNlcywgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIGFuIGlzb2xhdGVkIGZhY3RvcnkgZm9yIHRoZSBzYW5kYm94ZWQKKy8vLyBjb21wb25lbnQuCisvLy8gPC9yZW1hcmtzPgorRVhURVJOX0MgSFJFU1VMVCBEV1JJVEVfRVhQT1JUIERXcml0ZUNyZWF0ZUZhY3RvcnkoCisgICAgX19pbiBEV1JJVEVfRkFDVE9SWV9UWVBFIGZhY3RvcnlUeXBlLAorICAgIF9faW4gUkVGSUlEIGlpZCwKKyAgICBfX291dCBJVW5rbm93biAqKmZhY3RvcnkKKyAgICApOworCisvLyBNYWNyb3MgdXNlZCB0byBkZWZpbmUgRGlyZWN0V3JpdGUgZXJyb3IgY29kZXMuCisjZGVmaW5lIEZBQ0lMSVRZX0RXUklURSAweDg5OAorI2RlZmluZSBEV1JJVEVfRVJSX0JBU0UgMHg1MDAwCisjZGVmaW5lIE1BS0VfRFdSSVRFX0hSKHNldmVyaXR5LCBjb2RlKSBNQUtFX0hSRVNVTFQoc2V2ZXJpdHksIEZBQ0lMSVRZX0RXUklURSwgKERXUklURV9FUlJfQkFTRSArIGNvZGUpKQorI2RlZmluZSBNQUtFX0RXUklURV9IUl9FUlIoY29kZSkgTUFLRV9EV1JJVEVfSFIoU0VWRVJJVFlfRVJST1IsIGNvZGUpCisKKy8vLyA8c3VtbWFyeT4KKy8vLyBJbmRpY2F0ZXMgYW4gZXJyb3IgaW4gYW4gaW5wdXQgZmlsZSBzdWNoIGFzIGEgZm9udCBmaWxlLgorLy8vIDwvc3VtbWFyeT4KKyNkZWZpbmUgRFdSSVRFX0VfRklMRUZPUk1BVCAgICAgICAgICAgICBNQUtFX0RXUklURV9IUl9FUlIoMHgwMDApCisKKy8vLyA8c3VtbWFyeT4KKy8vLyBJbmRpY2F0ZXMgYW4gZXJyb3Igb3JpZ2luYXRpbmcgaW4gRGlyZWN0V3JpdGUgY29kZSwgd2hpY2ggaXMgbm90IGV4cGVjdGVkIHRvIG9jY3VyIGJ1dCBpcyBzYWZlIHRvIHJlY292ZXIgZnJvbS4KKy8vLyA8L3N1bW1hcnk+CisjZGVmaW5lIERXUklURV9FX1VORVhQRUNURUQgICAgICAgICAgICAgTUFLRV9EV1JJVEVfSFJfRVJSKDB4MDAxKQorCisvLy8gPHN1bW1hcnk+CisvLy8gSW5kaWNhdGVzIHRoZSBzcGVjaWZpZWQgZm9udCBkb2VzIG5vdCBleGlzdC4KKy8vLyA8L3N1bW1hcnk+CisjZGVmaW5lIERXUklURV9FX05PRk9OVCAgICAgICAgICAgICAgICAgTUFLRV9EV1JJVEVfSFJfRVJSKDB4MDAyKQorCisvLy8gPHN1bW1hcnk+CisvLy8gQSBmb250IGZpbGUgY291bGQgbm90IGJlIG9wZW5lZCBiZWNhdXNlIHRoZSBmaWxlLCBkaXJlY3RvcnksIG5ldHdvcmsgbG9jYXRpb24sIGRyaXZlLCBvciBvdGhlciBzdG9yYWdlCisvLy8gbG9jYXRpb24gZG9lcyBub3QgZXhpc3Qgb3IgaXMgdW5hdmFpbGFibGUuCisvLy8gPC9zdW1tYXJ5PgorI2RlZmluZSBEV1JJVEVfRV9GSUxFTk9URk9VTkQgICAgICAgICAgIE1BS0VfRFdSSVRFX0hSX0VSUigweDAwMykKKworLy8vIDxzdW1tYXJ5PgorLy8vIEEgZm9udCBmaWxlIGV4aXN0cyBidXQgY291bGQgbm90IGJlIG9wZW5lZCBkdWUgdG8gYWNjZXNzIGRlbmllZCwgc2hhcmluZyB2aW9sYXRpb24sIG9yIHNpbWlsYXIgZXJyb3IuCisvLy8gPC9zdW1tYXJ5PgorI2RlZmluZSBEV1JJVEVfRV9GSUxFQUNDRVNTICAgICAgICAgICAgIE1BS0VfRFdSSVRFX0hSX0VSUigweDAwNCkKKworLy8vIDxzdW1tYXJ5PgorLy8vIEEgZm9udCBjb2xsZWN0aW9uIGlzIG9ic29sZXRlIGR1ZSB0byBjaGFuZ2VzIGluIHRoZSBzeXN0ZW0uCisvLy8gPC9zdW1tYXJ5PgorI2RlZmluZSBEV1JJVEVfRV9GT05UQ09MTEVDVElPTk9CU09MRVRFIE1BS0VfRFdSSVRFX0hSX0VSUigweDAwNSkKKworLy8vIDxzdW1tYXJ5PgorLy8vIFRoZSBnaXZlbiBpbnRlcmZhY2UgaXMgYWxyZWFkeSByZWdpc3RlcmVkLgorLy8vIDwvc3VtbWFyeT4KKyNkZWZpbmUgRFdSSVRFX0VfQUxSRUFEWVJFR0lTVEVSRUQgICAgICBNQUtFX0RXUklURV9IUl9FUlIoMHgwMDYpCisKKyNlbmRpZiAvKiBEV1JJVEVfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvRGNvbW1vbi5oIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvRGNvbW1vbi5oCmluZGV4IGE2YzkwMWEuLjRlY2M1YzEgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0Rjb21tb24uaAorKysgYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9EY29tbW9uLmgKQEAgLTEsNjUgKzEsNjUgQEAKLS8vKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8NCi0vLyAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vDQotLy8gIEFic3RyYWN0Og0KLS8vICAgICBQdWJsaWMgQVBJIGRlZmluaXRpb25zIGZvciBEV3JpdGUgYW5kIEQyRA0KLS8vDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotI2lmbmRlZiBEQ09NTU9OX0hfSU5DTFVERUQNCi0jZGVmaW5lIERDT01NT05fSF9JTkNMVURFRA0KLQ0KLS8vDQotLy9UaGVzZSBtYWNyb3MgYXJlIGRlZmluZWQgaW4gdGhlIFdpbmRvd3MgNyBTREssIGhvd2V2ZXIgdG8gZW5hYmxlIGRldmVsb3BtZW50IHVzaW5nIHRoZSB0ZWNobmljYWwgcHJldmlldywNCi0vL3RoZXkgYXJlIGluY2x1ZGVkIGhlcmUgdGVtcG9yYXJpbHkuDQotLy8NCi0jaWZuZGVmIERFRklORV9FTlVNX0ZMQUdfT1BFUkFUT1JTIA0KLSNkZWZpbmUgREVGSU5FX0VOVU1fRkxBR19PUEVSQVRPUlMoRU5VTVRZUEUpIFwNCi1leHRlcm4gIkMrKyIgeyBcDQotaW5saW5lIEVOVU1UWVBFIG9wZXJhdG9yIHwgKEVOVU1UWVBFIGEsIEVOVU1UWVBFIGIpIHsgcmV0dXJuIEVOVU1UWVBFKCgoaW50KWEpIHwgKChpbnQpYikpOyB9IFwNCi1pbmxpbmUgRU5VTVRZUEUgJm9wZXJhdG9yIHw9IChFTlVNVFlQRSAmYSwgRU5VTVRZUEUgYikgeyByZXR1cm4gKEVOVU1UWVBFICYpKCgoaW50ICYpYSkgfD0gKChpbnQpYikpOyB9IFwNCi1pbmxpbmUgRU5VTVRZUEUgb3BlcmF0b3IgJiAoRU5VTVRZUEUgYSwgRU5VTVRZUEUgYikgeyByZXR1cm4gRU5VTVRZUEUoKChpbnQpYSkgJiAoKGludCliKSk7IH0gXA0KLWlubGluZSBFTlVNVFlQRSAmb3BlcmF0b3IgJj0gKEVOVU1UWVBFICZhLCBFTlVNVFlQRSBiKSB7IHJldHVybiAoRU5VTVRZUEUgJikoKChpbnQgJilhKSAmPSAoKGludCliKSk7IH0gXA0KLWlubGluZSBFTlVNVFlQRSBvcGVyYXRvciB+IChFTlVNVFlQRSBhKSB7IHJldHVybiBFTlVNVFlQRSh+KChpbnQpYSkpOyB9IFwNCi1pbmxpbmUgRU5VTVRZUEUgb3BlcmF0b3IgXiAoRU5VTVRZUEUgYSwgRU5VTVRZUEUgYikgeyByZXR1cm4gRU5VTVRZUEUoKChpbnQpYSkgXiAoKGludCliKSk7IH0gXA0KLWlubGluZSBFTlVNVFlQRSAmb3BlcmF0b3IgXj0gKEVOVU1UWVBFICZhLCBFTlVNVFlQRSBiKSB7IHJldHVybiAoRU5VTVRZUEUgJikoKChpbnQgJilhKSBePSAoKGludCliKSk7IH0gXA0KLX0NCi0jZW5kaWYNCi0NCi0jaWZuZGVmIF9fZmllbGRfZWNvdW50X29wdA0KLSNkZWZpbmUgX19maWVsZF9lY291bnRfb3B0KHgpDQotI2VuZGlmDQotDQotI2lmbmRlZiBfX3JhbmdlDQotI2RlZmluZSBfX3JhbmdlKHgseSkgDQotI2VuZGlmDQotDQotI2lmbmRlZiBfX2ZpZWxkX2Vjb3VudA0KLSNkZWZpbmUgX19maWVsZF9lY291bnQoeCkNCi0jZW5kaWYNCi0NCi0vLy8gPHN1bW1hcnk+DQotLy8vIFRoZSBtZWFzdXJpbmcgbWV0aG9kIHVzZWQgZm9yIHRleHQgbGF5b3V0Lg0KLS8vLyA8L3N1bW1hcnk+DQotdHlwZWRlZiBlbnVtIERXUklURV9NRUFTVVJJTkdfTU9ERQ0KLXsNCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVGV4dCBpcyBtZWFzdXJlZCB1c2luZyBnbHlwaCBpZGVhbCBtZXRyaWNzIHdob3NlIHZhbHVlcyBhcmUgaW5kZXBlbmRlbnQgdG8gdGhlIGN1cnJlbnQgZGlzcGxheSByZXNvbHV0aW9uLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfTUVBU1VSSU5HX01PREVfTkFUVVJBTCwNCi0NCi0gICAgLy8vIDxzdW1tYXJ5Pg0KLSAgICAvLy8gVGV4dCBpcyBtZWFzdXJlZCB1c2luZyBnbHlwaCBkaXNwbGF5IGNvbXBhdGlibGUgbWV0cmljcyB3aG9zZSB2YWx1ZXMgdHVuZWQgZm9yIHRoZSBjdXJyZW50IGRpc3BsYXkgcmVzb2x1dGlvbi4NCi0gICAgLy8vIDwvc3VtbWFyeT4NCi0gICAgRFdSSVRFX01FQVNVUklOR19NT0RFX0dESV9DTEFTU0lDLA0KLQ0KLSAgICAvLy8gPHN1bW1hcnk+DQotICAgIC8vLyBUZXh0IGlzIG1lYXN1cmVkIHVzaW5nIHRoZSBzYW1lIGdseXBoIGRpc3BsYXkgbWV0cmljcyBhcyB0ZXh0IG1lYXN1cmVkIGJ5IEdESSB1c2luZyBhIGZvbnQNCi0gICAgLy8vIGNyZWF0ZWQgd2l0aCBDTEVBUlRZUEVfTkFUVVJBTF9RVUFMSVRZLg0KLSAgICAvLy8gPC9zdW1tYXJ5Pg0KLSAgICBEV1JJVEVfTUVBU1VSSU5HX01PREVfR0RJX05BVFVSQUwNCi0NCi19IERXUklURV9NRUFTVVJJTkdfTU9ERTsNCi0NCi0jZW5kaWYgLyogRENPTU1PTl9IX0lOQ0xVREVEICovDQorLy8rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisvLyAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vICBBYnN0cmFjdDoKKy8vICAgICBQdWJsaWMgQVBJIGRlZmluaXRpb25zIGZvciBEV3JpdGUgYW5kIEQyRAorLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjaWZuZGVmIERDT01NT05fSF9JTkNMVURFRAorI2RlZmluZSBEQ09NTU9OX0hfSU5DTFVERUQKKworLy8KKy8vVGhlc2UgbWFjcm9zIGFyZSBkZWZpbmVkIGluIHRoZSBXaW5kb3dzIDcgU0RLLCBob3dldmVyIHRvIGVuYWJsZSBkZXZlbG9wbWVudCB1c2luZyB0aGUgdGVjaG5pY2FsIHByZXZpZXcsCisvL3RoZXkgYXJlIGluY2x1ZGVkIGhlcmUgdGVtcG9yYXJpbHkuCisvLworI2lmbmRlZiBERUZJTkVfRU5VTV9GTEFHX09QRVJBVE9SUyAKKyNkZWZpbmUgREVGSU5FX0VOVU1fRkxBR19PUEVSQVRPUlMoRU5VTVRZUEUpIFwKK2V4dGVybiAiQysrIiB7IFwKK2lubGluZSBFTlVNVFlQRSBvcGVyYXRvciB8IChFTlVNVFlQRSBhLCBFTlVNVFlQRSBiKSB7IHJldHVybiBFTlVNVFlQRSgoKGludClhKSB8ICgoaW50KWIpKTsgfSBcCitpbmxpbmUgRU5VTVRZUEUgJm9wZXJhdG9yIHw9IChFTlVNVFlQRSAmYSwgRU5VTVRZUEUgYikgeyByZXR1cm4gKEVOVU1UWVBFICYpKCgoaW50ICYpYSkgfD0gKChpbnQpYikpOyB9IFwKK2lubGluZSBFTlVNVFlQRSBvcGVyYXRvciAmIChFTlVNVFlQRSBhLCBFTlVNVFlQRSBiKSB7IHJldHVybiBFTlVNVFlQRSgoKGludClhKSAmICgoaW50KWIpKTsgfSBcCitpbmxpbmUgRU5VTVRZUEUgJm9wZXJhdG9yICY9IChFTlVNVFlQRSAmYSwgRU5VTVRZUEUgYikgeyByZXR1cm4gKEVOVU1UWVBFICYpKCgoaW50ICYpYSkgJj0gKChpbnQpYikpOyB9IFwKK2lubGluZSBFTlVNVFlQRSBvcGVyYXRvciB+IChFTlVNVFlQRSBhKSB7IHJldHVybiBFTlVNVFlQRSh+KChpbnQpYSkpOyB9IFwKK2lubGluZSBFTlVNVFlQRSBvcGVyYXRvciBeIChFTlVNVFlQRSBhLCBFTlVNVFlQRSBiKSB7IHJldHVybiBFTlVNVFlQRSgoKGludClhKSBeICgoaW50KWIpKTsgfSBcCitpbmxpbmUgRU5VTVRZUEUgJm9wZXJhdG9yIF49IChFTlVNVFlQRSAmYSwgRU5VTVRZUEUgYikgeyByZXR1cm4gKEVOVU1UWVBFICYpKCgoaW50ICYpYSkgXj0gKChpbnQpYikpOyB9IFwKK30KKyNlbmRpZgorCisjaWZuZGVmIF9fZmllbGRfZWNvdW50X29wdAorI2RlZmluZSBfX2ZpZWxkX2Vjb3VudF9vcHQoeCkKKyNlbmRpZgorCisjaWZuZGVmIF9fcmFuZ2UKKyNkZWZpbmUgX19yYW5nZSh4LHkpIAorI2VuZGlmCisKKyNpZm5kZWYgX19maWVsZF9lY291bnQKKyNkZWZpbmUgX19maWVsZF9lY291bnQoeCkKKyNlbmRpZgorCisvLy8gPHN1bW1hcnk+CisvLy8gVGhlIG1lYXN1cmluZyBtZXRob2QgdXNlZCBmb3IgdGV4dCBsYXlvdXQuCisvLy8gPC9zdW1tYXJ5PgordHlwZWRlZiBlbnVtIERXUklURV9NRUFTVVJJTkdfTU9ERQoreworICAgIC8vLyA8c3VtbWFyeT4KKyAgICAvLy8gVGV4dCBpcyBtZWFzdXJlZCB1c2luZyBnbHlwaCBpZGVhbCBtZXRyaWNzIHdob3NlIHZhbHVlcyBhcmUgaW5kZXBlbmRlbnQgdG8gdGhlIGN1cnJlbnQgZGlzcGxheSByZXNvbHV0aW9uLgorICAgIC8vLyA8L3N1bW1hcnk+CisgICAgRFdSSVRFX01FQVNVUklOR19NT0RFX05BVFVSQUwsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFRleHQgaXMgbWVhc3VyZWQgdXNpbmcgZ2x5cGggZGlzcGxheSBjb21wYXRpYmxlIG1ldHJpY3Mgd2hvc2UgdmFsdWVzIHR1bmVkIGZvciB0aGUgY3VycmVudCBkaXNwbGF5IHJlc29sdXRpb24uCisgICAgLy8vIDwvc3VtbWFyeT4KKyAgICBEV1JJVEVfTUVBU1VSSU5HX01PREVfR0RJX0NMQVNTSUMsCisKKyAgICAvLy8gPHN1bW1hcnk+CisgICAgLy8vIFRleHQgaXMgbWVhc3VyZWQgdXNpbmcgdGhlIHNhbWUgZ2x5cGggZGlzcGxheSBtZXRyaWNzIGFzIHRleHQgbWVhc3VyZWQgYnkgR0RJIHVzaW5nIGEgZm9udAorICAgIC8vLyBjcmVhdGVkIHdpdGggQ0xFQVJUWVBFX05BVFVSQUxfUVVBTElUWS4KKyAgICAvLy8gPC9zdW1tYXJ5PgorICAgIERXUklURV9NRUFTVVJJTkdfTU9ERV9HRElfTkFUVVJBTAorCit9IERXUklURV9NRUFTVVJJTkdfTU9ERTsKKworI2VuZGlmIC8qIERDT01NT05fSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1cy5oIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1cy5oCmluZGV4IDgyMzkzZTcuLjc1ZWI1MDkgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXMuaAorKysgYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzLmgKQEAgLTEsMTU2ICsxLDE1NiBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXA0KLSoNCi0qIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotKg0KLSogTW9kdWxlIE5hbWU6DQotKg0KLSogICBHZGlwbHVzLmgNCi0qDQotKiBBYnN0cmFjdDoNCi0qDQotKiAgIEdESSsgTmF0aXZlIEMrKyBwdWJsaWMgaGVhZGVyIGZpbGUNCi0qDQotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLSNpZm5kZWYgX0dESVBMVVNfSA0KLSNkZWZpbmUgX0dESVBMVVNfSA0KLQ0KLXN0cnVjdCBJRGlyZWN0RHJhd1N1cmZhY2U3Ow0KLQ0KLXR5cGVkZWYgc2lnbmVkICAgc2hvcnQgICBJTlQxNjsNCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICBVSU5UMTY7DQotDQotI2lmbmRlZiBEQ1JfUkVNT1ZFX0lOVEVSTkFMDQotDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xMDU3NjANCi0gI2RlZmluZSBEQ1JfVVNFX05FV18xMDU3NjANCi0jZW5kaWYNCi0jaWZuZGVmIERDUl9VU0VfTkVXXzEyNzA4NA0KLSAjZGVmaW5lIERDUl9VU0VfTkVXXzEyNzA4NA0KLSNlbmRpZg0KLSNpZm5kZWYgRENSX1VTRV9ORVdfMTM1NDI5DQotICNkZWZpbmUgRENSX1VTRV9ORVdfMTM1NDI5DQotI2VuZGlmDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xNDA3ODINCi0gI2RlZmluZSBEQ1JfVVNFX05FV18xNDA3ODINCi0jZW5kaWYNCi0jaWZuZGVmIERDUl9VU0VfTkVXXzE0MDg1NQ0KLSAjZGVmaW5lIERDUl9VU0VfTkVXXzE0MDg1NQ0KLSNlbmRpZg0KLSNpZm5kZWYgRENSX1VTRV9ORVdfMTQwODU3DQotICNkZWZpbmUgRENSX1VTRV9ORVdfMTQwODU3DQotI2VuZGlmDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xNDA4NjENCi0gI2RlZmluZSBEQ1JfVVNFX05FV18xNDA4NjENCi0jZW5kaWYNCi0jaWZuZGVmIERDUl9VU0VfTkVXXzE0NTEzNQ0KLSAjZGVmaW5lIERDUl9VU0VfTkVXXzE0NTEzNQ0KLSNlbmRpZg0KLSNpZm5kZWYgRENSX1VTRV9ORVdfMTQ1MTM4DQotICNkZWZpbmUgRENSX1VTRV9ORVdfMTQ1MTM4DQotI2VuZGlmDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xNDUxMzkNCi0gI2RlZmluZSBEQ1JfVVNFX05FV18xNDUxMzkNCi0jZW5kaWYNCi0jaWZuZGVmIERDUl9VU0VfTkVXXzE0NTgwNA0KLSAjZGVmaW5lIERDUl9VU0VfTkVXXzE0NTgwNA0KLSNlbmRpZg0KLSNpZm5kZWYgRENSX1VTRV9ORVdfMTQ2OTMzDQotICNkZWZpbmUgRENSX1VTRV9ORVdfMTQ2OTMzDQotI2VuZGlmDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xNTIxNTQNCi0gI2RlZmluZSBEQ1JfVVNFX05FV18xNTIxNTQNCi0jZW5kaWYNCi0jaWZuZGVmIERDUl9VU0VfTkVXXzE3NTg2Ng0KLSAjZGVmaW5lIERDUl9VU0VfTkVXXzE3NTg2Ng0KLSNlbmRpZg0KLQ0KLSNpZm5kZWYgRENSX1VTRV9ORVdfMTg4OTIyDQotICNkZWZpbmUgRENSX1VTRV9ORVdfMTg4OTIyDQotI2VuZGlmDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xMzcyNTINCi0gI2RlZmluZSBEQ1JfVVNFX05FV18xMzcyNTINCi0jZW5kaWYNCi0jaWZuZGVmIERDUl9VU0VfTkVXXzIwMjkwMw0KLSAjZGVmaW5lIERDUl9VU0VfTkVXXzIwMjkwMw0KLSNlbmRpZg0KLSNpZm5kZWYgRENSX1VTRV9ORVdfMTk3ODE5DQotICNkZWZpbmUgRENSX1VTRV9ORVdfMTk3ODE5DQotI2VuZGlmDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xODYwOTENCi0gI2RlZmluZSBEQ1JfVVNFX05FV18xODYwOTENCi0jZW5kaWYNCi0jaWZuZGVmIERDUl9VU0VfTkVXXzEyNTQ2Nw0KLSAjZGVmaW5lIERDUl9VU0VfTkVXXzEyNTQ2Nw0KLSNlbmRpZg0KLSNpZm5kZWYgRENSX1VTRV9ORVdfMTY4NzcyDQotICNkZWZpbmUgRENSX1VTRV9ORVdfMTY4NzcyDQotI2VuZGlmDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xODY3NjQgDQotICNkZWZpbmUgRENSX1VTRV9ORVdfMTg2NzY0IA0KLSNlbmRpZg0KLSNpZm5kZWYgRENSX1VTRV9ORVdfMTc0MzQwDQotICNkZWZpbmUgRENSX1VTRV9ORVdfMTc0MzQwDQotI2VuZGlmDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xODYxNTENCi0gI2RlZmluZSBEQ1JfVVNFX05FV18xODYxNTENCi0jZW5kaWYNCi0NCi0jaWZuZGVmIERDUl9VU0VfTkVXXzIzNTA3Mg0KLSAjZGVmaW5lIERDUl9VU0VfTkVXXzIzNTA3Mg0KLSNlbmRpZg0KLQ0KLSNlbmRpZiAvLyBEQ1JfUkVNT1ZFX0lOVEVSTkFMDQotDQotbmFtZXNwYWNlIEdkaXBsdXMNCi17DQotICAgIG5hbWVzcGFjZSBEbGxFeHBvcnRzDQotICAgIHsNCi0gICAgICAgICNpbmNsdWRlICJHZGlwbHVzTWVtLmgiDQotICAgIH07DQotDQotICAgICNpbmNsdWRlICJHZGlwbHVzQmFzZS5oIg0KLQ0KLSAgICAvLyBUaGUgZm9sbG93aW5nIGhlYWRlcnMgYXJlIHVzZWQgaW50ZXJuYWxseSBhcyB3ZWxsDQotICAgICNpbmNsdWRlICJHZGlwbHVzRW51bXMuaCINCi0gICAgI2luY2x1ZGUgIkdkaXBsdXNUeXBlcy5oIg0KLSAgICAjaW5jbHVkZSAiR2RpcGx1c0luaXQuaCINCi0gICAgI2luY2x1ZGUgIkdkaXBsdXNQaXhlbEZvcm1hdHMuaCINCi0gICAgI2luY2x1ZGUgIkdkaXBsdXNDb2xvci5oIg0KLSAgICAjaW5jbHVkZSAiR2RpcGx1c01ldGFIZWFkZXIuaCINCi0gICAgI2luY2x1ZGUgIkdkaXBsdXNJbWFnaW5nLmgiDQotICAgICNpbmNsdWRlICJHZGlwbHVzQ29sb3JNYXRyaXguaCINCi0NCi0gICAgLy8gVGhlIHJlc3Qgb2YgdGhlc2UgYXJlIHVzZWQgb25seSBieSB0aGUgYXBwbGljYXRpb24NCi0NCi0gICAgI2luY2x1ZGUgIkdkaXBsdXNHcFN0dWJzLmgiDQotICAgICNpbmNsdWRlICJHZGlwbHVzSGVhZGVycy5oIg0KLQ0KLSAgICBuYW1lc3BhY2UgRGxsRXhwb3J0cw0KLSAgICB7DQotICAgICAgICAjaW5jbHVkZSAiR2RpcGx1c0ZsYXQuaCINCi0gICAgfTsNCi0NCi0NCi0gICAgI2luY2x1ZGUgIkdkaXBsdXNJbWFnZUF0dHJpYnV0ZXMuaCINCi0gICAgI2luY2x1ZGUgIkdkaXBsdXNNYXRyaXguaCINCi0gICAgI2luY2x1ZGUgIkdkaXBsdXNCcnVzaC5oIg0KLSAgICAjaW5jbHVkZSAiR2RpcGx1c1Blbi5oIg0KLSAgICAjaW5jbHVkZSAiR2RpcGx1c1N0cmluZ0Zvcm1hdC5oIg0KLSAgICAjaW5jbHVkZSAiR2RpcGx1c1BhdGguaCINCi0gICAgI2luY2x1ZGUgIkdkaXBsdXNMaW5lQ2Fwcy5oIg0KLSAgICAjaW5jbHVkZSAiR2RpcGx1c01ldGFmaWxlLmgiDQotICAgICNpbmNsdWRlICJHZGlwbHVzR3JhcGhpY3MuaCINCi0gICAgI2luY2x1ZGUgIkdkaXBsdXNDYWNoZWRCaXRtYXAuaCINCi0gICAgI2luY2x1ZGUgIkdkaXBsdXNSZWdpb24uaCINCi0gICAgI2luY2x1ZGUgIkdkaXBsdXNGb250Q29sbGVjdGlvbi5oIg0KLSAgICAjaW5jbHVkZSAiR2RpcGx1c0ZvbnRGYW1pbHkuaCINCi0gICAgI2luY2x1ZGUgIkdkaXBsdXNGb250LmgiDQotICAgICNpbmNsdWRlICJHZGlwbHVzQml0bWFwLmgiDQotICAgICNpbmNsdWRlICJHZGlwbHVzSW1hZ2VDb2RlYy5oIg0KLQ0KLX07IC8vIG5hbWVzcGFjZSBHZGlwbHVzDQotDQotDQotDQotI2VuZGlmIC8vICFfR0RJUExVU19IUFANCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCisqCisqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqIE1vZHVsZSBOYW1lOgorKgorKiAgIEdkaXBsdXMuaAorKgorKiBBYnN0cmFjdDoKKyoKKyogICBHREkrIE5hdGl2ZSBDKysgcHVibGljIGhlYWRlciBmaWxlCisqCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0dESVBMVVNfSAorI2RlZmluZSBfR0RJUExVU19ICisKK3N0cnVjdCBJRGlyZWN0RHJhd1N1cmZhY2U3OworCit0eXBlZGVmIHNpZ25lZCAgIHNob3J0ICAgSU5UMTY7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICBVSU5UMTY7CisKKyNpZm5kZWYgRENSX1JFTU9WRV9JTlRFUk5BTAorCisjaWZuZGVmIERDUl9VU0VfTkVXXzEwNTc2MAorICNkZWZpbmUgRENSX1VTRV9ORVdfMTA1NzYwCisjZW5kaWYKKyNpZm5kZWYgRENSX1VTRV9ORVdfMTI3MDg0CisgI2RlZmluZSBEQ1JfVVNFX05FV18xMjcwODQKKyNlbmRpZgorI2lmbmRlZiBEQ1JfVVNFX05FV18xMzU0MjkKKyAjZGVmaW5lIERDUl9VU0VfTkVXXzEzNTQyOQorI2VuZGlmCisjaWZuZGVmIERDUl9VU0VfTkVXXzE0MDc4MgorICNkZWZpbmUgRENSX1VTRV9ORVdfMTQwNzgyCisjZW5kaWYKKyNpZm5kZWYgRENSX1VTRV9ORVdfMTQwODU1CisgI2RlZmluZSBEQ1JfVVNFX05FV18xNDA4NTUKKyNlbmRpZgorI2lmbmRlZiBEQ1JfVVNFX05FV18xNDA4NTcKKyAjZGVmaW5lIERDUl9VU0VfTkVXXzE0MDg1NworI2VuZGlmCisjaWZuZGVmIERDUl9VU0VfTkVXXzE0MDg2MQorICNkZWZpbmUgRENSX1VTRV9ORVdfMTQwODYxCisjZW5kaWYKKyNpZm5kZWYgRENSX1VTRV9ORVdfMTQ1MTM1CisgI2RlZmluZSBEQ1JfVVNFX05FV18xNDUxMzUKKyNlbmRpZgorI2lmbmRlZiBEQ1JfVVNFX05FV18xNDUxMzgKKyAjZGVmaW5lIERDUl9VU0VfTkVXXzE0NTEzOAorI2VuZGlmCisjaWZuZGVmIERDUl9VU0VfTkVXXzE0NTEzOQorICNkZWZpbmUgRENSX1VTRV9ORVdfMTQ1MTM5CisjZW5kaWYKKyNpZm5kZWYgRENSX1VTRV9ORVdfMTQ1ODA0CisgI2RlZmluZSBEQ1JfVVNFX05FV18xNDU4MDQKKyNlbmRpZgorI2lmbmRlZiBEQ1JfVVNFX05FV18xNDY5MzMKKyAjZGVmaW5lIERDUl9VU0VfTkVXXzE0NjkzMworI2VuZGlmCisjaWZuZGVmIERDUl9VU0VfTkVXXzE1MjE1NAorICNkZWZpbmUgRENSX1VTRV9ORVdfMTUyMTU0CisjZW5kaWYKKyNpZm5kZWYgRENSX1VTRV9ORVdfMTc1ODY2CisgI2RlZmluZSBEQ1JfVVNFX05FV18xNzU4NjYKKyNlbmRpZgorCisjaWZuZGVmIERDUl9VU0VfTkVXXzE4ODkyMgorICNkZWZpbmUgRENSX1VTRV9ORVdfMTg4OTIyCisjZW5kaWYKKyNpZm5kZWYgRENSX1VTRV9ORVdfMTM3MjUyCisgI2RlZmluZSBEQ1JfVVNFX05FV18xMzcyNTIKKyNlbmRpZgorI2lmbmRlZiBEQ1JfVVNFX05FV18yMDI5MDMKKyAjZGVmaW5lIERDUl9VU0VfTkVXXzIwMjkwMworI2VuZGlmCisjaWZuZGVmIERDUl9VU0VfTkVXXzE5NzgxOQorICNkZWZpbmUgRENSX1VTRV9ORVdfMTk3ODE5CisjZW5kaWYKKyNpZm5kZWYgRENSX1VTRV9ORVdfMTg2MDkxCisgI2RlZmluZSBEQ1JfVVNFX05FV18xODYwOTEKKyNlbmRpZgorI2lmbmRlZiBEQ1JfVVNFX05FV18xMjU0NjcKKyAjZGVmaW5lIERDUl9VU0VfTkVXXzEyNTQ2NworI2VuZGlmCisjaWZuZGVmIERDUl9VU0VfTkVXXzE2ODc3MgorICNkZWZpbmUgRENSX1VTRV9ORVdfMTY4NzcyCisjZW5kaWYKKyNpZm5kZWYgRENSX1VTRV9ORVdfMTg2NzY0IAorICNkZWZpbmUgRENSX1VTRV9ORVdfMTg2NzY0IAorI2VuZGlmCisjaWZuZGVmIERDUl9VU0VfTkVXXzE3NDM0MAorICNkZWZpbmUgRENSX1VTRV9ORVdfMTc0MzQwCisjZW5kaWYKKyNpZm5kZWYgRENSX1VTRV9ORVdfMTg2MTUxCisgI2RlZmluZSBEQ1JfVVNFX05FV18xODYxNTEKKyNlbmRpZgorCisjaWZuZGVmIERDUl9VU0VfTkVXXzIzNTA3MgorICNkZWZpbmUgRENSX1VTRV9ORVdfMjM1MDcyCisjZW5kaWYKKworI2VuZGlmIC8vIERDUl9SRU1PVkVfSU5URVJOQUwKKworbmFtZXNwYWNlIEdkaXBsdXMKK3sKKyAgICBuYW1lc3BhY2UgRGxsRXhwb3J0cworICAgIHsKKyAgICAgICAgI2luY2x1ZGUgIkdkaXBsdXNNZW0uaCIKKyAgICB9OworCisgICAgI2luY2x1ZGUgIkdkaXBsdXNCYXNlLmgiCisKKyAgICAvLyBUaGUgZm9sbG93aW5nIGhlYWRlcnMgYXJlIHVzZWQgaW50ZXJuYWxseSBhcyB3ZWxsCisgICAgI2luY2x1ZGUgIkdkaXBsdXNFbnVtcy5oIgorICAgICNpbmNsdWRlICJHZGlwbHVzVHlwZXMuaCIKKyAgICAjaW5jbHVkZSAiR2RpcGx1c0luaXQuaCIKKyAgICAjaW5jbHVkZSAiR2RpcGx1c1BpeGVsRm9ybWF0cy5oIgorICAgICNpbmNsdWRlICJHZGlwbHVzQ29sb3IuaCIKKyAgICAjaW5jbHVkZSAiR2RpcGx1c01ldGFIZWFkZXIuaCIKKyAgICAjaW5jbHVkZSAiR2RpcGx1c0ltYWdpbmcuaCIKKyAgICAjaW5jbHVkZSAiR2RpcGx1c0NvbG9yTWF0cml4LmgiCisKKyAgICAvLyBUaGUgcmVzdCBvZiB0aGVzZSBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBhcHBsaWNhdGlvbgorCisgICAgI2luY2x1ZGUgIkdkaXBsdXNHcFN0dWJzLmgiCisgICAgI2luY2x1ZGUgIkdkaXBsdXNIZWFkZXJzLmgiCisKKyAgICBuYW1lc3BhY2UgRGxsRXhwb3J0cworICAgIHsKKyAgICAgICAgI2luY2x1ZGUgIkdkaXBsdXNGbGF0LmgiCisgICAgfTsKKworCisgICAgI2luY2x1ZGUgIkdkaXBsdXNJbWFnZUF0dHJpYnV0ZXMuaCIKKyAgICAjaW5jbHVkZSAiR2RpcGx1c01hdHJpeC5oIgorICAgICNpbmNsdWRlICJHZGlwbHVzQnJ1c2guaCIKKyAgICAjaW5jbHVkZSAiR2RpcGx1c1Blbi5oIgorICAgICNpbmNsdWRlICJHZGlwbHVzU3RyaW5nRm9ybWF0LmgiCisgICAgI2luY2x1ZGUgIkdkaXBsdXNQYXRoLmgiCisgICAgI2luY2x1ZGUgIkdkaXBsdXNMaW5lQ2Fwcy5oIgorICAgICNpbmNsdWRlICJHZGlwbHVzTWV0YWZpbGUuaCIKKyAgICAjaW5jbHVkZSAiR2RpcGx1c0dyYXBoaWNzLmgiCisgICAgI2luY2x1ZGUgIkdkaXBsdXNDYWNoZWRCaXRtYXAuaCIKKyAgICAjaW5jbHVkZSAiR2RpcGx1c1JlZ2lvbi5oIgorICAgICNpbmNsdWRlICJHZGlwbHVzRm9udENvbGxlY3Rpb24uaCIKKyAgICAjaW5jbHVkZSAiR2RpcGx1c0ZvbnRGYW1pbHkuaCIKKyAgICAjaW5jbHVkZSAiR2RpcGx1c0ZvbnQuaCIKKyAgICAjaW5jbHVkZSAiR2RpcGx1c0JpdG1hcC5oIgorICAgICNpbmNsdWRlICJHZGlwbHVzSW1hZ2VDb2RlYy5oIgorCit9OyAvLyBuYW1lc3BhY2UgR2RpcGx1cworCisKKworI2VuZGlmIC8vICFfR0RJUExVU19IUFAKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNCYXNlLmggYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzQmFzZS5oCmluZGV4IDQwYTk3N2QuLjU5ZjdjYzIgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNCYXNlLmgKKysrIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0Jhc2UuaApAQCAtMSw0MCArMSw0MCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXA0KLSoNCi0qIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotKg0KLSogTW9kdWxlIE5hbWU6DQotKg0KLSogICBHZGlwbHVzQmFzZS5oDQotKg0KLSogQWJzdHJhY3Q6DQotKg0KLSogICBSZXByZXNlbnRzIHRoZSBiYXNlIGNsYXNzIGZvciBHRElQbHVzIG1lbW9yeSBhbGxvY2F0aW9uLiANCi0qDQotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLSNpZm5kZWYgX0dESVBMVVNCQVNFX0gNCi0jZGVmaW5lIF9HRElQTFVTQkFTRV9IDQotDQotY2xhc3MgR2RpcGx1c0Jhc2UNCi17DQotcHVibGljOg0KLSAgICB2b2lkIChvcGVyYXRvciBkZWxldGUpKHZvaWQqIGluX3BWb2lkKQ0KLSAgICB7DQotICAgICAgIERsbEV4cG9ydHM6OkdkaXBGcmVlKGluX3BWb2lkKTsNCi0gICAgfQ0KLSAgICB2b2lkKiAob3BlcmF0b3IgbmV3KShzaXplX3QgaW5fc2l6ZSkNCi0gICAgew0KLSAgICAgICByZXR1cm4gRGxsRXhwb3J0czo6R2RpcEFsbG9jKGluX3NpemUpOw0KLSAgICB9DQotICAgIHZvaWQgKG9wZXJhdG9yIGRlbGV0ZVtdKSh2b2lkKiBpbl9wVm9pZCkNCi0gICAgew0KLSAgICAgICBEbGxFeHBvcnRzOjpHZGlwRnJlZShpbl9wVm9pZCk7DQotICAgIH0NCi0gICAgdm9pZCogKG9wZXJhdG9yIG5ld1tdKShzaXplX3QgaW5fc2l6ZSkNCi0gICAgew0KLSAgICAgICByZXR1cm4gRGxsRXhwb3J0czo6R2RpcEFsbG9jKGluX3NpemUpOw0KLSAgICB9DQotfTsNCi0NCi0jZW5kaWYgDQotDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKgorKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwgTWljcm9zb2Z0IENvcnAuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKiBNb2R1bGUgTmFtZToKKyoKKyogICBHZGlwbHVzQmFzZS5oCisqCisqIEFic3RyYWN0OgorKgorKiAgIFJlcHJlc2VudHMgdGhlIGJhc2UgY2xhc3MgZm9yIEdESVBsdXMgbWVtb3J5IGFsbG9jYXRpb24uIAorKgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9HRElQTFVTQkFTRV9ICisjZGVmaW5lIF9HRElQTFVTQkFTRV9ICisKK2NsYXNzIEdkaXBsdXNCYXNlCit7CitwdWJsaWM6CisgICAgdm9pZCAob3BlcmF0b3IgZGVsZXRlKSh2b2lkKiBpbl9wVm9pZCkKKyAgICB7CisgICAgICAgRGxsRXhwb3J0czo6R2RpcEZyZWUoaW5fcFZvaWQpOworICAgIH0KKyAgICB2b2lkKiAob3BlcmF0b3IgbmV3KShzaXplX3QgaW5fc2l6ZSkKKyAgICB7CisgICAgICAgcmV0dXJuIERsbEV4cG9ydHM6OkdkaXBBbGxvYyhpbl9zaXplKTsKKyAgICB9CisgICAgdm9pZCAob3BlcmF0b3IgZGVsZXRlW10pKHZvaWQqIGluX3BWb2lkKQorICAgIHsKKyAgICAgICBEbGxFeHBvcnRzOjpHZGlwRnJlZShpbl9wVm9pZCk7CisgICAgfQorICAgIHZvaWQqIChvcGVyYXRvciBuZXdbXSkoc2l6ZV90IGluX3NpemUpCisgICAgeworICAgICAgIHJldHVybiBEbGxFeHBvcnRzOjpHZGlwQWxsb2MoaW5fc2l6ZSk7CisgICAgfQorfTsKKworI2VuZGlmIAorCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzQml0bWFwLmggYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzQml0bWFwLmgKaW5kZXggZmJlMDA2MS4uMTZkNjZiZCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0JpdG1hcC5oCisrKyBiL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNCaXRtYXAuaApAQCAtMSwxMDA0ICsxLDEwMDQgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwNCi0qDQotKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwgTWljcm9zb2Z0IENvcnAuICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSoNCi0qIE1vZHVsZSBOYW1lOg0KLSoNCi0qICAgR2RpcGx1c0JpdG1hcC5oDQotKg0KLSogQWJzdHJhY3Q6DQotKg0KLSogICBCaXRtYXAgcmVsYXRlZCBkZWNsYXJhdGlvbnMNCi0qDQotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLSNpZm5kZWYgX0dESVBMVVNCSVRNQVBfSA0KLSNkZWZpbmUgX0dESVBMVVNCSVRNQVBfSA0KLQ0KLS8vIE5PVEU6DQotLy8gIE91ciBjdXJyZW50IGNob2ljZSBmb3IgdGhlIHB1YmxpYyBBUEkgaXMgdG8gdXNlIGNvbnN0cnVjdG9ycw0KLS8vICBpbnN0ZWFkIG9mIHN0YXRpYyBsb2FkIGZ1bmN0aW9ucyB0byBjcmVhdGUgaW1hZ2Ugb2JqZWN0cy4NCi0vLw0KLS8vICBJJ3ZlIGtlcHQgdGhlIHN0YXRpYyBsb2FkIGZ1bmN0aW9ucyBoZXJlIGZvciBub3cgc28gdGhhdA0KLS8vICBleGlzdGluZyB0ZXN0IHByb2dyYW1zIGFyZSBub3QgYnJva2VuLiBCdXQgdGhleSBzaG91bGQNCi0vLyAgZXZlbnR1YWxseSBiZSB0YWtlbiBvdXQuDQotDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xNDA3ODINCi0NCi1pbmxpbmUgDQotSW1hZ2U6OkltYWdlKA0KLSAgICBJTiBjb25zdCBXQ0hBUiogZmlsZW5hbWUNCi0gICAgKQ0KLXsNCi0gICAgbmF0aXZlSW1hZ2UgPSBOVUxMOw0KLSAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcExvYWRJbWFnZUZyb21GaWxlKGZpbGVuYW1lLCAmbmF0aXZlSW1hZ2UpOw0KLX0NCi0NCi1pbmxpbmUgDQotSW1hZ2U6OkltYWdlKA0KLSAgICBJTiBJU3RyZWFtKiBzdHJlYW0NCi0gICAgKQ0KLXsNCi0gICAgbmF0aXZlSW1hZ2UgPSBOVUxMOw0KLSAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcExvYWRJbWFnZUZyb21TdHJlYW0oc3RyZWFtLCAmbmF0aXZlSW1hZ2UpOw0KLX0NCi0NCi1pbmxpbmUgSW1hZ2UqIA0KLUltYWdlOjpGcm9tRmlsZSgNCi0gICAgSU4gY29uc3QgV0NIQVIqIGZpbGVuYW1lDQotICAgICkNCi17DQotICAgIHJldHVybiBuZXcgSW1hZ2UoZmlsZW5hbWUpOw0KLX0NCi0NCi1pbmxpbmUgSW1hZ2UqDQotSW1hZ2U6OkZyb21TdHJlYW0oDQotICAgIElOIElTdHJlYW0qIHN0cmVhbQ0KLSAgICApDQotew0KLSAgICByZXR1cm4gbmV3IEltYWdlKHN0cmVhbSk7DQotfQ0KLQ0KLSNlbHNlDQotDQotaW5saW5lIA0KLUltYWdlOjpJbWFnZSgNCi0gICAgSU4gY29uc3QgV0NIQVIqIGZpbGVuYW1lLA0KLSAgICBJTiBCT09MIHVzZUVtYmVkZGVkQ29sb3JNYW5hZ2VtZW50DQotICAgICkNCi17DQotICAgIG5hdGl2ZUltYWdlID0gTlVMTDsNCi0gICAgaWYodXNlRW1iZWRkZWRDb2xvck1hbmFnZW1lbnQpDQotICAgIHsNCi0gICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwTG9hZEltYWdlRnJvbUZpbGVJQ00oDQotICAgICAgICAgICAgZmlsZW5hbWUsIA0KLSAgICAgICAgICAgICZuYXRpdmVJbWFnZQ0KLSAgICAgICAgKTsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsgICAgICANCi0gICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwTG9hZEltYWdlRnJvbUZpbGUoDQotICAgICAgICAgICAgZmlsZW5hbWUsIA0KLSAgICAgICAgICAgICZuYXRpdmVJbWFnZQ0KLSAgICAgICAgKTsNCi0gICAgfQ0KLX0NCi0NCi1pbmxpbmUgDQotSW1hZ2U6OkltYWdlKA0KLSAgICBJTiBJU3RyZWFtKiBzdHJlYW0sDQotICAgIElOIEJPT0wgdXNlRW1iZWRkZWRDb2xvck1hbmFnZW1lbnQNCi0gICAgKQ0KLXsNCi0gICAgbmF0aXZlSW1hZ2UgPSBOVUxMOw0KLSAgICBpZih1c2VFbWJlZGRlZENvbG9yTWFuYWdlbWVudCkNCi0gICAgew0KLSAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBMb2FkSW1hZ2VGcm9tU3RyZWFtSUNNKA0KLSAgICAgICAgICAgIHN0cmVhbSwgDQotICAgICAgICAgICAgJm5hdGl2ZUltYWdlDQotICAgICAgICApOw0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBMb2FkSW1hZ2VGcm9tU3RyZWFtKA0KLSAgICAgICAgICAgIHN0cmVhbSwgDQotICAgICAgICAgICAgJm5hdGl2ZUltYWdlDQotICAgICAgICApOw0KLSAgICB9DQotfQ0KLQ0KLWlubGluZSBJbWFnZSogDQotSW1hZ2U6OkZyb21GaWxlKA0KLSAgICBJTiBjb25zdCBXQ0hBUiogZmlsZW5hbWUsDQotICAgIElOIEJPT0wgdXNlRW1iZWRkZWRDb2xvck1hbmFnZW1lbnQNCi0gICAgKQ0KLXsNCi0gICAgcmV0dXJuIG5ldyBJbWFnZSgNCi0gICAgICAgIGZpbGVuYW1lLCANCi0gICAgICAgIHVzZUVtYmVkZGVkQ29sb3JNYW5hZ2VtZW50DQotICAgICk7DQotfQ0KLQ0KLWlubGluZSBJbWFnZSoNCi1JbWFnZTo6RnJvbVN0cmVhbSgNCi0gICAgSU4gSVN0cmVhbSogc3RyZWFtLA0KLSAgICBJTiBCT09MIHVzZUVtYmVkZGVkQ29sb3JNYW5hZ2VtZW50DQotICAgICkNCi17DQotICAgIHJldHVybiBuZXcgSW1hZ2UoDQotICAgICAgICBzdHJlYW0sDQotICAgICAgICB1c2VFbWJlZGRlZENvbG9yTWFuYWdlbWVudA0KLSAgICApOw0KLX0NCi0NCi0jZW5kaWYNCi0NCi1pbmxpbmUgDQotSW1hZ2U6On5JbWFnZSgpDQotew0KLSAgICBEbGxFeHBvcnRzOjpHZGlwRGlzcG9zZUltYWdlKG5hdGl2ZUltYWdlKTsNCi19DQotDQotaW5saW5lIEltYWdlKiANCi1JbWFnZTo6Q2xvbmUoKSANCi17DQotICAgIEdwSW1hZ2UgKmNsb25laW1hZ2UgPSBOVUxMOw0KLQ0KLSAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENsb25lSW1hZ2UobmF0aXZlSW1hZ2UsICZjbG9uZWltYWdlKSk7DQotDQotICAgIHJldHVybiBuZXcgSW1hZ2UoY2xvbmVpbWFnZSwgbGFzdFJlc3VsdCk7DQotfQ0KLQ0KLS8vIEVuY29yZGVyIFBhcmFtZXRlcg0KLQ0KLWlubGluZSBVSU5UDQotSW1hZ2U6OkdldEVuY29kZXJQYXJhbWV0ZXJMaXN0U2l6ZSgNCi0gICAgSU4gY29uc3QgQ0xTSUQqIGNsc2lkRW5jb2Rlcg0KLSAgICApIA0KLXsNCi0gICAgVUlOVCBzaXplID0gMDsNCi0NCi0gICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRFbmNvZGVyUGFyYW1ldGVyTGlzdFNpemUobmF0aXZlSW1hZ2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsc2lkRW5jb2RlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNpemUpKTsNCi0gICAgcmV0dXJuIHNpemU7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMNCi1JbWFnZTo6R2V0RW5jb2RlclBhcmFtZXRlckxpc3QoDQotICAgIElOIGNvbnN0IENMU0lEKiBjbHNpZEVuY29kZXIsDQotICAgIElOIFVJTlQgc2l6ZSwNCi0gICAgT1VUIEVuY29kZXJQYXJhbWV0ZXJzKiBidWZmZXINCi0gICAgKQ0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0RW5jb2RlclBhcmFtZXRlckxpc3QobmF0aXZlSW1hZ2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsc2lkRW5jb2RlciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyKSk7DQotfQ0KLQ0KLS8vIFNhdmUgaW1hZ2VzDQotDQotaW5saW5lIFN0YXR1cw0KLUltYWdlOjpTYXZlKA0KLSAgICBJTiBjb25zdCBXQ0hBUiogZmlsZW5hbWUsDQotICAgIElOIGNvbnN0IENMU0lEKiBjbHNpZEVuY29kZXIsDQotICAgIElOIGNvbnN0IEVuY29kZXJQYXJhbWV0ZXJzICplbmNvZGVyUGFyYW1zDQotICAgICkNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNhdmVJbWFnZVRvRmlsZShuYXRpdmVJbWFnZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzaWRFbmNvZGVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlclBhcmFtcykpOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzDQotSW1hZ2U6OlNhdmUoDQotICAgIElOIElTdHJlYW0qIHN0cmVhbSwNCi0gICAgSU4gY29uc3QgQ0xTSUQqIGNsc2lkRW5jb2RlciwNCi0gICAgSU4gY29uc3QgRW5jb2RlclBhcmFtZXRlcnMgKmVuY29kZXJQYXJhbXMNCi0gICAgKQ0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2F2ZUltYWdlVG9TdHJlYW0obmF0aXZlSW1hZ2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzaWRFbmNvZGVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVyUGFyYW1zKSk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMNCi1JbWFnZTo6U2F2ZUFkZCgNCi0gICAgSU4gY29uc3QgRW5jb2RlclBhcmFtZXRlcnMgKmVuY29kZXJQYXJhbXMNCi0gICAgKQ0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2F2ZUFkZChuYXRpdmVJbWFnZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVyUGFyYW1zKSk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMNCi1JbWFnZTo6U2F2ZUFkZCgNCi0gICAgSU4gSW1hZ2UqIG5ld0ltYWdlLA0KLSAgICBJTiBjb25zdCBFbmNvZGVyUGFyYW1ldGVycyAqZW5jb2RlclBhcmFtcw0KLSAgICApDQotew0KLSAgICBpZiAoIG5ld0ltYWdlID09IE5VTEwgKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKEludmFsaWRQYXJhbWV0ZXIpOw0KLSAgICB9DQotDQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNhdmVBZGRJbWFnZShuYXRpdmVJbWFnZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ltYWdlLT5uYXRpdmVJbWFnZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZXJQYXJhbXMpKTsNCi19DQotDQotLy8gR2V0IHNpemUgYW5kIHR5cGUgaW5mb3JtYXRpb24NCi1pbmxpbmUgSW1hZ2VUeXBlIA0KLUltYWdlOjpHZXRUeXBlKCkgY29uc3QNCi17DQotICAgIEltYWdlVHlwZSB0eXBlID0gSW1hZ2VUeXBlVW5rbm93bjsNCi0NCi0gICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRJbWFnZVR5cGUobmF0aXZlSW1hZ2UsICZ0eXBlKSk7DQotDQotICAgIHJldHVybiB0eXBlOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzIA0KLUltYWdlOjpHZXRQaHlzaWNhbERpbWVuc2lvbigNCi0gICAgT1VUIFNpemVGKiBzaXplDQotICAgICkgDQotew0KLSAgICBpZiAoc2l6ZSA9PSBOVUxMKSANCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhJbnZhbGlkUGFyYW1ldGVyKTsNCi0gICAgfQ0KLSAgICANCi0gICAgUkVBTCB3aWR0aCwgaGVpZ2h0Ow0KLSAgICBTdGF0dXMgc3RhdHVzOw0KLQ0KLSAgICBzdGF0dXMgPSBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEltYWdlRGltZW5zaW9uKG5hdGl2ZUltYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3aWR0aCwgJmhlaWdodCkpOw0KLQ0KLSAgICBzaXplLT5XaWR0aCAgPSB3aWR0aDsNCi0gICAgc2l6ZS0+SGVpZ2h0ID0gaGVpZ2h0Ow0KLQ0KLSAgICByZXR1cm4gc3RhdHVzOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzIA0KLUltYWdlOjpHZXRCb3VuZHMoDQotICAgIE9VVCBSZWN0RiAqc3JjUmVjdCwgDQotICAgIE9VVCBVbml0ICpzcmNVbml0DQotICAgICkNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEltYWdlQm91bmRzKG5hdGl2ZUltYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNSZWN0LCBzcmNVbml0KSk7DQotfQ0KLQ0KLWlubGluZSBVSU5UIA0KLUltYWdlOjpHZXRXaWR0aCgpDQotew0KLSAgICBVSU5UIHdpZHRoID0gMDsNCi0NCi0gICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRJbWFnZVdpZHRoKG5hdGl2ZUltYWdlLCAmd2lkdGgpKTsNCi0NCi0gICAgcmV0dXJuIHdpZHRoOw0KLX0NCi0NCi1pbmxpbmUgVUlOVCANCi1JbWFnZTo6R2V0SGVpZ2h0KCkNCi17DQotICAgIFVJTlQgaGVpZ2h0ID0gMDsNCi0NCi0gICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRJbWFnZUhlaWdodChuYXRpdmVJbWFnZSwgJmhlaWdodCkpOw0KLQ0KLSAgICByZXR1cm4gaGVpZ2h0Ow0KLX0NCi0NCi1pbmxpbmUgUkVBTCANCi1JbWFnZTo6R2V0SG9yaXpvbnRhbFJlc29sdXRpb24oKQ0KLXsNCi0gICAgUkVBTCByZXNvbHV0aW9uID0gMC4wZjsNCi0NCi0gICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRJbWFnZUhvcml6b250YWxSZXNvbHV0aW9uKG5hdGl2ZUltYWdlLCAmcmVzb2x1dGlvbikpOw0KLQ0KLSAgICByZXR1cm4gcmVzb2x1dGlvbjsNCi19DQotDQotaW5saW5lIFJFQUwgDQotSW1hZ2U6OkdldFZlcnRpY2FsUmVzb2x1dGlvbigpDQotew0KLSAgICBSRUFMIHJlc29sdXRpb24gPSAwLjBmOw0KLQ0KLSAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEltYWdlVmVydGljYWxSZXNvbHV0aW9uKG5hdGl2ZUltYWdlLCAmcmVzb2x1dGlvbikpOw0KLQ0KLSAgICByZXR1cm4gcmVzb2x1dGlvbjsNCi19DQotDQotaW5saW5lIFVJTlQgDQotSW1hZ2U6OkdldEZsYWdzKCkNCi17DQotICAgIFVJTlQgZmxhZ3MgPSAwOw0KLQ0KLSAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEltYWdlRmxhZ3MobmF0aXZlSW1hZ2UsICZmbGFncykpOw0KLQ0KLSAgICByZXR1cm4gZmxhZ3M7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotSW1hZ2U6OkdldFJhd0Zvcm1hdChPVVQgR1VJRCAqZm9ybWF0KQ0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0SW1hZ2VSYXdGb3JtYXQobmF0aXZlSW1hZ2UsIGZvcm1hdCkpOw0KLX0NCi0NCi1pbmxpbmUgUGl4ZWxGb3JtYXQgDQotSW1hZ2U6OkdldFBpeGVsRm9ybWF0KCkNCi17DQotICAgIFBpeGVsRm9ybWF0IGZvcm1hdDsNCi0NCi0gICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRJbWFnZVBpeGVsRm9ybWF0KG5hdGl2ZUltYWdlLCAmZm9ybWF0KSk7DQotDQotICAgIHJldHVybiBmb3JtYXQ7DQotfQ0KLQ0KLWlubGluZSBJTlQgDQotSW1hZ2U6OkdldFBhbGV0dGVTaXplKCkNCi17DQotICAgIElOVCBzaXplID0gMDsNCi0gICAgDQotICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0SW1hZ2VQYWxldHRlU2l6ZShuYXRpdmVJbWFnZSwgJnNpemUpKTsNCi0gICAgDQotICAgIHJldHVybiBzaXplOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzIA0KLUltYWdlOjpHZXRQYWxldHRlKA0KLSAgICBPVVQgQ29sb3JQYWxldHRlICpwYWxldHRlLA0KLSAgICBJTiBJTlQgc2l6ZQ0KLSkNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEltYWdlUGFsZXR0ZShuYXRpdmVJbWFnZSwgcGFsZXR0ZSwgc2l6ZSkpOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzIA0KLUltYWdlOjpTZXRQYWxldHRlKA0KLSAgICBJTiBjb25zdCBDb2xvclBhbGV0dGUgKnBhbGV0dGUNCi0gICAgKQ0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0SW1hZ2VQYWxldHRlKG5hdGl2ZUltYWdlLCBwYWxldHRlKSk7DQotfQ0KLQ0KLS8vIFRodW1ibmFpbCBzdXBwb3J0DQotDQotaW5saW5lIEltYWdlKiANCi1JbWFnZTo6R2V0VGh1bWJuYWlsSW1hZ2UoDQotICAgIElOIFVJTlQgdGh1bWJXaWR0aCwNCi0gICAgSU4gVUlOVCB0aHVtYkhlaWdodCwNCi0gICAgSU4gR2V0VGh1bWJuYWlsSW1hZ2VBYm9ydCBjYWxsYmFjaywNCi0gICAgSU4gVk9JRCogY2FsbGJhY2tEYXRhDQotICAgICkNCi17DQotICAgIEdwSW1hZ2UgKnRodW1iaW1hZ2UgPSBOVUxMOw0KLQ0KLSAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEltYWdlVGh1bWJuYWlsKG5hdGl2ZUltYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRodW1iV2lkdGgsIHRodW1iSGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aHVtYmltYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLCBjYWxsYmFja0RhdGEpKTsNCi0NCi0gICAgSW1hZ2UgKm5ld0ltYWdlID0gbmV3IEltYWdlKHRodW1iaW1hZ2UsIGxhc3RSZXN1bHQpOw0KLQ0KLSAgICBpZiAobmV3SW1hZ2UgPT0gTlVMTCkgDQotICAgIHsNCi0gICAgICAgIERsbEV4cG9ydHM6OkdkaXBEaXNwb3NlSW1hZ2UodGh1bWJpbWFnZSk7DQotICAgIH0NCi0NCi0gICAgcmV0dXJuIG5ld0ltYWdlOw0KLX0NCi0NCi0vLyBNdWx0aS1mcmFtZSBzdXBwb3J0DQotaW5saW5lIFVJTlQgDQotSW1hZ2U6OkdldEZyYW1lRGltZW5zaW9uc0NvdW50KCkNCi17DQotICAgIFVJTlQgY291bnQgPSAwOw0KLQ0KLSAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEltYWdlR2V0RnJhbWVEaW1lbnNpb25zQ291bnQobmF0aXZlSW1hZ2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvdW50KSk7DQotDQotICAgIHJldHVybiBjb3VudDsNCi19DQotDQotaW5saW5lIFN0YXR1cyANCi1JbWFnZTo6R2V0RnJhbWVEaW1lbnNpb25zTGlzdCgNCi0gICAgT1VUIEdVSUQqIGRpbWVuc2lvbklEcywgDQotICAgIElOIFVJTlQgY291bnQNCi0gICAgKQ0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSW1hZ2VHZXRGcmFtZURpbWVuc2lvbnNMaXN0KG5hdGl2ZUltYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltZW5zaW9uSURzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsNCi19DQotDQotaW5saW5lIFVJTlQgDQotSW1hZ2U6OkdldEZyYW1lQ291bnQoDQotICAgIElOIGNvbnN0IEdVSUQqIGRpbWVuc2lvbklEDQotICAgICkNCi17DQotICAgIFVJTlQgY291bnQgPSAwOw0KLQ0KLSAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEltYWdlR2V0RnJhbWVDb3VudChuYXRpdmVJbWFnZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpbWVuc2lvbklELA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvdW50KSk7DQotICAgIHJldHVybiBjb3VudDsNCi19DQotDQotaW5saW5lIFN0YXR1cyANCi1JbWFnZTo6U2VsZWN0QWN0aXZlRnJhbWUoDQotICAgIElOIGNvbnN0IEdVSUQgKmRpbWVuc2lvbklELCANCi0gICAgSU4gVUlOVCBmcmFtZUluZGV4DQotICAgICkNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEltYWdlU2VsZWN0QWN0aXZlRnJhbWUobmF0aXZlSW1hZ2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltZW5zaW9uSUQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVJbmRleCkpOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzDQotSW1hZ2U6OlJvdGF0ZUZsaXAoDQotICAgIElOIFJvdGF0ZUZsaXBUeXBlIHJvdGF0ZUZsaXBUeXBlDQotICAgICkNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEltYWdlUm90YXRlRmxpcChuYXRpdmVJbWFnZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZUZsaXBUeXBlKSk7DQotfQ0KLQ0KLS8vIEltYWdlIHByb3BlcnR5IHJlbGF0ZWQgZnVuY3Rpb25zDQotDQotaW5saW5lIFVJTlQgDQotSW1hZ2U6OkdldFByb3BlcnR5Q291bnQoKQ0KLXsNCi0gICAgVUlOVCBudW1Qcm9wZXJ0eSA9IDA7DQotDQotICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UHJvcGVydHlDb3VudChuYXRpdmVJbWFnZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZudW1Qcm9wZXJ0eSkpOw0KLQ0KLSAgICByZXR1cm4gbnVtUHJvcGVydHk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotSW1hZ2U6OkdldFByb3BlcnR5SWRMaXN0KA0KLSAgICBJTiBVSU5UIG51bU9mUHJvcGVydHksIA0KLSAgICBPVVQgUFJPUElEKiBsaXN0DQotICAgICkNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFByb3BlcnR5SWRMaXN0KG5hdGl2ZUltYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1PZlByb3BlcnR5LCBsaXN0KSk7DQotfQ0KLSAgICANCi1pbmxpbmUgVUlOVCANCi1JbWFnZTo6R2V0UHJvcGVydHlJdGVtU2l6ZSgNCi0gICAgSU4gUFJPUElEIHByb3BJZA0KLSAgICApDQotew0KLSAgICBVSU5UIHNpemUgPSAwOw0KLQ0KLSAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFByb3BlcnR5SXRlbVNpemUobmF0aXZlSW1hZ2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wSWQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2l6ZSkpOw0KLQ0KLSAgICByZXR1cm4gc2l6ZTsNCi19DQotDQotaW5saW5lIFN0YXR1cyANCi1JbWFnZTo6R2V0UHJvcGVydHlJdGVtKA0KLSAgICBJTiBQUk9QSUQgcHJvcElkLCANCi0gICAgSU4gVUlOVCBwcm9wU2l6ZSwNCi0gICAgT1VUIFByb3BlcnR5SXRlbSogYnVmZmVyDQotICAgICkNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFByb3BlcnR5SXRlbShuYXRpdmVJbWFnZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BJZCwgcHJvcFNpemUsIGJ1ZmZlcikpOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzIA0KLUltYWdlOjpHZXRQcm9wZXJ0eVNpemUoDQotICAgIE9VVCBVSU5UKiB0b3RhbEJ1ZmZlclNpemUsIA0KLSAgICBPVVQgVUlOVCogbnVtUHJvcGVydGllcw0KLSAgICApDQotew0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQcm9wZXJ0eVNpemUobmF0aXZlSW1hZ2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEJ1ZmZlclNpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1Qcm9wZXJ0aWVzKSk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotSW1hZ2U6OkdldEFsbFByb3BlcnR5SXRlbXMoDQotICAgIElOIFVJTlQgdG90YWxCdWZmZXJTaXplLA0KLSAgICBJTiBVSU5UIG51bVByb3BlcnRpZXMsDQotICAgIE9VVCBQcm9wZXJ0eUl0ZW0qIGFsbEl0ZW1zDQotICAgICkNCi17DQotICAgIGlmIChhbGxJdGVtcyA9PSBOVUxMKSANCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhJbnZhbGlkUGFyYW1ldGVyKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRBbGxQcm9wZXJ0eUl0ZW1zKG5hdGl2ZUltYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsQnVmZmVyU2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1Qcm9wZXJ0aWVzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbEl0ZW1zKSk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotSW1hZ2U6OlJlbW92ZVByb3BlcnR5SXRlbSgNCi0gICAgSU4gUFJPUElEIHByb3BJZA0KLSAgICApDQotew0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBSZW1vdmVQcm9wZXJ0eUl0ZW0obmF0aXZlSW1hZ2UsIHByb3BJZCkpOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzIA0KLUltYWdlOjpTZXRQcm9wZXJ0eUl0ZW0oDQotICAgIElOIGNvbnN0IFByb3BlcnR5SXRlbSogaXRlbQ0KLSAgICApDQotew0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQcm9wZXJ0eUl0ZW0obmF0aXZlSW1hZ2UsIGl0ZW0pKTsNCi19DQotDQotLy8gR2V0L1NldExheW91dA0KLS8vIFN1cHBvcnQgZm9yIE1pZGRsZSBFYXN0IGxvY2FsaXphdGlvbiAocmlnaHQtdG8tbGVmdCBtaXJyb3JpbmcpDQotDQotaW5saW5lIEltYWdlTGF5b3V0DQotSW1hZ2U6OkdldExheW91dCgpIGNvbnN0DQotew0KLSAgICBJbWFnZUxheW91dCBsYXlvdXQ7DQotDQotICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0SW1hZ2VMYXlvdXQobmF0aXZlSW1hZ2UsICZsYXlvdXQpKTsNCi0NCi0gICAgcmV0dXJuIGxheW91dDsNCi19DQotDQotaW5saW5lIFN0YXR1cw0KLUltYWdlOjpTZXRMYXlvdXQoSU4gY29uc3QgSW1hZ2VMYXlvdXQgbGF5b3V0KQ0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cygNCi0gICAgICAgIERsbEV4cG9ydHM6OkdkaXBTZXRJbWFnZUxheW91dChuYXRpdmVJbWFnZSwgbGF5b3V0KQ0KLSAgICApOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzDQotSW1hZ2U6OkdldExhc3RTdGF0dXMoKSBjb25zdA0KLXsNCi0gICAgU3RhdHVzIGxhc3RTdGF0dXMgPSBsYXN0UmVzdWx0Ow0KLSAgICBsYXN0UmVzdWx0ID0gT2s7DQotDQotICAgIHJldHVybiBsYXN0U3RhdHVzOw0KLX0NCi0NCi1pbmxpbmUgDQotSW1hZ2U6OkltYWdlKEdwSW1hZ2UgKm5hdGl2ZUltYWdlLCBTdGF0dXMgc3RhdHVzKQ0KLXsNCi0gICAgU2V0TmF0aXZlSW1hZ2UobmF0aXZlSW1hZ2UpOw0KLSAgICBsYXN0UmVzdWx0ID0gc3RhdHVzOw0KLX0NCi0NCi1pbmxpbmUgVk9JRCANCi1JbWFnZTo6U2V0TmF0aXZlSW1hZ2UoR3BJbWFnZSAqbmF0aXZlSW1hZ2UpDQotew0KLSAgICB0aGlzLT5uYXRpdmVJbWFnZSA9IG5hdGl2ZUltYWdlOw0KLX0NCi0NCi1pbmxpbmUgDQotQml0bWFwOjpCaXRtYXAoDQotICAgIElOIGNvbnN0IFdDSEFSICpmaWxlbmFtZSwgDQotICAgIElOIEJPT0wgdXNlRW1iZWRkZWRDb2xvck1hbmFnZW1lbnQNCi0gICAgKQ0KLXsNCi0gICAgR3BCaXRtYXAgKmJpdG1hcCA9IE5VTEw7DQotDQotICAgIGlmKHVzZUVtYmVkZGVkQ29sb3JNYW5hZ2VtZW50KSANCi0gICAgew0KLSAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVCaXRtYXBGcm9tRmlsZUlDTShmaWxlbmFtZSwgJmJpdG1hcCk7DQotICAgIH0NCi0gICAgZWxzZQ0KLSAgICB7DQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUJpdG1hcEZyb21GaWxlKGZpbGVuYW1lLCAmYml0bWFwKTsNCi0gICAgfQ0KLQ0KLSAgICBTZXROYXRpdmVJbWFnZShiaXRtYXApOw0KLX0NCi0NCi1pbmxpbmUgDQotQml0bWFwOjpCaXRtYXAoDQotICAgIElOIElTdHJlYW0gKnN0cmVhbSwgDQotICAgIElOIEJPT0wgdXNlRW1iZWRkZWRDb2xvck1hbmFnZW1lbnQNCi0gICAgKQ0KLXsNCi0gICAgR3BCaXRtYXAgKmJpdG1hcCA9IE5VTEw7DQotDQotICAgIGlmKHVzZUVtYmVkZGVkQ29sb3JNYW5hZ2VtZW50KQ0KLSAgICB7DQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUJpdG1hcEZyb21TdHJlYW1JQ00oc3RyZWFtLCAmYml0bWFwKTsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlQml0bWFwRnJvbVN0cmVhbShzdHJlYW0sICZiaXRtYXApOw0KLSAgICB9DQotDQotICAgIFNldE5hdGl2ZUltYWdlKGJpdG1hcCk7DQotfQ0KLQ0KLWlubGluZQ0KLUJpdG1hcDo6Qml0bWFwKA0KLSAgICBJTiBJTlQgd2lkdGgsDQotICAgIElOIElOVCBoZWlnaHQsDQotICAgIElOIElOVCBzdHJpZGUsDQotICAgIElOIFBpeGVsRm9ybWF0IGZvcm1hdCwNCi0gICAgSU4gQllURSAqc2NhbjANCi0gICAgKQ0KLXsNCi0gICAgR3BCaXRtYXAgKmJpdG1hcCA9IE5VTEw7DQotDQotICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlQml0bWFwRnJvbVNjYW4wKHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlkZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuMCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJpdG1hcCk7DQotDQotICAgIFNldE5hdGl2ZUltYWdlKGJpdG1hcCk7DQotfQ0KLQ0KLWlubGluZSANCi1CaXRtYXA6OkJpdG1hcCgNCi0gICAgSU4gSU5UIHdpZHRoLA0KLSAgICBJTiBJTlQgaGVpZ2h0LA0KLSAgICBJTiBQaXhlbEZvcm1hdCBmb3JtYXQNCi0gICAgKQ0KLXsNCi0gICAgR3BCaXRtYXAgKmJpdG1hcCA9IE5VTEw7DQotDQotICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlQml0bWFwRnJvbVNjYW4wKHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJpdG1hcCk7DQotDQotICAgIFNldE5hdGl2ZUltYWdlKGJpdG1hcCk7DQotfQ0KLQ0KLWlubGluZQ0KLUJpdG1hcDo6Qml0bWFwKA0KLSAgICBJTiBJTlQgd2lkdGgsIA0KLSAgICBJTiBJTlQgaGVpZ2h0LCANCi0gICAgSU4gR3JhcGhpY3MqIHRhcmdldCkNCi17DQotICAgIEdwQml0bWFwICpiaXRtYXAgPSBOVUxMOw0KLQ0KLSAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUJpdG1hcEZyb21HcmFwaGljcyh3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPm5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYml0bWFwKTsNCi0NCi0gICAgU2V0TmF0aXZlSW1hZ2UoYml0bWFwKTsNCi19DQotDQotaW5saW5lIA0KLUJpdG1hcDo6Qml0bWFwKA0KLSAgICBJTiBJRGlyZWN0RHJhd1N1cmZhY2U3ICogc3VyZmFjZQ0KLSAgICApDQotew0KLSAgICBHcEJpdG1hcCAqYml0bWFwID0gTlVMTDsNCi0NCi0gICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVCaXRtYXBGcm9tRGlyZWN0RHJhd1N1cmZhY2Uoc3VyZmFjZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJpdG1hcCk7DQotDQotICAgIFNldE5hdGl2ZUltYWdlKGJpdG1hcCk7DQotfQ0KLQ0KLWlubGluZSANCi1CaXRtYXA6OkJpdG1hcCgNCi0gICAgSU4gY29uc3QgQklUTUFQSU5GTyogZ2RpQml0bWFwSW5mbywgDQotICAgIElOIFZPSUQqIGdkaUJpdG1hcERhdGENCi0gICAgKQ0KLXsNCi0gICAgR3BCaXRtYXAgKmJpdG1hcCA9IE5VTEw7DQotDQotICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlQml0bWFwRnJvbUdkaURpYihnZGlCaXRtYXBJbmZvLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RpQml0bWFwRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiaXRtYXApOw0KLQ0KLSAgICBTZXROYXRpdmVJbWFnZShiaXRtYXApOw0KLX0NCi0NCi1pbmxpbmUgDQotQml0bWFwOjpCaXRtYXAoDQotICAgIElOIEhCSVRNQVAgaGJtLCANCi0gICAgSU4gSFBBTEVUVEUgaHBhbA0KLSAgICApDQotew0KLSAgICBHcEJpdG1hcCAqYml0bWFwID0gTlVMTDsNCi0NCi0gICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVCaXRtYXBGcm9tSEJJVE1BUChoYm0sIGhwYWwsICZiaXRtYXApOw0KLQ0KLSAgICBTZXROYXRpdmVJbWFnZShiaXRtYXApOw0KLX0NCi0NCi1pbmxpbmUgDQotQml0bWFwOjpCaXRtYXAoDQotICAgIElOIEhJQ09OIGhpY29uDQotICAgICkNCi17DQotICAgIEdwQml0bWFwICpiaXRtYXAgPSBOVUxMOw0KLQ0KLSAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUJpdG1hcEZyb21ISUNPTihoaWNvbiwgJmJpdG1hcCk7DQotDQotICAgIFNldE5hdGl2ZUltYWdlKGJpdG1hcCk7DQotfQ0KLQ0KLWlubGluZSANCi1CaXRtYXA6OkJpdG1hcCgNCi0gICAgSU4gSElOU1RBTkNFIGhJbnN0YW5jZSwgDQotICAgIElOIGNvbnN0IFdDSEFSICpiaXRtYXBOYW1lDQotICAgICkNCi17DQotICAgIEdwQml0bWFwICpiaXRtYXAgPSBOVUxMOw0KLQ0KLSAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUJpdG1hcEZyb21SZXNvdXJjZShoSW5zdGFuY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcE5hbWUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiaXRtYXApOw0KLQ0KLSAgICBTZXROYXRpdmVJbWFnZShiaXRtYXApOw0KLX0NCi0NCi0NCi1pbmxpbmUgQml0bWFwKiANCi1CaXRtYXA6OkZyb21GaWxlKA0KLSAgICBJTiBjb25zdCBXQ0hBUiAqZmlsZW5hbWUsDQotICAgIElOIEJPT0wgdXNlRW1iZWRkZWRDb2xvck1hbmFnZW1lbnQNCi0gICAgKQ0KLXsNCi0gICAgcmV0dXJuIG5ldyBCaXRtYXAoDQotICAgICAgICBmaWxlbmFtZSwgDQotICAgICAgICB1c2VFbWJlZGRlZENvbG9yTWFuYWdlbWVudA0KLSAgICApOw0KLX0NCi0NCi1pbmxpbmUgQml0bWFwKiANCi1CaXRtYXA6OkZyb21TdHJlYW0oDQotICAgIElOIElTdHJlYW0gKnN0cmVhbSwNCi0gICAgSU4gQk9PTCB1c2VFbWJlZGRlZENvbG9yTWFuYWdlbWVudA0KLSAgICApDQotew0KLSAgICByZXR1cm4gbmV3IEJpdG1hcCgNCi0gICAgICAgIHN0cmVhbSwgDQotICAgICAgICB1c2VFbWJlZGRlZENvbG9yTWFuYWdlbWVudA0KLSAgICApOw0KLX0NCi0NCi1pbmxpbmUgQml0bWFwKiANCi1CaXRtYXA6OkZyb21EaXJlY3REcmF3U3VyZmFjZTcoDQotICAgIElOIElEaXJlY3REcmF3U3VyZmFjZTcqIHN1cmZhY2UNCi0gICAgKQ0KLXsNCi0gICAgcmV0dXJuIG5ldyBCaXRtYXAoc3VyZmFjZSk7DQotfQ0KLQ0KLWlubGluZSBCaXRtYXAqIA0KLUJpdG1hcDo6RnJvbUJJVE1BUElORk8oDQotICAgIElOIGNvbnN0IEJJVE1BUElORk8qIGdkaUJpdG1hcEluZm8sIA0KLSAgICBJTiBWT0lEKiBnZGlCaXRtYXBEYXRhKQ0KLXsNCi0gICAgcmV0dXJuIG5ldyBCaXRtYXAoZ2RpQml0bWFwSW5mbywgZ2RpQml0bWFwRGF0YSk7DQotfQ0KLQ0KLWlubGluZSBCaXRtYXAqIA0KLUJpdG1hcDo6RnJvbUhCSVRNQVAoDQotICAgIElOIEhCSVRNQVAgaGJtLCANCi0gICAgSU4gSFBBTEVUVEUgaHBhbA0KLSAgICApDQotew0KLSAgICByZXR1cm4gbmV3IEJpdG1hcChoYm0sIGhwYWwpOw0KLX0NCi0NCi1pbmxpbmUgQml0bWFwKiANCi1CaXRtYXA6OkZyb21ISUNPTigNCi0gICAgSU4gSElDT04gaGljb24NCi0gICAgKQ0KLXsNCi0gICAgcmV0dXJuIG5ldyBCaXRtYXAoaGljb24pOw0KLX0NCi0NCi1pbmxpbmUgQml0bWFwKiANCi1CaXRtYXA6OkZyb21SZXNvdXJjZSgNCi0gICAgSU4gSElOU1RBTkNFIGhJbnN0YW5jZSwgDQotICAgIElOIGNvbnN0IFdDSEFSICpiaXRtYXBOYW1lKQ0KLXsNCi0gICAgcmV0dXJuIG5ldyBCaXRtYXAoaEluc3RhbmNlLCBiaXRtYXBOYW1lKTsNCi19DQotDQotaW5saW5lIFN0YXR1cyANCi1CaXRtYXA6OkdldEhCSVRNQVAoDQotICAgIElOIGNvbnN0IENvbG9yJiBjb2xvckJhY2tncm91bmQsDQotICAgIE9VVCBIQklUTUFQKiBoYm1SZXR1cm4NCi0gICAgKQ0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlSEJJVE1BUEZyb21CaXRtYXAoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdwQml0bWFwKj4obmF0aXZlSW1hZ2UpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYm1SZXR1cm4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yQmFja2dyb3VuZC5HZXRWYWx1ZSgpKSk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotQml0bWFwOjpHZXRISUNPTigNCi0gICAgT1VUIEhJQ09OKiBoaWNvblJldHVybg0KLSAgICApDQotew0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDcmVhdGVISUNPTkZyb21CaXRtYXAoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdwQml0bWFwKj4obmF0aXZlSW1hZ2UpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWNvblJldHVybikpOw0KLX0NCi0NCi1pbmxpbmUgQml0bWFwKiANCi1CaXRtYXA6OkNsb25lKA0KLSAgICBJTiBjb25zdCBSZWN0JiByZWN0LA0KLSAgICBJTiBQaXhlbEZvcm1hdCBmb3JtYXQNCi0gICAgKQ0KLXsNCi0gICAgcmV0dXJuIENsb25lKHJlY3QuWCwgcmVjdC5ZLCByZWN0LldpZHRoLCByZWN0LkhlaWdodCwgZm9ybWF0KTsNCi19DQotDQotaW5saW5lIEJpdG1hcCogDQotQml0bWFwOjpDbG9uZSgNCi0gICAgSU4gSU5UIHgsDQotICAgIElOIElOVCB5LA0KLSAgICBJTiBJTlQgd2lkdGgsDQotICAgIElOIElOVCBoZWlnaHQsDQotICAgIElOIFBpeGVsRm9ybWF0IGZvcm1hdA0KLSAgICApDQotew0KLSAgIEdwQml0bWFwKiBncGRzdEJpdG1hcCA9IE5VTEw7DQotICAgQml0bWFwKiBiaXRtYXA7DQotDQotICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDbG9uZUJpdG1hcEFyZWFJKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHcEJpdG1hcCAqKW5hdGl2ZUltYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ3Bkc3RCaXRtYXApOw0KLQ0KLSAgIGlmIChsYXN0UmVzdWx0ID09IE9rKQ0KLSAgIHsNCi0gICAgICAgYml0bWFwID0gbmV3IEJpdG1hcChncGRzdEJpdG1hcCk7DQotDQotICAgICAgIGlmIChiaXRtYXAgPT0gTlVMTCkgDQotICAgICAgIHsNCi0gICAgICAgICAgIERsbEV4cG9ydHM6OkdkaXBEaXNwb3NlSW1hZ2UoZ3Bkc3RCaXRtYXApOw0KLSAgICAgICB9DQotDQotICAgICAgIHJldHVybiBiaXRtYXA7DQotICAgfQ0KLSAgIGVsc2UNCi0gICAgICAgcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLWlubGluZSBCaXRtYXAqIA0KLUJpdG1hcDo6Q2xvbmUoDQotICAgIElOIGNvbnN0IFJlY3RGJiByZWN0LA0KLSAgICBJTiBQaXhlbEZvcm1hdCBmb3JtYXQNCi0gICAgKQ0KLXsNCi0gICAgcmV0dXJuIENsb25lKHJlY3QuWCwgcmVjdC5ZLCByZWN0LldpZHRoLCByZWN0LkhlaWdodCwgZm9ybWF0KTsNCi19DQotDQotaW5saW5lIEJpdG1hcCoNCi1CaXRtYXA6OkNsb25lKA0KLSAgICBJTiBSRUFMIHgsDQotICAgIElOIFJFQUwgeSwNCi0gICAgSU4gUkVBTCB3aWR0aCwNCi0gICAgSU4gUkVBTCBoZWlnaHQsDQotICAgIElOIFBpeGVsRm9ybWF0IGZvcm1hdA0KLSAgICApDQotew0KLSAgIEdwQml0bWFwKiBncGRzdEJpdG1hcCA9IE5VTEw7DQotICAgQml0bWFwKiBiaXRtYXA7DQotDQotICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDbG9uZUJpdG1hcEFyZWEoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwQml0bWFwICopbmF0aXZlSW1hZ2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZncGRzdEJpdG1hcCkpOw0KLQ0KLSAgIGlmIChsYXN0UmVzdWx0ID09IE9rKQ0KLSAgIHsNCi0gICAgICAgYml0bWFwID0gbmV3IEJpdG1hcChncGRzdEJpdG1hcCk7DQotDQotICAgICAgIGlmIChiaXRtYXAgPT0gTlVMTCkgDQotICAgICAgIHsNCi0gICAgICAgICAgIERsbEV4cG9ydHM6OkdkaXBEaXNwb3NlSW1hZ2UoZ3Bkc3RCaXRtYXApOw0KLSAgICAgICB9DQotDQotICAgICAgIHJldHVybiBiaXRtYXA7DQotICAgfQ0KLSAgIGVsc2UNCi0gICAgICAgcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLWlubGluZSBCaXRtYXA6OkJpdG1hcChHcEJpdG1hcCAqbmF0aXZlQml0bWFwKQ0KLXsNCi0gICAgbGFzdFJlc3VsdCA9IE9rOw0KLQ0KLSAgICBTZXROYXRpdmVJbWFnZShuYXRpdmVCaXRtYXApOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzDQotQml0bWFwOjpMb2NrQml0cygNCi0gICAgSU4gY29uc3QgUmVjdCYgcmVjdCwNCi0gICAgSU4gVUlOVCBmbGFncywNCi0gICAgSU4gUGl4ZWxGb3JtYXQgZm9ybWF0LA0KLSAgICBPVVQgQml0bWFwRGF0YSogbG9ja2VkQml0bWFwRGF0YQ0KLSkNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEJpdG1hcExvY2tCaXRzKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdwQml0bWFwKj4obmF0aXZlSW1hZ2UpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZWN0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZWRCaXRtYXBEYXRhKSk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotQml0bWFwOjpVbmxvY2tCaXRzKA0KLSAgICBJTiBCaXRtYXBEYXRhKiBsb2NrZWRCaXRtYXBEYXRhDQotICAgICkNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEJpdG1hcFVubG9ja0JpdHMoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R3BCaXRtYXAqPihuYXRpdmVJbWFnZSksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VkQml0bWFwRGF0YSkpOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzIA0KLUJpdG1hcDo6R2V0UGl4ZWwoDQotICAgIElOIElOVCB4LCANCi0gICAgSU4gSU5UIHksIA0KLSAgICBPVVQgQ29sb3IgKmNvbG9yKSANCi17DQotICAgIEFSR0IgYXJnYjsNCi0NCi0gICAgU3RhdHVzIHN0YXR1cyA9IFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQml0bWFwR2V0UGl4ZWwoDQotICAgICAgICBzdGF0aWNfY2FzdDxHcEJpdG1hcCAqPihuYXRpdmVJbWFnZSksDQotICAgICAgICB4LCB5LCAgICAgICAgDQotICAgICAgICAmYXJnYikpOw0KLQ0KLSAgICBpZiAoc3RhdHVzID09IE9rKSANCi0gICAgew0KLSAgICAgICAgY29sb3ItPlNldFZhbHVlKGFyZ2IpOw0KLSAgICB9DQotDQotICAgIHJldHVybiAgc3RhdHVzOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzIA0KLUJpdG1hcDo6U2V0UGl4ZWwoDQotICAgIElOIElOVCB4LCANCi0gICAgSU4gSU5UIHksIA0KLSAgICBJTiBjb25zdCBDb2xvciYgY29sb3IpIA0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQml0bWFwU2V0UGl4ZWwoDQotICAgICAgICBzdGF0aWNfY2FzdDxHcEJpdG1hcCAqPihuYXRpdmVJbWFnZSksDQotICAgICAgICB4LCB5LA0KLSAgICAgICAgY29sb3IuR2V0VmFsdWUoKSkpOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzIA0KLUJpdG1hcDo6U2V0UmVzb2x1dGlvbigNCi0gICAgSU4gUkVBTCB4ZHBpLCANCi0gICAgSU4gUkVBTCB5ZHBpKQ0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQml0bWFwU2V0UmVzb2x1dGlvbigNCi0gICAgICAgIHN0YXRpY19jYXN0PEdwQml0bWFwICo+KG5hdGl2ZUltYWdlKSwNCi0gICAgICAgIHhkcGksIHlkcGkpKTsNCi19DQotI2VuZGlmDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKgorKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwgTWljcm9zb2Z0IENvcnAuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKiBNb2R1bGUgTmFtZToKKyoKKyogICBHZGlwbHVzQml0bWFwLmgKKyoKKyogQWJzdHJhY3Q6CisqCisqICAgQml0bWFwIHJlbGF0ZWQgZGVjbGFyYXRpb25zCisqCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0dESVBMVVNCSVRNQVBfSAorI2RlZmluZSBfR0RJUExVU0JJVE1BUF9ICisKKy8vIE5PVEU6CisvLyAgT3VyIGN1cnJlbnQgY2hvaWNlIGZvciB0aGUgcHVibGljIEFQSSBpcyB0byB1c2UgY29uc3RydWN0b3JzCisvLyAgaW5zdGVhZCBvZiBzdGF0aWMgbG9hZCBmdW5jdGlvbnMgdG8gY3JlYXRlIGltYWdlIG9iamVjdHMuCisvLworLy8gIEkndmUga2VwdCB0aGUgc3RhdGljIGxvYWQgZnVuY3Rpb25zIGhlcmUgZm9yIG5vdyBzbyB0aGF0CisvLyAgZXhpc3RpbmcgdGVzdCBwcm9ncmFtcyBhcmUgbm90IGJyb2tlbi4gQnV0IHRoZXkgc2hvdWxkCisvLyAgZXZlbnR1YWxseSBiZSB0YWtlbiBvdXQuCisKKyNpZm5kZWYgRENSX1VTRV9ORVdfMTQwNzgyCisKK2lubGluZSAKK0ltYWdlOjpJbWFnZSgKKyAgICBJTiBjb25zdCBXQ0hBUiogZmlsZW5hbWUKKyAgICApCit7CisgICAgbmF0aXZlSW1hZ2UgPSBOVUxMOworICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwTG9hZEltYWdlRnJvbUZpbGUoZmlsZW5hbWUsICZuYXRpdmVJbWFnZSk7Cit9CisKK2lubGluZSAKK0ltYWdlOjpJbWFnZSgKKyAgICBJTiBJU3RyZWFtKiBzdHJlYW0KKyAgICApCit7CisgICAgbmF0aXZlSW1hZ2UgPSBOVUxMOworICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwTG9hZEltYWdlRnJvbVN0cmVhbShzdHJlYW0sICZuYXRpdmVJbWFnZSk7Cit9CisKK2lubGluZSBJbWFnZSogCitJbWFnZTo6RnJvbUZpbGUoCisgICAgSU4gY29uc3QgV0NIQVIqIGZpbGVuYW1lCisgICAgKQoreworICAgIHJldHVybiBuZXcgSW1hZ2UoZmlsZW5hbWUpOworfQorCitpbmxpbmUgSW1hZ2UqCitJbWFnZTo6RnJvbVN0cmVhbSgKKyAgICBJTiBJU3RyZWFtKiBzdHJlYW0KKyAgICApCit7CisgICAgcmV0dXJuIG5ldyBJbWFnZShzdHJlYW0pOworfQorCisjZWxzZQorCitpbmxpbmUgCitJbWFnZTo6SW1hZ2UoCisgICAgSU4gY29uc3QgV0NIQVIqIGZpbGVuYW1lLAorICAgIElOIEJPT0wgdXNlRW1iZWRkZWRDb2xvck1hbmFnZW1lbnQKKyAgICApCit7CisgICAgbmF0aXZlSW1hZ2UgPSBOVUxMOworICAgIGlmKHVzZUVtYmVkZGVkQ29sb3JNYW5hZ2VtZW50KQorICAgIHsKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBMb2FkSW1hZ2VGcm9tRmlsZUlDTSgKKyAgICAgICAgICAgIGZpbGVuYW1lLCAKKyAgICAgICAgICAgICZuYXRpdmVJbWFnZQorICAgICAgICApOworICAgIH0KKyAgICBlbHNlCisgICAgeyAgICAgIAorICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcExvYWRJbWFnZUZyb21GaWxlKAorICAgICAgICAgICAgZmlsZW5hbWUsIAorICAgICAgICAgICAgJm5hdGl2ZUltYWdlCisgICAgICAgICk7CisgICAgfQorfQorCitpbmxpbmUgCitJbWFnZTo6SW1hZ2UoCisgICAgSU4gSVN0cmVhbSogc3RyZWFtLAorICAgIElOIEJPT0wgdXNlRW1iZWRkZWRDb2xvck1hbmFnZW1lbnQKKyAgICApCit7CisgICAgbmF0aXZlSW1hZ2UgPSBOVUxMOworICAgIGlmKHVzZUVtYmVkZGVkQ29sb3JNYW5hZ2VtZW50KQorICAgIHsKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBMb2FkSW1hZ2VGcm9tU3RyZWFtSUNNKAorICAgICAgICAgICAgc3RyZWFtLCAKKyAgICAgICAgICAgICZuYXRpdmVJbWFnZQorICAgICAgICApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcExvYWRJbWFnZUZyb21TdHJlYW0oCisgICAgICAgICAgICBzdHJlYW0sIAorICAgICAgICAgICAgJm5hdGl2ZUltYWdlCisgICAgICAgICk7CisgICAgfQorfQorCitpbmxpbmUgSW1hZ2UqIAorSW1hZ2U6OkZyb21GaWxlKAorICAgIElOIGNvbnN0IFdDSEFSKiBmaWxlbmFtZSwKKyAgICBJTiBCT09MIHVzZUVtYmVkZGVkQ29sb3JNYW5hZ2VtZW50CisgICAgKQoreworICAgIHJldHVybiBuZXcgSW1hZ2UoCisgICAgICAgIGZpbGVuYW1lLCAKKyAgICAgICAgdXNlRW1iZWRkZWRDb2xvck1hbmFnZW1lbnQKKyAgICApOworfQorCitpbmxpbmUgSW1hZ2UqCitJbWFnZTo6RnJvbVN0cmVhbSgKKyAgICBJTiBJU3RyZWFtKiBzdHJlYW0sCisgICAgSU4gQk9PTCB1c2VFbWJlZGRlZENvbG9yTWFuYWdlbWVudAorICAgICkKK3sKKyAgICByZXR1cm4gbmV3IEltYWdlKAorICAgICAgICBzdHJlYW0sCisgICAgICAgIHVzZUVtYmVkZGVkQ29sb3JNYW5hZ2VtZW50CisgICAgKTsKK30KKworI2VuZGlmCisKK2lubGluZSAKK0ltYWdlOjp+SW1hZ2UoKQoreworICAgIERsbEV4cG9ydHM6OkdkaXBEaXNwb3NlSW1hZ2UobmF0aXZlSW1hZ2UpOworfQorCitpbmxpbmUgSW1hZ2UqIAorSW1hZ2U6OkNsb25lKCkgCit7CisgICAgR3BJbWFnZSAqY2xvbmVpbWFnZSA9IE5VTEw7CisKKyAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENsb25lSW1hZ2UobmF0aXZlSW1hZ2UsICZjbG9uZWltYWdlKSk7CisKKyAgICByZXR1cm4gbmV3IEltYWdlKGNsb25laW1hZ2UsIGxhc3RSZXN1bHQpOworfQorCisvLyBFbmNvcmRlciBQYXJhbWV0ZXIKKworaW5saW5lIFVJTlQKK0ltYWdlOjpHZXRFbmNvZGVyUGFyYW1ldGVyTGlzdFNpemUoCisgICAgSU4gY29uc3QgQ0xTSUQqIGNsc2lkRW5jb2RlcgorICAgICkgCit7CisgICAgVUlOVCBzaXplID0gMDsKKworICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0RW5jb2RlclBhcmFtZXRlckxpc3RTaXplKG5hdGl2ZUltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsc2lkRW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2l6ZSkpOworICAgIHJldHVybiBzaXplOworfQorCitpbmxpbmUgU3RhdHVzCitJbWFnZTo6R2V0RW5jb2RlclBhcmFtZXRlckxpc3QoCisgICAgSU4gY29uc3QgQ0xTSUQqIGNsc2lkRW5jb2RlciwKKyAgICBJTiBVSU5UIHNpemUsCisgICAgT1VUIEVuY29kZXJQYXJhbWV0ZXJzKiBidWZmZXIKKyAgICApCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0RW5jb2RlclBhcmFtZXRlckxpc3QobmF0aXZlSW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzaWRFbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyKSk7Cit9CisKKy8vIFNhdmUgaW1hZ2VzCisKK2lubGluZSBTdGF0dXMKK0ltYWdlOjpTYXZlKAorICAgIElOIGNvbnN0IFdDSEFSKiBmaWxlbmFtZSwKKyAgICBJTiBjb25zdCBDTFNJRCogY2xzaWRFbmNvZGVyLAorICAgIElOIGNvbnN0IEVuY29kZXJQYXJhbWV0ZXJzICplbmNvZGVyUGFyYW1zCisgICAgKQoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNhdmVJbWFnZVRvRmlsZShuYXRpdmVJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsc2lkRW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlclBhcmFtcykpOworfQorCitpbmxpbmUgU3RhdHVzCitJbWFnZTo6U2F2ZSgKKyAgICBJTiBJU3RyZWFtKiBzdHJlYW0sCisgICAgSU4gY29uc3QgQ0xTSUQqIGNsc2lkRW5jb2RlciwKKyAgICBJTiBjb25zdCBFbmNvZGVyUGFyYW1ldGVycyAqZW5jb2RlclBhcmFtcworICAgICkKK3sKKyAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTYXZlSW1hZ2VUb1N0cmVhbShuYXRpdmVJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzaWRFbmNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZXJQYXJhbXMpKTsKK30KKworaW5saW5lIFN0YXR1cworSW1hZ2U6OlNhdmVBZGQoCisgICAgSU4gY29uc3QgRW5jb2RlclBhcmFtZXRlcnMgKmVuY29kZXJQYXJhbXMKKyAgICApCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2F2ZUFkZChuYXRpdmVJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZXJQYXJhbXMpKTsKK30KKworaW5saW5lIFN0YXR1cworSW1hZ2U6OlNhdmVBZGQoCisgICAgSU4gSW1hZ2UqIG5ld0ltYWdlLAorICAgIElOIGNvbnN0IEVuY29kZXJQYXJhbWV0ZXJzICplbmNvZGVyUGFyYW1zCisgICAgKQoreworICAgIGlmICggbmV3SW1hZ2UgPT0gTlVMTCApCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKEludmFsaWRQYXJhbWV0ZXIpOworICAgIH0KKworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNhdmVBZGRJbWFnZShuYXRpdmVJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW1hZ2UtPm5hdGl2ZUltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVyUGFyYW1zKSk7Cit9CisKKy8vIEdldCBzaXplIGFuZCB0eXBlIGluZm9ybWF0aW9uCitpbmxpbmUgSW1hZ2VUeXBlIAorSW1hZ2U6OkdldFR5cGUoKSBjb25zdAoreworICAgIEltYWdlVHlwZSB0eXBlID0gSW1hZ2VUeXBlVW5rbm93bjsKKworICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0SW1hZ2VUeXBlKG5hdGl2ZUltYWdlLCAmdHlwZSkpOworCisgICAgcmV0dXJuIHR5cGU7Cit9CisKK2lubGluZSBTdGF0dXMgCitJbWFnZTo6R2V0UGh5c2ljYWxEaW1lbnNpb24oCisgICAgT1VUIFNpemVGKiBzaXplCisgICAgKSAKK3sKKyAgICBpZiAoc2l6ZSA9PSBOVUxMKSAKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7CisgICAgfQorICAgIAorICAgIFJFQUwgd2lkdGgsIGhlaWdodDsKKyAgICBTdGF0dXMgc3RhdHVzOworCisgICAgc3RhdHVzID0gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRJbWFnZURpbWVuc2lvbihuYXRpdmVJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3aWR0aCwgJmhlaWdodCkpOworCisgICAgc2l6ZS0+V2lkdGggID0gd2lkdGg7CisgICAgc2l6ZS0+SGVpZ2h0ID0gaGVpZ2h0OworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworaW5saW5lIFN0YXR1cyAKK0ltYWdlOjpHZXRCb3VuZHMoCisgICAgT1VUIFJlY3RGICpzcmNSZWN0LCAKKyAgICBPVVQgVW5pdCAqc3JjVW5pdAorICAgICkKK3sKKyAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRJbWFnZUJvdW5kcyhuYXRpdmVJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNSZWN0LCBzcmNVbml0KSk7Cit9CisKK2lubGluZSBVSU5UIAorSW1hZ2U6OkdldFdpZHRoKCkKK3sKKyAgICBVSU5UIHdpZHRoID0gMDsKKworICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0SW1hZ2VXaWR0aChuYXRpdmVJbWFnZSwgJndpZHRoKSk7CisKKyAgICByZXR1cm4gd2lkdGg7Cit9CisKK2lubGluZSBVSU5UIAorSW1hZ2U6OkdldEhlaWdodCgpCit7CisgICAgVUlOVCBoZWlnaHQgPSAwOworCisgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRJbWFnZUhlaWdodChuYXRpdmVJbWFnZSwgJmhlaWdodCkpOworCisgICAgcmV0dXJuIGhlaWdodDsKK30KKworaW5saW5lIFJFQUwgCitJbWFnZTo6R2V0SG9yaXpvbnRhbFJlc29sdXRpb24oKQoreworICAgIFJFQUwgcmVzb2x1dGlvbiA9IDAuMGY7CisKKyAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEltYWdlSG9yaXpvbnRhbFJlc29sdXRpb24obmF0aXZlSW1hZ2UsICZyZXNvbHV0aW9uKSk7CisKKyAgICByZXR1cm4gcmVzb2x1dGlvbjsKK30KKworaW5saW5lIFJFQUwgCitJbWFnZTo6R2V0VmVydGljYWxSZXNvbHV0aW9uKCkKK3sKKyAgICBSRUFMIHJlc29sdXRpb24gPSAwLjBmOworCisgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRJbWFnZVZlcnRpY2FsUmVzb2x1dGlvbihuYXRpdmVJbWFnZSwgJnJlc29sdXRpb24pKTsKKworICAgIHJldHVybiByZXNvbHV0aW9uOworfQorCitpbmxpbmUgVUlOVCAKK0ltYWdlOjpHZXRGbGFncygpCit7CisgICAgVUlOVCBmbGFncyA9IDA7CisKKyAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEltYWdlRmxhZ3MobmF0aXZlSW1hZ2UsICZmbGFncykpOworCisgICAgcmV0dXJuIGZsYWdzOworfQorCitpbmxpbmUgU3RhdHVzIAorSW1hZ2U6OkdldFJhd0Zvcm1hdChPVVQgR1VJRCAqZm9ybWF0KQoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEltYWdlUmF3Rm9ybWF0KG5hdGl2ZUltYWdlLCBmb3JtYXQpKTsKK30KKworaW5saW5lIFBpeGVsRm9ybWF0IAorSW1hZ2U6OkdldFBpeGVsRm9ybWF0KCkKK3sKKyAgICBQaXhlbEZvcm1hdCBmb3JtYXQ7CisKKyAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEltYWdlUGl4ZWxGb3JtYXQobmF0aXZlSW1hZ2UsICZmb3JtYXQpKTsKKworICAgIHJldHVybiBmb3JtYXQ7Cit9CisKK2lubGluZSBJTlQgCitJbWFnZTo6R2V0UGFsZXR0ZVNpemUoKQoreworICAgIElOVCBzaXplID0gMDsKKyAgICAKKyAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEltYWdlUGFsZXR0ZVNpemUobmF0aXZlSW1hZ2UsICZzaXplKSk7CisgICAgCisgICAgcmV0dXJuIHNpemU7Cit9CisKK2lubGluZSBTdGF0dXMgCitJbWFnZTo6R2V0UGFsZXR0ZSgKKyAgICBPVVQgQ29sb3JQYWxldHRlICpwYWxldHRlLAorICAgIElOIElOVCBzaXplCispCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0SW1hZ2VQYWxldHRlKG5hdGl2ZUltYWdlLCBwYWxldHRlLCBzaXplKSk7Cit9CisKK2lubGluZSBTdGF0dXMgCitJbWFnZTo6U2V0UGFsZXR0ZSgKKyAgICBJTiBjb25zdCBDb2xvclBhbGV0dGUgKnBhbGV0dGUKKyAgICApCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0SW1hZ2VQYWxldHRlKG5hdGl2ZUltYWdlLCBwYWxldHRlKSk7Cit9CisKKy8vIFRodW1ibmFpbCBzdXBwb3J0CisKK2lubGluZSBJbWFnZSogCitJbWFnZTo6R2V0VGh1bWJuYWlsSW1hZ2UoCisgICAgSU4gVUlOVCB0aHVtYldpZHRoLAorICAgIElOIFVJTlQgdGh1bWJIZWlnaHQsCisgICAgSU4gR2V0VGh1bWJuYWlsSW1hZ2VBYm9ydCBjYWxsYmFjaywKKyAgICBJTiBWT0lEKiBjYWxsYmFja0RhdGEKKyAgICApCit7CisgICAgR3BJbWFnZSAqdGh1bWJpbWFnZSA9IE5VTEw7CisKKyAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEltYWdlVGh1bWJuYWlsKG5hdGl2ZUltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGh1bWJXaWR0aCwgdGh1bWJIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGh1bWJpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLCBjYWxsYmFja0RhdGEpKTsKKworICAgIEltYWdlICpuZXdJbWFnZSA9IG5ldyBJbWFnZSh0aHVtYmltYWdlLCBsYXN0UmVzdWx0KTsKKworICAgIGlmIChuZXdJbWFnZSA9PSBOVUxMKSAKKyAgICB7CisgICAgICAgIERsbEV4cG9ydHM6OkdkaXBEaXNwb3NlSW1hZ2UodGh1bWJpbWFnZSk7CisgICAgfQorCisgICAgcmV0dXJuIG5ld0ltYWdlOworfQorCisvLyBNdWx0aS1mcmFtZSBzdXBwb3J0CitpbmxpbmUgVUlOVCAKK0ltYWdlOjpHZXRGcmFtZURpbWVuc2lvbnNDb3VudCgpCit7CisgICAgVUlOVCBjb3VudCA9IDA7CisKKyAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEltYWdlR2V0RnJhbWVEaW1lbnNpb25zQ291bnQobmF0aXZlSW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY291bnQpKTsKKworICAgIHJldHVybiBjb3VudDsKK30KKworaW5saW5lIFN0YXR1cyAKK0ltYWdlOjpHZXRGcmFtZURpbWVuc2lvbnNMaXN0KAorICAgIE9VVCBHVUlEKiBkaW1lbnNpb25JRHMsIAorICAgIElOIFVJTlQgY291bnQKKyAgICApCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSW1hZ2VHZXRGcmFtZURpbWVuc2lvbnNMaXN0KG5hdGl2ZUltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaW1lbnNpb25JRHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7Cit9CisKK2lubGluZSBVSU5UIAorSW1hZ2U6OkdldEZyYW1lQ291bnQoCisgICAgSU4gY29uc3QgR1VJRCogZGltZW5zaW9uSUQKKyAgICApCit7CisgICAgVUlOVCBjb3VudCA9IDA7CisKKyAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEltYWdlR2V0RnJhbWVDb3VudChuYXRpdmVJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltZW5zaW9uSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb3VudCkpOworICAgIHJldHVybiBjb3VudDsKK30KKworaW5saW5lIFN0YXR1cyAKK0ltYWdlOjpTZWxlY3RBY3RpdmVGcmFtZSgKKyAgICBJTiBjb25zdCBHVUlEICpkaW1lbnNpb25JRCwgCisgICAgSU4gVUlOVCBmcmFtZUluZGV4CisgICAgKQoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEltYWdlU2VsZWN0QWN0aXZlRnJhbWUobmF0aXZlSW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaW1lbnNpb25JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lSW5kZXgpKTsKK30KKworaW5saW5lIFN0YXR1cworSW1hZ2U6OlJvdGF0ZUZsaXAoCisgICAgSU4gUm90YXRlRmxpcFR5cGUgcm90YXRlRmxpcFR5cGUKKyAgICApCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSW1hZ2VSb3RhdGVGbGlwKG5hdGl2ZUltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVGbGlwVHlwZSkpOworfQorCisvLyBJbWFnZSBwcm9wZXJ0eSByZWxhdGVkIGZ1bmN0aW9ucworCitpbmxpbmUgVUlOVCAKK0ltYWdlOjpHZXRQcm9wZXJ0eUNvdW50KCkKK3sKKyAgICBVSU5UIG51bVByb3BlcnR5ID0gMDsKKworICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UHJvcGVydHlDb3VudChuYXRpdmVJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm51bVByb3BlcnR5KSk7CisKKyAgICByZXR1cm4gbnVtUHJvcGVydHk7Cit9CisKK2lubGluZSBTdGF0dXMgCitJbWFnZTo6R2V0UHJvcGVydHlJZExpc3QoCisgICAgSU4gVUlOVCBudW1PZlByb3BlcnR5LCAKKyAgICBPVVQgUFJPUElEKiBsaXN0CisgICAgKQoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFByb3BlcnR5SWRMaXN0KG5hdGl2ZUltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bU9mUHJvcGVydHksIGxpc3QpKTsKK30KKyAgICAKK2lubGluZSBVSU5UIAorSW1hZ2U6OkdldFByb3BlcnR5SXRlbVNpemUoCisgICAgSU4gUFJPUElEIHByb3BJZAorICAgICkKK3sKKyAgICBVSU5UIHNpemUgPSAwOworCisgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQcm9wZXJ0eUl0ZW1TaXplKG5hdGl2ZUltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wSWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaXplKSk7CisKKyAgICByZXR1cm4gc2l6ZTsKK30KKworaW5saW5lIFN0YXR1cyAKK0ltYWdlOjpHZXRQcm9wZXJ0eUl0ZW0oCisgICAgSU4gUFJPUElEIHByb3BJZCwgCisgICAgSU4gVUlOVCBwcm9wU2l6ZSwKKyAgICBPVVQgUHJvcGVydHlJdGVtKiBidWZmZXIKKyAgICApCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UHJvcGVydHlJdGVtKG5hdGl2ZUltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wSWQsIHByb3BTaXplLCBidWZmZXIpKTsKK30KKworaW5saW5lIFN0YXR1cyAKK0ltYWdlOjpHZXRQcm9wZXJ0eVNpemUoCisgICAgT1VUIFVJTlQqIHRvdGFsQnVmZmVyU2l6ZSwgCisgICAgT1VUIFVJTlQqIG51bVByb3BlcnRpZXMKKyAgICApCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UHJvcGVydHlTaXplKG5hdGl2ZUltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEJ1ZmZlclNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVByb3BlcnRpZXMpKTsKK30KKworaW5saW5lIFN0YXR1cyAKK0ltYWdlOjpHZXRBbGxQcm9wZXJ0eUl0ZW1zKAorICAgIElOIFVJTlQgdG90YWxCdWZmZXJTaXplLAorICAgIElOIFVJTlQgbnVtUHJvcGVydGllcywKKyAgICBPVVQgUHJvcGVydHlJdGVtKiBhbGxJdGVtcworICAgICkKK3sKKyAgICBpZiAoYWxsSXRlbXMgPT0gTlVMTCkgCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKEludmFsaWRQYXJhbWV0ZXIpOworICAgIH0KKyAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRBbGxQcm9wZXJ0eUl0ZW1zKG5hdGl2ZUltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxCdWZmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtUHJvcGVydGllcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbEl0ZW1zKSk7Cit9CisKK2lubGluZSBTdGF0dXMgCitJbWFnZTo6UmVtb3ZlUHJvcGVydHlJdGVtKAorICAgIElOIFBST1BJRCBwcm9wSWQKKyAgICApCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUmVtb3ZlUHJvcGVydHlJdGVtKG5hdGl2ZUltYWdlLCBwcm9wSWQpKTsKK30KKworaW5saW5lIFN0YXR1cyAKK0ltYWdlOjpTZXRQcm9wZXJ0eUl0ZW0oCisgICAgSU4gY29uc3QgUHJvcGVydHlJdGVtKiBpdGVtCisgICAgKQoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFByb3BlcnR5SXRlbShuYXRpdmVJbWFnZSwgaXRlbSkpOworfQorCisvLyBHZXQvU2V0TGF5b3V0CisvLyBTdXBwb3J0IGZvciBNaWRkbGUgRWFzdCBsb2NhbGl6YXRpb24gKHJpZ2h0LXRvLWxlZnQgbWlycm9yaW5nKQorCitpbmxpbmUgSW1hZ2VMYXlvdXQKK0ltYWdlOjpHZXRMYXlvdXQoKSBjb25zdAoreworICAgIEltYWdlTGF5b3V0IGxheW91dDsKKworICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0SW1hZ2VMYXlvdXQobmF0aXZlSW1hZ2UsICZsYXlvdXQpKTsKKworICAgIHJldHVybiBsYXlvdXQ7Cit9CisKK2lubGluZSBTdGF0dXMKK0ltYWdlOjpTZXRMYXlvdXQoSU4gY29uc3QgSW1hZ2VMYXlvdXQgbGF5b3V0KQoreworICAgIHJldHVybiBTZXRTdGF0dXMoCisgICAgICAgIERsbEV4cG9ydHM6OkdkaXBTZXRJbWFnZUxheW91dChuYXRpdmVJbWFnZSwgbGF5b3V0KQorICAgICk7Cit9CisKK2lubGluZSBTdGF0dXMKK0ltYWdlOjpHZXRMYXN0U3RhdHVzKCkgY29uc3QKK3sKKyAgICBTdGF0dXMgbGFzdFN0YXR1cyA9IGxhc3RSZXN1bHQ7CisgICAgbGFzdFJlc3VsdCA9IE9rOworCisgICAgcmV0dXJuIGxhc3RTdGF0dXM7Cit9CisKK2lubGluZSAKK0ltYWdlOjpJbWFnZShHcEltYWdlICpuYXRpdmVJbWFnZSwgU3RhdHVzIHN0YXR1cykKK3sKKyAgICBTZXROYXRpdmVJbWFnZShuYXRpdmVJbWFnZSk7CisgICAgbGFzdFJlc3VsdCA9IHN0YXR1czsKK30KKworaW5saW5lIFZPSUQgCitJbWFnZTo6U2V0TmF0aXZlSW1hZ2UoR3BJbWFnZSAqbmF0aXZlSW1hZ2UpCit7CisgICAgdGhpcy0+bmF0aXZlSW1hZ2UgPSBuYXRpdmVJbWFnZTsKK30KKworaW5saW5lIAorQml0bWFwOjpCaXRtYXAoCisgICAgSU4gY29uc3QgV0NIQVIgKmZpbGVuYW1lLCAKKyAgICBJTiBCT09MIHVzZUVtYmVkZGVkQ29sb3JNYW5hZ2VtZW50CisgICAgKQoreworICAgIEdwQml0bWFwICpiaXRtYXAgPSBOVUxMOworCisgICAgaWYodXNlRW1iZWRkZWRDb2xvck1hbmFnZW1lbnQpIAorICAgIHsKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVCaXRtYXBGcm9tRmlsZUlDTShmaWxlbmFtZSwgJmJpdG1hcCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlQml0bWFwRnJvbUZpbGUoZmlsZW5hbWUsICZiaXRtYXApOworICAgIH0KKworICAgIFNldE5hdGl2ZUltYWdlKGJpdG1hcCk7Cit9CisKK2lubGluZSAKK0JpdG1hcDo6Qml0bWFwKAorICAgIElOIElTdHJlYW0gKnN0cmVhbSwgCisgICAgSU4gQk9PTCB1c2VFbWJlZGRlZENvbG9yTWFuYWdlbWVudAorICAgICkKK3sKKyAgICBHcEJpdG1hcCAqYml0bWFwID0gTlVMTDsKKworICAgIGlmKHVzZUVtYmVkZGVkQ29sb3JNYW5hZ2VtZW50KQorICAgIHsKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVCaXRtYXBGcm9tU3RyZWFtSUNNKHN0cmVhbSwgJmJpdG1hcCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlQml0bWFwRnJvbVN0cmVhbShzdHJlYW0sICZiaXRtYXApOworICAgIH0KKworICAgIFNldE5hdGl2ZUltYWdlKGJpdG1hcCk7Cit9CisKK2lubGluZQorQml0bWFwOjpCaXRtYXAoCisgICAgSU4gSU5UIHdpZHRoLAorICAgIElOIElOVCBoZWlnaHQsCisgICAgSU4gSU5UIHN0cmlkZSwKKyAgICBJTiBQaXhlbEZvcm1hdCBmb3JtYXQsCisgICAgSU4gQllURSAqc2NhbjAKKyAgICApCit7CisgICAgR3BCaXRtYXAgKmJpdG1hcCA9IE5VTEw7CisKKyAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUJpdG1hcEZyb21TY2FuMCh3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYml0bWFwKTsKKworICAgIFNldE5hdGl2ZUltYWdlKGJpdG1hcCk7Cit9CisKK2lubGluZSAKK0JpdG1hcDo6Qml0bWFwKAorICAgIElOIElOVCB3aWR0aCwKKyAgICBJTiBJTlQgaGVpZ2h0LAorICAgIElOIFBpeGVsRm9ybWF0IGZvcm1hdAorICAgICkKK3sKKyAgICBHcEJpdG1hcCAqYml0bWFwID0gTlVMTDsKKworICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlQml0bWFwRnJvbVNjYW4wKHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiaXRtYXApOworCisgICAgU2V0TmF0aXZlSW1hZ2UoYml0bWFwKTsKK30KKworaW5saW5lCitCaXRtYXA6OkJpdG1hcCgKKyAgICBJTiBJTlQgd2lkdGgsIAorICAgIElOIElOVCBoZWlnaHQsIAorICAgIElOIEdyYXBoaWNzKiB0YXJnZXQpCit7CisgICAgR3BCaXRtYXAgKmJpdG1hcCA9IE5VTEw7CisKKyAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUJpdG1hcEZyb21HcmFwaGljcyh3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5uYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYml0bWFwKTsKKworICAgIFNldE5hdGl2ZUltYWdlKGJpdG1hcCk7Cit9CisKK2lubGluZSAKK0JpdG1hcDo6Qml0bWFwKAorICAgIElOIElEaXJlY3REcmF3U3VyZmFjZTcgKiBzdXJmYWNlCisgICAgKQoreworICAgIEdwQml0bWFwICpiaXRtYXAgPSBOVUxMOworCisgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVCaXRtYXBGcm9tRGlyZWN0RHJhd1N1cmZhY2Uoc3VyZmFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYml0bWFwKTsKKworICAgIFNldE5hdGl2ZUltYWdlKGJpdG1hcCk7Cit9CisKK2lubGluZSAKK0JpdG1hcDo6Qml0bWFwKAorICAgIElOIGNvbnN0IEJJVE1BUElORk8qIGdkaUJpdG1hcEluZm8sIAorICAgIElOIFZPSUQqIGdkaUJpdG1hcERhdGEKKyAgICApCit7CisgICAgR3BCaXRtYXAgKmJpdG1hcCA9IE5VTEw7CisKKyAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUJpdG1hcEZyb21HZGlEaWIoZ2RpQml0bWFwSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RpQml0bWFwRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJpdG1hcCk7CisKKyAgICBTZXROYXRpdmVJbWFnZShiaXRtYXApOworfQorCitpbmxpbmUgCitCaXRtYXA6OkJpdG1hcCgKKyAgICBJTiBIQklUTUFQIGhibSwgCisgICAgSU4gSFBBTEVUVEUgaHBhbAorICAgICkKK3sKKyAgICBHcEJpdG1hcCAqYml0bWFwID0gTlVMTDsKKworICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlQml0bWFwRnJvbUhCSVRNQVAoaGJtLCBocGFsLCAmYml0bWFwKTsKKworICAgIFNldE5hdGl2ZUltYWdlKGJpdG1hcCk7Cit9CisKK2lubGluZSAKK0JpdG1hcDo6Qml0bWFwKAorICAgIElOIEhJQ09OIGhpY29uCisgICAgKQoreworICAgIEdwQml0bWFwICpiaXRtYXAgPSBOVUxMOworCisgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVCaXRtYXBGcm9tSElDT04oaGljb24sICZiaXRtYXApOworCisgICAgU2V0TmF0aXZlSW1hZ2UoYml0bWFwKTsKK30KKworaW5saW5lIAorQml0bWFwOjpCaXRtYXAoCisgICAgSU4gSElOU1RBTkNFIGhJbnN0YW5jZSwgCisgICAgSU4gY29uc3QgV0NIQVIgKmJpdG1hcE5hbWUKKyAgICApCit7CisgICAgR3BCaXRtYXAgKmJpdG1hcCA9IE5VTEw7CisKKyAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUJpdG1hcEZyb21SZXNvdXJjZShoSW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYml0bWFwKTsKKworICAgIFNldE5hdGl2ZUltYWdlKGJpdG1hcCk7Cit9CisKKworaW5saW5lIEJpdG1hcCogCitCaXRtYXA6OkZyb21GaWxlKAorICAgIElOIGNvbnN0IFdDSEFSICpmaWxlbmFtZSwKKyAgICBJTiBCT09MIHVzZUVtYmVkZGVkQ29sb3JNYW5hZ2VtZW50CisgICAgKQoreworICAgIHJldHVybiBuZXcgQml0bWFwKAorICAgICAgICBmaWxlbmFtZSwgCisgICAgICAgIHVzZUVtYmVkZGVkQ29sb3JNYW5hZ2VtZW50CisgICAgKTsKK30KKworaW5saW5lIEJpdG1hcCogCitCaXRtYXA6OkZyb21TdHJlYW0oCisgICAgSU4gSVN0cmVhbSAqc3RyZWFtLAorICAgIElOIEJPT0wgdXNlRW1iZWRkZWRDb2xvck1hbmFnZW1lbnQKKyAgICApCit7CisgICAgcmV0dXJuIG5ldyBCaXRtYXAoCisgICAgICAgIHN0cmVhbSwgCisgICAgICAgIHVzZUVtYmVkZGVkQ29sb3JNYW5hZ2VtZW50CisgICAgKTsKK30KKworaW5saW5lIEJpdG1hcCogCitCaXRtYXA6OkZyb21EaXJlY3REcmF3U3VyZmFjZTcoCisgICAgSU4gSURpcmVjdERyYXdTdXJmYWNlNyogc3VyZmFjZQorICAgICkKK3sKKyAgICByZXR1cm4gbmV3IEJpdG1hcChzdXJmYWNlKTsKK30KKworaW5saW5lIEJpdG1hcCogCitCaXRtYXA6OkZyb21CSVRNQVBJTkZPKAorICAgIElOIGNvbnN0IEJJVE1BUElORk8qIGdkaUJpdG1hcEluZm8sIAorICAgIElOIFZPSUQqIGdkaUJpdG1hcERhdGEpCit7CisgICAgcmV0dXJuIG5ldyBCaXRtYXAoZ2RpQml0bWFwSW5mbywgZ2RpQml0bWFwRGF0YSk7Cit9CisKK2lubGluZSBCaXRtYXAqIAorQml0bWFwOjpGcm9tSEJJVE1BUCgKKyAgICBJTiBIQklUTUFQIGhibSwgCisgICAgSU4gSFBBTEVUVEUgaHBhbAorICAgICkKK3sKKyAgICByZXR1cm4gbmV3IEJpdG1hcChoYm0sIGhwYWwpOworfQorCitpbmxpbmUgQml0bWFwKiAKK0JpdG1hcDo6RnJvbUhJQ09OKAorICAgIElOIEhJQ09OIGhpY29uCisgICAgKQoreworICAgIHJldHVybiBuZXcgQml0bWFwKGhpY29uKTsKK30KKworaW5saW5lIEJpdG1hcCogCitCaXRtYXA6OkZyb21SZXNvdXJjZSgKKyAgICBJTiBISU5TVEFOQ0UgaEluc3RhbmNlLCAKKyAgICBJTiBjb25zdCBXQ0hBUiAqYml0bWFwTmFtZSkKK3sKKyAgICByZXR1cm4gbmV3IEJpdG1hcChoSW5zdGFuY2UsIGJpdG1hcE5hbWUpOworfQorCitpbmxpbmUgU3RhdHVzIAorQml0bWFwOjpHZXRIQklUTUFQKAorICAgIElOIGNvbnN0IENvbG9yJiBjb2xvckJhY2tncm91bmQsCisgICAgT1VUIEhCSVRNQVAqIGhibVJldHVybgorICAgICkKK3sKKyAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDcmVhdGVIQklUTUFQRnJvbUJpdG1hcCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHcEJpdG1hcCo+KG5hdGl2ZUltYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYm1SZXR1cm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JCYWNrZ3JvdW5kLkdldFZhbHVlKCkpKTsKK30KKworaW5saW5lIFN0YXR1cyAKK0JpdG1hcDo6R2V0SElDT04oCisgICAgT1VUIEhJQ09OKiBoaWNvblJldHVybgorICAgICkKK3sKKyAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDcmVhdGVISUNPTkZyb21CaXRtYXAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R3BCaXRtYXAqPihuYXRpdmVJbWFnZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGljb25SZXR1cm4pKTsKK30KKworaW5saW5lIEJpdG1hcCogCitCaXRtYXA6OkNsb25lKAorICAgIElOIGNvbnN0IFJlY3QmIHJlY3QsCisgICAgSU4gUGl4ZWxGb3JtYXQgZm9ybWF0CisgICAgKQoreworICAgIHJldHVybiBDbG9uZShyZWN0LlgsIHJlY3QuWSwgcmVjdC5XaWR0aCwgcmVjdC5IZWlnaHQsIGZvcm1hdCk7Cit9CisKK2lubGluZSBCaXRtYXAqIAorQml0bWFwOjpDbG9uZSgKKyAgICBJTiBJTlQgeCwKKyAgICBJTiBJTlQgeSwKKyAgICBJTiBJTlQgd2lkdGgsCisgICAgSU4gSU5UIGhlaWdodCwKKyAgICBJTiBQaXhlbEZvcm1hdCBmb3JtYXQKKyAgICApCit7CisgICBHcEJpdG1hcCogZ3Bkc3RCaXRtYXAgPSBOVUxMOworICAgQml0bWFwKiBiaXRtYXA7CisKKyAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ2xvbmVCaXRtYXBBcmVhSSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3BCaXRtYXAgKiluYXRpdmVJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZ3Bkc3RCaXRtYXApOworCisgICBpZiAobGFzdFJlc3VsdCA9PSBPaykKKyAgIHsKKyAgICAgICBiaXRtYXAgPSBuZXcgQml0bWFwKGdwZHN0Qml0bWFwKTsKKworICAgICAgIGlmIChiaXRtYXAgPT0gTlVMTCkgCisgICAgICAgeworICAgICAgICAgICBEbGxFeHBvcnRzOjpHZGlwRGlzcG9zZUltYWdlKGdwZHN0Qml0bWFwKTsKKyAgICAgICB9CisKKyAgICAgICByZXR1cm4gYml0bWFwOworICAgfQorICAgZWxzZQorICAgICAgIHJldHVybiBOVUxMOworfQorCitpbmxpbmUgQml0bWFwKiAKK0JpdG1hcDo6Q2xvbmUoCisgICAgSU4gY29uc3QgUmVjdEYmIHJlY3QsCisgICAgSU4gUGl4ZWxGb3JtYXQgZm9ybWF0CisgICAgKQoreworICAgIHJldHVybiBDbG9uZShyZWN0LlgsIHJlY3QuWSwgcmVjdC5XaWR0aCwgcmVjdC5IZWlnaHQsIGZvcm1hdCk7Cit9CisKK2lubGluZSBCaXRtYXAqCitCaXRtYXA6OkNsb25lKAorICAgIElOIFJFQUwgeCwKKyAgICBJTiBSRUFMIHksCisgICAgSU4gUkVBTCB3aWR0aCwKKyAgICBJTiBSRUFMIGhlaWdodCwKKyAgICBJTiBQaXhlbEZvcm1hdCBmb3JtYXQKKyAgICApCit7CisgICBHcEJpdG1hcCogZ3Bkc3RCaXRtYXAgPSBOVUxMOworICAgQml0bWFwKiBiaXRtYXA7CisKKyAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ2xvbmVCaXRtYXBBcmVhKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHcEJpdG1hcCAqKW5hdGl2ZUltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZncGRzdEJpdG1hcCkpOworCisgICBpZiAobGFzdFJlc3VsdCA9PSBPaykKKyAgIHsKKyAgICAgICBiaXRtYXAgPSBuZXcgQml0bWFwKGdwZHN0Qml0bWFwKTsKKworICAgICAgIGlmIChiaXRtYXAgPT0gTlVMTCkgCisgICAgICAgeworICAgICAgICAgICBEbGxFeHBvcnRzOjpHZGlwRGlzcG9zZUltYWdlKGdwZHN0Qml0bWFwKTsKKyAgICAgICB9CisKKyAgICAgICByZXR1cm4gYml0bWFwOworICAgfQorICAgZWxzZQorICAgICAgIHJldHVybiBOVUxMOworfQorCitpbmxpbmUgQml0bWFwOjpCaXRtYXAoR3BCaXRtYXAgKm5hdGl2ZUJpdG1hcCkKK3sKKyAgICBsYXN0UmVzdWx0ID0gT2s7CisKKyAgICBTZXROYXRpdmVJbWFnZShuYXRpdmVCaXRtYXApOworfQorCitpbmxpbmUgU3RhdHVzCitCaXRtYXA6OkxvY2tCaXRzKAorICAgIElOIGNvbnN0IFJlY3QmIHJlY3QsCisgICAgSU4gVUlOVCBmbGFncywKKyAgICBJTiBQaXhlbEZvcm1hdCBmb3JtYXQsCisgICAgT1VUIEJpdG1hcERhdGEqIGxvY2tlZEJpdG1hcERhdGEKKykKK3sKKyAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBCaXRtYXBMb2NrQml0cygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdwQml0bWFwKj4obmF0aXZlSW1hZ2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlZEJpdG1hcERhdGEpKTsKK30KKworaW5saW5lIFN0YXR1cyAKK0JpdG1hcDo6VW5sb2NrQml0cygKKyAgICBJTiBCaXRtYXBEYXRhKiBsb2NrZWRCaXRtYXBEYXRhCisgICAgKQoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEJpdG1hcFVubG9ja0JpdHMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHcEJpdG1hcCo+KG5hdGl2ZUltYWdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlZEJpdG1hcERhdGEpKTsKK30KKworaW5saW5lIFN0YXR1cyAKK0JpdG1hcDo6R2V0UGl4ZWwoCisgICAgSU4gSU5UIHgsIAorICAgIElOIElOVCB5LCAKKyAgICBPVVQgQ29sb3IgKmNvbG9yKSAKK3sKKyAgICBBUkdCIGFyZ2I7CisKKyAgICBTdGF0dXMgc3RhdHVzID0gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBCaXRtYXBHZXRQaXhlbCgKKyAgICAgICAgc3RhdGljX2Nhc3Q8R3BCaXRtYXAgKj4obmF0aXZlSW1hZ2UpLAorICAgICAgICB4LCB5LCAgICAgICAgCisgICAgICAgICZhcmdiKSk7CisKKyAgICBpZiAoc3RhdHVzID09IE9rKSAKKyAgICB7CisgICAgICAgIGNvbG9yLT5TZXRWYWx1ZShhcmdiKTsKKyAgICB9CisKKyAgICByZXR1cm4gIHN0YXR1czsKK30KKworaW5saW5lIFN0YXR1cyAKK0JpdG1hcDo6U2V0UGl4ZWwoCisgICAgSU4gSU5UIHgsIAorICAgIElOIElOVCB5LCAKKyAgICBJTiBjb25zdCBDb2xvciYgY29sb3IpIAoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEJpdG1hcFNldFBpeGVsKAorICAgICAgICBzdGF0aWNfY2FzdDxHcEJpdG1hcCAqPihuYXRpdmVJbWFnZSksCisgICAgICAgIHgsIHksCisgICAgICAgIGNvbG9yLkdldFZhbHVlKCkpKTsKK30KKworaW5saW5lIFN0YXR1cyAKK0JpdG1hcDo6U2V0UmVzb2x1dGlvbigKKyAgICBJTiBSRUFMIHhkcGksIAorICAgIElOIFJFQUwgeWRwaSkKK3sKKyAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBCaXRtYXBTZXRSZXNvbHV0aW9uKAorICAgICAgICBzdGF0aWNfY2FzdDxHcEJpdG1hcCAqPihuYXRpdmVJbWFnZSksCisgICAgICAgIHhkcGksIHlkcGkpKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0JydXNoLmggYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzQnJ1c2guaAppbmRleCBhNTA2Zjg3Li5jMjVlMzRhIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzQnJ1c2guaAorKysgYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzQnJ1c2guaApAQCAtMSw5NTEgKzEsOTUxIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcDQotKiANCi0qIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotKg0KLSogTW9kdWxlIE5hbWU6DQotKg0KLSogICBHZGlwbHVzQnJ1c2guaA0KLSoNCi0qIEFic3RyYWN0Og0KLSoNCi0qICAgQnJ1c2ggQVBJIHJlbGF0ZWQgZGVjbGFyYXRpb25zDQotKg0KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0jaWZuZGVmIF9HRElQTFVTQlJVU0hfSA0KLSNkZWZpbmUgX0dESVBMVVNCUlVTSF9IDQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIHZhcmlvdXMgYnJ1c2ggdHlwZXMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotY2xhc3MgR3JhcGhpY3NQYXRoOw0KLQ0KLWNsYXNzIEJydXNoIDogcHVibGljIEdkaXBsdXNCYXNlDQotew0KLXB1YmxpYzoNCi0gICAgZnJpZW5kIGNsYXNzIFBlbjsNCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzOw0KLQ0KLSAgICB2aXJ0dWFsIH5CcnVzaCgpDQotICAgIHsNCi0gICAgICAgIERsbEV4cG9ydHM6OkdkaXBEZWxldGVCcnVzaChuYXRpdmVCcnVzaCk7DQotICAgIH0NCi0NCi0gICAgdmlydHVhbCBCcnVzaCogQ2xvbmUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBHcEJydXNoICpicnVzaCA9IE5VTEw7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENsb25lQnJ1c2gobmF0aXZlQnJ1c2gsICZicnVzaCkpOw0KLQ0KLSAgICAgICAgQnJ1c2ggKm5ld0JydXNoID0gbmV3IEJydXNoKGJydXNoLCBsYXN0UmVzdWx0KTsNCi0gICAgICAgIA0KLSAgICAgICAgaWYgKG5ld0JydXNoID09IE5VTEwpIA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIERsbEV4cG9ydHM6OkdkaXBEZWxldGVCcnVzaChicnVzaCk7DQotICAgICAgICB9DQotDQotICAgICAgICByZXR1cm4gbmV3QnJ1c2g7DQotICAgIH0NCi0NCi0gICAgQnJ1c2hUeXBlIEdldFR5cGUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBCcnVzaFR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEJydXNoVHlwZT4oLTEpOw0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRCcnVzaFR5cGUobmF0aXZlQnJ1c2gsICZ0eXBlKSk7DQotDQotICAgICAgICByZXR1cm4gdHlwZTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgR2V0TGFzdFN0YXR1cygpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIFN0YXR1cyBsYXN0U3RhdHVzID0gbGFzdFJlc3VsdDsNCi0gICAgICAgIGxhc3RSZXN1bHQgPSBPazsNCi0NCi0gICAgICAgIHJldHVybiBsYXN0U3RhdHVzOw0KLSAgICB9DQotDQotcHJvdGVjdGVkOg0KLQ0KLSAgICBCcnVzaCgpDQotICAgIHsNCi0gICAgICAgIFNldFN0YXR1cyhOb3RJbXBsZW1lbnRlZCk7DQotICAgIH0NCi0NCi0jaWZkZWYgRENSX1VTRV9ORVdfMjUwOTMyDQotDQotcHJpdmF0ZToNCi0gICAgQnJ1c2goY29uc3QgQnJ1c2gmIGJydXNoKTsNCi0gICAgQnJ1c2gmIG9wZXJhdG9yPShjb25zdCBCcnVzaCYgYnJ1c2gpOw0KLXByb3RlY3RlZDoNCi0NCi0jZWxzZQ0KLQ0KLSAgICBCcnVzaChjb25zdCBCcnVzaCYgYnJ1c2gpDQotICAgIHsNCi0gICAgICAgIGJydXNoOw0KLSAgICAgICAgU2V0U3RhdHVzKE5vdEltcGxlbWVudGVkKTsNCi0gICAgfQ0KLQ0KLSAgICBCcnVzaCYgb3BlcmF0b3I9KGNvbnN0IEJydXNoJiBicnVzaCkNCi0gICAgew0KLSAgICAgICAgYnJ1c2g7DQotICAgICAgICBTZXRTdGF0dXMoTm90SW1wbGVtZW50ZWQpOw0KLSAgICAgICAgcmV0dXJuICp0aGlzOw0KLSAgICB9DQotDQotI2VuZGlmDQotDQotICAgIEJydXNoKEdwQnJ1c2gqIG5hdGl2ZUJydXNoLCBTdGF0dXMgc3RhdHVzKQ0KLSAgICB7DQotICAgICAgICBsYXN0UmVzdWx0ID0gc3RhdHVzOw0KLSAgICAgICAgU2V0TmF0aXZlQnJ1c2gobmF0aXZlQnJ1c2gpOw0KLSAgICB9DQotDQotICAgIFZPSUQgU2V0TmF0aXZlQnJ1c2goR3BCcnVzaCogbmF0aXZlQnJ1c2gpDQotICAgIHsNCi0gICAgICAgIHRoaXMtPm5hdGl2ZUJydXNoID0gbmF0aXZlQnJ1c2g7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFNldFN0YXR1cyhTdGF0dXMgc3RhdHVzKSBjb25zdA0KLSAgICB7DQotICAgICAgICBpZiAoc3RhdHVzICE9IE9rKQ0KLSAgICAgICAgICAgIHJldHVybiAobGFzdFJlc3VsdCA9IHN0YXR1cyk7DQotICAgICAgICBlbHNlDQotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCi0gICAgfQ0KLQ0KLSAgICBHcEJydXNoKiBuYXRpdmVCcnVzaDsNCi0gICAgbXV0YWJsZSBTdGF0dXMgbGFzdFJlc3VsdDsNCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBSZXByZXNlbnQgc29saWQgZmlsbCBicnVzaCBvYmplY3QNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotY2xhc3MgU29saWRCcnVzaCA6IHB1YmxpYyBCcnVzaA0KLXsNCi1wdWJsaWM6DQotICAgIGZyaWVuZCBjbGFzcyBQZW47DQotDQotICAgIFNvbGlkQnJ1c2goSU4gY29uc3QgQ29sb3ImIGNvbG9yKQ0KLSAgICB7DQotICAgICAgICBHcFNvbGlkRmlsbCAqYnJ1c2ggPSBOVUxMOw0KLQ0KLSAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVTb2xpZEZpbGwoY29sb3IuR2V0VmFsdWUoKSwgJmJydXNoKTsNCi0NCi0gICAgICAgIFNldE5hdGl2ZUJydXNoKGJydXNoKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgR2V0Q29sb3IoT1VUIENvbG9yKiBjb2xvcikgY29uc3QNCi0gICAgew0KLSAgICAgICAgQVJHQiBhcmdiOw0KLQ0KLSAgICAgICAgaWYgKGNvbG9yID09IE5VTEwpIA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7DQotICAgICAgICB9DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFNvbGlkRmlsbENvbG9yKChHcFNvbGlkRmlsbCopbmF0aXZlQnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcmdiKSk7DQotDQotICAgICAgICAqY29sb3IgPSBDb2xvcihhcmdiKTsNCi0NCi0gICAgICAgIHJldHVybiBsYXN0UmVzdWx0Ow0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTZXRDb2xvcihJTiBjb25zdCBDb2xvciYgY29sb3IpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFNvbGlkRmlsbENvbG9yKChHcFNvbGlkRmlsbCopbmF0aXZlQnJ1c2gsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuR2V0VmFsdWUoKSkpOw0KLSAgICB9DQotDQotI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMg0KLQ0KLXByaXZhdGU6DQotICAgIFNvbGlkQnJ1c2goY29uc3QgU29saWRCcnVzaCAmKTsNCi0gICAgU29saWRCcnVzaCYgb3BlcmF0b3I9KGNvbnN0IFNvbGlkQnJ1c2ggJik7DQotDQotI2VuZGlmDQotDQotcHJvdGVjdGVkOg0KLQ0KLSAgICBTb2xpZEJydXNoKCkNCi0gICAgew0KLSAgICB9DQotfTsNCi0NCi1jbGFzcyBUZXh0dXJlQnJ1c2ggOiBwdWJsaWMgQnJ1c2gNCi17DQotcHVibGljOg0KLSAgICBmcmllbmQgY2xhc3MgUGVuOw0KLQ0KLSAgICBUZXh0dXJlQnJ1c2goSU4gSW1hZ2UqIGltYWdlLCANCi0gICAgICAgICAgICAgICAgIElOIFdyYXBNb2RlIHdyYXBNb2RlID0gV3JhcE1vZGVUaWxlKQ0KLSAgICB7DQotICAgICAgICBHcFRleHR1cmUgKnRleHR1cmUgPSBOVUxMOw0KLQ0KLSAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVUZXh0dXJlKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UtPm5hdGl2ZUltYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcE1vZGUsICZ0ZXh0dXJlKTsNCi0NCi0gICAgICAgIFNldE5hdGl2ZUJydXNoKHRleHR1cmUpOw0KLSAgICB9DQotDQotICAgIC8vIFdoZW4gY3JlYXRpbmcgYSB0ZXh0dXJlIGJydXNoIGZyb20gYSBtZXRhZmlsZSBpbWFnZSwgdGhlIGRzdFJlY3QNCi0gICAgLy8gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBzaXplIHRoYXQgdGhlIG1ldGFmaWxlIGltYWdlIHNob3VsZCBiZQ0KLSAgICAvLyByZW5kZXJlZCBhdCBpbiB0aGUgZGV2aWNlIHVuaXRzIG9mIHRoZSBkZXN0aW5hdGlvbiBncmFwaGljcy4NCi0gICAgLy8gSXQgaXMgTk9UIHVzZWQgdG8gY3JvcCB0aGUgbWV0YWZpbGUgaW1hZ2UsIHNvIG9ubHkgdGhlIHdpZHRoIA0KLSAgICAvLyBhbmQgaGVpZ2h0IHZhbHVlcyBtYXR0ZXIgZm9yIG1ldGFmaWxlcy4NCi0gICAgVGV4dHVyZUJydXNoKElOIEltYWdlKiBpbWFnZSwgDQotICAgICAgICAgICAgICAgICBJTiBXcmFwTW9kZSB3cmFwTW9kZSwNCi0gICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3RGICZkc3RSZWN0KQ0KLSAgICB7DQotICAgICAgICBHcFRleHR1cmUgKnRleHR1cmUgPSBOVUxMOw0KLQ0KLSAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVUZXh0dXJlMigNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS0+bmF0aXZlSW1hZ2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcE1vZGUsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFJlY3QuWCwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0UmVjdC5ZLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RSZWN0LldpZHRoLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RSZWN0LkhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGV4dHVyZSk7DQotDQotICAgICAgICBTZXROYXRpdmVCcnVzaCh0ZXh0dXJlKTsNCi0gICAgfQ0KLSAgICANCi0gICAgLy8gV2hlbiBjcmVhdGluZyBhIHRleHR1cmUgYnJ1c2ggZnJvbSBhIG1ldGFmaWxlIGltYWdlLCB0aGUgZHN0UmVjdA0KLSAgICAvLyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIHNpemUgdGhhdCB0aGUgbWV0YWZpbGUgaW1hZ2Ugc2hvdWxkIGJlDQotICAgIC8vIHJlbmRlcmVkIGF0IGluIHRoZSBkZXZpY2UgdW5pdHMgb2YgdGhlIGRlc3RpbmF0aW9uIGdyYXBoaWNzLg0KLSAgICAvLyBJdCBpcyBOT1QgdXNlZCB0byBjcm9wIHRoZSBtZXRhZmlsZSBpbWFnZSwgc28gb25seSB0aGUgd2lkdGggDQotICAgIC8vIGFuZCBoZWlnaHQgdmFsdWVzIG1hdHRlciBmb3IgbWV0YWZpbGVzLg0KLQ0KLSAgICBUZXh0dXJlQnJ1c2goSU4gSW1hZ2UgKmltYWdlLCANCi0gICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3RGICZkc3RSZWN0LA0KLSAgICAgICAgICAgICAgICAgSU4gY29uc3QgSW1hZ2VBdHRyaWJ1dGVzICppbWFnZUF0dHJpYnV0ZXMgPSBOVUxMKQ0KLSAgICB7DQotICAgICAgICBHcFRleHR1cmUgKnRleHR1cmUgPSBOVUxMOw0KLQ0KLSAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVUZXh0dXJlSUEoDQotICAgICAgICAgICAgaW1hZ2UtPm5hdGl2ZUltYWdlLA0KLSAgICAgICAgICAgIChpbWFnZUF0dHJpYnV0ZXMpP2ltYWdlQXR0cmlidXRlcy0+bmF0aXZlSW1hZ2VBdHRyOk5VTEwsDQotICAgICAgICAgICAgZHN0UmVjdC5YLCANCi0gICAgICAgICAgICBkc3RSZWN0LlksIA0KLSAgICAgICAgICAgIGRzdFJlY3QuV2lkdGgsIA0KLSAgICAgICAgICAgIGRzdFJlY3QuSGVpZ2h0LA0KLSAgICAgICAgICAgICZ0ZXh0dXJlDQotICAgICAgICApOw0KLQ0KLSAgICAgICAgU2V0TmF0aXZlQnJ1c2godGV4dHVyZSk7DQotICAgIH0NCi0gICAgDQotICAgICNpZmRlZiBEQ1JfVVNFX05FV18xNDUxMzgNCi0gICAgVGV4dHVyZUJydXNoKElOIEltYWdlICppbWFnZSwgDQotICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0ICZkc3RSZWN0LA0KLSAgICAgICAgICAgICAgICAgSU4gY29uc3QgSW1hZ2VBdHRyaWJ1dGVzICppbWFnZUF0dHJpYnV0ZXMgPSBOVUxMKQ0KLSAgICB7DQotICAgICAgICBHcFRleHR1cmUgKnRleHR1cmUgPSBOVUxMOw0KLQ0KLSAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVUZXh0dXJlSUFJKA0KLSAgICAgICAgICAgIGltYWdlLT5uYXRpdmVJbWFnZSwNCi0gICAgICAgICAgICAoaW1hZ2VBdHRyaWJ1dGVzKT9pbWFnZUF0dHJpYnV0ZXMtPm5hdGl2ZUltYWdlQXR0cjpOVUxMLA0KLSAgICAgICAgICAgIGRzdFJlY3QuWCwgDQotICAgICAgICAgICAgZHN0UmVjdC5ZLCANCi0gICAgICAgICAgICBkc3RSZWN0LldpZHRoLCANCi0gICAgICAgICAgICBkc3RSZWN0LkhlaWdodCwNCi0gICAgICAgICAgICAmdGV4dHVyZQ0KLSAgICAgICAgKTsNCi0NCi0gICAgICAgIFNldE5hdGl2ZUJydXNoKHRleHR1cmUpOw0KLSAgICB9DQotICAgICNlbmRpZg0KLQ0KLSAgICAvLyBXaGVuIGNyZWF0aW5nIGEgdGV4dHVyZSBicnVzaCBmcm9tIGEgbWV0YWZpbGUgaW1hZ2UsIHRoZSBkc3RSZWN0DQotICAgIC8vIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgc2l6ZSB0aGF0IHRoZSBtZXRhZmlsZSBpbWFnZSBzaG91bGQgYmUNCi0gICAgLy8gcmVuZGVyZWQgYXQgaW4gdGhlIGRldmljZSB1bml0cyBvZiB0aGUgZGVzdGluYXRpb24gZ3JhcGhpY3MuDQotICAgIC8vIEl0IGlzIE5PVCB1c2VkIHRvIGNyb3AgdGhlIG1ldGFmaWxlIGltYWdlLCBzbyBvbmx5IHRoZSB3aWR0aCANCi0gICAgLy8gYW5kIGhlaWdodCB2YWx1ZXMgbWF0dGVyIGZvciBtZXRhZmlsZXMuDQotDQotICAgIFRleHR1cmVCcnVzaCgNCi0gICAgICAgIElOIEltYWdlKiBpbWFnZSwNCi0gICAgICAgIElOIFdyYXBNb2RlIHdyYXBNb2RlLA0KLSAgICAgICAgDQotICAgICAgICAjaWZkZWYgRENSX1VTRV9ORVdfMTQ1MTM4ICAgICAgIA0KLSAgICAgICAgY29uc3QgSU4gUmVjdCAmZHN0UmVjdA0KLSAgICAgICAgI2Vsc2UNCi0gICAgICAgIElOIFJlY3QgJmRzdFJlY3QNCi0gICAgICAgICNlbmRpZg0KLSAgICApDQotICAgIHsNCi0gICAgICAgIEdwVGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7DQotDQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZVRleHR1cmUySSgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UtPm5hdGl2ZUltYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwTW9kZSwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFJlY3QuWCwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFJlY3QuWSwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFJlY3QuV2lkdGgsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RSZWN0LkhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRleHR1cmUpOw0KLQ0KLSAgICAgICAgU2V0TmF0aXZlQnJ1c2godGV4dHVyZSk7DQotICAgIH0NCi0NCi0gICAgLy8gV2hlbiBjcmVhdGluZyBhIHRleHR1cmUgYnJ1c2ggZnJvbSBhIG1ldGFmaWxlIGltYWdlLCB0aGUgZHN0UmVjdA0KLSAgICAvLyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIHNpemUgdGhhdCB0aGUgbWV0YWZpbGUgaW1hZ2Ugc2hvdWxkIGJlDQotICAgIC8vIHJlbmRlcmVkIGF0IGluIHRoZSBkZXZpY2UgdW5pdHMgb2YgdGhlIGRlc3RpbmF0aW9uIGdyYXBoaWNzLg0KLSAgICAvLyBJdCBpcyBOT1QgdXNlZCB0byBjcm9wIHRoZSBtZXRhZmlsZSBpbWFnZSwgc28gb25seSB0aGUgd2lkdGggDQotICAgIC8vIGFuZCBoZWlnaHQgdmFsdWVzIG1hdHRlciBmb3IgbWV0YWZpbGVzLg0KLSAgICBUZXh0dXJlQnJ1c2goSU4gSW1hZ2UqIGltYWdlLCANCi0gICAgICAgICAgICAgICAgIElOIFdyYXBNb2RlIHdyYXBNb2RlLCANCi0gICAgICAgICAgICAgICAgIElOIFJFQUwgZHN0WCwgDQotICAgICAgICAgICAgICAgICBJTiBSRUFMIGRzdFksIA0KLSAgICAgICAgICAgICAgICAgSU4gUkVBTCBkc3RXaWR0aCwgDQotICAgICAgICAgICAgICAgICBJTiBSRUFMIGRzdEhlaWdodCkNCi0gICAgew0KLSAgICAgICAgR3BUZXh0dXJlICp0ZXh0dXJlID0gTlVMTDsNCi0NCi0gICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlVGV4dHVyZTIoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UtPm5hdGl2ZUltYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBNb2RlLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RYLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RZLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RXaWR0aCwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0SGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0ZXh0dXJlKTsNCi0NCi0gICAgICAgIFNldE5hdGl2ZUJydXNoKHRleHR1cmUpOw0KLSAgICB9DQotDQotICAgIC8vIFdoZW4gY3JlYXRpbmcgYSB0ZXh0dXJlIGJydXNoIGZyb20gYSBtZXRhZmlsZSBpbWFnZSwgdGhlIGRzdFJlY3QNCi0gICAgLy8gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBzaXplIHRoYXQgdGhlIG1ldGFmaWxlIGltYWdlIHNob3VsZCBiZQ0KLSAgICAvLyByZW5kZXJlZCBhdCBpbiB0aGUgZGV2aWNlIHVuaXRzIG9mIHRoZSBkZXN0aW5hdGlvbiBncmFwaGljcy4NCi0gICAgLy8gSXQgaXMgTk9UIHVzZWQgdG8gY3JvcCB0aGUgbWV0YWZpbGUgaW1hZ2UsIHNvIG9ubHkgdGhlIHdpZHRoIA0KLSAgICAvLyBhbmQgaGVpZ2h0IHZhbHVlcyBtYXR0ZXIgZm9yIG1ldGFmaWxlcy4NCi0gICAgVGV4dHVyZUJydXNoKElOIEltYWdlKiBpbWFnZSwgDQotICAgICAgICAgICAgICAgICBJTiBXcmFwTW9kZSB3cmFwTW9kZSwgDQotICAgICAgICAgICAgICAgICBJTiBJTlQgZHN0WCwgDQotICAgICAgICAgICAgICAgICBJTiBJTlQgZHN0WSwgDQotICAgICAgICAgICAgICAgICBJTiBJTlQgZHN0V2lkdGgsIA0KLSAgICAgICAgICAgICAgICAgSU4gSU5UIGRzdEhlaWdodCkNCi0gICAgew0KLSAgICAgICAgR3BUZXh0dXJlICp0ZXh0dXJlID0gTlVMTDsNCi0NCi0gICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlVGV4dHVyZTJJKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS0+bmF0aXZlSW1hZ2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBNb2RlLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0WCwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFksIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RXaWR0aCwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdEhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRleHR1cmUpOw0KLQ0KLSAgICAgICAgU2V0TmF0aXZlQnJ1c2godGV4dHVyZSk7DQotICAgIH0NCi0NCi0gICAgLyoqDQotICAgICAqIFNldC9nZXQgYnJ1c2ggdHJhbnNmb3JtDQotICAgICAqLw0KLSAgICBTdGF0dXMgU2V0VHJhbnNmb3JtKElOIGNvbnN0IE1hdHJpeCogbWF0cml4KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRUZXh0dXJlVHJhbnNmb3JtKChHcFRleHR1cmUqKW5hdGl2ZUJydXNoLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT5uYXRpdmVNYXRyaXgpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgR2V0VHJhbnNmb3JtKE9VVCBNYXRyaXgqIG1hdHJpeCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0VGV4dHVyZVRyYW5zZm9ybSgoR3BUZXh0dXJlKiluYXRpdmVCcnVzaCwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+bmF0aXZlTWF0cml4KSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFJlc2V0VHJhbnNmb3JtKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUmVzZXRUZXh0dXJlVHJhbnNmb3JtKChHcFRleHR1cmUqKW5hdGl2ZUJydXNoKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIE11bHRpcGx5VHJhbnNmb3JtKElOIGNvbnN0IE1hdHJpeCogbWF0cml4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gTWF0cml4T3JkZXIgb3JkZXIgPSBNYXRyaXhPcmRlclByZXBlbmQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcE11bHRpcGx5VGV4dHVyZVRyYW5zZm9ybSgoR3BUZXh0dXJlKiluYXRpdmVCcnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT5uYXRpdmVNYXRyaXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFRyYW5zbGF0ZVRyYW5zZm9ybShJTiBSRUFMIGR4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgZHksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gTWF0cml4T3JkZXIgb3JkZXIgPSBNYXRyaXhPcmRlclByZXBlbmQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFRyYW5zbGF0ZVRleHR1cmVUcmFuc2Zvcm0oKEdwVGV4dHVyZSopbmF0aXZlQnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHgsIGR5LCBvcmRlcikpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTY2FsZVRyYW5zZm9ybShJTiBSRUFMIHN4LCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3ksDQotICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2NhbGVUZXh0dXJlVHJhbnNmb3JtKChHcFRleHR1cmUqKW5hdGl2ZUJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeCwgc3ksIG9yZGVyKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFJvdGF0ZVRyYW5zZm9ybShJTiBSRUFMIGFuZ2xlLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUm90YXRlVGV4dHVyZVRyYW5zZm9ybSgoR3BUZXh0dXJlKiluYXRpdmVCcnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlLCBvcmRlcikpOw0KLSAgICB9DQotDQotICAgIC8qKg0KLSAgICAgKiBTZXQvZ2V0IGJydXNoIHdyYXBwaW5nIG1vZGUNCi0gICAgICovDQotICAgIFN0YXR1cyBTZXRXcmFwTW9kZShJTiBXcmFwTW9kZSB3cmFwTW9kZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0VGV4dHVyZVdyYXBNb2RlKChHcFRleHR1cmUqKW5hdGl2ZUJydXNoLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwTW9kZSkpOw0KLSAgICB9DQotDQotICAgIFdyYXBNb2RlIEdldFdyYXBNb2RlKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgV3JhcE1vZGUgd3JhcE1vZGU7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFRleHR1cmVXcmFwTW9kZSgoR3BUZXh0dXJlKiluYXRpdmVCcnVzaCwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd3JhcE1vZGUpKTsNCi0gICAgICAgIHJldHVybiB3cmFwTW9kZTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBHZXQgdGV4dHVyZSBicnVzaCBhdHRyaWJ1dGVzDQotDQotICAgIEltYWdlICpHZXRJbWFnZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIEdwSW1hZ2UgKmltYWdlOw0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRUZXh0dXJlSW1hZ2UoKEdwVGV4dHVyZSAqKW5hdGl2ZUJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmltYWdlKSk7DQotDQotICAgICAgICBJbWFnZSAqcmV0aW1hZ2UgPSBuZXcgSW1hZ2UoaW1hZ2UsIGxhc3RSZXN1bHQpOw0KLQ0KLSAgICAgICAgaWYgKHJldGltYWdlID09IE5VTEwpIA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIERsbEV4cG9ydHM6OkdkaXBEaXNwb3NlSW1hZ2UoaW1hZ2UpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcmV0dXJuIHJldGltYWdlOw0KLSAgICB9DQotDQotI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMg0KLQ0KLXByaXZhdGU6DQotICAgIFRleHR1cmVCcnVzaChjb25zdCBUZXh0dXJlQnJ1c2ggJik7DQotICAgIFRleHR1cmVCcnVzaCYgb3BlcmF0b3I9KGNvbnN0IFRleHR1cmVCcnVzaCAmKTsNCi0NCi0jZW5kaWYNCi0NCi1wcm90ZWN0ZWQ6DQotDQotICAgIFRleHR1cmVCcnVzaCgpDQotICAgIHsNCi0gICAgfQ0KLX07DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIFJlcHJlc2VudCBsaW5lIGdyYWRpZW50IGJydXNoIG9iamVjdA0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1jbGFzcyBMaW5lYXJHcmFkaWVudEJydXNoIDogcHVibGljIEJydXNoDQotew0KLXB1YmxpYzoNCi0gICAgZnJpZW5kIGNsYXNzIFBlbjsNCi0NCi0gICAgTGluZWFyR3JhZGllbnRCcnVzaChJTiBjb25zdCBQb2ludEYmIHBvaW50MSwNCi0gICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYmIHBvaW50MiwNCi0gICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBDb2xvciYgY29sb3IxLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IENvbG9yJiBjb2xvcjIpDQotICAgIHsNCi0gICAgICAgIEdwTGluZUdyYWRpZW50ICpicnVzaCA9IE5VTEw7DQotDQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUxpbmVCcnVzaCgmcG9pbnQxLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBvaW50MiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMS5HZXRWYWx1ZSgpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IyLkdldFZhbHVlKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcmFwTW9kZVRpbGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnJ1c2gpOw0KLQ0KLSAgICAgICAgU2V0TmF0aXZlQnJ1c2goYnJ1c2gpOw0KLSAgICB9DQotDQotICAgIExpbmVhckdyYWRpZW50QnJ1c2goSU4gY29uc3QgUG9pbnQmIHBvaW50MSwNCi0gICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludCYgcG9pbnQyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IENvbG9yJiBjb2xvcjEsDQotICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgQ29sb3ImIGNvbG9yMikNCi0gICAgew0KLSAgICAgICAgR3BMaW5lR3JhZGllbnQgKmJydXNoID0gTlVMTDsNCi0NCi0gICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlTGluZUJydXNoSSgmcG9pbnQxLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb2ludDIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IxLkdldFZhbHVlKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IyLkdldFZhbHVlKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JhcE1vZGVUaWxlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZicnVzaCk7DQotDQotICAgICAgICBTZXROYXRpdmVCcnVzaChicnVzaCk7DQotICAgIH0NCi0NCi0gICAgTGluZWFyR3JhZGllbnRCcnVzaChJTiBjb25zdCBSZWN0RiYgcmVjdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBDb2xvciYgY29sb3IxLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IENvbG9yJiBjb2xvcjIsDQotICAgICAgICAgICAgICAgICAgICAgICAgSU4gTGluZWFyR3JhZGllbnRNb2RlIG1vZGUpDQotICAgIHsNCi0gICAgICAgIEdwTGluZUdyYWRpZW50ICpicnVzaCA9IE5VTEw7DQotDQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUxpbmVCcnVzaEZyb21SZWN0KCZyZWN0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjEuR2V0VmFsdWUoKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IyLkdldFZhbHVlKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyYXBNb2RlVGlsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJydXNoKTsNCi0NCi0gICAgICAgIFNldE5hdGl2ZUJydXNoKGJydXNoKTsNCi0gICAgfQ0KLQ0KLSAgICBMaW5lYXJHcmFkaWVudEJydXNoKElOIGNvbnN0IFJlY3QmIHJlY3QsDQotICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgQ29sb3ImIGNvbG9yMSwNCi0gICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBDb2xvciYgY29sb3IyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIElOIExpbmVhckdyYWRpZW50TW9kZSBtb2RlKQ0KLSAgICB7DQotICAgICAgICBHcExpbmVHcmFkaWVudCAqYnJ1c2ggPSBOVUxMOw0KLQ0KLSAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVMaW5lQnJ1c2hGcm9tUmVjdEkoJnJlY3QsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjEuR2V0VmFsdWUoKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMi5HZXRWYWx1ZSgpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyYXBNb2RlVGlsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZicnVzaCk7DQotDQotICAgICAgICBTZXROYXRpdmVCcnVzaChicnVzaCk7DQotICAgIH0NCi0NCi0gICAgTGluZWFyR3JhZGllbnRCcnVzaChJTiBjb25zdCBSZWN0RiYgcmVjdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBDb2xvciYgY29sb3IxLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IENvbG9yJiBjb2xvcjIsDQotICAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBhbmdsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICBJTiBCT09MIGlzQW5nbGVTY2FsYWJsZSA9IEZBTFNFKQ0KLSAgICB7DQotICAgICAgICBHcExpbmVHcmFkaWVudCAqYnJ1c2ggPSBOVUxMOw0KLQ0KLSAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVMaW5lQnJ1c2hGcm9tUmVjdFdpdGhBbmdsZSgmcmVjdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IxLkdldFZhbHVlKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMi5HZXRWYWx1ZSgpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbmdsZVNjYWxhYmxlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcmFwTW9kZVRpbGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZicnVzaCk7DQotDQotICAgICAgICBTZXROYXRpdmVCcnVzaChicnVzaCk7DQotICAgIH0NCi0NCi0gICAgTGluZWFyR3JhZGllbnRCcnVzaChJTiBjb25zdCBSZWN0JiByZWN0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IENvbG9yJiBjb2xvcjEsDQotICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgQ29sb3ImIGNvbG9yMiwNCi0gICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIGFuZ2xlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIElOIEJPT0wgaXNBbmdsZVNjYWxhYmxlID0gRkFMU0UpDQotICAgIHsNCi0gICAgICAgIEdwTGluZUdyYWRpZW50ICpicnVzaCA9IE5VTEw7DQotDQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUxpbmVCcnVzaEZyb21SZWN0V2l0aEFuZ2xlSSgmcmVjdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMS5HZXRWYWx1ZSgpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IyLkdldFZhbHVlKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5nbGVTY2FsYWJsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyYXBNb2RlVGlsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZicnVzaCk7DQotDQotICAgICAgICBTZXROYXRpdmVCcnVzaChicnVzaCk7DQotICAgIH0NCi0NCi0gICAgLy8gR2V0L3NldCBwb2ludCBhdHRyaWJ1dGVzDQotDQotICAgIFN0YXR1cyBTZXRMaW5lYXJQb2ludHMoSU4gY29uc3QgUG9pbnRGJiBwb2ludDEsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50RiYgcG9pbnQyKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRMaW5lUG9pbnRzKChHcExpbmVHcmFkaWVudCopbmF0aXZlQnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb2ludDEsICZwb2ludDIpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgR2V0TGluZWFyUG9pbnRzKE9VVCBQb2ludEYqIHBvaW50cykgY29uc3QgDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldExpbmVQb2ludHMoKEdwTGluZUdyYWRpZW50KikgbmF0aXZlQnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cykpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTZXRMaW5lYXJQb2ludHMoSU4gY29uc3QgUG9pbnQmIHBvaW50MSwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnQmIHBvaW50MikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0TGluZVBvaW50c0koKEdwTGluZUdyYWRpZW50KiluYXRpdmVCcnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb2ludDEsICZwb2ludDIpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgR2V0TGluZWFyUG9pbnRzKE9VVCBQb2ludCogcG9pbnRzKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRMaW5lUG9pbnRzSSgoR3BMaW5lR3JhZGllbnQqKSBuYXRpdmVCcnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cykpOw0KLSAgICB9DQotICAgIC8vIEdldC9zZXQgY29sb3IgYXR0cmlidXRlcw0KLQ0KLSAgICBTdGF0dXMgU2V0TGluZWFyQ29sb3JzKElOIGNvbnN0IENvbG9yJiBjb2xvcjEsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IENvbG9yJiBjb2xvcjIpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldExpbmVDb2xvcnMoKEdwTGluZUdyYWRpZW50KiluYXRpdmVCcnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IxLkdldFZhbHVlKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMi5HZXRWYWx1ZSgpKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEdldExpbmVhckNvbG9ycyhPVVQgQ29sb3IqIGNvbG9ycykgY29uc3QNCi0gICAgew0KLSAgICAgICAgQVJHQiBhcmdiWzJdOw0KLQ0KLSAgICAgICAgaWYgKGNvbG9ycyA9PSBOVUxMKSANCi0gICAgICAgIHsNCi0gICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKEludmFsaWRQYXJhbWV0ZXIpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldExpbmVDb2xvcnMoKEdwTGluZUdyYWRpZW50KikgbmF0aXZlQnJ1c2gsIGFyZ2IpKTsNCi0NCi0gICAgICAgIGlmIChsYXN0UmVzdWx0ID09IE9rKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8vIHVzZSBiaXR3aXNlIGNvcHkgb3BlcmF0b3IgZm9yIENvbG9yIGNvcHkNCi0gICAgICAgICAgICBjb2xvcnNbMF0gPSBDb2xvcihhcmdiWzBdKTsNCi0gICAgICAgICAgICBjb2xvcnNbMV0gPSBDb2xvcihhcmdiWzFdKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHJldHVybiBsYXN0UmVzdWx0Ow0KLSAgICB9DQotDQotICAgIFN0YXR1cyBHZXRSZWN0YW5nbGUoT1VUIFJlY3RGKiByZWN0KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRMaW5lUmVjdCgoR3BMaW5lR3JhZGllbnQqKW5hdGl2ZUJydXNoLCByZWN0KSk7DQotICAgIH0NCi0NCi0gICAgLy8gaW50ZWdlciB2ZXJzaW9uDQotICAgIFN0YXR1cyBHZXRSZWN0YW5nbGUoT1VUIFJlY3QqIHJlY3QpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldExpbmVSZWN0SSgoR3BMaW5lR3JhZGllbnQqKW5hdGl2ZUJydXNoLCByZWN0KSk7DQotICAgIH0NCi0NCi0gICAgLy8gR2FtbWEgY29ycmVjdGlvbiBpbiBpbnRlcnBvcmxhdGlvbi4NCi0NCi0gICAgU3RhdHVzIFNldEdhbW1hQ29ycmVjdGlvbihJTiBCT09MIHVzZUdhbW1hQ29ycmVjdGlvbikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0TGluZUdhbW1hQ29ycmVjdGlvbigoR3BMaW5lR3JhZGllbnQqKW5hdGl2ZUJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgdXNlR2FtbWFDb3JyZWN0aW9uKSk7DQotICAgIH0NCi0gICAgDQotICAgIEJPT0wgR2V0R2FtbWFDb3JyZWN0aW9uKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgQk9PTCB1c2VHYW1tYUNvcnJlY3Rpb247DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldExpbmVHYW1tYUNvcnJlY3Rpb24oKEdwTGluZUdyYWRpZW50KiluYXRpdmVCcnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICZ1c2VHYW1tYUNvcnJlY3Rpb24pKTsNCi0NCi0gICAgICAgIHJldHVybiB1c2VHYW1tYUNvcnJlY3Rpb247DQotICAgIH0NCi0NCi0gICAgSU5UIEdldEJsZW5kQ291bnQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBJTlQgY291bnQgPSAwOw0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRMaW5lQmxlbmRDb3VudCgoR3BMaW5lR3JhZGllbnQqKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVCcnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvdW50KSk7DQotDQotICAgICAgICByZXR1cm4gY291bnQ7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFNldEJsZW5kKElOIGNvbnN0IFJFQUwqIGJsZW5kRmFjdG9ycywgDQotICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSRUFMKiBibGVuZFBvc2l0aW9ucywNCi0gICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0TGluZUJsZW5kKChHcExpbmVHcmFkaWVudCopDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlQnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRGYWN0b3JzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kUG9zaXRpb25zLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEdldEJsZW5kKE9VVCBSRUFMKiBibGVuZEZhY3RvcnMsIA0KLSAgICAgICAgICAgICAgICAgICAgT1VUIFJFQUwqIGJsZW5kUG9zaXRpb25zLCANCi0gICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkgY29uc3QgDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldExpbmVCbGVuZCgoR3BMaW5lR3JhZGllbnQqKW5hdGl2ZUJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kRmFjdG9ycywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZFBvc2l0aW9ucywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOw0KLSAgICB9DQotDQotICAgIElOVCBHZXRJbnRlcnBvbGF0aW9uQ29sb3JDb3VudCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIElOVCBjb3VudCA9IDA7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldExpbmVQcmVzZXRCbGVuZENvdW50KChHcExpbmVHcmFkaWVudCopDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY291bnQpKTsNCi0NCi0gICAgICAgIHJldHVybiBjb3VudDsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0SW50ZXJwb2xhdGlvbkNvbG9ycyhJTiBjb25zdCBDb2xvciogcHJlc2V0Q29sb3JzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSRUFMKiBibGVuZFBvc2l0aW9ucywgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkNCi0gICAgew0KLSAgICAgICAgaWYgKChjb3VudCA8PSAwKSB8fCAhcHJlc2V0Q29sb3JzKQ0KLSAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7DQotICAgICAgICAgDQotICAgICAgICBBUkdCICphcmdicyA9IChBUkdCKikgbmV3IEJZVEVbY291bnQqc2l6ZW9mKEFSR0IpXTsNCi0gICAgICAgIA0KLSAgICAgICAgaWYgKGFyZ2JzKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGZvciAoSU5UIGkgPSAwOyBpIDwgY291bnQ7IGkrKykNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGFyZ2JzW2ldID0gcHJlc2V0Q29sb3JzW2ldLkdldFZhbHVlKCk7DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIFN0YXR1cyBzdGF0dXMgPSBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldExpbmVQcmVzZXRCbGVuZCgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3BMaW5lR3JhZGllbnQqKSBuYXRpdmVCcnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdicywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZFBvc2l0aW9ucywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOw0KLSAgICAgICAgICAgIGRlbGV0ZSBbXSBhcmdiczsNCi0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoT3V0T2ZNZW1vcnkpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotDQotICAgIFN0YXR1cyBHZXRJbnRlcnBvbGF0aW9uQ29sb3JzKE9VVCBDb2xvciogcHJlc2V0Q29sb3JzLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUIFJFQUwqIGJsZW5kUG9zaXRpb25zLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KSBjb25zdCANCi0gICAgew0KLSAgICAgICAgaWYgKChjb3VudCA8PSAwKSB8fCAhcHJlc2V0Q29sb3JzKQ0KLSAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7DQotDQotICAgICAgICBBUkdCKiBhcmdicyA9IChBUkdCKikgbmV3IEJZVEVbY291bnQqc2l6ZW9mKEFSR0IpXTsNCi0gICAgICAgIA0KLSAgICAgICAgaWYgKCFhcmdicykNCi0gICAgICAgIHsNCi0gICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKE91dE9mTWVtb3J5KTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIFN0YXR1cyBzdGF0dXMgPSBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldExpbmVQcmVzZXRCbGVuZCgoR3BMaW5lR3JhZGllbnQqKW5hdGl2ZUJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ2JzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kUG9zaXRpb25zLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7DQotICAgICAgICBpZiAoc3RhdHVzID09IE9rKSANCi0gICAgICAgIHsNCi0gICAgICAgICAgICBmb3IgKElOVCBpID0gMDsgaSA8IGNvdW50OyBpKyspDQotICAgICAgICAgICAgeyANCi0gICAgICAgICAgICAgICAgcHJlc2V0Q29sb3JzW2ldID0gQ29sb3IoYXJnYnNbaV0pOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIA0KLSAgICAgICAgZGVsZXRlIFtdIGFyZ2JzOw0KLSAgICAgICAgDQotICAgICAgICByZXR1cm4gc3RhdHVzOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTZXRCbGVuZEJlbGxTaGFwZShJTiBSRUFMIGZvY3VzLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc2NhbGUgPSAxLjApDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldExpbmVTaWdtYUJsZW5kKChHcExpbmVHcmFkaWVudCopbmF0aXZlQnJ1c2gsIGZvY3VzLCBzY2FsZSkpOw0KLSAgICB9DQotDQotICAgICNpZmRlZiBEQ1JfVVNFX05FV18xNDUxMzUNCi0gICAgU3RhdHVzIFNldEJsZW5kVHJpYW5ndWxhclNoYXBlKA0KLSAgICAgICAgSU4gUkVBTCBmb2N1cywNCi0gICAgICAgIElOIFJFQUwgc2NhbGUgPSAxLjANCi0gICAgKQ0KLSAgICAjZWxzZQ0KLSAgICBTdGF0dXMgU2V0QmxlbmRUcmlhbmdsYXJTaGFwZShJTiBSRUFMIGZvY3VzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHNjYWxlID0gMS4wKQ0KLSAgICAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0TGluZUxpbmVhckJsZW5kKChHcExpbmVHcmFkaWVudCopbmF0aXZlQnJ1c2gsIGZvY3VzLCBzY2FsZSkpOw0KLSAgICB9DQotDQotICAgIC8qKg0KLSAgICAgKiBTZXQvZ2V0IGJydXNoIHRyYW5zZm9ybQ0KLSAgICAgKi8NCi0gICAgU3RhdHVzIFNldFRyYW5zZm9ybShJTiBjb25zdCBNYXRyaXgqIG1hdHJpeCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0TGluZVRyYW5zZm9ybSgoR3BMaW5lR3JhZGllbnQqKW5hdGl2ZUJydXNoLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT5uYXRpdmVNYXRyaXgpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgR2V0VHJhbnNmb3JtKE9VVCBNYXRyaXggKm1hdHJpeCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0TGluZVRyYW5zZm9ybSgoR3BMaW5lR3JhZGllbnQqKW5hdGl2ZUJydXNoLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT5uYXRpdmVNYXRyaXgpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgUmVzZXRUcmFuc2Zvcm0oKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBSZXNldExpbmVUcmFuc2Zvcm0oKEdwTGluZUdyYWRpZW50KiluYXRpdmVCcnVzaCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBNdWx0aXBseVRyYW5zZm9ybShJTiBjb25zdCBNYXRyaXgqIG1hdHJpeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIE1hdHJpeE9yZGVyIG9yZGVyID0gTWF0cml4T3JkZXJQcmVwZW5kKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBNdWx0aXBseUxpbmVUcmFuc2Zvcm0oKEdwTGluZUdyYWRpZW50KiluYXRpdmVCcnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT5uYXRpdmVNYXRyaXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFRyYW5zbGF0ZVRyYW5zZm9ybShJTiBSRUFMIGR4LCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIGR5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIE1hdHJpeE9yZGVyIG9yZGVyID0gTWF0cml4T3JkZXJQcmVwZW5kKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBUcmFuc2xhdGVMaW5lVHJhbnNmb3JtKChHcExpbmVHcmFkaWVudCopbmF0aXZlQnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHgsIGR5LCBvcmRlcikpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTY2FsZVRyYW5zZm9ybShJTiBSRUFMIHN4LCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3ksDQotICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2NhbGVMaW5lVHJhbnNmb3JtKChHcExpbmVHcmFkaWVudCopbmF0aXZlQnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN4LCBzeSwgb3JkZXIpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgUm90YXRlVHJhbnNmb3JtKElOIFJFQUwgYW5nbGUsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIE1hdHJpeE9yZGVyIG9yZGVyID0gTWF0cml4T3JkZXJQcmVwZW5kKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBSb3RhdGVMaW5lVHJhbnNmb3JtKChHcExpbmVHcmFkaWVudCopbmF0aXZlQnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSwgb3JkZXIpKTsNCi0gICAgfQ0KLQ0KLSAgICAvKioNCi0gICAgICogU2V0L2dldCBicnVzaCB3cmFwcGluZyBtb2RlDQotICAgICAqLw0KLSAgICBTdGF0dXMgU2V0V3JhcE1vZGUoSU4gV3JhcE1vZGUgd3JhcE1vZGUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldExpbmVXcmFwTW9kZSgoR3BMaW5lR3JhZGllbnQqKW5hdGl2ZUJydXNoLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwTW9kZSkpOw0KLSAgICB9DQotDQotICAgIFdyYXBNb2RlIEdldFdyYXBNb2RlKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgV3JhcE1vZGUgd3JhcE1vZGU7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldExpbmVXcmFwTW9kZSgoR3BMaW5lR3JhZGllbnQqKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlQnJ1c2gsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndyYXBNb2RlKSk7DQotDQotICAgICAgICByZXR1cm4gd3JhcE1vZGU7DQotICAgIH0NCi0NCi0jaWZkZWYgRENSX1VTRV9ORVdfMjUwOTMyDQotDQotcHJpdmF0ZToNCi0gICAgTGluZWFyR3JhZGllbnRCcnVzaChjb25zdCBMaW5lYXJHcmFkaWVudEJydXNoICYpOw0KLSAgICBMaW5lYXJHcmFkaWVudEJydXNoJiBvcGVyYXRvcj0oY29uc3QgTGluZWFyR3JhZGllbnRCcnVzaCAmKTsNCi0NCi0jZW5kaWYNCi0NCi1wcm90ZWN0ZWQ6DQotDQotICAgIExpbmVhckdyYWRpZW50QnJ1c2goKQ0KLSAgICB7DQotICAgIH0NCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBQYXRoR3JhZGllbnRCcnVzaCBvYmplY3QgaXMgZGVmaW5lZA0KLS8vIGluIGdkaXBsdXNwYXRoLmguDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBSZXByZXNlbnQgaGF0Y2ggYnJ1c2ggb2JqZWN0DQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWNsYXNzIEhhdGNoQnJ1c2ggOiBwdWJsaWMgQnJ1c2gNCi17DQotcHVibGljOg0KLSAgICBmcmllbmQgY2xhc3MgUGVuOw0KLQ0KLSAgICAvLyBDb25zdHJ1Y3RvcnMNCi0NCi0gICAgSGF0Y2hCcnVzaChJTiBIYXRjaFN0eWxlIGhhdGNoU3R5bGUsIA0KLSAgICAgICAgICAgICAgIElOIGNvbnN0IENvbG9yJiBmb3JlQ29sb3IsDQotICAgICAgICAgICAgICAgSU4gY29uc3QgQ29sb3ImIGJhY2tDb2xvciA9IENvbG9yKCkpDQotICAgIHsNCi0gICAgICAgIEdwSGF0Y2ggKmJydXNoID0gTlVMTDsNCi0NCi0gICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlSGF0Y2hCcnVzaChoYXRjaFN0eWxlLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlQ29sb3IuR2V0VmFsdWUoKSwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja0NvbG9yLkdldFZhbHVlKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJydXNoKTsNCi0gICAgICAgIFNldE5hdGl2ZUJydXNoKGJydXNoKTsNCi0gICAgfQ0KLQ0KLSAgICBIYXRjaFN0eWxlIEdldEhhdGNoU3R5bGUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBIYXRjaFN0eWxlIGhhdGNoU3R5bGU7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEhhdGNoU3R5bGUoKEdwSGF0Y2gqKW5hdGl2ZUJydXNoLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGF0Y2hTdHlsZSkpOw0KLQ0KLSAgICAgICAgcmV0dXJuIGhhdGNoU3R5bGU7DQotICAgIH0NCi0gICAgDQotICAgIFN0YXR1cyBHZXRGb3JlZ3JvdW5kQ29sb3IoT1VUIENvbG9yKiBjb2xvcikgY29uc3QNCi0gICAgew0KLSAgICAgICAgQVJHQiBhcmdiOw0KLQ0KLSAgICAgICAgaWYgKGNvbG9yID09IE5VTEwpIA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7DQotICAgICAgICB9DQotICAgICAgICANCi0gICAgICAgIFN0YXR1cyBzdGF0dXMgPSBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEhhdGNoRm9yZWdyb3VuZENvbG9yKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwSGF0Y2gqKW5hdGl2ZUJydXNoLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcmdiKSk7DQotDQotICAgICAgICBjb2xvci0+U2V0VmFsdWUoYXJnYik7DQotDQotICAgICAgICByZXR1cm4gc3RhdHVzOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBHZXRCYWNrZ3JvdW5kQ29sb3IoT1VUIENvbG9yICpjb2xvcikgY29uc3QNCi0gICAgew0KLSAgICAgICAgQVJHQiBhcmdiOw0KLSAgICAgICAgDQotICAgICAgICBpZiAoY29sb3IgPT0gTlVMTCkgDQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhJbnZhbGlkUGFyYW1ldGVyKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIFN0YXR1cyBzdGF0dXMgPSBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEhhdGNoQmFja2dyb3VuZENvbG9yKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwSGF0Y2gqKW5hdGl2ZUJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFyZ2IpKTsNCi0NCi0gICAgICAgIGNvbG9yLT5TZXRWYWx1ZShhcmdiKTsNCi0gICAgICAgIA0KLSAgICAgICAgcmV0dXJuIHN0YXR1czsNCi0gICAgfQ0KLQ0KLSNpZmRlZiBEQ1JfVVNFX05FV18yNTA5MzINCi0NCi1wcml2YXRlOg0KLSAgICBIYXRjaEJydXNoKGNvbnN0IEhhdGNoQnJ1c2ggJik7DQotICAgIEhhdGNoQnJ1c2gmIG9wZXJhdG9yPShjb25zdCBIYXRjaEJydXNoICYpOw0KLQ0KLSNlbmRpZg0KLQ0KLXByb3RlY3RlZDoNCi0NCi0gICAgSGF0Y2hCcnVzaCgpDQotICAgIHsNCi0gICAgfQ0KLX07DQotDQotI2VuZGlmDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKiAKKyogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsIE1pY3Jvc29mdCBDb3JwLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyogTW9kdWxlIE5hbWU6CisqCisqICAgR2RpcGx1c0JydXNoLmgKKyoKKyogQWJzdHJhY3Q6CisqCisqICAgQnJ1c2ggQVBJIHJlbGF0ZWQgZGVjbGFyYXRpb25zCisqCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0dESVBMVVNCUlVTSF9ICisjZGVmaW5lIF9HRElQTFVTQlJVU0hfSAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciB2YXJpb3VzIGJydXNoIHR5cGVzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIEdyYXBoaWNzUGF0aDsKKworY2xhc3MgQnJ1c2ggOiBwdWJsaWMgR2RpcGx1c0Jhc2UKK3sKK3B1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgUGVuOworICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljczsKKworICAgIHZpcnR1YWwgfkJydXNoKCkKKyAgICB7CisgICAgICAgIERsbEV4cG9ydHM6OkdkaXBEZWxldGVCcnVzaChuYXRpdmVCcnVzaCk7CisgICAgfQorCisgICAgdmlydHVhbCBCcnVzaCogQ2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgR3BCcnVzaCAqYnJ1c2ggPSBOVUxMOworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ2xvbmVCcnVzaChuYXRpdmVCcnVzaCwgJmJydXNoKSk7CisKKyAgICAgICAgQnJ1c2ggKm5ld0JydXNoID0gbmV3IEJydXNoKGJydXNoLCBsYXN0UmVzdWx0KTsKKyAgICAgICAgCisgICAgICAgIGlmIChuZXdCcnVzaCA9PSBOVUxMKSAKKyAgICAgICAgeworICAgICAgICAgICAgRGxsRXhwb3J0czo6R2RpcERlbGV0ZUJydXNoKGJydXNoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBuZXdCcnVzaDsKKyAgICB9CisKKyAgICBCcnVzaFR5cGUgR2V0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBCcnVzaFR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEJydXNoVHlwZT4oLTEpOworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0QnJ1c2hUeXBlKG5hdGl2ZUJydXNoLCAmdHlwZSkpOworCisgICAgICAgIHJldHVybiB0eXBlOworICAgIH0KKworICAgIFN0YXR1cyBHZXRMYXN0U3RhdHVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIFN0YXR1cyBsYXN0U3RhdHVzID0gbGFzdFJlc3VsdDsKKyAgICAgICAgbGFzdFJlc3VsdCA9IE9rOworCisgICAgICAgIHJldHVybiBsYXN0U3RhdHVzOworICAgIH0KKworcHJvdGVjdGVkOgorCisgICAgQnJ1c2goKQorICAgIHsKKyAgICAgICAgU2V0U3RhdHVzKE5vdEltcGxlbWVudGVkKTsKKyAgICB9CisKKyNpZmRlZiBEQ1JfVVNFX05FV18yNTA5MzIKKworcHJpdmF0ZToKKyAgICBCcnVzaChjb25zdCBCcnVzaCYgYnJ1c2gpOworICAgIEJydXNoJiBvcGVyYXRvcj0oY29uc3QgQnJ1c2gmIGJydXNoKTsKK3Byb3RlY3RlZDoKKworI2Vsc2UKKworICAgIEJydXNoKGNvbnN0IEJydXNoJiBicnVzaCkKKyAgICB7CisgICAgICAgIGJydXNoOworICAgICAgICBTZXRTdGF0dXMoTm90SW1wbGVtZW50ZWQpOworICAgIH0KKworICAgIEJydXNoJiBvcGVyYXRvcj0oY29uc3QgQnJ1c2gmIGJydXNoKQorICAgIHsKKyAgICAgICAgYnJ1c2g7CisgICAgICAgIFNldFN0YXR1cyhOb3RJbXBsZW1lbnRlZCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyNlbmRpZgorCisgICAgQnJ1c2goR3BCcnVzaCogbmF0aXZlQnJ1c2gsIFN0YXR1cyBzdGF0dXMpCisgICAgeworICAgICAgICBsYXN0UmVzdWx0ID0gc3RhdHVzOworICAgICAgICBTZXROYXRpdmVCcnVzaChuYXRpdmVCcnVzaCk7CisgICAgfQorCisgICAgVk9JRCBTZXROYXRpdmVCcnVzaChHcEJydXNoKiBuYXRpdmVCcnVzaCkKKyAgICB7CisgICAgICAgIHRoaXMtPm5hdGl2ZUJydXNoID0gbmF0aXZlQnJ1c2g7CisgICAgfQorCisgICAgU3RhdHVzIFNldFN0YXR1cyhTdGF0dXMgc3RhdHVzKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBPaykKKyAgICAgICAgICAgIHJldHVybiAobGFzdFJlc3VsdCA9IHN0YXR1cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgR3BCcnVzaCogbmF0aXZlQnJ1c2g7CisgICAgbXV0YWJsZSBTdGF0dXMgbGFzdFJlc3VsdDsKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlcHJlc2VudCBzb2xpZCBmaWxsIGJydXNoIG9iamVjdAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBTb2xpZEJydXNoIDogcHVibGljIEJydXNoCit7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIFBlbjsKKworICAgIFNvbGlkQnJ1c2goSU4gY29uc3QgQ29sb3ImIGNvbG9yKQorICAgIHsKKyAgICAgICAgR3BTb2xpZEZpbGwgKmJydXNoID0gTlVMTDsKKworICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZVNvbGlkRmlsbChjb2xvci5HZXRWYWx1ZSgpLCAmYnJ1c2gpOworCisgICAgICAgIFNldE5hdGl2ZUJydXNoKGJydXNoKTsKKyAgICB9CisKKyAgICBTdGF0dXMgR2V0Q29sb3IoT1VUIENvbG9yKiBjb2xvcikgY29uc3QKKyAgICB7CisgICAgICAgIEFSR0IgYXJnYjsKKworICAgICAgICBpZiAoY29sb3IgPT0gTlVMTCkgCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7CisgICAgICAgIH0KKworICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFNvbGlkRmlsbENvbG9yKChHcFNvbGlkRmlsbCopbmF0aXZlQnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFyZ2IpKTsKKworICAgICAgICAqY29sb3IgPSBDb2xvcihhcmdiKTsKKworICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0Q29sb3IoSU4gY29uc3QgQ29sb3ImIGNvbG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0U29saWRGaWxsQ29sb3IoKEdwU29saWRGaWxsKiluYXRpdmVCcnVzaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLkdldFZhbHVlKCkpKTsKKyAgICB9CisKKyNpZmRlZiBEQ1JfVVNFX05FV18yNTA5MzIKKworcHJpdmF0ZToKKyAgICBTb2xpZEJydXNoKGNvbnN0IFNvbGlkQnJ1c2ggJik7CisgICAgU29saWRCcnVzaCYgb3BlcmF0b3I9KGNvbnN0IFNvbGlkQnJ1c2ggJik7CisKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisKKyAgICBTb2xpZEJydXNoKCkKKyAgICB7CisgICAgfQorfTsKKworY2xhc3MgVGV4dHVyZUJydXNoIDogcHVibGljIEJydXNoCit7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIFBlbjsKKworICAgIFRleHR1cmVCcnVzaChJTiBJbWFnZSogaW1hZ2UsIAorICAgICAgICAgICAgICAgICBJTiBXcmFwTW9kZSB3cmFwTW9kZSA9IFdyYXBNb2RlVGlsZSkKKyAgICB7CisgICAgICAgIEdwVGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7CisKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVUZXh0dXJlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS0+bmF0aXZlSW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBNb2RlLCAmdGV4dHVyZSk7CisKKyAgICAgICAgU2V0TmF0aXZlQnJ1c2godGV4dHVyZSk7CisgICAgfQorCisgICAgLy8gV2hlbiBjcmVhdGluZyBhIHRleHR1cmUgYnJ1c2ggZnJvbSBhIG1ldGFmaWxlIGltYWdlLCB0aGUgZHN0UmVjdAorICAgIC8vIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgc2l6ZSB0aGF0IHRoZSBtZXRhZmlsZSBpbWFnZSBzaG91bGQgYmUKKyAgICAvLyByZW5kZXJlZCBhdCBpbiB0aGUgZGV2aWNlIHVuaXRzIG9mIHRoZSBkZXN0aW5hdGlvbiBncmFwaGljcy4KKyAgICAvLyBJdCBpcyBOT1QgdXNlZCB0byBjcm9wIHRoZSBtZXRhZmlsZSBpbWFnZSwgc28gb25seSB0aGUgd2lkdGggCisgICAgLy8gYW5kIGhlaWdodCB2YWx1ZXMgbWF0dGVyIGZvciBtZXRhZmlsZXMuCisgICAgVGV4dHVyZUJydXNoKElOIEltYWdlKiBpbWFnZSwgCisgICAgICAgICAgICAgICAgIElOIFdyYXBNb2RlIHdyYXBNb2RlLAorICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0RiAmZHN0UmVjdCkKKyAgICB7CisgICAgICAgIEdwVGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7CisKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVUZXh0dXJlMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLT5uYXRpdmVJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBNb2RlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFJlY3QuWCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RSZWN0LlksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0UmVjdC5XaWR0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RSZWN0LkhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0ZXh0dXJlKTsKKworICAgICAgICBTZXROYXRpdmVCcnVzaCh0ZXh0dXJlKTsKKyAgICB9CisgICAgCisgICAgLy8gV2hlbiBjcmVhdGluZyBhIHRleHR1cmUgYnJ1c2ggZnJvbSBhIG1ldGFmaWxlIGltYWdlLCB0aGUgZHN0UmVjdAorICAgIC8vIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgc2l6ZSB0aGF0IHRoZSBtZXRhZmlsZSBpbWFnZSBzaG91bGQgYmUKKyAgICAvLyByZW5kZXJlZCBhdCBpbiB0aGUgZGV2aWNlIHVuaXRzIG9mIHRoZSBkZXN0aW5hdGlvbiBncmFwaGljcy4KKyAgICAvLyBJdCBpcyBOT1QgdXNlZCB0byBjcm9wIHRoZSBtZXRhZmlsZSBpbWFnZSwgc28gb25seSB0aGUgd2lkdGggCisgICAgLy8gYW5kIGhlaWdodCB2YWx1ZXMgbWF0dGVyIGZvciBtZXRhZmlsZXMuCisKKyAgICBUZXh0dXJlQnJ1c2goSU4gSW1hZ2UgKmltYWdlLCAKKyAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdEYgJmRzdFJlY3QsCisgICAgICAgICAgICAgICAgIElOIGNvbnN0IEltYWdlQXR0cmlidXRlcyAqaW1hZ2VBdHRyaWJ1dGVzID0gTlVMTCkKKyAgICB7CisgICAgICAgIEdwVGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7CisKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVUZXh0dXJlSUEoCisgICAgICAgICAgICBpbWFnZS0+bmF0aXZlSW1hZ2UsCisgICAgICAgICAgICAoaW1hZ2VBdHRyaWJ1dGVzKT9pbWFnZUF0dHJpYnV0ZXMtPm5hdGl2ZUltYWdlQXR0cjpOVUxMLAorICAgICAgICAgICAgZHN0UmVjdC5YLCAKKyAgICAgICAgICAgIGRzdFJlY3QuWSwgCisgICAgICAgICAgICBkc3RSZWN0LldpZHRoLCAKKyAgICAgICAgICAgIGRzdFJlY3QuSGVpZ2h0LAorICAgICAgICAgICAgJnRleHR1cmUKKyAgICAgICAgKTsKKworICAgICAgICBTZXROYXRpdmVCcnVzaCh0ZXh0dXJlKTsKKyAgICB9CisgICAgCisgICAgI2lmZGVmIERDUl9VU0VfTkVXXzE0NTEzOAorICAgIFRleHR1cmVCcnVzaChJTiBJbWFnZSAqaW1hZ2UsIAorICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0ICZkc3RSZWN0LAorICAgICAgICAgICAgICAgICBJTiBjb25zdCBJbWFnZUF0dHJpYnV0ZXMgKmltYWdlQXR0cmlidXRlcyA9IE5VTEwpCisgICAgeworICAgICAgICBHcFRleHR1cmUgKnRleHR1cmUgPSBOVUxMOworCisgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlVGV4dHVyZUlBSSgKKyAgICAgICAgICAgIGltYWdlLT5uYXRpdmVJbWFnZSwKKyAgICAgICAgICAgIChpbWFnZUF0dHJpYnV0ZXMpP2ltYWdlQXR0cmlidXRlcy0+bmF0aXZlSW1hZ2VBdHRyOk5VTEwsCisgICAgICAgICAgICBkc3RSZWN0LlgsIAorICAgICAgICAgICAgZHN0UmVjdC5ZLCAKKyAgICAgICAgICAgIGRzdFJlY3QuV2lkdGgsIAorICAgICAgICAgICAgZHN0UmVjdC5IZWlnaHQsCisgICAgICAgICAgICAmdGV4dHVyZQorICAgICAgICApOworCisgICAgICAgIFNldE5hdGl2ZUJydXNoKHRleHR1cmUpOworICAgIH0KKyAgICAjZW5kaWYKKworICAgIC8vIFdoZW4gY3JlYXRpbmcgYSB0ZXh0dXJlIGJydXNoIGZyb20gYSBtZXRhZmlsZSBpbWFnZSwgdGhlIGRzdFJlY3QKKyAgICAvLyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIHNpemUgdGhhdCB0aGUgbWV0YWZpbGUgaW1hZ2Ugc2hvdWxkIGJlCisgICAgLy8gcmVuZGVyZWQgYXQgaW4gdGhlIGRldmljZSB1bml0cyBvZiB0aGUgZGVzdGluYXRpb24gZ3JhcGhpY3MuCisgICAgLy8gSXQgaXMgTk9UIHVzZWQgdG8gY3JvcCB0aGUgbWV0YWZpbGUgaW1hZ2UsIHNvIG9ubHkgdGhlIHdpZHRoIAorICAgIC8vIGFuZCBoZWlnaHQgdmFsdWVzIG1hdHRlciBmb3IgbWV0YWZpbGVzLgorCisgICAgVGV4dHVyZUJydXNoKAorICAgICAgICBJTiBJbWFnZSogaW1hZ2UsCisgICAgICAgIElOIFdyYXBNb2RlIHdyYXBNb2RlLAorICAgICAgICAKKyAgICAgICAgI2lmZGVmIERDUl9VU0VfTkVXXzE0NTEzOCAgICAgICAKKyAgICAgICAgY29uc3QgSU4gUmVjdCAmZHN0UmVjdAorICAgICAgICAjZWxzZQorICAgICAgICBJTiBSZWN0ICZkc3RSZWN0CisgICAgICAgICNlbmRpZgorICAgICkKKyAgICB7CisgICAgICAgIEdwVGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7CisKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVUZXh0dXJlMkkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UtPm5hdGl2ZUltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBNb2RlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RSZWN0LlgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFJlY3QuWSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0UmVjdC5XaWR0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0UmVjdC5IZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRleHR1cmUpOworCisgICAgICAgIFNldE5hdGl2ZUJydXNoKHRleHR1cmUpOworICAgIH0KKworICAgIC8vIFdoZW4gY3JlYXRpbmcgYSB0ZXh0dXJlIGJydXNoIGZyb20gYSBtZXRhZmlsZSBpbWFnZSwgdGhlIGRzdFJlY3QKKyAgICAvLyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIHNpemUgdGhhdCB0aGUgbWV0YWZpbGUgaW1hZ2Ugc2hvdWxkIGJlCisgICAgLy8gcmVuZGVyZWQgYXQgaW4gdGhlIGRldmljZSB1bml0cyBvZiB0aGUgZGVzdGluYXRpb24gZ3JhcGhpY3MuCisgICAgLy8gSXQgaXMgTk9UIHVzZWQgdG8gY3JvcCB0aGUgbWV0YWZpbGUgaW1hZ2UsIHNvIG9ubHkgdGhlIHdpZHRoIAorICAgIC8vIGFuZCBoZWlnaHQgdmFsdWVzIG1hdHRlciBmb3IgbWV0YWZpbGVzLgorICAgIFRleHR1cmVCcnVzaChJTiBJbWFnZSogaW1hZ2UsIAorICAgICAgICAgICAgICAgICBJTiBXcmFwTW9kZSB3cmFwTW9kZSwgCisgICAgICAgICAgICAgICAgIElOIFJFQUwgZHN0WCwgCisgICAgICAgICAgICAgICAgIElOIFJFQUwgZHN0WSwgCisgICAgICAgICAgICAgICAgIElOIFJFQUwgZHN0V2lkdGgsIAorICAgICAgICAgICAgICAgICBJTiBSRUFMIGRzdEhlaWdodCkKKyAgICB7CisgICAgICAgIEdwVGV4dHVyZSAqdGV4dHVyZSA9IE5VTEw7CisKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVUZXh0dXJlMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLT5uYXRpdmVJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBNb2RlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdFgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0WSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RXaWR0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGV4dHVyZSk7CisKKyAgICAgICAgU2V0TmF0aXZlQnJ1c2godGV4dHVyZSk7CisgICAgfQorCisgICAgLy8gV2hlbiBjcmVhdGluZyBhIHRleHR1cmUgYnJ1c2ggZnJvbSBhIG1ldGFmaWxlIGltYWdlLCB0aGUgZHN0UmVjdAorICAgIC8vIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgc2l6ZSB0aGF0IHRoZSBtZXRhZmlsZSBpbWFnZSBzaG91bGQgYmUKKyAgICAvLyByZW5kZXJlZCBhdCBpbiB0aGUgZGV2aWNlIHVuaXRzIG9mIHRoZSBkZXN0aW5hdGlvbiBncmFwaGljcy4KKyAgICAvLyBJdCBpcyBOT1QgdXNlZCB0byBjcm9wIHRoZSBtZXRhZmlsZSBpbWFnZSwgc28gb25seSB0aGUgd2lkdGggCisgICAgLy8gYW5kIGhlaWdodCB2YWx1ZXMgbWF0dGVyIGZvciBtZXRhZmlsZXMuCisgICAgVGV4dHVyZUJydXNoKElOIEltYWdlKiBpbWFnZSwgCisgICAgICAgICAgICAgICAgIElOIFdyYXBNb2RlIHdyYXBNb2RlLCAKKyAgICAgICAgICAgICAgICAgSU4gSU5UIGRzdFgsIAorICAgICAgICAgICAgICAgICBJTiBJTlQgZHN0WSwgCisgICAgICAgICAgICAgICAgIElOIElOVCBkc3RXaWR0aCwgCisgICAgICAgICAgICAgICAgIElOIElOVCBkc3RIZWlnaHQpCisgICAgeworICAgICAgICBHcFRleHR1cmUgKnRleHR1cmUgPSBOVUxMOworCisgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlVGV4dHVyZTJJKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLT5uYXRpdmVJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwTW9kZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0WCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0WSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0V2lkdGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdEhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGV4dHVyZSk7CisKKyAgICAgICAgU2V0TmF0aXZlQnJ1c2godGV4dHVyZSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0L2dldCBicnVzaCB0cmFuc2Zvcm0KKyAgICAgKi8KKyAgICBTdGF0dXMgU2V0VHJhbnNmb3JtKElOIGNvbnN0IE1hdHJpeCogbWF0cml4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0VGV4dHVyZVRyYW5zZm9ybSgoR3BUZXh0dXJlKiluYXRpdmVCcnVzaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT5uYXRpdmVNYXRyaXgpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgR2V0VHJhbnNmb3JtKE9VVCBNYXRyaXgqIG1hdHJpeCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFRleHR1cmVUcmFuc2Zvcm0oKEdwVGV4dHVyZSopbmF0aXZlQnJ1c2gsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+bmF0aXZlTWF0cml4KSk7CisgICAgfQorCisgICAgU3RhdHVzIFJlc2V0VHJhbnNmb3JtKCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFJlc2V0VGV4dHVyZVRyYW5zZm9ybSgoR3BUZXh0dXJlKiluYXRpdmVCcnVzaCkpOworICAgIH0KKworICAgIFN0YXR1cyBNdWx0aXBseVRyYW5zZm9ybShJTiBjb25zdCBNYXRyaXgqIG1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gTWF0cml4T3JkZXIgb3JkZXIgPSBNYXRyaXhPcmRlclByZXBlbmQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBNdWx0aXBseVRleHR1cmVUcmFuc2Zvcm0oKEdwVGV4dHVyZSopbmF0aXZlQnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT5uYXRpdmVNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXIpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgVHJhbnNsYXRlVHJhbnNmb3JtKElOIFJFQUwgZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIGR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gTWF0cml4T3JkZXIgb3JkZXIgPSBNYXRyaXhPcmRlclByZXBlbmQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBUcmFuc2xhdGVUZXh0dXJlVHJhbnNmb3JtKChHcFRleHR1cmUqKW5hdGl2ZUJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHgsIGR5LCBvcmRlcikpOworICAgIH0KKworICAgIFN0YXR1cyBTY2FsZVRyYW5zZm9ybShJTiBSRUFMIHN4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gTWF0cml4T3JkZXIgb3JkZXIgPSBNYXRyaXhPcmRlclByZXBlbmQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTY2FsZVRleHR1cmVUcmFuc2Zvcm0oKEdwVGV4dHVyZSopbmF0aXZlQnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3gsIHN5LCBvcmRlcikpOworICAgIH0KKworICAgIFN0YXR1cyBSb3RhdGVUcmFuc2Zvcm0oSU4gUkVBTCBhbmdsZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFJvdGF0ZVRleHR1cmVUcmFuc2Zvcm0oKEdwVGV4dHVyZSopbmF0aXZlQnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlLCBvcmRlcikpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldC9nZXQgYnJ1c2ggd3JhcHBpbmcgbW9kZQorICAgICAqLworICAgIFN0YXR1cyBTZXRXcmFwTW9kZShJTiBXcmFwTW9kZSB3cmFwTW9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFRleHR1cmVXcmFwTW9kZSgoR3BUZXh0dXJlKiluYXRpdmVCcnVzaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwTW9kZSkpOworICAgIH0KKworICAgIFdyYXBNb2RlIEdldFdyYXBNb2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIFdyYXBNb2RlIHdyYXBNb2RlOworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0VGV4dHVyZVdyYXBNb2RlKChHcFRleHR1cmUqKW5hdGl2ZUJydXNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndyYXBNb2RlKSk7CisgICAgICAgIHJldHVybiB3cmFwTW9kZTsKKyAgICB9CisKKyAgICAvLyBHZXQgdGV4dHVyZSBicnVzaCBhdHRyaWJ1dGVzCisKKyAgICBJbWFnZSAqR2V0SW1hZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgR3BJbWFnZSAqaW1hZ2U7CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRUZXh0dXJlSW1hZ2UoKEdwVGV4dHVyZSAqKW5hdGl2ZUJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW1hZ2UpKTsKKworICAgICAgICBJbWFnZSAqcmV0aW1hZ2UgPSBuZXcgSW1hZ2UoaW1hZ2UsIGxhc3RSZXN1bHQpOworCisgICAgICAgIGlmIChyZXRpbWFnZSA9PSBOVUxMKSAKKyAgICAgICAgeworICAgICAgICAgICAgRGxsRXhwb3J0czo6R2RpcERpc3Bvc2VJbWFnZShpbWFnZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0aW1hZ2U7CisgICAgfQorCisjaWZkZWYgRENSX1VTRV9ORVdfMjUwOTMyCisKK3ByaXZhdGU6CisgICAgVGV4dHVyZUJydXNoKGNvbnN0IFRleHR1cmVCcnVzaCAmKTsKKyAgICBUZXh0dXJlQnJ1c2gmIG9wZXJhdG9yPShjb25zdCBUZXh0dXJlQnJ1c2ggJik7CisKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisKKyAgICBUZXh0dXJlQnJ1c2goKQorICAgIHsKKyAgICB9Cit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXByZXNlbnQgbGluZSBncmFkaWVudCBicnVzaCBvYmplY3QKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgTGluZWFyR3JhZGllbnRCcnVzaCA6IHB1YmxpYyBCcnVzaAoreworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBQZW47CisKKyAgICBMaW5lYXJHcmFkaWVudEJydXNoKElOIGNvbnN0IFBvaW50RiYgcG9pbnQxLAorICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnRGJiBwb2ludDIsCisgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBDb2xvciYgY29sb3IxLAorICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgQ29sb3ImIGNvbG9yMikKKyAgICB7CisgICAgICAgIEdwTGluZUdyYWRpZW50ICpicnVzaCA9IE5VTEw7CisKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVMaW5lQnJ1c2goJnBvaW50MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBvaW50MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IxLkdldFZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMi5HZXRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcmFwTW9kZVRpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZicnVzaCk7CisKKyAgICAgICAgU2V0TmF0aXZlQnJ1c2goYnJ1c2gpOworICAgIH0KKworICAgIExpbmVhckdyYWRpZW50QnJ1c2goSU4gY29uc3QgUG9pbnQmIHBvaW50MSwKKyAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50JiBwb2ludDIsCisgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBDb2xvciYgY29sb3IxLAorICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgQ29sb3ImIGNvbG9yMikKKyAgICB7CisgICAgICAgIEdwTGluZUdyYWRpZW50ICpicnVzaCA9IE5VTEw7CisKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVMaW5lQnJ1c2hJKCZwb2ludDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9pbnQyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IxLkdldFZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjIuR2V0VmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyYXBNb2RlVGlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZicnVzaCk7CisKKyAgICAgICAgU2V0TmF0aXZlQnJ1c2goYnJ1c2gpOworICAgIH0KKworICAgIExpbmVhckdyYWRpZW50QnJ1c2goSU4gY29uc3QgUmVjdEYmIHJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBDb2xvciYgY29sb3IxLAorICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgQ29sb3ImIGNvbG9yMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIElOIExpbmVhckdyYWRpZW50TW9kZSBtb2RlKQorICAgIHsKKyAgICAgICAgR3BMaW5lR3JhZGllbnQgKmJydXNoID0gTlVMTDsKKworICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUxpbmVCcnVzaEZyb21SZWN0KCZyZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMS5HZXRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMi5HZXRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JhcE1vZGVUaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZicnVzaCk7CisKKyAgICAgICAgU2V0TmF0aXZlQnJ1c2goYnJ1c2gpOworICAgIH0KKworICAgIExpbmVhckdyYWRpZW50QnJ1c2goSU4gY29uc3QgUmVjdCYgcmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IENvbG9yJiBjb2xvcjEsCisgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBDb2xvciYgY29sb3IyLAorICAgICAgICAgICAgICAgICAgICAgICAgSU4gTGluZWFyR3JhZGllbnRNb2RlIG1vZGUpCisgICAgeworICAgICAgICBHcExpbmVHcmFkaWVudCAqYnJ1c2ggPSBOVUxMOworCisgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlTGluZUJydXNoRnJvbVJlY3RJKCZyZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjEuR2V0VmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IyLkdldFZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyYXBNb2RlVGlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJydXNoKTsKKworICAgICAgICBTZXROYXRpdmVCcnVzaChicnVzaCk7CisgICAgfQorCisgICAgTGluZWFyR3JhZGllbnRCcnVzaChJTiBjb25zdCBSZWN0RiYgcmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IENvbG9yJiBjb2xvcjEsCisgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBDb2xvciYgY29sb3IyLAorICAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBhbmdsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIElOIEJPT0wgaXNBbmdsZVNjYWxhYmxlID0gRkFMU0UpCisgICAgeworICAgICAgICBHcExpbmVHcmFkaWVudCAqYnJ1c2ggPSBOVUxMOworCisgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlTGluZUJydXNoRnJvbVJlY3RXaXRoQW5nbGUoJnJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IxLkdldFZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IyLkdldFZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbmdsZVNjYWxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyYXBNb2RlVGlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnJ1c2gpOworCisgICAgICAgIFNldE5hdGl2ZUJydXNoKGJydXNoKTsKKyAgICB9CisKKyAgICBMaW5lYXJHcmFkaWVudEJydXNoKElOIGNvbnN0IFJlY3QmIHJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBDb2xvciYgY29sb3IxLAorICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgQ29sb3ImIGNvbG9yMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgYW5nbGUsCisgICAgICAgICAgICAgICAgICAgICAgICBJTiBCT09MIGlzQW5nbGVTY2FsYWJsZSA9IEZBTFNFKQorICAgIHsKKyAgICAgICAgR3BMaW5lR3JhZGllbnQgKmJydXNoID0gTlVMTDsKKworICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUxpbmVCcnVzaEZyb21SZWN0V2l0aEFuZ2xlSSgmcmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IxLkdldFZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMi5HZXRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBbmdsZVNjYWxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcmFwTW9kZVRpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZicnVzaCk7CisKKyAgICAgICAgU2V0TmF0aXZlQnJ1c2goYnJ1c2gpOworICAgIH0KKworICAgIC8vIEdldC9zZXQgcG9pbnQgYXR0cmlidXRlcworCisgICAgU3RhdHVzIFNldExpbmVhclBvaW50cyhJTiBjb25zdCBQb2ludEYmIHBvaW50MSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYmIHBvaW50MikKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldExpbmVQb2ludHMoKEdwTGluZUdyYWRpZW50KiluYXRpdmVCcnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9pbnQxLCAmcG9pbnQyKSk7CisgICAgfQorCisgICAgU3RhdHVzIEdldExpbmVhclBvaW50cyhPVVQgUG9pbnRGKiBwb2ludHMpIGNvbnN0IAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0TGluZVBvaW50cygoR3BMaW5lR3JhZGllbnQqKSBuYXRpdmVCcnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0TGluZWFyUG9pbnRzKElOIGNvbnN0IFBvaW50JiBwb2ludDEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnQmIHBvaW50MikKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldExpbmVQb2ludHNJKChHcExpbmVHcmFkaWVudCopbmF0aXZlQnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb2ludDEsICZwb2ludDIpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgR2V0TGluZWFyUG9pbnRzKE9VVCBQb2ludCogcG9pbnRzKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0TGluZVBvaW50c0koKEdwTGluZUdyYWRpZW50KikgbmF0aXZlQnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cykpOworICAgIH0KKyAgICAvLyBHZXQvc2V0IGNvbG9yIGF0dHJpYnV0ZXMKKworICAgIFN0YXR1cyBTZXRMaW5lYXJDb2xvcnMoSU4gY29uc3QgQ29sb3ImIGNvbG9yMSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBDb2xvciYgY29sb3IyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0TGluZUNvbG9ycygoR3BMaW5lR3JhZGllbnQqKW5hdGl2ZUJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMS5HZXRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yMi5HZXRWYWx1ZSgpKSk7CisgICAgfQorCisgICAgU3RhdHVzIEdldExpbmVhckNvbG9ycyhPVVQgQ29sb3IqIGNvbG9ycykgY29uc3QKKyAgICB7CisgICAgICAgIEFSR0IgYXJnYlsyXTsKKworICAgICAgICBpZiAoY29sb3JzID09IE5VTEwpIAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKEludmFsaWRQYXJhbWV0ZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldExpbmVDb2xvcnMoKEdwTGluZUdyYWRpZW50KikgbmF0aXZlQnJ1c2gsIGFyZ2IpKTsKKworICAgICAgICBpZiAobGFzdFJlc3VsdCA9PSBPaykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gdXNlIGJpdHdpc2UgY29weSBvcGVyYXRvciBmb3IgQ29sb3IgY29weQorICAgICAgICAgICAgY29sb3JzWzBdID0gQ29sb3IoYXJnYlswXSk7CisgICAgICAgICAgICBjb2xvcnNbMV0gPSBDb2xvcihhcmdiWzFdKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBsYXN0UmVzdWx0OworICAgIH0KKworICAgIFN0YXR1cyBHZXRSZWN0YW5nbGUoT1VUIFJlY3RGKiByZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0TGluZVJlY3QoKEdwTGluZUdyYWRpZW50KiluYXRpdmVCcnVzaCwgcmVjdCkpOworICAgIH0KKworICAgIC8vIGludGVnZXIgdmVyc2lvbgorICAgIFN0YXR1cyBHZXRSZWN0YW5nbGUoT1VUIFJlY3QqIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRMaW5lUmVjdEkoKEdwTGluZUdyYWRpZW50KiluYXRpdmVCcnVzaCwgcmVjdCkpOworICAgIH0KKworICAgIC8vIEdhbW1hIGNvcnJlY3Rpb24gaW4gaW50ZXJwb3JsYXRpb24uCisKKyAgICBTdGF0dXMgU2V0R2FtbWFDb3JyZWN0aW9uKElOIEJPT0wgdXNlR2FtbWFDb3JyZWN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0TGluZUdhbW1hQ29ycmVjdGlvbigoR3BMaW5lR3JhZGllbnQqKW5hdGl2ZUJydXNoLAorICAgICAgICAgICAgICAgICAgICB1c2VHYW1tYUNvcnJlY3Rpb24pKTsKKyAgICB9CisgICAgCisgICAgQk9PTCBHZXRHYW1tYUNvcnJlY3Rpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQk9PTCB1c2VHYW1tYUNvcnJlY3Rpb247CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRMaW5lR2FtbWFDb3JyZWN0aW9uKChHcExpbmVHcmFkaWVudCopbmF0aXZlQnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICZ1c2VHYW1tYUNvcnJlY3Rpb24pKTsKKworICAgICAgICByZXR1cm4gdXNlR2FtbWFDb3JyZWN0aW9uOworICAgIH0KKworICAgIElOVCBHZXRCbGVuZENvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIElOVCBjb3VudCA9IDA7CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRMaW5lQmxlbmRDb3VudCgoR3BMaW5lR3JhZGllbnQqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb3VudCkpOworCisgICAgICAgIHJldHVybiBjb3VudDsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0QmxlbmQoSU4gY29uc3QgUkVBTCogYmxlbmRGYWN0b3JzLCAKKyAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUkVBTCogYmxlbmRQb3NpdGlvbnMsCisgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldExpbmVCbGVuZCgoR3BMaW5lR3JhZGllbnQqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlQnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZEZhY3RvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZFBvc2l0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7CisgICAgfQorCisgICAgU3RhdHVzIEdldEJsZW5kKE9VVCBSRUFMKiBibGVuZEZhY3RvcnMsIAorICAgICAgICAgICAgICAgICAgICBPVVQgUkVBTCogYmxlbmRQb3NpdGlvbnMsIAorICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpIGNvbnN0IAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0TGluZUJsZW5kKChHcExpbmVHcmFkaWVudCopbmF0aXZlQnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZEZhY3RvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZFBvc2l0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7CisgICAgfQorCisgICAgSU5UIEdldEludGVycG9sYXRpb25Db2xvckNvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIElOVCBjb3VudCA9IDA7CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRMaW5lUHJlc2V0QmxlbmRDb3VudCgoR3BMaW5lR3JhZGllbnQqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb3VudCkpOworCisgICAgICAgIHJldHVybiBjb3VudDsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0SW50ZXJwb2xhdGlvbkNvbG9ycyhJTiBjb25zdCBDb2xvciogcHJlc2V0Q29sb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFJFQUwqIGJsZW5kUG9zaXRpb25zLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpCisgICAgeworICAgICAgICBpZiAoKGNvdW50IDw9IDApIHx8ICFwcmVzZXRDb2xvcnMpCisgICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKEludmFsaWRQYXJhbWV0ZXIpOworICAgICAgICAgCisgICAgICAgIEFSR0IgKmFyZ2JzID0gKEFSR0IqKSBuZXcgQllURVtjb3VudCpzaXplb2YoQVJHQildOworICAgICAgICAKKyAgICAgICAgaWYgKGFyZ2JzKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKElOVCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXJnYnNbaV0gPSBwcmVzZXRDb2xvcnNbaV0uR2V0VmFsdWUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3RhdHVzIHN0YXR1cyA9IFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0TGluZVByZXNldEJsZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwTGluZUdyYWRpZW50KikgbmF0aXZlQnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdicywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kUG9zaXRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsKKyAgICAgICAgICAgIGRlbGV0ZSBbXSBhcmdiczsKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKE91dE9mTWVtb3J5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFN0YXR1cyBHZXRJbnRlcnBvbGF0aW9uQ29sb3JzKE9VVCBDb2xvciogcHJlc2V0Q29sb3JzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVQgUkVBTCogYmxlbmRQb3NpdGlvbnMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkgY29uc3QgCisgICAgeworICAgICAgICBpZiAoKGNvdW50IDw9IDApIHx8ICFwcmVzZXRDb2xvcnMpCisgICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKEludmFsaWRQYXJhbWV0ZXIpOworCisgICAgICAgIEFSR0IqIGFyZ2JzID0gKEFSR0IqKSBuZXcgQllURVtjb3VudCpzaXplb2YoQVJHQildOworICAgICAgICAKKyAgICAgICAgaWYgKCFhcmdicykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhPdXRPZk1lbW9yeSk7CisgICAgICAgIH0KKworICAgICAgICBTdGF0dXMgc3RhdHVzID0gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRMaW5lUHJlc2V0QmxlbmQoKEdwTGluZUdyYWRpZW50KiluYXRpdmVCcnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ2JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRQb3NpdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOworICAgICAgICBpZiAoc3RhdHVzID09IE9rKSAKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChJTlQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICAgICAgeyAKKyAgICAgICAgICAgICAgICBwcmVzZXRDb2xvcnNbaV0gPSBDb2xvcihhcmdic1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRlbGV0ZSBbXSBhcmdiczsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgU3RhdHVzIFNldEJsZW5kQmVsbFNoYXBlKElOIFJFQUwgZm9jdXMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHNjYWxlID0gMS4wKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0TGluZVNpZ21hQmxlbmQoKEdwTGluZUdyYWRpZW50KiluYXRpdmVCcnVzaCwgZm9jdXMsIHNjYWxlKSk7CisgICAgfQorCisgICAgI2lmZGVmIERDUl9VU0VfTkVXXzE0NTEzNQorICAgIFN0YXR1cyBTZXRCbGVuZFRyaWFuZ3VsYXJTaGFwZSgKKyAgICAgICAgSU4gUkVBTCBmb2N1cywKKyAgICAgICAgSU4gUkVBTCBzY2FsZSA9IDEuMAorICAgICkKKyAgICAjZWxzZQorICAgIFN0YXR1cyBTZXRCbGVuZFRyaWFuZ2xhclNoYXBlKElOIFJFQUwgZm9jdXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzY2FsZSA9IDEuMCkKKyAgICAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldExpbmVMaW5lYXJCbGVuZCgoR3BMaW5lR3JhZGllbnQqKW5hdGl2ZUJydXNoLCBmb2N1cywgc2NhbGUpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQvZ2V0IGJydXNoIHRyYW5zZm9ybQorICAgICAqLworICAgIFN0YXR1cyBTZXRUcmFuc2Zvcm0oSU4gY29uc3QgTWF0cml4KiBtYXRyaXgpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRMaW5lVHJhbnNmb3JtKChHcExpbmVHcmFkaWVudCopbmF0aXZlQnJ1c2gsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+bmF0aXZlTWF0cml4KSk7CisgICAgfQorCisgICAgU3RhdHVzIEdldFRyYW5zZm9ybShPVVQgTWF0cml4ICptYXRyaXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRMaW5lVHJhbnNmb3JtKChHcExpbmVHcmFkaWVudCopbmF0aXZlQnJ1c2gsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+bmF0aXZlTWF0cml4KSk7CisgICAgfQorCisgICAgU3RhdHVzIFJlc2V0VHJhbnNmb3JtKCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFJlc2V0TGluZVRyYW5zZm9ybSgoR3BMaW5lR3JhZGllbnQqKW5hdGl2ZUJydXNoKSk7CisgICAgfQorCisgICAgU3RhdHVzIE11bHRpcGx5VHJhbnNmb3JtKElOIGNvbnN0IE1hdHJpeCogbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcE11bHRpcGx5TGluZVRyYW5zZm9ybSgoR3BMaW5lR3JhZGllbnQqKW5hdGl2ZUJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+bmF0aXZlTWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyKSk7CisgICAgfQorCisgICAgU3RhdHVzIFRyYW5zbGF0ZVRyYW5zZm9ybShJTiBSRUFMIGR4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgZHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFRyYW5zbGF0ZUxpbmVUcmFuc2Zvcm0oKEdwTGluZUdyYWRpZW50KiluYXRpdmVCcnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR4LCBkeSwgb3JkZXIpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgU2NhbGVUcmFuc2Zvcm0oSU4gUkVBTCBzeCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgIElOIE1hdHJpeE9yZGVyIG9yZGVyID0gTWF0cml4T3JkZXJQcmVwZW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2NhbGVMaW5lVHJhbnNmb3JtKChHcExpbmVHcmFkaWVudCopbmF0aXZlQnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3gsIHN5LCBvcmRlcikpOworICAgIH0KKworICAgIFN0YXR1cyBSb3RhdGVUcmFuc2Zvcm0oSU4gUkVBTCBhbmdsZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFJvdGF0ZUxpbmVUcmFuc2Zvcm0oKEdwTGluZUdyYWRpZW50KiluYXRpdmVCcnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUsIG9yZGVyKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0L2dldCBicnVzaCB3cmFwcGluZyBtb2RlCisgICAgICovCisgICAgU3RhdHVzIFNldFdyYXBNb2RlKElOIFdyYXBNb2RlIHdyYXBNb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0TGluZVdyYXBNb2RlKChHcExpbmVHcmFkaWVudCopbmF0aXZlQnJ1c2gsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcE1vZGUpKTsKKyAgICB9CisKKyAgICBXcmFwTW9kZSBHZXRXcmFwTW9kZSgpIGNvbnN0CisgICAgeworICAgICAgICBXcmFwTW9kZSB3cmFwTW9kZTsKKworICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldExpbmVXcmFwTW9kZSgoR3BMaW5lR3JhZGllbnQqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVCcnVzaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3cmFwTW9kZSkpOworCisgICAgICAgIHJldHVybiB3cmFwTW9kZTsKKyAgICB9CisKKyNpZmRlZiBEQ1JfVVNFX05FV18yNTA5MzIKKworcHJpdmF0ZToKKyAgICBMaW5lYXJHcmFkaWVudEJydXNoKGNvbnN0IExpbmVhckdyYWRpZW50QnJ1c2ggJik7CisgICAgTGluZWFyR3JhZGllbnRCcnVzaCYgb3BlcmF0b3I9KGNvbnN0IExpbmVhckdyYWRpZW50QnJ1c2ggJik7CisKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisKKyAgICBMaW5lYXJHcmFkaWVudEJydXNoKCkKKyAgICB7CisgICAgfQorfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUGF0aEdyYWRpZW50QnJ1c2ggb2JqZWN0IGlzIGRlZmluZWQKKy8vIGluIGdkaXBsdXNwYXRoLmguCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlcHJlc2VudCBoYXRjaCBicnVzaCBvYmplY3QKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgSGF0Y2hCcnVzaCA6IHB1YmxpYyBCcnVzaAoreworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBQZW47CisKKyAgICAvLyBDb25zdHJ1Y3RvcnMKKworICAgIEhhdGNoQnJ1c2goSU4gSGF0Y2hTdHlsZSBoYXRjaFN0eWxlLCAKKyAgICAgICAgICAgICAgIElOIGNvbnN0IENvbG9yJiBmb3JlQ29sb3IsCisgICAgICAgICAgICAgICBJTiBjb25zdCBDb2xvciYgYmFja0NvbG9yID0gQ29sb3IoKSkKKyAgICB7CisgICAgICAgIEdwSGF0Y2ggKmJydXNoID0gTlVMTDsKKworICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUhhdGNoQnJ1c2goaGF0Y2hTdHlsZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlQ29sb3IuR2V0VmFsdWUoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrQ29sb3IuR2V0VmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZicnVzaCk7CisgICAgICAgIFNldE5hdGl2ZUJydXNoKGJydXNoKTsKKyAgICB9CisKKyAgICBIYXRjaFN0eWxlIEdldEhhdGNoU3R5bGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgSGF0Y2hTdHlsZSBoYXRjaFN0eWxlOworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0SGF0Y2hTdHlsZSgoR3BIYXRjaCopbmF0aXZlQnJ1c2gsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhdGNoU3R5bGUpKTsKKworICAgICAgICByZXR1cm4gaGF0Y2hTdHlsZTsKKyAgICB9CisgICAgCisgICAgU3RhdHVzIEdldEZvcmVncm91bmRDb2xvcihPVVQgQ29sb3IqIGNvbG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgQVJHQiBhcmdiOworCisgICAgICAgIGlmIChjb2xvciA9PSBOVUxMKSAKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhJbnZhbGlkUGFyYW1ldGVyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3RhdHVzIHN0YXR1cyA9IFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0SGF0Y2hGb3JlZ3JvdW5kQ29sb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHcEhhdGNoKiluYXRpdmVCcnVzaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcmdiKSk7CisKKyAgICAgICAgY29sb3ItPlNldFZhbHVlKGFyZ2IpOworCisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgU3RhdHVzIEdldEJhY2tncm91bmRDb2xvcihPVVQgQ29sb3IgKmNvbG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgQVJHQiBhcmdiOworICAgICAgICAKKyAgICAgICAgaWYgKGNvbG9yID09IE5VTEwpIAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKEludmFsaWRQYXJhbWV0ZXIpOworICAgICAgICB9CisKKyAgICAgICAgU3RhdHVzIHN0YXR1cyA9IFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0SGF0Y2hCYWNrZ3JvdW5kQ29sb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHcEhhdGNoKiluYXRpdmVCcnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFyZ2IpKTsKKworICAgICAgICBjb2xvci0+U2V0VmFsdWUoYXJnYik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMgorCitwcml2YXRlOgorICAgIEhhdGNoQnJ1c2goY29uc3QgSGF0Y2hCcnVzaCAmKTsKKyAgICBIYXRjaEJydXNoJiBvcGVyYXRvcj0oY29uc3QgSGF0Y2hCcnVzaCAmKTsKKworI2VuZGlmCisKK3Byb3RlY3RlZDoKKworICAgIEhhdGNoQnJ1c2goKQorICAgIHsKKyAgICB9Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNDYWNoZWRCaXRtYXAuaCBiL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNDYWNoZWRCaXRtYXAuaAppbmRleCAyOGZkOGNhLi4zYmFmZWJlIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzQ2FjaGVkQml0bWFwLmgKKysrIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0NhY2hlZEJpdG1hcC5oCkBAIC0xLDcxICsxLDcxIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qDQotKiBDb3B5cmlnaHQgKGMpIDIwMDAgTWljcm9zb2Z0IENvcnBvcmF0aW9uDQotKg0KLSogTW9kdWxlIE5hbWU6DQotKg0KLSogICBDYWNoZWRCaXRtYXAgY2xhc3MgZGVmaW5pdGlvbg0KLSoNCi0qIEFic3RyYWN0Og0KLSoNCi0qICAgQ2FjaGVkQml0bWFwIGlzIGEgcmVwcmVzZW50YXRpb24gb2YgYW4gYWNjZWxlcmF0ZWQgZHJhd2luZw0KLSogICB0aGF0IGhhcyByZXN0cmljdGlvbnMgb24gd2hhdCBvcGVyYXRpb25zIGFyZSBhbGxvd2VkIGluIG9yZGVyDQotKiAgIHRvIGFjY2VsZXJhdGUgdGhlIGRyYXdpbmcgdG8gdGhlIGRlc3RpbmF0aW9uLg0KLSoNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0jaWZuZGVmIF9HRElQTFVTQ0FDSEVEQklUTUFQX0gNCi0jZGVmaW5lIF9HRElQTFVTQ0FDSEVEQklUTUFQX0gNCi0NCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0qDQotKiBDbGFzcyBOYW1lOg0KLSoNCi0qICAgQ2FjaGVkQml0bWFwDQotKg0KLSogQWJzdHJhY3Q6DQotKg0KLSogICBBbiBvYmplY3QgdG8gc3RvcmUgYSBiaXRtYXAgcHJlcGFyZWQgZm9yIHJlbmRlcmluZyBvbiBhIHBhcnRpY3VsYXINCi0qICAgR3JhcGhpY3Mgb2JqZWN0LiBUaGUgbWVtb3J5IHN0b3JhZ2UgZm9yIHRoZSBDYWNoZWRCaXRtYXAgaXMgb3BhcXVlDQotKiAgIHRvIHRoZSBvdGhlciBFbmdpbmUgY29kZSwgc28gdGhlIG9ubHkgb3BlcmF0aW9ucyBzdXBwb3J0ZWQgYXJlDQotKiAgIGluaXRpYWxpemluZyB0aGUgZGF0YSAod2l0aCBhIGJpdG1hcCkgYW5kIHVzaW5nIHRoZSBncmFwaGljcyB0bw0KLSogICBkcmF3IGl0IG9uIHRoZSBzY3JlZW4gd2l0aCBhbiBpbnRlZ2VyIG9mZnNldC4NCi0qDQotKiAgIExvb2sgZm9yIHRoZSBjbGFzcyBkZWZpbml0aW9uIGluIEdkaXBsdXNIZWFkZXJzLmgNCi0qDQotKiBDcmVhdGVkOg0KLSoNCi0qICAgMDQvMjMvMjAwMCBhc2VjY2hpYQ0KLSogICAgICBDcmVhdGVkIGl0Lg0KLSoNCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi1pbmxpbmUgDQotQ2FjaGVkQml0bWFwOjpDYWNoZWRCaXRtYXAoDQotICAgIElOIEJpdG1hcCAqYml0bWFwLCANCi0gICAgSU4gR3JhcGhpY3MgKmdyYXBoaWNzKQ0KLXsNCi0gICAgbmF0aXZlQ2FjaGVkQml0bWFwID0gTlVMTDsgICAgDQotDQotICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlQ2FjaGVkQml0bWFwKA0KLSAgICAgICAgKEdwQml0bWFwICopYml0bWFwLT5uYXRpdmVJbWFnZSwNCi0gICAgICAgIGdyYXBoaWNzLT5uYXRpdmVHcmFwaGljcywNCi0gICAgICAgICZuYXRpdmVDYWNoZWRCaXRtYXANCi0gICAgKTsNCi19DQotDQotaW5saW5lIA0KLUNhY2hlZEJpdG1hcDo6fkNhY2hlZEJpdG1hcCgpDQotew0KLSAgICBEbGxFeHBvcnRzOjpHZGlwRGVsZXRlQ2FjaGVkQml0bWFwKG5hdGl2ZUNhY2hlZEJpdG1hcCk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotQ2FjaGVkQml0bWFwOjpHZXRMYXN0U3RhdHVzKCkgY29uc3QgDQotew0KLSAgICBTdGF0dXMgbGFzdFN0YXR1cyA9IGxhc3RSZXN1bHQ7DQotICAgIGxhc3RSZXN1bHQgPSBPazsgICAgDQotICAgIHJldHVybiAobGFzdFN0YXR1cyk7DQotfQ0KLQ0KLSNlbmRpZg0KLQ0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBDb3B5cmlnaHQgKGMpIDIwMDAgTWljcm9zb2Z0IENvcnBvcmF0aW9uCisqCisqIE1vZHVsZSBOYW1lOgorKgorKiAgIENhY2hlZEJpdG1hcCBjbGFzcyBkZWZpbml0aW9uCisqCisqIEFic3RyYWN0OgorKgorKiAgIENhY2hlZEJpdG1hcCBpcyBhIHJlcHJlc2VudGF0aW9uIG9mIGFuIGFjY2VsZXJhdGVkIGRyYXdpbmcKKyogICB0aGF0IGhhcyByZXN0cmljdGlvbnMgb24gd2hhdCBvcGVyYXRpb25zIGFyZSBhbGxvd2VkIGluIG9yZGVyCisqICAgdG8gYWNjZWxlcmF0ZSB0aGUgZHJhd2luZyB0byB0aGUgZGVzdGluYXRpb24uCisqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfR0RJUExVU0NBQ0hFREJJVE1BUF9ICisjZGVmaW5lIF9HRElQTFVTQ0FDSEVEQklUTUFQX0gKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIENsYXNzIE5hbWU6CisqCisqICAgQ2FjaGVkQml0bWFwCisqCisqIEFic3RyYWN0OgorKgorKiAgIEFuIG9iamVjdCB0byBzdG9yZSBhIGJpdG1hcCBwcmVwYXJlZCBmb3IgcmVuZGVyaW5nIG9uIGEgcGFydGljdWxhcgorKiAgIEdyYXBoaWNzIG9iamVjdC4gVGhlIG1lbW9yeSBzdG9yYWdlIGZvciB0aGUgQ2FjaGVkQml0bWFwIGlzIG9wYXF1ZQorKiAgIHRvIHRoZSBvdGhlciBFbmdpbmUgY29kZSwgc28gdGhlIG9ubHkgb3BlcmF0aW9ucyBzdXBwb3J0ZWQgYXJlCisqICAgaW5pdGlhbGl6aW5nIHRoZSBkYXRhICh3aXRoIGEgYml0bWFwKSBhbmQgdXNpbmcgdGhlIGdyYXBoaWNzIHRvCisqICAgZHJhdyBpdCBvbiB0aGUgc2NyZWVuIHdpdGggYW4gaW50ZWdlciBvZmZzZXQuCisqCisqICAgTG9vayBmb3IgdGhlIGNsYXNzIGRlZmluaXRpb24gaW4gR2RpcGx1c0hlYWRlcnMuaAorKgorKiBDcmVhdGVkOgorKgorKiAgIDA0LzIzLzIwMDAgYXNlY2NoaWEKKyogICAgICBDcmVhdGVkIGl0LgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbmxpbmUgCitDYWNoZWRCaXRtYXA6OkNhY2hlZEJpdG1hcCgKKyAgICBJTiBCaXRtYXAgKmJpdG1hcCwgCisgICAgSU4gR3JhcGhpY3MgKmdyYXBoaWNzKQoreworICAgIG5hdGl2ZUNhY2hlZEJpdG1hcCA9IE5VTEw7ICAgIAorCisgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVDYWNoZWRCaXRtYXAoCisgICAgICAgIChHcEJpdG1hcCAqKWJpdG1hcC0+bmF0aXZlSW1hZ2UsCisgICAgICAgIGdyYXBoaWNzLT5uYXRpdmVHcmFwaGljcywKKyAgICAgICAgJm5hdGl2ZUNhY2hlZEJpdG1hcAorICAgICk7Cit9CisKK2lubGluZSAKK0NhY2hlZEJpdG1hcDo6fkNhY2hlZEJpdG1hcCgpCit7CisgICAgRGxsRXhwb3J0czo6R2RpcERlbGV0ZUNhY2hlZEJpdG1hcChuYXRpdmVDYWNoZWRCaXRtYXApOworfQorCitpbmxpbmUgU3RhdHVzIAorQ2FjaGVkQml0bWFwOjpHZXRMYXN0U3RhdHVzKCkgY29uc3QgCit7CisgICAgU3RhdHVzIGxhc3RTdGF0dXMgPSBsYXN0UmVzdWx0OworICAgIGxhc3RSZXN1bHQgPSBPazsgICAgCisgICAgcmV0dXJuIChsYXN0U3RhdHVzKTsKK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNDb2xvci5oIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0NvbG9yLmgKaW5kZXggNzJjMjFjMi4uN2VjMTBmOCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0NvbG9yLmgKKysrIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0NvbG9yLmgKQEAgLTEsMjA5ICsxLDIwOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXA0KLSoNCi0qIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotKg0KLSogTW9kdWxlIE5hbWU6DQotKg0KLSogICBHZGlwbHVzQ29sb3IuaA0KLSoNCi0qIEFic3RyYWN0Og0KLSoNCi0qICAgUmVwcmVzZW50cyBhIEdESSsgY29sb3IuDQotKg0KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0jaWZuZGVmIF9HRElQTFVTQ09MT1JfSA0KLSNkZWZpbmUgX0dESVBMVVNDT0xPUl9IDQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gQ29sb3IgbW9kZQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWVudW0gQ29sb3JNb2RlDQotew0KLSAgICBDb2xvck1vZGVBUkdCMzIgPSAwLA0KLSAgICBDb2xvck1vZGVBUkdCNjQgPSAxDQotfTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBDb2xvciBDaGFubmVsIGZsYWdzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotZW51bSBDb2xvckNoYW5uZWxGbGFncw0KLXsNCi0gICAgQ29sb3JDaGFubmVsRmxhZ3NDID0gMCwNCi0gICAgQ29sb3JDaGFubmVsRmxhZ3NNLA0KLSAgICBDb2xvckNoYW5uZWxGbGFnc1ksDQotICAgIENvbG9yQ2hhbm5lbEZsYWdzSywNCi0gICAgQ29sb3JDaGFubmVsRmxhZ3NMYXN0DQotfTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBDb2xvcg0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWNsYXNzIENvbG9yDQotew0KLXB1YmxpYzoNCi0NCi0gICAgQ29sb3IoKQ0KLSAgICB7DQotICAgICAgICBBcmdiID0gKEFSR0IpQ29sb3I6OkJsYWNrOw0KLSAgICB9DQotDQotICAgIC8vIENvbnN0cnVjdCBhbiBvcGFxdWUgQ29sb3Igb2JqZWN0IHdpdGgNCi0gICAgLy8gdGhlIHNwZWNpZmllZCBSLCBHLCBCIHZhbHVlcy4NCi0NCi0gICAgQ29sb3IoSU4gQllURSByLA0KLSAgICAgICAgICBJTiBCWVRFIGcsDQotICAgICAgICAgIElOIEJZVEUgYikNCi0gICAgew0KLSAgICAgICAgQXJnYiA9IE1ha2VBUkdCKDI1NSwgciwgZywgYik7DQotICAgIH0NCi0NCi0gICAgLy8gQ29uc3RydWN0IGEgQ29sb3Igb2JqZWN0IHdpdGgNCi0gICAgLy8gdGhlIHNwZWNpZmllZCBBLCBSLCBHLCBCIHZhbHVlcy4NCi0gICAgLy8NCi0gICAgLy8gTk9URTogUiwgRywgQiBjb2xvciB2YWx1ZXMgYXJlIG5vdCBwcmVtdWx0aXBsaWVkLg0KLQ0KLSAgICBDb2xvcihJTiBCWVRFIGEsDQotICAgICAgICAgIElOIEJZVEUgciwNCi0gICAgICAgICAgSU4gQllURSBnLA0KLSAgICAgICAgICBJTiBCWVRFIGIpDQotICAgIHsNCi0gICAgICAgIEFyZ2IgPSBNYWtlQVJHQihhLCByLCBnLCBiKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBDb25zdHJ1Y3QgYSBDb2xvciBvYmplY3Qgd2l0aA0KLSAgICAvLyB0aGUgc3BlY2lmaWVkIEFSR0IgdmFsdWVzLg0KLSAgICAvLw0KLSAgICAvLyBOT1RFOiBSLCBHLCBCIGNvbG9yIGNvbXBvbmVudHMgYXJlIG5vdCBwcmVtdWx0aXBsaWVkLg0KLQ0KLSAgICBDb2xvcihJTiBBUkdCIGFyZ2IpDQotICAgIHsNCi0gICAgICAgIEFyZ2IgPSBhcmdiOw0KLSAgICB9DQotDQotICAgIC8vIEV4dHJhY3QgQSwgUiwgRywgQiBjb21wb25lbnRzDQotDQotICAgIEJZVEUgR2V0QWxwaGEoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gKEJZVEUpIChBcmdiID4+IEFscGhhU2hpZnQpOw0KLSAgICB9DQotDQotICAgIEJZVEUgR2V0QSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBHZXRBbHBoYSgpOw0KLSAgICB9DQotDQotICAgIEJZVEUgR2V0UmVkKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIChCWVRFKSAoQXJnYiA+PiBSZWRTaGlmdCk7DQotICAgIH0NCi0NCi0gICAgQllURSBHZXRSKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEdldFJlZCgpOw0KLSAgICB9DQotDQotICAgIEJZVEUgR2V0R3JlZW4oKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gKEJZVEUpIChBcmdiID4+IEdyZWVuU2hpZnQpOw0KLSAgICB9DQotDQotICAgIEJZVEUgR2V0RygpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBHZXRHcmVlbigpOw0KLSAgICB9DQotDQotICAgIEJZVEUgR2V0Qmx1ZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiAoQllURSkgKEFyZ2IgPj4gQmx1ZVNoaWZ0KTsNCi0gICAgfQ0KLQ0KLSAgICBCWVRFIEdldEIoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gR2V0Qmx1ZSgpOw0KLSAgICB9DQotDQotICAgIC8vIFJldHJpZXZlIEFSR0IgdmFsdWVzDQotDQotICAgIEFSR0IgR2V0VmFsdWUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gQXJnYjsNCi0gICAgfQ0KLQ0KLSAgICBWT0lEIFNldFZhbHVlKElOIEFSR0IgYXJnYikNCi0gICAgew0KLSAgICAgICAgQXJnYiA9IGFyZ2I7DQotICAgIH0NCi0NCi0gICAgVk9JRCBTZXRGcm9tQ09MT1JSRUYoSU4gQ09MT1JSRUYgcmdiKQ0KLSAgICB7DQotICAgICAgICBBcmdiID0gTWFrZUFSR0IoMjU1LCBHZXRSVmFsdWUocmdiKSwgR2V0R1ZhbHVlKHJnYiksIEdldEJWYWx1ZShyZ2IpKTsNCi0gICAgfQ0KLQ0KLSAgICBDT0xPUlJFRiBUb0NPTE9SUkVGKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFJHQihHZXRSZWQoKSwgR2V0R3JlZW4oKSwgR2V0Qmx1ZSgpKTsNCi0gICAgfQ0KLQ0KLXB1YmxpYzoNCi0NCi0gICAgLy8gU3RhbmRhcmQgY29sb3IgY29uc3RhbnRzDQotICAgIGVudW0NCi0gICAgew0KLSAgICAgICBCbGFjayA9IDB4ZmYwMDAwMDAsDQotICAgICAgIFNpbHZlciA9IDB4ZmZjMGMwYzAsDQotICAgICAgIEdyYXkgPSAweGZmODA4MDgwLA0KLSAgICAgICBXaGl0ZSA9IDB4ZmZmZmZmZmYsDQotICAgICAgIE1hcm9vbiA9IDB4ZmY4MDAwMDAsDQotICAgICAgIFJlZCA9IDB4ZmZmZjAwMDAsDQotICAgICAgIFB1cnBsZSA9IDB4ZmY4MDAwODAsDQotICAgICAgIEZ1Y2hzaWEgPSAweGZmZmYwMGZmLA0KLSAgICAgICBHcmVlbiA9IDB4ZmYwMDgwMDAsDQotICAgICAgIExpbWUgPSAweGZmMDBmZjAwLA0KLSAgICAgICBPbGl2ZSA9IDB4ZmY4MDgwMDAsDQotICAgICAgIFllbGxvdyA9IDB4ZmZmZmZmMDAsDQotICAgICAgIE5hdnkgPSAweGZmMDAwMDgwLA0KLSAgICAgICBCbHVlID0gMHhmZjAwMDBmZiwNCi0gICAgICAgVGVhbCA9IDB4ZmYwMDgwODAsDQotICAgICAgIEFxdWEgPSAweGZmMDBmZmZmDQotICAgIH07DQotDQotICAgIC8vIFNoaWZ0IGNvdW50IGFuZCBiaXQgbWFzayBmb3IgQSwgUiwgRywgQiBjb21wb25lbnRzDQotICAgIGVudW0NCi0gICAgew0KLSAgICAgICAgQWxwaGFTaGlmdCAgPSAyNCwNCi0gICAgICAgIFJlZFNoaWZ0ICAgID0gMTYsDQotICAgICAgICBHcmVlblNoaWZ0ICA9IDgsDQotICAgICAgICBCbHVlU2hpZnQgICA9IDANCi0gICAgfTsNCi0NCi0gICAgZW51bQ0KLSAgICB7DQotICAgICAgICBBbHBoYU1hc2sgICA9IDB4ZmYwMDAwMDAsDQotICAgICAgICBSZWRNYXNrICAgICA9IDB4MDBmZjAwMDAsDQotICAgICAgICBHcmVlbk1hc2sgICA9IDB4MDAwMGZmMDAsDQotICAgICAgICBCbHVlTWFzayAgICA9IDB4MDAwMDAwZmYNCi0gICAgfTsNCi0NCi0gICAgLy8gQXNzZW1ibGUgQSwgUiwgRywgQiB2YWx1ZXMgaW50byBhIDMyLWJpdCBpbnRlZ2VyDQotICAgIHN0YXRpYyBBUkdCIE1ha2VBUkdCKElOIEJZVEUgYSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgSU4gQllURSByLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBJTiBCWVRFIGcsDQotICAgICAgICAgICAgICAgICAgICAgICAgIElOIEJZVEUgYikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuICgoKEFSR0IpIChiKSA8PCAgQmx1ZVNoaWZ0KSB8DQotICAgICAgICAgICAgICAgICgoQVJHQikgKGcpIDw8IEdyZWVuU2hpZnQpIHwNCi0gICAgICAgICAgICAgICAgKChBUkdCKSAocikgPDwgICBSZWRTaGlmdCkgfA0KLSAgICAgICAgICAgICAgICAoKEFSR0IpIChhKSA8PCBBbHBoYVNoaWZ0KSk7DQotICAgIH0NCi0NCi1wcm90ZWN0ZWQ6DQotDQotICAgIEFSR0IgQXJnYjsNCi19Ow0KLQ0KLSNlbmRpZg0KLQ0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyoKKyogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsIE1pY3Jvc29mdCBDb3JwLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyogTW9kdWxlIE5hbWU6CisqCisqICAgR2RpcGx1c0NvbG9yLmgKKyoKKyogQWJzdHJhY3Q6CisqCisqICAgUmVwcmVzZW50cyBhIEdESSsgY29sb3IuCisqCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0dESVBMVVNDT0xPUl9ICisjZGVmaW5lIF9HRElQTFVTQ09MT1JfSAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvbG9yIG1vZGUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlbnVtIENvbG9yTW9kZQoreworICAgIENvbG9yTW9kZUFSR0IzMiA9IDAsCisgICAgQ29sb3JNb2RlQVJHQjY0ID0gMQorfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb2xvciBDaGFubmVsIGZsYWdzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZW51bSBDb2xvckNoYW5uZWxGbGFncworeworICAgIENvbG9yQ2hhbm5lbEZsYWdzQyA9IDAsCisgICAgQ29sb3JDaGFubmVsRmxhZ3NNLAorICAgIENvbG9yQ2hhbm5lbEZsYWdzWSwKKyAgICBDb2xvckNoYW5uZWxGbGFnc0ssCisgICAgQ29sb3JDaGFubmVsRmxhZ3NMYXN0Cit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvbG9yCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgQ29sb3IKK3sKK3B1YmxpYzoKKworICAgIENvbG9yKCkKKyAgICB7CisgICAgICAgIEFyZ2IgPSAoQVJHQilDb2xvcjo6QmxhY2s7CisgICAgfQorCisgICAgLy8gQ29uc3RydWN0IGFuIG9wYXF1ZSBDb2xvciBvYmplY3Qgd2l0aAorICAgIC8vIHRoZSBzcGVjaWZpZWQgUiwgRywgQiB2YWx1ZXMuCisKKyAgICBDb2xvcihJTiBCWVRFIHIsCisgICAgICAgICAgSU4gQllURSBnLAorICAgICAgICAgIElOIEJZVEUgYikKKyAgICB7CisgICAgICAgIEFyZ2IgPSBNYWtlQVJHQigyNTUsIHIsIGcsIGIpOworICAgIH0KKworICAgIC8vIENvbnN0cnVjdCBhIENvbG9yIG9iamVjdCB3aXRoCisgICAgLy8gdGhlIHNwZWNpZmllZCBBLCBSLCBHLCBCIHZhbHVlcy4KKyAgICAvLworICAgIC8vIE5PVEU6IFIsIEcsIEIgY29sb3IgdmFsdWVzIGFyZSBub3QgcHJlbXVsdGlwbGllZC4KKworICAgIENvbG9yKElOIEJZVEUgYSwKKyAgICAgICAgICBJTiBCWVRFIHIsCisgICAgICAgICAgSU4gQllURSBnLAorICAgICAgICAgIElOIEJZVEUgYikKKyAgICB7CisgICAgICAgIEFyZ2IgPSBNYWtlQVJHQihhLCByLCBnLCBiKTsKKyAgICB9CisKKyAgICAvLyBDb25zdHJ1Y3QgYSBDb2xvciBvYmplY3Qgd2l0aAorICAgIC8vIHRoZSBzcGVjaWZpZWQgQVJHQiB2YWx1ZXMuCisgICAgLy8KKyAgICAvLyBOT1RFOiBSLCBHLCBCIGNvbG9yIGNvbXBvbmVudHMgYXJlIG5vdCBwcmVtdWx0aXBsaWVkLgorCisgICAgQ29sb3IoSU4gQVJHQiBhcmdiKQorICAgIHsKKyAgICAgICAgQXJnYiA9IGFyZ2I7CisgICAgfQorCisgICAgLy8gRXh0cmFjdCBBLCBSLCBHLCBCIGNvbXBvbmVudHMKKworICAgIEJZVEUgR2V0QWxwaGEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChCWVRFKSAoQXJnYiA+PiBBbHBoYVNoaWZ0KTsKKyAgICB9CisKKyAgICBCWVRFIEdldEEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEdldEFscGhhKCk7CisgICAgfQorCisgICAgQllURSBHZXRSZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChCWVRFKSAoQXJnYiA+PiBSZWRTaGlmdCk7CisgICAgfQorCisgICAgQllURSBHZXRSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRSZWQoKTsKKyAgICB9CisKKyAgICBCWVRFIEdldEdyZWVuKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoQllURSkgKEFyZ2IgPj4gR3JlZW5TaGlmdCk7CisgICAgfQorCisgICAgQllURSBHZXRHKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRHcmVlbigpOworICAgIH0KKworICAgIEJZVEUgR2V0Qmx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKEJZVEUpIChBcmdiID4+IEJsdWVTaGlmdCk7CisgICAgfQorCisgICAgQllURSBHZXRCKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBHZXRCbHVlKCk7CisgICAgfQorCisgICAgLy8gUmV0cmlldmUgQVJHQiB2YWx1ZXMKKworICAgIEFSR0IgR2V0VmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEFyZ2I7CisgICAgfQorCisgICAgVk9JRCBTZXRWYWx1ZShJTiBBUkdCIGFyZ2IpCisgICAgeworICAgICAgICBBcmdiID0gYXJnYjsKKyAgICB9CisKKyAgICBWT0lEIFNldEZyb21DT0xPUlJFRihJTiBDT0xPUlJFRiByZ2IpCisgICAgeworICAgICAgICBBcmdiID0gTWFrZUFSR0IoMjU1LCBHZXRSVmFsdWUocmdiKSwgR2V0R1ZhbHVlKHJnYiksIEdldEJWYWx1ZShyZ2IpKTsKKyAgICB9CisKKyAgICBDT0xPUlJFRiBUb0NPTE9SUkVGKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBSR0IoR2V0UmVkKCksIEdldEdyZWVuKCksIEdldEJsdWUoKSk7CisgICAgfQorCitwdWJsaWM6CisKKyAgICAvLyBTdGFuZGFyZCBjb2xvciBjb25zdGFudHMKKyAgICBlbnVtCisgICAgeworICAgICAgIEJsYWNrID0gMHhmZjAwMDAwMCwKKyAgICAgICBTaWx2ZXIgPSAweGZmYzBjMGMwLAorICAgICAgIEdyYXkgPSAweGZmODA4MDgwLAorICAgICAgIFdoaXRlID0gMHhmZmZmZmZmZiwKKyAgICAgICBNYXJvb24gPSAweGZmODAwMDAwLAorICAgICAgIFJlZCA9IDB4ZmZmZjAwMDAsCisgICAgICAgUHVycGxlID0gMHhmZjgwMDA4MCwKKyAgICAgICBGdWNoc2lhID0gMHhmZmZmMDBmZiwKKyAgICAgICBHcmVlbiA9IDB4ZmYwMDgwMDAsCisgICAgICAgTGltZSA9IDB4ZmYwMGZmMDAsCisgICAgICAgT2xpdmUgPSAweGZmODA4MDAwLAorICAgICAgIFllbGxvdyA9IDB4ZmZmZmZmMDAsCisgICAgICAgTmF2eSA9IDB4ZmYwMDAwODAsCisgICAgICAgQmx1ZSA9IDB4ZmYwMDAwZmYsCisgICAgICAgVGVhbCA9IDB4ZmYwMDgwODAsCisgICAgICAgQXF1YSA9IDB4ZmYwMGZmZmYKKyAgICB9OworCisgICAgLy8gU2hpZnQgY291bnQgYW5kIGJpdCBtYXNrIGZvciBBLCBSLCBHLCBCIGNvbXBvbmVudHMKKyAgICBlbnVtCisgICAgeworICAgICAgICBBbHBoYVNoaWZ0ICA9IDI0LAorICAgICAgICBSZWRTaGlmdCAgICA9IDE2LAorICAgICAgICBHcmVlblNoaWZ0ICA9IDgsCisgICAgICAgIEJsdWVTaGlmdCAgID0gMAorICAgIH07CisKKyAgICBlbnVtCisgICAgeworICAgICAgICBBbHBoYU1hc2sgICA9IDB4ZmYwMDAwMDAsCisgICAgICAgIFJlZE1hc2sgICAgID0gMHgwMGZmMDAwMCwKKyAgICAgICAgR3JlZW5NYXNrICAgPSAweDAwMDBmZjAwLAorICAgICAgICBCbHVlTWFzayAgICA9IDB4MDAwMDAwZmYKKyAgICB9OworCisgICAgLy8gQXNzZW1ibGUgQSwgUiwgRywgQiB2YWx1ZXMgaW50byBhIDMyLWJpdCBpbnRlZ2VyCisgICAgc3RhdGljIEFSR0IgTWFrZUFSR0IoSU4gQllURSBhLAorICAgICAgICAgICAgICAgICAgICAgICAgIElOIEJZVEUgciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBJTiBCWVRFIGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgSU4gQllURSBiKQorICAgIHsKKyAgICAgICAgcmV0dXJuICgoKEFSR0IpIChiKSA8PCAgQmx1ZVNoaWZ0KSB8CisgICAgICAgICAgICAgICAgKChBUkdCKSAoZykgPDwgR3JlZW5TaGlmdCkgfAorICAgICAgICAgICAgICAgICgoQVJHQikgKHIpIDw8ICAgUmVkU2hpZnQpIHwKKyAgICAgICAgICAgICAgICAoKEFSR0IpIChhKSA8PCBBbHBoYVNoaWZ0KSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisKKyAgICBBUkdCIEFyZ2I7Cit9OworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0NvbG9yTWF0cml4LmggYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzQ29sb3JNYXRyaXguaAppbmRleCBkMWQ5ZWJjLi5lYzRkMTRiIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzQ29sb3JNYXRyaXguaAorKysgYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzQ29sb3JNYXRyaXguaApAQCAtMSw2MyArMSw2MyBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXA0KLSoNCi0qIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotKg0KLSogTW9kdWxlIE5hbWU6DQotKg0KLSogICBHZGlwbHVzQ29sb3JNYXRyaXguaA0KLSoNCi0qIEFic3RyYWN0Og0KLSoNCi0qICAgQ2xhc3MgZm9yIGNvbG9yIGFkanVzdG1lbnQgb2JqZWN0IHBhc3NlZCB0byBHcmFwaGljcy5EcmF3SW1hZ2UNCi0qDQotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLSNpZm5kZWYgX0dESVBMVVNDT0xPUk1BVFJJWF9IDQotI2RlZmluZSBfR0RJUExVU0NPTE9STUFUUklYX0gNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBDb2xvciBtYXRyaXgNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1zdHJ1Y3QgQ29sb3JNYXRyaXgNCi17DQotICAgIFJFQUwgbVs1XVs1XTsNCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIENvbG9yIE1hdHJpeCBmbGFncw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWVudW0gQ29sb3JNYXRyaXhGbGFncw0KLXsNCi0gICAgQ29sb3JNYXRyaXhGbGFnc0RlZmF1bHQgICA9IDAsDQotICAgIENvbG9yTWF0cml4RmxhZ3NTa2lwR3JheXMgPSAxLA0KLSAgICBDb2xvck1hdHJpeEZsYWdzQWx0R3JheSAgID0gMg0KLX07DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gQ29sb3IgQWRqdXN0IFR5cGUNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1lbnVtIENvbG9yQWRqdXN0VHlwZQ0KLXsNCi0gICAgQ29sb3JBZGp1c3RUeXBlRGVmYXVsdCwNCi0gICAgQ29sb3JBZGp1c3RUeXBlQml0bWFwLA0KLSAgICBDb2xvckFkanVzdFR5cGVCcnVzaCwNCi0gICAgQ29sb3JBZGp1c3RUeXBlUGVuLA0KLSAgICBDb2xvckFkanVzdFR5cGVUZXh0LA0KLSAgICBDb2xvckFkanVzdFR5cGVDb3VudCwgICAvLyBtdXN0IGJlIGltbWVkaWF0ZWx5IGFmdGVyIGFsbCB0aGUgaW5kaXZpZHVhbCBvbmVzDQotICAgIENvbG9yQWRqdXN0VHlwZUFueSAgICAgIC8vIGludGVybmFsIHVzZTogZm9yIHF1ZXJ5aW5nIGlmIGFueSB0eXBlIGhhcyByZWNvbG9yaW5nDQotfTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBDb2xvciBNYXANCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1zdHJ1Y3QgQ29sb3JNYXANCi17DQotICAgIENvbG9yIG9sZENvbG9yOw0KLSAgICBDb2xvciBuZXdDb2xvcjsNCi19Ow0KLQ0KLSNlbmRpZg0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyoKKyogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsIE1pY3Jvc29mdCBDb3JwLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyogTW9kdWxlIE5hbWU6CisqCisqICAgR2RpcGx1c0NvbG9yTWF0cml4LmgKKyoKKyogQWJzdHJhY3Q6CisqCisqICAgQ2xhc3MgZm9yIGNvbG9yIGFkanVzdG1lbnQgb2JqZWN0IHBhc3NlZCB0byBHcmFwaGljcy5EcmF3SW1hZ2UKKyoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfR0RJUExVU0NPTE9STUFUUklYX0gKKyNkZWZpbmUgX0dESVBMVVNDT0xPUk1BVFJJWF9ICisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ29sb3IgbWF0cml4CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworc3RydWN0IENvbG9yTWF0cml4Cit7CisgICAgUkVBTCBtWzVdWzVdOworfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb2xvciBNYXRyaXggZmxhZ3MKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlbnVtIENvbG9yTWF0cml4RmxhZ3MKK3sKKyAgICBDb2xvck1hdHJpeEZsYWdzRGVmYXVsdCAgID0gMCwKKyAgICBDb2xvck1hdHJpeEZsYWdzU2tpcEdyYXlzID0gMSwKKyAgICBDb2xvck1hdHJpeEZsYWdzQWx0R3JheSAgID0gMgorfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb2xvciBBZGp1c3QgVHlwZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VudW0gQ29sb3JBZGp1c3RUeXBlCit7CisgICAgQ29sb3JBZGp1c3RUeXBlRGVmYXVsdCwKKyAgICBDb2xvckFkanVzdFR5cGVCaXRtYXAsCisgICAgQ29sb3JBZGp1c3RUeXBlQnJ1c2gsCisgICAgQ29sb3JBZGp1c3RUeXBlUGVuLAorICAgIENvbG9yQWRqdXN0VHlwZVRleHQsCisgICAgQ29sb3JBZGp1c3RUeXBlQ291bnQsICAgLy8gbXVzdCBiZSBpbW1lZGlhdGVseSBhZnRlciBhbGwgdGhlIGluZGl2aWR1YWwgb25lcworICAgIENvbG9yQWRqdXN0VHlwZUFueSAgICAgIC8vIGludGVybmFsIHVzZTogZm9yIHF1ZXJ5aW5nIGlmIGFueSB0eXBlIGhhcyByZWNvbG9yaW5nCit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvbG9yIE1hcAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3N0cnVjdCBDb2xvck1hcAoreworICAgIENvbG9yIG9sZENvbG9yOworICAgIENvbG9yIG5ld0NvbG9yOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzRW51bXMuaCBiL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNFbnVtcy5oCmluZGV4IDkyYTI5YzcuLjk5NjJmZjUgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNFbnVtcy5oCisrKyBiL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNFbnVtcy5oCkBAIC0xLDEyNTIgKzEsMTI1MiBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXA0KLSoNCi0qIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotKg0KLSogTW9kdWxlIE5hbWU6DQotKg0KLSogICBHZGlwbHVzRW51bXMuaA0KLSoNCi0qIEFic3RyYWN0Og0KLSoNCi0qICAgVmFyaW91cyBlbnVtZXJhdGlvbiB0eXBlcw0KLSoNCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotI2lmbmRlZiBfR0RJUExVU0VOVU1TX0gNCi0jZGVmaW5lIF9HRElQTFVTRU5VTVNfSA0KLQ0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBEZWZhdWx0IGJlemllciBmbGF0dGVuaW5nIHRvbGVyYW5jZSBpbiBkZXZpY2UgcGl4ZWxzLg0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1jb25zdCBmbG9hdCBGbGF0bmVzc0RlZmF1bHQgPSAxLjBmLzQuMGY7DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEdyYXBoaWNzIGFuZCBDb250YWluZXIgU3RhdGUgY29va2llcw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi10eXBlZGVmIFVJTlQgICAgIEdyYXBoaWNzU3RhdGU7DQotdHlwZWRlZiBVSU5UICAgICBHcmFwaGljc0NvbnRhaW5lcjsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gRmlsbCBtb2RlIGNvbnN0YW50cw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1lbnVtIEZpbGxNb2RlDQotew0KLSAgICBGaWxsTW9kZUFsdGVybmF0ZSwgICAgICAgIC8vIDANCi0gICAgRmlsbE1vZGVXaW5kaW5nICAgICAgICAgICAvLyAxDQotfTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gUXVhbGl0eSBtb2RlIGNvbnN0YW50cw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1lbnVtIFF1YWxpdHlNb2RlDQotew0KLSAgICBRdWFsaXR5TW9kZUludmFsaWQgICA9IC0xLA0KLSAgICBRdWFsaXR5TW9kZURlZmF1bHQgICA9IDAsDQotICAgIFF1YWxpdHlNb2RlTG93ICAgICAgID0gMSwgLy8gZm9yIGFwcHMgdGhhdCBuZWVkIHRoZSBiZXN0IHBlcmZvcm1hbmNlDQotICAgIFF1YWxpdHlNb2RlSGlnaCAgICAgID0gMiAgLy8gZm9yIGFwcHMgdGhhdCBuZWVkIHRoZSBiZXN0IHJlbmRlcmluZyBxdWFsaXR5DQotfTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gQWxwaGEgY29tcG9zaXRpbmcgbW9kZSBjb25zdGFudHMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotZW51bSBDb21wb3NpdGluZ01vZGUNCi17DQotICAgIENvbXBvc2l0aW5nTW9kZVNvdXJjZU92ZXIsICAgIC8vIDANCi0gICAgQ29tcG9zaXRpbmdNb2RlU291cmNlQ29weSAgICAgLy8gMQ0KLX07DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEFscGhhIGNvbXBvc2l0aW5nIHF1YWxpdHkgY29uc3RhbnRzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWVudW0gQ29tcG9zaXRpbmdRdWFsaXR5DQotew0KLSAgICBDb21wb3NpdGluZ1F1YWxpdHlJbnZhbGlkICAgICAgICAgID0gUXVhbGl0eU1vZGVJbnZhbGlkLA0KLSAgICBDb21wb3NpdGluZ1F1YWxpdHlEZWZhdWx0ICAgICAgICAgID0gUXVhbGl0eU1vZGVEZWZhdWx0LA0KLSAgICBDb21wb3NpdGluZ1F1YWxpdHlIaWdoU3BlZWQgICAgICAgID0gUXVhbGl0eU1vZGVMb3csDQotICAgIENvbXBvc2l0aW5nUXVhbGl0eUhpZ2hRdWFsaXR5ICAgICAgPSBRdWFsaXR5TW9kZUhpZ2gsDQotICAgIENvbXBvc2l0aW5nUXVhbGl0eUdhbW1hQ29ycmVjdGVkLA0KLSAgICBDb21wb3NpdGluZ1F1YWxpdHlBc3N1bWVMaW5lYXINCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBVbml0IGNvbnN0YW50cw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1lbnVtIFVuaXQNCi17DQotICAgIFVuaXRXb3JsZCwgICAgICAvLyAwIC0tIFdvcmxkIGNvb3JkaW5hdGUgKG5vbi1waHlzaWNhbCB1bml0KQ0KLSAgICBVbml0RGlzcGxheSwgICAgLy8gMSAtLSBWYXJpYWJsZSAtLSBmb3IgUGFnZVRyYW5zZm9ybSBvbmx5DQotICAgIFVuaXRQaXhlbCwgICAgICAvLyAyIC0tIEVhY2ggdW5pdCBpcyBvbmUgZGV2aWNlIHBpeGVsLg0KLSAgICBVbml0UG9pbnQsICAgICAgLy8gMyAtLSBFYWNoIHVuaXQgaXMgYSBwcmludGVyJ3MgcG9pbnQsIG9yIDEvNzIgaW5jaC4NCi0gICAgVW5pdEluY2gsICAgICAgIC8vIDQgLS0gRWFjaCB1bml0IGlzIDEgaW5jaC4NCi0gICAgVW5pdERvY3VtZW50LCAgIC8vIDUgLS0gRWFjaCB1bml0IGlzIDEvMzAwIGluY2guDQotICAgIFVuaXRNaWxsaW1ldGVyICAvLyA2IC0tIEVhY2ggdW5pdCBpcyAxIG1pbGxpbWV0ZXIuDQotfTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gTWV0YWZpbGVGcmFtZVVuaXQNCi0vLw0KLS8vIFRoZSBmcmFtZVJlY3QgZm9yIGNyZWF0aW5nIGEgbWV0YWZpbGUgY2FuIGJlIHNwZWNpZmllZCBpbiBhbnkgb2YgdGhlc2UNCi0vLyB1bml0cy4gIFRoZXJlIGlzIGFuIGV4dHJhIGZyYW1lIHVuaXQgdmFsdWUgKE1ldGFmaWxlRnJhbWVVbml0R2RpKSBzbw0KLS8vIHRoYXQgdW5pdHMgY2FuIGJlIHN1cHBsaWVkIGluIHRoZSBzYW1lIHVuaXRzIHRoYXQgR0RJIGV4cGVjdHMgZm9yDQotLy8gZnJhbWUgcmVjdHMgLS0gdGhlc2UgdW5pdHMgYXJlIGluIC4wMSAoMS8xMDB0aHMpIG1pbGxpbWV0ZXIgdW5pdHMNCi0vLyBhcyBkZWZpbmVkIGJ5IEdESS4NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotZW51bSBNZXRhZmlsZUZyYW1lVW5pdA0KLXsNCi0gICAgTWV0YWZpbGVGcmFtZVVuaXRQaXhlbCAgICAgID0gVW5pdFBpeGVsLA0KLSAgICBNZXRhZmlsZUZyYW1lVW5pdFBvaW50ICAgICAgPSBVbml0UG9pbnQsDQotICAgIE1ldGFmaWxlRnJhbWVVbml0SW5jaCAgICAgICA9IFVuaXRJbmNoLA0KLSAgICBNZXRhZmlsZUZyYW1lVW5pdERvY3VtZW50ICAgPSBVbml0RG9jdW1lbnQsDQotICAgIE1ldGFmaWxlRnJhbWVVbml0TWlsbGltZXRlciA9IFVuaXRNaWxsaW1ldGVyLA0KLSAgICBNZXRhZmlsZUZyYW1lVW5pdEdkaSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdESSBjb21wYXRpYmxlIC4wMSBNTSB1bml0cw0KLX07DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIENvb3JkaW5hdGUgc3BhY2UgaWRlbnRpZmllcnMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotZW51bSBDb29yZGluYXRlU3BhY2UNCi17DQotICAgIENvb3JkaW5hdGVTcGFjZVdvcmxkLCAgICAgLy8gMA0KLSAgICBDb29yZGluYXRlU3BhY2VQYWdlLCAgICAgIC8vIDENCi0gICAgQ29vcmRpbmF0ZVNwYWNlRGV2aWNlICAgICAvLyAyDQotfTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gVmFyaW91cyB3cmFwIG1vZGVzIGZvciBicnVzaGVzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWVudW0gV3JhcE1vZGUNCi17DQotICAgIFdyYXBNb2RlVGlsZSwgICAgICAgIC8vIDANCi0gICAgV3JhcE1vZGVUaWxlRmxpcFgsICAgLy8gMQ0KLSAgICBXcmFwTW9kZVRpbGVGbGlwWSwgICAvLyAyDQotICAgIFdyYXBNb2RlVGlsZUZsaXBYWSwgIC8vIDMNCi0gICAgV3JhcE1vZGVDbGFtcCAgICAgICAgLy8gNA0KLX07DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIFZhcmlvdXMgaGF0Y2ggc3R5bGVzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWVudW0gSGF0Y2hTdHlsZQ0KLXsNCi0gICAgSGF0Y2hTdHlsZUhvcml6b250YWwsICAgICAgICAgICAgICAgICAgIC8vIDANCi0gICAgSGF0Y2hTdHlsZVZlcnRpY2FsLCAgICAgICAgICAgICAgICAgICAgIC8vIDENCi0gICAgSGF0Y2hTdHlsZUZvcndhcmREaWFnb25hbCwgICAgICAgICAgICAgIC8vIDINCi0gICAgSGF0Y2hTdHlsZUJhY2t3YXJkRGlhZ29uYWwsICAgICAgICAgICAgIC8vIDMNCi0gICAgSGF0Y2hTdHlsZUNyb3NzLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDQNCi0gICAgSGF0Y2hTdHlsZURpYWdvbmFsQ3Jvc3MsICAgICAgICAgICAgICAgIC8vIDUNCi0gICAgSGF0Y2hTdHlsZTA1UGVyY2VudCwgICAgICAgICAgICAgICAgICAgIC8vIDYNCi0gICAgSGF0Y2hTdHlsZTEwUGVyY2VudCwgICAgICAgICAgICAgICAgICAgIC8vIDcNCi0gICAgSGF0Y2hTdHlsZTIwUGVyY2VudCwgICAgICAgICAgICAgICAgICAgIC8vIDgNCi0gICAgSGF0Y2hTdHlsZTI1UGVyY2VudCwgICAgICAgICAgICAgICAgICAgIC8vIDkNCi0gICAgSGF0Y2hTdHlsZTMwUGVyY2VudCwgICAgICAgICAgICAgICAgICAgIC8vIDEwDQotICAgIEhhdGNoU3R5bGU0MFBlcmNlbnQsICAgICAgICAgICAgICAgICAgICAvLyAxMQ0KLSAgICBIYXRjaFN0eWxlNTBQZXJjZW50LCAgICAgICAgICAgICAgICAgICAgLy8gMTINCi0gICAgSGF0Y2hTdHlsZTYwUGVyY2VudCwgICAgICAgICAgICAgICAgICAgIC8vIDEzDQotICAgIEhhdGNoU3R5bGU3MFBlcmNlbnQsICAgICAgICAgICAgICAgICAgICAvLyAxNA0KLSAgICBIYXRjaFN0eWxlNzVQZXJjZW50LCAgICAgICAgICAgICAgICAgICAgLy8gMTUNCi0gICAgSGF0Y2hTdHlsZTgwUGVyY2VudCwgICAgICAgICAgICAgICAgICAgIC8vIDE2DQotICAgIEhhdGNoU3R5bGU5MFBlcmNlbnQsICAgICAgICAgICAgICAgICAgICAvLyAxNw0KLSAgICBIYXRjaFN0eWxlTGlnaHREb3dud2FyZERpYWdvbmFsLCAgICAgICAgLy8gMTgNCi0gICAgSGF0Y2hTdHlsZUxpZ2h0VXB3YXJkRGlhZ29uYWwsICAgICAgICAgIC8vIDE5DQotICAgIEhhdGNoU3R5bGVEYXJrRG93bndhcmREaWFnb25hbCwgICAgICAgICAvLyAyMA0KLSAgICBIYXRjaFN0eWxlRGFya1Vwd2FyZERpYWdvbmFsLCAgICAgICAgICAgLy8gMjENCi0gICAgSGF0Y2hTdHlsZVdpZGVEb3dud2FyZERpYWdvbmFsLCAgICAgICAgIC8vIDIyDQotICAgIEhhdGNoU3R5bGVXaWRlVXB3YXJkRGlhZ29uYWwsICAgICAgICAgICAvLyAyMw0KLSAgICBIYXRjaFN0eWxlTGlnaHRWZXJ0aWNhbCwgICAgICAgICAgICAgICAgLy8gMjQNCi0gICAgSGF0Y2hTdHlsZUxpZ2h0SG9yaXpvbnRhbCwgICAgICAgICAgICAgIC8vIDI1DQotICAgIEhhdGNoU3R5bGVOYXJyb3dWZXJ0aWNhbCwgICAgICAgICAgICAgICAvLyAyNg0KLSAgICBIYXRjaFN0eWxlTmFycm93SG9yaXpvbnRhbCwgICAgICAgICAgICAgLy8gMjcNCi0gICAgSGF0Y2hTdHlsZURhcmtWZXJ0aWNhbCwgICAgICAgICAgICAgICAgIC8vIDI4DQotICAgIEhhdGNoU3R5bGVEYXJrSG9yaXpvbnRhbCwgICAgICAgICAgICAgICAvLyAyOQ0KLSAgICBIYXRjaFN0eWxlRGFzaGVkRG93bndhcmREaWFnb25hbCwgICAgICAgLy8gMzANCi0gICAgSGF0Y2hTdHlsZURhc2hlZFVwd2FyZERpYWdvbmFsLCAgICAgICAgIC8vIDMxDQotICAgIEhhdGNoU3R5bGVEYXNoZWRIb3Jpem9udGFsLCAgICAgICAgICAgICAvLyAzMg0KLSAgICBIYXRjaFN0eWxlRGFzaGVkVmVydGljYWwsICAgICAgICAgICAgICAgLy8gMzMNCi0gICAgSGF0Y2hTdHlsZVNtYWxsQ29uZmV0dGksICAgICAgICAgICAgICAgIC8vIDM0DQotICAgIEhhdGNoU3R5bGVMYXJnZUNvbmZldHRpLCAgICAgICAgICAgICAgICAvLyAzNQ0KLSAgICBIYXRjaFN0eWxlWmlnWmFnLCAgICAgICAgICAgICAgICAgICAgICAgLy8gMzYNCi0gICAgSGF0Y2hTdHlsZVdhdmUsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDM3DQotICAgIEhhdGNoU3R5bGVEaWFnb25hbEJyaWNrLCAgICAgICAgICAgICAgICAvLyAzOA0KLSAgICBIYXRjaFN0eWxlSG9yaXpvbnRhbEJyaWNrLCAgICAgICAgICAgICAgLy8gMzkNCi0gICAgSGF0Y2hTdHlsZVdlYXZlLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDQwDQotICAgIEhhdGNoU3R5bGVQbGFpZCwgICAgICAgICAgICAgICAgICAgICAgICAvLyA0MQ0KLSAgICBIYXRjaFN0eWxlRGl2b3QsICAgICAgICAgICAgICAgICAgICAgICAgLy8gNDINCi0gICAgSGF0Y2hTdHlsZURvdHRlZEdyaWQsICAgICAgICAgICAgICAgICAgIC8vIDQzDQotICAgIEhhdGNoU3R5bGVEb3R0ZWREaWFtb25kLCAgICAgICAgICAgICAgICAvLyA0NA0KLSAgICBIYXRjaFN0eWxlU2hpbmdsZSwgICAgICAgICAgICAgICAgICAgICAgLy8gNDUNCi0gICAgSGF0Y2hTdHlsZVRyZWxsaXMsICAgICAgICAgICAgICAgICAgICAgIC8vIDQ2DQotICAgIEhhdGNoU3R5bGVTcGhlcmUsICAgICAgICAgICAgICAgICAgICAgICAvLyA0Nw0KLSAgICBIYXRjaFN0eWxlU21hbGxHcmlkLCAgICAgICAgICAgICAgICAgICAgLy8gNDgNCi0gICAgSGF0Y2hTdHlsZVNtYWxsQ2hlY2tlckJvYXJkLCAgICAgICAgICAgIC8vIDQ5DQotICAgIEhhdGNoU3R5bGVMYXJnZUNoZWNrZXJCb2FyZCwgICAgICAgICAgICAvLyA1MA0KLSAgICBIYXRjaFN0eWxlT3V0bGluZWREaWFtb25kLCAgICAgICAgICAgICAgLy8gNTENCi0gICAgSGF0Y2hTdHlsZVNvbGlkRGlhbW9uZCwgICAgICAgICAgICAgICAgIC8vIDUyDQotDQotICAgIEhhdGNoU3R5bGVUb3RhbCwgICAgLy8gbXVzdCBiZSBhZnRlciBhbGwgdW5pcXVlIGhhdGNoIHN0eWxlcw0KLQ0KLSAgICBIYXRjaFN0eWxlTGFyZ2VHcmlkID0gSGF0Y2hTdHlsZUNyb3NzLCAgLy8gNCAgYW4gYWxpYXMgZm9yIHRoZSBjcm9zcyBzdHlsZQ0KLQ0KLSAgICBIYXRjaFN0eWxlTWluICAgICAgID0gSGF0Y2hTdHlsZUhvcml6b250YWwsDQotICAgIEhhdGNoU3R5bGVNYXggICAgICAgPSBIYXRjaFN0eWxlVG90YWwgLSAxLA0KLX07DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIERhc2ggc3R5bGUgY29uc3RhbnRzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWVudW0gRGFzaFN0eWxlDQotew0KLSAgICBEYXNoU3R5bGVTb2xpZCwgICAgICAgICAgLy8gMA0KLSAgICBEYXNoU3R5bGVEYXNoLCAgICAgICAgICAgLy8gMQ0KLSAgICBEYXNoU3R5bGVEb3QsICAgICAgICAgICAgLy8gMg0KLSAgICBEYXNoU3R5bGVEYXNoRG90LCAgICAgICAgLy8gMw0KLSAgICBEYXNoU3R5bGVEYXNoRG90RG90LCAgICAgLy8gNA0KLSAgICBEYXNoU3R5bGVDdXN0b20gICAgICAgICAgLy8gNQ0KLX07DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIERhc2ggY2FwIGNvbnN0YW50cw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1lbnVtIERhc2hDYXANCi17DQotICAgIERhc2hDYXBGbGF0ICAgICAgICAgICAgID0gMCwNCi0gICAgRGFzaENhcFJvdW5kICAgICAgICAgICAgPSAyLA0KLSAgICBEYXNoQ2FwVHJpYW5nbGUgICAgICAgICA9IDMNCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBMaW5lIGNhcCBjb25zdGFudHMgKG9ubHkgdGhlIGxvd2VzdCA4IGJpdHMgYXJlIHVzZWQpLg0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1lbnVtIExpbmVDYXANCi17DQotICAgIExpbmVDYXBGbGF0ICAgICAgICAgICAgID0gMCwNCi0gICAgTGluZUNhcFNxdWFyZSAgICAgICAgICAgPSAxLA0KLSAgICBMaW5lQ2FwUm91bmQgICAgICAgICAgICA9IDIsDQotICAgIExpbmVDYXBUcmlhbmdsZSAgICAgICAgID0gMywNCi0NCi0gICAgTGluZUNhcE5vQW5jaG9yICAgICAgICAgPSAweDEwLCAvLyBjb3JyZXNwb25kcyB0byBmbGF0IGNhcA0KLSAgICBMaW5lQ2FwU3F1YXJlQW5jaG9yICAgICA9IDB4MTEsIC8vIGNvcnJlc3BvbmRzIHRvIHNxdWFyZSBjYXANCi0gICAgTGluZUNhcFJvdW5kQW5jaG9yICAgICAgPSAweDEyLCAvLyBjb3JyZXNwb25kcyB0byByb3VuZCBjYXANCi0gICAgTGluZUNhcERpYW1vbmRBbmNob3IgICAgPSAweDEzLCAvLyBjb3JyZXNwb25kcyB0byB0cmlhbmdsZSBjYXANCi0gICAgTGluZUNhcEFycm93QW5jaG9yICAgICAgPSAweDE0LCAvLyBubyBjb3JyZXNwb25kZW5jZQ0KLQ0KLSAgICBMaW5lQ2FwQ3VzdG9tICAgICAgICAgICA9IDB4ZmYsIC8vIGN1c3RvbSBjYXANCi0NCi0gICAgTGluZUNhcEFuY2hvck1hc2sgICAgICAgPSAweGYwICAvLyBtYXNrIHRvIGNoZWNrIGZvciBhbmNob3Igb3Igbm90Lg0KLX07DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEN1c3RvbSBMaW5lIGNhcCB0eXBlIGNvbnN0YW50cw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1lbnVtIEN1c3RvbUxpbmVDYXBUeXBlDQotew0KLSAgICBDdXN0b21MaW5lQ2FwVHlwZURlZmF1bHQgICAgICAgICA9IDAsDQotICAgIEN1c3RvbUxpbmVDYXBUeXBlQWRqdXN0YWJsZUFycm93ID0gMQ0KLX07DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIExpbmUgam9pbiBjb25zdGFudHMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotZW51bSBMaW5lSm9pbg0KLXsNCi0gICAgTGluZUpvaW5NaXRlciAgICAgICAgPSAwLA0KLSAgICBMaW5lSm9pbkJldmVsICAgICAgICA9IDEsDQotICAgIExpbmVKb2luUm91bmQgICAgICAgID0gMiwNCi0gICAgTGluZUpvaW5NaXRlckNsaXBwZWQgPSAzDQotfTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gUGF0aCBwb2ludCB0eXBlcyAob25seSB0aGUgbG93ZXN0IDggYml0cyBhcmUgdXNlZC4pDQotLy8gIFRoZSBsb3dlc3QgMyBiaXRzIGFyZSBpbnRlcnByZXRlZCBhcyBwb2ludCB0eXBlDQotLy8gIFRoZSBoaWdoZXIgNSBiaXRzIGFyZSByZXNlcnZlZCBmb3IgZmxhZ3MuDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWVudW0gUGF0aFBvaW50VHlwZQ0KLXsNCi0gICAgUGF0aFBvaW50VHlwZVN0YXJ0ICAgICAgICAgICA9IDAsICAgIC8vIG1vdmUNCi0gICAgUGF0aFBvaW50VHlwZUxpbmUgICAgICAgICAgICA9IDEsICAgIC8vIGxpbmUNCi0gICAgUGF0aFBvaW50VHlwZUJlemllciAgICAgICAgICA9IDMsICAgIC8vIGRlZmF1bHQgQmVpemVyICg9IGN1YmljIEJlemllcikNCi0gICAgUGF0aFBvaW50VHlwZVBhdGhUeXBlTWFzayAgICA9IDB4MDcsIC8vIHR5cGUgbWFzayAobG93ZXN0IDMgYml0cykuDQotICAgIFBhdGhQb2ludFR5cGVEYXNoTW9kZSAgICAgICAgPSAweDEwLCAvLyBjdXJyZW50bHkgaW4gZGFzaCBtb2RlLg0KLSAgICBQYXRoUG9pbnRUeXBlUGF0aE1hcmtlciAgICAgID0gMHgyMCwgLy8gYSBtYXJrZXIgZm9yIHRoZSBwYXRoLg0KLSAgICBQYXRoUG9pbnRUeXBlQ2xvc2VTdWJwYXRoICAgID0gMHg4MCwgLy8gY2xvc2VkIGZsYWcNCi0NCi0gICAgLy8gUGF0aCB0eXBlcyB1c2VkIGZvciBhZHZhbmNlZCBwYXRoLg0KLQ0KLSAgICBQYXRoUG9pbnRUeXBlQmV6aWVyMiAgICA9IDIsICAgIC8vIHF1YWRyYXRpYyBCZWl6ZXINCi0gICAgUGF0aFBvaW50VHlwZUJlemllcjMgICAgPSAzLCAgICAvLyBjdWJpYyBCZXppZXINCi0gICAgUGF0aFBvaW50VHlwZUJlemllcjQgICAgPSA0LCAgICAvLyBxdWFydGljICg0dGggb3JkZXIpIEJlaXplcg0KLSAgICBQYXRoUG9pbnRUeXBlQmV6aWVyNSAgICA9IDUsICAgIC8vIHF1aW50aWMgKDV0aCBvcmRlcikgQmV6aWVyDQotICAgIFBhdGhQb2ludFR5cGVCZXppZXI2ICAgID0gNiAgICAgLy8gaGV4YWljICg2dGggb3JkZXIpIEJlemllcg0KLX07DQotDQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIFdhcnBNb2RlIGNvbnN0YW50cw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1lbnVtIFdhcnBNb2RlDQotew0KLSAgICBXYXJwTW9kZVBlcnNwZWN0aXZlLCAgICAvLyAwDQotICAgIFdhcnBNb2RlQmlsaW5lYXIgICAgICAgIC8vIDENCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBMaW5lR3JhZGllbnQgTW9kZQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1lbnVtIExpbmVhckdyYWRpZW50TW9kZQ0KLXsNCi0gICAgTGluZWFyR3JhZGllbnRNb2RlSG9yaXpvbnRhbCwgICAgICAgICAvLyAwDQotICAgIExpbmVhckdyYWRpZW50TW9kZVZlcnRpY2FsLCAgICAgICAgICAgLy8gMQ0KLSAgICBMaW5lYXJHcmFkaWVudE1vZGVGb3J3YXJkRGlhZ29uYWwsICAgIC8vIDINCi0gICAgTGluZWFyR3JhZGllbnRNb2RlQmFja3dhcmREaWFnb25hbCAgICAvLyAzDQotfTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gUmVnaW9uIENvbWluZSBNb2Rlcw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1lbnVtIENvbWJpbmVNb2RlDQotew0KLSAgICBDb21iaW5lTW9kZVJlcGxhY2UsICAgICAvLyAwDQotICAgIENvbWJpbmVNb2RlSW50ZXJzZWN0LCAgIC8vIDENCi0gICAgQ29tYmluZU1vZGVVbmlvbiwgICAgICAgLy8gMg0KLSAgICBDb21iaW5lTW9kZVhvciwgICAgICAgICAvLyAzDQotICAgIENvbWJpbmVNb2RlRXhjbHVkZSwgICAgIC8vIDQNCi0gICAgQ29tYmluZU1vZGVDb21wbGVtZW50ICAgLy8gNSAoZG9lcyBleGNsdWRlIGZyb20pDQotfTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotIC8vIEltYWdlIHR5cGVzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWVudW0gSW1hZ2VUeXBlDQotew0KLSAgICBJbWFnZVR5cGVVbmtub3duLCAgIC8vIDANCi0gICAgSW1hZ2VUeXBlQml0bWFwLCAgICAvLyAxDQotICAgIEltYWdlVHlwZU1ldGFmaWxlICAgLy8gMg0KLX07DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEludGVycG9sYXRpb24gbW9kZXMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotZW51bSBJbnRlcnBvbGF0aW9uTW9kZQ0KLXsNCi0gICAgSW50ZXJwb2xhdGlvbk1vZGVJbnZhbGlkICAgICAgICAgID0gUXVhbGl0eU1vZGVJbnZhbGlkLA0KLSAgICBJbnRlcnBvbGF0aW9uTW9kZURlZmF1bHQgICAgICAgICAgPSBRdWFsaXR5TW9kZURlZmF1bHQsDQotICAgIEludGVycG9sYXRpb25Nb2RlTG93UXVhbGl0eSAgICAgICA9IFF1YWxpdHlNb2RlTG93LA0KLSAgICBJbnRlcnBvbGF0aW9uTW9kZUhpZ2hRdWFsaXR5ICAgICAgPSBRdWFsaXR5TW9kZUhpZ2gsDQotICAgIEludGVycG9sYXRpb25Nb2RlQmlsaW5lYXIsDQotICAgIEludGVycG9sYXRpb25Nb2RlQmljdWJpYywNCi0gICAgSW50ZXJwb2xhdGlvbk1vZGVOZWFyZXN0TmVpZ2hib3IsDQotICAgIEludGVycG9sYXRpb25Nb2RlSGlnaFF1YWxpdHlCaWxpbmVhciwNCi0gICAgSW50ZXJwb2xhdGlvbk1vZGVIaWdoUXVhbGl0eUJpY3ViaWMNCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBQZW4gdHlwZXMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotZW51bSBQZW5BbGlnbm1lbnQNCi17DQotICAgIFBlbkFsaWdubWVudENlbnRlciAgICAgICA9IDAsDQotICAgIFBlbkFsaWdubWVudEluc2V0ICAgICAgICA9IDEsDQotICAgIFBlbkFsaWdubWVudE91dHNldCAgICAgICA9IDIsDQotICAgIFBlbkFsaWdubWVudExlZnQgICAgICAgICA9IDMsDQotICAgIFBlbkFsaWdubWVudFJpZ2h0ICAgICAgICA9IDQNCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBCcnVzaCB0eXBlcw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1lbnVtIEJydXNoVHlwZQ0KLXsNCi0gICBCcnVzaFR5cGVTb2xpZENvbG9yICAgICAgID0gMCwNCi0gICBCcnVzaFR5cGVIYXRjaEZpbGwgICAgICAgID0gMSwNCi0gICBCcnVzaFR5cGVUZXh0dXJlRmlsbCAgICAgID0gMiwNCi0gICBCcnVzaFR5cGVQYXRoR3JhZGllbnQgICAgID0gMywNCi0gICBCcnVzaFR5cGVMaW5lYXJHcmFkaWVudCAgID0gNA0KLX07DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIFBlbidzIEZpbGwgdHlwZXMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotZW51bSBQZW5UeXBlDQotew0KLSAgIFBlblR5cGVTb2xpZENvbG9yICAgICAgID0gQnJ1c2hUeXBlU29saWRDb2xvciwNCi0gICBQZW5UeXBlSGF0Y2hGaWxsICAgICAgICA9IEJydXNoVHlwZUhhdGNoRmlsbCwNCi0gICBQZW5UeXBlVGV4dHVyZUZpbGwgICAgICA9IEJydXNoVHlwZVRleHR1cmVGaWxsLA0KLSAgIFBlblR5cGVQYXRoR3JhZGllbnQgICAgID0gQnJ1c2hUeXBlUGF0aEdyYWRpZW50LA0KLSAgIFBlblR5cGVMaW5lYXJHcmFkaWVudCAgID0gQnJ1c2hUeXBlTGluZWFyR3JhZGllbnQsDQotICAgUGVuVHlwZVVua25vd24gICAgICAgICAgPSAtMQ0KLX07DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIE1hdHJpeCBPcmRlcg0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1lbnVtIE1hdHJpeE9yZGVyDQotew0KLSAgICBNYXRyaXhPcmRlclByZXBlbmQgICAgPSAwLA0KLSAgICBNYXRyaXhPcmRlckFwcGVuZCAgICAgPSAxDQotfTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gR2VuZXJpYyBmb250IGZhbWlsaWVzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWVudW0gR2VuZXJpY0ZvbnRGYW1pbHkNCi17DQotICAgIEdlbmVyaWNGb250RmFtaWx5U2VyaWYsDQotICAgIEdlbmVyaWNGb250RmFtaWx5U2Fuc1NlcmlmLA0KLSAgICBHZW5lcmljRm9udEZhbWlseU1vbm9zcGFjZQ0KLQ0KLX07DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEZvbnRTdHlsZTogZmFjZSB0eXBlcyBhbmQgY29tbW9uIHN0eWxlcw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi0vLyAgVGhlc2Ugc2hvdWxkIHByb2JhYmx5IGJlIGZsYWdzDQotDQotLy8gIE11c3QgaGF2ZToNCi0vLyAgICAgIFJlZ3VsYXIgPSAwDQotLy8gICAgICBCb2xkID0gMQ0KLS8vICAgICAgSXRhbGljID0gMg0KLS8vICAgICAgQm9sZEl0YWxpYyA9IDMNCi0NCi1lbnVtIEZvbnRTdHlsZQ0KLXsNCi0gICAgRm9udFN0eWxlUmVndWxhciAgICA9IDAsDQotICAgIEZvbnRTdHlsZUJvbGQgICAgICAgPSAxLA0KLSAgICBGb250U3R5bGVJdGFsaWMgICAgID0gMiwNCi0gICAgRm9udFN0eWxlQm9sZEl0YWxpYyA9IDMsDQotICAgIEZvbnRTdHlsZVVuZGVybGluZSAgPSA0LA0KLSAgICBGb250U3R5bGVTdHJpa2VvdXQgID0gOA0KLX07DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBTbW9vdGhpbmcgTW9kZQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotZW51bSBTbW9vdGhpbmdNb2RlDQotew0KLSAgICBTbW9vdGhpbmdNb2RlSW52YWxpZCAgICAgPSBRdWFsaXR5TW9kZUludmFsaWQsDQotICAgIFNtb290aGluZ01vZGVEZWZhdWx0ICAgICA9IFF1YWxpdHlNb2RlRGVmYXVsdCwNCi0gICAgU21vb3RoaW5nTW9kZUhpZ2hTcGVlZCAgID0gUXVhbGl0eU1vZGVMb3csDQotICAgIFNtb290aGluZ01vZGVIaWdoUXVhbGl0eSA9IFF1YWxpdHlNb2RlSGlnaCwNCi0gICAgU21vb3RoaW5nTW9kZU5vbmUsDQotICAgIFNtb290aGluZ01vZGVBbnRpQWxpYXMNCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gUGl4ZWwgRm9ybWF0IE1vZGUNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWVudW0gUGl4ZWxPZmZzZXRNb2RlDQotew0KLSAgICBQaXhlbE9mZnNldE1vZGVJbnZhbGlkICAgICA9IFF1YWxpdHlNb2RlSW52YWxpZCwNCi0gICAgUGl4ZWxPZmZzZXRNb2RlRGVmYXVsdCAgICAgPSBRdWFsaXR5TW9kZURlZmF1bHQsDQotICAgIFBpeGVsT2Zmc2V0TW9kZUhpZ2hTcGVlZCAgID0gUXVhbGl0eU1vZGVMb3csDQotICAgIFBpeGVsT2Zmc2V0TW9kZUhpZ2hRdWFsaXR5ID0gUXVhbGl0eU1vZGVIaWdoLA0KLSAgICBQaXhlbE9mZnNldE1vZGVOb25lLCAgICAvLyBubyBwaXhlbCBvZmZzZXQNCi0gICAgUGl4ZWxPZmZzZXRNb2RlSGFsZiAgICAgLy8gb2Zmc2V0IGJ5IC0wLjUsIC0wLjUgZm9yIGZhc3QgYW50aS1hbGlhcyBwZXJmDQotfTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIFRleHQgUmVuZGVyaW5nIEhpbnQNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWVudW0gVGV4dFJlbmRlcmluZ0hpbnQNCi17DQotI2lmZGVmIERDUl9VU0VfTkVXXzE4Njc2NA0KLSAgICBUZXh0UmVuZGVyaW5nSGludFN5c3RlbURlZmF1bHQgPSAwLCAgICAgICAgICAgIC8vIEdseXBoIHdpdGggc3lzdGVtIGRlZmF1bHQgcmVuZGVyaW5nIGhpbnQNCi0gICAgVGV4dFJlbmRlcmluZ0hpbnRTaW5nbGVCaXRQZXJQaXhlbEdyaWRGaXQsICAgICAvLyBHbHlwaCBiaXRtYXAgd2l0aCBoaW50aW5nDQotI2Vsc2UNCi0gICAgVGV4dFJlbmRlcmluZ0hpbnRTaW5nbGVCaXRQZXJQaXhlbEdyaWRGaXQgPSAwLCAvLyBHbHlwaCBiaXRtYXAgd2l0aCBoaW50aW5nDQotI2VuZGlmIC8vIERDUl9VU0VfTkVXXzE4Njc2NA0KLSAgICBUZXh0UmVuZGVyaW5nSGludFNpbmdsZUJpdFBlclBpeGVsLCAgICAgICAgICAgIC8vIEdseXBoIGJpdG1hcCB3aXRob3V0IGhpbnRpbmcNCi0gICAgVGV4dFJlbmRlcmluZ0hpbnRBbnRpQWxpYXNHcmlkRml0LCAgICAgICAgICAgICAvLyBHbHlwaCBhbnRpLWFsaWFzIGJpdG1hcCB3aXRoIGhpbnRpbmcNCi0gICAgVGV4dFJlbmRlcmluZ0hpbnRBbnRpQWxpYXMsICAgICAgICAgICAgICAgICAgICAvLyBHbHlwaCBhbnRpLWFsaWFzIGJpdG1hcCB3aXRob3V0IGhpbnRpbmcNCi0gICAgVGV4dFJlbmRlcmluZ0hpbnRDbGVhclR5cGVHcmlkRml0ICAgICAgICAgICAgICAvLyBHbHlwaCBDVCBiaXRtYXAgd2l0aCBoaW50aW5nDQotfTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIE1ldGFmaWxlIFR5cGVzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi1lbnVtIE1ldGFmaWxlVHlwZQ0KLXsNCi0gICAgTWV0YWZpbGVUeXBlSW52YWxpZCwgICAgICAgICAgICAvLyBJbnZhbGlkIG1ldGFmaWxlDQotICAgIE1ldGFmaWxlVHlwZVdtZiwgICAgICAgICAgICAgICAgLy8gU3RhbmRhcmQgV01GDQotICAgIE1ldGFmaWxlVHlwZVdtZkFsZHVzLCAgICAgICAgICAgLy8gQWxkdXMgUGxhY2VhYmxlIE1ldGFmaWxlIGZvcm1hdA0KLSAgICBNZXRhZmlsZVR5cGVFbWYsICAgICAgICAgICAgICAgIC8vIEVNRiAobm90IEVNRispDQotICAgIE1ldGFmaWxlVHlwZUVtZlBsdXNPbmx5LCAgICAgICAgLy8gRU1GKyB3aXRob3V0IGR1YWwsIGRvd24tbGV2ZWwgcmVjb3Jkcw0KLSAgICBNZXRhZmlsZVR5cGVFbWZQbHVzRHVhbCAgICAgICAgIC8vIEVNRisgd2l0aCBkdWFsLCBkb3duLWxldmVsIHJlY29yZHMNCi19Ow0KLQ0KLS8vIFNwZWNpZmllcyB0aGUgdHlwZSBvZiBFTUYgdG8gcmVjb3JkDQotZW51bSBFbWZUeXBlDQotew0KLSAgICBFbWZUeXBlRW1mT25seSAgICAgPSBNZXRhZmlsZVR5cGVFbWYsICAgICAgICAgIC8vIG5vIEVNRissIG9ubHkgRU1GDQotICAgIEVtZlR5cGVFbWZQbHVzT25seSA9IE1ldGFmaWxlVHlwZUVtZlBsdXNPbmx5LCAgLy8gbm8gRU1GLCBvbmx5IEVNRisNCi0gICAgRW1mVHlwZUVtZlBsdXNEdWFsID0gTWV0YWZpbGVUeXBlRW1mUGx1c0R1YWwgICAvLyBib3RoIEVNRisgYW5kIEVNRg0KLX07DQotDQotLy8gQWxsIHBlcnNpc3RlbnQgb2JqZWN0cyBtdXN0IGhhdmUgYSB0eXBlIGxpc3RlZCBoZXJlDQotZW51bSBPYmplY3RUeXBlDQotew0KLSAgICBPYmplY3RUeXBlSW52YWxpZCwNCi0gICAgT2JqZWN0VHlwZUJydXNoLA0KLSAgICBPYmplY3RUeXBlUGVuLA0KLSAgICBPYmplY3RUeXBlUGF0aCwNCi0gICAgT2JqZWN0VHlwZVJlZ2lvbiwNCi0gICAgT2JqZWN0VHlwZUltYWdlLA0KLSAgICBPYmplY3RUeXBlRm9udCwNCi0gICAgT2JqZWN0VHlwZVN0cmluZ0Zvcm1hdCwNCi0gICAgT2JqZWN0VHlwZUltYWdlQXR0cmlidXRlcywNCi0gICAgT2JqZWN0VHlwZUN1c3RvbUxpbmVDYXAsDQotDQotICAgIE9iamVjdFR5cGVNYXggPSBPYmplY3RUeXBlQ3VzdG9tTGluZUNhcCwNCi0gICAgT2JqZWN0VHlwZU1pbiA9IE9iamVjdFR5cGVCcnVzaA0KLX07DQotDQotaW5saW5lIEJPT0wNCi1PYmplY3RUeXBlSXNWYWxpZCgNCi0gICAgT2JqZWN0VHlwZSAgICAgIHR5cGUNCi0gICAgKQ0KLXsNCi0gICAgcmV0dXJuICgodHlwZSA+PSBPYmplY3RUeXBlTWluKSAmJiAodHlwZSA8PSBPYmplY3RUeXBlTWF4KSk7DQotfQ0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gRU1GKyBSZWNvcmRzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi0vLyBXZSBoYXZlIHRvIGNoYW5nZSB0aGUgV01GIHJlY29yZCBudW1iZXJzIHNvIHRoYXQgdGhleSBkb24ndCBjb25mbGljdCB3aXRoDQotLy8gdGhlIEVNRiBhbmQgRU1GKyByZWNvcmQgbnVtYmVycy4NCi1lbnVtIEVtZlBsdXNSZWNvcmRUeXBlOw0KLSNkZWZpbmUgR0RJUF9FTUZQTFVTX1JFQ09SRF9CQVNFICAgICAgICAweDAwMDA0MDAwDQotI2RlZmluZSBHRElQX1dNRl9SRUNPUkRfQkFTRSAgICAgICAgICAgIDB4MDAwMTAwMDANCi0jZGVmaW5lIEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKG4pICAgKChFbWZQbHVzUmVjb3JkVHlwZSkoKG4pIHwgR0RJUF9XTUZfUkVDT1JEX0JBU0UpKQ0KLSNkZWZpbmUgR0RJUF9FTUZQTFVTX1JFQ09SRF9UT19XTUYobikgICAoKG4pICYgKH5HRElQX1dNRl9SRUNPUkRfQkFTRSkpDQotI2RlZmluZSBHRElQX0lTX1dNRl9SRUNPUkRUWVBFKG4pICAgICAgICgoKG4pICYgR0RJUF9XTUZfUkVDT1JEX0JBU0UpICE9IDApDQotDQotZW51bSBFbWZQbHVzUmVjb3JkVHlwZQ0KLXsNCi0gICAvLyBTaW5jZSB3ZSBoYXZlIHRvIGVudW1lcmF0ZSBHREkgcmVjb3JkcyByaWdodCBhbG9uZyB3aXRoIEdESSsgcmVjb3JkcywNCi0gICAvLyB3ZSBsaXN0IGFsbCB0aGUgR0RJIHJlY29yZHMgaGVyZSBzbyB0aGF0IHRoZXkgY2FuIGJlIHBhcnQgb2YgdGhlDQotICAgLy8gc2FtZSBlbnVtZXJhdGlvbiB0eXBlIHdoaWNoIGlzIHVzZWQgaW4gdGhlIGVudW1lcmF0aW9uIGNhbGxiYWNrLg0KLQ0KLSAgICBXbWZSZWNvcmRUeXBlU2V0QmtDb2xvciAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1NFVEJLQ09MT1IpLA0KLSAgICBXbWZSZWNvcmRUeXBlU2V0QmtNb2RlICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1NFVEJLTU9ERSksDQotICAgIFdtZlJlY29yZFR5cGVTZXRNYXBNb2RlICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfU0VUTUFQTU9ERSksDQotICAgIFdtZlJlY29yZFR5cGVTZXRST1AyICAgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfU0VUUk9QMiksDQotICAgIFdtZlJlY29yZFR5cGVTZXRSZWxBYnMgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfU0VUUkVMQUJTKSwNCi0gICAgV21mUmVjb3JkVHlwZVNldFBvbHlGaWxsTW9kZSAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9TRVRQT0xZRklMTE1PREUpLA0KLSAgICBXbWZSZWNvcmRUeXBlU2V0U3RyZXRjaEJsdE1vZGUgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1NFVFNUUkVUQ0hCTFRNT0RFKSwNCi0gICAgV21mUmVjb3JkVHlwZVNldFRleHRDaGFyRXh0cmEgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9TRVRURVhUQ0hBUkVYVFJBKSwNCi0gICAgV21mUmVjb3JkVHlwZVNldFRleHRDb2xvciAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9TRVRURVhUQ09MT1IpLA0KLSAgICBXbWZSZWNvcmRUeXBlU2V0VGV4dEp1c3RpZmljYXRpb24gICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1NFVFRFWFRKVVNUSUZJQ0FUSU9OKSwNCi0gICAgV21mUmVjb3JkVHlwZVNldFdpbmRvd09yZyAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9TRVRXSU5ET1dPUkcpLA0KLSAgICBXbWZSZWNvcmRUeXBlU2V0V2luZG93RXh0ICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1NFVFdJTkRPV0VYVCksDQotICAgIFdtZlJlY29yZFR5cGVTZXRWaWV3cG9ydE9yZyAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfU0VUVklFV1BPUlRPUkcpLA0KLSAgICBXbWZSZWNvcmRUeXBlU2V0Vmlld3BvcnRFeHQgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1NFVFZJRVdQT1JURVhUKSwNCi0gICAgV21mUmVjb3JkVHlwZU9mZnNldFdpbmRvd09yZyAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9PRkZTRVRXSU5ET1dPUkcpLA0KLSAgICBXbWZSZWNvcmRUeXBlU2NhbGVXaW5kb3dFeHQgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1NDQUxFV0lORE9XRVhUKSwNCi0gICAgV21mUmVjb3JkVHlwZU9mZnNldFZpZXdwb3J0T3JnICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9PRkZTRVRWSUVXUE9SVE9SRyksDQotICAgIFdtZlJlY29yZFR5cGVTY2FsZVZpZXdwb3J0RXh0ICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfU0NBTEVWSUVXUE9SVEVYVCksDQotICAgIFdtZlJlY29yZFR5cGVMaW5lVG8gICAgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfTElORVRPKSwNCi0gICAgV21mUmVjb3JkVHlwZU1vdmVUbyAgICAgICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9NT1ZFVE8pLA0KLSAgICBXbWZSZWNvcmRUeXBlRXhjbHVkZUNsaXBSZWN0ICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX0VYQ0xVREVDTElQUkVDVCksDQotICAgIFdtZlJlY29yZFR5cGVJbnRlcnNlY3RDbGlwUmVjdCAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfSU5URVJTRUNUQ0xJUFJFQ1QpLA0KLSAgICBXbWZSZWNvcmRUeXBlQXJjICAgICAgICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX0FSQyksDQotICAgIFdtZlJlY29yZFR5cGVFbGxpcHNlICAgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfRUxMSVBTRSksDQotICAgIFdtZlJlY29yZFR5cGVGbG9vZEZpbGwgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfRkxPT0RGSUxMKSwNCi0gICAgV21mUmVjb3JkVHlwZVBpZSAgICAgICAgICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9QSUUpLA0KLSAgICBXbWZSZWNvcmRUeXBlUmVjdGFuZ2xlICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1JFQ1RBTkdMRSksDQotICAgIFdtZlJlY29yZFR5cGVSb3VuZFJlY3QgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfUk9VTkRSRUNUKSwNCi0gICAgV21mUmVjb3JkVHlwZVBhdEJsdCAgICAgICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9QQVRCTFQpLA0KLSAgICBXbWZSZWNvcmRUeXBlU2F2ZURDICAgICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1NBVkVEQyksDQotICAgIFdtZlJlY29yZFR5cGVTZXRQaXhlbCAgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfU0VUUElYRUwpLA0KLSAgICBXbWZSZWNvcmRUeXBlT2Zmc2V0Q2xpcFJnbiAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX09GRlNFVENMSVBSR04pLA0KLSAgICBXbWZSZWNvcmRUeXBlVGV4dE91dCAgICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1RFWFRPVVQpLA0KLSAgICBXbWZSZWNvcmRUeXBlQml0Qmx0ICAgICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX0JJVEJMVCksDQotICAgIFdtZlJlY29yZFR5cGVTdHJldGNoQmx0ICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfU1RSRVRDSEJMVCksDQotICAgIFdtZlJlY29yZFR5cGVQb2x5Z29uICAgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfUE9MWUdPTiksDQotICAgIFdtZlJlY29yZFR5cGVQb2x5bGluZSAgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfUE9MWUxJTkUpLA0KLSAgICBXbWZSZWNvcmRUeXBlRXNjYXBlICAgICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX0VTQ0FQRSksDQotICAgIFdtZlJlY29yZFR5cGVSZXN0b3JlREMgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfUkVTVE9SRURDKSwNCi0gICAgV21mUmVjb3JkVHlwZUZpbGxSZWdpb24gICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9GSUxMUkVHSU9OKSwNCi0gICAgV21mUmVjb3JkVHlwZUZyYW1lUmVnaW9uICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9GUkFNRVJFR0lPTiksDQotICAgIFdtZlJlY29yZFR5cGVJbnZlcnRSZWdpb24gICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfSU5WRVJUUkVHSU9OKSwNCi0gICAgV21mUmVjb3JkVHlwZVBhaW50UmVnaW9uICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9QQUlOVFJFR0lPTiksDQotICAgIFdtZlJlY29yZFR5cGVTZWxlY3RDbGlwUmVnaW9uICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfU0VMRUNUQ0xJUFJFR0lPTiksDQotICAgIFdtZlJlY29yZFR5cGVTZWxlY3RPYmplY3QgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfU0VMRUNUT0JKRUNUKSwNCi0gICAgV21mUmVjb3JkVHlwZVNldFRleHRBbGlnbiAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9TRVRURVhUQUxJR04pLA0KLSAgICBXbWZSZWNvcmRUeXBlRHJhd1RleHQgICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUygweDA2MkYpLCAgLy8gTUVUQV9EUkFXVEVYVA0KLSAgICBXbWZSZWNvcmRUeXBlQ2hvcmQgICAgICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX0NIT1JEKSwNCi0gICAgV21mUmVjb3JkVHlwZVNldE1hcHBlckZsYWdzICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9TRVRNQVBQRVJGTEFHUyksDQotICAgIFdtZlJlY29yZFR5cGVFeHRUZXh0T3V0ICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfRVhUVEVYVE9VVCksDQotICAgIFdtZlJlY29yZFR5cGVTZXRESUJUb0RldiAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfU0VURElCVE9ERVYpLA0KLSAgICBXbWZSZWNvcmRUeXBlU2VsZWN0UGFsZXR0ZSAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1NFTEVDVFBBTEVUVEUpLA0KLSAgICBXbWZSZWNvcmRUeXBlUmVhbGl6ZVBhbGV0dGUgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1JFQUxJWkVQQUxFVFRFKSwNCi0gICAgV21mUmVjb3JkVHlwZUFuaW1hdGVQYWxldHRlICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9BTklNQVRFUEFMRVRURSksDQotICAgIFdtZlJlY29yZFR5cGVTZXRQYWxFbnRyaWVzICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfU0VUUEFMRU5UUklFUyksDQotICAgIFdtZlJlY29yZFR5cGVQb2x5UG9seWdvbiAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfUE9MWVBPTFlHT04pLA0KLSAgICBXbWZSZWNvcmRUeXBlUmVzaXplUGFsZXR0ZSAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1JFU0laRVBBTEVUVEUpLA0KLSAgICBXbWZSZWNvcmRUeXBlRElCQml0Qmx0ICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX0RJQkJJVEJMVCksDQotICAgIFdtZlJlY29yZFR5cGVESUJTdHJldGNoQmx0ICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfRElCU1RSRVRDSEJMVCksDQotICAgIFdtZlJlY29yZFR5cGVESUJDcmVhdGVQYXR0ZXJuQnJ1c2ggICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfRElCQ1JFQVRFUEFUVEVSTkJSVVNIKSwNCi0gICAgV21mUmVjb3JkVHlwZVN0cmV0Y2hESUIgICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9TVFJFVENIRElCKSwNCi0gICAgV21mUmVjb3JkVHlwZUV4dEZsb29kRmlsbCAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9FWFRGTE9PREZJTEwpLA0KLSAgICBXbWZSZWNvcmRUeXBlU2V0TGF5b3V0ICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUygweDAxNDkpLCAgLy8gTUVUQV9TRVRMQVlPVVQNCi0gICAgV21mUmVjb3JkVHlwZVJlc2V0REMgICAgICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoMHgwMTRDKSwgIC8vIE1FVEFfUkVTRVREQw0KLSAgICBXbWZSZWNvcmRUeXBlU3RhcnREb2MgICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUygweDAxNEQpLCAgLy8gTUVUQV9TVEFSVERPQw0KLSAgICBXbWZSZWNvcmRUeXBlU3RhcnRQYWdlICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUygweDAwNEYpLCAgLy8gTUVUQV9TVEFSVFBBR0UNCi0gICAgV21mUmVjb3JkVHlwZUVuZFBhZ2UgICAgICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoMHgwMDUwKSwgIC8vIE1FVEFfRU5EUEFHRQ0KLSAgICBXbWZSZWNvcmRUeXBlQWJvcnREb2MgICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUygweDAwNTIpLCAgLy8gTUVUQV9BQk9SVERPQw0KLSAgICBXbWZSZWNvcmRUeXBlRW5kRG9jICAgICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUygweDAwNUUpLCAgLy8gTUVUQV9FTkRET0MNCi0gICAgV21mUmVjb3JkVHlwZURlbGV0ZU9iamVjdCAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9ERUxFVEVPQkpFQ1QpLA0KLSAgICBXbWZSZWNvcmRUeXBlQ3JlYXRlUGFsZXR0ZSAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX0NSRUFURVBBTEVUVEUpLA0KLSAgICBXbWZSZWNvcmRUeXBlQ3JlYXRlQnJ1c2ggICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUygweDAwRjgpLCAgLy8gTUVUQV9DUkVBVEVCUlVTSA0KLSAgICBXbWZSZWNvcmRUeXBlQ3JlYXRlUGF0dGVybkJydXNoICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX0NSRUFURVBBVFRFUk5CUlVTSCksDQotICAgIFdtZlJlY29yZFR5cGVDcmVhdGVQZW5JbmRpcmVjdCAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfQ1JFQVRFUEVOSU5ESVJFQ1QpLA0KLSAgICBXbWZSZWNvcmRUeXBlQ3JlYXRlRm9udEluZGlyZWN0ICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX0NSRUFURUZPTlRJTkRJUkVDVCksDQotICAgIFdtZlJlY29yZFR5cGVDcmVhdGVCcnVzaEluZGlyZWN0ICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfQ1JFQVRFQlJVU0hJTkRJUkVDVCksDQotICAgIFdtZlJlY29yZFR5cGVDcmVhdGVCaXRtYXBJbmRpcmVjdCAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKDB4MDJGRCksICAvLyBNRVRBX0NSRUFURUJJVE1BUElORElSRUNUDQotICAgIFdtZlJlY29yZFR5cGVDcmVhdGVCaXRtYXAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKDB4MDZGRSksICAvLyBNRVRBX0NSRUFURUJJVE1BUA0KLSAgICBXbWZSZWNvcmRUeXBlQ3JlYXRlUmVnaW9uICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX0NSRUFURVJFR0lPTiksDQotDQotICAgIEVtZlJlY29yZFR5cGVIZWFkZXIgICAgICAgICAgICAgICAgICA9IEVNUl9IRUFERVIsDQotICAgIEVtZlJlY29yZFR5cGVQb2x5QmV6aWVyICAgICAgICAgICAgICA9IEVNUl9QT0xZQkVaSUVSLA0KLSAgICBFbWZSZWNvcmRUeXBlUG9seWdvbiAgICAgICAgICAgICAgICAgPSBFTVJfUE9MWUdPTiwNCi0gICAgRW1mUmVjb3JkVHlwZVBvbHlsaW5lICAgICAgICAgICAgICAgID0gRU1SX1BPTFlMSU5FLA0KLSAgICBFbWZSZWNvcmRUeXBlUG9seUJlemllclRvICAgICAgICAgICAgPSBFTVJfUE9MWUJFWklFUlRPLA0KLSAgICBFbWZSZWNvcmRUeXBlUG9seUxpbmVUbyAgICAgICAgICAgICAgPSBFTVJfUE9MWUxJTkVUTywNCi0gICAgRW1mUmVjb3JkVHlwZVBvbHlQb2x5bGluZSAgICAgICAgICAgID0gRU1SX1BPTFlQT0xZTElORSwNCi0gICAgRW1mUmVjb3JkVHlwZVBvbHlQb2x5Z29uICAgICAgICAgICAgID0gRU1SX1BPTFlQT0xZR09OLA0KLSAgICBFbWZSZWNvcmRUeXBlU2V0V2luZG93RXh0RXggICAgICAgICAgPSBFTVJfU0VUV0lORE9XRVhURVgsDQotICAgIEVtZlJlY29yZFR5cGVTZXRXaW5kb3dPcmdFeCAgICAgICAgICA9IEVNUl9TRVRXSU5ET1dPUkdFWCwNCi0gICAgRW1mUmVjb3JkVHlwZVNldFZpZXdwb3J0RXh0RXggICAgICAgID0gRU1SX1NFVFZJRVdQT1JURVhURVgsDQotICAgIEVtZlJlY29yZFR5cGVTZXRWaWV3cG9ydE9yZ0V4ICAgICAgICA9IEVNUl9TRVRWSUVXUE9SVE9SR0VYLA0KLSAgICBFbWZSZWNvcmRUeXBlU2V0QnJ1c2hPcmdFeCAgICAgICAgICAgPSBFTVJfU0VUQlJVU0hPUkdFWCwNCi0gICAgRW1mUmVjb3JkVHlwZUVPRiAgICAgICAgICAgICAgICAgICAgID0gRU1SX0VPRiwNCi0gICAgRW1mUmVjb3JkVHlwZVNldFBpeGVsViAgICAgICAgICAgICAgID0gRU1SX1NFVFBJWEVMViwNCi0gICAgRW1mUmVjb3JkVHlwZVNldE1hcHBlckZsYWdzICAgICAgICAgID0gRU1SX1NFVE1BUFBFUkZMQUdTLA0KLSAgICBFbWZSZWNvcmRUeXBlU2V0TWFwTW9kZSAgICAgICAgICAgICAgPSBFTVJfU0VUTUFQTU9ERSwNCi0gICAgRW1mUmVjb3JkVHlwZVNldEJrTW9kZSAgICAgICAgICAgICAgID0gRU1SX1NFVEJLTU9ERSwNCi0gICAgRW1mUmVjb3JkVHlwZVNldFBvbHlGaWxsTW9kZSAgICAgICAgID0gRU1SX1NFVFBPTFlGSUxMTU9ERSwNCi0gICAgRW1mUmVjb3JkVHlwZVNldFJPUDIgICAgICAgICAgICAgICAgID0gRU1SX1NFVFJPUDIsDQotICAgIEVtZlJlY29yZFR5cGVTZXRTdHJldGNoQmx0TW9kZSAgICAgICA9IEVNUl9TRVRTVFJFVENIQkxUTU9ERSwNCi0gICAgRW1mUmVjb3JkVHlwZVNldFRleHRBbGlnbiAgICAgICAgICAgID0gRU1SX1NFVFRFWFRBTElHTiwNCi0gICAgRW1mUmVjb3JkVHlwZVNldENvbG9yQWRqdXN0bWVudCAgICAgID0gRU1SX1NFVENPTE9SQURKVVNUTUVOVCwNCi0gICAgRW1mUmVjb3JkVHlwZVNldFRleHRDb2xvciAgICAgICAgICAgID0gRU1SX1NFVFRFWFRDT0xPUiwNCi0gICAgRW1mUmVjb3JkVHlwZVNldEJrQ29sb3IgICAgICAgICAgICAgID0gRU1SX1NFVEJLQ09MT1IsDQotICAgIEVtZlJlY29yZFR5cGVPZmZzZXRDbGlwUmduICAgICAgICAgICA9IEVNUl9PRkZTRVRDTElQUkdOLA0KLSAgICBFbWZSZWNvcmRUeXBlTW92ZVRvRXggICAgICAgICAgICAgICAgPSBFTVJfTU9WRVRPRVgsDQotICAgIEVtZlJlY29yZFR5cGVTZXRNZXRhUmduICAgICAgICAgICAgICA9IEVNUl9TRVRNRVRBUkdOLA0KLSAgICBFbWZSZWNvcmRUeXBlRXhjbHVkZUNsaXBSZWN0ICAgICAgICAgPSBFTVJfRVhDTFVERUNMSVBSRUNULA0KLSAgICBFbWZSZWNvcmRUeXBlSW50ZXJzZWN0Q2xpcFJlY3QgICAgICAgPSBFTVJfSU5URVJTRUNUQ0xJUFJFQ1QsDQotICAgIEVtZlJlY29yZFR5cGVTY2FsZVZpZXdwb3J0RXh0RXggICAgICA9IEVNUl9TQ0FMRVZJRVdQT1JURVhURVgsDQotICAgIEVtZlJlY29yZFR5cGVTY2FsZVdpbmRvd0V4dEV4ICAgICAgICA9IEVNUl9TQ0FMRVdJTkRPV0VYVEVYLA0KLSAgICBFbWZSZWNvcmRUeXBlU2F2ZURDICAgICAgICAgICAgICAgICAgPSBFTVJfU0FWRURDLA0KLSAgICBFbWZSZWNvcmRUeXBlUmVzdG9yZURDICAgICAgICAgICAgICAgPSBFTVJfUkVTVE9SRURDLA0KLSAgICBFbWZSZWNvcmRUeXBlU2V0V29ybGRUcmFuc2Zvcm0gICAgICAgPSBFTVJfU0VUV09STERUUkFOU0ZPUk0sDQotICAgIEVtZlJlY29yZFR5cGVNb2RpZnlXb3JsZFRyYW5zZm9ybSAgICA9IEVNUl9NT0RJRllXT1JMRFRSQU5TRk9STSwNCi0gICAgRW1mUmVjb3JkVHlwZVNlbGVjdE9iamVjdCAgICAgICAgICAgID0gRU1SX1NFTEVDVE9CSkVDVCwNCi0gICAgRW1mUmVjb3JkVHlwZUNyZWF0ZVBlbiAgICAgICAgICAgICAgID0gRU1SX0NSRUFURVBFTiwNCi0gICAgRW1mUmVjb3JkVHlwZUNyZWF0ZUJydXNoSW5kaXJlY3QgICAgID0gRU1SX0NSRUFURUJSVVNISU5ESVJFQ1QsDQotICAgIEVtZlJlY29yZFR5cGVEZWxldGVPYmplY3QgICAgICAgICAgICA9IEVNUl9ERUxFVEVPQkpFQ1QsDQotICAgIEVtZlJlY29yZFR5cGVBbmdsZUFyYyAgICAgICAgICAgICAgICA9IEVNUl9BTkdMRUFSQywNCi0gICAgRW1mUmVjb3JkVHlwZUVsbGlwc2UgICAgICAgICAgICAgICAgID0gRU1SX0VMTElQU0UsDQotICAgIEVtZlJlY29yZFR5cGVSZWN0YW5nbGUgICAgICAgICAgICAgICA9IEVNUl9SRUNUQU5HTEUsDQotICAgIEVtZlJlY29yZFR5cGVSb3VuZFJlY3QgICAgICAgICAgICAgICA9IEVNUl9ST1VORFJFQ1QsDQotICAgIEVtZlJlY29yZFR5cGVBcmMgICAgICAgICAgICAgICAgICAgICA9IEVNUl9BUkMsDQotICAgIEVtZlJlY29yZFR5cGVDaG9yZCAgICAgICAgICAgICAgICAgICA9IEVNUl9DSE9SRCwNCi0gICAgRW1mUmVjb3JkVHlwZVBpZSAgICAgICAgICAgICAgICAgICAgID0gRU1SX1BJRSwNCi0gICAgRW1mUmVjb3JkVHlwZVNlbGVjdFBhbGV0dGUgICAgICAgICAgID0gRU1SX1NFTEVDVFBBTEVUVEUsDQotICAgIEVtZlJlY29yZFR5cGVDcmVhdGVQYWxldHRlICAgICAgICAgICA9IEVNUl9DUkVBVEVQQUxFVFRFLA0KLSAgICBFbWZSZWNvcmRUeXBlU2V0UGFsZXR0ZUVudHJpZXMgICAgICAgPSBFTVJfU0VUUEFMRVRURUVOVFJJRVMsDQotICAgIEVtZlJlY29yZFR5cGVSZXNpemVQYWxldHRlICAgICAgICAgICA9IEVNUl9SRVNJWkVQQUxFVFRFLA0KLSAgICBFbWZSZWNvcmRUeXBlUmVhbGl6ZVBhbGV0dGUgICAgICAgICAgPSBFTVJfUkVBTElaRVBBTEVUVEUsDQotICAgIEVtZlJlY29yZFR5cGVFeHRGbG9vZEZpbGwgICAgICAgICAgICA9IEVNUl9FWFRGTE9PREZJTEwsDQotICAgIEVtZlJlY29yZFR5cGVMaW5lVG8gICAgICAgICAgICAgICAgICA9IEVNUl9MSU5FVE8sDQotICAgIEVtZlJlY29yZFR5cGVBcmNUbyAgICAgICAgICAgICAgICAgICA9IEVNUl9BUkNUTywNCi0gICAgRW1mUmVjb3JkVHlwZVBvbHlEcmF3ICAgICAgICAgICAgICAgID0gRU1SX1BPTFlEUkFXLA0KLSAgICBFbWZSZWNvcmRUeXBlU2V0QXJjRGlyZWN0aW9uICAgICAgICAgPSBFTVJfU0VUQVJDRElSRUNUSU9OLA0KLSAgICBFbWZSZWNvcmRUeXBlU2V0TWl0ZXJMaW1pdCAgICAgICAgICAgPSBFTVJfU0VUTUlURVJMSU1JVCwNCi0gICAgRW1mUmVjb3JkVHlwZUJlZ2luUGF0aCAgICAgICAgICAgICAgID0gRU1SX0JFR0lOUEFUSCwNCi0gICAgRW1mUmVjb3JkVHlwZUVuZFBhdGggICAgICAgICAgICAgICAgID0gRU1SX0VORFBBVEgsDQotICAgIEVtZlJlY29yZFR5cGVDbG9zZUZpZ3VyZSAgICAgICAgICAgICA9IEVNUl9DTE9TRUZJR1VSRSwNCi0gICAgRW1mUmVjb3JkVHlwZUZpbGxQYXRoICAgICAgICAgICAgICAgID0gRU1SX0ZJTExQQVRILA0KLSAgICBFbWZSZWNvcmRUeXBlU3Ryb2tlQW5kRmlsbFBhdGggICAgICAgPSBFTVJfU1RST0tFQU5ERklMTFBBVEgsDQotICAgIEVtZlJlY29yZFR5cGVTdHJva2VQYXRoICAgICAgICAgICAgICA9IEVNUl9TVFJPS0VQQVRILA0KLSAgICBFbWZSZWNvcmRUeXBlRmxhdHRlblBhdGggICAgICAgICAgICAgPSBFTVJfRkxBVFRFTlBBVEgsDQotICAgIEVtZlJlY29yZFR5cGVXaWRlblBhdGggICAgICAgICAgICAgICA9IEVNUl9XSURFTlBBVEgsDQotICAgIEVtZlJlY29yZFR5cGVTZWxlY3RDbGlwUGF0aCAgICAgICAgICA9IEVNUl9TRUxFQ1RDTElQUEFUSCwNCi0gICAgRW1mUmVjb3JkVHlwZUFib3J0UGF0aCAgICAgICAgICAgICAgID0gRU1SX0FCT1JUUEFUSCwNCi0gICAgRW1mUmVjb3JkVHlwZVJlc2VydmVkXzA2OSAgICAgICAgICAgID0gNjksICAvLyBOb3QgVXNlZA0KLSAgICBFbWZSZWNvcmRUeXBlR2RpQ29tbWVudCAgICAgICAgICAgICAgPSBFTVJfR0RJQ09NTUVOVCwNCi0gICAgRW1mUmVjb3JkVHlwZUZpbGxSZ24gICAgICAgICAgICAgICAgID0gRU1SX0ZJTExSR04sDQotICAgIEVtZlJlY29yZFR5cGVGcmFtZVJnbiAgICAgICAgICAgICAgICA9IEVNUl9GUkFNRVJHTiwNCi0gICAgRW1mUmVjb3JkVHlwZUludmVydFJnbiAgICAgICAgICAgICAgID0gRU1SX0lOVkVSVFJHTiwNCi0gICAgRW1mUmVjb3JkVHlwZVBhaW50UmduICAgICAgICAgICAgICAgID0gRU1SX1BBSU5UUkdOLA0KLSAgICBFbWZSZWNvcmRUeXBlRXh0U2VsZWN0Q2xpcFJnbiAgICAgICAgPSBFTVJfRVhUU0VMRUNUQ0xJUFJHTiwNCi0gICAgRW1mUmVjb3JkVHlwZUJpdEJsdCAgICAgICAgICAgICAgICAgID0gRU1SX0JJVEJMVCwNCi0gICAgRW1mUmVjb3JkVHlwZVN0cmV0Y2hCbHQgICAgICAgICAgICAgID0gRU1SX1NUUkVUQ0hCTFQsDQotICAgIEVtZlJlY29yZFR5cGVNYXNrQmx0ICAgICAgICAgICAgICAgICA9IEVNUl9NQVNLQkxULA0KLSAgICBFbWZSZWNvcmRUeXBlUGxnQmx0ICAgICAgICAgICAgICAgICAgPSBFTVJfUExHQkxULA0KLSAgICBFbWZSZWNvcmRUeXBlU2V0RElCaXRzVG9EZXZpY2UgICAgICAgPSBFTVJfU0VURElCSVRTVE9ERVZJQ0UsDQotICAgIEVtZlJlY29yZFR5cGVTdHJldGNoRElCaXRzICAgICAgICAgICA9IEVNUl9TVFJFVENIRElCSVRTLA0KLSAgICBFbWZSZWNvcmRUeXBlRXh0Q3JlYXRlRm9udEluZGlyZWN0ICAgPSBFTVJfRVhUQ1JFQVRFRk9OVElORElSRUNUVywNCi0gICAgRW1mUmVjb3JkVHlwZUV4dFRleHRPdXRBICAgICAgICAgICAgID0gRU1SX0VYVFRFWFRPVVRBLA0KLSAgICBFbWZSZWNvcmRUeXBlRXh0VGV4dE91dFcgICAgICAgICAgICAgPSBFTVJfRVhUVEVYVE9VVFcsDQotICAgIEVtZlJlY29yZFR5cGVQb2x5QmV6aWVyMTYgICAgICAgICAgICA9IEVNUl9QT0xZQkVaSUVSMTYsDQotICAgIEVtZlJlY29yZFR5cGVQb2x5Z29uMTYgICAgICAgICAgICAgICA9IEVNUl9QT0xZR09OMTYsDQotICAgIEVtZlJlY29yZFR5cGVQb2x5bGluZTE2ICAgICAgICAgICAgICA9IEVNUl9QT0xZTElORTE2LA0KLSAgICBFbWZSZWNvcmRUeXBlUG9seUJlemllclRvMTYgICAgICAgICAgPSBFTVJfUE9MWUJFWklFUlRPMTYsDQotICAgIEVtZlJlY29yZFR5cGVQb2x5bGluZVRvMTYgICAgICAgICAgICA9IEVNUl9QT0xZTElORVRPMTYsDQotICAgIEVtZlJlY29yZFR5cGVQb2x5UG9seWxpbmUxNiAgICAgICAgICA9IEVNUl9QT0xZUE9MWUxJTkUxNiwNCi0gICAgRW1mUmVjb3JkVHlwZVBvbHlQb2x5Z29uMTYgICAgICAgICAgID0gRU1SX1BPTFlQT0xZR09OMTYsDQotICAgIEVtZlJlY29yZFR5cGVQb2x5RHJhdzE2ICAgICAgICAgICAgICA9IEVNUl9QT0xZRFJBVzE2LA0KLSAgICBFbWZSZWNvcmRUeXBlQ3JlYXRlTW9ub0JydXNoICAgICAgICAgPSBFTVJfQ1JFQVRFTU9OT0JSVVNILA0KLSAgICBFbWZSZWNvcmRUeXBlQ3JlYXRlRElCUGF0dGVybkJydXNoUHQgPSBFTVJfQ1JFQVRFRElCUEFUVEVSTkJSVVNIUFQsDQotICAgIEVtZlJlY29yZFR5cGVFeHRDcmVhdGVQZW4gICAgICAgICAgICA9IEVNUl9FWFRDUkVBVEVQRU4sDQotICAgIEVtZlJlY29yZFR5cGVQb2x5VGV4dE91dEEgICAgICAgICAgICA9IEVNUl9QT0xZVEVYVE9VVEEsDQotICAgIEVtZlJlY29yZFR5cGVQb2x5VGV4dE91dFcgICAgICAgICAgICA9IEVNUl9QT0xZVEVYVE9VVFcsDQotICAgIEVtZlJlY29yZFR5cGVTZXRJQ01Nb2RlICAgICAgICAgICAgICA9IDk4LCAgLy8gRU1SX1NFVElDTU1PREUsDQotICAgIEVtZlJlY29yZFR5cGVDcmVhdGVDb2xvclNwYWNlICAgICAgICA9IDk5LCAgLy8gRU1SX0NSRUFURUNPTE9SU1BBQ0UsDQotICAgIEVtZlJlY29yZFR5cGVTZXRDb2xvclNwYWNlICAgICAgICAgICA9IDEwMCwgLy8gRU1SX1NFVENPTE9SU1BBQ0UsDQotICAgIEVtZlJlY29yZFR5cGVEZWxldGVDb2xvclNwYWNlICAgICAgICA9IDEwMSwgLy8gRU1SX0RFTEVURUNPTE9SU1BBQ0UsDQotICAgIEVtZlJlY29yZFR5cGVHTFNSZWNvcmQgICAgICAgICAgICAgICA9IDEwMiwgLy8gRU1SX0dMU1JFQ09SRCwNCi0gICAgRW1mUmVjb3JkVHlwZUdMU0JvdW5kZWRSZWNvcmQgICAgICAgID0gMTAzLCAvLyBFTVJfR0xTQk9VTkRFRFJFQ09SRCwNCi0gICAgRW1mUmVjb3JkVHlwZVBpeGVsRm9ybWF0ICAgICAgICAgICAgID0gMTA0LCAvLyBFTVJfUElYRUxGT1JNQVQsDQotICAgIEVtZlJlY29yZFR5cGVEcmF3RXNjYXBlICAgICAgICAgICAgICA9IDEwNSwgLy8gRU1SX1JFU0VSVkVEXzEwNSwNCi0gICAgRW1mUmVjb3JkVHlwZUV4dEVzY2FwZSAgICAgICAgICAgICAgID0gMTA2LCAvLyBFTVJfUkVTRVJWRURfMTA2LA0KLSAgICBFbWZSZWNvcmRUeXBlU3RhcnREb2MgICAgICAgICAgICAgICAgPSAxMDcsIC8vIEVNUl9SRVNFUlZFRF8xMDcsDQotICAgIEVtZlJlY29yZFR5cGVTbWFsbFRleHRPdXQgICAgICAgICAgICA9IDEwOCwgLy8gRU1SX1JFU0VSVkVEXzEwOCwNCi0gICAgRW1mUmVjb3JkVHlwZUZvcmNlVUZJTWFwcGluZyAgICAgICAgID0gMTA5LCAvLyBFTVJfUkVTRVJWRURfMTA5LA0KLSAgICBFbWZSZWNvcmRUeXBlTmFtZWRFc2NhcGUgICAgICAgICAgICAgPSAxMTAsIC8vIEVNUl9SRVNFUlZFRF8xMTAsDQotICAgIEVtZlJlY29yZFR5cGVDb2xvckNvcnJlY3RQYWxldHRlICAgICA9IDExMSwgLy8gRU1SX0NPTE9SQ09SUkVDVFBBTEVUVEUsDQotICAgIEVtZlJlY29yZFR5cGVTZXRJQ01Qcm9maWxlQSAgICAgICAgICA9IDExMiwgLy8gRU1SX1NFVElDTVBST0ZJTEVBLA0KLSAgICBFbWZSZWNvcmRUeXBlU2V0SUNNUHJvZmlsZVcgICAgICAgICAgPSAxMTMsIC8vIEVNUl9TRVRJQ01QUk9GSUxFVywNCi0gICAgRW1mUmVjb3JkVHlwZUFscGhhQmxlbmQgICAgICAgICAgICAgID0gMTE0LCAvLyBFTVJfQUxQSEFCTEVORCwNCi0gICAgRW1mUmVjb3JkVHlwZVNldExheW91dCAgICAgICAgICAgICAgID0gMTE1LCAvLyBFTVJfU0VUTEFZT1VULA0KLSAgICBFbWZSZWNvcmRUeXBlVHJhbnNwYXJlbnRCbHQgICAgICAgICAgPSAxMTYsIC8vIEVNUl9UUkFOU1BBUkVOVEJMVCwNCi0gICAgRW1mUmVjb3JkVHlwZVJlc2VydmVkXzExNyAgICAgICAgICAgID0gMTE3LCAvLyBOb3QgVXNlZA0KLSAgICBFbWZSZWNvcmRUeXBlR3JhZGllbnRGaWxsICAgICAgICAgICAgPSAxMTgsIC8vIEVNUl9HUkFESUVOVEZJTEwsDQotICAgIEVtZlJlY29yZFR5cGVTZXRMaW5rZWRVRklzICAgICAgICAgICA9IDExOSwgLy8gRU1SX1JFU0VSVkVEXzExOSwNCi0gICAgRW1mUmVjb3JkVHlwZVNldFRleHRKdXN0aWZpY2F0aW9uICAgID0gMTIwLCAvLyBFTVJfUkVTRVJWRURfMTIwLA0KLSAgICBFbWZSZWNvcmRUeXBlQ29sb3JNYXRjaFRvVGFyZ2V0VyAgICAgPSAxMjEsIC8vIEVNUl9DT0xPUk1BVENIVE9UQVJHRVRXLA0KLSAgICBFbWZSZWNvcmRUeXBlQ3JlYXRlQ29sb3JTcGFjZVcgICAgICAgPSAxMjIsIC8vIEVNUl9DUkVBVEVDT0xPUlNQQUNFVywNCi0gICAgRW1mUmVjb3JkVHlwZU1heCAgICAgICAgICAgICAgICAgICAgID0gMTIyLA0KLSAgICBFbWZSZWNvcmRUeXBlTWluICAgICAgICAgICAgICAgICAgICAgPSAxLA0KLQ0KLSAgICAvLyBUaGF0IGlzIHRoZSBFTkQgb2YgdGhlIEdESSBFTUYgcmVjb3Jkcy4NCi0NCi0gICAgLy8gTm93IHdlIHN0YXJ0IHRoZSBsaXN0IG9mIEVNRisgcmVjb3Jkcy4gIFdlIGxlYXZlIHF1aXRlDQotICAgIC8vIGEgYml0IG9mIHJvb20gaGVyZSBmb3IgdGhlIGFkZGl0aW9uIG9mIGFueSBuZXcgR0RJDQotICAgIC8vIHJlY29yZHMgdGhhdCBtYXkgYmUgYWRkZWQgbGF0ZXIuDQotDQotICAgIEVtZlBsdXNSZWNvcmRUeXBlSW52YWxpZCA9IEdESVBfRU1GUExVU19SRUNPUkRfQkFTRSwNCi0gICAgRW1mUGx1c1JlY29yZFR5cGVIZWFkZXIsDQotICAgIEVtZlBsdXNSZWNvcmRUeXBlRW5kT2ZGaWxlLA0KLQ0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZUNvbW1lbnQsDQotDQotICAgIEVtZlBsdXNSZWNvcmRUeXBlR2V0REMsICAgIC8vIHRoZSBhcHBsaWNhdGlvbiBncmFiYmVkIHRoZSBtZXRhZmlsZSBkYw0KLQ0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZU11bHRpRm9ybWF0U3RhcnQsDQotICAgIEVtZlBsdXNSZWNvcmRUeXBlTXVsdGlGb3JtYXRTZWN0aW9uLA0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZU11bHRpRm9ybWF0RW5kLA0KLQ0KLSAgICAvLyBGb3IgYWxsIHBlcnNpc3RlbnQgb2JqZWN0cw0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZU9iamVjdCwgLy8gYnJ1c2gscGVuLHBhdGgscmVnaW9uLGltYWdlLGZvbnQsc3RyaW5nLWZvcm1hdA0KLQ0KLSAgICAvLyBEcmF3aW5nIFJlY29yZHMNCi0gICAgRW1mUGx1c1JlY29yZFR5cGVDbGVhciwNCi0gICAgRW1mUGx1c1JlY29yZFR5cGVGaWxsUmVjdHMsDQotICAgIEVtZlBsdXNSZWNvcmRUeXBlRHJhd1JlY3RzLA0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZUZpbGxQb2x5Z29uLA0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZURyYXdMaW5lcywNCi0gICAgRW1mUGx1c1JlY29yZFR5cGVGaWxsRWxsaXBzZSwNCi0gICAgRW1mUGx1c1JlY29yZFR5cGVEcmF3RWxsaXBzZSwNCi0gICAgRW1mUGx1c1JlY29yZFR5cGVGaWxsUGllLA0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZURyYXdQaWUsDQotICAgIEVtZlBsdXNSZWNvcmRUeXBlRHJhd0FyYywNCi0gICAgRW1mUGx1c1JlY29yZFR5cGVGaWxsUmVnaW9uLA0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZUZpbGxQYXRoLA0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZURyYXdQYXRoLA0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZUZpbGxDbG9zZWRDdXJ2ZSwNCi0gICAgRW1mUGx1c1JlY29yZFR5cGVEcmF3Q2xvc2VkQ3VydmUsDQotICAgIEVtZlBsdXNSZWNvcmRUeXBlRHJhd0N1cnZlLA0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZURyYXdCZXppZXJzLA0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZURyYXdJbWFnZSwNCi0gICAgRW1mUGx1c1JlY29yZFR5cGVEcmF3SW1hZ2VQb2ludHMsDQotICAgIEVtZlBsdXNSZWNvcmRUeXBlRHJhd1N0cmluZywNCi0NCi0gICAgLy8gR3JhcGhpY3MgU3RhdGUgUmVjb3Jkcw0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZVNldFJlbmRlcmluZ09yaWdpbiwNCi0gICAgRW1mUGx1c1JlY29yZFR5cGVTZXRBbnRpQWxpYXNNb2RlLA0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZVNldFRleHRSZW5kZXJpbmdIaW50LA0KLSNpZmRlZiBEQ1JfVVNFX05FV18xODg5MjINCi0gICBFbWZQbHVzUmVjb3JkVHlwZVNldFRleHRDb250cmFzdCwNCi0jZWxzZQ0KLSAgIEVtZlBsdXNSZWNvcmRUeXBlU2V0R2FtbWFWYWx1ZSwNCi0jZW5kaWYgLy8gRENSX1VTRV9ORVdfMTg4OTIyDQotICAgIEVtZlBsdXNSZWNvcmRUeXBlU2V0SW50ZXJwb2xhdGlvbk1vZGUsDQotICAgIEVtZlBsdXNSZWNvcmRUeXBlU2V0UGl4ZWxPZmZzZXRNb2RlLA0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZVNldENvbXBvc2l0aW5nTW9kZSwNCi0gICAgRW1mUGx1c1JlY29yZFR5cGVTZXRDb21wb3NpdGluZ1F1YWxpdHksDQotICAgIEVtZlBsdXNSZWNvcmRUeXBlU2F2ZSwNCi0gICAgRW1mUGx1c1JlY29yZFR5cGVSZXN0b3JlLA0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZUJlZ2luQ29udGFpbmVyLA0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZUJlZ2luQ29udGFpbmVyTm9QYXJhbXMsDQotICAgIEVtZlBsdXNSZWNvcmRUeXBlRW5kQ29udGFpbmVyLA0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZVNldFdvcmxkVHJhbnNmb3JtLA0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZVJlc2V0V29ybGRUcmFuc2Zvcm0sDQotICAgIEVtZlBsdXNSZWNvcmRUeXBlTXVsdGlwbHlXb3JsZFRyYW5zZm9ybSwNCi0gICAgRW1mUGx1c1JlY29yZFR5cGVUcmFuc2xhdGVXb3JsZFRyYW5zZm9ybSwNCi0gICAgRW1mUGx1c1JlY29yZFR5cGVTY2FsZVdvcmxkVHJhbnNmb3JtLA0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZVJvdGF0ZVdvcmxkVHJhbnNmb3JtLA0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZVNldFBhZ2VUcmFuc2Zvcm0sDQotICAgIEVtZlBsdXNSZWNvcmRUeXBlUmVzZXRDbGlwLA0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZVNldENsaXBSZWN0LA0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZVNldENsaXBQYXRoLA0KLSAgICBFbWZQbHVzUmVjb3JkVHlwZVNldENsaXBSZWdpb24sDQotICAgIEVtZlBsdXNSZWNvcmRUeXBlT2Zmc2V0Q2xpcCwNCi0NCi0gICAgLy8gTmV3IHJlY29yZCB0eXBlcyBtdXN0IGJlIGFkZGVkIGhlcmUgKGF0IHRoZSBlbmQpIC0tIGRvIG5vdCBhZGQgYWJvdmUsDQotICAgIC8vIHNpbmNlIHRoYXQgd2lsbCBpbnZhbGlkYXRlIHByZXZpb3VzIG1ldGFmaWxlcyENCi0gICAgRW1mUGx1c1JlY29yZFR5cGVEcmF3RHJpdmVyU3RyaW5nLA0KLQ0KLSAgICAvLyBIYXZlIHRoaXMgaGVyZSBzbyB5b3UgZG9uJ3QgbmVlZCB0byBrZWVwIGNoYW5naW5nIHRoZSB2YWx1ZSBvZg0KLSAgICAvLyBFbWZQbHVzUmVjb3JkVHlwZU1heCBldmVyeSB0aW1lIHlvdSBhZGQgYSBuZXcgcmVjb3JkLg0KLQ0KLSAgICBFbWZQbHVzUmVjb3JkVG90YWwsDQotDQotICAgIEVtZlBsdXNSZWNvcmRUeXBlTWF4ID0gRW1mUGx1c1JlY29yZFRvdGFsLTEsDQotICAgIEVtZlBsdXNSZWNvcmRUeXBlTWluID0gRW1mUGx1c1JlY29yZFR5cGVIZWFkZXIsDQotfTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIFN0cmluZ0Zvcm1hdEZsYWdzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIFN0cmluZyBmb3JtYXQgZmxhZ3MNCi0vLw0KLS8vICBEaXJlY3Rpb25SaWdodFRvTGVmdCAgICAgICAgICAtIEZvciBob3Jpem9udGFsIHRleHQsIHRoZSByZWFkaW5nIG9yZGVyIGlzDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgdG8gbGVmdC4gVGhpcyB2YWx1ZSBpcyBjYWxsZWQNCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYmFzZSBlbWJlZGRpbmcgbGV2ZWwgYnkgdGhlIFVuaWNvZGUNCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsIGVuZ2luZS4NCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgdmVydGljYWwgdGV4dCwgY29sdW1ucyBhcmUgcmVhZCBmcm9tDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgdG8gbGVmdC4NCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBob3Jpem9udGFsIG9yIHZlcnRpY2FsIHRleHQgaXMNCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkIGZyb20gbGVmdCB0byByaWdodC4NCi0vLw0KLS8vICBEaXJlY3Rpb25WZXJ0aWNhbCAgICAgICAgICAgICAtIEluZGl2aWR1YWwgbGluZXMgb2YgdGV4dCBhcmUgdmVydGljYWwuIEluDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCBsaW5lLCBjaGFyYWN0ZXJzIHByb2dyZXNzIGZyb20gdG9wIHRvDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tLg0KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIGxpbmVzIG9mIHRleHQgYXJlIGhvcml6b250YWwsDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCBuZXcgbGluZSBiZWxvdyB0aGUgcHJldmlvdXMgbGluZS4NCi0vLw0KLS8vICBOb0ZpdEJsYWNrQm94ICAgICAgICAgICAgICAgICAtIEFsbG93cyBwYXJ0cyBvZiBnbHlwaHMgdG8gb3ZlcmhhbmcgdGhlDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRpbmcgcmVjdGFuZ2xlLg0KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQgZ2x5cGhzIGFyZSBmaXJzdCBhbGlnbmVkDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zaWRlIHRoZSBtYXJnaW5lcywgdGhlbiBhbnkgZ2x5cGhzIHdoaWNoDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGwgb3ZlcmhhbmcgdGhlIGJvdW5kaW5nIGJveCBhcmUNCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0aW9uZWQgdG8gYXZvaWQgYW55IG92ZXJoYW5nLg0KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlIHdoZW4gYW4gaXRhbGljDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93ZXIgY2FzZSBsZXR0ZXIgZiBpbiBhIGZvbnQgc3VjaCBhcw0KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdhcmFtb25kIGlzIGFsaWduZWQgYXQgdGhlIGZhciBsZWZ0IG9mIGENCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0YW5nbGUsIHRoZSBsb3dlciBwYXJ0IG9mIHRoZSBmIHdpbGwNCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFjaCBzbGlnaHRseSBmdXJ0aGVyIGxlZnQgdGhhbiB0aGUgbGVmdA0KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Ugb2YgdGhlIHJlY3RhbmdsZS4gU2V0dGluZyB0aGlzIGZsYWcNCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIGVuc3VyZSB0aGUgY2hhcmFjdGVyIGFsaWducyB2aXN1YWxseQ0KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGxpbmVzIGFib3ZlIGFuZCBiZWxvdywgYnV0IG1heQ0KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdXNlIHNvbWUgcGl4ZWxzIG91dHNpZGUgdGhlIGZvcm1hdHRpbmcNCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0YW5nbGUgdG8gYmUgY2xpcHBlZCBvciBwYWludGVkLg0KLS8vDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xMzcyNTINCi0vLyAgTnVtYmVyQ29udGV4dEFyYWJpYyAgICAgICAgICAgLSBDYXVzZXMgYW55IGluaXRpYWwgbnVtZXJpYyBpbiB0aGUgc3RyaW5nIHRvDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgYW5hbHlzZWQgZm9yIGJpZGlyZWN0aW9uIGxheW91dCBhcyBpZg0KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0IHdhcyBwcmVjZWVkZWQgYnkgQXJhYmljIHRleHQuDQotLy8NCi0vLyAgRGlzYWJsZUthc2hpZGFKdXN0aWZpY2F0aW9uICAgLSBBcmFiaWMgdGV4dCB3aWxsIG5vdCBiZSBqdXN0aWZpZWQgYnkgdGhlDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uIG9mIGthc2hpZGFzIChpLmUuIGV4dGVuZGluZyB0aGUNCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2luaW5nIGxpbmUgYmV0d2VlbiBjaGFyYWN0ZXJzKS4gSW5zdGVhZA0KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyYWJpYyBzY3JpcHQgd2lsbCBiZSBqdXN0aWZpZWQgYnkgdGhlDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkZW5pbmcgb2YgdGhlIHdoaXRlc3BhY2UgYmV0d2VlbiB3b3Jkcy4NCi0vLw0KLSNlbmRpZg0KLS8vICBEaXNwbGF5Rm9ybWF0Q29udHJvbCAgICAgICAgICAtIENhdXNlcyBjb250cm9sIGNoYXJhY3RlcnMgc3VjaCBhcyB0aGUNCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LXRvLXJpZ2h0IG1hcmsgdG8gYmUgc2hvd24gaW4gdGhlDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHdpdGggYSByZXByZXNlbnRhdGl2ZSBnbHlwaC4NCi0vLw0KLSNpZm5kZWYgRENSX1VTRV9ORVdfMTM3MjUyDQotLy8gIERpc2FibGVLZXJuaW5nICAgICAgICAgICAgICAgIC0gRGlzYWJsZXMgVHJ1ZXR5cGUgYW5kIE9wZW5UeXBlIGtlcm5pbmcuDQotLy8NCi0vLyAgRGlzYWJsZUxpZ2F0dXJlcyAgICAgICAgICAgICAgLSBEaXNhYmxlcyBUcnVldHlwZSBhbmQgT3BlblR5cGUgbGlnYXR1cmVzLg0KLS8vDQotLy8gIExheW91dExlZ2FjeUJpZGkgICAgICAgICAgICAgIC0gQ2F1c2VzIHRoZSBiaWRpcmVjdGlvbiBhbGdvcml0aG0gdG8gdXNlDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZ2h0bHkgZGlmZmVyZW50IGNsYXNzaWZpY2F0aW9ucyBmb3INCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKycsICctJyBhbmQgJy8nIHRoYXQgbWFrZSB0aGVpciBsYXlvdXQNCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWNoIGNsb3NlciB0byB0aGF0IGV4cGVjdGVkIGJ5IGZpbGVzDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIGluIFdpbmRvd3Mgb3IgYnkgV2luZG93cw0KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucy4NCi0vLw0KLS8vICBOb0NoYW5nZXMgICAgICAgICAgICAgICAgICAgICAtIEEgdGV4dCBpbWFnZXIgY3JlYXRlZCB3aXRoIHRoaXMgZmxhZyBzZXQNCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCBzdXBwb3J0IHRob3NlIEFQSXMgdGhhdCBjaGFuZ2UNCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCdzIGNvbnRlbnRzIG9yIGZvcm1hdHRpbmcsIGJ1dCBmb3IgbW9zdA0KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZSB0ZXh0IHdpbGwgYmUgc2lnbmlmaWNhbnRseSBmYXN0ZXIgaW4NCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtaW5nIG1lYXN1cmVtZW50IGFuZCBkcmF3aW5nDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zLg0KLS8vDQotI2VuZGlmDQotLy8gIE5vRm9udEZhbGxiYWNrICAgICAgICAgICAgICAgIC0gRGlzYWJsZXMgZmFsbGJhY2sgdG8gYWx0ZXJuYXRlIGZvbnRzIGZvcg0KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgbm90IHN1cHBvcnRlZCBpbiB0aGUgcmVxdWVzdGVkDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC4gQW55IG1pc3NpbmcgY2hhcmFjdGVycyB3aWxsIGJlDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgZGlzcGxheWVkIHdpdGggdGhlIGZvbnRzIG1pc3NpbmcgZ2x5cGgsDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXN1YWxseSBhbiBvcGVuIHNxdWFyZS4NCi0vLw0KLS8vICBOb1dyYXAgICAgICAgICAgICAgICAgICAgICAgICAtIERpc2FibGVzIHdyYXBwaW5nIG9mIHRleHQgYmV0d2VlbiBsaW5lcw0KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gZm9ybWF0dGluZyB3aXRoaW4gYSByZWN0YW5nbGUuDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9XcmFwIGlzIGltcGxpZWQgd2hlbiBhIHBvaW50IGlzIHBhc3NlZA0KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgYSByZWN0YW5nbGUsIG9yIHdoZW4gdGhlDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIHJlY3RhbmdsZSBoYXMgYSB6ZXJvIGxpbmUgbGVuZ3RoLg0KLS8vDQotLy8gIE5vQ2xpcCAgICAgICAgICAgICAgICAgICAgICAgIC0gQnkgZGVmYXVsdCB0ZXh0IGlzIGNsaXBwZWQgdG8gdGhlDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGluZyByZWN0YW5nbGUuIFNldHRpbmcgTm9DbGlwDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dzIG92ZXJoYW5naW5nIHBpeGVscyB0byBhZmZlY3QgdGhlDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlIG91dHNpZGUgdGhlIGZvcm1hdHRpbmcgcmVjdGFuZ2xlLg0KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVscyBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIG1heSBiZQ0KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmZmVjdGVkIGlmIHRoZSBnbHlwaHMgb3ZlcmhhbmcgdGhlaXINCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxscywgYW5kIGVpdGhlciB0aGUgTm9GaXRCbGFja0JveCBmbGFnDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gc2V0LCBvciB0aGUgZ2x5cGggZXh0ZW5kcyB0byBmYXINCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiZSBmaXR0ZWQuDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWxzIGFib3ZlL2JlZm9yZSB0aGUgZmlyc3QgbGluZSBvcg0KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlbG93L2FmdGVyIHRoZSBsYXN0IGxpbmUgbWF5IGJlIGFmZmVjdGVkDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIGdseXBocyBleHRlbmQgYmV5b25kIHRoZWlyIGNlbGwNCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2NlbnQgLyBkZXNjZW50LiBUaGlzIGNhbiBvY2N1ciByYXJlbHkNCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHVudXN1YWwgZGlhY3JpdGljIG1hcmsgY29tYmluYXRpb25zLg0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotZW51bSBTdHJpbmdGb3JtYXRGbGFncw0KLXsNCi0gICAgU3RyaW5nRm9ybWF0RmxhZ3NEaXJlY3Rpb25SaWdodFRvTGVmdCAgICAgICAgPSAweDAwMDAwMDAxLA0KLSAgICBTdHJpbmdGb3JtYXRGbGFnc0RpcmVjdGlvblZlcnRpY2FsICAgICAgICAgICA9IDB4MDAwMDAwMDIsDQotICAgIFN0cmluZ0Zvcm1hdEZsYWdzTm9GaXRCbGFja0JveCAgICAgICAgICAgICAgID0gMHgwMDAwMDAwNCwNCi0jaWZuZGVmIERDUl9VU0VfTkVXXzEzNzI1Mg0KLSAgICBTdHJpbmdGb3JtYXRGbGFnc051bWJlckNvbnRleHRBcmFiaWMgICAgICAgICA9IDB4MDAwMDAwMDgsDQotICAgIFN0cmluZ0Zvcm1hdEZsYWdzRGlzYWJsZUthc2hpZGFKdXN0aWZpY2F0aW9uID0gMHgwMDAwMDAxMCwNCi0jZW5kaWYNCi0gICAgU3RyaW5nRm9ybWF0RmxhZ3NEaXNwbGF5Rm9ybWF0Q29udHJvbCAgICAgICAgPSAweDAwMDAwMDIwLA0KLSNpZm5kZWYgRENSX1VTRV9ORVdfMTM3MjUyDQotICAgIFN0cmluZ0Zvcm1hdEZsYWdzRGlzYWJsZUtlcm5pbmcgICAgICAgICAgICAgID0gMHgwMDAwMDA0MCwNCi0gICAgU3RyaW5nRm9ybWF0RmxhZ3NEaXNhYmxlTGlnYXR1cmVzICAgICAgICAgICAgPSAweDAwMDAwMDgwLA0KLSAgICBTdHJpbmdGb3JtYXRGbGFnc0xheW91dExlZ2FjeUJpZGkgICAgICAgICAgICA9IDB4MDAwMDAxMDAsDQotICAgIFN0cmluZ0Zvcm1hdEZsYWdzTm9DaGFuZ2VzICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMDIwMCwNCi0jZW5kaWYNCi0gICAgU3RyaW5nRm9ybWF0RmxhZ3NOb0ZvbnRGYWxsYmFjayAgICAgICAgICAgICAgPSAweDAwMDAwNDAwLA0KLSAgICBTdHJpbmdGb3JtYXRGbGFnc01lYXN1cmVUcmFpbGluZ1NwYWNlcyAgICAgICA9IDB4MDAwMDA4MDAsDQotICAgIFN0cmluZ0Zvcm1hdEZsYWdzTm9XcmFwICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMTAwMCwNCi0gICAgU3RyaW5nRm9ybWF0RmxhZ3NMaW5lTGltaXQgICAgICAgICAgICAgICAgICAgPSAweDAwMDAyMDAwLA0KLQ0KLSAgICBTdHJpbmdGb3JtYXRGbGFnc05vQ2xpcCAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDQwMDANCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gU3RyaW5nVHJpbW1pbmcNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWVudW0gU3RyaW5nVHJpbW1pbmcgew0KLSAgICBTdHJpbmdUcmltbWluZ05vbmUgICAgICAgICAgICAgID0gMCwNCi0gICAgU3RyaW5nVHJpbW1pbmdDaGFyYWN0ZXIgICAgICAgICA9IDEsDQotICAgIFN0cmluZ1RyaW1taW5nV29yZCAgICAgICAgICAgICAgPSAyLA0KLSAgICBTdHJpbmdUcmltbWluZ0VsbGlwc2lzQ2hhcmFjdGVyID0gMywNCi0gICAgU3RyaW5nVHJpbW1pbmdFbGxpcHNpc1dvcmQgICAgICA9IDQsDQotICAgIFN0cmluZ1RyaW1taW5nRWxsaXBzaXNQYXRoICAgICAgPSA1DQotfTsNCi0NCi0jaWZuZGVmIERDUl9VU0VfTkVXXzEzNzI1Mg0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gU3RyaW5nIHVuaXRzDQotLy8NCi0vLyBTdHJpbmcgdW5pdHMgYXJlIGxpa2UgbGVuZ3RoIHVuaXRzIGluIENTUywgdGhleSBtYXkgYmUgYWJzb2x1dGUsIG9yDQotLy8gdGhleSBtYXkgYmUgcmVsYXRpdmUgdG8gYSBmb250IHNpemUuDQotLy8NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWVudW0gU3RyaW5nVW5pdCB7DQotICAgIFN0cmluZ1VuaXRXb3JsZCAgICAgICAgPSBVbml0V29ybGQsDQotICAgIFN0cmluZ1VuaXREaXNwbGF5ICAgICAgPSBVbml0RGlzcGxheSwNCi0gICAgU3RyaW5nVW5pdFBpeGVsICAgICAgICA9IFVuaXRQaXhlbCwNCi0gICAgU3RyaW5nVW5pdFBvaW50ICAgICAgICA9IFVuaXRQb2ludCwNCi0gICAgU3RyaW5nVW5pdEluY2ggICAgICAgICA9IFVuaXRJbmNoLA0KLSAgICBTdHJpbmdVbml0RG9jdW1lbnQgICAgID0gVW5pdERvY3VtZW50LA0KLSAgICBTdHJpbmdVbml0TWlsbGltZXRlciAgID0gVW5pdE1pbGxpbWV0ZXIsDQotICAgIFN0cmluZ1VuaXRFbSAgICAgICAgICAgPSAzMg0KLX07DQotI2VuZGlmDQotDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xNTIxNTQNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIExpbmUgc3BhY2luZyBmbGFncw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotZW51bSBMaW5lU3BhY2luZyB7DQotICAgIExpbmVTcGFjaW5nV29ybGQgICAgICAgICAgICAgICAgPSBVbml0V29ybGQsDQotICAgIExpbmVTcGFjaW5nRGlzcGxheSAgICAgICAgICAgICAgPSBVbml0RGlzcGxheSwNCi0gICAgTGluZVNwYWNpbmdQaXhlbCAgICAgICAgICAgICAgICA9IFVuaXRQaXhlbCwNCi0gICAgTGluZVNwYWNpbmdQb2ludCAgICAgICAgICAgICAgICA9IFVuaXRQb2ludCwNCi0gICAgTGluZVNwYWNpbmdJbmNoICAgICAgICAgICAgICAgICA9IFVuaXRJbmNoLA0KLSAgICBMaW5lU3BhY2luZ0RvY3VtZW50ICAgICAgICAgICAgID0gVW5pdERvY3VtZW50LA0KLSAgICBMaW5lU3BhY2luZ01pbGxpbWV0ZXIgICAgICAgICAgID0gVW5pdE1pbGxpbWV0ZXIsDQotDQotICAgIExpbmVTcGFjaW5nUmVjb21tZW5kZWQgICAgICAgICAgPSAzMiwNCi0gICAgTGluZVNwYWNpbmdBdExlYXN0ICAgICAgICAgICAgICA9IDMzLA0KLSAgICBMaW5lU3BhY2luZ0F0TGVhc3RNdWx0aXBsZSAgICAgID0gMzQsDQotICAgIExpbmVTcGFjaW5nQ2VsbCAgICAgICAgICAgICAgICAgPSAzNSwNCi0gICAgTGluZVNwYWNpbmdDZWxsQXRMZWFzdCAgICAgICAgICA9IDM2LA0KLSAgICBMaW5lU3BhY2luZ0NlbGxBdExlYXN0TXVsdGlwbGUgID0gMzcNCi19Ow0KLQ0KLS8vLyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgb2YgbGluZXNwYWNpbmcgYXJlIHJlbGF0aXZlIHRvIHRoZSBmb250IHNpemUNCi0vLw0KLS8vID09PT09PT09PT09IE1ldGhvZCA9PT09PT09PT09PSAgPT09PT09PT09PT09PT09IFJlbGF0aXZlIHRvID09PT09PT09PT09PT09PQ0KLS8vDQotLy8gTGluZVNwYWNpbmdSZWNvbW1lbmRlZCAgICAgICAgICByZWNvbW1lbmRlZCBsaW5lIHNwYWNpbmcgc3BlY2lmaWVkIGJ5IGZvbnQNCi0vLyBMaW5lU3BhY2luZ0F0TGVhc3QgICAgICAgICAgICAgIG1heChyZWNvbW1lbmRlZCwgdGFsbGVzdCBnbHlwaCBjZWxsKQ0KLS8vIExpbmVTcGFjaW5nQXRMZWFzdE11bHRpcGxlICAgICAgc21hbGxlc3QgbXVsdGlwbGUgb2YgcmVjb21tZW5kZWQgYmlnIGVub3VnaA0KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFsbCBnbHlwaCBjZWxscyBvbiB0aGUgbGluZQ0KLS8vIExpbmVTcGFjaW5nQ2VsbCAgICAgICAgICAgICAgICAgY2VsbCBoZWlnaHQNCi0vLyBMaW5lU3BhY2luZ0NlbGxBdExlYXN0ICAgICAgICAgIG1heChmb250IGNlbGwgaGVpZ2h0LCB0YWxsZXN0IGdseXBoIGNlbGwpDQotLy8gTGluZVNwYWNpbmdDZWxsQXRMZWFzdE11bHRpcGxlICBzbWFsbGVzdCBtdWx0aXBsZSBvZiBjZWxsIGhlaWdodCBiaWcgZW5vdWdoDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYWxsIGdseXBoIGNlbGxzIG9uIHRoZSBsaW5lDQotI2VuZGlmDQotDQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBOYXRpb25hbCBsYW5ndWFnZSBkaWdpdCBzdWJzdGl0dXRpb24NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWVudW0gU3RyaW5nRGlnaXRTdWJzdGl0dXRlDQotew0KLSAgICBTdHJpbmdEaWdpdFN1YnN0aXR1dGVVc2VyICAgICAgICA9IDAsICAvLyBBcyBOTFMgc2V0dGluZw0KLSAgICBTdHJpbmdEaWdpdFN1YnN0aXR1dGVOb25lICAgICAgICA9IDEsDQotICAgIFN0cmluZ0RpZ2l0U3Vic3RpdHV0ZU5hdGlvbmFsICAgID0gMiwNCi0gICAgU3RyaW5nRGlnaXRTdWJzdGl0dXRlVHJhZGl0aW9uYWwgPSAzDQotfTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEhvdGtleSBwcmVmaXggaW50ZXJwcmV0YXRpb24NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWVudW0gSG90a2V5UHJlZml4DQotew0KLSAgICBIb3RrZXlQcmVmaXhOb25lICAgICAgICA9IDAsDQotICAgIEhvdGtleVByZWZpeFNob3cgICAgICAgID0gMSwNCi0gICAgSG90a2V5UHJlZml4SGlkZSAgICAgICAgPSAyDQotfTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIFRleHQgYWxpZ25tZW50IGZsYWdzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1lbnVtIFN0cmluZ0FsaWdubWVudA0KLXsNCi0gICAgLy8gTGVmdCBlZGdlIGZvciBsZWZ0LXRvLXJpZ2h0IHRleHQsDQotICAgIC8vIHJpZ2h0IGZvciByaWdodC10by1sZWZ0IHRleHQsDQotICAgIC8vIGFuZCB0b3AgZm9yIHZlcnRpY2FsDQotICAgIFN0cmluZ0FsaWdubWVudE5lYXIgICA9IDAsDQotICAgIFN0cmluZ0FsaWdubWVudENlbnRlciA9IDEsDQotICAgIFN0cmluZ0FsaWdubWVudEZhciAgICA9IDINCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gRHJpdmVyU3RyaW5nT3B0aW9ucw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotZW51bSBEcml2ZXJTdHJpbmdPcHRpb25zDQotew0KLSAgICBEcml2ZXJTdHJpbmdPcHRpb25zQ21hcExvb2t1cCAgICAgICAgICAgICA9IDEsDQotICAgIERyaXZlclN0cmluZ09wdGlvbnNWZXJ0aWNhbCAgICAgICAgICAgICAgID0gMiwNCi0gICAgRHJpdmVyU3RyaW5nT3B0aW9uc1JlYWxpemVkQWR2YW5jZSAgICAgICAgPSA0LA0KLSNpZm5kZWYgRENSX1VTRV9ORVdfMTM3MjUyDQotICAgIERyaXZlclN0cmluZ09wdGlvbnNDb21wZW5zYXRlUmVzb2x1dGlvbiAgID0gOA0KLSNlbmRpZg0KLX07DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBGbHVzaCBJbnRlbnRpb24gZmxhZ3MNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWVudW0gRmx1c2hJbnRlbnRpb24NCi17DQotICAgIEZsdXNoSW50ZW50aW9uRmx1c2ggPSAwLCAgICAgICAgLy8gRmx1c2ggYWxsIGJhdGNoZWQgcmVuZGVyaW5nIG9wZXJhdGlvbnMNCi0gICAgRmx1c2hJbnRlbnRpb25TeW5jID0gMSAgICAgICAgICAvLyBGbHVzaCBhbGwgYmF0Y2hlZCByZW5kZXJpbmcgb3BlcmF0aW9ucw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCB3YWl0IGZvciB0aGVtIHRvIGNvbXBsZXRlDQotfTsNCi0NCi0jaWZuZGVmIERDUl9VU0VfTkVXXzE3NTg2Ng0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gV2luZG93IENoYW5nZSBOb3RpZmljYXRpb24gdHlwZXMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWVudW0gV2luZG93Tm90aWZ5RW51bQ0KLXsNCi0gICBXaW5kb3dOb3RpZnlFbnVtRW5hYmxlID0gMCwNCi0gICBXaW5kb3dOb3RpZnlFbnVtRGlzYWJsZSwNCi0gICBXaW5kb3dOb3RpZnlFbnVtUGFsZXR0ZSwNCi0gICBXaW5kb3dOb3RpZnlFbnVtRGlzcGxheSwNCi0gICBXaW5kb3dOb3RpZnlFbnVtU3lzQ29sb3INCi19Ow0KLQ0KLSNlbmRpZg0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gSW1hZ2UgZW5jb2RlciBwYXJhbWV0ZXIgcmVsYXRlZCB0eXBlcw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotI2lmZGVmIERDUl9VU0VfTkVXXzE0NTgwNA0KLWVudW0gRW5jb2RlclBhcmFtZXRlclZhbHVlVHlwZQ0KLXsNCi0gICAgRW5jb2RlclBhcmFtZXRlclZhbHVlVHlwZUJ5dGUgICAgICAgICAgID0gMSwgICAgLy8gOC1iaXQgdW5zaWduZWQgaW50DQotICAgIEVuY29kZXJQYXJhbWV0ZXJWYWx1ZVR5cGVBU0NJSSAgICAgICAgICA9IDIsICAgIC8vIDgtYml0IGJ5dGUgY29udGFpbmluZyBvbmUgNy1iaXQgQVNDSUkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29kZS4gTlVMTCB0ZXJtaW5hdGVkLg0KLSAgICBFbmNvZGVyUGFyYW1ldGVyVmFsdWVUeXBlU2hvcnQgICAgICAgICAgPSAzLCAgICAvLyAxNi1iaXQgdW5zaWduZWQgaW50DQotICAgIEVuY29kZXJQYXJhbWV0ZXJWYWx1ZVR5cGVMb25nICAgICAgICAgICA9IDQsICAgIC8vIDMyLWJpdCB1bnNpZ25lZCBpbnQNCi0gICAgRW5jb2RlclBhcmFtZXRlclZhbHVlVHlwZVJhdGlvbmFsICAgICAgID0gNSwgICAgLy8gVHdvIExvbmdzLiBUaGUgZmlyc3QgTG9uZyBpcyB0aGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbnVtZXJhdG9yLCB0aGUgc2Vjb25kIExvbmcgZXhwcmVzc2VzIHRoZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZW5vbWludG9yLg0KLSAgICBFbmNvZGVyUGFyYW1ldGVyVmFsdWVUeXBlTG9uZ1JhbmdlICAgICAgPSA2LCAgICAvLyBUd28gbG9uZ3Mgd2hpY2ggc3BlY2lmeSBhIHJhbmdlIG9mDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludGVnZXIgdmFsdWVzLiBUaGUgZmlyc3QgTG9uZyBzcGVjaWZpZXMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGxvd2VyIGVuZCBhbmQgdGhlIHNlY29uZCBvbmUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWVzIHRoZSBoaWdoZXIgZW5kLiBBbGwgdmFsdWVzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZSBpbmNsdXNpdmUgYXQgYm90aCBlbmRzDQotICAgIEVuY29kZXJQYXJhbWV0ZXJWYWx1ZVR5cGVVbmRlZmluZWQgICAgICA9IDcsICAgIC8vIDgtYml0IGJ5dGUgdGhhdCBjYW4gdGFrZSBhbnkgdmFsdWUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVwZW5kaW5nIG9uIGZpZWxkIGRlZmluaXRpb24NCi0gICAgRW5jb2RlclBhcmFtZXRlclZhbHVlVHlwZVJhdGlvbmFsUmFuZ2UgID0gOCAgICAgLy8gVHdvIFJhdGlvbmFscy4gVGhlIGZpcnN0IFJhdGlvbmFsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmllcyB0aGUgbG93ZXIgZW5kIGFuZCB0aGUgc2Vjb25kDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmllcyB0aGUgaGlnaGVyIGVuZC4gQWxsIHZhbHVlcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcmUgaW5jbHVzaXZlIGF0IGJvdGggZW5kcw0KLX07DQotI2Vsc2UNCi1lbnVtIFZhbHVlVHlwZQ0KLXsNCi0gICAgVmFsdWVUeXBlQnl0ZSAgICAgICAgICAgPSAxLCAgICAvLyA4LWJpdCB1bnNpZ25lZCBpbnQNCi0gICAgVmFsdWVUeXBlQVNDSUkgICAgICAgICAgPSAyLCAgICAvLyA4LWJpdCBieXRlIGNvbnRhaW5pbmcgb25lIDctYml0IEFTQ0lJDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29kZS4gTlVMTCB0ZXJtaW5hdGVkLg0KLSAgICBWYWx1ZVR5cGVTaG9ydCAgICAgICAgICA9IDMsICAgIC8vIDE2LWJpdCB1bnNpZ25lZCBpbnQNCi0gICAgVmFsdWVUeXBlTG9uZyAgICAgICAgICAgPSA0LCAgICAvLyAzMi1iaXQgdW5zaWduZWQgaW50DQotICAgIFZhbHVlVHlwZVJhdGlvbmFsICAgICAgID0gNSwgICAgLy8gVHdvIExvbmdzLiBUaGUgZmlyc3QgTG9uZyBpcyB0aGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBudW1lcmF0b3IsIHRoZSBzZWNvbmQgTG9uZyBleHByZXNzZXMgdGhlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVub21pbnRvci4NCi0gICAgVmFsdWVUeXBlTG9uZ1JhbmdlICAgICAgPSA2LCAgICAvLyBUd28gbG9uZ3Mgd2hpY2ggc3BlY2lmeSBhIHJhbmdlIG9mDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciB2YWx1ZXMuIFRoZSBmaXJzdCBMb25nIHNwZWNpZmllcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBsb3dlciBlbmQgYW5kIHRoZSBzZWNvbmQgb25lDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWVzIHRoZSBoaWdoZXIgZW5kLiBBbGwgdmFsdWVzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJlIGluY2x1c2l2ZSBhdCBib3RoIGVuZHMNCi0gICAgVmFsdWVUeXBlVW5kZWZpbmVkICAgICAgPSA3LCAgICAvLyA4LWJpdCBieXRlIHRoYXQgY2FuIHRha2UgYW55IHZhbHVlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVwZW5kaW5nIG9uIGZpZWxkIGRlZmluaXRpb24NCi0gICAgVmFsdWVUeXBlUmF0aW9uYWxSYW5nZSAgPSA4ICAgICAvLyBUd28gUmF0aW9uYWxzLiBUaGUgZmlyc3QgUmF0aW9uYWwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWZpZXMgdGhlIGxvd2VyIGVuZCBhbmQgdGhlIHNlY29uZA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmllcyB0aGUgaGlnaGVyIGVuZC4gQWxsIHZhbHVlcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZSBpbmNsdXNpdmUgYXQgYm90aCBlbmRzDQotfTsNCi0jZW5kaWYNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEltYWdlIGVuY29kZXIgdmFsdWUgdHlwZXMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWVudW0gRW5jb2RlclZhbHVlDQotew0KLSAgICBFbmNvZGVyVmFsdWVDb2xvclR5cGVDTVlLLA0KLSAgICBFbmNvZGVyVmFsdWVDb2xvclR5cGVZQ0NLLA0KLSAgICBFbmNvZGVyVmFsdWVDb21wcmVzc2lvbkxaVywNCi0gICAgRW5jb2RlclZhbHVlQ29tcHJlc3Npb25DQ0lUVDMsDQotICAgIEVuY29kZXJWYWx1ZUNvbXByZXNzaW9uQ0NJVFQ0LA0KLSAgICBFbmNvZGVyVmFsdWVDb21wcmVzc2lvblJsZSwNCi0gICAgRW5jb2RlclZhbHVlQ29tcHJlc3Npb25Ob25lLA0KLSAgICBFbmNvZGVyVmFsdWVTY2FuTWV0aG9kSW50ZXJsYWNlZCwNCi0gICAgRW5jb2RlclZhbHVlU2Nhbk1ldGhvZE5vbkludGVybGFjZWQsDQotICAgIEVuY29kZXJWYWx1ZVZlcnNpb25HaWY4NywNCi0gICAgRW5jb2RlclZhbHVlVmVyc2lvbkdpZjg5LA0KLSAgICBFbmNvZGVyVmFsdWVSZW5kZXJQcm9ncmVzc2l2ZSwNCi0gICAgRW5jb2RlclZhbHVlUmVuZGVyTm9uUHJvZ3Jlc3NpdmUsDQotICAgIEVuY29kZXJWYWx1ZVRyYW5zZm9ybVJvdGF0ZTkwLA0KLSAgICBFbmNvZGVyVmFsdWVUcmFuc2Zvcm1Sb3RhdGUxODAsDQotICAgIEVuY29kZXJWYWx1ZVRyYW5zZm9ybVJvdGF0ZTI3MCwNCi0gICAgRW5jb2RlclZhbHVlVHJhbnNmb3JtRmxpcEhvcml6b250YWwsDQotICAgIEVuY29kZXJWYWx1ZVRyYW5zZm9ybUZsaXBWZXJ0aWNhbCwNCi0gICAgI2lmZGVmIERDUl9VU0VfTkVXXzE0MDg2MQ0KLSAgICBFbmNvZGVyVmFsdWVNdWx0aUZyYW1lLA0KLSAgICAjZWxzZQ0KLSAgICBFbmNvZGVWYWx1ZU11bHRpRnJhbWUsDQotICAgICNlbmRpZg0KLSAgICBFbmNvZGVyVmFsdWVMYXN0RnJhbWUsDQotICAgIEVuY29kZXJWYWx1ZUZsdXNoLA0KLSAgICAjaWZkZWYgRENSX1VTRV9ORVdfMTQwODYxDQotICAgIEVuY29kZXJWYWx1ZUZyYW1lRGltZW5zaW9uVGltZSwNCi0gICAgRW5jb2RlclZhbHVlRnJhbWVEaW1lbnNpb25SZXNvbHV0aW9uLA0KLSAgICBFbmNvZGVyVmFsdWVGcmFtZURpbWVuc2lvblBhZ2UNCi0gICAgI2Vsc2UNCi0gICAgRW5jb2RlVmFsdWVGcmFtZURpbWVuc2lvblRpbWUsDQotICAgIEVuY29kZVZhbHVlRnJhbWVEaW1lbnNpb25SZXNvbHV0aW9uLA0KLSAgICBFbmNvZGVWYWx1ZUZyYW1lRGltZW5zaW9uUGFnZQ0KLSAgICAjZW5kaWYNCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gR3JhcGhpY3MgbGF5b3V0IHZhbHVlcyAoc3VwcG9ydCBmb3IgTWlkZGxlIEVhc3QgbG9jYWxpemF0aW9uKQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotZW51bSBHcmFwaGljc0xheW91dA0KLXsNCi0gICAgR3JhcGhpY3NMYXlvdXROb3JtYWwsDQotICAgIEdyYXBoaWNzTGF5b3V0TWlycm9yZWQsDQotICAgIEdyYXBoaWNzTGF5b3V0TWlycm9yZWRJZ25vcmVJbWFnZXMsDQotICAgIEdyYXBoaWNzTGF5b3V0TWlycm9yZWRGb3JjZUltYWdlcw0KLX07DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBJbWFnZSBsYXlvdXQgdmFsdWVzIChzdXBwb3J0IGZvciBNaWRkbGUgRWFzdCBsb2NhbGl6YXRpb24pDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1lbnVtIEltYWdlTGF5b3V0DQotew0KLSAgICBJbWFnZUxheW91dE5vcm1hbCwNCi0gICAgSW1hZ2VMYXlvdXRJZ25vcmVNaXJyb3JlZA0KLX07DQotDQotZW51bSBFbWZUb1dtZkJpdHNGbGFncw0KLXsNCi0gICAgRW1mVG9XbWZCaXRzRmxhZ3NEZWZhdWx0ICAgID0gMHgwMDAwMDAwMCwNCi0gICAgRW1mVG9XbWZCaXRzRmxhZ3NFbWJlZEVtZiAgID0gMHgwMDAwMDAwMSwNCi0gICAgRW1mVG9XbWZCaXRzRmxhZ3NJbmNsdWRlQVBNID0gMHgwMDAwMDAwMiwNCi0gICAgRW1mVG9XbWZCaXRzRmxhZ3NOb1hPUkNsaXAgID0gMHgwMDAwMDAwNA0KLX07DQotDQotI2VuZGlmIC8vICFfR0RJUExVU0VOVU1TX0gNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCisqCisqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqIE1vZHVsZSBOYW1lOgorKgorKiAgIEdkaXBsdXNFbnVtcy5oCisqCisqIEFic3RyYWN0OgorKgorKiAgIFZhcmlvdXMgZW51bWVyYXRpb24gdHlwZXMKKyoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfR0RJUExVU0VOVU1TX0gKKyNkZWZpbmUgX0dESVBMVVNFTlVNU19ICisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRGVmYXVsdCBiZXppZXIgZmxhdHRlbmluZyB0b2xlcmFuY2UgaW4gZGV2aWNlIHBpeGVscy4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY29uc3QgZmxvYXQgRmxhdG5lc3NEZWZhdWx0ID0gMS4wZi80LjBmOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBHcmFwaGljcyBhbmQgQ29udGFpbmVyIFN0YXRlIGNvb2tpZXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordHlwZWRlZiBVSU5UICAgICBHcmFwaGljc1N0YXRlOwordHlwZWRlZiBVSU5UICAgICBHcmFwaGljc0NvbnRhaW5lcjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRmlsbCBtb2RlIGNvbnN0YW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlbnVtIEZpbGxNb2RlCit7CisgICAgRmlsbE1vZGVBbHRlcm5hdGUsICAgICAgICAvLyAwCisgICAgRmlsbE1vZGVXaW5kaW5nICAgICAgICAgICAvLyAxCit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBRdWFsaXR5IG1vZGUgY29uc3RhbnRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VudW0gUXVhbGl0eU1vZGUKK3sKKyAgICBRdWFsaXR5TW9kZUludmFsaWQgICA9IC0xLAorICAgIFF1YWxpdHlNb2RlRGVmYXVsdCAgID0gMCwKKyAgICBRdWFsaXR5TW9kZUxvdyAgICAgICA9IDEsIC8vIGZvciBhcHBzIHRoYXQgbmVlZCB0aGUgYmVzdCBwZXJmb3JtYW5jZQorICAgIFF1YWxpdHlNb2RlSGlnaCAgICAgID0gMiAgLy8gZm9yIGFwcHMgdGhhdCBuZWVkIHRoZSBiZXN0IHJlbmRlcmluZyBxdWFsaXR5Cit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBbHBoYSBjb21wb3NpdGluZyBtb2RlIGNvbnN0YW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlbnVtIENvbXBvc2l0aW5nTW9kZQoreworICAgIENvbXBvc2l0aW5nTW9kZVNvdXJjZU92ZXIsICAgIC8vIDAKKyAgICBDb21wb3NpdGluZ01vZGVTb3VyY2VDb3B5ICAgICAvLyAxCit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBbHBoYSBjb21wb3NpdGluZyBxdWFsaXR5IGNvbnN0YW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlbnVtIENvbXBvc2l0aW5nUXVhbGl0eQoreworICAgIENvbXBvc2l0aW5nUXVhbGl0eUludmFsaWQgICAgICAgICAgPSBRdWFsaXR5TW9kZUludmFsaWQsCisgICAgQ29tcG9zaXRpbmdRdWFsaXR5RGVmYXVsdCAgICAgICAgICA9IFF1YWxpdHlNb2RlRGVmYXVsdCwKKyAgICBDb21wb3NpdGluZ1F1YWxpdHlIaWdoU3BlZWQgICAgICAgID0gUXVhbGl0eU1vZGVMb3csCisgICAgQ29tcG9zaXRpbmdRdWFsaXR5SGlnaFF1YWxpdHkgICAgICA9IFF1YWxpdHlNb2RlSGlnaCwKKyAgICBDb21wb3NpdGluZ1F1YWxpdHlHYW1tYUNvcnJlY3RlZCwKKyAgICBDb21wb3NpdGluZ1F1YWxpdHlBc3N1bWVMaW5lYXIKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFVuaXQgY29uc3RhbnRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VudW0gVW5pdAoreworICAgIFVuaXRXb3JsZCwgICAgICAvLyAwIC0tIFdvcmxkIGNvb3JkaW5hdGUgKG5vbi1waHlzaWNhbCB1bml0KQorICAgIFVuaXREaXNwbGF5LCAgICAvLyAxIC0tIFZhcmlhYmxlIC0tIGZvciBQYWdlVHJhbnNmb3JtIG9ubHkKKyAgICBVbml0UGl4ZWwsICAgICAgLy8gMiAtLSBFYWNoIHVuaXQgaXMgb25lIGRldmljZSBwaXhlbC4KKyAgICBVbml0UG9pbnQsICAgICAgLy8gMyAtLSBFYWNoIHVuaXQgaXMgYSBwcmludGVyJ3MgcG9pbnQsIG9yIDEvNzIgaW5jaC4KKyAgICBVbml0SW5jaCwgICAgICAgLy8gNCAtLSBFYWNoIHVuaXQgaXMgMSBpbmNoLgorICAgIFVuaXREb2N1bWVudCwgICAvLyA1IC0tIEVhY2ggdW5pdCBpcyAxLzMwMCBpbmNoLgorICAgIFVuaXRNaWxsaW1ldGVyICAvLyA2IC0tIEVhY2ggdW5pdCBpcyAxIG1pbGxpbWV0ZXIuCit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNZXRhZmlsZUZyYW1lVW5pdAorLy8KKy8vIFRoZSBmcmFtZVJlY3QgZm9yIGNyZWF0aW5nIGEgbWV0YWZpbGUgY2FuIGJlIHNwZWNpZmllZCBpbiBhbnkgb2YgdGhlc2UKKy8vIHVuaXRzLiAgVGhlcmUgaXMgYW4gZXh0cmEgZnJhbWUgdW5pdCB2YWx1ZSAoTWV0YWZpbGVGcmFtZVVuaXRHZGkpIHNvCisvLyB0aGF0IHVuaXRzIGNhbiBiZSBzdXBwbGllZCBpbiB0aGUgc2FtZSB1bml0cyB0aGF0IEdESSBleHBlY3RzIGZvcgorLy8gZnJhbWUgcmVjdHMgLS0gdGhlc2UgdW5pdHMgYXJlIGluIC4wMSAoMS8xMDB0aHMpIG1pbGxpbWV0ZXIgdW5pdHMKKy8vIGFzIGRlZmluZWQgYnkgR0RJLgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZW51bSBNZXRhZmlsZUZyYW1lVW5pdAoreworICAgIE1ldGFmaWxlRnJhbWVVbml0UGl4ZWwgICAgICA9IFVuaXRQaXhlbCwKKyAgICBNZXRhZmlsZUZyYW1lVW5pdFBvaW50ICAgICAgPSBVbml0UG9pbnQsCisgICAgTWV0YWZpbGVGcmFtZVVuaXRJbmNoICAgICAgID0gVW5pdEluY2gsCisgICAgTWV0YWZpbGVGcmFtZVVuaXREb2N1bWVudCAgID0gVW5pdERvY3VtZW50LAorICAgIE1ldGFmaWxlRnJhbWVVbml0TWlsbGltZXRlciA9IFVuaXRNaWxsaW1ldGVyLAorICAgIE1ldGFmaWxlRnJhbWVVbml0R2RpICAgICAgICAgICAgICAgICAgICAgICAgLy8gR0RJIGNvbXBhdGlibGUgLjAxIE1NIHVuaXRzCit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb29yZGluYXRlIHNwYWNlIGlkZW50aWZpZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VudW0gQ29vcmRpbmF0ZVNwYWNlCit7CisgICAgQ29vcmRpbmF0ZVNwYWNlV29ybGQsICAgICAvLyAwCisgICAgQ29vcmRpbmF0ZVNwYWNlUGFnZSwgICAgICAvLyAxCisgICAgQ29vcmRpbmF0ZVNwYWNlRGV2aWNlICAgICAvLyAyCit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBWYXJpb3VzIHdyYXAgbW9kZXMgZm9yIGJydXNoZXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZW51bSBXcmFwTW9kZQoreworICAgIFdyYXBNb2RlVGlsZSwgICAgICAgIC8vIDAKKyAgICBXcmFwTW9kZVRpbGVGbGlwWCwgICAvLyAxCisgICAgV3JhcE1vZGVUaWxlRmxpcFksICAgLy8gMgorICAgIFdyYXBNb2RlVGlsZUZsaXBYWSwgIC8vIDMKKyAgICBXcmFwTW9kZUNsYW1wICAgICAgICAvLyA0Cit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBWYXJpb3VzIGhhdGNoIHN0eWxlcworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlbnVtIEhhdGNoU3R5bGUKK3sKKyAgICBIYXRjaFN0eWxlSG9yaXpvbnRhbCwgICAgICAgICAgICAgICAgICAgLy8gMAorICAgIEhhdGNoU3R5bGVWZXJ0aWNhbCwgICAgICAgICAgICAgICAgICAgICAvLyAxCisgICAgSGF0Y2hTdHlsZUZvcndhcmREaWFnb25hbCwgICAgICAgICAgICAgIC8vIDIKKyAgICBIYXRjaFN0eWxlQmFja3dhcmREaWFnb25hbCwgICAgICAgICAgICAgLy8gMworICAgIEhhdGNoU3R5bGVDcm9zcywgICAgICAgICAgICAgICAgICAgICAgICAvLyA0CisgICAgSGF0Y2hTdHlsZURpYWdvbmFsQ3Jvc3MsICAgICAgICAgICAgICAgIC8vIDUKKyAgICBIYXRjaFN0eWxlMDVQZXJjZW50LCAgICAgICAgICAgICAgICAgICAgLy8gNgorICAgIEhhdGNoU3R5bGUxMFBlcmNlbnQsICAgICAgICAgICAgICAgICAgICAvLyA3CisgICAgSGF0Y2hTdHlsZTIwUGVyY2VudCwgICAgICAgICAgICAgICAgICAgIC8vIDgKKyAgICBIYXRjaFN0eWxlMjVQZXJjZW50LCAgICAgICAgICAgICAgICAgICAgLy8gOQorICAgIEhhdGNoU3R5bGUzMFBlcmNlbnQsICAgICAgICAgICAgICAgICAgICAvLyAxMAorICAgIEhhdGNoU3R5bGU0MFBlcmNlbnQsICAgICAgICAgICAgICAgICAgICAvLyAxMQorICAgIEhhdGNoU3R5bGU1MFBlcmNlbnQsICAgICAgICAgICAgICAgICAgICAvLyAxMgorICAgIEhhdGNoU3R5bGU2MFBlcmNlbnQsICAgICAgICAgICAgICAgICAgICAvLyAxMworICAgIEhhdGNoU3R5bGU3MFBlcmNlbnQsICAgICAgICAgICAgICAgICAgICAvLyAxNAorICAgIEhhdGNoU3R5bGU3NVBlcmNlbnQsICAgICAgICAgICAgICAgICAgICAvLyAxNQorICAgIEhhdGNoU3R5bGU4MFBlcmNlbnQsICAgICAgICAgICAgICAgICAgICAvLyAxNgorICAgIEhhdGNoU3R5bGU5MFBlcmNlbnQsICAgICAgICAgICAgICAgICAgICAvLyAxNworICAgIEhhdGNoU3R5bGVMaWdodERvd253YXJkRGlhZ29uYWwsICAgICAgICAvLyAxOAorICAgIEhhdGNoU3R5bGVMaWdodFVwd2FyZERpYWdvbmFsLCAgICAgICAgICAvLyAxOQorICAgIEhhdGNoU3R5bGVEYXJrRG93bndhcmREaWFnb25hbCwgICAgICAgICAvLyAyMAorICAgIEhhdGNoU3R5bGVEYXJrVXB3YXJkRGlhZ29uYWwsICAgICAgICAgICAvLyAyMQorICAgIEhhdGNoU3R5bGVXaWRlRG93bndhcmREaWFnb25hbCwgICAgICAgICAvLyAyMgorICAgIEhhdGNoU3R5bGVXaWRlVXB3YXJkRGlhZ29uYWwsICAgICAgICAgICAvLyAyMworICAgIEhhdGNoU3R5bGVMaWdodFZlcnRpY2FsLCAgICAgICAgICAgICAgICAvLyAyNAorICAgIEhhdGNoU3R5bGVMaWdodEhvcml6b250YWwsICAgICAgICAgICAgICAvLyAyNQorICAgIEhhdGNoU3R5bGVOYXJyb3dWZXJ0aWNhbCwgICAgICAgICAgICAgICAvLyAyNgorICAgIEhhdGNoU3R5bGVOYXJyb3dIb3Jpem9udGFsLCAgICAgICAgICAgICAvLyAyNworICAgIEhhdGNoU3R5bGVEYXJrVmVydGljYWwsICAgICAgICAgICAgICAgICAvLyAyOAorICAgIEhhdGNoU3R5bGVEYXJrSG9yaXpvbnRhbCwgICAgICAgICAgICAgICAvLyAyOQorICAgIEhhdGNoU3R5bGVEYXNoZWREb3dud2FyZERpYWdvbmFsLCAgICAgICAvLyAzMAorICAgIEhhdGNoU3R5bGVEYXNoZWRVcHdhcmREaWFnb25hbCwgICAgICAgICAvLyAzMQorICAgIEhhdGNoU3R5bGVEYXNoZWRIb3Jpem9udGFsLCAgICAgICAgICAgICAvLyAzMgorICAgIEhhdGNoU3R5bGVEYXNoZWRWZXJ0aWNhbCwgICAgICAgICAgICAgICAvLyAzMworICAgIEhhdGNoU3R5bGVTbWFsbENvbmZldHRpLCAgICAgICAgICAgICAgICAvLyAzNAorICAgIEhhdGNoU3R5bGVMYXJnZUNvbmZldHRpLCAgICAgICAgICAgICAgICAvLyAzNQorICAgIEhhdGNoU3R5bGVaaWdaYWcsICAgICAgICAgICAgICAgICAgICAgICAvLyAzNgorICAgIEhhdGNoU3R5bGVXYXZlLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAzNworICAgIEhhdGNoU3R5bGVEaWFnb25hbEJyaWNrLCAgICAgICAgICAgICAgICAvLyAzOAorICAgIEhhdGNoU3R5bGVIb3Jpem9udGFsQnJpY2ssICAgICAgICAgICAgICAvLyAzOQorICAgIEhhdGNoU3R5bGVXZWF2ZSwgICAgICAgICAgICAgICAgICAgICAgICAvLyA0MAorICAgIEhhdGNoU3R5bGVQbGFpZCwgICAgICAgICAgICAgICAgICAgICAgICAvLyA0MQorICAgIEhhdGNoU3R5bGVEaXZvdCwgICAgICAgICAgICAgICAgICAgICAgICAvLyA0MgorICAgIEhhdGNoU3R5bGVEb3R0ZWRHcmlkLCAgICAgICAgICAgICAgICAgICAvLyA0MworICAgIEhhdGNoU3R5bGVEb3R0ZWREaWFtb25kLCAgICAgICAgICAgICAgICAvLyA0NAorICAgIEhhdGNoU3R5bGVTaGluZ2xlLCAgICAgICAgICAgICAgICAgICAgICAvLyA0NQorICAgIEhhdGNoU3R5bGVUcmVsbGlzLCAgICAgICAgICAgICAgICAgICAgICAvLyA0NgorICAgIEhhdGNoU3R5bGVTcGhlcmUsICAgICAgICAgICAgICAgICAgICAgICAvLyA0NworICAgIEhhdGNoU3R5bGVTbWFsbEdyaWQsICAgICAgICAgICAgICAgICAgICAvLyA0OAorICAgIEhhdGNoU3R5bGVTbWFsbENoZWNrZXJCb2FyZCwgICAgICAgICAgICAvLyA0OQorICAgIEhhdGNoU3R5bGVMYXJnZUNoZWNrZXJCb2FyZCwgICAgICAgICAgICAvLyA1MAorICAgIEhhdGNoU3R5bGVPdXRsaW5lZERpYW1vbmQsICAgICAgICAgICAgICAvLyA1MQorICAgIEhhdGNoU3R5bGVTb2xpZERpYW1vbmQsICAgICAgICAgICAgICAgICAvLyA1MgorCisgICAgSGF0Y2hTdHlsZVRvdGFsLCAgICAvLyBtdXN0IGJlIGFmdGVyIGFsbCB1bmlxdWUgaGF0Y2ggc3R5bGVzCisKKyAgICBIYXRjaFN0eWxlTGFyZ2VHcmlkID0gSGF0Y2hTdHlsZUNyb3NzLCAgLy8gNCAgYW4gYWxpYXMgZm9yIHRoZSBjcm9zcyBzdHlsZQorCisgICAgSGF0Y2hTdHlsZU1pbiAgICAgICA9IEhhdGNoU3R5bGVIb3Jpem9udGFsLAorICAgIEhhdGNoU3R5bGVNYXggICAgICAgPSBIYXRjaFN0eWxlVG90YWwgLSAxLAorfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRGFzaCBzdHlsZSBjb25zdGFudHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZW51bSBEYXNoU3R5bGUKK3sKKyAgICBEYXNoU3R5bGVTb2xpZCwgICAgICAgICAgLy8gMAorICAgIERhc2hTdHlsZURhc2gsICAgICAgICAgICAvLyAxCisgICAgRGFzaFN0eWxlRG90LCAgICAgICAgICAgIC8vIDIKKyAgICBEYXNoU3R5bGVEYXNoRG90LCAgICAgICAgLy8gMworICAgIERhc2hTdHlsZURhc2hEb3REb3QsICAgICAvLyA0CisgICAgRGFzaFN0eWxlQ3VzdG9tICAgICAgICAgIC8vIDUKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERhc2ggY2FwIGNvbnN0YW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlbnVtIERhc2hDYXAKK3sKKyAgICBEYXNoQ2FwRmxhdCAgICAgICAgICAgICA9IDAsCisgICAgRGFzaENhcFJvdW5kICAgICAgICAgICAgPSAyLAorICAgIERhc2hDYXBUcmlhbmdsZSAgICAgICAgID0gMworfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTGluZSBjYXAgY29uc3RhbnRzIChvbmx5IHRoZSBsb3dlc3QgOCBiaXRzIGFyZSB1c2VkKS4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZW51bSBMaW5lQ2FwCit7CisgICAgTGluZUNhcEZsYXQgICAgICAgICAgICAgPSAwLAorICAgIExpbmVDYXBTcXVhcmUgICAgICAgICAgID0gMSwKKyAgICBMaW5lQ2FwUm91bmQgICAgICAgICAgICA9IDIsCisgICAgTGluZUNhcFRyaWFuZ2xlICAgICAgICAgPSAzLAorCisgICAgTGluZUNhcE5vQW5jaG9yICAgICAgICAgPSAweDEwLCAvLyBjb3JyZXNwb25kcyB0byBmbGF0IGNhcAorICAgIExpbmVDYXBTcXVhcmVBbmNob3IgICAgID0gMHgxMSwgLy8gY29ycmVzcG9uZHMgdG8gc3F1YXJlIGNhcAorICAgIExpbmVDYXBSb3VuZEFuY2hvciAgICAgID0gMHgxMiwgLy8gY29ycmVzcG9uZHMgdG8gcm91bmQgY2FwCisgICAgTGluZUNhcERpYW1vbmRBbmNob3IgICAgPSAweDEzLCAvLyBjb3JyZXNwb25kcyB0byB0cmlhbmdsZSBjYXAKKyAgICBMaW5lQ2FwQXJyb3dBbmNob3IgICAgICA9IDB4MTQsIC8vIG5vIGNvcnJlc3BvbmRlbmNlCisKKyAgICBMaW5lQ2FwQ3VzdG9tICAgICAgICAgICA9IDB4ZmYsIC8vIGN1c3RvbSBjYXAKKworICAgIExpbmVDYXBBbmNob3JNYXNrICAgICAgID0gMHhmMCAgLy8gbWFzayB0byBjaGVjayBmb3IgYW5jaG9yIG9yIG5vdC4KK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEN1c3RvbSBMaW5lIGNhcCB0eXBlIGNvbnN0YW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlbnVtIEN1c3RvbUxpbmVDYXBUeXBlCit7CisgICAgQ3VzdG9tTGluZUNhcFR5cGVEZWZhdWx0ICAgICAgICAgPSAwLAorICAgIEN1c3RvbUxpbmVDYXBUeXBlQWRqdXN0YWJsZUFycm93ID0gMQorfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTGluZSBqb2luIGNvbnN0YW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlbnVtIExpbmVKb2luCit7CisgICAgTGluZUpvaW5NaXRlciAgICAgICAgPSAwLAorICAgIExpbmVKb2luQmV2ZWwgICAgICAgID0gMSwKKyAgICBMaW5lSm9pblJvdW5kICAgICAgICA9IDIsCisgICAgTGluZUpvaW5NaXRlckNsaXBwZWQgPSAzCit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQYXRoIHBvaW50IHR5cGVzIChvbmx5IHRoZSBsb3dlc3QgOCBiaXRzIGFyZSB1c2VkLikKKy8vICBUaGUgbG93ZXN0IDMgYml0cyBhcmUgaW50ZXJwcmV0ZWQgYXMgcG9pbnQgdHlwZQorLy8gIFRoZSBoaWdoZXIgNSBiaXRzIGFyZSByZXNlcnZlZCBmb3IgZmxhZ3MuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VudW0gUGF0aFBvaW50VHlwZQoreworICAgIFBhdGhQb2ludFR5cGVTdGFydCAgICAgICAgICAgPSAwLCAgICAvLyBtb3ZlCisgICAgUGF0aFBvaW50VHlwZUxpbmUgICAgICAgICAgICA9IDEsICAgIC8vIGxpbmUKKyAgICBQYXRoUG9pbnRUeXBlQmV6aWVyICAgICAgICAgID0gMywgICAgLy8gZGVmYXVsdCBCZWl6ZXIgKD0gY3ViaWMgQmV6aWVyKQorICAgIFBhdGhQb2ludFR5cGVQYXRoVHlwZU1hc2sgICAgPSAweDA3LCAvLyB0eXBlIG1hc2sgKGxvd2VzdCAzIGJpdHMpLgorICAgIFBhdGhQb2ludFR5cGVEYXNoTW9kZSAgICAgICAgPSAweDEwLCAvLyBjdXJyZW50bHkgaW4gZGFzaCBtb2RlLgorICAgIFBhdGhQb2ludFR5cGVQYXRoTWFya2VyICAgICAgPSAweDIwLCAvLyBhIG1hcmtlciBmb3IgdGhlIHBhdGguCisgICAgUGF0aFBvaW50VHlwZUNsb3NlU3VicGF0aCAgICA9IDB4ODAsIC8vIGNsb3NlZCBmbGFnCisKKyAgICAvLyBQYXRoIHR5cGVzIHVzZWQgZm9yIGFkdmFuY2VkIHBhdGguCisKKyAgICBQYXRoUG9pbnRUeXBlQmV6aWVyMiAgICA9IDIsICAgIC8vIHF1YWRyYXRpYyBCZWl6ZXIKKyAgICBQYXRoUG9pbnRUeXBlQmV6aWVyMyAgICA9IDMsICAgIC8vIGN1YmljIEJlemllcgorICAgIFBhdGhQb2ludFR5cGVCZXppZXI0ICAgID0gNCwgICAgLy8gcXVhcnRpYyAoNHRoIG9yZGVyKSBCZWl6ZXIKKyAgICBQYXRoUG9pbnRUeXBlQmV6aWVyNSAgICA9IDUsICAgIC8vIHF1aW50aWMgKDV0aCBvcmRlcikgQmV6aWVyCisgICAgUGF0aFBvaW50VHlwZUJlemllcjYgICAgPSA2ICAgICAvLyBoZXhhaWMgKDZ0aCBvcmRlcikgQmV6aWVyCit9OworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFdhcnBNb2RlIGNvbnN0YW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlbnVtIFdhcnBNb2RlCit7CisgICAgV2FycE1vZGVQZXJzcGVjdGl2ZSwgICAgLy8gMAorICAgIFdhcnBNb2RlQmlsaW5lYXIgICAgICAgIC8vIDEKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExpbmVHcmFkaWVudCBNb2RlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VudW0gTGluZWFyR3JhZGllbnRNb2RlCit7CisgICAgTGluZWFyR3JhZGllbnRNb2RlSG9yaXpvbnRhbCwgICAgICAgICAvLyAwCisgICAgTGluZWFyR3JhZGllbnRNb2RlVmVydGljYWwsICAgICAgICAgICAvLyAxCisgICAgTGluZWFyR3JhZGllbnRNb2RlRm9yd2FyZERpYWdvbmFsLCAgICAvLyAyCisgICAgTGluZWFyR3JhZGllbnRNb2RlQmFja3dhcmREaWFnb25hbCAgICAvLyAzCit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZWdpb24gQ29taW5lIE1vZGVzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VudW0gQ29tYmluZU1vZGUKK3sKKyAgICBDb21iaW5lTW9kZVJlcGxhY2UsICAgICAvLyAwCisgICAgQ29tYmluZU1vZGVJbnRlcnNlY3QsICAgLy8gMQorICAgIENvbWJpbmVNb2RlVW5pb24sICAgICAgIC8vIDIKKyAgICBDb21iaW5lTW9kZVhvciwgICAgICAgICAvLyAzCisgICAgQ29tYmluZU1vZGVFeGNsdWRlLCAgICAgLy8gNAorICAgIENvbWJpbmVNb2RlQ29tcGxlbWVudCAgIC8vIDUgKGRvZXMgZXhjbHVkZSBmcm9tKQorfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIC8vIEltYWdlIHR5cGVzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VudW0gSW1hZ2VUeXBlCit7CisgICAgSW1hZ2VUeXBlVW5rbm93biwgICAvLyAwCisgICAgSW1hZ2VUeXBlQml0bWFwLCAgICAvLyAxCisgICAgSW1hZ2VUeXBlTWV0YWZpbGUgICAvLyAyCit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbnRlcnBvbGF0aW9uIG1vZGVzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VudW0gSW50ZXJwb2xhdGlvbk1vZGUKK3sKKyAgICBJbnRlcnBvbGF0aW9uTW9kZUludmFsaWQgICAgICAgICAgPSBRdWFsaXR5TW9kZUludmFsaWQsCisgICAgSW50ZXJwb2xhdGlvbk1vZGVEZWZhdWx0ICAgICAgICAgID0gUXVhbGl0eU1vZGVEZWZhdWx0LAorICAgIEludGVycG9sYXRpb25Nb2RlTG93UXVhbGl0eSAgICAgICA9IFF1YWxpdHlNb2RlTG93LAorICAgIEludGVycG9sYXRpb25Nb2RlSGlnaFF1YWxpdHkgICAgICA9IFF1YWxpdHlNb2RlSGlnaCwKKyAgICBJbnRlcnBvbGF0aW9uTW9kZUJpbGluZWFyLAorICAgIEludGVycG9sYXRpb25Nb2RlQmljdWJpYywKKyAgICBJbnRlcnBvbGF0aW9uTW9kZU5lYXJlc3ROZWlnaGJvciwKKyAgICBJbnRlcnBvbGF0aW9uTW9kZUhpZ2hRdWFsaXR5QmlsaW5lYXIsCisgICAgSW50ZXJwb2xhdGlvbk1vZGVIaWdoUXVhbGl0eUJpY3ViaWMKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFBlbiB0eXBlcworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZW51bSBQZW5BbGlnbm1lbnQKK3sKKyAgICBQZW5BbGlnbm1lbnRDZW50ZXIgICAgICAgPSAwLAorICAgIFBlbkFsaWdubWVudEluc2V0ICAgICAgICA9IDEsCisgICAgUGVuQWxpZ25tZW50T3V0c2V0ICAgICAgID0gMiwKKyAgICBQZW5BbGlnbm1lbnRMZWZ0ICAgICAgICAgPSAzLAorICAgIFBlbkFsaWdubWVudFJpZ2h0ICAgICAgICA9IDQKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEJydXNoIHR5cGVzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VudW0gQnJ1c2hUeXBlCit7CisgICBCcnVzaFR5cGVTb2xpZENvbG9yICAgICAgID0gMCwKKyAgIEJydXNoVHlwZUhhdGNoRmlsbCAgICAgICAgPSAxLAorICAgQnJ1c2hUeXBlVGV4dHVyZUZpbGwgICAgICA9IDIsCisgICBCcnVzaFR5cGVQYXRoR3JhZGllbnQgICAgID0gMywKKyAgIEJydXNoVHlwZUxpbmVhckdyYWRpZW50ICAgPSA0Cit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQZW4ncyBGaWxsIHR5cGVzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VudW0gUGVuVHlwZQoreworICAgUGVuVHlwZVNvbGlkQ29sb3IgICAgICAgPSBCcnVzaFR5cGVTb2xpZENvbG9yLAorICAgUGVuVHlwZUhhdGNoRmlsbCAgICAgICAgPSBCcnVzaFR5cGVIYXRjaEZpbGwsCisgICBQZW5UeXBlVGV4dHVyZUZpbGwgICAgICA9IEJydXNoVHlwZVRleHR1cmVGaWxsLAorICAgUGVuVHlwZVBhdGhHcmFkaWVudCAgICAgPSBCcnVzaFR5cGVQYXRoR3JhZGllbnQsCisgICBQZW5UeXBlTGluZWFyR3JhZGllbnQgICA9IEJydXNoVHlwZUxpbmVhckdyYWRpZW50LAorICAgUGVuVHlwZVVua25vd24gICAgICAgICAgPSAtMQorfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTWF0cml4IE9yZGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VudW0gTWF0cml4T3JkZXIKK3sKKyAgICBNYXRyaXhPcmRlclByZXBlbmQgICAgPSAwLAorICAgIE1hdHJpeE9yZGVyQXBwZW5kICAgICA9IDEKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEdlbmVyaWMgZm9udCBmYW1pbGllcworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlbnVtIEdlbmVyaWNGb250RmFtaWx5Cit7CisgICAgR2VuZXJpY0ZvbnRGYW1pbHlTZXJpZiwKKyAgICBHZW5lcmljRm9udEZhbWlseVNhbnNTZXJpZiwKKyAgICBHZW5lcmljRm9udEZhbWlseU1vbm9zcGFjZQorCit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGb250U3R5bGU6IGZhY2UgdHlwZXMgYW5kIGNvbW1vbiBzdHlsZXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gIFRoZXNlIHNob3VsZCBwcm9iYWJseSBiZSBmbGFncworCisvLyAgTXVzdCBoYXZlOgorLy8gICAgICBSZWd1bGFyID0gMAorLy8gICAgICBCb2xkID0gMQorLy8gICAgICBJdGFsaWMgPSAyCisvLyAgICAgIEJvbGRJdGFsaWMgPSAzCisKK2VudW0gRm9udFN0eWxlCit7CisgICAgRm9udFN0eWxlUmVndWxhciAgICA9IDAsCisgICAgRm9udFN0eWxlQm9sZCAgICAgICA9IDEsCisgICAgRm9udFN0eWxlSXRhbGljICAgICA9IDIsCisgICAgRm9udFN0eWxlQm9sZEl0YWxpYyA9IDMsCisgICAgRm9udFN0eWxlVW5kZXJsaW5lICA9IDQsCisgICAgRm9udFN0eWxlU3RyaWtlb3V0ICA9IDgKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTbW9vdGhpbmcgTW9kZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZW51bSBTbW9vdGhpbmdNb2RlCit7CisgICAgU21vb3RoaW5nTW9kZUludmFsaWQgICAgID0gUXVhbGl0eU1vZGVJbnZhbGlkLAorICAgIFNtb290aGluZ01vZGVEZWZhdWx0ICAgICA9IFF1YWxpdHlNb2RlRGVmYXVsdCwKKyAgICBTbW9vdGhpbmdNb2RlSGlnaFNwZWVkICAgPSBRdWFsaXR5TW9kZUxvdywKKyAgICBTbW9vdGhpbmdNb2RlSGlnaFF1YWxpdHkgPSBRdWFsaXR5TW9kZUhpZ2gsCisgICAgU21vb3RoaW5nTW9kZU5vbmUsCisgICAgU21vb3RoaW5nTW9kZUFudGlBbGlhcworfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFBpeGVsIEZvcm1hdCBNb2RlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlbnVtIFBpeGVsT2Zmc2V0TW9kZQoreworICAgIFBpeGVsT2Zmc2V0TW9kZUludmFsaWQgICAgID0gUXVhbGl0eU1vZGVJbnZhbGlkLAorICAgIFBpeGVsT2Zmc2V0TW9kZURlZmF1bHQgICAgID0gUXVhbGl0eU1vZGVEZWZhdWx0LAorICAgIFBpeGVsT2Zmc2V0TW9kZUhpZ2hTcGVlZCAgID0gUXVhbGl0eU1vZGVMb3csCisgICAgUGl4ZWxPZmZzZXRNb2RlSGlnaFF1YWxpdHkgPSBRdWFsaXR5TW9kZUhpZ2gsCisgICAgUGl4ZWxPZmZzZXRNb2RlTm9uZSwgICAgLy8gbm8gcGl4ZWwgb2Zmc2V0CisgICAgUGl4ZWxPZmZzZXRNb2RlSGFsZiAgICAgLy8gb2Zmc2V0IGJ5IC0wLjUsIC0wLjUgZm9yIGZhc3QgYW50aS1hbGlhcyBwZXJmCit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGV4dCBSZW5kZXJpbmcgSGludAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZW51bSBUZXh0UmVuZGVyaW5nSGludAoreworI2lmZGVmIERDUl9VU0VfTkVXXzE4Njc2NAorICAgIFRleHRSZW5kZXJpbmdIaW50U3lzdGVtRGVmYXVsdCA9IDAsICAgICAgICAgICAgLy8gR2x5cGggd2l0aCBzeXN0ZW0gZGVmYXVsdCByZW5kZXJpbmcgaGludAorICAgIFRleHRSZW5kZXJpbmdIaW50U2luZ2xlQml0UGVyUGl4ZWxHcmlkRml0LCAgICAgLy8gR2x5cGggYml0bWFwIHdpdGggaGludGluZworI2Vsc2UKKyAgICBUZXh0UmVuZGVyaW5nSGludFNpbmdsZUJpdFBlclBpeGVsR3JpZEZpdCA9IDAsIC8vIEdseXBoIGJpdG1hcCB3aXRoIGhpbnRpbmcKKyNlbmRpZiAvLyBEQ1JfVVNFX05FV18xODY3NjQKKyAgICBUZXh0UmVuZGVyaW5nSGludFNpbmdsZUJpdFBlclBpeGVsLCAgICAgICAgICAgIC8vIEdseXBoIGJpdG1hcCB3aXRob3V0IGhpbnRpbmcKKyAgICBUZXh0UmVuZGVyaW5nSGludEFudGlBbGlhc0dyaWRGaXQsICAgICAgICAgICAgIC8vIEdseXBoIGFudGktYWxpYXMgYml0bWFwIHdpdGggaGludGluZworICAgIFRleHRSZW5kZXJpbmdIaW50QW50aUFsaWFzLCAgICAgICAgICAgICAgICAgICAgLy8gR2x5cGggYW50aS1hbGlhcyBiaXRtYXAgd2l0aG91dCBoaW50aW5nCisgICAgVGV4dFJlbmRlcmluZ0hpbnRDbGVhclR5cGVHcmlkRml0ICAgICAgICAgICAgICAvLyBHbHlwaCBDVCBiaXRtYXAgd2l0aCBoaW50aW5nCit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTWV0YWZpbGUgVHlwZXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlbnVtIE1ldGFmaWxlVHlwZQoreworICAgIE1ldGFmaWxlVHlwZUludmFsaWQsICAgICAgICAgICAgLy8gSW52YWxpZCBtZXRhZmlsZQorICAgIE1ldGFmaWxlVHlwZVdtZiwgICAgICAgICAgICAgICAgLy8gU3RhbmRhcmQgV01GCisgICAgTWV0YWZpbGVUeXBlV21mQWxkdXMsICAgICAgICAgICAvLyBBbGR1cyBQbGFjZWFibGUgTWV0YWZpbGUgZm9ybWF0CisgICAgTWV0YWZpbGVUeXBlRW1mLCAgICAgICAgICAgICAgICAvLyBFTUYgKG5vdCBFTUYrKQorICAgIE1ldGFmaWxlVHlwZUVtZlBsdXNPbmx5LCAgICAgICAgLy8gRU1GKyB3aXRob3V0IGR1YWwsIGRvd24tbGV2ZWwgcmVjb3JkcworICAgIE1ldGFmaWxlVHlwZUVtZlBsdXNEdWFsICAgICAgICAgLy8gRU1GKyB3aXRoIGR1YWwsIGRvd24tbGV2ZWwgcmVjb3JkcworfTsKKworLy8gU3BlY2lmaWVzIHRoZSB0eXBlIG9mIEVNRiB0byByZWNvcmQKK2VudW0gRW1mVHlwZQoreworICAgIEVtZlR5cGVFbWZPbmx5ICAgICA9IE1ldGFmaWxlVHlwZUVtZiwgICAgICAgICAgLy8gbm8gRU1GKywgb25seSBFTUYKKyAgICBFbWZUeXBlRW1mUGx1c09ubHkgPSBNZXRhZmlsZVR5cGVFbWZQbHVzT25seSwgIC8vIG5vIEVNRiwgb25seSBFTUYrCisgICAgRW1mVHlwZUVtZlBsdXNEdWFsID0gTWV0YWZpbGVUeXBlRW1mUGx1c0R1YWwgICAvLyBib3RoIEVNRisgYW5kIEVNRgorfTsKKworLy8gQWxsIHBlcnNpc3RlbnQgb2JqZWN0cyBtdXN0IGhhdmUgYSB0eXBlIGxpc3RlZCBoZXJlCitlbnVtIE9iamVjdFR5cGUKK3sKKyAgICBPYmplY3RUeXBlSW52YWxpZCwKKyAgICBPYmplY3RUeXBlQnJ1c2gsCisgICAgT2JqZWN0VHlwZVBlbiwKKyAgICBPYmplY3RUeXBlUGF0aCwKKyAgICBPYmplY3RUeXBlUmVnaW9uLAorICAgIE9iamVjdFR5cGVJbWFnZSwKKyAgICBPYmplY3RUeXBlRm9udCwKKyAgICBPYmplY3RUeXBlU3RyaW5nRm9ybWF0LAorICAgIE9iamVjdFR5cGVJbWFnZUF0dHJpYnV0ZXMsCisgICAgT2JqZWN0VHlwZUN1c3RvbUxpbmVDYXAsCisKKyAgICBPYmplY3RUeXBlTWF4ID0gT2JqZWN0VHlwZUN1c3RvbUxpbmVDYXAsCisgICAgT2JqZWN0VHlwZU1pbiA9IE9iamVjdFR5cGVCcnVzaAorfTsKKworaW5saW5lIEJPT0wKK09iamVjdFR5cGVJc1ZhbGlkKAorICAgIE9iamVjdFR5cGUgICAgICB0eXBlCisgICAgKQoreworICAgIHJldHVybiAoKHR5cGUgPj0gT2JqZWN0VHlwZU1pbikgJiYgKHR5cGUgPD0gT2JqZWN0VHlwZU1heCkpOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRU1GKyBSZWNvcmRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBXZSBoYXZlIHRvIGNoYW5nZSB0aGUgV01GIHJlY29yZCBudW1iZXJzIHNvIHRoYXQgdGhleSBkb24ndCBjb25mbGljdCB3aXRoCisvLyB0aGUgRU1GIGFuZCBFTUYrIHJlY29yZCBudW1iZXJzLgorZW51bSBFbWZQbHVzUmVjb3JkVHlwZTsKKyNkZWZpbmUgR0RJUF9FTUZQTFVTX1JFQ09SRF9CQVNFICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIEdESVBfV01GX1JFQ09SRF9CQVNFICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhuKSAgICgoRW1mUGx1c1JlY29yZFR5cGUpKChuKSB8IEdESVBfV01GX1JFQ09SRF9CQVNFKSkKKyNkZWZpbmUgR0RJUF9FTUZQTFVTX1JFQ09SRF9UT19XTUYobikgICAoKG4pICYgKH5HRElQX1dNRl9SRUNPUkRfQkFTRSkpCisjZGVmaW5lIEdESVBfSVNfV01GX1JFQ09SRFRZUEUobikgICAgICAgKCgobikgJiBHRElQX1dNRl9SRUNPUkRfQkFTRSkgIT0gMCkKKworZW51bSBFbWZQbHVzUmVjb3JkVHlwZQoreworICAgLy8gU2luY2Ugd2UgaGF2ZSB0byBlbnVtZXJhdGUgR0RJIHJlY29yZHMgcmlnaHQgYWxvbmcgd2l0aCBHREkrIHJlY29yZHMsCisgICAvLyB3ZSBsaXN0IGFsbCB0aGUgR0RJIHJlY29yZHMgaGVyZSBzbyB0aGF0IHRoZXkgY2FuIGJlIHBhcnQgb2YgdGhlCisgICAvLyBzYW1lIGVudW1lcmF0aW9uIHR5cGUgd2hpY2ggaXMgdXNlZCBpbiB0aGUgZW51bWVyYXRpb24gY2FsbGJhY2suCisKKyAgICBXbWZSZWNvcmRUeXBlU2V0QmtDb2xvciAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1NFVEJLQ09MT1IpLAorICAgIFdtZlJlY29yZFR5cGVTZXRCa01vZGUgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfU0VUQktNT0RFKSwKKyAgICBXbWZSZWNvcmRUeXBlU2V0TWFwTW9kZSAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1NFVE1BUE1PREUpLAorICAgIFdtZlJlY29yZFR5cGVTZXRST1AyICAgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfU0VUUk9QMiksCisgICAgV21mUmVjb3JkVHlwZVNldFJlbEFicyAgICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9TRVRSRUxBQlMpLAorICAgIFdtZlJlY29yZFR5cGVTZXRQb2x5RmlsbE1vZGUgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfU0VUUE9MWUZJTExNT0RFKSwKKyAgICBXbWZSZWNvcmRUeXBlU2V0U3RyZXRjaEJsdE1vZGUgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1NFVFNUUkVUQ0hCTFRNT0RFKSwKKyAgICBXbWZSZWNvcmRUeXBlU2V0VGV4dENoYXJFeHRyYSAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1NFVFRFWFRDSEFSRVhUUkEpLAorICAgIFdtZlJlY29yZFR5cGVTZXRUZXh0Q29sb3IgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfU0VUVEVYVENPTE9SKSwKKyAgICBXbWZSZWNvcmRUeXBlU2V0VGV4dEp1c3RpZmljYXRpb24gICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1NFVFRFWFRKVVNUSUZJQ0FUSU9OKSwKKyAgICBXbWZSZWNvcmRUeXBlU2V0V2luZG93T3JnICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1NFVFdJTkRPV09SRyksCisgICAgV21mUmVjb3JkVHlwZVNldFdpbmRvd0V4dCAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9TRVRXSU5ET1dFWFQpLAorICAgIFdtZlJlY29yZFR5cGVTZXRWaWV3cG9ydE9yZyAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfU0VUVklFV1BPUlRPUkcpLAorICAgIFdtZlJlY29yZFR5cGVTZXRWaWV3cG9ydEV4dCAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfU0VUVklFV1BPUlRFWFQpLAorICAgIFdtZlJlY29yZFR5cGVPZmZzZXRXaW5kb3dPcmcgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfT0ZGU0VUV0lORE9XT1JHKSwKKyAgICBXbWZSZWNvcmRUeXBlU2NhbGVXaW5kb3dFeHQgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1NDQUxFV0lORE9XRVhUKSwKKyAgICBXbWZSZWNvcmRUeXBlT2Zmc2V0Vmlld3BvcnRPcmcgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX09GRlNFVFZJRVdQT1JUT1JHKSwKKyAgICBXbWZSZWNvcmRUeXBlU2NhbGVWaWV3cG9ydEV4dCAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1NDQUxFVklFV1BPUlRFWFQpLAorICAgIFdtZlJlY29yZFR5cGVMaW5lVG8gICAgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfTElORVRPKSwKKyAgICBXbWZSZWNvcmRUeXBlTW92ZVRvICAgICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX01PVkVUTyksCisgICAgV21mUmVjb3JkVHlwZUV4Y2x1ZGVDbGlwUmVjdCAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9FWENMVURFQ0xJUFJFQ1QpLAorICAgIFdtZlJlY29yZFR5cGVJbnRlcnNlY3RDbGlwUmVjdCAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfSU5URVJTRUNUQ0xJUFJFQ1QpLAorICAgIFdtZlJlY29yZFR5cGVBcmMgICAgICAgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfQVJDKSwKKyAgICBXbWZSZWNvcmRUeXBlRWxsaXBzZSAgICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX0VMTElQU0UpLAorICAgIFdtZlJlY29yZFR5cGVGbG9vZEZpbGwgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfRkxPT0RGSUxMKSwKKyAgICBXbWZSZWNvcmRUeXBlUGllICAgICAgICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1BJRSksCisgICAgV21mUmVjb3JkVHlwZVJlY3RhbmdsZSAgICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9SRUNUQU5HTEUpLAorICAgIFdtZlJlY29yZFR5cGVSb3VuZFJlY3QgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfUk9VTkRSRUNUKSwKKyAgICBXbWZSZWNvcmRUeXBlUGF0Qmx0ICAgICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1BBVEJMVCksCisgICAgV21mUmVjb3JkVHlwZVNhdmVEQyAgICAgICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9TQVZFREMpLAorICAgIFdtZlJlY29yZFR5cGVTZXRQaXhlbCAgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfU0VUUElYRUwpLAorICAgIFdtZlJlY29yZFR5cGVPZmZzZXRDbGlwUmduICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfT0ZGU0VUQ0xJUFJHTiksCisgICAgV21mUmVjb3JkVHlwZVRleHRPdXQgICAgICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9URVhUT1VUKSwKKyAgICBXbWZSZWNvcmRUeXBlQml0Qmx0ICAgICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX0JJVEJMVCksCisgICAgV21mUmVjb3JkVHlwZVN0cmV0Y2hCbHQgICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9TVFJFVENIQkxUKSwKKyAgICBXbWZSZWNvcmRUeXBlUG9seWdvbiAgICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1BPTFlHT04pLAorICAgIFdtZlJlY29yZFR5cGVQb2x5bGluZSAgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfUE9MWUxJTkUpLAorICAgIFdtZlJlY29yZFR5cGVFc2NhcGUgICAgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfRVNDQVBFKSwKKyAgICBXbWZSZWNvcmRUeXBlUmVzdG9yZURDICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1JFU1RPUkVEQyksCisgICAgV21mUmVjb3JkVHlwZUZpbGxSZWdpb24gICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9GSUxMUkVHSU9OKSwKKyAgICBXbWZSZWNvcmRUeXBlRnJhbWVSZWdpb24gICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX0ZSQU1FUkVHSU9OKSwKKyAgICBXbWZSZWNvcmRUeXBlSW52ZXJ0UmVnaW9uICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX0lOVkVSVFJFR0lPTiksCisgICAgV21mUmVjb3JkVHlwZVBhaW50UmVnaW9uICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9QQUlOVFJFR0lPTiksCisgICAgV21mUmVjb3JkVHlwZVNlbGVjdENsaXBSZWdpb24gICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9TRUxFQ1RDTElQUkVHSU9OKSwKKyAgICBXbWZSZWNvcmRUeXBlU2VsZWN0T2JqZWN0ICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1NFTEVDVE9CSkVDVCksCisgICAgV21mUmVjb3JkVHlwZVNldFRleHRBbGlnbiAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9TRVRURVhUQUxJR04pLAorICAgIFdtZlJlY29yZFR5cGVEcmF3VGV4dCAgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKDB4MDYyRiksICAvLyBNRVRBX0RSQVdURVhUCisgICAgV21mUmVjb3JkVHlwZUNob3JkICAgICAgICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9DSE9SRCksCisgICAgV21mUmVjb3JkVHlwZVNldE1hcHBlckZsYWdzICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9TRVRNQVBQRVJGTEFHUyksCisgICAgV21mUmVjb3JkVHlwZUV4dFRleHRPdXQgICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9FWFRURVhUT1VUKSwKKyAgICBXbWZSZWNvcmRUeXBlU2V0RElCVG9EZXYgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1NFVERJQlRPREVWKSwKKyAgICBXbWZSZWNvcmRUeXBlU2VsZWN0UGFsZXR0ZSAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX1NFTEVDVFBBTEVUVEUpLAorICAgIFdtZlJlY29yZFR5cGVSZWFsaXplUGFsZXR0ZSAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfUkVBTElaRVBBTEVUVEUpLAorICAgIFdtZlJlY29yZFR5cGVBbmltYXRlUGFsZXR0ZSAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfQU5JTUFURVBBTEVUVEUpLAorICAgIFdtZlJlY29yZFR5cGVTZXRQYWxFbnRyaWVzICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfU0VUUEFMRU5UUklFUyksCisgICAgV21mUmVjb3JkVHlwZVBvbHlQb2x5Z29uICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9QT0xZUE9MWUdPTiksCisgICAgV21mUmVjb3JkVHlwZVJlc2l6ZVBhbGV0dGUgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9SRVNJWkVQQUxFVFRFKSwKKyAgICBXbWZSZWNvcmRUeXBlRElCQml0Qmx0ICAgICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX0RJQkJJVEJMVCksCisgICAgV21mUmVjb3JkVHlwZURJQlN0cmV0Y2hCbHQgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9ESUJTVFJFVENIQkxUKSwKKyAgICBXbWZSZWNvcmRUeXBlRElCQ3JlYXRlUGF0dGVybkJydXNoICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX0RJQkNSRUFURVBBVFRFUk5CUlVTSCksCisgICAgV21mUmVjb3JkVHlwZVN0cmV0Y2hESUIgICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9TVFJFVENIRElCKSwKKyAgICBXbWZSZWNvcmRUeXBlRXh0Rmxvb2RGaWxsICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX0VYVEZMT09ERklMTCksCisgICAgV21mUmVjb3JkVHlwZVNldExheW91dCAgICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoMHgwMTQ5KSwgIC8vIE1FVEFfU0VUTEFZT1VUCisgICAgV21mUmVjb3JkVHlwZVJlc2V0REMgICAgICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoMHgwMTRDKSwgIC8vIE1FVEFfUkVTRVREQworICAgIFdtZlJlY29yZFR5cGVTdGFydERvYyAgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKDB4MDE0RCksICAvLyBNRVRBX1NUQVJURE9DCisgICAgV21mUmVjb3JkVHlwZVN0YXJ0UGFnZSAgICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoMHgwMDRGKSwgIC8vIE1FVEFfU1RBUlRQQUdFCisgICAgV21mUmVjb3JkVHlwZUVuZFBhZ2UgICAgICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoMHgwMDUwKSwgIC8vIE1FVEFfRU5EUEFHRQorICAgIFdtZlJlY29yZFR5cGVBYm9ydERvYyAgICAgICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKDB4MDA1MiksICAvLyBNRVRBX0FCT1JURE9DCisgICAgV21mUmVjb3JkVHlwZUVuZERvYyAgICAgICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoMHgwMDVFKSwgIC8vIE1FVEFfRU5ERE9DCisgICAgV21mUmVjb3JkVHlwZURlbGV0ZU9iamVjdCAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9ERUxFVEVPQkpFQ1QpLAorICAgIFdtZlJlY29yZFR5cGVDcmVhdGVQYWxldHRlICAgICAgICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfQ1JFQVRFUEFMRVRURSksCisgICAgV21mUmVjb3JkVHlwZUNyZWF0ZUJydXNoICAgICAgICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoMHgwMEY4KSwgIC8vIE1FVEFfQ1JFQVRFQlJVU0gKKyAgICBXbWZSZWNvcmRUeXBlQ3JlYXRlUGF0dGVybkJydXNoICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX0NSRUFURVBBVFRFUk5CUlVTSCksCisgICAgV21mUmVjb3JkVHlwZUNyZWF0ZVBlbkluZGlyZWN0ICAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9DUkVBVEVQRU5JTkRJUkVDVCksCisgICAgV21mUmVjb3JkVHlwZUNyZWF0ZUZvbnRJbmRpcmVjdCAgICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoTUVUQV9DUkVBVEVGT05USU5ESVJFQ1QpLAorICAgIFdtZlJlY29yZFR5cGVDcmVhdGVCcnVzaEluZGlyZWN0ICAgICA9IEdESVBfV01GX1JFQ09SRF9UT19FTUZQTFVTKE1FVEFfQ1JFQVRFQlJVU0hJTkRJUkVDVCksCisgICAgV21mUmVjb3JkVHlwZUNyZWF0ZUJpdG1hcEluZGlyZWN0ICAgID0gR0RJUF9XTUZfUkVDT1JEX1RPX0VNRlBMVVMoMHgwMkZEKSwgIC8vIE1FVEFfQ1JFQVRFQklUTUFQSU5ESVJFQ1QKKyAgICBXbWZSZWNvcmRUeXBlQ3JlYXRlQml0bWFwICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUygweDA2RkUpLCAgLy8gTUVUQV9DUkVBVEVCSVRNQVAKKyAgICBXbWZSZWNvcmRUeXBlQ3JlYXRlUmVnaW9uICAgICAgICAgICAgPSBHRElQX1dNRl9SRUNPUkRfVE9fRU1GUExVUyhNRVRBX0NSRUFURVJFR0lPTiksCisKKyAgICBFbWZSZWNvcmRUeXBlSGVhZGVyICAgICAgICAgICAgICAgICAgPSBFTVJfSEVBREVSLAorICAgIEVtZlJlY29yZFR5cGVQb2x5QmV6aWVyICAgICAgICAgICAgICA9IEVNUl9QT0xZQkVaSUVSLAorICAgIEVtZlJlY29yZFR5cGVQb2x5Z29uICAgICAgICAgICAgICAgICA9IEVNUl9QT0xZR09OLAorICAgIEVtZlJlY29yZFR5cGVQb2x5bGluZSAgICAgICAgICAgICAgICA9IEVNUl9QT0xZTElORSwKKyAgICBFbWZSZWNvcmRUeXBlUG9seUJlemllclRvICAgICAgICAgICAgPSBFTVJfUE9MWUJFWklFUlRPLAorICAgIEVtZlJlY29yZFR5cGVQb2x5TGluZVRvICAgICAgICAgICAgICA9IEVNUl9QT0xZTElORVRPLAorICAgIEVtZlJlY29yZFR5cGVQb2x5UG9seWxpbmUgICAgICAgICAgICA9IEVNUl9QT0xZUE9MWUxJTkUsCisgICAgRW1mUmVjb3JkVHlwZVBvbHlQb2x5Z29uICAgICAgICAgICAgID0gRU1SX1BPTFlQT0xZR09OLAorICAgIEVtZlJlY29yZFR5cGVTZXRXaW5kb3dFeHRFeCAgICAgICAgICA9IEVNUl9TRVRXSU5ET1dFWFRFWCwKKyAgICBFbWZSZWNvcmRUeXBlU2V0V2luZG93T3JnRXggICAgICAgICAgPSBFTVJfU0VUV0lORE9XT1JHRVgsCisgICAgRW1mUmVjb3JkVHlwZVNldFZpZXdwb3J0RXh0RXggICAgICAgID0gRU1SX1NFVFZJRVdQT1JURVhURVgsCisgICAgRW1mUmVjb3JkVHlwZVNldFZpZXdwb3J0T3JnRXggICAgICAgID0gRU1SX1NFVFZJRVdQT1JUT1JHRVgsCisgICAgRW1mUmVjb3JkVHlwZVNldEJydXNoT3JnRXggICAgICAgICAgID0gRU1SX1NFVEJSVVNIT1JHRVgsCisgICAgRW1mUmVjb3JkVHlwZUVPRiAgICAgICAgICAgICAgICAgICAgID0gRU1SX0VPRiwKKyAgICBFbWZSZWNvcmRUeXBlU2V0UGl4ZWxWICAgICAgICAgICAgICAgPSBFTVJfU0VUUElYRUxWLAorICAgIEVtZlJlY29yZFR5cGVTZXRNYXBwZXJGbGFncyAgICAgICAgICA9IEVNUl9TRVRNQVBQRVJGTEFHUywKKyAgICBFbWZSZWNvcmRUeXBlU2V0TWFwTW9kZSAgICAgICAgICAgICAgPSBFTVJfU0VUTUFQTU9ERSwKKyAgICBFbWZSZWNvcmRUeXBlU2V0QmtNb2RlICAgICAgICAgICAgICAgPSBFTVJfU0VUQktNT0RFLAorICAgIEVtZlJlY29yZFR5cGVTZXRQb2x5RmlsbE1vZGUgICAgICAgICA9IEVNUl9TRVRQT0xZRklMTE1PREUsCisgICAgRW1mUmVjb3JkVHlwZVNldFJPUDIgICAgICAgICAgICAgICAgID0gRU1SX1NFVFJPUDIsCisgICAgRW1mUmVjb3JkVHlwZVNldFN0cmV0Y2hCbHRNb2RlICAgICAgID0gRU1SX1NFVFNUUkVUQ0hCTFRNT0RFLAorICAgIEVtZlJlY29yZFR5cGVTZXRUZXh0QWxpZ24gICAgICAgICAgICA9IEVNUl9TRVRURVhUQUxJR04sCisgICAgRW1mUmVjb3JkVHlwZVNldENvbG9yQWRqdXN0bWVudCAgICAgID0gRU1SX1NFVENPTE9SQURKVVNUTUVOVCwKKyAgICBFbWZSZWNvcmRUeXBlU2V0VGV4dENvbG9yICAgICAgICAgICAgPSBFTVJfU0VUVEVYVENPTE9SLAorICAgIEVtZlJlY29yZFR5cGVTZXRCa0NvbG9yICAgICAgICAgICAgICA9IEVNUl9TRVRCS0NPTE9SLAorICAgIEVtZlJlY29yZFR5cGVPZmZzZXRDbGlwUmduICAgICAgICAgICA9IEVNUl9PRkZTRVRDTElQUkdOLAorICAgIEVtZlJlY29yZFR5cGVNb3ZlVG9FeCAgICAgICAgICAgICAgICA9IEVNUl9NT1ZFVE9FWCwKKyAgICBFbWZSZWNvcmRUeXBlU2V0TWV0YVJnbiAgICAgICAgICAgICAgPSBFTVJfU0VUTUVUQVJHTiwKKyAgICBFbWZSZWNvcmRUeXBlRXhjbHVkZUNsaXBSZWN0ICAgICAgICAgPSBFTVJfRVhDTFVERUNMSVBSRUNULAorICAgIEVtZlJlY29yZFR5cGVJbnRlcnNlY3RDbGlwUmVjdCAgICAgICA9IEVNUl9JTlRFUlNFQ1RDTElQUkVDVCwKKyAgICBFbWZSZWNvcmRUeXBlU2NhbGVWaWV3cG9ydEV4dEV4ICAgICAgPSBFTVJfU0NBTEVWSUVXUE9SVEVYVEVYLAorICAgIEVtZlJlY29yZFR5cGVTY2FsZVdpbmRvd0V4dEV4ICAgICAgICA9IEVNUl9TQ0FMRVdJTkRPV0VYVEVYLAorICAgIEVtZlJlY29yZFR5cGVTYXZlREMgICAgICAgICAgICAgICAgICA9IEVNUl9TQVZFREMsCisgICAgRW1mUmVjb3JkVHlwZVJlc3RvcmVEQyAgICAgICAgICAgICAgID0gRU1SX1JFU1RPUkVEQywKKyAgICBFbWZSZWNvcmRUeXBlU2V0V29ybGRUcmFuc2Zvcm0gICAgICAgPSBFTVJfU0VUV09STERUUkFOU0ZPUk0sCisgICAgRW1mUmVjb3JkVHlwZU1vZGlmeVdvcmxkVHJhbnNmb3JtICAgID0gRU1SX01PRElGWVdPUkxEVFJBTlNGT1JNLAorICAgIEVtZlJlY29yZFR5cGVTZWxlY3RPYmplY3QgICAgICAgICAgICA9IEVNUl9TRUxFQ1RPQkpFQ1QsCisgICAgRW1mUmVjb3JkVHlwZUNyZWF0ZVBlbiAgICAgICAgICAgICAgID0gRU1SX0NSRUFURVBFTiwKKyAgICBFbWZSZWNvcmRUeXBlQ3JlYXRlQnJ1c2hJbmRpcmVjdCAgICAgPSBFTVJfQ1JFQVRFQlJVU0hJTkRJUkVDVCwKKyAgICBFbWZSZWNvcmRUeXBlRGVsZXRlT2JqZWN0ICAgICAgICAgICAgPSBFTVJfREVMRVRFT0JKRUNULAorICAgIEVtZlJlY29yZFR5cGVBbmdsZUFyYyAgICAgICAgICAgICAgICA9IEVNUl9BTkdMRUFSQywKKyAgICBFbWZSZWNvcmRUeXBlRWxsaXBzZSAgICAgICAgICAgICAgICAgPSBFTVJfRUxMSVBTRSwKKyAgICBFbWZSZWNvcmRUeXBlUmVjdGFuZ2xlICAgICAgICAgICAgICAgPSBFTVJfUkVDVEFOR0xFLAorICAgIEVtZlJlY29yZFR5cGVSb3VuZFJlY3QgICAgICAgICAgICAgICA9IEVNUl9ST1VORFJFQ1QsCisgICAgRW1mUmVjb3JkVHlwZUFyYyAgICAgICAgICAgICAgICAgICAgID0gRU1SX0FSQywKKyAgICBFbWZSZWNvcmRUeXBlQ2hvcmQgICAgICAgICAgICAgICAgICAgPSBFTVJfQ0hPUkQsCisgICAgRW1mUmVjb3JkVHlwZVBpZSAgICAgICAgICAgICAgICAgICAgID0gRU1SX1BJRSwKKyAgICBFbWZSZWNvcmRUeXBlU2VsZWN0UGFsZXR0ZSAgICAgICAgICAgPSBFTVJfU0VMRUNUUEFMRVRURSwKKyAgICBFbWZSZWNvcmRUeXBlQ3JlYXRlUGFsZXR0ZSAgICAgICAgICAgPSBFTVJfQ1JFQVRFUEFMRVRURSwKKyAgICBFbWZSZWNvcmRUeXBlU2V0UGFsZXR0ZUVudHJpZXMgICAgICAgPSBFTVJfU0VUUEFMRVRURUVOVFJJRVMsCisgICAgRW1mUmVjb3JkVHlwZVJlc2l6ZVBhbGV0dGUgICAgICAgICAgID0gRU1SX1JFU0laRVBBTEVUVEUsCisgICAgRW1mUmVjb3JkVHlwZVJlYWxpemVQYWxldHRlICAgICAgICAgID0gRU1SX1JFQUxJWkVQQUxFVFRFLAorICAgIEVtZlJlY29yZFR5cGVFeHRGbG9vZEZpbGwgICAgICAgICAgICA9IEVNUl9FWFRGTE9PREZJTEwsCisgICAgRW1mUmVjb3JkVHlwZUxpbmVUbyAgICAgICAgICAgICAgICAgID0gRU1SX0xJTkVUTywKKyAgICBFbWZSZWNvcmRUeXBlQXJjVG8gICAgICAgICAgICAgICAgICAgPSBFTVJfQVJDVE8sCisgICAgRW1mUmVjb3JkVHlwZVBvbHlEcmF3ICAgICAgICAgICAgICAgID0gRU1SX1BPTFlEUkFXLAorICAgIEVtZlJlY29yZFR5cGVTZXRBcmNEaXJlY3Rpb24gICAgICAgICA9IEVNUl9TRVRBUkNESVJFQ1RJT04sCisgICAgRW1mUmVjb3JkVHlwZVNldE1pdGVyTGltaXQgICAgICAgICAgID0gRU1SX1NFVE1JVEVSTElNSVQsCisgICAgRW1mUmVjb3JkVHlwZUJlZ2luUGF0aCAgICAgICAgICAgICAgID0gRU1SX0JFR0lOUEFUSCwKKyAgICBFbWZSZWNvcmRUeXBlRW5kUGF0aCAgICAgICAgICAgICAgICAgPSBFTVJfRU5EUEFUSCwKKyAgICBFbWZSZWNvcmRUeXBlQ2xvc2VGaWd1cmUgICAgICAgICAgICAgPSBFTVJfQ0xPU0VGSUdVUkUsCisgICAgRW1mUmVjb3JkVHlwZUZpbGxQYXRoICAgICAgICAgICAgICAgID0gRU1SX0ZJTExQQVRILAorICAgIEVtZlJlY29yZFR5cGVTdHJva2VBbmRGaWxsUGF0aCAgICAgICA9IEVNUl9TVFJPS0VBTkRGSUxMUEFUSCwKKyAgICBFbWZSZWNvcmRUeXBlU3Ryb2tlUGF0aCAgICAgICAgICAgICAgPSBFTVJfU1RST0tFUEFUSCwKKyAgICBFbWZSZWNvcmRUeXBlRmxhdHRlblBhdGggICAgICAgICAgICAgPSBFTVJfRkxBVFRFTlBBVEgsCisgICAgRW1mUmVjb3JkVHlwZVdpZGVuUGF0aCAgICAgICAgICAgICAgID0gRU1SX1dJREVOUEFUSCwKKyAgICBFbWZSZWNvcmRUeXBlU2VsZWN0Q2xpcFBhdGggICAgICAgICAgPSBFTVJfU0VMRUNUQ0xJUFBBVEgsCisgICAgRW1mUmVjb3JkVHlwZUFib3J0UGF0aCAgICAgICAgICAgICAgID0gRU1SX0FCT1JUUEFUSCwKKyAgICBFbWZSZWNvcmRUeXBlUmVzZXJ2ZWRfMDY5ICAgICAgICAgICAgPSA2OSwgIC8vIE5vdCBVc2VkCisgICAgRW1mUmVjb3JkVHlwZUdkaUNvbW1lbnQgICAgICAgICAgICAgID0gRU1SX0dESUNPTU1FTlQsCisgICAgRW1mUmVjb3JkVHlwZUZpbGxSZ24gICAgICAgICAgICAgICAgID0gRU1SX0ZJTExSR04sCisgICAgRW1mUmVjb3JkVHlwZUZyYW1lUmduICAgICAgICAgICAgICAgID0gRU1SX0ZSQU1FUkdOLAorICAgIEVtZlJlY29yZFR5cGVJbnZlcnRSZ24gICAgICAgICAgICAgICA9IEVNUl9JTlZFUlRSR04sCisgICAgRW1mUmVjb3JkVHlwZVBhaW50UmduICAgICAgICAgICAgICAgID0gRU1SX1BBSU5UUkdOLAorICAgIEVtZlJlY29yZFR5cGVFeHRTZWxlY3RDbGlwUmduICAgICAgICA9IEVNUl9FWFRTRUxFQ1RDTElQUkdOLAorICAgIEVtZlJlY29yZFR5cGVCaXRCbHQgICAgICAgICAgICAgICAgICA9IEVNUl9CSVRCTFQsCisgICAgRW1mUmVjb3JkVHlwZVN0cmV0Y2hCbHQgICAgICAgICAgICAgID0gRU1SX1NUUkVUQ0hCTFQsCisgICAgRW1mUmVjb3JkVHlwZU1hc2tCbHQgICAgICAgICAgICAgICAgID0gRU1SX01BU0tCTFQsCisgICAgRW1mUmVjb3JkVHlwZVBsZ0JsdCAgICAgICAgICAgICAgICAgID0gRU1SX1BMR0JMVCwKKyAgICBFbWZSZWNvcmRUeXBlU2V0RElCaXRzVG9EZXZpY2UgICAgICAgPSBFTVJfU0VURElCSVRTVE9ERVZJQ0UsCisgICAgRW1mUmVjb3JkVHlwZVN0cmV0Y2hESUJpdHMgICAgICAgICAgID0gRU1SX1NUUkVUQ0hESUJJVFMsCisgICAgRW1mUmVjb3JkVHlwZUV4dENyZWF0ZUZvbnRJbmRpcmVjdCAgID0gRU1SX0VYVENSRUFURUZPTlRJTkRJUkVDVFcsCisgICAgRW1mUmVjb3JkVHlwZUV4dFRleHRPdXRBICAgICAgICAgICAgID0gRU1SX0VYVFRFWFRPVVRBLAorICAgIEVtZlJlY29yZFR5cGVFeHRUZXh0T3V0VyAgICAgICAgICAgICA9IEVNUl9FWFRURVhUT1VUVywKKyAgICBFbWZSZWNvcmRUeXBlUG9seUJlemllcjE2ICAgICAgICAgICAgPSBFTVJfUE9MWUJFWklFUjE2LAorICAgIEVtZlJlY29yZFR5cGVQb2x5Z29uMTYgICAgICAgICAgICAgICA9IEVNUl9QT0xZR09OMTYsCisgICAgRW1mUmVjb3JkVHlwZVBvbHlsaW5lMTYgICAgICAgICAgICAgID0gRU1SX1BPTFlMSU5FMTYsCisgICAgRW1mUmVjb3JkVHlwZVBvbHlCZXppZXJUbzE2ICAgICAgICAgID0gRU1SX1BPTFlCRVpJRVJUTzE2LAorICAgIEVtZlJlY29yZFR5cGVQb2x5bGluZVRvMTYgICAgICAgICAgICA9IEVNUl9QT0xZTElORVRPMTYsCisgICAgRW1mUmVjb3JkVHlwZVBvbHlQb2x5bGluZTE2ICAgICAgICAgID0gRU1SX1BPTFlQT0xZTElORTE2LAorICAgIEVtZlJlY29yZFR5cGVQb2x5UG9seWdvbjE2ICAgICAgICAgICA9IEVNUl9QT0xZUE9MWUdPTjE2LAorICAgIEVtZlJlY29yZFR5cGVQb2x5RHJhdzE2ICAgICAgICAgICAgICA9IEVNUl9QT0xZRFJBVzE2LAorICAgIEVtZlJlY29yZFR5cGVDcmVhdGVNb25vQnJ1c2ggICAgICAgICA9IEVNUl9DUkVBVEVNT05PQlJVU0gsCisgICAgRW1mUmVjb3JkVHlwZUNyZWF0ZURJQlBhdHRlcm5CcnVzaFB0ID0gRU1SX0NSRUFURURJQlBBVFRFUk5CUlVTSFBULAorICAgIEVtZlJlY29yZFR5cGVFeHRDcmVhdGVQZW4gICAgICAgICAgICA9IEVNUl9FWFRDUkVBVEVQRU4sCisgICAgRW1mUmVjb3JkVHlwZVBvbHlUZXh0T3V0QSAgICAgICAgICAgID0gRU1SX1BPTFlURVhUT1VUQSwKKyAgICBFbWZSZWNvcmRUeXBlUG9seVRleHRPdXRXICAgICAgICAgICAgPSBFTVJfUE9MWVRFWFRPVVRXLAorICAgIEVtZlJlY29yZFR5cGVTZXRJQ01Nb2RlICAgICAgICAgICAgICA9IDk4LCAgLy8gRU1SX1NFVElDTU1PREUsCisgICAgRW1mUmVjb3JkVHlwZUNyZWF0ZUNvbG9yU3BhY2UgICAgICAgID0gOTksICAvLyBFTVJfQ1JFQVRFQ09MT1JTUEFDRSwKKyAgICBFbWZSZWNvcmRUeXBlU2V0Q29sb3JTcGFjZSAgICAgICAgICAgPSAxMDAsIC8vIEVNUl9TRVRDT0xPUlNQQUNFLAorICAgIEVtZlJlY29yZFR5cGVEZWxldGVDb2xvclNwYWNlICAgICAgICA9IDEwMSwgLy8gRU1SX0RFTEVURUNPTE9SU1BBQ0UsCisgICAgRW1mUmVjb3JkVHlwZUdMU1JlY29yZCAgICAgICAgICAgICAgID0gMTAyLCAvLyBFTVJfR0xTUkVDT1JELAorICAgIEVtZlJlY29yZFR5cGVHTFNCb3VuZGVkUmVjb3JkICAgICAgICA9IDEwMywgLy8gRU1SX0dMU0JPVU5ERURSRUNPUkQsCisgICAgRW1mUmVjb3JkVHlwZVBpeGVsRm9ybWF0ICAgICAgICAgICAgID0gMTA0LCAvLyBFTVJfUElYRUxGT1JNQVQsCisgICAgRW1mUmVjb3JkVHlwZURyYXdFc2NhcGUgICAgICAgICAgICAgID0gMTA1LCAvLyBFTVJfUkVTRVJWRURfMTA1LAorICAgIEVtZlJlY29yZFR5cGVFeHRFc2NhcGUgICAgICAgICAgICAgICA9IDEwNiwgLy8gRU1SX1JFU0VSVkVEXzEwNiwKKyAgICBFbWZSZWNvcmRUeXBlU3RhcnREb2MgICAgICAgICAgICAgICAgPSAxMDcsIC8vIEVNUl9SRVNFUlZFRF8xMDcsCisgICAgRW1mUmVjb3JkVHlwZVNtYWxsVGV4dE91dCAgICAgICAgICAgID0gMTA4LCAvLyBFTVJfUkVTRVJWRURfMTA4LAorICAgIEVtZlJlY29yZFR5cGVGb3JjZVVGSU1hcHBpbmcgICAgICAgICA9IDEwOSwgLy8gRU1SX1JFU0VSVkVEXzEwOSwKKyAgICBFbWZSZWNvcmRUeXBlTmFtZWRFc2NhcGUgICAgICAgICAgICAgPSAxMTAsIC8vIEVNUl9SRVNFUlZFRF8xMTAsCisgICAgRW1mUmVjb3JkVHlwZUNvbG9yQ29ycmVjdFBhbGV0dGUgICAgID0gMTExLCAvLyBFTVJfQ09MT1JDT1JSRUNUUEFMRVRURSwKKyAgICBFbWZSZWNvcmRUeXBlU2V0SUNNUHJvZmlsZUEgICAgICAgICAgPSAxMTIsIC8vIEVNUl9TRVRJQ01QUk9GSUxFQSwKKyAgICBFbWZSZWNvcmRUeXBlU2V0SUNNUHJvZmlsZVcgICAgICAgICAgPSAxMTMsIC8vIEVNUl9TRVRJQ01QUk9GSUxFVywKKyAgICBFbWZSZWNvcmRUeXBlQWxwaGFCbGVuZCAgICAgICAgICAgICAgPSAxMTQsIC8vIEVNUl9BTFBIQUJMRU5ELAorICAgIEVtZlJlY29yZFR5cGVTZXRMYXlvdXQgICAgICAgICAgICAgICA9IDExNSwgLy8gRU1SX1NFVExBWU9VVCwKKyAgICBFbWZSZWNvcmRUeXBlVHJhbnNwYXJlbnRCbHQgICAgICAgICAgPSAxMTYsIC8vIEVNUl9UUkFOU1BBUkVOVEJMVCwKKyAgICBFbWZSZWNvcmRUeXBlUmVzZXJ2ZWRfMTE3ICAgICAgICAgICAgPSAxMTcsIC8vIE5vdCBVc2VkCisgICAgRW1mUmVjb3JkVHlwZUdyYWRpZW50RmlsbCAgICAgICAgICAgID0gMTE4LCAvLyBFTVJfR1JBRElFTlRGSUxMLAorICAgIEVtZlJlY29yZFR5cGVTZXRMaW5rZWRVRklzICAgICAgICAgICA9IDExOSwgLy8gRU1SX1JFU0VSVkVEXzExOSwKKyAgICBFbWZSZWNvcmRUeXBlU2V0VGV4dEp1c3RpZmljYXRpb24gICAgPSAxMjAsIC8vIEVNUl9SRVNFUlZFRF8xMjAsCisgICAgRW1mUmVjb3JkVHlwZUNvbG9yTWF0Y2hUb1RhcmdldFcgICAgID0gMTIxLCAvLyBFTVJfQ09MT1JNQVRDSFRPVEFSR0VUVywKKyAgICBFbWZSZWNvcmRUeXBlQ3JlYXRlQ29sb3JTcGFjZVcgICAgICAgPSAxMjIsIC8vIEVNUl9DUkVBVEVDT0xPUlNQQUNFVywKKyAgICBFbWZSZWNvcmRUeXBlTWF4ICAgICAgICAgICAgICAgICAgICAgPSAxMjIsCisgICAgRW1mUmVjb3JkVHlwZU1pbiAgICAgICAgICAgICAgICAgICAgID0gMSwKKworICAgIC8vIFRoYXQgaXMgdGhlIEVORCBvZiB0aGUgR0RJIEVNRiByZWNvcmRzLgorCisgICAgLy8gTm93IHdlIHN0YXJ0IHRoZSBsaXN0IG9mIEVNRisgcmVjb3Jkcy4gIFdlIGxlYXZlIHF1aXRlCisgICAgLy8gYSBiaXQgb2Ygcm9vbSBoZXJlIGZvciB0aGUgYWRkaXRpb24gb2YgYW55IG5ldyBHREkKKyAgICAvLyByZWNvcmRzIHRoYXQgbWF5IGJlIGFkZGVkIGxhdGVyLgorCisgICAgRW1mUGx1c1JlY29yZFR5cGVJbnZhbGlkID0gR0RJUF9FTUZQTFVTX1JFQ09SRF9CQVNFLAorICAgIEVtZlBsdXNSZWNvcmRUeXBlSGVhZGVyLAorICAgIEVtZlBsdXNSZWNvcmRUeXBlRW5kT2ZGaWxlLAorCisgICAgRW1mUGx1c1JlY29yZFR5cGVDb21tZW50LAorCisgICAgRW1mUGx1c1JlY29yZFR5cGVHZXREQywgICAgLy8gdGhlIGFwcGxpY2F0aW9uIGdyYWJiZWQgdGhlIG1ldGFmaWxlIGRjCisKKyAgICBFbWZQbHVzUmVjb3JkVHlwZU11bHRpRm9ybWF0U3RhcnQsCisgICAgRW1mUGx1c1JlY29yZFR5cGVNdWx0aUZvcm1hdFNlY3Rpb24sCisgICAgRW1mUGx1c1JlY29yZFR5cGVNdWx0aUZvcm1hdEVuZCwKKworICAgIC8vIEZvciBhbGwgcGVyc2lzdGVudCBvYmplY3RzCisgICAgRW1mUGx1c1JlY29yZFR5cGVPYmplY3QsIC8vIGJydXNoLHBlbixwYXRoLHJlZ2lvbixpbWFnZSxmb250LHN0cmluZy1mb3JtYXQKKworICAgIC8vIERyYXdpbmcgUmVjb3JkcworICAgIEVtZlBsdXNSZWNvcmRUeXBlQ2xlYXIsCisgICAgRW1mUGx1c1JlY29yZFR5cGVGaWxsUmVjdHMsCisgICAgRW1mUGx1c1JlY29yZFR5cGVEcmF3UmVjdHMsCisgICAgRW1mUGx1c1JlY29yZFR5cGVGaWxsUG9seWdvbiwKKyAgICBFbWZQbHVzUmVjb3JkVHlwZURyYXdMaW5lcywKKyAgICBFbWZQbHVzUmVjb3JkVHlwZUZpbGxFbGxpcHNlLAorICAgIEVtZlBsdXNSZWNvcmRUeXBlRHJhd0VsbGlwc2UsCisgICAgRW1mUGx1c1JlY29yZFR5cGVGaWxsUGllLAorICAgIEVtZlBsdXNSZWNvcmRUeXBlRHJhd1BpZSwKKyAgICBFbWZQbHVzUmVjb3JkVHlwZURyYXdBcmMsCisgICAgRW1mUGx1c1JlY29yZFR5cGVGaWxsUmVnaW9uLAorICAgIEVtZlBsdXNSZWNvcmRUeXBlRmlsbFBhdGgsCisgICAgRW1mUGx1c1JlY29yZFR5cGVEcmF3UGF0aCwKKyAgICBFbWZQbHVzUmVjb3JkVHlwZUZpbGxDbG9zZWRDdXJ2ZSwKKyAgICBFbWZQbHVzUmVjb3JkVHlwZURyYXdDbG9zZWRDdXJ2ZSwKKyAgICBFbWZQbHVzUmVjb3JkVHlwZURyYXdDdXJ2ZSwKKyAgICBFbWZQbHVzUmVjb3JkVHlwZURyYXdCZXppZXJzLAorICAgIEVtZlBsdXNSZWNvcmRUeXBlRHJhd0ltYWdlLAorICAgIEVtZlBsdXNSZWNvcmRUeXBlRHJhd0ltYWdlUG9pbnRzLAorICAgIEVtZlBsdXNSZWNvcmRUeXBlRHJhd1N0cmluZywKKworICAgIC8vIEdyYXBoaWNzIFN0YXRlIFJlY29yZHMKKyAgICBFbWZQbHVzUmVjb3JkVHlwZVNldFJlbmRlcmluZ09yaWdpbiwKKyAgICBFbWZQbHVzUmVjb3JkVHlwZVNldEFudGlBbGlhc01vZGUsCisgICAgRW1mUGx1c1JlY29yZFR5cGVTZXRUZXh0UmVuZGVyaW5nSGludCwKKyNpZmRlZiBEQ1JfVVNFX05FV18xODg5MjIKKyAgIEVtZlBsdXNSZWNvcmRUeXBlU2V0VGV4dENvbnRyYXN0LAorI2Vsc2UKKyAgIEVtZlBsdXNSZWNvcmRUeXBlU2V0R2FtbWFWYWx1ZSwKKyNlbmRpZiAvLyBEQ1JfVVNFX05FV18xODg5MjIKKyAgICBFbWZQbHVzUmVjb3JkVHlwZVNldEludGVycG9sYXRpb25Nb2RlLAorICAgIEVtZlBsdXNSZWNvcmRUeXBlU2V0UGl4ZWxPZmZzZXRNb2RlLAorICAgIEVtZlBsdXNSZWNvcmRUeXBlU2V0Q29tcG9zaXRpbmdNb2RlLAorICAgIEVtZlBsdXNSZWNvcmRUeXBlU2V0Q29tcG9zaXRpbmdRdWFsaXR5LAorICAgIEVtZlBsdXNSZWNvcmRUeXBlU2F2ZSwKKyAgICBFbWZQbHVzUmVjb3JkVHlwZVJlc3RvcmUsCisgICAgRW1mUGx1c1JlY29yZFR5cGVCZWdpbkNvbnRhaW5lciwKKyAgICBFbWZQbHVzUmVjb3JkVHlwZUJlZ2luQ29udGFpbmVyTm9QYXJhbXMsCisgICAgRW1mUGx1c1JlY29yZFR5cGVFbmRDb250YWluZXIsCisgICAgRW1mUGx1c1JlY29yZFR5cGVTZXRXb3JsZFRyYW5zZm9ybSwKKyAgICBFbWZQbHVzUmVjb3JkVHlwZVJlc2V0V29ybGRUcmFuc2Zvcm0sCisgICAgRW1mUGx1c1JlY29yZFR5cGVNdWx0aXBseVdvcmxkVHJhbnNmb3JtLAorICAgIEVtZlBsdXNSZWNvcmRUeXBlVHJhbnNsYXRlV29ybGRUcmFuc2Zvcm0sCisgICAgRW1mUGx1c1JlY29yZFR5cGVTY2FsZVdvcmxkVHJhbnNmb3JtLAorICAgIEVtZlBsdXNSZWNvcmRUeXBlUm90YXRlV29ybGRUcmFuc2Zvcm0sCisgICAgRW1mUGx1c1JlY29yZFR5cGVTZXRQYWdlVHJhbnNmb3JtLAorICAgIEVtZlBsdXNSZWNvcmRUeXBlUmVzZXRDbGlwLAorICAgIEVtZlBsdXNSZWNvcmRUeXBlU2V0Q2xpcFJlY3QsCisgICAgRW1mUGx1c1JlY29yZFR5cGVTZXRDbGlwUGF0aCwKKyAgICBFbWZQbHVzUmVjb3JkVHlwZVNldENsaXBSZWdpb24sCisgICAgRW1mUGx1c1JlY29yZFR5cGVPZmZzZXRDbGlwLAorCisgICAgLy8gTmV3IHJlY29yZCB0eXBlcyBtdXN0IGJlIGFkZGVkIGhlcmUgKGF0IHRoZSBlbmQpIC0tIGRvIG5vdCBhZGQgYWJvdmUsCisgICAgLy8gc2luY2UgdGhhdCB3aWxsIGludmFsaWRhdGUgcHJldmlvdXMgbWV0YWZpbGVzIQorICAgIEVtZlBsdXNSZWNvcmRUeXBlRHJhd0RyaXZlclN0cmluZywKKworICAgIC8vIEhhdmUgdGhpcyBoZXJlIHNvIHlvdSBkb24ndCBuZWVkIHRvIGtlZXAgY2hhbmdpbmcgdGhlIHZhbHVlIG9mCisgICAgLy8gRW1mUGx1c1JlY29yZFR5cGVNYXggZXZlcnkgdGltZSB5b3UgYWRkIGEgbmV3IHJlY29yZC4KKworICAgIEVtZlBsdXNSZWNvcmRUb3RhbCwKKworICAgIEVtZlBsdXNSZWNvcmRUeXBlTWF4ID0gRW1mUGx1c1JlY29yZFRvdGFsLTEsCisgICAgRW1mUGx1c1JlY29yZFR5cGVNaW4gPSBFbWZQbHVzUmVjb3JkVHlwZUhlYWRlciwKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTdHJpbmdGb3JtYXRGbGFncworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFN0cmluZyBmb3JtYXQgZmxhZ3MKKy8vCisvLyAgRGlyZWN0aW9uUmlnaHRUb0xlZnQgICAgICAgICAgLSBGb3IgaG9yaXpvbnRhbCB0ZXh0LCB0aGUgcmVhZGluZyBvcmRlciBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgdG8gbGVmdC4gVGhpcyB2YWx1ZSBpcyBjYWxsZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBiYXNlIGVtYmVkZGluZyBsZXZlbCBieSB0aGUgVW5pY29kZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbCBlbmdpbmUuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgdmVydGljYWwgdGV4dCwgY29sdW1ucyBhcmUgcmVhZCBmcm9tCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCB0byBsZWZ0LgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCwgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCB0ZXh0IGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkIGZyb20gbGVmdCB0byByaWdodC4KKy8vCisvLyAgRGlyZWN0aW9uVmVydGljYWwgICAgICAgICAgICAgLSBJbmRpdmlkdWFsIGxpbmVzIG9mIHRleHQgYXJlIHZlcnRpY2FsLiBJbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCBsaW5lLCBjaGFyYWN0ZXJzIHByb2dyZXNzIGZyb20gdG9wIHRvCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b20uCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeSBkZWZhdWx0LCBsaW5lcyBvZiB0ZXh0IGFyZSBob3Jpem9udGFsLAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFjaCBuZXcgbGluZSBiZWxvdyB0aGUgcHJldmlvdXMgbGluZS4KKy8vCisvLyAgTm9GaXRCbGFja0JveCAgICAgICAgICAgICAgICAgLSBBbGxvd3MgcGFydHMgb2YgZ2x5cGhzIHRvIG92ZXJoYW5nIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRpbmcgcmVjdGFuZ2xlLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdCBnbHlwaHMgYXJlIGZpcnN0IGFsaWduZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2lkZSB0aGUgbWFyZ2luZXMsIHRoZW4gYW55IGdseXBocyB3aGljaAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RpbGwgb3ZlcmhhbmcgdGhlIGJvdW5kaW5nIGJveCBhcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRpb25lZCB0byBhdm9pZCBhbnkgb3ZlcmhhbmcuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSB3aGVuIGFuIGl0YWxpYworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93ZXIgY2FzZSBsZXR0ZXIgZiBpbiBhIGZvbnQgc3VjaCBhcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2FyYW1vbmQgaXMgYWxpZ25lZCBhdCB0aGUgZmFyIGxlZnQgb2YgYQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdGFuZ2xlLCB0aGUgbG93ZXIgcGFydCBvZiB0aGUgZiB3aWxsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFjaCBzbGlnaHRseSBmdXJ0aGVyIGxlZnQgdGhhbiB0aGUgbGVmdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZSBvZiB0aGUgcmVjdGFuZ2xlLiBTZXR0aW5nIHRoaXMgZmxhZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lsbCBlbnN1cmUgdGhlIGNoYXJhY3RlciBhbGlnbnMgdmlzdWFsbHkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGxpbmVzIGFib3ZlIGFuZCBiZWxvdywgYnV0IG1heQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F1c2Ugc29tZSBwaXhlbHMgb3V0c2lkZSB0aGUgZm9ybWF0dGluZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdGFuZ2xlIHRvIGJlIGNsaXBwZWQgb3IgcGFpbnRlZC4KKy8vCisjaWZuZGVmIERDUl9VU0VfTkVXXzEzNzI1MgorLy8gIE51bWJlckNvbnRleHRBcmFiaWMgICAgICAgICAgIC0gQ2F1c2VzIGFueSBpbml0aWFsIG51bWVyaWMgaW4gdGhlIHN0cmluZyB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgYW5hbHlzZWQgZm9yIGJpZGlyZWN0aW9uIGxheW91dCBhcyBpZgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQgd2FzIHByZWNlZWRlZCBieSBBcmFiaWMgdGV4dC4KKy8vCisvLyAgRGlzYWJsZUthc2hpZGFKdXN0aWZpY2F0aW9uICAgLSBBcmFiaWMgdGV4dCB3aWxsIG5vdCBiZSBqdXN0aWZpZWQgYnkgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb24gb2Yga2FzaGlkYXMgKGkuZS4gZXh0ZW5kaW5nIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbmluZyBsaW5lIGJldHdlZW4gY2hhcmFjdGVycykuIEluc3RlYWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyYWJpYyBzY3JpcHQgd2lsbCBiZSBqdXN0aWZpZWQgYnkgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWRlbmluZyBvZiB0aGUgd2hpdGVzcGFjZSBiZXR3ZWVuIHdvcmRzLgorLy8KKyNlbmRpZgorLy8gIERpc3BsYXlGb3JtYXRDb250cm9sICAgICAgICAgIC0gQ2F1c2VzIGNvbnRyb2wgY2hhcmFjdGVycyBzdWNoIGFzIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC10by1yaWdodCBtYXJrIHRvIGJlIHNob3duIGluIHRoZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHdpdGggYSByZXByZXNlbnRhdGl2ZSBnbHlwaC4KKy8vCisjaWZuZGVmIERDUl9VU0VfTkVXXzEzNzI1MgorLy8gIERpc2FibGVLZXJuaW5nICAgICAgICAgICAgICAgIC0gRGlzYWJsZXMgVHJ1ZXR5cGUgYW5kIE9wZW5UeXBlIGtlcm5pbmcuCisvLworLy8gIERpc2FibGVMaWdhdHVyZXMgICAgICAgICAgICAgIC0gRGlzYWJsZXMgVHJ1ZXR5cGUgYW5kIE9wZW5UeXBlIGxpZ2F0dXJlcy4KKy8vCisvLyAgTGF5b3V0TGVnYWN5QmlkaSAgICAgICAgICAgICAgLSBDYXVzZXMgdGhlIGJpZGlyZWN0aW9uIGFsZ29yaXRobSB0byB1c2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWdodGx5IGRpZmZlcmVudCBjbGFzc2lmaWNhdGlvbnMgZm9yCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKycsICctJyBhbmQgJy8nIHRoYXQgbWFrZSB0aGVpciBsYXlvdXQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11Y2ggY2xvc2VyIHRvIHRoYXQgZXhwZWN0ZWQgYnkgZmlsZXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZCBpbiBXaW5kb3dzIG9yIGJ5IFdpbmRvd3MKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9ucy4KKy8vCisvLyAgTm9DaGFuZ2VzICAgICAgICAgICAgICAgICAgICAgLSBBIHRleHQgaW1hZ2VyIGNyZWF0ZWQgd2l0aCB0aGlzIGZsYWcgc2V0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2VzIG5vdCBzdXBwb3J0IHRob3NlIEFQSXMgdGhhdCBjaGFuZ2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0J3MgY29udGVudHMgb3IgZm9ybWF0dGluZywgYnV0IGZvciBtb3N0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW1wbGUgdGV4dCB3aWxsIGJlIHNpZ25pZmljYW50bHkgZmFzdGVyIGluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtaW5nIG1lYXN1cmVtZW50IGFuZCBkcmF3aW5nCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnMuCisvLworI2VuZGlmCisvLyAgTm9Gb250RmFsbGJhY2sgICAgICAgICAgICAgICAgLSBEaXNhYmxlcyBmYWxsYmFjayB0byBhbHRlcm5hdGUgZm9udHMgZm9yCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIHJlcXVlc3RlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC4gQW55IG1pc3NpbmcgY2hhcmFjdGVycyB3aWxsIGJlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBkaXNwbGF5ZWQgd2l0aCB0aGUgZm9udHMgbWlzc2luZyBnbHlwaCwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzdWFsbHkgYW4gb3BlbiBzcXVhcmUuCisvLworLy8gIE5vV3JhcCAgICAgICAgICAgICAgICAgICAgICAgIC0gRGlzYWJsZXMgd3JhcHBpbmcgb2YgdGV4dCBiZXR3ZWVuIGxpbmVzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGZvcm1hdHRpbmcgd2l0aGluIGEgcmVjdGFuZ2xlLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9XcmFwIGlzIGltcGxpZWQgd2hlbiBhIHBvaW50IGlzIHBhc3NlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiBhIHJlY3RhbmdsZSwgb3Igd2hlbiB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCByZWN0YW5nbGUgaGFzIGEgemVybyBsaW5lIGxlbmd0aC4KKy8vCisvLyAgTm9DbGlwICAgICAgICAgICAgICAgICAgICAgICAgLSBCeSBkZWZhdWx0IHRleHQgaXMgY2xpcHBlZCB0byB0aGUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRpbmcgcmVjdGFuZ2xlLiBTZXR0aW5nIE5vQ2xpcAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dzIG92ZXJoYW5naW5nIHBpeGVscyB0byBhZmZlY3QgdGhlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZpY2Ugb3V0c2lkZSB0aGUgZm9ybWF0dGluZyByZWN0YW5nbGUuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXhlbHMgYXQgdGhlIGVuZCBvZiB0aGUgbGluZSBtYXkgYmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmZmVjdGVkIGlmIHRoZSBnbHlwaHMgb3ZlcmhhbmcgdGhlaXIKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxzLCBhbmQgZWl0aGVyIHRoZSBOb0ZpdEJsYWNrQm94IGZsYWcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcyBiZWVuIHNldCwgb3IgdGhlIGdseXBoIGV4dGVuZHMgdG8gZmFyCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBiZSBmaXR0ZWQuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXhlbHMgYWJvdmUvYmVmb3JlIHRoZSBmaXJzdCBsaW5lIG9yCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWxvdy9hZnRlciB0aGUgbGFzdCBsaW5lIG1heSBiZSBhZmZlY3RlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhlIGdseXBocyBleHRlbmQgYmV5b25kIHRoZWlyIGNlbGwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzY2VudCAvIGRlc2NlbnQuIFRoaXMgY2FuIG9jY3VyIHJhcmVseQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB1bnVzdWFsIGRpYWNyaXRpYyBtYXJrIGNvbWJpbmF0aW9ucy4KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZW51bSBTdHJpbmdGb3JtYXRGbGFncworeworICAgIFN0cmluZ0Zvcm1hdEZsYWdzRGlyZWN0aW9uUmlnaHRUb0xlZnQgICAgICAgID0gMHgwMDAwMDAwMSwKKyAgICBTdHJpbmdGb3JtYXRGbGFnc0RpcmVjdGlvblZlcnRpY2FsICAgICAgICAgICA9IDB4MDAwMDAwMDIsCisgICAgU3RyaW5nRm9ybWF0RmxhZ3NOb0ZpdEJsYWNrQm94ICAgICAgICAgICAgICAgPSAweDAwMDAwMDA0LAorI2lmbmRlZiBEQ1JfVVNFX05FV18xMzcyNTIKKyAgICBTdHJpbmdGb3JtYXRGbGFnc051bWJlckNvbnRleHRBcmFiaWMgICAgICAgICA9IDB4MDAwMDAwMDgsCisgICAgU3RyaW5nRm9ybWF0RmxhZ3NEaXNhYmxlS2FzaGlkYUp1c3RpZmljYXRpb24gPSAweDAwMDAwMDEwLAorI2VuZGlmCisgICAgU3RyaW5nRm9ybWF0RmxhZ3NEaXNwbGF5Rm9ybWF0Q29udHJvbCAgICAgICAgPSAweDAwMDAwMDIwLAorI2lmbmRlZiBEQ1JfVVNFX05FV18xMzcyNTIKKyAgICBTdHJpbmdGb3JtYXRGbGFnc0Rpc2FibGVLZXJuaW5nICAgICAgICAgICAgICA9IDB4MDAwMDAwNDAsCisgICAgU3RyaW5nRm9ybWF0RmxhZ3NEaXNhYmxlTGlnYXR1cmVzICAgICAgICAgICAgPSAweDAwMDAwMDgwLAorICAgIFN0cmluZ0Zvcm1hdEZsYWdzTGF5b3V0TGVnYWN5QmlkaSAgICAgICAgICAgID0gMHgwMDAwMDEwMCwKKyAgICBTdHJpbmdGb3JtYXRGbGFnc05vQ2hhbmdlcyAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDAyMDAsCisjZW5kaWYKKyAgICBTdHJpbmdGb3JtYXRGbGFnc05vRm9udEZhbGxiYWNrICAgICAgICAgICAgICA9IDB4MDAwMDA0MDAsCisgICAgU3RyaW5nRm9ybWF0RmxhZ3NNZWFzdXJlVHJhaWxpbmdTcGFjZXMgICAgICAgPSAweDAwMDAwODAwLAorICAgIFN0cmluZ0Zvcm1hdEZsYWdzTm9XcmFwICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAwMTAwMCwKKyAgICBTdHJpbmdGb3JtYXRGbGFnc0xpbmVMaW1pdCAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDIwMDAsCisKKyAgICBTdHJpbmdGb3JtYXRGbGFnc05vQ2xpcCAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDQwMDAKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTdHJpbmdUcmltbWluZworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZW51bSBTdHJpbmdUcmltbWluZyB7CisgICAgU3RyaW5nVHJpbW1pbmdOb25lICAgICAgICAgICAgICA9IDAsCisgICAgU3RyaW5nVHJpbW1pbmdDaGFyYWN0ZXIgICAgICAgICA9IDEsCisgICAgU3RyaW5nVHJpbW1pbmdXb3JkICAgICAgICAgICAgICA9IDIsCisgICAgU3RyaW5nVHJpbW1pbmdFbGxpcHNpc0NoYXJhY3RlciA9IDMsCisgICAgU3RyaW5nVHJpbW1pbmdFbGxpcHNpc1dvcmQgICAgICA9IDQsCisgICAgU3RyaW5nVHJpbW1pbmdFbGxpcHNpc1BhdGggICAgICA9IDUKK307CisKKyNpZm5kZWYgRENSX1VTRV9ORVdfMTM3MjUyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU3RyaW5nIHVuaXRzCisvLworLy8gU3RyaW5nIHVuaXRzIGFyZSBsaWtlIGxlbmd0aCB1bml0cyBpbiBDU1MsIHRoZXkgbWF5IGJlIGFic29sdXRlLCBvcgorLy8gdGhleSBtYXkgYmUgcmVsYXRpdmUgdG8gYSBmb250IHNpemUuCisvLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZW51bSBTdHJpbmdVbml0IHsKKyAgICBTdHJpbmdVbml0V29ybGQgICAgICAgID0gVW5pdFdvcmxkLAorICAgIFN0cmluZ1VuaXREaXNwbGF5ICAgICAgPSBVbml0RGlzcGxheSwKKyAgICBTdHJpbmdVbml0UGl4ZWwgICAgICAgID0gVW5pdFBpeGVsLAorICAgIFN0cmluZ1VuaXRQb2ludCAgICAgICAgPSBVbml0UG9pbnQsCisgICAgU3RyaW5nVW5pdEluY2ggICAgICAgICA9IFVuaXRJbmNoLAorICAgIFN0cmluZ1VuaXREb2N1bWVudCAgICAgPSBVbml0RG9jdW1lbnQsCisgICAgU3RyaW5nVW5pdE1pbGxpbWV0ZXIgICA9IFVuaXRNaWxsaW1ldGVyLAorICAgIFN0cmluZ1VuaXRFbSAgICAgICAgICAgPSAzMgorfTsKKyNlbmRpZgorCisjaWZuZGVmIERDUl9VU0VfTkVXXzE1MjE1NAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExpbmUgc3BhY2luZyBmbGFncworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZW51bSBMaW5lU3BhY2luZyB7CisgICAgTGluZVNwYWNpbmdXb3JsZCAgICAgICAgICAgICAgICA9IFVuaXRXb3JsZCwKKyAgICBMaW5lU3BhY2luZ0Rpc3BsYXkgICAgICAgICAgICAgID0gVW5pdERpc3BsYXksCisgICAgTGluZVNwYWNpbmdQaXhlbCAgICAgICAgICAgICAgICA9IFVuaXRQaXhlbCwKKyAgICBMaW5lU3BhY2luZ1BvaW50ICAgICAgICAgICAgICAgID0gVW5pdFBvaW50LAorICAgIExpbmVTcGFjaW5nSW5jaCAgICAgICAgICAgICAgICAgPSBVbml0SW5jaCwKKyAgICBMaW5lU3BhY2luZ0RvY3VtZW50ICAgICAgICAgICAgID0gVW5pdERvY3VtZW50LAorICAgIExpbmVTcGFjaW5nTWlsbGltZXRlciAgICAgICAgICAgPSBVbml0TWlsbGltZXRlciwKKworICAgIExpbmVTcGFjaW5nUmVjb21tZW5kZWQgICAgICAgICAgPSAzMiwKKyAgICBMaW5lU3BhY2luZ0F0TGVhc3QgICAgICAgICAgICAgID0gMzMsCisgICAgTGluZVNwYWNpbmdBdExlYXN0TXVsdGlwbGUgICAgICA9IDM0LAorICAgIExpbmVTcGFjaW5nQ2VsbCAgICAgICAgICAgICAgICAgPSAzNSwKKyAgICBMaW5lU3BhY2luZ0NlbGxBdExlYXN0ICAgICAgICAgID0gMzYsCisgICAgTGluZVNwYWNpbmdDZWxsQXRMZWFzdE11bHRpcGxlICA9IDM3Cit9OworCisvLy8gVGhlIGZvbGxvd2luZyBtZXRob2RzIG9mIGxpbmVzcGFjaW5nIGFyZSByZWxhdGl2ZSB0byB0aGUgZm9udCBzaXplCisvLworLy8gPT09PT09PT09PT0gTWV0aG9kID09PT09PT09PT09ICA9PT09PT09PT09PT09PT0gUmVsYXRpdmUgdG8gPT09PT09PT09PT09PT09CisvLworLy8gTGluZVNwYWNpbmdSZWNvbW1lbmRlZCAgICAgICAgICByZWNvbW1lbmRlZCBsaW5lIHNwYWNpbmcgc3BlY2lmaWVkIGJ5IGZvbnQKKy8vIExpbmVTcGFjaW5nQXRMZWFzdCAgICAgICAgICAgICAgbWF4KHJlY29tbWVuZGVkLCB0YWxsZXN0IGdseXBoIGNlbGwpCisvLyBMaW5lU3BhY2luZ0F0TGVhc3RNdWx0aXBsZSAgICAgIHNtYWxsZXN0IG11bHRpcGxlIG9mIHJlY29tbWVuZGVkIGJpZyBlbm91Z2gKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFsbCBnbHlwaCBjZWxscyBvbiB0aGUgbGluZQorLy8gTGluZVNwYWNpbmdDZWxsICAgICAgICAgICAgICAgICBjZWxsIGhlaWdodAorLy8gTGluZVNwYWNpbmdDZWxsQXRMZWFzdCAgICAgICAgICBtYXgoZm9udCBjZWxsIGhlaWdodCwgdGFsbGVzdCBnbHlwaCBjZWxsKQorLy8gTGluZVNwYWNpbmdDZWxsQXRMZWFzdE11bHRpcGxlICBzbWFsbGVzdCBtdWx0aXBsZSBvZiBjZWxsIGhlaWdodCBiaWcgZW5vdWdoCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhbGwgZ2x5cGggY2VsbHMgb24gdGhlIGxpbmUKKyNlbmRpZgorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBOYXRpb25hbCBsYW5ndWFnZSBkaWdpdCBzdWJzdGl0dXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VudW0gU3RyaW5nRGlnaXRTdWJzdGl0dXRlCit7CisgICAgU3RyaW5nRGlnaXRTdWJzdGl0dXRlVXNlciAgICAgICAgPSAwLCAgLy8gQXMgTkxTIHNldHRpbmcKKyAgICBTdHJpbmdEaWdpdFN1YnN0aXR1dGVOb25lICAgICAgICA9IDEsCisgICAgU3RyaW5nRGlnaXRTdWJzdGl0dXRlTmF0aW9uYWwgICAgPSAyLAorICAgIFN0cmluZ0RpZ2l0U3Vic3RpdHV0ZVRyYWRpdGlvbmFsID0gMworfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEhvdGtleSBwcmVmaXggaW50ZXJwcmV0YXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VudW0gSG90a2V5UHJlZml4Cit7CisgICAgSG90a2V5UHJlZml4Tm9uZSAgICAgICAgPSAwLAorICAgIEhvdGtleVByZWZpeFNob3cgICAgICAgID0gMSwKKyAgICBIb3RrZXlQcmVmaXhIaWRlICAgICAgICA9IDIKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUZXh0IGFsaWdubWVudCBmbGFncworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZW51bSBTdHJpbmdBbGlnbm1lbnQKK3sKKyAgICAvLyBMZWZ0IGVkZ2UgZm9yIGxlZnQtdG8tcmlnaHQgdGV4dCwKKyAgICAvLyByaWdodCBmb3IgcmlnaHQtdG8tbGVmdCB0ZXh0LAorICAgIC8vIGFuZCB0b3AgZm9yIHZlcnRpY2FsCisgICAgU3RyaW5nQWxpZ25tZW50TmVhciAgID0gMCwKKyAgICBTdHJpbmdBbGlnbm1lbnRDZW50ZXIgPSAxLAorICAgIFN0cmluZ0FsaWdubWVudEZhciAgICA9IDIKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEcml2ZXJTdHJpbmdPcHRpb25zCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlbnVtIERyaXZlclN0cmluZ09wdGlvbnMKK3sKKyAgICBEcml2ZXJTdHJpbmdPcHRpb25zQ21hcExvb2t1cCAgICAgICAgICAgICA9IDEsCisgICAgRHJpdmVyU3RyaW5nT3B0aW9uc1ZlcnRpY2FsICAgICAgICAgICAgICAgPSAyLAorICAgIERyaXZlclN0cmluZ09wdGlvbnNSZWFsaXplZEFkdmFuY2UgICAgICAgID0gNCwKKyNpZm5kZWYgRENSX1VTRV9ORVdfMTM3MjUyCisgICAgRHJpdmVyU3RyaW5nT3B0aW9uc0NvbXBlbnNhdGVSZXNvbHV0aW9uICAgPSA4CisjZW5kaWYKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGbHVzaCBJbnRlbnRpb24gZmxhZ3MKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VudW0gRmx1c2hJbnRlbnRpb24KK3sKKyAgICBGbHVzaEludGVudGlvbkZsdXNoID0gMCwgICAgICAgIC8vIEZsdXNoIGFsbCBiYXRjaGVkIHJlbmRlcmluZyBvcGVyYXRpb25zCisgICAgRmx1c2hJbnRlbnRpb25TeW5jID0gMSAgICAgICAgICAvLyBGbHVzaCBhbGwgYmF0Y2hlZCByZW5kZXJpbmcgb3BlcmF0aW9ucworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHdhaXQgZm9yIHRoZW0gdG8gY29tcGxldGUKK307CisKKyNpZm5kZWYgRENSX1VTRV9ORVdfMTc1ODY2CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBXaW5kb3cgQ2hhbmdlIE5vdGlmaWNhdGlvbiB0eXBlcworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZW51bSBXaW5kb3dOb3RpZnlFbnVtCit7CisgICBXaW5kb3dOb3RpZnlFbnVtRW5hYmxlID0gMCwKKyAgIFdpbmRvd05vdGlmeUVudW1EaXNhYmxlLAorICAgV2luZG93Tm90aWZ5RW51bVBhbGV0dGUsCisgICBXaW5kb3dOb3RpZnlFbnVtRGlzcGxheSwKKyAgIFdpbmRvd05vdGlmeUVudW1TeXNDb2xvcgorfTsKKworI2VuZGlmCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbWFnZSBlbmNvZGVyIHBhcmFtZXRlciByZWxhdGVkIHR5cGVzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjaWZkZWYgRENSX1VTRV9ORVdfMTQ1ODA0CitlbnVtIEVuY29kZXJQYXJhbWV0ZXJWYWx1ZVR5cGUKK3sKKyAgICBFbmNvZGVyUGFyYW1ldGVyVmFsdWVUeXBlQnl0ZSAgICAgICAgICAgPSAxLCAgICAvLyA4LWJpdCB1bnNpZ25lZCBpbnQKKyAgICBFbmNvZGVyUGFyYW1ldGVyVmFsdWVUeXBlQVNDSUkgICAgICAgICAgPSAyLCAgICAvLyA4LWJpdCBieXRlIGNvbnRhaW5pbmcgb25lIDctYml0IEFTQ0lJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29kZS4gTlVMTCB0ZXJtaW5hdGVkLgorICAgIEVuY29kZXJQYXJhbWV0ZXJWYWx1ZVR5cGVTaG9ydCAgICAgICAgICA9IDMsICAgIC8vIDE2LWJpdCB1bnNpZ25lZCBpbnQKKyAgICBFbmNvZGVyUGFyYW1ldGVyVmFsdWVUeXBlTG9uZyAgICAgICAgICAgPSA0LCAgICAvLyAzMi1iaXQgdW5zaWduZWQgaW50CisgICAgRW5jb2RlclBhcmFtZXRlclZhbHVlVHlwZVJhdGlvbmFsICAgICAgID0gNSwgICAgLy8gVHdvIExvbmdzLiBUaGUgZmlyc3QgTG9uZyBpcyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBudW1lcmF0b3IsIHRoZSBzZWNvbmQgTG9uZyBleHByZXNzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVub21pbnRvci4KKyAgICBFbmNvZGVyUGFyYW1ldGVyVmFsdWVUeXBlTG9uZ1JhbmdlICAgICAgPSA2LCAgICAvLyBUd28gbG9uZ3Mgd2hpY2ggc3BlY2lmeSBhIHJhbmdlIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciB2YWx1ZXMuIFRoZSBmaXJzdCBMb25nIHNwZWNpZmllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBsb3dlciBlbmQgYW5kIHRoZSBzZWNvbmQgb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmaWVzIHRoZSBoaWdoZXIgZW5kLiBBbGwgdmFsdWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJlIGluY2x1c2l2ZSBhdCBib3RoIGVuZHMKKyAgICBFbmNvZGVyUGFyYW1ldGVyVmFsdWVUeXBlVW5kZWZpbmVkICAgICAgPSA3LCAgICAvLyA4LWJpdCBieXRlIHRoYXQgY2FuIHRha2UgYW55IHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVwZW5kaW5nIG9uIGZpZWxkIGRlZmluaXRpb24KKyAgICBFbmNvZGVyUGFyYW1ldGVyVmFsdWVUeXBlUmF0aW9uYWxSYW5nZSAgPSA4ICAgICAvLyBUd28gUmF0aW9uYWxzLiBUaGUgZmlyc3QgUmF0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWZpZXMgdGhlIGxvd2VyIGVuZCBhbmQgdGhlIHNlY29uZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmllcyB0aGUgaGlnaGVyIGVuZC4gQWxsIHZhbHVlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZSBpbmNsdXNpdmUgYXQgYm90aCBlbmRzCit9OworI2Vsc2UKK2VudW0gVmFsdWVUeXBlCit7CisgICAgVmFsdWVUeXBlQnl0ZSAgICAgICAgICAgPSAxLCAgICAvLyA4LWJpdCB1bnNpZ25lZCBpbnQKKyAgICBWYWx1ZVR5cGVBU0NJSSAgICAgICAgICA9IDIsICAgIC8vIDgtYml0IGJ5dGUgY29udGFpbmluZyBvbmUgNy1iaXQgQVNDSUkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvZGUuIE5VTEwgdGVybWluYXRlZC4KKyAgICBWYWx1ZVR5cGVTaG9ydCAgICAgICAgICA9IDMsICAgIC8vIDE2LWJpdCB1bnNpZ25lZCBpbnQKKyAgICBWYWx1ZVR5cGVMb25nICAgICAgICAgICA9IDQsICAgIC8vIDMyLWJpdCB1bnNpZ25lZCBpbnQKKyAgICBWYWx1ZVR5cGVSYXRpb25hbCAgICAgICA9IDUsICAgIC8vIFR3byBMb25ncy4gVGhlIGZpcnN0IExvbmcgaXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBudW1lcmF0b3IsIHRoZSBzZWNvbmQgTG9uZyBleHByZXNzZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZW5vbWludG9yLgorICAgIFZhbHVlVHlwZUxvbmdSYW5nZSAgICAgID0gNiwgICAgLy8gVHdvIGxvbmdzIHdoaWNoIHNwZWNpZnkgYSByYW5nZSBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciB2YWx1ZXMuIFRoZSBmaXJzdCBMb25nIHNwZWNpZmllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGxvd2VyIGVuZCBhbmQgdGhlIHNlY29uZCBvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmllcyB0aGUgaGlnaGVyIGVuZC4gQWxsIHZhbHVlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJlIGluY2x1c2l2ZSBhdCBib3RoIGVuZHMKKyAgICBWYWx1ZVR5cGVVbmRlZmluZWQgICAgICA9IDcsICAgIC8vIDgtYml0IGJ5dGUgdGhhdCBjYW4gdGFrZSBhbnkgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlcGVuZGluZyBvbiBmaWVsZCBkZWZpbml0aW9uCisgICAgVmFsdWVUeXBlUmF0aW9uYWxSYW5nZSAgPSA4ICAgICAvLyBUd28gUmF0aW9uYWxzLiBUaGUgZmlyc3QgUmF0aW9uYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpZmllcyB0aGUgbG93ZXIgZW5kIGFuZCB0aGUgc2Vjb25kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWZpZXMgdGhlIGhpZ2hlciBlbmQuIEFsbCB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZSBpbmNsdXNpdmUgYXQgYm90aCBlbmRzCit9OworI2VuZGlmCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbWFnZSBlbmNvZGVyIHZhbHVlIHR5cGVzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlbnVtIEVuY29kZXJWYWx1ZQoreworICAgIEVuY29kZXJWYWx1ZUNvbG9yVHlwZUNNWUssCisgICAgRW5jb2RlclZhbHVlQ29sb3JUeXBlWUNDSywKKyAgICBFbmNvZGVyVmFsdWVDb21wcmVzc2lvbkxaVywKKyAgICBFbmNvZGVyVmFsdWVDb21wcmVzc2lvbkNDSVRUMywKKyAgICBFbmNvZGVyVmFsdWVDb21wcmVzc2lvbkNDSVRUNCwKKyAgICBFbmNvZGVyVmFsdWVDb21wcmVzc2lvblJsZSwKKyAgICBFbmNvZGVyVmFsdWVDb21wcmVzc2lvbk5vbmUsCisgICAgRW5jb2RlclZhbHVlU2Nhbk1ldGhvZEludGVybGFjZWQsCisgICAgRW5jb2RlclZhbHVlU2Nhbk1ldGhvZE5vbkludGVybGFjZWQsCisgICAgRW5jb2RlclZhbHVlVmVyc2lvbkdpZjg3LAorICAgIEVuY29kZXJWYWx1ZVZlcnNpb25HaWY4OSwKKyAgICBFbmNvZGVyVmFsdWVSZW5kZXJQcm9ncmVzc2l2ZSwKKyAgICBFbmNvZGVyVmFsdWVSZW5kZXJOb25Qcm9ncmVzc2l2ZSwKKyAgICBFbmNvZGVyVmFsdWVUcmFuc2Zvcm1Sb3RhdGU5MCwKKyAgICBFbmNvZGVyVmFsdWVUcmFuc2Zvcm1Sb3RhdGUxODAsCisgICAgRW5jb2RlclZhbHVlVHJhbnNmb3JtUm90YXRlMjcwLAorICAgIEVuY29kZXJWYWx1ZVRyYW5zZm9ybUZsaXBIb3Jpem9udGFsLAorICAgIEVuY29kZXJWYWx1ZVRyYW5zZm9ybUZsaXBWZXJ0aWNhbCwKKyAgICAjaWZkZWYgRENSX1VTRV9ORVdfMTQwODYxCisgICAgRW5jb2RlclZhbHVlTXVsdGlGcmFtZSwKKyAgICAjZWxzZQorICAgIEVuY29kZVZhbHVlTXVsdGlGcmFtZSwKKyAgICAjZW5kaWYKKyAgICBFbmNvZGVyVmFsdWVMYXN0RnJhbWUsCisgICAgRW5jb2RlclZhbHVlRmx1c2gsCisgICAgI2lmZGVmIERDUl9VU0VfTkVXXzE0MDg2MQorICAgIEVuY29kZXJWYWx1ZUZyYW1lRGltZW5zaW9uVGltZSwKKyAgICBFbmNvZGVyVmFsdWVGcmFtZURpbWVuc2lvblJlc29sdXRpb24sCisgICAgRW5jb2RlclZhbHVlRnJhbWVEaW1lbnNpb25QYWdlCisgICAgI2Vsc2UKKyAgICBFbmNvZGVWYWx1ZUZyYW1lRGltZW5zaW9uVGltZSwKKyAgICBFbmNvZGVWYWx1ZUZyYW1lRGltZW5zaW9uUmVzb2x1dGlvbiwKKyAgICBFbmNvZGVWYWx1ZUZyYW1lRGltZW5zaW9uUGFnZQorICAgICNlbmRpZgorfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEdyYXBoaWNzIGxheW91dCB2YWx1ZXMgKHN1cHBvcnQgZm9yIE1pZGRsZSBFYXN0IGxvY2FsaXphdGlvbikKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VudW0gR3JhcGhpY3NMYXlvdXQKK3sKKyAgICBHcmFwaGljc0xheW91dE5vcm1hbCwKKyAgICBHcmFwaGljc0xheW91dE1pcnJvcmVkLAorICAgIEdyYXBoaWNzTGF5b3V0TWlycm9yZWRJZ25vcmVJbWFnZXMsCisgICAgR3JhcGhpY3NMYXlvdXRNaXJyb3JlZEZvcmNlSW1hZ2VzCit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW1hZ2UgbGF5b3V0IHZhbHVlcyAoc3VwcG9ydCBmb3IgTWlkZGxlIEVhc3QgbG9jYWxpemF0aW9uKQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZW51bSBJbWFnZUxheW91dAoreworICAgIEltYWdlTGF5b3V0Tm9ybWFsLAorICAgIEltYWdlTGF5b3V0SWdub3JlTWlycm9yZWQKK307CisKK2VudW0gRW1mVG9XbWZCaXRzRmxhZ3MKK3sKKyAgICBFbWZUb1dtZkJpdHNGbGFnc0RlZmF1bHQgICAgPSAweDAwMDAwMDAwLAorICAgIEVtZlRvV21mQml0c0ZsYWdzRW1iZWRFbWYgICA9IDB4MDAwMDAwMDEsCisgICAgRW1mVG9XbWZCaXRzRmxhZ3NJbmNsdWRlQVBNID0gMHgwMDAwMDAwMiwKKyAgICBFbWZUb1dtZkJpdHNGbGFnc05vWE9SQ2xpcCAgPSAweDAwMDAwMDA0Cit9OworCisjZW5kaWYgLy8gIV9HRElQTFVTRU5VTVNfSApkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0ZsYXQuaCBiL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNGbGF0LmgKaW5kZXggOGI1MzY5ZS4uMWRkOGQ0NiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0ZsYXQuaAorKysgYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzRmxhdC5oCkBAIC0xLDI3NDAgKzEsMjc0MCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXA0KLSoNCi0qIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotKg0KLSogTW9kdWxlIE5hbWU6DQotKg0KLSogICBHZGlwbHVzRmxhdC5oDQotKg0KLSogQWJzdHJhY3Q6DQotKg0KLSogICBGbGF0IEdESSsgQVBJIHdyYXBwZXJzIC0gaGVhZGVyIGZpbGUNCi0qDQotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLS8vIFRPRE86IHRoaXMgZmlsZSBzdHlsZSBuZWVkcyB0byBiZSBtYWRlIGludGVybmFsbHkgY29uc2lzdGVudCB3aXRoIHRoZSB3YXkNCi0vLyAgICAgICBpdCBoYW5kbGVzIGJyZWFraW5nIHRoZSBsb25nIGFyZ3VtZW50IGxpc3RzIGFjcm9zcyBtdWx0aXBsZSBsaW5lcw0KLQ0KLSNpZm5kZWYgX0ZMQVRBUElfSA0KLSNkZWZpbmUgX0ZMQVRBUElfSA0KLQ0KLSNkZWZpbmUgV0lOR0RJUEFQSSBfX3N0ZGNhbGwNCi0NCi0vLyBjdXJyZW50bHksIG9ubHkgQysrIHdyYXBwZXIgQVBJJ3MgZm9yY2UgY29uc3QuDQotDQotI2RlZmluZSBHRElQQ09OU1QgY29uc3QNCi0NCi0jaWZkZWYgX19jcGx1c3BsdXMNCi1leHRlcm4gIkMiIHsNCi0jZW5kaWYNCi0NCi0jaWZuZGVmIERDUl9VU0VfTkVXXzE3NTg2Ng0KLQ0KLVZPSUQNCi1XSU5HRElQQVBJDQotR2RpcERpc3BsYXlQYWxldHRlV2luZG93Tm90aWZ5KFdpbmRvd05vdGlmeUVudW0gbm90aWZ5KTsNCi0NCi0jZW5kaWYNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBHcmFwaGljc1BhdGggbWV0aG9kcw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlUGF0aChHcEZpbGxNb2RlIGJydXNoTW9kZSwgR3BQYXRoICoqcGF0aCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDcmVhdGVQYXRoMihHRElQQ09OU1QgR3BQb2ludEYqLCBHRElQQ09OU1QgQllURSosIElOVCwgR3BGaWxsTW9kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcFBhdGggKipwYXRoKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZVBhdGgySShHRElQQ09OU1QgR3BQb2ludCosIEdESVBDT05TVCBCWVRFKiwgSU5ULCBHcEZpbGxNb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcFBhdGggKipwYXRoKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENsb25lUGF0aChHcFBhdGgqIHBhdGgsIEdwUGF0aCAqKmNsb25lUGF0aCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBEZWxldGVQYXRoKEdwUGF0aCogcGF0aCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBSZXNldFBhdGgoR3BQYXRoKiBwYXRoKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFBvaW50Q291bnQoR3BQYXRoKiBwYXRoLCBJTlQqIGNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFBhdGhUeXBlcyhHcFBhdGgqIHBhdGgsIEJZVEUqIHR5cGVzLCBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0UGF0aFBvaW50cyhHcFBhdGgqLCBHcFBvaW50RiogcG9pbnRzLCBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0UGF0aFBvaW50c0koR3BQYXRoKiwgR3BQb2ludCogcG9pbnRzLCBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0UGF0aEZpbGxNb2RlKEdwUGF0aCAqcGF0aCwgR3BGaWxsTW9kZSAqZmlsbG1vZGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0UGF0aEZpbGxNb2RlKEdwUGF0aCAqcGF0aCwgR3BGaWxsTW9kZSBmaWxsbW9kZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRQYXRoRGF0YShHcFBhdGggKnBhdGgsIEdwUGF0aERhdGEqIHBhdGhEYXRhKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFN0YXJ0UGF0aEZpZ3VyZShHcFBhdGggKnBhdGgpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ2xvc2VQYXRoRmlndXJlKEdwUGF0aCAqcGF0aCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDbG9zZVBhdGhGaWd1cmVzKEdwUGF0aCAqcGF0aCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRQYXRoTWFya2VyKEdwUGF0aCogcGF0aCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDbGVhclBhdGhNYXJrZXJzKEdwUGF0aCogcGF0aCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBSZXZlcnNlUGF0aChHcFBhdGgqIHBhdGgpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0UGF0aExhc3RQb2ludChHcFBhdGgqIHBhdGgsIEdwUG9pbnRGKiBsYXN0UG9pbnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQWRkUGF0aExpbmUoR3BQYXRoICpwYXRoLCBSRUFMIHgxLCBSRUFMIHkxLCBSRUFMIHgyLCBSRUFMIHkyKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEFkZFBhdGhMaW5lMihHcFBhdGggKnBhdGgsIEdESVBDT05TVCBHcFBvaW50RiAqcG9pbnRzLCBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQWRkUGF0aEFyYyhHcFBhdGggKnBhdGgsIFJFQUwgeCwgUkVBTCB5LCBSRUFMIHdpZHRoLCBSRUFMIGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBSRUFMIHN0YXJ0QW5nbGUsIFJFQUwgc3dlZXBBbmdsZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBBZGRQYXRoQmV6aWVyKEdwUGF0aCAqcGF0aCwgUkVBTCB4MSwgUkVBTCB5MSwgUkVBTCB4MiwgUkVBTCB5MiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMIHgzLCBSRUFMIHkzLCBSRUFMIHg0LCBSRUFMIHk0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEFkZFBhdGhCZXppZXJzKEdwUGF0aCAqcGF0aCwgR0RJUENPTlNUIEdwUG9pbnRGICpwb2ludHMsIElOVCBjb3VudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBBZGRQYXRoQ3VydmUoR3BQYXRoICpwYXRoLCBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywgSU5UIGNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEFkZFBhdGhDdXJ2ZTIoR3BQYXRoICpwYXRoLCBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywgSU5UIGNvdW50LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgdGVuc2lvbik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBBZGRQYXRoQ3VydmUzKEdwUGF0aCAqcGF0aCwgR0RJUENPTlNUIEdwUG9pbnRGICpwb2ludHMsIElOVCBjb3VudCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgb2Zmc2V0LCBJTlQgbnVtYmVyT2ZTZWdtZW50cywgUkVBTCB0ZW5zaW9uKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEFkZFBhdGhDbG9zZWRDdXJ2ZShHcFBhdGggKnBhdGgsIEdESVBDT05TVCBHcFBvaW50RiAqcG9pbnRzLCBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQWRkUGF0aENsb3NlZEN1cnZlMihHcFBhdGggKnBhdGgsIEdESVBDT05TVCBHcFBvaW50RiAqcG9pbnRzLCBJTlQgY291bnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCB0ZW5zaW9uKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEFkZFBhdGhSZWN0YW5nbGUoR3BQYXRoICpwYXRoLCBSRUFMIHgsIFJFQUwgeSwgUkVBTCB3aWR0aCwgUkVBTCBoZWlnaHQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQWRkUGF0aFJlY3RhbmdsZXMoR3BQYXRoICpwYXRoLCBHRElQQ09OU1QgR3BSZWN0RiAqcmVjdHMsIElOVCBjb3VudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBBZGRQYXRoRWxsaXBzZShHcFBhdGggKnBhdGgsIFJFQUwgeCwgUkVBTCB5LCBSRUFMIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMIGhlaWdodCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBBZGRQYXRoUGllKEdwUGF0aCAqcGF0aCwgUkVBTCB4LCBSRUFMIHksIFJFQUwgd2lkdGgsIFJFQUwgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgc3RhcnRBbmdsZSwgUkVBTCBzd2VlcEFuZ2xlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEFkZFBhdGhQb2x5Z29uKEdwUGF0aCAqcGF0aCwgR0RJUENPTlNUIEdwUG9pbnRGICpwb2ludHMsIElOVCBjb3VudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBBZGRQYXRoUGF0aChHcFBhdGggKnBhdGgsIEdESVBDT05TVCBHcFBhdGgqIGFkZGluZ1BhdGgsIEJPT0wgY29ubmVjdCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBBZGRQYXRoU3RyaW5nKEdwUGF0aCAqcGF0aCwgR0RJUENPTlNUIFdDSEFSICpzdHJpbmcsDQotICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGxlbmd0aCwgR0RJUENPTlNUIEdwRm9udEZhbWlseSAqZmFtaWx5LCBJTlQgc3R5bGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCBlbVNpemUsIEdESVBDT05TVCBSZWN0RiAqbGF5b3V0UmVjdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BTdHJpbmdGb3JtYXQgKmZvcm1hdCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBBZGRQYXRoU3RyaW5nSShHcFBhdGggKnBhdGgsIEdESVBDT05TVCBXQ0hBUiAqc3RyaW5nLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIElOVCBsZW5ndGgsIEdESVBDT05TVCBHcEZvbnRGYW1pbHkgKmZhbWlseSwgSU5UIHN0eWxlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgZW1TaXplLCBHRElQQ09OU1QgUmVjdCAqbGF5b3V0UmVjdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BTdHJpbmdGb3JtYXQgKmZvcm1hdCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBBZGRQYXRoTGluZUkoR3BQYXRoICpwYXRoLCBJTlQgeDEsIElOVCB5MSwgSU5UIHgyLCBJTlQgeTIpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQWRkUGF0aExpbmUySShHcFBhdGggKnBhdGgsIEdESVBDT05TVCBHcFBvaW50ICpwb2ludHMsIElOVCBjb3VudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBBZGRQYXRoQXJjSShHcFBhdGggKnBhdGgsIElOVCB4LCBJTlQgeSwgSU5UIHdpZHRoLCBJTlQgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgc3RhcnRBbmdsZSwgUkVBTCBzd2VlcEFuZ2xlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEFkZFBhdGhCZXppZXJJKEdwUGF0aCAqcGF0aCwgSU5UIHgxLCBJTlQgeTEsIElOVCB4MiwgSU5UIHkyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCB4MywgSU5UIHkzLCBJTlQgeDQsIElOVCB5NCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBBZGRQYXRoQmV6aWVyc0koR3BQYXRoICpwYXRoLCBHRElQQ09OU1QgR3BQb2ludCAqcG9pbnRzLCBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQWRkUGF0aEN1cnZlSShHcFBhdGggKnBhdGgsIEdESVBDT05TVCBHcFBvaW50ICpwb2ludHMsIElOVCBjb3VudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBBZGRQYXRoQ3VydmUySShHcFBhdGggKnBhdGgsIEdESVBDT05TVCBHcFBvaW50ICpwb2ludHMsIElOVCBjb3VudCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMIHRlbnNpb24pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQWRkUGF0aEN1cnZlM0koR3BQYXRoICpwYXRoLCBHRElQQ09OU1QgR3BQb2ludCAqcG9pbnRzLCBJTlQgY291bnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIG9mZnNldCwgSU5UIG51bWJlck9mU2VnbWVudHMsIFJFQUwgdGVuc2lvbik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBBZGRQYXRoQ2xvc2VkQ3VydmVJKEdwUGF0aCAqcGF0aCwgR0RJUENPTlNUIEdwUG9pbnQgKnBvaW50cywgSU5UIGNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEFkZFBhdGhDbG9zZWRDdXJ2ZTJJKEdwUGF0aCAqcGF0aCwgR0RJUENPTlNUIEdwUG9pbnQgKnBvaW50cywgSU5UIGNvdW50LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgdGVuc2lvbik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBBZGRQYXRoUmVjdGFuZ2xlSShHcFBhdGggKnBhdGgsIElOVCB4LCBJTlQgeSwgSU5UIHdpZHRoLCBJTlQgaGVpZ2h0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEFkZFBhdGhSZWN0YW5nbGVzSShHcFBhdGggKnBhdGgsIEdESVBDT05TVCBHcFJlY3QgKnJlY3RzLCBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQWRkUGF0aEVsbGlwc2VJKEdwUGF0aCAqcGF0aCwgSU5UIHgsIElOVCB5LCBJTlQgd2lkdGgsIElOVCBoZWlnaHQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQWRkUGF0aFBpZUkoR3BQYXRoICpwYXRoLCBJTlQgeCwgSU5UIHksIElOVCB3aWR0aCwgSU5UIGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBSRUFMIHN0YXJ0QW5nbGUsIFJFQUwgc3dlZXBBbmdsZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBBZGRQYXRoUG9seWdvbkkoR3BQYXRoICpwYXRoLCBHRElQQ09OU1QgR3BQb2ludCAqcG9pbnRzLCBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRmxhdHRlblBhdGgoR3BQYXRoICpwYXRoLCBHcE1hdHJpeCogbWF0cml4LCBSRUFMIGZsYXRuZXNzKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFdpbmRpbmdNb2RlT3V0bGluZSgNCi0gICAgR3BQYXRoICpwYXRoLA0KLSAgICBHcE1hdHJpeCAqbWF0cml4LA0KLSAgICBSRUFMIGZsYXRuZXNzDQotKTsNCi0NCi0NCi0jaWZkZWYgRENSX1VTRV9ORVdfMjAyOTAzDQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBXaWRlblBhdGgoDQotICAgIEdwUGF0aCAqbmF0aXZlUGF0aCwNCi0gICAgR3BQZW4gKnBlbiwNCi0gICAgR3BNYXRyaXggKm1hdHJpeCwNCi0gICAgUkVBTCBmbGF0bmVzcw0KLSk7DQotDQotI2Vsc2UNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFdpZGVuUGF0aFdpdGhNaW5pbXVtUmVzb2x1dGlvbnMoR3BQYXRoICpwYXRoLCBHcFBlbiAqcGVuLCBSRUFMIG1pblhyZXMsDQotICAgICAgICAgICAgUkVBTCBtaW5ZcmVzLCBHcE1hdHJpeCAqbWF0cml4LCBCT09MIHJlbW92ZVNlbGZ0SW50ZXJzZWN0cyk7DQotDQotI2VuZGlmDQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBXYXJwUGF0aChHcFBhdGggKnBhdGgsIEdwTWF0cml4KiBtYXRyaXgsDQotICAgICAgICAgICAgR0RJUENPTlNUIEdwUG9pbnRGICpwb2ludHMsIElOVCBjb3VudCwNCi0gICAgICAgICAgICBSRUFMIHNyY3gsIFJFQUwgc3JjeSwgUkVBTCBzcmN3aWR0aCwgUkVBTCBzcmNoZWlnaHQsDQotICAgICAgICAgICAgV2FycE1vZGUgd2FycE1vZGUsIFJFQUwgZmxhdG5lc3MpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwVHJhbnNmb3JtUGF0aChHcFBhdGgqIHBhdGgsIEdwTWF0cml4KiBtYXRyaXgpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0UGF0aFdvcmxkQm91bmRzKEdwUGF0aCogcGF0aCwgR3BSZWN0RiogYm91bmRzLCBHRElQQ09OU1QgR3BNYXRyaXggKm1hdHJpeCwNCi0gICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BQZW4gKnBlbik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRQYXRoV29ybGRCb3VuZHNJKEdwUGF0aCogcGF0aCwgR3BSZWN0KiBib3VuZHMsIEdESVBDT05TVCBHcE1hdHJpeCAqbWF0cml4LA0KLSAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BQZW4gKnBlbik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBJc1Zpc2libGVQYXRoUG9pbnQoR3BQYXRoKiBwYXRoLCBSRUFMIHgsIFJFQUwgeSwNCi0gICAgICAgICAgICAgICAgICAgICAgIEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBCT09MICpyZXN1bHQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwSXNWaXNpYmxlUGF0aFBvaW50SShHcFBhdGgqIHBhdGgsIElOVCB4LCBJTlQgeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICBHcEdyYXBoaWNzICpncmFwaGljcywgQk9PTCAqcmVzdWx0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcElzT3V0bGluZVZpc2libGVQYXRoUG9pbnQoR3BQYXRoKiBwYXRoLCBSRUFMIHgsIFJFQUwgeSwgR3BQZW4gKnBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcEdyYXBoaWNzICpncmFwaGljcywgQk9PTCAqcmVzdWx0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcElzT3V0bGluZVZpc2libGVQYXRoUG9pbnRJKEdwUGF0aCogcGF0aCwgSU5UIHgsIElOVCB5LCBHcFBlbiAqcGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcEdyYXBoaWNzICpncmFwaGljcywgQk9PTCAqcmVzdWx0KTsNCi0NCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBQYXRoIEVudW1lcmF0aW9uIG1ldGhvZHMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZVBhdGhJdGVyKEdwUGF0aEl0ZXJhdG9yICoqaXRlcmF0b3IsIEdwUGF0aCogcGF0aCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBEZWxldGVQYXRoSXRlcihHcFBhdGhJdGVyYXRvciAqaXRlcmF0b3IpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwUGF0aEl0ZXJOZXh0U3VicGF0aChHcFBhdGhJdGVyYXRvciogaXRlcmF0b3IsIElOVCAqcmVzdWx0Q291bnQsDQotICAgICAgICBJTlQqIHN0YXJ0SW5kZXgsIElOVCogZW5kSW5kZXgsIEJPT0wqIGlzQ2xvc2VkKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFBhdGhJdGVyTmV4dFN1YnBhdGhQYXRoKEdwUGF0aEl0ZXJhdG9yKiBpdGVyYXRvciwgSU5UKiByZXN1bHRDb3VudCwNCi0gICAgICAgIEdwUGF0aCogcGF0aCwgQk9PTCogaXNDbG9zZWQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwUGF0aEl0ZXJOZXh0UGF0aFR5cGUoR3BQYXRoSXRlcmF0b3IqIGl0ZXJhdG9yLCBJTlQqIHJlc3VsdENvdW50LA0KLSAgICAgICAgQllURSogcGF0aFR5cGUsIElOVCogc3RhcnRJbmRleCwgSU5UKiBlbmRJbmRleCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBQYXRoSXRlck5leHRNYXJrZXIoR3BQYXRoSXRlcmF0b3IqIGl0ZXJhdG9yLCBJTlQgKnJlc3VsdENvdW50LA0KLSAgICAgICAgSU5UKiBzdGFydEluZGV4LCBJTlQqIGVuZEluZGV4KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFBhdGhJdGVyTmV4dE1hcmtlclBhdGgoR3BQYXRoSXRlcmF0b3IqIGl0ZXJhdG9yLCBJTlQqIHJlc3VsdENvdW50LA0KLSAgICAgICAgR3BQYXRoKiBwYXRoKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFBhdGhJdGVyR2V0Q291bnQoR3BQYXRoSXRlcmF0b3IqIGl0ZXJhdG9yLCBJTlQqIGNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFBhdGhJdGVyR2V0U3VicGF0aENvdW50KEdwUGF0aEl0ZXJhdG9yKiBpdGVyYXRvciwgSU5UKiBjb3VudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBQYXRoSXRlcklzVmFsaWQoR3BQYXRoSXRlcmF0b3IqIGl0ZXJhdG9yLCBCT09MKiB2YWxpZCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBQYXRoSXRlckhhc0N1cnZlKEdwUGF0aEl0ZXJhdG9yKiBpdGVyYXRvciwgQk9PTCogaGFzQ3VydmUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwUGF0aEl0ZXJSZXdpbmQoR3BQYXRoSXRlcmF0b3IqIGl0ZXJhdG9yKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFBhdGhJdGVyRW51bWVyYXRlKEdwUGF0aEl0ZXJhdG9yKiBpdGVyYXRvciwgSU5UKiByZXN1bHRDb3VudCwNCi0gICAgR3BQb2ludEYgKnBvaW50cywgQllURSAqdHlwZXMsIElOVCBjb3VudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBQYXRoSXRlckNvcHlEYXRhKEdwUGF0aEl0ZXJhdG9yKiBpdGVyYXRvciwgSU5UKiByZXN1bHRDb3VudCwNCi0gICAgR3BQb2ludEYqIHBvaW50cywgQllURSogdHlwZXMsIElOVCBzdGFydEluZGV4LCBJTlQgZW5kSW5kZXgpOw0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIE1hdHJpeCBtZXRob2RzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDcmVhdGVNYXRyaXgoR3BNYXRyaXggKiptYXRyaXgpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlTWF0cml4MihSRUFMIG0xMSwgUkVBTCBtMTIsIFJFQUwgbTIxLCBSRUFMIG0yMiwgUkVBTCBkeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgZHksIEdwTWF0cml4ICoqbWF0cml4KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZU1hdHJpeDMoR0RJUENPTlNUIEdwUmVjdEYgKnJlY3QsIEdESVBDT05TVCBHcFBvaW50RiAqZHN0cGxnLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BNYXRyaXggKiptYXRyaXgpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlTWF0cml4M0koR0RJUENPTlNUIEdwUmVjdCAqcmVjdCwgR0RJUENPTlNUIEdwUG9pbnQgKmRzdHBsZywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeCAqKm1hdHJpeCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDbG9uZU1hdHJpeChHcE1hdHJpeCAqbWF0cml4LCBHcE1hdHJpeCAqKmNsb25lTWF0cml4KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERlbGV0ZU1hdHJpeChHcE1hdHJpeCAqbWF0cml4KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldE1hdHJpeEVsZW1lbnRzKEdwTWF0cml4ICptYXRyaXgsIFJFQUwgbTExLCBSRUFMIG0xMiwgUkVBTCBtMjEsIFJFQUwgbTIyLA0KLSAgICAgICAgICAgICAgICAgICAgICBSRUFMIGR4LCBSRUFMIGR5KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcE11bHRpcGx5TWF0cml4KEdwTWF0cml4ICptYXRyaXgsIEdwTWF0cml4KiBtYXRyaXgyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeE9yZGVyIG9yZGVyKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFRyYW5zbGF0ZU1hdHJpeChHcE1hdHJpeCAqbWF0cml4LCBSRUFMIG9mZnNldFgsIFJFQUwgb2Zmc2V0WSwNCi0gICAgICAgICAgICAgICAgICAgIEdwTWF0cml4T3JkZXIgb3JkZXIpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2NhbGVNYXRyaXgoR3BNYXRyaXggKm1hdHJpeCwgUkVBTCBzY2FsZVgsIFJFQUwgc2NhbGVZLA0KLSAgICAgICAgICAgICAgICBHcE1hdHJpeE9yZGVyIG9yZGVyKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFJvdGF0ZU1hdHJpeChHcE1hdHJpeCAqbWF0cml4LCBSRUFMIGFuZ2xlLCBHcE1hdHJpeE9yZGVyIG9yZGVyKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNoZWFyTWF0cml4KEdwTWF0cml4ICptYXRyaXgsIFJFQUwgc2hlYXJYLCBSRUFMIHNoZWFyWSwNCi0gICAgICAgICAgICAgICAgR3BNYXRyaXhPcmRlciBvcmRlcik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBJbnZlcnRNYXRyaXgoR3BNYXRyaXggKm1hdHJpeCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBUcmFuc2Zvcm1NYXRyaXhQb2ludHMoR3BNYXRyaXggKm1hdHJpeCwgR3BQb2ludEYgKnB0cywgSU5UIGNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFRyYW5zZm9ybU1hdHJpeFBvaW50c0koR3BNYXRyaXggKm1hdHJpeCwgR3BQb2ludCAqcHRzLCBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwVmVjdG9yVHJhbnNmb3JtTWF0cml4UG9pbnRzKEdwTWF0cml4ICptYXRyaXgsIEdwUG9pbnRGICpwdHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwVmVjdG9yVHJhbnNmb3JtTWF0cml4UG9pbnRzSShHcE1hdHJpeCAqbWF0cml4LCBHcFBvaW50ICpwdHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0TWF0cml4RWxlbWVudHMoR0RJUENPTlNUIEdwTWF0cml4ICptYXRyaXgsIFJFQUwgKm1hdHJpeE91dCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBJc01hdHJpeEludmVydGlibGUoR0RJUENPTlNUIEdwTWF0cml4ICptYXRyaXgsIEJPT0wgKnJlc3VsdCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBJc01hdHJpeElkZW50aXR5KEdESVBDT05TVCBHcE1hdHJpeCAqbWF0cml4LCBCT09MICpyZXN1bHQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwSXNNYXRyaXhFcXVhbChHRElQQ09OU1QgR3BNYXRyaXggKm1hdHJpeCwgR0RJUENPTlNUIEdwTWF0cml4ICptYXRyaXgyLCBCT09MICpyZXN1bHQpOw0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIFJlZ2lvbiBtZXRob2RzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDcmVhdGVSZWdpb24oR3BSZWdpb24gKipyZWdpb24pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlUmVnaW9uUmVjdChHRElQQ09OU1QgR3BSZWN0RiAqcmVjdCwgR3BSZWdpb24gKipyZWdpb24pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlUmVnaW9uUmVjdEkoR0RJUENPTlNUIEdwUmVjdCAqcmVjdCwgR3BSZWdpb24gKipyZWdpb24pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlUmVnaW9uUGF0aChHcFBhdGggKnBhdGgsIEdwUmVnaW9uICoqcmVnaW9uKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZVJlZ2lvblJnbkRhdGEoR0RJUENPTlNUIEJZVEUgKnJlZ2lvbkRhdGEsIElOVCBzaXplLCBHcFJlZ2lvbiAqKnJlZ2lvbik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDcmVhdGVSZWdpb25IcmduKEhSR04gaFJnbiwgR3BSZWdpb24gKipyZWdpb24pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ2xvbmVSZWdpb24oR3BSZWdpb24gKnJlZ2lvbiwgR3BSZWdpb24gKipjbG9uZVJlZ2lvbik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBEZWxldGVSZWdpb24oR3BSZWdpb24gKnJlZ2lvbik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRJbmZpbml0ZShHcFJlZ2lvbiAqcmVnaW9uKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldEVtcHR5KEdwUmVnaW9uICpyZWdpb24pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ29tYmluZVJlZ2lvblJlY3QoR3BSZWdpb24gKnJlZ2lvbiwgR0RJUENPTlNUIEdwUmVjdEYgKnJlY3QsDQotICAgICAgICAgICAgICAgICAgICAgIENvbWJpbmVNb2RlIGNvbWJpbmVNb2RlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENvbWJpbmVSZWdpb25SZWN0SShHcFJlZ2lvbiAqcmVnaW9uLCBHRElQQ09OU1QgR3BSZWN0ICpyZWN0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgQ29tYmluZU1vZGUgY29tYmluZU1vZGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ29tYmluZVJlZ2lvblBhdGgoR3BSZWdpb24gKnJlZ2lvbiwgR3BQYXRoICpwYXRoLCBDb21iaW5lTW9kZSBjb21iaW5lTW9kZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDb21iaW5lUmVnaW9uUmVnaW9uKEdwUmVnaW9uICpyZWdpb24sICBHcFJlZ2lvbiAqcmVnaW9uMiwNCi0gICAgICAgICAgICAgICAgICAgICAgICBDb21iaW5lTW9kZSBjb21iaW5lTW9kZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBUcmFuc2xhdGVSZWdpb24oR3BSZWdpb24gKnJlZ2lvbiwgUkVBTCBkeCwgUkVBTCBkeSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBUcmFuc2xhdGVSZWdpb25JKEdwUmVnaW9uICpyZWdpb24sIElOVCBkeCwgSU5UIGR5KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFRyYW5zZm9ybVJlZ2lvbihHcFJlZ2lvbiAqcmVnaW9uLCBHcE1hdHJpeCAqbWF0cml4KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFJlZ2lvbkJvdW5kcyhHcFJlZ2lvbiAqcmVnaW9uLCBHcEdyYXBoaWNzICpncmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwUmVjdEYgKnJlY3QpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0UmVnaW9uQm91bmRzSShHcFJlZ2lvbiAqcmVnaW9uLCBHcEdyYXBoaWNzICpncmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwUmVjdCAqcmVjdCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRSZWdpb25IUmduKEdwUmVnaW9uICpyZWdpb24sIEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBIUkdOICpoUmduKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcElzRW1wdHlSZWdpb24oR3BSZWdpb24gKnJlZ2lvbiwgR3BHcmFwaGljcyAqZ3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqcmVzdWx0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcElzSW5maW5pdGVSZWdpb24oR3BSZWdpb24gKnJlZ2lvbiwgR3BHcmFwaGljcyAqZ3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqcmVzdWx0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcElzRXF1YWxSZWdpb24oR3BSZWdpb24gKnJlZ2lvbiwgR3BSZWdpb24gKnJlZ2lvbjIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEJPT0wgKnJlc3VsdCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRSZWdpb25EYXRhU2l6ZShHcFJlZ2lvbiAqcmVnaW9uLCBVSU5UICogYnVmZmVyU2l6ZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRSZWdpb25EYXRhKEdwUmVnaW9uICpyZWdpb24sIEJZVEUgKiBidWZmZXIsIFVJTlQgYnVmZmVyU2l6ZSwgVUlOVCAqIHNpemVGaWxsZWQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwSXNWaXNpYmxlUmVnaW9uUG9pbnQoR3BSZWdpb24gKnJlZ2lvbiwgUkVBTCB4LCBSRUFMIHksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBCT09MICpyZXN1bHQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwSXNWaXNpYmxlUmVnaW9uUG9pbnRJKEdwUmVnaW9uICpyZWdpb24sIElOVCB4LCBJTlQgeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEJPT0wgKnJlc3VsdCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBJc1Zpc2libGVSZWdpb25SZWN0KEdwUmVnaW9uICpyZWdpb24sIFJFQUwgeCwgUkVBTCB5LCBSRUFMIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgaGVpZ2h0LCBHcEdyYXBoaWNzICpncmFwaGljcywgQk9PTCAqcmVzdWx0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcElzVmlzaWJsZVJlZ2lvblJlY3RJKEdwUmVnaW9uICpyZWdpb24sIElOVCB4LCBJTlQgeSwgSU5UIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgaGVpZ2h0LCBHcEdyYXBoaWNzICpncmFwaGljcywgQk9PTCAqcmVzdWx0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFJlZ2lvblNjYW5zQ291bnQoR3BSZWdpb24gKnJlZ2lvbiwgVUlOVCogY291bnQsIEdwTWF0cml4KiBtYXRyaXgpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0UmVnaW9uU2NhbnMoR3BSZWdpb24gKnJlZ2lvbiwgR3BSZWN0RiogcmVjdHMsIElOVCogY291bnQsIEdwTWF0cml4KiBtYXRyaXgpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0UmVnaW9uU2NhbnNJKEdwUmVnaW9uICpyZWdpb24sIEdwUmVjdCogcmVjdHMsIElOVCogY291bnQsIEdwTWF0cml4KiBtYXRyaXgpOw0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEJydXNoIG1ldGhvZHMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENsb25lQnJ1c2goR3BCcnVzaCAqYnJ1c2gsIEdwQnJ1c2ggKipjbG9uZUJydXNoKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERlbGV0ZUJydXNoKEdwQnJ1c2ggKmJydXNoKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldEJydXNoVHlwZShHcEJydXNoICpicnVzaCwgR3BCcnVzaFR5cGUgKnR5cGUpOw0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEhhdGNoIEJydXNoIG1ldGhvZHMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZUhhdGNoQnJ1c2goR3BIYXRjaFN0eWxlIGhhdGNoc3R5bGUsIEFSR0IgZm9yZWNvbCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUkdCIGJhY2tjb2wsIEdwSGF0Y2ggKipicnVzaCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRIYXRjaFN0eWxlKEdwSGF0Y2ggKmJydXNoLCBHcEhhdGNoU3R5bGUgKmhhdGNoc3R5bGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0SGF0Y2hGb3JlZ3JvdW5kQ29sb3IoR3BIYXRjaCAqYnJ1c2gsIEFSR0IqIGZvcmVjb2wpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0SGF0Y2hCYWNrZ3JvdW5kQ29sb3IoR3BIYXRjaCAqYnJ1c2gsIEFSR0IqIGJhY2tjb2wpOw0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIFRleHR1cmUgQnJ1c2ggbWV0aG9kcw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlVGV4dHVyZShHcEltYWdlICppbWFnZSwgR3BXcmFwTW9kZSB3cmFwbW9kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBHcFRleHR1cmUgKip0ZXh0dXJlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZVRleHR1cmUyKEdwSW1hZ2UgKmltYWdlLCBHcFdyYXBNb2RlIHdyYXBtb2RlLCBSRUFMIHgsDQotICAgICAgICAgICAgICAgICAgIFJFQUwgeSwgUkVBTCB3aWR0aCwgUkVBTCBoZWlnaHQsIEdwVGV4dHVyZSAqKnRleHR1cmUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlVGV4dHVyZUlBKEdwSW1hZ2UgKmltYWdlLCBHRElQQ09OU1QgR3BJbWFnZUF0dHJpYnV0ZXMgKmltYWdlQXR0cmlidXRlcywNCi0gICAgICAgICAgICAgICAgICAgIFJFQUwgeCwgUkVBTCB5LCBSRUFMIHdpZHRoLCBSRUFMIGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgIEdwVGV4dHVyZSAqKnRleHR1cmUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlVGV4dHVyZTJJKEdwSW1hZ2UgKmltYWdlLCBHcFdyYXBNb2RlIHdyYXBtb2RlLCBJTlQgeCwNCi0gICAgICAgICAgICAgICAgICAgIElOVCB5LCBJTlQgd2lkdGgsIElOVCBoZWlnaHQsIEdwVGV4dHVyZSAqKnRleHR1cmUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlVGV4dHVyZUlBSShHcEltYWdlICppbWFnZSwgR0RJUENPTlNUIEdwSW1hZ2VBdHRyaWJ1dGVzICppbWFnZUF0dHJpYnV0ZXMsDQotICAgICAgICAgICAgICAgICAgICAgSU5UIHgsIElOVCB5LCBJTlQgd2lkdGgsIElOVCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgR3BUZXh0dXJlICoqdGV4dHVyZSk7DQotDQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRUZXh0dXJlVHJhbnNmb3JtKEdwVGV4dHVyZSAqYnJ1c2gsIEdwTWF0cml4ICptYXRyaXgpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0VGV4dHVyZVRyYW5zZm9ybShHcFRleHR1cmUgKmJydXNoLCBHRElQQ09OU1QgR3BNYXRyaXggKm1hdHJpeCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBSZXNldFRleHR1cmVUcmFuc2Zvcm0oR3BUZXh0dXJlKiBicnVzaCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBNdWx0aXBseVRleHR1cmVUcmFuc2Zvcm0oR3BUZXh0dXJlKiBicnVzaCwgR0RJUENPTlNUIEdwTWF0cml4ICptYXRyaXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwTWF0cml4T3JkZXIgb3JkZXIpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwVHJhbnNsYXRlVGV4dHVyZVRyYW5zZm9ybShHcFRleHR1cmUqIGJydXNoLCBSRUFMIGR4LCBSRUFMIGR5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeE9yZGVyIG9yZGVyKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNjYWxlVGV4dHVyZVRyYW5zZm9ybShHcFRleHR1cmUqIGJydXNoLCBSRUFMIHN4LCBSRUFMIHN5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeE9yZGVyIG9yZGVyKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFJvdGF0ZVRleHR1cmVUcmFuc2Zvcm0oR3BUZXh0dXJlKiBicnVzaCwgUkVBTCBhbmdsZSwgR3BNYXRyaXhPcmRlciBvcmRlcik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRUZXh0dXJlV3JhcE1vZGUoR3BUZXh0dXJlICpicnVzaCwgR3BXcmFwTW9kZSB3cmFwbW9kZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRUZXh0dXJlV3JhcE1vZGUoR3BUZXh0dXJlICpicnVzaCwgR3BXcmFwTW9kZSAqd3JhcG1vZGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0VGV4dHVyZUltYWdlKEdwVGV4dHVyZSAqYnJ1c2gsIEdwSW1hZ2UgKippbWFnZSk7DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gU29saWQgQnJ1c2ggbWV0aG9kcw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlU29saWRGaWxsKEFSR0IgY29sb3IsIEdwU29saWRGaWxsICoqYnJ1c2gpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0U29saWRGaWxsQ29sb3IoR3BTb2xpZEZpbGwgKmJydXNoLCBBUkdCIGNvbG9yKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFNvbGlkRmlsbENvbG9yKEdwU29saWRGaWxsICpicnVzaCwgQVJHQiAqY29sb3IpOw0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIExpbmVCcnVzaCBtZXRob2RzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDcmVhdGVMaW5lQnJ1c2goR0RJUENPTlNUIEdwUG9pbnRGKiBwb2ludDEsDQotICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BQb2ludEYqIHBvaW50MiwNCi0gICAgICAgICAgICAgICAgICAgIEFSR0IgY29sb3IxLCBBUkdCIGNvbG9yMiwNCi0gICAgICAgICAgICAgICAgICAgIEdwV3JhcE1vZGUgd3JhcE1vZGUsDQotICAgICAgICAgICAgICAgICAgICBHcExpbmVHcmFkaWVudCAqKmxpbmVHcmFkaWVudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDcmVhdGVMaW5lQnJ1c2hJKEdESVBDT05TVCBHcFBvaW50KiBwb2ludDEsDQotICAgICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIEdwUG9pbnQqIHBvaW50MiwNCi0gICAgICAgICAgICAgICAgICAgICBBUkdCIGNvbG9yMSwgQVJHQiBjb2xvcjIsDQotICAgICAgICAgICAgICAgICAgICAgR3BXcmFwTW9kZSB3cmFwTW9kZSwNCi0gICAgICAgICAgICAgICAgICAgICBHcExpbmVHcmFkaWVudCAqKmxpbmVHcmFkaWVudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDcmVhdGVMaW5lQnJ1c2hGcm9tUmVjdChHRElQQ09OU1QgR3BSZWN0RiogcmVjdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJHQiBjb2xvcjEsIEFSR0IgY29sb3IyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lYXJHcmFkaWVudE1vZGUgbW9kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BXcmFwTW9kZSB3cmFwTW9kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BMaW5lR3JhZGllbnQgKipsaW5lR3JhZGllbnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlTGluZUJydXNoRnJvbVJlY3RJKEdESVBDT05TVCBHcFJlY3QqIHJlY3QsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUkdCIGNvbG9yMSwgQVJHQiBjb2xvcjIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5lYXJHcmFkaWVudE1vZGUgbW9kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwV3JhcE1vZGUgd3JhcE1vZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcExpbmVHcmFkaWVudCAqKmxpbmVHcmFkaWVudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDcmVhdGVMaW5lQnJ1c2hGcm9tUmVjdFdpdGhBbmdsZShHRElQQ09OU1QgR3BSZWN0RiogcmVjdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJHQiBjb2xvcjEsIEFSR0IgY29sb3IyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMIGFuZ2xlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MIGlzQW5nbGVTY2FsYWJsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BXcmFwTW9kZSB3cmFwTW9kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BMaW5lR3JhZGllbnQgKipsaW5lR3JhZGllbnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlTGluZUJydXNoRnJvbVJlY3RXaXRoQW5nbGVJKEdESVBDT05TVCBHcFJlY3QqIHJlY3QsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSR0IgY29sb3IxLCBBUkdCIGNvbG9yMiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCBhbmdsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCBpc0FuZ2xlU2NhbGFibGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwV3JhcE1vZGUgd3JhcE1vZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwTGluZUdyYWRpZW50ICoqbGluZUdyYWRpZW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldExpbmVQb2ludHMoR3BMaW5lR3JhZGllbnQgKmJydXNoLA0KLSAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcFBvaW50RiogcG9pbnQxLA0KLSAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcFBvaW50RiogcG9pbnQyKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldExpbmVQb2ludHNJKEdwTGluZUdyYWRpZW50ICpicnVzaCwNCi0gICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIEdwUG9pbnQqIHBvaW50MSwNCi0gICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIEdwUG9pbnQqIHBvaW50Mik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRMaW5lUG9pbnRzKEdwTGluZUdyYWRpZW50ICpicnVzaCwgR3BQb2ludEYqIHBvaW50cyk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRMaW5lUG9pbnRzSShHcExpbmVHcmFkaWVudCAqYnJ1c2gsIEdwUG9pbnQqIHBvaW50cyk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRMaW5lQ29sb3JzKEdwTGluZUdyYWRpZW50ICpicnVzaCwgQVJHQiBjb2xvcjEsIEFSR0IgY29sb3IyKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldExpbmVDb2xvcnMoR3BMaW5lR3JhZGllbnQgKmJydXNoLCBBUkdCKiBjb2xvcnMpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0TGluZVJlY3QoR3BMaW5lR3JhZGllbnQgKmJydXNoLCBHcFJlY3RGICpyZWN0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldExpbmVSZWN0SShHcExpbmVHcmFkaWVudCAqYnJ1c2gsIEdwUmVjdCAqcmVjdCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRMaW5lR2FtbWFDb3JyZWN0aW9uKEdwTGluZUdyYWRpZW50ICpicnVzaCwgQk9PTCB1c2VHYW1tYUNvcnJlY3Rpb24pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0TGluZUdhbW1hQ29ycmVjdGlvbihHcExpbmVHcmFkaWVudCAqYnJ1c2gsIEJPT0wgKnVzZUdhbW1hQ29ycmVjdGlvbik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRMaW5lQmxlbmRDb3VudChHcExpbmVHcmFkaWVudCAqYnJ1c2gsIElOVCAqY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0TGluZUJsZW5kKEdwTGluZUdyYWRpZW50ICpicnVzaCwgUkVBTCAqYmxlbmQsIFJFQUwqIHBvc2l0aW9ucywNCi0gICAgICAgICAgICAgICAgIElOVCBjb3VudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRMaW5lQmxlbmQoR3BMaW5lR3JhZGllbnQgKmJydXNoLCBHRElQQ09OU1QgUkVBTCAqYmxlbmQsDQotICAgICAgICAgICAgICAgICBHRElQQ09OU1QgUkVBTCogcG9zaXRpb25zLCBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0TGluZVByZXNldEJsZW5kQ291bnQoR3BMaW5lR3JhZGllbnQgKmJydXNoLCBJTlQgKmNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldExpbmVQcmVzZXRCbGVuZChHcExpbmVHcmFkaWVudCAqYnJ1c2gsIEFSR0IgKmJsZW5kLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMKiBwb3NpdGlvbnMsIElOVCBjb3VudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRMaW5lUHJlc2V0QmxlbmQoR3BMaW5lR3JhZGllbnQgKmJydXNoLCBHRElQQ09OU1QgQVJHQiAqYmxlbmQsDQotICAgICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgUkVBTCogcG9zaXRpb25zLCBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0TGluZVNpZ21hQmxlbmQoR3BMaW5lR3JhZGllbnQgKmJydXNoLCBSRUFMIGZvY3VzLCBSRUFMIHNjYWxlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldExpbmVMaW5lYXJCbGVuZChHcExpbmVHcmFkaWVudCAqYnJ1c2gsIFJFQUwgZm9jdXMsIFJFQUwgc2NhbGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0TGluZVdyYXBNb2RlKEdwTGluZUdyYWRpZW50ICpicnVzaCwgR3BXcmFwTW9kZSB3cmFwbW9kZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRMaW5lV3JhcE1vZGUoR3BMaW5lR3JhZGllbnQgKmJydXNoLCBHcFdyYXBNb2RlICp3cmFwbW9kZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRMaW5lVHJhbnNmb3JtKEdwTGluZUdyYWRpZW50ICpicnVzaCwgR3BNYXRyaXggKm1hdHJpeCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRMaW5lVHJhbnNmb3JtKEdwTGluZUdyYWRpZW50ICpicnVzaCwgR0RJUENPTlNUIEdwTWF0cml4ICptYXRyaXgpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwUmVzZXRMaW5lVHJhbnNmb3JtKEdwTGluZUdyYWRpZW50KiBicnVzaCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBNdWx0aXBseUxpbmVUcmFuc2Zvcm0oR3BMaW5lR3JhZGllbnQqIGJydXNoLCBHRElQQ09OU1QgR3BNYXRyaXggKm1hdHJpeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BNYXRyaXhPcmRlciBvcmRlcik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBUcmFuc2xhdGVMaW5lVHJhbnNmb3JtKEdwTGluZUdyYWRpZW50KiBicnVzaCwgUkVBTCBkeCwgUkVBTCBkeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BNYXRyaXhPcmRlciBvcmRlcik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTY2FsZUxpbmVUcmFuc2Zvcm0oR3BMaW5lR3JhZGllbnQqIGJydXNoLCBSRUFMIHN4LCBSRUFMIHN5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeE9yZGVyIG9yZGVyKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFJvdGF0ZUxpbmVUcmFuc2Zvcm0oR3BMaW5lR3JhZGllbnQqIGJydXNoLCBSRUFMIGFuZ2xlLCBHcE1hdHJpeE9yZGVyIG9yZGVyKTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBQYXRoR3JhZGllbnQgQnJ1c2gNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZVBhdGhHcmFkaWVudChHRElQQ09OU1QgR3BQb2ludEYqIHBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgY291bnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BXcmFwTW9kZSB3cmFwTW9kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcFBhdGhHcmFkaWVudCAqKnBvbHlHcmFkaWVudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDcmVhdGVQYXRoR3JhZGllbnRJKEdESVBDT05TVCBHcFBvaW50KiBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGNvdW50LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwV3JhcE1vZGUgd3JhcE1vZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BQYXRoR3JhZGllbnQgKipwb2x5R3JhZGllbnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlUGF0aEdyYWRpZW50RnJvbVBhdGgoR0RJUENPTlNUIEdwUGF0aCogcGF0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcFBhdGhHcmFkaWVudCAqKnBvbHlHcmFkaWVudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRQYXRoR3JhZGllbnRDZW50ZXJDb2xvcigNCi0gICAgICAgICAgICAgICAgICAgICAgICBHcFBhdGhHcmFkaWVudCAqYnJ1c2gsIEFSR0IqIGNvbG9ycyk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRQYXRoR3JhZGllbnRDZW50ZXJDb2xvcigNCi0gICAgICAgICAgICAgICAgICAgICAgICBHcFBhdGhHcmFkaWVudCAqYnJ1c2gsIEFSR0IgY29sb3JzKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFBhdGhHcmFkaWVudFN1cnJvdW5kQ29sb3JzV2l0aENvdW50KA0KLSAgICAgICAgICAgICAgICAgICAgICAgIEdwUGF0aEdyYWRpZW50ICpicnVzaCwgQVJHQiogY29sb3IsIElOVCogY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0UGF0aEdyYWRpZW50U3Vycm91bmRDb2xvcnNXaXRoQ291bnQoDQotICAgICAgICAgICAgICAgICAgICAgICAgR3BQYXRoR3JhZGllbnQgKmJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBBUkdCKiBjb2xvciwgSU5UKiBjb3VudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRQYXRoR3JhZGllbnRQYXRoKEdwUGF0aEdyYWRpZW50ICpicnVzaCwgR3BQYXRoICpwYXRoKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldFBhdGhHcmFkaWVudFBhdGgoR3BQYXRoR3JhZGllbnQgKmJydXNoLCBHRElQQ09OU1QgR3BQYXRoICpwYXRoKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFBhdGhHcmFkaWVudENlbnRlclBvaW50KA0KLSAgICAgICAgICAgICAgICAgICAgICAgIEdwUGF0aEdyYWRpZW50ICpicnVzaCwgR3BQb2ludEYqIHBvaW50cyk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRQYXRoR3JhZGllbnRDZW50ZXJQb2ludEkoDQotICAgICAgICAgICAgICAgICAgICAgICAgR3BQYXRoR3JhZGllbnQgKmJydXNoLCBHcFBvaW50KiBwb2ludHMpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0UGF0aEdyYWRpZW50Q2VudGVyUG9pbnQoDQotICAgICAgICAgICAgICAgICAgICAgICAgR3BQYXRoR3JhZGllbnQgKmJydXNoLCBHRElQQ09OU1QgR3BQb2ludEYqIHBvaW50cyk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRQYXRoR3JhZGllbnRDZW50ZXJQb2ludEkoDQotICAgICAgICAgICAgICAgICAgICAgICAgR3BQYXRoR3JhZGllbnQgKmJydXNoLCBHRElQQ09OU1QgR3BQb2ludCogcG9pbnRzKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFBhdGhHcmFkaWVudFJlY3QoR3BQYXRoR3JhZGllbnQgKmJydXNoLCBHcFJlY3RGICpyZWN0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFBhdGhHcmFkaWVudFJlY3RJKEdwUGF0aEdyYWRpZW50ICpicnVzaCwgR3BSZWN0ICpyZWN0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFBhdGhHcmFkaWVudFBvaW50Q291bnQoR3BQYXRoR3JhZGllbnQgKmJydXNoLCBJTlQqIGNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFBhdGhHcmFkaWVudFN1cnJvdW5kQ29sb3JDb3VudChHcFBhdGhHcmFkaWVudCAqYnJ1c2gsIElOVCogY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0UGF0aEdyYWRpZW50R2FtbWFDb3JyZWN0aW9uKEdwUGF0aEdyYWRpZW50ICpicnVzaCwgQk9PTCB1c2VHYW1tYUNvcnJlY3Rpb24pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0UGF0aEdyYWRpZW50R2FtbWFDb3JyZWN0aW9uKEdwUGF0aEdyYWRpZW50ICpicnVzaCwgQk9PTCAqdXNlR2FtbWFDb3JyZWN0aW9uKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFBhdGhHcmFkaWVudEJsZW5kQ291bnQoR3BQYXRoR3JhZGllbnQgKmJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCAqY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0UGF0aEdyYWRpZW50QmxlbmQoR3BQYXRoR3JhZGllbnQgKmJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgKmJsZW5kLCBSRUFMICpwb3NpdGlvbnMsIElOVCBjb3VudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRQYXRoR3JhZGllbnRCbGVuZChHcFBhdGhHcmFkaWVudCAqYnJ1c2gsDQotICAgICAgICAgICAgICAgIEdESVBDT05TVCBSRUFMICpibGVuZCwgR0RJUENPTlNUIFJFQUwgKnBvc2l0aW9ucywgSU5UIGNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFBhdGhHcmFkaWVudFByZXNldEJsZW5kQ291bnQoR3BQYXRoR3JhZGllbnQgKmJydXNoLCBJTlQgKmNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFBhdGhHcmFkaWVudFByZXNldEJsZW5kKEdwUGF0aEdyYWRpZW50ICpicnVzaCwgQVJHQiAqYmxlbmQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCogcG9zaXRpb25zLCBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0UGF0aEdyYWRpZW50UHJlc2V0QmxlbmQoR3BQYXRoR3JhZGllbnQgKmJydXNoLCBHRElQQ09OU1QgQVJHQiAqYmxlbmQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBSRUFMKiBwb3NpdGlvbnMsIElOVCBjb3VudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRQYXRoR3JhZGllbnRTaWdtYUJsZW5kKEdwUGF0aEdyYWRpZW50ICpicnVzaCwgUkVBTCBmb2N1cywgUkVBTCBzY2FsZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRQYXRoR3JhZGllbnRMaW5lYXJCbGVuZChHcFBhdGhHcmFkaWVudCAqYnJ1c2gsIFJFQUwgZm9jdXMsIFJFQUwgc2NhbGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0UGF0aEdyYWRpZW50V3JhcE1vZGUoR3BQYXRoR3JhZGllbnQgKmJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BXcmFwTW9kZSAqd3JhcG1vZGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0UGF0aEdyYWRpZW50V3JhcE1vZGUoR3BQYXRoR3JhZGllbnQgKmJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BXcmFwTW9kZSB3cmFwbW9kZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRQYXRoR3JhZGllbnRUcmFuc2Zvcm0oR3BQYXRoR3JhZGllbnQgKmJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwTWF0cml4ICptYXRyaXgpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0UGF0aEdyYWRpZW50VHJhbnNmb3JtKEdwUGF0aEdyYWRpZW50ICpicnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeCAqbWF0cml4KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFJlc2V0UGF0aEdyYWRpZW50VHJhbnNmb3JtKEdwUGF0aEdyYWRpZW50KiBicnVzaCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBNdWx0aXBseVBhdGhHcmFkaWVudFRyYW5zZm9ybShHcFBhdGhHcmFkaWVudCogYnJ1c2gsIEdESVBDT05TVCBHcE1hdHJpeCAqbWF0cml4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeE9yZGVyIG9yZGVyKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFRyYW5zbGF0ZVBhdGhHcmFkaWVudFRyYW5zZm9ybShHcFBhdGhHcmFkaWVudCogYnJ1c2gsIFJFQUwgZHgsIFJFQUwgZHksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwTWF0cml4T3JkZXIgb3JkZXIpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2NhbGVQYXRoR3JhZGllbnRUcmFuc2Zvcm0oR3BQYXRoR3JhZGllbnQqIGJydXNoLCBSRUFMIHN4LCBSRUFMIHN5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeE9yZGVyIG9yZGVyKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFJvdGF0ZVBhdGhHcmFkaWVudFRyYW5zZm9ybShHcFBhdGhHcmFkaWVudCogYnJ1c2gsIFJFQUwgYW5nbGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwTWF0cml4T3JkZXIgb3JkZXIpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0UGF0aEdyYWRpZW50Rm9jdXNTY2FsZXMoR3BQYXRoR3JhZGllbnQgKmJydXNoLCBSRUFMKiB4U2NhbGUsIFJFQUwqIHlTY2FsZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRQYXRoR3JhZGllbnRGb2N1c1NjYWxlcyhHcFBhdGhHcmFkaWVudCAqYnJ1c2gsIFJFQUwgeFNjYWxlLCBSRUFMIHlTY2FsZSk7DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gUGVuIG1ldGhvZHMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZVBlbjEoQVJHQiBjb2xvciwgUkVBTCB3aWR0aCwgR3BVbml0IHVuaXQsIEdwUGVuICoqcGVuKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZVBlbjIoR3BCcnVzaCAqYnJ1c2gsIFJFQUwgd2lkdGgsIEdwVW5pdCB1bml0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgIEdwUGVuICoqcGVuKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENsb25lUGVuKEdwUGVuICpwZW4sIEdwUGVuICoqY2xvbmVwZW4pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRGVsZXRlUGVuKEdwUGVuICpwZW4pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0UGVuV2lkdGgoR3BQZW4gKnBlbiwgUkVBTCB3aWR0aCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRQZW5XaWR0aChHcFBlbiAqcGVuLCBSRUFMICp3aWR0aCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRQZW5Vbml0KEdwUGVuICpwZW4sIEdwVW5pdCB1bml0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFBlblVuaXQoR3BQZW4gKnBlbiwgR3BVbml0ICp1bml0KTsNCi0NCi0jaWZkZWYgRENSX1VTRV9ORVdfMTk3ODE5DQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRQZW5MaW5lQ2FwMTk3ODE5KEdwUGVuICpwZW4sIEdwTGluZUNhcCBzdGFydENhcCwgR3BMaW5lQ2FwIGVuZENhcCwNCi0gICAgICAgICAgICAgICAgICBHcERhc2hDYXAgZGFzaENhcCk7DQotI2Vsc2UNCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldFBlbkxpbmVDYXAoR3BQZW4gKnBlbiwgR3BMaW5lQ2FwIHN0YXJ0Q2FwLCBHcExpbmVDYXAgZW5kQ2FwLA0KLSAgICAgICAgICAgICAgICAgIEdwTGluZUNhcCBkYXNoQ2FwKTsNCi0jZW5kaWYgLy8gRENSX1VTRV9ORVdfMTk3ODE5DQotDQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRQZW5TdGFydENhcChHcFBlbiAqcGVuLCBHcExpbmVDYXAgc3RhcnRDYXApOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0UGVuRW5kQ2FwKEdwUGVuICpwZW4sIEdwTGluZUNhcCBlbmRDYXApOw0KLQ0KLSNpZmRlZiBEQ1JfVVNFX05FV18xOTc4MTkNCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldFBlbkRhc2hDYXAxOTc4MTkoR3BQZW4gKnBlbiwgR3BEYXNoQ2FwIGRhc2hDYXApOw0KLSNlbHNlDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRQZW5EYXNoQ2FwKEdwUGVuICpwZW4sIEdwTGluZUNhcCBkYXNoQ2FwKTsNCi0jZW5kaWYgLy8gRENSX1VTRV9ORVdfMTk3ODE5DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRQZW5TdGFydENhcChHcFBlbiAqcGVuLCBHcExpbmVDYXAgKnN0YXJ0Q2FwKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFBlbkVuZENhcChHcFBlbiAqcGVuLCBHcExpbmVDYXAgKmVuZENhcCk7DQotDQotI2lmZGVmIERDUl9VU0VfTkVXXzE5NzgxOQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0UGVuRGFzaENhcDE5NzgxOShHcFBlbiAqcGVuLCBHcERhc2hDYXAgKmRhc2hDYXApOw0KLSNlbHNlDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRQZW5EYXNoQ2FwKEdwUGVuICpwZW4sIEdwTGluZUNhcCAqZGFzaENhcCk7DQotI2VuZGlmIC8vIERDUl9VU0VfTkVXXzE5NzgxOQ0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0UGVuTGluZUpvaW4oR3BQZW4gKnBlbiwgR3BMaW5lSm9pbiBsaW5lSm9pbik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRQZW5MaW5lSm9pbihHcFBlbiAqcGVuLCBHcExpbmVKb2luICpsaW5lSm9pbik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRQZW5DdXN0b21TdGFydENhcChHcFBlbiAqcGVuLCBHcEN1c3RvbUxpbmVDYXAqIGN1c3RvbUNhcCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRQZW5DdXN0b21TdGFydENhcChHcFBlbiAqcGVuLCBHcEN1c3RvbUxpbmVDYXAqKiBjdXN0b21DYXApOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0UGVuQ3VzdG9tRW5kQ2FwKEdwUGVuICpwZW4sIEdwQ3VzdG9tTGluZUNhcCogY3VzdG9tQ2FwKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFBlbkN1c3RvbUVuZENhcChHcFBlbiAqcGVuLCBHcEN1c3RvbUxpbmVDYXAqKiBjdXN0b21DYXApOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0UGVuTWl0ZXJMaW1pdChHcFBlbiAqcGVuLCBSRUFMIG1pdGVyTGltaXQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0UGVuTWl0ZXJMaW1pdChHcFBlbiAqcGVuLCBSRUFMICptaXRlckxpbWl0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldFBlbk1vZGUoR3BQZW4gKnBlbiwgR3BQZW5BbGlnbm1lbnQgcGVuTW9kZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRQZW5Nb2RlKEdwUGVuICpwZW4sIEdwUGVuQWxpZ25tZW50ICpwZW5Nb2RlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldFBlblRyYW5zZm9ybShHcFBlbiAqcGVuLCBHcE1hdHJpeCAqbWF0cml4KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFBlblRyYW5zZm9ybShHcFBlbiAqcGVuLCBHcE1hdHJpeCAqbWF0cml4KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFJlc2V0UGVuVHJhbnNmb3JtKEdwUGVuICpwZW4pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwTXVsdGlwbHlQZW5UcmFuc2Zvcm0oR3BQZW4gKnBlbiwgR0RJUENPTlNUIEdwTWF0cml4ICptYXRyaXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BNYXRyaXhPcmRlciBvcmRlcik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBUcmFuc2xhdGVQZW5UcmFuc2Zvcm0oR3BQZW4gKnBlbiwgUkVBTCBkeCwgUkVBTCBkeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BNYXRyaXhPcmRlciBvcmRlcik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTY2FsZVBlblRyYW5zZm9ybShHcFBlbiAqcGVuLCBSRUFMIHN4LCBSRUFMIHN5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeE9yZGVyIG9yZGVyKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFJvdGF0ZVBlblRyYW5zZm9ybShHcFBlbiAqcGVuLCBSRUFMIGFuZ2xlLCBHcE1hdHJpeE9yZGVyIG9yZGVyKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldFBlbkNvbG9yKEdwUGVuICpwZW4sIEFSR0IgYXJnYik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRQZW5Db2xvcihHcFBlbiAqcGVuLCBBUkdCICphcmdiKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldFBlbkJydXNoRmlsbChHcFBlbiAqcGVuLCBHcEJydXNoICpicnVzaCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRQZW5CcnVzaEZpbGwoR3BQZW4gKnBlbiwgR3BCcnVzaCAqKmJydXNoKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFBlbkZpbGxUeXBlKEdwUGVuICpwZW4sIEdwUGVuVHlwZSogdHlwZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRQZW5EYXNoU3R5bGUoR3BQZW4gKnBlbiwgR3BEYXNoU3R5bGUgKmRhc2hzdHlsZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRQZW5EYXNoU3R5bGUoR3BQZW4gKnBlbiwgR3BEYXNoU3R5bGUgZGFzaHN0eWxlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFBlbkRhc2hPZmZzZXQoR3BQZW4gKnBlbiwgUkVBTCAqb2Zmc2V0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldFBlbkRhc2hPZmZzZXQoR3BQZW4gKnBlbiwgUkVBTCBvZmZzZXQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0UGVuRGFzaENvdW50KEdwUGVuICpwZW4sIElOVCAqY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0UGVuRGFzaEFycmF5KEdwUGVuICpwZW4sIEdESVBDT05TVCBSRUFMICpkYXNoLCBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0UGVuRGFzaEFycmF5KEdwUGVuICpwZW4sIFJFQUwgKmRhc2gsIElOVCBjb3VudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRQZW5Db21wb3VuZENvdW50KEdwUGVuICpwZW4sIElOVCAqY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0UGVuQ29tcG91bmRBcnJheShHcFBlbiAqcGVuLCBHRElQQ09OU1QgUkVBTCAqZGFzaCwgSU5UIGNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFBlbkNvbXBvdW5kQXJyYXkoR3BQZW4gKnBlbiwgUkVBTCAqZGFzaCwgSU5UIGNvdW50KTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBDdXN0b21MaW5lQ2FwIG1ldGhvZHMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZUN1c3RvbUxpbmVDYXAoR3BQYXRoKiBmaWxsUGF0aCwgR3BQYXRoKiBzdHJva2VQYXRoLA0KLSAgIEdwTGluZUNhcCBiYXNlQ2FwLCBSRUFMIGJhc2VJbnNldCwgR3BDdXN0b21MaW5lQ2FwICoqY3VzdG9tQ2FwKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERlbGV0ZUN1c3RvbUxpbmVDYXAoR3BDdXN0b21MaW5lQ2FwKiBjdXN0b21DYXApOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ2xvbmVDdXN0b21MaW5lQ2FwKEdwQ3VzdG9tTGluZUNhcCogY3VzdG9tQ2FwLA0KLSAgICAgICAgICAgICAgICAgICAgICAgR3BDdXN0b21MaW5lQ2FwKiogY2xvbmVkQ2FwKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldEN1c3RvbUxpbmVDYXBUeXBlKEdwQ3VzdG9tTGluZUNhcCogY3VzdG9tQ2FwLA0KLSAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tTGluZUNhcFR5cGUqIGNhcFR5cGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0Q3VzdG9tTGluZUNhcFN0cm9rZUNhcHMoR3BDdXN0b21MaW5lQ2FwKiBjdXN0b21DYXAsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwTGluZUNhcCBzdGFydENhcCwgR3BMaW5lQ2FwIGVuZENhcCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRDdXN0b21MaW5lQ2FwU3Ryb2tlQ2FwcyhHcEN1c3RvbUxpbmVDYXAqIGN1c3RvbUNhcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BMaW5lQ2FwKiBzdGFydENhcCwgR3BMaW5lQ2FwKiBlbmRDYXApOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0Q3VzdG9tTGluZUNhcFN0cm9rZUpvaW4oR3BDdXN0b21MaW5lQ2FwKiBjdXN0b21DYXAsIEdwTGluZUpvaW4gbGluZUpvaW4pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0Q3VzdG9tTGluZUNhcFN0cm9rZUpvaW4oR3BDdXN0b21MaW5lQ2FwKiBjdXN0b21DYXAsIEdwTGluZUpvaW4qIGxpbmVKb2luKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldEN1c3RvbUxpbmVDYXBCYXNlQ2FwKEdwQ3VzdG9tTGluZUNhcCogY3VzdG9tQ2FwLCBHcExpbmVDYXAgYmFzZUNhcCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRDdXN0b21MaW5lQ2FwQmFzZUNhcChHcEN1c3RvbUxpbmVDYXAqIGN1c3RvbUNhcCwgR3BMaW5lQ2FwKiBiYXNlQ2FwKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldEN1c3RvbUxpbmVDYXBCYXNlSW5zZXQoR3BDdXN0b21MaW5lQ2FwKiBjdXN0b21DYXAsIFJFQUwgaW5zZXQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0Q3VzdG9tTGluZUNhcEJhc2VJbnNldChHcEN1c3RvbUxpbmVDYXAqIGN1c3RvbUNhcCwgUkVBTCogaW5zZXQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0Q3VzdG9tTGluZUNhcFdpZHRoU2NhbGUoR3BDdXN0b21MaW5lQ2FwKiBjdXN0b21DYXAsIFJFQUwgd2lkdGhTY2FsZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRDdXN0b21MaW5lQ2FwV2lkdGhTY2FsZShHcEN1c3RvbUxpbmVDYXAqIGN1c3RvbUNhcCwgUkVBTCogd2lkdGhTY2FsZSk7DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gQWRqdXN0YWJsZUFycm93Q2FwIG1ldGhvZHMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZUFkanVzdGFibGVBcnJvd0NhcChSRUFMIGhlaWdodCwgUkVBTCB3aWR0aCwgQk9PTCBpc0ZpbGxlZCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwQWRqdXN0YWJsZUFycm93Q2FwICoqY2FwKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldEFkanVzdGFibGVBcnJvd0NhcEhlaWdodChHcEFkanVzdGFibGVBcnJvd0NhcCogY2FwLCBSRUFMIGhlaWdodCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRBZGp1c3RhYmxlQXJyb3dDYXBIZWlnaHQoR3BBZGp1c3RhYmxlQXJyb3dDYXAqIGNhcCwgUkVBTCogaGVpZ2h0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldEFkanVzdGFibGVBcnJvd0NhcFdpZHRoKEdwQWRqdXN0YWJsZUFycm93Q2FwKiBjYXAsIFJFQUwgd2lkdGgpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0QWRqdXN0YWJsZUFycm93Q2FwV2lkdGgoR3BBZGp1c3RhYmxlQXJyb3dDYXAqIGNhcCwgUkVBTCogd2lkdGgpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0QWRqdXN0YWJsZUFycm93Q2FwTWlkZGxlSW5zZXQoR3BBZGp1c3RhYmxlQXJyb3dDYXAqIGNhcCwgUkVBTCBtaWRkbGVJbnNldCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRBZGp1c3RhYmxlQXJyb3dDYXBNaWRkbGVJbnNldChHcEFkanVzdGFibGVBcnJvd0NhcCogY2FwLCBSRUFMKiBtaWRkbGVJbnNldCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRBZGp1c3RhYmxlQXJyb3dDYXBGaWxsU3RhdGUoR3BBZGp1c3RhYmxlQXJyb3dDYXAqIGNhcCwgQk9PTCBmaWxsU3RhdGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0QWRqdXN0YWJsZUFycm93Q2FwRmlsbFN0YXRlKEdwQWRqdXN0YWJsZUFycm93Q2FwKiBjYXAsIEJPT0wqIGZpbGxTdGF0ZSk7DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gSW1hZ2UgbWV0aG9kcw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwTG9hZEltYWdlRnJvbVN0cmVhbShJU3RyZWFtKiBzdHJlYW0sIEdwSW1hZ2UgKippbWFnZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBMb2FkSW1hZ2VGcm9tRmlsZShHRElQQ09OU1QgV0NIQVIqIGZpbGVuYW1lLCBHcEltYWdlICoqaW1hZ2UpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwTG9hZEltYWdlRnJvbVN0cmVhbUlDTShJU3RyZWFtKiBzdHJlYW0sIEdwSW1hZ2UgKippbWFnZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBMb2FkSW1hZ2VGcm9tRmlsZUlDTShHRElQQ09OU1QgV0NIQVIqIGZpbGVuYW1lLCBHcEltYWdlICoqaW1hZ2UpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ2xvbmVJbWFnZShHcEltYWdlICppbWFnZSwgR3BJbWFnZSAqKmNsb25lSW1hZ2UpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRGlzcG9zZUltYWdlKEdwSW1hZ2UgKmltYWdlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNhdmVJbWFnZVRvRmlsZShHcEltYWdlICppbWFnZSwgR0RJUENPTlNUIFdDSEFSKiBmaWxlbmFtZSwNCi0gICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBDTFNJRCogY2xzaWRFbmNvZGVyLCBHRElQQ09OU1QgRW5jb2RlclBhcmFtZXRlcnMqIGVuY29kZXJQYXJhbXMpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2F2ZUltYWdlVG9TdHJlYW0oR3BJbWFnZSAqaW1hZ2UsIElTdHJlYW0qIHN0cmVhbSwNCi0gICAgICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIENMU0lEKiBjbHNpZEVuY29kZXIsIEdESVBDT05TVCBFbmNvZGVyUGFyYW1ldGVycyogZW5jb2RlclBhcmFtcyk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTYXZlQWRkKEdwSW1hZ2UgKmltYWdlLCBHRElQQ09OU1QgRW5jb2RlclBhcmFtZXRlcnMqIGVuY29kZXJQYXJhbXMpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2F2ZUFkZEltYWdlKEdwSW1hZ2UgKmltYWdlLCBHcEltYWdlKiBuZXdJbWFnZSwNCi0gICAgICAgICAgICAgICAgIEdESVBDT05TVCBFbmNvZGVyUGFyYW1ldGVycyogZW5jb2RlclBhcmFtcyk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRJbWFnZUdyYXBoaWNzQ29udGV4dChHcEltYWdlICppbWFnZSwgR3BHcmFwaGljcyAqKmdyYXBoaWNzKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldEltYWdlQm91bmRzKEdwSW1hZ2UgKmltYWdlLCBHcFJlY3RGICpzcmNSZWN0LCBHcFVuaXQgKnNyY1VuaXQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0SW1hZ2VEaW1lbnNpb24oR3BJbWFnZSAqaW1hZ2UsIFJFQUwgKndpZHRoLCBSRUFMICpoZWlnaHQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0SW1hZ2VUeXBlKEdwSW1hZ2UgKmltYWdlLCBJbWFnZVR5cGUgKnR5cGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0SW1hZ2VXaWR0aChHcEltYWdlICppbWFnZSwgVUlOVCAqd2lkdGgpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0SW1hZ2VIZWlnaHQoR3BJbWFnZSAqaW1hZ2UsIFVJTlQgKmhlaWdodCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRJbWFnZUhvcml6b250YWxSZXNvbHV0aW9uKEdwSW1hZ2UgKmltYWdlLCBSRUFMICpyZXNvbHV0aW9uKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldEltYWdlVmVydGljYWxSZXNvbHV0aW9uKEdwSW1hZ2UgKmltYWdlLCBSRUFMICpyZXNvbHV0aW9uKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldEltYWdlRmxhZ3MoR3BJbWFnZSAqaW1hZ2UsIFVJTlQgKmZsYWdzKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldEltYWdlUmF3Rm9ybWF0KEdwSW1hZ2UgKmltYWdlLCBHVUlEICpmb3JtYXQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0SW1hZ2VQaXhlbEZvcm1hdChHcEltYWdlICppbWFnZSwgUGl4ZWxGb3JtYXQgKmZvcm1hdCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRJbWFnZVRodW1ibmFpbChHcEltYWdlICppbWFnZSwgVUlOVCB0aHVtYldpZHRoLCBVSU5UIHRodW1iSGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICBHcEltYWdlICoqdGh1bWJJbWFnZSwNCi0gICAgICAgICAgICAgICAgICAgICAgR2V0VGh1bWJuYWlsSW1hZ2VBYm9ydCBjYWxsYmFjaywgVk9JRCAqIGNhbGxiYWNrRGF0YSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRFbmNvZGVyUGFyYW1ldGVyTGlzdFNpemUoR3BJbWFnZSAqaW1hZ2UsIEdESVBDT05TVCBDTFNJRCogY2xzaWRFbmNvZGVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVCogc2l6ZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRFbmNvZGVyUGFyYW1ldGVyTGlzdChHcEltYWdlICppbWFnZSwgR0RJUENPTlNUIENMU0lEKiBjbHNpZEVuY29kZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQgc2l6ZSwgRW5jb2RlclBhcmFtZXRlcnMqIGJ1ZmZlcik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBJbWFnZUdldEZyYW1lRGltZW5zaW9uc0NvdW50KEdwSW1hZ2UqIGltYWdlLCBVSU5UKiBjb3VudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBJbWFnZUdldEZyYW1lRGltZW5zaW9uc0xpc3QoR3BJbWFnZSogaW1hZ2UsIEdVSUQqIGRpbWVuc2lvbklEcywgVUlOVCBjb3VudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBJbWFnZUdldEZyYW1lQ291bnQoR3BJbWFnZSAqaW1hZ2UsIEdESVBDT05TVCBHVUlEKiBkaW1lbnNpb25JRCwgVUlOVCogY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwSW1hZ2VTZWxlY3RBY3RpdmVGcmFtZShHcEltYWdlICppbWFnZSwgR0RJUENPTlNUIEdVSUQqIGRpbWVuc2lvbklELA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQgZnJhbWVJbmRleCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBJbWFnZVJvdGF0ZUZsaXAoR3BJbWFnZSAqaW1hZ2UsIFJvdGF0ZUZsaXBUeXBlIHJmVHlwZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRJbWFnZVBhbGV0dGUoR3BJbWFnZSAqaW1hZ2UsIENvbG9yUGFsZXR0ZSAqcGFsZXR0ZSwgSU5UIHNpemUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0SW1hZ2VQYWxldHRlKEdwSW1hZ2UgKmltYWdlLCBHRElQQ09OU1QgQ29sb3JQYWxldHRlICpwYWxldHRlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldEltYWdlUGFsZXR0ZVNpemUoR3BJbWFnZSAqaW1hZ2UsIElOVCAqc2l6ZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRQcm9wZXJ0eUNvdW50KEdwSW1hZ2UgKmltYWdlLCBVSU5UKiBudW1PZlByb3BlcnR5KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFByb3BlcnR5SWRMaXN0KEdwSW1hZ2UgKmltYWdlLCBVSU5UIG51bU9mUHJvcGVydHksIFBST1BJRCogbGlzdCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRQcm9wZXJ0eUl0ZW1TaXplKEdwSW1hZ2UgKmltYWdlLCBQUk9QSUQgcHJvcElkLCBVSU5UKiBzaXplKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFByb3BlcnR5SXRlbShHcEltYWdlICppbWFnZSwgUFJPUElEIHByb3BJZCxVSU5UIHByb3BTaXplLA0KLSAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlJdGVtKiBidWZmZXIpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0UHJvcGVydHlTaXplKEdwSW1hZ2UgKmltYWdlLCBVSU5UKiB0b3RhbEJ1ZmZlclNpemUsIFVJTlQqIG51bVByb3BlcnRpZXMpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0QWxsUHJvcGVydHlJdGVtcyhHcEltYWdlICppbWFnZSwgVUlOVCB0b3RhbEJ1ZmZlclNpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgVUlOVCBudW1Qcm9wZXJ0aWVzLCBQcm9wZXJ0eUl0ZW0qIGFsbEl0ZW1zKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFJlbW92ZVByb3BlcnR5SXRlbShHcEltYWdlICppbWFnZSwgUFJPUElEIHByb3BJZCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRQcm9wZXJ0eUl0ZW0oR3BJbWFnZSAqaW1hZ2UsIEdESVBDT05TVCBQcm9wZXJ0eUl0ZW0qIGl0ZW0pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwSW1hZ2VGb3JjZVZhbGlkYXRpb24oR3BJbWFnZSAqaW1hZ2UpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0SW1hZ2VMYXlvdXQoR3BJbWFnZSAqaW1hZ2UsIEltYWdlTGF5b3V0KiBsYXlvdXQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0SW1hZ2VMYXlvdXQoR3BJbWFnZSAqaW1hZ2UsIEdESVBDT05TVCBJbWFnZUxheW91dCBsYXlvdXQpOw0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEJpdG1hcCBtZXRob2RzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDcmVhdGVCaXRtYXBGcm9tU3RyZWFtKElTdHJlYW0qIHN0cmVhbSwgR3BCaXRtYXAgKipiaXRtYXApOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlQml0bWFwRnJvbUZpbGUoR0RJUENPTlNUIFdDSEFSKiBmaWxlbmFtZSwgR3BCaXRtYXAgKipiaXRtYXApOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlQml0bWFwRnJvbVN0cmVhbUlDTShJU3RyZWFtKiBzdHJlYW0sIEdwQml0bWFwICoqYml0bWFwKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZUJpdG1hcEZyb21GaWxlSUNNKEdESVBDT05TVCBXQ0hBUiogZmlsZW5hbWUsIEdwQml0bWFwICoqYml0bWFwKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZUJpdG1hcEZyb21TY2FuMChJTlQgd2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIHN0cmlkZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsRm9ybWF0IGZvcm1hdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEUqIHNjYW4wLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgR3BCaXRtYXAqKiBiaXRtYXApOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlQml0bWFwRnJvbUdyYXBoaWNzKElOVCB3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcEdyYXBoaWNzKiB0YXJnZXQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcEJpdG1hcCoqIGJpdG1hcCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDcmVhdGVCaXRtYXBGcm9tRGlyZWN0RHJhd1N1cmZhY2UoSURpcmVjdERyYXdTdXJmYWNlNyogc3VyZmFjZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwQml0bWFwKiogYml0bWFwKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZUJpdG1hcEZyb21HZGlEaWIoR0RJUENPTlNUIEJJVE1BUElORk8qIGdkaUJpdG1hcEluZm8sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgVk9JRCogZ2RpQml0bWFwRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBHcEJpdG1hcCoqIGJpdG1hcCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDcmVhdGVCaXRtYXBGcm9tSEJJVE1BUChIQklUTUFQIGhibSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSFBBTEVUVEUgaHBhbCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BCaXRtYXAqKiBiaXRtYXApOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlSEJJVE1BUEZyb21CaXRtYXAoR3BCaXRtYXAqIGJpdG1hcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSEJJVE1BUCogaGJtUmV0dXJuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUkdCIGJhY2tncm91bmQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlQml0bWFwRnJvbUhJQ09OKEhJQ09OIGhpY29uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgR3BCaXRtYXAqKiBiaXRtYXApOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlSElDT05Gcm9tQml0bWFwKEdwQml0bWFwKiBiaXRtYXAsDQotICAgICAgICAgICAgICAgICAgICAgICAgICBISUNPTiogaGJtUmV0dXJuKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZUJpdG1hcEZyb21SZXNvdXJjZShISU5TVEFOQ0UgaEluc3RhbmNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIFdDSEFSKiBscEJpdG1hcE5hbWUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcEJpdG1hcCoqIGJpdG1hcCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDbG9uZUJpdG1hcEFyZWEoUkVBTCB4LCBSRUFMIHksIFJFQUwgd2lkdGgsIFJFQUwgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXhlbEZvcm1hdCBmb3JtYXQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwQml0bWFwICpzcmNCaXRtYXAsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwQml0bWFwICoqZHN0Qml0bWFwKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENsb25lQml0bWFwQXJlYUkoSU5UIHgsDQotICAgICAgICAgICAgICAgICAgICAgSU5UIHksDQotICAgICAgICAgICAgICAgICAgICAgSU5UIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgIElOVCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgUGl4ZWxGb3JtYXQgZm9ybWF0LA0KLSAgICAgICAgICAgICAgICAgICAgIEdwQml0bWFwICpzcmNCaXRtYXAsDQotICAgICAgICAgICAgICAgICAgICAgR3BCaXRtYXAgKipkc3RCaXRtYXApOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQml0bWFwTG9ja0JpdHMoR3BCaXRtYXAqIGJpdG1hcCwNCi0gICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIEdwUmVjdCogcmVjdCwNCi0gICAgICAgICAgICAgICAgICAgVUlOVCBmbGFncywNCi0gICAgICAgICAgICAgICAgICAgUGl4ZWxGb3JtYXQgZm9ybWF0LA0KLSAgICAgICAgICAgICAgICAgICBCaXRtYXBEYXRhKiBsb2NrZWRCaXRtYXBEYXRhKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEJpdG1hcFVubG9ja0JpdHMoR3BCaXRtYXAqIGJpdG1hcCwNCi0gICAgICAgICAgICAgICAgICAgICBCaXRtYXBEYXRhKiBsb2NrZWRCaXRtYXBEYXRhKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEJpdG1hcEdldFBpeGVsKEdwQml0bWFwKiBiaXRtYXAsIElOVCB4LCBJTlQgeSwgQVJHQiAqY29sb3IpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQml0bWFwU2V0UGl4ZWwoR3BCaXRtYXAqIGJpdG1hcCwgSU5UIHgsIElOVCB5LCBBUkdCIGNvbG9yKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEJpdG1hcFNldFJlc29sdXRpb24oR3BCaXRtYXAqIGJpdG1hcCwgUkVBTCB4ZHBpLCBSRUFMIHlkcGkpOw0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEltYWdlQXR0cmlidXRlcyBtZXRob2RzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDcmVhdGVJbWFnZUF0dHJpYnV0ZXMoR3BJbWFnZUF0dHJpYnV0ZXMgKippbWFnZWF0dHIpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ2xvbmVJbWFnZUF0dHJpYnV0ZXMoR0RJUENPTlNUIEdwSW1hZ2VBdHRyaWJ1dGVzICppbWFnZWF0dHIsDQotICAgICAgICAgICAgICAgICAgICAgICAgIEdwSW1hZ2VBdHRyaWJ1dGVzICoqY2xvbmVJbWFnZWF0dHIpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRGlzcG9zZUltYWdlQXR0cmlidXRlcyhHcEltYWdlQXR0cmlidXRlcyAqaW1hZ2VhdHRyKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldEltYWdlQXR0cmlidXRlc1RvSWRlbnRpdHkoR3BJbWFnZUF0dHJpYnV0ZXMgKmltYWdlYXR0ciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvckFkanVzdFR5cGUgdHlwZSk7DQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBSZXNldEltYWdlQXR0cmlidXRlcyhHcEltYWdlQXR0cmlidXRlcyAqaW1hZ2VhdHRyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvckFkanVzdFR5cGUgdHlwZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRJbWFnZUF0dHJpYnV0ZXNDb2xvck1hdHJpeChHcEltYWdlQXR0cmlidXRlcyAqaW1hZ2VhdHRyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvckFkanVzdFR5cGUgdHlwZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCBlbmFibGVGbGFnLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgQ29sb3JNYXRyaXgqIGNvbG9yTWF0cml4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgQ29sb3JNYXRyaXgqIGdyYXlNYXRyaXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yTWF0cml4RmxhZ3MgZmxhZ3MpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzVGhyZXNob2xkKEdwSW1hZ2VBdHRyaWJ1dGVzICppbWFnZWF0dHIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvckFkanVzdFR5cGUgdHlwZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgZW5hYmxlRmxhZywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgdGhyZXNob2xkKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldEltYWdlQXR0cmlidXRlc0dhbW1hKEdwSW1hZ2VBdHRyaWJ1dGVzICppbWFnZWF0dHIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yQWRqdXN0VHlwZSB0eXBlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MIGVuYWJsZUZsYWcsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgZ2FtbWEpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzTm9PcChHcEltYWdlQXR0cmlidXRlcyAqaW1hZ2VhdHRyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yQWRqdXN0VHlwZSB0eXBlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgZW5hYmxlRmxhZyk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRJbWFnZUF0dHJpYnV0ZXNDb2xvcktleXMoR3BJbWFnZUF0dHJpYnV0ZXMgKmltYWdlYXR0ciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yQWRqdXN0VHlwZSB0eXBlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCBlbmFibGVGbGFnLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJHQiBjb2xvckxvdywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSR0IgY29sb3JIaWdoKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldEltYWdlQXR0cmlidXRlc091dHB1dENoYW5uZWwoR3BJbWFnZUF0dHJpYnV0ZXMgKmltYWdlYXR0ciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvckFkanVzdFR5cGUgdHlwZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MIGVuYWJsZUZsYWcsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JDaGFubmVsRmxhZ3MgY2hhbm5lbEZsYWdzKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldEltYWdlQXR0cmlidXRlc091dHB1dENoYW5uZWxDb2xvclByb2ZpbGUoR3BJbWFnZUF0dHJpYnV0ZXMgKmltYWdlYXR0ciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvckFkanVzdFR5cGUgdHlwZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MIGVuYWJsZUZsYWcsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIFdDSEFSICpjb2xvclByb2ZpbGVGaWxlbmFtZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRJbWFnZUF0dHJpYnV0ZXNSZW1hcFRhYmxlKEdwSW1hZ2VBdHRyaWJ1dGVzICppbWFnZWF0dHIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JBZGp1c3RUeXBlIHR5cGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCBlbmFibGVGbGFnLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQgbWFwU2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgQ29sb3JNYXAgKm1hcCk7DQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRJbWFnZUF0dHJpYnV0ZXNXcmFwTW9kZSgNCi0gICAgR3BJbWFnZUF0dHJpYnV0ZXMgKmltYWdlQXR0ciwNCi0gICAgV3JhcE1vZGUgd3JhcCwNCi0gICAgQVJHQiBhcmdiLA0KLSAgICBCT09MIGNsYW1wDQotKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldEltYWdlQXR0cmlidXRlc0lDTU1vZGUoDQotICAgIEdwSW1hZ2VBdHRyaWJ1dGVzICppbWFnZUF0dHIsDQotICAgIEJPT0wgb24NCi0pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0SW1hZ2VBdHRyaWJ1dGVzQWRqdXN0ZWRQYWxldHRlKA0KLSAgICBHcEltYWdlQXR0cmlidXRlcyAqaW1hZ2VBdHRyLA0KLSAgICBDb2xvclBhbGV0dGUgKiBjb2xvclBhbGV0dGUsDQotICAgIENvbG9yQWRqdXN0VHlwZSBjb2xvckFkanVzdFR5cGUNCi0pOw0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEdyYXBoaWNzIG1ldGhvZHMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEZsdXNoKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEZsdXNoSW50ZW50aW9uIGludGVudGlvbik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDcmVhdGVGcm9tSERDKEhEQyBoZGMsIEdwR3JhcGhpY3MgKipncmFwaGljcyk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDcmVhdGVGcm9tSERDMihIREMgaGRjLCBIQU5ETEUgaERldmljZSwgR3BHcmFwaGljcyAqKmdyYXBoaWNzKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZUZyb21IV05EKEhXTkQgaHduZCwgR3BHcmFwaGljcyAqKmdyYXBoaWNzKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZUZyb21IV05ESUNNKEhXTkQgaHduZCwgR3BHcmFwaGljcyAqKmdyYXBoaWNzKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERlbGV0ZUdyYXBoaWNzKEdwR3JhcGhpY3MgKmdyYXBoaWNzKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldERDKEdwR3JhcGhpY3MqIGdyYXBoaWNzLCBIREMgKiBoZGMpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwUmVsZWFzZURDKEdwR3JhcGhpY3MqIGdyYXBoaWNzLCBIREMgaGRjKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldENvbXBvc2l0aW5nTW9kZShHcEdyYXBoaWNzICpncmFwaGljcywgQ29tcG9zaXRpbmdNb2RlIGNvbXBvc2l0aW5nTW9kZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRDb21wb3NpdGluZ01vZGUoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIENvbXBvc2l0aW5nTW9kZSAqY29tcG9zaXRpbmdNb2RlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldFJlbmRlcmluZ09yaWdpbihHcEdyYXBoaWNzICpncmFwaGljcywgSU5UIHgsIElOVCB5KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFJlbmRlcmluZ09yaWdpbihHcEdyYXBoaWNzICpncmFwaGljcywgSU5UICp4LCBJTlQgKnkpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0Q29tcG9zaXRpbmdRdWFsaXR5KEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBDb21wb3NpdGluZ1F1YWxpdHkgY29tcG9zaXRpbmdRdWFsaXR5KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldENvbXBvc2l0aW5nUXVhbGl0eShHcEdyYXBoaWNzICpncmFwaGljcywgQ29tcG9zaXRpbmdRdWFsaXR5ICpjb21wb3NpdGluZ1F1YWxpdHkpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0U21vb3RoaW5nTW9kZShHcEdyYXBoaWNzICpncmFwaGljcywgU21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFNtb290aGluZ01vZGUoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIFNtb290aGluZ01vZGUgKnNtb290aGluZ01vZGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0UGl4ZWxPZmZzZXRNb2RlKEdwR3JhcGhpY3MqIGdyYXBoaWNzLCBQaXhlbE9mZnNldE1vZGUgcGl4ZWxPZmZzZXRNb2RlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFBpeGVsT2Zmc2V0TW9kZShHcEdyYXBoaWNzICpncmFwaGljcywgUGl4ZWxPZmZzZXRNb2RlICpwaXhlbE9mZnNldE1vZGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0VGV4dFJlbmRlcmluZ0hpbnQoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIFRleHRSZW5kZXJpbmdIaW50IG1vZGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0VGV4dFJlbmRlcmluZ0hpbnQoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIFRleHRSZW5kZXJpbmdIaW50ICptb2RlKTsNCi0NCi0jaWZkZWYgRENSX1VTRV9ORVdfMTg4OTIyDQotR3BTdGF0dXMgIFdJTkdESVBBUEkNCi1HZGlwU2V0VGV4dENvbnRyYXN0KEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBVSU5UIGNvbnRyYXN0KTsNCi0NCi1HcFN0YXR1cyAgV0lOR0RJUEFQSQ0KLUdkaXBHZXRUZXh0Q29udHJhc3QoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIFVJTlQgKiBjb250cmFzdCk7DQotI2Vsc2UNCi1HcFN0YXR1cyAgV0lOR0RJUEFQSQ0KLUdkaXBTZXRUZXh0R2FtbWFWYWx1ZShHcEdyYXBoaWNzICpncmFwaGljcywgVUlOVCBnYW1tYVZhbHVlKTsNCi0NCi1HcFN0YXR1cyAgV0lOR0RJUEFQSQ0KLUdkaXBHZXRUZXh0R2FtbWFWYWx1ZShHcEdyYXBoaWNzICpncmFwaGljcywgVUlOVCAqIGdhbW1hVmFsdWUpOw0KLSNlbmRpZiAvLyBEQ1JfVVNFX05FV18xODg5MjINCi0NCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldEludGVycG9sYXRpb25Nb2RlKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBJbnRlcnBvbGF0aW9uTW9kZSBpbnRlcnBvbGF0aW9uTW9kZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRJbnRlcnBvbGF0aW9uTW9kZShHcEdyYXBoaWNzICpncmFwaGljcywgSW50ZXJwb2xhdGlvbk1vZGUgKmludGVycG9sYXRpb25Nb2RlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldFdvcmxkVHJhbnNmb3JtKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcE1hdHJpeCAqbWF0cml4KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFJlc2V0V29ybGRUcmFuc2Zvcm0oR3BHcmFwaGljcyAqZ3JhcGhpY3MpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwTXVsdGlwbHlXb3JsZFRyYW5zZm9ybShHcEdyYXBoaWNzICpncmFwaGljcywgR0RJUENPTlNUIEdwTWF0cml4ICptYXRyaXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BNYXRyaXhPcmRlciBvcmRlcik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBUcmFuc2xhdGVXb3JsZFRyYW5zZm9ybShHcEdyYXBoaWNzICpncmFwaGljcywgUkVBTCBkeCwgUkVBTCBkeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BNYXRyaXhPcmRlciBvcmRlcik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTY2FsZVdvcmxkVHJhbnNmb3JtKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBSRUFMIHN4LCBSRUFMIHN5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgIEdwTWF0cml4T3JkZXIgb3JkZXIpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwUm90YXRlV29ybGRUcmFuc2Zvcm0oR3BHcmFwaGljcyAqZ3JhcGhpY3MsIFJFQUwgYW5nbGUsIEdwTWF0cml4T3JkZXIgb3JkZXIpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0V29ybGRUcmFuc2Zvcm0oR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwTWF0cml4ICptYXRyaXgpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwUmVzZXRQYWdlVHJhbnNmb3JtKEdwR3JhcGhpY3MgKmdyYXBoaWNzKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFBhZ2VVbml0KEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFVuaXQgKnVuaXQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0UGFnZVNjYWxlKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBSRUFMICpzY2FsZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRQYWdlVW5pdChHcEdyYXBoaWNzICpncmFwaGljcywgR3BVbml0IHVuaXQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0UGFnZVNjYWxlKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBSRUFMIHNjYWxlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldERwaVgoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIFJFQUwqIGRwaSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXREcGlZKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBSRUFMKiBkcGkpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwVHJhbnNmb3JtUG9pbnRzKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcENvb3JkaW5hdGVTcGFjZSBkZXN0U3BhY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcENvb3JkaW5hdGVTcGFjZSBzcmNTcGFjZSwgR3BQb2ludEYgKnBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBjb3VudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBUcmFuc2Zvcm1Qb2ludHNJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcENvb3JkaW5hdGVTcGFjZSBkZXN0U3BhY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcENvb3JkaW5hdGVTcGFjZSBzcmNTcGFjZSwgR3BQb2ludCAqcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldE5lYXJlc3RDb2xvcihHcEdyYXBoaWNzICpncmFwaGljcywgQVJHQiogYXJnYik7DQotDQotLy8gQ3JlYXRlIHRoZSBXaW45eCBIYWxmdG9uZSBQYWxldHRlIChldmVuIG9uIE5UKSB3aXRoIGNvcnJlY3QgRGVza3RvcCBjb2xvcnMNCi1IUEFMRVRURSBXSU5HRElQQVBJDQotR2RpcENyZWF0ZUhhbGZ0b25lUGFsZXR0ZSgpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRHJhd0xpbmUoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sIFJFQUwgeDEsIFJFQUwgeTEsDQotICAgICAgICAgICAgICAgICAgICAgIFJFQUwgeDIsIFJFQUwgeTIpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRHJhd0xpbmVJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBJTlQgeDEsIElOVCB5MSwNCi0gICAgICAgICAgICAgICAgICAgICAgSU5UIHgyLCBJTlQgeTIpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRHJhd0xpbmVzKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgIElOVCBjb3VudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBEcmF3TGluZXNJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBHRElQQ09OU1QgR3BQb2ludCAqcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU5UIGNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERyYXdBcmMoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sIFJFQUwgeCwgUkVBTCB5LA0KLSAgICAgICAgICAgIFJFQUwgd2lkdGgsIFJFQUwgaGVpZ2h0LCBSRUFMIHN0YXJ0QW5nbGUsIFJFQUwgc3dlZXBBbmdsZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBEcmF3QXJjSShHcEdyYXBoaWNzICpncmFwaGljcywgR3BQZW4gKnBlbiwgSU5UIHgsIElOVCB5LA0KLSAgICAgICAgICAgICAgICAgICAgIElOVCB3aWR0aCwgSU5UIGhlaWdodCwgUkVBTCBzdGFydEFuZ2xlLCBSRUFMIHN3ZWVwQW5nbGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRHJhd0JlemllcihHcEdyYXBoaWNzICpncmFwaGljcywgR3BQZW4gKnBlbiwgUkVBTCB4MSwgUkVBTCB5MSwNCi0gICAgICAgICAgICAgICAgICAgICAgICBSRUFMIHgyLCBSRUFMIHkyLCBSRUFMIHgzLCBSRUFMIHkzLCBSRUFMIHg0LCBSRUFMIHk0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERyYXdCZXppZXJJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBJTlQgeDEsIElOVCB5MSwNCi0gICAgICAgICAgICAgICAgICAgICAgICBJTlQgeDIsIElOVCB5MiwgSU5UIHgzLCBJTlQgeTMsIElOVCB4NCwgSU5UIHk0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERyYXdCZXppZXJzKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERyYXdCZXppZXJzSShHcEdyYXBoaWNzICpncmFwaGljcywgR3BQZW4gKnBlbiwgR0RJUENPTlNUIEdwUG9pbnQgKnBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERyYXdSZWN0YW5nbGUoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sIFJFQUwgeCwgUkVBTCB5LA0KLSAgICAgICAgICAgICAgICAgICAgICBSRUFMIHdpZHRoLCBSRUFMIGhlaWdodCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBEcmF3UmVjdGFuZ2xlSShHcEdyYXBoaWNzICpncmFwaGljcywgR3BQZW4gKnBlbiwgSU5UIHgsIElOVCB5LA0KLSAgICAgICAgICAgICAgICAgICAgICBJTlQgd2lkdGgsIElOVCBoZWlnaHQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRHJhd1JlY3RhbmdsZXMoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sIEdESVBDT05TVCBHcFJlY3RGICpyZWN0cywNCi0gICAgICAgICAgICAgICAgICAgICAgIElOVCBjb3VudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBEcmF3UmVjdGFuZ2xlc0koR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sIEdESVBDT05TVCBHcFJlY3QgKnJlY3RzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU5UIGNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERyYXdFbGxpcHNlKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBSRUFMIHgsIFJFQUwgeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCB3aWR0aCwgUkVBTCBoZWlnaHQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRHJhd0VsbGlwc2VJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBJTlQgeCwgSU5UIHksDQotICAgICAgICAgICAgICAgICAgICAgICAgIElOVCB3aWR0aCwgSU5UIGhlaWdodCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBEcmF3UGllKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBSRUFMIHgsIFJFQUwgeSwNCi0gICAgICAgICAgICAgICAgICAgICBSRUFMIHdpZHRoLCBSRUFMIGhlaWdodCwgUkVBTCBzdGFydEFuZ2xlLCBSRUFMIHN3ZWVwQW5nbGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRHJhd1BpZUkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sIElOVCB4LCBJTlQgeSwNCi0gICAgICAgICAgICAgICAgICAgICBJTlQgd2lkdGgsIElOVCBoZWlnaHQsIFJFQUwgc3RhcnRBbmdsZSwgUkVBTCBzd2VlcEFuZ2xlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERyYXdQb2x5Z29uKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERyYXdQb2x5Z29uSShHcEdyYXBoaWNzICpncmFwaGljcywgR3BQZW4gKnBlbiwgR0RJUENPTlNUIEdwUG9pbnQgKnBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERyYXdQYXRoKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBHcFBhdGggKnBhdGgpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRHJhd0N1cnZlKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgIElOVCBjb3VudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBEcmF3Q3VydmVJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBHRElQQ09OU1QgR3BQb2ludCAqcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU5UIGNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERyYXdDdXJ2ZTIoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sIEdESVBDT05TVCBHcFBvaW50RiAqcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU5UIGNvdW50LCBSRUFMIHRlbnNpb24pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRHJhd0N1cnZlMkkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sIEdESVBDT05TVCBHcFBvaW50ICpwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICBJTlQgY291bnQsIFJFQUwgdGVuc2lvbik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBEcmF3Q3VydmUzKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywNCi0gICAgICAgICAgICAgICBJTlQgY291bnQsIElOVCBvZmZzZXQsIElOVCBudW1iZXJPZlNlZ21lbnRzLCBSRUFMIHRlbnNpb24pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRHJhd0N1cnZlM0koR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sIEdESVBDT05TVCBHcFBvaW50ICpwb2ludHMsDQotICAgICAgICAgICAgICAgIElOVCBjb3VudCwgSU5UIG9mZnNldCwgSU5UIG51bWJlck9mU2VnbWVudHMsIFJFQUwgdGVuc2lvbik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBEcmF3Q2xvc2VkQ3VydmUoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sDQotICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywgSU5UIGNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERyYXdDbG9zZWRDdXJ2ZUkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sDQotICAgICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIEdwUG9pbnQgKnBvaW50cywgSU5UIGNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERyYXdDbG9zZWRDdXJ2ZTIoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sDQotICAgICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIEdwUG9pbnRGICpwb2ludHMsIElOVCBjb3VudCwgUkVBTCB0ZW5zaW9uKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERyYXdDbG9zZWRDdXJ2ZTJJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BQb2ludCAqcG9pbnRzLCBJTlQgY291bnQsIFJFQUwgdGVuc2lvbik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHcmFwaGljc0NsZWFyKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBBUkdCIGNvbG9yKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEZpbGxSZWN0YW5nbGUoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwQnJ1c2ggKmJydXNoLCBSRUFMIHgsIFJFQUwgeSwNCi0gICAgICAgICAgICAgICAgICBSRUFMIHdpZHRoLCBSRUFMIGhlaWdodCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBGaWxsUmVjdGFuZ2xlSShHcEdyYXBoaWNzICpncmFwaGljcywgR3BCcnVzaCAqYnJ1c2gsIElOVCB4LCBJTlQgeSwNCi0gICAgICAgICAgICAgICAgICAgSU5UIHdpZHRoLCBJTlQgaGVpZ2h0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEZpbGxSZWN0YW5nbGVzKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEJydXNoICpicnVzaCwNCi0gICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIEdwUmVjdEYgKnJlY3RzLCBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRmlsbFJlY3RhbmdsZXNJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEJydXNoICpicnVzaCwNCi0gICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcFJlY3QgKnJlY3RzLCBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRmlsbFBvbHlnb24oR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwQnJ1c2ggKmJydXNoLA0KLSAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywgSU5UIGNvdW50LCBHcEZpbGxNb2RlIGZpbGxNb2RlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEZpbGxQb2x5Z29uSShHcEdyYXBoaWNzICpncmFwaGljcywgR3BCcnVzaCAqYnJ1c2gsDQotICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BQb2ludCAqcG9pbnRzLCBJTlQgY291bnQsIEdwRmlsbE1vZGUgZmlsbE1vZGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRmlsbFBvbHlnb24yKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEJydXNoICpicnVzaCwNCi0gICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcFBvaW50RiAqcG9pbnRzLCBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRmlsbFBvbHlnb24ySShHcEdyYXBoaWNzICpncmFwaGljcywgR3BCcnVzaCAqYnJ1c2gsDQotICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIEdwUG9pbnQgKnBvaW50cywgSU5UIGNvdW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEZpbGxFbGxpcHNlKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEJydXNoICpicnVzaCwgUkVBTCB4LCBSRUFMIHksDQotICAgICAgICAgICAgICAgIFJFQUwgd2lkdGgsIFJFQUwgaGVpZ2h0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEZpbGxFbGxpcHNlSShHcEdyYXBoaWNzICpncmFwaGljcywgR3BCcnVzaCAqYnJ1c2gsIElOVCB4LCBJTlQgeSwNCi0gICAgICAgICAgICAgICAgIElOVCB3aWR0aCwgSU5UIGhlaWdodCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBGaWxsUGllKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEJydXNoICpicnVzaCwgUkVBTCB4LCBSRUFMIHksDQotICAgICAgICAgICAgUkVBTCB3aWR0aCwgUkVBTCBoZWlnaHQsIFJFQUwgc3RhcnRBbmdsZSwgUkVBTCBzd2VlcEFuZ2xlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEZpbGxQaWVJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEJydXNoICpicnVzaCwgSU5UIHgsIElOVCB5LA0KLSAgICAgICAgICAgICBJTlQgd2lkdGgsIElOVCBoZWlnaHQsIFJFQUwgc3RhcnRBbmdsZSwgUkVBTCBzd2VlcEFuZ2xlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEZpbGxQYXRoKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEJydXNoICpicnVzaCwgR3BQYXRoICpwYXRoKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEZpbGxDbG9zZWRDdXJ2ZShHcEdyYXBoaWNzICpncmFwaGljcywgR3BCcnVzaCAqYnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIEdwUG9pbnRGICpwb2ludHMsIElOVCBjb3VudCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBGaWxsQ2xvc2VkQ3VydmVJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEJydXNoICpicnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BQb2ludCAqcG9pbnRzLCBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRmlsbENsb3NlZEN1cnZlMihHcEdyYXBoaWNzICpncmFwaGljcywgR3BCcnVzaCAqYnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIEdwUG9pbnRGICpwb2ludHMsIElOVCBjb3VudCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMIHRlbnNpb24sIEdwRmlsbE1vZGUgZmlsbE1vZGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRmlsbENsb3NlZEN1cnZlMkkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwQnJ1c2ggKmJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcFBvaW50ICpwb2ludHMsIElOVCBjb3VudCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMIHRlbnNpb24sIEdwRmlsbE1vZGUgZmlsbE1vZGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRmlsbFJlZ2lvbihHcEdyYXBoaWNzICpncmFwaGljcywgR3BCcnVzaCAqYnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgR3BSZWdpb24gKnJlZ2lvbik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBEcmF3SW1hZ2UoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwSW1hZ2UgKmltYWdlLCBSRUFMIHgsIFJFQUwgeSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBEcmF3SW1hZ2VJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEltYWdlICppbWFnZSwgSU5UIHgsIElOVCB5KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERyYXdJbWFnZVJlY3QoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwSW1hZ2UgKmltYWdlLCBSRUFMIHgsIFJFQUwgeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMIHdpZHRoLCBSRUFMIGhlaWdodCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBEcmF3SW1hZ2VSZWN0SShHcEdyYXBoaWNzICpncmFwaGljcywgR3BJbWFnZSAqaW1hZ2UsIElOVCB4LCBJTlQgeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgd2lkdGgsIElOVCBoZWlnaHQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRHJhd0ltYWdlUG9pbnRzKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEltYWdlICppbWFnZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcFBvaW50RiAqZHN0cG9pbnRzLCBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRHJhd0ltYWdlUG9pbnRzSShHcEdyYXBoaWNzICpncmFwaGljcywgR3BJbWFnZSAqaW1hZ2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BQb2ludCAqZHN0cG9pbnRzLCBJTlQgY291bnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRHJhd0ltYWdlUG9pbnRSZWN0KEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEltYWdlICppbWFnZSwgUkVBTCB4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCB5LCBSRUFMIHNyY3gsIFJFQUwgc3JjeSwgUkVBTCBzcmN3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgc3JjaGVpZ2h0LCBHcFVuaXQgc3JjVW5pdCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBEcmF3SW1hZ2VQb2ludFJlY3RJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEltYWdlICppbWFnZSwgSU5UIHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgeSwgSU5UIHNyY3gsIElOVCBzcmN5LCBJTlQgc3Jjd2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgc3JjaGVpZ2h0LCBHcFVuaXQgc3JjVW5pdCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBEcmF3SW1hZ2VSZWN0UmVjdChHcEdyYXBoaWNzICpncmFwaGljcywgR3BJbWFnZSAqaW1hZ2UsIFJFQUwgZHN0eCwNCi0gICAgICAgICAgICAgICAgICAgICAgUkVBTCBkc3R5LCBSRUFMIGRzdHdpZHRoLCBSRUFMIGRzdGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgUkVBTCBzcmN4LCBSRUFMIHNyY3ksIFJFQUwgc3Jjd2lkdGgsIFJFQUwgc3JjaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICBHcFVuaXQgc3JjVW5pdCwNCi0gICAgICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIEdwSW1hZ2VBdHRyaWJ1dGVzKiBpbWFnZUF0dHJpYnV0ZXMsDQotICAgICAgICAgICAgICAgICAgICAgIERyYXdJbWFnZUFib3J0IGNhbGxiYWNrLCBWT0lEICogY2FsbGJhY2tEYXRhKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERyYXdJbWFnZVJlY3RSZWN0SShHcEdyYXBoaWNzICpncmFwaGljcywgR3BJbWFnZSAqaW1hZ2UsIElOVCBkc3R4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU5UIGRzdHksIElOVCBkc3R3aWR0aCwgSU5UIGRzdGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgIElOVCBzcmN4LCBJTlQgc3JjeSwgSU5UIHNyY3dpZHRoLCBJTlQgc3JjaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgR3BVbml0IHNyY1VuaXQsDQotICAgICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BJbWFnZUF0dHJpYnV0ZXMqIGltYWdlQXR0cmlidXRlcywNCi0gICAgICAgICAgICAgICAgICAgICAgIERyYXdJbWFnZUFib3J0IGNhbGxiYWNrLCBWT0lEICogY2FsbGJhY2tEYXRhKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERyYXdJbWFnZVBvaW50c1JlY3QoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwSW1hZ2UgKmltYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcFBvaW50RiAqcG9pbnRzLCBJTlQgY291bnQsIFJFQUwgc3JjeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBSRUFMIHNyY3ksIFJFQUwgc3Jjd2lkdGgsIFJFQUwgc3JjaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgIEdwVW5pdCBzcmNVbml0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcEltYWdlQXR0cmlidXRlcyogaW1hZ2VBdHRyaWJ1dGVzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIERyYXdJbWFnZUFib3J0IGNhbGxiYWNrLCBWT0lEICogY2FsbGJhY2tEYXRhKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERyYXdJbWFnZVBvaW50c1JlY3RJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEltYWdlICppbWFnZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIEdwUG9pbnQgKnBvaW50cywgSU5UIGNvdW50LCBJTlQgc3JjeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgSU5UIHNyY3ksIElOVCBzcmN3aWR0aCwgSU5UIHNyY2hlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgR3BVbml0IHNyY1VuaXQsDQotICAgICAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcEltYWdlQXR0cmlidXRlcyogaW1hZ2VBdHRyaWJ1dGVzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBEcmF3SW1hZ2VBYm9ydCBjYWxsYmFjaywgVk9JRCAqIGNhbGxiYWNrRGF0YSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBFbnVtZXJhdGVNZXRhZmlsZURlc3RQb2ludCgNCi0gICAgR3BHcmFwaGljcyAqICAgICAgICAgICAgZ3JhcGhpY3MsDQotICAgIEdESVBDT05TVCBHcE1ldGFmaWxlICogIG1ldGFmaWxlLA0KLSAgICBHRElQQ09OU1QgUG9pbnRGICYgICAgICBkZXN0UG9pbnQsDQotICAgIEVudW1lcmF0ZU1ldGFmaWxlUHJvYyAgIGNhbGxiYWNrLA0KLSAgICBWT0lEICogICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEsDQotICAgIEdESVBDT05TVCBHcEltYWdlQXR0cmlidXRlcyAqICAgICBpbWFnZUF0dHJpYnV0ZXMNCi0gICAgKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEVudW1lcmF0ZU1ldGFmaWxlRGVzdFBvaW50SSgNCi0gICAgR3BHcmFwaGljcyAqICAgICAgICAgICAgZ3JhcGhpY3MsDQotICAgIEdESVBDT05TVCBHcE1ldGFmaWxlICogIG1ldGFmaWxlLA0KLSAgICBHRElQQ09OU1QgUG9pbnQgJiAgICAgICBkZXN0UG9pbnQsDQotICAgIEVudW1lcmF0ZU1ldGFmaWxlUHJvYyAgIGNhbGxiYWNrLA0KLSAgICBWT0lEICogICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEsDQotICAgIEdESVBDT05TVCBHcEltYWdlQXR0cmlidXRlcyAqICAgICBpbWFnZUF0dHJpYnV0ZXMNCi0gICAgKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEVudW1lcmF0ZU1ldGFmaWxlRGVzdFJlY3QoDQotICAgIEdwR3JhcGhpY3MgKiAgICAgICAgICAgIGdyYXBoaWNzLA0KLSAgICBHRElQQ09OU1QgR3BNZXRhZmlsZSAqICBtZXRhZmlsZSwNCi0gICAgR0RJUENPTlNUIFJlY3RGICYgICAgICAgZGVzdFJlY3QsDQotICAgIEVudW1lcmF0ZU1ldGFmaWxlUHJvYyAgIGNhbGxiYWNrLA0KLSAgICBWT0lEICogICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEsDQotICAgIEdESVBDT05TVCBHcEltYWdlQXR0cmlidXRlcyAqICAgICBpbWFnZUF0dHJpYnV0ZXMNCi0gICAgKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEVudW1lcmF0ZU1ldGFmaWxlRGVzdFJlY3RJKA0KLSAgICBHcEdyYXBoaWNzICogICAgICAgICAgICBncmFwaGljcywNCi0gICAgR0RJUENPTlNUIEdwTWV0YWZpbGUgKiAgbWV0YWZpbGUsDQotICAgIEdESVBDT05TVCBSZWN0ICYgICAgICAgIGRlc3RSZWN0LA0KLSAgICBFbnVtZXJhdGVNZXRhZmlsZVByb2MgICBjYWxsYmFjaywNCi0gICAgVk9JRCAqICAgICAgICAgICAgICAgICAgY2FsbGJhY2tEYXRhLA0KLSAgICBHRElQQ09OU1QgR3BJbWFnZUF0dHJpYnV0ZXMgKiAgICAgaW1hZ2VBdHRyaWJ1dGVzDQotICAgICk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBFbnVtZXJhdGVNZXRhZmlsZURlc3RQb2ludHMoDQotICAgIEdwR3JhcGhpY3MgKiAgICAgICAgICAgIGdyYXBoaWNzLA0KLSAgICBHRElQQ09OU1QgR3BNZXRhZmlsZSAqICBtZXRhZmlsZSwNCi0gICAgR0RJUENPTlNUIFBvaW50RiAqICAgICAgZGVzdFBvaW50cywNCi0gICAgSU5UICAgICAgICAgICAgICAgICAgICAgY291bnQsDQotICAgIEVudW1lcmF0ZU1ldGFmaWxlUHJvYyAgIGNhbGxiYWNrLA0KLSAgICBWT0lEICogICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEsDQotICAgIEdESVBDT05TVCBHcEltYWdlQXR0cmlidXRlcyAqICAgICBpbWFnZUF0dHJpYnV0ZXMNCi0gICAgKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEVudW1lcmF0ZU1ldGFmaWxlRGVzdFBvaW50c0koDQotICAgIEdwR3JhcGhpY3MgKiAgICAgICAgICAgIGdyYXBoaWNzLA0KLSAgICBHRElQQ09OU1QgR3BNZXRhZmlsZSAqICBtZXRhZmlsZSwNCi0gICAgR0RJUENPTlNUIFBvaW50ICogICAgICAgZGVzdFBvaW50cywNCi0gICAgSU5UICAgICAgICAgICAgICAgICAgICAgY291bnQsDQotICAgIEVudW1lcmF0ZU1ldGFmaWxlUHJvYyAgIGNhbGxiYWNrLA0KLSAgICBWT0lEICogICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEsDQotICAgIEdESVBDT05TVCBHcEltYWdlQXR0cmlidXRlcyAqICAgICBpbWFnZUF0dHJpYnV0ZXMNCi0gICAgKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEVudW1lcmF0ZU1ldGFmaWxlU3JjUmVjdERlc3RQb2ludCgNCi0gICAgR3BHcmFwaGljcyAqICAgICAgICAgICAgZ3JhcGhpY3MsDQotICAgIEdESVBDT05TVCBHcE1ldGFmaWxlICogIG1ldGFmaWxlLA0KLSAgICBHRElQQ09OU1QgUG9pbnRGICYgICAgICBkZXN0UG9pbnQsDQotICAgIEdESVBDT05TVCBSZWN0RiAmICAgICAgIHNyY1JlY3QsDQotICAgIFVuaXQgICAgICAgICAgICAgICAgICAgIHNyY1VuaXQsDQotICAgIEVudW1lcmF0ZU1ldGFmaWxlUHJvYyAgIGNhbGxiYWNrLA0KLSAgICBWT0lEICogICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEsDQotICAgIEdESVBDT05TVCBHcEltYWdlQXR0cmlidXRlcyAqICAgICBpbWFnZUF0dHJpYnV0ZXMNCi0gICAgKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEVudW1lcmF0ZU1ldGFmaWxlU3JjUmVjdERlc3RQb2ludEkoDQotICAgIEdwR3JhcGhpY3MgKiAgICAgICAgICAgIGdyYXBoaWNzLA0KLSAgICBHRElQQ09OU1QgR3BNZXRhZmlsZSAqICBtZXRhZmlsZSwNCi0gICAgR0RJUENPTlNUIFBvaW50ICYgICAgICAgZGVzdFBvaW50LA0KLSAgICBHRElQQ09OU1QgUmVjdCAmICAgICAgICBzcmNSZWN0LA0KLSAgICBVbml0ICAgICAgICAgICAgICAgICAgICBzcmNVbml0LA0KLSAgICBFbnVtZXJhdGVNZXRhZmlsZVByb2MgICBjYWxsYmFjaywNCi0gICAgVk9JRCAqICAgICAgICAgICAgICAgICAgY2FsbGJhY2tEYXRhLA0KLSAgICBHRElQQ09OU1QgR3BJbWFnZUF0dHJpYnV0ZXMgKiAgICAgaW1hZ2VBdHRyaWJ1dGVzDQotICAgICk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBFbnVtZXJhdGVNZXRhZmlsZVNyY1JlY3REZXN0UmVjdCgNCi0gICAgR3BHcmFwaGljcyAqICAgICAgICAgICAgZ3JhcGhpY3MsDQotICAgIEdESVBDT05TVCBHcE1ldGFmaWxlICogIG1ldGFmaWxlLA0KLSAgICBHRElQQ09OU1QgUmVjdEYgJiAgICAgICBkZXN0UmVjdCwNCi0gICAgR0RJUENPTlNUIFJlY3RGICYgICAgICAgc3JjUmVjdCwNCi0gICAgVW5pdCAgICAgICAgICAgICAgICAgICAgc3JjVW5pdCwNCi0gICAgRW51bWVyYXRlTWV0YWZpbGVQcm9jICAgY2FsbGJhY2ssDQotICAgIFZPSUQgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSwNCi0gICAgR0RJUENPTlNUIEdwSW1hZ2VBdHRyaWJ1dGVzICogICAgIGltYWdlQXR0cmlidXRlcw0KLSAgICApOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRW51bWVyYXRlTWV0YWZpbGVTcmNSZWN0RGVzdFJlY3RJKA0KLSAgICBHcEdyYXBoaWNzICogICAgICAgICAgICBncmFwaGljcywNCi0gICAgR0RJUENPTlNUIEdwTWV0YWZpbGUgKiAgbWV0YWZpbGUsDQotICAgIEdESVBDT05TVCBSZWN0ICYgICAgICAgIGRlc3RSZWN0LA0KLSAgICBHRElQQ09OU1QgUmVjdCAmICAgICAgICBzcmNSZWN0LA0KLSAgICBVbml0ICAgICAgICAgICAgICAgICAgICBzcmNVbml0LA0KLSAgICBFbnVtZXJhdGVNZXRhZmlsZVByb2MgICBjYWxsYmFjaywNCi0gICAgVk9JRCAqICAgICAgICAgICAgICAgICAgY2FsbGJhY2tEYXRhLA0KLSAgICBHRElQQ09OU1QgR3BJbWFnZUF0dHJpYnV0ZXMgKiAgICAgaW1hZ2VBdHRyaWJ1dGVzDQotICAgICk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBFbnVtZXJhdGVNZXRhZmlsZVNyY1JlY3REZXN0UG9pbnRzKA0KLSAgICBHcEdyYXBoaWNzICogICAgICAgICAgICBncmFwaGljcywNCi0gICAgR0RJUENPTlNUIEdwTWV0YWZpbGUgKiAgbWV0YWZpbGUsDQotICAgIEdESVBDT05TVCBQb2ludEYgKiAgICAgIGRlc3RQb2ludHMsDQotICAgIElOVCAgICAgICAgICAgICAgICAgICAgIGNvdW50LA0KLSAgICBHRElQQ09OU1QgUmVjdEYgJiAgICAgICBzcmNSZWN0LA0KLSAgICBVbml0ICAgICAgICAgICAgICAgICAgICBzcmNVbml0LA0KLSAgICBFbnVtZXJhdGVNZXRhZmlsZVByb2MgICBjYWxsYmFjaywNCi0gICAgVk9JRCAqICAgICAgICAgICAgICAgICAgY2FsbGJhY2tEYXRhLA0KLSAgICBHRElQQ09OU1QgR3BJbWFnZUF0dHJpYnV0ZXMgKiAgICAgaW1hZ2VBdHRyaWJ1dGVzDQotICAgICk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBFbnVtZXJhdGVNZXRhZmlsZVNyY1JlY3REZXN0UG9pbnRzSSgNCi0gICAgR3BHcmFwaGljcyAqICAgICAgICAgICAgZ3JhcGhpY3MsDQotICAgIEdESVBDT05TVCBHcE1ldGFmaWxlICogIG1ldGFmaWxlLA0KLSAgICBHRElQQ09OU1QgUG9pbnQgKiAgICAgICBkZXN0UG9pbnRzLA0KLSAgICBJTlQgICAgICAgICAgICAgICAgICAgICBjb3VudCwNCi0gICAgR0RJUENPTlNUIFJlY3QgJiAgICAgICAgc3JjUmVjdCwNCi0gICAgVW5pdCAgICAgICAgICAgICAgICAgICAgc3JjVW5pdCwNCi0gICAgRW51bWVyYXRlTWV0YWZpbGVQcm9jICAgY2FsbGJhY2ssDQotICAgIFZPSUQgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSwNCi0gICAgR0RJUENPTlNUIEdwSW1hZ2VBdHRyaWJ1dGVzICogICAgIGltYWdlQXR0cmlidXRlcw0KLSAgICApOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwUGxheU1ldGFmaWxlUmVjb3JkKA0KLSAgICBHRElQQ09OU1QgR3BNZXRhZmlsZSAqICBtZXRhZmlsZSwNCi0gICAgRW1mUGx1c1JlY29yZFR5cGUgICAgICAgcmVjb3JkVHlwZSwNCi0gICAgVUlOVCAgICAgICAgICAgICAgICAgICAgZmxhZ3MsDQotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIGRhdGFTaXplLA0KLSAgICBHRElQQ09OU1QgQllURSAqICAgICAgICBkYXRhDQotICAgICk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRDbGlwR3JhcGhpY3MoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwR3JhcGhpY3MgKnNyY2dyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgQ29tYmluZU1vZGUgY29tYmluZU1vZGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0Q2xpcFJlY3QoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIFJFQUwgeCwgUkVBTCB5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMIHdpZHRoLCBSRUFMIGhlaWdodCwgQ29tYmluZU1vZGUgY29tYmluZU1vZGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0Q2xpcFJlY3RJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBJTlQgeCwgSU5UIHksDQotICAgICAgICAgICAgICAgICAgICAgICAgIElOVCB3aWR0aCwgSU5UIGhlaWdodCwgQ29tYmluZU1vZGUgY29tYmluZU1vZGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0Q2xpcFBhdGgoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGF0aCAqcGF0aCwgQ29tYmluZU1vZGUgY29tYmluZU1vZGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0Q2xpcFJlZ2lvbihHcEdyYXBoaWNzICpncmFwaGljcywgR3BSZWdpb24gKnJlZ2lvbiwNCi0gICAgICAgICAgICAgICAgICBDb21iaW5lTW9kZSBjb21iaW5lTW9kZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRDbGlwSHJnbihHcEdyYXBoaWNzICpncmFwaGljcywgSFJHTiBoUmduLCBDb21iaW5lTW9kZSBjb21iaW5lTW9kZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBSZXNldENsaXAoR3BHcmFwaGljcyAqZ3JhcGhpY3MpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwVHJhbnNsYXRlQ2xpcChHcEdyYXBoaWNzICpncmFwaGljcywgUkVBTCBkeCwgUkVBTCBkeSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBUcmFuc2xhdGVDbGlwSShHcEdyYXBoaWNzICpncmFwaGljcywgSU5UIGR4LCBJTlQgZHkpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0Q2xpcChHcEdyYXBoaWNzICpncmFwaGljcywgR3BSZWdpb24gKnJlZ2lvbik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRDbGlwQm91bmRzKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFJlY3RGICpyZWN0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldENsaXBCb3VuZHNJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFJlY3QgKnJlY3QpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwSXNDbGlwRW1wdHkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEJPT0wgKnJlc3VsdCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRWaXNpYmxlQ2xpcEJvdW5kcyhHcEdyYXBoaWNzICpncmFwaGljcywgR3BSZWN0RiAqcmVjdCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRWaXNpYmxlQ2xpcEJvdW5kc0koR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUmVjdCAqcmVjdCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBJc1Zpc2libGVDbGlwRW1wdHkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEJPT0wgKnJlc3VsdCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBJc1Zpc2libGVQb2ludChHcEdyYXBoaWNzICpncmFwaGljcywgUkVBTCB4LCBSRUFMIHksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqcmVzdWx0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcElzVmlzaWJsZVBvaW50SShHcEdyYXBoaWNzICpncmFwaGljcywgSU5UIHgsIElOVCB5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgKnJlc3VsdCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBJc1Zpc2libGVSZWN0KEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBSRUFMIHgsIFJFQUwgeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMIHdpZHRoLCBSRUFMIGhlaWdodCwgQk9PTCAqcmVzdWx0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcElzVmlzaWJsZVJlY3RJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBJTlQgeCwgSU5UIHksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIHdpZHRoLCBJTlQgaGVpZ2h0LCBCT09MICpyZXN1bHQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2F2ZUdyYXBoaWNzKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcmFwaGljc1N0YXRlICpzdGF0ZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBSZXN0b3JlR3JhcGhpY3MoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdyYXBoaWNzU3RhdGUgc3RhdGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQmVnaW5Db250YWluZXIoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdESVBDT05TVCBHcFJlY3RGKiBkc3RyZWN0LA0KLSAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BSZWN0RiAqc3JjcmVjdCwgR3BVbml0IHVuaXQsIEdyYXBoaWNzQ29udGFpbmVyICpzdGF0ZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBCZWdpbkNvbnRhaW5lckkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdESVBDT05TVCBHcFJlY3QqIGRzdHJlY3QsDQotICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BSZWN0ICpzcmNyZWN0LCBHcFVuaXQgdW5pdCwgR3JhcGhpY3NDb250YWluZXIgKnN0YXRlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEJlZ2luQ29udGFpbmVyMihHcEdyYXBoaWNzICpncmFwaGljcywgR3JhcGhpY3NDb250YWluZXIqIHN0YXRlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEVuZENvbnRhaW5lcihHcEdyYXBoaWNzICpncmFwaGljcywgR3JhcGhpY3NDb250YWluZXIgc3RhdGUpOw0KLQ0KLUdwU3RhdHVzDQotR2RpcEdldE1ldGFmaWxlSGVhZGVyRnJvbVdtZigNCi0gICAgSE1FVEFGSUxFICAgICAgICAgICBoV21mLA0KLSAgICBHRElQQ09OU1QgQVBNRmlsZUhlYWRlciAqICAgICBhcG1GaWxlSGVhZGVyLA0KLSAgICBNZXRhZmlsZUhlYWRlciAqICAgIGhlYWRlcg0KLSAgICApOw0KLQ0KLUdwU3RhdHVzDQotV0lOR0RJUEFQSQ0KLUdkaXBHZXRNZXRhZmlsZUhlYWRlckZyb21FbWYoDQotICAgIEhFTkhNRVRBRklMRSAgICAgICAgaEVtZiwNCi0gICAgTWV0YWZpbGVIZWFkZXIgKiAgICBoZWFkZXINCi0gICAgKTsNCi0NCi1HcFN0YXR1cw0KLVdJTkdESVBBUEkNCi1HZGlwR2V0TWV0YWZpbGVIZWFkZXJGcm9tRmlsZSgNCi0gICAgR0RJUENPTlNUIFdDSEFSKiAgICAgICAgZmlsZW5hbWUsDQotICAgIE1ldGFmaWxlSGVhZGVyICogICAgaGVhZGVyDQotICAgICk7DQotDQotR3BTdGF0dXMNCi1XSU5HRElQQVBJDQotR2RpcEdldE1ldGFmaWxlSGVhZGVyRnJvbVN0cmVhbSgNCi0gICAgSVN0cmVhbSAqICAgICAgICAgICBzdHJlYW0sDQotICAgIE1ldGFmaWxlSGVhZGVyICogICAgaGVhZGVyDQotICAgICk7DQotDQotR3BTdGF0dXMNCi1XSU5HRElQQVBJDQotR2RpcEdldE1ldGFmaWxlSGVhZGVyRnJvbU1ldGFmaWxlKA0KLSAgICBHcE1ldGFmaWxlICogICAgICAgIG1ldGFmaWxlLA0KLSAgICBNZXRhZmlsZUhlYWRlciAqICAgIGhlYWRlcg0KLSAgICApOw0KLQ0KLUdwU3RhdHVzDQotV0lOR0RJUEFQSQ0KLUdkaXBHZXRIZW1mRnJvbU1ldGFmaWxlKA0KLSAgICBHcE1ldGFmaWxlICogICAgICAgIG1ldGFmaWxlLA0KLSAgICBIRU5ITUVUQUZJTEUgKiAgICAgIGhFbWYNCi0gICAgKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZVN0cmVhbU9uRmlsZShHRElQQ09OU1QgV0NIQVIgKiBmaWxlbmFtZSwgVUlOVCBhY2Nlc3MsIElTdHJlYW0gKipzdHJlYW0pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlTWV0YWZpbGVGcm9tV21mKEhNRVRBRklMRSBoV21mLCBCT09MIGRlbGV0ZVdtZiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBBUE1GaWxlSGVhZGVyICogYXBtRmlsZUhlYWRlciwgR3BNZXRhZmlsZSAqKm1ldGFmaWxlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZU1ldGFmaWxlRnJvbUVtZihIRU5ITUVUQUZJTEUgaEVtZiwgQk9PTCBkZWxldGVFbWYsDQotICAgICAgICAgICAgICAgICAgICAgICAgICBHcE1ldGFmaWxlICoqbWV0YWZpbGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlTWV0YWZpbGVGcm9tRmlsZShHRElQQ09OU1QgV0NIQVIqIGZpbGUsIEdwTWV0YWZpbGUgKiptZXRhZmlsZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDcmVhdGVNZXRhZmlsZUZyb21XbWZGaWxlKEdESVBDT05TVCBXQ0hBUiogZmlsZSwgR0RJUENPTlNUIEFQTUZpbGVIZWFkZXIgKiBhcG1GaWxlSGVhZGVyLCBHcE1ldGFmaWxlICoqbWV0YWZpbGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlTWV0YWZpbGVGcm9tU3RyZWFtKElTdHJlYW0gKiBzdHJlYW0sIEdwTWV0YWZpbGUgKiptZXRhZmlsZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBSZWNvcmRNZXRhZmlsZSgNCi0gICAgSERDICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsDQotICAgIEVtZlR5cGUgICAgICAgICAgICAgdHlwZSwNCi0gICAgR0RJUENPTlNUIEdwUmVjdEYgKiBmcmFtZVJlY3QsDQotICAgIE1ldGFmaWxlRnJhbWVVbml0ICAgZnJhbWVVbml0LA0KLSAgICBHRElQQ09OU1QgV0NIQVIgKiAgIGRlc2NyaXB0aW9uLA0KLSAgICBHcE1ldGFmaWxlICoqICAgICAgIG1ldGFmaWxlDQotICAgICk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBSZWNvcmRNZXRhZmlsZUkoDQotICAgIEhEQyAgICAgICAgICAgICAgICAgcmVmZXJlbmNlSGRjLA0KLSAgICBFbWZUeXBlICAgICAgICAgICAgIHR5cGUsDQotICAgIEdESVBDT05TVCBHcFJlY3QgKiAgZnJhbWVSZWN0LA0KLSAgICBNZXRhZmlsZUZyYW1lVW5pdCAgIGZyYW1lVW5pdCwNCi0gICAgR0RJUENPTlNUIFdDSEFSICogICBkZXNjcmlwdGlvbiwNCi0gICAgR3BNZXRhZmlsZSAqKiAgICAgICBtZXRhZmlsZQ0KLSAgICApOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwUmVjb3JkTWV0YWZpbGVGaWxlTmFtZSgNCi0gICAgR0RJUENPTlNUIFdDSEFSKiAgICBmaWxlTmFtZSwNCi0gICAgSERDICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsDQotICAgIEVtZlR5cGUgICAgICAgICAgICAgdHlwZSwNCi0gICAgR0RJUENPTlNUIEdwUmVjdEYgKiBmcmFtZVJlY3QsDQotICAgIE1ldGFmaWxlRnJhbWVVbml0ICAgZnJhbWVVbml0LA0KLSAgICBHRElQQ09OU1QgV0NIQVIgKiAgIGRlc2NyaXB0aW9uLA0KLSAgICBHcE1ldGFmaWxlICoqICAgICAgIG1ldGFmaWxlDQotICAgICk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBSZWNvcmRNZXRhZmlsZUZpbGVOYW1lSSgNCi0gICAgR0RJUENPTlNUIFdDSEFSKiAgICBmaWxlTmFtZSwNCi0gICAgSERDICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsDQotICAgIEVtZlR5cGUgICAgICAgICAgICAgdHlwZSwNCi0gICAgR0RJUENPTlNUIEdwUmVjdCAqICBmcmFtZVJlY3QsDQotICAgIE1ldGFmaWxlRnJhbWVVbml0ICAgZnJhbWVVbml0LA0KLSAgICBHRElQQ09OU1QgV0NIQVIgKiAgIGRlc2NyaXB0aW9uLA0KLSAgICBHcE1ldGFmaWxlICoqICAgICAgIG1ldGFmaWxlDQotICAgICk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBSZWNvcmRNZXRhZmlsZVN0cmVhbSgNCi0gICAgSVN0cmVhbSAqICAgICAgICAgICBzdHJlYW0sDQotICAgIEhEQyAgICAgICAgICAgICAgICAgcmVmZXJlbmNlSGRjLA0KLSAgICBFbWZUeXBlICAgICAgICAgICAgIHR5cGUsDQotICAgIEdESVBDT05TVCBHcFJlY3RGICogZnJhbWVSZWN0LA0KLSAgICBNZXRhZmlsZUZyYW1lVW5pdCAgIGZyYW1lVW5pdCwNCi0gICAgR0RJUENPTlNUIFdDSEFSICogICBkZXNjcmlwdGlvbiwNCi0gICAgR3BNZXRhZmlsZSAqKiAgICAgICBtZXRhZmlsZQ0KLSAgICApOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwUmVjb3JkTWV0YWZpbGVTdHJlYW1JKA0KLSAgICBJU3RyZWFtICogICAgICAgICAgIHN0cmVhbSwNCi0gICAgSERDICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsDQotICAgIEVtZlR5cGUgICAgICAgICAgICAgdHlwZSwNCi0gICAgR0RJUENPTlNUIEdwUmVjdCAqICBmcmFtZVJlY3QsDQotICAgIE1ldGFmaWxlRnJhbWVVbml0ICAgZnJhbWVVbml0LA0KLSAgICBHRElQQ09OU1QgV0NIQVIgKiAgIGRlc2NyaXB0aW9uLA0KLSAgICBHcE1ldGFmaWxlICoqICAgICAgIG1ldGFmaWxlDQotICAgICk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRNZXRhZmlsZURvd25MZXZlbFJhc3Rlcml6YXRpb25MaW1pdCgNCi0gICAgR3BNZXRhZmlsZSAqICAgICAgICAgICAgbWV0YWZpbGUsDQotICAgIFVJTlQgICAgICAgICAgICAgICAgICAgIG1ldGFmaWxlUmFzdGVyaXphdGlvbkxpbWl0RHBpDQotICAgICk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRNZXRhZmlsZURvd25MZXZlbFJhc3Rlcml6YXRpb25MaW1pdCgNCi0gICAgR0RJUENPTlNUIEdwTWV0YWZpbGUgKiAgbWV0YWZpbGUsDQotICAgIFVJTlQgKiAgICAgICAgICAgICAgICAgIG1ldGFmaWxlUmFzdGVyaXphdGlvbkxpbWl0RHBpDQotICAgICk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRJbWFnZURlY29kZXJzU2l6ZShVSU5UICpudW1EZWNvZGVycywgVUlOVCAqc2l6ZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRJbWFnZURlY29kZXJzKFVJTlQgbnVtRGVjb2RlcnMsDQotICAgICAgICAgICAgICAgICAgICAgVUlOVCBzaXplLA0KLSAgICAgICAgICAgICAgICAgICAgIEltYWdlQ29kZWNJbmZvICpkZWNvZGVycyk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRJbWFnZUVuY29kZXJzU2l6ZShVSU5UICpudW1FbmNvZGVycywgVUlOVCAqc2l6ZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRJbWFnZUVuY29kZXJzKFVJTlQgbnVtRW5jb2RlcnMsDQotICAgICAgICAgICAgICAgICAgICAgVUlOVCBzaXplLA0KLSAgICAgICAgICAgICAgICAgICAgIEltYWdlQ29kZWNJbmZvICplbmNvZGVycyk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBBZGRJbWFnZUNvZGVjKEdESVBDT05TVCBJbWFnZUNvZGVjSW5mbyAqY29kZWMpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwUmVtb3ZlSW1hZ2VDb2RlYyhHRElQQ09OU1QgSW1hZ2VDb2RlY0luZm8gKmNvZGVjKTsNCi0NCi0jaWZuZGVmIERDUl9VU0VfTkVXXzE4NjA5MQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0R3JhcGhpY3NQaXhlbChHcEdyYXBoaWNzKiBncmFwaGljcywgUkVBTCB4LCBSRUFMIHksIEFSR0IqIGFyZ2IpOw0KLSNlbmRpZg0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ29tbWVudChHcEdyYXBoaWNzKiBncmFwaGljcywgVUlOVCBzaXplRGF0YSwgR0RJUENPTlNUIEJZVEUgKiBkYXRhKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldEdyYXBoaWNzTGF5b3V0KEdwR3JhcGhpY3MqIGdyYXBoaWNzLCBHcmFwaGljc0xheW91dCogbGF5b3V0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldEdyYXBoaWNzTGF5b3V0KEdwR3JhcGhpY3MqIGdyYXBoaWNzLCBHRElQQ09OU1QgR3JhcGhpY3NMYXlvdXQgbGF5b3V0KTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBGb250RmFtaWx5DQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDcmVhdGVGb250RmFtaWx5RnJvbU5hbWUoR0RJUENPTlNUIFdDSEFSICpuYW1lLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BGb250Q29sbGVjdGlvbiAqZm9udENvbGxlY3Rpb24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcEZvbnRGYW1pbHkgKipGb250RmFtaWx5KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERlbGV0ZUZvbnRGYW1pbHkoR3BGb250RmFtaWx5ICpGb250RmFtaWx5KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENsb25lRm9udEZhbWlseShHcEZvbnRGYW1pbHkgKkZvbnRGYW1pbHksIEdwRm9udEZhbWlseSAqKmNsb25lZEZvbnRGYW1pbHkpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0R2VuZXJpY0ZvbnRGYW1pbHlTYW5zU2VyaWYoR3BGb250RmFtaWx5ICoqbmF0aXZlRmFtaWx5KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldEdlbmVyaWNGb250RmFtaWx5U2VyaWYoR3BGb250RmFtaWx5ICoqbmF0aXZlRmFtaWx5KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldEdlbmVyaWNGb250RmFtaWx5TW9ub3NwYWNlKEdwRm9udEZhbWlseSAqKm5hdGl2ZUZhbWlseSk7DQotDQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRGYW1pbHlOYW1lKA0KLSAgICBHRElQQ09OU1QgR3BGb250RmFtaWx5ICAqZmFtaWx5LA0KLSAgICBXQ0hBUiAgICAgICAgICAgICAgICBuYW1lW0xGX0ZBQ0VTSVpFXSwNCi0gICAgTEFOR0lEICAgICAgICAgICAgICAgbGFuZ3VhZ2UNCi0pOw0KLQ0KLUdwU3RhdHVzICAgV0lOR0RJUEFQSQ0KLUdkaXBJc1N0eWxlQXZhaWxhYmxlKEdESVBDT05TVCBHcEZvbnRGYW1pbHkgKmZhbWlseSwgSU5UIHN0eWxlLCBCT09MICogSXNTdHlsZUF2YWlsYWJsZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBGb250Q29sbGVjdGlvbkVudW1lcmFibGUoDQotICAgIEdwRm9udENvbGxlY3Rpb24qIGZvbnRDb2xsZWN0aW9uLA0KLSAgICBHcEdyYXBoaWNzKiBncmFwaGljcywNCi0gICAgSU5UICogICAgICAgbnVtRm91bmQNCi0pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkgR2RpcEZvbnRDb2xsZWN0aW9uRW51bWVyYXRlKA0KLSAgICBHcEZvbnRDb2xsZWN0aW9uKiBmb250Q29sbGVjdGlvbiwNCi0gICAgSU5UICAgICAgICAgICAgIG51bVNvdWdodCwNCi0gICAgR3BGb250RmFtaWx5KiAgIGdwZmFtaWxpZXNbXSwNCi0gICAgSU5UKiAgICAgICAgICAgIG51bUZvdW5kLA0KLSAgICBHcEdyYXBoaWNzKiAgICAgZ3JhcGhpY3MNCi0pOw0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBOZXcgQVBJDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0RW1IZWlnaHQoR0RJUENPTlNUIEdwRm9udEZhbWlseSAqZmFtaWx5LCBJTlQgc3R5bGUsIFVJTlQxNiAqIEVtSGVpZ2h0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldENlbGxBc2NlbnQoR0RJUENPTlNUIEdwRm9udEZhbWlseSAqZmFtaWx5LCBJTlQgc3R5bGUsIFVJTlQxNiAqIENlbGxBc2NlbnQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0Q2VsbERlc2NlbnQoR0RJUENPTlNUIEdwRm9udEZhbWlseSAqZmFtaWx5LCBJTlQgc3R5bGUsIFVJTlQxNiAqIENlbGxEZXNjZW50KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldExpbmVTcGFjaW5nKEdESVBDT05TVCBHcEZvbnRGYW1pbHkgKmZhbWlseSwgSU5UIHN0eWxlLCBVSU5UMTYgKiBMaW5lU3BhY2luZyk7DQotDQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gRm9udA0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlRm9udEZyb21EQygNCi0gICAgSERDICAgICAgICBoZGMsDQotICAgIEdwRm9udCAgICoqZm9udA0KLSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBDcmVhdGVGb250RnJvbUxvZ2ZvbnRBKA0KLSAgICBIREMgICAgICAgIGhkYywNCi0gICAgR0RJUENPTlNUIExPR0ZPTlRBICAqbG9nZm9udCwNCi0gICAgR3BGb250ICAgKipmb250DQotKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZUZvbnRGcm9tTG9nZm9udFcoDQotICAgIEhEQyAgICAgICAgaGRjLA0KLSAgICBHRElQQ09OU1QgTE9HRk9OVFcgICpsb2dmb250LA0KLSAgICBHcEZvbnQgICAqKmZvbnQNCi0pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ3JlYXRlRm9udCgNCi0gICAgR0RJUENPTlNUIEdwRm9udEZhbWlseSAgKmZvbnRGYW1pbHksDQotICAgIFJFQUwgICAgICAgICAgICAgICAgIGVtU2l6ZSwNCi0gICAgSU5UICAgICAgICAgICAgICAgICAgc3R5bGUsDQotICAgIFVuaXQgICAgICAgICAgICAgICAgIHVuaXQsDQotICAgIEdwRm9udCAgICAgICAgICAgICAqKmZvbnQNCi0pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ2xvbmVGb250KEdwRm9udCogZm9udCwgR3BGb250KiogY2xvbmVGb250KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERlbGV0ZUZvbnQoR3BGb250KiBmb250KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldEZhbWlseShHcEZvbnQgKmZvbnQsIEdwRm9udEZhbWlseSAqKmZhbWlseSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRGb250U3R5bGUoR3BGb250ICpmb250LCBJTlQgKnN0eWxlKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldEZvbnRTaXplKEdwRm9udCAqZm9udCwgUkVBTCAqc2l6ZSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRGb250VW5pdChHcEZvbnQgKmZvbnQsIFVuaXQgKnVuaXQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0Rm9udEhlaWdodChHRElQQ09OU1QgR3BGb250ICpmb250LCBHRElQQ09OU1QgR3BHcmFwaGljcyAqZ3JhcGhpY3MsIFJFQUwgKmhlaWdodCk7DQotDQotI2lmZGVmIERDUl9VU0VfTkVXXzEyNTQ2Nw0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0Rm9udEhlaWdodEdpdmVuRFBJKEdESVBDT05TVCBHcEZvbnQgKmZvbnQsIFJFQUwgZHBpLCBSRUFMICpoZWlnaHQpOw0KLSNlbmRpZg0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0TG9nRm9udEEoR3BGb250ICogZm9udCwgR3BHcmFwaGljcyAqZ3JhcGhpY3MsIExPR0ZPTlRBICogbG9nZm9udEEpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0TG9nRm9udFcoR3BGb250ICogZm9udCwgR3BHcmFwaGljcyAqZ3JhcGhpY3MsIExPR0ZPTlRXICogbG9nZm9udFcpOw0KLQ0KLS8vIEZvbnRDb2xsZWN0aW9uDQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBOZXdJbnN0YWxsZWRGb250Q29sbGVjdGlvbihHcEZvbnRDb2xsZWN0aW9uKiogZm9udENvbGxlY3Rpb24pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwTmV3UHJpdmF0ZUZvbnRDb2xsZWN0aW9uKEdwRm9udENvbGxlY3Rpb24qKiBmb250Q29sbGVjdGlvbik7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBEZWxldGVQcml2YXRlRm9udENvbGxlY3Rpb24oR3BGb250Q29sbGVjdGlvbioqIGZvbnRDb2xsZWN0aW9uKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldEZvbnRDb2xsZWN0aW9uRmFtaWx5Q291bnQoDQotICAgIEdwRm9udENvbGxlY3Rpb24qIGZvbnRDb2xsZWN0aW9uLA0KLSAgICBJTlQgKiAgICAgICBudW1Gb3VuZA0KLSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBHZXRGb250Q29sbGVjdGlvbkZhbWlseUxpc3QoDQotICAgIEdwRm9udENvbGxlY3Rpb24qIGZvbnRDb2xsZWN0aW9uLA0KLSAgICBJTlQgICAgICAgICAgICAgbnVtU291Z2h0LA0KLSAgICBHcEZvbnRGYW1pbHkqICAgZ3BmYW1pbGllc1tdLA0KLSAgICBJTlQqICAgICAgICAgICAgbnVtRm91bmQNCi0pOw0KLQ0KLSNpZm5kZWYgRENSX1VTRV9ORVdfMjM1MDcyDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBJbnN0YWxsRm9udEZpbGUoDQotICAgIEdwRm9udENvbGxlY3Rpb24qIGZvbnRDb2xsZWN0aW9uLA0KLSAgICBHRElQQ09OU1QgV0NIQVIqIGZpbGVuYW1lDQotKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFVuaW5zdGFsbEZvbnRGaWxlKA0KLSAgICBHcEZvbnRDb2xsZWN0aW9uKiBmb250Q29sbGVjdGlvbiwNCi0gICAgR0RJUENPTlNUIFdDSEFSKiBmaWxlbmFtZQ0KLSk7DQotI2VuZGlmDQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBQcml2YXRlQWRkRm9udEZpbGUoDQotICAgIEdwRm9udENvbGxlY3Rpb24qIGZvbnRDb2xsZWN0aW9uLA0KLSAgICBHRElQQ09OU1QgV0NIQVIqIGZpbGVuYW1lDQotKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFByaXZhdGVBZGRNZW1vcnlGb250KA0KLSAgICBHcEZvbnRDb2xsZWN0aW9uKiBmb250Q29sbGVjdGlvbiwNCi0gICAgR0RJUENPTlNUIHZvaWQqIG1lbW9yeSwNCi0gICAgSU5UIGxlbmd0aA0KLSk7DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gVGV4dA0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRHJhd1N0cmluZygNCi0gICAgR3BHcmFwaGljcyAgICAgICAgICAgICAgICpncmFwaGljcywNCi0gICAgR0RJUENPTlNUIFdDSEFSICAgICAgICAgICpzdHJpbmcsDQotICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLA0KLSAgICBHRElQQ09OU1QgR3BGb250ICAgICAgICAgKmZvbnQsDQotICAgIEdESVBDT05TVCBSZWN0RiAgICAgICAgICAqbGF5b3V0UmVjdCwNCi0gICAgR0RJUENPTlNUIEdwU3RyaW5nRm9ybWF0ICpzdHJpbmdGb3JtYXQsDQotICAgIEdESVBDT05TVCBHcEJydXNoICAgICAgICAqYnJ1c2gNCi0pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwTWVhc3VyZVN0cmluZygNCi0gICAgR3BHcmFwaGljcyAgICAgICAgICAgICAgICpncmFwaGljcywNCi0gICAgR0RJUENPTlNUIFdDSEFSICAgICAgICAgICpzdHJpbmcsDQotICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLA0KLSAgICBHRElQQ09OU1QgR3BGb250ICAgICAgICAgKmZvbnQsDQotICAgIEdESVBDT05TVCBSZWN0RiAgICAgICAgICAqbGF5b3V0UmVjdCwNCi0gICAgR0RJUENPTlNUIEdwU3RyaW5nRm9ybWF0ICpzdHJpbmdGb3JtYXQsDQotICAgIFJlY3RGICAgICAgICAgICAgICAgICAgICAqYm91bmRpbmdCb3gsDQotICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAqY29kZXBvaW50c0ZpdHRlZCwNCi0gICAgSU5UICAgICAgICAgICAgICAgICAgICAgICpsaW5lc0ZpbGxlZA0KLSk7DQotDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xNzQzNDANCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcE1lYXN1cmVTdHJpbmdSZWdpb24oDQotICAgIEdwR3JhcGhpY3MgICAgICAgICAgICAgICAqZ3JhcGhpY3MsDQotICAgIEdESVBDT05TVCBXQ0hBUiAgICAgICAgICAqc3RyaW5nLA0KLSAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwNCi0gICAgR0RJUENPTlNUIEdwRm9udCAgICAgICAgICpmb250LA0KLSAgICBHRElQQ09OU1QgUmVjdEYgICAgICAgICAgJmxheW91dFJlY3QsDQotICAgIEdESVBDT05TVCBHcFN0cmluZ0Zvcm1hdCAqc3RyaW5nRm9ybWF0LA0KLSAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q2hhcmFjdGVySW5kZXgsDQotICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgY2hhcmFjdGVyQ291bnQsDQotICAgIEdwUmVnaW9uICAgICAgICAgICAgICAgICAqcmVnaW9uDQotKTsNCi0jZW5kaWYNCi0NCi0jaWZkZWYgRENSX1VTRV9ORVdfMTc0MzQwDQotR3BTdGF0dXMNCi1XSU5HRElQQVBJDQotR2RpcE1lYXN1cmVDaGFyYWN0ZXJSYW5nZXMoDQotICAgIEdwR3JhcGhpY3MgICAgICAgICAgICAgICAqZ3JhcGhpY3MsDQotICAgIEdESVBDT05TVCBXQ0hBUiAgICAgICAgICAqc3RyaW5nLA0KLSAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwNCi0gICAgR0RJUENPTlNUIEdwRm9udCAgICAgICAgICpmb250LA0KLSAgICBHRElQQ09OU1QgUmVjdEYgICAgICAgICAgJmxheW91dFJlY3QsDQotICAgIEdESVBDT05TVCBHcFN0cmluZ0Zvcm1hdCAqc3RyaW5nRm9ybWF0LA0KLSAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbkNvdW50LA0KLSAgICBHcFJlZ2lvbiAgICAgICAgICAgICAgICAqKnJlZ2lvbnMNCi0pOw0KLSNlbmRpZg0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRHJhd0RyaXZlclN0cmluZygNCi0gICAgR3BHcmFwaGljcyAqZ3JhcGhpY3MsDQotICAgIEdESVBDT05TVCBVSU5UMTYgKnRleHQsDQotICAgIElOVCBsZW5ndGgsDQotICAgIEdESVBDT05TVCBHcEZvbnQgKmZvbnQsDQotICAgIEdESVBDT05TVCBHcEJydXNoICpicnVzaCwNCi0gICAgR0RJUENPTlNUIFBvaW50RiAqcG9zaXRpb25zLA0KLSAgICBJTlQgZmxhZ3MsDQotICAgIEdESVBDT05TVCBHcE1hdHJpeCAqbWF0cml4DQotKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcE1lYXN1cmVEcml2ZXJTdHJpbmcoDQotICAgIEdwR3JhcGhpY3MgKmdyYXBoaWNzLA0KLSAgICBHRElQQ09OU1QgVUlOVDE2ICp0ZXh0LA0KLSAgICBJTlQgbGVuZ3RoLA0KLSAgICBHRElQQ09OU1QgR3BGb250ICpmb250LA0KLSAgICBHRElQQ09OU1QgUG9pbnRGICpwb3NpdGlvbnMsDQotICAgIElOVCBmbGFncywNCi0gICAgR0RJUENPTlNUIEdwTWF0cml4ICptYXRyaXgsDQotICAgIFJlY3RGICpib3VuZGluZ0JveA0KLSk7DQotDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xNjg3NzINCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERyaXZlclN0cmluZ1BvaW50VG9Db2RlcG9pbnQoDQotICAgIEdwR3JhcGhpY3MgKmdyYXBoaWNzLA0KLSAgICBHRElQQ09OU1QgVUlOVDE2ICp0ZXh0LA0KLSAgICBJTlQgbGVuZ3RoLA0KLSAgICBHRElQQ09OU1QgR3BGb250ICpmb250LA0KLSAgICBHRElQQ09OU1QgUG9pbnRGICpwb3NpdGlvbnMsDQotICAgIElOVCBmbGFncywNCi0gICAgR3BNYXRyaXggKm1hdHJpeCwNCi0gICAgR0RJUENPTlNUIFBvaW50RiAqaGl0LA0KLSAgICBJTlQgKmluZGV4LA0KLSAgICBCT09MICpyaWdodEVkZ2UsDQotICAgIFJFQUwgKmRpc3RhbmNlDQotKTsNCi0jZW5kaWYNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBTdHJpbmcgZm9ybWF0IEFQSXMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZVN0cmluZ0Zvcm1hdCgNCi0gICAgSU5UICAgICAgICAgICAgICAgZm9ybWF0QXR0cmlidXRlcywNCi0gICAgTEFOR0lEICAgICAgICAgICAgbGFuZ3VhZ2UsDQotICAgIEdwU3RyaW5nRm9ybWF0ICAqKmZvcm1hdA0KLSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTdHJpbmdGb3JtYXRHZXRHZW5lcmljRGVmYXVsdChHcFN0cmluZ0Zvcm1hdCAqKmZvcm1hdCk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTdHJpbmdGb3JtYXRHZXRHZW5lcmljVHlwb2dyYXBoaWMoR3BTdHJpbmdGb3JtYXQgKipmb3JtYXQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwRGVsZXRlU3RyaW5nRm9ybWF0KEdwU3RyaW5nRm9ybWF0ICpmb3JtYXQpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwQ2xvbmVTdHJpbmdGb3JtYXQoR0RJUENPTlNUIEdwU3RyaW5nRm9ybWF0ICpmb3JtYXQsIEdwU3RyaW5nRm9ybWF0ICoqbmV3Rm9ybWF0KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldFN0cmluZ0Zvcm1hdEZsYWdzKEdwU3RyaW5nRm9ybWF0ICpmb3JtYXQsIElOVCBmbGFncyk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSSBHZGlwR2V0U3RyaW5nRm9ybWF0RmxhZ3MoR0RJUENPTlNUIEdwU3RyaW5nRm9ybWF0ICpmb3JtYXQsIElOVCAqZmxhZ3MpOw0KLQ0KLSNpZm5kZWYgRENSX1VTRV9ORVdfMTUyMTU0DQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRTdHJpbmdGb3JtYXRMaW5lU3BhY2luZyhHcFN0cmluZ0Zvcm1hdCAqZm9ybWF0LCBSRUFMIGFtb3VudCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZVNwYWNpbmcgbWV0aG9kKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFN0cmluZ0Zvcm1hdExpbmVTcGFjaW5nQW1vdW50KEdESVBDT05TVCBHcFN0cmluZ0Zvcm1hdCAqZm9ybWF0LCBSRUFMICphbW91bnQpOw0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0U3RyaW5nRm9ybWF0TGluZVNwYWNpbmdNZXRob2QoR0RJUENPTlNUIEdwU3RyaW5nRm9ybWF0ICpmb3JtYXQsIExpbmVTcGFjaW5nICptZXRob2QpOw0KLSNlbmRpZg0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0U3RyaW5nRm9ybWF0QWxpZ24oR3BTdHJpbmdGb3JtYXQgKmZvcm1hdCwgU3RyaW5nQWxpZ25tZW50IGFsaWduKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFN0cmluZ0Zvcm1hdEFsaWduKEdESVBDT05TVCBHcFN0cmluZ0Zvcm1hdCAqZm9ybWF0LCBTdHJpbmdBbGlnbm1lbnQgKmFsaWduKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldFN0cmluZ0Zvcm1hdExpbmVBbGlnbihHcFN0cmluZ0Zvcm1hdCAqZm9ybWF0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nQWxpZ25tZW50IGFsaWduKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFN0cmluZ0Zvcm1hdExpbmVBbGlnbihHRElQQ09OU1QgR3BTdHJpbmdGb3JtYXQgKmZvcm1hdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0FsaWdubWVudCAqYWxpZ24pOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0U3RyaW5nRm9ybWF0VHJpbW1pbmcoDQotICAgIEdwU3RyaW5nRm9ybWF0ICAqZm9ybWF0LA0KLSAgICBTdHJpbmdUcmltbWluZyAgIHRyaW1taW5nDQotKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFN0cmluZ0Zvcm1hdFRyaW1taW5nKA0KLSAgICBHRElQQ09OU1QgR3BTdHJpbmdGb3JtYXQgKmZvcm1hdCwNCi0gICAgU3RyaW5nVHJpbW1pbmcgICAgICAgKnRyaW1taW5nDQotKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldFN0cmluZ0Zvcm1hdEhvdGtleVByZWZpeChHcFN0cmluZ0Zvcm1hdCAqZm9ybWF0LCBJTlQgaG90a2V5UHJlZml4KTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFN0cmluZ0Zvcm1hdEhvdGtleVByZWZpeChHRElQQ09OU1QgR3BTdHJpbmdGb3JtYXQgKmZvcm1hdCwgSU5UICpob3RrZXlQcmVmaXgpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwU2V0U3RyaW5nRm9ybWF0VGFiU3RvcHMoR3BTdHJpbmdGb3JtYXQgKmZvcm1hdCwgUkVBTCBmaXJzdFRhYk9mZnNldCwgSU5UIGNvdW50LCBHRElQQ09OU1QgUkVBTCAqdGFiU3RvcHMpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0U3RyaW5nRm9ybWF0VGFiU3RvcHMoR0RJUENPTlNUIEdwU3RyaW5nRm9ybWF0ICpmb3JtYXQsIElOVCBjb3VudCwgUkVBTCAqZmlyc3RUYWJPZmZzZXQsIFJFQUwgKnRhYlN0b3BzKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFN0cmluZ0Zvcm1hdFRhYlN0b3BDb3VudChHRElQQ09OU1QgR3BTdHJpbmdGb3JtYXQgKmZvcm1hdCwgSU5UICogY291bnQpOw0KLQ0KLSNpZmRlZiBEQ1JfVVNFX05FV18xNDY5MzMNCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcFNldFN0cmluZ0Zvcm1hdERpZ2l0U3Vic3RpdHV0aW9uKEdwU3RyaW5nRm9ybWF0ICpmb3JtYXQsIExBTkdJRCBsYW5ndWFnZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nRGlnaXRTdWJzdGl0dXRlIHN1YnN0aXR1dGUpOw0KLQ0KLUdwU3RhdHVzIFdJTkdESVBBUEkNCi1HZGlwR2V0U3RyaW5nRm9ybWF0RGlnaXRTdWJzdGl0dXRpb24oR0RJUENPTlNUIEdwU3RyaW5nRm9ybWF0ICpmb3JtYXQsIExBTkdJRCAqbGFuZ3VhZ2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ0RpZ2l0U3Vic3RpdHV0ZSAqc3Vic3RpdHV0ZSk7DQotI2VuZGlmIC8vIERDUl9VU0VfTkVXXzE0NjkzMw0KLQ0KLSNpZmRlZiBEQ1JfVVNFX05FV18xNzQzNDANCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcEdldFN0cmluZ0Zvcm1hdE1lYXN1cmFibGVDaGFyYWN0ZXJSYW5nZUNvdW50KA0KLSAgICBHRElQQ09OU1QgR3BTdHJpbmdGb3JtYXQgICAgKmZvcm1hdCwNCi0gICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICpjb3VudA0KLSk7DQotDQotR3BTdGF0dXMgV0lOR0RJUEFQSQ0KLUdkaXBTZXRTdHJpbmdGb3JtYXRNZWFzdXJhYmxlQ2hhcmFjdGVyUmFuZ2VzKA0KLSAgICBHcFN0cmluZ0Zvcm1hdCAgICAgICAgICAgICAgKmZvcm1hdCwNCi0gICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlQ291bnQsDQotICAgIEdESVBDT05TVCBDaGFyYWN0ZXJSYW5nZSAgICAqcmFuZ2VzDQotKTsNCi0jZW5kaWYNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBDYWNoZWQgQml0bWFwIEFQSXMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcENyZWF0ZUNhY2hlZEJpdG1hcCgNCi0gICAgR3BCaXRtYXAgKmJpdG1hcCwNCi0gICAgR3BHcmFwaGljcyAqZ3JhcGhpY3MsDQotICAgIEdwQ2FjaGVkQml0bWFwICoqY2FjaGVkQml0bWFwDQotKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERlbGV0ZUNhY2hlZEJpdG1hcChHcENhY2hlZEJpdG1hcCAqY2FjaGVkQml0bWFwKTsNCi0NCi1HcFN0YXR1cyBXSU5HRElQQVBJDQotR2RpcERyYXdDYWNoZWRCaXRtYXAoDQotICAgIEdwR3JhcGhpY3MgKmdyYXBoaWNzLA0KLSAgICBHcENhY2hlZEJpdG1hcCAqY2FjaGVkQml0bWFwLA0KLSAgICBJTlQgeCwNCi0gICAgSU5UIHkNCi0pOw0KLQ0KLVVJTlQgV0lOR0RJUEFQSQ0KLUdkaXBFbWZUb1dtZkJpdHMoDQotICAgIEhFTkhNRVRBRklMRSBoZW1mLA0KLSAgICBVSU5UICAgICAgICAgY2JEYXRhMTYsDQotICAgIExQQllURSAgICAgICBwRGF0YTE2LA0KLSAgICBJTlQgICAgICAgICAgaU1hcE1vZGUsDQotICAgIElOVCAgICAgICAgICBlRmxhZ3MNCi0pOw0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX0NCi0jZW5kaWYNCi0NCi0jZW5kaWYgLy8gIV9GTEFUQVBJX0gNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCisqCisqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqIE1vZHVsZSBOYW1lOgorKgorKiAgIEdkaXBsdXNGbGF0LmgKKyoKKyogQWJzdHJhY3Q6CisqCisqICAgRmxhdCBHREkrIEFQSSB3cmFwcGVycyAtIGhlYWRlciBmaWxlCisqCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vIFRPRE86IHRoaXMgZmlsZSBzdHlsZSBuZWVkcyB0byBiZSBtYWRlIGludGVybmFsbHkgY29uc2lzdGVudCB3aXRoIHRoZSB3YXkKKy8vICAgICAgIGl0IGhhbmRsZXMgYnJlYWtpbmcgdGhlIGxvbmcgYXJndW1lbnQgbGlzdHMgYWNyb3NzIG11bHRpcGxlIGxpbmVzCisKKyNpZm5kZWYgX0ZMQVRBUElfSAorI2RlZmluZSBfRkxBVEFQSV9ICisKKyNkZWZpbmUgV0lOR0RJUEFQSSBfX3N0ZGNhbGwKKworLy8gY3VycmVudGx5LCBvbmx5IEMrKyB3cmFwcGVyIEFQSSdzIGZvcmNlIGNvbnN0LgorCisjZGVmaW5lIEdESVBDT05TVCBjb25zdAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZm5kZWYgRENSX1VTRV9ORVdfMTc1ODY2CisKK1ZPSUQKK1dJTkdESVBBUEkKK0dkaXBEaXNwbGF5UGFsZXR0ZVdpbmRvd05vdGlmeShXaW5kb3dOb3RpZnlFbnVtIG5vdGlmeSk7CisKKyNlbmRpZgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEdyYXBoaWNzUGF0aCBtZXRob2RzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZVBhdGgoR3BGaWxsTW9kZSBicnVzaE1vZGUsIEdwUGF0aCAqKnBhdGgpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ3JlYXRlUGF0aDIoR0RJUENPTlNUIEdwUG9pbnRGKiwgR0RJUENPTlNUIEJZVEUqLCBJTlQsIEdwRmlsbE1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcFBhdGggKipwYXRoKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZVBhdGgySShHRElQQ09OU1QgR3BQb2ludCosIEdESVBDT05TVCBCWVRFKiwgSU5ULCBHcEZpbGxNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwUGF0aCAqKnBhdGgpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ2xvbmVQYXRoKEdwUGF0aCogcGF0aCwgR3BQYXRoICoqY2xvbmVQYXRoKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcERlbGV0ZVBhdGgoR3BQYXRoKiBwYXRoKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFJlc2V0UGF0aChHcFBhdGgqIHBhdGgpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0UG9pbnRDb3VudChHcFBhdGgqIHBhdGgsIElOVCogY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0UGF0aFR5cGVzKEdwUGF0aCogcGF0aCwgQllURSogdHlwZXMsIElOVCBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQYXRoUG9pbnRzKEdwUGF0aCosIEdwUG9pbnRGKiBwb2ludHMsIElOVCBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQYXRoUG9pbnRzSShHcFBhdGgqLCBHcFBvaW50KiBwb2ludHMsIElOVCBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQYXRoRmlsbE1vZGUoR3BQYXRoICpwYXRoLCBHcEZpbGxNb2RlICpmaWxsbW9kZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRQYXRoRmlsbE1vZGUoR3BQYXRoICpwYXRoLCBHcEZpbGxNb2RlIGZpbGxtb2RlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFBhdGhEYXRhKEdwUGF0aCAqcGF0aCwgR3BQYXRoRGF0YSogcGF0aERhdGEpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU3RhcnRQYXRoRmlndXJlKEdwUGF0aCAqcGF0aCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDbG9zZVBhdGhGaWd1cmUoR3BQYXRoICpwYXRoKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENsb3NlUGF0aEZpZ3VyZXMoR3BQYXRoICpwYXRoKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFBhdGhNYXJrZXIoR3BQYXRoKiBwYXRoKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENsZWFyUGF0aE1hcmtlcnMoR3BQYXRoKiBwYXRoKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFJldmVyc2VQYXRoKEdwUGF0aCogcGF0aCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQYXRoTGFzdFBvaW50KEdwUGF0aCogcGF0aCwgR3BQb2ludEYqIGxhc3RQb2ludCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBBZGRQYXRoTGluZShHcFBhdGggKnBhdGgsIFJFQUwgeDEsIFJFQUwgeTEsIFJFQUwgeDIsIFJFQUwgeTIpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQWRkUGF0aExpbmUyKEdwUGF0aCAqcGF0aCwgR0RJUENPTlNUIEdwUG9pbnRGICpwb2ludHMsIElOVCBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBBZGRQYXRoQXJjKEdwUGF0aCAqcGF0aCwgUkVBTCB4LCBSRUFMIHksIFJFQUwgd2lkdGgsIFJFQUwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCBzdGFydEFuZ2xlLCBSRUFMIHN3ZWVwQW5nbGUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQWRkUGF0aEJlemllcihHcFBhdGggKnBhdGgsIFJFQUwgeDEsIFJFQUwgeTEsIFJFQUwgeDIsIFJFQUwgeTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMIHgzLCBSRUFMIHkzLCBSRUFMIHg0LCBSRUFMIHk0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEFkZFBhdGhCZXppZXJzKEdwUGF0aCAqcGF0aCwgR0RJUENPTlNUIEdwUG9pbnRGICpwb2ludHMsIElOVCBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBBZGRQYXRoQ3VydmUoR3BQYXRoICpwYXRoLCBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywgSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEFkZFBhdGhDdXJ2ZTIoR3BQYXRoICpwYXRoLCBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywgSU5UIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCB0ZW5zaW9uKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEFkZFBhdGhDdXJ2ZTMoR3BQYXRoICpwYXRoLCBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywgSU5UIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIG9mZnNldCwgSU5UIG51bWJlck9mU2VnbWVudHMsIFJFQUwgdGVuc2lvbik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBBZGRQYXRoQ2xvc2VkQ3VydmUoR3BQYXRoICpwYXRoLCBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywgSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEFkZFBhdGhDbG9zZWRDdXJ2ZTIoR3BQYXRoICpwYXRoLCBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywgSU5UIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCB0ZW5zaW9uKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEFkZFBhdGhSZWN0YW5nbGUoR3BQYXRoICpwYXRoLCBSRUFMIHgsIFJFQUwgeSwgUkVBTCB3aWR0aCwgUkVBTCBoZWlnaHQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQWRkUGF0aFJlY3RhbmdsZXMoR3BQYXRoICpwYXRoLCBHRElQQ09OU1QgR3BSZWN0RiAqcmVjdHMsIElOVCBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBBZGRQYXRoRWxsaXBzZShHcFBhdGggKnBhdGgsIFJFQUwgeCwgUkVBTCB5LCBSRUFMIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgaGVpZ2h0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEFkZFBhdGhQaWUoR3BQYXRoICpwYXRoLCBSRUFMIHgsIFJFQUwgeSwgUkVBTCB3aWR0aCwgUkVBTCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICBSRUFMIHN0YXJ0QW5nbGUsIFJFQUwgc3dlZXBBbmdsZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBBZGRQYXRoUG9seWdvbihHcFBhdGggKnBhdGgsIEdESVBDT05TVCBHcFBvaW50RiAqcG9pbnRzLCBJTlQgY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQWRkUGF0aFBhdGgoR3BQYXRoICpwYXRoLCBHRElQQ09OU1QgR3BQYXRoKiBhZGRpbmdQYXRoLCBCT09MIGNvbm5lY3QpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQWRkUGF0aFN0cmluZyhHcFBhdGggKnBhdGgsIEdESVBDT05TVCBXQ0hBUiAqc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGxlbmd0aCwgR0RJUENPTlNUIEdwRm9udEZhbWlseSAqZmFtaWx5LCBJTlQgc3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICBSRUFMIGVtU2l6ZSwgR0RJUENPTlNUIFJlY3RGICpsYXlvdXRSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIEdwU3RyaW5nRm9ybWF0ICpmb3JtYXQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQWRkUGF0aFN0cmluZ0koR3BQYXRoICpwYXRoLCBHRElQQ09OU1QgV0NIQVIgKnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIElOVCBsZW5ndGgsIEdESVBDT05TVCBHcEZvbnRGYW1pbHkgKmZhbWlseSwgSU5UIHN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCBlbVNpemUsIEdESVBDT05TVCBSZWN0ICpsYXlvdXRSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIEdwU3RyaW5nRm9ybWF0ICpmb3JtYXQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQWRkUGF0aExpbmVJKEdwUGF0aCAqcGF0aCwgSU5UIHgxLCBJTlQgeTEsIElOVCB4MiwgSU5UIHkyKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEFkZFBhdGhMaW5lMkkoR3BQYXRoICpwYXRoLCBHRElQQ09OU1QgR3BQb2ludCAqcG9pbnRzLCBJTlQgY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQWRkUGF0aEFyY0koR3BQYXRoICpwYXRoLCBJTlQgeCwgSU5UIHksIElOVCB3aWR0aCwgSU5UIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgc3RhcnRBbmdsZSwgUkVBTCBzd2VlcEFuZ2xlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEFkZFBhdGhCZXppZXJJKEdwUGF0aCAqcGF0aCwgSU5UIHgxLCBJTlQgeTEsIElOVCB4MiwgSU5UIHkyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIHgzLCBJTlQgeTMsIElOVCB4NCwgSU5UIHk0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEFkZFBhdGhCZXppZXJzSShHcFBhdGggKnBhdGgsIEdESVBDT05TVCBHcFBvaW50ICpwb2ludHMsIElOVCBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBBZGRQYXRoQ3VydmVJKEdwUGF0aCAqcGF0aCwgR0RJUENPTlNUIEdwUG9pbnQgKnBvaW50cywgSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEFkZFBhdGhDdXJ2ZTJJKEdwUGF0aCAqcGF0aCwgR0RJUENPTlNUIEdwUG9pbnQgKnBvaW50cywgSU5UIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCB0ZW5zaW9uKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEFkZFBhdGhDdXJ2ZTNJKEdwUGF0aCAqcGF0aCwgR0RJUENPTlNUIEdwUG9pbnQgKnBvaW50cywgSU5UIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIG9mZnNldCwgSU5UIG51bWJlck9mU2VnbWVudHMsIFJFQUwgdGVuc2lvbik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBBZGRQYXRoQ2xvc2VkQ3VydmVJKEdwUGF0aCAqcGF0aCwgR0RJUENPTlNUIEdwUG9pbnQgKnBvaW50cywgSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEFkZFBhdGhDbG9zZWRDdXJ2ZTJJKEdwUGF0aCAqcGF0aCwgR0RJUENPTlNUIEdwUG9pbnQgKnBvaW50cywgSU5UIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCB0ZW5zaW9uKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEFkZFBhdGhSZWN0YW5nbGVJKEdwUGF0aCAqcGF0aCwgSU5UIHgsIElOVCB5LCBJTlQgd2lkdGgsIElOVCBoZWlnaHQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQWRkUGF0aFJlY3RhbmdsZXNJKEdwUGF0aCAqcGF0aCwgR0RJUENPTlNUIEdwUmVjdCAqcmVjdHMsIElOVCBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBBZGRQYXRoRWxsaXBzZUkoR3BQYXRoICpwYXRoLCBJTlQgeCwgSU5UIHksIElOVCB3aWR0aCwgSU5UIGhlaWdodCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBBZGRQYXRoUGllSShHcFBhdGggKnBhdGgsIElOVCB4LCBJTlQgeSwgSU5UIHdpZHRoLCBJTlQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCBzdGFydEFuZ2xlLCBSRUFMIHN3ZWVwQW5nbGUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQWRkUGF0aFBvbHlnb25JKEdwUGF0aCAqcGF0aCwgR0RJUENPTlNUIEdwUG9pbnQgKnBvaW50cywgSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEZsYXR0ZW5QYXRoKEdwUGF0aCAqcGF0aCwgR3BNYXRyaXgqIG1hdHJpeCwgUkVBTCBmbGF0bmVzcyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBXaW5kaW5nTW9kZU91dGxpbmUoCisgICAgR3BQYXRoICpwYXRoLAorICAgIEdwTWF0cml4ICptYXRyaXgsCisgICAgUkVBTCBmbGF0bmVzcworKTsKKworCisjaWZkZWYgRENSX1VTRV9ORVdfMjAyOTAzCisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBXaWRlblBhdGgoCisgICAgR3BQYXRoICpuYXRpdmVQYXRoLAorICAgIEdwUGVuICpwZW4sCisgICAgR3BNYXRyaXggKm1hdHJpeCwKKyAgICBSRUFMIGZsYXRuZXNzCispOworCisjZWxzZQorCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwV2lkZW5QYXRoV2l0aE1pbmltdW1SZXNvbHV0aW9ucyhHcFBhdGggKnBhdGgsIEdwUGVuICpwZW4sIFJFQUwgbWluWHJlcywKKyAgICAgICAgICAgIFJFQUwgbWluWXJlcywgR3BNYXRyaXggKm1hdHJpeCwgQk9PTCByZW1vdmVTZWxmdEludGVyc2VjdHMpOworCisjZW5kaWYKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFdhcnBQYXRoKEdwUGF0aCAqcGF0aCwgR3BNYXRyaXgqIG1hdHJpeCwKKyAgICAgICAgICAgIEdESVBDT05TVCBHcFBvaW50RiAqcG9pbnRzLCBJTlQgY291bnQsCisgICAgICAgICAgICBSRUFMIHNyY3gsIFJFQUwgc3JjeSwgUkVBTCBzcmN3aWR0aCwgUkVBTCBzcmNoZWlnaHQsCisgICAgICAgICAgICBXYXJwTW9kZSB3YXJwTW9kZSwgUkVBTCBmbGF0bmVzcyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBUcmFuc2Zvcm1QYXRoKEdwUGF0aCogcGF0aCwgR3BNYXRyaXgqIG1hdHJpeCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQYXRoV29ybGRCb3VuZHMoR3BQYXRoKiBwYXRoLCBHcFJlY3RGKiBib3VuZHMsIEdESVBDT05TVCBHcE1hdHJpeCAqbWF0cml4LAorICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIEdwUGVuICpwZW4pOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0UGF0aFdvcmxkQm91bmRzSShHcFBhdGgqIHBhdGgsIEdwUmVjdCogYm91bmRzLCBHRElQQ09OU1QgR3BNYXRyaXggKm1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BQZW4gKnBlbik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBJc1Zpc2libGVQYXRoUG9pbnQoR3BQYXRoKiBwYXRoLCBSRUFMIHgsIFJFQUwgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEJPT0wgKnJlc3VsdCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBJc1Zpc2libGVQYXRoUG9pbnRJKEdwUGF0aCogcGF0aCwgSU5UIHgsIElOVCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEJPT0wgKnJlc3VsdCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBJc091dGxpbmVWaXNpYmxlUGF0aFBvaW50KEdwUGF0aCogcGF0aCwgUkVBTCB4LCBSRUFMIHksIEdwUGVuICpwZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcEdyYXBoaWNzICpncmFwaGljcywgQk9PTCAqcmVzdWx0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcElzT3V0bGluZVZpc2libGVQYXRoUG9pbnRJKEdwUGF0aCogcGF0aCwgSU5UIHgsIElOVCB5LCBHcFBlbiAqcGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBCT09MICpyZXN1bHQpOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUGF0aCBFbnVtZXJhdGlvbiBtZXRob2RzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZVBhdGhJdGVyKEdwUGF0aEl0ZXJhdG9yICoqaXRlcmF0b3IsIEdwUGF0aCogcGF0aCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEZWxldGVQYXRoSXRlcihHcFBhdGhJdGVyYXRvciAqaXRlcmF0b3IpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwUGF0aEl0ZXJOZXh0U3VicGF0aChHcFBhdGhJdGVyYXRvciogaXRlcmF0b3IsIElOVCAqcmVzdWx0Q291bnQsCisgICAgICAgIElOVCogc3RhcnRJbmRleCwgSU5UKiBlbmRJbmRleCwgQk9PTCogaXNDbG9zZWQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwUGF0aEl0ZXJOZXh0U3VicGF0aFBhdGgoR3BQYXRoSXRlcmF0b3IqIGl0ZXJhdG9yLCBJTlQqIHJlc3VsdENvdW50LAorICAgICAgICBHcFBhdGgqIHBhdGgsIEJPT0wqIGlzQ2xvc2VkKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFBhdGhJdGVyTmV4dFBhdGhUeXBlKEdwUGF0aEl0ZXJhdG9yKiBpdGVyYXRvciwgSU5UKiByZXN1bHRDb3VudCwKKyAgICAgICAgQllURSogcGF0aFR5cGUsIElOVCogc3RhcnRJbmRleCwgSU5UKiBlbmRJbmRleCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBQYXRoSXRlck5leHRNYXJrZXIoR3BQYXRoSXRlcmF0b3IqIGl0ZXJhdG9yLCBJTlQgKnJlc3VsdENvdW50LAorICAgICAgICBJTlQqIHN0YXJ0SW5kZXgsIElOVCogZW5kSW5kZXgpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwUGF0aEl0ZXJOZXh0TWFya2VyUGF0aChHcFBhdGhJdGVyYXRvciogaXRlcmF0b3IsIElOVCogcmVzdWx0Q291bnQsCisgICAgICAgIEdwUGF0aCogcGF0aCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBQYXRoSXRlckdldENvdW50KEdwUGF0aEl0ZXJhdG9yKiBpdGVyYXRvciwgSU5UKiBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBQYXRoSXRlckdldFN1YnBhdGhDb3VudChHcFBhdGhJdGVyYXRvciogaXRlcmF0b3IsIElOVCogY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwUGF0aEl0ZXJJc1ZhbGlkKEdwUGF0aEl0ZXJhdG9yKiBpdGVyYXRvciwgQk9PTCogdmFsaWQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwUGF0aEl0ZXJIYXNDdXJ2ZShHcFBhdGhJdGVyYXRvciogaXRlcmF0b3IsIEJPT0wqIGhhc0N1cnZlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFBhdGhJdGVyUmV3aW5kKEdwUGF0aEl0ZXJhdG9yKiBpdGVyYXRvcik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBQYXRoSXRlckVudW1lcmF0ZShHcFBhdGhJdGVyYXRvciogaXRlcmF0b3IsIElOVCogcmVzdWx0Q291bnQsCisgICAgR3BQb2ludEYgKnBvaW50cywgQllURSAqdHlwZXMsIElOVCBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBQYXRoSXRlckNvcHlEYXRhKEdwUGF0aEl0ZXJhdG9yKiBpdGVyYXRvciwgSU5UKiByZXN1bHRDb3VudCwKKyAgICBHcFBvaW50RiogcG9pbnRzLCBCWVRFKiB0eXBlcywgSU5UIHN0YXJ0SW5kZXgsIElOVCBlbmRJbmRleCk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTWF0cml4IG1ldGhvZHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ3JlYXRlTWF0cml4KEdwTWF0cml4ICoqbWF0cml4KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZU1hdHJpeDIoUkVBTCBtMTEsIFJFQUwgbTEyLCBSRUFMIG0yMSwgUkVBTCBtMjIsIFJFQUwgZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgZHksIEdwTWF0cml4ICoqbWF0cml4KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZU1hdHJpeDMoR0RJUENPTlNUIEdwUmVjdEYgKnJlY3QsIEdESVBDT05TVCBHcFBvaW50RiAqZHN0cGxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeCAqKm1hdHJpeCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVNYXRyaXgzSShHRElQQ09OU1QgR3BSZWN0ICpyZWN0LCBHRElQQ09OU1QgR3BQb2ludCAqZHN0cGxnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BNYXRyaXggKiptYXRyaXgpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ2xvbmVNYXRyaXgoR3BNYXRyaXggKm1hdHJpeCwgR3BNYXRyaXggKipjbG9uZU1hdHJpeCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEZWxldGVNYXRyaXgoR3BNYXRyaXggKm1hdHJpeCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRNYXRyaXhFbGVtZW50cyhHcE1hdHJpeCAqbWF0cml4LCBSRUFMIG0xMSwgUkVBTCBtMTIsIFJFQUwgbTIxLCBSRUFMIG0yMiwKKyAgICAgICAgICAgICAgICAgICAgICBSRUFMIGR4LCBSRUFMIGR5KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcE11bHRpcGx5TWF0cml4KEdwTWF0cml4ICptYXRyaXgsIEdwTWF0cml4KiBtYXRyaXgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwTWF0cml4T3JkZXIgb3JkZXIpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwVHJhbnNsYXRlTWF0cml4KEdwTWF0cml4ICptYXRyaXgsIFJFQUwgb2Zmc2V0WCwgUkVBTCBvZmZzZXRZLAorICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeE9yZGVyIG9yZGVyKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNjYWxlTWF0cml4KEdwTWF0cml4ICptYXRyaXgsIFJFQUwgc2NhbGVYLCBSRUFMIHNjYWxlWSwKKyAgICAgICAgICAgICAgICBHcE1hdHJpeE9yZGVyIG9yZGVyKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFJvdGF0ZU1hdHJpeChHcE1hdHJpeCAqbWF0cml4LCBSRUFMIGFuZ2xlLCBHcE1hdHJpeE9yZGVyIG9yZGVyKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNoZWFyTWF0cml4KEdwTWF0cml4ICptYXRyaXgsIFJFQUwgc2hlYXJYLCBSRUFMIHNoZWFyWSwKKyAgICAgICAgICAgICAgICBHcE1hdHJpeE9yZGVyIG9yZGVyKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEludmVydE1hdHJpeChHcE1hdHJpeCAqbWF0cml4KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFRyYW5zZm9ybU1hdHJpeFBvaW50cyhHcE1hdHJpeCAqbWF0cml4LCBHcFBvaW50RiAqcHRzLCBJTlQgY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwVHJhbnNmb3JtTWF0cml4UG9pbnRzSShHcE1hdHJpeCAqbWF0cml4LCBHcFBvaW50ICpwdHMsIElOVCBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBWZWN0b3JUcmFuc2Zvcm1NYXRyaXhQb2ludHMoR3BNYXRyaXggKm1hdHJpeCwgR3BQb2ludEYgKnB0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFZlY3RvclRyYW5zZm9ybU1hdHJpeFBvaW50c0koR3BNYXRyaXggKm1hdHJpeCwgR3BQb2ludCAqcHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0TWF0cml4RWxlbWVudHMoR0RJUENPTlNUIEdwTWF0cml4ICptYXRyaXgsIFJFQUwgKm1hdHJpeE91dCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBJc01hdHJpeEludmVydGlibGUoR0RJUENPTlNUIEdwTWF0cml4ICptYXRyaXgsIEJPT0wgKnJlc3VsdCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBJc01hdHJpeElkZW50aXR5KEdESVBDT05TVCBHcE1hdHJpeCAqbWF0cml4LCBCT09MICpyZXN1bHQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwSXNNYXRyaXhFcXVhbChHRElQQ09OU1QgR3BNYXRyaXggKm1hdHJpeCwgR0RJUENPTlNUIEdwTWF0cml4ICptYXRyaXgyLCBCT09MICpyZXN1bHQpOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlZ2lvbiBtZXRob2RzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZVJlZ2lvbihHcFJlZ2lvbiAqKnJlZ2lvbik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVSZWdpb25SZWN0KEdESVBDT05TVCBHcFJlY3RGICpyZWN0LCBHcFJlZ2lvbiAqKnJlZ2lvbik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVSZWdpb25SZWN0SShHRElQQ09OU1QgR3BSZWN0ICpyZWN0LCBHcFJlZ2lvbiAqKnJlZ2lvbik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVSZWdpb25QYXRoKEdwUGF0aCAqcGF0aCwgR3BSZWdpb24gKipyZWdpb24pOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ3JlYXRlUmVnaW9uUmduRGF0YShHRElQQ09OU1QgQllURSAqcmVnaW9uRGF0YSwgSU5UIHNpemUsIEdwUmVnaW9uICoqcmVnaW9uKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZVJlZ2lvbkhyZ24oSFJHTiBoUmduLCBHcFJlZ2lvbiAqKnJlZ2lvbik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDbG9uZVJlZ2lvbihHcFJlZ2lvbiAqcmVnaW9uLCBHcFJlZ2lvbiAqKmNsb25lUmVnaW9uKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcERlbGV0ZVJlZ2lvbihHcFJlZ2lvbiAqcmVnaW9uKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldEluZmluaXRlKEdwUmVnaW9uICpyZWdpb24pOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0RW1wdHkoR3BSZWdpb24gKnJlZ2lvbik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDb21iaW5lUmVnaW9uUmVjdChHcFJlZ2lvbiAqcmVnaW9uLCBHRElQQ09OU1QgR3BSZWN0RiAqcmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICBDb21iaW5lTW9kZSBjb21iaW5lTW9kZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDb21iaW5lUmVnaW9uUmVjdEkoR3BSZWdpb24gKnJlZ2lvbiwgR0RJUENPTlNUIEdwUmVjdCAqcmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgQ29tYmluZU1vZGUgY29tYmluZU1vZGUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ29tYmluZVJlZ2lvblBhdGgoR3BSZWdpb24gKnJlZ2lvbiwgR3BQYXRoICpwYXRoLCBDb21iaW5lTW9kZSBjb21iaW5lTW9kZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDb21iaW5lUmVnaW9uUmVnaW9uKEdwUmVnaW9uICpyZWdpb24sICBHcFJlZ2lvbiAqcmVnaW9uMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbWJpbmVNb2RlIGNvbWJpbmVNb2RlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFRyYW5zbGF0ZVJlZ2lvbihHcFJlZ2lvbiAqcmVnaW9uLCBSRUFMIGR4LCBSRUFMIGR5KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFRyYW5zbGF0ZVJlZ2lvbkkoR3BSZWdpb24gKnJlZ2lvbiwgSU5UIGR4LCBJTlQgZHkpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwVHJhbnNmb3JtUmVnaW9uKEdwUmVnaW9uICpyZWdpb24sIEdwTWF0cml4ICptYXRyaXgpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0UmVnaW9uQm91bmRzKEdwUmVnaW9uICpyZWdpb24sIEdwR3JhcGhpY3MgKmdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcFJlY3RGICpyZWN0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFJlZ2lvbkJvdW5kc0koR3BSZWdpb24gKnJlZ2lvbiwgR3BHcmFwaGljcyAqZ3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwUmVjdCAqcmVjdCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRSZWdpb25IUmduKEdwUmVnaW9uICpyZWdpb24sIEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBIUkdOICpoUmduKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcElzRW1wdHlSZWdpb24oR3BSZWdpb24gKnJlZ2lvbiwgR3BHcmFwaGljcyAqZ3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MICpyZXN1bHQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwSXNJbmZpbml0ZVJlZ2lvbihHcFJlZ2lvbiAqcmVnaW9uLCBHcEdyYXBoaWNzICpncmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgKnJlc3VsdCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBJc0VxdWFsUmVnaW9uKEdwUmVnaW9uICpyZWdpb24sIEdwUmVnaW9uICpyZWdpb24yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEJPT0wgKnJlc3VsdCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRSZWdpb25EYXRhU2l6ZShHcFJlZ2lvbiAqcmVnaW9uLCBVSU5UICogYnVmZmVyU2l6ZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRSZWdpb25EYXRhKEdwUmVnaW9uICpyZWdpb24sIEJZVEUgKiBidWZmZXIsIFVJTlQgYnVmZmVyU2l6ZSwgVUlOVCAqIHNpemVGaWxsZWQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwSXNWaXNpYmxlUmVnaW9uUG9pbnQoR3BSZWdpb24gKnJlZ2lvbiwgUkVBTCB4LCBSRUFMIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEJPT0wgKnJlc3VsdCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBJc1Zpc2libGVSZWdpb25Qb2ludEkoR3BSZWdpb24gKnJlZ2lvbiwgSU5UIHgsIElOVCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBCT09MICpyZXN1bHQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwSXNWaXNpYmxlUmVnaW9uUmVjdChHcFJlZ2lvbiAqcmVnaW9uLCBSRUFMIHgsIFJFQUwgeSwgUkVBTCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgaGVpZ2h0LCBHcEdyYXBoaWNzICpncmFwaGljcywgQk9PTCAqcmVzdWx0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcElzVmlzaWJsZVJlZ2lvblJlY3RJKEdwUmVnaW9uICpyZWdpb24sIElOVCB4LCBJTlQgeSwgSU5UIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBoZWlnaHQsIEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBCT09MICpyZXN1bHQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0UmVnaW9uU2NhbnNDb3VudChHcFJlZ2lvbiAqcmVnaW9uLCBVSU5UKiBjb3VudCwgR3BNYXRyaXgqIG1hdHJpeCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRSZWdpb25TY2FucyhHcFJlZ2lvbiAqcmVnaW9uLCBHcFJlY3RGKiByZWN0cywgSU5UKiBjb3VudCwgR3BNYXRyaXgqIG1hdHJpeCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRSZWdpb25TY2Fuc0koR3BSZWdpb24gKnJlZ2lvbiwgR3BSZWN0KiByZWN0cywgSU5UKiBjb3VudCwgR3BNYXRyaXgqIG1hdHJpeCk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQnJ1c2ggbWV0aG9kcworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDbG9uZUJydXNoKEdwQnJ1c2ggKmJydXNoLCBHcEJydXNoICoqY2xvbmVCcnVzaCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEZWxldGVCcnVzaChHcEJydXNoICpicnVzaCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRCcnVzaFR5cGUoR3BCcnVzaCAqYnJ1c2gsIEdwQnJ1c2hUeXBlICp0eXBlKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBIYXRjaCBCcnVzaCBtZXRob2RzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZUhhdGNoQnJ1c2goR3BIYXRjaFN0eWxlIGhhdGNoc3R5bGUsIEFSR0IgZm9yZWNvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSR0IgYmFja2NvbCwgR3BIYXRjaCAqKmJydXNoKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldEhhdGNoU3R5bGUoR3BIYXRjaCAqYnJ1c2gsIEdwSGF0Y2hTdHlsZSAqaGF0Y2hzdHlsZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRIYXRjaEZvcmVncm91bmRDb2xvcihHcEhhdGNoICpicnVzaCwgQVJHQiogZm9yZWNvbCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRIYXRjaEJhY2tncm91bmRDb2xvcihHcEhhdGNoICpicnVzaCwgQVJHQiogYmFja2NvbCk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGV4dHVyZSBCcnVzaCBtZXRob2RzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZVRleHR1cmUoR3BJbWFnZSAqaW1hZ2UsIEdwV3JhcE1vZGUgd3JhcG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcFRleHR1cmUgKip0ZXh0dXJlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZVRleHR1cmUyKEdwSW1hZ2UgKmltYWdlLCBHcFdyYXBNb2RlIHdyYXBtb2RlLCBSRUFMIHgsCisgICAgICAgICAgICAgICAgICAgUkVBTCB5LCBSRUFMIHdpZHRoLCBSRUFMIGhlaWdodCwgR3BUZXh0dXJlICoqdGV4dHVyZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVUZXh0dXJlSUEoR3BJbWFnZSAqaW1hZ2UsIEdESVBDT05TVCBHcEltYWdlQXR0cmlidXRlcyAqaW1hZ2VBdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICBSRUFMIHgsIFJFQUwgeSwgUkVBTCB3aWR0aCwgUkVBTCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgIEdwVGV4dHVyZSAqKnRleHR1cmUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ3JlYXRlVGV4dHVyZTJJKEdwSW1hZ2UgKmltYWdlLCBHcFdyYXBNb2RlIHdyYXBtb2RlLCBJTlQgeCwKKyAgICAgICAgICAgICAgICAgICAgSU5UIHksIElOVCB3aWR0aCwgSU5UIGhlaWdodCwgR3BUZXh0dXJlICoqdGV4dHVyZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVUZXh0dXJlSUFJKEdwSW1hZ2UgKmltYWdlLCBHRElQQ09OU1QgR3BJbWFnZUF0dHJpYnV0ZXMgKmltYWdlQXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgIElOVCB4LCBJTlQgeSwgSU5UIHdpZHRoLCBJTlQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgR3BUZXh0dXJlICoqdGV4dHVyZSk7CisKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFRleHR1cmVUcmFuc2Zvcm0oR3BUZXh0dXJlICpicnVzaCwgR3BNYXRyaXggKm1hdHJpeCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRUZXh0dXJlVHJhbnNmb3JtKEdwVGV4dHVyZSAqYnJ1c2gsIEdESVBDT05TVCBHcE1hdHJpeCAqbWF0cml4KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFJlc2V0VGV4dHVyZVRyYW5zZm9ybShHcFRleHR1cmUqIGJydXNoKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcE11bHRpcGx5VGV4dHVyZVRyYW5zZm9ybShHcFRleHR1cmUqIGJydXNoLCBHRElQQ09OU1QgR3BNYXRyaXggKm1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeE9yZGVyIG9yZGVyKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFRyYW5zbGF0ZVRleHR1cmVUcmFuc2Zvcm0oR3BUZXh0dXJlKiBicnVzaCwgUkVBTCBkeCwgUkVBTCBkeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeE9yZGVyIG9yZGVyKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNjYWxlVGV4dHVyZVRyYW5zZm9ybShHcFRleHR1cmUqIGJydXNoLCBSRUFMIHN4LCBSRUFMIHN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwTWF0cml4T3JkZXIgb3JkZXIpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwUm90YXRlVGV4dHVyZVRyYW5zZm9ybShHcFRleHR1cmUqIGJydXNoLCBSRUFMIGFuZ2xlLCBHcE1hdHJpeE9yZGVyIG9yZGVyKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFRleHR1cmVXcmFwTW9kZShHcFRleHR1cmUgKmJydXNoLCBHcFdyYXBNb2RlIHdyYXBtb2RlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFRleHR1cmVXcmFwTW9kZShHcFRleHR1cmUgKmJydXNoLCBHcFdyYXBNb2RlICp3cmFwbW9kZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRUZXh0dXJlSW1hZ2UoR3BUZXh0dXJlICpicnVzaCwgR3BJbWFnZSAqKmltYWdlKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTb2xpZCBCcnVzaCBtZXRob2RzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZVNvbGlkRmlsbChBUkdCIGNvbG9yLCBHcFNvbGlkRmlsbCAqKmJydXNoKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFNvbGlkRmlsbENvbG9yKEdwU29saWRGaWxsICpicnVzaCwgQVJHQiBjb2xvcik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRTb2xpZEZpbGxDb2xvcihHcFNvbGlkRmlsbCAqYnJ1c2gsIEFSR0IgKmNvbG9yKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMaW5lQnJ1c2ggbWV0aG9kcworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVMaW5lQnJ1c2goR0RJUENPTlNUIEdwUG9pbnRGKiBwb2ludDEsCisgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcFBvaW50RiogcG9pbnQyLAorICAgICAgICAgICAgICAgICAgICBBUkdCIGNvbG9yMSwgQVJHQiBjb2xvcjIsCisgICAgICAgICAgICAgICAgICAgIEdwV3JhcE1vZGUgd3JhcE1vZGUsCisgICAgICAgICAgICAgICAgICAgIEdwTGluZUdyYWRpZW50ICoqbGluZUdyYWRpZW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZUxpbmVCcnVzaEkoR0RJUENPTlNUIEdwUG9pbnQqIHBvaW50MSwKKyAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcFBvaW50KiBwb2ludDIsCisgICAgICAgICAgICAgICAgICAgICBBUkdCIGNvbG9yMSwgQVJHQiBjb2xvcjIsCisgICAgICAgICAgICAgICAgICAgICBHcFdyYXBNb2RlIHdyYXBNb2RlLAorICAgICAgICAgICAgICAgICAgICAgR3BMaW5lR3JhZGllbnQgKipsaW5lR3JhZGllbnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ3JlYXRlTGluZUJydXNoRnJvbVJlY3QoR0RJUENPTlNUIEdwUmVjdEYqIHJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJHQiBjb2xvcjEsIEFSR0IgY29sb3IyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmVhckdyYWRpZW50TW9kZSBtb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwV3JhcE1vZGUgd3JhcE1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BMaW5lR3JhZGllbnQgKipsaW5lR3JhZGllbnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ3JlYXRlTGluZUJydXNoRnJvbVJlY3RJKEdESVBDT05TVCBHcFJlY3QqIHJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSR0IgY29sb3IxLCBBUkdCIGNvbG9yMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZWFyR3JhZGllbnRNb2RlIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwV3JhcE1vZGUgd3JhcE1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwTGluZUdyYWRpZW50ICoqbGluZUdyYWRpZW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZUxpbmVCcnVzaEZyb21SZWN0V2l0aEFuZ2xlKEdESVBDT05TVCBHcFJlY3RGKiByZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSR0IgY29sb3IxLCBBUkdCIGNvbG9yMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMIGFuZ2xlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgaXNBbmdsZVNjYWxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwV3JhcE1vZGUgd3JhcE1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BMaW5lR3JhZGllbnQgKipsaW5lR3JhZGllbnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ3JlYXRlTGluZUJydXNoRnJvbVJlY3RXaXRoQW5nbGVJKEdESVBDT05TVCBHcFJlY3QqIHJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJHQiBjb2xvcjEsIEFSR0IgY29sb3IyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgYW5nbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCBpc0FuZ2xlU2NhbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BXcmFwTW9kZSB3cmFwTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcExpbmVHcmFkaWVudCAqKmxpbmVHcmFkaWVudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRMaW5lUG9pbnRzKEdwTGluZUdyYWRpZW50ICpicnVzaCwKKyAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcFBvaW50RiogcG9pbnQxLAorICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIEdwUG9pbnRGKiBwb2ludDIpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0TGluZVBvaW50c0koR3BMaW5lR3JhZGllbnQgKmJydXNoLAorICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcFBvaW50KiBwb2ludDEsCisgICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIEdwUG9pbnQqIHBvaW50Mik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRMaW5lUG9pbnRzKEdwTGluZUdyYWRpZW50ICpicnVzaCwgR3BQb2ludEYqIHBvaW50cyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRMaW5lUG9pbnRzSShHcExpbmVHcmFkaWVudCAqYnJ1c2gsIEdwUG9pbnQqIHBvaW50cyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRMaW5lQ29sb3JzKEdwTGluZUdyYWRpZW50ICpicnVzaCwgQVJHQiBjb2xvcjEsIEFSR0IgY29sb3IyKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldExpbmVDb2xvcnMoR3BMaW5lR3JhZGllbnQgKmJydXNoLCBBUkdCKiBjb2xvcnMpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0TGluZVJlY3QoR3BMaW5lR3JhZGllbnQgKmJydXNoLCBHcFJlY3RGICpyZWN0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldExpbmVSZWN0SShHcExpbmVHcmFkaWVudCAqYnJ1c2gsIEdwUmVjdCAqcmVjdCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRMaW5lR2FtbWFDb3JyZWN0aW9uKEdwTGluZUdyYWRpZW50ICpicnVzaCwgQk9PTCB1c2VHYW1tYUNvcnJlY3Rpb24pOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0TGluZUdhbW1hQ29ycmVjdGlvbihHcExpbmVHcmFkaWVudCAqYnJ1c2gsIEJPT0wgKnVzZUdhbW1hQ29ycmVjdGlvbik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRMaW5lQmxlbmRDb3VudChHcExpbmVHcmFkaWVudCAqYnJ1c2gsIElOVCAqY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0TGluZUJsZW5kKEdwTGluZUdyYWRpZW50ICpicnVzaCwgUkVBTCAqYmxlbmQsIFJFQUwqIHBvc2l0aW9ucywKKyAgICAgICAgICAgICAgICAgSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldExpbmVCbGVuZChHcExpbmVHcmFkaWVudCAqYnJ1c2gsIEdESVBDT05TVCBSRUFMICpibGVuZCwKKyAgICAgICAgICAgICAgICAgR0RJUENPTlNUIFJFQUwqIHBvc2l0aW9ucywgSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldExpbmVQcmVzZXRCbGVuZENvdW50KEdwTGluZUdyYWRpZW50ICpicnVzaCwgSU5UICpjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRMaW5lUHJlc2V0QmxlbmQoR3BMaW5lR3JhZGllbnQgKmJydXNoLCBBUkdCICpibGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMKiBwb3NpdGlvbnMsIElOVCBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRMaW5lUHJlc2V0QmxlbmQoR3BMaW5lR3JhZGllbnQgKmJydXNoLCBHRElQQ09OU1QgQVJHQiAqYmxlbmQsCisgICAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBSRUFMKiBwb3NpdGlvbnMsIElOVCBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRMaW5lU2lnbWFCbGVuZChHcExpbmVHcmFkaWVudCAqYnJ1c2gsIFJFQUwgZm9jdXMsIFJFQUwgc2NhbGUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0TGluZUxpbmVhckJsZW5kKEdwTGluZUdyYWRpZW50ICpicnVzaCwgUkVBTCBmb2N1cywgUkVBTCBzY2FsZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRMaW5lV3JhcE1vZGUoR3BMaW5lR3JhZGllbnQgKmJydXNoLCBHcFdyYXBNb2RlIHdyYXBtb2RlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldExpbmVXcmFwTW9kZShHcExpbmVHcmFkaWVudCAqYnJ1c2gsIEdwV3JhcE1vZGUgKndyYXBtb2RlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldExpbmVUcmFuc2Zvcm0oR3BMaW5lR3JhZGllbnQgKmJydXNoLCBHcE1hdHJpeCAqbWF0cml4KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldExpbmVUcmFuc2Zvcm0oR3BMaW5lR3JhZGllbnQgKmJydXNoLCBHRElQQ09OU1QgR3BNYXRyaXggKm1hdHJpeCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBSZXNldExpbmVUcmFuc2Zvcm0oR3BMaW5lR3JhZGllbnQqIGJydXNoKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcE11bHRpcGx5TGluZVRyYW5zZm9ybShHcExpbmVHcmFkaWVudCogYnJ1c2gsIEdESVBDT05TVCBHcE1hdHJpeCAqbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwTWF0cml4T3JkZXIgb3JkZXIpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwVHJhbnNsYXRlTGluZVRyYW5zZm9ybShHcExpbmVHcmFkaWVudCogYnJ1c2gsIFJFQUwgZHgsIFJFQUwgZHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BNYXRyaXhPcmRlciBvcmRlcik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTY2FsZUxpbmVUcmFuc2Zvcm0oR3BMaW5lR3JhZGllbnQqIGJydXNoLCBSRUFMIHN4LCBSRUFMIHN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwTWF0cml4T3JkZXIgb3JkZXIpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwUm90YXRlTGluZVRyYW5zZm9ybShHcExpbmVHcmFkaWVudCogYnJ1c2gsIFJFQUwgYW5nbGUsIEdwTWF0cml4T3JkZXIgb3JkZXIpOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFBhdGhHcmFkaWVudCBCcnVzaAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVQYXRoR3JhZGllbnQoR0RJUENPTlNUIEdwUG9pbnRGKiBwb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcFdyYXBNb2RlIHdyYXBNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BQYXRoR3JhZGllbnQgKipwb2x5R3JhZGllbnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ3JlYXRlUGF0aEdyYWRpZW50SShHRElQQ09OU1QgR3BQb2ludCogcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BXcmFwTW9kZSB3cmFwTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwUGF0aEdyYWRpZW50ICoqcG9seUdyYWRpZW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZVBhdGhHcmFkaWVudEZyb21QYXRoKEdESVBDT05TVCBHcFBhdGgqIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcFBhdGhHcmFkaWVudCAqKnBvbHlHcmFkaWVudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQYXRoR3JhZGllbnRDZW50ZXJDb2xvcigKKyAgICAgICAgICAgICAgICAgICAgICAgIEdwUGF0aEdyYWRpZW50ICpicnVzaCwgQVJHQiogY29sb3JzKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFBhdGhHcmFkaWVudENlbnRlckNvbG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgR3BQYXRoR3JhZGllbnQgKmJydXNoLCBBUkdCIGNvbG9ycyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQYXRoR3JhZGllbnRTdXJyb3VuZENvbG9yc1dpdGhDb3VudCgKKyAgICAgICAgICAgICAgICAgICAgICAgIEdwUGF0aEdyYWRpZW50ICpicnVzaCwgQVJHQiogY29sb3IsIElOVCogY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0UGF0aEdyYWRpZW50U3Vycm91bmRDb2xvcnNXaXRoQ291bnQoCisgICAgICAgICAgICAgICAgICAgICAgICBHcFBhdGhHcmFkaWVudCAqYnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgQVJHQiogY29sb3IsIElOVCogY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0UGF0aEdyYWRpZW50UGF0aChHcFBhdGhHcmFkaWVudCAqYnJ1c2gsIEdwUGF0aCAqcGF0aCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRQYXRoR3JhZGllbnRQYXRoKEdwUGF0aEdyYWRpZW50ICpicnVzaCwgR0RJUENPTlNUIEdwUGF0aCAqcGF0aCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQYXRoR3JhZGllbnRDZW50ZXJQb2ludCgKKyAgICAgICAgICAgICAgICAgICAgICAgIEdwUGF0aEdyYWRpZW50ICpicnVzaCwgR3BQb2ludEYqIHBvaW50cyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQYXRoR3JhZGllbnRDZW50ZXJQb2ludEkoCisgICAgICAgICAgICAgICAgICAgICAgICBHcFBhdGhHcmFkaWVudCAqYnJ1c2gsIEdwUG9pbnQqIHBvaW50cyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRQYXRoR3JhZGllbnRDZW50ZXJQb2ludCgKKyAgICAgICAgICAgICAgICAgICAgICAgIEdwUGF0aEdyYWRpZW50ICpicnVzaCwgR0RJUENPTlNUIEdwUG9pbnRGKiBwb2ludHMpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0UGF0aEdyYWRpZW50Q2VudGVyUG9pbnRJKAorICAgICAgICAgICAgICAgICAgICAgICAgR3BQYXRoR3JhZGllbnQgKmJydXNoLCBHRElQQ09OU1QgR3BQb2ludCogcG9pbnRzKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFBhdGhHcmFkaWVudFJlY3QoR3BQYXRoR3JhZGllbnQgKmJydXNoLCBHcFJlY3RGICpyZWN0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFBhdGhHcmFkaWVudFJlY3RJKEdwUGF0aEdyYWRpZW50ICpicnVzaCwgR3BSZWN0ICpyZWN0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFBhdGhHcmFkaWVudFBvaW50Q291bnQoR3BQYXRoR3JhZGllbnQgKmJydXNoLCBJTlQqIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFBhdGhHcmFkaWVudFN1cnJvdW5kQ29sb3JDb3VudChHcFBhdGhHcmFkaWVudCAqYnJ1c2gsIElOVCogY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0UGF0aEdyYWRpZW50R2FtbWFDb3JyZWN0aW9uKEdwUGF0aEdyYWRpZW50ICpicnVzaCwgQk9PTCB1c2VHYW1tYUNvcnJlY3Rpb24pOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0UGF0aEdyYWRpZW50R2FtbWFDb3JyZWN0aW9uKEdwUGF0aEdyYWRpZW50ICpicnVzaCwgQk9PTCAqdXNlR2FtbWFDb3JyZWN0aW9uKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFBhdGhHcmFkaWVudEJsZW5kQ291bnQoR3BQYXRoR3JhZGllbnQgKmJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UICpjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQYXRoR3JhZGllbnRCbGVuZChHcFBhdGhHcmFkaWVudCAqYnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMICpibGVuZCwgUkVBTCAqcG9zaXRpb25zLCBJTlQgY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0UGF0aEdyYWRpZW50QmxlbmQoR3BQYXRoR3JhZGllbnQgKmJydXNoLAorICAgICAgICAgICAgICAgIEdESVBDT05TVCBSRUFMICpibGVuZCwgR0RJUENPTlNUIFJFQUwgKnBvc2l0aW9ucywgSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFBhdGhHcmFkaWVudFByZXNldEJsZW5kQ291bnQoR3BQYXRoR3JhZGllbnQgKmJydXNoLCBJTlQgKmNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFBhdGhHcmFkaWVudFByZXNldEJsZW5kKEdwUGF0aEdyYWRpZW50ICpicnVzaCwgQVJHQiAqYmxlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMKiBwb3NpdGlvbnMsIElOVCBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRQYXRoR3JhZGllbnRQcmVzZXRCbGVuZChHcFBhdGhHcmFkaWVudCAqYnJ1c2gsIEdESVBDT05TVCBBUkdCICpibGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgUkVBTCogcG9zaXRpb25zLCBJTlQgY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0UGF0aEdyYWRpZW50U2lnbWFCbGVuZChHcFBhdGhHcmFkaWVudCAqYnJ1c2gsIFJFQUwgZm9jdXMsIFJFQUwgc2NhbGUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0UGF0aEdyYWRpZW50TGluZWFyQmxlbmQoR3BQYXRoR3JhZGllbnQgKmJydXNoLCBSRUFMIGZvY3VzLCBSRUFMIHNjYWxlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFBhdGhHcmFkaWVudFdyYXBNb2RlKEdwUGF0aEdyYWRpZW50ICpicnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BXcmFwTW9kZSAqd3JhcG1vZGUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0UGF0aEdyYWRpZW50V3JhcE1vZGUoR3BQYXRoR3JhZGllbnQgKmJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcFdyYXBNb2RlIHdyYXBtb2RlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFBhdGhHcmFkaWVudFRyYW5zZm9ybShHcFBhdGhHcmFkaWVudCAqYnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeCAqbWF0cml4KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFBhdGhHcmFkaWVudFRyYW5zZm9ybShHcFBhdGhHcmFkaWVudCAqYnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeCAqbWF0cml4KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFJlc2V0UGF0aEdyYWRpZW50VHJhbnNmb3JtKEdwUGF0aEdyYWRpZW50KiBicnVzaCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBNdWx0aXBseVBhdGhHcmFkaWVudFRyYW5zZm9ybShHcFBhdGhHcmFkaWVudCogYnJ1c2gsIEdESVBDT05TVCBHcE1hdHJpeCAqbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwTWF0cml4T3JkZXIgb3JkZXIpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwVHJhbnNsYXRlUGF0aEdyYWRpZW50VHJhbnNmb3JtKEdwUGF0aEdyYWRpZW50KiBicnVzaCwgUkVBTCBkeCwgUkVBTCBkeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeE9yZGVyIG9yZGVyKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNjYWxlUGF0aEdyYWRpZW50VHJhbnNmb3JtKEdwUGF0aEdyYWRpZW50KiBicnVzaCwgUkVBTCBzeCwgUkVBTCBzeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeE9yZGVyIG9yZGVyKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFJvdGF0ZVBhdGhHcmFkaWVudFRyYW5zZm9ybShHcFBhdGhHcmFkaWVudCogYnJ1c2gsIFJFQUwgYW5nbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BNYXRyaXhPcmRlciBvcmRlcik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQYXRoR3JhZGllbnRGb2N1c1NjYWxlcyhHcFBhdGhHcmFkaWVudCAqYnJ1c2gsIFJFQUwqIHhTY2FsZSwgUkVBTCogeVNjYWxlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFBhdGhHcmFkaWVudEZvY3VzU2NhbGVzKEdwUGF0aEdyYWRpZW50ICpicnVzaCwgUkVBTCB4U2NhbGUsIFJFQUwgeVNjYWxlKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQZW4gbWV0aG9kcworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVQZW4xKEFSR0IgY29sb3IsIFJFQUwgd2lkdGgsIEdwVW5pdCB1bml0LCBHcFBlbiAqKnBlbik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVQZW4yKEdwQnJ1c2ggKmJydXNoLCBSRUFMIHdpZHRoLCBHcFVuaXQgdW5pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdwUGVuICoqcGVuKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENsb25lUGVuKEdwUGVuICpwZW4sIEdwUGVuICoqY2xvbmVwZW4pOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRGVsZXRlUGVuKEdwUGVuICpwZW4pOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0UGVuV2lkdGgoR3BQZW4gKnBlbiwgUkVBTCB3aWR0aCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQZW5XaWR0aChHcFBlbiAqcGVuLCBSRUFMICp3aWR0aCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRQZW5Vbml0KEdwUGVuICpwZW4sIEdwVW5pdCB1bml0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFBlblVuaXQoR3BQZW4gKnBlbiwgR3BVbml0ICp1bml0KTsKKworI2lmZGVmIERDUl9VU0VfTkVXXzE5NzgxOQorR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFBlbkxpbmVDYXAxOTc4MTkoR3BQZW4gKnBlbiwgR3BMaW5lQ2FwIHN0YXJ0Q2FwLCBHcExpbmVDYXAgZW5kQ2FwLAorICAgICAgICAgICAgICAgICAgR3BEYXNoQ2FwIGRhc2hDYXApOworI2Vsc2UKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRQZW5MaW5lQ2FwKEdwUGVuICpwZW4sIEdwTGluZUNhcCBzdGFydENhcCwgR3BMaW5lQ2FwIGVuZENhcCwKKyAgICAgICAgICAgICAgICAgIEdwTGluZUNhcCBkYXNoQ2FwKTsKKyNlbmRpZiAvLyBEQ1JfVVNFX05FV18xOTc4MTkKKworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0UGVuU3RhcnRDYXAoR3BQZW4gKnBlbiwgR3BMaW5lQ2FwIHN0YXJ0Q2FwKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFBlbkVuZENhcChHcFBlbiAqcGVuLCBHcExpbmVDYXAgZW5kQ2FwKTsKKworI2lmZGVmIERDUl9VU0VfTkVXXzE5NzgxOQorR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFBlbkRhc2hDYXAxOTc4MTkoR3BQZW4gKnBlbiwgR3BEYXNoQ2FwIGRhc2hDYXApOworI2Vsc2UKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRQZW5EYXNoQ2FwKEdwUGVuICpwZW4sIEdwTGluZUNhcCBkYXNoQ2FwKTsKKyNlbmRpZiAvLyBEQ1JfVVNFX05FV18xOTc4MTkKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFBlblN0YXJ0Q2FwKEdwUGVuICpwZW4sIEdwTGluZUNhcCAqc3RhcnRDYXApOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0UGVuRW5kQ2FwKEdwUGVuICpwZW4sIEdwTGluZUNhcCAqZW5kQ2FwKTsKKworI2lmZGVmIERDUl9VU0VfTkVXXzE5NzgxOQorR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFBlbkRhc2hDYXAxOTc4MTkoR3BQZW4gKnBlbiwgR3BEYXNoQ2FwICpkYXNoQ2FwKTsKKyNlbHNlCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0UGVuRGFzaENhcChHcFBlbiAqcGVuLCBHcExpbmVDYXAgKmRhc2hDYXApOworI2VuZGlmIC8vIERDUl9VU0VfTkVXXzE5NzgxOQorCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0UGVuTGluZUpvaW4oR3BQZW4gKnBlbiwgR3BMaW5lSm9pbiBsaW5lSm9pbik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQZW5MaW5lSm9pbihHcFBlbiAqcGVuLCBHcExpbmVKb2luICpsaW5lSm9pbik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRQZW5DdXN0b21TdGFydENhcChHcFBlbiAqcGVuLCBHcEN1c3RvbUxpbmVDYXAqIGN1c3RvbUNhcCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQZW5DdXN0b21TdGFydENhcChHcFBlbiAqcGVuLCBHcEN1c3RvbUxpbmVDYXAqKiBjdXN0b21DYXApOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0UGVuQ3VzdG9tRW5kQ2FwKEdwUGVuICpwZW4sIEdwQ3VzdG9tTGluZUNhcCogY3VzdG9tQ2FwKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFBlbkN1c3RvbUVuZENhcChHcFBlbiAqcGVuLCBHcEN1c3RvbUxpbmVDYXAqKiBjdXN0b21DYXApOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0UGVuTWl0ZXJMaW1pdChHcFBlbiAqcGVuLCBSRUFMIG1pdGVyTGltaXQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0UGVuTWl0ZXJMaW1pdChHcFBlbiAqcGVuLCBSRUFMICptaXRlckxpbWl0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFBlbk1vZGUoR3BQZW4gKnBlbiwgR3BQZW5BbGlnbm1lbnQgcGVuTW9kZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQZW5Nb2RlKEdwUGVuICpwZW4sIEdwUGVuQWxpZ25tZW50ICpwZW5Nb2RlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFBlblRyYW5zZm9ybShHcFBlbiAqcGVuLCBHcE1hdHJpeCAqbWF0cml4KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFBlblRyYW5zZm9ybShHcFBlbiAqcGVuLCBHcE1hdHJpeCAqbWF0cml4KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFJlc2V0UGVuVHJhbnNmb3JtKEdwUGVuICpwZW4pOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwTXVsdGlwbHlQZW5UcmFuc2Zvcm0oR3BQZW4gKnBlbiwgR0RJUENPTlNUIEdwTWF0cml4ICptYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeE9yZGVyIG9yZGVyKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFRyYW5zbGF0ZVBlblRyYW5zZm9ybShHcFBlbiAqcGVuLCBSRUFMIGR4LCBSRUFMIGR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwTWF0cml4T3JkZXIgb3JkZXIpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2NhbGVQZW5UcmFuc2Zvcm0oR3BQZW4gKnBlbiwgUkVBTCBzeCwgUkVBTCBzeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeE9yZGVyIG9yZGVyKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFJvdGF0ZVBlblRyYW5zZm9ybShHcFBlbiAqcGVuLCBSRUFMIGFuZ2xlLCBHcE1hdHJpeE9yZGVyIG9yZGVyKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFBlbkNvbG9yKEdwUGVuICpwZW4sIEFSR0IgYXJnYik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQZW5Db2xvcihHcFBlbiAqcGVuLCBBUkdCICphcmdiKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFBlbkJydXNoRmlsbChHcFBlbiAqcGVuLCBHcEJydXNoICpicnVzaCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQZW5CcnVzaEZpbGwoR3BQZW4gKnBlbiwgR3BCcnVzaCAqKmJydXNoKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFBlbkZpbGxUeXBlKEdwUGVuICpwZW4sIEdwUGVuVHlwZSogdHlwZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQZW5EYXNoU3R5bGUoR3BQZW4gKnBlbiwgR3BEYXNoU3R5bGUgKmRhc2hzdHlsZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRQZW5EYXNoU3R5bGUoR3BQZW4gKnBlbiwgR3BEYXNoU3R5bGUgZGFzaHN0eWxlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFBlbkRhc2hPZmZzZXQoR3BQZW4gKnBlbiwgUkVBTCAqb2Zmc2V0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFBlbkRhc2hPZmZzZXQoR3BQZW4gKnBlbiwgUkVBTCBvZmZzZXQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0UGVuRGFzaENvdW50KEdwUGVuICpwZW4sIElOVCAqY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0UGVuRGFzaEFycmF5KEdwUGVuICpwZW4sIEdESVBDT05TVCBSRUFMICpkYXNoLCBJTlQgY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0UGVuRGFzaEFycmF5KEdwUGVuICpwZW4sIFJFQUwgKmRhc2gsIElOVCBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQZW5Db21wb3VuZENvdW50KEdwUGVuICpwZW4sIElOVCAqY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0UGVuQ29tcG91bmRBcnJheShHcFBlbiAqcGVuLCBHRElQQ09OU1QgUkVBTCAqZGFzaCwgSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFBlbkNvbXBvdW5kQXJyYXkoR3BQZW4gKnBlbiwgUkVBTCAqZGFzaCwgSU5UIGNvdW50KTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDdXN0b21MaW5lQ2FwIG1ldGhvZHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ3JlYXRlQ3VzdG9tTGluZUNhcChHcFBhdGgqIGZpbGxQYXRoLCBHcFBhdGgqIHN0cm9rZVBhdGgsCisgICBHcExpbmVDYXAgYmFzZUNhcCwgUkVBTCBiYXNlSW5zZXQsIEdwQ3VzdG9tTGluZUNhcCAqKmN1c3RvbUNhcCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEZWxldGVDdXN0b21MaW5lQ2FwKEdwQ3VzdG9tTGluZUNhcCogY3VzdG9tQ2FwKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENsb25lQ3VzdG9tTGluZUNhcChHcEN1c3RvbUxpbmVDYXAqIGN1c3RvbUNhcCwKKyAgICAgICAgICAgICAgICAgICAgICAgR3BDdXN0b21MaW5lQ2FwKiogY2xvbmVkQ2FwKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldEN1c3RvbUxpbmVDYXBUeXBlKEdwQ3VzdG9tTGluZUNhcCogY3VzdG9tQ2FwLAorICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21MaW5lQ2FwVHlwZSogY2FwVHlwZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRDdXN0b21MaW5lQ2FwU3Ryb2tlQ2FwcyhHcEN1c3RvbUxpbmVDYXAqIGN1c3RvbUNhcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcExpbmVDYXAgc3RhcnRDYXAsIEdwTGluZUNhcCBlbmRDYXApOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0Q3VzdG9tTGluZUNhcFN0cm9rZUNhcHMoR3BDdXN0b21MaW5lQ2FwKiBjdXN0b21DYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BMaW5lQ2FwKiBzdGFydENhcCwgR3BMaW5lQ2FwKiBlbmRDYXApOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0Q3VzdG9tTGluZUNhcFN0cm9rZUpvaW4oR3BDdXN0b21MaW5lQ2FwKiBjdXN0b21DYXAsIEdwTGluZUpvaW4gbGluZUpvaW4pOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0Q3VzdG9tTGluZUNhcFN0cm9rZUpvaW4oR3BDdXN0b21MaW5lQ2FwKiBjdXN0b21DYXAsIEdwTGluZUpvaW4qIGxpbmVKb2luKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldEN1c3RvbUxpbmVDYXBCYXNlQ2FwKEdwQ3VzdG9tTGluZUNhcCogY3VzdG9tQ2FwLCBHcExpbmVDYXAgYmFzZUNhcCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRDdXN0b21MaW5lQ2FwQmFzZUNhcChHcEN1c3RvbUxpbmVDYXAqIGN1c3RvbUNhcCwgR3BMaW5lQ2FwKiBiYXNlQ2FwKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldEN1c3RvbUxpbmVDYXBCYXNlSW5zZXQoR3BDdXN0b21MaW5lQ2FwKiBjdXN0b21DYXAsIFJFQUwgaW5zZXQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0Q3VzdG9tTGluZUNhcEJhc2VJbnNldChHcEN1c3RvbUxpbmVDYXAqIGN1c3RvbUNhcCwgUkVBTCogaW5zZXQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0Q3VzdG9tTGluZUNhcFdpZHRoU2NhbGUoR3BDdXN0b21MaW5lQ2FwKiBjdXN0b21DYXAsIFJFQUwgd2lkdGhTY2FsZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRDdXN0b21MaW5lQ2FwV2lkdGhTY2FsZShHcEN1c3RvbUxpbmVDYXAqIGN1c3RvbUNhcCwgUkVBTCogd2lkdGhTY2FsZSk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQWRqdXN0YWJsZUFycm93Q2FwIG1ldGhvZHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ3JlYXRlQWRqdXN0YWJsZUFycm93Q2FwKFJFQUwgaGVpZ2h0LCBSRUFMIHdpZHRoLCBCT09MIGlzRmlsbGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcEFkanVzdGFibGVBcnJvd0NhcCAqKmNhcCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRBZGp1c3RhYmxlQXJyb3dDYXBIZWlnaHQoR3BBZGp1c3RhYmxlQXJyb3dDYXAqIGNhcCwgUkVBTCBoZWlnaHQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0QWRqdXN0YWJsZUFycm93Q2FwSGVpZ2h0KEdwQWRqdXN0YWJsZUFycm93Q2FwKiBjYXAsIFJFQUwqIGhlaWdodCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRBZGp1c3RhYmxlQXJyb3dDYXBXaWR0aChHcEFkanVzdGFibGVBcnJvd0NhcCogY2FwLCBSRUFMIHdpZHRoKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldEFkanVzdGFibGVBcnJvd0NhcFdpZHRoKEdwQWRqdXN0YWJsZUFycm93Q2FwKiBjYXAsIFJFQUwqIHdpZHRoKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldEFkanVzdGFibGVBcnJvd0NhcE1pZGRsZUluc2V0KEdwQWRqdXN0YWJsZUFycm93Q2FwKiBjYXAsIFJFQUwgbWlkZGxlSW5zZXQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0QWRqdXN0YWJsZUFycm93Q2FwTWlkZGxlSW5zZXQoR3BBZGp1c3RhYmxlQXJyb3dDYXAqIGNhcCwgUkVBTCogbWlkZGxlSW5zZXQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0QWRqdXN0YWJsZUFycm93Q2FwRmlsbFN0YXRlKEdwQWRqdXN0YWJsZUFycm93Q2FwKiBjYXAsIEJPT0wgZmlsbFN0YXRlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldEFkanVzdGFibGVBcnJvd0NhcEZpbGxTdGF0ZShHcEFkanVzdGFibGVBcnJvd0NhcCogY2FwLCBCT09MKiBmaWxsU3RhdGUpOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEltYWdlIG1ldGhvZHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwTG9hZEltYWdlRnJvbVN0cmVhbShJU3RyZWFtKiBzdHJlYW0sIEdwSW1hZ2UgKippbWFnZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBMb2FkSW1hZ2VGcm9tRmlsZShHRElQQ09OU1QgV0NIQVIqIGZpbGVuYW1lLCBHcEltYWdlICoqaW1hZ2UpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwTG9hZEltYWdlRnJvbVN0cmVhbUlDTShJU3RyZWFtKiBzdHJlYW0sIEdwSW1hZ2UgKippbWFnZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBMb2FkSW1hZ2VGcm9tRmlsZUlDTShHRElQQ09OU1QgV0NIQVIqIGZpbGVuYW1lLCBHcEltYWdlICoqaW1hZ2UpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ2xvbmVJbWFnZShHcEltYWdlICppbWFnZSwgR3BJbWFnZSAqKmNsb25lSW1hZ2UpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRGlzcG9zZUltYWdlKEdwSW1hZ2UgKmltYWdlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNhdmVJbWFnZVRvRmlsZShHcEltYWdlICppbWFnZSwgR0RJUENPTlNUIFdDSEFSKiBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIENMU0lEKiBjbHNpZEVuY29kZXIsIEdESVBDT05TVCBFbmNvZGVyUGFyYW1ldGVycyogZW5jb2RlclBhcmFtcyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTYXZlSW1hZ2VUb1N0cmVhbShHcEltYWdlICppbWFnZSwgSVN0cmVhbSogc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBDTFNJRCogY2xzaWRFbmNvZGVyLCBHRElQQ09OU1QgRW5jb2RlclBhcmFtZXRlcnMqIGVuY29kZXJQYXJhbXMpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2F2ZUFkZChHcEltYWdlICppbWFnZSwgR0RJUENPTlNUIEVuY29kZXJQYXJhbWV0ZXJzKiBlbmNvZGVyUGFyYW1zKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNhdmVBZGRJbWFnZShHcEltYWdlICppbWFnZSwgR3BJbWFnZSogbmV3SW1hZ2UsCisgICAgICAgICAgICAgICAgIEdESVBDT05TVCBFbmNvZGVyUGFyYW1ldGVycyogZW5jb2RlclBhcmFtcyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRJbWFnZUdyYXBoaWNzQ29udGV4dChHcEltYWdlICppbWFnZSwgR3BHcmFwaGljcyAqKmdyYXBoaWNzKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldEltYWdlQm91bmRzKEdwSW1hZ2UgKmltYWdlLCBHcFJlY3RGICpzcmNSZWN0LCBHcFVuaXQgKnNyY1VuaXQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0SW1hZ2VEaW1lbnNpb24oR3BJbWFnZSAqaW1hZ2UsIFJFQUwgKndpZHRoLCBSRUFMICpoZWlnaHQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0SW1hZ2VUeXBlKEdwSW1hZ2UgKmltYWdlLCBJbWFnZVR5cGUgKnR5cGUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0SW1hZ2VXaWR0aChHcEltYWdlICppbWFnZSwgVUlOVCAqd2lkdGgpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0SW1hZ2VIZWlnaHQoR3BJbWFnZSAqaW1hZ2UsIFVJTlQgKmhlaWdodCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRJbWFnZUhvcml6b250YWxSZXNvbHV0aW9uKEdwSW1hZ2UgKmltYWdlLCBSRUFMICpyZXNvbHV0aW9uKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldEltYWdlVmVydGljYWxSZXNvbHV0aW9uKEdwSW1hZ2UgKmltYWdlLCBSRUFMICpyZXNvbHV0aW9uKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldEltYWdlRmxhZ3MoR3BJbWFnZSAqaW1hZ2UsIFVJTlQgKmZsYWdzKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldEltYWdlUmF3Rm9ybWF0KEdwSW1hZ2UgKmltYWdlLCBHVUlEICpmb3JtYXQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0SW1hZ2VQaXhlbEZvcm1hdChHcEltYWdlICppbWFnZSwgUGl4ZWxGb3JtYXQgKmZvcm1hdCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRJbWFnZVRodW1ibmFpbChHcEltYWdlICppbWFnZSwgVUlOVCB0aHVtYldpZHRoLCBVSU5UIHRodW1iSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgIEdwSW1hZ2UgKip0aHVtYkltYWdlLAorICAgICAgICAgICAgICAgICAgICAgIEdldFRodW1ibmFpbEltYWdlQWJvcnQgY2FsbGJhY2ssIFZPSUQgKiBjYWxsYmFja0RhdGEpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0RW5jb2RlclBhcmFtZXRlckxpc3RTaXplKEdwSW1hZ2UgKmltYWdlLCBHRElQQ09OU1QgQ0xTSUQqIGNsc2lkRW5jb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVCogc2l6ZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRFbmNvZGVyUGFyYW1ldGVyTGlzdChHcEltYWdlICppbWFnZSwgR0RJUENPTlNUIENMU0lEKiBjbHNpZEVuY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVCBzaXplLCBFbmNvZGVyUGFyYW1ldGVycyogYnVmZmVyKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEltYWdlR2V0RnJhbWVEaW1lbnNpb25zQ291bnQoR3BJbWFnZSogaW1hZ2UsIFVJTlQqIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEltYWdlR2V0RnJhbWVEaW1lbnNpb25zTGlzdChHcEltYWdlKiBpbWFnZSwgR1VJRCogZGltZW5zaW9uSURzLCBVSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEltYWdlR2V0RnJhbWVDb3VudChHcEltYWdlICppbWFnZSwgR0RJUENPTlNUIEdVSUQqIGRpbWVuc2lvbklELCBVSU5UKiBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBJbWFnZVNlbGVjdEFjdGl2ZUZyYW1lKEdwSW1hZ2UgKmltYWdlLCBHRElQQ09OU1QgR1VJRCogZGltZW5zaW9uSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UIGZyYW1lSW5kZXgpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwSW1hZ2VSb3RhdGVGbGlwKEdwSW1hZ2UgKmltYWdlLCBSb3RhdGVGbGlwVHlwZSByZlR5cGUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0SW1hZ2VQYWxldHRlKEdwSW1hZ2UgKmltYWdlLCBDb2xvclBhbGV0dGUgKnBhbGV0dGUsIElOVCBzaXplKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldEltYWdlUGFsZXR0ZShHcEltYWdlICppbWFnZSwgR0RJUENPTlNUIENvbG9yUGFsZXR0ZSAqcGFsZXR0ZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRJbWFnZVBhbGV0dGVTaXplKEdwSW1hZ2UgKmltYWdlLCBJTlQgKnNpemUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0UHJvcGVydHlDb3VudChHcEltYWdlICppbWFnZSwgVUlOVCogbnVtT2ZQcm9wZXJ0eSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQcm9wZXJ0eUlkTGlzdChHcEltYWdlICppbWFnZSwgVUlOVCBudW1PZlByb3BlcnR5LCBQUk9QSUQqIGxpc3QpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0UHJvcGVydHlJdGVtU2l6ZShHcEltYWdlICppbWFnZSwgUFJPUElEIHByb3BJZCwgVUlOVCogc2l6ZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQcm9wZXJ0eUl0ZW0oR3BJbWFnZSAqaW1hZ2UsIFBST1BJRCBwcm9wSWQsVUlOVCBwcm9wU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlJdGVtKiBidWZmZXIpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0UHJvcGVydHlTaXplKEdwSW1hZ2UgKmltYWdlLCBVSU5UKiB0b3RhbEJ1ZmZlclNpemUsIFVJTlQqIG51bVByb3BlcnRpZXMpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0QWxsUHJvcGVydHlJdGVtcyhHcEltYWdlICppbWFnZSwgVUlOVCB0b3RhbEJ1ZmZlclNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBVSU5UIG51bVByb3BlcnRpZXMsIFByb3BlcnR5SXRlbSogYWxsSXRlbXMpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwUmVtb3ZlUHJvcGVydHlJdGVtKEdwSW1hZ2UgKmltYWdlLCBQUk9QSUQgcHJvcElkKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFByb3BlcnR5SXRlbShHcEltYWdlICppbWFnZSwgR0RJUENPTlNUIFByb3BlcnR5SXRlbSogaXRlbSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBJbWFnZUZvcmNlVmFsaWRhdGlvbihHcEltYWdlICppbWFnZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRJbWFnZUxheW91dChHcEltYWdlICppbWFnZSwgSW1hZ2VMYXlvdXQqIGxheW91dCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRJbWFnZUxheW91dChHcEltYWdlICppbWFnZSwgR0RJUENPTlNUIEltYWdlTGF5b3V0IGxheW91dCk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQml0bWFwIG1ldGhvZHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ3JlYXRlQml0bWFwRnJvbVN0cmVhbShJU3RyZWFtKiBzdHJlYW0sIEdwQml0bWFwICoqYml0bWFwKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZUJpdG1hcEZyb21GaWxlKEdESVBDT05TVCBXQ0hBUiogZmlsZW5hbWUsIEdwQml0bWFwICoqYml0bWFwKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZUJpdG1hcEZyb21TdHJlYW1JQ00oSVN0cmVhbSogc3RyZWFtLCBHcEJpdG1hcCAqKmJpdG1hcCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVCaXRtYXBGcm9tRmlsZUlDTShHRElQQ09OU1QgV0NIQVIqIGZpbGVuYW1lLCBHcEJpdG1hcCAqKmJpdG1hcCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVCaXRtYXBGcm9tU2NhbjAoSU5UIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgc3RyaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQaXhlbEZvcm1hdCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEJZVEUqIHNjYW4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICBHcEJpdG1hcCoqIGJpdG1hcCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVCaXRtYXBGcm9tR3JhcGhpY3MoSU5UIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcEdyYXBoaWNzKiB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwQml0bWFwKiogYml0bWFwKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZUJpdG1hcEZyb21EaXJlY3REcmF3U3VyZmFjZShJRGlyZWN0RHJhd1N1cmZhY2U3KiBzdXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcEJpdG1hcCoqIGJpdG1hcCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVCaXRtYXBGcm9tR2RpRGliKEdESVBDT05TVCBCSVRNQVBJTkZPKiBnZGlCaXRtYXBJbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVk9JRCogZ2RpQml0bWFwRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwQml0bWFwKiogYml0bWFwKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZUJpdG1hcEZyb21IQklUTUFQKEhCSVRNQVAgaGJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhQQUxFVFRFIGhwYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BCaXRtYXAqKiBiaXRtYXApOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ3JlYXRlSEJJVE1BUEZyb21CaXRtYXAoR3BCaXRtYXAqIGJpdG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQklUTUFQKiBoYm1SZXR1cm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJHQiBiYWNrZ3JvdW5kKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZUJpdG1hcEZyb21ISUNPTihISUNPTiBoaWNvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgR3BCaXRtYXAqKiBiaXRtYXApOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ3JlYXRlSElDT05Gcm9tQml0bWFwKEdwQml0bWFwKiBiaXRtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEhJQ09OKiBoYm1SZXR1cm4pOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ3JlYXRlQml0bWFwRnJvbVJlc291cmNlKEhJTlNUQU5DRSBoSW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBXQ0hBUiogbHBCaXRtYXBOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcEJpdG1hcCoqIGJpdG1hcCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDbG9uZUJpdG1hcEFyZWEoUkVBTCB4LCBSRUFMIHksIFJFQUwgd2lkdGgsIFJFQUwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsRm9ybWF0IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcEJpdG1hcCAqc3JjQml0bWFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdwQml0bWFwICoqZHN0Qml0bWFwKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENsb25lQml0bWFwQXJlYUkoSU5UIHgsCisgICAgICAgICAgICAgICAgICAgICBJTlQgeSwKKyAgICAgICAgICAgICAgICAgICAgIElOVCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgIElOVCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICBQaXhlbEZvcm1hdCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICBHcEJpdG1hcCAqc3JjQml0bWFwLAorICAgICAgICAgICAgICAgICAgICAgR3BCaXRtYXAgKipkc3RCaXRtYXApOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQml0bWFwTG9ja0JpdHMoR3BCaXRtYXAqIGJpdG1hcCwKKyAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BSZWN0KiByZWN0LAorICAgICAgICAgICAgICAgICAgIFVJTlQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgUGl4ZWxGb3JtYXQgZm9ybWF0LAorICAgICAgICAgICAgICAgICAgIEJpdG1hcERhdGEqIGxvY2tlZEJpdG1hcERhdGEpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQml0bWFwVW5sb2NrQml0cyhHcEJpdG1hcCogYml0bWFwLAorICAgICAgICAgICAgICAgICAgICAgQml0bWFwRGF0YSogbG9ja2VkQml0bWFwRGF0YSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBCaXRtYXBHZXRQaXhlbChHcEJpdG1hcCogYml0bWFwLCBJTlQgeCwgSU5UIHksIEFSR0IgKmNvbG9yKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEJpdG1hcFNldFBpeGVsKEdwQml0bWFwKiBiaXRtYXAsIElOVCB4LCBJTlQgeSwgQVJHQiBjb2xvcik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBCaXRtYXBTZXRSZXNvbHV0aW9uKEdwQml0bWFwKiBiaXRtYXAsIFJFQUwgeGRwaSwgUkVBTCB5ZHBpKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbWFnZUF0dHJpYnV0ZXMgbWV0aG9kcworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVJbWFnZUF0dHJpYnV0ZXMoR3BJbWFnZUF0dHJpYnV0ZXMgKippbWFnZWF0dHIpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ2xvbmVJbWFnZUF0dHJpYnV0ZXMoR0RJUENPTlNUIEdwSW1hZ2VBdHRyaWJ1dGVzICppbWFnZWF0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgR3BJbWFnZUF0dHJpYnV0ZXMgKipjbG9uZUltYWdlYXR0cik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEaXNwb3NlSW1hZ2VBdHRyaWJ1dGVzKEdwSW1hZ2VBdHRyaWJ1dGVzICppbWFnZWF0dHIpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzVG9JZGVudGl0eShHcEltYWdlQXR0cmlidXRlcyAqaW1hZ2VhdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JBZGp1c3RUeXBlIHR5cGUpOworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFJlc2V0SW1hZ2VBdHRyaWJ1dGVzKEdwSW1hZ2VBdHRyaWJ1dGVzICppbWFnZWF0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JBZGp1c3RUeXBlIHR5cGUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzQ29sb3JNYXRyaXgoR3BJbWFnZUF0dHJpYnV0ZXMgKmltYWdlYXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvckFkanVzdFR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MIGVuYWJsZUZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIENvbG9yTWF0cml4KiBjb2xvck1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgQ29sb3JNYXRyaXgqIGdyYXlNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JNYXRyaXhGbGFncyBmbGFncyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRJbWFnZUF0dHJpYnV0ZXNUaHJlc2hvbGQoR3BJbWFnZUF0dHJpYnV0ZXMgKmltYWdlYXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JBZGp1c3RUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgZW5hYmxlRmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCB0aHJlc2hvbGQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzR2FtbWEoR3BJbWFnZUF0dHJpYnV0ZXMgKmltYWdlYXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvckFkanVzdFR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MIGVuYWJsZUZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCBnYW1tYSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRJbWFnZUF0dHJpYnV0ZXNOb09wKEdwSW1hZ2VBdHRyaWJ1dGVzICppbWFnZWF0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvckFkanVzdFR5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgZW5hYmxlRmxhZyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRJbWFnZUF0dHJpYnV0ZXNDb2xvcktleXMoR3BJbWFnZUF0dHJpYnV0ZXMgKmltYWdlYXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JBZGp1c3RUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJPT0wgZW5hYmxlRmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJHQiBjb2xvckxvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJHQiBjb2xvckhpZ2gpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzT3V0cHV0Q2hhbm5lbChHcEltYWdlQXR0cmlidXRlcyAqaW1hZ2VhdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JBZGp1c3RUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MIGVuYWJsZUZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvckNoYW5uZWxGbGFncyBjaGFubmVsRmxhZ3MpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzT3V0cHV0Q2hhbm5lbENvbG9yUHJvZmlsZShHcEltYWdlQXR0cmlidXRlcyAqaW1hZ2VhdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JBZGp1c3RUeXBlIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCT09MIGVuYWJsZUZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgV0NIQVIgKmNvbG9yUHJvZmlsZUZpbGVuYW1lKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldEltYWdlQXR0cmlidXRlc1JlbWFwVGFibGUoR3BJbWFnZUF0dHJpYnV0ZXMgKmltYWdlYXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yQWRqdXN0VHlwZSB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCBlbmFibGVGbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVCBtYXBTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIENvbG9yTWFwICptYXApOworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldEltYWdlQXR0cmlidXRlc1dyYXBNb2RlKAorICAgIEdwSW1hZ2VBdHRyaWJ1dGVzICppbWFnZUF0dHIsCisgICAgV3JhcE1vZGUgd3JhcCwKKyAgICBBUkdCIGFyZ2IsCisgICAgQk9PTCBjbGFtcAorKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldEltYWdlQXR0cmlidXRlc0lDTU1vZGUoCisgICAgR3BJbWFnZUF0dHJpYnV0ZXMgKmltYWdlQXR0ciwKKyAgICBCT09MIG9uCispOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0SW1hZ2VBdHRyaWJ1dGVzQWRqdXN0ZWRQYWxldHRlKAorICAgIEdwSW1hZ2VBdHRyaWJ1dGVzICppbWFnZUF0dHIsCisgICAgQ29sb3JQYWxldHRlICogY29sb3JQYWxldHRlLAorICAgIENvbG9yQWRqdXN0VHlwZSBjb2xvckFkanVzdFR5cGUKKyk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gR3JhcGhpY3MgbWV0aG9kcworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBGbHVzaChHcEdyYXBoaWNzICpncmFwaGljcywgR3BGbHVzaEludGVudGlvbiBpbnRlbnRpb24pOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ3JlYXRlRnJvbUhEQyhIREMgaGRjLCBHcEdyYXBoaWNzICoqZ3JhcGhpY3MpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ3JlYXRlRnJvbUhEQzIoSERDIGhkYywgSEFORExFIGhEZXZpY2UsIEdwR3JhcGhpY3MgKipncmFwaGljcyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVGcm9tSFdORChIV05EIGh3bmQsIEdwR3JhcGhpY3MgKipncmFwaGljcyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVGcm9tSFdORElDTShIV05EIGh3bmQsIEdwR3JhcGhpY3MgKipncmFwaGljcyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEZWxldGVHcmFwaGljcyhHcEdyYXBoaWNzICpncmFwaGljcyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXREQyhHcEdyYXBoaWNzKiBncmFwaGljcywgSERDICogaGRjKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFJlbGVhc2VEQyhHcEdyYXBoaWNzKiBncmFwaGljcywgSERDIGhkYyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRDb21wb3NpdGluZ01vZGUoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIENvbXBvc2l0aW5nTW9kZSBjb21wb3NpdGluZ01vZGUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0Q29tcG9zaXRpbmdNb2RlKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBDb21wb3NpdGluZ01vZGUgKmNvbXBvc2l0aW5nTW9kZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRSZW5kZXJpbmdPcmlnaW4oR3BHcmFwaGljcyAqZ3JhcGhpY3MsIElOVCB4LCBJTlQgeSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRSZW5kZXJpbmdPcmlnaW4oR3BHcmFwaGljcyAqZ3JhcGhpY3MsIElOVCAqeCwgSU5UICp5KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldENvbXBvc2l0aW5nUXVhbGl0eShHcEdyYXBoaWNzICpncmFwaGljcywgQ29tcG9zaXRpbmdRdWFsaXR5IGNvbXBvc2l0aW5nUXVhbGl0eSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRDb21wb3NpdGluZ1F1YWxpdHkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIENvbXBvc2l0aW5nUXVhbGl0eSAqY29tcG9zaXRpbmdRdWFsaXR5KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFNtb290aGluZ01vZGUoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRTbW9vdGhpbmdNb2RlKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBTbW9vdGhpbmdNb2RlICpzbW9vdGhpbmdNb2RlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFBpeGVsT2Zmc2V0TW9kZShHcEdyYXBoaWNzKiBncmFwaGljcywgUGl4ZWxPZmZzZXRNb2RlIHBpeGVsT2Zmc2V0TW9kZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQaXhlbE9mZnNldE1vZGUoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIFBpeGVsT2Zmc2V0TW9kZSAqcGl4ZWxPZmZzZXRNb2RlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFRleHRSZW5kZXJpbmdIaW50KEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBUZXh0UmVuZGVyaW5nSGludCBtb2RlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFRleHRSZW5kZXJpbmdIaW50KEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBUZXh0UmVuZGVyaW5nSGludCAqbW9kZSk7CisKKyNpZmRlZiBEQ1JfVVNFX05FV18xODg5MjIKK0dwU3RhdHVzICBXSU5HRElQQVBJCitHZGlwU2V0VGV4dENvbnRyYXN0KEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBVSU5UIGNvbnRyYXN0KTsKKworR3BTdGF0dXMgIFdJTkdESVBBUEkKK0dkaXBHZXRUZXh0Q29udHJhc3QoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIFVJTlQgKiBjb250cmFzdCk7CisjZWxzZQorR3BTdGF0dXMgIFdJTkdESVBBUEkKK0dkaXBTZXRUZXh0R2FtbWFWYWx1ZShHcEdyYXBoaWNzICpncmFwaGljcywgVUlOVCBnYW1tYVZhbHVlKTsKKworR3BTdGF0dXMgIFdJTkdESVBBUEkKK0dkaXBHZXRUZXh0R2FtbWFWYWx1ZShHcEdyYXBoaWNzICpncmFwaGljcywgVUlOVCAqIGdhbW1hVmFsdWUpOworI2VuZGlmIC8vIERDUl9VU0VfTkVXXzE4ODkyMgorCisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRJbnRlcnBvbGF0aW9uTW9kZShHcEdyYXBoaWNzICpncmFwaGljcywgSW50ZXJwb2xhdGlvbk1vZGUgaW50ZXJwb2xhdGlvbk1vZGUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0SW50ZXJwb2xhdGlvbk1vZGUoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEludGVycG9sYXRpb25Nb2RlICppbnRlcnBvbGF0aW9uTW9kZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRXb3JsZFRyYW5zZm9ybShHcEdyYXBoaWNzICpncmFwaGljcywgR3BNYXRyaXggKm1hdHJpeCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBSZXNldFdvcmxkVHJhbnNmb3JtKEdwR3JhcGhpY3MgKmdyYXBoaWNzKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcE11bHRpcGx5V29ybGRUcmFuc2Zvcm0oR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdESVBDT05TVCBHcE1hdHJpeCAqbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BNYXRyaXhPcmRlciBvcmRlcik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBUcmFuc2xhdGVXb3JsZFRyYW5zZm9ybShHcEdyYXBoaWNzICpncmFwaGljcywgUkVBTCBkeCwgUkVBTCBkeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeE9yZGVyIG9yZGVyKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNjYWxlV29ybGRUcmFuc2Zvcm0oR3BHcmFwaGljcyAqZ3JhcGhpY3MsIFJFQUwgc3gsIFJFQUwgc3ksCisgICAgICAgICAgICAgICAgICAgICAgICBHcE1hdHJpeE9yZGVyIG9yZGVyKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFJvdGF0ZVdvcmxkVHJhbnNmb3JtKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBSRUFMIGFuZ2xlLCBHcE1hdHJpeE9yZGVyIG9yZGVyKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFdvcmxkVHJhbnNmb3JtKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcE1hdHJpeCAqbWF0cml4KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFJlc2V0UGFnZVRyYW5zZm9ybShHcEdyYXBoaWNzICpncmFwaGljcyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRQYWdlVW5pdChHcEdyYXBoaWNzICpncmFwaGljcywgR3BVbml0ICp1bml0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFBhZ2VTY2FsZShHcEdyYXBoaWNzICpncmFwaGljcywgUkVBTCAqc2NhbGUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0UGFnZVVuaXQoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwVW5pdCB1bml0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFBhZ2VTY2FsZShHcEdyYXBoaWNzICpncmFwaGljcywgUkVBTCBzY2FsZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXREcGlYKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBSRUFMKiBkcGkpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0RHBpWShHcEdyYXBoaWNzICpncmFwaGljcywgUkVBTCogZHBpKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFRyYW5zZm9ybVBvaW50cyhHcEdyYXBoaWNzICpncmFwaGljcywgR3BDb29yZGluYXRlU3BhY2UgZGVzdFNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcENvb3JkaW5hdGVTcGFjZSBzcmNTcGFjZSwgR3BQb2ludEYgKnBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFRyYW5zZm9ybVBvaW50c0koR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwQ29vcmRpbmF0ZVNwYWNlIGRlc3RTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BDb29yZGluYXRlU3BhY2Ugc3JjU3BhY2UsIEdwUG9pbnQgKnBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldE5lYXJlc3RDb2xvcihHcEdyYXBoaWNzICpncmFwaGljcywgQVJHQiogYXJnYik7CisKKy8vIENyZWF0ZSB0aGUgV2luOXggSGFsZnRvbmUgUGFsZXR0ZSAoZXZlbiBvbiBOVCkgd2l0aCBjb3JyZWN0IERlc2t0b3AgY29sb3JzCitIUEFMRVRURSBXSU5HRElQQVBJCitHZGlwQ3JlYXRlSGFsZnRvbmVQYWxldHRlKCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcmF3TGluZShHcEdyYXBoaWNzICpncmFwaGljcywgR3BQZW4gKnBlbiwgUkVBTCB4MSwgUkVBTCB5MSwKKyAgICAgICAgICAgICAgICAgICAgICBSRUFMIHgyLCBSRUFMIHkyKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcERyYXdMaW5lSShHcEdyYXBoaWNzICpncmFwaGljcywgR3BQZW4gKnBlbiwgSU5UIHgxLCBJTlQgeTEsCisgICAgICAgICAgICAgICAgICAgICAgSU5UIHgyLCBJTlQgeTIpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRHJhd0xpbmVzKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcERyYXdMaW5lc0koR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sIEdESVBDT05TVCBHcFBvaW50ICpwb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgIElOVCBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcmF3QXJjKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBSRUFMIHgsIFJFQUwgeSwKKyAgICAgICAgICAgIFJFQUwgd2lkdGgsIFJFQUwgaGVpZ2h0LCBSRUFMIHN0YXJ0QW5nbGUsIFJFQUwgc3dlZXBBbmdsZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcmF3QXJjSShHcEdyYXBoaWNzICpncmFwaGljcywgR3BQZW4gKnBlbiwgSU5UIHgsIElOVCB5LAorICAgICAgICAgICAgICAgICAgICAgSU5UIHdpZHRoLCBJTlQgaGVpZ2h0LCBSRUFMIHN0YXJ0QW5nbGUsIFJFQUwgc3dlZXBBbmdsZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcmF3QmV6aWVyKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBSRUFMIHgxLCBSRUFMIHkxLAorICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCB4MiwgUkVBTCB5MiwgUkVBTCB4MywgUkVBTCB5MywgUkVBTCB4NCwgUkVBTCB5NCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcmF3QmV6aWVySShHcEdyYXBoaWNzICpncmFwaGljcywgR3BQZW4gKnBlbiwgSU5UIHgxLCBJTlQgeTEsCisgICAgICAgICAgICAgICAgICAgICAgICBJTlQgeDIsIElOVCB5MiwgSU5UIHgzLCBJTlQgeTMsIElOVCB4NCwgSU5UIHk0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcERyYXdCZXppZXJzKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRHJhd0JlemllcnNJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBHRElQQ09OU1QgR3BQb2ludCAqcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcmF3UmVjdGFuZ2xlKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBSRUFMIHgsIFJFQUwgeSwKKyAgICAgICAgICAgICAgICAgICAgICBSRUFMIHdpZHRoLCBSRUFMIGhlaWdodCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcmF3UmVjdGFuZ2xlSShHcEdyYXBoaWNzICpncmFwaGljcywgR3BQZW4gKnBlbiwgSU5UIHgsIElOVCB5LAorICAgICAgICAgICAgICAgICAgICAgIElOVCB3aWR0aCwgSU5UIGhlaWdodCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcmF3UmVjdGFuZ2xlcyhHcEdyYXBoaWNzICpncmFwaGljcywgR3BQZW4gKnBlbiwgR0RJUENPTlNUIEdwUmVjdEYgKnJlY3RzLAorICAgICAgICAgICAgICAgICAgICAgICBJTlQgY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRHJhd1JlY3RhbmdsZXNJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBHRElQQ09OU1QgR3BSZWN0ICpyZWN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcERyYXdFbGxpcHNlKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBSRUFMIHgsIFJFQUwgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMIHdpZHRoLCBSRUFMIGhlaWdodCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcmF3RWxsaXBzZUkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sIElOVCB4LCBJTlQgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgd2lkdGgsIElOVCBoZWlnaHQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRHJhd1BpZShHcEdyYXBoaWNzICpncmFwaGljcywgR3BQZW4gKnBlbiwgUkVBTCB4LCBSRUFMIHksCisgICAgICAgICAgICAgICAgICAgICBSRUFMIHdpZHRoLCBSRUFMIGhlaWdodCwgUkVBTCBzdGFydEFuZ2xlLCBSRUFMIHN3ZWVwQW5nbGUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRHJhd1BpZUkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sIElOVCB4LCBJTlQgeSwKKyAgICAgICAgICAgICAgICAgICAgIElOVCB3aWR0aCwgSU5UIGhlaWdodCwgUkVBTCBzdGFydEFuZ2xlLCBSRUFMIHN3ZWVwQW5nbGUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRHJhd1BvbHlnb24oR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sIEdESVBDT05TVCBHcFBvaW50RiAqcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcmF3UG9seWdvbkkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sIEdESVBDT05TVCBHcFBvaW50ICpwb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcERyYXdQYXRoKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBHcFBhdGggKnBhdGgpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRHJhd0N1cnZlKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcERyYXdDdXJ2ZUkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sIEdESVBDT05TVCBHcFBvaW50ICpwb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgIElOVCBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcmF3Q3VydmUyKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgSU5UIGNvdW50LCBSRUFMIHRlbnNpb24pOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRHJhd0N1cnZlMkkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sIEdESVBDT05TVCBHcFBvaW50ICpwb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgIElOVCBjb3VudCwgUkVBTCB0ZW5zaW9uKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcERyYXdDdXJ2ZTMoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sIEdESVBDT05TVCBHcFBvaW50RiAqcG9pbnRzLAorICAgICAgICAgICAgICAgSU5UIGNvdW50LCBJTlQgb2Zmc2V0LCBJTlQgbnVtYmVyT2ZTZWdtZW50cywgUkVBTCB0ZW5zaW9uKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcERyYXdDdXJ2ZTNJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBHRElQQ09OU1QgR3BQb2ludCAqcG9pbnRzLAorICAgICAgICAgICAgICAgIElOVCBjb3VudCwgSU5UIG9mZnNldCwgSU5UIG51bWJlck9mU2VnbWVudHMsIFJFQUwgdGVuc2lvbik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcmF3Q2xvc2VkQ3VydmUoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sCisgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcFBvaW50RiAqcG9pbnRzLCBJTlQgY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRHJhd0Nsb3NlZEN1cnZlSShHcEdyYXBoaWNzICpncmFwaGljcywgR3BQZW4gKnBlbiwKKyAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcFBvaW50ICpwb2ludHMsIElOVCBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcmF3Q2xvc2VkQ3VydmUyKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLAorICAgICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIEdwUG9pbnRGICpwb2ludHMsIElOVCBjb3VudCwgUkVBTCB0ZW5zaW9uKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcERyYXdDbG9zZWRDdXJ2ZTJJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLAorICAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcFBvaW50ICpwb2ludHMsIElOVCBjb3VudCwgUkVBTCB0ZW5zaW9uKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdyYXBoaWNzQ2xlYXIoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEFSR0IgY29sb3IpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRmlsbFJlY3RhbmdsZShHcEdyYXBoaWNzICpncmFwaGljcywgR3BCcnVzaCAqYnJ1c2gsIFJFQUwgeCwgUkVBTCB5LAorICAgICAgICAgICAgICAgICAgUkVBTCB3aWR0aCwgUkVBTCBoZWlnaHQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRmlsbFJlY3RhbmdsZUkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwQnJ1c2ggKmJydXNoLCBJTlQgeCwgSU5UIHksCisgICAgICAgICAgICAgICAgICAgSU5UIHdpZHRoLCBJTlQgaGVpZ2h0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEZpbGxSZWN0YW5nbGVzKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEJydXNoICpicnVzaCwKKyAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BSZWN0RiAqcmVjdHMsIElOVCBjb3VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBGaWxsUmVjdGFuZ2xlc0koR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwQnJ1c2ggKmJydXNoLAorICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BSZWN0ICpyZWN0cywgSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEZpbGxQb2x5Z29uKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEJydXNoICpicnVzaCwKKyAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywgSU5UIGNvdW50LCBHcEZpbGxNb2RlIGZpbGxNb2RlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEZpbGxQb2x5Z29uSShHcEdyYXBoaWNzICpncmFwaGljcywgR3BCcnVzaCAqYnJ1c2gsCisgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcFBvaW50ICpwb2ludHMsIElOVCBjb3VudCwgR3BGaWxsTW9kZSBmaWxsTW9kZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBGaWxsUG9seWdvbjIoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwQnJ1c2ggKmJydXNoLAorICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywgSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEZpbGxQb2x5Z29uMkkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwQnJ1c2ggKmJydXNoLAorICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIEdwUG9pbnQgKnBvaW50cywgSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEZpbGxFbGxpcHNlKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEJydXNoICpicnVzaCwgUkVBTCB4LCBSRUFMIHksCisgICAgICAgICAgICAgICAgUkVBTCB3aWR0aCwgUkVBTCBoZWlnaHQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRmlsbEVsbGlwc2VJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEJydXNoICpicnVzaCwgSU5UIHgsIElOVCB5LAorICAgICAgICAgICAgICAgICBJTlQgd2lkdGgsIElOVCBoZWlnaHQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRmlsbFBpZShHcEdyYXBoaWNzICpncmFwaGljcywgR3BCcnVzaCAqYnJ1c2gsIFJFQUwgeCwgUkVBTCB5LAorICAgICAgICAgICAgUkVBTCB3aWR0aCwgUkVBTCBoZWlnaHQsIFJFQUwgc3RhcnRBbmdsZSwgUkVBTCBzd2VlcEFuZ2xlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEZpbGxQaWVJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEJydXNoICpicnVzaCwgSU5UIHgsIElOVCB5LAorICAgICAgICAgICAgIElOVCB3aWR0aCwgSU5UIGhlaWdodCwgUkVBTCBzdGFydEFuZ2xlLCBSRUFMIHN3ZWVwQW5nbGUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRmlsbFBhdGgoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwQnJ1c2ggKmJydXNoLCBHcFBhdGggKnBhdGgpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRmlsbENsb3NlZEN1cnZlKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEJydXNoICpicnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcFBvaW50RiAqcG9pbnRzLCBJTlQgY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRmlsbENsb3NlZEN1cnZlSShHcEdyYXBoaWNzICpncmFwaGljcywgR3BCcnVzaCAqYnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BQb2ludCAqcG9pbnRzLCBJTlQgY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRmlsbENsb3NlZEN1cnZlMihHcEdyYXBoaWNzICpncmFwaGljcywgR3BCcnVzaCAqYnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BQb2ludEYgKnBvaW50cywgSU5UIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCB0ZW5zaW9uLCBHcEZpbGxNb2RlIGZpbGxNb2RlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEZpbGxDbG9zZWRDdXJ2ZTJJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEJydXNoICpicnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcFBvaW50ICpwb2ludHMsIElOVCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgdGVuc2lvbiwgR3BGaWxsTW9kZSBmaWxsTW9kZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBGaWxsUmVnaW9uKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEJydXNoICpicnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdwUmVnaW9uICpyZWdpb24pOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRHJhd0ltYWdlKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEltYWdlICppbWFnZSwgUkVBTCB4LCBSRUFMIHkpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRHJhd0ltYWdlSShHcEdyYXBoaWNzICpncmFwaGljcywgR3BJbWFnZSAqaW1hZ2UsIElOVCB4LCBJTlQgeSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcmF3SW1hZ2VSZWN0KEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEltYWdlICppbWFnZSwgUkVBTCB4LCBSRUFMIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMIHdpZHRoLCBSRUFMIGhlaWdodCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcmF3SW1hZ2VSZWN0SShHcEdyYXBoaWNzICpncmFwaGljcywgR3BJbWFnZSAqaW1hZ2UsIElOVCB4LCBJTlQgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCB3aWR0aCwgSU5UIGhlaWdodCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcmF3SW1hZ2VQb2ludHMoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwSW1hZ2UgKmltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BQb2ludEYgKmRzdHBvaW50cywgSU5UIGNvdW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcERyYXdJbWFnZVBvaW50c0koR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwSW1hZ2UgKmltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BQb2ludCAqZHN0cG9pbnRzLCBJTlQgY291bnQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRHJhd0ltYWdlUG9pbnRSZWN0KEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEltYWdlICppbWFnZSwgUkVBTCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMIHksIFJFQUwgc3JjeCwgUkVBTCBzcmN5LCBSRUFMIHNyY3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMIHNyY2hlaWdodCwgR3BVbml0IHNyY1VuaXQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRHJhd0ltYWdlUG9pbnRSZWN0SShHcEdyYXBoaWNzICpncmFwaGljcywgR3BJbWFnZSAqaW1hZ2UsIElOVCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgeSwgSU5UIHNyY3gsIElOVCBzcmN5LCBJTlQgc3Jjd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBzcmNoZWlnaHQsIEdwVW5pdCBzcmNVbml0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcERyYXdJbWFnZVJlY3RSZWN0KEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEltYWdlICppbWFnZSwgUkVBTCBkc3R4LAorICAgICAgICAgICAgICAgICAgICAgIFJFQUwgZHN0eSwgUkVBTCBkc3R3aWR0aCwgUkVBTCBkc3RoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgUkVBTCBzcmN4LCBSRUFMIHNyY3ksIFJFQUwgc3Jjd2lkdGgsIFJFQUwgc3JjaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgIEdwVW5pdCBzcmNVbml0LAorICAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcEltYWdlQXR0cmlidXRlcyogaW1hZ2VBdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgIERyYXdJbWFnZUFib3J0IGNhbGxiYWNrLCBWT0lEICogY2FsbGJhY2tEYXRhKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcERyYXdJbWFnZVJlY3RSZWN0SShHcEdyYXBoaWNzICpncmFwaGljcywgR3BJbWFnZSAqaW1hZ2UsIElOVCBkc3R4LAorICAgICAgICAgICAgICAgICAgICAgICBJTlQgZHN0eSwgSU5UIGRzdHdpZHRoLCBJTlQgZHN0aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICBJTlQgc3JjeCwgSU5UIHNyY3ksIElOVCBzcmN3aWR0aCwgSU5UIHNyY2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgR3BVbml0IHNyY1VuaXQsCisgICAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcEltYWdlQXR0cmlidXRlcyogaW1hZ2VBdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICBEcmF3SW1hZ2VBYm9ydCBjYWxsYmFjaywgVk9JRCAqIGNhbGxiYWNrRGF0YSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcmF3SW1hZ2VQb2ludHNSZWN0KEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEltYWdlICppbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcFBvaW50RiAqcG9pbnRzLCBJTlQgY291bnQsIFJFQUwgc3JjeCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFQUwgc3JjeSwgUkVBTCBzcmN3aWR0aCwgUkVBTCBzcmNoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICBHcFVuaXQgc3JjVW5pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcEltYWdlQXR0cmlidXRlcyogaW1hZ2VBdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgRHJhd0ltYWdlQWJvcnQgY2FsbGJhY2ssIFZPSUQgKiBjYWxsYmFja0RhdGEpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRHJhd0ltYWdlUG9pbnRzUmVjdEkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwSW1hZ2UgKmltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcFBvaW50ICpwb2ludHMsIElOVCBjb3VudCwgSU5UIHNyY3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIHNyY3ksIElOVCBzcmN3aWR0aCwgSU5UIHNyY2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHcFVuaXQgc3JjVW5pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHRElQQ09OU1QgR3BJbWFnZUF0dHJpYnV0ZXMqIGltYWdlQXR0cmlidXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBEcmF3SW1hZ2VBYm9ydCBjYWxsYmFjaywgVk9JRCAqIGNhbGxiYWNrRGF0YSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBFbnVtZXJhdGVNZXRhZmlsZURlc3RQb2ludCgKKyAgICBHcEdyYXBoaWNzICogICAgICAgICAgICBncmFwaGljcywKKyAgICBHRElQQ09OU1QgR3BNZXRhZmlsZSAqICBtZXRhZmlsZSwKKyAgICBHRElQQ09OU1QgUG9pbnRGICYgICAgICBkZXN0UG9pbnQsCisgICAgRW51bWVyYXRlTWV0YWZpbGVQcm9jICAgY2FsbGJhY2ssCisgICAgVk9JRCAqICAgICAgICAgICAgICAgICAgY2FsbGJhY2tEYXRhLAorICAgIEdESVBDT05TVCBHcEltYWdlQXR0cmlidXRlcyAqICAgICBpbWFnZUF0dHJpYnV0ZXMKKyAgICApOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRW51bWVyYXRlTWV0YWZpbGVEZXN0UG9pbnRJKAorICAgIEdwR3JhcGhpY3MgKiAgICAgICAgICAgIGdyYXBoaWNzLAorICAgIEdESVBDT05TVCBHcE1ldGFmaWxlICogIG1ldGFmaWxlLAorICAgIEdESVBDT05TVCBQb2ludCAmICAgICAgIGRlc3RQb2ludCwKKyAgICBFbnVtZXJhdGVNZXRhZmlsZVByb2MgICBjYWxsYmFjaywKKyAgICBWT0lEICogICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEsCisgICAgR0RJUENPTlNUIEdwSW1hZ2VBdHRyaWJ1dGVzICogICAgIGltYWdlQXR0cmlidXRlcworICAgICk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBFbnVtZXJhdGVNZXRhZmlsZURlc3RSZWN0KAorICAgIEdwR3JhcGhpY3MgKiAgICAgICAgICAgIGdyYXBoaWNzLAorICAgIEdESVBDT05TVCBHcE1ldGFmaWxlICogIG1ldGFmaWxlLAorICAgIEdESVBDT05TVCBSZWN0RiAmICAgICAgIGRlc3RSZWN0LAorICAgIEVudW1lcmF0ZU1ldGFmaWxlUHJvYyAgIGNhbGxiYWNrLAorICAgIFZPSUQgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSwKKyAgICBHRElQQ09OU1QgR3BJbWFnZUF0dHJpYnV0ZXMgKiAgICAgaW1hZ2VBdHRyaWJ1dGVzCisgICAgKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEVudW1lcmF0ZU1ldGFmaWxlRGVzdFJlY3RJKAorICAgIEdwR3JhcGhpY3MgKiAgICAgICAgICAgIGdyYXBoaWNzLAorICAgIEdESVBDT05TVCBHcE1ldGFmaWxlICogIG1ldGFmaWxlLAorICAgIEdESVBDT05TVCBSZWN0ICYgICAgICAgIGRlc3RSZWN0LAorICAgIEVudW1lcmF0ZU1ldGFmaWxlUHJvYyAgIGNhbGxiYWNrLAorICAgIFZPSUQgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSwKKyAgICBHRElQQ09OU1QgR3BJbWFnZUF0dHJpYnV0ZXMgKiAgICAgaW1hZ2VBdHRyaWJ1dGVzCisgICAgKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEVudW1lcmF0ZU1ldGFmaWxlRGVzdFBvaW50cygKKyAgICBHcEdyYXBoaWNzICogICAgICAgICAgICBncmFwaGljcywKKyAgICBHRElQQ09OU1QgR3BNZXRhZmlsZSAqICBtZXRhZmlsZSwKKyAgICBHRElQQ09OU1QgUG9pbnRGICogICAgICBkZXN0UG9pbnRzLAorICAgIElOVCAgICAgICAgICAgICAgICAgICAgIGNvdW50LAorICAgIEVudW1lcmF0ZU1ldGFmaWxlUHJvYyAgIGNhbGxiYWNrLAorICAgIFZPSUQgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSwKKyAgICBHRElQQ09OU1QgR3BJbWFnZUF0dHJpYnV0ZXMgKiAgICAgaW1hZ2VBdHRyaWJ1dGVzCisgICAgKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEVudW1lcmF0ZU1ldGFmaWxlRGVzdFBvaW50c0koCisgICAgR3BHcmFwaGljcyAqICAgICAgICAgICAgZ3JhcGhpY3MsCisgICAgR0RJUENPTlNUIEdwTWV0YWZpbGUgKiAgbWV0YWZpbGUsCisgICAgR0RJUENPTlNUIFBvaW50ICogICAgICAgZGVzdFBvaW50cywKKyAgICBJTlQgICAgICAgICAgICAgICAgICAgICBjb3VudCwKKyAgICBFbnVtZXJhdGVNZXRhZmlsZVByb2MgICBjYWxsYmFjaywKKyAgICBWT0lEICogICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEsCisgICAgR0RJUENPTlNUIEdwSW1hZ2VBdHRyaWJ1dGVzICogICAgIGltYWdlQXR0cmlidXRlcworICAgICk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBFbnVtZXJhdGVNZXRhZmlsZVNyY1JlY3REZXN0UG9pbnQoCisgICAgR3BHcmFwaGljcyAqICAgICAgICAgICAgZ3JhcGhpY3MsCisgICAgR0RJUENPTlNUIEdwTWV0YWZpbGUgKiAgbWV0YWZpbGUsCisgICAgR0RJUENPTlNUIFBvaW50RiAmICAgICAgZGVzdFBvaW50LAorICAgIEdESVBDT05TVCBSZWN0RiAmICAgICAgIHNyY1JlY3QsCisgICAgVW5pdCAgICAgICAgICAgICAgICAgICAgc3JjVW5pdCwKKyAgICBFbnVtZXJhdGVNZXRhZmlsZVByb2MgICBjYWxsYmFjaywKKyAgICBWT0lEICogICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEsCisgICAgR0RJUENPTlNUIEdwSW1hZ2VBdHRyaWJ1dGVzICogICAgIGltYWdlQXR0cmlidXRlcworICAgICk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBFbnVtZXJhdGVNZXRhZmlsZVNyY1JlY3REZXN0UG9pbnRJKAorICAgIEdwR3JhcGhpY3MgKiAgICAgICAgICAgIGdyYXBoaWNzLAorICAgIEdESVBDT05TVCBHcE1ldGFmaWxlICogIG1ldGFmaWxlLAorICAgIEdESVBDT05TVCBQb2ludCAmICAgICAgIGRlc3RQb2ludCwKKyAgICBHRElQQ09OU1QgUmVjdCAmICAgICAgICBzcmNSZWN0LAorICAgIFVuaXQgICAgICAgICAgICAgICAgICAgIHNyY1VuaXQsCisgICAgRW51bWVyYXRlTWV0YWZpbGVQcm9jICAgY2FsbGJhY2ssCisgICAgVk9JRCAqICAgICAgICAgICAgICAgICAgY2FsbGJhY2tEYXRhLAorICAgIEdESVBDT05TVCBHcEltYWdlQXR0cmlidXRlcyAqICAgICBpbWFnZUF0dHJpYnV0ZXMKKyAgICApOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRW51bWVyYXRlTWV0YWZpbGVTcmNSZWN0RGVzdFJlY3QoCisgICAgR3BHcmFwaGljcyAqICAgICAgICAgICAgZ3JhcGhpY3MsCisgICAgR0RJUENPTlNUIEdwTWV0YWZpbGUgKiAgbWV0YWZpbGUsCisgICAgR0RJUENPTlNUIFJlY3RGICYgICAgICAgZGVzdFJlY3QsCisgICAgR0RJUENPTlNUIFJlY3RGICYgICAgICAgc3JjUmVjdCwKKyAgICBVbml0ICAgICAgICAgICAgICAgICAgICBzcmNVbml0LAorICAgIEVudW1lcmF0ZU1ldGFmaWxlUHJvYyAgIGNhbGxiYWNrLAorICAgIFZPSUQgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSwKKyAgICBHRElQQ09OU1QgR3BJbWFnZUF0dHJpYnV0ZXMgKiAgICAgaW1hZ2VBdHRyaWJ1dGVzCisgICAgKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEVudW1lcmF0ZU1ldGFmaWxlU3JjUmVjdERlc3RSZWN0SSgKKyAgICBHcEdyYXBoaWNzICogICAgICAgICAgICBncmFwaGljcywKKyAgICBHRElQQ09OU1QgR3BNZXRhZmlsZSAqICBtZXRhZmlsZSwKKyAgICBHRElQQ09OU1QgUmVjdCAmICAgICAgICBkZXN0UmVjdCwKKyAgICBHRElQQ09OU1QgUmVjdCAmICAgICAgICBzcmNSZWN0LAorICAgIFVuaXQgICAgICAgICAgICAgICAgICAgIHNyY1VuaXQsCisgICAgRW51bWVyYXRlTWV0YWZpbGVQcm9jICAgY2FsbGJhY2ssCisgICAgVk9JRCAqICAgICAgICAgICAgICAgICAgY2FsbGJhY2tEYXRhLAorICAgIEdESVBDT05TVCBHcEltYWdlQXR0cmlidXRlcyAqICAgICBpbWFnZUF0dHJpYnV0ZXMKKyAgICApOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwRW51bWVyYXRlTWV0YWZpbGVTcmNSZWN0RGVzdFBvaW50cygKKyAgICBHcEdyYXBoaWNzICogICAgICAgICAgICBncmFwaGljcywKKyAgICBHRElQQ09OU1QgR3BNZXRhZmlsZSAqICBtZXRhZmlsZSwKKyAgICBHRElQQ09OU1QgUG9pbnRGICogICAgICBkZXN0UG9pbnRzLAorICAgIElOVCAgICAgICAgICAgICAgICAgICAgIGNvdW50LAorICAgIEdESVBDT05TVCBSZWN0RiAmICAgICAgIHNyY1JlY3QsCisgICAgVW5pdCAgICAgICAgICAgICAgICAgICAgc3JjVW5pdCwKKyAgICBFbnVtZXJhdGVNZXRhZmlsZVByb2MgICBjYWxsYmFjaywKKyAgICBWT0lEICogICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEsCisgICAgR0RJUENPTlNUIEdwSW1hZ2VBdHRyaWJ1dGVzICogICAgIGltYWdlQXR0cmlidXRlcworICAgICk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBFbnVtZXJhdGVNZXRhZmlsZVNyY1JlY3REZXN0UG9pbnRzSSgKKyAgICBHcEdyYXBoaWNzICogICAgICAgICAgICBncmFwaGljcywKKyAgICBHRElQQ09OU1QgR3BNZXRhZmlsZSAqICBtZXRhZmlsZSwKKyAgICBHRElQQ09OU1QgUG9pbnQgKiAgICAgICBkZXN0UG9pbnRzLAorICAgIElOVCAgICAgICAgICAgICAgICAgICAgIGNvdW50LAorICAgIEdESVBDT05TVCBSZWN0ICYgICAgICAgIHNyY1JlY3QsCisgICAgVW5pdCAgICAgICAgICAgICAgICAgICAgc3JjVW5pdCwKKyAgICBFbnVtZXJhdGVNZXRhZmlsZVByb2MgICBjYWxsYmFjaywKKyAgICBWT0lEICogICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEsCisgICAgR0RJUENPTlNUIEdwSW1hZ2VBdHRyaWJ1dGVzICogICAgIGltYWdlQXR0cmlidXRlcworICAgICk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBQbGF5TWV0YWZpbGVSZWNvcmQoCisgICAgR0RJUENPTlNUIEdwTWV0YWZpbGUgKiAgbWV0YWZpbGUsCisgICAgRW1mUGx1c1JlY29yZFR5cGUgICAgICAgcmVjb3JkVHlwZSwKKyAgICBVSU5UICAgICAgICAgICAgICAgICAgICBmbGFncywKKyAgICBVSU5UICAgICAgICAgICAgICAgICAgICBkYXRhU2l6ZSwKKyAgICBHRElQQ09OU1QgQllURSAqICAgICAgICBkYXRhCisgICAgKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldENsaXBHcmFwaGljcyhHcEdyYXBoaWNzICpncmFwaGljcywgR3BHcmFwaGljcyAqc3JjZ3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgIENvbWJpbmVNb2RlIGNvbWJpbmVNb2RlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldENsaXBSZWN0KEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBSRUFMIHgsIFJFQUwgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBSRUFMIHdpZHRoLCBSRUFMIGhlaWdodCwgQ29tYmluZU1vZGUgY29tYmluZU1vZGUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0Q2xpcFJlY3RJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBJTlQgeCwgSU5UIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIHdpZHRoLCBJTlQgaGVpZ2h0LCBDb21iaW5lTW9kZSBjb21iaW5lTW9kZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRDbGlwUGF0aChHcEdyYXBoaWNzICpncmFwaGljcywgR3BQYXRoICpwYXRoLCBDb21iaW5lTW9kZSBjb21iaW5lTW9kZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRDbGlwUmVnaW9uKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFJlZ2lvbiAqcmVnaW9uLAorICAgICAgICAgICAgICAgICAgQ29tYmluZU1vZGUgY29tYmluZU1vZGUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0Q2xpcEhyZ24oR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEhSR04gaFJnbiwgQ29tYmluZU1vZGUgY29tYmluZU1vZGUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwUmVzZXRDbGlwKEdwR3JhcGhpY3MgKmdyYXBoaWNzKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFRyYW5zbGF0ZUNsaXAoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIFJFQUwgZHgsIFJFQUwgZHkpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwVHJhbnNsYXRlQ2xpcEkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIElOVCBkeCwgSU5UIGR5KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldENsaXAoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUmVnaW9uICpyZWdpb24pOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0Q2xpcEJvdW5kcyhHcEdyYXBoaWNzICpncmFwaGljcywgR3BSZWN0RiAqcmVjdCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRDbGlwQm91bmRzSShHcEdyYXBoaWNzICpncmFwaGljcywgR3BSZWN0ICpyZWN0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcElzQ2xpcEVtcHR5KEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBCT09MICpyZXN1bHQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0VmlzaWJsZUNsaXBCb3VuZHMoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUmVjdEYgKnJlY3QpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0VmlzaWJsZUNsaXBCb3VuZHNJKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFJlY3QgKnJlY3QpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwSXNWaXNpYmxlQ2xpcEVtcHR5KEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBCT09MICpyZXN1bHQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwSXNWaXNpYmxlUG9pbnQoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIFJFQUwgeCwgUkVBTCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqcmVzdWx0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcElzVmlzaWJsZVBvaW50SShHcEdyYXBoaWNzICpncmFwaGljcywgSU5UIHgsIElOVCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQk9PTCAqcmVzdWx0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcElzVmlzaWJsZVJlY3QoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIFJFQUwgeCwgUkVBTCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBTCB3aWR0aCwgUkVBTCBoZWlnaHQsIEJPT0wgKnJlc3VsdCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBJc1Zpc2libGVSZWN0SShHcEdyYXBoaWNzICpncmFwaGljcywgSU5UIHgsIElOVCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIHdpZHRoLCBJTlQgaGVpZ2h0LCBCT09MICpyZXN1bHQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2F2ZUdyYXBoaWNzKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcmFwaGljc1N0YXRlICpzdGF0ZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBSZXN0b3JlR3JhcGhpY3MoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdyYXBoaWNzU3RhdGUgc3RhdGUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQmVnaW5Db250YWluZXIoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdESVBDT05TVCBHcFJlY3RGKiBkc3RyZWN0LAorICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBHcFJlY3RGICpzcmNyZWN0LCBHcFVuaXQgdW5pdCwgR3JhcGhpY3NDb250YWluZXIgKnN0YXRlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEJlZ2luQ29udGFpbmVySShHcEdyYXBoaWNzICpncmFwaGljcywgR0RJUENPTlNUIEdwUmVjdCogZHN0cmVjdCwKKyAgICAgICAgICAgICAgICAgICAgR0RJUENPTlNUIEdwUmVjdCAqc3JjcmVjdCwgR3BVbml0IHVuaXQsIEdyYXBoaWNzQ29udGFpbmVyICpzdGF0ZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBCZWdpbkNvbnRhaW5lcjIoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdyYXBoaWNzQ29udGFpbmVyKiBzdGF0ZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBFbmRDb250YWluZXIoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdyYXBoaWNzQ29udGFpbmVyIHN0YXRlKTsKKworR3BTdGF0dXMKK0dkaXBHZXRNZXRhZmlsZUhlYWRlckZyb21XbWYoCisgICAgSE1FVEFGSUxFICAgICAgICAgICBoV21mLAorICAgIEdESVBDT05TVCBBUE1GaWxlSGVhZGVyICogICAgIGFwbUZpbGVIZWFkZXIsCisgICAgTWV0YWZpbGVIZWFkZXIgKiAgICBoZWFkZXIKKyAgICApOworCitHcFN0YXR1cworV0lOR0RJUEFQSQorR2RpcEdldE1ldGFmaWxlSGVhZGVyRnJvbUVtZigKKyAgICBIRU5ITUVUQUZJTEUgICAgICAgIGhFbWYsCisgICAgTWV0YWZpbGVIZWFkZXIgKiAgICBoZWFkZXIKKyAgICApOworCitHcFN0YXR1cworV0lOR0RJUEFQSQorR2RpcEdldE1ldGFmaWxlSGVhZGVyRnJvbUZpbGUoCisgICAgR0RJUENPTlNUIFdDSEFSKiAgICAgICAgZmlsZW5hbWUsCisgICAgTWV0YWZpbGVIZWFkZXIgKiAgICBoZWFkZXIKKyAgICApOworCitHcFN0YXR1cworV0lOR0RJUEFQSQorR2RpcEdldE1ldGFmaWxlSGVhZGVyRnJvbVN0cmVhbSgKKyAgICBJU3RyZWFtICogICAgICAgICAgIHN0cmVhbSwKKyAgICBNZXRhZmlsZUhlYWRlciAqICAgIGhlYWRlcgorICAgICk7CisKK0dwU3RhdHVzCitXSU5HRElQQVBJCitHZGlwR2V0TWV0YWZpbGVIZWFkZXJGcm9tTWV0YWZpbGUoCisgICAgR3BNZXRhZmlsZSAqICAgICAgICBtZXRhZmlsZSwKKyAgICBNZXRhZmlsZUhlYWRlciAqICAgIGhlYWRlcgorICAgICk7CisKK0dwU3RhdHVzCitXSU5HRElQQVBJCitHZGlwR2V0SGVtZkZyb21NZXRhZmlsZSgKKyAgICBHcE1ldGFmaWxlICogICAgICAgIG1ldGFmaWxlLAorICAgIEhFTkhNRVRBRklMRSAqICAgICAgaEVtZgorICAgICk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVTdHJlYW1PbkZpbGUoR0RJUENPTlNUIFdDSEFSICogZmlsZW5hbWUsIFVJTlQgYWNjZXNzLCBJU3RyZWFtICoqc3RyZWFtKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZU1ldGFmaWxlRnJvbVdtZihITUVUQUZJTEUgaFdtZiwgQk9PTCBkZWxldGVXbWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdESVBDT05TVCBBUE1GaWxlSGVhZGVyICogYXBtRmlsZUhlYWRlciwgR3BNZXRhZmlsZSAqKm1ldGFmaWxlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZU1ldGFmaWxlRnJvbUVtZihIRU5ITUVUQUZJTEUgaEVtZiwgQk9PTCBkZWxldGVFbWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdwTWV0YWZpbGUgKiptZXRhZmlsZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVNZXRhZmlsZUZyb21GaWxlKEdESVBDT05TVCBXQ0hBUiogZmlsZSwgR3BNZXRhZmlsZSAqKm1ldGFmaWxlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZU1ldGFmaWxlRnJvbVdtZkZpbGUoR0RJUENPTlNUIFdDSEFSKiBmaWxlLCBHRElQQ09OU1QgQVBNRmlsZUhlYWRlciAqIGFwbUZpbGVIZWFkZXIsIEdwTWV0YWZpbGUgKiptZXRhZmlsZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVNZXRhZmlsZUZyb21TdHJlYW0oSVN0cmVhbSAqIHN0cmVhbSwgR3BNZXRhZmlsZSAqKm1ldGFmaWxlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFJlY29yZE1ldGFmaWxlKAorICAgIEhEQyAgICAgICAgICAgICAgICAgcmVmZXJlbmNlSGRjLAorICAgIEVtZlR5cGUgICAgICAgICAgICAgdHlwZSwKKyAgICBHRElQQ09OU1QgR3BSZWN0RiAqIGZyYW1lUmVjdCwKKyAgICBNZXRhZmlsZUZyYW1lVW5pdCAgIGZyYW1lVW5pdCwKKyAgICBHRElQQ09OU1QgV0NIQVIgKiAgIGRlc2NyaXB0aW9uLAorICAgIEdwTWV0YWZpbGUgKiogICAgICAgbWV0YWZpbGUKKyAgICApOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwUmVjb3JkTWV0YWZpbGVJKAorICAgIEhEQyAgICAgICAgICAgICAgICAgcmVmZXJlbmNlSGRjLAorICAgIEVtZlR5cGUgICAgICAgICAgICAgdHlwZSwKKyAgICBHRElQQ09OU1QgR3BSZWN0ICogIGZyYW1lUmVjdCwKKyAgICBNZXRhZmlsZUZyYW1lVW5pdCAgIGZyYW1lVW5pdCwKKyAgICBHRElQQ09OU1QgV0NIQVIgKiAgIGRlc2NyaXB0aW9uLAorICAgIEdwTWV0YWZpbGUgKiogICAgICAgbWV0YWZpbGUKKyAgICApOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwUmVjb3JkTWV0YWZpbGVGaWxlTmFtZSgKKyAgICBHRElQQ09OU1QgV0NIQVIqICAgIGZpbGVOYW1lLAorICAgIEhEQyAgICAgICAgICAgICAgICAgcmVmZXJlbmNlSGRjLAorICAgIEVtZlR5cGUgICAgICAgICAgICAgdHlwZSwKKyAgICBHRElQQ09OU1QgR3BSZWN0RiAqIGZyYW1lUmVjdCwKKyAgICBNZXRhZmlsZUZyYW1lVW5pdCAgIGZyYW1lVW5pdCwKKyAgICBHRElQQ09OU1QgV0NIQVIgKiAgIGRlc2NyaXB0aW9uLAorICAgIEdwTWV0YWZpbGUgKiogICAgICAgbWV0YWZpbGUKKyAgICApOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwUmVjb3JkTWV0YWZpbGVGaWxlTmFtZUkoCisgICAgR0RJUENPTlNUIFdDSEFSKiAgICBmaWxlTmFtZSwKKyAgICBIREMgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhkYywKKyAgICBFbWZUeXBlICAgICAgICAgICAgIHR5cGUsCisgICAgR0RJUENPTlNUIEdwUmVjdCAqICBmcmFtZVJlY3QsCisgICAgTWV0YWZpbGVGcmFtZVVuaXQgICBmcmFtZVVuaXQsCisgICAgR0RJUENPTlNUIFdDSEFSICogICBkZXNjcmlwdGlvbiwKKyAgICBHcE1ldGFmaWxlICoqICAgICAgIG1ldGFmaWxlCisgICAgKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFJlY29yZE1ldGFmaWxlU3RyZWFtKAorICAgIElTdHJlYW0gKiAgICAgICAgICAgc3RyZWFtLAorICAgIEhEQyAgICAgICAgICAgICAgICAgcmVmZXJlbmNlSGRjLAorICAgIEVtZlR5cGUgICAgICAgICAgICAgdHlwZSwKKyAgICBHRElQQ09OU1QgR3BSZWN0RiAqIGZyYW1lUmVjdCwKKyAgICBNZXRhZmlsZUZyYW1lVW5pdCAgIGZyYW1lVW5pdCwKKyAgICBHRElQQ09OU1QgV0NIQVIgKiAgIGRlc2NyaXB0aW9uLAorICAgIEdwTWV0YWZpbGUgKiogICAgICAgbWV0YWZpbGUKKyAgICApOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwUmVjb3JkTWV0YWZpbGVTdHJlYW1JKAorICAgIElTdHJlYW0gKiAgICAgICAgICAgc3RyZWFtLAorICAgIEhEQyAgICAgICAgICAgICAgICAgcmVmZXJlbmNlSGRjLAorICAgIEVtZlR5cGUgICAgICAgICAgICAgdHlwZSwKKyAgICBHRElQQ09OU1QgR3BSZWN0ICogIGZyYW1lUmVjdCwKKyAgICBNZXRhZmlsZUZyYW1lVW5pdCAgIGZyYW1lVW5pdCwKKyAgICBHRElQQ09OU1QgV0NIQVIgKiAgIGRlc2NyaXB0aW9uLAorICAgIEdwTWV0YWZpbGUgKiogICAgICAgbWV0YWZpbGUKKyAgICApOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0TWV0YWZpbGVEb3duTGV2ZWxSYXN0ZXJpemF0aW9uTGltaXQoCisgICAgR3BNZXRhZmlsZSAqICAgICAgICAgICAgbWV0YWZpbGUsCisgICAgVUlOVCAgICAgICAgICAgICAgICAgICAgbWV0YWZpbGVSYXN0ZXJpemF0aW9uTGltaXREcGkKKyAgICApOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0TWV0YWZpbGVEb3duTGV2ZWxSYXN0ZXJpemF0aW9uTGltaXQoCisgICAgR0RJUENPTlNUIEdwTWV0YWZpbGUgKiAgbWV0YWZpbGUsCisgICAgVUlOVCAqICAgICAgICAgICAgICAgICAgbWV0YWZpbGVSYXN0ZXJpemF0aW9uTGltaXREcGkKKyAgICApOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0SW1hZ2VEZWNvZGVyc1NpemUoVUlOVCAqbnVtRGVjb2RlcnMsIFVJTlQgKnNpemUpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0SW1hZ2VEZWNvZGVycyhVSU5UIG51bURlY29kZXJzLAorICAgICAgICAgICAgICAgICAgICAgVUlOVCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgSW1hZ2VDb2RlY0luZm8gKmRlY29kZXJzKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldEltYWdlRW5jb2RlcnNTaXplKFVJTlQgKm51bUVuY29kZXJzLCBVSU5UICpzaXplKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldEltYWdlRW5jb2RlcnMoVUlOVCBudW1FbmNvZGVycywKKyAgICAgICAgICAgICAgICAgICAgIFVJTlQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgIEltYWdlQ29kZWNJbmZvICplbmNvZGVycyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBBZGRJbWFnZUNvZGVjKEdESVBDT05TVCBJbWFnZUNvZGVjSW5mbyAqY29kZWMpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwUmVtb3ZlSW1hZ2VDb2RlYyhHRElQQ09OU1QgSW1hZ2VDb2RlY0luZm8gKmNvZGVjKTsKKworI2lmbmRlZiBEQ1JfVVNFX05FV18xODYwOTEKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRHcmFwaGljc1BpeGVsKEdwR3JhcGhpY3MqIGdyYXBoaWNzLCBSRUFMIHgsIFJFQUwgeSwgQVJHQiogYXJnYik7CisjZW5kaWYKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENvbW1lbnQoR3BHcmFwaGljcyogZ3JhcGhpY3MsIFVJTlQgc2l6ZURhdGEsIEdESVBDT05TVCBCWVRFICogZGF0YSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRHcmFwaGljc0xheW91dChHcEdyYXBoaWNzKiBncmFwaGljcywgR3JhcGhpY3NMYXlvdXQqIGxheW91dCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRHcmFwaGljc0xheW91dChHcEdyYXBoaWNzKiBncmFwaGljcywgR0RJUENPTlNUIEdyYXBoaWNzTGF5b3V0IGxheW91dCk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRm9udEZhbWlseQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVGb250RmFtaWx5RnJvbU5hbWUoR0RJUENPTlNUIFdDSEFSICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcEZvbnRDb2xsZWN0aW9uICpmb250Q29sbGVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3BGb250RmFtaWx5ICoqRm9udEZhbWlseSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEZWxldGVGb250RmFtaWx5KEdwRm9udEZhbWlseSAqRm9udEZhbWlseSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDbG9uZUZvbnRGYW1pbHkoR3BGb250RmFtaWx5ICpGb250RmFtaWx5LCBHcEZvbnRGYW1pbHkgKipjbG9uZWRGb250RmFtaWx5KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldEdlbmVyaWNGb250RmFtaWx5U2Fuc1NlcmlmKEdwRm9udEZhbWlseSAqKm5hdGl2ZUZhbWlseSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRHZW5lcmljRm9udEZhbWlseVNlcmlmKEdwRm9udEZhbWlseSAqKm5hdGl2ZUZhbWlseSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRHZW5lcmljRm9udEZhbWlseU1vbm9zcGFjZShHcEZvbnRGYW1pbHkgKipuYXRpdmVGYW1pbHkpOworCisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRGYW1pbHlOYW1lKAorICAgIEdESVBDT05TVCBHcEZvbnRGYW1pbHkgICpmYW1pbHksCisgICAgV0NIQVIgICAgICAgICAgICAgICAgbmFtZVtMRl9GQUNFU0laRV0sCisgICAgTEFOR0lEICAgICAgICAgICAgICAgbGFuZ3VhZ2UKKyk7CisKK0dwU3RhdHVzICAgV0lOR0RJUEFQSQorR2RpcElzU3R5bGVBdmFpbGFibGUoR0RJUENPTlNUIEdwRm9udEZhbWlseSAqZmFtaWx5LCBJTlQgc3R5bGUsIEJPT0wgKiBJc1N0eWxlQXZhaWxhYmxlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEZvbnRDb2xsZWN0aW9uRW51bWVyYWJsZSgKKyAgICBHcEZvbnRDb2xsZWN0aW9uKiBmb250Q29sbGVjdGlvbiwKKyAgICBHcEdyYXBoaWNzKiBncmFwaGljcywKKyAgICBJTlQgKiAgICAgICBudW1Gb3VuZAorKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSSBHZGlwRm9udENvbGxlY3Rpb25FbnVtZXJhdGUoCisgICAgR3BGb250Q29sbGVjdGlvbiogZm9udENvbGxlY3Rpb24sCisgICAgSU5UICAgICAgICAgICAgIG51bVNvdWdodCwKKyAgICBHcEZvbnRGYW1pbHkqICAgZ3BmYW1pbGllc1tdLAorICAgIElOVCogICAgICAgICAgICBudW1Gb3VuZCwKKyAgICBHcEdyYXBoaWNzKiAgICAgZ3JhcGhpY3MKKyk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE5ldyBBUEkKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldEVtSGVpZ2h0KEdESVBDT05TVCBHcEZvbnRGYW1pbHkgKmZhbWlseSwgSU5UIHN0eWxlLCBVSU5UMTYgKiBFbUhlaWdodCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRDZWxsQXNjZW50KEdESVBDT05TVCBHcEZvbnRGYW1pbHkgKmZhbWlseSwgSU5UIHN0eWxlLCBVSU5UMTYgKiBDZWxsQXNjZW50KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldENlbGxEZXNjZW50KEdESVBDT05TVCBHcEZvbnRGYW1pbHkgKmZhbWlseSwgSU5UIHN0eWxlLCBVSU5UMTYgKiBDZWxsRGVzY2VudCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRMaW5lU3BhY2luZyhHRElQQ09OU1QgR3BGb250RmFtaWx5ICpmYW1pbHksIElOVCBzdHlsZSwgVUlOVDE2ICogTGluZVNwYWNpbmcpOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRm9udAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVGb250RnJvbURDKAorICAgIEhEQyAgICAgICAgaGRjLAorICAgIEdwRm9udCAgICoqZm9udAorKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENyZWF0ZUZvbnRGcm9tTG9nZm9udEEoCisgICAgSERDICAgICAgICBoZGMsCisgICAgR0RJUENPTlNUIExPR0ZPTlRBICAqbG9nZm9udCwKKyAgICBHcEZvbnQgICAqKmZvbnQKKyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBDcmVhdGVGb250RnJvbUxvZ2ZvbnRXKAorICAgIEhEQyAgICAgICAgaGRjLAorICAgIEdESVBDT05TVCBMT0dGT05UVyAgKmxvZ2ZvbnQsCisgICAgR3BGb250ICAgKipmb250CispOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ3JlYXRlRm9udCgKKyAgICBHRElQQ09OU1QgR3BGb250RmFtaWx5ICAqZm9udEZhbWlseSwKKyAgICBSRUFMICAgICAgICAgICAgICAgICBlbVNpemUsCisgICAgSU5UICAgICAgICAgICAgICAgICAgc3R5bGUsCisgICAgVW5pdCAgICAgICAgICAgICAgICAgdW5pdCwKKyAgICBHcEZvbnQgICAgICAgICAgICAgKipmb250CispOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ2xvbmVGb250KEdwRm9udCogZm9udCwgR3BGb250KiogY2xvbmVGb250KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcERlbGV0ZUZvbnQoR3BGb250KiBmb250KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldEZhbWlseShHcEZvbnQgKmZvbnQsIEdwRm9udEZhbWlseSAqKmZhbWlseSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRGb250U3R5bGUoR3BGb250ICpmb250LCBJTlQgKnN0eWxlKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldEZvbnRTaXplKEdwRm9udCAqZm9udCwgUkVBTCAqc2l6ZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRGb250VW5pdChHcEZvbnQgKmZvbnQsIFVuaXQgKnVuaXQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0Rm9udEhlaWdodChHRElQQ09OU1QgR3BGb250ICpmb250LCBHRElQQ09OU1QgR3BHcmFwaGljcyAqZ3JhcGhpY3MsIFJFQUwgKmhlaWdodCk7CisKKyNpZmRlZiBEQ1JfVVNFX05FV18xMjU0NjcKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRGb250SGVpZ2h0R2l2ZW5EUEkoR0RJUENPTlNUIEdwRm9udCAqZm9udCwgUkVBTCBkcGksIFJFQUwgKmhlaWdodCk7CisjZW5kaWYKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldExvZ0ZvbnRBKEdwRm9udCAqIGZvbnQsIEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBMT0dGT05UQSAqIGxvZ2ZvbnRBKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldExvZ0ZvbnRXKEdwRm9udCAqIGZvbnQsIEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBMT0dGT05UVyAqIGxvZ2ZvbnRXKTsKKworLy8gRm9udENvbGxlY3Rpb24KKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcE5ld0luc3RhbGxlZEZvbnRDb2xsZWN0aW9uKEdwRm9udENvbGxlY3Rpb24qKiBmb250Q29sbGVjdGlvbik7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBOZXdQcml2YXRlRm9udENvbGxlY3Rpb24oR3BGb250Q29sbGVjdGlvbioqIGZvbnRDb2xsZWN0aW9uKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcERlbGV0ZVByaXZhdGVGb250Q29sbGVjdGlvbihHcEZvbnRDb2xsZWN0aW9uKiogZm9udENvbGxlY3Rpb24pOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0Rm9udENvbGxlY3Rpb25GYW1pbHlDb3VudCgKKyAgICBHcEZvbnRDb2xsZWN0aW9uKiBmb250Q29sbGVjdGlvbiwKKyAgICBJTlQgKiAgICAgICBudW1Gb3VuZAorKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldEZvbnRDb2xsZWN0aW9uRmFtaWx5TGlzdCgKKyAgICBHcEZvbnRDb2xsZWN0aW9uKiBmb250Q29sbGVjdGlvbiwKKyAgICBJTlQgICAgICAgICAgICAgbnVtU291Z2h0LAorICAgIEdwRm9udEZhbWlseSogICBncGZhbWlsaWVzW10sCisgICAgSU5UKiAgICAgICAgICAgIG51bUZvdW5kCispOworCisjaWZuZGVmIERDUl9VU0VfTkVXXzIzNTA3MgorR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEluc3RhbGxGb250RmlsZSgKKyAgICBHcEZvbnRDb2xsZWN0aW9uKiBmb250Q29sbGVjdGlvbiwKKyAgICBHRElQQ09OU1QgV0NIQVIqIGZpbGVuYW1lCispOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwVW5pbnN0YWxsRm9udEZpbGUoCisgICAgR3BGb250Q29sbGVjdGlvbiogZm9udENvbGxlY3Rpb24sCisgICAgR0RJUENPTlNUIFdDSEFSKiBmaWxlbmFtZQorKTsKKyNlbmRpZgorCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwUHJpdmF0ZUFkZEZvbnRGaWxlKAorICAgIEdwRm9udENvbGxlY3Rpb24qIGZvbnRDb2xsZWN0aW9uLAorICAgIEdESVBDT05TVCBXQ0hBUiogZmlsZW5hbWUKKyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBQcml2YXRlQWRkTWVtb3J5Rm9udCgKKyAgICBHcEZvbnRDb2xsZWN0aW9uKiBmb250Q29sbGVjdGlvbiwKKyAgICBHRElQQ09OU1Qgdm9pZCogbWVtb3J5LAorICAgIElOVCBsZW5ndGgKKyk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGV4dAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcmF3U3RyaW5nKAorICAgIEdwR3JhcGhpY3MgICAgICAgICAgICAgICAqZ3JhcGhpY3MsCisgICAgR0RJUENPTlNUIFdDSEFSICAgICAgICAgICpzdHJpbmcsCisgICAgSU5UICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsCisgICAgR0RJUENPTlNUIEdwRm9udCAgICAgICAgICpmb250LAorICAgIEdESVBDT05TVCBSZWN0RiAgICAgICAgICAqbGF5b3V0UmVjdCwKKyAgICBHRElQQ09OU1QgR3BTdHJpbmdGb3JtYXQgKnN0cmluZ0Zvcm1hdCwKKyAgICBHRElQQ09OU1QgR3BCcnVzaCAgICAgICAgKmJydXNoCispOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwTWVhc3VyZVN0cmluZygKKyAgICBHcEdyYXBoaWNzICAgICAgICAgICAgICAgKmdyYXBoaWNzLAorICAgIEdESVBDT05TVCBXQ0hBUiAgICAgICAgICAqc3RyaW5nLAorICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLAorICAgIEdESVBDT05TVCBHcEZvbnQgICAgICAgICAqZm9udCwKKyAgICBHRElQQ09OU1QgUmVjdEYgICAgICAgICAgKmxheW91dFJlY3QsCisgICAgR0RJUENPTlNUIEdwU3RyaW5nRm9ybWF0ICpzdHJpbmdGb3JtYXQsCisgICAgUmVjdEYgICAgICAgICAgICAgICAgICAgICpib3VuZGluZ0JveCwKKyAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgKmNvZGVwb2ludHNGaXR0ZWQsCisgICAgSU5UICAgICAgICAgICAgICAgICAgICAgICpsaW5lc0ZpbGxlZAorKTsKKworI2lmbmRlZiBEQ1JfVVNFX05FV18xNzQzNDAKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBNZWFzdXJlU3RyaW5nUmVnaW9uKAorICAgIEdwR3JhcGhpY3MgICAgICAgICAgICAgICAqZ3JhcGhpY3MsCisgICAgR0RJUENPTlNUIFdDSEFSICAgICAgICAgICpzdHJpbmcsCisgICAgSU5UICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsCisgICAgR0RJUENPTlNUIEdwRm9udCAgICAgICAgICpmb250LAorICAgIEdESVBDT05TVCBSZWN0RiAgICAgICAgICAmbGF5b3V0UmVjdCwKKyAgICBHRElQQ09OU1QgR3BTdHJpbmdGb3JtYXQgKnN0cmluZ0Zvcm1hdCwKKyAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q2hhcmFjdGVySW5kZXgsCisgICAgSU5UICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJDb3VudCwKKyAgICBHcFJlZ2lvbiAgICAgICAgICAgICAgICAgKnJlZ2lvbgorKTsKKyNlbmRpZgorCisjaWZkZWYgRENSX1VTRV9ORVdfMTc0MzQwCitHcFN0YXR1cworV0lOR0RJUEFQSQorR2RpcE1lYXN1cmVDaGFyYWN0ZXJSYW5nZXMoCisgICAgR3BHcmFwaGljcyAgICAgICAgICAgICAgICpncmFwaGljcywKKyAgICBHRElQQ09OU1QgV0NIQVIgICAgICAgICAgKnN0cmluZywKKyAgICBJTlQgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKKyAgICBHRElQQ09OU1QgR3BGb250ICAgICAgICAgKmZvbnQsCisgICAgR0RJUENPTlNUIFJlY3RGICAgICAgICAgICZsYXlvdXRSZWN0LAorICAgIEdESVBDT05TVCBHcFN0cmluZ0Zvcm1hdCAqc3RyaW5nRm9ybWF0LAorICAgIElOVCAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uQ291bnQsCisgICAgR3BSZWdpb24gICAgICAgICAgICAgICAgKipyZWdpb25zCispOworI2VuZGlmCisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcmF3RHJpdmVyU3RyaW5nKAorICAgIEdwR3JhcGhpY3MgKmdyYXBoaWNzLAorICAgIEdESVBDT05TVCBVSU5UMTYgKnRleHQsCisgICAgSU5UIGxlbmd0aCwKKyAgICBHRElQQ09OU1QgR3BGb250ICpmb250LAorICAgIEdESVBDT05TVCBHcEJydXNoICpicnVzaCwKKyAgICBHRElQQ09OU1QgUG9pbnRGICpwb3NpdGlvbnMsCisgICAgSU5UIGZsYWdzLAorICAgIEdESVBDT05TVCBHcE1hdHJpeCAqbWF0cml4CispOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwTWVhc3VyZURyaXZlclN0cmluZygKKyAgICBHcEdyYXBoaWNzICpncmFwaGljcywKKyAgICBHRElQQ09OU1QgVUlOVDE2ICp0ZXh0LAorICAgIElOVCBsZW5ndGgsCisgICAgR0RJUENPTlNUIEdwRm9udCAqZm9udCwKKyAgICBHRElQQ09OU1QgUG9pbnRGICpwb3NpdGlvbnMsCisgICAgSU5UIGZsYWdzLAorICAgIEdESVBDT05TVCBHcE1hdHJpeCAqbWF0cml4LAorICAgIFJlY3RGICpib3VuZGluZ0JveAorKTsKKworI2lmbmRlZiBEQ1JfVVNFX05FV18xNjg3NzIKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcml2ZXJTdHJpbmdQb2ludFRvQ29kZXBvaW50KAorICAgIEdwR3JhcGhpY3MgKmdyYXBoaWNzLAorICAgIEdESVBDT05TVCBVSU5UMTYgKnRleHQsCisgICAgSU5UIGxlbmd0aCwKKyAgICBHRElQQ09OU1QgR3BGb250ICpmb250LAorICAgIEdESVBDT05TVCBQb2ludEYgKnBvc2l0aW9ucywKKyAgICBJTlQgZmxhZ3MsCisgICAgR3BNYXRyaXggKm1hdHJpeCwKKyAgICBHRElQQ09OU1QgUG9pbnRGICpoaXQsCisgICAgSU5UICppbmRleCwKKyAgICBCT09MICpyaWdodEVkZ2UsCisgICAgUkVBTCAqZGlzdGFuY2UKKyk7CisjZW5kaWYKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTdHJpbmcgZm9ybWF0IEFQSXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ3JlYXRlU3RyaW5nRm9ybWF0KAorICAgIElOVCAgICAgICAgICAgICAgIGZvcm1hdEF0dHJpYnV0ZXMsCisgICAgTEFOR0lEICAgICAgICAgICAgbGFuZ3VhZ2UsCisgICAgR3BTdHJpbmdGb3JtYXQgICoqZm9ybWF0CispOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU3RyaW5nRm9ybWF0R2V0R2VuZXJpY0RlZmF1bHQoR3BTdHJpbmdGb3JtYXQgKipmb3JtYXQpOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU3RyaW5nRm9ybWF0R2V0R2VuZXJpY1R5cG9ncmFwaGljKEdwU3RyaW5nRm9ybWF0ICoqZm9ybWF0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcERlbGV0ZVN0cmluZ0Zvcm1hdChHcFN0cmluZ0Zvcm1hdCAqZm9ybWF0KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcENsb25lU3RyaW5nRm9ybWF0KEdESVBDT05TVCBHcFN0cmluZ0Zvcm1hdCAqZm9ybWF0LCBHcFN0cmluZ0Zvcm1hdCAqKm5ld0Zvcm1hdCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRTdHJpbmdGb3JtYXRGbGFncyhHcFN0cmluZ0Zvcm1hdCAqZm9ybWF0LCBJTlQgZmxhZ3MpOworCitHcFN0YXR1cyBXSU5HRElQQVBJIEdkaXBHZXRTdHJpbmdGb3JtYXRGbGFncyhHRElQQ09OU1QgR3BTdHJpbmdGb3JtYXQgKmZvcm1hdCwgSU5UICpmbGFncyk7CisKKyNpZm5kZWYgRENSX1VTRV9ORVdfMTUyMTU0CitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0U3RyaW5nRm9ybWF0TGluZVNwYWNpbmcoR3BTdHJpbmdGb3JtYXQgKmZvcm1hdCwgUkVBTCBhbW91bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGluZVNwYWNpbmcgbWV0aG9kKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFN0cmluZ0Zvcm1hdExpbmVTcGFjaW5nQW1vdW50KEdESVBDT05TVCBHcFN0cmluZ0Zvcm1hdCAqZm9ybWF0LCBSRUFMICphbW91bnQpOworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFN0cmluZ0Zvcm1hdExpbmVTcGFjaW5nTWV0aG9kKEdESVBDT05TVCBHcFN0cmluZ0Zvcm1hdCAqZm9ybWF0LCBMaW5lU3BhY2luZyAqbWV0aG9kKTsKKyNlbmRpZgorCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwU2V0U3RyaW5nRm9ybWF0QWxpZ24oR3BTdHJpbmdGb3JtYXQgKmZvcm1hdCwgU3RyaW5nQWxpZ25tZW50IGFsaWduKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFN0cmluZ0Zvcm1hdEFsaWduKEdESVBDT05TVCBHcFN0cmluZ0Zvcm1hdCAqZm9ybWF0LCBTdHJpbmdBbGlnbm1lbnQgKmFsaWduKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFN0cmluZ0Zvcm1hdExpbmVBbGlnbihHcFN0cmluZ0Zvcm1hdCAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdBbGlnbm1lbnQgYWxpZ24pOworCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0U3RyaW5nRm9ybWF0TGluZUFsaWduKEdESVBDT05TVCBHcFN0cmluZ0Zvcm1hdCAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdBbGlnbm1lbnQgKmFsaWduKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFN0cmluZ0Zvcm1hdFRyaW1taW5nKAorICAgIEdwU3RyaW5nRm9ybWF0ICAqZm9ybWF0LAorICAgIFN0cmluZ1RyaW1taW5nICAgdHJpbW1pbmcKKyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRTdHJpbmdGb3JtYXRUcmltbWluZygKKyAgICBHRElQQ09OU1QgR3BTdHJpbmdGb3JtYXQgKmZvcm1hdCwKKyAgICBTdHJpbmdUcmltbWluZyAgICAgICAqdHJpbW1pbmcKKyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBTZXRTdHJpbmdGb3JtYXRIb3RrZXlQcmVmaXgoR3BTdHJpbmdGb3JtYXQgKmZvcm1hdCwgSU5UIGhvdGtleVByZWZpeCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRTdHJpbmdGb3JtYXRIb3RrZXlQcmVmaXgoR0RJUENPTlNUIEdwU3RyaW5nRm9ybWF0ICpmb3JtYXQsIElOVCAqaG90a2V5UHJlZml4KTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFN0cmluZ0Zvcm1hdFRhYlN0b3BzKEdwU3RyaW5nRm9ybWF0ICpmb3JtYXQsIFJFQUwgZmlyc3RUYWJPZmZzZXQsIElOVCBjb3VudCwgR0RJUENPTlNUIFJFQUwgKnRhYlN0b3BzKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcEdldFN0cmluZ0Zvcm1hdFRhYlN0b3BzKEdESVBDT05TVCBHcFN0cmluZ0Zvcm1hdCAqZm9ybWF0LCBJTlQgY291bnQsIFJFQUwgKmZpcnN0VGFiT2Zmc2V0LCBSRUFMICp0YWJTdG9wcyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRTdHJpbmdGb3JtYXRUYWJTdG9wQ291bnQoR0RJUENPTlNUIEdwU3RyaW5nRm9ybWF0ICpmb3JtYXQsIElOVCAqIGNvdW50KTsKKworI2lmZGVmIERDUl9VU0VfTkVXXzE0NjkzMworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFN0cmluZ0Zvcm1hdERpZ2l0U3Vic3RpdHV0aW9uKEdwU3RyaW5nRm9ybWF0ICpmb3JtYXQsIExBTkdJRCBsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdEaWdpdFN1YnN0aXR1dGUgc3Vic3RpdHV0ZSk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBHZXRTdHJpbmdGb3JtYXREaWdpdFN1YnN0aXR1dGlvbihHRElQQ09OU1QgR3BTdHJpbmdGb3JtYXQgKmZvcm1hdCwgTEFOR0lEICpsYW5ndWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdEaWdpdFN1YnN0aXR1dGUgKnN1YnN0aXR1dGUpOworI2VuZGlmIC8vIERDUl9VU0VfTkVXXzE0NjkzMworCisjaWZkZWYgRENSX1VTRV9ORVdfMTc0MzQwCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwR2V0U3RyaW5nRm9ybWF0TWVhc3VyYWJsZUNoYXJhY3RlclJhbmdlQ291bnQoCisgICAgR0RJUENPTlNUIEdwU3RyaW5nRm9ybWF0ICAgICpmb3JtYXQsCisgICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgICpjb3VudAorKTsKKworR3BTdGF0dXMgV0lOR0RJUEFQSQorR2RpcFNldFN0cmluZ0Zvcm1hdE1lYXN1cmFibGVDaGFyYWN0ZXJSYW5nZXMoCisgICAgR3BTdHJpbmdGb3JtYXQgICAgICAgICAgICAgICpmb3JtYXQsCisgICAgSU5UICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlQ291bnQsCisgICAgR0RJUENPTlNUIENoYXJhY3RlclJhbmdlICAgICpyYW5nZXMKKyk7CisjZW5kaWYKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDYWNoZWQgQml0bWFwIEFQSXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHcFN0YXR1cyBXSU5HRElQQVBJCitHZGlwQ3JlYXRlQ2FjaGVkQml0bWFwKAorICAgIEdwQml0bWFwICpiaXRtYXAsCisgICAgR3BHcmFwaGljcyAqZ3JhcGhpY3MsCisgICAgR3BDYWNoZWRCaXRtYXAgKipjYWNoZWRCaXRtYXAKKyk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEZWxldGVDYWNoZWRCaXRtYXAoR3BDYWNoZWRCaXRtYXAgKmNhY2hlZEJpdG1hcCk7CisKK0dwU3RhdHVzIFdJTkdESVBBUEkKK0dkaXBEcmF3Q2FjaGVkQml0bWFwKAorICAgIEdwR3JhcGhpY3MgKmdyYXBoaWNzLAorICAgIEdwQ2FjaGVkQml0bWFwICpjYWNoZWRCaXRtYXAsCisgICAgSU5UIHgsCisgICAgSU5UIHkKKyk7CisKK1VJTlQgV0lOR0RJUEFQSQorR2RpcEVtZlRvV21mQml0cygKKyAgICBIRU5ITUVUQUZJTEUgaGVtZiwKKyAgICBVSU5UICAgICAgICAgY2JEYXRhMTYsCisgICAgTFBCWVRFICAgICAgIHBEYXRhMTYsCisgICAgSU5UICAgICAgICAgIGlNYXBNb2RlLAorICAgIElOVCAgICAgICAgICBlRmxhZ3MKKyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyAhX0ZMQVRBUElfSApkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0ZvbnQuaCBiL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNGb250LmgKaW5kZXggYzlmZjA1MC4uNGM5ZTAxZiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0ZvbnQuaAorKysgYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzRm9udC5oCkBAIC0xLDI5OSArMSwyOTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwNCi0qDQotKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwgTWljcm9zb2Z0IENvcnAuICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSoNCi0qIE1vZHVsZSBOYW1lOg0KLSoNCi0qICAgR2RpcGx1c0ZvbnQuaA0KLSoNCi0qIEFic3RyYWN0Og0KLSoNCi0qICAgRm9udCByZWxhdGVkIGRlY2xhcmF0aW9ucw0KLSoNCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotI2lmbmRlZiBfR0RJUExVU0ZPTlRfSA0KLSNkZWZpbmUgX0dESVBMVVNGT05UX0gNCi0NCi1pbmxpbmUNCi1Gb250OjpGb250KElOIEhEQyBoZGMpDQotew0KLSAgICBHcEZvbnQgKmZvbnQgPSBOVUxMOw0KLSAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUZvbnRGcm9tREMoaGRjLCAmZm9udCk7DQotDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xMzU0MjkNCi0gICAgaWYgKChJTlQpIGxhc3RSZXN1bHQgPj0gMTApDQotICAgICAgICBsYXN0UmVzdWx0ID0gTm90Rm91bmQ7DQotI2VuZGlmDQotDQotICAgIFNldE5hdGl2ZUZvbnQoZm9udCk7DQotfQ0KLQ0KLSNpZmRlZiBEQ1JfVVNFX05FV18xMjcwODQNCi1pbmxpbmUNCi1Gb250OjpGb250KElOIEhEQyBoZGMsDQotICAgICAgICAgICBJTiBjb25zdCBIRk9OVCBoZm9udCkNCi17DQotICAgIEdwRm9udCAqZm9udCA9IE5VTEw7DQotDQotICAgIGlmIChoZm9udCkNCi0gICAgew0KLSAgICAgICAgTE9HRk9OVEEgbGY7DQotDQotICAgICAgICBpZihHZXRPYmplY3RBKGhmb250LCBzaXplb2YoTE9HRk9OVEEpLCAmbGYpKQ0KLSAgICAgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlRm9udEZyb21Mb2dmb250QShoZGMsICZsZiwgJmZvbnQpOw0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlRm9udEZyb21EQyhoZGMsICZmb250KTsNCi0gICAgfQ0KLSAgICBlbHNlDQotICAgIHsNCi0gICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlRm9udEZyb21EQyhoZGMsICZmb250KTsNCi0gICAgfQ0KLQ0KLSNpZm5kZWYgRENSX1VTRV9ORVdfMTM1NDI5DQotICAgIGlmICgoSU5UKSBsYXN0UmVzdWx0ID49IDEwKQ0KLSAgICAgICAgbGFzdFJlc3VsdCA9IE5vdEZvdW5kOw0KLSNlbmRpZg0KLQ0KLSAgICBTZXROYXRpdmVGb250KGZvbnQpOw0KLX0NCi0jZW5kaWYNCi0NCi1pbmxpbmUNCi1Gb250OjpGb250KElOIEhEQyBoZGMsDQotICAgICAgICAgICBJTiBjb25zdCBMT0dGT05UVyogbG9nZm9udCkNCi17DQotICAgIEdwRm9udCAqZm9udCA9IE5VTEw7DQotICAgIGlmIChsb2dmb250KQ0KLSAgICB7DQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUZvbnRGcm9tTG9nZm9udFcoaGRjLCBsb2dmb250LCAmZm9udCk7DQotICAgIH0NCi0gICAgZWxzZQ0KLSAgICB7DQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUZvbnRGcm9tREMoaGRjLCAmZm9udCk7DQotICAgIH0NCi0NCi0jaWZuZGVmIERDUl9VU0VfTkVXXzEzNTQyOQ0KLSAgICBpZiAoKElOVCkgbGFzdFJlc3VsdCA+PSAxMCkNCi0gICAgICAgIGxhc3RSZXN1bHQgPSBOb3RGb3VuZDsNCi0jZW5kaWYNCi0NCi0gICAgU2V0TmF0aXZlRm9udChmb250KTsNCi19DQotDQotaW5saW5lDQotRm9udDo6Rm9udChJTiBIREMgaGRjLA0KLSAgICAgICAgICAgSU4gY29uc3QgTE9HRk9OVEEqIGxvZ2ZvbnQpDQotew0KLSAgICBHcEZvbnQgKmZvbnQgPSBOVUxMOw0KLQ0KLSAgICBpZiAobG9nZm9udCkNCi0gICAgew0KLSAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVGb250RnJvbUxvZ2ZvbnRBKGhkYywgbG9nZm9udCwgJmZvbnQpOw0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVGb250RnJvbURDKGhkYywgJmZvbnQpOw0KLSAgICB9DQotDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xMzU0MjkNCi0gICAgaWYgKChJTlQpIGxhc3RSZXN1bHQgPj0gMTApDQotICAgICAgICBsYXN0UmVzdWx0ID0gTm90Rm91bmQ7DQotI2VuZGlmDQotDQotICAgIFNldE5hdGl2ZUZvbnQoZm9udCk7DQotfQ0KLQ0KLWlubGluZQ0KLUZvbnQ6OkZvbnQoDQotICAgICBJTiBjb25zdCBGb250RmFtaWx5ICogZmFtaWx5LA0KLSAgICAgSU4gUkVBTCAgICAgICAgIGVtU2l6ZSwNCi0gICAgIElOIElOVCAgICAgICAgICBzdHlsZSwNCi0gICAgIElOIFVuaXQgICAgICAgICB1bml0DQotKQ0KLXsNCi0gICAgR3BGb250ICpmb250ID0gTlVMTDsNCi0NCi0gICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVGb250KGZhbWlseSA/IGZhbWlseS0+bmF0aXZlRmFtaWx5IDogTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgIGVtU2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgIHN0eWxlLA0KLSAgICAgICAgICAgICAgICAgICAgdW5pdCwNCi0gICAgICAgICAgICAgICAgICAgICZmb250KTsNCi0NCi0jaWZuZGVmIERDUl9VU0VfTkVXXzEzNTQyOQ0KLSAgICBpZiAoKElOVCkgbGFzdFJlc3VsdCA+PSAxMCkNCi0gICAgICAgIGxhc3RSZXN1bHQgPSBOb3RGb3VuZDsNCi0jZW5kaWYNCi0NCi0gICAgU2V0TmF0aXZlRm9udChmb250KTsNCi19DQotDQotaW5saW5lDQotRm9udDo6Rm9udCgNCi0gICAgIElOIGNvbnN0IFdDSEFSICogICAgICAgICAgZmFtaWx5TmFtZSwNCi0gICAgIElOIFJFQUwgICAgICAgICAgICAgICAgICAgZW1TaXplLA0KLSAgICAgSU4gSU5UICAgICAgICAgICAgICAgICAgICBzdHlsZSwNCi0gICAgIElOIFVuaXQgICAgICAgICAgICAgICAgICAgdW5pdCwNCi0gICAgIElOIGNvbnN0IEZvbnRDb2xsZWN0aW9uICogZm9udENvbGxlY3Rpb24NCi0pDQotew0KLSAgICBGb250RmFtaWx5IGZhbWlseShmYW1pbHlOYW1lLCBmb250Q29sbGVjdGlvbik7DQotDQotICAgIEdwRm9udCAqIGZvbnQgPSBOVUxMOw0KLQ0KLSAgICBsYXN0UmVzdWx0ID0gZmFtaWx5LkdldExhc3RTdGF0dXMoKTsNCi0NCi0gICAgaWYgKGxhc3RSZXN1bHQgPT0gT2spDQotICAgIHsNCi0gICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlRm9udChmYW1pbHkubmF0aXZlRmFtaWx5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1TaXplLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvbnQpOw0KLSAgICB9DQotDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xMzU0MjkNCi0gICAgaWYgKChJTlQpIGxhc3RSZXN1bHQgPj0gMTApDQotICAgICAgICBsYXN0UmVzdWx0ID0gTm90Rm91bmQ7DQotI2VuZGlmDQotDQotICAgIFNldE5hdGl2ZUZvbnQoZm9udCk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMNCi1Gb250OjpHZXRMb2dGb250QShJTiBjb25zdCBHcmFwaGljcyAqZywNCi0gICAgICAgICAgICAgICAgICBPVVQgTE9HRk9OVEEgKmxvZ2ZvbnRBKSBjb25zdA0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0TG9nRm9udEEobmF0aXZlRm9udCwgZyA/IGctPm5hdGl2ZUdyYXBoaWNzIDogTlVMTCwgbG9nZm9udEEpKTsNCi0NCi19DQotDQotaW5saW5lIFN0YXR1cw0KLUZvbnQ6OkdldExvZ0ZvbnRXKElOIGNvbnN0IEdyYXBoaWNzICpnLA0KLSAgICAgICAgICAgICAgICAgIE9VVCBMT0dGT05UVyAqbG9nZm9udFcpIGNvbnN0DQotew0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRMb2dGb250VyhuYXRpdmVGb250LCBnID8gZy0+bmF0aXZlR3JhcGhpY3MgOiBOVUxMLCBsb2dmb250VykpOw0KLX0NCi0NCi0NCi1pbmxpbmUgRm9udCoNCi1Gb250OjpDbG9uZSgpIGNvbnN0DQotew0KLSAgICBHcEZvbnQgKmNsb25lRm9udCA9IE5VTEw7DQotDQotICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ2xvbmVGb250KG5hdGl2ZUZvbnQsICZjbG9uZUZvbnQpKTsNCi0NCi0gICAgcmV0dXJuIG5ldyBGb250KGNsb25lRm9udCwgbGFzdFJlc3VsdCk7DQotfQ0KLQ0KLWlubGluZQ0KLUZvbnQ6On5Gb250KCkNCi17DQotICAgIERsbEV4cG9ydHM6OkdkaXBEZWxldGVGb250KG5hdGl2ZUZvbnQpOw0KLX0NCi0NCi0vLyBPcGVyYXRpb25zDQotDQotaW5saW5lIEJPT0wNCi1Gb250OjpJc0F2YWlsYWJsZSgpIGNvbnN0DQotew0KLSAgICByZXR1cm4gKG5hdGl2ZUZvbnQgPyBUUlVFIDogRkFMU0UpOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzDQotRm9udDo6R2V0RmFtaWx5KE9VVCBGb250RmFtaWx5ICpmYW1pbHkpIGNvbnN0DQotew0KLSAgICBpZiAoZmFtaWx5ID09IE5VTEwpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIHN0YXR1cyA9IERsbEV4cG9ydHM6OkdkaXBHZXRGYW1pbHkobmF0aXZlRm9udCwgJihmYW1pbHktPm5hdGl2ZUZhbWlseSkpOw0KLSAgICBmYW1pbHktPlNldFN0YXR1cyhzdGF0dXMpOw0KLQ0KLSAgICByZXR1cm4gU2V0U3RhdHVzKHN0YXR1cyk7DQotfQ0KLQ0KLWlubGluZSBJTlQNCi1Gb250OjpHZXRTdHlsZSgpIGNvbnN0DQotew0KLSAgICBJTlQgc3R5bGU7DQotDQotICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0Rm9udFN0eWxlKG5hdGl2ZUZvbnQsICZzdHlsZSkpOw0KLQ0KLSAgICByZXR1cm4gc3R5bGU7DQotfQ0KLQ0KLWlubGluZSBSRUFMDQotRm9udDo6R2V0U2l6ZSgpIGNvbnN0DQotew0KLSAgICBSRUFMIHNpemU7DQotICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0Rm9udFNpemUobmF0aXZlRm9udCwgJnNpemUpKTsNCi0gICAgcmV0dXJuIHNpemU7DQotfQ0KLQ0KLWlubGluZSBVbml0DQotRm9udDo6R2V0VW5pdCgpIGNvbnN0DQotew0KLSAgICBVbml0IHVuaXQ7DQotICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0Rm9udFVuaXQobmF0aXZlRm9udCwgJnVuaXQpKTsNCi0gICAgcmV0dXJuIHVuaXQ7DQotfQ0KLQ0KLWlubGluZSBSRUFMDQotRm9udDo6R2V0SGVpZ2h0KElOIGNvbnN0IEdyYXBoaWNzICpncmFwaGljcykgY29uc3QNCi17DQotICAgIFJFQUwgaGVpZ2h0Ow0KLSAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEZvbnRIZWlnaHQoDQotICAgICAgICBuYXRpdmVGb250LA0KLSAgICAgICAgZ3JhcGhpY3MgPyBncmFwaGljcy0+bmF0aXZlR3JhcGhpY3MgOiBOVUxMLA0KLSAgICAgICAgJmhlaWdodA0KLSAgICApKTsNCi0gICAgcmV0dXJuIGhlaWdodDsNCi19DQotDQotDQotI2lmZGVmIERDUl9VU0VfTkVXXzEyNTQ2Nw0KLWlubGluZSBSRUFMDQotRm9udDo6R2V0SGVpZ2h0KElOIFJFQUwgZHBpID0gMCkgY29uc3QNCi17DQotICAgIFJFQUwgaGVpZ2h0Ow0KLSAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEZvbnRIZWlnaHRHaXZlbkRQSShuYXRpdmVGb250LCBkcGksICZoZWlnaHQpKTsNCi0gICAgcmV0dXJuIGhlaWdodDsNCi19DQotI2VuZGlmDQotDQotDQotLy8gcHJvdGVjdGVkIG1ldGhvZA0KLWlubGluZQ0KLUZvbnQ6OkZvbnQoSU4gR3BGb250KiBmb250LA0KLSAgICAgICAgICAgSU4gU3RhdHVzIHN0YXR1cykNCi17DQotICAgIGxhc3RSZXN1bHQgPSBzdGF0dXM7DQotICAgIFNldE5hdGl2ZUZvbnQoZm9udCk7DQotfQ0KLQ0KLS8vIHByb3RlY3RlZCBtZXRob2QNCi1pbmxpbmUgVk9JRA0KLUZvbnQ6OlNldE5hdGl2ZUZvbnQoR3BGb250ICpGb250KQ0KLXsNCi0gICAgbmF0aXZlRm9udCA9IEZvbnQ7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMNCi1Gb250OjpHZXRMYXN0U3RhdHVzKHZvaWQpIGNvbnN0DQotew0KLSAgICByZXR1cm4gbGFzdFJlc3VsdDsNCi19DQotDQotLy8gcHJvdGVjdGVkIG1ldGhvZA0KLWlubGluZSBTdGF0dXMNCi1Gb250OjpTZXRTdGF0dXMoSU4gU3RhdHVzIHN0YXR1cykgY29uc3QNCi17DQotICAgIGlmIChzdGF0dXMgIT0gT2spDQotICAgICAgICByZXR1cm4gKGxhc3RSZXN1bHQgPSBzdGF0dXMpOw0KLSAgICBlbHNlDQotICAgICAgICByZXR1cm4gc3RhdHVzOw0KLX0NCi0NCi0jZW5kaWYNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCisqCisqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqIE1vZHVsZSBOYW1lOgorKgorKiAgIEdkaXBsdXNGb250LmgKKyoKKyogQWJzdHJhY3Q6CisqCisqICAgRm9udCByZWxhdGVkIGRlY2xhcmF0aW9ucworKgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9HRElQTFVTRk9OVF9ICisjZGVmaW5lIF9HRElQTFVTRk9OVF9ICisKK2lubGluZQorRm9udDo6Rm9udChJTiBIREMgaGRjKQoreworICAgIEdwRm9udCAqZm9udCA9IE5VTEw7CisgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVGb250RnJvbURDKGhkYywgJmZvbnQpOworCisjaWZuZGVmIERDUl9VU0VfTkVXXzEzNTQyOQorICAgIGlmICgoSU5UKSBsYXN0UmVzdWx0ID49IDEwKQorICAgICAgICBsYXN0UmVzdWx0ID0gTm90Rm91bmQ7CisjZW5kaWYKKworICAgIFNldE5hdGl2ZUZvbnQoZm9udCk7Cit9CisKKyNpZmRlZiBEQ1JfVVNFX05FV18xMjcwODQKK2lubGluZQorRm9udDo6Rm9udChJTiBIREMgaGRjLAorICAgICAgICAgICBJTiBjb25zdCBIRk9OVCBoZm9udCkKK3sKKyAgICBHcEZvbnQgKmZvbnQgPSBOVUxMOworCisgICAgaWYgKGhmb250KQorICAgIHsKKyAgICAgICAgTE9HRk9OVEEgbGY7CisKKyAgICAgICAgaWYoR2V0T2JqZWN0QShoZm9udCwgc2l6ZW9mKExPR0ZPTlRBKSwgJmxmKSkKKyAgICAgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlRm9udEZyb21Mb2dmb250QShoZGMsICZsZiwgJmZvbnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUZvbnRGcm9tREMoaGRjLCAmZm9udCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlRm9udEZyb21EQyhoZGMsICZmb250KTsKKyAgICB9CisKKyNpZm5kZWYgRENSX1VTRV9ORVdfMTM1NDI5CisgICAgaWYgKChJTlQpIGxhc3RSZXN1bHQgPj0gMTApCisgICAgICAgIGxhc3RSZXN1bHQgPSBOb3RGb3VuZDsKKyNlbmRpZgorCisgICAgU2V0TmF0aXZlRm9udChmb250KTsKK30KKyNlbmRpZgorCitpbmxpbmUKK0ZvbnQ6OkZvbnQoSU4gSERDIGhkYywKKyAgICAgICAgICAgSU4gY29uc3QgTE9HRk9OVFcqIGxvZ2ZvbnQpCit7CisgICAgR3BGb250ICpmb250ID0gTlVMTDsKKyAgICBpZiAobG9nZm9udCkKKyAgICB7CisgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlRm9udEZyb21Mb2dmb250VyhoZGMsIGxvZ2ZvbnQsICZmb250KTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVGb250RnJvbURDKGhkYywgJmZvbnQpOworICAgIH0KKworI2lmbmRlZiBEQ1JfVVNFX05FV18xMzU0MjkKKyAgICBpZiAoKElOVCkgbGFzdFJlc3VsdCA+PSAxMCkKKyAgICAgICAgbGFzdFJlc3VsdCA9IE5vdEZvdW5kOworI2VuZGlmCisKKyAgICBTZXROYXRpdmVGb250KGZvbnQpOworfQorCitpbmxpbmUKK0ZvbnQ6OkZvbnQoSU4gSERDIGhkYywKKyAgICAgICAgICAgSU4gY29uc3QgTE9HRk9OVEEqIGxvZ2ZvbnQpCit7CisgICAgR3BGb250ICpmb250ID0gTlVMTDsKKworICAgIGlmIChsb2dmb250KQorICAgIHsKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVGb250RnJvbUxvZ2ZvbnRBKGhkYywgbG9nZm9udCwgJmZvbnQpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUZvbnRGcm9tREMoaGRjLCAmZm9udCk7CisgICAgfQorCisjaWZuZGVmIERDUl9VU0VfTkVXXzEzNTQyOQorICAgIGlmICgoSU5UKSBsYXN0UmVzdWx0ID49IDEwKQorICAgICAgICBsYXN0UmVzdWx0ID0gTm90Rm91bmQ7CisjZW5kaWYKKworICAgIFNldE5hdGl2ZUZvbnQoZm9udCk7Cit9CisKK2lubGluZQorRm9udDo6Rm9udCgKKyAgICAgSU4gY29uc3QgRm9udEZhbWlseSAqIGZhbWlseSwKKyAgICAgSU4gUkVBTCAgICAgICAgIGVtU2l6ZSwKKyAgICAgSU4gSU5UICAgICAgICAgIHN0eWxlLAorICAgICBJTiBVbml0ICAgICAgICAgdW5pdAorKQoreworICAgIEdwRm9udCAqZm9udCA9IE5VTEw7CisKKyAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUZvbnQoZmFtaWx5ID8gZmFtaWx5LT5uYXRpdmVGYW1pbHkgOiBOVUxMLAorICAgICAgICAgICAgICAgICAgICBlbVNpemUsCisgICAgICAgICAgICAgICAgICAgIHN0eWxlLAorICAgICAgICAgICAgICAgICAgICB1bml0LAorICAgICAgICAgICAgICAgICAgICAmZm9udCk7CisKKyNpZm5kZWYgRENSX1VTRV9ORVdfMTM1NDI5CisgICAgaWYgKChJTlQpIGxhc3RSZXN1bHQgPj0gMTApCisgICAgICAgIGxhc3RSZXN1bHQgPSBOb3RGb3VuZDsKKyNlbmRpZgorCisgICAgU2V0TmF0aXZlRm9udChmb250KTsKK30KKworaW5saW5lCitGb250OjpGb250KAorICAgICBJTiBjb25zdCBXQ0hBUiAqICAgICAgICAgIGZhbWlseU5hbWUsCisgICAgIElOIFJFQUwgICAgICAgICAgICAgICAgICAgZW1TaXplLAorICAgICBJTiBJTlQgICAgICAgICAgICAgICAgICAgIHN0eWxlLAorICAgICBJTiBVbml0ICAgICAgICAgICAgICAgICAgIHVuaXQsCisgICAgIElOIGNvbnN0IEZvbnRDb2xsZWN0aW9uICogZm9udENvbGxlY3Rpb24KKykKK3sKKyAgICBGb250RmFtaWx5IGZhbWlseShmYW1pbHlOYW1lLCBmb250Q29sbGVjdGlvbik7CisKKyAgICBHcEZvbnQgKiBmb250ID0gTlVMTDsKKworICAgIGxhc3RSZXN1bHQgPSBmYW1pbHkuR2V0TGFzdFN0YXR1cygpOworCisgICAgaWYgKGxhc3RSZXN1bHQgPT0gT2spCisgICAgeworICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUZvbnQoZmFtaWx5Lm5hdGl2ZUZhbWlseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1TaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvbnQpOworICAgIH0KKworI2lmbmRlZiBEQ1JfVVNFX05FV18xMzU0MjkKKyAgICBpZiAoKElOVCkgbGFzdFJlc3VsdCA+PSAxMCkKKyAgICAgICAgbGFzdFJlc3VsdCA9IE5vdEZvdW5kOworI2VuZGlmCisKKyAgICBTZXROYXRpdmVGb250KGZvbnQpOworfQorCitpbmxpbmUgU3RhdHVzCitGb250OjpHZXRMb2dGb250QShJTiBjb25zdCBHcmFwaGljcyAqZywKKyAgICAgICAgICAgICAgICAgIE9VVCBMT0dGT05UQSAqbG9nZm9udEEpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0TG9nRm9udEEobmF0aXZlRm9udCwgZyA/IGctPm5hdGl2ZUdyYXBoaWNzIDogTlVMTCwgbG9nZm9udEEpKTsKKworfQorCitpbmxpbmUgU3RhdHVzCitGb250OjpHZXRMb2dGb250VyhJTiBjb25zdCBHcmFwaGljcyAqZywKKyAgICAgICAgICAgICAgICAgIE9VVCBMT0dGT05UVyAqbG9nZm9udFcpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0TG9nRm9udFcobmF0aXZlRm9udCwgZyA/IGctPm5hdGl2ZUdyYXBoaWNzIDogTlVMTCwgbG9nZm9udFcpKTsKK30KKworCitpbmxpbmUgRm9udCoKK0ZvbnQ6OkNsb25lKCkgY29uc3QKK3sKKyAgICBHcEZvbnQgKmNsb25lRm9udCA9IE5VTEw7CisKKyAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENsb25lRm9udChuYXRpdmVGb250LCAmY2xvbmVGb250KSk7CisKKyAgICByZXR1cm4gbmV3IEZvbnQoY2xvbmVGb250LCBsYXN0UmVzdWx0KTsKK30KKworaW5saW5lCitGb250Ojp+Rm9udCgpCit7CisgICAgRGxsRXhwb3J0czo6R2RpcERlbGV0ZUZvbnQobmF0aXZlRm9udCk7Cit9CisKKy8vIE9wZXJhdGlvbnMKKworaW5saW5lIEJPT0wKK0ZvbnQ6OklzQXZhaWxhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG5hdGl2ZUZvbnQgPyBUUlVFIDogRkFMU0UpOworfQorCitpbmxpbmUgU3RhdHVzCitGb250OjpHZXRGYW1pbHkoT1VUIEZvbnRGYW1pbHkgKmZhbWlseSkgY29uc3QKK3sKKyAgICBpZiAoZmFtaWx5ID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKEludmFsaWRQYXJhbWV0ZXIpOworICAgIH0KKworICAgIFN0YXR1cyBzdGF0dXMgPSBEbGxFeHBvcnRzOjpHZGlwR2V0RmFtaWx5KG5hdGl2ZUZvbnQsICYoZmFtaWx5LT5uYXRpdmVGYW1pbHkpKTsKKyAgICBmYW1pbHktPlNldFN0YXR1cyhzdGF0dXMpOworCisgICAgcmV0dXJuIFNldFN0YXR1cyhzdGF0dXMpOworfQorCitpbmxpbmUgSU5UCitGb250OjpHZXRTdHlsZSgpIGNvbnN0Cit7CisgICAgSU5UIHN0eWxlOworCisgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRGb250U3R5bGUobmF0aXZlRm9udCwgJnN0eWxlKSk7CisKKyAgICByZXR1cm4gc3R5bGU7Cit9CisKK2lubGluZSBSRUFMCitGb250OjpHZXRTaXplKCkgY29uc3QKK3sKKyAgICBSRUFMIHNpemU7CisgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRGb250U2l6ZShuYXRpdmVGb250LCAmc2l6ZSkpOworICAgIHJldHVybiBzaXplOworfQorCitpbmxpbmUgVW5pdAorRm9udDo6R2V0VW5pdCgpIGNvbnN0Cit7CisgICAgVW5pdCB1bml0OworICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0Rm9udFVuaXQobmF0aXZlRm9udCwgJnVuaXQpKTsKKyAgICByZXR1cm4gdW5pdDsKK30KKworaW5saW5lIFJFQUwKK0ZvbnQ6OkdldEhlaWdodChJTiBjb25zdCBHcmFwaGljcyAqZ3JhcGhpY3MpIGNvbnN0Cit7CisgICAgUkVBTCBoZWlnaHQ7CisgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRGb250SGVpZ2h0KAorICAgICAgICBuYXRpdmVGb250LAorICAgICAgICBncmFwaGljcyA/IGdyYXBoaWNzLT5uYXRpdmVHcmFwaGljcyA6IE5VTEwsCisgICAgICAgICZoZWlnaHQKKyAgICApKTsKKyAgICByZXR1cm4gaGVpZ2h0OworfQorCisKKyNpZmRlZiBEQ1JfVVNFX05FV18xMjU0NjcKK2lubGluZSBSRUFMCitGb250OjpHZXRIZWlnaHQoSU4gUkVBTCBkcGkgPSAwKSBjb25zdAoreworICAgIFJFQUwgaGVpZ2h0OworICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0Rm9udEhlaWdodEdpdmVuRFBJKG5hdGl2ZUZvbnQsIGRwaSwgJmhlaWdodCkpOworICAgIHJldHVybiBoZWlnaHQ7Cit9CisjZW5kaWYKKworCisvLyBwcm90ZWN0ZWQgbWV0aG9kCitpbmxpbmUKK0ZvbnQ6OkZvbnQoSU4gR3BGb250KiBmb250LAorICAgICAgICAgICBJTiBTdGF0dXMgc3RhdHVzKQoreworICAgIGxhc3RSZXN1bHQgPSBzdGF0dXM7CisgICAgU2V0TmF0aXZlRm9udChmb250KTsKK30KKworLy8gcHJvdGVjdGVkIG1ldGhvZAoraW5saW5lIFZPSUQKK0ZvbnQ6OlNldE5hdGl2ZUZvbnQoR3BGb250ICpGb250KQoreworICAgIG5hdGl2ZUZvbnQgPSBGb250OworfQorCitpbmxpbmUgU3RhdHVzCitGb250OjpHZXRMYXN0U3RhdHVzKHZvaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3RSZXN1bHQ7Cit9CisKKy8vIHByb3RlY3RlZCBtZXRob2QKK2lubGluZSBTdGF0dXMKK0ZvbnQ6OlNldFN0YXR1cyhJTiBTdGF0dXMgc3RhdHVzKSBjb25zdAoreworICAgIGlmIChzdGF0dXMgIT0gT2spCisgICAgICAgIHJldHVybiAobGFzdFJlc3VsdCA9IHN0YXR1cyk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gc3RhdHVzOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNGb250Q29sbGVjdGlvbi5oIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0ZvbnRDb2xsZWN0aW9uLmgKaW5kZXggZDIyNTdiYS4uMmYzMzUxYyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0ZvbnRDb2xsZWN0aW9uLmgKKysrIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0ZvbnRDb2xsZWN0aW9uLmgKQEAgLTEsMTQ5ICsxLDE0OSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXA0KLSoNCi0qIENvcHlyaWdodCAoYykgMjAwMCwgTWljcm9zb2Z0IENvcnAuICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSoNCi0qIE1vZHVsZSBOYW1lOg0KLSogDQotKiAgIEdkaXBsdXNGb250Q29sbGVjdGlvbi5oDQotKg0KLSogQWJzdHJhY3Q6DQotKg0KLSogICBGb250IGNvbGxlY3Rpb25zIChJbnN0YWxsZWQgYW5kIFByaXZhdGUpDQotKg0KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0jaWZuZGVmIF9HRElQTFVTRk9OVENPTExfSA0KLSNkZWZpbmUgX0dESVBMVVNGT05UQ09MTF9IDQotDQotaW5saW5lDQotRm9udENvbGxlY3Rpb246OkZvbnRDb2xsZWN0aW9uKCkNCi17DQotICAgIG5hdGl2ZUZvbnRDb2xsZWN0aW9uID0gTlVMTDsNCi19DQotDQotaW5saW5lDQotRm9udENvbGxlY3Rpb246On5Gb250Q29sbGVjdGlvbigpDQotew0KLX0NCi0NCi1pbmxpbmUgSU5UDQotRm9udENvbGxlY3Rpb246OkdldEZhbWlseUNvdW50KCkgY29uc3QNCi17DQotICAgIElOVCBudW1Gb3VuZCA9IDA7DQotDQotICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwR2V0Rm9udENvbGxlY3Rpb25GYW1pbHlDb3VudCgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUZvbnRDb2xsZWN0aW9uLCAmbnVtRm91bmQpOw0KLQ0KLQ0KLQ0KLSAgICByZXR1cm4gbnVtRm91bmQ7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMNCi1Gb250Q29sbGVjdGlvbjo6R2V0RmFtaWxpZXMoDQotICAgIElOIElOVCAgICAgICAgICAgbnVtU291Z2h0LA0KLSAgICBPVVQgRm9udEZhbWlseSAqIGdwZmFtaWxpZXMsDQotICAgIE9VVCBJTlQgKiAgICAgICAgbnVtRm91bmQNCi0pIGNvbnN0DQotew0KLSAgICBpZiAobnVtU291Z2h0IDw9IDAgfHwgZ3BmYW1pbGllcyA9PSBOVUxMIHx8IG51bUZvdW5kID09IE5VTEwpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7DQotICAgIH0NCi0gICAgKm51bUZvdW5kID0gMDsNCi0gICAgR3BGb250RmFtaWx5ICoqbmF0aXZlRmFtaWx5TGlzdCA9IG5ldyBHcEZvbnRGYW1pbHkqW251bVNvdWdodF07DQotDQotICAgIGlmIChuYXRpdmVGYW1pbHlMaXN0ID09IE5VTEwpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoT3V0T2ZNZW1vcnkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBzdGF0dXMgPSBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEZvbnRDb2xsZWN0aW9uRmFtaWx5TGlzdCgNCi0gICAgICAgIG5hdGl2ZUZvbnRDb2xsZWN0aW9uLA0KLSAgICAgICAgbnVtU291Z2h0LA0KLSAgICAgICAgbmF0aXZlRmFtaWx5TGlzdCwNCi0gICAgICAgIG51bUZvdW5kDQotICAgICkpOw0KLSAgICBpZiAoc3RhdHVzID09IE9rKQ0KLSAgICB7DQotICAgICAgICBmb3IgKElOVCBpID0gMDsgaSA8ICpudW1Gb3VuZDsgaSsrKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIERsbEV4cG9ydHM6OkdkaXBDbG9uZUZvbnRGYW1pbHkobmF0aXZlRmFtaWx5TGlzdFtpXSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZncGZhbWlsaWVzW2ldLm5hdGl2ZUZhbWlseSk7DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgZGVsZXRlIFtdIG5hdGl2ZUZhbWlseUxpc3Q7DQotDQotICAgIHJldHVybiBzdGF0dXM7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgRm9udENvbGxlY3Rpb246OkdldExhc3RTdGF0dXMgKCkgY29uc3QNCi17DQotICAgIHJldHVybiBsYXN0UmVzdWx0Ow0KLX0NCi0NCi0vLyBwcm90ZWN0ZWQgbWV0aG9kDQotaW5saW5lIFN0YXR1cw0KLUZvbnRDb2xsZWN0aW9uOjpTZXRTdGF0dXMoSU4gU3RhdHVzIHN0YXR1cykgY29uc3QNCi17DQotICAgIGxhc3RSZXN1bHQgPSBzdGF0dXM7DQotICAgIHJldHVybiBsYXN0UmVzdWx0Ow0KLX0NCi0NCi1pbmxpbmUNCi1JbnN0YWxsZWRGb250Q29sbGVjdGlvbjo6SW5zdGFsbGVkRm9udENvbGxlY3Rpb24oKQ0KLXsNCi0gICAgbmF0aXZlRm9udENvbGxlY3Rpb24gPSBOVUxMOw0KLSAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcE5ld0luc3RhbGxlZEZvbnRDb2xsZWN0aW9uKCZuYXRpdmVGb250Q29sbGVjdGlvbik7DQotfQ0KLQ0KLWlubGluZQ0KLUluc3RhbGxlZEZvbnRDb2xsZWN0aW9uOjp+SW5zdGFsbGVkRm9udENvbGxlY3Rpb24oKQ0KLXsNCi19DQotDQotI2lmbmRlZiBEQ1JfVVNFX05FV18yMzUwNzINCi1pbmxpbmUgU3RhdHVzDQotSW5zdGFsbGVkRm9udENvbGxlY3Rpb246Okluc3RhbGxGb250RmlsZShJTiBjb25zdCBXQ0hBUiogZmlsZW5hbWUpDQotew0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBJbnN0YWxsRm9udEZpbGUobmF0aXZlRm9udENvbGxlY3Rpb24sIGZpbGVuYW1lKSk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMNCi1JbnN0YWxsZWRGb250Q29sbGVjdGlvbjo6VW5pbnN0YWxsRm9udEZpbGUoSU4gY29uc3QgV0NIQVIqIGZpbGVuYW1lKQ0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwVW5pbnN0YWxsRm9udEZpbGUobmF0aXZlRm9udENvbGxlY3Rpb24sIGZpbGVuYW1lKSk7DQotfQ0KLSNlbmRpZg0KLQ0KLWlubGluZQ0KLVByaXZhdGVGb250Q29sbGVjdGlvbjo6UHJpdmF0ZUZvbnRDb2xsZWN0aW9uKCkNCi17DQotICAgIG5hdGl2ZUZvbnRDb2xsZWN0aW9uID0gTlVMTDsNCi0gICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBOZXdQcml2YXRlRm9udENvbGxlY3Rpb24oJm5hdGl2ZUZvbnRDb2xsZWN0aW9uKTsNCi19DQotDQotaW5saW5lDQotUHJpdmF0ZUZvbnRDb2xsZWN0aW9uOjp+UHJpdmF0ZUZvbnRDb2xsZWN0aW9uKCkNCi17DQotICAgIERsbEV4cG9ydHM6OkdkaXBEZWxldGVQcml2YXRlRm9udENvbGxlY3Rpb24oJm5hdGl2ZUZvbnRDb2xsZWN0aW9uKTsNCi19DQotDQotaW5saW5lIFN0YXR1cw0KLVByaXZhdGVGb250Q29sbGVjdGlvbjo6QWRkRm9udEZpbGUoSU4gY29uc3QgV0NIQVIqIGZpbGVuYW1lKQ0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUHJpdmF0ZUFkZEZvbnRGaWxlKG5hdGl2ZUZvbnRDb2xsZWN0aW9uLCBmaWxlbmFtZSkpOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzDQotUHJpdmF0ZUZvbnRDb2xsZWN0aW9uOjpBZGRNZW1vcnlGb250KElOIGNvbnN0IHZvaWQqIG1lbW9yeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGxlbmd0aCkNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFByaXZhdGVBZGRNZW1vcnlGb250KA0KLSAgICAgICAgbmF0aXZlRm9udENvbGxlY3Rpb24sDQotICAgICAgICBtZW1vcnksDQotICAgICAgICBsZW5ndGgpKTsNCi19DQotDQotI2VuZGlmIC8vIF9HRElQTFVTRk9OVENPTExfSA0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyoKKyogQ29weXJpZ2h0IChjKSAyMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqIE1vZHVsZSBOYW1lOgorKiAKKyogICBHZGlwbHVzRm9udENvbGxlY3Rpb24uaAorKgorKiBBYnN0cmFjdDoKKyoKKyogICBGb250IGNvbGxlY3Rpb25zIChJbnN0YWxsZWQgYW5kIFByaXZhdGUpCisqCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0dESVBMVVNGT05UQ09MTF9ICisjZGVmaW5lIF9HRElQTFVTRk9OVENPTExfSAorCitpbmxpbmUKK0ZvbnRDb2xsZWN0aW9uOjpGb250Q29sbGVjdGlvbigpCit7CisgICAgbmF0aXZlRm9udENvbGxlY3Rpb24gPSBOVUxMOworfQorCitpbmxpbmUKK0ZvbnRDb2xsZWN0aW9uOjp+Rm9udENvbGxlY3Rpb24oKQoreworfQorCitpbmxpbmUgSU5UCitGb250Q29sbGVjdGlvbjo6R2V0RmFtaWx5Q291bnQoKSBjb25zdAoreworICAgIElOVCBudW1Gb3VuZCA9IDA7CisKKyAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcEdldEZvbnRDb2xsZWN0aW9uRmFtaWx5Q291bnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUZvbnRDb2xsZWN0aW9uLCAmbnVtRm91bmQpOworCisKKworICAgIHJldHVybiBudW1Gb3VuZDsKK30KKworaW5saW5lIFN0YXR1cworRm9udENvbGxlY3Rpb246OkdldEZhbWlsaWVzKAorICAgIElOIElOVCAgICAgICAgICAgbnVtU291Z2h0LAorICAgIE9VVCBGb250RmFtaWx5ICogZ3BmYW1pbGllcywKKyAgICBPVVQgSU5UICogICAgICAgIG51bUZvdW5kCispIGNvbnN0Cit7CisgICAgaWYgKG51bVNvdWdodCA8PSAwIHx8IGdwZmFtaWxpZXMgPT0gTlVMTCB8fCBudW1Gb3VuZCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhJbnZhbGlkUGFyYW1ldGVyKTsKKyAgICB9CisgICAgKm51bUZvdW5kID0gMDsKKyAgICBHcEZvbnRGYW1pbHkgKipuYXRpdmVGYW1pbHlMaXN0ID0gbmV3IEdwRm9udEZhbWlseSpbbnVtU291Z2h0XTsKKworICAgIGlmIChuYXRpdmVGYW1pbHlMaXN0ID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKE91dE9mTWVtb3J5KTsKKyAgICB9CisKKyAgICBTdGF0dXMgc3RhdHVzID0gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRGb250Q29sbGVjdGlvbkZhbWlseUxpc3QoCisgICAgICAgIG5hdGl2ZUZvbnRDb2xsZWN0aW9uLAorICAgICAgICBudW1Tb3VnaHQsCisgICAgICAgIG5hdGl2ZUZhbWlseUxpc3QsCisgICAgICAgIG51bUZvdW5kCisgICAgKSk7CisgICAgaWYgKHN0YXR1cyA9PSBPaykKKyAgICB7CisgICAgICAgIGZvciAoSU5UIGkgPSAwOyBpIDwgKm51bUZvdW5kOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIERsbEV4cG9ydHM6OkdkaXBDbG9uZUZvbnRGYW1pbHkobmF0aXZlRmFtaWx5TGlzdFtpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdwZmFtaWxpZXNbaV0ubmF0aXZlRmFtaWx5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRlbGV0ZSBbXSBuYXRpdmVGYW1pbHlMaXN0OworCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworaW5saW5lIFN0YXR1cyBGb250Q29sbGVjdGlvbjo6R2V0TGFzdFN0YXR1cyAoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0UmVzdWx0OworfQorCisvLyBwcm90ZWN0ZWQgbWV0aG9kCitpbmxpbmUgU3RhdHVzCitGb250Q29sbGVjdGlvbjo6U2V0U3RhdHVzKElOIFN0YXR1cyBzdGF0dXMpIGNvbnN0Cit7CisgICAgbGFzdFJlc3VsdCA9IHN0YXR1czsKKyAgICByZXR1cm4gbGFzdFJlc3VsdDsKK30KKworaW5saW5lCitJbnN0YWxsZWRGb250Q29sbGVjdGlvbjo6SW5zdGFsbGVkRm9udENvbGxlY3Rpb24oKQoreworICAgIG5hdGl2ZUZvbnRDb2xsZWN0aW9uID0gTlVMTDsKKyAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcE5ld0luc3RhbGxlZEZvbnRDb2xsZWN0aW9uKCZuYXRpdmVGb250Q29sbGVjdGlvbik7Cit9CisKK2lubGluZQorSW5zdGFsbGVkRm9udENvbGxlY3Rpb246On5JbnN0YWxsZWRGb250Q29sbGVjdGlvbigpCit7Cit9CisKKyNpZm5kZWYgRENSX1VTRV9ORVdfMjM1MDcyCitpbmxpbmUgU3RhdHVzCitJbnN0YWxsZWRGb250Q29sbGVjdGlvbjo6SW5zdGFsbEZvbnRGaWxlKElOIGNvbnN0IFdDSEFSKiBmaWxlbmFtZSkKK3sKKyAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBJbnN0YWxsRm9udEZpbGUobmF0aXZlRm9udENvbGxlY3Rpb24sIGZpbGVuYW1lKSk7Cit9CisKK2lubGluZSBTdGF0dXMKK0luc3RhbGxlZEZvbnRDb2xsZWN0aW9uOjpVbmluc3RhbGxGb250RmlsZShJTiBjb25zdCBXQ0hBUiogZmlsZW5hbWUpCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwVW5pbnN0YWxsRm9udEZpbGUobmF0aXZlRm9udENvbGxlY3Rpb24sIGZpbGVuYW1lKSk7Cit9CisjZW5kaWYKKworaW5saW5lCitQcml2YXRlRm9udENvbGxlY3Rpb246OlByaXZhdGVGb250Q29sbGVjdGlvbigpCit7CisgICAgbmF0aXZlRm9udENvbGxlY3Rpb24gPSBOVUxMOworICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwTmV3UHJpdmF0ZUZvbnRDb2xsZWN0aW9uKCZuYXRpdmVGb250Q29sbGVjdGlvbik7Cit9CisKK2lubGluZQorUHJpdmF0ZUZvbnRDb2xsZWN0aW9uOjp+UHJpdmF0ZUZvbnRDb2xsZWN0aW9uKCkKK3sKKyAgICBEbGxFeHBvcnRzOjpHZGlwRGVsZXRlUHJpdmF0ZUZvbnRDb2xsZWN0aW9uKCZuYXRpdmVGb250Q29sbGVjdGlvbik7Cit9CisKK2lubGluZSBTdGF0dXMKK1ByaXZhdGVGb250Q29sbGVjdGlvbjo6QWRkRm9udEZpbGUoSU4gY29uc3QgV0NIQVIqIGZpbGVuYW1lKQoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFByaXZhdGVBZGRGb250RmlsZShuYXRpdmVGb250Q29sbGVjdGlvbiwgZmlsZW5hbWUpKTsKK30KKworaW5saW5lIFN0YXR1cworUHJpdmF0ZUZvbnRDb2xsZWN0aW9uOjpBZGRNZW1vcnlGb250KElOIGNvbnN0IHZvaWQqIG1lbW9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgbGVuZ3RoKQoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFByaXZhdGVBZGRNZW1vcnlGb250KAorICAgICAgICBuYXRpdmVGb250Q29sbGVjdGlvbiwKKyAgICAgICAgbWVtb3J5LAorICAgICAgICBsZW5ndGgpKTsKK30KKworI2VuZGlmIC8vIF9HRElQTFVTRk9OVENPTExfSApkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0ZvbnRGYW1pbHkuaCBiL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNGb250RmFtaWx5LmgKaW5kZXggZWYyZjNkZC4uMDc2ZTE1NyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0ZvbnRGYW1pbHkuaAorKysgYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzRm9udEZhbWlseS5oCkBAIC0xLDI3MSArMSwyNzEgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwNCi0qDQotKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwgTWljcm9zb2Z0IENvcnAuICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSoNCi0qIE1vZHVsZSBOYW1lOg0KLSoNCi0qICAgR2RpcGx1c0ZvbnRGYW1pbHkuaA0KLSoNCi0qIEFic3RyYWN0Og0KLSoNCi0qICAgRm9udCBmYW1pbHkgQVBJIHJlbGF0ZWQgZGVjbGFyYXRpb25zDQotKg0KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0jaWZuZGVmIF9HRElQTFVTX0ZPTlRfRkFNSUxZX0gNCi0jZGVmaW5lIF9HRElQTFVTX0ZPTlRfRkFNSUxZX0gNCi0NCi1pbmxpbmUgDQotRm9udEZhbWlseTo6Rm9udEZhbWlseSgpIDoNCi0gICAgbmF0aXZlRmFtaWx5IChOVUxMKSwNCi0gICAgbGFzdFJlc3VsdCAgICAoT2spDQotew0KLX0NCi0NCi1pbmxpbmUgDQotRm9udEZhbWlseTo6Rm9udEZhbWlseSgNCi0gICAgSU4gY29uc3QgV0NIQVIqICAgICAgICAgIG5hbWUsDQotICAgIElOIGNvbnN0IEZvbnRDb2xsZWN0aW9uKiBmb250Q29sbGVjdGlvbg0KLSkNCi17DQotICAgIG5hdGl2ZUZhbWlseSA9IE5VTEw7DQotICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlRm9udEZhbWlseUZyb21OYW1lKA0KLSAgICAgICAgbmFtZSwNCi0gICAgICAgIGZvbnRDb2xsZWN0aW9uID8gZm9udENvbGxlY3Rpb24tPm5hdGl2ZUZvbnRDb2xsZWN0aW9uIDogTlVMTCwNCi0gICAgICAgICZuYXRpdmVGYW1pbHkNCi0gICAgKTsNCi0gICAgDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xMzU0MjkNCi0gICAgaWYgKChJTlQpIGxhc3RSZXN1bHQgPj0gMTApDQotICAgICAgICBsYXN0UmVzdWx0ID0gTm90Rm91bmQ7DQotI2VuZGlmDQotfQ0KLQ0KLS8vIHByaXZhdGUgbWV0aG9kDQotaW5saW5lDQotRm9udEZhbWlseTo6Rm9udEZhbWlseSgNCi0gICAgSU4gR3BGb250RmFtaWx5ICpuYXRpdmVPcmlnLA0KLSAgICBJTiBTdGF0dXMgc3RhdHVzDQotKQ0KLXsNCi0gICAgbGFzdFJlc3VsdCAgICA9IHN0YXR1czsNCi0gICAgbmF0aXZlRmFtaWx5ID0gbmF0aXZlT3JpZzsNCi19DQotDQotLy8gR2VuZXJpYyBmb250IGZhbWlseSBhY2Nlc3MNCi0NCi1pbmxpbmUgY29uc3QgRm9udEZhbWlseSAqDQotRm9udEZhbWlseTo6R2VuZXJpY1NhbnNTZXJpZigpIA0KLXsNCi0gICAgaWYgKEdlbmVyaWNTYW5zU2VyaWZGb250RmFtaWx5ICE9IE5VTEwpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBHZW5lcmljU2Fuc1NlcmlmRm9udEZhbWlseTsNCi0gICAgfQ0KLQ0KLSAgICBHZW5lcmljU2Fuc1NlcmlmRm9udEZhbWlseSA9DQotICAgICAgICAoRm9udEZhbWlseSopIEdlbmVyaWNTYW5zU2VyaWZGb250RmFtaWx5QnVmZmVyOw0KLQ0KLSAgICBHZW5lcmljU2Fuc1NlcmlmRm9udEZhbWlseS0+bGFzdFJlc3VsdCA9DQotICAgICAgICBEbGxFeHBvcnRzOjpHZGlwR2V0R2VuZXJpY0ZvbnRGYW1pbHlTYW5zU2VyaWYoDQotICAgICAgICAgICAgJihHZW5lcmljU2Fuc1NlcmlmRm9udEZhbWlseS0+bmF0aXZlRmFtaWx5KQ0KLSAgICAgICAgKTsNCi0NCi0jaWZuZGVmIERDUl9VU0VfTkVXXzEzNTQyOQ0KLSAgICBpZiAoKElOVCkgR2VuZXJpY1NhbnNTZXJpZkZvbnRGYW1pbHktPmxhc3RSZXN1bHQgPj0gMTApDQotICAgICAgICBHZW5lcmljU2Fuc1NlcmlmRm9udEZhbWlseS0+bGFzdFJlc3VsdCA9IE5vdEZvdW5kOw0KLSNlbmRpZg0KLQ0KLSAgICByZXR1cm4gR2VuZXJpY1NhbnNTZXJpZkZvbnRGYW1pbHk7DQotfQ0KLQ0KLWlubGluZSBjb25zdCBGb250RmFtaWx5ICoNCi1Gb250RmFtaWx5OjpHZW5lcmljU2VyaWYoKSANCi17DQotICAgIGlmIChHZW5lcmljU2VyaWZGb250RmFtaWx5ICE9IE5VTEwpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBHZW5lcmljU2VyaWZGb250RmFtaWx5Ow0KLSAgICB9DQotDQotICAgIEdlbmVyaWNTZXJpZkZvbnRGYW1pbHkgPQ0KLSAgICAgICAgKEZvbnRGYW1pbHkqKSBHZW5lcmljU2VyaWZGb250RmFtaWx5QnVmZmVyOw0KLQ0KLSAgICBHZW5lcmljU2VyaWZGb250RmFtaWx5LT5sYXN0UmVzdWx0ID0NCi0gICAgICAgIERsbEV4cG9ydHM6OkdkaXBHZXRHZW5lcmljRm9udEZhbWlseVNlcmlmKA0KLSAgICAgICAgICAgICYoR2VuZXJpY1NlcmlmRm9udEZhbWlseS0+bmF0aXZlRmFtaWx5KQ0KLSAgICAgICAgKTsNCi0NCi0jaWZuZGVmIERDUl9VU0VfTkVXXzEzNTQyOQ0KLSAgICBpZiAoKElOVCkgR2VuZXJpY1NlcmlmRm9udEZhbWlseS0+bGFzdFJlc3VsdCA+PSAxMCkNCi0gICAgICAgIEdlbmVyaWNTZXJpZkZvbnRGYW1pbHktPmxhc3RSZXN1bHQgPSBOb3RGb3VuZDsNCi0jZW5kaWYNCi0NCi0gICAgcmV0dXJuIEdlbmVyaWNTZXJpZkZvbnRGYW1pbHk7DQotfQ0KLQ0KLWlubGluZSBjb25zdCBGb250RmFtaWx5ICoNCi1Gb250RmFtaWx5OjpHZW5lcmljTW9ub3NwYWNlKCkNCi17DQotICAgIGlmIChHZW5lcmljTW9ub3NwYWNlRm9udEZhbWlseSAhPSBOVUxMKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gR2VuZXJpY01vbm9zcGFjZUZvbnRGYW1pbHk7DQotICAgIH0NCi0NCi0gICAgR2VuZXJpY01vbm9zcGFjZUZvbnRGYW1pbHkgPQ0KLSAgICAgICAgKEZvbnRGYW1pbHkqKSBHZW5lcmljTW9ub3NwYWNlRm9udEZhbWlseUJ1ZmZlcjsNCi0NCi0gICAgR2VuZXJpY01vbm9zcGFjZUZvbnRGYW1pbHktPmxhc3RSZXN1bHQgPQ0KLSAgICAgICAgRGxsRXhwb3J0czo6R2RpcEdldEdlbmVyaWNGb250RmFtaWx5TW9ub3NwYWNlKA0KLSAgICAgICAgICAgICYoR2VuZXJpY01vbm9zcGFjZUZvbnRGYW1pbHktPm5hdGl2ZUZhbWlseSkNCi0gICAgICAgICk7DQotDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xMzU0MjkNCi0gICAgaWYgKChJTlQpIEdlbmVyaWNNb25vc3BhY2VGb250RmFtaWx5LT5sYXN0UmVzdWx0ID49IDEwKQ0KLSAgICAgICAgR2VuZXJpY01vbm9zcGFjZUZvbnRGYW1pbHktPmxhc3RSZXN1bHQgPSBOb3RGb3VuZDsNCi0jZW5kaWYNCi0NCi0gICAgcmV0dXJuIEdlbmVyaWNNb25vc3BhY2VGb250RmFtaWx5Ow0KLX0NCi0NCi1pbmxpbmUgRm9udEZhbWlseTo6fkZvbnRGYW1pbHkoKQ0KLXsNCi0gICAgRGxsRXhwb3J0czo6R2RpcERlbGV0ZUZvbnRGYW1pbHkgKG5hdGl2ZUZhbWlseSk7DQotfQ0KLQ0KLWlubGluZSBGb250RmFtaWx5ICoNCi1Gb250RmFtaWx5OjpDbG9uZSgpIGNvbnN0DQotew0KLSAgICBHcEZvbnRGYW1pbHkgKiBjbG9uZWRGYW1pbHkgPSBOVUxMOw0KLQ0KLSAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENsb25lRm9udEZhbWlseSAobmF0aXZlRmFtaWx5LCAmY2xvbmVkRmFtaWx5KSk7DQotDQotICAgIHJldHVybiBuZXcgRm9udEZhbWlseShjbG9uZWRGYW1pbHksIGxhc3RSZXN1bHQpOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzIA0KLUZvbnRGYW1pbHk6OkdldEZhbWlseU5hbWUoDQotICAgIElOIFdDSEFSIG5hbWVbTEZfRkFDRVNJWkVdLA0KLSAgICBJTiBMQU5HSUQgbGFuZ3VhZ2UNCi0pIGNvbnN0DQotew0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRGYW1pbHlOYW1lKG5hdGl2ZUZhbWlseSwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2UpKTsNCi19DQotDQotaW5saW5lIEJPT0wgDQotRm9udEZhbWlseTo6SXNTdHlsZUF2YWlsYWJsZShJTiBJTlQgc3R5bGUpIGNvbnN0DQotew0KLSAgICBCT09MICAgIFN0eWxlQXZhaWxhYmxlOw0KLSAgICBTdGF0dXMgIHN0YXR1czsNCi0NCi0gICAgc3RhdHVzID0gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBJc1N0eWxlQXZhaWxhYmxlKG5hdGl2ZUZhbWlseSwgc3R5bGUsICZTdHlsZUF2YWlsYWJsZSkpOw0KLQ0KLSAgICBpZiAoc3RhdHVzICE9IE9rKQ0KLSAgICAgICAgU3R5bGVBdmFpbGFibGUgPSBGQUxTRTsNCi0NCi0gICAgcmV0dXJuIFN0eWxlQXZhaWxhYmxlOw0KLX0NCi0NCi0NCi1pbmxpbmUgVUlOVDE2IA0KLUZvbnRGYW1pbHk6OkdldEVtSGVpZ2h0KElOIElOVCBzdHlsZSkgY29uc3QNCi17DQotICAgIFVJTlQxNiAgRW1IZWlnaHQ7DQotDQotICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0RW1IZWlnaHQobmF0aXZlRmFtaWx5LCBzdHlsZSwgJkVtSGVpZ2h0KSk7DQotDQotICAgIHJldHVybiBFbUhlaWdodDsNCi19DQotDQotaW5saW5lIFVJTlQxNiANCi1Gb250RmFtaWx5OjpHZXRDZWxsQXNjZW50KElOIElOVCBzdHlsZSkgY29uc3QNCi17DQotICAgIFVJTlQxNiAgQ2VsbEFzY2VudDsNCi0NCi0gICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRDZWxsQXNjZW50KG5hdGl2ZUZhbWlseSwgc3R5bGUsICZDZWxsQXNjZW50KSk7DQotDQotICAgIHJldHVybiBDZWxsQXNjZW50Ow0KLX0NCi0NCi1pbmxpbmUgVUlOVDE2IA0KLUZvbnRGYW1pbHk6OkdldENlbGxEZXNjZW50KElOIElOVCBzdHlsZSkgY29uc3QNCi17DQotICAgIFVJTlQxNiAgQ2VsbERlc2NlbnQ7DQotDQotICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0Q2VsbERlc2NlbnQobmF0aXZlRmFtaWx5LCBzdHlsZSwgJkNlbGxEZXNjZW50KSk7DQotDQotICAgIHJldHVybiBDZWxsRGVzY2VudDsNCi19DQotDQotDQotaW5saW5lIFVJTlQxNiANCi1Gb250RmFtaWx5OjpHZXRMaW5lU3BhY2luZyhJTiBJTlQgc3R5bGUpIGNvbnN0DQotew0KLSAgICBVSU5UMTYgIExpbmVTcGFjaW5nOw0KLQ0KLSAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldExpbmVTcGFjaW5nKG5hdGl2ZUZhbWlseSwgc3R5bGUsICZMaW5lU3BhY2luZykpOw0KLQ0KLSAgICByZXR1cm4gTGluZVNwYWNpbmc7DQotDQotfQ0KLQ0KLSNpZmRlZiBURVhUVjINCi0NCi0vLyBUaGUgZm9sbG93aW5nIEFQSXMgcmV0dXJuIGRhdGEgZnJvbSB0aGUgZm9udCBPUy8yIHRhYmxlDQotDQotaW5saW5lIElOVDE2IA0KLUZvbnRGYW1pbHk6OkdldFR5cG9ncmFwaGljQXNjZW50KElOIElOVCBzdHlsZSkgY29uc3QNCi17DQotICAgIElOVDE2ICBUeXBvZ3JhcGhpY0FzY2VudDsNCi0NCi0gICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRUeXBvZ3JhcGhpY0FzY2VudChuYXRpdmVGYW1pbHksIHN0eWxlLCAmVHlwb2dyYXBoaWNBc2NlbnQpKTsNCi0NCi0gICAgcmV0dXJuIFR5cG9ncmFwaGljQXNjZW50Ow0KLX0NCi0NCi1pbmxpbmUgSU5UMTYgDQotRm9udEZhbWlseTo6R2V0VHlwb2dyYXBoaWNEZXNjZW50KElOIElOVCBzdHlsZSkgY29uc3QNCi17DQotICAgIElOVDE2ICAgVHlwb2dyYXBoaWNEZXNjZW50Ow0KLQ0KLSAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFR5cG9ncmFwaGljRGVzY2VudChuYXRpdmVGYW1pbHksIHN0eWxlLCAmVHlwb2dyYXBoaWNEZXNjZW50KSk7DQotDQotICAgIHJldHVybiBUeXBvZ3JhcGhpY0Rlc2NlbnQ7DQotfQ0KLQ0KLWlubGluZSBJTlQxNiANCi1Gb250RmFtaWx5OjpHZXRUeXBvZ3JhcGhpY0xpbmVHYXAoSU4gSU5UIHN0eWxlKSBjb25zdA0KLXsNCi0gICAgSU5UMTYgICBUeXBvZ3JhcGhpY0xpbmVHYXA7DQotDQotICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0VHlwb2dyYXBoaWNMaW5lR2FwKG5hdGl2ZUZhbWlseSwgc3R5bGUsICZUeXBvZ3JhcGhpY0xpbmVHYXApKTsNCi0NCi0gICAgcmV0dXJuIFR5cG9ncmFwaGljTGluZUdhcDsNCi19DQotDQotI2VuZGlmDQotDQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi0NCi0vLyBHZXRMYXN0U3RhdHVzIC0gcmV0dXJuIGxhc3QgZXJyb3IgY29kZSBhbmQgY2xlYXIgZXJyb3IgY29kZQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotRm9udEZhbWlseTo6R2V0TGFzdFN0YXR1cygpIGNvbnN0DQotew0KLSAgICBTdGF0dXMgbGFzdFN0YXR1cyA9IGxhc3RSZXN1bHQ7DQotICAgIGxhc3RSZXN1bHQgPSBPazsNCi0NCi0gICAgcmV0dXJuIGxhc3RTdGF0dXM7DQotfQ0KLQ0KLS8vIHByb3RlY3RlZCBtZXRob2QNCi1pbmxpbmUgU3RhdHVzDQotRm9udEZhbWlseTo6U2V0U3RhdHVzKFN0YXR1cyBzdGF0dXMpIGNvbnN0IA0KLXsNCi0gICAgaWYgKHN0YXR1cyAhPSBPaykNCi0gICAgICAgIHJldHVybiAobGFzdFJlc3VsdCA9IHN0YXR1cyk7DQotICAgIGVsc2UNCi0gICAgICAgIHJldHVybiBzdGF0dXM7DQotfQ0KLQ0KLSNlbmRpZg0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyoKKyogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsIE1pY3Jvc29mdCBDb3JwLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyogTW9kdWxlIE5hbWU6CisqCisqICAgR2RpcGx1c0ZvbnRGYW1pbHkuaAorKgorKiBBYnN0cmFjdDoKKyoKKyogICBGb250IGZhbWlseSBBUEkgcmVsYXRlZCBkZWNsYXJhdGlvbnMKKyoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfR0RJUExVU19GT05UX0ZBTUlMWV9ICisjZGVmaW5lIF9HRElQTFVTX0ZPTlRfRkFNSUxZX0gKKworaW5saW5lIAorRm9udEZhbWlseTo6Rm9udEZhbWlseSgpIDoKKyAgICBuYXRpdmVGYW1pbHkgKE5VTEwpLAorICAgIGxhc3RSZXN1bHQgICAgKE9rKQoreworfQorCitpbmxpbmUgCitGb250RmFtaWx5OjpGb250RmFtaWx5KAorICAgIElOIGNvbnN0IFdDSEFSKiAgICAgICAgICBuYW1lLAorICAgIElOIGNvbnN0IEZvbnRDb2xsZWN0aW9uKiBmb250Q29sbGVjdGlvbgorKQoreworICAgIG5hdGl2ZUZhbWlseSA9IE5VTEw7CisgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVGb250RmFtaWx5RnJvbU5hbWUoCisgICAgICAgIG5hbWUsCisgICAgICAgIGZvbnRDb2xsZWN0aW9uID8gZm9udENvbGxlY3Rpb24tPm5hdGl2ZUZvbnRDb2xsZWN0aW9uIDogTlVMTCwKKyAgICAgICAgJm5hdGl2ZUZhbWlseQorICAgICk7CisgICAgCisjaWZuZGVmIERDUl9VU0VfTkVXXzEzNTQyOQorICAgIGlmICgoSU5UKSBsYXN0UmVzdWx0ID49IDEwKQorICAgICAgICBsYXN0UmVzdWx0ID0gTm90Rm91bmQ7CisjZW5kaWYKK30KKworLy8gcHJpdmF0ZSBtZXRob2QKK2lubGluZQorRm9udEZhbWlseTo6Rm9udEZhbWlseSgKKyAgICBJTiBHcEZvbnRGYW1pbHkgKm5hdGl2ZU9yaWcsCisgICAgSU4gU3RhdHVzIHN0YXR1cworKQoreworICAgIGxhc3RSZXN1bHQgICAgPSBzdGF0dXM7CisgICAgbmF0aXZlRmFtaWx5ID0gbmF0aXZlT3JpZzsKK30KKworLy8gR2VuZXJpYyBmb250IGZhbWlseSBhY2Nlc3MKKworaW5saW5lIGNvbnN0IEZvbnRGYW1pbHkgKgorRm9udEZhbWlseTo6R2VuZXJpY1NhbnNTZXJpZigpIAoreworICAgIGlmIChHZW5lcmljU2Fuc1NlcmlmRm9udEZhbWlseSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdlbmVyaWNTYW5zU2VyaWZGb250RmFtaWx5OworICAgIH0KKworICAgIEdlbmVyaWNTYW5zU2VyaWZGb250RmFtaWx5ID0KKyAgICAgICAgKEZvbnRGYW1pbHkqKSBHZW5lcmljU2Fuc1NlcmlmRm9udEZhbWlseUJ1ZmZlcjsKKworICAgIEdlbmVyaWNTYW5zU2VyaWZGb250RmFtaWx5LT5sYXN0UmVzdWx0ID0KKyAgICAgICAgRGxsRXhwb3J0czo6R2RpcEdldEdlbmVyaWNGb250RmFtaWx5U2Fuc1NlcmlmKAorICAgICAgICAgICAgJihHZW5lcmljU2Fuc1NlcmlmRm9udEZhbWlseS0+bmF0aXZlRmFtaWx5KQorICAgICAgICApOworCisjaWZuZGVmIERDUl9VU0VfTkVXXzEzNTQyOQorICAgIGlmICgoSU5UKSBHZW5lcmljU2Fuc1NlcmlmRm9udEZhbWlseS0+bGFzdFJlc3VsdCA+PSAxMCkKKyAgICAgICAgR2VuZXJpY1NhbnNTZXJpZkZvbnRGYW1pbHktPmxhc3RSZXN1bHQgPSBOb3RGb3VuZDsKKyNlbmRpZgorCisgICAgcmV0dXJuIEdlbmVyaWNTYW5zU2VyaWZGb250RmFtaWx5OworfQorCitpbmxpbmUgY29uc3QgRm9udEZhbWlseSAqCitGb250RmFtaWx5OjpHZW5lcmljU2VyaWYoKSAKK3sKKyAgICBpZiAoR2VuZXJpY1NlcmlmRm9udEZhbWlseSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEdlbmVyaWNTZXJpZkZvbnRGYW1pbHk7CisgICAgfQorCisgICAgR2VuZXJpY1NlcmlmRm9udEZhbWlseSA9CisgICAgICAgIChGb250RmFtaWx5KikgR2VuZXJpY1NlcmlmRm9udEZhbWlseUJ1ZmZlcjsKKworICAgIEdlbmVyaWNTZXJpZkZvbnRGYW1pbHktPmxhc3RSZXN1bHQgPQorICAgICAgICBEbGxFeHBvcnRzOjpHZGlwR2V0R2VuZXJpY0ZvbnRGYW1pbHlTZXJpZigKKyAgICAgICAgICAgICYoR2VuZXJpY1NlcmlmRm9udEZhbWlseS0+bmF0aXZlRmFtaWx5KQorICAgICAgICApOworCisjaWZuZGVmIERDUl9VU0VfTkVXXzEzNTQyOQorICAgIGlmICgoSU5UKSBHZW5lcmljU2VyaWZGb250RmFtaWx5LT5sYXN0UmVzdWx0ID49IDEwKQorICAgICAgICBHZW5lcmljU2VyaWZGb250RmFtaWx5LT5sYXN0UmVzdWx0ID0gTm90Rm91bmQ7CisjZW5kaWYKKworICAgIHJldHVybiBHZW5lcmljU2VyaWZGb250RmFtaWx5OworfQorCitpbmxpbmUgY29uc3QgRm9udEZhbWlseSAqCitGb250RmFtaWx5OjpHZW5lcmljTW9ub3NwYWNlKCkKK3sKKyAgICBpZiAoR2VuZXJpY01vbm9zcGFjZUZvbnRGYW1pbHkgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBHZW5lcmljTW9ub3NwYWNlRm9udEZhbWlseTsKKyAgICB9CisKKyAgICBHZW5lcmljTW9ub3NwYWNlRm9udEZhbWlseSA9CisgICAgICAgIChGb250RmFtaWx5KikgR2VuZXJpY01vbm9zcGFjZUZvbnRGYW1pbHlCdWZmZXI7CisKKyAgICBHZW5lcmljTW9ub3NwYWNlRm9udEZhbWlseS0+bGFzdFJlc3VsdCA9CisgICAgICAgIERsbEV4cG9ydHM6OkdkaXBHZXRHZW5lcmljRm9udEZhbWlseU1vbm9zcGFjZSgKKyAgICAgICAgICAgICYoR2VuZXJpY01vbm9zcGFjZUZvbnRGYW1pbHktPm5hdGl2ZUZhbWlseSkKKyAgICAgICAgKTsKKworI2lmbmRlZiBEQ1JfVVNFX05FV18xMzU0MjkKKyAgICBpZiAoKElOVCkgR2VuZXJpY01vbm9zcGFjZUZvbnRGYW1pbHktPmxhc3RSZXN1bHQgPj0gMTApCisgICAgICAgIEdlbmVyaWNNb25vc3BhY2VGb250RmFtaWx5LT5sYXN0UmVzdWx0ID0gTm90Rm91bmQ7CisjZW5kaWYKKworICAgIHJldHVybiBHZW5lcmljTW9ub3NwYWNlRm9udEZhbWlseTsKK30KKworaW5saW5lIEZvbnRGYW1pbHk6On5Gb250RmFtaWx5KCkKK3sKKyAgICBEbGxFeHBvcnRzOjpHZGlwRGVsZXRlRm9udEZhbWlseSAobmF0aXZlRmFtaWx5KTsKK30KKworaW5saW5lIEZvbnRGYW1pbHkgKgorRm9udEZhbWlseTo6Q2xvbmUoKSBjb25zdAoreworICAgIEdwRm9udEZhbWlseSAqIGNsb25lZEZhbWlseSA9IE5VTEw7CisKKyAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENsb25lRm9udEZhbWlseSAobmF0aXZlRmFtaWx5LCAmY2xvbmVkRmFtaWx5KSk7CisKKyAgICByZXR1cm4gbmV3IEZvbnRGYW1pbHkoY2xvbmVkRmFtaWx5LCBsYXN0UmVzdWx0KTsKK30KKworaW5saW5lIFN0YXR1cyAKK0ZvbnRGYW1pbHk6OkdldEZhbWlseU5hbWUoCisgICAgSU4gV0NIQVIgbmFtZVtMRl9GQUNFU0laRV0sCisgICAgSU4gTEFOR0lEIGxhbmd1YWdlCispIGNvbnN0Cit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0RmFtaWx5TmFtZShuYXRpdmVGYW1pbHksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZSkpOworfQorCitpbmxpbmUgQk9PTCAKK0ZvbnRGYW1pbHk6OklzU3R5bGVBdmFpbGFibGUoSU4gSU5UIHN0eWxlKSBjb25zdAoreworICAgIEJPT0wgICAgU3R5bGVBdmFpbGFibGU7CisgICAgU3RhdHVzICBzdGF0dXM7CisKKyAgICBzdGF0dXMgPSBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcElzU3R5bGVBdmFpbGFibGUobmF0aXZlRmFtaWx5LCBzdHlsZSwgJlN0eWxlQXZhaWxhYmxlKSk7CisKKyAgICBpZiAoc3RhdHVzICE9IE9rKQorICAgICAgICBTdHlsZUF2YWlsYWJsZSA9IEZBTFNFOworCisgICAgcmV0dXJuIFN0eWxlQXZhaWxhYmxlOworfQorCisKK2lubGluZSBVSU5UMTYgCitGb250RmFtaWx5OjpHZXRFbUhlaWdodChJTiBJTlQgc3R5bGUpIGNvbnN0Cit7CisgICAgVUlOVDE2ICBFbUhlaWdodDsKKworICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0RW1IZWlnaHQobmF0aXZlRmFtaWx5LCBzdHlsZSwgJkVtSGVpZ2h0KSk7CisKKyAgICByZXR1cm4gRW1IZWlnaHQ7Cit9CisKK2lubGluZSBVSU5UMTYgCitGb250RmFtaWx5OjpHZXRDZWxsQXNjZW50KElOIElOVCBzdHlsZSkgY29uc3QKK3sKKyAgICBVSU5UMTYgIENlbGxBc2NlbnQ7CisKKyAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldENlbGxBc2NlbnQobmF0aXZlRmFtaWx5LCBzdHlsZSwgJkNlbGxBc2NlbnQpKTsKKworICAgIHJldHVybiBDZWxsQXNjZW50OworfQorCitpbmxpbmUgVUlOVDE2IAorRm9udEZhbWlseTo6R2V0Q2VsbERlc2NlbnQoSU4gSU5UIHN0eWxlKSBjb25zdAoreworICAgIFVJTlQxNiAgQ2VsbERlc2NlbnQ7CisKKyAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldENlbGxEZXNjZW50KG5hdGl2ZUZhbWlseSwgc3R5bGUsICZDZWxsRGVzY2VudCkpOworCisgICAgcmV0dXJuIENlbGxEZXNjZW50OworfQorCisKK2lubGluZSBVSU5UMTYgCitGb250RmFtaWx5OjpHZXRMaW5lU3BhY2luZyhJTiBJTlQgc3R5bGUpIGNvbnN0Cit7CisgICAgVUlOVDE2ICBMaW5lU3BhY2luZzsKKworICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0TGluZVNwYWNpbmcobmF0aXZlRmFtaWx5LCBzdHlsZSwgJkxpbmVTcGFjaW5nKSk7CisKKyAgICByZXR1cm4gTGluZVNwYWNpbmc7CisKK30KKworI2lmZGVmIFRFWFRWMgorCisvLyBUaGUgZm9sbG93aW5nIEFQSXMgcmV0dXJuIGRhdGEgZnJvbSB0aGUgZm9udCBPUy8yIHRhYmxlCisKK2lubGluZSBJTlQxNiAKK0ZvbnRGYW1pbHk6OkdldFR5cG9ncmFwaGljQXNjZW50KElOIElOVCBzdHlsZSkgY29uc3QKK3sKKyAgICBJTlQxNiAgVHlwb2dyYXBoaWNBc2NlbnQ7CisKKyAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFR5cG9ncmFwaGljQXNjZW50KG5hdGl2ZUZhbWlseSwgc3R5bGUsICZUeXBvZ3JhcGhpY0FzY2VudCkpOworCisgICAgcmV0dXJuIFR5cG9ncmFwaGljQXNjZW50OworfQorCitpbmxpbmUgSU5UMTYgCitGb250RmFtaWx5OjpHZXRUeXBvZ3JhcGhpY0Rlc2NlbnQoSU4gSU5UIHN0eWxlKSBjb25zdAoreworICAgIElOVDE2ICAgVHlwb2dyYXBoaWNEZXNjZW50OworCisgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRUeXBvZ3JhcGhpY0Rlc2NlbnQobmF0aXZlRmFtaWx5LCBzdHlsZSwgJlR5cG9ncmFwaGljRGVzY2VudCkpOworCisgICAgcmV0dXJuIFR5cG9ncmFwaGljRGVzY2VudDsKK30KKworaW5saW5lIElOVDE2IAorRm9udEZhbWlseTo6R2V0VHlwb2dyYXBoaWNMaW5lR2FwKElOIElOVCBzdHlsZSkgY29uc3QKK3sKKyAgICBJTlQxNiAgIFR5cG9ncmFwaGljTGluZUdhcDsKKworICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0VHlwb2dyYXBoaWNMaW5lR2FwKG5hdGl2ZUZhbWlseSwgc3R5bGUsICZUeXBvZ3JhcGhpY0xpbmVHYXApKTsKKworICAgIHJldHVybiBUeXBvZ3JhcGhpY0xpbmVHYXA7Cit9CisKKyNlbmRpZgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyBHZXRMYXN0U3RhdHVzIC0gcmV0dXJuIGxhc3QgZXJyb3IgY29kZSBhbmQgY2xlYXIgZXJyb3IgY29kZQorCitpbmxpbmUgU3RhdHVzIAorRm9udEZhbWlseTo6R2V0TGFzdFN0YXR1cygpIGNvbnN0Cit7CisgICAgU3RhdHVzIGxhc3RTdGF0dXMgPSBsYXN0UmVzdWx0OworICAgIGxhc3RSZXN1bHQgPSBPazsKKworICAgIHJldHVybiBsYXN0U3RhdHVzOworfQorCisvLyBwcm90ZWN0ZWQgbWV0aG9kCitpbmxpbmUgU3RhdHVzCitGb250RmFtaWx5OjpTZXRTdGF0dXMoU3RhdHVzIHN0YXR1cykgY29uc3QgCit7CisgICAgaWYgKHN0YXR1cyAhPSBPaykKKyAgICAgICAgcmV0dXJuIChsYXN0UmVzdWx0ID0gc3RhdHVzKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBzdGF0dXM7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0dwU3R1YnMuaCBiL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNHcFN0dWJzLmgKaW5kZXggMTIxMjg4ZC4uNGY2MDY2YyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0dwU3R1YnMuaAorKysgYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzR3BTdHVicy5oCkBAIC0xLDEwNyArMSwxMDcgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwNCi0qDQotKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwgTWljcm9zb2Z0IENvcnAuICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSoNCi0qIE1vZHVsZSBOYW1lOg0KLSoNCi0qICAgR2RpcGx1c0dwU3R1YnMuaA0KLSoNCi0qIEFic3RyYWN0Og0KLSoNCi0qICAgR0RJKyBOYXRpdmUgQysrIHB1YmxpYyBoZWFkZXIgZmlsZQ0KLSoNCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotI2lmbmRlZiBfR0RJUExVU0dQU1RVQlNfSA0KLSNkZWZpbmUgX0dESVBMVVNHUFNUVUJTX0gNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEdESSsgY2xhc3NlcyBmb3IgZm9yd2FyZCByZWZlcmVuY2UNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWNsYXNzIEdyYXBoaWNzOw0KLWNsYXNzIFBlbjsNCi1jbGFzcyBCcnVzaDsNCi1jbGFzcyBNYXRyaXg7DQotY2xhc3MgQml0bWFwOw0KLWNsYXNzIE1ldGFmaWxlOw0KLWNsYXNzIEdyYXBoaWNzUGF0aDsNCi1jbGFzcyBQYXRoSXRlcmF0b3I7DQotY2xhc3MgUmVnaW9uOw0KLWNsYXNzIEltYWdlOw0KLWNsYXNzIFRleHR1cmVCcnVzaDsNCi1jbGFzcyBIYXRjaEJydXNoOw0KLWNsYXNzIFNvbGlkQnJ1c2g7DQotY2xhc3MgTGluZWFyR3JhZGllbnRCcnVzaDsNCi1jbGFzcyBQYXRoR3JhZGllbnRCcnVzaDsNCi1jbGFzcyBGb250Ow0KLWNsYXNzIEZvbnRGYW1pbHk7DQotY2xhc3MgRm9udENvbGxlY3Rpb247DQotY2xhc3MgSW5zdGFsbGVkRm9udENvbGxlY3Rpb247DQotY2xhc3MgUHJpdmF0ZUZvbnRDb2xsZWN0aW9uOw0KLWNsYXNzIEltYWdlQXR0cmlidXRlczsNCi1jbGFzcyBDYWNoZWRCaXRtYXA7DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBJbnRlcm5hbCBHREkrIGNsYXNzZXMgZm9yIGludGVybmFsIHR5cGUgY2hlY2tpbmcNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLWNsYXNzIEdwR3JhcGhpY3Mge307DQotDQotY2xhc3MgR3BCcnVzaCB7fTsNCi1jbGFzcyBHcFRleHR1cmUgOiBwdWJsaWMgR3BCcnVzaCB7fTsNCi1jbGFzcyBHcFNvbGlkRmlsbCA6IHB1YmxpYyBHcEJydXNoIHt9Ow0KLWNsYXNzIEdwTGluZUdyYWRpZW50IDogcHVibGljIEdwQnJ1c2gge307DQotY2xhc3MgR3BQYXRoR3JhZGllbnQgOiBwdWJsaWMgR3BCcnVzaCB7fTsNCi1jbGFzcyBHcEhhdGNoIDogcHVibGljIEdwQnJ1c2gge307DQotDQotY2xhc3MgR3BQZW4ge307DQotY2xhc3MgR3BDdXN0b21MaW5lQ2FwIHt9Ow0KLWNsYXNzIEdwQWRqdXN0YWJsZUFycm93Q2FwIDogcHVibGljIEdwQ3VzdG9tTGluZUNhcCB7fTsNCi0NCi1jbGFzcyBHcEltYWdlIHt9Ow0KLWNsYXNzIEdwQml0bWFwIDogcHVibGljIEdwSW1hZ2Uge307DQotY2xhc3MgR3BNZXRhZmlsZSA6IHB1YmxpYyBHcEltYWdlIHt9Ow0KLWNsYXNzIEdwSW1hZ2VBdHRyaWJ1dGVzIHt9Ow0KLQ0KLWNsYXNzIEdwUGF0aCB7fTsNCi1jbGFzcyBHcFJlZ2lvbiB7fTsNCi1jbGFzcyBHcFBhdGhJdGVyYXRvciB7fTsNCi0NCi1jbGFzcyBHcEZvbnRGYW1pbHkge307DQotY2xhc3MgR3BGb250IHt9Ow0KLWNsYXNzIEdwU3RyaW5nRm9ybWF0IHt9Ow0KLWNsYXNzIEdwRm9udENvbGxlY3Rpb24ge307DQotY2xhc3MgR3BJbnN0YWxsZWRGb250Q29sbGVjdGlvbiA6IHB1YmxpYyBHcEZvbnRDb2xsZWN0aW9uIHt9Ow0KLWNsYXNzIEdwUHJpdmF0ZUZvbnRDb2xsZWN0aW9uIDogcHVibGljIEdwRm9udENvbGxlY3Rpb24ge307DQotDQotY2xhc3MgR3BDYWNoZWRCaXRtYXA7DQotDQotdHlwZWRlZiBTdGF0dXMgR3BTdGF0dXM7DQotdHlwZWRlZiBGaWxsTW9kZSBHcEZpbGxNb2RlOw0KLXR5cGVkZWYgV3JhcE1vZGUgR3BXcmFwTW9kZTsNCi10eXBlZGVmIFVuaXQgR3BVbml0Ow0KLXR5cGVkZWYgQ29vcmRpbmF0ZVNwYWNlIEdwQ29vcmRpbmF0ZVNwYWNlOw0KLXR5cGVkZWYgUG9pbnRGIEdwUG9pbnRGOw0KLXR5cGVkZWYgUG9pbnQgR3BQb2ludDsNCi10eXBlZGVmIFJlY3RGIEdwUmVjdEY7DQotdHlwZWRlZiBSZWN0IEdwUmVjdDsNCi10eXBlZGVmIFNpemVGIEdwU2l6ZUY7DQotdHlwZWRlZiBIYXRjaFN0eWxlIEdwSGF0Y2hTdHlsZTsNCi10eXBlZGVmIERhc2hTdHlsZSBHcERhc2hTdHlsZTsNCi10eXBlZGVmIExpbmVDYXAgR3BMaW5lQ2FwOw0KLXR5cGVkZWYgRGFzaENhcCBHcERhc2hDYXA7DQotDQotDQotdHlwZWRlZiBQZW5BbGlnbm1lbnQgR3BQZW5BbGlnbm1lbnQ7DQotDQotdHlwZWRlZiBMaW5lSm9pbiBHcExpbmVKb2luOw0KLXR5cGVkZWYgUGVuVHlwZSBHcFBlblR5cGU7DQotDQotdHlwZWRlZiBNYXRyaXggR3BNYXRyaXg7DQotdHlwZWRlZiBCcnVzaFR5cGUgR3BCcnVzaFR5cGU7DQotdHlwZWRlZiBNYXRyaXhPcmRlciBHcE1hdHJpeE9yZGVyOw0KLXR5cGVkZWYgRmx1c2hJbnRlbnRpb24gR3BGbHVzaEludGVudGlvbjsNCi10eXBlZGVmIFBhdGhEYXRhIEdwUGF0aERhdGE7DQotDQotI2VuZGlmICAvLyAhX0dESVBMVVNHUFNUVUJTLkhQUA0KLQ0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyoKKyogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsIE1pY3Jvc29mdCBDb3JwLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyogTW9kdWxlIE5hbWU6CisqCisqICAgR2RpcGx1c0dwU3R1YnMuaAorKgorKiBBYnN0cmFjdDoKKyoKKyogICBHREkrIE5hdGl2ZSBDKysgcHVibGljIGhlYWRlciBmaWxlCisqCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0dESVBMVVNHUFNUVUJTX0gKKyNkZWZpbmUgX0dESVBMVVNHUFNUVUJTX0gKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEdESSsgY2xhc3NlcyBmb3IgZm9yd2FyZCByZWZlcmVuY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIEdyYXBoaWNzOworY2xhc3MgUGVuOworY2xhc3MgQnJ1c2g7CitjbGFzcyBNYXRyaXg7CitjbGFzcyBCaXRtYXA7CitjbGFzcyBNZXRhZmlsZTsKK2NsYXNzIEdyYXBoaWNzUGF0aDsKK2NsYXNzIFBhdGhJdGVyYXRvcjsKK2NsYXNzIFJlZ2lvbjsKK2NsYXNzIEltYWdlOworY2xhc3MgVGV4dHVyZUJydXNoOworY2xhc3MgSGF0Y2hCcnVzaDsKK2NsYXNzIFNvbGlkQnJ1c2g7CitjbGFzcyBMaW5lYXJHcmFkaWVudEJydXNoOworY2xhc3MgUGF0aEdyYWRpZW50QnJ1c2g7CitjbGFzcyBGb250OworY2xhc3MgRm9udEZhbWlseTsKK2NsYXNzIEZvbnRDb2xsZWN0aW9uOworY2xhc3MgSW5zdGFsbGVkRm9udENvbGxlY3Rpb247CitjbGFzcyBQcml2YXRlRm9udENvbGxlY3Rpb247CitjbGFzcyBJbWFnZUF0dHJpYnV0ZXM7CitjbGFzcyBDYWNoZWRCaXRtYXA7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbnRlcm5hbCBHREkrIGNsYXNzZXMgZm9yIGludGVybmFsIHR5cGUgY2hlY2tpbmcKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitjbGFzcyBHcEdyYXBoaWNzIHt9OworCitjbGFzcyBHcEJydXNoIHt9OworY2xhc3MgR3BUZXh0dXJlIDogcHVibGljIEdwQnJ1c2gge307CitjbGFzcyBHcFNvbGlkRmlsbCA6IHB1YmxpYyBHcEJydXNoIHt9OworY2xhc3MgR3BMaW5lR3JhZGllbnQgOiBwdWJsaWMgR3BCcnVzaCB7fTsKK2NsYXNzIEdwUGF0aEdyYWRpZW50IDogcHVibGljIEdwQnJ1c2gge307CitjbGFzcyBHcEhhdGNoIDogcHVibGljIEdwQnJ1c2gge307CisKK2NsYXNzIEdwUGVuIHt9OworY2xhc3MgR3BDdXN0b21MaW5lQ2FwIHt9OworY2xhc3MgR3BBZGp1c3RhYmxlQXJyb3dDYXAgOiBwdWJsaWMgR3BDdXN0b21MaW5lQ2FwIHt9OworCitjbGFzcyBHcEltYWdlIHt9OworY2xhc3MgR3BCaXRtYXAgOiBwdWJsaWMgR3BJbWFnZSB7fTsKK2NsYXNzIEdwTWV0YWZpbGUgOiBwdWJsaWMgR3BJbWFnZSB7fTsKK2NsYXNzIEdwSW1hZ2VBdHRyaWJ1dGVzIHt9OworCitjbGFzcyBHcFBhdGgge307CitjbGFzcyBHcFJlZ2lvbiB7fTsKK2NsYXNzIEdwUGF0aEl0ZXJhdG9yIHt9OworCitjbGFzcyBHcEZvbnRGYW1pbHkge307CitjbGFzcyBHcEZvbnQge307CitjbGFzcyBHcFN0cmluZ0Zvcm1hdCB7fTsKK2NsYXNzIEdwRm9udENvbGxlY3Rpb24ge307CitjbGFzcyBHcEluc3RhbGxlZEZvbnRDb2xsZWN0aW9uIDogcHVibGljIEdwRm9udENvbGxlY3Rpb24ge307CitjbGFzcyBHcFByaXZhdGVGb250Q29sbGVjdGlvbiA6IHB1YmxpYyBHcEZvbnRDb2xsZWN0aW9uIHt9OworCitjbGFzcyBHcENhY2hlZEJpdG1hcDsKKwordHlwZWRlZiBTdGF0dXMgR3BTdGF0dXM7Cit0eXBlZGVmIEZpbGxNb2RlIEdwRmlsbE1vZGU7Cit0eXBlZGVmIFdyYXBNb2RlIEdwV3JhcE1vZGU7Cit0eXBlZGVmIFVuaXQgR3BVbml0OwordHlwZWRlZiBDb29yZGluYXRlU3BhY2UgR3BDb29yZGluYXRlU3BhY2U7Cit0eXBlZGVmIFBvaW50RiBHcFBvaW50RjsKK3R5cGVkZWYgUG9pbnQgR3BQb2ludDsKK3R5cGVkZWYgUmVjdEYgR3BSZWN0RjsKK3R5cGVkZWYgUmVjdCBHcFJlY3Q7Cit0eXBlZGVmIFNpemVGIEdwU2l6ZUY7Cit0eXBlZGVmIEhhdGNoU3R5bGUgR3BIYXRjaFN0eWxlOwordHlwZWRlZiBEYXNoU3R5bGUgR3BEYXNoU3R5bGU7Cit0eXBlZGVmIExpbmVDYXAgR3BMaW5lQ2FwOwordHlwZWRlZiBEYXNoQ2FwIEdwRGFzaENhcDsKKworCit0eXBlZGVmIFBlbkFsaWdubWVudCBHcFBlbkFsaWdubWVudDsKKwordHlwZWRlZiBMaW5lSm9pbiBHcExpbmVKb2luOwordHlwZWRlZiBQZW5UeXBlIEdwUGVuVHlwZTsKKwordHlwZWRlZiBNYXRyaXggR3BNYXRyaXg7Cit0eXBlZGVmIEJydXNoVHlwZSBHcEJydXNoVHlwZTsKK3R5cGVkZWYgTWF0cml4T3JkZXIgR3BNYXRyaXhPcmRlcjsKK3R5cGVkZWYgRmx1c2hJbnRlbnRpb24gR3BGbHVzaEludGVudGlvbjsKK3R5cGVkZWYgUGF0aERhdGEgR3BQYXRoRGF0YTsKKworI2VuZGlmICAvLyAhX0dESVBMVVNHUFNUVUJTLkhQUAorCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzR3JhcGhpY3MuaCBiL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNHcmFwaGljcy5oCmluZGV4IDdiMzlhNmUuLjRlNGUzZGEgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNHcmFwaGljcy5oCisrKyBiL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNHcmFwaGljcy5oCkBAIC0xLDI3MjYgKzEsMjcyNiBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXA0KLSoNCi0qIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotKg0KLSogTW9kdWxlIE5hbWU6DQotKg0KLSogICBHZGlwbHVzR3JhcGhpY3MuaA0KLSoNCi0qIEFic3RyYWN0Og0KLSoNCi0qICAgRGVjbGFyYXRpb25zIGZvciBHcmFwaGljcyBjbGFzcw0KLSoNCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotI2lmbmRlZiBfR0RJUExVU0dSQVBISUNTX0gNCi0jZGVmaW5lIF9HRElQTFVTR1JBUEhJQ1NfSA0KLQ0KLS8qKg0KLSAqIFJlcHJlc2VudCBhIGdyYXBoaWNzIGNvbnRleHQNCi0gKi8NCi1jbGFzcyBHcmFwaGljcyA6IHB1YmxpYyBHZGlwbHVzQmFzZQ0KLXsNCi1wdWJsaWM6DQotICAgIGZyaWVuZCBjbGFzcyBSZWdpb247DQotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc1BhdGg7DQotICAgIGZyaWVuZCBjbGFzcyBJbWFnZTsNCi0gICAgZnJpZW5kIGNsYXNzIEJpdG1hcDsNCi0gICAgZnJpZW5kIGNsYXNzIE1ldGFmaWxlOw0KLSAgICBmcmllbmQgY2xhc3MgRm9udDsNCi0gICAgZnJpZW5kIGNsYXNzIEZvbnRGYW1pbHk7DQotICAgIGZyaWVuZCBjbGFzcyBGb250Q29sbGVjdGlvbjsNCi0gICAgZnJpZW5kIGNsYXNzIENhY2hlZEJpdG1hcDsNCi0NCi0gICAgLy8gR2V0IGEgZ3JhcGhpY3MgY29udGV4dCBmcm9tIGFuIGV4aXN0aW5nIFdpbjMyIEhEQyBvciBIV05EDQotICAgIHN0YXRpYyBHcmFwaGljcyogRnJvbUhEQyhJTiBIREMgaGRjKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbmV3IEdyYXBoaWNzKGhkYyk7DQotICAgIH0NCi0NCi0gICAgc3RhdGljIEdyYXBoaWNzKiBGcm9tSERDKElOIEhEQyBoZGMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBIQU5ETEUgaGRldmljZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG5ldyBHcmFwaGljcyhoZGMsIGhkZXZpY2UpOw0KLSAgICB9DQotDQotICAgIHN0YXRpYyBHcmFwaGljcyogRnJvbUhXTkQoSU4gSFdORCBod25kLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIEJPT0wgaWNtID0gRkFMU0UpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBuZXcgR3JhcGhpY3MoaHduZCwgaWNtKTsNCi0gICAgfQ0KLQ0KLSAgICBzdGF0aWMgR3JhcGhpY3MqIEZyb21JbWFnZShJTiBJbWFnZSAqaW1hZ2UpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBuZXcgR3JhcGhpY3MoaW1hZ2UpOw0KLSAgICB9DQotDQotICAgIEdyYXBoaWNzKElOIEhEQyBoZGMpDQotICAgIHsNCi0gICAgICAgIEdwR3JhcGhpY3MgKmdyYXBoaWNzID0gTlVMTDsNCi0NCi0gICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlRnJvbUhEQyhoZGMsICZncmFwaGljcyk7DQotDQotICAgICAgICBTZXROYXRpdmVHcmFwaGljcyhncmFwaGljcyk7DQotICAgIH0NCi0NCi0gICAgR3JhcGhpY3MoSU4gSERDIGhkYywNCi0gICAgICAgICAgICAgSU4gSEFORExFIGhkZXZpY2UpDQotICAgIHsNCi0gICAgICAgIEdwR3JhcGhpY3MgKmdyYXBoaWNzID0gTlVMTDsNCi0NCi0gICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlRnJvbUhEQzIoaGRjLCBoZGV2aWNlLCAmZ3JhcGhpY3MpOw0KLQ0KLSAgICAgICAgU2V0TmF0aXZlR3JhcGhpY3MoZ3JhcGhpY3MpOw0KLSAgICB9DQotDQotICAgIEdyYXBoaWNzKElOIEhXTkQgaHduZCwNCi0gICAgICAgICAgICAgSU4gQk9PTCBpY20gPSBGQUxTRSkNCi0gICAgew0KLSAgICAgICAgR3BHcmFwaGljcyAqZ3JhcGhpY3MgPSBOVUxMOw0KLQ0KLSAgICAgICAgaWYgKGljbSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUZyb21IV05ESUNNKGh3bmQsICZncmFwaGljcyk7DQotICAgICAgICB9DQotICAgICAgICBlbHNlDQotICAgICAgICB7DQotICAgICAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVGcm9tSFdORChod25kLCAmZ3JhcGhpY3MpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgU2V0TmF0aXZlR3JhcGhpY3MoZ3JhcGhpY3MpOw0KLSAgICB9DQotDQotICAgIEdyYXBoaWNzKElOIEltYWdlKiBpbWFnZSkNCi0gICAgew0KLSAgICAgICAgR3BHcmFwaGljcyAqZ3JhcGhpY3MgPSBOVUxMOw0KLQ0KLSAgICAgICAgaWYgKGltYWdlICE9IE5VTEwpDQotICAgICAgICB7DQotICAgICAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBHZXRJbWFnZUdyYXBoaWNzQ29udGV4dCgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UtPm5hdGl2ZUltYWdlLCAmZ3JhcGhpY3MpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgU2V0TmF0aXZlR3JhcGhpY3MoZ3JhcGhpY3MpOw0KLSAgICB9DQotDQotICAgIH5HcmFwaGljcygpDQotICAgIHsNCi0gICAgICAgIERsbEV4cG9ydHM6OkdkaXBEZWxldGVHcmFwaGljcyhuYXRpdmVHcmFwaGljcyk7DQotICAgIH0NCi0NCi0gICAgVk9JRCBGbHVzaChJTiBGbHVzaEludGVudGlvbiBpbnRlbnRpb24gPSBGbHVzaEludGVudGlvbkZsdXNoKQ0KLSAgICB7DQotICAgICAgICBEbGxFeHBvcnRzOjpHZGlwRmx1c2gobmF0aXZlR3JhcGhpY3MsIGludGVudGlvbik7DQotICAgIH0NCi0NCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0gICAgLy8gSW50ZXJvcCBtZXRob2RzDQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotICAgIC8vIExvY2tzIHRoZSBncmFwaGljcyB1bnRpbCBSZWxlYXNlREMgaXMgY2FsbGVkDQotICAgIEhEQyBHZXRIREMoKQ0KLSAgICB7DQotICAgICAgICBIREMgICAgIGhkYyA9IE5VTEw7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldERDKG5hdGl2ZUdyYXBoaWNzLCAmaGRjKSk7DQotDQotICAgICAgICByZXR1cm4gaGRjOw0KLSAgICB9DQotDQotICAgIFZPSUQgUmVsZWFzZUhEQyhJTiBIREMgaGRjKQ0KLSAgICB7DQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFJlbGVhc2VEQyhuYXRpdmVHcmFwaGljcywgaGRjKSk7DQotICAgIH0NCi0NCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0gICAgLy8gUmVuZGVyaW5nIG1vZGVzDQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotICAgIFN0YXR1cyBTZXRSZW5kZXJpbmdPcmlnaW4oSU4gSU5UIHgsIElOIElOVCB5KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKA0KLSAgICAgICAgICAgIERsbEV4cG9ydHM6OkdkaXBTZXRSZW5kZXJpbmdPcmlnaW4oDQotICAgICAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLCB4LCB5DQotICAgICAgICAgICAgKQ0KLSAgICAgICAgKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgR2V0UmVuZGVyaW5nT3JpZ2luKE9VVCBJTlQgKngsIE9VVCBJTlQgKnkpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoDQotICAgICAgICAgICAgRGxsRXhwb3J0czo6R2RpcEdldFJlbmRlcmluZ09yaWdpbigNCi0gICAgICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsIHgsIHkNCi0gICAgICAgICAgICApDQotICAgICAgICApOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTZXRDb21wb3NpdGluZ01vZGUoSU4gQ29tcG9zaXRpbmdNb2RlIGNvbXBvc2l0aW5nTW9kZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0Q29tcG9zaXRpbmdNb2RlKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0aW5nTW9kZSkpOw0KLSAgICB9DQotDQotICAgIENvbXBvc2l0aW5nTW9kZSBHZXRDb21wb3NpdGluZ01vZGUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBDb21wb3NpdGluZ01vZGUgbW9kZTsNCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0Q29tcG9zaXRpbmdNb2RlKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1vZGUpKTsNCi0NCi0gICAgICAgIHJldHVybiBtb2RlOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTZXRDb21wb3NpdGluZ1F1YWxpdHkoSU4gQ29tcG9zaXRpbmdRdWFsaXR5IGNvbXBvc2l0aW5nUXVhbGl0eSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0Q29tcG9zaXRpbmdRdWFsaXR5KA0KLSAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgIGNvbXBvc2l0aW5nUXVhbGl0eSkpOw0KLSAgICB9DQotDQotICAgIENvbXBvc2l0aW5nUXVhbGl0eSBHZXRDb21wb3NpdGluZ1F1YWxpdHkoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBDb21wb3NpdGluZ1F1YWxpdHkgcXVhbGl0eTsNCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0Q29tcG9zaXRpbmdRdWFsaXR5KA0KLSAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICZxdWFsaXR5KSk7DQotDQotICAgICAgICByZXR1cm4gcXVhbGl0eTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0VGV4dFJlbmRlcmluZ0hpbnQoSU4gVGV4dFJlbmRlcmluZ0hpbnQgbmV3TW9kZSkNCi0gICAgew0KLSNpZm5kZWYgRENSX1VTRV9ORVdfMTg2NzY0DQotCQkvKiB0ZW1wb3Jhcmx5IHNldCB0aGUgaGlnaCBiaXQgdG8gd2FybiB0aGF0IHdlIGFyZSB1c2luZyB0aGUgbmV3IGRlZmluaXRpb24gZm9yIHRoZSBmbGFnICovDQotCQluZXdNb2RlID0gKFRleHRSZW5kZXJpbmdIaW50KSAobmV3TW9kZSB8IDB4MGYwMDApOw0KLSNlbmRpZiAvLyBEQ1JfVVNFX05FV18xODY3NjQNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFRleHRSZW5kZXJpbmdIaW50KG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdNb2RlKSk7DQotICAgIH0NCi0NCi0gICAgVGV4dFJlbmRlcmluZ0hpbnQgR2V0VGV4dFJlbmRlcmluZ0hpbnQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBUZXh0UmVuZGVyaW5nSGludCBoaW50Ow0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRUZXh0UmVuZGVyaW5nSGludChuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGludCkpOw0KLQ0KLSAgICAgICAgcmV0dXJuIGhpbnQ7DQotICAgIH0NCi0NCi0jaWZkZWYgRENSX1VTRV9ORVdfMTg4OTIyDQotICAgIFN0YXR1cyBTZXRUZXh0Q29udHJhc3QoSU4gVUlOVCBjb250cmFzdCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0VGV4dENvbnRyYXN0KG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cmFzdCkpOw0KLSAgICB9DQotDQotICAgIFVJTlQgR2V0VGV4dENvbnRyYXN0KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgVUlOVCBjb250cmFzdDsNCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0VGV4dENvbnRyYXN0KG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29udHJhc3QpKTsNCi0NCi0gICAgICAgIHJldHVybiBjb250cmFzdDsNCi0gICAgfQ0KLSNlbHNlDQotICAgIFN0YXR1cyBTZXRUZXh0R2FtbWFWYWx1ZShJTiBVSU5UIGdhbW1hVmFsdWUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFRleHRHYW1tYVZhbHVlKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYW1tYVZhbHVlKSk7DQotICAgIH0NCi0NCi0gICAgVUlOVCBHZXRUZXh0R2FtbWFWYWx1ZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIFVJTlQgZ2FtbWFWYWx1ZTsNCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0VGV4dEdhbW1hVmFsdWUobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnYW1tYVZhbHVlKSk7DQotDQotICAgICAgICByZXR1cm4gZ2FtbWFWYWx1ZTsNCi0gICAgfQ0KLQ0KLSNlbmRpZiAvLyBEQ1JfVVNFX05FV18xODg5MjINCi0NCi0NCi0gICAgSW50ZXJwb2xhdGlvbk1vZGUgR2V0SW50ZXJwb2xhdGlvbk1vZGUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBJbnRlcnBvbGF0aW9uTW9kZSBtb2RlID0gSW50ZXJwb2xhdGlvbk1vZGVJbnZhbGlkOw0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRJbnRlcnBvbGF0aW9uTW9kZShuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtb2RlKSk7DQotDQotICAgICAgICByZXR1cm4gbW9kZTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0SW50ZXJwb2xhdGlvbk1vZGUoSU4gSW50ZXJwb2xhdGlvbk1vZGUgaW50ZXJwb2xhdGlvbk1vZGUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEludGVycG9sYXRpb25Nb2RlKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbk1vZGUpKTsNCi0gICAgfQ0KLQ0KLSAgICBTbW9vdGhpbmdNb2RlIEdldFNtb290aGluZ01vZGUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUgPSBTbW9vdGhpbmdNb2RlSW52YWxpZDsNCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0U21vb3RoaW5nTW9kZShuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc21vb3RoaW5nTW9kZSkpOw0KLQ0KLSAgICAgICAgcmV0dXJuIHNtb290aGluZ01vZGU7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFNldFNtb290aGluZ01vZGUoSU4gU21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRTbW9vdGhpbmdNb2RlKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbW9vdGhpbmdNb2RlKSk7DQotICAgIH0NCi0NCi0gICAgUGl4ZWxPZmZzZXRNb2RlIEdldFBpeGVsT2Zmc2V0TW9kZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIFBpeGVsT2Zmc2V0TW9kZSBwaXhlbE9mZnNldE1vZGUgPSBQaXhlbE9mZnNldE1vZGVJbnZhbGlkOw0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQaXhlbE9mZnNldE1vZGUobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGl4ZWxPZmZzZXRNb2RlKSk7DQotDQotICAgICAgICByZXR1cm4gcGl4ZWxPZmZzZXRNb2RlOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTZXRQaXhlbE9mZnNldE1vZGUoSU4gUGl4ZWxPZmZzZXRNb2RlIHBpeGVsT2Zmc2V0TW9kZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGl4ZWxPZmZzZXRNb2RlKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsT2Zmc2V0TW9kZSkpOw0KLSAgICB9DQotDQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotICAgIC8vIE1hbmlwdWxhdGUgdGhlIGN1cnJlbnQgd29ybGQgdHJhbnNmb3JtDQotICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotICAgIFN0YXR1cyBTZXRUcmFuc2Zvcm0oSU4gY29uc3QgTWF0cml4KiBtYXRyaXgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFdvcmxkVHJhbnNmb3JtKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT5uYXRpdmVNYXRyaXgpKTsNCi0gICAgfQ0KLSAgICBTdGF0dXMgUmVzZXRUcmFuc2Zvcm0oKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBSZXNldFdvcmxkVHJhbnNmb3JtKG5hdGl2ZUdyYXBoaWNzKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIE11bHRpcGx5VHJhbnNmb3JtKElOIGNvbnN0IE1hdHJpeCogbWF0cml4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gTWF0cml4T3JkZXIgb3JkZXIgPSBNYXRyaXhPcmRlclByZXBlbmQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcE11bHRpcGx5V29ybGRUcmFuc2Zvcm0obmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+bmF0aXZlTWF0cml4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcikpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBUcmFuc2xhdGVUcmFuc2Zvcm0oSU4gUkVBTCBkeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIGR5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIE1hdHJpeE9yZGVyIG9yZGVyID0gTWF0cml4T3JkZXJQcmVwZW5kKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBUcmFuc2xhdGVXb3JsZFRyYW5zZm9ybShuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeCwgZHksIG9yZGVyKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFNjYWxlVHJhbnNmb3JtKElOIFJFQUwgc3gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gTWF0cml4T3JkZXIgb3JkZXIgPSBNYXRyaXhPcmRlclByZXBlbmQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNjYWxlV29ybGRUcmFuc2Zvcm0obmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN4LCBzeSwgb3JkZXIpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgUm90YXRlVHJhbnNmb3JtKElOIFJFQUwgYW5nbGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gTWF0cml4T3JkZXIgb3JkZXIgPSBNYXRyaXhPcmRlclByZXBlbmQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFJvdGF0ZVdvcmxkVHJhbnNmb3JtKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUsIG9yZGVyKSk7DQotICAgIH0NCi0NCi0gICAgLyoqDQotICAgICAqIFJldHVybiB0aGUgY3VycmVudCB3b3JsZCB0cmFuc2Zvcm0NCi0gICAgICovDQotDQotICAgIFN0YXR1cyBHZXRUcmFuc2Zvcm0oT1VUIE1hdHJpeCogbWF0cml4KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRXb3JsZFRyYW5zZm9ybShuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+bmF0aXZlTWF0cml4KSk7DQotICAgIH0NCi0NCi0gICAgLyoqDQotICAgICAqIE1hbmlwdWxhdGUgdGhlIGN1cnJlbnQgcGFnZSB0cmFuc2Zvcm0NCi0gICAgICovDQotDQotICAgIFN0YXR1cyBTZXRQYWdlVW5pdChJTiBVbml0IHVuaXQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBhZ2VVbml0KG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTZXRQYWdlU2NhbGUoSU4gUkVBTCBzY2FsZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGFnZVNjYWxlKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlKSk7DQotICAgIH0NCi0NCi0gICAgLyoqDQotICAgICAqIFJldHJpZXZlIHRoZSBjdXJyZW50IHBhZ2UgdHJhbnNmb3JtIGluZm9ybWF0aW9uDQotICAgICAqIG5vdGVzIEAgdGhlc2UgYXJlIGF0b21pYw0KLSAgICAgKi8NCi0gICAgVW5pdCBHZXRQYWdlVW5pdCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIFVuaXQgdW5pdDsNCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGFnZVVuaXQobmF0aXZlR3JhcGhpY3MsICZ1bml0KSk7DQotDQotICAgICAgICByZXR1cm4gdW5pdDsNCi0gICAgfQ0KLQ0KLSAgICBSRUFMIEdldFBhZ2VTY2FsZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIFJFQUwgc2NhbGU7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhZ2VTY2FsZShuYXRpdmVHcmFwaGljcywgJnNjYWxlKSk7DQotDQotICAgICAgICByZXR1cm4gc2NhbGU7DQotICAgIH0NCi0NCi0gICAgUkVBTCBHZXREcGlYKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgUkVBTCBkcGk7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldERwaVgobmF0aXZlR3JhcGhpY3MsICZkcGkpKTsNCi0NCi0gICAgICAgIHJldHVybiBkcGk7DQotICAgIH0NCi0NCi0gICAgUkVBTCBHZXREcGlZKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgUkVBTCBkcGk7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldERwaVkobmF0aXZlR3JhcGhpY3MsICZkcGkpKTsNCi0NCi0gICAgICAgIHJldHVybiBkcGk7DQotICAgIH0NCi0NCi0gICAgLyoqDQotICAgICAqIFRyYW5zZm9ybSBwb2ludHMgaW4gdGhlIGN1cnJlbnQgZ3JhcGhpY3MgY29udGV4dA0KLSAgICAgKi8NCi0gICAgLy8gZmxvYXQgdmVyc2lvbg0KLSAgICBTdGF0dXMgVHJhbnNmb3JtUG9pbnRzKElOIENvb3JkaW5hdGVTcGFjZSBkZXN0U3BhY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gQ29vcmRpbmF0ZVNwYWNlIHNyY1NwYWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIE9VVCBQb2ludEYqIHB0cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFRyYW5zZm9ybVBvaW50cyhuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0U3BhY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjU3BhY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7DQotICAgIH0NCi0NCi0gICAgLy8gaW50ZWdlciB2ZXJzaW9uDQotICAgIFN0YXR1cyBUcmFuc2Zvcm1Qb2ludHMoSU4gQ29vcmRpbmF0ZVNwYWNlIGRlc3RTcGFjZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBDb29yZGluYXRlU3BhY2Ugc3JjU3BhY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gT1VUIFBvaW50KiBwdHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KSBjb25zdA0KLSAgICB7DQotDQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBUcmFuc2Zvcm1Qb2ludHNJKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0U3BhY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1NwYWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7DQotICAgIH0NCi0NCi0gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0gICAgLy8gR2V0TmVhcmVzdENvbG9yIChmb3IgPD0gOGJwcCBzdXJmYWNlcykNCi0gICAgLy8gTm90ZTogYWxwaGEgaXMgaWdub3JlZA0KLSAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSAgICBTdGF0dXMgR2V0TmVhcmVzdENvbG9yKElOIE9VVCBDb2xvciogY29sb3IpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIGlmIChjb2xvciA9PSBOVUxMKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7DQotICAgICAgICB9DQotDQotICAgICAgICBBUkdCIGFyZ2IgPSBjb2xvci0+R2V0VmFsdWUoKTsNCi0NCi0gICAgICAgIFN0YXR1cyBzdGF0dXMgPSBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldE5lYXJlc3RDb2xvcihuYXRpdmVHcmFwaGljcywgJmFyZ2IpKTsNCi0NCi0gICAgICAgIGNvbG9yLT5TZXRWYWx1ZShhcmdiKTsNCi0NCi0gICAgICAgIHJldHVybiBzdGF0dXM7DQotICAgIH0NCi0NCi0gICAgLyoqDQotICAgICAqIFZlY3RvciBkcmF3aW5nIG1ldGhvZHMNCi0gICAgICoNCi0gICAgICogQG5vdGVzIERvIHdlIG5lZWQgYSBzZXQgb2YgbWV0aG9kcyB0aGF0IHRha2UNCi0gICAgICogIGludGVnZXIgY29vcmRpbmF0ZSBwYXJhbWV0ZXJzPw0KLSAgICAgKi8NCi0NCi0gICAgLy8gZmxvYXQgdmVyc2lvbg0KLSAgICBTdGF0dXMgRHJhd0xpbmUoSU4gY29uc3QgUGVuKiBwZW4sDQotICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHgxLA0KLSAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5MSwNCi0gICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeDIsDQotICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHkyKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3TGluZShuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLCB4MSwgeTEsIHgyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTIpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRHJhd0xpbmUoSU4gY29uc3QgUGVuKiBwZW4sDQotICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYmIHB0MSwNCi0gICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50RiYgcHQyKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRHJhd0xpbmUocGVuLCBwdDEuWCwgcHQxLlksIHB0Mi5YLCBwdDIuWSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIERyYXdMaW5lcyhJTiBjb25zdCBQZW4qIHBlbiwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYqIHBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdMaW5lcyhuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW4tPm5hdGl2ZVBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsIGNvdW50KSk7DQotICAgIH0NCi0NCi0gICAgLy8gaW50IHZlcnNpb24NCi0gICAgU3RhdHVzIERyYXdMaW5lKElOIGNvbnN0IFBlbiogcGVuLA0KLSAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHgxLA0KLSAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHkxLA0KLSAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHgyLA0KLSAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHkyKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3TGluZUkobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTIpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRHJhd0xpbmUoSU4gY29uc3QgUGVuKiBwZW4sDQotICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludCYgcHQxLA0KLSAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnQmIHB0MikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIERyYXdMaW5lKHBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICBwdDEuWCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBwdDEuWSwNCi0gICAgICAgICAgICAgICAgICAgICAgICBwdDIuWCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBwdDIuWSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIERyYXdMaW5lcyhJTiBjb25zdCBQZW4qIHBlbiwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludCogcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0xpbmVzSShuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBmbG9hdCB2ZXJzaW9uDQotICAgIFN0YXR1cyBEcmF3QXJjKElOIGNvbnN0IFBlbiogcGVuLA0KLSAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHgsDQotICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeSwNCi0gICAgICAgICAgICAgICAgICAgSU4gUkVBTCB3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgSU4gUkVBTCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3RhcnRBbmdsZSwNCi0gICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzd2VlcEFuZ2xlKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3QXJjKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW4tPm5hdGl2ZVBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRBbmdsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dlZXBBbmdsZSkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBEcmF3QXJjKElOIGNvbnN0IFBlbiogcGVuLA0KLSAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0RiYgcmVjdCwNCi0gICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzdGFydEFuZ2xlLA0KLSAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN3ZWVwQW5nbGUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBEcmF3QXJjKHBlbiwgcmVjdC5YLCByZWN0LlksIHJlY3QuV2lkdGgsIHJlY3QuSGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRBbmdsZSwgc3dlZXBBbmdsZSk7DQotICAgIH0NCi0NCi0gICAgLy8gaW50IHZlcnNpb24NCi0gICAgU3RhdHVzIERyYXdBcmMoSU4gY29uc3QgUGVuKiBwZW4sDQotICAgICAgICAgICAgICAgICAgIElOIElOVCB4LA0KLSAgICAgICAgICAgICAgICAgICBJTiBJTlQgeSwNCi0gICAgICAgICAgICAgICAgICAgSU4gSU5UIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICBJTiBJTlQgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN0YXJ0QW5nbGUsDQotICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3dlZXBBbmdsZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0FyY0kobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW4tPm5hdGl2ZVBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydEFuZ2xlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dlZXBBbmdsZSkpOw0KLSAgICB9DQotDQotDQotICAgIFN0YXR1cyBEcmF3QXJjKElOIGNvbnN0IFBlbiogcGVuLA0KLSAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0JiByZWN0LA0KLSAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN0YXJ0QW5nbGUsDQotICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3dlZXBBbmdsZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIERyYXdBcmMocGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5YLA0KLSAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5ZLA0KLSAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5XaWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgIHJlY3QuSGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRBbmdsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgIHN3ZWVwQW5nbGUpOw0KLSAgICB9DQotDQotICAgIC8vIGZsb2F0IHZlcnNpb24NCi0gICAgU3RhdHVzIERyYXdCZXppZXIoSU4gY29uc3QgUGVuKiBwZW4sDQotICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeDEsDQotICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeTEsDQotICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeDIsDQotICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeTIsDQotICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeDMsDQotICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeTMsDQotICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeDQsDQotICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeTQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdCZXppZXIobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLCB4MSwgeTEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyLCB5MiwgeDMsIHkzLCB4NCwgeTQpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRHJhd0JlemllcihJTiBjb25zdCBQZW4qIHBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnRGJiBwdDEsDQotICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50RiYgcHQyLA0KLSAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYmIHB0MywNCi0gICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnRGJiBwdDQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBEcmF3QmV6aWVyKHBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHB0MS5YLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHQxLlksDQotICAgICAgICAgICAgICAgICAgICAgICAgICBwdDIuWCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHB0Mi5ZLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHQzLlgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICBwdDMuWSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHB0NC5YLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHQ0LlkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBEcmF3QmV6aWVycyhJTiBjb25zdCBQZW4qIHBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50RiogcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3QmV6aWVycyhuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBpbnQgdmVyc2lvbg0KLSAgICBTdGF0dXMgRHJhd0JlemllcihJTiBjb25zdCBQZW4qIHBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHgxLA0KLSAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeTEsDQotICAgICAgICAgICAgICAgICAgICAgIElOIElOVCB4MiwNCi0gICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHkyLA0KLSAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeDMsDQotICAgICAgICAgICAgICAgICAgICAgIElOIElOVCB5MywNCi0gICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHg0LA0KLSAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeTQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdCZXppZXJJKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4NCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk0KSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIERyYXdCZXppZXIoSU4gY29uc3QgUGVuKiBwZW4sDQotICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50JiBwdDEsDQotICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50JiBwdDIsDQotICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50JiBwdDMsDQotICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50JiBwdDQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBEcmF3QmV6aWVyKHBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHB0MS5YLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHQxLlksDQotICAgICAgICAgICAgICAgICAgICAgICAgICBwdDIuWCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHB0Mi5ZLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHQzLlgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICBwdDMuWSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHB0NC5YLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHQ0LlkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBEcmF3QmV6aWVycyhJTiBjb25zdCBQZW4qIHBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50KiBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdCZXppZXJzSShuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW4tPm5hdGl2ZVBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBmbG9hdCB2ZXJzaW9uDQotICAgIFN0YXR1cyBEcmF3UmVjdGFuZ2xlKElOIGNvbnN0IFBlbiogcGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0RiYgcmVjdCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIERyYXdSZWN0YW5nbGUocGVuLCByZWN0LlgsIHJlY3QuWSwgcmVjdC5XaWR0aCwgcmVjdC5IZWlnaHQpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBEcmF3UmVjdGFuZ2xlKElOIGNvbnN0IFBlbiogcGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBoZWlnaHQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdSZWN0YW5nbGUobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLCB4LCB5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0KSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIERyYXdSZWN0YW5nbGVzKElOIGNvbnN0IFBlbiogcGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdEYqIHJlY3RzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3UmVjdGFuZ2xlcyhuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdHMsIGNvdW50KSk7DQotICAgIH0NCi0NCi0gICAgLy8gaW50ZWdlciB2ZXJzaW9uDQotICAgIFN0YXR1cyBEcmF3UmVjdGFuZ2xlKElOIGNvbnN0IFBlbiogcGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0JiByZWN0KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRHJhd1JlY3RhbmdsZShwZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LlgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LlksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LldpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5IZWlnaHQpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBEcmF3UmVjdGFuZ2xlKElOIGNvbnN0IFBlbiogcGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHksDQotICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCB3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGhlaWdodCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd1JlY3RhbmdsZUkobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW4tPm5hdGl2ZVBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRHJhd1JlY3RhbmdsZXMoSU4gY29uc3QgUGVuKiBwZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0KiByZWN0cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd1JlY3RhbmdsZXNJKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3RzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7DQotICAgIH0NCi0NCi0gICAgLy8gZmxvYXQgdmVyc2lvbg0KLSAgICBTdGF0dXMgRHJhd0VsbGlwc2UoSU4gY29uc3QgUGVuKiBwZW4sDQotICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0RiYgcmVjdCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIERyYXdFbGxpcHNlKHBlbiwgcmVjdC5YLCByZWN0LlksIHJlY3QuV2lkdGgsIHJlY3QuSGVpZ2h0KTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRHJhd0VsbGlwc2UoSU4gY29uc3QgUGVuKiBwZW4sDQotICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHgsDQotICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHksDQotICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBoZWlnaHQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdFbGxpcHNlKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KSk7DQotICAgIH0NCi0NCi0gICAgLy8gaW50ZWdlciB2ZXJzaW9uDQotICAgIFN0YXR1cyBEcmF3RWxsaXBzZShJTiBjb25zdCBQZW4qIHBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3QmIHJlY3QpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBEcmF3RWxsaXBzZShwZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5YLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuWSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LldpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuSGVpZ2h0KTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRHJhd0VsbGlwc2UoSU4gY29uc3QgUGVuKiBwZW4sDQotICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeCwNCi0gICAgICAgICAgICAgICAgICAgICAgIElOIElOVCB5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGhlaWdodCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0VsbGlwc2VJKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQpKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBmbG9hdGluZyBwb2ludCB2ZXJzaW9uDQotICAgIFN0YXR1cyBEcmF3UGllKElOIGNvbnN0IFBlbiogcGVuLA0KLSAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0RiYgcmVjdCwNCi0gICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzdGFydEFuZ2xlLA0KLSAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN3ZWVwQW5nbGUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBEcmF3UGllKHBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgIHJlY3QuWCwNCi0gICAgICAgICAgICAgICAgICAgICAgIHJlY3QuWSwNCi0gICAgICAgICAgICAgICAgICAgICAgIHJlY3QuV2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgICByZWN0LkhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsDQotICAgICAgICAgICAgICAgICAgICAgICBzd2VlcEFuZ2xlKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRHJhd1BpZShJTiBjb25zdCBQZW4qIHBlbiwNCi0gICAgICAgICAgICAgICAgICAgSU4gUkVBTCB4LA0KLSAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHksDQotICAgICAgICAgICAgICAgICAgIElOIFJFQUwgd2lkdGgsDQotICAgICAgICAgICAgICAgICAgIElOIFJFQUwgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN0YXJ0QW5nbGUsDQotICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3dlZXBBbmdsZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd1BpZShuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3ZWVwQW5nbGUpKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBpbnRlZ2VyIHBvaW50IHZlcnNpb24NCi0gICAgU3RhdHVzIERyYXdQaWUoSU4gY29uc3QgUGVuKiBwZW4sDQotICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3QmIHJlY3QsDQotICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3RhcnRBbmdsZSwNCi0gICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzd2VlcEFuZ2xlKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRHJhd1BpZShwZW4sDQotICAgICAgICAgICAgICAgICAgICAgICByZWN0LlgsDQotICAgICAgICAgICAgICAgICAgICAgICByZWN0LlksDQotICAgICAgICAgICAgICAgICAgICAgICByZWN0LldpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5IZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICBzdGFydEFuZ2xlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgc3dlZXBBbmdsZSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIERyYXdQaWUoSU4gY29uc3QgUGVuKiBwZW4sDQotICAgICAgICAgICAgICAgICAgIElOIElOVCB4LA0KLSAgICAgICAgICAgICAgICAgICBJTiBJTlQgeSwNCi0gICAgICAgICAgICAgICAgICAgSU4gSU5UIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICBJTiBJTlQgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN0YXJ0QW5nbGUsDQotICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3dlZXBBbmdsZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd1BpZUkobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW4tPm5hdGl2ZVBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydEFuZ2xlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dlZXBBbmdsZSkpOw0KLSAgICB9DQotDQotICAgIC8vIGZsb2F0IHZlcnNpb24NCi0gICAgU3RhdHVzIERyYXdQb2x5Z29uKElOIGNvbnN0IFBlbiogcGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnRGKiBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdQb2x5Z29uKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOw0KLSAgICB9DQotDQotICAgIC8vIGludGVnZXIgdmVyc2lvbg0KLSAgICBTdGF0dXMgRHJhd1BvbHlnb24oSU4gY29uc3QgUGVuKiBwZW4sDQotICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludCogcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3UG9seWdvbkkobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7DQotICAgIH0NCi0NCi0gICAgLy8gZmxvYXQgdmVyc2lvbg0KLSAgICBTdGF0dXMgRHJhd1BhdGgoSU4gY29uc3QgUGVuKiBwZW4sDQotICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBHcmFwaGljc1BhdGgqIHBhdGgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdQYXRoKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuID8gcGVuLT5uYXRpdmVQZW4gOiBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA/IHBhdGgtPm5hdGl2ZVBhdGggOiBOVUxMKSk7DQotICAgIH0NCi0NCi0gICAgLy8gZmxvYXQgdmVyc2lvbg0KLSAgICBTdGF0dXMgRHJhd0N1cnZlKElOIGNvbnN0IFBlbiogcGVuLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50RiogcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0N1cnZlKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLCBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRHJhd0N1cnZlKElOIGNvbnN0IFBlbiogcGVuLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50RiogcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHRlbnNpb24pDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdDdXJ2ZTIobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLCBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LCB0ZW5zaW9uKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIERyYXdDdXJ2ZShJTiBjb25zdCBQZW4qIHBlbiwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYqIHBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQsDQotICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIG9mZnNldCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgbnVtYmVyT2ZTZWdtZW50cywNCi0gICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHRlbnNpb24gPSAwLjVmKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3Q3VydmUzKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW4tPm5hdGl2ZVBlbiwgcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCwgb2Zmc2V0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlNlZ21lbnRzLCB0ZW5zaW9uKSk7DQotICAgIH0NCi0NCi0gICAgLy8gaW50ZWdlciB2ZXJzaW9uDQotICAgIFN0YXR1cyBEcmF3Q3VydmUoSU4gY29uc3QgUGVuKiBwZW4sDQotICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnQqIHBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdDdXJ2ZUkobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIERyYXdDdXJ2ZShJTiBjb25zdCBQZW4qIHBlbiwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludCogcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHRlbnNpb24pDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdDdXJ2ZTJJKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbnNpb24pKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRHJhd0N1cnZlKElOIGNvbnN0IFBlbiogcGVuLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50KiBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50LA0KLSAgICAgICAgICAgICAgICAgICAgIElOIElOVCBvZmZzZXQsDQotICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIG51bWJlck9mU2VnbWVudHMsDQotICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB0ZW5zaW9uID0gMC41ZikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0N1cnZlM0kobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW4tPm5hdGl2ZVBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZTZWdtZW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbnNpb24pKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBmbG9hdCB2ZXJzaW9uDQotICAgIFN0YXR1cyBEcmF3Q2xvc2VkQ3VydmUoSU4gY29uc3QgUGVuKiBwZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnRGKiBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3Q2xvc2VkQ3VydmUobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLCBjb3VudCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBEcmF3Q2xvc2VkQ3VydmUoSU4gY29uc3QgUGVuICpwZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnRGKiBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgdGVuc2lvbikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0Nsb3NlZEN1cnZlMihuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywgY291bnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbnNpb24pKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBpbnRlZ2VyIHZlcnNpb24NCi0gICAgU3RhdHVzIERyYXdDbG9zZWRDdXJ2ZShJTiBjb25zdCBQZW4qIHBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludCogcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0Nsb3NlZEN1cnZlSShuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRHJhd0Nsb3NlZEN1cnZlKElOIGNvbnN0IFBlbiAqcGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50KiBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgdGVuc2lvbikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0Nsb3NlZEN1cnZlMkkobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW4tPm5hdGl2ZVBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVuc2lvbikpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBDbGVhcihJTiBjb25zdCBDb2xvciAmY29sb3IpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdyYXBoaWNzQ2xlYXIoDQotICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgY29sb3IuR2V0VmFsdWUoKSkpOw0KLSAgICB9DQotDQotICAgIC8vIGZsb2F0IHZlcnNpb24NCi0gICAgU3RhdHVzIEZpbGxSZWN0YW5nbGUoSU4gY29uc3QgQnJ1c2gqIGJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0RiYgcmVjdCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEZpbGxSZWN0YW5nbGUoYnJ1c2gsIHJlY3QuWCwgcmVjdC5ZLCByZWN0LldpZHRoLCByZWN0LkhlaWdodCk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEZpbGxSZWN0YW5nbGUoSU4gY29uc3QgQnJ1c2gqIGJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBoZWlnaHQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEZpbGxSZWN0YW5nbGUobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJydXNoLT5uYXRpdmVCcnVzaCwgeCwgeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBGaWxsUmVjdGFuZ2xlcyhJTiBjb25zdCBCcnVzaCogYnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0RiogcmVjdHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEZpbGxSZWN0YW5nbGVzKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJ1c2gtPm5hdGl2ZUJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdHMsIGNvdW50KSk7DQotICAgIH0NCi0NCi0gICAgLy8gaW50ZWdlciB2ZXJzaW9uDQotICAgIFN0YXR1cyBGaWxsUmVjdGFuZ2xlKElOIGNvbnN0IEJydXNoKiBicnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdCYgcmVjdCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEZpbGxSZWN0YW5nbGUoYnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LlgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LlksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LldpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5IZWlnaHQpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBGaWxsUmVjdGFuZ2xlKElOIGNvbnN0IEJydXNoKiBicnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCB5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgd2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBoZWlnaHQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEZpbGxSZWN0YW5nbGVJKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJ1c2gtPm5hdGl2ZUJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBGaWxsUmVjdGFuZ2xlcyhJTiBjb25zdCBCcnVzaCogYnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0KiByZWN0cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRmlsbFJlY3RhbmdsZXNJKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJydXNoLT5uYXRpdmVCcnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOw0KLSAgICB9DQotDQotICAgIC8vIGZsb2F0IHZlcnNpb24NCi0gICAgU3RhdHVzIEZpbGxQb2x5Z29uKElOIGNvbnN0IEJydXNoKiBicnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50RiogcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRmlsbFBvbHlnb24oYnJ1c2gsIHBvaW50cywgY291bnQsIEZpbGxNb2RlQWx0ZXJuYXRlKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRmlsbFBvbHlnb24oSU4gY29uc3QgQnJ1c2gqIGJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnRGKiBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQsDQotICAgICAgICAgICAgICAgICAgICAgICBJTiBGaWxsTW9kZSBmaWxsTW9kZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRmlsbFBvbHlnb24obmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicnVzaC0+bmF0aXZlQnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsIGNvdW50LCBmaWxsTW9kZSkpOw0KLSAgICB9DQotDQotICAgIC8vIGludGVnZXIgdmVyc2lvbg0KLSAgICBTdGF0dXMgRmlsbFBvbHlnb24oSU4gY29uc3QgQnJ1c2gqIGJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnQqIHBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEZpbGxQb2x5Z29uKGJydXNoLCBwb2ludHMsIGNvdW50LCBGaWxsTW9kZUFsdGVybmF0ZSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEZpbGxQb2x5Z29uKElOIGNvbnN0IEJydXNoKiBicnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50KiBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQsDQotICAgICAgICAgICAgICAgICAgICAgICBJTiBGaWxsTW9kZSBmaWxsTW9kZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRmlsbFBvbHlnb25JKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJydXNoLT5uYXRpdmVCcnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsIGNvdW50LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxNb2RlKSk7DQotICAgIH0NCi0NCi0gICAgLy8gZmxvYXQgdmVyc2lvbg0KLSAgICBTdGF0dXMgRmlsbEVsbGlwc2UoSU4gY29uc3QgQnJ1c2gqIGJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdEYmIHJlY3QpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBGaWxsRWxsaXBzZShicnVzaCwgcmVjdC5YLCByZWN0LlksIHJlY3QuV2lkdGgsIHJlY3QuSGVpZ2h0KTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRmlsbEVsbGlwc2UoSU4gY29uc3QgQnJ1c2gqIGJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgaGVpZ2h0KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBGaWxsRWxsaXBzZShuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJydXNoLT5uYXRpdmVCcnVzaCwgeCwgeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQpKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBpbnRlZ2VyIHZlcnNpb24NCi0gICAgU3RhdHVzIEZpbGxFbGxpcHNlKElOIGNvbnN0IEJydXNoKiBicnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3QmIHJlY3QpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBGaWxsRWxsaXBzZShicnVzaCwgcmVjdC5YLCByZWN0LlksIHJlY3QuV2lkdGgsIHJlY3QuSGVpZ2h0KTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRmlsbEVsbGlwc2UoSU4gY29uc3QgQnJ1c2gqIGJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHgsDQotICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeSwNCi0gICAgICAgICAgICAgICAgICAgICAgIElOIElOVCB3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBoZWlnaHQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEZpbGxFbGxpcHNlSShuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicnVzaC0+bmF0aXZlQnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCkpOw0KLSAgICB9DQotDQotICAgIC8vIGZsb2F0IHZlcnNpb24NCi0gICAgU3RhdHVzIEZpbGxQaWUoSU4gY29uc3QgQnJ1c2gqIGJydXNoLA0KLSAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0RiYgcmVjdCwNCi0gICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzdGFydEFuZ2xlLA0KLSAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN3ZWVwQW5nbGUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBGaWxsUGllKGJydXNoLCByZWN0LlgsIHJlY3QuWSwgcmVjdC5XaWR0aCwgcmVjdC5IZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICBzdGFydEFuZ2xlLCBzd2VlcEFuZ2xlKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRmlsbFBpZShJTiBjb25zdCBCcnVzaCogYnJ1c2gsDQotICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeCwNCi0gICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5LA0KLSAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICBJTiBSRUFMIGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzdGFydEFuZ2xlLA0KLSAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN3ZWVwQW5nbGUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEZpbGxQaWUobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJydXNoLT5uYXRpdmVCcnVzaCwgeCwgeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgc3RhcnRBbmdsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dlZXBBbmdsZSkpOw0KLSAgICB9DQotDQotICAgIC8vIGludGVnZXIgdmVyc2lvbg0KLSAgICBTdGF0dXMgRmlsbFBpZShJTiBjb25zdCBCcnVzaCogYnJ1c2gsDQotICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3QmIHJlY3QsDQotICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3RhcnRBbmdsZSwNCi0gICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzd2VlcEFuZ2xlKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRmlsbFBpZShicnVzaCwgcmVjdC5YLCByZWN0LlksIHJlY3QuV2lkdGgsIHJlY3QuSGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRBbmdsZSwgc3dlZXBBbmdsZSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEZpbGxQaWUoSU4gY29uc3QgQnJ1c2gqIGJydXNoLA0KLSAgICAgICAgICAgICAgICAgICBJTiBJTlQgeCwNCi0gICAgICAgICAgICAgICAgICAgSU4gSU5UIHksDQotICAgICAgICAgICAgICAgICAgIElOIElOVCB3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgSU4gSU5UIGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzdGFydEFuZ2xlLA0KLSAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN3ZWVwQW5nbGUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEZpbGxQaWVJKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJ1c2gtPm5hdGl2ZUJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2VlcEFuZ2xlKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEZpbGxQYXRoKElOIGNvbnN0IEJydXNoKiBicnVzaCwNCi0gICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IEdyYXBoaWNzUGF0aCogcGF0aCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRmlsbFBhdGgobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicnVzaC0+bmF0aXZlQnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLT5uYXRpdmVQYXRoKSk7DQotICAgIH0NCi0NCi0gICAgLy8gZmxvYXQgdmVyc2lvbg0KLSAgICBTdGF0dXMgRmlsbENsb3NlZEN1cnZlKElOIGNvbnN0IEJydXNoKiBicnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYqIHBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEZpbGxDbG9zZWRDdXJ2ZShuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicnVzaC0+bmF0aXZlQnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLCBjb3VudCkpOw0KLQ0KLSAgICB9DQotDQotICAgIFN0YXR1cyBGaWxsQ2xvc2VkQ3VydmUoSU4gY29uc3QgQnJ1c2gqIGJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50RiogcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBGaWxsTW9kZSBmaWxsTW9kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHRlbnNpb24gPSAwLjVmKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBGaWxsQ2xvc2VkQ3VydmUyKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicnVzaC0+bmF0aXZlQnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywgY291bnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbnNpb24sIGZpbGxNb2RlKSk7DQotICAgIH0NCi0NCi0gICAgLy8gaW50ZWdlciB2ZXJzaW9uDQotICAgIFN0YXR1cyBGaWxsQ2xvc2VkQ3VydmUoSU4gY29uc3QgQnJ1c2gqIGJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50KiBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBGaWxsQ2xvc2VkQ3VydmVJKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicnVzaC0+bmF0aXZlQnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRmlsbENsb3NlZEN1cnZlKElOIGNvbnN0IEJydXNoKiBicnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludCogcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBGaWxsTW9kZSBmaWxsTW9kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHRlbnNpb24gPSAwLjVmKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBGaWxsQ2xvc2VkQ3VydmUySShuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJydXNoLT5uYXRpdmVCcnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywgY291bnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5zaW9uLCBmaWxsTW9kZSkpOw0KLSAgICB9DQotDQotICAgIC8vIGZsb2F0IHZlcnNpb24NCi0gICAgU3RhdHVzIEZpbGxSZWdpb24oSU4gY29uc3QgQnJ1c2gqIGJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWdpb24qIHJlZ2lvbikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRmlsbFJlZ2lvbihuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJ1c2gtPm5hdGl2ZUJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb24tPm5hdGl2ZVJlZ2lvbikpOw0KLSAgICB9DQotDQotICAgIC8vIERyYXdTdHJpbmcgYW5kIE1lYXN1cmVTdHJpbmcNCi0gICAgU3RhdHVzDQotICAgIERyYXdTdHJpbmcoDQotICAgICAgICBJTiBjb25zdCBXQ0hBUiAgICAgICAgKnN0cmluZywNCi0gICAgICAgIElOIElOVCAgICAgICAgICAgICAgICAgbGVuZ3RoLA0KLSAgICAgICAgSU4gY29uc3QgRm9udCAgICAgICAgICpmb250LA0KLSAgICAgICAgSU4gY29uc3QgUmVjdEYgICAgICAgICZsYXlvdXRSZWN0LA0KLSAgICAgICAgSU4gY29uc3QgU3RyaW5nRm9ybWF0ICpzdHJpbmdGb3JtYXQsDQotICAgICAgICBJTiBjb25zdCBCcnVzaCAgICAgICAgKmJydXNoDQotICAgICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd1N0cmluZygNCi0gICAgICAgICAgICBuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICBzdHJpbmcsDQotICAgICAgICAgICAgbGVuZ3RoLA0KLSAgICAgICAgICAgIGZvbnQgPyBmb250LT5uYXRpdmVGb250IDogTlVMTCwNCi0gICAgICAgICAgICAmbGF5b3V0UmVjdCwNCi0gICAgICAgICAgICBzdHJpbmdGb3JtYXQgPyBzdHJpbmdGb3JtYXQtPm5hdGl2ZUZvcm1hdCA6IE5VTEwsDQotICAgICAgICAgICAgYnJ1c2ggPyBicnVzaC0+bmF0aXZlQnJ1c2ggOiBOVUxMDQotICAgICAgICApKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMNCi0gICAgRHJhd1N0cmluZygNCi0gICAgICAgIGNvbnN0IFdDSEFSICAgICAgICAqc3RyaW5nLA0KLSAgICAgICAgSU5UICAgICAgICAgICAgICAgICBsZW5ndGgsDQotICAgICAgICBjb25zdCBGb250ICAgICAgICAgKmZvbnQsDQotICAgICAgICBjb25zdCBQb2ludEYgICAgICAgJm9yaWdpbiwNCi0gICAgICAgIGNvbnN0IEJydXNoICAgICAgICAqYnJ1c2gNCi0gICAgKQ0KLSAgICB7DQotICAgICAgICBSZWN0RiByZWN0KG9yaWdpbi5YLCBvcmlnaW4uWSwgMC4wZiwgMC4wZik7DQotDQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3U3RyaW5nKA0KLSAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgIHN0cmluZywNCi0gICAgICAgICAgICBsZW5ndGgsDQotICAgICAgICAgICAgZm9udCA/IGZvbnQtPm5hdGl2ZUZvbnQgOiBOVUxMLA0KLSAgICAgICAgICAgICZyZWN0LA0KLSAgICAgICAgICAgIE5VTEwsDQotICAgICAgICAgICAgYnJ1c2ggPyBicnVzaC0+bmF0aXZlQnJ1c2ggOiBOVUxMDQotICAgICAgICApKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMNCi0gICAgRHJhd1N0cmluZygNCi0gICAgICAgIGNvbnN0IFdDSEFSICAgICAgICAqc3RyaW5nLA0KLSAgICAgICAgSU5UICAgICAgICAgICAgICAgICBsZW5ndGgsDQotICAgICAgICBjb25zdCBGb250ICAgICAgICAgKmZvbnQsDQotICAgICAgICBjb25zdCBQb2ludEYgICAgICAgJm9yaWdpbiwNCi0gICAgICAgIGNvbnN0IFN0cmluZ0Zvcm1hdCAqc3RyaW5nRm9ybWF0LA0KLSAgICAgICAgY29uc3QgQnJ1c2ggICAgICAgICpicnVzaA0KLSAgICApDQotICAgIHsNCi0gICAgICAgIFJlY3RGIHJlY3Qob3JpZ2luLlgsIG9yaWdpbi5ZLCAwLjBmLCAwLjBmKTsNCi0NCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdTdHJpbmcoDQotICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgc3RyaW5nLA0KLSAgICAgICAgICAgIGxlbmd0aCwNCi0gICAgICAgICAgICBmb250ID8gZm9udC0+bmF0aXZlRm9udCA6IE5VTEwsDQotICAgICAgICAgICAgJnJlY3QsDQotICAgICAgICAgICAgc3RyaW5nRm9ybWF0ID8gc3RyaW5nRm9ybWF0LT5uYXRpdmVGb3JtYXQgOiBOVUxMLA0KLSAgICAgICAgICAgIGJydXNoID8gYnJ1c2gtPm5hdGl2ZUJydXNoIDogTlVMTA0KLSAgICAgICAgKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzDQotICAgIE1lYXN1cmVTdHJpbmcoDQotICAgICAgICBJTiBjb25zdCBXQ0hBUiAgICAgICAgKnN0cmluZywNCi0gICAgICAgIElOIElOVCAgICAgICAgICAgICAgICAgbGVuZ3RoLA0KLSAgICAgICAgSU4gY29uc3QgRm9udCAgICAgICAgICpmb250LA0KLSAgICAgICAgSU4gY29uc3QgUmVjdEYgICAgICAgICZsYXlvdXRSZWN0LA0KLSAgICAgICAgSU4gY29uc3QgU3RyaW5nRm9ybWF0ICpzdHJpbmdGb3JtYXQsDQotICAgICAgICBPVVQgUmVjdEYgICAgICAgICAgICAgKmJvdW5kaW5nQm94LA0KLSAgICAgICAgT1VUIElOVCAgICAgICAgICAgICAgICpjb2RlcG9pbnRzRml0dGVkID0gMCwNCi0gICAgICAgIE9VVCBJTlQgICAgICAgICAgICAgICAqbGluZXNGaWxsZWQgICAgICA9IDANCi0gICAgKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBNZWFzdXJlU3RyaW5nKA0KLSAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgIHN0cmluZywNCi0gICAgICAgICAgICBsZW5ndGgsDQotICAgICAgICAgICAgZm9udCA/IGZvbnQtPm5hdGl2ZUZvbnQgOiBOVUxMLA0KLSAgICAgICAgICAgICZsYXlvdXRSZWN0LA0KLSAgICAgICAgICAgIHN0cmluZ0Zvcm1hdCA/IHN0cmluZ0Zvcm1hdC0+bmF0aXZlRm9ybWF0IDogTlVMTCwNCi0gICAgICAgICAgICBib3VuZGluZ0JveCwNCi0gICAgICAgICAgICBjb2RlcG9pbnRzRml0dGVkLA0KLSAgICAgICAgICAgIGxpbmVzRmlsbGVkDQotICAgICAgICApKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMNCi0gICAgTWVhc3VyZVN0cmluZygNCi0gICAgICAgIElOIGNvbnN0IFdDSEFSICAgICAgICAqc3RyaW5nLA0KLSAgICAgICAgSU4gSU5UICAgICAgICAgICAgICAgICBsZW5ndGgsDQotICAgICAgICBJTiBjb25zdCBGb250ICAgICAgICAgKmZvbnQsDQotICAgICAgICBJTiBjb25zdCBTaXplRiAgICAgICAgJmxheW91dFJlY3RTaXplLA0KLSAgICAgICAgSU4gY29uc3QgU3RyaW5nRm9ybWF0ICpzdHJpbmdGb3JtYXQsDQotICAgICAgICBPVVQgU2l6ZUYgICAgICAgICAgICAgKnNpemUsDQotICAgICAgICBPVVQgSU5UICAgICAgICAgICAgICAgKmNvZGVwb2ludHNGaXR0ZWQgPSAwLA0KLSAgICAgICAgT1VUIElOVCAgICAgICAgICAgICAgICpsaW5lc0ZpbGxlZCAgICAgID0gMA0KLSAgICApIGNvbnN0DQotICAgIHsNCi0gICAgICAgIFJlY3RGICAgbGF5b3V0UmVjdCgwLCAwLCBsYXlvdXRSZWN0U2l6ZS5XaWR0aCwgbGF5b3V0UmVjdFNpemUuSGVpZ2h0KTsNCi0gICAgICAgIFJlY3RGICAgYm91bmRpbmdCb3g7DQotICAgICAgICBTdGF0dXMgIHN0YXR1czsNCi0NCi0gICAgICAgIGlmIChzaXplID09IE5VTEwpDQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhJbnZhbGlkUGFyYW1ldGVyKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHN0YXR1cyA9IFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwTWVhc3VyZVN0cmluZygNCi0gICAgICAgICAgICBuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICBzdHJpbmcsDQotICAgICAgICAgICAgbGVuZ3RoLA0KLSAgICAgICAgICAgIGZvbnQgPyBmb250LT5uYXRpdmVGb250IDogTlVMTCwNCi0gICAgICAgICAgICAmbGF5b3V0UmVjdCwNCi0gICAgICAgICAgICBzdHJpbmdGb3JtYXQgPyBzdHJpbmdGb3JtYXQtPm5hdGl2ZUZvcm1hdCA6IE5VTEwsDQotICAgICAgICAgICAgc2l6ZSA/ICZib3VuZGluZ0JveCA6IE5VTEwsDQotICAgICAgICAgICAgY29kZXBvaW50c0ZpdHRlZCwNCi0gICAgICAgICAgICBsaW5lc0ZpbGxlZA0KLSAgICAgICAgKSk7DQotDQotICAgICAgICBpZiAoc2l6ZSAmJiBzdGF0dXMgPT0gT2spDQotICAgICAgICB7DQotICAgICAgICAgICAgc2l6ZS0+V2lkdGggID0gYm91bmRpbmdCb3guV2lkdGg7DQotICAgICAgICAgICAgc2l6ZS0+SGVpZ2h0ID0gYm91bmRpbmdCb3guSGVpZ2h0Ow0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcmV0dXJuIHN0YXR1czsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMNCi0gICAgTWVhc3VyZVN0cmluZygNCi0gICAgICAgIElOIGNvbnN0IFdDSEFSICAgICAgICAqc3RyaW5nLA0KLSAgICAgICAgSU4gSU5UICAgICAgICAgICAgICAgICBsZW5ndGgsDQotICAgICAgICBJTiBjb25zdCBGb250ICAgICAgICAgKmZvbnQsDQotICAgICAgICBJTiBjb25zdCBQb2ludEYgICAgICAgJm9yaWdpbiwNCi0gICAgICAgIElOIGNvbnN0IFN0cmluZ0Zvcm1hdCAqc3RyaW5nRm9ybWF0LA0KLSAgICAgICAgT1VUIFJlY3RGICAgICAgICAgICAgICpib3VuZGluZ0JveA0KLSAgICApIGNvbnN0DQotICAgIHsNCi0gICAgICAgIFJlY3RGIHJlY3Qob3JpZ2luLlgsIG9yaWdpbi5ZLCAwLjBmLCAwLjBmKTsNCi0NCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcE1lYXN1cmVTdHJpbmcoDQotICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgc3RyaW5nLA0KLSAgICAgICAgICAgIGxlbmd0aCwNCi0gICAgICAgICAgICBmb250ID8gZm9udC0+bmF0aXZlRm9udCA6IE5VTEwsDQotICAgICAgICAgICAgJnJlY3QsDQotICAgICAgICAgICAgc3RyaW5nRm9ybWF0ID8gc3RyaW5nRm9ybWF0LT5uYXRpdmVGb3JtYXQgOiBOVUxMLA0KLSAgICAgICAgICAgIGJvdW5kaW5nQm94LA0KLSAgICAgICAgICAgIE5VTEwsDQotICAgICAgICAgICAgTlVMTA0KLSAgICAgICAgKSk7DQotICAgIH0NCi0NCi0NCi0gICAgU3RhdHVzDQotICAgIE1lYXN1cmVTdHJpbmcoDQotICAgICAgICBJTiBjb25zdCBXQ0hBUiAgKnN0cmluZywNCi0gICAgICAgIElOIElOVCAgICAgICAgICAgbGVuZ3RoLA0KLSAgICAgICAgSU4gY29uc3QgRm9udCAgICpmb250LA0KLSAgICAgICAgSU4gY29uc3QgUmVjdEYgICZsYXlvdXRSZWN0LA0KLSAgICAgICAgT1VUIFJlY3RGICAgICAgICpib3VuZGluZ0JveA0KLSAgICApIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcE1lYXN1cmVTdHJpbmcoDQotICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgc3RyaW5nLA0KLSAgICAgICAgICAgIGxlbmd0aCwNCi0gICAgICAgICAgICBmb250ID8gZm9udC0+bmF0aXZlRm9udCA6IE5VTEwsDQotICAgICAgICAgICAgJmxheW91dFJlY3QsDQotICAgICAgICAgICAgTlVMTCwNCi0gICAgICAgICAgICBib3VuZGluZ0JveCwNCi0gICAgICAgICAgICBOVUxMLA0KLSAgICAgICAgICAgIE5VTEwNCi0gICAgICAgICkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cw0KLSAgICBNZWFzdXJlU3RyaW5nKA0KLSAgICAgICAgSU4gY29uc3QgV0NIQVIgICpzdHJpbmcsDQotICAgICAgICBJTiBJTlQgICAgICAgICAgIGxlbmd0aCwNCi0gICAgICAgIElOIGNvbnN0IEZvbnQgICAqZm9udCwNCi0gICAgICAgIElOIGNvbnN0IFBvaW50RiAmb3JpZ2luLA0KLSAgICAgICAgT1VUIFJlY3RGICAgICAgICpib3VuZGluZ0JveA0KLSAgICApIGNvbnN0DQotICAgIHsNCi0gICAgICAgIFJlY3RGIHJlY3Qob3JpZ2luLlgsIG9yaWdpbi5ZLCAwLjBmLCAwLjBmKTsNCi0NCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcE1lYXN1cmVTdHJpbmcoDQotICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgc3RyaW5nLA0KLSAgICAgICAgICAgIGxlbmd0aCwNCi0gICAgICAgICAgICBmb250ID8gZm9udC0+bmF0aXZlRm9udCA6IE5VTEwsDQotICAgICAgICAgICAgJnJlY3QsDQotICAgICAgICAgICAgTlVMTCwNCi0gICAgICAgICAgICBib3VuZGluZ0JveCwNCi0gICAgICAgICAgICBOVUxMLA0KLSAgICAgICAgICAgIE5VTEwNCi0gICAgICAgICkpOw0KLSAgICB9DQotDQotDQotI2lmZGVmIERDUl9VU0VfTkVXXzE3NDM0MA0KLSAgICBTdGF0dXMNCi0gICAgTWVhc3VyZUNoYXJhY3RlclJhbmdlcygNCi0gICAgICAgIElOIGNvbnN0IFdDSEFSICAgICAgICAqc3RyaW5nLA0KLSAgICAgICAgSU4gSU5UICAgICAgICAgICAgICAgICBsZW5ndGgsDQotICAgICAgICBJTiBjb25zdCBGb250ICAgICAgICAgKmZvbnQsDQotICAgICAgICBJTiBjb25zdCBSZWN0RiAgICAgICAgJmxheW91dFJlY3QsDQotICAgICAgICBJTiBjb25zdCBTdHJpbmdGb3JtYXQgKnN0cmluZ0Zvcm1hdCwNCi0gICAgICAgIElOIElOVCAgICAgICAgICAgICAgICAgcmVnaW9uQ291bnQsDQotICAgICAgICBPVVQgUmVnaW9uICAgICAgICAgICAgKnJlZ2lvbnMNCi0gICAgKSBjb25zdA0KLSAgICB7DQotICAgICAgICBpZiAoIXJlZ2lvbnMgfHwgcmVnaW9uQ291bnQgPD0gMCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICByZXR1cm4gSW52YWxpZFBhcmFtZXRlcjsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIEdwUmVnaW9uICoqbmF0aXZlUmVnaW9ucyA9IG5ldyBHcFJlZ2lvbiogW3JlZ2lvbkNvdW50XTsNCi0NCi0gICAgICAgIGlmICghbmF0aXZlUmVnaW9ucykNCi0gICAgICAgIHsNCi0gICAgICAgICAgICByZXR1cm4gT3V0T2ZNZW1vcnk7DQotICAgICAgICB9DQotDQotICAgICAgICBmb3IgKElOVCBpID0gMDsgaSA8IHJlZ2lvbkNvdW50OyBpKyspDQotICAgICAgICB7DQotICAgICAgICAgICAgbmF0aXZlUmVnaW9uc1tpXSA9IHJlZ2lvbnNbaV0ubmF0aXZlUmVnaW9uOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgU3RhdHVzIHN0YXR1cyA9IFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwTWVhc3VyZUNoYXJhY3RlclJhbmdlcygNCi0gICAgICAgICAgICBuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICBzdHJpbmcsDQotICAgICAgICAgICAgbGVuZ3RoLA0KLSAgICAgICAgICAgIGZvbnQgPyBmb250LT5uYXRpdmVGb250IDogTlVMTCwNCi0gICAgICAgICAgICBsYXlvdXRSZWN0LA0KLSAgICAgICAgICAgIHN0cmluZ0Zvcm1hdCA/IHN0cmluZ0Zvcm1hdC0+bmF0aXZlRm9ybWF0IDogTlVMTCwNCi0gICAgICAgICAgICByZWdpb25Db3VudCwNCi0gICAgICAgICAgICBuYXRpdmVSZWdpb25zDQotICAgICAgICApKTsNCi0NCi0gICAgICAgIGRlbGV0ZSBbXSBuYXRpdmVSZWdpb25zOw0KLQ0KLSAgICAgICAgcmV0dXJuIHN0YXR1czsNCi0gICAgfQ0KLSNlbmRpZg0KLQ0KLQ0KLSNpZm5kZWYgRENSX1VTRV9ORVdfMTc0MzQwDQotICAgIFN0YXR1cw0KLSAgICBNZWFzdXJlU3RyaW5nUmVnaW9uKA0KLSAgICAgICAgSU4gY29uc3QgV0NIQVIgICAgICAgICpzdHJpbmcsDQotICAgICAgICBJTiBJTlQgICAgICAgICAgICAgICAgIGxlbmd0aCwNCi0gICAgICAgIElOIGNvbnN0IEZvbnQgICAgICAgICAqZm9udCwNCi0gICAgICAgIElOIGNvbnN0IFJlY3RGICAgICAgICAmbGF5b3V0UmVjdCwNCi0gICAgICAgIElOIGNvbnN0IFN0cmluZ0Zvcm1hdCAqc3RyaW5nRm9ybWF0LA0KLSAgICAgICAgSU4gSU5UICAgICAgICAgICAgICAgICBmaXJzdENoYXJhY3RlckluZGV4LA0KLSAgICAgICAgSU4gSU5UICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJDb3VudCwNCi0gICAgICAgIE9VVCBSZWdpb24gICAgICAgICAgICAqcmVnaW9uDQotICAgICkgY29uc3QNCi0gICAgew0KLSAgICAgICAgaWYgKHJlZ2lvbiA9PSBOVUxMKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7DQotICAgICAgICB9DQotDQotICAgICAgICByZXR1cm4gKFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwTWVhc3VyZVN0cmluZ1JlZ2lvbigNCi0gICAgICAgICAgICBuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICBzdHJpbmcsDQotICAgICAgICAgICAgbGVuZ3RoLA0KLSAgICAgICAgICAgIGZvbnQgPyBmb250LT5uYXRpdmVGb250IDogTlVMTCwNCi0gICAgICAgICAgICBsYXlvdXRSZWN0LA0KLSAgICAgICAgICAgIHN0cmluZ0Zvcm1hdCA/IHN0cmluZ0Zvcm1hdC0+bmF0aXZlRm9ybWF0IDogTlVMTCwNCi0gICAgICAgICAgICBmaXJzdENoYXJhY3RlckluZGV4LA0KLSAgICAgICAgICAgIGNoYXJhY3RlckNvdW50LA0KLSAgICAgICAgICAgIHJlZ2lvbi0+bmF0aXZlUmVnaW9uKSkpOw0KLSAgICB9DQotI2VuZGlmDQotDQotICAgIFN0YXR1cyBEcmF3RHJpdmVyU3RyaW5nKA0KLSAgICAgICAgSU4gY29uc3QgVUlOVDE2ICAqdGV4dCwNCi0gICAgICAgIElOIElOVCAgICAgICAgICAgIGxlbmd0aCwNCi0gICAgICAgIElOIGNvbnN0IEZvbnQgICAgKmZvbnQsDQotICAgICAgICBJTiBjb25zdCBCcnVzaCAgICpicnVzaCwNCi0gICAgICAgIElOIGNvbnN0IFBvaW50RiAgKnBvc2l0aW9ucywNCi0gICAgICAgIElOIElOVCAgICAgICAgICAgIGZsYWdzLA0KLSAgICAgICAgSU4gY29uc3QgTWF0cml4ICAgICAgICAqbWF0cml4DQotICAgICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0RyaXZlclN0cmluZygNCi0gICAgICAgICAgICBuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICB0ZXh0LA0KLSAgICAgICAgICAgIGxlbmd0aCwNCi0gICAgICAgICAgICBmb250ID8gZm9udC0+bmF0aXZlRm9udCA6IE5VTEwsDQotICAgICAgICAgICAgYnJ1c2ggPyBicnVzaC0+bmF0aXZlQnJ1c2ggOiBOVUxMLA0KLSAgICAgICAgICAgIHBvc2l0aW9ucywNCi0gICAgICAgICAgICBmbGFncywNCi0gICAgICAgICAgICBtYXRyaXggPyBtYXRyaXgtPm5hdGl2ZU1hdHJpeCA6IE5VTEwNCi0gICAgICAgICkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBNZWFzdXJlRHJpdmVyU3RyaW5nKA0KLSAgICAgICAgSU4gY29uc3QgVUlOVDE2ICAqdGV4dCwNCi0gICAgICAgIElOIElOVCAgICAgICAgICAgIGxlbmd0aCwNCi0gICAgICAgIElOIGNvbnN0IEZvbnQgICAgKmZvbnQsDQotICAgICAgICBJTiBjb25zdCBQb2ludEYgICpwb3NpdGlvbnMsDQotICAgICAgICBJTiBJTlQgICAgICAgICAgICBmbGFncywNCi0gICAgICAgIElOIGNvbnN0IE1hdHJpeCAgICAgICAgKm1hdHJpeCwNCi0gICAgICAgIE9VVCBSZWN0RiAgICAgICAgKmJvdW5kaW5nQm94DQotICAgICkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwTWVhc3VyZURyaXZlclN0cmluZygNCi0gICAgICAgICAgICBuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICB0ZXh0LA0KLSAgICAgICAgICAgIGxlbmd0aCwNCi0gICAgICAgICAgICBmb250ID8gZm9udC0+bmF0aXZlRm9udCA6IE5VTEwsDQotICAgICAgICAgICAgcG9zaXRpb25zLA0KLSAgICAgICAgICAgIGZsYWdzLA0KLSAgICAgICAgICAgIG1hdHJpeCA/IG1hdHJpeC0+bmF0aXZlTWF0cml4IDogTlVMTCwNCi0gICAgICAgICAgICBib3VuZGluZ0JveA0KLSAgICAgICAgKSk7DQotICAgIH0NCi0NCi0jaWZuZGVmIERDUl9VU0VfTkVXXzE2ODc3Mg0KLSAgICBTdGF0dXMgRHJpdmVyU3RyaW5nUG9pbnRUb0NvZGVwb2ludCgNCi0gICAgICAgIElOIGNvbnN0IFVJTlQxNiAgKnRleHQsDQotICAgICAgICBJTiBJTlQgICAgICAgICAgICBsZW5ndGgsDQotICAgICAgICBJTiBjb25zdCBGb250ICAgICpmb250LA0KLSAgICAgICAgSU4gY29uc3QgUG9pbnRGICAqcG9zaXRpb25zLA0KLSAgICAgICAgSU4gSU5UICAgICAgICAgICAgZmxhZ3MsDQotICAgICAgICBJTiBjb25zdCBNYXRyaXggICptYXRyaXgsDQotICAgICAgICBJTiBjb25zdCBQb2ludEYgICZoaXQsDQotICAgICAgICBPVVQgSU5UICAgICAgICAgICppbmRleCwNCi0gICAgICAgIE9VVCBCT09MICAgICAgICAgKnJpZ2h0RWRnZSwNCi0gICAgICAgIE9VVCBSRUFMICAgICAgICAgKmRpc3RhbmNlDQotICAgICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJpdmVyU3RyaW5nUG9pbnRUb0NvZGVwb2ludCgNCi0gICAgICAgICAgICBuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICB0ZXh0LA0KLSAgICAgICAgICAgIGxlbmd0aCwNCi0gICAgICAgICAgICBmb250ID8gZm9udC0+bmF0aXZlRm9udCA6IE5VTEwsDQotICAgICAgICAgICAgcG9zaXRpb25zLA0KLSAgICAgICAgICAgIGZsYWdzLA0KLSAgICAgICAgICAgIG1hdHJpeCA/IG1hdHJpeC0+bmF0aXZlTWF0cml4IDogTlVMTCwNCi0gICAgICAgICAgICAmaGl0LA0KLSAgICAgICAgICAgIGluZGV4LA0KLSAgICAgICAgICAgIHJpZ2h0RWRnZSwNCi0gICAgICAgICAgICBkaXN0YW5jZQ0KLSAgICAgICAgKSk7DQotICAgIH0NCi0jZW5kaWYNCi0NCi0gICAgLy8gRHJhdyBhIGNhY2hlZCBiaXRtYXAgb24gdGhpcyBncmFwaGljcyBkZXN0aW5hdGlvbiBvZmZzZXQgYnkNCi0gICAgLy8geCwgeS4gTm90ZSB0aGlzIHdpbGwgZmFpbCB3aXRoIFdyb25nU3RhdGUgaWYgdGhlIENhY2hlZEJpdG1hcA0KLSAgICAvLyBuYXRpdmUgZm9ybWF0IGRpZmZlcnMgZnJvbSB0aGlzIEdyYXBoaWNzLg0KLQ0KLSAgICBTdGF0dXMgRHJhd0NhY2hlZEJpdG1hcChJTiBDYWNoZWRCaXRtYXAgKmNiLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHkpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdDYWNoZWRCaXRtYXAoDQotICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgY2ItPm5hdGl2ZUNhY2hlZEJpdG1hcCwNCi0gICAgICAgICAgICB4LCB5DQotICAgICAgICApKTsNCi0gICAgfQ0KLQ0KLSAgICAvKioNCi0gICAgICogRHJhdyBpbWFnZXMgKGJvdGggYml0bWFwIGFuZCB2ZWN0b3IpDQotICAgICAqLw0KLSAgICAvLyBmbG9hdCB2ZXJzaW9uDQotICAgIFN0YXR1cyBEcmF3SW1hZ2UoSU4gSW1hZ2UqIGltYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50RiYgcG9pbnQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBEcmF3SW1hZ2UoaW1hZ2UsIHBvaW50LlgsIHBvaW50LlkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBEcmF3SW1hZ2UoSU4gSW1hZ2UqIGltYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHkpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdJbWFnZShuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRHJhd0ltYWdlKElOIEltYWdlKiBpbWFnZSwgDQotICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdEYmIHJlY3QpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBEcmF3SW1hZ2UoaW1hZ2UsIHJlY3QuWCwgcmVjdC5ZLCByZWN0LldpZHRoLCByZWN0LkhlaWdodCk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIERyYXdJbWFnZShJTiBJbWFnZSogaW1hZ2UsDQotICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB4LA0KLSAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeSwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgaGVpZ2h0KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3SW1hZ2VSZWN0KG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQpKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBpbnRlZ2VyIHZlcnNpb24NCi0gICAgU3RhdHVzIERyYXdJbWFnZShJTiBJbWFnZSogaW1hZ2UsDQotICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnQmIHBvaW50KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRHJhd0ltYWdlKGltYWdlLCBwb2ludC5YLCBwb2ludC5ZKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRHJhd0ltYWdlKElOIEltYWdlKiBpbWFnZSwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0ltYWdlSShuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5KSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIERyYXdJbWFnZShJTiBJbWFnZSogaW1hZ2UsDQotICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdCYgcmVjdCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIERyYXdJbWFnZShpbWFnZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5YLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LlksDQotICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuV2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuSGVpZ2h0KTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRHJhd0ltYWdlKElOIEltYWdlKiBpbWFnZSwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeSwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgd2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGhlaWdodCkgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0ltYWdlUmVjdEkobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCkpOw0KLSAgICB9DQotDQotICAgIC8qKg0KLSAgICAgKiBBZmZpbmUgb3IgcGVyc3BlY3RpdmUgYmx0DQotICAgICAqICBkZXN0UG9pbnRzLmxlbmd0aCA9IDM6IHJlY3QgPT4gcGFyYWxsZWxvZ3JhbQ0KLSAgICAgKiAgICAgIGRlc3RQb2ludHNbMF0gPD0+IHRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgc291cmNlIHJlY3RhbmdsZQ0KLSAgICAgKiAgICAgIGRlc3RQb2ludHNbMV0gPD0+IHRvcC1yaWdodCBjb3JuZXINCi0gICAgICogICAgICBkZXN0UG9pbnRzWzJdIDw9PiBib3R0b20tbGVmdCBjb3JuZXINCi0gICAgICogIGRlc3RQb2ludHMubGVuZ3RoID0gNDogcmVjdCA9PiBxdWFkDQotICAgICAqICAgICAgZGVzdFBvaW50c1szXSA8PT4gYm90dG9tLXJpZ2h0IGNvcm5lcg0KLSAgICAgKg0KLSAgICAgKiAgQG5vdGVzIFBlcnNwZWN0aXZlIGJsdCBvbmx5IHdvcmtzIGZvciBiaXRtYXAgaW1hZ2VzLg0KLSAgICAgKi8NCi0gICAgU3RhdHVzIERyYXdJbWFnZShJTiBJbWFnZSogaW1hZ2UsDQotICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnRGKiBkZXN0UG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkNCi0gICAgew0KLSAgICAgICAgaWYgKGNvdW50ICE9IDMgJiYgY291bnQgIT0gNCkNCi0gICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKEludmFsaWRQYXJhbWV0ZXIpOw0KLQ0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0ltYWdlUG9pbnRzKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlID8gaW1hZ2UtPm5hdGl2ZUltYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQb2ludHMsIGNvdW50KSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIERyYXdJbWFnZShJTiBJbWFnZSogaW1hZ2UsDQotICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnQqIGRlc3RQb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQ0KLSAgICB7DQotICAgICAgICBpZiAoY291bnQgIT0gMyAmJiBjb3VudCAhPSA0KQ0KLSAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7DQotDQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3SW1hZ2VQb2ludHNJKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7DQotICAgIH0NCi0NCi0gICAgLyoqDQotICAgICAqIFdlIG5lZWQgYW5vdGhlciBzZXQgb2YgbWV0aG9kcyBzaW1pbGFyIHRvIHRoZSBvbmVzIGFib3ZlDQotICAgICAqIHRoYXQgdGFrZSBhbiBhZGRpdGlvbmFsIFJlY3QgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlDQotICAgICAqIHBvcnRpb24gb2YgdGhlIHNvdXJjZSBpbWFnZSB0byBiZSBkcmF3bi4NCi0gICAgICovDQotICAgIC8vIGZsb2F0IHZlcnNpb24NCi0gICAgU3RhdHVzIERyYXdJbWFnZShJTiBJbWFnZSogaW1hZ2UsDQotICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB4LA0KLSAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeSwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHNyY3gsDQotICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzcmN5LA0KLSAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3Jjd2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzcmNoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgSU4gVW5pdCBzcmNVbml0KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3SW1hZ2VQb2ludFJlY3QobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmN4LCBzcmN5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3dpZHRoLCBzcmNoZWlnaHQsIHNyY1VuaXQpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRHJhd0ltYWdlKElOIEltYWdlKiBpbWFnZSwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0RiYgZGVzdFJlY3QsDQotICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzcmN4LA0KLSAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3JjeSwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHNyY3dpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3JjaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgIElOIFVuaXQgc3JjVW5pdCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBJbWFnZUF0dHJpYnV0ZXMqIGltYWdlQXR0cmlidXRlcyA9IE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgSU4gRHJhd0ltYWdlQWJvcnQgY2FsbGJhY2sgPSBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIFZPSUQqIGNhbGxiYWNrRGF0YSA9IE5VTEwpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdJbWFnZVJlY3RSZWN0KG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0LlgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdC5ZLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJlY3QuV2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdC5IZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmN4LCBzcmN5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Jjd2lkdGgsIHNyY2hlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1VuaXQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZUF0dHJpYnV0ZXMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGltYWdlQXR0cmlidXRlcy0+bmF0aXZlSW1hZ2VBdHRyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRHJhd0ltYWdlKElOIEltYWdlKiBpbWFnZSwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYqIGRlc3RQb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50LA0KLSAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3JjeCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHNyY3ksDQotICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzcmN3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHNyY2hlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBVbml0IHNyY1VuaXQsDQotICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgSW1hZ2VBdHRyaWJ1dGVzKiBpbWFnZUF0dHJpYnV0ZXMgPSBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIERyYXdJbWFnZUFib3J0IGNhbGxiYWNrID0gTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBWT0lEKiBjYWxsYmFja0RhdGEgPSBOVUxMKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3SW1hZ2VQb2ludHNSZWN0KG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQb2ludHMsIGNvdW50LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmN4LCBzcmN5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmN3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNVbml0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZUF0dHJpYnV0ZXMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaW1hZ2VBdHRyaWJ1dGVzLT5uYXRpdmVJbWFnZUF0dHINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSkpOw0KLSAgICB9DQotDQotICAgIC8vIGludGVnZXIgdmVyc2lvbg0KLSAgICBTdGF0dXMgRHJhd0ltYWdlKElOIEltYWdlKiBpbWFnZSwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeSwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgc3JjeCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgc3JjeSwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgc3Jjd2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHNyY2hlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBVbml0IHNyY1VuaXQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdJbWFnZVBvaW50UmVjdEkobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlID8gaW1hZ2UtPm5hdGl2ZUltYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Jjd2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY2hlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjVW5pdCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBEcmF3SW1hZ2UoSU4gSW1hZ2UqIGltYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3QmIGRlc3RSZWN0LA0KLSAgICAgICAgICAgICAgICAgICAgIElOIElOVCBzcmN4LA0KLSAgICAgICAgICAgICAgICAgICAgIElOIElOVCBzcmN5LA0KLSAgICAgICAgICAgICAgICAgICAgIElOIElOVCBzcmN3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgc3JjaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgIElOIFVuaXQgc3JjVW5pdCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBJbWFnZUF0dHJpYnV0ZXMqIGltYWdlQXR0cmlidXRlcyA9IE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgSU4gRHJhd0ltYWdlQWJvcnQgY2FsbGJhY2sgPSBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIFZPSUQqIGNhbGxiYWNrRGF0YSA9IE5VTEwpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdJbWFnZVJlY3RSZWN0SShuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdC5YLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0LlksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJlY3QuV2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJlY3QuSGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmN3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjVW5pdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZUF0dHJpYnV0ZXMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGltYWdlQXR0cmlidXRlcy0+bmF0aXZlSW1hZ2VBdHRyDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBEcmF3SW1hZ2UoSU4gSW1hZ2UqIGltYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50KiBkZXN0UG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgc3JjeCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgc3JjeSwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgc3Jjd2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHNyY2hlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBVbml0IHNyY1VuaXQsDQotICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgSW1hZ2VBdHRyaWJ1dGVzKiBpbWFnZUF0dHJpYnV0ZXMgPSBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIERyYXdJbWFnZUFib3J0IGNhbGxiYWNrID0gTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBWT0lEKiBjYWxsYmFja0RhdGEgPSBOVUxMKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3SW1hZ2VQb2ludHNSZWN0SShuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlID8gaW1hZ2UtPm5hdGl2ZUltYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmN4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3dpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjVW5pdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlQXR0cmlidXRlcw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaW1hZ2VBdHRyaWJ1dGVzLT5uYXRpdmVJbWFnZUF0dHINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSkpOw0KLSAgICB9DQotDQotICAgIC8vIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgZm9yIHBsYXlpbmcgYW4gRU1GKyB0byBhIGdyYXBoaWNzDQotICAgIC8vIHZpYSB0aGUgZW51bWVyYXRpb24gaW50ZXJmYWNlLiAgRWFjaCByZWNvcmQgb2YgdGhlIEVNRisgaXMNCi0gICAgLy8gc2VudCB0byB0aGUgY2FsbGJhY2sgKGFsb25nIHdpdGggdGhlIGNhbGxiYWNrRGF0YSkuICBUaGVuDQotICAgIC8vIHRoZSBjYWxsYmFjayBjYW4gaW52b2tlIHRoZSBNZXRhZmlsZTo6UGxheVJlY29yZCBtZXRob2QNCi0gICAgLy8gdG8gcGxheSB0aGUgcGFydGljdWxhciByZWNvcmQuDQotDQotICAgIFN0YXR1cw0KLSAgICBFbnVtZXJhdGVNZXRhZmlsZSgNCi0gICAgICAgIElOIGNvbnN0IE1ldGFmaWxlICogICAgICAgIG1ldGFmaWxlLA0KLSAgICAgICAgSU4gY29uc3QgUG9pbnRGICYgICAgICAgICAgZGVzdFBvaW50LA0KLSAgICAgICAgSU4gRW51bWVyYXRlTWV0YWZpbGVQcm9jICAgY2FsbGJhY2ssDQotICAgICAgICBJTiBWT0lEICogICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEgICAgPSBOVUxMLA0KLSAgICAgICAgSU4gY29uc3QgSW1hZ2VBdHRyaWJ1dGVzICogICAgICAgaW1hZ2VBdHRyaWJ1dGVzID0gTlVMTA0KLSAgICAgICAgKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBFbnVtZXJhdGVNZXRhZmlsZURlc3RQb2ludCgNCi0gICAgICAgICAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgKGNvbnN0IEdwTWV0YWZpbGUgKikobWV0YWZpbGUgPyBtZXRhZmlsZS0+bmF0aXZlSW1hZ2U6TlVMTCksDQotICAgICAgICAgICAgICAgICAgICBkZXN0UG9pbnQsDQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaywNCi0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgIGltYWdlQXR0cmlidXRlcyA/IGltYWdlQXR0cmlidXRlcy0+bmF0aXZlSW1hZ2VBdHRyIDogTlVMTCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cw0KLSAgICBFbnVtZXJhdGVNZXRhZmlsZSgNCi0gICAgICAgIElOIGNvbnN0IE1ldGFmaWxlICogICAgICAgIG1ldGFmaWxlLA0KLSAgICAgICAgSU4gY29uc3QgUG9pbnQgJiAgICAgICAgICAgZGVzdFBvaW50LA0KLSAgICAgICAgSU4gRW51bWVyYXRlTWV0YWZpbGVQcm9jICAgY2FsbGJhY2ssDQotICAgICAgICBJTiBWT0lEICogICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEgICAgPSBOVUxMLA0KLSAgICAgICAgSU4gY29uc3QgSW1hZ2VBdHRyaWJ1dGVzICogICAgICAgaW1hZ2VBdHRyaWJ1dGVzID0gTlVMTA0KLSAgICAgICAgKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBFbnVtZXJhdGVNZXRhZmlsZURlc3RQb2ludEkoDQotICAgICAgICAgICAgICAgICAgICBuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgIChjb25zdCBHcE1ldGFmaWxlICopKG1ldGFmaWxlID8gbWV0YWZpbGUtPm5hdGl2ZUltYWdlOk5VTEwpLA0KLSAgICAgICAgICAgICAgICAgICAgZGVzdFBvaW50LA0KLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssDQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEsDQotICAgICAgICAgICAgICAgICAgICBpbWFnZUF0dHJpYnV0ZXMgPyBpbWFnZUF0dHJpYnV0ZXMtPm5hdGl2ZUltYWdlQXR0ciA6IE5VTEwpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMNCi0gICAgRW51bWVyYXRlTWV0YWZpbGUoDQotICAgICAgICBJTiBjb25zdCBNZXRhZmlsZSAqICAgICAgICBtZXRhZmlsZSwNCi0gICAgICAgIElOIGNvbnN0IFJlY3RGICYgICAgICAgICAgIGRlc3RSZWN0LA0KLSAgICAgICAgSU4gRW51bWVyYXRlTWV0YWZpbGVQcm9jICAgY2FsbGJhY2ssDQotICAgICAgICBJTiBWT0lEICogICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEgICAgPSBOVUxMLA0KLSAgICAgICAgSU4gY29uc3QgSW1hZ2VBdHRyaWJ1dGVzICogICAgICAgaW1hZ2VBdHRyaWJ1dGVzID0gTlVMTA0KLSAgICAgICAgKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBFbnVtZXJhdGVNZXRhZmlsZURlc3RSZWN0KA0KLSAgICAgICAgICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAoY29uc3QgR3BNZXRhZmlsZSAqKShtZXRhZmlsZSA/IG1ldGFmaWxlLT5uYXRpdmVJbWFnZTpOVUxMKSwNCi0gICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0LA0KLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssDQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEsDQotICAgICAgICAgICAgICAgICAgICBpbWFnZUF0dHJpYnV0ZXMgPyBpbWFnZUF0dHJpYnV0ZXMtPm5hdGl2ZUltYWdlQXR0ciA6IE5VTEwpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMNCi0gICAgRW51bWVyYXRlTWV0YWZpbGUoDQotICAgICAgICBJTiBjb25zdCBNZXRhZmlsZSAqICAgICAgICBtZXRhZmlsZSwNCi0gICAgICAgIElOIGNvbnN0IFJlY3QgJiAgICAgICAgICAgIGRlc3RSZWN0LA0KLSAgICAgICAgSU4gRW51bWVyYXRlTWV0YWZpbGVQcm9jICAgY2FsbGJhY2ssDQotICAgICAgICBJTiBWT0lEICogICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEgICAgPSBOVUxMLA0KLSAgICAgICAgSU4gY29uc3QgSW1hZ2VBdHRyaWJ1dGVzICogICAgICAgaW1hZ2VBdHRyaWJ1dGVzID0gTlVMTA0KLSAgICAgICAgKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBFbnVtZXJhdGVNZXRhZmlsZURlc3RSZWN0SSgNCi0gICAgICAgICAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgKGNvbnN0IEdwTWV0YWZpbGUgKikobWV0YWZpbGUgPyBtZXRhZmlsZS0+bmF0aXZlSW1hZ2U6TlVMTCksDQotICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdCwNCi0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLA0KLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tEYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VBdHRyaWJ1dGVzID8gaW1hZ2VBdHRyaWJ1dGVzLT5uYXRpdmVJbWFnZUF0dHIgOiBOVUxMKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzDQotICAgIEVudW1lcmF0ZU1ldGFmaWxlKA0KLSAgICAgICAgSU4gY29uc3QgTWV0YWZpbGUgKiAgICAgICAgbWV0YWZpbGUsDQotICAgICAgICBJTiBjb25zdCBQb2ludEYgKiAgICAgICAgICBkZXN0UG9pbnRzLA0KLSAgICAgICAgSU4gSU5UICAgICAgICAgICAgICAgICAgICAgY291bnQsDQotICAgICAgICBJTiBFbnVtZXJhdGVNZXRhZmlsZVByb2MgICBjYWxsYmFjaywNCi0gICAgICAgIElOIFZPSUQgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSAgICA9IE5VTEwsDQotICAgICAgICBJTiBjb25zdCBJbWFnZUF0dHJpYnV0ZXMgKiAgICAgICBpbWFnZUF0dHJpYnV0ZXMgPSBOVUxMDQotICAgICAgICApDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEVudW1lcmF0ZU1ldGFmaWxlRGVzdFBvaW50cygNCi0gICAgICAgICAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgKGNvbnN0IEdwTWV0YWZpbGUgKikobWV0YWZpbGUgPyBtZXRhZmlsZS0+bmF0aXZlSW1hZ2U6TlVMTCksDQotICAgICAgICAgICAgICAgICAgICBkZXN0UG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgY291bnQsDQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaywNCi0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgIGltYWdlQXR0cmlidXRlcyA/IGltYWdlQXR0cmlidXRlcy0+bmF0aXZlSW1hZ2VBdHRyIDogTlVMTCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cw0KLSAgICBFbnVtZXJhdGVNZXRhZmlsZSgNCi0gICAgICAgIElOIGNvbnN0IE1ldGFmaWxlICogICAgICAgIG1ldGFmaWxlLA0KLSAgICAgICAgSU4gY29uc3QgUG9pbnQgKiAgICAgICAgICAgZGVzdFBvaW50cywNCi0gICAgICAgIElOIElOVCAgICAgICAgICAgICAgICAgICAgIGNvdW50LA0KLSAgICAgICAgSU4gRW51bWVyYXRlTWV0YWZpbGVQcm9jICAgY2FsbGJhY2ssDQotICAgICAgICBJTiBWT0lEICogICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEgICAgPSBOVUxMLA0KLSAgICAgICAgSU4gY29uc3QgSW1hZ2VBdHRyaWJ1dGVzICogICAgICAgaW1hZ2VBdHRyaWJ1dGVzID0gTlVMTA0KLSAgICAgICAgKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBFbnVtZXJhdGVNZXRhZmlsZURlc3RQb2ludHNJKA0KLSAgICAgICAgICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAoY29uc3QgR3BNZXRhZmlsZSAqKShtZXRhZmlsZSA/IG1ldGFmaWxlLT5uYXRpdmVJbWFnZTpOVUxMKSwNCi0gICAgICAgICAgICAgICAgICAgIGRlc3RQb2ludHMsDQotICAgICAgICAgICAgICAgICAgICBjb3VudCwNCi0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLA0KLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tEYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VBdHRyaWJ1dGVzID8gaW1hZ2VBdHRyaWJ1dGVzLT5uYXRpdmVJbWFnZUF0dHIgOiBOVUxMKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzDQotICAgIEVudW1lcmF0ZU1ldGFmaWxlKA0KLSAgICAgICAgSU4gY29uc3QgTWV0YWZpbGUgKiAgICAgICAgbWV0YWZpbGUsDQotICAgICAgICBJTiBjb25zdCBQb2ludEYgJiAgICAgICAgICBkZXN0UG9pbnQsDQotICAgICAgICBJTiBjb25zdCBSZWN0RiAmICAgICAgICAgICBzcmNSZWN0LA0KLSAgICAgICAgSU4gVW5pdCAgICAgICAgICAgICAgICAgICAgc3JjVW5pdCwNCi0gICAgICAgIElOIEVudW1lcmF0ZU1ldGFmaWxlUHJvYyAgIGNhbGxiYWNrLA0KLSAgICAgICAgSU4gVk9JRCAqICAgICAgICAgICAgICAgICAgY2FsbGJhY2tEYXRhICAgID0gTlVMTCwNCi0gICAgICAgIElOIGNvbnN0IEltYWdlQXR0cmlidXRlcyAqICAgICAgIGltYWdlQXR0cmlidXRlcyA9IE5VTEwNCi0gICAgICAgICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRW51bWVyYXRlTWV0YWZpbGVTcmNSZWN0RGVzdFBvaW50KA0KLSAgICAgICAgICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAoY29uc3QgR3BNZXRhZmlsZSAqKShtZXRhZmlsZSA/IG1ldGFmaWxlLT5uYXRpdmVJbWFnZTpOVUxMKSwNCi0gICAgICAgICAgICAgICAgICAgIGRlc3RQb2ludCwNCi0gICAgICAgICAgICAgICAgICAgIHNyY1JlY3QsDQotICAgICAgICAgICAgICAgICAgICBzcmNVbml0LA0KLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssDQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEsDQotICAgICAgICAgICAgICAgICAgICBpbWFnZUF0dHJpYnV0ZXMgPyBpbWFnZUF0dHJpYnV0ZXMtPm5hdGl2ZUltYWdlQXR0ciA6IE5VTEwpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMNCi0gICAgRW51bWVyYXRlTWV0YWZpbGUoDQotICAgICAgICBJTiBjb25zdCBNZXRhZmlsZSAqICAgICAgICBtZXRhZmlsZSwNCi0gICAgICAgIElOIGNvbnN0IFBvaW50ICYgICAgICAgICAgIGRlc3RQb2ludCwNCi0gICAgICAgIElOIGNvbnN0IFJlY3QgJiAgICAgICAgICAgIHNyY1JlY3QsDQotICAgICAgICBJTiBVbml0ICAgICAgICAgICAgICAgICAgICBzcmNVbml0LA0KLSAgICAgICAgSU4gRW51bWVyYXRlTWV0YWZpbGVQcm9jICAgY2FsbGJhY2ssDQotICAgICAgICBJTiBWT0lEICogICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEgICAgPSBOVUxMLA0KLSAgICAgICAgSU4gY29uc3QgSW1hZ2VBdHRyaWJ1dGVzICogICAgICAgaW1hZ2VBdHRyaWJ1dGVzID0gTlVMTA0KLSAgICAgICAgKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBFbnVtZXJhdGVNZXRhZmlsZVNyY1JlY3REZXN0UG9pbnRJKA0KLSAgICAgICAgICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAoY29uc3QgR3BNZXRhZmlsZSAqKShtZXRhZmlsZSA/IG1ldGFmaWxlLT5uYXRpdmVJbWFnZTpOVUxMKSwNCi0gICAgICAgICAgICAgICAgICAgIGRlc3RQb2ludCwNCi0gICAgICAgICAgICAgICAgICAgIHNyY1JlY3QsDQotICAgICAgICAgICAgICAgICAgICBzcmNVbml0LA0KLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssDQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEsDQotICAgICAgICAgICAgICAgICAgICBpbWFnZUF0dHJpYnV0ZXMgPyBpbWFnZUF0dHJpYnV0ZXMtPm5hdGl2ZUltYWdlQXR0ciA6IE5VTEwpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMNCi0gICAgRW51bWVyYXRlTWV0YWZpbGUoDQotICAgICAgICBJTiBjb25zdCBNZXRhZmlsZSAqICAgICAgICBtZXRhZmlsZSwNCi0gICAgICAgIElOIGNvbnN0IFJlY3RGICYgICAgICAgICAgIGRlc3RSZWN0LA0KLSAgICAgICAgSU4gY29uc3QgUmVjdEYgJiAgICAgICAgICAgc3JjUmVjdCwNCi0gICAgICAgIElOIFVuaXQgICAgICAgICAgICAgICAgICAgIHNyY1VuaXQsDQotICAgICAgICBJTiBFbnVtZXJhdGVNZXRhZmlsZVByb2MgICBjYWxsYmFjaywNCi0gICAgICAgIElOIFZPSUQgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSAgICA9IE5VTEwsDQotICAgICAgICBJTiBjb25zdCBJbWFnZUF0dHJpYnV0ZXMgKiAgICAgICBpbWFnZUF0dHJpYnV0ZXMgPSBOVUxMDQotICAgICAgICApDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEVudW1lcmF0ZU1ldGFmaWxlU3JjUmVjdERlc3RSZWN0KA0KLSAgICAgICAgICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAoY29uc3QgR3BNZXRhZmlsZSAqKShtZXRhZmlsZSA/IG1ldGFmaWxlLT5uYXRpdmVJbWFnZTpOVUxMKSwNCi0gICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0LA0KLSAgICAgICAgICAgICAgICAgICAgc3JjUmVjdCwNCi0gICAgICAgICAgICAgICAgICAgIHNyY1VuaXQsDQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaywNCi0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgIGltYWdlQXR0cmlidXRlcyA/IGltYWdlQXR0cmlidXRlcy0+bmF0aXZlSW1hZ2VBdHRyIDogTlVMTCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cw0KLSAgICBFbnVtZXJhdGVNZXRhZmlsZSgNCi0gICAgICAgIElOIGNvbnN0IE1ldGFmaWxlICogICAgICAgIG1ldGFmaWxlLA0KLSAgICAgICAgSU4gY29uc3QgUmVjdCAmICAgICAgICAgICAgZGVzdFJlY3QsDQotICAgICAgICBJTiBjb25zdCBSZWN0ICYgICAgICAgICAgICBzcmNSZWN0LA0KLSAgICAgICAgSU4gVW5pdCAgICAgICAgICAgICAgICAgICAgc3JjVW5pdCwNCi0gICAgICAgIElOIEVudW1lcmF0ZU1ldGFmaWxlUHJvYyAgIGNhbGxiYWNrLA0KLSAgICAgICAgSU4gVk9JRCAqICAgICAgICAgICAgICAgICAgY2FsbGJhY2tEYXRhICAgID0gTlVMTCwNCi0gICAgICAgIElOIGNvbnN0IEltYWdlQXR0cmlidXRlcyAqICAgICAgIGltYWdlQXR0cmlidXRlcyA9IE5VTEwNCi0gICAgICAgICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRW51bWVyYXRlTWV0YWZpbGVTcmNSZWN0RGVzdFJlY3RJKA0KLSAgICAgICAgICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAoY29uc3QgR3BNZXRhZmlsZSAqKShtZXRhZmlsZSA/IG1ldGFmaWxlLT5uYXRpdmVJbWFnZTpOVUxMKSwNCi0gICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0LA0KLSAgICAgICAgICAgICAgICAgICAgc3JjUmVjdCwNCi0gICAgICAgICAgICAgICAgICAgIHNyY1VuaXQsDQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaywNCi0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgIGltYWdlQXR0cmlidXRlcyA/IGltYWdlQXR0cmlidXRlcy0+bmF0aXZlSW1hZ2VBdHRyIDogTlVMTCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cw0KLSAgICBFbnVtZXJhdGVNZXRhZmlsZSgNCi0gICAgICAgIElOIGNvbnN0IE1ldGFmaWxlICogICAgICAgIG1ldGFmaWxlLA0KLSAgICAgICAgSU4gY29uc3QgUG9pbnRGICogICAgICAgICAgZGVzdFBvaW50cywNCi0gICAgICAgIElOIElOVCAgICAgICAgICAgICAgICAgICAgIGNvdW50LA0KLSAgICAgICAgSU4gY29uc3QgUmVjdEYgJiAgICAgICAgICAgc3JjUmVjdCwNCi0gICAgICAgIElOIFVuaXQgICAgICAgICAgICAgICAgICAgIHNyY1VuaXQsDQotICAgICAgICBJTiBFbnVtZXJhdGVNZXRhZmlsZVByb2MgICBjYWxsYmFjaywNCi0gICAgICAgIElOIFZPSUQgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSAgICA9IE5VTEwsDQotICAgICAgICBJTiBjb25zdCBJbWFnZUF0dHJpYnV0ZXMgKiAgICAgICBpbWFnZUF0dHJpYnV0ZXMgPSBOVUxMDQotICAgICAgICApDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEVudW1lcmF0ZU1ldGFmaWxlU3JjUmVjdERlc3RQb2ludHMoDQotICAgICAgICAgICAgICAgICAgICBuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgIChjb25zdCBHcE1ldGFmaWxlICopKG1ldGFmaWxlID8gbWV0YWZpbGUtPm5hdGl2ZUltYWdlOk5VTEwpLA0KLSAgICAgICAgICAgICAgICAgICAgZGVzdFBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgIGNvdW50LA0KLSAgICAgICAgICAgICAgICAgICAgc3JjUmVjdCwNCi0gICAgICAgICAgICAgICAgICAgIHNyY1VuaXQsDQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaywNCi0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgIGltYWdlQXR0cmlidXRlcyA/IGltYWdlQXR0cmlidXRlcy0+bmF0aXZlSW1hZ2VBdHRyIDogTlVMTCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cw0KLSAgICBFbnVtZXJhdGVNZXRhZmlsZSgNCi0gICAgICAgIElOIGNvbnN0IE1ldGFmaWxlICogICAgICAgIG1ldGFmaWxlLA0KLSAgICAgICAgSU4gY29uc3QgUG9pbnQgKiAgICAgICAgICAgZGVzdFBvaW50cywNCi0gICAgICAgIElOIElOVCAgICAgICAgICAgICAgICAgICAgIGNvdW50LA0KLSAgICAgICAgSU4gY29uc3QgUmVjdCAmICAgICAgICAgICAgc3JjUmVjdCwNCi0gICAgICAgIElOIFVuaXQgICAgICAgICAgICAgICAgICAgIHNyY1VuaXQsDQotICAgICAgICBJTiBFbnVtZXJhdGVNZXRhZmlsZVByb2MgICBjYWxsYmFjaywNCi0gICAgICAgIElOIFZPSUQgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSAgICA9IE5VTEwsDQotICAgICAgICBJTiBjb25zdCBJbWFnZUF0dHJpYnV0ZXMgKiAgICAgICBpbWFnZUF0dHJpYnV0ZXMgPSBOVUxMDQotICAgICAgICApDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEVudW1lcmF0ZU1ldGFmaWxlU3JjUmVjdERlc3RQb2ludHNJKA0KLSAgICAgICAgICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAoY29uc3QgR3BNZXRhZmlsZSAqKShtZXRhZmlsZSA/IG1ldGFmaWxlLT5uYXRpdmVJbWFnZTpOVUxMKSwNCi0gICAgICAgICAgICAgICAgICAgIGRlc3RQb2ludHMsDQotICAgICAgICAgICAgICAgICAgICBjb3VudCwNCi0gICAgICAgICAgICAgICAgICAgIHNyY1JlY3QsDQotICAgICAgICAgICAgICAgICAgICBzcmNVbml0LA0KLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssDQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEsDQotICAgICAgICAgICAgICAgICAgICBpbWFnZUF0dHJpYnV0ZXMgPyBpbWFnZUF0dHJpYnV0ZXMtPm5hdGl2ZUltYWdlQXR0ciA6IE5VTEwpKTsNCi0gICAgfQ0KLQ0KLSAgICAvKioNCi0gICAgICAqIENsaXBwaW5nIHJlZ2lvbiBvcGVyYXRpb25zDQotICAgICAgKg0KLSAgICAgICogQG5vdGVzIFNpbXBseSBpbmNyZWRpYmxlIHJlZHVuZGFuY3kgaGVyZS4NCi0gICAgICAqLw0KLSAgICBTdGF0dXMgU2V0Q2xpcChJTiBjb25zdCBHcmFwaGljcyogZywNCi0gICAgICAgICAgICAgICAgICAgSU4gQ29tYmluZU1vZGUgY29tYmluZU1vZGUgPSBDb21iaW5lTW9kZVJlcGxhY2UpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldENsaXBHcmFwaGljcyhuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLT5uYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lTW9kZSkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTZXRDbGlwKElOIGNvbnN0IFJlY3RGJiByZWN0LA0KLSAgICAgICAgICAgICAgICAgICBJTiBDb21iaW5lTW9kZSBjb21iaW5lTW9kZSA9IENvbWJpbmVNb2RlUmVwbGFjZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0Q2xpcFJlY3QobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LlgsIHJlY3QuWSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuV2lkdGgsIHJlY3QuSGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZU1vZGUpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0Q2xpcChJTiBjb25zdCBSZWN0JiByZWN0LA0KLSAgICAgICAgICAgICAgICAgICBJTiBDb21iaW5lTW9kZSBjb21iaW5lTW9kZSA9IENvbWJpbmVNb2RlUmVwbGFjZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0Q2xpcFJlY3RJKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuWCwgcmVjdC5ZLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuV2lkdGgsIHJlY3QuSGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVNb2RlKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFNldENsaXAoSU4gY29uc3QgR3JhcGhpY3NQYXRoKiBwYXRoLA0KLSAgICAgICAgICAgICAgICAgICBJTiBDb21iaW5lTW9kZSBjb21iaW5lTW9kZSA9IENvbWJpbmVNb2RlUmVwbGFjZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0Q2xpcFBhdGgobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLT5uYXRpdmVQYXRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZU1vZGUpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0Q2xpcChJTiBjb25zdCBSZWdpb24qIHJlZ2lvbiwNCi0gICAgICAgICAgICAgICAgICAgSU4gQ29tYmluZU1vZGUgY29tYmluZU1vZGUgPSBDb21iaW5lTW9kZVJlcGxhY2UpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldENsaXBSZWdpb24obmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbi0+bmF0aXZlUmVnaW9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lTW9kZSkpOw0KLSAgICB9DQotDQotICAgIC8vIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdGhlIG90aGVyIFNldENsaXAgbWV0aG9kcyBiZWNhdXNlIGl0IGFzc3VtZXMNCi0gICAgLy8gdGhhdCB0aGUgSFJHTiBpcyBhbHJlYWR5IGluIGRldmljZSB1bml0cywgc28gaXQgZG9lc24ndCB0cmFuc2Zvcm0NCi0gICAgLy8gdGhlIGNvb3JkaW5hdGVzIGluIHRoZSBIUkdOLg0KLSAgICBTdGF0dXMgU2V0Q2xpcChJTiBIUkdOIGhSZ24sDQotICAgICAgICAgICAgICAgICAgIElOIENvbWJpbmVNb2RlIGNvbWJpbmVNb2RlID0gQ29tYmluZU1vZGVSZXBsYWNlKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRDbGlwSHJnbihuYXRpdmVHcmFwaGljcywgaFJnbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVNb2RlKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEludGVyc2VjdENsaXAoSU4gY29uc3QgUmVjdEYmIHJlY3QpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldENsaXBSZWN0KG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5YLCByZWN0LlksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LldpZHRoLCByZWN0LkhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbWJpbmVNb2RlSW50ZXJzZWN0KSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEludGVyc2VjdENsaXAoSU4gY29uc3QgUmVjdCYgcmVjdCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0Q2xpcFJlY3RJKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuWCwgcmVjdC5ZLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuV2lkdGgsIHJlY3QuSGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbWJpbmVNb2RlSW50ZXJzZWN0KSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEludGVyc2VjdENsaXAoSU4gY29uc3QgUmVnaW9uKiByZWdpb24pDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldENsaXBSZWdpb24obmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbi0+bmF0aXZlUmVnaW9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21iaW5lTW9kZUludGVyc2VjdCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBFeGNsdWRlQ2xpcChJTiBjb25zdCBSZWN0RiYgcmVjdCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0Q2xpcFJlY3QobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LlgsIHJlY3QuWSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuV2lkdGgsIHJlY3QuSGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tYmluZU1vZGVFeGNsdWRlKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEV4Y2x1ZGVDbGlwKElOIGNvbnN0IFJlY3QmIHJlY3QpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldENsaXBSZWN0SShuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LlgsIHJlY3QuWSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LldpZHRoLCByZWN0LkhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21iaW5lTW9kZUV4Y2x1ZGUpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRXhjbHVkZUNsaXAoSU4gY29uc3QgUmVnaW9uKiByZWdpb24pDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldENsaXBSZWdpb24obmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbi0+bmF0aXZlUmVnaW9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21iaW5lTW9kZUV4Y2x1ZGUpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgUmVzZXRDbGlwKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUmVzZXRDbGlwKG5hdGl2ZUdyYXBoaWNzKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFRyYW5zbGF0ZUNsaXAoSU4gUkVBTCBkeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBkeSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwVHJhbnNsYXRlQ2xpcChuYXRpdmVHcmFwaGljcywgZHgsIGR5KSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFRyYW5zbGF0ZUNsaXAoSU4gSU5UIGR4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgZHkpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFRyYW5zbGF0ZUNsaXBJKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHgsIGR5KSk7DQotICAgIH0NCi0NCi0gICAgLyoqDQotICAgICAqICBHZXRDbGlwIHJlZ2lvbiBmcm9tIGdyYXBoaWNzIGNvbnRleHQNCi0gICAgICovDQotICAgIFN0YXR1cyBHZXRDbGlwKE9VVCBSZWdpb24qIHJlZ2lvbikgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0Q2xpcChuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uLT5uYXRpdmVSZWdpb24pKTsNCi0gICAgfQ0KLQ0KLSAgICAvKioNCi0gICAgICogSGl0IHRlc3Rpbmcgb3BlcmF0aW9ucw0KLSAgICAgKi8NCi0gICAgU3RhdHVzIEdldENsaXBCb3VuZHMoT1VUIFJlY3RGKiByZWN0KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRDbGlwQm91bmRzKG5hdGl2ZUdyYXBoaWNzLCByZWN0KSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEdldENsaXBCb3VuZHMoT1VUIFJlY3QqIHJlY3QpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldENsaXBCb3VuZHNJKG5hdGl2ZUdyYXBoaWNzLCByZWN0KSk7DQotICAgIH0NCi0NCi0gICAgQk9PTCBJc0NsaXBFbXB0eSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIEJPT0wgYm9vbG4gPSBGQUxTRTsNCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSXNDbGlwRW1wdHkobmF0aXZlR3JhcGhpY3MsICZib29sbikpOw0KLQ0KLSAgICAgICAgcmV0dXJuIGJvb2xuOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBHZXRWaXNpYmxlQ2xpcEJvdW5kcyhPVVQgUmVjdEYgKnJlY3QpIGNvbnN0DQotICAgIHsNCi0NCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFZpc2libGVDbGlwQm91bmRzKG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBHZXRWaXNpYmxlQ2xpcEJvdW5kcyhPVVQgUmVjdCAqcmVjdCkgY29uc3QNCi0gICAgew0KLSAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRWaXNpYmxlQ2xpcEJvdW5kc0kobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0KSk7DQotICAgIH0NCi0NCi0gICAgQk9PTCBJc1Zpc2libGVDbGlwRW1wdHkoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBCT09MIGJvb2xuID0gRkFMU0U7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcElzVmlzaWJsZUNsaXBFbXB0eShuYXRpdmVHcmFwaGljcywgJmJvb2xuKSk7DQotDQotICAgICAgICByZXR1cm4gYm9vbG47DQotICAgIH0NCi0NCi0gICAgQk9PTCBJc1Zpc2libGUoSU4gSU5UIHgsDQotICAgICAgICAgICAgICAgICAgIElOIElOVCB5KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gSXNWaXNpYmxlKFBvaW50KHgseSkpOw0KLSAgICB9DQotDQotICAgIEJPT0wgSXNWaXNpYmxlKElOIGNvbnN0IFBvaW50JiBwb2ludCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgQk9PTCBib29sbiA9IEZBTFNFOw0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBJc1Zpc2libGVQb2ludEkobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludC5YLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQuWSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZib29sbikpOw0KLQ0KLSAgICAgICAgcmV0dXJuIGJvb2xuOw0KLSAgICB9DQotDQotICAgIEJPT0wgSXNWaXNpYmxlKElOIElOVCB4LA0KLSAgICAgICAgICAgICAgICAgICBJTiBJTlQgeSwNCi0gICAgICAgICAgICAgICAgICAgSU4gSU5UIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICBJTiBJTlQgaGVpZ2h0KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gSXNWaXNpYmxlKFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOw0KLSAgICB9DQotDQotICAgIEJPT0wgSXNWaXNpYmxlKElOIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0DQotICAgIHsNCi0NCi0gICAgICAgIEJPT0wgYm9vbG4gPSBUUlVFOw0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBJc1Zpc2libGVSZWN0SShuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5YLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LlksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuV2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuSGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYm9vbG4pKTsNCi0gICAgICAgIHJldHVybiBib29sbjsNCi0gICAgfQ0KLQ0KLSAgICBCT09MIElzVmlzaWJsZShJTiBSRUFMIHgsDQotICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeSkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIElzVmlzaWJsZShQb2ludEYoeCwgeSkpOw0KLSAgICB9DQotDQotICAgIEJPT0wgSXNWaXNpYmxlKElOIGNvbnN0IFBvaW50RiYgcG9pbnQpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIEJPT0wgYm9vbG4gPSBGQUxTRTsNCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSXNWaXNpYmxlUG9pbnQobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50LlgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50LlksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZib29sbikpOw0KLQ0KLSAgICAgICAgcmV0dXJuIGJvb2xuOw0KLSAgICB9DQotDQotICAgIEJPT0wgSXNWaXNpYmxlKElOIFJFQUwgeCwNCi0gICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5LA0KLSAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICBJTiBSRUFMIGhlaWdodCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIElzVmlzaWJsZShSZWN0Rih4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7DQotICAgIH0NCi0NCi0gICAgQk9PTCBJc1Zpc2libGUoSU4gY29uc3QgUmVjdEYmIHJlY3QpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIEJPT0wgYm9vbG4gPSBUUlVFOw0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBJc1Zpc2libGVSZWN0KG5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuWCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LlksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5XaWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LkhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYm9vbG4pKTsNCi0gICAgICAgIHJldHVybiBib29sbjsNCi0gICAgfQ0KLQ0KLSAgICAvKioNCi0gICAgICogU2F2ZS9yZXN0b3JlIGdyYXBoaWNzIHN0YXRlDQotICAgICAqLw0KLSAgICBHcmFwaGljc1N0YXRlIFNhdmUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBHcmFwaGljc1N0YXRlIGdzdGF0ZTsNCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2F2ZUdyYXBoaWNzKG5hdGl2ZUdyYXBoaWNzLCAmZ3N0YXRlKSk7DQotDQotICAgICAgICByZXR1cm4gZ3N0YXRlOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBSZXN0b3JlKElOIEdyYXBoaWNzU3RhdGUgZ3N0YXRlKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBSZXN0b3JlR3JhcGhpY3MobmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3N0YXRlKSk7DQotICAgIH0NCi0NCi0gICAgLyoqDQotICAgICAqIEJlZ2luIGFuZCBlbmQgY29udGFpbmVyIGRyYXdpbmcNCi0gICAgICovDQotICAgIEdyYXBoaWNzQ29udGFpbmVyIEJlZ2luQ29udGFpbmVyKElOIGNvbnN0IFJlY3RGICZkc3RyZWN0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0RiAmc3JjcmVjdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gVW5pdCAgICAgICAgIHVuaXQpDQotICAgIHsNCi0gICAgICAgIEdyYXBoaWNzQ29udGFpbmVyIHN0YXRlOw0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBCZWdpbkNvbnRhaW5lcihuYXRpdmVHcmFwaGljcywgJmRzdHJlY3QsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcmNyZWN0LCB1bml0LCAmc3RhdGUpKTsNCi0NCi0gICAgICAgIHJldHVybiBzdGF0ZTsNCi0gICAgfQ0KLQ0KLSAgICAvKioNCi0gICAgICogQmVnaW4gYW5kIGVuZCBjb250YWluZXIgZHJhd2luZw0KLSAgICAgKi8NCi0gICAgR3JhcGhpY3NDb250YWluZXIgQmVnaW5Db250YWluZXIoSU4gY29uc3QgUmVjdCAgICAmZHN0cmVjdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdCAgICAmc3JjcmVjdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gVW5pdCAgICAgICAgICAgdW5pdCkNCi0gICAgew0KLSAgICAgICAgR3JhcGhpY3NDb250YWluZXIgc3RhdGU7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEJlZ2luQ29udGFpbmVySShuYXRpdmVHcmFwaGljcywgJmRzdHJlY3QsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3JjcmVjdCwgdW5pdCwgJnN0YXRlKSk7DQotDQotICAgICAgICByZXR1cm4gc3RhdGU7DQotICAgIH0NCi0NCi0gICAgR3JhcGhpY3NDb250YWluZXIgQmVnaW5Db250YWluZXIoKQ0KLSAgICB7DQotICAgICAgICBHcmFwaGljc0NvbnRhaW5lciBzdGF0ZTsNCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQmVnaW5Db250YWluZXIyKG5hdGl2ZUdyYXBoaWNzLCAmc3RhdGUpKTsNCi0NCi0gICAgICAgIHJldHVybiBzdGF0ZTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgRW5kQ29udGFpbmVyKElOIEdyYXBoaWNzQ29udGFpbmVyIHN0YXRlKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBFbmRDb250YWluZXIobmF0aXZlR3JhcGhpY3MsIHN0YXRlKSk7DQotICAgIH0NCi0NCi0gICAgLy8gb25seSB2YWxpZCB3aGVuIHJlY29yZGluZyBtZXRhZmlsZXMNCi0gICAgU3RhdHVzIEFkZE1ldGFmaWxlQ29tbWVudChJTiBjb25zdCBCWVRFICogZGF0YSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBVSU5UIHNpemVEYXRhKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDb21tZW50KG5hdGl2ZUdyYXBoaWNzLCBzaXplRGF0YSwgZGF0YSkpOw0KLSAgICB9DQotDQotICAgIC8qKg0KLSAgICAgKiBHZXQvU2V0TGF5b3V0DQotICAgICAqIFN1cHBvcnQgZm9yIE1pZGRsZSBFYXN0IGxvY2FsaXphdGlvbiAocmlnaHQtdG8tbGVmdCBtaXJyb3JpbmcpDQotICAgICAqLw0KLSAgICBHcmFwaGljc0xheW91dCBHZXRMYXlvdXQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBHcmFwaGljc0xheW91dCBsYXlvdXQ7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEdyYXBoaWNzTGF5b3V0KG5hdGl2ZUdyYXBoaWNzLCAmbGF5b3V0KSk7DQotDQotICAgICAgICByZXR1cm4gbGF5b3V0Ow0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTZXRMYXlvdXQoSU4gY29uc3QgR3JhcGhpY3NMYXlvdXQgbGF5b3V0KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKA0KLSAgICAgICAgICAgIERsbEV4cG9ydHM6OkdkaXBTZXRHcmFwaGljc0xheW91dChuYXRpdmVHcmFwaGljcywgbGF5b3V0KQ0KLSAgICAgICAgKTsNCi0gICAgfQ0KLQ0KLSAgICBzdGF0aWMgSFBBTEVUVEUgR2V0SGFsZnRvbmVQYWxldHRlKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIERsbEV4cG9ydHM6OkdkaXBDcmVhdGVIYWxmdG9uZVBhbGV0dGUoKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgR2V0TGFzdFN0YXR1cygpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIFN0YXR1cyBsYXN0U3RhdHVzID0gbGFzdFJlc3VsdDsNCi0gICAgICAgIGxhc3RSZXN1bHQgPSBPazsNCi0NCi0gICAgICAgIHJldHVybiBsYXN0U3RhdHVzOw0KLSAgICB9DQotDQotcHJvdGVjdGVkOg0KLQ0KLSNpZmRlZiBEQ1JfVVNFX05FV18yNTA5MzINCi0NCi1wcml2YXRlOg0KLSAgICBHcmFwaGljcyhjb25zdCBHcmFwaGljcyAmKTsNCi0gICAgR3JhcGhpY3MmIG9wZXJhdG9yPShjb25zdCBHcmFwaGljcyAmKTsNCi1wcm90ZWN0ZWQ6DQotDQotI2Vsc2UNCi0NCi0gICAgR3JhcGhpY3MoY29uc3QgR3JhcGhpY3MmIGdyYXBoaWNzKQ0KLSAgICB7DQotICAgICAgICBncmFwaGljczsNCi0gICAgICAgIFNldFN0YXR1cyhOb3RJbXBsZW1lbnRlZCk7DQotICAgIH0NCi0NCi0gICAgR3JhcGhpY3MmIG9wZXJhdG9yPShjb25zdCBHcmFwaGljcyYgZ3JhcGhpY3MpDQotICAgIHsNCi0gICAgICAgIGdyYXBoaWNzOw0KLSAgICAgICAgU2V0U3RhdHVzKE5vdEltcGxlbWVudGVkKTsNCi0gICAgICAgIHJldHVybiAqdGhpczsNCi0gICAgfQ0KLQ0KLSNlbmRpZg0KLQ0KLSAgICBHcmFwaGljcyhHcEdyYXBoaWNzKiBncmFwaGljcykNCi0gICAgew0KLSAgICAgICAgbGFzdFJlc3VsdCA9IE9rOw0KLSAgICAgICAgU2V0TmF0aXZlR3JhcGhpY3MoZ3JhcGhpY3MpOw0KLSAgICB9DQotDQotICAgIFZPSUQgU2V0TmF0aXZlR3JhcGhpY3MoR3BHcmFwaGljcyAqZ3JhcGhpY3MpDQotICAgIHsNCi0gICAgICAgIHRoaXMtPm5hdGl2ZUdyYXBoaWNzID0gZ3JhcGhpY3M7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFNldFN0YXR1cyhTdGF0dXMgc3RhdHVzKSBjb25zdA0KLSAgICB7DQotICAgICAgICBpZiAoc3RhdHVzICE9IE9rKQ0KLSAgICAgICAgICAgIHJldHVybiAobGFzdFJlc3VsdCA9IHN0YXR1cyk7DQotICAgICAgICBlbHNlDQotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCi0gICAgfQ0KLQ0KLSAgICAvLyBNZXRob2RzIG5lY2Vzc2FyeSB0byBzdWJjbGFzcyBHcmFwaGljcyBmb3IgZXh0ZW5zaW9uIHRlc3QuDQotDQotICAgIEdwR3JhcGhpY3MqIEdldE5hdGl2ZUdyYXBoaWNzKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIHRoaXMtPm5hdGl2ZUdyYXBoaWNzOw0KLSAgICB9DQotDQotICAgIEdwUGVuKiBHZXROYXRpdmVQZW4oY29uc3QgUGVuKiBwZW4pDQotICAgIHsNCi0gICAgICAgIHJldHVybiBwZW4tPm5hdGl2ZVBlbjsNCi0gICAgfQ0KLQ0KLXByb3RlY3RlZDoNCi0gICAgR3BHcmFwaGljcyogbmF0aXZlR3JhcGhpY3M7DQotICAgIG11dGFibGUgU3RhdHVzIGxhc3RSZXN1bHQ7DQotDQotfTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBFeHRyYSBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc1BhdGggbWV0aG9kcyB0aGF0IHVzZSBHcmFwaGljcw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLS8qKg0KLSAqIEdldCB0aGUgYm91bmRzIG9mIHRoZSBwYXRoIG9iamVjdCB3aXRoIHRoZSBnaXZlbiB0cmFuc2Zvcm0uDQotICogVGhpcyBpcyBub3QgYWx3YXlzIHRoZSB0aWdodGVzdCBib3VuZHMuDQotICovDQotDQotaW5saW5lIFN0YXR1cw0KLUdyYXBoaWNzUGF0aDo6R2V0Qm91bmRzKA0KLSAgICBPVVQgUmVjdEYqIGJvdW5kcywNCi0gICAgSU4gY29uc3QgTWF0cml4KiBtYXRyaXgsDQotICAgIElOIGNvbnN0IFBlbiogcGVuKSBjb25zdA0KLXsNCi0gICAgR3BNYXRyaXgqIG5hdGl2ZU1hdHJpeCA9IE5VTEw7DQotICAgIEdwUGVuKiBuYXRpdmVQZW4gPSBOVUxMOw0KLQ0KLSAgICBpZiAobWF0cml4KQ0KLSAgICAgICAgbmF0aXZlTWF0cml4ID0gbWF0cml4LT5uYXRpdmVNYXRyaXg7DQotDQotICAgIGlmIChwZW4pDQotICAgICAgICBuYXRpdmVQZW4gPSBwZW4tPm5hdGl2ZVBlbjsNCi0NCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGF0aFdvcmxkQm91bmRzKG5hdGl2ZVBhdGgsIGJvdW5kcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVNYXRyaXgsIG5hdGl2ZVBlbikpOw0KLX0NCi0NCi0vLyBpbnRlZ2VyIHZlcnNpb24NCi1pbmxpbmUgU3RhdHVzDQotR3JhcGhpY3NQYXRoOjpHZXRCb3VuZHMoDQotICAgIE9VVCBSZWN0KiBib3VuZHMsDQotICAgIElOIGNvbnN0IE1hdHJpeCogbWF0cml4LA0KLSAgICBJTiBjb25zdCBQZW4qIHBlbg0KLSkgY29uc3QNCi17DQotICAgIEdwTWF0cml4KiBuYXRpdmVNYXRyaXggPSBOVUxMOw0KLSAgICBHcFBlbiogbmF0aXZlUGVuID0gTlVMTDsNCi0NCi0gICAgaWYgKG1hdHJpeCkNCi0gICAgICAgIG5hdGl2ZU1hdHJpeCA9IG1hdHJpeC0+bmF0aXZlTWF0cml4Ow0KLQ0KLSAgICBpZiAocGVuKQ0KLSAgICAgICAgbmF0aXZlUGVuID0gcGVuLT5uYXRpdmVQZW47DQotDQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhXb3JsZEJvdW5kc0kobmF0aXZlUGF0aCwgYm91bmRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVNYXRyaXgsIG5hdGl2ZVBlbikpOw0KLX0NCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBIaXQgdGVzdGluZyBvcGVyYXRpb25zDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotaW5saW5lIEJPT0wNCi1HcmFwaGljc1BhdGg6OklzVmlzaWJsZSgNCi0gICAgSU4gUkVBTCB4LA0KLSAgICBJTiBSRUFMIHksDQotICAgIElOIGNvbnN0IEdyYXBoaWNzKiBnKSBjb25zdA0KLXsNCi0gICBCT09MIGJvb2xuID0gRkFMU0U7DQotDQotICAgR3BHcmFwaGljcyogbmF0aXZlR3JhcGhpY3MgPSBOVUxMOw0KLQ0KLSAgIGlmIChnKQ0KLSAgICAgICBuYXRpdmVHcmFwaGljcyA9IGctPm5hdGl2ZUdyYXBoaWNzOw0KLQ0KLSAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSXNWaXNpYmxlUGF0aFBvaW50KG5hdGl2ZVBhdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgeSwgbmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJvb2xuKSk7DQotICAgcmV0dXJuIGJvb2xuOw0KLX0NCi0NCi1pbmxpbmUgQk9PTA0KLUdyYXBoaWNzUGF0aDo6SXNWaXNpYmxlKA0KLSAgICBJTiBJTlQgeCwNCi0gICAgSU4gSU5UIHksDQotICAgIElOIGNvbnN0IEdyYXBoaWNzKiBnKSBjb25zdA0KLXsNCi0gICBCT09MIGJvb2xuID0gRkFMU0U7DQotDQotICAgR3BHcmFwaGljcyogbmF0aXZlR3JhcGhpY3MgPSBOVUxMOw0KLQ0KLSAgIGlmIChnKQ0KLSAgICAgICBuYXRpdmVHcmFwaGljcyA9IGctPm5hdGl2ZUdyYXBoaWNzOw0KLQ0KLSAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSXNWaXNpYmxlUGF0aFBvaW50SShuYXRpdmVQYXRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCB5LCBuYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJvb2xuKSk7DQotICAgcmV0dXJuIGJvb2xuOw0KLX0NCi0NCi1pbmxpbmUgQk9PTA0KLUdyYXBoaWNzUGF0aDo6SXNPdXRsaW5lVmlzaWJsZSgNCi0gICAgSU4gUkVBTCB4LA0KLSAgICBJTiBSRUFMIHksDQotICAgIElOIGNvbnN0IFBlbiogcGVuLA0KLSAgICBJTiBjb25zdCBHcmFwaGljcyogZykgY29uc3QNCi17DQotICAgIEJPT0wgYm9vbG4gPSBGQUxTRTsNCi0NCi0gICAgR3BHcmFwaGljcyogbmF0aXZlR3JhcGhpY3MgPSBOVUxMOw0KLSAgICBHcFBlbiogbmF0aXZlUGVuID0gTlVMTDsNCi0NCi0gICAgaWYoZykNCi0gICAgICAgIG5hdGl2ZUdyYXBoaWNzID0gZy0+bmF0aXZlR3JhcGhpY3M7DQotICAgIGlmKHBlbikNCi0gICAgICAgIG5hdGl2ZVBlbiA9IHBlbi0+bmF0aXZlUGVuOw0KLQ0KLSAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcElzT3V0bGluZVZpc2libGVQYXRoUG9pbnQobmF0aXZlUGF0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIHksIG5hdGl2ZVBlbiwgbmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYm9vbG4pKTsNCi0gICAgcmV0dXJuIGJvb2xuOw0KLX0NCi0NCi1pbmxpbmUgQk9PTA0KLUdyYXBoaWNzUGF0aDo6SXNPdXRsaW5lVmlzaWJsZSgNCi0gICAgSU4gSU5UIHgsDQotICAgIElOIElOVCB5LA0KLSAgICBJTiBjb25zdCBQZW4qIHBlbiwNCi0gICAgSU4gY29uc3QgR3JhcGhpY3MqIGcpIGNvbnN0DQotew0KLSAgICBCT09MIGJvb2xuID0gRkFMU0U7DQotDQotICAgIEdwR3JhcGhpY3MqIG5hdGl2ZUdyYXBoaWNzID0gTlVMTDsNCi0gICAgR3BQZW4qIG5hdGl2ZVBlbiA9IE5VTEw7DQotDQotICAgIGlmKGcpDQotICAgICAgICBuYXRpdmVHcmFwaGljcyA9IGctPm5hdGl2ZUdyYXBoaWNzOw0KLSAgICBpZihwZW4pDQotICAgICAgICBuYXRpdmVQZW4gPSBwZW4tPm5hdGl2ZVBlbjsNCi0NCi0gICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBJc091dGxpbmVWaXNpYmxlUGF0aFBvaW50SShuYXRpdmVQYXRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIHksIG5hdGl2ZVBlbiwgbmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJvb2xuKSk7DQotICAgIHJldHVybiBib29sbjsNCi19DQotDQotI2VuZGlmDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKgorKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwgTWljcm9zb2Z0IENvcnAuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKiBNb2R1bGUgTmFtZToKKyoKKyogICBHZGlwbHVzR3JhcGhpY3MuaAorKgorKiBBYnN0cmFjdDoKKyoKKyogICBEZWNsYXJhdGlvbnMgZm9yIEdyYXBoaWNzIGNsYXNzCisqCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0dESVBMVVNHUkFQSElDU19ICisjZGVmaW5lIF9HRElQTFVTR1JBUEhJQ1NfSAorCisvKioKKyAqIFJlcHJlc2VudCBhIGdyYXBoaWNzIGNvbnRleHQKKyAqLworY2xhc3MgR3JhcGhpY3MgOiBwdWJsaWMgR2RpcGx1c0Jhc2UKK3sKK3B1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgUmVnaW9uOworICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc1BhdGg7CisgICAgZnJpZW5kIGNsYXNzIEltYWdlOworICAgIGZyaWVuZCBjbGFzcyBCaXRtYXA7CisgICAgZnJpZW5kIGNsYXNzIE1ldGFmaWxlOworICAgIGZyaWVuZCBjbGFzcyBGb250OworICAgIGZyaWVuZCBjbGFzcyBGb250RmFtaWx5OworICAgIGZyaWVuZCBjbGFzcyBGb250Q29sbGVjdGlvbjsKKyAgICBmcmllbmQgY2xhc3MgQ2FjaGVkQml0bWFwOworCisgICAgLy8gR2V0IGEgZ3JhcGhpY3MgY29udGV4dCBmcm9tIGFuIGV4aXN0aW5nIFdpbjMyIEhEQyBvciBIV05ECisgICAgc3RhdGljIEdyYXBoaWNzKiBGcm9tSERDKElOIEhEQyBoZGMpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEdyYXBoaWNzKGhkYyk7CisgICAgfQorCisgICAgc3RhdGljIEdyYXBoaWNzKiBGcm9tSERDKElOIEhEQyBoZGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIEhBTkRMRSBoZGV2aWNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBHcmFwaGljcyhoZGMsIGhkZXZpY2UpOworICAgIH0KKworICAgIHN0YXRpYyBHcmFwaGljcyogRnJvbUhXTkQoSU4gSFdORCBod25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gQk9PTCBpY20gPSBGQUxTRSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgR3JhcGhpY3MoaHduZCwgaWNtKTsKKyAgICB9CisKKyAgICBzdGF0aWMgR3JhcGhpY3MqIEZyb21JbWFnZShJTiBJbWFnZSAqaW1hZ2UpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEdyYXBoaWNzKGltYWdlKTsKKyAgICB9CisKKyAgICBHcmFwaGljcyhJTiBIREMgaGRjKQorICAgIHsKKyAgICAgICAgR3BHcmFwaGljcyAqZ3JhcGhpY3MgPSBOVUxMOworCisgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlRnJvbUhEQyhoZGMsICZncmFwaGljcyk7CisKKyAgICAgICAgU2V0TmF0aXZlR3JhcGhpY3MoZ3JhcGhpY3MpOworICAgIH0KKworICAgIEdyYXBoaWNzKElOIEhEQyBoZGMsCisgICAgICAgICAgICAgSU4gSEFORExFIGhkZXZpY2UpCisgICAgeworICAgICAgICBHcEdyYXBoaWNzICpncmFwaGljcyA9IE5VTEw7CisKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVGcm9tSERDMihoZGMsIGhkZXZpY2UsICZncmFwaGljcyk7CisKKyAgICAgICAgU2V0TmF0aXZlR3JhcGhpY3MoZ3JhcGhpY3MpOworICAgIH0KKworICAgIEdyYXBoaWNzKElOIEhXTkQgaHduZCwKKyAgICAgICAgICAgICBJTiBCT09MIGljbSA9IEZBTFNFKQorICAgIHsKKyAgICAgICAgR3BHcmFwaGljcyAqZ3JhcGhpY3MgPSBOVUxMOworCisgICAgICAgIGlmIChpY20pCisgICAgICAgIHsKKyAgICAgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlRnJvbUhXTkRJQ00oaHduZCwgJmdyYXBoaWNzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlRnJvbUhXTkQoaHduZCwgJmdyYXBoaWNzKTsKKyAgICAgICAgfQorCisgICAgICAgIFNldE5hdGl2ZUdyYXBoaWNzKGdyYXBoaWNzKTsKKyAgICB9CisKKyAgICBHcmFwaGljcyhJTiBJbWFnZSogaW1hZ2UpCisgICAgeworICAgICAgICBHcEdyYXBoaWNzICpncmFwaGljcyA9IE5VTEw7CisKKyAgICAgICAgaWYgKGltYWdlICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwR2V0SW1hZ2VHcmFwaGljc0NvbnRleHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UtPm5hdGl2ZUltYWdlLCAmZ3JhcGhpY3MpOworICAgICAgICB9CisgICAgICAgIFNldE5hdGl2ZUdyYXBoaWNzKGdyYXBoaWNzKTsKKyAgICB9CisKKyAgICB+R3JhcGhpY3MoKQorICAgIHsKKyAgICAgICAgRGxsRXhwb3J0czo6R2RpcERlbGV0ZUdyYXBoaWNzKG5hdGl2ZUdyYXBoaWNzKTsKKyAgICB9CisKKyAgICBWT0lEIEZsdXNoKElOIEZsdXNoSW50ZW50aW9uIGludGVudGlvbiA9IEZsdXNoSW50ZW50aW9uRmx1c2gpCisgICAgeworICAgICAgICBEbGxFeHBvcnRzOjpHZGlwRmx1c2gobmF0aXZlR3JhcGhpY3MsIGludGVudGlvbik7CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBJbnRlcm9wIG1ldGhvZHMKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gTG9ja3MgdGhlIGdyYXBoaWNzIHVudGlsIFJlbGVhc2VEQyBpcyBjYWxsZWQKKyAgICBIREMgR2V0SERDKCkKKyAgICB7CisgICAgICAgIEhEQyAgICAgaGRjID0gTlVMTDsKKworICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldERDKG5hdGl2ZUdyYXBoaWNzLCAmaGRjKSk7CisKKyAgICAgICAgcmV0dXJuIGhkYzsKKyAgICB9CisKKyAgICBWT0lEIFJlbGVhc2VIREMoSU4gSERDIGhkYykKKyAgICB7CisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUmVsZWFzZURDKG5hdGl2ZUdyYXBoaWNzLCBoZGMpKTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFJlbmRlcmluZyBtb2RlcworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBTdGF0dXMgU2V0UmVuZGVyaW5nT3JpZ2luKElOIElOVCB4LCBJTiBJTlQgeSkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoCisgICAgICAgICAgICBEbGxFeHBvcnRzOjpHZGlwU2V0UmVuZGVyaW5nT3JpZ2luKAorICAgICAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLCB4LCB5CisgICAgICAgICAgICApCisgICAgICAgICk7CisgICAgfQorCisgICAgU3RhdHVzIEdldFJlbmRlcmluZ09yaWdpbihPVVQgSU5UICp4LCBPVVQgSU5UICp5KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cygKKyAgICAgICAgICAgIERsbEV4cG9ydHM6OkdkaXBHZXRSZW5kZXJpbmdPcmlnaW4oCisgICAgICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsIHgsIHkKKyAgICAgICAgICAgICkKKyAgICAgICAgKTsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0Q29tcG9zaXRpbmdNb2RlKElOIENvbXBvc2l0aW5nTW9kZSBjb21wb3NpdGluZ01vZGUpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRDb21wb3NpdGluZ01vZGUobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGluZ01vZGUpKTsKKyAgICB9CisKKyAgICBDb21wb3NpdGluZ01vZGUgR2V0Q29tcG9zaXRpbmdNb2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIENvbXBvc2l0aW5nTW9kZSBtb2RlOworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0Q29tcG9zaXRpbmdNb2RlKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbW9kZSkpOworCisgICAgICAgIHJldHVybiBtb2RlOworICAgIH0KKworICAgIFN0YXR1cyBTZXRDb21wb3NpdGluZ1F1YWxpdHkoSU4gQ29tcG9zaXRpbmdRdWFsaXR5IGNvbXBvc2l0aW5nUXVhbGl0eSkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldENvbXBvc2l0aW5nUXVhbGl0eSgKKyAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgY29tcG9zaXRpbmdRdWFsaXR5KSk7CisgICAgfQorCisgICAgQ29tcG9zaXRpbmdRdWFsaXR5IEdldENvbXBvc2l0aW5nUXVhbGl0eSgpIGNvbnN0CisgICAgeworICAgICAgICBDb21wb3NpdGluZ1F1YWxpdHkgcXVhbGl0eTsKKworICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldENvbXBvc2l0aW5nUXVhbGl0eSgKKyAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgJnF1YWxpdHkpKTsKKworICAgICAgICByZXR1cm4gcXVhbGl0eTsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0VGV4dFJlbmRlcmluZ0hpbnQoSU4gVGV4dFJlbmRlcmluZ0hpbnQgbmV3TW9kZSkKKyAgICB7CisjaWZuZGVmIERDUl9VU0VfTkVXXzE4Njc2NAorCQkvKiB0ZW1wb3Jhcmx5IHNldCB0aGUgaGlnaCBiaXQgdG8gd2FybiB0aGF0IHdlIGFyZSB1c2luZyB0aGUgbmV3IGRlZmluaXRpb24gZm9yIHRoZSBmbGFnICovCisJCW5ld01vZGUgPSAoVGV4dFJlbmRlcmluZ0hpbnQpIChuZXdNb2RlIHwgMHgwZjAwMCk7CisjZW5kaWYgLy8gRENSX1VTRV9ORVdfMTg2NzY0CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFRleHRSZW5kZXJpbmdIaW50KG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld01vZGUpKTsKKyAgICB9CisKKyAgICBUZXh0UmVuZGVyaW5nSGludCBHZXRUZXh0UmVuZGVyaW5nSGludCgpIGNvbnN0CisgICAgeworICAgICAgICBUZXh0UmVuZGVyaW5nSGludCBoaW50OworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0VGV4dFJlbmRlcmluZ0hpbnQobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGludCkpOworCisgICAgICAgIHJldHVybiBoaW50OworICAgIH0KKworI2lmZGVmIERDUl9VU0VfTkVXXzE4ODkyMgorICAgIFN0YXR1cyBTZXRUZXh0Q29udHJhc3QoSU4gVUlOVCBjb250cmFzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFRleHRDb250cmFzdChuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cmFzdCkpOworICAgIH0KKworICAgIFVJTlQgR2V0VGV4dENvbnRyYXN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIFVJTlQgY29udHJhc3Q7CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRUZXh0Q29udHJhc3QobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnRyYXN0KSk7CisKKyAgICAgICAgcmV0dXJuIGNvbnRyYXN0OworICAgIH0KKyNlbHNlCisgICAgU3RhdHVzIFNldFRleHRHYW1tYVZhbHVlKElOIFVJTlQgZ2FtbWFWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFRleHRHYW1tYVZhbHVlKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhbW1hVmFsdWUpKTsKKyAgICB9CisKKyAgICBVSU5UIEdldFRleHRHYW1tYVZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIFVJTlQgZ2FtbWFWYWx1ZTsKKworICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFRleHRHYW1tYVZhbHVlKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnYW1tYVZhbHVlKSk7CisKKyAgICAgICAgcmV0dXJuIGdhbW1hVmFsdWU7CisgICAgfQorCisjZW5kaWYgLy8gRENSX1VTRV9ORVdfMTg4OTIyCisKKworICAgIEludGVycG9sYXRpb25Nb2RlIEdldEludGVycG9sYXRpb25Nb2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEludGVycG9sYXRpb25Nb2RlIG1vZGUgPSBJbnRlcnBvbGF0aW9uTW9kZUludmFsaWQ7CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRJbnRlcnBvbGF0aW9uTW9kZShuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1vZGUpKTsKKworICAgICAgICByZXR1cm4gbW9kZTsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0SW50ZXJwb2xhdGlvbk1vZGUoSU4gSW50ZXJwb2xhdGlvbk1vZGUgaW50ZXJwb2xhdGlvbk1vZGUpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRJbnRlcnBvbGF0aW9uTW9kZShuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbk1vZGUpKTsKKyAgICB9CisKKyAgICBTbW9vdGhpbmdNb2RlIEdldFNtb290aGluZ01vZGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgU21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlID0gU21vb3RoaW5nTW9kZUludmFsaWQ7CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRTbW9vdGhpbmdNb2RlKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNtb290aGluZ01vZGUpKTsKKworICAgICAgICByZXR1cm4gc21vb3RoaW5nTW9kZTsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0U21vb3RoaW5nTW9kZShJTiBTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRTbW9vdGhpbmdNb2RlKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtb290aGluZ01vZGUpKTsKKyAgICB9CisKKyAgICBQaXhlbE9mZnNldE1vZGUgR2V0UGl4ZWxPZmZzZXRNb2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIFBpeGVsT2Zmc2V0TW9kZSBwaXhlbE9mZnNldE1vZGUgPSBQaXhlbE9mZnNldE1vZGVJbnZhbGlkOworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGl4ZWxPZmZzZXRNb2RlKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGl4ZWxPZmZzZXRNb2RlKSk7CisKKyAgICAgICAgcmV0dXJuIHBpeGVsT2Zmc2V0TW9kZTsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0UGl4ZWxPZmZzZXRNb2RlKElOIFBpeGVsT2Zmc2V0TW9kZSBwaXhlbE9mZnNldE1vZGUpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQaXhlbE9mZnNldE1vZGUobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbE9mZnNldE1vZGUpKTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIE1hbmlwdWxhdGUgdGhlIGN1cnJlbnQgd29ybGQgdHJhbnNmb3JtCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFN0YXR1cyBTZXRUcmFuc2Zvcm0oSU4gY29uc3QgTWF0cml4KiBtYXRyaXgpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRXb3JsZFRyYW5zZm9ybShuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT5uYXRpdmVNYXRyaXgpKTsKKyAgICB9CisgICAgU3RhdHVzIFJlc2V0VHJhbnNmb3JtKCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFJlc2V0V29ybGRUcmFuc2Zvcm0obmF0aXZlR3JhcGhpY3MpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgTXVsdGlwbHlUcmFuc2Zvcm0oSU4gY29uc3QgTWF0cml4KiBtYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIE1hdHJpeE9yZGVyIG9yZGVyID0gTWF0cml4T3JkZXJQcmVwZW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwTXVsdGlwbHlXb3JsZFRyYW5zZm9ybShuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgtPm5hdGl2ZU1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcikpOworICAgIH0KKworICAgIFN0YXR1cyBUcmFuc2xhdGVUcmFuc2Zvcm0oSU4gUkVBTCBkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgZHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFRyYW5zbGF0ZVdvcmxkVHJhbnNmb3JtKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHgsIGR5LCBvcmRlcikpOworICAgIH0KKworICAgIFN0YXR1cyBTY2FsZVRyYW5zZm9ybShJTiBSRUFMIHN4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNjYWxlV29ybGRUcmFuc2Zvcm0obmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3gsIHN5LCBvcmRlcikpOworICAgIH0KKworICAgIFN0YXR1cyBSb3RhdGVUcmFuc2Zvcm0oSU4gUkVBTCBhbmdsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIE1hdHJpeE9yZGVyIG9yZGVyID0gTWF0cml4T3JkZXJQcmVwZW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUm90YXRlV29ybGRUcmFuc2Zvcm0obmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlLCBvcmRlcikpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiB0aGUgY3VycmVudCB3b3JsZCB0cmFuc2Zvcm0KKyAgICAgKi8KKworICAgIFN0YXR1cyBHZXRUcmFuc2Zvcm0oT1VUIE1hdHJpeCogbWF0cml4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0V29ybGRUcmFuc2Zvcm0obmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+bmF0aXZlTWF0cml4KSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogTWFuaXB1bGF0ZSB0aGUgY3VycmVudCBwYWdlIHRyYW5zZm9ybQorICAgICAqLworCisgICAgU3RhdHVzIFNldFBhZ2VVbml0KElOIFVuaXQgdW5pdCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBhZ2VVbml0KG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0KSk7CisgICAgfQorCisgICAgU3RhdHVzIFNldFBhZ2VTY2FsZShJTiBSRUFMIHNjYWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGFnZVNjYWxlKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXRyaWV2ZSB0aGUgY3VycmVudCBwYWdlIHRyYW5zZm9ybSBpbmZvcm1hdGlvbgorICAgICAqIG5vdGVzIEAgdGhlc2UgYXJlIGF0b21pYworICAgICAqLworICAgIFVuaXQgR2V0UGFnZVVuaXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgVW5pdCB1bml0OworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGFnZVVuaXQobmF0aXZlR3JhcGhpY3MsICZ1bml0KSk7CisKKyAgICAgICAgcmV0dXJuIHVuaXQ7CisgICAgfQorCisgICAgUkVBTCBHZXRQYWdlU2NhbGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgUkVBTCBzY2FsZTsKKworICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhZ2VTY2FsZShuYXRpdmVHcmFwaGljcywgJnNjYWxlKSk7CisKKyAgICAgICAgcmV0dXJuIHNjYWxlOworICAgIH0KKworICAgIFJFQUwgR2V0RHBpWCgpIGNvbnN0CisgICAgeworICAgICAgICBSRUFMIGRwaTsKKworICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldERwaVgobmF0aXZlR3JhcGhpY3MsICZkcGkpKTsKKworICAgICAgICByZXR1cm4gZHBpOworICAgIH0KKworICAgIFJFQUwgR2V0RHBpWSgpIGNvbnN0CisgICAgeworICAgICAgICBSRUFMIGRwaTsKKworICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldERwaVkobmF0aXZlR3JhcGhpY3MsICZkcGkpKTsKKworICAgICAgICByZXR1cm4gZHBpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRyYW5zZm9ybSBwb2ludHMgaW4gdGhlIGN1cnJlbnQgZ3JhcGhpY3MgY29udGV4dAorICAgICAqLworICAgIC8vIGZsb2F0IHZlcnNpb24KKyAgICBTdGF0dXMgVHJhbnNmb3JtUG9pbnRzKElOIENvb3JkaW5hdGVTcGFjZSBkZXN0U3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBDb29yZGluYXRlU3BhY2Ugc3JjU3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBPVVQgUG9pbnRGKiBwdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBUcmFuc2Zvcm1Qb2ludHMobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0U3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7CisgICAgfQorCisgICAgLy8gaW50ZWdlciB2ZXJzaW9uCisgICAgU3RhdHVzIFRyYW5zZm9ybVBvaW50cyhJTiBDb29yZGluYXRlU3BhY2UgZGVzdFNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gQ29vcmRpbmF0ZVNwYWNlIHNyY1NwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gT1VUIFBvaW50KiBwdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpIGNvbnN0CisgICAgeworCisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFRyYW5zZm9ybVBvaW50c0kobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1NwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOworICAgIH0KKworICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gR2V0TmVhcmVzdENvbG9yIChmb3IgPD0gOGJwcCBzdXJmYWNlcykKKyAgICAvLyBOb3RlOiBhbHBoYSBpcyBpZ25vcmVkCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTdGF0dXMgR2V0TmVhcmVzdENvbG9yKElOIE9VVCBDb2xvciogY29sb3IpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoY29sb3IgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhJbnZhbGlkUGFyYW1ldGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIEFSR0IgYXJnYiA9IGNvbG9yLT5HZXRWYWx1ZSgpOworCisgICAgICAgIFN0YXR1cyBzdGF0dXMgPSBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldE5lYXJlc3RDb2xvcihuYXRpdmVHcmFwaGljcywgJmFyZ2IpKTsKKworICAgICAgICBjb2xvci0+U2V0VmFsdWUoYXJnYik7CisKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBWZWN0b3IgZHJhd2luZyBtZXRob2RzCisgICAgICoKKyAgICAgKiBAbm90ZXMgRG8gd2UgbmVlZCBhIHNldCBvZiBtZXRob2RzIHRoYXQgdGFrZQorICAgICAqICBpbnRlZ2VyIGNvb3JkaW5hdGUgcGFyYW1ldGVycz8KKyAgICAgKi8KKworICAgIC8vIGZsb2F0IHZlcnNpb24KKyAgICBTdGF0dXMgRHJhd0xpbmUoSU4gY29uc3QgUGVuKiBwZW4sCisgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeDEsCisgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeTEsCisgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeDIsCisgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeTIpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3TGluZShuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sIHgxLCB5MSwgeDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyKSk7CisgICAgfQorCisgICAgU3RhdHVzIERyYXdMaW5lKElOIGNvbnN0IFBlbiogcGVuLAorICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYmIHB0MSwKKyAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnRGJiBwdDIpCisgICAgeworICAgICAgICByZXR1cm4gRHJhd0xpbmUocGVuLCBwdDEuWCwgcHQxLlksIHB0Mi5YLCBwdDIuWSk7CisgICAgfQorCisgICAgU3RhdHVzIERyYXdMaW5lcyhJTiBjb25zdCBQZW4qIHBlbiwKKyAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50RiogcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0xpbmVzKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsIGNvdW50KSk7CisgICAgfQorCisgICAgLy8gaW50IHZlcnNpb24KKyAgICBTdGF0dXMgRHJhd0xpbmUoSU4gY29uc3QgUGVuKiBwZW4sCisgICAgICAgICAgICAgICAgICAgIElOIElOVCB4MSwKKyAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHkxLAorICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeDIsCisgICAgICAgICAgICAgICAgICAgIElOIElOVCB5MikKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdMaW5lSShuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTIpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgRHJhd0xpbmUoSU4gY29uc3QgUGVuKiBwZW4sCisgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50JiBwdDEsCisgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50JiBwdDIpCisgICAgeworICAgICAgICByZXR1cm4gRHJhd0xpbmUocGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgcHQxLlgsCisgICAgICAgICAgICAgICAgICAgICAgICBwdDEuWSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHB0Mi5YLAorICAgICAgICAgICAgICAgICAgICAgICAgcHQyLlkpOworICAgIH0KKworICAgIFN0YXR1cyBEcmF3TGluZXMoSU4gY29uc3QgUGVuKiBwZW4sCisgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludCogcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0xpbmVzSShuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW4tPm5hdGl2ZVBlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsKKyAgICB9CisKKyAgICAvLyBmbG9hdCB2ZXJzaW9uCisgICAgU3RhdHVzIERyYXdBcmMoSU4gY29uc3QgUGVuKiBwZW4sCisgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB4LAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeSwKKyAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHdpZHRoLAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3RhcnRBbmdsZSwKKyAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN3ZWVwQW5nbGUpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3QXJjKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRBbmdsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2VlcEFuZ2xlKSk7CisgICAgfQorCisgICAgU3RhdHVzIERyYXdBcmMoSU4gY29uc3QgUGVuKiBwZW4sCisgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdEYmIHJlY3QsCisgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzdGFydEFuZ2xlLAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3dlZXBBbmdsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBEcmF3QXJjKHBlbiwgcmVjdC5YLCByZWN0LlksIHJlY3QuV2lkdGgsIHJlY3QuSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICBzdGFydEFuZ2xlLCBzd2VlcEFuZ2xlKTsKKyAgICB9CisKKyAgICAvLyBpbnQgdmVyc2lvbgorICAgIFN0YXR1cyBEcmF3QXJjKElOIGNvbnN0IFBlbiogcGVuLAorICAgICAgICAgICAgICAgICAgIElOIElOVCB4LAorICAgICAgICAgICAgICAgICAgIElOIElOVCB5LAorICAgICAgICAgICAgICAgICAgIElOIElOVCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICBJTiBJTlQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3RhcnRBbmdsZSwKKyAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN3ZWVwQW5nbGUpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3QXJjSShuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3ZWVwQW5nbGUpKTsKKyAgICB9CisKKworICAgIFN0YXR1cyBEcmF3QXJjKElOIGNvbnN0IFBlbiogcGVuLAorICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3QmIHJlY3QsCisgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzdGFydEFuZ2xlLAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3dlZXBBbmdsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBEcmF3QXJjKHBlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5YLAorICAgICAgICAgICAgICAgICAgICAgICByZWN0LlksCisgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICBzdGFydEFuZ2xlLAorICAgICAgICAgICAgICAgICAgICAgICBzd2VlcEFuZ2xlKTsKKyAgICB9CisKKyAgICAvLyBmbG9hdCB2ZXJzaW9uCisgICAgU3RhdHVzIERyYXdCZXppZXIoSU4gY29uc3QgUGVuKiBwZW4sCisgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB4MSwKKyAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHkxLAorICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeDIsCisgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5MiwKKyAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHgzLAorICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeTMsCisgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB4NCwKKyAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHk0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0JlemllcihuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW4tPm5hdGl2ZVBlbiwgeDEsIHkxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyLCB5MiwgeDMsIHkzLCB4NCwgeTQpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgRHJhd0JlemllcihJTiBjb25zdCBQZW4qIHBlbiwKKyAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYmIHB0MSwKKyAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYmIHB0MiwKKyAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYmIHB0MywKKyAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYmIHB0NCkKKyAgICB7CisgICAgICAgIHJldHVybiBEcmF3QmV6aWVyKHBlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHQxLlgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHB0MS5ZLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwdDIuWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHQyLlksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHB0My5YLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwdDMuWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHQ0LlgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHB0NC5ZKTsKKyAgICB9CisKKyAgICBTdGF0dXMgRHJhd0JlemllcnMoSU4gY29uc3QgUGVuKiBwZW4sCisgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50RiogcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3QmV6aWVycyhuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsKKyAgICB9CisKKyAgICAvLyBpbnQgdmVyc2lvbgorICAgIFN0YXR1cyBEcmF3QmV6aWVyKElOIGNvbnN0IFBlbiogcGVuLAorICAgICAgICAgICAgICAgICAgICAgIElOIElOVCB4MSwKKyAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeTEsCisgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHgyLAorICAgICAgICAgICAgICAgICAgICAgIElOIElOVCB5MiwKKyAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeDMsCisgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHkzLAorICAgICAgICAgICAgICAgICAgICAgIElOIElOVCB4NCwKKyAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeTQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3QmV6aWVySShuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5NCkpOworICAgIH0KKworICAgIFN0YXR1cyBEcmF3QmV6aWVyKElOIGNvbnN0IFBlbiogcGVuLAorICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50JiBwdDEsCisgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnQmIHB0MiwKKyAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludCYgcHQzLAorICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50JiBwdDQpCisgICAgeworICAgICAgICByZXR1cm4gRHJhd0JlemllcihwZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHB0MS5YLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwdDEuWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHQyLlgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHB0Mi5ZLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwdDMuWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHQzLlksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHB0NC5YLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwdDQuWSk7CisgICAgfQorCisgICAgU3RhdHVzIERyYXdCZXppZXJzKElOIGNvbnN0IFBlbiogcGVuLAorICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludCogcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3QmV6aWVyc0kobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW4tPm5hdGl2ZVBlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7CisgICAgfQorCisgICAgLy8gZmxvYXQgdmVyc2lvbgorICAgIFN0YXR1cyBEcmF3UmVjdGFuZ2xlKElOIGNvbnN0IFBlbiogcGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3RGJiByZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIERyYXdSZWN0YW5nbGUocGVuLCByZWN0LlgsIHJlY3QuWSwgcmVjdC5XaWR0aCwgcmVjdC5IZWlnaHQpOworICAgIH0KKworICAgIFN0YXR1cyBEcmF3UmVjdGFuZ2xlKElOIGNvbnN0IFBlbiogcGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIGhlaWdodCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdSZWN0YW5nbGUobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sIHgsIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCkpOworICAgIH0KKworICAgIFN0YXR1cyBEcmF3UmVjdGFuZ2xlcyhJTiBjb25zdCBQZW4qIHBlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdEYqIHJlY3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3UmVjdGFuZ2xlcyhuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3RzLCBjb3VudCkpOworICAgIH0KKworICAgIC8vIGludGVnZXIgdmVyc2lvbgorICAgIFN0YXR1cyBEcmF3UmVjdGFuZ2xlKElOIGNvbnN0IFBlbiogcGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gRHJhd1JlY3RhbmdsZShwZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5ZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LldpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LkhlaWdodCk7CisgICAgfQorCisgICAgU3RhdHVzIERyYXdSZWN0YW5nbGUoSU4gY29uc3QgUGVuKiBwZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBoZWlnaHQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3UmVjdGFuZ2xlSShuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgRHJhd1JlY3RhbmdsZXMoSU4gY29uc3QgUGVuKiBwZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3QqIHJlY3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3UmVjdGFuZ2xlc0kobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW4tPm5hdGl2ZVBlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsKKyAgICB9CisKKyAgICAvLyBmbG9hdCB2ZXJzaW9uCisgICAgU3RhdHVzIERyYXdFbGxpcHNlKElOIGNvbnN0IFBlbiogcGVuLAorICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0RiYgcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBEcmF3RWxsaXBzZShwZW4sIHJlY3QuWCwgcmVjdC5ZLCByZWN0LldpZHRoLCByZWN0LkhlaWdodCk7CisgICAgfQorCisgICAgU3RhdHVzIERyYXdFbGxpcHNlKElOIGNvbnN0IFBlbiogcGVuLAorICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHgsCisgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBoZWlnaHQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3RWxsaXBzZShuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQpKTsKKyAgICB9CisKKyAgICAvLyBpbnRlZ2VyIHZlcnNpb24KKyAgICBTdGF0dXMgRHJhd0VsbGlwc2UoSU4gY29uc3QgUGVuKiBwZW4sCisgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gRHJhd0VsbGlwc2UocGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5YLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5ZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5XaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuSGVpZ2h0KTsKKyAgICB9CisKKyAgICBTdGF0dXMgRHJhd0VsbGlwc2UoSU4gY29uc3QgUGVuKiBwZW4sCisgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCB4LAorICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgaGVpZ2h0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0VsbGlwc2VJKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KSk7CisgICAgfQorCisgICAgLy8gZmxvYXRpbmcgcG9pbnQgdmVyc2lvbgorICAgIFN0YXR1cyBEcmF3UGllKElOIGNvbnN0IFBlbiogcGVuLAorICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3RGJiByZWN0LAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3RhcnRBbmdsZSwKKyAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN3ZWVwQW5nbGUpCisgICAgeworICAgICAgICByZXR1cm4gRHJhd1BpZShwZW4sCisgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuWCwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5ZLAorICAgICAgICAgICAgICAgICAgICAgICByZWN0LldpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICByZWN0LkhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRBbmdsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3dlZXBBbmdsZSk7CisgICAgfQorCisgICAgU3RhdHVzIERyYXdQaWUoSU4gY29uc3QgUGVuKiBwZW4sCisgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB4LAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeSwKKyAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHdpZHRoLAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3RhcnRBbmdsZSwKKyAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN3ZWVwQW5nbGUpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3UGllKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRBbmdsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2VlcEFuZ2xlKSk7CisgICAgfQorCisgICAgLy8gaW50ZWdlciBwb2ludCB2ZXJzaW9uCisgICAgU3RhdHVzIERyYXdQaWUoSU4gY29uc3QgUGVuKiBwZW4sCisgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdCYgcmVjdCwKKyAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN0YXJ0QW5nbGUsCisgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzd2VlcEFuZ2xlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERyYXdQaWUocGVuLAorICAgICAgICAgICAgICAgICAgICAgICByZWN0LlgsCisgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuWSwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5XaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5IZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsCisgICAgICAgICAgICAgICAgICAgICAgIHN3ZWVwQW5nbGUpOworICAgIH0KKworICAgIFN0YXR1cyBEcmF3UGllKElOIGNvbnN0IFBlbiogcGVuLAorICAgICAgICAgICAgICAgICAgIElOIElOVCB4LAorICAgICAgICAgICAgICAgICAgIElOIElOVCB5LAorICAgICAgICAgICAgICAgICAgIElOIElOVCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICBJTiBJTlQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3RhcnRBbmdsZSwKKyAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN3ZWVwQW5nbGUpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3UGllSShuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3ZWVwQW5nbGUpKTsKKyAgICB9CisKKyAgICAvLyBmbG9hdCB2ZXJzaW9uCisgICAgU3RhdHVzIERyYXdQb2x5Z29uKElOIGNvbnN0IFBlbiogcGVuLAorICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYqIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd1BvbHlnb24obmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7CisgICAgfQorCisgICAgLy8gaW50ZWdlciB2ZXJzaW9uCisgICAgU3RhdHVzIERyYXdQb2x5Z29uKElOIGNvbnN0IFBlbiogcGVuLAorICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludCogcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3UG9seWdvbkkobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW4tPm5hdGl2ZVBlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7CisgICAgfQorCisgICAgLy8gZmxvYXQgdmVyc2lvbgorICAgIFN0YXR1cyBEcmF3UGF0aChJTiBjb25zdCBQZW4qIHBlbiwKKyAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3NQYXRoKiBwYXRoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd1BhdGgobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbiA/IHBlbi0+bmF0aXZlUGVuIDogTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA/IHBhdGgtPm5hdGl2ZVBhdGggOiBOVUxMKSk7CisgICAgfQorCisgICAgLy8gZmxvYXQgdmVyc2lvbgorICAgIFN0YXR1cyBEcmF3Q3VydmUoSU4gY29uc3QgUGVuKiBwZW4sCisgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYqIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdDdXJ2ZShuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLCBwb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOworICAgIH0KKworICAgIFN0YXR1cyBEcmF3Q3VydmUoSU4gY29uc3QgUGVuKiBwZW4sCisgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYqIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgdGVuc2lvbikKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdDdXJ2ZTIobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCwgdGVuc2lvbikpOworICAgIH0KKworICAgIFN0YXR1cyBEcmF3Q3VydmUoSU4gY29uc3QgUGVuKiBwZW4sCisgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYqIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgIElOIElOVCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgbnVtYmVyT2ZTZWdtZW50cywKKyAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgdGVuc2lvbiA9IDAuNWYpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3Q3VydmUzKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLCBwb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlNlZ21lbnRzLCB0ZW5zaW9uKSk7CisgICAgfQorCisgICAgLy8gaW50ZWdlciB2ZXJzaW9uCisgICAgU3RhdHVzIERyYXdDdXJ2ZShJTiBjb25zdCBQZW4qIHBlbiwKKyAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50KiBwb2ludHMsCisgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3Q3VydmVJKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOworICAgIH0KKworICAgIFN0YXR1cyBEcmF3Q3VydmUoSU4gY29uc3QgUGVuKiBwZW4sCisgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludCogcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB0ZW5zaW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0N1cnZlMkkobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5zaW9uKSk7CisgICAgfQorCisgICAgU3RhdHVzIERyYXdDdXJ2ZShJTiBjb25zdCBQZW4qIHBlbiwKKyAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50KiBwb2ludHMsCisgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQsCisgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIG51bWJlck9mU2VnbWVudHMsCisgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHRlbnNpb24gPSAwLjVmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0N1cnZlM0kobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mU2VnbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbnNpb24pKTsKKyAgICB9CisKKyAgICAvLyBmbG9hdCB2ZXJzaW9uCisgICAgU3RhdHVzIERyYXdDbG9zZWRDdXJ2ZShJTiBjb25zdCBQZW4qIHBlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50RiogcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0Nsb3NlZEN1cnZlKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsIGNvdW50KSk7CisgICAgfQorCisgICAgU3RhdHVzIERyYXdDbG9zZWRDdXJ2ZShJTiBjb25zdCBQZW4gKnBlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50RiogcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB0ZW5zaW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0Nsb3NlZEN1cnZlMihuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW4tPm5hdGl2ZVBlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbnNpb24pKTsKKyAgICB9CisKKyAgICAvLyBpbnRlZ2VyIHZlcnNpb24KKyAgICBTdGF0dXMgRHJhd0Nsb3NlZEN1cnZlKElOIGNvbnN0IFBlbiogcGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnQqIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdDbG9zZWRDdXJ2ZUkobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7CisgICAgfQorCisgICAgU3RhdHVzIERyYXdDbG9zZWRDdXJ2ZShJTiBjb25zdCBQZW4gKnBlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50KiBwb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHRlbnNpb24pCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3Q2xvc2VkQ3VydmUySShuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuLT5uYXRpdmVQZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbnNpb24pKTsKKyAgICB9CisKKyAgICBTdGF0dXMgQ2xlYXIoSU4gY29uc3QgQ29sb3IgJmNvbG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR3JhcGhpY3NDbGVhcigKKyAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgY29sb3IuR2V0VmFsdWUoKSkpOworICAgIH0KKworICAgIC8vIGZsb2F0IHZlcnNpb24KKyAgICBTdGF0dXMgRmlsbFJlY3RhbmdsZShJTiBjb25zdCBCcnVzaCogYnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdEYmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gRmlsbFJlY3RhbmdsZShicnVzaCwgcmVjdC5YLCByZWN0LlksIHJlY3QuV2lkdGgsIHJlY3QuSGVpZ2h0KTsKKyAgICB9CisKKyAgICBTdGF0dXMgRmlsbFJlY3RhbmdsZShJTiBjb25zdCBCcnVzaCogYnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB4LAorICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgaGVpZ2h0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRmlsbFJlY3RhbmdsZShuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicnVzaC0+bmF0aXZlQnJ1c2gsIHgsIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCkpOworICAgIH0KKworICAgIFN0YXR1cyBGaWxsUmVjdGFuZ2xlcyhJTiBjb25zdCBCcnVzaCogYnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3RGKiByZWN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRmlsbFJlY3RhbmdsZXMobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJydXNoLT5uYXRpdmVCcnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdHMsIGNvdW50KSk7CisgICAgfQorCisgICAgLy8gaW50ZWdlciB2ZXJzaW9uCisgICAgU3RhdHVzIEZpbGxSZWN0YW5nbGUoSU4gY29uc3QgQnJ1c2gqIGJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gRmlsbFJlY3RhbmdsZShicnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5YLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuSGVpZ2h0KTsKKyAgICB9CisKKyAgICBTdGF0dXMgRmlsbFJlY3RhbmdsZShJTiBjb25zdCBCcnVzaCogYnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBoZWlnaHQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBGaWxsUmVjdGFuZ2xlSShuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJ1c2gtPm5hdGl2ZUJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KSk7CisgICAgfQorCisgICAgU3RhdHVzIEZpbGxSZWN0YW5nbGVzKElOIGNvbnN0IEJydXNoKiBicnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdCogcmVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEZpbGxSZWN0YW5nbGVzSShuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJydXNoLT5uYXRpdmVCcnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsKKyAgICB9CisKKyAgICAvLyBmbG9hdCB2ZXJzaW9uCisgICAgU3RhdHVzIEZpbGxQb2x5Z29uKElOIGNvbnN0IEJydXNoKiBicnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnRGKiBwb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBGaWxsUG9seWdvbihicnVzaCwgcG9pbnRzLCBjb3VudCwgRmlsbE1vZGVBbHRlcm5hdGUpOworICAgIH0KKworICAgIFN0YXR1cyBGaWxsUG9seWdvbihJTiBjb25zdCBCcnVzaCogYnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50RiogcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgIElOIEZpbGxNb2RlIGZpbGxNb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRmlsbFBvbHlnb24obmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJydXNoLT5uYXRpdmVCcnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLCBjb3VudCwgZmlsbE1vZGUpKTsKKyAgICB9CisKKyAgICAvLyBpbnRlZ2VyIHZlcnNpb24KKyAgICBTdGF0dXMgRmlsbFBvbHlnb24oSU4gY29uc3QgQnJ1c2gqIGJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludCogcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpCisgICAgeworICAgICAgICByZXR1cm4gRmlsbFBvbHlnb24oYnJ1c2gsIHBvaW50cywgY291bnQsIEZpbGxNb2RlQWx0ZXJuYXRlKTsKKyAgICB9CisKKyAgICBTdGF0dXMgRmlsbFBvbHlnb24oSU4gY29uc3QgQnJ1c2gqIGJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludCogcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgIElOIEZpbGxNb2RlIGZpbGxNb2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRmlsbFBvbHlnb25JKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJ1c2gtPm5hdGl2ZUJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxNb2RlKSk7CisgICAgfQorCisgICAgLy8gZmxvYXQgdmVyc2lvbgorICAgIFN0YXR1cyBGaWxsRWxsaXBzZShJTiBjb25zdCBCcnVzaCogYnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3RGJiByZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZpbGxFbGxpcHNlKGJydXNoLCByZWN0LlgsIHJlY3QuWSwgcmVjdC5XaWR0aCwgcmVjdC5IZWlnaHQpOworICAgIH0KKworICAgIFN0YXR1cyBGaWxsRWxsaXBzZShJTiBjb25zdCBCcnVzaCogYnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5LAorICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIGhlaWdodCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEZpbGxFbGxpcHNlKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicnVzaC0+bmF0aXZlQnJ1c2gsIHgsIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQpKTsKKyAgICB9CisKKyAgICAvLyBpbnRlZ2VyIHZlcnNpb24KKyAgICBTdGF0dXMgRmlsbEVsbGlwc2UoSU4gY29uc3QgQnJ1c2gqIGJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZpbGxFbGxpcHNlKGJydXNoLCByZWN0LlgsIHJlY3QuWSwgcmVjdC5XaWR0aCwgcmVjdC5IZWlnaHQpOworICAgIH0KKworICAgIFN0YXR1cyBGaWxsRWxsaXBzZShJTiBjb25zdCBCcnVzaCogYnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCB4LAorICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgaGVpZ2h0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRmlsbEVsbGlwc2VJKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJ1c2gtPm5hdGl2ZUJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCkpOworICAgIH0KKworICAgIC8vIGZsb2F0IHZlcnNpb24KKyAgICBTdGF0dXMgRmlsbFBpZShJTiBjb25zdCBCcnVzaCogYnJ1c2gsCisgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdEYmIHJlY3QsCisgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzdGFydEFuZ2xlLAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3dlZXBBbmdsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBGaWxsUGllKGJydXNoLCByZWN0LlgsIHJlY3QuWSwgcmVjdC5XaWR0aCwgcmVjdC5IZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsIHN3ZWVwQW5nbGUpOworICAgIH0KKworICAgIFN0YXR1cyBGaWxsUGllKElOIGNvbnN0IEJydXNoKiBicnVzaCwKKyAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHgsCisgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5LAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzdGFydEFuZ2xlLAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3dlZXBBbmdsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEZpbGxQaWUobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJ1c2gtPm5hdGl2ZUJydXNoLCB4LCB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIHN0YXJ0QW5nbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dlZXBBbmdsZSkpOworICAgIH0KKworICAgIC8vIGludGVnZXIgdmVyc2lvbgorICAgIFN0YXR1cyBGaWxsUGllKElOIGNvbnN0IEJydXNoKiBicnVzaCwKKyAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0JiByZWN0LAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3RhcnRBbmdsZSwKKyAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN3ZWVwQW5nbGUpCisgICAgeworICAgICAgICByZXR1cm4gRmlsbFBpZShicnVzaCwgcmVjdC5YLCByZWN0LlksIHJlY3QuV2lkdGgsIHJlY3QuSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICBzdGFydEFuZ2xlLCBzd2VlcEFuZ2xlKTsKKyAgICB9CisKKyAgICBTdGF0dXMgRmlsbFBpZShJTiBjb25zdCBCcnVzaCogYnJ1c2gsCisgICAgICAgICAgICAgICAgICAgSU4gSU5UIHgsCisgICAgICAgICAgICAgICAgICAgSU4gSU5UIHksCisgICAgICAgICAgICAgICAgICAgSU4gSU5UIHdpZHRoLAorICAgICAgICAgICAgICAgICAgIElOIElOVCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzdGFydEFuZ2xlLAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3dlZXBBbmdsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEZpbGxQaWVJKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicnVzaC0+bmF0aXZlQnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3ZWVwQW5nbGUpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgRmlsbFBhdGgoSU4gY29uc3QgQnJ1c2gqIGJydXNoLAorICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBHcmFwaGljc1BhdGgqIHBhdGgpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBGaWxsUGF0aChuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJ1c2gtPm5hdGl2ZUJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLT5uYXRpdmVQYXRoKSk7CisgICAgfQorCisgICAgLy8gZmxvYXQgdmVyc2lvbgorICAgIFN0YXR1cyBGaWxsQ2xvc2VkQ3VydmUoSU4gY29uc3QgQnJ1c2gqIGJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnRGKiBwb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBGaWxsQ2xvc2VkQ3VydmUobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicnVzaC0+bmF0aXZlQnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsIGNvdW50KSk7CisKKyAgICB9CisKKyAgICBTdGF0dXMgRmlsbENsb3NlZEN1cnZlKElOIGNvbnN0IEJydXNoKiBicnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50RiogcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gRmlsbE1vZGUgZmlsbE1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHRlbnNpb24gPSAwLjVmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRmlsbENsb3NlZEN1cnZlMihuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicnVzaC0+bmF0aXZlQnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5zaW9uLCBmaWxsTW9kZSkpOworICAgIH0KKworICAgIC8vIGludGVnZXIgdmVyc2lvbgorICAgIFN0YXR1cyBGaWxsQ2xvc2VkQ3VydmUoSU4gY29uc3QgQnJ1c2gqIGJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnQqIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEZpbGxDbG9zZWRDdXJ2ZUkobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJ1c2gtPm5hdGl2ZUJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOworICAgIH0KKworICAgIFN0YXR1cyBGaWxsQ2xvc2VkQ3VydmUoSU4gY29uc3QgQnJ1c2gqIGJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnQqIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIEZpbGxNb2RlIGZpbGxNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB0ZW5zaW9uID0gMC41ZikKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEZpbGxDbG9zZWRDdXJ2ZTJJKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicnVzaC0+bmF0aXZlQnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbnNpb24sIGZpbGxNb2RlKSk7CisgICAgfQorCisgICAgLy8gZmxvYXQgdmVyc2lvbgorICAgIFN0YXR1cyBGaWxsUmVnaW9uKElOIGNvbnN0IEJydXNoKiBicnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWdpb24qIHJlZ2lvbikKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEZpbGxSZWdpb24obmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJ1c2gtPm5hdGl2ZUJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbi0+bmF0aXZlUmVnaW9uKSk7CisgICAgfQorCisgICAgLy8gRHJhd1N0cmluZyBhbmQgTWVhc3VyZVN0cmluZworICAgIFN0YXR1cworICAgIERyYXdTdHJpbmcoCisgICAgICAgIElOIGNvbnN0IFdDSEFSICAgICAgICAqc3RyaW5nLAorICAgICAgICBJTiBJTlQgICAgICAgICAgICAgICAgIGxlbmd0aCwKKyAgICAgICAgSU4gY29uc3QgRm9udCAgICAgICAgICpmb250LAorICAgICAgICBJTiBjb25zdCBSZWN0RiAgICAgICAgJmxheW91dFJlY3QsCisgICAgICAgIElOIGNvbnN0IFN0cmluZ0Zvcm1hdCAqc3RyaW5nRm9ybWF0LAorICAgICAgICBJTiBjb25zdCBCcnVzaCAgICAgICAgKmJydXNoCisgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd1N0cmluZygKKyAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgc3RyaW5nLAorICAgICAgICAgICAgbGVuZ3RoLAorICAgICAgICAgICAgZm9udCA/IGZvbnQtPm5hdGl2ZUZvbnQgOiBOVUxMLAorICAgICAgICAgICAgJmxheW91dFJlY3QsCisgICAgICAgICAgICBzdHJpbmdGb3JtYXQgPyBzdHJpbmdGb3JtYXQtPm5hdGl2ZUZvcm1hdCA6IE5VTEwsCisgICAgICAgICAgICBicnVzaCA/IGJydXNoLT5uYXRpdmVCcnVzaCA6IE5VTEwKKyAgICAgICAgKSk7CisgICAgfQorCisgICAgU3RhdHVzCisgICAgRHJhd1N0cmluZygKKyAgICAgICAgY29uc3QgV0NIQVIgICAgICAgICpzdHJpbmcsCisgICAgICAgIElOVCAgICAgICAgICAgICAgICAgbGVuZ3RoLAorICAgICAgICBjb25zdCBGb250ICAgICAgICAgKmZvbnQsCisgICAgICAgIGNvbnN0IFBvaW50RiAgICAgICAmb3JpZ2luLAorICAgICAgICBjb25zdCBCcnVzaCAgICAgICAgKmJydXNoCisgICAgKQorICAgIHsKKyAgICAgICAgUmVjdEYgcmVjdChvcmlnaW4uWCwgb3JpZ2luLlksIDAuMGYsIDAuMGYpOworCisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdTdHJpbmcoCisgICAgICAgICAgICBuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgIHN0cmluZywKKyAgICAgICAgICAgIGxlbmd0aCwKKyAgICAgICAgICAgIGZvbnQgPyBmb250LT5uYXRpdmVGb250IDogTlVMTCwKKyAgICAgICAgICAgICZyZWN0LAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIGJydXNoID8gYnJ1c2gtPm5hdGl2ZUJydXNoIDogTlVMTAorICAgICAgICApKTsKKyAgICB9CisKKyAgICBTdGF0dXMKKyAgICBEcmF3U3RyaW5nKAorICAgICAgICBjb25zdCBXQ0hBUiAgICAgICAgKnN0cmluZywKKyAgICAgICAgSU5UICAgICAgICAgICAgICAgICBsZW5ndGgsCisgICAgICAgIGNvbnN0IEZvbnQgICAgICAgICAqZm9udCwKKyAgICAgICAgY29uc3QgUG9pbnRGICAgICAgICZvcmlnaW4sCisgICAgICAgIGNvbnN0IFN0cmluZ0Zvcm1hdCAqc3RyaW5nRm9ybWF0LAorICAgICAgICBjb25zdCBCcnVzaCAgICAgICAgKmJydXNoCisgICAgKQorICAgIHsKKyAgICAgICAgUmVjdEYgcmVjdChvcmlnaW4uWCwgb3JpZ2luLlksIDAuMGYsIDAuMGYpOworCisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdTdHJpbmcoCisgICAgICAgICAgICBuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgIHN0cmluZywKKyAgICAgICAgICAgIGxlbmd0aCwKKyAgICAgICAgICAgIGZvbnQgPyBmb250LT5uYXRpdmVGb250IDogTlVMTCwKKyAgICAgICAgICAgICZyZWN0LAorICAgICAgICAgICAgc3RyaW5nRm9ybWF0ID8gc3RyaW5nRm9ybWF0LT5uYXRpdmVGb3JtYXQgOiBOVUxMLAorICAgICAgICAgICAgYnJ1c2ggPyBicnVzaC0+bmF0aXZlQnJ1c2ggOiBOVUxMCisgICAgICAgICkpOworICAgIH0KKworICAgIFN0YXR1cworICAgIE1lYXN1cmVTdHJpbmcoCisgICAgICAgIElOIGNvbnN0IFdDSEFSICAgICAgICAqc3RyaW5nLAorICAgICAgICBJTiBJTlQgICAgICAgICAgICAgICAgIGxlbmd0aCwKKyAgICAgICAgSU4gY29uc3QgRm9udCAgICAgICAgICpmb250LAorICAgICAgICBJTiBjb25zdCBSZWN0RiAgICAgICAgJmxheW91dFJlY3QsCisgICAgICAgIElOIGNvbnN0IFN0cmluZ0Zvcm1hdCAqc3RyaW5nRm9ybWF0LAorICAgICAgICBPVVQgUmVjdEYgICAgICAgICAgICAgKmJvdW5kaW5nQm94LAorICAgICAgICBPVVQgSU5UICAgICAgICAgICAgICAgKmNvZGVwb2ludHNGaXR0ZWQgPSAwLAorICAgICAgICBPVVQgSU5UICAgICAgICAgICAgICAgKmxpbmVzRmlsbGVkICAgICAgPSAwCisgICAgKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwTWVhc3VyZVN0cmluZygKKyAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgc3RyaW5nLAorICAgICAgICAgICAgbGVuZ3RoLAorICAgICAgICAgICAgZm9udCA/IGZvbnQtPm5hdGl2ZUZvbnQgOiBOVUxMLAorICAgICAgICAgICAgJmxheW91dFJlY3QsCisgICAgICAgICAgICBzdHJpbmdGb3JtYXQgPyBzdHJpbmdGb3JtYXQtPm5hdGl2ZUZvcm1hdCA6IE5VTEwsCisgICAgICAgICAgICBib3VuZGluZ0JveCwKKyAgICAgICAgICAgIGNvZGVwb2ludHNGaXR0ZWQsCisgICAgICAgICAgICBsaW5lc0ZpbGxlZAorICAgICAgICApKTsKKyAgICB9CisKKyAgICBTdGF0dXMKKyAgICBNZWFzdXJlU3RyaW5nKAorICAgICAgICBJTiBjb25zdCBXQ0hBUiAgICAgICAgKnN0cmluZywKKyAgICAgICAgSU4gSU5UICAgICAgICAgICAgICAgICBsZW5ndGgsCisgICAgICAgIElOIGNvbnN0IEZvbnQgICAgICAgICAqZm9udCwKKyAgICAgICAgSU4gY29uc3QgU2l6ZUYgICAgICAgICZsYXlvdXRSZWN0U2l6ZSwKKyAgICAgICAgSU4gY29uc3QgU3RyaW5nRm9ybWF0ICpzdHJpbmdGb3JtYXQsCisgICAgICAgIE9VVCBTaXplRiAgICAgICAgICAgICAqc2l6ZSwKKyAgICAgICAgT1VUIElOVCAgICAgICAgICAgICAgICpjb2RlcG9pbnRzRml0dGVkID0gMCwKKyAgICAgICAgT1VUIElOVCAgICAgICAgICAgICAgICpsaW5lc0ZpbGxlZCAgICAgID0gMAorICAgICkgY29uc3QKKyAgICB7CisgICAgICAgIFJlY3RGICAgbGF5b3V0UmVjdCgwLCAwLCBsYXlvdXRSZWN0U2l6ZS5XaWR0aCwgbGF5b3V0UmVjdFNpemUuSGVpZ2h0KTsKKyAgICAgICAgUmVjdEYgICBib3VuZGluZ0JveDsKKyAgICAgICAgU3RhdHVzICBzdGF0dXM7CisKKyAgICAgICAgaWYgKHNpemUgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhJbnZhbGlkUGFyYW1ldGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXR1cyA9IFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwTWVhc3VyZVN0cmluZygKKyAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgc3RyaW5nLAorICAgICAgICAgICAgbGVuZ3RoLAorICAgICAgICAgICAgZm9udCA/IGZvbnQtPm5hdGl2ZUZvbnQgOiBOVUxMLAorICAgICAgICAgICAgJmxheW91dFJlY3QsCisgICAgICAgICAgICBzdHJpbmdGb3JtYXQgPyBzdHJpbmdGb3JtYXQtPm5hdGl2ZUZvcm1hdCA6IE5VTEwsCisgICAgICAgICAgICBzaXplID8gJmJvdW5kaW5nQm94IDogTlVMTCwKKyAgICAgICAgICAgIGNvZGVwb2ludHNGaXR0ZWQsCisgICAgICAgICAgICBsaW5lc0ZpbGxlZAorICAgICAgICApKTsKKworICAgICAgICBpZiAoc2l6ZSAmJiBzdGF0dXMgPT0gT2spCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpemUtPldpZHRoICA9IGJvdW5kaW5nQm94LldpZHRoOworICAgICAgICAgICAgc2l6ZS0+SGVpZ2h0ID0gYm91bmRpbmdCb3guSGVpZ2h0OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBTdGF0dXMKKyAgICBNZWFzdXJlU3RyaW5nKAorICAgICAgICBJTiBjb25zdCBXQ0hBUiAgICAgICAgKnN0cmluZywKKyAgICAgICAgSU4gSU5UICAgICAgICAgICAgICAgICBsZW5ndGgsCisgICAgICAgIElOIGNvbnN0IEZvbnQgICAgICAgICAqZm9udCwKKyAgICAgICAgSU4gY29uc3QgUG9pbnRGICAgICAgICZvcmlnaW4sCisgICAgICAgIElOIGNvbnN0IFN0cmluZ0Zvcm1hdCAqc3RyaW5nRm9ybWF0LAorICAgICAgICBPVVQgUmVjdEYgICAgICAgICAgICAgKmJvdW5kaW5nQm94CisgICAgKSBjb25zdAorICAgIHsKKyAgICAgICAgUmVjdEYgcmVjdChvcmlnaW4uWCwgb3JpZ2luLlksIDAuMGYsIDAuMGYpOworCisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcE1lYXN1cmVTdHJpbmcoCisgICAgICAgICAgICBuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgIHN0cmluZywKKyAgICAgICAgICAgIGxlbmd0aCwKKyAgICAgICAgICAgIGZvbnQgPyBmb250LT5uYXRpdmVGb250IDogTlVMTCwKKyAgICAgICAgICAgICZyZWN0LAorICAgICAgICAgICAgc3RyaW5nRm9ybWF0ID8gc3RyaW5nRm9ybWF0LT5uYXRpdmVGb3JtYXQgOiBOVUxMLAorICAgICAgICAgICAgYm91bmRpbmdCb3gsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTAorICAgICAgICApKTsKKyAgICB9CisKKworICAgIFN0YXR1cworICAgIE1lYXN1cmVTdHJpbmcoCisgICAgICAgIElOIGNvbnN0IFdDSEFSICAqc3RyaW5nLAorICAgICAgICBJTiBJTlQgICAgICAgICAgIGxlbmd0aCwKKyAgICAgICAgSU4gY29uc3QgRm9udCAgICpmb250LAorICAgICAgICBJTiBjb25zdCBSZWN0RiAgJmxheW91dFJlY3QsCisgICAgICAgIE9VVCBSZWN0RiAgICAgICAqYm91bmRpbmdCb3gKKyAgICApIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBNZWFzdXJlU3RyaW5nKAorICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICBzdHJpbmcsCisgICAgICAgICAgICBsZW5ndGgsCisgICAgICAgICAgICBmb250ID8gZm9udC0+bmF0aXZlRm9udCA6IE5VTEwsCisgICAgICAgICAgICAmbGF5b3V0UmVjdCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBib3VuZGluZ0JveCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMCisgICAgICAgICkpOworICAgIH0KKworICAgIFN0YXR1cworICAgIE1lYXN1cmVTdHJpbmcoCisgICAgICAgIElOIGNvbnN0IFdDSEFSICAqc3RyaW5nLAorICAgICAgICBJTiBJTlQgICAgICAgICAgIGxlbmd0aCwKKyAgICAgICAgSU4gY29uc3QgRm9udCAgICpmb250LAorICAgICAgICBJTiBjb25zdCBQb2ludEYgJm9yaWdpbiwKKyAgICAgICAgT1VUIFJlY3RGICAgICAgICpib3VuZGluZ0JveAorICAgICkgY29uc3QKKyAgICB7CisgICAgICAgIFJlY3RGIHJlY3Qob3JpZ2luLlgsIG9yaWdpbi5ZLCAwLjBmLCAwLjBmKTsKKworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBNZWFzdXJlU3RyaW5nKAorICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICBzdHJpbmcsCisgICAgICAgICAgICBsZW5ndGgsCisgICAgICAgICAgICBmb250ID8gZm9udC0+bmF0aXZlRm9udCA6IE5VTEwsCisgICAgICAgICAgICAmcmVjdCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBib3VuZGluZ0JveCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMCisgICAgICAgICkpOworICAgIH0KKworCisjaWZkZWYgRENSX1VTRV9ORVdfMTc0MzQwCisgICAgU3RhdHVzCisgICAgTWVhc3VyZUNoYXJhY3RlclJhbmdlcygKKyAgICAgICAgSU4gY29uc3QgV0NIQVIgICAgICAgICpzdHJpbmcsCisgICAgICAgIElOIElOVCAgICAgICAgICAgICAgICAgbGVuZ3RoLAorICAgICAgICBJTiBjb25zdCBGb250ICAgICAgICAgKmZvbnQsCisgICAgICAgIElOIGNvbnN0IFJlY3RGICAgICAgICAmbGF5b3V0UmVjdCwKKyAgICAgICAgSU4gY29uc3QgU3RyaW5nRm9ybWF0ICpzdHJpbmdGb3JtYXQsCisgICAgICAgIElOIElOVCAgICAgICAgICAgICAgICAgcmVnaW9uQ291bnQsCisgICAgICAgIE9VVCBSZWdpb24gICAgICAgICAgICAqcmVnaW9ucworICAgICkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghcmVnaW9ucyB8fCByZWdpb25Db3VudCA8PSAwKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gSW52YWxpZFBhcmFtZXRlcjsKKyAgICAgICAgfQorCisgICAgICAgIEdwUmVnaW9uICoqbmF0aXZlUmVnaW9ucyA9IG5ldyBHcFJlZ2lvbiogW3JlZ2lvbkNvdW50XTsKKworICAgICAgICBpZiAoIW5hdGl2ZVJlZ2lvbnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPdXRPZk1lbW9yeTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoSU5UIGkgPSAwOyBpIDwgcmVnaW9uQ291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgbmF0aXZlUmVnaW9uc1tpXSA9IHJlZ2lvbnNbaV0ubmF0aXZlUmVnaW9uOworICAgICAgICB9CisKKyAgICAgICAgU3RhdHVzIHN0YXR1cyA9IFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwTWVhc3VyZUNoYXJhY3RlclJhbmdlcygKKyAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgc3RyaW5nLAorICAgICAgICAgICAgbGVuZ3RoLAorICAgICAgICAgICAgZm9udCA/IGZvbnQtPm5hdGl2ZUZvbnQgOiBOVUxMLAorICAgICAgICAgICAgbGF5b3V0UmVjdCwKKyAgICAgICAgICAgIHN0cmluZ0Zvcm1hdCA/IHN0cmluZ0Zvcm1hdC0+bmF0aXZlRm9ybWF0IDogTlVMTCwKKyAgICAgICAgICAgIHJlZ2lvbkNvdW50LAorICAgICAgICAgICAgbmF0aXZlUmVnaW9ucworICAgICAgICApKTsKKworICAgICAgICBkZWxldGUgW10gbmF0aXZlUmVnaW9uczsKKworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyNlbmRpZgorCisKKyNpZm5kZWYgRENSX1VTRV9ORVdfMTc0MzQwCisgICAgU3RhdHVzCisgICAgTWVhc3VyZVN0cmluZ1JlZ2lvbigKKyAgICAgICAgSU4gY29uc3QgV0NIQVIgICAgICAgICpzdHJpbmcsCisgICAgICAgIElOIElOVCAgICAgICAgICAgICAgICAgbGVuZ3RoLAorICAgICAgICBJTiBjb25zdCBGb250ICAgICAgICAgKmZvbnQsCisgICAgICAgIElOIGNvbnN0IFJlY3RGICAgICAgICAmbGF5b3V0UmVjdCwKKyAgICAgICAgSU4gY29uc3QgU3RyaW5nRm9ybWF0ICpzdHJpbmdGb3JtYXQsCisgICAgICAgIElOIElOVCAgICAgICAgICAgICAgICAgZmlyc3RDaGFyYWN0ZXJJbmRleCwKKyAgICAgICAgSU4gSU5UICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJDb3VudCwKKyAgICAgICAgT1VUIFJlZ2lvbiAgICAgICAgICAgICpyZWdpb24KKyAgICApIGNvbnN0CisgICAgeworICAgICAgICBpZiAocmVnaW9uID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gKFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwTWVhc3VyZVN0cmluZ1JlZ2lvbigKKyAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgc3RyaW5nLAorICAgICAgICAgICAgbGVuZ3RoLAorICAgICAgICAgICAgZm9udCA/IGZvbnQtPm5hdGl2ZUZvbnQgOiBOVUxMLAorICAgICAgICAgICAgbGF5b3V0UmVjdCwKKyAgICAgICAgICAgIHN0cmluZ0Zvcm1hdCA/IHN0cmluZ0Zvcm1hdC0+bmF0aXZlRm9ybWF0IDogTlVMTCwKKyAgICAgICAgICAgIGZpcnN0Q2hhcmFjdGVySW5kZXgsCisgICAgICAgICAgICBjaGFyYWN0ZXJDb3VudCwKKyAgICAgICAgICAgIHJlZ2lvbi0+bmF0aXZlUmVnaW9uKSkpOworICAgIH0KKyNlbmRpZgorCisgICAgU3RhdHVzIERyYXdEcml2ZXJTdHJpbmcoCisgICAgICAgIElOIGNvbnN0IFVJTlQxNiAgKnRleHQsCisgICAgICAgIElOIElOVCAgICAgICAgICAgIGxlbmd0aCwKKyAgICAgICAgSU4gY29uc3QgRm9udCAgICAqZm9udCwKKyAgICAgICAgSU4gY29uc3QgQnJ1c2ggICAqYnJ1c2gsCisgICAgICAgIElOIGNvbnN0IFBvaW50RiAgKnBvc2l0aW9ucywKKyAgICAgICAgSU4gSU5UICAgICAgICAgICAgZmxhZ3MsCisgICAgICAgIElOIGNvbnN0IE1hdHJpeCAgICAgICAgKm1hdHJpeAorICAgICkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdEcml2ZXJTdHJpbmcoCisgICAgICAgICAgICBuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgIHRleHQsCisgICAgICAgICAgICBsZW5ndGgsCisgICAgICAgICAgICBmb250ID8gZm9udC0+bmF0aXZlRm9udCA6IE5VTEwsCisgICAgICAgICAgICBicnVzaCA/IGJydXNoLT5uYXRpdmVCcnVzaCA6IE5VTEwsCisgICAgICAgICAgICBwb3NpdGlvbnMsCisgICAgICAgICAgICBmbGFncywKKyAgICAgICAgICAgIG1hdHJpeCA/IG1hdHJpeC0+bmF0aXZlTWF0cml4IDogTlVMTAorICAgICAgICApKTsKKyAgICB9CisKKyAgICBTdGF0dXMgTWVhc3VyZURyaXZlclN0cmluZygKKyAgICAgICAgSU4gY29uc3QgVUlOVDE2ICAqdGV4dCwKKyAgICAgICAgSU4gSU5UICAgICAgICAgICAgbGVuZ3RoLAorICAgICAgICBJTiBjb25zdCBGb250ICAgICpmb250LAorICAgICAgICBJTiBjb25zdCBQb2ludEYgICpwb3NpdGlvbnMsCisgICAgICAgIElOIElOVCAgICAgICAgICAgIGZsYWdzLAorICAgICAgICBJTiBjb25zdCBNYXRyaXggICAgICAgICptYXRyaXgsCisgICAgICAgIE9VVCBSZWN0RiAgICAgICAgKmJvdW5kaW5nQm94CisgICAgKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwTWVhc3VyZURyaXZlclN0cmluZygKKyAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgdGV4dCwKKyAgICAgICAgICAgIGxlbmd0aCwKKyAgICAgICAgICAgIGZvbnQgPyBmb250LT5uYXRpdmVGb250IDogTlVMTCwKKyAgICAgICAgICAgIHBvc2l0aW9ucywKKyAgICAgICAgICAgIGZsYWdzLAorICAgICAgICAgICAgbWF0cml4ID8gbWF0cml4LT5uYXRpdmVNYXRyaXggOiBOVUxMLAorICAgICAgICAgICAgYm91bmRpbmdCb3gKKyAgICAgICAgKSk7CisgICAgfQorCisjaWZuZGVmIERDUl9VU0VfTkVXXzE2ODc3MgorICAgIFN0YXR1cyBEcml2ZXJTdHJpbmdQb2ludFRvQ29kZXBvaW50KAorICAgICAgICBJTiBjb25zdCBVSU5UMTYgICp0ZXh0LAorICAgICAgICBJTiBJTlQgICAgICAgICAgICBsZW5ndGgsCisgICAgICAgIElOIGNvbnN0IEZvbnQgICAgKmZvbnQsCisgICAgICAgIElOIGNvbnN0IFBvaW50RiAgKnBvc2l0aW9ucywKKyAgICAgICAgSU4gSU5UICAgICAgICAgICAgZmxhZ3MsCisgICAgICAgIElOIGNvbnN0IE1hdHJpeCAgKm1hdHJpeCwKKyAgICAgICAgSU4gY29uc3QgUG9pbnRGICAmaGl0LAorICAgICAgICBPVVQgSU5UICAgICAgICAgICppbmRleCwKKyAgICAgICAgT1VUIEJPT0wgICAgICAgICAqcmlnaHRFZGdlLAorICAgICAgICBPVVQgUkVBTCAgICAgICAgICpkaXN0YW5jZQorICAgICkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyaXZlclN0cmluZ1BvaW50VG9Db2RlcG9pbnQoCisgICAgICAgICAgICBuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgIHRleHQsCisgICAgICAgICAgICBsZW5ndGgsCisgICAgICAgICAgICBmb250ID8gZm9udC0+bmF0aXZlRm9udCA6IE5VTEwsCisgICAgICAgICAgICBwb3NpdGlvbnMsCisgICAgICAgICAgICBmbGFncywKKyAgICAgICAgICAgIG1hdHJpeCA/IG1hdHJpeC0+bmF0aXZlTWF0cml4IDogTlVMTCwKKyAgICAgICAgICAgICZoaXQsCisgICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgIHJpZ2h0RWRnZSwKKyAgICAgICAgICAgIGRpc3RhbmNlCisgICAgICAgICkpOworICAgIH0KKyNlbmRpZgorCisgICAgLy8gRHJhdyBhIGNhY2hlZCBiaXRtYXAgb24gdGhpcyBncmFwaGljcyBkZXN0aW5hdGlvbiBvZmZzZXQgYnkKKyAgICAvLyB4LCB5LiBOb3RlIHRoaXMgd2lsbCBmYWlsIHdpdGggV3JvbmdTdGF0ZSBpZiB0aGUgQ2FjaGVkQml0bWFwCisgICAgLy8gbmF0aXZlIGZvcm1hdCBkaWZmZXJzIGZyb20gdGhpcyBHcmFwaGljcy4KKworICAgIFN0YXR1cyBEcmF3Q2FjaGVkQml0bWFwKElOIENhY2hlZEJpdG1hcCAqY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHkpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3Q2FjaGVkQml0bWFwKAorICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICBjYi0+bmF0aXZlQ2FjaGVkQml0bWFwLAorICAgICAgICAgICAgeCwgeQorICAgICAgICApKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBEcmF3IGltYWdlcyAoYm90aCBiaXRtYXAgYW5kIHZlY3RvcikKKyAgICAgKi8KKyAgICAvLyBmbG9hdCB2ZXJzaW9uCisgICAgU3RhdHVzIERyYXdJbWFnZShJTiBJbWFnZSogaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYmIHBvaW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIERyYXdJbWFnZShpbWFnZSwgcG9pbnQuWCwgcG9pbnQuWSk7CisgICAgfQorCisgICAgU3RhdHVzIERyYXdJbWFnZShJTiBJbWFnZSogaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHgsCisgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHkpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3SW1hZ2UobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgRHJhd0ltYWdlKElOIEltYWdlKiBpbWFnZSwgCisgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0RiYgcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBEcmF3SW1hZ2UoaW1hZ2UsIHJlY3QuWCwgcmVjdC5ZLCByZWN0LldpZHRoLCByZWN0LkhlaWdodCk7CisgICAgfQorCisgICAgU3RhdHVzIERyYXdJbWFnZShJTiBJbWFnZSogaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHgsCisgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHksCisgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBoZWlnaHQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3SW1hZ2VSZWN0KG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlID8gaW1hZ2UtPm5hdGl2ZUltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQpKTsKKyAgICB9CisKKyAgICAvLyBpbnRlZ2VyIHZlcnNpb24KKyAgICBTdGF0dXMgRHJhd0ltYWdlKElOIEltYWdlKiBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50JiBwb2ludCkKKyAgICB7CisgICAgICAgIHJldHVybiBEcmF3SW1hZ2UoaW1hZ2UsIHBvaW50LlgsIHBvaW50LlkpOworICAgIH0KKworICAgIFN0YXR1cyBEcmF3SW1hZ2UoSU4gSW1hZ2UqIGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHgsCisgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeSkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdJbWFnZUkobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5KSk7CisgICAgfQorCisgICAgU3RhdHVzIERyYXdJbWFnZShJTiBJbWFnZSogaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIERyYXdJbWFnZShpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LlgsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5ZLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5IZWlnaHQpOworICAgIH0KKworICAgIFN0YXR1cyBEcmF3SW1hZ2UoSU4gSW1hZ2UqIGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHgsCisgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeSwKKyAgICAgICAgICAgICAgICAgICAgIElOIElOVCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgIElOIElOVCBoZWlnaHQpIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0ltYWdlUmVjdEkobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlID8gaW1hZ2UtPm5hdGl2ZUltYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFmZmluZSBvciBwZXJzcGVjdGl2ZSBibHQKKyAgICAgKiAgZGVzdFBvaW50cy5sZW5ndGggPSAzOiByZWN0ID0+IHBhcmFsbGVsb2dyYW0KKyAgICAgKiAgICAgIGRlc3RQb2ludHNbMF0gPD0+IHRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgc291cmNlIHJlY3RhbmdsZQorICAgICAqICAgICAgZGVzdFBvaW50c1sxXSA8PT4gdG9wLXJpZ2h0IGNvcm5lcgorICAgICAqICAgICAgZGVzdFBvaW50c1syXSA8PT4gYm90dG9tLWxlZnQgY29ybmVyCisgICAgICogIGRlc3RQb2ludHMubGVuZ3RoID0gNDogcmVjdCA9PiBxdWFkCisgICAgICogICAgICBkZXN0UG9pbnRzWzNdIDw9PiBib3R0b20tcmlnaHQgY29ybmVyCisgICAgICoKKyAgICAgKiAgQG5vdGVzIFBlcnNwZWN0aXZlIGJsdCBvbmx5IHdvcmtzIGZvciBiaXRtYXAgaW1hZ2VzLgorICAgICAqLworICAgIFN0YXR1cyBEcmF3SW1hZ2UoSU4gSW1hZ2UqIGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnRGKiBkZXN0UG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQorICAgIHsKKyAgICAgICAgaWYgKGNvdW50ICE9IDMgJiYgY291bnQgIT0gNCkKKyAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7CisKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0ltYWdlUG9pbnRzKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RQb2ludHMsIGNvdW50KSk7CisgICAgfQorCisgICAgU3RhdHVzIERyYXdJbWFnZShJTiBJbWFnZSogaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludCogZGVzdFBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkKKyAgICB7CisgICAgICAgIGlmIChjb3VudCAhPSAzICYmIGNvdW50ICE9IDQpCisgICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKEludmFsaWRQYXJhbWV0ZXIpOworCisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdJbWFnZVBvaW50c0kobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFdlIG5lZWQgYW5vdGhlciBzZXQgb2YgbWV0aG9kcyBzaW1pbGFyIHRvIHRoZSBvbmVzIGFib3ZlCisgICAgICogdGhhdCB0YWtlIGFuIGFkZGl0aW9uYWwgUmVjdCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUKKyAgICAgKiBwb3J0aW9uIG9mIHRoZSBzb3VyY2UgaW1hZ2UgdG8gYmUgZHJhd24uCisgICAgICovCisgICAgLy8gZmxvYXQgdmVyc2lvbgorICAgIFN0YXR1cyBEcmF3SW1hZ2UoSU4gSW1hZ2UqIGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB4LAorICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5LAorICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzcmN4LAorICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzcmN5LAorICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzcmN3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3JjaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgSU4gVW5pdCBzcmNVbml0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0ltYWdlUG9pbnRSZWN0KG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmN4LCBzcmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Jjd2lkdGgsIHNyY2hlaWdodCwgc3JjVW5pdCkpOworICAgIH0KKworICAgIFN0YXR1cyBEcmF3SW1hZ2UoSU4gSW1hZ2UqIGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdEYmIGRlc3RSZWN0LAorICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzcmN4LAorICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzcmN5LAorICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzcmN3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3JjaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgSU4gVW5pdCBzcmNVbml0LAorICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgSW1hZ2VBdHRyaWJ1dGVzKiBpbWFnZUF0dHJpYnV0ZXMgPSBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgSU4gRHJhd0ltYWdlQWJvcnQgY2FsbGJhY2sgPSBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgSU4gVk9JRCogY2FsbGJhY2tEYXRhID0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdJbWFnZVJlY3RSZWN0KG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0LlgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0LlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0LldpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdC5IZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3gsIHNyY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3dpZHRoLCBzcmNoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1VuaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlQXR0cmlidXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBpbWFnZUF0dHJpYnV0ZXMtPm5hdGl2ZUltYWdlQXR0cgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tEYXRhKSk7CisgICAgfQorCisgICAgU3RhdHVzIERyYXdJbWFnZShJTiBJbWFnZSogaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYqIGRlc3RQb2ludHMsCisgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQsCisgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHNyY3gsCisgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHNyY3ksCisgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHNyY3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzcmNoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICBJTiBVbml0IHNyY1VuaXQsCisgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBJbWFnZUF0dHJpYnV0ZXMqIGltYWdlQXR0cmlidXRlcyA9IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICBJTiBEcmF3SW1hZ2VBYm9ydCBjYWxsYmFjayA9IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICBJTiBWT0lEKiBjYWxsYmFja0RhdGEgPSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRHJhd0ltYWdlUG9pbnRzUmVjdChuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UG9pbnRzLCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmN4LCBzcmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNVbml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlQXR0cmlidXRlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGltYWdlQXR0cmlidXRlcy0+bmF0aXZlSW1hZ2VBdHRyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEpKTsKKyAgICB9CisKKyAgICAvLyBpbnRlZ2VyIHZlcnNpb24KKyAgICBTdGF0dXMgRHJhd0ltYWdlKElOIEltYWdlKiBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgIElOIElOVCB4LAorICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHksCisgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgc3JjeCwKKyAgICAgICAgICAgICAgICAgICAgIElOIElOVCBzcmN5LAorICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHNyY3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHNyY2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgIElOIFVuaXQgc3JjVW5pdCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERyYXdJbWFnZVBvaW50UmVjdEkobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmN3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjVW5pdCkpOworICAgIH0KKworICAgIFN0YXR1cyBEcmF3SW1hZ2UoSU4gSW1hZ2UqIGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdCYgZGVzdFJlY3QsCisgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgc3JjeCwKKyAgICAgICAgICAgICAgICAgICAgIElOIElOVCBzcmN5LAorICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHNyY3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHNyY2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgIElOIFVuaXQgc3JjVW5pdCwKKyAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IEltYWdlQXR0cmlidXRlcyogaW1hZ2VBdHRyaWJ1dGVzID0gTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIElOIERyYXdJbWFnZUFib3J0IGNhbGxiYWNrID0gTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIElOIFZPSUQqIGNhbGxiYWNrRGF0YSA9IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3SW1hZ2VSZWN0UmVjdEkobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJlY3QuWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0LlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdC5XaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSZWN0LkhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Jjd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNVbml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VBdHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGltYWdlQXR0cmlidXRlcy0+bmF0aXZlSW1hZ2VBdHRyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSkpOworICAgIH0KKworICAgIFN0YXR1cyBEcmF3SW1hZ2UoSU4gSW1hZ2UqIGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnQqIGRlc3RQb2ludHMsCisgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQsCisgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgc3JjeCwKKyAgICAgICAgICAgICAgICAgICAgIElOIElOVCBzcmN5LAorICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHNyY3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHNyY2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgIElOIFVuaXQgc3JjVW5pdCwKKyAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IEltYWdlQXR0cmlidXRlcyogaW1hZ2VBdHRyaWJ1dGVzID0gTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIElOIERyYXdJbWFnZUFib3J0IGNhbGxiYWNrID0gTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIElOIFZPSUQqIGNhbGxiYWNrRGF0YSA9IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEcmF3SW1hZ2VQb2ludHNSZWN0SShuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0UG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Jjd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjVW5pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VBdHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGltYWdlQXR0cmlidXRlcy0+bmF0aXZlSW1hZ2VBdHRyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEpKTsKKyAgICB9CisKKyAgICAvLyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIGZvciBwbGF5aW5nIGFuIEVNRisgdG8gYSBncmFwaGljcworICAgIC8vIHZpYSB0aGUgZW51bWVyYXRpb24gaW50ZXJmYWNlLiAgRWFjaCByZWNvcmQgb2YgdGhlIEVNRisgaXMKKyAgICAvLyBzZW50IHRvIHRoZSBjYWxsYmFjayAoYWxvbmcgd2l0aCB0aGUgY2FsbGJhY2tEYXRhKS4gIFRoZW4KKyAgICAvLyB0aGUgY2FsbGJhY2sgY2FuIGludm9rZSB0aGUgTWV0YWZpbGU6OlBsYXlSZWNvcmQgbWV0aG9kCisgICAgLy8gdG8gcGxheSB0aGUgcGFydGljdWxhciByZWNvcmQuCisKKyAgICBTdGF0dXMKKyAgICBFbnVtZXJhdGVNZXRhZmlsZSgKKyAgICAgICAgSU4gY29uc3QgTWV0YWZpbGUgKiAgICAgICAgbWV0YWZpbGUsCisgICAgICAgIElOIGNvbnN0IFBvaW50RiAmICAgICAgICAgIGRlc3RQb2ludCwKKyAgICAgICAgSU4gRW51bWVyYXRlTWV0YWZpbGVQcm9jICAgY2FsbGJhY2ssCisgICAgICAgIElOIFZPSUQgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSAgICA9IE5VTEwsCisgICAgICAgIElOIGNvbnN0IEltYWdlQXR0cmlidXRlcyAqICAgICAgIGltYWdlQXR0cmlidXRlcyA9IE5VTEwKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRW51bWVyYXRlTWV0YWZpbGVEZXN0UG9pbnQoCisgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAoY29uc3QgR3BNZXRhZmlsZSAqKShtZXRhZmlsZSA/IG1ldGFmaWxlLT5uYXRpdmVJbWFnZTpOVUxMKSwKKyAgICAgICAgICAgICAgICAgICAgZGVzdFBvaW50LAorICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tEYXRhLAorICAgICAgICAgICAgICAgICAgICBpbWFnZUF0dHJpYnV0ZXMgPyBpbWFnZUF0dHJpYnV0ZXMtPm5hdGl2ZUltYWdlQXR0ciA6IE5VTEwpKTsKKyAgICB9CisKKyAgICBTdGF0dXMKKyAgICBFbnVtZXJhdGVNZXRhZmlsZSgKKyAgICAgICAgSU4gY29uc3QgTWV0YWZpbGUgKiAgICAgICAgbWV0YWZpbGUsCisgICAgICAgIElOIGNvbnN0IFBvaW50ICYgICAgICAgICAgIGRlc3RQb2ludCwKKyAgICAgICAgSU4gRW51bWVyYXRlTWV0YWZpbGVQcm9jICAgY2FsbGJhY2ssCisgICAgICAgIElOIFZPSUQgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSAgICA9IE5VTEwsCisgICAgICAgIElOIGNvbnN0IEltYWdlQXR0cmlidXRlcyAqICAgICAgIGltYWdlQXR0cmlidXRlcyA9IE5VTEwKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRW51bWVyYXRlTWV0YWZpbGVEZXN0UG9pbnRJKAorICAgICAgICAgICAgICAgICAgICBuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgKGNvbnN0IEdwTWV0YWZpbGUgKikobWV0YWZpbGUgPyBtZXRhZmlsZS0+bmF0aXZlSW1hZ2U6TlVMTCksCisgICAgICAgICAgICAgICAgICAgIGRlc3RQb2ludCwKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VBdHRyaWJ1dGVzID8gaW1hZ2VBdHRyaWJ1dGVzLT5uYXRpdmVJbWFnZUF0dHIgOiBOVUxMKSk7CisgICAgfQorCisgICAgU3RhdHVzCisgICAgRW51bWVyYXRlTWV0YWZpbGUoCisgICAgICAgIElOIGNvbnN0IE1ldGFmaWxlICogICAgICAgIG1ldGFmaWxlLAorICAgICAgICBJTiBjb25zdCBSZWN0RiAmICAgICAgICAgICBkZXN0UmVjdCwKKyAgICAgICAgSU4gRW51bWVyYXRlTWV0YWZpbGVQcm9jICAgY2FsbGJhY2ssCisgICAgICAgIElOIFZPSUQgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSAgICA9IE5VTEwsCisgICAgICAgIElOIGNvbnN0IEltYWdlQXR0cmlidXRlcyAqICAgICAgIGltYWdlQXR0cmlidXRlcyA9IE5VTEwKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRW51bWVyYXRlTWV0YWZpbGVEZXN0UmVjdCgKKyAgICAgICAgICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgIChjb25zdCBHcE1ldGFmaWxlICopKG1ldGFmaWxlID8gbWV0YWZpbGUtPm5hdGl2ZUltYWdlOk5VTEwpLAorICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VBdHRyaWJ1dGVzID8gaW1hZ2VBdHRyaWJ1dGVzLT5uYXRpdmVJbWFnZUF0dHIgOiBOVUxMKSk7CisgICAgfQorCisgICAgU3RhdHVzCisgICAgRW51bWVyYXRlTWV0YWZpbGUoCisgICAgICAgIElOIGNvbnN0IE1ldGFmaWxlICogICAgICAgIG1ldGFmaWxlLAorICAgICAgICBJTiBjb25zdCBSZWN0ICYgICAgICAgICAgICBkZXN0UmVjdCwKKyAgICAgICAgSU4gRW51bWVyYXRlTWV0YWZpbGVQcm9jICAgY2FsbGJhY2ssCisgICAgICAgIElOIFZPSUQgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSAgICA9IE5VTEwsCisgICAgICAgIElOIGNvbnN0IEltYWdlQXR0cmlidXRlcyAqICAgICAgIGltYWdlQXR0cmlidXRlcyA9IE5VTEwKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRW51bWVyYXRlTWV0YWZpbGVEZXN0UmVjdEkoCisgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAoY29uc3QgR3BNZXRhZmlsZSAqKShtZXRhZmlsZSA/IG1ldGFmaWxlLT5uYXRpdmVJbWFnZTpOVUxMKSwKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJlY3QsCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEsCisgICAgICAgICAgICAgICAgICAgIGltYWdlQXR0cmlidXRlcyA/IGltYWdlQXR0cmlidXRlcy0+bmF0aXZlSW1hZ2VBdHRyIDogTlVMTCkpOworICAgIH0KKworICAgIFN0YXR1cworICAgIEVudW1lcmF0ZU1ldGFmaWxlKAorICAgICAgICBJTiBjb25zdCBNZXRhZmlsZSAqICAgICAgICBtZXRhZmlsZSwKKyAgICAgICAgSU4gY29uc3QgUG9pbnRGICogICAgICAgICAgZGVzdFBvaW50cywKKyAgICAgICAgSU4gSU5UICAgICAgICAgICAgICAgICAgICAgY291bnQsCisgICAgICAgIElOIEVudW1lcmF0ZU1ldGFmaWxlUHJvYyAgIGNhbGxiYWNrLAorICAgICAgICBJTiBWT0lEICogICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEgICAgPSBOVUxMLAorICAgICAgICBJTiBjb25zdCBJbWFnZUF0dHJpYnV0ZXMgKiAgICAgICBpbWFnZUF0dHJpYnV0ZXMgPSBOVUxMCisgICAgICAgICkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEVudW1lcmF0ZU1ldGFmaWxlRGVzdFBvaW50cygKKyAgICAgICAgICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgIChjb25zdCBHcE1ldGFmaWxlICopKG1ldGFmaWxlID8gbWV0YWZpbGUtPm5hdGl2ZUltYWdlOk5VTEwpLAorICAgICAgICAgICAgICAgICAgICBkZXN0UG9pbnRzLAorICAgICAgICAgICAgICAgICAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VBdHRyaWJ1dGVzID8gaW1hZ2VBdHRyaWJ1dGVzLT5uYXRpdmVJbWFnZUF0dHIgOiBOVUxMKSk7CisgICAgfQorCisgICAgU3RhdHVzCisgICAgRW51bWVyYXRlTWV0YWZpbGUoCisgICAgICAgIElOIGNvbnN0IE1ldGFmaWxlICogICAgICAgIG1ldGFmaWxlLAorICAgICAgICBJTiBjb25zdCBQb2ludCAqICAgICAgICAgICBkZXN0UG9pbnRzLAorICAgICAgICBJTiBJTlQgICAgICAgICAgICAgICAgICAgICBjb3VudCwKKyAgICAgICAgSU4gRW51bWVyYXRlTWV0YWZpbGVQcm9jICAgY2FsbGJhY2ssCisgICAgICAgIElOIFZPSUQgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSAgICA9IE5VTEwsCisgICAgICAgIElOIGNvbnN0IEltYWdlQXR0cmlidXRlcyAqICAgICAgIGltYWdlQXR0cmlidXRlcyA9IE5VTEwKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRW51bWVyYXRlTWV0YWZpbGVEZXN0UG9pbnRzSSgKKyAgICAgICAgICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgIChjb25zdCBHcE1ldGFmaWxlICopKG1ldGFmaWxlID8gbWV0YWZpbGUtPm5hdGl2ZUltYWdlOk5VTEwpLAorICAgICAgICAgICAgICAgICAgICBkZXN0UG9pbnRzLAorICAgICAgICAgICAgICAgICAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VBdHRyaWJ1dGVzID8gaW1hZ2VBdHRyaWJ1dGVzLT5uYXRpdmVJbWFnZUF0dHIgOiBOVUxMKSk7CisgICAgfQorCisgICAgU3RhdHVzCisgICAgRW51bWVyYXRlTWV0YWZpbGUoCisgICAgICAgIElOIGNvbnN0IE1ldGFmaWxlICogICAgICAgIG1ldGFmaWxlLAorICAgICAgICBJTiBjb25zdCBQb2ludEYgJiAgICAgICAgICBkZXN0UG9pbnQsCisgICAgICAgIElOIGNvbnN0IFJlY3RGICYgICAgICAgICAgIHNyY1JlY3QsCisgICAgICAgIElOIFVuaXQgICAgICAgICAgICAgICAgICAgIHNyY1VuaXQsCisgICAgICAgIElOIEVudW1lcmF0ZU1ldGFmaWxlUHJvYyAgIGNhbGxiYWNrLAorICAgICAgICBJTiBWT0lEICogICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEgICAgPSBOVUxMLAorICAgICAgICBJTiBjb25zdCBJbWFnZUF0dHJpYnV0ZXMgKiAgICAgICBpbWFnZUF0dHJpYnV0ZXMgPSBOVUxMCisgICAgICAgICkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEVudW1lcmF0ZU1ldGFmaWxlU3JjUmVjdERlc3RQb2ludCgKKyAgICAgICAgICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgIChjb25zdCBHcE1ldGFmaWxlICopKG1ldGFmaWxlID8gbWV0YWZpbGUtPm5hdGl2ZUltYWdlOk5VTEwpLAorICAgICAgICAgICAgICAgICAgICBkZXN0UG9pbnQsCisgICAgICAgICAgICAgICAgICAgIHNyY1JlY3QsCisgICAgICAgICAgICAgICAgICAgIHNyY1VuaXQsCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEsCisgICAgICAgICAgICAgICAgICAgIGltYWdlQXR0cmlidXRlcyA/IGltYWdlQXR0cmlidXRlcy0+bmF0aXZlSW1hZ2VBdHRyIDogTlVMTCkpOworICAgIH0KKworICAgIFN0YXR1cworICAgIEVudW1lcmF0ZU1ldGFmaWxlKAorICAgICAgICBJTiBjb25zdCBNZXRhZmlsZSAqICAgICAgICBtZXRhZmlsZSwKKyAgICAgICAgSU4gY29uc3QgUG9pbnQgJiAgICAgICAgICAgZGVzdFBvaW50LAorICAgICAgICBJTiBjb25zdCBSZWN0ICYgICAgICAgICAgICBzcmNSZWN0LAorICAgICAgICBJTiBVbml0ICAgICAgICAgICAgICAgICAgICBzcmNVbml0LAorICAgICAgICBJTiBFbnVtZXJhdGVNZXRhZmlsZVByb2MgICBjYWxsYmFjaywKKyAgICAgICAgSU4gVk9JRCAqICAgICAgICAgICAgICAgICAgY2FsbGJhY2tEYXRhICAgID0gTlVMTCwKKyAgICAgICAgSU4gY29uc3QgSW1hZ2VBdHRyaWJ1dGVzICogICAgICAgaW1hZ2VBdHRyaWJ1dGVzID0gTlVMTAorICAgICAgICApCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBFbnVtZXJhdGVNZXRhZmlsZVNyY1JlY3REZXN0UG9pbnRJKAorICAgICAgICAgICAgICAgICAgICBuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgKGNvbnN0IEdwTWV0YWZpbGUgKikobWV0YWZpbGUgPyBtZXRhZmlsZS0+bmF0aXZlSW1hZ2U6TlVMTCksCisgICAgICAgICAgICAgICAgICAgIGRlc3RQb2ludCwKKyAgICAgICAgICAgICAgICAgICAgc3JjUmVjdCwKKyAgICAgICAgICAgICAgICAgICAgc3JjVW5pdCwKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VBdHRyaWJ1dGVzID8gaW1hZ2VBdHRyaWJ1dGVzLT5uYXRpdmVJbWFnZUF0dHIgOiBOVUxMKSk7CisgICAgfQorCisgICAgU3RhdHVzCisgICAgRW51bWVyYXRlTWV0YWZpbGUoCisgICAgICAgIElOIGNvbnN0IE1ldGFmaWxlICogICAgICAgIG1ldGFmaWxlLAorICAgICAgICBJTiBjb25zdCBSZWN0RiAmICAgICAgICAgICBkZXN0UmVjdCwKKyAgICAgICAgSU4gY29uc3QgUmVjdEYgJiAgICAgICAgICAgc3JjUmVjdCwKKyAgICAgICAgSU4gVW5pdCAgICAgICAgICAgICAgICAgICAgc3JjVW5pdCwKKyAgICAgICAgSU4gRW51bWVyYXRlTWV0YWZpbGVQcm9jICAgY2FsbGJhY2ssCisgICAgICAgIElOIFZPSUQgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSAgICA9IE5VTEwsCisgICAgICAgIElOIGNvbnN0IEltYWdlQXR0cmlidXRlcyAqICAgICAgIGltYWdlQXR0cmlidXRlcyA9IE5VTEwKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRW51bWVyYXRlTWV0YWZpbGVTcmNSZWN0RGVzdFJlY3QoCisgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAoY29uc3QgR3BNZXRhZmlsZSAqKShtZXRhZmlsZSA/IG1ldGFmaWxlLT5uYXRpdmVJbWFnZTpOVUxMKSwKKyAgICAgICAgICAgICAgICAgICAgZGVzdFJlY3QsCisgICAgICAgICAgICAgICAgICAgIHNyY1JlY3QsCisgICAgICAgICAgICAgICAgICAgIHNyY1VuaXQsCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEsCisgICAgICAgICAgICAgICAgICAgIGltYWdlQXR0cmlidXRlcyA/IGltYWdlQXR0cmlidXRlcy0+bmF0aXZlSW1hZ2VBdHRyIDogTlVMTCkpOworICAgIH0KKworICAgIFN0YXR1cworICAgIEVudW1lcmF0ZU1ldGFmaWxlKAorICAgICAgICBJTiBjb25zdCBNZXRhZmlsZSAqICAgICAgICBtZXRhZmlsZSwKKyAgICAgICAgSU4gY29uc3QgUmVjdCAmICAgICAgICAgICAgZGVzdFJlY3QsCisgICAgICAgIElOIGNvbnN0IFJlY3QgJiAgICAgICAgICAgIHNyY1JlY3QsCisgICAgICAgIElOIFVuaXQgICAgICAgICAgICAgICAgICAgIHNyY1VuaXQsCisgICAgICAgIElOIEVudW1lcmF0ZU1ldGFmaWxlUHJvYyAgIGNhbGxiYWNrLAorICAgICAgICBJTiBWT0lEICogICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEgICAgPSBOVUxMLAorICAgICAgICBJTiBjb25zdCBJbWFnZUF0dHJpYnV0ZXMgKiAgICAgICBpbWFnZUF0dHJpYnV0ZXMgPSBOVUxMCisgICAgICAgICkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEVudW1lcmF0ZU1ldGFmaWxlU3JjUmVjdERlc3RSZWN0SSgKKyAgICAgICAgICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgIChjb25zdCBHcE1ldGFmaWxlICopKG1ldGFmaWxlID8gbWV0YWZpbGUtPm5hdGl2ZUltYWdlOk5VTEwpLAorICAgICAgICAgICAgICAgICAgICBkZXN0UmVjdCwKKyAgICAgICAgICAgICAgICAgICAgc3JjUmVjdCwKKyAgICAgICAgICAgICAgICAgICAgc3JjVW5pdCwKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VBdHRyaWJ1dGVzID8gaW1hZ2VBdHRyaWJ1dGVzLT5uYXRpdmVJbWFnZUF0dHIgOiBOVUxMKSk7CisgICAgfQorCisgICAgU3RhdHVzCisgICAgRW51bWVyYXRlTWV0YWZpbGUoCisgICAgICAgIElOIGNvbnN0IE1ldGFmaWxlICogICAgICAgIG1ldGFmaWxlLAorICAgICAgICBJTiBjb25zdCBQb2ludEYgKiAgICAgICAgICBkZXN0UG9pbnRzLAorICAgICAgICBJTiBJTlQgICAgICAgICAgICAgICAgICAgICBjb3VudCwKKyAgICAgICAgSU4gY29uc3QgUmVjdEYgJiAgICAgICAgICAgc3JjUmVjdCwKKyAgICAgICAgSU4gVW5pdCAgICAgICAgICAgICAgICAgICAgc3JjVW5pdCwKKyAgICAgICAgSU4gRW51bWVyYXRlTWV0YWZpbGVQcm9jICAgY2FsbGJhY2ssCisgICAgICAgIElOIFZPSUQgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSAgICA9IE5VTEwsCisgICAgICAgIElOIGNvbnN0IEltYWdlQXR0cmlidXRlcyAqICAgICAgIGltYWdlQXR0cmlidXRlcyA9IE5VTEwKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRW51bWVyYXRlTWV0YWZpbGVTcmNSZWN0RGVzdFBvaW50cygKKyAgICAgICAgICAgICAgICAgICAgbmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgIChjb25zdCBHcE1ldGFmaWxlICopKG1ldGFmaWxlID8gbWV0YWZpbGUtPm5hdGl2ZUltYWdlOk5VTEwpLAorICAgICAgICAgICAgICAgICAgICBkZXN0UG9pbnRzLAorICAgICAgICAgICAgICAgICAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgc3JjUmVjdCwKKyAgICAgICAgICAgICAgICAgICAgc3JjVW5pdCwKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VBdHRyaWJ1dGVzID8gaW1hZ2VBdHRyaWJ1dGVzLT5uYXRpdmVJbWFnZUF0dHIgOiBOVUxMKSk7CisgICAgfQorCisgICAgU3RhdHVzCisgICAgRW51bWVyYXRlTWV0YWZpbGUoCisgICAgICAgIElOIGNvbnN0IE1ldGFmaWxlICogICAgICAgIG1ldGFmaWxlLAorICAgICAgICBJTiBjb25zdCBQb2ludCAqICAgICAgICAgICBkZXN0UG9pbnRzLAorICAgICAgICBJTiBJTlQgICAgICAgICAgICAgICAgICAgICBjb3VudCwKKyAgICAgICAgSU4gY29uc3QgUmVjdCAmICAgICAgICAgICAgc3JjUmVjdCwKKyAgICAgICAgSU4gVW5pdCAgICAgICAgICAgICAgICAgICAgc3JjVW5pdCwKKyAgICAgICAgSU4gRW51bWVyYXRlTWV0YWZpbGVQcm9jICAgY2FsbGJhY2ssCisgICAgICAgIElOIFZPSUQgKiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrRGF0YSAgICA9IE5VTEwsCisgICAgICAgIElOIGNvbnN0IEltYWdlQXR0cmlidXRlcyAqICAgICAgIGltYWdlQXR0cmlidXRlcyA9IE5VTEwKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwRW51bWVyYXRlTWV0YWZpbGVTcmNSZWN0RGVzdFBvaW50c0koCisgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAoY29uc3QgR3BNZXRhZmlsZSAqKShtZXRhZmlsZSA/IG1ldGFmaWxlLT5uYXRpdmVJbWFnZTpOVUxMKSwKKyAgICAgICAgICAgICAgICAgICAgZGVzdFBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgIHNyY1JlY3QsCisgICAgICAgICAgICAgICAgICAgIHNyY1VuaXQsCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0RhdGEsCisgICAgICAgICAgICAgICAgICAgIGltYWdlQXR0cmlidXRlcyA/IGltYWdlQXR0cmlidXRlcy0+bmF0aXZlSW1hZ2VBdHRyIDogTlVMTCkpOworICAgIH0KKworICAgIC8qKgorICAgICAgKiBDbGlwcGluZyByZWdpb24gb3BlcmF0aW9ucworICAgICAgKgorICAgICAgKiBAbm90ZXMgU2ltcGx5IGluY3JlZGlibGUgcmVkdW5kYW5jeSBoZXJlLgorICAgICAgKi8KKyAgICBTdGF0dXMgU2V0Q2xpcChJTiBjb25zdCBHcmFwaGljcyogZywKKyAgICAgICAgICAgICAgICAgICBJTiBDb21iaW5lTW9kZSBjb21iaW5lTW9kZSA9IENvbWJpbmVNb2RlUmVwbGFjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldENsaXBHcmFwaGljcyhuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGctPm5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZU1vZGUpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0Q2xpcChJTiBjb25zdCBSZWN0RiYgcmVjdCwKKyAgICAgICAgICAgICAgICAgICBJTiBDb21iaW5lTW9kZSBjb21iaW5lTW9kZSA9IENvbWJpbmVNb2RlUmVwbGFjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldENsaXBSZWN0KG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LlgsIHJlY3QuWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5XaWR0aCwgcmVjdC5IZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVNb2RlKSk7CisgICAgfQorCisgICAgU3RhdHVzIFNldENsaXAoSU4gY29uc3QgUmVjdCYgcmVjdCwKKyAgICAgICAgICAgICAgICAgICBJTiBDb21iaW5lTW9kZSBjb21iaW5lTW9kZSA9IENvbWJpbmVNb2RlUmVwbGFjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldENsaXBSZWN0SShuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuWCwgcmVjdC5ZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5XaWR0aCwgcmVjdC5IZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lTW9kZSkpOworICAgIH0KKworICAgIFN0YXR1cyBTZXRDbGlwKElOIGNvbnN0IEdyYXBoaWNzUGF0aCogcGF0aCwKKyAgICAgICAgICAgICAgICAgICBJTiBDb21iaW5lTW9kZSBjb21iaW5lTW9kZSA9IENvbWJpbmVNb2RlUmVwbGFjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldENsaXBQYXRoKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLT5uYXRpdmVQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lTW9kZSkpOworICAgIH0KKworICAgIFN0YXR1cyBTZXRDbGlwKElOIGNvbnN0IFJlZ2lvbiogcmVnaW9uLAorICAgICAgICAgICAgICAgICAgIElOIENvbWJpbmVNb2RlIGNvbWJpbmVNb2RlID0gQ29tYmluZU1vZGVSZXBsYWNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0Q2xpcFJlZ2lvbihuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb24tPm5hdGl2ZVJlZ2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lTW9kZSkpOworICAgIH0KKworICAgIC8vIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdGhlIG90aGVyIFNldENsaXAgbWV0aG9kcyBiZWNhdXNlIGl0IGFzc3VtZXMKKyAgICAvLyB0aGF0IHRoZSBIUkdOIGlzIGFscmVhZHkgaW4gZGV2aWNlIHVuaXRzLCBzbyBpdCBkb2Vzbid0IHRyYW5zZm9ybQorICAgIC8vIHRoZSBjb29yZGluYXRlcyBpbiB0aGUgSFJHTi4KKyAgICBTdGF0dXMgU2V0Q2xpcChJTiBIUkdOIGhSZ24sCisgICAgICAgICAgICAgICAgICAgSU4gQ29tYmluZU1vZGUgY29tYmluZU1vZGUgPSBDb21iaW5lTW9kZVJlcGxhY2UpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRDbGlwSHJnbihuYXRpdmVHcmFwaGljcywgaFJnbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZU1vZGUpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgSW50ZXJzZWN0Q2xpcChJTiBjb25zdCBSZWN0RiYgcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldENsaXBSZWN0KG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LlgsIHJlY3QuWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5XaWR0aCwgcmVjdC5IZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbWJpbmVNb2RlSW50ZXJzZWN0KSk7CisgICAgfQorCisgICAgU3RhdHVzIEludGVyc2VjdENsaXAoSU4gY29uc3QgUmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldENsaXBSZWN0SShuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuWCwgcmVjdC5ZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5XaWR0aCwgcmVjdC5IZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21iaW5lTW9kZUludGVyc2VjdCkpOworICAgIH0KKworICAgIFN0YXR1cyBJbnRlcnNlY3RDbGlwKElOIGNvbnN0IFJlZ2lvbiogcmVnaW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0Q2xpcFJlZ2lvbihuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb24tPm5hdGl2ZVJlZ2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21iaW5lTW9kZUludGVyc2VjdCkpOworICAgIH0KKworICAgIFN0YXR1cyBFeGNsdWRlQ2xpcChJTiBjb25zdCBSZWN0RiYgcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldENsaXBSZWN0KG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LlgsIHJlY3QuWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5XaWR0aCwgcmVjdC5IZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbWJpbmVNb2RlRXhjbHVkZSkpOworICAgIH0KKworICAgIFN0YXR1cyBFeGNsdWRlQ2xpcChJTiBjb25zdCBSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0Q2xpcFJlY3RJKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5YLCByZWN0LlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LldpZHRoLCByZWN0LkhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbWJpbmVNb2RlRXhjbHVkZSkpOworICAgIH0KKworICAgIFN0YXR1cyBFeGNsdWRlQ2xpcChJTiBjb25zdCBSZWdpb24qIHJlZ2lvbikKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldENsaXBSZWdpb24obmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uLT5uYXRpdmVSZWdpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tYmluZU1vZGVFeGNsdWRlKSk7CisgICAgfQorCisgICAgU3RhdHVzIFJlc2V0Q2xpcCgpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBSZXNldENsaXAobmF0aXZlR3JhcGhpY3MpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgVHJhbnNsYXRlQ2xpcChJTiBSRUFMIGR4LAorICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgZHkpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBUcmFuc2xhdGVDbGlwKG5hdGl2ZUdyYXBoaWNzLCBkeCwgZHkpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgVHJhbnNsYXRlQ2xpcChJTiBJTlQgZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwVHJhbnNsYXRlQ2xpcEkobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR4LCBkeSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqICBHZXRDbGlwIHJlZ2lvbiBmcm9tIGdyYXBoaWNzIGNvbnRleHQKKyAgICAgKi8KKyAgICBTdGF0dXMgR2V0Q2xpcChPVVQgUmVnaW9uKiByZWdpb24pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRDbGlwKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbi0+bmF0aXZlUmVnaW9uKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogSGl0IHRlc3Rpbmcgb3BlcmF0aW9ucworICAgICAqLworICAgIFN0YXR1cyBHZXRDbGlwQm91bmRzKE9VVCBSZWN0RiogcmVjdCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldENsaXBCb3VuZHMobmF0aXZlR3JhcGhpY3MsIHJlY3QpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgR2V0Q2xpcEJvdW5kcyhPVVQgUmVjdCogcmVjdCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldENsaXBCb3VuZHNJKG5hdGl2ZUdyYXBoaWNzLCByZWN0KSk7CisgICAgfQorCisgICAgQk9PTCBJc0NsaXBFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICBCT09MIGJvb2xuID0gRkFMU0U7CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBJc0NsaXBFbXB0eShuYXRpdmVHcmFwaGljcywgJmJvb2xuKSk7CisKKyAgICAgICAgcmV0dXJuIGJvb2xuOworICAgIH0KKworICAgIFN0YXR1cyBHZXRWaXNpYmxlQ2xpcEJvdW5kcyhPVVQgUmVjdEYgKnJlY3QpIGNvbnN0CisgICAgeworCisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFZpc2libGVDbGlwQm91bmRzKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0KSk7CisgICAgfQorCisgICAgU3RhdHVzIEdldFZpc2libGVDbGlwQm91bmRzKE9VVCBSZWN0ICpyZWN0KSBjb25zdAorICAgIHsKKyAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRWaXNpYmxlQ2xpcEJvdW5kc0kobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QpKTsKKyAgICB9CisKKyAgICBCT09MIElzVmlzaWJsZUNsaXBFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICBCT09MIGJvb2xuID0gRkFMU0U7CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBJc1Zpc2libGVDbGlwRW1wdHkobmF0aXZlR3JhcGhpY3MsICZib29sbikpOworCisgICAgICAgIHJldHVybiBib29sbjsKKyAgICB9CisKKyAgICBCT09MIElzVmlzaWJsZShJTiBJTlQgeCwKKyAgICAgICAgICAgICAgICAgICBJTiBJTlQgeSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBJc1Zpc2libGUoUG9pbnQoeCx5KSk7CisgICAgfQorCisgICAgQk9PTCBJc1Zpc2libGUoSU4gY29uc3QgUG9pbnQmIHBvaW50KSBjb25zdAorICAgIHsKKyAgICAgICAgQk9PTCBib29sbiA9IEZBTFNFOworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSXNWaXNpYmxlUG9pbnRJKG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludC5YLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludC5ZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYm9vbG4pKTsKKworICAgICAgICByZXR1cm4gYm9vbG47CisgICAgfQorCisgICAgQk9PTCBJc1Zpc2libGUoSU4gSU5UIHgsCisgICAgICAgICAgICAgICAgICAgSU4gSU5UIHksCisgICAgICAgICAgICAgICAgICAgSU4gSU5UIHdpZHRoLAorICAgICAgICAgICAgICAgICAgIElOIElOVCBoZWlnaHQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSXNWaXNpYmxlKFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOworICAgIH0KKworICAgIEJPT0wgSXNWaXNpYmxlKElOIGNvbnN0IFJlY3QmIHJlY3QpIGNvbnN0CisgICAgeworCisgICAgICAgIEJPT0wgYm9vbG4gPSBUUlVFOworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSXNWaXNpYmxlUmVjdEkobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5YLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LldpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZib29sbikpOworICAgICAgICByZXR1cm4gYm9vbG47CisgICAgfQorCisgICAgQk9PTCBJc1Zpc2libGUoSU4gUkVBTCB4LAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBJc1Zpc2libGUoUG9pbnRGKHgsIHkpKTsKKyAgICB9CisKKyAgICBCT09MIElzVmlzaWJsZShJTiBjb25zdCBQb2ludEYmIHBvaW50KSBjb25zdAorICAgIHsKKyAgICAgICAgQk9PTCBib29sbiA9IEZBTFNFOworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSXNWaXNpYmxlUG9pbnQobmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQuWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludC5ZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZib29sbikpOworCisgICAgICAgIHJldHVybiBib29sbjsKKyAgICB9CisKKyAgICBCT09MIElzVmlzaWJsZShJTiBSRUFMIHgsCisgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5LAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBoZWlnaHQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSXNWaXNpYmxlKFJlY3RGKHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKKyAgICB9CisKKyAgICBCT09MIElzVmlzaWJsZShJTiBjb25zdCBSZWN0RiYgcmVjdCkgY29uc3QKKyAgICB7CisgICAgICAgIEJPT0wgYm9vbG4gPSBUUlVFOworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSXNWaXNpYmxlUmVjdChuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LkhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZib29sbikpOworICAgICAgICByZXR1cm4gYm9vbG47CisgICAgfQorCisgICAgLyoqCisgICAgICogU2F2ZS9yZXN0b3JlIGdyYXBoaWNzIHN0YXRlCisgICAgICovCisgICAgR3JhcGhpY3NTdGF0ZSBTYXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEdyYXBoaWNzU3RhdGUgZ3N0YXRlOworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2F2ZUdyYXBoaWNzKG5hdGl2ZUdyYXBoaWNzLCAmZ3N0YXRlKSk7CisKKyAgICAgICAgcmV0dXJuIGdzdGF0ZTsKKyAgICB9CisKKyAgICBTdGF0dXMgUmVzdG9yZShJTiBHcmFwaGljc1N0YXRlIGdzdGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFJlc3RvcmVHcmFwaGljcyhuYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdGF0ZSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEJlZ2luIGFuZCBlbmQgY29udGFpbmVyIGRyYXdpbmcKKyAgICAgKi8KKyAgICBHcmFwaGljc0NvbnRhaW5lciBCZWdpbkNvbnRhaW5lcihJTiBjb25zdCBSZWN0RiAmZHN0cmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0RiAmc3JjcmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBVbml0ICAgICAgICAgdW5pdCkKKyAgICB7CisgICAgICAgIEdyYXBoaWNzQ29udGFpbmVyIHN0YXRlOworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQmVnaW5Db250YWluZXIobmF0aXZlR3JhcGhpY3MsICZkc3RyZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcmNyZWN0LCB1bml0LCAmc3RhdGUpKTsKKworICAgICAgICByZXR1cm4gc3RhdGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogQmVnaW4gYW5kIGVuZCBjb250YWluZXIgZHJhd2luZworICAgICAqLworICAgIEdyYXBoaWNzQ29udGFpbmVyIEJlZ2luQ29udGFpbmVyKElOIGNvbnN0IFJlY3QgICAgJmRzdHJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdCAgICAmc3JjcmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBVbml0ICAgICAgICAgICB1bml0KQorICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250YWluZXIgc3RhdGU7CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBCZWdpbkNvbnRhaW5lckkobmF0aXZlR3JhcGhpY3MsICZkc3RyZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3JjcmVjdCwgdW5pdCwgJnN0YXRlKSk7CisKKyAgICAgICAgcmV0dXJuIHN0YXRlOworICAgIH0KKworICAgIEdyYXBoaWNzQ29udGFpbmVyIEJlZ2luQ29udGFpbmVyKCkKKyAgICB7CisgICAgICAgIEdyYXBoaWNzQ29udGFpbmVyIHN0YXRlOworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQmVnaW5Db250YWluZXIyKG5hdGl2ZUdyYXBoaWNzLCAmc3RhdGUpKTsKKworICAgICAgICByZXR1cm4gc3RhdGU7CisgICAgfQorCisgICAgU3RhdHVzIEVuZENvbnRhaW5lcihJTiBHcmFwaGljc0NvbnRhaW5lciBzdGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEVuZENvbnRhaW5lcihuYXRpdmVHcmFwaGljcywgc3RhdGUpKTsKKyAgICB9CisKKyAgICAvLyBvbmx5IHZhbGlkIHdoZW4gcmVjb3JkaW5nIG1ldGFmaWxlcworICAgIFN0YXR1cyBBZGRNZXRhZmlsZUNvbW1lbnQoSU4gY29uc3QgQllURSAqIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBVSU5UIHNpemVEYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ29tbWVudChuYXRpdmVHcmFwaGljcywgc2l6ZURhdGEsIGRhdGEpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQvU2V0TGF5b3V0CisgICAgICogU3VwcG9ydCBmb3IgTWlkZGxlIEVhc3QgbG9jYWxpemF0aW9uIChyaWdodC10by1sZWZ0IG1pcnJvcmluZykKKyAgICAgKi8KKyAgICBHcmFwaGljc0xheW91dCBHZXRMYXlvdXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgR3JhcGhpY3NMYXlvdXQgbGF5b3V0OworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0R3JhcGhpY3NMYXlvdXQobmF0aXZlR3JhcGhpY3MsICZsYXlvdXQpKTsKKworICAgICAgICByZXR1cm4gbGF5b3V0OworICAgIH0KKworICAgIFN0YXR1cyBTZXRMYXlvdXQoSU4gY29uc3QgR3JhcGhpY3NMYXlvdXQgbGF5b3V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cygKKyAgICAgICAgICAgIERsbEV4cG9ydHM6OkdkaXBTZXRHcmFwaGljc0xheW91dChuYXRpdmVHcmFwaGljcywgbGF5b3V0KQorICAgICAgICApOworICAgIH0KKworICAgIHN0YXRpYyBIUEFMRVRURSBHZXRIYWxmdG9uZVBhbGV0dGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERsbEV4cG9ydHM6OkdkaXBDcmVhdGVIYWxmdG9uZVBhbGV0dGUoKTsKKyAgICB9CisKKyAgICBTdGF0dXMgR2V0TGFzdFN0YXR1cygpIGNvbnN0CisgICAgeworICAgICAgICBTdGF0dXMgbGFzdFN0YXR1cyA9IGxhc3RSZXN1bHQ7CisgICAgICAgIGxhc3RSZXN1bHQgPSBPazsKKworICAgICAgICByZXR1cm4gbGFzdFN0YXR1czsKKyAgICB9CisKK3Byb3RlY3RlZDoKKworI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMgorCitwcml2YXRlOgorICAgIEdyYXBoaWNzKGNvbnN0IEdyYXBoaWNzICYpOworICAgIEdyYXBoaWNzJiBvcGVyYXRvcj0oY29uc3QgR3JhcGhpY3MgJik7Citwcm90ZWN0ZWQ6CisKKyNlbHNlCisKKyAgICBHcmFwaGljcyhjb25zdCBHcmFwaGljcyYgZ3JhcGhpY3MpCisgICAgeworICAgICAgICBncmFwaGljczsKKyAgICAgICAgU2V0U3RhdHVzKE5vdEltcGxlbWVudGVkKTsKKyAgICB9CisKKyAgICBHcmFwaGljcyYgb3BlcmF0b3I9KGNvbnN0IEdyYXBoaWNzJiBncmFwaGljcykKKyAgICB7CisgICAgICAgIGdyYXBoaWNzOworICAgICAgICBTZXRTdGF0dXMoTm90SW1wbGVtZW50ZWQpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisjZW5kaWYKKworICAgIEdyYXBoaWNzKEdwR3JhcGhpY3MqIGdyYXBoaWNzKQorICAgIHsKKyAgICAgICAgbGFzdFJlc3VsdCA9IE9rOworICAgICAgICBTZXROYXRpdmVHcmFwaGljcyhncmFwaGljcyk7CisgICAgfQorCisgICAgVk9JRCBTZXROYXRpdmVHcmFwaGljcyhHcEdyYXBoaWNzICpncmFwaGljcykKKyAgICB7CisgICAgICAgIHRoaXMtPm5hdGl2ZUdyYXBoaWNzID0gZ3JhcGhpY3M7CisgICAgfQorCisgICAgU3RhdHVzIFNldFN0YXR1cyhTdGF0dXMgc3RhdHVzKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBPaykKKyAgICAgICAgICAgIHJldHVybiAobGFzdFJlc3VsdCA9IHN0YXR1cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgLy8gTWV0aG9kcyBuZWNlc3NhcnkgdG8gc3ViY2xhc3MgR3JhcGhpY3MgZm9yIGV4dGVuc2lvbiB0ZXN0LgorCisgICAgR3BHcmFwaGljcyogR2V0TmF0aXZlR3JhcGhpY3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMtPm5hdGl2ZUdyYXBoaWNzOworICAgIH0KKworICAgIEdwUGVuKiBHZXROYXRpdmVQZW4oY29uc3QgUGVuKiBwZW4pCisgICAgeworICAgICAgICByZXR1cm4gcGVuLT5uYXRpdmVQZW47CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgR3BHcmFwaGljcyogbmF0aXZlR3JhcGhpY3M7CisgICAgbXV0YWJsZSBTdGF0dXMgbGFzdFJlc3VsdDsKKworfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFeHRyYSBpbXBsZW1lbnRhdGlvbiBvZiBHcmFwaGljc1BhdGggbWV0aG9kcyB0aGF0IHVzZSBHcmFwaGljcworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qKgorICogR2V0IHRoZSBib3VuZHMgb2YgdGhlIHBhdGggb2JqZWN0IHdpdGggdGhlIGdpdmVuIHRyYW5zZm9ybS4KKyAqIFRoaXMgaXMgbm90IGFsd2F5cyB0aGUgdGlnaHRlc3QgYm91bmRzLgorICovCisKK2lubGluZSBTdGF0dXMKK0dyYXBoaWNzUGF0aDo6R2V0Qm91bmRzKAorICAgIE9VVCBSZWN0RiogYm91bmRzLAorICAgIElOIGNvbnN0IE1hdHJpeCogbWF0cml4LAorICAgIElOIGNvbnN0IFBlbiogcGVuKSBjb25zdAoreworICAgIEdwTWF0cml4KiBuYXRpdmVNYXRyaXggPSBOVUxMOworICAgIEdwUGVuKiBuYXRpdmVQZW4gPSBOVUxMOworCisgICAgaWYgKG1hdHJpeCkKKyAgICAgICAgbmF0aXZlTWF0cml4ID0gbWF0cml4LT5uYXRpdmVNYXRyaXg7CisKKyAgICBpZiAocGVuKQorICAgICAgICBuYXRpdmVQZW4gPSBwZW4tPm5hdGl2ZVBlbjsKKworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhXb3JsZEJvdW5kcyhuYXRpdmVQYXRoLCBib3VuZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVNYXRyaXgsIG5hdGl2ZVBlbikpOworfQorCisvLyBpbnRlZ2VyIHZlcnNpb24KK2lubGluZSBTdGF0dXMKK0dyYXBoaWNzUGF0aDo6R2V0Qm91bmRzKAorICAgIE9VVCBSZWN0KiBib3VuZHMsCisgICAgSU4gY29uc3QgTWF0cml4KiBtYXRyaXgsCisgICAgSU4gY29uc3QgUGVuKiBwZW4KKykgY29uc3QKK3sKKyAgICBHcE1hdHJpeCogbmF0aXZlTWF0cml4ID0gTlVMTDsKKyAgICBHcFBlbiogbmF0aXZlUGVuID0gTlVMTDsKKworICAgIGlmIChtYXRyaXgpCisgICAgICAgIG5hdGl2ZU1hdHJpeCA9IG1hdHJpeC0+bmF0aXZlTWF0cml4OworCisgICAgaWYgKHBlbikKKyAgICAgICAgbmF0aXZlUGVuID0gcGVuLT5uYXRpdmVQZW47CisKKyAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQYXRoV29ybGRCb3VuZHNJKG5hdGl2ZVBhdGgsIGJvdW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVNYXRyaXgsIG5hdGl2ZVBlbikpOworfQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEhpdCB0ZXN0aW5nIG9wZXJhdGlvbnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpbmxpbmUgQk9PTAorR3JhcGhpY3NQYXRoOjpJc1Zpc2libGUoCisgICAgSU4gUkVBTCB4LAorICAgIElOIFJFQUwgeSwKKyAgICBJTiBjb25zdCBHcmFwaGljcyogZykgY29uc3QKK3sKKyAgIEJPT0wgYm9vbG4gPSBGQUxTRTsKKworICAgR3BHcmFwaGljcyogbmF0aXZlR3JhcGhpY3MgPSBOVUxMOworCisgICBpZiAoZykKKyAgICAgICBuYXRpdmVHcmFwaGljcyA9IGctPm5hdGl2ZUdyYXBoaWNzOworCisgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcElzVmlzaWJsZVBhdGhQb2ludChuYXRpdmVQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgeSwgbmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYm9vbG4pKTsKKyAgIHJldHVybiBib29sbjsKK30KKworaW5saW5lIEJPT0wKK0dyYXBoaWNzUGF0aDo6SXNWaXNpYmxlKAorICAgIElOIElOVCB4LAorICAgIElOIElOVCB5LAorICAgIElOIGNvbnN0IEdyYXBoaWNzKiBnKSBjb25zdAoreworICAgQk9PTCBib29sbiA9IEZBTFNFOworCisgICBHcEdyYXBoaWNzKiBuYXRpdmVHcmFwaGljcyA9IE5VTEw7CisKKyAgIGlmIChnKQorICAgICAgIG5hdGl2ZUdyYXBoaWNzID0gZy0+bmF0aXZlR3JhcGhpY3M7CisKKyAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSXNWaXNpYmxlUGF0aFBvaW50SShuYXRpdmVQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIHksIG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZib29sbikpOworICAgcmV0dXJuIGJvb2xuOworfQorCitpbmxpbmUgQk9PTAorR3JhcGhpY3NQYXRoOjpJc091dGxpbmVWaXNpYmxlKAorICAgIElOIFJFQUwgeCwKKyAgICBJTiBSRUFMIHksCisgICAgSU4gY29uc3QgUGVuKiBwZW4sCisgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcpIGNvbnN0Cit7CisgICAgQk9PTCBib29sbiA9IEZBTFNFOworCisgICAgR3BHcmFwaGljcyogbmF0aXZlR3JhcGhpY3MgPSBOVUxMOworICAgIEdwUGVuKiBuYXRpdmVQZW4gPSBOVUxMOworCisgICAgaWYoZykKKyAgICAgICAgbmF0aXZlR3JhcGhpY3MgPSBnLT5uYXRpdmVHcmFwaGljczsKKyAgICBpZihwZW4pCisgICAgICAgIG5hdGl2ZVBlbiA9IHBlbi0+bmF0aXZlUGVuOworCisgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBJc091dGxpbmVWaXNpYmxlUGF0aFBvaW50KG5hdGl2ZVBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIHksIG5hdGl2ZVBlbiwgbmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZib29sbikpOworICAgIHJldHVybiBib29sbjsKK30KKworaW5saW5lIEJPT0wKK0dyYXBoaWNzUGF0aDo6SXNPdXRsaW5lVmlzaWJsZSgKKyAgICBJTiBJTlQgeCwKKyAgICBJTiBJTlQgeSwKKyAgICBJTiBjb25zdCBQZW4qIHBlbiwKKyAgICBJTiBjb25zdCBHcmFwaGljcyogZykgY29uc3QKK3sKKyAgICBCT09MIGJvb2xuID0gRkFMU0U7CisKKyAgICBHcEdyYXBoaWNzKiBuYXRpdmVHcmFwaGljcyA9IE5VTEw7CisgICAgR3BQZW4qIG5hdGl2ZVBlbiA9IE5VTEw7CisKKyAgICBpZihnKQorICAgICAgICBuYXRpdmVHcmFwaGljcyA9IGctPm5hdGl2ZUdyYXBoaWNzOworICAgIGlmKHBlbikKKyAgICAgICAgbmF0aXZlUGVuID0gcGVuLT5uYXRpdmVQZW47CisKKyAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcElzT3V0bGluZVZpc2libGVQYXRoUG9pbnRJKG5hdGl2ZVBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCB5LCBuYXRpdmVQZW4sIG5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJvb2xuKSk7CisgICAgcmV0dXJuIGJvb2xuOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNIZWFkZXJzLmggYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzSGVhZGVycy5oCmluZGV4IDIxNWM0ZDAuLjllZmNkODkgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNIZWFkZXJzLmgKKysrIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0hlYWRlcnMuaApAQCAtMSw3OTMgKzEsNzkzIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcDQotKg0KLSogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsIE1pY3Jvc29mdCBDb3JwLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0qDQotKiBNb2R1bGUgTmFtZToNCi0qDQotKiAgIEdkaXBsdXNIZWFkZXJzLmgNCi0qDQotKiBBYnN0cmFjdDoNCi0qDQotKiAgIEdESSsgTmF0aXZlIEMrKyBwdWJsaWMgaGVhZGVyIGZpbGUNCi0qDQotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLSNpZm5kZWYgX0dESVBMVVNIRUFERVJTX0gNCi0jZGVmaW5lIF9HRElQTFVTSEVBREVSU19IDQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIHJlZ2lvbnMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotLy8gIEluY2x1ZGUgdGhlIGNsYXNzIGRlY2xhcmF0aW9ucyBoZXJlIGFuZCBoYXZlIGlubGluZSBjbGFzcyBpbXBsZW1lbnRhdGlvbg0KLS8vICBpbiBzZXBhcmF0ZSBmaWxlIHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXMuDQotDQotY2xhc3MgUmVnaW9uIDogcHVibGljIEdkaXBsdXNCYXNlDQotew0KLXB1YmxpYzoNCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzOw0KLQ0KLSAgICBSZWdpb24oKTsNCi0gICAgUmVnaW9uKElOIGNvbnN0IFJlY3RGJiByZWN0KTsNCi0gICAgUmVnaW9uKElOIGNvbnN0IFJlY3QmIHJlY3QpOw0KLSAgICBSZWdpb24oSU4gY29uc3QgR3JhcGhpY3NQYXRoKiBwYXRoKTsNCi0gICAgUmVnaW9uKElOIGNvbnN0IEJZVEUqIHJlZ2lvbkRhdGEsIElOIElOVCBzaXplKTsNCi0gICAgUmVnaW9uKElOIEhSR04gaFJnbik7DQotICAgIHN0YXRpYyBSZWdpb24qIEZyb21IUkdOKElOIEhSR04gaFJnbik7DQotDQotICAgIH5SZWdpb24oKTsNCi0gICAgUmVnaW9uKiBDbG9uZSgpIGNvbnN0Ow0KLQ0KLSAgICBTdGF0dXMgTWFrZUluZmluaXRlKCk7DQotICAgIFN0YXR1cyBNYWtlRW1wdHkoKTsNCi0NCi0gICAgLy8gR2V0IHRoZSBzaXplIG9mIHRoZSBidWZmZXIgbmVlZGVkIGZvciB0aGUgR2V0RGF0YSBtZXRob2QNCi0gICAgVUlOVCBHZXREYXRhU2l6ZSgpIGNvbnN0Ow0KLQ0KLSAgICAvLyBidWZmZXIgICAgIC0gd2hlcmUgdG8gcHV0IHRoZSBkYXRhDQotICAgIC8vIGJ1ZmZlclNpemUgLSBob3cgYmlnIHRoZSBidWZmZXIgaXMgKHNob3VsZCBiZSBhdCBsZWFzdCBhcyBiaWcgYXMgR2V0RGF0YVNpemUoKSkNCi0gICAgLy8gc2l6ZUZpbGxlZCAtIGlmIG5vdCBOVUxMLCB0aGlzIGlzIGFuIE9VVCBwYXJhbSB0aGF0IHNheXMgaG93IG1hbnkgYnl0ZXMNCi0gICAgLy8gICAgICAgICAgICAgIG9mIGRhdGEgd2VyZSB3cml0dGVuIHRvIHRoZSBidWZmZXIuDQotICAgIFN0YXR1cyBHZXREYXRhKE9VVCBCWVRFKiBidWZmZXIsDQotICAgICAgICAgICAgICAgICAgIElOIFVJTlQgYnVmZmVyU2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgT1VUIFVJTlQqIHNpemVGaWxsZWQgPSBOVUxMKSBjb25zdDsNCi0NCi0gICAgU3RhdHVzIEludGVyc2VjdChJTiBjb25zdCBSZWN0JiByZWN0KTsNCi0gICAgU3RhdHVzIEludGVyc2VjdChJTiBjb25zdCBSZWN0RiYgcmVjdCk7DQotICAgIFN0YXR1cyBJbnRlcnNlY3QoSU4gY29uc3QgR3JhcGhpY3NQYXRoKiBwYXRoKTsNCi0gICAgU3RhdHVzIEludGVyc2VjdChJTiBjb25zdCBSZWdpb24qIHJlZ2lvbik7DQotICAgIFN0YXR1cyBVbmlvbihJTiBjb25zdCBSZWN0JiByZWN0KTsNCi0gICAgU3RhdHVzIFVuaW9uKElOIGNvbnN0IFJlY3RGJiByZWN0KTsNCi0gICAgU3RhdHVzIFVuaW9uKElOIGNvbnN0IEdyYXBoaWNzUGF0aCogcGF0aCk7DQotICAgIFN0YXR1cyBVbmlvbihJTiBjb25zdCBSZWdpb24qIHJlZ2lvbik7DQotICAgIFN0YXR1cyBYb3IoSU4gY29uc3QgUmVjdCYgcmVjdCk7DQotICAgIFN0YXR1cyBYb3IoSU4gY29uc3QgUmVjdEYmIHJlY3QpOw0KLSAgICBTdGF0dXMgWG9yKElOIGNvbnN0IEdyYXBoaWNzUGF0aCogcGF0aCk7DQotICAgIFN0YXR1cyBYb3IoSU4gY29uc3QgUmVnaW9uKiByZWdpb24pOw0KLSAgICBTdGF0dXMgRXhjbHVkZShJTiBjb25zdCBSZWN0JiByZWN0KTsNCi0gICAgU3RhdHVzIEV4Y2x1ZGUoSU4gY29uc3QgUmVjdEYmIHJlY3QpOw0KLSAgICBTdGF0dXMgRXhjbHVkZShJTiBjb25zdCBHcmFwaGljc1BhdGgqIHBhdGgpOw0KLSAgICBTdGF0dXMgRXhjbHVkZShJTiBjb25zdCBSZWdpb24qIHJlZ2lvbik7DQotICAgIFN0YXR1cyBDb21wbGVtZW50KElOIGNvbnN0IFJlY3QmIHJlY3QpOw0KLSAgICBTdGF0dXMgQ29tcGxlbWVudChJTiBjb25zdCBSZWN0RiYgcmVjdCk7DQotICAgIFN0YXR1cyBDb21wbGVtZW50KElOIGNvbnN0IEdyYXBoaWNzUGF0aCogcGF0aCk7DQotICAgIFN0YXR1cyBDb21wbGVtZW50KElOIGNvbnN0IFJlZ2lvbiogcmVnaW9uKTsNCi0gICAgU3RhdHVzIFRyYW5zbGF0ZShJTiBSRUFMIGR4LA0KLSAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgZHkpOw0KLSAgICBTdGF0dXMgVHJhbnNsYXRlKElOIElOVCBkeCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgZHkpOw0KLSAgICBTdGF0dXMgVHJhbnNmb3JtKElOIGNvbnN0IE1hdHJpeCogbWF0cml4KTsNCi0NCi0gICAgU3RhdHVzIEdldEJvdW5kcyhPVVQgUmVjdCogcmVjdCwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBHcmFwaGljcyogZykgY29uc3Q7DQotDQotICAgIFN0YXR1cyBHZXRCb3VuZHMoT1VUIFJlY3RGKiByZWN0LA0KLSAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IEdyYXBoaWNzKiBnKSBjb25zdDsNCi0NCi0gICAgSFJHTiAgIEdldEhSR04gIChJTiBjb25zdCBHcmFwaGljcyAqIGcpIGNvbnN0Ow0KLQ0KLSAgICBCT09MIElzRW1wdHkoSU4gY29uc3QgR3JhcGhpY3MgKmcpIGNvbnN0Ow0KLSAgICBCT09MIElzSW5maW5pdGUoSU4gY29uc3QgR3JhcGhpY3MgKmcpIGNvbnN0Ow0KLQ0KLSAgICBCT09MIElzVmlzaWJsZShJTiBJTlQgeCwNCi0gICAgICAgICAgICAgICAgICAgSU4gSU5UIHksDQotICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IEdyYXBoaWNzKiBnID0gTlVMTCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIElzVmlzaWJsZShQb2ludCh4LCB5KSwgZyk7DQotICAgIH0NCi0NCi0gICAgQk9PTCBJc1Zpc2libGUoSU4gY29uc3QgUG9pbnQmIHBvaW50LA0KLSAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBHcmFwaGljcyogZyA9IE5VTEwpIGNvbnN0Ow0KLQ0KLSAgICBCT09MIElzVmlzaWJsZShJTiBSRUFMIHgsDQotICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeSwNCi0gICAgICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcgPSBOVUxMKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gSXNWaXNpYmxlKFBvaW50Rih4LCB5KSwgZyk7DQotICAgIH0NCi0NCi0gICAgQk9PTCBJc1Zpc2libGUoSU4gY29uc3QgUG9pbnRGJiBwb2ludCwNCi0gICAgICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcgPSBOVUxMKSBjb25zdDsNCi0NCi0gICAgQk9PTCBJc1Zpc2libGUoSU4gSU5UIHgsDQotICAgICAgICAgICAgICAgICAgIElOIElOVCB5LA0KLSAgICAgICAgICAgICAgICAgICBJTiBJTlQgd2lkdGgsDQotICAgICAgICAgICAgICAgICAgIElOIElOVCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IEdyYXBoaWNzKiBnKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gSXNWaXNpYmxlKFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCksIGcpOw0KLSAgICB9DQotDQotICAgIEJPT0wgSXNWaXNpYmxlKElOIGNvbnN0IFJlY3QmIHJlY3QsDQotICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IEdyYXBoaWNzKiBnID0gTlVMTCkgY29uc3Q7DQotDQotICAgIEJPT0wgSXNWaXNpYmxlKElOIFJFQUwgeCwNCi0gICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5LA0KLSAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICBJTiBSRUFMIGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcgPSBOVUxMKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gSXNWaXNpYmxlKFJlY3RGKHgsIHksIHdpZHRoLCBoZWlnaHQpLCBnKTsNCi0gICAgfQ0KLQ0KLSAgICBCT09MIElzVmlzaWJsZShJTiBjb25zdCBSZWN0RiYgcmVjdCwNCi0gICAgICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcgPSBOVUxMKSBjb25zdDsNCi0NCi0gICAgQk9PTCBFcXVhbHMoSU4gY29uc3QgUmVnaW9uKiByZWdpb24sDQotICAgICAgICAgICAgICAgIElOIGNvbnN0IEdyYXBoaWNzKiBnKSBjb25zdDsNCi0NCi0gICAgVUlOVCBHZXRSZWdpb25TY2Fuc0NvdW50KElOIGNvbnN0IE1hdHJpeCogbWF0cml4KSBjb25zdDsNCi0gICAgU3RhdHVzIEdldFJlZ2lvblNjYW5zKElOIGNvbnN0IE1hdHJpeCogbWF0cml4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUIFJlY3RGKiByZWN0cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE9VVCBJTlQqIGNvdW50KSBjb25zdDsNCi0gICAgU3RhdHVzIEdldFJlZ2lvblNjYW5zKElOIGNvbnN0IE1hdHJpeCogbWF0cml4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUIFJlY3QqICByZWN0cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE9VVCBJTlQqIGNvdW50KSBjb25zdDsNCi0gICAgU3RhdHVzIEdldExhc3RTdGF0dXMoKSBjb25zdDsNCi0NCi1wcm90ZWN0ZWQ6DQotDQotI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMg0KLQ0KLXByaXZhdGU6DQotICAgIFJlZ2lvbihjb25zdCBSZWdpb24gJnJlZ2lvbik7DQotICAgIFJlZ2lvbiYgb3BlcmF0b3I9KGNvbnN0IFJlZ2lvbiAmcmVnaW9uKTsNCi1wcm90ZWN0ZWQ6DQotDQotI2Vsc2UNCi0gICAgUmVnaW9uKGNvbnN0IFJlZ2lvbiAmcmVnaW9uKQ0KLSAgICB7DQotICAgICAgICByZWdpb247IC8vIHJlZmVyZW5jZSBwYXJhbWV0ZXINCi0gICAgICAgIFNldFN0YXR1cyhOb3RJbXBsZW1lbnRlZCk7DQotICAgIH0NCi0NCi0gICAgUmVnaW9uJiBvcGVyYXRvcj0oY29uc3QgUmVnaW9uICZyZWdpb24pDQotICAgIHsNCi0gICAgICAgcmVnaW9uOyAgLy8gcmVmZXJlbmNlIHBhcmFtZXRlcg0KLSAgICAgICBTZXRTdGF0dXMoTm90SW1wbGVtZW50ZWQpOw0KLSAgICAgICByZXR1cm4gKnRoaXM7DQotICAgIH0NCi0jZW5kaWYNCi0NCi0gICAgU3RhdHVzIFNldFN0YXR1cyhTdGF0dXMgc3RhdHVzKSBjb25zdA0KLSAgICB7DQotICAgICAgICBpZiAoc3RhdHVzICE9IE9rKQ0KLSAgICAgICAgICAgIHJldHVybiAobGFzdFJlc3VsdCA9IHN0YXR1cyk7DQotICAgICAgICBlbHNlDQotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCi0gICAgfQ0KLQ0KLSAgICBSZWdpb24oR3BSZWdpb24qIG5hdGl2ZVJlZ2lvbik7DQotDQotICAgIFZPSUQgU2V0TmF0aXZlUmVnaW9uKEdwUmVnaW9uKiBuYXRpdmVSZWdpb24pOw0KLQ0KLXByb3RlY3RlZDoNCi0gICAgR3BSZWdpb24qIG5hdGl2ZVJlZ2lvbjsNCi0gICAgbXV0YWJsZSBTdGF0dXMgbGFzdFJlc3VsdDsNCi19Ow0KLQ0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBGb250RmFtaWx5DQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWNsYXNzIEZvbnRGYW1pbHkgOiBwdWJsaWMgR2RpcGx1c0Jhc2UNCi17DQotcHVibGljOg0KLSAgICBmcmllbmQgY2xhc3MgRm9udDsNCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzOw0KLSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NQYXRoOw0KLSAgICBmcmllbmQgY2xhc3MgRm9udENvbGxlY3Rpb247DQotDQotICAgIEZvbnRGYW1pbHkoKTsNCi0NCi0gICAgRm9udEZhbWlseSgNCi0gICAgICAgIElOIGNvbnN0IFdDSEFSICAgICAgICAgICpuYW1lLA0KLSAgICAgICAgSU4gY29uc3QgRm9udENvbGxlY3Rpb24gKmZvbnRDb2xsZWN0aW9uID0gTlVMTA0KLSAgICApOw0KLQ0KLSAgICB+Rm9udEZhbWlseSgpOw0KLQ0KLSAgICBzdGF0aWMgY29uc3QgRm9udEZhbWlseSAqR2VuZXJpY1NhbnNTZXJpZigpOw0KLSAgICBzdGF0aWMgY29uc3QgRm9udEZhbWlseSAqR2VuZXJpY1NlcmlmKCk7DQotICAgIHN0YXRpYyBjb25zdCBGb250RmFtaWx5ICpHZW5lcmljTW9ub3NwYWNlKCk7DQotDQotICAgIFN0YXR1cyBHZXRGYW1pbHlOYW1lKA0KLSAgICAgICAgT1VUIFdDSEFSICAgICAgICBuYW1lW0xGX0ZBQ0VTSVpFXSwNCi0gICAgICAgIElOIExBTkdJRCAgICAgICAgbGFuZ3VhZ2UgPSAwDQotICAgICkgY29uc3Q7DQotDQotLy8gIENvcHkgb3BlcmF0b3INCi0gICAgRm9udEZhbWlseSAqIENsb25lKCkgY29uc3Q7DQotDQotICAgIEJPT0wgICAgSXNBdmFpbGFibGUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gKG5hdGl2ZUZhbWlseSAhPSBOVUxMKTsNCi0gICAgfTsNCi0NCi0gICAgQk9PTCAgICBJc1N0eWxlQXZhaWxhYmxlKElOIElOVCBzdHlsZSkgY29uc3Q7DQotDQotICAgIFVJTlQxNiAgR2V0RW1IZWlnaHQgICAgIChJTiBJTlQgc3R5bGUpIGNvbnN0Ow0KLSAgICBVSU5UMTYgIEdldENlbGxBc2NlbnQgICAoSU4gSU5UIHN0eWxlKSBjb25zdDsNCi0gICAgVUlOVDE2ICBHZXRDZWxsRGVzY2VudCAgKElOIElOVCBzdHlsZSkgY29uc3Q7DQotICAgIFVJTlQxNiAgR2V0TGluZVNwYWNpbmcgIChJTiBJTlQgc3R5bGUpIGNvbnN0Ow0KLQ0KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLQ0KLSAgICBTdGF0dXMgR2V0TGFzdFN0YXR1cygpIGNvbnN0Ow0KLQ0KLSNpZmRlZiBEQ1JfVVNFX05FV18yNTA5MzINCi0NCi1wcml2YXRlOg0KLSAgICBGb250RmFtaWx5KGNvbnN0IEZvbnRGYW1pbHkgJik7DQotICAgIEZvbnRGYW1pbHkmIG9wZXJhdG9yPShjb25zdCBGb250RmFtaWx5ICYpOw0KLQ0KLSNlbmRpZg0KLQ0KLXByb3RlY3RlZDoNCi0gICAgU3RhdHVzIFNldFN0YXR1cyhTdGF0dXMgc3RhdHVzKSBjb25zdDsNCi0NCi0gICAgLy8gcHJpdmF0ZSBjb25zdHJ1Y3RvciBmb3IgY29weQ0KLSAgICBGb250RmFtaWx5KEdwRm9udEZhbWlseSAqIG5hdGl2ZUZhbWlseSwgU3RhdHVzIHN0YXR1cyk7DQotDQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotLy8gIERhdGEgbWVtYmVycw0KLXByb3RlY3RlZDoNCi0NCi0gICAgR3BGb250RmFtaWx5ICAgICpuYXRpdmVGYW1pbHk7DQotICAgIG11dGFibGUgU3RhdHVzICAgbGFzdFJlc3VsdDsNCi19Ow0KLQ0KLXN0YXRpYyBGb250RmFtaWx5ICpHZW5lcmljU2Fuc1NlcmlmRm9udEZhbWlseSA9IE5VTEw7DQotc3RhdGljIEZvbnRGYW1pbHkgKkdlbmVyaWNTZXJpZkZvbnRGYW1pbHkgICAgID0gTlVMTDsNCi1zdGF0aWMgRm9udEZhbWlseSAqR2VuZXJpY01vbm9zcGFjZUZvbnRGYW1pbHkgPSBOVUxMOw0KLQ0KLXN0YXRpYyBCWVRFIEdlbmVyaWNTYW5zU2VyaWZGb250RmFtaWx5QnVmZmVyW3NpemVvZihGb250RmFtaWx5KV0gPSB7MH07DQotc3RhdGljIEJZVEUgR2VuZXJpY1NlcmlmRm9udEZhbWlseUJ1ZmZlciAgICBbc2l6ZW9mKEZvbnRGYW1pbHkpXSA9IHswfTsNCi1zdGF0aWMgQllURSBHZW5lcmljTW9ub3NwYWNlRm9udEZhbWlseUJ1ZmZlcltzaXplb2YoRm9udEZhbWlseSldID0gezB9Ow0KLQ0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBmb250cw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1jbGFzcyBGb250IDogcHVibGljIEdkaXBsdXNCYXNlDQotew0KLXB1YmxpYzoNCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzOw0KLQ0KLSAgICBGb250KElOIEhEQyBoZGMpOw0KLSAgICBGb250KElOIEhEQyBoZGMsDQotICAgICAgICAgSU4gY29uc3QgTE9HRk9OVEEqIGxvZ2ZvbnQpOw0KLSAgICBGb250KElOIEhEQyBoZGMsDQotICAgICAgICAgSU4gY29uc3QgTE9HRk9OVFcqIGxvZ2ZvbnQpOw0KLSNpZmRlZiBEQ1JfVVNFX05FV18xMjcwODQNCi0gICAgRm9udChJTiBIREMgaGRjLA0KLSAgICAgICAgIElOIGNvbnN0IEhGT05UIGhmb250KTsNCi0jZW5kaWYNCi0gICAgRm9udCgNCi0gICAgICAgIElOIGNvbnN0IEZvbnRGYW1pbHkgKiBmYW1pbHksDQotICAgICAgICBJTiBSRUFMICAgICAgICAgZW1TaXplLA0KLSAgICAgICAgSU4gSU5UICAgICAgICAgIHN0eWxlICAgPSBGb250U3R5bGVSZWd1bGFyLA0KLSAgICAgICAgSU4gVW5pdCAgICAgICAgIHVuaXQgICAgPSBVbml0UG9pbnQNCi0gICAgKTsNCi0NCi0gICAgRm9udCgNCi0gICAgICAgIElOIGNvbnN0IFdDSEFSICogICAgICAgICAgIGZhbWlseU5hbWUsDQotICAgICAgICBJTiBSRUFMICAgICAgICAgICAgICAgICAgICBlbVNpemUsDQotICAgICAgICBJTiBJTlQgICAgICAgICAgICAgICAgICAgICBzdHlsZSAgID0gRm9udFN0eWxlUmVndWxhciwNCi0gICAgICAgIElOIFVuaXQgICAgICAgICAgICAgICAgICAgIHVuaXQgICAgPSBVbml0UG9pbnQsDQotICAgICAgICBJTiBjb25zdCBGb250Q29sbGVjdGlvbiAqICBmb250Q29sbGVjdGlvbiA9IE5VTEwNCi0gICAgKTsNCi0NCi0gICAgU3RhdHVzIEdldExvZ0ZvbnRBKElOIGNvbnN0IEdyYXBoaWNzKiBnLA0KLSAgICAgICAgICAgICAgICAgICAgICAgT1VUICBMT0dGT05UQSAqIGxvZ2ZvbnRBKSBjb25zdDsNCi0gICAgU3RhdHVzIEdldExvZ0ZvbnRXKElOIGNvbnN0IEdyYXBoaWNzKiBnLA0KLSAgICAgICAgICAgICAgICAgICAgICAgT1VUIExPR0ZPTlRXICogbG9nZm9udFcpIGNvbnN0Ow0KLQ0KLSAgICBGb250KiBDbG9uZSgpIGNvbnN0Ow0KLSAgICB+Rm9udCgpOw0KLSAgICBCT09MICAgICAgICBJc0F2YWlsYWJsZSgpICAgY29uc3Q7DQotICAgIElOVCAgICAgICAgIEdldFN0eWxlKCkgICAgICBjb25zdDsNCi0gICAgUkVBTCAgICAgICAgR2V0U2l6ZSgpICAgICAgIGNvbnN0Ow0KLSAgICBVbml0ICAgICAgICBHZXRVbml0KCkgICAgICAgY29uc3Q7DQotICAgIFN0YXR1cyAgICAgIEdldExhc3RTdGF0dXMoKSBjb25zdDsNCi0gICAgUkVBTCAgICAgICAgR2V0SGVpZ2h0KElOIGNvbnN0IEdyYXBoaWNzICpncmFwaGljcyA9IE5VTEwpIGNvbnN0Ow0KLSNpZmRlZiBEQ1JfVVNFX05FV18xMjU0NjcNCi0gICAgUkVBTCAgICAgICAgR2V0SGVpZ2h0KElOIFJFQUwgZHBpKSBjb25zdDsNCi0jZW5kaWYNCi0NCi0gICAgU3RhdHVzIEdldEZhbWlseShPVVQgRm9udEZhbWlseSAqZmFtaWx5KSBjb25zdDsNCi0NCi0jaWZkZWYgRENSX1VTRV9ORVdfMjUwOTMyDQotDQotcHJpdmF0ZToNCi0gICAgRm9udChjb25zdCBGb250ICYpOw0KLSAgICBGb250JiBvcGVyYXRvcj0oY29uc3QgRm9udCAmKTsNCi0NCi0jZW5kaWYNCi0NCi1wcm90ZWN0ZWQ6DQotICAgIEZvbnQoR3BGb250KiBmb250LCBTdGF0dXMgc3RhdHVzKTsNCi0gICAgVk9JRCBTZXROYXRpdmVGb250KEdwRm9udCAqRm9udCk7DQotICAgIFN0YXR1cyBTZXRTdGF0dXMoU3RhdHVzIHN0YXR1cykgY29uc3Q7DQotDQotcHJvdGVjdGVkOg0KLSAgICAvKg0KLSAgICAgKiBoYW5kbGUgdG8gbmF0aXZlIGxpbmUgdGV4dHVyZSBvYmplY3QNCi0gICAgICovDQotDQotICAgIEdwRm9udCogbmF0aXZlRm9udDsNCi0gICAgbXV0YWJsZSBTdGF0dXMgbGFzdFJlc3VsdDsNCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBBYnN0cmFjdCBiYXNlIGNsYXNzZXMgZm9yIGZvbnQgY29sbGVjdGlvbnMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotY2xhc3MgRm9udENvbGxlY3Rpb24gOiBwdWJsaWMgR2RpcGx1c0Jhc2UNCi17DQotcHVibGljOg0KLSAgICBmcmllbmQgY2xhc3MgRm9udEZhbWlseTsNCi0NCi0gICAgRm9udENvbGxlY3Rpb24oKTsNCi0gICAgdmlydHVhbCB+Rm9udENvbGxlY3Rpb24oKTsNCi0NCi0gICAgSU5UIEdldEZhbWlseUNvdW50KCkgY29uc3Q7ICAgICAvLyBudW1iZXIgb2YgZW51bWVyYWJsZSBmYW1pbGllcyBpbiB0aGUgY29sbGVjdGlvbg0KLQ0KLSAgICBTdGF0dXMgR2V0RmFtaWxpZXMoICAgICAgICAgICAgIC8vIGVudW1lcmF0ZSB0aGUgZm9udHMgaW4gYSBjb2xsZWN0aW9uDQotICAgICAgICBJTiBJTlQgICAgICAgICAgIG51bVNvdWdodCwNCi0gICAgICAgIE9VVCBGb250RmFtaWx5ICogZ3BmYW1pbGllcywNCi0gICAgICAgIE9VVCBJTlQgICAgICAgICogbnVtRm91bmQNCi0gICAgKSBjb25zdDsNCi0NCi0gICAgU3RhdHVzIEdldExhc3RTdGF0dXMoKSBjb25zdDsNCi0NCi0jaWZkZWYgRENSX1VTRV9ORVdfMjUwOTMyDQotDQotcHJpdmF0ZToNCi0gICAgRm9udENvbGxlY3Rpb24oY29uc3QgRm9udENvbGxlY3Rpb24gJik7DQotICAgIEZvbnRDb2xsZWN0aW9uJiBvcGVyYXRvcj0oY29uc3QgRm9udENvbGxlY3Rpb24gJik7DQotDQotI2VuZGlmDQotDQotcHJvdGVjdGVkOg0KLSAgICBTdGF0dXMgU2V0U3RhdHVzKFN0YXR1cyBzdGF0dXMpIGNvbnN0IDsNCi0NCi0gICAgR3BGb250Q29sbGVjdGlvbiAqbmF0aXZlRm9udENvbGxlY3Rpb247DQotICAgIG11dGFibGUgU3RhdHVzICAgIGxhc3RSZXN1bHQ7DQotfTsNCi0NCi0NCi1jbGFzcyBJbnN0YWxsZWRGb250Q29sbGVjdGlvbiA6IHB1YmxpYyBGb250Q29sbGVjdGlvbg0KLXsNCi1wdWJsaWM6DQotICAgIEluc3RhbGxlZEZvbnRDb2xsZWN0aW9uKCk7DQotICAgIH5JbnN0YWxsZWRGb250Q29sbGVjdGlvbigpOw0KLQ0KLSNpZmRlZiBEQ1JfVVNFX05FV18yNTA5MzINCi0NCi1wcml2YXRlOg0KLSAgICBJbnN0YWxsZWRGb250Q29sbGVjdGlvbihjb25zdCBJbnN0YWxsZWRGb250Q29sbGVjdGlvbiAmKTsNCi0gICAgSW5zdGFsbGVkRm9udENvbGxlY3Rpb24mIG9wZXJhdG9yPShjb25zdCBJbnN0YWxsZWRGb250Q29sbGVjdGlvbiAmKTsNCi0NCi0jZW5kaWYNCi0NCi1wcm90ZWN0ZWQ6DQotI2lmbmRlZiBEQ1JfVVNFX05FV18yMzUwNzINCi0gICAgU3RhdHVzIEluc3RhbGxGb250RmlsZShJTiBjb25zdCBXQ0hBUiogZmlsZW5hbWUpOw0KLSAgICBTdGF0dXMgVW5pbnN0YWxsRm9udEZpbGUoSU4gY29uc3QgV0NIQVIqIGZpbGVuYW1lKTsNCi0jZW5kaWYNCi0gICAgU3RhdHVzIFNldFN0YXR1cyhTdGF0dXMgc3RhdHVzKSBjb25zdCA7DQotfTsNCi0NCi0NCi1jbGFzcyBQcml2YXRlRm9udENvbGxlY3Rpb24gOiBwdWJsaWMgRm9udENvbGxlY3Rpb24NCi17DQotcHVibGljOg0KLSAgICBQcml2YXRlRm9udENvbGxlY3Rpb24oKTsNCi0gICAgflByaXZhdGVGb250Q29sbGVjdGlvbigpOw0KLQ0KLSAgICBTdGF0dXMgQWRkRm9udEZpbGUoSU4gY29uc3QgV0NIQVIqIGZpbGVuYW1lKTsNCi0gICAgU3RhdHVzIEFkZE1lbW9yeUZvbnQoSU4gY29uc3QgVk9JRCogbWVtb3J5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgbGVuZ3RoKTsNCi0NCi0jaWZkZWYgRENSX1VTRV9ORVdfMjUwOTMyDQotDQotcHJpdmF0ZToNCi0gICAgUHJpdmF0ZUZvbnRDb2xsZWN0aW9uKGNvbnN0IFByaXZhdGVGb250Q29sbGVjdGlvbiAmKTsNCi0gICAgUHJpdmF0ZUZvbnRDb2xsZWN0aW9uJiBvcGVyYXRvcj0oY29uc3QgUHJpdmF0ZUZvbnRDb2xsZWN0aW9uICYpOw0KLQ0KLSNlbmRpZg0KLX07DQotDQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGJpdG1hcCBpbWFnZSBhbmQgbWV0YWZpbGUNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotLy8gISEhIE5vdGU6DQotLy8gIEluY2x1ZGUgdGhlIGNsYXNzIGRlY2xhcmF0aW9ucyBoZXJlIGFuZCBoYXZlIHRoZSBpbmxpbmUgY2xhc3MNCi0vLyAgaW1wbGVtZW50YXRpb24gaW4gYSBzZXBhcmF0ZSBmaWxlLiAgVGhpcyBpcyBkb25lIHRvIHJlc29sdmUgYQ0KLS8vICBjaXJjdWxhciBkZXBlbmRlbmN5IHNpbmNlIG9uZSBvZiB0aGUgQml0bWFwIG1ldGhvZHMgbmVlZHMgdG8NCi0vLyAgYWNjZXNzIHRoZSBwcml2YXRlIG1lbWJlciBuYXRpdmVHcmFwaGljcyBvZiB0aGUgR3JhcGhpY3Mgb2JqZWN0Lg0KLQ0KLWNsYXNzIEltYWdlIDogcHVibGljIEdkaXBsdXNCYXNlDQotew0KLXB1YmxpYzoNCi0gICAgZnJpZW5kIGNsYXNzIEJydXNoOw0KLSAgICBmcmllbmQgY2xhc3MgVGV4dHVyZUJydXNoOw0KLSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3M7DQotDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xNDA3ODINCi0gICAgSW1hZ2UoDQotICAgICAgICBJTiBjb25zdCBXQ0hBUiogZmlsZW5hbWUNCi0gICAgKTsNCi0NCi0gICAgSW1hZ2UoDQotICAgICAgICBJTiBJU3RyZWFtKiBzdHJlYW0NCi0gICAgKTsNCi0NCi0gICAgc3RhdGljIEltYWdlKiBGcm9tRmlsZSgNCi0gICAgICAgIElOIGNvbnN0IFdDSEFSKiBmaWxlbmFtZQ0KLSAgICApOw0KLQ0KLSAgICBzdGF0aWMgSW1hZ2UqIEZyb21TdHJlYW0oDQotICAgICAgICBJTiBJU3RyZWFtKiBzdHJlYW0NCi0gICAgKTsNCi0jZWxzZQ0KLSAgICBJbWFnZSgNCi0gICAgICAgIElOIGNvbnN0IFdDSEFSKiBmaWxlbmFtZSwNCi0gICAgICAgIElOIEJPT0wgdXNlRW1iZWRkZWRDb2xvck1hbmFnZW1lbnQgPSBGQUxTRQ0KLSAgICApOw0KLQ0KLSAgICBJbWFnZSgNCi0gICAgICAgIElOIElTdHJlYW0qIHN0cmVhbSwNCi0gICAgICAgIElOIEJPT0wgdXNlRW1iZWRkZWRDb2xvck1hbmFnZW1lbnQgPSBGQUxTRQ0KLSAgICApOw0KLQ0KLSAgICBzdGF0aWMgSW1hZ2UqIEZyb21GaWxlKA0KLSAgICAgICAgSU4gY29uc3QgV0NIQVIqIGZpbGVuYW1lLA0KLSAgICAgICAgSU4gQk9PTCB1c2VFbWJlZGRlZENvbG9yTWFuYWdlbWVudCA9IEZBTFNFDQotICAgICk7DQotDQotICAgIHN0YXRpYyBJbWFnZSogRnJvbVN0cmVhbSgNCi0gICAgICAgIElOIElTdHJlYW0qIHN0cmVhbSwNCi0gICAgICAgIElOIEJPT0wgdXNlRW1iZWRkZWRDb2xvck1hbmFnZW1lbnQgPSBGQUxTRQ0KLSAgICApOw0KLSNlbmRpZg0KLQ0KLSAgICB2aXJ0dWFsIH5JbWFnZSgpOw0KLSAgICB2aXJ0dWFsIEltYWdlKiBDbG9uZSgpOw0KLQ0KLSAgICBTdGF0dXMgU2F2ZShJTiBjb25zdCBXQ0hBUiogZmlsZW5hbWUsDQotICAgICAgICAgICAgICAgIElOIGNvbnN0IENMU0lEKiBjbHNpZEVuY29kZXIsDQotICAgICAgICAgICAgICAgIElOIGNvbnN0IEVuY29kZXJQYXJhbWV0ZXJzICplbmNvZGVyUGFyYW1zID0gTlVMTCk7DQotICAgIFN0YXR1cyBTYXZlKElOIElTdHJlYW0qIHN0cmVhbSwNCi0gICAgICAgICAgICAgICAgSU4gY29uc3QgQ0xTSUQqIGNsc2lkRW5jb2RlciwNCi0gICAgICAgICAgICAgICAgSU4gY29uc3QgRW5jb2RlclBhcmFtZXRlcnMgKmVuY29kZXJQYXJhbXMgPSBOVUxMKTsNCi0gICAgU3RhdHVzIFNhdmVBZGQoSU4gY29uc3QgRW5jb2RlclBhcmFtZXRlcnMqIGVuY29kZXJQYXJhbXMpOw0KLSAgICBTdGF0dXMgU2F2ZUFkZChJTiBJbWFnZSogbmV3SW1hZ2UsDQotICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IEVuY29kZXJQYXJhbWV0ZXJzKiBlbmNvZGVyUGFyYW1zKTsNCi0NCi0gICAgSW1hZ2VUeXBlIEdldFR5cGUoKSBjb25zdDsNCi0gICAgU3RhdHVzIEdldFBoeXNpY2FsRGltZW5zaW9uKE9VVCBTaXplRiogc2l6ZSk7DQotICAgIFN0YXR1cyBHZXRCb3VuZHMoT1VUIFJlY3RGKiBzcmNSZWN0LA0KLSAgICAgICAgICAgICAgICAgICAgIE9VVCBVbml0KiBzcmNVbml0KTsNCi0NCi0gICAgVUlOVCBHZXRXaWR0aCgpOw0KLSAgICBVSU5UIEdldEhlaWdodCgpOw0KLSAgICBSRUFMIEdldEhvcml6b250YWxSZXNvbHV0aW9uKCk7DQotICAgIFJFQUwgR2V0VmVydGljYWxSZXNvbHV0aW9uKCk7DQotICAgIFVJTlQgR2V0RmxhZ3MoKTsNCi0gICAgU3RhdHVzIEdldFJhd0Zvcm1hdChPVVQgR1VJRCAqZm9ybWF0KTsNCi0gICAgUGl4ZWxGb3JtYXQgR2V0UGl4ZWxGb3JtYXQoKTsNCi0NCi0gICAgSU5UIEdldFBhbGV0dGVTaXplKCk7DQotICAgIFN0YXR1cyBHZXRQYWxldHRlKE9VVCBDb2xvclBhbGV0dGUqIHBhbGV0dGUsDQotICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBzaXplKTsNCi0gICAgU3RhdHVzIFNldFBhbGV0dGUoSU4gY29uc3QgQ29sb3JQYWxldHRlKiBwYWxldHRlKTsNCi0NCi0gICAgSW1hZ2UqIEdldFRodW1ibmFpbEltYWdlKElOIFVJTlQgdGh1bWJXaWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIFVJTlQgdGh1bWJIZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBHZXRUaHVtYm5haWxJbWFnZUFib3J0IGNhbGxiYWNrID0gTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIFZPSUQqIGNhbGxiYWNrRGF0YSA9IE5VTEwpOw0KLSAgICBVSU5UIEdldEZyYW1lRGltZW5zaW9uc0NvdW50KCk7DQotICAgIFN0YXR1cyBHZXRGcmFtZURpbWVuc2lvbnNMaXN0KE9VVCBHVUlEKiBkaW1lbnNpb25JRHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIFVJTlQgY291bnQpOw0KLSAgICBVSU5UIEdldEZyYW1lQ291bnQoSU4gY29uc3QgR1VJRCogZGltZW5zaW9uSUQpOw0KLSAgICBTdGF0dXMgU2VsZWN0QWN0aXZlRnJhbWUoSU4gY29uc3QgR1VJRCogZGltZW5zaW9uSUQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBVSU5UIGZyYW1lSW5kZXgpOw0KLSAgICBTdGF0dXMgUm90YXRlRmxpcChJTiBSb3RhdGVGbGlwVHlwZSByb3RhdGVGbGlwVHlwZSk7DQotICAgIFVJTlQgR2V0UHJvcGVydHlDb3VudCgpOw0KLSAgICBTdGF0dXMgR2V0UHJvcGVydHlJZExpc3QoSU4gVUlOVCBudW1PZlByb3BlcnR5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUIFBST1BJRCogbGlzdCk7DQotICAgIFVJTlQgR2V0UHJvcGVydHlJdGVtU2l6ZShJTiBQUk9QSUQgcHJvcElkKTsNCi0gICAgU3RhdHVzIEdldFByb3BlcnR5SXRlbShJTiBQUk9QSUQgcHJvcElkLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIFVJTlQgcHJvcFNpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUIFByb3BlcnR5SXRlbSogYnVmZmVyKTsNCi0gICAgU3RhdHVzIEdldFByb3BlcnR5U2l6ZShPVVQgVUlOVCogdG90YWxCdWZmZXJTaXplLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVCBVSU5UKiBudW1Qcm9wZXJ0aWVzKTsNCi0gICAgU3RhdHVzIEdldEFsbFByb3BlcnR5SXRlbXMoSU4gVUlOVCB0b3RhbEJ1ZmZlclNpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIFVJTlQgbnVtUHJvcGVydGllcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUIFByb3BlcnR5SXRlbSogYWxsSXRlbXMpOw0KLSAgICBTdGF0dXMgUmVtb3ZlUHJvcGVydHlJdGVtKElOIFBST1BJRCBwcm9wSWQpOw0KLSAgICBTdGF0dXMgU2V0UHJvcGVydHlJdGVtKElOIGNvbnN0IFByb3BlcnR5SXRlbSogaXRlbSk7DQotDQotICAgIFVJTlQgIEdldEVuY29kZXJQYXJhbWV0ZXJMaXN0U2l6ZShJTiBjb25zdCBDTFNJRCogY2xzaWRFbmNvZGVyKTsNCi0gICAgU3RhdHVzIEdldEVuY29kZXJQYXJhbWV0ZXJMaXN0KElOIGNvbnN0IENMU0lEKiBjbHNpZEVuY29kZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBVSU5UIHNpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVQgRW5jb2RlclBhcmFtZXRlcnMqIGJ1ZmZlcik7DQotDQotICAgIC8vIFN1cHBvcnQgZm9yIE1pZGRsZSBFYXN0IGxvY2FsaXphdGlvbiAocmlnaHQtdG8tbGVmdCBtaXJyb3JpbmcpDQotICAgIEltYWdlTGF5b3V0IEdldExheW91dCgpIGNvbnN0Ow0KLSAgICBTdGF0dXMgU2V0TGF5b3V0KElOIGNvbnN0IEltYWdlTGF5b3V0IGxheW91dCk7DQotDQotICAgIFN0YXR1cyBHZXRMYXN0U3RhdHVzKCkgY29uc3Q7DQotDQotcHJvdGVjdGVkOg0KLQ0KLSAgICBJbWFnZSgpIHt9DQotDQotICAgIEltYWdlKEdwSW1hZ2UgKm5hdGl2ZUltYWdlLCBTdGF0dXMgc3RhdHVzKTsNCi0NCi0gICAgVk9JRCBTZXROYXRpdmVJbWFnZShHcEltYWdlKiBuYXRpdmVJbWFnZSk7DQotDQotICAgIFN0YXR1cyBTZXRTdGF0dXMoU3RhdHVzIHN0YXR1cykgY29uc3QNCi0gICAgew0KLSAgICAgICAgaWYgKHN0YXR1cyAhPSBPaykNCi0gICAgICAgICAgICByZXR1cm4gKGxhc3RSZXN1bHQgPSBzdGF0dXMpOw0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQotICAgIH0NCi0NCi0gICAgR3BJbWFnZSogbmF0aXZlSW1hZ2U7DQotICAgIG11dGFibGUgU3RhdHVzIGxhc3RSZXN1bHQ7DQotICAgIG11dGFibGUgU3RhdHVzIGxvYWRTdGF0dXM7DQotDQotI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMg0KLQ0KLXByaXZhdGU6DQotDQotI2Vsc2UNCi0NCi1wcm90ZWN0ZWQ6DQotDQotI2VuZGlmDQotDQotICAgIC8vIERpc2FibGUgY29weSBjb25zdHJ1Y3RvciBhbmQgYXNzaWdubWVudCBvcGVyYXRvcg0KLQ0KLSAgICBJbWFnZShJTiBjb25zdCBJbWFnZSYgQyk7DQotICAgIEltYWdlJiBvcGVyYXRvcj0oSU4gY29uc3QgSW1hZ2UmIEMpOw0KLX07DQotDQotY2xhc3MgQml0bWFwIDogcHVibGljIEltYWdlDQotew0KLXB1YmxpYzoNCi0gICAgZnJpZW5kIGNsYXNzIEltYWdlOw0KLSAgICBmcmllbmQgY2xhc3MgQ2FjaGVkQml0bWFwOw0KLQ0KLSAgICBCaXRtYXAoDQotICAgICAgICBJTiBjb25zdCBXQ0hBUiAqZmlsZW5hbWUsDQotICAgICAgICBJTiBCT09MIHVzZUVtYmVkZGVkQ29sb3JNYW5hZ2VtZW50ID0gRkFMU0UNCi0gICAgKTsNCi0NCi0gICAgQml0bWFwKA0KLSAgICAgICAgSU4gSVN0cmVhbSAqc3RyZWFtLA0KLSAgICAgICAgSU4gQk9PTCB1c2VFbWJlZGRlZENvbG9yTWFuYWdlbWVudCA9IEZBTFNFDQotICAgICk7DQotDQotICAgIHN0YXRpYyBCaXRtYXAqIEZyb21GaWxlKA0KLSAgICAgICAgSU4gY29uc3QgV0NIQVIgKmZpbGVuYW1lLA0KLSAgICAgICAgSU4gQk9PTCB1c2VFbWJlZGRlZENvbG9yTWFuYWdlbWVudCA9IEZBTFNFDQotICAgICk7DQotDQotICAgIHN0YXRpYyBCaXRtYXAqIEZyb21TdHJlYW0oDQotICAgICAgICBJTiBJU3RyZWFtICpzdHJlYW0sDQotICAgICAgICBJTiBCT09MIHVzZUVtYmVkZGVkQ29sb3JNYW5hZ2VtZW50ID0gRkFMU0UNCi0gICAgKTsNCi0NCi0gICAgQml0bWFwKElOIElOVCB3aWR0aCwNCi0gICAgICAgICAgIElOIElOVCBoZWlnaHQsDQotICAgICAgICAgICBJTiBJTlQgc3RyaWRlLCBQaXhlbEZvcm1hdCBmb3JtYXQsDQotICAgICAgICAgICBJTiBCWVRFKiBzY2FuMCk7DQotICAgIEJpdG1hcChJTiBJTlQgd2lkdGgsDQotICAgICAgICAgICBJTiBJTlQgaGVpZ2h0LA0KLSAgICAgICAgICAgSU4gUGl4ZWxGb3JtYXQgZm9ybWF0ID0gUGl4ZWxGb3JtYXQzMmJwcEFSR0IpOw0KLSAgICBCaXRtYXAoSU4gSU5UIHdpZHRoLA0KLSAgICAgICAgICAgSU4gSU5UIGhlaWdodCwNCi0gICAgICAgICAgIElOICBHcmFwaGljcyogdGFyZ2V0KTsNCi0NCi0gICAgQml0bWFwKiBDbG9uZShJTiBjb25zdCBSZWN0JiByZWN0LA0KLSAgICAgICAgICAgICAgICAgIElOIFBpeGVsRm9ybWF0IGZvcm1hdCk7DQotICAgIEJpdG1hcCogQ2xvbmUoSU4gSU5UIHgsDQotICAgICAgICAgICAgICAgICAgSU4gSU5UIHksDQotICAgICAgICAgICAgICAgICAgSU4gSU5UIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgIElOIElOVCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgSU4gUGl4ZWxGb3JtYXQgZm9ybWF0KTsNCi0gICAgQml0bWFwKiBDbG9uZShJTiBjb25zdCBSZWN0RiYgcmVjdCwNCi0gICAgICAgICAgICAgICAgICBJTiBQaXhlbEZvcm1hdCBmb3JtYXQpOw0KLSAgICBCaXRtYXAqIENsb25lKElOIFJFQUwgeCwNCi0gICAgICAgICAgICAgICAgICBJTiBSRUFMIHksDQotICAgICAgICAgICAgICAgICAgSU4gUkVBTCB3aWR0aCwNCi0gICAgICAgICAgICAgICAgICBJTiBSRUFMIGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICBJTiBQaXhlbEZvcm1hdCBmb3JtYXQpOw0KLQ0KLSAgICBTdGF0dXMgTG9ja0JpdHMoSU4gY29uc3QgUmVjdCYgcmVjdCwNCi0gICAgICAgICAgICAgICAgICAgIElOIFVJTlQgZmxhZ3MsDQotICAgICAgICAgICAgICAgICAgICBJTiBQaXhlbEZvcm1hdCBmb3JtYXQsDQotICAgICAgICAgICAgICAgICAgICBPVVQgQml0bWFwRGF0YSogbG9ja2VkQml0bWFwRGF0YSk7DQotICAgIFN0YXR1cyBVbmxvY2tCaXRzKElOIEJpdG1hcERhdGEqIGxvY2tlZEJpdG1hcERhdGEpOw0KLSAgICBTdGF0dXMgR2V0UGl4ZWwoSU4gSU5UIHgsDQotICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeSwNCi0gICAgICAgICAgICAgICAgICAgIE9VVCBDb2xvciAqY29sb3IpOw0KLSAgICBTdGF0dXMgU2V0UGl4ZWwoSU4gSU5UIHgsDQotICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeSwNCi0gICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IENvbG9yICZjb2xvcik7DQotICAgIFN0YXR1cyBTZXRSZXNvbHV0aW9uKElOIFJFQUwgeGRwaSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5ZHBpKTsNCi0NCi0gICAgLy8gR0RJIGludGVyb3A6DQotDQotICAgIEJpdG1hcChJTiBJRGlyZWN0RHJhd1N1cmZhY2U3KiBzdXJmYWNlKTsNCi0gICAgQml0bWFwKElOIGNvbnN0IEJJVE1BUElORk8qIGdkaUJpdG1hcEluZm8sDQotICAgICAgICAgICBJTiBWT0lEKiBnZGlCaXRtYXBEYXRhKTsNCi0gICAgQml0bWFwKElOIEhCSVRNQVAgaGJtLA0KLSAgICAgICAgICAgSU4gSFBBTEVUVEUgaHBhbCk7DQotICAgIEJpdG1hcChJTiBISUNPTiBoaWNvbik7DQotICAgIEJpdG1hcChJTiBISU5TVEFOQ0UgaEluc3RhbmNlLA0KLSAgICAgICAgICAgSU4gY29uc3QgV0NIQVIgKiBiaXRtYXBOYW1lKTsNCi0gICAgc3RhdGljIEJpdG1hcCogRnJvbURpcmVjdERyYXdTdXJmYWNlNyhJTiBJRGlyZWN0RHJhd1N1cmZhY2U3KiBzdXJmYWNlKTsNCi0gICAgc3RhdGljIEJpdG1hcCogRnJvbUJJVE1BUElORk8oSU4gY29uc3QgQklUTUFQSU5GTyogZ2RpQml0bWFwSW5mbywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gVk9JRCogZ2RpQml0bWFwRGF0YSk7DQotICAgIHN0YXRpYyBCaXRtYXAqIEZyb21IQklUTUFQKElOIEhCSVRNQVAgaGJtLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBIUEFMRVRURSBocGFsKTsNCi0gICAgc3RhdGljIEJpdG1hcCogRnJvbUhJQ09OKElOIEhJQ09OIGhpY29uKTsNCi0gICAgc3RhdGljIEJpdG1hcCogRnJvbVJlc291cmNlKElOIEhJTlNUQU5DRSBoSW5zdGFuY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBXQ0hBUiAqIGJpdG1hcE5hbWUpOw0KLQ0KLSAgICBTdGF0dXMgR2V0SEJJVE1BUChJTiBjb25zdCBDb2xvciYgY29sb3JCYWNrZ3JvdW5kLA0KLSAgICAgICAgICAgICAgICAgICAgICBPVVQgSEJJVE1BUCAqaGJtUmV0dXJuKTsNCi0gICAgU3RhdHVzIEdldEhJQ09OKEhJQ09OICpoaWNvbik7DQotDQotI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMg0KLXByaXZhdGU6DQotICAgIEJpdG1hcChjb25zdCBCaXRtYXAgJik7DQotICAgIEJpdG1hcCYgb3BlcmF0b3I9KGNvbnN0IEJpdG1hcCAmKTsNCi0jZW5kaWYNCi0NCi1wcm90ZWN0ZWQ6DQotICAgIEJpdG1hcChHcEJpdG1hcCAqbmF0aXZlQml0bWFwKTsNCi19Ow0KLQ0KLWNsYXNzIEN1c3RvbUxpbmVDYXAgOiBwdWJsaWMgR2RpcGx1c0Jhc2UNCi17DQotcHVibGljOg0KLSAgICBmcmllbmQgY2xhc3MgUGVuOw0KLQ0KLSAgICBDdXN0b21MaW5lQ2FwKA0KLSAgICAgICAgSU4gY29uc3QgR3JhcGhpY3NQYXRoKiBmaWxsUGF0aCwNCi0gICAgICAgIElOIGNvbnN0IEdyYXBoaWNzUGF0aCogc3Ryb2tlUGF0aCwNCi0gICAgICAgIElOIExpbmVDYXAgYmFzZUNhcCA9IExpbmVDYXBGbGF0LA0KLSAgICAgICAgSU4gUkVBTCBiYXNlSW5zZXQgPSAwDQotICAgICAgICApOw0KLSAgICB2aXJ0dWFsIH5DdXN0b21MaW5lQ2FwKCk7DQotDQotICAgIEN1c3RvbUxpbmVDYXAqIENsb25lKCkgY29uc3Q7DQotDQotICAgIFN0YXR1cyBTZXRTdHJva2VDYXAoSU4gTGluZUNhcCBzdHJva2VDYXApDQotICAgIHsNCi0gICAgICAgIC8vIFRoaXMgY2hhbmdlcyBib3RoIHN0YXJ0IGFuZCBhbmQgY2Fwcy4NCi0NCi0gICAgICAgIHJldHVybiBTZXRTdHJva2VDYXBzKHN0cm9rZUNhcCwgc3Ryb2tlQ2FwKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0U3Ryb2tlQ2FwcyhJTiBMaW5lQ2FwIHN0YXJ0Q2FwLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICBJTiBMaW5lQ2FwIGVuZENhcCk7DQotICAgIFN0YXR1cyBHZXRTdHJva2VDYXBzKE9VVCBMaW5lQ2FwKiBzdGFydENhcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgT1VUIExpbmVDYXAqIGVuZENhcCkgY29uc3Q7DQotICAgIFN0YXR1cyBTZXRTdHJva2VKb2luKElOIExpbmVKb2luIGxpbmVKb2luKTsNCi0gICAgTGluZUpvaW4gR2V0U3Ryb2tlSm9pbigpIGNvbnN0Ow0KLSAgICBTdGF0dXMgU2V0QmFzZUNhcChJTiBMaW5lQ2FwIGJhc2VDYXApOw0KLSAgICBMaW5lQ2FwIEdldEJhc2VDYXAoKSBjb25zdDsNCi0gICAgU3RhdHVzIFNldEJhc2VJbnNldChJTiBSRUFMIGluc2V0KTsNCi0gICAgUkVBTCBHZXRCYXNlSW5zZXQoKSBjb25zdDsNCi0gICAgU3RhdHVzIFNldFdpZHRoU2NhbGUoSU4gUkVBTCB3aWR0aFNjYWxlKTsNCi0gICAgUkVBTCBHZXRXaWR0aFNjYWxlKCkgY29uc3Q7DQotDQotcHJvdGVjdGVkOg0KLSAgICBDdXN0b21MaW5lQ2FwKCk7DQotDQotI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMg0KLQ0KLXByaXZhdGU6DQotICAgIEN1c3RvbUxpbmVDYXAoY29uc3QgQ3VzdG9tTGluZUNhcCAmKTsNCi0gICAgQ3VzdG9tTGluZUNhcCYgb3BlcmF0b3I9KGNvbnN0IEN1c3RvbUxpbmVDYXAgJik7DQotcHJvdGVjdGVkOg0KLQ0KLSNlbHNlDQotDQotICAgIEN1c3RvbUxpbmVDYXAoY29uc3QgQ3VzdG9tTGluZUNhcCYgY3VzdG9tTGluZUNhcCkNCi0gICAgew0KLSAgICAgICAgY3VzdG9tTGluZUNhcDsNCi0gICAgICAgIFNldFN0YXR1cyhOb3RJbXBsZW1lbnRlZCk7DQotICAgIH0NCi0NCi0gICAgQ3VzdG9tTGluZUNhcCYgb3BlcmF0b3I9KGNvbnN0IEN1c3RvbUxpbmVDYXAmIGN1c3RvbUxpbmVDYXApDQotICAgIHsNCi0gICAgICAgIGN1c3RvbUxpbmVDYXA7DQotICAgICAgICBTZXRTdGF0dXMoTm90SW1wbGVtZW50ZWQpOw0KLSAgICAgICAgcmV0dXJuICp0aGlzOw0KLSAgICB9DQotDQotI2VuZGlmDQotDQotICAgIEN1c3RvbUxpbmVDYXAoR3BDdXN0b21MaW5lQ2FwKiBuYXRpdmVDYXAsIFN0YXR1cyBzdGF0dXMpDQotICAgIHsNCi0gICAgICAgIGxhc3RSZXN1bHQgPSBzdGF0dXM7DQotICAgICAgICBTZXROYXRpdmVDYXAobmF0aXZlQ2FwKTsNCi0gICAgfQ0KLQ0KLSAgICBWT0lEIFNldE5hdGl2ZUNhcChHcEN1c3RvbUxpbmVDYXAqIG5hdGl2ZUNhcCkNCi0gICAgew0KLSAgICAgICAgdGhpcy0+bmF0aXZlQ2FwID0gbmF0aXZlQ2FwOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTZXRTdGF0dXMoU3RhdHVzIHN0YXR1cykgY29uc3QNCi0gICAgew0KLSAgICAgICAgaWYgKHN0YXR1cyAhPSBPaykNCi0gICAgICAgICAgICByZXR1cm4gKGxhc3RSZXN1bHQgPSBzdGF0dXMpOw0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQotICAgIH0NCi0NCi1wcm90ZWN0ZWQ6DQotICAgIEdwQ3VzdG9tTGluZUNhcCogbmF0aXZlQ2FwOw0KLSAgICBtdXRhYmxlIFN0YXR1cyBsYXN0UmVzdWx0Ow0KLX07DQotDQotY2xhc3MgQ2FjaGVkQml0bWFwIDogcHVibGljIEdkaXBsdXNCYXNlDQotew0KLSAgICBmcmllbmQgR3JhcGhpY3M7DQotDQotcHVibGljOg0KLSAgICBDYWNoZWRCaXRtYXAoSU4gQml0bWFwICpiaXRtYXAsDQotICAgICAgICAgICAgICAgICBJTiBHcmFwaGljcyAqZ3JhcGhpY3MpOw0KLSAgICB2aXJ0dWFsIH5DYWNoZWRCaXRtYXAoKTsNCi0NCi0gICAgU3RhdHVzIEdldExhc3RTdGF0dXMoKSBjb25zdDsNCi0NCi0jaWZkZWYgRENSX1VTRV9ORVdfMjUwOTMyDQotDQotcHJpdmF0ZToNCi0gICAgQ2FjaGVkQml0bWFwKGNvbnN0IENhY2hlZEJpdG1hcCAmKTsNCi0gICAgQ2FjaGVkQml0bWFwJiBvcGVyYXRvcj0oY29uc3QgQ2FjaGVkQml0bWFwICYpOw0KLQ0KLSNlbmRpZg0KLQ0KLXByb3RlY3RlZDoNCi0gICAgR3BDYWNoZWRCaXRtYXAgKm5hdGl2ZUNhY2hlZEJpdG1hcDsNCi0gICAgbXV0YWJsZSBTdGF0dXMgbGFzdFJlc3VsdDsNCi19Ow0KLQ0KLSNlbmRpZiAgLy8gIV9HRElQTFVTSEVBREVSUy5IUFANCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCisqCisqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqIE1vZHVsZSBOYW1lOgorKgorKiAgIEdkaXBsdXNIZWFkZXJzLmgKKyoKKyogQWJzdHJhY3Q6CisqCisqICAgR0RJKyBOYXRpdmUgQysrIHB1YmxpYyBoZWFkZXIgZmlsZQorKgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9HRElQTFVTSEVBREVSU19ICisjZGVmaW5lIF9HRElQTFVTSEVBREVSU19ICisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIHJlZ2lvbnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gIEluY2x1ZGUgdGhlIGNsYXNzIGRlY2xhcmF0aW9ucyBoZXJlIGFuZCBoYXZlIGlubGluZSBjbGFzcyBpbXBsZW1lbnRhdGlvbgorLy8gIGluIHNlcGFyYXRlIGZpbGUgdG8gYXZvaWQgY2lyY3VsYXIgcmVmZXJlbmNlcy4KKworY2xhc3MgUmVnaW9uIDogcHVibGljIEdkaXBsdXNCYXNlCit7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzOworCisgICAgUmVnaW9uKCk7CisgICAgUmVnaW9uKElOIGNvbnN0IFJlY3RGJiByZWN0KTsKKyAgICBSZWdpb24oSU4gY29uc3QgUmVjdCYgcmVjdCk7CisgICAgUmVnaW9uKElOIGNvbnN0IEdyYXBoaWNzUGF0aCogcGF0aCk7CisgICAgUmVnaW9uKElOIGNvbnN0IEJZVEUqIHJlZ2lvbkRhdGEsIElOIElOVCBzaXplKTsKKyAgICBSZWdpb24oSU4gSFJHTiBoUmduKTsKKyAgICBzdGF0aWMgUmVnaW9uKiBGcm9tSFJHTihJTiBIUkdOIGhSZ24pOworCisgICAgflJlZ2lvbigpOworICAgIFJlZ2lvbiogQ2xvbmUoKSBjb25zdDsKKworICAgIFN0YXR1cyBNYWtlSW5maW5pdGUoKTsKKyAgICBTdGF0dXMgTWFrZUVtcHR5KCk7CisKKyAgICAvLyBHZXQgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBuZWVkZWQgZm9yIHRoZSBHZXREYXRhIG1ldGhvZAorICAgIFVJTlQgR2V0RGF0YVNpemUoKSBjb25zdDsKKworICAgIC8vIGJ1ZmZlciAgICAgLSB3aGVyZSB0byBwdXQgdGhlIGRhdGEKKyAgICAvLyBidWZmZXJTaXplIC0gaG93IGJpZyB0aGUgYnVmZmVyIGlzIChzaG91bGQgYmUgYXQgbGVhc3QgYXMgYmlnIGFzIEdldERhdGFTaXplKCkpCisgICAgLy8gc2l6ZUZpbGxlZCAtIGlmIG5vdCBOVUxMLCB0aGlzIGlzIGFuIE9VVCBwYXJhbSB0aGF0IHNheXMgaG93IG1hbnkgYnl0ZXMKKyAgICAvLyAgICAgICAgICAgICAgb2YgZGF0YSB3ZXJlIHdyaXR0ZW4gdG8gdGhlIGJ1ZmZlci4KKyAgICBTdGF0dXMgR2V0RGF0YShPVVQgQllURSogYnVmZmVyLAorICAgICAgICAgICAgICAgICAgIElOIFVJTlQgYnVmZmVyU2l6ZSwKKyAgICAgICAgICAgICAgICAgICBPVVQgVUlOVCogc2l6ZUZpbGxlZCA9IE5VTEwpIGNvbnN0OworCisgICAgU3RhdHVzIEludGVyc2VjdChJTiBjb25zdCBSZWN0JiByZWN0KTsKKyAgICBTdGF0dXMgSW50ZXJzZWN0KElOIGNvbnN0IFJlY3RGJiByZWN0KTsKKyAgICBTdGF0dXMgSW50ZXJzZWN0KElOIGNvbnN0IEdyYXBoaWNzUGF0aCogcGF0aCk7CisgICAgU3RhdHVzIEludGVyc2VjdChJTiBjb25zdCBSZWdpb24qIHJlZ2lvbik7CisgICAgU3RhdHVzIFVuaW9uKElOIGNvbnN0IFJlY3QmIHJlY3QpOworICAgIFN0YXR1cyBVbmlvbihJTiBjb25zdCBSZWN0RiYgcmVjdCk7CisgICAgU3RhdHVzIFVuaW9uKElOIGNvbnN0IEdyYXBoaWNzUGF0aCogcGF0aCk7CisgICAgU3RhdHVzIFVuaW9uKElOIGNvbnN0IFJlZ2lvbiogcmVnaW9uKTsKKyAgICBTdGF0dXMgWG9yKElOIGNvbnN0IFJlY3QmIHJlY3QpOworICAgIFN0YXR1cyBYb3IoSU4gY29uc3QgUmVjdEYmIHJlY3QpOworICAgIFN0YXR1cyBYb3IoSU4gY29uc3QgR3JhcGhpY3NQYXRoKiBwYXRoKTsKKyAgICBTdGF0dXMgWG9yKElOIGNvbnN0IFJlZ2lvbiogcmVnaW9uKTsKKyAgICBTdGF0dXMgRXhjbHVkZShJTiBjb25zdCBSZWN0JiByZWN0KTsKKyAgICBTdGF0dXMgRXhjbHVkZShJTiBjb25zdCBSZWN0RiYgcmVjdCk7CisgICAgU3RhdHVzIEV4Y2x1ZGUoSU4gY29uc3QgR3JhcGhpY3NQYXRoKiBwYXRoKTsKKyAgICBTdGF0dXMgRXhjbHVkZShJTiBjb25zdCBSZWdpb24qIHJlZ2lvbik7CisgICAgU3RhdHVzIENvbXBsZW1lbnQoSU4gY29uc3QgUmVjdCYgcmVjdCk7CisgICAgU3RhdHVzIENvbXBsZW1lbnQoSU4gY29uc3QgUmVjdEYmIHJlY3QpOworICAgIFN0YXR1cyBDb21wbGVtZW50KElOIGNvbnN0IEdyYXBoaWNzUGF0aCogcGF0aCk7CisgICAgU3RhdHVzIENvbXBsZW1lbnQoSU4gY29uc3QgUmVnaW9uKiByZWdpb24pOworICAgIFN0YXR1cyBUcmFuc2xhdGUoSU4gUkVBTCBkeCwKKyAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgZHkpOworICAgIFN0YXR1cyBUcmFuc2xhdGUoSU4gSU5UIGR4LAorICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGR5KTsKKyAgICBTdGF0dXMgVHJhbnNmb3JtKElOIGNvbnN0IE1hdHJpeCogbWF0cml4KTsKKworICAgIFN0YXR1cyBHZXRCb3VuZHMoT1VUIFJlY3QqIHJlY3QsCisgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBHcmFwaGljcyogZykgY29uc3Q7CisKKyAgICBTdGF0dXMgR2V0Qm91bmRzKE9VVCBSZWN0RiogcmVjdCwKKyAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IEdyYXBoaWNzKiBnKSBjb25zdDsKKworICAgIEhSR04gICBHZXRIUkdOICAoSU4gY29uc3QgR3JhcGhpY3MgKiBnKSBjb25zdDsKKworICAgIEJPT0wgSXNFbXB0eShJTiBjb25zdCBHcmFwaGljcyAqZykgY29uc3Q7CisgICAgQk9PTCBJc0luZmluaXRlKElOIGNvbnN0IEdyYXBoaWNzICpnKSBjb25zdDsKKworICAgIEJPT0wgSXNWaXNpYmxlKElOIElOVCB4LAorICAgICAgICAgICAgICAgICAgIElOIElOVCB5LAorICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IEdyYXBoaWNzKiBnID0gTlVMTCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBJc1Zpc2libGUoUG9pbnQoeCwgeSksIGcpOworICAgIH0KKworICAgIEJPT0wgSXNWaXNpYmxlKElOIGNvbnN0IFBvaW50JiBwb2ludCwKKyAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBHcmFwaGljcyogZyA9IE5VTEwpIGNvbnN0OworCisgICAgQk9PTCBJc1Zpc2libGUoSU4gUkVBTCB4LAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeSwKKyAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBHcmFwaGljcyogZyA9IE5VTEwpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSXNWaXNpYmxlKFBvaW50Rih4LCB5KSwgZyk7CisgICAgfQorCisgICAgQk9PTCBJc1Zpc2libGUoSU4gY29uc3QgUG9pbnRGJiBwb2ludCwKKyAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBHcmFwaGljcyogZyA9IE5VTEwpIGNvbnN0OworCisgICAgQk9PTCBJc1Zpc2libGUoSU4gSU5UIHgsCisgICAgICAgICAgICAgICAgICAgSU4gSU5UIHksCisgICAgICAgICAgICAgICAgICAgSU4gSU5UIHdpZHRoLAorICAgICAgICAgICAgICAgICAgIElOIElOVCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSXNWaXNpYmxlKFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCksIGcpOworICAgIH0KKworICAgIEJPT0wgSXNWaXNpYmxlKElOIGNvbnN0IFJlY3QmIHJlY3QsCisgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcgPSBOVUxMKSBjb25zdDsKKworICAgIEJPT0wgSXNWaXNpYmxlKElOIFJFQUwgeCwKKyAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHksCisgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICBJTiBSRUFMIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBHcmFwaGljcyogZyA9IE5VTEwpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSXNWaXNpYmxlKFJlY3RGKHgsIHksIHdpZHRoLCBoZWlnaHQpLCBnKTsKKyAgICB9CisKKyAgICBCT09MIElzVmlzaWJsZShJTiBjb25zdCBSZWN0RiYgcmVjdCwKKyAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBHcmFwaGljcyogZyA9IE5VTEwpIGNvbnN0OworCisgICAgQk9PTCBFcXVhbHMoSU4gY29uc3QgUmVnaW9uKiByZWdpb24sCisgICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcpIGNvbnN0OworCisgICAgVUlOVCBHZXRSZWdpb25TY2Fuc0NvdW50KElOIGNvbnN0IE1hdHJpeCogbWF0cml4KSBjb25zdDsKKyAgICBTdGF0dXMgR2V0UmVnaW9uU2NhbnMoSU4gY29uc3QgTWF0cml4KiBtYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVCBSZWN0RiogcmVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVCBJTlQqIGNvdW50KSBjb25zdDsKKyAgICBTdGF0dXMgR2V0UmVnaW9uU2NhbnMoSU4gY29uc3QgTWF0cml4KiBtYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVCBSZWN0KiAgcmVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVCBJTlQqIGNvdW50KSBjb25zdDsKKyAgICBTdGF0dXMgR2V0TGFzdFN0YXR1cygpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisKKyNpZmRlZiBEQ1JfVVNFX05FV18yNTA5MzIKKworcHJpdmF0ZToKKyAgICBSZWdpb24oY29uc3QgUmVnaW9uICZyZWdpb24pOworICAgIFJlZ2lvbiYgb3BlcmF0b3I9KGNvbnN0IFJlZ2lvbiAmcmVnaW9uKTsKK3Byb3RlY3RlZDoKKworI2Vsc2UKKyAgICBSZWdpb24oY29uc3QgUmVnaW9uICZyZWdpb24pCisgICAgeworICAgICAgICByZWdpb247IC8vIHJlZmVyZW5jZSBwYXJhbWV0ZXIKKyAgICAgICAgU2V0U3RhdHVzKE5vdEltcGxlbWVudGVkKTsKKyAgICB9CisKKyAgICBSZWdpb24mIG9wZXJhdG9yPShjb25zdCBSZWdpb24gJnJlZ2lvbikKKyAgICB7CisgICAgICAgcmVnaW9uOyAgLy8gcmVmZXJlbmNlIHBhcmFtZXRlcgorICAgICAgIFNldFN0YXR1cyhOb3RJbXBsZW1lbnRlZCk7CisgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKyNlbmRpZgorCisgICAgU3RhdHVzIFNldFN0YXR1cyhTdGF0dXMgc3RhdHVzKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBPaykKKyAgICAgICAgICAgIHJldHVybiAobGFzdFJlc3VsdCA9IHN0YXR1cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgUmVnaW9uKEdwUmVnaW9uKiBuYXRpdmVSZWdpb24pOworCisgICAgVk9JRCBTZXROYXRpdmVSZWdpb24oR3BSZWdpb24qIG5hdGl2ZVJlZ2lvbik7CisKK3Byb3RlY3RlZDoKKyAgICBHcFJlZ2lvbiogbmF0aXZlUmVnaW9uOworICAgIG11dGFibGUgU3RhdHVzIGxhc3RSZXN1bHQ7Cit9OworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIEZvbnRGYW1pbHkKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgRm9udEZhbWlseSA6IHB1YmxpYyBHZGlwbHVzQmFzZQoreworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBGb250OworICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljczsKKyAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NQYXRoOworICAgIGZyaWVuZCBjbGFzcyBGb250Q29sbGVjdGlvbjsKKworICAgIEZvbnRGYW1pbHkoKTsKKworICAgIEZvbnRGYW1pbHkoCisgICAgICAgIElOIGNvbnN0IFdDSEFSICAgICAgICAgICpuYW1lLAorICAgICAgICBJTiBjb25zdCBGb250Q29sbGVjdGlvbiAqZm9udENvbGxlY3Rpb24gPSBOVUxMCisgICAgKTsKKworICAgIH5Gb250RmFtaWx5KCk7CisKKyAgICBzdGF0aWMgY29uc3QgRm9udEZhbWlseSAqR2VuZXJpY1NhbnNTZXJpZigpOworICAgIHN0YXRpYyBjb25zdCBGb250RmFtaWx5ICpHZW5lcmljU2VyaWYoKTsKKyAgICBzdGF0aWMgY29uc3QgRm9udEZhbWlseSAqR2VuZXJpY01vbm9zcGFjZSgpOworCisgICAgU3RhdHVzIEdldEZhbWlseU5hbWUoCisgICAgICAgIE9VVCBXQ0hBUiAgICAgICAgbmFtZVtMRl9GQUNFU0laRV0sCisgICAgICAgIElOIExBTkdJRCAgICAgICAgbGFuZ3VhZ2UgPSAwCisgICAgKSBjb25zdDsKKworLy8gIENvcHkgb3BlcmF0b3IKKyAgICBGb250RmFtaWx5ICogQ2xvbmUoKSBjb25zdDsKKworICAgIEJPT0wgICAgSXNBdmFpbGFibGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChuYXRpdmVGYW1pbHkgIT0gTlVMTCk7CisgICAgfTsKKworICAgIEJPT0wgICAgSXNTdHlsZUF2YWlsYWJsZShJTiBJTlQgc3R5bGUpIGNvbnN0OworCisgICAgVUlOVDE2ICBHZXRFbUhlaWdodCAgICAgKElOIElOVCBzdHlsZSkgY29uc3Q7CisgICAgVUlOVDE2ICBHZXRDZWxsQXNjZW50ICAgKElOIElOVCBzdHlsZSkgY29uc3Q7CisgICAgVUlOVDE2ICBHZXRDZWxsRGVzY2VudCAgKElOIElOVCBzdHlsZSkgY29uc3Q7CisgICAgVUlOVDE2ICBHZXRMaW5lU3BhY2luZyAgKElOIElOVCBzdHlsZSkgY29uc3Q7CisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgU3RhdHVzIEdldExhc3RTdGF0dXMoKSBjb25zdDsKKworI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMgorCitwcml2YXRlOgorICAgIEZvbnRGYW1pbHkoY29uc3QgRm9udEZhbWlseSAmKTsKKyAgICBGb250RmFtaWx5JiBvcGVyYXRvcj0oY29uc3QgRm9udEZhbWlseSAmKTsKKworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBTdGF0dXMgU2V0U3RhdHVzKFN0YXR1cyBzdGF0dXMpIGNvbnN0OworCisgICAgLy8gcHJpdmF0ZSBjb25zdHJ1Y3RvciBmb3IgY29weQorICAgIEZvbnRGYW1pbHkoR3BGb250RmFtaWx5ICogbmF0aXZlRmFtaWx5LCBTdGF0dXMgc3RhdHVzKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgRGF0YSBtZW1iZXJzCitwcm90ZWN0ZWQ6CisKKyAgICBHcEZvbnRGYW1pbHkgICAgKm5hdGl2ZUZhbWlseTsKKyAgICBtdXRhYmxlIFN0YXR1cyAgIGxhc3RSZXN1bHQ7Cit9OworCitzdGF0aWMgRm9udEZhbWlseSAqR2VuZXJpY1NhbnNTZXJpZkZvbnRGYW1pbHkgPSBOVUxMOworc3RhdGljIEZvbnRGYW1pbHkgKkdlbmVyaWNTZXJpZkZvbnRGYW1pbHkgICAgID0gTlVMTDsKK3N0YXRpYyBGb250RmFtaWx5ICpHZW5lcmljTW9ub3NwYWNlRm9udEZhbWlseSA9IE5VTEw7CisKK3N0YXRpYyBCWVRFIEdlbmVyaWNTYW5zU2VyaWZGb250RmFtaWx5QnVmZmVyW3NpemVvZihGb250RmFtaWx5KV0gPSB7MH07CitzdGF0aWMgQllURSBHZW5lcmljU2VyaWZGb250RmFtaWx5QnVmZmVyICAgIFtzaXplb2YoRm9udEZhbWlseSldID0gezB9Oworc3RhdGljIEJZVEUgR2VuZXJpY01vbm9zcGFjZUZvbnRGYW1pbHlCdWZmZXJbc2l6ZW9mKEZvbnRGYW1pbHkpXSA9IHswfTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBmb250cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBGb250IDogcHVibGljIEdkaXBsdXNCYXNlCit7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzOworCisgICAgRm9udChJTiBIREMgaGRjKTsKKyAgICBGb250KElOIEhEQyBoZGMsCisgICAgICAgICBJTiBjb25zdCBMT0dGT05UQSogbG9nZm9udCk7CisgICAgRm9udChJTiBIREMgaGRjLAorICAgICAgICAgSU4gY29uc3QgTE9HRk9OVFcqIGxvZ2ZvbnQpOworI2lmZGVmIERDUl9VU0VfTkVXXzEyNzA4NAorICAgIEZvbnQoSU4gSERDIGhkYywKKyAgICAgICAgIElOIGNvbnN0IEhGT05UIGhmb250KTsKKyNlbmRpZgorICAgIEZvbnQoCisgICAgICAgIElOIGNvbnN0IEZvbnRGYW1pbHkgKiBmYW1pbHksCisgICAgICAgIElOIFJFQUwgICAgICAgICBlbVNpemUsCisgICAgICAgIElOIElOVCAgICAgICAgICBzdHlsZSAgID0gRm9udFN0eWxlUmVndWxhciwKKyAgICAgICAgSU4gVW5pdCAgICAgICAgIHVuaXQgICAgPSBVbml0UG9pbnQKKyAgICApOworCisgICAgRm9udCgKKyAgICAgICAgSU4gY29uc3QgV0NIQVIgKiAgICAgICAgICAgZmFtaWx5TmFtZSwKKyAgICAgICAgSU4gUkVBTCAgICAgICAgICAgICAgICAgICAgZW1TaXplLAorICAgICAgICBJTiBJTlQgICAgICAgICAgICAgICAgICAgICBzdHlsZSAgID0gRm9udFN0eWxlUmVndWxhciwKKyAgICAgICAgSU4gVW5pdCAgICAgICAgICAgICAgICAgICAgdW5pdCAgICA9IFVuaXRQb2ludCwKKyAgICAgICAgSU4gY29uc3QgRm9udENvbGxlY3Rpb24gKiAgZm9udENvbGxlY3Rpb24gPSBOVUxMCisgICAgKTsKKworICAgIFN0YXR1cyBHZXRMb2dGb250QShJTiBjb25zdCBHcmFwaGljcyogZywKKyAgICAgICAgICAgICAgICAgICAgICAgT1VUICBMT0dGT05UQSAqIGxvZ2ZvbnRBKSBjb25zdDsKKyAgICBTdGF0dXMgR2V0TG9nRm9udFcoSU4gY29uc3QgR3JhcGhpY3MqIGcsCisgICAgICAgICAgICAgICAgICAgICAgIE9VVCBMT0dGT05UVyAqIGxvZ2ZvbnRXKSBjb25zdDsKKworICAgIEZvbnQqIENsb25lKCkgY29uc3Q7CisgICAgfkZvbnQoKTsKKyAgICBCT09MICAgICAgICBJc0F2YWlsYWJsZSgpICAgY29uc3Q7CisgICAgSU5UICAgICAgICAgR2V0U3R5bGUoKSAgICAgIGNvbnN0OworICAgIFJFQUwgICAgICAgIEdldFNpemUoKSAgICAgICBjb25zdDsKKyAgICBVbml0ICAgICAgICBHZXRVbml0KCkgICAgICAgY29uc3Q7CisgICAgU3RhdHVzICAgICAgR2V0TGFzdFN0YXR1cygpIGNvbnN0OworICAgIFJFQUwgICAgICAgIEdldEhlaWdodChJTiBjb25zdCBHcmFwaGljcyAqZ3JhcGhpY3MgPSBOVUxMKSBjb25zdDsKKyNpZmRlZiBEQ1JfVVNFX05FV18xMjU0NjcKKyAgICBSRUFMICAgICAgICBHZXRIZWlnaHQoSU4gUkVBTCBkcGkpIGNvbnN0OworI2VuZGlmCisKKyAgICBTdGF0dXMgR2V0RmFtaWx5KE9VVCBGb250RmFtaWx5ICpmYW1pbHkpIGNvbnN0OworCisjaWZkZWYgRENSX1VTRV9ORVdfMjUwOTMyCisKK3ByaXZhdGU6CisgICAgRm9udChjb25zdCBGb250ICYpOworICAgIEZvbnQmIG9wZXJhdG9yPShjb25zdCBGb250ICYpOworCisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIEZvbnQoR3BGb250KiBmb250LCBTdGF0dXMgc3RhdHVzKTsKKyAgICBWT0lEIFNldE5hdGl2ZUZvbnQoR3BGb250ICpGb250KTsKKyAgICBTdGF0dXMgU2V0U3RhdHVzKFN0YXR1cyBzdGF0dXMpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgLyoKKyAgICAgKiBoYW5kbGUgdG8gbmF0aXZlIGxpbmUgdGV4dHVyZSBvYmplY3QKKyAgICAgKi8KKworICAgIEdwRm9udCogbmF0aXZlRm9udDsKKyAgICBtdXRhYmxlIFN0YXR1cyBsYXN0UmVzdWx0OworfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQWJzdHJhY3QgYmFzZSBjbGFzc2VzIGZvciBmb250IGNvbGxlY3Rpb25zCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIEZvbnRDb2xsZWN0aW9uIDogcHVibGljIEdkaXBsdXNCYXNlCit7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIEZvbnRGYW1pbHk7CisKKyAgICBGb250Q29sbGVjdGlvbigpOworICAgIHZpcnR1YWwgfkZvbnRDb2xsZWN0aW9uKCk7CisKKyAgICBJTlQgR2V0RmFtaWx5Q291bnQoKSBjb25zdDsgICAgIC8vIG51bWJlciBvZiBlbnVtZXJhYmxlIGZhbWlsaWVzIGluIHRoZSBjb2xsZWN0aW9uCisKKyAgICBTdGF0dXMgR2V0RmFtaWxpZXMoICAgICAgICAgICAgIC8vIGVudW1lcmF0ZSB0aGUgZm9udHMgaW4gYSBjb2xsZWN0aW9uCisgICAgICAgIElOIElOVCAgICAgICAgICAgbnVtU291Z2h0LAorICAgICAgICBPVVQgRm9udEZhbWlseSAqIGdwZmFtaWxpZXMsCisgICAgICAgIE9VVCBJTlQgICAgICAgICogbnVtRm91bmQKKyAgICApIGNvbnN0OworCisgICAgU3RhdHVzIEdldExhc3RTdGF0dXMoKSBjb25zdDsKKworI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMgorCitwcml2YXRlOgorICAgIEZvbnRDb2xsZWN0aW9uKGNvbnN0IEZvbnRDb2xsZWN0aW9uICYpOworICAgIEZvbnRDb2xsZWN0aW9uJiBvcGVyYXRvcj0oY29uc3QgRm9udENvbGxlY3Rpb24gJik7CisKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgU3RhdHVzIFNldFN0YXR1cyhTdGF0dXMgc3RhdHVzKSBjb25zdCA7CisKKyAgICBHcEZvbnRDb2xsZWN0aW9uICpuYXRpdmVGb250Q29sbGVjdGlvbjsKKyAgICBtdXRhYmxlIFN0YXR1cyAgICBsYXN0UmVzdWx0OworfTsKKworCitjbGFzcyBJbnN0YWxsZWRGb250Q29sbGVjdGlvbiA6IHB1YmxpYyBGb250Q29sbGVjdGlvbgoreworcHVibGljOgorICAgIEluc3RhbGxlZEZvbnRDb2xsZWN0aW9uKCk7CisgICAgfkluc3RhbGxlZEZvbnRDb2xsZWN0aW9uKCk7CisKKyNpZmRlZiBEQ1JfVVNFX05FV18yNTA5MzIKKworcHJpdmF0ZToKKyAgICBJbnN0YWxsZWRGb250Q29sbGVjdGlvbihjb25zdCBJbnN0YWxsZWRGb250Q29sbGVjdGlvbiAmKTsKKyAgICBJbnN0YWxsZWRGb250Q29sbGVjdGlvbiYgb3BlcmF0b3I9KGNvbnN0IEluc3RhbGxlZEZvbnRDb2xsZWN0aW9uICYpOworCisjZW5kaWYKKworcHJvdGVjdGVkOgorI2lmbmRlZiBEQ1JfVVNFX05FV18yMzUwNzIKKyAgICBTdGF0dXMgSW5zdGFsbEZvbnRGaWxlKElOIGNvbnN0IFdDSEFSKiBmaWxlbmFtZSk7CisgICAgU3RhdHVzIFVuaW5zdGFsbEZvbnRGaWxlKElOIGNvbnN0IFdDSEFSKiBmaWxlbmFtZSk7CisjZW5kaWYKKyAgICBTdGF0dXMgU2V0U3RhdHVzKFN0YXR1cyBzdGF0dXMpIGNvbnN0IDsKK307CisKKworY2xhc3MgUHJpdmF0ZUZvbnRDb2xsZWN0aW9uIDogcHVibGljIEZvbnRDb2xsZWN0aW9uCit7CitwdWJsaWM6CisgICAgUHJpdmF0ZUZvbnRDb2xsZWN0aW9uKCk7CisgICAgflByaXZhdGVGb250Q29sbGVjdGlvbigpOworCisgICAgU3RhdHVzIEFkZEZvbnRGaWxlKElOIGNvbnN0IFdDSEFSKiBmaWxlbmFtZSk7CisgICAgU3RhdHVzIEFkZE1lbW9yeUZvbnQoSU4gY29uc3QgVk9JRCogbWVtb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBsZW5ndGgpOworCisjaWZkZWYgRENSX1VTRV9ORVdfMjUwOTMyCisKK3ByaXZhdGU6CisgICAgUHJpdmF0ZUZvbnRDb2xsZWN0aW9uKGNvbnN0IFByaXZhdGVGb250Q29sbGVjdGlvbiAmKTsKKyAgICBQcml2YXRlRm9udENvbGxlY3Rpb24mIG9wZXJhdG9yPShjb25zdCBQcml2YXRlRm9udENvbGxlY3Rpb24gJik7CisKKyNlbmRpZgorfTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBiaXRtYXAgaW1hZ2UgYW5kIG1ldGFmaWxlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vICEhISBOb3RlOgorLy8gIEluY2x1ZGUgdGhlIGNsYXNzIGRlY2xhcmF0aW9ucyBoZXJlIGFuZCBoYXZlIHRoZSBpbmxpbmUgY2xhc3MKKy8vICBpbXBsZW1lbnRhdGlvbiBpbiBhIHNlcGFyYXRlIGZpbGUuICBUaGlzIGlzIGRvbmUgdG8gcmVzb2x2ZSBhCisvLyAgY2lyY3VsYXIgZGVwZW5kZW5jeSBzaW5jZSBvbmUgb2YgdGhlIEJpdG1hcCBtZXRob2RzIG5lZWRzIHRvCisvLyAgYWNjZXNzIHRoZSBwcml2YXRlIG1lbWJlciBuYXRpdmVHcmFwaGljcyBvZiB0aGUgR3JhcGhpY3Mgb2JqZWN0LgorCitjbGFzcyBJbWFnZSA6IHB1YmxpYyBHZGlwbHVzQmFzZQoreworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBCcnVzaDsKKyAgICBmcmllbmQgY2xhc3MgVGV4dHVyZUJydXNoOworICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljczsKKworI2lmbmRlZiBEQ1JfVVNFX05FV18xNDA3ODIKKyAgICBJbWFnZSgKKyAgICAgICAgSU4gY29uc3QgV0NIQVIqIGZpbGVuYW1lCisgICAgKTsKKworICAgIEltYWdlKAorICAgICAgICBJTiBJU3RyZWFtKiBzdHJlYW0KKyAgICApOworCisgICAgc3RhdGljIEltYWdlKiBGcm9tRmlsZSgKKyAgICAgICAgSU4gY29uc3QgV0NIQVIqIGZpbGVuYW1lCisgICAgKTsKKworICAgIHN0YXRpYyBJbWFnZSogRnJvbVN0cmVhbSgKKyAgICAgICAgSU4gSVN0cmVhbSogc3RyZWFtCisgICAgKTsKKyNlbHNlCisgICAgSW1hZ2UoCisgICAgICAgIElOIGNvbnN0IFdDSEFSKiBmaWxlbmFtZSwKKyAgICAgICAgSU4gQk9PTCB1c2VFbWJlZGRlZENvbG9yTWFuYWdlbWVudCA9IEZBTFNFCisgICAgKTsKKworICAgIEltYWdlKAorICAgICAgICBJTiBJU3RyZWFtKiBzdHJlYW0sCisgICAgICAgIElOIEJPT0wgdXNlRW1iZWRkZWRDb2xvck1hbmFnZW1lbnQgPSBGQUxTRQorICAgICk7CisKKyAgICBzdGF0aWMgSW1hZ2UqIEZyb21GaWxlKAorICAgICAgICBJTiBjb25zdCBXQ0hBUiogZmlsZW5hbWUsCisgICAgICAgIElOIEJPT0wgdXNlRW1iZWRkZWRDb2xvck1hbmFnZW1lbnQgPSBGQUxTRQorICAgICk7CisKKyAgICBzdGF0aWMgSW1hZ2UqIEZyb21TdHJlYW0oCisgICAgICAgIElOIElTdHJlYW0qIHN0cmVhbSwKKyAgICAgICAgSU4gQk9PTCB1c2VFbWJlZGRlZENvbG9yTWFuYWdlbWVudCA9IEZBTFNFCisgICAgKTsKKyNlbmRpZgorCisgICAgdmlydHVhbCB+SW1hZ2UoKTsKKyAgICB2aXJ0dWFsIEltYWdlKiBDbG9uZSgpOworCisgICAgU3RhdHVzIFNhdmUoSU4gY29uc3QgV0NIQVIqIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgIElOIGNvbnN0IENMU0lEKiBjbHNpZEVuY29kZXIsCisgICAgICAgICAgICAgICAgSU4gY29uc3QgRW5jb2RlclBhcmFtZXRlcnMgKmVuY29kZXJQYXJhbXMgPSBOVUxMKTsKKyAgICBTdGF0dXMgU2F2ZShJTiBJU3RyZWFtKiBzdHJlYW0sCisgICAgICAgICAgICAgICAgSU4gY29uc3QgQ0xTSUQqIGNsc2lkRW5jb2RlciwKKyAgICAgICAgICAgICAgICBJTiBjb25zdCBFbmNvZGVyUGFyYW1ldGVycyAqZW5jb2RlclBhcmFtcyA9IE5VTEwpOworICAgIFN0YXR1cyBTYXZlQWRkKElOIGNvbnN0IEVuY29kZXJQYXJhbWV0ZXJzKiBlbmNvZGVyUGFyYW1zKTsKKyAgICBTdGF0dXMgU2F2ZUFkZChJTiBJbWFnZSogbmV3SW1hZ2UsCisgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgRW5jb2RlclBhcmFtZXRlcnMqIGVuY29kZXJQYXJhbXMpOworCisgICAgSW1hZ2VUeXBlIEdldFR5cGUoKSBjb25zdDsKKyAgICBTdGF0dXMgR2V0UGh5c2ljYWxEaW1lbnNpb24oT1VUIFNpemVGKiBzaXplKTsKKyAgICBTdGF0dXMgR2V0Qm91bmRzKE9VVCBSZWN0Riogc3JjUmVjdCwKKyAgICAgICAgICAgICAgICAgICAgIE9VVCBVbml0KiBzcmNVbml0KTsKKworICAgIFVJTlQgR2V0V2lkdGgoKTsKKyAgICBVSU5UIEdldEhlaWdodCgpOworICAgIFJFQUwgR2V0SG9yaXpvbnRhbFJlc29sdXRpb24oKTsKKyAgICBSRUFMIEdldFZlcnRpY2FsUmVzb2x1dGlvbigpOworICAgIFVJTlQgR2V0RmxhZ3MoKTsKKyAgICBTdGF0dXMgR2V0UmF3Rm9ybWF0KE9VVCBHVUlEICpmb3JtYXQpOworICAgIFBpeGVsRm9ybWF0IEdldFBpeGVsRm9ybWF0KCk7CisKKyAgICBJTlQgR2V0UGFsZXR0ZVNpemUoKTsKKyAgICBTdGF0dXMgR2V0UGFsZXR0ZShPVVQgQ29sb3JQYWxldHRlKiBwYWxldHRlLAorICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBzaXplKTsKKyAgICBTdGF0dXMgU2V0UGFsZXR0ZShJTiBjb25zdCBDb2xvclBhbGV0dGUqIHBhbGV0dGUpOworCisgICAgSW1hZ2UqIEdldFRodW1ibmFpbEltYWdlKElOIFVJTlQgdGh1bWJXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gVUlOVCB0aHVtYkhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gR2V0VGh1bWJuYWlsSW1hZ2VBYm9ydCBjYWxsYmFjayA9IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIFZPSUQqIGNhbGxiYWNrRGF0YSA9IE5VTEwpOworICAgIFVJTlQgR2V0RnJhbWVEaW1lbnNpb25zQ291bnQoKTsKKyAgICBTdGF0dXMgR2V0RnJhbWVEaW1lbnNpb25zTGlzdChPVVQgR1VJRCogZGltZW5zaW9uSURzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIFVJTlQgY291bnQpOworICAgIFVJTlQgR2V0RnJhbWVDb3VudChJTiBjb25zdCBHVUlEKiBkaW1lbnNpb25JRCk7CisgICAgU3RhdHVzIFNlbGVjdEFjdGl2ZUZyYW1lKElOIGNvbnN0IEdVSUQqIGRpbWVuc2lvbklELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBVSU5UIGZyYW1lSW5kZXgpOworICAgIFN0YXR1cyBSb3RhdGVGbGlwKElOIFJvdGF0ZUZsaXBUeXBlIHJvdGF0ZUZsaXBUeXBlKTsKKyAgICBVSU5UIEdldFByb3BlcnR5Q291bnQoKTsKKyAgICBTdGF0dXMgR2V0UHJvcGVydHlJZExpc3QoSU4gVUlOVCBudW1PZlByb3BlcnR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVQgUFJPUElEKiBsaXN0KTsKKyAgICBVSU5UIEdldFByb3BlcnR5SXRlbVNpemUoSU4gUFJPUElEIHByb3BJZCk7CisgICAgU3RhdHVzIEdldFByb3BlcnR5SXRlbShJTiBQUk9QSUQgcHJvcElkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gVUlOVCBwcm9wU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9VVCBQcm9wZXJ0eUl0ZW0qIGJ1ZmZlcik7CisgICAgU3RhdHVzIEdldFByb3BlcnR5U2l6ZShPVVQgVUlOVCogdG90YWxCdWZmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUIFVJTlQqIG51bVByb3BlcnRpZXMpOworICAgIFN0YXR1cyBHZXRBbGxQcm9wZXJ0eUl0ZW1zKElOIFVJTlQgdG90YWxCdWZmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIFVJTlQgbnVtUHJvcGVydGllcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVQgUHJvcGVydHlJdGVtKiBhbGxJdGVtcyk7CisgICAgU3RhdHVzIFJlbW92ZVByb3BlcnR5SXRlbShJTiBQUk9QSUQgcHJvcElkKTsKKyAgICBTdGF0dXMgU2V0UHJvcGVydHlJdGVtKElOIGNvbnN0IFByb3BlcnR5SXRlbSogaXRlbSk7CisKKyAgICBVSU5UICBHZXRFbmNvZGVyUGFyYW1ldGVyTGlzdFNpemUoSU4gY29uc3QgQ0xTSUQqIGNsc2lkRW5jb2Rlcik7CisgICAgU3RhdHVzIEdldEVuY29kZXJQYXJhbWV0ZXJMaXN0KElOIGNvbnN0IENMU0lEKiBjbHNpZEVuY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIFVJTlQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUIEVuY29kZXJQYXJhbWV0ZXJzKiBidWZmZXIpOworCisgICAgLy8gU3VwcG9ydCBmb3IgTWlkZGxlIEVhc3QgbG9jYWxpemF0aW9uIChyaWdodC10by1sZWZ0IG1pcnJvcmluZykKKyAgICBJbWFnZUxheW91dCBHZXRMYXlvdXQoKSBjb25zdDsKKyAgICBTdGF0dXMgU2V0TGF5b3V0KElOIGNvbnN0IEltYWdlTGF5b3V0IGxheW91dCk7CisKKyAgICBTdGF0dXMgR2V0TGFzdFN0YXR1cygpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisKKyAgICBJbWFnZSgpIHt9CisKKyAgICBJbWFnZShHcEltYWdlICpuYXRpdmVJbWFnZSwgU3RhdHVzIHN0YXR1cyk7CisKKyAgICBWT0lEIFNldE5hdGl2ZUltYWdlKEdwSW1hZ2UqIG5hdGl2ZUltYWdlKTsKKworICAgIFN0YXR1cyBTZXRTdGF0dXMoU3RhdHVzIHN0YXR1cykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChzdGF0dXMgIT0gT2spCisgICAgICAgICAgICByZXR1cm4gKGxhc3RSZXN1bHQgPSBzdGF0dXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIEdwSW1hZ2UqIG5hdGl2ZUltYWdlOworICAgIG11dGFibGUgU3RhdHVzIGxhc3RSZXN1bHQ7CisgICAgbXV0YWJsZSBTdGF0dXMgbG9hZFN0YXR1czsKKworI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMgorCitwcml2YXRlOgorCisjZWxzZQorCitwcm90ZWN0ZWQ6CisKKyNlbmRpZgorCisgICAgLy8gRGlzYWJsZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBhc3NpZ25tZW50IG9wZXJhdG9yCisKKyAgICBJbWFnZShJTiBjb25zdCBJbWFnZSYgQyk7CisgICAgSW1hZ2UmIG9wZXJhdG9yPShJTiBjb25zdCBJbWFnZSYgQyk7Cit9OworCitjbGFzcyBCaXRtYXAgOiBwdWJsaWMgSW1hZ2UKK3sKK3B1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgSW1hZ2U7CisgICAgZnJpZW5kIGNsYXNzIENhY2hlZEJpdG1hcDsKKworICAgIEJpdG1hcCgKKyAgICAgICAgSU4gY29uc3QgV0NIQVIgKmZpbGVuYW1lLAorICAgICAgICBJTiBCT09MIHVzZUVtYmVkZGVkQ29sb3JNYW5hZ2VtZW50ID0gRkFMU0UKKyAgICApOworCisgICAgQml0bWFwKAorICAgICAgICBJTiBJU3RyZWFtICpzdHJlYW0sCisgICAgICAgIElOIEJPT0wgdXNlRW1iZWRkZWRDb2xvck1hbmFnZW1lbnQgPSBGQUxTRQorICAgICk7CisKKyAgICBzdGF0aWMgQml0bWFwKiBGcm9tRmlsZSgKKyAgICAgICAgSU4gY29uc3QgV0NIQVIgKmZpbGVuYW1lLAorICAgICAgICBJTiBCT09MIHVzZUVtYmVkZGVkQ29sb3JNYW5hZ2VtZW50ID0gRkFMU0UKKyAgICApOworCisgICAgc3RhdGljIEJpdG1hcCogRnJvbVN0cmVhbSgKKyAgICAgICAgSU4gSVN0cmVhbSAqc3RyZWFtLAorICAgICAgICBJTiBCT09MIHVzZUVtYmVkZGVkQ29sb3JNYW5hZ2VtZW50ID0gRkFMU0UKKyAgICApOworCisgICAgQml0bWFwKElOIElOVCB3aWR0aCwKKyAgICAgICAgICAgSU4gSU5UIGhlaWdodCwKKyAgICAgICAgICAgSU4gSU5UIHN0cmlkZSwgUGl4ZWxGb3JtYXQgZm9ybWF0LAorICAgICAgICAgICBJTiBCWVRFKiBzY2FuMCk7CisgICAgQml0bWFwKElOIElOVCB3aWR0aCwKKyAgICAgICAgICAgSU4gSU5UIGhlaWdodCwKKyAgICAgICAgICAgSU4gUGl4ZWxGb3JtYXQgZm9ybWF0ID0gUGl4ZWxGb3JtYXQzMmJwcEFSR0IpOworICAgIEJpdG1hcChJTiBJTlQgd2lkdGgsCisgICAgICAgICAgIElOIElOVCBoZWlnaHQsCisgICAgICAgICAgIElOICBHcmFwaGljcyogdGFyZ2V0KTsKKworICAgIEJpdG1hcCogQ2xvbmUoSU4gY29uc3QgUmVjdCYgcmVjdCwKKyAgICAgICAgICAgICAgICAgIElOIFBpeGVsRm9ybWF0IGZvcm1hdCk7CisgICAgQml0bWFwKiBDbG9uZShJTiBJTlQgeCwKKyAgICAgICAgICAgICAgICAgIElOIElOVCB5LAorICAgICAgICAgICAgICAgICAgSU4gSU5UIHdpZHRoLAorICAgICAgICAgICAgICAgICAgSU4gSU5UIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgIElOIFBpeGVsRm9ybWF0IGZvcm1hdCk7CisgICAgQml0bWFwKiBDbG9uZShJTiBjb25zdCBSZWN0RiYgcmVjdCwKKyAgICAgICAgICAgICAgICAgIElOIFBpeGVsRm9ybWF0IGZvcm1hdCk7CisgICAgQml0bWFwKiBDbG9uZShJTiBSRUFMIHgsCisgICAgICAgICAgICAgICAgICBJTiBSRUFMIHksCisgICAgICAgICAgICAgICAgICBJTiBSRUFMIHdpZHRoLAorICAgICAgICAgICAgICAgICAgSU4gUkVBTCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICBJTiBQaXhlbEZvcm1hdCBmb3JtYXQpOworCisgICAgU3RhdHVzIExvY2tCaXRzKElOIGNvbnN0IFJlY3QmIHJlY3QsCisgICAgICAgICAgICAgICAgICAgIElOIFVJTlQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgIElOIFBpeGVsRm9ybWF0IGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgT1VUIEJpdG1hcERhdGEqIGxvY2tlZEJpdG1hcERhdGEpOworICAgIFN0YXR1cyBVbmxvY2tCaXRzKElOIEJpdG1hcERhdGEqIGxvY2tlZEJpdG1hcERhdGEpOworICAgIFN0YXR1cyBHZXRQaXhlbChJTiBJTlQgeCwKKyAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHksCisgICAgICAgICAgICAgICAgICAgIE9VVCBDb2xvciAqY29sb3IpOworICAgIFN0YXR1cyBTZXRQaXhlbChJTiBJTlQgeCwKKyAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHksCisgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IENvbG9yICZjb2xvcik7CisgICAgU3RhdHVzIFNldFJlc29sdXRpb24oSU4gUkVBTCB4ZHBpLAorICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeWRwaSk7CisKKyAgICAvLyBHREkgaW50ZXJvcDoKKworICAgIEJpdG1hcChJTiBJRGlyZWN0RHJhd1N1cmZhY2U3KiBzdXJmYWNlKTsKKyAgICBCaXRtYXAoSU4gY29uc3QgQklUTUFQSU5GTyogZ2RpQml0bWFwSW5mbywKKyAgICAgICAgICAgSU4gVk9JRCogZ2RpQml0bWFwRGF0YSk7CisgICAgQml0bWFwKElOIEhCSVRNQVAgaGJtLAorICAgICAgICAgICBJTiBIUEFMRVRURSBocGFsKTsKKyAgICBCaXRtYXAoSU4gSElDT04gaGljb24pOworICAgIEJpdG1hcChJTiBISU5TVEFOQ0UgaEluc3RhbmNlLAorICAgICAgICAgICBJTiBjb25zdCBXQ0hBUiAqIGJpdG1hcE5hbWUpOworICAgIHN0YXRpYyBCaXRtYXAqIEZyb21EaXJlY3REcmF3U3VyZmFjZTcoSU4gSURpcmVjdERyYXdTdXJmYWNlNyogc3VyZmFjZSk7CisgICAgc3RhdGljIEJpdG1hcCogRnJvbUJJVE1BUElORk8oSU4gY29uc3QgQklUTUFQSU5GTyogZ2RpQml0bWFwSW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBWT0lEKiBnZGlCaXRtYXBEYXRhKTsKKyAgICBzdGF0aWMgQml0bWFwKiBGcm9tSEJJVE1BUChJTiBIQklUTUFQIGhibSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBIUEFMRVRURSBocGFsKTsKKyAgICBzdGF0aWMgQml0bWFwKiBGcm9tSElDT04oSU4gSElDT04gaGljb24pOworICAgIHN0YXRpYyBCaXRtYXAqIEZyb21SZXNvdXJjZShJTiBISU5TVEFOQ0UgaEluc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBXQ0hBUiAqIGJpdG1hcE5hbWUpOworCisgICAgU3RhdHVzIEdldEhCSVRNQVAoSU4gY29uc3QgQ29sb3ImIGNvbG9yQmFja2dyb3VuZCwKKyAgICAgICAgICAgICAgICAgICAgICBPVVQgSEJJVE1BUCAqaGJtUmV0dXJuKTsKKyAgICBTdGF0dXMgR2V0SElDT04oSElDT04gKmhpY29uKTsKKworI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMgorcHJpdmF0ZToKKyAgICBCaXRtYXAoY29uc3QgQml0bWFwICYpOworICAgIEJpdG1hcCYgb3BlcmF0b3I9KGNvbnN0IEJpdG1hcCAmKTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgQml0bWFwKEdwQml0bWFwICpuYXRpdmVCaXRtYXApOworfTsKKworY2xhc3MgQ3VzdG9tTGluZUNhcCA6IHB1YmxpYyBHZGlwbHVzQmFzZQoreworcHVibGljOgorICAgIGZyaWVuZCBjbGFzcyBQZW47CisKKyAgICBDdXN0b21MaW5lQ2FwKAorICAgICAgICBJTiBjb25zdCBHcmFwaGljc1BhdGgqIGZpbGxQYXRoLAorICAgICAgICBJTiBjb25zdCBHcmFwaGljc1BhdGgqIHN0cm9rZVBhdGgsCisgICAgICAgIElOIExpbmVDYXAgYmFzZUNhcCA9IExpbmVDYXBGbGF0LAorICAgICAgICBJTiBSRUFMIGJhc2VJbnNldCA9IDAKKyAgICAgICAgKTsKKyAgICB2aXJ0dWFsIH5DdXN0b21MaW5lQ2FwKCk7CisKKyAgICBDdXN0b21MaW5lQ2FwKiBDbG9uZSgpIGNvbnN0OworCisgICAgU3RhdHVzIFNldFN0cm9rZUNhcChJTiBMaW5lQ2FwIHN0cm9rZUNhcCkKKyAgICB7CisgICAgICAgIC8vIFRoaXMgY2hhbmdlcyBib3RoIHN0YXJ0IGFuZCBhbmQgY2Fwcy4KKworICAgICAgICByZXR1cm4gU2V0U3Ryb2tlQ2FwcyhzdHJva2VDYXAsIHN0cm9rZUNhcCk7CisgICAgfQorCisgICAgU3RhdHVzIFNldFN0cm9rZUNhcHMoSU4gTGluZUNhcCBzdGFydENhcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBJTiBMaW5lQ2FwIGVuZENhcCk7CisgICAgU3RhdHVzIEdldFN0cm9rZUNhcHMoT1VUIExpbmVDYXAqIHN0YXJ0Q2FwLAorICAgICAgICAgICAgICAgICAgICAgICAgIE9VVCBMaW5lQ2FwKiBlbmRDYXApIGNvbnN0OworICAgIFN0YXR1cyBTZXRTdHJva2VKb2luKElOIExpbmVKb2luIGxpbmVKb2luKTsKKyAgICBMaW5lSm9pbiBHZXRTdHJva2VKb2luKCkgY29uc3Q7CisgICAgU3RhdHVzIFNldEJhc2VDYXAoSU4gTGluZUNhcCBiYXNlQ2FwKTsKKyAgICBMaW5lQ2FwIEdldEJhc2VDYXAoKSBjb25zdDsKKyAgICBTdGF0dXMgU2V0QmFzZUluc2V0KElOIFJFQUwgaW5zZXQpOworICAgIFJFQUwgR2V0QmFzZUluc2V0KCkgY29uc3Q7CisgICAgU3RhdHVzIFNldFdpZHRoU2NhbGUoSU4gUkVBTCB3aWR0aFNjYWxlKTsKKyAgICBSRUFMIEdldFdpZHRoU2NhbGUoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIEN1c3RvbUxpbmVDYXAoKTsKKworI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMgorCitwcml2YXRlOgorICAgIEN1c3RvbUxpbmVDYXAoY29uc3QgQ3VzdG9tTGluZUNhcCAmKTsKKyAgICBDdXN0b21MaW5lQ2FwJiBvcGVyYXRvcj0oY29uc3QgQ3VzdG9tTGluZUNhcCAmKTsKK3Byb3RlY3RlZDoKKworI2Vsc2UKKworICAgIEN1c3RvbUxpbmVDYXAoY29uc3QgQ3VzdG9tTGluZUNhcCYgY3VzdG9tTGluZUNhcCkKKyAgICB7CisgICAgICAgIGN1c3RvbUxpbmVDYXA7CisgICAgICAgIFNldFN0YXR1cyhOb3RJbXBsZW1lbnRlZCk7CisgICAgfQorCisgICAgQ3VzdG9tTGluZUNhcCYgb3BlcmF0b3I9KGNvbnN0IEN1c3RvbUxpbmVDYXAmIGN1c3RvbUxpbmVDYXApCisgICAgeworICAgICAgICBjdXN0b21MaW5lQ2FwOworICAgICAgICBTZXRTdGF0dXMoTm90SW1wbGVtZW50ZWQpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisjZW5kaWYKKworICAgIEN1c3RvbUxpbmVDYXAoR3BDdXN0b21MaW5lQ2FwKiBuYXRpdmVDYXAsIFN0YXR1cyBzdGF0dXMpCisgICAgeworICAgICAgICBsYXN0UmVzdWx0ID0gc3RhdHVzOworICAgICAgICBTZXROYXRpdmVDYXAobmF0aXZlQ2FwKTsKKyAgICB9CisKKyAgICBWT0lEIFNldE5hdGl2ZUNhcChHcEN1c3RvbUxpbmVDYXAqIG5hdGl2ZUNhcCkKKyAgICB7CisgICAgICAgIHRoaXMtPm5hdGl2ZUNhcCA9IG5hdGl2ZUNhcDsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0U3RhdHVzKFN0YXR1cyBzdGF0dXMpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoc3RhdHVzICE9IE9rKQorICAgICAgICAgICAgcmV0dXJuIChsYXN0UmVzdWx0ID0gc3RhdHVzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBHcEN1c3RvbUxpbmVDYXAqIG5hdGl2ZUNhcDsKKyAgICBtdXRhYmxlIFN0YXR1cyBsYXN0UmVzdWx0OworfTsKKworY2xhc3MgQ2FjaGVkQml0bWFwIDogcHVibGljIEdkaXBsdXNCYXNlCit7CisgICAgZnJpZW5kIEdyYXBoaWNzOworCitwdWJsaWM6CisgICAgQ2FjaGVkQml0bWFwKElOIEJpdG1hcCAqYml0bWFwLAorICAgICAgICAgICAgICAgICBJTiBHcmFwaGljcyAqZ3JhcGhpY3MpOworICAgIHZpcnR1YWwgfkNhY2hlZEJpdG1hcCgpOworCisgICAgU3RhdHVzIEdldExhc3RTdGF0dXMoKSBjb25zdDsKKworI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMgorCitwcml2YXRlOgorICAgIENhY2hlZEJpdG1hcChjb25zdCBDYWNoZWRCaXRtYXAgJik7CisgICAgQ2FjaGVkQml0bWFwJiBvcGVyYXRvcj0oY29uc3QgQ2FjaGVkQml0bWFwICYpOworCisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIEdwQ2FjaGVkQml0bWFwICpuYXRpdmVDYWNoZWRCaXRtYXA7CisgICAgbXV0YWJsZSBTdGF0dXMgbGFzdFJlc3VsdDsKK307CisKKyNlbmRpZiAgLy8gIV9HRElQTFVTSEVBREVSUy5IUFAKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNJbWFnZUNvZGVjLmggYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzSW1hZ2VDb2RlYy5oCmluZGV4IGU5YzAyZGUuLmQ5ZWEwMzggMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNJbWFnZUNvZGVjLmgKKysrIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0ltYWdlQ29kZWMuaApAQCAtMSw3MyArMSw3MyBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXA0KLSoNCi0qIENvcHlyaWdodCAoYykgMjAwMCwgTWljcm9zb2Z0IENvcnAuICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSoNCi0qIE1vZHVsZSBOYW1lOg0KLSoNCi0qICAgR2RpcGx1c0ltYWdlQ29kZWMuaA0KLSoNCi0qIEFic3RyYWN0Og0KLSoNCi0qICAgQVBJcyBmb3IgaW1hZ2luZyBjb2RlY3MuDQotKg0KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0jaWZuZGVmIF9HRElQTFVTSU1BR0VDT0RFQ19IDQotI2RlZmluZSBfR0RJUExVU0lNQUdFQ09ERUNfSA0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBDb2RlYyBNYW5hZ2VtZW50IEFQSXMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotaW5saW5lIFN0YXR1cyANCi1HZXRJbWFnZURlY29kZXJzU2l6ZSgNCi0gICAgT1VUIFVJTlQgKm51bURlY29kZXJzLA0KLSAgICBPVVQgVUlOVCAqc2l6ZSkNCi17DQotICAgIHJldHVybiBEbGxFeHBvcnRzOjpHZGlwR2V0SW1hZ2VEZWNvZGVyc1NpemUobnVtRGVjb2RlcnMsIHNpemUpOw0KLX0NCi0NCi0NCi1pbmxpbmUgU3RhdHVzIA0KLUdldEltYWdlRGVjb2RlcnMoDQotICAgIElOIFVJTlQgbnVtRGVjb2RlcnMsDQotICAgIElOIFVJTlQgc2l6ZSwNCi0gICAgT1VUIEltYWdlQ29kZWNJbmZvICpkZWNvZGVycykNCi17DQotICAgIHJldHVybiBEbGxFeHBvcnRzOjpHZGlwR2V0SW1hZ2VEZWNvZGVycyhudW1EZWNvZGVycywgc2l6ZSwgZGVjb2RlcnMpOw0KLX0NCi0NCi0NCi1pbmxpbmUgU3RhdHVzIA0KLUdldEltYWdlRW5jb2RlcnNTaXplKA0KLSAgICBPVVQgVUlOVCAqbnVtRW5jb2RlcnMsIA0KLSAgICBPVVQgVUlOVCAqc2l6ZSkNCi17DQotICAgIHJldHVybiBEbGxFeHBvcnRzOjpHZGlwR2V0SW1hZ2VFbmNvZGVyc1NpemUobnVtRW5jb2RlcnMsIHNpemUpOw0KLX0NCi0NCi0NCi1pbmxpbmUgU3RhdHVzIA0KLUdldEltYWdlRW5jb2RlcnMoDQotICAgIElOIFVJTlQgbnVtRW5jb2RlcnMsDQotICAgIElOIFVJTlQgc2l6ZSwNCi0gICAgT1VUIEltYWdlQ29kZWNJbmZvICplbmNvZGVycykNCi17DQotICAgIHJldHVybiBEbGxFeHBvcnRzOjpHZGlwR2V0SW1hZ2VFbmNvZGVycyhudW1FbmNvZGVycywgc2l6ZSwgZW5jb2RlcnMpOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzIA0KLUFkZEltYWdlQ29kZWMoDQotICAgIElOIGNvbnN0IEltYWdlQ29kZWNJbmZvKiBjb2RlYykNCi17DQotICAgIHJldHVybiBEbGxFeHBvcnRzOjpHZGlwQWRkSW1hZ2VDb2RlYyhjb2RlYyk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotUmVtb3ZlSW1hZ2VDb2RlYygNCi0gICAgSU4gY29uc3QgSW1hZ2VDb2RlY0luZm8qIGNvZGVjKQ0KLXsNCi0gICAgcmV0dXJuIERsbEV4cG9ydHM6OkdkaXBSZW1vdmVJbWFnZUNvZGVjKGNvZGVjKTsNCi19DQotDQotI2VuZGlmICAvLyBfR0RJUExVU0lNQUdFQ09ERUNfSA0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyoKKyogQ29weXJpZ2h0IChjKSAyMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqIE1vZHVsZSBOYW1lOgorKgorKiAgIEdkaXBsdXNJbWFnZUNvZGVjLmgKKyoKKyogQWJzdHJhY3Q6CisqCisqICAgQVBJcyBmb3IgaW1hZ2luZyBjb2RlY3MuCisqCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0dESVBMVVNJTUFHRUNPREVDX0gKKyNkZWZpbmUgX0dESVBMVVNJTUFHRUNPREVDX0gKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ29kZWMgTWFuYWdlbWVudCBBUElzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2lubGluZSBTdGF0dXMgCitHZXRJbWFnZURlY29kZXJzU2l6ZSgKKyAgICBPVVQgVUlOVCAqbnVtRGVjb2RlcnMsCisgICAgT1VUIFVJTlQgKnNpemUpCit7CisgICAgcmV0dXJuIERsbEV4cG9ydHM6OkdkaXBHZXRJbWFnZURlY29kZXJzU2l6ZShudW1EZWNvZGVycywgc2l6ZSk7Cit9CisKKworaW5saW5lIFN0YXR1cyAKK0dldEltYWdlRGVjb2RlcnMoCisgICAgSU4gVUlOVCBudW1EZWNvZGVycywKKyAgICBJTiBVSU5UIHNpemUsCisgICAgT1VUIEltYWdlQ29kZWNJbmZvICpkZWNvZGVycykKK3sKKyAgICByZXR1cm4gRGxsRXhwb3J0czo6R2RpcEdldEltYWdlRGVjb2RlcnMobnVtRGVjb2RlcnMsIHNpemUsIGRlY29kZXJzKTsKK30KKworCitpbmxpbmUgU3RhdHVzIAorR2V0SW1hZ2VFbmNvZGVyc1NpemUoCisgICAgT1VUIFVJTlQgKm51bUVuY29kZXJzLCAKKyAgICBPVVQgVUlOVCAqc2l6ZSkKK3sKKyAgICByZXR1cm4gRGxsRXhwb3J0czo6R2RpcEdldEltYWdlRW5jb2RlcnNTaXplKG51bUVuY29kZXJzLCBzaXplKTsKK30KKworCitpbmxpbmUgU3RhdHVzIAorR2V0SW1hZ2VFbmNvZGVycygKKyAgICBJTiBVSU5UIG51bUVuY29kZXJzLAorICAgIElOIFVJTlQgc2l6ZSwKKyAgICBPVVQgSW1hZ2VDb2RlY0luZm8gKmVuY29kZXJzKQoreworICAgIHJldHVybiBEbGxFeHBvcnRzOjpHZGlwR2V0SW1hZ2VFbmNvZGVycyhudW1FbmNvZGVycywgc2l6ZSwgZW5jb2RlcnMpOworfQorCitpbmxpbmUgU3RhdHVzIAorQWRkSW1hZ2VDb2RlYygKKyAgICBJTiBjb25zdCBJbWFnZUNvZGVjSW5mbyogY29kZWMpCit7CisgICAgcmV0dXJuIERsbEV4cG9ydHM6OkdkaXBBZGRJbWFnZUNvZGVjKGNvZGVjKTsKK30KKworaW5saW5lIFN0YXR1cyAKK1JlbW92ZUltYWdlQ29kZWMoCisgICAgSU4gY29uc3QgSW1hZ2VDb2RlY0luZm8qIGNvZGVjKQoreworICAgIHJldHVybiBEbGxFeHBvcnRzOjpHZGlwUmVtb3ZlSW1hZ2VDb2RlYyhjb2RlYyk7Cit9CisKKyNlbmRpZiAgLy8gX0dESVBMVVNJTUFHRUNPREVDX0gKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNJbWFnaW5nLmggYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzSW1hZ2luZy5oCmluZGV4IDM1ZGQ0ZDAuLmQ2YmQ0ZjAgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNJbWFnaW5nLmgKKysrIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0ltYWdpbmcuaApAQCAtMSw1NDAgKzEsNTQwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcDQotKiANCi0qIENvcHlyaWdodCAoYykgMTk5OS0yMDAwICBNaWNyb3NvZnQgQ29ycG9yYXRpb24NCi0qDQotKiBNb2R1bGUgTmFtZToNCi0qDQotKiAgIEdkaXBsdXNJbWFnaW5nLmgNCi0qDQotKiBBYnN0cmFjdDoNCi0qDQotKiAgIEdVSURzIGRlZmluZWQgYW5kIHVzZWQgYnkgdGhlIGltYWdpbmcgbGlicmFyeQ0KLSoNCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotI2lmbmRlZiBfR0RJUExVU0lNQUdJTkdfSA0KLSNkZWZpbmUgX0dESVBMVVNJTUFHSU5HX0gNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEltYWdlIGZpbGUgZm9ybWF0IGlkZW50aWZpZXJzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1ERUZJTkVfR1VJRChJbWFnZUZvcm1hdFVuZGVmaW5lZCwgMHhiOTZiM2NhOSwweDA3MjgsMHgxMWQzLDB4OWQsMHg3YiwweDAwLDB4MDAsMHhmOCwweDFlLDB4ZjMsMHgyZSk7DQotREVGSU5FX0dVSUQoSW1hZ2VGb3JtYXRNZW1vcnlCTVAsIDB4Yjk2YjNjYWEsMHgwNzI4LDB4MTFkMywweDlkLDB4N2IsMHgwMCwweDAwLDB4ZjgsMHgxZSwweGYzLDB4MmUpOw0KLURFRklORV9HVUlEKEltYWdlRm9ybWF0Qk1QLCAweGI5NmIzY2FiLDB4MDcyOCwweDExZDMsMHg5ZCwweDdiLDB4MDAsMHgwMCwweGY4LDB4MWUsMHhmMywweDJlKTsNCi1ERUZJTkVfR1VJRChJbWFnZUZvcm1hdEVNRiwgMHhiOTZiM2NhYywweDA3MjgsMHgxMWQzLDB4OWQsMHg3YiwweDAwLDB4MDAsMHhmOCwweDFlLDB4ZjMsMHgyZSk7DQotREVGSU5FX0dVSUQoSW1hZ2VGb3JtYXRXTUYsIDB4Yjk2YjNjYWQsMHgwNzI4LDB4MTFkMywweDlkLDB4N2IsMHgwMCwweDAwLDB4ZjgsMHgxZSwweGYzLDB4MmUpOw0KLURFRklORV9HVUlEKEltYWdlRm9ybWF0SlBFRywgMHhiOTZiM2NhZSwweDA3MjgsMHgxMWQzLDB4OWQsMHg3YiwweDAwLDB4MDAsMHhmOCwweDFlLDB4ZjMsMHgyZSk7DQotREVGSU5FX0dVSUQoSW1hZ2VGb3JtYXRQTkcsIDB4Yjk2YjNjYWYsMHgwNzI4LDB4MTFkMywweDlkLDB4N2IsMHgwMCwweDAwLDB4ZjgsMHgxZSwweGYzLDB4MmUpOw0KLURFRklORV9HVUlEKEltYWdlRm9ybWF0R0lGLCAweGI5NmIzY2IwLDB4MDcyOCwweDExZDMsMHg5ZCwweDdiLDB4MDAsMHgwMCwweGY4LDB4MWUsMHhmMywweDJlKTsNCi1ERUZJTkVfR1VJRChJbWFnZUZvcm1hdFRJRkYsIDB4Yjk2YjNjYjEsMHgwNzI4LDB4MTFkMywweDlkLDB4N2IsMHgwMCwweDAwLDB4ZjgsMHgxZSwweGYzLDB4MmUpOw0KLURFRklORV9HVUlEKEltYWdlRm9ybWF0RVhJRiwgMHhiOTZiM2NiMiwweDA3MjgsMHgxMWQzLDB4OWQsMHg3YiwweDAwLDB4MDAsMHhmOCwweDFlLDB4ZjMsMHgyZSk7DQotI2lmbmRlZiBEQ1JfVVNFX05FV18xNDA4NTUNCi1ERUZJTkVfR1VJRChJbWFnZUZvcm1hdFBob3RvQ0QsIDB4Yjk2YjNjYjMsMHgwNzI4LDB4MTFkMywweDlkLDB4N2IsMHgwMCwweDAwLDB4ZjgsMHgxZSwweGYzLDB4MmUpOw0KLURFRklORV9HVUlEKEltYWdlRm9ybWF0Rmxhc2hQSVgsIDB4Yjk2YjNjYjQsMHgwNzI4LDB4MTFkMywweDlkLDB4N2IsMHgwMCwweDAwLDB4ZjgsMHgxZSwweGYzLDB4MmUpOw0KLSNlbmRpZg0KLURFRklORV9HVUlEKEltYWdlRm9ybWF0SWNvbiwgMHhiOTZiM2NiNSwweDA3MjgsMHgxMWQzLDB4OWQsMHg3YiwweDAwLDB4MDAsMHhmOCwweDFlLDB4ZjMsMHgyZSk7DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBQcmVkZWZpbmVkIG11bHRpLWZyYW1lIGRpbWVuc2lvbiBJRHMNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLURFRklORV9HVUlEKEZyYW1lRGltZW5zaW9uVGltZSwgMHg2YWVkYmQ2ZCwweDNmYjUsMHg0MThhLDB4ODMsMHhhNiwweDdmLDB4NDUsMHgyMiwweDlkLDB4YzgsMHg3Mik7DQotREVGSU5FX0dVSUQoRnJhbWVEaW1lbnNpb25SZXNvbHV0aW9uLCAweDg0MjM2ZjdiLDB4M2JkMywweDQyOGYsMHg4ZCwweGFiLDB4NGUsMHhhMSwweDQzLDB4OWMsMHhhMywweDE1KTsNCi1ERUZJTkVfR1VJRChGcmFtZURpbWVuc2lvblBhZ2UsIDB4NzQ2MmRjODYsMHg2MTgwLDB4NGM3ZSwweDhlLDB4M2YsMHhlZSwweDczLDB4MzMsMHhhNywweGE0LDB4ODMpOw0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gUHJvcGVydHkgc2V0cw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotREVGSU5FX0dVSUQoRm9ybWF0SURJbWFnZUluZm9ybWF0aW9uLCAweGU1ODM2Y2JlLDB4NWVlZiwweDRmMWQsMHhhYywweGRlLDB4YWUsMHg0YywweDQzLDB4YjYsMHgwOCwweGNlKTsNCi1ERUZJTkVfR1VJRChGb3JtYXRJREpwZWdBcHBIZWFkZXJzLCAweDFjNGFmZGNkLDB4NjE3NywweDQzY2YsMHhhYiwweGM3LDB4NWYsMHg1MSwweGFmLDB4MzksMHhlZSwweDg1KTsNCi0NCi0jaWZuZGVmIERDUl9VU0VfTkVXXzE0MDg1NQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gRGVjb2RlciBwYXJhbWV0ZXIgc2V0cw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotREVGSU5FX0dVSUQoRGVjb2RlclRyYW5zQ29sb3IsIDB4YjdhOThjOGYsMHhkY2U3LDB4NDU3ZCwweGJmLDB4YTUsMHhjZSwweGE3LDB4MWIsMHhkMSwweDRkLDB4ZDYpOw0KLURFRklORV9HVUlEKERlY29kZXJUcmFuc1JhbmdlLCAweGFiZWVkMTg5LDB4ZDk4OCwweDRkMDMsMHhiNCwweDI1LDB4NTcsMHgxMCwweDU1LDB4YzcsMHg2YSwweGQxKTsNCi1ERUZJTkVfR1VJRChEZWNvZGVyT3V0cHV0Q2hhbm5lbCwgMHgyZmY4ZjUxZSwweDcyNGQsMHg0NWZlLDB4ODYsMHhjZSwweDE3LDB4NzcsMHhhMCwweDU2LDB4ZGEsMHg2MCk7DQotREVGSU5FX0dVSUQoRGVjb2Rlckljb25SZXMsIDB4NWM2NTZlZWMsMHhlOTRmLDB4NDViYSwweGE2LDB4ZjYsMHgxMCwweDYyLDB4ZTgsMHg1ZiwweDRhLDB4N2YpOw0KLSNlbmRpZg0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gRW5jb2RlciBwYXJhbWV0ZXIgc2V0cw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotREVGSU5FX0dVSUQoRW5jb2RlckNvbXByZXNzaW9uLCAweGUwOWQ3MzlkLDB4Y2NkNCwweDQ0ZWUsMHg4ZSwweGJhLDB4M2YsMHhiZiwweDhiLDB4ZTQsMHhmYywweDU4KTsNCi1ERUZJTkVfR1VJRChFbmNvZGVyQ29sb3JEZXB0aCwgMHg2NjA4NzA1NSwweGFkNjYsMHg0YzdjLDB4OWEsMHgxOCwweDM4LDB4YTIsMHgzMSwweDBiLDB4ODMsMHgzNyk7DQotREVGSU5FX0dVSUQoRW5jb2RlclNjYW5NZXRob2QsIDB4M2E0ZTI2NjEsMHgzMTA5LDB4NGU1NiwweDg1LDB4MzYsMHg0MiwweGMxLDB4NTYsMHhlNywweGRjLDB4ZmEpOw0KLURFRklORV9HVUlEKEVuY29kZXJWZXJzaW9uLCAweDI0ZDE4Yzc2LDB4ODE0YSwweDQxYTQsMHhiZiwweDUzLDB4MWMsMHgyMSwweDljLDB4Y2MsMHhmNywweDk3KTsNCi1ERUZJTkVfR1VJRChFbmNvZGVyUmVuZGVyTWV0aG9kLCAweDZkNDJjNTNhLDB4MjI5YSwweDQ4MjUsMHg4YiwweGI3LDB4NWMsMHg5OSwweGUyLDB4YjksMHhhOCwweGI4KTsNCi1ERUZJTkVfR1VJRChFbmNvZGVyUXVhbGl0eSwgMHgxZDViZTRiNSwweGZhNGEsMHg0NTJkLDB4OWMsMHhkZCwweDVkLDB4YjMsMHg1MSwweDA1LDB4ZTcsMHhlYik7DQotREVGSU5FX0dVSUQoRW5jb2RlclRyYW5zZm9ybWF0aW9uLDB4OGQwZWIyZDEsMHhhNThlLDB4NGVhOCwweGFhLDB4MTQsMHgxMCwweDgwLDB4NzQsMHhiNywweGI2LDB4ZjkpOw0KLURFRklORV9HVUlEKEVuY29kZXJMdW1pbmFuY2VUYWJsZSwweGVkYjMzYmNlLDB4MDI2NiwweDRhNzcsMHhiOSwweDA0LDB4MjcsMHgyMSwweDYwLDB4OTksMHhlNywweDE3KTsNCi1ERUZJTkVfR1VJRChFbmNvZGVyQ2hyb21pbmFuY2VUYWJsZSwweGYyZTQ1NWRjLDB4MDliMywweDQzMTYsMHg4MiwweDYwLDB4NjcsMHg2YSwweGRhLDB4MzIsMHg0OCwweDFjKTsNCi1ERUZJTkVfR1VJRChFbmNvZGVyU2F2ZUZsYWcsMHgyOTIyNjZmYywweGFjNDAsMHg0N2JmLDB4OGMsIDB4ZmMsIDB4YTgsIDB4NWIsIDB4ODksIDB4YTYsIDB4NTUsIDB4ZGUpOw0KLQ0KLURFRklORV9HVUlEKENvZGVjSUltYWdlQnl0ZXMsMHgwMjVkMTgyMywweDZjN2QsMHg0NDdiLDB4YmIsIDB4ZGIsIDB4YTMsIDB4Y2IsIDB4YzMsIDB4ZGYsIDB4YTIsIDB4ZmMpOw0KLQ0KLU1JRExfSU5URVJGQUNFKCIwMjVEMTgyMy02QzdELTQ0N0ItQkJEQi1BM0NCQzNERkEyRkMiKQ0KLUlJbWFnZUJ5dGVzIDogcHVibGljIElVbmtub3duDQotew0KLXB1YmxpYzoNCi0gICAgLy8gUmV0dXJuIHRvdGFsIG51bWJlciBvZiBieXRlcyBpbiB0aGUgSVN0cmVhbQ0KLQ0KLSAgICBTVERNRVRIT0QoQ291bnRCeXRlcykoDQotICAgICAgICBPVVQgVUlOVCAqcGNiDQotICAgICAgICApID0gMDsNCi0gICAgDQotICAgIC8vIExvY2tzICJjYiIgYnl0ZXMsIHN0YXJ0aW5nIGZyb20gInVsT2Zmc2V0IiBpbiB0aGUgc3RyZWFtLCBhbmQgcmV0dXJucyB0aGUNCi0gICAgLy8gcG9pbnRlciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsb2NrZWQgbWVtb3J5IGNodW5rIGluICJwcHZCeXRlcyINCi0NCi0gICAgU1RETUVUSE9EKExvY2tCeXRlcykoDQotICAgICAgICBJTiBVSU5UIGNiLA0KLSAgICAgICAgSU4gVUxPTkcgdWxPZmZzZXQsDQotICAgICAgICBPVVQgY29uc3QgVk9JRCAqKiBwcHZCeXRlcw0KLSAgICAgICAgKSA9IDA7DQotDQotICAgIC8vIFVubG9ja3MgImNiIiBieXRlcywgcG9pbnRlZCBieSAicHZCeXRlcyIsIHN0YXJ0aW5nIGZyb20gInVsT2Zmc2V0IiBpbiB0aGUNCi0gICAgLy8gc3RyZWFtDQotDQotICAgIFNURE1FVEhPRChVbmxvY2tCeXRlcykoDQotICAgICAgICBJTiBjb25zdCBWT0lEICpwdkJ5dGVzLA0KLSAgICAgICAgSU4gVUlOVCBjYiwNCi0gICAgICAgIElOIFVMT05HIHVsT2Zmc2V0DQotICAgICAgICApID0gMDsNCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBJbWFnZUNvZGVjSW5mbyBzdHJ1Y3R1cmUNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotY2xhc3MgSW1hZ2VDb2RlY0luZm8NCi17DQotcHVibGljOiAgICAgICAgICANCi0gICAgQ0xTSUQgQ2xzaWQ7DQotICAgIEdVSUQgIEZvcm1hdElEOw0KLSAgICBjb25zdCBXQ0hBUiogQ29kZWNOYW1lOw0KLSAgICBjb25zdCBXQ0hBUiogRGxsTmFtZTsNCi0gICAgY29uc3QgV0NIQVIqIEZvcm1hdERlc2NyaXB0aW9uOw0KLSAgICBjb25zdCBXQ0hBUiogRmlsZW5hbWVFeHRlbnNpb247DQotICAgIGNvbnN0IFdDSEFSKiBNaW1lVHlwZTsNCi0gICAgRFdPUkQgRmxhZ3M7DQotICAgIERXT1JEIFZlcnNpb247DQotICAgIERXT1JEIFNpZ0NvdW50Ow0KLSAgICBEV09SRCBTaWdTaXplOw0KLSAgICBjb25zdCBCWVRFKiBTaWdQYXR0ZXJuOw0KLSAgICBjb25zdCBCWVRFKiBTaWdNYXNrOw0KLX07DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEluZm9ybWF0aW9uIGZsYWdzIGFib3V0IGltYWdlIGNvZGVjcw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1lbnVtIEltYWdlQ29kZWNGbGFncw0KLXsNCi0gICAgSW1hZ2VDb2RlY0ZsYWdzRW5jb2RlciAgICAgICAgICAgID0gMHgwMDAwMDAwMSwNCi0gICAgSW1hZ2VDb2RlY0ZsYWdzRGVjb2RlciAgICAgICAgICAgID0gMHgwMDAwMDAwMiwNCi0gICAgSW1hZ2VDb2RlY0ZsYWdzU3VwcG9ydEJpdG1hcCAgICAgID0gMHgwMDAwMDAwNCwNCi0gICAgSW1hZ2VDb2RlY0ZsYWdzU3VwcG9ydFZlY3RvciAgICAgID0gMHgwMDAwMDAwOCwNCi0gICAgSW1hZ2VDb2RlY0ZsYWdzU2Vla2FibGVFbmNvZGUgICAgID0gMHgwMDAwMDAxMCwNCi0gICAgSW1hZ2VDb2RlY0ZsYWdzQmxvY2tpbmdEZWNvZGUgICAgID0gMHgwMDAwMDAyMCwNCi0NCi0gICAgSW1hZ2VDb2RlY0ZsYWdzQnVpbHRpbiAgICAgICAgICAgID0gMHgwMDAxMDAwMCwNCi0gICAgSW1hZ2VDb2RlY0ZsYWdzU3lzdGVtICAgICAgICAgICAgID0gMHgwMDAyMDAwMCwNCi0gICAgSW1hZ2VDb2RlY0ZsYWdzVXNlciAgICAgICAgICAgICAgID0gMHgwMDA0MDAwMA0KLX07DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBBY2Nlc3MgbW9kZXMgdXNlZCB3aGVuIGNhbGxpbmcgSW1hZ2U6OkxvY2tCaXRzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1lbnVtIEltYWdlTG9ja01vZGUNCi17DQotICAgIEltYWdlTG9ja01vZGVSZWFkICAgICAgICA9IDB4MDAwMSwNCi0gICAgSW1hZ2VMb2NrTW9kZVdyaXRlICAgICAgID0gMHgwMDAyLA0KLSAgICBJbWFnZUxvY2tNb2RlVXNlcklucHV0QnVmPSAweDAwMDQNCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gSW5mb3JtYXRpb24gYWJvdXQgaW1hZ2UgcGl4ZWwgZGF0YQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotY2xhc3MgQml0bWFwRGF0YQ0KLXsNCi1wdWJsaWM6DQotICAgIFVJTlQgV2lkdGg7DQotICAgIFVJTlQgSGVpZ2h0Ow0KLSAgICBJTlQgU3RyaWRlOw0KLSAgICBQaXhlbEZvcm1hdCBQaXhlbEZvcm1hdDsNCi0gICAgVk9JRCogU2NhbjA7DQotICAgIFVJTlRfUFRSIFJlc2VydmVkOw0KLX07DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBJbWFnZSBmbGFncw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotZW51bSBJbWFnZUZsYWdzDQotew0KLSAgICBJbWFnZUZsYWdzTm9uZSAgICAgICAgICAgICAgICA9IDAsDQotDQotICAgIC8vIExvdy13b3JkOiBzaGFyZWQgd2l0aCBTSU5LRkxBR194DQotDQotICAgIEltYWdlRmxhZ3NTY2FsYWJsZSAgICAgICAgICAgID0gMHgwMDAxLA0KLSAgICBJbWFnZUZsYWdzSGFzQWxwaGEgICAgICAgICAgICA9IDB4MDAwMiwNCi0gICAgSW1hZ2VGbGFnc0hhc1RyYW5zbHVjZW50ICAgICAgPSAweDAwMDQsDQotICAgIEltYWdlRmxhZ3NQYXJ0aWFsbHlTY2FsYWJsZSAgID0gMHgwMDA4LA0KLQ0KLSAgICAvLyBMb3ctd29yZDogY29sb3Igc3BhY2UgZGVmaW5pdGlvbg0KLQ0KLSAgICBJbWFnZUZsYWdzQ29sb3JTcGFjZVJHQiAgICAgICA9IDB4MDAxMCwNCi0gICAgSW1hZ2VGbGFnc0NvbG9yU3BhY2VDTVlLICAgICAgPSAweDAwMjAsDQotICAgIEltYWdlRmxhZ3NDb2xvclNwYWNlR1JBWSAgICAgID0gMHgwMDQwLA0KLSAgICBJbWFnZUZsYWdzQ29sb3JTcGFjZVlDQkNSICAgICA9IDB4MDA4MCwNCi0gICAgSW1hZ2VGbGFnc0NvbG9yU3BhY2VZQ0NLICAgICAgPSAweDAxMDAsDQotIA0KLSAgICAvLyBMb3ctd29yZDogaW1hZ2Ugc2l6ZSBpbmZvDQotDQotICAgIEltYWdlRmxhZ3NIYXNSZWFsRFBJICAgICAgICAgID0gMHgxMDAwLA0KLSAgICBJbWFnZUZsYWdzSGFzUmVhbFBpeGVsU2l6ZSAgICA9IDB4MjAwMCwNCi0NCi0gICAgLy8gSGlnaC13b3JkDQotDQotICAgIEltYWdlRmxhZ3NSZWFkT25seSAgICAgICAgICAgID0gMHgwMDAxMDAwMCwNCi0gICAgSW1hZ2VGbGFnc0NhY2hpbmcgICAgICAgICAgICAgPSAweDAwMDIwMDAwDQotfTsNCi0NCi1lbnVtIFJvdGF0ZUZsaXBUeXBlDQotew0KLSAgICBSb3RhdGVOb25lRmxpcE5vbmUgPSAwLA0KLSAgICBSb3RhdGU5MEZsaXBOb25lICAgPSAxLA0KLSAgICBSb3RhdGUxODBGbGlwTm9uZSAgPSAyLA0KLSAgICBSb3RhdGUyNzBGbGlwTm9uZSAgPSAzLA0KLQ0KLSAgICBSb3RhdGVOb25lRmxpcFggICAgPSA0LA0KLSAgICBSb3RhdGU5MEZsaXBYICAgICAgPSA1LA0KLSAgICBSb3RhdGUxODBGbGlwWCAgICAgPSA2LA0KLSAgICBSb3RhdGUyNzBGbGlwWCAgICAgPSA3LA0KLQ0KLSAgICBSb3RhdGVOb25lRmxpcFkgICAgPSBSb3RhdGUxODBGbGlwWCwNCi0gICAgUm90YXRlOTBGbGlwWSAgICAgID0gUm90YXRlMjcwRmxpcFgsDQotICAgIFJvdGF0ZTE4MEZsaXBZICAgICA9IFJvdGF0ZU5vbmVGbGlwWCwNCi0gICAgUm90YXRlMjcwRmxpcFkgICAgID0gUm90YXRlOTBGbGlwWCwNCi0NCi0gICAgUm90YXRlTm9uZUZsaXBYWSAgID0gUm90YXRlMTgwRmxpcE5vbmUsDQotICAgIFJvdGF0ZTkwRmxpcFhZICAgICA9IFJvdGF0ZTI3MEZsaXBOb25lLA0KLSAgICBSb3RhdGUxODBGbGlwWFkgICAgPSBSb3RhdGVOb25lRmxpcE5vbmUsDQotICAgIFJvdGF0ZTI3MEZsaXBYWSAgICA9IFJvdGF0ZTkwRmxpcE5vbmUNCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gRW5jb2RlciBQYXJhbWV0ZXIgc3RydWN0dXJlDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi1jbGFzcyBFbmNvZGVyUGFyYW1ldGVyDQotew0KLXB1YmxpYzoNCi0gICAgR1VJRCAgICBHdWlkOyAgICAgICAgICAgICAgIC8vIEdVSUQgb2YgdGhlIHBhcmFtZXRlcg0KLSAgICBVTE9ORyAgIE51bWJlck9mVmFsdWVzOyAgICAgLy8gTnVtYmVyIG9mIHRoZSBwYXJhbWV0ZXIgdmFsdWVzDQotICAgIFVMT05HICAgVHlwZTsgICAgICAgICAgICAgICAvLyBWYWx1ZSB0eXBlLCBsaWtlIFZhbHVlVHlwZUxPTkcgIGV0Yy4NCi0gICAgVk9JRCogICBWYWx1ZTsgICAgICAgICAgICAgIC8vIEEgcG9pbnRlciB0byB0aGUgcGFyYW1ldGVyIHZhbHVlcw0KLX07DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBFbmNvZGVyIFBhcmFtZXRlcnMgc3RydWN0dXJlDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi1jbGFzcyBFbmNvZGVyUGFyYW1ldGVycw0KLXsNCi1wdWJsaWM6DQotICAgIFVJTlQgQ291bnQ7ICAgICAgICAgICAgICAgICAgICAgIC8vIE51bWJlciBvZiBwYXJhbWV0ZXJzIGluIHRoaXMgc3RydWN0dXJlDQotICAgIEVuY29kZXJQYXJhbWV0ZXIgUGFyYW1ldGVyWzFdOyAgIC8vIFBhcmFtZXRlciB2YWx1ZXMNCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gUHJvcGVydHkgSXRlbQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotY2xhc3MgUHJvcGVydHlJdGVtDQotew0KLXB1YmxpYzoNCi0gICAgUFJPUElEICBpZDsgICAgICAgICAgICAgICAgIC8vIElEIG9mIHRoaXMgcHJvcGVydHkNCi0gICAgVUxPTkcgICBsZW5ndGg7ICAgICAgICAgICAgIC8vIExlbmd0aCBvZiB0aGUgcHJvcGVydHkgdmFsdWUsIGluIGJ5dGVzDQotICAgIFdPUkQgICAgdHlwZTsgICAgICAgICAgICAgICAvLyBUeXBlIG9mIHRoZSB2YWx1ZSwgYXMgb25lIG9mIFRBR19UWVBFX1hYWA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVmaW5lZCBhYm92ZQ0KLSAgICBWT0lEKiAgIHZhbHVlOyAgICAgICAgICAgICAgLy8gcHJvcGVydHkgdmFsdWUNCi19Ow0KLQ0KLSNpZmRlZiBEQ1JfVVNFX05FV18xNDA4NTcNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEltYWdlIHByb3BlcnR5IHR5cGVzIA0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1R5cGVCeXRlICAgICAgICAxDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1R5cGVBU0NJSSAgICAgICAyDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1R5cGVTaG9ydCAgICAgICAzDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1R5cGVMb25nICAgICAgICA0DQotI2RlZmluZSBQcm9wZXJ0eVRhZ1R5cGVSYXRpb25hbCAgICA1DQotI2RlZmluZSBQcm9wZXJ0eVRhZ1R5cGVVbmRlZmluZWQgICA3DQotI2RlZmluZSBQcm9wZXJ0eVRhZ1R5cGVTTE9ORyAgICAgICA5DQotI2RlZmluZSBQcm9wZXJ0eVRhZ1R5cGVTUmF0aW9uYWwgIDEwDQotI2VuZGlmDQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBJbWFnZSBwcm9wZXJ0eSBJRCB0YWdzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi0jZGVmaW5lIFByb3BlcnR5VGFnRXhpZklGRCAgICAgICAgICAgICAweDg3NjkNCi0jZGVmaW5lIFByb3BlcnR5VGFnR3BzSUZEICAgICAgICAgICAgICAweDg4MjUNCi0NCi0jZGVmaW5lIFByb3BlcnR5VGFnTmV3U3ViZmlsZVR5cGUgICAgICAweDAwRkUNCi0jZGVmaW5lIFByb3BlcnR5VGFnU3ViZmlsZVR5cGUgICAgICAgICAweDAwRkYNCi0jZGVmaW5lIFByb3BlcnR5VGFnSW1hZ2VXaWR0aCAgICAgICAgICAweDAxMDANCi0jZGVmaW5lIFByb3BlcnR5VGFnSW1hZ2VIZWlnaHQgICAgICAgICAweDAxMDENCi0jZGVmaW5lIFByb3BlcnR5VGFnQml0c1BlclNhbXBsZSAgICAgICAweDAxMDINCi0jZGVmaW5lIFByb3BlcnR5VGFnQ29tcHJlc3Npb24gICAgICAgICAweDAxMDMNCi0jZGVmaW5lIFByb3BlcnR5VGFnUGhvdG9tZXRyaWNJbnRlcnAgICAweDAxMDYNCi0jZGVmaW5lIFByb3BlcnR5VGFnVGhyZXNoSG9sZGluZyAgICAgICAweDAxMDcNCi0jZGVmaW5lIFByb3BlcnR5VGFnQ2VsbFdpZHRoICAgICAgICAgICAweDAxMDgNCi0jZGVmaW5lIFByb3BlcnR5VGFnQ2VsbEhlaWdodCAgICAgICAgICAweDAxMDkNCi0jZGVmaW5lIFByb3BlcnR5VGFnRmlsbE9yZGVyICAgICAgICAgICAweDAxMEENCi0jZGVmaW5lIFByb3BlcnR5VGFnRG9jdW1lbnROYW1lICAgICAgICAweDAxMEQNCi0jZGVmaW5lIFByb3BlcnR5VGFnSW1hZ2VEZXNjcmlwdGlvbiAgICAweDAxMEUNCi0jZGVmaW5lIFByb3BlcnR5VGFnRXF1aXBNYWtlICAgICAgICAgICAweDAxMEYNCi0jZGVmaW5lIFByb3BlcnR5VGFnRXF1aXBNb2RlbCAgICAgICAgICAweDAxMTANCi0jZGVmaW5lIFByb3BlcnR5VGFnU3RyaXBPZmZzZXRzICAgICAgICAweDAxMTENCi0jZGVmaW5lIFByb3BlcnR5VGFnT3JpZW50YXRpb24gICAgICAgICAweDAxMTINCi0jZGVmaW5lIFByb3BlcnR5VGFnU2FtcGxlc1BlclBpeGVsICAgICAweDAxMTUNCi0jZGVmaW5lIFByb3BlcnR5VGFnUm93c1BlclN0cmlwICAgICAgICAweDAxMTYNCi0jZGVmaW5lIFByb3BlcnR5VGFnU3RyaXBCeXRlc0NvdW50ICAgICAweDAxMTcNCi0jZGVmaW5lIFByb3BlcnR5VGFnTWluU2FtcGxlVmFsdWUgICAgICAweDAxMTgNCi0jZGVmaW5lIFByb3BlcnR5VGFnTWF4U2FtcGxlVmFsdWUgICAgICAweDAxMTkNCi0jZGVmaW5lIFByb3BlcnR5VGFnWFJlc29sdXRpb24gICAgICAgICAweDAxMUEgICAvLyBJbWFnZSByZXNvbHV0aW9uIGluIHdpZHRoIGRpcmVjdGlvbg0KLSNkZWZpbmUgUHJvcGVydHlUYWdZUmVzb2x1dGlvbiAgICAgICAgIDB4MDExQiAgIC8vIEltYWdlIHJlc29sdXRpb24gaW4gaGVpZ2h0IGRpcmVjdGlvbg0KLSNkZWZpbmUgUHJvcGVydHlUYWdQbGFuYXJDb25maWcgICAgICAgIDB4MDExQyAgIC8vIEltYWdlIGRhdGEgYXJyYW5nZW1lbnQNCi0jZGVmaW5lIFByb3BlcnR5VGFnUGFnZU5hbWUgICAgICAgICAgICAweDAxMUQNCi0jZGVmaW5lIFByb3BlcnR5VGFnWFBvc2l0aW9uICAgICAgICAgICAweDAxMUUNCi0jZGVmaW5lIFByb3BlcnR5VGFnWVBvc2l0aW9uICAgICAgICAgICAweDAxMUYNCi0jZGVmaW5lIFByb3BlcnR5VGFnRnJlZU9mZnNldCAgICAgICAgICAweDAxMjANCi0jZGVmaW5lIFByb3BlcnR5VGFnRnJlZUJ5dGVDb3VudHMgICAgICAweDAxMjENCi0jZGVmaW5lIFByb3BlcnR5VGFnR3JheVJlc3BvbnNlVW5pdCAgICAweDAxMjINCi0jZGVmaW5lIFByb3BlcnR5VGFnR3JheVJlc3BvbnNlQ3VydmUgICAweDAxMjMNCi0jZGVmaW5lIFByb3BlcnR5VGFnVDRPcHRpb24gICAgICAgICAgICAweDAxMjQNCi0jZGVmaW5lIFByb3BlcnR5VGFnVDZPcHRpb24gICAgICAgICAgICAweDAxMjUNCi0jZGVmaW5lIFByb3BlcnR5VGFnUmVzb2x1dGlvblVuaXQgICAgICAweDAxMjggICAvLyBVbml0IG9mIFggYW5kIFkgcmVzb2x1dGlvbg0KLSNkZWZpbmUgUHJvcGVydHlUYWdQYWdlTnVtYmVyICAgICAgICAgIDB4MDEyOQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdUcmFuc2ZlckZ1bmNpdGlvbiAgIDB4MDEyRA0KLSNkZWZpbmUgUHJvcGVydHlUYWdTb2Z0d2FyZVVzZWQgICAgICAgIDB4MDEzMQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdEYXRlVGltZSAgICAgICAgICAgIDB4MDEzMg0KLSNkZWZpbmUgUHJvcGVydHlUYWdBcnRpc3QgICAgICAgICAgICAgIDB4MDEzQg0KLSNkZWZpbmUgUHJvcGVydHlUYWdIb3N0Q29tcHV0ZXIgICAgICAgIDB4MDEzQw0KLSNkZWZpbmUgUHJvcGVydHlUYWdQcmVkaWN0b3IgICAgICAgICAgIDB4MDEzRA0KLSNkZWZpbmUgUHJvcGVydHlUYWdXaGl0ZVBvaW50ICAgICAgICAgIDB4MDEzRQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdQcmltYXJ5Q2hyb21hdGljaXRpZXMgMHgwMTNGDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0NvbG9yTWFwICAgICAgICAgICAgMHgwMTQwDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0hhbGZ0b25lSGludHMgICAgICAgMHgwMTQxDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1RpbGVXaWR0aCAgICAgICAgICAgMHgwMTQyDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1RpbGVMZW5ndGggICAgICAgICAgMHgwMTQzDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1RpbGVPZmZzZXQgICAgICAgICAgMHgwMTQ0DQotI2RlZmluZSBQcm9wZXJ0eVRhZ1RpbGVCeXRlQ291bnRzICAgICAgMHgwMTQ1DQotI2RlZmluZSBQcm9wZXJ0eVRhZ0lua1NldCAgICAgICAgICAgICAgMHgwMTRDDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0lua05hbWVzICAgICAgICAgICAgMHgwMTREDQotI2RlZmluZSBQcm9wZXJ0eVRhZ051bWJlck9mSW5rcyAgICAgICAgMHgwMTRFDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0RvdFJhbmdlICAgICAgICAgICAgMHgwMTUwDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1RhcmdldFByaW50ZXIgICAgICAgMHgwMTUxDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0V4dHJhU2FtcGxlcyAgICAgICAgMHgwMTUyDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1NhbXBsZUZvcm1hdCAgICAgICAgMHgwMTUzDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1NNaW5TYW1wbGVWYWx1ZSAgICAgMHgwMTU0DQotI2RlZmluZSBQcm9wZXJ0eVRhZ1NNYXhTYW1wbGVWYWx1ZSAgICAgMHgwMTU1DQotI2RlZmluZSBQcm9wZXJ0eVRhZ1RyYW5zZmVyUmFuZ2UgICAgICAgMHgwMTU2DQotDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0pQRUdQcm9jICAgICAgICAgICAgMHgwMjAwDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0pQRUdJbnRlckZvcm1hdCAgICAgMHgwMjAxDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0pQRUdJbnRlckxlbmd0aCAgICAgMHgwMjAyDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0pQRUdSZXN0YXJ0SW50ZXJ2YWwgMHgwMjAzDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0pQRUdMb3NzbGVzc1ByZWRpY3RvcnMgIDB4MDIwNQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdKUEVHUG9pbnRUcmFuc2Zvcm1zICAgICAweDAyMDYNCi0jZGVmaW5lIFByb3BlcnR5VGFnSlBFR1FUYWJsZXMgICAgICAgICAweDAyMDcNCi0jZGVmaW5lIFByb3BlcnR5VGFnSlBFR0RDVGFibGVzICAgICAgICAweDAyMDgNCi0jZGVmaW5lIFByb3BlcnR5VGFnSlBFR0FDVGFibGVzICAgICAgICAweDAyMDkNCi0NCi0jZGVmaW5lIFByb3BlcnR5VGFnWUNiQ3JDb2VmZmljaWVudHMgICAweDAyMTENCi0jZGVmaW5lIFByb3BlcnR5VGFnWUNiQ3JTdWJzYW1wbGluZyAgICAweDAyMTINCi0jZGVmaW5lIFByb3BlcnR5VGFnWUNiQ3JQb3NpdGlvbmluZyAgICAweDAyMTMNCi0jZGVmaW5lIFByb3BlcnR5VGFnUkVGQmxhY2tXaGl0ZSAgICAgICAweDAyMTQNCi0NCi0jZGVmaW5lIFByb3BlcnR5VGFnSUNDUHJvZmlsZSAgICAgICAgICAweDg3NzMgICAvLyBUaGlzIFRBRyBpcyBkZWZpbmVkIGJ5IElDQw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBlbWJlZGRlZCBJQ0MgaW4gVElGRg0KLSNkZWZpbmUgUHJvcGVydHlUYWdHYW1tYSAgICAgICAgICAgICAgIDB4MDMwMQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdJQ0NQcm9maWxlRGVzY3JpcHRvciAweDAzMDINCi0jZGVmaW5lIFByb3BlcnR5VGFnU1JHQlJlbmRlcmluZ0ludGVudCAweDAzMDMNCi0NCi0jZGVmaW5lIFByb3BlcnR5VGFnSW1hZ2VUaXRsZSAgICAgICAgICAweDAzMjANCi0jZGVmaW5lIFByb3BlcnR5VGFnQ29weXJpZ2h0ICAgICAgICAgICAweDgyOTgNCi0NCi0vLyBFeHRyYSBUQUdzIChMaWtlIEFkb2JlIEltYWdlIEluZm9ybWF0aW9uIHRhZ3MgZXRjLikNCi0NCi0jZGVmaW5lIFByb3BlcnR5VGFnUmVzb2x1dGlvblhVbml0ICAgICAgICAgICAweDUwMDENCi0jZGVmaW5lIFByb3BlcnR5VGFnUmVzb2x1dGlvbllVbml0ICAgICAgICAgICAweDUwMDINCi0jZGVmaW5lIFByb3BlcnR5VGFnUmVzb2x1dGlvblhMZW5ndGhVbml0ICAgICAweDUwMDMNCi0jZGVmaW5lIFByb3BlcnR5VGFnUmVzb2x1dGlvbllMZW5ndGhVbml0ICAgICAweDUwMDQNCi0jZGVmaW5lIFByb3BlcnR5VGFnUHJpbnRGbGFncyAgICAgICAgICAgICAgICAweDUwMDUNCi0jZGVmaW5lIFByb3BlcnR5VGFnUHJpbnRGbGFnc1ZlcnNpb24gICAgICAgICAweDUwMDYNCi0jZGVmaW5lIFByb3BlcnR5VGFnUHJpbnRGbGFnc0Nyb3AgICAgICAgICAgICAweDUwMDcNCi0jZGVmaW5lIFByb3BlcnR5VGFnUHJpbnRGbGFnc0JsZWVkV2lkdGggICAgICAweDUwMDgNCi0jZGVmaW5lIFByb3BlcnR5VGFnUHJpbnRGbGFnc0JsZWVkV2lkdGhTY2FsZSAweDUwMDkNCi0jZGVmaW5lIFByb3BlcnR5VGFnSGFsZnRvbmVMUEkgICAgICAgICAgICAgICAweDUwMEENCi0jZGVmaW5lIFByb3BlcnR5VGFnSGFsZnRvbmVMUElVbml0ICAgICAgICAgICAweDUwMEINCi0jZGVmaW5lIFByb3BlcnR5VGFnSGFsZnRvbmVEZWdyZWUgICAgICAgICAgICAweDUwMEMNCi0jZGVmaW5lIFByb3BlcnR5VGFnSGFsZnRvbmVTaGFwZSAgICAgICAgICAgICAweDUwMEQNCi0jZGVmaW5lIFByb3BlcnR5VGFnSGFsZnRvbmVNaXNjICAgICAgICAgICAgICAweDUwMEUNCi0jZGVmaW5lIFByb3BlcnR5VGFnSGFsZnRvbmVTY3JlZW4gICAgICAgICAgICAweDUwMEYNCi0jZGVmaW5lIFByb3BlcnR5VGFnSlBFR1F1YWxpdHkgICAgICAgICAgICAgICAweDUwMTANCi0jZGVmaW5lIFByb3BlcnR5VGFnR3JpZFNpemUgICAgICAgICAgICAgICAgICAweDUwMTENCi0jZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsRm9ybWF0ICAgICAgICAgICAweDUwMTIgIC8vIDEgPSBKUEVHLCAwID0gUkFXIFJHQg0KLSNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxXaWR0aCAgICAgICAgICAgIDB4NTAxMw0KLSNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxIZWlnaHQgICAgICAgICAgIDB4NTAxNA0KLSNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxDb2xvckRlcHRoICAgICAgIDB4NTAxNQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxQbGFuZXMgICAgICAgICAgIDB4NTAxNg0KLSNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxSYXdCeXRlcyAgICAgICAgIDB4NTAxNw0KLSNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxTaXplICAgICAgICAgICAgIDB4NTAxOA0KLSNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxDb21wcmVzc2VkU2l6ZSAgIDB4NTAxOQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdDb2xvclRyYW5zZmVyRnVuY3Rpb24gICAgIDB4NTAxQQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxEYXRhICAgICAgICAgICAgIDB4NTAxQi8vIFJBVyB0aHVtYm5haWwgYml0cyBpbg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEpQRUcgZm9ybWF0IG9yIFJHQiBmb3JtYXQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZXBlbmRzIG9uDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvcGVydHlUYWdUaHVtYm5haWxGb3JtYXQNCi0NCi0vLyBUaHVtYm5haWwgcmVsYXRlZCBUQUdzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbEltYWdlV2lkdGggICAgICAgMHg1MDIwICAvLyBUaHVtYm5haWwgd2lkdGgNCi0jZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsSW1hZ2VIZWlnaHQgICAgICAweDUwMjEgIC8vIFRodW1ibmFpbCBoZWlnaHQNCi0jZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsQml0c1BlclNhbXBsZSAgICAweDUwMjIgIC8vIE51bWJlciBvZiBiaXRzIHBlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29tcG9uZW50DQotI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbENvbXByZXNzaW9uICAgICAgMHg1MDIzICAvLyBDb21wcmVzc2lvbiBTY2hlbWUNCi0jZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsUGhvdG9tZXRyaWNJbnRlcnAgMHg1MDI0IC8vIFBpeGVsIGNvbXBvc2l0aW9uDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbEltYWdlRGVzY3JpcHRpb24gMHg1MDI1ICAvLyBJbWFnZSBUaWxlDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbEVxdWlwTWFrZSAgICAgICAgMHg1MDI2ICAvLyBNYW51ZmFjdHVyZXIgb2YgSW1hZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElucHV0IGVxdWlwbWVudA0KLSNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxFcXVpcE1vZGVsICAgICAgIDB4NTAyNyAgLy8gTW9kZWwgb2YgSW1hZ2UgaW5wdXQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVxdWlwbWVudA0KLSNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxTdHJpcE9mZnNldHMgICAgIDB4NTAyOCAgLy8gSW1hZ2UgZGF0YSBsb2NhdGlvbg0KLSNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxPcmllbnRhdGlvbiAgICAgIDB4NTAyOSAgLy8gT3JpZW50YXRpb24gb2YgaW1hZ2UNCi0jZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsU2FtcGxlc1BlclBpeGVsICAweDUwMkEgIC8vIE51bWJlciBvZiBjb21wb25lbnRzDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbFJvd3NQZXJTdHJpcCAgICAgMHg1MDJCICAvLyBOdW1iZXIgb2Ygcm93cyBwZXIgc3RyaXANCi0jZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsU3RyaXBCeXRlc0NvdW50ICAweDUwMkMgIC8vIEJ5dGVzIHBlciBjb21wcmVzc2VkDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHJpcA0KLSNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxSZXNvbHV0aW9uWCAgICAgIDB4NTAyRCAgLy8gUmVzb2x1dGlvbiBpbiB3aWR0aA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlyZWN0aW9uDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbFJlc29sdXRpb25ZICAgICAgMHg1MDJFICAvLyBSZXNvbHV0aW9uIGluIGhlaWdodA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlyZWN0aW9uDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbFBsYW5hckNvbmZpZyAgICAgMHg1MDJGICAvLyBJbWFnZSBkYXRhIGFycmFuZ2VtZW50DQotI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbFJlc29sdXRpb25Vbml0ICAgMHg1MDMwICAvLyBVbml0IG9mIFggYW5kIFkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlc29sdXRpb24NCi0jZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsVHJhbnNmZXJGdW5jdGlvbiAweDUwMzEgIC8vIFRyYW5zZmVyIGZ1bmN0aW9uDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbFNvZnR3YXJlVXNlZCAgICAgMHg1MDMyICAvLyBTb2Z0d2FyZSB1c2VkDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbERhdGVUaW1lICAgICAgICAgMHg1MDMzICAvLyBGaWxlIGNoYW5nZSBkYXRlIGFuZA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGltZQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxBcnRpc3QgICAgICAgICAgIDB4NTAzNCAgLy8gUGVyc29uIHdobyBjcmVhdGVkIHRoZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW1hZ2UNCi0jZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsV2hpdGVQb2ludCAgICAgICAweDUwMzUgIC8vIFdoaXRlIHBvaW50IGNocm9tYXRpY2l0eQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxQcmltYXJ5Q2hyb21hdGljaXRpZXMgMHg1MDM2IA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hyb21hdGljaXRpZXMgb2YNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByaW1hcmllcw0KLSNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxZQ2JDckNvZWZmaWNpZW50cyAweDUwMzcgLy8gQ29sb3Igc3BhY2UgdHJhbnNmb3JtYS0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRpb24gY29lZmZpY2llbnRzDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbFlDYkNyU3Vic2FtcGxpbmcgMHg1MDM4ICAvLyBTdWJzYW1wbGluZyByYXRpbyBvZiBZDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBDDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbFlDYkNyUG9zaXRpb25pbmcgMHg1MDM5ICAvLyBZIGFuZCBDIHBvc2l0aW9uDQotI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbFJlZkJsYWNrV2hpdGUgICAgMHg1MDNBICAvLyBQYWlyIG9mIGJsYWNrIGFuZCB3aGl0ZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNlIHZhbHVlcw0KLSNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxDb3B5UmlnaHQgICAgICAgIDB4NTAzQiAgLy8gQ29weVJpZ2h0IGhvbGRlcg0KLQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdMdW1pbmFuY2VUYWJsZSAgICAgICAgICAgIDB4NTA5MA0KLSNkZWZpbmUgUHJvcGVydHlUYWdDaHJvbWluYW5jZVRhYmxlICAgICAgICAgIDB4NTA5MQ0KLQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdGcmFtZURlbGF5ICAgICAgICAgICAgICAgIDB4NTEwMA0KLSNkZWZpbmUgUHJvcGVydHlUYWdMb29wQ291bnQgICAgICAgICAgICAgICAgIDB4NTEwMQ0KLQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdQaXhlbFVuaXQgICAgICAgICAweDUxMTAgIC8vIFVuaXQgc3BlY2lmaWVyIGZvciBwaXhlbC91bml0DQotI2RlZmluZSBQcm9wZXJ0eVRhZ1BpeGVsUGVyVW5pdFggICAgIDB4NTExMSAgLy8gUGl4ZWxzIHBlciB1bml0IGluIFgNCi0jZGVmaW5lIFByb3BlcnR5VGFnUGl4ZWxQZXJVbml0WSAgICAgMHg1MTEyICAvLyBQaXhlbHMgcGVyIHVuaXQgaW4gWQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdQYWxldHRlSGlzdG9ncmFtICAweDUxMTMgIC8vIFBhbGV0dGUgaGlzdG9ncmFtDQotDQotLy8gRVhJRiBzcGVjaWZpYyB0YWcNCi0NCi0jZGVmaW5lIFByb3BlcnR5VGFnRXhpZkV4cG9zdXJlVGltZSAgMHg4MjlBDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZGTnVtYmVyICAgICAgIDB4ODI5RA0KLQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdFeGlmRXhwb3N1cmVQcm9nICAweDg4MjINCi0jZGVmaW5lIFByb3BlcnR5VGFnRXhpZlNwZWN0cmFsU2Vuc2UgMHg4ODI0DQotI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZJU09TcGVlZCAgICAgIDB4ODgyNw0KLSNkZWZpbmUgUHJvcGVydHlUYWdFeGlmT0VDRiAgICAgICAgICAweDg4MjgNCi0NCi0jZGVmaW5lIFByb3BlcnR5VGFnRXhpZlZlciAgICAgICAgICAgIDB4OTAwMA0KLSNkZWZpbmUgUHJvcGVydHlUYWdFeGlmRFRPcmlnICAgICAgICAgMHg5MDAzIC8vIERhdGUgJiB0aW1lIG9mIG9yaWdpbmFsDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZEVERpZ2l0aXplZCAgICAweDkwMDQgLy8gRGF0ZSAmIHRpbWUgb2YgZGlnaXRhbCBkYXRhIGdlbmVyYXRpb24NCi0NCi0jZGVmaW5lIFByb3BlcnR5VGFnRXhpZkNvbXBDb25maWcgICAgIDB4OTEwMQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdFeGlmQ29tcEJQUCAgICAgICAgMHg5MTAyDQotDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZTaHV0dGVyU3BlZWQgICAweDkyMDENCi0jZGVmaW5lIFByb3BlcnR5VGFnRXhpZkFwZXJ0dXJlICAgICAgIDB4OTIwMg0KLSNkZWZpbmUgUHJvcGVydHlUYWdFeGlmQnJpZ2h0bmVzcyAgICAgMHg5MjAzDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZFeHBvc3VyZUJpYXMgICAweDkyMDQNCi0jZGVmaW5lIFByb3BlcnR5VGFnRXhpZk1heEFwZXJ0dXJlICAgIDB4OTIwNQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdFeGlmU3ViamVjdERpc3QgICAgMHg5MjA2DQotI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZNZXRlcmluZ01vZGUgICAweDkyMDcNCi0jZGVmaW5lIFByb3BlcnR5VGFnRXhpZkxpZ2h0U291cmNlICAgIDB4OTIwOA0KLSNkZWZpbmUgUHJvcGVydHlUYWdFeGlmRmxhc2ggICAgICAgICAgMHg5MjA5DQotI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZGb2NhbExlbmd0aCAgICAweDkyMEENCi0jZGVmaW5lIFByb3BlcnR5VGFnRXhpZk1ha2VyTm90ZSAgICAgIDB4OTI3Qw0KLSNkZWZpbmUgUHJvcGVydHlUYWdFeGlmVXNlckNvbW1lbnQgICAgMHg5Mjg2DQotI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZEVFN1YnNlYyAgICAgICAweDkyOTAgIC8vIERhdGUgJiBUaW1lIHN1YnNlY29uZHMNCi0jZGVmaW5lIFByb3BlcnR5VGFnRXhpZkRUT3JpZ1NTICAgICAgIDB4OTI5MSAgLy8gRGF0ZSAmIFRpbWUgb3JpZ2luYWwgc3Vic2Vjb25kcw0KLSNkZWZpbmUgUHJvcGVydHlUYWdFeGlmRFREaWdTUyAgICAgICAgMHg5MjkyICAvLyBEYXRlICYgVEltZSBkaWdpdGl6ZWQgc3Vic2Vjb25kcw0KLQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdFeGlmRlBYVmVyICAgICAgICAgMHhBMDAwDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZDb2xvclNwYWNlICAgICAweEEwMDENCi0jZGVmaW5lIFByb3BlcnR5VGFnRXhpZlBpeFhEaW0gICAgICAgIDB4QTAwMg0KLSNkZWZpbmUgUHJvcGVydHlUYWdFeGlmUGl4WURpbSAgICAgICAgMHhBMDAzDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZSZWxhdGVkV2F2ICAgICAweEEwMDQgIC8vIHJlbGF0ZWQgc291bmQgZmlsZQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdFeGlmSW50ZXJvcCAgICAgICAgMHhBMDA1DQotI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZGbGFzaEVuZXJneSAgICAweEEyMEINCi0jZGVmaW5lIFByb3BlcnR5VGFnRXhpZlNwYXRpYWxGUiAgICAgIDB4QTIwQyAgLy8gU3BhdGlhbCBGcmVxdWVuY3kgUmVzcG9uc2UNCi0jZGVmaW5lIFByb3BlcnR5VGFnRXhpZkZvY2FsWFJlcyAgICAgIDB4QTIwRSAgLy8gRm9jYWwgUGxhbmUgWCBSZXNvbHV0aW9uDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZGb2NhbFlSZXMgICAgICAweEEyMEYgIC8vIEZvY2FsIFBsYW5lIFkgUmVzb2x1dGlvbg0KLSNkZWZpbmUgUHJvcGVydHlUYWdFeGlmRm9jYWxSZXNVbml0ICAgMHhBMjEwICAvLyBGb2NhbCBQbGFuZSBSZXNvbHV0aW9uIFVuaXQNCi0jZGVmaW5lIFByb3BlcnR5VGFnRXhpZlN1YmplY3RMb2MgICAgIDB4QTIxNA0KLSNkZWZpbmUgUHJvcGVydHlUYWdFeGlmRXhwb3N1cmVJbmRleCAgMHhBMjE1DQotI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZTZW5zaW5nTWV0aG9kICAweEEyMTcNCi0jZGVmaW5lIFByb3BlcnR5VGFnRXhpZkZpbGVTb3VyY2UgICAgIDB4QTMwMA0KLSNkZWZpbmUgUHJvcGVydHlUYWdFeGlmU2NlbmVUeXBlICAgICAgMHhBMzAxDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZDZmFQYXR0ZXJuICAgICAweEEzMDINCi0NCi0jZGVmaW5lIFByb3BlcnR5VGFnR3BzVmVyICAgICAgICAgICAgIDB4MDAwMA0KLSNkZWZpbmUgUHJvcGVydHlUYWdHcHNMYXRpdHVkZVJlZiAgICAgMHgwMDAxDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0dwc0xhdGl0dWRlICAgICAgICAweDAwMDINCi0jZGVmaW5lIFByb3BlcnR5VGFnR3BzTG9uZ2l0dWRlUmVmICAgIDB4MDAwMw0KLSNkZWZpbmUgUHJvcGVydHlUYWdHcHNMb25naXR1ZGUgICAgICAgMHgwMDA0DQotI2RlZmluZSBQcm9wZXJ0eVRhZ0dwc0FsdGl0dWRlUmVmICAgICAweDAwMDUNCi0jZGVmaW5lIFByb3BlcnR5VGFnR3BzQWx0aXR1ZGUgICAgICAgIDB4MDAwNg0KLSNkZWZpbmUgUHJvcGVydHlUYWdHcHNHcHNUaW1lICAgICAgICAgMHgwMDA3DQotI2RlZmluZSBQcm9wZXJ0eVRhZ0dwc0dwc1NhdGVsbGl0ZXMgICAweDAwMDgNCi0jZGVmaW5lIFByb3BlcnR5VGFnR3BzR3BzU3RhdHVzICAgICAgIDB4MDAwOQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdHcHNHcHNNZWFzdXJlTW9kZSAgMHgwMEENCi0jZGVmaW5lIFByb3BlcnR5VGFnR3BzR3BzRG9wICAgICAgICAgIDB4MDAwQiAgLy8gTWVhc3VyZW1lbnQgcHJlY2lzaW9uDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0dwc1NwZWVkUmVmICAgICAgICAweDAwMEMNCi0jZGVmaW5lIFByb3BlcnR5VGFnR3BzU3BlZWQgICAgICAgICAgIDB4MDAwRA0KLSNkZWZpbmUgUHJvcGVydHlUYWdHcHNUcmFja1JlZiAgICAgICAgMHgwMDBFDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0dwc1RyYWNrICAgICAgICAgICAweDAwMEYNCi0jZGVmaW5lIFByb3BlcnR5VGFnR3BzSW1nRGlyUmVmICAgICAgIDB4MDAxMA0KLSNkZWZpbmUgUHJvcGVydHlUYWdHcHNJbWdEaXIgICAgICAgICAgMHgwMDExDQotI2RlZmluZSBQcm9wZXJ0eVRhZ0dwc01hcERhdHVtICAgICAgICAweDAwMTINCi0jZGVmaW5lIFByb3BlcnR5VGFnR3BzRGVzdExhdFJlZiAgICAgIDB4MDAxMw0KLSNkZWZpbmUgUHJvcGVydHlUYWdHcHNEZXN0TGF0ICAgICAgICAgMHgwMDE0DQotI2RlZmluZSBQcm9wZXJ0eVRhZ0dwc0Rlc3RMb25nUmVmICAgICAweDAwMTUNCi0jZGVmaW5lIFByb3BlcnR5VGFnR3BzRGVzdExvbmcgICAgICAgIDB4MDAxNg0KLSNkZWZpbmUgUHJvcGVydHlUYWdHcHNEZXN0QmVhclJlZiAgICAgMHgwMDE3DQotI2RlZmluZSBQcm9wZXJ0eVRhZ0dwc0Rlc3RCZWFyICAgICAgICAweDAwMTgNCi0jZGVmaW5lIFByb3BlcnR5VGFnR3BzRGVzdERpc3RSZWYgICAgIDB4MDAxOQ0KLSNkZWZpbmUgUHJvcGVydHlUYWdHcHNEZXN0RGlzdCAgICAgICAgMHgwMDFBDQotDQotI2VuZGlmDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKiAKKyogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDAgIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbgorKgorKiBNb2R1bGUgTmFtZToKKyoKKyogICBHZGlwbHVzSW1hZ2luZy5oCisqCisqIEFic3RyYWN0OgorKgorKiAgIEdVSURzIGRlZmluZWQgYW5kIHVzZWQgYnkgdGhlIGltYWdpbmcgbGlicmFyeQorKgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfR0RJUExVU0lNQUdJTkdfSAorI2RlZmluZSBfR0RJUExVU0lNQUdJTkdfSAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW1hZ2UgZmlsZSBmb3JtYXQgaWRlbnRpZmllcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RFRklORV9HVUlEKEltYWdlRm9ybWF0VW5kZWZpbmVkLCAweGI5NmIzY2E5LDB4MDcyOCwweDExZDMsMHg5ZCwweDdiLDB4MDAsMHgwMCwweGY4LDB4MWUsMHhmMywweDJlKTsKK0RFRklORV9HVUlEKEltYWdlRm9ybWF0TWVtb3J5Qk1QLCAweGI5NmIzY2FhLDB4MDcyOCwweDExZDMsMHg5ZCwweDdiLDB4MDAsMHgwMCwweGY4LDB4MWUsMHhmMywweDJlKTsKK0RFRklORV9HVUlEKEltYWdlRm9ybWF0Qk1QLCAweGI5NmIzY2FiLDB4MDcyOCwweDExZDMsMHg5ZCwweDdiLDB4MDAsMHgwMCwweGY4LDB4MWUsMHhmMywweDJlKTsKK0RFRklORV9HVUlEKEltYWdlRm9ybWF0RU1GLCAweGI5NmIzY2FjLDB4MDcyOCwweDExZDMsMHg5ZCwweDdiLDB4MDAsMHgwMCwweGY4LDB4MWUsMHhmMywweDJlKTsKK0RFRklORV9HVUlEKEltYWdlRm9ybWF0V01GLCAweGI5NmIzY2FkLDB4MDcyOCwweDExZDMsMHg5ZCwweDdiLDB4MDAsMHgwMCwweGY4LDB4MWUsMHhmMywweDJlKTsKK0RFRklORV9HVUlEKEltYWdlRm9ybWF0SlBFRywgMHhiOTZiM2NhZSwweDA3MjgsMHgxMWQzLDB4OWQsMHg3YiwweDAwLDB4MDAsMHhmOCwweDFlLDB4ZjMsMHgyZSk7CitERUZJTkVfR1VJRChJbWFnZUZvcm1hdFBORywgMHhiOTZiM2NhZiwweDA3MjgsMHgxMWQzLDB4OWQsMHg3YiwweDAwLDB4MDAsMHhmOCwweDFlLDB4ZjMsMHgyZSk7CitERUZJTkVfR1VJRChJbWFnZUZvcm1hdEdJRiwgMHhiOTZiM2NiMCwweDA3MjgsMHgxMWQzLDB4OWQsMHg3YiwweDAwLDB4MDAsMHhmOCwweDFlLDB4ZjMsMHgyZSk7CitERUZJTkVfR1VJRChJbWFnZUZvcm1hdFRJRkYsIDB4Yjk2YjNjYjEsMHgwNzI4LDB4MTFkMywweDlkLDB4N2IsMHgwMCwweDAwLDB4ZjgsMHgxZSwweGYzLDB4MmUpOworREVGSU5FX0dVSUQoSW1hZ2VGb3JtYXRFWElGLCAweGI5NmIzY2IyLDB4MDcyOCwweDExZDMsMHg5ZCwweDdiLDB4MDAsMHgwMCwweGY4LDB4MWUsMHhmMywweDJlKTsKKyNpZm5kZWYgRENSX1VTRV9ORVdfMTQwODU1CitERUZJTkVfR1VJRChJbWFnZUZvcm1hdFBob3RvQ0QsIDB4Yjk2YjNjYjMsMHgwNzI4LDB4MTFkMywweDlkLDB4N2IsMHgwMCwweDAwLDB4ZjgsMHgxZSwweGYzLDB4MmUpOworREVGSU5FX0dVSUQoSW1hZ2VGb3JtYXRGbGFzaFBJWCwgMHhiOTZiM2NiNCwweDA3MjgsMHgxMWQzLDB4OWQsMHg3YiwweDAwLDB4MDAsMHhmOCwweDFlLDB4ZjMsMHgyZSk7CisjZW5kaWYKK0RFRklORV9HVUlEKEltYWdlRm9ybWF0SWNvbiwgMHhiOTZiM2NiNSwweDA3MjgsMHgxMWQzLDB4OWQsMHg3YiwweDAwLDB4MDAsMHhmOCwweDFlLDB4ZjMsMHgyZSk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQcmVkZWZpbmVkIG11bHRpLWZyYW1lIGRpbWVuc2lvbiBJRHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RFRklORV9HVUlEKEZyYW1lRGltZW5zaW9uVGltZSwgMHg2YWVkYmQ2ZCwweDNmYjUsMHg0MThhLDB4ODMsMHhhNiwweDdmLDB4NDUsMHgyMiwweDlkLDB4YzgsMHg3Mik7CitERUZJTkVfR1VJRChGcmFtZURpbWVuc2lvblJlc29sdXRpb24sIDB4ODQyMzZmN2IsMHgzYmQzLDB4NDI4ZiwweDhkLDB4YWIsMHg0ZSwweGExLDB4NDMsMHg5YywweGEzLDB4MTUpOworREVGSU5FX0dVSUQoRnJhbWVEaW1lbnNpb25QYWdlLCAweDc0NjJkYzg2LDB4NjE4MCwweDRjN2UsMHg4ZSwweDNmLDB4ZWUsMHg3MywweDMzLDB4YTcsMHhhNCwweDgzKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFByb3BlcnR5IHNldHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RFRklORV9HVUlEKEZvcm1hdElESW1hZ2VJbmZvcm1hdGlvbiwgMHhlNTgzNmNiZSwweDVlZWYsMHg0ZjFkLDB4YWMsMHhkZSwweGFlLDB4NGMsMHg0MywweGI2LDB4MDgsMHhjZSk7CitERUZJTkVfR1VJRChGb3JtYXRJREpwZWdBcHBIZWFkZXJzLCAweDFjNGFmZGNkLDB4NjE3NywweDQzY2YsMHhhYiwweGM3LDB4NWYsMHg1MSwweGFmLDB4MzksMHhlZSwweDg1KTsKKworI2lmbmRlZiBEQ1JfVVNFX05FV18xNDA4NTUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEZWNvZGVyIHBhcmFtZXRlciBzZXRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorREVGSU5FX0dVSUQoRGVjb2RlclRyYW5zQ29sb3IsIDB4YjdhOThjOGYsMHhkY2U3LDB4NDU3ZCwweGJmLDB4YTUsMHhjZSwweGE3LDB4MWIsMHhkMSwweDRkLDB4ZDYpOworREVGSU5FX0dVSUQoRGVjb2RlclRyYW5zUmFuZ2UsIDB4YWJlZWQxODksMHhkOTg4LDB4NGQwMywweGI0LDB4MjUsMHg1NywweDEwLDB4NTUsMHhjNywweDZhLDB4ZDEpOworREVGSU5FX0dVSUQoRGVjb2Rlck91dHB1dENoYW5uZWwsIDB4MmZmOGY1MWUsMHg3MjRkLDB4NDVmZSwweDg2LDB4Y2UsMHgxNywweDc3LDB4YTAsMHg1NiwweGRhLDB4NjApOworREVGSU5FX0dVSUQoRGVjb2Rlckljb25SZXMsIDB4NWM2NTZlZWMsMHhlOTRmLDB4NDViYSwweGE2LDB4ZjYsMHgxMCwweDYyLDB4ZTgsMHg1ZiwweDRhLDB4N2YpOworI2VuZGlmCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFbmNvZGVyIHBhcmFtZXRlciBzZXRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitERUZJTkVfR1VJRChFbmNvZGVyQ29tcHJlc3Npb24sIDB4ZTA5ZDczOWQsMHhjY2Q0LDB4NDRlZSwweDhlLDB4YmEsMHgzZiwweGJmLDB4OGIsMHhlNCwweGZjLDB4NTgpOworREVGSU5FX0dVSUQoRW5jb2RlckNvbG9yRGVwdGgsIDB4NjYwODcwNTUsMHhhZDY2LDB4NGM3YywweDlhLDB4MTgsMHgzOCwweGEyLDB4MzEsMHgwYiwweDgzLDB4MzcpOworREVGSU5FX0dVSUQoRW5jb2RlclNjYW5NZXRob2QsIDB4M2E0ZTI2NjEsMHgzMTA5LDB4NGU1NiwweDg1LDB4MzYsMHg0MiwweGMxLDB4NTYsMHhlNywweGRjLDB4ZmEpOworREVGSU5FX0dVSUQoRW5jb2RlclZlcnNpb24sIDB4MjRkMThjNzYsMHg4MTRhLDB4NDFhNCwweGJmLDB4NTMsMHgxYywweDIxLDB4OWMsMHhjYywweGY3LDB4OTcpOworREVGSU5FX0dVSUQoRW5jb2RlclJlbmRlck1ldGhvZCwgMHg2ZDQyYzUzYSwweDIyOWEsMHg0ODI1LDB4OGIsMHhiNywweDVjLDB4OTksMHhlMiwweGI5LDB4YTgsMHhiOCk7CitERUZJTkVfR1VJRChFbmNvZGVyUXVhbGl0eSwgMHgxZDViZTRiNSwweGZhNGEsMHg0NTJkLDB4OWMsMHhkZCwweDVkLDB4YjMsMHg1MSwweDA1LDB4ZTcsMHhlYik7CitERUZJTkVfR1VJRChFbmNvZGVyVHJhbnNmb3JtYXRpb24sMHg4ZDBlYjJkMSwweGE1OGUsMHg0ZWE4LDB4YWEsMHgxNCwweDEwLDB4ODAsMHg3NCwweGI3LDB4YjYsMHhmOSk7CitERUZJTkVfR1VJRChFbmNvZGVyTHVtaW5hbmNlVGFibGUsMHhlZGIzM2JjZSwweDAyNjYsMHg0YTc3LDB4YjksMHgwNCwweDI3LDB4MjEsMHg2MCwweDk5LDB4ZTcsMHgxNyk7CitERUZJTkVfR1VJRChFbmNvZGVyQ2hyb21pbmFuY2VUYWJsZSwweGYyZTQ1NWRjLDB4MDliMywweDQzMTYsMHg4MiwweDYwLDB4NjcsMHg2YSwweGRhLDB4MzIsMHg0OCwweDFjKTsKK0RFRklORV9HVUlEKEVuY29kZXJTYXZlRmxhZywweDI5MjI2NmZjLDB4YWM0MCwweDQ3YmYsMHg4YywgMHhmYywgMHhhOCwgMHg1YiwgMHg4OSwgMHhhNiwgMHg1NSwgMHhkZSk7CisKK0RFRklORV9HVUlEKENvZGVjSUltYWdlQnl0ZXMsMHgwMjVkMTgyMywweDZjN2QsMHg0NDdiLDB4YmIsIDB4ZGIsIDB4YTMsIDB4Y2IsIDB4YzMsIDB4ZGYsIDB4YTIsIDB4ZmMpOworCitNSURMX0lOVEVSRkFDRSgiMDI1RDE4MjMtNkM3RC00NDdCLUJCREItQTNDQkMzREZBMkZDIikKK0lJbWFnZUJ5dGVzIDogcHVibGljIElVbmtub3duCit7CitwdWJsaWM6CisgICAgLy8gUmV0dXJuIHRvdGFsIG51bWJlciBvZiBieXRlcyBpbiB0aGUgSVN0cmVhbQorCisgICAgU1RETUVUSE9EKENvdW50Qnl0ZXMpKAorICAgICAgICBPVVQgVUlOVCAqcGNiCisgICAgICAgICkgPSAwOworICAgIAorICAgIC8vIExvY2tzICJjYiIgYnl0ZXMsIHN0YXJ0aW5nIGZyb20gInVsT2Zmc2V0IiBpbiB0aGUgc3RyZWFtLCBhbmQgcmV0dXJucyB0aGUKKyAgICAvLyBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvY2tlZCBtZW1vcnkgY2h1bmsgaW4gInBwdkJ5dGVzIgorCisgICAgU1RETUVUSE9EKExvY2tCeXRlcykoCisgICAgICAgIElOIFVJTlQgY2IsCisgICAgICAgIElOIFVMT05HIHVsT2Zmc2V0LAorICAgICAgICBPVVQgY29uc3QgVk9JRCAqKiBwcHZCeXRlcworICAgICAgICApID0gMDsKKworICAgIC8vIFVubG9ja3MgImNiIiBieXRlcywgcG9pbnRlZCBieSAicHZCeXRlcyIsIHN0YXJ0aW5nIGZyb20gInVsT2Zmc2V0IiBpbiB0aGUKKyAgICAvLyBzdHJlYW0KKworICAgIFNURE1FVEhPRChVbmxvY2tCeXRlcykoCisgICAgICAgIElOIGNvbnN0IFZPSUQgKnB2Qnl0ZXMsCisgICAgICAgIElOIFVJTlQgY2IsCisgICAgICAgIElOIFVMT05HIHVsT2Zmc2V0CisgICAgICAgICkgPSAwOworfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW1hZ2VDb2RlY0luZm8gc3RydWN0dXJlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIEltYWdlQ29kZWNJbmZvCit7CitwdWJsaWM6ICAgICAgICAgIAorICAgIENMU0lEIENsc2lkOworICAgIEdVSUQgIEZvcm1hdElEOworICAgIGNvbnN0IFdDSEFSKiBDb2RlY05hbWU7CisgICAgY29uc3QgV0NIQVIqIERsbE5hbWU7CisgICAgY29uc3QgV0NIQVIqIEZvcm1hdERlc2NyaXB0aW9uOworICAgIGNvbnN0IFdDSEFSKiBGaWxlbmFtZUV4dGVuc2lvbjsKKyAgICBjb25zdCBXQ0hBUiogTWltZVR5cGU7CisgICAgRFdPUkQgRmxhZ3M7CisgICAgRFdPUkQgVmVyc2lvbjsKKyAgICBEV09SRCBTaWdDb3VudDsKKyAgICBEV09SRCBTaWdTaXplOworICAgIGNvbnN0IEJZVEUqIFNpZ1BhdHRlcm47CisgICAgY29uc3QgQllURSogU2lnTWFzazsKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEluZm9ybWF0aW9uIGZsYWdzIGFib3V0IGltYWdlIGNvZGVjcworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlbnVtIEltYWdlQ29kZWNGbGFncworeworICAgIEltYWdlQ29kZWNGbGFnc0VuY29kZXIgICAgICAgICAgICA9IDB4MDAwMDAwMDEsCisgICAgSW1hZ2VDb2RlY0ZsYWdzRGVjb2RlciAgICAgICAgICAgID0gMHgwMDAwMDAwMiwKKyAgICBJbWFnZUNvZGVjRmxhZ3NTdXBwb3J0Qml0bWFwICAgICAgPSAweDAwMDAwMDA0LAorICAgIEltYWdlQ29kZWNGbGFnc1N1cHBvcnRWZWN0b3IgICAgICA9IDB4MDAwMDAwMDgsCisgICAgSW1hZ2VDb2RlY0ZsYWdzU2Vla2FibGVFbmNvZGUgICAgID0gMHgwMDAwMDAxMCwKKyAgICBJbWFnZUNvZGVjRmxhZ3NCbG9ja2luZ0RlY29kZSAgICAgPSAweDAwMDAwMDIwLAorCisgICAgSW1hZ2VDb2RlY0ZsYWdzQnVpbHRpbiAgICAgICAgICAgID0gMHgwMDAxMDAwMCwKKyAgICBJbWFnZUNvZGVjRmxhZ3NTeXN0ZW0gICAgICAgICAgICAgPSAweDAwMDIwMDAwLAorICAgIEltYWdlQ29kZWNGbGFnc1VzZXIgICAgICAgICAgICAgICA9IDB4MDAwNDAwMDAKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBY2Nlc3MgbW9kZXMgdXNlZCB3aGVuIGNhbGxpbmcgSW1hZ2U6OkxvY2tCaXRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlbnVtIEltYWdlTG9ja01vZGUKK3sKKyAgICBJbWFnZUxvY2tNb2RlUmVhZCAgICAgICAgPSAweDAwMDEsCisgICAgSW1hZ2VMb2NrTW9kZVdyaXRlICAgICAgID0gMHgwMDAyLAorICAgIEltYWdlTG9ja01vZGVVc2VySW5wdXRCdWY9IDB4MDAwNAorfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEluZm9ybWF0aW9uIGFib3V0IGltYWdlIHBpeGVsIGRhdGEKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIEJpdG1hcERhdGEKK3sKK3B1YmxpYzoKKyAgICBVSU5UIFdpZHRoOworICAgIFVJTlQgSGVpZ2h0OworICAgIElOVCBTdHJpZGU7CisgICAgUGl4ZWxGb3JtYXQgUGl4ZWxGb3JtYXQ7CisgICAgVk9JRCogU2NhbjA7CisgICAgVUlOVF9QVFIgUmVzZXJ2ZWQ7Cit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW1hZ2UgZmxhZ3MKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VudW0gSW1hZ2VGbGFncworeworICAgIEltYWdlRmxhZ3NOb25lICAgICAgICAgICAgICAgID0gMCwKKworICAgIC8vIExvdy13b3JkOiBzaGFyZWQgd2l0aCBTSU5LRkxBR194CisKKyAgICBJbWFnZUZsYWdzU2NhbGFibGUgICAgICAgICAgICA9IDB4MDAwMSwKKyAgICBJbWFnZUZsYWdzSGFzQWxwaGEgICAgICAgICAgICA9IDB4MDAwMiwKKyAgICBJbWFnZUZsYWdzSGFzVHJhbnNsdWNlbnQgICAgICA9IDB4MDAwNCwKKyAgICBJbWFnZUZsYWdzUGFydGlhbGx5U2NhbGFibGUgICA9IDB4MDAwOCwKKworICAgIC8vIExvdy13b3JkOiBjb2xvciBzcGFjZSBkZWZpbml0aW9uCisKKyAgICBJbWFnZUZsYWdzQ29sb3JTcGFjZVJHQiAgICAgICA9IDB4MDAxMCwKKyAgICBJbWFnZUZsYWdzQ29sb3JTcGFjZUNNWUsgICAgICA9IDB4MDAyMCwKKyAgICBJbWFnZUZsYWdzQ29sb3JTcGFjZUdSQVkgICAgICA9IDB4MDA0MCwKKyAgICBJbWFnZUZsYWdzQ29sb3JTcGFjZVlDQkNSICAgICA9IDB4MDA4MCwKKyAgICBJbWFnZUZsYWdzQ29sb3JTcGFjZVlDQ0sgICAgICA9IDB4MDEwMCwKKyAKKyAgICAvLyBMb3ctd29yZDogaW1hZ2Ugc2l6ZSBpbmZvCisKKyAgICBJbWFnZUZsYWdzSGFzUmVhbERQSSAgICAgICAgICA9IDB4MTAwMCwKKyAgICBJbWFnZUZsYWdzSGFzUmVhbFBpeGVsU2l6ZSAgICA9IDB4MjAwMCwKKworICAgIC8vIEhpZ2gtd29yZAorCisgICAgSW1hZ2VGbGFnc1JlYWRPbmx5ICAgICAgICAgICAgPSAweDAwMDEwMDAwLAorICAgIEltYWdlRmxhZ3NDYWNoaW5nICAgICAgICAgICAgID0gMHgwMDAyMDAwMAorfTsKKworZW51bSBSb3RhdGVGbGlwVHlwZQoreworICAgIFJvdGF0ZU5vbmVGbGlwTm9uZSA9IDAsCisgICAgUm90YXRlOTBGbGlwTm9uZSAgID0gMSwKKyAgICBSb3RhdGUxODBGbGlwTm9uZSAgPSAyLAorICAgIFJvdGF0ZTI3MEZsaXBOb25lICA9IDMsCisKKyAgICBSb3RhdGVOb25lRmxpcFggICAgPSA0LAorICAgIFJvdGF0ZTkwRmxpcFggICAgICA9IDUsCisgICAgUm90YXRlMTgwRmxpcFggICAgID0gNiwKKyAgICBSb3RhdGUyNzBGbGlwWCAgICAgPSA3LAorCisgICAgUm90YXRlTm9uZUZsaXBZICAgID0gUm90YXRlMTgwRmxpcFgsCisgICAgUm90YXRlOTBGbGlwWSAgICAgID0gUm90YXRlMjcwRmxpcFgsCisgICAgUm90YXRlMTgwRmxpcFkgICAgID0gUm90YXRlTm9uZUZsaXBYLAorICAgIFJvdGF0ZTI3MEZsaXBZICAgICA9IFJvdGF0ZTkwRmxpcFgsCisKKyAgICBSb3RhdGVOb25lRmxpcFhZICAgPSBSb3RhdGUxODBGbGlwTm9uZSwKKyAgICBSb3RhdGU5MEZsaXBYWSAgICAgPSBSb3RhdGUyNzBGbGlwTm9uZSwKKyAgICBSb3RhdGUxODBGbGlwWFkgICAgPSBSb3RhdGVOb25lRmxpcE5vbmUsCisgICAgUm90YXRlMjcwRmxpcFhZICAgID0gUm90YXRlOTBGbGlwTm9uZQorfTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEVuY29kZXIgUGFyYW1ldGVyIHN0cnVjdHVyZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NsYXNzIEVuY29kZXJQYXJhbWV0ZXIKK3sKK3B1YmxpYzoKKyAgICBHVUlEICAgIEd1aWQ7ICAgICAgICAgICAgICAgLy8gR1VJRCBvZiB0aGUgcGFyYW1ldGVyCisgICAgVUxPTkcgICBOdW1iZXJPZlZhbHVlczsgICAgIC8vIE51bWJlciBvZiB0aGUgcGFyYW1ldGVyIHZhbHVlcworICAgIFVMT05HICAgVHlwZTsgICAgICAgICAgICAgICAvLyBWYWx1ZSB0eXBlLCBsaWtlIFZhbHVlVHlwZUxPTkcgIGV0Yy4KKyAgICBWT0lEKiAgIFZhbHVlOyAgICAgICAgICAgICAgLy8gQSBwb2ludGVyIHRvIHRoZSBwYXJhbWV0ZXIgdmFsdWVzCit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRW5jb2RlciBQYXJhbWV0ZXJzIHN0cnVjdHVyZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NsYXNzIEVuY29kZXJQYXJhbWV0ZXJzCit7CitwdWJsaWM6CisgICAgVUlOVCBDb3VudDsgICAgICAgICAgICAgICAgICAgICAgLy8gTnVtYmVyIG9mIHBhcmFtZXRlcnMgaW4gdGhpcyBzdHJ1Y3R1cmUKKyAgICBFbmNvZGVyUGFyYW1ldGVyIFBhcmFtZXRlclsxXTsgICAvLyBQYXJhbWV0ZXIgdmFsdWVzCit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUHJvcGVydHkgSXRlbQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2NsYXNzIFByb3BlcnR5SXRlbQoreworcHVibGljOgorICAgIFBST1BJRCAgaWQ7ICAgICAgICAgICAgICAgICAvLyBJRCBvZiB0aGlzIHByb3BlcnR5CisgICAgVUxPTkcgICBsZW5ndGg7ICAgICAgICAgICAgIC8vIExlbmd0aCBvZiB0aGUgcHJvcGVydHkgdmFsdWUsIGluIGJ5dGVzCisgICAgV09SRCAgICB0eXBlOyAgICAgICAgICAgICAgIC8vIFR5cGUgb2YgdGhlIHZhbHVlLCBhcyBvbmUgb2YgVEFHX1RZUEVfWFhYCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmluZWQgYWJvdmUKKyAgICBWT0lEKiAgIHZhbHVlOyAgICAgICAgICAgICAgLy8gcHJvcGVydHkgdmFsdWUKK307CisKKyNpZmRlZiBEQ1JfVVNFX05FV18xNDA4NTcKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbWFnZSBwcm9wZXJ0eSB0eXBlcyAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjZGVmaW5lIFByb3BlcnR5VGFnVHlwZUJ5dGUgICAgICAgIDEKKyNkZWZpbmUgUHJvcGVydHlUYWdUeXBlQVNDSUkgICAgICAgMgorI2RlZmluZSBQcm9wZXJ0eVRhZ1R5cGVTaG9ydCAgICAgICAzCisjZGVmaW5lIFByb3BlcnR5VGFnVHlwZUxvbmcgICAgICAgIDQKKyNkZWZpbmUgUHJvcGVydHlUYWdUeXBlUmF0aW9uYWwgICAgNQorI2RlZmluZSBQcm9wZXJ0eVRhZ1R5cGVVbmRlZmluZWQgICA3CisjZGVmaW5lIFByb3BlcnR5VGFnVHlwZVNMT05HICAgICAgIDkKKyNkZWZpbmUgUHJvcGVydHlUYWdUeXBlU1JhdGlvbmFsICAxMAorI2VuZGlmCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbWFnZSBwcm9wZXJ0eSBJRCB0YWdzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIFByb3BlcnR5VGFnRXhpZklGRCAgICAgICAgICAgICAweDg3NjkKKyNkZWZpbmUgUHJvcGVydHlUYWdHcHNJRkQgICAgICAgICAgICAgIDB4ODgyNQorCisjZGVmaW5lIFByb3BlcnR5VGFnTmV3U3ViZmlsZVR5cGUgICAgICAweDAwRkUKKyNkZWZpbmUgUHJvcGVydHlUYWdTdWJmaWxlVHlwZSAgICAgICAgIDB4MDBGRgorI2RlZmluZSBQcm9wZXJ0eVRhZ0ltYWdlV2lkdGggICAgICAgICAgMHgwMTAwCisjZGVmaW5lIFByb3BlcnR5VGFnSW1hZ2VIZWlnaHQgICAgICAgICAweDAxMDEKKyNkZWZpbmUgUHJvcGVydHlUYWdCaXRzUGVyU2FtcGxlICAgICAgIDB4MDEwMgorI2RlZmluZSBQcm9wZXJ0eVRhZ0NvbXByZXNzaW9uICAgICAgICAgMHgwMTAzCisjZGVmaW5lIFByb3BlcnR5VGFnUGhvdG9tZXRyaWNJbnRlcnAgICAweDAxMDYKKyNkZWZpbmUgUHJvcGVydHlUYWdUaHJlc2hIb2xkaW5nICAgICAgIDB4MDEwNworI2RlZmluZSBQcm9wZXJ0eVRhZ0NlbGxXaWR0aCAgICAgICAgICAgMHgwMTA4CisjZGVmaW5lIFByb3BlcnR5VGFnQ2VsbEhlaWdodCAgICAgICAgICAweDAxMDkKKyNkZWZpbmUgUHJvcGVydHlUYWdGaWxsT3JkZXIgICAgICAgICAgIDB4MDEwQQorI2RlZmluZSBQcm9wZXJ0eVRhZ0RvY3VtZW50TmFtZSAgICAgICAgMHgwMTBECisjZGVmaW5lIFByb3BlcnR5VGFnSW1hZ2VEZXNjcmlwdGlvbiAgICAweDAxMEUKKyNkZWZpbmUgUHJvcGVydHlUYWdFcXVpcE1ha2UgICAgICAgICAgIDB4MDEwRgorI2RlZmluZSBQcm9wZXJ0eVRhZ0VxdWlwTW9kZWwgICAgICAgICAgMHgwMTEwCisjZGVmaW5lIFByb3BlcnR5VGFnU3RyaXBPZmZzZXRzICAgICAgICAweDAxMTEKKyNkZWZpbmUgUHJvcGVydHlUYWdPcmllbnRhdGlvbiAgICAgICAgIDB4MDExMgorI2RlZmluZSBQcm9wZXJ0eVRhZ1NhbXBsZXNQZXJQaXhlbCAgICAgMHgwMTE1CisjZGVmaW5lIFByb3BlcnR5VGFnUm93c1BlclN0cmlwICAgICAgICAweDAxMTYKKyNkZWZpbmUgUHJvcGVydHlUYWdTdHJpcEJ5dGVzQ291bnQgICAgIDB4MDExNworI2RlZmluZSBQcm9wZXJ0eVRhZ01pblNhbXBsZVZhbHVlICAgICAgMHgwMTE4CisjZGVmaW5lIFByb3BlcnR5VGFnTWF4U2FtcGxlVmFsdWUgICAgICAweDAxMTkKKyNkZWZpbmUgUHJvcGVydHlUYWdYUmVzb2x1dGlvbiAgICAgICAgIDB4MDExQSAgIC8vIEltYWdlIHJlc29sdXRpb24gaW4gd2lkdGggZGlyZWN0aW9uCisjZGVmaW5lIFByb3BlcnR5VGFnWVJlc29sdXRpb24gICAgICAgICAweDAxMUIgICAvLyBJbWFnZSByZXNvbHV0aW9uIGluIGhlaWdodCBkaXJlY3Rpb24KKyNkZWZpbmUgUHJvcGVydHlUYWdQbGFuYXJDb25maWcgICAgICAgIDB4MDExQyAgIC8vIEltYWdlIGRhdGEgYXJyYW5nZW1lbnQKKyNkZWZpbmUgUHJvcGVydHlUYWdQYWdlTmFtZSAgICAgICAgICAgIDB4MDExRAorI2RlZmluZSBQcm9wZXJ0eVRhZ1hQb3NpdGlvbiAgICAgICAgICAgMHgwMTFFCisjZGVmaW5lIFByb3BlcnR5VGFnWVBvc2l0aW9uICAgICAgICAgICAweDAxMUYKKyNkZWZpbmUgUHJvcGVydHlUYWdGcmVlT2Zmc2V0ICAgICAgICAgIDB4MDEyMAorI2RlZmluZSBQcm9wZXJ0eVRhZ0ZyZWVCeXRlQ291bnRzICAgICAgMHgwMTIxCisjZGVmaW5lIFByb3BlcnR5VGFnR3JheVJlc3BvbnNlVW5pdCAgICAweDAxMjIKKyNkZWZpbmUgUHJvcGVydHlUYWdHcmF5UmVzcG9uc2VDdXJ2ZSAgIDB4MDEyMworI2RlZmluZSBQcm9wZXJ0eVRhZ1Q0T3B0aW9uICAgICAgICAgICAgMHgwMTI0CisjZGVmaW5lIFByb3BlcnR5VGFnVDZPcHRpb24gICAgICAgICAgICAweDAxMjUKKyNkZWZpbmUgUHJvcGVydHlUYWdSZXNvbHV0aW9uVW5pdCAgICAgIDB4MDEyOCAgIC8vIFVuaXQgb2YgWCBhbmQgWSByZXNvbHV0aW9uCisjZGVmaW5lIFByb3BlcnR5VGFnUGFnZU51bWJlciAgICAgICAgICAweDAxMjkKKyNkZWZpbmUgUHJvcGVydHlUYWdUcmFuc2ZlckZ1bmNpdGlvbiAgIDB4MDEyRAorI2RlZmluZSBQcm9wZXJ0eVRhZ1NvZnR3YXJlVXNlZCAgICAgICAgMHgwMTMxCisjZGVmaW5lIFByb3BlcnR5VGFnRGF0ZVRpbWUgICAgICAgICAgICAweDAxMzIKKyNkZWZpbmUgUHJvcGVydHlUYWdBcnRpc3QgICAgICAgICAgICAgIDB4MDEzQgorI2RlZmluZSBQcm9wZXJ0eVRhZ0hvc3RDb21wdXRlciAgICAgICAgMHgwMTNDCisjZGVmaW5lIFByb3BlcnR5VGFnUHJlZGljdG9yICAgICAgICAgICAweDAxM0QKKyNkZWZpbmUgUHJvcGVydHlUYWdXaGl0ZVBvaW50ICAgICAgICAgIDB4MDEzRQorI2RlZmluZSBQcm9wZXJ0eVRhZ1ByaW1hcnlDaHJvbWF0aWNpdGllcyAweDAxM0YKKyNkZWZpbmUgUHJvcGVydHlUYWdDb2xvck1hcCAgICAgICAgICAgIDB4MDE0MAorI2RlZmluZSBQcm9wZXJ0eVRhZ0hhbGZ0b25lSGludHMgICAgICAgMHgwMTQxCisjZGVmaW5lIFByb3BlcnR5VGFnVGlsZVdpZHRoICAgICAgICAgICAweDAxNDIKKyNkZWZpbmUgUHJvcGVydHlUYWdUaWxlTGVuZ3RoICAgICAgICAgIDB4MDE0MworI2RlZmluZSBQcm9wZXJ0eVRhZ1RpbGVPZmZzZXQgICAgICAgICAgMHgwMTQ0CisjZGVmaW5lIFByb3BlcnR5VGFnVGlsZUJ5dGVDb3VudHMgICAgICAweDAxNDUKKyNkZWZpbmUgUHJvcGVydHlUYWdJbmtTZXQgICAgICAgICAgICAgIDB4MDE0QworI2RlZmluZSBQcm9wZXJ0eVRhZ0lua05hbWVzICAgICAgICAgICAgMHgwMTRECisjZGVmaW5lIFByb3BlcnR5VGFnTnVtYmVyT2ZJbmtzICAgICAgICAweDAxNEUKKyNkZWZpbmUgUHJvcGVydHlUYWdEb3RSYW5nZSAgICAgICAgICAgIDB4MDE1MAorI2RlZmluZSBQcm9wZXJ0eVRhZ1RhcmdldFByaW50ZXIgICAgICAgMHgwMTUxCisjZGVmaW5lIFByb3BlcnR5VGFnRXh0cmFTYW1wbGVzICAgICAgICAweDAxNTIKKyNkZWZpbmUgUHJvcGVydHlUYWdTYW1wbGVGb3JtYXQgICAgICAgIDB4MDE1MworI2RlZmluZSBQcm9wZXJ0eVRhZ1NNaW5TYW1wbGVWYWx1ZSAgICAgMHgwMTU0CisjZGVmaW5lIFByb3BlcnR5VGFnU01heFNhbXBsZVZhbHVlICAgICAweDAxNTUKKyNkZWZpbmUgUHJvcGVydHlUYWdUcmFuc2ZlclJhbmdlICAgICAgIDB4MDE1NgorCisjZGVmaW5lIFByb3BlcnR5VGFnSlBFR1Byb2MgICAgICAgICAgICAweDAyMDAKKyNkZWZpbmUgUHJvcGVydHlUYWdKUEVHSW50ZXJGb3JtYXQgICAgIDB4MDIwMQorI2RlZmluZSBQcm9wZXJ0eVRhZ0pQRUdJbnRlckxlbmd0aCAgICAgMHgwMjAyCisjZGVmaW5lIFByb3BlcnR5VGFnSlBFR1Jlc3RhcnRJbnRlcnZhbCAweDAyMDMKKyNkZWZpbmUgUHJvcGVydHlUYWdKUEVHTG9zc2xlc3NQcmVkaWN0b3JzICAweDAyMDUKKyNkZWZpbmUgUHJvcGVydHlUYWdKUEVHUG9pbnRUcmFuc2Zvcm1zICAgICAweDAyMDYKKyNkZWZpbmUgUHJvcGVydHlUYWdKUEVHUVRhYmxlcyAgICAgICAgIDB4MDIwNworI2RlZmluZSBQcm9wZXJ0eVRhZ0pQRUdEQ1RhYmxlcyAgICAgICAgMHgwMjA4CisjZGVmaW5lIFByb3BlcnR5VGFnSlBFR0FDVGFibGVzICAgICAgICAweDAyMDkKKworI2RlZmluZSBQcm9wZXJ0eVRhZ1lDYkNyQ29lZmZpY2llbnRzICAgMHgwMjExCisjZGVmaW5lIFByb3BlcnR5VGFnWUNiQ3JTdWJzYW1wbGluZyAgICAweDAyMTIKKyNkZWZpbmUgUHJvcGVydHlUYWdZQ2JDclBvc2l0aW9uaW5nICAgIDB4MDIxMworI2RlZmluZSBQcm9wZXJ0eVRhZ1JFRkJsYWNrV2hpdGUgICAgICAgMHgwMjE0CisKKyNkZWZpbmUgUHJvcGVydHlUYWdJQ0NQcm9maWxlICAgICAgICAgIDB4ODc3MyAgIC8vIFRoaXMgVEFHIGlzIGRlZmluZWQgYnkgSUNDCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZW1iZWRkZWQgSUNDIGluIFRJRkYKKyNkZWZpbmUgUHJvcGVydHlUYWdHYW1tYSAgICAgICAgICAgICAgIDB4MDMwMQorI2RlZmluZSBQcm9wZXJ0eVRhZ0lDQ1Byb2ZpbGVEZXNjcmlwdG9yIDB4MDMwMgorI2RlZmluZSBQcm9wZXJ0eVRhZ1NSR0JSZW5kZXJpbmdJbnRlbnQgMHgwMzAzCisKKyNkZWZpbmUgUHJvcGVydHlUYWdJbWFnZVRpdGxlICAgICAgICAgIDB4MDMyMAorI2RlZmluZSBQcm9wZXJ0eVRhZ0NvcHlyaWdodCAgICAgICAgICAgMHg4Mjk4CisKKy8vIEV4dHJhIFRBR3MgKExpa2UgQWRvYmUgSW1hZ2UgSW5mb3JtYXRpb24gdGFncyBldGMuKQorCisjZGVmaW5lIFByb3BlcnR5VGFnUmVzb2x1dGlvblhVbml0ICAgICAgICAgICAweDUwMDEKKyNkZWZpbmUgUHJvcGVydHlUYWdSZXNvbHV0aW9uWVVuaXQgICAgICAgICAgIDB4NTAwMgorI2RlZmluZSBQcm9wZXJ0eVRhZ1Jlc29sdXRpb25YTGVuZ3RoVW5pdCAgICAgMHg1MDAzCisjZGVmaW5lIFByb3BlcnR5VGFnUmVzb2x1dGlvbllMZW5ndGhVbml0ICAgICAweDUwMDQKKyNkZWZpbmUgUHJvcGVydHlUYWdQcmludEZsYWdzICAgICAgICAgICAgICAgIDB4NTAwNQorI2RlZmluZSBQcm9wZXJ0eVRhZ1ByaW50RmxhZ3NWZXJzaW9uICAgICAgICAgMHg1MDA2CisjZGVmaW5lIFByb3BlcnR5VGFnUHJpbnRGbGFnc0Nyb3AgICAgICAgICAgICAweDUwMDcKKyNkZWZpbmUgUHJvcGVydHlUYWdQcmludEZsYWdzQmxlZWRXaWR0aCAgICAgIDB4NTAwOAorI2RlZmluZSBQcm9wZXJ0eVRhZ1ByaW50RmxhZ3NCbGVlZFdpZHRoU2NhbGUgMHg1MDA5CisjZGVmaW5lIFByb3BlcnR5VGFnSGFsZnRvbmVMUEkgICAgICAgICAgICAgICAweDUwMEEKKyNkZWZpbmUgUHJvcGVydHlUYWdIYWxmdG9uZUxQSVVuaXQgICAgICAgICAgIDB4NTAwQgorI2RlZmluZSBQcm9wZXJ0eVRhZ0hhbGZ0b25lRGVncmVlICAgICAgICAgICAgMHg1MDBDCisjZGVmaW5lIFByb3BlcnR5VGFnSGFsZnRvbmVTaGFwZSAgICAgICAgICAgICAweDUwMEQKKyNkZWZpbmUgUHJvcGVydHlUYWdIYWxmdG9uZU1pc2MgICAgICAgICAgICAgIDB4NTAwRQorI2RlZmluZSBQcm9wZXJ0eVRhZ0hhbGZ0b25lU2NyZWVuICAgICAgICAgICAgMHg1MDBGCisjZGVmaW5lIFByb3BlcnR5VGFnSlBFR1F1YWxpdHkgICAgICAgICAgICAgICAweDUwMTAKKyNkZWZpbmUgUHJvcGVydHlUYWdHcmlkU2l6ZSAgICAgICAgICAgICAgICAgIDB4NTAxMQorI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbEZvcm1hdCAgICAgICAgICAgMHg1MDEyICAvLyAxID0gSlBFRywgMCA9IFJBVyBSR0IKKyNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxXaWR0aCAgICAgICAgICAgIDB4NTAxMworI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbEhlaWdodCAgICAgICAgICAgMHg1MDE0CisjZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsQ29sb3JEZXB0aCAgICAgICAweDUwMTUKKyNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxQbGFuZXMgICAgICAgICAgIDB4NTAxNgorI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbFJhd0J5dGVzICAgICAgICAgMHg1MDE3CisjZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsU2l6ZSAgICAgICAgICAgICAweDUwMTgKKyNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxDb21wcmVzc2VkU2l6ZSAgIDB4NTAxOQorI2RlZmluZSBQcm9wZXJ0eVRhZ0NvbG9yVHJhbnNmZXJGdW5jdGlvbiAgICAgMHg1MDFBCisjZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsRGF0YSAgICAgICAgICAgICAweDUwMUIvLyBSQVcgdGh1bWJuYWlsIGJpdHMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEpQRUcgZm9ybWF0IG9yIFJHQiBmb3JtYXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlcGVuZHMgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb3BlcnR5VGFnVGh1bWJuYWlsRm9ybWF0CisKKy8vIFRodW1ibmFpbCByZWxhdGVkIFRBR3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbEltYWdlV2lkdGggICAgICAgMHg1MDIwICAvLyBUaHVtYm5haWwgd2lkdGgKKyNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxJbWFnZUhlaWdodCAgICAgIDB4NTAyMSAgLy8gVGh1bWJuYWlsIGhlaWdodAorI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbEJpdHNQZXJTYW1wbGUgICAgMHg1MDIyICAvLyBOdW1iZXIgb2YgYml0cyBwZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29tcG9uZW50CisjZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsQ29tcHJlc3Npb24gICAgICAweDUwMjMgIC8vIENvbXByZXNzaW9uIFNjaGVtZQorI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbFBob3RvbWV0cmljSW50ZXJwIDB4NTAyNCAvLyBQaXhlbCBjb21wb3NpdGlvbgorI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbEltYWdlRGVzY3JpcHRpb24gMHg1MDI1ICAvLyBJbWFnZSBUaWxlCisjZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsRXF1aXBNYWtlICAgICAgICAweDUwMjYgIC8vIE1hbnVmYWN0dXJlciBvZiBJbWFnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnB1dCBlcXVpcG1lbnQKKyNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxFcXVpcE1vZGVsICAgICAgIDB4NTAyNyAgLy8gTW9kZWwgb2YgSW1hZ2UgaW5wdXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXF1aXBtZW50CisjZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsU3RyaXBPZmZzZXRzICAgICAweDUwMjggIC8vIEltYWdlIGRhdGEgbG9jYXRpb24KKyNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxPcmllbnRhdGlvbiAgICAgIDB4NTAyOSAgLy8gT3JpZW50YXRpb24gb2YgaW1hZ2UKKyNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxTYW1wbGVzUGVyUGl4ZWwgIDB4NTAyQSAgLy8gTnVtYmVyIG9mIGNvbXBvbmVudHMKKyNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxSb3dzUGVyU3RyaXAgICAgIDB4NTAyQiAgLy8gTnVtYmVyIG9mIHJvd3MgcGVyIHN0cmlwCisjZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsU3RyaXBCeXRlc0NvdW50ICAweDUwMkMgIC8vIEJ5dGVzIHBlciBjb21wcmVzc2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0cmlwCisjZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsUmVzb2x1dGlvblggICAgICAweDUwMkQgIC8vIFJlc29sdXRpb24gaW4gd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlyZWN0aW9uCisjZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsUmVzb2x1dGlvblkgICAgICAweDUwMkUgIC8vIFJlc29sdXRpb24gaW4gaGVpZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpcmVjdGlvbgorI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbFBsYW5hckNvbmZpZyAgICAgMHg1MDJGICAvLyBJbWFnZSBkYXRhIGFycmFuZ2VtZW50CisjZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsUmVzb2x1dGlvblVuaXQgICAweDUwMzAgIC8vIFVuaXQgb2YgWCBhbmQgWQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXNvbHV0aW9uCisjZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsVHJhbnNmZXJGdW5jdGlvbiAweDUwMzEgIC8vIFRyYW5zZmVyIGZ1bmN0aW9uCisjZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsU29mdHdhcmVVc2VkICAgICAweDUwMzIgIC8vIFNvZnR3YXJlIHVzZWQKKyNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxEYXRlVGltZSAgICAgICAgIDB4NTAzMyAgLy8gRmlsZSBjaGFuZ2UgZGF0ZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGltZQorI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbEFydGlzdCAgICAgICAgICAgMHg1MDM0ICAvLyBQZXJzb24gd2hvIGNyZWF0ZWQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGltYWdlCisjZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsV2hpdGVQb2ludCAgICAgICAweDUwMzUgIC8vIFdoaXRlIHBvaW50IGNocm9tYXRpY2l0eQorI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbFByaW1hcnlDaHJvbWF0aWNpdGllcyAweDUwMzYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENocm9tYXRpY2l0aWVzIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByaW1hcmllcworI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbFlDYkNyQ29lZmZpY2llbnRzIDB4NTAzNyAvLyBDb2xvciBzcGFjZSB0cmFuc2Zvcm1hLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aW9uIGNvZWZmaWNpZW50cworI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbFlDYkNyU3Vic2FtcGxpbmcgMHg1MDM4ICAvLyBTdWJzYW1wbGluZyByYXRpbyBvZiBZCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIEMKKyNkZWZpbmUgUHJvcGVydHlUYWdUaHVtYm5haWxZQ2JDclBvc2l0aW9uaW5nIDB4NTAzOSAgLy8gWSBhbmQgQyBwb3NpdGlvbgorI2RlZmluZSBQcm9wZXJ0eVRhZ1RodW1ibmFpbFJlZkJsYWNrV2hpdGUgICAgMHg1MDNBICAvLyBQYWlyIG9mIGJsYWNrIGFuZCB3aGl0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWZlcmVuY2UgdmFsdWVzCisjZGVmaW5lIFByb3BlcnR5VGFnVGh1bWJuYWlsQ29weVJpZ2h0ICAgICAgICAweDUwM0IgIC8vIENvcHlSaWdodCBob2xkZXIKKworI2RlZmluZSBQcm9wZXJ0eVRhZ0x1bWluYW5jZVRhYmxlICAgICAgICAgICAgMHg1MDkwCisjZGVmaW5lIFByb3BlcnR5VGFnQ2hyb21pbmFuY2VUYWJsZSAgICAgICAgICAweDUwOTEKKworI2RlZmluZSBQcm9wZXJ0eVRhZ0ZyYW1lRGVsYXkgICAgICAgICAgICAgICAgMHg1MTAwCisjZGVmaW5lIFByb3BlcnR5VGFnTG9vcENvdW50ICAgICAgICAgICAgICAgICAweDUxMDEKKworI2RlZmluZSBQcm9wZXJ0eVRhZ1BpeGVsVW5pdCAgICAgICAgIDB4NTExMCAgLy8gVW5pdCBzcGVjaWZpZXIgZm9yIHBpeGVsL3VuaXQKKyNkZWZpbmUgUHJvcGVydHlUYWdQaXhlbFBlclVuaXRYICAgICAweDUxMTEgIC8vIFBpeGVscyBwZXIgdW5pdCBpbiBYCisjZGVmaW5lIFByb3BlcnR5VGFnUGl4ZWxQZXJVbml0WSAgICAgMHg1MTEyICAvLyBQaXhlbHMgcGVyIHVuaXQgaW4gWQorI2RlZmluZSBQcm9wZXJ0eVRhZ1BhbGV0dGVIaXN0b2dyYW0gIDB4NTExMyAgLy8gUGFsZXR0ZSBoaXN0b2dyYW0KKworLy8gRVhJRiBzcGVjaWZpYyB0YWcKKworI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZFeHBvc3VyZVRpbWUgIDB4ODI5QQorI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZGTnVtYmVyICAgICAgIDB4ODI5RAorCisjZGVmaW5lIFByb3BlcnR5VGFnRXhpZkV4cG9zdXJlUHJvZyAgMHg4ODIyCisjZGVmaW5lIFByb3BlcnR5VGFnRXhpZlNwZWN0cmFsU2Vuc2UgMHg4ODI0CisjZGVmaW5lIFByb3BlcnR5VGFnRXhpZklTT1NwZWVkICAgICAgMHg4ODI3CisjZGVmaW5lIFByb3BlcnR5VGFnRXhpZk9FQ0YgICAgICAgICAgMHg4ODI4CisKKyNkZWZpbmUgUHJvcGVydHlUYWdFeGlmVmVyICAgICAgICAgICAgMHg5MDAwCisjZGVmaW5lIFByb3BlcnR5VGFnRXhpZkRUT3JpZyAgICAgICAgIDB4OTAwMyAvLyBEYXRlICYgdGltZSBvZiBvcmlnaW5hbAorI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZEVERpZ2l0aXplZCAgICAweDkwMDQgLy8gRGF0ZSAmIHRpbWUgb2YgZGlnaXRhbCBkYXRhIGdlbmVyYXRpb24KKworI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZDb21wQ29uZmlnICAgICAweDkxMDEKKyNkZWZpbmUgUHJvcGVydHlUYWdFeGlmQ29tcEJQUCAgICAgICAgMHg5MTAyCisKKyNkZWZpbmUgUHJvcGVydHlUYWdFeGlmU2h1dHRlclNwZWVkICAgMHg5MjAxCisjZGVmaW5lIFByb3BlcnR5VGFnRXhpZkFwZXJ0dXJlICAgICAgIDB4OTIwMgorI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZCcmlnaHRuZXNzICAgICAweDkyMDMKKyNkZWZpbmUgUHJvcGVydHlUYWdFeGlmRXhwb3N1cmVCaWFzICAgMHg5MjA0CisjZGVmaW5lIFByb3BlcnR5VGFnRXhpZk1heEFwZXJ0dXJlICAgIDB4OTIwNQorI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZTdWJqZWN0RGlzdCAgICAweDkyMDYKKyNkZWZpbmUgUHJvcGVydHlUYWdFeGlmTWV0ZXJpbmdNb2RlICAgMHg5MjA3CisjZGVmaW5lIFByb3BlcnR5VGFnRXhpZkxpZ2h0U291cmNlICAgIDB4OTIwOAorI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZGbGFzaCAgICAgICAgICAweDkyMDkKKyNkZWZpbmUgUHJvcGVydHlUYWdFeGlmRm9jYWxMZW5ndGggICAgMHg5MjBBCisjZGVmaW5lIFByb3BlcnR5VGFnRXhpZk1ha2VyTm90ZSAgICAgIDB4OTI3QworI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZVc2VyQ29tbWVudCAgICAweDkyODYKKyNkZWZpbmUgUHJvcGVydHlUYWdFeGlmRFRTdWJzZWMgICAgICAgMHg5MjkwICAvLyBEYXRlICYgVGltZSBzdWJzZWNvbmRzCisjZGVmaW5lIFByb3BlcnR5VGFnRXhpZkRUT3JpZ1NTICAgICAgIDB4OTI5MSAgLy8gRGF0ZSAmIFRpbWUgb3JpZ2luYWwgc3Vic2Vjb25kcworI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZEVERpZ1NTICAgICAgICAweDkyOTIgIC8vIERhdGUgJiBUSW1lIGRpZ2l0aXplZCBzdWJzZWNvbmRzCisKKyNkZWZpbmUgUHJvcGVydHlUYWdFeGlmRlBYVmVyICAgICAgICAgMHhBMDAwCisjZGVmaW5lIFByb3BlcnR5VGFnRXhpZkNvbG9yU3BhY2UgICAgIDB4QTAwMQorI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZQaXhYRGltICAgICAgICAweEEwMDIKKyNkZWZpbmUgUHJvcGVydHlUYWdFeGlmUGl4WURpbSAgICAgICAgMHhBMDAzCisjZGVmaW5lIFByb3BlcnR5VGFnRXhpZlJlbGF0ZWRXYXYgICAgIDB4QTAwNCAgLy8gcmVsYXRlZCBzb3VuZCBmaWxlCisjZGVmaW5lIFByb3BlcnR5VGFnRXhpZkludGVyb3AgICAgICAgIDB4QTAwNQorI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZGbGFzaEVuZXJneSAgICAweEEyMEIKKyNkZWZpbmUgUHJvcGVydHlUYWdFeGlmU3BhdGlhbEZSICAgICAgMHhBMjBDICAvLyBTcGF0aWFsIEZyZXF1ZW5jeSBSZXNwb25zZQorI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZGb2NhbFhSZXMgICAgICAweEEyMEUgIC8vIEZvY2FsIFBsYW5lIFggUmVzb2x1dGlvbgorI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZGb2NhbFlSZXMgICAgICAweEEyMEYgIC8vIEZvY2FsIFBsYW5lIFkgUmVzb2x1dGlvbgorI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZGb2NhbFJlc1VuaXQgICAweEEyMTAgIC8vIEZvY2FsIFBsYW5lIFJlc29sdXRpb24gVW5pdAorI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZTdWJqZWN0TG9jICAgICAweEEyMTQKKyNkZWZpbmUgUHJvcGVydHlUYWdFeGlmRXhwb3N1cmVJbmRleCAgMHhBMjE1CisjZGVmaW5lIFByb3BlcnR5VGFnRXhpZlNlbnNpbmdNZXRob2QgIDB4QTIxNworI2RlZmluZSBQcm9wZXJ0eVRhZ0V4aWZGaWxlU291cmNlICAgICAweEEzMDAKKyNkZWZpbmUgUHJvcGVydHlUYWdFeGlmU2NlbmVUeXBlICAgICAgMHhBMzAxCisjZGVmaW5lIFByb3BlcnR5VGFnRXhpZkNmYVBhdHRlcm4gICAgIDB4QTMwMgorCisjZGVmaW5lIFByb3BlcnR5VGFnR3BzVmVyICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBQcm9wZXJ0eVRhZ0dwc0xhdGl0dWRlUmVmICAgICAweDAwMDEKKyNkZWZpbmUgUHJvcGVydHlUYWdHcHNMYXRpdHVkZSAgICAgICAgMHgwMDAyCisjZGVmaW5lIFByb3BlcnR5VGFnR3BzTG9uZ2l0dWRlUmVmICAgIDB4MDAwMworI2RlZmluZSBQcm9wZXJ0eVRhZ0dwc0xvbmdpdHVkZSAgICAgICAweDAwMDQKKyNkZWZpbmUgUHJvcGVydHlUYWdHcHNBbHRpdHVkZVJlZiAgICAgMHgwMDA1CisjZGVmaW5lIFByb3BlcnR5VGFnR3BzQWx0aXR1ZGUgICAgICAgIDB4MDAwNgorI2RlZmluZSBQcm9wZXJ0eVRhZ0dwc0dwc1RpbWUgICAgICAgICAweDAwMDcKKyNkZWZpbmUgUHJvcGVydHlUYWdHcHNHcHNTYXRlbGxpdGVzICAgMHgwMDA4CisjZGVmaW5lIFByb3BlcnR5VGFnR3BzR3BzU3RhdHVzICAgICAgIDB4MDAwOQorI2RlZmluZSBQcm9wZXJ0eVRhZ0dwc0dwc01lYXN1cmVNb2RlICAweDAwQQorI2RlZmluZSBQcm9wZXJ0eVRhZ0dwc0dwc0RvcCAgICAgICAgICAweDAwMEIgIC8vIE1lYXN1cmVtZW50IHByZWNpc2lvbgorI2RlZmluZSBQcm9wZXJ0eVRhZ0dwc1NwZWVkUmVmICAgICAgICAweDAwMEMKKyNkZWZpbmUgUHJvcGVydHlUYWdHcHNTcGVlZCAgICAgICAgICAgMHgwMDBECisjZGVmaW5lIFByb3BlcnR5VGFnR3BzVHJhY2tSZWYgICAgICAgIDB4MDAwRQorI2RlZmluZSBQcm9wZXJ0eVRhZ0dwc1RyYWNrICAgICAgICAgICAweDAwMEYKKyNkZWZpbmUgUHJvcGVydHlUYWdHcHNJbWdEaXJSZWYgICAgICAgMHgwMDEwCisjZGVmaW5lIFByb3BlcnR5VGFnR3BzSW1nRGlyICAgICAgICAgIDB4MDAxMQorI2RlZmluZSBQcm9wZXJ0eVRhZ0dwc01hcERhdHVtICAgICAgICAweDAwMTIKKyNkZWZpbmUgUHJvcGVydHlUYWdHcHNEZXN0TGF0UmVmICAgICAgMHgwMDEzCisjZGVmaW5lIFByb3BlcnR5VGFnR3BzRGVzdExhdCAgICAgICAgIDB4MDAxNAorI2RlZmluZSBQcm9wZXJ0eVRhZ0dwc0Rlc3RMb25nUmVmICAgICAweDAwMTUKKyNkZWZpbmUgUHJvcGVydHlUYWdHcHNEZXN0TG9uZyAgICAgICAgMHgwMDE2CisjZGVmaW5lIFByb3BlcnR5VGFnR3BzRGVzdEJlYXJSZWYgICAgIDB4MDAxNworI2RlZmluZSBQcm9wZXJ0eVRhZ0dwc0Rlc3RCZWFyICAgICAgICAweDAwMTgKKyNkZWZpbmUgUHJvcGVydHlUYWdHcHNEZXN0RGlzdFJlZiAgICAgMHgwMDE5CisjZGVmaW5lIFByb3BlcnR5VGFnR3BzRGVzdERpc3QgICAgICAgIDB4MDAxQQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNMaW5lQ2Fwcy5oIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0xpbmVDYXBzLmgKaW5kZXggZThhMjk1MS4uNWFjODgwZiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0xpbmVDYXBzLmgKKysrIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c0xpbmVDYXBzLmgKQEAgLTEsMjUzICsxLDI1MyBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXA0KLSogDQotKiBDb3B5cmlnaHQgKGMpIDIwMDAsIE1pY3Jvc29mdCBDb3JwLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0qDQotKiBNb2R1bGUgTmFtZToNCi0qIA0KLSogICAgR2RpcGx1c0xpbmVDYXBzLmgNCi0qDQotKiBBYnN0cmFjdDoNCi0qDQotKiAgIEFQSXMgZm9yIEN1c3RvbSBMaW5lIENhcHMNCi0qDQotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLSNpZm5kZWYgX0dESVBMVVNMSU5FQ0FQU19IDQotI2RlZmluZSBfR0RJUExVU0xJTkVDQVBTX0gNCi0NCi1pbmxpbmUgDQotQ3VzdG9tTGluZUNhcDo6Q3VzdG9tTGluZUNhcCgNCi0gICAgSU4gY29uc3QgR3JhcGhpY3NQYXRoKiBmaWxsUGF0aCwNCi0gICAgSU4gY29uc3QgR3JhcGhpY3NQYXRoKiBzdHJva2VQYXRoLA0KLSAgICBJTiBMaW5lQ2FwIGJhc2VDYXAsDQotICAgIElOIFJFQUwgYmFzZUluc2V0DQotICAgICkNCi17DQotICAgIG5hdGl2ZUNhcCA9IE5VTEw7DQotICAgIEdwUGF0aCogbmF0aXZlRmlsbFBhdGggPSBOVUxMOw0KLSAgICBHcFBhdGgqIG5hdGl2ZVN0cm9rZVBhdGggPSBOVUxMOw0KLQ0KLSAgICBpZihmaWxsUGF0aCkNCi0gICAgICAgIG5hdGl2ZUZpbGxQYXRoID0gZmlsbFBhdGgtPm5hdGl2ZVBhdGg7DQotICAgIGlmKHN0cm9rZVBhdGgpDQotICAgICAgICBuYXRpdmVTdHJva2VQYXRoID0gc3Ryb2tlUGF0aC0+bmF0aXZlUGF0aDsNCi0NCi0gICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVDdXN0b21MaW5lQ2FwKA0KLSAgICAgICAgICAgICAgICAgICAgbmF0aXZlRmlsbFBhdGgsIG5hdGl2ZVN0cm9rZVBhdGgsDQotICAgICAgICAgICAgICAgICAgICBiYXNlQ2FwLCBiYXNlSW5zZXQsICZuYXRpdmVDYXApOw0KLX0NCi0NCi1pbmxpbmUgDQotQ3VzdG9tTGluZUNhcDo6Q3VzdG9tTGluZUNhcCgpDQotew0KLSAgICAvLyBUaGlzIGlzIHVzZWQgZm9yIGRlZmF1bHQgY29uc3RydWN0b3IgZm9yIHN1YmNsYXNzZXMuDQotICAgIC8vIFNvIGRvbid0IGNyZWF0ZSBhIG5hdGl2ZUNhcC4NCi0NCi0gICAgbmF0aXZlQ2FwID0gTlVMTDsNCi0gICAgbGFzdFJlc3VsdCA9IE9rOw0KLX0NCi0NCi1pbmxpbmUgDQotQ3VzdG9tTGluZUNhcDo6fkN1c3RvbUxpbmVDYXAoKQ0KLXsNCi0gICAgRGxsRXhwb3J0czo6R2RpcERlbGV0ZUN1c3RvbUxpbmVDYXAobmF0aXZlQ2FwKTsNCi19DQotDQotaW5saW5lIFN0YXR1cyANCi1DdXN0b21MaW5lQ2FwOjpTZXRTdHJva2VDYXBzKA0KLSAgICBJTiBMaW5lQ2FwIHN0YXJ0Q2FwLCANCi0gICAgSU4gTGluZUNhcCBlbmRDYXApDQotew0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRDdXN0b21MaW5lQ2FwU3Ryb2tlQ2FwcyhuYXRpdmVDYXAsDQotICAgICAgICAgICAgICAgIHN0YXJ0Q2FwLCBlbmRDYXApKTsNCi19DQotDQotaW5saW5lIFN0YXR1cyANCi1DdXN0b21MaW5lQ2FwOjpHZXRTdHJva2VDYXBzKA0KLSAgICBPVVQgTGluZUNhcCogc3RhcnRDYXAsIA0KLSAgICBPVVQgTGluZUNhcCogZW5kQ2FwKSBjb25zdA0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0Q3VzdG9tTGluZUNhcFN0cm9rZUNhcHMobmF0aXZlQ2FwLA0KLSAgICAgICAgICAgICAgICAgc3RhcnRDYXAsIGVuZENhcCkpOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzIA0KLUN1c3RvbUxpbmVDYXA6OlNldFN0cm9rZUpvaW4oDQotICAgIElOIExpbmVKb2luIGxpbmVKb2luKQ0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0Q3VzdG9tTGluZUNhcFN0cm9rZUpvaW4obmF0aXZlQ2FwLCBsaW5lSm9pbikpOw0KLX0NCi0NCi1pbmxpbmUgTGluZUpvaW4gDQotQ3VzdG9tTGluZUNhcDo6R2V0U3Ryb2tlSm9pbigpIGNvbnN0DQotew0KLSAgICBMaW5lSm9pbiBsaW5lSm9pbjsNCi0NCi0gICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRDdXN0b21MaW5lQ2FwU3Ryb2tlSm9pbihuYXRpdmVDYXAsICZsaW5lSm9pbikpOw0KLQ0KLSAgICByZXR1cm4gbGluZUpvaW47DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotQ3VzdG9tTGluZUNhcDo6U2V0QmFzZUNhcChJTiBMaW5lQ2FwIGJhc2VDYXApDQotew0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRDdXN0b21MaW5lQ2FwQmFzZUNhcChuYXRpdmVDYXAsIGJhc2VDYXApKTsNCi19DQotDQotaW5saW5lIExpbmVDYXAgDQotQ3VzdG9tTGluZUNhcDo6R2V0QmFzZUNhcCgpIGNvbnN0DQotew0KLSAgICBMaW5lQ2FwIGJhc2VDYXA7DQotICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0Q3VzdG9tTGluZUNhcEJhc2VDYXAobmF0aXZlQ2FwLCAmYmFzZUNhcCkpOw0KLQ0KLSAgICByZXR1cm4gYmFzZUNhcDsNCi19DQotDQotaW5saW5lIFN0YXR1cyANCi1DdXN0b21MaW5lQ2FwOjpTZXRCYXNlSW5zZXQoSU4gUkVBTCBpbnNldCkNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEN1c3RvbUxpbmVDYXBCYXNlSW5zZXQobmF0aXZlQ2FwLCBpbnNldCkpOw0KLX0NCi0NCi1pbmxpbmUgUkVBTCANCi1DdXN0b21MaW5lQ2FwOjpHZXRCYXNlSW5zZXQoKSBjb25zdA0KLXsNCi0gICAgUkVBTCBpbnNldDsNCi0gICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRDdXN0b21MaW5lQ2FwQmFzZUluc2V0KG5hdGl2ZUNhcCwgJmluc2V0KSk7DQotDQotICAgIHJldHVybiBpbnNldDsNCi19DQotDQotDQotaW5saW5lIFN0YXR1cyANCi1DdXN0b21MaW5lQ2FwOjpTZXRXaWR0aFNjYWxlKElOIFJFQUwgd2lkdGhTY2FsZSkNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEN1c3RvbUxpbmVDYXBXaWR0aFNjYWxlKG5hdGl2ZUNhcCwgd2lkdGhTY2FsZSkpOw0KLX0NCi0NCi1pbmxpbmUgUkVBTCANCi1DdXN0b21MaW5lQ2FwOjpHZXRXaWR0aFNjYWxlKCkgY29uc3QNCi17DQotICAgIFJFQUwgd2lkdGhTY2FsZTsNCi0gICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRDdXN0b21MaW5lQ2FwV2lkdGhTY2FsZShuYXRpdmVDYXAsICZ3aWR0aFNjYWxlKSk7DQotDQotICAgIHJldHVybiB3aWR0aFNjYWxlOw0KLX0NCi0NCi1pbmxpbmUgQ3VzdG9tTGluZUNhcCogDQotQ3VzdG9tTGluZUNhcDo6Q2xvbmUoKSBjb25zdA0KLXsNCi0gICAgR3BDdXN0b21MaW5lQ2FwICpuZXdOYXRpdmVMaW5lQ2FwID0gTlVMTDsNCi0gICAgDQotICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ2xvbmVDdXN0b21MaW5lQ2FwKG5hdGl2ZUNhcCwgJm5ld05hdGl2ZUxpbmVDYXApKTsNCi0NCi0gICAgaWYgKGxhc3RSZXN1bHQgPT0gT2spIA0KLSAgICB7DQotICAgICAgICBDdXN0b21MaW5lQ2FwICpuZXdMaW5lQ2FwID0gbmV3IEN1c3RvbUxpbmVDYXAobmV3TmF0aXZlTGluZUNhcCwgbGFzdFJlc3VsdCk7DQotICAgICAgICBpZiAobmV3TGluZUNhcCA9PSBOVUxMKSANCi0gICAgICAgIHsNCi0gICAgICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcERlbGV0ZUN1c3RvbUxpbmVDYXAobmV3TmF0aXZlTGluZUNhcCkpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcmV0dXJuIG5ld0xpbmVDYXA7DQotICAgIH0NCi0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLWNsYXNzIEFkanVzdGFibGVBcnJvd0NhcCA6IHB1YmxpYyBDdXN0b21MaW5lQ2FwDQotew0KLXB1YmxpYzoNCi0NCi0gICAgQWRqdXN0YWJsZUFycm93Q2FwKA0KLSAgICAgICAgSU4gUkVBTCBoZWlnaHQsDQotICAgICAgICBJTiBSRUFMIHdpZHRoLA0KLSAgICAgICAgSU4gQk9PTCBpc0ZpbGxlZCA9IFRSVUUNCi0gICAgICAgICkNCi0gICAgew0KLSAgICAgICAgR3BBZGp1c3RhYmxlQXJyb3dDYXAqIGNhcCA9IE5VTEw7DQotDQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZUFkanVzdGFibGVBcnJvd0NhcCgNCi0gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsIHdpZHRoLCBpc0ZpbGxlZCwgJmNhcCk7DQotICAgICAgICBTZXROYXRpdmVDYXAoY2FwKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0SGVpZ2h0KElOIFJFQUwgaGVpZ2h0KQ0KLSAgICB7DQotICAgICAgICBHcEFkanVzdGFibGVBcnJvd0NhcCogY2FwID0gKEdwQWRqdXN0YWJsZUFycm93Q2FwKikgbmF0aXZlQ2FwOw0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0QWRqdXN0YWJsZUFycm93Q2FwSGVpZ2h0KA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXAsIGhlaWdodCkpOw0KLSAgICB9DQotDQotICAgIFJFQUwgR2V0SGVpZ2h0KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgR3BBZGp1c3RhYmxlQXJyb3dDYXAqIGNhcCA9IChHcEFkanVzdGFibGVBcnJvd0NhcCopIG5hdGl2ZUNhcDsNCi0gICAgICAgIFJFQUwgaGVpZ2h0Ow0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRBZGp1c3RhYmxlQXJyb3dDYXBIZWlnaHQoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcCwgJmhlaWdodCkpOw0KLQ0KLSAgICAgICAgcmV0dXJuIGhlaWdodDsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0V2lkdGgoSU4gUkVBTCB3aWR0aCkNCi0gICAgew0KLSAgICAgICAgR3BBZGp1c3RhYmxlQXJyb3dDYXAqIGNhcCA9IChHcEFkanVzdGFibGVBcnJvd0NhcCopIG5hdGl2ZUNhcDsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEFkanVzdGFibGVBcnJvd0NhcFdpZHRoKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXAsIHdpZHRoKSk7DQotICAgIH0NCi0NCi0gICAgUkVBTCBHZXRXaWR0aCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIEdwQWRqdXN0YWJsZUFycm93Q2FwKiBjYXAgPSAoR3BBZGp1c3RhYmxlQXJyb3dDYXAqKSBuYXRpdmVDYXA7DQotICAgICAgICBSRUFMIHdpZHRoOw0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRBZGp1c3RhYmxlQXJyb3dDYXBXaWR0aCgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwLCAmd2lkdGgpKTsNCi0NCi0gICAgICAgIHJldHVybiB3aWR0aDsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0TWlkZGxlSW5zZXQoSU4gUkVBTCBtaWRkbGVJbnNldCkNCi0gICAgew0KLSAgICAgICAgR3BBZGp1c3RhYmxlQXJyb3dDYXAqIGNhcCA9IChHcEFkanVzdGFibGVBcnJvd0NhcCopIG5hdGl2ZUNhcDsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEFkanVzdGFibGVBcnJvd0NhcE1pZGRsZUluc2V0KA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXAsIG1pZGRsZUluc2V0KSk7DQotICAgIH0NCi0NCi0gICAgUkVBTCBHZXRNaWRkbGVJbnNldCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIEdwQWRqdXN0YWJsZUFycm93Q2FwKiBjYXAgPSAoR3BBZGp1c3RhYmxlQXJyb3dDYXAqKSBuYXRpdmVDYXA7DQotICAgICAgICBSRUFMIG1pZGRsZUluc2V0Ow0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRBZGp1c3RhYmxlQXJyb3dDYXBNaWRkbGVJbnNldCgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwLCAmbWlkZGxlSW5zZXQpKTsNCi0NCi0gICAgICAgIHJldHVybiBtaWRkbGVJbnNldDsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0RmlsbFN0YXRlKElOIEJPT0wgaXNGaWxsZWQpDQotICAgIHsNCi0gICAgICAgIEdwQWRqdXN0YWJsZUFycm93Q2FwKiBjYXAgPSAoR3BBZGp1c3RhYmxlQXJyb3dDYXAqKSBuYXRpdmVDYXA7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRBZGp1c3RhYmxlQXJyb3dDYXBGaWxsU3RhdGUoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcCwgaXNGaWxsZWQpKTsNCi0gICAgfQ0KLQ0KLSAgICBCT09MIElzRmlsbGVkKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgR3BBZGp1c3RhYmxlQXJyb3dDYXAqIGNhcCA9IChHcEFkanVzdGFibGVBcnJvd0NhcCopIG5hdGl2ZUNhcDsNCi0gICAgICAgIEJPT0wgaXNGaWxsZWQ7DQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEFkanVzdGFibGVBcnJvd0NhcEZpbGxTdGF0ZSgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwLCAmaXNGaWxsZWQpKTsNCi0NCi0gICAgICAgIHJldHVybiBpc0ZpbGxlZDsNCi0gICAgfQ0KLQ0KLSNpZmRlZiBEQ1JfVVNFX05FV18yNTA5MzINCi0NCi1wcml2YXRlOg0KLSAgICBBZGp1c3RhYmxlQXJyb3dDYXAoY29uc3QgQWRqdXN0YWJsZUFycm93Q2FwICYpOw0KLSAgICBBZGp1c3RhYmxlQXJyb3dDYXAmIG9wZXJhdG9yPShjb25zdCBBZGp1c3RhYmxlQXJyb3dDYXAgJik7DQotDQotI2VuZGlmDQotDQotfTsNCi0NCi0jZW5kaWYNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCisqIAorKiBDb3B5cmlnaHQgKGMpIDIwMDAsIE1pY3Jvc29mdCBDb3JwLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyogTW9kdWxlIE5hbWU6CisqIAorKiAgICBHZGlwbHVzTGluZUNhcHMuaAorKgorKiBBYnN0cmFjdDoKKyoKKyogICBBUElzIGZvciBDdXN0b20gTGluZSBDYXBzCisqCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0dESVBMVVNMSU5FQ0FQU19ICisjZGVmaW5lIF9HRElQTFVTTElORUNBUFNfSAorCitpbmxpbmUgCitDdXN0b21MaW5lQ2FwOjpDdXN0b21MaW5lQ2FwKAorICAgIElOIGNvbnN0IEdyYXBoaWNzUGF0aCogZmlsbFBhdGgsCisgICAgSU4gY29uc3QgR3JhcGhpY3NQYXRoKiBzdHJva2VQYXRoLAorICAgIElOIExpbmVDYXAgYmFzZUNhcCwKKyAgICBJTiBSRUFMIGJhc2VJbnNldAorICAgICkKK3sKKyAgICBuYXRpdmVDYXAgPSBOVUxMOworICAgIEdwUGF0aCogbmF0aXZlRmlsbFBhdGggPSBOVUxMOworICAgIEdwUGF0aCogbmF0aXZlU3Ryb2tlUGF0aCA9IE5VTEw7CisKKyAgICBpZihmaWxsUGF0aCkKKyAgICAgICAgbmF0aXZlRmlsbFBhdGggPSBmaWxsUGF0aC0+bmF0aXZlUGF0aDsKKyAgICBpZihzdHJva2VQYXRoKQorICAgICAgICBuYXRpdmVTdHJva2VQYXRoID0gc3Ryb2tlUGF0aC0+bmF0aXZlUGF0aDsKKworICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlQ3VzdG9tTGluZUNhcCgKKyAgICAgICAgICAgICAgICAgICAgbmF0aXZlRmlsbFBhdGgsIG5hdGl2ZVN0cm9rZVBhdGgsCisgICAgICAgICAgICAgICAgICAgIGJhc2VDYXAsIGJhc2VJbnNldCwgJm5hdGl2ZUNhcCk7Cit9CisKK2lubGluZSAKK0N1c3RvbUxpbmVDYXA6OkN1c3RvbUxpbmVDYXAoKQoreworICAgIC8vIFRoaXMgaXMgdXNlZCBmb3IgZGVmYXVsdCBjb25zdHJ1Y3RvciBmb3Igc3ViY2xhc3Nlcy4KKyAgICAvLyBTbyBkb24ndCBjcmVhdGUgYSBuYXRpdmVDYXAuCisKKyAgICBuYXRpdmVDYXAgPSBOVUxMOworICAgIGxhc3RSZXN1bHQgPSBPazsKK30KKworaW5saW5lIAorQ3VzdG9tTGluZUNhcDo6fkN1c3RvbUxpbmVDYXAoKQoreworICAgIERsbEV4cG9ydHM6OkdkaXBEZWxldGVDdXN0b21MaW5lQ2FwKG5hdGl2ZUNhcCk7Cit9CisKK2lubGluZSBTdGF0dXMgCitDdXN0b21MaW5lQ2FwOjpTZXRTdHJva2VDYXBzKAorICAgIElOIExpbmVDYXAgc3RhcnRDYXAsIAorICAgIElOIExpbmVDYXAgZW5kQ2FwKQoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEN1c3RvbUxpbmVDYXBTdHJva2VDYXBzKG5hdGl2ZUNhcCwKKyAgICAgICAgICAgICAgICBzdGFydENhcCwgZW5kQ2FwKSk7Cit9CisKK2lubGluZSBTdGF0dXMgCitDdXN0b21MaW5lQ2FwOjpHZXRTdHJva2VDYXBzKAorICAgIE9VVCBMaW5lQ2FwKiBzdGFydENhcCwgCisgICAgT1VUIExpbmVDYXAqIGVuZENhcCkgY29uc3QKK3sKKyAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRDdXN0b21MaW5lQ2FwU3Ryb2tlQ2FwcyhuYXRpdmVDYXAsCisgICAgICAgICAgICAgICAgIHN0YXJ0Q2FwLCBlbmRDYXApKTsKK30KKworaW5saW5lIFN0YXR1cyAKK0N1c3RvbUxpbmVDYXA6OlNldFN0cm9rZUpvaW4oCisgICAgSU4gTGluZUpvaW4gbGluZUpvaW4pCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0Q3VzdG9tTGluZUNhcFN0cm9rZUpvaW4obmF0aXZlQ2FwLCBsaW5lSm9pbikpOworfQorCitpbmxpbmUgTGluZUpvaW4gCitDdXN0b21MaW5lQ2FwOjpHZXRTdHJva2VKb2luKCkgY29uc3QKK3sKKyAgICBMaW5lSm9pbiBsaW5lSm9pbjsKKworICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0Q3VzdG9tTGluZUNhcFN0cm9rZUpvaW4obmF0aXZlQ2FwLCAmbGluZUpvaW4pKTsKKworICAgIHJldHVybiBsaW5lSm9pbjsKK30KKworaW5saW5lIFN0YXR1cyAKK0N1c3RvbUxpbmVDYXA6OlNldEJhc2VDYXAoSU4gTGluZUNhcCBiYXNlQ2FwKQoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEN1c3RvbUxpbmVDYXBCYXNlQ2FwKG5hdGl2ZUNhcCwgYmFzZUNhcCkpOworfQorCitpbmxpbmUgTGluZUNhcCAKK0N1c3RvbUxpbmVDYXA6OkdldEJhc2VDYXAoKSBjb25zdAoreworICAgIExpbmVDYXAgYmFzZUNhcDsKKyAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEN1c3RvbUxpbmVDYXBCYXNlQ2FwKG5hdGl2ZUNhcCwgJmJhc2VDYXApKTsKKworICAgIHJldHVybiBiYXNlQ2FwOworfQorCitpbmxpbmUgU3RhdHVzIAorQ3VzdG9tTGluZUNhcDo6U2V0QmFzZUluc2V0KElOIFJFQUwgaW5zZXQpCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0Q3VzdG9tTGluZUNhcEJhc2VJbnNldChuYXRpdmVDYXAsIGluc2V0KSk7Cit9CisKK2lubGluZSBSRUFMIAorQ3VzdG9tTGluZUNhcDo6R2V0QmFzZUluc2V0KCkgY29uc3QKK3sKKyAgICBSRUFMIGluc2V0OworICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0Q3VzdG9tTGluZUNhcEJhc2VJbnNldChuYXRpdmVDYXAsICZpbnNldCkpOworCisgICAgcmV0dXJuIGluc2V0OworfQorCisKK2lubGluZSBTdGF0dXMgCitDdXN0b21MaW5lQ2FwOjpTZXRXaWR0aFNjYWxlKElOIFJFQUwgd2lkdGhTY2FsZSkKK3sKKyAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRDdXN0b21MaW5lQ2FwV2lkdGhTY2FsZShuYXRpdmVDYXAsIHdpZHRoU2NhbGUpKTsKK30KKworaW5saW5lIFJFQUwgCitDdXN0b21MaW5lQ2FwOjpHZXRXaWR0aFNjYWxlKCkgY29uc3QKK3sKKyAgICBSRUFMIHdpZHRoU2NhbGU7CisgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRDdXN0b21MaW5lQ2FwV2lkdGhTY2FsZShuYXRpdmVDYXAsICZ3aWR0aFNjYWxlKSk7CisKKyAgICByZXR1cm4gd2lkdGhTY2FsZTsKK30KKworaW5saW5lIEN1c3RvbUxpbmVDYXAqIAorQ3VzdG9tTGluZUNhcDo6Q2xvbmUoKSBjb25zdAoreworICAgIEdwQ3VzdG9tTGluZUNhcCAqbmV3TmF0aXZlTGluZUNhcCA9IE5VTEw7CisgICAgCisgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDbG9uZUN1c3RvbUxpbmVDYXAobmF0aXZlQ2FwLCAmbmV3TmF0aXZlTGluZUNhcCkpOworCisgICAgaWYgKGxhc3RSZXN1bHQgPT0gT2spIAorICAgIHsKKyAgICAgICAgQ3VzdG9tTGluZUNhcCAqbmV3TGluZUNhcCA9IG5ldyBDdXN0b21MaW5lQ2FwKG5ld05hdGl2ZUxpbmVDYXAsIGxhc3RSZXN1bHQpOworICAgICAgICBpZiAobmV3TGluZUNhcCA9PSBOVUxMKSAKKyAgICAgICAgeworICAgICAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBEZWxldGVDdXN0b21MaW5lQ2FwKG5ld05hdGl2ZUxpbmVDYXApKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBuZXdMaW5lQ2FwOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCitjbGFzcyBBZGp1c3RhYmxlQXJyb3dDYXAgOiBwdWJsaWMgQ3VzdG9tTGluZUNhcAoreworcHVibGljOgorCisgICAgQWRqdXN0YWJsZUFycm93Q2FwKAorICAgICAgICBJTiBSRUFMIGhlaWdodCwKKyAgICAgICAgSU4gUkVBTCB3aWR0aCwKKyAgICAgICAgSU4gQk9PTCBpc0ZpbGxlZCA9IFRSVUUKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgR3BBZGp1c3RhYmxlQXJyb3dDYXAqIGNhcCA9IE5VTEw7CisKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVBZGp1c3RhYmxlQXJyb3dDYXAoCisgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsIHdpZHRoLCBpc0ZpbGxlZCwgJmNhcCk7CisgICAgICAgIFNldE5hdGl2ZUNhcChjYXApOworICAgIH0KKworICAgIFN0YXR1cyBTZXRIZWlnaHQoSU4gUkVBTCBoZWlnaHQpCisgICAgeworICAgICAgICBHcEFkanVzdGFibGVBcnJvd0NhcCogY2FwID0gKEdwQWRqdXN0YWJsZUFycm93Q2FwKikgbmF0aXZlQ2FwOworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRBZGp1c3RhYmxlQXJyb3dDYXBIZWlnaHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwLCBoZWlnaHQpKTsKKyAgICB9CisKKyAgICBSRUFMIEdldEhlaWdodCgpIGNvbnN0CisgICAgeworICAgICAgICBHcEFkanVzdGFibGVBcnJvd0NhcCogY2FwID0gKEdwQWRqdXN0YWJsZUFycm93Q2FwKikgbmF0aXZlQ2FwOworICAgICAgICBSRUFMIGhlaWdodDsKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRBZGp1c3RhYmxlQXJyb3dDYXBIZWlnaHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwLCAmaGVpZ2h0KSk7CisKKyAgICAgICAgcmV0dXJuIGhlaWdodDsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0V2lkdGgoSU4gUkVBTCB3aWR0aCkKKyAgICB7CisgICAgICAgIEdwQWRqdXN0YWJsZUFycm93Q2FwKiBjYXAgPSAoR3BBZGp1c3RhYmxlQXJyb3dDYXAqKSBuYXRpdmVDYXA7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEFkanVzdGFibGVBcnJvd0NhcFdpZHRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcCwgd2lkdGgpKTsKKyAgICB9CisKKyAgICBSRUFMIEdldFdpZHRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIEdwQWRqdXN0YWJsZUFycm93Q2FwKiBjYXAgPSAoR3BBZGp1c3RhYmxlQXJyb3dDYXAqKSBuYXRpdmVDYXA7CisgICAgICAgIFJFQUwgd2lkdGg7CisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0QWRqdXN0YWJsZUFycm93Q2FwV2lkdGgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwLCAmd2lkdGgpKTsKKworICAgICAgICByZXR1cm4gd2lkdGg7CisgICAgfQorCisgICAgU3RhdHVzIFNldE1pZGRsZUluc2V0KElOIFJFQUwgbWlkZGxlSW5zZXQpCisgICAgeworICAgICAgICBHcEFkanVzdGFibGVBcnJvd0NhcCogY2FwID0gKEdwQWRqdXN0YWJsZUFycm93Q2FwKikgbmF0aXZlQ2FwOworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRBZGp1c3RhYmxlQXJyb3dDYXBNaWRkbGVJbnNldCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXAsIG1pZGRsZUluc2V0KSk7CisgICAgfQorCisgICAgUkVBTCBHZXRNaWRkbGVJbnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBHcEFkanVzdGFibGVBcnJvd0NhcCogY2FwID0gKEdwQWRqdXN0YWJsZUFycm93Q2FwKikgbmF0aXZlQ2FwOworICAgICAgICBSRUFMIG1pZGRsZUluc2V0OworICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEFkanVzdGFibGVBcnJvd0NhcE1pZGRsZUluc2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcCwgJm1pZGRsZUluc2V0KSk7CisKKyAgICAgICAgcmV0dXJuIG1pZGRsZUluc2V0OworICAgIH0KKworICAgIFN0YXR1cyBTZXRGaWxsU3RhdGUoSU4gQk9PTCBpc0ZpbGxlZCkKKyAgICB7CisgICAgICAgIEdwQWRqdXN0YWJsZUFycm93Q2FwKiBjYXAgPSAoR3BBZGp1c3RhYmxlQXJyb3dDYXAqKSBuYXRpdmVDYXA7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEFkanVzdGFibGVBcnJvd0NhcEZpbGxTdGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXAsIGlzRmlsbGVkKSk7CisgICAgfQorCisgICAgQk9PTCBJc0ZpbGxlZCgpIGNvbnN0CisgICAgeworICAgICAgICBHcEFkanVzdGFibGVBcnJvd0NhcCogY2FwID0gKEdwQWRqdXN0YWJsZUFycm93Q2FwKikgbmF0aXZlQ2FwOworICAgICAgICBCT09MIGlzRmlsbGVkOworICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEFkanVzdGFibGVBcnJvd0NhcEZpbGxTdGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXAsICZpc0ZpbGxlZCkpOworCisgICAgICAgIHJldHVybiBpc0ZpbGxlZDsKKyAgICB9CisKKyNpZmRlZiBEQ1JfVVNFX05FV18yNTA5MzIKKworcHJpdmF0ZToKKyAgICBBZGp1c3RhYmxlQXJyb3dDYXAoY29uc3QgQWRqdXN0YWJsZUFycm93Q2FwICYpOworICAgIEFkanVzdGFibGVBcnJvd0NhcCYgb3BlcmF0b3I9KGNvbnN0IEFkanVzdGFibGVBcnJvd0NhcCAmKTsKKworI2VuZGlmCisKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c01hdHJpeC5oIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c01hdHJpeC5oCmluZGV4IDdmYTNkZjguLjEzMzhkOGMgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNNYXRyaXguaAorKysgYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzTWF0cml4LmgKQEAgLTEsMzA5ICsxLDMwOSBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXA0KLSogDQotKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwgTWljcm9zb2Z0IENvcnAuICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSoNCi0qIE1vZHVsZSBOYW1lOg0KLSoNCi0qICAgR2RpcGx1c01hdHJpeC5oDQotKg0KLSogQWJzdHJhY3Q6DQotKg0KLSogICBHREkrIE1hdHJpeCBjbGFzcw0KLSoNCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotY2xhc3MgTWF0cml4IDogcHVibGljIEdkaXBsdXNCYXNlDQotew0KLXB1YmxpYzoNCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzOw0KLSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NQYXRoOw0KLSAgICBmcmllbmQgY2xhc3MgVGV4dHVyZUJydXNoOw0KLSAgICBmcmllbmQgY2xhc3MgTGluZWFyR3JhZGllbnRCcnVzaDsNCi0gICAgZnJpZW5kIGNsYXNzIFBhdGhHcmFkaWVudEJydXNoOw0KLSAgICBmcmllbmQgY2xhc3MgUGVuOw0KLSAgICBmcmllbmQgY2xhc3MgUmVnaW9uOw0KLSAgICANCi0gICAgLy8gRGVmYXVsdCBjb25zdHJ1Y3RvciAtIHNldCB0byBpZGVudGl0eSBtYXRyaXgNCi0NCi0gICAgTWF0cml4KCkNCi0gICAgew0KLSAgICAgICAgR3BNYXRyaXggKm1hdHJpeCA9IE5VTEw7DQotDQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZU1hdHJpeCgmbWF0cml4KTsNCi0gICAgDQotICAgICAgICBTZXROYXRpdmVNYXRyaXgobWF0cml4KTsNCi0gICAgfQ0KLQ0KLSAgICBNYXRyaXgoSU4gUkVBTCBtMTEsIA0KLSAgICAgICAgICAgSU4gUkVBTCBtMTIsDQotICAgICAgICAgICBJTiBSRUFMIG0yMSwgDQotICAgICAgICAgICBJTiBSRUFMIG0yMiwNCi0gICAgICAgICAgIElOIFJFQUwgZHgsIA0KLSAgICAgICAgICAgSU4gUkVBTCBkeSkNCi0gICAgew0KLSAgICAgICAgR3BNYXRyaXggKm1hdHJpeCA9IE5VTEw7DQotDQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZU1hdHJpeDIobTExLCBtMTIsIG0yMSwgbTIyLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeCwgZHksICZtYXRyaXgpOw0KLSAgICANCi0gICAgICAgIFNldE5hdGl2ZU1hdHJpeChtYXRyaXgpOw0KLSAgICB9DQotICAgIA0KLSAgICBNYXRyaXgoSU4gY29uc3QgUmVjdEYmIHJlY3QsIA0KLSAgICAgICAgICAgSU4gY29uc3QgUG9pbnRGKiBkc3RwbGcpDQotICAgIHsNCi0gICAgICAgIEdwTWF0cml4ICptYXRyaXggPSBOVUxMOw0KLQ0KLSAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVNYXRyaXgzKCZyZWN0LCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RwbGcsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1hdHJpeCk7DQotDQotICAgICAgICBTZXROYXRpdmVNYXRyaXgobWF0cml4KTsNCi0gICAgfQ0KLQ0KLSAgICBNYXRyaXgoSU4gY29uc3QgUmVjdCYgcmVjdCwgDQotICAgICAgICAgICBJTiBjb25zdCBQb2ludCogZHN0cGxnKQ0KLSAgICB7DQotICAgICAgICBHcE1hdHJpeCAqbWF0cml4ID0gTlVMTDsNCi0NCi0gICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlTWF0cml4M0koJnJlY3QsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RwbGcsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtYXRyaXgpOw0KLQ0KLSAgICAgICAgU2V0TmF0aXZlTWF0cml4KG1hdHJpeCk7DQotICAgIH0NCi0NCi0gICAgfk1hdHJpeCgpDQotICAgIHsNCi0gICAgICAgIERsbEV4cG9ydHM6OkdkaXBEZWxldGVNYXRyaXgobmF0aXZlTWF0cml4KTsNCi0gICAgfQ0KLQ0KLSAgICBNYXRyaXggKkNsb25lKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgR3BNYXRyaXggKmNsb25lTWF0cml4ID0gTlVMTDsNCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ2xvbmVNYXRyaXgobmF0aXZlTWF0cml4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNsb25lTWF0cml4KSk7DQotDQotICAgICAgICBpZiAobGFzdFJlc3VsdCAhPSBPaykNCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0NCi0gICAgICAgIHJldHVybiBuZXcgTWF0cml4KGNsb25lTWF0cml4KTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgR2V0RWxlbWVudHMoT1VUIFJFQUwgKm0pIGNvbnN0IA0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRNYXRyaXhFbGVtZW50cyhuYXRpdmVNYXRyaXgsIG0pKTsNCi0gICAgfQ0KLSAgICANCi0gICAgU3RhdHVzIFNldEVsZW1lbnRzKElOIFJFQUwgbTExLCANCi0gICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgbTEyLCANCi0gICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgbTIxLCANCi0gICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgbTIyLCANCi0gICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgZHgsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBkeSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0TWF0cml4RWxlbWVudHMobmF0aXZlTWF0cml4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtMTEsIG0xMiwgbTIxLCBtMjIsIGR4LCBkeSkpOw0KLSAgICB9DQotDQotICAgIFJFQUwgT2Zmc2V0WCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIFJFQUwgZWxlbWVudHNbNl07DQotDQotICAgICAgICBpZiAoR2V0RWxlbWVudHMoJmVsZW1lbnRzWzBdKSA9PSBPaykNCi0gICAgICAgICAgICByZXR1cm4gZWxlbWVudHNbNF07DQotICAgICAgICBlbHNlIA0KLSAgICAgICAgICAgIHJldHVybiAwLjBmOw0KLSAgICB9DQotDQotICAgIFJFQUwgT2Zmc2V0WSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgUkVBTCBlbGVtZW50c1s2XTsNCi0NCi0gICAgICAgaWYgKEdldEVsZW1lbnRzKCZlbGVtZW50c1swXSkgPT0gT2spDQotICAgICAgICAgICByZXR1cm4gZWxlbWVudHNbNV07DQotICAgICAgIGVsc2UgDQotICAgICAgICAgICByZXR1cm4gMC4wZjsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgUmVzZXQoKQ0KLSAgICB7DQotICAgICAgICAvLyBzZXQgaWRlbnRpdHkgbWF0cml4IGVsZW1lbnRzIA0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0TWF0cml4RWxlbWVudHMobmF0aXZlTWF0cml4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMCwgMC4wLCAwLjAsIDEuMCwgMC4wLCAwLjApKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgTXVsdGlwbHkoSU4gY29uc3QgTWF0cml4ICptYXRyaXgsIA0KLSAgICAgICAgICAgICAgICAgICAgSU4gTWF0cml4T3JkZXIgb3JkZXIgPSBNYXRyaXhPcmRlclByZXBlbmQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcE11bHRpcGx5TWF0cml4KG5hdGl2ZU1hdHJpeCwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT5uYXRpdmVNYXRyaXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXIpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgVHJhbnNsYXRlKElOIFJFQUwgb2Zmc2V0WCwgDQotICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBvZmZzZXRZLCANCi0gICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwVHJhbnNsYXRlTWF0cml4KG5hdGl2ZU1hdHJpeCwgb2Zmc2V0WCwgb2Zmc2V0WSwgb3JkZXIpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2NhbGUoSU4gUkVBTCBzY2FsZVgsIA0KLSAgICAgICAgICAgICAgICAgSU4gUkVBTCBzY2FsZVksIA0KLSAgICAgICAgICAgICAgICAgSU4gTWF0cml4T3JkZXIgb3JkZXIgPSBNYXRyaXhPcmRlclByZXBlbmQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNjYWxlTWF0cml4KG5hdGl2ZU1hdHJpeCwgc2NhbGVYLCBzY2FsZVksIG9yZGVyKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFJvdGF0ZShJTiBSRUFMIGFuZ2xlLCANCi0gICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUm90YXRlTWF0cml4KG5hdGl2ZU1hdHJpeCwgYW5nbGUsIG9yZGVyKSk7DQotICAgIH0NCi0gICAgDQotICAgIFN0YXR1cyBSb3RhdGVBdChJTiBSRUFMIGFuZ2xlLCANCi0gICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50RiYgY2VudGVyLCANCi0gICAgICAgICAgICAgICAgICAgIElOIE1hdHJpeE9yZGVyIG9yZGVyID0gTWF0cml4T3JkZXJQcmVwZW5kKQ0KLSAgICB7DQotICAgICAgICBpZihvcmRlciA9PSBNYXRyaXhPcmRlclByZXBlbmQpDQotICAgICAgICB7DQotICAgICAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBUcmFuc2xhdGVNYXRyaXgobmF0aXZlTWF0cml4LCBjZW50ZXIuWCwgY2VudGVyLlksIG9yZGVyKSk7DQotICAgICAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBSb3RhdGVNYXRyaXgobmF0aXZlTWF0cml4LCBhbmdsZSwgb3JkZXIpKTsNCi0gICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBUcmFuc2xhdGVNYXRyaXgobmF0aXZlTWF0cml4LCAtIGNlbnRlci5YLCAtIGNlbnRlci5ZLCBvcmRlcikpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwVHJhbnNsYXRlTWF0cml4KG5hdGl2ZU1hdHJpeCwgLSBjZW50ZXIuWCwgLSBjZW50ZXIuWSwgb3JkZXIpKTsNCi0gICAgICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFJvdGF0ZU1hdHJpeChuYXRpdmVNYXRyaXgsIGFuZ2xlLCBvcmRlcikpOw0KLSAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFRyYW5zbGF0ZU1hdHJpeChuYXRpdmVNYXRyaXgsIGNlbnRlci5YLCBjZW50ZXIuWSwgb3JkZXIpKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2hlYXIoSU4gUkVBTCBzaGVhclgsIA0KLSAgICAgICAgICAgICAgICAgSU4gUkVBTCBzaGVhclksDQotICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2hlYXJNYXRyaXgobmF0aXZlTWF0cml4LCBzaGVhclgsIHNoZWFyWSwgb3JkZXIpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgSW52ZXJ0KCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSW52ZXJ0TWF0cml4KG5hdGl2ZU1hdHJpeCkpOw0KLSAgICB9DQotDQotICAgIC8vIGZsb2F0IHZlcnNpb24NCi0gICAgU3RhdHVzIFRyYW5zZm9ybVBvaW50cyhJTiBPVVQgUG9pbnRGKiBwdHMsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCA9IDEpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFRyYW5zZm9ybU1hdHJpeFBvaW50cyhuYXRpdmVNYXRyaXgsIHB0cywgY291bnQpKTsNCi0gICAgfQ0KLSAgICANCi0gICAgU3RhdHVzIFRyYW5zZm9ybVBvaW50cyhJTiBPVVQgUG9pbnQqIHB0cywgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50ID0gMSkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwVHJhbnNmb3JtTWF0cml4UG9pbnRzSShuYXRpdmVNYXRyaXgsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHMsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBUcmFuc2Zvcm1WZWN0b3JzKElOIE9VVCBQb2ludEYqIHB0cywgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCA9IDEpIGNvbnN0DQotICAgIHsgDQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBWZWN0b3JUcmFuc2Zvcm1NYXRyaXhQb2ludHMobmF0aXZlTWF0cml4LCBwdHMsIGNvdW50KSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFRyYW5zZm9ybVZlY3RvcnMoSU4gT1VUIFBvaW50KiBwdHMsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQgPSAxKSBjb25zdA0KLSAgICB7IA0KLSAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBWZWN0b3JUcmFuc2Zvcm1NYXRyaXhQb2ludHNJKG5hdGl2ZU1hdHJpeCwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHMsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsNCi0gICAgfQ0KLSAgICANCi0gICAgQk9PTCBJc0ludmVydGlibGUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBCT09MIHJlc3VsdCA9IEZBTFNFOw0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBJc01hdHJpeEludmVydGlibGUobmF0aXZlTWF0cml4LCAmcmVzdWx0KSk7DQotICAgIA0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsNCi0gICAgfQ0KLQ0KLSAgICBCT09MIElzSWRlbnRpdHkoKSBjb25zdA0KLSAgICB7DQotICAgICAgIEJPT0wgcmVzdWx0ID0gRkFMU0U7DQotDQotICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSXNNYXRyaXhJZGVudGl0eShuYXRpdmVNYXRyaXgsICZyZXN1bHQpKTsNCi0gICAgDQotICAgICAgIHJldHVybiByZXN1bHQ7DQotICAgIH0NCi0NCi0gICAgQk9PTCBFcXVhbHMoSU4gY29uc3QgTWF0cml4ICptYXRyaXgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgQk9PTCByZXN1bHQgPSBGQUxTRTsNCi0NCi0gICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBJc01hdHJpeEVxdWFsKG5hdGl2ZU1hdHJpeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT5uYXRpdmVNYXRyaXgsICZyZXN1bHQpKTsNCi0gICANCi0gICAgICAgcmV0dXJuIHJlc3VsdDsNCi0gICAgfQ0KLSAgICANCi0gICAgU3RhdHVzIEdldExhc3RTdGF0dXMoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBTdGF0dXMgbGFzdFN0YXR1cyA9IGxhc3RSZXN1bHQ7DQotICAgICAgICBsYXN0UmVzdWx0ID0gT2s7DQotIA0KLSAgICAgICAgcmV0dXJuIGxhc3RTdGF0dXM7DQotICAgIH0NCi0NCi1wcm90ZWN0ZWQ6DQotDQotI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMg0KLQ0KLXByaXZhdGU6DQotICAgIE1hdHJpeChjb25zdCBNYXRyaXggJik7DQotICAgIE1hdHJpeCYgb3BlcmF0b3I9KGNvbnN0IE1hdHJpeCAmKTsNCi1wcm90ZWN0ZWQ6DQotDQotI2Vsc2UNCi0NCi0gICAgTWF0cml4KGNvbnN0IE1hdHJpeCYgbWF0cml4KQ0KLSAgICB7DQotICAgICAgICBtYXRyaXg7DQotICAgICAgICBTZXRTdGF0dXMoTm90SW1wbGVtZW50ZWQpOw0KLSAgICAgICAgU2V0TmF0aXZlTWF0cml4KE5VTEwpOw0KLSAgICB9DQotDQotICAgIE1hdHJpeCYgb3BlcmF0b3I9KGNvbnN0IE1hdHJpeCYgbWF0cml4KQ0KLSAgICB7DQotICAgICAgICBtYXRyaXg7DQotICAgICAgICBTZXRTdGF0dXMoTm90SW1wbGVtZW50ZWQpOw0KLSAgICAgICAgcmV0dXJuICp0aGlzOw0KLSAgICB9DQotDQotI2VuZGlmDQotDQotICAgIE1hdHJpeChHcE1hdHJpeCAqbmF0aXZlTWF0cml4KQ0KLSAgICB7DQotICAgICAgICBsYXN0UmVzdWx0ID0gT2s7DQotICAgICAgICBTZXROYXRpdmVNYXRyaXgobmF0aXZlTWF0cml4KTsNCi0gICAgfQ0KLSAgICANCi0gICAgVk9JRCBTZXROYXRpdmVNYXRyaXgoR3BNYXRyaXggKm5hdGl2ZU1hdHJpeCkNCi0gICAgew0KLSAgICAgICAgdGhpcy0+bmF0aXZlTWF0cml4ID0gbmF0aXZlTWF0cml4Ow0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTZXRTdGF0dXMoU3RhdHVzIHN0YXR1cykgY29uc3QNCi0gICAgew0KLSAgICAgICAgaWYgKHN0YXR1cyAhPSBPaykNCi0gICAgICAgICAgICByZXR1cm4gKGxhc3RSZXN1bHQgPSBzdGF0dXMpOw0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQotICAgIH0NCi0NCi1wcm90ZWN0ZWQ6DQotICAgIEdwTWF0cml4ICpuYXRpdmVNYXRyaXg7DQotICAgIG11dGFibGUgU3RhdHVzIGxhc3RSZXN1bHQ7DQotfTsNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCisqIAorKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwgTWljcm9zb2Z0IENvcnAuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKiBNb2R1bGUgTmFtZToKKyoKKyogICBHZGlwbHVzTWF0cml4LmgKKyoKKyogQWJzdHJhY3Q6CisqCisqICAgR0RJKyBNYXRyaXggY2xhc3MKKyoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworY2xhc3MgTWF0cml4IDogcHVibGljIEdkaXBsdXNCYXNlCit7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzOworICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc1BhdGg7CisgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVCcnVzaDsKKyAgICBmcmllbmQgY2xhc3MgTGluZWFyR3JhZGllbnRCcnVzaDsKKyAgICBmcmllbmQgY2xhc3MgUGF0aEdyYWRpZW50QnJ1c2g7CisgICAgZnJpZW5kIGNsYXNzIFBlbjsKKyAgICBmcmllbmQgY2xhc3MgUmVnaW9uOworICAgIAorICAgIC8vIERlZmF1bHQgY29uc3RydWN0b3IgLSBzZXQgdG8gaWRlbnRpdHkgbWF0cml4CisKKyAgICBNYXRyaXgoKQorICAgIHsKKyAgICAgICAgR3BNYXRyaXggKm1hdHJpeCA9IE5VTEw7CisKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVNYXRyaXgoJm1hdHJpeCk7CisgICAgCisgICAgICAgIFNldE5hdGl2ZU1hdHJpeChtYXRyaXgpOworICAgIH0KKworICAgIE1hdHJpeChJTiBSRUFMIG0xMSwgCisgICAgICAgICAgIElOIFJFQUwgbTEyLAorICAgICAgICAgICBJTiBSRUFMIG0yMSwgCisgICAgICAgICAgIElOIFJFQUwgbTIyLAorICAgICAgICAgICBJTiBSRUFMIGR4LCAKKyAgICAgICAgICAgSU4gUkVBTCBkeSkKKyAgICB7CisgICAgICAgIEdwTWF0cml4ICptYXRyaXggPSBOVUxMOworCisgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlTWF0cml4MihtMTEsIG0xMiwgbTIxLCBtMjIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHgsIGR5LCAmbWF0cml4KTsKKyAgICAKKyAgICAgICAgU2V0TmF0aXZlTWF0cml4KG1hdHJpeCk7CisgICAgfQorICAgIAorICAgIE1hdHJpeChJTiBjb25zdCBSZWN0RiYgcmVjdCwgCisgICAgICAgICAgIElOIGNvbnN0IFBvaW50RiogZHN0cGxnKQorICAgIHsKKyAgICAgICAgR3BNYXRyaXggKm1hdHJpeCA9IE5VTEw7CisKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVNYXRyaXgzKCZyZWN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdHBsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtYXRyaXgpOworCisgICAgICAgIFNldE5hdGl2ZU1hdHJpeChtYXRyaXgpOworICAgIH0KKworICAgIE1hdHJpeChJTiBjb25zdCBSZWN0JiByZWN0LCAKKyAgICAgICAgICAgSU4gY29uc3QgUG9pbnQqIGRzdHBsZykKKyAgICB7CisgICAgICAgIEdwTWF0cml4ICptYXRyaXggPSBOVUxMOworCisgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlTWF0cml4M0koJnJlY3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdHBsZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWF0cml4KTsKKworICAgICAgICBTZXROYXRpdmVNYXRyaXgobWF0cml4KTsKKyAgICB9CisKKyAgICB+TWF0cml4KCkKKyAgICB7CisgICAgICAgIERsbEV4cG9ydHM6OkdkaXBEZWxldGVNYXRyaXgobmF0aXZlTWF0cml4KTsKKyAgICB9CisKKyAgICBNYXRyaXggKkNsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIEdwTWF0cml4ICpjbG9uZU1hdHJpeCA9IE5VTEw7CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDbG9uZU1hdHJpeChuYXRpdmVNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbG9uZU1hdHJpeCkpOworCisgICAgICAgIGlmIChsYXN0UmVzdWx0ICE9IE9rKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgcmV0dXJuIG5ldyBNYXRyaXgoY2xvbmVNYXRyaXgpOworICAgIH0KKworICAgIFN0YXR1cyBHZXRFbGVtZW50cyhPVVQgUkVBTCAqbSkgY29uc3QgCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRNYXRyaXhFbGVtZW50cyhuYXRpdmVNYXRyaXgsIG0pKTsKKyAgICB9CisgICAgCisgICAgU3RhdHVzIFNldEVsZW1lbnRzKElOIFJFQUwgbTExLCAKKyAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBtMTIsIAorICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIG0yMSwgCisgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgbTIyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBkeCwgCisgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgZHkpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRNYXRyaXhFbGVtZW50cyhuYXRpdmVNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbTExLCBtMTIsIG0yMSwgbTIyLCBkeCwgZHkpKTsKKyAgICB9CisKKyAgICBSRUFMIE9mZnNldFgoKSBjb25zdAorICAgIHsKKyAgICAgICAgUkVBTCBlbGVtZW50c1s2XTsKKworICAgICAgICBpZiAoR2V0RWxlbWVudHMoJmVsZW1lbnRzWzBdKSA9PSBPaykKKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50c1s0XTsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHJldHVybiAwLjBmOworICAgIH0KKworICAgIFJFQUwgT2Zmc2V0WSgpIGNvbnN0CisgICAgeworICAgICAgIFJFQUwgZWxlbWVudHNbNl07CisKKyAgICAgICBpZiAoR2V0RWxlbWVudHMoJmVsZW1lbnRzWzBdKSA9PSBPaykKKyAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzWzVdOworICAgICAgIGVsc2UgCisgICAgICAgICAgIHJldHVybiAwLjBmOworICAgIH0KKworICAgIFN0YXR1cyBSZXNldCgpCisgICAgeworICAgICAgICAvLyBzZXQgaWRlbnRpdHkgbWF0cml4IGVsZW1lbnRzIAorICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRNYXRyaXhFbGVtZW50cyhuYXRpdmVNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjAsIDAuMCwgMC4wLCAxLjAsIDAuMCwgMC4wKSk7CisgICAgfQorCisgICAgU3RhdHVzIE11bHRpcGx5KElOIGNvbnN0IE1hdHJpeCAqbWF0cml4LCAKKyAgICAgICAgICAgICAgICAgICAgSU4gTWF0cml4T3JkZXIgb3JkZXIgPSBNYXRyaXhPcmRlclByZXBlbmQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBNdWx0aXBseU1hdHJpeChuYXRpdmVNYXRyaXgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT5uYXRpdmVNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcikpOworICAgIH0KKworICAgIFN0YXR1cyBUcmFuc2xhdGUoSU4gUkVBTCBvZmZzZXRYLCAKKyAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgb2Zmc2V0WSwgCisgICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFRyYW5zbGF0ZU1hdHJpeChuYXRpdmVNYXRyaXgsIG9mZnNldFgsIG9mZnNldFksIG9yZGVyKSk7CisgICAgfQorCisgICAgU3RhdHVzIFNjYWxlKElOIFJFQUwgc2NhbGVYLCAKKyAgICAgICAgICAgICAgICAgSU4gUkVBTCBzY2FsZVksIAorICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNjYWxlTWF0cml4KG5hdGl2ZU1hdHJpeCwgc2NhbGVYLCBzY2FsZVksIG9yZGVyKSk7CisgICAgfQorCisgICAgU3RhdHVzIFJvdGF0ZShJTiBSRUFMIGFuZ2xlLCAKKyAgICAgICAgICAgICAgICAgIElOIE1hdHJpeE9yZGVyIG9yZGVyID0gTWF0cml4T3JkZXJQcmVwZW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUm90YXRlTWF0cml4KG5hdGl2ZU1hdHJpeCwgYW5nbGUsIG9yZGVyKSk7CisgICAgfQorICAgIAorICAgIFN0YXR1cyBSb3RhdGVBdChJTiBSRUFMIGFuZ2xlLCAKKyAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnRGJiBjZW50ZXIsIAorICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkKKyAgICB7CisgICAgICAgIGlmKG9yZGVyID09IE1hdHJpeE9yZGVyUHJlcGVuZCkKKyAgICAgICAgeworICAgICAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBUcmFuc2xhdGVNYXRyaXgobmF0aXZlTWF0cml4LCBjZW50ZXIuWCwgY2VudGVyLlksIG9yZGVyKSk7CisgICAgICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFJvdGF0ZU1hdHJpeChuYXRpdmVNYXRyaXgsIGFuZ2xlLCBvcmRlcikpOworICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwVHJhbnNsYXRlTWF0cml4KG5hdGl2ZU1hdHJpeCwgLSBjZW50ZXIuWCwgLSBjZW50ZXIuWSwgb3JkZXIpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwVHJhbnNsYXRlTWF0cml4KG5hdGl2ZU1hdHJpeCwgLSBjZW50ZXIuWCwgLSBjZW50ZXIuWSwgb3JkZXIpKTsKKyAgICAgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUm90YXRlTWF0cml4KG5hdGl2ZU1hdHJpeCwgYW5nbGUsIG9yZGVyKSk7CisgICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBUcmFuc2xhdGVNYXRyaXgobmF0aXZlTWF0cml4LCBjZW50ZXIuWCwgY2VudGVyLlksIG9yZGVyKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdGF0dXMgU2hlYXIoSU4gUkVBTCBzaGVhclgsIAorICAgICAgICAgICAgICAgICBJTiBSRUFMIHNoZWFyWSwKKyAgICAgICAgICAgICAgICAgSU4gTWF0cml4T3JkZXIgb3JkZXIgPSBNYXRyaXhPcmRlclByZXBlbmQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTaGVhck1hdHJpeChuYXRpdmVNYXRyaXgsIHNoZWFyWCwgc2hlYXJZLCBvcmRlcikpOworICAgIH0KKworICAgIFN0YXR1cyBJbnZlcnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSW52ZXJ0TWF0cml4KG5hdGl2ZU1hdHJpeCkpOworICAgIH0KKworICAgIC8vIGZsb2F0IHZlcnNpb24KKyAgICBTdGF0dXMgVHJhbnNmb3JtUG9pbnRzKElOIE9VVCBQb2ludEYqIHB0cywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQgPSAxKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwVHJhbnNmb3JtTWF0cml4UG9pbnRzKG5hdGl2ZU1hdHJpeCwgcHRzLCBjb3VudCkpOworICAgIH0KKyAgICAKKyAgICBTdGF0dXMgVHJhbnNmb3JtUG9pbnRzKElOIE9VVCBQb2ludCogcHRzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCA9IDEpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBUcmFuc2Zvcm1NYXRyaXhQb2ludHNJKG5hdGl2ZU1hdHJpeCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOworICAgIH0KKworICAgIFN0YXR1cyBUcmFuc2Zvcm1WZWN0b3JzKElOIE9VVCBQb2ludEYqIHB0cywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50ID0gMSkgY29uc3QKKyAgICB7IAorICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBWZWN0b3JUcmFuc2Zvcm1NYXRyaXhQb2ludHMobmF0aXZlTWF0cml4LCBwdHMsIGNvdW50KSk7CisgICAgfQorCisgICAgU3RhdHVzIFRyYW5zZm9ybVZlY3RvcnMoSU4gT1VUIFBvaW50KiBwdHMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCA9IDEpIGNvbnN0CisgICAgeyAKKyAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBWZWN0b3JUcmFuc2Zvcm1NYXRyaXhQb2ludHNJKG5hdGl2ZU1hdHJpeCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0cywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7CisgICAgfQorICAgIAorICAgIEJPT0wgSXNJbnZlcnRpYmxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEJPT0wgcmVzdWx0ID0gRkFMU0U7CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBJc01hdHJpeEludmVydGlibGUobmF0aXZlTWF0cml4LCAmcmVzdWx0KSk7CisgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQk9PTCBJc0lkZW50aXR5KCkgY29uc3QKKyAgICB7CisgICAgICAgQk9PTCByZXN1bHQgPSBGQUxTRTsKKworICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSXNNYXRyaXhJZGVudGl0eShuYXRpdmVNYXRyaXgsICZyZXN1bHQpKTsKKyAgICAKKyAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEJPT0wgRXF1YWxzKElOIGNvbnN0IE1hdHJpeCAqbWF0cml4KSBjb25zdAorICAgIHsKKyAgICAgICBCT09MIHJlc3VsdCA9IEZBTFNFOworCisgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBJc01hdHJpeEVxdWFsKG5hdGl2ZU1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgtPm5hdGl2ZU1hdHJpeCwgJnJlc3VsdCkpOworICAgCisgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgU3RhdHVzIEdldExhc3RTdGF0dXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgU3RhdHVzIGxhc3RTdGF0dXMgPSBsYXN0UmVzdWx0OworICAgICAgICBsYXN0UmVzdWx0ID0gT2s7CisgCisgICAgICAgIHJldHVybiBsYXN0U3RhdHVzOworICAgIH0KKworcHJvdGVjdGVkOgorCisjaWZkZWYgRENSX1VTRV9ORVdfMjUwOTMyCisKK3ByaXZhdGU6CisgICAgTWF0cml4KGNvbnN0IE1hdHJpeCAmKTsKKyAgICBNYXRyaXgmIG9wZXJhdG9yPShjb25zdCBNYXRyaXggJik7Citwcm90ZWN0ZWQ6CisKKyNlbHNlCisKKyAgICBNYXRyaXgoY29uc3QgTWF0cml4JiBtYXRyaXgpCisgICAgeworICAgICAgICBtYXRyaXg7CisgICAgICAgIFNldFN0YXR1cyhOb3RJbXBsZW1lbnRlZCk7CisgICAgICAgIFNldE5hdGl2ZU1hdHJpeChOVUxMKTsKKyAgICB9CisKKyAgICBNYXRyaXgmIG9wZXJhdG9yPShjb25zdCBNYXRyaXgmIG1hdHJpeCkKKyAgICB7CisgICAgICAgIG1hdHJpeDsKKyAgICAgICAgU2V0U3RhdHVzKE5vdEltcGxlbWVudGVkKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworI2VuZGlmCisKKyAgICBNYXRyaXgoR3BNYXRyaXggKm5hdGl2ZU1hdHJpeCkKKyAgICB7CisgICAgICAgIGxhc3RSZXN1bHQgPSBPazsKKyAgICAgICAgU2V0TmF0aXZlTWF0cml4KG5hdGl2ZU1hdHJpeCk7CisgICAgfQorICAgIAorICAgIFZPSUQgU2V0TmF0aXZlTWF0cml4KEdwTWF0cml4ICpuYXRpdmVNYXRyaXgpCisgICAgeworICAgICAgICB0aGlzLT5uYXRpdmVNYXRyaXggPSBuYXRpdmVNYXRyaXg7CisgICAgfQorCisgICAgU3RhdHVzIFNldFN0YXR1cyhTdGF0dXMgc3RhdHVzKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBPaykKKyAgICAgICAgICAgIHJldHVybiAobGFzdFJlc3VsdCA9IHN0YXR1cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgR3BNYXRyaXggKm5hdGl2ZU1hdHJpeDsKKyAgICBtdXRhYmxlIFN0YXR1cyBsYXN0UmVzdWx0OworfTsKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNNZW0uaCBiL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNNZW0uaAppbmRleCA1ZjkyYzFlLi5hMGUwZTQ0IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzTWVtLmgKKysrIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c01lbS5oCkBAIC0xLDQ5ICsxLDQ5IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcDQotKg0KLSogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsIE1pY3Jvc29mdCBDb3JwLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0qDQotKiBNb2R1bGUgTmFtZToNCi0qDQotKiAgIEdkaXBsdXNNZW0uaA0KLSoNCi0qIEFic3RyYWN0Og0KLSoNCi0qICAgRmxhdCBHREkrIE1lbW9yeSBBbGxvY2F0b3JzIC0gaGVhZGVyIGZpbGUNCi0qDQotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLS8vIFRPRE86IHRoaXMgZmlsZSBzdHlsZSBuZWVkcyB0byBiZSBtYWRlIGludGVybmFsbHkgY29uc2lzdGVudCB3aXRoIHRoZSB3YXkNCi0vLyAgICAgICBpdCBoYW5kbGVzIGJyZWFraW5nIHRoZSBsb25nIGFyZ3VtZW50IGxpc3RzIGFjcm9zcyBtdWx0aXBsZSBsaW5lcw0KLQ0KLSNpZm5kZWYgX0dESVBMVVNNRU1fSA0KLSNkZWZpbmUgX0dESVBMVVNNRU1fSA0KLQ0KLSNkZWZpbmUgV0lOR0RJUEFQSSBfX3N0ZGNhbGwNCi0NCi0vLyBjdXJyZW50bHksIG9ubHkgQysrIHdyYXBwZXIgQVBJJ3MgZm9yY2UgY29uc3QuDQotDQotI2lmZGVmIF9HRElQTFVTX0gNCi0jZGVmaW5lIEdESVBDT05TVCBjb25zdA0KLSNlbHNlDQotI2RlZmluZSBHRElQQ09OU1QNCi0jZW5kaWYNCi0NCi0jaWZkZWYgX19jcGx1c3BsdXMNCi1leHRlcm4gIkMiIHsNCi0jZW5kaWYNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBNZW1vcnkgQWxsb2NhdGlvbiBBUElzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotdm9pZCogV0lOR0RJUEFQSQ0KLUdkaXBBbGxvYyhzaXplX3Qgc2l6ZSk7DQotDQotdm9pZCBXSU5HRElQQVBJDQotR2RpcEZyZWUodm9pZCogcHRyKTsNCi0NCi0jaWZkZWYgX19jcGx1c3BsdXMNCi19DQotI2VuZGlmDQotDQotI2VuZGlmIC8vICFfR0RJUExVU01FTV9IDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKgorKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwgTWljcm9zb2Z0IENvcnAuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKiBNb2R1bGUgTmFtZToKKyoKKyogICBHZGlwbHVzTWVtLmgKKyoKKyogQWJzdHJhY3Q6CisqCisqICAgRmxhdCBHREkrIE1lbW9yeSBBbGxvY2F0b3JzIC0gaGVhZGVyIGZpbGUKKyoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8gVE9ETzogdGhpcyBmaWxlIHN0eWxlIG5lZWRzIHRvIGJlIG1hZGUgaW50ZXJuYWxseSBjb25zaXN0ZW50IHdpdGggdGhlIHdheQorLy8gICAgICAgaXQgaGFuZGxlcyBicmVha2luZyB0aGUgbG9uZyBhcmd1bWVudCBsaXN0cyBhY3Jvc3MgbXVsdGlwbGUgbGluZXMKKworI2lmbmRlZiBfR0RJUExVU01FTV9ICisjZGVmaW5lIF9HRElQTFVTTUVNX0gKKworI2RlZmluZSBXSU5HRElQQVBJIF9fc3RkY2FsbAorCisvLyBjdXJyZW50bHksIG9ubHkgQysrIHdyYXBwZXIgQVBJJ3MgZm9yY2UgY29uc3QuCisKKyNpZmRlZiBfR0RJUExVU19ICisjZGVmaW5lIEdESVBDT05TVCBjb25zdAorI2Vsc2UKKyNkZWZpbmUgR0RJUENPTlNUCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1lbW9yeSBBbGxvY2F0aW9uIEFQSXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2lkKiBXSU5HRElQQVBJCitHZGlwQWxsb2Moc2l6ZV90IHNpemUpOworCit2b2lkIFdJTkdESVBBUEkKK0dkaXBGcmVlKHZvaWQqIHB0cik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyAhX0dESVBMVVNNRU1fSApkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c01ldGFGaWxlLmggYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzTWV0YUZpbGUuaAppbmRleCAzZDA3ZGQ2Li5mN2UwZDkxIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzTWV0YUZpbGUuaAorKysgYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzTWV0YUZpbGUuaApAQCAtMSwzNzQgKzEsMzc0IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcDQotKg0KLSogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsIE1pY3Jvc29mdCBDb3JwLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0qDQotKiBNb2R1bGUgTmFtZToNCi0qDQotKiAgIEdkaXBsdXNNZXRhZmlsZS5oDQotKg0KLSogQWJzdHJhY3Q6DQotKg0KLSogICBNZXRhZmlsZSByZWxhdGVkIGRlY2xhcmF0aW9ucw0KLSoNCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotI2lmbmRlZiBfR0RJUExVU01FVEFGSUxFX0gNCi0jZGVmaW5lIF9HRElQTFVTTUVUQUZJTEVfSA0KLQ0KLWNsYXNzIE1ldGFmaWxlIDogcHVibGljIEltYWdlDQotew0KLXB1YmxpYzoNCi0gICAgZnJpZW5kIGNsYXNzIEltYWdlOw0KLQ0KLSAgICAvLyBSZWFkIGEgbWV0YWZpbGUNCi0gICAgTWV0YWZpbGUoKQ0KLSAgICB7DQotICAgICAgICBTZXROYXRpdmVJbWFnZShOVUxMKTsNCi0gICAgICAgIGxhc3RSZXN1bHQgPSBPazsNCi0gICAgfQ0KLQ0KLSAgICAvLyBQbGF5YmFjayBhIG1ldGFmaWxlIGZyb20gYSBITUVUQUZJTEUNCi0gICAgLy8gSWYgZGVsZXRlV21mIGlzIFRSVUUsIHRoZW4gd2hlbiB0aGUgbWV0YWZpbGUgaXMgZGVsZXRlZCwNCi0gICAgLy8gdGhlIGhXbWYgd2lsbCBhbHNvIGJlIGRlbGV0ZWQuICBPdGhlcndpc2UsIGl0IHdvbid0IGJlLg0KLSAgICBNZXRhZmlsZShJTiBITUVUQUZJTEUgaFdtZiwNCi0gICAgICAgICAgICAgSU4gY29uc3QgQVBNRmlsZUhlYWRlciAqIGFwbUZpbGVIZWFkZXIsDQotICAgICAgICAgICAgIElOIEJPT0wgZGVsZXRlV21mID0gRkFMU0UpDQotICAgIHsNCi0gICAgICAgIEdwTWV0YWZpbGUgKiAgICBtZXRhZmlsZSA9IE5VTEw7DQotDQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZU1ldGFmaWxlRnJvbVdtZihoV21mLCBkZWxldGVXbWYsIGFwbUZpbGVIZWFkZXIsICZtZXRhZmlsZSk7DQotDQotICAgICAgICBTZXROYXRpdmVJbWFnZShtZXRhZmlsZSk7DQotICAgIH0NCi0NCi0gICAgLy8gUGxheWJhY2sgYSBtZXRhZmlsZSBmcm9tIGEgSEVOSE1FVEFGSUxFDQotICAgIC8vIElmIGRlbGV0ZUVtZiBpcyBUUlVFLCB0aGVuIHdoZW4gdGhlIG1ldGFmaWxlIGlzIGRlbGV0ZWQsDQotICAgIC8vIHRoZSBoRW1mIHdpbGwgYWxzbyBiZSBkZWxldGVkLiAgT3RoZXJ3aXNlLCBpdCB3b24ndCBiZS4NCi0gICAgTWV0YWZpbGUoSU4gSEVOSE1FVEFGSUxFIGhFbWYsDQotICAgICAgICAgICAgIElOIEJPT0wgZGVsZXRlRW1mID0gRkFMU0UpDQotICAgIHsNCi0gICAgICAgIEdwTWV0YWZpbGUgKiAgICBtZXRhZmlsZSA9IE5VTEw7DQotDQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZU1ldGFmaWxlRnJvbUVtZihoRW1mLCBkZWxldGVFbWYsICZtZXRhZmlsZSk7DQotDQotICAgICAgICBTZXROYXRpdmVJbWFnZShtZXRhZmlsZSk7DQotICAgIH0NCi0NCi0gICAgLy8gUGxheWJhY2sgYSBtZXRhZmlsZSBmcm9tIGEgZmlsZQ0KLSAgICBNZXRhZmlsZShJTiBjb25zdCBXQ0hBUiogZmlsZW5hbWUpDQotICAgIHsNCi0gICAgICAgIEdwTWV0YWZpbGUgKiAgICBtZXRhZmlsZSA9IE5VTEw7DQotDQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZU1ldGFmaWxlRnJvbUZpbGUoZmlsZW5hbWUsICZtZXRhZmlsZSk7DQotDQotICAgICAgICBTZXROYXRpdmVJbWFnZShtZXRhZmlsZSk7DQotICAgIH0NCi0NCi0gICAgLy8gUGxheWJhY2sgYSBXTUYgbWV0YWZpbGUgZnJvbSBhIGZpbGUNCi0gICAgTWV0YWZpbGUoSU4gY29uc3QgV0NIQVIqIGZpbGVuYW1lLA0KLSAgICAgICAgICAgICBJTiBjb25zdCBBUE1GaWxlSGVhZGVyICogYXBtRmlsZUhlYWRlcg0KLSAgICAgICAgICAgICkNCi0gICAgew0KLSAgICAgICAgR3BNZXRhZmlsZSAqICAgIG1ldGFmaWxlID0gTlVMTDsNCi0NCi0gICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlTWV0YWZpbGVGcm9tV21mRmlsZShmaWxlbmFtZSwgYXBtRmlsZUhlYWRlciwgJm1ldGFmaWxlKTsNCi0NCi0gICAgICAgIFNldE5hdGl2ZUltYWdlKG1ldGFmaWxlKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBQbGF5YmFjayBhIG1ldGFmaWxlIGZyb20gYSBzdHJlYW0NCi0gICAgTWV0YWZpbGUoSU4gSVN0cmVhbSogc3RyZWFtKQ0KLSAgICB7DQotICAgICAgICBHcE1ldGFmaWxlICogICAgbWV0YWZpbGUgPSBOVUxMOw0KLQ0KLSAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVNZXRhZmlsZUZyb21TdHJlYW0oc3RyZWFtLCAmbWV0YWZpbGUpOw0KLQ0KLSAgICAgICAgU2V0TmF0aXZlSW1hZ2UobWV0YWZpbGUpOw0KLSAgICB9DQotDQotICAgIC8vIFJlY29yZCBhIG1ldGFmaWxlIHRvIG1lbW9yeQ0KLSAgICBNZXRhZmlsZSgNCi0gICAgICAgIElOIEhEQyAgICAgICAgICAgICAgICAgcmVmZXJlbmNlSGRjLA0KLSAgICAgICAgSU4gRW1mVHlwZSAgICAgICAgICAgICB0eXBlICAgICAgICA9IEVtZlR5cGVFbWZQbHVzRHVhbCwNCi0gICAgICAgIElOIGNvbnN0IFdDSEFSICogICAgICAgZGVzY3JpcHRpb24gPSBOVUxMDQotICAgICAgICApDQotICAgIHsNCi0gICAgICAgIEdwTWV0YWZpbGUgKiAgICBtZXRhZmlsZSA9IE5VTEw7DQotDQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcFJlY29yZE1ldGFmaWxlKA0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhkYywgdHlwZSwgTlVMTCwgTWV0YWZpbGVGcmFtZVVuaXRHZGksDQotICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sICZtZXRhZmlsZSk7DQotDQotICAgICAgICBTZXROYXRpdmVJbWFnZShtZXRhZmlsZSk7DQotICAgIH0NCi0NCi0gICAgLy8gUmVjb3JkIGEgbWV0YWZpbGUgdG8gbWVtb3J5DQotICAgIE1ldGFmaWxlKA0KLSAgICAgICAgSU4gSERDICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsDQotICAgICAgICBJTiBjb25zdCBSZWN0RiAmICAgICAgIGZyYW1lUmVjdCwNCi0gICAgICAgIElOIE1ldGFmaWxlRnJhbWVVbml0ICAgZnJhbWVVbml0ICAgPSBNZXRhZmlsZUZyYW1lVW5pdEdkaSwNCi0gICAgICAgIElOIEVtZlR5cGUgICAgICAgICAgICAgdHlwZSAgICAgICAgPSBFbWZUeXBlRW1mUGx1c0R1YWwsDQotICAgICAgICBJTiBjb25zdCBXQ0hBUiAqICAgICAgIGRlc2NyaXB0aW9uID0gTlVMTA0KLSAgICAgICAgKQ0KLSAgICB7DQotICAgICAgICBHcE1ldGFmaWxlICogICAgbWV0YWZpbGUgPSBOVUxMOw0KLQ0KLSAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBSZWNvcmRNZXRhZmlsZSgNCi0gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsIHR5cGUsICZmcmFtZVJlY3QsIGZyYW1lVW5pdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiwgJm1ldGFmaWxlKTsNCi0NCi0gICAgICAgIFNldE5hdGl2ZUltYWdlKG1ldGFmaWxlKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBSZWNvcmQgYSBtZXRhZmlsZSB0byBtZW1vcnkNCi0gICAgTWV0YWZpbGUoDQotICAgICAgICBJTiBIREMgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhkYywNCi0gICAgICAgIElOIGNvbnN0IFJlY3QgJiAgICAgICAgZnJhbWVSZWN0LA0KLSAgICAgICAgSU4gTWV0YWZpbGVGcmFtZVVuaXQgICBmcmFtZVVuaXQgICA9IE1ldGFmaWxlRnJhbWVVbml0R2RpLA0KLSAgICAgICAgSU4gRW1mVHlwZSAgICAgICAgICAgICB0eXBlICAgICAgICA9IEVtZlR5cGVFbWZQbHVzRHVhbCwNCi0gICAgICAgIElOIGNvbnN0IFdDSEFSICogICAgICAgZGVzY3JpcHRpb24gPSBOVUxMDQotICAgICAgICApDQotICAgIHsNCi0gICAgICAgIEdwTWV0YWZpbGUgKiAgICBtZXRhZmlsZSA9IE5VTEw7DQotDQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcFJlY29yZE1ldGFmaWxlSSgNCi0gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsIHR5cGUsICZmcmFtZVJlY3QsIGZyYW1lVW5pdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiwgJm1ldGFmaWxlKTsNCi0NCi0gICAgICAgIFNldE5hdGl2ZUltYWdlKG1ldGFmaWxlKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBSZWNvcmQgYSBtZXRhZmlsZSB0byBhIGZpbGUNCi0gICAgTWV0YWZpbGUoDQotICAgICAgICBJTiBjb25zdCBXQ0hBUiogICAgICAgIGZpbGVOYW1lLA0KLSAgICAgICAgSU4gSERDICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsDQotICAgICAgICBJTiBFbWZUeXBlICAgICAgICAgICAgIHR5cGUgICAgICAgID0gRW1mVHlwZUVtZlBsdXNEdWFsLA0KLSAgICAgICAgSU4gY29uc3QgV0NIQVIgKiAgICAgICBkZXNjcmlwdGlvbiA9IE5VTEwNCi0gICAgICAgICkNCi0gICAgew0KLSAgICAgICAgR3BNZXRhZmlsZSAqICAgIG1ldGFmaWxlID0gTlVMTDsNCi0NCi0gICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwUmVjb3JkTWV0YWZpbGVGaWxlTmFtZShmaWxlTmFtZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsIHR5cGUsIE5VTEwsIE1ldGFmaWxlRnJhbWVVbml0R2RpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLCAmbWV0YWZpbGUpOw0KLQ0KLSAgICAgICAgU2V0TmF0aXZlSW1hZ2UobWV0YWZpbGUpOw0KLSAgICB9DQotDQotICAgIC8vIFJlY29yZCBhIG1ldGFmaWxlIHRvIGEgZmlsZQ0KLSAgICBNZXRhZmlsZSgNCi0gICAgICAgIElOIGNvbnN0IFdDSEFSKiAgICAgICAgZmlsZU5hbWUsDQotICAgICAgICBJTiBIREMgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhkYywNCi0gICAgICAgIElOIGNvbnN0IFJlY3RGICYgICAgICAgZnJhbWVSZWN0LA0KLSAgICAgICAgSU4gTWV0YWZpbGVGcmFtZVVuaXQgICBmcmFtZVVuaXQgICA9IE1ldGFmaWxlRnJhbWVVbml0R2RpLA0KLSAgICAgICAgSU4gRW1mVHlwZSAgICAgICAgICAgICB0eXBlICAgICAgICA9IEVtZlR5cGVFbWZQbHVzRHVhbCwNCi0gICAgICAgIElOIGNvbnN0IFdDSEFSICogICAgICAgZGVzY3JpcHRpb24gPSBOVUxMDQotICAgICAgICApDQotICAgIHsNCi0gICAgICAgIEdwTWV0YWZpbGUgKiAgICBtZXRhZmlsZSA9IE5VTEw7DQotDQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcFJlY29yZE1ldGFmaWxlRmlsZU5hbWUoZmlsZU5hbWUsDQotICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlSGRjLCB0eXBlLCAmZnJhbWVSZWN0LCBmcmFtZVVuaXQsDQotICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sICZtZXRhZmlsZSk7DQotDQotICAgICAgICBTZXROYXRpdmVJbWFnZShtZXRhZmlsZSk7DQotICAgIH0NCi0NCi0gICAgLy8gUmVjb3JkIGEgbWV0YWZpbGUgdG8gYSBmaWxlDQotICAgIE1ldGFmaWxlKA0KLSAgICAgICAgSU4gY29uc3QgV0NIQVIqICAgICAgICBmaWxlTmFtZSwNCi0gICAgICAgIElOIEhEQyAgICAgICAgICAgICAgICAgcmVmZXJlbmNlSGRjLA0KLSAgICAgICAgSU4gY29uc3QgUmVjdCAmICAgICAgICBmcmFtZVJlY3QsDQotICAgICAgICBJTiBNZXRhZmlsZUZyYW1lVW5pdCAgIGZyYW1lVW5pdCAgID0gTWV0YWZpbGVGcmFtZVVuaXRHZGksDQotICAgICAgICBJTiBFbWZUeXBlICAgICAgICAgICAgIHR5cGUgICAgICAgID0gRW1mVHlwZUVtZlBsdXNEdWFsLA0KLSAgICAgICAgSU4gY29uc3QgV0NIQVIgKiAgICAgICBkZXNjcmlwdGlvbiA9IE5VTEwNCi0gICAgICAgICkNCi0gICAgew0KLSAgICAgICAgR3BNZXRhZmlsZSAqICAgIG1ldGFmaWxlID0gTlVMTDsNCi0NCi0gICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwUmVjb3JkTWV0YWZpbGVGaWxlTmFtZUkoZmlsZU5hbWUsDQotICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlSGRjLCB0eXBlLCAmZnJhbWVSZWN0LCBmcmFtZVVuaXQsDQotICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sICZtZXRhZmlsZSk7DQotDQotICAgICAgICBTZXROYXRpdmVJbWFnZShtZXRhZmlsZSk7DQotICAgIH0NCi0NCi0gICAgLy8gUmVjb3JkIGEgbWV0YWZpbGUgdG8gYSBzdHJlYW0NCi0gICAgTWV0YWZpbGUoDQotICAgICAgICBJTiBJU3RyZWFtICogICAgICAgICAgIHN0cmVhbSwNCi0gICAgICAgIElOIEhEQyAgICAgICAgICAgICAgICAgcmVmZXJlbmNlSGRjLA0KLSAgICAgICAgSU4gRW1mVHlwZSAgICAgICAgICAgICB0eXBlICAgICAgICA9IEVtZlR5cGVFbWZQbHVzRHVhbCwNCi0gICAgICAgIElOIGNvbnN0IFdDSEFSICogICAgICAgZGVzY3JpcHRpb24gPSBOVUxMDQotICAgICAgICApDQotICAgIHsNCi0gICAgICAgIEdwTWV0YWZpbGUgKiAgICBtZXRhZmlsZSA9IE5VTEw7DQotDQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcFJlY29yZE1ldGFmaWxlU3RyZWFtKHN0cmVhbSwNCi0gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsIHR5cGUsIE5VTEwsIE1ldGFmaWxlRnJhbWVVbml0R2RpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLCAmbWV0YWZpbGUpOw0KLQ0KLSAgICAgICAgU2V0TmF0aXZlSW1hZ2UobWV0YWZpbGUpOw0KLSAgICB9DQotDQotICAgIC8vIFJlY29yZCBhIG1ldGFmaWxlIHRvIGEgc3RyZWFtDQotICAgIE1ldGFmaWxlKA0KLSAgICAgICAgSU4gSVN0cmVhbSAqICAgICAgICAgICBzdHJlYW0sDQotICAgICAgICBJTiBIREMgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhkYywNCi0gICAgICAgIElOIGNvbnN0IFJlY3RGICYgICAgICAgZnJhbWVSZWN0LA0KLSAgICAgICAgSU4gTWV0YWZpbGVGcmFtZVVuaXQgICBmcmFtZVVuaXQgICA9IE1ldGFmaWxlRnJhbWVVbml0R2RpLA0KLSAgICAgICAgSU4gRW1mVHlwZSAgICAgICAgICAgICB0eXBlICAgICAgICA9IEVtZlR5cGVFbWZQbHVzRHVhbCwNCi0gICAgICAgIElOIGNvbnN0IFdDSEFSICogICAgICAgZGVzY3JpcHRpb24gPSBOVUxMDQotICAgICAgICApDQotICAgIHsNCi0gICAgICAgIEdwTWV0YWZpbGUgKiAgICBtZXRhZmlsZSA9IE5VTEw7DQotDQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcFJlY29yZE1ldGFmaWxlU3RyZWFtKHN0cmVhbSwNCi0gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsIHR5cGUsICZmcmFtZVJlY3QsIGZyYW1lVW5pdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiwgJm1ldGFmaWxlKTsNCi0NCi0gICAgICAgIFNldE5hdGl2ZUltYWdlKG1ldGFmaWxlKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBXcml0ZSBhIG1ldGFmaWxlIHRvIGEgc3RyZWFtIHdpdGggZG93bi1sZXZlbCBHREkgcmVjb3Jkcw0KLSAgICBNZXRhZmlsZSgNCi0gICAgICAgIElOIElTdHJlYW0gKiAgICAgICAgICAgc3RyZWFtLA0KLSAgICAgICAgSU4gSERDICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsDQotICAgICAgICBJTiBjb25zdCBSZWN0ICYgICAgICAgIGZyYW1lUmVjdCwNCi0gICAgICAgIElOIE1ldGFmaWxlRnJhbWVVbml0ICAgZnJhbWVVbml0ICAgPSBNZXRhZmlsZUZyYW1lVW5pdEdkaSwNCi0gICAgICAgIElOIEVtZlR5cGUgICAgICAgICAgICAgdHlwZSAgICAgICAgPSBFbWZUeXBlRW1mUGx1c0R1YWwsDQotICAgICAgICBJTiBjb25zdCBXQ0hBUiAqICAgICAgIGRlc2NyaXB0aW9uID0gTlVMTA0KLSAgICAgICAgKQ0KLSAgICB7DQotICAgICAgICBHcE1ldGFmaWxlICogICAgbWV0YWZpbGUgPSBOVUxMOw0KLQ0KLSAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBSZWNvcmRNZXRhZmlsZVN0cmVhbUkoc3RyZWFtLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhkYywgdHlwZSwgJmZyYW1lUmVjdCwgZnJhbWVVbml0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLCAmbWV0YWZpbGUpOw0KLQ0KLSAgICAgICAgU2V0TmF0aXZlSW1hZ2UobWV0YWZpbGUpOw0KLSAgICB9DQotDQotICAgIHN0YXRpYyBTdGF0dXMgR2V0TWV0YWZpbGVIZWFkZXIoDQotICAgICAgICBJTiBITUVUQUZJTEUgICAgICAgICAgIGhXbWYsDQotICAgICAgICBJTiBjb25zdCBBUE1GaWxlSGVhZGVyICogICAgIGFwbUZpbGVIZWFkZXIsDQotICAgICAgICBPVVQgTWV0YWZpbGVIZWFkZXIgKiAgIGhlYWRlcg0KLSAgICAgICAgKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRGxsRXhwb3J0czo6R2RpcEdldE1ldGFmaWxlSGVhZGVyRnJvbVdtZihoV21mLCBhcG1GaWxlSGVhZGVyLCBoZWFkZXIpOw0KLSAgICB9DQotDQotICAgIHN0YXRpYyBTdGF0dXMgR2V0TWV0YWZpbGVIZWFkZXIoDQotICAgICAgICBJTiBIRU5ITUVUQUZJTEUgICAgICAgIGhFbWYsDQotICAgICAgICBPVVQgTWV0YWZpbGVIZWFkZXIgKiAgIGhlYWRlcg0KLSAgICAgICAgKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRGxsRXhwb3J0czo6R2RpcEdldE1ldGFmaWxlSGVhZGVyRnJvbUVtZihoRW1mLCBoZWFkZXIpOw0KLSAgICB9DQotDQotICAgIHN0YXRpYyBTdGF0dXMgR2V0TWV0YWZpbGVIZWFkZXIoDQotICAgICAgICBJTiBjb25zdCBXQ0hBUiogICAgICAgIGZpbGVuYW1lLA0KLSAgICAgICAgT1VUIE1ldGFmaWxlSGVhZGVyICogICBoZWFkZXINCi0gICAgICAgICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIERsbEV4cG9ydHM6OkdkaXBHZXRNZXRhZmlsZUhlYWRlckZyb21GaWxlKGZpbGVuYW1lLCBoZWFkZXIpOw0KLSAgICB9DQotDQotICAgIHN0YXRpYyBTdGF0dXMgR2V0TWV0YWZpbGVIZWFkZXIoDQotICAgICAgICBJTiBJU3RyZWFtICogICAgICAgICAgIHN0cmVhbSwNCi0gICAgICAgIE9VVCBNZXRhZmlsZUhlYWRlciAqICAgaGVhZGVyDQotICAgICAgICApDQotICAgIHsNCi0gICAgICAgIHJldHVybiBEbGxFeHBvcnRzOjpHZGlwR2V0TWV0YWZpbGVIZWFkZXJGcm9tU3RyZWFtKHN0cmVhbSwgaGVhZGVyKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgR2V0TWV0YWZpbGVIZWFkZXIoDQotICAgICAgICBPVVQgTWV0YWZpbGVIZWFkZXIgKiAgICBoZWFkZXINCi0gICAgICAgICkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0TWV0YWZpbGVIZWFkZXJGcm9tTWV0YWZpbGUoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHcE1ldGFmaWxlICopbmF0aXZlSW1hZ2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcikpOw0KLSAgICB9DQotDQotICAgIC8vIE9uY2UgdGhpcyBtZXRob2QgaXMgY2FsbGVkLCB0aGUgTWV0YWZpbGUgb2JqZWN0IGlzIGluIGFuIGludmFsaWQgc3RhdGUNCi0gICAgLy8gYW5kIGNhbiBubyBsb25nZXIgYmUgdXNlZC4gIEl0IGlzIHRoZSByZXNwb25zaWJsaXR5IG9mIHRoZSBjYWxsZXIgdG8NCi0gICAgLy8gaW52b2tlIERlbGV0ZUVuaE1ldGFGaWxlIHRvIGRlbGV0ZSB0aGlzIGhFbWYuDQotDQotICAgIEhFTkhNRVRBRklMRSBHZXRIRU5ITUVUQUZJTEUoKQ0KLSAgICB7DQotICAgICAgICBIRU5ITUVUQUZJTEUgaEVtZjsNCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0SGVtZkZyb21NZXRhZmlsZSgoR3BNZXRhZmlsZSAqKW5hdGl2ZUltYWdlLCAmaEVtZikpOw0KLQ0KLSAgICAgICAgcmV0dXJuIGhFbWY7DQotICAgIH0NCi0NCi0gICAgLy8gVXNlZCBpbiBjb25qdWN0aW9uIHdpdGggR3JhcGhpY3M6OkVudW1lcmF0ZU1ldGFmaWxlIHRvIHBsYXkgYW4gRU1GKw0KLSAgICAvLyBUaGUgZGF0YSBtdXN0IGJlIERXT1JEIGFsaWduZWQgaWYgaXQncyBhbiBFTUYgb3IgRU1GKy4gIEl0IG11c3QgYmUNCi0gICAgLy8gV09SRCBhbGlnbmVkIGlmIGl0J3MgYSBXTUYuDQotICAgIFN0YXR1cw0KLSAgICBQbGF5UmVjb3JkKA0KLSAgICAgICAgSU4gRW1mUGx1c1JlY29yZFR5cGUgICByZWNvcmRUeXBlLA0KLSAgICAgICAgSU4gVUlOVCAgICAgICAgICAgICAgICBmbGFncywNCi0gICAgICAgIElOIFVJTlQgICAgICAgICAgICAgICAgZGF0YVNpemUsDQotICAgICAgICBJTiBjb25zdCBCWVRFICogICAgICAgIGRhdGENCi0gICAgICAgICkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUGxheU1ldGFmaWxlUmVjb3JkKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwTWV0YWZpbGUgKiluYXRpdmVJbWFnZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZFR5cGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTaXplLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSkpOw0KLSAgICB9DQotDQotICAgIC8vIElmIHlvdSdyZSB1c2luZyBhIHByaW50ZXIgSERDIGZvciB0aGUgbWV0YWZpbGUsIGJ1dCB5b3Ugd2FudCB0aGUNCi0gICAgLy8gbWV0YWZpbGUgcmFzdGVyaXplZCBhdCBzY3JlZW4gcmVzb2x1dGlvbiwgdGhlbiB1c2UgdGhpcyBBUEkgdG8gc2V0DQotICAgIC8vIHRoZSByYXN0ZXJpemF0aW9uIGRwaSBvZiB0aGUgbWV0YWZpbGUgdG8gdGhlIHNjcmVlbiByZXNvbHV0aW9uLA0KLSAgICAvLyBlLmcuIDk2IGRwaSBvciAxMjAgZHBpLg0KLSAgICBTdGF0dXMgU2V0RG93bkxldmVsUmFzdGVyaXphdGlvbkxpbWl0KA0KLSAgICAgICAgSU4gVUlOVCAgICAgbWV0YWZpbGVSYXN0ZXJpemF0aW9uTGltaXREcGkNCi0gICAgICAgICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0TWV0YWZpbGVEb3duTGV2ZWxSYXN0ZXJpemF0aW9uTGltaXQoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3BNZXRhZmlsZSAqKW5hdGl2ZUltYWdlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWZpbGVSYXN0ZXJpemF0aW9uTGltaXREcGkpKTsNCi0gICAgfQ0KLQ0KLSAgICBVSU5UIEdldERvd25MZXZlbFJhc3Rlcml6YXRpb25MaW1pdCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIFVJTlQgICAgbWV0YWZpbGVSYXN0ZXJpemF0aW9uTGltaXREcGkgPSAwOw0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRNZXRhZmlsZURvd25MZXZlbFJhc3Rlcml6YXRpb25MaW1pdCgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHcE1ldGFmaWxlICopbmF0aXZlSW1hZ2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWV0YWZpbGVSYXN0ZXJpemF0aW9uTGltaXREcGkpKTsNCi0NCi0gICAgICAgIHJldHVybiBtZXRhZmlsZVJhc3Rlcml6YXRpb25MaW1pdERwaTsNCi0gICAgfQ0KLQ0KLSAgICBzdGF0aWMgVUlOVCBNZXRhZmlsZTo6RW1mVG9XbWZCaXRzKA0KLSAgICAgICAgSU4gSEVOSE1FVEFGSUxFICAgICAgIGhlbWYsDQotICAgICAgICBJTiBVSU5UICAgICAgICAgICAgICAgY2JEYXRhMTYsDQotICAgICAgICBJTiBMUEJZVEUgICAgICAgICAgICAgcERhdGExNiwNCi0gICAgICAgIElOIElOVCAgICAgICAgICAgICAgICBpTWFwTW9kZSA9IE1NX0FOSVNPVFJPUElDLA0KLSAgICAgICAgSU4gRW1mVG9XbWZCaXRzRmxhZ3MgIGVGbGFncyA9IEVtZlRvV21mQml0c0ZsYWdzRGVmYXVsdA0KLSAgICApDQotICAgIHsNCi0gICAgICAgIHJldHVybiBEbGxFeHBvcnRzOjpHZGlwRW1mVG9XbWZCaXRzKA0KLSAgICAgICAgICAgIGhlbWYsDQotICAgICAgICAgICAgY2JEYXRhMTYsDQotICAgICAgICAgICAgcERhdGExNiwNCi0gICAgICAgICAgICBpTWFwTW9kZSwNCi0gICAgICAgICAgICBlRmxhZ3MpOw0KLSAgICB9DQotDQotI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMg0KLQ0KLXByaXZhdGU6DQotICAgIE1ldGFmaWxlKGNvbnN0IE1ldGFmaWxlICYpOw0KLSAgICBNZXRhZmlsZSYgb3BlcmF0b3I9KGNvbnN0IE1ldGFmaWxlICYpOw0KLQ0KLSNlbmRpZg0KLX07DQotDQotI2VuZGlmIC8vICFfTUVUQUZJTEVfSA0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyoKKyogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsIE1pY3Jvc29mdCBDb3JwLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyogTW9kdWxlIE5hbWU6CisqCisqICAgR2RpcGx1c01ldGFmaWxlLmgKKyoKKyogQWJzdHJhY3Q6CisqCisqICAgTWV0YWZpbGUgcmVsYXRlZCBkZWNsYXJhdGlvbnMKKyoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfR0RJUExVU01FVEFGSUxFX0gKKyNkZWZpbmUgX0dESVBMVVNNRVRBRklMRV9ICisKK2NsYXNzIE1ldGFmaWxlIDogcHVibGljIEltYWdlCit7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIEltYWdlOworCisgICAgLy8gUmVhZCBhIG1ldGFmaWxlCisgICAgTWV0YWZpbGUoKQorICAgIHsKKyAgICAgICAgU2V0TmF0aXZlSW1hZ2UoTlVMTCk7CisgICAgICAgIGxhc3RSZXN1bHQgPSBPazsKKyAgICB9CisKKyAgICAvLyBQbGF5YmFjayBhIG1ldGFmaWxlIGZyb20gYSBITUVUQUZJTEUKKyAgICAvLyBJZiBkZWxldGVXbWYgaXMgVFJVRSwgdGhlbiB3aGVuIHRoZSBtZXRhZmlsZSBpcyBkZWxldGVkLAorICAgIC8vIHRoZSBoV21mIHdpbGwgYWxzbyBiZSBkZWxldGVkLiAgT3RoZXJ3aXNlLCBpdCB3b24ndCBiZS4KKyAgICBNZXRhZmlsZShJTiBITUVUQUZJTEUgaFdtZiwKKyAgICAgICAgICAgICBJTiBjb25zdCBBUE1GaWxlSGVhZGVyICogYXBtRmlsZUhlYWRlciwKKyAgICAgICAgICAgICBJTiBCT09MIGRlbGV0ZVdtZiA9IEZBTFNFKQorICAgIHsKKyAgICAgICAgR3BNZXRhZmlsZSAqICAgIG1ldGFmaWxlID0gTlVMTDsKKworICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZU1ldGFmaWxlRnJvbVdtZihoV21mLCBkZWxldGVXbWYsIGFwbUZpbGVIZWFkZXIsICZtZXRhZmlsZSk7CisKKyAgICAgICAgU2V0TmF0aXZlSW1hZ2UobWV0YWZpbGUpOworICAgIH0KKworICAgIC8vIFBsYXliYWNrIGEgbWV0YWZpbGUgZnJvbSBhIEhFTkhNRVRBRklMRQorICAgIC8vIElmIGRlbGV0ZUVtZiBpcyBUUlVFLCB0aGVuIHdoZW4gdGhlIG1ldGFmaWxlIGlzIGRlbGV0ZWQsCisgICAgLy8gdGhlIGhFbWYgd2lsbCBhbHNvIGJlIGRlbGV0ZWQuICBPdGhlcndpc2UsIGl0IHdvbid0IGJlLgorICAgIE1ldGFmaWxlKElOIEhFTkhNRVRBRklMRSBoRW1mLAorICAgICAgICAgICAgIElOIEJPT0wgZGVsZXRlRW1mID0gRkFMU0UpCisgICAgeworICAgICAgICBHcE1ldGFmaWxlICogICAgbWV0YWZpbGUgPSBOVUxMOworCisgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlTWV0YWZpbGVGcm9tRW1mKGhFbWYsIGRlbGV0ZUVtZiwgJm1ldGFmaWxlKTsKKworICAgICAgICBTZXROYXRpdmVJbWFnZShtZXRhZmlsZSk7CisgICAgfQorCisgICAgLy8gUGxheWJhY2sgYSBtZXRhZmlsZSBmcm9tIGEgZmlsZQorICAgIE1ldGFmaWxlKElOIGNvbnN0IFdDSEFSKiBmaWxlbmFtZSkKKyAgICB7CisgICAgICAgIEdwTWV0YWZpbGUgKiAgICBtZXRhZmlsZSA9IE5VTEw7CisKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVNZXRhZmlsZUZyb21GaWxlKGZpbGVuYW1lLCAmbWV0YWZpbGUpOworCisgICAgICAgIFNldE5hdGl2ZUltYWdlKG1ldGFmaWxlKTsKKyAgICB9CisKKyAgICAvLyBQbGF5YmFjayBhIFdNRiBtZXRhZmlsZSBmcm9tIGEgZmlsZQorICAgIE1ldGFmaWxlKElOIGNvbnN0IFdDSEFSKiBmaWxlbmFtZSwKKyAgICAgICAgICAgICBJTiBjb25zdCBBUE1GaWxlSGVhZGVyICogYXBtRmlsZUhlYWRlcgorICAgICAgICAgICAgKQorICAgIHsKKyAgICAgICAgR3BNZXRhZmlsZSAqICAgIG1ldGFmaWxlID0gTlVMTDsKKworICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZU1ldGFmaWxlRnJvbVdtZkZpbGUoZmlsZW5hbWUsIGFwbUZpbGVIZWFkZXIsICZtZXRhZmlsZSk7CisKKyAgICAgICAgU2V0TmF0aXZlSW1hZ2UobWV0YWZpbGUpOworICAgIH0KKworICAgIC8vIFBsYXliYWNrIGEgbWV0YWZpbGUgZnJvbSBhIHN0cmVhbQorICAgIE1ldGFmaWxlKElOIElTdHJlYW0qIHN0cmVhbSkKKyAgICB7CisgICAgICAgIEdwTWV0YWZpbGUgKiAgICBtZXRhZmlsZSA9IE5VTEw7CisKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVNZXRhZmlsZUZyb21TdHJlYW0oc3RyZWFtLCAmbWV0YWZpbGUpOworCisgICAgICAgIFNldE5hdGl2ZUltYWdlKG1ldGFmaWxlKTsKKyAgICB9CisKKyAgICAvLyBSZWNvcmQgYSBtZXRhZmlsZSB0byBtZW1vcnkKKyAgICBNZXRhZmlsZSgKKyAgICAgICAgSU4gSERDICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsCisgICAgICAgIElOIEVtZlR5cGUgICAgICAgICAgICAgdHlwZSAgICAgICAgPSBFbWZUeXBlRW1mUGx1c0R1YWwsCisgICAgICAgIElOIGNvbnN0IFdDSEFSICogICAgICAgZGVzY3JpcHRpb24gPSBOVUxMCisgICAgICAgICkKKyAgICB7CisgICAgICAgIEdwTWV0YWZpbGUgKiAgICBtZXRhZmlsZSA9IE5VTEw7CisKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBSZWNvcmRNZXRhZmlsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhkYywgdHlwZSwgTlVMTCwgTWV0YWZpbGVGcmFtZVVuaXRHZGksCisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiwgJm1ldGFmaWxlKTsKKworICAgICAgICBTZXROYXRpdmVJbWFnZShtZXRhZmlsZSk7CisgICAgfQorCisgICAgLy8gUmVjb3JkIGEgbWV0YWZpbGUgdG8gbWVtb3J5CisgICAgTWV0YWZpbGUoCisgICAgICAgIElOIEhEQyAgICAgICAgICAgICAgICAgcmVmZXJlbmNlSGRjLAorICAgICAgICBJTiBjb25zdCBSZWN0RiAmICAgICAgIGZyYW1lUmVjdCwKKyAgICAgICAgSU4gTWV0YWZpbGVGcmFtZVVuaXQgICBmcmFtZVVuaXQgICA9IE1ldGFmaWxlRnJhbWVVbml0R2RpLAorICAgICAgICBJTiBFbWZUeXBlICAgICAgICAgICAgIHR5cGUgICAgICAgID0gRW1mVHlwZUVtZlBsdXNEdWFsLAorICAgICAgICBJTiBjb25zdCBXQ0hBUiAqICAgICAgIGRlc2NyaXB0aW9uID0gTlVMTAorICAgICAgICApCisgICAgeworICAgICAgICBHcE1ldGFmaWxlICogICAgbWV0YWZpbGUgPSBOVUxMOworCisgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwUmVjb3JkTWV0YWZpbGUoCisgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsIHR5cGUsICZmcmFtZVJlY3QsIGZyYW1lVW5pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLCAmbWV0YWZpbGUpOworCisgICAgICAgIFNldE5hdGl2ZUltYWdlKG1ldGFmaWxlKTsKKyAgICB9CisKKyAgICAvLyBSZWNvcmQgYSBtZXRhZmlsZSB0byBtZW1vcnkKKyAgICBNZXRhZmlsZSgKKyAgICAgICAgSU4gSERDICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsCisgICAgICAgIElOIGNvbnN0IFJlY3QgJiAgICAgICAgZnJhbWVSZWN0LAorICAgICAgICBJTiBNZXRhZmlsZUZyYW1lVW5pdCAgIGZyYW1lVW5pdCAgID0gTWV0YWZpbGVGcmFtZVVuaXRHZGksCisgICAgICAgIElOIEVtZlR5cGUgICAgICAgICAgICAgdHlwZSAgICAgICAgPSBFbWZUeXBlRW1mUGx1c0R1YWwsCisgICAgICAgIElOIGNvbnN0IFdDSEFSICogICAgICAgZGVzY3JpcHRpb24gPSBOVUxMCisgICAgICAgICkKKyAgICB7CisgICAgICAgIEdwTWV0YWZpbGUgKiAgICBtZXRhZmlsZSA9IE5VTEw7CisKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBSZWNvcmRNZXRhZmlsZUkoCisgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsIHR5cGUsICZmcmFtZVJlY3QsIGZyYW1lVW5pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLCAmbWV0YWZpbGUpOworCisgICAgICAgIFNldE5hdGl2ZUltYWdlKG1ldGFmaWxlKTsKKyAgICB9CisKKyAgICAvLyBSZWNvcmQgYSBtZXRhZmlsZSB0byBhIGZpbGUKKyAgICBNZXRhZmlsZSgKKyAgICAgICAgSU4gY29uc3QgV0NIQVIqICAgICAgICBmaWxlTmFtZSwKKyAgICAgICAgSU4gSERDICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsCisgICAgICAgIElOIEVtZlR5cGUgICAgICAgICAgICAgdHlwZSAgICAgICAgPSBFbWZUeXBlRW1mUGx1c0R1YWwsCisgICAgICAgIElOIGNvbnN0IFdDSEFSICogICAgICAgZGVzY3JpcHRpb24gPSBOVUxMCisgICAgICAgICkKKyAgICB7CisgICAgICAgIEdwTWV0YWZpbGUgKiAgICBtZXRhZmlsZSA9IE5VTEw7CisKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBSZWNvcmRNZXRhZmlsZUZpbGVOYW1lKGZpbGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlSGRjLCB0eXBlLCBOVUxMLCBNZXRhZmlsZUZyYW1lVW5pdEdkaSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLCAmbWV0YWZpbGUpOworCisgICAgICAgIFNldE5hdGl2ZUltYWdlKG1ldGFmaWxlKTsKKyAgICB9CisKKyAgICAvLyBSZWNvcmQgYSBtZXRhZmlsZSB0byBhIGZpbGUKKyAgICBNZXRhZmlsZSgKKyAgICAgICAgSU4gY29uc3QgV0NIQVIqICAgICAgICBmaWxlTmFtZSwKKyAgICAgICAgSU4gSERDICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsCisgICAgICAgIElOIGNvbnN0IFJlY3RGICYgICAgICAgZnJhbWVSZWN0LAorICAgICAgICBJTiBNZXRhZmlsZUZyYW1lVW5pdCAgIGZyYW1lVW5pdCAgID0gTWV0YWZpbGVGcmFtZVVuaXRHZGksCisgICAgICAgIElOIEVtZlR5cGUgICAgICAgICAgICAgdHlwZSAgICAgICAgPSBFbWZUeXBlRW1mUGx1c0R1YWwsCisgICAgICAgIElOIGNvbnN0IFdDSEFSICogICAgICAgZGVzY3JpcHRpb24gPSBOVUxMCisgICAgICAgICkKKyAgICB7CisgICAgICAgIEdwTWV0YWZpbGUgKiAgICBtZXRhZmlsZSA9IE5VTEw7CisKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBSZWNvcmRNZXRhZmlsZUZpbGVOYW1lKGZpbGVOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlSGRjLCB0eXBlLCAmZnJhbWVSZWN0LCBmcmFtZVVuaXQsCisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiwgJm1ldGFmaWxlKTsKKworICAgICAgICBTZXROYXRpdmVJbWFnZShtZXRhZmlsZSk7CisgICAgfQorCisgICAgLy8gUmVjb3JkIGEgbWV0YWZpbGUgdG8gYSBmaWxlCisgICAgTWV0YWZpbGUoCisgICAgICAgIElOIGNvbnN0IFdDSEFSKiAgICAgICAgZmlsZU5hbWUsCisgICAgICAgIElOIEhEQyAgICAgICAgICAgICAgICAgcmVmZXJlbmNlSGRjLAorICAgICAgICBJTiBjb25zdCBSZWN0ICYgICAgICAgIGZyYW1lUmVjdCwKKyAgICAgICAgSU4gTWV0YWZpbGVGcmFtZVVuaXQgICBmcmFtZVVuaXQgICA9IE1ldGFmaWxlRnJhbWVVbml0R2RpLAorICAgICAgICBJTiBFbWZUeXBlICAgICAgICAgICAgIHR5cGUgICAgICAgID0gRW1mVHlwZUVtZlBsdXNEdWFsLAorICAgICAgICBJTiBjb25zdCBXQ0hBUiAqICAgICAgIGRlc2NyaXB0aW9uID0gTlVMTAorICAgICAgICApCisgICAgeworICAgICAgICBHcE1ldGFmaWxlICogICAgbWV0YWZpbGUgPSBOVUxMOworCisgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwUmVjb3JkTWV0YWZpbGVGaWxlTmFtZUkoZmlsZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsIHR5cGUsICZmcmFtZVJlY3QsIGZyYW1lVW5pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLCAmbWV0YWZpbGUpOworCisgICAgICAgIFNldE5hdGl2ZUltYWdlKG1ldGFmaWxlKTsKKyAgICB9CisKKyAgICAvLyBSZWNvcmQgYSBtZXRhZmlsZSB0byBhIHN0cmVhbQorICAgIE1ldGFmaWxlKAorICAgICAgICBJTiBJU3RyZWFtICogICAgICAgICAgIHN0cmVhbSwKKyAgICAgICAgSU4gSERDICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsCisgICAgICAgIElOIEVtZlR5cGUgICAgICAgICAgICAgdHlwZSAgICAgICAgPSBFbWZUeXBlRW1mUGx1c0R1YWwsCisgICAgICAgIElOIGNvbnN0IFdDSEFSICogICAgICAgZGVzY3JpcHRpb24gPSBOVUxMCisgICAgICAgICkKKyAgICB7CisgICAgICAgIEdwTWV0YWZpbGUgKiAgICBtZXRhZmlsZSA9IE5VTEw7CisKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBSZWNvcmRNZXRhZmlsZVN0cmVhbShzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsIHR5cGUsIE5VTEwsIE1ldGFmaWxlRnJhbWVVbml0R2RpLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sICZtZXRhZmlsZSk7CisKKyAgICAgICAgU2V0TmF0aXZlSW1hZ2UobWV0YWZpbGUpOworICAgIH0KKworICAgIC8vIFJlY29yZCBhIG1ldGFmaWxlIHRvIGEgc3RyZWFtCisgICAgTWV0YWZpbGUoCisgICAgICAgIElOIElTdHJlYW0gKiAgICAgICAgICAgc3RyZWFtLAorICAgICAgICBJTiBIREMgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhkYywKKyAgICAgICAgSU4gY29uc3QgUmVjdEYgJiAgICAgICBmcmFtZVJlY3QsCisgICAgICAgIElOIE1ldGFmaWxlRnJhbWVVbml0ICAgZnJhbWVVbml0ICAgPSBNZXRhZmlsZUZyYW1lVW5pdEdkaSwKKyAgICAgICAgSU4gRW1mVHlwZSAgICAgICAgICAgICB0eXBlICAgICAgICA9IEVtZlR5cGVFbWZQbHVzRHVhbCwKKyAgICAgICAgSU4gY29uc3QgV0NIQVIgKiAgICAgICBkZXNjcmlwdGlvbiA9IE5VTEwKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgR3BNZXRhZmlsZSAqICAgIG1ldGFmaWxlID0gTlVMTDsKKworICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcFJlY29yZE1ldGFmaWxlU3RyZWFtKHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhkYywgdHlwZSwgJmZyYW1lUmVjdCwgZnJhbWVVbml0LAorICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sICZtZXRhZmlsZSk7CisKKyAgICAgICAgU2V0TmF0aXZlSW1hZ2UobWV0YWZpbGUpOworICAgIH0KKworICAgIC8vIFdyaXRlIGEgbWV0YWZpbGUgdG8gYSBzdHJlYW0gd2l0aCBkb3duLWxldmVsIEdESSByZWNvcmRzCisgICAgTWV0YWZpbGUoCisgICAgICAgIElOIElTdHJlYW0gKiAgICAgICAgICAgc3RyZWFtLAorICAgICAgICBJTiBIREMgICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhkYywKKyAgICAgICAgSU4gY29uc3QgUmVjdCAmICAgICAgICBmcmFtZVJlY3QsCisgICAgICAgIElOIE1ldGFmaWxlRnJhbWVVbml0ICAgZnJhbWVVbml0ICAgPSBNZXRhZmlsZUZyYW1lVW5pdEdkaSwKKyAgICAgICAgSU4gRW1mVHlwZSAgICAgICAgICAgICB0eXBlICAgICAgICA9IEVtZlR5cGVFbWZQbHVzRHVhbCwKKyAgICAgICAgSU4gY29uc3QgV0NIQVIgKiAgICAgICBkZXNjcmlwdGlvbiA9IE5VTEwKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgR3BNZXRhZmlsZSAqICAgIG1ldGFmaWxlID0gTlVMTDsKKworICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcFJlY29yZE1ldGFmaWxlU3RyZWFtSShzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VIZGMsIHR5cGUsICZmcmFtZVJlY3QsIGZyYW1lVW5pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLCAmbWV0YWZpbGUpOworCisgICAgICAgIFNldE5hdGl2ZUltYWdlKG1ldGFmaWxlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RhdHVzIEdldE1ldGFmaWxlSGVhZGVyKAorICAgICAgICBJTiBITUVUQUZJTEUgICAgICAgICAgIGhXbWYsCisgICAgICAgIElOIGNvbnN0IEFQTUZpbGVIZWFkZXIgKiAgICAgYXBtRmlsZUhlYWRlciwKKyAgICAgICAgT1VUIE1ldGFmaWxlSGVhZGVyICogICBoZWFkZXIKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERsbEV4cG9ydHM6OkdkaXBHZXRNZXRhZmlsZUhlYWRlckZyb21XbWYoaFdtZiwgYXBtRmlsZUhlYWRlciwgaGVhZGVyKTsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RhdHVzIEdldE1ldGFmaWxlSGVhZGVyKAorICAgICAgICBJTiBIRU5ITUVUQUZJTEUgICAgICAgIGhFbWYsCisgICAgICAgIE9VVCBNZXRhZmlsZUhlYWRlciAqICAgaGVhZGVyCisgICAgICAgICkKKyAgICB7CisgICAgICAgIHJldHVybiBEbGxFeHBvcnRzOjpHZGlwR2V0TWV0YWZpbGVIZWFkZXJGcm9tRW1mKGhFbWYsIGhlYWRlcik7CisgICAgfQorCisgICAgc3RhdGljIFN0YXR1cyBHZXRNZXRhZmlsZUhlYWRlcigKKyAgICAgICAgSU4gY29uc3QgV0NIQVIqICAgICAgICBmaWxlbmFtZSwKKyAgICAgICAgT1VUIE1ldGFmaWxlSGVhZGVyICogICBoZWFkZXIKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIERsbEV4cG9ydHM6OkdkaXBHZXRNZXRhZmlsZUhlYWRlckZyb21GaWxlKGZpbGVuYW1lLCBoZWFkZXIpOworICAgIH0KKworICAgIHN0YXRpYyBTdGF0dXMgR2V0TWV0YWZpbGVIZWFkZXIoCisgICAgICAgIElOIElTdHJlYW0gKiAgICAgICAgICAgc3RyZWFtLAorICAgICAgICBPVVQgTWV0YWZpbGVIZWFkZXIgKiAgIGhlYWRlcgorICAgICAgICApCisgICAgeworICAgICAgICByZXR1cm4gRGxsRXhwb3J0czo6R2RpcEdldE1ldGFmaWxlSGVhZGVyRnJvbVN0cmVhbShzdHJlYW0sIGhlYWRlcik7CisgICAgfQorCisgICAgU3RhdHVzIEdldE1ldGFmaWxlSGVhZGVyKAorICAgICAgICBPVVQgTWV0YWZpbGVIZWFkZXIgKiAgICBoZWFkZXIKKyAgICAgICAgKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0TWV0YWZpbGVIZWFkZXJGcm9tTWV0YWZpbGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwTWV0YWZpbGUgKiluYXRpdmVJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIpKTsKKyAgICB9CisKKyAgICAvLyBPbmNlIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgdGhlIE1ldGFmaWxlIG9iamVjdCBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlCisgICAgLy8gYW5kIGNhbiBubyBsb25nZXIgYmUgdXNlZC4gIEl0IGlzIHRoZSByZXNwb25zaWJsaXR5IG9mIHRoZSBjYWxsZXIgdG8KKyAgICAvLyBpbnZva2UgRGVsZXRlRW5oTWV0YUZpbGUgdG8gZGVsZXRlIHRoaXMgaEVtZi4KKworICAgIEhFTkhNRVRBRklMRSBHZXRIRU5ITUVUQUZJTEUoKQorICAgIHsKKyAgICAgICAgSEVOSE1FVEFGSUxFIGhFbWY7CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRIZW1mRnJvbU1ldGFmaWxlKChHcE1ldGFmaWxlICopbmF0aXZlSW1hZ2UsICZoRW1mKSk7CisKKyAgICAgICAgcmV0dXJuIGhFbWY7CisgICAgfQorCisgICAgLy8gVXNlZCBpbiBjb25qdWN0aW9uIHdpdGggR3JhcGhpY3M6OkVudW1lcmF0ZU1ldGFmaWxlIHRvIHBsYXkgYW4gRU1GKworICAgIC8vIFRoZSBkYXRhIG11c3QgYmUgRFdPUkQgYWxpZ25lZCBpZiBpdCdzIGFuIEVNRiBvciBFTUYrLiAgSXQgbXVzdCBiZQorICAgIC8vIFdPUkQgYWxpZ25lZCBpZiBpdCdzIGEgV01GLgorICAgIFN0YXR1cworICAgIFBsYXlSZWNvcmQoCisgICAgICAgIElOIEVtZlBsdXNSZWNvcmRUeXBlICAgcmVjb3JkVHlwZSwKKyAgICAgICAgSU4gVUlOVCAgICAgICAgICAgICAgICBmbGFncywKKyAgICAgICAgSU4gVUlOVCAgICAgICAgICAgICAgICBkYXRhU2l6ZSwKKyAgICAgICAgSU4gY29uc3QgQllURSAqICAgICAgICBkYXRhCisgICAgICAgICkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFBsYXlNZXRhZmlsZVJlY29yZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwTWV0YWZpbGUgKiluYXRpdmVJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKSk7CisgICAgfQorCisgICAgLy8gSWYgeW91J3JlIHVzaW5nIGEgcHJpbnRlciBIREMgZm9yIHRoZSBtZXRhZmlsZSwgYnV0IHlvdSB3YW50IHRoZQorICAgIC8vIG1ldGFmaWxlIHJhc3Rlcml6ZWQgYXQgc2NyZWVuIHJlc29sdXRpb24sIHRoZW4gdXNlIHRoaXMgQVBJIHRvIHNldAorICAgIC8vIHRoZSByYXN0ZXJpemF0aW9uIGRwaSBvZiB0aGUgbWV0YWZpbGUgdG8gdGhlIHNjcmVlbiByZXNvbHV0aW9uLAorICAgIC8vIGUuZy4gOTYgZHBpIG9yIDEyMCBkcGkuCisgICAgU3RhdHVzIFNldERvd25MZXZlbFJhc3Rlcml6YXRpb25MaW1pdCgKKyAgICAgICAgSU4gVUlOVCAgICAgbWV0YWZpbGVSYXN0ZXJpemF0aW9uTGltaXREcGkKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0TWV0YWZpbGVEb3duTGV2ZWxSYXN0ZXJpemF0aW9uTGltaXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHcE1ldGFmaWxlICopbmF0aXZlSW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFmaWxlUmFzdGVyaXphdGlvbkxpbWl0RHBpKSk7CisgICAgfQorCisgICAgVUlOVCBHZXREb3duTGV2ZWxSYXN0ZXJpemF0aW9uTGltaXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgVUlOVCAgICBtZXRhZmlsZVJhc3Rlcml6YXRpb25MaW1pdERwaSA9IDA7CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRNZXRhZmlsZURvd25MZXZlbFJhc3Rlcml6YXRpb25MaW1pdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwTWV0YWZpbGUgKiluYXRpdmVJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1ldGFmaWxlUmFzdGVyaXphdGlvbkxpbWl0RHBpKSk7CisKKyAgICAgICAgcmV0dXJuIG1ldGFmaWxlUmFzdGVyaXphdGlvbkxpbWl0RHBpOworICAgIH0KKworICAgIHN0YXRpYyBVSU5UIE1ldGFmaWxlOjpFbWZUb1dtZkJpdHMoCisgICAgICAgIElOIEhFTkhNRVRBRklMRSAgICAgICBoZW1mLAorICAgICAgICBJTiBVSU5UICAgICAgICAgICAgICAgY2JEYXRhMTYsCisgICAgICAgIElOIExQQllURSAgICAgICAgICAgICBwRGF0YTE2LAorICAgICAgICBJTiBJTlQgICAgICAgICAgICAgICAgaU1hcE1vZGUgPSBNTV9BTklTT1RST1BJQywKKyAgICAgICAgSU4gRW1mVG9XbWZCaXRzRmxhZ3MgIGVGbGFncyA9IEVtZlRvV21mQml0c0ZsYWdzRGVmYXVsdAorICAgICkKKyAgICB7CisgICAgICAgIHJldHVybiBEbGxFeHBvcnRzOjpHZGlwRW1mVG9XbWZCaXRzKAorICAgICAgICAgICAgaGVtZiwKKyAgICAgICAgICAgIGNiRGF0YTE2LAorICAgICAgICAgICAgcERhdGExNiwKKyAgICAgICAgICAgIGlNYXBNb2RlLAorICAgICAgICAgICAgZUZsYWdzKTsKKyAgICB9CisKKyNpZmRlZiBEQ1JfVVNFX05FV18yNTA5MzIKKworcHJpdmF0ZToKKyAgICBNZXRhZmlsZShjb25zdCBNZXRhZmlsZSAmKTsKKyAgICBNZXRhZmlsZSYgb3BlcmF0b3I9KGNvbnN0IE1ldGFmaWxlICYpOworCisjZW5kaWYKK307CisKKyNlbmRpZiAvLyAhX01FVEFGSUxFX0gKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNNZXRhSGVhZGVyLmggYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzTWV0YUhlYWRlci5oCmluZGV4IDc5YjViYzkuLjk1ZWUxOTAgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNNZXRhSGVhZGVyLmgKKysrIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c01ldGFIZWFkZXIuaApAQCAtMSwyMTMgKzEsMjEzIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcDQotKg0KLSogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsIE1pY3Jvc29mdCBDb3JwLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0qDQotKiBNb2R1bGUgTmFtZToNCi0qDQotKiAgIE1ldGFmaWxlIGhlYWRlcnMNCi0qDQotKiBBYnN0cmFjdDoNCi0qDQotKiAgIERlY2xhcmF0aW9ucyBmb3IgdmFyaW91cyBtZXRhZmlsZSBoZWFkZXIgc3RydWN0dXJlcy4NCi0qDQotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLSNpZm5kZWYgX0dESVBMVVNNRVRBSEVBREVSX0gNCi0jZGVmaW5lIF9HRElQTFVTTUVUQUhFQURFUl9IDQotDQotdHlwZWRlZiBzdHJ1Y3QNCi17DQotICAgIERXT1JEICAgaVR5cGU7ICAgICAgICAgICAgICAvLyBSZWNvcmQgdHlwZSBFTVJfSEVBREVSDQotICAgIERXT1JEICAgblNpemU7ICAgICAgICAgICAgICAvLyBSZWNvcmQgc2l6ZSBpbiBieXRlcy4gIFRoaXMgbWF5IGJlIGdyZWF0ZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYW4gdGhlIHNpemVvZihFTkhNRVRBSEVBREVSKS4NCi0gICAgUkVDVEwgICByY2xCb3VuZHM7ICAgICAgICAgIC8vIEluY2x1c2l2ZS1pbmNsdXNpdmUgYm91bmRzIGluIGRldmljZSB1bml0cw0KLSAgICBSRUNUTCAgIHJjbEZyYW1lOyAgICAgICAgICAgLy8gSW5jbHVzaXZlLWluY2x1c2l2ZSBQaWN0dXJlIEZyYW1lIG9mIG1ldGFmaWxlIGluIC4wMSBtbSB1bml0cw0KLSAgICBEV09SRCAgIGRTaWduYXR1cmU7ICAgICAgICAgLy8gU2lnbmF0dXJlLiAgTXVzdCBiZSBFTkhNRVRBX1NJR05BVFVSRS4NCi0gICAgRFdPUkQgICBuVmVyc2lvbjsgICAgICAgICAgIC8vIFZlcnNpb24gbnVtYmVyDQotICAgIERXT1JEICAgbkJ5dGVzOyAgICAgICAgICAgICAvLyBTaXplIG9mIHRoZSBtZXRhZmlsZSBpbiBieXRlcw0KLSAgICBEV09SRCAgIG5SZWNvcmRzOyAgICAgICAgICAgLy8gTnVtYmVyIG9mIHJlY29yZHMgaW4gdGhlIG1ldGFmaWxlDQotICAgIFdPUkQgICAgbkhhbmRsZXM7ICAgICAgICAgICAvLyBOdW1iZXIgb2YgaGFuZGxlcyBpbiB0aGUgaGFuZGxlIHRhYmxlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIYW5kbGUgaW5kZXggemVybyBpcyByZXNlcnZlZC4NCi0gICAgV09SRCAgICBzUmVzZXJ2ZWQ7ICAgICAgICAgIC8vIFJlc2VydmVkLiAgTXVzdCBiZSB6ZXJvLg0KLSAgICBEV09SRCAgIG5EZXNjcmlwdGlvbjsgICAgICAgLy8gTnVtYmVyIG9mIGNoYXJzIGluIHRoZSB1bmljb2RlIGRlc2NyaXB0aW9uIHN0cmluZw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyAwIGlmIHRoZXJlIGlzIG5vIGRlc2NyaXB0aW9uIHN0cmluZw0KLSAgICBEV09SRCAgIG9mZkRlc2NyaXB0aW9uOyAgICAgLy8gT2Zmc2V0IHRvIHRoZSBtZXRhZmlsZSBkZXNjcmlwdGlvbiByZWNvcmQuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIDAgaWYgdGhlcmUgaXMgbm8gZGVzY3JpcHRpb24gc3RyaW5nDQotICAgIERXT1JEICAgblBhbEVudHJpZXM7ICAgICAgICAvLyBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgbWV0YWZpbGUgcGFsZXR0ZS4NCi0gICAgU0laRUwgICBzemxEZXZpY2U7ICAgICAgICAgIC8vIFNpemUgb2YgdGhlIHJlZmVyZW5jZSBkZXZpY2UgaW4gcGVscw0KLSAgICBTSVpFTCAgIHN6bE1pbGxpbWV0ZXJzOyAgICAgLy8gU2l6ZSBvZiB0aGUgcmVmZXJlbmNlIGRldmljZSBpbiBtaWxsaW1ldGVycw0KLX0gRU5ITUVUQUhFQURFUjM7DQotDQotLy8gQWxkdXMgUGxhY2VhYmxlIE1ldGFmaWxlcw0KLQ0KLS8vIFBsYWNlYWJsZSBNZXRhZmlsZXMgd2VyZSBjcmVhdGVkIGJ5IEFsZHVzIENvcnBvcmF0aW9uIGFzIGEgbm9uLXN0YW5kYXJkDQotLy8gd2F5IG9mIHNwZWNpZnlpbmcgaG93IGEgbWV0YWZpbGUgaXMgbWFwcGVkIGFuZCBzY2FsZWQgb24gYW4gb3V0cHV0IGRldmljZS4NCi0vLyBQbGFjZWFibGUgbWV0YWZpbGVzIGFyZSBxdWl0ZSB3aWRlLXNwcmVhZCwgYnV0IG5vdCBkaXJlY3RseSBzdXBwb3J0ZWQgYnkNCi0vLyB0aGUgV2luZG93cyBBUEkuIFRvIHBsYXliYWNrIGEgcGxhY2VhYmxlIG1ldGFmaWxlIHVzaW5nIHRoZSBXaW5kb3dzIEFQSSwNCi0vLyB5b3Ugd2lsbCBmaXJzdCBuZWVkIHRvIHN0cmlwIHRoZSBwbGFjZWFibGUgbWV0YWZpbGUgaGVhZGVyIGZyb20gdGhlIGZpbGUuDQotLy8gVGhpcyBpcyB0eXBpY2FsbHkgcGVyZm9ybWVkIGJ5IGNvcHlpbmcgdGhlIG1ldGFmaWxlIHRvIGEgdGVtcG9yYXJ5IGZpbGUNCi0vLyBzdGFydGluZyBhdCBmaWxlIG9mZnNldCAyMiAoMHgxNikuIFRoZSBjb250ZW50cyBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUgbWF5DQotLy8gdGhlbiBiZSB1c2VkIGFzIGlucHV0IHRvIHRoZSBXaW5kb3dzIEdldE1ldGFGaWxlKCksIFBsYXlNZXRhRmlsZSgpLA0KLS8vIENvcHlNZXRhRmlsZSgpLCBldGMuIEdESSBmdW5jdGlvbnMuDQotDQotLy8gRWFjaCBwbGFjZWFibGUgbWV0YWZpbGUgYmVnaW5zIHdpdGggYSAyMi1ieXRlIGhlYWRlciwNCi0vLyAgZm9sbG93ZWQgYnkgYSBzdGFuZGFyZCBtZXRhZmlsZToNCi0NCi0jaW5jbHVkZSA8cHNocGFjazIuaD4gICAvLyBzZXQgc3RydWN0dXJlIHBhY2tpbmcgdG8gMg0KLQ0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICBJTlQxNiAgICAgICAgICAgTGVmdDsNCi0gICAgSU5UMTYgICAgICAgICAgIFRvcDsNCi0gICAgSU5UMTYgICAgICAgICAgIFJpZ2h0Ow0KLSAgICBJTlQxNiAgICAgICAgICAgQm90dG9tOw0KLX0gQVBNUmVjdDE2Ow0KLQ0KLXR5cGVkZWYgc3RydWN0DQotew0KLSAgICBVSU5UMzIgICAgICAgICAgS2V5OyAgICAgICAgICAgIC8vIEdESVBfV01GX0FMRFVTS0VZDQotICAgIElOVDE2ICAgICAgICAgICBIbWY7ICAgICAgICAgICAgLy8gTWV0YWZpbGUgSEFORExFIG51bWJlciAoYWx3YXlzIDApDQotICAgIEFQTVJlY3QxNiAgICAgICBCb3VuZGluZ0JveDsgICAgLy8gQ29vcmRpbmF0ZXMgaW4gbWV0YWZpbGUgdW5pdHMNCi0gICAgSU5UMTYgICAgICAgICAgIEluY2g7ICAgICAgICAgICAvLyBOdW1iZXIgb2YgbWV0YWZpbGUgdW5pdHMgcGVyIGluY2gNCi0gICAgVUlOVDMyICAgICAgICAgIFJlc2VydmVkOyAgICAgICAvLyBSZXNlcnZlZCAoYWx3YXlzIDApDQotICAgIElOVDE2ICAgICAgICAgICBDaGVja3N1bTsgICAgICAgLy8gQ2hlY2tzdW0gdmFsdWUgZm9yIHByZXZpb3VzIDEwIFdPUkRzDQotfSBBUE1GaWxlSGVhZGVyOw0KLQ0KLSNpbmNsdWRlIDxwb3BwYWNrLmg+DQotDQotLy8gS2V5IGNvbnRhaW5zIGEgc3BlY2lhbCBpZGVudGlmaWNhdGlvbiB2YWx1ZSB0aGF0IGluZGljYXRlcyB0aGUgcHJlc2VuY2UNCi0vLyBvZiBhIHBsYWNlYWJsZSBtZXRhZmlsZSBoZWFkZXIgYW5kIGlzIGFsd2F5cyAweDlBQzZDREQ3Lg0KLQ0KLS8vIEhhbmRsZSBpcyB1c2VkIHRvIHN0b3JlZCB0aGUgaGFuZGxlIG9mIHRoZSBtZXRhZmlsZSBpbiBtZW1vcnkuIFdoZW4gd3JpdHRlbg0KLS8vIHRvIGRpc2ssIHRoaXMgZmllbGQgaXMgbm90IHVzZWQgYW5kIHdpbGwgYWx3YXlzIGNvbnRhaW5zIHRoZSB2YWx1ZSAwLg0KLQ0KLS8vIExlZnQsIFRvcCwgUmlnaHQsIGFuZCBCb3R0b20gY29udGFpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHVwcGVyLWxlZnQNCi0vLyBhbmQgbG93ZXItcmlnaHQgY29ybmVycyBvZiB0aGUgaW1hZ2Ugb24gdGhlIG91dHB1dCBkZXZpY2UuIFRoZXNlIGFyZQ0KLS8vIG1lYXN1cmVkIGluIHR3aXBzLg0KLQ0KLS8vIEEgdHdpcCAobWVhbmluZyAidHdlbnRpZXRoIG9mIGEgcG9pbnQiKSBpcyB0aGUgbG9naWNhbCB1bml0IG9mIG1lYXN1cmVtZW50DQotLy8gdXNlZCBpbiBXaW5kb3dzIE1ldGFmaWxlcy4gQSB0d2lwIGlzIGVxdWFsIHRvIDEvMTQ0MCBvZiBhbiBpbmNoLiBUaHVzIDcyMA0KLS8vIHR3aXBzIGVxdWFsIDEvMiBpbmNoLCB3aGlsZSAzMiw3NjggdHdpcHMgaXMgMjIuNzUgaW5jaGVzLg0KLQ0KLS8vIEluY2ggY29udGFpbnMgdGhlIG51bWJlciBvZiB0d2lwcyBwZXIgaW5jaCB1c2VkIHRvIHJlcHJlc2VudCB0aGUgaW1hZ2UuDQotLy8gTm9ybWFsbHksIHRoZXJlIGFyZSAxNDQwIHR3aXBzIHBlciBpbmNoOyBob3dldmVyLCB0aGlzIG51bWJlciBtYXkgYmUNCi0vLyBjaGFuZ2VkIHRvIHNjYWxlIHRoZSBpbWFnZS4gQSB2YWx1ZSBvZiA3MjAgaW5kaWNhdGVzIHRoYXQgdGhlIGltYWdlIGlzDQotLy8gZG91YmxlIGl0cyBub3JtYWwgc2l6ZSwgb3Igc2NhbGVkIHRvIGEgZmFjdG9yIG9mIDI6MS4gQSB2YWx1ZSBvZiAzNjANCi0vLyBpbmRpY2F0ZXMgYSBzY2FsZSBvZiA0OjEsIHdoaWxlIGEgdmFsdWUgb2YgMjg4MCBpbmRpY2F0ZXMgdGhhdCB0aGUgaW1hZ2UNCi0vLyBpcyBzY2FsZWQgZG93biBpbiBzaXplIGJ5IGEgZmFjdG9yIG9mIHR3by4gQSB2YWx1ZSBvZiAxNDQwIGluZGljYXRlcw0KLS8vIGEgMToxIHNjYWxlIHJhdGlvLg0KLQ0KLS8vIFJlc2VydmVkIGlzIG5vdCB1c2VkIGFuZCBpcyBhbHdheXMgc2V0IHRvIDAuDQotDQotLy8gQ2hlY2tzdW0gY29udGFpbnMgYSBjaGVja3N1bSB2YWx1ZSBmb3IgdGhlIHByZXZpb3VzIDEwIFdPUkRzIGluIHRoZSBoZWFkZXIuDQotLy8gVGhpcyB2YWx1ZSBjYW4gYmUgdXNlZCBpbiBhbiBhdHRlbXB0IHRvIGRldGVjdCBpZiB0aGUgbWV0YWZpbGUgaGFzIGJlY29tZQ0KLS8vIGNvcnJ1cHRlZC4gVGhlIGNoZWNrc3VtIGlzIGNhbGN1bGF0ZWQgYnkgWE9SaW5nIGVhY2ggV09SRCB2YWx1ZSB0byBhbg0KLS8vIGluaXRpYWwgdmFsdWUgb2YgMC4NCi0NCi0vLyBJZiB0aGUgbWV0YWZpbGUgd2FzIHJlY29yZGVkIHdpdGggYSByZWZlcmVuY2UgSGRjIHRoYXQgd2FzIGEgZGlzcGxheS4NCi0jZGVmaW5lIEdESVBfRU1GUExVU0ZMQUdTX0RJU1BMQVkgICAgICAgMHgwMDAwMDAwMQ0KLQ0KLWNsYXNzIE1ldGFmaWxlSGVhZGVyDQotew0KLXB1YmxpYzoNCi0gICAgTWV0YWZpbGVUeXBlICAgICAgICBUeXBlOw0KLSAgICBVSU5UICAgICAgICAgICAgICAgIFNpemU7ICAgICAgICAgICAgICAgLy8gU2l6ZSBvZiB0aGUgbWV0YWZpbGUgKGluIGJ5dGVzKQ0KLSAgICBVSU5UICAgICAgICAgICAgICAgIFZlcnNpb247ICAgICAgICAgICAgLy8gRU1GKywgRU1GLCBvciBXTUYgdmVyc2lvbg0KLSAgICBVSU5UICAgICAgICAgICAgICAgIEVtZlBsdXNGbGFnczsNCi0gICAgUkVBTCAgICAgICAgICAgICAgICBEcGlYOw0KLSAgICBSRUFMICAgICAgICAgICAgICAgIERwaVk7DQotICAgIElOVCAgICAgICAgICAgICAgICAgWDsgICAgICAgICAgICAgICAgICAvLyBCb3VuZHMgaW4gZGV2aWNlIHVuaXRzDQotICAgIElOVCAgICAgICAgICAgICAgICAgWTsNCi0gICAgSU5UICAgICAgICAgICAgICAgICBXaWR0aDsNCi0gICAgSU5UICAgICAgICAgICAgICAgICBIZWlnaHQ7DQotICAgIHVuaW9uDQotICAgIHsNCi0gICAgICAgIE1FVEFIRUFERVIgICAgICBXbWZIZWFkZXI7DQotICAgICAgICBFTkhNRVRBSEVBREVSMyAgRW1mSGVhZGVyOw0KLSAgICB9Ow0KLSAgICBJTlQgICAgICAgICAgICAgICAgIEVtZlBsdXNIZWFkZXJTaXplOyAgLy8gc2l6ZSBvZiB0aGUgRU1GKyBoZWFkZXIgaW4gZmlsZQ0KLSAgICBJTlQgICAgICAgICAgICAgICAgIExvZ2ljYWxEcGlYOyAgICAgICAgLy8gTG9naWNhbCBEcGkgb2YgcmVmZXJlbmNlIEhkYw0KLSAgICBJTlQgICAgICAgICAgICAgICAgIExvZ2ljYWxEcGlZOyAgICAgICAgLy8gdXN1YWxseSB2YWxpZCBvbmx5IGZvciBFTUYrIGZpbGVzDQotDQotcHVibGljOg0KLSAgICAvLyBHZXQgdGhlIG1ldGFmaWxlIHR5cGUNCi0gICAgTWV0YWZpbGVUeXBlIEdldFR5cGUoKSBjb25zdCB7IHJldHVybiBUeXBlOyB9DQotDQotICAgIC8vIEdldCB0aGUgc2l6ZSBvZiB0aGUgbWV0YWZpbGUgaW4gQllURXMNCi0gICAgVUlOVCBHZXRNZXRhZmlsZVNpemUoKSBjb25zdCB7IHJldHVybiBTaXplOyB9DQotDQotICAgIC8vIElmIElzRW1mUGx1cywgdGhpcyBpcyB0aGUgRU1GKyB2ZXJzaW9uOyBlbHNlIGl0IGlzIHRoZSBXTUYgb3IgRU1GIHZlcnNpb24NCi0gICAgVUlOVCBHZXRWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gVmVyc2lvbjsgfQ0KLQ0KLSAgICAvLyBHZXQgdGhlIEVNRisgZmxhZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXRhZmlsZQ0KLSAgICBVSU5UIEdldEVtZlBsdXNGbGFncygpIGNvbnN0IHsgcmV0dXJuIEVtZlBsdXNGbGFnczsgfQ0KLQ0KLSAgICAvLyBHZXQgdGhlIFggRHBpIG9mIHRoZSBtZXRhZmlsZQ0KLSAgICBSRUFMIEdldERwaVgoKSBjb25zdCB7IHJldHVybiBEcGlYOyB9DQotDQotICAgIC8vIEdldCB0aGUgWSBEcGkgb2YgdGhlIG1ldGFmaWxlDQotICAgIFJFQUwgR2V0RHBpWSgpIGNvbnN0IHsgcmV0dXJuIERwaVk7IH0NCi0NCi0gICAgLy8gR2V0IHRoZSBib3VuZHMgb2YgdGhlIG1ldGFmaWxlIGluIGRldmljZSB1bml0cw0KLSAgICBWT0lEIEdldEJvdW5kcyAoT1VUIFJlY3QgKnJlY3QpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJlY3QtPlggPSBYOw0KLSAgICAgICAgcmVjdC0+WSA9IFk7DQotICAgICAgICByZWN0LT5XaWR0aCA9IFdpZHRoOw0KLSAgICAgICAgcmVjdC0+SGVpZ2h0ID0gSGVpZ2h0Ow0KLSAgICB9DQotICAgIA0KLSAgICAvLyBJcyBpdCBhbnkgdHlwZSBvZiBXTUYgKHN0YW5kYXJkIG9yIEFsZHVzIFBsYWNlYWJsZSBNZXRhZmlsZSk/DQotICAgIEJPT0wgSXNXbWYoKSBjb25zdA0KLSAgICB7DQotICAgICAgIHJldHVybiAoKFR5cGUgPT0gTWV0YWZpbGVUeXBlV21mKSB8fCAoVHlwZSA9PSBNZXRhZmlsZVR5cGVXbWZBbGR1cykpOw0KLSAgICB9DQotDQotICAgIC8vIElzIHRoaXMgYW4gQWxkdXMgUGxhY2VhYmxlIE1ldGFmaWxlPw0KLSAgICBCT09MIElzV21mQWxkdXMoKSBjb25zdCB7IHJldHVybiAoVHlwZSA9PSBNZXRhZmlsZVR5cGVXbWYpOyB9DQotDQotICAgIC8vIElzIHRoaXMgYW4gRU1GIChub3QgYW4gRU1GKyk/DQotICAgIEJPT0wgSXNFbWYoKSBjb25zdCB7IHJldHVybiAoVHlwZSA9PSBNZXRhZmlsZVR5cGVFbWYpOyB9DQotDQotICAgIC8vIElzIHRoaXMgYW4gRU1GIG9yIEVNRisgZmlsZT8NCi0gICAgQk9PTCBJc0VtZk9yRW1mUGx1cygpIGNvbnN0IHsgcmV0dXJuIChUeXBlID49IE1ldGFmaWxlVHlwZUVtZik7IH0NCi0NCi0gICAgLy8gSXMgdGhpcyBhbiBFTUYrIGZpbGU/DQotICAgIEJPT0wgSXNFbWZQbHVzKCkgY29uc3QgeyByZXR1cm4gKFR5cGUgPj0gTWV0YWZpbGVUeXBlRW1mUGx1c09ubHkpOyB9DQotDQotICAgIC8vIElzIHRoaXMgYW4gRU1GKyBkdWFsIChoYXMgZHVhbCwgZG93bi1sZXZlbCByZWNvcmRzKSBmaWxlPw0KLSAgICBCT09MIElzRW1mUGx1c0R1YWwoKSBjb25zdCB7IHJldHVybiAoVHlwZSA9PSBNZXRhZmlsZVR5cGVFbWZQbHVzRHVhbCk7IH0NCi0NCi0gICAgLy8gSXMgdGhpcyBhbiBFTUYrIG9ubHkgKG5vIGR1YWwgcmVjb3JkcykgZmlsZT8NCi0gICAgQk9PTCBJc0VtZlBsdXNPbmx5KCkgY29uc3QgeyByZXR1cm4gKFR5cGUgPT0gTWV0YWZpbGVUeXBlRW1mUGx1c09ubHkpOyB9DQotDQotICAgIC8vIElmIGl0J3MgYW4gRU1GKyBmaWxlLCB3YXMgaXQgcmVjb3JkZWQgYWdhaW5zdCBhIGRpc3BsYXkgSGRjPw0KLSAgICBCT09MIElzRGlzcGxheSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiAoSXNFbWZQbHVzKCkgJiYNCi0gICAgICAgICAgICAgICAgKChFbWZQbHVzRmxhZ3MgJiBHRElQX0VNRlBMVVNGTEFHU19ESVNQTEFZKSAhPSAwKSk7DQotICAgIH0NCi0NCi0gICAgLy8gR2V0IHRoZSBXTUYgaGVhZGVyIG9mIHRoZSBtZXRhZmlsZSAoaWYgaXQgaXMgYSBXTUYpDQotICAgIGNvbnN0IE1FVEFIRUFERVIgKiBHZXRXbWZIZWFkZXIoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBpZiAoSXNXbWYoKSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICByZXR1cm4gJldtZkhlYWRlcjsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotDQotICAgIC8vIEdldCB0aGUgRU1GIGhlYWRlciBvZiB0aGUgbWV0YWZpbGUgKGlmIGl0IGlzIGFuIEVNRikNCi0gICAgY29uc3QgRU5ITUVUQUhFQURFUjMgKiBHZXRFbWZIZWFkZXIoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBpZiAoSXNFbWZPckVtZlBsdXMoKSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICByZXR1cm4gJkVtZkhlYWRlcjsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotfTsNCi0NCi0jZW5kaWYNCi0NCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCisqCisqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqIE1vZHVsZSBOYW1lOgorKgorKiAgIE1ldGFmaWxlIGhlYWRlcnMKKyoKKyogQWJzdHJhY3Q6CisqCisqICAgRGVjbGFyYXRpb25zIGZvciB2YXJpb3VzIG1ldGFmaWxlIGhlYWRlciBzdHJ1Y3R1cmVzLgorKgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9HRElQTFVTTUVUQUhFQURFUl9ICisjZGVmaW5lIF9HRElQTFVTTUVUQUhFQURFUl9ICisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgRFdPUkQgICBpVHlwZTsgICAgICAgICAgICAgIC8vIFJlY29yZCB0eXBlIEVNUl9IRUFERVIKKyAgICBEV09SRCAgIG5TaXplOyAgICAgICAgICAgICAgLy8gUmVjb3JkIHNpemUgaW4gYnl0ZXMuICBUaGlzIG1heSBiZSBncmVhdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoYW4gdGhlIHNpemVvZihFTkhNRVRBSEVBREVSKS4KKyAgICBSRUNUTCAgIHJjbEJvdW5kczsgICAgICAgICAgLy8gSW5jbHVzaXZlLWluY2x1c2l2ZSBib3VuZHMgaW4gZGV2aWNlIHVuaXRzCisgICAgUkVDVEwgICByY2xGcmFtZTsgICAgICAgICAgIC8vIEluY2x1c2l2ZS1pbmNsdXNpdmUgUGljdHVyZSBGcmFtZSBvZiBtZXRhZmlsZSBpbiAuMDEgbW0gdW5pdHMKKyAgICBEV09SRCAgIGRTaWduYXR1cmU7ICAgICAgICAgLy8gU2lnbmF0dXJlLiAgTXVzdCBiZSBFTkhNRVRBX1NJR05BVFVSRS4KKyAgICBEV09SRCAgIG5WZXJzaW9uOyAgICAgICAgICAgLy8gVmVyc2lvbiBudW1iZXIKKyAgICBEV09SRCAgIG5CeXRlczsgICAgICAgICAgICAgLy8gU2l6ZSBvZiB0aGUgbWV0YWZpbGUgaW4gYnl0ZXMKKyAgICBEV09SRCAgIG5SZWNvcmRzOyAgICAgICAgICAgLy8gTnVtYmVyIG9mIHJlY29yZHMgaW4gdGhlIG1ldGFmaWxlCisgICAgV09SRCAgICBuSGFuZGxlczsgICAgICAgICAgIC8vIE51bWJlciBvZiBoYW5kbGVzIGluIHRoZSBoYW5kbGUgdGFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGluZGV4IHplcm8gaXMgcmVzZXJ2ZWQuCisgICAgV09SRCAgICBzUmVzZXJ2ZWQ7ICAgICAgICAgIC8vIFJlc2VydmVkLiAgTXVzdCBiZSB6ZXJvLgorICAgIERXT1JEICAgbkRlc2NyaXB0aW9uOyAgICAgICAvLyBOdW1iZXIgb2YgY2hhcnMgaW4gdGhlIHVuaWNvZGUgZGVzY3JpcHRpb24gc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgMCBpZiB0aGVyZSBpcyBubyBkZXNjcmlwdGlvbiBzdHJpbmcKKyAgICBEV09SRCAgIG9mZkRlc2NyaXB0aW9uOyAgICAgLy8gT2Zmc2V0IHRvIHRoZSBtZXRhZmlsZSBkZXNjcmlwdGlvbiByZWNvcmQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgMCBpZiB0aGVyZSBpcyBubyBkZXNjcmlwdGlvbiBzdHJpbmcKKyAgICBEV09SRCAgIG5QYWxFbnRyaWVzOyAgICAgICAgLy8gTnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIG1ldGFmaWxlIHBhbGV0dGUuCisgICAgU0laRUwgICBzemxEZXZpY2U7ICAgICAgICAgIC8vIFNpemUgb2YgdGhlIHJlZmVyZW5jZSBkZXZpY2UgaW4gcGVscworICAgIFNJWkVMICAgc3psTWlsbGltZXRlcnM7ICAgICAvLyBTaXplIG9mIHRoZSByZWZlcmVuY2UgZGV2aWNlIGluIG1pbGxpbWV0ZXJzCit9IEVOSE1FVEFIRUFERVIzOworCisvLyBBbGR1cyBQbGFjZWFibGUgTWV0YWZpbGVzCisKKy8vIFBsYWNlYWJsZSBNZXRhZmlsZXMgd2VyZSBjcmVhdGVkIGJ5IEFsZHVzIENvcnBvcmF0aW9uIGFzIGEgbm9uLXN0YW5kYXJkCisvLyB3YXkgb2Ygc3BlY2lmeWluZyBob3cgYSBtZXRhZmlsZSBpcyBtYXBwZWQgYW5kIHNjYWxlZCBvbiBhbiBvdXRwdXQgZGV2aWNlLgorLy8gUGxhY2VhYmxlIG1ldGFmaWxlcyBhcmUgcXVpdGUgd2lkZS1zcHJlYWQsIGJ1dCBub3QgZGlyZWN0bHkgc3VwcG9ydGVkIGJ5CisvLyB0aGUgV2luZG93cyBBUEkuIFRvIHBsYXliYWNrIGEgcGxhY2VhYmxlIG1ldGFmaWxlIHVzaW5nIHRoZSBXaW5kb3dzIEFQSSwKKy8vIHlvdSB3aWxsIGZpcnN0IG5lZWQgdG8gc3RyaXAgdGhlIHBsYWNlYWJsZSBtZXRhZmlsZSBoZWFkZXIgZnJvbSB0aGUgZmlsZS4KKy8vIFRoaXMgaXMgdHlwaWNhbGx5IHBlcmZvcm1lZCBieSBjb3B5aW5nIHRoZSBtZXRhZmlsZSB0byBhIHRlbXBvcmFyeSBmaWxlCisvLyBzdGFydGluZyBhdCBmaWxlIG9mZnNldCAyMiAoMHgxNikuIFRoZSBjb250ZW50cyBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUgbWF5CisvLyB0aGVuIGJlIHVzZWQgYXMgaW5wdXQgdG8gdGhlIFdpbmRvd3MgR2V0TWV0YUZpbGUoKSwgUGxheU1ldGFGaWxlKCksCisvLyBDb3B5TWV0YUZpbGUoKSwgZXRjLiBHREkgZnVuY3Rpb25zLgorCisvLyBFYWNoIHBsYWNlYWJsZSBtZXRhZmlsZSBiZWdpbnMgd2l0aCBhIDIyLWJ5dGUgaGVhZGVyLAorLy8gIGZvbGxvd2VkIGJ5IGEgc3RhbmRhcmQgbWV0YWZpbGU6CisKKyNpbmNsdWRlIDxwc2hwYWNrMi5oPiAgIC8vIHNldCBzdHJ1Y3R1cmUgcGFja2luZyB0byAyCisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgSU5UMTYgICAgICAgICAgIExlZnQ7CisgICAgSU5UMTYgICAgICAgICAgIFRvcDsKKyAgICBJTlQxNiAgICAgICAgICAgUmlnaHQ7CisgICAgSU5UMTYgICAgICAgICAgIEJvdHRvbTsKK30gQVBNUmVjdDE2OworCit0eXBlZGVmIHN0cnVjdAoreworICAgIFVJTlQzMiAgICAgICAgICBLZXk7ICAgICAgICAgICAgLy8gR0RJUF9XTUZfQUxEVVNLRVkKKyAgICBJTlQxNiAgICAgICAgICAgSG1mOyAgICAgICAgICAgIC8vIE1ldGFmaWxlIEhBTkRMRSBudW1iZXIgKGFsd2F5cyAwKQorICAgIEFQTVJlY3QxNiAgICAgICBCb3VuZGluZ0JveDsgICAgLy8gQ29vcmRpbmF0ZXMgaW4gbWV0YWZpbGUgdW5pdHMKKyAgICBJTlQxNiAgICAgICAgICAgSW5jaDsgICAgICAgICAgIC8vIE51bWJlciBvZiBtZXRhZmlsZSB1bml0cyBwZXIgaW5jaAorICAgIFVJTlQzMiAgICAgICAgICBSZXNlcnZlZDsgICAgICAgLy8gUmVzZXJ2ZWQgKGFsd2F5cyAwKQorICAgIElOVDE2ICAgICAgICAgICBDaGVja3N1bTsgICAgICAgLy8gQ2hlY2tzdW0gdmFsdWUgZm9yIHByZXZpb3VzIDEwIFdPUkRzCit9IEFQTUZpbGVIZWFkZXI7CisKKyNpbmNsdWRlIDxwb3BwYWNrLmg+CisKKy8vIEtleSBjb250YWlucyBhIHNwZWNpYWwgaWRlbnRpZmljYXRpb24gdmFsdWUgdGhhdCBpbmRpY2F0ZXMgdGhlIHByZXNlbmNlCisvLyBvZiBhIHBsYWNlYWJsZSBtZXRhZmlsZSBoZWFkZXIgYW5kIGlzIGFsd2F5cyAweDlBQzZDREQ3LgorCisvLyBIYW5kbGUgaXMgdXNlZCB0byBzdG9yZWQgdGhlIGhhbmRsZSBvZiB0aGUgbWV0YWZpbGUgaW4gbWVtb3J5LiBXaGVuIHdyaXR0ZW4KKy8vIHRvIGRpc2ssIHRoaXMgZmllbGQgaXMgbm90IHVzZWQgYW5kIHdpbGwgYWx3YXlzIGNvbnRhaW5zIHRoZSB2YWx1ZSAwLgorCisvLyBMZWZ0LCBUb3AsIFJpZ2h0LCBhbmQgQm90dG9tIGNvbnRhaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB1cHBlci1sZWZ0CisvLyBhbmQgbG93ZXItcmlnaHQgY29ybmVycyBvZiB0aGUgaW1hZ2Ugb24gdGhlIG91dHB1dCBkZXZpY2UuIFRoZXNlIGFyZQorLy8gbWVhc3VyZWQgaW4gdHdpcHMuCisKKy8vIEEgdHdpcCAobWVhbmluZyAidHdlbnRpZXRoIG9mIGEgcG9pbnQiKSBpcyB0aGUgbG9naWNhbCB1bml0IG9mIG1lYXN1cmVtZW50CisvLyB1c2VkIGluIFdpbmRvd3MgTWV0YWZpbGVzLiBBIHR3aXAgaXMgZXF1YWwgdG8gMS8xNDQwIG9mIGFuIGluY2guIFRodXMgNzIwCisvLyB0d2lwcyBlcXVhbCAxLzIgaW5jaCwgd2hpbGUgMzIsNzY4IHR3aXBzIGlzIDIyLjc1IGluY2hlcy4KKworLy8gSW5jaCBjb250YWlucyB0aGUgbnVtYmVyIG9mIHR3aXBzIHBlciBpbmNoIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBpbWFnZS4KKy8vIE5vcm1hbGx5LCB0aGVyZSBhcmUgMTQ0MCB0d2lwcyBwZXIgaW5jaDsgaG93ZXZlciwgdGhpcyBudW1iZXIgbWF5IGJlCisvLyBjaGFuZ2VkIHRvIHNjYWxlIHRoZSBpbWFnZS4gQSB2YWx1ZSBvZiA3MjAgaW5kaWNhdGVzIHRoYXQgdGhlIGltYWdlIGlzCisvLyBkb3VibGUgaXRzIG5vcm1hbCBzaXplLCBvciBzY2FsZWQgdG8gYSBmYWN0b3Igb2YgMjoxLiBBIHZhbHVlIG9mIDM2MAorLy8gaW5kaWNhdGVzIGEgc2NhbGUgb2YgNDoxLCB3aGlsZSBhIHZhbHVlIG9mIDI4ODAgaW5kaWNhdGVzIHRoYXQgdGhlIGltYWdlCisvLyBpcyBzY2FsZWQgZG93biBpbiBzaXplIGJ5IGEgZmFjdG9yIG9mIHR3by4gQSB2YWx1ZSBvZiAxNDQwIGluZGljYXRlcworLy8gYSAxOjEgc2NhbGUgcmF0aW8uCisKKy8vIFJlc2VydmVkIGlzIG5vdCB1c2VkIGFuZCBpcyBhbHdheXMgc2V0IHRvIDAuCisKKy8vIENoZWNrc3VtIGNvbnRhaW5zIGEgY2hlY2tzdW0gdmFsdWUgZm9yIHRoZSBwcmV2aW91cyAxMCBXT1JEcyBpbiB0aGUgaGVhZGVyLgorLy8gVGhpcyB2YWx1ZSBjYW4gYmUgdXNlZCBpbiBhbiBhdHRlbXB0IHRvIGRldGVjdCBpZiB0aGUgbWV0YWZpbGUgaGFzIGJlY29tZQorLy8gY29ycnVwdGVkLiBUaGUgY2hlY2tzdW0gaXMgY2FsY3VsYXRlZCBieSBYT1JpbmcgZWFjaCBXT1JEIHZhbHVlIHRvIGFuCisvLyBpbml0aWFsIHZhbHVlIG9mIDAuCisKKy8vIElmIHRoZSBtZXRhZmlsZSB3YXMgcmVjb3JkZWQgd2l0aCBhIHJlZmVyZW5jZSBIZGMgdGhhdCB3YXMgYSBkaXNwbGF5LgorI2RlZmluZSBHRElQX0VNRlBMVVNGTEFHU19ESVNQTEFZICAgICAgIDB4MDAwMDAwMDEKKworY2xhc3MgTWV0YWZpbGVIZWFkZXIKK3sKK3B1YmxpYzoKKyAgICBNZXRhZmlsZVR5cGUgICAgICAgIFR5cGU7CisgICAgVUlOVCAgICAgICAgICAgICAgICBTaXplOyAgICAgICAgICAgICAgIC8vIFNpemUgb2YgdGhlIG1ldGFmaWxlIChpbiBieXRlcykKKyAgICBVSU5UICAgICAgICAgICAgICAgIFZlcnNpb247ICAgICAgICAgICAgLy8gRU1GKywgRU1GLCBvciBXTUYgdmVyc2lvbgorICAgIFVJTlQgICAgICAgICAgICAgICAgRW1mUGx1c0ZsYWdzOworICAgIFJFQUwgICAgICAgICAgICAgICAgRHBpWDsKKyAgICBSRUFMICAgICAgICAgICAgICAgIERwaVk7CisgICAgSU5UICAgICAgICAgICAgICAgICBYOyAgICAgICAgICAgICAgICAgIC8vIEJvdW5kcyBpbiBkZXZpY2UgdW5pdHMKKyAgICBJTlQgICAgICAgICAgICAgICAgIFk7CisgICAgSU5UICAgICAgICAgICAgICAgICBXaWR0aDsKKyAgICBJTlQgICAgICAgICAgICAgICAgIEhlaWdodDsKKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgTUVUQUhFQURFUiAgICAgIFdtZkhlYWRlcjsKKyAgICAgICAgRU5ITUVUQUhFQURFUjMgIEVtZkhlYWRlcjsKKyAgICB9OworICAgIElOVCAgICAgICAgICAgICAgICAgRW1mUGx1c0hlYWRlclNpemU7ICAvLyBzaXplIG9mIHRoZSBFTUYrIGhlYWRlciBpbiBmaWxlCisgICAgSU5UICAgICAgICAgICAgICAgICBMb2dpY2FsRHBpWDsgICAgICAgIC8vIExvZ2ljYWwgRHBpIG9mIHJlZmVyZW5jZSBIZGMKKyAgICBJTlQgICAgICAgICAgICAgICAgIExvZ2ljYWxEcGlZOyAgICAgICAgLy8gdXN1YWxseSB2YWxpZCBvbmx5IGZvciBFTUYrIGZpbGVzCisKK3B1YmxpYzoKKyAgICAvLyBHZXQgdGhlIG1ldGFmaWxlIHR5cGUKKyAgICBNZXRhZmlsZVR5cGUgR2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIFR5cGU7IH0KKworICAgIC8vIEdldCB0aGUgc2l6ZSBvZiB0aGUgbWV0YWZpbGUgaW4gQllURXMKKyAgICBVSU5UIEdldE1ldGFmaWxlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIFNpemU7IH0KKworICAgIC8vIElmIElzRW1mUGx1cywgdGhpcyBpcyB0aGUgRU1GKyB2ZXJzaW9uOyBlbHNlIGl0IGlzIHRoZSBXTUYgb3IgRU1GIHZlcnNpb24KKyAgICBVSU5UIEdldFZlcnNpb24oKSBjb25zdCB7IHJldHVybiBWZXJzaW9uOyB9CisKKyAgICAvLyBHZXQgdGhlIEVNRisgZmxhZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZXRhZmlsZQorICAgIFVJTlQgR2V0RW1mUGx1c0ZsYWdzKCkgY29uc3QgeyByZXR1cm4gRW1mUGx1c0ZsYWdzOyB9CisKKyAgICAvLyBHZXQgdGhlIFggRHBpIG9mIHRoZSBtZXRhZmlsZQorICAgIFJFQUwgR2V0RHBpWCgpIGNvbnN0IHsgcmV0dXJuIERwaVg7IH0KKworICAgIC8vIEdldCB0aGUgWSBEcGkgb2YgdGhlIG1ldGFmaWxlCisgICAgUkVBTCBHZXREcGlZKCkgY29uc3QgeyByZXR1cm4gRHBpWTsgfQorCisgICAgLy8gR2V0IHRoZSBib3VuZHMgb2YgdGhlIG1ldGFmaWxlIGluIGRldmljZSB1bml0cworICAgIFZPSUQgR2V0Qm91bmRzIChPVVQgUmVjdCAqcmVjdCkgY29uc3QKKyAgICB7CisgICAgICAgIHJlY3QtPlggPSBYOworICAgICAgICByZWN0LT5ZID0gWTsKKyAgICAgICAgcmVjdC0+V2lkdGggPSBXaWR0aDsKKyAgICAgICAgcmVjdC0+SGVpZ2h0ID0gSGVpZ2h0OworICAgIH0KKyAgICAKKyAgICAvLyBJcyBpdCBhbnkgdHlwZSBvZiBXTUYgKHN0YW5kYXJkIG9yIEFsZHVzIFBsYWNlYWJsZSBNZXRhZmlsZSk/CisgICAgQk9PTCBJc1dtZigpIGNvbnN0CisgICAgeworICAgICAgIHJldHVybiAoKFR5cGUgPT0gTWV0YWZpbGVUeXBlV21mKSB8fCAoVHlwZSA9PSBNZXRhZmlsZVR5cGVXbWZBbGR1cykpOworICAgIH0KKworICAgIC8vIElzIHRoaXMgYW4gQWxkdXMgUGxhY2VhYmxlIE1ldGFmaWxlPworICAgIEJPT0wgSXNXbWZBbGR1cygpIGNvbnN0IHsgcmV0dXJuIChUeXBlID09IE1ldGFmaWxlVHlwZVdtZik7IH0KKworICAgIC8vIElzIHRoaXMgYW4gRU1GIChub3QgYW4gRU1GKyk/CisgICAgQk9PTCBJc0VtZigpIGNvbnN0IHsgcmV0dXJuIChUeXBlID09IE1ldGFmaWxlVHlwZUVtZik7IH0KKworICAgIC8vIElzIHRoaXMgYW4gRU1GIG9yIEVNRisgZmlsZT8KKyAgICBCT09MIElzRW1mT3JFbWZQbHVzKCkgY29uc3QgeyByZXR1cm4gKFR5cGUgPj0gTWV0YWZpbGVUeXBlRW1mKTsgfQorCisgICAgLy8gSXMgdGhpcyBhbiBFTUYrIGZpbGU/CisgICAgQk9PTCBJc0VtZlBsdXMoKSBjb25zdCB7IHJldHVybiAoVHlwZSA+PSBNZXRhZmlsZVR5cGVFbWZQbHVzT25seSk7IH0KKworICAgIC8vIElzIHRoaXMgYW4gRU1GKyBkdWFsIChoYXMgZHVhbCwgZG93bi1sZXZlbCByZWNvcmRzKSBmaWxlPworICAgIEJPT0wgSXNFbWZQbHVzRHVhbCgpIGNvbnN0IHsgcmV0dXJuIChUeXBlID09IE1ldGFmaWxlVHlwZUVtZlBsdXNEdWFsKTsgfQorCisgICAgLy8gSXMgdGhpcyBhbiBFTUYrIG9ubHkgKG5vIGR1YWwgcmVjb3JkcykgZmlsZT8KKyAgICBCT09MIElzRW1mUGx1c09ubHkoKSBjb25zdCB7IHJldHVybiAoVHlwZSA9PSBNZXRhZmlsZVR5cGVFbWZQbHVzT25seSk7IH0KKworICAgIC8vIElmIGl0J3MgYW4gRU1GKyBmaWxlLCB3YXMgaXQgcmVjb3JkZWQgYWdhaW5zdCBhIGRpc3BsYXkgSGRjPworICAgIEJPT0wgSXNEaXNwbGF5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoSXNFbWZQbHVzKCkgJiYKKyAgICAgICAgICAgICAgICAoKEVtZlBsdXNGbGFncyAmIEdESVBfRU1GUExVU0ZMQUdTX0RJU1BMQVkpICE9IDApKTsKKyAgICB9CisKKyAgICAvLyBHZXQgdGhlIFdNRiBoZWFkZXIgb2YgdGhlIG1ldGFmaWxlIChpZiBpdCBpcyBhIFdNRikKKyAgICBjb25zdCBNRVRBSEVBREVSICogR2V0V21mSGVhZGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChJc1dtZigpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gJldtZkhlYWRlcjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvLyBHZXQgdGhlIEVNRiBoZWFkZXIgb2YgdGhlIG1ldGFmaWxlIChpZiBpdCBpcyBhbiBFTUYpCisgICAgY29uc3QgRU5ITUVUQUhFQURFUjMgKiBHZXRFbWZIZWFkZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKElzRW1mT3JFbWZQbHVzKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAmRW1mSGVhZGVyOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK307CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzUGF0aC5oIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c1BhdGguaAppbmRleCBjZmYwZTFkLi45OWY4YWZkIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzUGF0aC5oCisrKyBiL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNQYXRoLmgKQEAgLTEsMTY4NiArMSwxNjg2IEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcDQotKg0KLSogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsIE1pY3Jvc29mdCBDb3JwLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0qDQotKiBNb2R1bGUgTmFtZToNCi0qDQotKiAgIEdkaXBsdXNQYXRoLmgNCi0qDQotKiBBYnN0cmFjdDoNCi0qDQotKiAgIFBhdGggcmVsYXRlZCBkZWNsYXJhdGlvbnMNCi0qDQotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLSNpZm5kZWYgX0dESVBMVVNQQVRIX0gNCi0jZGVmaW5lIF9HRElQTFVTUEFUSF9IDQotDQotY2xhc3MgR3JhcGhpY3NQYXRoIDogcHVibGljIEdkaXBsdXNCYXNlDQotew0KLXB1YmxpYzoNCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzOw0KLSAgICBmcmllbmQgY2xhc3MgUmVnaW9uOw0KLSAgICBmcmllbmQgY2xhc3MgUGF0aEdyYWRpZW50QnJ1c2g7DQotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc1BhdGhJdGVyYXRvcjsNCi0gICAgZnJpZW5kIGNsYXNzIEN1c3RvbUxpbmVDYXA7DQotDQotICAgIC8vIFBhdGggY29uc3RydWN0b3JzDQotDQotICAgIEdyYXBoaWNzUGF0aChJTiBGaWxsTW9kZSBmaWxsTW9kZSA9IEZpbGxNb2RlQWx0ZXJuYXRlKQ0KLSAgICB7DQotICAgICAgICBuYXRpdmVQYXRoID0gTlVMTDsNCi0gICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlUGF0aChmaWxsTW9kZSwgJm5hdGl2ZVBhdGgpOw0KLSAgICB9DQotDQotICAgIEdyYXBoaWNzUGF0aChJTiBjb25zdCBQb2ludEYqIHBvaW50cywNCi0gICAgICAgICAgICAgICAgIElOIGNvbnN0IEJZVEUqIHR5cGVzLA0KLSAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50LA0KLSAgICAgICAgICAgICAgICAgSU4gRmlsbE1vZGUgZmlsbE1vZGUgPSBGaWxsTW9kZUFsdGVybmF0ZSkNCi0gICAgew0KLSAgICAgICAgbmF0aXZlUGF0aCA9IE5VTEw7DQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZVBhdGgyKHBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsTW9kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hdGl2ZVBhdGgpOw0KLSAgICB9DQotDQotICAgIEdyYXBoaWNzUGF0aChJTiBjb25zdCBQb2ludCogcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgSU4gY29uc3QgQllURSogdHlwZXMsDQotICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQsDQotICAgICAgICAgICAgICAgICBJTiBGaWxsTW9kZSBmaWxsTW9kZSA9IEZpbGxNb2RlQWx0ZXJuYXRlKQ0KLSAgICB7DQotICAgICAgICBuYXRpdmVQYXRoID0gTlVMTDsNCi0gICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlUGF0aDJJKHBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsTW9kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYXRpdmVQYXRoKTsNCi0gICAgfQ0KLQ0KLSAgICB+R3JhcGhpY3NQYXRoKCkNCi0gICAgew0KLSAgICAgICAgRGxsRXhwb3J0czo6R2RpcERlbGV0ZVBhdGgobmF0aXZlUGF0aCk7DQotICAgIH0NCi0NCi0gICAgLyoqDQotICAgICAqIE1ha2UgYSBjb3B5IG9mIHRoZSBjdXJyZW50IHBhdGggb2JqZWN0DQotICAgICAqLw0KLSAgICBHcmFwaGljc1BhdGgqIENsb25lKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgR3BQYXRoICpjbG9uZXBhdGggPSBOVUxMOw0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDbG9uZVBhdGgobmF0aXZlUGF0aCwgJmNsb25lcGF0aCkpOw0KLQ0KLSAgICAgICAgcmV0dXJuIG5ldyBHcmFwaGljc1BhdGgoY2xvbmVwYXRoKTsNCi0gICAgfQ0KLQ0KLSAgICAvKioNCi0gICAgICogUmVzZXQgdGhlIHBhdGggb2JqZWN0IHRvIGVtcHR5IChhbmQgZmlsbCBtb2RlIHRvIEZpbGxNb2RlQWx0ZXJuYXRlKQ0KLSAgICAgKi8NCi0gICAgU3RhdHVzIFJlc2V0KCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUmVzZXRQYXRoKG5hdGl2ZVBhdGgpKTsNCi0gICAgfQ0KLQ0KLSAgICAvKioNCi0gICAgICogR2V0IHBhdGggZmlsbCBtb2RlIGluZm9ybWF0aW9uDQotICAgICAqLw0KLSAgICBGaWxsTW9kZSBHZXRGaWxsTW9kZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIEZpbGxNb2RlIGZpbGxtb2RlID0gRmlsbE1vZGVBbHRlcm5hdGU7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhGaWxsTW9kZShuYXRpdmVQYXRoLCAmZmlsbG1vZGUpKTsNCi0NCi0gICAgICAgIHJldHVybiBmaWxsbW9kZTsNCi0gICAgfQ0KLQ0KLSAgICAvKioNCi0gICAgICogU2V0IHBhdGggZmlsbCBtb2RlIGluZm9ybWF0aW9uDQotICAgICAqLw0KLSAgICBTdGF0dXMgU2V0RmlsbE1vZGUoSU4gRmlsbE1vZGUgZmlsbG1vZGUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBhdGhGaWxsTW9kZShuYXRpdmVQYXRoLCBmaWxsbW9kZSkpOw0KLSAgICB9DQotDQotICAgIC8qKg0KLSAgICAgKiBTZXQvZ2V0IHBhdGggZGF0YQ0KLSAgICAgKi8NCi0gICAgU3RhdHVzIEdldFBhdGhEYXRhKE9VVCBQYXRoRGF0YSogcGF0aERhdGEpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIGlmIChwYXRoRGF0YSA9PSBOVUxMKSANCi0gICAgICAgIHsNCi0gICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKEludmFsaWRQYXJhbWV0ZXIpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgDQotICAgICAgICBJTlQgY291bnQgPSBHZXRQb2ludENvdW50KCk7DQotICAgICAgICANCi0gICAgICAgIGlmICgoY291bnQgPD0gMCkgfHwgKHBhdGhEYXRhLT5Db3VudD4wICYmIHBhdGhEYXRhLT5Db3VudDxjb3VudCkpDQotICAgICAgICB7DQotICAgICAgICAgICAgcGF0aERhdGEtPkNvdW50ID0gMDsNCi0gICAgICAgICAgICBpZiAocGF0aERhdGEtPlBvaW50cykNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXRoRGF0YS0+UG9pbnRzOw0KLSAgICAgICAgICAgICAgICBwYXRoRGF0YS0+UG9pbnRzID0gTlVMTDsNCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgaWYgKHBhdGhEYXRhLT5UeXBlcykgDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBkZWxldGUgcGF0aERhdGEtPlR5cGVzOw0KLSAgICAgICAgICAgICAgICBwYXRoRGF0YS0+VHlwZXMgPSBOVUxMOw0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICBpZiAoY291bnQgPD0gMCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHJldHVybiBsYXN0UmVzdWx0Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIGlmIChwYXRoRGF0YS0+Q291bnQgPT0gMCkgDQotICAgICAgICB7DQotICAgICAgICAgICAgcGF0aERhdGEtPlBvaW50cyA9IG5ldyBQb2ludEZbY291bnRdOw0KLSAgICAgICAgICAgIGlmIChwYXRoRGF0YS0+UG9pbnRzID09IE5VTEwpIA0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhPdXRPZk1lbW9yeSk7DQotICAgICAgICAgICAgDQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHBhdGhEYXRhLT5UeXBlcyA9IG5ldyBieXRlW2NvdW50XTsNCi0gICAgICAgICAgICBpZiAocGF0aERhdGEtPlR5cGVzID09IE5VTEwpIA0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgZGVsZXRlIHBhdGhEYXRhLT5Qb2ludHM7DQotICAgICAgICAgICAgICAgIHBhdGhEYXRhLT5Qb2ludHMgPSBOVUxMOw0KLQ0KLSAgICAgICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKE91dE9mTWVtb3J5KTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcGF0aERhdGEtPkNvdW50ID0gY291bnQ7DQotICAgICAgICB9DQotDQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQYXRoRGF0YShuYXRpdmVQYXRoLCBwYXRoRGF0YSkpOw0KLSAgICB9DQotDQotICAgIC8qKg0KLSAgICAgKiBTdGFydC9lbmQgYSBzdWJwYXRoDQotICAgICAqLw0KLSAgICBTdGF0dXMgU3RhcnRGaWd1cmUoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTdGFydFBhdGhGaWd1cmUobmF0aXZlUGF0aCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBDbG9zZUZpZ3VyZSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENsb3NlUGF0aEZpZ3VyZShuYXRpdmVQYXRoKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIENsb3NlQWxsRmlndXJlcygpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENsb3NlUGF0aEZpZ3VyZXMobmF0aXZlUGF0aCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTZXRNYXJrZXIoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQYXRoTWFya2VyKG5hdGl2ZVBhdGgpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgQ2xlYXJNYXJrZXJzKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ2xlYXJQYXRoTWFya2VycyhuYXRpdmVQYXRoKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFJldmVyc2UoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBSZXZlcnNlUGF0aChuYXRpdmVQYXRoKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEdldExhc3RQb2ludChPVVQgUG9pbnRGKiBsYXN0UG9pbnQpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhMYXN0UG9pbnQobmF0aXZlUGF0aCwgbGFzdFBvaW50KSk7DQotICAgIH0NCi0NCi0gICAgLyoqDQotICAgICAqIEFkZCBsaW5lcyB0byB0aGUgcGF0aCBvYmplY3QNCi0gICAgICovDQotICAgIC8vIGZsb2F0IHZlcnNpb24NCi0gICAgU3RhdHVzIEFkZExpbmUoSU4gY29uc3QgUG9pbnRGJiBwdDEsIA0KLSAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYmIHB0MikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEFkZExpbmUocHQxLlgsIHB0MS5ZLCBwdDIuWCwgcHQyLlkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBBZGRMaW5lKElOIFJFQUwgeDEsDQotICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeTEsIA0KLSAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHgyLCANCi0gICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5MikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQWRkUGF0aExpbmUobmF0aXZlUGF0aCwgeDEsIHkxLCB4MiwgeTIpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgQWRkTGluZXMoSU4gY29uc3QgUG9pbnRGKiBwb2ludHMsIA0KLSAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoTGluZTIobmF0aXZlUGF0aCwgcG9pbnRzLCBjb3VudCkpOw0KLSAgICB9DQotDQotICAgIC8vIGludGVnZXIgdmVyc2lvbg0KLSAgICBTdGF0dXMgQWRkTGluZShJTiBjb25zdCBQb2ludCYgcHQxLCANCi0gICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnQmIHB0MikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEFkZExpbmUocHQxLlgsDQotICAgICAgICAgICAgICAgICAgICAgICBwdDEuWSwNCi0gICAgICAgICAgICAgICAgICAgICAgIHB0Mi5YLA0KLSAgICAgICAgICAgICAgICAgICAgICAgcHQyLlkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBBZGRMaW5lKElOIElOVCB4MSwgDQotICAgICAgICAgICAgICAgICAgIElOIElOVCB5MSwgDQotICAgICAgICAgICAgICAgICAgIElOIElOVCB4MiwgDQotICAgICAgICAgICAgICAgICAgIElOIElOVCB5MikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQWRkUGF0aExpbmVJKG5hdGl2ZVBhdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MikpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBBZGRMaW5lcyhJTiBjb25zdCBQb2ludCogcG9pbnRzLCANCi0gICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQWRkUGF0aExpbmUySShuYXRpdmVQYXRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7DQotICAgIH0NCi0NCi0gICAgLyoqDQotICAgICAqIEFkZCBhbiBhcmMgdG8gdGhlIHBhdGggb2JqZWN0DQotICAgICAqLw0KLSAgICAvLyBmbG9hdCB2ZXJzaW9uDQotICAgIFN0YXR1cyBBZGRBcmMoSU4gY29uc3QgUmVjdEYmIHJlY3QsIA0KLSAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3RhcnRBbmdsZSwgDQotICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzd2VlcEFuZ2xlKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gQWRkQXJjKHJlY3QuWCwgcmVjdC5ZLCByZWN0LldpZHRoLCByZWN0LkhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgc3RhcnRBbmdsZSwgc3dlZXBBbmdsZSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEFkZEFyYyhJTiBSRUFMIHgsIA0KLSAgICAgICAgICAgICAgICAgIElOIFJFQUwgeSwgDQotICAgICAgICAgICAgICAgICAgSU4gUkVBTCB3aWR0aCwgDQotICAgICAgICAgICAgICAgICAgSU4gUkVBTCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzdGFydEFuZ2xlLCANCi0gICAgICAgICAgICAgICAgICBJTiBSRUFMIHN3ZWVwQW5nbGUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEFkZFBhdGhBcmMobmF0aXZlUGF0aCwgeCwgeSwgd2lkdGgsIGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsIHN3ZWVwQW5nbGUpKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBpbnRlZ2VyIHZlcnNpb24NCi0gICAgU3RhdHVzIEFkZEFyYyhJTiBjb25zdCBSZWN0JiByZWN0LCANCi0gICAgICAgICAgICAgICAgICBJTiBSRUFMIHN0YXJ0QW5nbGUsIA0KLSAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3dlZXBBbmdsZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEFkZEFyYyhyZWN0LlgsIHJlY3QuWSwgcmVjdC5XaWR0aCwgcmVjdC5IZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsIHN3ZWVwQW5nbGUpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBBZGRBcmMoSU4gSU5UIHgsIA0KLSAgICAgICAgICAgICAgICAgIElOIElOVCB5LCANCi0gICAgICAgICAgICAgICAgICBJTiBJTlQgd2lkdGgsIA0KLSAgICAgICAgICAgICAgICAgIElOIElOVCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzdGFydEFuZ2xlLCANCi0gICAgICAgICAgICAgICAgICBJTiBSRUFMIHN3ZWVwQW5nbGUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEFkZFBhdGhBcmNJKG5hdGl2ZVBhdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3ZWVwQW5nbGUpKTsNCi0gICAgfQ0KLQ0KLSAgICAvKioNCi0gICAgICogQWRkIEJlemllciBjdXJ2ZXMgdG8gdGhlIHBhdGggb2JqZWN0DQotICAgICAqLw0KLSAgICAvLyBmbG9hdCB2ZXJzaW9uDQotICAgIFN0YXR1cyBBZGRCZXppZXIoSU4gY29uc3QgUG9pbnRGJiBwdDEsIA0KLSAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50RiYgcHQyLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50RiYgcHQzLCANCi0gICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYmIHB0NCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEFkZEJlemllcihwdDEuWCwgcHQxLlksIHB0Mi5YLCBwdDIuWSwgcHQzLlgsIHB0My5ZLCBwdDQuWCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgcHQ0LlkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBBZGRCZXppZXIoSU4gUkVBTCB4MSwgDQotICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5MSwgDQotICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB4MiwgDQotICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5MiwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHgzLCANCi0gICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHkzLCANCi0gICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHg0LCANCi0gICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHk0KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoQmV6aWVyKG5hdGl2ZVBhdGgsIHgxLCB5MSwgeDIsIHkyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MywgeTMsIHg0LCB5NCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBBZGRCZXppZXJzKElOIGNvbnN0IFBvaW50RiogcG9pbnRzLCANCi0gICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoQmV6aWVycyhuYXRpdmVQYXRoLCBwb2ludHMsIGNvdW50KSk7DQotICAgIH0NCi0NCi0gICAgLy8gaW50ZWdlciB2ZXJzaW9uDQotICAgIFN0YXR1cyBBZGRCZXppZXIoSU4gY29uc3QgUG9pbnQmIHB0MSwgDQotICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnQmIHB0MiwNCi0gICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludCYgcHQzLCANCi0gICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludCYgcHQ0KQ0KLSAgICB7DQotICAgICAgIHJldHVybiBBZGRCZXppZXIocHQxLlgsIHB0MS5ZLCBwdDIuWCwgcHQyLlksIHB0My5YLCBwdDMuWSwgcHQ0LlgsDQotICAgICAgICAgICAgICAgICAgICAgICAgcHQ0LlkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBBZGRCZXppZXIoSU4gSU5UIHgxLCANCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeTEsIA0KLSAgICAgICAgICAgICAgICAgICAgIElOIElOVCB4MiwgDQotICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHkyLA0KLSAgICAgICAgICAgICAgICAgICAgIElOIElOVCB4MywNCi0gICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeTMsIA0KLSAgICAgICAgICAgICAgICAgICAgIElOIElOVCB4NCwgDQotICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHk0KQ0KLSAgICB7DQotICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEFkZFBhdGhCZXppZXJJKG5hdGl2ZVBhdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTQpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgQWRkQmV6aWVycyhJTiBjb25zdCBQb2ludCogcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpDQotICAgIHsNCi0gICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQWRkUGF0aEJlemllcnNJKG5hdGl2ZVBhdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOw0KLSAgICB9DQotDQotICAgIC8vIGZsb2F0IHZlcnNpb24NCi0gICAgU3RhdHVzIEFkZEN1cnZlKElOIGNvbnN0IFBvaW50RiogcG9pbnRzLCANCi0gICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQWRkUGF0aEN1cnZlKG5hdGl2ZVBhdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEFkZEN1cnZlKElOIGNvbnN0IFBvaW50RiogcG9pbnRzLCANCi0gICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCwNCi0gICAgICAgICAgICAgICAgICAgIElOIFJFQUwgdGVuc2lvbikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQWRkUGF0aEN1cnZlMihuYXRpdmVQYXRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5zaW9uKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEFkZEN1cnZlKElOIGNvbnN0IFBvaW50RiogcG9pbnRzLCANCi0gICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCwgDQotICAgICAgICAgICAgICAgICAgICBJTiBJTlQgb2Zmc2V0LA0KLSAgICAgICAgICAgICAgICAgICAgSU4gSU5UIG51bWJlck9mU2VnbWVudHMsIA0KLSAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB0ZW5zaW9uKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoQ3VydmUzKG5hdGl2ZVBhdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZTZWdtZW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVuc2lvbikpOw0KLSAgICB9DQotDQotICAgIC8vIGludGVnZXIgdmVyc2lvbg0KLSAgICBTdGF0dXMgQWRkQ3VydmUoSU4gY29uc3QgUG9pbnQqIHBvaW50cywgDQotICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpDQotICAgIHsNCi0gICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQWRkUGF0aEN1cnZlSShuYXRpdmVQYXRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgQWRkQ3VydmUoSU4gY29uc3QgUG9pbnQqIHBvaW50cywgDQotICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQsIA0KLSAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB0ZW5zaW9uKQ0KLSAgICB7DQotICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEFkZFBhdGhDdXJ2ZTJJKG5hdGl2ZVBhdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbnNpb24pKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgQWRkQ3VydmUoSU4gY29uc3QgUG9pbnQqIHBvaW50cywgDQotICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQsIA0KLSAgICAgICAgICAgICAgICAgICAgSU4gSU5UIG9mZnNldCwNCi0gICAgICAgICAgICAgICAgICAgIElOIElOVCBudW1iZXJPZlNlZ21lbnRzLCANCi0gICAgICAgICAgICAgICAgICAgIElOIFJFQUwgdGVuc2lvbikNCi0gICAgew0KLSAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoQ3VydmUzSShuYXRpdmVQYXRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZTZWdtZW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5zaW9uKSk7DQotICAgIH0NCi0NCi0gICAgLy8gZmxvYXQgdmVyc2lvbg0KLSAgICBTdGF0dXMgQWRkQ2xvc2VkQ3VydmUoSU4gY29uc3QgUG9pbnRGKiBwb2ludHMsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoQ2xvc2VkQ3VydmUobmF0aXZlUGF0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgQWRkQ2xvc2VkQ3VydmUoSU4gY29uc3QgUG9pbnRGKiBwb2ludHMsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50LCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgdGVuc2lvbikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQWRkUGF0aENsb3NlZEN1cnZlMihuYXRpdmVQYXRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5zaW9uKSk7DQotICAgIH0NCi0NCi0gICAgLy8gaW50ZWdlciB2ZXJzaW9uDQotICAgIFN0YXR1cyBBZGRDbG9zZWRDdXJ2ZShJTiBjb25zdCBQb2ludCogcG9pbnRzLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkNCi0gICAgew0KLSAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoQ2xvc2VkQ3VydmVJKG5hdGl2ZVBhdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7DQotICAgIH0NCi0NCi0NCi0gICAgU3RhdHVzIEFkZENsb3NlZEN1cnZlKElOIGNvbnN0IFBvaW50KiBwb2ludHMsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB0ZW5zaW9uKQ0KLSAgICB7DQotICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEFkZFBhdGhDbG9zZWRDdXJ2ZTJJKG5hdGl2ZVBhdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbnNpb24pKTsNCi0gICAgfQ0KLQ0KLQ0KLSAgICAvKioNCi0gICAgICogQWRkIGNsb3NlZCBzaGFwZXMgdG8gdGhlIHBhdGggb2JqZWN0DQotICAgICAqLw0KLQ0KLSAgICAvLyBmbG9hdCB2ZXJzaW9uDQotICAgIFN0YXR1cyBBZGRSZWN0YW5nbGUoSU4gY29uc3QgUmVjdEYmIHJlY3QpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEFkZFBhdGhSZWN0YW5nbGUobmF0aXZlUGF0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5YLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LlksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuV2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuSGVpZ2h0KSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEFkZFJlY3RhbmdsZXMoSU4gY29uc3QgUmVjdEYqIHJlY3RzLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoUmVjdGFuZ2xlcyhuYXRpdmVQYXRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOw0KLSAgICB9DQotDQotICAgIC8vIGludGVnZXIgdmVyc2lvbg0KLSAgICBTdGF0dXMgQWRkUmVjdGFuZ2xlKElOIGNvbnN0IFJlY3QmIHJlY3QpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEFkZFBhdGhSZWN0YW5nbGVJKG5hdGl2ZVBhdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuWCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5ZLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LldpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LkhlaWdodCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBBZGRSZWN0YW5nbGVzKElOIGNvbnN0IFJlY3QqIHJlY3RzLCBJTlQgY291bnQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEFkZFBhdGhSZWN0YW5nbGVzSShuYXRpdmVQYXRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOw0KLSAgICB9DQotDQotICAgIC8vIGZsb2F0IHZlcnNpb24NCi0gICAgU3RhdHVzIEFkZEVsbGlwc2UoSU4gY29uc3QgUmVjdEYmIHJlY3QpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBBZGRFbGxpcHNlKHJlY3QuWCwgcmVjdC5ZLCByZWN0LldpZHRoLCByZWN0LkhlaWdodCk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEFkZEVsbGlwc2UoSU4gUkVBTCB4LCANCi0gICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5LCANCi0gICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB3aWR0aCwgDQotICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgaGVpZ2h0KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoRWxsaXBzZShuYXRpdmVQYXRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCkpOw0KLSAgICB9DQotDQotICAgIC8vIGludGVnZXIgdmVyc2lvbg0KLSAgICBTdGF0dXMgQWRkRWxsaXBzZShJTiBjb25zdCBSZWN0JiByZWN0KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gQWRkRWxsaXBzZShyZWN0LlgsIHJlY3QuWSwgcmVjdC5XaWR0aCwgcmVjdC5IZWlnaHQpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBBZGRFbGxpcHNlKElOIElOVCB4LCANCi0gICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHksIA0KLSAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgd2lkdGgsIA0KLSAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgaGVpZ2h0KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoRWxsaXBzZUkobmF0aXZlUGF0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQpKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBmbG9hdCB2ZXJzaW9uDQotICAgIFN0YXR1cyBBZGRQaWUoSU4gY29uc3QgUmVjdEYmIHJlY3QsIA0KLSAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3RhcnRBbmdsZSwgDQotICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzd2VlcEFuZ2xlKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gQWRkUGllKHJlY3QuWCwgcmVjdC5ZLCByZWN0LldpZHRoLCByZWN0LkhlaWdodCwgc3RhcnRBbmdsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgc3dlZXBBbmdsZSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEFkZFBpZShJTiBSRUFMIHgsIA0KLSAgICAgICAgICAgICAgICAgIElOIFJFQUwgeSwgDQotICAgICAgICAgICAgICAgICAgSU4gUkVBTCB3aWR0aCwgDQotICAgICAgICAgICAgICAgICAgSU4gUkVBTCBoZWlnaHQsIA0KLSAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3RhcnRBbmdsZSwNCi0gICAgICAgICAgICAgICAgICBJTiBSRUFMIHN3ZWVwQW5nbGUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEFkZFBhdGhQaWUobmF0aXZlUGF0aCwgeCwgeSwgd2lkdGgsIGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsIHN3ZWVwQW5nbGUpKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBpbnRlZ2VyIHZlcnNpb24NCi0gICAgU3RhdHVzIEFkZFBpZShJTiBjb25zdCBSZWN0JiByZWN0LCANCi0gICAgICAgICAgICAgICAgICBJTiBSRUFMIHN0YXJ0QW5nbGUsIA0KLSAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3dlZXBBbmdsZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEFkZFBpZShyZWN0LlgsDQotICAgICAgICAgICAgICAgICAgICAgIHJlY3QuWSwNCi0gICAgICAgICAgICAgICAgICAgICAgcmVjdC5XaWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgcmVjdC5IZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsDQotICAgICAgICAgICAgICAgICAgICAgIHN3ZWVwQW5nbGUpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBBZGRQaWUoSU4gSU5UIHgsIA0KLSAgICAgICAgICAgICAgICAgIElOIElOVCB5LCANCi0gICAgICAgICAgICAgICAgICBJTiBJTlQgd2lkdGgsIA0KLSAgICAgICAgICAgICAgICAgIElOIElOVCBoZWlnaHQsIA0KLSAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3RhcnRBbmdsZSwNCi0gICAgICAgICAgICAgICAgICBJTiBSRUFMIHN3ZWVwQW5nbGUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEFkZFBhdGhQaWVJKG5hdGl2ZVBhdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3ZWVwQW5nbGUpKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBmbG9hdCB2ZXJzaW9uDQotICAgIFN0YXR1cyBBZGRQb2x5Z29uKElOIGNvbnN0IFBvaW50RiogcG9pbnRzLCANCi0gICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoUG9seWdvbihuYXRpdmVQYXRoLCBwb2ludHMsIGNvdW50KSk7DQotICAgIH0NCi0NCi0gICAgLy8gaW50ZWdlciB2ZXJzaW9uDQotICAgIFN0YXR1cyBBZGRQb2x5Z29uKElOIGNvbnN0IFBvaW50KiBwb2ludHMsIA0KLSAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpDQotICAgIHsNCi0gICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQWRkUGF0aFBvbHlnb25JKG5hdGl2ZVBhdGgsIHBvaW50cywgY291bnQpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgQWRkUGF0aChJTiBjb25zdCBHcmFwaGljc1BhdGgqIGFkZGluZ1BhdGgsIA0KLSAgICAgICAgICAgICAgICAgICBJTiBCT09MIGNvbm5lY3QpDQotICAgIHsNCi0gICAgICAgIEdwUGF0aCogbmF0aXZlUGF0aDIgPSBOVUxMOw0KLSAgICAgICAgaWYoYWRkaW5nUGF0aCkNCi0gICAgICAgICAgICBuYXRpdmVQYXRoMiA9IGFkZGluZ1BhdGgtPm5hdGl2ZVBhdGg7DQotDQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoUGF0aChuYXRpdmVQYXRoLCBuYXRpdmVQYXRoMiwgY29ubmVjdCkpOw0KLSAgICB9DQotDQotICAgIC8vIEFkZFN0cmluZyBwb2ludCB2ZXJzaW9uDQotDQotICAgIFN0YXR1cyBBZGRTdHJpbmcoDQotICAgICAgICBJTiBjb25zdCBXQ0hBUiAgICAgICAgICpzdHJpbmcsDQotICAgICAgICBJTiBJTlQgICAgICAgICAgICAgICAgICBsZW5ndGgsDQotICAgICAgICBJTiBjb25zdCBGb250RmFtaWx5ICAgICpmYW1pbHksDQotICAgICAgICBJTiBJTlQgICAgICAgICAgICAgICAgICBzdHlsZSwNCi0gICAgICAgIElOIFJFQUwgICAgICAgICAgICAgICAgIGVtU2l6ZSwgIC8vIEluIHdvcmxkIHVuaXRzDQotICAgICAgICBJTiBjb25zdCBQb2ludEYgICAgICAgICZvcmlnaW4sDQotICAgICAgICBJTiBjb25zdCBTdHJpbmdGb3JtYXQgICpmb3JtYXQNCi0gICAgKQ0KLSAgICB7DQotICAgICAgICBSZWN0RiByZWN0KG9yaWdpbi5YLCBvcmlnaW4uWSwgMC4wZiwgMC4wZik7DQotDQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoU3RyaW5nKA0KLSAgICAgICAgICAgIG5hdGl2ZVBhdGgsDQotICAgICAgICAgICAgc3RyaW5nLA0KLSAgICAgICAgICAgIGxlbmd0aCwNCi0gICAgICAgICAgICBmYW1pbHkgPyBmYW1pbHktPm5hdGl2ZUZhbWlseSA6IE5VTEwsDQotICAgICAgICAgICAgc3R5bGUsDQotICAgICAgICAgICAgZW1TaXplLA0KLSAgICAgICAgICAgICZyZWN0LA0KLSAgICAgICAgICAgIGZvcm1hdCA/IGZvcm1hdC0+bmF0aXZlRm9ybWF0IDogTlVMTA0KLSAgICAgICAgKSk7DQotICAgIH0NCi0NCi0gICAgLy8gQWRkU3RyaW5nIHJlY3RhbmdsZSB2ZXJzaW9uDQotDQotICAgIFN0YXR1cyBBZGRTdHJpbmcoDQotICAgICAgICBJTiBjb25zdCBXQ0hBUiAgICAgICAgICpzdHJpbmcsDQotICAgICAgICBJTiBJTlQgICAgICAgICAgICAgICAgICBsZW5ndGgsDQotICAgICAgICBJTiBjb25zdCBGb250RmFtaWx5ICAgICpmYW1pbHksDQotICAgICAgICBJTiBJTlQgICAgICAgICAgICAgICAgICBzdHlsZSwNCi0gICAgICAgIElOIFJFQUwgICAgICAgICAgICAgICAgIGVtU2l6ZSwgIC8vIEluIHdvcmxkIHVuaXRzDQotICAgICAgICBJTiBjb25zdCBSZWN0RiAgICAgICAgICZsYXlvdXRSZWN0LA0KLSAgICAgICAgSU4gY29uc3QgU3RyaW5nRm9ybWF0ICAqZm9ybWF0DQotICAgICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQWRkUGF0aFN0cmluZygNCi0gICAgICAgICAgICBuYXRpdmVQYXRoLA0KLSAgICAgICAgICAgIHN0cmluZywNCi0gICAgICAgICAgICBsZW5ndGgsDQotICAgICAgICAgICAgZmFtaWx5ID8gZmFtaWx5LT5uYXRpdmVGYW1pbHkgOiBOVUxMLA0KLSAgICAgICAgICAgIHN0eWxlLA0KLSAgICAgICAgICAgIGVtU2l6ZSwNCi0gICAgICAgICAgICAmbGF5b3V0UmVjdCwNCi0gICAgICAgICAgICBmb3JtYXQgPyBmb3JtYXQtPm5hdGl2ZUZvcm1hdCA6IE5VTEwNCi0gICAgICAgICkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBBZGRTdHJpbmcoDQotICAgICAgICBJTiBjb25zdCBXQ0hBUiAgICAgICAgICpzdHJpbmcsDQotICAgICAgICBJTiBJTlQgICAgICAgICAgICAgICAgICBsZW5ndGgsDQotICAgICAgICBJTiBjb25zdCBGb250RmFtaWx5ICAgICpmYW1pbHksDQotICAgICAgICBJTiBJTlQgICAgICAgICAgICAgICAgICBzdHlsZSwNCi0gICAgICAgIElOIFJFQUwgICAgICAgICAgICAgICAgIGVtU2l6ZSwgIC8vIEluIHdvcmxkIHVuaXRzDQotICAgICAgICBJTiBjb25zdCBQb2ludCAgICAgICAgICZvcmlnaW4sDQotICAgICAgICBJTiBjb25zdCBTdHJpbmdGb3JtYXQgICpmb3JtYXQNCi0gICAgKQ0KLSAgICB7DQotICAgICAgICBSZWN0IHJlY3Qob3JpZ2luLlgsIG9yaWdpbi5ZLCAwLCAwKTsNCi0NCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEFkZFBhdGhTdHJpbmdJKA0KLSAgICAgICAgICAgIG5hdGl2ZVBhdGgsDQotICAgICAgICAgICAgc3RyaW5nLA0KLSAgICAgICAgICAgIGxlbmd0aCwNCi0gICAgICAgICAgICBmYW1pbHkgPyBmYW1pbHktPm5hdGl2ZUZhbWlseSA6IE5VTEwsDQotICAgICAgICAgICAgc3R5bGUsDQotICAgICAgICAgICAgZW1TaXplLA0KLSAgICAgICAgICAgICZyZWN0LA0KLSAgICAgICAgICAgIGZvcm1hdCA/IGZvcm1hdC0+bmF0aXZlRm9ybWF0IDogTlVMTA0KLSAgICAgICAgKSk7DQotICAgIH0NCi0NCi0gICAgLy8gQWRkU3RyaW5nIHJlY3RhbmdsZSB2ZXJzaW9uDQotDQotICAgIFN0YXR1cyBBZGRTdHJpbmcoDQotICAgICAgICBJTiBjb25zdCBXQ0hBUiAgICAgICAgICpzdHJpbmcsDQotICAgICAgICBJTiBJTlQgICAgICAgICAgICAgICAgICBsZW5ndGgsDQotICAgICAgICBJTiBjb25zdCBGb250RmFtaWx5ICAgICpmYW1pbHksDQotICAgICAgICBJTiBJTlQgICAgICAgICAgICAgICAgICBzdHlsZSwNCi0gICAgICAgIElOIFJFQUwgICAgICAgICAgICAgICAgIGVtU2l6ZSwgIC8vIEluIHdvcmxkIHVuaXRzDQotICAgICAgICBJTiBjb25zdCBSZWN0ICAgICAgICAgICZsYXlvdXRSZWN0LA0KLSAgICAgICAgSU4gY29uc3QgU3RyaW5nRm9ybWF0ICAqZm9ybWF0DQotICAgICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQWRkUGF0aFN0cmluZ0koDQotICAgICAgICAgICAgbmF0aXZlUGF0aCwNCi0gICAgICAgICAgICBzdHJpbmcsDQotICAgICAgICAgICAgbGVuZ3RoLA0KLSAgICAgICAgICAgIGZhbWlseSA/IGZhbWlseS0+bmF0aXZlRmFtaWx5IDogTlVMTCwNCi0gICAgICAgICAgICBzdHlsZSwNCi0gICAgICAgICAgICBlbVNpemUsDQotICAgICAgICAgICAgJmxheW91dFJlY3QsDQotICAgICAgICAgICAgZm9ybWF0ID8gZm9ybWF0LT5uYXRpdmVGb3JtYXQgOiBOVUxMDQotICAgICAgICApKTsNCi0gICAgfQ0KLSAgICANCi0gICAgLyoqDQotICAgICAqIFRyYW5zZm9ybXMgdGhlIHBhdGggb2JqZWN0DQotICAgICAqLw0KLSAgICBTdGF0dXMgVHJhbnNmb3JtKElOIGNvbnN0IE1hdHJpeCogbWF0cml4KQ0KLSAgICB7DQotICAgICAgICBpZihtYXRyaXgpDQotICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwVHJhbnNmb3JtUGF0aChuYXRpdmVQYXRoLCBtYXRyaXgtPm5hdGl2ZU1hdHJpeCkpOw0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgIHJldHVybiBPazsgIC8vIE5vIG5lZWQgdG8gdHJhbnNmb3JtLg0KLSAgICB9DQotDQotICAgIC8qKg0KLSAgICAgKiBHZXQgdGhlIGJvdW5kcyBvZiB0aGUgcGF0aCBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdHJhbnNmb3JtLg0KLSAgICAgKiBUaGlzIGlzIG5vdCBhbHdheXMgdGhlIHRpZ2h0ZXN0IGJvdW5kcy4NCi0gICAgICoNCi0gICAgICogRGVmaW5lZCBpbiBHZGlwbHVzR3JhcGhpY3MuaC4NCi0gICAgICovDQotICAgIFN0YXR1cyBHZXRCb3VuZHMoT1VUIFJlY3RGKiBib3VuZHMsIA0KLSAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IE1hdHJpeCogbWF0cml4ID0gTlVMTCwgDQotICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUGVuKiBwZW4gPSBOVUxMKSBjb25zdDsNCi0NCi0gICAgLy8gaW50ZWdlciB2ZXJzaW9uIChkZWZpbmVkIGluIEdkaXBsdXNHcmFwaGljcy5oKQ0KLSAgICBTdGF0dXMgR2V0Qm91bmRzKE9VVCBSZWN0KiBib3VuZHMsDQotICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgTWF0cml4KiBtYXRyaXggPSBOVUxMLCANCi0gICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQZW4qIHBlbiA9IE5VTEwpIGNvbnN0Ow0KLQ0KLSAgICAvKioNCi0gICAgICogRmxhdHRlbiB0aGUgcGF0aCBvYmplY3QNCi0gICAgICogT25jZSB0aGlzIGlzIGNhbGxlZCwgdGhlIHJlc3VsdGFudCBwYXRoIGlzIG1hZGUgb2YgbGluZSBzZWdtZW50cyBhbmQNCi0gICAgICogdGhlIG9yaWdpbmFsIHBhdGggaW5mb3JtYXRpb24gaXMgbG9zdC4NCi0gICAgICogV2hlbiBtYXRyaXggPSBOVUxMLCB0aGUgaWRlbnRpdHkgbWF0cml4IGlzIGFzc3VtZWQuDQotICAgICAqLw0KLSAgICBTdGF0dXMgRmxhdHRlbihJTiBjb25zdCBNYXRyaXgqIG1hdHJpeCA9IE5VTEwsIA0KLSAgICAgICAgICAgICAgICAgICBJTiBSRUFMIGZsYXRuZXNzID0gRmxhdG5lc3NEZWZhdWx0KQ0KLSAgICB7DQotICAgICAgICBHcE1hdHJpeCogbmF0aXZlTWF0cml4ID0gTlVMTDsNCi0gICAgICAgIGlmKG1hdHJpeCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBuYXRpdmVNYXRyaXggPSBtYXRyaXgtPm5hdGl2ZU1hdHJpeDsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEZsYXR0ZW5QYXRoKA0KLSAgICAgICAgICAgIG5hdGl2ZVBhdGgsIA0KLSAgICAgICAgICAgIG5hdGl2ZU1hdHJpeCwgDQotICAgICAgICAgICAgZmxhdG5lc3MNCi0gICAgICAgICkpOw0KLSAgICB9DQotDQotI2lmZGVmIERDUl9VU0VfTkVXXzIwMjkwMw0KLSAgICANCi0gICAgU3RhdHVzIFdpZGVuKA0KLSAgICAgICAgSU4gY29uc3QgUGVuKiBwZW4sIA0KLSAgICAgICAgSU4gY29uc3QgTWF0cml4KiBtYXRyaXggPSBOVUxMLA0KLSAgICAgICAgSU4gUkVBTCBmbGF0bmVzcyA9IEZsYXRuZXNzRGVmYXVsdA0KLSAgICApDQotICAgIHsNCi0gICAgICAgIEdwTWF0cml4KiBuYXRpdmVNYXRyaXggPSBOVUxMOw0KLSAgICAgICAgaWYobWF0cml4KQ0KLSAgICAgICAgICAgIG5hdGl2ZU1hdHJpeCA9IG1hdHJpeC0+bmF0aXZlTWF0cml4Ow0KLQ0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwV2lkZW5QYXRoKA0KLSAgICAgICAgICAgIG5hdGl2ZVBhdGgsIA0KLSAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLA0KLSAgICAgICAgICAgIG5hdGl2ZU1hdHJpeCwgDQotICAgICAgICAgICAgZmxhdG5lc3MNCi0gICAgICAgICkpOw0KLSAgICB9DQotDQotI2Vsc2UNCi0NCi0gICAgLyoqDQotICAgICAqIFdpZGVuIHRoZSBwYXRoIG9iamVjdA0KLSAgICAgKiBXaGVuIHJlbW92ZVNlbGZJbnRlcnNlY3RzIGlzIFRSVUUsIHRoaXMgcmV0dXJucyB0aGUgd2lkZW5lZCBwYXRoDQotICAgICAqIHdpdGhvdXQgc2VsZiBpbnRlcnNlY3Rpb25zLg0KLSAgICAgKiBXaGVuIGl0IGlzIEZBTFNFLCBpdCByZXR1cm5zIHRoZSB3aWRlbmVkIHBhdGggd2l0aCBzZWxmaW50ZXJzZWN0aW9ucy4NCi0gICAgICogVGhlIGxhdHRlciBpcyBmYXN0ZXIgYW5kIGlzIHVzdWFsbHkgc2FmZmljaWVudCBmb3IgZmlsbGluZy4NCi0gICAgICovDQotICAgIFN0YXR1cyBXaWRlbihJTiBjb25zdCBQZW4qIHBlbiwgDQotICAgICAgICAgICAgICAgICBJTiBjb25zdCBNYXRyaXgqIG1hdHJpeCA9IE5VTEwsDQotICAgICAgICAgICAgICAgICBJTiBCT09MIHJlbW92ZVNlbGZJbnRlcnNlY3RzID0gVFJVRSkNCi0gICAgew0KLSAgICAgICAgR3BNYXRyaXgqIG5hdGl2ZU1hdHJpeCA9IE5VTEw7DQotICAgICAgICBpZihtYXRyaXgpDQotICAgICAgICAgICAgbmF0aXZlTWF0cml4ID0gbWF0cml4LT5uYXRpdmVNYXRyaXg7DQotDQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBXaWRlblBhdGhXaXRoTWluaW11bVJlc29sdXRpb25zKG5hdGl2ZVBhdGgsIHBlbi0+bmF0aXZlUGVuLA0KLSAgICAgICAgICAgIDAsIDAsIG5hdGl2ZU1hdHJpeCwgcmVtb3ZlU2VsZkludGVyc2VjdHMpKTsNCi0gICAgfQ0KLQ0KLSAgICAvKioNCi0gICAgICogV2lkZW4gdGhlIHBhdGggb2JqZWN0DQotICAgICAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byBXaWRlbigpIG1ldGhvZCBleGNlcHQgdGhhdA0KLSAgICAgKiBUaGUgd2lkdGhzIG9mIHRoZSB3aWRlbmVkIHBhdGggYXJlIGxhcmdlciB0aGFuIHRoZSBnaXZlbg0KLSAgICAgKiBtaW5pbXVtIHJlc29sdXRpb25zIGluIHggYW5kIHkgY29vcmRpbmF0ZXMgYWZ0ZXIgdGhlIHRyYW5zZm9ybS4NCi0gICAgICogVGhpcyBpcyB1c2VmdWxsIHdoZW4gd2lkZW5pbmcgYSBwYXRoIHdpdGggdGhlIGxpbWl0ZWQgZGV2aWNlIHJlc29sdXRpb25zLg0KLSAgICAgKi8NCi0NCi0gICAgU3RhdHVzIFdpZGVuKElOIGNvbnN0IFBlbiogcGVuLCANCi0gICAgICAgICAgICAgICAgIElOIFJFQUwgbWluWHJlcywgDQotICAgICAgICAgICAgICAgICBJTiBSRUFMIG1pbllyZXMsIA0KLSAgICAgICAgICAgICAgICAgSU4gY29uc3QgTWF0cml4KiBtYXRyaXggPSBOVUxMLA0KLSAgICAgICAgICAgICAgICAgSU4gQk9PTCByZW1vdmVTZWxmSW50ZXJzZWN0cyA9IFRSVUUpDQotICAgIHsNCi0gICAgICAgIEdwTWF0cml4KiBuYXRpdmVNYXRyaXggPSBOVUxMOw0KLSAgICAgICAgaWYobWF0cml4KQ0KLSAgICAgICAgICAgIG5hdGl2ZU1hdHJpeCA9IG1hdHJpeC0+bmF0aXZlTWF0cml4Ow0KLQ0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwV2lkZW5QYXRoV2l0aE1pbmltdW1SZXNvbHV0aW9ucyhuYXRpdmVQYXRoLCBwZW4tPm5hdGl2ZVBlbiwNCi0gICAgICAgICAgICBtaW5YcmVzLCBtaW5ZcmVzLCBuYXRpdmVNYXRyaXgsIHJlbW92ZVNlbGZJbnRlcnNlY3RzKSk7DQotICAgIH0NCi0NCi0jZW5kaWYgLy8gRENSX1VTRV9ORVdfMjAyOTAzDQotDQotICAgIFN0YXR1cyBPdXRsaW5lKA0KLSAgICAgICAgSU4gY29uc3QgTWF0cml4ICptYXRyaXggPSBOVUxMLA0KLSAgICAgICAgSU4gUkVBTCBmbGF0bmVzcyA9IEZsYXRuZXNzRGVmYXVsdA0KLSAgICApDQotICAgIHsNCi0gICAgICAgIEdwTWF0cml4KiBuYXRpdmVNYXRyaXggPSBOVUxMOw0KLSAgICAgICAgaWYobWF0cml4KQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIG5hdGl2ZU1hdHJpeCA9IG1hdHJpeC0+bmF0aXZlTWF0cml4Ow0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwV2luZGluZ01vZGVPdXRsaW5lKA0KLSAgICAgICAgICAgIG5hdGl2ZVBhdGgsIG5hdGl2ZU1hdHJpeCwgZmxhdG5lc3MNCi0gICAgICAgICkpOw0KLSAgICB9DQotICAgIA0KLSAgICAvKioNCi0gICAgICogV2FycCB0aGUgcGF0aCBvYmplY3QNCi0gICAgICogT25jZSB0aGlzIGlzIGNhbGxlZCwgdGhlIHJlc3VsdGFudCBwYXRoIGlzIG1hZGUgb2YgbGluZSBzZWdtZW50cyBhbmQNCi0gICAgICogdGhlIG9yaWdpbmFsIHBhdGggaW5mb3JtYXRpb24gaXMgbG9zdC4NCi0gICAgICogV2hlbiBtYXRyaXggPSBOVUxMLCB0aGUgaWRlbnRpdHkgbWF0cml4IGlzIGFzc3VtZWQuDQotICAgICAqLw0KLSAgICBTdGF0dXMgV2FycChJTiBjb25zdCBQb2ludEYqIGRlc3RQb2ludHMsIA0KLSAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQsDQotICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3RGJiBzcmNSZWN0LCANCi0gICAgICAgICAgICAgICAgSU4gY29uc3QgTWF0cml4KiBtYXRyaXggPSBOVUxMLA0KLSAgICAgICAgICAgICAgICBJTiBXYXJwTW9kZSB3YXJwTW9kZSA9IFdhcnBNb2RlUGVyc3BlY3RpdmUsDQotICAgICAgICAgICAgICAgIElOIFJFQUwgZmxhdG5lc3MgPSBGbGF0bmVzc0RlZmF1bHQpDQotICAgIHsNCi0gICAgICAgIEdwTWF0cml4KiBuYXRpdmVNYXRyaXggPSBOVUxMOw0KLSAgICAgICAgaWYobWF0cml4KQ0KLSAgICAgICAgICAgIG5hdGl2ZU1hdHJpeCA9IG1hdHJpeC0+bmF0aXZlTWF0cml4Ow0KLQ0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwV2FycFBhdGgoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZVBhdGgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZU1hdHJpeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFBvaW50cywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1JlY3QuWCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUmVjdC5ZLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNSZWN0LldpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNSZWN0LkhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FycE1vZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXRuZXNzKSk7DQotICAgIH0NCi0NCi0gICAgLyoqDQotICAgICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHBvaW50cyBpbiB0aGUgY3VycmVudCBwYXRoDQotICAgICAqLw0KLSAgICBJTlQgR2V0UG9pbnRDb3VudCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIElOVCBjb3VudCA9IDA7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBvaW50Q291bnQobmF0aXZlUGF0aCwgJmNvdW50KSk7DQotDQotICAgICAgICByZXR1cm4gY291bnQ7DQotICAgIH0NCi0NCi0gICAgLyoqDQotICAgICAqIFJldHVybiB0aGUgcGF0aCBwb2ludCB0eXBlIGluZm9ybWF0aW9uDQotICAgICAqLw0KLSAgICBTdGF0dXMgR2V0UGF0aFR5cGVzKE9VVCBCWVRFKiB0eXBlcywgDQotICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQYXRoVHlwZXMobmF0aXZlUGF0aCwgdHlwZXMsIGNvdW50KSk7DQotICAgIH0NCi0NCi0gICAgLyoqDQotICAgICAqIFJldHVybiB0aGUgcGF0aCBwb2ludCBjb29yZGluYXRlIGluZm9ybWF0aW9uDQotICAgICAqIEBub3RlcyBTaG91bGQgdGhlcmUgYmUgUGF0aERhdGEgdGhhdCBjb250YWlucyB0eXBlc1tdIGFuZCBwb2ludHNbXQ0KLSAgICAgKiAgICAgICAgZm9yIGdldCAmIHNldCBwdXJwb3Nlcy4NCi0gICAgICovDQotICAgIFN0YXR1cyBHZXRQYXRoUG9pbnRzKE9VVCBQb2ludEYqIHBvaW50cywgDQotICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGF0aFBvaW50cyhuYXRpdmVQYXRoLCBwb2ludHMsIGNvdW50KSk7DQotICAgIH0NCi0NCi0gICAgLy8gaW50ZWdlciB2ZXJzaW9uDQotICAgIFN0YXR1cyBHZXRQYXRoUG9pbnRzKE9VVCBQb2ludCogcG9pbnRzLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQYXRoUG9pbnRzSShuYXRpdmVQYXRoLCBwb2ludHMsIGNvdW50KSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEdldExhc3RTdGF0dXMoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBTdGF0dXMgbGFzdFN0YXR1cyA9IGxhc3RSZXN1bHQ7DQotICAgICAgICBsYXN0UmVzdWx0ID0gT2s7DQotDQotICAgICAgICByZXR1cm4gbGFzdFN0YXR1czsNCi0gICAgfQ0KLQ0KLSAgICAvKioNCi0gICAgICogSGl0IHRlc3Rpbmcgb3BlcmF0aW9ucw0KLSAgICAgKg0KLSAgICAgKiBpbmxpbmUgaW1wbGVtZW50YXRpb24gaXMgaW4gZ2RpcGx1c2dyYXBoaWNzLmguDQotICAgICAqLw0KLQ0KLSAgICBCT09MIElzVmlzaWJsZShJTiBjb25zdCBQb2ludEYmIHBvaW50LCANCi0gICAgICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcgPSBOVUxMKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gSXNWaXNpYmxlKHBvaW50LlgsIHBvaW50LlksIGcpOw0KLSAgICB9DQotICAgIA0KLSAgICBCT09MIElzVmlzaWJsZShJTiBSRUFMIHgsIA0KLSAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHksIA0KLSAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBHcmFwaGljcyogZyA9IE5VTEwpIGNvbnN0Ow0KLQ0KLSAgICBCT09MIElzVmlzaWJsZShJTiBjb25zdCBQb2ludCYgcG9pbnQsDQotICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IEdyYXBoaWNzKiBnID0gTlVMTCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIElzVmlzaWJsZShwb2ludC5YLCBwb2ludC5ZLCBnKTsNCi0gICAgfQ0KLQ0KLSAgICBCT09MIElzVmlzaWJsZShJTiBJTlQgeCwgDQotICAgICAgICAgICAgICAgICAgIElOIElOVCB5LCANCi0gICAgICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcgPSBOVUxMKSBjb25zdDsNCi0gICAgDQotICAgIEJPT0wgSXNPdXRsaW5lVmlzaWJsZShJTiBjb25zdCBQb2ludEYmIHBvaW50LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUGVuKiBwZW4sIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcgPSBOVUxMKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gSXNPdXRsaW5lVmlzaWJsZShwb2ludC5YLCBwb2ludC5ZLCBwZW4sIGcpOw0KLSAgICB9DQotDQotICAgIEJPT0wgSXNPdXRsaW5lVmlzaWJsZShJTiBSRUFMIHgsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5LCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBlbiogcGVuLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IEdyYXBoaWNzKiBnID0gTlVMTCkgY29uc3Q7DQotDQotICAgIEJPT0wgSXNPdXRsaW5lVmlzaWJsZShJTiBjb25zdCBQb2ludCYgcG9pbnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQZW4qIHBlbiwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBHcmFwaGljcyogZyA9IE5VTEwpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBJc091dGxpbmVWaXNpYmxlKHBvaW50LlgsIHBvaW50LlksIHBlbiwgZyk7DQotICAgIH0NCi0gICAgDQotICAgIEJPT0wgSXNPdXRsaW5lVmlzaWJsZShJTiBJTlQgeCwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeSwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQZW4qIHBlbiwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBHcmFwaGljcyogZyA9IE5VTEwpIGNvbnN0Ow0KLQ0KLXByb3RlY3RlZDoNCi0NCi0gICAgR3JhcGhpY3NQYXRoKGNvbnN0IEdyYXBoaWNzUGF0aCYgcGF0aCkNCi0gICAgew0KLSAgICAgICAgR3BQYXRoICpjbG9uZXBhdGggPSBOVUxMOw0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDbG9uZVBhdGgocGF0aC5uYXRpdmVQYXRoLCAmY2xvbmVwYXRoKSk7DQotICAgICAgICBTZXROYXRpdmVQYXRoKGNsb25lcGF0aCk7DQotICAgIH0NCi0NCi0jaWZkZWYgRENSX1VTRV9ORVdfMjUwOTMyDQotDQotcHJpdmF0ZToNCi0gICAgR3JhcGhpY3NQYXRoJiBvcGVyYXRvcj0oY29uc3QgR3JhcGhpY3NQYXRoICYpOw0KLXByb3RlY3RlZDoNCi0NCi0jZWxzZQ0KLQ0KLSAgICBHcmFwaGljc1BhdGgmIG9wZXJhdG9yPShjb25zdCBHcmFwaGljc1BhdGgmIHBhdGgpDQotICAgIHsNCi0gICAgICAgIHBhdGg7DQotICAgICAgICBTZXRTdGF0dXMoTm90SW1wbGVtZW50ZWQpOw0KLSAgICAgICAgcmV0dXJuICp0aGlzOw0KLSAgICB9DQotDQotI2VuZGlmDQotDQotICAgIEdyYXBoaWNzUGF0aChHcFBhdGgqIG5hdGl2ZVBhdGgpDQotICAgIHsNCi0gICAgICAgIGxhc3RSZXN1bHQgPSBPazsNCi0gICAgICAgIFNldE5hdGl2ZVBhdGgobmF0aXZlUGF0aCk7DQotICAgIH0NCi0NCi0gICAgVk9JRCBTZXROYXRpdmVQYXRoKEdwUGF0aCAqbmF0aXZlUGF0aCkNCi0gICAgew0KLSAgICAgICAgdGhpcy0+bmF0aXZlUGF0aCA9IG5hdGl2ZVBhdGg7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFNldFN0YXR1cyhTdGF0dXMgc3RhdHVzKSBjb25zdA0KLSAgICB7DQotICAgICAgICBpZiAoc3RhdHVzICE9IE9rKQ0KLSAgICAgICAgICAgIHJldHVybiAobGFzdFJlc3VsdCA9IHN0YXR1cyk7DQotICAgICAgICBlbHNlDQotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCi0gICAgfQ0KLQ0KLXByb3RlY3RlZDoNCi0gICAgR3BQYXRoKiBuYXRpdmVQYXRoOw0KLSAgICBtdXRhYmxlIFN0YXR1cyBsYXN0UmVzdWx0Ow0KLX07DQotDQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEdyYXBoaXNQYXRoSXRlcmF0b3IgY2xhc3MNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotY2xhc3MgR3JhcGhpY3NQYXRoSXRlcmF0b3IgOiBwdWJsaWMgR2RpcGx1c0Jhc2UNCi17DQotcHVibGljOg0KLQ0KLSAgICBHcmFwaGljc1BhdGhJdGVyYXRvcihJTiBjb25zdCBHcmFwaGljc1BhdGgqIHBhdGgpDQotICAgIHsNCi0gICAgICAgIEdwUGF0aCogbmF0aXZlUGF0aCA9IE5VTEw7DQotICAgICAgICBpZihwYXRoKQ0KLSAgICAgICAgICAgIG5hdGl2ZVBhdGggPSBwYXRoLT5uYXRpdmVQYXRoOw0KLQ0KLSAgICAgICAgR3BQYXRoSXRlcmF0b3IgKml0ZXIgPSBOVUxMOw0KLSAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVQYXRoSXRlcigmaXRlciwgbmF0aXZlUGF0aCk7DQotICAgICAgICBTZXROYXRpdmVJdGVyYXRvcihpdGVyKTsNCi0gICAgfQ0KLQ0KLSAgICB+R3JhcGhpY3NQYXRoSXRlcmF0b3IoKQ0KLSAgICB7DQotICAgICAgICBEbGxFeHBvcnRzOjpHZGlwRGVsZXRlUGF0aEl0ZXIobmF0aXZlSXRlcmF0b3IpOw0KLSAgICB9DQotDQotDQotICAgIElOVCBOZXh0U3VicGF0aChPVVQgSU5UKiBzdGFydEluZGV4LA0KLSAgICAgICAgICAgICAgICAgICAgT1VUIElOVCogZW5kSW5kZXgsDQotICAgICAgICAgICAgICAgICAgICBPVVQgQk9PTCogaXNDbG9zZWQpDQotICAgIHsNCi0gICAgICAgIElOVCByZXN1bHRDb3VudDsNCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUGF0aEl0ZXJOZXh0U3VicGF0aChuYXRpdmVJdGVyYXRvciwNCi0gICAgICAgICAgICAmcmVzdWx0Q291bnQsIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBpc0Nsb3NlZCkpOw0KLQ0KLSAgICAgICAgcmV0dXJuIHJlc3VsdENvdW50Ow0KLSAgICB9DQotDQotDQotICAgIElOVCBOZXh0U3VicGF0aChJTiBjb25zdCBHcmFwaGljc1BhdGgqIHBhdGgsIA0KLSAgICAgICAgICAgICAgICAgICAgT1VUIEJPT0wqIGlzQ2xvc2VkKQ0KLSAgICB7DQotICAgICAgICBHcFBhdGgqIG5hdGl2ZVBhdGggPSBOVUxMOw0KLQ0KLSAgICAgICAgSU5UIHJlc3VsdENvdW50Ow0KLQ0KLSAgICAgICAgaWYocGF0aCkNCi0gICAgICAgICAgICBuYXRpdmVQYXRoPSBwYXRoLT5uYXRpdmVQYXRoOw0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBQYXRoSXRlck5leHRTdWJwYXRoUGF0aChuYXRpdmVJdGVyYXRvciwNCi0gICAgICAgICAgICAmcmVzdWx0Q291bnQsIG5hdGl2ZVBhdGgsIGlzQ2xvc2VkKSk7DQotDQotICAgICAgICByZXR1cm4gcmVzdWx0Q291bnQ7DQotICAgIH0NCi0NCi0gICAgSU5UIE5leHRQYXRoVHlwZShPVVQgQllURSogcGF0aFR5cGUsIA0KLSAgICAgICAgICAgICAgICAgICAgIE9VVCBJTlQqIHN0YXJ0SW5kZXgsIA0KLSAgICAgICAgICAgICAgICAgICAgIE9VVCBJTlQqIGVuZEluZGV4KQ0KLSAgICB7DQotICAgICAgICBJTlQgcmVzdWx0Q291bnQ7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFBhdGhJdGVyTmV4dFBhdGhUeXBlKG5hdGl2ZUl0ZXJhdG9yLA0KLSAgICAgICAgICAgICZyZXN1bHRDb3VudCwgcGF0aFR5cGUsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSk7DQotDQotICAgICAgICByZXR1cm4gcmVzdWx0Q291bnQ7DQotICAgIH0NCi0NCi0gICAgSU5UIE5leHRNYXJrZXIoT1VUIElOVCogc3RhcnRJbmRleCwgDQotICAgICAgICAgICAgICAgICAgIE9VVCBJTlQqIGVuZEluZGV4KQ0KLSAgICB7DQotICAgICAgICBJTlQgcmVzdWx0Q291bnQ7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFBhdGhJdGVyTmV4dE1hcmtlcihuYXRpdmVJdGVyYXRvciwNCi0gICAgICAgICAgICAmcmVzdWx0Q291bnQsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSk7DQotDQotICAgICAgICByZXR1cm4gcmVzdWx0Q291bnQ7DQotICAgIH0NCi0NCi0NCi0gICAgSU5UIE5leHRNYXJrZXIoSU4gY29uc3QgR3JhcGhpY3NQYXRoKiBwYXRoKQ0KLSAgICB7DQotICAgICAgICBHcFBhdGgqIG5hdGl2ZVBhdGggPSBOVUxMOw0KLQ0KLSAgICAgICAgSU5UIHJlc3VsdENvdW50Ow0KLQ0KLSAgICAgICAgaWYocGF0aCkNCi0gICAgICAgICAgICBuYXRpdmVQYXRoPSBwYXRoLT5uYXRpdmVQYXRoOw0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBQYXRoSXRlck5leHRNYXJrZXJQYXRoKG5hdGl2ZUl0ZXJhdG9yLA0KLSAgICAgICAgICAgICZyZXN1bHRDb3VudCwgbmF0aXZlUGF0aCkpOw0KLQ0KLSAgICAgICAgcmV0dXJuIHJlc3VsdENvdW50Ow0KLSAgICB9DQotDQotICAgIElOVCBHZXRDb3VudCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIElOVCByZXN1bHRDb3VudDsNCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUGF0aEl0ZXJHZXRDb3VudChuYXRpdmVJdGVyYXRvciwgJnJlc3VsdENvdW50KSk7DQotDQotICAgICAgICByZXR1cm4gcmVzdWx0Q291bnQ7DQotICAgIH0NCi0NCi0gICAgSU5UIEdldFN1YnBhdGhDb3VudCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIElOVCByZXN1bHRDb3VudDsNCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUGF0aEl0ZXJHZXRTdWJwYXRoQ291bnQobmF0aXZlSXRlcmF0b3IsICZyZXN1bHRDb3VudCkpOw0KLQ0KLSAgICAgICAgcmV0dXJuIHJlc3VsdENvdW50Ow0KLSAgICB9DQotDQotICAgIEJPT0wgSGFzQ3VydmUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBCT09MIGhhc0N1cnZlOw0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBQYXRoSXRlckhhc0N1cnZlKG5hdGl2ZUl0ZXJhdG9yLCAmaGFzQ3VydmUpKTsNCi0NCi0gICAgICAgIHJldHVybiBoYXNDdXJ2ZTsNCi0gICAgfQ0KLQ0KLSAgICBWT0lEIFJld2luZCgpDQotICAgIHsNCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUGF0aEl0ZXJSZXdpbmQobmF0aXZlSXRlcmF0b3IpKTsNCi0gICAgfQ0KLQ0KLSAgICBJTlQgRW51bWVyYXRlKE9VVCBQb2ludEYgKnBvaW50cywNCi0gICAgICAgICAgICAgICAgICBPVVQgQllURSAqdHlwZXMsIA0KLSAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkNCi0gICAgew0KLSAgICAgICAgSU5UIHJlc3VsdENvdW50Ow0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBQYXRoSXRlckVudW1lcmF0ZShuYXRpdmVJdGVyYXRvciwNCi0gICAgICAgICAgICAmcmVzdWx0Q291bnQsIHBvaW50cywgdHlwZXMsIGNvdW50KSk7DQotDQotICAgICAgICByZXR1cm4gcmVzdWx0Q291bnQ7DQotICAgIH0NCi0NCi0gICAgSU5UIENvcHlEYXRhKE9VVCBQb2ludEYqIHBvaW50cywgDQotICAgICAgICAgICAgICAgICBPVVQgQllURSogdHlwZXMsDQotICAgICAgICAgICAgICAgICBJTiBJTlQgc3RhcnRJbmRleCwgDQotICAgICAgICAgICAgICAgICBJTiBJTlQgZW5kSW5kZXgpDQotICAgIHsNCi0gICAgICAgIElOVCByZXN1bHRDb3VudDsNCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUGF0aEl0ZXJDb3B5RGF0YShuYXRpdmVJdGVyYXRvciwNCi0gICAgICAgICAgICAmcmVzdWx0Q291bnQsIHBvaW50cywgdHlwZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSk7DQotDQotICAgICAgICByZXR1cm4gcmVzdWx0Q291bnQ7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEdldExhc3RTdGF0dXMoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBTdGF0dXMgbGFzdFN0YXR1cyA9IGxhc3RSZXN1bHQ7DQotICAgICAgICBsYXN0UmVzdWx0ID0gT2s7DQotDQotICAgICAgICByZXR1cm4gbGFzdFN0YXR1czsNCi0gICAgfQ0KLQ0KLSNpZmRlZiBEQ1JfVVNFX05FV18yNTA5MzINCi0NCi1wcml2YXRlOg0KLSAgICBHcmFwaGljc1BhdGhJdGVyYXRvcihjb25zdCBHcmFwaGljc1BhdGhJdGVyYXRvciAmKTsNCi0gICAgR3JhcGhpY3NQYXRoSXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBHcmFwaGljc1BhdGhJdGVyYXRvciAmKTsNCi0NCi0jZW5kaWYNCi0NCi1wcm90ZWN0ZWQ6DQotICAgIFZPSUQgU2V0TmF0aXZlSXRlcmF0b3IoR3BQYXRoSXRlcmF0b3IgKm5hdGl2ZUl0ZXJhdG9yKQ0KLSAgICB7DQotICAgICAgICB0aGlzLT5uYXRpdmVJdGVyYXRvciA9IG5hdGl2ZUl0ZXJhdG9yOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTZXRTdGF0dXMoU3RhdHVzIHN0YXR1cykgY29uc3QNCi0gICAgew0KLSAgICAgICAgaWYgKHN0YXR1cyAhPSBPaykNCi0gICAgICAgICAgICByZXR1cm4gKGxhc3RSZXN1bHQgPSBzdGF0dXMpOw0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQotICAgIH0NCi0NCi1wcm90ZWN0ZWQ6DQotICAgIEdwUGF0aEl0ZXJhdG9yKiBuYXRpdmVJdGVyYXRvcjsNCi0gICAgbXV0YWJsZSBTdGF0dXMgbGFzdFJlc3VsdDsNCi19Ow0KLQ0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBSZXByZXNlbnQgcG9seWdvbiBncmFkaWVudCBicnVzaCBvYmplY3QNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotY2xhc3MgUGF0aEdyYWRpZW50QnJ1c2ggOiBwdWJsaWMgQnJ1c2gNCi17DQotcHVibGljOg0KLSAgICBmcmllbmQgY2xhc3MgUGVuOw0KLQ0KLSAgICBQYXRoR3JhZGllbnRCcnVzaCgNCi0gICAgICAgIElOIGNvbnN0IFBvaW50RiogcG9pbnRzLA0KLSAgICAgICAgSU4gSU5UIGNvdW50LA0KLSAgICAgICAgSU4gV3JhcE1vZGUgd3JhcE1vZGUgPSBXcmFwTW9kZUNsYW1wKQ0KLSAgICB7DQotICAgICAgICBHcFBhdGhHcmFkaWVudCAqYnJ1c2ggPSBOVUxMOw0KLQ0KLSAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVQYXRoR3JhZGllbnQoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywgY291bnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBNb2RlLCAmYnJ1c2gpOw0KLSAgICAgICAgU2V0TmF0aXZlQnJ1c2goYnJ1c2gpOw0KLSAgICB9DQotDQotICAgIFBhdGhHcmFkaWVudEJydXNoKA0KLSAgICAgICAgSU4gY29uc3QgUG9pbnQqIHBvaW50cywNCi0gICAgICAgIElOIElOVCBjb3VudCwNCi0gICAgICAgIElOIFdyYXBNb2RlIHdyYXBNb2RlID0gV3JhcE1vZGVDbGFtcCkNCi0gICAgew0KLSAgICAgICAgR3BQYXRoR3JhZGllbnQgKmJydXNoID0gTlVMTDsNCi0NCi0gICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlUGF0aEdyYWRpZW50SSgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLCBjb3VudCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcE1vZGUsICZicnVzaCk7DQotDQotICAgICAgICBTZXROYXRpdmVCcnVzaChicnVzaCk7DQotICAgIH0NCi0NCi0gICAgUGF0aEdyYWRpZW50QnJ1c2goDQotICAgICAgICBJTiBjb25zdCBHcmFwaGljc1BhdGgqIHBhdGgNCi0gICAgICAgICkNCi0gICAgew0KLSAgICAgICAgR3BQYXRoR3JhZGllbnQgKmJydXNoID0gTlVMTDsNCi0NCi0gICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlUGF0aEdyYWRpZW50RnJvbVBhdGgoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgtPm5hdGl2ZVBhdGgsICZicnVzaCk7DQotICAgICAgICBTZXROYXRpdmVCcnVzaChicnVzaCk7DQotICAgIH0NCi0NCi0gICAgLy8gR2V0L3NldCBjb2xvcnMNCi0NCi0gICAgU3RhdHVzIEdldENlbnRlckNvbG9yKE9VVCBDb2xvciogY29sb3IpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIEFSR0IgYXJnYjsNCi0gICAgICAgIA0KLSAgICAgICAgaWYgKGNvbG9yID09IE5VTEwpIA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7DQotICAgICAgICB9DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhHcmFkaWVudENlbnRlckNvbG9yKA0KLSAgICAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KikgbmF0aXZlQnJ1c2gsICZhcmdiKSk7DQotDQotICAgICAgICBjb2xvci0+U2V0VmFsdWUoYXJnYik7DQotDQotICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0Q2VudGVyQ29sb3IoSU4gY29uc3QgQ29sb3ImIGNvbG9yKQ0KLSAgICB7DQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBhdGhHcmFkaWVudENlbnRlckNvbG9yKA0KLSAgICAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KikgbmF0aXZlQnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5HZXRWYWx1ZSgpKSk7DQotDQotICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDsNCi0gICAgfQ0KLQ0KLSAgICBJTlQgR2V0UG9pbnRDb3VudCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIElOVCBjb3VudDsNCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGF0aEdyYWRpZW50UG9pbnRDb3VudCgNCi0gICAgICAgICAgICAgICAgICAgICAgIChHcFBhdGhHcmFkaWVudCopIG5hdGl2ZUJydXNoLCAmY291bnQpKTsNCi0NCi0gICAgICAgIHJldHVybiBjb3VudDsNCi0gICAgfQ0KLQ0KLSAgICBJTlQgR2V0U3Vycm91bmRDb2xvckNvdW50KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgSU5UIGNvdW50Ow0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQYXRoR3JhZGllbnRTdXJyb3VuZENvbG9yQ291bnQoDQotICAgICAgICAgICAgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKSBuYXRpdmVCcnVzaCwgJmNvdW50KSk7DQotDQotICAgICAgICByZXR1cm4gY291bnQ7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEdldFN1cnJvdW5kQ29sb3JzKE9VVCBDb2xvciogY29sb3JzLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIE9VVCBJTlQqIGNvdW50KSBjb25zdA0KLSAgICB7DQotICAgICAgICBpZihjb2xvcnMgPT0gTlVMTCB8fCBjb3VudCA9PSBOVUxMKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7DQotICAgICAgICB9DQotDQotICAgICAgICBJTlQgY291bnQxOw0KLSAgICAgICAgDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhHcmFkaWVudFN1cnJvdW5kQ29sb3JDb3VudCgNCi0gICAgICAgICAgICAgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKSBuYXRpdmVCcnVzaCwgJmNvdW50MSkpOw0KLQ0KLSAgICAgICAgaWYobGFzdFJlc3VsdCAhPSBPaykNCi0gICAgICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDsNCi0NCi0gICAgICAgIGlmKCgqY291bnQgPCBjb3VudDEpIHx8IChjb3VudDEgPD0gMCkpDQotICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhJbnN1ZmZpY2llbnRCdWZmZXIpOw0KLQ0KLSAgICAgICAgQVJHQiogYXJnYnMgPSAoQVJHQiopIG5ldyBBUkdCW2NvdW50MV07DQotICAgICAgICBpZihhcmdicyA9PSBOVUxMKQ0KLSAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoT3V0T2ZNZW1vcnkpOw0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQYXRoR3JhZGllbnRTdXJyb3VuZENvbG9yc1dpdGhDb3VudCgNCi0gICAgICAgICAgICAgICAgICAgIChHcFBhdGhHcmFkaWVudCopbmF0aXZlQnJ1c2gsIGFyZ2JzLCAmY291bnQxKSk7DQotDQotICAgICAgICBpZihsYXN0UmVzdWx0ID09IE9rKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGZvcihJTlQgaSA9IDA7IGkgPCBjb3VudDE7IGkrKykNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGNvbG9yc1tpXS5TZXRWYWx1ZShhcmdic1tpXSk7DQotICAgICAgICAgICAgfSAgICAgICAgDQotICAgICAgICAgICAgKmNvdW50ID0gY291bnQxOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgZGVsZXRlIFtdIGFyZ2JzOw0KLSAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFNldFN1cnJvdW5kQ29sb3JzKElOIGNvbnN0IENvbG9yKiBjb2xvcnMsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gT1VUIElOVCogY291bnQpDQotICAgIHsNCi0gICAgICAgIGlmKGNvbG9ycyA9PSBOVUxMIHx8IGNvdW50ID09IE5VTEwpDQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhJbnZhbGlkUGFyYW1ldGVyKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIElOVCBjb3VudDEgPSBHZXRQb2ludENvdW50KCk7DQotDQotICAgICAgICBpZigoKmNvdW50ID4gY291bnQxKSB8fCAoY291bnQxIDw9IDApKQ0KLSAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7DQotDQotICAgICAgICBjb3VudDEgPSAqY291bnQ7DQotDQotICAgICAgICBBUkdCKiBhcmdicyA9IChBUkdCKikgbmV3IEFSR0JbY291bnQxXTsNCi0gICAgICAgIGlmKGFyZ2JzID09IE5VTEwpDQotICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhPdXRPZk1lbW9yeSk7DQotDQotICAgICAgICBmb3IoSU5UIGkgPSAwOyBpIDwgY291bnQxOyBpKyspDQotICAgICAgICB7DQotICAgICAgICAgICAgYXJnYnNbaV0gPSBjb2xvcnNbaV0uR2V0VmFsdWUoKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGF0aEdyYWRpZW50U3Vycm91bmRDb2xvcnNXaXRoQ291bnQoDQotICAgICAgICAgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKW5hdGl2ZUJydXNoLCBhcmdicywgJmNvdW50MSkpOw0KLQ0KLSAgICAgICAgaWYobGFzdFJlc3VsdCA9PSBPaykNCi0gICAgICAgICAgICAqY291bnQgPSBjb3VudDE7DQotDQotICAgICAgICBkZWxldGUgW10gYXJnYnM7DQotDQotICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgR2V0R3JhcGhpY3NQYXRoKE9VVCBHcmFwaGljc1BhdGgqIHBhdGgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIGlmKHBhdGggPT0gTlVMTCkNCi0gICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKEludmFsaWRQYXJhbWV0ZXIpOw0KLQ0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGF0aEdyYWRpZW50UGF0aCgNCi0gICAgICAgICAgICAgICAgICAgIChHcFBhdGhHcmFkaWVudCopbmF0aXZlQnJ1c2gsIHBhdGgtPm5hdGl2ZVBhdGgpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0R3JhcGhpY3NQYXRoKElOIGNvbnN0IEdyYXBoaWNzUGF0aCogcGF0aCkNCi0gICAgew0KLSAgICAgICAgaWYocGF0aCA9PSBOVUxMKQ0KLSAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7DQotDQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQYXRoR3JhZGllbnRQYXRoKA0KLSAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KiluYXRpdmVCcnVzaCwgcGF0aC0+bmF0aXZlUGF0aCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBHZXRDZW50ZXJQb2ludChPVVQgUG9pbnRGKiBwb2ludCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGF0aEdyYWRpZW50Q2VudGVyUG9pbnQoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKW5hdGl2ZUJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQpKTsNCi0gICAgfQ0KLQ0KLQ0KLSAgICBTdGF0dXMgR2V0Q2VudGVyUG9pbnQoT1VUIFBvaW50KiBwb2ludCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGF0aEdyYWRpZW50Q2VudGVyUG9pbnRJKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KiluYXRpdmVCcnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50KSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFNldENlbnRlclBvaW50KElOIGNvbnN0IFBvaW50RiYgcG9pbnQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBhdGhHcmFkaWVudENlbnRlclBvaW50KA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KiluYXRpdmVCcnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwb2ludCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTZXRDZW50ZXJQb2ludChJTiBjb25zdCBQb2ludCYgcG9pbnQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBhdGhHcmFkaWVudENlbnRlclBvaW50SSgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHcFBhdGhHcmFkaWVudCopbmF0aXZlQnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9pbnQpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgR2V0UmVjdGFuZ2xlKE9VVCBSZWN0RiogcmVjdCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGF0aEdyYWRpZW50UmVjdCgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KiluYXRpdmVCcnVzaCwgcmVjdCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBHZXRSZWN0YW5nbGUoT1VUIFJlY3QqIHJlY3QpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhHcmFkaWVudFJlY3RJKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKW5hdGl2ZUJydXNoLCByZWN0KSk7DQotICAgIH0NCi0NCi0gICAgLy8gR2FtbWEgY29ycmVjdGlvbi4NCi0NCi0gICAgU3RhdHVzIFNldEdhbW1hQ29ycmVjdGlvbihJTiBCT09MIHVzZUdhbW1hQ29ycmVjdGlvbikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGF0aEdyYWRpZW50R2FtbWFDb3JyZWN0aW9uKA0KLSAgICAgICAgICAgIChHcFBhdGhHcmFkaWVudCopbmF0aXZlQnJ1c2gsIHVzZUdhbW1hQ29ycmVjdGlvbikpOw0KLSAgICB9DQotDQotICAgIEJPT0wgR2V0R2FtbWFDb3JyZWN0aW9uKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgQk9PTCB1c2VHYW1tYUNvcnJlY3Rpb247DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhHcmFkaWVudEdhbW1hQ29ycmVjdGlvbigNCi0gICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKW5hdGl2ZUJydXNoLCAmdXNlR2FtbWFDb3JyZWN0aW9uKSk7DQotDQotICAgICAgICByZXR1cm4gdXNlR2FtbWFDb3JyZWN0aW9uOw0KLSAgICB9DQotDQotICAgIElOVCBHZXRCbGVuZENvdW50KCkgY29uc3QNCi0gICAgew0KLSAgICAgICBJTlQgY291bnQgPSAwOw0KLQ0KLSAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhHcmFkaWVudEJsZW5kQ291bnQoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KikgbmF0aXZlQnJ1c2gsICZjb3VudCkpOw0KLQ0KLSAgICAgICByZXR1cm4gY291bnQ7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEdldEJsZW5kKE9VVCBSRUFMKiBibGVuZEZhY3RvcnMsDQotICAgICAgICAgICAgICAgICAgICBPVVQgUkVBTCogYmxlbmRQb3NpdGlvbnMsDQotICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhHcmFkaWVudEJsZW5kKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKW5hdGl2ZUJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZEZhY3RvcnMsIGJsZW5kUG9zaXRpb25zLCBjb3VudCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTZXRCbGVuZChJTiBjb25zdCBSRUFMKiBibGVuZEZhY3RvcnMsIA0KLSAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUkVBTCogYmxlbmRQb3NpdGlvbnMsIA0KLSAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQYXRoR3JhZGllbnRCbGVuZCgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KiluYXRpdmVCcnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRGYWN0b3JzLCBibGVuZFBvc2l0aW9ucywgY291bnQpKTsNCi0gICAgfQ0KLQ0KLSAgICBJTlQgR2V0SW50ZXJwb2xhdGlvbkNvbG9yQ291bnQoKSBjb25zdA0KLSAgICB7DQotICAgICAgIElOVCBjb3VudCA9IDA7DQotDQotICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGF0aEdyYWRpZW50UHJlc2V0QmxlbmRDb3VudCgNCi0gICAgICAgICAgICAgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKSBuYXRpdmVCcnVzaCwgJmNvdW50KSk7DQotDQotICAgICAgIHJldHVybiBjb3VudDsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0SW50ZXJwb2xhdGlvbkNvbG9ycyhJTiBjb25zdCBDb2xvciogcHJlc2V0Q29sb3JzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSRUFMKiBibGVuZFBvc2l0aW9ucywgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkNCi0gICAgew0KLSAgICAgICAgaWYgKChjb3VudCA8PSAwKSB8fCAhcHJlc2V0Q29sb3JzKSANCi0gICAgICAgIHsNCi0gICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKEludmFsaWRQYXJhbWV0ZXIpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgQVJHQiogYXJnYnMgPSAoQVJHQiopIG5ldyBBUkdCW2NvdW50XTsNCi0gICAgICAgIGlmKGFyZ2JzKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGZvcihJTlQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgYXJnYnNbaV0gPSBwcmVzZXRDb2xvcnNbaV0uR2V0VmFsdWUoKTsNCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgU3RhdHVzIHN0YXR1cyA9IFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGF0aEdyYWRpZW50UHJlc2V0QmxlbmQoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KikgbmF0aXZlQnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnYnMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRQb3NpdGlvbnMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsNCi0gICAgICAgICAgICBkZWxldGVbXSBhcmdiczsNCi0gICAgICAgICAgICByZXR1cm4gc3RhdHVzOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoT3V0T2ZNZW1vcnkpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotDQotICAgIFN0YXR1cyBHZXRJbnRlcnBvbGF0aW9uQ29sb3JzKE9VVCBDb2xvciogcHJlc2V0Q29sb3JzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVQgUkVBTCogYmxlbmRQb3NpdGlvbnMsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIGlmICgoY291bnQgPD0gMCkgfHwgIXByZXNldENvbG9ycykgDQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhJbnZhbGlkUGFyYW1ldGVyKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIEFSR0IqIGFyZ2JzID0gKEFSR0IqKSBuZXcgQVJHQltjb3VudF07DQotICAgICAgICANCi0gICAgICAgIGlmICghYXJnYnMpDQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhPdXRPZk1lbW9yeSk7DQotICAgICAgICB9DQotDQotICAgICAgICBHcFN0YXR1cyBzdGF0dXMgPSBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhHcmFkaWVudFByZXNldEJsZW5kKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KiluYXRpdmVCcnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ2JzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRQb3NpdGlvbnMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOw0KLSAgICAgICAgDQotICAgICAgICBmb3IoSU5UIGkgPSAwOyBpIDwgY291bnQ7IGkrKykNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBwcmVzZXRDb2xvcnNbaV0gPSBDb2xvcihhcmdic1tpXSk7DQotICAgICAgICB9DQotICAgICAgICBkZWxldGUgW10gYXJnYnM7DQotICAgICAgICANCi0gICAgICAgIHJldHVybiBzdGF0dXM7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFNldEJsZW5kQmVsbFNoYXBlKElOIFJFQUwgZm9jdXMsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzY2FsZSA9IDEuMCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGF0aEdyYWRpZW50U2lnbWFCbGVuZCgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KiluYXRpdmVCcnVzaCwgZm9jdXMsIHNjYWxlKSk7DQotICAgIH0NCi0NCi0gICAgI2lmZGVmIERDUl9VU0VfTkVXXzE0NTEzNQ0KLSAgICBTdGF0dXMgU2V0QmxlbmRUcmlhbmd1bGFyU2hhcGUoDQotICAgICAgICBJTiBSRUFMIGZvY3VzLA0KLSAgICAgICAgSU4gUkVBTCBzY2FsZSA9IDEuMA0KLSAgICApDQotICAgICNlbHNlDQotICAgIFN0YXR1cyBTZXRCbGVuZFRyaWFuZ2xhclNoYXBlKElOIFJFQUwgZm9jdXMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc2NhbGUgPSAxLjApDQotICAgICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQYXRoR3JhZGllbnRMaW5lYXJCbGVuZCgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KiluYXRpdmVCcnVzaCwgZm9jdXMsIHNjYWxlKSk7DQotICAgIH0NCi0NCi0gICAgLyoqDQotICAgICAqIEdldC9zZXQgYnJ1c2ggdHJhbnNmb3JtDQotICAgICAqLw0KLSAgICBTdGF0dXMgR2V0VHJhbnNmb3JtKE9VVCBNYXRyaXggKm1hdHJpeCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGF0aEdyYWRpZW50VHJhbnNmb3JtKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKSBuYXRpdmVCcnVzaCwgbWF0cml4LT5uYXRpdmVNYXRyaXgpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0VHJhbnNmb3JtKElOIGNvbnN0IE1hdHJpeCogbWF0cml4KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQYXRoR3JhZGllbnRUcmFuc2Zvcm0oDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHcFBhdGhHcmFkaWVudCopIG5hdGl2ZUJydXNoLCBtYXRyaXgtPm5hdGl2ZU1hdHJpeCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBSZXNldFRyYW5zZm9ybSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFJlc2V0UGF0aEdyYWRpZW50VHJhbnNmb3JtKChHcFBhdGhHcmFkaWVudCopbmF0aXZlQnJ1c2gpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgTXVsdGlwbHlUcmFuc2Zvcm0oSU4gY29uc3QgTWF0cml4KiBtYXRyaXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwTXVsdGlwbHlQYXRoR3JhZGllbnRUcmFuc2Zvcm0oKEdwUGF0aEdyYWRpZW50KiluYXRpdmVCcnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT5uYXRpdmVNYXRyaXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFRyYW5zbGF0ZVRyYW5zZm9ybShJTiBSRUFMIGR4LCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIGR5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIE1hdHJpeE9yZGVyIG9yZGVyID0gTWF0cml4T3JkZXJQcmVwZW5kKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBUcmFuc2xhdGVQYXRoR3JhZGllbnRUcmFuc2Zvcm0oKEdwUGF0aEdyYWRpZW50KiluYXRpdmVCcnVzaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeCwgZHksIG9yZGVyKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFNjYWxlVHJhbnNmb3JtKElOIFJFQUwgc3gsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElOIE1hdHJpeE9yZGVyIG9yZGVyID0gTWF0cml4T3JkZXJQcmVwZW5kKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTY2FsZVBhdGhHcmFkaWVudFRyYW5zZm9ybSgoR3BQYXRoR3JhZGllbnQqKW5hdGl2ZUJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeCwgc3ksIG9yZGVyKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFJvdGF0ZVRyYW5zZm9ybShJTiBSRUFMIGFuZ2xlLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUm90YXRlUGF0aEdyYWRpZW50VHJhbnNmb3JtKChHcFBhdGhHcmFkaWVudCopbmF0aXZlQnJ1c2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSwgb3JkZXIpKTsNCi0gICAgfQ0KLQ0KLSAgICAvKioNCi0gICAgICogR2V0L3NldCBicnVzaCBmb2N1cyBzY2FsZXMNCi0gICAgICovDQotICAgIFN0YXR1cyBHZXRGb2N1c1NjYWxlcyhPVVQgUkVBTCogeFNjYWxlLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE9VVCBSRUFMKiB5U2NhbGUpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhHcmFkaWVudEZvY3VzU2NhbGVzKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKSBuYXRpdmVCcnVzaCwgeFNjYWxlLCB5U2NhbGUpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0Rm9jdXNTY2FsZXMoSU4gUkVBTCB4U2NhbGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHlTY2FsZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGF0aEdyYWRpZW50Rm9jdXNTY2FsZXMoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHcFBhdGhHcmFkaWVudCopIG5hdGl2ZUJydXNoLCB4U2NhbGUsIHlTY2FsZSkpOw0KLSAgICB9DQotDQotICAgIC8qKg0KLSAgICAgKiBHZXQvc2V0IGJydXNoIHdyYXBwaW5nIG1vZGUNCi0gICAgICovDQotICAgIFdyYXBNb2RlIEdldFdyYXBNb2RlKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgV3JhcE1vZGUgd3JhcE1vZGU7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhHcmFkaWVudFdyYXBNb2RlKA0KLSAgICAgICAgICAgICAgICAgICAgIChHcFBhdGhHcmFkaWVudCopIG5hdGl2ZUJydXNoLCAmd3JhcE1vZGUpKTsNCi0NCi0gICAgICAgIHJldHVybiB3cmFwTW9kZTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0V3JhcE1vZGUoSU4gV3JhcE1vZGUgd3JhcE1vZGUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBhdGhHcmFkaWVudFdyYXBNb2RlKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKSBuYXRpdmVCcnVzaCwgd3JhcE1vZGUpKTsNCi0gICAgfQ0KLQ0KLSNpZmRlZiBEQ1JfVVNFX05FV18yNTA5MzINCi0NCi1wcml2YXRlOg0KLSAgICBQYXRoR3JhZGllbnRCcnVzaChjb25zdCBQYXRoR3JhZGllbnRCcnVzaCAmKTsNCi0gICAgUGF0aEdyYWRpZW50QnJ1c2gmIG9wZXJhdG9yPShjb25zdCBQYXRoR3JhZGllbnRCcnVzaCAmKTsNCi0NCi0jZW5kaWYNCi0NCi1wcm90ZWN0ZWQ6DQotDQotICAgIFBhdGhHcmFkaWVudEJydXNoKCkNCi0gICAgew0KLSAgICB9DQotfTsNCi0NCi0NCi0jZW5kaWYgLy8gIV9HUkFQSElDU1BBVEhfSFBQDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKgorKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwgTWljcm9zb2Z0IENvcnAuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKiBNb2R1bGUgTmFtZToKKyoKKyogICBHZGlwbHVzUGF0aC5oCisqCisqIEFic3RyYWN0OgorKgorKiAgIFBhdGggcmVsYXRlZCBkZWNsYXJhdGlvbnMKKyoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfR0RJUExVU1BBVEhfSAorI2RlZmluZSBfR0RJUExVU1BBVEhfSAorCitjbGFzcyBHcmFwaGljc1BhdGggOiBwdWJsaWMgR2RpcGx1c0Jhc2UKK3sKK3B1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3M7CisgICAgZnJpZW5kIGNsYXNzIFJlZ2lvbjsKKyAgICBmcmllbmQgY2xhc3MgUGF0aEdyYWRpZW50QnJ1c2g7CisgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzUGF0aEl0ZXJhdG9yOworICAgIGZyaWVuZCBjbGFzcyBDdXN0b21MaW5lQ2FwOworCisgICAgLy8gUGF0aCBjb25zdHJ1Y3RvcnMKKworICAgIEdyYXBoaWNzUGF0aChJTiBGaWxsTW9kZSBmaWxsTW9kZSA9IEZpbGxNb2RlQWx0ZXJuYXRlKQorICAgIHsKKyAgICAgICAgbmF0aXZlUGF0aCA9IE5VTEw7CisgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlUGF0aChmaWxsTW9kZSwgJm5hdGl2ZVBhdGgpOworICAgIH0KKworICAgIEdyYXBoaWNzUGF0aChJTiBjb25zdCBQb2ludEYqIHBvaW50cywKKyAgICAgICAgICAgICAgICAgSU4gY29uc3QgQllURSogdHlwZXMsCisgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCwKKyAgICAgICAgICAgICAgICAgSU4gRmlsbE1vZGUgZmlsbE1vZGUgPSBGaWxsTW9kZUFsdGVybmF0ZSkKKyAgICB7CisgICAgICAgIG5hdGl2ZVBhdGggPSBOVUxMOworICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZVBhdGgyKHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsTW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmF0aXZlUGF0aCk7CisgICAgfQorCisgICAgR3JhcGhpY3NQYXRoKElOIGNvbnN0IFBvaW50KiBwb2ludHMsCisgICAgICAgICAgICAgICAgIElOIGNvbnN0IEJZVEUqIHR5cGVzLAorICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQsCisgICAgICAgICAgICAgICAgIElOIEZpbGxNb2RlIGZpbGxNb2RlID0gRmlsbE1vZGVBbHRlcm5hdGUpCisgICAgeworICAgICAgICBuYXRpdmVQYXRoID0gTlVMTDsKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVQYXRoMkkocG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxNb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmF0aXZlUGF0aCk7CisgICAgfQorCisgICAgfkdyYXBoaWNzUGF0aCgpCisgICAgeworICAgICAgICBEbGxFeHBvcnRzOjpHZGlwRGVsZXRlUGF0aChuYXRpdmVQYXRoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNYWtlIGEgY29weSBvZiB0aGUgY3VycmVudCBwYXRoIG9iamVjdAorICAgICAqLworICAgIEdyYXBoaWNzUGF0aCogQ2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgR3BQYXRoICpjbG9uZXBhdGggPSBOVUxMOworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ2xvbmVQYXRoKG5hdGl2ZVBhdGgsICZjbG9uZXBhdGgpKTsKKworICAgICAgICByZXR1cm4gbmV3IEdyYXBoaWNzUGF0aChjbG9uZXBhdGgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlc2V0IHRoZSBwYXRoIG9iamVjdCB0byBlbXB0eSAoYW5kIGZpbGwgbW9kZSB0byBGaWxsTW9kZUFsdGVybmF0ZSkKKyAgICAgKi8KKyAgICBTdGF0dXMgUmVzZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUmVzZXRQYXRoKG5hdGl2ZVBhdGgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgcGF0aCBmaWxsIG1vZGUgaW5mb3JtYXRpb24KKyAgICAgKi8KKyAgICBGaWxsTW9kZSBHZXRGaWxsTW9kZSgpIGNvbnN0CisgICAgeworICAgICAgICBGaWxsTW9kZSBmaWxsbW9kZSA9IEZpbGxNb2RlQWx0ZXJuYXRlOworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGF0aEZpbGxNb2RlKG5hdGl2ZVBhdGgsICZmaWxsbW9kZSkpOworCisgICAgICAgIHJldHVybiBmaWxsbW9kZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQgcGF0aCBmaWxsIG1vZGUgaW5mb3JtYXRpb24KKyAgICAgKi8KKyAgICBTdGF0dXMgU2V0RmlsbE1vZGUoSU4gRmlsbE1vZGUgZmlsbG1vZGUpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQYXRoRmlsbE1vZGUobmF0aXZlUGF0aCwgZmlsbG1vZGUpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXQvZ2V0IHBhdGggZGF0YQorICAgICAqLworICAgIFN0YXR1cyBHZXRQYXRoRGF0YShPVVQgUGF0aERhdGEqIHBhdGhEYXRhKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHBhdGhEYXRhID09IE5VTEwpIAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKEludmFsaWRQYXJhbWV0ZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBJTlQgY291bnQgPSBHZXRQb2ludENvdW50KCk7CisgICAgICAgIAorICAgICAgICBpZiAoKGNvdW50IDw9IDApIHx8IChwYXRoRGF0YS0+Q291bnQ+MCAmJiBwYXRoRGF0YS0+Q291bnQ8Y291bnQpKQorICAgICAgICB7CisgICAgICAgICAgICBwYXRoRGF0YS0+Q291bnQgPSAwOworICAgICAgICAgICAgaWYgKHBhdGhEYXRhLT5Qb2ludHMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGVsZXRlIHBhdGhEYXRhLT5Qb2ludHM7CisgICAgICAgICAgICAgICAgcGF0aERhdGEtPlBvaW50cyA9IE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwYXRoRGF0YS0+VHlwZXMpIAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXRoRGF0YS0+VHlwZXM7CisgICAgICAgICAgICAgICAgcGF0aERhdGEtPlR5cGVzID0gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvdW50IDw9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocGF0aERhdGEtPkNvdW50ID09IDApIAorICAgICAgICB7CisgICAgICAgICAgICBwYXRoRGF0YS0+UG9pbnRzID0gbmV3IFBvaW50Rltjb3VudF07CisgICAgICAgICAgICBpZiAocGF0aERhdGEtPlBvaW50cyA9PSBOVUxMKSAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKE91dE9mTWVtb3J5KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICAgICAgcGF0aERhdGEtPlR5cGVzID0gbmV3IGJ5dGVbY291bnRdOworICAgICAgICAgICAgaWYgKHBhdGhEYXRhLT5UeXBlcyA9PSBOVUxMKSAKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgcGF0aERhdGEtPlBvaW50czsKKyAgICAgICAgICAgICAgICBwYXRoRGF0YS0+UG9pbnRzID0gTlVMTDsKKworICAgICAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoT3V0T2ZNZW1vcnkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGF0aERhdGEtPkNvdW50ID0gY291bnQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQYXRoRGF0YShuYXRpdmVQYXRoLCBwYXRoRGF0YSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFN0YXJ0L2VuZCBhIHN1YnBhdGgKKyAgICAgKi8KKyAgICBTdGF0dXMgU3RhcnRGaWd1cmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU3RhcnRQYXRoRmlndXJlKG5hdGl2ZVBhdGgpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgQ2xvc2VGaWd1cmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ2xvc2VQYXRoRmlndXJlKG5hdGl2ZVBhdGgpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgQ2xvc2VBbGxGaWd1cmVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENsb3NlUGF0aEZpZ3VyZXMobmF0aXZlUGF0aCkpOworICAgIH0KKworICAgIFN0YXR1cyBTZXRNYXJrZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGF0aE1hcmtlcihuYXRpdmVQYXRoKSk7CisgICAgfQorCisgICAgU3RhdHVzIENsZWFyTWFya2VycygpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDbGVhclBhdGhNYXJrZXJzKG5hdGl2ZVBhdGgpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgUmV2ZXJzZSgpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBSZXZlcnNlUGF0aChuYXRpdmVQYXRoKSk7CisgICAgfQorCisgICAgU3RhdHVzIEdldExhc3RQb2ludChPVVQgUG9pbnRGKiBsYXN0UG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQYXRoTGFzdFBvaW50KG5hdGl2ZVBhdGgsIGxhc3RQb2ludCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFkZCBsaW5lcyB0byB0aGUgcGF0aCBvYmplY3QKKyAgICAgKi8KKyAgICAvLyBmbG9hdCB2ZXJzaW9uCisgICAgU3RhdHVzIEFkZExpbmUoSU4gY29uc3QgUG9pbnRGJiBwdDEsIAorICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50RiYgcHQyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFkZExpbmUocHQxLlgsIHB0MS5ZLCBwdDIuWCwgcHQyLlkpOworICAgIH0KKworICAgIFN0YXR1cyBBZGRMaW5lKElOIFJFQUwgeDEsCisgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5MSwgCisgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB4MiwgCisgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5MikKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEFkZFBhdGhMaW5lKG5hdGl2ZVBhdGgsIHgxLCB5MSwgeDIsIHkyKSk7CisgICAgfQorCisgICAgU3RhdHVzIEFkZExpbmVzKElOIGNvbnN0IFBvaW50RiogcG9pbnRzLCAKKyAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQWRkUGF0aExpbmUyKG5hdGl2ZVBhdGgsIHBvaW50cywgY291bnQpKTsKKyAgICB9CisKKyAgICAvLyBpbnRlZ2VyIHZlcnNpb24KKyAgICBTdGF0dXMgQWRkTGluZShJTiBjb25zdCBQb2ludCYgcHQxLCAKKyAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludCYgcHQyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFkZExpbmUocHQxLlgsCisgICAgICAgICAgICAgICAgICAgICAgIHB0MS5ZLAorICAgICAgICAgICAgICAgICAgICAgICBwdDIuWCwKKyAgICAgICAgICAgICAgICAgICAgICAgcHQyLlkpOworICAgIH0KKworICAgIFN0YXR1cyBBZGRMaW5lKElOIElOVCB4MSwgCisgICAgICAgICAgICAgICAgICAgSU4gSU5UIHkxLCAKKyAgICAgICAgICAgICAgICAgICBJTiBJTlQgeDIsIAorICAgICAgICAgICAgICAgICAgIElOIElOVCB5MikKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEFkZFBhdGhMaW5lSShuYXRpdmVQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MikpOworICAgIH0KKworICAgIFN0YXR1cyBBZGRMaW5lcyhJTiBjb25zdCBQb2ludCogcG9pbnRzLCAKKyAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQWRkUGF0aExpbmUySShuYXRpdmVQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFkZCBhbiBhcmMgdG8gdGhlIHBhdGggb2JqZWN0CisgICAgICovCisgICAgLy8gZmxvYXQgdmVyc2lvbgorICAgIFN0YXR1cyBBZGRBcmMoSU4gY29uc3QgUmVjdEYmIHJlY3QsIAorICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzdGFydEFuZ2xlLCAKKyAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3dlZXBBbmdsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBBZGRBcmMocmVjdC5YLCByZWN0LlksIHJlY3QuV2lkdGgsIHJlY3QuSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsIHN3ZWVwQW5nbGUpOworICAgIH0KKworICAgIFN0YXR1cyBBZGRBcmMoSU4gUkVBTCB4LCAKKyAgICAgICAgICAgICAgICAgIElOIFJFQUwgeSwgCisgICAgICAgICAgICAgICAgICBJTiBSRUFMIHdpZHRoLCAKKyAgICAgICAgICAgICAgICAgIElOIFJFQUwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzdGFydEFuZ2xlLCAKKyAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3dlZXBBbmdsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEFkZFBhdGhBcmMobmF0aXZlUGF0aCwgeCwgeSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRBbmdsZSwgc3dlZXBBbmdsZSkpOworICAgIH0KKworICAgIC8vIGludGVnZXIgdmVyc2lvbgorICAgIFN0YXR1cyBBZGRBcmMoSU4gY29uc3QgUmVjdCYgcmVjdCwgCisgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN0YXJ0QW5nbGUsIAorICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzd2VlcEFuZ2xlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFkZEFyYyhyZWN0LlgsIHJlY3QuWSwgcmVjdC5XaWR0aCwgcmVjdC5IZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgc3RhcnRBbmdsZSwgc3dlZXBBbmdsZSk7CisgICAgfQorCisgICAgU3RhdHVzIEFkZEFyYyhJTiBJTlQgeCwgCisgICAgICAgICAgICAgICAgICBJTiBJTlQgeSwgCisgICAgICAgICAgICAgICAgICBJTiBJTlQgd2lkdGgsIAorICAgICAgICAgICAgICAgICAgSU4gSU5UIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3RhcnRBbmdsZSwgCisgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN3ZWVwQW5nbGUpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoQXJjSShuYXRpdmVQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRBbmdsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2VlcEFuZ2xlKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQWRkIEJlemllciBjdXJ2ZXMgdG8gdGhlIHBhdGggb2JqZWN0CisgICAgICovCisgICAgLy8gZmxvYXQgdmVyc2lvbgorICAgIFN0YXR1cyBBZGRCZXppZXIoSU4gY29uc3QgUG9pbnRGJiBwdDEsIAorICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnRGJiBwdDIsCisgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYmIHB0MywgCisgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQb2ludEYmIHB0NCkKKyAgICB7CisgICAgICAgIHJldHVybiBBZGRCZXppZXIocHQxLlgsIHB0MS5ZLCBwdDIuWCwgcHQyLlksIHB0My5YLCBwdDMuWSwgcHQ0LlgsCisgICAgICAgICAgICAgICAgICAgICAgICAgcHQ0LlkpOworICAgIH0KKworICAgIFN0YXR1cyBBZGRCZXppZXIoSU4gUkVBTCB4MSwgCisgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHkxLCAKKyAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeDIsIAorICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5MiwKKyAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeDMsIAorICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5MywgCisgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHg0LCAKKyAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeTQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoQmV6aWVyKG5hdGl2ZVBhdGgsIHgxLCB5MSwgeDIsIHkyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgzLCB5MywgeDQsIHk0KSk7CisgICAgfQorCisgICAgU3RhdHVzIEFkZEJlemllcnMoSU4gY29uc3QgUG9pbnRGKiBwb2ludHMsIAorICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEFkZFBhdGhCZXppZXJzKG5hdGl2ZVBhdGgsIHBvaW50cywgY291bnQpKTsKKyAgICB9CisKKyAgICAvLyBpbnRlZ2VyIHZlcnNpb24KKyAgICBTdGF0dXMgQWRkQmV6aWVyKElOIGNvbnN0IFBvaW50JiBwdDEsIAorICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnQmIHB0MiwKKyAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBvaW50JiBwdDMsIAorICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUG9pbnQmIHB0NCkKKyAgICB7CisgICAgICAgcmV0dXJuIEFkZEJlemllcihwdDEuWCwgcHQxLlksIHB0Mi5YLCBwdDIuWSwgcHQzLlgsIHB0My5ZLCBwdDQuWCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHB0NC5ZKTsKKyAgICB9CisKKyAgICBTdGF0dXMgQWRkQmV6aWVyKElOIElOVCB4MSwgCisgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeTEsIAorICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHgyLCAKKyAgICAgICAgICAgICAgICAgICAgIElOIElOVCB5MiwKKyAgICAgICAgICAgICAgICAgICAgIElOIElOVCB4MywKKyAgICAgICAgICAgICAgICAgICAgIElOIElOVCB5MywgCisgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgeDQsIAorICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIHk0KQorICAgIHsKKyAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoQmV6aWVySShuYXRpdmVQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5NCkpOworICAgIH0KKworICAgIFN0YXR1cyBBZGRCZXppZXJzKElOIGNvbnN0IFBvaW50KiBwb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQorICAgIHsKKyAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoQmV6aWVyc0kobmF0aXZlUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOworICAgIH0KKworICAgIC8vIGZsb2F0IHZlcnNpb24KKyAgICBTdGF0dXMgQWRkQ3VydmUoSU4gY29uc3QgUG9pbnRGKiBwb2ludHMsIAorICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoQ3VydmUobmF0aXZlUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7CisgICAgfQorCisgICAgU3RhdHVzIEFkZEN1cnZlKElOIGNvbnN0IFBvaW50RiogcG9pbnRzLCAKKyAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50LAorICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHRlbnNpb24pCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoQ3VydmUyKG5hdGl2ZVBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbnNpb24pKTsKKyAgICB9CisKKyAgICBTdGF0dXMgQWRkQ3VydmUoSU4gY29uc3QgUG9pbnRGKiBwb2ludHMsIAorICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQsIAorICAgICAgICAgICAgICAgICAgICBJTiBJTlQgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBJTiBJTlQgbnVtYmVyT2ZTZWdtZW50cywgCisgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgdGVuc2lvbikKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEFkZFBhdGhDdXJ2ZTMobmF0aXZlUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mU2VnbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVuc2lvbikpOworICAgIH0KKworICAgIC8vIGludGVnZXIgdmVyc2lvbgorICAgIFN0YXR1cyBBZGRDdXJ2ZShJTiBjb25zdCBQb2ludCogcG9pbnRzLCAKKyAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQorICAgIHsKKyAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoQ3VydmVJKG5hdGl2ZVBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgQWRkQ3VydmUoSU4gY29uc3QgUG9pbnQqIHBvaW50cywgCisgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCwgCisgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgdGVuc2lvbikKKyAgICB7CisgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQWRkUGF0aEN1cnZlMkkobmF0aXZlUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVuc2lvbikpOworICAgIH0KKworICAgIFN0YXR1cyBBZGRDdXJ2ZShJTiBjb25zdCBQb2ludCogcG9pbnRzLCAKKyAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50LCAKKyAgICAgICAgICAgICAgICAgICAgSU4gSU5UIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgSU4gSU5UIG51bWJlck9mU2VnbWVudHMsIAorICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHRlbnNpb24pCisgICAgeworICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEFkZFBhdGhDdXJ2ZTNJKG5hdGl2ZVBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mU2VnbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW5zaW9uKSk7CisgICAgfQorCisgICAgLy8gZmxvYXQgdmVyc2lvbgorICAgIFN0YXR1cyBBZGRDbG9zZWRDdXJ2ZShJTiBjb25zdCBQb2ludEYqIHBvaW50cywgCisgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEFkZFBhdGhDbG9zZWRDdXJ2ZShuYXRpdmVQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgQWRkQ2xvc2VkQ3VydmUoSU4gY29uc3QgUG9pbnRGKiBwb2ludHMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHRlbnNpb24pCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoQ2xvc2VkQ3VydmUyKG5hdGl2ZVBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbnNpb24pKTsKKyAgICB9CisKKyAgICAvLyBpbnRlZ2VyIHZlcnNpb24KKyAgICBTdGF0dXMgQWRkQ2xvc2VkQ3VydmUoSU4gY29uc3QgUG9pbnQqIHBvaW50cywgCisgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkKKyAgICB7CisgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQWRkUGF0aENsb3NlZEN1cnZlSShuYXRpdmVQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsKKyAgICB9CisKKworICAgIFN0YXR1cyBBZGRDbG9zZWRDdXJ2ZShJTiBjb25zdCBQb2ludCogcG9pbnRzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHRlbnNpb24pCisgICAgeworICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEFkZFBhdGhDbG9zZWRDdXJ2ZTJJKG5hdGl2ZVBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbnNpb24pKTsKKyAgICB9CisKKworICAgIC8qKgorICAgICAqIEFkZCBjbG9zZWQgc2hhcGVzIHRvIHRoZSBwYXRoIG9iamVjdAorICAgICAqLworCisgICAgLy8gZmxvYXQgdmVyc2lvbgorICAgIFN0YXR1cyBBZGRSZWN0YW5nbGUoSU4gY29uc3QgUmVjdEYmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoUmVjdGFuZ2xlKG5hdGl2ZVBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5YLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LldpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuSGVpZ2h0KSk7CisgICAgfQorCisgICAgU3RhdHVzIEFkZFJlY3RhbmdsZXMoSU4gY29uc3QgUmVjdEYqIHJlY3RzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoUmVjdGFuZ2xlcyhuYXRpdmVQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsKKyAgICB9CisKKyAgICAvLyBpbnRlZ2VyIHZlcnNpb24KKyAgICBTdGF0dXMgQWRkUmVjdGFuZ2xlKElOIGNvbnN0IFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoUmVjdGFuZ2xlSShuYXRpdmVQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5XaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LkhlaWdodCkpOworICAgIH0KKworICAgIFN0YXR1cyBBZGRSZWN0YW5nbGVzKElOIGNvbnN0IFJlY3QqIHJlY3RzLCBJTlQgY291bnQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoUmVjdGFuZ2xlc0kobmF0aXZlUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7CisgICAgfQorCisgICAgLy8gZmxvYXQgdmVyc2lvbgorICAgIFN0YXR1cyBBZGRFbGxpcHNlKElOIGNvbnN0IFJlY3RGJiByZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFkZEVsbGlwc2UocmVjdC5YLCByZWN0LlksIHJlY3QuV2lkdGgsIHJlY3QuSGVpZ2h0KTsKKyAgICB9CisKKyAgICBTdGF0dXMgQWRkRWxsaXBzZShJTiBSRUFMIHgsIAorICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeSwgCisgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB3aWR0aCwgCisgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBoZWlnaHQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoRWxsaXBzZShuYXRpdmVQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KSk7CisgICAgfQorCisgICAgLy8gaW50ZWdlciB2ZXJzaW9uCisgICAgU3RhdHVzIEFkZEVsbGlwc2UoSU4gY29uc3QgUmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBBZGRFbGxpcHNlKHJlY3QuWCwgcmVjdC5ZLCByZWN0LldpZHRoLCByZWN0LkhlaWdodCk7CisgICAgfQorCisgICAgU3RhdHVzIEFkZEVsbGlwc2UoSU4gSU5UIHgsIAorICAgICAgICAgICAgICAgICAgICAgIElOIElOVCB5LCAKKyAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgd2lkdGgsIAorICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBoZWlnaHQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoRWxsaXBzZUkobmF0aXZlUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCkpOworICAgIH0KKworICAgIC8vIGZsb2F0IHZlcnNpb24KKyAgICBTdGF0dXMgQWRkUGllKElOIGNvbnN0IFJlY3RGJiByZWN0LCAKKyAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3RhcnRBbmdsZSwgCisgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN3ZWVwQW5nbGUpCisgICAgeworICAgICAgICByZXR1cm4gQWRkUGllKHJlY3QuWCwgcmVjdC5ZLCByZWN0LldpZHRoLCByZWN0LkhlaWdodCwgc3RhcnRBbmdsZSwKKyAgICAgICAgICAgICAgICAgICAgICBzd2VlcEFuZ2xlKTsKKyAgICB9CisKKyAgICBTdGF0dXMgQWRkUGllKElOIFJFQUwgeCwgCisgICAgICAgICAgICAgICAgICBJTiBSRUFMIHksIAorICAgICAgICAgICAgICAgICAgSU4gUkVBTCB3aWR0aCwgCisgICAgICAgICAgICAgICAgICBJTiBSRUFMIGhlaWdodCwgCisgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN0YXJ0QW5nbGUsCisgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN3ZWVwQW5nbGUpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoUGllKG5hdGl2ZVBhdGgsIHgsIHksIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsIHN3ZWVwQW5nbGUpKTsKKyAgICB9CisKKyAgICAvLyBpbnRlZ2VyIHZlcnNpb24KKyAgICBTdGF0dXMgQWRkUGllKElOIGNvbnN0IFJlY3QmIHJlY3QsIAorICAgICAgICAgICAgICAgICAgSU4gUkVBTCBzdGFydEFuZ2xlLCAKKyAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3dlZXBBbmdsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBBZGRQaWUocmVjdC5YLAorICAgICAgICAgICAgICAgICAgICAgIHJlY3QuWSwKKyAgICAgICAgICAgICAgICAgICAgICByZWN0LldpZHRoLAorICAgICAgICAgICAgICAgICAgICAgIHJlY3QuSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0QW5nbGUsCisgICAgICAgICAgICAgICAgICAgICAgc3dlZXBBbmdsZSk7CisgICAgfQorCisgICAgU3RhdHVzIEFkZFBpZShJTiBJTlQgeCwgCisgICAgICAgICAgICAgICAgICBJTiBJTlQgeSwgCisgICAgICAgICAgICAgICAgICBJTiBJTlQgd2lkdGgsIAorICAgICAgICAgICAgICAgICAgSU4gSU5UIGhlaWdodCwgCisgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN0YXJ0QW5nbGUsCisgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN3ZWVwQW5nbGUpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoUGllSShuYXRpdmVQYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRBbmdsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2VlcEFuZ2xlKSk7CisgICAgfQorCisgICAgLy8gZmxvYXQgdmVyc2lvbgorICAgIFN0YXR1cyBBZGRQb2x5Z29uKElOIGNvbnN0IFBvaW50RiogcG9pbnRzLCAKKyAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoUG9seWdvbihuYXRpdmVQYXRoLCBwb2ludHMsIGNvdW50KSk7CisgICAgfQorCisgICAgLy8gaW50ZWdlciB2ZXJzaW9uCisgICAgU3RhdHVzIEFkZFBvbHlnb24oSU4gY29uc3QgUG9pbnQqIHBvaW50cywgCisgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KQorICAgIHsKKyAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoUG9seWdvbkkobmF0aXZlUGF0aCwgcG9pbnRzLCBjb3VudCkpOworICAgIH0KKworICAgIFN0YXR1cyBBZGRQYXRoKElOIGNvbnN0IEdyYXBoaWNzUGF0aCogYWRkaW5nUGF0aCwgCisgICAgICAgICAgICAgICAgICAgSU4gQk9PTCBjb25uZWN0KQorICAgIHsKKyAgICAgICAgR3BQYXRoKiBuYXRpdmVQYXRoMiA9IE5VTEw7CisgICAgICAgIGlmKGFkZGluZ1BhdGgpCisgICAgICAgICAgICBuYXRpdmVQYXRoMiA9IGFkZGluZ1BhdGgtPm5hdGl2ZVBhdGg7CisKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQWRkUGF0aFBhdGgobmF0aXZlUGF0aCwgbmF0aXZlUGF0aDIsIGNvbm5lY3QpKTsKKyAgICB9CisKKyAgICAvLyBBZGRTdHJpbmcgcG9pbnQgdmVyc2lvbgorCisgICAgU3RhdHVzIEFkZFN0cmluZygKKyAgICAgICAgSU4gY29uc3QgV0NIQVIgICAgICAgICAqc3RyaW5nLAorICAgICAgICBJTiBJTlQgICAgICAgICAgICAgICAgICBsZW5ndGgsCisgICAgICAgIElOIGNvbnN0IEZvbnRGYW1pbHkgICAgKmZhbWlseSwKKyAgICAgICAgSU4gSU5UICAgICAgICAgICAgICAgICAgc3R5bGUsCisgICAgICAgIElOIFJFQUwgICAgICAgICAgICAgICAgIGVtU2l6ZSwgIC8vIEluIHdvcmxkIHVuaXRzCisgICAgICAgIElOIGNvbnN0IFBvaW50RiAgICAgICAgJm9yaWdpbiwKKyAgICAgICAgSU4gY29uc3QgU3RyaW5nRm9ybWF0ICAqZm9ybWF0CisgICAgKQorICAgIHsKKyAgICAgICAgUmVjdEYgcmVjdChvcmlnaW4uWCwgb3JpZ2luLlksIDAuMGYsIDAuMGYpOworCisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEFkZFBhdGhTdHJpbmcoCisgICAgICAgICAgICBuYXRpdmVQYXRoLAorICAgICAgICAgICAgc3RyaW5nLAorICAgICAgICAgICAgbGVuZ3RoLAorICAgICAgICAgICAgZmFtaWx5ID8gZmFtaWx5LT5uYXRpdmVGYW1pbHkgOiBOVUxMLAorICAgICAgICAgICAgc3R5bGUsCisgICAgICAgICAgICBlbVNpemUsCisgICAgICAgICAgICAmcmVjdCwKKyAgICAgICAgICAgIGZvcm1hdCA/IGZvcm1hdC0+bmF0aXZlRm9ybWF0IDogTlVMTAorICAgICAgICApKTsKKyAgICB9CisKKyAgICAvLyBBZGRTdHJpbmcgcmVjdGFuZ2xlIHZlcnNpb24KKworICAgIFN0YXR1cyBBZGRTdHJpbmcoCisgICAgICAgIElOIGNvbnN0IFdDSEFSICAgICAgICAgKnN0cmluZywKKyAgICAgICAgSU4gSU5UICAgICAgICAgICAgICAgICAgbGVuZ3RoLAorICAgICAgICBJTiBjb25zdCBGb250RmFtaWx5ICAgICpmYW1pbHksCisgICAgICAgIElOIElOVCAgICAgICAgICAgICAgICAgIHN0eWxlLAorICAgICAgICBJTiBSRUFMICAgICAgICAgICAgICAgICBlbVNpemUsICAvLyBJbiB3b3JsZCB1bml0cworICAgICAgICBJTiBjb25zdCBSZWN0RiAgICAgICAgICZsYXlvdXRSZWN0LAorICAgICAgICBJTiBjb25zdCBTdHJpbmdGb3JtYXQgICpmb3JtYXQKKyAgICApCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoU3RyaW5nKAorICAgICAgICAgICAgbmF0aXZlUGF0aCwKKyAgICAgICAgICAgIHN0cmluZywKKyAgICAgICAgICAgIGxlbmd0aCwKKyAgICAgICAgICAgIGZhbWlseSA/IGZhbWlseS0+bmF0aXZlRmFtaWx5IDogTlVMTCwKKyAgICAgICAgICAgIHN0eWxlLAorICAgICAgICAgICAgZW1TaXplLAorICAgICAgICAgICAgJmxheW91dFJlY3QsCisgICAgICAgICAgICBmb3JtYXQgPyBmb3JtYXQtPm5hdGl2ZUZvcm1hdCA6IE5VTEwKKyAgICAgICAgKSk7CisgICAgfQorCisgICAgU3RhdHVzIEFkZFN0cmluZygKKyAgICAgICAgSU4gY29uc3QgV0NIQVIgICAgICAgICAqc3RyaW5nLAorICAgICAgICBJTiBJTlQgICAgICAgICAgICAgICAgICBsZW5ndGgsCisgICAgICAgIElOIGNvbnN0IEZvbnRGYW1pbHkgICAgKmZhbWlseSwKKyAgICAgICAgSU4gSU5UICAgICAgICAgICAgICAgICAgc3R5bGUsCisgICAgICAgIElOIFJFQUwgICAgICAgICAgICAgICAgIGVtU2l6ZSwgIC8vIEluIHdvcmxkIHVuaXRzCisgICAgICAgIElOIGNvbnN0IFBvaW50ICAgICAgICAgJm9yaWdpbiwKKyAgICAgICAgSU4gY29uc3QgU3RyaW5nRm9ybWF0ICAqZm9ybWF0CisgICAgKQorICAgIHsKKyAgICAgICAgUmVjdCByZWN0KG9yaWdpbi5YLCBvcmlnaW4uWSwgMCwgMCk7CisKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQWRkUGF0aFN0cmluZ0koCisgICAgICAgICAgICBuYXRpdmVQYXRoLAorICAgICAgICAgICAgc3RyaW5nLAorICAgICAgICAgICAgbGVuZ3RoLAorICAgICAgICAgICAgZmFtaWx5ID8gZmFtaWx5LT5uYXRpdmVGYW1pbHkgOiBOVUxMLAorICAgICAgICAgICAgc3R5bGUsCisgICAgICAgICAgICBlbVNpemUsCisgICAgICAgICAgICAmcmVjdCwKKyAgICAgICAgICAgIGZvcm1hdCA/IGZvcm1hdC0+bmF0aXZlRm9ybWF0IDogTlVMTAorICAgICAgICApKTsKKyAgICB9CisKKyAgICAvLyBBZGRTdHJpbmcgcmVjdGFuZ2xlIHZlcnNpb24KKworICAgIFN0YXR1cyBBZGRTdHJpbmcoCisgICAgICAgIElOIGNvbnN0IFdDSEFSICAgICAgICAgKnN0cmluZywKKyAgICAgICAgSU4gSU5UICAgICAgICAgICAgICAgICAgbGVuZ3RoLAorICAgICAgICBJTiBjb25zdCBGb250RmFtaWx5ICAgICpmYW1pbHksCisgICAgICAgIElOIElOVCAgICAgICAgICAgICAgICAgIHN0eWxlLAorICAgICAgICBJTiBSRUFMICAgICAgICAgICAgICAgICBlbVNpemUsICAvLyBJbiB3b3JsZCB1bml0cworICAgICAgICBJTiBjb25zdCBSZWN0ICAgICAgICAgICZsYXlvdXRSZWN0LAorICAgICAgICBJTiBjb25zdCBTdHJpbmdGb3JtYXQgICpmb3JtYXQKKyAgICApCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBBZGRQYXRoU3RyaW5nSSgKKyAgICAgICAgICAgIG5hdGl2ZVBhdGgsCisgICAgICAgICAgICBzdHJpbmcsCisgICAgICAgICAgICBsZW5ndGgsCisgICAgICAgICAgICBmYW1pbHkgPyBmYW1pbHktPm5hdGl2ZUZhbWlseSA6IE5VTEwsCisgICAgICAgICAgICBzdHlsZSwKKyAgICAgICAgICAgIGVtU2l6ZSwKKyAgICAgICAgICAgICZsYXlvdXRSZWN0LAorICAgICAgICAgICAgZm9ybWF0ID8gZm9ybWF0LT5uYXRpdmVGb3JtYXQgOiBOVUxMCisgICAgICAgICkpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUcmFuc2Zvcm1zIHRoZSBwYXRoIG9iamVjdAorICAgICAqLworICAgIFN0YXR1cyBUcmFuc2Zvcm0oSU4gY29uc3QgTWF0cml4KiBtYXRyaXgpCisgICAgeworICAgICAgICBpZihtYXRyaXgpCisgICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBUcmFuc2Zvcm1QYXRoKG5hdGl2ZVBhdGgsIG1hdHJpeC0+bmF0aXZlTWF0cml4KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBPazsgIC8vIE5vIG5lZWQgdG8gdHJhbnNmb3JtLgorICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCB0aGUgYm91bmRzIG9mIHRoZSBwYXRoIG9iamVjdCB3aXRoIHRoZSBnaXZlbiB0cmFuc2Zvcm0uCisgICAgICogVGhpcyBpcyBub3QgYWx3YXlzIHRoZSB0aWdodGVzdCBib3VuZHMuCisgICAgICoKKyAgICAgKiBEZWZpbmVkIGluIEdkaXBsdXNHcmFwaGljcy5oLgorICAgICAqLworICAgIFN0YXR1cyBHZXRCb3VuZHMoT1VUIFJlY3RGKiBib3VuZHMsIAorICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgTWF0cml4KiBtYXRyaXggPSBOVUxMLCAKKyAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBlbiogcGVuID0gTlVMTCkgY29uc3Q7CisKKyAgICAvLyBpbnRlZ2VyIHZlcnNpb24gKGRlZmluZWQgaW4gR2RpcGx1c0dyYXBoaWNzLmgpCisgICAgU3RhdHVzIEdldEJvdW5kcyhPVVQgUmVjdCogYm91bmRzLAorICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgTWF0cml4KiBtYXRyaXggPSBOVUxMLCAKKyAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFBlbiogcGVuID0gTlVMTCkgY29uc3Q7CisKKyAgICAvKioKKyAgICAgKiBGbGF0dGVuIHRoZSBwYXRoIG9iamVjdAorICAgICAqIE9uY2UgdGhpcyBpcyBjYWxsZWQsIHRoZSByZXN1bHRhbnQgcGF0aCBpcyBtYWRlIG9mIGxpbmUgc2VnbWVudHMgYW5kCisgICAgICogdGhlIG9yaWdpbmFsIHBhdGggaW5mb3JtYXRpb24gaXMgbG9zdC4KKyAgICAgKiBXaGVuIG1hdHJpeCA9IE5VTEwsIHRoZSBpZGVudGl0eSBtYXRyaXggaXMgYXNzdW1lZC4KKyAgICAgKi8KKyAgICBTdGF0dXMgRmxhdHRlbihJTiBjb25zdCBNYXRyaXgqIG1hdHJpeCA9IE5VTEwsIAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgZmxhdG5lc3MgPSBGbGF0bmVzc0RlZmF1bHQpCisgICAgeworICAgICAgICBHcE1hdHJpeCogbmF0aXZlTWF0cml4ID0gTlVMTDsKKyAgICAgICAgaWYobWF0cml4KQorICAgICAgICB7CisgICAgICAgICAgICBuYXRpdmVNYXRyaXggPSBtYXRyaXgtPm5hdGl2ZU1hdHJpeDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEZsYXR0ZW5QYXRoKAorICAgICAgICAgICAgbmF0aXZlUGF0aCwgCisgICAgICAgICAgICBuYXRpdmVNYXRyaXgsIAorICAgICAgICAgICAgZmxhdG5lc3MKKyAgICAgICAgKSk7CisgICAgfQorCisjaWZkZWYgRENSX1VTRV9ORVdfMjAyOTAzCisgICAgCisgICAgU3RhdHVzIFdpZGVuKAorICAgICAgICBJTiBjb25zdCBQZW4qIHBlbiwgCisgICAgICAgIElOIGNvbnN0IE1hdHJpeCogbWF0cml4ID0gTlVMTCwKKyAgICAgICAgSU4gUkVBTCBmbGF0bmVzcyA9IEZsYXRuZXNzRGVmYXVsdAorICAgICkKKyAgICB7CisgICAgICAgIEdwTWF0cml4KiBuYXRpdmVNYXRyaXggPSBOVUxMOworICAgICAgICBpZihtYXRyaXgpCisgICAgICAgICAgICBuYXRpdmVNYXRyaXggPSBtYXRyaXgtPm5hdGl2ZU1hdHJpeDsKKworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBXaWRlblBhdGgoCisgICAgICAgICAgICBuYXRpdmVQYXRoLCAKKyAgICAgICAgICAgIHBlbi0+bmF0aXZlUGVuLAorICAgICAgICAgICAgbmF0aXZlTWF0cml4LCAKKyAgICAgICAgICAgIGZsYXRuZXNzCisgICAgICAgICkpOworICAgIH0KKworI2Vsc2UKKworICAgIC8qKgorICAgICAqIFdpZGVuIHRoZSBwYXRoIG9iamVjdAorICAgICAqIFdoZW4gcmVtb3ZlU2VsZkludGVyc2VjdHMgaXMgVFJVRSwgdGhpcyByZXR1cm5zIHRoZSB3aWRlbmVkIHBhdGgKKyAgICAgKiB3aXRob3V0IHNlbGYgaW50ZXJzZWN0aW9ucy4KKyAgICAgKiBXaGVuIGl0IGlzIEZBTFNFLCBpdCByZXR1cm5zIHRoZSB3aWRlbmVkIHBhdGggd2l0aCBzZWxmaW50ZXJzZWN0aW9ucy4KKyAgICAgKiBUaGUgbGF0dGVyIGlzIGZhc3RlciBhbmQgaXMgdXN1YWxseSBzYWZmaWNpZW50IGZvciBmaWxsaW5nLgorICAgICAqLworICAgIFN0YXR1cyBXaWRlbihJTiBjb25zdCBQZW4qIHBlbiwgCisgICAgICAgICAgICAgICAgIElOIGNvbnN0IE1hdHJpeCogbWF0cml4ID0gTlVMTCwKKyAgICAgICAgICAgICAgICAgSU4gQk9PTCByZW1vdmVTZWxmSW50ZXJzZWN0cyA9IFRSVUUpCisgICAgeworICAgICAgICBHcE1hdHJpeCogbmF0aXZlTWF0cml4ID0gTlVMTDsKKyAgICAgICAgaWYobWF0cml4KQorICAgICAgICAgICAgbmF0aXZlTWF0cml4ID0gbWF0cml4LT5uYXRpdmVNYXRyaXg7CisKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwV2lkZW5QYXRoV2l0aE1pbmltdW1SZXNvbHV0aW9ucyhuYXRpdmVQYXRoLCBwZW4tPm5hdGl2ZVBlbiwKKyAgICAgICAgICAgIDAsIDAsIG5hdGl2ZU1hdHJpeCwgcmVtb3ZlU2VsZkludGVyc2VjdHMpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBXaWRlbiB0aGUgcGF0aCBvYmplY3QKKyAgICAgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gV2lkZW4oKSBtZXRob2QgZXhjZXB0IHRoYXQKKyAgICAgKiBUaGUgd2lkdGhzIG9mIHRoZSB3aWRlbmVkIHBhdGggYXJlIGxhcmdlciB0aGFuIHRoZSBnaXZlbgorICAgICAqIG1pbmltdW0gcmVzb2x1dGlvbnMgaW4geCBhbmQgeSBjb29yZGluYXRlcyBhZnRlciB0aGUgdHJhbnNmb3JtLgorICAgICAqIFRoaXMgaXMgdXNlZnVsbCB3aGVuIHdpZGVuaW5nIGEgcGF0aCB3aXRoIHRoZSBsaW1pdGVkIGRldmljZSByZXNvbHV0aW9ucy4KKyAgICAgKi8KKworICAgIFN0YXR1cyBXaWRlbihJTiBjb25zdCBQZW4qIHBlbiwgCisgICAgICAgICAgICAgICAgIElOIFJFQUwgbWluWHJlcywgCisgICAgICAgICAgICAgICAgIElOIFJFQUwgbWluWXJlcywgCisgICAgICAgICAgICAgICAgIElOIGNvbnN0IE1hdHJpeCogbWF0cml4ID0gTlVMTCwKKyAgICAgICAgICAgICAgICAgSU4gQk9PTCByZW1vdmVTZWxmSW50ZXJzZWN0cyA9IFRSVUUpCisgICAgeworICAgICAgICBHcE1hdHJpeCogbmF0aXZlTWF0cml4ID0gTlVMTDsKKyAgICAgICAgaWYobWF0cml4KQorICAgICAgICAgICAgbmF0aXZlTWF0cml4ID0gbWF0cml4LT5uYXRpdmVNYXRyaXg7CisKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwV2lkZW5QYXRoV2l0aE1pbmltdW1SZXNvbHV0aW9ucyhuYXRpdmVQYXRoLCBwZW4tPm5hdGl2ZVBlbiwKKyAgICAgICAgICAgIG1pblhyZXMsIG1pbllyZXMsIG5hdGl2ZU1hdHJpeCwgcmVtb3ZlU2VsZkludGVyc2VjdHMpKTsKKyAgICB9CisKKyNlbmRpZiAvLyBEQ1JfVVNFX05FV18yMDI5MDMKKworICAgIFN0YXR1cyBPdXRsaW5lKAorICAgICAgICBJTiBjb25zdCBNYXRyaXggKm1hdHJpeCA9IE5VTEwsCisgICAgICAgIElOIFJFQUwgZmxhdG5lc3MgPSBGbGF0bmVzc0RlZmF1bHQKKyAgICApCisgICAgeworICAgICAgICBHcE1hdHJpeCogbmF0aXZlTWF0cml4ID0gTlVMTDsKKyAgICAgICAgaWYobWF0cml4KQorICAgICAgICB7CisgICAgICAgICAgICBuYXRpdmVNYXRyaXggPSBtYXRyaXgtPm5hdGl2ZU1hdHJpeDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFdpbmRpbmdNb2RlT3V0bGluZSgKKyAgICAgICAgICAgIG5hdGl2ZVBhdGgsIG5hdGl2ZU1hdHJpeCwgZmxhdG5lc3MKKyAgICAgICAgKSk7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFdhcnAgdGhlIHBhdGggb2JqZWN0CisgICAgICogT25jZSB0aGlzIGlzIGNhbGxlZCwgdGhlIHJlc3VsdGFudCBwYXRoIGlzIG1hZGUgb2YgbGluZSBzZWdtZW50cyBhbmQKKyAgICAgKiB0aGUgb3JpZ2luYWwgcGF0aCBpbmZvcm1hdGlvbiBpcyBsb3N0LgorICAgICAqIFdoZW4gbWF0cml4ID0gTlVMTCwgdGhlIGlkZW50aXR5IG1hdHJpeCBpcyBhc3N1bWVkLgorICAgICAqLworICAgIFN0YXR1cyBXYXJwKElOIGNvbnN0IFBvaW50RiogZGVzdFBvaW50cywgCisgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50LAorICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3RGJiBzcmNSZWN0LCAKKyAgICAgICAgICAgICAgICBJTiBjb25zdCBNYXRyaXgqIG1hdHJpeCA9IE5VTEwsCisgICAgICAgICAgICAgICAgSU4gV2FycE1vZGUgd2FycE1vZGUgPSBXYXJwTW9kZVBlcnNwZWN0aXZlLAorICAgICAgICAgICAgICAgIElOIFJFQUwgZmxhdG5lc3MgPSBGbGF0bmVzc0RlZmF1bHQpCisgICAgeworICAgICAgICBHcE1hdHJpeCogbmF0aXZlTWF0cml4ID0gTlVMTDsKKyAgICAgICAgaWYobWF0cml4KQorICAgICAgICAgICAgbmF0aXZlTWF0cml4ID0gbWF0cml4LT5uYXRpdmVNYXRyaXg7CisKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwV2FycFBhdGgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFBvaW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNSZWN0LlgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUmVjdC5ZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1JlY3QuV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUmVjdC5IZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FycE1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhdG5lc3MpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBwb2ludHMgaW4gdGhlIGN1cnJlbnQgcGF0aAorICAgICAqLworICAgIElOVCBHZXRQb2ludENvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIElOVCBjb3VudCA9IDA7CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQb2ludENvdW50KG5hdGl2ZVBhdGgsICZjb3VudCkpOworCisgICAgICAgIHJldHVybiBjb3VudDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHBhdGggcG9pbnQgdHlwZSBpbmZvcm1hdGlvbgorICAgICAqLworICAgIFN0YXR1cyBHZXRQYXRoVHlwZXMoT1VUIEJZVEUqIHR5cGVzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhUeXBlcyhuYXRpdmVQYXRoLCB0eXBlcywgY291bnQpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIHBhdGggcG9pbnQgY29vcmRpbmF0ZSBpbmZvcm1hdGlvbgorICAgICAqIEBub3RlcyBTaG91bGQgdGhlcmUgYmUgUGF0aERhdGEgdGhhdCBjb250YWlucyB0eXBlc1tdIGFuZCBwb2ludHNbXQorICAgICAqICAgICAgICBmb3IgZ2V0ICYgc2V0IHB1cnBvc2VzLgorICAgICAqLworICAgIFN0YXR1cyBHZXRQYXRoUG9pbnRzKE9VVCBQb2ludEYqIHBvaW50cywgCisgICAgICAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGF0aFBvaW50cyhuYXRpdmVQYXRoLCBwb2ludHMsIGNvdW50KSk7CisgICAgfQorCisgICAgLy8gaW50ZWdlciB2ZXJzaW9uCisgICAgU3RhdHVzIEdldFBhdGhQb2ludHMoT1VUIFBvaW50KiBwb2ludHMsIAorICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhQb2ludHNJKG5hdGl2ZVBhdGgsIHBvaW50cywgY291bnQpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgR2V0TGFzdFN0YXR1cygpIGNvbnN0CisgICAgeworICAgICAgICBTdGF0dXMgbGFzdFN0YXR1cyA9IGxhc3RSZXN1bHQ7CisgICAgICAgIGxhc3RSZXN1bHQgPSBPazsKKworICAgICAgICByZXR1cm4gbGFzdFN0YXR1czsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBIaXQgdGVzdGluZyBvcGVyYXRpb25zCisgICAgICoKKyAgICAgKiBpbmxpbmUgaW1wbGVtZW50YXRpb24gaXMgaW4gZ2RpcGx1c2dyYXBoaWNzLmguCisgICAgICovCisKKyAgICBCT09MIElzVmlzaWJsZShJTiBjb25zdCBQb2ludEYmIHBvaW50LCAKKyAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBHcmFwaGljcyogZyA9IE5VTEwpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSXNWaXNpYmxlKHBvaW50LlgsIHBvaW50LlksIGcpOworICAgIH0KKyAgICAKKyAgICBCT09MIElzVmlzaWJsZShJTiBSRUFMIHgsIAorICAgICAgICAgICAgICAgICAgIElOIFJFQUwgeSwgCisgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcgPSBOVUxMKSBjb25zdDsKKworICAgIEJPT0wgSXNWaXNpYmxlKElOIGNvbnN0IFBvaW50JiBwb2ludCwKKyAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBHcmFwaGljcyogZyA9IE5VTEwpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSXNWaXNpYmxlKHBvaW50LlgsIHBvaW50LlksIGcpOworICAgIH0KKworICAgIEJPT0wgSXNWaXNpYmxlKElOIElOVCB4LCAKKyAgICAgICAgICAgICAgICAgICBJTiBJTlQgeSwgCisgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcgPSBOVUxMKSBjb25zdDsKKyAgICAKKyAgICBCT09MIElzT3V0bGluZVZpc2libGUoSU4gY29uc3QgUG9pbnRGJiBwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUGVuKiBwZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBHcmFwaGljcyogZyA9IE5VTEwpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSXNPdXRsaW5lVmlzaWJsZShwb2ludC5YLCBwb2ludC5ZLCBwZW4sIGcpOworICAgIH0KKworICAgIEJPT0wgSXNPdXRsaW5lVmlzaWJsZShJTiBSRUFMIHgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHksIAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQZW4qIHBlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IEdyYXBoaWNzKiBnID0gTlVMTCkgY29uc3Q7CisKKyAgICBCT09MIElzT3V0bGluZVZpc2libGUoSU4gY29uc3QgUG9pbnQmIHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBQZW4qIHBlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IEdyYXBoaWNzKiBnID0gTlVMTCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBJc091dGxpbmVWaXNpYmxlKHBvaW50LlgsIHBvaW50LlksIHBlbiwgZyk7CisgICAgfQorICAgIAorICAgIEJPT0wgSXNPdXRsaW5lVmlzaWJsZShJTiBJTlQgeCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCB5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUGVuKiBwZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBHcmFwaGljcyogZyA9IE5VTEwpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisKKyAgICBHcmFwaGljc1BhdGgoY29uc3QgR3JhcGhpY3NQYXRoJiBwYXRoKQorICAgIHsKKyAgICAgICAgR3BQYXRoICpjbG9uZXBhdGggPSBOVUxMOworICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENsb25lUGF0aChwYXRoLm5hdGl2ZVBhdGgsICZjbG9uZXBhdGgpKTsKKyAgICAgICAgU2V0TmF0aXZlUGF0aChjbG9uZXBhdGgpOworICAgIH0KKworI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMgorCitwcml2YXRlOgorICAgIEdyYXBoaWNzUGF0aCYgb3BlcmF0b3I9KGNvbnN0IEdyYXBoaWNzUGF0aCAmKTsKK3Byb3RlY3RlZDoKKworI2Vsc2UKKworICAgIEdyYXBoaWNzUGF0aCYgb3BlcmF0b3I9KGNvbnN0IEdyYXBoaWNzUGF0aCYgcGF0aCkKKyAgICB7CisgICAgICAgIHBhdGg7CisgICAgICAgIFNldFN0YXR1cyhOb3RJbXBsZW1lbnRlZCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyNlbmRpZgorCisgICAgR3JhcGhpY3NQYXRoKEdwUGF0aCogbmF0aXZlUGF0aCkKKyAgICB7CisgICAgICAgIGxhc3RSZXN1bHQgPSBPazsKKyAgICAgICAgU2V0TmF0aXZlUGF0aChuYXRpdmVQYXRoKTsKKyAgICB9CisKKyAgICBWT0lEIFNldE5hdGl2ZVBhdGgoR3BQYXRoICpuYXRpdmVQYXRoKQorICAgIHsKKyAgICAgICAgdGhpcy0+bmF0aXZlUGF0aCA9IG5hdGl2ZVBhdGg7CisgICAgfQorCisgICAgU3RhdHVzIFNldFN0YXR1cyhTdGF0dXMgc3RhdHVzKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBPaykKKyAgICAgICAgICAgIHJldHVybiAobGFzdFJlc3VsdCA9IHN0YXR1cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgR3BQYXRoKiBuYXRpdmVQYXRoOworICAgIG11dGFibGUgU3RhdHVzIGxhc3RSZXN1bHQ7Cit9OworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEdyYXBoaXNQYXRoSXRlcmF0b3IgY2xhc3MKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgR3JhcGhpY3NQYXRoSXRlcmF0b3IgOiBwdWJsaWMgR2RpcGx1c0Jhc2UKK3sKK3B1YmxpYzoKKworICAgIEdyYXBoaWNzUGF0aEl0ZXJhdG9yKElOIGNvbnN0IEdyYXBoaWNzUGF0aCogcGF0aCkKKyAgICB7CisgICAgICAgIEdwUGF0aCogbmF0aXZlUGF0aCA9IE5VTEw7CisgICAgICAgIGlmKHBhdGgpCisgICAgICAgICAgICBuYXRpdmVQYXRoID0gcGF0aC0+bmF0aXZlUGF0aDsKKworICAgICAgICBHcFBhdGhJdGVyYXRvciAqaXRlciA9IE5VTEw7CisgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlUGF0aEl0ZXIoJml0ZXIsIG5hdGl2ZVBhdGgpOworICAgICAgICBTZXROYXRpdmVJdGVyYXRvcihpdGVyKTsKKyAgICB9CisKKyAgICB+R3JhcGhpY3NQYXRoSXRlcmF0b3IoKQorICAgIHsKKyAgICAgICAgRGxsRXhwb3J0czo6R2RpcERlbGV0ZVBhdGhJdGVyKG5hdGl2ZUl0ZXJhdG9yKTsKKyAgICB9CisKKworICAgIElOVCBOZXh0U3VicGF0aChPVVQgSU5UKiBzdGFydEluZGV4LAorICAgICAgICAgICAgICAgICAgICBPVVQgSU5UKiBlbmRJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgT1VUIEJPT0wqIGlzQ2xvc2VkKQorICAgIHsKKyAgICAgICAgSU5UIHJlc3VsdENvdW50OworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUGF0aEl0ZXJOZXh0U3VicGF0aChuYXRpdmVJdGVyYXRvciwKKyAgICAgICAgICAgICZyZXN1bHRDb3VudCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIGlzQ2xvc2VkKSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdENvdW50OworICAgIH0KKworCisgICAgSU5UIE5leHRTdWJwYXRoKElOIGNvbnN0IEdyYXBoaWNzUGF0aCogcGF0aCwgCisgICAgICAgICAgICAgICAgICAgIE9VVCBCT09MKiBpc0Nsb3NlZCkKKyAgICB7CisgICAgICAgIEdwUGF0aCogbmF0aXZlUGF0aCA9IE5VTEw7CisKKyAgICAgICAgSU5UIHJlc3VsdENvdW50OworCisgICAgICAgIGlmKHBhdGgpCisgICAgICAgICAgICBuYXRpdmVQYXRoPSBwYXRoLT5uYXRpdmVQYXRoOworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUGF0aEl0ZXJOZXh0U3VicGF0aFBhdGgobmF0aXZlSXRlcmF0b3IsCisgICAgICAgICAgICAmcmVzdWx0Q291bnQsIG5hdGl2ZVBhdGgsIGlzQ2xvc2VkKSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdENvdW50OworICAgIH0KKworICAgIElOVCBOZXh0UGF0aFR5cGUoT1VUIEJZVEUqIHBhdGhUeXBlLCAKKyAgICAgICAgICAgICAgICAgICAgIE9VVCBJTlQqIHN0YXJ0SW5kZXgsIAorICAgICAgICAgICAgICAgICAgICAgT1VUIElOVCogZW5kSW5kZXgpCisgICAgeworICAgICAgICBJTlQgcmVzdWx0Q291bnQ7CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBQYXRoSXRlck5leHRQYXRoVHlwZShuYXRpdmVJdGVyYXRvciwKKyAgICAgICAgICAgICZyZXN1bHRDb3VudCwgcGF0aFR5cGUsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdENvdW50OworICAgIH0KKworICAgIElOVCBOZXh0TWFya2VyKE9VVCBJTlQqIHN0YXJ0SW5kZXgsIAorICAgICAgICAgICAgICAgICAgIE9VVCBJTlQqIGVuZEluZGV4KQorICAgIHsKKyAgICAgICAgSU5UIHJlc3VsdENvdW50OworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUGF0aEl0ZXJOZXh0TWFya2VyKG5hdGl2ZUl0ZXJhdG9yLAorICAgICAgICAgICAgJnJlc3VsdENvdW50LCBzdGFydEluZGV4LCBlbmRJbmRleCkpOworCisgICAgICAgIHJldHVybiByZXN1bHRDb3VudDsKKyAgICB9CisKKworICAgIElOVCBOZXh0TWFya2VyKElOIGNvbnN0IEdyYXBoaWNzUGF0aCogcGF0aCkKKyAgICB7CisgICAgICAgIEdwUGF0aCogbmF0aXZlUGF0aCA9IE5VTEw7CisKKyAgICAgICAgSU5UIHJlc3VsdENvdW50OworCisgICAgICAgIGlmKHBhdGgpCisgICAgICAgICAgICBuYXRpdmVQYXRoPSBwYXRoLT5uYXRpdmVQYXRoOworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUGF0aEl0ZXJOZXh0TWFya2VyUGF0aChuYXRpdmVJdGVyYXRvciwKKyAgICAgICAgICAgICZyZXN1bHRDb3VudCwgbmF0aXZlUGF0aCkpOworCisgICAgICAgIHJldHVybiByZXN1bHRDb3VudDsKKyAgICB9CisKKyAgICBJTlQgR2V0Q291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5UIHJlc3VsdENvdW50OworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUGF0aEl0ZXJHZXRDb3VudChuYXRpdmVJdGVyYXRvciwgJnJlc3VsdENvdW50KSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdENvdW50OworICAgIH0KKworICAgIElOVCBHZXRTdWJwYXRoQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5UIHJlc3VsdENvdW50OworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUGF0aEl0ZXJHZXRTdWJwYXRoQ291bnQobmF0aXZlSXRlcmF0b3IsICZyZXN1bHRDb3VudCkpOworCisgICAgICAgIHJldHVybiByZXN1bHRDb3VudDsKKyAgICB9CisKKyAgICBCT09MIEhhc0N1cnZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEJPT0wgaGFzQ3VydmU7CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBQYXRoSXRlckhhc0N1cnZlKG5hdGl2ZUl0ZXJhdG9yLCAmaGFzQ3VydmUpKTsKKworICAgICAgICByZXR1cm4gaGFzQ3VydmU7CisgICAgfQorCisgICAgVk9JRCBSZXdpbmQoKQorICAgIHsKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBQYXRoSXRlclJld2luZChuYXRpdmVJdGVyYXRvcikpOworICAgIH0KKworICAgIElOVCBFbnVtZXJhdGUoT1VUIFBvaW50RiAqcG9pbnRzLAorICAgICAgICAgICAgICAgICAgT1VUIEJZVEUgKnR5cGVzLCAKKyAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkKKyAgICB7CisgICAgICAgIElOVCByZXN1bHRDb3VudDsKKworICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFBhdGhJdGVyRW51bWVyYXRlKG5hdGl2ZUl0ZXJhdG9yLAorICAgICAgICAgICAgJnJlc3VsdENvdW50LCBwb2ludHMsIHR5cGVzLCBjb3VudCkpOworCisgICAgICAgIHJldHVybiByZXN1bHRDb3VudDsKKyAgICB9CisKKyAgICBJTlQgQ29weURhdGEoT1VUIFBvaW50RiogcG9pbnRzLCAKKyAgICAgICAgICAgICAgICAgT1VUIEJZVEUqIHR5cGVzLAorICAgICAgICAgICAgICAgICBJTiBJTlQgc3RhcnRJbmRleCwgCisgICAgICAgICAgICAgICAgIElOIElOVCBlbmRJbmRleCkKKyAgICB7CisgICAgICAgIElOVCByZXN1bHRDb3VudDsKKworICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFBhdGhJdGVyQ29weURhdGEobmF0aXZlSXRlcmF0b3IsCisgICAgICAgICAgICAmcmVzdWx0Q291bnQsIHBvaW50cywgdHlwZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdENvdW50OworICAgIH0KKworICAgIFN0YXR1cyBHZXRMYXN0U3RhdHVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIFN0YXR1cyBsYXN0U3RhdHVzID0gbGFzdFJlc3VsdDsKKyAgICAgICAgbGFzdFJlc3VsdCA9IE9rOworCisgICAgICAgIHJldHVybiBsYXN0U3RhdHVzOworICAgIH0KKworI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMgorCitwcml2YXRlOgorICAgIEdyYXBoaWNzUGF0aEl0ZXJhdG9yKGNvbnN0IEdyYXBoaWNzUGF0aEl0ZXJhdG9yICYpOworICAgIEdyYXBoaWNzUGF0aEl0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgR3JhcGhpY3NQYXRoSXRlcmF0b3IgJik7CisKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgVk9JRCBTZXROYXRpdmVJdGVyYXRvcihHcFBhdGhJdGVyYXRvciAqbmF0aXZlSXRlcmF0b3IpCisgICAgeworICAgICAgICB0aGlzLT5uYXRpdmVJdGVyYXRvciA9IG5hdGl2ZUl0ZXJhdG9yOworICAgIH0KKworICAgIFN0YXR1cyBTZXRTdGF0dXMoU3RhdHVzIHN0YXR1cykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChzdGF0dXMgIT0gT2spCisgICAgICAgICAgICByZXR1cm4gKGxhc3RSZXN1bHQgPSBzdGF0dXMpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIEdwUGF0aEl0ZXJhdG9yKiBuYXRpdmVJdGVyYXRvcjsKKyAgICBtdXRhYmxlIFN0YXR1cyBsYXN0UmVzdWx0OworfTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXByZXNlbnQgcG9seWdvbiBncmFkaWVudCBicnVzaCBvYmplY3QKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgUGF0aEdyYWRpZW50QnJ1c2ggOiBwdWJsaWMgQnJ1c2gKK3sKK3B1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgUGVuOworCisgICAgUGF0aEdyYWRpZW50QnJ1c2goCisgICAgICAgIElOIGNvbnN0IFBvaW50RiogcG9pbnRzLAorICAgICAgICBJTiBJTlQgY291bnQsCisgICAgICAgIElOIFdyYXBNb2RlIHdyYXBNb2RlID0gV3JhcE1vZGVDbGFtcCkKKyAgICB7CisgICAgICAgIEdwUGF0aEdyYWRpZW50ICpicnVzaCA9IE5VTEw7CisKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVQYXRoR3JhZGllbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwTW9kZSwgJmJydXNoKTsKKyAgICAgICAgU2V0TmF0aXZlQnJ1c2goYnJ1c2gpOworICAgIH0KKworICAgIFBhdGhHcmFkaWVudEJydXNoKAorICAgICAgICBJTiBjb25zdCBQb2ludCogcG9pbnRzLAorICAgICAgICBJTiBJTlQgY291bnQsCisgICAgICAgIElOIFdyYXBNb2RlIHdyYXBNb2RlID0gV3JhcE1vZGVDbGFtcCkKKyAgICB7CisgICAgICAgIEdwUGF0aEdyYWRpZW50ICpicnVzaCA9IE5VTEw7CisKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVQYXRoR3JhZGllbnRJKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cywgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcE1vZGUsICZicnVzaCk7CisKKyAgICAgICAgU2V0TmF0aXZlQnJ1c2goYnJ1c2gpOworICAgIH0KKworICAgIFBhdGhHcmFkaWVudEJydXNoKAorICAgICAgICBJTiBjb25zdCBHcmFwaGljc1BhdGgqIHBhdGgKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgR3BQYXRoR3JhZGllbnQgKmJydXNoID0gTlVMTDsKKworICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZVBhdGhHcmFkaWVudEZyb21QYXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgtPm5hdGl2ZVBhdGgsICZicnVzaCk7CisgICAgICAgIFNldE5hdGl2ZUJydXNoKGJydXNoKTsKKyAgICB9CisKKyAgICAvLyBHZXQvc2V0IGNvbG9ycworCisgICAgU3RhdHVzIEdldENlbnRlckNvbG9yKE9VVCBDb2xvciogY29sb3IpIGNvbnN0CisgICAgeworICAgICAgICBBUkdCIGFyZ2I7CisgICAgICAgIAorICAgICAgICBpZiAoY29sb3IgPT0gTlVMTCkgCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7CisgICAgICAgIH0KKworICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhHcmFkaWVudENlbnRlckNvbG9yKAorICAgICAgICAgICAgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKSBuYXRpdmVCcnVzaCwgJmFyZ2IpKTsKKworICAgICAgICBjb2xvci0+U2V0VmFsdWUoYXJnYik7CisKKyAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7CisgICAgfQorCisgICAgU3RhdHVzIFNldENlbnRlckNvbG9yKElOIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICB7CisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGF0aEdyYWRpZW50Q2VudGVyQ29sb3IoCisgICAgICAgICAgICAgICAgICAgICAgIChHcFBhdGhHcmFkaWVudCopIG5hdGl2ZUJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5HZXRWYWx1ZSgpKSk7CisKKyAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7CisgICAgfQorCisgICAgSU5UIEdldFBvaW50Q291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5UIGNvdW50OworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGF0aEdyYWRpZW50UG9pbnRDb3VudCgKKyAgICAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KikgbmF0aXZlQnJ1c2gsICZjb3VudCkpOworCisgICAgICAgIHJldHVybiBjb3VudDsKKyAgICB9CisKKyAgICBJTlQgR2V0U3Vycm91bmRDb2xvckNvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIElOVCBjb3VudDsKKworICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhHcmFkaWVudFN1cnJvdW5kQ29sb3JDb3VudCgKKyAgICAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KikgbmF0aXZlQnJ1c2gsICZjb3VudCkpOworCisgICAgICAgIHJldHVybiBjb3VudDsKKyAgICB9CisKKyAgICBTdGF0dXMgR2V0U3Vycm91bmRDb2xvcnMoT1VUIENvbG9yKiBjb2xvcnMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBPVVQgSU5UKiBjb3VudCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmKGNvbG9ycyA9PSBOVUxMIHx8IGNvdW50ID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7CisgICAgICAgIH0KKworICAgICAgICBJTlQgY291bnQxOworICAgICAgICAKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQYXRoR3JhZGllbnRTdXJyb3VuZENvbG9yQ291bnQoCisgICAgICAgICAgICAgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKSBuYXRpdmVCcnVzaCwgJmNvdW50MSkpOworCisgICAgICAgIGlmKGxhc3RSZXN1bHQgIT0gT2spCisgICAgICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDsKKworICAgICAgICBpZigoKmNvdW50IDwgY291bnQxKSB8fCAoY291bnQxIDw9IDApKQorICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhJbnN1ZmZpY2llbnRCdWZmZXIpOworCisgICAgICAgIEFSR0IqIGFyZ2JzID0gKEFSR0IqKSBuZXcgQVJHQltjb3VudDFdOworICAgICAgICBpZihhcmdicyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhPdXRPZk1lbW9yeSk7CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQYXRoR3JhZGllbnRTdXJyb3VuZENvbG9yc1dpdGhDb3VudCgKKyAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KiluYXRpdmVCcnVzaCwgYXJnYnMsICZjb3VudDEpKTsKKworICAgICAgICBpZihsYXN0UmVzdWx0ID09IE9rKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IoSU5UIGkgPSAwOyBpIDwgY291bnQxOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29sb3JzW2ldLlNldFZhbHVlKGFyZ2JzW2ldKTsKKyAgICAgICAgICAgIH0gICAgICAgIAorICAgICAgICAgICAgKmNvdW50ID0gY291bnQxOworICAgICAgICB9CisKKyAgICAgICAgZGVsZXRlIFtdIGFyZ2JzOworICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0U3Vycm91bmRDb2xvcnMoSU4gY29uc3QgQ29sb3IqIGNvbG9ycywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIE9VVCBJTlQqIGNvdW50KQorICAgIHsKKyAgICAgICAgaWYoY29sb3JzID09IE5VTEwgfHwgY291bnQgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhJbnZhbGlkUGFyYW1ldGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIElOVCBjb3VudDEgPSBHZXRQb2ludENvdW50KCk7CisKKyAgICAgICAgaWYoKCpjb3VudCA+IGNvdW50MSkgfHwgKGNvdW50MSA8PSAwKSkKKyAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7CisKKyAgICAgICAgY291bnQxID0gKmNvdW50OworCisgICAgICAgIEFSR0IqIGFyZ2JzID0gKEFSR0IqKSBuZXcgQVJHQltjb3VudDFdOworICAgICAgICBpZihhcmdicyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhPdXRPZk1lbW9yeSk7CisKKyAgICAgICAgZm9yKElOVCBpID0gMDsgaSA8IGNvdW50MTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBhcmdic1tpXSA9IGNvbG9yc1tpXS5HZXRWYWx1ZSgpOworICAgICAgICB9CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQYXRoR3JhZGllbnRTdXJyb3VuZENvbG9yc1dpdGhDb3VudCgKKyAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KiluYXRpdmVCcnVzaCwgYXJnYnMsICZjb3VudDEpKTsKKworICAgICAgICBpZihsYXN0UmVzdWx0ID09IE9rKQorICAgICAgICAgICAgKmNvdW50ID0gY291bnQxOworCisgICAgICAgIGRlbGV0ZSBbXSBhcmdiczsKKworICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDsKKyAgICB9CisKKyAgICBTdGF0dXMgR2V0R3JhcGhpY3NQYXRoKE9VVCBHcmFwaGljc1BhdGgqIHBhdGgpIGNvbnN0CisgICAgeworICAgICAgICBpZihwYXRoID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKEludmFsaWRQYXJhbWV0ZXIpOworCisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhHcmFkaWVudFBhdGgoCisgICAgICAgICAgICAgICAgICAgIChHcFBhdGhHcmFkaWVudCopbmF0aXZlQnJ1c2gsIHBhdGgtPm5hdGl2ZVBhdGgpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0R3JhcGhpY3NQYXRoKElOIGNvbnN0IEdyYXBoaWNzUGF0aCogcGF0aCkKKyAgICB7CisgICAgICAgIGlmKHBhdGggPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7CisKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGF0aEdyYWRpZW50UGF0aCgKKyAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KiluYXRpdmVCcnVzaCwgcGF0aC0+bmF0aXZlUGF0aCkpOworICAgIH0KKworICAgIFN0YXR1cyBHZXRDZW50ZXJQb2ludChPVVQgUG9pbnRGKiBwb2ludCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhHcmFkaWVudENlbnRlclBvaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKW5hdGl2ZUJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludCkpOworICAgIH0KKworCisgICAgU3RhdHVzIEdldENlbnRlclBvaW50KE9VVCBQb2ludCogcG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQYXRoR3JhZGllbnRDZW50ZXJQb2ludEkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHcFBhdGhHcmFkaWVudCopbmF0aXZlQnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50KSk7CisgICAgfQorCisgICAgU3RhdHVzIFNldENlbnRlclBvaW50KElOIGNvbnN0IFBvaW50RiYgcG9pbnQpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQYXRoR3JhZGllbnRDZW50ZXJQb2ludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KiluYXRpdmVCcnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBvaW50KSk7CisgICAgfQorCisgICAgU3RhdHVzIFNldENlbnRlclBvaW50KElOIGNvbnN0IFBvaW50JiBwb2ludCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBhdGhHcmFkaWVudENlbnRlclBvaW50SSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KiluYXRpdmVCcnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBvaW50KSk7CisgICAgfQorCisgICAgU3RhdHVzIEdldFJlY3RhbmdsZShPVVQgUmVjdEYqIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQYXRoR3JhZGllbnRSZWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHcFBhdGhHcmFkaWVudCopbmF0aXZlQnJ1c2gsIHJlY3QpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgR2V0UmVjdGFuZ2xlKE9VVCBSZWN0KiByZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGF0aEdyYWRpZW50UmVjdEkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KiluYXRpdmVCcnVzaCwgcmVjdCkpOworICAgIH0KKworICAgIC8vIEdhbW1hIGNvcnJlY3Rpb24uCisKKyAgICBTdGF0dXMgU2V0R2FtbWFDb3JyZWN0aW9uKElOIEJPT0wgdXNlR2FtbWFDb3JyZWN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGF0aEdyYWRpZW50R2FtbWFDb3JyZWN0aW9uKAorICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KiluYXRpdmVCcnVzaCwgdXNlR2FtbWFDb3JyZWN0aW9uKSk7CisgICAgfQorCisgICAgQk9PTCBHZXRHYW1tYUNvcnJlY3Rpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQk9PTCB1c2VHYW1tYUNvcnJlY3Rpb247CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQYXRoR3JhZGllbnRHYW1tYUNvcnJlY3Rpb24oCisgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKW5hdGl2ZUJydXNoLCAmdXNlR2FtbWFDb3JyZWN0aW9uKSk7CisKKyAgICAgICAgcmV0dXJuIHVzZUdhbW1hQ29ycmVjdGlvbjsKKyAgICB9CisKKyAgICBJTlQgR2V0QmxlbmRDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgIElOVCBjb3VudCA9IDA7CisKKyAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhHcmFkaWVudEJsZW5kQ291bnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKSBuYXRpdmVCcnVzaCwgJmNvdW50KSk7CisKKyAgICAgICByZXR1cm4gY291bnQ7CisgICAgfQorCisgICAgU3RhdHVzIEdldEJsZW5kKE9VVCBSRUFMKiBibGVuZEZhY3RvcnMsCisgICAgICAgICAgICAgICAgICAgIE9VVCBSRUFMKiBibGVuZFBvc2l0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgSU4gSU5UIGNvdW50KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGF0aEdyYWRpZW50QmxlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KiluYXRpdmVCcnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZEZhY3RvcnMsIGJsZW5kUG9zaXRpb25zLCBjb3VudCkpOworICAgIH0KKworICAgIFN0YXR1cyBTZXRCbGVuZChJTiBjb25zdCBSRUFMKiBibGVuZEZhY3RvcnMsIAorICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSRUFMKiBibGVuZFBvc2l0aW9ucywgCisgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBhdGhHcmFkaWVudEJsZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHcFBhdGhHcmFkaWVudCopbmF0aXZlQnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRGYWN0b3JzLCBibGVuZFBvc2l0aW9ucywgY291bnQpKTsKKyAgICB9CisKKyAgICBJTlQgR2V0SW50ZXJwb2xhdGlvbkNvbG9yQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICBJTlQgY291bnQgPSAwOworCisgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQYXRoR3JhZGllbnRQcmVzZXRCbGVuZENvdW50KAorICAgICAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KikgbmF0aXZlQnJ1c2gsICZjb3VudCkpOworCisgICAgICAgcmV0dXJuIGNvdW50OworICAgIH0KKworICAgIFN0YXR1cyBTZXRJbnRlcnBvbGF0aW9uQ29sb3JzKElOIGNvbnN0IENvbG9yKiBwcmVzZXRDb2xvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUkVBTCogYmxlbmRQb3NpdGlvbnMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkKKyAgICB7CisgICAgICAgIGlmICgoY291bnQgPD0gMCkgfHwgIXByZXNldENvbG9ycykgCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7CisgICAgICAgIH0KKworICAgICAgICBBUkdCKiBhcmdicyA9IChBUkdCKikgbmV3IEFSR0JbY291bnRdOworICAgICAgICBpZihhcmdicykKKyAgICAgICAgeworICAgICAgICAgICAgZm9yKElOVCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXJnYnNbaV0gPSBwcmVzZXRDb2xvcnNbaV0uR2V0VmFsdWUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3RhdHVzIHN0YXR1cyA9IFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGF0aEdyYWRpZW50UHJlc2V0QmxlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKSBuYXRpdmVCcnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ2JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRQb3NpdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOworICAgICAgICAgICAgZGVsZXRlW10gYXJnYnM7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhPdXRPZk1lbW9yeSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdGF0dXMgR2V0SW50ZXJwb2xhdGlvbkNvbG9ycyhPVVQgQ29sb3IqIHByZXNldENvbG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVVQgUkVBTCogYmxlbmRQb3NpdGlvbnMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgoY291bnQgPD0gMCkgfHwgIXByZXNldENvbG9ycykgCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7CisgICAgICAgIH0KKworICAgICAgICBBUkdCKiBhcmdicyA9IChBUkdCKikgbmV3IEFSR0JbY291bnRdOworICAgICAgICAKKyAgICAgICAgaWYgKCFhcmdicykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhPdXRPZk1lbW9yeSk7CisgICAgICAgIH0KKworICAgICAgICBHcFN0YXR1cyBzdGF0dXMgPSBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhHcmFkaWVudFByZXNldEJsZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKW5hdGl2ZUJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdicywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRQb3NpdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7CisgICAgICAgIAorICAgICAgICBmb3IoSU5UIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgcHJlc2V0Q29sb3JzW2ldID0gQ29sb3IoYXJnYnNbaV0pOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZSBbXSBhcmdiczsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgU3RhdHVzIFNldEJsZW5kQmVsbFNoYXBlKElOIFJFQUwgZm9jdXMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHNjYWxlID0gMS4wKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGF0aEdyYWRpZW50U2lnbWFCbGVuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKW5hdGl2ZUJydXNoLCBmb2N1cywgc2NhbGUpKTsKKyAgICB9CisKKyAgICAjaWZkZWYgRENSX1VTRV9ORVdfMTQ1MTM1CisgICAgU3RhdHVzIFNldEJsZW5kVHJpYW5ndWxhclNoYXBlKAorICAgICAgICBJTiBSRUFMIGZvY3VzLAorICAgICAgICBJTiBSRUFMIHNjYWxlID0gMS4wCisgICAgKQorICAgICNlbHNlCisgICAgU3RhdHVzIFNldEJsZW5kVHJpYW5nbGFyU2hhcGUoSU4gUkVBTCBmb2N1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHNjYWxlID0gMS4wKQorICAgICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGF0aEdyYWRpZW50TGluZWFyQmxlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KiluYXRpdmVCcnVzaCwgZm9jdXMsIHNjYWxlKSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0L3NldCBicnVzaCB0cmFuc2Zvcm0KKyAgICAgKi8KKyAgICBTdGF0dXMgR2V0VHJhbnNmb3JtKE9VVCBNYXRyaXggKm1hdHJpeCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhHcmFkaWVudFRyYW5zZm9ybSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKSBuYXRpdmVCcnVzaCwgbWF0cml4LT5uYXRpdmVNYXRyaXgpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0VHJhbnNmb3JtKElOIGNvbnN0IE1hdHJpeCogbWF0cml4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGF0aEdyYWRpZW50VHJhbnNmb3JtKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHcFBhdGhHcmFkaWVudCopIG5hdGl2ZUJydXNoLCBtYXRyaXgtPm5hdGl2ZU1hdHJpeCkpOworICAgIH0KKworICAgIFN0YXR1cyBSZXNldFRyYW5zZm9ybSgpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBSZXNldFBhdGhHcmFkaWVudFRyYW5zZm9ybSgoR3BQYXRoR3JhZGllbnQqKW5hdGl2ZUJydXNoKSk7CisgICAgfQorCisgICAgU3RhdHVzIE11bHRpcGx5VHJhbnNmb3JtKElOIGNvbnN0IE1hdHJpeCogbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcE11bHRpcGx5UGF0aEdyYWRpZW50VHJhbnNmb3JtKChHcFBhdGhHcmFkaWVudCopbmF0aXZlQnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT5uYXRpdmVNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXIpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgVHJhbnNsYXRlVHJhbnNmb3JtKElOIFJFQUwgZHgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCBkeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIE1hdHJpeE9yZGVyIG9yZGVyID0gTWF0cml4T3JkZXJQcmVwZW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwVHJhbnNsYXRlUGF0aEdyYWRpZW50VHJhbnNmb3JtKChHcFBhdGhHcmFkaWVudCopbmF0aXZlQnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeCwgZHksIG9yZGVyKSk7CisgICAgfQorCisgICAgU3RhdHVzIFNjYWxlVHJhbnNmb3JtKElOIFJFQUwgc3gsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNjYWxlUGF0aEdyYWRpZW50VHJhbnNmb3JtKChHcFBhdGhHcmFkaWVudCopbmF0aXZlQnJ1c2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3gsIHN5LCBvcmRlcikpOworICAgIH0KKworICAgIFN0YXR1cyBSb3RhdGVUcmFuc2Zvcm0oSU4gUkVBTCBhbmdsZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFJvdGF0ZVBhdGhHcmFkaWVudFRyYW5zZm9ybSgoR3BQYXRoR3JhZGllbnQqKW5hdGl2ZUJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSwgb3JkZXIpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQvc2V0IGJydXNoIGZvY3VzIHNjYWxlcworICAgICAqLworICAgIFN0YXR1cyBHZXRGb2N1c1NjYWxlcyhPVVQgUkVBTCogeFNjYWxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgT1VUIFJFQUwqIHlTY2FsZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhHcmFkaWVudEZvY3VzU2NhbGVzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHcFBhdGhHcmFkaWVudCopIG5hdGl2ZUJydXNoLCB4U2NhbGUsIHlTY2FsZSkpOworICAgIH0KKworICAgIFN0YXR1cyBTZXRGb2N1c1NjYWxlcyhJTiBSRUFMIHhTY2FsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gUkVBTCB5U2NhbGUpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQYXRoR3JhZGllbnRGb2N1c1NjYWxlcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKSBuYXRpdmVCcnVzaCwgeFNjYWxlLCB5U2NhbGUpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQvc2V0IGJydXNoIHdyYXBwaW5nIG1vZGUKKyAgICAgKi8KKyAgICBXcmFwTW9kZSBHZXRXcmFwTW9kZSgpIGNvbnN0CisgICAgeworICAgICAgICBXcmFwTW9kZSB3cmFwTW9kZTsKKworICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBhdGhHcmFkaWVudFdyYXBNb2RlKAorICAgICAgICAgICAgICAgICAgICAgKEdwUGF0aEdyYWRpZW50KikgbmF0aXZlQnJ1c2gsICZ3cmFwTW9kZSkpOworCisgICAgICAgIHJldHVybiB3cmFwTW9kZTsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0V3JhcE1vZGUoSU4gV3JhcE1vZGUgd3JhcE1vZGUpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQYXRoR3JhZGllbnRXcmFwTW9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3BQYXRoR3JhZGllbnQqKSBuYXRpdmVCcnVzaCwgd3JhcE1vZGUpKTsKKyAgICB9CisKKyNpZmRlZiBEQ1JfVVNFX05FV18yNTA5MzIKKworcHJpdmF0ZToKKyAgICBQYXRoR3JhZGllbnRCcnVzaChjb25zdCBQYXRoR3JhZGllbnRCcnVzaCAmKTsKKyAgICBQYXRoR3JhZGllbnRCcnVzaCYgb3BlcmF0b3I9KGNvbnN0IFBhdGhHcmFkaWVudEJydXNoICYpOworCisjZW5kaWYKKworcHJvdGVjdGVkOgorCisgICAgUGF0aEdyYWRpZW50QnJ1c2goKQorICAgIHsKKyAgICB9Cit9OworCisKKyNlbmRpZiAvLyAhX0dSQVBISUNTUEFUSF9IUFAKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNQZW4uaCBiL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNQZW4uaAppbmRleCAyMDY1M2RiLi5jNTc3NmFiIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzUGVuLmgKKysrIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c1Blbi5oCkBAIC0xLDUxOSArMSw1MTkgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwNCi0qIA0KLSogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsIE1pY3Jvc29mdCBDb3JwLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0qDQotKiBNb2R1bGUgTmFtZToNCi0qDQotKiAgIEdkaXBsdXNQZW4uaA0KLSoNCi0qIEFic3RyYWN0Og0KLSoNCi0qICAgUGVuIEFQSSByZWxhdGVkIGRlY2xhcmF0aW9ucw0KLSoNCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotI2lmbmRlZiBfR0RJUExVU1BFTl9IDQotI2RlZmluZSBfR0RJUExVU1BFTl9IDQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIGNsYXNzIGZvciB2YXJpb3VzIHBlbiB0eXBlcw0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1jbGFzcyBQZW4gOiBwdWJsaWMgR2RpcGx1c0Jhc2UNCi17DQotcHVibGljOg0KLSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NQYXRoOw0KLSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3M7DQotDQotICAgIC8vIGFic3RyYWN0IENsb25lKCkgY2FuJ3QgYmUgaW1wbGVtZW50ZWQgaGVyZSBiZWNhdXNlIGl0IGNhbid0DQotICAgIC8vIG5ldyBhbiBvYmplY3Qgd2l0aCBwdXJlIHZpcnR1YWwgZnVuY3Rpb25zDQotDQotICAgIC8vIENvbnN0cnVjdG9ycw0KLQ0KLSAgICBQZW4oSU4gY29uc3QgQ29sb3ImIGNvbG9yLCANCi0gICAgICAgIElOIFJFQUwgd2lkdGggPSAxLjBmKQ0KLSAgICB7DQotICAgICAgICBVbml0IHVuaXQgPSBVbml0V29ybGQ7DQotICAgICAgICBuYXRpdmVQZW4gPSBOVUxMOw0KLSAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVQZW4xKGNvbG9yLkdldFZhbHVlKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIHVuaXQsICZuYXRpdmVQZW4pOw0KLSAgICB9DQotDQotICAgIFBlbihJTiBjb25zdCBCcnVzaCogYnJ1c2gsIA0KLSAgICAgICAgSU4gUkVBTCB3aWR0aCA9IDEuMGYpDQotICAgIHsNCi0gICAgICAgIFVuaXQgdW5pdCA9IFVuaXRXb3JsZDsNCi0gICAgICAgIG5hdGl2ZVBlbiA9IE5VTEw7DQotICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZVBlbjIoYnJ1c2gtPm5hdGl2ZUJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCB1bml0LCAmbmF0aXZlUGVuKTsNCi0gICAgfQ0KLQ0KLSAgICB+UGVuKCkNCi0gICAgew0KLSAgICAgICAgRGxsRXhwb3J0czo6R2RpcERlbGV0ZVBlbihuYXRpdmVQZW4pOw0KLSAgICB9DQotDQotICAgIFBlbiogQ2xvbmUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBHcFBlbiAqY2xvbmVQZW4gPSBOVUxMOw0KLQ0KLSAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDbG9uZVBlbihuYXRpdmVQZW4sICZjbG9uZVBlbik7DQotICAgDQotICAgICAgICByZXR1cm4gbmV3IFBlbihjbG9uZVBlbiwgbGFzdFJlc3VsdCk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFNldFdpZHRoKElOIFJFQUwgd2lkdGgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBlbldpZHRoKG5hdGl2ZVBlbiwgd2lkdGgpKTsNCi0gICAgfQ0KLQ0KLSAgICBSRUFMIEdldFdpZHRoKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgUkVBTCB3aWR0aDsNCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGVuV2lkdGgobmF0aXZlUGVuLCAmd2lkdGgpKTsNCi0gICAgICAgIA0KLSAgICAgICAgcmV0dXJuIHdpZHRoOw0KLSAgICB9DQotICAgIA0KLSAgICAvLyBTZXQvZ2V0IGxpbmUgY2Fwczogc3RhcnQsIGVuZCwgYW5kIGRhc2gNCi0NCi0gICAgLy8gTGluZSBjYXAgYW5kIGpvaW4gQVBJcyBieSB1c2luZyBMaW5lQ2FwIGFuZCBMaW5lSm9pbiBlbnVtcy4NCi0NCi0gICAgI2lmZGVmIERDUl9VU0VfTkVXXzE5NzgxOQ0KLSAgICBTdGF0dXMgU2V0TGluZUNhcChJTiBMaW5lQ2FwIHN0YXJ0Q2FwLCANCi0gICAgICAgICAgICAgICAgICAgICAgSU4gTGluZUNhcCBlbmRDYXAsIA0KLSAgICAgICAgICAgICAgICAgICAgICBJTiBEYXNoQ2FwIGRhc2hDYXApDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBlbkxpbmVDYXAxOTc4MTkobmF0aXZlUGVuLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q2FwLCBlbmRDYXAsIGRhc2hDYXApKTsNCi0gICAgfQ0KLSAgICAjZWxzZQ0KLSAgICBTdGF0dXMgU2V0TGluZUNhcChJTiBMaW5lQ2FwIHN0YXJ0Q2FwLCANCi0gICAgICAgICAgICAgICAgICAgICAgSU4gTGluZUNhcCBlbmRDYXAsIA0KLSAgICAgICAgICAgICAgICAgICAgICBJTiBMaW5lQ2FwIGRhc2hDYXApDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBlbkxpbmVDYXAobmF0aXZlUGVuLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q2FwLCBlbmRDYXAsIGRhc2hDYXApKTsNCi0gICAgfQ0KLSAgICAjZW5kaWYgLy8gRENSX1VTRV9ORVdfMTk3ODE5DQotDQotICAgIFN0YXR1cyBTZXRTdGFydENhcChJTiBMaW5lQ2FwIHN0YXJ0Q2FwKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQZW5TdGFydENhcChuYXRpdmVQZW4sIHN0YXJ0Q2FwKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFNldEVuZENhcChJTiBMaW5lQ2FwIGVuZENhcCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGVuRW5kQ2FwKG5hdGl2ZVBlbiwgZW5kQ2FwKSk7DQotICAgIH0NCi0NCi0gICAgI2lmZGVmIERDUl9VU0VfTkVXXzE5NzgxOQ0KLSAgICBTdGF0dXMgU2V0RGFzaENhcChJTiBEYXNoQ2FwIGRhc2hDYXApDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBlbkRhc2hDYXAxOTc4MTkobmF0aXZlUGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFzaENhcCkpOw0KLSAgICB9DQotICAgICNlbHNlDQotICAgIFN0YXR1cyBTZXREYXNoQ2FwKElOIExpbmVDYXAgZGFzaENhcCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGVuRGFzaENhcChuYXRpdmVQZW4sIGRhc2hDYXApKTsNCi0gICAgfQ0KLSAgICAjZW5kaWYgLy8gRENSX1VTRV9ORVdfMTk3ODE5DQotDQotICAgIExpbmVDYXAgR2V0U3RhcnRDYXAoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBMaW5lQ2FwIHN0YXJ0Q2FwOw0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQZW5TdGFydENhcChuYXRpdmVQZW4sICZzdGFydENhcCkpOw0KLSAgICAgICAgDQotICAgICAgICByZXR1cm4gc3RhcnRDYXA7DQotICAgIH0NCi0NCi0gICAgTGluZUNhcCBHZXRFbmRDYXAoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBMaW5lQ2FwIGVuZENhcDsNCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGVuRW5kQ2FwKG5hdGl2ZVBlbiwgJmVuZENhcCkpOw0KLQ0KLSAgICAgICAgcmV0dXJuIGVuZENhcDsNCi0gICAgfQ0KLQ0KLSAgICAjaWZkZWYgRENSX1VTRV9ORVdfMTk3ODE5DQotICAgIERhc2hDYXAgR2V0RGFzaENhcCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIERhc2hDYXAgZGFzaENhcDsNCi0NCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGVuRGFzaENhcDE5NzgxOShuYXRpdmVQZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXNoQ2FwKSk7DQotDQotICAgICAgICByZXR1cm4gZGFzaENhcDsNCi0gICAgfQ0KLSAgICAjZWxzZQ0KLSAgICBMaW5lQ2FwIEdldERhc2hDYXAoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBMaW5lQ2FwIGRhc2hDYXA7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBlbkRhc2hDYXAobmF0aXZlUGVuLCAmZGFzaENhcCkpOw0KLQ0KLSAgICAgICAgcmV0dXJuIGRhc2hDYXA7DQotICAgIH0NCi0gICAgI2VuZGlmIC8vIERDUl9VU0VfTkVXXzE5NzgxOQ0KLQ0KLQ0KLSAgICAvLyBTZXQvZ2V0IGxpbmUgam9pbg0KLQ0KLSAgICBTdGF0dXMgU2V0TGluZUpvaW4oSU4gTGluZUpvaW4gbGluZUpvaW4pDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBlbkxpbmVKb2luKG5hdGl2ZVBlbiwgbGluZUpvaW4pKTsNCi0gICAgfQ0KLQ0KLSAgICBMaW5lSm9pbiBHZXRMaW5lSm9pbigpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIExpbmVKb2luIGxpbmVKb2luOw0KLSAgICAgICAgDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBlbkxpbmVKb2luKG5hdGl2ZVBlbiwgJmxpbmVKb2luKSk7DQotICAgICAgICANCi0gICAgICAgIHJldHVybiBsaW5lSm9pbjsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0Q3VzdG9tU3RhcnRDYXAoSU4gY29uc3QgQ3VzdG9tTGluZUNhcCogY3VzdG9tQ2FwKQ0KLSAgICB7DQotICAgICAgICBHcEN1c3RvbUxpbmVDYXAqIG5hdGl2ZUNhcCA9IE5VTEw7DQotICAgICAgICBpZihjdXN0b21DYXApDQotICAgICAgICAgICAgbmF0aXZlQ2FwID0gY3VzdG9tQ2FwLT5uYXRpdmVDYXA7DQotDQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQZW5DdXN0b21TdGFydENhcChuYXRpdmVQZW4sIG5hdGl2ZUNhcCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBHZXRDdXN0b21TdGFydENhcChPVVQgQ3VzdG9tTGluZUNhcCogY3VzdG9tQ2FwKSBjb25zdA0KLSAgICB7DQotICAgICAgICBpZighY3VzdG9tQ2FwKQ0KLSAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7DQotDQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQZW5DdXN0b21TdGFydENhcChuYXRpdmVQZW4sICYoY3VzdG9tQ2FwLT5uYXRpdmVDYXApKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFNldEN1c3RvbUVuZENhcChJTiBjb25zdCBDdXN0b21MaW5lQ2FwKiBjdXN0b21DYXApDQotICAgIHsNCi0gICAgICAgIEdwQ3VzdG9tTGluZUNhcCogbmF0aXZlQ2FwID0gTlVMTDsNCi0gICAgICAgIGlmKGN1c3RvbUNhcCkNCi0gICAgICAgICAgICBuYXRpdmVDYXAgPSBjdXN0b21DYXAtPm5hdGl2ZUNhcDsNCi0NCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBlbkN1c3RvbUVuZENhcChuYXRpdmVQZW4sIG5hdGl2ZUNhcCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBHZXRDdXN0b21FbmRDYXAoT1VUIEN1c3RvbUxpbmVDYXAqIGN1c3RvbUNhcCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgaWYoIWN1c3RvbUNhcCkNCi0gICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKEludmFsaWRQYXJhbWV0ZXIpOw0KLQ0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGVuQ3VzdG9tRW5kQ2FwKG5hdGl2ZVBlbiwgJihjdXN0b21DYXAtPm5hdGl2ZUNhcCkpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0TWl0ZXJMaW1pdChJTiBSRUFMIG1pdGVyTGltaXQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBlbk1pdGVyTGltaXQobmF0aXZlUGVuLCBtaXRlckxpbWl0KSk7DQotICAgIH0NCi0NCi0gICAgUkVBTCBHZXRNaXRlckxpbWl0KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgUkVBTCBtaXRlckxpbWl0Ow0KLQ0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQZW5NaXRlckxpbWl0KG5hdGl2ZVBlbiwgJm1pdGVyTGltaXQpKTsNCi0NCi0gICAgICAgIHJldHVybiBtaXRlckxpbWl0Ow0KLSAgICB9DQotDQotICAgIC8vIFNldC9nZXQgcGVuIG1vZGUNCi0gICAgU3RhdHVzIFNldEFsaWdubWVudChJTiBQZW5BbGlnbm1lbnQgcGVuQWxpZ25tZW50KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQZW5Nb2RlKG5hdGl2ZVBlbiwgcGVuQWxpZ25tZW50KSk7DQotICAgIH0NCi0NCi0gICAgUGVuQWxpZ25tZW50IEdldEFsaWdubWVudCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIFBlbkFsaWdubWVudCBwZW5BbGlnbm1lbnQ7DQotICAgICAgICANCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGVuTW9kZShuYXRpdmVQZW4sICZwZW5BbGlnbm1lbnQpKTsNCi0gICAgICAgIA0KLSAgICAgICAgcmV0dXJuIHBlbkFsaWdubWVudDsNCi0gICAgfQ0KLSAgICANCi0gICAgLy8gU2V0L2dldCBwZW4gdHJhbnNmb3JtDQotICAgIFN0YXR1cyBTZXRUcmFuc2Zvcm0oSU4gY29uc3QgTWF0cml4KiBtYXRyaXgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBlblRyYW5zZm9ybShuYXRpdmVQZW4sIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+bmF0aXZlTWF0cml4KSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIEdldFRyYW5zZm9ybShPVVQgTWF0cml4KiBtYXRyaXgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBlblRyYW5zZm9ybShuYXRpdmVQZW4sIG1hdHJpeC0+bmF0aXZlTWF0cml4KSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFJlc2V0VHJhbnNmb3JtKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUmVzZXRQZW5UcmFuc2Zvcm0obmF0aXZlUGVuKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIE11bHRpcGx5VHJhbnNmb3JtKElOIGNvbnN0IE1hdHJpeCogbWF0cml4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gTWF0cml4T3JkZXIgb3JkZXIgPSBNYXRyaXhPcmRlclByZXBlbmQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcE11bHRpcGx5UGVuVHJhbnNmb3JtKG5hdGl2ZVBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+bmF0aXZlTWF0cml4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXIpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgVHJhbnNsYXRlVHJhbnNmb3JtKElOIFJFQUwgZHgsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgZHksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gTWF0cml4T3JkZXIgb3JkZXIgPSBNYXRyaXhPcmRlclByZXBlbmQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFRyYW5zbGF0ZVBlblRyYW5zZm9ybShuYXRpdmVQZW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHgsIGR5LCBvcmRlcikpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTY2FsZVRyYW5zZm9ybShJTiBSRUFMIHN4LCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgc3ksDQotICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2NhbGVQZW5UcmFuc2Zvcm0obmF0aXZlUGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeCwgc3ksIG9yZGVyKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFJvdGF0ZVRyYW5zZm9ybShJTiBSRUFMIGFuZ2xlLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUm90YXRlUGVuVHJhbnNmb3JtKG5hdGl2ZVBlbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlLCBvcmRlcikpOw0KLSAgICB9DQotDQotICAgIFBlblR5cGUgR2V0UGVuVHlwZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgUGVuVHlwZSB0eXBlOw0KLSAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBlbkZpbGxUeXBlKG5hdGl2ZVBlbiwgJnR5cGUpKTsNCi0NCi0gICAgICAgcmV0dXJuIHR5cGU7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFNldENvbG9yKElOIGNvbnN0IENvbG9yJiBjb2xvcikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGVuQ29sb3IobmF0aXZlUGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuR2V0VmFsdWUoKSkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTZXRCcnVzaChJTiBjb25zdCBCcnVzaCogYnJ1c2gpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBlbkJydXNoRmlsbChuYXRpdmVQZW4sIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJydXNoLT5uYXRpdmVCcnVzaCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBHZXRDb2xvcihPVVQgQ29sb3IqIGNvbG9yKSBjb25zdA0KLSAgICB7DQotICAgICAgICBpZiAoY29sb3IgPT0gTlVMTCkgDQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhJbnZhbGlkUGFyYW1ldGVyKTsNCi0gICAgICAgIH0NCi0gICAgICAgIA0KLSAgICAgICAgUGVuVHlwZSB0eXBlID0gR2V0UGVuVHlwZSgpOw0KLQ0KLSAgICAgICAgaWYgKHR5cGUgIT0gUGVuVHlwZVNvbGlkQ29sb3IpIA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVybiBXcm9uZ1N0YXRlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgDQotICAgICAgICBBUkdCIGFyZ2I7DQotICAgICAgICANCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGVuQ29sb3IobmF0aXZlUGVuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXJnYikpOw0KLSAgICAgICAgaWYgKGxhc3RSZXN1bHQgPT0gT2spDQotICAgICAgICB7DQotICAgICAgICAgICAgY29sb3ItPlNldFZhbHVlKGFyZ2IpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgDQotICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDsNCi0gICAgfQ0KLQ0KLSAgICBCcnVzaCogR2V0QnJ1c2goKSBjb25zdA0KLSAgICB7DQotICAgICAgIFBlblR5cGUgdHlwZSA9IEdldFBlblR5cGUoKTsNCi0NCi0gICAgICAgQnJ1c2gqIGJydXNoID0gTlVMTDsNCi0NCi0gICAgICAgc3dpdGNoKHR5cGUpDQotICAgICAgIHsNCi0gICAgICAgY2FzZSBQZW5UeXBlU29saWRDb2xvcjoNCi0gICAgICAgICAgIGJydXNoID0gbmV3IFNvbGlkQnJ1c2goKTsNCi0gICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICBjYXNlIFBlblR5cGVIYXRjaEZpbGw6DQotICAgICAgICAgICBicnVzaCA9IG5ldyBIYXRjaEJydXNoKCk7DQotICAgICAgICAgICBicmVhazsNCi0NCi0gICAgICAgY2FzZSBQZW5UeXBlVGV4dHVyZUZpbGw6DQotICAgICAgICAgICBicnVzaCA9IG5ldyBUZXh0dXJlQnJ1c2goKTsNCi0gICAgICAgICAgIGJyZWFrOw0KLQ0KLSAgICAgICBjYXNlIFBlblR5cGVQYXRoR3JhZGllbnQ6DQotICAgICAgICAgICBicnVzaCA9IG5ldyBCcnVzaCgpOw0KLSAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgIGNhc2UgUGVuVHlwZUxpbmVhckdyYWRpZW50Og0KLSAgICAgICAgICAgYnJ1c2ggPSBuZXcgTGluZWFyR3JhZGllbnRCcnVzaCgpOw0KLSAgICAgICAgICAgYnJlYWs7DQotDQotICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICBicmVhazsNCi0gICAgICAgfQ0KLQ0KLSAgICAgICBpZihicnVzaCkNCi0gICAgICAgew0KLSAgICAgICAgICAgR3BCcnVzaCogbmF0aXZlQnJ1c2g7DQotDQotICAgICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBlbkJydXNoRmlsbChuYXRpdmVQZW4sICZuYXRpdmVCcnVzaCkpOw0KLSAgICAgICAgICAgYnJ1c2gtPlNldE5hdGl2ZUJydXNoKG5hdGl2ZUJydXNoKTsNCi0gICAgICAgfQ0KLQ0KLSAgICAgICByZXR1cm4gYnJ1c2g7DQotICAgIH0NCi0NCi0gICAgRGFzaFN0eWxlIEdldERhc2hTdHlsZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIERhc2hTdHlsZSBkYXNoU3R5bGU7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBlbkRhc2hTdHlsZShuYXRpdmVQZW4sICZkYXNoU3R5bGUpKTsNCi0NCi0gICAgICAgIHJldHVybiBkYXNoU3R5bGU7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFNldERhc2hTdHlsZShJTiBEYXNoU3R5bGUgZGFzaFN0eWxlKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQZW5EYXNoU3R5bGUobmF0aXZlUGVuLCBkYXNoU3R5bGUpKTsNCi0gICAgfQ0KLQ0KLSAgICBSRUFMIEdldERhc2hPZmZzZXQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBSRUFMIGRhc2hPZmZzZXQ7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBlbkRhc2hPZmZzZXQobmF0aXZlUGVuLCAmZGFzaE9mZnNldCkpOw0KLQ0KLSAgICAgICAgcmV0dXJuIGRhc2hPZmZzZXQ7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFNldERhc2hPZmZzZXQoSU4gUkVBTCBkYXNoT2Zmc2V0KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQZW5EYXNoT2Zmc2V0KG5hdGl2ZVBlbiwgZGFzaE9mZnNldCkpOw0KLSAgICB9DQotICAgIA0KLSAgICBTdGF0dXMgU2V0RGFzaFBhdHRlcm4oSU4gY29uc3QgUkVBTCogZGFzaEFycmF5LCBJTiBJTlQgY291bnQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBlbkRhc2hBcnJheShuYXRpdmVQZW4sIGRhc2hBcnJheSwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7DQotICAgIH0NCi0gICAgDQotICAgIElOVCBHZXREYXNoUGF0dGVybkNvdW50KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgSU5UIGNvdW50ID0gMDsNCi0gICAgICAgIA0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQZW5EYXNoQ291bnQobmF0aXZlUGVuLCAmY291bnQpKTsNCi0gICAgICAgIA0KLSAgICAgICAgcmV0dXJuIGNvdW50Ow0KLSAgICB9DQotDQotICAgIFN0YXR1cyBHZXREYXNoUGF0dGVybihPVVQgUkVBTCogZGFzaEFycmF5LCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgaWYgKGRhc2hBcnJheSA9PSBOVUxMIHx8IGNvdW50IDw9IDApDQotICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhJbnZhbGlkUGFyYW1ldGVyKTsgDQotICAgICAgICANCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBlbkRhc2hBcnJheShuYXRpdmVQZW4sIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhc2hBcnJheSwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0Q29tcG91bmRBcnJheShJTiBjb25zdCBSRUFMKiBjb21wb3VuZEFycmF5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBlbkNvbXBvdW5kQXJyYXkobmF0aXZlUGVuLCBjb21wb3VuZEFycmF5LCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsNCi0gICAgfQ0KLQ0KLSAgICBJTlQgR2V0Q29tcG91bmRBcnJheUNvdW50KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgSU5UIGNvdW50ID0gMDsNCi0gICAgICAgIA0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQZW5Db21wb3VuZENvdW50KG5hdGl2ZVBlbiwgJmNvdW50KSk7DQotICAgICAgICANCi0gICAgICAgIHJldHVybiBjb3VudDsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgR2V0Q29tcG91bmRBcnJheShPVVQgUkVBTCogY29tcG91bmRBcnJheSwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgaWYgKGNvbXBvdW5kQXJyYXkgPT0gTlVMTCB8fCBjb3VudCA8PSAwKQ0KLSAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7IA0KLSAgICAgICAgDQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQZW5Db21wb3VuZEFycmF5KG5hdGl2ZVBlbiwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvdW5kQXJyYXksIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBHZXRMYXN0U3RhdHVzKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgU3RhdHVzIGxhc3RTdGF0dXMgPSBsYXN0UmVzdWx0Ow0KLSAgICAgICAgbGFzdFJlc3VsdCA9IE9rOw0KLQ0KLSAgICAgICAgcmV0dXJuIGxhc3RTdGF0dXM7DQotICAgIH0NCi0NCi1wcm90ZWN0ZWQ6DQotDQotI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMg0KLQ0KLXByaXZhdGU6DQotICAgIFBlbihjb25zdCBQZW4gJik7DQotICAgIFBlbiYgb3BlcmF0b3I9KGNvbnN0IFBlbiAmKTsNCi1wcm90ZWN0ZWQ6DQotDQotI2Vsc2UNCi0NCi0gICAgUGVuKGNvbnN0IFBlbiYgcGVuKQ0KLSAgICB7DQotICAgICAgICBwZW47DQotICAgICAgICBTZXRTdGF0dXMoTm90SW1wbGVtZW50ZWQpOw0KLSAgICAgICAgU2V0TmF0aXZlUGVuKE5VTEwpOw0KLSAgICB9DQotDQotICAgIFBlbiYgb3BlcmF0b3I9KGNvbnN0IFBlbiYgcGVuKQ0KLSAgICB7DQotICAgICAgICBwZW47DQotICAgICAgICBTZXRTdGF0dXMoTm90SW1wbGVtZW50ZWQpOw0KLSAgICAgICAgcmV0dXJuICp0aGlzOw0KLSAgICB9DQotDQotI2VuZGlmDQotDQotICAgIFBlbihHcFBlbiogbmF0aXZlUGVuLCBTdGF0dXMgc3RhdHVzKQ0KLSAgICB7DQotICAgICAgICBsYXN0UmVzdWx0ID0gc3RhdHVzOw0KLSAgICAgICAgU2V0TmF0aXZlUGVuKG5hdGl2ZVBlbik7DQotICAgIH0NCi0NCi0gICAgVk9JRCBTZXROYXRpdmVQZW4oR3BQZW4qIG5hdGl2ZVBlbikNCi0gICAgew0KLSAgICAgICAgdGhpcy0+bmF0aXZlUGVuID0gbmF0aXZlUGVuOw0KLSAgICB9DQotICAgIA0KLSAgICBTdGF0dXMgU2V0U3RhdHVzKFN0YXR1cyBzdGF0dXMpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIGlmIChzdGF0dXMgIT0gT2spDQotICAgICAgICAgICAgcmV0dXJuIChsYXN0UmVzdWx0ID0gc3RhdHVzKTsNCi0gICAgICAgIGVsc2UgDQotICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsNCi0gICAgfQ0KLQ0KLXByb3RlY3RlZDoNCi0gICAgR3BQZW4qIG5hdGl2ZVBlbjsNCi0gICAgbXV0YWJsZSBTdGF0dXMgbGFzdFJlc3VsdDsNCi19Ow0KLQ0KLSNlbmRpZg0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyogCisqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqIE1vZHVsZSBOYW1lOgorKgorKiAgIEdkaXBsdXNQZW4uaAorKgorKiBBYnN0cmFjdDoKKyoKKyogICBQZW4gQVBJIHJlbGF0ZWQgZGVjbGFyYXRpb25zCisqCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9HRElQTFVTUEVOX0gKKyNkZWZpbmUgX0dESVBMVVNQRU5fSAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBjbGFzcyBmb3IgdmFyaW91cyBwZW4gdHlwZXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgUGVuIDogcHVibGljIEdkaXBsdXNCYXNlCit7CitwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzUGF0aDsKKyAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3M7CisKKyAgICAvLyBhYnN0cmFjdCBDbG9uZSgpIGNhbid0IGJlIGltcGxlbWVudGVkIGhlcmUgYmVjYXVzZSBpdCBjYW4ndAorICAgIC8vIG5ldyBhbiBvYmplY3Qgd2l0aCBwdXJlIHZpcnR1YWwgZnVuY3Rpb25zCisKKyAgICAvLyBDb25zdHJ1Y3RvcnMKKworICAgIFBlbihJTiBjb25zdCBDb2xvciYgY29sb3IsIAorICAgICAgICBJTiBSRUFMIHdpZHRoID0gMS4wZikKKyAgICB7CisgICAgICAgIFVuaXQgdW5pdCA9IFVuaXRXb3JsZDsKKyAgICAgICAgbmF0aXZlUGVuID0gTlVMTDsKKyAgICAgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVQZW4xKGNvbG9yLkdldFZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgdW5pdCwgJm5hdGl2ZVBlbik7CisgICAgfQorCisgICAgUGVuKElOIGNvbnN0IEJydXNoKiBicnVzaCwgCisgICAgICAgIElOIFJFQUwgd2lkdGggPSAxLjBmKQorICAgIHsKKyAgICAgICAgVW5pdCB1bml0ID0gVW5pdFdvcmxkOworICAgICAgICBuYXRpdmVQZW4gPSBOVUxMOworICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZVBlbjIoYnJ1c2gtPm5hdGl2ZUJydXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIHVuaXQsICZuYXRpdmVQZW4pOworICAgIH0KKworICAgIH5QZW4oKQorICAgIHsKKyAgICAgICAgRGxsRXhwb3J0czo6R2RpcERlbGV0ZVBlbihuYXRpdmVQZW4pOworICAgIH0KKworICAgIFBlbiogQ2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgR3BQZW4gKmNsb25lUGVuID0gTlVMTDsKKworICAgICAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENsb25lUGVuKG5hdGl2ZVBlbiwgJmNsb25lUGVuKTsKKyAgIAorICAgICAgICByZXR1cm4gbmV3IFBlbihjbG9uZVBlbiwgbGFzdFJlc3VsdCk7CisgICAgfQorCisgICAgU3RhdHVzIFNldFdpZHRoKElOIFJFQUwgd2lkdGgpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQZW5XaWR0aChuYXRpdmVQZW4sIHdpZHRoKSk7CisgICAgfQorCisgICAgUkVBTCBHZXRXaWR0aCgpIGNvbnN0CisgICAgeworICAgICAgICBSRUFMIHdpZHRoOworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGVuV2lkdGgobmF0aXZlUGVuLCAmd2lkdGgpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB3aWR0aDsKKyAgICB9CisgICAgCisgICAgLy8gU2V0L2dldCBsaW5lIGNhcHM6IHN0YXJ0LCBlbmQsIGFuZCBkYXNoCisKKyAgICAvLyBMaW5lIGNhcCBhbmQgam9pbiBBUElzIGJ5IHVzaW5nIExpbmVDYXAgYW5kIExpbmVKb2luIGVudW1zLgorCisgICAgI2lmZGVmIERDUl9VU0VfTkVXXzE5NzgxOQorICAgIFN0YXR1cyBTZXRMaW5lQ2FwKElOIExpbmVDYXAgc3RhcnRDYXAsIAorICAgICAgICAgICAgICAgICAgICAgIElOIExpbmVDYXAgZW5kQ2FwLCAKKyAgICAgICAgICAgICAgICAgICAgICBJTiBEYXNoQ2FwIGRhc2hDYXApCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQZW5MaW5lQ2FwMTk3ODE5KG5hdGl2ZVBlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q2FwLCBlbmRDYXAsIGRhc2hDYXApKTsKKyAgICB9CisgICAgI2Vsc2UKKyAgICBTdGF0dXMgU2V0TGluZUNhcChJTiBMaW5lQ2FwIHN0YXJ0Q2FwLCAKKyAgICAgICAgICAgICAgICAgICAgICBJTiBMaW5lQ2FwIGVuZENhcCwgCisgICAgICAgICAgICAgICAgICAgICAgSU4gTGluZUNhcCBkYXNoQ2FwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGVuTGluZUNhcChuYXRpdmVQZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydENhcCwgZW5kQ2FwLCBkYXNoQ2FwKSk7CisgICAgfQorICAgICNlbmRpZiAvLyBEQ1JfVVNFX05FV18xOTc4MTkKKworICAgIFN0YXR1cyBTZXRTdGFydENhcChJTiBMaW5lQ2FwIHN0YXJ0Q2FwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGVuU3RhcnRDYXAobmF0aXZlUGVuLCBzdGFydENhcCkpOworICAgIH0KKworICAgIFN0YXR1cyBTZXRFbmRDYXAoSU4gTGluZUNhcCBlbmRDYXApCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQZW5FbmRDYXAobmF0aXZlUGVuLCBlbmRDYXApKTsKKyAgICB9CisKKyAgICAjaWZkZWYgRENSX1VTRV9ORVdfMTk3ODE5CisgICAgU3RhdHVzIFNldERhc2hDYXAoSU4gRGFzaENhcCBkYXNoQ2FwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGVuRGFzaENhcDE5NzgxOShuYXRpdmVQZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhc2hDYXApKTsKKyAgICB9CisgICAgI2Vsc2UKKyAgICBTdGF0dXMgU2V0RGFzaENhcChJTiBMaW5lQ2FwIGRhc2hDYXApCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQZW5EYXNoQ2FwKG5hdGl2ZVBlbiwgZGFzaENhcCkpOworICAgIH0KKyAgICAjZW5kaWYgLy8gRENSX1VTRV9ORVdfMTk3ODE5CisKKyAgICBMaW5lQ2FwIEdldFN0YXJ0Q2FwKCkgY29uc3QKKyAgICB7CisgICAgICAgIExpbmVDYXAgc3RhcnRDYXA7CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQZW5TdGFydENhcChuYXRpdmVQZW4sICZzdGFydENhcCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHN0YXJ0Q2FwOworICAgIH0KKworICAgIExpbmVDYXAgR2V0RW5kQ2FwKCkgY29uc3QKKyAgICB7CisgICAgICAgIExpbmVDYXAgZW5kQ2FwOworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGVuRW5kQ2FwKG5hdGl2ZVBlbiwgJmVuZENhcCkpOworCisgICAgICAgIHJldHVybiBlbmRDYXA7CisgICAgfQorCisgICAgI2lmZGVmIERDUl9VU0VfTkVXXzE5NzgxOQorICAgIERhc2hDYXAgR2V0RGFzaENhcCgpIGNvbnN0CisgICAgeworICAgICAgICBEYXNoQ2FwIGRhc2hDYXA7CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQZW5EYXNoQ2FwMTk3ODE5KG5hdGl2ZVBlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGFzaENhcCkpOworCisgICAgICAgIHJldHVybiBkYXNoQ2FwOworICAgIH0KKyAgICAjZWxzZQorICAgIExpbmVDYXAgR2V0RGFzaENhcCgpIGNvbnN0CisgICAgeworICAgICAgICBMaW5lQ2FwIGRhc2hDYXA7CisKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQZW5EYXNoQ2FwKG5hdGl2ZVBlbiwgJmRhc2hDYXApKTsKKworICAgICAgICByZXR1cm4gZGFzaENhcDsKKyAgICB9CisgICAgI2VuZGlmIC8vIERDUl9VU0VfTkVXXzE5NzgxOQorCisKKyAgICAvLyBTZXQvZ2V0IGxpbmUgam9pbgorCisgICAgU3RhdHVzIFNldExpbmVKb2luKElOIExpbmVKb2luIGxpbmVKb2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGVuTGluZUpvaW4obmF0aXZlUGVuLCBsaW5lSm9pbikpOworICAgIH0KKworICAgIExpbmVKb2luIEdldExpbmVKb2luKCkgY29uc3QKKyAgICB7CisgICAgICAgIExpbmVKb2luIGxpbmVKb2luOworICAgICAgICAKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQZW5MaW5lSm9pbihuYXRpdmVQZW4sICZsaW5lSm9pbikpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGxpbmVKb2luOworICAgIH0KKworICAgIFN0YXR1cyBTZXRDdXN0b21TdGFydENhcChJTiBjb25zdCBDdXN0b21MaW5lQ2FwKiBjdXN0b21DYXApCisgICAgeworICAgICAgICBHcEN1c3RvbUxpbmVDYXAqIG5hdGl2ZUNhcCA9IE5VTEw7CisgICAgICAgIGlmKGN1c3RvbUNhcCkKKyAgICAgICAgICAgIG5hdGl2ZUNhcCA9IGN1c3RvbUNhcC0+bmF0aXZlQ2FwOworCisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBlbkN1c3RvbVN0YXJ0Q2FwKG5hdGl2ZVBlbiwgbmF0aXZlQ2FwKSk7CisgICAgfQorCisgICAgU3RhdHVzIEdldEN1c3RvbVN0YXJ0Q2FwKE9VVCBDdXN0b21MaW5lQ2FwKiBjdXN0b21DYXApIGNvbnN0CisgICAgeworICAgICAgICBpZighY3VzdG9tQ2FwKQorICAgICAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhJbnZhbGlkUGFyYW1ldGVyKTsKKworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQZW5DdXN0b21TdGFydENhcChuYXRpdmVQZW4sICYoY3VzdG9tQ2FwLT5uYXRpdmVDYXApKSk7CisgICAgfQorCisgICAgU3RhdHVzIFNldEN1c3RvbUVuZENhcChJTiBjb25zdCBDdXN0b21MaW5lQ2FwKiBjdXN0b21DYXApCisgICAgeworICAgICAgICBHcEN1c3RvbUxpbmVDYXAqIG5hdGl2ZUNhcCA9IE5VTEw7CisgICAgICAgIGlmKGN1c3RvbUNhcCkKKyAgICAgICAgICAgIG5hdGl2ZUNhcCA9IGN1c3RvbUNhcC0+bmF0aXZlQ2FwOworCisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBlbkN1c3RvbUVuZENhcChuYXRpdmVQZW4sIG5hdGl2ZUNhcCkpOworICAgIH0KKworICAgIFN0YXR1cyBHZXRDdXN0b21FbmRDYXAoT1VUIEN1c3RvbUxpbmVDYXAqIGN1c3RvbUNhcCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmKCFjdXN0b21DYXApCisgICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKEludmFsaWRQYXJhbWV0ZXIpOworCisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBlbkN1c3RvbUVuZENhcChuYXRpdmVQZW4sICYoY3VzdG9tQ2FwLT5uYXRpdmVDYXApKSk7CisgICAgfQorCisgICAgU3RhdHVzIFNldE1pdGVyTGltaXQoSU4gUkVBTCBtaXRlckxpbWl0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGVuTWl0ZXJMaW1pdChuYXRpdmVQZW4sIG1pdGVyTGltaXQpKTsKKyAgICB9CisKKyAgICBSRUFMIEdldE1pdGVyTGltaXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgUkVBTCBtaXRlckxpbWl0OworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGVuTWl0ZXJMaW1pdChuYXRpdmVQZW4sICZtaXRlckxpbWl0KSk7CisKKyAgICAgICAgcmV0dXJuIG1pdGVyTGltaXQ7CisgICAgfQorCisgICAgLy8gU2V0L2dldCBwZW4gbW9kZQorICAgIFN0YXR1cyBTZXRBbGlnbm1lbnQoSU4gUGVuQWxpZ25tZW50IHBlbkFsaWdubWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBlbk1vZGUobmF0aXZlUGVuLCBwZW5BbGlnbm1lbnQpKTsKKyAgICB9CisKKyAgICBQZW5BbGlnbm1lbnQgR2V0QWxpZ25tZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIFBlbkFsaWdubWVudCBwZW5BbGlnbm1lbnQ7CisgICAgICAgIAorICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBlbk1vZGUobmF0aXZlUGVuLCAmcGVuQWxpZ25tZW50KSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcGVuQWxpZ25tZW50OworICAgIH0KKyAgICAKKyAgICAvLyBTZXQvZ2V0IHBlbiB0cmFuc2Zvcm0KKyAgICBTdGF0dXMgU2V0VHJhbnNmb3JtKElOIGNvbnN0IE1hdHJpeCogbWF0cml4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGVuVHJhbnNmb3JtKG5hdGl2ZVBlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgtPm5hdGl2ZU1hdHJpeCkpOworICAgIH0KKworICAgIFN0YXR1cyBHZXRUcmFuc2Zvcm0oT1VUIE1hdHJpeCogbWF0cml4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGVuVHJhbnNmb3JtKG5hdGl2ZVBlbiwgbWF0cml4LT5uYXRpdmVNYXRyaXgpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgUmVzZXRUcmFuc2Zvcm0oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUmVzZXRQZW5UcmFuc2Zvcm0obmF0aXZlUGVuKSk7CisgICAgfQorCisgICAgU3RhdHVzIE11bHRpcGx5VHJhbnNmb3JtKElOIGNvbnN0IE1hdHJpeCogbWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcE11bHRpcGx5UGVuVHJhbnNmb3JtKG5hdGl2ZVBlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT5uYXRpdmVNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyKSk7CisgICAgfQorCisgICAgU3RhdHVzIFRyYW5zbGF0ZVRyYW5zZm9ybShJTiBSRUFMIGR4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIFJFQUwgZHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFRyYW5zbGF0ZVBlblRyYW5zZm9ybShuYXRpdmVQZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkeCwgZHksIG9yZGVyKSk7CisgICAgfQorCisgICAgU3RhdHVzIFNjYWxlVHJhbnNmb3JtKElOIFJFQUwgc3gsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBSRUFMIHN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBNYXRyaXhPcmRlciBvcmRlciA9IE1hdHJpeE9yZGVyUHJlcGVuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNjYWxlUGVuVHJhbnNmb3JtKG5hdGl2ZVBlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeCwgc3ksIG9yZGVyKSk7CisgICAgfQorCisgICAgU3RhdHVzIFJvdGF0ZVRyYW5zZm9ybShJTiBSRUFMIGFuZ2xlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIE1hdHJpeE9yZGVyIG9yZGVyID0gTWF0cml4T3JkZXJQcmVwZW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwUm90YXRlUGVuVHJhbnNmb3JtKG5hdGl2ZVBlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUsIG9yZGVyKSk7CisgICAgfQorCisgICAgUGVuVHlwZSBHZXRQZW5UeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgUGVuVHlwZSB0eXBlOworICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGVuRmlsbFR5cGUobmF0aXZlUGVuLCAmdHlwZSkpOworCisgICAgICAgcmV0dXJuIHR5cGU7CisgICAgfQorCisgICAgU3RhdHVzIFNldENvbG9yKElOIGNvbnN0IENvbG9yJiBjb2xvcikKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBlbkNvbG9yKG5hdGl2ZVBlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuR2V0VmFsdWUoKSkpOworICAgIH0KKworICAgIFN0YXR1cyBTZXRCcnVzaChJTiBjb25zdCBCcnVzaCogYnJ1c2gpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRQZW5CcnVzaEZpbGwobmF0aXZlUGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJydXNoLT5uYXRpdmVCcnVzaCkpOworICAgIH0KKworICAgIFN0YXR1cyBHZXRDb2xvcihPVVQgQ29sb3IqIGNvbG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGNvbG9yID09IE5VTEwpIAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKEludmFsaWRQYXJhbWV0ZXIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBQZW5UeXBlIHR5cGUgPSBHZXRQZW5UeXBlKCk7CisKKyAgICAgICAgaWYgKHR5cGUgIT0gUGVuVHlwZVNvbGlkQ29sb3IpIAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gV3JvbmdTdGF0ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVJHQiBhcmdiOworICAgICAgICAKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQZW5Db2xvcihuYXRpdmVQZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFyZ2IpKTsKKyAgICAgICAgaWYgKGxhc3RSZXN1bHQgPT0gT2spCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbG9yLT5TZXRWYWx1ZShhcmdiKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7CisgICAgfQorCisgICAgQnJ1c2gqIEdldEJydXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgUGVuVHlwZSB0eXBlID0gR2V0UGVuVHlwZSgpOworCisgICAgICAgQnJ1c2gqIGJydXNoID0gTlVMTDsKKworICAgICAgIHN3aXRjaCh0eXBlKQorICAgICAgIHsKKyAgICAgICBjYXNlIFBlblR5cGVTb2xpZENvbG9yOgorICAgICAgICAgICBicnVzaCA9IG5ldyBTb2xpZEJydXNoKCk7CisgICAgICAgICAgIGJyZWFrOworCisgICAgICAgY2FzZSBQZW5UeXBlSGF0Y2hGaWxsOgorICAgICAgICAgICBicnVzaCA9IG5ldyBIYXRjaEJydXNoKCk7CisgICAgICAgICAgIGJyZWFrOworCisgICAgICAgY2FzZSBQZW5UeXBlVGV4dHVyZUZpbGw6CisgICAgICAgICAgIGJydXNoID0gbmV3IFRleHR1cmVCcnVzaCgpOworICAgICAgICAgICBicmVhazsKKworICAgICAgIGNhc2UgUGVuVHlwZVBhdGhHcmFkaWVudDoKKyAgICAgICAgICAgYnJ1c2ggPSBuZXcgQnJ1c2goKTsKKyAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICBjYXNlIFBlblR5cGVMaW5lYXJHcmFkaWVudDoKKyAgICAgICAgICAgYnJ1c2ggPSBuZXcgTGluZWFyR3JhZGllbnRCcnVzaCgpOworICAgICAgICAgICBicmVhazsKKworICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgIGJyZWFrOworICAgICAgIH0KKworICAgICAgIGlmKGJydXNoKQorICAgICAgIHsKKyAgICAgICAgICAgR3BCcnVzaCogbmF0aXZlQnJ1c2g7CisKKyAgICAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRQZW5CcnVzaEZpbGwobmF0aXZlUGVuLCAmbmF0aXZlQnJ1c2gpKTsKKyAgICAgICAgICAgYnJ1c2gtPlNldE5hdGl2ZUJydXNoKG5hdGl2ZUJydXNoKTsKKyAgICAgICB9CisKKyAgICAgICByZXR1cm4gYnJ1c2g7CisgICAgfQorCisgICAgRGFzaFN0eWxlIEdldERhc2hTdHlsZSgpIGNvbnN0CisgICAgeworICAgICAgICBEYXNoU3R5bGUgZGFzaFN0eWxlOworCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGVuRGFzaFN0eWxlKG5hdGl2ZVBlbiwgJmRhc2hTdHlsZSkpOworCisgICAgICAgIHJldHVybiBkYXNoU3R5bGU7CisgICAgfQorCisgICAgU3RhdHVzIFNldERhc2hTdHlsZShJTiBEYXNoU3R5bGUgZGFzaFN0eWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0UGVuRGFzaFN0eWxlKG5hdGl2ZVBlbiwgZGFzaFN0eWxlKSk7CisgICAgfQorCisgICAgUkVBTCBHZXREYXNoT2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIFJFQUwgZGFzaE9mZnNldDsKKworICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBlbkRhc2hPZmZzZXQobmF0aXZlUGVuLCAmZGFzaE9mZnNldCkpOworCisgICAgICAgIHJldHVybiBkYXNoT2Zmc2V0OworICAgIH0KKworICAgIFN0YXR1cyBTZXREYXNoT2Zmc2V0KElOIFJFQUwgZGFzaE9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBlbkRhc2hPZmZzZXQobmF0aXZlUGVuLCBkYXNoT2Zmc2V0KSk7CisgICAgfQorICAgIAorICAgIFN0YXR1cyBTZXREYXNoUGF0dGVybihJTiBjb25zdCBSRUFMKiBkYXNoQXJyYXksIElOIElOVCBjb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBlbkRhc2hBcnJheShuYXRpdmVQZW4sIGRhc2hBcnJheSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsKKyAgICB9CisgICAgCisgICAgSU5UIEdldERhc2hQYXR0ZXJuQ291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5UIGNvdW50ID0gMDsKKyAgICAgICAgCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGVuRGFzaENvdW50KG5hdGl2ZVBlbiwgJmNvdW50KSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gY291bnQ7CisgICAgfQorCisgICAgU3RhdHVzIEdldERhc2hQYXR0ZXJuKE9VVCBSRUFMKiBkYXNoQXJyYXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoZGFzaEFycmF5ID09IE5VTEwgfHwgY291bnQgPD0gMCkKKyAgICAgICAgICAgIHJldHVybiBTZXRTdGF0dXMoSW52YWxpZFBhcmFtZXRlcik7IAorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGVuRGFzaEFycmF5KG5hdGl2ZVBlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXNoQXJyYXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0Q29tcG91bmRBcnJheShJTiBjb25zdCBSRUFMKiBjb21wb3VuZEFycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIElOVCBjb3VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFBlbkNvbXBvdW5kQXJyYXkobmF0aXZlUGVuLCBjb21wb3VuZEFycmF5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOworICAgIH0KKworICAgIElOVCBHZXRDb21wb3VuZEFycmF5Q291bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgSU5UIGNvdW50ID0gMDsKKyAgICAgICAgCisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UGVuQ29tcG91bmRDb3VudChuYXRpdmVQZW4sICZjb3VudCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNvdW50OworICAgIH0KKworICAgIFN0YXR1cyBHZXRDb21wb3VuZEFycmF5KE9VVCBSRUFMKiBjb21wb3VuZEFycmF5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBJTlQgY291bnQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoY29tcG91bmRBcnJheSA9PSBOVUxMIHx8IGNvdW50IDw9IDApCisgICAgICAgICAgICByZXR1cm4gU2V0U3RhdHVzKEludmFsaWRQYXJhbWV0ZXIpOyAKKyAgICAgICAgCisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFBlbkNvbXBvdW5kQXJyYXkobmF0aXZlUGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3VuZEFycmF5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCkpOworICAgIH0KKworICAgIFN0YXR1cyBHZXRMYXN0U3RhdHVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIFN0YXR1cyBsYXN0U3RhdHVzID0gbGFzdFJlc3VsdDsKKyAgICAgICAgbGFzdFJlc3VsdCA9IE9rOworCisgICAgICAgIHJldHVybiBsYXN0U3RhdHVzOworICAgIH0KKworcHJvdGVjdGVkOgorCisjaWZkZWYgRENSX1VTRV9ORVdfMjUwOTMyCisKK3ByaXZhdGU6CisgICAgUGVuKGNvbnN0IFBlbiAmKTsKKyAgICBQZW4mIG9wZXJhdG9yPShjb25zdCBQZW4gJik7Citwcm90ZWN0ZWQ6CisKKyNlbHNlCisKKyAgICBQZW4oY29uc3QgUGVuJiBwZW4pCisgICAgeworICAgICAgICBwZW47CisgICAgICAgIFNldFN0YXR1cyhOb3RJbXBsZW1lbnRlZCk7CisgICAgICAgIFNldE5hdGl2ZVBlbihOVUxMKTsKKyAgICB9CisKKyAgICBQZW4mIG9wZXJhdG9yPShjb25zdCBQZW4mIHBlbikKKyAgICB7CisgICAgICAgIHBlbjsKKyAgICAgICAgU2V0U3RhdHVzKE5vdEltcGxlbWVudGVkKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworI2VuZGlmCisKKyAgICBQZW4oR3BQZW4qIG5hdGl2ZVBlbiwgU3RhdHVzIHN0YXR1cykKKyAgICB7CisgICAgICAgIGxhc3RSZXN1bHQgPSBzdGF0dXM7CisgICAgICAgIFNldE5hdGl2ZVBlbihuYXRpdmVQZW4pOworICAgIH0KKworICAgIFZPSUQgU2V0TmF0aXZlUGVuKEdwUGVuKiBuYXRpdmVQZW4pCisgICAgeworICAgICAgICB0aGlzLT5uYXRpdmVQZW4gPSBuYXRpdmVQZW47CisgICAgfQorICAgIAorICAgIFN0YXR1cyBTZXRTdGF0dXMoU3RhdHVzIHN0YXR1cykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChzdGF0dXMgIT0gT2spCisgICAgICAgICAgICByZXR1cm4gKGxhc3RSZXN1bHQgPSBzdGF0dXMpOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBHcFBlbiogbmF0aXZlUGVuOworICAgIG11dGFibGUgU3RhdHVzIGxhc3RSZXN1bHQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNQaXhlbEZvcm1hdHMuaCBiL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNQaXhlbEZvcm1hdHMuaAppbmRleCBmOWRjNTk5Li42OGI3MDg0IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzUGl4ZWxGb3JtYXRzLmgKKysrIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c1BpeGVsRm9ybWF0cy5oCkBAIC0xLDIwMSArMSwyMDEgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwNCi0qDQotKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwgTWljcm9zb2Z0IENvcnAuICBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSoNCi0qIE1vZHVsZSBOYW1lOg0KLSoNCi0qICAgR2RpcGx1cyBwaXhlbCBmb3JtYXRzDQotKg0KLSogQWJzdHJhY3Q6DQotKg0KLSogICBEZWZpbml0aW9ucyBmb3IgY29sb3IgdHlwZXMsIHBhbGV0dGVzLCBwaXhlbCBmb3JtYXQgSURzLg0KLSoNCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotI2lmbmRlZiBfR0RJUExVU1BJWEVMRk9STUFUU19IDQotI2RlZmluZSBfR0RJUExVU1BJWEVMRk9STUFUU19IDQotDQotLyoNCi0gKiAzMi1iaXQgYW5kIDY0LWJpdCBBUkdCIHBpeGVsIHZhbHVlDQotICovDQotDQotdHlwZWRlZiBEV09SRCBBUkdCOw0KLXR5cGVkZWYgRFdPUkRMT05HIEFSR0I2NDsNCi0NCi0jZGVmaW5lIEFMUEhBX1NISUZUIDI0DQotI2RlZmluZSBSRURfU0hJRlQgICAxNg0KLSNkZWZpbmUgR1JFRU5fU0hJRlQgOA0KLSNkZWZpbmUgQkxVRV9TSElGVCAgMA0KLSNkZWZpbmUgQUxQSEFfTUFTSyAgKChBUkdCKSAweGZmIDw8IEFMUEhBX1NISUZUKQ0KLQ0KLS8qDQotICogSW4tbWVtb3J5IHBpeGVsIGRhdGEgZm9ybWF0czoNCi0gKiBiaXRzIDAtNyA9IGZvcm1hdCBpbmRleA0KLSAqIGJpdHMgOC0xNSA9IHBpeGVsIHNpemUgKGluIGJpdHMpDQotICogYml0cyAxNi0yMyA9IGZsYWdzDQotICogYml0cyAyNC0zMSA9IHJlc2VydmVkDQotICovDQotDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xMDU3NjANCi0NCi1lbnVtIFBpeGVsRm9ybWF0DQotew0KLSAgICBQaXhlbEZvcm1hdEluZGV4ZWQgICAgICA9IDB4MDAwMTAwMDAsIC8vIEluZGV4ZXMgaW50byBhIHBhbGV0dGUNCi0gICAgUGl4ZWxGb3JtYXRHREkgICAgICAgICAgPSAweDAwMDIwMDAwLCAvLyBJcyBhIEdESS1zdXBwb3J0ZWQgZm9ybWF0DQotICAgIFBpeGVsRm9ybWF0QWxwaGEgICAgICAgID0gMHgwMDA0MDAwMCwgLy8gSGFzIGFuIGFscGhhIGNvbXBvbmVudA0KLSAgICBQaXhlbEZvcm1hdFBBbHBoYSAgICAgICA9IDB4MDAwODAwMDAsIC8vIFVzZXMgcHJlLW11bHRpcGxpZWQgYWxwaGENCi0gICAgUGl4ZWxGb3JtYXRFeHRlbmRlZCAgICAgPSAweDAwMTAwMDAwLCAvLyBVc2VzIGV4dGVuZGVkIGNvbG9yICgxNiBiaXRzIHBlciBjaGFubmVsKQ0KLSAgICBQaXhlbEZvcm1hdENhbm9uaWNhbCAgICA9IDB4MDAyMDAwMDAsIC8vID8NCi0NCi0gICAgUGl4ZWxGb3JtYXRVbmRlZmluZWQgICAgICAgPSAgMCwNCi0gICAgUGl4ZWxGb3JtYXREb250Q2FyZSAgICAgICA9ICAwLA0KLQ0KLSAgICBQaXhlbEZvcm1hdDFicHBJbmRleGVkICAgICA9ICAxIHwgKCAxIDw8IDgpIHwgUGl4ZWxGb3JtYXRJbmRleGVkDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQaXhlbEZvcm1hdEdESSwNCi0gICAgUGl4ZWxGb3JtYXQ0YnBwSW5kZXhlZCAgICAgPSAgMiB8ICggNCA8PCA4KSB8IFBpeGVsRm9ybWF0SW5kZXhlZA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGl4ZWxGb3JtYXRHREksDQotICAgIFBpeGVsRm9ybWF0OGJwcEluZGV4ZWQgICAgID0gIDMgfCAoIDggPDwgOCkgfCBQaXhlbEZvcm1hdEluZGV4ZWQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBpeGVsRm9ybWF0R0RJLA0KLSAgICBQaXhlbEZvcm1hdDE2YnBwR3JheVNjYWxlICA9ICA0IHwgKDE2IDw8IDgpIHwgUGl4ZWxGb3JtYXRFeHRlbmRlZCwNCi0gICAgUGl4ZWxGb3JtYXQxNmJwcFJHQjU1NSAgICAgPSAgNSB8ICgxNiA8PCA4KSB8IFBpeGVsRm9ybWF0R0RJLA0KLSAgICBQaXhlbEZvcm1hdDE2YnBwUkdCNTY1ICAgICA9ICA2IHwgKDE2IDw8IDgpIHwgUGl4ZWxGb3JtYXRHREksDQotICAgIFBpeGVsRm9ybWF0MTZicHBBUkdCMTU1NSAgID0gIDcgfCAoMTYgPDwgOCkgfCBQaXhlbEZvcm1hdEFscGhhDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQaXhlbEZvcm1hdEdESSwNCi0gICAgUGl4ZWxGb3JtYXQyNGJwcFJHQiAgICAgICAgPSAgOCB8ICgyNCA8PCA4KSB8IFBpeGVsRm9ybWF0R0RJLA0KLSAgICBQaXhlbEZvcm1hdDMyYnBwUkdCICAgICAgICA9ICA5IHwgKDMyIDw8IDgpIHwgUGl4ZWxGb3JtYXRHREksDQotICAgIFBpeGVsRm9ybWF0MzJicHBBUkdCICAgICAgID0gMTAgfCAoMzIgPDwgOCkgfCBQaXhlbEZvcm1hdEFscGhhDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQaXhlbEZvcm1hdEdESQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGl4ZWxGb3JtYXRDYW5vbmljYWwsDQotICAgIFBpeGVsRm9ybWF0MzJicHBQQVJHQiAgICAgID0gMTEgfCAoMzIgPDwgOCkgfCBQaXhlbEZvcm1hdEFscGhhDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQaXhlbEZvcm1hdFBBbHBoYQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGl4ZWxGb3JtYXRHREksDQotICAgIFBpeGVsRm9ybWF0NDhicHBSR0IgICAgICAgID0gMTIgfCAoNDggPDwgOCkgfCBQaXhlbEZvcm1hdEV4dGVuZGVkLA0KLSAgICBQaXhlbEZvcm1hdDY0YnBwQVJHQiAgICAgICA9IDEzIHwgKDY0IDw8IDgpIHwgUGl4ZWxGb3JtYXRBbHBoYQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGl4ZWxGb3JtYXRDYW5vbmljYWwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBpeGVsRm9ybWF0RXh0ZW5kZWQsDQotICAgIFBpeGVsRm9ybWF0NjRicHBQQVJHQiAgICAgID0gMTQgfCAoNjQgPDwgOCkgfCBQaXhlbEZvcm1hdEFscGhhDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQaXhlbEZvcm1hdFBBbHBoYQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGl4ZWxGb3JtYXRFeHRlbmRlZCwNCi0gICAgUGl4ZWxGb3JtYXQyNGJwcEJHUiAgICAgICAgPSAxNSB8ICgyNCA8PCA4KSB8IFBpeGVsRm9ybWF0R0RJLCANCi0gICAgUGl4ZWxGb3JtYXRNYXggICAgICAgICAgICAgPSAxNg0KLX07DQotDQotI2Vsc2UNCi0NCi10eXBlZGVmIElOVCBQaXhlbEZvcm1hdDsNCi0NCi0jZGVmaW5lICAgIFBpeGVsRm9ybWF0SW5kZXhlZCAgICAgIDB4MDAwMTAwMDAgLy8gSW5kZXhlcyBpbnRvIGEgcGFsZXR0ZQ0KLSNkZWZpbmUgICAgUGl4ZWxGb3JtYXRHREkgICAgICAgICAgMHgwMDAyMDAwMCAvLyBJcyBhIEdESS1zdXBwb3J0ZWQgZm9ybWF0DQotI2RlZmluZSAgICBQaXhlbEZvcm1hdEFscGhhICAgICAgICAweDAwMDQwMDAwIC8vIEhhcyBhbiBhbHBoYSBjb21wb25lbnQNCi0jZGVmaW5lICAgIFBpeGVsRm9ybWF0UEFscGhhICAgICAgIDB4MDAwODAwMDAgLy8gVXNlcyBwcmUtbXVsdGlwbGllZCBhbHBoYQ0KLSNkZWZpbmUgICAgUGl4ZWxGb3JtYXRFeHRlbmRlZCAgICAgMHgwMDEwMDAwMCAvLyBVc2VzIGV4dGVuZGVkIGNvbG9yICgxNiBiaXRzIHBlciBjaGFubmVsKQ0KLSNkZWZpbmUgICAgUGl4ZWxGb3JtYXRDYW5vbmljYWwgICAgMHgwMDIwMDAwMCAvLyA/DQotDQotI2RlZmluZSAgICBQaXhlbEZvcm1hdFVuZGVmaW5lZCAgICAgICAwDQotI2RlZmluZSAgICBQaXhlbEZvcm1hdERvbnRDYXJlICAgICAgICAwDQotDQotI2RlZmluZSAgICBQaXhlbEZvcm1hdDFicHBJbmRleGVkICAgICAoMSB8ICggMSA8PCA4KSB8IFBpeGVsRm9ybWF0SW5kZXhlZCB8IFBpeGVsRm9ybWF0R0RJKQ0KLSNkZWZpbmUgICAgUGl4ZWxGb3JtYXQ0YnBwSW5kZXhlZCAgICAgKDIgfCAoIDQgPDwgOCkgfCBQaXhlbEZvcm1hdEluZGV4ZWQgfCBQaXhlbEZvcm1hdEdESSkNCi0jZGVmaW5lICAgIFBpeGVsRm9ybWF0OGJwcEluZGV4ZWQgICAgICgzIHwgKCA4IDw8IDgpIHwgUGl4ZWxGb3JtYXRJbmRleGVkIHwgUGl4ZWxGb3JtYXRHREkpDQotI2RlZmluZSAgICBQaXhlbEZvcm1hdDE2YnBwR3JheVNjYWxlICAoNCB8ICgxNiA8PCA4KSB8IFBpeGVsRm9ybWF0RXh0ZW5kZWQpDQotI2RlZmluZSAgICBQaXhlbEZvcm1hdDE2YnBwUkdCNTU1ICAgICAoNSB8ICgxNiA8PCA4KSB8IFBpeGVsRm9ybWF0R0RJKQ0KLSNkZWZpbmUgICAgUGl4ZWxGb3JtYXQxNmJwcFJHQjU2NSAgICAgKDYgfCAoMTYgPDwgOCkgfCBQaXhlbEZvcm1hdEdESSkNCi0jZGVmaW5lICAgIFBpeGVsRm9ybWF0MTZicHBBUkdCMTU1NSAgICg3IHwgKDE2IDw8IDgpIHwgUGl4ZWxGb3JtYXRBbHBoYSB8IFBpeGVsRm9ybWF0R0RJKQ0KLSNkZWZpbmUgICAgUGl4ZWxGb3JtYXQyNGJwcFJHQiAgICAgICAgKDggfCAoMjQgPDwgOCkgfCBQaXhlbEZvcm1hdEdESSkNCi0jZGVmaW5lICAgIFBpeGVsRm9ybWF0MzJicHBSR0IgICAgICAgICg5IHwgKDMyIDw8IDgpIHwgUGl4ZWxGb3JtYXRHREkpDQotI2RlZmluZSAgICBQaXhlbEZvcm1hdDMyYnBwQVJHQiAgICAgICAoMTAgfCAoMzIgPDwgOCkgfCBQaXhlbEZvcm1hdEFscGhhIHwgUGl4ZWxGb3JtYXRHREkgfCBQaXhlbEZvcm1hdENhbm9uaWNhbCkNCi0jZGVmaW5lICAgIFBpeGVsRm9ybWF0MzJicHBQQVJHQiAgICAgICgxMSB8ICgzMiA8PCA4KSB8IFBpeGVsRm9ybWF0QWxwaGEgfCBQaXhlbEZvcm1hdFBBbHBoYSB8IFBpeGVsRm9ybWF0R0RJKQ0KLSNkZWZpbmUgICAgUGl4ZWxGb3JtYXQ0OGJwcFJHQiAgICAgICAgKDEyIHwgKDQ4IDw8IDgpIHwgUGl4ZWxGb3JtYXRFeHRlbmRlZCkNCi0jZGVmaW5lICAgIFBpeGVsRm9ybWF0NjRicHBBUkdCICAgICAgICgxMyB8ICg2NCA8PCA4KSB8IFBpeGVsRm9ybWF0QWxwaGEgIHwgUGl4ZWxGb3JtYXRDYW5vbmljYWwgfCBQaXhlbEZvcm1hdEV4dGVuZGVkKQ0KLSNkZWZpbmUgICAgUGl4ZWxGb3JtYXQ2NGJwcFBBUkdCICAgICAgKDE0IHwgKDY0IDw8IDgpIHwgUGl4ZWxGb3JtYXRBbHBoYSAgfCBQaXhlbEZvcm1hdFBBbHBoYSB8IFBpeGVsRm9ybWF0RXh0ZW5kZWQpDQotI2RlZmluZSAgICBQaXhlbEZvcm1hdE1heCAgICAgICAgICAgICAxNQ0KLQ0KLSNlbmRpZg0KLQ0KLQ0KLS8qDQotICogUmV0dXJuIHRoZSBwaXhlbCBzaXplIGZvciB0aGUgc3BlY2lmaWVkIGZvcm1hdCAoaW4gYml0cykNCi0gKi8NCi0NCi1pbmxpbmUgVUlOVA0KLUdldFBpeGVsRm9ybWF0U2l6ZSgNCi0gICAgICAgICAgICAgICAgICAgUGl4ZWxGb3JtYXQgcGl4Zm10DQotICAgICkNCi17DQotICAgIHJldHVybiAocGl4Zm10ID4+IDgpICYgMHhmZjsNCi19DQotDQotLyoNCi0gKiBEZXRlcm1pbmUgaWYgdGhlIHNwZWNpZmllZCBwaXhlbCBmb3JtYXQgaXMgYW4gaW5kZXhlZCBjb2xvciBmb3JtYXQNCi0gKi8NCi0NCi1pbmxpbmUgQk9PTA0KLUlzSW5kZXhlZFBpeGVsRm9ybWF0KA0KLSAgICAgICAgICAgICAgICAgICAgIFBpeGVsRm9ybWF0IHBpeGZtdA0KLSAgICApDQotew0KLSAgICByZXR1cm4gKHBpeGZtdCAmIFBpeGVsRm9ybWF0SW5kZXhlZCkgIT0gMDsNCi19DQotDQotLyoNCi0gKiBEZXRlcm1pbmUgaWYgdGhlIHBpeGVsIGZvcm1hdCBjYW4gaGF2ZSBhbHBoYSBjaGFubmVsDQotICovDQotDQotaW5saW5lIEJPT0wNCi1Jc0FscGhhUGl4ZWxGb3JtYXQoDQotICAgICAgICAgICAgICAgICAgICAgUGl4ZWxGb3JtYXQgcGl4Zm10DQotKQ0KLXsNCi0gICByZXR1cm4gKHBpeGZtdCAmIFBpeGVsRm9ybWF0QWxwaGEpICE9IDA7DQotfQ0KLQ0KLS8qDQotICogRGV0ZXJtaW5lIGlmIHRoZSBwaXhlbCBmb3JtYXQgaXMgYW4gZXh0ZW5kZWQgZm9ybWF0LA0KLSAqIGkuZS4gc3VwcG9ydHMgMTYtYml0IHBlciBjaGFubmVsDQotICovDQotDQotaW5saW5lIEJPT0wNCi1Jc0V4dGVuZGVkUGl4ZWxGb3JtYXQoDQotICAgICAgICAgICAgICAgICAgICAgUGl4ZWxGb3JtYXQgcGl4Zm10DQotICAgICkNCi17DQotICAgcmV0dXJuIChwaXhmbXQgJiBQaXhlbEZvcm1hdEV4dGVuZGVkKSAhPSAwOw0KLX0NCi0NCi0vKg0KLSAqIERldGVybWluZSBpZiB0aGUgcGl4ZWwgZm9ybWF0IGlzIGNhbm9uaWNhbCBmb3JtYXQ6DQotICogICBQaXhlbEZvcm1hdDMyYnBwQVJHQg0KLSAqICAgUGl4ZWxGb3JtYXQzMmJwcFBBUkdCDQotICogICBQaXhlbEZvcm1hdDY0YnBwQVJHQg0KLSAqICAgUGl4ZWxGb3JtYXQ2NGJwcFBBUkdCDQotICovDQotDQotaW5saW5lIEJPT0wNCi1Jc0Nhbm9uaWNhbFBpeGVsRm9ybWF0KA0KLSAgICAgICAgICAgICAgICAgICAgIFBpeGVsRm9ybWF0IHBpeGZtdA0KLSAgICApDQotew0KLSAgIHJldHVybiAocGl4Zm10ICYgUGl4ZWxGb3JtYXRDYW5vbmljYWwpICE9IDA7DQotfQ0KLQ0KLS8qDQotICogQ29sb3IgcGFsZXR0ZQ0KLSAqIHBhbGV0dGUgZW50cmllcyBhcmUgbGltaXRlZCB0byAzMmJwcCBBUkdCIHBpeGVsIGZvcm1hdA0KLSAqLyANCi0NCi1lbnVtIFBhbGV0dGVGbGFncw0KLXsNCi0gICAgUGFsZXR0ZUZsYWdzSGFzQWxwaGEgICAgPSAweDAwMDEsDQotICAgIFBhbGV0dGVGbGFnc0dyYXlTY2FsZSAgID0gMHgwMDAyLA0KLSAgICBQYWxldHRlRmxhZ3NIYWxmdG9uZSAgICA9IDB4MDAwNA0KLX07DQotDQotc3RydWN0IENvbG9yUGFsZXR0ZQ0KLXsNCi1wdWJsaWM6DQotICAgIFVJTlQgRmxhZ3M7ICAgICAgICAgICAgIC8vIHBhbGV0dGUgZmxhZ3MNCi0gICAgVUlOVCBDb3VudDsgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIGNvbG9yIGVudHJpZXMNCi0gICAgQVJHQiBFbnRyaWVzWzFdOyAgICAgICAgLy8gcGFsZXR0ZSBjb2xvciBlbnRyaWVzDQotfTsNCi0NCi0jZW5kaWYNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCisqCisqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqIE1vZHVsZSBOYW1lOgorKgorKiAgIEdkaXBsdXMgcGl4ZWwgZm9ybWF0cworKgorKiBBYnN0cmFjdDoKKyoKKyogICBEZWZpbml0aW9ucyBmb3IgY29sb3IgdHlwZXMsIHBhbGV0dGVzLCBwaXhlbCBmb3JtYXQgSURzLgorKgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9HRElQTFVTUElYRUxGT1JNQVRTX0gKKyNkZWZpbmUgX0dESVBMVVNQSVhFTEZPUk1BVFNfSAorCisvKgorICogMzItYml0IGFuZCA2NC1iaXQgQVJHQiBwaXhlbCB2YWx1ZQorICovCisKK3R5cGVkZWYgRFdPUkQgQVJHQjsKK3R5cGVkZWYgRFdPUkRMT05HIEFSR0I2NDsKKworI2RlZmluZSBBTFBIQV9TSElGVCAyNAorI2RlZmluZSBSRURfU0hJRlQgICAxNgorI2RlZmluZSBHUkVFTl9TSElGVCA4CisjZGVmaW5lIEJMVUVfU0hJRlQgIDAKKyNkZWZpbmUgQUxQSEFfTUFTSyAgKChBUkdCKSAweGZmIDw8IEFMUEhBX1NISUZUKQorCisvKgorICogSW4tbWVtb3J5IHBpeGVsIGRhdGEgZm9ybWF0czoKKyAqIGJpdHMgMC03ID0gZm9ybWF0IGluZGV4CisgKiBiaXRzIDgtMTUgPSBwaXhlbCBzaXplIChpbiBiaXRzKQorICogYml0cyAxNi0yMyA9IGZsYWdzCisgKiBiaXRzIDI0LTMxID0gcmVzZXJ2ZWQKKyAqLworCisjaWZuZGVmIERDUl9VU0VfTkVXXzEwNTc2MAorCitlbnVtIFBpeGVsRm9ybWF0Cit7CisgICAgUGl4ZWxGb3JtYXRJbmRleGVkICAgICAgPSAweDAwMDEwMDAwLCAvLyBJbmRleGVzIGludG8gYSBwYWxldHRlCisgICAgUGl4ZWxGb3JtYXRHREkgICAgICAgICAgPSAweDAwMDIwMDAwLCAvLyBJcyBhIEdESS1zdXBwb3J0ZWQgZm9ybWF0CisgICAgUGl4ZWxGb3JtYXRBbHBoYSAgICAgICAgPSAweDAwMDQwMDAwLCAvLyBIYXMgYW4gYWxwaGEgY29tcG9uZW50CisgICAgUGl4ZWxGb3JtYXRQQWxwaGEgICAgICAgPSAweDAwMDgwMDAwLCAvLyBVc2VzIHByZS1tdWx0aXBsaWVkIGFscGhhCisgICAgUGl4ZWxGb3JtYXRFeHRlbmRlZCAgICAgPSAweDAwMTAwMDAwLCAvLyBVc2VzIGV4dGVuZGVkIGNvbG9yICgxNiBiaXRzIHBlciBjaGFubmVsKQorICAgIFBpeGVsRm9ybWF0Q2Fub25pY2FsICAgID0gMHgwMDIwMDAwMCwgLy8gPworCisgICAgUGl4ZWxGb3JtYXRVbmRlZmluZWQgICAgICAgPSAgMCwKKyAgICBQaXhlbEZvcm1hdERvbnRDYXJlICAgICAgID0gIDAsCisKKyAgICBQaXhlbEZvcm1hdDFicHBJbmRleGVkICAgICA9ICAxIHwgKCAxIDw8IDgpIHwgUGl4ZWxGb3JtYXRJbmRleGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBpeGVsRm9ybWF0R0RJLAorICAgIFBpeGVsRm9ybWF0NGJwcEluZGV4ZWQgICAgID0gIDIgfCAoIDQgPDwgOCkgfCBQaXhlbEZvcm1hdEluZGV4ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGl4ZWxGb3JtYXRHREksCisgICAgUGl4ZWxGb3JtYXQ4YnBwSW5kZXhlZCAgICAgPSAgMyB8ICggOCA8PCA4KSB8IFBpeGVsRm9ybWF0SW5kZXhlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQaXhlbEZvcm1hdEdESSwKKyAgICBQaXhlbEZvcm1hdDE2YnBwR3JheVNjYWxlICA9ICA0IHwgKDE2IDw8IDgpIHwgUGl4ZWxGb3JtYXRFeHRlbmRlZCwKKyAgICBQaXhlbEZvcm1hdDE2YnBwUkdCNTU1ICAgICA9ICA1IHwgKDE2IDw8IDgpIHwgUGl4ZWxGb3JtYXRHREksCisgICAgUGl4ZWxGb3JtYXQxNmJwcFJHQjU2NSAgICAgPSAgNiB8ICgxNiA8PCA4KSB8IFBpeGVsRm9ybWF0R0RJLAorICAgIFBpeGVsRm9ybWF0MTZicHBBUkdCMTU1NSAgID0gIDcgfCAoMTYgPDwgOCkgfCBQaXhlbEZvcm1hdEFscGhhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBpeGVsRm9ybWF0R0RJLAorICAgIFBpeGVsRm9ybWF0MjRicHBSR0IgICAgICAgID0gIDggfCAoMjQgPDwgOCkgfCBQaXhlbEZvcm1hdEdESSwKKyAgICBQaXhlbEZvcm1hdDMyYnBwUkdCICAgICAgICA9ICA5IHwgKDMyIDw8IDgpIHwgUGl4ZWxGb3JtYXRHREksCisgICAgUGl4ZWxGb3JtYXQzMmJwcEFSR0IgICAgICAgPSAxMCB8ICgzMiA8PCA4KSB8IFBpeGVsRm9ybWF0QWxwaGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGl4ZWxGb3JtYXRHREkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGl4ZWxGb3JtYXRDYW5vbmljYWwsCisgICAgUGl4ZWxGb3JtYXQzMmJwcFBBUkdCICAgICAgPSAxMSB8ICgzMiA8PCA4KSB8IFBpeGVsRm9ybWF0QWxwaGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGl4ZWxGb3JtYXRQQWxwaGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGl4ZWxGb3JtYXRHREksCisgICAgUGl4ZWxGb3JtYXQ0OGJwcFJHQiAgICAgICAgPSAxMiB8ICg0OCA8PCA4KSB8IFBpeGVsRm9ybWF0RXh0ZW5kZWQsCisgICAgUGl4ZWxGb3JtYXQ2NGJwcEFSR0IgICAgICAgPSAxMyB8ICg2NCA8PCA4KSB8IFBpeGVsRm9ybWF0QWxwaGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGl4ZWxGb3JtYXRDYW5vbmljYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUGl4ZWxGb3JtYXRFeHRlbmRlZCwKKyAgICBQaXhlbEZvcm1hdDY0YnBwUEFSR0IgICAgICA9IDE0IHwgKDY0IDw8IDgpIHwgUGl4ZWxGb3JtYXRBbHBoYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQaXhlbEZvcm1hdFBBbHBoYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQaXhlbEZvcm1hdEV4dGVuZGVkLAorICAgIFBpeGVsRm9ybWF0MjRicHBCR1IgICAgICAgID0gMTUgfCAoMjQgPDwgOCkgfCBQaXhlbEZvcm1hdEdESSwgCisgICAgUGl4ZWxGb3JtYXRNYXggICAgICAgICAgICAgPSAxNgorfTsKKworI2Vsc2UKKwordHlwZWRlZiBJTlQgUGl4ZWxGb3JtYXQ7CisKKyNkZWZpbmUgICAgUGl4ZWxGb3JtYXRJbmRleGVkICAgICAgMHgwMDAxMDAwMCAvLyBJbmRleGVzIGludG8gYSBwYWxldHRlCisjZGVmaW5lICAgIFBpeGVsRm9ybWF0R0RJICAgICAgICAgIDB4MDAwMjAwMDAgLy8gSXMgYSBHREktc3VwcG9ydGVkIGZvcm1hdAorI2RlZmluZSAgICBQaXhlbEZvcm1hdEFscGhhICAgICAgICAweDAwMDQwMDAwIC8vIEhhcyBhbiBhbHBoYSBjb21wb25lbnQKKyNkZWZpbmUgICAgUGl4ZWxGb3JtYXRQQWxwaGEgICAgICAgMHgwMDA4MDAwMCAvLyBVc2VzIHByZS1tdWx0aXBsaWVkIGFscGhhCisjZGVmaW5lICAgIFBpeGVsRm9ybWF0RXh0ZW5kZWQgICAgIDB4MDAxMDAwMDAgLy8gVXNlcyBleHRlbmRlZCBjb2xvciAoMTYgYml0cyBwZXIgY2hhbm5lbCkKKyNkZWZpbmUgICAgUGl4ZWxGb3JtYXRDYW5vbmljYWwgICAgMHgwMDIwMDAwMCAvLyA/CisKKyNkZWZpbmUgICAgUGl4ZWxGb3JtYXRVbmRlZmluZWQgICAgICAgMAorI2RlZmluZSAgICBQaXhlbEZvcm1hdERvbnRDYXJlICAgICAgICAwCisKKyNkZWZpbmUgICAgUGl4ZWxGb3JtYXQxYnBwSW5kZXhlZCAgICAgKDEgfCAoIDEgPDwgOCkgfCBQaXhlbEZvcm1hdEluZGV4ZWQgfCBQaXhlbEZvcm1hdEdESSkKKyNkZWZpbmUgICAgUGl4ZWxGb3JtYXQ0YnBwSW5kZXhlZCAgICAgKDIgfCAoIDQgPDwgOCkgfCBQaXhlbEZvcm1hdEluZGV4ZWQgfCBQaXhlbEZvcm1hdEdESSkKKyNkZWZpbmUgICAgUGl4ZWxGb3JtYXQ4YnBwSW5kZXhlZCAgICAgKDMgfCAoIDggPDwgOCkgfCBQaXhlbEZvcm1hdEluZGV4ZWQgfCBQaXhlbEZvcm1hdEdESSkKKyNkZWZpbmUgICAgUGl4ZWxGb3JtYXQxNmJwcEdyYXlTY2FsZSAgKDQgfCAoMTYgPDwgOCkgfCBQaXhlbEZvcm1hdEV4dGVuZGVkKQorI2RlZmluZSAgICBQaXhlbEZvcm1hdDE2YnBwUkdCNTU1ICAgICAoNSB8ICgxNiA8PCA4KSB8IFBpeGVsRm9ybWF0R0RJKQorI2RlZmluZSAgICBQaXhlbEZvcm1hdDE2YnBwUkdCNTY1ICAgICAoNiB8ICgxNiA8PCA4KSB8IFBpeGVsRm9ybWF0R0RJKQorI2RlZmluZSAgICBQaXhlbEZvcm1hdDE2YnBwQVJHQjE1NTUgICAoNyB8ICgxNiA8PCA4KSB8IFBpeGVsRm9ybWF0QWxwaGEgfCBQaXhlbEZvcm1hdEdESSkKKyNkZWZpbmUgICAgUGl4ZWxGb3JtYXQyNGJwcFJHQiAgICAgICAgKDggfCAoMjQgPDwgOCkgfCBQaXhlbEZvcm1hdEdESSkKKyNkZWZpbmUgICAgUGl4ZWxGb3JtYXQzMmJwcFJHQiAgICAgICAgKDkgfCAoMzIgPDwgOCkgfCBQaXhlbEZvcm1hdEdESSkKKyNkZWZpbmUgICAgUGl4ZWxGb3JtYXQzMmJwcEFSR0IgICAgICAgKDEwIHwgKDMyIDw8IDgpIHwgUGl4ZWxGb3JtYXRBbHBoYSB8IFBpeGVsRm9ybWF0R0RJIHwgUGl4ZWxGb3JtYXRDYW5vbmljYWwpCisjZGVmaW5lICAgIFBpeGVsRm9ybWF0MzJicHBQQVJHQiAgICAgICgxMSB8ICgzMiA8PCA4KSB8IFBpeGVsRm9ybWF0QWxwaGEgfCBQaXhlbEZvcm1hdFBBbHBoYSB8IFBpeGVsRm9ybWF0R0RJKQorI2RlZmluZSAgICBQaXhlbEZvcm1hdDQ4YnBwUkdCICAgICAgICAoMTIgfCAoNDggPDwgOCkgfCBQaXhlbEZvcm1hdEV4dGVuZGVkKQorI2RlZmluZSAgICBQaXhlbEZvcm1hdDY0YnBwQVJHQiAgICAgICAoMTMgfCAoNjQgPDwgOCkgfCBQaXhlbEZvcm1hdEFscGhhICB8IFBpeGVsRm9ybWF0Q2Fub25pY2FsIHwgUGl4ZWxGb3JtYXRFeHRlbmRlZCkKKyNkZWZpbmUgICAgUGl4ZWxGb3JtYXQ2NGJwcFBBUkdCICAgICAgKDE0IHwgKDY0IDw8IDgpIHwgUGl4ZWxGb3JtYXRBbHBoYSAgfCBQaXhlbEZvcm1hdFBBbHBoYSB8IFBpeGVsRm9ybWF0RXh0ZW5kZWQpCisjZGVmaW5lICAgIFBpeGVsRm9ybWF0TWF4ICAgICAgICAgICAgIDE1CisKKyNlbmRpZgorCisKKy8qCisgKiBSZXR1cm4gdGhlIHBpeGVsIHNpemUgZm9yIHRoZSBzcGVjaWZpZWQgZm9ybWF0IChpbiBiaXRzKQorICovCisKK2lubGluZSBVSU5UCitHZXRQaXhlbEZvcm1hdFNpemUoCisgICAgICAgICAgICAgICAgICAgUGl4ZWxGb3JtYXQgcGl4Zm10CisgICAgKQoreworICAgIHJldHVybiAocGl4Zm10ID4+IDgpICYgMHhmZjsKK30KKworLyoKKyAqIERldGVybWluZSBpZiB0aGUgc3BlY2lmaWVkIHBpeGVsIGZvcm1hdCBpcyBhbiBpbmRleGVkIGNvbG9yIGZvcm1hdAorICovCisKK2lubGluZSBCT09MCitJc0luZGV4ZWRQaXhlbEZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgIFBpeGVsRm9ybWF0IHBpeGZtdAorICAgICkKK3sKKyAgICByZXR1cm4gKHBpeGZtdCAmIFBpeGVsRm9ybWF0SW5kZXhlZCkgIT0gMDsKK30KKworLyoKKyAqIERldGVybWluZSBpZiB0aGUgcGl4ZWwgZm9ybWF0IGNhbiBoYXZlIGFscGhhIGNoYW5uZWwKKyAqLworCitpbmxpbmUgQk9PTAorSXNBbHBoYVBpeGVsRm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgUGl4ZWxGb3JtYXQgcGl4Zm10CispCit7CisgICByZXR1cm4gKHBpeGZtdCAmIFBpeGVsRm9ybWF0QWxwaGEpICE9IDA7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgaWYgdGhlIHBpeGVsIGZvcm1hdCBpcyBhbiBleHRlbmRlZCBmb3JtYXQsCisgKiBpLmUuIHN1cHBvcnRzIDE2LWJpdCBwZXIgY2hhbm5lbAorICovCisKK2lubGluZSBCT09MCitJc0V4dGVuZGVkUGl4ZWxGb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICBQaXhlbEZvcm1hdCBwaXhmbXQKKyAgICApCit7CisgICByZXR1cm4gKHBpeGZtdCAmIFBpeGVsRm9ybWF0RXh0ZW5kZWQpICE9IDA7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgaWYgdGhlIHBpeGVsIGZvcm1hdCBpcyBjYW5vbmljYWwgZm9ybWF0OgorICogICBQaXhlbEZvcm1hdDMyYnBwQVJHQgorICogICBQaXhlbEZvcm1hdDMyYnBwUEFSR0IKKyAqICAgUGl4ZWxGb3JtYXQ2NGJwcEFSR0IKKyAqICAgUGl4ZWxGb3JtYXQ2NGJwcFBBUkdCCisgKi8KKworaW5saW5lIEJPT0wKK0lzQ2Fub25pY2FsUGl4ZWxGb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICBQaXhlbEZvcm1hdCBwaXhmbXQKKyAgICApCit7CisgICByZXR1cm4gKHBpeGZtdCAmIFBpeGVsRm9ybWF0Q2Fub25pY2FsKSAhPSAwOworfQorCisvKgorICogQ29sb3IgcGFsZXR0ZQorICogcGFsZXR0ZSBlbnRyaWVzIGFyZSBsaW1pdGVkIHRvIDMyYnBwIEFSR0IgcGl4ZWwgZm9ybWF0CisgKi8gCisKK2VudW0gUGFsZXR0ZUZsYWdzCit7CisgICAgUGFsZXR0ZUZsYWdzSGFzQWxwaGEgICAgPSAweDAwMDEsCisgICAgUGFsZXR0ZUZsYWdzR3JheVNjYWxlICAgPSAweDAwMDIsCisgICAgUGFsZXR0ZUZsYWdzSGFsZnRvbmUgICAgPSAweDAwMDQKK307CisKK3N0cnVjdCBDb2xvclBhbGV0dGUKK3sKK3B1YmxpYzoKKyAgICBVSU5UIEZsYWdzOyAgICAgICAgICAgICAvLyBwYWxldHRlIGZsYWdzCisgICAgVUlOVCBDb3VudDsgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIGNvbG9yIGVudHJpZXMKKyAgICBBUkdCIEVudHJpZXNbMV07ICAgICAgICAvLyBwYWxldHRlIGNvbG9yIGVudHJpZXMKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c1JlZ2lvbi5oIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c1JlZ2lvbi5oCmluZGV4IGRkMWQyMGUuLmNmYjQwYTEgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNSZWdpb24uaAorKysgYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzUmVnaW9uLmgKQEAgLTEsNDk4ICsxLDQ5OCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXA0KLSoNCi0qIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotKg0KLSogTW9kdWxlIE5hbWU6DQotKg0KLSogICBHZGlwbHVzUmVnaW9uLmgNCi0qDQotKiBBYnN0cmFjdDoNCi0qDQotKiAgIFJlZ2lvbiBBUEkgcmVsYXRlZCBkZWNsYXJhdGlvbnMNCi0qDQotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLSNpZm5kZWYgX0dESVBMVVNSRUdJT05fSA0KLSNkZWZpbmUgX0dESVBMVVNSRUdJT05fSA0KLQ0KLS8qKg0KLSAqIENvbnN0cnVjdCBhIG5ldyByZWdpb24gb2JqZWN0DQotICovDQotDQotaW5saW5lIA0KLVJlZ2lvbjo6UmVnaW9uKCkNCi17DQotICAgIEdwUmVnaW9uICpyZWdpb24gPSBOVUxMOw0KLQ0KLSAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZVJlZ2lvbigmcmVnaW9uKTsNCi0NCi0gICAgU2V0TmF0aXZlUmVnaW9uKHJlZ2lvbik7DQotfQ0KLQ0KLWlubGluZSANCi1SZWdpb246OlJlZ2lvbihJTiBjb25zdCBSZWN0RiYgcmVjdCkNCi17DQotICAgIEdwUmVnaW9uICpyZWdpb24gPSBOVUxMOw0KLQ0KLSAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZVJlZ2lvblJlY3QoJnJlY3QsICZyZWdpb24pOw0KLQ0KLSAgICBTZXROYXRpdmVSZWdpb24ocmVnaW9uKTsNCi19DQotDQotaW5saW5lIA0KLVJlZ2lvbjo6UmVnaW9uKElOIGNvbnN0IFJlY3QmIHJlY3QpDQotew0KLSAgICBHcFJlZ2lvbiAqcmVnaW9uID0gTlVMTDsNCi0NCi0gICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVSZWdpb25SZWN0SSgmcmVjdCwgJnJlZ2lvbik7DQotDQotICAgIFNldE5hdGl2ZVJlZ2lvbihyZWdpb24pOw0KLX0NCi0NCi1pbmxpbmUgDQotUmVnaW9uOjpSZWdpb24oSU4gY29uc3QgR3JhcGhpY3NQYXRoKiBwYXRoKQ0KLXsNCi0gICAgR3BSZWdpb24gKnJlZ2lvbiA9IE5VTEw7DQotDQotICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlUmVnaW9uUGF0aChwYXRoLT5uYXRpdmVQYXRoLCAmcmVnaW9uKTsNCi0NCi0gICAgU2V0TmF0aXZlUmVnaW9uKHJlZ2lvbik7DQotfQ0KLQ0KLWlubGluZSANCi1SZWdpb246OlJlZ2lvbihJTiBjb25zdCBCWVRFKiByZWdpb25EYXRhLCBJTiBJTlQgc2l6ZSkNCi17DQotICAgIEdwUmVnaW9uICpyZWdpb24gPSBOVUxMOw0KLQ0KLSAgICBsYXN0UmVzdWx0ID0gRGxsRXhwb3J0czo6R2RpcENyZWF0ZVJlZ2lvblJnbkRhdGEocmVnaW9uRGF0YSwgc2l6ZSwgJnJlZ2lvbik7DQotDQotICAgIFNldE5hdGl2ZVJlZ2lvbihyZWdpb24pOw0KLX0NCi0NCi1pbmxpbmUgDQotUmVnaW9uOjpSZWdpb24oSU4gSFJHTiBoUmduKQ0KLXsNCi0gICAgR3BSZWdpb24gKnJlZ2lvbiA9IE5VTEw7DQotDQotICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlUmVnaW9uSHJnbihoUmduLCAmcmVnaW9uKTsNCi0NCi0gICAgU2V0TmF0aXZlUmVnaW9uKHJlZ2lvbik7DQotfQ0KLQ0KLWlubGluZSANCi1SZWdpb24qIFJlZ2lvbjo6RnJvbUhSR04oSU4gSFJHTiBoUmduKQ0KLXsNCi0gICAgR3BSZWdpb24gKnJlZ2lvbiA9IE5VTEw7DQotDQotICAgIGlmIChEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlUmVnaW9uSHJnbihoUmduLCAmcmVnaW9uKSA9PSBPaykNCi0gICAgew0KLSAgICAgICAgUmVnaW9uKiBuZXdSZWdpb24gPSBuZXcgUmVnaW9uKHJlZ2lvbik7DQotDQotICAgICAgICBpZiAobmV3UmVnaW9uID09IE5VTEwpIA0KLSAgICAgICAgew0KLSAgICAgICAgICAgIERsbEV4cG9ydHM6OkdkaXBEZWxldGVSZWdpb24ocmVnaW9uKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHJldHVybiBuZXdSZWdpb247DQotICAgIH0NCi0gICAgZWxzZQ0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLWlubGluZSANCi1SZWdpb246On5SZWdpb24oKQ0KLXsNCi0gICAgRGxsRXhwb3J0czo6R2RpcERlbGV0ZVJlZ2lvbihuYXRpdmVSZWdpb24pOw0KLX0NCi0NCi0vKioNCi0gKiBNYWtlIGEgY29weSBvZiB0aGUgcmVnaW9uIG9iamVjdA0KLSAqLw0KLWlubGluZSBSZWdpb24qIA0KLVJlZ2lvbjo6Q2xvbmUoKSBjb25zdA0KLXsNCi0gICAgR3BSZWdpb24gKnJlZ2lvbiA9IE5VTEw7DQotDQotICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ2xvbmVSZWdpb24obmF0aXZlUmVnaW9uLCAmcmVnaW9uKSk7DQotDQotICAgIHJldHVybiBuZXcgUmVnaW9uKHJlZ2lvbik7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotUmVnaW9uOjpNYWtlSW5maW5pdGUoKQ0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0SW5maW5pdGUobmF0aXZlUmVnaW9uKSk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotUmVnaW9uOjpNYWtlRW1wdHkoKQ0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0RW1wdHkobmF0aXZlUmVnaW9uKSk7DQotfQ0KLQ0KLS8qKg0KLSAqIFJlZ2lvbiBvcGVyYXRpb25zDQotICovDQotaW5saW5lIFN0YXR1cyANCi1SZWdpb246OkludGVyc2VjdChJTiBjb25zdCBSZWN0RiYgcmVjdCkNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENvbWJpbmVSZWdpb25SZWN0KG5hdGl2ZVJlZ2lvbiwgJnJlY3QsIENvbWJpbmVNb2RlSW50ZXJzZWN0KSk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotUmVnaW9uOjpJbnRlcnNlY3QoSU4gY29uc3QgUmVjdCYgcmVjdCkNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENvbWJpbmVSZWdpb25SZWN0SShuYXRpdmVSZWdpb24sICZyZWN0LCBDb21iaW5lTW9kZUludGVyc2VjdCkpOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzIA0KLVJlZ2lvbjo6SW50ZXJzZWN0KElOIGNvbnN0IEdyYXBoaWNzUGF0aCogcGF0aCkNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENvbWJpbmVSZWdpb25QYXRoKG5hdGl2ZVJlZ2lvbiwgcGF0aC0+bmF0aXZlUGF0aCwgQ29tYmluZU1vZGVJbnRlcnNlY3QpKTsNCi19DQotDQotaW5saW5lIFN0YXR1cyANCi1SZWdpb246OkludGVyc2VjdChJTiBjb25zdCBSZWdpb24qIHJlZ2lvbikNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENvbWJpbmVSZWdpb25SZWdpb24obmF0aXZlUmVnaW9uLCByZWdpb24tPm5hdGl2ZVJlZ2lvbiwgQ29tYmluZU1vZGVJbnRlcnNlY3QpKTsNCi19DQotDQotaW5saW5lIFN0YXR1cyANCi1SZWdpb246OlVuaW9uKElOIGNvbnN0IFJlY3RGJiByZWN0KQ0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ29tYmluZVJlZ2lvblJlY3QobmF0aXZlUmVnaW9uLCAmcmVjdCwgQ29tYmluZU1vZGVVbmlvbikpOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzIA0KLVJlZ2lvbjo6VW5pb24oSU4gY29uc3QgUmVjdCYgcmVjdCkNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENvbWJpbmVSZWdpb25SZWN0SShuYXRpdmVSZWdpb24sICZyZWN0LCBDb21iaW5lTW9kZVVuaW9uKSk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotUmVnaW9uOjpVbmlvbihJTiBjb25zdCBHcmFwaGljc1BhdGgqIHBhdGgpDQotew0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDb21iaW5lUmVnaW9uUGF0aChuYXRpdmVSZWdpb24sIHBhdGgtPm5hdGl2ZVBhdGgsIENvbWJpbmVNb2RlVW5pb24pKTsNCi19DQotDQotaW5saW5lIFN0YXR1cyANCi1SZWdpb246OlVuaW9uKElOIGNvbnN0IFJlZ2lvbiogcmVnaW9uKQ0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ29tYmluZVJlZ2lvblJlZ2lvbihuYXRpdmVSZWdpb24sIHJlZ2lvbi0+bmF0aXZlUmVnaW9uLCBDb21iaW5lTW9kZVVuaW9uKSk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotUmVnaW9uOjpYb3IoSU4gY29uc3QgUmVjdEYmIHJlY3QpDQotew0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDb21iaW5lUmVnaW9uUmVjdChuYXRpdmVSZWdpb24sICZyZWN0LCBDb21iaW5lTW9kZVhvcikpOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzIA0KLVJlZ2lvbjo6WG9yKElOIGNvbnN0IFJlY3QmIHJlY3QpDQotew0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDb21iaW5lUmVnaW9uUmVjdEkobmF0aXZlUmVnaW9uLCAmcmVjdCwgQ29tYmluZU1vZGVYb3IpKTsNCi19DQotDQotaW5saW5lIFN0YXR1cyANCi1SZWdpb246OlhvcihJTiBjb25zdCBHcmFwaGljc1BhdGgqIHBhdGgpDQotew0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDb21iaW5lUmVnaW9uUGF0aChuYXRpdmVSZWdpb24sIHBhdGgtPm5hdGl2ZVBhdGgsIENvbWJpbmVNb2RlWG9yKSk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotUmVnaW9uOjpYb3IoSU4gY29uc3QgUmVnaW9uKiByZWdpb24pDQotew0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDb21iaW5lUmVnaW9uUmVnaW9uKG5hdGl2ZVJlZ2lvbiwgcmVnaW9uLT5uYXRpdmVSZWdpb24sIENvbWJpbmVNb2RlWG9yKSk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotUmVnaW9uOjpFeGNsdWRlKElOIGNvbnN0IFJlY3RGJiByZWN0KQ0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ29tYmluZVJlZ2lvblJlY3QobmF0aXZlUmVnaW9uLCAmcmVjdCwgQ29tYmluZU1vZGVFeGNsdWRlKSk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotUmVnaW9uOjpFeGNsdWRlKElOIGNvbnN0IFJlY3QmIHJlY3QpDQotew0KLSAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ29tYmluZVJlZ2lvblJlY3RJKG5hdGl2ZVJlZ2lvbiwgJnJlY3QsIENvbWJpbmVNb2RlRXhjbHVkZSkpOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzIA0KLVJlZ2lvbjo6RXhjbHVkZShJTiBjb25zdCBHcmFwaGljc1BhdGgqIHBhdGgpDQotew0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDb21iaW5lUmVnaW9uUGF0aChuYXRpdmVSZWdpb24sIHBhdGgtPm5hdGl2ZVBhdGgsIENvbWJpbmVNb2RlRXhjbHVkZSkpOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzDQotUmVnaW9uOjpFeGNsdWRlKElOIGNvbnN0IFJlZ2lvbiogcmVnaW9uKQ0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ29tYmluZVJlZ2lvblJlZ2lvbihuYXRpdmVSZWdpb24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb24tPm5hdGl2ZVJlZ2lvbiwgQ29tYmluZU1vZGVFeGNsdWRlKSk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotUmVnaW9uOjpDb21wbGVtZW50KElOIGNvbnN0IFJlY3RGJiByZWN0KQ0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ29tYmluZVJlZ2lvblJlY3QobmF0aXZlUmVnaW9uLCAmcmVjdCwgQ29tYmluZU1vZGVDb21wbGVtZW50KSk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotUmVnaW9uOjpDb21wbGVtZW50KElOIGNvbnN0IFJlY3QmIHJlY3QpDQotew0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDb21iaW5lUmVnaW9uUmVjdEkobmF0aXZlUmVnaW9uLCAmcmVjdCwgQ29tYmluZU1vZGVDb21wbGVtZW50KSk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotUmVnaW9uOjpDb21wbGVtZW50KElOIGNvbnN0IEdyYXBoaWNzUGF0aCogcGF0aCkNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENvbWJpbmVSZWdpb25QYXRoKG5hdGl2ZVJlZ2lvbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLT5uYXRpdmVQYXRoLCBDb21iaW5lTW9kZUNvbXBsZW1lbnQpKTsNCi19DQotDQotaW5saW5lIFN0YXR1cyANCi1SZWdpb246OkNvbXBsZW1lbnQoSU4gY29uc3QgUmVnaW9uKiByZWdpb24pDQotew0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDb21iaW5lUmVnaW9uUmVnaW9uKG5hdGl2ZVJlZ2lvbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbi0+bmF0aXZlUmVnaW9uLCBDb21iaW5lTW9kZUNvbXBsZW1lbnQpKTsNCi19DQotDQotLyoqDQotICogVHJhbnNmb3JtIG9wZXJhdGlvbnMNCi0gKi8NCi1pbmxpbmUgU3RhdHVzIA0KLVJlZ2lvbjo6VHJhbnNsYXRlKElOIFJFQUwgZHgsIA0KLSAgICAgICAgICAgICAgICAgIElOIFJFQUwgZHkpDQotew0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBUcmFuc2xhdGVSZWdpb24obmF0aXZlUmVnaW9uLCBkeCwgZHkpKTsNCi19DQotDQotaW5saW5lIFN0YXR1cyANCi1SZWdpb246OlRyYW5zbGF0ZShJTiBJTlQgZHgsIA0KLSAgICAgICAgICAgICAgICAgIElOIElOVCBkeSkNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFRyYW5zbGF0ZVJlZ2lvbkkobmF0aXZlUmVnaW9uLCBkeCwgZHkpKTsNCi19DQotDQotaW5saW5lIFN0YXR1cyANCi1SZWdpb246OlRyYW5zZm9ybShJTiBjb25zdCBNYXRyaXgqIG1hdHJpeCkNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFRyYW5zZm9ybVJlZ2lvbihuYXRpdmVSZWdpb24sIG1hdHJpeC0+bmF0aXZlTWF0cml4KSk7DQotfQ0KLQ0KLS8qKg0KLSAqIEdldCByZWdpb24gYXR0cmlidXRlcw0KLSAqLw0KLWlubGluZSBTdGF0dXMgDQotUmVnaW9uOjpHZXRCb3VuZHMoT1VUIFJlY3RGKiByZWN0LA0KLSAgICAgICAgICAgICAgICAgIElOIGNvbnN0IEdyYXBoaWNzKiBnKSBjb25zdA0KLXsNCi0gICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UmVnaW9uQm91bmRzKG5hdGl2ZVJlZ2lvbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLT5uYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0KSk7DQotfQ0KLQ0KLWlubGluZSBTdGF0dXMgDQotUmVnaW9uOjpHZXRCb3VuZHMoT1VUIFJlY3QqIHJlY3QsDQotICAgICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcpIGNvbnN0DQotew0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRSZWdpb25Cb3VuZHNJKG5hdGl2ZVJlZ2lvbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLT5uYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0KSk7DQotfQ0KLQ0KLWlubGluZSBIUkdODQotUmVnaW9uOjpHZXRIUkdOKElOIGNvbnN0IEdyYXBoaWNzKiBnKSBjb25zdA0KLXsNCi0gICAgSFJHTiBocmduOw0KLQ0KLSAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFJlZ2lvbkhSZ24obmF0aXZlUmVnaW9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZy0+bmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaHJnbikpOw0KLQ0KLSAgICByZXR1cm4gaHJnbjsNCi19DQotDQotaW5saW5lIEJPT0wgDQotUmVnaW9uOjpJc0VtcHR5KElOIGNvbnN0IEdyYXBoaWNzICpnKSBjb25zdA0KLXsNCi0gICAgQk9PTCBib29sbiA9IEZBTFNFOw0KLSAgIA0KLSAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcElzRW1wdHlSZWdpb24obmF0aXZlUmVnaW9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZy0+bmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYm9vbG4pKTsNCi0NCi0gICAgcmV0dXJuIGJvb2xuOw0KLX0NCi0NCi1pbmxpbmUgQk9PTCANCi1SZWdpb246OklzSW5maW5pdGUoSU4gY29uc3QgR3JhcGhpY3MgKmcpIGNvbnN0DQotew0KLSAgICBCT09MIGJvb2xuID0gRkFMU0U7DQotDQotICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSXNJbmZpbml0ZVJlZ2lvbihuYXRpdmVSZWdpb24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGctPm5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYm9vbG4pKTsNCi0NCi0gICAgcmV0dXJuIGJvb2xuOw0KLX0NCi0NCi1pbmxpbmUgQk9PTCANCi1SZWdpb246OkVxdWFscyhJTiBjb25zdCBSZWdpb24qIHJlZ2lvbiwgDQotICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcpIGNvbnN0DQotew0KLSAgICBCT09MIGJvb2xuID0gRkFMU0U7DQotDQotICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSXNFcXVhbFJlZ2lvbihuYXRpdmVSZWdpb24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbi0+bmF0aXZlUmVnaW9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLT5uYXRpdmVHcmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJvb2xuKSk7DQotICAgIHJldHVybiBib29sbjsNCi19DQotDQotLy8gR2V0IHRoZSBzaXplIG9mIHRoZSBidWZmZXIgbmVlZGVkIGZvciB0aGUgR2V0RGF0YSBtZXRob2QNCi1pbmxpbmUgVUlOVCANCi1SZWdpb246OkdldERhdGFTaXplKCkgY29uc3QNCi17DQotICAgIFVJTlQgICAgIGJ1ZmZlclNpemUgPSAwOw0KLSAgICANCi0gICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRSZWdpb25EYXRhU2l6ZShuYXRpdmVSZWdpb24sICZidWZmZXJTaXplKSk7DQotICAgIA0KLSAgICByZXR1cm4gYnVmZmVyU2l6ZTsNCi19DQotDQotLy8gYnVmZmVyICAgICAtIHdoZXJlIHRvIHB1dCB0aGUgZGF0YQ0KLS8vIGJ1ZmZlclNpemUgLSBob3cgYmlnIHRoZSBidWZmZXIgaXMgKHNob3VsZCBiZSBhdCBsZWFzdCBhcyBiaWcgYXMgR2V0RGF0YVNpemUoKSkNCi0vLyBzaXplRmlsbGVkIC0gaWYgbm90IE5VTEwsIHRoaXMgaXMgYW4gT1VUIHBhcmFtIHRoYXQgc2F5cyBob3cgbWFueSBieXRlcw0KLS8vICAgICAgICAgICAgICBvZiBkYXRhIHdlcmUgd3JpdHRlbiB0byB0aGUgYnVmZmVyLg0KLWlubGluZSBTdGF0dXMgDQotUmVnaW9uOjpHZXREYXRhKE9VVCBCWVRFKiBidWZmZXIsIA0KLSAgICAgICAgICAgICAgICBJTiBVSU5UIGJ1ZmZlclNpemUsIA0KLSAgICAgICAgICAgICAgICBPVVQgVUlOVCogc2l6ZUZpbGxlZCkgY29uc3QNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFJlZ2lvbkRhdGEobmF0aXZlUmVnaW9uLCBidWZmZXIsIGJ1ZmZlclNpemUsIHNpemVGaWxsZWQpKTsNCi19DQotDQotLyoqDQotICogSGl0IHRlc3Rpbmcgb3BlcmF0aW9ucw0KLSAqLw0KLWlubGluZSBCT09MIA0KLVJlZ2lvbjo6SXNWaXNpYmxlKElOIGNvbnN0IFBvaW50RiYgcG9pbnQsIA0KLSAgICAgICAgICAgICAgICAgIElOIGNvbnN0IEdyYXBoaWNzKiBnKSBjb25zdA0KLXsNCi0gICAgQk9PTCBib29sbiA9IEZBTFNFOw0KLQ0KLSAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcElzVmlzaWJsZVJlZ2lvblBvaW50KG5hdGl2ZVJlZ2lvbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQuWCwgcG9pbnQuWSwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnID09IE5VTEwpID8gTlVMTCA6IGctPm5hdGl2ZUdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYm9vbG4pKTsNCi0gICAgcmV0dXJuIGJvb2xuOw0KLX0NCi0NCi1pbmxpbmUgQk9PTCANCi1SZWdpb246OklzVmlzaWJsZShJTiBjb25zdCBSZWN0RiYgcmVjdCwgDQotICAgICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcpIGNvbnN0DQotew0KLSAgICBCT09MIGJvb2xuID0gRkFMU0U7DQotDQotICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSXNWaXNpYmxlUmVnaW9uUmVjdChuYXRpdmVSZWdpb24sIHJlY3QuWCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5ZLCByZWN0LldpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LkhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGcgPT0gTlVMTCkgPyBOVUxMIDogZy0+bmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZib29sbikpOw0KLSAgICByZXR1cm4gYm9vbG47DQotfQ0KLQ0KLWlubGluZSBCT09MIA0KLVJlZ2lvbjo6SXNWaXNpYmxlKElOIGNvbnN0IFBvaW50JiBwb2ludCwgDQotICAgICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcpIGNvbnN0DQotew0KLSAgICBCT09MIGJvb2xuID0gRkFMU0U7DQotDQotDQotICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSXNWaXNpYmxlUmVnaW9uUG9pbnRJKG5hdGl2ZVJlZ2lvbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludC5YLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50LlksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGcgPT0gTlVMTCkgPyBOVUxMIDogZy0+bmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJvb2xuKSk7DQotICAgIHJldHVybiBib29sbjsNCi19DQotDQotaW5saW5lIEJPT0wgDQotUmVnaW9uOjpJc1Zpc2libGUoSU4gY29uc3QgUmVjdCYgcmVjdCwgDQotICAgICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcpIGNvbnN0DQotew0KLSAgICBCT09MIGJvb2xuID0gRkFMU0U7DQotDQotICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSXNWaXNpYmxlUmVnaW9uUmVjdEkobmF0aXZlUmVnaW9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5YLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5ZLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5XaWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuSGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGcgPT0gTlVMTCkgPyBOVUxMIDogZy0+bmF0aXZlR3JhcGhpY3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYm9vbG4pKTsNCi0gICAgcmV0dXJuIGJvb2xuOw0KLX0NCi0NCi1pbmxpbmUgVUlOVCANCi1SZWdpb246OkdldFJlZ2lvblNjYW5zQ291bnQoSU4gY29uc3QgTWF0cml4KiBtYXRyaXgpIGNvbnN0DQotew0KLSAgICBVSU5UIGNvdW50ID0gMDsNCi0NCi0gICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRSZWdpb25TY2Fuc0NvdW50KG5hdGl2ZVJlZ2lvbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb3VudCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+bmF0aXZlTWF0cml4KSk7DQotICAgIHJldHVybiBjb3VudDsNCi19DQotDQotaW5saW5lIFN0YXR1cyANCi1SZWdpb246OkdldFJlZ2lvblNjYW5zKA0KLSAgICBJTiBjb25zdCBNYXRyaXgqIG1hdHJpeCwNCi0gICAgT1VUIFJlY3RGKiByZWN0cywNCi0gICAgSU4gT1VUIElOVCogY291bnQpIGNvbnN0DQotew0KLSAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRSZWdpb25TY2FucyhuYXRpdmVSZWdpb24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT5uYXRpdmVNYXRyaXgpKTsNCi19DQotDQotLy8gSWYgcmVjdHMgaXMgTlVMTCwgcmV0dXJuIHRoZSBjb3VudCBvZiByZWN0cyBpbiB0aGUgcmVnaW9uLg0KLS8vIE90aGVyd2lzZSwgYXNzdW1lIHJlY3RzIGlzIGJpZyBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIHJlZ2lvbiByZWN0cw0KLS8vIGFuZCBmaWxsIHRoZW0gaW4gYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mIHJlY3RzIGZpbGxlZCBpbi4NCi0vLyBUaGUgcmVjdHMgYXJlIHJldHVybmVkIGluIHRoZSB1bml0cyBzcGVjaWZpZWQgYnkgdGhlIG1hdHJpeA0KLS8vICh3aGljaCBpcyB0eXBpY2FsbHkgYSB3b3JsZC10by1kZXZpY2UgdHJhbnNmb3JtKS4NCi0vLyBOb3RlIHRoYXQgdGhlIG51bWJlciBvZiByZWN0cyByZXR1cm5lZCBjYW4gdmFyeSwgZGVwZW5kaW5nIG9uIHRoZQ0KLS8vIG1hdHJpeCB0aGF0IGlzIHVzZWQuDQotaW5saW5lIFN0YXR1cyANCi1SZWdpb246OkdldFJlZ2lvblNjYW5zKA0KLSAgICBJTiBjb25zdCBNYXRyaXgqIG1hdHJpeCwNCi0gICAgT1VUIFJlY3QqIHJlY3RzLCAgICAgICAvLyBOVUxMIHRvIGp1c3QgZ2V0IHRoZSBjb3VudA0KLSAgICBJTiBPVVQgSU5UKiBjb3VudCkgY29uc3QNCi17DQotICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFJlZ2lvblNjYW5zSShuYXRpdmVSZWdpb24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT5uYXRpdmVNYXRyaXgpKTsNCi19DQotDQotLy8gcHJvdGVjdGVkIG1ldGhvZA0KLWlubGluZSBSZWdpb246OlJlZ2lvbihHcFJlZ2lvbiogbmF0aXZlUmVnaW9uKQ0KLXsNCi0gICAgU2V0TmF0aXZlUmVnaW9uKG5hdGl2ZVJlZ2lvbik7DQotfQ0KLQ0KLS8vIHByb3RlY3RlZCBtZXRob2QNCi1pbmxpbmUgVk9JRCBSZWdpb246OlNldE5hdGl2ZVJlZ2lvbihHcFJlZ2lvbiogbmF0aXZlUmVnaW9uKQ0KLXsNCi0gICAgdGhpcy0+bmF0aXZlUmVnaW9uID0gbmF0aXZlUmVnaW9uOw0KLX0NCi0NCi1pbmxpbmUgU3RhdHVzIFJlZ2lvbjo6R2V0TGFzdFN0YXR1cygpIGNvbnN0DQotew0KLSAgICBTdGF0dXMgbGFzdFN0YXR1cyA9IGxhc3RSZXN1bHQ7DQotICAgIGxhc3RSZXN1bHQgPSBPazsNCi0NCi0gICAgcmV0dXJuIGxhc3RTdGF0dXM7DQotfQ0KLQ0KLSNlbmRpZiAvLyAhX0dESVBMVVNSRUdJT05fSA0KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyoKKyogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsIE1pY3Jvc29mdCBDb3JwLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyoKKyogTW9kdWxlIE5hbWU6CisqCisqICAgR2RpcGx1c1JlZ2lvbi5oCisqCisqIEFic3RyYWN0OgorKgorKiAgIFJlZ2lvbiBBUEkgcmVsYXRlZCBkZWNsYXJhdGlvbnMKKyoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfR0RJUExVU1JFR0lPTl9ICisjZGVmaW5lIF9HRElQTFVTUkVHSU9OX0gKKworLyoqCisgKiBDb25zdHJ1Y3QgYSBuZXcgcmVnaW9uIG9iamVjdAorICovCisKK2lubGluZSAKK1JlZ2lvbjo6UmVnaW9uKCkKK3sKKyAgICBHcFJlZ2lvbiAqcmVnaW9uID0gTlVMTDsKKworICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlUmVnaW9uKCZyZWdpb24pOworCisgICAgU2V0TmF0aXZlUmVnaW9uKHJlZ2lvbik7Cit9CisKK2lubGluZSAKK1JlZ2lvbjo6UmVnaW9uKElOIGNvbnN0IFJlY3RGJiByZWN0KQoreworICAgIEdwUmVnaW9uICpyZWdpb24gPSBOVUxMOworCisgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVSZWdpb25SZWN0KCZyZWN0LCAmcmVnaW9uKTsKKworICAgIFNldE5hdGl2ZVJlZ2lvbihyZWdpb24pOworfQorCitpbmxpbmUgCitSZWdpb246OlJlZ2lvbihJTiBjb25zdCBSZWN0JiByZWN0KQoreworICAgIEdwUmVnaW9uICpyZWdpb24gPSBOVUxMOworCisgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVSZWdpb25SZWN0SSgmcmVjdCwgJnJlZ2lvbik7CisKKyAgICBTZXROYXRpdmVSZWdpb24ocmVnaW9uKTsKK30KKworaW5saW5lIAorUmVnaW9uOjpSZWdpb24oSU4gY29uc3QgR3JhcGhpY3NQYXRoKiBwYXRoKQoreworICAgIEdwUmVnaW9uICpyZWdpb24gPSBOVUxMOworCisgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVSZWdpb25QYXRoKHBhdGgtPm5hdGl2ZVBhdGgsICZyZWdpb24pOworCisgICAgU2V0TmF0aXZlUmVnaW9uKHJlZ2lvbik7Cit9CisKK2lubGluZSAKK1JlZ2lvbjo6UmVnaW9uKElOIGNvbnN0IEJZVEUqIHJlZ2lvbkRhdGEsIElOIElOVCBzaXplKQoreworICAgIEdwUmVnaW9uICpyZWdpb24gPSBOVUxMOworCisgICAgbGFzdFJlc3VsdCA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVSZWdpb25SZ25EYXRhKHJlZ2lvbkRhdGEsIHNpemUsICZyZWdpb24pOworCisgICAgU2V0TmF0aXZlUmVnaW9uKHJlZ2lvbik7Cit9CisKK2lubGluZSAKK1JlZ2lvbjo6UmVnaW9uKElOIEhSR04gaFJnbikKK3sKKyAgICBHcFJlZ2lvbiAqcmVnaW9uID0gTlVMTDsKKworICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlUmVnaW9uSHJnbihoUmduLCAmcmVnaW9uKTsKKworICAgIFNldE5hdGl2ZVJlZ2lvbihyZWdpb24pOworfQorCitpbmxpbmUgCitSZWdpb24qIFJlZ2lvbjo6RnJvbUhSR04oSU4gSFJHTiBoUmduKQoreworICAgIEdwUmVnaW9uICpyZWdpb24gPSBOVUxMOworCisgICAgaWYgKERsbEV4cG9ydHM6OkdkaXBDcmVhdGVSZWdpb25IcmduKGhSZ24sICZyZWdpb24pID09IE9rKQorICAgIHsKKyAgICAgICAgUmVnaW9uKiBuZXdSZWdpb24gPSBuZXcgUmVnaW9uKHJlZ2lvbik7CisKKyAgICAgICAgaWYgKG5ld1JlZ2lvbiA9PSBOVUxMKSAKKyAgICAgICAgeworICAgICAgICAgICAgRGxsRXhwb3J0czo6R2RpcERlbGV0ZVJlZ2lvbihyZWdpb24pOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ld1JlZ2lvbjsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gTlVMTDsKK30KKworaW5saW5lIAorUmVnaW9uOjp+UmVnaW9uKCkKK3sKKyAgICBEbGxFeHBvcnRzOjpHZGlwRGVsZXRlUmVnaW9uKG5hdGl2ZVJlZ2lvbik7Cit9CisKKy8qKgorICogTWFrZSBhIGNvcHkgb2YgdGhlIHJlZ2lvbiBvYmplY3QKKyAqLworaW5saW5lIFJlZ2lvbiogCitSZWdpb246OkNsb25lKCkgY29uc3QKK3sKKyAgICBHcFJlZ2lvbiAqcmVnaW9uID0gTlVMTDsKKworICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ2xvbmVSZWdpb24obmF0aXZlUmVnaW9uLCAmcmVnaW9uKSk7CisKKyAgICByZXR1cm4gbmV3IFJlZ2lvbihyZWdpb24pOworfQorCitpbmxpbmUgU3RhdHVzIAorUmVnaW9uOjpNYWtlSW5maW5pdGUoKQoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEluZmluaXRlKG5hdGl2ZVJlZ2lvbikpOworfQorCitpbmxpbmUgU3RhdHVzIAorUmVnaW9uOjpNYWtlRW1wdHkoKQoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEVtcHR5KG5hdGl2ZVJlZ2lvbikpOworfQorCisvKioKKyAqIFJlZ2lvbiBvcGVyYXRpb25zCisgKi8KK2lubGluZSBTdGF0dXMgCitSZWdpb246OkludGVyc2VjdChJTiBjb25zdCBSZWN0RiYgcmVjdCkKK3sKKyAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDb21iaW5lUmVnaW9uUmVjdChuYXRpdmVSZWdpb24sICZyZWN0LCBDb21iaW5lTW9kZUludGVyc2VjdCkpOworfQorCitpbmxpbmUgU3RhdHVzIAorUmVnaW9uOjpJbnRlcnNlY3QoSU4gY29uc3QgUmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDb21iaW5lUmVnaW9uUmVjdEkobmF0aXZlUmVnaW9uLCAmcmVjdCwgQ29tYmluZU1vZGVJbnRlcnNlY3QpKTsKK30KKworaW5saW5lIFN0YXR1cyAKK1JlZ2lvbjo6SW50ZXJzZWN0KElOIGNvbnN0IEdyYXBoaWNzUGF0aCogcGF0aCkKK3sKKyAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDb21iaW5lUmVnaW9uUGF0aChuYXRpdmVSZWdpb24sIHBhdGgtPm5hdGl2ZVBhdGgsIENvbWJpbmVNb2RlSW50ZXJzZWN0KSk7Cit9CisKK2lubGluZSBTdGF0dXMgCitSZWdpb246OkludGVyc2VjdChJTiBjb25zdCBSZWdpb24qIHJlZ2lvbikKK3sKKyAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDb21iaW5lUmVnaW9uUmVnaW9uKG5hdGl2ZVJlZ2lvbiwgcmVnaW9uLT5uYXRpdmVSZWdpb24sIENvbWJpbmVNb2RlSW50ZXJzZWN0KSk7Cit9CisKK2lubGluZSBTdGF0dXMgCitSZWdpb246OlVuaW9uKElOIGNvbnN0IFJlY3RGJiByZWN0KQoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENvbWJpbmVSZWdpb25SZWN0KG5hdGl2ZVJlZ2lvbiwgJnJlY3QsIENvbWJpbmVNb2RlVW5pb24pKTsKK30KKworaW5saW5lIFN0YXR1cyAKK1JlZ2lvbjo6VW5pb24oSU4gY29uc3QgUmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDb21iaW5lUmVnaW9uUmVjdEkobmF0aXZlUmVnaW9uLCAmcmVjdCwgQ29tYmluZU1vZGVVbmlvbikpOworfQorCitpbmxpbmUgU3RhdHVzIAorUmVnaW9uOjpVbmlvbihJTiBjb25zdCBHcmFwaGljc1BhdGgqIHBhdGgpCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ29tYmluZVJlZ2lvblBhdGgobmF0aXZlUmVnaW9uLCBwYXRoLT5uYXRpdmVQYXRoLCBDb21iaW5lTW9kZVVuaW9uKSk7Cit9CisKK2lubGluZSBTdGF0dXMgCitSZWdpb246OlVuaW9uKElOIGNvbnN0IFJlZ2lvbiogcmVnaW9uKQoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENvbWJpbmVSZWdpb25SZWdpb24obmF0aXZlUmVnaW9uLCByZWdpb24tPm5hdGl2ZVJlZ2lvbiwgQ29tYmluZU1vZGVVbmlvbikpOworfQorCitpbmxpbmUgU3RhdHVzIAorUmVnaW9uOjpYb3IoSU4gY29uc3QgUmVjdEYmIHJlY3QpCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ29tYmluZVJlZ2lvblJlY3QobmF0aXZlUmVnaW9uLCAmcmVjdCwgQ29tYmluZU1vZGVYb3IpKTsKK30KKworaW5saW5lIFN0YXR1cyAKK1JlZ2lvbjo6WG9yKElOIGNvbnN0IFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ29tYmluZVJlZ2lvblJlY3RJKG5hdGl2ZVJlZ2lvbiwgJnJlY3QsIENvbWJpbmVNb2RlWG9yKSk7Cit9CisKK2lubGluZSBTdGF0dXMgCitSZWdpb246OlhvcihJTiBjb25zdCBHcmFwaGljc1BhdGgqIHBhdGgpCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ29tYmluZVJlZ2lvblBhdGgobmF0aXZlUmVnaW9uLCBwYXRoLT5uYXRpdmVQYXRoLCBDb21iaW5lTW9kZVhvcikpOworfQorCitpbmxpbmUgU3RhdHVzIAorUmVnaW9uOjpYb3IoSU4gY29uc3QgUmVnaW9uKiByZWdpb24pCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ29tYmluZVJlZ2lvblJlZ2lvbihuYXRpdmVSZWdpb24sIHJlZ2lvbi0+bmF0aXZlUmVnaW9uLCBDb21iaW5lTW9kZVhvcikpOworfQorCitpbmxpbmUgU3RhdHVzIAorUmVnaW9uOjpFeGNsdWRlKElOIGNvbnN0IFJlY3RGJiByZWN0KQoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENvbWJpbmVSZWdpb25SZWN0KG5hdGl2ZVJlZ2lvbiwgJnJlY3QsIENvbWJpbmVNb2RlRXhjbHVkZSkpOworfQorCitpbmxpbmUgU3RhdHVzIAorUmVnaW9uOjpFeGNsdWRlKElOIGNvbnN0IFJlY3QmIHJlY3QpCit7CisgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENvbWJpbmVSZWdpb25SZWN0SShuYXRpdmVSZWdpb24sICZyZWN0LCBDb21iaW5lTW9kZUV4Y2x1ZGUpKTsKK30KKworaW5saW5lIFN0YXR1cyAKK1JlZ2lvbjo6RXhjbHVkZShJTiBjb25zdCBHcmFwaGljc1BhdGgqIHBhdGgpCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ29tYmluZVJlZ2lvblBhdGgobmF0aXZlUmVnaW9uLCBwYXRoLT5uYXRpdmVQYXRoLCBDb21iaW5lTW9kZUV4Y2x1ZGUpKTsKK30KKworaW5saW5lIFN0YXR1cworUmVnaW9uOjpFeGNsdWRlKElOIGNvbnN0IFJlZ2lvbiogcmVnaW9uKQoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENvbWJpbmVSZWdpb25SZWdpb24obmF0aXZlUmVnaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb24tPm5hdGl2ZVJlZ2lvbiwgQ29tYmluZU1vZGVFeGNsdWRlKSk7Cit9CisKK2lubGluZSBTdGF0dXMgCitSZWdpb246OkNvbXBsZW1lbnQoSU4gY29uc3QgUmVjdEYmIHJlY3QpCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwQ29tYmluZVJlZ2lvblJlY3QobmF0aXZlUmVnaW9uLCAmcmVjdCwgQ29tYmluZU1vZGVDb21wbGVtZW50KSk7Cit9CisKK2lubGluZSBTdGF0dXMgCitSZWdpb246OkNvbXBsZW1lbnQoSU4gY29uc3QgUmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBDb21iaW5lUmVnaW9uUmVjdEkobmF0aXZlUmVnaW9uLCAmcmVjdCwgQ29tYmluZU1vZGVDb21wbGVtZW50KSk7Cit9CisKK2lubGluZSBTdGF0dXMgCitSZWdpb246OkNvbXBsZW1lbnQoSU4gY29uc3QgR3JhcGhpY3NQYXRoKiBwYXRoKQoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENvbWJpbmVSZWdpb25QYXRoKG5hdGl2ZVJlZ2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgtPm5hdGl2ZVBhdGgsIENvbWJpbmVNb2RlQ29tcGxlbWVudCkpOworfQorCitpbmxpbmUgU3RhdHVzIAorUmVnaW9uOjpDb21wbGVtZW50KElOIGNvbnN0IFJlZ2lvbiogcmVnaW9uKQoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENvbWJpbmVSZWdpb25SZWdpb24obmF0aXZlUmVnaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb24tPm5hdGl2ZVJlZ2lvbiwgQ29tYmluZU1vZGVDb21wbGVtZW50KSk7Cit9CisKKy8qKgorICogVHJhbnNmb3JtIG9wZXJhdGlvbnMKKyAqLworaW5saW5lIFN0YXR1cyAKK1JlZ2lvbjo6VHJhbnNsYXRlKElOIFJFQUwgZHgsIAorICAgICAgICAgICAgICAgICAgSU4gUkVBTCBkeSkKK3sKKyAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBUcmFuc2xhdGVSZWdpb24obmF0aXZlUmVnaW9uLCBkeCwgZHkpKTsKK30KKworaW5saW5lIFN0YXR1cyAKK1JlZ2lvbjo6VHJhbnNsYXRlKElOIElOVCBkeCwgCisgICAgICAgICAgICAgICAgICBJTiBJTlQgZHkpCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwVHJhbnNsYXRlUmVnaW9uSShuYXRpdmVSZWdpb24sIGR4LCBkeSkpOworfQorCitpbmxpbmUgU3RhdHVzIAorUmVnaW9uOjpUcmFuc2Zvcm0oSU4gY29uc3QgTWF0cml4KiBtYXRyaXgpCit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwVHJhbnNmb3JtUmVnaW9uKG5hdGl2ZVJlZ2lvbiwgbWF0cml4LT5uYXRpdmVNYXRyaXgpKTsKK30KKworLyoqCisgKiBHZXQgcmVnaW9uIGF0dHJpYnV0ZXMKKyAqLworaW5saW5lIFN0YXR1cyAKK1JlZ2lvbjo6R2V0Qm91bmRzKE9VVCBSZWN0RiogcmVjdCwKKyAgICAgICAgICAgICAgICAgIElOIGNvbnN0IEdyYXBoaWNzKiBnKSBjb25zdAoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFJlZ2lvbkJvdW5kcyhuYXRpdmVSZWdpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLT5uYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QpKTsKK30KKworaW5saW5lIFN0YXR1cyAKK1JlZ2lvbjo6R2V0Qm91bmRzKE9VVCBSZWN0KiByZWN0LAorICAgICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UmVnaW9uQm91bmRzSShuYXRpdmVSZWdpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLT5uYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QpKTsKK30KKworaW5saW5lIEhSR04KK1JlZ2lvbjo6R2V0SFJHTihJTiBjb25zdCBHcmFwaGljcyogZykgY29uc3QKK3sKKyAgICBIUkdOIGhyZ247CisKKyAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFJlZ2lvbkhSZ24obmF0aXZlUmVnaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLT5uYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhyZ24pKTsKKworICAgIHJldHVybiBocmduOworfQorCitpbmxpbmUgQk9PTCAKK1JlZ2lvbjo6SXNFbXB0eShJTiBjb25zdCBHcmFwaGljcyAqZykgY29uc3QKK3sKKyAgICBCT09MIGJvb2xuID0gRkFMU0U7CisgICAKKyAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcElzRW1wdHlSZWdpb24obmF0aXZlUmVnaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLT5uYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJvb2xuKSk7CisKKyAgICByZXR1cm4gYm9vbG47Cit9CisKK2lubGluZSBCT09MIAorUmVnaW9uOjpJc0luZmluaXRlKElOIGNvbnN0IEdyYXBoaWNzICpnKSBjb25zdAoreworICAgIEJPT0wgYm9vbG4gPSBGQUxTRTsKKworICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSXNJbmZpbml0ZVJlZ2lvbihuYXRpdmVSZWdpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZy0+bmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJvb2xuKSk7CisKKyAgICByZXR1cm4gYm9vbG47Cit9CisKK2lubGluZSBCT09MIAorUmVnaW9uOjpFcXVhbHMoSU4gY29uc3QgUmVnaW9uKiByZWdpb24sIAorICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcpIGNvbnN0Cit7CisgICAgQk9PTCBib29sbiA9IEZBTFNFOworCisgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBJc0VxdWFsUmVnaW9uKG5hdGl2ZVJlZ2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb24tPm5hdGl2ZVJlZ2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLT5uYXRpdmVHcmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYm9vbG4pKTsKKyAgICByZXR1cm4gYm9vbG47Cit9CisKKy8vIEdldCB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIG5lZWRlZCBmb3IgdGhlIEdldERhdGEgbWV0aG9kCitpbmxpbmUgVUlOVCAKK1JlZ2lvbjo6R2V0RGF0YVNpemUoKSBjb25zdAoreworICAgIFVJTlQgICAgIGJ1ZmZlclNpemUgPSAwOworICAgIAorICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UmVnaW9uRGF0YVNpemUobmF0aXZlUmVnaW9uLCAmYnVmZmVyU2l6ZSkpOworICAgIAorICAgIHJldHVybiBidWZmZXJTaXplOworfQorCisvLyBidWZmZXIgICAgIC0gd2hlcmUgdG8gcHV0IHRoZSBkYXRhCisvLyBidWZmZXJTaXplIC0gaG93IGJpZyB0aGUgYnVmZmVyIGlzIChzaG91bGQgYmUgYXQgbGVhc3QgYXMgYmlnIGFzIEdldERhdGFTaXplKCkpCisvLyBzaXplRmlsbGVkIC0gaWYgbm90IE5VTEwsIHRoaXMgaXMgYW4gT1VUIHBhcmFtIHRoYXQgc2F5cyBob3cgbWFueSBieXRlcworLy8gICAgICAgICAgICAgIG9mIGRhdGEgd2VyZSB3cml0dGVuIHRvIHRoZSBidWZmZXIuCitpbmxpbmUgU3RhdHVzIAorUmVnaW9uOjpHZXREYXRhKE9VVCBCWVRFKiBidWZmZXIsIAorICAgICAgICAgICAgICAgIElOIFVJTlQgYnVmZmVyU2l6ZSwgCisgICAgICAgICAgICAgICAgT1VUIFVJTlQqIHNpemVGaWxsZWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0UmVnaW9uRGF0YShuYXRpdmVSZWdpb24sIGJ1ZmZlciwgYnVmZmVyU2l6ZSwgc2l6ZUZpbGxlZCkpOworfQorCisvKioKKyAqIEhpdCB0ZXN0aW5nIG9wZXJhdGlvbnMKKyAqLworaW5saW5lIEJPT0wgCitSZWdpb246OklzVmlzaWJsZShJTiBjb25zdCBQb2ludEYmIHBvaW50LCAKKyAgICAgICAgICAgICAgICAgIElOIGNvbnN0IEdyYXBoaWNzKiBnKSBjb25zdAoreworICAgIEJPT0wgYm9vbG4gPSBGQUxTRTsKKworICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwSXNWaXNpYmxlUmVnaW9uUG9pbnQobmF0aXZlUmVnaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50LlgsIHBvaW50LlksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnID09IE5VTEwpID8gTlVMTCA6IGctPm5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZib29sbikpOworICAgIHJldHVybiBib29sbjsKK30KKworaW5saW5lIEJPT0wgCitSZWdpb246OklzVmlzaWJsZShJTiBjb25zdCBSZWN0RiYgcmVjdCwgCisgICAgICAgICAgICAgICAgICBJTiBjb25zdCBHcmFwaGljcyogZykgY29uc3QKK3sKKyAgICBCT09MIGJvb2xuID0gRkFMU0U7CisKKyAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcElzVmlzaWJsZVJlZ2lvblJlY3QobmF0aXZlUmVnaW9uLCByZWN0LlgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5ZLCByZWN0LldpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnID09IE5VTEwpID8gTlVMTCA6IGctPm5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZib29sbikpOworICAgIHJldHVybiBib29sbjsKK30KKworaW5saW5lIEJPT0wgCitSZWdpb246OklzVmlzaWJsZShJTiBjb25zdCBQb2ludCYgcG9pbnQsIAorICAgICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcpIGNvbnN0Cit7CisgICAgQk9PTCBib29sbiA9IEZBTFNFOworCisKKyAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcElzVmlzaWJsZVJlZ2lvblBvaW50SShuYXRpdmVSZWdpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludC5YLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQuWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnID09IE5VTEwpID8gTlVMTCA6IGctPm5hdGl2ZUdyYXBoaWNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJvb2xuKSk7CisgICAgcmV0dXJuIGJvb2xuOworfQorCitpbmxpbmUgQk9PTCAKK1JlZ2lvbjo6SXNWaXNpYmxlKElOIGNvbnN0IFJlY3QmIHJlY3QsIAorICAgICAgICAgICAgICAgICAgSU4gY29uc3QgR3JhcGhpY3MqIGcpIGNvbnN0Cit7CisgICAgQk9PTCBib29sbiA9IEZBTFNFOworCisgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBJc1Zpc2libGVSZWdpb25SZWN0SShuYXRpdmVSZWdpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5ZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LldpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LkhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGcgPT0gTlVMTCkgPyBOVUxMIDogZy0+bmF0aXZlR3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZib29sbikpOworICAgIHJldHVybiBib29sbjsKK30KKworaW5saW5lIFVJTlQgCitSZWdpb246OkdldFJlZ2lvblNjYW5zQ291bnQoSU4gY29uc3QgTWF0cml4KiBtYXRyaXgpIGNvbnN0Cit7CisgICAgVUlOVCBjb3VudCA9IDA7CisKKyAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFJlZ2lvblNjYW5zQ291bnQobmF0aXZlUmVnaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+bmF0aXZlTWF0cml4KSk7CisgICAgcmV0dXJuIGNvdW50OworfQorCitpbmxpbmUgU3RhdHVzIAorUmVnaW9uOjpHZXRSZWdpb25TY2FucygKKyAgICBJTiBjb25zdCBNYXRyaXgqIG1hdHJpeCwKKyAgICBPVVQgUmVjdEYqIHJlY3RzLAorICAgIElOIE9VVCBJTlQqIGNvdW50KSBjb25zdAoreworICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFJlZ2lvblNjYW5zKG5hdGl2ZVJlZ2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgtPm5hdGl2ZU1hdHJpeCkpOworfQorCisvLyBJZiByZWN0cyBpcyBOVUxMLCByZXR1cm4gdGhlIGNvdW50IG9mIHJlY3RzIGluIHRoZSByZWdpb24uCisvLyBPdGhlcndpc2UsIGFzc3VtZSByZWN0cyBpcyBiaWcgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZSByZWdpb24gcmVjdHMKKy8vIGFuZCBmaWxsIHRoZW0gaW4gYW5kIHJldHVybiB0aGUgbnVtYmVyIG9mIHJlY3RzIGZpbGxlZCBpbi4KKy8vIFRoZSByZWN0cyBhcmUgcmV0dXJuZWQgaW4gdGhlIHVuaXRzIHNwZWNpZmllZCBieSB0aGUgbWF0cml4CisvLyAod2hpY2ggaXMgdHlwaWNhbGx5IGEgd29ybGQtdG8tZGV2aWNlIHRyYW5zZm9ybSkuCisvLyBOb3RlIHRoYXQgdGhlIG51bWJlciBvZiByZWN0cyByZXR1cm5lZCBjYW4gdmFyeSwgZGVwZW5kaW5nIG9uIHRoZQorLy8gbWF0cml4IHRoYXQgaXMgdXNlZC4KK2lubGluZSBTdGF0dXMgCitSZWdpb246OkdldFJlZ2lvblNjYW5zKAorICAgIElOIGNvbnN0IE1hdHJpeCogbWF0cml4LAorICAgIE9VVCBSZWN0KiByZWN0cywgICAgICAgLy8gTlVMTCB0byBqdXN0IGdldCB0aGUgY291bnQKKyAgICBJTiBPVVQgSU5UKiBjb3VudCkgY29uc3QKK3sKKyAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRSZWdpb25TY2Fuc0kobmF0aXZlUmVnaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+bmF0aXZlTWF0cml4KSk7Cit9CisKKy8vIHByb3RlY3RlZCBtZXRob2QKK2lubGluZSBSZWdpb246OlJlZ2lvbihHcFJlZ2lvbiogbmF0aXZlUmVnaW9uKQoreworICAgIFNldE5hdGl2ZVJlZ2lvbihuYXRpdmVSZWdpb24pOworfQorCisvLyBwcm90ZWN0ZWQgbWV0aG9kCitpbmxpbmUgVk9JRCBSZWdpb246OlNldE5hdGl2ZVJlZ2lvbihHcFJlZ2lvbiogbmF0aXZlUmVnaW9uKQoreworICAgIHRoaXMtPm5hdGl2ZVJlZ2lvbiA9IG5hdGl2ZVJlZ2lvbjsKK30KKworaW5saW5lIFN0YXR1cyBSZWdpb246OkdldExhc3RTdGF0dXMoKSBjb25zdAoreworICAgIFN0YXR1cyBsYXN0U3RhdHVzID0gbGFzdFJlc3VsdDsKKyAgICBsYXN0UmVzdWx0ID0gT2s7CisKKyAgICByZXR1cm4gbGFzdFN0YXR1czsKK30KKworI2VuZGlmIC8vICFfR0RJUExVU1JFR0lPTl9ICmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzU3RyaW5nRm9ybWF0LmggYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzU3RyaW5nRm9ybWF0LmgKaW5kZXggMWM5ZGRiNS4uYjRlZDQzMSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c1N0cmluZ0Zvcm1hdC5oCisrKyBiL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNTdHJpbmdGb3JtYXQuaApAQCAtMSwzODEgKzEsMzgxIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcDQotKg0KLSogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDAsIE1pY3Jvc29mdCBDb3JwLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0qDQotKiBNb2R1bGUgTmFtZToNCi0qDQotKiAgIEdkaXBsdXNTdHJpbmdGb3JtYXQuaA0KLSoNCi0qIEFic3RyYWN0Og0KLSoNCi0qICAgU3RyaW5nIGZvcm1hdCBzcGVjaWZpY2F0aW9uIGZvciBEcmF3U3RyaW5nIGFuZCB0ZXh0IEFQSXMNCi0qDQotXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLQ0KLSNpZm5kZWYgX0dESVBMVVNTVFJJTkdGT1JNQVRfSA0KLSNkZWZpbmUgX0dESVBMVVNTVFJJTkdGT1JNQVRfSA0KLQ0KLQ0KLWNsYXNzIFN0cmluZ0Zvcm1hdCA6IHB1YmxpYyBHZGlwbHVzQmFzZQ0KLXsNCi1wdWJsaWM6DQotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljczsNCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzUGF0aDsNCi0NCi0NCi0gICAgU3RyaW5nRm9ybWF0KA0KLSAgICAgICAgSU4gSU5UICAgICBmb3JtYXRGbGFncyA9IDAsDQotICAgICAgICBJTiBMQU5HSUQgIGxhbmd1YWdlID0gTEFOR19ORVVUUkFMDQotICAgICkNCi0gICAgew0KLSAgICAgICAgbmF0aXZlRm9ybWF0ID0gTlVMTDsNCi0gICAgICAgIGxhc3RFcnJvciA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVTdHJpbmdGb3JtYXQoDQotICAgICAgICAgICAgZm9ybWF0RmxhZ3MsDQotICAgICAgICAgICAgbGFuZ3VhZ2UsDQotICAgICAgICAgICAgJm5hdGl2ZUZvcm1hdA0KLSAgICAgICAgKTsNCi0gICAgfQ0KLQ0KLSAgICBzdGF0aWMgY29uc3QgU3RyaW5nRm9ybWF0ICpHZW5lcmljRGVmYXVsdCgpOw0KLSAgICBzdGF0aWMgY29uc3QgU3RyaW5nRm9ybWF0ICpHZW5lcmljVHlwb2dyYXBoaWMoKTsNCi0NCi0gICAgLy8gQ29uc3RydWN0b3IgYmFzZWQgb24gZXhpc3Rpbmcgc3RyaW5nIGZvcm1hdA0KLQ0KLSAgICBTdHJpbmdGb3JtYXQoDQotICAgICAgICBJTiBjb25zdCBTdHJpbmdGb3JtYXQgKmZvcm1hdA0KLSAgICApDQotICAgIHsNCi0gICAgICAgIG5hdGl2ZUZvcm1hdCA9IE5VTEw7DQotICAgICAgICBsYXN0RXJyb3IgPSBEbGxFeHBvcnRzOjpHZGlwQ2xvbmVTdHJpbmdGb3JtYXQoDQotICAgICAgICAgICAgZm9ybWF0ID8gZm9ybWF0LT5uYXRpdmVGb3JtYXQgOiBOVUxMLA0KLSAgICAgICAgICAgICZuYXRpdmVGb3JtYXQNCi0gICAgICAgICk7DQotICAgIH0NCi0NCi0gICAgU3RyaW5nRm9ybWF0ICpDbG9uZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIEdwU3RyaW5nRm9ybWF0ICpjbG9uZWRTdHJpbmdGb3JtYXQgPSBOVUxMOw0KLQ0KLSAgICAgICAgbGFzdEVycm9yID0gRGxsRXhwb3J0czo6R2RpcENsb25lU3RyaW5nRm9ybWF0KA0KLSAgICAgICAgICAgIG5hdGl2ZUZvcm1hdCwNCi0gICAgICAgICAgICAmY2xvbmVkU3RyaW5nRm9ybWF0DQotICAgICAgICApOw0KLQ0KLSAgICAgICAgaWYgKGxhc3RFcnJvciA9PSBPaykNCi0gICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ0Zvcm1hdChjbG9uZWRTdHJpbmdGb3JtYXQsIGxhc3RFcnJvcik7DQotICAgICAgICBlbHNlDQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0NCi0gICAgflN0cmluZ0Zvcm1hdCgpDQotICAgIHsNCi0gICAgICAgIERsbEV4cG9ydHM6OkdkaXBEZWxldGVTdHJpbmdGb3JtYXQobmF0aXZlRm9ybWF0KTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0Rm9ybWF0RmxhZ3MoSU4gSU5UIGZsYWdzKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRTdHJpbmdGb3JtYXRGbGFncygNCi0gICAgICAgICAgICBuYXRpdmVGb3JtYXQsDQotICAgICAgICAgICAgZmxhZ3MNCi0gICAgICAgICkpOw0KLSAgICB9DQotDQotICAgIElOVCBHZXRGb3JtYXRGbGFncygpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIElOVCBmbGFnczsNCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0U3RyaW5nRm9ybWF0RmxhZ3MobmF0aXZlRm9ybWF0LCAmZmxhZ3MpKTsNCi0gICAgICAgIHJldHVybiBmbGFnczsNCi0gICAgfQ0KLQ0KLSNpZm5kZWYgRENSX1VTRV9ORVdfMTUyMTU0DQotICAgIFN0YXR1cyBTZXRMaW5lU3BhY2luZygNCi0gICAgICAgIElOIFJFQUwgICAgICAgIGFtb3VudCA9IDEuMGYsDQotICAgICAgICBJTiBMaW5lU3BhY2luZyBtZXRob2QgPSBMaW5lU3BhY2luZ1JlY29tbWVuZGVkDQotICAgICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0U3RyaW5nRm9ybWF0TGluZVNwYWNpbmcoDQotICAgICAgICAgICAgbmF0aXZlRm9ybWF0LA0KLSAgICAgICAgICAgIGFtb3VudCwNCi0gICAgICAgICAgICBtZXRob2QNCi0gICAgICAgICkpOw0KLSAgICB9DQotI2VuZGlmDQotDQotICAgIFN0YXR1cyBTZXRBbGlnbm1lbnQoSU4gU3RyaW5nQWxpZ25tZW50IGFsaWduKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRTdHJpbmdGb3JtYXRBbGlnbigNCi0gICAgICAgICAgICBuYXRpdmVGb3JtYXQsDQotICAgICAgICAgICAgYWxpZ24NCi0gICAgICAgICkpOw0KLSAgICB9DQotDQotICAgIFN0cmluZ0FsaWdubWVudCBHZXRBbGlnbm1lbnQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBTdHJpbmdBbGlnbm1lbnQgYWxpZ25tZW50Ow0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRTdHJpbmdGb3JtYXRBbGlnbigNCi0gICAgICAgICAgICBuYXRpdmVGb3JtYXQsDQotICAgICAgICAgICAgJmFsaWdubWVudA0KLSAgICAgICAgKSk7DQotICAgICAgICByZXR1cm4gYWxpZ25tZW50Ow0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTZXRMaW5lQWxpZ25tZW50KElOIFN0cmluZ0FsaWdubWVudCBhbGlnbikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0U3RyaW5nRm9ybWF0TGluZUFsaWduKA0KLSAgICAgICAgICAgIG5hdGl2ZUZvcm1hdCwNCi0gICAgICAgICAgICBhbGlnbg0KLSAgICAgICAgKSk7DQotICAgIH0NCi0NCi0gICAgU3RyaW5nQWxpZ25tZW50IEdldExpbmVBbGlnbm1lbnQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBTdHJpbmdBbGlnbm1lbnQgYWxpZ25tZW50Ow0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRTdHJpbmdGb3JtYXRMaW5lQWxpZ24oDQotICAgICAgICAgICAgbmF0aXZlRm9ybWF0LA0KLSAgICAgICAgICAgICZhbGlnbm1lbnQNCi0gICAgICAgICkpOw0KLSAgICAgICAgcmV0dXJuIGFsaWdubWVudDsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0SG90a2V5UHJlZml4KElOIEhvdGtleVByZWZpeCBob3RrZXlQcmVmaXgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFN0cmluZ0Zvcm1hdEhvdGtleVByZWZpeCgNCi0gICAgICAgICAgICBuYXRpdmVGb3JtYXQsDQotICAgICAgICAgICAgKElOVClob3RrZXlQcmVmaXgNCi0gICAgICAgICkpOw0KLSAgICB9DQotDQotICAgIEhvdGtleVByZWZpeCBHZXRIb3RrZXlQcmVmaXgoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBIb3RrZXlQcmVmaXggaG90a2V5UHJlZml4Ow0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRTdHJpbmdGb3JtYXRIb3RrZXlQcmVmaXgoDQotICAgICAgICAgICAgbmF0aXZlRm9ybWF0LA0KLSAgICAgICAgICAgIChJTlQqKSZob3RrZXlQcmVmaXgNCi0gICAgICAgICkpOw0KLSAgICAgICAgcmV0dXJuIGhvdGtleVByZWZpeDsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0VGFiU3RvcHMoDQotICAgICAgICBJTiBSRUFMICAgIGZpcnN0VGFiT2Zmc2V0LA0KLSAgICAgICAgSU4gSU5UICAgICBjb3VudCwNCi0gICAgICAgIElOIGNvbnN0IFJFQUwgICAgKnRhYlN0b3BzDQotICAgICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0U3RyaW5nRm9ybWF0VGFiU3RvcHMoDQotICAgICAgICAgICAgbmF0aXZlRm9ybWF0LA0KLSAgICAgICAgICAgIGZpcnN0VGFiT2Zmc2V0LA0KLSAgICAgICAgICAgIGNvdW50LA0KLSAgICAgICAgICAgIHRhYlN0b3BzDQotICAgICAgICApKTsNCi0gICAgfQ0KLQ0KLSAgICBJTlQgR2V0VGFiU3RvcENvdW50KCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgSU5UIGNvdW50Ow0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRTdHJpbmdGb3JtYXRUYWJTdG9wQ291bnQobmF0aXZlRm9ybWF0LCAmY291bnQpKTsNCi0gICAgICAgIHJldHVybiBjb3VudDsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgR2V0VGFiU3RvcHMoDQotICAgICAgICBJTiBJTlQgICAgIGNvdW50LA0KLSAgICAgICAgT1VUIFJFQUwgICAqZmlyc3RUYWJPZmZzZXQsDQotICAgICAgICBPVVQgUkVBTCAgICp0YWJTdG9wcw0KLSAgICApIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFN0cmluZ0Zvcm1hdFRhYlN0b3BzKA0KLSAgICAgICAgICAgIG5hdGl2ZUZvcm1hdCwNCi0gICAgICAgICAgICBjb3VudCwNCi0gICAgICAgICAgICBmaXJzdFRhYk9mZnNldCwNCi0gICAgICAgICAgICB0YWJTdG9wcw0KLSAgICAgICAgKSk7DQotICAgIH0NCi0NCi0jaWZkZWYgRENSX1VTRV9ORVdfMTQ2OTMzDQotICAgIFN0YXR1cyBTZXREaWdpdFN1YnN0aXR1dGlvbigNCi0gICAgICAgIElOIExBTkdJRCAgICAgICAgICAgICAgICBsYW5ndWFnZSwNCi0gICAgICAgIElOIFN0cmluZ0RpZ2l0U3Vic3RpdHV0ZSBzdWJzdGl0dXRlDQotICAgICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0U3RyaW5nRm9ybWF0RGlnaXRTdWJzdGl0dXRpb24oDQotICAgICAgICAgICAgbmF0aXZlRm9ybWF0LA0KLSAgICAgICAgICAgIGxhbmd1YWdlLA0KLSAgICAgICAgICAgIHN1YnN0aXR1dGUNCi0gICAgICAgICkpOw0KLSAgICB9DQotDQotICAgIExBTkdJRCBHZXREaWdpdFN1YnN0aXR1dGlvbkxhbmd1YWdlKA0KLSAgICApIGNvbnN0DQotICAgIHsNCi0gICAgICAgIExBTkdJRCBsYW5ndWFnZTsNCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0U3RyaW5nRm9ybWF0RGlnaXRTdWJzdGl0dXRpb24oDQotICAgICAgICAgICAgbmF0aXZlRm9ybWF0LA0KLSAgICAgICAgICAgICZsYW5ndWFnZSwNCi0gICAgICAgICAgICBOVUxMDQotICAgICAgICApKTsNCi0gICAgICAgIHJldHVybiBsYW5ndWFnZTsNCi0gICAgfQ0KLQ0KLSAgICBTdHJpbmdEaWdpdFN1YnN0aXR1dGUgR2V0RGlnaXRTdWJzdGl0dXRpb25NZXRob2QoDQotICAgICkgY29uc3QNCi0gICAgew0KLSAgICAgICAgU3RyaW5nRGlnaXRTdWJzdGl0dXRlIHN1YnN0aXR1dGU7DQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFN0cmluZ0Zvcm1hdERpZ2l0U3Vic3RpdHV0aW9uKA0KLSAgICAgICAgICAgIG5hdGl2ZUZvcm1hdCwNCi0gICAgICAgICAgICBOVUxMLA0KLSAgICAgICAgICAgICZzdWJzdGl0dXRlDQotICAgICAgICApKTsNCi0gICAgICAgIHJldHVybiBzdWJzdGl0dXRlOw0KLSAgICB9DQotI2VuZGlmIC8vIERDUl9VU0VfTkVXXzE0NjkzMw0KLQ0KLSAgICAvLyBTdHJpbmcgdHJpbW1pbmcuIEhvdyB0byBoYW5kbGUgbW9yZSB0ZXh0IHRoYW4gY2FuIGJlIGRpc3BsYXllZA0KLSAgICAvLyBpbiB0aGUgbGltaXRzIGF2YWlsYWJsZS4NCi0NCi0gICAgU3RhdHVzIFNldFRyaW1taW5nKElOIFN0cmluZ1RyaW1taW5nIHRyaW1taW5nKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRTdHJpbmdGb3JtYXRUcmltbWluZygNCi0gICAgICAgICAgICBuYXRpdmVGb3JtYXQsDQotICAgICAgICAgICAgdHJpbW1pbmcNCi0gICAgICAgICkpOw0KLSAgICB9DQotDQotICAgIFN0cmluZ1RyaW1taW5nIFN0cmluZ0Zvcm1hdDo6R2V0VHJpbW1pbmcoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBTdHJpbmdUcmltbWluZyB0cmltbWluZzsNCi0gICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0U3RyaW5nRm9ybWF0VHJpbW1pbmcoDQotICAgICAgICAgICAgbmF0aXZlRm9ybWF0LA0KLSAgICAgICAgICAgICZ0cmltbWluZw0KLSAgICAgICAgKSk7DQotICAgICAgICByZXR1cm4gdHJpbW1pbmc7DQotICAgIH0NCi0NCi0jaWZkZWYgRENSX1VTRV9ORVdfMTc0MzQwDQotICAgIFN0YXR1cyBTZXRNZWFzdXJhYmxlQ2hhcmFjdGVyUmFuZ2VzKA0KLSAgICAgICAgSU4gSU5UICAgICAgICAgICAgICAgICAgcmFuZ2VDb3VudCwNCi0gICAgICAgIElOIGNvbnN0IENoYXJhY3RlclJhbmdlICpyYW5nZXMNCi0gICAgKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRTdHJpbmdGb3JtYXRNZWFzdXJhYmxlQ2hhcmFjdGVyUmFuZ2VzKA0KLSAgICAgICAgICAgIG5hdGl2ZUZvcm1hdCwNCi0gICAgICAgICAgICByYW5nZUNvdW50LA0KLSAgICAgICAgICAgIHJhbmdlcw0KLSAgICAgICAgKSk7DQotICAgIH0NCi0NCi0gICAgSU5UIEdldE1lYXN1cmFibGVDaGFyYWN0ZXJSYW5nZUNvdW50KCkNCi0gICAgew0KLSAgICAgICAgSU5UIGNvdW50Ow0KLSAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRTdHJpbmdGb3JtYXRNZWFzdXJhYmxlQ2hhcmFjdGVyUmFuZ2VDb3VudCgNCi0gICAgICAgICAgICBuYXRpdmVGb3JtYXQsDQotICAgICAgICAgICAgJmNvdW50DQotICAgICAgICApKTsNCi0gICAgICAgIHJldHVybiBjb3VudDsNCi0gICAgfQ0KLSNlbmRpZg0KLQ0KLSAgICAvLyBHZXRMYXN0U3RhdHVzIC0gcmV0dXJuIGxhc3QgZXJyb3IgY29kZSBhbmQgY2xlYXIgZXJyb3IgY29kZQ0KLQ0KLSAgICBTdGF0dXMgR2V0TGFzdFN0YXR1cygpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIFN0YXR1cyBsYXN0U3RhdHVzID0gbGFzdEVycm9yOw0KLSAgICAgICAgbGFzdEVycm9yID0gT2s7DQotDQotICAgICAgICByZXR1cm4gbGFzdFN0YXR1czsNCi0gICAgfQ0KLQ0KLXByb3RlY3RlZDoNCi0NCi0gICAgU3RhdHVzIFNldFN0YXR1cyhHcFN0YXR1cyBuZXdTdGF0dXMpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIGlmIChuZXdTdGF0dXMgPT0gT2spDQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJuIE9rOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVybiBsYXN0RXJyb3IgPSBuZXdTdGF0dXM7DQotICAgICAgICB9DQotICAgIH0NCi0NCi0NCi0vLyBOb3QgYWxsb3dlZCBhbmQgbW92ZSB0byBwcml2YXRlDQotICAgIFN0cmluZ0Zvcm1hdChjb25zdCBTdHJpbmdGb3JtYXQgJnNvdXJjZSkNCi0gICAgew0KLSAgICAgICAgbmF0aXZlRm9ybWF0ID0gTlVMTDsNCi0gICAgICAgIGxhc3RFcnJvciA9IERsbEV4cG9ydHM6OkdkaXBDbG9uZVN0cmluZ0Zvcm1hdCgNCi0gICAgICAgICAgICBzb3VyY2UubmF0aXZlRm9ybWF0LA0KLSAgICAgICAgICAgICZuYXRpdmVGb3JtYXQNCi0gICAgICAgICk7DQotICAgIH0NCi0NCi0gICAgU3RyaW5nRm9ybWF0JiBvcGVyYXRvcj0oY29uc3QgU3RyaW5nRm9ybWF0ICZzb3VyY2UpDQotICAgIHsNCi0gICAgICAgIERsbEV4cG9ydHM6OkdkaXBEZWxldGVTdHJpbmdGb3JtYXQobmF0aXZlRm9ybWF0KTsNCi0gICAgICAgIGxhc3RFcnJvciA9IERsbEV4cG9ydHM6OkdkaXBDbG9uZVN0cmluZ0Zvcm1hdCgNCi0gICAgICAgICAgICBzb3VyY2UubmF0aXZlRm9ybWF0LA0KLSAgICAgICAgICAgICZuYXRpdmVGb3JtYXQNCi0gICAgICAgICk7DQotICAgICAgICByZXR1cm4gKnRoaXM7DQotICAgIH0NCi0NCi0NCi0gICAgLy8gcHJpdmF0ZSBjb25zdHJ1Y3RvciBmb3IgY29weQ0KLSAgICBTdHJpbmdGb3JtYXQoR3BTdHJpbmdGb3JtYXQgKiBjbG9uZWRTdHJpbmdGb3JtYXQsIFN0YXR1cyBzdGF0dXMpDQotICAgIHsNCi0gICAgICAgIGxhc3RFcnJvciA9IHN0YXR1czsNCi0gICAgICAgIG5hdGl2ZUZvcm1hdCA9IGNsb25lZFN0cmluZ0Zvcm1hdDsNCi0NCi0gICAgfQ0KLQ0KLSAgICBHcFN0cmluZ0Zvcm1hdCAqbmF0aXZlRm9ybWF0Ow0KLSAgICBtdXRhYmxlIFN0YXR1cyAgbGFzdEVycm9yOw0KLX07DQotDQotLy8gR2VuZXJpYyBjb25zdGFudCBzdHJpbmcgZm9ybWF0cy4NCi0NCi1zdGF0aWMgQllURSBHZW5lcmljVHlwb2dyYXBoaWNTdHJpbmdGb3JtYXRCdWZmZXJbc2l6ZW9mKFN0cmluZ0Zvcm1hdCldID0gezB9Ow0KLXN0YXRpYyBCWVRFIEdlbmVyaWNEZWZhdWx0U3RyaW5nRm9ybWF0QnVmZmVyW3NpemVvZihTdHJpbmdGb3JtYXQpXSA9IHswfTsNCi0NCi1zdGF0aWMgU3RyaW5nRm9ybWF0ICpHZW5lcmljVHlwb2dyYXBoaWNTdHJpbmdGb3JtYXQgPSBOVUxMOw0KLXN0YXRpYyBTdHJpbmdGb3JtYXQgKkdlbmVyaWNEZWZhdWx0U3RyaW5nRm9ybWF0ICAgICA9IE5VTEw7DQotDQotLy8gRGVmaW5lIHRoZSBnZW5lcmljIHN0cmluZyBmb3JtYXRzDQotDQotDQotaW5saW5lIGNvbnN0IFN0cmluZ0Zvcm1hdCAqU3RyaW5nRm9ybWF0OjpHZW5lcmljRGVmYXVsdCgpDQotew0KLSAgICBpZiAoR2VuZXJpY0RlZmF1bHRTdHJpbmdGb3JtYXQgIT0gTlVMTCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEdlbmVyaWNEZWZhdWx0U3RyaW5nRm9ybWF0Ow0KLSAgICB9DQotDQotICAgIEdlbmVyaWNEZWZhdWx0U3RyaW5nRm9ybWF0ID0NCi0gICAgICAgIChTdHJpbmdGb3JtYXQqKUdlbmVyaWNEZWZhdWx0U3RyaW5nRm9ybWF0QnVmZmVyOw0KLQ0KLSAgICBHZW5lcmljRGVmYXVsdFN0cmluZ0Zvcm1hdC0+bGFzdEVycm9yID0NCi0gICAgICAgIERsbEV4cG9ydHM6OkdkaXBTdHJpbmdGb3JtYXRHZXRHZW5lcmljRGVmYXVsdCgNCi0gICAgICAgICAgICAmKEdlbmVyaWNEZWZhdWx0U3RyaW5nRm9ybWF0LT5uYXRpdmVGb3JtYXQpDQotICAgICAgICApOw0KLQ0KLSAgICByZXR1cm4gR2VuZXJpY0RlZmF1bHRTdHJpbmdGb3JtYXQ7DQotfQ0KLQ0KLWlubGluZSBjb25zdCBTdHJpbmdGb3JtYXQgKlN0cmluZ0Zvcm1hdDo6R2VuZXJpY1R5cG9ncmFwaGljKCkNCi17DQotICAgIGlmIChHZW5lcmljVHlwb2dyYXBoaWNTdHJpbmdGb3JtYXQgIT0gTlVMTCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEdlbmVyaWNUeXBvZ3JhcGhpY1N0cmluZ0Zvcm1hdDsNCi0gICAgfQ0KLQ0KLSAgICBHZW5lcmljVHlwb2dyYXBoaWNTdHJpbmdGb3JtYXQgPQ0KLSAgICAgICAgKFN0cmluZ0Zvcm1hdCopR2VuZXJpY1R5cG9ncmFwaGljU3RyaW5nRm9ybWF0QnVmZmVyOw0KLQ0KLSAgICBHZW5lcmljVHlwb2dyYXBoaWNTdHJpbmdGb3JtYXQtPmxhc3RFcnJvciA9DQotICAgICAgICBEbGxFeHBvcnRzOjpHZGlwU3RyaW5nRm9ybWF0R2V0R2VuZXJpY1R5cG9ncmFwaGljKA0KLSAgICAgICAgICAgICZHZW5lcmljVHlwb2dyYXBoaWNTdHJpbmdGb3JtYXQtPm5hdGl2ZUZvcm1hdA0KLSAgICAgICAgKTsNCi0NCi0gICAgcmV0dXJuIEdlbmVyaWNUeXBvZ3JhcGhpY1N0cmluZ0Zvcm1hdDsNCi19DQotDQotI2VuZGlmIC8vICFfR0RJUExVU1NUUklOR0ZPUk1BVF9IDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKgorKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCwgTWljcm9zb2Z0IENvcnAuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorKgorKiBNb2R1bGUgTmFtZToKKyoKKyogICBHZGlwbHVzU3RyaW5nRm9ybWF0LmgKKyoKKyogQWJzdHJhY3Q6CisqCisqICAgU3RyaW5nIGZvcm1hdCBzcGVjaWZpY2F0aW9uIGZvciBEcmF3U3RyaW5nIGFuZCB0ZXh0IEFQSXMKKyoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfR0RJUExVU1NUUklOR0ZPUk1BVF9ICisjZGVmaW5lIF9HRElQTFVTU1RSSU5HRk9STUFUX0gKKworCitjbGFzcyBTdHJpbmdGb3JtYXQgOiBwdWJsaWMgR2RpcGx1c0Jhc2UKK3sKK3B1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3M7CisgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzUGF0aDsKKworCisgICAgU3RyaW5nRm9ybWF0KAorICAgICAgICBJTiBJTlQgICAgIGZvcm1hdEZsYWdzID0gMCwKKyAgICAgICAgSU4gTEFOR0lEICBsYW5ndWFnZSA9IExBTkdfTkVVVFJBTAorICAgICkKKyAgICB7CisgICAgICAgIG5hdGl2ZUZvcm1hdCA9IE5VTEw7CisgICAgICAgIGxhc3RFcnJvciA9IERsbEV4cG9ydHM6OkdkaXBDcmVhdGVTdHJpbmdGb3JtYXQoCisgICAgICAgICAgICBmb3JtYXRGbGFncywKKyAgICAgICAgICAgIGxhbmd1YWdlLAorICAgICAgICAgICAgJm5hdGl2ZUZvcm1hdAorICAgICAgICApOworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBTdHJpbmdGb3JtYXQgKkdlbmVyaWNEZWZhdWx0KCk7CisgICAgc3RhdGljIGNvbnN0IFN0cmluZ0Zvcm1hdCAqR2VuZXJpY1R5cG9ncmFwaGljKCk7CisKKyAgICAvLyBDb25zdHJ1Y3RvciBiYXNlZCBvbiBleGlzdGluZyBzdHJpbmcgZm9ybWF0CisKKyAgICBTdHJpbmdGb3JtYXQoCisgICAgICAgIElOIGNvbnN0IFN0cmluZ0Zvcm1hdCAqZm9ybWF0CisgICAgKQorICAgIHsKKyAgICAgICAgbmF0aXZlRm9ybWF0ID0gTlVMTDsKKyAgICAgICAgbGFzdEVycm9yID0gRGxsRXhwb3J0czo6R2RpcENsb25lU3RyaW5nRm9ybWF0KAorICAgICAgICAgICAgZm9ybWF0ID8gZm9ybWF0LT5uYXRpdmVGb3JtYXQgOiBOVUxMLAorICAgICAgICAgICAgJm5hdGl2ZUZvcm1hdAorICAgICAgICApOworICAgIH0KKworICAgIFN0cmluZ0Zvcm1hdCAqQ2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgR3BTdHJpbmdGb3JtYXQgKmNsb25lZFN0cmluZ0Zvcm1hdCA9IE5VTEw7CisKKyAgICAgICAgbGFzdEVycm9yID0gRGxsRXhwb3J0czo6R2RpcENsb25lU3RyaW5nRm9ybWF0KAorICAgICAgICAgICAgbmF0aXZlRm9ybWF0LAorICAgICAgICAgICAgJmNsb25lZFN0cmluZ0Zvcm1hdAorICAgICAgICApOworCisgICAgICAgIGlmIChsYXN0RXJyb3IgPT0gT2spCisgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZ0Zvcm1hdChjbG9uZWRTdHJpbmdGb3JtYXQsIGxhc3RFcnJvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIH5TdHJpbmdGb3JtYXQoKQorICAgIHsKKyAgICAgICAgRGxsRXhwb3J0czo6R2RpcERlbGV0ZVN0cmluZ0Zvcm1hdChuYXRpdmVGb3JtYXQpOworICAgIH0KKworICAgIFN0YXR1cyBTZXRGb3JtYXRGbGFncyhJTiBJTlQgZmxhZ3MpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRTdHJpbmdGb3JtYXRGbGFncygKKyAgICAgICAgICAgIG5hdGl2ZUZvcm1hdCwKKyAgICAgICAgICAgIGZsYWdzCisgICAgICAgICkpOworICAgIH0KKworICAgIElOVCBHZXRGb3JtYXRGbGFncygpIGNvbnN0CisgICAgeworICAgICAgICBJTlQgZmxhZ3M7CisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0U3RyaW5nRm9ybWF0RmxhZ3MobmF0aXZlRm9ybWF0LCAmZmxhZ3MpKTsKKyAgICAgICAgcmV0dXJuIGZsYWdzOworICAgIH0KKworI2lmbmRlZiBEQ1JfVVNFX05FV18xNTIxNTQKKyAgICBTdGF0dXMgU2V0TGluZVNwYWNpbmcoCisgICAgICAgIElOIFJFQUwgICAgICAgIGFtb3VudCA9IDEuMGYsCisgICAgICAgIElOIExpbmVTcGFjaW5nIG1ldGhvZCA9IExpbmVTcGFjaW5nUmVjb21tZW5kZWQKKyAgICApCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRTdHJpbmdGb3JtYXRMaW5lU3BhY2luZygKKyAgICAgICAgICAgIG5hdGl2ZUZvcm1hdCwKKyAgICAgICAgICAgIGFtb3VudCwKKyAgICAgICAgICAgIG1ldGhvZAorICAgICAgICApKTsKKyAgICB9CisjZW5kaWYKKworICAgIFN0YXR1cyBTZXRBbGlnbm1lbnQoSU4gU3RyaW5nQWxpZ25tZW50IGFsaWduKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0U3RyaW5nRm9ybWF0QWxpZ24oCisgICAgICAgICAgICBuYXRpdmVGb3JtYXQsCisgICAgICAgICAgICBhbGlnbgorICAgICAgICApKTsKKyAgICB9CisKKyAgICBTdHJpbmdBbGlnbm1lbnQgR2V0QWxpZ25tZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIFN0cmluZ0FsaWdubWVudCBhbGlnbm1lbnQ7CisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0U3RyaW5nRm9ybWF0QWxpZ24oCisgICAgICAgICAgICBuYXRpdmVGb3JtYXQsCisgICAgICAgICAgICAmYWxpZ25tZW50CisgICAgICAgICkpOworICAgICAgICByZXR1cm4gYWxpZ25tZW50OworICAgIH0KKworICAgIFN0YXR1cyBTZXRMaW5lQWxpZ25tZW50KElOIFN0cmluZ0FsaWdubWVudCBhbGlnbikKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFN0cmluZ0Zvcm1hdExpbmVBbGlnbigKKyAgICAgICAgICAgIG5hdGl2ZUZvcm1hdCwKKyAgICAgICAgICAgIGFsaWduCisgICAgICAgICkpOworICAgIH0KKworICAgIFN0cmluZ0FsaWdubWVudCBHZXRMaW5lQWxpZ25tZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIFN0cmluZ0FsaWdubWVudCBhbGlnbm1lbnQ7CisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0U3RyaW5nRm9ybWF0TGluZUFsaWduKAorICAgICAgICAgICAgbmF0aXZlRm9ybWF0LAorICAgICAgICAgICAgJmFsaWdubWVudAorICAgICAgICApKTsKKyAgICAgICAgcmV0dXJuIGFsaWdubWVudDsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0SG90a2V5UHJlZml4KElOIEhvdGtleVByZWZpeCBob3RrZXlQcmVmaXgpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRTdHJpbmdGb3JtYXRIb3RrZXlQcmVmaXgoCisgICAgICAgICAgICBuYXRpdmVGb3JtYXQsCisgICAgICAgICAgICAoSU5UKWhvdGtleVByZWZpeAorICAgICAgICApKTsKKyAgICB9CisKKyAgICBIb3RrZXlQcmVmaXggR2V0SG90a2V5UHJlZml4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEhvdGtleVByZWZpeCBob3RrZXlQcmVmaXg7CisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0U3RyaW5nRm9ybWF0SG90a2V5UHJlZml4KAorICAgICAgICAgICAgbmF0aXZlRm9ybWF0LAorICAgICAgICAgICAgKElOVCopJmhvdGtleVByZWZpeAorICAgICAgICApKTsKKyAgICAgICAgcmV0dXJuIGhvdGtleVByZWZpeDsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0VGFiU3RvcHMoCisgICAgICAgIElOIFJFQUwgICAgZmlyc3RUYWJPZmZzZXQsCisgICAgICAgIElOIElOVCAgICAgY291bnQsCisgICAgICAgIElOIGNvbnN0IFJFQUwgICAgKnRhYlN0b3BzCisgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0U3RyaW5nRm9ybWF0VGFiU3RvcHMoCisgICAgICAgICAgICBuYXRpdmVGb3JtYXQsCisgICAgICAgICAgICBmaXJzdFRhYk9mZnNldCwKKyAgICAgICAgICAgIGNvdW50LAorICAgICAgICAgICAgdGFiU3RvcHMKKyAgICAgICAgKSk7CisgICAgfQorCisgICAgSU5UIEdldFRhYlN0b3BDb3VudCgpIGNvbnN0CisgICAgeworICAgICAgICBJTlQgY291bnQ7CisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0U3RyaW5nRm9ybWF0VGFiU3RvcENvdW50KG5hdGl2ZUZvcm1hdCwgJmNvdW50KSk7CisgICAgICAgIHJldHVybiBjb3VudDsKKyAgICB9CisKKyAgICBTdGF0dXMgR2V0VGFiU3RvcHMoCisgICAgICAgIElOIElOVCAgICAgY291bnQsCisgICAgICAgIE9VVCBSRUFMICAgKmZpcnN0VGFiT2Zmc2V0LAorICAgICAgICBPVVQgUkVBTCAgICp0YWJTdG9wcworICAgICkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldFN0cmluZ0Zvcm1hdFRhYlN0b3BzKAorICAgICAgICAgICAgbmF0aXZlRm9ybWF0LAorICAgICAgICAgICAgY291bnQsCisgICAgICAgICAgICBmaXJzdFRhYk9mZnNldCwKKyAgICAgICAgICAgIHRhYlN0b3BzCisgICAgICAgICkpOworICAgIH0KKworI2lmZGVmIERDUl9VU0VfTkVXXzE0NjkzMworICAgIFN0YXR1cyBTZXREaWdpdFN1YnN0aXR1dGlvbigKKyAgICAgICAgSU4gTEFOR0lEICAgICAgICAgICAgICAgIGxhbmd1YWdlLAorICAgICAgICBJTiBTdHJpbmdEaWdpdFN1YnN0aXR1dGUgc3Vic3RpdHV0ZQorICAgICkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFN0cmluZ0Zvcm1hdERpZ2l0U3Vic3RpdHV0aW9uKAorICAgICAgICAgICAgbmF0aXZlRm9ybWF0LAorICAgICAgICAgICAgbGFuZ3VhZ2UsCisgICAgICAgICAgICBzdWJzdGl0dXRlCisgICAgICAgICkpOworICAgIH0KKworICAgIExBTkdJRCBHZXREaWdpdFN1YnN0aXR1dGlvbkxhbmd1YWdlKAorICAgICkgY29uc3QKKyAgICB7CisgICAgICAgIExBTkdJRCBsYW5ndWFnZTsKKyAgICAgICAgU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRTdHJpbmdGb3JtYXREaWdpdFN1YnN0aXR1dGlvbigKKyAgICAgICAgICAgIG5hdGl2ZUZvcm1hdCwKKyAgICAgICAgICAgICZsYW5ndWFnZSwKKyAgICAgICAgICAgIE5VTEwKKyAgICAgICAgKSk7CisgICAgICAgIHJldHVybiBsYW5ndWFnZTsKKyAgICB9CisKKyAgICBTdHJpbmdEaWdpdFN1YnN0aXR1dGUgR2V0RGlnaXRTdWJzdGl0dXRpb25NZXRob2QoCisgICAgKSBjb25zdAorICAgIHsKKyAgICAgICAgU3RyaW5nRGlnaXRTdWJzdGl0dXRlIHN1YnN0aXR1dGU7CisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0U3RyaW5nRm9ybWF0RGlnaXRTdWJzdGl0dXRpb24oCisgICAgICAgICAgICBuYXRpdmVGb3JtYXQsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgJnN1YnN0aXR1dGUKKyAgICAgICAgKSk7CisgICAgICAgIHJldHVybiBzdWJzdGl0dXRlOworICAgIH0KKyNlbmRpZiAvLyBEQ1JfVVNFX05FV18xNDY5MzMKKworICAgIC8vIFN0cmluZyB0cmltbWluZy4gSG93IHRvIGhhbmRsZSBtb3JlIHRleHQgdGhhbiBjYW4gYmUgZGlzcGxheWVkCisgICAgLy8gaW4gdGhlIGxpbWl0cyBhdmFpbGFibGUuCisKKyAgICBTdGF0dXMgU2V0VHJpbW1pbmcoSU4gU3RyaW5nVHJpbW1pbmcgdHJpbW1pbmcpCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRTdHJpbmdGb3JtYXRUcmltbWluZygKKyAgICAgICAgICAgIG5hdGl2ZUZvcm1hdCwKKyAgICAgICAgICAgIHRyaW1taW5nCisgICAgICAgICkpOworICAgIH0KKworICAgIFN0cmluZ1RyaW1taW5nIFN0cmluZ0Zvcm1hdDo6R2V0VHJpbW1pbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgU3RyaW5nVHJpbW1pbmcgdHJpbW1pbmc7CisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0U3RyaW5nRm9ybWF0VHJpbW1pbmcoCisgICAgICAgICAgICBuYXRpdmVGb3JtYXQsCisgICAgICAgICAgICAmdHJpbW1pbmcKKyAgICAgICAgKSk7CisgICAgICAgIHJldHVybiB0cmltbWluZzsKKyAgICB9CisKKyNpZmRlZiBEQ1JfVVNFX05FV18xNzQzNDAKKyAgICBTdGF0dXMgU2V0TWVhc3VyYWJsZUNoYXJhY3RlclJhbmdlcygKKyAgICAgICAgSU4gSU5UICAgICAgICAgICAgICAgICAgcmFuZ2VDb3VudCwKKyAgICAgICAgSU4gY29uc3QgQ2hhcmFjdGVyUmFuZ2UgKnJhbmdlcworICAgICkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldFN0cmluZ0Zvcm1hdE1lYXN1cmFibGVDaGFyYWN0ZXJSYW5nZXMoCisgICAgICAgICAgICBuYXRpdmVGb3JtYXQsCisgICAgICAgICAgICByYW5nZUNvdW50LAorICAgICAgICAgICAgcmFuZ2VzCisgICAgICAgICkpOworICAgIH0KKworICAgIElOVCBHZXRNZWFzdXJhYmxlQ2hhcmFjdGVyUmFuZ2VDb3VudCgpCisgICAgeworICAgICAgICBJTlQgY291bnQ7CisgICAgICAgIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwR2V0U3RyaW5nRm9ybWF0TWVhc3VyYWJsZUNoYXJhY3RlclJhbmdlQ291bnQoCisgICAgICAgICAgICBuYXRpdmVGb3JtYXQsCisgICAgICAgICAgICAmY291bnQKKyAgICAgICAgKSk7CisgICAgICAgIHJldHVybiBjb3VudDsKKyAgICB9CisjZW5kaWYKKworICAgIC8vIEdldExhc3RTdGF0dXMgLSByZXR1cm4gbGFzdCBlcnJvciBjb2RlIGFuZCBjbGVhciBlcnJvciBjb2RlCisKKyAgICBTdGF0dXMgR2V0TGFzdFN0YXR1cygpIGNvbnN0CisgICAgeworICAgICAgICBTdGF0dXMgbGFzdFN0YXR1cyA9IGxhc3RFcnJvcjsKKyAgICAgICAgbGFzdEVycm9yID0gT2s7CisKKyAgICAgICAgcmV0dXJuIGxhc3RTdGF0dXM7CisgICAgfQorCitwcm90ZWN0ZWQ6CisKKyAgICBTdGF0dXMgU2V0U3RhdHVzKEdwU3RhdHVzIG5ld1N0YXR1cykgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChuZXdTdGF0dXMgPT0gT2spCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBPazsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBsYXN0RXJyb3IgPSBuZXdTdGF0dXM7CisgICAgICAgIH0KKyAgICB9CisKKworLy8gTm90IGFsbG93ZWQgYW5kIG1vdmUgdG8gcHJpdmF0ZQorICAgIFN0cmluZ0Zvcm1hdChjb25zdCBTdHJpbmdGb3JtYXQgJnNvdXJjZSkKKyAgICB7CisgICAgICAgIG5hdGl2ZUZvcm1hdCA9IE5VTEw7CisgICAgICAgIGxhc3RFcnJvciA9IERsbEV4cG9ydHM6OkdkaXBDbG9uZVN0cmluZ0Zvcm1hdCgKKyAgICAgICAgICAgIHNvdXJjZS5uYXRpdmVGb3JtYXQsCisgICAgICAgICAgICAmbmF0aXZlRm9ybWF0CisgICAgICAgICk7CisgICAgfQorCisgICAgU3RyaW5nRm9ybWF0JiBvcGVyYXRvcj0oY29uc3QgU3RyaW5nRm9ybWF0ICZzb3VyY2UpCisgICAgeworICAgICAgICBEbGxFeHBvcnRzOjpHZGlwRGVsZXRlU3RyaW5nRm9ybWF0KG5hdGl2ZUZvcm1hdCk7CisgICAgICAgIGxhc3RFcnJvciA9IERsbEV4cG9ydHM6OkdkaXBDbG9uZVN0cmluZ0Zvcm1hdCgKKyAgICAgICAgICAgIHNvdXJjZS5uYXRpdmVGb3JtYXQsCisgICAgICAgICAgICAmbmF0aXZlRm9ybWF0CisgICAgICAgICk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKworICAgIC8vIHByaXZhdGUgY29uc3RydWN0b3IgZm9yIGNvcHkKKyAgICBTdHJpbmdGb3JtYXQoR3BTdHJpbmdGb3JtYXQgKiBjbG9uZWRTdHJpbmdGb3JtYXQsIFN0YXR1cyBzdGF0dXMpCisgICAgeworICAgICAgICBsYXN0RXJyb3IgPSBzdGF0dXM7CisgICAgICAgIG5hdGl2ZUZvcm1hdCA9IGNsb25lZFN0cmluZ0Zvcm1hdDsKKworICAgIH0KKworICAgIEdwU3RyaW5nRm9ybWF0ICpuYXRpdmVGb3JtYXQ7CisgICAgbXV0YWJsZSBTdGF0dXMgIGxhc3RFcnJvcjsKK307CisKKy8vIEdlbmVyaWMgY29uc3RhbnQgc3RyaW5nIGZvcm1hdHMuCisKK3N0YXRpYyBCWVRFIEdlbmVyaWNUeXBvZ3JhcGhpY1N0cmluZ0Zvcm1hdEJ1ZmZlcltzaXplb2YoU3RyaW5nRm9ybWF0KV0gPSB7MH07CitzdGF0aWMgQllURSBHZW5lcmljRGVmYXVsdFN0cmluZ0Zvcm1hdEJ1ZmZlcltzaXplb2YoU3RyaW5nRm9ybWF0KV0gPSB7MH07CisKK3N0YXRpYyBTdHJpbmdGb3JtYXQgKkdlbmVyaWNUeXBvZ3JhcGhpY1N0cmluZ0Zvcm1hdCA9IE5VTEw7CitzdGF0aWMgU3RyaW5nRm9ybWF0ICpHZW5lcmljRGVmYXVsdFN0cmluZ0Zvcm1hdCAgICAgPSBOVUxMOworCisvLyBEZWZpbmUgdGhlIGdlbmVyaWMgc3RyaW5nIGZvcm1hdHMKKworCitpbmxpbmUgY29uc3QgU3RyaW5nRm9ybWF0ICpTdHJpbmdGb3JtYXQ6OkdlbmVyaWNEZWZhdWx0KCkKK3sKKyAgICBpZiAoR2VuZXJpY0RlZmF1bHRTdHJpbmdGb3JtYXQgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBHZW5lcmljRGVmYXVsdFN0cmluZ0Zvcm1hdDsKKyAgICB9CisKKyAgICBHZW5lcmljRGVmYXVsdFN0cmluZ0Zvcm1hdCA9CisgICAgICAgIChTdHJpbmdGb3JtYXQqKUdlbmVyaWNEZWZhdWx0U3RyaW5nRm9ybWF0QnVmZmVyOworCisgICAgR2VuZXJpY0RlZmF1bHRTdHJpbmdGb3JtYXQtPmxhc3RFcnJvciA9CisgICAgICAgIERsbEV4cG9ydHM6OkdkaXBTdHJpbmdGb3JtYXRHZXRHZW5lcmljRGVmYXVsdCgKKyAgICAgICAgICAgICYoR2VuZXJpY0RlZmF1bHRTdHJpbmdGb3JtYXQtPm5hdGl2ZUZvcm1hdCkKKyAgICAgICAgKTsKKworICAgIHJldHVybiBHZW5lcmljRGVmYXVsdFN0cmluZ0Zvcm1hdDsKK30KKworaW5saW5lIGNvbnN0IFN0cmluZ0Zvcm1hdCAqU3RyaW5nRm9ybWF0OjpHZW5lcmljVHlwb2dyYXBoaWMoKQoreworICAgIGlmIChHZW5lcmljVHlwb2dyYXBoaWNTdHJpbmdGb3JtYXQgIT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVybiBHZW5lcmljVHlwb2dyYXBoaWNTdHJpbmdGb3JtYXQ7CisgICAgfQorCisgICAgR2VuZXJpY1R5cG9ncmFwaGljU3RyaW5nRm9ybWF0ID0KKyAgICAgICAgKFN0cmluZ0Zvcm1hdCopR2VuZXJpY1R5cG9ncmFwaGljU3RyaW5nRm9ybWF0QnVmZmVyOworCisgICAgR2VuZXJpY1R5cG9ncmFwaGljU3RyaW5nRm9ybWF0LT5sYXN0RXJyb3IgPQorICAgICAgICBEbGxFeHBvcnRzOjpHZGlwU3RyaW5nRm9ybWF0R2V0R2VuZXJpY1R5cG9ncmFwaGljKAorICAgICAgICAgICAgJkdlbmVyaWNUeXBvZ3JhcGhpY1N0cmluZ0Zvcm1hdC0+bmF0aXZlRm9ybWF0CisgICAgICAgICk7CisKKyAgICByZXR1cm4gR2VuZXJpY1R5cG9ncmFwaGljU3RyaW5nRm9ybWF0OworfQorCisjZW5kaWYgLy8gIV9HRElQTFVTU1RSSU5HRk9STUFUX0gKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNUeXBlcy5oIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c1R5cGVzLmgKaW5kZXggNThjNTg0ZC4uZDVjMDNhMiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c1R5cGVzLmgKKysrIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c1R5cGVzLmgKQEAgLTEsODI2ICsxLDgyNiBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXA0KLSoNCi0qIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotKg0KLSogTW9kdWxlIE5hbWU6DQotKg0KLSogICBHZGlwbHVzVHlwZXMuaA0KLSoNCi0qIEFic3RyYWN0Og0KLSoNCi0qICAgQmFzaWMgdHlwZXMgdXNlZCBieSBHREkrDQotKg0KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi0NCi0jaWZuZGVmIF9HRElQTFVTVFlQRVNfSA0KLSNkZWZpbmUgX0dESVBMVVNUWVBFU19IDQotDQotI2lmbmRlZiBEQ1JfVVNFX05FV18xNzU4NjYNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gTElCIHZlcnNpb24gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLXR5cGVkZWYgVk9JRCAoX19jZGVjbCAqREVCVUdFVkVOVEZVTkNUSU9OKShJTlQgbGV2ZWwsIENIQVIgKm1lc3NhZ2UpOw0KLQ0KLWV4dGVybiAiQyIgQk9PTCBfX3N0ZGNhbGwgSW5pdGlhbGl6ZUdkaXBsdXMoREVCVUdFVkVOVEZVTkNUSU9OKTsNCi1leHRlcm4gIkMiIFZPSUQgX19zdGRjYWxsIFVuaW5pdGlhbGl6ZUdkaXBsdXMoKTsNCi0NCi0jZW5kaWYNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gQ2FsbGJhY2sgZnVuY3Rpb25zDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWV4dGVybiAiQyIgew0KLXR5cGVkZWYgQk9PTCAoQ0FMTEJBQ0sgKiBJbWFnZUFib3J0KShWT0lEICopOw0KLXR5cGVkZWYgSW1hZ2VBYm9ydCBEcmF3SW1hZ2VBYm9ydDsNCi10eXBlZGVmIEltYWdlQWJvcnQgR2V0VGh1bWJuYWlsSW1hZ2VBYm9ydDsNCi19DQotDQotLy8gQ2FsbGJhY2sgZm9yIEVudW1lcmF0ZU1ldGFmaWxlIG1ldGhvZHMuICBUaGUgcGFyYW1ldGVycyBhcmU6DQotDQotLy8gICAgICByZWNvcmRUeXBlICAgICAgV01GLCBFTUYsIG9yIEVNRisgcmVjb3JkIHR5cGUNCi0vLyAgICAgIGZsYWdzICAgICAgICAgICAoYWx3YXlzIDAgZm9yIFdNRi9FTUYgcmVjb3JkcykNCi0vLyAgICAgIGRhdGFTaXplICAgICAgICBzaXplIG9mIHRoZSByZWNvcmQgZGF0YSAoaW4gYnl0ZXMpLCBvciAwIGlmIG5vIGRhdGENCi0vLyAgICAgIGRhdGEgICAgICAgICAgICBwb2ludGVyIHRvIHRoZSByZWNvcmQgZGF0YSwgb3IgTlVMTCBpZiBubyBkYXRhDQotLy8gICAgICBjYWxsYmFja0RhdGEgICAgcG9pbnRlciB0byBjYWxsYmFja0RhdGEsIGlmIGFueQ0KLQ0KLS8vIFRoaXMgbWV0aG9kIGNhbiB0aGVuIGNhbGwgTWV0YWZpbGU6OlBsYXlSZWNvcmQgdG8gcGxheSB0aGUNCi0vLyByZWNvcmQgdGhhdCB3YXMganVzdCBlbnVtZXJhdGVkLiAgSWYgdGhpcyBtZXRob2QgIHJldHVybnMNCi0vLyBGQUxTRSwgdGhlIGVudW1lcmF0aW9uIHByb2Nlc3MgaXMgYWJvcnRlZC4gIE90aGVyd2lzZSwgaXQgY29udGludWVzLg0KLQ0KLWV4dGVybiAiQyIgew0KLXR5cGVkZWYgQk9PTCAoQ0FMTEJBQ0sgKiBFbnVtZXJhdGVNZXRhZmlsZVByb2MpKEVtZlBsdXNSZWNvcmRUeXBlLFVJTlQsVUlOVCxjb25zdCBCWVRFKixWT0lEKik7DQotfQ0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBQcmltaXRpdmUgZGF0YSB0eXBlcw0KLS8vDQotLy8gTk9URToNCi0vLyAgVHlwZXMgYWxyZWFkeSBkZWZpbmVkIGluIHN0YW5kYXJkIGhlYWRlciBmaWxlczoNCi0vLyAgICAgIElOVDgNCi0vLyAgICAgIFVJTlQ4DQotLy8gICAgICBJTlQxNg0KLS8vICAgICAgVUlOVDE2DQotLy8gICAgICBJTlQzMg0KLS8vICAgICAgVUlOVDMyDQotLy8gICAgICBJTlQ2NA0KLS8vICAgICAgVUlOVDY0DQotLy8NCi0vLyAgQXZvaWQgdXNpbmcgdGhlIGZvbGxvd2luZyB0eXBlczoNCi0vLyAgICAgIExPTkcgLSB1c2UgSU5UDQotLy8gICAgICBVTE9ORyAtIHVzZSBVSU5UDQotLy8gICAgICBEV09SRCAtIHVzZSBVSU5UMzINCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotdHlwZWRlZiBmbG9hdCBSRUFMOw0KLQ0KLSNkZWZpbmUgUkVBTF9NQVggICAgICAgICAgICBGTFRfTUFYDQotI2RlZmluZSBSRUFMX01JTiAgICAgICAgICAgIEZMVF9NSU4NCi0jZGVmaW5lIFJFQUxfVE9MRVJBTkNFICAgICAoRkxUX01JTiAqIDEwMCkNCi0jZGVmaW5lIFJFQUxfRVBTSUxPTiAgICAgICAgMS4xOTIwOTI4OTZlLTA3RiAgICAgICAgLyogRkxUX0VQU0lMT04gKi8NCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMgb2YgdmFyaW91cyBpbnRlcm5hbCBjbGFzc2VzDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWNsYXNzIFNpemU7DQotY2xhc3MgU2l6ZUY7DQotY2xhc3MgUG9pbnQ7DQotY2xhc3MgUG9pbnRGOw0KLWNsYXNzIFJlY3Q7DQotY2xhc3MgUmVjdEY7DQotY2xhc3MgQ2hhcmFjdGVyUmFuZ2U7DQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIFJldHVybiB2YWx1ZXMgZnJvbSBhbnkgR0RJKyBBUEkNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotZW51bSBTdGF0dXMNCi17DQotICAgIE9rID0gMCwNCi0gICAgR2VuZXJpY0Vycm9yID0gMSwNCi0gICAgSW52YWxpZFBhcmFtZXRlciA9IDIsDQotICAgIE91dE9mTWVtb3J5ID0gMywNCi0gICAgT2JqZWN0QnVzeSA9IDQsDQotICAgIEluc3VmZmljaWVudEJ1ZmZlciA9IDUsDQotICAgIE5vdEltcGxlbWVudGVkID0gNiwNCi0gICAgV2luMzJFcnJvciA9IDcsDQotICAgIFdyb25nU3RhdGUgPSA4LA0KLSAgICBBYm9ydGVkID0gOSwNCi0jaWZkZWYgRENSX1VTRV9ORVdfMTM1NDI5DQotICAgIEZpbGVOb3RGb3VuZCA9IDEwLA0KLSAgICBWYWx1ZU92ZXJmbG93ID0gMTEsDQotICAgIEFjY2Vzc0RlbmllZCA9IDEyLA0KLSAgICBVbmtub3duSW1hZ2VGb3JtYXQgPSAxMywNCi0gICAgRm9udEZhbWlseU5vdEZvdW5kID0gMTQsDQotICAgIEZvbnRTdHlsZU5vdEZvdW5kID0gMTUsDQotICAgIE5vdFRydWVUeXBlRm9udCA9IDE2LA0KLSNlbHNlDQotICAgIE5vdEZvdW5kID0gMTAsDQotICAgIFZhbHVlT3ZlcmZsb3cgPSAxMSwNCi0jZW5kaWYNCi0gICAgVW5zdXBwb3J0ZWRHZGlwbHVzVmVyc2lvbiA9IDE3LA0KLSAgICBHZGlwbHVzTm90SW5pdGlhbGl6ZWQNCi0NCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBSZXByZXNlbnRzIGEgZGltZW5zaW9uIGluIGEgMkQgY29vcmRpbmF0ZSBzeXN0ZW0NCi0vLyAgKGZsb2F0aW5nLXBvaW50IGNvb3JkaW5hdGVzKQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1jbGFzcyBTaXplRg0KLXsNCi1wdWJsaWM6DQotDQotICAgLy8gRGVmYXVsdCBjb25zdHJ1Y3Rvcg0KLSAgICBTaXplRigpDQotICAgIHsNCi0gICAgICAgIFdpZHRoID0gSGVpZ2h0ID0gMC4wZjsNCi0gICAgfQ0KLQ0KLSAgICBTaXplRihJTiBjb25zdCBTaXplRiYgc2l6ZSkNCi0gICAgew0KLSAgICAgICAgV2lkdGggPSBzaXplLldpZHRoOw0KLSAgICAgICAgSGVpZ2h0ID0gc2l6ZS5IZWlnaHQ7DQotICAgIH0NCi0NCi0gICAgU2l6ZUYoSU4gUkVBTCB3aWR0aCwNCi0gICAgICAgICAgSU4gUkVBTCBoZWlnaHQpDQotICAgIHsNCi0gICAgICAgIFdpZHRoID0gd2lkdGg7DQotICAgICAgICBIZWlnaHQgPSBoZWlnaHQ7DQotICAgIH0NCi0NCi0gICAgU2l6ZUYgb3BlcmF0b3IrKElOIGNvbnN0IFNpemVGJiBzeikgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNpemVGKFdpZHRoICsgc3ouV2lkdGgsDQotICAgICAgICAgICAgICAgICAgICAgSGVpZ2h0ICsgc3ouSGVpZ2h0KTsNCi0gICAgfQ0KLQ0KLSAgICBTaXplRiBvcGVyYXRvci0oSU4gY29uc3QgU2l6ZUYmIHN6KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2l6ZUYoV2lkdGggLSBzei5XaWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICBIZWlnaHQgLSBzei5IZWlnaHQpOw0KLSAgICB9DQotDQotICAgIEJPT0wgRXF1YWxzKElOIGNvbnN0IFNpemVGJiBzeikgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIChXaWR0aCA9PSBzei5XaWR0aCkgJiYgKEhlaWdodCA9PSBzei5IZWlnaHQpOw0KLSAgICB9DQotDQotICAgIEJPT0wgRW1wdHkoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gKFdpZHRoID09IDAuMGYgJiYgSGVpZ2h0ID09IDAuMGYpOw0KLSAgICB9DQotDQotcHVibGljOg0KLQ0KLSAgICBSRUFMIFdpZHRoOw0KLSAgICBSRUFMIEhlaWdodDsNCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBSZXByZXNlbnRzIGEgZGltZW5zaW9uIGluIGEgMkQgY29vcmRpbmF0ZSBzeXN0ZW0NCi0vLyAgKGludGVnZXIgY29vcmRpbmF0ZXMpDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWNsYXNzIFNpemUNCi17DQotcHVibGljOg0KLQ0KLSAgIC8vIERlZmF1bHQgY29uc3RydWN0b3INCi0gICAgU2l6ZSgpDQotICAgIHsNCi0gICAgICAgIFdpZHRoID0gSGVpZ2h0ID0gMDsNCi0gICAgfQ0KLQ0KLSAgICBTaXplKElOIGNvbnN0IFNpemUmIHNpemUpDQotICAgIHsNCi0gICAgICAgIFdpZHRoID0gc2l6ZS5XaWR0aDsNCi0gICAgICAgIEhlaWdodCA9IHNpemUuSGVpZ2h0Ow0KLSAgICB9DQotDQotICAgIFNpemUoSU4gSU5UIHdpZHRoLA0KLSAgICAgICAgIElOIElOVCBoZWlnaHQpDQotICAgIHsNCi0gICAgICAgIFdpZHRoID0gd2lkdGg7DQotICAgICAgICBIZWlnaHQgPSBoZWlnaHQ7DQotICAgIH0NCi0NCi0gICAgU2l6ZSBvcGVyYXRvcisoSU4gY29uc3QgU2l6ZSYgc3opIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBTaXplKFdpZHRoICsgc3ouV2lkdGgsDQotICAgICAgICAgICAgICAgICAgICBIZWlnaHQgKyBzei5IZWlnaHQpOw0KLSAgICB9DQotDQotICAgIFNpemUgb3BlcmF0b3ItKElOIGNvbnN0IFNpemUmIHN6KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2l6ZShXaWR0aCAtIHN6LldpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgSGVpZ2h0IC0gc3ouSGVpZ2h0KTsNCi0gICAgfQ0KLQ0KLSAgICBCT09MIEVxdWFscyhJTiBjb25zdCBTaXplJiBzeikgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIChXaWR0aCA9PSBzei5XaWR0aCkgJiYgKEhlaWdodCA9PSBzei5IZWlnaHQpOw0KLSAgICB9DQotDQotICAgIEJPT0wgRW1wdHkoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gKFdpZHRoID09IDAgJiYgSGVpZ2h0ID09IDApOw0KLSAgICB9DQotDQotcHVibGljOg0KLQ0KLSAgICBJTlQgV2lkdGg7DQotICAgIElOVCBIZWlnaHQ7DQotfTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gUmVwcmVzZW50cyBhIGxvY2F0aW9uIGluIGEgMkQgY29vcmRpbmF0ZSBzeXN0ZW0NCi0vLyAgKGZsb2F0aW5nLXBvaW50IGNvb3JkaW5hdGVzKQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1jbGFzcyBQb2ludEYNCi17DQotcHVibGljOg0KLSAgIFBvaW50RigpDQotICAgew0KLSAgICAgICBYID0gWSA9IDAuMGY7DQotICAgfQ0KLQ0KLSAgIFBvaW50RihJTiBjb25zdCBQb2ludEYgJnBvaW50KQ0KLSAgIHsNCi0gICAgICAgWCA9IHBvaW50Llg7DQotICAgICAgIFkgPSBwb2ludC5ZOw0KLSAgIH0NCi0NCi0gICBQb2ludEYoSU4gY29uc3QgU2l6ZUYgJnNpemUpDQotICAgew0KLSAgICAgICBYID0gc2l6ZS5XaWR0aDsNCi0gICAgICAgWSA9IHNpemUuSGVpZ2h0Ow0KLSAgIH0NCi0NCi0gICBQb2ludEYoSU4gUkVBTCB4LA0KLSAgICAgICAgICBJTiBSRUFMIHkpDQotICAgew0KLSAgICAgICBYID0geDsNCi0gICAgICAgWSA9IHk7DQotICAgfQ0KLQ0KLSAgIFBvaW50RiBvcGVyYXRvcisoSU4gY29uc3QgUG9pbnRGJiBwb2ludCkgY29uc3QNCi0gICB7DQotICAgICAgIHJldHVybiBQb2ludEYoWCArIHBvaW50LlgsDQotICAgICAgICAgICAgICAgICAgICAgWSArIHBvaW50LlkpOw0KLSAgIH0NCi0NCi0gICBQb2ludEYgb3BlcmF0b3ItKElOIGNvbnN0IFBvaW50RiYgcG9pbnQpIGNvbnN0DQotICAgew0KLSAgICAgICByZXR1cm4gUG9pbnRGKFggLSBwb2ludC5YLA0KLSAgICAgICAgICAgICAgICAgICAgIFkgLSBwb2ludC5ZKTsNCi0gICB9DQotDQotICAgQk9PTCBFcXVhbHMoSU4gY29uc3QgUG9pbnRGJiBwb2ludCkNCi0gICB7DQotICAgICAgIHJldHVybiAoWCA9PSBwb2ludC5YKSAmJiAoWSA9PSBwb2ludC5ZKTsNCi0gICB9DQotDQotcHVibGljOg0KLQ0KLSAgICBSRUFMIFg7DQotICAgIFJFQUwgWTsNCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBSZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSAyRCBjb29yZGluYXRlIHN5c3RlbQ0KLS8vICAoaW50ZWdlciBjb29yZGluYXRlcykNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotY2xhc3MgUG9pbnQNCi17DQotcHVibGljOg0KLSAgIFBvaW50KCkNCi0gICB7DQotICAgICAgIFggPSBZID0gMDsNCi0gICB9DQotDQotICAgUG9pbnQoSU4gY29uc3QgUG9pbnQgJnBvaW50KQ0KLSAgIHsNCi0gICAgICAgWCA9IHBvaW50Llg7DQotICAgICAgIFkgPSBwb2ludC5ZOw0KLSAgIH0NCi0NCi0gICBQb2ludChJTiBjb25zdCBTaXplICZzaXplKQ0KLSAgIHsNCi0gICAgICAgWCA9IHNpemUuV2lkdGg7DQotICAgICAgIFkgPSBzaXplLkhlaWdodDsNCi0gICB9DQotDQotICAgUG9pbnQoSU4gSU5UIHgsDQotICAgICAgICAgSU4gSU5UIHkpDQotICAgew0KLSAgICAgICBYID0geDsNCi0gICAgICAgWSA9IHk7DQotICAgfQ0KLQ0KLSAgIFBvaW50IG9wZXJhdG9yKyhJTiBjb25zdCBQb2ludCYgcG9pbnQpIGNvbnN0DQotICAgew0KLSAgICAgICByZXR1cm4gUG9pbnQoWCArIHBvaW50LlgsDQotICAgICAgICAgICAgICAgICAgICBZICsgcG9pbnQuWSk7DQotICAgfQ0KLQ0KLSAgIFBvaW50IG9wZXJhdG9yLShJTiBjb25zdCBQb2ludCYgcG9pbnQpIGNvbnN0DQotICAgew0KLSAgICAgICByZXR1cm4gUG9pbnQoWCAtIHBvaW50LlgsDQotICAgICAgICAgICAgICAgICAgICBZIC0gcG9pbnQuWSk7DQotICAgfQ0KLQ0KLSAgIEJPT0wgRXF1YWxzKElOIGNvbnN0IFBvaW50JiBwb2ludCkNCi0gICB7DQotICAgICAgIHJldHVybiAoWCA9PSBwb2ludC5YKSAmJiAoWSA9PSBwb2ludC5ZKTsNCi0gICB9DQotDQotcHVibGljOg0KLQ0KLSAgICBJTlQgWDsNCi0gICAgSU5UIFk7DQotfTsNCi0NCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gUmVwcmVzZW50cyBhIHJlY3RhbmdsZSBpbiBhIDJEIGNvb3JkaW5hdGUgc3lzdGVtDQotLy8gIChmbG9hdGluZy1wb2ludCBjb29yZGluYXRlcykNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotY2xhc3MgUmVjdEYNCi17DQotcHVibGljOg0KLQ0KLSAgICAvLyBEZWZhdWx0IGNvbnN0cnVjdG9yDQotDQotICAgIFJlY3RGKCkNCi0gICAgew0KLSAgICAgICAgWCA9IFkgPSBXaWR0aCA9IEhlaWdodCA9IDAuMGY7DQotICAgIH0NCi0NCi0gICAgUmVjdEYoSU4gUkVBTCB4LA0KLSAgICAgICAgICBJTiBSRUFMIHksDQotICAgICAgICAgIElOIFJFQUwgd2lkdGgsDQotICAgICAgICAgIElOIFJFQUwgaGVpZ2h0KQ0KLSAgICB7DQotICAgICAgICBYID0geDsNCi0gICAgICAgIFkgPSB5Ow0KLSAgICAgICAgV2lkdGggPSB3aWR0aDsNCi0gICAgICAgIEhlaWdodCA9IGhlaWdodDsNCi0gICAgfQ0KLQ0KLSAgICBSZWN0RihJTiBjb25zdCBQb2ludEYmIGxvY2F0aW9uLA0KLSAgICAgICAgICBJTiBjb25zdCBTaXplRiYgc2l6ZSkNCi0gICAgew0KLSAgICAgICAgWCA9IGxvY2F0aW9uLlg7DQotICAgICAgICBZID0gbG9jYXRpb24uWTsNCi0gICAgICAgIFdpZHRoID0gc2l6ZS5XaWR0aDsNCi0gICAgICAgIEhlaWdodCA9IHNpemUuSGVpZ2h0Ow0KLSAgICB9DQotDQotICAgIFJlY3RGKiBDbG9uZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBuZXcgUmVjdEYoWCwgWSwgV2lkdGgsIEhlaWdodCk7DQotICAgIH0NCi0NCi0gICAgVk9JRCBHZXRMb2NhdGlvbihPVVQgUG9pbnRGKiBwb2ludCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcG9pbnQtPlggPSBYOw0KLSAgICAgICAgcG9pbnQtPlkgPSBZOw0KLSAgICB9DQotDQotICAgIFZPSUQgR2V0U2l6ZShPVVQgU2l6ZUYqIHNpemUpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHNpemUtPldpZHRoID0gV2lkdGg7DQotICAgICAgICBzaXplLT5IZWlnaHQgPSBIZWlnaHQ7DQotICAgIH0NCi0NCi0gICAgVk9JRCBHZXRCb3VuZHMoT1VUIFJlY3RGKiByZWN0KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZWN0LT5YID0gWDsNCi0gICAgICAgIHJlY3QtPlkgPSBZOw0KLSAgICAgICAgcmVjdC0+V2lkdGggPSBXaWR0aDsNCi0gICAgICAgIHJlY3QtPkhlaWdodCA9IEhlaWdodDsNCi0gICAgfQ0KLQ0KLSAgICAvLyBSZXR1cm4gdGhlIGxlZnQsIHRvcCwgcmlnaHQsIGFuZCBib3R0b20NCi0gICAgLy8gY29vcmRpbmF0ZXMgb2YgdGhlIHJlY3RhbmdsZQ0KLQ0KLSAgICBSRUFMIEdldExlZnQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gWDsNCi0gICAgfQ0KLQ0KLSAgICBSRUFMIEdldFRvcCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBZOw0KLSAgICB9DQotDQotICAgIFJFQUwgR2V0UmlnaHQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gWCtXaWR0aDsNCi0gICAgfQ0KLQ0KLSAgICBSRUFMIEdldEJvdHRvbSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBZK0hlaWdodDsNCi0gICAgfQ0KLQ0KLSAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIHJlY3RhbmdsZSBpcyBlbXB0eQ0KLSAgICBCT09MIElzRW1wdHlBcmVhKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIChXaWR0aCA8PSBSRUFMX0VQU0lMT04pIHx8IChIZWlnaHQgPD0gUkVBTF9FUFNJTE9OKTsNCi0gICAgfQ0KLQ0KLSAgICBCT09MIEVxdWFscyhJTiBjb25zdCBSZWN0RiAmIHJlY3QpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBYID09IHJlY3QuWCAmJg0KLSAgICAgICAgICAgICAgIFkgPT0gcmVjdC5ZICYmDQotICAgICAgICAgICAgICAgV2lkdGggPT0gcmVjdC5XaWR0aCAmJg0KLSAgICAgICAgICAgICAgIEhlaWdodCA9PSByZWN0LkhlaWdodDsNCi0gICAgfQ0KLQ0KLSAgICBCT09MIENvbnRhaW5zKElOIFJFQUwgeCwNCi0gICAgICAgICAgICAgICAgICBJTiBSRUFMIHkpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiB4ID49IFggJiYgeCA8IFgrV2lkdGggJiYNCi0gICAgICAgICAgICAgICB5ID49IFkgJiYgeSA8IFkrSGVpZ2h0Ow0KLSAgICB9DQotDQotICAgIEJPT0wgQ29udGFpbnMoSU4gY29uc3QgUG9pbnRGJiBwdCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIENvbnRhaW5zKHB0LlgsIHB0LlkpOw0KLSAgICB9DQotDQotICAgIEJPT0wgQ29udGFpbnMoSU4gY29uc3QgUmVjdEYmIHJlY3QpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiAoWCA8PSByZWN0LlgpICYmIChyZWN0LkdldFJpZ2h0KCkgPD0gR2V0UmlnaHQoKSkgJiYNCi0gICAgICAgICAgICAgICAoWSA8PSByZWN0LlkpICYmIChyZWN0LkdldEJvdHRvbSgpIDw9IEdldEJvdHRvbSgpKTsNCi0gICAgfQ0KLQ0KLSAgICBWT0lEIEluZmxhdGUoSU4gUkVBTCBkeCwNCi0gICAgICAgICAgICAgICAgIElOIFJFQUwgZHkpDQotICAgIHsNCi0gICAgICAgIFggLT0gZHg7DQotICAgICAgICBZIC09IGR5Ow0KLSAgICAgICAgV2lkdGggKz0gMipkeDsNCi0gICAgICAgIEhlaWdodCArPSAyKmR5Ow0KLSAgICB9DQotDQotICAgIFZPSUQgSW5mbGF0ZShJTiBjb25zdCBQb2ludEYmIHBvaW50KQ0KLSAgICB7DQotICAgICAgICBJbmZsYXRlKHBvaW50LlgsIHBvaW50LlkpOw0KLSAgICB9DQotDQotICAgIC8vIEludGVyc2VjdCB0aGUgY3VycmVudCByZWN0IHdpdGggdGhlIHNwZWNpZmllZCBvYmplY3QNCi0NCi0gICAgQk9PTCBJbnRlcnNlY3QoSU4gY29uc3QgUmVjdEYmIHJlY3QpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBJbnRlcnNlY3QoKnRoaXMsICp0aGlzLCByZWN0KTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBJbnRlcnNlY3QgcmVjdCBhIGFuZCBiIGFuZCBzYXZlIHRoZSByZXN1bHQgaW50byBjDQotICAgIC8vIE5vdGljZSB0aGF0IGMgbWF5IGJlIHRoZSBzYW1lIG9iamVjdCBhcyBhIG9yIGIuDQotDQotICAgIHN0YXRpYyBCT09MIEludGVyc2VjdChPVVQgUmVjdEYmIGMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0RiYgYSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3RGJiBiKQ0KLSAgICB7DQotICAgICAgICBSRUFMIHJpZ2h0ID0gbWluKGEuR2V0UmlnaHQoKSwgYi5HZXRSaWdodCgpKTsNCi0gICAgICAgIFJFQUwgYm90dG9tID0gbWluKGEuR2V0Qm90dG9tKCksIGIuR2V0Qm90dG9tKCkpOw0KLSAgICAgICAgUkVBTCBsZWZ0ID0gbWF4KGEuR2V0TGVmdCgpLCBiLkdldExlZnQoKSk7DQotICAgICAgICBSRUFMIHRvcCA9IG1heChhLkdldFRvcCgpLCBiLkdldFRvcCgpKTsNCi0NCi0gICAgICAgIGMuWCA9IGxlZnQ7DQotICAgICAgICBjLlkgPSB0b3A7DQotICAgICAgICBjLldpZHRoID0gcmlnaHQgLSBsZWZ0Ow0KLSAgICAgICAgYy5IZWlnaHQgPSBib3R0b20gLSB0b3A7DQotICAgICAgICByZXR1cm4gIWMuSXNFbXB0eUFyZWEoKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIHNwZWNpZmllZCByZWN0IGludGVyc2VjdHMgd2l0aCB0aGUNCi0gICAgLy8gY3VycmVudCByZWN0IG9iamVjdC4NCi0NCi0gICAgQk9PTCBJbnRlcnNlY3RzV2l0aChJTiBjb25zdCBSZWN0RiYgcmVjdCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIChHZXRMZWZ0KCkgPCByZWN0LkdldFJpZ2h0KCkgJiYNCi0gICAgICAgICAgICAgICAgR2V0VG9wKCkgPCByZWN0LkdldFRvcCgpICYmDQotICAgICAgICAgICAgICAgIEdldFJpZ2h0KCkgPiByZWN0LkdldExlZnQoKSAmJg0KLSAgICAgICAgICAgICAgICBHZXRCb3R0b20oKSA+IHJlY3QuR2V0VG9wKCkpOw0KLSAgICB9DQotDQotICAgIHN0YXRpYyBCT09MIFVuaW9uKE9VVCBSZWN0RiYgYywNCi0gICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdEYmIGEsDQotICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3RGJiBiKQ0KLSAgICB7DQotICAgICAgICBSRUFMIHJpZ2h0ID0gbWF4KGEuR2V0UmlnaHQoKSwgYi5HZXRSaWdodCgpKTsNCi0gICAgICAgIFJFQUwgYm90dG9tID0gbWF4KGEuR2V0Qm90dG9tKCksIGIuR2V0Qm90dG9tKCkpOw0KLSAgICAgICAgUkVBTCBsZWZ0ID0gbWluKGEuR2V0TGVmdCgpLCBiLkdldExlZnQoKSk7DQotICAgICAgICBSRUFMIHRvcCA9IG1pbihhLkdldFRvcCgpLCBiLkdldFRvcCgpKTsNCi0NCi0gICAgICAgIGMuWCA9IGxlZnQ7DQotICAgICAgICBjLlkgPSB0b3A7DQotICAgICAgICBjLldpZHRoID0gcmlnaHQgLSBsZWZ0Ow0KLSAgICAgICAgYy5IZWlnaHQgPSBib3R0b20gLSB0b3A7DQotICAgICAgICByZXR1cm4gIWMuSXNFbXB0eUFyZWEoKTsNCi0gICAgfQ0KLQ0KLSAgICBWT0lEIE9mZnNldChJTiBjb25zdCBQb2ludEYmIHBvaW50KQ0KLSAgICB7DQotICAgICAgICBPZmZzZXQocG9pbnQuWCwgcG9pbnQuWSk7DQotICAgIH0NCi0NCi0gICAgVk9JRCBPZmZzZXQoSU4gUkVBTCBkeCwNCi0gICAgICAgICAgICAgICAgSU4gUkVBTCBkeSkNCi0gICAgew0KLSAgICAgICAgWCArPSBkeDsNCi0gICAgICAgIFkgKz0gZHk7DQotICAgIH0NCi0NCi1wdWJsaWM6DQotDQotICAgIFJFQUwgWDsNCi0gICAgUkVBTCBZOw0KLSAgICBSRUFMIFdpZHRoOw0KLSAgICBSRUFMIEhlaWdodDsNCi19Ow0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBSZXByZXNlbnRzIGEgcmVjdGFuZ2xlIGluIGEgMkQgY29vcmRpbmF0ZSBzeXN0ZW0NCi0vLyAgKGludGVnZXIgY29vcmRpbmF0ZXMpDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLWNsYXNzIFJlY3QNCi17DQotcHVibGljOg0KLQ0KLSAgICAvLyBEZWZhdWx0IGNvbnN0cnVjdG9yDQotDQotICAgIFJlY3QoKQ0KLSAgICB7DQotICAgICAgICBYID0gWSA9IFdpZHRoID0gSGVpZ2h0ID0gMDsNCi0gICAgfQ0KLQ0KLSAgICBSZWN0KElOIElOVCB4LA0KLSAgICAgICAgIElOIElOVCB5LA0KLSAgICAgICAgIElOIElOVCB3aWR0aCwNCi0gICAgICAgICBJTiBJTlQgaGVpZ2h0KQ0KLSAgICB7DQotICAgICAgICBYID0geDsNCi0gICAgICAgIFkgPSB5Ow0KLSAgICAgICAgV2lkdGggPSB3aWR0aDsNCi0gICAgICAgIEhlaWdodCA9IGhlaWdodDsNCi0gICAgfQ0KLQ0KLSAgICBSZWN0KElOIGNvbnN0IFBvaW50JiBsb2NhdGlvbiwNCi0gICAgICAgICBJTiBjb25zdCBTaXplJiBzaXplKQ0KLSAgICB7DQotICAgICAgICBYID0gbG9jYXRpb24uWDsNCi0gICAgICAgIFkgPSBsb2NhdGlvbi5ZOw0KLSAgICAgICAgV2lkdGggPSBzaXplLldpZHRoOw0KLSAgICAgICAgSGVpZ2h0ID0gc2l6ZS5IZWlnaHQ7DQotICAgIH0NCi0NCi0gICAgUmVjdCogQ2xvbmUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbmV3IFJlY3QoWCwgWSwgV2lkdGgsIEhlaWdodCk7DQotICAgIH0NCi0NCi0gICAgVk9JRCBHZXRMb2NhdGlvbihPVVQgUG9pbnQqIHBvaW50KSBjb25zdA0KLSAgICB7DQotICAgICAgICBwb2ludC0+WCA9IFg7DQotICAgICAgICBwb2ludC0+WSA9IFk7DQotICAgIH0NCi0NCi0gICAgVk9JRCBHZXRTaXplKE9VVCBTaXplKiBzaXplKSBjb25zdA0KLSAgICB7DQotICAgICAgICBzaXplLT5XaWR0aCA9IFdpZHRoOw0KLSAgICAgICAgc2l6ZS0+SGVpZ2h0ID0gSGVpZ2h0Ow0KLSAgICB9DQotDQotICAgIFZPSUQgR2V0Qm91bmRzKE9VVCBSZWN0KiByZWN0KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZWN0LT5YID0gWDsNCi0gICAgICAgIHJlY3QtPlkgPSBZOw0KLSAgICAgICAgcmVjdC0+V2lkdGggPSBXaWR0aDsNCi0gICAgICAgIHJlY3QtPkhlaWdodCA9IEhlaWdodDsNCi0gICAgfQ0KLQ0KLSAgICAvLyBSZXR1cm4gdGhlIGxlZnQsIHRvcCwgcmlnaHQsIGFuZCBib3R0b20NCi0gICAgLy8gY29vcmRpbmF0ZXMgb2YgdGhlIHJlY3RhbmdsZQ0KLQ0KLSAgICBJTlQgR2V0TGVmdCgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBYOw0KLSAgICB9DQotDQotICAgIElOVCBHZXRUb3AoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gWTsNCi0gICAgfQ0KLQ0KLSAgICBJTlQgR2V0UmlnaHQoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gWCtXaWR0aDsNCi0gICAgfQ0KLQ0KLSAgICBJTlQgR2V0Qm90dG9tKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFkrSGVpZ2h0Ow0KLSAgICB9DQotDQotICAgIC8vIERldGVybWluZSBpZiB0aGUgcmVjdGFuZ2xlIGlzIGVtcHR5DQotICAgIEJPT0wgSXNFbXB0eUFyZWEoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gKFdpZHRoIDw9IDApIHx8IChIZWlnaHQgPD0gMCk7DQotICAgIH0NCi0NCi0gICAgQk9PTCBFcXVhbHMoSU4gY29uc3QgUmVjdCAmIHJlY3QpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBYID09IHJlY3QuWCAmJg0KLSAgICAgICAgICAgICAgIFkgPT0gcmVjdC5ZICYmDQotICAgICAgICAgICAgICAgV2lkdGggPT0gcmVjdC5XaWR0aCAmJg0KLSAgICAgICAgICAgICAgIEhlaWdodCA9PSByZWN0LkhlaWdodDsNCi0gICAgfQ0KLQ0KLSAgICBCT09MIENvbnRhaW5zKElOIElOVCB4LA0KLSAgICAgICAgICAgICAgICAgIElOIElOVCB5KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4geCA+PSBYICYmIHggPCBYK1dpZHRoICYmDQotICAgICAgICAgICAgICAgeSA+PSBZICYmIHkgPCBZK0hlaWdodDsNCi0gICAgfQ0KLQ0KLSAgICBCT09MIENvbnRhaW5zKElOIGNvbnN0IFBvaW50JiBwdCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIENvbnRhaW5zKHB0LlgsIHB0LlkpOw0KLSAgICB9DQotDQotICAgIEJPT0wgQ29udGFpbnMoSU4gUmVjdCYgcmVjdCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIChYIDw9IHJlY3QuWCkgJiYgKHJlY3QuR2V0UmlnaHQoKSA8PSBHZXRSaWdodCgpKSAmJg0KLSAgICAgICAgICAgICAgIChZIDw9IHJlY3QuWSkgJiYgKHJlY3QuR2V0Qm90dG9tKCkgPD0gR2V0Qm90dG9tKCkpOw0KLSAgICB9DQotDQotICAgIFZPSUQgSW5mbGF0ZShJTiBJTlQgZHgsDQotICAgICAgICAgICAgICAgICBJTiBJTlQgZHkpDQotICAgIHsNCi0gICAgICAgIFggLT0gZHg7DQotICAgICAgICBZIC09IGR5Ow0KLSAgICAgICAgV2lkdGggKz0gMipkeDsNCi0gICAgICAgIEhlaWdodCArPSAyKmR5Ow0KLSAgICB9DQotDQotICAgIFZPSUQgSW5mbGF0ZShJTiBjb25zdCBQb2ludCYgcG9pbnQpDQotICAgIHsNCi0gICAgICAgIEluZmxhdGUocG9pbnQuWCwgcG9pbnQuWSk7DQotICAgIH0NCi0NCi0gICAgLy8gSW50ZXJzZWN0IHRoZSBjdXJyZW50IHJlY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIG9iamVjdA0KLQ0KLSAgICBCT09MIEludGVyc2VjdChJTiBjb25zdCBSZWN0JiByZWN0KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gSW50ZXJzZWN0KCp0aGlzLCAqdGhpcywgcmVjdCk7DQotICAgIH0NCi0NCi0gICAgLy8gSW50ZXJzZWN0IHJlY3QgYSBhbmQgYiBhbmQgc2F2ZSB0aGUgcmVzdWx0IGludG8gYw0KLSAgICAvLyBOb3RpY2UgdGhhdCBjIG1heSBiZSB0aGUgc2FtZSBvYmplY3QgYXMgYSBvciBiLg0KLQ0KLSAgICBzdGF0aWMgQk9PTCBJbnRlcnNlY3QoT1VUIFJlY3QmIGMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0JiBhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdCYgYikNCi0gICAgew0KLSAgICAgICAgSU5UIHJpZ2h0ID0gbWluKGEuR2V0UmlnaHQoKSwgYi5HZXRSaWdodCgpKTsNCi0gICAgICAgIElOVCBib3R0b20gPSBtaW4oYS5HZXRCb3R0b20oKSwgYi5HZXRCb3R0b20oKSk7DQotICAgICAgICBJTlQgbGVmdCA9IG1heChhLkdldExlZnQoKSwgYi5HZXRMZWZ0KCkpOw0KLSAgICAgICAgSU5UIHRvcCA9IG1heChhLkdldFRvcCgpLCBiLkdldFRvcCgpKTsNCi0NCi0gICAgICAgIGMuWCA9IGxlZnQ7DQotICAgICAgICBjLlkgPSB0b3A7DQotICAgICAgICBjLldpZHRoID0gcmlnaHQgLSBsZWZ0Ow0KLSAgICAgICAgYy5IZWlnaHQgPSBib3R0b20gLSB0b3A7DQotICAgICAgICByZXR1cm4gIWMuSXNFbXB0eUFyZWEoKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIHNwZWNpZmllZCByZWN0IGludGVyc2VjdHMgd2l0aCB0aGUNCi0gICAgLy8gY3VycmVudCByZWN0IG9iamVjdC4NCi0NCi0gICAgQk9PTCBJbnRlcnNlY3RzV2l0aChJTiBjb25zdCBSZWN0JiByZWN0KSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gKEdldExlZnQoKSA8IHJlY3QuR2V0UmlnaHQoKSAmJg0KLSAgICAgICAgICAgICAgICBHZXRUb3AoKSA8IHJlY3QuR2V0VG9wKCkgJiYNCi0gICAgICAgICAgICAgICAgR2V0UmlnaHQoKSA+IHJlY3QuR2V0TGVmdCgpICYmDQotICAgICAgICAgICAgICAgIEdldEJvdHRvbSgpID4gcmVjdC5HZXRUb3AoKSk7DQotICAgIH0NCi0NCi0gICAgc3RhdGljIEJPT0wgVW5pb24oT1VUIFJlY3QmIGMsDQotICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3QmIGEsDQotICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3QmIGIpDQotICAgIHsNCi0gICAgICAgIElOVCByaWdodCA9IG1heChhLkdldFJpZ2h0KCksIGIuR2V0UmlnaHQoKSk7DQotICAgICAgICBJTlQgYm90dG9tID0gbWF4KGEuR2V0Qm90dG9tKCksIGIuR2V0Qm90dG9tKCkpOw0KLSAgICAgICAgSU5UIGxlZnQgPSBtaW4oYS5HZXRMZWZ0KCksIGIuR2V0TGVmdCgpKTsNCi0gICAgICAgIElOVCB0b3AgPSBtaW4oYS5HZXRUb3AoKSwgYi5HZXRUb3AoKSk7DQotDQotICAgICAgICBjLlggPSBsZWZ0Ow0KLSAgICAgICAgYy5ZID0gdG9wOw0KLSAgICAgICAgYy5XaWR0aCA9IHJpZ2h0IC0gbGVmdDsNCi0gICAgICAgIGMuSGVpZ2h0ID0gYm90dG9tIC0gdG9wOw0KLSAgICAgICAgcmV0dXJuICFjLklzRW1wdHlBcmVhKCk7DQotICAgIH0NCi0NCi0gICAgVk9JRCBPZmZzZXQoSU4gY29uc3QgUG9pbnQmIHBvaW50KQ0KLSAgICB7DQotICAgICAgICBPZmZzZXQocG9pbnQuWCwgcG9pbnQuWSk7DQotICAgIH0NCi0NCi0gICAgVk9JRCBPZmZzZXQoSU4gSU5UIGR4LA0KLSAgICAgICAgICAgICAgICBJTiBJTlQgZHkpDQotICAgIHsNCi0gICAgICAgIFggKz0gZHg7DQotICAgICAgICBZICs9IGR5Ow0KLSAgICB9DQotDQotcHVibGljOg0KLQ0KLSAgICBJTlQgWDsNCi0gICAgSU5UIFk7DQotICAgIElOVCBXaWR0aDsNCi0gICAgSU5UIEhlaWdodDsNCi19Ow0KLQ0KLS8vIEEgdXNlciBtdXN0IG1hbmdlIG1lbW9yeSBmb3IgUGF0aERhdGEuDQotDQotY2xhc3MgUGF0aERhdGENCi17DQotcHVibGljOg0KLSAgICBQYXRoRGF0YSgpDQotICAgIHsNCi0gICAgICAgIENvdW50ID0gMDsNCi0gICAgICAgIFBvaW50cyA9IE5VTEw7DQotICAgICAgICBUeXBlcyA9IE5VTEw7DQotICAgIH0NCi0NCi0gICAgflBhdGhEYXRhKCkNCi0gICAgew0KLSAgICAgICAgaWYgKFBvaW50cyAhPSBOVUxMKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGRlbGV0ZSBQb2ludHM7DQotICAgICAgICB9DQotDQotICAgICAgICBpZiAoVHlwZXMgIT0gTlVMTCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBkZWxldGUgVHlwZXM7DQotICAgICAgICB9DQotICAgIH0NCi0NCi0jaWZkZWYgRENSX1VTRV9ORVdfMjUwOTMyDQotDQotcHJpdmF0ZToNCi0gICAgUGF0aERhdGEoY29uc3QgUGF0aERhdGEgJik7DQotICAgIFBhdGhEYXRhJiBvcGVyYXRvcj0oY29uc3QgUGF0aERhdGEgJik7DQotDQotI2VuZGlmDQotDQotcHVibGljOg0KLSAgICBJTlQgQ291bnQ7DQotICAgIFBvaW50RiogUG9pbnRzOw0KLSAgICBCWVRFKiBUeXBlczsNCi19Ow0KLQ0KLQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyB0ZXh0IGNoYXJhY3RlciByYW5nZQ0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1jbGFzcyBDaGFyYWN0ZXJSYW5nZQ0KLXsNCi1wdWJsaWM6DQotICAgIENoYXJhY3RlclJhbmdlKA0KLSAgICAgICAgSU5UIGZpcnN0LA0KLSAgICAgICAgSU5UIGxlbmd0aA0KLSAgICApIDoNCi0gICAgICAgIEZpcnN0ICAgKGZpcnN0KSwNCi0gICAgICAgIExlbmd0aCAgKGxlbmd0aCkNCi0gICAge30NCi0NCi0gICAgQ2hhcmFjdGVyUmFuZ2UoKSA6IEZpcnN0KDApLCBMZW5ndGgoMCkNCi0gICAge30NCi0NCi0gICAgQ2hhcmFjdGVyUmFuZ2UgJiBvcGVyYXRvciA9IChjb25zdCBDaGFyYWN0ZXJSYW5nZSAmcmhzKQ0KLSAgICB7DQotICAgICAgICBGaXJzdCAgPSByaHMuRmlyc3Q7DQotICAgICAgICBMZW5ndGggPSByaHMuTGVuZ3RoOw0KLSAgICAgICAgcmV0dXJuICp0aGlzOw0KLSAgICB9DQotDQotICAgIElOVCBGaXJzdDsNCi0gICAgSU5UIExlbmd0aDsNCi19Ow0KLQ0KLSNlbmRpZiAvLyAhX0dESVBMVVNUWVBFU19IUFANCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCisqCisqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqIE1vZHVsZSBOYW1lOgorKgorKiAgIEdkaXBsdXNUeXBlcy5oCisqCisqIEFic3RyYWN0OgorKgorKiAgIEJhc2ljIHR5cGVzIHVzZWQgYnkgR0RJKworKgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9HRElQTFVTVFlQRVNfSAorI2RlZmluZSBfR0RJUExVU1RZUEVTX0gKKworI2lmbmRlZiBEQ1JfVVNFX05FV18xNzU4NjYKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTElCIHZlcnNpb24gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3R5cGVkZWYgVk9JRCAoX19jZGVjbCAqREVCVUdFVkVOVEZVTkNUSU9OKShJTlQgbGV2ZWwsIENIQVIgKm1lc3NhZ2UpOworCitleHRlcm4gIkMiIEJPT0wgX19zdGRjYWxsIEluaXRpYWxpemVHZGlwbHVzKERFQlVHRVZFTlRGVU5DVElPTik7CitleHRlcm4gIkMiIFZPSUQgX19zdGRjYWxsIFVuaW5pdGlhbGl6ZUdkaXBsdXMoKTsKKworI2VuZGlmCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENhbGxiYWNrIGZ1bmN0aW9ucworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitleHRlcm4gIkMiIHsKK3R5cGVkZWYgQk9PTCAoQ0FMTEJBQ0sgKiBJbWFnZUFib3J0KShWT0lEICopOwordHlwZWRlZiBJbWFnZUFib3J0IERyYXdJbWFnZUFib3J0OwordHlwZWRlZiBJbWFnZUFib3J0IEdldFRodW1ibmFpbEltYWdlQWJvcnQ7Cit9CisKKy8vIENhbGxiYWNrIGZvciBFbnVtZXJhdGVNZXRhZmlsZSBtZXRob2RzLiAgVGhlIHBhcmFtZXRlcnMgYXJlOgorCisvLyAgICAgIHJlY29yZFR5cGUgICAgICBXTUYsIEVNRiwgb3IgRU1GKyByZWNvcmQgdHlwZQorLy8gICAgICBmbGFncyAgICAgICAgICAgKGFsd2F5cyAwIGZvciBXTUYvRU1GIHJlY29yZHMpCisvLyAgICAgIGRhdGFTaXplICAgICAgICBzaXplIG9mIHRoZSByZWNvcmQgZGF0YSAoaW4gYnl0ZXMpLCBvciAwIGlmIG5vIGRhdGEKKy8vICAgICAgZGF0YSAgICAgICAgICAgIHBvaW50ZXIgdG8gdGhlIHJlY29yZCBkYXRhLCBvciBOVUxMIGlmIG5vIGRhdGEKKy8vICAgICAgY2FsbGJhY2tEYXRhICAgIHBvaW50ZXIgdG8gY2FsbGJhY2tEYXRhLCBpZiBhbnkKKworLy8gVGhpcyBtZXRob2QgY2FuIHRoZW4gY2FsbCBNZXRhZmlsZTo6UGxheVJlY29yZCB0byBwbGF5IHRoZQorLy8gcmVjb3JkIHRoYXQgd2FzIGp1c3QgZW51bWVyYXRlZC4gIElmIHRoaXMgbWV0aG9kICByZXR1cm5zCisvLyBGQUxTRSwgdGhlIGVudW1lcmF0aW9uIHByb2Nlc3MgaXMgYWJvcnRlZC4gIE90aGVyd2lzZSwgaXQgY29udGludWVzLgorCitleHRlcm4gIkMiIHsKK3R5cGVkZWYgQk9PTCAoQ0FMTEJBQ0sgKiBFbnVtZXJhdGVNZXRhZmlsZVByb2MpKEVtZlBsdXNSZWNvcmRUeXBlLFVJTlQsVUlOVCxjb25zdCBCWVRFKixWT0lEKik7Cit9CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFByaW1pdGl2ZSBkYXRhIHR5cGVzCisvLworLy8gTk9URToKKy8vICBUeXBlcyBhbHJlYWR5IGRlZmluZWQgaW4gc3RhbmRhcmQgaGVhZGVyIGZpbGVzOgorLy8gICAgICBJTlQ4CisvLyAgICAgIFVJTlQ4CisvLyAgICAgIElOVDE2CisvLyAgICAgIFVJTlQxNgorLy8gICAgICBJTlQzMgorLy8gICAgICBVSU5UMzIKKy8vICAgICAgSU5UNjQKKy8vICAgICAgVUlOVDY0CisvLworLy8gIEF2b2lkIHVzaW5nIHRoZSBmb2xsb3dpbmcgdHlwZXM6CisvLyAgICAgIExPTkcgLSB1c2UgSU5UCisvLyAgICAgIFVMT05HIC0gdXNlIFVJTlQKKy8vICAgICAgRFdPUkQgLSB1c2UgVUlOVDMyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3R5cGVkZWYgZmxvYXQgUkVBTDsKKworI2RlZmluZSBSRUFMX01BWCAgICAgICAgICAgIEZMVF9NQVgKKyNkZWZpbmUgUkVBTF9NSU4gICAgICAgICAgICBGTFRfTUlOCisjZGVmaW5lIFJFQUxfVE9MRVJBTkNFICAgICAoRkxUX01JTiAqIDEwMCkKKyNkZWZpbmUgUkVBTF9FUFNJTE9OICAgICAgICAxLjE5MjA5Mjg5NmUtMDdGICAgICAgICAvKiBGTFRfRVBTSUxPTiAqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucyBvZiB2YXJpb3VzIGludGVybmFsIGNsYXNzZXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgU2l6ZTsKK2NsYXNzIFNpemVGOworY2xhc3MgUG9pbnQ7CitjbGFzcyBQb2ludEY7CitjbGFzcyBSZWN0OworY2xhc3MgUmVjdEY7CitjbGFzcyBDaGFyYWN0ZXJSYW5nZTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmV0dXJuIHZhbHVlcyBmcm9tIGFueSBHREkrIEFQSQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitlbnVtIFN0YXR1cworeworICAgIE9rID0gMCwKKyAgICBHZW5lcmljRXJyb3IgPSAxLAorICAgIEludmFsaWRQYXJhbWV0ZXIgPSAyLAorICAgIE91dE9mTWVtb3J5ID0gMywKKyAgICBPYmplY3RCdXN5ID0gNCwKKyAgICBJbnN1ZmZpY2llbnRCdWZmZXIgPSA1LAorICAgIE5vdEltcGxlbWVudGVkID0gNiwKKyAgICBXaW4zMkVycm9yID0gNywKKyAgICBXcm9uZ1N0YXRlID0gOCwKKyAgICBBYm9ydGVkID0gOSwKKyNpZmRlZiBEQ1JfVVNFX05FV18xMzU0MjkKKyAgICBGaWxlTm90Rm91bmQgPSAxMCwKKyAgICBWYWx1ZU92ZXJmbG93ID0gMTEsCisgICAgQWNjZXNzRGVuaWVkID0gMTIsCisgICAgVW5rbm93bkltYWdlRm9ybWF0ID0gMTMsCisgICAgRm9udEZhbWlseU5vdEZvdW5kID0gMTQsCisgICAgRm9udFN0eWxlTm90Rm91bmQgPSAxNSwKKyAgICBOb3RUcnVlVHlwZUZvbnQgPSAxNiwKKyNlbHNlCisgICAgTm90Rm91bmQgPSAxMCwKKyAgICBWYWx1ZU92ZXJmbG93ID0gMTEsCisjZW5kaWYKKyAgICBVbnN1cHBvcnRlZEdkaXBsdXNWZXJzaW9uID0gMTcsCisgICAgR2RpcGx1c05vdEluaXRpYWxpemVkCisKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlcHJlc2VudHMgYSBkaW1lbnNpb24gaW4gYSAyRCBjb29yZGluYXRlIHN5c3RlbQorLy8gIChmbG9hdGluZy1wb2ludCBjb29yZGluYXRlcykKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgU2l6ZUYKK3sKK3B1YmxpYzoKKworICAgLy8gRGVmYXVsdCBjb25zdHJ1Y3RvcgorICAgIFNpemVGKCkKKyAgICB7CisgICAgICAgIFdpZHRoID0gSGVpZ2h0ID0gMC4wZjsKKyAgICB9CisKKyAgICBTaXplRihJTiBjb25zdCBTaXplRiYgc2l6ZSkKKyAgICB7CisgICAgICAgIFdpZHRoID0gc2l6ZS5XaWR0aDsKKyAgICAgICAgSGVpZ2h0ID0gc2l6ZS5IZWlnaHQ7CisgICAgfQorCisgICAgU2l6ZUYoSU4gUkVBTCB3aWR0aCwKKyAgICAgICAgICBJTiBSRUFMIGhlaWdodCkKKyAgICB7CisgICAgICAgIFdpZHRoID0gd2lkdGg7CisgICAgICAgIEhlaWdodCA9IGhlaWdodDsKKyAgICB9CisKKyAgICBTaXplRiBvcGVyYXRvcisoSU4gY29uc3QgU2l6ZUYmIHN6KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNpemVGKFdpZHRoICsgc3ouV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICBIZWlnaHQgKyBzei5IZWlnaHQpOworICAgIH0KKworICAgIFNpemVGIG9wZXJhdG9yLShJTiBjb25zdCBTaXplRiYgc3opIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2l6ZUYoV2lkdGggLSBzei5XaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgIEhlaWdodCAtIHN6LkhlaWdodCk7CisgICAgfQorCisgICAgQk9PTCBFcXVhbHMoSU4gY29uc3QgU2l6ZUYmIHN6KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChXaWR0aCA9PSBzei5XaWR0aCkgJiYgKEhlaWdodCA9PSBzei5IZWlnaHQpOworICAgIH0KKworICAgIEJPT0wgRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChXaWR0aCA9PSAwLjBmICYmIEhlaWdodCA9PSAwLjBmKTsKKyAgICB9CisKK3B1YmxpYzoKKworICAgIFJFQUwgV2lkdGg7CisgICAgUkVBTCBIZWlnaHQ7Cit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXByZXNlbnRzIGEgZGltZW5zaW9uIGluIGEgMkQgY29vcmRpbmF0ZSBzeXN0ZW0KKy8vICAoaW50ZWdlciBjb29yZGluYXRlcykKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgU2l6ZQoreworcHVibGljOgorCisgICAvLyBEZWZhdWx0IGNvbnN0cnVjdG9yCisgICAgU2l6ZSgpCisgICAgeworICAgICAgICBXaWR0aCA9IEhlaWdodCA9IDA7CisgICAgfQorCisgICAgU2l6ZShJTiBjb25zdCBTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgV2lkdGggPSBzaXplLldpZHRoOworICAgICAgICBIZWlnaHQgPSBzaXplLkhlaWdodDsKKyAgICB9CisKKyAgICBTaXplKElOIElOVCB3aWR0aCwKKyAgICAgICAgIElOIElOVCBoZWlnaHQpCisgICAgeworICAgICAgICBXaWR0aCA9IHdpZHRoOworICAgICAgICBIZWlnaHQgPSBoZWlnaHQ7CisgICAgfQorCisgICAgU2l6ZSBvcGVyYXRvcisoSU4gY29uc3QgU2l6ZSYgc3opIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU2l6ZShXaWR0aCArIHN6LldpZHRoLAorICAgICAgICAgICAgICAgICAgICBIZWlnaHQgKyBzei5IZWlnaHQpOworICAgIH0KKworICAgIFNpemUgb3BlcmF0b3ItKElOIGNvbnN0IFNpemUmIHN6KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFNpemUoV2lkdGggLSBzei5XaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgSGVpZ2h0IC0gc3ouSGVpZ2h0KTsKKyAgICB9CisKKyAgICBCT09MIEVxdWFscyhJTiBjb25zdCBTaXplJiBzeikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoV2lkdGggPT0gc3ouV2lkdGgpICYmIChIZWlnaHQgPT0gc3ouSGVpZ2h0KTsKKyAgICB9CisKKyAgICBCT09MIEVtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoV2lkdGggPT0gMCAmJiBIZWlnaHQgPT0gMCk7CisgICAgfQorCitwdWJsaWM6CisKKyAgICBJTlQgV2lkdGg7CisgICAgSU5UIEhlaWdodDsKK307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlcHJlc2VudHMgYSBsb2NhdGlvbiBpbiBhIDJEIGNvb3JkaW5hdGUgc3lzdGVtCisvLyAgKGZsb2F0aW5nLXBvaW50IGNvb3JkaW5hdGVzKQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBQb2ludEYKK3sKK3B1YmxpYzoKKyAgIFBvaW50RigpCisgICB7CisgICAgICAgWCA9IFkgPSAwLjBmOworICAgfQorCisgICBQb2ludEYoSU4gY29uc3QgUG9pbnRGICZwb2ludCkKKyAgIHsKKyAgICAgICBYID0gcG9pbnQuWDsKKyAgICAgICBZID0gcG9pbnQuWTsKKyAgIH0KKworICAgUG9pbnRGKElOIGNvbnN0IFNpemVGICZzaXplKQorICAgeworICAgICAgIFggPSBzaXplLldpZHRoOworICAgICAgIFkgPSBzaXplLkhlaWdodDsKKyAgIH0KKworICAgUG9pbnRGKElOIFJFQUwgeCwKKyAgICAgICAgICBJTiBSRUFMIHkpCisgICB7CisgICAgICAgWCA9IHg7CisgICAgICAgWSA9IHk7CisgICB9CisKKyAgIFBvaW50RiBvcGVyYXRvcisoSU4gY29uc3QgUG9pbnRGJiBwb2ludCkgY29uc3QKKyAgIHsKKyAgICAgICByZXR1cm4gUG9pbnRGKFggKyBwb2ludC5YLAorICAgICAgICAgICAgICAgICAgICAgWSArIHBvaW50LlkpOworICAgfQorCisgICBQb2ludEYgb3BlcmF0b3ItKElOIGNvbnN0IFBvaW50RiYgcG9pbnQpIGNvbnN0CisgICB7CisgICAgICAgcmV0dXJuIFBvaW50RihYIC0gcG9pbnQuWCwKKyAgICAgICAgICAgICAgICAgICAgIFkgLSBwb2ludC5ZKTsKKyAgIH0KKworICAgQk9PTCBFcXVhbHMoSU4gY29uc3QgUG9pbnRGJiBwb2ludCkKKyAgIHsKKyAgICAgICByZXR1cm4gKFggPT0gcG9pbnQuWCkgJiYgKFkgPT0gcG9pbnQuWSk7CisgICB9CisKK3B1YmxpYzoKKworICAgIFJFQUwgWDsKKyAgICBSRUFMIFk7Cit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXByZXNlbnRzIGEgbG9jYXRpb24gaW4gYSAyRCBjb29yZGluYXRlIHN5c3RlbQorLy8gIChpbnRlZ2VyIGNvb3JkaW5hdGVzKQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBQb2ludAoreworcHVibGljOgorICAgUG9pbnQoKQorICAgeworICAgICAgIFggPSBZID0gMDsKKyAgIH0KKworICAgUG9pbnQoSU4gY29uc3QgUG9pbnQgJnBvaW50KQorICAgeworICAgICAgIFggPSBwb2ludC5YOworICAgICAgIFkgPSBwb2ludC5ZOworICAgfQorCisgICBQb2ludChJTiBjb25zdCBTaXplICZzaXplKQorICAgeworICAgICAgIFggPSBzaXplLldpZHRoOworICAgICAgIFkgPSBzaXplLkhlaWdodDsKKyAgIH0KKworICAgUG9pbnQoSU4gSU5UIHgsCisgICAgICAgICBJTiBJTlQgeSkKKyAgIHsKKyAgICAgICBYID0geDsKKyAgICAgICBZID0geTsKKyAgIH0KKworICAgUG9pbnQgb3BlcmF0b3IrKElOIGNvbnN0IFBvaW50JiBwb2ludCkgY29uc3QKKyAgIHsKKyAgICAgICByZXR1cm4gUG9pbnQoWCArIHBvaW50LlgsCisgICAgICAgICAgICAgICAgICAgIFkgKyBwb2ludC5ZKTsKKyAgIH0KKworICAgUG9pbnQgb3BlcmF0b3ItKElOIGNvbnN0IFBvaW50JiBwb2ludCkgY29uc3QKKyAgIHsKKyAgICAgICByZXR1cm4gUG9pbnQoWCAtIHBvaW50LlgsCisgICAgICAgICAgICAgICAgICAgIFkgLSBwb2ludC5ZKTsKKyAgIH0KKworICAgQk9PTCBFcXVhbHMoSU4gY29uc3QgUG9pbnQmIHBvaW50KQorICAgeworICAgICAgIHJldHVybiAoWCA9PSBwb2ludC5YKSAmJiAoWSA9PSBwb2ludC5ZKTsKKyAgIH0KKworcHVibGljOgorCisgICAgSU5UIFg7CisgICAgSU5UIFk7Cit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXByZXNlbnRzIGEgcmVjdGFuZ2xlIGluIGEgMkQgY29vcmRpbmF0ZSBzeXN0ZW0KKy8vICAoZmxvYXRpbmctcG9pbnQgY29vcmRpbmF0ZXMpCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFJlY3RGCit7CitwdWJsaWM6CisKKyAgICAvLyBEZWZhdWx0IGNvbnN0cnVjdG9yCisKKyAgICBSZWN0RigpCisgICAgeworICAgICAgICBYID0gWSA9IFdpZHRoID0gSGVpZ2h0ID0gMC4wZjsKKyAgICB9CisKKyAgICBSZWN0RihJTiBSRUFMIHgsCisgICAgICAgICAgSU4gUkVBTCB5LAorICAgICAgICAgIElOIFJFQUwgd2lkdGgsCisgICAgICAgICAgSU4gUkVBTCBoZWlnaHQpCisgICAgeworICAgICAgICBYID0geDsKKyAgICAgICAgWSA9IHk7CisgICAgICAgIFdpZHRoID0gd2lkdGg7CisgICAgICAgIEhlaWdodCA9IGhlaWdodDsKKyAgICB9CisKKyAgICBSZWN0RihJTiBjb25zdCBQb2ludEYmIGxvY2F0aW9uLAorICAgICAgICAgIElOIGNvbnN0IFNpemVGJiBzaXplKQorICAgIHsKKyAgICAgICAgWCA9IGxvY2F0aW9uLlg7CisgICAgICAgIFkgPSBsb2NhdGlvbi5ZOworICAgICAgICBXaWR0aCA9IHNpemUuV2lkdGg7CisgICAgICAgIEhlaWdodCA9IHNpemUuSGVpZ2h0OworICAgIH0KKworICAgIFJlY3RGKiBDbG9uZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbmV3IFJlY3RGKFgsIFksIFdpZHRoLCBIZWlnaHQpOworICAgIH0KKworICAgIFZPSUQgR2V0TG9jYXRpb24oT1VUIFBvaW50RiogcG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICBwb2ludC0+WCA9IFg7CisgICAgICAgIHBvaW50LT5ZID0gWTsKKyAgICB9CisKKyAgICBWT0lEIEdldFNpemUoT1VUIFNpemVGKiBzaXplKSBjb25zdAorICAgIHsKKyAgICAgICAgc2l6ZS0+V2lkdGggPSBXaWR0aDsKKyAgICAgICAgc2l6ZS0+SGVpZ2h0ID0gSGVpZ2h0OworICAgIH0KKworICAgIFZPSUQgR2V0Qm91bmRzKE9VVCBSZWN0RiogcmVjdCkgY29uc3QKKyAgICB7CisgICAgICAgIHJlY3QtPlggPSBYOworICAgICAgICByZWN0LT5ZID0gWTsKKyAgICAgICAgcmVjdC0+V2lkdGggPSBXaWR0aDsKKyAgICAgICAgcmVjdC0+SGVpZ2h0ID0gSGVpZ2h0OworICAgIH0KKworICAgIC8vIFJldHVybiB0aGUgbGVmdCwgdG9wLCByaWdodCwgYW5kIGJvdHRvbQorICAgIC8vIGNvb3JkaW5hdGVzIG9mIHRoZSByZWN0YW5nbGUKKworICAgIFJFQUwgR2V0TGVmdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gWDsKKyAgICB9CisKKyAgICBSRUFMIEdldFRvcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gWTsKKyAgICB9CisKKyAgICBSRUFMIEdldFJpZ2h0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBYK1dpZHRoOworICAgIH0KKworICAgIFJFQUwgR2V0Qm90dG9tKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBZK0hlaWdodDsKKyAgICB9CisKKyAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIHJlY3RhbmdsZSBpcyBlbXB0eQorICAgIEJPT0wgSXNFbXB0eUFyZWEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChXaWR0aCA8PSBSRUFMX0VQU0lMT04pIHx8IChIZWlnaHQgPD0gUkVBTF9FUFNJTE9OKTsKKyAgICB9CisKKyAgICBCT09MIEVxdWFscyhJTiBjb25zdCBSZWN0RiAmIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gWCA9PSByZWN0LlggJiYKKyAgICAgICAgICAgICAgIFkgPT0gcmVjdC5ZICYmCisgICAgICAgICAgICAgICBXaWR0aCA9PSByZWN0LldpZHRoICYmCisgICAgICAgICAgICAgICBIZWlnaHQgPT0gcmVjdC5IZWlnaHQ7CisgICAgfQorCisgICAgQk9PTCBDb250YWlucyhJTiBSRUFMIHgsCisgICAgICAgICAgICAgICAgICBJTiBSRUFMIHkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4geCA+PSBYICYmIHggPCBYK1dpZHRoICYmCisgICAgICAgICAgICAgICB5ID49IFkgJiYgeSA8IFkrSGVpZ2h0OworICAgIH0KKworICAgIEJPT0wgQ29udGFpbnMoSU4gY29uc3QgUG9pbnRGJiBwdCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBDb250YWlucyhwdC5YLCBwdC5ZKTsKKyAgICB9CisKKyAgICBCT09MIENvbnRhaW5zKElOIGNvbnN0IFJlY3RGJiByZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChYIDw9IHJlY3QuWCkgJiYgKHJlY3QuR2V0UmlnaHQoKSA8PSBHZXRSaWdodCgpKSAmJgorICAgICAgICAgICAgICAgKFkgPD0gcmVjdC5ZKSAmJiAocmVjdC5HZXRCb3R0b20oKSA8PSBHZXRCb3R0b20oKSk7CisgICAgfQorCisgICAgVk9JRCBJbmZsYXRlKElOIFJFQUwgZHgsCisgICAgICAgICAgICAgICAgIElOIFJFQUwgZHkpCisgICAgeworICAgICAgICBYIC09IGR4OworICAgICAgICBZIC09IGR5OworICAgICAgICBXaWR0aCArPSAyKmR4OworICAgICAgICBIZWlnaHQgKz0gMipkeTsKKyAgICB9CisKKyAgICBWT0lEIEluZmxhdGUoSU4gY29uc3QgUG9pbnRGJiBwb2ludCkKKyAgICB7CisgICAgICAgIEluZmxhdGUocG9pbnQuWCwgcG9pbnQuWSk7CisgICAgfQorCisgICAgLy8gSW50ZXJzZWN0IHRoZSBjdXJyZW50IHJlY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIG9iamVjdAorCisgICAgQk9PTCBJbnRlcnNlY3QoSU4gY29uc3QgUmVjdEYmIHJlY3QpCisgICAgeworICAgICAgICByZXR1cm4gSW50ZXJzZWN0KCp0aGlzLCAqdGhpcywgcmVjdCk7CisgICAgfQorCisgICAgLy8gSW50ZXJzZWN0IHJlY3QgYSBhbmQgYiBhbmQgc2F2ZSB0aGUgcmVzdWx0IGludG8gYworICAgIC8vIE5vdGljZSB0aGF0IGMgbWF5IGJlIHRoZSBzYW1lIG9iamVjdCBhcyBhIG9yIGIuCisKKyAgICBzdGF0aWMgQk9PTCBJbnRlcnNlY3QoT1VUIFJlY3RGJiBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0RiYgYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdEYmIGIpCisgICAgeworICAgICAgICBSRUFMIHJpZ2h0ID0gbWluKGEuR2V0UmlnaHQoKSwgYi5HZXRSaWdodCgpKTsKKyAgICAgICAgUkVBTCBib3R0b20gPSBtaW4oYS5HZXRCb3R0b20oKSwgYi5HZXRCb3R0b20oKSk7CisgICAgICAgIFJFQUwgbGVmdCA9IG1heChhLkdldExlZnQoKSwgYi5HZXRMZWZ0KCkpOworICAgICAgICBSRUFMIHRvcCA9IG1heChhLkdldFRvcCgpLCBiLkdldFRvcCgpKTsKKworICAgICAgICBjLlggPSBsZWZ0OworICAgICAgICBjLlkgPSB0b3A7CisgICAgICAgIGMuV2lkdGggPSByaWdodCAtIGxlZnQ7CisgICAgICAgIGMuSGVpZ2h0ID0gYm90dG9tIC0gdG9wOworICAgICAgICByZXR1cm4gIWMuSXNFbXB0eUFyZWEoKTsKKyAgICB9CisKKyAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIHNwZWNpZmllZCByZWN0IGludGVyc2VjdHMgd2l0aCB0aGUKKyAgICAvLyBjdXJyZW50IHJlY3Qgb2JqZWN0LgorCisgICAgQk9PTCBJbnRlcnNlY3RzV2l0aChJTiBjb25zdCBSZWN0RiYgcmVjdCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoR2V0TGVmdCgpIDwgcmVjdC5HZXRSaWdodCgpICYmCisgICAgICAgICAgICAgICAgR2V0VG9wKCkgPCByZWN0LkdldFRvcCgpICYmCisgICAgICAgICAgICAgICAgR2V0UmlnaHQoKSA+IHJlY3QuR2V0TGVmdCgpICYmCisgICAgICAgICAgICAgICAgR2V0Qm90dG9tKCkgPiByZWN0LkdldFRvcCgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQk9PTCBVbmlvbihPVVQgUmVjdEYmIGMsCisgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdEYmIGEsCisgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdEYmIGIpCisgICAgeworICAgICAgICBSRUFMIHJpZ2h0ID0gbWF4KGEuR2V0UmlnaHQoKSwgYi5HZXRSaWdodCgpKTsKKyAgICAgICAgUkVBTCBib3R0b20gPSBtYXgoYS5HZXRCb3R0b20oKSwgYi5HZXRCb3R0b20oKSk7CisgICAgICAgIFJFQUwgbGVmdCA9IG1pbihhLkdldExlZnQoKSwgYi5HZXRMZWZ0KCkpOworICAgICAgICBSRUFMIHRvcCA9IG1pbihhLkdldFRvcCgpLCBiLkdldFRvcCgpKTsKKworICAgICAgICBjLlggPSBsZWZ0OworICAgICAgICBjLlkgPSB0b3A7CisgICAgICAgIGMuV2lkdGggPSByaWdodCAtIGxlZnQ7CisgICAgICAgIGMuSGVpZ2h0ID0gYm90dG9tIC0gdG9wOworICAgICAgICByZXR1cm4gIWMuSXNFbXB0eUFyZWEoKTsKKyAgICB9CisKKyAgICBWT0lEIE9mZnNldChJTiBjb25zdCBQb2ludEYmIHBvaW50KQorICAgIHsKKyAgICAgICAgT2Zmc2V0KHBvaW50LlgsIHBvaW50LlkpOworICAgIH0KKworICAgIFZPSUQgT2Zmc2V0KElOIFJFQUwgZHgsCisgICAgICAgICAgICAgICAgSU4gUkVBTCBkeSkKKyAgICB7CisgICAgICAgIFggKz0gZHg7CisgICAgICAgIFkgKz0gZHk7CisgICAgfQorCitwdWJsaWM6CisKKyAgICBSRUFMIFg7CisgICAgUkVBTCBZOworICAgIFJFQUwgV2lkdGg7CisgICAgUkVBTCBIZWlnaHQ7Cit9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXByZXNlbnRzIGEgcmVjdGFuZ2xlIGluIGEgMkQgY29vcmRpbmF0ZSBzeXN0ZW0KKy8vICAoaW50ZWdlciBjb29yZGluYXRlcykKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgUmVjdAoreworcHVibGljOgorCisgICAgLy8gRGVmYXVsdCBjb25zdHJ1Y3RvcgorCisgICAgUmVjdCgpCisgICAgeworICAgICAgICBYID0gWSA9IFdpZHRoID0gSGVpZ2h0ID0gMDsKKyAgICB9CisKKyAgICBSZWN0KElOIElOVCB4LAorICAgICAgICAgSU4gSU5UIHksCisgICAgICAgICBJTiBJTlQgd2lkdGgsCisgICAgICAgICBJTiBJTlQgaGVpZ2h0KQorICAgIHsKKyAgICAgICAgWCA9IHg7CisgICAgICAgIFkgPSB5OworICAgICAgICBXaWR0aCA9IHdpZHRoOworICAgICAgICBIZWlnaHQgPSBoZWlnaHQ7CisgICAgfQorCisgICAgUmVjdChJTiBjb25zdCBQb2ludCYgbG9jYXRpb24sCisgICAgICAgICBJTiBjb25zdCBTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgWCA9IGxvY2F0aW9uLlg7CisgICAgICAgIFkgPSBsb2NhdGlvbi5ZOworICAgICAgICBXaWR0aCA9IHNpemUuV2lkdGg7CisgICAgICAgIEhlaWdodCA9IHNpemUuSGVpZ2h0OworICAgIH0KKworICAgIFJlY3QqIENsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUmVjdChYLCBZLCBXaWR0aCwgSGVpZ2h0KTsKKyAgICB9CisKKyAgICBWT0lEIEdldExvY2F0aW9uKE9VVCBQb2ludCogcG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICBwb2ludC0+WCA9IFg7CisgICAgICAgIHBvaW50LT5ZID0gWTsKKyAgICB9CisKKyAgICBWT0lEIEdldFNpemUoT1VUIFNpemUqIHNpemUpIGNvbnN0CisgICAgeworICAgICAgICBzaXplLT5XaWR0aCA9IFdpZHRoOworICAgICAgICBzaXplLT5IZWlnaHQgPSBIZWlnaHQ7CisgICAgfQorCisgICAgVk9JRCBHZXRCb3VuZHMoT1VUIFJlY3QqIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICByZWN0LT5YID0gWDsKKyAgICAgICAgcmVjdC0+WSA9IFk7CisgICAgICAgIHJlY3QtPldpZHRoID0gV2lkdGg7CisgICAgICAgIHJlY3QtPkhlaWdodCA9IEhlaWdodDsKKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdGhlIGxlZnQsIHRvcCwgcmlnaHQsIGFuZCBib3R0b20KKyAgICAvLyBjb29yZGluYXRlcyBvZiB0aGUgcmVjdGFuZ2xlCisKKyAgICBJTlQgR2V0TGVmdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gWDsKKyAgICB9CisKKyAgICBJTlQgR2V0VG9wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBZOworICAgIH0KKworICAgIElOVCBHZXRSaWdodCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gWCtXaWR0aDsKKyAgICB9CisKKyAgICBJTlQgR2V0Qm90dG9tKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBZK0hlaWdodDsKKyAgICB9CisKKyAgICAvLyBEZXRlcm1pbmUgaWYgdGhlIHJlY3RhbmdsZSBpcyBlbXB0eQorICAgIEJPT0wgSXNFbXB0eUFyZWEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChXaWR0aCA8PSAwKSB8fCAoSGVpZ2h0IDw9IDApOworICAgIH0KKworICAgIEJPT0wgRXF1YWxzKElOIGNvbnN0IFJlY3QgJiByZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFggPT0gcmVjdC5YICYmCisgICAgICAgICAgICAgICBZID09IHJlY3QuWSAmJgorICAgICAgICAgICAgICAgV2lkdGggPT0gcmVjdC5XaWR0aCAmJgorICAgICAgICAgICAgICAgSGVpZ2h0ID09IHJlY3QuSGVpZ2h0OworICAgIH0KKworICAgIEJPT0wgQ29udGFpbnMoSU4gSU5UIHgsCisgICAgICAgICAgICAgICAgICBJTiBJTlQgeSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB4ID49IFggJiYgeCA8IFgrV2lkdGggJiYKKyAgICAgICAgICAgICAgIHkgPj0gWSAmJiB5IDwgWStIZWlnaHQ7CisgICAgfQorCisgICAgQk9PTCBDb250YWlucyhJTiBjb25zdCBQb2ludCYgcHQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gQ29udGFpbnMocHQuWCwgcHQuWSk7CisgICAgfQorCisgICAgQk9PTCBDb250YWlucyhJTiBSZWN0JiByZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChYIDw9IHJlY3QuWCkgJiYgKHJlY3QuR2V0UmlnaHQoKSA8PSBHZXRSaWdodCgpKSAmJgorICAgICAgICAgICAgICAgKFkgPD0gcmVjdC5ZKSAmJiAocmVjdC5HZXRCb3R0b20oKSA8PSBHZXRCb3R0b20oKSk7CisgICAgfQorCisgICAgVk9JRCBJbmZsYXRlKElOIElOVCBkeCwKKyAgICAgICAgICAgICAgICAgSU4gSU5UIGR5KQorICAgIHsKKyAgICAgICAgWCAtPSBkeDsKKyAgICAgICAgWSAtPSBkeTsKKyAgICAgICAgV2lkdGggKz0gMipkeDsKKyAgICAgICAgSGVpZ2h0ICs9IDIqZHk7CisgICAgfQorCisgICAgVk9JRCBJbmZsYXRlKElOIGNvbnN0IFBvaW50JiBwb2ludCkKKyAgICB7CisgICAgICAgIEluZmxhdGUocG9pbnQuWCwgcG9pbnQuWSk7CisgICAgfQorCisgICAgLy8gSW50ZXJzZWN0IHRoZSBjdXJyZW50IHJlY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIG9iamVjdAorCisgICAgQk9PTCBJbnRlcnNlY3QoSU4gY29uc3QgUmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBJbnRlcnNlY3QoKnRoaXMsICp0aGlzLCByZWN0KTsKKyAgICB9CisKKyAgICAvLyBJbnRlcnNlY3QgcmVjdCBhIGFuZCBiIGFuZCBzYXZlIHRoZSByZXN1bHQgaW50byBjCisgICAgLy8gTm90aWNlIHRoYXQgYyBtYXkgYmUgdGhlIHNhbWUgb2JqZWN0IGFzIGEgb3IgYi4KKworICAgIHN0YXRpYyBCT09MIEludGVyc2VjdChPVVQgUmVjdCYgYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdCYgYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgUmVjdCYgYikKKyAgICB7CisgICAgICAgIElOVCByaWdodCA9IG1pbihhLkdldFJpZ2h0KCksIGIuR2V0UmlnaHQoKSk7CisgICAgICAgIElOVCBib3R0b20gPSBtaW4oYS5HZXRCb3R0b20oKSwgYi5HZXRCb3R0b20oKSk7CisgICAgICAgIElOVCBsZWZ0ID0gbWF4KGEuR2V0TGVmdCgpLCBiLkdldExlZnQoKSk7CisgICAgICAgIElOVCB0b3AgPSBtYXgoYS5HZXRUb3AoKSwgYi5HZXRUb3AoKSk7CisKKyAgICAgICAgYy5YID0gbGVmdDsKKyAgICAgICAgYy5ZID0gdG9wOworICAgICAgICBjLldpZHRoID0gcmlnaHQgLSBsZWZ0OworICAgICAgICBjLkhlaWdodCA9IGJvdHRvbSAtIHRvcDsKKyAgICAgICAgcmV0dXJuICFjLklzRW1wdHlBcmVhKCk7CisgICAgfQorCisgICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBzcGVjaWZpZWQgcmVjdCBpbnRlcnNlY3RzIHdpdGggdGhlCisgICAgLy8gY3VycmVudCByZWN0IG9iamVjdC4KKworICAgIEJPT0wgSW50ZXJzZWN0c1dpdGgoSU4gY29uc3QgUmVjdCYgcmVjdCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoR2V0TGVmdCgpIDwgcmVjdC5HZXRSaWdodCgpICYmCisgICAgICAgICAgICAgICAgR2V0VG9wKCkgPCByZWN0LkdldFRvcCgpICYmCisgICAgICAgICAgICAgICAgR2V0UmlnaHQoKSA+IHJlY3QuR2V0TGVmdCgpICYmCisgICAgICAgICAgICAgICAgR2V0Qm90dG9tKCkgPiByZWN0LkdldFRvcCgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQk9PTCBVbmlvbihPVVQgUmVjdCYgYywKKyAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBSZWN0JiBhLAorICAgICAgICAgICAgICAgICAgICAgIElOIGNvbnN0IFJlY3QmIGIpCisgICAgeworICAgICAgICBJTlQgcmlnaHQgPSBtYXgoYS5HZXRSaWdodCgpLCBiLkdldFJpZ2h0KCkpOworICAgICAgICBJTlQgYm90dG9tID0gbWF4KGEuR2V0Qm90dG9tKCksIGIuR2V0Qm90dG9tKCkpOworICAgICAgICBJTlQgbGVmdCA9IG1pbihhLkdldExlZnQoKSwgYi5HZXRMZWZ0KCkpOworICAgICAgICBJTlQgdG9wID0gbWluKGEuR2V0VG9wKCksIGIuR2V0VG9wKCkpOworCisgICAgICAgIGMuWCA9IGxlZnQ7CisgICAgICAgIGMuWSA9IHRvcDsKKyAgICAgICAgYy5XaWR0aCA9IHJpZ2h0IC0gbGVmdDsKKyAgICAgICAgYy5IZWlnaHQgPSBib3R0b20gLSB0b3A7CisgICAgICAgIHJldHVybiAhYy5Jc0VtcHR5QXJlYSgpOworICAgIH0KKworICAgIFZPSUQgT2Zmc2V0KElOIGNvbnN0IFBvaW50JiBwb2ludCkKKyAgICB7CisgICAgICAgIE9mZnNldChwb2ludC5YLCBwb2ludC5ZKTsKKyAgICB9CisKKyAgICBWT0lEIE9mZnNldChJTiBJTlQgZHgsCisgICAgICAgICAgICAgICAgSU4gSU5UIGR5KQorICAgIHsKKyAgICAgICAgWCArPSBkeDsKKyAgICAgICAgWSArPSBkeTsKKyAgICB9CisKK3B1YmxpYzoKKworICAgIElOVCBYOworICAgIElOVCBZOworICAgIElOVCBXaWR0aDsKKyAgICBJTlQgSGVpZ2h0OworfTsKKworLy8gQSB1c2VyIG11c3QgbWFuZ2UgbWVtb3J5IGZvciBQYXRoRGF0YS4KKworY2xhc3MgUGF0aERhdGEKK3sKK3B1YmxpYzoKKyAgICBQYXRoRGF0YSgpCisgICAgeworICAgICAgICBDb3VudCA9IDA7CisgICAgICAgIFBvaW50cyA9IE5VTEw7CisgICAgICAgIFR5cGVzID0gTlVMTDsKKyAgICB9CisKKyAgICB+UGF0aERhdGEoKQorICAgIHsKKyAgICAgICAgaWYgKFBvaW50cyAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBkZWxldGUgUG9pbnRzOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFR5cGVzICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlbGV0ZSBUeXBlczsKKyAgICAgICAgfQorICAgIH0KKworI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMgorCitwcml2YXRlOgorICAgIFBhdGhEYXRhKGNvbnN0IFBhdGhEYXRhICYpOworICAgIFBhdGhEYXRhJiBvcGVyYXRvcj0oY29uc3QgUGF0aERhdGEgJik7CisKKyNlbmRpZgorCitwdWJsaWM6CisgICAgSU5UIENvdW50OworICAgIFBvaW50RiogUG9pbnRzOworICAgIEJZVEUqIFR5cGVzOworfTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyB0ZXh0IGNoYXJhY3RlciByYW5nZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBDaGFyYWN0ZXJSYW5nZQoreworcHVibGljOgorICAgIENoYXJhY3RlclJhbmdlKAorICAgICAgICBJTlQgZmlyc3QsCisgICAgICAgIElOVCBsZW5ndGgKKyAgICApIDoKKyAgICAgICAgRmlyc3QgICAoZmlyc3QpLAorICAgICAgICBMZW5ndGggIChsZW5ndGgpCisgICAge30KKworICAgIENoYXJhY3RlclJhbmdlKCkgOiBGaXJzdCgwKSwgTGVuZ3RoKDApCisgICAge30KKworICAgIENoYXJhY3RlclJhbmdlICYgb3BlcmF0b3IgPSAoY29uc3QgQ2hhcmFjdGVyUmFuZ2UgJnJocykKKyAgICB7CisgICAgICAgIEZpcnN0ICA9IHJocy5GaXJzdDsKKyAgICAgICAgTGVuZ3RoID0gcmhzLkxlbmd0aDsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIElOVCBGaXJzdDsKKyAgICBJTlQgTGVuZ3RoOworfTsKKworI2VuZGlmIC8vICFfR0RJUExVU1RZUEVTX0hQUApkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c2ltYWdlQXR0cmlidXRlcy5oIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1c2ltYWdlQXR0cmlidXRlcy5oCmluZGV4IDBhNTE0NzcuLjI2ZGEyOGMgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXNpbWFnZUF0dHJpYnV0ZXMuaAorKysgYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlQbHVzaW1hZ2VBdHRyaWJ1dGVzLmgKQEAgLTEsMzk3ICsxLDM5NyBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXA0KLSoNCi0qIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotKg0KLSogTW9kdWxlIE5hbWU6DQotKg0KLSogICBJbWFnZSBBdHRyaWJ1dGVzDQotKg0KLSogQWJzdHJhY3Q6DQotKg0KLSogICBDbGFzcyBmb3IgY29sb3IgYWRqdXN0bWVudCBvYmplY3QgcGFzc2VkIHRvIEdyYXBoaWNzLkRyYXdJbWFnZQ0KLSoNCi1cKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotI2lmbmRlZiBfR0RJUExVU0lNQUdFQVRUUklCVVRFU19IDQotI2RlZmluZSBfR0RJUExVU0lNQUdFQVRUUklCVVRFU19IDQotDQotY2xhc3MgR3BJbWFnZUF0dHJpYnV0ZXM7DQotDQotLy8gVGhlcmUgYXJlIDUgcG9zc2libGUgc2V0cyBvZiBjb2xvciBhZGp1c3RtZW50czoNCi0vLyAgICAgICAgICBDb2xvckFkanVzdERlZmF1bHQsDQotLy8gICAgICAgICAgQ29sb3JBZGp1c3RCaXRtYXAsDQotLy8gICAgICAgICAgQ29sb3JBZGp1c3RCcnVzaCwNCi0vLyAgICAgICAgICBDb2xvckFkanVzdFBlbiwNCi0vLyAgICAgICAgICBDb2xvckFkanVzdFRleHQsDQotDQotLy8gQml0bWFwcywgQnJ1c2hlcywgUGVucywgYW5kIFRleHQgd2lsbCBhbGwgdXNlIGFueSBjb2xvciBhZGp1c3RtZW50cw0KLS8vIHRoYXQgaGF2ZSBiZWVuIHNldCBpbnRvIHRoZSBkZWZhdWx0IEltYWdlQXR0cmlidXRlcyB1bnRpbCB0aGVpciBvd24NCi0vLyBjb2xvciBhZGp1c3RtZW50cyBoYXZlIGJlZW4gc2V0LiAgU28gYXMgc29vbiBhcyBhbnkgIlNldCIgbWV0aG9kIGlzDQotLy8gY2FsbGVkIGZvciBCaXRtYXBzLCBCcnVzaGVzLCBQZW5zLCBvciBUZXh0LCB0aGVuIHRoZXkgc3RhcnQgZnJvbQ0KLS8vIHNjcmF0Y2ggd2l0aCBvbmx5IHRoZSBjb2xvciBhZGp1c3RtZW50cyB0aGF0IGhhdmUgYmVlbiBzZXQgZm9yIHRoZW0uDQotLy8gQ2FsbGluZyBSZXNldCByZW1vdmVzIGFueSBpbmRpdmlkdWFsIGNvbG9yIGFkanVzdG1lbnRzIGZvciBhIHR5cGUNCi0vLyBhbmQgbWFrZXMgaXQgcmV2ZXJ0IGJhY2sgdG8gdXNpbmcgYWxsIHRoZSBkZWZhdWx0IGNvbG9yIGFkanVzdG1lbnRzDQotLy8gKGlmIGFueSkuICBUaGUgU2V0VG9JZGVudGl0eSBtZXRob2QgaXMgYSB3YXkgdG8gZm9yY2UgYSB0eXBlIHRvDQotLy8gaGF2ZSBubyBjb2xvciBhZGp1c3RtZW50cyBhdCBhbGwsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBwcmV2aW91cyBhZGp1c3RtZW50cw0KLS8vIGhhdmUgYmVlbiBzZXQgZm9yIHRoZSBkZWZhdWx0cyBvciBmb3IgdGhhdCB0eXBlLg0KLQ0KLWNsYXNzIEltYWdlQXR0cmlidXRlcyA6IHB1YmxpYyBHZGlwbHVzQmFzZQ0KLXsNCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzOw0KLSAgICBmcmllbmQgY2xhc3MgVGV4dHVyZUJydXNoOw0KLQ0KLXB1YmxpYzoNCi0NCi0gICAgSW1hZ2VBdHRyaWJ1dGVzKCkNCi0gICAgew0KLSAgICAgICAgbmF0aXZlSW1hZ2VBdHRyID0gTlVMTDsNCi0gICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlSW1hZ2VBdHRyaWJ1dGVzKCZuYXRpdmVJbWFnZUF0dHIpOw0KLSAgICB9DQotDQotICAgIH5JbWFnZUF0dHJpYnV0ZXMoKQ0KLSAgICB7DQotICAgICAgICBEbGxFeHBvcnRzOjpHZGlwRGlzcG9zZUltYWdlQXR0cmlidXRlcyhuYXRpdmVJbWFnZUF0dHIpOw0KLSAgICB9DQotDQotICAgIEltYWdlQXR0cmlidXRlcyogQ2xvbmUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICBHcEltYWdlQXR0cmlidXRlcyogY2xvbmU7DQotDQotICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENsb25lSW1hZ2VBdHRyaWJ1dGVzKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VBdHRyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNsb25lKSk7DQotDQotICAgICAgICByZXR1cm4gbmV3IEltYWdlQXR0cmlidXRlcyhjbG9uZSwgbGFzdFJlc3VsdCk7DQotICAgIH0NCi0NCi0gICAgLy8gU2V0IHRvIGlkZW50aXR5LCByZWdhcmRsZXNzIG9mIHdoYXQgdGhlIGRlZmF1bHQgY29sb3IgYWRqdXN0bWVudCBpcy4NCi0gICAgU3RhdHVzDQotICAgIFNldFRvSWRlbnRpdHkoDQotICAgICAgICBJTiBDb2xvckFkanVzdFR5cGUgdHlwZSA9IENvbG9yQWRqdXN0VHlwZURlZmF1bHQNCi0gICAgICAgICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzVG9JZGVudGl0eSgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlQXR0ciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUpKTsNCi0gICAgfQ0KLQ0KLSAgICAvLyBSZW1vdmUgYW55IGluZGl2aWR1YWwgY29sb3IgYWRqdXN0bWVudHMsIGFuZCBnbyBiYWNrIHRvIHVzaW5nIHRoZSBkZWZhdWx0DQotICAgIFN0YXR1cw0KLSAgICBSZXNldCgNCi0gICAgICAgIElOIENvbG9yQWRqdXN0VHlwZSB0eXBlID0gQ29sb3JBZGp1c3RUeXBlRGVmYXVsdA0KLSAgICAgICAgKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBSZXNldEltYWdlQXR0cmlidXRlcygNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlQXR0ciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMNCi0gICAgU2V0Q29sb3JNYXRyaXgoDQotICAgICAgICBJTiBjb25zdCBDb2xvck1hdHJpeCAqY29sb3JNYXRyaXgsDQotICAgICAgICBJTiBDb2xvck1hdHJpeEZsYWdzIG1vZGUgPSBDb2xvck1hdHJpeEZsYWdzRGVmYXVsdCwNCi0gICAgICAgIElOIENvbG9yQWRqdXN0VHlwZSB0eXBlID0gQ29sb3JBZGp1c3RUeXBlRGVmYXVsdA0KLSAgICAgICAgKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRJbWFnZUF0dHJpYnV0ZXNDb2xvck1hdHJpeCgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlQXR0ciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JNYXRyaXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBDbGVhckNvbG9yTWF0cml4KA0KLSAgICAgICAgSU4gQ29sb3JBZGp1c3RUeXBlIHR5cGUgPSBDb2xvckFkanVzdFR5cGVEZWZhdWx0DQotICAgICAgICApDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEltYWdlQXR0cmlidXRlc0NvbG9yTWF0cml4KA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VBdHRyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvck1hdHJpeEZsYWdzRGVmYXVsdCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cw0KLSAgICBTZXRDb2xvck1hdHJpY2VzKA0KLSAgICAgICAgSU4gY29uc3QgQ29sb3JNYXRyaXggKmNvbG9yTWF0cml4LA0KLSAgICAgICAgSU4gY29uc3QgQ29sb3JNYXRyaXggKmdyYXlNYXRyaXgsDQotICAgICAgICBJTiBDb2xvck1hdHJpeEZsYWdzIG1vZGUgPSBDb2xvck1hdHJpeEZsYWdzRGVmYXVsdCwNCi0gICAgICAgIElOIENvbG9yQWRqdXN0VHlwZSB0eXBlID0gQ29sb3JBZGp1c3RUeXBlRGVmYXVsdA0KLSAgICAgICAgKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRJbWFnZUF0dHJpYnV0ZXNDb2xvck1hdHJpeCgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlQXR0ciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JNYXRyaXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmF5TWF0cml4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBDbGVhckNvbG9yTWF0cmljZXMoDQotICAgICAgICBJTiBDb2xvckFkanVzdFR5cGUgdHlwZSA9IENvbG9yQWRqdXN0VHlwZURlZmF1bHQNCi0gICAgICAgICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzQ29sb3JNYXRyaXgoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVJbWFnZUF0dHIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yTWF0cml4RmxhZ3NEZWZhdWx0KSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFNldFRocmVzaG9sZCgNCi0gICAgICAgIElOIFJFQUwgdGhyZXNob2xkLA0KLSAgICAgICAgSU4gQ29sb3JBZGp1c3RUeXBlIHR5cGUgPSBDb2xvckFkanVzdFR5cGVEZWZhdWx0DQotICAgICAgICApDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEltYWdlQXR0cmlidXRlc1RocmVzaG9sZCgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlQXR0ciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZXNob2xkKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIENsZWFyVGhyZXNob2xkKA0KLSAgICAgICAgSU4gQ29sb3JBZGp1c3RUeXBlIHR5cGUgPSBDb2xvckFkanVzdFR5cGVEZWZhdWx0DQotICAgICAgICApDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEltYWdlQXR0cmlidXRlc1RocmVzaG9sZCgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlQXR0ciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTZXRHYW1tYSgNCi0gICAgICAgIElOIFJFQUwgZ2FtbWEsDQotICAgICAgICBJTiBDb2xvckFkanVzdFR5cGUgdHlwZSA9IENvbG9yQWRqdXN0VHlwZURlZmF1bHQNCi0gICAgICAgICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzR2FtbWEoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVJbWFnZUF0dHIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhbW1hKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIENsZWFyR2FtbWEoDQotICAgICAgICBJTiBDb2xvckFkanVzdFR5cGUgdHlwZSA9IENvbG9yQWRqdXN0VHlwZURlZmF1bHQNCi0gICAgICAgICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzR2FtbWEoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVJbWFnZUF0dHIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjApKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0Tm9PcCgNCi0gICAgICAgIElOIENvbG9yQWRqdXN0VHlwZSB0eXBlID0gQ29sb3JBZGp1c3RUeXBlRGVmYXVsdA0KLSAgICAgICAgKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRJbWFnZUF0dHJpYnV0ZXNOb09wKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VBdHRyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgQ2xlYXJOb09wKA0KLSAgICAgICAgSU4gQ29sb3JBZGp1c3RUeXBlIHR5cGUgPSBDb2xvckFkanVzdFR5cGVEZWZhdWx0DQotICAgICAgICApDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEltYWdlQXR0cmlidXRlc05vT3AoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVJbWFnZUF0dHIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0Q29sb3JLZXkoDQotICAgICAgICBJTiBjb25zdCBDb2xvciYgY29sb3JMb3csIA0KLSAgICAgICAgSU4gY29uc3QgQ29sb3ImIGNvbG9ySGlnaCwNCi0gICAgICAgIElOIENvbG9yQWRqdXN0VHlwZSB0eXBlID0gQ29sb3JBZGp1c3RUeXBlRGVmYXVsdA0KLSAgICAgICAgKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRJbWFnZUF0dHJpYnV0ZXNDb2xvcktleXMoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVJbWFnZUF0dHIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yTG93LkdldFZhbHVlKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckhpZ2guR2V0VmFsdWUoKSkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBDbGVhckNvbG9yS2V5KA0KLSAgICAgICAgSU4gQ29sb3JBZGp1c3RUeXBlIHR5cGUgPSBDb2xvckFkanVzdFR5cGVEZWZhdWx0DQotICAgICAgICApDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEltYWdlQXR0cmlidXRlc0NvbG9yS2V5cygNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlQXR0ciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFNldE91dHB1dENoYW5uZWwoDQotICAgICAgICBJTiBDb2xvckNoYW5uZWxGbGFncyBjaGFubmVsRmxhZ3MsDQotICAgICAgICBJTiBDb2xvckFkanVzdFR5cGUgdHlwZSA9IENvbG9yQWRqdXN0VHlwZURlZmF1bHQNCi0gICAgICAgICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzT3V0cHV0Q2hhbm5lbCgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlQXR0ciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbEZsYWdzKSk7DQotICAgIH0NCi0gICAgDQotICAgIFN0YXR1cyBDbGVhck91dHB1dENoYW5uZWwoDQotICAgICAgICBJTiBDb2xvckFkanVzdFR5cGUgdHlwZSA9IENvbG9yQWRqdXN0VHlwZURlZmF1bHQNCi0gICAgICAgICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzT3V0cHV0Q2hhbm5lbCgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlQXR0ciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yQ2hhbm5lbEZsYWdzTGFzdCkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBTZXRPdXRwdXRDaGFubmVsQ29sb3JQcm9maWxlKA0KLSAgICAgICAgSU4gY29uc3QgV0NIQVIgKmNvbG9yUHJvZmlsZUZpbGVuYW1lLA0KLSAgICAgICAgSU4gQ29sb3JBZGp1c3RUeXBlIHR5cGUgPSBDb2xvckFkanVzdFR5cGVEZWZhdWx0DQotICAgICAgICApDQotICAgIHsNCi0gICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEltYWdlQXR0cmlidXRlc091dHB1dENoYW5uZWxDb2xvclByb2ZpbGUoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVJbWFnZUF0dHIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yUHJvZmlsZUZpbGVuYW1lKSk7DQotICAgIH0NCi0gICAgDQotICAgIFN0YXR1cyBDbGVhck91dHB1dENoYW5uZWxDb2xvclByb2ZpbGUoDQotICAgICAgICBJTiBDb2xvckFkanVzdFR5cGUgdHlwZSA9IENvbG9yQWRqdXN0VHlwZURlZmF1bHQNCi0gICAgICAgICkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzT3V0cHV0Q2hhbm5lbENvbG9yUHJvZmlsZSgNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlQXR0ciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKTsNCi0gICAgfQ0KLSAgICANCi0gICAgU3RhdHVzIFNldFJlbWFwVGFibGUoDQotICAgICAgICBJTiBVSU5UIG1hcFNpemUsIA0KLSAgICAgICAgSU4gY29uc3QgQ29sb3JNYXAgKm1hcCwNCi0gICAgICAgIElOIENvbG9yQWRqdXN0VHlwZSB0eXBlID0gQ29sb3JBZGp1c3RUeXBlRGVmYXVsdA0KLSAgICAgICAgKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRJbWFnZUF0dHJpYnV0ZXNSZW1hcFRhYmxlKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VBdHRyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBTaXplLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKSk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIENsZWFyUmVtYXBUYWJsZSgNCi0gICAgICAgIElOIENvbG9yQWRqdXN0VHlwZSB0eXBlID0gQ29sb3JBZGp1c3RUeXBlRGVmYXVsdA0KLSAgICAgICAgKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRJbWFnZUF0dHJpYnV0ZXNSZW1hcFRhYmxlKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VBdHRyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKTsNCi0gICAgfQ0KLQ0KLSAgICBTdGF0dXMgU2V0QnJ1c2hSZW1hcFRhYmxlKElOIFVJTlQgbWFwU2l6ZSwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgQ29sb3JNYXAgKm1hcCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIHRoaXMtPlNldFJlbWFwVGFibGUobWFwU2l6ZSwgbWFwLCBDb2xvckFkanVzdFR5cGVCcnVzaCk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIENsZWFyQnJ1c2hSZW1hcFRhYmxlKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIHRoaXMtPkNsZWFyUmVtYXBUYWJsZShDb2xvckFkanVzdFR5cGVCcnVzaCk7DQotICAgIH0NCi0NCi0gICAgU3RhdHVzIFNldFdyYXBNb2RlKElOIFdyYXBNb2RlIHdyYXAsIA0KLSAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgQ29sb3ImIGNvbG9yID0gQ29sb3IoKSwgDQotICAgICAgICAgICAgICAgICAgICAgICBJTiBCT09MIGNsYW1wID0gRkFMU0UpIA0KLSAgICB7DQotICAgICAgICBBUkdCIGFyZ2IgPSBjb2xvci5HZXRWYWx1ZSgpOw0KLQ0KLSAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzV3JhcE1vZGUoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VBdHRyLCB3cmFwLCBhcmdiLCBjbGFtcCkpOw0KLSAgICB9DQotDQotICAgICNpZm5kZWYgRENSX1VTRV9ORVdfMTQ1MTM5DQotICAgIFN0YXR1cyBTZXRJQ01Nb2RlKElOIEJPT0wgb24pDQotICAgIHsNCi0gICAgICAgIG9uOw0KLSAgICAgICAgLy8gVGhpcyBpcyBub3QgaW1wbGVtZW50ZWQuDQotICAgICAgICAvLyBUaGUgc3VwcG9ydGVkIG1ldGhvZCBmb3IgZG9pbmcgSUNNIGNvbnZlcnNpb24gZnJvbSB0aGUgZW1iZWRkZWQgDQotICAgICAgICAvLyBJQ0MgcHJvZmlsZSBpcyB0byB1c2UgdGhlIEJpdG1hcCBjb25zdHJ1Y3RvciBmcm9tIGEgZmlsZSBvciBzdHJlYW0NCi0gICAgICAgIC8vIGFuZCBzcGVjaWZ5IFRSVUUgZm9yIHRoZSB1c2VJY20gcGFyYW1ldGVyLiBUaGlzIHdpbGwgY2F1c2UgdGhlIA0KLSAgICAgICAgLy8gaW1hZ2UgdG8gYmUgSUNNIGNvbnZlcnRlZCB3aGVuIGl0J3MgbG9hZGVkIGZyb20gdGhlIGZpbGUvc3RyZWFtDQotICAgICAgICAvLyBpZiB0aGUgcHJvZmlsZSBleGlzdHMuDQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKE5vdEltcGxlbWVudGVkKTsNCi0vLyAgICAgICAgICBEbGxFeHBvcnRzOjpHZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzSUNNTW9kZShuYXRpdmVJbWFnZUF0dHIsIG9uKQ0KLSAgICB9DQotICAgICNlbmRpZg0KLQ0KLSAgICAvLyBUaGUgZmxhZ3Mgb2YgdGhlIHBhbGV0dGUgYXJlIGlnbm9yZWQuDQotICAgIFN0YXR1cyBHZXRBZGp1c3RlZFBhbGV0dGUoSU4gT1VUIENvbG9yUGFsZXR0ZSogY29sb3JQYWxldHRlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOIENvbG9yQWRqdXN0VHlwZSBjb2xvckFkanVzdFR5cGUpIGNvbnN0IA0KLSAgICB7DQotICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBHZXRJbWFnZUF0dHJpYnV0ZXNBZGp1c3RlZFBhbGV0dGUoDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VBdHRyLCBjb2xvclBhbGV0dGUsIGNvbG9yQWRqdXN0VHlwZSkpOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyBHZXRMYXN0U3RhdHVzKCkgY29uc3QNCi0gICAgew0KLSAgICAgICAgU3RhdHVzIGxhc3RTdGF0dXMgPSBsYXN0UmVzdWx0Ow0KLSAgICAgICAgbGFzdFJlc3VsdCA9IE9rOw0KLSAgICANCi0gICAgICAgIHJldHVybiBsYXN0U3RhdHVzOw0KLSAgICB9DQotICAgIA0KLSNpZmRlZiBEQ1JfVVNFX05FV18yNTA5MzINCi0NCi1wcml2YXRlOg0KLSAgICBJbWFnZUF0dHJpYnV0ZXMoY29uc3QgSW1hZ2VBdHRyaWJ1dGVzICYpOw0KLSAgICBJbWFnZUF0dHJpYnV0ZXMmIG9wZXJhdG9yPShjb25zdCBJbWFnZUF0dHJpYnV0ZXMgJik7DQotDQotI2VuZGlmDQotDQotcHJvdGVjdGVkOg0KLSAgICBJbWFnZUF0dHJpYnV0ZXMoR3BJbWFnZUF0dHJpYnV0ZXMqIGltYWdlQXR0ciwgU3RhdHVzIHN0YXR1cykNCi0gICAgew0KLSAgICAgICAgU2V0TmF0aXZlSW1hZ2VBdHRyKGltYWdlQXR0cik7DQotICAgICAgICBsYXN0UmVzdWx0ID0gc3RhdHVzOw0KLSAgICB9DQotDQotICAgIFZPSUQgU2V0TmF0aXZlSW1hZ2VBdHRyKEdwSW1hZ2VBdHRyaWJ1dGVzKiBuYXRpdmVJbWFnZUF0dHIpDQotICAgIHsNCi0gICAgICAgIHRoaXMtPm5hdGl2ZUltYWdlQXR0ciA9IG5hdGl2ZUltYWdlQXR0cjsNCi0gICAgfQ0KLSAgICANCi0gICAgU3RhdHVzIFNldFN0YXR1cyhTdGF0dXMgc3RhdHVzKSBjb25zdA0KLSAgICB7DQotICAgICAgICBpZiAoc3RhdHVzICE9IE9rKQ0KLSAgICAgICAgICAgIHJldHVybiAobGFzdFJlc3VsdCA9IHN0YXR1cyk7DQotICAgICAgICBlbHNlIA0KLSAgICAgICAgICAgIHJldHVybiBzdGF0dXM7DQotICAgIH0NCi0NCi1wcm90ZWN0ZWQ6DQotICAgIEdwSW1hZ2VBdHRyaWJ1dGVzKiBuYXRpdmVJbWFnZUF0dHI7DQotICAgIG11dGFibGUgU3RhdHVzIGxhc3RSZXN1bHQ7DQotfTsNCi0NCi0jZW5kaWYNCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCisqCisqIENvcHlyaWdodCAoYykgMTk5OC0yMDAwLCBNaWNyb3NvZnQgQ29ycC4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisqCisqIE1vZHVsZSBOYW1lOgorKgorKiAgIEltYWdlIEF0dHJpYnV0ZXMKKyoKKyogQWJzdHJhY3Q6CisqCisqICAgQ2xhc3MgZm9yIGNvbG9yIGFkanVzdG1lbnQgb2JqZWN0IHBhc3NlZCB0byBHcmFwaGljcy5EcmF3SW1hZ2UKKyoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfR0RJUExVU0lNQUdFQVRUUklCVVRFU19ICisjZGVmaW5lIF9HRElQTFVTSU1BR0VBVFRSSUJVVEVTX0gKKworY2xhc3MgR3BJbWFnZUF0dHJpYnV0ZXM7CisKKy8vIFRoZXJlIGFyZSA1IHBvc3NpYmxlIHNldHMgb2YgY29sb3IgYWRqdXN0bWVudHM6CisvLyAgICAgICAgICBDb2xvckFkanVzdERlZmF1bHQsCisvLyAgICAgICAgICBDb2xvckFkanVzdEJpdG1hcCwKKy8vICAgICAgICAgIENvbG9yQWRqdXN0QnJ1c2gsCisvLyAgICAgICAgICBDb2xvckFkanVzdFBlbiwKKy8vICAgICAgICAgIENvbG9yQWRqdXN0VGV4dCwKKworLy8gQml0bWFwcywgQnJ1c2hlcywgUGVucywgYW5kIFRleHQgd2lsbCBhbGwgdXNlIGFueSBjb2xvciBhZGp1c3RtZW50cworLy8gdGhhdCBoYXZlIGJlZW4gc2V0IGludG8gdGhlIGRlZmF1bHQgSW1hZ2VBdHRyaWJ1dGVzIHVudGlsIHRoZWlyIG93bgorLy8gY29sb3IgYWRqdXN0bWVudHMgaGF2ZSBiZWVuIHNldC4gIFNvIGFzIHNvb24gYXMgYW55ICJTZXQiIG1ldGhvZCBpcworLy8gY2FsbGVkIGZvciBCaXRtYXBzLCBCcnVzaGVzLCBQZW5zLCBvciBUZXh0LCB0aGVuIHRoZXkgc3RhcnQgZnJvbQorLy8gc2NyYXRjaCB3aXRoIG9ubHkgdGhlIGNvbG9yIGFkanVzdG1lbnRzIHRoYXQgaGF2ZSBiZWVuIHNldCBmb3IgdGhlbS4KKy8vIENhbGxpbmcgUmVzZXQgcmVtb3ZlcyBhbnkgaW5kaXZpZHVhbCBjb2xvciBhZGp1c3RtZW50cyBmb3IgYSB0eXBlCisvLyBhbmQgbWFrZXMgaXQgcmV2ZXJ0IGJhY2sgdG8gdXNpbmcgYWxsIHRoZSBkZWZhdWx0IGNvbG9yIGFkanVzdG1lbnRzCisvLyAoaWYgYW55KS4gIFRoZSBTZXRUb0lkZW50aXR5IG1ldGhvZCBpcyBhIHdheSB0byBmb3JjZSBhIHR5cGUgdG8KKy8vIGhhdmUgbm8gY29sb3IgYWRqdXN0bWVudHMgYXQgYWxsLCByZWdhcmRsZXNzIG9mIHdoYXQgcHJldmlvdXMgYWRqdXN0bWVudHMKKy8vIGhhdmUgYmVlbiBzZXQgZm9yIHRoZSBkZWZhdWx0cyBvciBmb3IgdGhhdCB0eXBlLgorCitjbGFzcyBJbWFnZUF0dHJpYnV0ZXMgOiBwdWJsaWMgR2RpcGx1c0Jhc2UKK3sKKyAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3M7CisgICAgZnJpZW5kIGNsYXNzIFRleHR1cmVCcnVzaDsKKworcHVibGljOgorCisgICAgSW1hZ2VBdHRyaWJ1dGVzKCkKKyAgICB7CisgICAgICAgIG5hdGl2ZUltYWdlQXR0ciA9IE5VTEw7CisgICAgICAgIGxhc3RSZXN1bHQgPSBEbGxFeHBvcnRzOjpHZGlwQ3JlYXRlSW1hZ2VBdHRyaWJ1dGVzKCZuYXRpdmVJbWFnZUF0dHIpOworICAgIH0KKworICAgIH5JbWFnZUF0dHJpYnV0ZXMoKQorICAgIHsKKyAgICAgICAgRGxsRXhwb3J0czo6R2RpcERpc3Bvc2VJbWFnZUF0dHJpYnV0ZXMobmF0aXZlSW1hZ2VBdHRyKTsKKyAgICB9CisKKyAgICBJbWFnZUF0dHJpYnV0ZXMqIENsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIEdwSW1hZ2VBdHRyaWJ1dGVzKiBjbG9uZTsKKworICAgICAgICBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcENsb25lSW1hZ2VBdHRyaWJ1dGVzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVJbWFnZUF0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbG9uZSkpOworCisgICAgICAgIHJldHVybiBuZXcgSW1hZ2VBdHRyaWJ1dGVzKGNsb25lLCBsYXN0UmVzdWx0KTsKKyAgICB9CisKKyAgICAvLyBTZXQgdG8gaWRlbnRpdHksIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUgZGVmYXVsdCBjb2xvciBhZGp1c3RtZW50IGlzLgorICAgIFN0YXR1cworICAgIFNldFRvSWRlbnRpdHkoCisgICAgICAgIElOIENvbG9yQWRqdXN0VHlwZSB0eXBlID0gQ29sb3JBZGp1c3RUeXBlRGVmYXVsdAorICAgICAgICApCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRJbWFnZUF0dHJpYnV0ZXNUb0lkZW50aXR5KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVJbWFnZUF0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUpKTsKKyAgICB9CisKKyAgICAvLyBSZW1vdmUgYW55IGluZGl2aWR1YWwgY29sb3IgYWRqdXN0bWVudHMsIGFuZCBnbyBiYWNrIHRvIHVzaW5nIHRoZSBkZWZhdWx0CisgICAgU3RhdHVzCisgICAgUmVzZXQoCisgICAgICAgIElOIENvbG9yQWRqdXN0VHlwZSB0eXBlID0gQ29sb3JBZGp1c3RUeXBlRGVmYXVsdAorICAgICAgICApCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBSZXNldEltYWdlQXR0cmlidXRlcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VBdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKSk7CisgICAgfQorCisgICAgU3RhdHVzCisgICAgU2V0Q29sb3JNYXRyaXgoCisgICAgICAgIElOIGNvbnN0IENvbG9yTWF0cml4ICpjb2xvck1hdHJpeCwKKyAgICAgICAgSU4gQ29sb3JNYXRyaXhGbGFncyBtb2RlID0gQ29sb3JNYXRyaXhGbGFnc0RlZmF1bHQsCisgICAgICAgIElOIENvbG9yQWRqdXN0VHlwZSB0eXBlID0gQ29sb3JBZGp1c3RUeXBlRGVmYXVsdAorICAgICAgICApCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRJbWFnZUF0dHJpYnV0ZXNDb2xvck1hdHJpeCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VBdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvck1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSkpOworICAgIH0KKworICAgIFN0YXR1cyBDbGVhckNvbG9yTWF0cml4KAorICAgICAgICBJTiBDb2xvckFkanVzdFR5cGUgdHlwZSA9IENvbG9yQWRqdXN0VHlwZURlZmF1bHQKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzQ29sb3JNYXRyaXgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlQXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yTWF0cml4RmxhZ3NEZWZhdWx0KSk7CisgICAgfQorCisgICAgU3RhdHVzCisgICAgU2V0Q29sb3JNYXRyaWNlcygKKyAgICAgICAgSU4gY29uc3QgQ29sb3JNYXRyaXggKmNvbG9yTWF0cml4LAorICAgICAgICBJTiBjb25zdCBDb2xvck1hdHJpeCAqZ3JheU1hdHJpeCwKKyAgICAgICAgSU4gQ29sb3JNYXRyaXhGbGFncyBtb2RlID0gQ29sb3JNYXRyaXhGbGFnc0RlZmF1bHQsCisgICAgICAgIElOIENvbG9yQWRqdXN0VHlwZSB0eXBlID0gQ29sb3JBZGp1c3RUeXBlRGVmYXVsdAorICAgICAgICApCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRJbWFnZUF0dHJpYnV0ZXNDb2xvck1hdHJpeCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VBdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvck1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JheU1hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSkpOworICAgIH0KKworICAgIFN0YXR1cyBDbGVhckNvbG9yTWF0cmljZXMoCisgICAgICAgIElOIENvbG9yQWRqdXN0VHlwZSB0eXBlID0gQ29sb3JBZGp1c3RUeXBlRGVmYXVsdAorICAgICAgICApCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRJbWFnZUF0dHJpYnV0ZXNDb2xvck1hdHJpeCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VBdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3JNYXRyaXhGbGFnc0RlZmF1bHQpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0VGhyZXNob2xkKAorICAgICAgICBJTiBSRUFMIHRocmVzaG9sZCwKKyAgICAgICAgSU4gQ29sb3JBZGp1c3RUeXBlIHR5cGUgPSBDb2xvckFkanVzdFR5cGVEZWZhdWx0CisgICAgICAgICkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEltYWdlQXR0cmlidXRlc1RocmVzaG9sZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VBdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgQ2xlYXJUaHJlc2hvbGQoCisgICAgICAgIElOIENvbG9yQWRqdXN0VHlwZSB0eXBlID0gQ29sb3JBZGp1c3RUeXBlRGVmYXVsdAorICAgICAgICApCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRJbWFnZUF0dHJpYnV0ZXNUaHJlc2hvbGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlQXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCkpOworICAgIH0KKworICAgIFN0YXR1cyBTZXRHYW1tYSgKKyAgICAgICAgSU4gUkVBTCBnYW1tYSwKKyAgICAgICAgSU4gQ29sb3JBZGp1c3RUeXBlIHR5cGUgPSBDb2xvckFkanVzdFR5cGVEZWZhdWx0CisgICAgICAgICkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEltYWdlQXR0cmlidXRlc0dhbW1hKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVJbWFnZUF0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhbW1hKSk7CisgICAgfQorCisgICAgU3RhdHVzIENsZWFyR2FtbWEoCisgICAgICAgIElOIENvbG9yQWRqdXN0VHlwZSB0eXBlID0gQ29sb3JBZGp1c3RUeXBlRGVmYXVsdAorICAgICAgICApCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRJbWFnZUF0dHJpYnV0ZXNHYW1tYSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VBdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wKSk7CisgICAgfQorCisgICAgU3RhdHVzIFNldE5vT3AoCisgICAgICAgIElOIENvbG9yQWRqdXN0VHlwZSB0eXBlID0gQ29sb3JBZGp1c3RUeXBlRGVmYXVsdAorICAgICAgICApCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRJbWFnZUF0dHJpYnV0ZXNOb09wKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVJbWFnZUF0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgQ2xlYXJOb09wKAorICAgICAgICBJTiBDb2xvckFkanVzdFR5cGUgdHlwZSA9IENvbG9yQWRqdXN0VHlwZURlZmF1bHQKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzTm9PcCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VBdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSkpOworICAgIH0KKworICAgIFN0YXR1cyBTZXRDb2xvcktleSgKKyAgICAgICAgSU4gY29uc3QgQ29sb3ImIGNvbG9yTG93LCAKKyAgICAgICAgSU4gY29uc3QgQ29sb3ImIGNvbG9ySGlnaCwKKyAgICAgICAgSU4gQ29sb3JBZGp1c3RUeXBlIHR5cGUgPSBDb2xvckFkanVzdFR5cGVEZWZhdWx0CisgICAgICAgICkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEltYWdlQXR0cmlidXRlc0NvbG9yS2V5cygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VBdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckxvdy5HZXRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckhpZ2guR2V0VmFsdWUoKSkpOworICAgIH0KKworICAgIFN0YXR1cyBDbGVhckNvbG9yS2V5KAorICAgICAgICBJTiBDb2xvckFkanVzdFR5cGUgdHlwZSA9IENvbG9yQWRqdXN0VHlwZURlZmF1bHQKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzQ29sb3JLZXlzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVJbWFnZUF0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSk7CisgICAgfQorCisgICAgU3RhdHVzIFNldE91dHB1dENoYW5uZWwoCisgICAgICAgIElOIENvbG9yQ2hhbm5lbEZsYWdzIGNoYW5uZWxGbGFncywKKyAgICAgICAgSU4gQ29sb3JBZGp1c3RUeXBlIHR5cGUgPSBDb2xvckFkanVzdFR5cGVEZWZhdWx0CisgICAgICAgICkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEltYWdlQXR0cmlidXRlc091dHB1dENoYW5uZWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlQXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbEZsYWdzKSk7CisgICAgfQorICAgIAorICAgIFN0YXR1cyBDbGVhck91dHB1dENoYW5uZWwoCisgICAgICAgIElOIENvbG9yQWRqdXN0VHlwZSB0eXBlID0gQ29sb3JBZGp1c3RUeXBlRGVmYXVsdAorICAgICAgICApCisgICAgeworICAgICAgICByZXR1cm4gU2V0U3RhdHVzKERsbEV4cG9ydHM6OkdkaXBTZXRJbWFnZUF0dHJpYnV0ZXNPdXRwdXRDaGFubmVsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVJbWFnZUF0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvckNoYW5uZWxGbGFnc0xhc3QpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0T3V0cHV0Q2hhbm5lbENvbG9yUHJvZmlsZSgKKyAgICAgICAgSU4gY29uc3QgV0NIQVIgKmNvbG9yUHJvZmlsZUZpbGVuYW1lLAorICAgICAgICBJTiBDb2xvckFkanVzdFR5cGUgdHlwZSA9IENvbG9yQWRqdXN0VHlwZURlZmF1bHQKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzT3V0cHV0Q2hhbm5lbENvbG9yUHJvZmlsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VBdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclByb2ZpbGVGaWxlbmFtZSkpOworICAgIH0KKyAgICAKKyAgICBTdGF0dXMgQ2xlYXJPdXRwdXRDaGFubmVsQ29sb3JQcm9maWxlKAorICAgICAgICBJTiBDb2xvckFkanVzdFR5cGUgdHlwZSA9IENvbG9yQWRqdXN0VHlwZURlZmF1bHQKKyAgICAgICAgKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNldFN0YXR1cyhEbGxFeHBvcnRzOjpHZGlwU2V0SW1hZ2VBdHRyaWJ1dGVzT3V0cHV0Q2hhbm5lbENvbG9yUHJvZmlsZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VBdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpOworICAgIH0KKyAgICAKKyAgICBTdGF0dXMgU2V0UmVtYXBUYWJsZSgKKyAgICAgICAgSU4gVUlOVCBtYXBTaXplLCAKKyAgICAgICAgSU4gY29uc3QgQ29sb3JNYXAgKm1hcCwKKyAgICAgICAgSU4gQ29sb3JBZGp1c3RUeXBlIHR5cGUgPSBDb2xvckFkanVzdFR5cGVEZWZhdWx0CisgICAgICAgICkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEltYWdlQXR0cmlidXRlc1JlbWFwVGFibGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlQXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKSk7CisgICAgfQorCisgICAgU3RhdHVzIENsZWFyUmVtYXBUYWJsZSgKKyAgICAgICAgSU4gQ29sb3JBZGp1c3RUeXBlIHR5cGUgPSBDb2xvckFkanVzdFR5cGVEZWZhdWx0CisgICAgICAgICkKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEltYWdlQXR0cmlidXRlc1JlbWFwVGFibGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlQXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgU2V0QnJ1c2hSZW1hcFRhYmxlKElOIFVJTlQgbWFwU2l6ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBjb25zdCBDb2xvck1hcCAqbWFwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMtPlNldFJlbWFwVGFibGUobWFwU2l6ZSwgbWFwLCBDb2xvckFkanVzdFR5cGVCcnVzaCk7CisgICAgfQorCisgICAgU3RhdHVzIENsZWFyQnJ1c2hSZW1hcFRhYmxlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLT5DbGVhclJlbWFwVGFibGUoQ29sb3JBZGp1c3RUeXBlQnJ1c2gpOworICAgIH0KKworICAgIFN0YXR1cyBTZXRXcmFwTW9kZShJTiBXcmFwTW9kZSB3cmFwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgSU4gY29uc3QgQ29sb3ImIGNvbG9yID0gQ29sb3IoKSwgCisgICAgICAgICAgICAgICAgICAgICAgIElOIEJPT0wgY2xhbXAgPSBGQUxTRSkgCisgICAgeworICAgICAgICBBUkdCIGFyZ2IgPSBjb2xvci5HZXRWYWx1ZSgpOworCisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcFNldEltYWdlQXR0cmlidXRlc1dyYXBNb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VBdHRyLCB3cmFwLCBhcmdiLCBjbGFtcCkpOworICAgIH0KKworICAgICNpZm5kZWYgRENSX1VTRV9ORVdfMTQ1MTM5CisgICAgU3RhdHVzIFNldElDTU1vZGUoSU4gQk9PTCBvbikKKyAgICB7CisgICAgICAgIG9uOworICAgICAgICAvLyBUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZC4KKyAgICAgICAgLy8gVGhlIHN1cHBvcnRlZCBtZXRob2QgZm9yIGRvaW5nIElDTSBjb252ZXJzaW9uIGZyb20gdGhlIGVtYmVkZGVkIAorICAgICAgICAvLyBJQ0MgcHJvZmlsZSBpcyB0byB1c2UgdGhlIEJpdG1hcCBjb25zdHJ1Y3RvciBmcm9tIGEgZmlsZSBvciBzdHJlYW0KKyAgICAgICAgLy8gYW5kIHNwZWNpZnkgVFJVRSBmb3IgdGhlIHVzZUljbSBwYXJhbWV0ZXIuIFRoaXMgd2lsbCBjYXVzZSB0aGUgCisgICAgICAgIC8vIGltYWdlIHRvIGJlIElDTSBjb252ZXJ0ZWQgd2hlbiBpdCdzIGxvYWRlZCBmcm9tIHRoZSBmaWxlL3N0cmVhbQorICAgICAgICAvLyBpZiB0aGUgcHJvZmlsZSBleGlzdHMuCisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoTm90SW1wbGVtZW50ZWQpOworLy8gICAgICAgICAgRGxsRXhwb3J0czo6R2RpcFNldEltYWdlQXR0cmlidXRlc0lDTU1vZGUobmF0aXZlSW1hZ2VBdHRyLCBvbikKKyAgICB9CisgICAgI2VuZGlmCisKKyAgICAvLyBUaGUgZmxhZ3Mgb2YgdGhlIHBhbGV0dGUgYXJlIGlnbm9yZWQuCisgICAgU3RhdHVzIEdldEFkanVzdGVkUGFsZXR0ZShJTiBPVVQgQ29sb3JQYWxldHRlKiBjb2xvclBhbGV0dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTiBDb2xvckFkanVzdFR5cGUgY29sb3JBZGp1c3RUeXBlKSBjb25zdCAKKyAgICB7CisgICAgICAgIHJldHVybiBTZXRTdGF0dXMoRGxsRXhwb3J0czo6R2RpcEdldEltYWdlQXR0cmlidXRlc0FkanVzdGVkUGFsZXR0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlQXR0ciwgY29sb3JQYWxldHRlLCBjb2xvckFkanVzdFR5cGUpKTsKKyAgICB9CisKKyAgICBTdGF0dXMgR2V0TGFzdFN0YXR1cygpIGNvbnN0CisgICAgeworICAgICAgICBTdGF0dXMgbGFzdFN0YXR1cyA9IGxhc3RSZXN1bHQ7CisgICAgICAgIGxhc3RSZXN1bHQgPSBPazsKKyAgICAKKyAgICAgICAgcmV0dXJuIGxhc3RTdGF0dXM7CisgICAgfQorICAgIAorI2lmZGVmIERDUl9VU0VfTkVXXzI1MDkzMgorCitwcml2YXRlOgorICAgIEltYWdlQXR0cmlidXRlcyhjb25zdCBJbWFnZUF0dHJpYnV0ZXMgJik7CisgICAgSW1hZ2VBdHRyaWJ1dGVzJiBvcGVyYXRvcj0oY29uc3QgSW1hZ2VBdHRyaWJ1dGVzICYpOworCisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIEltYWdlQXR0cmlidXRlcyhHcEltYWdlQXR0cmlidXRlcyogaW1hZ2VBdHRyLCBTdGF0dXMgc3RhdHVzKQorICAgIHsKKyAgICAgICAgU2V0TmF0aXZlSW1hZ2VBdHRyKGltYWdlQXR0cik7CisgICAgICAgIGxhc3RSZXN1bHQgPSBzdGF0dXM7CisgICAgfQorCisgICAgVk9JRCBTZXROYXRpdmVJbWFnZUF0dHIoR3BJbWFnZUF0dHJpYnV0ZXMqIG5hdGl2ZUltYWdlQXR0cikKKyAgICB7CisgICAgICAgIHRoaXMtPm5hdGl2ZUltYWdlQXR0ciA9IG5hdGl2ZUltYWdlQXR0cjsKKyAgICB9CisgICAgCisgICAgU3RhdHVzIFNldFN0YXR1cyhTdGF0dXMgc3RhdHVzKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBPaykKKyAgICAgICAgICAgIHJldHVybiAobGFzdFJlc3VsdCA9IHN0YXR1cyk7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIEdwSW1hZ2VBdHRyaWJ1dGVzKiBuYXRpdmVJbWFnZUF0dHI7CisgICAgbXV0YWJsZSBTdGF0dXMgbGFzdFJlc3VsdDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpcGx1c0luaXQuaCBiL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaXBsdXNJbml0LmgKaW5kZXggMzMyMGZhNC4uNDg1MTZkNiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpcGx1c0luaXQuaAorKysgYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9HZGlwbHVzSW5pdC5oCkBAIC0xLDEwNCArMSwxMDQgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSoNCi0qIENvcHlyaWdodCAoYykgMjAwMCBNaWNyb3NvZnQgQ29ycG9yYXRpb24NCi0qDQotKiBNb2R1bGUgTmFtZToNCi0qDQotKiAgIEdkaXBsdXMgaW5pdA0KLSoNCi0qIEFic3RyYWN0Og0KLSoNCi0qICAgR0RJKyBzdGFydHVwL3NodXRkb3duIEFQSSdzDQotKg0KLSogQ3JlYXRlZDoNCi0qDQotKiAgIDA5LzAyLzIwMDAgYWdvZGZyZXkNCi0qICAgICAgQ3JlYXRlZCBpdC4NCi0qDQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotI2lmbmRlZiBfR0RJUExVU0lOSVRfSA0KLSNkZWZpbmUgX0dESVBMVVNJTklUX0gNCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSNpZiBfRlhfQ09NUElMRVJfID09IF9GWF9WQzZfDQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIFVMT05HX1BUUiwgKlBVTE9OR19QVFI7ICAgIC8vam9obnNvbiBhZGQgaGVyZS4NCi0jZW5kaWYNCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLQ0KLS8vIFVzZWQgZm9yIGRlYnVnIGV2ZW50IG5vdGlmaWNhdGlvbiAoZGVidWcgYnVpbGRzIG9ubHkpDQotDQotZW51bSBEZWJ1Z0V2ZW50TGV2ZWwNCi17DQotICAgIERlYnVnRXZlbnRMZXZlbEZhdGFsLA0KLSAgICBEZWJ1Z0V2ZW50TGV2ZWxXYXJuaW5nDQotfTsNCi0NCi0vLyBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IEdESSsgY2FuIGNhbGwsIG9uIGRlYnVnIGJ1aWxkcywgZm9yIGFzc2VydGlvbnMNCi0vLyBhbmQgd2FybmluZ3MuDQotDQotdHlwZWRlZiBWT0lEIChXSU5BUEkgKkRlYnVnRXZlbnRQcm9jKShEZWJ1Z0V2ZW50TGV2ZWwgbGV2ZWwsIENIQVIgKm1lc3NhZ2UpOw0KLQ0KLS8vIE5vdGlmaWNhdGlvbiBmdW5jdGlvbnMgd2hpY2ggdGhlIHVzZXIgbXVzdCBjYWxsIGFwcHJvcHJpYXRlbHkgaWYNCi0vLyAiU3VwcHJlc3NCYWNrZ3JvdW5kVGhyZWFkIiAoYmVsb3cpIGlzIHNldC4NCi0NCi10eXBlZGVmIFN0YXR1cyAoV0lOQVBJICpOb3RpZmljYXRpb25Ib29rUHJvYykoT1VUIFVMT05HX1BUUiAqdG9rZW4pOw0KLXR5cGVkZWYgVk9JRCAoV0lOQVBJICpOb3RpZmljYXRpb25Vbmhvb2tQcm9jKShVTE9OR19QVFIgdG9rZW4pOw0KLQ0KLS8vIElucHV0IHN0cnVjdHVyZSBmb3IgR2RpcGx1c1N0YXJ0dXAoKQ0KLQ0KLXN0cnVjdCBHZGlwbHVzU3RhcnR1cElucHV0DQotew0KLSAgICBVSU5UMzIgR2RpcGx1c1ZlcnNpb247ICAgICAgICAgICAgIC8vIE11c3QgYmUgMQ0KLSAgICBEZWJ1Z0V2ZW50UHJvYyBEZWJ1Z0V2ZW50Q2FsbGJhY2s7IC8vIElnbm9yZWQgb24gZnJlZSBidWlsZHMNCi0gICAgQk9PTCBTdXBwcmVzc0JhY2tncm91bmRUaHJlYWQ7ICAgICAvLyBGQUxTRSB1bmxlc3MgeW91J3JlIHByZXBhcmVkIHRvIGNhbGwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGhvb2svdW5ob29rIGZ1bmN0aW9ucyBwcm9wZXJseQ0KLSAgICBCT09MIFN1cHByZXNzRXh0ZXJuYWxDb2RlY3M7ICAgICAgIC8vIEZBTFNFIHVubGVzcyB5b3Ugd2FudCBHREkrIG9ubHkgdG8gdXNlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXRzIGludGVybmFsIGltYWdlIGNvZGVjcy4NCi0gICAgDQotICAgIEdkaXBsdXNTdGFydHVwSW5wdXQoDQotICAgICAgICBEZWJ1Z0V2ZW50UHJvYyBkZWJ1Z0V2ZW50Q2FsbGJhY2sgPSBOVUxMLA0KLSAgICAgICAgQk9PTCBzdXBwcmVzc0JhY2tncm91bmRUaHJlYWQgPSBGQUxTRSwNCi0gICAgICAgIEJPT0wgc3VwcHJlc3NFeHRlcm5hbENvZGVjcyA9IEZBTFNFKQ0KLSAgICB7DQotICAgICAgICBHZGlwbHVzVmVyc2lvbiA9IDE7DQotICAgICAgICBEZWJ1Z0V2ZW50Q2FsbGJhY2sgPSBkZWJ1Z0V2ZW50Q2FsbGJhY2s7DQotICAgICAgICBTdXBwcmVzc0JhY2tncm91bmRUaHJlYWQgPSBzdXBwcmVzc0JhY2tncm91bmRUaHJlYWQ7DQotICAgICAgICBTdXBwcmVzc0V4dGVybmFsQ29kZWNzID0gc3VwcHJlc3NFeHRlcm5hbENvZGVjczsNCi0gICAgfQ0KLX07DQotDQotLy8gT3V0cHV0IHN0cnVjdHVyZSBmb3IgR2RpcGx1c1N0YXJ0dXAoKQ0KLQ0KLXN0cnVjdCBHZGlwbHVzU3RhcnR1cE91dHB1dA0KLXsNCi0gICAgLy8gVGhlIGZvbGxvd2luZyAyIGZpZWxkcyBhcmUgTlVMTCBpZiBTdXBwcmVzc0JhY2tncm91bmRUaHJlYWQgaXMgRkFMU0UuDQotICAgIC8vIE90aGVyd2lzZSwgdGhleSBhcmUgZnVuY3Rpb25zIHdoaWNoIG11c3QgYmUgY2FsbGVkIGFwcHJvcHJpYXRlbHkgdG8NCi0gICAgLy8gcmVwbGFjZSB0aGUgYmFja2dyb3VuZCB0aHJlYWQuDQotICAgIC8vDQotICAgIC8vIFRoZXNlIHNob3VsZCBiZSBjYWxsZWQgb24gdGhlIGFwcGxpY2F0aW9uJ3MgbWFpbiBtZXNzYWdlIGxvb3AgLSBpLmUuDQotICAgIC8vIGEgbWVzc2FnZSBsb29wIHdoaWNoIGlzIGFjdGl2ZSBmb3IgdGhlIGxpZmV0aW1lIG9mIEdESSsuDQotICAgIC8vICJOb3RpZmljYXRpb25Ib29rIiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBzdGFydGluZyB0aGUgbG9vcCwNCi0gICAgLy8gYW5kICJOb3RpZmljYXRpb25Vbmhvb2siIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIGxvb3AgZW5kcy4NCi0gICAgDQotICAgIE5vdGlmaWNhdGlvbkhvb2tQcm9jIE5vdGlmaWNhdGlvbkhvb2s7DQotICAgIE5vdGlmaWNhdGlvblVuaG9va1Byb2MgTm90aWZpY2F0aW9uVW5ob29rOw0KLX07DQotDQotLy8gR0RJKyBpbml0aWFsaXphdGlvbi4gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIEdESSsgQVBJJ3MgYXJlIHVzZWQuDQotLy8NCi0vLyB0b2tlbiAgLSBtYXkgbm90IGJlIE5VTEwgLSBhY2NlcHRzIGEgdG9rZW4gdG8gYmUgcGFzc2VkIGluIHRoZSBjb3JyZXNwb25kaW5nDQotLy8gICAgICAgICAgR2RpcGx1c1NodXRkb3duIGNhbGwuDQotLy8gaW5wdXQgIC0gbWF5IG5vdCBiZSBOVUxMDQotLy8gb3V0cHV0IC0gbWF5IGJlIE5VTEwgb25seSBpZiBpbnB1dC0+U3VwcHJlc3NCYWNrZ3JvdW5kVGhyZWFkIGlzIEZBTFNFLg0KLQ0KLWV4dGVybiAiQyIgU3RhdHVzIFdJTkFQSSBHZGlwbHVzU3RhcnR1cCgNCi0gICAgT1VUIFVMT05HX1BUUiAqdG9rZW4sDQotICAgIGNvbnN0IEdkaXBsdXNTdGFydHVwSW5wdXQgKmlucHV0LA0KLSAgICBPVVQgR2RpcGx1c1N0YXJ0dXBPdXRwdXQgKm91dHB1dCk7DQotDQotLy8gR0RJKyB0ZXJtaW5hdGlvbi4gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIEdESSsgaXMgdW5sb2FkZWQuIEdESSsgQVBJJ3MgbWF5IG5vdA0KLS8vIGJlIGNhbGxlZCBhZnRlciB0aGlzLg0KLQ0KLWV4dGVybiAiQyIgVk9JRCBXSU5BUEkgR2RpcGx1c1NodXRkb3duKFVMT05HX1BUUiB0b2tlbik7DQotDQotI2VuZGlmDQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIENvcHlyaWdodCAoYykgMjAwMCBNaWNyb3NvZnQgQ29ycG9yYXRpb24KKyoKKyogTW9kdWxlIE5hbWU6CisqCisqICAgR2RpcGx1cyBpbml0CisqCisqIEFic3RyYWN0OgorKgorKiAgIEdESSsgc3RhcnR1cC9zaHV0ZG93biBBUEkncworKgorKiBDcmVhdGVkOgorKgorKiAgIDA5LzAyLzIwMDAgYWdvZGZyZXkKKyogICAgICBDcmVhdGVkIGl0LgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0dESVBMVVNJTklUX0gKKyNkZWZpbmUgX0dESVBMVVNJTklUX0gKKy8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjaWYgX0ZYX0NPTVBJTEVSXyA9PSBfRlhfVkM2XwordHlwZWRlZiB1bnNpZ25lZCBsb25nIFVMT05HX1BUUiwgKlBVTE9OR19QVFI7ICAgIC8vam9obnNvbiBhZGQgaGVyZS4KKyNlbmRpZgorLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLy8gVXNlZCBmb3IgZGVidWcgZXZlbnQgbm90aWZpY2F0aW9uIChkZWJ1ZyBidWlsZHMgb25seSkKKworZW51bSBEZWJ1Z0V2ZW50TGV2ZWwKK3sKKyAgICBEZWJ1Z0V2ZW50TGV2ZWxGYXRhbCwKKyAgICBEZWJ1Z0V2ZW50TGV2ZWxXYXJuaW5nCit9OworCisvLyBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IEdESSsgY2FuIGNhbGwsIG9uIGRlYnVnIGJ1aWxkcywgZm9yIGFzc2VydGlvbnMKKy8vIGFuZCB3YXJuaW5ncy4KKwordHlwZWRlZiBWT0lEIChXSU5BUEkgKkRlYnVnRXZlbnRQcm9jKShEZWJ1Z0V2ZW50TGV2ZWwgbGV2ZWwsIENIQVIgKm1lc3NhZ2UpOworCisvLyBOb3RpZmljYXRpb24gZnVuY3Rpb25zIHdoaWNoIHRoZSB1c2VyIG11c3QgY2FsbCBhcHByb3ByaWF0ZWx5IGlmCisvLyAiU3VwcHJlc3NCYWNrZ3JvdW5kVGhyZWFkIiAoYmVsb3cpIGlzIHNldC4KKwordHlwZWRlZiBTdGF0dXMgKFdJTkFQSSAqTm90aWZpY2F0aW9uSG9va1Byb2MpKE9VVCBVTE9OR19QVFIgKnRva2VuKTsKK3R5cGVkZWYgVk9JRCAoV0lOQVBJICpOb3RpZmljYXRpb25Vbmhvb2tQcm9jKShVTE9OR19QVFIgdG9rZW4pOworCisvLyBJbnB1dCBzdHJ1Y3R1cmUgZm9yIEdkaXBsdXNTdGFydHVwKCkKKworc3RydWN0IEdkaXBsdXNTdGFydHVwSW5wdXQKK3sKKyAgICBVSU5UMzIgR2RpcGx1c1ZlcnNpb247ICAgICAgICAgICAgIC8vIE11c3QgYmUgMQorICAgIERlYnVnRXZlbnRQcm9jIERlYnVnRXZlbnRDYWxsYmFjazsgLy8gSWdub3JlZCBvbiBmcmVlIGJ1aWxkcworICAgIEJPT0wgU3VwcHJlc3NCYWNrZ3JvdW5kVGhyZWFkOyAgICAgLy8gRkFMU0UgdW5sZXNzIHlvdSdyZSBwcmVwYXJlZCB0byBjYWxsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGhvb2svdW5ob29rIGZ1bmN0aW9ucyBwcm9wZXJseQorICAgIEJPT0wgU3VwcHJlc3NFeHRlcm5hbENvZGVjczsgICAgICAgLy8gRkFMU0UgdW5sZXNzIHlvdSB3YW50IEdESSsgb25seSB0byB1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0cyBpbnRlcm5hbCBpbWFnZSBjb2RlY3MuCisgICAgCisgICAgR2RpcGx1c1N0YXJ0dXBJbnB1dCgKKyAgICAgICAgRGVidWdFdmVudFByb2MgZGVidWdFdmVudENhbGxiYWNrID0gTlVMTCwKKyAgICAgICAgQk9PTCBzdXBwcmVzc0JhY2tncm91bmRUaHJlYWQgPSBGQUxTRSwKKyAgICAgICAgQk9PTCBzdXBwcmVzc0V4dGVybmFsQ29kZWNzID0gRkFMU0UpCisgICAgeworICAgICAgICBHZGlwbHVzVmVyc2lvbiA9IDE7CisgICAgICAgIERlYnVnRXZlbnRDYWxsYmFjayA9IGRlYnVnRXZlbnRDYWxsYmFjazsKKyAgICAgICAgU3VwcHJlc3NCYWNrZ3JvdW5kVGhyZWFkID0gc3VwcHJlc3NCYWNrZ3JvdW5kVGhyZWFkOworICAgICAgICBTdXBwcmVzc0V4dGVybmFsQ29kZWNzID0gc3VwcHJlc3NFeHRlcm5hbENvZGVjczsKKyAgICB9Cit9OworCisvLyBPdXRwdXQgc3RydWN0dXJlIGZvciBHZGlwbHVzU3RhcnR1cCgpCisKK3N0cnVjdCBHZGlwbHVzU3RhcnR1cE91dHB1dAoreworICAgIC8vIFRoZSBmb2xsb3dpbmcgMiBmaWVsZHMgYXJlIE5VTEwgaWYgU3VwcHJlc3NCYWNrZ3JvdW5kVGhyZWFkIGlzIEZBTFNFLgorICAgIC8vIE90aGVyd2lzZSwgdGhleSBhcmUgZnVuY3Rpb25zIHdoaWNoIG11c3QgYmUgY2FsbGVkIGFwcHJvcHJpYXRlbHkgdG8KKyAgICAvLyByZXBsYWNlIHRoZSBiYWNrZ3JvdW5kIHRocmVhZC4KKyAgICAvLworICAgIC8vIFRoZXNlIHNob3VsZCBiZSBjYWxsZWQgb24gdGhlIGFwcGxpY2F0aW9uJ3MgbWFpbiBtZXNzYWdlIGxvb3AgLSBpLmUuCisgICAgLy8gYSBtZXNzYWdlIGxvb3Agd2hpY2ggaXMgYWN0aXZlIGZvciB0aGUgbGlmZXRpbWUgb2YgR0RJKy4KKyAgICAvLyAiTm90aWZpY2F0aW9uSG9vayIgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIGxvb3AsCisgICAgLy8gYW5kICJOb3RpZmljYXRpb25Vbmhvb2siIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIGxvb3AgZW5kcy4KKyAgICAKKyAgICBOb3RpZmljYXRpb25Ib29rUHJvYyBOb3RpZmljYXRpb25Ib29rOworICAgIE5vdGlmaWNhdGlvblVuaG9va1Byb2MgTm90aWZpY2F0aW9uVW5ob29rOworfTsKKworLy8gR0RJKyBpbml0aWFsaXphdGlvbi4gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIEdESSsgQVBJJ3MgYXJlIHVzZWQuCisvLworLy8gdG9rZW4gIC0gbWF5IG5vdCBiZSBOVUxMIC0gYWNjZXB0cyBhIHRva2VuIHRvIGJlIHBhc3NlZCBpbiB0aGUgY29ycmVzcG9uZGluZworLy8gICAgICAgICAgR2RpcGx1c1NodXRkb3duIGNhbGwuCisvLyBpbnB1dCAgLSBtYXkgbm90IGJlIE5VTEwKKy8vIG91dHB1dCAtIG1heSBiZSBOVUxMIG9ubHkgaWYgaW5wdXQtPlN1cHByZXNzQmFja2dyb3VuZFRocmVhZCBpcyBGQUxTRS4KKworZXh0ZXJuICJDIiBTdGF0dXMgV0lOQVBJIEdkaXBsdXNTdGFydHVwKAorICAgIE9VVCBVTE9OR19QVFIgKnRva2VuLAorICAgIGNvbnN0IEdkaXBsdXNTdGFydHVwSW5wdXQgKmlucHV0LAorICAgIE9VVCBHZGlwbHVzU3RhcnR1cE91dHB1dCAqb3V0cHV0KTsKKworLy8gR0RJKyB0ZXJtaW5hdGlvbi4gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIEdESSsgaXMgdW5sb2FkZWQuIEdESSsgQVBJJ3MgbWF5IG5vdAorLy8gYmUgY2FsbGVkIGFmdGVyIHRoaXMuCisKK2V4dGVybiAiQyIgVk9JRCBXSU5BUEkgR2RpcGx1c1NodXRkb3duKFVMT05HX1BUUiB0b2tlbik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvc2FsLmggYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9zYWwuaAppbmRleCAxMzY5OTY5Li4wNzIzNDk1IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9zYWwuaAorKysgYi9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9zYWwuaApAQCAtMSw3MjkgKzEsNzI5IEBACi0vKioqDQotKnNhbC5oIC0gbWFya2VycyBmb3IgZG9jdW1lbnRpbmcgdGhlIHNlbWFudGljcyBvZiBBUElzDQotKg0KLSogICAgICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotKg0KLSpQdXJwb3NlOg0KLSogICAgICAgc2FsLmggcHJvdmlkZXMgYSBzZXQgb2YgYW5ub3RhdGlvbnMgdG8gZGVzY3JpYmUgaG93IGEgZnVuY3Rpb24gdXNlcyBpdHMNCi0qICAgICAgIHBhcmFtZXRlcnMgLSB0aGUgYXNzdW1wdGlvbnMgaXQgbWFrZXMgYWJvdXQgdGhlbSwgYW5kIHRoZSBndWFyYW50ZWVzIGl0IG1ha2VzDQotKiAgICAgICB1cG9uIGZpbmlzaGluZy4NCi0qDQotKiAgICAgICBbUHVibGljXQ0KLSoNCi0qKioqLw0KLQ0KLS8qIA0KLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotIEludHJvZHVjdGlvbg0KLQ0KLSBzYWwuaCBwcm92aWRlcyBhIHNldCBvZiBhbm5vdGF0aW9ucyB0byBkZXNjcmliZSBob3cgYSBmdW5jdGlvbiB1c2VzIGl0cw0KLSBwYXJhbWV0ZXJzIC0gdGhlIGFzc3VtcHRpb25zIGl0IG1ha2VzIGFib3V0IHRoZW0sIGFuZCB0aGUgZ3VhcmFudGVlcyBpdCBtYWtlcw0KLSB1cG9uIGZpbmlzaGluZy4NCi0NCi0gQW5ub3RhdGlvbnMgbWF5IGJlIHBsYWNlZCBiZWZvcmUgZWl0aGVyIGEgZnVuY3Rpb24gcGFyYW1ldGVyJ3MgdHlwZSBvciBpdHMgcmV0dXJuDQotIHR5cGUsIGFuZCBkZXNjcmliZSB0aGUgZnVuY3Rpb24ncyBiZWhhdmlvciByZWdhcmRpbmcgdGhlIHBhcmFtZXRlciBvciByZXR1cm4gdmFsdWUuDQotIFRoZXJlIGFyZSB0d28gY2xhc3NlcyBvZiBhbm5vdGF0aW9uczogYnVmZmVyIGFubm90YXRpb25zIGFuZCBhZHZhbmNlZCBhbm5vdGF0aW9ucy4NCi0gQnVmZmVyIGFubm90YXRpb25zIGRlc2NyaWJlIGhvdyBmdW5jdGlvbnMgdXNlIHRoZWlyIHBvaW50ZXIgcGFyYW1ldGVycywgYW5kDQotIGFkdmFuY2VkIGFubm90YXRpb25zIGVpdGhlciBkZXNjcmliZSBjb21wbGV4L3VudXN1YWwgYnVmZmVyIGJlaGF2aW9yLCBvciBwcm92aWRlDQotIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJhbWV0ZXIgdGhhdCBpcyBub3Qgb3RoZXJ3aXNlIGV4cHJlc3NpYmxlLg0KLQ0KLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotIEJ1ZmZlciBBbm5vdGF0aW9ucw0KLQ0KLSBUaGUgbW9zdCBpbXBvcnRhbnQgYW5ub3RhdGlvbnMgaW4gc2FsLmggcHJvdmlkZSBhIGNvbnNpc3RlbnQgd2F5IHRvIGFubm90YXRlDQotIGJ1ZmZlciBwYXJhbWV0ZXJzIG9yIHJldHVybiB2YWx1ZXMgZm9yIGEgZnVuY3Rpb24uIEVhY2ggb2YgdGhlc2UgYW5ub3RhdGlvbnMgZGVzY3JpYmVzDQotIGEgc2luZ2xlIGJ1ZmZlciAod2hpY2ggY291bGQgYmUgYSBzdHJpbmcsIGEgZml4ZWQtbGVuZ3RoIG9yIHZhcmlhYmxlLWxlbmd0aCBhcnJheSwNCi0gb3IganVzdCBhIHBvaW50ZXIpIHRoYXQgdGhlIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoOiB3aGVyZSBpdCBpcywgaG93IGxhcmdlIGl0IGlzLA0KLSBob3cgbXVjaCBpcyBpbml0aWFsaXplZCwgYW5kIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMgd2l0aCBpdC4NCi0NCi0gVGhlIGFwcHJvcHJpYXRlIG1hY3JvIGZvciBhIGdpdmVuIGJ1ZmZlciBjYW4gYmUgY29uc3RydWN0ZWQgdXNpbmcgdGhlIHRhYmxlIGJlbG93Lg0KLSBKdXN0IHBpY2sgdGhlIGFwcHJvcHJpYXRlIHZhbHVlcyBmcm9tIGVhY2ggY2F0ZWdvcnksIGFuZCBjb21iaW5lIHRoZW0gdG9nZXRoZXINCi0gd2l0aCBhIGxlYWRpbmcgdW5kZXJzY29yZS4gU29tZSBjb21iaW5hdGlvbnMgb2YgdmFsdWVzIGRvIG5vdCBtYWtlIHNlbnNlIGFzIGJ1ZmZlcg0KLSBhbm5vdGF0aW9ucy4gT25seSBtZWFuaW5nZnVsIGFubm90YXRpb25zIGNhbiBiZSBhZGRlZCB0byB5b3VyIGNvZGU7IGZvciBhIGxpc3Qgb2YNCi0gdGhlc2UsIHNlZSB0aGUgYnVmZmVyIGFubm90YXRpb24gZGVmaW5pdGlvbnMgc2VjdGlvbi4NCi0NCi0gT25seSBhIHNpbmdsZSBidWZmZXIgYW5ub3RhdGlvbiBzaG91bGQgYmUgdXNlZCBmb3IgZWFjaCBwYXJhbWV0ZXIuDQotDQotIHwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfA0KLSB8ICAgTGV2ZWwgICAgfCAgIFVzYWdlICAgIHwgIFNpemUgICB8IE91dHB1dCB8IE51bGxUZXJtIHwgT3B0aW9uYWwgfCAgUGFyYW1ldGVycyAgIHwNCi0gfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS18DQotIHwgPD4gICAgICAgICB8IDw+ICAgICAgICAgfCA8PiAgICAgIHwgPD4gICAgIHwgX3ogICAgICAgfCA8PiAgICAgICB8IDw+ICAgICAgICAgICAgfA0KLSB8IF9kZXJlZiAgICAgfCBfaW4gICAgICAgIHwgX2Vjb3VudCB8IF9mdWxsICB8IF9ueiAgICAgIHwgX29wdCAgICAgfCAoc2l6ZSkgICAgICAgIHwNCi0gfCBfZGVyZWZfb3B0IHwgX291dCAgICAgICB8IF9iY291bnQgfCBfcGFydCAgfCAgICAgICAgICB8ICAgICAgICAgIHwgKHNpemUsbGVuZ3RoKSB8DQotIHwgICAgICAgICAgICB8IF9pbm91dCAgICAgfCAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgfA0KLSB8ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgIHwNCi0gfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS18DQotDQotIExldmVsOiBEZXNjcmliZXMgdGhlIGJ1ZmZlciBwb2ludGVyJ3MgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gZnJvbSB0aGUgcGFyYW1ldGVyIG9yDQotICAgICAgICAgIHJldHVybiB2YWx1ZSAncCcuDQotDQotIDw+ICAgICAgICAgOiBwIGlzIHRoZSBidWZmZXIgcG9pbnRlci4NCi0gX2RlcmVmICAgICA6ICpwIGlzIHRoZSBidWZmZXIgcG9pbnRlci4gcCBtdXN0IG5vdCBiZSBOVUxMLg0KLSBfZGVyZWZfb3B0IDogKnAgbWF5IGJlIHRoZSBidWZmZXIgcG9pbnRlci4gcCBtYXkgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSB0aGUgcmVzdCBvZg0KLSAgICAgICAgICAgICAgICB0aGUgYW5ub3RhdGlvbiBpcyBpZ25vcmVkLg0KLQ0KLSBVc2FnZTogRGVzY3JpYmVzIGhvdyB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgYnVmZmVyLg0KLQ0KLSA8PiAgICAgOiBUaGUgYnVmZmVyIGlzIG5vdCBhY2Nlc3NlZC4gSWYgdXNlZCBvbiB0aGUgcmV0dXJuIHZhbHVlIG9yIHdpdGggX2RlcmVmLCB0aGUNCi0gICAgICAgICAgICBmdW5jdGlvbiB3aWxsIHByb3ZpZGUgdGhlIGJ1ZmZlciwgYW5kIGl0IHdpbGwgYmUgdW5pbml0aWFsaXplZCBhdCBleGl0Lg0KLSAgICAgICAgICAgIE90aGVyd2lzZSwgdGhlIGNhbGxlciBtdXN0IHByb3ZpZGUgdGhlIGJ1ZmZlci4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkDQotICAgICAgICAgICAgZm9yIGFsbG9jIGFuZCBmcmVlIGZ1bmN0aW9ucy4NCi0gX2luICAgIDogVGhlIGZ1bmN0aW9uIHdpbGwgb25seSByZWFkIGZyb20gdGhlIGJ1ZmZlci4gVGhlIGNhbGxlciBtdXN0IHByb3ZpZGUgdGhlDQotICAgICAgICAgICAgYnVmZmVyIGFuZCBpbml0aWFsaXplIGl0LiBDYW5ub3QgYmUgdXNlZCB3aXRoIF9kZXJlZi4NCi0gX291dCAgIDogVGhlIGZ1bmN0aW9uIHdpbGwgb25seSB3cml0ZSB0byB0aGUgYnVmZmVyLiBJZiB1c2VkIG9uIHRoZSByZXR1cm4gdmFsdWUgb3INCi0gICAgICAgICAgICB3aXRoIF9kZXJlZiwgdGhlIGZ1bmN0aW9uIHdpbGwgcHJvdmlkZSB0aGUgYnVmZmVyIGFuZCBpbml0aWFsaXplIGl0Lg0KLSAgICAgICAgICAgIE90aGVyd2lzZSwgdGhlIGNhbGxlciBtdXN0IHByb3ZpZGUgdGhlIGJ1ZmZlciwgYW5kIHRoZSBmdW5jdGlvbiB3aWxsDQotICAgICAgICAgICAgaW5pdGlhbGl6ZSBpdC4NCi0gX2lub3V0IDogVGhlIGZ1bmN0aW9uIG1heSBmcmVlbHkgcmVhZCBmcm9tIGFuZCB3cml0ZSB0byB0aGUgYnVmZmVyLiBUaGUgY2FsbGVyIG11c3QNCi0gICAgICAgICAgICBwcm92aWRlIHRoZSBidWZmZXIgYW5kIGluaXRpYWxpemUgaXQuIElmIHVzZWQgd2l0aCBfZGVyZWYsIHRoZSBidWZmZXIgbWF5DQotICAgICAgICAgICAgYmUgcmVhbGxvY2F0ZWQgYnkgdGhlIGZ1bmN0aW9uLg0KLQ0KLSBTaXplOiBEZXNjcmliZXMgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGJ1ZmZlci4gVGhpcyBtYXkgYmUgbGVzcyB0aGFuIHRoZSBzcGFjZSBhY3R1YWxseQ0KLSAgICAgICAgIGFsbG9jYXRlZCBmb3IgdGhlIGJ1ZmZlciwgaW4gd2hpY2ggY2FzZSBpdCBkZXNjcmliZXMgdGhlIGFjY2Vzc2libGUgYW1vdW50Lg0KLQ0KLSA8PiAgICAgIDogTm8gYnVmZmVyIHNpemUgaXMgZ2l2ZW4uIElmIHRoZSB0eXBlIHNwZWNpZmllcyB0aGUgYnVmZmVyIHNpemUgKHN1Y2ggYXMNCi0gICAgICAgICAgICAgd2l0aCBMUFNUUiBhbmQgTFBXU1RSKSwgdGhhdCBhbW91bnQgaXMgdXNlZC4gT3RoZXJ3aXNlLCB0aGUgYnVmZmVyIGlzIG9uZQ0KLSAgICAgICAgICAgICBlbGVtZW50IGxvbmcuIE11c3QgYmUgdXNlZCB3aXRoIF9pbiwgX291dCwgb3IgX2lub3V0Lg0KLSBfZWNvdW50IDogVGhlIGJ1ZmZlciBzaXplIGlzIGFuIGV4cGxpY2l0IGVsZW1lbnQgY291bnQuDQotIF9iY291bnQgOiBUaGUgYnVmZmVyIHNpemUgaXMgYW4gZXhwbGljaXQgYnl0ZSBjb3VudC4NCi0NCi0gT3V0cHV0OiBEZXNjcmliZXMgaG93IG11Y2ggb2YgdGhlIGJ1ZmZlciB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZSBmdW5jdGlvbi4gRm9yDQotICAgICAgICAgICBfaW5vdXQgYnVmZmVycywgdGhpcyBhbHNvIGRlc2NyaWJlcyBob3cgbXVjaCBpcyBpbml0aWFsaXplZCBhdCBlbnRyeS4gT21pdCB0aGlzDQotICAgICAgICAgICBjYXRlZ29yeSBmb3IgX2luIGJ1ZmZlcnM7IHRoZXkgbXVzdCBiZSBmdWxseSBpbml0aWFsaXplZCBieSB0aGUgY2FsbGVyLg0KLQ0KLSA8PiAgICA6IFRoZSB0eXBlIHNwZWNpZmllcyBob3cgbXVjaCBpcyBpbml0aWFsaXplZC4gRm9yIGluc3RhbmNlLCBhIGZ1bmN0aW9uIGluaXRpYWxpemluZw0KLSAgICAgICAgICAgYW4gTFBXU1RSIG11c3QgTlVMTC10ZXJtaW5hdGUgdGhlIHN0cmluZy4NCi0gX2Z1bGwgOiBUaGUgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGVudGlyZSBidWZmZXIuDQotIF9wYXJ0IDogVGhlIGZ1bmN0aW9uIGluaXRpYWxpemVzIHBhcnQgb2YgdGhlIGJ1ZmZlciwgYW5kIGV4cGxpY2l0bHkgaW5kaWNhdGVzIGhvdyBtdWNoLg0KLQ0KLSBOdWxsVGVybTogU3RhdGVzIGlmIHRoZSBwcmVzZW50IG9mIGEgJ1wwJyBtYXJrcyB0aGUgZW5kIG9mIHZhbGlkIGVsZW1lbnRzIGluIHRoZSBidWZmZXIuDQotIF96ICAgIDogQSAnXDAnIGluZGljYXRlZCB0aGUgZW5kIG9mIHRoZSBidWZmZXINCi0gX256CSA6IFRoZSBidWZmZXIgbWF5IG5vdCBiZSBudWxsIHRlcm1pbmF0ZWQgYW5kIGEgJ1wwJyBkb2VzIG5vdCBpbmRpY2F0ZSB0aGUgZW5kIG9mIHRoZQ0KLSAgICAgICAgICBidWZmZXIuDQotIE9wdGlvbmFsOiBEZXNjcmliZXMgaWYgdGhlIGJ1ZmZlciBpdHNlbGYgaXMgb3B0aW9uYWwuDQotDQotIDw+ICAgOiBUaGUgcG9pbnRlciB0byB0aGUgYnVmZmVyIG11c3Qgbm90IGJlIE5VTEwuDQotIF9vcHQgOiBUaGUgcG9pbnRlciB0byB0aGUgYnVmZmVyIG1pZ2h0IGJlIE5VTEwuIEl0IHdpbGwgYmUgY2hlY2tlZCBiZWZvcmUgYmVpbmcgZGVyZWZlcmVuY2VkLg0KLQ0KLSBQYXJhbWV0ZXJzOiBHaXZlcyBleHBsaWNpdCBjb3VudHMgZm9yIHRoZSBzaXplIGFuZCBsZW5ndGggb2YgdGhlIGJ1ZmZlci4NCi0NCi0gPD4gICAgICAgICAgICA6IFRoZXJlIGlzIG5vIGV4cGxpY2l0IGNvdW50LiBVc2Ugd2hlbiBuZWl0aGVyIF9lY291bnQgbm9yIF9iY291bnQgaXMgdXNlZC4NCi0gKHNpemUpICAgICAgICA6IE9ubHkgdGhlIGJ1ZmZlcidzIHRvdGFsIHNpemUgaXMgZ2l2ZW4uIFVzZSB3aXRoIF9lY291bnQgb3IgX2Jjb3VudCBidXQgbm90IF9wYXJ0Lg0KLSAoc2l6ZSxsZW5ndGgpIDogVGhlIGJ1ZmZlcidzIHRvdGFsIHNpemUgYW5kIGluaXRpYWxpemVkIGxlbmd0aCBhcmUgZ2l2ZW4uIFVzZSB3aXRoIF9lY291bnRfcGFydA0KLSAgICAgICAgICAgICAgICAgICBhbmQgX2Jjb3VudF9wYXJ0Lg0KLQ0KLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotIEJ1ZmZlciBBbm5vdGF0aW9uIEV4YW1wbGVzDQotDQotIExXU1REQVBJXyhCT09MKSBTdHJUb0ludEV4QSgNCi0gICAgIExQQ1NUUiBwc3pTdHJpbmcsICAgICAgICAgICAgICAgICAgICAtLSBObyBhbm5vdGF0aW9uIHJlcXVpcmVkLCBjb25zdCBpbXBsaWVzIF9faW4uDQotICAgICBEV09SRCBkd0ZsYWdzLA0KLSAgICAgX19vdXQgaW50ICpwaVJldCAgICAgICAgICAgICAgICAgICAgIC0tIEEgcG9pbnRlciB3aG9zZSBkZXJlZmVyZW5jZSB3aWxsIGJlIGZpbGxlZCBpbi4NCi0gKTsNCi0NCi0gdm9pZCBNeVBhaW50aW5nRnVuY3Rpb24oDQotICAgICBfX2luIEhXTkQgaHduZENvbnRyb2wsICAgICAgICAgICAgICAgLS0gQW4gaW5pdGlhbGl6ZWQgcmVhZC1vbmx5IHBhcmFtZXRlci4NCi0gICAgIF9faW5fb3B0IEhEQyBoZGNPcHRpb25hbCwgICAgICAgICAgICAtLSBBbiBpbml0aWFsaXplZCByZWFkLW9ubHkgcGFyYW1ldGVyIHRoYXQgbWlnaHQgYmUgTlVMTC4NCi0gICAgIF9faW5vdXQgSVByb3BlcnR5U3RvcmUgKnBwc1N0b3JlICAgICAtLSBBbiBpbml0aWFsaXplZCBwYXJhbWV0ZXIgdGhhdCBtYXkgYmUgZnJlZWx5IHVzZWQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgIGFuZCBtb2RpZmllZC4NCi0gKTsNCi0NCi0gTFdTVERBUElfKEJPT0wpIFBhdGhDb21wYWN0UGF0aEV4QSgNCi0gICAgIF9fb3V0X2Vjb3VudChjY2hNYXgpIExQU1RSIHBzek91dCwgICAtLSBBIHN0cmluZyBidWZmZXIgd2l0aCBjY2ggZWxlbWVudHMgdGhhdCB3aWxsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gICBiZSBOVUxMIHRlcm1pbmF0ZWQgb24gZXhpdC4NCi0gICAgIExQQ1NUUiBwc3pTcmMsICAgICAgICAgICAgICAgICAgICAgICAtLSBObyBhbm5vdGF0aW9uIHJlcXVpcmVkLCBjb25zdCBpbXBsaWVzIF9faW4uDQotICAgICBVSU5UIGNjaE1heCwNCi0gICAgIERXT1JEIGR3RmxhZ3MNCi0gKTsNCi0NCi0gSFJFU1VMVCBTSExvY2FsQWxsb2NCeXRlcygNCi0gICAgIHNpemVfdCBjYiwNCi0gICAgIF9fZGVyZWZfYmNvdW50KGNiKSBUICoqcHB2ICAgICAgICAgICAtLSBBIHBvaW50ZXIgd2hvc2UgZGVyZWZlcmVuY2Ugd2lsbCBiZSBzZXQgdG8gYW4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHdpdGggY2IgYnl0ZXMuDQotICk7DQotDQotIF9faW5vdXRfYmNvdW50X2Z1bGwoY2IpIDogQSBidWZmZXIgd2l0aCBjYiBlbGVtZW50cyB0aGF0IGlzIGZ1bGx5IGluaXRpYWxpemVkIGF0DQotICAgICBlbnRyeSBhbmQgZXhpdCwgYW5kIG1heSBiZSB3cml0dGVuIHRvIGJ5IHRoaXMgZnVuY3Rpb24uDQotDQotIF9fb3V0X2Vjb3VudF9wYXJ0KGNvdW50LCAqY291bnRPdXQpIDogQSBidWZmZXIgd2l0aCBjb3VudCBlbGVtZW50cyB0aGF0IHdpbGwgYmUNCi0gICAgIHBhcnRpYWxseSBpbml0aWFsaXplZCBieSB0aGlzIGZ1bmN0aW9uLiBUaGUgZnVuY3Rpb24gaW5kaWNhdGVzIGhvdyBtdWNoIGl0DQotICAgICBpbml0aWFsaXplZCBieSBzZXR0aW5nICpjb3VudE91dC4NCi0NCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSBBZHZhbmNlZCBBbm5vdGF0aW9ucw0KLQ0KLSBBZHZhbmNlZCBhbm5vdGF0aW9ucyBkZXNjcmliZSBiZWhhdmlvciB0aGF0IGlzIG5vdCBleHByZXNzaWJsZSB3aXRoIHRoZSByZWd1bGFyDQotIGJ1ZmZlciBtYWNyb3MuIFRoZXNlIG1heSBiZSB1c2VkIGVpdGhlciB0byBhbm5vdGF0ZSBidWZmZXIgcGFyYW1ldGVycyB0aGF0IGludm9sdmUNCi0gY29tcGxleCBvciBjb25kaXRpb25hbCBiZWhhdmlvciwgb3IgdG8gZW5yaWNoIGV4aXN0aW5nIGFubm90YXRpb25zIHdpdGggYWRkaXRpb25hbA0KLSBpbmZvcm1hdGlvbi4NCi0NCi0gX19zdWNjZXNzKGV4cHIpIGYgOg0KLSAgICAgPGV4cHI+IGluZGljYXRlcyB3aGV0aGVyIGZ1bmN0aW9uIGYgc3VjY2VlZGVkIG9yIG5vdC4gSWYgPGV4cHI+IGlzIHRydWUgYXQgZXhpdCwNCi0gICAgIGFsbCB0aGUgZnVuY3Rpb24ncyBndWFyYW50ZWVzIChhcyBnaXZlbiBieSBvdGhlciBhbm5vdGF0aW9ucykgbXVzdCBob2xkLiBJZiA8ZXhwcj4NCi0gICAgIGlzIGZhbHNlIGF0IGV4aXQsIHRoZSBjYWxsZXIgc2hvdWxkIG5vdCBleHBlY3QgYW55IG9mIHRoZSBmdW5jdGlvbidzIGd1YXJhbnRlZXMNCi0gICAgIHRvIGhvbGQuIElmIG5vdCB1c2VkLCB0aGUgZnVuY3Rpb24gbXVzdCBhbHdheXMgc2F0aXNmeSBpdHMgZ3VhcmFudGVlcy4gQWRkZWQNCi0gICAgIGF1dG9tYXRpY2FsbHkgdG8gZnVuY3Rpb25zIHRoYXQgaW5kaWNhdGUgc3VjY2VzcyBpbiBzdGFuZGFyZCB3YXlzLCBzdWNoIGFzIGJ5DQotICAgICByZXR1cm5pbmcgYW4gSFJFU1VMVC4NCi0NCi0gX19udWxsdGVybWluYXRlZCBwIDoNCi0gICAgIFBvaW50ZXIgcCBpcyBhIGJ1ZmZlciB0aGF0IG1heSBiZSByZWFkIG9yIHdyaXR0ZW4gdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgZmlyc3QNCi0gICAgIE5VTEwgY2hhcmFjdGVyIG9yIHBvaW50ZXIuIE1heSBiZSB1c2VkIG9uIHR5cGVkZWZzLCB3aGljaCBtYXJrcyB2YWxpZCAocHJvcGVybHkNCi0gICAgIGluaXRpYWxpemVkKSBpbnN0YW5jZXMgb2YgdGhhdCB0eXBlIGFzIGJlaW5nIE5VTEwtdGVybWluYXRlZC4NCi0NCi0gX19udWxsbnVsbHRlcm1pbmF0ZWQgcCA6DQotICAgICBQb2ludGVyIHAgaXMgYSBidWZmZXIgdGhhdCBtYXkgYmUgcmVhZCBvciB3cml0dGVuIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIGZpcnN0DQotICAgICBzZXF1ZW5jZSBvZiB0d28gTlVMTCBjaGFyYWN0ZXJzIG9yIHBvaW50ZXJzLiBNYXkgYmUgdXNlZCBvbiB0eXBlZGVmcywgd2hpY2ggbWFya3MNCi0gICAgIHZhbGlkIGluc3RhbmNlcyBvZiB0aGF0IHR5cGUgYXMgYmVpbmcgZG91YmxlLU5VTEwgdGVybWluYXRlZC4NCi0NCi0gX19yZXNlcnZlZCB2IDoNCi0gICAgIFZhbHVlIHYgbXVzdCBiZSAwL05VTEwsIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLg0KLQ0KLSBfX2NoZWNrUmV0dXJuIHYgOg0KLSAgICAgUmV0dXJuIHZhbHVlIHYgbXVzdCBub3QgYmUgaWdub3JlZCBieSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uDQotDQotIF9fdHlwZWZpeChjdHlwZSkgdiA6DQotICAgICBWYWx1ZSB2IHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluc3RhbmNlIG9mIGN0eXBlLCByYXRoZXIgdGhhbiBpdHMgZGVjbGFyZWQgdHlwZS4NCi0NCi0gX19vdmVycmlkZSBmIDoNCi0gICAgIFNwZWNpZnkgQyMtc3R5bGUgJ292ZXJyaWRlJyBiZWhhdmlvdXIgZm9yIG92ZXJyaWRpbmcgdmlydHVhbCBtZXRob2RzLg0KLQ0KLSBfX2NhbGxiYWNrIGYgOg0KLSAgICAgRnVuY3Rpb24gZiBjYW4gYmUgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIuDQotDQotIF9fZm9ybWF0X3N0cmluZyBwIDoNCi0gICAgIFBvaW50ZXIgcCBpcyBhIHN0cmluZyB0aGF0IGNvbnRhaW5zICUgbWFya2VycyBpbiB0aGUgc3R5bGUgb2YgcHJpbnRmLg0KLQ0KLSBfX2Jsb2Nrc09uKHJlc291cmNlKSBmIDoNCi0gICAgIEZ1bmN0aW9uIGYgYmxvY2tzIG9uIHRoZSByZXNvdXJjZSAncmVzb3VyY2UnLg0KLQ0KLSBfX2ZhbGx0aHJvdWdoIDoNCi0gICAgIEFubm90YXRlcyBzd2l0Y2ggc3RhdGVtZW50IGxhYmVscyB3aGVyZSBmYWxsLXRocm91Z2ggaXMgZGVzaXJlZCwgdG8gZGlzdGluZ3Vpc2gNCi0gICAgIGZyb20gZm9yZ290dGVuIGJyZWFrIHN0YXRlbWVudHMuDQotDQotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0gQWR2YW5jZWQgQW5ub3RhdGlvbiBFeGFtcGxlcw0KLQ0KLSBfX3N1Y2Nlc3MocmV0dXJuID09IFRSVUUpIExXU1REQVBJXyhCT09MKSANCi0gUGF0aENhbm9uaWNhbGl6ZUEoX19vdXRfZWNvdW50KE1BWF9QQVRIKSBMUFNUUiBwc3pCdWYsIExQQ1NUUiBwc3pQYXRoKSA6DQotICAgICBwc3pCdWYgaXMgb25seSBndWFyYW50ZWVkIHRvIGJlIE5VTEwtdGVybWluYXRlZCB3aGVuIFRSVUUgaXMgcmV0dXJuZWQuDQotDQotIHR5cGVkZWYgX19udWxsdGVybWluYXRlZCBXQ0hBUiogTFBXU1RSIDogSW5pdGlhbGl6ZWQgTFBXU1RScyBhcmUgTlVMTC10ZXJtaW5hdGVkIHN0cmluZ3MuDQotDQotIF9fb3V0X2Vjb3VudChjY2gpIF9fdHlwZWZpeChMUFdTVFIpIHZvaWQgKnBzeiA6IHBzeiBpcyBhIGJ1ZmZlciBwYXJhbWV0ZXIgd2hpY2ggd2lsbCBiZQ0KLSAgICAgYSBOVUxMLXRlcm1pbmF0ZWQgV0NIQVIgc3RyaW5nIGF0IGV4aXQsIGFuZCB3aGljaCBpbml0aWFsbHkgY29udGFpbnMgY2NoIFdDSEFScy4NCi0NCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSovDQotDQotI3ByYWdtYSBvbmNlDQotDQotI2RlZmluZSBfX3NwZWNzdHJpbmdzDQotDQotI2lmZGVmICBfX2NwbHVzcGx1cw0KLSNpZm5kZWYgX19ub3Rocm93DQotIyBkZWZpbmUgX19ub3Rocm93IF9fZGVjbHNwZWMobm90aHJvdykNCi0jZW5kaWYNCi1leHRlcm4gIkMiIHsNCi0jZWxzZQ0KLSNpZm5kZWYgX19ub3Rocm93DQotIyBkZWZpbmUgX19ub3Rocm93DQotI2VuZGlmDQotI2VuZGlmICAvKiAjaWZkZWYgX19jcGx1c3BsdXMgKi8NCi0NCi0vKg0KLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotIEhlbHBlciBNYWNybyBEZWZpbml0aW9ucw0KLQ0KLSBUaGVzZSBleHByZXNzIGJlaGF2aW9yIGNvbW1vbiB0byBtYW55IG9mIHRoZSBoaWdoLWxldmVsIGFubm90YXRpb25zLg0KLSBETyBOT1QgVVNFIFRIRVNFIElOIFlPVVIgQ09ERS4NCi0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSovDQotDQotLyoNCi1UaGUgaGVscGVyIGFubm90YXRpb25zIGFyZSBvbmx5IHVuZGVyc3Rvb2QgYnkgdGhlIGNvbXBpbGVyIHZlcnNpb24gdXNlZCBieSB2YXJpb3VzDQotZGVmZWN0IGRldGVjdGlvbiB0b29scy4gV2hlbiB0aGUgcmVndWxhciBjb21waWxlciBpcyBydW5uaW5nLCB0aGV5IGFyZSBkZWZpbmVkIGludG8NCi1ub3RoaW5nLCBhbmQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQgY29kZS4NCi0qLw0KLQ0KLSNpZiAhZGVmaW5lZChfX21pZGwpICYmIGRlZmluZWQoX1BSRUZBU1RfKSANCi0NCi0gICAgLyoNCi0gICAgIEluIHRoZSBwcmltaXRpdmUgX19kZWNsc3BlYygiU0FMXyoiKSBhbm5vdGF0aW9ucyAiU0FMIiBzdGFuZHMgZm9yIFN0YW5kYXJkDQotICAgICBBbm5vdGF0aW9uIExhbmd1YWdlLiAgVGhlc2UgX19kZWNsc3BlYygiU0FMXyoiKSBhbm5vdGF0aW9ucyBhcmUgdGhlDQotICAgICBwcmltaXRpdmVzIHRoZSBjb21waWxlciB1bmRlcnN0YW5kcyBhbmQgYWxsIGhpZ2gtbGV2ZWwgU3BlY1N0cmluZyBNQUNST3MNCi0gICAgIHdpbGwgZGVjb21wb3NlIGludG8gdGhlc2UgcHJpbWl2YXRlcy4NCi0gICAgKi8NCi0NCi0gICAgI2RlZmluZSBTUEVDU1RSSU5HSVpFKCB4ICkgI3gNCi0NCi0gICAgLyoNCi0gICAgIF9fbnVsbCBwDQotICAgICBfX25vdG51bGwgcA0KLSAgICAgX19tYXliZW51bGwgcA0KLSAgICANCi0gICAgIEFubm90YXRlcyBhIHBvaW50ZXIgcC4gU3RhdGVzIHRoYXQgcG9pbnRlciBwIGlzIG51bGwuIENvbW1vbmx5IHVzZWQNCi0gICAgIGluIHRoZSBuZWdhdGVkIGZvcm0gX19ub3RudWxsIG9yIHRoZSBwb3NzaWJseSBudWxsIGZvcm0gX19tYXliZW51bGwuDQotICAgICovDQotDQotICAgICNkZWZpbmUgX19udWxsICAgICAgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX251bGwiKQ0KLSAgICAjZGVmaW5lIF9fbm90bnVsbCAgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF9ub3RudWxsIikNCi0gICAgI2RlZmluZSBfX21heWJlbnVsbCAgICAgICAgICAgICBfX2RlY2xzcGVjKCJTQUxfbWF5YmVudWxsIikNCi0NCi0gICAgLyoNCi0gICAgIF9fcmVhZG9ubHkgbA0KLSAgICAgX19ub3RyZWFkb25seSBsDQotICAgICBfX21hYnllcmVhZG9ubHkgbA0KLSAgICANCi0gICAgIEFubm90YXRlcyBhIGxvY2F0aW9uIGwuIFN0YXRlcyB0aGF0IGxvY2F0aW9uIGwgaXMgbm90IG1vZGlmaWVkIGFmdGVyDQotICAgICB0aGlzIHBvaW50LiAgSWYgdGhlIGFubm90YXRpb24gaXMgcGxhY2VkIG9uIHRoZSBwcmVjb25kaXRpb24gc3RhdGUgb2YNCi0gICAgIGEgZnVuY3Rpb24sIHRoZSByZXN0cmljdGlvbiBvbmx5IGFwcGxpZXMgdW50aWwgdGhlIHBvc3Rjb25kaXRpb24gc3RhdGUNCi0gICAgIG9mIHRoZSBmdW5jdGlvbi4gIF9fbWF5YmVyZWFkb25seSBzdGF0ZXMgdGhhdCB0aGUgYW5ub3RhdGVkIGxvY2F0aW9uDQotICAgICBtYXkgYmUgbW9kaWZpZWQsIHdoZXJlYXMgX19ub3RyZWFkb25seSBzdGF0ZXMgdGhhdCBhIGxvY2F0aW9uIG11c3QgYmUNCi0gICAgIG1vZGlmaWVkLg0KLSAgICAqLw0KLQ0KLSAgICAjZGVmaW5lIF9fcmVhZG9ubHkgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF9yZWFkb25seSIpDQotICAgICNkZWZpbmUgX19ub3RyZWFkb25seSAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX25vdHJlYWRvbmx5IikNCi0gICAgI2RlZmluZSBfX21heWJlcmVhZG9ubHkgICAgICAgICBfX2RlY2xzcGVjKCJTQUxfbWF5YmVyZWFkb25seSIpDQotDQotICAgIC8qDQotICAgICBfX3ZhbGlkIHYNCi0gICAgIF9fbm90dmFsaWQgdg0KLSAgICAgX19tYXliZXZhbGlkIHYNCi0gICAgDQotICAgICBBbm5vdGF0ZXMgYW55IHZhbHVlIHYuIFN0YXRlcyB0aGF0IHRoZSB2YWx1ZSBzYXRpc2ZpZXMgYWxsIHByb3BlcnRpZXMgb2YNCi0gICAgIHZhbGlkIHZhbHVlcyBvZiBpdHMgdHlwZS4gRm9yIGV4YW1wbGUsIGZvciBhIHN0cmluZyBidWZmZXIsIHZhbGlkIG1lYW5zDQotICAgICB0aGF0IHRoZSBidWZmZXIgcG9pbnRlciBpcyBlaXRoZXIgTlVMTCBvciBwb2ludHMgdG8gYSBOVUxMLXRlcm1pbmF0ZWQgc3RyaW5nLg0KLSAgICAqLw0KLQ0KLSAgICAjZGVmaW5lIF9fdmFsaWQgICAgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF92YWxpZCIpDQotICAgICNkZWZpbmUgX19ub3R2YWxpZCAgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX25vdHZhbGlkIikNCi0gICAgI2RlZmluZSBfX21heWJldmFsaWQgICAgICAgICAgICBfX2RlY2xzcGVjKCJTQUxfbWF5YmV2YWxpZCIpDQotDQotICAgIC8qDQotICAgICBfX3JlYWRhYmxlVG8oZXh0ZW50KSBwDQotICAgIA0KLSAgICAgQW5ub3RhdGVzIGEgYnVmZmVyIHBvaW50ZXIgcC4gIElmIHRoZSBidWZmZXIgY2FuIGJlIHJlYWQsIGV4dGVudCBkZXNjcmliZXMNCi0gICAgIGhvdyBtdWNoIG9mIHRoZSBidWZmZXIgaXMgcmVhZGFibGUuIEZvciBhIHJlYWRlciBvZiB0aGUgYnVmZmVyLCB0aGlzIGlzDQotICAgICBhbiBleHBsaWNpdCBwZXJtaXNzaW9uIHRvIHJlYWQgdXAgdG8gdGhhdCBhbW91bnQsIHJhdGhlciB0aGFuIGEgcmVzdHJpY3Rpb24gdG8NCi0gICAgIHJlYWQgb25seSB1cCB0byBpdC4NCi0gICAgKi8NCi0NCi0gICAgI2RlZmluZSBfX3JlYWRhYmxlVG8oZXh0ZW50KSAgICBfX2RlY2xzcGVjKCJTQUxfcmVhZGFibGVUbygiU1BFQ1NUUklOR0laRShleHRlbnQpIikiKQ0KLQ0KLSAgICAvKg0KLSAgICANCi0gICAgIF9fZWxlbV9yZWFkYWJsZVRvKHNpemUpDQotICAgIA0KLSAgICAgQW5ub3RhdGVzIGEgYnVmZmVyIHBvaW50ZXIgcCBhcyBiZWluZyByZWFkYWJsZSB0byBzaXplIGVsZW1lbnRzLg0KLSAgICAqLw0KLQ0KLSAgICAjZGVmaW5lIF9fZWxlbV9yZWFkYWJsZVRvKHNpemUpICAgX19kZWNsc3BlYygiU0FMX3JlYWRhYmxlVG8oZWxlbWVudENvdW50KCJTUEVDU1RSSU5HSVpFKHNpemUpIikpIikNCi0gICAgDQotICAgIC8qDQotICAgICBfX2J5dGVfcmVhZGFibGVUbyhzaXplKQ0KLSAgICANCi0gICAgIEFubm90YXRlcyBhIGJ1ZmZlciBwb2ludGVyIHAgYXMgYmVpbmcgcmVhZGFibGUgdG8gc2l6ZSBieXRlcy4NCi0gICAgKi8NCi0gICAgI2RlZmluZSBfX2J5dGVfcmVhZGFibGVUbyhzaXplKSAgIF9fZGVjbHNwZWMoIlNBTF9yZWFkYWJsZVRvKGJ5dGVDb3VudCgiU1BFQ1NUUklOR0laRShzaXplKSIpKSIpDQotICAgIA0KLSAgICAvKg0KLSAgICAgX193cml0YWJsZVRvKGV4dGVudCkgcA0KLSAgICANCi0gICAgIEFubm90YXRlcyBhIGJ1ZmZlciBwb2ludGVyIHAuIElmIHRoZSBidWZmZXIgY2FuIGJlIG1vZGlmaWVkLCBleHRlbnQNCi0gICAgIGRlc2NyaWJlcyBob3cgbXVjaCBvZiB0aGUgYnVmZmVyIGlzIHdyaXRhYmxlICh1c3VhbGx5IHRoZSBhbGxvY2F0aW9uDQotICAgICBzaXplKS4gRm9yIGEgd3JpdGVyIG9mIHRoZSBidWZmZXIsIHRoaXMgaXMgYW4gZXhwbGljaXQgcGVybWlzc2lvbiB0bw0KLSAgICAgd3JpdGUgdXAgdG8gdGhhdCBhbW91bnQsIHJhdGhlciB0aGFuIGEgcmVzdHJpY3Rpb24gdG8gd3JpdGUgb25seSB1cCB0byBpdC4NCi0gICAgKi8NCi0gICAgI2RlZmluZSBfX3dyaXRhYmxlVG8oc2l6ZSkgICBfX2RlY2xzcGVjKCJTQUxfd3JpdGFibGVUbygiU1BFQ1NUUklOR0laRShzaXplKSIpIikNCi0NCi0gICAgLyoNCi0gICAgIF9fZWxlbV93cml0YWJsZVRvKHNpemUpDQotICAgIA0KLSAgICAgQW5ub3RhdGVzIGEgYnVmZmVyIHBvaW50ZXIgcCBhcyBiZWluZyB3cml0YWJsZSB0byBzaXplIGVsZW1lbnRzLg0KLSAgICAqLw0KLSAgICAjZGVmaW5lIF9fZWxlbV93cml0YWJsZVRvKHNpemUpICAgX19kZWNsc3BlYygiU0FMX3dyaXRhYmxlVG8oZWxlbWVudENvdW50KCJTUEVDU1RSSU5HSVpFKHNpemUpIikpIikNCi0gICAgDQotICAgIC8qDQotICAgICBfX2J5dGVfd3JpdGFibGVUbyhzaXplKQ0KLSAgICANCi0gICAgIEFubm90YXRlcyBhIGJ1ZmZlciBwb2ludGVyIHAgYXMgYmVpbmcgd3JpdGFibGUgdG8gc2l6ZSBieXRlcy4NCi0gICAgKi8NCi0gICAgI2RlZmluZSBfX2J5dGVfd3JpdGFibGVUbyhzaXplKSAgIF9fZGVjbHNwZWMoIlNBTF93cml0YWJsZVRvKGJ5dGVDb3VudCgiU1BFQ1NUUklOR0laRShzaXplKSIpKSIpDQotDQotICAgIC8qDQotICAgICBfX2RlcmVmIHANCi0gICAgDQotICAgICBBbm5vdGF0ZXMgYSBwb2ludGVyIHAuIFRoZSBuZXh0IGFubm90YXRpb24gYXBwbGllcyBvbmUgZGVyZWZlcmVuY2UgZG93bg0KLSAgICAgaW4gdGhlIHR5cGUuIElmIHJlYWRhYmxlVG8ocCwgc2l6ZSkgdGhlbiB0aGUgbmV4dCBhbm5vdGF0aW9uIGFwcGxpZXMgdG8NCi0gICAgIGFsbCBlbGVtZW50cyAqKHAraSkgZm9yIHdoaWNoIGkgc2F0aXNmaWVzIHRoZSBzaXplLiBJZiBwIGlzIGEgcG9pbnRlcg0KLSAgICAgdG8gYSBzdHJ1Y3QsIHRoZSBuZXh0IGFubm90YXRpb24gYXBwbGllcyB0byBhbGwgZmllbGRzIG9mIHRoZSBzdHJ1Y3QuDQotICAgICovDQotICAgICNkZWZpbmUgX19kZXJlZiAgICAgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX2RlcmVmIikNCi0gICAgDQotICAgIC8qDQotICAgICBfX3ByZSBfX25leHRfYW5ub3RhdGlvbg0KLSAgICANCi0gICAgIFRoZSBuZXh0IGFubm90YXRpb24gYXBwbGllcyBpbiB0aGUgcHJlY29uZGl0aW9uIHN0YXRlDQotICAgICovDQotICAgICNkZWZpbmUgX19wcmUgICAgICAgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX3ByZSIpDQotICAgIA0KLSAgICAvKg0KLSAgICAgX19wb3N0IF9fbmV4dF9hbm5vdGF0aW9uDQotICAgIA0KLSAgICAgVGhlIG5leHQgYW5ub3RhdGlvbiBhcHBsaWVzIGluIHRoZSBwb3N0Y29uZGl0aW9uIHN0YXRlDQotICAgICovDQotICAgICNkZWZpbmUgX19wb3N0ICAgICAgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX3Bvc3QiKQ0KLSAgICANCi0gICAgLyoNCi0gICAgIF9fcHJlY29uZCg8ZXhwcj4pDQotICAgIA0KLSAgICAgV2hlbiA8ZXhwcj4gaXMgdHJ1ZSwgdGhlIG5leHQgYW5ub3RhdGlvbiBhcHBsaWVzIGluIHRoZSBwcmVjb25kaXRpb24gc3RhdGUNCi0gICAgIChjdXJyZW50bHkgbm90IGVuYWJsZWQpDQotICAgICovDQotICAgICNkZWZpbmUgX19wcmVjb25kKGV4cHIpICAgICAgICAgX19wcmUNCi0NCi0gICAgLyoNCi0gICAgIF9fcG9zdGNvbmQoPGV4cHI+KQ0KLSAgICANCi0gICAgIFdoZW4gPGV4cHI+IGlzIHRydWUsIHRoZSBuZXh0IGFubm90YXRpb24gYXBwbGllcyBpbiB0aGUgcG9zdGNvbmRpdGlvbiBzdGF0ZQ0KLSAgICAgKGN1cnJlbnRseSBub3QgZW5hYmxlZCkNCi0gICAgKi8NCi0gICAgI2RlZmluZSBfX3Bvc3Rjb25kKGV4cHIpICAgICAgICBfX3Bvc3QNCi0NCi0gICAgLyoNCi0gICAgIF9fZXhjZXB0dGhhdA0KLSAgICANCi0gICAgIEdpdmVuIGEgc2V0IG9mIGFubm90YXRpb25zIFEgY29udGFpbmluZyBfX2V4Y2VwdHRoYXQgbWF5YmVQLCB0aGUgZWZmZWN0IG9mDQotICAgICB0aGUgZXhjZXB0IGNsYXVzZSBpcyB0byBlcmFzZSBhbnkgUCBvciBub3RQIGFubm90YXRpb25zIChleHBsaWNpdCBvcg0KLSAgICAgaW1wbGllZCkgd2l0aGluIFEgYXQgdGhlIHNhbWUgbGV2ZWwgb2YgZGVyZWZlcmVuY2luZyB0aGF0IHRoZSBleGNlcHQNCi0gICAgIGNsYXVzZSBhcHBlYXJzLCBhbmQgdG8gcmVwbGFjZSBpdCB3aXRoIG1heWJlUC4NCi0gICAgDQotICAgICAgRXhhbXBsZSAxOiBfX3ZhbGlkIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbCBvbiBhIHBvaW50ZXIgcCBtZWFucyB0aGF0IHRoZQ0KLSAgICAgICAgICAgICAgICAgcG9pbnRlciBtYXkgYmUgbnVsbCwgYW5kIGlzIG90aGVyd2lzZSB2YWxpZCwgdGh1cyBvdmVycmlkaW5nDQotICAgICAgICAgICAgICAgICB0aGUgaW1wbGljaXQgbm90bnVsbCBhbm5vdGF0aW9uIGltcGxpZWQgYnkgX192YWxpZCBvbg0KLSAgICAgICAgICAgICAgICAgcG9pbnRlcnMuDQotICAgIA0KLSAgICAgIEV4YW1wbGUgMjogX192YWxpZCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbCBvbiBhbiBpbnQgKipwIG1lYW5zDQotICAgICAgICAgICAgICAgICB0aGF0IHAgaXMgbm90IG51bGwgKGltcGxpZWQgYnkgdmFsaWQpLCBidXQgdGhlIGVsZW1lbnRzDQotICAgICAgICAgICAgICAgICBwb2ludGVkIHRvIGJ5IHAgY291bGQgYmUgbnVsbCwgYW5kIGFyZSBvdGhlcndpc2UgdmFsaWQuIA0KLSAgICAqLw0KLSAgICAjZGVmaW5lIF9fZXhjZXB0dGhhdCAgICAgICAgICAgICAgICBfX2RlY2xzcGVjKCJTQUxfZXhjZXB0IikNCi0gICAgI2RlZmluZSBfX2V4ZWNlcHR0aGF0ICAgICAgICAgICAgICAgX19leGNlcHR0aGF0DQotIA0KLSAgICAvKg0KLSAgICAgX3JlZnBhcmFtDQotICAgIA0KLSAgICAgQWRkZWQgdG8gYWxsIG91dCBwYXJhbWV0ZXIgbWFjcm9zIHRvIGluZGljYXRlIHRoYXQgdGhleSBhcmUgYWxsIHJlZmVyZW5jZQ0KLSAgICAgcGFyYW1ldGVycy4NCi0gICAgKi8NCi0gICAgI2RlZmluZSBfX3JlZnBhcmFtICAgICAgICAgICAgICAgICAgX19kZXJlZiBfX25vdHJlYWRvbmx5DQotDQotICAgIC8qDQotICAgICBfX2lubmVyXyoNCi0gICAgDQotICAgICBIZWxwZXIgbWFjcm9zIHRoYXQgZGlyZWN0bHkgY29ycmVzcG9uZCB0byBjZXJ0YWluIGhpZ2gtbGV2ZWwgYW5ub3RhdGlvbnMuDQotICAgIA0KLSAgICAqLw0KLQ0KLSAgICAvKg0KLSAgICAgTWFjcm9zIHRvIGNsYXNzaWZ5IHRoZSBlbnRyeXBvaW50cyBhbmQgaW5kaWNhdGUgdGhlaXIgY2F0ZWdvcnkuDQotICAgIA0KLSAgICAgUHJlLWRlZmluZWQgY29udHJvbCBwb2ludCBjYXRlZ29yaWVzIGluY2x1ZGU6IFJQQywgTFBDLCBEZXZpY2VEcml2ZXIsIFVzZXJUb0tlcm5lbCwgSVNBUEksIENPTS4NCi0gICAgDQotICAgICovDQotICAgICNkZWZpbmUgX19pbm5lcl9jb250cm9sX2VudHJ5cG9pbnQoY2F0ZWdvcnkpIF9fZGVjbHNwZWMoIlNBTF9lbnRyeXBvaW50KGNvbnRyb2xFbnRyeSwgIlNQRUNTVFJJTkdJWkUoY2F0ZWdvcnkpIikiKQ0KLQ0KLSAgICAvKg0KLSAgICAgUHJlLWRlZmluZWQgZGF0YSBlbnRyeSBwb2ludCBjYXRlZ29yaWVzIGluY2x1ZGU6IFJlZ2lzdHJ5LCBGaWxlLCBOZXR3b3JrLg0KLSAgICAqLw0KLSAgICAjZGVmaW5lIF9faW5uZXJfZGF0YV9lbnRyeXBvaW50KGNhdGVnb3J5KSAgICBfX2RlY2xzcGVjKCJTQUxfZW50cnlwb2ludChkYXRhRW50cnksICJTUEVDU1RSSU5HSVpFKGNhdGVnb3J5KSIpIikNCi0NCi0gICAgI2RlZmluZSBfX2lubmVyX3N1Y2Nlc3MoZXhwcikgICAgICAgICAgICAgICBfX2RlY2xzcGVjKCJTQUxfc3VjY2VzcygiU1BFQ1NUUklOR0laRShleHByKSIpIikNCi0gICAgI2RlZmluZSBfX2lubmVyX2NoZWNrUmV0dXJuICAgICAgICAgICAgICAgICBfX2RlY2xzcGVjKCJTQUxfY2hlY2tSZXR1cm4iKQ0KLSAgICAjZGVmaW5lIF9faW5uZXJfdHlwZWZpeChjdHlwZSkgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF90eXBlZml4KCJTUEVDU1RSSU5HSVpFKGN0eXBlKSIpIikNCi0gICAgI2RlZmluZSBfX2lubmVyX292ZXJyaWRlICAgICAgICAgICAgICAgICAgICBfX2RlY2xzcGVjKCJfX292ZXJyaWRlIikNCi0gICAgI2RlZmluZSBfX2lubmVyX2NhbGxiYWNrICAgICAgICAgICAgICAgICAgICBfX2RlY2xzcGVjKCJfX2NhbGxiYWNrIikNCi0gICAgI2RlZmluZSBfX2lubmVyX2Jsb2Nrc09uKHJlc291cmNlKSAgICAgICAgICBfX2RlY2xzcGVjKCJTQUxfYmxvY2tzT24oIlNQRUNTVFJJTkdJWkUocmVzb3VyY2UpIikiKQ0KLSAgICAjZGVmaW5lIF9faW5uZXJfZmFsbHRocm91Z2hfZGVjICAgICAgICAgICAgIF9faW5saW5lIF9fbm90aHJvdyB2b2lkIF9fRmFsbFRocm91Z2goKSB7fQ0KLSAgICAjZGVmaW5lIF9faW5uZXJfZmFsbHRocm91Z2ggICAgICAgICAgICAgICAgIF9fRmFsbFRocm91Z2goKTsNCi0NCi0jZWxzZQ0KLSAgICAjZGVmaW5lIF9fbnVsbA0KLSAgICAjZGVmaW5lIF9fbm90bnVsbA0KLSAgICAjZGVmaW5lIF9fbWF5YmVudWxsDQotICAgICNkZWZpbmUgX19yZWFkb25seQ0KLSAgICAjZGVmaW5lIF9fbm90cmVhZG9ubHkNCi0gICAgI2RlZmluZSBfX21heWJlcmVhZG9ubHkNCi0gICAgI2RlZmluZSBfX3ZhbGlkDQotICAgICNkZWZpbmUgX19ub3R2YWxpZA0KLSAgICAjZGVmaW5lIF9fbWF5YmV2YWxpZA0KLSAgICAjZGVmaW5lIF9fcmVhZGFibGVUbyhleHRlbnQpDQotICAgICNkZWZpbmUgX19lbGVtX3JlYWRhYmxlVG8oc2l6ZSkNCi0gICAgI2RlZmluZSBfX2J5dGVfcmVhZGFibGVUbyhzaXplKQ0KLSAgICAjZGVmaW5lIF9fd3JpdGFibGVUbyhzaXplKQ0KLSAgICAjZGVmaW5lIF9fZWxlbV93cml0YWJsZVRvKHNpemUpDQotICAgICNkZWZpbmUgX19ieXRlX3dyaXRhYmxlVG8oc2l6ZSkNCi0gICAgI2RlZmluZSBfX2RlcmVmDQotICAgICNkZWZpbmUgX19wcmUNCi0gICAgI2RlZmluZSBfX3Bvc3QNCi0gICAgI2RlZmluZSBfX3ByZWNvbmQoZXhwcikNCi0gICAgI2RlZmluZSBfX3Bvc3Rjb25kKGV4cHIpDQotICAgICNkZWZpbmUgX19leGNlcHR0aGF0DQotICAgICNkZWZpbmUgX19leGVjZXB0dGhhdA0KLSAgICAjZGVmaW5lIF9faW5uZXJfc3VjY2VzcyhleHByKQ0KLSAgICAjZGVmaW5lIF9faW5uZXJfY2hlY2tSZXR1cm4NCi0gICAgI2RlZmluZSBfX2lubmVyX3R5cGVmaXgoY3R5cGUpDQotICAgICNkZWZpbmUgX19pbm5lcl9vdmVycmlkZQ0KLSAgICAjZGVmaW5lIF9faW5uZXJfY2FsbGJhY2sNCi0gICAgI2RlZmluZSBfX2lubmVyX2Jsb2Nrc09uKHJlc291cmNlKQ0KLSAgICAjZGVmaW5lIF9faW5uZXJfZmFsbHRocm91Z2hfZGVjDQotICAgICNkZWZpbmUgX19pbm5lcl9mYWxsdGhyb3VnaA0KLSAgICAjZGVmaW5lIF9fcmVmcGFyYW0NCi0gICAgI2RlZmluZSBfX2lubmVyX2NvbnRyb2xfZW50cnlwb2ludChjYXRlZ29yeSkNCi0gICAgI2RlZmluZSBfX2lubmVyX2RhdGFfZW50cnlwb2ludChjYXRlZ29yeSkNCi0jZW5kaWYgLyogI2lmICFkZWZpbmVkKF9fbWlkbCkgJiYgZGVmaW5lZChfUFJFRkFTVF8pICovDQotDQotLyogDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLUJ1ZmZlciBBbm5vdGF0aW9uIERlZmluaXRpb25zDQotDQotQW55IG9mIHRoZXNlIG1heSBiZSB1c2VkIHRvIGRpcmVjdGx5IGFubm90YXRlIGZ1bmN0aW9ucywgYnV0IG9ubHkgb25lIHNob3VsZA0KLWJlIHVzZWQgZm9yIGVhY2ggcGFyYW1ldGVyLiBUbyBkZXRlcm1pbmUgd2hpY2ggYW5ub3RhdGlvbiB0byB1c2UgZm9yIGEgZ2l2ZW4NCi1idWZmZXIsIHVzZSB0aGUgdGFibGUgaW4gdGhlIGJ1ZmZlciBhbm5vdGF0aW9ucyBzZWN0aW9uLg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0qLw0KLQ0KLSNkZWZpbmUgX19lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25vdG51bGwgX19lbGVtX3dyaXRhYmxlVG8oc2l6ZSkNCi0jZGVmaW5lIF9fYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ub3RudWxsIF9fYnl0ZV93cml0YWJsZVRvKHNpemUpDQotI2RlZmluZSBfX2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlIF9fdmFsaWQgX19wcmUgX19kZXJlZiBfX3JlYWRvbmx5DQotI2RlZmluZSBfX2luX2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW4gX19wcmUgX19lbGVtX3JlYWRhYmxlVG8oc2l6ZSkNCi0jZGVmaW5lIF9faW5fYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbiBfX3ByZSBfX2J5dGVfcmVhZGFibGVUbyhzaXplKQ0KLSNkZWZpbmUgX19pbl96ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2luIF9fcHJlIF9fbnVsbHRlcm1pbmF0ZWQNCi0jZGVmaW5lIF9faW5fZWNvdW50X3ooc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbl9lY291bnQoc2l6ZSkgX19wcmUgX19udWxsdGVybWluYXRlZA0KLSNkZWZpbmUgX19pbl9iY291bnRfeihzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2luX2Jjb3VudChzaXplKSBfX3ByZSBfX251bGx0ZXJtaW5hdGVkDQotI2RlZmluZSBfX2luX256ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW4NCi0jZGVmaW5lIF9faW5fZWNvdW50X256KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbl9lY291bnQoc2l6ZSkNCi0jZGVmaW5lIF9faW5fYmNvdW50X256KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbl9iY291bnQoc2l6ZSkNCi0jZGVmaW5lIF9fb3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lY291bnQoMSkgX19wb3N0IF9fdmFsaWQgX19yZWZwYXJhbQ0KLSNkZWZpbmUgX19vdXRfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vjb3VudChzaXplKSBfX3Bvc3QgX192YWxpZCBfX3JlZnBhcmFtDQotI2RlZmluZSBfX291dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYmNvdW50KHNpemUpIF9fcG9zdCBfX3ZhbGlkIF9fcmVmcGFyYW0NCi0jZGVmaW5lIF9fb3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZWNvdW50KHNpemUpIF9fcG9zdCBfX2VsZW1fcmVhZGFibGVUbyhsZW5ndGgpDQotI2RlZmluZSBfX291dF9iY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Jjb3VudChzaXplKSBfX3Bvc3QgX19ieXRlX3JlYWRhYmxlVG8obGVuZ3RoKQ0KLSNkZWZpbmUgX19vdXRfZWNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9lY291bnRfcGFydChzaXplLHNpemUpDQotI2RlZmluZSBfX291dF9iY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Jjb3VudF9wYXJ0KHNpemUsc2l6ZSkNCi0jZGVmaW5lIF9fb3V0X3ogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wb3N0IF9fdmFsaWQgX19yZWZwYXJhbSBfX3Bvc3QgX19udWxsdGVybWluYXRlZA0KLSNkZWZpbmUgX19vdXRfel9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc3QgX192YWxpZCBfX3JlZnBhcmFtIF9fcG9zdCBfX251bGx0ZXJtaW5hdGVkIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19vdXRfZWNvdW50X3ooc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vjb3VudChzaXplKSBfX3Bvc3QgX192YWxpZCBfX3JlZnBhcmFtIF9fcG9zdCBfX251bGx0ZXJtaW5hdGVkDQotI2RlZmluZSBfX291dF9iY291bnRfeihzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYmNvdW50KHNpemUpIF9fcG9zdCBfX3ZhbGlkIF9fcmVmcGFyYW0gX19wb3N0IF9fbnVsbHRlcm1pbmF0ZWQNCi0jZGVmaW5lIF9fb3V0X2Vjb3VudF9wYXJ0X3ooc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZWNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpIF9fcG9zdCBfX251bGx0ZXJtaW5hdGVkDQotI2RlZmluZSBfX291dF9iY291bnRfcGFydF96KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Jjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSBfX3Bvc3QgX19udWxsdGVybWluYXRlZA0KLSNkZWZpbmUgX19vdXRfZWNvdW50X2Z1bGxfeihzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9lY291bnRfZnVsbChzaXplKSBfX3Bvc3QgX19udWxsdGVybWluYXRlZA0KLSNkZWZpbmUgX19vdXRfYmNvdW50X2Z1bGxfeihzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9iY291bnRfZnVsbChzaXplKSBfX3Bvc3QgX19udWxsdGVybWluYXRlZA0KLSNkZWZpbmUgX19vdXRfbnogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc3QgX192YWxpZCBfX3JlZnBhcmFtIF9fcG9zdA0KLSNkZWZpbmUgX19vdXRfbnpfb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc3QgX192YWxpZCBfX3JlZnBhcmFtIF9fcG9zdCBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZGVmaW5lIF9fb3V0X2Vjb3VudF9ueihzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lY291bnQoc2l6ZSkgX19wb3N0IF9fdmFsaWQgX19yZWZwYXJhbQ0KLSNkZWZpbmUgX19vdXRfYmNvdW50X256KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Jjb3VudChzaXplKSBfX3Bvc3QgX192YWxpZCBfX3JlZnBhcmFtDQotI2RlZmluZSBfX2lub3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlIF9fdmFsaWQgX19wb3N0IF9fdmFsaWQgX19yZWZwYXJhbQ0KLSNkZWZpbmUgX19pbm91dF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9lY291bnQoc2l6ZSkgX19wcmUgX192YWxpZA0KLSNkZWZpbmUgX19pbm91dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9iY291bnQoc2l6ZSkgX19wcmUgX192YWxpZA0KLSNkZWZpbmUgX19pbm91dF9lY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9lY291bnRfcGFydChzaXplLGxlbmd0aCkgX19wcmUgX192YWxpZCBfX3ByZSBfX2VsZW1fcmVhZGFibGVUbyhsZW5ndGgpDQotI2RlZmluZSBfX2lub3V0X2Jjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Jjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSBfX3ByZSBfX3ZhbGlkIF9fcHJlIF9fYnl0ZV9yZWFkYWJsZVRvKGxlbmd0aCkNCi0jZGVmaW5lIF9faW5vdXRfZWNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9lY291bnRfcGFydChzaXplLHNpemUpDQotI2RlZmluZSBfX2lub3V0X2Jjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5vdXRfYmNvdW50X3BhcnQoc2l6ZSxzaXplKQ0KLSNkZWZpbmUgX19pbm91dF96ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lub3V0IF9fcHJlIF9fbnVsbHRlcm1pbmF0ZWQgX19wb3N0IF9fbnVsbHRlcm1pbmF0ZWQNCi0jZGVmaW5lIF9faW5vdXRfZWNvdW50X3ooc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9lY291bnQoc2l6ZSkgX19wcmUgX19udWxsdGVybWluYXRlZCBfX3Bvc3QgX19udWxsdGVybWluYXRlZA0KLSNkZWZpbmUgX19pbm91dF9iY291bnRfeihzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lub3V0X2Jjb3VudChzaXplKSBfX3ByZSBfX251bGx0ZXJtaW5hdGVkIF9fcG9zdCBfX251bGx0ZXJtaW5hdGVkDQotI2RlZmluZSBfX2lub3V0X256ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5vdXQNCi0jZGVmaW5lIF9faW5vdXRfZWNvdW50X256KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9lY291bnQoc2l6ZSkgDQotI2RlZmluZSBfX2lub3V0X2Jjb3VudF9ueihzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5vdXRfYmNvdW50KHNpemUpIA0KLSNkZWZpbmUgX19lY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19pbl9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19pbl9lY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2luX2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19pbl9iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2luX2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19pbl96X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2luX29wdCBfX3ByZSBfX251bGx0ZXJtaW5hdGVkIA0KLSNkZWZpbmUgX19pbl9lY291bnRfel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2luX2Vjb3VudF9vcHQoc2l6ZSkgX19wcmUgX19udWxsdGVybWluYXRlZCANCi0jZGVmaW5lIF9faW5fYmNvdW50X3pfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbl9iY291bnRfb3B0KHNpemUpIF9fcHJlIF9fbnVsbHRlcm1pbmF0ZWQNCi0jZGVmaW5lIF9faW5fbnpfb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbl9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQotI2RlZmluZSBfX2luX2Vjb3VudF9uel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5fZWNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICANCi0jZGVmaW5lIF9faW5fYmNvdW50X256X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbl9iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgIA0KLSNkZWZpbmUgX19vdXRfb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19vdXRfZWNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19vdXRfYmNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19vdXRfZWNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgICBfX291dF9lY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19vdXRfYmNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgICBfX291dF9iY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19vdXRfZWNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9lY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19vdXRfYmNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9iY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19vdXRfZWNvdW50X3pfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9lY291bnRfb3B0KHNpemUpIF9fcG9zdCBfX251bGx0ZXJtaW5hdGVkDQotI2RlZmluZSBfX291dF9iY291bnRfel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Jjb3VudF9vcHQoc2l6ZSkgX19wb3N0IF9fbnVsbHRlcm1pbmF0ZWQNCi0jZGVmaW5lIF9fb3V0X2Vjb3VudF9wYXJ0X3pfb3B0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgX19vdXRfZWNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSBfX3Bvc3QgX19udWxsdGVybWluYXRlZA0KLSNkZWZpbmUgX19vdXRfYmNvdW50X3BhcnRfel9vcHQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICAgICAgICBfX291dF9iY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpIF9fcG9zdCBfX251bGx0ZXJtaW5hdGVkDQotI2RlZmluZSBfX291dF9lY291bnRfZnVsbF96X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Vjb3VudF9mdWxsX29wdChzaXplKSBfX3Bvc3QgX19udWxsdGVybWluYXRlZA0KLSNkZWZpbmUgX19vdXRfYmNvdW50X2Z1bGxfel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9iY291bnRfZnVsbF9vcHQoc2l6ZSkgX19wb3N0IF9fbnVsbHRlcm1pbmF0ZWQNCi0jZGVmaW5lIF9fb3V0X2Vjb3VudF9uel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZWNvdW50X29wdChzaXplKSBfX3Bvc3QgX19udWxsdGVybWluYXRlZCAgICAgICAgICAgICAgICAgICAgICAgDQotI2RlZmluZSBfX291dF9iY291bnRfbnpfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Jjb3VudF9vcHQoc2l6ZSkgX19wb3N0IF9fbnVsbHRlcm1pbmF0ZWQgICAgICAgICAgICAgICAgICAgICAgICANCi0jZGVmaW5lIF9faW5vdXRfb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZGVmaW5lIF9faW5vdXRfZWNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZGVmaW5lIF9faW5vdXRfYmNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZGVmaW5lIF9faW5vdXRfZWNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgX19pbm91dF9lY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZGVmaW5lIF9faW5vdXRfYmNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgX19pbm91dF9iY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZGVmaW5lIF9faW5vdXRfZWNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9lY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZGVmaW5lIF9faW5vdXRfYmNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9iY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZGVmaW5lIF9faW5vdXRfel9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9vcHQgX19wcmUgX19udWxsdGVybWluYXRlZCBfX3Bvc3QgX19udWxsdGVybWluYXRlZA0KLSNkZWZpbmUgX19pbm91dF9lY291bnRfel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lub3V0X2Vjb3VudF9vcHQoc2l6ZSkgX19wcmUgX19udWxsdGVybWluYXRlZCBfX3Bvc3QgX19udWxsdGVybWluYXRlZA0KLSNkZWZpbmUgX19pbm91dF9lY291bnRfel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lub3V0X2Vjb3VudF9vcHQoc2l6ZSkgX19wcmUgX19udWxsdGVybWluYXRlZCBfX3Bvc3QgX19udWxsdGVybWluYXRlZA0KLSNkZWZpbmUgX19pbm91dF9iY291bnRfel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lub3V0X2Jjb3VudF9vcHQoc2l6ZSkgDQotI2RlZmluZSBfX2lub3V0X256X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5vdXRfb3B0DQotI2RlZmluZSBfX2lub3V0X2Vjb3VudF9uel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5vdXRfZWNvdW50X29wdChzaXplKQ0KLSNkZWZpbmUgX19pbm91dF9iY291bnRfbnpfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lub3V0X2Jjb3VudF9vcHQoc2l6ZSkNCi0jZGVmaW5lIF9fZGVyZWZfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lY291bnQoMSkgX19wb3N0IF9fZWxlbV9yZWFkYWJsZVRvKDEpIF9fcG9zdCBfX2RlcmVmIF9fbm90bnVsbCBfX3Bvc3QgX19kZXJlZiBfX2VsZW1fd3JpdGFibGVUbyhzaXplKQ0KLSNkZWZpbmUgX19kZXJlZl9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vjb3VudCgxKSBfX3Bvc3QgX19lbGVtX3JlYWRhYmxlVG8oMSkgX19wb3N0IF9fZGVyZWYgX19ub3RudWxsIF9fcG9zdCBfX2RlcmVmIF9fYnl0ZV93cml0YWJsZVRvKHNpemUpDQotI2RlZmluZSBfX2RlcmVmX291dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfZWNvdW50KDEpIF9fcG9zdCBfX2RlcmVmIF9fdmFsaWQgX19yZWZwYXJhbQ0KLSNkZWZpbmUgX19kZXJlZl9vdXRfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2Vjb3VudChzaXplKSBfX3Bvc3QgX19kZXJlZiBfX3ZhbGlkIF9fcmVmcGFyYW0NCi0jZGVmaW5lIF9fZGVyZWZfb3V0X2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9iY291bnQoc2l6ZSkgX19wb3N0IF9fZGVyZWYgX192YWxpZCBfX3JlZnBhcmFtDQotI2RlZmluZSBfX2RlcmVmX291dF9lY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudChzaXplKSBfX3Bvc3QgX19kZXJlZiBfX2VsZW1fcmVhZGFibGVUbyhsZW5ndGgpDQotI2RlZmluZSBfX2RlcmVmX291dF9iY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudChzaXplKSBfX3Bvc3QgX19kZXJlZiBfX2J5dGVfcmVhZGFibGVUbyhsZW5ndGgpDQotI2RlZmluZSBfX2RlcmVmX291dF9lY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudF9wYXJ0KHNpemUsc2l6ZSkNCi0jZGVmaW5lIF9fZGVyZWZfb3V0X2Jjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfYmNvdW50X3BhcnQoc2l6ZSxzaXplKQ0KLSNkZWZpbmUgX19kZXJlZl9vdXRfeiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc3QgX19kZXJlZiBfX3ZhbGlkIF9fcmVmcGFyYW0gX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZA0KLSNkZWZpbmUgX19kZXJlZl9vdXRfZWNvdW50X3ooc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnQoc2l6ZSkgX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZCAgDQotI2RlZmluZSBfX2RlcmVmX291dF9iY291bnRfeihzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudChzaXplKSBfX3Bvc3QgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkICANCi0jZGVmaW5lIF9fZGVyZWZfb3V0X256ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vdXQNCi0jZGVmaW5lIF9fZGVyZWZfb3V0X2Vjb3VudF9ueihzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfZWNvdW50KHNpemUpICAgDQotI2RlZmluZSBfX2RlcmVmX291dF9iY291bnRfbnooc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudChzaXplKSAgIA0KLSNkZWZpbmUgX19kZXJlZl9pbm91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25vdG51bGwgX19lbGVtX3JlYWRhYmxlVG8oMSkgX19wcmUgX19kZXJlZiBfX3ZhbGlkIF9fcG9zdCBfX2RlcmVmIF9fdmFsaWQgX19yZWZwYXJhbQ0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF96ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0IF9fcHJlIF9fZGVyZWYgX19udWxsdGVybWluYXRlZCBfX3Bvc3QgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkDQotI2RlZmluZSBfX2RlcmVmX2lub3V0X2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXQgX19wcmUgX19kZXJlZiBfX2VsZW1fd3JpdGFibGVUbyhzaXplKSBfX3Bvc3QgX19kZXJlZiBfX2VsZW1fd3JpdGFibGVUbyhzaXplKQ0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0IF9fcHJlIF9fZGVyZWYgX19ieXRlX3dyaXRhYmxlVG8oc2l6ZSkgX19wb3N0IF9fZGVyZWYgX19ieXRlX3dyaXRhYmxlVG8oc2l6ZSkNCi0jZGVmaW5lIF9fZGVyZWZfaW5vdXRfZWNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9lY291bnQoc2l6ZSkgX19wcmUgX19kZXJlZiBfX2VsZW1fcmVhZGFibGVUbyhsZW5ndGgpIF9fcG9zdCBfX2RlcmVmIF9fZWxlbV9yZWFkYWJsZVRvKGxlbmd0aCkNCi0jZGVmaW5lIF9fZGVyZWZfaW5vdXRfYmNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9iY291bnQoc2l6ZSkgX19wcmUgX19kZXJlZiBfX2J5dGVfcmVhZGFibGVUbyhsZW5ndGgpIF9fcG9zdCBfX2RlcmVmIF9fYnl0ZV9yZWFkYWJsZVRvKGxlbmd0aCkNCi0jZGVmaW5lIF9fZGVyZWZfaW5vdXRfZWNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9lY291bnRfcGFydChzaXplLHNpemUpDQotI2RlZmluZSBfX2RlcmVmX2lub3V0X2Jjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfYmNvdW50X3BhcnQoc2l6ZSxzaXplKQ0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF96ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0IF9fcHJlIF9fZGVyZWYgX19udWxsdGVybWluYXRlZCBfX3Bvc3QgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkDQotI2RlZmluZSBfX2RlcmVmX2lub3V0X2Vjb3VudF96KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfZWNvdW50KHNpemUpIF9fcHJlIF9fZGVyZWYgX19udWxsdGVybWluYXRlZCBfX3Bvc3QgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkICAgDQotI2RlZmluZSBfX2RlcmVmX2lub3V0X2Jjb3VudF96KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfZWNvdW50KHNpemUpIF9fcHJlIF9fZGVyZWYgX19udWxsdGVybWluYXRlZCBfX3Bvc3QgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkICANCi0jZGVmaW5lIF9fZGVyZWZfaW5vdXRfbnogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dA0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF9lY291bnRfbnooc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudChzaXplKSAgIA0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF9iY291bnRfbnooc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudChzaXplKSAgIA0KLSNkZWZpbmUgX19kZXJlZl9lY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9vdXRfb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9vdXRfZWNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9vdXRfYmNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9vdXRfZWNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9vdXRfYmNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9iY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9vdXRfZWNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9vdXRfYmNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9iY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9vdXRfel9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc3QgX19kZXJlZiBfX3ZhbGlkIF9fcmVmcGFyYW0gX19leGVjZXB0dGhhdCBfX21heWJlbnVsbCBfX3Bvc3QgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkDQotI2RlZmluZSBfX2RlcmVmX291dF9lY291bnRfel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudF9vcHQoc2l6ZSkgX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZA0KLSNkZWZpbmUgX19kZXJlZl9vdXRfYmNvdW50X3pfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9iY291bnRfb3B0KHNpemUpIF9fcG9zdCBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQNCi0jZGVmaW5lIF9fZGVyZWZfb3V0X256X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfb3B0DQotI2RlZmluZSBfX2RlcmVmX291dF9lY291bnRfbnpfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudF9vcHQoc2l6ZSkNCi0jZGVmaW5lIF9fZGVyZWZfb3V0X2Jjb3VudF9uel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfYmNvdW50X29wdChzaXplKQ0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlIF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF9lY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgIF9fcHJlIF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF9iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgIF9fcHJlIF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF9lY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgIF9fcHJlIF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF9iY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Jjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgIF9fcHJlIF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF9lY291bnRfZnVsbF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgIF9fcHJlIF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF9iY291bnRfZnVsbF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Jjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgIF9fcHJlIF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF96X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X29wdCBfX3ByZSBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQgX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZA0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF9lY291bnRfel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudF9vcHQoc2l6ZSkgX19wcmUgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkIF9fcG9zdCBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQNCi0jZGVmaW5lIF9fZGVyZWZfaW5vdXRfYmNvdW50X3pfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9iY291bnRfb3B0KHNpemUpIF9fcHJlIF9fZGVyZWYgX19udWxsdGVybWluYXRlZCBfX3Bvc3QgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkDQotI2RlZmluZSBfX2RlcmVmX2lub3V0X256X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfb3B0IA0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF9lY291bnRfbnpfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudF9vcHQoc2l6ZSkNCi0jZGVmaW5lIF9fZGVyZWZfaW5vdXRfYmNvdW50X256X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9iY291bnRfb3B0KHNpemUpDQotI2RlZmluZSBfX2RlcmVmX29wdF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2RlZmluZSBfX2RlcmVmX29wdF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2RlZmluZSBfX2RlcmVmX29wdF9vdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfeiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3B0X291dCBfX3Bvc3QgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkDQotI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfZWNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfYmNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfZWNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfYmNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9lY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfZWNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9iY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfYmNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9lY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfZWNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9iY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfYmNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF96ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3B0X2lub3V0IF9fcHJlIF9fZGVyZWYgX19udWxsdGVybWluYXRlZCBfX3Bvc3QgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkDQotI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9lY291bnRfeihzaXplKSAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudChzaXplKSBfX3ByZSBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQgX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfaW5vdXRfYmNvdW50X3ooc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX29wdF9pbm91dF9iY291bnQoc2l6ZSkgX19wcmUgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkIF9fcG9zdCBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X256ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vcHRfaW5vdXQNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudF9ueihzaXplKSAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vcHRfaW5vdXRfZWNvdW50KHNpemUpDQotI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9iY291bnRfbnooc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3B0X2lub3V0X2Jjb3VudChzaXplKQ0KLSNkZWZpbmUgX19kZXJlZl9vcHRfZWNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfYmNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2Jjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X2Jjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X2Vjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X2Jjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgICAgICAgICAgICBfX2RlcmVmX291dF9iY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X2Vjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnRfZnVsbF9vcHQoc2l6ZSkgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X2Jjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9iY291bnRfZnVsbF9vcHQoc2l6ZSkgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X3pfb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc3QgX19kZXJlZiBfX3ZhbGlkIF9fcmVmcGFyYW0gX19leGNlcHR0aGF0IF9fbWF5YmVudWxsIF9fcHJlIF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbCBfX3Bvc3QgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkDQotI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfZWNvdW50X3pfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3B0X291dF9lY291bnRfb3B0KHNpemUpIF9fcG9zdCBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X291dF9iY291bnRfel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vcHRfb3V0X2Jjb3VudF9vcHQoc2l6ZSkgX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X256X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX29wdF9vdXRfb3B0DQotI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfZWNvdW50X256X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3B0X291dF9lY291bnRfb3B0KHNpemUpICAgIA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X2Jjb3VudF9uel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX29wdF9vdXRfYmNvdW50X29wdChzaXplKSAgICANCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9lY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Jjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgICAgICAgICAgX19kZXJlZl9pbm91dF9lY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Jjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgICAgICAgICAgX19kZXJlZl9pbm91dF9iY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9lY291bnRfZnVsbF9vcHQoc2l6ZSkgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Jjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9iY291bnRfZnVsbF9vcHQoc2l6ZSkgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X3pfb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vcHRfaW5vdXRfb3B0ICBfX3ByZSBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQgX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZCAgICAgICAgICAgICANCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudF96X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vcHRfaW5vdXRfZWNvdW50X29wdChzaXplKSAgX19wcmUgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkIF9fcG9zdCBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Jjb3VudF96X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vcHRfaW5vdXRfYmNvdW50X29wdChzaXplKSAgX19wcmUgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkIF9fcG9zdCBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X256X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vcHRfaW5vdXRfb3B0ICAgICAgICAgICAgICAgDQotI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9lY291bnRfbnpfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudF9vcHQoc2l6ZSkgIA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfaW5vdXRfYmNvdW50X256X29wdChzaXplKSAgICAgICAgICAgICAgICAgICBfX2RlcmVmX29wdF9pbm91dF9iY291bnRfb3B0KHNpemUpICANCi0NCi0vKg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi1BZHZhbmNlZCBBbm5vdGF0aW9uIERlZmluaXRpb25zDQotDQotQW55IG9mIHRoZXNlIG1heSBiZSB1c2VkIHRvIGRpcmVjdGx5IGFubm90YXRlIGZ1bmN0aW9ucywgYW5kIG1heSBiZSB1c2VkIGluDQotY29tYmluYXRpb24gd2l0aCBlYWNoIG90aGVyIG9yIHdpdGggcmVndWxhciBidWZmZXIgbWFjcm9zLiBGb3IgYW4gZXhwbGFuYXRpb24NCi1vZiBlYWNoIGFubm90YXRpb24sIHNlZSB0aGUgYWR2YW5jZWQgYW5ub3RhdGlvbnMgc2VjdGlvbi4NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotKi8NCi0NCi0jZGVmaW5lIF9fc3VjY2VzcyhleHByKSAgICAgICAgICAgICAgICAgICAgIF9faW5uZXJfc3VjY2VzcyhleHByKQ0KLSNkZWZpbmUgX19udWxsdGVybWluYXRlZCAgICAgICAgICAgICAgICAgICAgX19yZWFkYWJsZVRvKHNlbnRpbmVsKDApKQ0KLSNkZWZpbmUgX19udWxsbnVsbHRlcm1pbmF0ZWQNCi0jZGVmaW5lIF9fcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlIF9fbnVsbA0KLSNkZWZpbmUgX19jaGVja1JldHVybiAgICAgICAgICAgICAgICAgICAgICAgX19pbm5lcl9jaGVja1JldHVybg0KLSNkZWZpbmUgX190eXBlZml4KGN0eXBlKSAgICAgICAgICAgICAgICAgICAgX19pbm5lcl90eXBlZml4KGN0eXBlKQ0KLSNkZWZpbmUgX19vdmVycmlkZSAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm5lcl9vdmVycmlkZQ0KLSNkZWZpbmUgX19jYWxsYmFjayAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm5lcl9jYWxsYmFjaw0KLSNkZWZpbmUgX19mb3JtYXRfc3RyaW5nDQotI2RlZmluZSBfX2Jsb2Nrc09uKHJlc291cmNlKSAgICAgICAgICAgICAgICBfX2lubmVyX2Jsb2Nrc09uKHJlc291cmNlKQ0KLSNkZWZpbmUgX19jb250cm9sX2VudHJ5cG9pbnQoY2F0ZWdvcnkpICAgICAgX19pbm5lcl9jb250cm9sX2VudHJ5cG9pbnQoY2F0ZWdvcnkpDQotI2RlZmluZSBfX2RhdGFfZW50cnlwb2ludChjYXRlZ29yeSkgICAgICAgICBfX2lubmVyX2RhdGFfZW50cnlwb2ludChjYXRlZ29yeSkNCi0NCi0jaWZuZGVmIF9fZmFsbHRocm91Z2gNCi0gICAgX19pbm5lcl9mYWxsdGhyb3VnaF9kZWMNCi0gICAgI2RlZmluZSBfX2ZhbGx0aHJvdWdoIF9faW5uZXJfZmFsbHRocm91Z2gNCi0jZW5kaWYNCi0NCi0jaWZuZGVmIF9fYW5hbHlzaXNfYXNzdW1lDQotI2lmZGVmIF9QUkVGQVNUXw0KLSNkZWZpbmUgX19hbmFseXNpc19hc3N1bWUoZXhwcikgX19hc3N1bWUoZXhwcikNCi0jZWxzZQ0KLSNkZWZpbmUgX19hbmFseXNpc19hc3N1bWUoZXhwcikgDQotI2VuZGlmDQotI2VuZGlmDQotDQotI2lmZGVmICBfX2NwbHVzcGx1cw0KLX0NCi0jZW5kaWYNCi0NCi0NCisvKioqCisqc2FsLmggLSBtYXJrZXJzIGZvciBkb2N1bWVudGluZyB0aGUgc2VtYW50aWNzIG9mIEFQSXMKKyoKKyogICAgICAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqUHVycG9zZToKKyogICAgICAgc2FsLmggcHJvdmlkZXMgYSBzZXQgb2YgYW5ub3RhdGlvbnMgdG8gZGVzY3JpYmUgaG93IGEgZnVuY3Rpb24gdXNlcyBpdHMKKyogICAgICAgcGFyYW1ldGVycyAtIHRoZSBhc3N1bXB0aW9ucyBpdCBtYWtlcyBhYm91dCB0aGVtLCBhbmQgdGhlIGd1YXJhbnRlZXMgaXQgbWFrZXMKKyogICAgICAgdXBvbiBmaW5pc2hpbmcuCisqCisqICAgICAgIFtQdWJsaWNdCisqCisqKioqLworCisvKiAKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW50cm9kdWN0aW9uCisKKyBzYWwuaCBwcm92aWRlcyBhIHNldCBvZiBhbm5vdGF0aW9ucyB0byBkZXNjcmliZSBob3cgYSBmdW5jdGlvbiB1c2VzIGl0cworIHBhcmFtZXRlcnMgLSB0aGUgYXNzdW1wdGlvbnMgaXQgbWFrZXMgYWJvdXQgdGhlbSwgYW5kIHRoZSBndWFyYW50ZWVzIGl0IG1ha2VzCisgdXBvbiBmaW5pc2hpbmcuCisKKyBBbm5vdGF0aW9ucyBtYXkgYmUgcGxhY2VkIGJlZm9yZSBlaXRoZXIgYSBmdW5jdGlvbiBwYXJhbWV0ZXIncyB0eXBlIG9yIGl0cyByZXR1cm4KKyB0eXBlLCBhbmQgZGVzY3JpYmUgdGhlIGZ1bmN0aW9uJ3MgYmVoYXZpb3IgcmVnYXJkaW5nIHRoZSBwYXJhbWV0ZXIgb3IgcmV0dXJuIHZhbHVlLgorIFRoZXJlIGFyZSB0d28gY2xhc3NlcyBvZiBhbm5vdGF0aW9uczogYnVmZmVyIGFubm90YXRpb25zIGFuZCBhZHZhbmNlZCBhbm5vdGF0aW9ucy4KKyBCdWZmZXIgYW5ub3RhdGlvbnMgZGVzY3JpYmUgaG93IGZ1bmN0aW9ucyB1c2UgdGhlaXIgcG9pbnRlciBwYXJhbWV0ZXJzLCBhbmQKKyBhZHZhbmNlZCBhbm5vdGF0aW9ucyBlaXRoZXIgZGVzY3JpYmUgY29tcGxleC91bnVzdWFsIGJ1ZmZlciBiZWhhdmlvciwgb3IgcHJvdmlkZQorIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJhbWV0ZXIgdGhhdCBpcyBub3Qgb3RoZXJ3aXNlIGV4cHJlc3NpYmxlLgorCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJ1ZmZlciBBbm5vdGF0aW9ucworCisgVGhlIG1vc3QgaW1wb3J0YW50IGFubm90YXRpb25zIGluIHNhbC5oIHByb3ZpZGUgYSBjb25zaXN0ZW50IHdheSB0byBhbm5vdGF0ZQorIGJ1ZmZlciBwYXJhbWV0ZXJzIG9yIHJldHVybiB2YWx1ZXMgZm9yIGEgZnVuY3Rpb24uIEVhY2ggb2YgdGhlc2UgYW5ub3RhdGlvbnMgZGVzY3JpYmVzCisgYSBzaW5nbGUgYnVmZmVyICh3aGljaCBjb3VsZCBiZSBhIHN0cmluZywgYSBmaXhlZC1sZW5ndGggb3IgdmFyaWFibGUtbGVuZ3RoIGFycmF5LAorIG9yIGp1c3QgYSBwb2ludGVyKSB0aGF0IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aDogd2hlcmUgaXQgaXMsIGhvdyBsYXJnZSBpdCBpcywKKyBob3cgbXVjaCBpcyBpbml0aWFsaXplZCwgYW5kIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMgd2l0aCBpdC4KKworIFRoZSBhcHByb3ByaWF0ZSBtYWNybyBmb3IgYSBnaXZlbiBidWZmZXIgY2FuIGJlIGNvbnN0cnVjdGVkIHVzaW5nIHRoZSB0YWJsZSBiZWxvdy4KKyBKdXN0IHBpY2sgdGhlIGFwcHJvcHJpYXRlIHZhbHVlcyBmcm9tIGVhY2ggY2F0ZWdvcnksIGFuZCBjb21iaW5lIHRoZW0gdG9nZXRoZXIKKyB3aXRoIGEgbGVhZGluZyB1bmRlcnNjb3JlLiBTb21lIGNvbWJpbmF0aW9ucyBvZiB2YWx1ZXMgZG8gbm90IG1ha2Ugc2Vuc2UgYXMgYnVmZmVyCisgYW5ub3RhdGlvbnMuIE9ubHkgbWVhbmluZ2Z1bCBhbm5vdGF0aW9ucyBjYW4gYmUgYWRkZWQgdG8geW91ciBjb2RlOyBmb3IgYSBsaXN0IG9mCisgdGhlc2UsIHNlZSB0aGUgYnVmZmVyIGFubm90YXRpb24gZGVmaW5pdGlvbnMgc2VjdGlvbi4KKworIE9ubHkgYSBzaW5nbGUgYnVmZmVyIGFubm90YXRpb24gc2hvdWxkIGJlIHVzZWQgZm9yIGVhY2ggcGFyYW1ldGVyLgorCisgfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS18CisgfCAgIExldmVsICAgIHwgICBVc2FnZSAgICB8ICBTaXplICAgfCBPdXRwdXQgfCBOdWxsVGVybSB8IE9wdGlvbmFsIHwgIFBhcmFtZXRlcnMgICB8CisgfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS18CisgfCA8PiAgICAgICAgIHwgPD4gICAgICAgICB8IDw+ICAgICAgfCA8PiAgICAgfCBfeiAgICAgICB8IDw+ICAgICAgIHwgPD4gICAgICAgICAgICB8CisgfCBfZGVyZWYgICAgIHwgX2luICAgICAgICB8IF9lY291bnQgfCBfZnVsbCAgfCBfbnogICAgICB8IF9vcHQgICAgIHwgKHNpemUpICAgICAgICB8CisgfCBfZGVyZWZfb3B0IHwgX291dCAgICAgICB8IF9iY291bnQgfCBfcGFydCAgfCAgICAgICAgICB8ICAgICAgICAgIHwgKHNpemUsbGVuZ3RoKSB8CisgfCAgICAgICAgICAgIHwgX2lub3V0ICAgICB8ICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICB8CisgfCAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICB8CisgfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS18CisKKyBMZXZlbDogRGVzY3JpYmVzIHRoZSBidWZmZXIgcG9pbnRlcidzIGxldmVsIG9mIGluZGlyZWN0aW9uIGZyb20gdGhlIHBhcmFtZXRlciBvcgorICAgICAgICAgIHJldHVybiB2YWx1ZSAncCcuCisKKyA8PiAgICAgICAgIDogcCBpcyB0aGUgYnVmZmVyIHBvaW50ZXIuCisgX2RlcmVmICAgICA6ICpwIGlzIHRoZSBidWZmZXIgcG9pbnRlci4gcCBtdXN0IG5vdCBiZSBOVUxMLgorIF9kZXJlZl9vcHQgOiAqcCBtYXkgYmUgdGhlIGJ1ZmZlciBwb2ludGVyLiBwIG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIHRoZSByZXN0IG9mCisgICAgICAgICAgICAgICAgdGhlIGFubm90YXRpb24gaXMgaWdub3JlZC4KKworIFVzYWdlOiBEZXNjcmliZXMgaG93IHRoZSBmdW5jdGlvbiB1c2VzIHRoZSBidWZmZXIuCisKKyA8PiAgICAgOiBUaGUgYnVmZmVyIGlzIG5vdCBhY2Nlc3NlZC4gSWYgdXNlZCBvbiB0aGUgcmV0dXJuIHZhbHVlIG9yIHdpdGggX2RlcmVmLCB0aGUKKyAgICAgICAgICAgIGZ1bmN0aW9uIHdpbGwgcHJvdmlkZSB0aGUgYnVmZmVyLCBhbmQgaXQgd2lsbCBiZSB1bmluaXRpYWxpemVkIGF0IGV4aXQuCisgICAgICAgICAgICBPdGhlcndpc2UsIHRoZSBjYWxsZXIgbXVzdCBwcm92aWRlIHRoZSBidWZmZXIuIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZAorICAgICAgICAgICAgZm9yIGFsbG9jIGFuZCBmcmVlIGZ1bmN0aW9ucy4KKyBfaW4gICAgOiBUaGUgZnVuY3Rpb24gd2lsbCBvbmx5IHJlYWQgZnJvbSB0aGUgYnVmZmVyLiBUaGUgY2FsbGVyIG11c3QgcHJvdmlkZSB0aGUKKyAgICAgICAgICAgIGJ1ZmZlciBhbmQgaW5pdGlhbGl6ZSBpdC4gQ2Fubm90IGJlIHVzZWQgd2l0aCBfZGVyZWYuCisgX291dCAgIDogVGhlIGZ1bmN0aW9uIHdpbGwgb25seSB3cml0ZSB0byB0aGUgYnVmZmVyLiBJZiB1c2VkIG9uIHRoZSByZXR1cm4gdmFsdWUgb3IKKyAgICAgICAgICAgIHdpdGggX2RlcmVmLCB0aGUgZnVuY3Rpb24gd2lsbCBwcm92aWRlIHRoZSBidWZmZXIgYW5kIGluaXRpYWxpemUgaXQuCisgICAgICAgICAgICBPdGhlcndpc2UsIHRoZSBjYWxsZXIgbXVzdCBwcm92aWRlIHRoZSBidWZmZXIsIGFuZCB0aGUgZnVuY3Rpb24gd2lsbAorICAgICAgICAgICAgaW5pdGlhbGl6ZSBpdC4KKyBfaW5vdXQgOiBUaGUgZnVuY3Rpb24gbWF5IGZyZWVseSByZWFkIGZyb20gYW5kIHdyaXRlIHRvIHRoZSBidWZmZXIuIFRoZSBjYWxsZXIgbXVzdAorICAgICAgICAgICAgcHJvdmlkZSB0aGUgYnVmZmVyIGFuZCBpbml0aWFsaXplIGl0LiBJZiB1c2VkIHdpdGggX2RlcmVmLCB0aGUgYnVmZmVyIG1heQorICAgICAgICAgICAgYmUgcmVhbGxvY2F0ZWQgYnkgdGhlIGZ1bmN0aW9uLgorCisgU2l6ZTogRGVzY3JpYmVzIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBidWZmZXIuIFRoaXMgbWF5IGJlIGxlc3MgdGhhbiB0aGUgc3BhY2UgYWN0dWFsbHkKKyAgICAgICAgIGFsbG9jYXRlZCBmb3IgdGhlIGJ1ZmZlciwgaW4gd2hpY2ggY2FzZSBpdCBkZXNjcmliZXMgdGhlIGFjY2Vzc2libGUgYW1vdW50LgorCisgPD4gICAgICA6IE5vIGJ1ZmZlciBzaXplIGlzIGdpdmVuLiBJZiB0aGUgdHlwZSBzcGVjaWZpZXMgdGhlIGJ1ZmZlciBzaXplIChzdWNoIGFzCisgICAgICAgICAgICAgd2l0aCBMUFNUUiBhbmQgTFBXU1RSKSwgdGhhdCBhbW91bnQgaXMgdXNlZC4gT3RoZXJ3aXNlLCB0aGUgYnVmZmVyIGlzIG9uZQorICAgICAgICAgICAgIGVsZW1lbnQgbG9uZy4gTXVzdCBiZSB1c2VkIHdpdGggX2luLCBfb3V0LCBvciBfaW5vdXQuCisgX2Vjb3VudCA6IFRoZSBidWZmZXIgc2l6ZSBpcyBhbiBleHBsaWNpdCBlbGVtZW50IGNvdW50LgorIF9iY291bnQgOiBUaGUgYnVmZmVyIHNpemUgaXMgYW4gZXhwbGljaXQgYnl0ZSBjb3VudC4KKworIE91dHB1dDogRGVzY3JpYmVzIGhvdyBtdWNoIG9mIHRoZSBidWZmZXIgd2lsbCBiZSBpbml0aWFsaXplZCBieSB0aGUgZnVuY3Rpb24uIEZvcgorICAgICAgICAgICBfaW5vdXQgYnVmZmVycywgdGhpcyBhbHNvIGRlc2NyaWJlcyBob3cgbXVjaCBpcyBpbml0aWFsaXplZCBhdCBlbnRyeS4gT21pdCB0aGlzCisgICAgICAgICAgIGNhdGVnb3J5IGZvciBfaW4gYnVmZmVyczsgdGhleSBtdXN0IGJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IHRoZSBjYWxsZXIuCisKKyA8PiAgICA6IFRoZSB0eXBlIHNwZWNpZmllcyBob3cgbXVjaCBpcyBpbml0aWFsaXplZC4gRm9yIGluc3RhbmNlLCBhIGZ1bmN0aW9uIGluaXRpYWxpemluZworICAgICAgICAgICBhbiBMUFdTVFIgbXVzdCBOVUxMLXRlcm1pbmF0ZSB0aGUgc3RyaW5nLgorIF9mdWxsIDogVGhlIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBlbnRpcmUgYnVmZmVyLgorIF9wYXJ0IDogVGhlIGZ1bmN0aW9uIGluaXRpYWxpemVzIHBhcnQgb2YgdGhlIGJ1ZmZlciwgYW5kIGV4cGxpY2l0bHkgaW5kaWNhdGVzIGhvdyBtdWNoLgorCisgTnVsbFRlcm06IFN0YXRlcyBpZiB0aGUgcHJlc2VudCBvZiBhICdcMCcgbWFya3MgdGhlIGVuZCBvZiB2YWxpZCBlbGVtZW50cyBpbiB0aGUgYnVmZmVyLgorIF96ICAgIDogQSAnXDAnIGluZGljYXRlZCB0aGUgZW5kIG9mIHRoZSBidWZmZXIKKyBfbnoJIDogVGhlIGJ1ZmZlciBtYXkgbm90IGJlIG51bGwgdGVybWluYXRlZCBhbmQgYSAnXDAnIGRvZXMgbm90IGluZGljYXRlIHRoZSBlbmQgb2YgdGhlCisgICAgICAgICAgYnVmZmVyLgorIE9wdGlvbmFsOiBEZXNjcmliZXMgaWYgdGhlIGJ1ZmZlciBpdHNlbGYgaXMgb3B0aW9uYWwuCisKKyA8PiAgIDogVGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBtdXN0IG5vdCBiZSBOVUxMLgorIF9vcHQgOiBUaGUgcG9pbnRlciB0byB0aGUgYnVmZmVyIG1pZ2h0IGJlIE5VTEwuIEl0IHdpbGwgYmUgY2hlY2tlZCBiZWZvcmUgYmVpbmcgZGVyZWZlcmVuY2VkLgorCisgUGFyYW1ldGVyczogR2l2ZXMgZXhwbGljaXQgY291bnRzIGZvciB0aGUgc2l6ZSBhbmQgbGVuZ3RoIG9mIHRoZSBidWZmZXIuCisKKyA8PiAgICAgICAgICAgIDogVGhlcmUgaXMgbm8gZXhwbGljaXQgY291bnQuIFVzZSB3aGVuIG5laXRoZXIgX2Vjb3VudCBub3IgX2Jjb3VudCBpcyB1c2VkLgorIChzaXplKSAgICAgICAgOiBPbmx5IHRoZSBidWZmZXIncyB0b3RhbCBzaXplIGlzIGdpdmVuLiBVc2Ugd2l0aCBfZWNvdW50IG9yIF9iY291bnQgYnV0IG5vdCBfcGFydC4KKyAoc2l6ZSxsZW5ndGgpIDogVGhlIGJ1ZmZlcidzIHRvdGFsIHNpemUgYW5kIGluaXRpYWxpemVkIGxlbmd0aCBhcmUgZ2l2ZW4uIFVzZSB3aXRoIF9lY291bnRfcGFydAorICAgICAgICAgICAgICAgICAgIGFuZCBfYmNvdW50X3BhcnQuCisKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQnVmZmVyIEFubm90YXRpb24gRXhhbXBsZXMKKworIExXU1REQVBJXyhCT09MKSBTdHJUb0ludEV4QSgKKyAgICAgTFBDU1RSIHBzelN0cmluZywgICAgICAgICAgICAgICAgICAgIC0tIE5vIGFubm90YXRpb24gcmVxdWlyZWQsIGNvbnN0IGltcGxpZXMgX19pbi4KKyAgICAgRFdPUkQgZHdGbGFncywKKyAgICAgX19vdXQgaW50ICpwaVJldCAgICAgICAgICAgICAgICAgICAgIC0tIEEgcG9pbnRlciB3aG9zZSBkZXJlZmVyZW5jZSB3aWxsIGJlIGZpbGxlZCBpbi4KKyApOworCisgdm9pZCBNeVBhaW50aW5nRnVuY3Rpb24oCisgICAgIF9faW4gSFdORCBod25kQ29udHJvbCwgICAgICAgICAgICAgICAtLSBBbiBpbml0aWFsaXplZCByZWFkLW9ubHkgcGFyYW1ldGVyLgorICAgICBfX2luX29wdCBIREMgaGRjT3B0aW9uYWwsICAgICAgICAgICAgLS0gQW4gaW5pdGlhbGl6ZWQgcmVhZC1vbmx5IHBhcmFtZXRlciB0aGF0IG1pZ2h0IGJlIE5VTEwuCisgICAgIF9faW5vdXQgSVByb3BlcnR5U3RvcmUgKnBwc1N0b3JlICAgICAtLSBBbiBpbml0aWFsaXplZCBwYXJhbWV0ZXIgdGhhdCBtYXkgYmUgZnJlZWx5IHVzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICAgYW5kIG1vZGlmaWVkLgorICk7CisKKyBMV1NUREFQSV8oQk9PTCkgUGF0aENvbXBhY3RQYXRoRXhBKAorICAgICBfX291dF9lY291bnQoY2NoTWF4KSBMUFNUUiBwc3pPdXQsICAgLS0gQSBzdHJpbmcgYnVmZmVyIHdpdGggY2NoIGVsZW1lbnRzIHRoYXQgd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gICBiZSBOVUxMIHRlcm1pbmF0ZWQgb24gZXhpdC4KKyAgICAgTFBDU1RSIHBzelNyYywgICAgICAgICAgICAgICAgICAgICAgIC0tIE5vIGFubm90YXRpb24gcmVxdWlyZWQsIGNvbnN0IGltcGxpZXMgX19pbi4KKyAgICAgVUlOVCBjY2hNYXgsCisgICAgIERXT1JEIGR3RmxhZ3MKKyApOworCisgSFJFU1VMVCBTSExvY2FsQWxsb2NCeXRlcygKKyAgICAgc2l6ZV90IGNiLAorICAgICBfX2RlcmVmX2Jjb3VudChjYikgVCAqKnBwdiAgICAgICAgICAgLS0gQSBwb2ludGVyIHdob3NlIGRlcmVmZXJlbmNlIHdpbGwgYmUgc2V0IHRvIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIHdpdGggY2IgYnl0ZXMuCisgKTsKKworIF9faW5vdXRfYmNvdW50X2Z1bGwoY2IpIDogQSBidWZmZXIgd2l0aCBjYiBlbGVtZW50cyB0aGF0IGlzIGZ1bGx5IGluaXRpYWxpemVkIGF0CisgICAgIGVudHJ5IGFuZCBleGl0LCBhbmQgbWF5IGJlIHdyaXR0ZW4gdG8gYnkgdGhpcyBmdW5jdGlvbi4KKworIF9fb3V0X2Vjb3VudF9wYXJ0KGNvdW50LCAqY291bnRPdXQpIDogQSBidWZmZXIgd2l0aCBjb3VudCBlbGVtZW50cyB0aGF0IHdpbGwgYmUKKyAgICAgcGFydGlhbGx5IGluaXRpYWxpemVkIGJ5IHRoaXMgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBpbmRpY2F0ZXMgaG93IG11Y2ggaXQKKyAgICAgaW5pdGlhbGl6ZWQgYnkgc2V0dGluZyAqY291bnRPdXQuCisKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWR2YW5jZWQgQW5ub3RhdGlvbnMKKworIEFkdmFuY2VkIGFubm90YXRpb25zIGRlc2NyaWJlIGJlaGF2aW9yIHRoYXQgaXMgbm90IGV4cHJlc3NpYmxlIHdpdGggdGhlIHJlZ3VsYXIKKyBidWZmZXIgbWFjcm9zLiBUaGVzZSBtYXkgYmUgdXNlZCBlaXRoZXIgdG8gYW5ub3RhdGUgYnVmZmVyIHBhcmFtZXRlcnMgdGhhdCBpbnZvbHZlCisgY29tcGxleCBvciBjb25kaXRpb25hbCBiZWhhdmlvciwgb3IgdG8gZW5yaWNoIGV4aXN0aW5nIGFubm90YXRpb25zIHdpdGggYWRkaXRpb25hbAorIGluZm9ybWF0aW9uLgorCisgX19zdWNjZXNzKGV4cHIpIGYgOgorICAgICA8ZXhwcj4gaW5kaWNhdGVzIHdoZXRoZXIgZnVuY3Rpb24gZiBzdWNjZWVkZWQgb3Igbm90LiBJZiA8ZXhwcj4gaXMgdHJ1ZSBhdCBleGl0LAorICAgICBhbGwgdGhlIGZ1bmN0aW9uJ3MgZ3VhcmFudGVlcyAoYXMgZ2l2ZW4gYnkgb3RoZXIgYW5ub3RhdGlvbnMpIG11c3QgaG9sZC4gSWYgPGV4cHI+CisgICAgIGlzIGZhbHNlIGF0IGV4aXQsIHRoZSBjYWxsZXIgc2hvdWxkIG5vdCBleHBlY3QgYW55IG9mIHRoZSBmdW5jdGlvbidzIGd1YXJhbnRlZXMKKyAgICAgdG8gaG9sZC4gSWYgbm90IHVzZWQsIHRoZSBmdW5jdGlvbiBtdXN0IGFsd2F5cyBzYXRpc2Z5IGl0cyBndWFyYW50ZWVzLiBBZGRlZAorICAgICBhdXRvbWF0aWNhbGx5IHRvIGZ1bmN0aW9ucyB0aGF0IGluZGljYXRlIHN1Y2Nlc3MgaW4gc3RhbmRhcmQgd2F5cywgc3VjaCBhcyBieQorICAgICByZXR1cm5pbmcgYW4gSFJFU1VMVC4KKworIF9fbnVsbHRlcm1pbmF0ZWQgcCA6CisgICAgIFBvaW50ZXIgcCBpcyBhIGJ1ZmZlciB0aGF0IG1heSBiZSByZWFkIG9yIHdyaXR0ZW4gdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgZmlyc3QKKyAgICAgTlVMTCBjaGFyYWN0ZXIgb3IgcG9pbnRlci4gTWF5IGJlIHVzZWQgb24gdHlwZWRlZnMsIHdoaWNoIG1hcmtzIHZhbGlkIChwcm9wZXJseQorICAgICBpbml0aWFsaXplZCkgaW5zdGFuY2VzIG9mIHRoYXQgdHlwZSBhcyBiZWluZyBOVUxMLXRlcm1pbmF0ZWQuCisKKyBfX251bGxudWxsdGVybWluYXRlZCBwIDoKKyAgICAgUG9pbnRlciBwIGlzIGEgYnVmZmVyIHRoYXQgbWF5IGJlIHJlYWQgb3Igd3JpdHRlbiB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBmaXJzdAorICAgICBzZXF1ZW5jZSBvZiB0d28gTlVMTCBjaGFyYWN0ZXJzIG9yIHBvaW50ZXJzLiBNYXkgYmUgdXNlZCBvbiB0eXBlZGVmcywgd2hpY2ggbWFya3MKKyAgICAgdmFsaWQgaW5zdGFuY2VzIG9mIHRoYXQgdHlwZSBhcyBiZWluZyBkb3VibGUtTlVMTCB0ZXJtaW5hdGVkLgorCisgX19yZXNlcnZlZCB2IDoKKyAgICAgVmFsdWUgdiBtdXN0IGJlIDAvTlVMTCwgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCisKKyBfX2NoZWNrUmV0dXJuIHYgOgorICAgICBSZXR1cm4gdmFsdWUgdiBtdXN0IG5vdCBiZSBpZ25vcmVkIGJ5IGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbi4KKworIF9fdHlwZWZpeChjdHlwZSkgdiA6CisgICAgIFZhbHVlIHYgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5zdGFuY2Ugb2YgY3R5cGUsIHJhdGhlciB0aGFuIGl0cyBkZWNsYXJlZCB0eXBlLgorCisgX19vdmVycmlkZSBmIDoKKyAgICAgU3BlY2lmeSBDIy1zdHlsZSAnb3ZlcnJpZGUnIGJlaGF2aW91ciBmb3Igb3ZlcnJpZGluZyB2aXJ0dWFsIG1ldGhvZHMuCisKKyBfX2NhbGxiYWNrIGYgOgorICAgICBGdW5jdGlvbiBmIGNhbiBiZSB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4KKworIF9fZm9ybWF0X3N0cmluZyBwIDoKKyAgICAgUG9pbnRlciBwIGlzIGEgc3RyaW5nIHRoYXQgY29udGFpbnMgJSBtYXJrZXJzIGluIHRoZSBzdHlsZSBvZiBwcmludGYuCisKKyBfX2Jsb2Nrc09uKHJlc291cmNlKSBmIDoKKyAgICAgRnVuY3Rpb24gZiBibG9ja3Mgb24gdGhlIHJlc291cmNlICdyZXNvdXJjZScuCisKKyBfX2ZhbGx0aHJvdWdoIDoKKyAgICAgQW5ub3RhdGVzIHN3aXRjaCBzdGF0ZW1lbnQgbGFiZWxzIHdoZXJlIGZhbGwtdGhyb3VnaCBpcyBkZXNpcmVkLCB0byBkaXN0aW5ndWlzaAorICAgICBmcm9tIGZvcmdvdHRlbiBicmVhayBzdGF0ZW1lbnRzLgorCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFkdmFuY2VkIEFubm90YXRpb24gRXhhbXBsZXMKKworIF9fc3VjY2VzcyhyZXR1cm4gPT0gVFJVRSkgTFdTVERBUElfKEJPT0wpIAorIFBhdGhDYW5vbmljYWxpemVBKF9fb3V0X2Vjb3VudChNQVhfUEFUSCkgTFBTVFIgcHN6QnVmLCBMUENTVFIgcHN6UGF0aCkgOgorICAgICBwc3pCdWYgaXMgb25seSBndWFyYW50ZWVkIHRvIGJlIE5VTEwtdGVybWluYXRlZCB3aGVuIFRSVUUgaXMgcmV0dXJuZWQuCisKKyB0eXBlZGVmIF9fbnVsbHRlcm1pbmF0ZWQgV0NIQVIqIExQV1NUUiA6IEluaXRpYWxpemVkIExQV1NUUnMgYXJlIE5VTEwtdGVybWluYXRlZCBzdHJpbmdzLgorCisgX19vdXRfZWNvdW50KGNjaCkgX190eXBlZml4KExQV1NUUikgdm9pZCAqcHN6IDogcHN6IGlzIGEgYnVmZmVyIHBhcmFtZXRlciB3aGljaCB3aWxsIGJlCisgICAgIGEgTlVMTC10ZXJtaW5hdGVkIFdDSEFSIHN0cmluZyBhdCBleGl0LCBhbmQgd2hpY2ggaW5pdGlhbGx5IGNvbnRhaW5zIGNjaCBXQ0hBUnMuCisKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjcHJhZ21hIG9uY2UKKworI2RlZmluZSBfX3NwZWNzdHJpbmdzCisKKyNpZmRlZiAgX19jcGx1c3BsdXMKKyNpZm5kZWYgX19ub3Rocm93CisjIGRlZmluZSBfX25vdGhyb3cgX19kZWNsc3BlYyhub3Rocm93KQorI2VuZGlmCitleHRlcm4gIkMiIHsKKyNlbHNlCisjaWZuZGVmIF9fbm90aHJvdworIyBkZWZpbmUgX19ub3Rocm93CisjZW5kaWYKKyNlbmRpZiAgLyogI2lmZGVmIF9fY3BsdXNwbHVzICovCisKKy8qCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhlbHBlciBNYWNybyBEZWZpbml0aW9ucworCisgVGhlc2UgZXhwcmVzcyBiZWhhdmlvciBjb21tb24gdG8gbWFueSBvZiB0aGUgaGlnaC1sZXZlbCBhbm5vdGF0aW9ucy4KKyBETyBOT1QgVVNFIFRIRVNFIElOIFlPVVIgQ09ERS4KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisvKgorVGhlIGhlbHBlciBhbm5vdGF0aW9ucyBhcmUgb25seSB1bmRlcnN0b29kIGJ5IHRoZSBjb21waWxlciB2ZXJzaW9uIHVzZWQgYnkgdmFyaW91cworZGVmZWN0IGRldGVjdGlvbiB0b29scy4gV2hlbiB0aGUgcmVndWxhciBjb21waWxlciBpcyBydW5uaW5nLCB0aGV5IGFyZSBkZWZpbmVkIGludG8KK25vdGhpbmcsIGFuZCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBjb2RlLgorKi8KKworI2lmICFkZWZpbmVkKF9fbWlkbCkgJiYgZGVmaW5lZChfUFJFRkFTVF8pIAorCisgICAgLyoKKyAgICAgSW4gdGhlIHByaW1pdGl2ZSBfX2RlY2xzcGVjKCJTQUxfKiIpIGFubm90YXRpb25zICJTQUwiIHN0YW5kcyBmb3IgU3RhbmRhcmQKKyAgICAgQW5ub3RhdGlvbiBMYW5ndWFnZS4gIFRoZXNlIF9fZGVjbHNwZWMoIlNBTF8qIikgYW5ub3RhdGlvbnMgYXJlIHRoZQorICAgICBwcmltaXRpdmVzIHRoZSBjb21waWxlciB1bmRlcnN0YW5kcyBhbmQgYWxsIGhpZ2gtbGV2ZWwgU3BlY1N0cmluZyBNQUNST3MKKyAgICAgd2lsbCBkZWNvbXBvc2UgaW50byB0aGVzZSBwcmltaXZhdGVzLgorICAgICovCisKKyAgICAjZGVmaW5lIFNQRUNTVFJJTkdJWkUoIHggKSAjeAorCisgICAgLyoKKyAgICAgX19udWxsIHAKKyAgICAgX19ub3RudWxsIHAKKyAgICAgX19tYXliZW51bGwgcAorICAgIAorICAgICBBbm5vdGF0ZXMgYSBwb2ludGVyIHAuIFN0YXRlcyB0aGF0IHBvaW50ZXIgcCBpcyBudWxsLiBDb21tb25seSB1c2VkCisgICAgIGluIHRoZSBuZWdhdGVkIGZvcm0gX19ub3RudWxsIG9yIHRoZSBwb3NzaWJseSBudWxsIGZvcm0gX19tYXliZW51bGwuCisgICAgKi8KKworICAgICNkZWZpbmUgX19udWxsICAgICAgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX251bGwiKQorICAgICNkZWZpbmUgX19ub3RudWxsICAgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX25vdG51bGwiKQorICAgICNkZWZpbmUgX19tYXliZW51bGwgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX21heWJlbnVsbCIpCisKKyAgICAvKgorICAgICBfX3JlYWRvbmx5IGwKKyAgICAgX19ub3RyZWFkb25seSBsCisgICAgIF9fbWFieWVyZWFkb25seSBsCisgICAgCisgICAgIEFubm90YXRlcyBhIGxvY2F0aW9uIGwuIFN0YXRlcyB0aGF0IGxvY2F0aW9uIGwgaXMgbm90IG1vZGlmaWVkIGFmdGVyCisgICAgIHRoaXMgcG9pbnQuICBJZiB0aGUgYW5ub3RhdGlvbiBpcyBwbGFjZWQgb24gdGhlIHByZWNvbmRpdGlvbiBzdGF0ZSBvZgorICAgICBhIGZ1bmN0aW9uLCB0aGUgcmVzdHJpY3Rpb24gb25seSBhcHBsaWVzIHVudGlsIHRoZSBwb3N0Y29uZGl0aW9uIHN0YXRlCisgICAgIG9mIHRoZSBmdW5jdGlvbi4gIF9fbWF5YmVyZWFkb25seSBzdGF0ZXMgdGhhdCB0aGUgYW5ub3RhdGVkIGxvY2F0aW9uCisgICAgIG1heSBiZSBtb2RpZmllZCwgd2hlcmVhcyBfX25vdHJlYWRvbmx5IHN0YXRlcyB0aGF0IGEgbG9jYXRpb24gbXVzdCBiZQorICAgICBtb2RpZmllZC4KKyAgICAqLworCisgICAgI2RlZmluZSBfX3JlYWRvbmx5ICAgICAgICAgICAgICBfX2RlY2xzcGVjKCJTQUxfcmVhZG9ubHkiKQorICAgICNkZWZpbmUgX19ub3RyZWFkb25seSAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX25vdHJlYWRvbmx5IikKKyAgICAjZGVmaW5lIF9fbWF5YmVyZWFkb25seSAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF9tYXliZXJlYWRvbmx5IikKKworICAgIC8qCisgICAgIF9fdmFsaWQgdgorICAgICBfX25vdHZhbGlkIHYKKyAgICAgX19tYXliZXZhbGlkIHYKKyAgICAKKyAgICAgQW5ub3RhdGVzIGFueSB2YWx1ZSB2LiBTdGF0ZXMgdGhhdCB0aGUgdmFsdWUgc2F0aXNmaWVzIGFsbCBwcm9wZXJ0aWVzIG9mCisgICAgIHZhbGlkIHZhbHVlcyBvZiBpdHMgdHlwZS4gRm9yIGV4YW1wbGUsIGZvciBhIHN0cmluZyBidWZmZXIsIHZhbGlkIG1lYW5zCisgICAgIHRoYXQgdGhlIGJ1ZmZlciBwb2ludGVyIGlzIGVpdGhlciBOVUxMIG9yIHBvaW50cyB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcuCisgICAgKi8KKworICAgICNkZWZpbmUgX192YWxpZCAgICAgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX3ZhbGlkIikKKyAgICAjZGVmaW5lIF9fbm90dmFsaWQgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF9ub3R2YWxpZCIpCisgICAgI2RlZmluZSBfX21heWJldmFsaWQgICAgICAgICAgICBfX2RlY2xzcGVjKCJTQUxfbWF5YmV2YWxpZCIpCisKKyAgICAvKgorICAgICBfX3JlYWRhYmxlVG8oZXh0ZW50KSBwCisgICAgCisgICAgIEFubm90YXRlcyBhIGJ1ZmZlciBwb2ludGVyIHAuICBJZiB0aGUgYnVmZmVyIGNhbiBiZSByZWFkLCBleHRlbnQgZGVzY3JpYmVzCisgICAgIGhvdyBtdWNoIG9mIHRoZSBidWZmZXIgaXMgcmVhZGFibGUuIEZvciBhIHJlYWRlciBvZiB0aGUgYnVmZmVyLCB0aGlzIGlzCisgICAgIGFuIGV4cGxpY2l0IHBlcm1pc3Npb24gdG8gcmVhZCB1cCB0byB0aGF0IGFtb3VudCwgcmF0aGVyIHRoYW4gYSByZXN0cmljdGlvbiB0bworICAgICByZWFkIG9ubHkgdXAgdG8gaXQuCisgICAgKi8KKworICAgICNkZWZpbmUgX19yZWFkYWJsZVRvKGV4dGVudCkgICAgX19kZWNsc3BlYygiU0FMX3JlYWRhYmxlVG8oIlNQRUNTVFJJTkdJWkUoZXh0ZW50KSIpIikKKworICAgIC8qCisgICAgCisgICAgIF9fZWxlbV9yZWFkYWJsZVRvKHNpemUpCisgICAgCisgICAgIEFubm90YXRlcyBhIGJ1ZmZlciBwb2ludGVyIHAgYXMgYmVpbmcgcmVhZGFibGUgdG8gc2l6ZSBlbGVtZW50cy4KKyAgICAqLworCisgICAgI2RlZmluZSBfX2VsZW1fcmVhZGFibGVUbyhzaXplKSAgIF9fZGVjbHNwZWMoIlNBTF9yZWFkYWJsZVRvKGVsZW1lbnRDb3VudCgiU1BFQ1NUUklOR0laRShzaXplKSIpKSIpCisgICAgCisgICAgLyoKKyAgICAgX19ieXRlX3JlYWRhYmxlVG8oc2l6ZSkKKyAgICAKKyAgICAgQW5ub3RhdGVzIGEgYnVmZmVyIHBvaW50ZXIgcCBhcyBiZWluZyByZWFkYWJsZSB0byBzaXplIGJ5dGVzLgorICAgICovCisgICAgI2RlZmluZSBfX2J5dGVfcmVhZGFibGVUbyhzaXplKSAgIF9fZGVjbHNwZWMoIlNBTF9yZWFkYWJsZVRvKGJ5dGVDb3VudCgiU1BFQ1NUUklOR0laRShzaXplKSIpKSIpCisgICAgCisgICAgLyoKKyAgICAgX193cml0YWJsZVRvKGV4dGVudCkgcAorICAgIAorICAgICBBbm5vdGF0ZXMgYSBidWZmZXIgcG9pbnRlciBwLiBJZiB0aGUgYnVmZmVyIGNhbiBiZSBtb2RpZmllZCwgZXh0ZW50CisgICAgIGRlc2NyaWJlcyBob3cgbXVjaCBvZiB0aGUgYnVmZmVyIGlzIHdyaXRhYmxlICh1c3VhbGx5IHRoZSBhbGxvY2F0aW9uCisgICAgIHNpemUpLiBGb3IgYSB3cml0ZXIgb2YgdGhlIGJ1ZmZlciwgdGhpcyBpcyBhbiBleHBsaWNpdCBwZXJtaXNzaW9uIHRvCisgICAgIHdyaXRlIHVwIHRvIHRoYXQgYW1vdW50LCByYXRoZXIgdGhhbiBhIHJlc3RyaWN0aW9uIHRvIHdyaXRlIG9ubHkgdXAgdG8gaXQuCisgICAgKi8KKyAgICAjZGVmaW5lIF9fd3JpdGFibGVUbyhzaXplKSAgIF9fZGVjbHNwZWMoIlNBTF93cml0YWJsZVRvKCJTUEVDU1RSSU5HSVpFKHNpemUpIikiKQorCisgICAgLyoKKyAgICAgX19lbGVtX3dyaXRhYmxlVG8oc2l6ZSkKKyAgICAKKyAgICAgQW5ub3RhdGVzIGEgYnVmZmVyIHBvaW50ZXIgcCBhcyBiZWluZyB3cml0YWJsZSB0byBzaXplIGVsZW1lbnRzLgorICAgICovCisgICAgI2RlZmluZSBfX2VsZW1fd3JpdGFibGVUbyhzaXplKSAgIF9fZGVjbHNwZWMoIlNBTF93cml0YWJsZVRvKGVsZW1lbnRDb3VudCgiU1BFQ1NUUklOR0laRShzaXplKSIpKSIpCisgICAgCisgICAgLyoKKyAgICAgX19ieXRlX3dyaXRhYmxlVG8oc2l6ZSkKKyAgICAKKyAgICAgQW5ub3RhdGVzIGEgYnVmZmVyIHBvaW50ZXIgcCBhcyBiZWluZyB3cml0YWJsZSB0byBzaXplIGJ5dGVzLgorICAgICovCisgICAgI2RlZmluZSBfX2J5dGVfd3JpdGFibGVUbyhzaXplKSAgIF9fZGVjbHNwZWMoIlNBTF93cml0YWJsZVRvKGJ5dGVDb3VudCgiU1BFQ1NUUklOR0laRShzaXplKSIpKSIpCisKKyAgICAvKgorICAgICBfX2RlcmVmIHAKKyAgICAKKyAgICAgQW5ub3RhdGVzIGEgcG9pbnRlciBwLiBUaGUgbmV4dCBhbm5vdGF0aW9uIGFwcGxpZXMgb25lIGRlcmVmZXJlbmNlIGRvd24KKyAgICAgaW4gdGhlIHR5cGUuIElmIHJlYWRhYmxlVG8ocCwgc2l6ZSkgdGhlbiB0aGUgbmV4dCBhbm5vdGF0aW9uIGFwcGxpZXMgdG8KKyAgICAgYWxsIGVsZW1lbnRzICoocCtpKSBmb3Igd2hpY2ggaSBzYXRpc2ZpZXMgdGhlIHNpemUuIElmIHAgaXMgYSBwb2ludGVyCisgICAgIHRvIGEgc3RydWN0LCB0aGUgbmV4dCBhbm5vdGF0aW9uIGFwcGxpZXMgdG8gYWxsIGZpZWxkcyBvZiB0aGUgc3RydWN0LgorICAgICovCisgICAgI2RlZmluZSBfX2RlcmVmICAgICAgICAgICAgICAgICBfX2RlY2xzcGVjKCJTQUxfZGVyZWYiKQorICAgIAorICAgIC8qCisgICAgIF9fcHJlIF9fbmV4dF9hbm5vdGF0aW9uCisgICAgCisgICAgIFRoZSBuZXh0IGFubm90YXRpb24gYXBwbGllcyBpbiB0aGUgcHJlY29uZGl0aW9uIHN0YXRlCisgICAgKi8KKyAgICAjZGVmaW5lIF9fcHJlICAgICAgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF9wcmUiKQorICAgIAorICAgIC8qCisgICAgIF9fcG9zdCBfX25leHRfYW5ub3RhdGlvbgorICAgIAorICAgICBUaGUgbmV4dCBhbm5vdGF0aW9uIGFwcGxpZXMgaW4gdGhlIHBvc3Rjb25kaXRpb24gc3RhdGUKKyAgICAqLworICAgICNkZWZpbmUgX19wb3N0ICAgICAgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX3Bvc3QiKQorICAgIAorICAgIC8qCisgICAgIF9fcHJlY29uZCg8ZXhwcj4pCisgICAgCisgICAgIFdoZW4gPGV4cHI+IGlzIHRydWUsIHRoZSBuZXh0IGFubm90YXRpb24gYXBwbGllcyBpbiB0aGUgcHJlY29uZGl0aW9uIHN0YXRlCisgICAgIChjdXJyZW50bHkgbm90IGVuYWJsZWQpCisgICAgKi8KKyAgICAjZGVmaW5lIF9fcHJlY29uZChleHByKSAgICAgICAgIF9fcHJlCisKKyAgICAvKgorICAgICBfX3Bvc3Rjb25kKDxleHByPikKKyAgICAKKyAgICAgV2hlbiA8ZXhwcj4gaXMgdHJ1ZSwgdGhlIG5leHQgYW5ub3RhdGlvbiBhcHBsaWVzIGluIHRoZSBwb3N0Y29uZGl0aW9uIHN0YXRlCisgICAgIChjdXJyZW50bHkgbm90IGVuYWJsZWQpCisgICAgKi8KKyAgICAjZGVmaW5lIF9fcG9zdGNvbmQoZXhwcikgICAgICAgIF9fcG9zdAorCisgICAgLyoKKyAgICAgX19leGNlcHR0aGF0CisgICAgCisgICAgIEdpdmVuIGEgc2V0IG9mIGFubm90YXRpb25zIFEgY29udGFpbmluZyBfX2V4Y2VwdHRoYXQgbWF5YmVQLCB0aGUgZWZmZWN0IG9mCisgICAgIHRoZSBleGNlcHQgY2xhdXNlIGlzIHRvIGVyYXNlIGFueSBQIG9yIG5vdFAgYW5ub3RhdGlvbnMgKGV4cGxpY2l0IG9yCisgICAgIGltcGxpZWQpIHdpdGhpbiBRIGF0IHRoZSBzYW1lIGxldmVsIG9mIGRlcmVmZXJlbmNpbmcgdGhhdCB0aGUgZXhjZXB0CisgICAgIGNsYXVzZSBhcHBlYXJzLCBhbmQgdG8gcmVwbGFjZSBpdCB3aXRoIG1heWJlUC4KKyAgICAKKyAgICAgIEV4YW1wbGUgMTogX192YWxpZCBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwgb24gYSBwb2ludGVyIHAgbWVhbnMgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAgcG9pbnRlciBtYXkgYmUgbnVsbCwgYW5kIGlzIG90aGVyd2lzZSB2YWxpZCwgdGh1cyBvdmVycmlkaW5nCisgICAgICAgICAgICAgICAgIHRoZSBpbXBsaWNpdCBub3RudWxsIGFubm90YXRpb24gaW1wbGllZCBieSBfX3ZhbGlkIG9uCisgICAgICAgICAgICAgICAgIHBvaW50ZXJzLgorICAgIAorICAgICAgRXhhbXBsZSAyOiBfX3ZhbGlkIF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsIG9uIGFuIGludCAqKnAgbWVhbnMKKyAgICAgICAgICAgICAgICAgdGhhdCBwIGlzIG5vdCBudWxsIChpbXBsaWVkIGJ5IHZhbGlkKSwgYnV0IHRoZSBlbGVtZW50cworICAgICAgICAgICAgICAgICBwb2ludGVkIHRvIGJ5IHAgY291bGQgYmUgbnVsbCwgYW5kIGFyZSBvdGhlcndpc2UgdmFsaWQuIAorICAgICovCisgICAgI2RlZmluZSBfX2V4Y2VwdHRoYXQgICAgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX2V4Y2VwdCIpCisgICAgI2RlZmluZSBfX2V4ZWNlcHR0aGF0ICAgICAgICAgICAgICAgX19leGNlcHR0aGF0CisgCisgICAgLyoKKyAgICAgX3JlZnBhcmFtCisgICAgCisgICAgIEFkZGVkIHRvIGFsbCBvdXQgcGFyYW1ldGVyIG1hY3JvcyB0byBpbmRpY2F0ZSB0aGF0IHRoZXkgYXJlIGFsbCByZWZlcmVuY2UKKyAgICAgcGFyYW1ldGVycy4KKyAgICAqLworICAgICNkZWZpbmUgX19yZWZwYXJhbSAgICAgICAgICAgICAgICAgIF9fZGVyZWYgX19ub3RyZWFkb25seQorCisgICAgLyoKKyAgICAgX19pbm5lcl8qCisgICAgCisgICAgIEhlbHBlciBtYWNyb3MgdGhhdCBkaXJlY3RseSBjb3JyZXNwb25kIHRvIGNlcnRhaW4gaGlnaC1sZXZlbCBhbm5vdGF0aW9ucy4KKyAgICAKKyAgICAqLworCisgICAgLyoKKyAgICAgTWFjcm9zIHRvIGNsYXNzaWZ5IHRoZSBlbnRyeXBvaW50cyBhbmQgaW5kaWNhdGUgdGhlaXIgY2F0ZWdvcnkuCisgICAgCisgICAgIFByZS1kZWZpbmVkIGNvbnRyb2wgcG9pbnQgY2F0ZWdvcmllcyBpbmNsdWRlOiBSUEMsIExQQywgRGV2aWNlRHJpdmVyLCBVc2VyVG9LZXJuZWwsIElTQVBJLCBDT00uCisgICAgCisgICAgKi8KKyAgICAjZGVmaW5lIF9faW5uZXJfY29udHJvbF9lbnRyeXBvaW50KGNhdGVnb3J5KSBfX2RlY2xzcGVjKCJTQUxfZW50cnlwb2ludChjb250cm9sRW50cnksICJTUEVDU1RSSU5HSVpFKGNhdGVnb3J5KSIpIikKKworICAgIC8qCisgICAgIFByZS1kZWZpbmVkIGRhdGEgZW50cnkgcG9pbnQgY2F0ZWdvcmllcyBpbmNsdWRlOiBSZWdpc3RyeSwgRmlsZSwgTmV0d29yay4KKyAgICAqLworICAgICNkZWZpbmUgX19pbm5lcl9kYXRhX2VudHJ5cG9pbnQoY2F0ZWdvcnkpICAgIF9fZGVjbHNwZWMoIlNBTF9lbnRyeXBvaW50KGRhdGFFbnRyeSwgIlNQRUNTVFJJTkdJWkUoY2F0ZWdvcnkpIikiKQorCisgICAgI2RlZmluZSBfX2lubmVyX3N1Y2Nlc3MoZXhwcikgICAgICAgICAgICAgICBfX2RlY2xzcGVjKCJTQUxfc3VjY2VzcygiU1BFQ1NUUklOR0laRShleHByKSIpIikKKyAgICAjZGVmaW5lIF9faW5uZXJfY2hlY2tSZXR1cm4gICAgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF9jaGVja1JldHVybiIpCisgICAgI2RlZmluZSBfX2lubmVyX3R5cGVmaXgoY3R5cGUpICAgICAgICAgICAgICBfX2RlY2xzcGVjKCJTQUxfdHlwZWZpeCgiU1BFQ1NUUklOR0laRShjdHlwZSkiKSIpCisgICAgI2RlZmluZSBfX2lubmVyX292ZXJyaWRlICAgICAgICAgICAgICAgICAgICBfX2RlY2xzcGVjKCJfX292ZXJyaWRlIikKKyAgICAjZGVmaW5lIF9faW5uZXJfY2FsbGJhY2sgICAgICAgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIl9fY2FsbGJhY2siKQorICAgICNkZWZpbmUgX19pbm5lcl9ibG9ja3NPbihyZXNvdXJjZSkgICAgICAgICAgX19kZWNsc3BlYygiU0FMX2Jsb2Nrc09uKCJTUEVDU1RSSU5HSVpFKHJlc291cmNlKSIpIikKKyAgICAjZGVmaW5lIF9faW5uZXJfZmFsbHRocm91Z2hfZGVjICAgICAgICAgICAgIF9faW5saW5lIF9fbm90aHJvdyB2b2lkIF9fRmFsbFRocm91Z2goKSB7fQorICAgICNkZWZpbmUgX19pbm5lcl9mYWxsdGhyb3VnaCAgICAgICAgICAgICAgICAgX19GYWxsVGhyb3VnaCgpOworCisjZWxzZQorICAgICNkZWZpbmUgX19udWxsCisgICAgI2RlZmluZSBfX25vdG51bGwKKyAgICAjZGVmaW5lIF9fbWF5YmVudWxsCisgICAgI2RlZmluZSBfX3JlYWRvbmx5CisgICAgI2RlZmluZSBfX25vdHJlYWRvbmx5CisgICAgI2RlZmluZSBfX21heWJlcmVhZG9ubHkKKyAgICAjZGVmaW5lIF9fdmFsaWQKKyAgICAjZGVmaW5lIF9fbm90dmFsaWQKKyAgICAjZGVmaW5lIF9fbWF5YmV2YWxpZAorICAgICNkZWZpbmUgX19yZWFkYWJsZVRvKGV4dGVudCkKKyAgICAjZGVmaW5lIF9fZWxlbV9yZWFkYWJsZVRvKHNpemUpCisgICAgI2RlZmluZSBfX2J5dGVfcmVhZGFibGVUbyhzaXplKQorICAgICNkZWZpbmUgX193cml0YWJsZVRvKHNpemUpCisgICAgI2RlZmluZSBfX2VsZW1fd3JpdGFibGVUbyhzaXplKQorICAgICNkZWZpbmUgX19ieXRlX3dyaXRhYmxlVG8oc2l6ZSkKKyAgICAjZGVmaW5lIF9fZGVyZWYKKyAgICAjZGVmaW5lIF9fcHJlCisgICAgI2RlZmluZSBfX3Bvc3QKKyAgICAjZGVmaW5lIF9fcHJlY29uZChleHByKQorICAgICNkZWZpbmUgX19wb3N0Y29uZChleHByKQorICAgICNkZWZpbmUgX19leGNlcHR0aGF0CisgICAgI2RlZmluZSBfX2V4ZWNlcHR0aGF0CisgICAgI2RlZmluZSBfX2lubmVyX3N1Y2Nlc3MoZXhwcikKKyAgICAjZGVmaW5lIF9faW5uZXJfY2hlY2tSZXR1cm4KKyAgICAjZGVmaW5lIF9faW5uZXJfdHlwZWZpeChjdHlwZSkKKyAgICAjZGVmaW5lIF9faW5uZXJfb3ZlcnJpZGUKKyAgICAjZGVmaW5lIF9faW5uZXJfY2FsbGJhY2sKKyAgICAjZGVmaW5lIF9faW5uZXJfYmxvY2tzT24ocmVzb3VyY2UpCisgICAgI2RlZmluZSBfX2lubmVyX2ZhbGx0aHJvdWdoX2RlYworICAgICNkZWZpbmUgX19pbm5lcl9mYWxsdGhyb3VnaAorICAgICNkZWZpbmUgX19yZWZwYXJhbQorICAgICNkZWZpbmUgX19pbm5lcl9jb250cm9sX2VudHJ5cG9pbnQoY2F0ZWdvcnkpCisgICAgI2RlZmluZSBfX2lubmVyX2RhdGFfZW50cnlwb2ludChjYXRlZ29yeSkKKyNlbmRpZiAvKiAjaWYgIWRlZmluZWQoX19taWRsKSAmJiBkZWZpbmVkKF9QUkVGQVNUXykgKi8KKworLyogCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitCdWZmZXIgQW5ub3RhdGlvbiBEZWZpbml0aW9ucworCitBbnkgb2YgdGhlc2UgbWF5IGJlIHVzZWQgdG8gZGlyZWN0bHkgYW5ub3RhdGUgZnVuY3Rpb25zLCBidXQgb25seSBvbmUgc2hvdWxkCitiZSB1c2VkIGZvciBlYWNoIHBhcmFtZXRlci4gVG8gZGV0ZXJtaW5lIHdoaWNoIGFubm90YXRpb24gdG8gdXNlIGZvciBhIGdpdmVuCitidWZmZXIsIHVzZSB0aGUgdGFibGUgaW4gdGhlIGJ1ZmZlciBhbm5vdGF0aW9ucyBzZWN0aW9uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2RlZmluZSBfX2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbm90bnVsbCBfX2VsZW1fd3JpdGFibGVUbyhzaXplKQorI2RlZmluZSBfX2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbm90bnVsbCBfX2J5dGVfd3JpdGFibGVUbyhzaXplKQorI2RlZmluZSBfX2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlIF9fdmFsaWQgX19wcmUgX19kZXJlZiBfX3JlYWRvbmx5CisjZGVmaW5lIF9faW5fZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbiBfX3ByZSBfX2VsZW1fcmVhZGFibGVUbyhzaXplKQorI2RlZmluZSBfX2luX2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW4gX19wcmUgX19ieXRlX3JlYWRhYmxlVG8oc2l6ZSkKKyNkZWZpbmUgX19pbl96ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2luIF9fcHJlIF9fbnVsbHRlcm1pbmF0ZWQKKyNkZWZpbmUgX19pbl9lY291bnRfeihzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2luX2Vjb3VudChzaXplKSBfX3ByZSBfX251bGx0ZXJtaW5hdGVkCisjZGVmaW5lIF9faW5fYmNvdW50X3ooc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbl9iY291bnQoc2l6ZSkgX19wcmUgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX2luX256ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW4KKyNkZWZpbmUgX19pbl9lY291bnRfbnooc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2luX2Vjb3VudChzaXplKQorI2RlZmluZSBfX2luX2Jjb3VudF9ueihzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5fYmNvdW50KHNpemUpCisjZGVmaW5lIF9fb3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lY291bnQoMSkgX19wb3N0IF9fdmFsaWQgX19yZWZwYXJhbQorI2RlZmluZSBfX291dF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZWNvdW50KHNpemUpIF9fcG9zdCBfX3ZhbGlkIF9fcmVmcGFyYW0KKyNkZWZpbmUgX19vdXRfYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Jjb3VudChzaXplKSBfX3Bvc3QgX192YWxpZCBfX3JlZnBhcmFtCisjZGVmaW5lIF9fb3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZWNvdW50KHNpemUpIF9fcG9zdCBfX2VsZW1fcmVhZGFibGVUbyhsZW5ndGgpCisjZGVmaW5lIF9fb3V0X2Jjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfYmNvdW50KHNpemUpIF9fcG9zdCBfX2J5dGVfcmVhZGFibGVUbyhsZW5ndGgpCisjZGVmaW5lIF9fb3V0X2Vjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZWNvdW50X3BhcnQoc2l6ZSxzaXplKQorI2RlZmluZSBfX291dF9iY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Jjb3VudF9wYXJ0KHNpemUsc2l6ZSkKKyNkZWZpbmUgX19vdXRfeiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc3QgX192YWxpZCBfX3JlZnBhcmFtIF9fcG9zdCBfX251bGx0ZXJtaW5hdGVkCisjZGVmaW5lIF9fb3V0X3pfb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wb3N0IF9fdmFsaWQgX19yZWZwYXJhbSBfX3Bvc3QgX19udWxsdGVybWluYXRlZCBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19vdXRfZWNvdW50X3ooc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vjb3VudChzaXplKSBfX3Bvc3QgX192YWxpZCBfX3JlZnBhcmFtIF9fcG9zdCBfX251bGx0ZXJtaW5hdGVkCisjZGVmaW5lIF9fb3V0X2Jjb3VudF96KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iY291bnQoc2l6ZSkgX19wb3N0IF9fdmFsaWQgX19yZWZwYXJhbSBfX3Bvc3QgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX291dF9lY291bnRfcGFydF96KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSBfX3Bvc3QgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX291dF9iY291bnRfcGFydF96KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Jjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSBfX3Bvc3QgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX291dF9lY291bnRfZnVsbF96KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Vjb3VudF9mdWxsKHNpemUpIF9fcG9zdCBfX251bGx0ZXJtaW5hdGVkCisjZGVmaW5lIF9fb3V0X2Jjb3VudF9mdWxsX3ooc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfYmNvdW50X2Z1bGwoc2l6ZSkgX19wb3N0IF9fbnVsbHRlcm1pbmF0ZWQKKyNkZWZpbmUgX19vdXRfbnogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc3QgX192YWxpZCBfX3JlZnBhcmFtIF9fcG9zdAorI2RlZmluZSBfX291dF9uel9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9zdCBfX3ZhbGlkIF9fcmVmcGFyYW0gX19wb3N0IF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX291dF9lY291bnRfbnooc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZWNvdW50KHNpemUpIF9fcG9zdCBfX3ZhbGlkIF9fcmVmcGFyYW0KKyNkZWZpbmUgX19vdXRfYmNvdW50X256KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Jjb3VudChzaXplKSBfX3Bvc3QgX192YWxpZCBfX3JlZnBhcmFtCisjZGVmaW5lIF9faW5vdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmUgX192YWxpZCBfX3Bvc3QgX192YWxpZCBfX3JlZnBhcmFtCisjZGVmaW5lIF9faW5vdXRfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZWNvdW50KHNpemUpIF9fcHJlIF9fdmFsaWQKKyNkZWZpbmUgX19pbm91dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9iY291bnQoc2l6ZSkgX19wcmUgX192YWxpZAorI2RlZmluZSBfX2lub3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSBfX3ByZSBfX3ZhbGlkIF9fcHJlIF9fZWxlbV9yZWFkYWJsZVRvKGxlbmd0aCkKKyNkZWZpbmUgX19pbm91dF9iY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9iY291bnRfcGFydChzaXplLGxlbmd0aCkgX19wcmUgX192YWxpZCBfX3ByZSBfX2J5dGVfcmVhZGFibGVUbyhsZW5ndGgpCisjZGVmaW5lIF9faW5vdXRfZWNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9lY291bnRfcGFydChzaXplLHNpemUpCisjZGVmaW5lIF9faW5vdXRfYmNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9iY291bnRfcGFydChzaXplLHNpemUpCisjZGVmaW5lIF9faW5vdXRfeiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dCBfX3ByZSBfX251bGx0ZXJtaW5hdGVkIF9fcG9zdCBfX251bGx0ZXJtaW5hdGVkCisjZGVmaW5lIF9faW5vdXRfZWNvdW50X3ooc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9lY291bnQoc2l6ZSkgX19wcmUgX19udWxsdGVybWluYXRlZCBfX3Bvc3QgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX2lub3V0X2Jjb3VudF96KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5vdXRfYmNvdW50KHNpemUpIF9fcHJlIF9fbnVsbHRlcm1pbmF0ZWQgX19wb3N0IF9fbnVsbHRlcm1pbmF0ZWQKKyNkZWZpbmUgX19pbm91dF9ueiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lub3V0CisjZGVmaW5lIF9faW5vdXRfZWNvdW50X256KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9lY291bnQoc2l6ZSkgCisjZGVmaW5lIF9faW5vdXRfYmNvdW50X256KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9iY291bnQoc2l6ZSkgCisjZGVmaW5lIF9fZWNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX2luX29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9faW5fZWNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbl9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19pbl9iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2luX2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX2luX3pfb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5fb3B0IF9fcHJlIF9fbnVsbHRlcm1pbmF0ZWQgCisjZGVmaW5lIF9faW5fZWNvdW50X3pfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbl9lY291bnRfb3B0KHNpemUpIF9fcHJlIF9fbnVsbHRlcm1pbmF0ZWQgCisjZGVmaW5lIF9faW5fYmNvdW50X3pfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbl9iY291bnRfb3B0KHNpemUpIF9fcHJlIF9fbnVsbHRlcm1pbmF0ZWQKKyNkZWZpbmUgX19pbl9uel9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2luX29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyNkZWZpbmUgX19pbl9lY291bnRfbnpfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2luX2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5lIF9faW5fYmNvdW50X256X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbl9iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBfX291dF9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9fb3V0X2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19vdXRfYmNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX291dF9lY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9fb3V0X2Jjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgICAgX19vdXRfYmNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19vdXRfZWNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9lY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX291dF9iY291bnRfZnVsbF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Jjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9fb3V0X2Vjb3VudF96X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZWNvdW50X29wdChzaXplKSBfX3Bvc3QgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX291dF9iY291bnRfel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Jjb3VudF9vcHQoc2l6ZSkgX19wb3N0IF9fbnVsbHRlcm1pbmF0ZWQKKyNkZWZpbmUgX19vdXRfZWNvdW50X3BhcnRfel9vcHQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICAgICAgICBfX291dF9lY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpIF9fcG9zdCBfX251bGx0ZXJtaW5hdGVkCisjZGVmaW5lIF9fb3V0X2Jjb3VudF9wYXJ0X3pfb3B0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgX19vdXRfYmNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSBfX3Bvc3QgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX291dF9lY291bnRfZnVsbF96X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Vjb3VudF9mdWxsX29wdChzaXplKSBfX3Bvc3QgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX291dF9iY291bnRfZnVsbF96X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Jjb3VudF9mdWxsX29wdChzaXplKSBfX3Bvc3QgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX291dF9lY291bnRfbnpfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Vjb3VudF9vcHQoc2l6ZSkgX19wb3N0IF9fbnVsbHRlcm1pbmF0ZWQgICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBfX291dF9iY291bnRfbnpfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Jjb3VudF9vcHQoc2l6ZSkgX19wb3N0IF9fbnVsbHRlcm1pbmF0ZWQgICAgICAgICAgICAgICAgICAgICAgICAKKyNkZWZpbmUgX19pbm91dF9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lub3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX2lub3V0X2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5vdXRfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9faW5vdXRfYmNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19pbm91dF9lY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICAgICAgICBfX2lub3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX2lub3V0X2Jjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgIF9faW5vdXRfYmNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9faW5vdXRfZWNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9lY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19pbm91dF9iY291bnRfZnVsbF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lub3V0X2Jjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX2lub3V0X3pfb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5vdXRfb3B0IF9fcHJlIF9fbnVsbHRlcm1pbmF0ZWQgX19wb3N0IF9fbnVsbHRlcm1pbmF0ZWQKKyNkZWZpbmUgX19pbm91dF9lY291bnRfel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lub3V0X2Vjb3VudF9vcHQoc2l6ZSkgX19wcmUgX19udWxsdGVybWluYXRlZCBfX3Bvc3QgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX2lub3V0X2Vjb3VudF96X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5vdXRfZWNvdW50X29wdChzaXplKSBfX3ByZSBfX251bGx0ZXJtaW5hdGVkIF9fcG9zdCBfX251bGx0ZXJtaW5hdGVkCisjZGVmaW5lIF9faW5vdXRfYmNvdW50X3pfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9iY291bnRfb3B0KHNpemUpIAorI2RlZmluZSBfX2lub3V0X256X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5vdXRfb3B0CisjZGVmaW5lIF9faW5vdXRfZWNvdW50X256X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9lY291bnRfb3B0KHNpemUpCisjZGVmaW5lIF9faW5vdXRfYmNvdW50X256X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9iY291bnRfb3B0KHNpemUpCisjZGVmaW5lIF9fZGVyZWZfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lY291bnQoMSkgX19wb3N0IF9fZWxlbV9yZWFkYWJsZVRvKDEpIF9fcG9zdCBfX2RlcmVmIF9fbm90bnVsbCBfX3Bvc3QgX19kZXJlZiBfX2VsZW1fd3JpdGFibGVUbyhzaXplKQorI2RlZmluZSBfX2RlcmVmX2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZWNvdW50KDEpIF9fcG9zdCBfX2VsZW1fcmVhZGFibGVUbygxKSBfX3Bvc3QgX19kZXJlZiBfX25vdG51bGwgX19wb3N0IF9fZGVyZWYgX19ieXRlX3dyaXRhYmxlVG8oc2l6ZSkKKyNkZWZpbmUgX19kZXJlZl9vdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2Vjb3VudCgxKSBfX3Bvc3QgX19kZXJlZiBfX3ZhbGlkIF9fcmVmcGFyYW0KKyNkZWZpbmUgX19kZXJlZl9vdXRfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2Vjb3VudChzaXplKSBfX3Bvc3QgX19kZXJlZiBfX3ZhbGlkIF9fcmVmcGFyYW0KKyNkZWZpbmUgX19kZXJlZl9vdXRfYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2Jjb3VudChzaXplKSBfX3Bvc3QgX19kZXJlZiBfX3ZhbGlkIF9fcmVmcGFyYW0KKyNkZWZpbmUgX19kZXJlZl9vdXRfZWNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnQoc2l6ZSkgX19wb3N0IF9fZGVyZWYgX19lbGVtX3JlYWRhYmxlVG8obGVuZ3RoKQorI2RlZmluZSBfX2RlcmVmX291dF9iY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudChzaXplKSBfX3Bvc3QgX19kZXJlZiBfX2J5dGVfcmVhZGFibGVUbyhsZW5ndGgpCisjZGVmaW5lIF9fZGVyZWZfb3V0X2Vjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfZWNvdW50X3BhcnQoc2l6ZSxzaXplKQorI2RlZmluZSBfX2RlcmVmX291dF9iY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudF9wYXJ0KHNpemUsc2l6ZSkKKyNkZWZpbmUgX19kZXJlZl9vdXRfeiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc3QgX19kZXJlZiBfX3ZhbGlkIF9fcmVmcGFyYW0gX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX2RlcmVmX291dF9lY291bnRfeihzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudChzaXplKSBfX3Bvc3QgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkICAKKyNkZWZpbmUgX19kZXJlZl9vdXRfYmNvdW50X3ooc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnQoc2l6ZSkgX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZCAgCisjZGVmaW5lIF9fZGVyZWZfb3V0X256ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vdXQKKyNkZWZpbmUgX19kZXJlZl9vdXRfZWNvdW50X256KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnQoc2l6ZSkgICAKKyNkZWZpbmUgX19kZXJlZl9vdXRfYmNvdW50X256KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnQoc2l6ZSkgICAKKyNkZWZpbmUgX19kZXJlZl9pbm91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25vdG51bGwgX19lbGVtX3JlYWRhYmxlVG8oMSkgX19wcmUgX19kZXJlZiBfX3ZhbGlkIF9fcG9zdCBfX2RlcmVmIF9fdmFsaWQgX19yZWZwYXJhbQorI2RlZmluZSBfX2RlcmVmX2lub3V0X3ogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXQgX19wcmUgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkIF9fcG9zdCBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQKKyNkZWZpbmUgX19kZXJlZl9pbm91dF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0IF9fcHJlIF9fZGVyZWYgX19lbGVtX3dyaXRhYmxlVG8oc2l6ZSkgX19wb3N0IF9fZGVyZWYgX19lbGVtX3dyaXRhYmxlVG8oc2l6ZSkKKyNkZWZpbmUgX19kZXJlZl9pbm91dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0IF9fcHJlIF9fZGVyZWYgX19ieXRlX3dyaXRhYmxlVG8oc2l6ZSkgX19wb3N0IF9fZGVyZWYgX19ieXRlX3dyaXRhYmxlVG8oc2l6ZSkKKyNkZWZpbmUgX19kZXJlZl9pbm91dF9lY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudChzaXplKSBfX3ByZSBfX2RlcmVmIF9fZWxlbV9yZWFkYWJsZVRvKGxlbmd0aCkgX19wb3N0IF9fZGVyZWYgX19lbGVtX3JlYWRhYmxlVG8obGVuZ3RoKQorI2RlZmluZSBfX2RlcmVmX2lub3V0X2Jjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfYmNvdW50KHNpemUpIF9fcHJlIF9fZGVyZWYgX19ieXRlX3JlYWRhYmxlVG8obGVuZ3RoKSBfX3Bvc3QgX19kZXJlZiBfX2J5dGVfcmVhZGFibGVUbyhsZW5ndGgpCisjZGVmaW5lIF9fZGVyZWZfaW5vdXRfZWNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9lY291bnRfcGFydChzaXplLHNpemUpCisjZGVmaW5lIF9fZGVyZWZfaW5vdXRfYmNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9iY291bnRfcGFydChzaXplLHNpemUpCisjZGVmaW5lIF9fZGVyZWZfaW5vdXRfeiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dCBfX3ByZSBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQgX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX2RlcmVmX2lub3V0X2Vjb3VudF96KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfZWNvdW50KHNpemUpIF9fcHJlIF9fZGVyZWYgX19udWxsdGVybWluYXRlZCBfX3Bvc3QgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkICAgCisjZGVmaW5lIF9fZGVyZWZfaW5vdXRfYmNvdW50X3ooc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9lY291bnQoc2l6ZSkgX19wcmUgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkIF9fcG9zdCBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQgIAorI2RlZmluZSBfX2RlcmVmX2lub3V0X256ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXQKKyNkZWZpbmUgX19kZXJlZl9pbm91dF9lY291bnRfbnooc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudChzaXplKSAgIAorI2RlZmluZSBfX2RlcmVmX2lub3V0X2Jjb3VudF9ueihzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfZWNvdW50KHNpemUpICAgCisjZGVmaW5lIF9fZGVyZWZfZWNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc3QgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19kZXJlZl9iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX2RlcmVmX291dF9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wb3N0IF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9fZGVyZWZfb3V0X2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICBfX3Bvc3QgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19kZXJlZl9vdXRfYmNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX2RlcmVmX291dF9lY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgX19wb3N0IF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9fZGVyZWZfb3V0X2Jjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfYmNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICBfX3Bvc3QgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19kZXJlZl9vdXRfZWNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX2RlcmVmX291dF9iY291bnRfZnVsbF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgX19wb3N0IF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9fZGVyZWZfb3V0X3pfb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wb3N0IF9fZGVyZWYgX192YWxpZCBfX3JlZnBhcmFtIF9fZXhlY2VwdHRoYXQgX19tYXliZW51bGwgX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX2RlcmVmX291dF9lY291bnRfel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudF9vcHQoc2l6ZSkgX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX2RlcmVmX291dF9iY291bnRfel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudF9vcHQoc2l6ZSkgX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX2RlcmVmX291dF9uel9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X29wdAorI2RlZmluZSBfX2RlcmVmX291dF9lY291bnRfbnpfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudF9vcHQoc2l6ZSkKKyNkZWZpbmUgX19kZXJlZl9vdXRfYmNvdW50X256X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9iY291bnRfb3B0KHNpemUpCisjZGVmaW5lIF9fZGVyZWZfaW5vdXRfb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZSBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbCBfX3Bvc3QgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19kZXJlZl9pbm91dF9lY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgIF9fcHJlIF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX2RlcmVmX2lub3V0X2Jjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgX19wcmUgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwgX19wb3N0IF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9fZGVyZWZfaW5vdXRfZWNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9lY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICBfX3ByZSBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbCBfX3Bvc3QgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19kZXJlZl9pbm91dF9iY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Jjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgIF9fcHJlIF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX2RlcmVmX2lub3V0X2Vjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfZWNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgX19wcmUgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwgX19wb3N0IF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9fZGVyZWZfaW5vdXRfYmNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9iY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICBfX3ByZSBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbCBfX3Bvc3QgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19kZXJlZl9pbm91dF96X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X29wdCBfX3ByZSBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQgX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX2RlcmVmX2lub3V0X2Vjb3VudF96X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfZWNvdW50X29wdChzaXplKSBfX3ByZSBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQgX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX2RlcmVmX2lub3V0X2Jjb3VudF96X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfYmNvdW50X29wdChzaXplKSBfX3ByZSBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQgX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX2RlcmVmX2lub3V0X256X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfb3B0IAorI2RlZmluZSBfX2RlcmVmX2lub3V0X2Vjb3VudF9uel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfZWNvdW50X29wdChzaXplKQorI2RlZmluZSBfX2RlcmVmX2lub3V0X2Jjb3VudF9uel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfYmNvdW50X29wdChzaXplKQorI2RlZmluZSBfX2RlcmVmX29wdF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9fZGVyZWZfb3B0X2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19kZXJlZl9vcHRfb3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfeiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3B0X291dCBfX3Bvc3QgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkCisjZGVmaW5lIF9fZGVyZWZfb3B0X291dF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfZWNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9fZGVyZWZfb3B0X291dF9iY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfYmNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X2Vjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfYmNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19kZXJlZl9vcHRfaW5vdXRfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9lY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19kZXJlZl9vcHRfaW5vdXRfYmNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Jjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9lY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfZWNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Jjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9iY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19kZXJlZl9vcHRfaW5vdXRfeiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX29wdF9pbm91dCBfX3ByZSBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQgX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9lY291bnRfeihzaXplKSAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudChzaXplKSBfX3ByZSBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQgX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9iY291bnRfeihzaXplKSAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3B0X2lub3V0X2Jjb3VudChzaXplKSBfX3ByZSBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQgX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9ueiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3B0X2lub3V0CisjZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudF9ueihzaXplKSAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vcHRfaW5vdXRfZWNvdW50KHNpemUpCisjZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Jjb3VudF9ueihzaXplKSAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vcHRfaW5vdXRfYmNvdW50KHNpemUpCisjZGVmaW5lIF9fZGVyZWZfb3B0X2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9lY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19kZXJlZl9vcHRfYmNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2Jjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9fZGVyZWZfb3B0X291dF9lY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfZWNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X2Jjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfZWNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9fZGVyZWZfb3B0X291dF9iY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgX19kZXJlZl9vdXRfYmNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X2Vjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnRfZnVsbF9vcHQoc2l6ZSkgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfYmNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9fZGVyZWZfb3B0X291dF96X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wb3N0IF9fZGVyZWYgX192YWxpZCBfX3JlZnBhcmFtIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbCBfX3ByZSBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbCBfX3Bvc3QgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwgX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfZWNvdW50X3pfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3B0X291dF9lY291bnRfb3B0KHNpemUpIF9fcG9zdCBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQKKyNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X2Jjb3VudF96X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX29wdF9vdXRfYmNvdW50X29wdChzaXplKSBfX3Bvc3QgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkCisjZGVmaW5lIF9fZGVyZWZfb3B0X291dF9uel9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vcHRfb3V0X29wdAorI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfZWNvdW50X256X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3B0X291dF9lY291bnRfb3B0KHNpemUpICAgIAorI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfYmNvdW50X256X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3B0X291dF9iY291bnRfb3B0KHNpemUpICAgIAorI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9lY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19kZXJlZl9vcHRfaW5vdXRfYmNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Jjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9lY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICAgICAgICAgIF9fZGVyZWZfaW5vdXRfZWNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Jjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgICAgICAgICAgX19kZXJlZl9pbm91dF9iY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNkZWZpbmUgX19kZXJlZl9vcHRfaW5vdXRfZWNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9iY291bnRfZnVsbF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfYmNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X3pfb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vcHRfaW5vdXRfb3B0ICBfX3ByZSBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQgX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZCAgICAgICAgICAgICAKKyNkZWZpbmUgX19kZXJlZl9vcHRfaW5vdXRfZWNvdW50X3pfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX29wdF9pbm91dF9lY291bnRfb3B0KHNpemUpICBfX3ByZSBfX2RlcmVmIF9fbnVsbHRlcm1pbmF0ZWQgX19wb3N0IF9fZGVyZWYgX19udWxsdGVybWluYXRlZAorI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9iY291bnRfel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3B0X2lub3V0X2Jjb3VudF9vcHQoc2l6ZSkgIF9fcHJlIF9fZGVyZWYgX19udWxsdGVybWluYXRlZCBfX3Bvc3QgX19kZXJlZiBfX251bGx0ZXJtaW5hdGVkCisjZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X256X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vcHRfaW5vdXRfb3B0ICAgICAgICAgICAgICAgCisjZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudF9uel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vcHRfaW5vdXRfZWNvdW50X29wdChzaXplKSAgCisjZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Jjb3VudF9uel9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vcHRfaW5vdXRfYmNvdW50X29wdChzaXplKSAgCisKKy8qCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBZHZhbmNlZCBBbm5vdGF0aW9uIERlZmluaXRpb25zCisKK0FueSBvZiB0aGVzZSBtYXkgYmUgdXNlZCB0byBkaXJlY3RseSBhbm5vdGF0ZSBmdW5jdGlvbnMsIGFuZCBtYXkgYmUgdXNlZCBpbgorY29tYmluYXRpb24gd2l0aCBlYWNoIG90aGVyIG9yIHdpdGggcmVndWxhciBidWZmZXIgbWFjcm9zLiBGb3IgYW4gZXhwbGFuYXRpb24KK29mIGVhY2ggYW5ub3RhdGlvbiwgc2VlIHRoZSBhZHZhbmNlZCBhbm5vdGF0aW9ucyBzZWN0aW9uLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2RlZmluZSBfX3N1Y2Nlc3MoZXhwcikgICAgICAgICAgICAgICAgICAgICBfX2lubmVyX3N1Y2Nlc3MoZXhwcikKKyNkZWZpbmUgX19udWxsdGVybWluYXRlZCAgICAgICAgICAgICAgICAgICAgX19yZWFkYWJsZVRvKHNlbnRpbmVsKDApKQorI2RlZmluZSBfX251bGxudWxsdGVybWluYXRlZAorI2RlZmluZSBfX3Jlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZSBfX251bGwKKyNkZWZpbmUgX19jaGVja1JldHVybiAgICAgICAgICAgICAgICAgICAgICAgX19pbm5lcl9jaGVja1JldHVybgorI2RlZmluZSBfX3R5cGVmaXgoY3R5cGUpICAgICAgICAgICAgICAgICAgICBfX2lubmVyX3R5cGVmaXgoY3R5cGUpCisjZGVmaW5lIF9fb3ZlcnJpZGUgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5uZXJfb3ZlcnJpZGUKKyNkZWZpbmUgX19jYWxsYmFjayAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm5lcl9jYWxsYmFjaworI2RlZmluZSBfX2Zvcm1hdF9zdHJpbmcKKyNkZWZpbmUgX19ibG9ja3NPbihyZXNvdXJjZSkgICAgICAgICAgICAgICAgX19pbm5lcl9ibG9ja3NPbihyZXNvdXJjZSkKKyNkZWZpbmUgX19jb250cm9sX2VudHJ5cG9pbnQoY2F0ZWdvcnkpICAgICAgX19pbm5lcl9jb250cm9sX2VudHJ5cG9pbnQoY2F0ZWdvcnkpCisjZGVmaW5lIF9fZGF0YV9lbnRyeXBvaW50KGNhdGVnb3J5KSAgICAgICAgIF9faW5uZXJfZGF0YV9lbnRyeXBvaW50KGNhdGVnb3J5KQorCisjaWZuZGVmIF9fZmFsbHRocm91Z2gKKyAgICBfX2lubmVyX2ZhbGx0aHJvdWdoX2RlYworICAgICNkZWZpbmUgX19mYWxsdGhyb3VnaCBfX2lubmVyX2ZhbGx0aHJvdWdoCisjZW5kaWYKKworI2lmbmRlZiBfX2FuYWx5c2lzX2Fzc3VtZQorI2lmZGVmIF9QUkVGQVNUXworI2RlZmluZSBfX2FuYWx5c2lzX2Fzc3VtZShleHByKSBfX2Fzc3VtZShleHByKQorI2Vsc2UKKyNkZWZpbmUgX19hbmFseXNpc19hc3N1bWUoZXhwcikgCisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9zcGVjc3RyaW5ncy5oIGIvY29yZS9zcmMvZnhnZS9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvc3BlY3N0cmluZ3MuaAppbmRleCAwMGNkZDMzLi4yN2E1ODlhIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL01pY3Jvc29mdCBTREsvaW5jbHVkZS9zcGVjc3RyaW5ncy5oCisrKyBiL2NvcmUvc3JjL2Z4Z2UvTWljcm9zb2Z0IFNESy9pbmNsdWRlL3NwZWNzdHJpbmdzLmgKQEAgLTEsOTc4ICsxLDk3OCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwNCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KLSogU3BlY1N0cmluZ3MuaCAtIG1hcmtlcnMgZm9yIGRvY3VtZW50aW5nIHRoZSBzZW1hbnRpY3Mgb2YgQVBJcyAqDQotKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoNCi0qIFZlcnNpb24gMS4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqDQotKiBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICoNCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQotDQotLy8gQEBCRUdJTl9EREtTUExJVA0KLQ0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBJbnRyb2R1Y3Rpb24NCi0vLw0KLS8vIFNwZWNTdHJpbmdzLmggcHJvdmlkZXMgYSBzZXQgb2YgYW5ub3RhdGlvbnMgdG8gZGVzY3JpYmUgaG93IGEgZnVuY3Rpb24gdXNlcyBpdHMNCi0vLyBwYXJhbWV0ZXJzIC0gdGhlIGFzc3VtcHRpb25zIGl0IG1ha2VzIGFib3V0IHRoZW0sIGFuZCB0aGUgZ3VhcmFudGVlcyBpdCBtYWtlcw0KLS8vIHVwb24gZmluaXNoaW5nLg0KLS8vDQotLy8gQW5ub3RhdGlvbnMgbWF5IGJlIHBsYWNlZCBiZWZvcmUgZWl0aGVyIGEgZnVuY3Rpb24gcGFyYW1ldGVyJ3MgdHlwZSBvciBpdHMgcmV0dXJuDQotLy8gdHlwZSwgYW5kIGRlc2NyaWJlIHRoZSBmdW5jdGlvbidzIGJlaGF2aW9yIHJlZ2FyZGluZyB0aGUgcGFyYW1ldGVyIG9yIHJldHVybiB2YWx1ZS4NCi0vLyBUaGVyZSBhcmUgdHdvIGNsYXNzZXMgb2YgYW5ub3RhdGlvbnM6IGJ1ZmZlciBhbm5vdGF0aW9ucyBhbmQgYWR2YW5jZWQgYW5ub3RhdGlvbnMuDQotLy8gQnVmZmVyIGFubm90YXRpb25zIGRlc2NyaWJlIGhvdyBmdW5jdGlvbnMgdXNlIHRoZWlyIHBvaW50ZXIgcGFyYW1ldGVycywgYW5kDQotLy8gYWR2YW5jZWQgYW5ub3RhdGlvbnMgZWl0aGVyIGRlc2NyaWJlIGNvbXBsZXgvdW51c3VhbCBidWZmZXIgYmVoYXZpb3IsIG9yIHByb3ZpZGUNCi0vLyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGEgcGFyYW1ldGVyIHRoYXQgaXMgbm90IG90aGVyd2lzZSBleHByZXNzaWJsZS4NCi0vLw0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyBCdWZmZXIgQW5ub3RhdGlvbnMNCi0vLw0KLS8vIFRoZSBtb3N0IGltcG9ydGFudCBhbm5vdGF0aW9ucyBpbiBTcGVjU3RyaW5ncy5oIHByb3ZpZGUgYSBjb25zaXN0ZW50IHdheSB0byBhbm5vdGF0ZQ0KLS8vIGJ1ZmZlciBwYXJhbWV0ZXJzIG9yIHJldHVybiB2YWx1ZXMgZm9yIGEgZnVuY3Rpb24uIEVhY2ggb2YgdGhlc2UgYW5ub3RhdGlvbnMgZGVzY3JpYmVzDQotLy8gYSBzaW5nbGUgYnVmZmVyICh3aGljaCBjb3VsZCBiZSBhIHN0cmluZywgYSBmaXhlZC1sZW5ndGggb3IgdmFyaWFibGUtbGVuZ3RoIGFycmF5LA0KLS8vIG9yIGp1c3QgYSBwb2ludGVyKSB0aGF0IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aDogd2hlcmUgaXQgaXMsIGhvdyBsYXJnZSBpdCBpcywNCi0vLyBob3cgbXVjaCBpcyBpbml0aWFsaXplZCwgYW5kIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMgd2l0aCBpdC4NCi0vLw0KLS8vIFRoZSBhcHByb3ByaWF0ZSBtYWNybyBmb3IgYSBnaXZlbiBidWZmZXIgY2FuIGJlIGNvbnN0cnVjdGVkIHVzaW5nIHRoZSB0YWJsZSBiZWxvdy4NCi0vLyBKdXN0IHBpY2sgdGhlIGFwcHJvcHJpYXRlIHZhbHVlcyBmcm9tIGVhY2ggY2F0ZWdvcnksIGFuZCBjb21iaW5lIHRoZW0gdG9nZXRoZXINCi0vLyB3aXRoIGEgbGVhZGluZyB1bmRlcnNjb3JlLiBTb21lIGNvbWJpbmF0aW9ucyBvZiB2YWx1ZXMgZG8gbm90IG1ha2Ugc2Vuc2UgYXMgYnVmZmVyDQotLy8gYW5ub3RhdGlvbnMuIE9ubHkgbWVhbmluZ2Z1bCBhbm5vdGF0aW9ucyBjYW4gYmUgYWRkZWQgdG8geW91ciBjb2RlOyBmb3IgYSBsaXN0IG9mDQotLy8gdGhlc2UsIHNlZSB0aGUgYnVmZmVyIGFubm90YXRpb24gZGVmaW5pdGlvbnMgc2VjdGlvbi4NCi0vLw0KLS8vIE9ubHkgYSBzaW5nbGUgYnVmZmVyIGFubm90YXRpb24gc2hvdWxkIGJlIHVzZWQgZm9yIGVhY2ggcGFyYW1ldGVyLg0KLS8vDQotLy8gfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tfA0KLS8vIHwgICBMZXZlbCAgICB8ICAgVXNhZ2UgICAgfCAgU2l6ZSAgIHwgT3V0cHV0IHwgT3B0aW9uYWwgfCAgUGFyYW1ldGVycyAgIHwNCi0vLyB8LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS18DQotLy8gfCA8PiAgICAgICAgIHwgPD4gICAgICAgICB8IDw+ICAgICAgfCA8PiAgICAgfCA8PiAgICAgICB8IDw+ICAgICAgICAgICAgfA0KLS8vIHwgX2RlcmVmICAgICB8IF9pbiAgICAgICAgfCBfZWNvdW50IHwgX2Z1bGwgIHwgX29wdCAgICAgfCAoc2l6ZSkgICAgICAgIHwNCi0vLyB8IF9kZXJlZl9vcHQgfCBfb3V0ICAgICAgIHwgX2Jjb3VudCB8IF9wYXJ0ICB8ICAgICAgICAgIHwgKHNpemUsbGVuZ3RoKSB8DQotLy8gfCAgICAgICAgICAgIHwgX2lub3V0ICAgICB8ICAgICAgICAgfCAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgfA0KLS8vIHwgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgIHwNCi0vLyB8LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS18DQotLy8NCi0vLyBMZXZlbDogRGVzY3JpYmVzIHRoZSBidWZmZXIgcG9pbnRlcidzIGxldmVsIG9mIGluZGlyZWN0aW9uIGZyb20gdGhlIHBhcmFtZXRlciBvcg0KLS8vICAgICAgICAgIHJldHVybiB2YWx1ZSAncCcuDQotLy8NCi0vLyA8PiAgICAgICAgIDogcCBpcyB0aGUgYnVmZmVyIHBvaW50ZXIuDQotLy8gX2RlcmVmICAgICA6ICpwIGlzIHRoZSBidWZmZXIgcG9pbnRlci4gcCBtdXN0IG5vdCBiZSBOVUxMLg0KLS8vIF9kZXJlZl9vcHQgOiAqcCBtYXkgYmUgdGhlIGJ1ZmZlciBwb2ludGVyLiBwIG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIHRoZSByZXN0IG9mDQotLy8gICAgICAgICAgICAgICAgdGhlIGFubm90YXRpb24gaXMgaWdub3JlZC4NCi0vLw0KLS8vIFVzYWdlOiBEZXNjcmliZXMgaG93IHRoZSBmdW5jdGlvbiB1c2VzIHRoZSBidWZmZXIuDQotLy8NCi0vLyA8PiAgICAgOiBUaGUgYnVmZmVyIGlzIG5vdCBhY2Nlc3NlZC4gSWYgdXNlZCBvbiB0aGUgcmV0dXJuIHZhbHVlIG9yIHdpdGggX2RlcmVmLCB0aGUNCi0vLyAgICAgICAgICAgIGZ1bmN0aW9uIHdpbGwgcHJvdmlkZSB0aGUgYnVmZmVyLCBhbmQgaXQgd2lsbCBiZSB1bmluaXRpYWxpemVkIGF0IGV4aXQuDQotLy8gICAgICAgICAgICBPdGhlcndpc2UsIHRoZSBjYWxsZXIgbXVzdCBwcm92aWRlIHRoZSBidWZmZXIuIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZA0KLS8vICAgICAgICAgICAgZm9yIGFsbG9jIGFuZCBmcmVlIGZ1bmN0aW9ucy4NCi0vLyBfaW4gICAgOiBUaGUgZnVuY3Rpb24gd2lsbCBvbmx5IHJlYWQgZnJvbSB0aGUgYnVmZmVyLiBUaGUgY2FsbGVyIG11c3QgcHJvdmlkZSB0aGUNCi0vLyAgICAgICAgICAgIGJ1ZmZlciBhbmQgaW5pdGlhbGl6ZSBpdC4NCi0vLyBfb3V0ICAgOiBUaGUgZnVuY3Rpb24gd2lsbCBvbmx5IHdyaXRlIHRvIHRoZSBidWZmZXIuIElmIHVzZWQgb24gdGhlIHJldHVybiB2YWx1ZSBvcg0KLS8vICAgICAgICAgICAgd2l0aCBfZGVyZWYsIHRoZSBmdW5jdGlvbiB3aWxsIHByb3ZpZGUgdGhlIGJ1ZmZlciBhbmQgaW5pdGlhbGl6ZSBpdC4NCi0vLyAgICAgICAgICAgIE90aGVyd2lzZSwgdGhlIGNhbGxlciBtdXN0IHByb3ZpZGUgdGhlIGJ1ZmZlciwgYW5kIHRoZSBmdW5jdGlvbiB3aWxsDQotLy8gICAgICAgICAgICBpbml0aWFsaXplIGl0Lg0KLS8vIF9pbm91dCA6IFRoZSBmdW5jdGlvbiBtYXkgZnJlZWx5IHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gdGhlIGJ1ZmZlci4gVGhlIGNhbGxlciBtdXN0DQotLy8gICAgICAgICAgICBwcm92aWRlIHRoZSBidWZmZXIgYW5kIGluaXRpYWxpemUgaXQuIElmIHVzZWQgd2l0aCBfZGVyZWYsIHRoZSBidWZmZXIgbWF5DQotLy8gICAgICAgICAgICBiZSByZWFsbG9jYXRlZCBieSB0aGUgZnVuY3Rpb24uDQotLy8NCi0vLyBTaXplOiBEZXNjcmliZXMgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGJ1ZmZlci4gVGhpcyBtYXkgYmUgbGVzcyB0aGFuIHRoZSBzcGFjZSBhY3R1YWxseQ0KLS8vICAgICAgICAgYWxsb2NhdGVkIGZvciB0aGUgYnVmZmVyLCBpbiB3aGljaCBjYXNlIGl0IGRlc2NyaWJlcyB0aGUgYWNjZXNzaWJsZSBhbW91bnQuDQotLy8NCi0vLyA8PiAgICAgIDogTm8gYnVmZmVyIHNpemUgaXMgZ2l2ZW4uIElmIHRoZSB0eXBlIHNwZWNpZmllcyB0aGUgYnVmZmVyIHNpemUgKHN1Y2ggYXMNCi0vLyAgICAgICAgICAgICB3aXRoIExQU1RSIGFuZCBMUFdTVFIpLCB0aGF0IGFtb3VudCBpcyB1c2VkLiBPdGhlcndpc2UsIHRoZSBidWZmZXIgaXMgb25lDQotLy8gICAgICAgICAgICAgZWxlbWVudCBsb25nLiBNdXN0IGJlIHVzZWQgd2l0aCBfaW4sIF9vdXQsIG9yIF9pbm91dC4NCi0vLyBfZWNvdW50IDogVGhlIGJ1ZmZlciBzaXplIGlzIGFuIGV4cGxpY2l0IGVsZW1lbnQgY291bnQuDQotLy8gX2Jjb3VudCA6IFRoZSBidWZmZXIgc2l6ZSBpcyBhbiBleHBsaWNpdCBieXRlIGNvdW50Lg0KLS8vDQotLy8gT3V0cHV0OiBEZXNjcmliZXMgaG93IG11Y2ggb2YgdGhlIGJ1ZmZlciB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZSBmdW5jdGlvbi4gRm9yDQotLy8gICAgICAgICAgIF9pbm91dCBidWZmZXJzLCB0aGlzIGFsc28gZGVzY3JpYmVzIGhvdyBtdWNoIGlzIGluaXRpYWxpemVkIGF0IGVudHJ5LiBPbWl0IHRoaXMNCi0vLyAgICAgICAgICAgY2F0ZWdvcnkgZm9yIF9pbiBidWZmZXJzOyB0aGV5IG11c3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQgYnkgdGhlIGNhbGxlci4NCi0vLw0KLS8vIDw+ICAgIDogVGhlIHR5cGUgc3BlY2lmaWVzIGhvdyBtdWNoIGlzIGluaXRpYWxpemVkLiBGb3IgaW5zdGFuY2UsIGEgZnVuY3Rpb24gaW5pdGlhbGl6aW5nDQotLy8gICAgICAgICAgIGFuIExQV1NUUiBtdXN0IE5VTEwtdGVybWluYXRlIHRoZSBzdHJpbmcuDQotLy8gX2Z1bGwgOiBUaGUgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGVudGlyZSBidWZmZXIuDQotLy8gX3BhcnQgOiBUaGUgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgcGFydCBvZiB0aGUgYnVmZmVyLCBhbmQgZXhwbGljaXRseSBpbmRpY2F0ZXMgaG93IG11Y2guDQotLy8NCi0vLyBPcHRpb25hbDogRGVzY3JpYmVzIGlmIHRoZSBidWZmZXIgaXRzZWxmIGlzIG9wdGlvbmFsLg0KLS8vDQotLy8gPD4gICA6IFRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIgbXVzdCBub3QgYmUgTlVMTC4NCi0vLyBfb3B0IDogVGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBtaWdodCBiZSBOVUxMLiBJdCB3aWxsIGJlIGNoZWNrZWQgYmVmb3JlIGJlaW5nIGRlcmVmZXJlbmNlZC4NCi0vLw0KLS8vIFBhcmFtZXRlcnM6IEdpdmVzIGV4cGxpY2l0IGNvdW50cyBmb3IgdGhlIHNpemUgYW5kIGxlbmd0aCBvZiB0aGUgYnVmZmVyLg0KLS8vDQotLy8gPD4gICAgICAgICAgICA6IFRoZXJlIGlzIG5vIGV4cGxpY2l0IGNvdW50LiBVc2Ugd2hlbiBuZWl0aGVyIF9lY291bnQgbm9yIF9iY291bnQgaXMgdXNlZC4NCi0vLyAoc2l6ZSkgICAgICAgIDogT25seSB0aGUgYnVmZmVyJ3MgdG90YWwgc2l6ZSBpcyBnaXZlbi4gVXNlIHdpdGggX2Vjb3VudCBvciBfYmNvdW50IGJ1dCBub3QgX3BhcnQuDQotLy8gKHNpemUsbGVuZ3RoKSA6IFRoZSBidWZmZXIncyB0b3RhbCBzaXplIGFuZCBpbml0aWFsaXplZCBsZW5ndGggYXJlIGdpdmVuLiBVc2Ugd2l0aCBfZWNvdW50X3BhcnQNCi0vLyAgICAgICAgICAgICAgICAgICBhbmQgX2Jjb3VudF9wYXJ0Lg0KLS8vDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEJ1ZmZlciBBbm5vdGF0aW9uIEV4YW1wbGVzDQotLy8NCi0vLyBMV1NUREFQSV8oQk9PTCkgU3RyVG9JbnRFeEEoDQotLy8gICAgIExQQ1NUUiBwc3pTdHJpbmcsICAgICAgICAgICAgICAgICAgICAvLyBObyBhbm5vdGF0aW9uIHJlcXVpcmVkLCBjb25zdCBpbXBsaWVzIF9faW4uDQotLy8gICAgIERXT1JEIGR3RmxhZ3MsDQotLy8gICAgIF9fb3V0IGludCAqcGlSZXQgICAgICAgICAgICAgICAgICAgICAvLyBBIHBvaW50ZXIgd2hvc2UgZGVyZWZlcmVuY2Ugd2lsbCBiZSBmaWxsZWQgaW4uDQotLy8gKTsNCi0vLw0KLS8vIHZvaWQgTXlQYWludGluZ0Z1bmN0aW9uKA0KLS8vICAgICBfX2luIEhXTkQgaHduZENvbnRyb2wsICAgICAgICAgICAgICAgLy8gQW4gaW5pdGlhbGl6ZWQgcmVhZC1vbmx5IHBhcmFtZXRlci4NCi0vLyAgICAgX19pbl9vcHQgSERDIGhkY09wdGlvbmFsLCAgICAgICAgICAgIC8vIEFuIGluaXRpYWxpemVkIHJlYWQtb25seSBwYXJhbWV0ZXIgdGhhdCBtaWdodCBiZSBOVUxMLg0KLS8vICAgICBfX2lub3V0IElQcm9wZXJ0eVN0b3JlICpwcHNTdG9yZSAgICAgLy8gQW4gaW5pdGlhbGl6ZWQgcGFyYW1ldGVyIHRoYXQgbWF5IGJlIGZyZWVseSB1c2VkDQotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGFuZCBtb2RpZmllZC4NCi0vLyApOw0KLS8vDQotLy8gTFdTVERBUElfKEJPT0wpIFBhdGhDb21wYWN0UGF0aEV4QSgNCi0vLyAgICAgX19vdXRfZWNvdW50KGNjaE1heCkgTFBTVFIgcHN6T3V0LCAgIC8vIEEgc3RyaW5nIGJ1ZmZlciB3aXRoIGNjaCBlbGVtZW50cyB0aGF0IHdpbGwNCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgYmUgTlVMTCB0ZXJtaW5hdGVkIG9uIGV4aXQuDQotLy8gICAgIExQQ1NUUiBwc3pTcmMsICAgICAgICAgICAgICAgICAgICAgICAvLyBObyBhbm5vdGF0aW9uIHJlcXVpcmVkLCBjb25zdCBpbXBsaWVzIF9faW4uDQotLy8gICAgIFVJTlQgY2NoTWF4LA0KLS8vICAgICBEV09SRCBkd0ZsYWdzDQotLy8gKTsNCi0vLw0KLS8vIEhSRVNVTFQgU0hMb2NhbEFsbG9jQnl0ZXMoDQotLy8gICAgIHNpemVfdCBjYiwNCi0vLyAgICAgX19kZXJlZl9iY291bnQoY2IpIFQgKipwcHYgICAgICAgICAgIC8vIEEgcG9pbnRlciB3aG9zZSBkZXJlZmVyZW5jZSB3aWxsIGJlIHNldCB0byBhbg0KLS8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB1bmluaXRpYWxpemVkIGJ1ZmZlciB3aXRoIGNiIGJ5dGVzLg0KLS8vICk7DQotLy8NCi0vLyBfX2lub3V0X2Jjb3VudF9mdWxsKGNiKSA6IEEgYnVmZmVyIHdpdGggY2IgZWxlbWVudHMgdGhhdCBpcyBmdWxseSBpbml0aWFsaXplZCBhdA0KLS8vICAgICBlbnRyeSBhbmQgZXhpdCwgYW5kIG1heSBiZSB3cml0dGVuIHRvIGJ5IHRoaXMgZnVuY3Rpb24uDQotLy8NCi0vLyBfX291dF9lY291bnRfcGFydChjb3VudCwgKmNvdW50T3V0KSA6IEEgYnVmZmVyIHdpdGggY291bnQgZWxlbWVudHMgdGhhdCB3aWxsIGJlDQotLy8gICAgIHBhcnRpYWxseSBpbml0aWFsaXplZCBieSB0aGlzIGZ1bmN0aW9uLiBUaGUgZnVuY3Rpb24gaW5kaWNhdGVzIGhvdyBtdWNoIGl0DQotLy8gICAgIGluaXRpYWxpemVkIGJ5IHNldHRpbmcgKmNvdW50T3V0Lg0KLS8vDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEFkdmFuY2VkIEFubm90YXRpb25zDQotLy8NCi0vLyBBZHZhbmNlZCBhbm5vdGF0aW9ucyBkZXNjcmliZSBiZWhhdmlvciB0aGF0IGlzIG5vdCBleHByZXNzaWJsZSB3aXRoIHRoZSByZWd1bGFyDQotLy8gYnVmZmVyIG1hY3Jvcy4gVGhlc2UgbWF5IGJlIHVzZWQgZWl0aGVyIHRvIGFubm90YXRlIGJ1ZmZlciBwYXJhbWV0ZXJzIHRoYXQgaW52b2x2ZQ0KLS8vIGNvbXBsZXggb3IgY29uZGl0aW9uYWwgYmVoYXZpb3IsIG9yIHRvIGVucmljaCBleGlzdGluZyBhbm5vdGF0aW9ucyB3aXRoIGFkZGl0aW9uYWwNCi0vLyBpbmZvcm1hdGlvbi4NCi0vLw0KLS8vIF9fc3VjY2VzcyhleHByKSBmIDoNCi0vLyAgICAgPGV4cHI+IGluZGljYXRlcyB3aGV0aGVyIGZ1bmN0aW9uIGYgc3VjY2VlZGVkIG9yIG5vdC4gSWYgPGV4cHI+IGlzIHRydWUgYXQgZXhpdCwNCi0vLyAgICAgYWxsIHRoZSBmdW5jdGlvbidzIGd1YXJhbnRlZXMgKGFzIGdpdmVuIGJ5IG90aGVyIGFubm90YXRpb25zKSBtdXN0IGhvbGQuIElmIDxleHByPg0KLS8vICAgICBpcyBmYWxzZSBhdCBleGl0LCB0aGUgY2FsbGVyIHNob3VsZCBub3QgZXhwZWN0IGFueSBvZiB0aGUgZnVuY3Rpb24ncyBndWFyYW50ZWVzDQotLy8gICAgIHRvIGhvbGQuIElmIG5vdCB1c2VkLCB0aGUgZnVuY3Rpb24gbXVzdCBhbHdheXMgc2F0aXNmeSBpdHMgZ3VhcmFudGVlcy4gQWRkZWQNCi0vLyAgICAgYXV0b21hdGljYWxseSB0byBmdW5jdGlvbnMgdGhhdCBpbmRpY2F0ZSBzdWNjZXNzIGluIHN0YW5kYXJkIHdheXMsIHN1Y2ggYXMgYnkNCi0vLyAgICAgcmV0dXJuaW5nIGFuIEhSRVNVTFQuDQotLy8NCi0vLyBfX291dF9hd2NvdW50KGV4cHIsIHNpemUpIHAgOg0KLS8vICAgICBQb2ludGVyIHAgaXMgYSBidWZmZXIgd2hvc2Ugc2l6ZSBtYXkgYmUgZ2l2ZW4gaW4gZWl0aGVyIGJ5dGVzIG9yIGVsZW1lbnRzLiBJZg0KLS8vICAgICA8ZXhwcj4gaXMgdHJ1ZSwgdGhpcyBhY3RzIGxpa2UgX19vdXRfYmNvdW50LiBJZiA8ZXhwcj4gaXMgZmFsc2UsIHRoaXMgYWN0cw0KLS8vICAgICBsaWtlIF9fb3V0X2Vjb3VudC4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHRvIGFubm90YXRlIG9sZCBBUElzLg0KLS8vDQotLy8gX19pbl9hd2NvdW50KGV4cHIsIHNpemUpIHAgOg0KLS8vICAgICBQb2ludGVyIHAgaXMgYSBidWZmZXIgd2hvc2Ugc2l6ZSBtYXkgYmUgZ2l2ZW4gaW4gZWl0aGVyIGJ5dGVzIG9yIGVsZW1lbnRzLiBJZg0KLS8vICAgICA8ZXhwcj4gaXMgdHJ1ZSwgdGhpcyBhY3RzIGxpa2UgX19pbl9iY291bnQuIElmIDxleHByPiBpcyBmYWxzZSwgdGhpcyBhY3RzDQotLy8gICAgIGxpa2UgX19pbl9lY291bnQuIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCB0byBhbm5vdGF0ZSBvbGQgQVBJcy4NCi0vLw0KLS8vIF9fbnVsbHRlcm1pbmF0ZWQgcCA6DQotLy8gICAgIFBvaW50ZXIgcCBpcyBhIGJ1ZmZlciB0aGF0IG1heSBiZSByZWFkIG9yIHdyaXR0ZW4gdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgZmlyc3QNCi0vLyAgICAgTlVMTCBjaGFyYWN0ZXIgb3IgcG9pbnRlci4gTWF5IGJlIHVzZWQgb24gdHlwZWRlZnMsIHdoaWNoIG1hcmtzIHZhbGlkIChwcm9wZXJseQ0KLS8vICAgICBpbml0aWFsaXplZCkgaW5zdGFuY2VzIG9mIHRoYXQgdHlwZSBhcyBiZWluZyBOVUxMLXRlcm1pbmF0ZWQuDQotLy8NCi0vLyBfX251bGxudWxsdGVybWluYXRlZCBwIDoNCi0vLyAgICAgUG9pbnRlciBwIGlzIGEgYnVmZmVyIHRoYXQgbWF5IGJlIHJlYWQgb3Igd3JpdHRlbiB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBmaXJzdA0KLS8vICAgICBzZXF1ZW5jZSBvZiB0d28gTlVMTCBjaGFyYWN0ZXJzIG9yIHBvaW50ZXJzLiBNYXkgYmUgdXNlZCBvbiB0eXBlZGVmcywgd2hpY2ggbWFya3MNCi0vLyAgICAgdmFsaWQgaW5zdGFuY2VzIG9mIHRoYXQgdHlwZSBhcyBiZWluZyBkb3VibGUtTlVMTCB0ZXJtaW5hdGVkLg0KLS8vDQotLy8gX19yZXNlcnZlZCB2IDoNCi0vLyAgICAgVmFsdWUgdiBtdXN0IGJlIDAvTlVMTCwgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuDQotLy8NCi0vLyBfX2NoZWNrUmV0dXJuIHYgOg0KLS8vICAgICBSZXR1cm4gdmFsdWUgdiBtdXN0IG5vdCBiZSBpZ25vcmVkIGJ5IGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbi4NCi0vLw0KLS8vIF9fdHlwZWZpeChjdHlwZSkgdiA6DQotLy8gICAgIFZhbHVlIHYgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gaW5zdGFuY2Ugb2YgY3R5cGUsIHJhdGhlciB0aGFuIGl0cyBkZWNsYXJlZCB0eXBlLg0KLS8vDQotLy8gX19vdmVycmlkZSBmIDoNCi0vLyAgICAgU3BlY2lmeSBDIy1zdHlsZSAnb3ZlcnJpZGUnIGJlaGF2aW91ciBmb3Igb3ZlcnJpZGluZyB2aXJ0dWFsIG1ldGhvZHMuDQotLy8NCi0vLyBfX2NhbGxiYWNrIGYgOg0KLS8vICAgICBGdW5jdGlvbiBmIGNhbiBiZSB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlci4NCi0vLw0KLS8vIF9fZm9ybWF0X3N0cmluZyBwIDoNCi0vLyAgICAgUG9pbnRlciBwIGlzIGEgc3RyaW5nIHRoYXQgY29udGFpbnMgJSBtYXJrZXJzIGluIHRoZSBzdHlsZSBvZiBwcmludGYuDQotLy8NCi0vLyBfX2Jsb2Nrc09uKHJlc291cmNlKSBmIDoNCi0vLyAgICAgRnVuY3Rpb24gZiBibG9ja3Mgb24gdGhlIHJlc291cmNlICdyZXNvdXJjZScuDQotLy8NCi0vLyBfX2ZhbGx0aHJvdWdoIDoNCi0vLyAgICAgQW5ub3RhdGVzIHN3aXRjaCBzdGF0ZW1lbnQgbGFiZWxzIHdoZXJlIGZhbGwtdGhyb3VnaCBpcyBkZXNpcmVkLCB0byBkaXN0aW5ndWlzaA0KLS8vICAgICBmcm9tIGZvcmdvdHRlbiBicmVhayBzdGF0ZW1lbnRzLg0KLS8vDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEFkdmFuY2VkIEFubm90YXRpb24gRXhhbXBsZXMNCi0vLw0KLS8vIF9fc3VjY2VzcyhyZXR1cm4gPT0gVFJVRSkgTFdTVERBUElfKEJPT0wpIA0KLS8vIFBhdGhDYW5vbmljYWxpemVBKF9fb3V0X2Vjb3VudChNQVhfUEFUSCkgTFBTVFIgcHN6QnVmLCBMUENTVFIgcHN6UGF0aCkgOg0KLS8vICAgICBwc3pCdWYgaXMgb25seSBndWFyYW50ZWVkIHRvIGJlIE5VTEwtdGVybWluYXRlZCB3aGVuIFRSVUUgaXMgcmV0dXJuZWQuDQotLy8NCi0vLyB0eXBlZGVmIF9fbnVsbHRlcm1pbmF0ZWQgV0NIQVIqIExQV1NUUiA6IEluaXRpYWxpemVkIExQV1NUUnMgYXJlIE5VTEwtdGVybWluYXRlZCBzdHJpbmdzLg0KLS8vDQotLy8gX19vdXRfZWNvdW50KGNjaCkgX190eXBlZml4KExQV1NUUikgdm9pZCAqcHN6IDogcHN6IGlzIGEgYnVmZmVyIHBhcmFtZXRlciB3aGljaCB3aWxsIGJlDQotLy8gICAgIGEgTlVMTC10ZXJtaW5hdGVkIFdDSEFSIHN0cmluZyBhdCBleGl0LCBhbmQgd2hpY2ggaW5pdGlhbGx5IGNvbnRhaW5zIGNjaCBXQ0hBUnMuDQotLy8NCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotLy8gQEBFTkRfRERLU1BMSVQNCi0NCi0jaWYgX01TQ19WRVIgPiAxMDAwDQotI3ByYWdtYSBvbmNlDQotI2VuZGlmICAvLyAjaWYgX01TQ19WRVIgPiAxMDAwDQotDQotI2RlZmluZSBfX3NwZWNzdHJpbmdzDQotDQotI2lmZGVmICBfX2NwbHVzcGx1cw0KLSNpZm5kZWYgX19ub3Rocm93DQotIyBkZWZpbmUgX19ub3Rocm93IF9fZGVjbHNwZWMobm90aHJvdykNCi0jZW5kaWYNCi1leHRlcm4gIkMiIHsNCi0jZWxzZQ0KLSNpZm5kZWYgX19ub3Rocm93DQotIyBkZWZpbmUgX19ub3Rocm93DQotI2VuZGlmDQotI2VuZGlmICAvLyAjaWZkZWYgX19jcGx1c3BsdXMNCi0NCi0vLyBAQEJFR0lOX0RES1NQTElUDQotDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEhlbHBlciBNYWNybyBEZWZpbml0aW9ucw0KLS8vDQotLy8gVGhlc2UgZXhwcmVzcyBiZWhhdmlvciBjb21tb24gdG8gbWFueSBvZiB0aGUgaGlnaC1sZXZlbCBhbm5vdGF0aW9ucy4NCi0vLyBETyBOT1QgVVNFIFRIRVNFIElOIFlPVVIgQ09ERS4NCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotLy8gVGhlIGhlbHBlciBhbm5vdGF0aW9ucyBhcmUgb25seSB1bmRlcnN0b29kIGJ5IHRoZSBjb21waWxlciB2ZXJzaW9uIHVzZWQgYnkgdmFyaW91cw0KLS8vIGRlZmVjdCBkZXRlY3Rpb24gdG9vbHMuIFdoZW4gdGhlIHJlZ3VsYXIgY29tcGlsZXIgaXMgcnVubmluZywgdGhleSBhcmUgZGVmaW5lZCBpbnRvDQotLy8gbm90aGluZywgYW5kIGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGNvZGUuDQotI2lmIChfTVNDX1ZFUiA+PSAxMDAwKSAmJiAhZGVmaW5lZChNSURMX1BBU1MpICYmIGRlZmluZWQoX1BSRUZBU1RfKQ0KLQ0KLSAgICAvLyBJbiB0aGUgcHJpbWl0aXZlIF9fZGVjbHNwZWMoIlNBTF8qIikgYW5ub3RhdGlvbnMgIlNBTCIgc3RhbmRzIGZvciBTdGFuZGFyZA0KLSAgICAvLyBBbm5vdGF0aW9uIExhbmd1YWdlLiAgVGhlc2UgX19kZWNsc3BlYygiU0FMXyoiKSBhbm5vdGF0aW9ucyBhcmUgdGhlDQotICAgIC8vIHByaW1pdGl2ZXMgdGhlIGNvbXBpbGVyIHVuZGVyc3RhbmRzIGFuZCBhbGwgaGlnaC1sZXZlbCBTcGVjU3RyaW5nIE1BQ1JPcw0KLSAgICAvLyB3aWxsIGRlY29tcG9zZSBpbnRvIHRoZXNlIHByaW1pdmF0ZXMuDQotDQotICAgICNkZWZpbmUgU1BFQ1NUUklOR0laRSggeCApICN4DQotDQotICAgIC8vDQotICAgIC8vIF9fbnVsbCBwDQotICAgIC8vIF9fbm90bnVsbCBwDQotICAgIC8vIF9fbWF5YmVudWxsIHANCi0gICAgLy8NCi0gICAgLy8gQW5ub3RhdGVzIGEgcG9pbnRlciBwLiBTdGF0ZXMgdGhhdCBwb2ludGVyIHAgaXMgbnVsbC4gQ29tbW9ubHkgdXNlZA0KLSAgICAvLyBpbiB0aGUgbmVnYXRlZCBmb3JtIF9fbm90bnVsbCBvciB0aGUgcG9zc2libHkgbnVsbCBmb3JtIF9fbWF5YmVudWxsLg0KLSAgICAvLw0KLSAgICAjZGVmaW5lIF9fbnVsbCAgICAgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF9udWxsIikNCi0gICAgI2RlZmluZSBfX25vdG51bGwgICAgICAgICAgICAgICBfX2RlY2xzcGVjKCJTQUxfbm90bnVsbCIpDQotICAgICNkZWZpbmUgX19tYXliZW51bGwgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX21heWJlbnVsbCIpDQotDQotICAgIC8vDQotICAgIC8vIF9fcmVhZG9ubHkgbA0KLSAgICAvLyBfX25vdHJlYWRvbmx5IGwNCi0gICAgLy8gX19tYWJ5ZXJlYWRvbmx5IGwNCi0gICAgLy8NCi0gICAgLy8gQW5ub3RhdGVzIGEgbG9jYXRpb24gbC4gU3RhdGVzIHRoYXQgbG9jYXRpb24gbCBpcyBub3QgbW9kaWZpZWQgYWZ0ZXINCi0gICAgLy8gdGhpcyBwb2ludC4gIElmIHRoZSBhbm5vdGF0aW9uIGlzIHBsYWNlZCBvbiB0aGUgcHJlY29uZGl0aW9uIHN0YXRlIG9mDQotICAgIC8vIGEgZnVuY3Rpb24sIHRoZSByZXN0cmljdGlvbiBvbmx5IGFwcGxpZXMgdW50aWwgdGhlIHBvc3Rjb25kaXRpb24gc3RhdGUNCi0gICAgLy8gb2YgdGhlIGZ1bmN0aW9uLiAgX19tYXliZXJlYWRvbmx5IHN0YXRlcyB0aGF0IHRoZSBhbm5vdGF0ZWQgbG9jYXRpb24NCi0gICAgLy8gbWF5IGJlIG1vZGlmaWVkLCB3aGVyZWFzIF9fbm90cmVhZG9ubHkgc3RhdGVzIHRoYXQgYSBsb2NhdGlvbiBtdXN0IGJlDQotICAgIC8vIG1vZGlmaWVkLg0KLSAgICAvLw0KLSAgICAjZGVmaW5lIF9fcmVhZG9ubHkgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF9yZWFkb25seSIpDQotICAgICNkZWZpbmUgX19ub3RyZWFkb25seSAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX25vdHJlYWRvbmx5IikNCi0gICAgI2RlZmluZSBfX21heWJlcmVhZG9ubHkgICAgICAgICBfX2RlY2xzcGVjKCJTQUxfbWF5YmVyZWFkb25seSIpDQotDQotICAgIC8vDQotICAgIC8vIF9fdmFsaWQgdg0KLSAgICAvLyBfX25vdHZhbGlkIHYNCi0gICAgLy8gX19tYXliZXZhbGlkIHYNCi0gICAgLy8NCi0gICAgLy8gQW5ub3RhdGVzIGFueSB2YWx1ZSB2LiBTdGF0ZXMgdGhhdCB0aGUgdmFsdWUgc2F0aXNmaWVzIGFsbCBwcm9wZXJ0aWVzIG9mDQotICAgIC8vIHZhbGlkIHZhbHVlcyBvZiBpdHMgdHlwZS4gRm9yIGV4YW1wbGUsIGZvciBhIHN0cmluZyBidWZmZXIsIHZhbGlkIG1lYW5zDQotICAgIC8vIHRoYXQgdGhlIGJ1ZmZlciBwb2ludGVyIGlzIGVpdGhlciBOVUxMIG9yIHBvaW50cyB0byBhIE5VTEwtdGVybWluYXRlZCBzdHJpbmcuDQotICAgIC8vDQotICAgICNkZWZpbmUgX192YWxpZCAgICAgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX3ZhbGlkIikNCi0gICAgI2RlZmluZSBfX25vdHZhbGlkICAgICAgICAgICAgICBfX2RlY2xzcGVjKCJTQUxfbm90dmFsaWQiKQ0KLSAgICAjZGVmaW5lIF9fbWF5YmV2YWxpZCAgICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF9tYXliZXZhbGlkIikNCi0NCi0gICAgLy8NCi0gICAgLy8gX19yZWFkYWJsZVRvKGV4dGVudCkgcA0KLSAgICAvLw0KLSAgICAvLyBBbm5vdGF0ZXMgYSBidWZmZXIgcG9pbnRlciBwLiAgSWYgdGhlIGJ1ZmZlciBjYW4gYmUgcmVhZCwgZXh0ZW50IGRlc2NyaWJlcw0KLSAgICAvLyBob3cgbXVjaCBvZiB0aGUgYnVmZmVyIGlzIHJlYWRhYmxlLiBGb3IgYSByZWFkZXIgb2YgdGhlIGJ1ZmZlciwgdGhpcyBpcw0KLSAgICAvLyBhbiBleHBsaWNpdCBwZXJtaXNzaW9uIHRvIHJlYWQgdXAgdG8gdGhhdCBhbW91bnQsIHJhdGhlciB0aGFuIGEgcmVzdHJpY3Rpb24gdG8NCi0gICAgLy8gcmVhZCBvbmx5IHVwIHRvIGl0Lg0KLSAgICAvLw0KLSAgICAjZGVmaW5lIF9fcmVhZGFibGVUbyhleHRlbnQpICAgIF9fZGVjbHNwZWMoIlNBTF9yZWFkYWJsZVRvKCJTUEVDU1RSSU5HSVpFKGV4dGVudCkiKSIpDQotDQotICAgIC8vDQotICAgIC8vIF9fZWxlbV9yZWFkYWJsZVRvKHNpemUpDQotICAgIC8vDQotICAgIC8vIEFubm90YXRlcyBhIGJ1ZmZlciBwb2ludGVyIHAgYXMgYmVpbmcgcmVhZGFibGUgdG8gc2l6ZSBlbGVtZW50cy4NCi0gICAgLy8NCi0gICAgI2RlZmluZSBfX2VsZW1fcmVhZGFibGVUbyhzaXplKSAgIF9fZGVjbHNwZWMoIlNBTF9yZWFkYWJsZVRvKGVsZW1lbnRDb3VudCgiU1BFQ1NUUklOR0laRShzaXplKSIpKSIpDQotICAgIA0KLSAgICAvLw0KLSAgICAvLyBfX2J5dGVfcmVhZGFibGVUbyhzaXplKQ0KLSAgICAvLw0KLSAgICAvLyBBbm5vdGF0ZXMgYSBidWZmZXIgcG9pbnRlciBwIGFzIGJlaW5nIHJlYWRhYmxlIHRvIHNpemUgYnl0ZXMuDQotICAgIC8vDQotICAgICNkZWZpbmUgX19ieXRlX3JlYWRhYmxlVG8oc2l6ZSkgICBfX2RlY2xzcGVjKCJTQUxfcmVhZGFibGVUbyhieXRlQ291bnQoIlNQRUNTVFJJTkdJWkUoc2l6ZSkiKSkiKQ0KLSAgICANCi0gICAgLy8NCi0gICAgLy8gX193cml0YWJsZVRvKGV4dGVudCkgcA0KLSAgICAvLw0KLSAgICAvLyBBbm5vdGF0ZXMgYSBidWZmZXIgcG9pbnRlciBwLiBJZiB0aGUgYnVmZmVyIGNhbiBiZSBtb2RpZmllZCwgZXh0ZW50DQotICAgIC8vIGRlc2NyaWJlcyBob3cgbXVjaCBvZiB0aGUgYnVmZmVyIGlzIHdyaXRhYmxlICh1c3VhbGx5IHRoZSBhbGxvY2F0aW9uDQotICAgIC8vIHNpemUpLiBGb3IgYSB3cml0ZXIgb2YgdGhlIGJ1ZmZlciwgdGhpcyBpcyBhbiBleHBsaWNpdCBwZXJtaXNzaW9uIHRvDQotICAgIC8vIHdyaXRlIHVwIHRvIHRoYXQgYW1vdW50LCByYXRoZXIgdGhhbiBhIHJlc3RyaWN0aW9uIHRvIHdyaXRlIG9ubHkgdXAgdG8gaXQuDQotICAgIC8vDQotICAgICNkZWZpbmUgX193cml0YWJsZVRvKHNpemUpICAgX19kZWNsc3BlYygiU0FMX3dyaXRhYmxlVG8oIlNQRUNTVFJJTkdJWkUoc2l6ZSkiKSIpDQotDQotICAgIC8vDQotICAgIC8vIF9fZWxlbV93cml0YWJsZVRvKHNpemUpDQotICAgIC8vDQotICAgIC8vIEFubm90YXRlcyBhIGJ1ZmZlciBwb2ludGVyIHAgYXMgYmVpbmcgd3JpdGFibGUgdG8gc2l6ZSBlbGVtZW50cy4NCi0gICAgLy8NCi0gICAgI2RlZmluZSBfX2VsZW1fd3JpdGFibGVUbyhzaXplKSAgIF9fZGVjbHNwZWMoIlNBTF93cml0YWJsZVRvKGVsZW1lbnRDb3VudCgiU1BFQ1NUUklOR0laRShzaXplKSIpKSIpDQotICAgIA0KLSAgICAvLw0KLSAgICAvLyBfX2J5dGVfd3JpdGFibGVUbyhzaXplKQ0KLSAgICAvLw0KLSAgICAvLyBBbm5vdGF0ZXMgYSBidWZmZXIgcG9pbnRlciBwIGFzIGJlaW5nIHdyaXRhYmxlIHRvIHNpemUgYnl0ZXMuDQotICAgIC8vDQotICAgICNkZWZpbmUgX19ieXRlX3dyaXRhYmxlVG8oc2l6ZSkgICBfX2RlY2xzcGVjKCJTQUxfd3JpdGFibGVUbyhieXRlQ291bnQoIlNQRUNTVFJJTkdJWkUoc2l6ZSkiKSkiKQ0KLQ0KLSAgICAvLw0KLSAgICAvLyBfX2RlcmVmIHANCi0gICAgLy8NCi0gICAgLy8gQW5ub3RhdGVzIGEgcG9pbnRlciBwLiBUaGUgbmV4dCBhbm5vdGF0aW9uIGFwcGxpZXMgb25lIGRlcmVmZXJlbmNlIGRvd24NCi0gICAgLy8gaW4gdGhlIHR5cGUuIElmIHJlYWRhYmxlVG8ocCwgc2l6ZSkgdGhlbiB0aGUgbmV4dCBhbm5vdGF0aW9uIGFwcGxpZXMgdG8NCi0gICAgLy8gYWxsIGVsZW1lbnRzICoocCtpKSBmb3Igd2hpY2ggaSBzYXRpc2ZpZXMgdGhlIHNpemUuIElmIHAgaXMgYSBwb2ludGVyDQotICAgIC8vIHRvIGEgc3RydWN0LCB0aGUgbmV4dCBhbm5vdGF0aW9uIGFwcGxpZXMgdG8gYWxsIGZpZWxkcyBvZiB0aGUgc3RydWN0Lg0KLSAgICAvLw0KLSAgICAjZGVmaW5lIF9fZGVyZWYgICAgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF9kZXJlZiIpDQotICAgIA0KLSAgICAvLw0KLSAgICAvLyBfX3ByZSBfX25leHRfYW5ub3RhdGlvbg0KLSAgICAvLw0KLSAgICAvLyBUaGUgbmV4dCBhbm5vdGF0aW9uIGFwcGxpZXMgaW4gdGhlIHByZWNvbmRpdGlvbiBzdGF0ZQ0KLSAgICAvLw0KLSAgICAjZGVmaW5lIF9fcHJlICAgICAgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF9wcmUiKQ0KLSAgICANCi0gICAgLy8NCi0gICAgLy8gX19wb3N0IF9fbmV4dF9hbm5vdGF0aW9uDQotICAgIC8vDQotICAgIC8vIFRoZSBuZXh0IGFubm90YXRpb24gYXBwbGllcyBpbiB0aGUgcG9zdGNvbmRpdGlvbiBzdGF0ZQ0KLSAgICAvLw0KLSAgICAjZGVmaW5lIF9fcG9zdCAgICAgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF9wb3N0IikNCi0gICAgDQotICAgIC8vDQotICAgIC8vIF9fcHJlY29uZCg8ZXhwcj4pDQotICAgIC8vDQotICAgIC8vIFdoZW4gPGV4cHI+IGlzIHRydWUsIHRoZSBuZXh0IGFubm90YXRpb24gYXBwbGllcyBpbiB0aGUgcHJlY29uZGl0aW9uIHN0YXRlDQotICAgIC8vIChjdXJyZW50bHkgbm90IGVuYWJsZWQpDQotICAgIC8vDQotICAgICNkZWZpbmUgX19wcmVjb25kKGV4cHIpICAgICAgICAgX19wcmUNCi0NCi0gICAgLy8NCi0gICAgLy8gX19wb3N0Y29uZCg8ZXhwcj4pDQotICAgIC8vDQotICAgIC8vIFdoZW4gPGV4cHI+IGlzIHRydWUsIHRoZSBuZXh0IGFubm90YXRpb24gYXBwbGllcyBpbiB0aGUgcG9zdGNvbmRpdGlvbiBzdGF0ZQ0KLSAgICAvLyAoY3VycmVudGx5IG5vdCBlbmFibGVkKQ0KLSAgICAvLw0KLSAgICAjZGVmaW5lIF9fcG9zdGNvbmQoZXhwcikgICAgICAgIF9fcG9zdA0KLQ0KLSAgICAvLw0KLSAgICAvLyBfX2V4Y2VwdHRoYXQNCi0gICAgLy8NCi0gICAgLy8gR2l2ZW4gYSBzZXQgb2YgYW5ub3RhdGlvbnMgUSBjb250YWluaW5nIF9fZXhjZXB0dGhhdCBtYXliZVAsIHRoZSBlZmZlY3Qgb2YNCi0gICAgLy8gdGhlIGV4Y2VwdCBjbGF1c2UgaXMgdG8gZXJhc2UgYW55IFAgb3Igbm90UCBhbm5vdGF0aW9ucyAoZXhwbGljaXQgb3INCi0gICAgLy8gaW1wbGllZCkgd2l0aGluIFEgYXQgdGhlIHNhbWUgbGV2ZWwgb2YgZGVyZWZlcmVuY2luZyB0aGF0IHRoZSBleGNlcHQNCi0gICAgLy8gY2xhdXNlIGFwcGVhcnMsIGFuZCB0byByZXBsYWNlIGl0IHdpdGggbWF5YmVQLg0KLSAgICAvLw0KLSAgICAvLyAgRXhhbXBsZSAxOiBfX3ZhbGlkIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbCBvbiBhIHBvaW50ZXIgcCBtZWFucyB0aGF0IHRoZQ0KLSAgICAvLyAgICAgICAgICAgICBwb2ludGVyIG1heSBiZSBudWxsLCBhbmQgaXMgb3RoZXJ3aXNlIHZhbGlkLCB0aHVzIG92ZXJyaWRpbmcNCi0gICAgLy8gICAgICAgICAgICAgdGhlIGltcGxpY2l0IG5vdG51bGwgYW5ub3RhdGlvbiBpbXBsaWVkIGJ5IF9fdmFsaWQgb24NCi0gICAgLy8gICAgICAgICAgICAgcG9pbnRlcnMuDQotICAgIC8vDQotICAgIC8vICBFeGFtcGxlIDI6IF9fdmFsaWQgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwgb24gYW4gaW50ICoqcCBtZWFucw0KLSAgICAvLyAgICAgICAgICAgICB0aGF0IHAgaXMgbm90IG51bGwgKGltcGxpZWQgYnkgdmFsaWQpLCBidXQgdGhlIGVsZW1lbnRzDQotICAgIC8vICAgICAgICAgICAgIHBvaW50ZWQgdG8gYnkgcCBjb3VsZCBiZSBudWxsLCBhbmQgYXJlIG90aGVyd2lzZSB2YWxpZC4gDQotICAgIC8vDQotICAgICNkZWZpbmUgX19leGNlcHR0aGF0ICAgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF9leGNlcHQiKQ0KLQ0KLSAgICAvLw0KLSAgICAvLyBfcmVmcGFyYW0NCi0gICAgLy8NCi0gICAgLy8gQWRkZWQgdG8gYWxsIG91dCBwYXJhbWV0ZXIgbWFjcm9zIHRvIGluZGljYXRlIHRoYXQgdGhleSBhcmUgYWxsIHJlZmVyZW5jZQ0KLSAgICAvLyBwYXJhbWV0ZXJzLg0KLSAgICAvLw0KLSAgICAjZGVmaW5lIF9fcmVmcGFyYW0gICAgICAgICAgICAgICAgICBfX2RlcmVmIF9fbm90cmVhZG9ubHkNCi0NCi0gICAgLy8NCi0gICAgLy8gX19pbm5lcl8qDQotICAgIC8vDQotICAgIC8vIEhlbHBlciBtYWNyb3MgdGhhdCBkaXJlY3RseSBjb3JyZXNwb25kIHRvIGNlcnRhaW4gaGlnaC1sZXZlbCBhbm5vdGF0aW9ucy4NCi0gICAgLy8NCi0gICAgLy8NCi0NCi0gICAgLy8gTWFjcm9zIHRvIGNsYXNzaWZ5IHRoZSBlbnRyeXBvaW50cyBhbmQgaW5kaWNhdGUgdGhlaXIgY2F0ZWdvcnkuDQotICAgIC8vDQotICAgIC8vDQotICAgIC8vIFByZS1kZWZpbmVkIGNvbnRyb2wgcG9pbnQgY2F0ZWdvcmllcyBpbmNsdWRlOiBSUEMsIExQQywgRGV2aWNlRHJpdmVyLCBVc2VyVG9LZXJuZWwsIElTQVBJLCBDT00uDQotICAgIC8vDQotICAgICNkZWZpbmUgX19pbm5lcl9jb250cm9sX2VudHJ5cG9pbnQoY2F0ZWdvcnkpIF9fZGVjbHNwZWMoIlNBTF9lbnRyeXBvaW50KGNvbnRyb2xFbnRyeSwgIlNQRUNTVFJJTkdJWkUoY2F0ZWdvcnkpIikiKQ0KLQ0KLSAgICAvLw0KLSAgICAvLyBQcmUtZGVmaW5lZCBkYXRhIGVudHJ5IHBvaW50IGNhdGVnb3JpZXMgaW5jbHVkZTogUmVnaXN0cnksIEZpbGUsIE5ldHdvcmsuDQotICAgIC8vDQotICAgICNkZWZpbmUgX19pbm5lcl9kYXRhX2VudHJ5cG9pbnQoY2F0ZWdvcnkpICAgIF9fZGVjbHNwZWMoIlNBTF9lbnRyeXBvaW50KGRhdGFFbnRyeSwgIlNQRUNTVFJJTkdJWkUoY2F0ZWdvcnkpIikiKQ0KLQ0KLSAgICAjZGVmaW5lIF9faW5uZXJfc3VjY2VzcyhleHByKSAgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF9zdWNjZXNzKCJTUEVDU1RSSU5HSVpFKGV4cHIpIikiKQ0KLSAgICAjZGVmaW5lIF9faW5uZXJfY2hlY2tSZXR1cm4gICAgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF9jaGVja1JldHVybiIpDQotICAgICNkZWZpbmUgX19pbm5lcl90eXBlZml4KGN0eXBlKSAgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX3R5cGVmaXgoIlNQRUNTVFJJTkdJWkUoY3R5cGUpIikiKQ0KLSAgICAjZGVmaW5lIF9faW5uZXJfb3ZlcnJpZGUgICAgICAgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIl9fb3ZlcnJpZGUiKQ0KLSAgICAjZGVmaW5lIF9faW5uZXJfY2FsbGJhY2sgICAgICAgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIl9fY2FsbGJhY2siKQ0KLSAgICAjZGVmaW5lIF9faW5uZXJfYmxvY2tzT24ocmVzb3VyY2UpICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF9ibG9ja3NPbigiU1BFQ1NUUklOR0laRShyZXNvdXJjZSkiKSIpDQotICAgICNkZWZpbmUgX19pbm5lcl9mYWxsdGhyb3VnaF9kZWMgICAgICAgICAgICAgX19pbmxpbmUgX19ub3Rocm93IHZvaWQgX19GYWxsVGhyb3VnaCgpIHt9DQotICAgICNkZWZpbmUgX19pbm5lcl9mYWxsdGhyb3VnaCAgICAgICAgICAgICAgICAgX19GYWxsVGhyb3VnaCgpOw0KLQ0KLSNlbHNlDQotDQotLy8gQEBFTkRfRERLU1BMSVQNCi0NCi0jaWZuZGVmIF9fbnVsbA0KLSAgICAjZGVmaW5lIF9fbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19ub3RudWxsDQotICAgICNkZWZpbmUgX19ub3RudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX21heWJlbnVsbA0KLSAgICAjZGVmaW5lIF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX3JlYWRvbmx5DQotICAgICNkZWZpbmUgX19yZWFkb25seQ0KLSNlbmRpZg0KLSNpZm5kZWYgX19ub3RyZWFkb25seQ0KLSAgICAjZGVmaW5lIF9fbm90cmVhZG9ubHkNCi0jZW5kaWYNCi0jaWZuZGVmIF9fbWF5YmVyZWFkb25seQ0KLSAgICAjZGVmaW5lIF9fbWF5YmVyZWFkb25seQ0KLSNlbmRpZg0KLSNpZm5kZWYgX192YWxpZA0KLSAgICAjZGVmaW5lIF9fdmFsaWQNCi0jZW5kaWYNCi0jaWZuZGVmIF9fbm90dmFsaWQNCi0gICAgI2RlZmluZSBfX25vdHZhbGlkDQotI2VuZGlmDQotI2lmbmRlZiBfX21heWJldmFsaWQNCi0gICAgI2RlZmluZSBfX21heWJldmFsaWQNCi0jZW5kaWYNCi0jaWZuZGVmIF9fcmVhZGFibGVUbw0KLSAgICAjZGVmaW5lIF9fcmVhZGFibGVUbyhleHRlbnQpDQotI2VuZGlmDQotI2lmbmRlZiBfX2VsZW1fcmVhZGFibGVUbw0KLSAgICAjZGVmaW5lIF9fZWxlbV9yZWFkYWJsZVRvKHNpemUpDQotI2VuZGlmDQotI2lmbmRlZiBfX2J5dGVfcmVhZGFibGVUbw0KLSAgICAjZGVmaW5lIF9fYnl0ZV9yZWFkYWJsZVRvKHNpemUpDQotI2VuZGlmDQotI2lmbmRlZiBfX3dyaXRhYmxlVG8NCi0gICAgI2RlZmluZSBfX3dyaXRhYmxlVG8oc2l6ZSkNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZWxlbV93cml0YWJsZVRvDQotICAgICNkZWZpbmUgX19lbGVtX3dyaXRhYmxlVG8oc2l6ZSkNCi0jZW5kaWYNCi0jaWZuZGVmIF9fYnl0ZV93cml0YWJsZVRvDQotICAgICNkZWZpbmUgX19ieXRlX3dyaXRhYmxlVG8oc2l6ZSkNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWYNCi0gICAgI2RlZmluZSBfX2RlcmVmDQotI2VuZGlmDQotI2lmbmRlZiBfX3ByZQ0KLSAgICAjZGVmaW5lIF9fcHJlDQotI2VuZGlmDQotI2lmbmRlZiBfX3Bvc3QNCi0gICAgI2RlZmluZSBfX3Bvc3QNCi0jZW5kaWYNCi0jaWZuZGVmIF9fcHJlY29uZA0KLSAgICAjZGVmaW5lIF9fcHJlY29uZChleHByKQ0KLSNlbmRpZg0KLSNpZm5kZWYgX19wb3N0Y29uZA0KLSAgICAjZGVmaW5lIF9fcG9zdGNvbmQoZXhwcikNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZXhjZXB0dGhhdA0KLSAgICAjZGVmaW5lIF9fZXhjZXB0dGhhdA0KLSNlbmRpZg0KLSNpZm5kZWYgX19pbm5lcl9zdWNjZXNzDQotICAgICNkZWZpbmUgX19pbm5lcl9zdWNjZXNzKGV4cHIpDQotI2VuZGlmDQotI2lmbmRlZiBfX2lubmVyX2NoZWNrUmV0dXJuDQotICAgICNkZWZpbmUgX19pbm5lcl9jaGVja1JldHVybg0KLSNlbmRpZg0KLSNpZm5kZWYgX19pbm5lcl90eXBlZml4DQotICAgICNkZWZpbmUgX19pbm5lcl90eXBlZml4KGN0eXBlKQ0KLSNlbmRpZg0KLSNpZm5kZWYgX19pbm5lcl9vdmVycmlkZQ0KLSAgICAjZGVmaW5lIF9faW5uZXJfb3ZlcnJpZGUNCi0jZW5kaWYNCi0jaWZuZGVmIF9faW5uZXJfY2FsbGJhY2sNCi0gICAgI2RlZmluZSBfX2lubmVyX2NhbGxiYWNrDQotI2VuZGlmDQotI2lmbmRlZiBfX2lubmVyX2Jsb2Nrc09uDQotICAgICNkZWZpbmUgX19pbm5lcl9ibG9ja3NPbihyZXNvdXJjZSkNCi0jZW5kaWYNCi0jaWZuZGVmIF9faW5uZXJfZmFsbHRocm91Z2hfZGVjDQotICAgICNkZWZpbmUgX19pbm5lcl9mYWxsdGhyb3VnaF9kZWMNCi0jZW5kaWYNCi0jaWZuZGVmIF9faW5uZXJfZmFsbHRocm91Z2gNCi0gICAgI2RlZmluZSBfX2lubmVyX2ZhbGx0aHJvdWdoDQotI2VuZGlmDQotI2lmbmRlZiBfX3JlZnBhcmFtDQotICAgICNkZWZpbmUgX19yZWZwYXJhbQ0KLSNlbmRpZg0KLSNpZm5kZWYgX19pbm5lcl9jb250cm9sX2VudHJ5cG9pbnQNCi0gICAgI2RlZmluZSBfX2lubmVyX2NvbnRyb2xfZW50cnlwb2ludChjYXRlZ29yeSkNCi0jZW5kaWYNCi0jaWZuZGVmIF9faW5uZXJfZGF0YV9lbnRyeXBvaW50DQotICAgICNkZWZpbmUgX19pbm5lcl9kYXRhX2VudHJ5cG9pbnQoY2F0ZWdvcnkpDQotI2VuZGlmDQotLy8gQEBCRUdJTl9EREtTUExJVA0KLSNlbmRpZiAvLyAjaWYgKF9NU0NfVkVSID49IDEwMDApICYmICFkZWZpbmVkKE1JRExfUEFTUykgJiYgZGVmaW5lZChfUFJFRkFTVF8pDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEJ1ZmZlciBBbm5vdGF0aW9uIERlZmluaXRpb25zDQotLy8NCi0vLyBBbnkgb2YgdGhlc2UgbWF5IGJlIHVzZWQgdG8gZGlyZWN0bHkgYW5ub3RhdGUgZnVuY3Rpb25zLCBidXQgb25seSBvbmUgc2hvdWxkDQotLy8gYmUgdXNlZCBmb3IgZWFjaCBwYXJhbWV0ZXIuIFRvIGRldGVybWluZSB3aGljaCBhbm5vdGF0aW9uIHRvIHVzZSBmb3IgYSBnaXZlbg0KLS8vIGJ1ZmZlciwgdXNlIHRoZSB0YWJsZSBpbiB0aGUgYnVmZmVyIGFubm90YXRpb25zIHNlY3Rpb24uDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLS8vIEBARU5EX0RES1NQTElUDQotDQotI2lmbmRlZiBfX2Vjb3VudA0KLSNkZWZpbmUgX19lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25vdG51bGwgX19lbGVtX3dyaXRhYmxlVG8oc2l6ZSkNCi0jZW5kaWYNCi0jaWZuZGVmIF9fYmNvdW50DQotI2RlZmluZSBfX2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbm90bnVsbCBfX2J5dGVfd3JpdGFibGVUbyhzaXplKQ0KLSNlbmRpZg0KLSNpZm5kZWYgX19pbg0KLSNkZWZpbmUgX19pbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZSBfX3ZhbGlkIF9fcHJlIF9fZGVyZWYgX19yZWFkb25seQ0KLSNlbmRpZg0KLSNpZm5kZWYgX19pbl9lY291bnQNCi0jZGVmaW5lIF9faW5fZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbiBfX3ByZSBfX2VsZW1fcmVhZGFibGVUbyhzaXplKQ0KLSNlbmRpZg0KLSNpZm5kZWYgX19pbl9iY291bnQNCi0jZGVmaW5lIF9faW5fYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbiBfX3ByZSBfX2J5dGVfcmVhZGFibGVUbyhzaXplKQ0KLSNlbmRpZg0KLSNpZm5kZWYgX19vdXQNCi0jZGVmaW5lIF9fb3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lY291bnQoMSkgX19wb3N0IF9fdmFsaWQgX19yZWZwYXJhbQ0KLSNlbmRpZg0KLSNpZm5kZWYgX19vdXRfZWNvdW50DQotI2RlZmluZSBfX291dF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZWNvdW50KHNpemUpIF9fcG9zdCBfX3ZhbGlkIF9fcmVmcGFyYW0NCi0jZW5kaWYNCi0jaWZuZGVmIF9fb3V0X2Jjb3VudA0KLSNkZWZpbmUgX19vdXRfYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Jjb3VudChzaXplKSBfX3Bvc3QgX192YWxpZCBfX3JlZnBhcmFtDQotI2VuZGlmDQotI2lmbmRlZiBfX291dF9lY291bnRfcGFydA0KLSNkZWZpbmUgX19vdXRfZWNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9lY291bnQoc2l6ZSkgX19wb3N0IF9fZWxlbV9yZWFkYWJsZVRvKGxlbmd0aCkNCi0jZW5kaWYNCi0jaWZuZGVmIF9fb3V0X2Jjb3VudF9wYXJ0DQotI2RlZmluZSBfX291dF9iY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Jjb3VudChzaXplKSBfX3Bvc3QgX19ieXRlX3JlYWRhYmxlVG8obGVuZ3RoKQ0KLSNlbmRpZg0KLSNpZm5kZWYgX19vdXRfZWNvdW50X2Z1bGwNCi0jZGVmaW5lIF9fb3V0X2Vjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZWNvdW50X3BhcnQoc2l6ZSxzaXplKQ0KLSNlbmRpZg0KLSNpZm5kZWYgX19vdXRfYmNvdW50X2Z1bGwNCi0jZGVmaW5lIF9fb3V0X2Jjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfYmNvdW50X3BhcnQoc2l6ZSxzaXplKQ0KLSNlbmRpZg0KLSNpZm5kZWYgX19pbm91dA0KLSNkZWZpbmUgX19pbm91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZSBfX3ZhbGlkIF9fcG9zdCBfX3ZhbGlkIF9fcmVmcGFyYW0NCi0jZW5kaWYNCi0jaWZuZGVmIF9faW5vdXRfZWNvdW50DQotI2RlZmluZSBfX2lub3V0X2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Vjb3VudChzaXplKSBfX3ByZSBfX3ZhbGlkDQotI2VuZGlmDQotI2lmbmRlZiBfX2lub3V0X2Jjb3VudA0KLSNkZWZpbmUgX19pbm91dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9iY291bnQoc2l6ZSkgX19wcmUgX192YWxpZA0KLSNlbmRpZg0KLSNpZm5kZWYgX19pbm91dF9lY291bnRfcGFydA0KLSNkZWZpbmUgX19pbm91dF9lY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9lY291bnRfcGFydChzaXplLGxlbmd0aCkgX19wcmUgX192YWxpZCBfX3ByZSBfX2VsZW1fcmVhZGFibGVUbyhsZW5ndGgpDQotI2VuZGlmDQotI2lmbmRlZiBfX2lub3V0X2Jjb3VudF9wYXJ0DQotI2RlZmluZSBfX2lub3V0X2Jjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Jjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSBfX3ByZSBfX3ZhbGlkIF9fcHJlIF9fYnl0ZV9yZWFkYWJsZVRvKGxlbmd0aCkNCi0jZW5kaWYNCi0jaWZuZGVmIF9faW5vdXRfZWNvdW50X2Z1bGwNCi0jZGVmaW5lIF9faW5vdXRfZWNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9lY291bnRfcGFydChzaXplLHNpemUpDQotI2VuZGlmDQotI2lmbmRlZiBfX2lub3V0X2Jjb3VudF9mdWxsDQotI2RlZmluZSBfX2lub3V0X2Jjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5vdXRfYmNvdW50X3BhcnQoc2l6ZSxzaXplKQ0KLSNlbmRpZg0KLQ0KLSNpZm5kZWYgX19lY291bnRfb3B0DQotI2RlZmluZSBfX2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2Jjb3VudF9vcHQNCi0jZGVmaW5lIF9fYmNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9faW5fb3B0DQotI2RlZmluZSBfX2luX29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2luX2Vjb3VudF9vcHQNCi0jZGVmaW5lIF9faW5fZWNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbl9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9faW5fYmNvdW50X29wdA0KLSNkZWZpbmUgX19pbl9iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2luX2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19vdXRfb3B0DQotI2RlZmluZSBfX291dF9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX291dF9lY291bnRfb3B0DQotI2RlZmluZSBfX291dF9lY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX291dF9iY291bnRfb3B0DQotI2RlZmluZSBfX291dF9iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX291dF9lY291bnRfcGFydF9vcHQNCi0jZGVmaW5lIF9fb3V0X2Vjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZWNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fb3V0X2Jjb3VudF9wYXJ0X29wdA0KLSNkZWZpbmUgX19vdXRfYmNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgICBfX291dF9iY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19vdXRfZWNvdW50X2Z1bGxfb3B0DQotI2RlZmluZSBfX291dF9lY291bnRfZnVsbF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Vjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX291dF9iY291bnRfZnVsbF9vcHQNCi0jZGVmaW5lIF9fb3V0X2Jjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfYmNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9faW5vdXRfb3B0DQotI2RlZmluZSBfX2lub3V0X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5vdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2lub3V0X2Vjb3VudF9vcHQNCi0jZGVmaW5lIF9faW5vdXRfZWNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9faW5vdXRfYmNvdW50X29wdA0KLSNkZWZpbmUgX19pbm91dF9iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lub3V0X2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19pbm91dF9lY291bnRfcGFydF9vcHQNCi0jZGVmaW5lIF9faW5vdXRfZWNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgX19pbm91dF9lY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9faW5vdXRfYmNvdW50X3BhcnRfb3B0DQotI2RlZmluZSBfX2lub3V0X2Jjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgIF9faW5vdXRfYmNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2lub3V0X2Vjb3VudF9mdWxsX29wdA0KLSNkZWZpbmUgX19pbm91dF9lY291bnRfZnVsbF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lub3V0X2Vjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19pbm91dF9iY291bnRfZnVsbF9vcHQNCi0jZGVmaW5lIF9faW5vdXRfYmNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9iY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0NCi0jaWZuZGVmIF9fZGVyZWZfZWNvdW50DQotI2RlZmluZSBfX2RlcmVmX2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZWNvdW50KDEpIF9fcG9zdCBfX2VsZW1fcmVhZGFibGVUbygxKSBfX3Bvc3QgX19kZXJlZiBfX25vdG51bGwgX19wb3N0IF9fZGVyZWYgX19lbGVtX3dyaXRhYmxlVG8oc2l6ZSkNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfYmNvdW50DQotI2RlZmluZSBfX2RlcmVmX2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZWNvdW50KDEpIF9fcG9zdCBfX2VsZW1fcmVhZGFibGVUbygxKSBfX3Bvc3QgX19kZXJlZiBfX25vdG51bGwgX19wb3N0IF9fZGVyZWYgX19ieXRlX3dyaXRhYmxlVG8oc2l6ZSkNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfaW4NCi0jZGVmaW5lIF9fZGVyZWZfaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbiBfX3ByZSBfX2RlcmVmIF9fZGVyZWYgX19yZWFkb25seQ0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9pbl9lY291bnQNCi0jZGVmaW5lIF9fZGVyZWZfaW5fZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbiBfX3ByZSBfX2RlcmVmIF9fZWxlbV9yZWFkYWJsZVRvKHNpemUpDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX2luX2Jjb3VudA0KLSNkZWZpbmUgX19kZXJlZl9pbl9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2luIF9fcHJlIF9fZGVyZWYgX19ieXRlX3JlYWRhYmxlVG8oc2l6ZSkNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfb3V0DQotI2RlZmluZSBfX2RlcmVmX291dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfZWNvdW50KDEpIF9fcG9zdCBfX2RlcmVmIF9fdmFsaWQgX19yZWZwYXJhbQ0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9vdXRfZWNvdW50DQotI2RlZmluZSBfX2RlcmVmX291dF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfZWNvdW50KHNpemUpIF9fcG9zdCBfX2RlcmVmIF9fdmFsaWQgX19yZWZwYXJhbQ0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9vdXRfYmNvdW50DQotI2RlZmluZSBfX2RlcmVmX291dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfYmNvdW50KHNpemUpIF9fcG9zdCBfX2RlcmVmIF9fdmFsaWQgX19yZWZwYXJhbQ0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9vdXRfZWNvdW50X3BhcnQNCi0jZGVmaW5lIF9fZGVyZWZfb3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfZWNvdW50KHNpemUpIF9fcG9zdCBfX2RlcmVmIF9fZWxlbV9yZWFkYWJsZVRvKGxlbmd0aCkNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfb3V0X2Jjb3VudF9wYXJ0DQotI2RlZmluZSBfX2RlcmVmX291dF9iY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudChzaXplKSBfX3Bvc3QgX19kZXJlZiBfX2J5dGVfcmVhZGFibGVUbyhsZW5ndGgpDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX291dF9lY291bnRfZnVsbA0KLSNkZWZpbmUgX19kZXJlZl9vdXRfZWNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnRfcGFydChzaXplLHNpemUpDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX291dF9iY291bnRfZnVsbA0KLSNkZWZpbmUgX19kZXJlZl9vdXRfYmNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9iY291bnRfcGFydChzaXplLHNpemUpDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX2lub3V0DQotI2RlZmluZSBfX2RlcmVmX2lub3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbm90bnVsbCBfX2VsZW1fcmVhZGFibGVUbygxKSBfX3ByZSBfX2RlcmVmIF9fdmFsaWQgX19wb3N0IF9fZGVyZWYgX192YWxpZCBfX3JlZnBhcmFtDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX2lub3V0X2Vjb3VudA0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0IF9fcHJlIF9fZGVyZWYgX19lbGVtX3dyaXRhYmxlVG8oc2l6ZSkgX19wb3N0IF9fZGVyZWYgX19lbGVtX3dyaXRhYmxlVG8oc2l6ZSkNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfaW5vdXRfYmNvdW50DQotI2RlZmluZSBfX2RlcmVmX2lub3V0X2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXQgX19wcmUgX19kZXJlZiBfX2J5dGVfd3JpdGFibGVUbyhzaXplKSBfX3Bvc3QgX19kZXJlZiBfX2J5dGVfd3JpdGFibGVUbyhzaXplKQ0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9pbm91dF9lY291bnRfcGFydA0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF9lY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudChzaXplKSBfX3ByZSBfX2RlcmVmIF9fZWxlbV9yZWFkYWJsZVRvKGxlbmd0aCkgX19wb3N0IF9fZGVyZWYgX19lbGVtX3JlYWRhYmxlVG8obGVuZ3RoKQ0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9pbm91dF9iY291bnRfcGFydA0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF9iY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Jjb3VudChzaXplKSBfX3ByZSBfX2RlcmVmIF9fYnl0ZV9yZWFkYWJsZVRvKGxlbmd0aCkgX19wb3N0IF9fZGVyZWYgX19ieXRlX3JlYWRhYmxlVG8obGVuZ3RoKQ0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9pbm91dF9lY291bnRfZnVsbA0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF9lY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudF9wYXJ0KHNpemUsc2l6ZSkNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfaW5vdXRfYmNvdW50X2Z1bGwNCi0jZGVmaW5lIF9fZGVyZWZfaW5vdXRfYmNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9iY291bnRfcGFydChzaXplLHNpemUpDQotI2VuZGlmDQotDQotI2lmbmRlZiBfX2RlcmVmX2Vjb3VudF9vcHQNCi0jZGVmaW5lIF9fZGVyZWZfZWNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc3QgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfYmNvdW50X29wdA0KLSNkZWZpbmUgX19kZXJlZl9iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9pbl9vcHQNCi0jZGVmaW5lIF9fZGVyZWZfaW5fb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZSBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9pbl9lY291bnRfb3B0DQotI2RlZmluZSBfX2RlcmVmX2luX2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5fZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgX19wcmUgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfaW5fYmNvdW50X29wdA0KLSNkZWZpbmUgX19kZXJlZl9pbl9iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2luX2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgIF9fcHJlIF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX291dF9vcHQNCi0jZGVmaW5lIF9fZGVyZWZfb3V0X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc3QgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfb3V0X2Vjb3VudF9vcHQNCi0jZGVmaW5lIF9fZGVyZWZfb3V0X2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICBfX3Bvc3QgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfb3V0X2Jjb3VudF9vcHQNCi0jZGVmaW5lIF9fZGVyZWZfb3V0X2Jjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICBfX3Bvc3QgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfb3V0X2Vjb3VudF9wYXJ0X29wdA0KLSNkZWZpbmUgX19kZXJlZl9vdXRfZWNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9vdXRfYmNvdW50X3BhcnRfb3B0DQotI2RlZmluZSBfX2RlcmVmX291dF9iY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgX19wb3N0IF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX291dF9lY291bnRfZnVsbF9vcHQNCi0jZGVmaW5lIF9fZGVyZWZfb3V0X2Vjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfZWNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICBfX3Bvc3QgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfb3V0X2Jjb3VudF9mdWxsX29wdA0KLSNkZWZpbmUgX19kZXJlZl9vdXRfYmNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9iY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9pbm91dF9vcHQNCi0jZGVmaW5lIF9fZGVyZWZfaW5vdXRfb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZSBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbCBfX3Bvc3QgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfaW5vdXRfZWNvdW50X29wdA0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF9lY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgIF9fcHJlIF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9pbm91dF9iY291bnRfb3B0DQotI2RlZmluZSBfX2RlcmVmX2lub3V0X2Jjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgX19wcmUgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwgX19wb3N0IF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX2lub3V0X2Vjb3VudF9wYXJ0X29wdA0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF9lY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgIF9fcHJlIF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9pbm91dF9iY291bnRfcGFydF9vcHQNCi0jZGVmaW5lIF9fZGVyZWZfaW5vdXRfYmNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9iY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICBfX3ByZSBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbCBfX3Bvc3QgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfaW5vdXRfZWNvdW50X2Z1bGxfb3B0DQotI2RlZmluZSBfX2RlcmVmX2lub3V0X2Vjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfZWNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgX19wcmUgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwgX19wb3N0IF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX2lub3V0X2Jjb3VudF9mdWxsX29wdA0KLSNkZWZpbmUgX19kZXJlZl9pbm91dF9iY291bnRfZnVsbF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Jjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgIF9fcHJlIF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLQ0KLSNpZm5kZWYgX19kZXJlZl9vcHRfZWNvdW50DQotI2RlZmluZSBfX2RlcmVmX29wdF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX29wdF9iY291bnQNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfb3B0X2luDQotI2RlZmluZSBfX2RlcmVmX29wdF9pbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX29wdF9pbl9lY291bnQNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2luX2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbl9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfb3B0X2luX2Jjb3VudA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfaW5fYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2luX2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9vcHRfb3V0DQotI2RlZmluZSBfX2RlcmVmX29wdF9vdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX29wdF9vdXRfZWNvdW50DQotI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX29wdF9vdXRfYmNvdW50DQotI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX29wdF9vdXRfZWNvdW50X3BhcnQNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X291dF9lY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfZWNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfb3B0X291dF9iY291bnRfcGFydA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X2Jjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9iY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9vcHRfb3V0X2Vjb3VudF9mdWxsDQotI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfZWNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX29wdF9vdXRfYmNvdW50X2Z1bGwNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X291dF9iY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfYmNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfb3B0X2lub3V0DQotI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX29wdF9pbm91dF9lY291bnQNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfb3B0X2lub3V0X2Jjb3VudA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfaW5vdXRfYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9vcHRfaW5vdXRfZWNvdW50X3BhcnQNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9lY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfb3B0X2lub3V0X2Jjb3VudF9wYXJ0DQotI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9iY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfYmNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX29wdF9pbm91dF9lY291bnRfZnVsbA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfaW5vdXRfZWNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9vcHRfaW5vdXRfYmNvdW50X2Z1bGwNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Jjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9iY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0NCi0jaWZuZGVmIF9fZGVyZWZfb3B0X2Vjb3VudF9vcHQNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9lY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfb3B0X2Jjb3VudF9vcHQNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2Jjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfb3B0X2luX29wdA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfaW5fb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2luX29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9vcHRfaW5fZWNvdW50X29wdA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfaW5fZWNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2luX2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9vcHRfaW5fYmNvdW50X29wdA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfaW5fYmNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2luX2Jjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9vcHRfb3V0X29wdA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9vcHRfb3V0X2Vjb3VudF9vcHQNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X291dF9lY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfZWNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfb3B0X291dF9iY291bnRfb3B0DQotI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfYmNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX29wdF9vdXRfZWNvdW50X3BhcnRfb3B0DQotI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfZWNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX29wdF9vdXRfYmNvdW50X3BhcnRfb3B0DQotI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfYmNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX29wdF9vdXRfZWNvdW50X2Z1bGxfb3B0DQotI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfZWNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX29wdF9vdXRfYmNvdW50X2Z1bGxfb3B0DQotI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfYmNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX29wdF9pbm91dF9vcHQNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudF9vcHQNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9lY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfb3B0X2lub3V0X2Jjb3VudF9vcHQNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Jjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudF9wYXJ0X29wdA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfaW5vdXRfZWNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19kZXJlZl9vcHRfaW5vdXRfYmNvdW50X3BhcnRfb3B0DQotI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9iY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICAgICAgICAgIF9fZGVyZWZfaW5vdXRfYmNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotI2VuZGlmDQotI2lmbmRlZiBfX2RlcmVmX29wdF9pbm91dF9lY291bnRfZnVsbF9vcHQNCi0jZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9lY291bnRfZnVsbF9vcHQoc2l6ZSkgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGVyZWZfb3B0X2lub3V0X2Jjb3VudF9mdWxsX29wdA0KLSNkZWZpbmUgX19kZXJlZl9vcHRfaW5vdXRfYmNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Jjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbA0KLSNlbmRpZg0KLQ0KLS8vIEBAQkVHSU5fRERLU1BMSVQNCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gQWR2YW5jZWQgQW5ub3RhdGlvbiBEZWZpbml0aW9ucw0KLS8vDQotLy8gQW55IG9mIHRoZXNlIG1heSBiZSB1c2VkIHRvIGRpcmVjdGx5IGFubm90YXRlIGZ1bmN0aW9ucywgYW5kIG1heSBiZSB1c2VkIGluDQotLy8gY29tYmluYXRpb24gd2l0aCBlYWNoIG90aGVyIG9yIHdpdGggcmVndWxhciBidWZmZXIgbWFjcm9zLiBGb3IgYW4gZXhwbGFuYXRpb24NCi0vLyBvZiBlYWNoIGFubm90YXRpb24sIHNlZSB0aGUgYWR2YW5jZWQgYW5ub3RhdGlvbnMgc2VjdGlvbi4NCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gQEBFTkRfRERLU1BMSVQNCi0NCi0jaWZuZGVmIF9fb3V0X2F3Y291bnQNCi0jZGVmaW5lIF9fb3V0X2F3Y291bnQoZXhwcixzaXplKSAgICAgICAgICAgIF9fcHJlIF9fbm90bnVsbCBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWNvbmQoZXhwcikgX19ieXRlX3dyaXRhYmxlVG8oc2l6ZSkgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVjb25kKCEoZXhwcikpIF9fYnl0ZV93cml0YWJsZVRvKChzaXplKSoyKSBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc3QgX192YWxpZCBfX3JlZnBhcmFtDQotI2VuZGlmDQotI2lmbmRlZiBfX2luX2F3Y291bnQNCi0jZGVmaW5lIF9faW5fYXdjb3VudChleHByLHNpemUpICAgICAgICAgICAgIF9fcHJlIF9fdmFsaWQgXA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmUgX19kZXJlZiBfX3JlYWRvbmx5IFwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlY29uZChleHByKSBfX2J5dGVfcmVhZGFibGVUbyhzaXplKSBcDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWNvbmQoIShleHByKSkgX19lbGVtX3JlYWRhYmxlVG8oc2l6ZSkNCi0jZW5kaWYNCi0jaWZuZGVmIF9fc3VjY2Vzcw0KLSNkZWZpbmUgX19zdWNjZXNzKGV4cHIpICAgICAgICAgICAgICAgICAgICAgX19pbm5lcl9zdWNjZXNzKGV4cHIpDQotI2VuZGlmDQotI2lmbmRlZiBfX251bGx0ZXJtaW5hdGVkDQotI2RlZmluZSBfX251bGx0ZXJtaW5hdGVkICAgICAgICAgICAgICAgICAgICBfX3JlYWRhYmxlVG8oc2VudGluZWwoMCkpDQotI2VuZGlmDQotI2lmbmRlZiBfX251bGxudWxsdGVybWluYXRlZA0KLSNkZWZpbmUgX19udWxsbnVsbHRlcm1pbmF0ZWQNCi0jZW5kaWYNCi0jaWZuZGVmIF9fcmVzZXJ2ZWQNCi0jZGVmaW5lIF9fcmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlIF9fbnVsbA0KLSNlbmRpZg0KLSNpZm5kZWYgX19jaGVja1JldHVybg0KLSNkZWZpbmUgX19jaGVja1JldHVybiAgICAgICAgICAgICAgICAgICAgICAgX19pbm5lcl9jaGVja1JldHVybg0KLSNlbmRpZg0KLSNpZm5kZWYgX190eXBlZml4DQotI2RlZmluZSBfX3R5cGVmaXgoY3R5cGUpICAgICAgICAgICAgICAgICAgICBfX2lubmVyX3R5cGVmaXgoY3R5cGUpDQotI2VuZGlmDQotI2lmbmRlZiBfX292ZXJyaWRlDQotI2RlZmluZSBfX292ZXJyaWRlICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lubmVyX292ZXJyaWRlDQotI2VuZGlmDQotI2lmbmRlZiBfX2NhbGxiYWNrDQotI2RlZmluZSBfX2NhbGxiYWNrICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lubmVyX2NhbGxiYWNrDQotI2VuZGlmDQotI2lmbmRlZiBfX2Zvcm1hdF9zdHJpbmcNCi0jZGVmaW5lIF9fZm9ybWF0X3N0cmluZw0KLSNlbmRpZg0KLSNpZm5kZWYgX19ibG9ja3NPbg0KLSNkZWZpbmUgX19ibG9ja3NPbihyZXNvdXJjZSkgICAgICAgICAgICAgICAgX19pbm5lcl9ibG9ja3NPbihyZXNvdXJjZSkNCi0jZW5kaWYNCi0jaWZuZGVmIF9fY29udHJvbF9lbnRyeXBvaW50DQotI2RlZmluZSBfX2NvbnRyb2xfZW50cnlwb2ludChjYXRlZ29yeSkgICAgICBfX2lubmVyX2NvbnRyb2xfZW50cnlwb2ludChjYXRlZ29yeSkNCi0jZW5kaWYNCi0jaWZuZGVmIF9fZGF0YV9lbnRyeXBvaW50DQotI2RlZmluZSBfX2RhdGFfZW50cnlwb2ludChjYXRlZ29yeSkgICAgICAgICBfX2lubmVyX2RhdGFfZW50cnlwb2ludChjYXRlZ29yeSkNCi0jZW5kaWYNCi0NCi0jaWZuZGVmIF9fZmFsbHRocm91Z2gNCi0gICAgX19pbm5lcl9mYWxsdGhyb3VnaF9kZWMNCi0gICAgI2RlZmluZSBfX2ZhbGx0aHJvdWdoIF9faW5uZXJfZmFsbHRocm91Z2gNCi0jZW5kaWYNCi0NCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotLy8gRGVwcmVjYXRlZCBBbm5vdGF0aW9uIERlZmluaXRpb25zDQotLy8NCi0vLyBUaGVzZSBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIGV4aXN0aW5nIGNvZGUuDQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLS8vICNkZWZpbmUgX19vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsDQotDQotI2lmZGVmICBfX2NwbHVzcGx1cw0KLX0NCi0jZW5kaWYNCi0NCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogU3BlY1N0cmluZ3MuaCAtIG1hcmtlcnMgZm9yIGRvY3VtZW50aW5nIHRoZSBzZW1hbnRpY3Mgb2YgQVBJcyAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBWZXJzaW9uIDEuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vIEBAQkVHSU5fRERLU1BMSVQKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW50cm9kdWN0aW9uCisvLworLy8gU3BlY1N0cmluZ3MuaCBwcm92aWRlcyBhIHNldCBvZiBhbm5vdGF0aW9ucyB0byBkZXNjcmliZSBob3cgYSBmdW5jdGlvbiB1c2VzIGl0cworLy8gcGFyYW1ldGVycyAtIHRoZSBhc3N1bXB0aW9ucyBpdCBtYWtlcyBhYm91dCB0aGVtLCBhbmQgdGhlIGd1YXJhbnRlZXMgaXQgbWFrZXMKKy8vIHVwb24gZmluaXNoaW5nLgorLy8KKy8vIEFubm90YXRpb25zIG1heSBiZSBwbGFjZWQgYmVmb3JlIGVpdGhlciBhIGZ1bmN0aW9uIHBhcmFtZXRlcidzIHR5cGUgb3IgaXRzIHJldHVybgorLy8gdHlwZSwgYW5kIGRlc2NyaWJlIHRoZSBmdW5jdGlvbidzIGJlaGF2aW9yIHJlZ2FyZGluZyB0aGUgcGFyYW1ldGVyIG9yIHJldHVybiB2YWx1ZS4KKy8vIFRoZXJlIGFyZSB0d28gY2xhc3NlcyBvZiBhbm5vdGF0aW9uczogYnVmZmVyIGFubm90YXRpb25zIGFuZCBhZHZhbmNlZCBhbm5vdGF0aW9ucy4KKy8vIEJ1ZmZlciBhbm5vdGF0aW9ucyBkZXNjcmliZSBob3cgZnVuY3Rpb25zIHVzZSB0aGVpciBwb2ludGVyIHBhcmFtZXRlcnMsIGFuZAorLy8gYWR2YW5jZWQgYW5ub3RhdGlvbnMgZWl0aGVyIGRlc2NyaWJlIGNvbXBsZXgvdW51c3VhbCBidWZmZXIgYmVoYXZpb3IsIG9yIHByb3ZpZGUKKy8vIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBwYXJhbWV0ZXIgdGhhdCBpcyBub3Qgb3RoZXJ3aXNlIGV4cHJlc3NpYmxlLgorLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEJ1ZmZlciBBbm5vdGF0aW9ucworLy8KKy8vIFRoZSBtb3N0IGltcG9ydGFudCBhbm5vdGF0aW9ucyBpbiBTcGVjU3RyaW5ncy5oIHByb3ZpZGUgYSBjb25zaXN0ZW50IHdheSB0byBhbm5vdGF0ZQorLy8gYnVmZmVyIHBhcmFtZXRlcnMgb3IgcmV0dXJuIHZhbHVlcyBmb3IgYSBmdW5jdGlvbi4gRWFjaCBvZiB0aGVzZSBhbm5vdGF0aW9ucyBkZXNjcmliZXMKKy8vIGEgc2luZ2xlIGJ1ZmZlciAod2hpY2ggY291bGQgYmUgYSBzdHJpbmcsIGEgZml4ZWQtbGVuZ3RoIG9yIHZhcmlhYmxlLWxlbmd0aCBhcnJheSwKKy8vIG9yIGp1c3QgYSBwb2ludGVyKSB0aGF0IHRoZSBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aDogd2hlcmUgaXQgaXMsIGhvdyBsYXJnZSBpdCBpcywKKy8vIGhvdyBtdWNoIGlzIGluaXRpYWxpemVkLCBhbmQgd2hhdCB0aGUgZnVuY3Rpb24gZG9lcyB3aXRoIGl0LgorLy8KKy8vIFRoZSBhcHByb3ByaWF0ZSBtYWNybyBmb3IgYSBnaXZlbiBidWZmZXIgY2FuIGJlIGNvbnN0cnVjdGVkIHVzaW5nIHRoZSB0YWJsZSBiZWxvdy4KKy8vIEp1c3QgcGljayB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzIGZyb20gZWFjaCBjYXRlZ29yeSwgYW5kIGNvbWJpbmUgdGhlbSB0b2dldGhlcgorLy8gd2l0aCBhIGxlYWRpbmcgdW5kZXJzY29yZS4gU29tZSBjb21iaW5hdGlvbnMgb2YgdmFsdWVzIGRvIG5vdCBtYWtlIHNlbnNlIGFzIGJ1ZmZlcgorLy8gYW5ub3RhdGlvbnMuIE9ubHkgbWVhbmluZ2Z1bCBhbm5vdGF0aW9ucyBjYW4gYmUgYWRkZWQgdG8geW91ciBjb2RlOyBmb3IgYSBsaXN0IG9mCisvLyB0aGVzZSwgc2VlIHRoZSBidWZmZXIgYW5ub3RhdGlvbiBkZWZpbml0aW9ucyBzZWN0aW9uLgorLy8KKy8vIE9ubHkgYSBzaW5nbGUgYnVmZmVyIGFubm90YXRpb24gc2hvdWxkIGJlIHVzZWQgZm9yIGVhY2ggcGFyYW1ldGVyLgorLy8KKy8vIHwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwKKy8vIHwgICBMZXZlbCAgICB8ICAgVXNhZ2UgICAgfCAgU2l6ZSAgIHwgT3V0cHV0IHwgT3B0aW9uYWwgfCAgUGFyYW1ldGVycyAgIHwKKy8vIHwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwKKy8vIHwgPD4gICAgICAgICB8IDw+ICAgICAgICAgfCA8PiAgICAgIHwgPD4gICAgIHwgPD4gICAgICAgfCA8PiAgICAgICAgICAgIHwKKy8vIHwgX2RlcmVmICAgICB8IF9pbiAgICAgICAgfCBfZWNvdW50IHwgX2Z1bGwgIHwgX29wdCAgICAgfCAoc2l6ZSkgICAgICAgIHwKKy8vIHwgX2RlcmVmX29wdCB8IF9vdXQgICAgICAgfCBfYmNvdW50IHwgX3BhcnQgIHwgICAgICAgICAgfCAoc2l6ZSxsZW5ndGgpIHwKKy8vIHwgICAgICAgICAgICB8IF9pbm91dCAgICAgfCAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKKy8vIHwgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKKy8vIHwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLXwKKy8vCisvLyBMZXZlbDogRGVzY3JpYmVzIHRoZSBidWZmZXIgcG9pbnRlcidzIGxldmVsIG9mIGluZGlyZWN0aW9uIGZyb20gdGhlIHBhcmFtZXRlciBvcgorLy8gICAgICAgICAgcmV0dXJuIHZhbHVlICdwJy4KKy8vCisvLyA8PiAgICAgICAgIDogcCBpcyB0aGUgYnVmZmVyIHBvaW50ZXIuCisvLyBfZGVyZWYgICAgIDogKnAgaXMgdGhlIGJ1ZmZlciBwb2ludGVyLiBwIG11c3Qgbm90IGJlIE5VTEwuCisvLyBfZGVyZWZfb3B0IDogKnAgbWF5IGJlIHRoZSBidWZmZXIgcG9pbnRlci4gcCBtYXkgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSB0aGUgcmVzdCBvZgorLy8gICAgICAgICAgICAgICAgdGhlIGFubm90YXRpb24gaXMgaWdub3JlZC4KKy8vCisvLyBVc2FnZTogRGVzY3JpYmVzIGhvdyB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgYnVmZmVyLgorLy8KKy8vIDw+ICAgICA6IFRoZSBidWZmZXIgaXMgbm90IGFjY2Vzc2VkLiBJZiB1c2VkIG9uIHRoZSByZXR1cm4gdmFsdWUgb3Igd2l0aCBfZGVyZWYsIHRoZQorLy8gICAgICAgICAgICBmdW5jdGlvbiB3aWxsIHByb3ZpZGUgdGhlIGJ1ZmZlciwgYW5kIGl0IHdpbGwgYmUgdW5pbml0aWFsaXplZCBhdCBleGl0LgorLy8gICAgICAgICAgICBPdGhlcndpc2UsIHRoZSBjYWxsZXIgbXVzdCBwcm92aWRlIHRoZSBidWZmZXIuIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZAorLy8gICAgICAgICAgICBmb3IgYWxsb2MgYW5kIGZyZWUgZnVuY3Rpb25zLgorLy8gX2luICAgIDogVGhlIGZ1bmN0aW9uIHdpbGwgb25seSByZWFkIGZyb20gdGhlIGJ1ZmZlci4gVGhlIGNhbGxlciBtdXN0IHByb3ZpZGUgdGhlCisvLyAgICAgICAgICAgIGJ1ZmZlciBhbmQgaW5pdGlhbGl6ZSBpdC4KKy8vIF9vdXQgICA6IFRoZSBmdW5jdGlvbiB3aWxsIG9ubHkgd3JpdGUgdG8gdGhlIGJ1ZmZlci4gSWYgdXNlZCBvbiB0aGUgcmV0dXJuIHZhbHVlIG9yCisvLyAgICAgICAgICAgIHdpdGggX2RlcmVmLCB0aGUgZnVuY3Rpb24gd2lsbCBwcm92aWRlIHRoZSBidWZmZXIgYW5kIGluaXRpYWxpemUgaXQuCisvLyAgICAgICAgICAgIE90aGVyd2lzZSwgdGhlIGNhbGxlciBtdXN0IHByb3ZpZGUgdGhlIGJ1ZmZlciwgYW5kIHRoZSBmdW5jdGlvbiB3aWxsCisvLyAgICAgICAgICAgIGluaXRpYWxpemUgaXQuCisvLyBfaW5vdXQgOiBUaGUgZnVuY3Rpb24gbWF5IGZyZWVseSByZWFkIGZyb20gYW5kIHdyaXRlIHRvIHRoZSBidWZmZXIuIFRoZSBjYWxsZXIgbXVzdAorLy8gICAgICAgICAgICBwcm92aWRlIHRoZSBidWZmZXIgYW5kIGluaXRpYWxpemUgaXQuIElmIHVzZWQgd2l0aCBfZGVyZWYsIHRoZSBidWZmZXIgbWF5CisvLyAgICAgICAgICAgIGJlIHJlYWxsb2NhdGVkIGJ5IHRoZSBmdW5jdGlvbi4KKy8vCisvLyBTaXplOiBEZXNjcmliZXMgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGJ1ZmZlci4gVGhpcyBtYXkgYmUgbGVzcyB0aGFuIHRoZSBzcGFjZSBhY3R1YWxseQorLy8gICAgICAgICBhbGxvY2F0ZWQgZm9yIHRoZSBidWZmZXIsIGluIHdoaWNoIGNhc2UgaXQgZGVzY3JpYmVzIHRoZSBhY2Nlc3NpYmxlIGFtb3VudC4KKy8vCisvLyA8PiAgICAgIDogTm8gYnVmZmVyIHNpemUgaXMgZ2l2ZW4uIElmIHRoZSB0eXBlIHNwZWNpZmllcyB0aGUgYnVmZmVyIHNpemUgKHN1Y2ggYXMKKy8vICAgICAgICAgICAgIHdpdGggTFBTVFIgYW5kIExQV1NUUiksIHRoYXQgYW1vdW50IGlzIHVzZWQuIE90aGVyd2lzZSwgdGhlIGJ1ZmZlciBpcyBvbmUKKy8vICAgICAgICAgICAgIGVsZW1lbnQgbG9uZy4gTXVzdCBiZSB1c2VkIHdpdGggX2luLCBfb3V0LCBvciBfaW5vdXQuCisvLyBfZWNvdW50IDogVGhlIGJ1ZmZlciBzaXplIGlzIGFuIGV4cGxpY2l0IGVsZW1lbnQgY291bnQuCisvLyBfYmNvdW50IDogVGhlIGJ1ZmZlciBzaXplIGlzIGFuIGV4cGxpY2l0IGJ5dGUgY291bnQuCisvLworLy8gT3V0cHV0OiBEZXNjcmliZXMgaG93IG11Y2ggb2YgdGhlIGJ1ZmZlciB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IHRoZSBmdW5jdGlvbi4gRm9yCisvLyAgICAgICAgICAgX2lub3V0IGJ1ZmZlcnMsIHRoaXMgYWxzbyBkZXNjcmliZXMgaG93IG11Y2ggaXMgaW5pdGlhbGl6ZWQgYXQgZW50cnkuIE9taXQgdGhpcworLy8gICAgICAgICAgIGNhdGVnb3J5IGZvciBfaW4gYnVmZmVyczsgdGhleSBtdXN0IGJlIGZ1bGx5IGluaXRpYWxpemVkIGJ5IHRoZSBjYWxsZXIuCisvLworLy8gPD4gICAgOiBUaGUgdHlwZSBzcGVjaWZpZXMgaG93IG11Y2ggaXMgaW5pdGlhbGl6ZWQuIEZvciBpbnN0YW5jZSwgYSBmdW5jdGlvbiBpbml0aWFsaXppbmcKKy8vICAgICAgICAgICBhbiBMUFdTVFIgbXVzdCBOVUxMLXRlcm1pbmF0ZSB0aGUgc3RyaW5nLgorLy8gX2Z1bGwgOiBUaGUgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGVudGlyZSBidWZmZXIuCisvLyBfcGFydCA6IFRoZSBmdW5jdGlvbiBpbml0aWFsaXplcyBwYXJ0IG9mIHRoZSBidWZmZXIsIGFuZCBleHBsaWNpdGx5IGluZGljYXRlcyBob3cgbXVjaC4KKy8vCisvLyBPcHRpb25hbDogRGVzY3JpYmVzIGlmIHRoZSBidWZmZXIgaXRzZWxmIGlzIG9wdGlvbmFsLgorLy8KKy8vIDw+ICAgOiBUaGUgcG9pbnRlciB0byB0aGUgYnVmZmVyIG11c3Qgbm90IGJlIE5VTEwuCisvLyBfb3B0IDogVGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBtaWdodCBiZSBOVUxMLiBJdCB3aWxsIGJlIGNoZWNrZWQgYmVmb3JlIGJlaW5nIGRlcmVmZXJlbmNlZC4KKy8vCisvLyBQYXJhbWV0ZXJzOiBHaXZlcyBleHBsaWNpdCBjb3VudHMgZm9yIHRoZSBzaXplIGFuZCBsZW5ndGggb2YgdGhlIGJ1ZmZlci4KKy8vCisvLyA8PiAgICAgICAgICAgIDogVGhlcmUgaXMgbm8gZXhwbGljaXQgY291bnQuIFVzZSB3aGVuIG5laXRoZXIgX2Vjb3VudCBub3IgX2Jjb3VudCBpcyB1c2VkLgorLy8gKHNpemUpICAgICAgICA6IE9ubHkgdGhlIGJ1ZmZlcidzIHRvdGFsIHNpemUgaXMgZ2l2ZW4uIFVzZSB3aXRoIF9lY291bnQgb3IgX2Jjb3VudCBidXQgbm90IF9wYXJ0LgorLy8gKHNpemUsbGVuZ3RoKSA6IFRoZSBidWZmZXIncyB0b3RhbCBzaXplIGFuZCBpbml0aWFsaXplZCBsZW5ndGggYXJlIGdpdmVuLiBVc2Ugd2l0aCBfZWNvdW50X3BhcnQKKy8vICAgICAgICAgICAgICAgICAgIGFuZCBfYmNvdW50X3BhcnQuCisvLworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQnVmZmVyIEFubm90YXRpb24gRXhhbXBsZXMKKy8vCisvLyBMV1NUREFQSV8oQk9PTCkgU3RyVG9JbnRFeEEoCisvLyAgICAgTFBDU1RSIHBzelN0cmluZywgICAgICAgICAgICAgICAgICAgIC8vIE5vIGFubm90YXRpb24gcmVxdWlyZWQsIGNvbnN0IGltcGxpZXMgX19pbi4KKy8vICAgICBEV09SRCBkd0ZsYWdzLAorLy8gICAgIF9fb3V0IGludCAqcGlSZXQgICAgICAgICAgICAgICAgICAgICAvLyBBIHBvaW50ZXIgd2hvc2UgZGVyZWZlcmVuY2Ugd2lsbCBiZSBmaWxsZWQgaW4uCisvLyApOworLy8KKy8vIHZvaWQgTXlQYWludGluZ0Z1bmN0aW9uKAorLy8gICAgIF9faW4gSFdORCBod25kQ29udHJvbCwgICAgICAgICAgICAgICAvLyBBbiBpbml0aWFsaXplZCByZWFkLW9ubHkgcGFyYW1ldGVyLgorLy8gICAgIF9faW5fb3B0IEhEQyBoZGNPcHRpb25hbCwgICAgICAgICAgICAvLyBBbiBpbml0aWFsaXplZCByZWFkLW9ubHkgcGFyYW1ldGVyIHRoYXQgbWlnaHQgYmUgTlVMTC4KKy8vICAgICBfX2lub3V0IElQcm9wZXJ0eVN0b3JlICpwcHNTdG9yZSAgICAgLy8gQW4gaW5pdGlhbGl6ZWQgcGFyYW1ldGVyIHRoYXQgbWF5IGJlIGZyZWVseSB1c2VkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgYW5kIG1vZGlmaWVkLgorLy8gKTsKKy8vCisvLyBMV1NUREFQSV8oQk9PTCkgUGF0aENvbXBhY3RQYXRoRXhBKAorLy8gICAgIF9fb3V0X2Vjb3VudChjY2hNYXgpIExQU1RSIHBzek91dCwgICAvLyBBIHN0cmluZyBidWZmZXIgd2l0aCBjY2ggZWxlbWVudHMgdGhhdCB3aWxsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgYmUgTlVMTCB0ZXJtaW5hdGVkIG9uIGV4aXQuCisvLyAgICAgTFBDU1RSIHBzelNyYywgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vIGFubm90YXRpb24gcmVxdWlyZWQsIGNvbnN0IGltcGxpZXMgX19pbi4KKy8vICAgICBVSU5UIGNjaE1heCwKKy8vICAgICBEV09SRCBkd0ZsYWdzCisvLyApOworLy8KKy8vIEhSRVNVTFQgU0hMb2NhbEFsbG9jQnl0ZXMoCisvLyAgICAgc2l6ZV90IGNiLAorLy8gICAgIF9fZGVyZWZfYmNvdW50KGNiKSBUICoqcHB2ICAgICAgICAgICAvLyBBIHBvaW50ZXIgd2hvc2UgZGVyZWZlcmVuY2Ugd2lsbCBiZSBzZXQgdG8gYW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB1bmluaXRpYWxpemVkIGJ1ZmZlciB3aXRoIGNiIGJ5dGVzLgorLy8gKTsKKy8vCisvLyBfX2lub3V0X2Jjb3VudF9mdWxsKGNiKSA6IEEgYnVmZmVyIHdpdGggY2IgZWxlbWVudHMgdGhhdCBpcyBmdWxseSBpbml0aWFsaXplZCBhdAorLy8gICAgIGVudHJ5IGFuZCBleGl0LCBhbmQgbWF5IGJlIHdyaXR0ZW4gdG8gYnkgdGhpcyBmdW5jdGlvbi4KKy8vCisvLyBfX291dF9lY291bnRfcGFydChjb3VudCwgKmNvdW50T3V0KSA6IEEgYnVmZmVyIHdpdGggY291bnQgZWxlbWVudHMgdGhhdCB3aWxsIGJlCisvLyAgICAgcGFydGlhbGx5IGluaXRpYWxpemVkIGJ5IHRoaXMgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBpbmRpY2F0ZXMgaG93IG11Y2ggaXQKKy8vICAgICBpbml0aWFsaXplZCBieSBzZXR0aW5nICpjb3VudE91dC4KKy8vCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBZHZhbmNlZCBBbm5vdGF0aW9ucworLy8KKy8vIEFkdmFuY2VkIGFubm90YXRpb25zIGRlc2NyaWJlIGJlaGF2aW9yIHRoYXQgaXMgbm90IGV4cHJlc3NpYmxlIHdpdGggdGhlIHJlZ3VsYXIKKy8vIGJ1ZmZlciBtYWNyb3MuIFRoZXNlIG1heSBiZSB1c2VkIGVpdGhlciB0byBhbm5vdGF0ZSBidWZmZXIgcGFyYW1ldGVycyB0aGF0IGludm9sdmUKKy8vIGNvbXBsZXggb3IgY29uZGl0aW9uYWwgYmVoYXZpb3IsIG9yIHRvIGVucmljaCBleGlzdGluZyBhbm5vdGF0aW9ucyB3aXRoIGFkZGl0aW9uYWwKKy8vIGluZm9ybWF0aW9uLgorLy8KKy8vIF9fc3VjY2VzcyhleHByKSBmIDoKKy8vICAgICA8ZXhwcj4gaW5kaWNhdGVzIHdoZXRoZXIgZnVuY3Rpb24gZiBzdWNjZWVkZWQgb3Igbm90LiBJZiA8ZXhwcj4gaXMgdHJ1ZSBhdCBleGl0LAorLy8gICAgIGFsbCB0aGUgZnVuY3Rpb24ncyBndWFyYW50ZWVzIChhcyBnaXZlbiBieSBvdGhlciBhbm5vdGF0aW9ucykgbXVzdCBob2xkLiBJZiA8ZXhwcj4KKy8vICAgICBpcyBmYWxzZSBhdCBleGl0LCB0aGUgY2FsbGVyIHNob3VsZCBub3QgZXhwZWN0IGFueSBvZiB0aGUgZnVuY3Rpb24ncyBndWFyYW50ZWVzCisvLyAgICAgdG8gaG9sZC4gSWYgbm90IHVzZWQsIHRoZSBmdW5jdGlvbiBtdXN0IGFsd2F5cyBzYXRpc2Z5IGl0cyBndWFyYW50ZWVzLiBBZGRlZAorLy8gICAgIGF1dG9tYXRpY2FsbHkgdG8gZnVuY3Rpb25zIHRoYXQgaW5kaWNhdGUgc3VjY2VzcyBpbiBzdGFuZGFyZCB3YXlzLCBzdWNoIGFzIGJ5CisvLyAgICAgcmV0dXJuaW5nIGFuIEhSRVNVTFQuCisvLworLy8gX19vdXRfYXdjb3VudChleHByLCBzaXplKSBwIDoKKy8vICAgICBQb2ludGVyIHAgaXMgYSBidWZmZXIgd2hvc2Ugc2l6ZSBtYXkgYmUgZ2l2ZW4gaW4gZWl0aGVyIGJ5dGVzIG9yIGVsZW1lbnRzLiBJZgorLy8gICAgIDxleHByPiBpcyB0cnVlLCB0aGlzIGFjdHMgbGlrZSBfX291dF9iY291bnQuIElmIDxleHByPiBpcyBmYWxzZSwgdGhpcyBhY3RzCisvLyAgICAgbGlrZSBfX291dF9lY291bnQuIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCB0byBhbm5vdGF0ZSBvbGQgQVBJcy4KKy8vCisvLyBfX2luX2F3Y291bnQoZXhwciwgc2l6ZSkgcCA6CisvLyAgICAgUG9pbnRlciBwIGlzIGEgYnVmZmVyIHdob3NlIHNpemUgbWF5IGJlIGdpdmVuIGluIGVpdGhlciBieXRlcyBvciBlbGVtZW50cy4gSWYKKy8vICAgICA8ZXhwcj4gaXMgdHJ1ZSwgdGhpcyBhY3RzIGxpa2UgX19pbl9iY291bnQuIElmIDxleHByPiBpcyBmYWxzZSwgdGhpcyBhY3RzCisvLyAgICAgbGlrZSBfX2luX2Vjb3VudC4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIHRvIGFubm90YXRlIG9sZCBBUElzLgorLy8KKy8vIF9fbnVsbHRlcm1pbmF0ZWQgcCA6CisvLyAgICAgUG9pbnRlciBwIGlzIGEgYnVmZmVyIHRoYXQgbWF5IGJlIHJlYWQgb3Igd3JpdHRlbiB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBmaXJzdAorLy8gICAgIE5VTEwgY2hhcmFjdGVyIG9yIHBvaW50ZXIuIE1heSBiZSB1c2VkIG9uIHR5cGVkZWZzLCB3aGljaCBtYXJrcyB2YWxpZCAocHJvcGVybHkKKy8vICAgICBpbml0aWFsaXplZCkgaW5zdGFuY2VzIG9mIHRoYXQgdHlwZSBhcyBiZWluZyBOVUxMLXRlcm1pbmF0ZWQuCisvLworLy8gX19udWxsbnVsbHRlcm1pbmF0ZWQgcCA6CisvLyAgICAgUG9pbnRlciBwIGlzIGEgYnVmZmVyIHRoYXQgbWF5IGJlIHJlYWQgb3Igd3JpdHRlbiB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBmaXJzdAorLy8gICAgIHNlcXVlbmNlIG9mIHR3byBOVUxMIGNoYXJhY3RlcnMgb3IgcG9pbnRlcnMuIE1heSBiZSB1c2VkIG9uIHR5cGVkZWZzLCB3aGljaCBtYXJrcworLy8gICAgIHZhbGlkIGluc3RhbmNlcyBvZiB0aGF0IHR5cGUgYXMgYmVpbmcgZG91YmxlLU5VTEwgdGVybWluYXRlZC4KKy8vCisvLyBfX3Jlc2VydmVkIHYgOgorLy8gICAgIFZhbHVlIHYgbXVzdCBiZSAwL05VTEwsIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlLgorLy8KKy8vIF9fY2hlY2tSZXR1cm4gdiA6CisvLyAgICAgUmV0dXJuIHZhbHVlIHYgbXVzdCBub3QgYmUgaWdub3JlZCBieSBjYWxsZXJzIG9mIHRoaXMgZnVuY3Rpb24uCisvLworLy8gX190eXBlZml4KGN0eXBlKSB2IDoKKy8vICAgICBWYWx1ZSB2IHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuIGluc3RhbmNlIG9mIGN0eXBlLCByYXRoZXIgdGhhbiBpdHMgZGVjbGFyZWQgdHlwZS4KKy8vCisvLyBfX292ZXJyaWRlIGYgOgorLy8gICAgIFNwZWNpZnkgQyMtc3R5bGUgJ292ZXJyaWRlJyBiZWhhdmlvdXIgZm9yIG92ZXJyaWRpbmcgdmlydHVhbCBtZXRob2RzLgorLy8KKy8vIF9fY2FsbGJhY2sgZiA6CisvLyAgICAgRnVuY3Rpb24gZiBjYW4gYmUgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIuCisvLworLy8gX19mb3JtYXRfc3RyaW5nIHAgOgorLy8gICAgIFBvaW50ZXIgcCBpcyBhIHN0cmluZyB0aGF0IGNvbnRhaW5zICUgbWFya2VycyBpbiB0aGUgc3R5bGUgb2YgcHJpbnRmLgorLy8KKy8vIF9fYmxvY2tzT24ocmVzb3VyY2UpIGYgOgorLy8gICAgIEZ1bmN0aW9uIGYgYmxvY2tzIG9uIHRoZSByZXNvdXJjZSAncmVzb3VyY2UnLgorLy8KKy8vIF9fZmFsbHRocm91Z2ggOgorLy8gICAgIEFubm90YXRlcyBzd2l0Y2ggc3RhdGVtZW50IGxhYmVscyB3aGVyZSBmYWxsLXRocm91Z2ggaXMgZGVzaXJlZCwgdG8gZGlzdGluZ3Vpc2gKKy8vICAgICBmcm9tIGZvcmdvdHRlbiBicmVhayBzdGF0ZW1lbnRzLgorLy8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFkdmFuY2VkIEFubm90YXRpb24gRXhhbXBsZXMKKy8vCisvLyBfX3N1Y2Nlc3MocmV0dXJuID09IFRSVUUpIExXU1REQVBJXyhCT09MKSAKKy8vIFBhdGhDYW5vbmljYWxpemVBKF9fb3V0X2Vjb3VudChNQVhfUEFUSCkgTFBTVFIgcHN6QnVmLCBMUENTVFIgcHN6UGF0aCkgOgorLy8gICAgIHBzekJ1ZiBpcyBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgTlVMTC10ZXJtaW5hdGVkIHdoZW4gVFJVRSBpcyByZXR1cm5lZC4KKy8vCisvLyB0eXBlZGVmIF9fbnVsbHRlcm1pbmF0ZWQgV0NIQVIqIExQV1NUUiA6IEluaXRpYWxpemVkIExQV1NUUnMgYXJlIE5VTEwtdGVybWluYXRlZCBzdHJpbmdzLgorLy8KKy8vIF9fb3V0X2Vjb3VudChjY2gpIF9fdHlwZWZpeChMUFdTVFIpIHZvaWQgKnBzeiA6IHBzeiBpcyBhIGJ1ZmZlciBwYXJhbWV0ZXIgd2hpY2ggd2lsbCBiZQorLy8gICAgIGEgTlVMTC10ZXJtaW5hdGVkIFdDSEFSIHN0cmluZyBhdCBleGl0LCBhbmQgd2hpY2ggaW5pdGlhbGx5IGNvbnRhaW5zIGNjaCBXQ0hBUnMuCisvLworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBAQEVORF9EREtTUExJVAorCisjaWYgX01TQ19WRVIgPiAxMDAwCisjcHJhZ21hIG9uY2UKKyNlbmRpZiAgLy8gI2lmIF9NU0NfVkVSID4gMTAwMAorCisjZGVmaW5lIF9fc3BlY3N0cmluZ3MKKworI2lmZGVmICBfX2NwbHVzcGx1cworI2lmbmRlZiBfX25vdGhyb3cKKyMgZGVmaW5lIF9fbm90aHJvdyBfX2RlY2xzcGVjKG5vdGhyb3cpCisjZW5kaWYKK2V4dGVybiAiQyIgeworI2Vsc2UKKyNpZm5kZWYgX19ub3Rocm93CisjIGRlZmluZSBfX25vdGhyb3cKKyNlbmRpZgorI2VuZGlmICAvLyAjaWZkZWYgX19jcGx1c3BsdXMKKworLy8gQEBCRUdJTl9EREtTUExJVAorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBIZWxwZXIgTWFjcm8gRGVmaW5pdGlvbnMKKy8vCisvLyBUaGVzZSBleHByZXNzIGJlaGF2aW9yIGNvbW1vbiB0byBtYW55IG9mIHRoZSBoaWdoLWxldmVsIGFubm90YXRpb25zLgorLy8gRE8gTk9UIFVTRSBUSEVTRSBJTiBZT1VSIENPREUuCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIFRoZSBoZWxwZXIgYW5ub3RhdGlvbnMgYXJlIG9ubHkgdW5kZXJzdG9vZCBieSB0aGUgY29tcGlsZXIgdmVyc2lvbiB1c2VkIGJ5IHZhcmlvdXMKKy8vIGRlZmVjdCBkZXRlY3Rpb24gdG9vbHMuIFdoZW4gdGhlIHJlZ3VsYXIgY29tcGlsZXIgaXMgcnVubmluZywgdGhleSBhcmUgZGVmaW5lZCBpbnRvCisvLyBub3RoaW5nLCBhbmQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQgY29kZS4KKyNpZiAoX01TQ19WRVIgPj0gMTAwMCkgJiYgIWRlZmluZWQoTUlETF9QQVNTKSAmJiBkZWZpbmVkKF9QUkVGQVNUXykKKworICAgIC8vIEluIHRoZSBwcmltaXRpdmUgX19kZWNsc3BlYygiU0FMXyoiKSBhbm5vdGF0aW9ucyAiU0FMIiBzdGFuZHMgZm9yIFN0YW5kYXJkCisgICAgLy8gQW5ub3RhdGlvbiBMYW5ndWFnZS4gIFRoZXNlIF9fZGVjbHNwZWMoIlNBTF8qIikgYW5ub3RhdGlvbnMgYXJlIHRoZQorICAgIC8vIHByaW1pdGl2ZXMgdGhlIGNvbXBpbGVyIHVuZGVyc3RhbmRzIGFuZCBhbGwgaGlnaC1sZXZlbCBTcGVjU3RyaW5nIE1BQ1JPcworICAgIC8vIHdpbGwgZGVjb21wb3NlIGludG8gdGhlc2UgcHJpbWl2YXRlcy4KKworICAgICNkZWZpbmUgU1BFQ1NUUklOR0laRSggeCApICN4CisKKyAgICAvLworICAgIC8vIF9fbnVsbCBwCisgICAgLy8gX19ub3RudWxsIHAKKyAgICAvLyBfX21heWJlbnVsbCBwCisgICAgLy8KKyAgICAvLyBBbm5vdGF0ZXMgYSBwb2ludGVyIHAuIFN0YXRlcyB0aGF0IHBvaW50ZXIgcCBpcyBudWxsLiBDb21tb25seSB1c2VkCisgICAgLy8gaW4gdGhlIG5lZ2F0ZWQgZm9ybSBfX25vdG51bGwgb3IgdGhlIHBvc3NpYmx5IG51bGwgZm9ybSBfX21heWJlbnVsbC4KKyAgICAvLworICAgICNkZWZpbmUgX19udWxsICAgICAgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX251bGwiKQorICAgICNkZWZpbmUgX19ub3RudWxsICAgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX25vdG51bGwiKQorICAgICNkZWZpbmUgX19tYXliZW51bGwgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX21heWJlbnVsbCIpCisKKyAgICAvLworICAgIC8vIF9fcmVhZG9ubHkgbAorICAgIC8vIF9fbm90cmVhZG9ubHkgbAorICAgIC8vIF9fbWFieWVyZWFkb25seSBsCisgICAgLy8KKyAgICAvLyBBbm5vdGF0ZXMgYSBsb2NhdGlvbiBsLiBTdGF0ZXMgdGhhdCBsb2NhdGlvbiBsIGlzIG5vdCBtb2RpZmllZCBhZnRlcgorICAgIC8vIHRoaXMgcG9pbnQuICBJZiB0aGUgYW5ub3RhdGlvbiBpcyBwbGFjZWQgb24gdGhlIHByZWNvbmRpdGlvbiBzdGF0ZSBvZgorICAgIC8vIGEgZnVuY3Rpb24sIHRoZSByZXN0cmljdGlvbiBvbmx5IGFwcGxpZXMgdW50aWwgdGhlIHBvc3Rjb25kaXRpb24gc3RhdGUKKyAgICAvLyBvZiB0aGUgZnVuY3Rpb24uICBfX21heWJlcmVhZG9ubHkgc3RhdGVzIHRoYXQgdGhlIGFubm90YXRlZCBsb2NhdGlvbgorICAgIC8vIG1heSBiZSBtb2RpZmllZCwgd2hlcmVhcyBfX25vdHJlYWRvbmx5IHN0YXRlcyB0aGF0IGEgbG9jYXRpb24gbXVzdCBiZQorICAgIC8vIG1vZGlmaWVkLgorICAgIC8vCisgICAgI2RlZmluZSBfX3JlYWRvbmx5ICAgICAgICAgICAgICBfX2RlY2xzcGVjKCJTQUxfcmVhZG9ubHkiKQorICAgICNkZWZpbmUgX19ub3RyZWFkb25seSAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX25vdHJlYWRvbmx5IikKKyAgICAjZGVmaW5lIF9fbWF5YmVyZWFkb25seSAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF9tYXliZXJlYWRvbmx5IikKKworICAgIC8vCisgICAgLy8gX192YWxpZCB2CisgICAgLy8gX19ub3R2YWxpZCB2CisgICAgLy8gX19tYXliZXZhbGlkIHYKKyAgICAvLworICAgIC8vIEFubm90YXRlcyBhbnkgdmFsdWUgdi4gU3RhdGVzIHRoYXQgdGhlIHZhbHVlIHNhdGlzZmllcyBhbGwgcHJvcGVydGllcyBvZgorICAgIC8vIHZhbGlkIHZhbHVlcyBvZiBpdHMgdHlwZS4gRm9yIGV4YW1wbGUsIGZvciBhIHN0cmluZyBidWZmZXIsIHZhbGlkIG1lYW5zCisgICAgLy8gdGhhdCB0aGUgYnVmZmVyIHBvaW50ZXIgaXMgZWl0aGVyIE5VTEwgb3IgcG9pbnRzIHRvIGEgTlVMTC10ZXJtaW5hdGVkIHN0cmluZy4KKyAgICAvLworICAgICNkZWZpbmUgX192YWxpZCAgICAgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX3ZhbGlkIikKKyAgICAjZGVmaW5lIF9fbm90dmFsaWQgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF9ub3R2YWxpZCIpCisgICAgI2RlZmluZSBfX21heWJldmFsaWQgICAgICAgICAgICBfX2RlY2xzcGVjKCJTQUxfbWF5YmV2YWxpZCIpCisKKyAgICAvLworICAgIC8vIF9fcmVhZGFibGVUbyhleHRlbnQpIHAKKyAgICAvLworICAgIC8vIEFubm90YXRlcyBhIGJ1ZmZlciBwb2ludGVyIHAuICBJZiB0aGUgYnVmZmVyIGNhbiBiZSByZWFkLCBleHRlbnQgZGVzY3JpYmVzCisgICAgLy8gaG93IG11Y2ggb2YgdGhlIGJ1ZmZlciBpcyByZWFkYWJsZS4gRm9yIGEgcmVhZGVyIG9mIHRoZSBidWZmZXIsIHRoaXMgaXMKKyAgICAvLyBhbiBleHBsaWNpdCBwZXJtaXNzaW9uIHRvIHJlYWQgdXAgdG8gdGhhdCBhbW91bnQsIHJhdGhlciB0aGFuIGEgcmVzdHJpY3Rpb24gdG8KKyAgICAvLyByZWFkIG9ubHkgdXAgdG8gaXQuCisgICAgLy8KKyAgICAjZGVmaW5lIF9fcmVhZGFibGVUbyhleHRlbnQpICAgIF9fZGVjbHNwZWMoIlNBTF9yZWFkYWJsZVRvKCJTUEVDU1RSSU5HSVpFKGV4dGVudCkiKSIpCisKKyAgICAvLworICAgIC8vIF9fZWxlbV9yZWFkYWJsZVRvKHNpemUpCisgICAgLy8KKyAgICAvLyBBbm5vdGF0ZXMgYSBidWZmZXIgcG9pbnRlciBwIGFzIGJlaW5nIHJlYWRhYmxlIHRvIHNpemUgZWxlbWVudHMuCisgICAgLy8KKyAgICAjZGVmaW5lIF9fZWxlbV9yZWFkYWJsZVRvKHNpemUpICAgX19kZWNsc3BlYygiU0FMX3JlYWRhYmxlVG8oZWxlbWVudENvdW50KCJTUEVDU1RSSU5HSVpFKHNpemUpIikpIikKKyAgICAKKyAgICAvLworICAgIC8vIF9fYnl0ZV9yZWFkYWJsZVRvKHNpemUpCisgICAgLy8KKyAgICAvLyBBbm5vdGF0ZXMgYSBidWZmZXIgcG9pbnRlciBwIGFzIGJlaW5nIHJlYWRhYmxlIHRvIHNpemUgYnl0ZXMuCisgICAgLy8KKyAgICAjZGVmaW5lIF9fYnl0ZV9yZWFkYWJsZVRvKHNpemUpICAgX19kZWNsc3BlYygiU0FMX3JlYWRhYmxlVG8oYnl0ZUNvdW50KCJTUEVDU1RSSU5HSVpFKHNpemUpIikpIikKKyAgICAKKyAgICAvLworICAgIC8vIF9fd3JpdGFibGVUbyhleHRlbnQpIHAKKyAgICAvLworICAgIC8vIEFubm90YXRlcyBhIGJ1ZmZlciBwb2ludGVyIHAuIElmIHRoZSBidWZmZXIgY2FuIGJlIG1vZGlmaWVkLCBleHRlbnQKKyAgICAvLyBkZXNjcmliZXMgaG93IG11Y2ggb2YgdGhlIGJ1ZmZlciBpcyB3cml0YWJsZSAodXN1YWxseSB0aGUgYWxsb2NhdGlvbgorICAgIC8vIHNpemUpLiBGb3IgYSB3cml0ZXIgb2YgdGhlIGJ1ZmZlciwgdGhpcyBpcyBhbiBleHBsaWNpdCBwZXJtaXNzaW9uIHRvCisgICAgLy8gd3JpdGUgdXAgdG8gdGhhdCBhbW91bnQsIHJhdGhlciB0aGFuIGEgcmVzdHJpY3Rpb24gdG8gd3JpdGUgb25seSB1cCB0byBpdC4KKyAgICAvLworICAgICNkZWZpbmUgX193cml0YWJsZVRvKHNpemUpICAgX19kZWNsc3BlYygiU0FMX3dyaXRhYmxlVG8oIlNQRUNTVFJJTkdJWkUoc2l6ZSkiKSIpCisKKyAgICAvLworICAgIC8vIF9fZWxlbV93cml0YWJsZVRvKHNpemUpCisgICAgLy8KKyAgICAvLyBBbm5vdGF0ZXMgYSBidWZmZXIgcG9pbnRlciBwIGFzIGJlaW5nIHdyaXRhYmxlIHRvIHNpemUgZWxlbWVudHMuCisgICAgLy8KKyAgICAjZGVmaW5lIF9fZWxlbV93cml0YWJsZVRvKHNpemUpICAgX19kZWNsc3BlYygiU0FMX3dyaXRhYmxlVG8oZWxlbWVudENvdW50KCJTUEVDU1RSSU5HSVpFKHNpemUpIikpIikKKyAgICAKKyAgICAvLworICAgIC8vIF9fYnl0ZV93cml0YWJsZVRvKHNpemUpCisgICAgLy8KKyAgICAvLyBBbm5vdGF0ZXMgYSBidWZmZXIgcG9pbnRlciBwIGFzIGJlaW5nIHdyaXRhYmxlIHRvIHNpemUgYnl0ZXMuCisgICAgLy8KKyAgICAjZGVmaW5lIF9fYnl0ZV93cml0YWJsZVRvKHNpemUpICAgX19kZWNsc3BlYygiU0FMX3dyaXRhYmxlVG8oYnl0ZUNvdW50KCJTUEVDU1RSSU5HSVpFKHNpemUpIikpIikKKworICAgIC8vCisgICAgLy8gX19kZXJlZiBwCisgICAgLy8KKyAgICAvLyBBbm5vdGF0ZXMgYSBwb2ludGVyIHAuIFRoZSBuZXh0IGFubm90YXRpb24gYXBwbGllcyBvbmUgZGVyZWZlcmVuY2UgZG93bgorICAgIC8vIGluIHRoZSB0eXBlLiBJZiByZWFkYWJsZVRvKHAsIHNpemUpIHRoZW4gdGhlIG5leHQgYW5ub3RhdGlvbiBhcHBsaWVzIHRvCisgICAgLy8gYWxsIGVsZW1lbnRzICoocCtpKSBmb3Igd2hpY2ggaSBzYXRpc2ZpZXMgdGhlIHNpemUuIElmIHAgaXMgYSBwb2ludGVyCisgICAgLy8gdG8gYSBzdHJ1Y3QsIHRoZSBuZXh0IGFubm90YXRpb24gYXBwbGllcyB0byBhbGwgZmllbGRzIG9mIHRoZSBzdHJ1Y3QuCisgICAgLy8KKyAgICAjZGVmaW5lIF9fZGVyZWYgICAgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF9kZXJlZiIpCisgICAgCisgICAgLy8KKyAgICAvLyBfX3ByZSBfX25leHRfYW5ub3RhdGlvbgorICAgIC8vCisgICAgLy8gVGhlIG5leHQgYW5ub3RhdGlvbiBhcHBsaWVzIGluIHRoZSBwcmVjb25kaXRpb24gc3RhdGUKKyAgICAvLworICAgICNkZWZpbmUgX19wcmUgICAgICAgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX3ByZSIpCisgICAgCisgICAgLy8KKyAgICAvLyBfX3Bvc3QgX19uZXh0X2Fubm90YXRpb24KKyAgICAvLworICAgIC8vIFRoZSBuZXh0IGFubm90YXRpb24gYXBwbGllcyBpbiB0aGUgcG9zdGNvbmRpdGlvbiBzdGF0ZQorICAgIC8vCisgICAgI2RlZmluZSBfX3Bvc3QgICAgICAgICAgICAgICAgICBfX2RlY2xzcGVjKCJTQUxfcG9zdCIpCisgICAgCisgICAgLy8KKyAgICAvLyBfX3ByZWNvbmQoPGV4cHI+KQorICAgIC8vCisgICAgLy8gV2hlbiA8ZXhwcj4gaXMgdHJ1ZSwgdGhlIG5leHQgYW5ub3RhdGlvbiBhcHBsaWVzIGluIHRoZSBwcmVjb25kaXRpb24gc3RhdGUKKyAgICAvLyAoY3VycmVudGx5IG5vdCBlbmFibGVkKQorICAgIC8vCisgICAgI2RlZmluZSBfX3ByZWNvbmQoZXhwcikgICAgICAgICBfX3ByZQorCisgICAgLy8KKyAgICAvLyBfX3Bvc3Rjb25kKDxleHByPikKKyAgICAvLworICAgIC8vIFdoZW4gPGV4cHI+IGlzIHRydWUsIHRoZSBuZXh0IGFubm90YXRpb24gYXBwbGllcyBpbiB0aGUgcG9zdGNvbmRpdGlvbiBzdGF0ZQorICAgIC8vIChjdXJyZW50bHkgbm90IGVuYWJsZWQpCisgICAgLy8KKyAgICAjZGVmaW5lIF9fcG9zdGNvbmQoZXhwcikgICAgICAgIF9fcG9zdAorCisgICAgLy8KKyAgICAvLyBfX2V4Y2VwdHRoYXQKKyAgICAvLworICAgIC8vIEdpdmVuIGEgc2V0IG9mIGFubm90YXRpb25zIFEgY29udGFpbmluZyBfX2V4Y2VwdHRoYXQgbWF5YmVQLCB0aGUgZWZmZWN0IG9mCisgICAgLy8gdGhlIGV4Y2VwdCBjbGF1c2UgaXMgdG8gZXJhc2UgYW55IFAgb3Igbm90UCBhbm5vdGF0aW9ucyAoZXhwbGljaXQgb3IKKyAgICAvLyBpbXBsaWVkKSB3aXRoaW4gUSBhdCB0aGUgc2FtZSBsZXZlbCBvZiBkZXJlZmVyZW5jaW5nIHRoYXQgdGhlIGV4Y2VwdAorICAgIC8vIGNsYXVzZSBhcHBlYXJzLCBhbmQgdG8gcmVwbGFjZSBpdCB3aXRoIG1heWJlUC4KKyAgICAvLworICAgIC8vICBFeGFtcGxlIDE6IF9fdmFsaWQgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsIG9uIGEgcG9pbnRlciBwIG1lYW5zIHRoYXQgdGhlCisgICAgLy8gICAgICAgICAgICAgcG9pbnRlciBtYXkgYmUgbnVsbCwgYW5kIGlzIG90aGVyd2lzZSB2YWxpZCwgdGh1cyBvdmVycmlkaW5nCisgICAgLy8gICAgICAgICAgICAgdGhlIGltcGxpY2l0IG5vdG51bGwgYW5ub3RhdGlvbiBpbXBsaWVkIGJ5IF9fdmFsaWQgb24KKyAgICAvLyAgICAgICAgICAgICBwb2ludGVycy4KKyAgICAvLworICAgIC8vICBFeGFtcGxlIDI6IF9fdmFsaWQgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwgb24gYW4gaW50ICoqcCBtZWFucworICAgIC8vICAgICAgICAgICAgIHRoYXQgcCBpcyBub3QgbnVsbCAoaW1wbGllZCBieSB2YWxpZCksIGJ1dCB0aGUgZWxlbWVudHMKKyAgICAvLyAgICAgICAgICAgICBwb2ludGVkIHRvIGJ5IHAgY291bGQgYmUgbnVsbCwgYW5kIGFyZSBvdGhlcndpc2UgdmFsaWQuIAorICAgIC8vCisgICAgI2RlZmluZSBfX2V4Y2VwdHRoYXQgICAgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX2V4Y2VwdCIpCisKKyAgICAvLworICAgIC8vIF9yZWZwYXJhbQorICAgIC8vCisgICAgLy8gQWRkZWQgdG8gYWxsIG91dCBwYXJhbWV0ZXIgbWFjcm9zIHRvIGluZGljYXRlIHRoYXQgdGhleSBhcmUgYWxsIHJlZmVyZW5jZQorICAgIC8vIHBhcmFtZXRlcnMuCisgICAgLy8KKyAgICAjZGVmaW5lIF9fcmVmcGFyYW0gICAgICAgICAgICAgICAgICBfX2RlcmVmIF9fbm90cmVhZG9ubHkKKworICAgIC8vCisgICAgLy8gX19pbm5lcl8qCisgICAgLy8KKyAgICAvLyBIZWxwZXIgbWFjcm9zIHRoYXQgZGlyZWN0bHkgY29ycmVzcG9uZCB0byBjZXJ0YWluIGhpZ2gtbGV2ZWwgYW5ub3RhdGlvbnMuCisgICAgLy8KKyAgICAvLworCisgICAgLy8gTWFjcm9zIHRvIGNsYXNzaWZ5IHRoZSBlbnRyeXBvaW50cyBhbmQgaW5kaWNhdGUgdGhlaXIgY2F0ZWdvcnkuCisgICAgLy8KKyAgICAvLworICAgIC8vIFByZS1kZWZpbmVkIGNvbnRyb2wgcG9pbnQgY2F0ZWdvcmllcyBpbmNsdWRlOiBSUEMsIExQQywgRGV2aWNlRHJpdmVyLCBVc2VyVG9LZXJuZWwsIElTQVBJLCBDT00uCisgICAgLy8KKyAgICAjZGVmaW5lIF9faW5uZXJfY29udHJvbF9lbnRyeXBvaW50KGNhdGVnb3J5KSBfX2RlY2xzcGVjKCJTQUxfZW50cnlwb2ludChjb250cm9sRW50cnksICJTUEVDU1RSSU5HSVpFKGNhdGVnb3J5KSIpIikKKworICAgIC8vCisgICAgLy8gUHJlLWRlZmluZWQgZGF0YSBlbnRyeSBwb2ludCBjYXRlZ29yaWVzIGluY2x1ZGU6IFJlZ2lzdHJ5LCBGaWxlLCBOZXR3b3JrLgorICAgIC8vCisgICAgI2RlZmluZSBfX2lubmVyX2RhdGFfZW50cnlwb2ludChjYXRlZ29yeSkgICAgX19kZWNsc3BlYygiU0FMX2VudHJ5cG9pbnQoZGF0YUVudHJ5LCAiU1BFQ1NUUklOR0laRShjYXRlZ29yeSkiKSIpCisKKyAgICAjZGVmaW5lIF9faW5uZXJfc3VjY2VzcyhleHByKSAgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF9zdWNjZXNzKCJTUEVDU1RSSU5HSVpFKGV4cHIpIikiKQorICAgICNkZWZpbmUgX19pbm5lcl9jaGVja1JldHVybiAgICAgICAgICAgICAgICAgX19kZWNsc3BlYygiU0FMX2NoZWNrUmV0dXJuIikKKyAgICAjZGVmaW5lIF9faW5uZXJfdHlwZWZpeChjdHlwZSkgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIlNBTF90eXBlZml4KCJTUEVDU1RSSU5HSVpFKGN0eXBlKSIpIikKKyAgICAjZGVmaW5lIF9faW5uZXJfb3ZlcnJpZGUgICAgICAgICAgICAgICAgICAgIF9fZGVjbHNwZWMoIl9fb3ZlcnJpZGUiKQorICAgICNkZWZpbmUgX19pbm5lcl9jYWxsYmFjayAgICAgICAgICAgICAgICAgICAgX19kZWNsc3BlYygiX19jYWxsYmFjayIpCisgICAgI2RlZmluZSBfX2lubmVyX2Jsb2Nrc09uKHJlc291cmNlKSAgICAgICAgICBfX2RlY2xzcGVjKCJTQUxfYmxvY2tzT24oIlNQRUNTVFJJTkdJWkUocmVzb3VyY2UpIikiKQorICAgICNkZWZpbmUgX19pbm5lcl9mYWxsdGhyb3VnaF9kZWMgICAgICAgICAgICAgX19pbmxpbmUgX19ub3Rocm93IHZvaWQgX19GYWxsVGhyb3VnaCgpIHt9CisgICAgI2RlZmluZSBfX2lubmVyX2ZhbGx0aHJvdWdoICAgICAgICAgICAgICAgICBfX0ZhbGxUaHJvdWdoKCk7CisKKyNlbHNlCisKKy8vIEBARU5EX0RES1NQTElUCisKKyNpZm5kZWYgX19udWxsCisgICAgI2RlZmluZSBfX251bGwKKyNlbmRpZgorI2lmbmRlZiBfX25vdG51bGwKKyAgICAjZGVmaW5lIF9fbm90bnVsbAorI2VuZGlmCisjaWZuZGVmIF9fbWF5YmVudWxsCisgICAgI2RlZmluZSBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fcmVhZG9ubHkKKyAgICAjZGVmaW5lIF9fcmVhZG9ubHkKKyNlbmRpZgorI2lmbmRlZiBfX25vdHJlYWRvbmx5CisgICAgI2RlZmluZSBfX25vdHJlYWRvbmx5CisjZW5kaWYKKyNpZm5kZWYgX19tYXliZXJlYWRvbmx5CisgICAgI2RlZmluZSBfX21heWJlcmVhZG9ubHkKKyNlbmRpZgorI2lmbmRlZiBfX3ZhbGlkCisgICAgI2RlZmluZSBfX3ZhbGlkCisjZW5kaWYKKyNpZm5kZWYgX19ub3R2YWxpZAorICAgICNkZWZpbmUgX19ub3R2YWxpZAorI2VuZGlmCisjaWZuZGVmIF9fbWF5YmV2YWxpZAorICAgICNkZWZpbmUgX19tYXliZXZhbGlkCisjZW5kaWYKKyNpZm5kZWYgX19yZWFkYWJsZVRvCisgICAgI2RlZmluZSBfX3JlYWRhYmxlVG8oZXh0ZW50KQorI2VuZGlmCisjaWZuZGVmIF9fZWxlbV9yZWFkYWJsZVRvCisgICAgI2RlZmluZSBfX2VsZW1fcmVhZGFibGVUbyhzaXplKQorI2VuZGlmCisjaWZuZGVmIF9fYnl0ZV9yZWFkYWJsZVRvCisgICAgI2RlZmluZSBfX2J5dGVfcmVhZGFibGVUbyhzaXplKQorI2VuZGlmCisjaWZuZGVmIF9fd3JpdGFibGVUbworICAgICNkZWZpbmUgX193cml0YWJsZVRvKHNpemUpCisjZW5kaWYKKyNpZm5kZWYgX19lbGVtX3dyaXRhYmxlVG8KKyAgICAjZGVmaW5lIF9fZWxlbV93cml0YWJsZVRvKHNpemUpCisjZW5kaWYKKyNpZm5kZWYgX19ieXRlX3dyaXRhYmxlVG8KKyAgICAjZGVmaW5lIF9fYnl0ZV93cml0YWJsZVRvKHNpemUpCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZgorICAgICNkZWZpbmUgX19kZXJlZgorI2VuZGlmCisjaWZuZGVmIF9fcHJlCisgICAgI2RlZmluZSBfX3ByZQorI2VuZGlmCisjaWZuZGVmIF9fcG9zdAorICAgICNkZWZpbmUgX19wb3N0CisjZW5kaWYKKyNpZm5kZWYgX19wcmVjb25kCisgICAgI2RlZmluZSBfX3ByZWNvbmQoZXhwcikKKyNlbmRpZgorI2lmbmRlZiBfX3Bvc3Rjb25kCisgICAgI2RlZmluZSBfX3Bvc3Rjb25kKGV4cHIpCisjZW5kaWYKKyNpZm5kZWYgX19leGNlcHR0aGF0CisgICAgI2RlZmluZSBfX2V4Y2VwdHRoYXQKKyNlbmRpZgorI2lmbmRlZiBfX2lubmVyX3N1Y2Nlc3MKKyAgICAjZGVmaW5lIF9faW5uZXJfc3VjY2VzcyhleHByKQorI2VuZGlmCisjaWZuZGVmIF9faW5uZXJfY2hlY2tSZXR1cm4KKyAgICAjZGVmaW5lIF9faW5uZXJfY2hlY2tSZXR1cm4KKyNlbmRpZgorI2lmbmRlZiBfX2lubmVyX3R5cGVmaXgKKyAgICAjZGVmaW5lIF9faW5uZXJfdHlwZWZpeChjdHlwZSkKKyNlbmRpZgorI2lmbmRlZiBfX2lubmVyX292ZXJyaWRlCisgICAgI2RlZmluZSBfX2lubmVyX292ZXJyaWRlCisjZW5kaWYKKyNpZm5kZWYgX19pbm5lcl9jYWxsYmFjaworICAgICNkZWZpbmUgX19pbm5lcl9jYWxsYmFjaworI2VuZGlmCisjaWZuZGVmIF9faW5uZXJfYmxvY2tzT24KKyAgICAjZGVmaW5lIF9faW5uZXJfYmxvY2tzT24ocmVzb3VyY2UpCisjZW5kaWYKKyNpZm5kZWYgX19pbm5lcl9mYWxsdGhyb3VnaF9kZWMKKyAgICAjZGVmaW5lIF9faW5uZXJfZmFsbHRocm91Z2hfZGVjCisjZW5kaWYKKyNpZm5kZWYgX19pbm5lcl9mYWxsdGhyb3VnaAorICAgICNkZWZpbmUgX19pbm5lcl9mYWxsdGhyb3VnaAorI2VuZGlmCisjaWZuZGVmIF9fcmVmcGFyYW0KKyAgICAjZGVmaW5lIF9fcmVmcGFyYW0KKyNlbmRpZgorI2lmbmRlZiBfX2lubmVyX2NvbnRyb2xfZW50cnlwb2ludAorICAgICNkZWZpbmUgX19pbm5lcl9jb250cm9sX2VudHJ5cG9pbnQoY2F0ZWdvcnkpCisjZW5kaWYKKyNpZm5kZWYgX19pbm5lcl9kYXRhX2VudHJ5cG9pbnQKKyAgICAjZGVmaW5lIF9faW5uZXJfZGF0YV9lbnRyeXBvaW50KGNhdGVnb3J5KQorI2VuZGlmCisvLyBAQEJFR0lOX0RES1NQTElUCisjZW5kaWYgLy8gI2lmIChfTVNDX1ZFUiA+PSAxMDAwKSAmJiAhZGVmaW5lZChNSURMX1BBU1MpICYmIGRlZmluZWQoX1BSRUZBU1RfKQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQnVmZmVyIEFubm90YXRpb24gRGVmaW5pdGlvbnMKKy8vCisvLyBBbnkgb2YgdGhlc2UgbWF5IGJlIHVzZWQgdG8gZGlyZWN0bHkgYW5ub3RhdGUgZnVuY3Rpb25zLCBidXQgb25seSBvbmUgc2hvdWxkCisvLyBiZSB1c2VkIGZvciBlYWNoIHBhcmFtZXRlci4gVG8gZGV0ZXJtaW5lIHdoaWNoIGFubm90YXRpb24gdG8gdXNlIGZvciBhIGdpdmVuCisvLyBidWZmZXIsIHVzZSB0aGUgdGFibGUgaW4gdGhlIGJ1ZmZlciBhbm5vdGF0aW9ucyBzZWN0aW9uLgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQEBFTkRfRERLU1BMSVQKKworI2lmbmRlZiBfX2Vjb3VudAorI2RlZmluZSBfX2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbm90bnVsbCBfX2VsZW1fd3JpdGFibGVUbyhzaXplKQorI2VuZGlmCisjaWZuZGVmIF9fYmNvdW50CisjZGVmaW5lIF9fYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ub3RudWxsIF9fYnl0ZV93cml0YWJsZVRvKHNpemUpCisjZW5kaWYKKyNpZm5kZWYgX19pbgorI2RlZmluZSBfX2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlIF9fdmFsaWQgX19wcmUgX19kZXJlZiBfX3JlYWRvbmx5CisjZW5kaWYKKyNpZm5kZWYgX19pbl9lY291bnQKKyNkZWZpbmUgX19pbl9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2luIF9fcHJlIF9fZWxlbV9yZWFkYWJsZVRvKHNpemUpCisjZW5kaWYKKyNpZm5kZWYgX19pbl9iY291bnQKKyNkZWZpbmUgX19pbl9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2luIF9fcHJlIF9fYnl0ZV9yZWFkYWJsZVRvKHNpemUpCisjZW5kaWYKKyNpZm5kZWYgX19vdXQKKyNkZWZpbmUgX19vdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vjb3VudCgxKSBfX3Bvc3QgX192YWxpZCBfX3JlZnBhcmFtCisjZW5kaWYKKyNpZm5kZWYgX19vdXRfZWNvdW50CisjZGVmaW5lIF9fb3V0X2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lY291bnQoc2l6ZSkgX19wb3N0IF9fdmFsaWQgX19yZWZwYXJhbQorI2VuZGlmCisjaWZuZGVmIF9fb3V0X2Jjb3VudAorI2RlZmluZSBfX291dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYmNvdW50KHNpemUpIF9fcG9zdCBfX3ZhbGlkIF9fcmVmcGFyYW0KKyNlbmRpZgorI2lmbmRlZiBfX291dF9lY291bnRfcGFydAorI2RlZmluZSBfX291dF9lY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Vjb3VudChzaXplKSBfX3Bvc3QgX19lbGVtX3JlYWRhYmxlVG8obGVuZ3RoKQorI2VuZGlmCisjaWZuZGVmIF9fb3V0X2Jjb3VudF9wYXJ0CisjZGVmaW5lIF9fb3V0X2Jjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfYmNvdW50KHNpemUpIF9fcG9zdCBfX2J5dGVfcmVhZGFibGVUbyhsZW5ndGgpCisjZW5kaWYKKyNpZm5kZWYgX19vdXRfZWNvdW50X2Z1bGwKKyNkZWZpbmUgX19vdXRfZWNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9lY291bnRfcGFydChzaXplLHNpemUpCisjZW5kaWYKKyNpZm5kZWYgX19vdXRfYmNvdW50X2Z1bGwKKyNkZWZpbmUgX19vdXRfYmNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9iY291bnRfcGFydChzaXplLHNpemUpCisjZW5kaWYKKyNpZm5kZWYgX19pbm91dAorI2RlZmluZSBfX2lub3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlIF9fdmFsaWQgX19wb3N0IF9fdmFsaWQgX19yZWZwYXJhbQorI2VuZGlmCisjaWZuZGVmIF9faW5vdXRfZWNvdW50CisjZGVmaW5lIF9faW5vdXRfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZWNvdW50KHNpemUpIF9fcHJlIF9fdmFsaWQKKyNlbmRpZgorI2lmbmRlZiBfX2lub3V0X2Jjb3VudAorI2RlZmluZSBfX2lub3V0X2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Jjb3VudChzaXplKSBfX3ByZSBfX3ZhbGlkCisjZW5kaWYKKyNpZm5kZWYgX19pbm91dF9lY291bnRfcGFydAorI2RlZmluZSBfX2lub3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSBfX3ByZSBfX3ZhbGlkIF9fcHJlIF9fZWxlbV9yZWFkYWJsZVRvKGxlbmd0aCkKKyNlbmRpZgorI2lmbmRlZiBfX2lub3V0X2Jjb3VudF9wYXJ0CisjZGVmaW5lIF9faW5vdXRfYmNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfYmNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpIF9fcHJlIF9fdmFsaWQgX19wcmUgX19ieXRlX3JlYWRhYmxlVG8obGVuZ3RoKQorI2VuZGlmCisjaWZuZGVmIF9faW5vdXRfZWNvdW50X2Z1bGwKKyNkZWZpbmUgX19pbm91dF9lY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lub3V0X2Vjb3VudF9wYXJ0KHNpemUsc2l6ZSkKKyNlbmRpZgorI2lmbmRlZiBfX2lub3V0X2Jjb3VudF9mdWxsCisjZGVmaW5lIF9faW5vdXRfYmNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9iY291bnRfcGFydChzaXplLHNpemUpCisjZW5kaWYKKworI2lmbmRlZiBfX2Vjb3VudF9vcHQKKyNkZWZpbmUgX19lY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fYmNvdW50X29wdAorI2RlZmluZSBfX2Jjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19pbl9vcHQKKyNkZWZpbmUgX19pbl9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9faW5fZWNvdW50X29wdAorI2RlZmluZSBfX2luX2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5fZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19pbl9iY291bnRfb3B0CisjZGVmaW5lIF9faW5fYmNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbl9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNlbmRpZgorI2lmbmRlZiBfX291dF9vcHQKKyNkZWZpbmUgX19vdXRfb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fb3V0X2Vjb3VudF9vcHQKKyNkZWZpbmUgX19vdXRfZWNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fb3V0X2Jjb3VudF9vcHQKKyNkZWZpbmUgX19vdXRfYmNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fb3V0X2Vjb3VudF9wYXJ0X29wdAorI2RlZmluZSBfX291dF9lY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19vdXRfYmNvdW50X3BhcnRfb3B0CisjZGVmaW5lIF9fb3V0X2Jjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgICAgX19vdXRfYmNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNlbmRpZgorI2lmbmRlZiBfX291dF9lY291bnRfZnVsbF9vcHQKKyNkZWZpbmUgX19vdXRfZWNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9lY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fb3V0X2Jjb3VudF9mdWxsX29wdAorI2RlZmluZSBfX291dF9iY291bnRfZnVsbF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2Jjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19pbm91dF9vcHQKKyNkZWZpbmUgX19pbm91dF9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2lub3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9faW5vdXRfZWNvdW50X29wdAorI2RlZmluZSBfX2lub3V0X2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5vdXRfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19pbm91dF9iY291bnRfb3B0CisjZGVmaW5lIF9faW5vdXRfYmNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNlbmRpZgorI2lmbmRlZiBfX2lub3V0X2Vjb3VudF9wYXJ0X29wdAorI2RlZmluZSBfX2lub3V0X2Vjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgIF9faW5vdXRfZWNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19pbm91dF9iY291bnRfcGFydF9vcHQKKyNkZWZpbmUgX19pbm91dF9iY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICAgICAgICBfX2lub3V0X2Jjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9faW5vdXRfZWNvdW50X2Z1bGxfb3B0CisjZGVmaW5lIF9faW5vdXRfZWNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm91dF9lY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNlbmRpZgorI2lmbmRlZiBfX2lub3V0X2Jjb3VudF9mdWxsX29wdAorI2RlZmluZSBfX2lub3V0X2Jjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW5vdXRfYmNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKworI2lmbmRlZiBfX2RlcmVmX2Vjb3VudAorI2RlZmluZSBfX2RlcmVmX2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZWNvdW50KDEpIF9fcG9zdCBfX2VsZW1fcmVhZGFibGVUbygxKSBfX3Bvc3QgX19kZXJlZiBfX25vdG51bGwgX19wb3N0IF9fZGVyZWYgX19lbGVtX3dyaXRhYmxlVG8oc2l6ZSkKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX2Jjb3VudAorI2RlZmluZSBfX2RlcmVmX2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZWNvdW50KDEpIF9fcG9zdCBfX2VsZW1fcmVhZGFibGVUbygxKSBfX3Bvc3QgX19kZXJlZiBfX25vdG51bGwgX19wb3N0IF9fZGVyZWYgX19ieXRlX3dyaXRhYmxlVG8oc2l6ZSkKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX2luCisjZGVmaW5lIF9fZGVyZWZfaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbiBfX3ByZSBfX2RlcmVmIF9fZGVyZWYgX19yZWFkb25seQorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfaW5fZWNvdW50CisjZGVmaW5lIF9fZGVyZWZfaW5fZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbiBfX3ByZSBfX2RlcmVmIF9fZWxlbV9yZWFkYWJsZVRvKHNpemUpCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9pbl9iY291bnQKKyNkZWZpbmUgX19kZXJlZl9pbl9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2luIF9fcHJlIF9fZGVyZWYgX19ieXRlX3JlYWRhYmxlVG8oc2l6ZSkKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX291dAorI2RlZmluZSBfX2RlcmVmX291dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfZWNvdW50KDEpIF9fcG9zdCBfX2RlcmVmIF9fdmFsaWQgX19yZWZwYXJhbQorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfb3V0X2Vjb3VudAorI2RlZmluZSBfX2RlcmVmX291dF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfZWNvdW50KHNpemUpIF9fcG9zdCBfX2RlcmVmIF9fdmFsaWQgX19yZWZwYXJhbQorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfb3V0X2Jjb3VudAorI2RlZmluZSBfX2RlcmVmX291dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfYmNvdW50KHNpemUpIF9fcG9zdCBfX2RlcmVmIF9fdmFsaWQgX19yZWZwYXJhbQorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfb3V0X2Vjb3VudF9wYXJ0CisjZGVmaW5lIF9fZGVyZWZfb3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfZWNvdW50KHNpemUpIF9fcG9zdCBfX2RlcmVmIF9fZWxlbV9yZWFkYWJsZVRvKGxlbmd0aCkKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX291dF9iY291bnRfcGFydAorI2RlZmluZSBfX2RlcmVmX291dF9iY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudChzaXplKSBfX3Bvc3QgX19kZXJlZiBfX2J5dGVfcmVhZGFibGVUbyhsZW5ndGgpCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9vdXRfZWNvdW50X2Z1bGwKKyNkZWZpbmUgX19kZXJlZl9vdXRfZWNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnRfcGFydChzaXplLHNpemUpCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9vdXRfYmNvdW50X2Z1bGwKKyNkZWZpbmUgX19kZXJlZl9vdXRfYmNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9iY291bnRfcGFydChzaXplLHNpemUpCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9pbm91dAorI2RlZmluZSBfX2RlcmVmX2lub3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbm90bnVsbCBfX2VsZW1fcmVhZGFibGVUbygxKSBfX3ByZSBfX2RlcmVmIF9fdmFsaWQgX19wb3N0IF9fZGVyZWYgX192YWxpZCBfX3JlZnBhcmFtCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9pbm91dF9lY291bnQKKyNkZWZpbmUgX19kZXJlZl9pbm91dF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0IF9fcHJlIF9fZGVyZWYgX19lbGVtX3dyaXRhYmxlVG8oc2l6ZSkgX19wb3N0IF9fZGVyZWYgX19lbGVtX3dyaXRhYmxlVG8oc2l6ZSkKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX2lub3V0X2Jjb3VudAorI2RlZmluZSBfX2RlcmVmX2lub3V0X2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXQgX19wcmUgX19kZXJlZiBfX2J5dGVfd3JpdGFibGVUbyhzaXplKSBfX3Bvc3QgX19kZXJlZiBfX2J5dGVfd3JpdGFibGVUbyhzaXplKQorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfaW5vdXRfZWNvdW50X3BhcnQKKyNkZWZpbmUgX19kZXJlZl9pbm91dF9lY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudChzaXplKSBfX3ByZSBfX2RlcmVmIF9fZWxlbV9yZWFkYWJsZVRvKGxlbmd0aCkgX19wb3N0IF9fZGVyZWYgX19lbGVtX3JlYWRhYmxlVG8obGVuZ3RoKQorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfaW5vdXRfYmNvdW50X3BhcnQKKyNkZWZpbmUgX19kZXJlZl9pbm91dF9iY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Jjb3VudChzaXplKSBfX3ByZSBfX2RlcmVmIF9fYnl0ZV9yZWFkYWJsZVRvKGxlbmd0aCkgX19wb3N0IF9fZGVyZWYgX19ieXRlX3JlYWRhYmxlVG8obGVuZ3RoKQorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfaW5vdXRfZWNvdW50X2Z1bGwKKyNkZWZpbmUgX19kZXJlZl9pbm91dF9lY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudF9wYXJ0KHNpemUsc2l6ZSkKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX2lub3V0X2Jjb3VudF9mdWxsCisjZGVmaW5lIF9fZGVyZWZfaW5vdXRfYmNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9iY291bnRfcGFydChzaXplLHNpemUpCisjZW5kaWYKKworI2lmbmRlZiBfX2RlcmVmX2Vjb3VudF9vcHQKKyNkZWZpbmUgX19kZXJlZl9lY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfYmNvdW50X29wdAorI2RlZmluZSBfX2RlcmVmX2Jjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgX19wb3N0IF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9pbl9vcHQKKyNkZWZpbmUgX19kZXJlZl9pbl9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlIF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9pbl9lY291bnRfb3B0CisjZGVmaW5lIF9fZGVyZWZfaW5fZWNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbl9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICBfX3ByZSBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfaW5fYmNvdW50X29wdAorI2RlZmluZSBfX2RlcmVmX2luX2Jjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5fYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgX19wcmUgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX291dF9vcHQKKyNkZWZpbmUgX19kZXJlZl9vdXRfb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfb3V0X2Vjb3VudF9vcHQKKyNkZWZpbmUgX19kZXJlZl9vdXRfZWNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfb3V0X2Jjb3VudF9vcHQKKyNkZWZpbmUgX19kZXJlZl9vdXRfYmNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfb3V0X2Vjb3VudF9wYXJ0X29wdAorI2RlZmluZSBfX2RlcmVmX291dF9lY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgX19wb3N0IF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9vdXRfYmNvdW50X3BhcnRfb3B0CisjZGVmaW5lIF9fZGVyZWZfb3V0X2Jjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfYmNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICBfX3Bvc3QgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX291dF9lY291bnRfZnVsbF9vcHQKKyNkZWZpbmUgX19kZXJlZl9vdXRfZWNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfb3V0X2Jjb3VudF9mdWxsX29wdAorI2RlZmluZSBfX2RlcmVmX291dF9iY291bnRfZnVsbF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgX19wb3N0IF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9pbm91dF9vcHQKKyNkZWZpbmUgX19kZXJlZl9pbm91dF9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJlIF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfaW5vdXRfZWNvdW50X29wdAorI2RlZmluZSBfX2RlcmVmX2lub3V0X2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgX19wcmUgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwgX19wb3N0IF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9pbm91dF9iY291bnRfb3B0CisjZGVmaW5lIF9fZGVyZWZfaW5vdXRfYmNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICBfX3ByZSBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbCBfX3Bvc3QgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX2lub3V0X2Vjb3VudF9wYXJ0X29wdAorI2RlZmluZSBfX2RlcmVmX2lub3V0X2Vjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfZWNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgX19wcmUgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwgX19wb3N0IF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9pbm91dF9iY291bnRfcGFydF9vcHQKKyNkZWZpbmUgX19kZXJlZl9pbm91dF9iY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Jjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgIF9fcHJlIF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsIF9fcG9zdCBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfaW5vdXRfZWNvdW50X2Z1bGxfb3B0CisjZGVmaW5lIF9fZGVyZWZfaW5vdXRfZWNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9lY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICBfX3ByZSBfX2RlcmVmIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbCBfX3Bvc3QgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX2lub3V0X2Jjb3VudF9mdWxsX29wdAorI2RlZmluZSBfX2RlcmVmX2lub3V0X2Jjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfYmNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgX19wcmUgX19kZXJlZiBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwgX19wb3N0IF9fZGVyZWYgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKworI2lmbmRlZiBfX2RlcmVmX29wdF9lY291bnQKKyNkZWZpbmUgX19kZXJlZl9vcHRfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfb3B0X2Jjb3VudAorI2RlZmluZSBfX2RlcmVmX29wdF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfYmNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9vcHRfaW4KKyNkZWZpbmUgX19kZXJlZl9vcHRfaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfb3B0X2luX2Vjb3VudAorI2RlZmluZSBfX2RlcmVmX29wdF9pbl9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5fZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9vcHRfaW5fYmNvdW50CisjZGVmaW5lIF9fZGVyZWZfb3B0X2luX2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbl9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX29wdF9vdXQKKyNkZWZpbmUgX19kZXJlZl9vcHRfb3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfb3B0X291dF9lY291bnQKKyNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X2Vjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfb3B0X291dF9iY291bnQKKyNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfb3B0X291dF9lY291bnRfcGFydAorI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfZWNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9vcHRfb3V0X2Jjb3VudF9wYXJ0CisjZGVmaW5lIF9fZGVyZWZfb3B0X291dF9iY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfYmNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX29wdF9vdXRfZWNvdW50X2Z1bGwKKyNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X2Vjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9lY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfb3B0X291dF9iY291bnRfZnVsbAorI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfYmNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9vcHRfaW5vdXQKKyNkZWZpbmUgX19kZXJlZl9vcHRfaW5vdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudAorI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9lY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfZWNvdW50KHNpemUpICAgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9vcHRfaW5vdXRfYmNvdW50CisjZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Jjb3VudChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9iY291bnQoc2l6ZSkgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX29wdF9pbm91dF9lY291bnRfcGFydAorI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9lY291bnRfcGFydChzaXplLGxlbmd0aCkgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfZWNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9vcHRfaW5vdXRfYmNvdW50X3BhcnQKKyNkZWZpbmUgX19kZXJlZl9vcHRfaW5vdXRfYmNvdW50X3BhcnQoc2l6ZSxsZW5ndGgpICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Jjb3VudF9wYXJ0KHNpemUsbGVuZ3RoKSAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudF9mdWxsCisjZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudF9mdWxsKHNpemUpICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9lY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX29wdF9pbm91dF9iY291bnRfZnVsbAorI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9iY291bnRfZnVsbChzaXplKSAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfaW5vdXRfYmNvdW50X2Z1bGwoc2l6ZSkgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKworI2lmbmRlZiBfX2RlcmVmX29wdF9lY291bnRfb3B0CisjZGVmaW5lIF9fZGVyZWZfb3B0X2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9lY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX29wdF9iY291bnRfb3B0CisjZGVmaW5lIF9fZGVyZWZfb3B0X2Jjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX29wdF9pbl9vcHQKKyNkZWZpbmUgX19kZXJlZl9vcHRfaW5fb3B0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2luX29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfb3B0X2luX2Vjb3VudF9vcHQKKyNkZWZpbmUgX19kZXJlZl9vcHRfaW5fZWNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2luX2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfb3B0X2luX2Jjb3VudF9vcHQKKyNkZWZpbmUgX19kZXJlZl9vcHRfaW5fYmNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX2luX2Jjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfb3B0X291dF9vcHQKKyNkZWZpbmUgX19kZXJlZl9vcHRfb3V0X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlcmVmX291dF9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfb3B0X291dF9lY291bnRfb3B0CisjZGVmaW5lIF9fZGVyZWZfb3B0X291dF9lY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9vdXRfZWNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX29wdF9vdXRfYmNvdW50X29wdAorI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfYmNvdW50X29wdChzaXplKSAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9vcHRfb3V0X2Vjb3VudF9wYXJ0X29wdAorI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfZWNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9vcHRfb3V0X2Jjb3VudF9wYXJ0X29wdAorI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfYmNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9vcHRfb3V0X2Vjb3VudF9mdWxsX29wdAorI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfZWNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Vjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9vcHRfb3V0X2Jjb3VudF9mdWxsX29wdAorI2RlZmluZSBfX2RlcmVmX29wdF9vdXRfYmNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICAgIF9fZGVyZWZfb3V0X2Jjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgICAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9vcHRfaW5vdXRfb3B0CisjZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9vcHQgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX29wdF9pbm91dF9lY291bnRfb3B0CisjZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9lY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX29wdF9pbm91dF9iY291bnRfb3B0CisjZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Jjb3VudF9vcHQoc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9iY291bnRfb3B0KHNpemUpICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX29wdF9pbm91dF9lY291bnRfcGFydF9vcHQKKyNkZWZpbmUgX19kZXJlZl9vcHRfaW5vdXRfZWNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgICAgICAgICBfX2RlcmVmX2lub3V0X2Vjb3VudF9wYXJ0X29wdChzaXplLGxlbmd0aCkgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisjaWZuZGVmIF9fZGVyZWZfb3B0X2lub3V0X2Jjb3VudF9wYXJ0X29wdAorI2RlZmluZSBfX2RlcmVmX29wdF9pbm91dF9iY291bnRfcGFydF9vcHQoc2l6ZSxsZW5ndGgpICAgICAgICAgIF9fZGVyZWZfaW5vdXRfYmNvdW50X3BhcnRfb3B0KHNpemUsbGVuZ3RoKSAgX19leGNlcHR0aGF0IF9fbWF5YmVudWxsCisjZW5kaWYKKyNpZm5kZWYgX19kZXJlZl9vcHRfaW5vdXRfZWNvdW50X2Z1bGxfb3B0CisjZGVmaW5lIF9fZGVyZWZfb3B0X2lub3V0X2Vjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgICAgICAgICAgX19kZXJlZl9pbm91dF9lY291bnRfZnVsbF9vcHQoc2l6ZSkgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKyNlbmRpZgorI2lmbmRlZiBfX2RlcmVmX29wdF9pbm91dF9iY291bnRfZnVsbF9vcHQKKyNkZWZpbmUgX19kZXJlZl9vcHRfaW5vdXRfYmNvdW50X2Z1bGxfb3B0KHNpemUpICAgICAgICAgICAgICAgICBfX2RlcmVmX2lub3V0X2Jjb3VudF9mdWxsX29wdChzaXplKSAgICAgICAgIF9fZXhjZXB0dGhhdCBfX21heWJlbnVsbAorI2VuZGlmCisKKy8vIEBAQkVHSU5fRERLU1BMSVQKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFkdmFuY2VkIEFubm90YXRpb24gRGVmaW5pdGlvbnMKKy8vCisvLyBBbnkgb2YgdGhlc2UgbWF5IGJlIHVzZWQgdG8gZGlyZWN0bHkgYW5ub3RhdGUgZnVuY3Rpb25zLCBhbmQgbWF5IGJlIHVzZWQgaW4KKy8vIGNvbWJpbmF0aW9uIHdpdGggZWFjaCBvdGhlciBvciB3aXRoIHJlZ3VsYXIgYnVmZmVyIG1hY3Jvcy4gRm9yIGFuIGV4cGxhbmF0aW9uCisvLyBvZiBlYWNoIGFubm90YXRpb24sIHNlZSB0aGUgYWR2YW5jZWQgYW5ub3RhdGlvbnMgc2VjdGlvbi4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEBARU5EX0RES1NQTElUCisKKyNpZm5kZWYgX19vdXRfYXdjb3VudAorI2RlZmluZSBfX291dF9hd2NvdW50KGV4cHIsc2l6ZSkgICAgICAgICAgICBfX3ByZSBfX25vdG51bGwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWNvbmQoZXhwcikgX19ieXRlX3dyaXRhYmxlVG8oc2l6ZSkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWNvbmQoIShleHByKSkgX19ieXRlX3dyaXRhYmxlVG8oKHNpemUpKjIpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wb3N0IF9fdmFsaWQgX19yZWZwYXJhbQorI2VuZGlmCisjaWZuZGVmIF9faW5fYXdjb3VudAorI2RlZmluZSBfX2luX2F3Y291bnQoZXhwcixzaXplKSAgICAgICAgICAgICBfX3ByZSBfX3ZhbGlkIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmUgX19kZXJlZiBfX3JlYWRvbmx5IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVjb25kKGV4cHIpIF9fYnl0ZV9yZWFkYWJsZVRvKHNpemUpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVjb25kKCEoZXhwcikpIF9fZWxlbV9yZWFkYWJsZVRvKHNpemUpCisjZW5kaWYKKyNpZm5kZWYgX19zdWNjZXNzCisjZGVmaW5lIF9fc3VjY2VzcyhleHByKSAgICAgICAgICAgICAgICAgICAgIF9faW5uZXJfc3VjY2VzcyhleHByKQorI2VuZGlmCisjaWZuZGVmIF9fbnVsbHRlcm1pbmF0ZWQKKyNkZWZpbmUgX19udWxsdGVybWluYXRlZCAgICAgICAgICAgICAgICAgICAgX19yZWFkYWJsZVRvKHNlbnRpbmVsKDApKQorI2VuZGlmCisjaWZuZGVmIF9fbnVsbG51bGx0ZXJtaW5hdGVkCisjZGVmaW5lIF9fbnVsbG51bGx0ZXJtaW5hdGVkCisjZW5kaWYKKyNpZm5kZWYgX19yZXNlcnZlZAorI2RlZmluZSBfX3Jlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZSBfX251bGwKKyNlbmRpZgorI2lmbmRlZiBfX2NoZWNrUmV0dXJuCisjZGVmaW5lIF9fY2hlY2tSZXR1cm4gICAgICAgICAgICAgICAgICAgICAgIF9faW5uZXJfY2hlY2tSZXR1cm4KKyNlbmRpZgorI2lmbmRlZiBfX3R5cGVmaXgKKyNkZWZpbmUgX190eXBlZml4KGN0eXBlKSAgICAgICAgICAgICAgICAgICAgX19pbm5lcl90eXBlZml4KGN0eXBlKQorI2VuZGlmCisjaWZuZGVmIF9fb3ZlcnJpZGUKKyNkZWZpbmUgX19vdmVycmlkZSAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm5lcl9vdmVycmlkZQorI2VuZGlmCisjaWZuZGVmIF9fY2FsbGJhY2sKKyNkZWZpbmUgX19jYWxsYmFjayAgICAgICAgICAgICAgICAgICAgICAgICAgX19pbm5lcl9jYWxsYmFjaworI2VuZGlmCisjaWZuZGVmIF9fZm9ybWF0X3N0cmluZworI2RlZmluZSBfX2Zvcm1hdF9zdHJpbmcKKyNlbmRpZgorI2lmbmRlZiBfX2Jsb2Nrc09uCisjZGVmaW5lIF9fYmxvY2tzT24ocmVzb3VyY2UpICAgICAgICAgICAgICAgIF9faW5uZXJfYmxvY2tzT24ocmVzb3VyY2UpCisjZW5kaWYKKyNpZm5kZWYgX19jb250cm9sX2VudHJ5cG9pbnQKKyNkZWZpbmUgX19jb250cm9sX2VudHJ5cG9pbnQoY2F0ZWdvcnkpICAgICAgX19pbm5lcl9jb250cm9sX2VudHJ5cG9pbnQoY2F0ZWdvcnkpCisjZW5kaWYKKyNpZm5kZWYgX19kYXRhX2VudHJ5cG9pbnQKKyNkZWZpbmUgX19kYXRhX2VudHJ5cG9pbnQoY2F0ZWdvcnkpICAgICAgICAgX19pbm5lcl9kYXRhX2VudHJ5cG9pbnQoY2F0ZWdvcnkpCisjZW5kaWYKKworI2lmbmRlZiBfX2ZhbGx0aHJvdWdoCisgICAgX19pbm5lcl9mYWxsdGhyb3VnaF9kZWMKKyAgICAjZGVmaW5lIF9fZmFsbHRocm91Z2ggX19pbm5lcl9mYWxsdGhyb3VnaAorI2VuZGlmCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERlcHJlY2F0ZWQgQW5ub3RhdGlvbiBEZWZpbml0aW9ucworLy8KKy8vIFRoZXNlIHNob3VsZCBiZSByZW1vdmVkIGZyb20gZXhpc3RpbmcgY29kZS4KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gI2RlZmluZSBfX29wdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2V4Y2VwdHRoYXQgX19tYXliZW51bGwKKworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2UvYXBwbGUvYXBwbGVfaW50LmggYi9jb3JlL3NyYy9meGdlL2FwcGxlL2FwcGxlX2ludC5oCmluZGV4IDVjNDJmMWIuLjQyZDYzNjIgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Z2UvYXBwbGUvYXBwbGVfaW50LmgKKysrIGIvY29yZS9zcmMvZnhnZS9hcHBsZS9hcHBsZV9pbnQuaApAQCAtMSwyNDYgKzEsMjQ2IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9BUFBMRV9JTlRfSF8NCi0jZGVmaW5lIF9BUFBMRV9JTlRfSF8NCi0jaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfDQotI2lmIF9GWF9PU18gPT0gX0ZYX01BQ09TWF8NCi0jaW5jbHVkZSA8Q2FyYm9uL0NhcmJvbi5oPg0KLSNlbmRpZg0KLXR5cGVkZWYgZW51bSBlRlhJT1NGT05UQ0hBUlNFVCB7DQotICAgIGVGWEZvbnRDaGFyc2V0REVGQVVMVCAgICAgICA9ICAgMCwNCi0gICAgZUZYRm9udENoYXJzZXRBTlNJICAgICAgICAgID0gICAxLA0KLSAgICBlRlhGb250Q2hhcnNldFNZTUJPTCAgICAgICAgPSAgIDEgPDwgMSwNCi0gICAgZUZYRm9udENoYXJzZXRTSElGVEpJUyAgICAgID0gICAxIDw8IDIsDQotICAgIGVGWEZvbnRDaGFyc2V0SEFOR0VVTCAgICAgICA9ICAgMSA8PCAzLA0KLSAgICBlRlhGb250Q2hhcnNldEdCMjMxMiAgICAgICAgPSAgIDEgPDwgNCwNCi0gICAgZUZYRm9udENoYXJzZXRDSElORVNFQklHNSAgID0gICAxIDw8IDUsDQotICAgIGVGWEZvbnRDaGFyc2V0VEhBSSAgICAgICAgICA9ICAgMSA8PCA2LA0KLSAgICBlRlhGb250Q2hhcnNldEVBU1RFVVJPUEUgICAgPSAgIDEgPDwgNywNCi0gICAgZUZYRm9udENoYXJzZXRSVVNTSUFOICAgICAgID0gICAxIDw8IDgsDQotICAgIGVGWEZvbnRDaGFyc2V0R1JFRUsgICAgICAgICA9ICAgMSA8PCA5LA0KLSAgICBlRlhGb250Q2hhcnNldFRVUktJU0ggICAgICAgPSAgIDEgPDwgMTAsDQotICAgIGVGWEZvbnRDaGFyc2V0SEVCUkVXICAgICAgICA9ICAgMSA8PCAxMSwNCi0gICAgZUZYRm9udENoYXJzZXRBUkFCSUMgICAgICAgID0gICAxIDw8IDEyLA0KLSAgICBlRlhGb250Q2hhcnNldEJBTFRJQyAgICAgICAgPSAgIDEgPDwgMTMsDQotfSBGWF9JT1NDSEFSU0VUOw0KLUZYX0lPU0NIQVJTRVQgRlhfR2V0aU9TQ2hhcnNldChpbnQgY2hhcnNldCk7DQotdHlwZWRlZiBlbnVtIGVGWElPU0ZPTlRGTEFHIHsNCi0gICAgZUZYRm9udEZsYWdCb2xkICAgICAgICAgPSAgMSwNCi0gICAgZUZYRm9udEZsYWdJdGFsaWMgICAgICAgPSAgMSA8PCAxLA0KLSAgICBlRlhGb250RmxhZ0ZpeGVkUGl0Y2ggICA9ICAxIDw8IDIsDQotICAgIGVGWEZvbnRGbGFnU2VyaWYgICAgICAgID0gIDEgPDwgMywNCi0gICAgZUZYRm9udEZsYWdTY3JpcHQgICAgICAgPSAgMSA8PCA0LA0KLX0gRlhfSU9TRk9OVEZMQUc7DQotdHlwZWRlZiBzdHJ1Y3QgX0lPU19GT05UREFUQSB7DQotICAgIEZYX0RXT1JEICAgICAgICBuSGFzaENvZGU7DQotICAgIGNvbnN0IGNoYXIqICAgICAgIHBzTmFtZTsNCi0gICAgRlhfRFdPUkQgICAgICAgIGNoYXJzZXRzOw0KLSAgICBGWF9EV09SRCAgICAgICAgc3R5bGVzOw0KLX0gSU9TX0ZPTlREQVRBOw0KLWNsYXNzIENRdWFydHoyRA0KLXsNCi1wdWJsaWM6DQotICAgIHZvaWQqCWNyZWF0ZUdyYXBoaWNzKENGWF9ESUJpdG1hcCogYml0bWFwKTsNCi0gICAgdm9pZAlkZXN0cm95R3JhcGhpY3Modm9pZCogZ3JhcGhpY3MpOw0KLQ0KLSAgICB2b2lkKglDcmVhdGVGb250KEZYX0xQQ0JZVEUgcEZvbnREYXRhLCBGWF9EV09SRCBkd0ZvbnRTaXplKTsNCi0gICAgdm9pZAlEZXN0cm95Rm9udCh2b2lkKiBwRm9udCk7DQotICAgIHZvaWQJc2V0R3JhcGhpY3NUZXh0TWF0cml4KHZvaWQqIGdyYXBoaWNzLCBDRlhfQWZmaW5lTWF0cml4KiBtYXRyaXgpOw0KLSAgICBGWF9CT09MCWRyYXdHcmFwaGljc1N0cmluZyh2b2lkKiAgICAgICAgICAgICAgICBncmFwaGljcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgICAgZm9udCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQgICAgICAgICAgICAgZm9udFNpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX1dPUkQqICAgICAgICAgICAgIGdseXBoSW5kaWNlcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dQb2ludCogICAgICAgICAgZ2x5cGhQb3NpdGlvbnMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0lOVDMyICAgICAgICAgICAgIGNoYXJzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9BUkdCICAgICAgICAgICAgICBhcmdiLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlhfQWZmaW5lTWF0cml4KiAgICBtYXRyaXggPSBOVUxMKTsNCi0gICAgdm9pZCBzYXZlR3JhcGhpY3NTdGF0ZSh2b2lkKiBncmFwaGljcyk7DQotICAgIHZvaWQgcmVzdG9yZUdyYXBoaWNzU3RhdGUodm9pZCogZ3JhcGhpY3MpOw0KLX07DQotY2xhc3MgQ0FwcGxlUGxhdGZvcm0gOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENBcHBsZVBsYXRmb3JtKCkNCi0gICAgew0KLSAgICAgICAgbV9wRm9udE1hcHBlciA9IE5VTEw7DQotICAgIH0NCi0gICAgfkNBcHBsZVBsYXRmb3JtKCkNCi0gICAgew0KLSAgICAgICAgaWYgKG1fcEZvbnRNYXBwZXIpIHsNCi0gICAgICAgICAgICBkZWxldGUgbV9wRm9udE1hcHBlcjsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDUXVhcnR6MkQJX3F1YXJ0ejJkOw0KLSAgICBJRlhfRm9udE1hcHBlciogbV9wRm9udE1hcHBlcjsNCi19Ow0KLWNsYXNzIENGWF9RdWFydHpEZXZpY2VEcml2ZXIgOiBwdWJsaWMgSUZYX1JlbmRlckRldmljZURyaXZlcg0KLXsNCi1wdWJsaWM6DQotICAgIENGWF9RdWFydHpEZXZpY2VEcml2ZXIoQ0dDb250ZXh0UmVmIGNvbnRleHQsIEZYX0lOVDMyIGRldmljZUNsYXNzKTsNCi0gICAgdmlydHVhbCB+Q0ZYX1F1YXJ0ekRldmljZURyaXZlcigpOw0KLQ0KLSAgICB2aXJ0dWFsIGludAkJR2V0RGV2aWNlQ2FwcyhpbnQgY2Fwc19pZCk7DQotICAgIHZpcnR1YWwgQ0ZYX01hdHJpeAlHZXRDVE0oKSBjb25zdDsNCi0gICAgdmlydHVhbCBDRlhfRElCaXRtYXAqICAgR2V0QmFja0Ryb3AoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIHZvaWQqCUdldFBsYXRmb3JtU3VyZmFjZSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHZpcnR1YWwgRlhfQk9PTCBJc1BTUHJpbnREcml2ZXIoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgdmlydHVhbCBGWF9CT09MCVN0YXJ0UmVuZGVyaW5nKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgdmlydHVhbCB2b2lkCUVuZFJlbmRlcmluZygpIHt9DQotICAgIHZpcnR1YWwgdm9pZAlTYXZlU3RhdGUoKTsNCi0gICAgdmlydHVhbCB2b2lkCVJlc3RvcmVTdGF0ZShGWF9CT09MIGJLZWVwU2F2ZWQpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJU2V0Q2xpcF9QYXRoRmlsbChjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWxsX21vZGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJU2V0Q2xpcF9QYXRoU3Ryb2tlKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAlEcmF3UGF0aChjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGZpbGxfY29sb3IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBzdHJva2VfY29sb3IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmlsbF9tb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcgPSAwLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxlbmRfdHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJU2V0UGl4ZWwoaW50IHgsIGludCB5LCBGWF9EV09SRCBjb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wgRmlsbFJlY3QoY29uc3QgRlhfUkVDVCogcFJlY3QsIEZYX0RXT1JEIGZpbGxfY29sb3IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZyA9IDAsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMLCBpbnQgYmxlbmRfdHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTCk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAlEcmF3Q29zbWV0aWNMaW5lKEZYX0ZMT0FUIHgxLCBGWF9GTE9BVCB5MSwgRlhfRkxPQVQgeDIsIEZYX0ZMT0FUIHkyLCBGWF9EV09SRCBjb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCwgaW50IGJsZW5kX3R5cGUgPSBGWERJQl9CTEVORF9OT1JNQUwpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wgR2V0Q2xpcEJveChGWF9SRUNUKiBwUmVjdCk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAlHZXRESUJpdHMoQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCBpbnQgbGVmdCwgaW50IHRvcCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwsIEZYX0JPT0wgYkRFZGdlID0gRkFMU0UpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJU2V0RElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIEZYX0RXT1JEIGNvbG9yLCBjb25zdCBGWF9SRUNUKiBwU3JjUmVjdCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF9sZWZ0LCBpbnQgZGVzdF90b3AsIGludCBibGVuZF90eXBlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJU3RyZXRjaERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBGWF9EV09SRCBjb2xvciwgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0LCBjb25zdCBGWF9SRUNUKiBwQ2xpcFJlY3QsIEZYX0RXT1JEIGZsYWdzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZyA9IDAsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMLCBpbnQgYmxlbmRfdHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTCk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAlTdGFydERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBpbnQgYml0bWFwX2FscGhhLCBGWF9EV09SRCBjb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIEZYX0RXT1JEIGZsYWdzLCBGWF9MUFZPSUQmIGhhbmRsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxlbmRfdHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHZpcnR1YWwgRlhfQk9PTAlDb250aW51ZURJQml0cyhGWF9MUFZPSUQgaGFuZGxlLCBJRlhfUGF1c2UqIHBQYXVzZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHZpcnR1YWwgdm9pZAlDYW5jZWxESUJpdHMoRlhfTFBWT0lEIGhhbmRsZSkge30NCi0gICAgdmlydHVhbCBGWF9CT09MIERyYXdEZXZpY2VUZXh0KGludCBuQ2hhcnMsIGNvbnN0IEZYVEVYVF9DSEFSUE9TKiBwQ2hhclBvcywgQ0ZYX0ZvbnQqIHBGb250LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX0ZvbnRDYWNoZSogcENhY2hlLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkRldmljZSwgRlhfRkxPQVQgZm9udF9zaXplLCBGWF9EV09SRCBjb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwpOw0KLSAgICB2aXJ0dWFsIHZvaWQgICAgQ2xlYXJEcml2ZXIoKTsNCi1wcm90ZWN0ZWQ6DQotICAgIHZvaWQgc2V0U3Ryb2tlSW5mbyhjb25zdCBDRlhfR3JhcGhTdGF0ZURhdGEgKiBncmFwaFN0YXRlLCBGWF9BUkdCIGFyZ2IsIEZYX0ZMT0FUIGxpbmVXaWR0aCk7DQotICAgIHZvaWQgc2V0RmlsbEluZm8oRlhfQVJHQiBhcmdiKTsNCi0gICAgdm9pZCBzZXRQYXRoVG9Db250ZXh0KGNvbnN0IENGWF9QYXRoRGF0YSAqIHBhdGhEYXRhKTsNCi0gICAgRlhfRkxPQVQgZ2V0TGluZVdpZHRoKGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSAqIGdyYXBoU3RhdGUsIENHQWZmaW5lVHJhbnNmb3JtIGN0bSk7DQotICAgIEZYX0JPT0wgQ0dfRHJhd0dseXBSdW4oaW50ICAgICAgICAgICAgICAgICAgICAgICAgbkNoYXJzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZYVEVYVF9DSEFSUE9TKiAgICAgIHBDaGFyUG9zLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9Gb250KiAgICAgICAgICAgICAgICAgIHBGb250LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9Gb250Q2FjaGUqICAgICAgICAgICAgIHBDYWNoZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiAgICBwR2x5cGhNYXRyaXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogICAgcE9iamVjdDJEZXZpY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQgICAgICAgICAgICAgICAgICAgZm9udF9zaXplLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEICAgICAgICAgICAgICAgICAgIGFyZ2IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGFfZmxhZywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgICAgICAgICAgICBwSWNjVHJhbnNmb3JtKTsNCi0gICAgdm9pZCAgICBDR19TZXRJbWFnZVRyYW5zZm9ybShpbnQgZGVzdF9sZWZ0LCBpbnQgZGVzdF90b3AsIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsIENHUmVjdCogcmVjdCA9IE5VTEwpOw0KLXByb3RlY3RlZDoNCi0gICAgQ0dDb250ZXh0UmVmCV9jb250ZXh0Ow0KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBfZm94aXREZXZpY2UyVXNlcjsNCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gX3VzZXIyRm94aXREZXZpY2U7DQotICAgIEZYX0lOVDMyICAgICAgICBtX3NhdmVDb3VudDsNCi0NCi0gICAgRlhfSU5UMzIJCV93aWR0aDsNCi0gICAgRlhfSU5UMzIJCV9oZWlnaHQ7DQotICAgIEZYX0lOVDMyCQlfYml0c1BlclBpeGVsOw0KLSAgICBGWF9JTlQzMgkJX2RldmljZUNsYXNzOw0KLSAgICBGWF9JTlQzMgkJX3JlbmRlckNhcHM7DQotICAgIEZYX0lOVDMyCV9ob3J6U2l6ZTsNCi0gICAgRlhfSU5UMzIJX3ZlcnRTaXplOw0KLX07DQotY2xhc3MgQ0ZYX0ZvbnRQcm92aWRlciA6IHB1YmxpYyBJRlhfRmlsZVJlYWQNCi17DQotcHVibGljOg0KLSAgICB2aXJ0dWFsIHZvaWQJCQlSZWxlYXNlKCkNCi0gICAgew0KLSAgICAgICAgZGVsZXRlIHRoaXM7DQotICAgIH0NCi0gICAgdmlydHVhbCBGWF9GSUxFU0laRQkJR2V0U2l6ZSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAoRlhfRklMRVNJWkUpX3RvdGFsU2l6ZTsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJCQlSZWFkQmxvY2sodm9pZCogYnVmZmVyLCBGWF9GSUxFU0laRSBvZmZzZXQsIHNpemVfdCBzaXplKTsNCi0NCi0gICAgdmlydHVhbCBGWF9CT09MCQkJSXNFT0YoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gX29mZlNldCA9PSBfdG90YWxTaXplOw0KLSAgICB9DQotICAgIHZpcnR1YWwgRlhfRklMRVNJWkUJCUdldFBvc2l0aW9uKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIChGWF9GSUxFU0laRSlfb2ZmU2V0Ow0KLSAgICB9DQotICAgIHZpcnR1YWwgc2l6ZV90CQkJUmVhZEJsb2NrKHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpOw0KLXB1YmxpYzoNCi0gICAgQ0ZYX0ZvbnRQcm92aWRlcihDR0ZvbnRSZWYgY2dGb250KTsNCi0gICAgfkNGWF9Gb250UHJvdmlkZXIoKTsNCi0gICAgdm9pZCAgICAgICAgICAgIEluaXRUYWJsZU9mZnNldCgpOw0KLSAgICB1bnNpZ25lZCBsb25nICAgUmVhZCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgY2hhciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsNCi1wcm90ZWN0ZWQ6DQotICAgIHVpbnQzMl90IENhbGNUYWJsZUNoZWNrU3VtKGNvbnN0IHVpbnQzMl90ICp0YWJsZSwgdWludDMyX3QgbnVtYmVyT2ZCeXRlc0luVGFibGUpOw0KLSAgICB1aW50MzJfdCBDYWxjVGFibGVEYXRhUmVmQ2hlY2tTdW0oQ0ZEYXRhUmVmIGRhdGFSZWYpOw0KLXByaXZhdGU6DQotICAgIENHRm9udFJlZiAgIG1fY2dGb250Ow0KLSAgICBVSW50MzIgICAgICBtX2lUYWJsZVNpemU7DQotICAgIHNpemVfdCAgICAgIF9vZmZTZXQ7DQotICAgIHR5cGVkZWYgc3RydWN0IEZvbnRIZWFkZXIgew0KLSAgICAgICAgaW50MzJfdCBmVmVyc2lvbjsNCi0gICAgICAgIHVpbnQxNl90IGZOdW1UYWJsZXM7DQotICAgICAgICB1aW50MTZfdCBmU2VhcmNoUmFuZ2U7DQotICAgICAgICB1aW50MTZfdCBmRW50cnlTZWxlY3RvcjsNCi0gICAgICAgIHVpbnQxNl90IGZSYW5nZVNoaWZ0Ow0KLSAgICB9IEZvbnRIZWFkZXI7DQotICAgIHR5cGVkZWYgc3RydWN0IFRhYmxlRW50cnkgew0KLSAgICAgICAgdWludDMyX3QgZlRhZzsNCi0gICAgICAgIHVpbnQzMl90IGZDaGVja1N1bTsNCi0gICAgICAgIHVpbnQzMl90IGZPZmZzZXQ7DQotICAgICAgICB1aW50MzJfdCBmTGVuZ3RoOw0KLSAgICB9IFRhYmxlRW50cnk7DQotICAgIEZvbnRIZWFkZXIgX2ZvbnRIZWFkZXI7DQotICAgIHVuc2lnbmVkIGNoYXIgKiBfdGFibGVFbnRyaWVzOw0KLSAgICBzaXplX3QgKiBfdGFibGVPZmZzZXRzOw0KLSAgICBpbnQgX3RhYmxlQ291bnQ7DQotICAgIGludCBfdG90YWxTaXplOw0KLX07DQotRlhfVUlOVDMyIEZYX0dldEhhc2hDb2RlKCBGWF9MUENTVFIgcFN0cik7DQotRlhfRFdPUkQgIEZYX0lPU0dldE1hdGNoRmFtaWx5TmFtZUhhc2hjb2RlKEZYX0xQQ1NUUiBwRm9udE5hbWUpOw0KLUZYX1VJTlQzMiBGWF9JT1NHZXRGYW1pbHlOYW1lc0NvdW50KCk7DQotRlhfTFBDU1RSIEZYX0lPU0dldEZhbWlseU5hbWUoIEZYX1VJTlQzMiB1SW5kZXgpOw0KLSNlbmRpZg0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0FQUExFX0lOVF9IXworI2RlZmluZSBfQVBQTEVfSU5UX0hfCisjaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfCisjaWYgX0ZYX09TXyA9PSBfRlhfTUFDT1NYXworI2luY2x1ZGUgPENhcmJvbi9DYXJib24uaD4KKyNlbmRpZgordHlwZWRlZiBlbnVtIGVGWElPU0ZPTlRDSEFSU0VUIHsKKyAgICBlRlhGb250Q2hhcnNldERFRkFVTFQgICAgICAgPSAgIDAsCisgICAgZUZYRm9udENoYXJzZXRBTlNJICAgICAgICAgID0gICAxLAorICAgIGVGWEZvbnRDaGFyc2V0U1lNQk9MICAgICAgICA9ICAgMSA8PCAxLAorICAgIGVGWEZvbnRDaGFyc2V0U0hJRlRKSVMgICAgICA9ICAgMSA8PCAyLAorICAgIGVGWEZvbnRDaGFyc2V0SEFOR0VVTCAgICAgICA9ICAgMSA8PCAzLAorICAgIGVGWEZvbnRDaGFyc2V0R0IyMzEyICAgICAgICA9ICAgMSA8PCA0LAorICAgIGVGWEZvbnRDaGFyc2V0Q0hJTkVTRUJJRzUgICA9ICAgMSA8PCA1LAorICAgIGVGWEZvbnRDaGFyc2V0VEhBSSAgICAgICAgICA9ICAgMSA8PCA2LAorICAgIGVGWEZvbnRDaGFyc2V0RUFTVEVVUk9QRSAgICA9ICAgMSA8PCA3LAorICAgIGVGWEZvbnRDaGFyc2V0UlVTU0lBTiAgICAgICA9ICAgMSA8PCA4LAorICAgIGVGWEZvbnRDaGFyc2V0R1JFRUsgICAgICAgICA9ICAgMSA8PCA5LAorICAgIGVGWEZvbnRDaGFyc2V0VFVSS0lTSCAgICAgICA9ICAgMSA8PCAxMCwKKyAgICBlRlhGb250Q2hhcnNldEhFQlJFVyAgICAgICAgPSAgIDEgPDwgMTEsCisgICAgZUZYRm9udENoYXJzZXRBUkFCSUMgICAgICAgID0gICAxIDw8IDEyLAorICAgIGVGWEZvbnRDaGFyc2V0QkFMVElDICAgICAgICA9ICAgMSA8PCAxMywKK30gRlhfSU9TQ0hBUlNFVDsKK0ZYX0lPU0NIQVJTRVQgRlhfR2V0aU9TQ2hhcnNldChpbnQgY2hhcnNldCk7Cit0eXBlZGVmIGVudW0gZUZYSU9TRk9OVEZMQUcgeworICAgIGVGWEZvbnRGbGFnQm9sZCAgICAgICAgID0gIDEsCisgICAgZUZYRm9udEZsYWdJdGFsaWMgICAgICAgPSAgMSA8PCAxLAorICAgIGVGWEZvbnRGbGFnRml4ZWRQaXRjaCAgID0gIDEgPDwgMiwKKyAgICBlRlhGb250RmxhZ1NlcmlmICAgICAgICA9ICAxIDw8IDMsCisgICAgZUZYRm9udEZsYWdTY3JpcHQgICAgICAgPSAgMSA8PCA0LAorfSBGWF9JT1NGT05URkxBRzsKK3R5cGVkZWYgc3RydWN0IF9JT1NfRk9OVERBVEEgeworICAgIEZYX0RXT1JEICAgICAgICBuSGFzaENvZGU7CisgICAgY29uc3QgY2hhciogICAgICAgcHNOYW1lOworICAgIEZYX0RXT1JEICAgICAgICBjaGFyc2V0czsKKyAgICBGWF9EV09SRCAgICAgICAgc3R5bGVzOworfSBJT1NfRk9OVERBVEE7CitjbGFzcyBDUXVhcnR6MkQKK3sKK3B1YmxpYzoKKyAgICB2b2lkKgljcmVhdGVHcmFwaGljcyhDRlhfRElCaXRtYXAqIGJpdG1hcCk7CisgICAgdm9pZAlkZXN0cm95R3JhcGhpY3Modm9pZCogZ3JhcGhpY3MpOworCisgICAgdm9pZCoJQ3JlYXRlRm9udChGWF9MUENCWVRFIHBGb250RGF0YSwgRlhfRFdPUkQgZHdGb250U2l6ZSk7CisgICAgdm9pZAlEZXN0cm95Rm9udCh2b2lkKiBwRm9udCk7CisgICAgdm9pZAlzZXRHcmFwaGljc1RleHRNYXRyaXgodm9pZCogZ3JhcGhpY3MsIENGWF9BZmZpbmVNYXRyaXgqIG1hdHJpeCk7CisgICAgRlhfQk9PTAlkcmF3R3JhcGhpY3NTdHJpbmcodm9pZCogICAgICAgICAgICAgICAgZ3JhcGhpY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgICAgZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCAgICAgICAgICAgICBmb250U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9XT1JEKiAgICAgICAgICAgICBnbHlwaEluZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dQb2ludCogICAgICAgICAgZ2x5cGhQb3NpdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfSU5UMzIgICAgICAgICAgICAgY2hhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQVJHQiAgICAgICAgICAgICAgYXJnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlhfQWZmaW5lTWF0cml4KiAgICBtYXRyaXggPSBOVUxMKTsKKyAgICB2b2lkIHNhdmVHcmFwaGljc1N0YXRlKHZvaWQqIGdyYXBoaWNzKTsKKyAgICB2b2lkIHJlc3RvcmVHcmFwaGljc1N0YXRlKHZvaWQqIGdyYXBoaWNzKTsKK307CitjbGFzcyBDQXBwbGVQbGF0Zm9ybSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ0FwcGxlUGxhdGZvcm0oKQorICAgIHsKKyAgICAgICAgbV9wRm9udE1hcHBlciA9IE5VTEw7CisgICAgfQorICAgIH5DQXBwbGVQbGF0Zm9ybSgpCisgICAgeworICAgICAgICBpZiAobV9wRm9udE1hcHBlcikgeworICAgICAgICAgICAgZGVsZXRlIG1fcEZvbnRNYXBwZXI7CisgICAgICAgIH0KKyAgICB9CisgICAgQ1F1YXJ0ejJECV9xdWFydHoyZDsKKyAgICBJRlhfRm9udE1hcHBlciogbV9wRm9udE1hcHBlcjsKK307CitjbGFzcyBDRlhfUXVhcnR6RGV2aWNlRHJpdmVyIDogcHVibGljIElGWF9SZW5kZXJEZXZpY2VEcml2ZXIKK3sKK3B1YmxpYzoKKyAgICBDRlhfUXVhcnR6RGV2aWNlRHJpdmVyKENHQ29udGV4dFJlZiBjb250ZXh0LCBGWF9JTlQzMiBkZXZpY2VDbGFzcyk7CisgICAgdmlydHVhbCB+Q0ZYX1F1YXJ0ekRldmljZURyaXZlcigpOworCisgICAgdmlydHVhbCBpbnQJCUdldERldmljZUNhcHMoaW50IGNhcHNfaWQpOworICAgIHZpcnR1YWwgQ0ZYX01hdHJpeAlHZXRDVE0oKSBjb25zdDsKKyAgICB2aXJ0dWFsIENGWF9ESUJpdG1hcCogICBHZXRCYWNrRHJvcCgpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdmlydHVhbCB2b2lkKglHZXRQbGF0Zm9ybVN1cmZhY2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHZpcnR1YWwgRlhfQk9PTCBJc1BTUHJpbnREcml2ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICB2aXJ0dWFsIEZYX0JPT0wJU3RhcnRSZW5kZXJpbmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZAlFbmRSZW5kZXJpbmcoKSB7fQorICAgIHZpcnR1YWwgdm9pZAlTYXZlU3RhdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQJUmVzdG9yZVN0YXRlKEZYX0JPT0wgYktlZXBTYXZlZCk7CisgICAgdmlydHVhbCBGWF9CT09MCVNldENsaXBfUGF0aEZpbGwoY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpbGxfbW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJU2V0Q2xpcF9QYXRoU3Ryb2tlKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfR3JhcGhTdGF0ZURhdGEqIHBHcmFwaFN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgdmlydHVhbCBGWF9CT09MCURyYXdQYXRoKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgZmlsbF9jb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgc3Ryb2tlX2NvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmlsbF9tb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZyA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxlbmRfdHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgdmlydHVhbCBGWF9CT09MCVNldFBpeGVsKGludCB4LCBpbnQgeSwgRlhfRFdPUkQgY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHZpcnR1YWwgRlhfQk9PTCBGaWxsUmVjdChjb25zdCBGWF9SRUNUKiBwUmVjdCwgRlhfRFdPUkQgZmlsbF9jb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcgPSAwLCB2b2lkKiBwSWNjVHJhbnNmb3JtID0gTlVMTCwgaW50IGJsZW5kX3R5cGUgPSBGWERJQl9CTEVORF9OT1JNQUwpOworICAgIHZpcnR1YWwgRlhfQk9PTAlEcmF3Q29zbWV0aWNMaW5lKEZYX0ZMT0FUIHgxLCBGWF9GTE9BVCB5MSwgRlhfRkxPQVQgeDIsIEZYX0ZMT0FUIHkyLCBGWF9EV09SRCBjb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZyA9IDAsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMLCBpbnQgYmxlbmRfdHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTCk7CisgICAgdmlydHVhbCBGWF9CT09MIEdldENsaXBCb3goRlhfUkVDVCogcFJlY3QpOworICAgIHZpcnR1YWwgRlhfQk9PTAlHZXRESUJpdHMoQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCBpbnQgbGVmdCwgaW50IHRvcCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwsIEZYX0JPT0wgYkRFZGdlID0gRkFMU0UpOworICAgIHZpcnR1YWwgRlhfQk9PTAlTZXRESUJpdHMoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwgRlhfRFdPUkQgY29sb3IsIGNvbnN0IEZYX1JFQ1QqIHBTcmNSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLCBpbnQgYmxlbmRfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwpOworICAgIHZpcnR1YWwgRlhfQk9PTAlTdHJldGNoRElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIEZYX0RXT1JEIGNvbG9yLCBpbnQgZGVzdF9sZWZ0LCBpbnQgZGVzdF90b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgY29uc3QgRlhfUkVDVCogcENsaXBSZWN0LCBGWF9EV09SRCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZyA9IDAsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMLCBpbnQgYmxlbmRfdHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTCk7CisgICAgdmlydHVhbCBGWF9CT09MCVN0YXJ0RElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIGludCBiaXRtYXBfYWxwaGEsIEZYX0RXT1JEIGNvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LCBGWF9EV09SRCBmbGFncywgRlhfTFBWT0lEJiBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibGVuZF90eXBlID0gRlhESUJfQkxFTkRfTk9STUFMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICB2aXJ0dWFsIEZYX0JPT0wJQ29udGludWVESUJpdHMoRlhfTFBWT0lEIGhhbmRsZSwgSUZYX1BhdXNlKiBwUGF1c2UpCisgICAgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZAlDYW5jZWxESUJpdHMoRlhfTFBWT0lEIGhhbmRsZSkge30KKyAgICB2aXJ0dWFsIEZYX0JPT0wgRHJhd0RldmljZVRleHQoaW50IG5DaGFycywgY29uc3QgRlhURVhUX0NIQVJQT1MqIHBDaGFyUG9zLCBDRlhfRm9udCogcEZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9Gb250Q2FjaGUqIHBDYWNoZSwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsIEZYX0ZMT0FUIGZvbnRfc2l6ZSwgRlhfRFdPUkQgY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwpOworICAgIHZpcnR1YWwgdm9pZCAgICBDbGVhckRyaXZlcigpOworcHJvdGVjdGVkOgorICAgIHZvaWQgc2V0U3Ryb2tlSW5mbyhjb25zdCBDRlhfR3JhcGhTdGF0ZURhdGEgKiBncmFwaFN0YXRlLCBGWF9BUkdCIGFyZ2IsIEZYX0ZMT0FUIGxpbmVXaWR0aCk7CisgICAgdm9pZCBzZXRGaWxsSW5mbyhGWF9BUkdCIGFyZ2IpOworICAgIHZvaWQgc2V0UGF0aFRvQ29udGV4dChjb25zdCBDRlhfUGF0aERhdGEgKiBwYXRoRGF0YSk7CisgICAgRlhfRkxPQVQgZ2V0TGluZVdpZHRoKGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSAqIGdyYXBoU3RhdGUsIENHQWZmaW5lVHJhbnNmb3JtIGN0bSk7CisgICAgRlhfQk9PTCBDR19EcmF3R2x5cFJ1bihpbnQgICAgICAgICAgICAgICAgICAgICAgICBuQ2hhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGWFRFWFRfQ0hBUlBPUyogICAgICBwQ2hhclBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9Gb250KiAgICAgICAgICAgICAgICAgIHBGb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX0ZvbnRDYWNoZSogICAgICAgICAgICAgcENhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogICAgcEdseXBoTWF0cml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogICAgcE9iamVjdDJEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCAgICAgICAgICAgICAgICAgICBmb250X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCAgICAgICAgICAgICAgICAgICBhcmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGFfZmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICAgICAgIHBJY2NUcmFuc2Zvcm0pOworICAgIHZvaWQgICAgQ0dfU2V0SW1hZ2VUcmFuc2Zvcm0oaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLCBpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0LCBDR1JlY3QqIHJlY3QgPSBOVUxMKTsKK3Byb3RlY3RlZDoKKyAgICBDR0NvbnRleHRSZWYJX2NvbnRleHQ7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gX2ZveGl0RGV2aWNlMlVzZXI7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gX3VzZXIyRm94aXREZXZpY2U7CisgICAgRlhfSU5UMzIgICAgICAgIG1fc2F2ZUNvdW50OworCisgICAgRlhfSU5UMzIJCV93aWR0aDsKKyAgICBGWF9JTlQzMgkJX2hlaWdodDsKKyAgICBGWF9JTlQzMgkJX2JpdHNQZXJQaXhlbDsKKyAgICBGWF9JTlQzMgkJX2RldmljZUNsYXNzOworICAgIEZYX0lOVDMyCQlfcmVuZGVyQ2FwczsKKyAgICBGWF9JTlQzMglfaG9yelNpemU7CisgICAgRlhfSU5UMzIJX3ZlcnRTaXplOworfTsKK2NsYXNzIENGWF9Gb250UHJvdmlkZXIgOiBwdWJsaWMgSUZYX0ZpbGVSZWFkCit7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkCQkJUmVsZWFzZSgpCisgICAgeworICAgICAgICBkZWxldGUgdGhpczsKKyAgICB9CisgICAgdmlydHVhbCBGWF9GSUxFU0laRQkJR2V0U2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gKEZYX0ZJTEVTSVpFKV90b3RhbFNpemU7CisgICAgfQorICAgIHZpcnR1YWwgRlhfQk9PTAkJCVJlYWRCbG9jayh2b2lkKiBidWZmZXIsIEZYX0ZJTEVTSVpFIG9mZnNldCwgc2l6ZV90IHNpemUpOworCisgICAgdmlydHVhbCBGWF9CT09MCQkJSXNFT0YoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIF9vZmZTZXQgPT0gX3RvdGFsU2l6ZTsKKyAgICB9CisgICAgdmlydHVhbCBGWF9GSUxFU0laRQkJR2V0UG9zaXRpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChGWF9GSUxFU0laRSlfb2ZmU2V0OworICAgIH0KKyAgICB2aXJ0dWFsIHNpemVfdAkJCVJlYWRCbG9jayh2b2lkKiBidWZmZXIsIHNpemVfdCBzaXplKTsKK3B1YmxpYzoKKyAgICBDRlhfRm9udFByb3ZpZGVyKENHRm9udFJlZiBjZ0ZvbnQpOworICAgIH5DRlhfRm9udFByb3ZpZGVyKCk7CisgICAgdm9pZCAgICAgICAgICAgIEluaXRUYWJsZU9mZnNldCgpOworICAgIHVuc2lnbmVkIGxvbmcgICBSZWFkKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworcHJvdGVjdGVkOgorICAgIHVpbnQzMl90IENhbGNUYWJsZUNoZWNrU3VtKGNvbnN0IHVpbnQzMl90ICp0YWJsZSwgdWludDMyX3QgbnVtYmVyT2ZCeXRlc0luVGFibGUpOworICAgIHVpbnQzMl90IENhbGNUYWJsZURhdGFSZWZDaGVja1N1bShDRkRhdGFSZWYgZGF0YVJlZik7Citwcml2YXRlOgorICAgIENHRm9udFJlZiAgIG1fY2dGb250OworICAgIFVJbnQzMiAgICAgIG1faVRhYmxlU2l6ZTsKKyAgICBzaXplX3QgICAgICBfb2ZmU2V0OworICAgIHR5cGVkZWYgc3RydWN0IEZvbnRIZWFkZXIgeworICAgICAgICBpbnQzMl90IGZWZXJzaW9uOworICAgICAgICB1aW50MTZfdCBmTnVtVGFibGVzOworICAgICAgICB1aW50MTZfdCBmU2VhcmNoUmFuZ2U7CisgICAgICAgIHVpbnQxNl90IGZFbnRyeVNlbGVjdG9yOworICAgICAgICB1aW50MTZfdCBmUmFuZ2VTaGlmdDsKKyAgICB9IEZvbnRIZWFkZXI7CisgICAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVFbnRyeSB7CisgICAgICAgIHVpbnQzMl90IGZUYWc7CisgICAgICAgIHVpbnQzMl90IGZDaGVja1N1bTsKKyAgICAgICAgdWludDMyX3QgZk9mZnNldDsKKyAgICAgICAgdWludDMyX3QgZkxlbmd0aDsKKyAgICB9IFRhYmxlRW50cnk7CisgICAgRm9udEhlYWRlciBfZm9udEhlYWRlcjsKKyAgICB1bnNpZ25lZCBjaGFyICogX3RhYmxlRW50cmllczsKKyAgICBzaXplX3QgKiBfdGFibGVPZmZzZXRzOworICAgIGludCBfdGFibGVDb3VudDsKKyAgICBpbnQgX3RvdGFsU2l6ZTsKK307CitGWF9VSU5UMzIgRlhfR2V0SGFzaENvZGUoIEZYX0xQQ1NUUiBwU3RyKTsKK0ZYX0RXT1JEICBGWF9JT1NHZXRNYXRjaEZhbWlseU5hbWVIYXNoY29kZShGWF9MUENTVFIgcEZvbnROYW1lKTsKK0ZYX1VJTlQzMiBGWF9JT1NHZXRGYW1pbHlOYW1lc0NvdW50KCk7CitGWF9MUENTVFIgRlhfSU9TR2V0RmFtaWx5TmFtZSggRlhfVUlOVDMyIHVJbmRleCk7CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9hcHBsZS9meF9hcHBsZV9wbGF0Zm9ybS5jcHAgYi9jb3JlL3NyYy9meGdlL2FwcGxlL2Z4X2FwcGxlX3BsYXRmb3JtLmNwcAppbmRleCAyMjlkMTc4Li43YmMxMjMyIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL2FwcGxlL2Z4X2FwcGxlX3BsYXRmb3JtLmNwcAorKysgYi9jb3JlL3NyYy9meGdlL2FwcGxlL2Z4X2FwcGxlX3BsYXRmb3JtLmNwcApAQCAtMSwxNzMgKzEsMTczIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNydC9meF9leHQuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiDQotI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXw0KLSNpbmNsdWRlICJhcHBsZV9pbnQuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlX2FwcGxlLmgiDQotI2luY2x1ZGUgIi4uL2FnZy9pbmNsdWRlL2Z4ZnhfYWdnX2NsaXBfbGlhbmdfYmFyc2t5LmgiDQotI2luY2x1ZGUgIi4uL2dlL3RleHRfaW50LmgiDQotI2luY2x1ZGUgIi4uL2RpYi9kaWJfaW50LmgiDQotI2luY2x1ZGUgIi4uL2FnZy9pbmNsdWRlL2Z4X2FnZ19kcml2ZXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2ZyZWV0eXBlLmgiDQotI2lmIChfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8gJiYgKCFkZWZpbmVkKF9GUERGQVBJX01JTklfKSkpDQotdm9pZCBDRlhfQWdnRGV2aWNlRHJpdmVyOjpJbml0UGxhdGZvcm0oKQ0KLXsNCi0gICAgQ1F1YXJ0ejJEICYgcXVhcnR6MmQgPSAoKENBcHBsZVBsYXRmb3JtICopIENGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+X3F1YXJ0ejJkOw0KLSAgICBtX3BQbGF0Zm9ybUdyYXBoaWNzID0gcXVhcnR6MmQuY3JlYXRlR3JhcGhpY3MobV9wQml0bWFwKTsNCi19DQotdm9pZCBDRlhfQWdnRGV2aWNlRHJpdmVyOjpEZXN0cm95UGxhdGZvcm0oKQ0KLXsNCi0gICAgQ1F1YXJ0ejJEICYgcXVhcnR6MmQgPSAoKENBcHBsZVBsYXRmb3JtICopIENGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+X3F1YXJ0ejJkOw0KLSAgICBpZiAobV9wUGxhdGZvcm1HcmFwaGljcykgew0KLSAgICAgICAgcXVhcnR6MmQuZGVzdHJveUdyYXBoaWNzKG1fcFBsYXRmb3JtR3JhcGhpY3MpOw0KLSAgICAgICAgbV9wUGxhdGZvcm1HcmFwaGljcyA9IE5VTEw7DQotICAgIH0NCi19DQotdm9pZCBDRlhfRmFjZUNhY2hlOjpJbml0UGxhdGZvcm0oKSB7fQ0KLXZvaWQgQ0ZYX0ZhY2VDYWNoZTo6RGVzdHJveVBsYXRmb3JtKCkge30NCi1DRlhfR2x5cGhCaXRtYXAqIENGWF9GYWNlQ2FjaGU6OlJlbmRlckdseXBoX05hdGl2ZXRleHQoQ0ZYX0ZvbnQgKgkJCQlwRm9udCwNCi0gICAgICAgIEZYX0RXT1JECQkJCQlnbHlwaF9pbmRleCwNCi0gICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXggKglwTWF0cml4LA0KLSAgICAgICAgaW50CQkJCQkJZGVzdF93aWR0aCwNCi0gICAgICAgIGludAkJCQkJCWFudGlfYWxpYXMpDQotew0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotc3RhdGljIEZYX0JPT0wgX0NHRHJhd0dseXBoUnVuKENHQ29udGV4dFJlZiAgICAgICAgICAgICAgIHBDb250ZXh0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBuQ2hhcnMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZYVEVYVF9DSEFSUE9TKiAgICAgIHBDaGFyUG9zLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlhfRm9udCogICAgICAgICAgICAgICAgICBwRm9udCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX0ZvbnRDYWNoZSogICAgICAgICAgICAgcENhY2hlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiAgICBwT2JqZWN0MkRldmljZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQgICAgICAgICAgICAgICAgICAgZm9udF9zaXplLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCAgICAgICAgICAgICAgICAgICBhcmdiLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYV9mbGFnLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgICAgICAgICAgICBwSWNjVHJhbnNmb3JtKQ0KLXsNCi0gICAgaWYgKG5DaGFycyA9PSAwKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBDRlhfQWZmaW5lTWF0cml4IG5ld19tYXRyaXg7DQotICAgIEZYX0JPT0wgYk5lZ1NpemUgPSBmb250X3NpemUgPCAwOw0KLSAgICBpZiAoYk5lZ1NpemUpIHsNCi0gICAgICAgIGZvbnRfc2l6ZSA9IC1mb250X3NpemU7DQotICAgIH0NCi0gICAgRlhfRkxPQVQgb3JpX3ggPSBwQ2hhclBvc1swXS5tX09yaWdpblgsIG9yaV95ID0gcENoYXJQb3NbMF0ubV9PcmlnaW5ZOw0KLSAgICBuZXdfbWF0cml4LlRyYW5zZm9ybShvcmlfeCwgb3JpX3kpOw0KLSAgICBpZiAocE9iamVjdDJEZXZpY2UpIHsNCi0gICAgICAgIG5ld19tYXRyaXguQ29uY2F0KCpwT2JqZWN0MkRldmljZSk7DQotICAgIH0NCi0gICAgQ1F1YXJ0ejJEJiBxdWFydHoyZCA9ICgoQ0FwcGxlUGxhdGZvcm0gKikgQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCkpLT5fcXVhcnR6MmQ7DQotICAgIGlmICghcEZvbnQtPm1fcFBsYXRmb3JtRm9udCkgew0KLSAgICAgICAgaWYgKHBGb250LT5HZXRQc05hbWUoKSA9PSBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKCJERkhlaVN0ZC1XNSIpKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcEZvbnQtPm1fcFBsYXRmb3JtRm9udCA9IHF1YXJ0ejJkLkNyZWF0ZUZvbnQocEZvbnQtPm1fcEZvbnREYXRhLCBwRm9udC0+bV9kd1NpemUpOw0KLSAgICAgICAgaWYgKE5VTEwgPT0gcEZvbnQtPm1fcFBsYXRmb3JtRm9udCkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDRlhfRml4ZWRCdWZHcm93PEZYX1dPUkQsIDMyPiBnbHlwaF9pbmRpY2VzKG5DaGFycyk7DQotICAgIENGWF9GaXhlZEJ1Zkdyb3c8Q0dQb2ludCwgMzI+IGdseXBoX3Bvc2l0aW9ucyhuQ2hhcnMpOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5DaGFyczsgaSsrICkgew0KLSAgICAgICAgZ2x5cGhfaW5kaWNlc1tpXSA9IHBDaGFyUG9zW2ldLm1fRXh0R0lEOw0KLSAgICAgICAgaWYgKGJOZWdTaXplKSB7DQotICAgICAgICAgICAgZ2x5cGhfcG9zaXRpb25zW2ldLnggPSAtcENoYXJQb3NbaV0ubV9PcmlnaW5YOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBnbHlwaF9wb3NpdGlvbnNbaV0ueCA9IHBDaGFyUG9zW2ldLm1fT3JpZ2luWDsNCi0gICAgICAgIH0NCi0gICAgICAgIGdseXBoX3Bvc2l0aW9uc1tpXS55ID0gcENoYXJQb3NbaV0ubV9PcmlnaW5ZOw0KLSAgICB9DQotICAgIGlmIChiTmVnU2l6ZSkgew0KLSAgICAgICAgbmV3X21hdHJpeC5hID0gLW5ld19tYXRyaXguYTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG5ld19tYXRyaXguYiA9IC1uZXdfbWF0cml4LmI7DQotICAgICAgICBuZXdfbWF0cml4LmQgPSAtbmV3X21hdHJpeC5kOw0KLSAgICB9DQotICAgIHF1YXJ0ejJkLnNldEdyYXBoaWNzVGV4dE1hdHJpeChwQ29udGV4dCwgJm5ld19tYXRyaXgpOw0KLSAgICByZXR1cm4gcXVhcnR6MmQuZHJhd0dyYXBoaWNzU3RyaW5nKHBDb250ZXh0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBGb250LT5tX3BQbGF0Zm9ybUZvbnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udF9zaXplLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2luZGljZXMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfcG9zaXRpb25zLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5DaGFycywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdiLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOw0KLX0NCi1zdGF0aWMgdm9pZCBfRG9Ob3RoaW5nKHZvaWQgKmluZm8sIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKSB7fQ0KLUZYX0JPT0wgQ0ZYX0FnZ0RldmljZURyaXZlcjo6RHJhd0RldmljZVRleHQoaW50CQkJCQkJIG5DaGFycywNCi0gICAgICAgIGNvbnN0IEZYVEVYVF9DSEFSUE9TICoJIHBDaGFyUG9zLA0KLSAgICAgICAgQ0ZYX0ZvbnQgKgkJCQkgcEZvbnQsDQotICAgICAgICBDRlhfRm9udENhY2hlICoJCQkgcENhY2hlLA0KLSAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCAqIHBPYmplY3QyRGV2aWNlLA0KLSAgICAgICAgRlhfRkxPQVQJCQkJIGZvbnRfc2l6ZSwNCi0gICAgICAgIEZYX0RXT1JECQkJCSBhcmdiLA0KLSAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBpZiAoIXBGb250KSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgRlhfQk9PTCBiQm9sZCA9IHBGb250LT5Jc0JvbGQoKTsNCi0gICAgaWYgKCFiQm9sZCAmJiBwRm9udC0+R2V0U3Vic3RGb250KCkgJiYNCi0gICAgICAgICAgICBwRm9udC0+R2V0U3Vic3RGb250KCktPm1fV2VpZ2h0ID49IDUwMCAmJg0KLSAgICAgICAgICAgIHBGb250LT5HZXRTdWJzdEZvbnQoKS0+bV9XZWlnaHQgPD0gNjAwKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuQ2hhcnM7IGkgKyspIHsNCi0gICAgICAgIGlmIChwQ2hhclBvc1tpXS5tX2JHbHlwaEFkanVzdCkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDR0NvbnRleHRSZWYgY3R4ID0gQ0dDb250ZXh0UmVmKG1fcFBsYXRmb3JtR3JhcGhpY3MpOw0KLSAgICBpZiAoTlVMTCA9PSBjdHgpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGN0eCk7DQotICAgIENHQ29udGV4dFNldFRleHREcmF3aW5nTW9kZShjdHgsIGtDR1RleHRGaWxsQ2xpcCk7DQotICAgIENHUmVjdCByZWN0X2NnOw0KLSAgICBDR0ltYWdlUmVmIHBJbWFnZUNHID0gTlVMTDsNCi0gICAgaWYgKG1fcENsaXBSZ24pIHsNCi0gICAgICAgIHJlY3RfY2cgPSBDR1JlY3RNYWtlKG1fcENsaXBSZ24tPkdldEJveCgpLmxlZnQsIG1fcENsaXBSZ24tPkdldEJveCgpLnRvcCwgbV9wQ2xpcFJnbi0+R2V0Qm94KCkuV2lkdGgoKSwgbV9wQ2xpcFJnbi0+R2V0Qm94KCkuSGVpZ2h0KCkpOw0KLSAgICAgICAgY29uc3QgQ0ZYX0RJQml0bWFwKglwQ2xpcE1hc2sgPSBtX3BDbGlwUmduLT5HZXRNYXNrKCk7DQotICAgICAgICBpZiAocENsaXBNYXNrKSB7DQotICAgICAgICAgICAgQ0dEYXRhUHJvdmlkZXJSZWYgcENsaXBNYXNrRGF0YVByb3ZpZGVyID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShOVUxMLA0KLSAgICAgICAgICAgICAgICAgICAgcENsaXBNYXNrLT5HZXRCdWZmZXIoKSwNCi0gICAgICAgICAgICAgICAgICAgIHBDbGlwTWFzay0+R2V0UGl0Y2goKSAqIHBDbGlwTWFzay0+R2V0SGVpZ2h0KCksDQotICAgICAgICAgICAgICAgICAgICBfRG9Ob3RoaW5nKTsNCi0gICAgICAgICAgICBDR0Zsb2F0IGRlY29kZV9mWzJdID0gezI1NS5mLCAwLmZ9Ow0KLSAgICAgICAgICAgIHBJbWFnZUNHID0gQ0dJbWFnZU1hc2tDcmVhdGUocENsaXBNYXNrLT5HZXRXaWR0aCgpLCBwQ2xpcE1hc2stPkdldEhlaWdodCgpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwgOCwgcENsaXBNYXNrLT5HZXRQaXRjaCgpLCBwQ2xpcE1hc2tEYXRhUHJvdmlkZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVfZiwgRkFMU0UpOw0KLSAgICAgICAgICAgIENHRGF0YVByb3ZpZGVyUmVsZWFzZShwQ2xpcE1hc2tEYXRhUHJvdmlkZXIpOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmVjdF9jZyA9IENHUmVjdE1ha2UoMCwgMCwgbV9wQml0bWFwLT5HZXRXaWR0aCgpLCBtX3BCaXRtYXAtPkdldEhlaWdodCgpKTsNCi0gICAgfQ0KLSAgICByZWN0X2NnID0gQ0dDb250ZXh0Q29udmVydFJlY3RUb0RldmljZVNwYWNlKGN0eCwgcmVjdF9jZyk7DQotICAgIGlmIChwSW1hZ2VDRykgew0KLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRvTWFzayhjdHgsIHJlY3RfY2csIHBJbWFnZUNHKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY3R4LCByZWN0X2NnKTsNCi0gICAgfQ0KLSAgICBGWF9CT09MIHJldCA9IF9DR0RyYXdHbHlwaFJ1bihjdHgsIG5DaGFycywgcENoYXJQb3MsIHBGb250LCBwQ2FjaGUsIHBPYmplY3QyRGV2aWNlLCBmb250X3NpemUsIGFyZ2IsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOw0KLSAgICBpZiAocEltYWdlQ0cpIHsNCi0gICAgICAgIENHSW1hZ2VSZWxlYXNlKHBJbWFnZUNHKTsNCi0gICAgfQ0KLSAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGN0eCk7DQotICAgIHJldHVybiByZXQ7DQotfQ0KLXZvaWQgQ0ZYX0ZvbnQ6OlJlbGVhc2VQbGF0Zm9ybVJlc291cmNlKCkNCi17DQotICAgIGlmIChtX3BQbGF0Zm9ybUZvbnQpIHsNCi0gICAgICAgIENRdWFydHoyRCAmIHF1YXJ0ejJkID0gKChDQXBwbGVQbGF0Zm9ybSAqKSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPl9xdWFydHoyZDsNCi0gICAgICAgIHF1YXJ0ejJkLkRlc3Ryb3lGb250KG1fcFBsYXRmb3JtRm9udCk7DQotICAgICAgICBtX3BQbGF0Zm9ybUZvbnQgPSBOVUxMOw0KLSAgICB9DQotfQ0KLSNlbmRpZg0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y3J0L2Z4X2V4dC5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZS5oIgorI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXworI2luY2x1ZGUgImFwcGxlX2ludC5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZV9hcHBsZS5oIgorI2luY2x1ZGUgIi4uL2FnZy9pbmNsdWRlL2Z4ZnhfYWdnX2NsaXBfbGlhbmdfYmFyc2t5LmgiCisjaW5jbHVkZSAiLi4vZ2UvdGV4dF9pbnQuaCIKKyNpbmNsdWRlICIuLi9kaWIvZGliX2ludC5oIgorI2luY2x1ZGUgIi4uL2FnZy9pbmNsdWRlL2Z4X2FnZ19kcml2ZXIuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZnJlZXR5cGUuaCIKKyNpZiAoX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfICYmICghZGVmaW5lZChfRlBERkFQSV9NSU5JXykpKQordm9pZCBDRlhfQWdnRGV2aWNlRHJpdmVyOjpJbml0UGxhdGZvcm0oKQoreworICAgIENRdWFydHoyRCAmIHF1YXJ0ejJkID0gKChDQXBwbGVQbGF0Zm9ybSAqKSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPl9xdWFydHoyZDsKKyAgICBtX3BQbGF0Zm9ybUdyYXBoaWNzID0gcXVhcnR6MmQuY3JlYXRlR3JhcGhpY3MobV9wQml0bWFwKTsKK30KK3ZvaWQgQ0ZYX0FnZ0RldmljZURyaXZlcjo6RGVzdHJveVBsYXRmb3JtKCkKK3sKKyAgICBDUXVhcnR6MkQgJiBxdWFydHoyZCA9ICgoQ0FwcGxlUGxhdGZvcm0gKikgQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCkpLT5fcXVhcnR6MmQ7CisgICAgaWYgKG1fcFBsYXRmb3JtR3JhcGhpY3MpIHsKKyAgICAgICAgcXVhcnR6MmQuZGVzdHJveUdyYXBoaWNzKG1fcFBsYXRmb3JtR3JhcGhpY3MpOworICAgICAgICBtX3BQbGF0Zm9ybUdyYXBoaWNzID0gTlVMTDsKKyAgICB9Cit9Cit2b2lkIENGWF9GYWNlQ2FjaGU6OkluaXRQbGF0Zm9ybSgpIHt9Cit2b2lkIENGWF9GYWNlQ2FjaGU6OkRlc3Ryb3lQbGF0Zm9ybSgpIHt9CitDRlhfR2x5cGhCaXRtYXAqIENGWF9GYWNlQ2FjaGU6OlJlbmRlckdseXBoX05hdGl2ZXRleHQoQ0ZYX0ZvbnQgKgkJCQlwRm9udCwKKyAgICAgICAgRlhfRFdPUkQJCQkJCWdseXBoX2luZGV4LAorICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4ICoJcE1hdHJpeCwKKyAgICAgICAgaW50CQkJCQkJZGVzdF93aWR0aCwKKyAgICAgICAgaW50CQkJCQkJYW50aV9hbGlhcykKK3sKKyAgICByZXR1cm4gTlVMTDsKK30KK3N0YXRpYyBGWF9CT09MIF9DR0RyYXdHbHlwaFJ1bihDR0NvbnRleHRSZWYgICAgICAgICAgICAgICBwQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBuQ2hhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlhURVhUX0NIQVJQT1MqICAgICAgcENoYXJQb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX0ZvbnQqICAgICAgICAgICAgICAgICAgcEZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX0ZvbnRDYWNoZSogICAgICAgICAgICAgcENhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqICAgIHBPYmplY3QyRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUICAgICAgICAgICAgICAgICAgIGZvbnRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCAgICAgICAgICAgICAgICAgICBhcmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhX2ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgICAgICAgICAgcEljY1RyYW5zZm9ybSkKK3sKKyAgICBpZiAobkNoYXJzID09IDApIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIENGWF9BZmZpbmVNYXRyaXggbmV3X21hdHJpeDsKKyAgICBGWF9CT09MIGJOZWdTaXplID0gZm9udF9zaXplIDwgMDsKKyAgICBpZiAoYk5lZ1NpemUpIHsKKyAgICAgICAgZm9udF9zaXplID0gLWZvbnRfc2l6ZTsKKyAgICB9CisgICAgRlhfRkxPQVQgb3JpX3ggPSBwQ2hhclBvc1swXS5tX09yaWdpblgsIG9yaV95ID0gcENoYXJQb3NbMF0ubV9PcmlnaW5ZOworICAgIG5ld19tYXRyaXguVHJhbnNmb3JtKG9yaV94LCBvcmlfeSk7CisgICAgaWYgKHBPYmplY3QyRGV2aWNlKSB7CisgICAgICAgIG5ld19tYXRyaXguQ29uY2F0KCpwT2JqZWN0MkRldmljZSk7CisgICAgfQorICAgIENRdWFydHoyRCYgcXVhcnR6MmQgPSAoKENBcHBsZVBsYXRmb3JtICopIENGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+X3F1YXJ0ejJkOworICAgIGlmICghcEZvbnQtPm1fcFBsYXRmb3JtRm9udCkgeworICAgICAgICBpZiAocEZvbnQtPkdldFBzTmFtZSgpID09IENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoIkRGSGVpU3RkLVc1IikpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBwRm9udC0+bV9wUGxhdGZvcm1Gb250ID0gcXVhcnR6MmQuQ3JlYXRlRm9udChwRm9udC0+bV9wRm9udERhdGEsIHBGb250LT5tX2R3U2l6ZSk7CisgICAgICAgIGlmIChOVUxMID09IHBGb250LT5tX3BQbGF0Zm9ybUZvbnQpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBDRlhfRml4ZWRCdWZHcm93PEZYX1dPUkQsIDMyPiBnbHlwaF9pbmRpY2VzKG5DaGFycyk7CisgICAgQ0ZYX0ZpeGVkQnVmR3JvdzxDR1BvaW50LCAzMj4gZ2x5cGhfcG9zaXRpb25zKG5DaGFycyk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuQ2hhcnM7IGkrKyApIHsKKyAgICAgICAgZ2x5cGhfaW5kaWNlc1tpXSA9IHBDaGFyUG9zW2ldLm1fRXh0R0lEOworICAgICAgICBpZiAoYk5lZ1NpemUpIHsKKyAgICAgICAgICAgIGdseXBoX3Bvc2l0aW9uc1tpXS54ID0gLXBDaGFyUG9zW2ldLm1fT3JpZ2luWDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdseXBoX3Bvc2l0aW9uc1tpXS54ID0gcENoYXJQb3NbaV0ubV9PcmlnaW5YOworICAgICAgICB9CisgICAgICAgIGdseXBoX3Bvc2l0aW9uc1tpXS55ID0gcENoYXJQb3NbaV0ubV9PcmlnaW5ZOworICAgIH0KKyAgICBpZiAoYk5lZ1NpemUpIHsKKyAgICAgICAgbmV3X21hdHJpeC5hID0gLW5ld19tYXRyaXguYTsKKyAgICB9IGVsc2UgeworICAgICAgICBuZXdfbWF0cml4LmIgPSAtbmV3X21hdHJpeC5iOworICAgICAgICBuZXdfbWF0cml4LmQgPSAtbmV3X21hdHJpeC5kOworICAgIH0KKyAgICBxdWFydHoyZC5zZXRHcmFwaGljc1RleHRNYXRyaXgocENvbnRleHQsICZuZXdfbWF0cml4KTsKKyAgICByZXR1cm4gcXVhcnR6MmQuZHJhd0dyYXBoaWNzU3RyaW5nKHBDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEZvbnQtPm1fcFBsYXRmb3JtRm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX2luZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9wb3NpdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuQ2hhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Cit9CitzdGF0aWMgdm9pZCBfRG9Ob3RoaW5nKHZvaWQgKmluZm8sIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBzaXplKSB7fQorRlhfQk9PTCBDRlhfQWdnRGV2aWNlRHJpdmVyOjpEcmF3RGV2aWNlVGV4dChpbnQJCQkJCQkgbkNoYXJzLAorICAgICAgICBjb25zdCBGWFRFWFRfQ0hBUlBPUyAqCSBwQ2hhclBvcywKKyAgICAgICAgQ0ZYX0ZvbnQgKgkJCQkgcEZvbnQsCisgICAgICAgIENGWF9Gb250Q2FjaGUgKgkJCSBwQ2FjaGUsCisgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXggKiBwT2JqZWN0MkRldmljZSwKKyAgICAgICAgRlhfRkxPQVQJCQkJIGZvbnRfc2l6ZSwKKyAgICAgICAgRlhfRFdPUkQJCQkJIGFyZ2IsCisgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIGlmICghcEZvbnQpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWF9CT09MIGJCb2xkID0gcEZvbnQtPklzQm9sZCgpOworICAgIGlmICghYkJvbGQgJiYgcEZvbnQtPkdldFN1YnN0Rm9udCgpICYmCisgICAgICAgICAgICBwRm9udC0+R2V0U3Vic3RGb250KCktPm1fV2VpZ2h0ID49IDUwMCAmJgorICAgICAgICAgICAgcEZvbnQtPkdldFN1YnN0Rm9udCgpLT5tX1dlaWdodCA8PSA2MDApIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5DaGFyczsgaSArKykgeworICAgICAgICBpZiAocENoYXJQb3NbaV0ubV9iR2x5cGhBZGp1c3QpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBDR0NvbnRleHRSZWYgY3R4ID0gQ0dDb250ZXh0UmVmKG1fcFBsYXRmb3JtR3JhcGhpY3MpOworICAgIGlmIChOVUxMID09IGN0eCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY3R4KTsKKyAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY3R4LCBrQ0dUZXh0RmlsbENsaXApOworICAgIENHUmVjdCByZWN0X2NnOworICAgIENHSW1hZ2VSZWYgcEltYWdlQ0cgPSBOVUxMOworICAgIGlmIChtX3BDbGlwUmduKSB7CisgICAgICAgIHJlY3RfY2cgPSBDR1JlY3RNYWtlKG1fcENsaXBSZ24tPkdldEJveCgpLmxlZnQsIG1fcENsaXBSZ24tPkdldEJveCgpLnRvcCwgbV9wQ2xpcFJnbi0+R2V0Qm94KCkuV2lkdGgoKSwgbV9wQ2xpcFJnbi0+R2V0Qm94KCkuSGVpZ2h0KCkpOworICAgICAgICBjb25zdCBDRlhfRElCaXRtYXAqCXBDbGlwTWFzayA9IG1fcENsaXBSZ24tPkdldE1hc2soKTsKKyAgICAgICAgaWYgKHBDbGlwTWFzaykgeworICAgICAgICAgICAgQ0dEYXRhUHJvdmlkZXJSZWYgcENsaXBNYXNrRGF0YVByb3ZpZGVyID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShOVUxMLAorICAgICAgICAgICAgICAgICAgICBwQ2xpcE1hc2stPkdldEJ1ZmZlcigpLAorICAgICAgICAgICAgICAgICAgICBwQ2xpcE1hc2stPkdldFBpdGNoKCkgKiBwQ2xpcE1hc2stPkdldEhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICBfRG9Ob3RoaW5nKTsKKyAgICAgICAgICAgIENHRmxvYXQgZGVjb2RlX2ZbMl0gPSB7MjU1LmYsIDAuZn07CisgICAgICAgICAgICBwSW1hZ2VDRyA9IENHSW1hZ2VNYXNrQ3JlYXRlKHBDbGlwTWFzay0+R2V0V2lkdGgoKSwgcENsaXBNYXNrLT5HZXRIZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwgOCwgcENsaXBNYXNrLT5HZXRQaXRjaCgpLCBwQ2xpcE1hc2tEYXRhUHJvdmlkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZV9mLCBGQUxTRSk7CisgICAgICAgICAgICBDR0RhdGFQcm92aWRlclJlbGVhc2UocENsaXBNYXNrRGF0YVByb3ZpZGVyKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHJlY3RfY2cgPSBDR1JlY3RNYWtlKDAsIDAsIG1fcEJpdG1hcC0+R2V0V2lkdGgoKSwgbV9wQml0bWFwLT5HZXRIZWlnaHQoKSk7CisgICAgfQorICAgIHJlY3RfY2cgPSBDR0NvbnRleHRDb252ZXJ0UmVjdFRvRGV2aWNlU3BhY2UoY3R4LCByZWN0X2NnKTsKKyAgICBpZiAocEltYWdlQ0cpIHsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvTWFzayhjdHgsIHJlY3RfY2csIHBJbWFnZUNHKTsKKyAgICB9IGVsc2UgeworICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGN0eCwgcmVjdF9jZyk7CisgICAgfQorICAgIEZYX0JPT0wgcmV0ID0gX0NHRHJhd0dseXBoUnVuKGN0eCwgbkNoYXJzLCBwQ2hhclBvcywgcEZvbnQsIHBDYWNoZSwgcE9iamVjdDJEZXZpY2UsIGZvbnRfc2l6ZSwgYXJnYiwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSk7CisgICAgaWYgKHBJbWFnZUNHKSB7CisgICAgICAgIENHSW1hZ2VSZWxlYXNlKHBJbWFnZUNHKTsKKyAgICB9CisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjdHgpOworICAgIHJldHVybiByZXQ7Cit9Cit2b2lkIENGWF9Gb250OjpSZWxlYXNlUGxhdGZvcm1SZXNvdXJjZSgpCit7CisgICAgaWYgKG1fcFBsYXRmb3JtRm9udCkgeworICAgICAgICBDUXVhcnR6MkQgJiBxdWFydHoyZCA9ICgoQ0FwcGxlUGxhdGZvcm0gKikgQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCkpLT5fcXVhcnR6MmQ7CisgICAgICAgIHF1YXJ0ejJkLkRlc3Ryb3lGb250KG1fcFBsYXRmb3JtRm9udCk7CisgICAgICAgIG1fcFBsYXRmb3JtRm9udCA9IE5VTEw7CisgICAgfQorfQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2UvYXBwbGUvZnhfbWFjX2ltcC5jcHAgYi9jb3JlL3NyYy9meGdlL2FwcGxlL2Z4X21hY19pbXAuY3BwCmluZGV4IDlhMTIxOGIuLmEyMWFhNWQgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Z2UvYXBwbGUvZnhfbWFjX2ltcC5jcHAKKysrIGIvY29yZS9zcmMvZnhnZS9hcHBsZS9meF9tYWNfaW1wLmNwcApAQCAtMSwxMTcgKzEsMTE3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiDQotI2luY2x1ZGUgImFwcGxlX2ludC5oIg0KLSNpZiBfRlhfT1NfID09IF9GWF9NQUNPU1hfDQotc3RhdGljIGNvbnN0IHN0cnVjdCB7DQotICAgIEZYX0xQQ1NUUgltX3BOYW1lOw0KLSAgICBGWF9MUENTVFIJbV9wU3Vic3ROYW1lOw0KLX0NCi1CYXNlMTRTdWJzdHNbXSA9IHsNCi0gICAgeyJDb3VyaWVyIiwgIkNvdXJpZXIgTmV3In0sDQotICAgIHsiQ291cmllci1Cb2xkIiwgIkNvdXJpZXIgTmV3IEJvbGQifSwNCi0gICAgeyJDb3VyaWVyLUJvbGRPYmxpcXVlIiwgIkNvdXJpZXIgTmV3IEJvbGQgSXRhbGljIn0sDQotICAgIHsiQ291cmllci1PYmxpcXVlIiwgIkNvdXJpZXIgTmV3IEl0YWxpYyJ9LA0KLSAgICB7IkhlbHZldGljYSIsICJBcmlhbCJ9LA0KLSAgICB7IkhlbHZldGljYS1Cb2xkIiwgIkFyaWFsIEJvbGQifSwNCi0gICAgeyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLCAiQXJpYWwgQm9sZCBJdGFsaWMifSwNCi0gICAgeyJIZWx2ZXRpY2EtT2JsaXF1ZSIsICJBcmlhbCBJdGFsaWMifSwNCi0gICAgeyJUaW1lcy1Sb21hbiIsICJUaW1lcyBOZXcgUm9tYW4ifSwNCi0gICAgeyJUaW1lcy1Cb2xkIiwgIlRpbWVzIE5ldyBSb21hbiBCb2xkIn0sDQotICAgIHsiVGltZXMtQm9sZEl0YWxpYyIsICJUaW1lcyBOZXcgUm9tYW4gQm9sZCBJdGFsaWMifSwNCi0gICAgeyJUaW1lcy1JdGFsaWMiLCAiVGltZXMgTmV3IFJvbWFuIEl0YWxpYyJ9LA0KLX07DQotI2lmICFkZWZpbmVkKF9GUERGQVBJX01JTklfKQ0KLWNsYXNzIENGWF9NYWNGb250SW5mbyA6IHB1YmxpYyBDRlhfRm9sZGVyRm9udEluZm8NCi17DQotcHVibGljOg0KLSAgICB2aXJ0dWFsIHZvaWQqCQlNYXBGb250KGludCB3ZWlnaHQsIEZYX0JPT0wgYkl0YWxpYywgaW50IGNoYXJzZXQsIGludCBwaXRjaF9mYW1pbHksIEZYX0xQQ1NUUiBmYW1pbHksIEZYX0JPT0wmIGJFeGFjdCk7DQotfTsNCi0jZGVmaW5lIEpBUEFOX0dPVEhJQyAiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvIFc2Ig0KLSNkZWZpbmUgSkFQQU5fTUlOQ0hPICJIaXJhZ2lubyBNaW5jaG8gUHJvIFc2Ig0KLXN0YXRpYyB2b2lkIEdldEphcGFuZXNlUHJlZmVyZW5jZShDRlhfQnl0ZVN0cmluZyYgZmFjZSwgaW50IHdlaWdodCwgaW50IHBpY3RoX2ZhbWlseSkNCi17DQotICAgIGlmIChmYWNlLkZpbmQoIkdvdGhpYyIpID49IDApIHsNCi0gICAgICAgIGZhY2UgPSBKQVBBTl9HT1RISUM7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKCEocGljdGhfZmFtaWx5ICYgRlhGT05UX0ZGX1JPTUFOKSAmJiB3ZWlnaHQgPiA0MDApIHsNCi0gICAgICAgIGZhY2UgPSBKQVBBTl9HT1RISUM7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBmYWNlID0gSkFQQU5fTUlOQ0hPOw0KLSAgICB9DQotfQ0KLXZvaWQqIENGWF9NYWNGb250SW5mbzo6TWFwRm9udChpbnQgd2VpZ2h0LCBGWF9CT09MIGJJdGFsaWMsIGludCBjaGFyc2V0LCBpbnQgcGl0Y2hfZmFtaWx5LCBGWF9MUENTVFIgY3N0cl9mYWNlLCBGWF9CT09MJiBiRXhhY3QpDQotew0KLSAgICBDRlhfQnl0ZVN0cmluZyBmYWNlID0gY3N0cl9mYWNlOw0KLSAgICBpbnQgaUJhc2VGb250Ow0KLSAgICBmb3IgKGlCYXNlRm9udCA9IDA7IGlCYXNlRm9udCA8IDEyOyBpQmFzZUZvbnQgKyspDQotICAgICAgICBpZiAoZmFjZSA9PSBDRlhfQnl0ZVN0cmluZ0MoQmFzZTE0U3Vic3RzW2lCYXNlRm9udF0ubV9wTmFtZSkpIHsNCi0gICAgICAgICAgICBmYWNlID0gQmFzZTE0U3Vic3RzW2lCYXNlRm9udF0ubV9wU3Vic3ROYW1lOw0KLSAgICAgICAgICAgIGJFeGFjdCA9IFRSVUU7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIGlmIChpQmFzZUZvbnQgPCAxMikgew0KLSAgICAgICAgcmV0dXJuIEdldEZvbnQoZmFjZSk7DQotICAgIH0NCi0gICAgRlhfTFBWT0lEIHA7DQotICAgIGlmIChtX0ZvbnRMaXN0Lkxvb2t1cChmYWNlLCBwKSkgew0KLSAgICAgICAgcmV0dXJuIHA7DQotICAgIH0NCi0gICAgaWYgKGNoYXJzZXQgPT0gRlhGT05UX0FOU0lfQ0hBUlNFVCAmJiAocGl0Y2hfZmFtaWx5ICYgRlhGT05UX0ZGX0ZJWEVEUElUQ0gpKSB7DQotICAgICAgICByZXR1cm4gR2V0Rm9udCgiQ291cmllciBOZXciKTsNCi0gICAgfQ0KLSAgICBpZiAoY2hhcnNldCA9PSBGWEZPTlRfQU5TSV9DSEFSU0VUIHx8IGNoYXJzZXQgPT0gRlhGT05UX1NZTUJPTF9DSEFSU0VUKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBzd2l0Y2ggKGNoYXJzZXQpIHsNCi0gICAgICAgIGNhc2UgRlhGT05UX1NISUZUSklTX0NIQVJTRVQ6DQotICAgICAgICAgICAgR2V0SmFwYW5lc2VQcmVmZXJlbmNlKGZhY2UsIHdlaWdodCwgcGl0Y2hfZmFtaWx5KTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgRlhGT05UX0dCMjMxMl9DSEFSU0VUOg0KLSAgICAgICAgICAgIGZhY2UgPSAiU1RTb25nIjsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgRlhGT05UX0hBTkdFVUxfQ0hBUlNFVDoNCi0gICAgICAgICAgICBmYWNlID0gIkFwcGxlTXl1bmdqbyI7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIEZYRk9OVF9DSElORVNFQklHNV9DSEFSU0VUOg0KLSAgICAgICAgICAgIGZhY2UgPSAiTGlTb25nIFBybyBMaWdodCI7DQotICAgIH0NCi0gICAgaWYgKG1fRm9udExpc3QuTG9va3VwKGZhY2UsIHApKSB7DQotICAgICAgICByZXR1cm4gcDsNCi0gICAgfQ0KLSAgICByZXR1cm4gTlVMTDsNCi19DQotI2VuZGlmDQotSUZYX1N5c3RlbUZvbnRJbmZvKiBJRlhfU3lzdGVtRm9udEluZm86OkNyZWF0ZURlZmF1bHQoKQ0KLXsNCi0jaWYgIWRlZmluZWQoX0ZQREZBUElfTUlOSV8pDQotICAgIENGWF9NYWNGb250SW5mbyogcEluZm8gPSBGWF9ORVcgQ0ZYX01hY0ZvbnRJbmZvOw0KLSAgICBpZiAoIXBJbmZvKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBwSW5mby0+QWRkUGF0aCgifi9MaWJyYXJ5L0ZvbnRzIik7DQotICAgIHBJbmZvLT5BZGRQYXRoKCIvTGlicmFyeS9Gb250cyIpOw0KLSAgICBwSW5mby0+QWRkUGF0aCgiL1N5c3RlbS9MaWJyYXJ5L0ZvbnRzIik7DQotICAgIHJldHVybiBwSW5mbzsNCi0jZWxzZQ0KLSAgICByZXR1cm4gTlVMTDsNCi0jZW5kaWYNCi19DQotdm9pZCBDRlhfR0VNb2R1bGU6OkluaXRQbGF0Zm9ybSgpDQotew0KLSAgICBtX3BQbGF0Zm9ybURhdGEgPSBGWF9ORVcgQ0FwcGxlUGxhdGZvcm07DQotICAgIG1fcEZvbnRNZ3ItPlNldFN5c3RlbUZvbnRJbmZvKElGWF9TeXN0ZW1Gb250SW5mbzo6Q3JlYXRlRGVmYXVsdCgpKTsNCi19DQotdm9pZCBDRlhfR0VNb2R1bGU6OkRlc3Ryb3lQbGF0Zm9ybSgpDQotew0KLSAgICBpZiAobV9wUGxhdGZvcm1EYXRhKSB7DQotICAgICAgICBkZWxldGUgKENBcHBsZVBsYXRmb3JtICopIG1fcFBsYXRmb3JtRGF0YTsNCi0gICAgfQ0KLSAgICBtX3BQbGF0Zm9ybURhdGEgPSBOVUxMOw0KLX0NCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiCisjaW5jbHVkZSAiYXBwbGVfaW50LmgiCisjaWYgX0ZYX09TXyA9PSBfRlhfTUFDT1NYXworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgRlhfTFBDU1RSCW1fcE5hbWU7CisgICAgRlhfTFBDU1RSCW1fcFN1YnN0TmFtZTsKK30KK0Jhc2UxNFN1YnN0c1tdID0geworICAgIHsiQ291cmllciIsICJDb3VyaWVyIE5ldyJ9LAorICAgIHsiQ291cmllci1Cb2xkIiwgIkNvdXJpZXIgTmV3IEJvbGQifSwKKyAgICB7IkNvdXJpZXItQm9sZE9ibGlxdWUiLCAiQ291cmllciBOZXcgQm9sZCBJdGFsaWMifSwKKyAgICB7IkNvdXJpZXItT2JsaXF1ZSIsICJDb3VyaWVyIE5ldyBJdGFsaWMifSwKKyAgICB7IkhlbHZldGljYSIsICJBcmlhbCJ9LAorICAgIHsiSGVsdmV0aWNhLUJvbGQiLCAiQXJpYWwgQm9sZCJ9LAorICAgIHsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIiwgIkFyaWFsIEJvbGQgSXRhbGljIn0sCisgICAgeyJIZWx2ZXRpY2EtT2JsaXF1ZSIsICJBcmlhbCBJdGFsaWMifSwKKyAgICB7IlRpbWVzLVJvbWFuIiwgIlRpbWVzIE5ldyBSb21hbiJ9LAorICAgIHsiVGltZXMtQm9sZCIsICJUaW1lcyBOZXcgUm9tYW4gQm9sZCJ9LAorICAgIHsiVGltZXMtQm9sZEl0YWxpYyIsICJUaW1lcyBOZXcgUm9tYW4gQm9sZCBJdGFsaWMifSwKKyAgICB7IlRpbWVzLUl0YWxpYyIsICJUaW1lcyBOZXcgUm9tYW4gSXRhbGljIn0sCit9OworI2lmICFkZWZpbmVkKF9GUERGQVBJX01JTklfKQorY2xhc3MgQ0ZYX01hY0ZvbnRJbmZvIDogcHVibGljIENGWF9Gb2xkZXJGb250SW5mbworeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCoJCU1hcEZvbnQoaW50IHdlaWdodCwgRlhfQk9PTCBiSXRhbGljLCBpbnQgY2hhcnNldCwgaW50IHBpdGNoX2ZhbWlseSwgRlhfTFBDU1RSIGZhbWlseSwgRlhfQk9PTCYgYkV4YWN0KTsKK307CisjZGVmaW5lIEpBUEFOX0dPVEhJQyAiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvIFc2IgorI2RlZmluZSBKQVBBTl9NSU5DSE8gIkhpcmFnaW5vIE1pbmNobyBQcm8gVzYiCitzdGF0aWMgdm9pZCBHZXRKYXBhbmVzZVByZWZlcmVuY2UoQ0ZYX0J5dGVTdHJpbmcmIGZhY2UsIGludCB3ZWlnaHQsIGludCBwaWN0aF9mYW1pbHkpCit7CisgICAgaWYgKGZhY2UuRmluZCgiR290aGljIikgPj0gMCkgeworICAgICAgICBmYWNlID0gSkFQQU5fR09USElDOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghKHBpY3RoX2ZhbWlseSAmIEZYRk9OVF9GRl9ST01BTikgJiYgd2VpZ2h0ID4gNDAwKSB7CisgICAgICAgIGZhY2UgPSBKQVBBTl9HT1RISUM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmFjZSA9IEpBUEFOX01JTkNITzsKKyAgICB9Cit9Cit2b2lkKiBDRlhfTWFjRm9udEluZm86Ok1hcEZvbnQoaW50IHdlaWdodCwgRlhfQk9PTCBiSXRhbGljLCBpbnQgY2hhcnNldCwgaW50IHBpdGNoX2ZhbWlseSwgRlhfTFBDU1RSIGNzdHJfZmFjZSwgRlhfQk9PTCYgYkV4YWN0KQoreworICAgIENGWF9CeXRlU3RyaW5nIGZhY2UgPSBjc3RyX2ZhY2U7CisgICAgaW50IGlCYXNlRm9udDsKKyAgICBmb3IgKGlCYXNlRm9udCA9IDA7IGlCYXNlRm9udCA8IDEyOyBpQmFzZUZvbnQgKyspCisgICAgICAgIGlmIChmYWNlID09IENGWF9CeXRlU3RyaW5nQyhCYXNlMTRTdWJzdHNbaUJhc2VGb250XS5tX3BOYW1lKSkgeworICAgICAgICAgICAgZmFjZSA9IEJhc2UxNFN1YnN0c1tpQmFzZUZvbnRdLm1fcFN1YnN0TmFtZTsKKyAgICAgICAgICAgIGJFeGFjdCA9IFRSVUU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIGlmIChpQmFzZUZvbnQgPCAxMikgeworICAgICAgICByZXR1cm4gR2V0Rm9udChmYWNlKTsKKyAgICB9CisgICAgRlhfTFBWT0lEIHA7CisgICAgaWYgKG1fRm9udExpc3QuTG9va3VwKGZhY2UsIHApKSB7CisgICAgICAgIHJldHVybiBwOworICAgIH0KKyAgICBpZiAoY2hhcnNldCA9PSBGWEZPTlRfQU5TSV9DSEFSU0VUICYmIChwaXRjaF9mYW1pbHkgJiBGWEZPTlRfRkZfRklYRURQSVRDSCkpIHsKKyAgICAgICAgcmV0dXJuIEdldEZvbnQoIkNvdXJpZXIgTmV3Iik7CisgICAgfQorICAgIGlmIChjaGFyc2V0ID09IEZYRk9OVF9BTlNJX0NIQVJTRVQgfHwgY2hhcnNldCA9PSBGWEZPTlRfU1lNQk9MX0NIQVJTRVQpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHN3aXRjaCAoY2hhcnNldCkgeworICAgICAgICBjYXNlIEZYRk9OVF9TSElGVEpJU19DSEFSU0VUOgorICAgICAgICAgICAgR2V0SmFwYW5lc2VQcmVmZXJlbmNlKGZhY2UsIHdlaWdodCwgcGl0Y2hfZmFtaWx5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZYRk9OVF9HQjIzMTJfQ0hBUlNFVDoKKyAgICAgICAgICAgIGZhY2UgPSAiU1RTb25nIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZYRk9OVF9IQU5HRVVMX0NIQVJTRVQ6CisgICAgICAgICAgICBmYWNlID0gIkFwcGxlTXl1bmdqbyI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGWEZPTlRfQ0hJTkVTRUJJRzVfQ0hBUlNFVDoKKyAgICAgICAgICAgIGZhY2UgPSAiTGlTb25nIFBybyBMaWdodCI7CisgICAgfQorICAgIGlmIChtX0ZvbnRMaXN0Lkxvb2t1cChmYWNlLCBwKSkgeworICAgICAgICByZXR1cm4gcDsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKK0lGWF9TeXN0ZW1Gb250SW5mbyogSUZYX1N5c3RlbUZvbnRJbmZvOjpDcmVhdGVEZWZhdWx0KCkKK3sKKyNpZiAhZGVmaW5lZChfRlBERkFQSV9NSU5JXykKKyAgICBDRlhfTWFjRm9udEluZm8qIHBJbmZvID0gRlhfTkVXIENGWF9NYWNGb250SW5mbzsKKyAgICBpZiAoIXBJbmZvKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwSW5mby0+QWRkUGF0aCgifi9MaWJyYXJ5L0ZvbnRzIik7CisgICAgcEluZm8tPkFkZFBhdGgoIi9MaWJyYXJ5L0ZvbnRzIik7CisgICAgcEluZm8tPkFkZFBhdGgoIi9TeXN0ZW0vTGlicmFyeS9Gb250cyIpOworICAgIHJldHVybiBwSW5mbzsKKyNlbHNlCisgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYKK30KK3ZvaWQgQ0ZYX0dFTW9kdWxlOjpJbml0UGxhdGZvcm0oKQoreworICAgIG1fcFBsYXRmb3JtRGF0YSA9IEZYX05FVyBDQXBwbGVQbGF0Zm9ybTsKKyAgICBtX3BGb250TWdyLT5TZXRTeXN0ZW1Gb250SW5mbyhJRlhfU3lzdGVtRm9udEluZm86OkNyZWF0ZURlZmF1bHQoKSk7Cit9Cit2b2lkIENGWF9HRU1vZHVsZTo6RGVzdHJveVBsYXRmb3JtKCkKK3sKKyAgICBpZiAobV9wUGxhdGZvcm1EYXRhKSB7CisgICAgICAgIGRlbGV0ZSAoQ0FwcGxlUGxhdGZvcm0gKikgbV9wUGxhdGZvcm1EYXRhOworICAgIH0KKyAgICBtX3BQbGF0Zm9ybURhdGEgPSBOVUxMOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGdlL2FwcGxlL2Z4X3F1YXJ0el9kZXZpY2UuY3BwIGIvY29yZS9zcmMvZnhnZS9hcHBsZS9meF9xdWFydHpfZGV2aWNlLmNwcAppbmRleCBiZWY0NTE2Li43Y2I5NGYxIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL2FwcGxlL2Z4X3F1YXJ0el9kZXZpY2UuY3BwCisrKyBiL2NvcmUvc3JjL2Z4Z2UvYXBwbGUvZnhfcXVhcnR6X2RldmljZS5jcHAKQEAgLTEsMTEzOCArMSwxMTM4IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNydC9meF9leHQuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiDQotI2luY2x1ZGUgIi4uL2FnZy9pbmNsdWRlL2Z4ZnhfYWdnX2NsaXBfbGlhbmdfYmFyc2t5LmgiDQotI2luY2x1ZGUgIi4uL2dlL3RleHRfaW50LmgiDQotI2luY2x1ZGUgIi4uL2RpYi9kaWJfaW50LmgiDQotI2luY2x1ZGUgIi4uL2FnZy9pbmNsdWRlL2Z4X2FnZ19kcml2ZXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2ZyZWV0eXBlLmgiDQotI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXw0KLSNpbmNsdWRlICJhcHBsZV9pbnQuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlX2FwcGxlLmgiDQotI2lmbmRlZiBDR0ZMT0FUX0lTX0RPVUJMRQ0KLSNlcnJvciBFeHBlY3RlZCBDR0ZMT0FUX0lTX0RPVUJMRSB0byBiZSBkZWZpbmVkIGJ5IENvcmVHcmFwaGljcyBoZWFkZXJzDQotI2VuZGlmDQotdm9pZCogQ1F1YXJ0ejJEOjpjcmVhdGVHcmFwaGljcyhDRlhfRElCaXRtYXAqIHBCaXRtYXApDQotew0KLSAgICBpZiAoIXBCaXRtYXApIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENHQml0bWFwSW5mbyBibXBJbmZvID0ga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGU7DQotICAgIHN3aXRjaCAocEJpdG1hcC0+R2V0Rm9ybWF0KCkpIHsNCi0gICAgICAgIGNhc2UgRlhESUJfUmdiMzI6DQotICAgICAgICAgICAgYm1wSW5mbyB8PSBrQ0dJbWFnZUFscGhhTm9uZVNraXBGaXJzdDsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgRlhESUJfQXJnYjoNCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsNCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUocEJpdG1hcC0+R2V0QnVmZmVyKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJpdG1hcC0+R2V0V2lkdGgoKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwQml0bWFwLT5HZXRIZWlnaHQoKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCaXRtYXAtPkdldFBpdGNoKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBibXBJbmZvKTsNCi0gICAgQ0dDb2xvclNwYWNlUmVsZWFzZShjb2xvclNwYWNlKTsNCi0gICAgcmV0dXJuIGNvbnRleHQ7DQotfQ0KLXZvaWQgQ1F1YXJ0ejJEOjpkZXN0cm95R3JhcGhpY3Modm9pZCogZ3JhcGhpY3MpDQotew0KLSAgICBpZiAoZ3JhcGhpY3MpIHsNCi0gICAgICAgIENHQ29udGV4dFJlbGVhc2UoKENHQ29udGV4dFJlZikgZ3JhcGhpY3MpOw0KLSAgICB9DQotfQ0KLXZvaWQqIENRdWFydHoyRDo6Q3JlYXRlRm9udChGWF9MUENCWVRFIHBGb250RGF0YSwgRlhfRFdPUkQgZHdGb250U2l6ZSkNCi17DQotICAgIENHRGF0YVByb3ZpZGVyUmVmIHBEYXRhUHJvdmlkZXIgPSBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKE5VTEwsIHBGb250RGF0YSwgKHNpemVfdClkd0ZvbnRTaXplLCBOVUxMKTsNCi0gICAgaWYgKE5VTEwgPT0gcERhdGFQcm92aWRlcikgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ0dGb250UmVmIHBDR0ZvbnQgPSBDR0ZvbnRDcmVhdGVXaXRoRGF0YVByb3ZpZGVyKHBEYXRhUHJvdmlkZXIpOw0KLSAgICBDR0RhdGFQcm92aWRlclJlbGVhc2UocERhdGFQcm92aWRlcik7DQotICAgIHJldHVybiBwQ0dGb250Ow0KLX0NCi12b2lkIENRdWFydHoyRDo6RGVzdHJveUZvbnQodm9pZCogcEZvbnQpDQotew0KLSAgICBDR0ZvbnRSZWxlYXNlKChDR0ZvbnRSZWYpcEZvbnQpOw0KLX0NCi12b2lkIENRdWFydHoyRDo6c2V0R3JhcGhpY3NUZXh0TWF0cml4KHZvaWQqIGdyYXBoaWNzLCBDRlhfQWZmaW5lTWF0cml4KiBtYXRyaXgpDQotew0KLSAgICBpZiAoIWdyYXBoaWNzIHx8ICFtYXRyaXgpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IChDR0NvbnRleHRSZWYpIGdyYXBoaWNzOw0KLSAgICBDR0Zsb2F0IHR5ID0gQ0dCaXRtYXBDb250ZXh0R2V0SGVpZ2h0KGNvbnRleHQpIC0gbWF0cml4LT5mOw0KLSAgICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNvbnRleHQsIENHQWZmaW5lVHJhbnNmb3JtTWFrZShtYXRyaXgtPmEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT5iLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+YywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgtPmQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT5lLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5KSk7DQotfQ0KLUZYX0JPT0wgQ1F1YXJ0ejJEOjpkcmF3R3JhcGhpY3NTdHJpbmcodm9pZCogICAgICAgICAgICAgICAgIGdyYXBoaWNzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgICAgIGZvbnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCAgICAgICAgICAgICAgZm9udFNpemUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9XT1JEKiAgICAgICAgICAgICAgZ2x5cGhJbmRpY2VzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dQb2ludCogICAgICAgICAgIGdseXBoUG9zaXRpb25zLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfSU5UMzIgICAgICAgICAgICAgIGNoYXJzQ291bnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9BUkdCICAgICAgICAgICAgICAgYXJnYiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9BZmZpbmVNYXRyaXgqICAgICBtYXRyaXggKQ0KLXsNCi0gICAgaWYgKCFncmFwaGljcykgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gKENHQ29udGV4dFJlZikgZ3JhcGhpY3M7DQotICAgIENHQ29udGV4dFNldEZvbnQoY29udGV4dCwgKENHRm9udFJlZilmb250KTsNCi0gICAgQ0dDb250ZXh0U2V0Rm9udFNpemUoY29udGV4dCwgZm9udFNpemUpOw0KLSAgICBpZiAobWF0cml4KSB7DQotICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBtID0gQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KTsNCi0gICAgICAgIG0gPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtTWFrZShtYXRyaXgtPmEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgtPmIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgtPmMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgtPmQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgtPmUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgtPmYpKTsNCi0gICAgICAgIENHQ29udGV4dFNldFRleHRNYXRyaXgoY29udGV4dCwgbSk7DQotICAgIH0NCi0gICAgRlhfSU5UMzIgYSwgciwgZywgYjsNCi0gICAgQXJnYkRlY29kZShhcmdiLCBhLCByLCBnLCBiKTsNCi0gICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIC8gMjU1LmYsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnIC8gMjU1LmYsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIC8gMjU1LmYsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIC8gMjU1LmYpOw0KLSAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOw0KLSNpZiBDR0ZMT0FUX0lTX0RPVUJMRQ0KLSAgICBDR1BvaW50KiBnbHlwaFBvc2l0aW9uc0NHID0gbmV3IENHUG9pbnRbY2hhcnNDb3VudF07DQotICAgIGlmICghZ2x5cGhQb3NpdGlvbnNDRykgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBjaGFyc0NvdW50OyArK2luZGV4KSB7DQotICAgICAgICBnbHlwaFBvc2l0aW9uc0NHW2luZGV4XS54ID0gZ2x5cGhQb3NpdGlvbnNbaW5kZXhdLng7DQotICAgICAgICBnbHlwaFBvc2l0aW9uc0NHW2luZGV4XS55ID0gZ2x5cGhQb3NpdGlvbnNbaW5kZXhdLnk7DQotICAgIH0NCi0jZWxzZQ0KLSAgICBDR1BvaW50KiBnbHlwaFBvc2l0aW9uc0NHID0gKENHUG9pbnQqKWdseXBoUG9zaXRpb25zOw0KLSNlbmRpZg0KLSAgICBDR0NvbnRleHRTaG93R2x5cGhzQXRQb3NpdGlvbnMoY29udGV4dCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDR0dseXBoICopIGdseXBoSW5kaWNlcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoUG9zaXRpb25zQ0csDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc0NvdW50KTsNCi0jaWYgQ0dGTE9BVF9JU19ET1VCTEUNCi0gICAgZGVsZXRlW10gZ2x5cGhQb3NpdGlvbnNDRzsNCi0jZW5kaWYNCi0gICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ1F1YXJ0ejJEOjpzYXZlR3JhcGhpY3NTdGF0ZSh2b2lkICogZ3JhcGhpY3MpDQotew0KLSAgICBpZiAoZ3JhcGhpY3MpIHsNCi0gICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoKENHQ29udGV4dFJlZikgZ3JhcGhpY3MpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ1F1YXJ0ejJEOjpyZXN0b3JlR3JhcGhpY3NTdGF0ZSh2b2lkICogZ3JhcGhpY3MpDQotew0KLSAgICBpZiAoZ3JhcGhpY3MpIHsNCi0gICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoKENHQ29udGV4dFJlZikgZ3JhcGhpY3MpOw0KLSAgICB9DQotfQ0KLXN0YXRpYyBDR0NvbnRleHRSZWYgY3JlYXRlQ29udGV4dFdpdGhCaXRtYXAoQ0ZYX0RJQml0bWFwKiBwQml0bWFwKQ0KLXsNCi0gICAgaWYgKCFwQml0bWFwIHx8IHBCaXRtYXAtPklzQ215a0ltYWdlKCkgfHwgcEJpdG1hcC0+R2V0QlBQKCkgPCAzMikgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZTsNCi0gICAgaWYgKHBCaXRtYXAtPkhhc0FscGhhKCkpIHsNCi0gICAgICAgIGJpdG1hcEluZm8gfD0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGJpdG1hcEluZm8gfD0ga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3Q7DQotICAgIH0NCi0gICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsNCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUocEJpdG1hcC0+R2V0QnVmZmVyKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJpdG1hcC0+R2V0V2lkdGgoKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwQml0bWFwLT5HZXRIZWlnaHQoKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCaXRtYXAtPkdldFBpdGNoKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXBJbmZvKTsNCi0gICAgQ0dDb2xvclNwYWNlUmVsZWFzZShjb2xvclNwYWNlKTsNCi0gICAgcmV0dXJuIGNvbnRleHQ7DQotfQ0KLUNGWF9RdWFydHpEZXZpY2VEcml2ZXI6OkNGWF9RdWFydHpEZXZpY2VEcml2ZXIoQ0dDb250ZXh0UmVmIGNvbnRleHQsIEZYX0lOVDMyIGRldmljZUNsYXNzKQ0KLXsNCi0gICAgbV9zYXZlQ291bnQgPSAwOw0KLSAgICBfY29udGV4dAkJPSBjb250ZXh0Ow0KLSAgICBfZGV2aWNlQ2xhc3MJPSBkZXZpY2VDbGFzczsNCi0gICAgQ0dDb250ZXh0UmV0YWluKF9jb250ZXh0KTsNCi0gICAgQ0dSZWN0IHIgPSBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCk7DQotICAgIF93aWR0aAk9IEZYU1lTX3JvdW5kKHIuc2l6ZS53aWR0aCk7DQotICAgIF9oZWlnaHQJPSBGWFNZU19yb3VuZChyLnNpemUuaGVpZ2h0KTsNCi0gICAgX3JlbmRlckNhcHMgPSBGWFJDX1NPRlRfQ0xJUCB8IEZYUkNfQkxFTkRfTU9ERSB8DQotICAgICAgICAgICAgICAgICAgRlhSQ19BTFBIQV9QQVRIIHwgRlhSQ19BTFBIQV9JTUFHRSB8DQotICAgICAgICAgICAgICAgICAgRlhSQ19CSVRfTUFTSyB8IEZYUkNfQUxQSEFfTUFTSzsNCi0gICAgaWYgKF9kZXZpY2VDbGFzcyAhPSBGWERDX0RJU1BMQVkpIHsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShfY29udGV4dCk7DQotICAgICAgICBpZiAoaW1hZ2UpIHsNCi0gICAgICAgICAgICBfcmVuZGVyQ2FwcyB8PSBGWFJDX0dFVF9CSVRTOw0KLSAgICAgICAgICAgIF93aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChpbWFnZSk7DQotICAgICAgICAgICAgX2hlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpOw0KLSAgICAgICAgICAgIENHSW1hZ2VBbHBoYUluZm8gYWxwaGFJbmZvID0gQ0dJbWFnZUdldEFscGhhSW5mbyhpbWFnZSk7DQotICAgICAgICAgICAgaWYgKGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgPT0gYWxwaGFJbmZvIHx8DQotICAgICAgICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QgPT0gYWxwaGFJbmZvIHx8DQotICAgICAgICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhT25seSA9PSBhbHBoYUluZm8pIHsNCi0gICAgICAgICAgICAgICAgX3JlbmRlckNhcHMgfD0gRlhSQ19BTFBIQV9PVVRQVVQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgQ0dJbWFnZVJlbGVhc2UoaW1hZ2UpOw0KLSAgICB9DQotICAgIENHQWZmaW5lVHJhbnNmb3JtIGN0bSA9IENHQ29udGV4dEdldENUTShfY29udGV4dCk7DQotICAgIENHQ29udGV4dFNhdmVHU3RhdGUoX2NvbnRleHQpOw0KLSAgICBtX3NhdmVDb3VudCsrOw0KLSAgICBpZiAoY3RtLmQgPj0gMCkgew0KLSAgICAgICAgQ0dGbG9hdCBvZmZzZXRfeCwgb2Zmc2V0X3k7DQotICAgICAgICBvZmZzZXRfeCA9IGN0bS50eDsNCi0gICAgICAgIG9mZnNldF95ID0gY3RtLnR5Ow0KLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKF9jb250ZXh0LCAtb2Zmc2V0X3gsIC1vZmZzZXRfeSk7DQotICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oX2NvbnRleHQsIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCAwLCAwLCAtMSwgb2Zmc2V0X3gsIF9oZWlnaHQgKyBvZmZzZXRfeSkpOw0KLSAgICB9DQotICAgIF9mb3hpdERldmljZTJVc2VyID0gQ0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0eTsNCi0gICAgX3VzZXIyRm94aXREZXZpY2UgPSBDR0FmZmluZVRyYW5zZm9ybUludmVydChfZm94aXREZXZpY2UyVXNlcik7DQotfQ0KLUNGWF9RdWFydHpEZXZpY2VEcml2ZXI6On5DRlhfUXVhcnR6RGV2aWNlRHJpdmVyKCkNCi17DQotICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoX2NvbnRleHQpOw0KLSAgICBtX3NhdmVDb3VudC0tOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fc2F2ZUNvdW50OyArK2kpIHsNCi0gICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoX2NvbnRleHQpOw0KLSAgICB9DQotICAgIGlmIChfY29udGV4dCkgew0KLSAgICAgICAgQ0dDb250ZXh0UmVsZWFzZShfY29udGV4dCk7DQotICAgIH0NCi19DQotaW50IENGWF9RdWFydHpEZXZpY2VEcml2ZXI6OkdldERldmljZUNhcHMoaW50IGNhcHNJRCkNCi17DQotICAgIHN3aXRjaCAoY2Fwc0lEKSB7DQotICAgICAgICBjYXNlIEZYRENfREVWSUNFX0NMQVNTOiB7DQotICAgICAgICAgICAgICAgIHJldHVybiBfZGV2aWNlQ2xhc3M7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgY2FzZSBGWERDX1BJWEVMX1dJRFRIOiB7DQotICAgICAgICAgICAgICAgIHJldHVybiBfd2lkdGg7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgY2FzZSBGWERDX1BJWEVMX0hFSUdIVDogew0KLSAgICAgICAgICAgICAgICByZXR1cm4gX2hlaWdodDsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIEZYRENfQklUU19QSVhFTDogew0KLSAgICAgICAgICAgICAgICByZXR1cm4gMzI7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgY2FzZSBGWERDX1JFTkRFUl9DQVBTOiB7DQotICAgICAgICAgICAgICAgIHJldHVybiBfcmVuZGVyQ2FwczsNCi0gICAgICAgICAgICB9DQotICAgICAgICBkZWZhdWx0OiB7DQotICAgICAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgICAgIH0NCi0gICAgfQ0KLX0NCi1DRlhfTWF0cml4IENGWF9RdWFydHpEZXZpY2VEcml2ZXI6OkdldENUTSgpIGNvbnN0DQotew0KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBjdG0gPSBDR0NvbnRleHRHZXRDVE0oX2NvbnRleHQpOw0KLSAgICByZXR1cm4gQ0ZYX01hdHJpeChjdG0uYSwgY3RtLmIsIGN0bS5jLCBjdG0uZCwgY3RtLnR4LCBjdG0udHkpOw0KLX0NCi12b2lkIENGWF9RdWFydHpEZXZpY2VEcml2ZXI6OlNhdmVTdGF0ZSgpDQotew0KLSAgICBDR0NvbnRleHRTYXZlR1N0YXRlKF9jb250ZXh0KTsNCi0gICAgbV9zYXZlQ291bnQrKzsNCi19DQotdm9pZCBDRlhfUXVhcnR6RGV2aWNlRHJpdmVyOjpSZXN0b3JlU3RhdGUoRlhfQk9PTCBpc0tlZXBTYXZlZCApDQotew0KLSAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKF9jb250ZXh0KTsNCi0gICAgaWYgKGlzS2VlcFNhdmVkKSB7DQotICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKF9jb250ZXh0KTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1fc2F2ZUNvdW50LS07DQotICAgIH0NCi19DQotRlhfQk9PTCBDRlhfUXVhcnR6RGV2aWNlRHJpdmVyOjpTZXRDbGlwX1BhdGhGaWxsKGNvbnN0IENGWF9QYXRoRGF0YSogICAgcGF0aERhdGEsDQotICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiAgIG1hdHJpeCwNCi0gICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgZmlsbE1vZGUgKQ0KLXsNCi0gICAgU2F2ZVN0YXRlKCk7DQotICAgIENHQWZmaW5lVHJhbnNmb3JtIG0gPSBDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5Ow0KLSAgICBpZiAobWF0cml4KSB7DQotICAgICAgICBtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKG1hdHJpeC0+R2V0QSgpLCBtYXRyaXgtPkdldEIoKSwgbWF0cml4LT5HZXRDKCksIG1hdHJpeC0+R2V0RCgpLCBtYXRyaXgtPkdldEUoKSwgbWF0cml4LT5HZXRGKCkpOw0KLSAgICB9DQotICAgIG0gPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtLCBfZm94aXREZXZpY2UyVXNlcik7DQotICAgIENHQ29udGV4dENvbmNhdENUTShfY29udGV4dCwgbSk7DQotICAgIHNldFBhdGhUb0NvbnRleHQocGF0aERhdGEpOw0KLSAgICBSZXN0b3JlU3RhdGUoRkFMU0UpOw0KLSAgICBpZiAoKGZpbGxNb2RlICYgMykgPT0gRlhGSUxMX1dJTkRJTkcpIHsNCi0gICAgICAgIENHQ29udGV4dENsaXAoX2NvbnRleHQpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgQ0dDb250ZXh0RU9DbGlwKF9jb250ZXh0KTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfRkxPQVQgQ0ZYX1F1YXJ0ekRldmljZURyaXZlcjo6Z2V0TGluZVdpZHRoKGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSAqIGdyYXBoU3RhdGUsIENHQWZmaW5lVHJhbnNmb3JtIGN0bSkNCi17DQotICAgIEZYX0ZMT0FUIGxpbmVXaWR0aCA9IGdyYXBoU3RhdGUtPm1fTGluZVdpZHRoOw0KLSAgICBpZiAoZ3JhcGhTdGF0ZS0+bV9MaW5lV2lkdGggPD0gMC5mKSB7DQotICAgICAgICBDR1NpemUgc2l6ZTsNCi0gICAgICAgIHNpemUud2lkdGggPSAxOw0KLSAgICAgICAgc2l6ZS5oZWlnaHQgPSAxOw0KLSAgICAgICAgQ0dTaXplIHRlbXAgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybShzaXplLCBjdG0pOw0KLSAgICAgICAgQ0dGbG9hdCB4ID0gMSAvIHRlbXAud2lkdGg7DQotICAgICAgICBDR0Zsb2F0IHkgPSAxIC8gdGVtcC5oZWlnaHQ7DQotICAgICAgICBsaW5lV2lkdGggPSB4ID4geSA/IHggOiB5Ow0KLSAgICB9DQotICAgIHJldHVybiBsaW5lV2lkdGg7DQotfQ0KLUZYX0JPT0wgQ0ZYX1F1YXJ0ekRldmljZURyaXZlcjo6U2V0Q2xpcF9QYXRoU3Ryb2tlKGNvbnN0IENGWF9QYXRoRGF0YSogICAgICBwYXRoRGF0YSwNCi0gICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqICAgICBtYXRyaXgsDQotICAgICAgICBjb25zdCBDRlhfR3JhcGhTdGF0ZURhdGEqICAgZ3JhcGhTdGF0ZSApDQotew0KLSAgICBTYXZlU3RhdGUoKTsNCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbSA9IENHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHk7DQotICAgIGlmIChtYXRyaXgpIHsNCi0gICAgICAgIG0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2UobWF0cml4LT5HZXRBKCksIG1hdHJpeC0+R2V0QigpLCBtYXRyaXgtPkdldEMoKSwgbWF0cml4LT5HZXREKCksIG1hdHJpeC0+R2V0RSgpLCBtYXRyaXgtPkdldEYoKSk7DQotICAgIH0NCi0gICAgbSA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG0sIF9mb3hpdERldmljZTJVc2VyKTsNCi0gICAgQ0dDb250ZXh0Q29uY2F0Q1RNKF9jb250ZXh0LCBtKTsNCi0gICAgRlhfRkxPQVQgbGluZVdpZHRoID0gZ2V0TGluZVdpZHRoKGdyYXBoU3RhdGUsIG0pOw0KLSAgICBzZXRTdHJva2VJbmZvKGdyYXBoU3RhdGUsIDB4RkYwMDAwMDAsIGxpbmVXaWR0aCk7DQotICAgIHNldFBhdGhUb0NvbnRleHQocGF0aERhdGEpOw0KLSAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChfY29udGV4dCk7DQotICAgIFJlc3RvcmVTdGF0ZShGQUxTRSk7DQotICAgIENHQ29udGV4dENsaXAoX2NvbnRleHQpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotc3RhdGljIENHQmxlbmRNb2RlIEdldENHQmxlbmRNb2RlKGludCBibGVuZF90eXBlKQ0KLXsNCi0gICAgQ0dCbGVuZE1vZGUgbW9kZSA9IGtDR0JsZW5kTW9kZU5vcm1hbDsNCi0gICAgc3dpdGNoIChibGVuZF90eXBlKSB7DQotICAgICAgICBjYXNlIEZYRElCX0JMRU5EX05PUk1BTDoNCi0gICAgICAgICAgICBtb2RlID0ga0NHQmxlbmRNb2RlTm9ybWFsOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBGWERJQl9CTEVORF9NVUxUSVBMWToNCi0gICAgICAgICAgICBtb2RlID0ga0NHQmxlbmRNb2RlTXVsdGlwbHk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIEZYRElCX0JMRU5EX1NDUkVFTjoNCi0gICAgICAgICAgICBtb2RlID0ga0NHQmxlbmRNb2RlU2NyZWVuOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBGWERJQl9CTEVORF9PVkVSTEFZOg0KLSAgICAgICAgICAgIG1vZGUgPSBrQ0dCbGVuZE1vZGVPdmVybGF5Ow0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBGWERJQl9CTEVORF9EQVJLRU46DQotICAgICAgICAgICAgbW9kZSA9IGtDR0JsZW5kTW9kZURhcmtlbjsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgRlhESUJfQkxFTkRfTElHSFRFTjoNCi0gICAgICAgICAgICBtb2RlID0ga0NHQmxlbmRNb2RlTGlnaHRlbjsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgRlhESUJfQkxFTkRfQ09MT1JET0RHRToNCi0gICAgICAgICAgICBtb2RlID0ga0NHQmxlbmRNb2RlQ29sb3JEb2RnZTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgRlhESUJfQkxFTkRfQ09MT1JCVVJOOg0KLSAgICAgICAgICAgIG1vZGUgPSBrQ0dCbGVuZE1vZGVDb2xvckJ1cm47DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIEZYRElCX0JMRU5EX0hBUkRMSUdIVDoNCi0gICAgICAgICAgICBtb2RlID0ga0NHQmxlbmRNb2RlSGFyZExpZ2h0Ow0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBGWERJQl9CTEVORF9TT0ZUTElHSFQ6DQotICAgICAgICAgICAgbW9kZSA9IGtDR0JsZW5kTW9kZVNvZnRMaWdodDsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgRlhESUJfQkxFTkRfRElGRkVSRU5DRToNCi0gICAgICAgICAgICBtb2RlID0ga0NHQmxlbmRNb2RlRGlmZmVyZW5jZTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgRlhESUJfQkxFTkRfRVhDTFVTSU9OOg0KLSAgICAgICAgICAgIG1vZGUgPSBrQ0dCbGVuZE1vZGVFeGNsdXNpb247DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIEZYRElCX0JMRU5EX0hVRToNCi0gICAgICAgICAgICBtb2RlID0ga0NHQmxlbmRNb2RlSHVlOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBGWERJQl9CTEVORF9TQVRVUkFUSU9OOg0KLSAgICAgICAgICAgIG1vZGUgPSBrQ0dCbGVuZE1vZGVTYXR1cmF0aW9uOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBGWERJQl9CTEVORF9DT0xPUjoNCi0gICAgICAgICAgICBtb2RlID0ga0NHQmxlbmRNb2RlQ29sb3I7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIEZYRElCX0JMRU5EX0xVTUlOT1NJVFk6DQotICAgICAgICAgICAgbW9kZSA9IGtDR0JsZW5kTW9kZUx1bWlub3NpdHk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBkZWZhdWx0Og0KLSAgICAgICAgICAgIG1vZGUgPSBrQ0dCbGVuZE1vZGVOb3JtYWw7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgIH0NCi0gICAgcmV0dXJuIG1vZGU7DQotfQ0KLUZYX0JPT0wgQ0ZYX1F1YXJ0ekRldmljZURyaXZlcjo6RHJhd1BhdGgoY29uc3QgQ0ZYX1BhdGhEYXRhKiAgICAgICAgcGF0aERhdGEsDQotICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiAgICAgICBtYXRyaXgsDQotICAgICAgICBjb25zdCBDRlhfR3JhcGhTdGF0ZURhdGEqICAgICBncmFwaFN0YXRlLA0KLSAgICAgICAgRlhfRFdPUkQgICAgICAgICAgICAgICAgICAgICAgZmlsbEFyZ2IsDQotICAgICAgICBGWF9EV09SRCAgICAgICAgICAgICAgICAgICAgICBzdHJva2VBcmdiLA0KLSAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbE1vZGUsDQotICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYV9mbGFnLA0KLSAgICAgICAgdm9pZCogICAgICAgICAgICAgICAgICAgICAgICAgcEljY1RyYW5zZm9ybSwNCi0gICAgICAgIGludAkJCQkJCQlibGVuZF90eXBlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCi17DQotICAgIFNhdmVTdGF0ZSgpOw0KLSAgICBDR0JsZW5kTW9kZSBtb2RlID0gR2V0Q0dCbGVuZE1vZGUoYmxlbmRfdHlwZSk7DQotICAgIGlmIChtb2RlICE9IGtDR0JsZW5kTW9kZU5vcm1hbCkgew0KLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKF9jb250ZXh0LCBtb2RlKTsNCi0gICAgfQ0KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBtID0gQ0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0eTsNCi0gICAgaWYgKG1hdHJpeCkgew0KLSAgICAgICAgbSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZShtYXRyaXgtPkdldEEoKSwgbWF0cml4LT5HZXRCKCksIG1hdHJpeC0+R2V0QygpLCBtYXRyaXgtPkdldEQoKSwgbWF0cml4LT5HZXRFKCksIG1hdHJpeC0+R2V0RigpKTsNCi0gICAgfQ0KLSAgICBtID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobSwgX2ZveGl0RGV2aWNlMlVzZXIpOw0KLSAgICBDR0NvbnRleHRDb25jYXRDVE0oX2NvbnRleHQsIG0pOw0KLSAgICBpbnQgcGF0aE1vZGUgPSAwOw0KLSAgICBpZiAoZ3JhcGhTdGF0ZSAmJiBzdHJva2VBcmdiKSB7DQotICAgICAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KF9jb250ZXh0LCBncmFwaFN0YXRlLT5tX01pdGVyTGltaXQpOw0KLSAgICAgICAgRlhfRkxPQVQgbGluZVdpZHRoID0gZ2V0TGluZVdpZHRoKGdyYXBoU3RhdGUsIG0pOw0KLSAgICAgICAgc2V0U3Ryb2tlSW5mbyhncmFwaFN0YXRlLCBzdHJva2VBcmdiLCBsaW5lV2lkdGgpOw0KLSAgICAgICAgcGF0aE1vZGUgfD0gNDsNCi0gICAgfQ0KLSAgICBpZiAoZmlsbE1vZGUgJiYgZmlsbEFyZ2IpIHsNCi0gICAgICAgIHNldEZpbGxJbmZvKGZpbGxBcmdiKTsNCi0gICAgICAgIGlmICgoZmlsbE1vZGUgJiAzKSA9PSBGWEZJTExfV0lORElORykgew0KLSAgICAgICAgICAgIHBhdGhNb2RlIHw9IDE7DQotICAgICAgICB9IGVsc2UgaWYgKChmaWxsTW9kZSAmIDMpID09IEZYRklMTF9BTFRFUk5BVEUpIHsNCi0gICAgICAgICAgICBwYXRoTW9kZSB8PSAyOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHNldFBhdGhUb0NvbnRleHQocGF0aERhdGEpOw0KLSAgICBpZiAoZmlsbE1vZGUgJiBGWEZJTExfRlVMTENPVkVSKSB7DQotICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoX2NvbnRleHQsIGZhbHNlKTsNCi0gICAgfQ0KLSAgICBpZiAocGF0aE1vZGUgPT0gNCkgew0KLSAgICAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChfY29udGV4dCk7DQotICAgIH0gZWxzZSBpZiAocGF0aE1vZGUgPT0gMSkgew0KLSAgICAgICAgQ0dDb250ZXh0RmlsbFBhdGgoX2NvbnRleHQpOw0KLSAgICB9IGVsc2UgaWYgKHBhdGhNb2RlID09IDIpIHsNCi0gICAgICAgIENHQ29udGV4dEVPRmlsbFBhdGgoX2NvbnRleHQpOw0KLSAgICB9IGVsc2UgaWYgKHBhdGhNb2RlID09IDUpIHsNCi0gICAgICAgIENHQ29udGV4dERyYXdQYXRoKF9jb250ZXh0LCBrQ0dQYXRoRmlsbFN0cm9rZSk7DQotICAgIH0gZWxzZSBpZiAocGF0aE1vZGUgPT0gNikgew0KLSAgICAgICAgQ0dDb250ZXh0RHJhd1BhdGgoX2NvbnRleHQsIGtDR1BhdGhFT0ZpbGxTdHJva2UpOw0KLSAgICB9DQotICAgIFJlc3RvcmVTdGF0ZShGQUxTRSk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENGWF9RdWFydHpEZXZpY2VEcml2ZXI6OkZpbGxSZWN0KGNvbnN0IEZYX1JFQ1QqICAgICAgICAgcmVjdCwNCi0gICAgICAgIEZYX0FSR0IgICAgICAgICAgICAgICAgICAgZmlsbEFyZ2IsDQotICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgIGFscGhhRmxhZwkgICAsDQotICAgICAgICB2b2lkKiAgICAgICAgICAgICAgICAgICAgIGljY1RyYW5zZm9ybSAsDQotICAgICAgICBpbnQJCQkJCQlibGVuZF90eXBlICkNCi17DQotICAgIENHQmxlbmRNb2RlIG1vZGUgPSBHZXRDR0JsZW5kTW9kZShibGVuZF90eXBlKTsNCi0gICAgaWYgKG1vZGUgIT0ga0NHQmxlbmRNb2RlTm9ybWFsKSB7DQotICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoX2NvbnRleHQsIG1vZGUpOw0KLSAgICB9DQotICAgIENHUmVjdCByZWN0X2Z4ID0gQ0dSZWN0TWFrZShyZWN0LT5sZWZ0LCByZWN0LT50b3AsIHJlY3QtPldpZHRoKCksIHJlY3QtPkhlaWdodCgpKTsNCi0gICAgQ0dSZWN0IHJlY3RfdXNyID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocmVjdF9meCwgX2ZveGl0RGV2aWNlMlVzZXIpOw0KLSAgICBGWF9JTlQzMiBhLCByLCBnLCBiOw0KLSAgICBBcmdiRGVjb2RlKGZpbGxBcmdiLCBhLCByLCBnLCBiKTsNCi0gICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKF9jb250ZXh0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciAvIDI1NS5mLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyAvIDI1NS5mLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiAvIDI1NS5mLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSAvIDI1NS5mKTsNCi0gICAgQ0dDb250ZXh0RmlsbFJlY3QoX2NvbnRleHQsIHJlY3RfdXNyKTsNCi0gICAgaWYgKG1vZGUgIT0ga0NHQmxlbmRNb2RlTm9ybWFsKSB7DQotICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoX2NvbnRleHQsIGtDR0JsZW5kTW9kZU5vcm1hbCk7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ0ZYX1F1YXJ0ekRldmljZURyaXZlcjo6RHJhd0Nvc21ldGljTGluZShGWF9GTE9BVCAgICAgICAgICAgeDEsDQotICAgICAgICBGWF9GTE9BVCAgICAgICAgICAgICAgeTEsDQotICAgICAgICBGWF9GTE9BVCAgICAgICAgICAgICAgeDIsDQotICAgICAgICBGWF9GTE9BVCAgICAgICAgICAgICAgeTIsDQotICAgICAgICBGWF9EV09SRCAgICAgICAgICAgICAgYXJnYiwNCi0gICAgICAgIGludCAgICAgICAgICAgICAgICAgICBhbHBoYUZsYWcgICAgICAgLA0KLSAgICAgICAgdm9pZCogICAgICAgICAgICAgICAgIGljY1RyYW5zZm9ybSAgICAsDQotICAgICAgICBpbnQJCQkJCWJsZW5kX3R5cGUgKQ0KLXsNCi0gICAgQ0dCbGVuZE1vZGUgbW9kZSA9IEdldENHQmxlbmRNb2RlKGJsZW5kX3R5cGUpOw0KLSAgICBpZiAobW9kZSAhPSBrQ0dCbGVuZE1vZGVOb3JtYWwpIHsNCi0gICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShfY29udGV4dCwgbW9kZSk7DQotICAgIH0NCi0gICAgQ0dQb2ludCBwdCA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShDR1BvaW50TWFrZSh4MSwgeTEpLCBfZm94aXREZXZpY2UyVXNlcik7DQotICAgIHgxID0gcHQueDsNCi0gICAgeTEgPSBwdC55Ow0KLSAgICBwdCA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShDR1BvaW50TWFrZSh4MiwgeTIpLCBfZm94aXREZXZpY2UyVXNlcik7DQotICAgIHgyID0gcHQueDsNCi0gICAgeTIgPSBwdC55Ow0KLSAgICBGWF9JTlQzMiBhLCByLCBnLCBiOw0KLSAgICBBcmdiRGVjb2RlKGFyZ2IsIGEsIHIsIGcsIGIpOw0KLSAgICBDR0NvbnRleHRTZXRSR0JTdHJva2VDb2xvcihfY29udGV4dCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciAvIDI1NS5mLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnIC8gMjU1LmYsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgLyAyNTUuZiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSAvIDI1NS5mKTsNCi0gICAgQ0dDb250ZXh0TW92ZVRvUG9pbnQoX2NvbnRleHQsIHgxLCB5MSk7DQotICAgIENHQ29udGV4dEFkZExpbmVUb1BvaW50KF9jb250ZXh0LCB4MiwgeTIpOw0KLSAgICBDR0NvbnRleHRTdHJva2VQYXRoKF9jb250ZXh0KTsNCi0gICAgaWYgKG1vZGUgIT0ga0NHQmxlbmRNb2RlTm9ybWFsKSB7DQotICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoX2NvbnRleHQsIGtDR0JsZW5kTW9kZU5vcm1hbCk7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ0ZYX1F1YXJ0ekRldmljZURyaXZlcjo6R2V0Q2xpcEJveChGWF9SRUNUKiByZWN0KQ0KLXsNCi0gICAgQ0dSZWN0IHIgPSBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goX2NvbnRleHQpOw0KLSAgICByID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0ociwgX3VzZXIyRm94aXREZXZpY2UpOw0KLSAgICByZWN0LT5sZWZ0CQk9IEZYU1lTX2Zsb29yKHIub3JpZ2luLngpOw0KLSAgICByZWN0LT50b3AJCT0gRlhTWVNfZmxvb3Ioci5vcmlnaW4ueSk7DQotICAgIHJlY3QtPnJpZ2h0CQk9IEZYU1lTX2NlaWwoci5vcmlnaW4ueCArIHIuc2l6ZS53aWR0aCk7DQotICAgIHJlY3QtPmJvdHRvbQk9IEZYU1lTX2NlaWwoci5vcmlnaW4ueSArIHIuc2l6ZS5oZWlnaHQpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDRlhfUXVhcnR6RGV2aWNlRHJpdmVyOjpHZXRESUJpdHMoQ0ZYX0RJQml0bWFwKiAgICAgYml0bWFwLA0KLSAgICAgICAgRlhfSU5UMzIgICAgICAgICAgICBsZWZ0LA0KLSAgICAgICAgRlhfSU5UMzIgICAgICAgICAgICB0b3AsDQotICAgICAgICB2b2lkKiBwSWNjVHJhbnNmb3JtLA0KLSAgICAgICAgRlhfQk9PTCBiREVkZ2UpDQotew0KLSAgICBpZiAoRlhEQ19QUklOVEVSID09IF9kZXZpY2VDbGFzcykgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChiaXRtYXAtPkdldEJQUCgpIDwgMzIpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoIShfcmVuZGVyQ2FwcyB8IEZYUkNfR0VUX0JJVFMpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ0dQb2ludCBwdCA9IENHUG9pbnRNYWtlKGxlZnQsIHRvcCk7DQotICAgIHB0ID0gQ0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKHB0LCBfZm94aXREZXZpY2UyVXNlcik7DQotICAgIENHQWZmaW5lVHJhbnNmb3JtIGN0bSA9IENHQ29udGV4dEdldENUTShfY29udGV4dCk7DQotICAgIHB0LnggKj0gRlhTWVNfZmFicyhjdG0uYSk7DQotICAgIHB0LnkgKj0gRlhTWVNfZmFicyhjdG0uZCk7DQotICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShfY29udGV4dCk7DQotICAgIGlmIChOVUxMID09IGltYWdlKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ0dGbG9hdCB3aWR0aAk9IChDR0Zsb2F0KSBiaXRtYXAtPkdldFdpZHRoKCk7DQotICAgIENHRmxvYXQgaGVpZ2h0CT0gKENHRmxvYXQpIGJpdG1hcC0+R2V0SGVpZ2h0KCk7DQotICAgIGlmICh3aWR0aCArIHB0LnggPiBfd2lkdGgpIHsNCi0gICAgICAgIHdpZHRoIC09ICh3aWR0aCArIHB0LnggLSBfd2lkdGgpOw0KLSAgICB9DQotICAgIGlmIChoZWlnaHQgKyBwdC55ID4gX2hlaWdodCkgew0KLSAgICAgICAgaGVpZ2h0IC09IChoZWlnaHQgKyBwdC55IC0gX2hlaWdodCk7DQotICAgIH0NCi0gICAgQ0dJbWFnZVJlZiBzdWJJbWFnZSA9IENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICBDR1JlY3RNYWtlKHB0LngsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LnksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQpKTsNCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBjcmVhdGVDb250ZXh0V2l0aEJpdG1hcChiaXRtYXApOw0KLSAgICBDR1JlY3QgcmVjdCA9IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KTsNCi0gICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGNvbnRleHQsIHJlY3QpOw0KLSAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgcmVjdCwgc3ViSW1hZ2UpOw0KLSAgICBDR0NvbnRleHRSZWxlYXNlKGNvbnRleHQpOw0KLSAgICBDR0ltYWdlUmVsZWFzZShzdWJJbWFnZSk7DQotICAgIENHSW1hZ2VSZWxlYXNlKGltYWdlKTsNCi0gICAgaWYgKGJpdG1hcC0+SGFzQWxwaGEoKSkgew0KLSAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgYml0bWFwLT5HZXRIZWlnaHQoKTsgcm93ICsrKSB7DQotICAgICAgICAgICAgRlhfTFBCWVRFIHBTY2FubGluZSA9IChGWF9MUEJZVEUpYml0bWFwLT5HZXRTY2FubGluZShyb3cpOw0KLSAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGJpdG1hcC0+R2V0V2lkdGgoKTsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgIGlmIChwU2NhbmxpbmVbM10gPiAwKSB7DQotICAgICAgICAgICAgICAgICAgICBwU2NhbmxpbmVbMF0gPSAocFNjYW5saW5lWzBdICogMjU1LmYgLyBwU2NhbmxpbmVbM10gKyAuNWYpOw0KLSAgICAgICAgICAgICAgICAgICAgcFNjYW5saW5lWzFdID0gKHBTY2FubGluZVsxXSAqIDI1NS5mIC8gcFNjYW5saW5lWzNdICsgLjVmKTsNCi0gICAgICAgICAgICAgICAgICAgIHBTY2FubGluZVsyXSA9IChwU2NhbmxpbmVbMl0gKiAyNTUuZiAvIHBTY2FubGluZVszXSArIC41Zik7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcFNjYW5saW5lICs9IDQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENGWF9RdWFydHpEZXZpY2VEcml2ZXI6OlNldERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiAgICAgIHBCaXRtYXAsDQotICAgICAgICBGWF9BUkdCICAgICAgICAgICAgICAgICAgICAgYXJnYiwNCi0gICAgICAgIGNvbnN0IEZYX1JFQ1QqICAgICAgICAgICAgICBzcmNSZWN0LA0KLSAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfbGVmdCwNCi0gICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3RvcCwNCi0gICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZFR5cGUsDQotICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGFGbGFnICAgICAgICwNCi0gICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICAgICAgICBpY2NUcmFuc2Zvcm0gICAgKQ0KLXsNCi0gICAgU2F2ZVN0YXRlKCk7DQotICAgIENHRmxvYXQgc3JjX2xlZnQsIHNyY190b3AsIHNyY193aWR0aCwgc3JjX2hlaWdodDsNCi0gICAgaWYgKHNyY1JlY3QpIHsNCi0gICAgICAgIHNyY19sZWZ0ID0gc3JjUmVjdC0+bGVmdDsNCi0gICAgICAgIHNyY190b3AgPSBzcmNSZWN0LT50b3A7DQotICAgICAgICBzcmNfd2lkdGggPSBzcmNSZWN0LT5XaWR0aCgpOw0KLSAgICAgICAgc3JjX2hlaWdodCA9IHNyY1JlY3QtPkhlaWdodCgpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgc3JjX2xlZnQgPSBzcmNfdG9wID0gMDsNCi0gICAgICAgIHNyY193aWR0aCA9IHBCaXRtYXAtPkdldFdpZHRoKCk7DQotICAgICAgICBzcmNfaGVpZ2h0ID0gcEJpdG1hcC0+R2V0SGVpZ2h0KCk7DQotICAgIH0NCi0gICAgQ0dBZmZpbmVUcmFuc2Zvcm0gY3RtID0gQ0dDb250ZXh0R2V0Q1RNKF9jb250ZXh0KTsNCi0gICAgQ0dGbG9hdCBzY2FsZV94ID0gRlhTWVNfZmFicyhjdG0uYSk7DQotICAgIENHRmxvYXQgc2NhbGVfeSA9IEZYU1lTX2ZhYnMoY3RtLmQpOw0KLSAgICBzcmNfbGVmdCAvPSBzY2FsZV94Ow0KLSAgICBzcmNfdG9wIC89IHNjYWxlX3k7DQotICAgIHNyY193aWR0aCAvPSBzY2FsZV94Ow0KLSAgICBzcmNfaGVpZ2h0IC89IHNjYWxlX3k7DQotICAgIENHUmVjdCByZWN0X2Z4ID0gQ0dSZWN0TWFrZShkZXN0X2xlZnQsIGRlc3RfdG9wLCBzcmNfd2lkdGgsIHNyY19oZWlnaHQpOw0KLSAgICBDR1JlY3QgcmVjdF91c3IgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShyZWN0X2Z4LCBfZm94aXREZXZpY2UyVXNlcik7DQotICAgIENHQ29udGV4dEJlZ2luUGF0aChfY29udGV4dCk7DQotICAgIENHQ29udGV4dEFkZFJlY3QoX2NvbnRleHQsIHJlY3RfdXNyKTsNCi0gICAgQ0dDb250ZXh0Q2xpcChfY29udGV4dCk7DQotICAgIHJlY3RfdXNyLnNpemUgPSBDR1NpemVNYWtlKHBCaXRtYXAtPkdldFdpZHRoKCkgLyBzY2FsZV94LCBwQml0bWFwLT5HZXRIZWlnaHQoKSAvIHNjYWxlX3kpOw0KLSAgICByZWN0X3VzciA9IENHUmVjdE9mZnNldChyZWN0X3VzciwgLXNyY19sZWZ0LCAtc3JjX3RvcCk7DQotICAgIENHX1NldEltYWdlVHJhbnNmb3JtKGRlc3RfbGVmdCwgZGVzdF90b3AsIHNyY193aWR0aCwgc3JjX2hlaWdodCwgJnJlY3RfdXNyKTsNCi0gICAgQ0ZYX0RJQml0bWFwKiBwQml0bWFwMSA9IE5VTEw7DQotICAgIGlmIChwQml0bWFwLT5Jc0FscGhhTWFzaygpKSB7DQotICAgICAgICBpZiAocEJpdG1hcC0+R2V0QnVmZmVyKCkpIHsNCi0gICAgICAgICAgICBwQml0bWFwMSA9IChDRlhfRElCaXRtYXAqKXBCaXRtYXA7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHBCaXRtYXAxID0gcEJpdG1hcC0+Q2xvbmUoKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChOVUxMID09IHBCaXRtYXAxKSB7DQotICAgICAgICAgICAgUmVzdG9yZVN0YXRlKEZBTFNFKTsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBDR0RhdGFQcm92aWRlclJlZiBwQml0bWFwUHJvdmlkZXIgPSBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQml0bWFwMS0+R2V0QnVmZmVyKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQml0bWFwMS0+R2V0UGl0Y2goKSAqIHBCaXRtYXAxLT5HZXRIZWlnaHQoKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOw0KLSAgICAgICAgQ0dDb2xvclNwYWNlUmVmIHBDb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlR3JheSgpOw0KLSAgICAgICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhTm9uZSB8IGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQ7DQotICAgICAgICBDR0ltYWdlUmVmIHBJbWFnZSA9IENHSW1hZ2VDcmVhdGUocEJpdG1hcDEtPkdldFdpZHRoKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJpdG1hcDEtPkdldEhlaWdodCgpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCaXRtYXAxLT5HZXRCUFAoKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQml0bWFwMS0+R2V0QlBQKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJpdG1hcDEtPkdldFBpdGNoKCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcENvbG9yU3BhY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwSW5mbywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQml0bWFwUHJvdmlkZXIsIE5VTEwsIHRydWUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7DQotICAgICAgICBDR0NvbnRleHRDbGlwVG9NYXNrKF9jb250ZXh0LCByZWN0X3VzciwgcEltYWdlKTsNCi0gICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihfY29udGV4dCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWEFSR0JfUihhcmdiKSAvIDI1NS5mLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYQVJHQl9HKGFyZ2IpIC8gMjU1LmYsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhBUkdCX0IoYXJnYikgLyAyNTUuZiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWEFSR0JfQShhcmdiKSAvIDI1NS5mKTsNCi0gICAgICAgIENHQ29udGV4dEZpbGxSZWN0KF9jb250ZXh0LCByZWN0X3Vzcik7DQotICAgICAgICBDR0ltYWdlUmVsZWFzZShwSW1hZ2UpOw0KLSAgICAgICAgQ0dDb2xvclNwYWNlUmVsZWFzZShwQ29sb3JTcGFjZSk7DQotICAgICAgICBDR0RhdGFQcm92aWRlclJlbGVhc2UocEJpdG1hcFByb3ZpZGVyKTsNCi0gICAgICAgIGlmIChwQml0bWFwMSAhPSBwQml0bWFwKSB7DQotICAgICAgICAgICAgZGVsZXRlIHBCaXRtYXAxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgUmVzdG9yZVN0YXRlKEZBTFNFKTsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIGlmIChwQml0bWFwLT5HZXRCUFAoKSA8IDMyKSB7DQotICAgICAgICBwQml0bWFwMSA9IHBCaXRtYXAtPkNsb25lQ29udmVydChGWERJQl9SZ2IzMik7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZiAocEJpdG1hcC0+R2V0QnVmZmVyKCkpIHsNCi0gICAgICAgICAgICBwQml0bWFwMSA9IChDRlhfRElCaXRtYXAqKXBCaXRtYXA7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHBCaXRtYXAxID0gcEJpdG1hcC0+Q2xvbmUoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoTlVMTCA9PSBwQml0bWFwMSkgew0KLSAgICAgICAgUmVzdG9yZVN0YXRlKEZBTFNFKTsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAocEJpdG1hcDEtPkhhc0FscGhhKCkpIHsNCi0gICAgICAgIGlmIChwQml0bWFwMSA9PSBwQml0bWFwKSB7DQotICAgICAgICAgICAgcEJpdG1hcDEgPSBwQml0bWFwLT5DbG9uZSgpOw0KLSAgICAgICAgICAgIGlmICghcEJpdG1hcDEpIHsNCi0gICAgICAgICAgICAgICAgUmVzdG9yZVN0YXRlKEZBTFNFKTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHBCaXRtYXAxLT5HZXRIZWlnaHQoKTsgcm93ICsrKSB7DQotICAgICAgICAgICAgRlhfTFBCWVRFIHBTY2FubGluZSA9IChGWF9MUEJZVEUpcEJpdG1hcDEtPkdldFNjYW5saW5lKHJvdyk7DQotICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcEJpdG1hcDEtPkdldFdpZHRoKCk7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICBwU2NhbmxpbmVbMF0gPSAoRlhfQllURSkocFNjYW5saW5lWzBdICogcFNjYW5saW5lWzNdIC8gMjU1LmYgKyAuNWYpOw0KLSAgICAgICAgICAgICAgICBwU2NhbmxpbmVbMV0gPSAoRlhfQllURSkocFNjYW5saW5lWzFdICogcFNjYW5saW5lWzNdIC8gMjU1LmYgKyAuNWYpOw0KLSAgICAgICAgICAgICAgICBwU2NhbmxpbmVbMl0gPSAoRlhfQllURSkocFNjYW5saW5lWzJdICogcFNjYW5saW5lWzNdIC8gMjU1LmYgKyAuNWYpOw0KLSAgICAgICAgICAgICAgICBwU2NhbmxpbmUgKz0gNDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgQ0dDb250ZXh0UmVmIGN0eCA9IGNyZWF0ZUNvbnRleHRXaXRoQml0bWFwKHBCaXRtYXAxKTsNCi0gICAgQ0dJbWFnZVJlZiBpbWFnZSA9IENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGN0eCk7DQotICAgIGludCBibGVuZF9tb2RlID0gYmxlbmRUeXBlOw0KLSAgICBpZiAoRlhESUJfQkxFTkRfSEFSRExJR0hUID09IGJsZW5kVHlwZSkgew0KLSAgICAgICAgYmxlbmRfbW9kZSA9IGtDR0JsZW5kTW9kZVNvZnRMaWdodDsNCi0gICAgfSBlbHNlIGlmIChGWERJQl9CTEVORF9TT0ZUTElHSFQgPT0gYmxlbmRUeXBlKSB7DQotICAgICAgICBibGVuZF9tb2RlID0ga0NHQmxlbmRNb2RlSGFyZExpZ2h0Ow0KLSAgICB9IGVsc2UgaWYgKGJsZW5kVHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEUgJiYgYmxlbmRUeXBlIDw9IEZYRElCX0JMRU5EX0xVTUlOT1NJVFkpIHsNCi0gICAgICAgIGJsZW5kX21vZGUgPSBibGVuZFR5cGUgLSA5Ow0KLSAgICB9IGVsc2UgaWYgKGJsZW5kVHlwZSA+IEZYRElCX0JMRU5EX0xVTUlOT1NJVFkgfHwgYmxlbmRUeXBlIDwgMCkgew0KLSAgICAgICAgYmxlbmRfbW9kZSA9IGtDR0JsZW5kTW9kZU5vcm1hbDsNCi0gICAgfQ0KLSAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoX2NvbnRleHQsIChDR0JsZW5kTW9kZSlibGVuZF9tb2RlKTsNCi0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKF9jb250ZXh0LCByZWN0X3VzciwgaW1hZ2UpOw0KLSAgICBDR0ltYWdlUmVsZWFzZShpbWFnZSk7DQotICAgIENHQ29udGV4dFJlbGVhc2UoY3R4KTsNCi0gICAgaWYgKHBCaXRtYXAxICE9IHBCaXRtYXApIHsNCi0gICAgICAgIGRlbGV0ZSBwQml0bWFwMTsNCi0gICAgfQ0KLSAgICBSZXN0b3JlU3RhdGUoRkFMU0UpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDRlhfUXVhcnR6RGV2aWNlRHJpdmVyOjpTdHJldGNoRElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqICAgICAgcEJpdG1hcCwNCi0gICAgICAgIEZYX0FSR0IgICAgICAgICAgICAgICAgICAgICBhcmdiLA0KLSAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfbGVmdCwNCi0gICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3RvcCwNCi0gICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3dpZHRoLA0KLSAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfaGVpZ2h0LA0KLSAgICAgICAgY29uc3QgRlhfUkVDVCogICAgICAgICAgICAgIGNsaXBSZWN0LA0KLSAgICAgICAgRlhfRFdPUkQgICAgICAgICAgICAgICAgICAgIGZsYWdzLA0KLSAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhRmxhZwkgICAsDQotICAgICAgICB2b2lkKiAgICAgICAgICAgICAgICAgICAgICAgaWNjVHJhbnNmb3JtICwNCi0gICAgICAgIGludAkJCQkJCQlibGVuZF90eXBlKQ0KLXsNCi0gICAgU2F2ZVN0YXRlKCk7DQotICAgIGlmIChjbGlwUmVjdCkgew0KLSAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKF9jb250ZXh0KTsNCi0gICAgICAgIENHUmVjdCByZWN0X2NsaXAgPSBDR1JlY3RNYWtlKGNsaXBSZWN0LT5sZWZ0LCBjbGlwUmVjdC0+dG9wLCBjbGlwUmVjdC0+V2lkdGgoKSwgY2xpcFJlY3QtPkhlaWdodCgpKTsNCi0gICAgICAgIHJlY3RfY2xpcCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKHJlY3RfY2xpcCwgX2ZveGl0RGV2aWNlMlVzZXIpOw0KLSAgICAgICAgQ0dDb250ZXh0QWRkUmVjdChfY29udGV4dCwgcmVjdF9jbGlwKTsNCi0gICAgICAgIENHQ29udGV4dENsaXAoX2NvbnRleHQpOw0KLSAgICB9DQotICAgIENHUmVjdCByZWN0ID0gQ0dSZWN0TWFrZShkZXN0X2xlZnQsIGRlc3RfdG9wLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCk7DQotICAgIHJlY3QgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShyZWN0LCBfZm94aXREZXZpY2UyVXNlcik7DQotICAgIGlmIChGWERJQl9CSUNVQklDX0lOVEVSUE9MID09IGZsYWdzKSB7DQotICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShfY29udGV4dCwga0NHSW50ZXJwb2xhdGlvbkhpZ2gpOw0KLSAgICB9IGVsc2UgaWYgKEZYRElCX0RPV05TQU1QTEUgPT0gZmxhZ3MpIHsNCi0gICAgICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5KF9jb250ZXh0LCBrQ0dJbnRlcnBvbGF0aW9uTm9uZSk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShfY29udGV4dCwga0NHSW50ZXJwb2xhdGlvbk1lZGl1bSk7DQotICAgIH0NCi0gICAgQ0dfU2V0SW1hZ2VUcmFuc2Zvcm0oZGVzdF9sZWZ0LCBkZXN0X3RvcCwgZGVzdF93aWR0aCwgZGVzdF9oZWlnaHQpOw0KLSAgICBDRlhfRElCaXRtYXAqIHBCaXRtYXAxID0gTlVMTDsNCi0gICAgaWYgKHBCaXRtYXAtPklzQWxwaGFNYXNrKCkpIHsNCi0gICAgICAgIGlmIChwQml0bWFwLT5HZXRCdWZmZXIoKSkgew0KLSAgICAgICAgICAgIHBCaXRtYXAxID0gKENGWF9ESUJpdG1hcCopcEJpdG1hcDsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcEJpdG1hcDEgPSBwQml0bWFwLT5DbG9uZSgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKE5VTEwgPT0gcEJpdG1hcDEpIHsNCi0gICAgICAgICAgICBSZXN0b3JlU3RhdGUoRkFMU0UpOw0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIENHRGF0YVByb3ZpZGVyUmVmIHBCaXRtYXBQcm92aWRlciA9IENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoTlVMTCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCaXRtYXAxLT5HZXRCdWZmZXIoKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCaXRtYXAxLT5HZXRQaXRjaCgpICogcEJpdG1hcDEtPkdldEhlaWdodCgpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7DQotICAgICAgICBDR0NvbG9yU3BhY2VSZWYgcENvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VHcmF5KCk7DQotICAgICAgICBDR0JpdG1hcEluZm8gYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lIHwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdDsNCi0gICAgICAgIENHSW1hZ2VSZWYgcEltYWdlID0gQ0dJbWFnZUNyZWF0ZShwQml0bWFwMS0+R2V0V2lkdGgoKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQml0bWFwMS0+R2V0SGVpZ2h0KCksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJpdG1hcDEtPkdldEJQUCgpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCaXRtYXAxLT5HZXRCUFAoKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQml0bWFwMS0+R2V0UGl0Y2goKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ29sb3JTcGFjZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXBJbmZvLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCaXRtYXBQcm92aWRlciwgTlVMTCwgdHJ1ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsNCi0gICAgICAgIENHQ29udGV4dENsaXBUb01hc2soX2NvbnRleHQsIHJlY3QsIHBJbWFnZSk7DQotICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoX2NvbnRleHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhBUkdCX1IoYXJnYikgLyAyNTUuZiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWEFSR0JfRyhhcmdiKSAvIDI1NS5mLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYQVJHQl9CKGFyZ2IpIC8gMjU1LmYsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhBUkdCX0EoYXJnYikgLyAyNTUuZik7DQotICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChfY29udGV4dCwgcmVjdCk7DQotICAgICAgICBDR0ltYWdlUmVsZWFzZShwSW1hZ2UpOw0KLSAgICAgICAgQ0dDb2xvclNwYWNlUmVsZWFzZShwQ29sb3JTcGFjZSk7DQotICAgICAgICBDR0RhdGFQcm92aWRlclJlbGVhc2UocEJpdG1hcFByb3ZpZGVyKTsNCi0gICAgICAgIGlmIChwQml0bWFwMSAhPSBwQml0bWFwKSB7DQotICAgICAgICAgICAgZGVsZXRlIHBCaXRtYXAxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgUmVzdG9yZVN0YXRlKEZBTFNFKTsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIGlmIChwQml0bWFwLT5HZXRCUFAoKSA8IDMyKSB7DQotICAgICAgICBwQml0bWFwMSA9IHBCaXRtYXAtPkNsb25lQ29udmVydChGWERJQl9SZ2IzMik7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZiAocEJpdG1hcC0+R2V0QnVmZmVyKCkpIHsNCi0gICAgICAgICAgICBwQml0bWFwMSA9IChDRlhfRElCaXRtYXAqKXBCaXRtYXA7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHBCaXRtYXAxID0gcEJpdG1hcC0+Q2xvbmUoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoTlVMTCA9PSBwQml0bWFwMSkgew0KLSAgICAgICAgUmVzdG9yZVN0YXRlKEZBTFNFKTsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAocEJpdG1hcDEtPkhhc0FscGhhKCkpIHsNCi0gICAgICAgIGlmIChwQml0bWFwMSA9PSBwQml0bWFwKSB7DQotICAgICAgICAgICAgcEJpdG1hcDEgPSBwQml0bWFwLT5DbG9uZSgpOw0KLSAgICAgICAgICAgIGlmICghcEJpdG1hcDEpIHsNCi0gICAgICAgICAgICAgICAgUmVzdG9yZVN0YXRlKEZBTFNFKTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHBCaXRtYXAxLT5HZXRIZWlnaHQoKTsgcm93ICsrKSB7DQotICAgICAgICAgICAgRlhfTFBCWVRFIHBTY2FubGluZSA9IChGWF9MUEJZVEUpcEJpdG1hcDEtPkdldFNjYW5saW5lKHJvdyk7DQotICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcEJpdG1hcDEtPkdldFdpZHRoKCk7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICBwU2NhbmxpbmVbMF0gPSAoRlhfQllURSkocFNjYW5saW5lWzBdICogcFNjYW5saW5lWzNdIC8gMjU1LmYgKyAuNWYpOw0KLSAgICAgICAgICAgICAgICBwU2NhbmxpbmVbMV0gPSAoRlhfQllURSkocFNjYW5saW5lWzFdICogcFNjYW5saW5lWzNdIC8gMjU1LmYgKyAuNWYpOw0KLSAgICAgICAgICAgICAgICBwU2NhbmxpbmVbMl0gPSAoRlhfQllURSkocFNjYW5saW5lWzJdICogcFNjYW5saW5lWzNdIC8gMjU1LmYgKyAuNWYpOw0KLSAgICAgICAgICAgICAgICBwU2NhbmxpbmUgKz0gNDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgQ0dDb250ZXh0UmVmIGN0eCA9IGNyZWF0ZUNvbnRleHRXaXRoQml0bWFwKHBCaXRtYXAxKTsNCi0gICAgQ0dJbWFnZVJlZiBpbWFnZSA9IENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGN0eCk7DQotICAgIENHQ29udGV4dERyYXdJbWFnZShfY29udGV4dCwgcmVjdCwgaW1hZ2UpOw0KLSAgICBDR0ltYWdlUmVsZWFzZShpbWFnZSk7DQotICAgIENHQ29udGV4dFJlbGVhc2UoY3R4KTsNCi0gICAgaWYgKHBCaXRtYXAxICE9IHBCaXRtYXApIHsNCi0gICAgICAgIGRlbGV0ZSBwQml0bWFwMTsNCi0gICAgfQ0KLSAgICBSZXN0b3JlU3RhdGUoRkFMU0UpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDRlhfUXVhcnR6RGV2aWNlRHJpdmVyOjpDR19EcmF3R2x5cFJ1bihpbnQgICAgICAgICAgICAgICAgICAgICAgICBuQ2hhcnMsDQotICAgICAgICBjb25zdCBGWFRFWFRfQ0hBUlBPUyogICAgICBwQ2hhclBvcywNCi0gICAgICAgIENGWF9Gb250KiAgICAgICAgICAgICAgICAgIHBGb250LA0KLSAgICAgICAgQ0ZYX0ZvbnRDYWNoZSogICAgICAgICAgICAgcENhY2hlLA0KLSAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogICAgcEdseXBoTWF0cml4LA0KLSAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogICAgcE9iamVjdDJEZXZpY2UsDQotICAgICAgICBGWF9GTE9BVCAgICAgICAgICAgICAgICAgICBmb250X3NpemUsDQotICAgICAgICBGWF9EV09SRCAgICAgICAgICAgICAgICAgICBhcmdiLA0KLSAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGFfZmxhZywNCi0gICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICAgICAgIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBpZiAobkNoYXJzID09IDApIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIENRdWFydHoyRCYgcXVhcnR6MmQgPSAoKENBcHBsZVBsYXRmb3JtICopIENGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+X3F1YXJ0ejJkOw0KLSAgICBpZiAoIXBGb250LT5tX3BQbGF0Zm9ybUZvbnQpIHsNCi0gICAgICAgIGlmIChwRm9udC0+R2V0UHNOYW1lKCkgPT0gQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbCgiREZIZWlTdGQtVzUiKSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIHBGb250LT5tX3BQbGF0Zm9ybUZvbnQgPSBxdWFydHoyZC5DcmVhdGVGb250KHBGb250LT5tX3BGb250RGF0YSwgcEZvbnQtPm1fZHdTaXplKTsNCi0gICAgICAgIGlmIChOVUxMID09IHBGb250LT5tX3BQbGF0Zm9ybUZvbnQpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgQ0ZYX0ZpeGVkQnVmR3JvdzxGWF9XT1JELCAzMj4gZ2x5cGhfaW5kaWNlcyhuQ2hhcnMpOw0KLSAgICBDRlhfRml4ZWRCdWZHcm93PENHUG9pbnQsIDMyPiBnbHlwaF9wb3NpdGlvbnMobkNoYXJzKTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuQ2hhcnM7IGkrKyApIHsNCi0gICAgICAgIGdseXBoX2luZGljZXNbaV0gPSBwQ2hhclBvc1tpXS5tX0V4dEdJRDsNCi0gICAgICAgIGdseXBoX3Bvc2l0aW9uc1tpXS54ID0gcENoYXJQb3NbaV0ubV9PcmlnaW5YOw0KLSAgICAgICAgZ2x5cGhfcG9zaXRpb25zW2ldLnkgPSBwQ2hhclBvc1tpXS5tX09yaWdpblk7DQotICAgIH0NCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCB0ZXh0X21hdHJpeDsNCi0gICAgaWYgKHBPYmplY3QyRGV2aWNlKSB7DQotICAgICAgICB0ZXh0X21hdHJpeC5Db25jYXQoKnBPYmplY3QyRGV2aWNlKTsNCi0gICAgfQ0KLSAgICBDR0FmZmluZVRyYW5zZm9ybSBtYXRyaXhfY2cgPSBDR0FmZmluZVRyYW5zZm9ybU1ha2UodGV4dF9tYXRyaXguYSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9tYXRyaXguYiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9tYXRyaXguYywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9tYXRyaXguZCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9tYXRyaXguZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9tYXRyaXguZik7DQotICAgIG1hdHJpeF9jZyA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeF9jZywgX2ZveGl0RGV2aWNlMlVzZXIpOw0KLSAgICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KF9jb250ZXh0LCBtYXRyaXhfY2cpOw0KLSAgICBDR0NvbnRleHRTZXRGb250KF9jb250ZXh0LCAoQ0dGb250UmVmKXBGb250LT5tX3BQbGF0Zm9ybUZvbnQpOw0KLSAgICBDR0NvbnRleHRTZXRGb250U2l6ZShfY29udGV4dCwgRlhTWVNfZmFicyhmb250X3NpemUpKTsNCi0gICAgRlhfSU5UMzIgYSwgciwgZywgYjsNCi0gICAgQXJnYkRlY29kZShhcmdiLCBhLCByLCBnLCBiKTsNCi0gICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKF9jb250ZXh0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciAvIDI1NS5mLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyAvIDI1NS5mLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiAvIDI1NS5mLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSAvIDI1NS5mKTsNCi0gICAgU2F2ZVN0YXRlKCk7DQotICAgIGlmIChwR2x5cGhNYXRyaXgpIHsNCi0gICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIGN0bSA9IENHQ29udGV4dEdldENUTShfY29udGV4dCk7DQotICAgICAgICBDR1BvaW50IG9yaWdpbiA9IENHUG9pbnRNYWtlKCBnbHlwaF9wb3NpdGlvbnNbMF0ueCwgIGdseXBoX3Bvc2l0aW9uc1swXS55KTsNCi0gICAgICAgIG9yaWdpbiA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShvcmlnaW4sIG1hdHJpeF9jZyk7DQotICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oX2NvbnRleHQsIG9yaWdpbi54LCBvcmlnaW4ueSk7DQotICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBnbHlwaF9tYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybU1ha2UocEdseXBoTWF0cml4LT5hLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEdseXBoTWF0cml4LT5iLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEdseXBoTWF0cml4LT5jLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEdseXBoTWF0cml4LT5kLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEdseXBoTWF0cml4LT5lLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEdseXBoTWF0cml4LT5mKTsNCi0gICAgICAgIGlmIChfZm94aXREZXZpY2UyVXNlci5kIDwgMCkgew0KLSAgICAgICAgICAgIGdseXBoX21hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KGdseXBoX21hdHJpeCk7DQotICAgICAgICB9DQotICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oX2NvbnRleHQsIGdseXBoX21hdHJpeCk7DQotICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oX2NvbnRleHQsIC1vcmlnaW4ueCwgLW9yaWdpbi55KTsNCi0gICAgfQ0KLSAgICBDR0NvbnRleHRTaG93R2x5cGhzQXRQb3NpdGlvbnMoX2NvbnRleHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ0dHbHlwaCopZ2x5cGhfaW5kaWNlcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoX3Bvc2l0aW9ucywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5DaGFycyk7DQotICAgIFJlc3RvcmVTdGF0ZShGQUxTRSk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENGWF9RdWFydHpEZXZpY2VEcml2ZXI6OkRyYXdEZXZpY2VUZXh0KGludCAgICAgICAgICAgICAgICAgICAgICBuQ2hhcnMsDQotICAgICAgICBjb25zdCBGWFRFWFRfQ0hBUlBPUyogICAgcENoYXJQb3MsDQotICAgICAgICBDRlhfRm9udCogICAgICAgICAgICAgICAgcEZvbnQsDQotICAgICAgICBDRlhfRm9udENhY2hlKiAgICAgICAgICAgcENhY2hlLA0KLSAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogIHBPYmplY3QyRGV2aWNlLA0KLSAgICAgICAgRlhfRkxPQVQgICAgICAgICAgICAgICAgIGZvbnRfc2l6ZSwNCi0gICAgICAgIEZYX0RXT1JEICAgICAgICAgICAgICAgICBjb2xvciwNCi0gICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICBhbHBoYV9mbGFnICAgICAgICwNCi0gICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICAgICBwSWNjVHJhbnNmb3JtKQ0KLXsNCi0gICAgaWYgKE5VTEwgPT0gcEZvbnQgfHwgTlVMTCA9PSBfY29udGV4dCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYX0JPT0wgYkJvbGQgPSBwRm9udC0+SXNCb2xkKCk7DQotICAgIGlmICghYkJvbGQgJiYgcEZvbnQtPkdldFN1YnN0Rm9udCgpICYmDQotICAgICAgICAgICAgcEZvbnQtPkdldFN1YnN0Rm9udCgpLT5tX1dlaWdodCA+PSA1MDAgJiYNCi0gICAgICAgICAgICBwRm9udC0+R2V0U3Vic3RGb250KCktPm1fV2VpZ2h0IDw9IDYwMCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIFNhdmVTdGF0ZSgpOw0KLSAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoX2NvbnRleHQsIGtDR1RleHRGaWxsQ2xpcCk7DQotICAgIEZYX0JPT0wgcmV0ID0gRkFMU0U7DQotICAgIEZYX0lOVDMyIGkgPSAwOw0KLSAgICB3aGlsZSAoaSA8IG5DaGFycykgew0KLSAgICAgICAgaWYgKHBDaGFyUG9zW2ldLm1fYkdseXBoQWRqdXN0IHx8IGZvbnRfc2l6ZSA8IDApIHsNCi0gICAgICAgICAgICBpZiAoaSA+IDApIHsNCi0gICAgICAgICAgICAgICAgcmV0ID0gQ0dfRHJhd0dseXBSdW4oaSwgcENoYXJQb3MsIHBGb250LCBwQ2FjaGUsIE5VTEwsIHBPYmplY3QyRGV2aWNlLCBmb250X3NpemUsIGNvbG9yLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtKTsNCi0gICAgICAgICAgICAgICAgaWYgKCFyZXQpIHsNCi0gICAgICAgICAgICAgICAgICAgIFJlc3RvcmVTdGF0ZShGQUxTRSk7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNvbnN0IEZYVEVYVF9DSEFSUE9TKiBjaGFyX3BvcyA9IHBDaGFyUG9zICsgaTsNCi0gICAgICAgICAgICBDRlhfQWZmaW5lTWF0cml4IGdscGh5X21hdHJpeDsNCi0gICAgICAgICAgICBpZiAoZm9udF9zaXplIDwgMCkgew0KLSAgICAgICAgICAgICAgICBnbHBoeV9tYXRyaXguQ29uY2F0KC0xLCAwLCAwLCAtMSwgMCwgMCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChjaGFyX3Bvcy0+bV9iR2x5cGhBZGp1c3QpIHsNCi0gICAgICAgICAgICAgICAgZ2xwaHlfbWF0cml4LkNvbmNhdChjaGFyX3Bvcy0+bV9BZGp1c3RNYXRyaXhbMF0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl9wb3MtPm1fQWRqdXN0TWF0cml4WzFdLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJfcG9zLT5tX0FkanVzdE1hdHJpeFsyXSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX3Bvcy0+bV9BZGp1c3RNYXRyaXhbM10sIDAsIDApOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXQgPSBDR19EcmF3R2x5cFJ1bigxLCBjaGFyX3BvcywgcEZvbnQsIHBDYWNoZSwgJmdscGh5X21hdHJpeCwgcE9iamVjdDJEZXZpY2UsIGZvbnRfc2l6ZSwgY29sb3IsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOw0KLSAgICAgICAgICAgIGlmICghcmV0KSB7DQotICAgICAgICAgICAgICAgIFJlc3RvcmVTdGF0ZShGQUxTRSk7DQotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGkgKys7DQotICAgICAgICAgICAgcENoYXJQb3MgKz0gaTsNCi0gICAgICAgICAgICBuQ2hhcnMgLT0gaTsNCi0gICAgICAgICAgICBpID0gMDsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaSArKzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoaSA+IDApIHsNCi0gICAgICAgIHJldCA9IENHX0RyYXdHbHlwUnVuKGksIHBDaGFyUG9zLCBwRm9udCwgcENhY2hlLCBOVUxMLCBwT2JqZWN0MkRldmljZSwgZm9udF9zaXplLCBjb2xvciwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSk7DQotICAgIH0NCi0gICAgUmVzdG9yZVN0YXRlKEZBTFNFKTsNCi0gICAgcmV0dXJuIHJldDsNCi19DQotdm9pZCBDRlhfUXVhcnR6RGV2aWNlRHJpdmVyOjpzZXRTdHJva2VJbmZvKGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogZ3JhcGhTdGF0ZSwgRlhfQVJHQiBhcmdiLCBGWF9GTE9BVCBsaW5lV2lkdGgpDQotew0KLSAgICBpZiAoTlVMTCA9PSBncmFwaFN0YXRlKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKF9jb250ZXh0LCBsaW5lV2lkdGgpOw0KLSAgICBDR0xpbmVDYXAgY2FwOw0KLSAgICBzd2l0Y2ggKGdyYXBoU3RhdGUtPm1fTGluZUNhcCkgew0KLSAgICAgICAgY2FzZSBDRlhfR3JhcGhTdGF0ZURhdGE6OkxpbmVDYXBSb3VuZDogew0KLSAgICAgICAgICAgICAgICBjYXAgPSBrQ0dMaW5lQ2FwUm91bmQ7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgQ0ZYX0dyYXBoU3RhdGVEYXRhOjpMaW5lQ2FwU3F1YXJlOiB7DQotICAgICAgICAgICAgICAgIGNhcCA9IGtDR0xpbmVDYXBTcXVhcmU7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgQ0ZYX0dyYXBoU3RhdGVEYXRhOjpMaW5lQ2FwQnV0dDoNCi0gICAgICAgIGRlZmF1bHQ6IHsNCi0gICAgICAgICAgICAgICAgY2FwID0ga0NHTGluZUNhcEJ1dHQ7DQotICAgICAgICAgICAgfQ0KLSAgICB9DQotICAgIENHQ29udGV4dFNldExpbmVDYXAoX2NvbnRleHQsIGNhcCk7DQotICAgIENHTGluZUpvaW4gam9pbjsNCi0gICAgc3dpdGNoIChncmFwaFN0YXRlLT5tX0xpbmVKb2luKSB7DQotICAgICAgICBjYXNlIENGWF9HcmFwaFN0YXRlRGF0YTo6TGluZUpvaW5Sb3VuZDogew0KLSAgICAgICAgICAgICAgICBqb2luID0ga0NHTGluZUpvaW5Sb3VuZDsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgY2FzZSBDRlhfR3JhcGhTdGF0ZURhdGE6OkxpbmVKb2luQmV2ZWw6IHsNCi0gICAgICAgICAgICAgICAgam9pbiA9IGtDR0xpbmVKb2luQmV2ZWw7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgQ0ZYX0dyYXBoU3RhdGVEYXRhOjpMaW5lSm9pbk1pdGVyOg0KLSAgICAgICAgZGVmYXVsdDogew0KLSAgICAgICAgICAgICAgICBqb2luID0ga0NHTGluZUpvaW5NaXRlcjsNCi0gICAgICAgICAgICB9DQotICAgIH0NCi0gICAgQ0dDb250ZXh0U2V0TGluZUpvaW4oX2NvbnRleHQsIGpvaW4pOw0KLSAgICBpZiAoZ3JhcGhTdGF0ZS0+bV9EYXNoQ291bnQpIHsNCi0jaWYgQ0dGTE9BVF9JU19ET1VCTEUNCi0gICAgICAgIENHRmxvYXQqIGRhc2hBcnJheSA9IG5ldyBDR0Zsb2F0W2dyYXBoU3RhdGUtPm1fRGFzaENvdW50XTsNCi0gICAgICAgIGlmICghZGFzaEFycmF5KSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGdyYXBoU3RhdGUtPm1fRGFzaENvdW50OyArK2luZGV4KSB7DQotICAgICAgICAgICAgZGFzaEFycmF5W2luZGV4XSA9IGdyYXBoU3RhdGUtPm1fRGFzaEFycmF5W2luZGV4XTsNCi0gICAgICAgIH0NCi0jZWxzZQ0KLSAgICAgICAgQ0dGbG9hdCogZGFzaEFycmF5ID0gKENHRmxvYXQqKWdyYXBoU3RhdGUtPm1fRGFzaEFycmF5Ow0KLSNlbmRpZg0KLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZURhc2goX2NvbnRleHQsIGdyYXBoU3RhdGUtPm1fRGFzaFBoYXNlLCBkYXNoQXJyYXksIGdyYXBoU3RhdGUtPm1fRGFzaENvdW50KTsNCi0jaWYgQ0dGTE9BVF9JU19ET1VCTEUNCi0gICAgICAgIGRlbGV0ZVtdIGRhc2hBcnJheTsNCi0jZW5kaWYNCi0gICAgfQ0KLSAgICBGWF9JTlQzMiBhLCByLCBnLCBiOw0KLSAgICBBcmdiRGVjb2RlKGFyZ2IsIGEsIHIsIGcsIGIpOw0KLSAgICBDR0NvbnRleHRTZXRSR0JTdHJva2VDb2xvcihfY29udGV4dCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciAvIDI1NS5mLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnIC8gMjU1LmYsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgLyAyNTUuZiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSAvIDI1NS5mKTsNCi19DQotdm9pZCBDRlhfUXVhcnR6RGV2aWNlRHJpdmVyOjpzZXRGaWxsSW5mbyhGWF9BUkdCIGFyZ2IpDQotew0KLSAgICBGWF9JTlQzMiBhLCByLCBnLCBiOw0KLSAgICBBcmdiRGVjb2RlKGFyZ2IsIGEsIHIsIGcsIGIpOw0KLSAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoX2NvbnRleHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIC8gMjU1LmYsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnIC8gMjU1LmYsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIC8gMjU1LmYsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIC8gMjU1LmYpOw0KLX0NCi12b2lkIENGWF9RdWFydHpEZXZpY2VEcml2ZXI6OnNldFBhdGhUb0NvbnRleHQoY29uc3QgQ0ZYX1BhdGhEYXRhKiBwYXRoRGF0YSkNCi17DQotICAgIEZYX0lOVDMyIGNvdW50ID0gcGF0aERhdGEtPkdldFBvaW50Q291bnQoKTsNCi0gICAgRlhfUEFUSFBPSU5UKiBwb2ludHMgPSBwYXRoRGF0YS0+R2V0UG9pbnRzKCk7DQotICAgIENHQ29udGV4dEJlZ2luUGF0aChfY29udGV4dCk7DQotICAgIGZvciAoRlhfSU5UMzIgaSA9IDA7IGkgPCBjb3VudDsgaSArKykgew0KLSAgICAgICAgc3dpdGNoIChwb2ludHNbaV0ubV9GbGFnICYgRlhQVF9UWVBFKSB7DQotICAgICAgICAgICAgY2FzZSBGWFBUX01PVkVUTzoNCi0gICAgICAgICAgICAgICAgQ0dDb250ZXh0TW92ZVRvUG9pbnQoX2NvbnRleHQsIHBvaW50c1tpXS5tX1BvaW50WCwgcG9pbnRzW2ldLm1fUG9pbnRZKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSBGWFBUX0xJTkVUTzoNCi0gICAgICAgICAgICAgICAgQ0dDb250ZXh0QWRkTGluZVRvUG9pbnQoX2NvbnRleHQsIHBvaW50c1tpXS5tX1BvaW50WCwgcG9pbnRzW2ldLm1fUG9pbnRZKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSBGWFBUX0JFWklFUlRPOiB7DQotICAgICAgICAgICAgICAgICAgICBDR0NvbnRleHRBZGRDdXJ2ZVRvUG9pbnQoX2NvbnRleHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2ldLm1fUG9pbnRYLCBwb2ludHNbaV0ubV9Qb2ludFksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2kgKyAxXS5tX1BvaW50WCwgcG9pbnRzW2kgKyAxXS5tX1BvaW50WSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbaSArIDJdLm1fUG9pbnRYLCBwb2ludHNbaSArIDJdLm1fUG9pbnRZKTsNCi0gICAgICAgICAgICAgICAgICAgIGkgKz0gMjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBvaW50c1tpXS5tX0ZsYWcgJiBGWFBUX0NMT1NFRklHVVJFKSB7DQotICAgICAgICAgICAgQ0dDb250ZXh0Q2xvc2VQYXRoKF9jb250ZXh0KTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi12b2lkIENGWF9RdWFydHpEZXZpY2VEcml2ZXI6OkNHX1NldEltYWdlVHJhbnNmb3JtKGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwNCi0gICAgICAgIENHUmVjdCogcmVjdCApDQotew0KLSAgICBpbnQgZmxpcF95ID0gX2ZveGl0RGV2aWNlMlVzZXIuZCAqIGRlc3RfaGVpZ2h0IDwgMCA/IDEgOiAtMTsNCi0gICAgaW50IGZsaXBfeCA9IF9mb3hpdERldmljZTJVc2VyLmEgKiBkZXN0X3dpZHRoID4gMCA/IDEgOiAtMTsNCi0gICAgaWYgKGZsaXBfeSA8IDAgfHwgZmxpcF94IDwgMCkgew0KLSAgICAgICAgaWYgKGRlc3RfaGVpZ2h0IDwgMCkgew0KLSAgICAgICAgICAgIGRlc3RfaGVpZ2h0ID0gLWRlc3RfaGVpZ2h0Ow0KLSAgICAgICAgICAgIGRlc3RfdG9wIC09IGRlc3RfaGVpZ2h0Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgQ0dSZWN0IHJ0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oQ0dSZWN0TWFrZShkZXN0X2xlZnQsIGRlc3RfdG9wLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCksIF9mb3hpdERldmljZTJVc2VyKTsNCi0gICAgICAgIENHRmxvYXQgb2Zmc2V0X3ggPSAocnQub3JpZ2luLngpICsgcnQuc2l6ZS53aWR0aCAvIDIuZiwNCi0gICAgICAgICAgICAgICAgb2Zmc2V0X3kgPSAocnQub3JpZ2luLnkpICsgcnQuc2l6ZS5oZWlnaHQgLyAyLmY7DQotICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5Ow0KLSAgICAgICAgdHJhbnNmb3JtID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQodHJhbnNmb3JtLCBDR0FmZmluZVRyYW5zZm9ybU1ha2UoMSwgMCwgMCwgMSwgLW9mZnNldF94LCAtb2Zmc2V0X3kpKTsNCi0gICAgICAgIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KHRyYW5zZm9ybSwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKGZsaXBfeCwgMCwgMCwgZmxpcF95LCAwLCAwKSk7DQotICAgICAgICB0cmFuc2Zvcm0gPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdCh0cmFuc2Zvcm0sIENHQWZmaW5lVHJhbnNmb3JtTWFrZSgxLCAwLCAwLCAxLCBvZmZzZXRfeCwgb2Zmc2V0X3kpKTsNCi0gICAgICAgIENHQ29udGV4dENvbmNhdENUTShfY29udGV4dCwgdHJhbnNmb3JtKTsNCi0gICAgICAgIGlmIChyZWN0KSB7DQotICAgICAgICAgICAgKnJlY3QgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybSgqcmVjdCwgdHJhbnNmb3JtKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi12b2lkIENGWF9RdWFydHpEZXZpY2VEcml2ZXI6OkNsZWFyRHJpdmVyKCkNCi17DQotICAgIGlmIChOVUxMID09IF9jb250ZXh0KSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3NhdmVDb3VudDsgKytpKSB7DQotICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKF9jb250ZXh0KTsNCi0gICAgfQ0KLSAgICBtX3NhdmVDb3VudCA9IDA7DQotICAgIGlmIChfY29udGV4dCkgew0KLSAgICAgICAgQ0dDb250ZXh0UmVsZWFzZShfY29udGV4dCk7DQotICAgIH0NCi19DQotQ0ZYX1F1YXJ0ekRldmljZTo6Q0ZYX1F1YXJ0ekRldmljZSgpDQotew0KLSAgICBtX2JPd25lZEJpdG1hcCA9IEZBTFNFOw0KLSAgICBtX3BDb250ZXh0ID0gTlVMTDsNCi19DQotQ0ZYX1F1YXJ0ekRldmljZTo6fkNGWF9RdWFydHpEZXZpY2UoKQ0KLXsNCi0gICAgaWYgKG1fcENvbnRleHQpIHsNCi0gICAgICAgIENHQ29udGV4dFJlbGVhc2UobV9wQ29udGV4dCk7DQotICAgIH0NCi0gICAgaWYgKEdldEJpdG1hcCgpICYmIG1fYk93bmVkQml0bWFwKSB7DQotICAgICAgICBkZWxldGUgR2V0Qml0bWFwKCk7DQotICAgIH0NCi19DQotQ0dDb250ZXh0UmVmIENGWF9RdWFydHpEZXZpY2U6OkdldENvbnRleHQoKQ0KLXsNCi0gICAgcmV0dXJuIG1fcENvbnRleHQ7DQotfQ0KLUZYX0JPT0wgQ0ZYX1F1YXJ0ekRldmljZTo6QXR0YWNoKENHQ29udGV4dFJlZiBjb250ZXh0LCBGWF9JTlQzMiBuRGV2aWNlQ2xhc3MpDQotew0KLSAgICBpZiAobV9wQ29udGV4dCkgew0KLSAgICAgICAgQ0dDb250ZXh0UmVsZWFzZShtX3BDb250ZXh0KTsNCi0gICAgfQ0KLSAgICBtX3BDb250ZXh0ID0gY29udGV4dDsNCi0gICAgQ0dDb250ZXh0UmV0YWluKG1fcENvbnRleHQpOw0KLSAgICBJRlhfUmVuZGVyRGV2aWNlRHJpdmVyKiBwRHJpdmVyID0gRlhfTkVXIENGWF9RdWFydHpEZXZpY2VEcml2ZXIobV9wQ29udGV4dCwgbkRldmljZUNsYXNzKTsNCi0gICAgaWYgKCFwRHJpdmVyKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgU2V0RGV2aWNlRHJpdmVyKHBEcml2ZXIpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDRlhfUXVhcnR6RGV2aWNlOjpBdHRhY2goQ0ZYX0RJQml0bWFwKiBwQml0bWFwKQ0KLXsNCi0gICAgU2V0Qml0bWFwKHBCaXRtYXApOw0KLSAgICBtX3BDb250ZXh0ID0gY3JlYXRlQ29udGV4dFdpdGhCaXRtYXAocEJpdG1hcCk7DQotICAgIGlmIChOVUxMID09IG1fcENvbnRleHQpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBJRlhfUmVuZGVyRGV2aWNlRHJpdmVyKiBwRHJpdmVyID0gRlhfTkVXIENGWF9RdWFydHpEZXZpY2VEcml2ZXIobV9wQ29udGV4dCwgRlhEQ19ESVNQTEFZKTsNCi0gICAgaWYgKCFwRHJpdmVyKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgU2V0RGV2aWNlRHJpdmVyKHBEcml2ZXIpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDRlhfUXVhcnR6RGV2aWNlOjpDcmVhdGUoRlhfSU5UMzIgd2lkdGgsIEZYX0lOVDMyIGhlaWdodCwgRlhESUJfRm9ybWF0IGZvcm1hdCkNCi17DQotICAgIGlmICgoRlhfQllURSlmb3JtYXQgPCAzMikgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIENGWF9ESUJpdG1hcCogcEJpdG1hcCA9IEZYX05FVyBDRlhfRElCaXRtYXA7DQotICAgIGlmICghcEJpdG1hcCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmICghcEJpdG1hcC0+Q3JlYXRlKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCkpIHsNCi0gICAgICAgIGRlbGV0ZSBwQml0bWFwOw0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fYk93bmVkQml0bWFwID0gVFJVRTsNCi0gICAgcmV0dXJuIEF0dGFjaChwQml0bWFwKTsNCi19DQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfZXh0LmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiCisjaW5jbHVkZSAiLi4vYWdnL2luY2x1ZGUvZnhmeF9hZ2dfY2xpcF9saWFuZ19iYXJza3kuaCIKKyNpbmNsdWRlICIuLi9nZS90ZXh0X2ludC5oIgorI2luY2x1ZGUgIi4uL2RpYi9kaWJfaW50LmgiCisjaW5jbHVkZSAiLi4vYWdnL2luY2x1ZGUvZnhfYWdnX2RyaXZlci5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9mcmVldHlwZS5oIgorI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXworI2luY2x1ZGUgImFwcGxlX2ludC5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZV9hcHBsZS5oIgorI2lmbmRlZiBDR0ZMT0FUX0lTX0RPVUJMRQorI2Vycm9yIEV4cGVjdGVkIENHRkxPQVRfSVNfRE9VQkxFIHRvIGJlIGRlZmluZWQgYnkgQ29yZUdyYXBoaWNzIGhlYWRlcnMKKyNlbmRpZgordm9pZCogQ1F1YXJ0ejJEOjpjcmVhdGVHcmFwaGljcyhDRlhfRElCaXRtYXAqIHBCaXRtYXApCit7CisgICAgaWYgKCFwQml0bWFwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDR0JpdG1hcEluZm8gYm1wSW5mbyA9IGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlOworICAgIHN3aXRjaCAocEJpdG1hcC0+R2V0Rm9ybWF0KCkpIHsKKyAgICAgICAgY2FzZSBGWERJQl9SZ2IzMjoKKyAgICAgICAgICAgIGJtcEluZm8gfD0ga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3Q7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGWERJQl9BcmdiOgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBDR0JpdG1hcENvbnRleHRDcmVhdGUocEJpdG1hcC0+R2V0QnVmZmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwQml0bWFwLT5HZXRXaWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJpdG1hcC0+R2V0SGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJpdG1hcC0+R2V0UGl0Y2goKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBibXBJbmZvKTsKKyAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9yU3BhY2UpOworICAgIHJldHVybiBjb250ZXh0OworfQordm9pZCBDUXVhcnR6MkQ6OmRlc3Ryb3lHcmFwaGljcyh2b2lkKiBncmFwaGljcykKK3sKKyAgICBpZiAoZ3JhcGhpY3MpIHsKKyAgICAgICAgQ0dDb250ZXh0UmVsZWFzZSgoQ0dDb250ZXh0UmVmKSBncmFwaGljcyk7CisgICAgfQorfQordm9pZCogQ1F1YXJ0ejJEOjpDcmVhdGVGb250KEZYX0xQQ0JZVEUgcEZvbnREYXRhLCBGWF9EV09SRCBkd0ZvbnRTaXplKQoreworICAgIENHRGF0YVByb3ZpZGVyUmVmIHBEYXRhUHJvdmlkZXIgPSBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKE5VTEwsIHBGb250RGF0YSwgKHNpemVfdClkd0ZvbnRTaXplLCBOVUxMKTsKKyAgICBpZiAoTlVMTCA9PSBwRGF0YVByb3ZpZGVyKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDR0ZvbnRSZWYgcENHRm9udCA9IENHRm9udENyZWF0ZVdpdGhEYXRhUHJvdmlkZXIocERhdGFQcm92aWRlcik7CisgICAgQ0dEYXRhUHJvdmlkZXJSZWxlYXNlKHBEYXRhUHJvdmlkZXIpOworICAgIHJldHVybiBwQ0dGb250OworfQordm9pZCBDUXVhcnR6MkQ6OkRlc3Ryb3lGb250KHZvaWQqIHBGb250KQoreworICAgIENHRm9udFJlbGVhc2UoKENHRm9udFJlZilwRm9udCk7Cit9Cit2b2lkIENRdWFydHoyRDo6c2V0R3JhcGhpY3NUZXh0TWF0cml4KHZvaWQqIGdyYXBoaWNzLCBDRlhfQWZmaW5lTWF0cml4KiBtYXRyaXgpCit7CisgICAgaWYgKCFncmFwaGljcyB8fCAhbWF0cml4KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSAoQ0dDb250ZXh0UmVmKSBncmFwaGljczsKKyAgICBDR0Zsb2F0IHR5ID0gQ0dCaXRtYXBDb250ZXh0R2V0SGVpZ2h0KGNvbnRleHQpIC0gbWF0cml4LT5mOworICAgIENHQ29udGV4dFNldFRleHRNYXRyaXgoY29udGV4dCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKG1hdHJpeC0+YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5KSk7Cit9CitGWF9CT09MIENRdWFydHoyRDo6ZHJhd0dyYXBoaWNzU3RyaW5nKHZvaWQqICAgICAgICAgICAgICAgICBncmFwaGljcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgICAgIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUICAgICAgICAgICAgICBmb250U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfV09SRCogICAgICAgICAgICAgIGdseXBoSW5kaWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dQb2ludCogICAgICAgICAgIGdseXBoUG9zaXRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9JTlQzMiAgICAgICAgICAgICAgY2hhcnNDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQVJHQiAgICAgICAgICAgICAgIGFyZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9BZmZpbmVNYXRyaXgqICAgICBtYXRyaXggKQoreworICAgIGlmICghZ3JhcGhpY3MpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IChDR0NvbnRleHRSZWYpIGdyYXBoaWNzOworICAgIENHQ29udGV4dFNldEZvbnQoY29udGV4dCwgKENHRm9udFJlZilmb250KTsKKyAgICBDR0NvbnRleHRTZXRGb250U2l6ZShjb250ZXh0LCBmb250U2l6ZSk7CisgICAgaWYgKG1hdHJpeCkgeworICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBtID0gQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChjb250ZXh0KTsKKyAgICAgICAgbSA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDR0FmZmluZVRyYW5zZm9ybU1ha2UobWF0cml4LT5hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgtPmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgtPmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+ZikpOworICAgICAgICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNvbnRleHQsIG0pOworICAgIH0KKyAgICBGWF9JTlQzMiBhLCByLCBnLCBiOworICAgIEFyZ2JEZWNvZGUoYXJnYiwgYSwgciwgZywgYik7CisgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgLyAyNTUuZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyAvIDI1NS5mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIC8gMjU1LmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgLyAyNTUuZik7CisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKKyNpZiBDR0ZMT0FUX0lTX0RPVUJMRQorICAgIENHUG9pbnQqIGdseXBoUG9zaXRpb25zQ0cgPSBuZXcgQ0dQb2ludFtjaGFyc0NvdW50XTsKKyAgICBpZiAoIWdseXBoUG9zaXRpb25zQ0cpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgY2hhcnNDb3VudDsgKytpbmRleCkgeworICAgICAgICBnbHlwaFBvc2l0aW9uc0NHW2luZGV4XS54ID0gZ2x5cGhQb3NpdGlvbnNbaW5kZXhdLng7CisgICAgICAgIGdseXBoUG9zaXRpb25zQ0dbaW5kZXhdLnkgPSBnbHlwaFBvc2l0aW9uc1tpbmRleF0ueTsKKyAgICB9CisjZWxzZQorICAgIENHUG9pbnQqIGdseXBoUG9zaXRpb25zQ0cgPSAoQ0dQb2ludCopZ2x5cGhQb3NpdGlvbnM7CisjZW5kaWYKKyAgICBDR0NvbnRleHRTaG93R2x5cGhzQXRQb3NpdGlvbnMoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENHR2x5cGggKikgZ2x5cGhJbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaFBvc2l0aW9uc0NHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc0NvdW50KTsKKyNpZiBDR0ZMT0FUX0lTX0RPVUJMRQorICAgIGRlbGV0ZVtdIGdseXBoUG9zaXRpb25zQ0c7CisjZW5kaWYKKyAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworICAgIHJldHVybiBUUlVFOworfQordm9pZCBDUXVhcnR6MkQ6OnNhdmVHcmFwaGljc1N0YXRlKHZvaWQgKiBncmFwaGljcykKK3sKKyAgICBpZiAoZ3JhcGhpY3MpIHsKKyAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZSgoQ0dDb250ZXh0UmVmKSBncmFwaGljcyk7CisgICAgfQorfQordm9pZCBDUXVhcnR6MkQ6OnJlc3RvcmVHcmFwaGljc1N0YXRlKHZvaWQgKiBncmFwaGljcykKK3sKKyAgICBpZiAoZ3JhcGhpY3MpIHsKKyAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZSgoQ0dDb250ZXh0UmVmKSBncmFwaGljcyk7CisgICAgfQorfQorc3RhdGljIENHQ29udGV4dFJlZiBjcmVhdGVDb250ZXh0V2l0aEJpdG1hcChDRlhfRElCaXRtYXAqIHBCaXRtYXApCit7CisgICAgaWYgKCFwQml0bWFwIHx8IHBCaXRtYXAtPklzQ215a0ltYWdlKCkgfHwgcEJpdG1hcC0+R2V0QlBQKCkgPCAzMikgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm8gPSBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZTsKKyAgICBpZiAocEJpdG1hcC0+SGFzQWxwaGEoKSkgeworICAgICAgICBiaXRtYXBJbmZvIHw9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3Q7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYml0bWFwSW5mbyB8PSBrQ0dJbWFnZUFscGhhTm9uZVNraXBGaXJzdDsKKyAgICB9CisgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IENHQml0bWFwQ29udGV4dENyZWF0ZShwQml0bWFwLT5HZXRCdWZmZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCaXRtYXAtPkdldFdpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwQml0bWFwLT5HZXRIZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwQml0bWFwLT5HZXRQaXRjaCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcEluZm8pOworICAgIENHQ29sb3JTcGFjZVJlbGVhc2UoY29sb3JTcGFjZSk7CisgICAgcmV0dXJuIGNvbnRleHQ7Cit9CitDRlhfUXVhcnR6RGV2aWNlRHJpdmVyOjpDRlhfUXVhcnR6RGV2aWNlRHJpdmVyKENHQ29udGV4dFJlZiBjb250ZXh0LCBGWF9JTlQzMiBkZXZpY2VDbGFzcykKK3sKKyAgICBtX3NhdmVDb3VudCA9IDA7CisgICAgX2NvbnRleHQJCT0gY29udGV4dDsKKyAgICBfZGV2aWNlQ2xhc3MJPSBkZXZpY2VDbGFzczsKKyAgICBDR0NvbnRleHRSZXRhaW4oX2NvbnRleHQpOworICAgIENHUmVjdCByID0gQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpOworICAgIF93aWR0aAk9IEZYU1lTX3JvdW5kKHIuc2l6ZS53aWR0aCk7CisgICAgX2hlaWdodAk9IEZYU1lTX3JvdW5kKHIuc2l6ZS5oZWlnaHQpOworICAgIF9yZW5kZXJDYXBzID0gRlhSQ19TT0ZUX0NMSVAgfCBGWFJDX0JMRU5EX01PREUgfAorICAgICAgICAgICAgICAgICAgRlhSQ19BTFBIQV9QQVRIIHwgRlhSQ19BTFBIQV9JTUFHRSB8CisgICAgICAgICAgICAgICAgICBGWFJDX0JJVF9NQVNLIHwgRlhSQ19BTFBIQV9NQVNLOworICAgIGlmIChfZGV2aWNlQ2xhc3MgIT0gRlhEQ19ESVNQTEFZKSB7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKF9jb250ZXh0KTsKKyAgICAgICAgaWYgKGltYWdlKSB7CisgICAgICAgICAgICBfcmVuZGVyQ2FwcyB8PSBGWFJDX0dFVF9CSVRTOworICAgICAgICAgICAgX3dpZHRoID0gQ0dJbWFnZUdldFdpZHRoKGltYWdlKTsKKyAgICAgICAgICAgIF9oZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKTsKKyAgICAgICAgICAgIENHSW1hZ2VBbHBoYUluZm8gYWxwaGFJbmZvID0gQ0dJbWFnZUdldEFscGhhSW5mbyhpbWFnZSk7CisgICAgICAgICAgICBpZiAoa0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCA9PSBhbHBoYUluZm8gfHwKKyAgICAgICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0ID09IGFscGhhSW5mbyB8fAorICAgICAgICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhT25seSA9PSBhbHBoYUluZm8pIHsKKyAgICAgICAgICAgICAgICBfcmVuZGVyQ2FwcyB8PSBGWFJDX0FMUEhBX09VVFBVVDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBDR0ltYWdlUmVsZWFzZShpbWFnZSk7CisgICAgfQorICAgIENHQWZmaW5lVHJhbnNmb3JtIGN0bSA9IENHQ29udGV4dEdldENUTShfY29udGV4dCk7CisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShfY29udGV4dCk7CisgICAgbV9zYXZlQ291bnQrKzsKKyAgICBpZiAoY3RtLmQgPj0gMCkgeworICAgICAgICBDR0Zsb2F0IG9mZnNldF94LCBvZmZzZXRfeTsKKyAgICAgICAgb2Zmc2V0X3ggPSBjdG0udHg7CisgICAgICAgIG9mZnNldF95ID0gY3RtLnR5OworICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oX2NvbnRleHQsIC1vZmZzZXRfeCwgLW9mZnNldF95KTsKKyAgICAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKF9jb250ZXh0LCBDR0FmZmluZVRyYW5zZm9ybU1ha2UoMSwgMCwgMCwgLTEsIG9mZnNldF94LCBfaGVpZ2h0ICsgb2Zmc2V0X3kpKTsKKyAgICB9CisgICAgX2ZveGl0RGV2aWNlMlVzZXIgPSBDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5OworICAgIF91c2VyMkZveGl0RGV2aWNlID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoX2ZveGl0RGV2aWNlMlVzZXIpOworfQorQ0ZYX1F1YXJ0ekRldmljZURyaXZlcjo6fkNGWF9RdWFydHpEZXZpY2VEcml2ZXIoKQoreworICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoX2NvbnRleHQpOworICAgIG1fc2F2ZUNvdW50LS07CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3NhdmVDb3VudDsgKytpKSB7CisgICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoX2NvbnRleHQpOworICAgIH0KKyAgICBpZiAoX2NvbnRleHQpIHsKKyAgICAgICAgQ0dDb250ZXh0UmVsZWFzZShfY29udGV4dCk7CisgICAgfQorfQoraW50IENGWF9RdWFydHpEZXZpY2VEcml2ZXI6OkdldERldmljZUNhcHMoaW50IGNhcHNJRCkKK3sKKyAgICBzd2l0Y2ggKGNhcHNJRCkgeworICAgICAgICBjYXNlIEZYRENfREVWSUNFX0NMQVNTOiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9kZXZpY2VDbGFzczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBGWERDX1BJWEVMX1dJRFRIOiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF93aWR0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBGWERDX1BJWEVMX0hFSUdIVDogeworICAgICAgICAgICAgICAgIHJldHVybiBfaGVpZ2h0OworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIEZYRENfQklUU19QSVhFTDogeworICAgICAgICAgICAgICAgIHJldHVybiAzMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBGWERDX1JFTkRFUl9DQVBTOiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF9yZW5kZXJDYXBzOworICAgICAgICAgICAgfQorICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgfQorfQorQ0ZYX01hdHJpeCBDRlhfUXVhcnR6RGV2aWNlRHJpdmVyOjpHZXRDVE0oKSBjb25zdAoreworICAgIENHQWZmaW5lVHJhbnNmb3JtIGN0bSA9IENHQ29udGV4dEdldENUTShfY29udGV4dCk7CisgICAgcmV0dXJuIENGWF9NYXRyaXgoY3RtLmEsIGN0bS5iLCBjdG0uYywgY3RtLmQsIGN0bS50eCwgY3RtLnR5KTsKK30KK3ZvaWQgQ0ZYX1F1YXJ0ekRldmljZURyaXZlcjo6U2F2ZVN0YXRlKCkKK3sKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKF9jb250ZXh0KTsKKyAgICBtX3NhdmVDb3VudCsrOworfQordm9pZCBDRlhfUXVhcnR6RGV2aWNlRHJpdmVyOjpSZXN0b3JlU3RhdGUoRlhfQk9PTCBpc0tlZXBTYXZlZCApCit7CisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShfY29udGV4dCk7CisgICAgaWYgKGlzS2VlcFNhdmVkKSB7CisgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoX2NvbnRleHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fc2F2ZUNvdW50LS07CisgICAgfQorfQorRlhfQk9PTCBDRlhfUXVhcnR6RGV2aWNlRHJpdmVyOjpTZXRDbGlwX1BhdGhGaWxsKGNvbnN0IENGWF9QYXRoRGF0YSogICAgcGF0aERhdGEsCisgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqICAgbWF0cml4LAorICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgIGZpbGxNb2RlICkKK3sKKyAgICBTYXZlU3RhdGUoKTsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBtID0gQ0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0eTsKKyAgICBpZiAobWF0cml4KSB7CisgICAgICAgIG0gPSBDR0FmZmluZVRyYW5zZm9ybU1ha2UobWF0cml4LT5HZXRBKCksIG1hdHJpeC0+R2V0QigpLCBtYXRyaXgtPkdldEMoKSwgbWF0cml4LT5HZXREKCksIG1hdHJpeC0+R2V0RSgpLCBtYXRyaXgtPkdldEYoKSk7CisgICAgfQorICAgIG0gPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtLCBfZm94aXREZXZpY2UyVXNlcik7CisgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKF9jb250ZXh0LCBtKTsKKyAgICBzZXRQYXRoVG9Db250ZXh0KHBhdGhEYXRhKTsKKyAgICBSZXN0b3JlU3RhdGUoRkFMU0UpOworICAgIGlmICgoZmlsbE1vZGUgJiAzKSA9PSBGWEZJTExfV0lORElORykgeworICAgICAgICBDR0NvbnRleHRDbGlwKF9jb250ZXh0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBDR0NvbnRleHRFT0NsaXAoX2NvbnRleHQpOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0ZMT0FUIENGWF9RdWFydHpEZXZpY2VEcml2ZXI6OmdldExpbmVXaWR0aChjb25zdCBDRlhfR3JhcGhTdGF0ZURhdGEgKiBncmFwaFN0YXRlLCBDR0FmZmluZVRyYW5zZm9ybSBjdG0pCit7CisgICAgRlhfRkxPQVQgbGluZVdpZHRoID0gZ3JhcGhTdGF0ZS0+bV9MaW5lV2lkdGg7CisgICAgaWYgKGdyYXBoU3RhdGUtPm1fTGluZVdpZHRoIDw9IDAuZikgeworICAgICAgICBDR1NpemUgc2l6ZTsKKyAgICAgICAgc2l6ZS53aWR0aCA9IDE7CisgICAgICAgIHNpemUuaGVpZ2h0ID0gMTsKKyAgICAgICAgQ0dTaXplIHRlbXAgPSBDR1NpemVBcHBseUFmZmluZVRyYW5zZm9ybShzaXplLCBjdG0pOworICAgICAgICBDR0Zsb2F0IHggPSAxIC8gdGVtcC53aWR0aDsKKyAgICAgICAgQ0dGbG9hdCB5ID0gMSAvIHRlbXAuaGVpZ2h0OworICAgICAgICBsaW5lV2lkdGggPSB4ID4geSA/IHggOiB5OworICAgIH0KKyAgICByZXR1cm4gbGluZVdpZHRoOworfQorRlhfQk9PTCBDRlhfUXVhcnR6RGV2aWNlRHJpdmVyOjpTZXRDbGlwX1BhdGhTdHJva2UoY29uc3QgQ0ZYX1BhdGhEYXRhKiAgICAgIHBhdGhEYXRhLAorICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiAgICAgbWF0cml4LAorICAgICAgICBjb25zdCBDRlhfR3JhcGhTdGF0ZURhdGEqICAgZ3JhcGhTdGF0ZSApCit7CisgICAgU2F2ZVN0YXRlKCk7CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbSA9IENHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHk7CisgICAgaWYgKG1hdHJpeCkgeworICAgICAgICBtID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKG1hdHJpeC0+R2V0QSgpLCBtYXRyaXgtPkdldEIoKSwgbWF0cml4LT5HZXRDKCksIG1hdHJpeC0+R2V0RCgpLCBtYXRyaXgtPkdldEUoKSwgbWF0cml4LT5HZXRGKCkpOworICAgIH0KKyAgICBtID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobSwgX2ZveGl0RGV2aWNlMlVzZXIpOworICAgIENHQ29udGV4dENvbmNhdENUTShfY29udGV4dCwgbSk7CisgICAgRlhfRkxPQVQgbGluZVdpZHRoID0gZ2V0TGluZVdpZHRoKGdyYXBoU3RhdGUsIG0pOworICAgIHNldFN0cm9rZUluZm8oZ3JhcGhTdGF0ZSwgMHhGRjAwMDAwMCwgbGluZVdpZHRoKTsKKyAgICBzZXRQYXRoVG9Db250ZXh0KHBhdGhEYXRhKTsKKyAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChfY29udGV4dCk7CisgICAgUmVzdG9yZVN0YXRlKEZBTFNFKTsKKyAgICBDR0NvbnRleHRDbGlwKF9jb250ZXh0KTsKKyAgICByZXR1cm4gVFJVRTsKK30KK3N0YXRpYyBDR0JsZW5kTW9kZSBHZXRDR0JsZW5kTW9kZShpbnQgYmxlbmRfdHlwZSkKK3sKKyAgICBDR0JsZW5kTW9kZSBtb2RlID0ga0NHQmxlbmRNb2RlTm9ybWFsOworICAgIHN3aXRjaCAoYmxlbmRfdHlwZSkgeworICAgICAgICBjYXNlIEZYRElCX0JMRU5EX05PUk1BTDoKKyAgICAgICAgICAgIG1vZGUgPSBrQ0dCbGVuZE1vZGVOb3JtYWw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGWERJQl9CTEVORF9NVUxUSVBMWToKKyAgICAgICAgICAgIG1vZGUgPSBrQ0dCbGVuZE1vZGVNdWx0aXBseTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZYRElCX0JMRU5EX1NDUkVFTjoKKyAgICAgICAgICAgIG1vZGUgPSBrQ0dCbGVuZE1vZGVTY3JlZW47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGWERJQl9CTEVORF9PVkVSTEFZOgorICAgICAgICAgICAgbW9kZSA9IGtDR0JsZW5kTW9kZU92ZXJsYXk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGWERJQl9CTEVORF9EQVJLRU46CisgICAgICAgICAgICBtb2RlID0ga0NHQmxlbmRNb2RlRGFya2VuOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRlhESUJfQkxFTkRfTElHSFRFTjoKKyAgICAgICAgICAgIG1vZGUgPSBrQ0dCbGVuZE1vZGVMaWdodGVuOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRlhESUJfQkxFTkRfQ09MT1JET0RHRToKKyAgICAgICAgICAgIG1vZGUgPSBrQ0dCbGVuZE1vZGVDb2xvckRvZGdlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRlhESUJfQkxFTkRfQ09MT1JCVVJOOgorICAgICAgICAgICAgbW9kZSA9IGtDR0JsZW5kTW9kZUNvbG9yQnVybjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZYRElCX0JMRU5EX0hBUkRMSUdIVDoKKyAgICAgICAgICAgIG1vZGUgPSBrQ0dCbGVuZE1vZGVIYXJkTGlnaHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGWERJQl9CTEVORF9TT0ZUTElHSFQ6CisgICAgICAgICAgICBtb2RlID0ga0NHQmxlbmRNb2RlU29mdExpZ2h0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRlhESUJfQkxFTkRfRElGRkVSRU5DRToKKyAgICAgICAgICAgIG1vZGUgPSBrQ0dCbGVuZE1vZGVEaWZmZXJlbmNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRlhESUJfQkxFTkRfRVhDTFVTSU9OOgorICAgICAgICAgICAgbW9kZSA9IGtDR0JsZW5kTW9kZUV4Y2x1c2lvbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZYRElCX0JMRU5EX0hVRToKKyAgICAgICAgICAgIG1vZGUgPSBrQ0dCbGVuZE1vZGVIdWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGWERJQl9CTEVORF9TQVRVUkFUSU9OOgorICAgICAgICAgICAgbW9kZSA9IGtDR0JsZW5kTW9kZVNhdHVyYXRpb247CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGWERJQl9CTEVORF9DT0xPUjoKKyAgICAgICAgICAgIG1vZGUgPSBrQ0dCbGVuZE1vZGVDb2xvcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZYRElCX0JMRU5EX0xVTUlOT1NJVFk6CisgICAgICAgICAgICBtb2RlID0ga0NHQmxlbmRNb2RlTHVtaW5vc2l0eTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbW9kZSA9IGtDR0JsZW5kTW9kZU5vcm1hbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gbW9kZTsKK30KK0ZYX0JPT0wgQ0ZYX1F1YXJ0ekRldmljZURyaXZlcjo6RHJhd1BhdGgoY29uc3QgQ0ZYX1BhdGhEYXRhKiAgICAgICAgcGF0aERhdGEsCisgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqICAgICAgIG1hdHJpeCwKKyAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiAgICAgZ3JhcGhTdGF0ZSwKKyAgICAgICAgRlhfRFdPUkQgICAgICAgICAgICAgICAgICAgICAgZmlsbEFyZ2IsCisgICAgICAgIEZYX0RXT1JEICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZUFyZ2IsCisgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxNb2RlLAorICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYV9mbGFnLAorICAgICAgICB2b2lkKiAgICAgICAgICAgICAgICAgICAgICAgICBwSWNjVHJhbnNmb3JtLAorICAgICAgICBpbnQJCQkJCQkJYmxlbmRfdHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKK3sKKyAgICBTYXZlU3RhdGUoKTsKKyAgICBDR0JsZW5kTW9kZSBtb2RlID0gR2V0Q0dCbGVuZE1vZGUoYmxlbmRfdHlwZSk7CisgICAgaWYgKG1vZGUgIT0ga0NHQmxlbmRNb2RlTm9ybWFsKSB7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShfY29udGV4dCwgbW9kZSk7CisgICAgfQorICAgIENHQWZmaW5lVHJhbnNmb3JtIG0gPSBDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5OworICAgIGlmIChtYXRyaXgpIHsKKyAgICAgICAgbSA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZShtYXRyaXgtPkdldEEoKSwgbWF0cml4LT5HZXRCKCksIG1hdHJpeC0+R2V0QygpLCBtYXRyaXgtPkdldEQoKSwgbWF0cml4LT5HZXRFKCksIG1hdHJpeC0+R2V0RigpKTsKKyAgICB9CisgICAgbSA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KG0sIF9mb3hpdERldmljZTJVc2VyKTsKKyAgICBDR0NvbnRleHRDb25jYXRDVE0oX2NvbnRleHQsIG0pOworICAgIGludCBwYXRoTW9kZSA9IDA7CisgICAgaWYgKGdyYXBoU3RhdGUgJiYgc3Ryb2tlQXJnYikgeworICAgICAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KF9jb250ZXh0LCBncmFwaFN0YXRlLT5tX01pdGVyTGltaXQpOworICAgICAgICBGWF9GTE9BVCBsaW5lV2lkdGggPSBnZXRMaW5lV2lkdGgoZ3JhcGhTdGF0ZSwgbSk7CisgICAgICAgIHNldFN0cm9rZUluZm8oZ3JhcGhTdGF0ZSwgc3Ryb2tlQXJnYiwgbGluZVdpZHRoKTsKKyAgICAgICAgcGF0aE1vZGUgfD0gNDsKKyAgICB9CisgICAgaWYgKGZpbGxNb2RlICYmIGZpbGxBcmdiKSB7CisgICAgICAgIHNldEZpbGxJbmZvKGZpbGxBcmdiKTsKKyAgICAgICAgaWYgKChmaWxsTW9kZSAmIDMpID09IEZYRklMTF9XSU5ESU5HKSB7CisgICAgICAgICAgICBwYXRoTW9kZSB8PSAxOworICAgICAgICB9IGVsc2UgaWYgKChmaWxsTW9kZSAmIDMpID09IEZYRklMTF9BTFRFUk5BVEUpIHsKKyAgICAgICAgICAgIHBhdGhNb2RlIHw9IDI7CisgICAgICAgIH0KKyAgICB9CisgICAgc2V0UGF0aFRvQ29udGV4dChwYXRoRGF0YSk7CisgICAgaWYgKGZpbGxNb2RlICYgRlhGSUxMX0ZVTExDT1ZFUikgeworICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoX2NvbnRleHQsIGZhbHNlKTsKKyAgICB9CisgICAgaWYgKHBhdGhNb2RlID09IDQpIHsKKyAgICAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChfY29udGV4dCk7CisgICAgfSBlbHNlIGlmIChwYXRoTW9kZSA9PSAxKSB7CisgICAgICAgIENHQ29udGV4dEZpbGxQYXRoKF9jb250ZXh0KTsKKyAgICB9IGVsc2UgaWYgKHBhdGhNb2RlID09IDIpIHsKKyAgICAgICAgQ0dDb250ZXh0RU9GaWxsUGF0aChfY29udGV4dCk7CisgICAgfSBlbHNlIGlmIChwYXRoTW9kZSA9PSA1KSB7CisgICAgICAgIENHQ29udGV4dERyYXdQYXRoKF9jb250ZXh0LCBrQ0dQYXRoRmlsbFN0cm9rZSk7CisgICAgfSBlbHNlIGlmIChwYXRoTW9kZSA9PSA2KSB7CisgICAgICAgIENHQ29udGV4dERyYXdQYXRoKF9jb250ZXh0LCBrQ0dQYXRoRU9GaWxsU3Ryb2tlKTsKKyAgICB9CisgICAgUmVzdG9yZVN0YXRlKEZBTFNFKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0ZYX1F1YXJ0ekRldmljZURyaXZlcjo6RmlsbFJlY3QoY29uc3QgRlhfUkVDVCogICAgICAgICByZWN0LAorICAgICAgICBGWF9BUkdCICAgICAgICAgICAgICAgICAgIGZpbGxBcmdiLAorICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgIGFscGhhRmxhZwkgICAsCisgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICAgICAgaWNjVHJhbnNmb3JtICwKKyAgICAgICAgaW50CQkJCQkJYmxlbmRfdHlwZSApCit7CisgICAgQ0dCbGVuZE1vZGUgbW9kZSA9IEdldENHQmxlbmRNb2RlKGJsZW5kX3R5cGUpOworICAgIGlmIChtb2RlICE9IGtDR0JsZW5kTW9kZU5vcm1hbCkgeworICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoX2NvbnRleHQsIG1vZGUpOworICAgIH0KKyAgICBDR1JlY3QgcmVjdF9meCA9IENHUmVjdE1ha2UocmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT5XaWR0aCgpLCByZWN0LT5IZWlnaHQoKSk7CisgICAgQ0dSZWN0IHJlY3RfdXNyID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocmVjdF9meCwgX2ZveGl0RGV2aWNlMlVzZXIpOworICAgIEZYX0lOVDMyIGEsIHIsIGcsIGI7CisgICAgQXJnYkRlY29kZShmaWxsQXJnYiwgYSwgciwgZywgYik7CisgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKF9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIC8gMjU1LmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgLyAyNTUuZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiAvIDI1NS5mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIC8gMjU1LmYpOworICAgIENHQ29udGV4dEZpbGxSZWN0KF9jb250ZXh0LCByZWN0X3Vzcik7CisgICAgaWYgKG1vZGUgIT0ga0NHQmxlbmRNb2RlTm9ybWFsKSB7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShfY29udGV4dCwga0NHQmxlbmRNb2RlTm9ybWFsKTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENGWF9RdWFydHpEZXZpY2VEcml2ZXI6OkRyYXdDb3NtZXRpY0xpbmUoRlhfRkxPQVQgICAgICAgICAgIHgxLAorICAgICAgICBGWF9GTE9BVCAgICAgICAgICAgICAgeTEsCisgICAgICAgIEZYX0ZMT0FUICAgICAgICAgICAgICB4MiwKKyAgICAgICAgRlhfRkxPQVQgICAgICAgICAgICAgIHkyLAorICAgICAgICBGWF9EV09SRCAgICAgICAgICAgICAgYXJnYiwKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIGFscGhhRmxhZyAgICAgICAsCisgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICBpY2NUcmFuc2Zvcm0gICAgLAorICAgICAgICBpbnQJCQkJCWJsZW5kX3R5cGUgKQoreworICAgIENHQmxlbmRNb2RlIG1vZGUgPSBHZXRDR0JsZW5kTW9kZShibGVuZF90eXBlKTsKKyAgICBpZiAobW9kZSAhPSBrQ0dCbGVuZE1vZGVOb3JtYWwpIHsKKyAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKF9jb250ZXh0LCBtb2RlKTsKKyAgICB9CisgICAgQ0dQb2ludCBwdCA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShDR1BvaW50TWFrZSh4MSwgeTEpLCBfZm94aXREZXZpY2UyVXNlcik7CisgICAgeDEgPSBwdC54OworICAgIHkxID0gcHQueTsKKyAgICBwdCA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShDR1BvaW50TWFrZSh4MiwgeTIpLCBfZm94aXREZXZpY2UyVXNlcik7CisgICAgeDIgPSBwdC54OworICAgIHkyID0gcHQueTsKKyAgICBGWF9JTlQzMiBhLCByLCBnLCBiOworICAgIEFyZ2JEZWNvZGUoYXJnYiwgYSwgciwgZywgYik7CisgICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tlQ29sb3IoX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciAvIDI1NS5mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgLyAyNTUuZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIC8gMjU1LmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSAvIDI1NS5mKTsKKyAgICBDR0NvbnRleHRNb3ZlVG9Qb2ludChfY29udGV4dCwgeDEsIHkxKTsKKyAgICBDR0NvbnRleHRBZGRMaW5lVG9Qb2ludChfY29udGV4dCwgeDIsIHkyKTsKKyAgICBDR0NvbnRleHRTdHJva2VQYXRoKF9jb250ZXh0KTsKKyAgICBpZiAobW9kZSAhPSBrQ0dCbGVuZE1vZGVOb3JtYWwpIHsKKyAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKF9jb250ZXh0LCBrQ0dCbGVuZE1vZGVOb3JtYWwpOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0ZYX1F1YXJ0ekRldmljZURyaXZlcjo6R2V0Q2xpcEJveChGWF9SRUNUKiByZWN0KQoreworICAgIENHUmVjdCByID0gQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KF9jb250ZXh0KTsKKyAgICByID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0ociwgX3VzZXIyRm94aXREZXZpY2UpOworICAgIHJlY3QtPmxlZnQJCT0gRlhTWVNfZmxvb3Ioci5vcmlnaW4ueCk7CisgICAgcmVjdC0+dG9wCQk9IEZYU1lTX2Zsb29yKHIub3JpZ2luLnkpOworICAgIHJlY3QtPnJpZ2h0CQk9IEZYU1lTX2NlaWwoci5vcmlnaW4ueCArIHIuc2l6ZS53aWR0aCk7CisgICAgcmVjdC0+Ym90dG9tCT0gRlhTWVNfY2VpbChyLm9yaWdpbi55ICsgci5zaXplLmhlaWdodCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENGWF9RdWFydHpEZXZpY2VEcml2ZXI6OkdldERJQml0cyhDRlhfRElCaXRtYXAqICAgICBiaXRtYXAsCisgICAgICAgIEZYX0lOVDMyICAgICAgICAgICAgbGVmdCwKKyAgICAgICAgRlhfSU5UMzIgICAgICAgICAgICB0b3AsCisgICAgICAgIHZvaWQqIHBJY2NUcmFuc2Zvcm0sCisgICAgICAgIEZYX0JPT0wgYkRFZGdlKQoreworICAgIGlmIChGWERDX1BSSU5URVIgPT0gX2RldmljZUNsYXNzKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKGJpdG1hcC0+R2V0QlBQKCkgPCAzMikgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmICghKF9yZW5kZXJDYXBzIHwgRlhSQ19HRVRfQklUUykpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDR1BvaW50IHB0ID0gQ0dQb2ludE1ha2UobGVmdCwgdG9wKTsKKyAgICBwdCA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShwdCwgX2ZveGl0RGV2aWNlMlVzZXIpOworICAgIENHQWZmaW5lVHJhbnNmb3JtIGN0bSA9IENHQ29udGV4dEdldENUTShfY29udGV4dCk7CisgICAgcHQueCAqPSBGWFNZU19mYWJzKGN0bS5hKTsKKyAgICBwdC55ICo9IEZYU1lTX2ZhYnMoY3RtLmQpOworICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShfY29udGV4dCk7CisgICAgaWYgKE5VTEwgPT0gaW1hZ2UpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDR0Zsb2F0IHdpZHRoCT0gKENHRmxvYXQpIGJpdG1hcC0+R2V0V2lkdGgoKTsKKyAgICBDR0Zsb2F0IGhlaWdodAk9IChDR0Zsb2F0KSBiaXRtYXAtPkdldEhlaWdodCgpOworICAgIGlmICh3aWR0aCArIHB0LnggPiBfd2lkdGgpIHsKKyAgICAgICAgd2lkdGggLT0gKHdpZHRoICsgcHQueCAtIF93aWR0aCk7CisgICAgfQorICAgIGlmIChoZWlnaHQgKyBwdC55ID4gX2hlaWdodCkgeworICAgICAgICBoZWlnaHQgLT0gKGhlaWdodCArIHB0LnkgLSBfaGVpZ2h0KTsKKyAgICB9CisgICAgQ0dJbWFnZVJlZiBzdWJJbWFnZSA9IENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENHUmVjdE1ha2UocHQueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdC55LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCkpOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gY3JlYXRlQ29udGV4dFdpdGhCaXRtYXAoYml0bWFwKTsKKyAgICBDR1JlY3QgcmVjdCA9IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KTsKKyAgICBDR0NvbnRleHRDbGVhclJlY3QoY29udGV4dCwgcmVjdCk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIHJlY3QsIHN1YkltYWdlKTsKKyAgICBDR0NvbnRleHRSZWxlYXNlKGNvbnRleHQpOworICAgIENHSW1hZ2VSZWxlYXNlKHN1YkltYWdlKTsKKyAgICBDR0ltYWdlUmVsZWFzZShpbWFnZSk7CisgICAgaWYgKGJpdG1hcC0+SGFzQWxwaGEoKSkgeworICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBiaXRtYXAtPkdldEhlaWdodCgpOyByb3cgKyspIHsKKyAgICAgICAgICAgIEZYX0xQQllURSBwU2NhbmxpbmUgPSAoRlhfTFBCWVRFKWJpdG1hcC0+R2V0U2NhbmxpbmUocm93KTsKKyAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGJpdG1hcC0+R2V0V2lkdGgoKTsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHBTY2FubGluZVszXSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcFNjYW5saW5lWzBdID0gKHBTY2FubGluZVswXSAqIDI1NS5mIC8gcFNjYW5saW5lWzNdICsgLjVmKTsKKyAgICAgICAgICAgICAgICAgICAgcFNjYW5saW5lWzFdID0gKHBTY2FubGluZVsxXSAqIDI1NS5mIC8gcFNjYW5saW5lWzNdICsgLjVmKTsKKyAgICAgICAgICAgICAgICAgICAgcFNjYW5saW5lWzJdID0gKHBTY2FubGluZVsyXSAqIDI1NS5mIC8gcFNjYW5saW5lWzNdICsgLjVmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcFNjYW5saW5lICs9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENGWF9RdWFydHpEZXZpY2VEcml2ZXI6OlNldERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiAgICAgIHBCaXRtYXAsCisgICAgICAgIEZYX0FSR0IgICAgICAgICAgICAgICAgICAgICBhcmdiLAorICAgICAgICBjb25zdCBGWF9SRUNUKiAgICAgICAgICAgICAgc3JjUmVjdCwKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfbGVmdCwKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfdG9wLAorICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRUeXBlLAorICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGFGbGFnICAgICAgICwKKyAgICAgICAgdm9pZCogICAgICAgICAgICAgICAgICAgICAgIGljY1RyYW5zZm9ybSAgICApCit7CisgICAgU2F2ZVN0YXRlKCk7CisgICAgQ0dGbG9hdCBzcmNfbGVmdCwgc3JjX3RvcCwgc3JjX3dpZHRoLCBzcmNfaGVpZ2h0OworICAgIGlmIChzcmNSZWN0KSB7CisgICAgICAgIHNyY19sZWZ0ID0gc3JjUmVjdC0+bGVmdDsKKyAgICAgICAgc3JjX3RvcCA9IHNyY1JlY3QtPnRvcDsKKyAgICAgICAgc3JjX3dpZHRoID0gc3JjUmVjdC0+V2lkdGgoKTsKKyAgICAgICAgc3JjX2hlaWdodCA9IHNyY1JlY3QtPkhlaWdodCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNyY19sZWZ0ID0gc3JjX3RvcCA9IDA7CisgICAgICAgIHNyY193aWR0aCA9IHBCaXRtYXAtPkdldFdpZHRoKCk7CisgICAgICAgIHNyY19oZWlnaHQgPSBwQml0bWFwLT5HZXRIZWlnaHQoKTsKKyAgICB9CisgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gY3RtID0gQ0dDb250ZXh0R2V0Q1RNKF9jb250ZXh0KTsKKyAgICBDR0Zsb2F0IHNjYWxlX3ggPSBGWFNZU19mYWJzKGN0bS5hKTsKKyAgICBDR0Zsb2F0IHNjYWxlX3kgPSBGWFNZU19mYWJzKGN0bS5kKTsKKyAgICBzcmNfbGVmdCAvPSBzY2FsZV94OworICAgIHNyY190b3AgLz0gc2NhbGVfeTsKKyAgICBzcmNfd2lkdGggLz0gc2NhbGVfeDsKKyAgICBzcmNfaGVpZ2h0IC89IHNjYWxlX3k7CisgICAgQ0dSZWN0IHJlY3RfZnggPSBDR1JlY3RNYWtlKGRlc3RfbGVmdCwgZGVzdF90b3AsIHNyY193aWR0aCwgc3JjX2hlaWdodCk7CisgICAgQ0dSZWN0IHJlY3RfdXNyID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocmVjdF9meCwgX2ZveGl0RGV2aWNlMlVzZXIpOworICAgIENHQ29udGV4dEJlZ2luUGF0aChfY29udGV4dCk7CisgICAgQ0dDb250ZXh0QWRkUmVjdChfY29udGV4dCwgcmVjdF91c3IpOworICAgIENHQ29udGV4dENsaXAoX2NvbnRleHQpOworICAgIHJlY3RfdXNyLnNpemUgPSBDR1NpemVNYWtlKHBCaXRtYXAtPkdldFdpZHRoKCkgLyBzY2FsZV94LCBwQml0bWFwLT5HZXRIZWlnaHQoKSAvIHNjYWxlX3kpOworICAgIHJlY3RfdXNyID0gQ0dSZWN0T2Zmc2V0KHJlY3RfdXNyLCAtc3JjX2xlZnQsIC1zcmNfdG9wKTsKKyAgICBDR19TZXRJbWFnZVRyYW5zZm9ybShkZXN0X2xlZnQsIGRlc3RfdG9wLCBzcmNfd2lkdGgsIHNyY19oZWlnaHQsICZyZWN0X3Vzcik7CisgICAgQ0ZYX0RJQml0bWFwKiBwQml0bWFwMSA9IE5VTEw7CisgICAgaWYgKHBCaXRtYXAtPklzQWxwaGFNYXNrKCkpIHsKKyAgICAgICAgaWYgKHBCaXRtYXAtPkdldEJ1ZmZlcigpKSB7CisgICAgICAgICAgICBwQml0bWFwMSA9IChDRlhfRElCaXRtYXAqKXBCaXRtYXA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwQml0bWFwMSA9IHBCaXRtYXAtPkNsb25lKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKE5VTEwgPT0gcEJpdG1hcDEpIHsKKyAgICAgICAgICAgIFJlc3RvcmVTdGF0ZShGQUxTRSk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgQ0dEYXRhUHJvdmlkZXJSZWYgcEJpdG1hcFByb3ZpZGVyID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQml0bWFwMS0+R2V0QnVmZmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCaXRtYXAxLT5HZXRQaXRjaCgpICogcEJpdG1hcDEtPkdldEhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgQ0dDb2xvclNwYWNlUmVmIHBDb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlR3JheSgpOworICAgICAgICBDR0JpdG1hcEluZm8gYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lIHwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdDsKKyAgICAgICAgQ0dJbWFnZVJlZiBwSW1hZ2UgPSBDR0ltYWdlQ3JlYXRlKHBCaXRtYXAxLT5HZXRXaWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJpdG1hcDEtPkdldEhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJpdG1hcDEtPkdldEJQUCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJpdG1hcDEtPkdldEJQUCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJpdG1hcDEtPkdldFBpdGNoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ29sb3JTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcEluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQml0bWFwUHJvdmlkZXIsIE5VTEwsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvTWFzayhfY29udGV4dCwgcmVjdF91c3IsIHBJbWFnZSk7CisgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYQVJHQl9SKGFyZ2IpIC8gMjU1LmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWEFSR0JfRyhhcmdiKSAvIDI1NS5mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhBUkdCX0IoYXJnYikgLyAyNTUuZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYQVJHQl9BKGFyZ2IpIC8gMjU1LmYpOworICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChfY29udGV4dCwgcmVjdF91c3IpOworICAgICAgICBDR0ltYWdlUmVsZWFzZShwSW1hZ2UpOworICAgICAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKHBDb2xvclNwYWNlKTsKKyAgICAgICAgQ0dEYXRhUHJvdmlkZXJSZWxlYXNlKHBCaXRtYXBQcm92aWRlcik7CisgICAgICAgIGlmIChwQml0bWFwMSAhPSBwQml0bWFwKSB7CisgICAgICAgICAgICBkZWxldGUgcEJpdG1hcDE7CisgICAgICAgIH0KKyAgICAgICAgUmVzdG9yZVN0YXRlKEZBTFNFKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGlmIChwQml0bWFwLT5HZXRCUFAoKSA8IDMyKSB7CisgICAgICAgIHBCaXRtYXAxID0gcEJpdG1hcC0+Q2xvbmVDb252ZXJ0KEZYRElCX1JnYjMyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocEJpdG1hcC0+R2V0QnVmZmVyKCkpIHsKKyAgICAgICAgICAgIHBCaXRtYXAxID0gKENGWF9ESUJpdG1hcCopcEJpdG1hcDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBCaXRtYXAxID0gcEJpdG1hcC0+Q2xvbmUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoTlVMTCA9PSBwQml0bWFwMSkgeworICAgICAgICBSZXN0b3JlU3RhdGUoRkFMU0UpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChwQml0bWFwMS0+SGFzQWxwaGEoKSkgeworICAgICAgICBpZiAocEJpdG1hcDEgPT0gcEJpdG1hcCkgeworICAgICAgICAgICAgcEJpdG1hcDEgPSBwQml0bWFwLT5DbG9uZSgpOworICAgICAgICAgICAgaWYgKCFwQml0bWFwMSkgeworICAgICAgICAgICAgICAgIFJlc3RvcmVTdGF0ZShGQUxTRSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHBCaXRtYXAxLT5HZXRIZWlnaHQoKTsgcm93ICsrKSB7CisgICAgICAgICAgICBGWF9MUEJZVEUgcFNjYW5saW5lID0gKEZYX0xQQllURSlwQml0bWFwMS0+R2V0U2NhbmxpbmUocm93KTsKKyAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBCaXRtYXAxLT5HZXRXaWR0aCgpOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICBwU2NhbmxpbmVbMF0gPSAoRlhfQllURSkocFNjYW5saW5lWzBdICogcFNjYW5saW5lWzNdIC8gMjU1LmYgKyAuNWYpOworICAgICAgICAgICAgICAgIHBTY2FubGluZVsxXSA9IChGWF9CWVRFKShwU2NhbmxpbmVbMV0gKiBwU2NhbmxpbmVbM10gLyAyNTUuZiArIC41Zik7CisgICAgICAgICAgICAgICAgcFNjYW5saW5lWzJdID0gKEZYX0JZVEUpKHBTY2FubGluZVsyXSAqIHBTY2FubGluZVszXSAvIDI1NS5mICsgLjVmKTsKKyAgICAgICAgICAgICAgICBwU2NhbmxpbmUgKz0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBDR0NvbnRleHRSZWYgY3R4ID0gY3JlYXRlQ29udGV4dFdpdGhCaXRtYXAocEJpdG1hcDEpOworICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjdHgpOworICAgIGludCBibGVuZF9tb2RlID0gYmxlbmRUeXBlOworICAgIGlmIChGWERJQl9CTEVORF9IQVJETElHSFQgPT0gYmxlbmRUeXBlKSB7CisgICAgICAgIGJsZW5kX21vZGUgPSBrQ0dCbGVuZE1vZGVTb2Z0TGlnaHQ7CisgICAgfSBlbHNlIGlmIChGWERJQl9CTEVORF9TT0ZUTElHSFQgPT0gYmxlbmRUeXBlKSB7CisgICAgICAgIGJsZW5kX21vZGUgPSBrQ0dCbGVuZE1vZGVIYXJkTGlnaHQ7CisgICAgfSBlbHNlIGlmIChibGVuZFR5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFICYmIGJsZW5kVHlwZSA8PSBGWERJQl9CTEVORF9MVU1JTk9TSVRZKSB7CisgICAgICAgIGJsZW5kX21vZGUgPSBibGVuZFR5cGUgLSA5OworICAgIH0gZWxzZSBpZiAoYmxlbmRUeXBlID4gRlhESUJfQkxFTkRfTFVNSU5PU0lUWSB8fCBibGVuZFR5cGUgPCAwKSB7CisgICAgICAgIGJsZW5kX21vZGUgPSBrQ0dCbGVuZE1vZGVOb3JtYWw7CisgICAgfQorICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShfY29udGV4dCwgKENHQmxlbmRNb2RlKWJsZW5kX21vZGUpOworICAgIENHQ29udGV4dERyYXdJbWFnZShfY29udGV4dCwgcmVjdF91c3IsIGltYWdlKTsKKyAgICBDR0ltYWdlUmVsZWFzZShpbWFnZSk7CisgICAgQ0dDb250ZXh0UmVsZWFzZShjdHgpOworICAgIGlmIChwQml0bWFwMSAhPSBwQml0bWFwKSB7CisgICAgICAgIGRlbGV0ZSBwQml0bWFwMTsKKyAgICB9CisgICAgUmVzdG9yZVN0YXRlKEZBTFNFKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0ZYX1F1YXJ0ekRldmljZURyaXZlcjo6U3RyZXRjaERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiAgICAgIHBCaXRtYXAsCisgICAgICAgIEZYX0FSR0IgICAgICAgICAgICAgICAgICAgICBhcmdiLAorICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9sZWZ0LAorICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF90b3AsCisgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3dpZHRoLAorICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9oZWlnaHQsCisgICAgICAgIGNvbnN0IEZYX1JFQ1QqICAgICAgICAgICAgICBjbGlwUmVjdCwKKyAgICAgICAgRlhfRFdPUkQgICAgICAgICAgICAgICAgICAgIGZsYWdzLAorICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGFGbGFnCSAgICwKKyAgICAgICAgdm9pZCogICAgICAgICAgICAgICAgICAgICAgIGljY1RyYW5zZm9ybSAsCisgICAgICAgIGludAkJCQkJCQlibGVuZF90eXBlKQoreworICAgIFNhdmVTdGF0ZSgpOworICAgIGlmIChjbGlwUmVjdCkgeworICAgICAgICBDR0NvbnRleHRCZWdpblBhdGgoX2NvbnRleHQpOworICAgICAgICBDR1JlY3QgcmVjdF9jbGlwID0gQ0dSZWN0TWFrZShjbGlwUmVjdC0+bGVmdCwgY2xpcFJlY3QtPnRvcCwgY2xpcFJlY3QtPldpZHRoKCksIGNsaXBSZWN0LT5IZWlnaHQoKSk7CisgICAgICAgIHJlY3RfY2xpcCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKHJlY3RfY2xpcCwgX2ZveGl0RGV2aWNlMlVzZXIpOworICAgICAgICBDR0NvbnRleHRBZGRSZWN0KF9jb250ZXh0LCByZWN0X2NsaXApOworICAgICAgICBDR0NvbnRleHRDbGlwKF9jb250ZXh0KTsKKyAgICB9CisgICAgQ0dSZWN0IHJlY3QgPSBDR1JlY3RNYWtlKGRlc3RfbGVmdCwgZGVzdF90b3AsIGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0KTsKKyAgICByZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocmVjdCwgX2ZveGl0RGV2aWNlMlVzZXIpOworICAgIGlmIChGWERJQl9CSUNVQklDX0lOVEVSUE9MID09IGZsYWdzKSB7CisgICAgICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5KF9jb250ZXh0LCBrQ0dJbnRlcnBvbGF0aW9uSGlnaCk7CisgICAgfSBlbHNlIGlmIChGWERJQl9ET1dOU0FNUExFID09IGZsYWdzKSB7CisgICAgICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5KF9jb250ZXh0LCBrQ0dJbnRlcnBvbGF0aW9uTm9uZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoX2NvbnRleHQsIGtDR0ludGVycG9sYXRpb25NZWRpdW0pOworICAgIH0KKyAgICBDR19TZXRJbWFnZVRyYW5zZm9ybShkZXN0X2xlZnQsIGRlc3RfdG9wLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCk7CisgICAgQ0ZYX0RJQml0bWFwKiBwQml0bWFwMSA9IE5VTEw7CisgICAgaWYgKHBCaXRtYXAtPklzQWxwaGFNYXNrKCkpIHsKKyAgICAgICAgaWYgKHBCaXRtYXAtPkdldEJ1ZmZlcigpKSB7CisgICAgICAgICAgICBwQml0bWFwMSA9IChDRlhfRElCaXRtYXAqKXBCaXRtYXA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwQml0bWFwMSA9IHBCaXRtYXAtPkNsb25lKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKE5VTEwgPT0gcEJpdG1hcDEpIHsKKyAgICAgICAgICAgIFJlc3RvcmVTdGF0ZShGQUxTRSk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgQ0dEYXRhUHJvdmlkZXJSZWYgcEJpdG1hcFByb3ZpZGVyID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQml0bWFwMS0+R2V0QnVmZmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCaXRtYXAxLT5HZXRQaXRjaCgpICogcEJpdG1hcDEtPkdldEhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgQ0dDb2xvclNwYWNlUmVmIHBDb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlR3JheSgpOworICAgICAgICBDR0JpdG1hcEluZm8gYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lIHwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdDsKKyAgICAgICAgQ0dJbWFnZVJlZiBwSW1hZ2UgPSBDR0ltYWdlQ3JlYXRlKHBCaXRtYXAxLT5HZXRXaWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJpdG1hcDEtPkdldEhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJpdG1hcDEtPkdldEJQUCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJpdG1hcDEtPkdldEJQUCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJpdG1hcDEtPkdldFBpdGNoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ29sb3JTcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcEluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQml0bWFwUHJvdmlkZXIsIE5VTEwsIHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvTWFzayhfY29udGV4dCwgcmVjdCwgcEltYWdlKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKF9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhBUkdCX1IoYXJnYikgLyAyNTUuZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYQVJHQl9HKGFyZ2IpIC8gMjU1LmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWEFSR0JfQihhcmdiKSAvIDI1NS5mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhBUkdCX0EoYXJnYikgLyAyNTUuZik7CisgICAgICAgIENHQ29udGV4dEZpbGxSZWN0KF9jb250ZXh0LCByZWN0KTsKKyAgICAgICAgQ0dJbWFnZVJlbGVhc2UocEltYWdlKTsKKyAgICAgICAgQ0dDb2xvclNwYWNlUmVsZWFzZShwQ29sb3JTcGFjZSk7CisgICAgICAgIENHRGF0YVByb3ZpZGVyUmVsZWFzZShwQml0bWFwUHJvdmlkZXIpOworICAgICAgICBpZiAocEJpdG1hcDEgIT0gcEJpdG1hcCkgeworICAgICAgICAgICAgZGVsZXRlIHBCaXRtYXAxOworICAgICAgICB9CisgICAgICAgIFJlc3RvcmVTdGF0ZShGQUxTRSk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBpZiAocEJpdG1hcC0+R2V0QlBQKCkgPCAzMikgeworICAgICAgICBwQml0bWFwMSA9IHBCaXRtYXAtPkNsb25lQ29udmVydChGWERJQl9SZ2IzMik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHBCaXRtYXAtPkdldEJ1ZmZlcigpKSB7CisgICAgICAgICAgICBwQml0bWFwMSA9IChDRlhfRElCaXRtYXAqKXBCaXRtYXA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwQml0bWFwMSA9IHBCaXRtYXAtPkNsb25lKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKE5VTEwgPT0gcEJpdG1hcDEpIHsKKyAgICAgICAgUmVzdG9yZVN0YXRlKEZBTFNFKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAocEJpdG1hcDEtPkhhc0FscGhhKCkpIHsKKyAgICAgICAgaWYgKHBCaXRtYXAxID09IHBCaXRtYXApIHsKKyAgICAgICAgICAgIHBCaXRtYXAxID0gcEJpdG1hcC0+Q2xvbmUoKTsKKyAgICAgICAgICAgIGlmICghcEJpdG1hcDEpIHsKKyAgICAgICAgICAgICAgICBSZXN0b3JlU3RhdGUoRkFMU0UpOworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBwQml0bWFwMS0+R2V0SGVpZ2h0KCk7IHJvdyArKykgeworICAgICAgICAgICAgRlhfTFBCWVRFIHBTY2FubGluZSA9IChGWF9MUEJZVEUpcEJpdG1hcDEtPkdldFNjYW5saW5lKHJvdyk7CisgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwQml0bWFwMS0+R2V0V2lkdGgoKTsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgcFNjYW5saW5lWzBdID0gKEZYX0JZVEUpKHBTY2FubGluZVswXSAqIHBTY2FubGluZVszXSAvIDI1NS5mICsgLjVmKTsKKyAgICAgICAgICAgICAgICBwU2NhbmxpbmVbMV0gPSAoRlhfQllURSkocFNjYW5saW5lWzFdICogcFNjYW5saW5lWzNdIC8gMjU1LmYgKyAuNWYpOworICAgICAgICAgICAgICAgIHBTY2FubGluZVsyXSA9IChGWF9CWVRFKShwU2NhbmxpbmVbMl0gKiBwU2NhbmxpbmVbM10gLyAyNTUuZiArIC41Zik7CisgICAgICAgICAgICAgICAgcFNjYW5saW5lICs9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQ0dDb250ZXh0UmVmIGN0eCA9IGNyZWF0ZUNvbnRleHRXaXRoQml0bWFwKHBCaXRtYXAxKTsKKyAgICBDR0ltYWdlUmVmIGltYWdlID0gQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY3R4KTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoX2NvbnRleHQsIHJlY3QsIGltYWdlKTsKKyAgICBDR0ltYWdlUmVsZWFzZShpbWFnZSk7CisgICAgQ0dDb250ZXh0UmVsZWFzZShjdHgpOworICAgIGlmIChwQml0bWFwMSAhPSBwQml0bWFwKSB7CisgICAgICAgIGRlbGV0ZSBwQml0bWFwMTsKKyAgICB9CisgICAgUmVzdG9yZVN0YXRlKEZBTFNFKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0ZYX1F1YXJ0ekRldmljZURyaXZlcjo6Q0dfRHJhd0dseXBSdW4oaW50ICAgICAgICAgICAgICAgICAgICAgICAgbkNoYXJzLAorICAgICAgICBjb25zdCBGWFRFWFRfQ0hBUlBPUyogICAgICBwQ2hhclBvcywKKyAgICAgICAgQ0ZYX0ZvbnQqICAgICAgICAgICAgICAgICAgcEZvbnQsCisgICAgICAgIENGWF9Gb250Q2FjaGUqICAgICAgICAgICAgIHBDYWNoZSwKKyAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogICAgcEdseXBoTWF0cml4LAorICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiAgICBwT2JqZWN0MkRldmljZSwKKyAgICAgICAgRlhfRkxPQVQgICAgICAgICAgICAgICAgICAgZm9udF9zaXplLAorICAgICAgICBGWF9EV09SRCAgICAgICAgICAgICAgICAgICBhcmdiLAorICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYV9mbGFnLAorICAgICAgICB2b2lkKiAgICAgICAgICAgICAgICAgICAgICBwSWNjVHJhbnNmb3JtKQoreworICAgIGlmIChuQ2hhcnMgPT0gMCkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgQ1F1YXJ0ejJEJiBxdWFydHoyZCA9ICgoQ0FwcGxlUGxhdGZvcm0gKikgQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCkpLT5fcXVhcnR6MmQ7CisgICAgaWYgKCFwRm9udC0+bV9wUGxhdGZvcm1Gb250KSB7CisgICAgICAgIGlmIChwRm9udC0+R2V0UHNOYW1lKCkgPT0gQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbCgiREZIZWlTdGQtVzUiKSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIHBGb250LT5tX3BQbGF0Zm9ybUZvbnQgPSBxdWFydHoyZC5DcmVhdGVGb250KHBGb250LT5tX3BGb250RGF0YSwgcEZvbnQtPm1fZHdTaXplKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gcEZvbnQtPm1fcFBsYXRmb3JtRm9udCkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgfQorICAgIENGWF9GaXhlZEJ1Zkdyb3c8RlhfV09SRCwgMzI+IGdseXBoX2luZGljZXMobkNoYXJzKTsKKyAgICBDRlhfRml4ZWRCdWZHcm93PENHUG9pbnQsIDMyPiBnbHlwaF9wb3NpdGlvbnMobkNoYXJzKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5DaGFyczsgaSsrICkgeworICAgICAgICBnbHlwaF9pbmRpY2VzW2ldID0gcENoYXJQb3NbaV0ubV9FeHRHSUQ7CisgICAgICAgIGdseXBoX3Bvc2l0aW9uc1tpXS54ID0gcENoYXJQb3NbaV0ubV9PcmlnaW5YOworICAgICAgICBnbHlwaF9wb3NpdGlvbnNbaV0ueSA9IHBDaGFyUG9zW2ldLm1fT3JpZ2luWTsKKyAgICB9CisgICAgQ0ZYX0FmZmluZU1hdHJpeCB0ZXh0X21hdHJpeDsKKyAgICBpZiAocE9iamVjdDJEZXZpY2UpIHsKKyAgICAgICAgdGV4dF9tYXRyaXguQ29uY2F0KCpwT2JqZWN0MkRldmljZSk7CisgICAgfQorICAgIENHQWZmaW5lVHJhbnNmb3JtIG1hdHJpeF9jZyA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZSh0ZXh0X21hdHJpeC5hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRfbWF0cml4LmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9tYXRyaXguYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0X21hdHJpeC5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRfbWF0cml4LmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dF9tYXRyaXguZik7CisgICAgbWF0cml4X2NnID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4X2NnLCBfZm94aXREZXZpY2UyVXNlcik7CisgICAgQ0dDb250ZXh0U2V0VGV4dE1hdHJpeChfY29udGV4dCwgbWF0cml4X2NnKTsKKyAgICBDR0NvbnRleHRTZXRGb250KF9jb250ZXh0LCAoQ0dGb250UmVmKXBGb250LT5tX3BQbGF0Zm9ybUZvbnQpOworICAgIENHQ29udGV4dFNldEZvbnRTaXplKF9jb250ZXh0LCBGWFNZU19mYWJzKGZvbnRfc2l6ZSkpOworICAgIEZYX0lOVDMyIGEsIHIsIGcsIGI7CisgICAgQXJnYkRlY29kZShhcmdiLCBhLCByLCBnLCBiKTsKKyAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgLyAyNTUuZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyAvIDI1NS5mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIC8gMjU1LmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgLyAyNTUuZik7CisgICAgU2F2ZVN0YXRlKCk7CisgICAgaWYgKHBHbHlwaE1hdHJpeCkgeworICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBjdG0gPSBDR0NvbnRleHRHZXRDVE0oX2NvbnRleHQpOworICAgICAgICBDR1BvaW50IG9yaWdpbiA9IENHUG9pbnRNYWtlKCBnbHlwaF9wb3NpdGlvbnNbMF0ueCwgIGdseXBoX3Bvc2l0aW9uc1swXS55KTsKKyAgICAgICAgb3JpZ2luID0gQ0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKG9yaWdpbiwgbWF0cml4X2NnKTsKKyAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKF9jb250ZXh0LCBvcmlnaW4ueCwgb3JpZ2luLnkpOworICAgICAgICBDR0FmZmluZVRyYW5zZm9ybSBnbHlwaF9tYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybU1ha2UocEdseXBoTWF0cml4LT5hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwR2x5cGhNYXRyaXgtPmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBHbHlwaE1hdHJpeC0+YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEdseXBoTWF0cml4LT5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwR2x5cGhNYXRyaXgtPmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBHbHlwaE1hdHJpeC0+Zik7CisgICAgICAgIGlmIChfZm94aXREZXZpY2UyVXNlci5kIDwgMCkgeworICAgICAgICAgICAgZ2x5cGhfbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoZ2x5cGhfbWF0cml4KTsKKyAgICAgICAgfQorICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oX2NvbnRleHQsIGdseXBoX21hdHJpeCk7CisgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShfY29udGV4dCwgLW9yaWdpbi54LCAtb3JpZ2luLnkpOworICAgIH0KKyAgICBDR0NvbnRleHRTaG93R2x5cGhzQXRQb3NpdGlvbnMoX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDR0dseXBoKilnbHlwaF9pbmRpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaF9wb3NpdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5DaGFycyk7CisgICAgUmVzdG9yZVN0YXRlKEZBTFNFKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0ZYX1F1YXJ0ekRldmljZURyaXZlcjo6RHJhd0RldmljZVRleHQoaW50ICAgICAgICAgICAgICAgICAgICAgIG5DaGFycywKKyAgICAgICAgY29uc3QgRlhURVhUX0NIQVJQT1MqICAgIHBDaGFyUG9zLAorICAgICAgICBDRlhfRm9udCogICAgICAgICAgICAgICAgcEZvbnQsCisgICAgICAgIENGWF9Gb250Q2FjaGUqICAgICAgICAgICBwQ2FjaGUsCisgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqICBwT2JqZWN0MkRldmljZSwKKyAgICAgICAgRlhfRkxPQVQgICAgICAgICAgICAgICAgIGZvbnRfc2l6ZSwKKyAgICAgICAgRlhfRFdPUkQgICAgICAgICAgICAgICAgIGNvbG9yLAorICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgYWxwaGFfZmxhZyAgICAgICAsCisgICAgICAgIHZvaWQqICAgICAgICAgICAgICAgICAgICBwSWNjVHJhbnNmb3JtKQoreworICAgIGlmIChOVUxMID09IHBGb250IHx8IE5VTEwgPT0gX2NvbnRleHQpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWF9CT09MIGJCb2xkID0gcEZvbnQtPklzQm9sZCgpOworICAgIGlmICghYkJvbGQgJiYgcEZvbnQtPkdldFN1YnN0Rm9udCgpICYmCisgICAgICAgICAgICBwRm9udC0+R2V0U3Vic3RGb250KCktPm1fV2VpZ2h0ID49IDUwMCAmJgorICAgICAgICAgICAgcEZvbnQtPkdldFN1YnN0Rm9udCgpLT5tX1dlaWdodCA8PSA2MDApIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBTYXZlU3RhdGUoKTsKKyAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoX2NvbnRleHQsIGtDR1RleHRGaWxsQ2xpcCk7CisgICAgRlhfQk9PTCByZXQgPSBGQUxTRTsKKyAgICBGWF9JTlQzMiBpID0gMDsKKyAgICB3aGlsZSAoaSA8IG5DaGFycykgeworICAgICAgICBpZiAocENoYXJQb3NbaV0ubV9iR2x5cGhBZGp1c3QgfHwgZm9udF9zaXplIDwgMCkgeworICAgICAgICAgICAgaWYgKGkgPiAwKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gQ0dfRHJhd0dseXBSdW4oaSwgcENoYXJQb3MsIHBGb250LCBwQ2FjaGUsIE5VTEwsIHBPYmplY3QyRGV2aWNlLCBmb250X3NpemUsIGNvbG9yLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJldCkgeworICAgICAgICAgICAgICAgICAgICBSZXN0b3JlU3RhdGUoRkFMU0UpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IEZYVEVYVF9DSEFSUE9TKiBjaGFyX3BvcyA9IHBDaGFyUG9zICsgaTsKKyAgICAgICAgICAgIENGWF9BZmZpbmVNYXRyaXggZ2xwaHlfbWF0cml4OworICAgICAgICAgICAgaWYgKGZvbnRfc2l6ZSA8IDApIHsKKyAgICAgICAgICAgICAgICBnbHBoeV9tYXRyaXguQ29uY2F0KC0xLCAwLCAwLCAtMSwgMCwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2hhcl9wb3MtPm1fYkdseXBoQWRqdXN0KSB7CisgICAgICAgICAgICAgICAgZ2xwaHlfbWF0cml4LkNvbmNhdChjaGFyX3Bvcy0+bV9BZGp1c3RNYXRyaXhbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX3Bvcy0+bV9BZGp1c3RNYXRyaXhbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX3Bvcy0+bV9BZGp1c3RNYXRyaXhbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyX3Bvcy0+bV9BZGp1c3RNYXRyaXhbM10sIDAsIDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0ID0gQ0dfRHJhd0dseXBSdW4oMSwgY2hhcl9wb3MsIHBGb250LCBwQ2FjaGUsICZnbHBoeV9tYXRyaXgsIHBPYmplY3QyRGV2aWNlLCBmb250X3NpemUsIGNvbG9yLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtKTsKKyAgICAgICAgICAgIGlmICghcmV0KSB7CisgICAgICAgICAgICAgICAgUmVzdG9yZVN0YXRlKEZBTFNFKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSArKzsKKyAgICAgICAgICAgIHBDaGFyUG9zICs9IGk7CisgICAgICAgICAgICBuQ2hhcnMgLT0gaTsKKyAgICAgICAgICAgIGkgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaSArKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgcmV0ID0gQ0dfRHJhd0dseXBSdW4oaSwgcENoYXJQb3MsIHBGb250LCBwQ2FjaGUsIE5VTEwsIHBPYmplY3QyRGV2aWNlLCBmb250X3NpemUsIGNvbG9yLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtKTsKKyAgICB9CisgICAgUmVzdG9yZVN0YXRlKEZBTFNFKTsKKyAgICByZXR1cm4gcmV0OworfQordm9pZCBDRlhfUXVhcnR6RGV2aWNlRHJpdmVyOjpzZXRTdHJva2VJbmZvKGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogZ3JhcGhTdGF0ZSwgRlhfQVJHQiBhcmdiLCBGWF9GTE9BVCBsaW5lV2lkdGgpCit7CisgICAgaWYgKE5VTEwgPT0gZ3JhcGhTdGF0ZSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENHQ29udGV4dFNldExpbmVXaWR0aChfY29udGV4dCwgbGluZVdpZHRoKTsKKyAgICBDR0xpbmVDYXAgY2FwOworICAgIHN3aXRjaCAoZ3JhcGhTdGF0ZS0+bV9MaW5lQ2FwKSB7CisgICAgICAgIGNhc2UgQ0ZYX0dyYXBoU3RhdGVEYXRhOjpMaW5lQ2FwUm91bmQ6IHsKKyAgICAgICAgICAgICAgICBjYXAgPSBrQ0dMaW5lQ2FwUm91bmQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgQ0ZYX0dyYXBoU3RhdGVEYXRhOjpMaW5lQ2FwU3F1YXJlOiB7CisgICAgICAgICAgICAgICAgY2FwID0ga0NHTGluZUNhcFNxdWFyZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBDRlhfR3JhcGhTdGF0ZURhdGE6OkxpbmVDYXBCdXR0OgorICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgY2FwID0ga0NHTGluZUNhcEJ1dHQ7CisgICAgICAgICAgICB9CisgICAgfQorICAgIENHQ29udGV4dFNldExpbmVDYXAoX2NvbnRleHQsIGNhcCk7CisgICAgQ0dMaW5lSm9pbiBqb2luOworICAgIHN3aXRjaCAoZ3JhcGhTdGF0ZS0+bV9MaW5lSm9pbikgeworICAgICAgICBjYXNlIENGWF9HcmFwaFN0YXRlRGF0YTo6TGluZUpvaW5Sb3VuZDogeworICAgICAgICAgICAgICAgIGpvaW4gPSBrQ0dMaW5lSm9pblJvdW5kOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIENGWF9HcmFwaFN0YXRlRGF0YTo6TGluZUpvaW5CZXZlbDogeworICAgICAgICAgICAgICAgIGpvaW4gPSBrQ0dMaW5lSm9pbkJldmVsOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIENGWF9HcmFwaFN0YXRlRGF0YTo6TGluZUpvaW5NaXRlcjoKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgIGpvaW4gPSBrQ0dMaW5lSm9pbk1pdGVyOworICAgICAgICAgICAgfQorICAgIH0KKyAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihfY29udGV4dCwgam9pbik7CisgICAgaWYgKGdyYXBoU3RhdGUtPm1fRGFzaENvdW50KSB7CisjaWYgQ0dGTE9BVF9JU19ET1VCTEUKKyAgICAgICAgQ0dGbG9hdCogZGFzaEFycmF5ID0gbmV3IENHRmxvYXRbZ3JhcGhTdGF0ZS0+bV9EYXNoQ291bnRdOworICAgICAgICBpZiAoIWRhc2hBcnJheSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBncmFwaFN0YXRlLT5tX0Rhc2hDb3VudDsgKytpbmRleCkgeworICAgICAgICAgICAgZGFzaEFycmF5W2luZGV4XSA9IGdyYXBoU3RhdGUtPm1fRGFzaEFycmF5W2luZGV4XTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgQ0dGbG9hdCogZGFzaEFycmF5ID0gKENHRmxvYXQqKWdyYXBoU3RhdGUtPm1fRGFzaEFycmF5OworI2VuZGlmCisgICAgICAgIENHQ29udGV4dFNldExpbmVEYXNoKF9jb250ZXh0LCBncmFwaFN0YXRlLT5tX0Rhc2hQaGFzZSwgZGFzaEFycmF5LCBncmFwaFN0YXRlLT5tX0Rhc2hDb3VudCk7CisjaWYgQ0dGTE9BVF9JU19ET1VCTEUKKyAgICAgICAgZGVsZXRlW10gZGFzaEFycmF5OworI2VuZGlmCisgICAgfQorICAgIEZYX0lOVDMyIGEsIHIsIGcsIGI7CisgICAgQXJnYkRlY29kZShhcmdiLCBhLCByLCBnLCBiKTsKKyAgICBDR0NvbnRleHRTZXRSR0JTdHJva2VDb2xvcihfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIC8gMjU1LmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyAvIDI1NS5mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgLyAyNTUuZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIC8gMjU1LmYpOworfQordm9pZCBDRlhfUXVhcnR6RGV2aWNlRHJpdmVyOjpzZXRGaWxsSW5mbyhGWF9BUkdCIGFyZ2IpCit7CisgICAgRlhfSU5UMzIgYSwgciwgZywgYjsKKyAgICBBcmdiRGVjb2RlKGFyZ2IsIGEsIHIsIGcsIGIpOworICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciAvIDI1NS5mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnIC8gMjU1LmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgLyAyNTUuZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSAvIDI1NS5mKTsKK30KK3ZvaWQgQ0ZYX1F1YXJ0ekRldmljZURyaXZlcjo6c2V0UGF0aFRvQ29udGV4dChjb25zdCBDRlhfUGF0aERhdGEqIHBhdGhEYXRhKQoreworICAgIEZYX0lOVDMyIGNvdW50ID0gcGF0aERhdGEtPkdldFBvaW50Q291bnQoKTsKKyAgICBGWF9QQVRIUE9JTlQqIHBvaW50cyA9IHBhdGhEYXRhLT5HZXRQb2ludHMoKTsKKyAgICBDR0NvbnRleHRCZWdpblBhdGgoX2NvbnRleHQpOworICAgIGZvciAoRlhfSU5UMzIgaSA9IDA7IGkgPCBjb3VudDsgaSArKykgeworICAgICAgICBzd2l0Y2ggKHBvaW50c1tpXS5tX0ZsYWcgJiBGWFBUX1RZUEUpIHsKKyAgICAgICAgICAgIGNhc2UgRlhQVF9NT1ZFVE86CisgICAgICAgICAgICAgICAgQ0dDb250ZXh0TW92ZVRvUG9pbnQoX2NvbnRleHQsIHBvaW50c1tpXS5tX1BvaW50WCwgcG9pbnRzW2ldLm1fUG9pbnRZKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRlhQVF9MSU5FVE86CisgICAgICAgICAgICAgICAgQ0dDb250ZXh0QWRkTGluZVRvUG9pbnQoX2NvbnRleHQsIHBvaW50c1tpXS5tX1BvaW50WCwgcG9pbnRzW2ldLm1fUG9pbnRZKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRlhQVF9CRVpJRVJUTzogeworICAgICAgICAgICAgICAgICAgICBDR0NvbnRleHRBZGRDdXJ2ZVRvUG9pbnQoX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbaV0ubV9Qb2ludFgsIHBvaW50c1tpXS5tX1BvaW50WSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c1tpICsgMV0ubV9Qb2ludFgsIHBvaW50c1tpICsgMV0ubV9Qb2ludFksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbaSArIDJdLm1fUG9pbnRYLCBwb2ludHNbaSArIDJdLm1fUG9pbnRZKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocG9pbnRzW2ldLm1fRmxhZyAmIEZYUFRfQ0xPU0VGSUdVUkUpIHsKKyAgICAgICAgICAgIENHQ29udGV4dENsb3NlUGF0aChfY29udGV4dCk7CisgICAgICAgIH0KKyAgICB9Cit9Cit2b2lkIENGWF9RdWFydHpEZXZpY2VEcml2ZXI6OkNHX1NldEltYWdlVHJhbnNmb3JtKGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwKKyAgICAgICAgQ0dSZWN0KiByZWN0ICkKK3sKKyAgICBpbnQgZmxpcF95ID0gX2ZveGl0RGV2aWNlMlVzZXIuZCAqIGRlc3RfaGVpZ2h0IDwgMCA/IDEgOiAtMTsKKyAgICBpbnQgZmxpcF94ID0gX2ZveGl0RGV2aWNlMlVzZXIuYSAqIGRlc3Rfd2lkdGggPiAwID8gMSA6IC0xOworICAgIGlmIChmbGlwX3kgPCAwIHx8IGZsaXBfeCA8IDApIHsKKyAgICAgICAgaWYgKGRlc3RfaGVpZ2h0IDwgMCkgeworICAgICAgICAgICAgZGVzdF9oZWlnaHQgPSAtZGVzdF9oZWlnaHQ7CisgICAgICAgICAgICBkZXN0X3RvcCAtPSBkZXN0X2hlaWdodDsKKyAgICAgICAgfQorICAgICAgICBDR1JlY3QgcnQgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShDR1JlY3RNYWtlKGRlc3RfbGVmdCwgZGVzdF90b3AsIGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0KSwgX2ZveGl0RGV2aWNlMlVzZXIpOworICAgICAgICBDR0Zsb2F0IG9mZnNldF94ID0gKHJ0Lm9yaWdpbi54KSArIHJ0LnNpemUud2lkdGggLyAyLmYsCisgICAgICAgICAgICAgICAgb2Zmc2V0X3kgPSAocnQub3JpZ2luLnkpICsgcnQuc2l6ZS5oZWlnaHQgLyAyLmY7CisgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHk7CisgICAgICAgIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KHRyYW5zZm9ybSwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDEsIDAsIDAsIDEsIC1vZmZzZXRfeCwgLW9mZnNldF95KSk7CisgICAgICAgIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KHRyYW5zZm9ybSwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKGZsaXBfeCwgMCwgMCwgZmxpcF95LCAwLCAwKSk7CisgICAgICAgIHRyYW5zZm9ybSA9IENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KHRyYW5zZm9ybSwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKDEsIDAsIDAsIDEsIG9mZnNldF94LCBvZmZzZXRfeSkpOworICAgICAgICBDR0NvbnRleHRDb25jYXRDVE0oX2NvbnRleHQsIHRyYW5zZm9ybSk7CisgICAgICAgIGlmIChyZWN0KSB7CisgICAgICAgICAgICAqcmVjdCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKCpyZWN0LCB0cmFuc2Zvcm0pOworICAgICAgICB9CisgICAgfQorfQordm9pZCBDRlhfUXVhcnR6RGV2aWNlRHJpdmVyOjpDbGVhckRyaXZlcigpCit7CisgICAgaWYgKE5VTEwgPT0gX2NvbnRleHQpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fc2F2ZUNvdW50OyArK2kpIHsKKyAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShfY29udGV4dCk7CisgICAgfQorICAgIG1fc2F2ZUNvdW50ID0gMDsKKyAgICBpZiAoX2NvbnRleHQpIHsKKyAgICAgICAgQ0dDb250ZXh0UmVsZWFzZShfY29udGV4dCk7CisgICAgfQorfQorQ0ZYX1F1YXJ0ekRldmljZTo6Q0ZYX1F1YXJ0ekRldmljZSgpCit7CisgICAgbV9iT3duZWRCaXRtYXAgPSBGQUxTRTsKKyAgICBtX3BDb250ZXh0ID0gTlVMTDsKK30KK0NGWF9RdWFydHpEZXZpY2U6On5DRlhfUXVhcnR6RGV2aWNlKCkKK3sKKyAgICBpZiAobV9wQ29udGV4dCkgeworICAgICAgICBDR0NvbnRleHRSZWxlYXNlKG1fcENvbnRleHQpOworICAgIH0KKyAgICBpZiAoR2V0Qml0bWFwKCkgJiYgbV9iT3duZWRCaXRtYXApIHsKKyAgICAgICAgZGVsZXRlIEdldEJpdG1hcCgpOworICAgIH0KK30KK0NHQ29udGV4dFJlZiBDRlhfUXVhcnR6RGV2aWNlOjpHZXRDb250ZXh0KCkKK3sKKyAgICByZXR1cm4gbV9wQ29udGV4dDsKK30KK0ZYX0JPT0wgQ0ZYX1F1YXJ0ekRldmljZTo6QXR0YWNoKENHQ29udGV4dFJlZiBjb250ZXh0LCBGWF9JTlQzMiBuRGV2aWNlQ2xhc3MpCit7CisgICAgaWYgKG1fcENvbnRleHQpIHsKKyAgICAgICAgQ0dDb250ZXh0UmVsZWFzZShtX3BDb250ZXh0KTsKKyAgICB9CisgICAgbV9wQ29udGV4dCA9IGNvbnRleHQ7CisgICAgQ0dDb250ZXh0UmV0YWluKG1fcENvbnRleHQpOworICAgIElGWF9SZW5kZXJEZXZpY2VEcml2ZXIqIHBEcml2ZXIgPSBGWF9ORVcgQ0ZYX1F1YXJ0ekRldmljZURyaXZlcihtX3BDb250ZXh0LCBuRGV2aWNlQ2xhc3MpOworICAgIGlmICghcERyaXZlcikgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIFNldERldmljZURyaXZlcihwRHJpdmVyKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0ZYX1F1YXJ0ekRldmljZTo6QXR0YWNoKENGWF9ESUJpdG1hcCogcEJpdG1hcCkKK3sKKyAgICBTZXRCaXRtYXAocEJpdG1hcCk7CisgICAgbV9wQ29udGV4dCA9IGNyZWF0ZUNvbnRleHRXaXRoQml0bWFwKHBCaXRtYXApOworICAgIGlmIChOVUxMID09IG1fcENvbnRleHQpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBJRlhfUmVuZGVyRGV2aWNlRHJpdmVyKiBwRHJpdmVyID0gRlhfTkVXIENGWF9RdWFydHpEZXZpY2VEcml2ZXIobV9wQ29udGV4dCwgRlhEQ19ESVNQTEFZKTsKKyAgICBpZiAoIXBEcml2ZXIpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBTZXREZXZpY2VEcml2ZXIocERyaXZlcik7CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENGWF9RdWFydHpEZXZpY2U6OkNyZWF0ZShGWF9JTlQzMiB3aWR0aCwgRlhfSU5UMzIgaGVpZ2h0LCBGWERJQl9Gb3JtYXQgZm9ybWF0KQoreworICAgIGlmICgoRlhfQllURSlmb3JtYXQgPCAzMikgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIENGWF9ESUJpdG1hcCogcEJpdG1hcCA9IEZYX05FVyBDRlhfRElCaXRtYXA7CisgICAgaWYgKCFwQml0bWFwKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKCFwQml0bWFwLT5DcmVhdGUod2lkdGgsIGhlaWdodCwgZm9ybWF0KSkgeworICAgICAgICBkZWxldGUgcEJpdG1hcDsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBtX2JPd25lZEJpdG1hcCA9IFRSVUU7CisgICAgcmV0dXJuIEF0dGFjaChwQml0bWFwKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9kaWIvZGliX2ludC5oIGIvY29yZS9zcmMvZnhnZS9kaWIvZGliX2ludC5oCmluZGV4IGE5ZDBiMDIuLjFlNmQ4MmUgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Z2UvZGliL2RpYl9pbnQuaAorKysgYi9jb3JlL3NyYy9meGdlL2RpYi9kaWJfaW50LmgKQEAgLTEsODggKzEsODggQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLWNsYXNzIENQREZfRml4ZWRNYXRyaXggOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENQREZfRml4ZWRNYXRyaXgoY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCYgc3JjLCBpbnQgYml0cykNCi0gICAgew0KLSAgICAgICAgYmFzZSA9IDEgPDwgYml0czsNCi0gICAgICAgIGEgPSBGWFNZU19yb3VuZChzcmMuYSAqIGJhc2UpOw0KLSAgICAgICAgYiA9IEZYU1lTX3JvdW5kKHNyYy5iICogYmFzZSk7DQotICAgICAgICBjID0gRlhTWVNfcm91bmQoc3JjLmMgKiBiYXNlKTsNCi0gICAgICAgIGQgPSBGWFNZU19yb3VuZChzcmMuZCAqIGJhc2UpOw0KLSAgICAgICAgZSA9IEZYU1lTX3JvdW5kKHNyYy5lICogYmFzZSk7DQotICAgICAgICBmID0gRlhTWVNfcm91bmQoc3JjLmYgKiBiYXNlKTsNCi0gICAgfQ0KLSAgICBpbmxpbmUgdm9pZAlUcmFuc2Zvcm0oaW50IHgsIGludCB5LCBpbnQmIHgxLCBpbnQmIHkxKQ0KLSAgICB7DQotICAgICAgICB4MSA9IChhICogeCArIGMgKiB5ICsgZSArIGJhc2UgLyAyKSAvIGJhc2U7DQotICAgICAgICB5MSA9IChiICogeCArIGQgKiB5ICsgZiArIGJhc2UgLyAyKSAvIGJhc2U7DQotICAgIH0NCi0gICAgaW50CQlhLCBiLCBjLCBkLCBlLCBmOw0KLSAgICBpbnQJCWJhc2U7DQotfTsNCi0jZGVmaW5lIEZQREZfSFVHRV9JTUFHRV9TSVpFCTYwMDAwMDAwDQotc3RydWN0IFBpeGVsV2VpZ2h0IHsNCi0gICAgaW50CQltX1NyY1N0YXJ0Ow0KLSAgICBpbnQJCW1fU3JjRW5kOw0KLSAgICBpbnQJCW1fV2VpZ2h0c1sxXTsNCi19Ow0KLWNsYXNzIENXZWlnaHRUYWJsZSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgQ1dlaWdodFRhYmxlKCkNCi0gICAgew0KLSAgICAgICAgbV9wV2VpZ2h0VGFibGVzID0gTlVMTDsNCi0gICAgfQ0KLSAgICB+Q1dlaWdodFRhYmxlKCkNCi0gICAgew0KLSAgICAgICAgaWYobV9wV2VpZ2h0VGFibGVzKSB7DQotICAgICAgICAgICAgRlhfRnJlZShtX3BXZWlnaHRUYWJsZXMpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wV2VpZ2h0VGFibGVzID0gTlVMTDsNCi0gICAgfQ0KLSAgICB2b2lkCQkJQ2FsYyhpbnQgZGVzdF9sZW4sIGludCBkZXN0X21pbiwgaW50IGRlc3RfbWF4LCBpbnQgc3JjX2xlbiwgaW50IHNyY19taW4sIGludCBzcmNfbWF4LCBpbnQgZmxhZ3MpOw0KLSAgICBQaXhlbFdlaWdodCoJR2V0UGl4ZWxXZWlnaHQoaW50IHBpeGVsKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gKFBpeGVsV2VpZ2h0KikobV9wV2VpZ2h0VGFibGVzICsgKHBpeGVsIC0gbV9EZXN0TWluKSAqIG1fSXRlbVNpemUpOw0KLSAgICB9DQotICAgIGludAkJCQltX0Rlc3RNaW4sIG1fSXRlbVNpemU7DQotICAgIEZYX0xQQllURQkJbV9wV2VpZ2h0VGFibGVzOw0KLX07DQotY2xhc3MgQ1N0cmV0Y2hFbmdpbmUgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENTdHJldGNoRW5naW5lKElGWF9TY2FubGluZUNvbXBvc2VyKiBwRGVzdEJpdG1hcCwgRlhESUJfRm9ybWF0IGRlc3RfZm9ybWF0LA0KLSAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0LCBjb25zdCBGWF9SRUNUJiBjbGlwX3JlY3QsDQotICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBmbGFncyk7DQotICAgIH5DU3RyZXRjaEVuZ2luZSgpOw0KLSAgICBGWF9CT09MCQlDb250aW51ZShJRlhfUGF1c2UqIHBQYXVzZSk7DQotcHVibGljOg0KLSAgICBGWERJQl9Gb3JtYXQgbV9EZXN0Rm9ybWF0Ow0KLSAgICBpbnQJCW1fRGVzdEJwcCwgbV9TcmNCcHAsIG1fYkhhc0FscGhhOw0KLSAgICBJRlhfU2NhbmxpbmVDb21wb3NlcioJbV9wRGVzdEJpdG1hcDsNCi0gICAgaW50CQltX0Rlc3RXaWR0aCwgbV9EZXN0SGVpZ2h0Ow0KLSAgICBGWF9SRUNUCW1fRGVzdENsaXA7DQotICAgIEZYX0xQQllURQltX3BEZXN0U2NhbmxpbmU7DQotICAgIEZYX0xQQllURSAgIG1fcERlc3RNYXNrU2NhbmxpbmU7DQotICAgIEZYX1JFQ1QJbV9TcmNDbGlwOw0KLSAgICBjb25zdCBDRlhfRElCU291cmNlKgltX3BTb3VyY2U7DQotICAgIEZYX0RXT1JEKgltX3BTcmNQYWxldHRlOw0KLSAgICBpbnQJCW1fU3JjV2lkdGgsIG1fU3JjSGVpZ2h0Ow0KLSAgICBpbnQJCW1fU3JjUGl0Y2gsIG1fSW50ZXJQaXRjaDsNCi0gICAgaW50IG1fRXh0cmFNYXNrUGl0Y2g7DQotICAgIHVuc2lnbmVkIGNoYXIqCW1fcEludGVyQnVmOw0KLSAgICB1bnNpZ25lZCBjaGFyKgltX3BFeHRyYUFscGhhQnVmOw0KLSAgICBpbnQJCW1fVHJhbnNNZXRob2Q7DQotICAgIGludCAJbV9GbGFnczsNCi0gICAgQ1dlaWdodFRhYmxlCW1fV2VpZ2h0VGFibGU7DQotICAgIGludAkJbV9DdXJSb3c7DQotICAgIEZYX0JPT0wJU3RhcnRTdHJldGNoSG9yeigpOw0KLSAgICBGWF9CT09MCUNvbnRpbnVlU3RyZXRjaEhvcnooSUZYX1BhdXNlKiBwUGF1c2UpOw0KLSAgICB2b2lkCVN0cmV0Y2hWZXJ0KCk7DQotICAgIGludAkJbV9TdGF0ZTsNCi19Ow0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKK2NsYXNzIENQREZfRml4ZWRNYXRyaXggOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENQREZfRml4ZWRNYXRyaXgoY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCYgc3JjLCBpbnQgYml0cykKKyAgICB7CisgICAgICAgIGJhc2UgPSAxIDw8IGJpdHM7CisgICAgICAgIGEgPSBGWFNZU19yb3VuZChzcmMuYSAqIGJhc2UpOworICAgICAgICBiID0gRlhTWVNfcm91bmQoc3JjLmIgKiBiYXNlKTsKKyAgICAgICAgYyA9IEZYU1lTX3JvdW5kKHNyYy5jICogYmFzZSk7CisgICAgICAgIGQgPSBGWFNZU19yb3VuZChzcmMuZCAqIGJhc2UpOworICAgICAgICBlID0gRlhTWVNfcm91bmQoc3JjLmUgKiBiYXNlKTsKKyAgICAgICAgZiA9IEZYU1lTX3JvdW5kKHNyYy5mICogYmFzZSk7CisgICAgfQorICAgIGlubGluZSB2b2lkCVRyYW5zZm9ybShpbnQgeCwgaW50IHksIGludCYgeDEsIGludCYgeTEpCisgICAgeworICAgICAgICB4MSA9IChhICogeCArIGMgKiB5ICsgZSArIGJhc2UgLyAyKSAvIGJhc2U7CisgICAgICAgIHkxID0gKGIgKiB4ICsgZCAqIHkgKyBmICsgYmFzZSAvIDIpIC8gYmFzZTsKKyAgICB9CisgICAgaW50CQlhLCBiLCBjLCBkLCBlLCBmOworICAgIGludAkJYmFzZTsKK307CisjZGVmaW5lIEZQREZfSFVHRV9JTUFHRV9TSVpFCTYwMDAwMDAwCitzdHJ1Y3QgUGl4ZWxXZWlnaHQgeworICAgIGludAkJbV9TcmNTdGFydDsKKyAgICBpbnQJCW1fU3JjRW5kOworICAgIGludAkJbV9XZWlnaHRzWzFdOworfTsKK2NsYXNzIENXZWlnaHRUYWJsZSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ1dlaWdodFRhYmxlKCkKKyAgICB7CisgICAgICAgIG1fcFdlaWdodFRhYmxlcyA9IE5VTEw7CisgICAgfQorICAgIH5DV2VpZ2h0VGFibGUoKQorICAgIHsKKyAgICAgICAgaWYobV9wV2VpZ2h0VGFibGVzKSB7CisgICAgICAgICAgICBGWF9GcmVlKG1fcFdlaWdodFRhYmxlcyk7CisgICAgICAgIH0KKyAgICAgICAgbV9wV2VpZ2h0VGFibGVzID0gTlVMTDsKKyAgICB9CisgICAgdm9pZAkJCUNhbGMoaW50IGRlc3RfbGVuLCBpbnQgZGVzdF9taW4sIGludCBkZXN0X21heCwgaW50IHNyY19sZW4sIGludCBzcmNfbWluLCBpbnQgc3JjX21heCwgaW50IGZsYWdzKTsKKyAgICBQaXhlbFdlaWdodCoJR2V0UGl4ZWxXZWlnaHQoaW50IHBpeGVsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIChQaXhlbFdlaWdodCopKG1fcFdlaWdodFRhYmxlcyArIChwaXhlbCAtIG1fRGVzdE1pbikgKiBtX0l0ZW1TaXplKTsKKyAgICB9CisgICAgaW50CQkJCW1fRGVzdE1pbiwgbV9JdGVtU2l6ZTsKKyAgICBGWF9MUEJZVEUJCW1fcFdlaWdodFRhYmxlczsKK307CitjbGFzcyBDU3RyZXRjaEVuZ2luZSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ1N0cmV0Y2hFbmdpbmUoSUZYX1NjYW5saW5lQ29tcG9zZXIqIHBEZXN0Qml0bWFwLCBGWERJQl9Gb3JtYXQgZGVzdF9mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgY29uc3QgRlhfUkVDVCYgY2xpcF9yZWN0LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBmbGFncyk7CisgICAgfkNTdHJldGNoRW5naW5lKCk7CisgICAgRlhfQk9PTAkJQ29udGludWUoSUZYX1BhdXNlKiBwUGF1c2UpOworcHVibGljOgorICAgIEZYRElCX0Zvcm1hdCBtX0Rlc3RGb3JtYXQ7CisgICAgaW50CQltX0Rlc3RCcHAsIG1fU3JjQnBwLCBtX2JIYXNBbHBoYTsKKyAgICBJRlhfU2NhbmxpbmVDb21wb3NlcioJbV9wRGVzdEJpdG1hcDsKKyAgICBpbnQJCW1fRGVzdFdpZHRoLCBtX0Rlc3RIZWlnaHQ7CisgICAgRlhfUkVDVAltX0Rlc3RDbGlwOworICAgIEZYX0xQQllURQltX3BEZXN0U2NhbmxpbmU7CisgICAgRlhfTFBCWVRFICAgbV9wRGVzdE1hc2tTY2FubGluZTsKKyAgICBGWF9SRUNUCW1fU3JjQ2xpcDsKKyAgICBjb25zdCBDRlhfRElCU291cmNlKgltX3BTb3VyY2U7CisgICAgRlhfRFdPUkQqCW1fcFNyY1BhbGV0dGU7CisgICAgaW50CQltX1NyY1dpZHRoLCBtX1NyY0hlaWdodDsKKyAgICBpbnQJCW1fU3JjUGl0Y2gsIG1fSW50ZXJQaXRjaDsKKyAgICBpbnQgbV9FeHRyYU1hc2tQaXRjaDsKKyAgICB1bnNpZ25lZCBjaGFyKgltX3BJbnRlckJ1ZjsKKyAgICB1bnNpZ25lZCBjaGFyKgltX3BFeHRyYUFscGhhQnVmOworICAgIGludAkJbV9UcmFuc01ldGhvZDsKKyAgICBpbnQgCW1fRmxhZ3M7CisgICAgQ1dlaWdodFRhYmxlCW1fV2VpZ2h0VGFibGU7CisgICAgaW50CQltX0N1clJvdzsKKyAgICBGWF9CT09MCVN0YXJ0U3RyZXRjaEhvcnooKTsKKyAgICBGWF9CT09MCUNvbnRpbnVlU3RyZXRjaEhvcnooSUZYX1BhdXNlKiBwUGF1c2UpOworICAgIHZvaWQJU3RyZXRjaFZlcnQoKTsKKyAgICBpbnQJCW1fU3RhdGU7Cit9OwpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9kaWIvZnhfZGliX2NvbXBvc2l0ZS5jcHAgYi9jb3JlL3NyYy9meGdlL2RpYi9meF9kaWJfY29tcG9zaXRlLmNwcAppbmRleCA4ZTliNDkxLi4xYmJlMDc3IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL2RpYi9meF9kaWJfY29tcG9zaXRlLmNwcAorKysgYi9jb3JlL3NyYy9meGdlL2RpYi9meF9kaWJfY29tcG9zaXRlLmNwcApAQCAtMSw0NjAyICsxLDQ2MDIgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2UuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgiDQotI2luY2x1ZGUgImRpYl9pbnQuaCINCi1jb25zdCBGWF9CWVRFIGdfR2FtbWFSYW1wWzI1Nl0gPSB7DQotICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAgIDEsDQotICAgIDEsICAgMSwgICAyLCAgIDIsICAgMiwgICAyLCAgIDIsICAgMiwgICAyLCAgIDIsICAgMywgICAzLCAgIDMsICAgMywgICAzLCAgIDMsDQotICAgIDQsICAgNCwgICA0LCAgIDQsICAgNCwgICA1LCAgIDUsICAgNSwgICA1LCAgIDYsICAgNiwgICA2LCAgIDYsICAgNywgICA3LCAgIDcsDQotICAgIDgsICAgOCwgICA4LCAgIDgsICAgOSwgICA5LCAgIDksICAxMCwgIDEwLCAgMTAsICAxMSwgIDExLCAgMTIsICAxMiwgIDEyLCAgMTMsDQotICAgIDEzLCAgMTMsICAxNCwgIDE0LCAgMTUsICAxNSwgIDE2LCAgMTYsICAxNywgIDE3LCAgMTcsICAxOCwgIDE4LCAgMTksICAxOSwgIDIwLA0KLSAgICAyMCwgIDIxLCAgMjIsICAyMiwgIDIzLCAgMjMsICAyNCwgIDI0LCAgMjUsICAyNSwgIDI2LCAgMjcsICAyNywgIDI4LCAgMjksICAyOSwNCi0gICAgMzAsICAzMCwgIDMxLCAgMzIsICAzMiwgIDMzLCAgMzQsICAzNSwgIDM1LCAgMzYsICAzNywgIDM3LCAgMzgsICAzOSwgIDQwLCAgNDEsDQotICAgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NSwgIDQ2LCAgNDcsICA0OCwgIDQ5LCAgNTAsICA1MSwgIDUxLCAgNTIsICA1MywgIDU0LA0KLSAgICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsICA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwNCi0gICAgNzEsICA3MiwgIDczLCAgNzQsICA3NiwgIDc3LCAgNzgsICA3OSwgIDgwLCAgODEsICA4MiwgIDg0LCAgODUsICA4NiwgIDg3LCAgODgsDQotICAgIDkwLCAgOTEsICA5MiwgIDkzLCAgOTUsICA5NiwgIDk3LCAgOTksIDEwMCwgMTAxLCAxMDMsIDEwNCwgMTA1LCAxMDcsIDEwOCwgMTA5LA0KLSAgICAxMTEsIDExMiwgMTE0LCAxMTUsIDExNiwgMTE4LCAxMTksIDEyMSwgMTIyLCAxMjQsIDEyNSwgMTI3LCAxMjgsIDEzMCwgMTMxLCAxMzMsDQotICAgIDEzNCwgMTM2LCAxMzgsIDEzOSwgMTQxLCAxNDIsIDE0NCwgMTQ2LCAxNDcsIDE0OSwgMTUxLCAxNTIsIDE1NCwgMTU2LCAxNTcsIDE1OSwNCi0gICAgMTYxLCAxNjMsIDE2NCwgMTY2LCAxNjgsIDE3MCwgMTcxLCAxNzMsIDE3NSwgMTc3LCAxNzksIDE4MSwgMTgzLCAxODQsIDE4NiwgMTg4LA0KLSAgICAxOTAsIDE5MiwgMTk0LCAxOTYsIDE5OCwgMjAwLCAyMDIsIDIwNCwgMjA2LCAyMDgsIDIxMCwgMjEyLCAyMTQsIDIxNiwgMjE4LCAyMjAsDQotICAgIDIyMiwgMjI0LCAyMjYsIDIyOSwgMjMxLCAyMzMsIDIzNSwgMjM3LCAyMzksIDI0MiwgMjQ0LCAyNDYsIDI0OCwgMjUwLCAyNTMsIDI1NSwNCi19Ow0KLWNvbnN0IEZYX0JZVEUgZ19HYW1tYUludmVyc2VbMjU2XSA9IHsNCi0gICAgMCwgIDEzLCAgMjIsICAyOCwgIDM0LCAgMzgsICA0MiwgIDQ2LCAgNTAsICA1MywgIDU2LCAgNTksICA2MSwgIDY0LCAgNjYsICA2OSwNCi0gICAgNzEsICA3MywgIDc1LCAgNzcsICA3OSwgIDgxLCAgODMsICA4NSwgIDg2LCAgODgsICA5MCwgIDkyLCAgOTMsICA5NSwgIDk2LCAgOTgsDQotICAgIDk5LCAxMDEsIDEwMiwgMTA0LCAxMDUsIDEwNiwgMTA4LCAxMDksIDExMCwgMTEyLCAxMTMsIDExNCwgMTE1LCAxMTcsIDExOCwgMTE5LA0KLSAgICAxMjAsIDEyMSwgMTIyLCAxMjQsIDEyNSwgMTI2LCAxMjcsIDEyOCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsDQotICAgIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywgMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OCwgMTQ5LCAxNTAsIDE1MSwNCi0gICAgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwgMTU5LCAxNjAsIDE2MSwgMTYyLCAxNjMsIDE2MywgMTY0LA0KLSAgICAxNjUsIDE2NiwgMTY3LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MCwgMTcxLCAxNzIsIDE3MywgMTczLCAxNzQsIDE3NSwgMTc1LCAxNzYsDQotICAgIDE3NywgMTc4LCAxNzgsIDE3OSwgMTgwLCAxODAsIDE4MSwgMTgyLCAxODIsIDE4MywgMTg0LCAxODUsIDE4NSwgMTg2LCAxODcsIDE4NywNCi0gICAgMTg4LCAxODksIDE4OSwgMTkwLCAxOTAsIDE5MSwgMTkyLCAxOTIsIDE5MywgMTk0LCAxOTQsIDE5NSwgMTk2LCAxOTYsIDE5NywgMTk3LA0KLSAgICAxOTgsIDE5OSwgMTk5LCAyMDAsIDIwMCwgMjAxLCAyMDIsIDIwMiwgMjAzLCAyMDMsIDIwNCwgMjA1LCAyMDUsIDIwNiwgMjA2LCAyMDcsDQotICAgIDIwOCwgMjA4LCAyMDksIDIwOSwgMjEwLCAyMTAsIDIxMSwgMjEyLCAyMTIsIDIxMywgMjEzLCAyMTQsIDIxNCwgMjE1LCAyMTUsIDIxNiwNCi0gICAgMjE2LCAyMTcsIDIxOCwgMjE4LCAyMTksIDIxOSwgMjIwLCAyMjAsIDIyMSwgMjIxLCAyMjIsIDIyMiwgMjIzLCAyMjMsIDIyNCwgMjI0LA0KLSAgICAyMjUsIDIyNiwgMjI2LCAyMjcsIDIyNywgMjI4LCAyMjgsIDIyOSwgMjI5LCAyMzAsIDIzMCwgMjMxLCAyMzEsIDIzMiwgMjMyLCAyMzMsDQotICAgIDIzMywgMjM0LCAyMzQsIDIzNSwgMjM1LCAyMzYsIDIzNiwgMjM3LCAyMzcsIDIzOCwgMjM4LCAyMzgsIDIzOSwgMjM5LCAyNDAsIDI0MCwNCi0gICAgMjQxLCAyNDEsIDI0MiwgMjQyLCAyNDMsIDI0MywgMjQ0LCAyNDQsIDI0NSwgMjQ1LCAyNDYsIDI0NiwgMjQ2LCAyNDcsIDI0NywgMjQ4LA0KLSAgICAyNDgsIDI0OSwgMjQ5LCAyNTAsIDI1MCwgMjUxLCAyNTEsIDI1MSwgMjUyLCAyNTIsIDI1MywgMjUzLCAyNTQsIDI1NCwgMjU1LCAyNTUsDQotfTsNCi1jb25zdCBGWF9CWVRFIF9jb2xvcl9zcXJ0WzI1Nl0gPSB7DQotICAgIDB4MDAsIDB4MDMsIDB4MDcsIDB4MEIsIDB4MEYsIDB4MTIsIDB4MTYsIDB4MTksIDB4MUQsIDB4MjAsIDB4MjMsIDB4MjYsIDB4MjksIDB4MkMsIDB4MkYsIDB4MzIsDQotICAgIDB4MzUsIDB4MzcsIDB4M0EsIDB4M0MsIDB4M0YsIDB4NDEsIDB4NDMsIDB4NDYsIDB4NDgsIDB4NEEsIDB4NEMsIDB4NEUsIDB4NTAsIDB4NTIsIDB4NTQsIDB4NTYsDQotICAgIDB4NTcsIDB4NTksIDB4NUIsIDB4NUMsIDB4NUUsIDB4NjAsIDB4NjEsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjcsIDB4NjgsIDB4NjksIDB4NkIsIDB4NkMsIDB4NkQsDQotICAgIDB4NkUsIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsIDB4NzksIDB4N0EsIDB4N0IsIDB4N0MsIDB4N0QsIDB4N0UsDQotICAgIDB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsIDB4ODcsIDB4ODgsIDB4ODksIDB4OEEsIDB4OEIsIDB4OEMsIDB4OEQsIDB4OEUsDQotICAgIDB4OEYsIDB4OTAsIDB4OTEsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsIDB4OTcsIDB4OTgsIDB4OTksIDB4OUEsIDB4OUIsIDB4OUMsDQotICAgIDB4OUMsIDB4OUQsIDB4OUUsIDB4OUYsIDB4QTAsIDB4QTAsIDB4QTEsIDB4QTIsIDB4QTMsIDB4QTQsIDB4QTQsIDB4QTUsIDB4QTYsIDB4QTcsIDB4QTcsIDB4QTgsDQotICAgIDB4QTksIDB4QUEsIDB4QUEsIDB4QUIsIDB4QUMsIDB4QUQsIDB4QUQsIDB4QUUsIDB4QUYsIDB4QjAsIDB4QjAsIDB4QjEsIDB4QjIsIDB4QjMsIDB4QjMsIDB4QjQsDQotICAgIDB4QjUsIDB4QjUsIDB4QjYsIDB4QjcsIDB4QjcsIDB4QjgsIDB4QjksIDB4QkEsIDB4QkEsIDB4QkIsIDB4QkMsIDB4QkMsIDB4QkQsIDB4QkUsIDB4QkUsIDB4QkYsDQotICAgIDB4QzAsIDB4QzAsIDB4QzEsIDB4QzIsIDB4QzIsIDB4QzMsIDB4QzQsIDB4QzQsIDB4QzUsIDB4QzYsIDB4QzYsIDB4QzcsIDB4QzcsIDB4QzgsIDB4QzksIDB4QzksDQotICAgIDB4Q0EsIDB4Q0IsIDB4Q0IsIDB4Q0MsIDB4Q0MsIDB4Q0QsIDB4Q0UsIDB4Q0UsIDB4Q0YsIDB4RDAsIDB4RDAsIDB4RDEsIDB4RDEsIDB4RDIsIDB4RDMsIDB4RDMsDQotICAgIDB4RDQsIDB4RDQsIDB4RDUsIDB4RDYsIDB4RDYsIDB4RDcsIDB4RDcsIDB4RDgsIDB4RDksIDB4RDksIDB4REEsIDB4REEsIDB4REIsIDB4REMsIDB4REMsIDB4REQsDQotICAgIDB4REQsIDB4REUsIDB4REUsIDB4REYsIDB4RTAsIDB4RTAsIDB4RTEsIDB4RTEsIDB4RTIsIDB4RTIsIDB4RTMsIDB4RTQsIDB4RTQsIDB4RTUsIDB4RTUsIDB4RTYsDQotICAgIDB4RTYsIDB4RTcsIDB4RTcsIDB4RTgsIDB4RTksIDB4RTksIDB4RUEsIDB4RUEsIDB4RUIsIDB4RUIsIDB4RUMsIDB4RUMsIDB4RUQsIDB4RUQsIDB4RUUsIDB4RUUsDQotICAgIDB4RUYsIDB4RjAsIDB4RjAsIDB4RjEsIDB4RjEsIDB4RjIsIDB4RjIsIDB4RjMsIDB4RjMsIDB4RjQsIDB4RjQsIDB4RjUsIDB4RjUsIDB4RjYsIDB4RjYsIDB4RjcsDQotICAgIDB4RjcsIDB4RjgsIDB4RjgsIDB4RjksIDB4RjksIDB4RkEsIDB4RkEsIDB4RkIsIDB4RkIsIDB4RkMsIDB4RkMsIDB4RkQsIDB4RkQsIDB4RkUsIDB4RkUsIDB4RkYNCi19Ow0KLWludCBfQkxFTkQoaW50IGJsZW5kX21vZGUsIGludCBiYWNrX2NvbG9yLCBpbnQgc3JjX2NvbG9yKQ0KLXsNCi0gICAgc3dpdGNoIChibGVuZF9tb2RlKSB7DQotICAgICAgICBjYXNlIEZYRElCX0JMRU5EX05PUk1BTDoNCi0gICAgICAgICAgICByZXR1cm4gc3JjX2NvbG9yOw0KLSAgICAgICAgY2FzZSBGWERJQl9CTEVORF9NVUxUSVBMWToNCi0gICAgICAgICAgICByZXR1cm4gc3JjX2NvbG9yICogYmFja19jb2xvciAvIDI1NTsNCi0gICAgICAgIGNhc2UgRlhESUJfQkxFTkRfU0NSRUVOOg0KLSAgICAgICAgICAgIHJldHVybiBzcmNfY29sb3IgKyBiYWNrX2NvbG9yIC0gc3JjX2NvbG9yICogYmFja19jb2xvciAvIDI1NTsNCi0gICAgICAgIGNhc2UgRlhESUJfQkxFTkRfT1ZFUkxBWToNCi0gICAgICAgICAgICByZXR1cm4gX0JMRU5EKEZYRElCX0JMRU5EX0hBUkRMSUdIVCwgc3JjX2NvbG9yLCBiYWNrX2NvbG9yKTsNCi0gICAgICAgIGNhc2UgRlhESUJfQkxFTkRfREFSS0VOOg0KLSAgICAgICAgICAgIHJldHVybiBzcmNfY29sb3IgPCBiYWNrX2NvbG9yID8gc3JjX2NvbG9yIDogYmFja19jb2xvcjsNCi0gICAgICAgIGNhc2UgRlhESUJfQkxFTkRfTElHSFRFTjoNCi0gICAgICAgICAgICByZXR1cm4gc3JjX2NvbG9yID4gYmFja19jb2xvciA/IHNyY19jb2xvciA6IGJhY2tfY29sb3I7DQotICAgICAgICBjYXNlIEZYRElCX0JMRU5EX0NPTE9SRE9ER0U6IHsNCi0gICAgICAgICAgICAgICAgaWYgKHNyY19jb2xvciA9PSAyNTUpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzcmNfY29sb3I7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IGJhY2tfY29sb3IgKiAyNTUgLyAoMjU1IC0gc3JjX2NvbG9yKTsNCi0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA+IDI1NSkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDI1NTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgRlhESUJfQkxFTkRfQ09MT1JCVVJOOiB7DQotICAgICAgICAgICAgICAgIGlmIChzcmNfY29sb3IgPT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNyY19jb2xvcjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gKDI1NSAtIGJhY2tfY29sb3IpICogMjU1IC8gc3JjX2NvbG9yOw0KLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID4gMjU1KSB7DQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAyNTU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0dXJuIDI1NSAtIHJlc3VsdDsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIEZYRElCX0JMRU5EX0hBUkRMSUdIVDoNCi0gICAgICAgICAgICBpZiAoc3JjX2NvbG9yIDwgMTI4KSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAoc3JjX2NvbG9yICogYmFja19jb2xvciAqIDIpIC8gMjU1Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gX0JMRU5EKEZYRElCX0JMRU5EX1NDUkVFTiwgYmFja19jb2xvciwgMiAqIHNyY19jb2xvciAtIDI1NSk7DQotICAgICAgICBjYXNlIEZYRElCX0JMRU5EX1NPRlRMSUdIVDogew0KLSAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbG9yIDwgMTI4KSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFja19jb2xvciAtICgyNTUgLSAyICogc3JjX2NvbG9yKSAqIGJhY2tfY29sb3IgKiAoMjU1IC0gYmFja19jb2xvcikgLyAyNTUgLyAyNTU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJhY2tfY29sb3IgKyAoMiAqIHNyY19jb2xvciAtIDI1NSkgKiAoX2NvbG9yX3NxcnRbYmFja19jb2xvcl0gLSBiYWNrX2NvbG9yKSAvIDI1NTsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIEZYRElCX0JMRU5EX0RJRkZFUkVOQ0U6DQotICAgICAgICAgICAgcmV0dXJuIGJhY2tfY29sb3IgPCBzcmNfY29sb3IgPyBzcmNfY29sb3IgLSBiYWNrX2NvbG9yIDogYmFja19jb2xvciAtIHNyY19jb2xvcjsNCi0gICAgICAgIGNhc2UgRlhESUJfQkxFTkRfRVhDTFVTSU9OOg0KLSAgICAgICAgICAgIHJldHVybiBiYWNrX2NvbG9yICsgc3JjX2NvbG9yIC0gMiAqIGJhY2tfY29sb3IgKiBzcmNfY29sb3IgLyAyNTU7DQotICAgIH0NCi0gICAgcmV0dXJuIHNyY19jb2xvcjsNCi19DQotc3RydWN0IF9SR0Igew0KLSAgICBpbnQgcmVkOw0KLSAgICBpbnQgZ3JlZW47DQotICAgIGludCBibHVlOw0KLX07DQotc3RhdGljIGlubGluZSBpbnQgX0x1bShfUkdCIGNvbG9yKQ0KLXsNCi0gICAgcmV0dXJuIChjb2xvci5yZWQgKiAzMCArIGNvbG9yLmdyZWVuICogNTkgKyBjb2xvci5ibHVlICogMTEpIC8gMTAwOw0KLX0NCi1zdGF0aWMgX1JHQiBfQ2xpcENvbG9yKF9SR0IgY29sb3IpDQotew0KLSAgICBpbnQgbCA9IF9MdW0oY29sb3IpOw0KLSAgICBpbnQgbiA9IGNvbG9yLnJlZDsNCi0gICAgaWYgKGNvbG9yLmdyZWVuIDwgbikgew0KLSAgICAgICAgbiA9IGNvbG9yLmdyZWVuOw0KLSAgICB9DQotICAgIGlmIChjb2xvci5ibHVlIDwgbikgew0KLSAgICAgICAgbiA9IGNvbG9yLmJsdWU7DQotICAgIH0NCi0gICAgaW50IHggPSBjb2xvci5yZWQ7DQotICAgIGlmIChjb2xvci5ncmVlbiA+IHgpIHsNCi0gICAgICAgIHggPSBjb2xvci5ncmVlbjsNCi0gICAgfQ0KLSAgICBpZiAoY29sb3IuYmx1ZSA+IHgpIHsNCi0gICAgICAgIHggPSBjb2xvci5ibHVlOw0KLSAgICB9DQotICAgIGlmIChuIDwgMCkgew0KLSAgICAgICAgY29sb3IucmVkID0gbCArICgoY29sb3IucmVkIC0gbCkgKiBsIC8gKGwgLSBuKSk7DQotICAgICAgICBjb2xvci5ncmVlbiA9IGwgKyAoKGNvbG9yLmdyZWVuIC0gbCkgKiBsIC8gKGwgLSBuKSk7DQotICAgICAgICBjb2xvci5ibHVlID0gbCArICgoY29sb3IuYmx1ZSAtIGwpICogbCAvIChsIC0gbikpOw0KLSAgICB9DQotICAgIGlmICh4ID4gMjU1KSB7DQotICAgICAgICBjb2xvci5yZWQgPSBsICsgKChjb2xvci5yZWQgLSBsKSAqICgyNTUgLSBsKSAvICh4IC0gbCkpOw0KLSAgICAgICAgY29sb3IuZ3JlZW4gPSBsICsgKChjb2xvci5ncmVlbiAtIGwpICogKDI1NSAtIGwpIC8gKHggLSBsKSk7DQotICAgICAgICBjb2xvci5ibHVlID0gbCArICgoY29sb3IuYmx1ZSAtIGwpICogKDI1NSAtIGwpIC8gKHggLSBsKSk7DQotICAgIH0NCi0gICAgcmV0dXJuIGNvbG9yOw0KLX0NCi1zdGF0aWMgX1JHQiBfU2V0THVtKF9SR0IgY29sb3IsIGludCBsKQ0KLXsNCi0gICAgaW50IGQgPSBsIC0gX0x1bShjb2xvcik7DQotICAgIGNvbG9yLnJlZCArPSBkOw0KLSAgICBjb2xvci5ncmVlbiArPSBkOw0KLSAgICBjb2xvci5ibHVlICs9IGQ7DQotICAgIHJldHVybiBfQ2xpcENvbG9yKGNvbG9yKTsNCi19DQotc3RhdGljIGludCBfU2F0KF9SR0IgY29sb3IpDQotew0KLSAgICBpbnQgbiA9IGNvbG9yLnJlZDsNCi0gICAgaWYgKGNvbG9yLmdyZWVuIDwgbikgew0KLSAgICAgICAgbiA9IGNvbG9yLmdyZWVuOw0KLSAgICB9DQotICAgIGlmIChjb2xvci5ibHVlIDwgbikgew0KLSAgICAgICAgbiA9IGNvbG9yLmJsdWU7DQotICAgIH0NCi0gICAgaW50IHggPSBjb2xvci5yZWQ7DQotICAgIGlmIChjb2xvci5ncmVlbiA+IHgpIHsNCi0gICAgICAgIHggPSBjb2xvci5ncmVlbjsNCi0gICAgfQ0KLSAgICBpZiAoY29sb3IuYmx1ZSA+IHgpIHsNCi0gICAgICAgIHggPSBjb2xvci5ibHVlOw0KLSAgICB9DQotICAgIHJldHVybiB4IC0gbjsNCi19DQotc3RhdGljIF9SR0IgX1NldFNhdChfUkdCIGNvbG9yLCBpbnQgcykNCi17DQotICAgIGludCogbWF4ID0gJmNvbG9yLnJlZDsNCi0gICAgaW50KiBtaWQgPSAmY29sb3IucmVkOw0KLSAgICBpbnQqIG1pbiA9ICZjb2xvci5yZWQ7DQotICAgIGlmIChjb2xvci5ncmVlbiA+ICptYXgpIHsNCi0gICAgICAgIG1heCA9ICZjb2xvci5ncmVlbjsNCi0gICAgfQ0KLSAgICBpZiAoY29sb3IuYmx1ZSA+ICptYXgpIHsNCi0gICAgICAgIG1heCA9ICZjb2xvci5ibHVlOw0KLSAgICB9DQotICAgIGlmIChjb2xvci5ncmVlbiA8ICptaW4pIHsNCi0gICAgICAgIG1pbiA9ICZjb2xvci5ncmVlbjsNCi0gICAgfQ0KLSAgICBpZiAoY29sb3IuYmx1ZSA8ICptaW4pIHsNCi0gICAgICAgIG1pbiA9ICZjb2xvci5ibHVlOw0KLSAgICB9DQotICAgIGlmICgqbWF4ID09ICptaW4pIHsNCi0gICAgICAgIGNvbG9yLnJlZCA9IDA7DQotICAgICAgICBjb2xvci5ncmVlbiA9IDA7DQotICAgICAgICBjb2xvci5ibHVlID0gMDsNCi0gICAgICAgIHJldHVybiBjb2xvcjsNCi0gICAgfQ0KLSAgICBpZiAobWF4ID09ICZjb2xvci5yZWQpIHsNCi0gICAgICAgIGlmIChtaW4gPT0gJmNvbG9yLmdyZWVuKSB7DQotICAgICAgICAgICAgbWlkID0gJmNvbG9yLmJsdWU7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIG1pZCA9ICZjb2xvci5ncmVlbjsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIGlmIChtYXggPT0gJmNvbG9yLmdyZWVuKSB7DQotICAgICAgICBpZiAobWluID09ICZjb2xvci5yZWQpIHsNCi0gICAgICAgICAgICBtaWQgPSAmY29sb3IuYmx1ZTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbWlkID0gJmNvbG9yLnJlZDsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGlmIChtaW4gPT0gJmNvbG9yLmdyZWVuKSB7DQotICAgICAgICAgICAgbWlkID0gJmNvbG9yLnJlZDsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbWlkID0gJmNvbG9yLmdyZWVuOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmICgqbWF4ID4gKm1pbikgew0KLSAgICAgICAgKm1pZCA9ICgqbWlkIC0gKm1pbikgKiBzIC8gKCptYXggLSAqbWluKTsNCi0gICAgICAgICptYXggPSBzOw0KLSAgICAgICAgKm1pbiA9IDA7DQotICAgIH0NCi0gICAgcmV0dXJuIGNvbG9yOw0KLX0NCi12b2lkIF9SR0JfQmxlbmQoaW50IGJsZW5kX21vZGUsIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIEZYX0JZVEUqIGRlc3Rfc2NhbiwgaW50IHJlc3VsdHNbM10pDQotew0KLSAgICBfUkdCIHNyYywgYmFjaywgcmVzdWx0Ow0KLSAgICBzcmMucmVkID0gc3JjX3NjYW5bMl07DQotICAgIHNyYy5ncmVlbiA9IHNyY19zY2FuWzFdOw0KLSAgICBzcmMuYmx1ZSA9IHNyY19zY2FuWzBdOw0KLSAgICBiYWNrLnJlZCA9IGRlc3Rfc2NhblsyXTsNCi0gICAgYmFjay5ncmVlbiA9IGRlc3Rfc2NhblsxXTsNCi0gICAgYmFjay5ibHVlID0gZGVzdF9zY2FuWzBdOw0KLSAgICBzd2l0Y2ggKGJsZW5kX21vZGUpIHsNCi0gICAgICAgIGNhc2UgRlhESUJfQkxFTkRfSFVFOg0KLSAgICAgICAgICAgIHJlc3VsdCA9IF9TZXRMdW0oX1NldFNhdChzcmMsIF9TYXQoYmFjaykpLCBfTHVtKGJhY2spKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgRlhESUJfQkxFTkRfU0FUVVJBVElPTjoNCi0gICAgICAgICAgICByZXN1bHQgPSBfU2V0THVtKF9TZXRTYXQoYmFjaywgX1NhdChzcmMpKSwgX0x1bShiYWNrKSk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIEZYRElCX0JMRU5EX0NPTE9SOg0KLSAgICAgICAgICAgIHJlc3VsdCA9IF9TZXRMdW0oc3JjLCBfTHVtKGJhY2spKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgRlhESUJfQkxFTkRfTFVNSU5PU0lUWToNCi0gICAgICAgICAgICByZXN1bHQgPSBfU2V0THVtKGJhY2ssIF9MdW0oc3JjKSk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgIH0NCi0gICAgcmVzdWx0c1swXSA9IHJlc3VsdC5ibHVlOw0KLSAgICByZXN1bHRzWzFdID0gcmVzdWx0LmdyZWVuOw0KLSAgICByZXN1bHRzWzJdID0gcmVzdWx0LnJlZDsNCi19DQotaW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd19BcmdiMk1hc2soRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHBpeGVsX2NvdW50LCBGWF9MUENCWVRFIGNsaXBfc2NhbikNCi17DQotICAgIHNyY19zY2FuICs9IDM7DQotICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgIGludCBzcmNfYWxwaGEgPSAqc3JjX3NjYW47DQotICAgICAgICBpZiAoY2xpcF9zY2FuKSB7DQotICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICB9DQotICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSAqZGVzdF9zY2FuOw0KLSAgICAgICAgaWYgKCFiYWNrX2FscGhhKSB7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IHNyY19hbHBoYTsNCi0gICAgICAgIH0gZWxzZSBpZiAoc3JjX2FscGhhKSB7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgc3JjX3NjYW4gKz0gNDsNCi0gICAgfQ0KLX0NCi12b2lkIF9Db21wb3NpdGVSb3dfUmdiYTJNYXNrKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX2FscGhhX3NjYW4sIGludCBwaXhlbF9jb3VudCwgRlhfTFBDQllURSBjbGlwX3NjYW4pDQotew0KLSAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICBpbnQgc3JjX2FscGhhID0gKnNyY19hbHBoYV9zY2FuKys7DQotICAgICAgICBpZiAoY2xpcF9zY2FuKSB7DQotICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICB9DQotICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSAqZGVzdF9zY2FuOw0KLSAgICAgICAgaWYgKCFiYWNrX2FscGhhKSB7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IHNyY19hbHBoYTsNCi0gICAgICAgIH0gZWxzZSBpZiAoc3JjX2FscGhhKSB7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICB9DQotfQ0KLXZvaWQgX0NvbXBvc2l0ZVJvd19SZ2IyTWFzayhGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuKQ0KLXsNCi0gICAgaWYgKGNsaXBfc2Nhbikgew0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsgaSArKykgew0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9VTklPTigqZGVzdF9zY2FuLCAqY2xpcF9zY2FuKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgY2xpcF9zY2FuICsrOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgRlhTWVNfbWVtc2V0OChkZXN0X3NjYW4sIDB4ZmYsIHdpZHRoKTsNCi0gICAgfQ0KLX0NCi12b2lkIF9Db21wb3NpdGVSb3dfQXJnYjJHcmF5YShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgcGl4ZWxfY291bnQsIGludCBibGVuZF90eXBlLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19hbHBoYV9zY2FuLCBGWF9MUEJZVEUgZHN0X2FscGhhX3NjYW4sIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBJQ29kZWNfSWNjTW9kdWxlKiBwSWNjTW9kdWxlID0gTlVMTDsNCi0gICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsNCi0gICAgICAgIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsNCi0gICAgfQ0KLSAgICBpZiAoYmxlbmRfdHlwZSkgew0KLSAgICAgICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsNCi0gICAgICAgIGludCBibGVuZGVkX2NvbG9yOw0KLSAgICAgICAgaWYgKHNyY19hbHBoYV9zY2FuKSB7DQotICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSAqZHN0X2FscGhhX3NjYW47DQotICAgICAgICAgICAgICAgIGlmIChiYWNrX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSAqc3JjX2FscGhhX3NjYW4rKzsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqIHNyY19hbHBoYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGlmIChzcmNfYWxwaGEpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocEljY1RyYW5zZm9ybSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBkZXN0X3NjYW4sIHNyY19zY2FuLCAxKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gIEZYUkdCMkdSQVkoc3JjX3NjYW5bMl0sIHNyY19zY2FuWzFdLCAqc3JjX3NjYW4pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAqZHN0X2FscGhhX3NjYW4gPSBzcmNfYWxwaGE7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgICAgICBkc3RfYWxwaGFfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBGWF9CWVRFIHNyY19hbHBoYSA9ICpzcmNfYWxwaGFfc2NhbisrOw0KLSAgICAgICAgICAgICAgICBpZiAoY2xpcF9zY2FuKSB7DQotICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqIHNyY19hbHBoYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgICAgIGRzdF9hbHBoYV9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICpkc3RfYWxwaGFfc2NhbiA9IEZYRElCX0FMUEhBX1VOSU9OKGJhY2tfYWxwaGEsIHNyY19hbHBoYSk7DQotICAgICAgICAgICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvICgqZHN0X2FscGhhX3NjYW4pOw0KLSAgICAgICAgICAgICAgICBGWF9CWVRFIGdyYXk7DQotICAgICAgICAgICAgICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7DQotICAgICAgICAgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCAmZ3JheSwgc3JjX3NjYW4sIDEpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgZ3JheSA9IEZYUkdCMkdSQVkoc3JjX3NjYW5bMl0sIHNyY19zY2FuWzFdLCAqc3JjX3NjYW4pOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChiTm9uc2VwYXJhYmxlQmxlbmQpIHsNCi0gICAgICAgICAgICAgICAgICAgIGJsZW5kZWRfY29sb3IgPSBibGVuZF90eXBlID09IEZYRElCX0JMRU5EX0xVTUlOT1NJVFkgPyBncmF5IDogKmRlc3Rfc2NhbjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBncmF5ID0gYk5vbnNlcGFyYWJsZUJsZW5kID8gYmxlbmRlZF9jb2xvciA6IF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCBncmF5KTsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGdyYXksIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICBkc3RfYWxwaGFfc2NhbisrOw0KLSAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZQ0KLSAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gKmRzdF9hbHBoYV9zY2FuOw0KLSAgICAgICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gc3JjX3NjYW5bM107DQotICAgICAgICAgICAgICAgICAgICBpZiAoY2xpcF9zY2FuKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2FscGhhKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgZGVzdF9zY2FuLCBzcmNfc2NhbiwgMSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9ICBGWFJHQjJHUkFZKHNyY19zY2FuWzJdLCBzcmNfc2NhblsxXSwgKnNyY19zY2FuKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRzdF9hbHBoYV9zY2FuID0gc3JjX2FscGhhOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICAgICAgZHN0X2FscGhhX3NjYW4gKys7DQotICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgRlhfQllURSBzcmNfYWxwaGEgPSBzcmNfc2NhblszXTsNCi0gICAgICAgICAgICAgICAgaWYgKGNsaXBfc2Nhbikgew0KLSAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgICAgICBkc3RfYWxwaGFfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAqZHN0X2FscGhhX3NjYW4gPSBGWERJQl9BTFBIQV9VTklPTihiYWNrX2FscGhhLCBzcmNfYWxwaGEpOw0KLSAgICAgICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyAoKmRzdF9hbHBoYV9zY2FuKTsNCi0gICAgICAgICAgICAgICAgRlhfQllURSBncmF5Ow0KLSAgICAgICAgICAgICAgICBpZiAocEljY1RyYW5zZm9ybSkgew0KLSAgICAgICAgICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgJmdyYXksIHNyY19zY2FuLCAxKTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIGdyYXkgPSBGWFJHQjJHUkFZKHNyY19zY2FuWzJdLCBzcmNfc2NhblsxXSwgKnNyY19zY2FuKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgIGRzdF9hbHBoYV9zY2FuKys7DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChzcmNfYWxwaGFfc2Nhbikgew0KLSAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgew0KLSAgICAgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9ICpkc3RfYWxwaGFfc2NhbjsNCi0gICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSAqc3JjX2FscGhhX3NjYW4rKzsNCi0gICAgICAgICAgICAgICAgaWYgKGNsaXBfc2Nhbikgew0KLSAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYSkgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBkZXN0X3NjYW4sIHNyY19zY2FuLCAxKTsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9ICBGWFJHQjJHUkFZKHNyY19zY2FuWzJdLCBzcmNfc2NhblsxXSwgKnNyY19zY2FuKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICpkc3RfYWxwaGFfc2NhbiA9IHNyY19hbHBoYTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgIGRzdF9hbHBoYV9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgRlhfQllURSBzcmNfYWxwaGEgPSAqc3JjX2FscGhhX3NjYW4rKzsNCi0gICAgICAgICAgICBpZiAoY2xpcF9zY2FuKSB7DQotICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICBkc3RfYWxwaGFfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICpkc3RfYWxwaGFfc2NhbiA9IEZYRElCX0FMUEhBX1VOSU9OKGJhY2tfYWxwaGEsIHNyY19hbHBoYSk7DQotICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gKCpkc3RfYWxwaGFfc2Nhbik7DQotICAgICAgICAgICAgRlhfQllURSBncmF5Ow0KLSAgICAgICAgICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7DQotICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sICZncmF5LCBzcmNfc2NhbiwgMSk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgZ3JheSA9IEZYUkdCMkdSQVkoc3JjX3NjYW5bMl0sIHNyY19zY2FuWzFdLCAqc3JjX3NjYW4pOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICBkc3RfYWxwaGFfc2NhbisrOw0KLSAgICAgICAgICAgIHNyY19zY2FuICs9IDM7DQotICAgICAgICB9DQotICAgIH0gZWxzZQ0KLSAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgew0KLSAgICAgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9ICpkc3RfYWxwaGFfc2NhbjsNCi0gICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBzcmNfc2NhblszXTsNCi0gICAgICAgICAgICAgICAgaWYgKGNsaXBfc2Nhbikgew0KLSAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYSkgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBkZXN0X3NjYW4sIHNyY19zY2FuLCAxKTsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9ICBGWFJHQjJHUkFZKHNyY19zY2FuWzJdLCBzcmNfc2NhblsxXSwgKnNyY19zY2FuKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICpkc3RfYWxwaGFfc2NhbiA9IHNyY19hbHBoYTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgIGRzdF9hbHBoYV9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgRlhfQllURSBzcmNfYWxwaGEgPSBzcmNfc2NhblszXTsNCi0gICAgICAgICAgICBpZiAoY2xpcF9zY2FuKSB7DQotICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICBkc3RfYWxwaGFfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICpkc3RfYWxwaGFfc2NhbiA9IEZYRElCX0FMUEhBX1VOSU9OKGJhY2tfYWxwaGEsIHNyY19hbHBoYSk7DQotICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gKCpkc3RfYWxwaGFfc2Nhbik7DQotICAgICAgICAgICAgRlhfQllURSBncmF5Ow0KLSAgICAgICAgICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7DQotICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sICZncmF5LCBzcmNfc2NhbiwgMSk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgZ3JheSA9IEZYUkdCMkdSQVkoc3JjX3NjYW5bMl0sIHNyY19zY2FuWzFdLCAqc3JjX3NjYW4pOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICBkc3RfYWxwaGFfc2NhbisrOw0KLSAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7DQotICAgICAgICB9DQotfQ0KLWlubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfQXJnYjJHcmF5KEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCBwaXhlbF9jb3VudCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxlbmRfdHlwZSwgRlhfTFBDQllURSBjbGlwX3NjYW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfYWxwaGFfc2Nhbiwgdm9pZCogcEljY1RyYW5zZm9ybSkNCi17DQotICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBOVUxMOw0KLSAgICBGWF9CWVRFIGdyYXk7DQotICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7DQotICAgICAgICBwSWNjTW9kdWxlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCk7DQotICAgIH0NCi0gICAgaWYgKGJsZW5kX3R5cGUpIHsNCi0gICAgICAgIEZYX0JPT0wgYk5vbnNlcGFyYWJsZUJsZW5kID0gYmxlbmRfdHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEU7DQotICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcjsNCi0gICAgICAgIGlmIChzcmNfYWxwaGFfc2Nhbikgew0KLSAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9ICpzcmNfYWxwaGFfc2NhbisrOw0KLSAgICAgICAgICAgICAgICBpZiAoY2xpcF9zY2FuKSB7DQotICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqIHNyY19hbHBoYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoc3JjX2FscGhhKSB7DQotICAgICAgICAgICAgICAgICAgICBpZiAocEljY1RyYW5zZm9ybSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sICZncmF5LCBzcmNfc2NhbiwgMSk7DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdyYXkgPSBGWFJHQjJHUkFZKHNyY19zY2FuWzJdLCBzcmNfc2NhblsxXSwgKnNyY19zY2FuKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGlmIChiTm9uc2VwYXJhYmxlQmxlbmQpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBibGVuZGVkX2NvbG9yID0gYmxlbmRfdHlwZSA9PSBGWERJQl9CTEVORF9MVU1JTk9TSVRZID8gZ3JheSA6ICpkZXN0X3NjYW47DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBncmF5ID0gYk5vbnNlcGFyYWJsZUJsZW5kID8gYmxlbmRlZF9jb2xvciA6IF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCBncmF5KTsNCi0gICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBncmF5LCBzcmNfYWxwaGEpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2UNCi0gICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBzcmNfc2NhblszXTsNCi0gICAgICAgICAgICAgICAgaWYgKGNsaXBfc2Nhbikgew0KLSAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYSkgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCAmZ3JheSwgc3JjX3NjYW4sIDEpOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBncmF5ID0gRlhSR0IyR1JBWShzcmNfc2NhblsyXSwgc3JjX3NjYW5bMV0sICpzcmNfc2Nhbik7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRlZF9jb2xvciA9IGJsZW5kX3R5cGUgPT0gRlhESUJfQkxFTkRfTFVNSU5PU0lUWSA/IGdyYXkgOiAqZGVzdF9zY2FuOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgZ3JheSA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3IgOiBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2NhbiwgZ3JheSk7DQotICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgc3JjX2FscGhhKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChzcmNfYWxwaGFfc2Nhbikgew0KLSAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgew0KLSAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSAqc3JjX2FscGhhX3NjYW4rKzsNCi0gICAgICAgICAgICBpZiAoY2xpcF9zY2FuKSB7DQotICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoc3JjX2FscGhhKSB7DQotICAgICAgICAgICAgICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7DQotICAgICAgICAgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCAmZ3JheSwgc3JjX3NjYW4sIDEpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgZ3JheSA9IEZYUkdCMkdSQVkoc3JjX3NjYW5bMl0sIHNyY19zY2FuWzFdLCAqc3JjX3NjYW4pOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBncmF5LCBzcmNfYWxwaGEpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlDQotICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWzNdOw0KLSAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsNCi0gICAgICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChzcmNfYWxwaGEpIHsNCi0gICAgICAgICAgICAgICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsNCi0gICAgICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sICZncmF5LCBzcmNfc2NhbiwgMSk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBncmF5ID0gRlhSR0IyR1JBWShzcmNfc2NhblsyXSwgc3JjX3NjYW5bMV0sICpzcmNfc2Nhbik7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGdyYXksIHNyY19hbHBoYSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICBzcmNfc2NhbiArPSA0Ow0KLSAgICAgICAgfQ0KLX0NCi1pbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93X1JnYjJHcmF5KEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCBzcmNfQnBwLCBpbnQgcGl4ZWxfY291bnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxlbmRfdHlwZSwgRlhfTFBDQllURSBjbGlwX3NjYW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBwSWNjVHJhbnNmb3JtKQ0KLXsNCi0gICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IE5VTEw7DQotICAgIEZYX0JZVEUgZ3JheTsNCi0gICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsNCi0gICAgICAgIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsNCi0gICAgfQ0KLSAgICBpZiAoYmxlbmRfdHlwZSkgew0KLSAgICAgICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsNCi0gICAgICAgIGludCBibGVuZGVkX2NvbG9yOw0KLSAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgew0KLSAgICAgICAgICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7DQotICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sICZncmF5LCBzcmNfc2NhbiwgMSk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgZ3JheSA9IEZYUkdCMkdSQVkoc3JjX3NjYW5bMl0sIHNyY19zY2FuWzFdLCAqc3JjX3NjYW4pOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7DQotICAgICAgICAgICAgICAgIGJsZW5kZWRfY29sb3IgPSBibGVuZF90eXBlID09IEZYRElCX0JMRU5EX0xVTUlOT1NJVFkgPyBncmF5IDogKmRlc3Rfc2NhbjsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZ3JheSA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3IgOiBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2NhbiwgZ3JheSk7DQotICAgICAgICAgICAgaWYgKGNsaXBfc2NhbiAmJiBjbGlwX3NjYW5bY29sXSA8IDI1NSkgew0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgY2xpcF9zY2FuW2NvbF0pOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBncmF5Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX0JwcDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICBpZiAocEljY1RyYW5zZm9ybSkgew0KLSAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sICZncmF5LCBzcmNfc2NhbiwgMSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGdyYXkgPSBGWFJHQjJHUkFZKHNyY19zY2FuWzJdLCBzcmNfc2NhblsxXSwgKnNyY19zY2FuKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChjbGlwX3NjYW4gJiYgY2xpcF9zY2FuW2NvbF0gPCAyNTUpIHsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgY2xpcF9zY2FuW2NvbF0pOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gZ3JheTsNCi0gICAgICAgIH0NCi0gICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7DQotICAgIH0NCi19DQotdm9pZCBfQ29tcG9zaXRlUm93X1JnYjJHcmF5YShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgc3JjX0JwcCwgaW50IHBpeGVsX2NvdW50LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsZW5kX3R5cGUsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3RfYWxwaGFfc2Nhbiwgdm9pZCogcEljY1RyYW5zZm9ybSkNCi17DQotICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBOVUxMOw0KLSAgICBpZiAocEljY1RyYW5zZm9ybSkgew0KLSAgICAgICAgcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOw0KLSAgICB9DQotICAgIGlmIChibGVuZF90eXBlKSB7DQotICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcjsNCi0gICAgICAgIEZYX0JPT0wgYk5vbnNlcGFyYWJsZUJsZW5kID0gYmxlbmRfdHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEU7DQotICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICAgICAgaW50IGJhY2tfYWxwaGEgPSAqZGVzdF9hbHBoYV9zY2FuOw0KLSAgICAgICAgICAgIGlmIChiYWNrX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsNCi0gICAgICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIDEpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYUkdCMkdSQVkoc3JjX3NjYW5bMl0sIHNyY19zY2FuWzFdLCAqc3JjX3NjYW4pOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgZGVzdF9hbHBoYV9zY2FuKys7DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gMjU1Ow0KLSAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsNCi0gICAgICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF07DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX0JwcDsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4rKyA9IGRlc3RfYWxwaGE7DQotICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsNCi0gICAgICAgICAgICBGWF9CWVRFIGdyYXk7DQotICAgICAgICAgICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsNCi0gICAgICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgJmdyYXksIHNyY19zY2FuLCAxKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBncmF5ID0gRlhSR0IyR1JBWShzcmNfc2NhblsyXSwgc3JjX3NjYW5bMV0sICpzcmNfc2Nhbik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChiTm9uc2VwYXJhYmxlQmxlbmQpIHsNCi0gICAgICAgICAgICAgICAgYmxlbmRlZF9jb2xvciA9IGJsZW5kX3R5cGUgPT0gRlhESUJfQkxFTkRfTFVNSU5PU0lUWSA/IGdyYXkgOiAqZGVzdF9zY2FuOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBncmF5ID0gYk5vbnNlcGFyYWJsZUJsZW5kID8gYmxlbmRlZF9jb2xvciA6IF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCBncmF5KTsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfQnBwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgIGludCBzcmNfYWxwaGEgPSAyNTU7DQotICAgICAgICBpZiAoY2xpcF9zY2FuKSB7DQotICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF07DQotICAgICAgICB9DQotICAgICAgICBpZiAoc3JjX2FscGhhID09IDI1NSkgew0KLSAgICAgICAgICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7DQotICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIDEpOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWFJHQjJHUkFZKHNyY19zY2FuWzJdLCBzcmNfc2NhblsxXSwgKnNyY19zY2FuKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4rKyA9IDI1NTsNCi0gICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfQnBwOw0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsNCi0gICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfQnBwOw0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW50IGJhY2tfYWxwaGEgPSAqZGVzdF9hbHBoYV9zY2FuOw0KLSAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICAqZGVzdF9hbHBoYV9zY2FuKysgPSBkZXN0X2FscGhhOw0KLSAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsNCi0gICAgICAgIEZYX0JZVEUgZ3JheTsNCi0gICAgICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7DQotICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgJmdyYXksIHNyY19zY2FuLCAxKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgZ3JheSA9IEZYUkdCMkdSQVkoc3JjX3NjYW5bMl0sIHNyY19zY2FuWzFdLCAqc3JjX3NjYW4pOw0KLSAgICAgICAgfQ0KLSAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGdyYXksIGFscGhhX3JhdGlvKTsNCi0gICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7DQotICAgIH0NCi19DQotdm9pZCBfQ29tcG9zaXRlUm93X0FyZ2IyQXJnYihGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgcGl4ZWxfY291bnQsIGludCBibGVuZF90eXBlLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X2FscGhhX3NjYW4sIEZYX0xQQ0JZVEUgc3JjX2FscGhhX3NjYW4pDQotew0KLSAgICBpbnQgYmxlbmRlZF9jb2xvcnNbM107DQotICAgIEZYX0JPT0wgYk5vbnNlcGFyYWJsZUJsZW5kID0gYmxlbmRfdHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEU7DQotICAgIGlmIChkZXN0X2FscGhhX3NjYW4gPT0gTlVMTCkgew0KLSAgICAgICAgaWYgKHNyY19hbHBoYV9zY2FuID09IE5VTEwpIHsNCi0gICAgICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSAwOw0KLSAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgYmFja19hbHBoYSA9IGRlc3Rfc2NhblszXTsNCi0gICAgICAgICAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNsaXBfc2Nhbikgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqIHNyY19zY2FuWzNdIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYQVJHQl9TRVRESUIoZGVzdF9zY2FuLCAoRlhBUkdCX0dFVERJQihzcmNfc2NhbikgJiAweGZmZmZmZikgfCAoc3JjX2FscGhhIDw8IDI0KSk7DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYQVJHQl9DT1BZKGRlc3Rfc2Nhbiwgc3JjX3NjYW4pOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgRlhfQllURSBzcmNfYWxwaGE7DQotICAgICAgICAgICAgICAgIGlmIChjbGlwX3NjYW4gPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bM107DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqIHNyY19zY2FuWzNdIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IGRlc3RfYWxwaGE7DQotICAgICAgICAgICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvIGRlc3RfYWxwaGE7DQotICAgICAgICAgICAgICAgIGlmIChiTm9uc2VwYXJhYmxlQmxlbmQpIHsNCi0gICAgICAgICAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX3NjYW4sIGRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnMpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbG9yID0gMDsgY29sb3IgPCAzOyBjb2xvciArKykgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJsZW5kX3R5cGUpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxlbmRlZCA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3JzW2NvbG9yXSA6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2NhbiwgKnNyY19zY2FuKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBibGVuZGVkID0gRlhESUJfQUxQSEFfTUVSR0UoKnNyY19zY2FuLCBibGVuZGVkLCBiYWNrX2FscGhhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZCwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgKnNyY19zY2FuLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSBkZXN0X3NjYW5bM107DQotICAgICAgICAgICAgICAgIGlmIChiYWNrX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiAoKnNyY19hbHBoYV9zY2FuKSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBGWEFSR0JfU0VURElCKGRlc3Rfc2NhbiwgRlhBUkdCX01BS0UoKHNyY19hbHBoYSA8PCAyNCksIHNyY19zY2FuWzJdLCBzcmNfc2NhblsxXSwgKnNyY19zY2FuKSk7DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYQVJHQl9TRVRESUIoZGVzdF9zY2FuLCBGWEFSR0JfTUFLRSgoKnNyY19hbHBoYV9zY2FuIDw8IDI0KSwgc3JjX3NjYW5bMl0sIHNyY19zY2FuWzFdLCAqc3JjX3NjYW4pKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYV9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgRlhfQllURSBzcmNfYWxwaGE7DQotICAgICAgICAgICAgICAgIGlmIChjbGlwX3NjYW4gPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gKnNyY19hbHBoYV9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiAoKnNyY19hbHBoYV9zY2FuICsrKSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW5bM10gPSBkZXN0X2FscGhhOw0KLSAgICAgICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOw0KLSAgICAgICAgICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7DQotICAgICAgICAgICAgICAgICAgICBfUkdCX0JsZW5kKGJsZW5kX3R5cGUsIHNyY19zY2FuLCBkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2xvciA9IDA7IGNvbG9yIDwgMzsgY29sb3IgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChibGVuZF90eXBlKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBiTm9uc2VwYXJhYmxlQmxlbmQgPyBibGVuZGVkX2NvbG9yc1tjb2xvcl0gOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sICpzcmNfc2Nhbik7DQotICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRlZCA9IEZYRElCX0FMUEhBX01FUkdFKCpzcmNfc2NhbiwgYmxlbmRlZCwgYmFja19hbHBoYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWQsIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sICpzcmNfc2NhbiwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKys7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGlmIChzcmNfYWxwaGFfc2Nhbikgew0KLSAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gKmRlc3RfYWxwaGFfc2NhbjsNCi0gICAgICAgICAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNsaXBfc2Nhbikgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqICgqc3JjX2FscGhhX3NjYW4pIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4gPSBzcmNfYWxwaGE7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4gPSAqc3JjX2FscGhhX3NjYW47DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4gKys7DQotICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGFfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIEZYX0JZVEUgc3JjX2FscGhhOw0KLSAgICAgICAgICAgICAgICBpZiAoY2xpcF9zY2FuID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9ICpzcmNfYWxwaGFfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdICogKCpzcmNfYWxwaGFfc2NhbiArKykgLyAyNTU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4gKys7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiArKyA9IGRlc3RfYWxwaGE7DQotICAgICAgICAgICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvIGRlc3RfYWxwaGE7DQotICAgICAgICAgICAgICAgIGlmIChiTm9uc2VwYXJhYmxlQmxlbmQpIHsNCi0gICAgICAgICAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX3NjYW4sIGRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnMpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbG9yID0gMDsgY29sb3IgPCAzOyBjb2xvciArKykgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJsZW5kX3R5cGUpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxlbmRlZCA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3JzW2NvbG9yXSA6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2NhbiwgKnNyY19zY2FuKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBibGVuZGVkID0gRlhESUJfQUxQSEFfTUVSR0UoKnNyY19zY2FuLCBibGVuZGVkLCBiYWNrX2FscGhhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZCwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgKnNyY19zY2FuLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSAqZGVzdF9hbHBoYV9zY2FuOw0KLSAgICAgICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICBpZiAoY2xpcF9zY2FuKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdICogc3JjX3NjYW5bM10gLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiA9IHNyY19hbHBoYTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiA9IHNyY19zY2FuWzNdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9hbHBoYV9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKys7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBGWF9CWVRFIHNyY19hbHBoYTsNCi0gICAgICAgICAgICAgICAgaWYgKGNsaXBfc2NhbiA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblszXTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdICogc3JjX3NjYW5bM10gLyAyNTU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4gKys7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbisrID0gZGVzdF9hbHBoYTsNCi0gICAgICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsNCi0gICAgICAgICAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgew0KLSAgICAgICAgICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9ycyk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBpZiAoYmxlbmRfdHlwZSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBibGVuZGVkID0gYk5vbnNlcGFyYWJsZUJsZW5kID8gYmxlbmRlZF9jb2xvcnNbY29sb3JdIDoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCAqc3JjX3NjYW4pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kZWQgPSBGWERJQl9BTFBIQV9NRVJHRSgqc3JjX3NjYW4sIGJsZW5kZWQsIGJhY2tfYWxwaGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCAqc3JjX3NjYW4sIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi12b2lkIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfQmxlbmRfTm9DbGlwKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgaW50IGJsZW5kX3R5cGUsIGludCBzcmNfQnBwLA0KLSAgICAgICAgRlhfTFBCWVRFIGRlc3RfYWxwaGFfc2NhbikNCi17DQotICAgIGludCBibGVuZGVkX2NvbG9yc1szXTsNCi0gICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsNCi0gICAgaW50IHNyY19nYXAgPSBzcmNfQnBwIC0gMzsNCi0gICAgaWYgKGRlc3RfYWxwaGFfc2NhbiA9PSBOVUxMKSB7DQotICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gZGVzdF9zY2FuWzNdOw0KLSAgICAgICAgICAgIGlmIChiYWNrX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgaWYgKHNyY19CcHAgPT0gNCkgew0KLSAgICAgICAgICAgICAgICAgICAgRlhBUkdCX1NFVERJQihkZXN0X3NjYW4sIDB4ZmYwMDAwMDAgfCBGWEFSR0JfR0VURElCKHNyY19zY2FuKSk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBGWEFSR0JfU0VURElCKGRlc3Rfc2NhbiwgRlhBUkdCX01BS0UoMHhmZiwgc3JjX3NjYW5bMl0sIHNyY19zY2FuWzFdLCBzcmNfc2NhblswXSkpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfQnBwOw0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZGVzdF9zY2FuWzNdID0gMHhmZjsNCi0gICAgICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7DQotICAgICAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX3NjYW4sIGRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnMpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBmb3IgKGludCBjb2xvciA9IDA7IGNvbG9yIDwgMzsgY29sb3IgKyspIHsNCi0gICAgICAgICAgICAgICAgaW50IHNyY19jb2xvciA9ICpzcmNfc2NhbjsNCi0gICAgICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBiTm9uc2VwYXJhYmxlQmxlbmQgPyBibGVuZGVkX2NvbG9yc1tjb2xvcl0gOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCBzcmNfY29sb3IpOw0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0Uoc3JjX2NvbG9yLCBibGVuZGVkLCBiYWNrX2FscGhhKTsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICBzcmNfc2NhbiArKzsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19nYXA7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gKmRlc3RfYWxwaGFfc2NhbjsNCi0gICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOw0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7DQotICAgICAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4rKyA9IDB4ZmY7DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19nYXA7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuKysgPSAweGZmOw0KLSAgICAgICAgICAgIGlmIChiTm9uc2VwYXJhYmxlQmxlbmQpIHsNCi0gICAgICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9ycyk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGZvciAoaW50IGNvbG9yID0gMDsgY29sb3IgPCAzOyBjb2xvciArKykgew0KLSAgICAgICAgICAgICAgICBpbnQgc3JjX2NvbG9yID0gKnNyY19zY2FuOw0KLSAgICAgICAgICAgICAgICBpbnQgYmxlbmRlZCA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3JzW2NvbG9yXSA6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sIHNyY19jb2xvcik7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRShzcmNfY29sb3IsIGJsZW5kZWQsIGJhY2tfYWxwaGEpOw0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfZ2FwOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLWlubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfQmxlbmRfQ2xpcChGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBibGVuZF90eXBlLCBpbnQgc3JjX0JwcCwgRlhfTFBDQllURSBjbGlwX3NjYW4sDQotICAgICAgICBGWF9MUEJZVEUgZGVzdF9hbHBoYV9zY2FuKQ0KLXsNCi0gICAgaW50IGJsZW5kZWRfY29sb3JzWzNdOw0KLSAgICBGWF9CT09MIGJOb25zZXBhcmFibGVCbGVuZCA9IGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFOw0KLSAgICBpbnQgc3JjX2dhcCA9IHNyY19CcHAgLSAzOw0KLSAgICBpZiAoZGVzdF9hbHBoYV9zY2FuID09IE5VTEwpIHsNCi0gICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gKmNsaXBfc2NhbiArKzsNCi0gICAgICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSBkZXN0X3NjYW5bM107DQotICAgICAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOw0KLSAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfZ2FwOw0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bM10gPSBkZXN0X2FscGhhOw0KLSAgICAgICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvIGRlc3RfYWxwaGE7DQotICAgICAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgew0KLSAgICAgICAgICAgICAgICBfUkdCX0JsZW5kKGJsZW5kX3R5cGUsIHNyY19zY2FuLCBkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7DQotICAgICAgICAgICAgICAgIGludCBzcmNfY29sb3IgPSAqc3JjX3NjYW47DQotICAgICAgICAgICAgICAgIGludCBibGVuZGVkID0gYk5vbnNlcGFyYWJsZUJsZW5kID8gYmxlbmRlZF9jb2xvcnNbY29sb3JdIDoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX2NvbG9yKTsNCi0gICAgICAgICAgICAgICAgYmxlbmRlZCA9IEZYRElCX0FMUEhBX01FUkdFKHNyY19jb2xvciwgYmxlbmRlZCwgYmFja19hbHBoYSk7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgc3JjX3NjYW4gKys7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfZ2FwOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSAqY2xpcF9zY2FuICsrOw0KLSAgICAgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9ICpkZXN0X2FscGhhX3NjYW47DQotICAgICAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOw0KLSAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfZ2FwOw0KLSAgICAgICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4rKzsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgZGVzdF9hbHBoYV9zY2FuKys7DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsNCi0gICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuKysgPSBkZXN0X2FscGhhOw0KLSAgICAgICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvIGRlc3RfYWxwaGE7DQotICAgICAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgew0KLSAgICAgICAgICAgICAgICBfUkdCX0JsZW5kKGJsZW5kX3R5cGUsIHNyY19zY2FuLCBkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7DQotICAgICAgICAgICAgICAgIGludCBzcmNfY29sb3IgPSAqc3JjX3NjYW47DQotICAgICAgICAgICAgICAgIGludCBibGVuZGVkID0gYk5vbnNlcGFyYWJsZUJsZW5kID8gYmxlbmRlZF9jb2xvcnNbY29sb3JdIDoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX2NvbG9yKTsNCi0gICAgICAgICAgICAgICAgYmxlbmRlZCA9IEZYRElCX0FMUEhBX01FUkdFKHNyY19jb2xvciwgYmxlbmRlZCwgYmFja19hbHBoYSk7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgc3JjX3NjYW4gKys7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19nYXA7DQotICAgICAgICB9DQotICAgIH0NCi19DQotaW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd19SZ2IyQXJnYl9Ob0JsZW5kX0NsaXAoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgc3JjX0JwcCwgRlhfTFBDQllURSBjbGlwX3NjYW4sDQotICAgICAgICBGWF9MUEJZVEUgZGVzdF9hbHBoYV9zY2FuKQ0KLXsNCi0gICAgaW50IHNyY19nYXAgPSBzcmNfQnBwIC0gMzsNCi0gICAgaWYgKGRlc3RfYWxwaGFfc2NhbiA9PSBOVUxMKSB7DQotICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdOw0KLSAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMjU1KSB7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOw0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IDI1NTsNCi0gICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX2dhcDsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX0JwcDsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGludCBiYWNrX2FscGhhID0gZGVzdF9zY2FuWzNdOw0KLSAgICAgICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IGRlc3RfYWxwaGE7DQotICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsNCi0gICAgICAgICAgICBmb3IgKGludCBjb2xvciA9IDA7IGNvbG9yIDwgMzsgY29sb3IgKyspIHsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sICpzcmNfc2NhbiwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX2dhcDsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF07DQotICAgICAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAyNTUpIHsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOw0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsNCi0gICAgICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbisrID0gMjU1Ow0KLSAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfZ2FwOw0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4gKys7DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpbnQgYmFja19hbHBoYSA9ICpkZXN0X2FscGhhX3NjYW47DQotICAgICAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiArKyA9IGRlc3RfYWxwaGE7DQotICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsNCi0gICAgICAgICAgICBmb3IgKGludCBjb2xvciA9IDA7IGNvbG9yIDwgMzsgY29sb3IgKyspIHsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sICpzcmNfc2NhbiwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfZ2FwOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLWlubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfTm9CbGVuZF9Ob0NsaXAoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgc3JjX0JwcCwNCi0gICAgICAgIEZYX0xQQllURSBkZXN0X2FscGhhX3NjYW4pDQotew0KLSAgICBpZiAoZGVzdF9hbHBoYV9zY2FuID09IE5VTEwpIHsNCi0gICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICBpZiAoc3JjX0JwcCA9PSA0KSB7DQotICAgICAgICAgICAgICAgIEZYQVJHQl9TRVRESUIoZGVzdF9zY2FuLCAweGZmMDAwMDAwIHwgRlhBUkdCX0dFVERJQihzcmNfc2NhbikpOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIEZYQVJHQl9TRVRESUIoZGVzdF9zY2FuLCBGWEFSR0JfTUFLRSgweGZmLCBzcmNfc2NhblsyXSwgc3JjX3NjYW5bMV0sIHNyY19zY2FuWzBdKSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpbnQgc3JjX2dhcCA9IHNyY19CcHAgLSAzOw0KLSAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOw0KLSAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4rKyA9IDB4ZmY7DQotICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX2dhcDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1pbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93X0FyZ2IyUmdiX0JsZW5kKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgaW50IGJsZW5kX3R5cGUsIGludCBkZXN0X0JwcCwgRlhfTFBDQllURSBjbGlwX3NjYW4sDQotICAgICAgICBGWF9MUENCWVRFIHNyY19hbHBoYV9zY2FuKQ0KLXsNCi0gICAgaW50IGJsZW5kZWRfY29sb3JzWzNdOw0KLSAgICBGWF9CT09MIGJOb25zZXBhcmFibGVCbGVuZCA9IGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFOw0KLSAgICBpbnQgZGVzdF9nYXAgPSBkZXN0X0JwcCAtIDM7DQotICAgIGlmIChzcmNfYWxwaGFfc2NhbiA9PSBOVUxMKSB7DQotICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgRlhfQllURSBzcmNfYWxwaGE7DQotICAgICAgICAgICAgaWYgKGNsaXBfc2Nhbikgew0KLSAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblszXSAqICgqY2xpcF9zY2FuKyspIC8gMjU1Ow0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzNdOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfQnBwOw0KLSAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgew0KLSAgICAgICAgICAgICAgICBfUkdCX0JsZW5kKGJsZW5kX3R5cGUsIHNyY19zY2FuLCBkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7DQotICAgICAgICAgICAgICAgIGludCBiYWNrX2NvbG9yID0gKmRlc3Rfc2NhbjsNCi0gICAgICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBiTm9uc2VwYXJhYmxlQmxlbmQgPyBibGVuZGVkX2NvbG9yc1tjb2xvcl0gOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CTEVORChibGVuZF90eXBlLCBiYWNrX2NvbG9yLCAqc3JjX3NjYW4pOw0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoYmFja19jb2xvciwgYmxlbmRlZCwgc3JjX2FscGhhKTsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICBzcmNfc2NhbiArKzsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfZ2FwOw0KLSAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgIEZYX0JZVEUgc3JjX2FscGhhOw0KLSAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsNCi0gICAgICAgICAgICAgICAgc3JjX2FscGhhID0gKCpzcmNfYWxwaGFfc2NhbisrKSAqICgqY2xpcF9zY2FuKyspIC8gMjU1Ow0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9ICpzcmNfYWxwaGFfc2NhbisrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfQnBwOw0KLSAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgew0KLSAgICAgICAgICAgICAgICBfUkdCX0JsZW5kKGJsZW5kX3R5cGUsIHNyY19zY2FuLCBkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7DQotICAgICAgICAgICAgICAgIGludCBiYWNrX2NvbG9yID0gKmRlc3Rfc2NhbjsNCi0gICAgICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBiTm9uc2VwYXJhYmxlQmxlbmQgPyBibGVuZGVkX2NvbG9yc1tjb2xvcl0gOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CTEVORChibGVuZF90eXBlLCBiYWNrX2NvbG9yLCAqc3JjX3NjYW4pOw0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoYmFja19jb2xvciwgYmxlbmRlZCwgc3JjX2FscGhhKTsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICBzcmNfc2NhbiArKzsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfZ2FwOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLWlubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfQXJnYjJSZ2JfTm9CbGVuZChGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBkZXN0X0JwcCwgRlhfTFBDQllURSBjbGlwX3NjYW4sDQotICAgICAgICBGWF9MUENCWVRFIHNyY19hbHBoYV9zY2FuKQ0KLXsNCi0gICAgaW50IGRlc3RfZ2FwID0gZGVzdF9CcHAgLSAzOw0KLSAgICBpZiAoc3JjX2FscGhhX3NjYW4gPT0gTlVMTCkgew0KLSAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgIEZYX0JZVEUgc3JjX2FscGhhOw0KLSAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsNCi0gICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bM10gKiAoKmNsaXBfc2NhbisrKSAvIDI1NTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblszXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAyNTUpIHsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOw0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfZ2FwOw0KLSAgICAgICAgICAgICAgICBzcmNfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9CcHA7DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBmb3IgKGludCBjb2xvciA9IDA7IGNvbG9yIDwgMzsgY29sb3IgKyspIHsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sICpzcmNfc2Nhbiwgc3JjX2FscGhhKTsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICBzcmNfc2NhbiArKzsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfZ2FwOw0KLSAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgIEZYX0JZVEUgc3JjX2FscGhhOw0KLSAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsNCi0gICAgICAgICAgICAgICAgc3JjX2FscGhhID0gKCpzcmNfYWxwaGFfc2NhbisrKSAqICgqY2xpcF9zY2FuKyspIC8gMjU1Ow0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9ICpzcmNfYWxwaGFfc2NhbisrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDI1NSkgew0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOw0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9nYXA7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfQnBwOw0KLSAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCAqc3JjX3NjYW4sIHNyY19hbHBoYSk7DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgc3JjX3NjYW4gKys7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X2dhcDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1pbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93X1JnYjJSZ2JfQmxlbmRfTm9DbGlwKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgaW50IGJsZW5kX3R5cGUsIGludCBkZXN0X0JwcCwgaW50IHNyY19CcHApDQotew0KLSAgICBpbnQgYmxlbmRlZF9jb2xvcnNbM107DQotICAgIEZYX0JPT0wgYk5vbnNlcGFyYWJsZUJsZW5kID0gYmxlbmRfdHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEU7DQotICAgIGludCBkZXN0X2dhcCA9IGRlc3RfQnBwIC0gMzsNCi0gICAgaW50IHNyY19nYXAgPSBzcmNfQnBwIC0gMzsNCi0gICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgew0KLSAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX3NjYW4sIGRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnMpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7DQotICAgICAgICAgICAgaW50IGJhY2tfY29sb3IgPSAqZGVzdF9zY2FuOw0KLSAgICAgICAgICAgIGludCBzcmNfY29sb3IgPSAqc3JjX3NjYW47DQotICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBiTm9uc2VwYXJhYmxlQmxlbmQgPyBibGVuZGVkX2NvbG9yc1tjb2xvcl0gOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgX0JMRU5EKGJsZW5kX3R5cGUsIGJhY2tfY29sb3IsIHNyY19jb2xvcik7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IGJsZW5kZWQ7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfZ2FwOw0KLSAgICAgICAgc3JjX3NjYW4gKz0gc3JjX2dhcDsNCi0gICAgfQ0KLX0NCi1pbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93X1JnYjJSZ2JfQmxlbmRfQ2xpcChGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBibGVuZF90eXBlLCBpbnQgZGVzdF9CcHAsIGludCBzcmNfQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbikNCi17DQotICAgIGludCBibGVuZGVkX2NvbG9yc1szXTsNCi0gICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsNCi0gICAgaW50IGRlc3RfZ2FwID0gZGVzdF9CcHAgLSAzOw0KLSAgICBpbnQgc3JjX2dhcCA9IHNyY19CcHAgLSAzOw0KLSAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7DQotICAgICAgICBGWF9CWVRFIHNyY19hbHBoYSA9ICpjbGlwX3NjYW4gKys7DQotICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9CcHA7DQotICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX0JwcDsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChiTm9uc2VwYXJhYmxlQmxlbmQpIHsNCi0gICAgICAgICAgICBfUkdCX0JsZW5kKGJsZW5kX3R5cGUsIHNyY19zY2FuLCBkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGZvciAoaW50IGNvbG9yID0gMDsgY29sb3IgPCAzOyBjb2xvciArKykgew0KLSAgICAgICAgICAgIGludCBzcmNfY29sb3IgPSAqc3JjX3NjYW47DQotICAgICAgICAgICAgaW50IGJhY2tfY29sb3IgPSAqZGVzdF9zY2FuOw0KLSAgICAgICAgICAgIGludCBibGVuZGVkID0gYk5vbnNlcGFyYWJsZUJsZW5kID8gYmxlbmRlZF9jb2xvcnNbY29sb3JdIDoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9CTEVORChibGVuZF90eXBlLCBiYWNrX2NvbG9yLCBzcmNfY29sb3IpOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRShiYWNrX2NvbG9yLCBibGVuZGVkLCBzcmNfYWxwaGEpOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICBzcmNfc2NhbiArKzsNCi0gICAgICAgIH0NCi0gICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X2dhcDsNCi0gICAgICAgIHNyY19zY2FuICs9IHNyY19nYXA7DQotICAgIH0NCi19DQotaW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd19SZ2IyUmdiX05vQmxlbmRfTm9DbGlwKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgaW50IGRlc3RfQnBwLCBpbnQgc3JjX0JwcCkNCi17DQotICAgIGlmIChkZXN0X0JwcCA9PSBzcmNfQnBwKSB7DQotICAgICAgICBGWFNZU19tZW1jcHkzMihkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCAqIGRlc3RfQnBwKTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7DQotICAgICAgICBkZXN0X3NjYW5bMF0gPSBzcmNfc2NhblswXTsNCi0gICAgICAgIGRlc3Rfc2NhblsxXSA9IHNyY19zY2FuWzFdOw0KLSAgICAgICAgZGVzdF9zY2FuWzJdID0gc3JjX3NjYW5bMl07DQotICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9CcHA7DQotICAgICAgICBzcmNfc2NhbiArPSBzcmNfQnBwOw0KLSAgICB9DQotfQ0KLWlubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9Ob0JsZW5kX0NsaXAoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgZGVzdF9CcHAsIGludCBzcmNfQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbikNCi17DQotICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgIGludCBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXTsNCi0gICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMjU1KSB7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gc3JjX3NjYW5bMF07DQotICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gc3JjX3NjYW5bMV07DQotICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gc3JjX3NjYW5bMl07DQotICAgICAgICB9IGVsc2UgaWYgKHNyY19hbHBoYSkgew0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCAqc3JjX3NjYW4sIHNyY19hbHBoYSk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCAqc3JjX3NjYW4sIHNyY19hbHBoYSk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCAqc3JjX3NjYW4sIHNyY19hbHBoYSk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfQnBwIC0gMjsNCi0gICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfQnBwIC0gMjsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X0JwcDsNCi0gICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7DQotICAgIH0NCi19DQotdm9pZCBfQ29tcG9zaXRlUm93X0FyZ2IyQXJnYl9UcmFuc2Zvcm0oRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHBpeGVsX2NvdW50LCBpbnQgYmxlbmRfdHlwZSwgRlhfTFBDQllURSBjbGlwX3NjYW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3RfYWxwaGFfc2NhbiwgRlhfTFBDQllURSBzcmNfYWxwaGFfc2NhbiwgRlhfTFBCWVRFIHNyY19jYWNoZV9zY2FuLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQ0KLXsNCi0gICAgRlhfTFBCWVRFIGRwID0gc3JjX2NhY2hlX3NjYW47DQotICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsNCi0gICAgaWYgKHNyY19hbHBoYV9zY2FuKSB7DQotICAgICAgICBpZiAoZGVzdF9hbHBoYV9zY2FuID09IE5VTEwpIHsNCi0gICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGRwLCBzcmNfc2NhbiwgMSk7DQotICAgICAgICAgICAgICAgIGRwWzNdID0gKnNyY19hbHBoYV9zY2FuKys7DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7DQotICAgICAgICAgICAgICAgIGRwICs9IDQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHNyY19hbHBoYV9zY2FuID0gTlVMTDsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgZHAsIHNyY19zY2FuLCBwaXhlbF9jb3VudCk7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZiAoZGVzdF9hbHBoYV9zY2FuID09IE5VTEwpIHsNCi0gICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGRwLCBzcmNfc2NhbiwgMSk7DQotICAgICAgICAgICAgICAgIGRwWzNdID0gc3JjX3NjYW5bM107DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgIGRwICs9IDQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcnNbM107DQotICAgICAgICAgICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsNCi0gICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIHNyY19jYWNoZV9zY2FuLCBzcmNfc2NhbiwgMSk7DQotICAgICAgICAgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9ICpkZXN0X2FscGhhX3NjYW47DQotICAgICAgICAgICAgICAgIGlmIChiYWNrX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfc2NhblszXSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuID0gc3JjX2FscGhhOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfY2FjaGVfc2NhbisrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfY2FjaGVfc2NhbisrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfY2FjaGVfc2NhbisrOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuID0gc3JjX3NjYW5bM107DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19jYWNoZV9zY2FuKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19jYWNoZV9zY2FuKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19jYWNoZV9zY2FuKys7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4gKys7DQotICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgRlhfQllURSBzcmNfYWxwaGE7DQotICAgICAgICAgICAgICAgIGlmIChjbGlwX3NjYW4gPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bM107DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqIHNyY19zY2FuWzNdIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDM7DQotICAgICAgICAgICAgICAgICAgICBzcmNfY2FjaGVfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9hbHBoYV9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4gKysgPSBkZXN0X2FscGhhOw0KLSAgICAgICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOw0KLSAgICAgICAgICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7DQotICAgICAgICAgICAgICAgICAgICBfUkdCX0JsZW5kKGJsZW5kX3R5cGUsIHNyY19jYWNoZV9zY2FuLCBkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2xvciA9IDA7IGNvbG9yIDwgMzsgY29sb3IgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChibGVuZF90eXBlKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBiTm9uc2VwYXJhYmxlQmxlbmQgPyBibGVuZGVkX2NvbG9yc1tjb2xvcl0gOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sICpzcmNfY2FjaGVfc2Nhbik7DQotICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRlZCA9IEZYRElCX0FMUEhBX01FUkdFKCpzcmNfY2FjaGVfc2NhbiwgYmxlbmRlZCwgYmFja19hbHBoYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWQsIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sICpzcmNfY2FjaGVfc2NhbiwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICAgICAgc3JjX2NhY2hlX3NjYW4gKys7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIF9Db21wb3NpdGVSb3dfQXJnYjJBcmdiKGRlc3Rfc2Nhbiwgc3JjX2NhY2hlX3NjYW4sIHBpeGVsX2NvdW50LCBibGVuZF90eXBlLCBjbGlwX3NjYW4sIGRlc3RfYWxwaGFfc2Nhbiwgc3JjX2FscGhhX3NjYW4pOw0KLX0NCi12b2lkIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfQmxlbmRfTm9DbGlwX1RyYW5zZm9ybShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBibGVuZF90eXBlLCBpbnQgc3JjX0JwcCwNCi0gICAgICAgIEZYX0xQQllURSBkZXN0X2FscGhhX3NjYW4sIEZYX0xQQllURSBzcmNfY2FjaGVfc2Nhbiwgdm9pZCogcEljY1RyYW5zZm9ybSkNCi17DQotICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsNCi0gICAgaWYgKHNyY19CcHAgPT0gMykgew0KLSAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgc3JjX2NhY2hlX3NjYW4sIHNyY19zY2FuLCB3aWR0aCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBGWF9MUEJZVEUgZHAgPSBzcmNfY2FjaGVfc2NhbjsNCi0gICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBkcCwgc3JjX3NjYW4sIDEpOw0KLSAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7DQotICAgICAgICAgICAgZHAgKz0gMzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBfQ29tcG9zaXRlUm93X1JnYjJBcmdiX0JsZW5kX05vQ2xpcChkZXN0X3NjYW4sIHNyY19jYWNoZV9zY2FuLCB3aWR0aCwgYmxlbmRfdHlwZSwgMywgZGVzdF9hbHBoYV9zY2FuKTsNCi19DQotaW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd19SZ2IyQXJnYl9CbGVuZF9DbGlwX1RyYW5zZm9ybShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBibGVuZF90eXBlLCBpbnQgc3JjX0JwcCwgRlhfTFBDQllURSBjbGlwX3NjYW4sDQotICAgICAgICBGWF9MUEJZVEUgZGVzdF9hbHBoYV9zY2FuLCBGWF9MUEJZVEUgc3JjX2NhY2hlX3NjYW4sIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBJQ29kZWNfSWNjTW9kdWxlKiBwSWNjTW9kdWxlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCk7DQotICAgIGlmIChzcmNfQnBwID09IDMpIHsNCi0gICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIHNyY19jYWNoZV9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgRlhfTFBCWVRFIGRwID0gc3JjX2NhY2hlX3NjYW47DQotICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgZHAsIHNyY19zY2FuLCAxKTsNCi0gICAgICAgICAgICBzcmNfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgIGRwICs9IDM7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgX0NvbXBvc2l0ZVJvd19SZ2IyQXJnYl9CbGVuZF9DbGlwKGRlc3Rfc2Nhbiwgc3JjX2NhY2hlX3NjYW4sIHdpZHRoLCBibGVuZF90eXBlLCAzLCBjbGlwX3NjYW4sIGRlc3RfYWxwaGFfc2Nhbik7DQotfQ0KLWlubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfTm9CbGVuZF9DbGlwX1RyYW5zZm9ybShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBzcmNfQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwNCi0gICAgICAgIEZYX0xQQllURSBkZXN0X2FscGhhX3NjYW4sIEZYX0xQQllURSBzcmNfY2FjaGVfc2Nhbiwgdm9pZCogcEljY1RyYW5zZm9ybSkNCi17DQotICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsNCi0gICAgaWYgKHNyY19CcHAgPT0gMykgew0KLSAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgc3JjX2NhY2hlX3NjYW4sIHNyY19zY2FuLCB3aWR0aCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBGWF9MUEJZVEUgZHAgPSBzcmNfY2FjaGVfc2NhbjsNCi0gICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBkcCwgc3JjX3NjYW4sIDEpOw0KLSAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7DQotICAgICAgICAgICAgZHAgKz0gMzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBfQ29tcG9zaXRlUm93X1JnYjJBcmdiX05vQmxlbmRfQ2xpcChkZXN0X3NjYW4sIHNyY19jYWNoZV9zY2FuLCB3aWR0aCwgMywgY2xpcF9zY2FuLCBkZXN0X2FscGhhX3NjYW4pOw0KLX0NCi1pbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93X1JnYjJBcmdiX05vQmxlbmRfTm9DbGlwX1RyYW5zZm9ybShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBzcmNfQnBwLA0KLSAgICAgICAgRlhfTFBCWVRFIGRlc3RfYWxwaGFfc2NhbiwgRlhfTFBCWVRFIHNyY19jYWNoZV9zY2FuLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQ0KLXsNCi0gICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOw0KLSAgICBpZiAoc3JjX0JwcCA9PSAzKSB7DQotICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBzcmNfY2FjaGVfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEZYX0xQQllURSBkcCA9IHNyY19jYWNoZV9zY2FuOw0KLSAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGRwLCBzcmNfc2NhbiwgMSk7DQotICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsNCi0gICAgICAgICAgICBkcCArPSAzOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfTm9CbGVuZF9Ob0NsaXAoZGVzdF9zY2FuLCBzcmNfY2FjaGVfc2Nhbiwgd2lkdGgsIDMsIGRlc3RfYWxwaGFfc2Nhbik7DQotfQ0KLWlubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfQXJnYjJSZ2JfQmxlbmRfVHJhbnNmb3JtKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgaW50IGJsZW5kX3R5cGUsIGludCBkZXN0X0JwcCwgRlhfTFBDQllURSBjbGlwX3NjYW4sDQotICAgICAgICBGWF9MUENCWVRFIHNyY19hbHBoYV9zY2FuLCBGWF9MUEJZVEUgc3JjX2NhY2hlX3NjYW4sIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBJQ29kZWNfSWNjTW9kdWxlKiBwSWNjTW9kdWxlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCk7DQotICAgIGlmIChzcmNfYWxwaGFfc2Nhbikgew0KLSAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgc3JjX2NhY2hlX3NjYW4sIHNyY19zY2FuLCB3aWR0aCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcnNbM107DQotICAgICAgICBGWF9CT09MIGJOb25zZXBhcmFibGVCbGVuZCA9IGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFOw0KLSAgICAgICAgaW50IGRlc3RfZ2FwID0gZGVzdF9CcHAgLSAzOw0KLSAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIHNyY19jYWNoZV9zY2FuLCBzcmNfc2NhbiwgMSk7DQotICAgICAgICAgICAgRlhfQllURSBzcmNfYWxwaGE7DQotICAgICAgICAgICAgaWYgKGNsaXBfc2Nhbikgew0KLSAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblszXSAqICgqY2xpcF9zY2FuKyspIC8gMjU1Ow0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzNdOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBzcmNfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9CcHA7DQotICAgICAgICAgICAgICAgIHNyY19jYWNoZV9zY2FuICs9IDM7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7DQotICAgICAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX2NhY2hlX3NjYW4sIGRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnMpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBmb3IgKGludCBjb2xvciA9IDA7IGNvbG9yIDwgMzsgY29sb3IgKyspIHsNCi0gICAgICAgICAgICAgICAgaW50IGJhY2tfY29sb3IgPSAqZGVzdF9zY2FuOw0KLSAgICAgICAgICAgICAgICBpbnQgYmxlbmRlZCA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3JzW2NvbG9yXSA6DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JMRU5EKGJsZW5kX3R5cGUsIGJhY2tfY29sb3IsICpzcmNfY2FjaGVfc2Nhbik7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRShiYWNrX2NvbG9yLCBibGVuZGVkLCBzcmNfYWxwaGEpOw0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgIHNyY19jYWNoZV9zY2FuICsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9nYXA7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgX0NvbXBvc2l0ZVJvd19BcmdiMlJnYl9CbGVuZChkZXN0X3NjYW4sIHNyY19jYWNoZV9zY2FuLCB3aWR0aCwgYmxlbmRfdHlwZSwgZGVzdF9CcHAsIGNsaXBfc2Nhbiwgc3JjX2FscGhhX3NjYW4pOw0KLX0NCi1pbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93X0FyZ2IyUmdiX05vQmxlbmRfVHJhbnNmb3JtKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgaW50IGRlc3RfQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwNCi0gICAgICAgIEZYX0xQQ0JZVEUgc3JjX2FscGhhX3NjYW4sIEZYX0xQQllURSBzcmNfY2FjaGVfc2Nhbiwgdm9pZCogcEljY1RyYW5zZm9ybSkNCi17DQotICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsNCi0gICAgaWYgKHNyY19hbHBoYV9zY2FuKSB7DQotICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBzcmNfY2FjaGVfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGludCBkZXN0X2dhcCA9IGRlc3RfQnBwIC0gMzsNCi0gICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBzcmNfY2FjaGVfc2Nhbiwgc3JjX3NjYW4sIDEpOw0KLSAgICAgICAgICAgIEZYX0JZVEUgc3JjX2FscGhhOw0KLSAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsNCi0gICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bM10gKiAoKmNsaXBfc2NhbisrKSAvIDI1NTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblszXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsNCi0gICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDI1NSkgew0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX2NhY2hlX3NjYW4rKzsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19jYWNoZV9zY2FuKys7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfY2FjaGVfc2NhbisrOw0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9nYXA7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfQnBwOw0KLSAgICAgICAgICAgICAgICBzcmNfY2FjaGVfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCAqc3JjX2NhY2hlX3NjYW4sIHNyY19hbHBoYSk7DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgc3JjX2NhY2hlX3NjYW4gKys7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X2dhcDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBfQ29tcG9zaXRlUm93X0FyZ2IyUmdiX05vQmxlbmQoZGVzdF9zY2FuLCBzcmNfY2FjaGVfc2Nhbiwgd2lkdGgsIGRlc3RfQnBwLCBjbGlwX3NjYW4sIHNyY19hbHBoYV9zY2FuKTsNCi19DQotaW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd19SZ2IyUmdiX0JsZW5kX05vQ2xpcF9UcmFuc2Zvcm0oRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgYmxlbmRfdHlwZSwgaW50IGRlc3RfQnBwLCBpbnQgc3JjX0JwcCwNCi0gICAgICAgIEZYX0xQQllURSBzcmNfY2FjaGVfc2Nhbiwgdm9pZCogcEljY1RyYW5zZm9ybSkNCi17DQotICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsNCi0gICAgaWYgKHNyY19CcHAgPT0gMykgew0KLSAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgc3JjX2NhY2hlX3NjYW4sIHNyY19zY2FuLCB3aWR0aCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBGWF9MUEJZVEUgZHAgPSBzcmNfY2FjaGVfc2NhbjsNCi0gICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBkcCwgc3JjX3NjYW4sIDEpOw0KLSAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7DQotICAgICAgICAgICAgZHAgKz0gMzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBfQ29tcG9zaXRlUm93X1JnYjJSZ2JfQmxlbmRfTm9DbGlwKGRlc3Rfc2Nhbiwgc3JjX2NhY2hlX3NjYW4sIHdpZHRoLCBibGVuZF90eXBlLCBkZXN0X0JwcCwgMyk7DQotfQ0KLWlubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9CbGVuZF9DbGlwX1RyYW5zZm9ybShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBibGVuZF90eXBlLCBpbnQgZGVzdF9CcHAsIGludCBzcmNfQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwNCi0gICAgICAgIEZYX0xQQllURSBzcmNfY2FjaGVfc2Nhbiwgdm9pZCogcEljY1RyYW5zZm9ybSkNCi17DQotICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsNCi0gICAgaWYgKHNyY19CcHAgPT0gMykgew0KLSAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgc3JjX2NhY2hlX3NjYW4sIHNyY19zY2FuLCB3aWR0aCk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBGWF9MUEJZVEUgZHAgPSBzcmNfY2FjaGVfc2NhbjsNCi0gICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBkcCwgc3JjX3NjYW4sIDEpOw0KLSAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7DQotICAgICAgICAgICAgZHAgKz0gMzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBfQ29tcG9zaXRlUm93X1JnYjJSZ2JfQmxlbmRfQ2xpcChkZXN0X3NjYW4sIHNyY19jYWNoZV9zY2FuLCB3aWR0aCwgYmxlbmRfdHlwZSwgZGVzdF9CcHAsIDMsIGNsaXBfc2Nhbik7DQotfQ0KLWlubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9Ob0JsZW5kX05vQ2xpcF9UcmFuc2Zvcm0oRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgZGVzdF9CcHAsIGludCBzcmNfQnBwLA0KLSAgICAgICAgRlhfTFBCWVRFIHNyY19jYWNoZV9zY2FuLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQ0KLXsNCi0gICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOw0KLSAgICBpZiAoc3JjX0JwcCA9PSAzKSB7DQotICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBzcmNfY2FjaGVfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEZYX0xQQllURSBkcCA9IHNyY19jYWNoZV9zY2FuOw0KLSAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGRwLCBzcmNfc2NhbiwgMSk7DQotICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsNCi0gICAgICAgICAgICBkcCArPSAzOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9Ob0JsZW5kX05vQ2xpcChkZXN0X3NjYW4sIHNyY19jYWNoZV9zY2FuLCB3aWR0aCwgZGVzdF9CcHAsIDMpOw0KLX0NCi1pbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93X1JnYjJSZ2JfTm9CbGVuZF9DbGlwX1RyYW5zZm9ybShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBkZXN0X0JwcCwgaW50IHNyY19CcHAsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLA0KLSAgICAgICAgRlhfTFBCWVRFIHNyY19jYWNoZV9zY2FuLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQ0KLXsNCi0gICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOw0KLSAgICBpZiAoc3JjX0JwcCA9PSAzKSB7DQotICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBzcmNfY2FjaGVfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEZYX0xQQllURSBkcCA9IHNyY19jYWNoZV9zY2FuOw0KLSAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGRwLCBzcmNfc2NhbiwgMSk7DQotICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsNCi0gICAgICAgICAgICBkcCArPSAzOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9Ob0JsZW5kX0NsaXAoZGVzdF9zY2FuLCBzcmNfY2FjaGVfc2Nhbiwgd2lkdGgsIGRlc3RfQnBwLCAzLCBjbGlwX3NjYW4pOw0KLX0NCi1pbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93XzhicHBQYWwyR3JheShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBGWF9MUENCWVRFIHBQYWxldHRlLCBpbnQgcGl4ZWxfY291bnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsZW5kX3R5cGUsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX2FscGhhX3NjYW4pDQotew0KLSAgICBpZiAoc3JjX2FscGhhX3NjYW4pIHsNCi0gICAgICAgIGlmIChibGVuZF90eXBlKSB7DQotICAgICAgICAgICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsNCi0gICAgICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcjsNCi0gICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgIEZYX0JZVEUgZ3JheSA9IHBQYWxldHRlWypzcmNfc2Nhbl07DQotICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSAqc3JjX2FscGhhX3NjYW4rKzsNCi0gICAgICAgICAgICAgICAgaWYgKGNsaXBfc2Nhbikgew0KLSAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgew0KLSAgICAgICAgICAgICAgICAgICAgYmxlbmRlZF9jb2xvciA9IGJsZW5kX3R5cGUgPT0gRlhESUJfQkxFTkRfTFVNSU5PU0lUWSA/IGdyYXkgOiAqZGVzdF9zY2FuOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGdyYXkgPSBiTm9uc2VwYXJhYmxlQmxlbmQgPyBibGVuZGVkX2NvbG9yIDogX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sIGdyYXkpOw0KLSAgICAgICAgICAgICAgICBpZiAoc3JjX2FscGhhKSB7DQotICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgc3JjX2FscGhhKTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBncmF5Ow0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgc3JjX3NjYW4gKys7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgICAgICBGWF9CWVRFIGdyYXkgPSBwUGFsZXR0ZVsqc3JjX3NjYW5dOw0KLSAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSAqc3JjX2FscGhhX3NjYW4rKzsNCi0gICAgICAgICAgICBpZiAoY2xpcF9zY2FuKSB7DQotICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoc3JjX2FscGhhKSB7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBncmF5LCBzcmNfYWxwaGEpOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBncmF5Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgc3JjX3NjYW4gKys7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZiAoYmxlbmRfdHlwZSkgew0KLSAgICAgICAgICAgIEZYX0JPT0wgYk5vbnNlcGFyYWJsZUJsZW5kID0gYmxlbmRfdHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEU7DQotICAgICAgICAgICAgaW50IGJsZW5kZWRfY29sb3I7DQotICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICBGWF9CWVRFIGdyYXkgPSBwUGFsZXR0ZVsqc3JjX3NjYW5dOw0KLSAgICAgICAgICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7DQotICAgICAgICAgICAgICAgICAgICBibGVuZGVkX2NvbG9yID0gYmxlbmRfdHlwZSA9PSBGWERJQl9CTEVORF9MVU1JTk9TSVRZID8gZ3JheSA6ICpkZXN0X3NjYW47DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZ3JheSA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3IgOiBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2NhbiwgZ3JheSk7DQotICAgICAgICAgICAgICAgIGlmIChjbGlwX3NjYW4gJiYgY2xpcF9zY2FuW2NvbF0gPCAyNTUpIHsNCi0gICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBncmF5LCBjbGlwX3NjYW5bY29sXSk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gZ3JheTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICAgICAgRlhfQllURSBncmF5ID0gcFBhbGV0dGVbKnNyY19zY2FuXTsNCi0gICAgICAgICAgICBpZiAoY2xpcF9zY2FuICYmIGNsaXBfc2Nhbltjb2xdIDwgMjU1KSB7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBncmF5LCBjbGlwX3NjYW5bY29sXSk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IGdyYXk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICBzcmNfc2NhbiArKzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1pbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93XzhicHBQYWwyR3JheWEoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgRlhfTFBDQllURSBwUGFsZXR0ZSwgaW50IHBpeGVsX2NvdW50LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxlbmRfdHlwZSwgRlhfTFBDQllURSBjbGlwX3NjYW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X2FscGhhX3NjYW4sIEZYX0xQQ0JZVEUgc3JjX2FscGhhX3NjYW4pDQotew0KLSAgICBpZiAoc3JjX2FscGhhX3NjYW4pIHsNCi0gICAgICAgIGlmIChibGVuZF90eXBlKSB7DQotICAgICAgICAgICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsNCi0gICAgICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcjsNCi0gICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgIEZYX0JZVEUgZ3JheSA9IHBQYWxldHRlWypzcmNfc2Nhbl07DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSAqZGVzdF9hbHBoYV9zY2FuOw0KLSAgICAgICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gKnNyY19hbHBoYV9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNsaXBfc2Nhbikgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBncmF5Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4gPSBzcmNfYWxwaGE7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4gKys7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBGWF9CWVRFIHNyY19hbHBoYSA9ICpzcmNfYWxwaGFfc2NhbisrOw0KLSAgICAgICAgICAgICAgICBpZiAoY2xpcF9zY2FuKSB7DQotICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqIHNyY19hbHBoYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4gPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gKCpkZXN0X2FscGhhX3NjYW4pOw0KLSAgICAgICAgICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7DQotICAgICAgICAgICAgICAgICAgICBibGVuZGVkX2NvbG9yID0gYmxlbmRfdHlwZSA9PSBGWERJQl9CTEVORF9MVU1JTk9TSVRZID8gZ3JheSA6ICpkZXN0X3NjYW47DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZ3JheSA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3IgOiBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2NhbiwgZ3JheSk7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBncmF5LCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICAgICAgRlhfQllURSBncmF5ID0gcFBhbGV0dGVbKnNyY19zY2FuXTsNCi0gICAgICAgICAgICBzcmNfc2NhbiArKzsNCi0gICAgICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSAqZGVzdF9hbHBoYV9zY2FuOw0KLSAgICAgICAgICAgIGlmIChiYWNrX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9ICpzcmNfYWxwaGFfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgaWYgKGNsaXBfc2Nhbikgew0KLSAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYSkgew0KLSAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IGdyYXk7DQotICAgICAgICAgICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuID0gc3JjX2FscGhhOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgZGVzdF9hbHBoYV9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgRlhfQllURSBzcmNfYWxwaGEgPSAqc3JjX2FscGhhX3NjYW4rKzsNCi0gICAgICAgICAgICBpZiAoY2xpcF9zY2FuKSB7DQotICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4gKys7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gKCpkZXN0X2FscGhhX3NjYW4pOw0KLSAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGlmIChibGVuZF90eXBlKSB7DQotICAgICAgICAgICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsNCi0gICAgICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcjsNCi0gICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgIEZYX0JZVEUgZ3JheSA9IHBQYWxldHRlWypzcmNfc2Nhbl07DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgICAgICAgICBpZiAoY2xpcF9zY2FuID09IE5VTEwgfHwgY2xpcF9zY2FuW2NvbF0gPT0gMjU1KSB7DQotICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSBncmF5Ow0KLSAgICAgICAgICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbisrID0gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdOw0KLSAgICAgICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGludCBiYWNrX2FscGhhID0gKmRlc3RfYWxwaGFfc2NhbjsNCi0gICAgICAgICAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4gKysgPSBkZXN0X2FscGhhOw0KLSAgICAgICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOw0KLSAgICAgICAgICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7DQotICAgICAgICAgICAgICAgICAgICBibGVuZGVkX2NvbG9yID0gYmxlbmRfdHlwZSA9PSBGWERJQl9CTEVORF9MVU1JTk9TSVRZID8gZ3JheSA6ICpkZXN0X3NjYW47DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZ3JheSA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3IgOiBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2NhbiwgZ3JheSk7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBncmF5LCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgew0KLSAgICAgICAgICAgIEZYX0JZVEUgZ3JheSA9IHBQYWxldHRlWypzcmNfc2Nhbl07DQotICAgICAgICAgICAgc3JjX3NjYW4gKys7DQotICAgICAgICAgICAgaWYgKGNsaXBfc2NhbiA9PSBOVUxMIHx8IGNsaXBfc2Nhbltjb2xdID09IDI1NSkgew0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSBncmF5Ow0KLSAgICAgICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuKysgPSAyNTU7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF07DQotICAgICAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgZGVzdF9hbHBoYV9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaW50IGJhY2tfYWxwaGEgPSAqZGVzdF9hbHBoYV9zY2FuOw0KLSAgICAgICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4gKysgPSBkZXN0X2FscGhhOw0KLSAgICAgICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvIGRlc3RfYWxwaGE7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGdyYXksIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICB9DQotICAgIH0NCi19DQotaW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd18xYnBwUGFsMkdyYXkoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHNyY19sZWZ0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgcFBhbGV0dGUsIGludCBwaXhlbF9jb3VudCwgaW50IGJsZW5kX3R5cGUsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuKQ0KLXsNCi0gICAgaW50IHJlc2V0X2dyYXkgPSBwUGFsZXR0ZVswXTsNCi0gICAgaW50IHNldF9ncmF5ID0gcFBhbGV0dGVbMV07DQotICAgIGlmIChibGVuZF90eXBlKSB7DQotICAgICAgICBGWF9CT09MIGJOb25zZXBhcmFibGVCbGVuZCA9IGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFOw0KLSAgICAgICAgaW50IGJsZW5kZWRfY29sb3I7DQotICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICAgICAgRlhfQllURSBncmF5ID0gKHNyY19zY2FuWyhjb2wgKyBzcmNfbGVmdCkgLyA4XSAmICgxIDw8ICg3IC0gKGNvbCArIHNyY19sZWZ0KSAlIDgpKSkgPyBzZXRfZ3JheSA6IHJlc2V0X2dyYXk7DQotICAgICAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgew0KLSAgICAgICAgICAgICAgICBibGVuZGVkX2NvbG9yID0gYmxlbmRfdHlwZSA9PSBGWERJQl9CTEVORF9MVU1JTk9TSVRZID8gZ3JheSA6ICpkZXN0X3NjYW47DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGdyYXkgPSBiTm9uc2VwYXJhYmxlQmxlbmQgPyBibGVuZGVkX2NvbG9yIDogX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sIGdyYXkpOw0KLSAgICAgICAgICAgIGlmIChjbGlwX3NjYW4gJiYgY2xpcF9zY2FuW2NvbF0gPCAyNTUpIHsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGdyYXksIGNsaXBfc2Nhbltjb2xdKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gZ3JheTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgIEZYX0JZVEUgZ3JheSA9IChzcmNfc2NhblsoY29sICsgc3JjX2xlZnQpIC8gOF0gJiAoMSA8PCAoNyAtIChjb2wgKyBzcmNfbGVmdCkgJSA4KSkpID8gc2V0X2dyYXkgOiByZXNldF9ncmF5Ow0KLSAgICAgICAgaWYgKGNsaXBfc2NhbiAmJiBjbGlwX3NjYW5bY29sXSA8IDI1NSkgew0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBncmF5LCBjbGlwX3NjYW5bY29sXSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBncmF5Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICB9DQotfQ0KLWlubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfMWJwcFBhbDJHcmF5YShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgc3JjX2xlZnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgcFBhbGV0dGUsIGludCBwaXhlbF9jb3VudCwgaW50IGJsZW5kX3R5cGUsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9hbHBoYV9zY2FuKQ0KLXsNCi0gICAgaW50IHJlc2V0X2dyYXkgPSBwUGFsZXR0ZVswXTsNCi0gICAgaW50IHNldF9ncmF5ID0gcFBhbGV0dGVbMV07DQotICAgIGlmIChibGVuZF90eXBlKSB7DQotICAgICAgICBGWF9CT09MIGJOb25zZXBhcmFibGVCbGVuZCA9IGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFOw0KLSAgICAgICAgaW50IGJsZW5kZWRfY29sb3I7DQotICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICAgICAgRlhfQllURSBncmF5ID0gKHNyY19zY2FuWyhjb2wgKyBzcmNfbGVmdCkgLyA4XSAmICgxIDw8ICg3IC0gKGNvbCArIHNyY19sZWZ0KSAlIDgpKSkgPyBzZXRfZ3JheSA6IHJlc2V0X2dyYXk7DQotICAgICAgICAgICAgaWYgKGNsaXBfc2NhbiA9PSBOVUxMIHx8IGNsaXBfc2Nhbltjb2xdID09IDI1NSkgew0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSBncmF5Ow0KLSAgICAgICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuICsrID0gMjU1Ow0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdOw0KLSAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGludCBiYWNrX2FscGhhID0gKmRlc3RfYWxwaGFfc2NhbjsNCi0gICAgICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsNCi0gICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuICsrID0gZGVzdF9hbHBoYTsNCi0gICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOw0KLSAgICAgICAgICAgIGlmIChiTm9uc2VwYXJhYmxlQmxlbmQpIHsNCi0gICAgICAgICAgICAgICAgYmxlbmRlZF9jb2xvciA9IGJsZW5kX3R5cGUgPT0gRlhESUJfQkxFTkRfTFVNSU5PU0lUWSA/IGdyYXkgOiAqZGVzdF9zY2FuOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBncmF5ID0gYk5vbnNlcGFyYWJsZUJsZW5kID8gYmxlbmRlZF9jb2xvciA6IF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCBncmF5KTsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICBGWF9CWVRFIGdyYXkgPSAoc3JjX3NjYW5bKGNvbCArIHNyY19sZWZ0KSAvIDhdICYgKDEgPDwgKDcgLSAoY29sICsgc3JjX2xlZnQpICUgOCkpKSA/IHNldF9ncmF5IDogcmVzZXRfZ3JheTsNCi0gICAgICAgIGlmIChjbGlwX3NjYW4gPT0gTlVMTCB8fCBjbGlwX3NjYW5bY29sXSA9PSAyNTUpIHsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuKysgPSBncmF5Ow0KLSAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4gKysgPSAyNTU7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpbnQgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF07DQotICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgZGVzdF9hbHBoYV9zY2FuICsrOw0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW50IGJhY2tfYWxwaGEgPSAqZGVzdF9hbHBoYV9zY2FuOw0KLSAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICAqZGVzdF9hbHBoYV9zY2FuICsrID0gZGVzdF9hbHBoYTsNCi0gICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvIGRlc3RfYWxwaGE7DQotICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICB9DQotfQ0KLWlubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfOGJwcFJnYjJSZ2JfTm9CbGVuZChGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBGWF9EV09SRCogcFBhbGV0dGUsIGludCBwaXhlbF9jb3VudCwNCi0gICAgICAgIGludCBEZXN0QnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwNCi0gICAgICAgIEZYX0xQQ0JZVEUgc3JjX2FscGhhX3NjYW4pDQotew0KLSAgICBpZiAoc3JjX2FscGhhX3NjYW4pIHsNCi0gICAgICAgIGludCBkZXN0X2dhcCA9IERlc3RCcHAgLSAzOw0KLSAgICAgICAgRlhfQVJHQiBhcmdiID0gMDsNCi0gICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgICAgICBhcmdiID0gcFBhbGV0dGVbKnNyY19zY2FuXTsNCi0gICAgICAgICAgICBpbnQgc3JjX3IgPSBGWEFSR0JfUihhcmdiKTsNCi0gICAgICAgICAgICBpbnQgc3JjX2cgPSBGWEFSR0JfRyhhcmdiKTsNCi0gICAgICAgICAgICBpbnQgc3JjX2IgPSBGWEFSR0JfQihhcmdiKTsNCi0gICAgICAgICAgICBzcmNfc2NhbiArKzsNCi0gICAgICAgICAgICBGWF9CWVRFIHNyY19hbHBoYSA9IDA7DQotICAgICAgICAgICAgaWYgKGNsaXBfc2Nhbikgew0KLSAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSAoKnNyY19hbHBoYV9zY2FuKyspICogKCpjbGlwX3NjYW4rKykgLyAyNTU7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgc3JjX2FscGhhID0gKnNyY19hbHBoYV9zY2FuKys7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMjU1KSB7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19iOw0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSBzcmNfZzsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gc3JjX3I7DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X2dhcDsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gRGVzdEJwcDsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfYiwgc3JjX2FscGhhKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19nLCBzcmNfYWxwaGEpOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX3IsIHNyY19hbHBoYSk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X2dhcDsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEZYX0FSR0IgYXJnYiA9IDA7DQotICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICAgICAgYXJnYiA9IHBQYWxldHRlWypzcmNfc2Nhbl07DQotICAgICAgICAgICAgaW50IHNyY19yID0gRlhBUkdCX1IoYXJnYik7DQotICAgICAgICAgICAgaW50IHNyY19nID0gRlhBUkdCX0coYXJnYik7DQotICAgICAgICAgICAgaW50IHNyY19iID0gRlhBUkdCX0IoYXJnYik7DQotICAgICAgICAgICAgaWYgKGNsaXBfc2NhbiAmJiBjbGlwX3NjYW5bY29sXSA8IDI1NSkgew0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2IsIGNsaXBfc2Nhbltjb2xdKTsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2csIGNsaXBfc2Nhbltjb2xdKTsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX3IsIGNsaXBfc2Nhbltjb2xdKTsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19iOw0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSBzcmNfZzsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gc3JjX3I7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChEZXN0QnBwID09IDQpIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuKys7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLWlubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfMWJwcFJnYjJSZ2JfTm9CbGVuZChGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgc3JjX2xlZnQsDQotICAgICAgICBGWF9EV09SRCogcFBhbGV0dGUsIGludCBwaXhlbF9jb3VudCwgaW50IERlc3RCcHAsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuKQ0KLXsNCi0gICAgaW50IHJlc2V0X3IsIHJlc2V0X2csIHJlc2V0X2I7DQotICAgIGludCBzZXRfciwgc2V0X2csIHNldF9iOw0KLSAgICByZXNldF9yID0gRlhBUkdCX1IocFBhbGV0dGVbMF0pOw0KLSAgICByZXNldF9nID0gRlhBUkdCX0cocFBhbGV0dGVbMF0pOw0KLSAgICByZXNldF9iID0gRlhBUkdCX0IocFBhbGV0dGVbMF0pOw0KLSAgICBzZXRfciA9IEZYQVJHQl9SKHBQYWxldHRlWzFdKTsNCi0gICAgc2V0X2cgPSBGWEFSR0JfRyhwUGFsZXR0ZVsxXSk7DQotICAgIHNldF9iID0gRlhBUkdCX0IocFBhbGV0dGVbMV0pOw0KLSAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICBpbnQgc3JjX3IsIHNyY19nLCBzcmNfYjsNCi0gICAgICAgIGlmIChzcmNfc2NhblsoY29sICsgc3JjX2xlZnQpIC8gOF0gJiAoMSA8PCAoNyAtIChjb2wgKyBzcmNfbGVmdCkgJSA4KSkpIHsNCi0gICAgICAgICAgICBzcmNfciA9IHNldF9yOw0KLSAgICAgICAgICAgIHNyY19nID0gc2V0X2c7DQotICAgICAgICAgICAgc3JjX2IgPSBzZXRfYjsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc3JjX3IgPSByZXNldF9yOw0KLSAgICAgICAgICAgIHNyY19nID0gcmVzZXRfZzsNCi0gICAgICAgICAgICBzcmNfYiA9IHJlc2V0X2I7DQotICAgICAgICB9DQotICAgICAgICBpZiAoY2xpcF9zY2FuICYmIGNsaXBfc2Nhbltjb2xdIDwgMjU1KSB7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19iLCBjbGlwX3NjYW5bY29sXSk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfZywgY2xpcF9zY2FuW2NvbF0pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX3IsIGNsaXBfc2Nhbltjb2xdKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19iOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19nOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19yOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKERlc3RCcHAgPT0gNCkgew0KLSAgICAgICAgICAgIGRlc3Rfc2NhbisrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLWlubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfOGJwcFJnYjJBcmdiX05vQmxlbmQoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLA0KLSAgICAgICAgRlhfRFdPUkQqIHBQYWxldHRlLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwNCi0gICAgICAgIEZYX0xQQ0JZVEUgc3JjX2FscGhhX3NjYW4pDQotew0KLSAgICBpZiAoc3JjX2FscGhhX3NjYW4pIHsNCi0gICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICBGWF9BUkdCIGFyZ2IgPSBwUGFsZXR0ZVsqc3JjX3NjYW5dOw0KLSAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgICAgIGludCBzcmNfciA9IEZYQVJHQl9SKGFyZ2IpOw0KLSAgICAgICAgICAgIGludCBzcmNfZyA9IEZYQVJHQl9HKGFyZ2IpOw0KLSAgICAgICAgICAgIGludCBzcmNfYiA9IEZYQVJHQl9CKGFyZ2IpOw0KLSAgICAgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9IGRlc3Rfc2NhblszXTsNCi0gICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsNCi0gICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqICgqc3JjX2FscGhhX3NjYW4pIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgRlhBUkdCX1NFVERJQihkZXN0X3NjYW4sIEZYQVJHQl9NQUtFKHNyY19hbHBoYSwgc3JjX3IsIHNyY19nLCBzcmNfYikpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgRlhBUkdCX1NFVERJQihkZXN0X3NjYW4sIEZYQVJHQl9NQUtFKCpzcmNfYWxwaGFfc2Nhbiwgc3JjX3IsIHNyY19nLCBzcmNfYikpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgICAgICBzcmNfYWxwaGFfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIEZYX0JZVEUgc3JjX2FscGhhOw0KLSAgICAgICAgICAgIGlmIChjbGlwX3NjYW4gPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSAqc3JjX2FscGhhX3NjYW4gKys7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiAoKnNyY19hbHBoYV9zY2FuKyspIC8gMjU1Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bM10gPSBkZXN0X2FscGhhOw0KLSAgICAgICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvIGRlc3RfYWxwaGE7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19iLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfZywgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX3IsIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2UNCi0gICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICBGWF9BUkdCIGFyZ2IgPSBwUGFsZXR0ZVsqc3JjX3NjYW5dOw0KLSAgICAgICAgICAgIGludCBzcmNfciA9IEZYQVJHQl9SKGFyZ2IpOw0KLSAgICAgICAgICAgIGludCBzcmNfZyA9IEZYQVJHQl9HKGFyZ2IpOw0KLSAgICAgICAgICAgIGludCBzcmNfYiA9IEZYQVJHQl9CKGFyZ2IpOw0KLSAgICAgICAgICAgIGlmIChjbGlwX3NjYW4gPT0gTlVMTCB8fCBjbGlwX3NjYW5bY29sXSA9PSAyNTUpIHsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gc3JjX2I7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19nOw0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSBzcmNfcjsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gMjU1Ow0KLSAgICAgICAgICAgICAgICBzcmNfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXTsNCi0gICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaW50IGJhY2tfYWxwaGEgPSBkZXN0X3NjYW5bM107DQotICAgICAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzNdID0gZGVzdF9hbHBoYTsNCi0gICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfYiwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2csIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19yLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICBzcmNfc2NhbiArKzsNCi0gICAgICAgIH0NCi19DQotdm9pZCBfQ29tcG9zaXRlUm93XzhicHBSZ2IyUmdiYV9Ob0JsZW5kKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQqIHBQYWxldHRlLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3RfYWxwaGFfc2NhbiwgRlhfTFBDQllURSBzcmNfYWxwaGFfc2NhbikNCi17DQotICAgIGlmIChzcmNfYWxwaGFfc2Nhbikgew0KLSAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgIEZYX0FSR0IgYXJnYiA9IHBQYWxldHRlWypzcmNfc2Nhbl07DQotICAgICAgICAgICAgc3JjX3NjYW4gKys7DQotICAgICAgICAgICAgaW50IHNyY19yID0gRlhBUkdCX1IoYXJnYik7DQotICAgICAgICAgICAgaW50IHNyY19nID0gRlhBUkdCX0coYXJnYik7DQotICAgICAgICAgICAgaW50IHNyY19iID0gRlhBUkdCX0IoYXJnYik7DQotICAgICAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gKmRlc3RfYWxwaGFfc2NhbjsNCi0gICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsNCi0gICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqICgqc3JjX2FscGhhX3NjYW4pIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiArKyA9IHNyY19hbHBoYTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4gKysgPSAqc3JjX2FscGhhX3NjYW47DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiArKyA9IHNyY19iOw0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuICsrID0gc3JjX2c7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gKysgPSBzcmNfcjsNCi0gICAgICAgICAgICAgICAgc3JjX2FscGhhX3NjYW4gKys7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9CWVRFIHNyY19hbHBoYTsNCi0gICAgICAgICAgICBpZiAoY2xpcF9zY2FuID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgc3JjX2FscGhhID0gKnNyY19hbHBoYV9zY2FuKys7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiAoKnNyY19hbHBoYV9zY2FuKyspIC8gMjU1Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDM7DQotICAgICAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4gKysgPSBkZXN0X2FscGhhOw0KLSAgICAgICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvIGRlc3RfYWxwaGE7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19iLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfZywgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX3IsIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICB9DQotICAgIH0gZWxzZQ0KLSAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgIEZYX0FSR0IgYXJnYiA9IHBQYWxldHRlWypzcmNfc2Nhbl07DQotICAgICAgICAgICAgaW50IHNyY19yID0gRlhBUkdCX1IoYXJnYik7DQotICAgICAgICAgICAgaW50IHNyY19nID0gRlhBUkdCX0coYXJnYik7DQotICAgICAgICAgICAgaW50IHNyY19iID0gRlhBUkdCX0IoYXJnYik7DQotICAgICAgICAgICAgaWYgKGNsaXBfc2NhbiA9PSBOVUxMIHx8IGNsaXBfc2Nhbltjb2xdID09IDI1NSkgew0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSBzcmNfYjsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gc3JjX2c7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19yOw0KLSAgICAgICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuKysgPSAyNTU7DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdOw0KLSAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgZGVzdF9hbHBoYV9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICBzcmNfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGludCBiYWNrX2FscGhhID0gKmRlc3RfYWxwaGFfc2NhbjsNCi0gICAgICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsNCi0gICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuICsrID0gZGVzdF9hbHBoYTsNCi0gICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfYiwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2csIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19yLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgfQ0KLX0NCi1pbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93XzFicHBSZ2IyQXJnYl9Ob0JsZW5kKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCBzcmNfbGVmdCwgaW50IHdpZHRoLA0KLSAgICAgICAgRlhfRFdPUkQqIHBQYWxldHRlLCBGWF9MUENCWVRFIGNsaXBfc2NhbikNCi17DQotICAgIGludCByZXNldF9yLCByZXNldF9nLCByZXNldF9iOw0KLSAgICBpbnQgc2V0X3IsIHNldF9nLCBzZXRfYjsNCi0gICAgcmVzZXRfciA9IEZYQVJHQl9SKHBQYWxldHRlWzBdKTsNCi0gICAgcmVzZXRfZyA9IEZYQVJHQl9HKHBQYWxldHRlWzBdKTsNCi0gICAgcmVzZXRfYiA9IEZYQVJHQl9CKHBQYWxldHRlWzBdKTsNCi0gICAgc2V0X3IgPSBGWEFSR0JfUihwUGFsZXR0ZVsxXSk7DQotICAgIHNldF9nID0gRlhBUkdCX0cocFBhbGV0dGVbMV0pOw0KLSAgICBzZXRfYiA9IEZYQVJHQl9CKHBQYWxldHRlWzFdKTsNCi0gICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgaW50IHNyY19yLCBzcmNfZywgc3JjX2I7DQotICAgICAgICBpZiAoc3JjX3NjYW5bKGNvbCArIHNyY19sZWZ0KSAvIDhdICYgKDEgPDwgKDcgLSAoY29sICsgc3JjX2xlZnQpICUgOCkpKSB7DQotICAgICAgICAgICAgc3JjX3IgPSBzZXRfcjsNCi0gICAgICAgICAgICBzcmNfZyA9IHNldF9nOw0KLSAgICAgICAgICAgIHNyY19iID0gc2V0X2I7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHNyY19yID0gcmVzZXRfcjsNCi0gICAgICAgICAgICBzcmNfZyA9IHJlc2V0X2c7DQotICAgICAgICAgICAgc3JjX2IgPSByZXNldF9iOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGNsaXBfc2NhbiA9PSBOVUxMIHx8IGNsaXBfc2Nhbltjb2xdID09IDI1NSkgew0KLSAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19iOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19nOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19yOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IDI1NTsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXTsNCi0gICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW50IGJhY2tfYWxwaGEgPSBkZXN0X3NjYW5bM107DQotICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsNCi0gICAgICAgIGRlc3Rfc2NhblszXSA9IGRlc3RfYWxwaGE7DQotICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOw0KLSAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19iLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2csIGFscGhhX3JhdGlvKTsNCi0gICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfciwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICB9DQotfQ0KLXZvaWQgX0NvbXBvc2l0ZVJvd18xYnBwUmdiMlJnYmFfTm9CbGVuZChGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgc3JjX2xlZnQsIGludCB3aWR0aCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQqIHBQYWxldHRlLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3RfYWxwaGFfc2NhbikNCi17DQotICAgIGludCByZXNldF9yLCByZXNldF9nLCByZXNldF9iOw0KLSAgICBpbnQgc2V0X3IsIHNldF9nLCBzZXRfYjsNCi0gICAgcmVzZXRfciA9IEZYQVJHQl9SKHBQYWxldHRlWzBdKTsNCi0gICAgcmVzZXRfZyA9IEZYQVJHQl9HKHBQYWxldHRlWzBdKTsNCi0gICAgcmVzZXRfYiA9IEZYQVJHQl9CKHBQYWxldHRlWzBdKTsNCi0gICAgc2V0X3IgPSBGWEFSR0JfUihwUGFsZXR0ZVsxXSk7DQotICAgIHNldF9nID0gRlhBUkdCX0cocFBhbGV0dGVbMV0pOw0KLSAgICBzZXRfYiA9IEZYQVJHQl9CKHBQYWxldHRlWzFdKTsNCi0gICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgaW50IHNyY19yLCBzcmNfZywgc3JjX2I7DQotICAgICAgICBpZiAoc3JjX3NjYW5bKGNvbCArIHNyY19sZWZ0KSAvIDhdICYgKDEgPDwgKDcgLSAoY29sICsgc3JjX2xlZnQpICUgOCkpKSB7DQotICAgICAgICAgICAgc3JjX3IgPSBzZXRfcjsNCi0gICAgICAgICAgICBzcmNfZyA9IHNldF9nOw0KLSAgICAgICAgICAgIHNyY19iID0gc2V0X2I7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHNyY19yID0gcmVzZXRfcjsNCi0gICAgICAgICAgICBzcmNfZyA9IHJlc2V0X2c7DQotICAgICAgICAgICAgc3JjX2IgPSByZXNldF9iOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGNsaXBfc2NhbiA9PSBOVUxMIHx8IGNsaXBfc2Nhbltjb2xdID09IDI1NSkgew0KLSAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19iOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19nOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19yOw0KLSAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4rKyA9IDI1NTsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXTsNCi0gICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSAzOw0KLSAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBiYWNrX2FscGhhID0gKmRlc3RfYWxwaGFfc2NhbjsNCi0gICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiArKyA9IGRlc3RfYWxwaGE7DQotICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOw0KLSAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19iLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2csIGFscGhhX3JhdGlvKTsNCi0gICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfciwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICB9DQotfQ0KLXZvaWQgX0NvbXBvc2l0ZVJvd19CeXRlTWFzazJBcmdiKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCBtYXNrX2FscGhhLCBpbnQgc3JjX3IsIGludCBzcmNfZywgaW50IHNyY19iLCBpbnQgcGl4ZWxfY291bnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsZW5kX3R5cGUsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuKQ0KLXsNCi0gICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgew0KLSAgICAgICAgaW50IHNyY19hbHBoYTsNCi0gICAgICAgIGlmIChjbGlwX3NjYW4pIHsNCi0gICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhICogY2xpcF9zY2FuW2NvbF0gKiBzcmNfc2Nhbltjb2xdIC8gMjU1IC8gMjU1Ow0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhICogc3JjX3NjYW5bY29sXSAvIDI1NTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9IGRlc3Rfc2NhblszXTsNCi0gICAgICAgIGlmIChiYWNrX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICBGWEFSR0JfU0VURElCKGRlc3Rfc2NhbiwgRlhBUkdCX01BS0Uoc3JjX2FscGhhLCBzcmNfciwgc3JjX2csIHNyY19iKSk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgZGVzdF9zY2FuWzNdID0gZGVzdF9hbHBoYTsNCi0gICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvIGRlc3RfYWxwaGE7DQotICAgICAgICBpZiAoYmxlbmRfdHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEUpIHsNCi0gICAgICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcnNbM107DQotICAgICAgICAgICAgRlhfQllURSBzcmNfc2NhblszXTsNCi0gICAgICAgICAgICBzcmNfc2NhblswXSA9IHNyY19iOw0KLSAgICAgICAgICAgIHNyY19zY2FuWzFdID0gc3JjX2c7DQotICAgICAgICAgICAgc3JjX3NjYW5bMl0gPSBzcmNfcjsNCi0gICAgICAgICAgICBfUkdCX0JsZW5kKGJsZW5kX3R5cGUsIHNyY19zY2FuLCBkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzKTsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnNbMF0sIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzWzFdLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9yc1syXSwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgfSBlbHNlIGlmIChibGVuZF90eXBlKSB7DQotICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX2IpOw0KLSAgICAgICAgICAgIGJsZW5kZWQgPSBGWERJQl9BTFBIQV9NRVJHRShzcmNfYiwgYmxlbmRlZCwgYmFja19hbHBoYSk7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWQsIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgYmxlbmRlZCA9IF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCBzcmNfZyk7DQotICAgICAgICAgICAgYmxlbmRlZCA9IEZYRElCX0FMUEhBX01FUkdFKHNyY19nLCBibGVuZGVkLCBiYWNrX2FscGhhKTsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZCwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICBibGVuZGVkID0gX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sIHNyY19yKTsNCi0gICAgICAgICAgICBibGVuZGVkID0gRlhESUJfQUxQSEFfTUVSR0Uoc3JjX3IsIGJsZW5kZWQsIGJhY2tfYWxwaGEpOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfYiwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2csIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19yLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICB9DQotICAgICAgICBkZXN0X3NjYW4gKz0gMjsNCi0gICAgfQ0KLX0NCi12b2lkIF9Db21wb3NpdGVSb3dfQnl0ZU1hc2syUmdiYShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgbWFza19hbHBoYSwgaW50IHNyY19yLCBpbnQgc3JjX2csIGludCBzcmNfYiwgaW50IHBpeGVsX2NvdW50LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibGVuZF90eXBlLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9hbHBoYV9zY2FuKQ0KLXsNCi0gICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgew0KLSAgICAgICAgaW50IHNyY19hbHBoYTsNCi0gICAgICAgIGlmIChjbGlwX3NjYW4pIHsNCi0gICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhICogY2xpcF9zY2FuW2NvbF0gKiBzcmNfc2Nhbltjb2xdIC8gMjU1IC8gMjU1Ow0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhICogc3JjX3NjYW5bY29sXSAvIDI1NTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9ICpkZXN0X2FscGhhX3NjYW47DQotICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiArKyA9IHNyY19iOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gKysgPSBzcmNfZzsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuICsrID0gc3JjX3I7DQotICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiArKyA9IHNyY19hbHBoYTsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSAzOw0KLSAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiArKyA9IGRlc3RfYWxwaGE7DQotICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOw0KLSAgICAgICAgaWYgKGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFKSB7DQotICAgICAgICAgICAgaW50IGJsZW5kZWRfY29sb3JzWzNdOw0KLSAgICAgICAgICAgIEZYX0JZVEUgc3JjX3NjYW5bM107DQotICAgICAgICAgICAgc3JjX3NjYW5bMF0gPSBzcmNfYjsNCi0gICAgICAgICAgICBzcmNfc2NhblsxXSA9IHNyY19nOw0KLSAgICAgICAgICAgIHNyY19zY2FuWzJdID0gc3JjX3I7DQotICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9ycyk7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzWzBdLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9yc1sxXSwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnNbMl0sIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICB9IGVsc2UgaWYgKGJsZW5kX3R5cGUpIHsNCi0gICAgICAgICAgICBpbnQgYmxlbmRlZCA9IF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCBzcmNfYik7DQotICAgICAgICAgICAgYmxlbmRlZCA9IEZYRElCX0FMUEhBX01FUkdFKHNyY19iLCBibGVuZGVkLCBiYWNrX2FscGhhKTsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZCwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICBibGVuZGVkID0gX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sIHNyY19nKTsNCi0gICAgICAgICAgICBibGVuZGVkID0gRlhESUJfQUxQSEFfTUVSR0Uoc3JjX2csIGJsZW5kZWQsIGJhY2tfYWxwaGEpOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgIGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX3IpOw0KLSAgICAgICAgICAgIGJsZW5kZWQgPSBGWERJQl9BTFBIQV9NRVJHRShzcmNfciwgYmxlbmRlZCwgYmFja19hbHBoYSk7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWQsIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfYiwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2csIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19yLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLXZvaWQgX0NvbXBvc2l0ZVJvd19CeXRlTWFzazJSZ2IoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IG1hc2tfYWxwaGEsIGludCBzcmNfciwgaW50IHNyY19nLCBpbnQgc3JjX2IsIGludCBwaXhlbF9jb3VudCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibGVuZF90eXBlLCBpbnQgQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbikNCi17DQotICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgIGludCBzcmNfYWxwaGE7DQotICAgICAgICBpZiAoY2xpcF9zY2FuKSB7DQotICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYSAqIGNsaXBfc2Nhbltjb2xdICogc3JjX3NjYW5bY29sXSAvIDI1NSAvIDI1NTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYSAqIHNyY19zY2FuW2NvbF0gLyAyNTU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKz0gQnBwOw0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFKSB7DQotICAgICAgICAgICAgaW50IGJsZW5kZWRfY29sb3JzWzNdOw0KLSAgICAgICAgICAgIEZYX0JZVEUgc3JjX3NjYW5bM107DQotICAgICAgICAgICAgc3JjX3NjYW5bMF0gPSBzcmNfYjsNCi0gICAgICAgICAgICBzcmNfc2NhblsxXSA9IHNyY19nOw0KLSAgICAgICAgICAgIHNyY19zY2FuWzJdID0gc3JjX3I7DQotICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9ycyk7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzWzBdLCBzcmNfYWxwaGEpOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnNbMV0sIHNyY19hbHBoYSk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9yc1syXSwgc3JjX2FscGhhKTsNCi0gICAgICAgIH0gZWxzZSBpZiAoYmxlbmRfdHlwZSkgew0KLSAgICAgICAgICAgIGludCBibGVuZGVkID0gX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sIHNyY19iKTsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZCwgc3JjX2FscGhhKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgYmxlbmRlZCA9IF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCBzcmNfZyk7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWQsIHNyY19hbHBoYSk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgIGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX3IpOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkLCBzcmNfYWxwaGEpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2IsIHNyY19hbHBoYSk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfZywgc3JjX2FscGhhKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19yLCBzcmNfYWxwaGEpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdF9zY2FuICs9IEJwcCAtIDI7DQotICAgIH0NCi19DQotdm9pZCBfQ29tcG9zaXRlUm93X0J5dGVNYXNrMk1hc2soRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IG1hc2tfYWxwaGEsIGludCBwaXhlbF9jb3VudCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUENCWVRFIGNsaXBfc2NhbikNCi17DQotICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgIGludCBzcmNfYWxwaGE7DQotICAgICAgICBpZiAoY2xpcF9zY2FuKSB7DQotICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYSAqIGNsaXBfc2Nhbltjb2xdICogc3JjX3NjYW5bY29sXSAvIDI1NSAvIDI1NTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYSAqIHNyY19zY2FuW2NvbF0gLyAyNTU7DQotICAgICAgICB9DQotICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSAqZGVzdF9zY2FuOw0KLSAgICAgICAgaWYgKCFiYWNrX2FscGhhKSB7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IHNyY19hbHBoYTsNCi0gICAgICAgIH0gZWxzZSBpZiAoc3JjX2FscGhhKSB7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICB9DQotfQ0KLXZvaWQgX0NvbXBvc2l0ZVJvd19CeXRlTWFzazJHcmF5KEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCBtYXNrX2FscGhhLCBpbnQgc3JjX2dyYXksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBpeGVsX2NvdW50LCBGWF9MUENCWVRFIGNsaXBfc2NhbikNCi17DQotICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgIGludCBzcmNfYWxwaGE7DQotICAgICAgICBpZiAoY2xpcF9zY2FuKSB7DQotICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYSAqIGNsaXBfc2Nhbltjb2xdICogc3JjX3NjYW5bY29sXSAvIDI1NSAvIDI1NTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYSAqIHNyY19zY2FuW2NvbF0gLyAyNTU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoc3JjX2FscGhhKSB7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19ncmF5LCBzcmNfYWxwaGEpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICB9DQotfQ0KLXZvaWQgX0NvbXBvc2l0ZVJvd19CeXRlTWFzazJHcmF5YShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgbWFza19hbHBoYSwgaW50IHNyY19ncmF5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxfY291bnQsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9hbHBoYV9zY2FuKQ0KLXsNCi0gICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgew0KLSAgICAgICAgaW50IHNyY19hbHBoYTsNCi0gICAgICAgIGlmIChjbGlwX3NjYW4pIHsNCi0gICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhICogY2xpcF9zY2FuW2NvbF0gKiBzcmNfc2Nhbltjb2xdIC8gMjU1IC8gMjU1Ow0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhICogc3JjX3NjYW5bY29sXSAvIDI1NTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9ICpkZXN0X2FscGhhX3NjYW47DQotICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiArKyA9IHNyY19ncmF5Ow0KLSAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4gKysgPSBzcmNfYWxwaGE7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgZGVzdF9hbHBoYV9zY2FuICsrOw0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICAqZGVzdF9hbHBoYV9zY2FuKysgPSBkZXN0X2FscGhhOw0KLSAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsNCi0gICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfZ3JheSwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICB9DQotfQ0KLXZvaWQgX0NvbXBvc2l0ZVJvd19CaXRNYXNrMkFyZ2IoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IG1hc2tfYWxwaGEsIGludCBzcmNfciwgaW50IHNyY19nLCBpbnQgc3JjX2IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2xlZnQsIGludCBwaXhlbF9jb3VudCwgaW50IGJsZW5kX3R5cGUsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuKQ0KLXsNCi0gICAgaWYgKGJsZW5kX3R5cGUgPT0gRlhESUJfQkxFTkRfTk9STUFMICYmIGNsaXBfc2NhbiA9PSBOVUxMICYmIG1hc2tfYWxwaGEgPT0gMjU1KSB7DQotICAgICAgICBGWF9BUkdCIGFyZ2IgPSBGWEFSR0JfTUFLRSgweGZmLCBzcmNfciwgc3JjX2csIHNyY19iKTsNCi0gICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgICAgICBpZiAoc3JjX3NjYW5bKHNyY19sZWZ0ICsgY29sKSAvIDhdICYgKDEgPDwgKDcgLSAoc3JjX2xlZnQgKyBjb2wpICUgOCkpKSB7DQotICAgICAgICAgICAgICAgIEZYQVJHQl9TRVRESUIoZGVzdF9zY2FuLCBhcmdiKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgew0KLSAgICAgICAgaWYgKCEoc3JjX3NjYW5bKHNyY19sZWZ0ICsgY29sKSAvIDhdICYgKDEgPDwgKDcgLSAoc3JjX2xlZnQgKyBjb2wpICUgOCkpKSkgew0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW50IHNyY19hbHBoYTsNCi0gICAgICAgIGlmIChjbGlwX3NjYW4pIHsNCi0gICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhICogY2xpcF9zY2FuW2NvbF0gLyAyNTU7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHNyY19hbHBoYSA9IG1hc2tfYWxwaGE7DQotICAgICAgICB9DQotICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSBkZXN0X3NjYW5bM107DQotICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgRlhBUkdCX1NFVERJQihkZXN0X3NjYW4sIEZYQVJHQl9NQUtFKHNyY19hbHBoYSwgc3JjX3IsIHNyY19nLCBzcmNfYikpOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICBkZXN0X3NjYW5bM10gPSBkZXN0X2FscGhhOw0KLSAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsNCi0gICAgICAgIGlmIChibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRSkgew0KLSAgICAgICAgICAgIGludCBibGVuZGVkX2NvbG9yc1szXTsNCi0gICAgICAgICAgICBGWF9CWVRFIHNyY19zY2FuWzNdOw0KLSAgICAgICAgICAgIHNyY19zY2FuWzBdID0gc3JjX2I7DQotICAgICAgICAgICAgc3JjX3NjYW5bMV0gPSBzcmNfZzsNCi0gICAgICAgICAgICBzcmNfc2NhblsyXSA9IHNyY19yOw0KLSAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX3NjYW4sIGRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnMpOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9yc1swXSwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnNbMV0sIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzWzJdLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICB9IGVsc2UgaWYgKGJsZW5kX3R5cGUpIHsNCi0gICAgICAgICAgICBpbnQgYmxlbmRlZCA9IF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCBzcmNfYik7DQotICAgICAgICAgICAgYmxlbmRlZCA9IEZYRElCX0FMUEhBX01FUkdFKHNyY19iLCBibGVuZGVkLCBiYWNrX2FscGhhKTsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZCwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICBibGVuZGVkID0gX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sIHNyY19nKTsNCi0gICAgICAgICAgICBibGVuZGVkID0gRlhESUJfQUxQSEFfTUVSR0Uoc3JjX2csIGJsZW5kZWQsIGJhY2tfYWxwaGEpOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgIGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX3IpOw0KLSAgICAgICAgICAgIGJsZW5kZWQgPSBGWERJQl9BTFBIQV9NRVJHRShzcmNfciwgYmxlbmRlZCwgYmFja19hbHBoYSk7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWQsIGFscGhhX3JhdGlvKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19iLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfZywgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX3IsIGFscGhhX3JhdGlvKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGRlc3Rfc2NhbiArPSAyOw0KLSAgICB9DQotfQ0KLXZvaWQgX0NvbXBvc2l0ZVJvd19CaXRNYXNrMlJnYmEoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IG1hc2tfYWxwaGEsIGludCBzcmNfciwgaW50IHNyY19nLCBpbnQgc3JjX2IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2xlZnQsIGludCBwaXhlbF9jb3VudCwgaW50IGJsZW5kX3R5cGUsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3RfYWxwaGFfc2NhbikNCi17DQotICAgIGlmIChibGVuZF90eXBlID09IEZYRElCX0JMRU5EX05PUk1BTCAmJiBjbGlwX3NjYW4gPT0gTlVMTCAmJiBtYXNrX2FscGhhID09IDI1NSkgew0KLSAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgew0KLSAgICAgICAgICAgIGlmIChzcmNfc2Nhblsoc3JjX2xlZnQgKyBjb2wpIC8gOF0gJiAoMSA8PCAoNyAtIChzcmNfbGVmdCArIGNvbCkgJSA4KSkpIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gc3JjX2I7DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IHNyY19nOw0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBzcmNfcjsNCi0gICAgICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiA9IG1hc2tfYWxwaGE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSAzOw0KLSAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICBpZiAoIShzcmNfc2Nhblsoc3JjX2xlZnQgKyBjb2wpIC8gOF0gJiAoMSA8PCAoNyAtIChzcmNfbGVmdCArIGNvbCkgJSA4KSkpKSB7DQotICAgICAgICAgICAgZGVzdF9zY2FuICs9IDM7DQotICAgICAgICAgICAgZGVzdF9hbHBoYV9zY2FuICsrOw0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW50IHNyY19hbHBoYTsNCi0gICAgICAgIGlmIChjbGlwX3NjYW4pIHsNCi0gICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhICogY2xpcF9zY2FuW2NvbF0gLyAyNTU7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHNyY19hbHBoYSA9IG1hc2tfYWxwaGE7DQotICAgICAgICB9DQotICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSBkZXN0X3NjYW5bM107DQotICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiArKyA9IHNyY19iOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gKysgPSBzcmNfZzsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuICsrID0gc3JjX3I7DQotICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiArKyA9IG1hc2tfYWxwaGE7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsNCi0gICAgICAgICpkZXN0X2FscGhhX3NjYW4gKysgPSBkZXN0X2FscGhhOw0KLSAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsNCi0gICAgICAgIGlmIChibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRSkgew0KLSAgICAgICAgICAgIGludCBibGVuZGVkX2NvbG9yc1szXTsNCi0gICAgICAgICAgICBGWF9CWVRFIHNyY19zY2FuWzNdOw0KLSAgICAgICAgICAgIHNyY19zY2FuWzBdID0gc3JjX2I7DQotICAgICAgICAgICAgc3JjX3NjYW5bMV0gPSBzcmNfZzsNCi0gICAgICAgICAgICBzcmNfc2NhblsyXSA9IHNyY19yOw0KLSAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX3NjYW4sIGRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnMpOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9yc1swXSwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnNbMV0sIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzWzJdLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgfSBlbHNlIGlmIChibGVuZF90eXBlKSB7DQotICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX2IpOw0KLSAgICAgICAgICAgIGJsZW5kZWQgPSBGWERJQl9BTFBIQV9NRVJHRShzcmNfYiwgYmxlbmRlZCwgYmFja19hbHBoYSk7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWQsIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgYmxlbmRlZCA9IF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCBzcmNfZyk7DQotICAgICAgICAgICAgYmxlbmRlZCA9IEZYRElCX0FMUEhBX01FUkdFKHNyY19nLCBibGVuZGVkLCBiYWNrX2FscGhhKTsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZCwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICBibGVuZGVkID0gX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sIHNyY19yKTsNCi0gICAgICAgICAgICBibGVuZGVkID0gRlhESUJfQUxQSEFfTUVSR0Uoc3JjX3IsIGJsZW5kZWQsIGJhY2tfYWxwaGEpOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2IsIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19nLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfciwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi12b2lkIF9Db21wb3NpdGVSb3dfQml0TWFzazJSZ2IoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IG1hc2tfYWxwaGEsIGludCBzcmNfciwgaW50IHNyY19nLCBpbnQgc3JjX2IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfbGVmdCwgaW50IHBpeGVsX2NvdW50LCBpbnQgYmxlbmRfdHlwZSwgaW50IEJwcCwgRlhfTFBDQllURSBjbGlwX3NjYW4pDQotew0KLSAgICBpZiAoYmxlbmRfdHlwZSA9PSBGWERJQl9CTEVORF9OT1JNQUwgJiYgY2xpcF9zY2FuID09IE5VTEwgJiYgbWFza19hbHBoYSA9PSAyNTUpIHsNCi0gICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgICAgICBpZiAoc3JjX3NjYW5bKHNyY19sZWZ0ICsgY29sKSAvIDhdICYgKDEgPDwgKDcgLSAoc3JjX2xlZnQgKyBjb2wpICUgOCkpKSB7DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IHNyY19yOw0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBzcmNfZzsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gc3JjX2I7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgew0KLSAgICAgICAgaWYgKCEoc3JjX3NjYW5bKHNyY19sZWZ0ICsgY29sKSAvIDhdICYgKDEgPDwgKDcgLSAoc3JjX2xlZnQgKyBjb2wpICUgOCkpKSkgew0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpbnQgc3JjX2FscGhhOw0KLSAgICAgICAgaWYgKGNsaXBfc2Nhbikgew0KLSAgICAgICAgICAgIHNyY19hbHBoYSA9IG1hc2tfYWxwaGEgKiBjbGlwX3NjYW5bY29sXSAvIDI1NTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoYmxlbmRfdHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEUpIHsNCi0gICAgICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcnNbM107DQotICAgICAgICAgICAgRlhfQllURSBzcmNfc2NhblszXTsNCi0gICAgICAgICAgICBzcmNfc2NhblswXSA9IHNyY19iOw0KLSAgICAgICAgICAgIHNyY19zY2FuWzFdID0gc3JjX2c7DQotICAgICAgICAgICAgc3JjX3NjYW5bMl0gPSBzcmNfcjsNCi0gICAgICAgICAgICBfUkdCX0JsZW5kKGJsZW5kX3R5cGUsIHNyY19zY2FuLCBkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzKTsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnNbMF0sIHNyY19hbHBoYSk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9yc1sxXSwgc3JjX2FscGhhKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzWzJdLCBzcmNfYWxwaGEpOw0KLSAgICAgICAgfSBlbHNlIGlmIChibGVuZF90eXBlKSB7DQotICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX2IpOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkLCBzcmNfYWxwaGEpOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbisrOw0KLSAgICAgICAgICAgIGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX2cpOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkLCBzcmNfYWxwaGEpOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbisrOw0KLSAgICAgICAgICAgIGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX3IpOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkLCBzcmNfYWxwaGEpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2IsIHNyY19hbHBoYSk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfZywgc3JjX2FscGhhKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19yLCBzcmNfYWxwaGEpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdF9zY2FuICs9IEJwcCAtIDI7DQotICAgIH0NCi19DQotdm9pZCBfQ29tcG9zaXRlUm93X0JpdE1hc2syTWFzayhGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgbWFza19hbHBoYSwgaW50IHNyY19sZWZ0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBpeGVsX2NvdW50LCBGWF9MUENCWVRFIGNsaXBfc2NhbikNCi17DQotICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgIGlmICghKHNyY19zY2FuWyhzcmNfbGVmdCArIGNvbCkgLyA4XSAmICgxIDw8ICg3IC0gKHNyY19sZWZ0ICsgY29sKSAlIDgpKSkpIHsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpbnQgc3JjX2FscGhhOw0KLSAgICAgICAgaWYgKGNsaXBfc2Nhbikgew0KLSAgICAgICAgICAgIHNyY19hbHBoYSA9IG1hc2tfYWxwaGEgKiBjbGlwX3NjYW5bY29sXSAvIDI1NTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9ICpkZXN0X3NjYW47DQotICAgICAgICBpZiAoIWJhY2tfYWxwaGEpIHsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gc3JjX2FscGhhOw0KLSAgICAgICAgfSBlbHNlIGlmIChzcmNfYWxwaGEpIHsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICB9DQotICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgIH0NCi19DQotdm9pZCBfQ29tcG9zaXRlUm93X0JpdE1hc2syR3JheShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgbWFza19hbHBoYSwgaW50IHNyY19ncmF5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19sZWZ0LCBpbnQgcGl4ZWxfY291bnQsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuKQ0KLXsNCi0gICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgew0KLSAgICAgICAgaWYgKCEoc3JjX3NjYW5bKHNyY19sZWZ0ICsgY29sKSAvIDhdICYgKDEgPDwgKDcgLSAoc3JjX2xlZnQgKyBjb2wpICUgOCkpKSkgew0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBzcmNfYWxwaGE7DQotICAgICAgICBpZiAoY2xpcF9zY2FuKSB7DQotICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYSAqIGNsaXBfc2Nhbltjb2xdIC8gMjU1Ow0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHNyY19hbHBoYSkgew0KLSAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfZ3JheSwgc3JjX2FscGhhKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgfQ0KLX0NCi12b2lkIF9Db21wb3NpdGVSb3dfQml0TWFzazJHcmF5YShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgbWFza19hbHBoYSwgaW50IHNyY19ncmF5LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfbGVmdCwgaW50IHBpeGVsX2NvdW50LCBGWF9MUENCWVRFIGNsaXBfc2NhbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9hbHBoYV9zY2FuKQ0KLXsNCi0gICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgew0KLSAgICAgICAgaWYgKCEoc3JjX3NjYW5bKHNyY19sZWZ0ICsgY29sKSAvIDhdICYgKDEgPDwgKDcgLSAoc3JjX2xlZnQgKyBjb2wpICUgOCkpKSkgew0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4gKys7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpbnQgc3JjX2FscGhhOw0KLSAgICAgICAgaWYgKGNsaXBfc2Nhbikgew0KLSAgICAgICAgICAgIHNyY19hbHBoYSA9IG1hc2tfYWxwaGEgKiBjbGlwX3NjYW5bY29sXSAvIDI1NTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9ICpkZXN0X2FscGhhX3NjYW47DQotICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiArKyA9IHNyY19ncmF5Ow0KLSAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4gKysgPSBzcmNfYWxwaGE7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgZGVzdF9hbHBoYV9zY2FuICsrOw0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICAqZGVzdF9hbHBoYV9zY2FuKysgPSBkZXN0X2FscGhhOw0KLSAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsNCi0gICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfZ3JheSwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICB9DQotfQ0KLXZvaWQgX0NvbXBvc2l0ZVJvd19BcmdiMkFyZ2JfUmdiQnl0ZU9yZGVyKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCBwaXhlbF9jb3VudCwgaW50IGJsZW5kX3R5cGUsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuKQ0KLXsNCi0gICAgaW50IGJsZW5kZWRfY29sb3JzWzNdOw0KLSAgICBGWF9CT09MIGJOb25zZXBhcmFibGVCbGVuZCA9IGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFOw0KLSAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSBkZXN0X3NjYW5bM107DQotICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgaWYgKGNsaXBfc2Nhbikgew0KLSAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfc2NhblszXSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuWzNdID0gc3JjX2FscGhhOw0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBzcmNfc2NhblsyXTsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gc3JjX3NjYW5bMV07DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IHNyY19zY2FuWzBdOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIEZYQVJHQl9SR0JPUkRFUkNPUFkoZGVzdF9zY2FuLCBzcmNfc2Nhbik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBGWF9CWVRFIHNyY19hbHBoYTsNCi0gICAgICAgIGlmIChjbGlwX3NjYW4gPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzNdOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqIHNyY19zY2FuWzNdIC8gMjU1Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgZGVzdF9zY2FuWzNdID0gZGVzdF9hbHBoYTsNCi0gICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvIGRlc3RfYWxwaGE7DQotICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7DQotICAgICAgICAgICAgRlhfQllURSBkZXN0X3NjYW5fb1szXTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5fb1swXSA9IGRlc3Rfc2NhblsyXTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5fb1sxXSA9IGRlc3Rfc2NhblsxXTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5fb1syXSA9IGRlc3Rfc2NhblswXTsNCi0gICAgICAgICAgICBfUkdCX0JsZW5kKGJsZW5kX3R5cGUsIHNyY19zY2FuLCBkZXN0X3NjYW5fbywgYmxlbmRlZF9jb2xvcnMpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7DQotICAgICAgICAgICAgaW50IGluZGV4ID0gMiAtIGNvbG9yOw0KLSAgICAgICAgICAgIGlmIChibGVuZF90eXBlKSB7DQotICAgICAgICAgICAgICAgIGludCBibGVuZGVkID0gYk5vbnNlcGFyYWJsZUJsZW5kID8gYmxlbmRlZF9jb2xvcnNbY29sb3JdIDoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkxFTkQoYmxlbmRfdHlwZSwgZGVzdF9zY2FuW2luZGV4XSwgKnNyY19zY2FuKTsNCi0gICAgICAgICAgICAgICAgYmxlbmRlZCA9IEZYRElCX0FMUEhBX01FUkdFKCpzcmNfc2NhbiwgYmxlbmRlZCwgYmFja19hbHBoYSk7DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbltpbmRleF0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5baW5kZXhdLCBibGVuZGVkLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuW2luZGV4XSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhbltpbmRleF0sICpzcmNfc2NhbiwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBzcmNfc2NhbiArKzsNCi0gICAgICAgIH0NCi0gICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgc3JjX3NjYW4rKzsNCi0gICAgfQ0KLX0NCi12b2lkIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfQmxlbmRfTm9DbGlwX1JnYkJ5dGVPcmRlcihGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBibGVuZF90eXBlLCBpbnQgc3JjX0JwcCkNCi17DQotICAgIGludCBibGVuZGVkX2NvbG9yc1szXTsNCi0gICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsNCi0gICAgaW50IHNyY19nYXAgPSBzcmNfQnBwIC0gMzsNCi0gICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gZGVzdF9zY2FuWzNdOw0KLSAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgIGlmIChzcmNfQnBwID09IDQpIHsNCi0gICAgICAgICAgICAgICAgRlhBUkdCX1NFVFJHQk9SREVSRElCKGRlc3Rfc2NhbiwgMHhmZjAwMDAwMCB8IEZYQVJHQl9HRVRESUIoc3JjX3NjYW4pKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBGWEFSR0JfU0VUUkdCT1JERVJESUIoZGVzdF9zY2FuLCBGWEFSR0JfTUFLRSgweGZmLCBzcmNfc2NhblsyXSwgc3JjX3NjYW5bMV0sIHNyY19zY2FuWzBdKSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBkZXN0X3NjYW5bM10gPSAweGZmOw0KLSAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkJew0KLSAgICAgICAgICAgIEZYX0JZVEUgZGVzdF9zY2FuX29bM107DQotICAgICAgICAgICAgZGVzdF9zY2FuX29bMF0gPSBkZXN0X3NjYW5bMl07DQotICAgICAgICAgICAgZGVzdF9zY2FuX29bMV0gPSBkZXN0X3NjYW5bMV07DQotICAgICAgICAgICAgZGVzdF9zY2FuX29bMl0gPSBkZXN0X3NjYW5bMF07DQotICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuX28sIGJsZW5kZWRfY29sb3JzKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGZvciAoaW50IGNvbG9yID0gMDsgY29sb3IgPCAzOyBjb2xvciArKykgew0KLSAgICAgICAgICAgIGludCBpbmRleCA9IDIgLSBjb2xvcjsNCi0gICAgICAgICAgICBpbnQgc3JjX2NvbG9yID0gRlhfR0FNTUEoKnNyY19zY2FuKTsNCi0gICAgICAgICAgICBpbnQgYmxlbmRlZCA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3JzW2NvbG9yXSA6DQotICAgICAgICAgICAgICAgICAgICAgICAgICBfQkxFTkQoYmxlbmRfdHlwZSwgZGVzdF9zY2FuW2luZGV4XSwgc3JjX2NvbG9yKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5baW5kZXhdID0gRlhESUJfQUxQSEFfTUVSR0Uoc3JjX2NvbG9yLCBibGVuZGVkLCBiYWNrX2FscGhhKTsNCi0gICAgICAgICAgICBzcmNfc2NhbiArKzsNCi0gICAgICAgIH0NCi0gICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgc3JjX3NjYW4gKz0gc3JjX2dhcDsNCi0gICAgfQ0KLX0NCi1pbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93X0FyZ2IyUmdiX0JsZW5kX1JnYkJ5dGVPcmRlcihGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBibGVuZF90eXBlLCBpbnQgZGVzdF9CcHAsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuKQ0KLXsNCi0gICAgaW50IGJsZW5kZWRfY29sb3JzWzNdOw0KLSAgICBGWF9CT09MIGJOb25zZXBhcmFibGVCbGVuZCA9IGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFOw0KLSAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7DQotICAgICAgICBGWF9CWVRFIHNyY19hbHBoYTsNCi0gICAgICAgIGlmIChjbGlwX3NjYW4pIHsNCi0gICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblszXSAqICgqY2xpcF9zY2FuKyspIC8gMjU1Ow0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblszXTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X0JwcDsNCi0gICAgICAgICAgICBzcmNfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgew0KLSAgICAgICAgICAgIEZYX0JZVEUgZGVzdF9zY2FuX29bM107DQotICAgICAgICAgICAgZGVzdF9zY2FuX29bMF0gPSBkZXN0X3NjYW5bMl07DQotICAgICAgICAgICAgZGVzdF9zY2FuX29bMV0gPSBkZXN0X3NjYW5bMV07DQotICAgICAgICAgICAgZGVzdF9zY2FuX29bMl0gPSBkZXN0X3NjYW5bMF07DQotICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuX28sIGJsZW5kZWRfY29sb3JzKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGZvciAoaW50IGNvbG9yID0gMDsgY29sb3IgPCAzOyBjb2xvciArKykgew0KLSAgICAgICAgICAgIGludCBpbmRleCA9IDIgLSBjb2xvcjsNCi0gICAgICAgICAgICBpbnQgYmFja19jb2xvciA9IEZYX0dBTU1BKGRlc3Rfc2NhbltpbmRleF0pOw0KLSAgICAgICAgICAgIGludCBibGVuZGVkID0gYk5vbnNlcGFyYWJsZUJsZW5kID8gYmxlbmRlZF9jb2xvcnNbY29sb3JdIDoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9CTEVORChibGVuZF90eXBlLCBiYWNrX2NvbG9yLCAqc3JjX3NjYW4pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbltpbmRleF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKGJhY2tfY29sb3IsIGJsZW5kZWQsIHNyY19hbHBoYSkpOw0KLSAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfQnBwOw0KLSAgICAgICAgc3JjX3NjYW4gKys7DQotICAgIH0NCi19DQotaW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd19SZ2IyQXJnYl9Ob0JsZW5kX05vQ2xpcF9SZ2JCeXRlT3JkZXIoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgc3JjX0JwcCkNCi17DQotICAgIGludCBzcmNfZ2FwID0gc3JjX0JwcCAtIDM7DQotICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgIGlmIChzcmNfQnBwID09IDQpIHsNCi0gICAgICAgICAgICBGWEFSR0JfU0VUUkdCT1JERVJESUIoZGVzdF9zY2FuLCAweGZmMDAwMDAwIHwgRlhBUkdCX0dFVERJQihzcmNfc2NhbikpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBGWEFSR0JfU0VUUkdCT1JERVJESUIoZGVzdF9zY2FuLCBGWEFSR0JfTUFLRSgweGZmLCBzcmNfc2NhblsyXSwgc3JjX3NjYW5bMV0sIHNyY19zY2FuWzBdKSk7DQotICAgICAgICB9DQotICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7DQotICAgIH0NCi19DQotaW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd19SZ2IyUmdiX0JsZW5kX05vQ2xpcF9SZ2JCeXRlT3JkZXIoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgYmxlbmRfdHlwZSwgaW50IGRlc3RfQnBwLCBpbnQgc3JjX0JwcCkNCi17DQotICAgIGludCBibGVuZGVkX2NvbG9yc1szXTsNCi0gICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsNCi0gICAgaW50IHNyY19nYXAgPSBzcmNfQnBwIC0gMzsNCi0gICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgew0KLSAgICAgICAgICAgIEZYX0JZVEUgZGVzdF9zY2FuX29bM107DQotICAgICAgICAgICAgZGVzdF9zY2FuX29bMF0gPSBkZXN0X3NjYW5bMl07DQotICAgICAgICAgICAgZGVzdF9zY2FuX29bMV0gPSBkZXN0X3NjYW5bMV07DQotICAgICAgICAgICAgZGVzdF9zY2FuX29bMl0gPSBkZXN0X3NjYW5bMF07DQotICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuX28sIGJsZW5kZWRfY29sb3JzKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGZvciAoaW50IGNvbG9yID0gMDsgY29sb3IgPCAzOyBjb2xvciArKykgew0KLSAgICAgICAgICAgIGludCBpbmRleCA9IDIgLSBjb2xvcjsNCi0gICAgICAgICAgICBpbnQgYmFja19jb2xvciA9IEZYX0dBTU1BKGRlc3Rfc2NhbltpbmRleF0pOw0KLSAgICAgICAgICAgIGludCBzcmNfY29sb3IgPSBGWF9HQU1NQSgqc3JjX3NjYW4pOw0KLSAgICAgICAgICAgIGludCBibGVuZGVkID0gYk5vbnNlcGFyYWJsZUJsZW5kID8gYmxlbmRlZF9jb2xvcnNbY29sb3JdIDoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9CTEVORChibGVuZF90eXBlLCBiYWNrX2NvbG9yLCBzcmNfY29sb3IpOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbltpbmRleF0gPSBGWF9HQU1NQV9JTlZFUlNFKGJsZW5kZWQpOw0KLSAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfQnBwOw0KLSAgICAgICAgc3JjX3NjYW4gKz0gc3JjX2dhcDsNCi0gICAgfQ0KLX0NCi1pbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93X0FyZ2IyUmdiX05vQmxlbmRfUmdiQnl0ZU9yZGVyKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgaW50IGRlc3RfQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbikNCi17DQotICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgIEZYX0JZVEUgc3JjX2FscGhhOw0KLSAgICAgICAgaWYgKGNsaXBfc2Nhbikgew0KLSAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzNdICogKCpjbGlwX3NjYW4rKykgLyAyNTU7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzNdOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAyNTUpIHsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKCpzcmNfc2NhbisrKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQV9JTlZFUlNFKCpzcmNfc2NhbisrKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKCpzcmNfc2NhbisrKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9CcHA7DQotICAgICAgICAgICAgc3JjX3NjYW4gKys7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9CcHA7DQotICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGZvciAoaW50IGNvbG9yID0gMDsgY29sb3IgPCAzOyBjb2xvciArKykgew0KLSAgICAgICAgICAgIGludCBpbmRleCA9IDIgLSBjb2xvcjsNCi0gICAgICAgICAgICBkZXN0X3NjYW5baW5kZXhdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5baW5kZXhdKSwgKnNyY19zY2FuLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICBzcmNfc2NhbiArKzsNCi0gICAgICAgIH0NCi0gICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X0JwcDsNCi0gICAgICAgIHNyY19zY2FuICsrOw0KLSAgICB9DQotfQ0KLWlubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9Ob0JsZW5kX05vQ2xpcF9SZ2JCeXRlT3JkZXIoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgZGVzdF9CcHAsIGludCBzcmNfQnBwKQ0KLXsNCi0gICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgZGVzdF9zY2FuWzJdID0gc3JjX3NjYW5bMF07DQotICAgICAgICBkZXN0X3NjYW5bMV0gPSBzcmNfc2NhblsxXTsNCi0gICAgICAgIGRlc3Rfc2NhblswXSA9IHNyY19zY2FuWzJdOw0KLSAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfQnBwOw0KLSAgICAgICAgc3JjX3NjYW4gKz0gc3JjX0JwcDsNCi0gICAgfQ0KLX0NCi1pbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93X1JnYjJBcmdiX0JsZW5kX0NsaXBfUmdiQnl0ZU9yZGVyKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgaW50IGJsZW5kX3R5cGUsIGludCBzcmNfQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbikNCi17DQotICAgIGludCBibGVuZGVkX2NvbG9yc1szXTsNCi0gICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsNCi0gICAgaW50IHNyY19nYXAgPSBzcmNfQnBwIC0gMzsNCi0gICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgaW50IHNyY19hbHBoYSA9ICpjbGlwX3NjYW4gKys7DQotICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSBkZXN0X3NjYW5bM107DQotICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUEoKnNyY19zY2FuKyspOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BKCpzcmNfc2NhbisrKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQSgqc3JjX3NjYW4rKyk7DQotICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX2dhcDsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsNCi0gICAgICAgIGRlc3Rfc2NhblszXSA9IGRlc3RfYWxwaGE7DQotICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOw0KLSAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgew0KLSAgICAgICAgICAgIEZYX0JZVEUgZGVzdF9zY2FuX29bM107DQotICAgICAgICAgICAgZGVzdF9zY2FuX29bMF0gPSBkZXN0X3NjYW5bMl07DQotICAgICAgICAgICAgZGVzdF9zY2FuX29bMV0gPSBkZXN0X3NjYW5bMV07DQotICAgICAgICAgICAgZGVzdF9zY2FuX29bMl0gPSBkZXN0X3NjYW5bMF07DQotICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuX28sIGJsZW5kZWRfY29sb3JzKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGZvciAoaW50IGNvbG9yID0gMDsgY29sb3IgPCAzOyBjb2xvciArKykgew0KLSAgICAgICAgICAgIGludCBpbmRleCA9IDIgLSBjb2xvcjsNCi0gICAgICAgICAgICBpbnQgc3JjX2NvbG9yID0gRlhfR0FNTUEoKnNyY19zY2FuKTsNCi0gICAgICAgICAgICBpbnQgYmxlbmRlZCA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3JzW2NvbG9yXSA6DQotICAgICAgICAgICAgICAgICAgICAgICAgICBfQkxFTkQoYmxlbmRfdHlwZSwgZGVzdF9zY2FuW2luZGV4XSwgc3JjX2NvbG9yKTsNCi0gICAgICAgICAgICBibGVuZGVkID0gRlhESUJfQUxQSEFfTUVSR0Uoc3JjX2NvbG9yLCBibGVuZGVkLCBiYWNrX2FscGhhKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5baW5kZXhdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuW2luZGV4XSwgYmxlbmRlZCwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICBzcmNfc2NhbiArPSBzcmNfZ2FwOw0KLSAgICB9DQotfQ0KLWlubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9CbGVuZF9DbGlwX1JnYkJ5dGVPcmRlcihGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBibGVuZF90eXBlLCBpbnQgZGVzdF9CcHAsIGludCBzcmNfQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbikNCi17DQotICAgIGludCBibGVuZGVkX2NvbG9yc1szXTsNCi0gICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsNCi0gICAgaW50IHNyY19nYXAgPSBzcmNfQnBwIC0gMzsNCi0gICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgRlhfQllURSBzcmNfYWxwaGEgPSAqY2xpcF9zY2FuICsrOw0KLSAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfQnBwOw0KLSAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7DQotICAgICAgICAgICAgRlhfQllURSBkZXN0X3NjYW5fb1szXTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5fb1swXSA9IGRlc3Rfc2NhblsyXTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5fb1sxXSA9IGRlc3Rfc2NhblsxXTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5fb1syXSA9IGRlc3Rfc2NhblswXTsNCi0gICAgICAgICAgICBfUkdCX0JsZW5kKGJsZW5kX3R5cGUsIHNyY19zY2FuLCBkZXN0X3NjYW5fbywgYmxlbmRlZF9jb2xvcnMpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7DQotICAgICAgICAgICAgaW50IGluZGV4ID0gMiAtIGNvbG9yOw0KLSAgICAgICAgICAgIGludCBzcmNfY29sb3IgPSBGWF9HQU1NQSgqc3JjX3NjYW4pOw0KLSAgICAgICAgICAgIGludCBiYWNrX2NvbG9yID0gRlhfR0FNTUEoZGVzdF9zY2FuW2luZGV4XSk7DQotICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBiTm9uc2VwYXJhYmxlQmxlbmQgPyBibGVuZGVkX2NvbG9yc1tjb2xvcl0gOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgX0JMRU5EKGJsZW5kX3R5cGUsIGJhY2tfY29sb3IsIHNyY19jb2xvcik7DQotICAgICAgICAgICAgZGVzdF9zY2FuW2luZGV4XSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoYmFja19jb2xvciwgYmxlbmRlZCwgc3JjX2FscGhhKSk7DQotICAgICAgICAgICAgc3JjX3NjYW4gKys7DQotICAgICAgICB9DQotICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9CcHA7DQotICAgICAgICBzcmNfc2NhbiArPSBzcmNfZ2FwOw0KLSAgICB9DQotfQ0KLWlubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfTm9CbGVuZF9DbGlwX1JnYkJ5dGVPcmRlcihGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBzcmNfQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbikNCi17DQotICAgIGludCBzcmNfZ2FwID0gc3JjX0JwcCAtIDM7DQotICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgIGludCBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXTsNCi0gICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMjU1KSB7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUEoKnNyY19zY2FuKyspOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BKCpzcmNfc2NhbisrKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQSgqc3JjX3NjYW4rKyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzNdID0gMjU1Ow0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgIHNyY19zY2FuICArPSBzcmNfZ2FwOw0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX0JwcDsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBiYWNrX2FscGhhID0gZGVzdF9zY2FuWzNdOw0KLSAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICBkZXN0X3NjYW5bM10gPSBkZXN0X2FscGhhOw0KLSAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsNCi0gICAgICAgIGZvciAoaW50IGNvbG9yID0gMDsgY29sb3IgPCAzOyBjb2xvciArKykgew0KLSAgICAgICAgICAgIGludCBpbmRleCA9IDIgLSBjb2xvcjsNCi0gICAgICAgICAgICBkZXN0X3NjYW5baW5kZXhdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuW2luZGV4XSwgRlhfR0FNTUEoKnNyY19zY2FuKSwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICBzcmNfc2NhbiArPSBzcmNfZ2FwOw0KLSAgICB9DQotfQ0KLWlubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9Ob0JsZW5kX0NsaXBfUmdiQnl0ZU9yZGVyKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgaW50IGRlc3RfQnBwLCBpbnQgc3JjX0JwcCwgRlhfTFBDQllURSBjbGlwX3NjYW4pDQotew0KLSAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7DQotICAgICAgICBpbnQgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF07DQotICAgICAgICBpZiAoc3JjX2FscGhhID09IDI1NSkgew0KLSAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IHNyY19zY2FuWzBdOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IHNyY19zY2FuWzFdOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IHNyY19zY2FuWzJdOw0KLSAgICAgICAgfSBlbHNlIGlmIChzcmNfYWxwaGEpIHsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIEZYX0dBTU1BKCpzcmNfc2NhbiksIHNyY19hbHBoYSkpOw0KLSAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgRlhfR0FNTUEoKnNyY19zY2FuKSwgc3JjX2FscGhhKSk7DQotICAgICAgICAgICAgc3JjX3NjYW4gKys7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMF0pLCBGWF9HQU1NQSgqc3JjX3NjYW4pLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9CcHA7DQotICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX0JwcCAtIDI7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9CcHA7DQotICAgICAgICBzcmNfc2NhbiArPSBzcmNfQnBwOw0KLSAgICB9DQotfQ0KLWlubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfOGJwcFJnYjJSZ2JfTm9CbGVuZF9SZ2JCeXRlT3JkZXIoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgRlhfQVJHQiogcFBhbGV0dGUsIGludCBwaXhlbF9jb3VudCwNCi0gICAgICAgIGludCBEZXN0QnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbikNCi17DQotICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgIEZYX0FSR0IgYXJnYiA9IHBQYWxldHRlID8gcFBhbGV0dGVbKnNyY19zY2FuXSA6ICgqc3JjX3NjYW4pICogMHgwMTAxMDE7DQotICAgICAgICBpbnQgc3JjX3IgPSBGWEFSR0JfUihhcmdiKTsNCi0gICAgICAgIGludCBzcmNfZyA9IEZYQVJHQl9HKGFyZ2IpOw0KLSAgICAgICAgaW50IHNyY19iID0gRlhBUkdCX0IoYXJnYik7DQotICAgICAgICBpZiAoY2xpcF9zY2FuICYmIGNsaXBfc2Nhbltjb2xdIDwgMjU1KSB7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzJdLCBzcmNfYiwgY2xpcF9zY2FuW2NvbF0pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsxXSwgc3JjX2csIGNsaXBfc2Nhbltjb2xdKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMF0sIHNyY19yLCBjbGlwX3NjYW5bY29sXSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IHNyY19iOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IHNyY19nOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IHNyY19yOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdF9zY2FuICs9IERlc3RCcHA7DQotICAgICAgICBzcmNfc2NhbiArKzsNCi0gICAgfQ0KLX0NCi1pbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93XzFicHBSZ2IyUmdiX05vQmxlbmRfUmdiQnl0ZU9yZGVyKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCBzcmNfbGVmdCwNCi0gICAgICAgIEZYX0FSR0IqIHBQYWxldHRlLCBpbnQgcGl4ZWxfY291bnQsIGludCBEZXN0QnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbikNCi17DQotICAgIGludCByZXNldF9yLCByZXNldF9nLCByZXNldF9iOw0KLSAgICBpbnQgc2V0X3IsIHNldF9nLCBzZXRfYjsNCi0gICAgaWYgKHBQYWxldHRlKSB7DQotICAgICAgICByZXNldF9yID0gRlhBUkdCX1IocFBhbGV0dGVbMF0pOw0KLSAgICAgICAgcmVzZXRfZyA9IEZYQVJHQl9HKHBQYWxldHRlWzBdKTsNCi0gICAgICAgIHJlc2V0X2IgPSBGWEFSR0JfQihwUGFsZXR0ZVswXSk7DQotICAgICAgICBzZXRfciA9IEZYQVJHQl9SKHBQYWxldHRlWzFdKTsNCi0gICAgICAgIHNldF9nID0gRlhBUkdCX0cocFBhbGV0dGVbMV0pOw0KLSAgICAgICAgc2V0X2IgPSBGWEFSR0JfQihwUGFsZXR0ZVsxXSk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICByZXNldF9yID0gcmVzZXRfZyA9IHJlc2V0X2IgPSAwOw0KLSAgICAgICAgc2V0X3IgPSBzZXRfZyA9IHNldF9iID0gMjU1Ow0KLSAgICB9DQotICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgIGludCBzcmNfciwgc3JjX2csIHNyY19iOw0KLSAgICAgICAgaWYgKHNyY19zY2FuWyhjb2wgKyBzcmNfbGVmdCkgLyA4XSAmICgxIDw8ICg3IC0gKGNvbCArIHNyY19sZWZ0KSAlIDgpKSkgew0KLSAgICAgICAgICAgIHNyY19yID0gc2V0X3I7DQotICAgICAgICAgICAgc3JjX2cgPSBzZXRfZzsNCi0gICAgICAgICAgICBzcmNfYiA9IHNldF9iOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBzcmNfciA9IHJlc2V0X3I7DQotICAgICAgICAgICAgc3JjX2cgPSByZXNldF9nOw0KLSAgICAgICAgICAgIHNyY19iID0gcmVzZXRfYjsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChjbGlwX3NjYW4gJiYgY2xpcF9zY2FuW2NvbF0gPCAyNTUpIHsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMl0sIHNyY19iLCBjbGlwX3NjYW5bY29sXSk7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzFdLCBzcmNfZywgY2xpcF9zY2FuW2NvbF0pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblswXSwgc3JjX3IsIGNsaXBfc2Nhbltjb2xdKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gc3JjX2I7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gc3JjX2c7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gc3JjX3I7DQotICAgICAgICB9DQotICAgICAgICBkZXN0X3NjYW4gKz0gRGVzdEJwcDsNCi0gICAgfQ0KLX0NCi1pbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93XzhicHBSZ2IyQXJnYl9Ob0JsZW5kX1JnYkJ5dGVPcmRlcihGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsDQotICAgICAgICBGWF9BUkdCKiBwUGFsZXR0ZSwgRlhfTFBDQllURSBjbGlwX3NjYW4pDQotew0KLSAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7DQotICAgICAgICBpbnQgc3JjX3IsIHNyY19nLCBzcmNfYjsNCi0gICAgICAgIGlmIChwUGFsZXR0ZSkgew0KLSAgICAgICAgICAgIEZYX0FSR0IgYXJnYiA9IHBQYWxldHRlWypzcmNfc2Nhbl07DQotICAgICAgICAgICAgc3JjX3IgPSBGWEFSR0JfUihhcmdiKTsNCi0gICAgICAgICAgICBzcmNfZyA9IEZYQVJHQl9HKGFyZ2IpOw0KLSAgICAgICAgICAgIHNyY19iID0gRlhBUkdCX0IoYXJnYik7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHNyY19yID0gc3JjX2cgPSBzcmNfYiA9ICpzcmNfc2NhbjsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChjbGlwX3NjYW4gPT0gTlVMTCB8fCBjbGlwX3NjYW5bY29sXSA9PSAyNTUpIHsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQShzcmNfYik7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUEoc3JjX2cpOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BKHNyY19yKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bM10gPSAyNTU7DQotICAgICAgICAgICAgc3JjX3NjYW4gKys7DQotICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpbnQgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF07DQotICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgICAgICBzcmNfc2NhbiArKzsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBiYWNrX2FscGhhID0gZGVzdF9zY2FuWzNdOw0KLSAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICBkZXN0X3NjYW5bM10gPSBkZXN0X2FscGhhOw0KLSAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsNCi0gICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsyXSwgRlhfR0FNTUEoc3JjX2IpLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMV0sIEZYX0dBTU1BKHNyY19nKSwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzBdLCBGWF9HQU1NQShzcmNfciksIGFscGhhX3JhdGlvKTsNCi0gICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgc3JjX3NjYW4gKys7DQotICAgIH0NCi19DQotaW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd18xYnBwUmdiMkFyZ2JfTm9CbGVuZF9SZ2JCeXRlT3JkZXIoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHNyY19sZWZ0LCBpbnQgd2lkdGgsDQotICAgICAgICBGWF9BUkdCKiBwUGFsZXR0ZSwgRlhfTFBDQllURSBjbGlwX3NjYW4pDQotew0KLSAgICBpbnQgcmVzZXRfciwgcmVzZXRfZywgcmVzZXRfYjsNCi0gICAgaW50IHNldF9yLCBzZXRfZywgc2V0X2I7DQotICAgIGlmIChwUGFsZXR0ZSkgew0KLSAgICAgICAgcmVzZXRfciA9IEZYQVJHQl9SKHBQYWxldHRlWzBdKTsNCi0gICAgICAgIHJlc2V0X2cgPSBGWEFSR0JfRyhwUGFsZXR0ZVswXSk7DQotICAgICAgICByZXNldF9iID0gRlhBUkdCX0IocFBhbGV0dGVbMF0pOw0KLSAgICAgICAgc2V0X3IgPSBGWEFSR0JfUihwUGFsZXR0ZVsxXSk7DQotICAgICAgICBzZXRfZyA9IEZYQVJHQl9HKHBQYWxldHRlWzFdKTsNCi0gICAgICAgIHNldF9iID0gRlhBUkdCX0IocFBhbGV0dGVbMV0pOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmVzZXRfciA9IHJlc2V0X2cgPSByZXNldF9iID0gMDsNCi0gICAgICAgIHNldF9yID0gc2V0X2cgPSBzZXRfYiA9IDI1NTsNCi0gICAgfQ0KLSAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7DQotICAgICAgICBpbnQgc3JjX3IsIHNyY19nLCBzcmNfYjsNCi0gICAgICAgIGlmIChzcmNfc2NhblsoY29sICsgc3JjX2xlZnQpIC8gOF0gJiAoMSA8PCAoNyAtIChjb2wgKyBzcmNfbGVmdCkgJSA4KSkpIHsNCi0gICAgICAgICAgICBzcmNfciA9IHNldF9yOw0KLSAgICAgICAgICAgIHNyY19nID0gc2V0X2c7DQotICAgICAgICAgICAgc3JjX2IgPSBzZXRfYjsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc3JjX3IgPSByZXNldF9yOw0KLSAgICAgICAgICAgIHNyY19nID0gcmVzZXRfZzsNCi0gICAgICAgICAgICBzcmNfYiA9IHJlc2V0X2I7DQotICAgICAgICB9DQotICAgICAgICBpZiAoY2xpcF9zY2FuID09IE5VTEwgfHwgY2xpcF9zY2FuW2NvbF0gPT0gMjU1KSB7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUEoc3JjX2IpOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BKHNyY19nKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQShzcmNfcik7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzNdID0gMjU1Ow0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW50IHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdOw0KLSAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpbnQgYmFja19hbHBoYSA9IGRlc3Rfc2NhblszXTsNCi0gICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgZGVzdF9zY2FuWzNdID0gZGVzdF9hbHBoYTsNCi0gICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvIGRlc3RfYWxwaGE7DQotICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMl0sIEZYX0dBTU1BKHNyY19iKSwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzFdLCBGWF9HQU1NQShzcmNfZyksIGFscGhhX3JhdGlvKTsNCi0gICAgICAgIGRlc3Rfc2NhblswXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblswXSwgRlhfR0FNTUEoc3JjX3IpLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgfQ0KLX0NCi12b2lkIF9Db21wb3NpdGVSb3dfQnl0ZU1hc2syQXJnYl9SZ2JCeXRlT3JkZXIoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IG1hc2tfYWxwaGEsIGludCBzcmNfciwgaW50IHNyY19nLCBpbnQgc3JjX2IsIGludCBwaXhlbF9jb3VudCwNCi0gICAgICAgIGludCBibGVuZF90eXBlLCBGWF9MUENCWVRFIGNsaXBfc2NhbikNCi17DQotICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgIGludCBzcmNfYWxwaGE7DQotICAgICAgICBpZiAoY2xpcF9zY2FuKSB7DQotICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYSAqIGNsaXBfc2Nhbltjb2xdICogc3JjX3NjYW5bY29sXSAvIDI1NSAvIDI1NTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYSAqIHNyY19zY2FuW2NvbF0gLyAyNTU7DQotICAgICAgICB9DQotICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSBkZXN0X3NjYW5bM107DQotICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgRlhBUkdCX1NFVFJHQk9SREVSRElCKGRlc3Rfc2NhbiwgRlhBUkdCX01BS0Uoc3JjX2FscGhhLCBzcmNfciwgc3JjX2csIHNyY19iKSk7DQotICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgZGVzdF9zY2FuWzNdID0gZGVzdF9hbHBoYTsNCi0gICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvIGRlc3RfYWxwaGE7DQotICAgICAgICBpZiAoYmxlbmRfdHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEUpIHsNCi0gICAgICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcnNbM107DQotICAgICAgICAgICAgRlhfQllURSBzcmNfc2NhblszXTsNCi0gICAgICAgICAgICBGWF9CWVRFIGRlc3Rfc2Nhbl9vWzNdOw0KLSAgICAgICAgICAgIHNyY19zY2FuWzBdID0gc3JjX2I7DQotICAgICAgICAgICAgc3JjX3NjYW5bMV0gPSBzcmNfZzsNCi0gICAgICAgICAgICBzcmNfc2NhblsyXSA9IHNyY19yOw0KLSAgICAgICAgICAgIGRlc3Rfc2Nhbl9vWzBdID0gZGVzdF9zY2FuWzJdOw0KLSAgICAgICAgICAgIGRlc3Rfc2Nhbl9vWzFdID0gZGVzdF9zY2FuWzFdOw0KLSAgICAgICAgICAgIGRlc3Rfc2Nhbl9vWzJdID0gZGVzdF9zY2FuWzBdOw0KLSAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX3NjYW4sIGRlc3Rfc2Nhbl9vLCBibGVuZGVkX2NvbG9ycyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzJdLCBibGVuZGVkX2NvbG9yc1swXSwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsxXSwgYmxlbmRlZF9jb2xvcnNbMV0sIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMF0sIGJsZW5kZWRfY29sb3JzWzJdLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICB9IGVsc2UgaWYgKGJsZW5kX3R5cGUpIHsNCi0gICAgICAgICAgICBpbnQgYmxlbmRlZCA9IF9CTEVORChibGVuZF90eXBlLCBkZXN0X3NjYW5bMl0sIHNyY19iKTsNCi0gICAgICAgICAgICBibGVuZGVkID0gRlhESUJfQUxQSEFfTUVSR0Uoc3JjX2IsIGJsZW5kZWQsIGJhY2tfYWxwaGEpOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsyXSwgYmxlbmRlZCwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgZGVzdF9zY2FuWzFdLCBzcmNfZyk7DQotICAgICAgICAgICAgYmxlbmRlZCA9IEZYRElCX0FMUEhBX01FUkdFKHNyY19nLCBibGVuZGVkLCBiYWNrX2FscGhhKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMV0sIGJsZW5kZWQsIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBibGVuZGVkID0gX0JMRU5EKGJsZW5kX3R5cGUsIGRlc3Rfc2NhblswXSwgc3JjX3IpOw0KLSAgICAgICAgICAgIGJsZW5kZWQgPSBGWERJQl9BTFBIQV9NRVJHRShzcmNfciwgYmxlbmRlZCwgYmFja19hbHBoYSk7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzBdLCBibGVuZGVkLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsyXSwgc3JjX2IsIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMV0sIHNyY19nLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzBdLCBzcmNfciwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgIH0NCi19DQotdm9pZCBfQ29tcG9zaXRlUm93X0J5dGVNYXNrMlJnYl9SZ2JCeXRlT3JkZXIoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IG1hc2tfYWxwaGEsIGludCBzcmNfciwgaW50IHNyY19nLCBpbnQgc3JjX2IsIGludCBwaXhlbF9jb3VudCwNCi0gICAgICAgIGludCBibGVuZF90eXBlLCBpbnQgQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbikNCi17DQotICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgIGludCBzcmNfYWxwaGE7DQotICAgICAgICBpZiAoY2xpcF9zY2FuKSB7DQotICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYSAqIGNsaXBfc2Nhbltjb2xdICogc3JjX3NjYW5bY29sXSAvIDI1NSAvIDI1NTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYSAqIHNyY19zY2FuW2NvbF0gLyAyNTU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKz0gQnBwOw0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFKSB7DQotICAgICAgICAgICAgaW50IGJsZW5kZWRfY29sb3JzWzNdOw0KLSAgICAgICAgICAgIEZYX0JZVEUgc3JjX3NjYW5bM107DQotICAgICAgICAgICAgRlhfQllURSBkZXN0X3NjYW5fb1szXTsNCi0gICAgICAgICAgICBzcmNfc2NhblswXSA9IHNyY19iOw0KLSAgICAgICAgICAgIHNyY19zY2FuWzFdID0gc3JjX2c7DQotICAgICAgICAgICAgc3JjX3NjYW5bMl0gPSBzcmNfcjsNCi0gICAgICAgICAgICBkZXN0X3NjYW5fb1swXSA9IGRlc3Rfc2NhblsyXTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5fb1sxXSA9IGRlc3Rfc2NhblsxXTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5fb1syXSA9IGRlc3Rfc2NhblswXTsNCi0gICAgICAgICAgICBfUkdCX0JsZW5kKGJsZW5kX3R5cGUsIHNyY19zY2FuLCBkZXN0X3NjYW5fbywgYmxlbmRlZF9jb2xvcnMpOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsyXSwgYmxlbmRlZF9jb2xvcnNbMF0sIHNyY19hbHBoYSk7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzFdLCBibGVuZGVkX2NvbG9yc1sxXSwgc3JjX2FscGhhKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMF0sIGJsZW5kZWRfY29sb3JzWzJdLCBzcmNfYWxwaGEpOw0KLSAgICAgICAgfSBlbHNlIGlmIChibGVuZF90eXBlKSB7DQotICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgZGVzdF9zY2FuWzJdLCBzcmNfYik7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzJdLCBibGVuZGVkLCBzcmNfYWxwaGEpOw0KLSAgICAgICAgICAgIGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgZGVzdF9zY2FuWzFdLCBzcmNfZyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzFdLCBibGVuZGVkLCBzcmNfYWxwaGEpOw0KLSAgICAgICAgICAgIGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgZGVzdF9zY2FuWzBdLCBzcmNfcik7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzBdLCBibGVuZGVkLCBzcmNfYWxwaGEpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMl0sIHNyY19iLCBzcmNfYWxwaGEpOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsxXSwgc3JjX2csIHNyY19hbHBoYSk7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzBdLCBzcmNfciwgc3JjX2FscGhhKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7DQotICAgIH0NCi19DQotdm9pZCBfQ29tcG9zaXRlUm93X0JpdE1hc2syQXJnYl9SZ2JCeXRlT3JkZXIoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IG1hc2tfYWxwaGEsIGludCBzcmNfciwgaW50IHNyY19nLCBpbnQgc3JjX2IsDQotICAgICAgICBpbnQgc3JjX2xlZnQsIGludCBwaXhlbF9jb3VudCwgaW50IGJsZW5kX3R5cGUsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuKQ0KLXsNCi0gICAgaWYgKGJsZW5kX3R5cGUgPT0gRlhESUJfQkxFTkRfTk9STUFMICYmIGNsaXBfc2NhbiA9PSBOVUxMICYmIG1hc2tfYWxwaGEgPT0gMjU1KSB7DQotICAgICAgICBGWF9BUkdCIGFyZ2IgPSBGWEFSR0JfTUFLRSgweGZmLCBzcmNfciwgc3JjX2csIHNyY19iKTsNCi0gICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgICAgICBpZiAoc3JjX3NjYW5bKHNyY19sZWZ0ICsgY29sKSAvIDhdICYgKDEgPDwgKDcgLSAoc3JjX2xlZnQgKyBjb2wpICUgOCkpKSB7DQotICAgICAgICAgICAgICAgIEZYQVJHQl9TRVRSR0JPUkRFUkRJQihkZXN0X3NjYW4sIGFyZ2IpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7DQotICAgICAgICBpZiAoIShzcmNfc2Nhblsoc3JjX2xlZnQgKyBjb2wpIC8gOF0gJiAoMSA8PCAoNyAtIChzcmNfbGVmdCArIGNvbCkgJSA4KSkpKSB7DQotICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpbnQgc3JjX2FscGhhOw0KLSAgICAgICAgaWYgKGNsaXBfc2Nhbikgew0KLSAgICAgICAgICAgIHNyY19hbHBoYSA9IG1hc2tfYWxwaGEgKiBjbGlwX3NjYW5bY29sXSAvIDI1NTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9IGRlc3Rfc2NhblszXTsNCi0gICAgICAgIGlmIChiYWNrX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICBGWEFSR0JfU0VUUkdCT1JERVJESUIoZGVzdF9zY2FuLCBGWEFSR0JfTUFLRShzcmNfYWxwaGEsIHNyY19yLCBzcmNfZywgc3JjX2IpKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1Ow0KLSAgICAgICAgZGVzdF9zY2FuWzNdID0gZGVzdF9hbHBoYTsNCi0gICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvIGRlc3RfYWxwaGE7DQotICAgICAgICBpZiAoYmxlbmRfdHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEUpIHsNCi0gICAgICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcnNbM107DQotICAgICAgICAgICAgRlhfQllURSBzcmNfc2NhblszXTsNCi0gICAgICAgICAgICBGWF9CWVRFIGRlc3Rfc2Nhbl9vWzNdOw0KLSAgICAgICAgICAgIHNyY19zY2FuWzBdID0gc3JjX2I7DQotICAgICAgICAgICAgc3JjX3NjYW5bMV0gPSBzcmNfZzsNCi0gICAgICAgICAgICBzcmNfc2NhblsyXSA9IHNyY19yOw0KLSAgICAgICAgICAgIGRlc3Rfc2Nhbl9vWzBdID0gZGVzdF9zY2FuWzJdOw0KLSAgICAgICAgICAgIGRlc3Rfc2Nhbl9vWzFdID0gZGVzdF9zY2FuWzFdOw0KLSAgICAgICAgICAgIGRlc3Rfc2Nhbl9vWzJdID0gZGVzdF9zY2FuWzBdOw0KLSAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX3NjYW4sIGRlc3Rfc2Nhbl9vLCBibGVuZGVkX2NvbG9ycyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzJdLCBibGVuZGVkX2NvbG9yc1swXSwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsxXSwgYmxlbmRlZF9jb2xvcnNbMV0sIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMF0sIGJsZW5kZWRfY29sb3JzWzJdLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICB9IGVsc2UgaWYgKGJsZW5kX3R5cGUpIHsNCi0gICAgICAgICAgICBpbnQgYmxlbmRlZCA9IF9CTEVORChibGVuZF90eXBlLCBkZXN0X3NjYW5bMl0sIHNyY19iKTsNCi0gICAgICAgICAgICBibGVuZGVkID0gRlhESUJfQUxQSEFfTUVSR0Uoc3JjX2IsIGJsZW5kZWQsIGJhY2tfYWxwaGEpOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsyXSwgYmxlbmRlZCwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgIGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgZGVzdF9zY2FuWzFdLCBzcmNfZyk7DQotICAgICAgICAgICAgYmxlbmRlZCA9IEZYRElCX0FMUEhBX01FUkdFKHNyY19nLCBibGVuZGVkLCBiYWNrX2FscGhhKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMV0sIGJsZW5kZWQsIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBibGVuZGVkID0gX0JMRU5EKGJsZW5kX3R5cGUsIGRlc3Rfc2NhblswXSwgc3JjX3IpOw0KLSAgICAgICAgICAgIGJsZW5kZWQgPSBGWERJQl9BTFBIQV9NRVJHRShzcmNfciwgYmxlbmRlZCwgYmFja19hbHBoYSk7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzBdLCBibGVuZGVkLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsyXSwgc3JjX2IsIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMV0sIHNyY19nLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzBdLCBzcmNfciwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgIH0NCi19DQotdm9pZCBfQ29tcG9zaXRlUm93X0JpdE1hc2syUmdiX1JnYkJ5dGVPcmRlcihGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgbWFza19hbHBoYSwgaW50IHNyY19yLCBpbnQgc3JjX2csIGludCBzcmNfYiwNCi0gICAgICAgIGludCBzcmNfbGVmdCwgaW50IHBpeGVsX2NvdW50LCBpbnQgYmxlbmRfdHlwZSwgaW50IEJwcCwgRlhfTFBDQllURSBjbGlwX3NjYW4pDQotew0KLSAgICBpZiAoYmxlbmRfdHlwZSA9PSBGWERJQl9CTEVORF9OT1JNQUwgJiYgY2xpcF9zY2FuID09IE5VTEwgJiYgbWFza19hbHBoYSA9PSAyNTUpIHsNCi0gICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsNCi0gICAgICAgICAgICBpZiAoc3JjX3NjYW5bKHNyY19sZWZ0ICsgY29sKSAvIDhdICYgKDEgPDwgKDcgLSAoc3JjX2xlZnQgKyBjb2wpICUgOCkpKSB7DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IHNyY19iOw0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBzcmNfZzsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gc3JjX3I7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgew0KLSAgICAgICAgaWYgKCEoc3JjX3NjYW5bKHNyY19sZWZ0ICsgY29sKSAvIDhdICYgKDEgPDwgKDcgLSAoc3JjX2xlZnQgKyBjb2wpICUgOCkpKSkgew0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpbnQgc3JjX2FscGhhOw0KLSAgICAgICAgaWYgKGNsaXBfc2Nhbikgew0KLSAgICAgICAgICAgIHNyY19hbHBoYSA9IG1hc2tfYWxwaGEgKiBjbGlwX3NjYW5bY29sXSAvIDI1NTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoYmxlbmRfdHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEUpIHsNCi0gICAgICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcnNbM107DQotICAgICAgICAgICAgRlhfQllURSBzcmNfc2NhblszXTsNCi0gICAgICAgICAgICBGWF9CWVRFIGRlc3Rfc2Nhbl9vWzNdOw0KLSAgICAgICAgICAgIHNyY19zY2FuWzBdID0gc3JjX2I7DQotICAgICAgICAgICAgc3JjX3NjYW5bMV0gPSBzcmNfZzsNCi0gICAgICAgICAgICBzcmNfc2NhblsyXSA9IHNyY19yOw0KLSAgICAgICAgICAgIGRlc3Rfc2Nhbl9vWzBdID0gZGVzdF9zY2FuWzJdOw0KLSAgICAgICAgICAgIGRlc3Rfc2Nhbl9vWzFdID0gZGVzdF9zY2FuWzFdOw0KLSAgICAgICAgICAgIGRlc3Rfc2Nhbl9vWzJdID0gZGVzdF9zY2FuWzBdOw0KLSAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX3NjYW4sIGRlc3Rfc2Nhbl9vLCBibGVuZGVkX2NvbG9ycyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzJdLCBibGVuZGVkX2NvbG9yc1swXSwgc3JjX2FscGhhKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMV0sIGJsZW5kZWRfY29sb3JzWzFdLCBzcmNfYWxwaGEpOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblswXSwgYmxlbmRlZF9jb2xvcnNbMl0sIHNyY19hbHBoYSk7DQotICAgICAgICB9IGVsc2UgaWYgKGJsZW5kX3R5cGUpIHsNCi0gICAgICAgICAgICBpbnQgYmFja19jb2xvciA9IEZYX0dBTU1BKGRlc3Rfc2NhblsyXSk7DQotICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgYmFja19jb2xvciwgc3JjX2IpOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoYmFja19jb2xvciwgYmxlbmRlZCwgc3JjX2FscGhhKSk7DQotICAgICAgICAgICAgYmFja19jb2xvciA9IEZYX0dBTU1BKGRlc3Rfc2NhblsxXSk7DQotICAgICAgICAgICAgYmxlbmRlZCA9IF9CTEVORChibGVuZF90eXBlLCBiYWNrX2NvbG9yLCBzcmNfZyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShiYWNrX2NvbG9yLCBibGVuZGVkLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICBiYWNrX2NvbG9yID0gRlhfR0FNTUEoZGVzdF9zY2FuWzBdKTsNCi0gICAgICAgICAgICBibGVuZGVkID0gX0JMRU5EKGJsZW5kX3R5cGUsIGJhY2tfY29sb3IsIHNyY19yKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKGJhY2tfY29sb3IsIGJsZW5kZWQsIHNyY19hbHBoYSkpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHNyY19iLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsxXSksIHNyY19nLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIHNyY19yLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7DQotICAgIH0NCi19DQotaW5saW5lIEZYX0JPT0wgX1NjYW5saW5lQ29tcG9zaXRvcl9Jbml0U291cmNlTWFzayhGWERJQl9Gb3JtYXQgZGVzdF9mb3JtYXQsIGludCBhbHBoYV9mbGFnLCBGWF9EV09SRCBtYXNrX2NvbG9yLCBpbnQmIG1hc2tfYWxwaGEsDQotICAgICAgICBpbnQmIG1hc2tfcmVkLCBpbnQmIG1hc2tfZ3JlZW4sIGludCYgbWFza19ibHVlLCBpbnQmIG1hc2tfYmxhY2ssDQotICAgICAgICB2b2lkKiBpY2NfbW9kdWxlLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQ0KLXsNCi0gICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IChJQ29kZWNfSWNjTW9kdWxlKilpY2NfbW9kdWxlOw0KLSAgICBpZiAoYWxwaGFfZmxhZyA+PiA4KSB7DQotICAgICAgICBtYXNrX2FscGhhID0gYWxwaGFfZmxhZyAmIDB4ZmY7DQotICAgICAgICBtYXNrX3JlZCA9IEZYU1lTX0dldENWYWx1ZShtYXNrX2NvbG9yKTsNCi0gICAgICAgIG1hc2tfZ3JlZW4gPSBGWFNZU19HZXRNVmFsdWUobWFza19jb2xvcik7DQotICAgICAgICBtYXNrX2JsdWUgPSBGWFNZU19HZXRZVmFsdWUobWFza19jb2xvcik7DQotICAgICAgICBtYXNrX2JsYWNrID0gRlhTWVNfR2V0S1ZhbHVlKG1hc2tfY29sb3IpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbWFza19hbHBoYSA9IEZYQVJHQl9BKG1hc2tfY29sb3IpOw0KLSAgICAgICAgbWFza19yZWQgPSBGWEFSR0JfUihtYXNrX2NvbG9yKTsNCi0gICAgICAgIG1hc2tfZ3JlZW4gPSBGWEFSR0JfRyhtYXNrX2NvbG9yKTsNCi0gICAgICAgIG1hc2tfYmx1ZSA9IEZYQVJHQl9CKG1hc2tfY29sb3IpOw0KLSAgICB9DQotICAgIGlmIChkZXN0X2Zvcm1hdCA9PSBGWERJQl84YnBwTWFzaykgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgaWYgKChkZXN0X2Zvcm1hdCAmIDB4ZmYpID09IDgpIHsNCi0gICAgICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7DQotICAgICAgICAgICAgbWFza19jb2xvciA9IChhbHBoYV9mbGFnID4+IDgpID8gRlhDTVlLX1RPRElCKG1hc2tfY29sb3IpIDogRlhBUkdCX1RPRElCKG1hc2tfY29sb3IpOw0KLSAgICAgICAgICAgIEZYX0xQQllURSBncmF5X3AgPSAoRlhfTFBCWVRFKSZtYXNrX2NvbG9yOw0KLSAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGdyYXlfcCwgZ3JheV9wLCAxKTsNCi0gICAgICAgICAgICBtYXNrX3JlZCA9IGRlc3RfZm9ybWF0ICYgMHgwNDAwID8gRlhfQ0NPTE9SKGdyYXlfcFswXSkgOiBncmF5X3BbMF07DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlmIChhbHBoYV9mbGFnID4+IDgpIHsNCi0gICAgICAgICAgICAgICAgRlhfQllURSByLCBnLCBiOw0KLSAgICAgICAgICAgICAgICBBZG9iZUNNWUtfdG9fc1JHQjEobWFza19yZWQsIG1hc2tfZ3JlZW4sIG1hc2tfYmx1ZSwgbWFza19ibGFjaywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIpOw0KLSAgICAgICAgICAgICAgICBtYXNrX3JlZCA9IEZYUkdCMkdSQVkociwgZywgYik7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgbWFza19yZWQgPSBGWFJHQjJHUkFZKG1hc2tfcmVkLCBtYXNrX2dyZWVuLCBtYXNrX2JsdWUpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoZGVzdF9mb3JtYXQgJiAweDA0MDApIHsNCi0gICAgICAgICAgICAgICAgbWFza19yZWQgPSBGWF9DQ09MT1IobWFza19yZWQpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEZYX0xQQllURSBtYXNrX2NvbG9yX3AgPSAoRlhfTFBCWVRFKSZtYXNrX2NvbG9yOw0KLSAgICAgICAgbWFza19jb2xvciA9IChhbHBoYV9mbGFnID4+IDgpID8gRlhDTVlLX1RPRElCKG1hc2tfY29sb3IpIDogRlhBUkdCX1RPRElCKG1hc2tfY29sb3IpOw0KLSAgICAgICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsNCi0gICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBtYXNrX2NvbG9yX3AsIG1hc2tfY29sb3JfcCwgMSk7DQotICAgICAgICAgICAgbWFza19yZWQgPSBtYXNrX2NvbG9yX3BbMl07DQotICAgICAgICAgICAgbWFza19ncmVlbiA9IG1hc2tfY29sb3JfcFsxXTsNCi0gICAgICAgICAgICBtYXNrX2JsdWUgPSBtYXNrX2NvbG9yX3BbMF07DQotICAgICAgICB9IGVsc2UgaWYgKGFscGhhX2ZsYWcgPj4gOCkgew0KLSAgICAgICAgICAgIEFkb2JlQ01ZS190b19zUkdCMShtYXNrX2NvbG9yX3BbMF0sIG1hc2tfY29sb3JfcFsxXSwgbWFza19jb2xvcl9wWzJdLCBtYXNrX2NvbG9yX3BbM10sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tfY29sb3JfcFsyXSwgbWFza19jb2xvcl9wWzFdLCBtYXNrX2NvbG9yX3BbMF0pOw0KLSAgICAgICAgICAgIG1hc2tfcmVkID0gbWFza19jb2xvcl9wWzJdOw0KLSAgICAgICAgICAgIG1hc2tfZ3JlZW4gPSBtYXNrX2NvbG9yX3BbMV07DQotICAgICAgICAgICAgbWFza19ibHVlID0gbWFza19jb2xvcl9wWzBdOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1pbmxpbmUgdm9pZCBfU2NhbmxpbmVDb21wb3NpdG9yX0luaXRTb3VyY2VQYWxldHRlKEZYRElCX0Zvcm1hdCBzcmNfZm9ybWF0LCBGWERJQl9Gb3JtYXQgZGVzdF9mb3JtYXQsDQotICAgICAgICBGWF9EV09SRComIHBEZXN0UGFsZXR0ZSwgRlhfRFdPUkQqIHBTcmNQYWxldHRlLA0KLSAgICAgICAgdm9pZCogaWNjX21vZHVsZSwgdm9pZCogcEljY1RyYW5zZm9ybSkNCi17DQotICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSAoSUNvZGVjX0ljY01vZHVsZSopaWNjX21vZHVsZTsNCi0gICAgRlhfQk9PTCBpc1NyY0NteWsgPSBzcmNfZm9ybWF0ICYgMHgwNDAwID8gVFJVRSA6IEZBTFNFOw0KLSAgICBGWF9CT09MIGlzRHN0Q215ayA9IGRlc3RfZm9ybWF0ICYgMHgwNDAwID8gVFJVRSA6IEZBTFNFOw0KLSAgICBwRGVzdFBhbGV0dGUgPSBOVUxMOw0KLSAgICBpZiAocEljY1RyYW5zZm9ybSkgew0KLSAgICAgICAgaWYgKHBTcmNQYWxldHRlKSB7DQotICAgICAgICAgICAgaWYgKChkZXN0X2Zvcm1hdCAmIDB4ZmYpID09IDgpIHsNCi0gICAgICAgICAgICAgICAgaW50IHBhbF9jb3VudCA9IDEgPDwgKHNyY19mb3JtYXQgJiAweGZmKTsNCi0gICAgICAgICAgICAgICAgRlhfTFBCWVRFIGdyYXlfcGFsID0gRlhfQWxsb2MoRlhfQllURSwgcGFsX2NvdW50KTsNCi0gICAgICAgICAgICAgICAgaWYgKCFncmF5X3BhbCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHBEZXN0UGFsZXR0ZSA9IChGWF9EV09SRCopZ3JheV9wYWw7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFsX2NvdW50OyBpICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBjb2xvciA9IGlzU3JjQ215ayA/IEZYQ01ZS19UT0RJQihwU3JjUGFsZXR0ZVtpXSkgOiBGWEFSR0JfVE9ESUIocFNyY1BhbGV0dGVbaV0pOw0KLSAgICAgICAgICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgZ3JheV9wYWwsIChGWF9MUENCWVRFKSZjb2xvciwgMSk7DQotICAgICAgICAgICAgICAgICAgICBncmF5X3BhbCArKzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGludCBwYWxzaXplID0gMSA8PCAoc3JjX2Zvcm1hdCAmIDB4ZmYpOw0KLSAgICAgICAgICAgICAgICBwRGVzdFBhbGV0dGUgPSBGWF9BbGxvYyhGWF9EV09SRCwgcGFsc2l6ZSk7DQotICAgICAgICAgICAgICAgIGlmICghcERlc3RQYWxldHRlKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYWxzaXplOyBpICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBjb2xvciA9IGlzU3JjQ215ayA/IEZYQ01ZS19UT0RJQihwU3JjUGFsZXR0ZVtpXSkgOiBGWEFSR0JfVE9ESUIocFNyY1BhbGV0dGVbaV0pOw0KLSAgICAgICAgICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgKEZYX0xQQllURSkmY29sb3IsIChGWF9MUENCWVRFKSZjb2xvciwgMSk7DQotICAgICAgICAgICAgICAgICAgICBwRGVzdFBhbGV0dGVbaV0gPSBpc0RzdENteWsgPyBGWENNWUtfVE9ESUIoY29sb3IpIDogRlhBUkdCX1RPRElCKGNvbG9yKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaW50IHBhbF9jb3VudCA9IDEgPDwgKHNyY19mb3JtYXQgJiAweGZmKTsNCi0gICAgICAgICAgICBGWF9MUEJZVEUgZ3JheV9wYWwgPSBGWF9BbGxvYyhGWF9CWVRFLCBwYWxfY291bnQpOw0KLSAgICAgICAgICAgIGlmICghZ3JheV9wYWwpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAocGFsX2NvdW50ID09IDIpIHsNCi0gICAgICAgICAgICAgICAgZ3JheV9wYWxbMF0gPSAwOw0KLSAgICAgICAgICAgICAgICBncmF5X3BhbFsxXSA9IDI1NTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhbF9jb3VudDsgaSsrKSB7DQotICAgICAgICAgICAgICAgICAgICBncmF5X3BhbFtpXSA9IGk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKChkZXN0X2Zvcm1hdCAmIDB4ZmYpID09IDgpIHsNCi0gICAgICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgZ3JheV9wYWwsIGdyYXlfcGFsLCBwYWxfY291bnQpOw0KLSAgICAgICAgICAgICAgICBwRGVzdFBhbGV0dGUgPSAoRlhfRFdPUkQqKWdyYXlfcGFsOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHBEZXN0UGFsZXR0ZSA9IEZYX0FsbG9jKEZYX0RXT1JELCBwYWxfY291bnQpOw0KLSAgICAgICAgICAgICAgICBpZiAoIXBEZXN0UGFsZXR0ZSkgew0KLSAgICAgICAgICAgICAgICAgICAgRlhfRnJlZShncmF5X3BhbCk7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYWxfY291bnQ7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIChGWF9MUEJZVEUpJnBEZXN0UGFsZXR0ZVtpXSwgJmdyYXlfcGFsW2ldLCAxKTsNCi0gICAgICAgICAgICAgICAgICAgIHBEZXN0UGFsZXR0ZVtpXSA9IGlzRHN0Q215ayA/IEZYQ01ZS19UT0RJQihwRGVzdFBhbGV0dGVbaV0pIDogRlhBUkdCX1RPRElCKHBEZXN0UGFsZXR0ZVtpXSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgRlhfRnJlZShncmF5X3BhbCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYgKHBTcmNQYWxldHRlKSB7DQotICAgICAgICAgICAgaWYgKChkZXN0X2Zvcm1hdCAmIDB4ZmYpID09IDgpIHsNCi0gICAgICAgICAgICAgICAgaW50IHBhbF9jb3VudCA9IDEgPDwgKHNyY19mb3JtYXQgJiAweGZmKTsNCi0gICAgICAgICAgICAgICAgRlhfTFBCWVRFIGdyYXlfcGFsID0gRlhfQWxsb2MoRlhfQllURSwgcGFsX2NvdW50KTsNCi0gICAgICAgICAgICAgICAgaWYgKCFncmF5X3BhbCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHBEZXN0UGFsZXR0ZSA9IChGWF9EV09SRCopZ3JheV9wYWw7DQotICAgICAgICAgICAgICAgIGlmIChpc1NyY0NteWspIHsNCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFsX2NvdW50OyBpICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgRlhfQ01ZSyBjbXlrID0gcFNyY1BhbGV0dGVbaV07DQotICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSByLCBnLCBiOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFkb2JlQ01ZS190b19zUkdCMShGWFNZU19HZXRDVmFsdWUoY215ayksIEZYU1lTX0dldE1WYWx1ZShjbXlrKSwgRlhTWVNfR2V0WVZhbHVlKGNteWspLCBGWFNZU19HZXRLVmFsdWUoY215ayksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICpncmF5X3BhbCArKyA9IEZYUkdCMkdSQVkociwgZywgYik7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0gZWxzZQ0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYWxfY291bnQ7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBGWF9BUkdCIGFyZ2IgPSBwU3JjUGFsZXR0ZVtpXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZ3JheV9wYWwgKysgPSBGWFJHQjJHUkFZKEZYQVJHQl9SKGFyZ2IpLCBGWEFSR0JfRyhhcmdiKSwgRlhBUkdCX0IoYXJnYikpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGludCBwYWxzaXplID0gMSA8PCAoc3JjX2Zvcm1hdCAmIDB4ZmYpOw0KLSAgICAgICAgICAgICAgICBwRGVzdFBhbGV0dGUgPSBGWF9BbGxvYyhGWF9EV09SRCwgcGFsc2l6ZSk7DQotICAgICAgICAgICAgICAgIGlmICghcERlc3RQYWxldHRlKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKGlzRHN0Q215ayA9PSBpc1NyY0NteWspIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKHBEZXN0UGFsZXR0ZSwgcFNyY1BhbGV0dGUsIHBhbHNpemUgKiBzaXplb2YoRlhfRFdPUkQpKTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFsc2l6ZTsgaSArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYX0NNWUsgY215ayA9IHBTcmNQYWxldHRlW2ldOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgciwgZywgYjsNCi0gICAgICAgICAgICAgICAgICAgICAgICBBZG9iZUNNWUtfdG9fc1JHQjEoRlhTWVNfR2V0Q1ZhbHVlKGNteWspLCBGWFNZU19HZXRNVmFsdWUoY215ayksIEZYU1lTX0dldFlWYWx1ZShjbXlrKSwgRlhTWVNfR2V0S1ZhbHVlKGNteWspLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLCBnLCBiKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBwRGVzdFBhbGV0dGVbaV0gPSBGWEFSR0JfTUFLRSgweGZmLCByLCBnLCBiKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYgKChkZXN0X2Zvcm1hdCAmIDB4ZmYpID09IDgpIHsNCi0gICAgICAgICAgICAgICAgaW50IHBhbF9jb3VudCA9IDEgPDwgKHNyY19mb3JtYXQgJiAweGZmKTsNCi0gICAgICAgICAgICAgICAgRlhfTFBCWVRFIGdyYXlfcGFsID0gRlhfQWxsb2MoRlhfQllURSwgcGFsX2NvdW50KTsNCi0gICAgICAgICAgICAgICAgaWYgKCFncmF5X3BhbCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChwYWxfY291bnQgPT0gMikgew0KLSAgICAgICAgICAgICAgICAgICAgZ3JheV9wYWxbMF0gPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgZ3JheV9wYWxbMV0gPSAyNTU7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhbF9jb3VudDsgaSsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgZ3JheV9wYWxbaV0gPSBpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHBEZXN0UGFsZXR0ZSA9IChGWF9EV09SRCopZ3JheV9wYWw7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgaW50IHBhbHNpemUgPSAxIDw8IChzcmNfZm9ybWF0ICYgMHhmZik7DQotICAgICAgICAgICAgICAgIHBEZXN0UGFsZXR0ZSA9IEZYX0FsbG9jKEZYX0RXT1JELCBwYWxzaXplKTsNCi0gICAgICAgICAgICAgICAgaWYgKCFwRGVzdFBhbGV0dGUpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAocGFsc2l6ZSA9PSAyKSB7DQotICAgICAgICAgICAgICAgICAgICBwRGVzdFBhbGV0dGVbMF0gPSBpc1NyY0NteWsgPyAyNTUgOiAweGZmMDAwMDAwOw0KLSAgICAgICAgICAgICAgICAgICAgcERlc3RQYWxldHRlWzFdID0gaXNTcmNDbXlrID8gMCA6IDB4ZmZmZmZmZmY7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhbHNpemU7IGkrKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBEZXN0UGFsZXR0ZVtpXSA9IGlzU3JjQ215ayA/IEZYX0NDT0xPUihpKSA6IChpICogMHgxMDEwMSk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKGlzU3JjQ215ayAhPSBpc0RzdENteWspIHsNCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFsc2l6ZTsgaSArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYX0NNWUsgY215ayA9IHBEZXN0UGFsZXR0ZVtpXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHIsIGcsIGI7DQotICAgICAgICAgICAgICAgICAgICAgICAgQWRvYmVDTVlLX3RvX3NSR0IxKEZYU1lTX0dldENWYWx1ZShjbXlrKSwgRlhTWVNfR2V0TVZhbHVlKGNteWspLCBGWFNZU19HZXRZVmFsdWUoY215ayksIEZYU1lTX0dldEtWYWx1ZShjbXlrKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYik7DQotICAgICAgICAgICAgICAgICAgICAgICAgcERlc3RQYWxldHRlW2ldID0gRlhBUkdCX01BS0UoMHhmZiwgciwgZywgYik7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi19DQotQ0ZYX1NjYW5saW5lQ29tcG9zaXRvcjo6Q0ZYX1NjYW5saW5lQ29tcG9zaXRvcigpDQotew0KLSAgICBtX3BTcmNQYWxldHRlID0gTlVMTDsNCi0gICAgbV9wQ2FjaGVTY2FubGluZSA9IE5VTEw7DQotICAgIG1fQ2FjaGVTaXplID0gMDsNCi0gICAgbV9iUmdiQnl0ZU9yZGVyID0gRkFMU0U7DQotICAgIG1fQmxlbmRUeXBlID0gRlhESUJfQkxFTkRfTk9STUFMOw0KLX0NCi1DRlhfU2NhbmxpbmVDb21wb3NpdG9yOjp+Q0ZYX1NjYW5saW5lQ29tcG9zaXRvcigpDQotew0KLSAgICBpZiAobV9wU3JjUGFsZXR0ZSkgew0KLSAgICAgICAgRlhfRnJlZShtX3BTcmNQYWxldHRlKTsNCi0gICAgfQ0KLSAgICBpZiAobV9wQ2FjaGVTY2FubGluZSkgew0KLSAgICAgICAgRlhfRnJlZShtX3BDYWNoZVNjYW5saW5lKTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENGWF9TY2FubGluZUNvbXBvc2l0b3I6OkluaXQoRlhESUJfRm9ybWF0IGRlc3RfZm9ybWF0LCBGWERJQl9Gb3JtYXQgc3JjX2Zvcm1hdCwgRlhfSU5UMzIgd2lkdGgsIEZYX0RXT1JEKiBwU3JjUGFsZXR0ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgbWFza19jb2xvciwgaW50IGJsZW5kX3R5cGUsIEZYX0JPT0wgYkNsaXAsIEZYX0JPT0wgYlJnYkJ5dGVPcmRlciwgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBtX1NyY0Zvcm1hdCA9IHNyY19mb3JtYXQ7DQotICAgIG1fRGVzdEZvcm1hdCA9IGRlc3RfZm9ybWF0Ow0KLSAgICBtX0JsZW5kVHlwZSA9IGJsZW5kX3R5cGU7DQotICAgIG1fYlJnYkJ5dGVPcmRlciA9IGJSZ2JCeXRlT3JkZXI7DQotICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBOVUxMOw0KLSAgICBpZiAoQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKSkgew0KLSAgICAgICAgcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOw0KLSAgICB9DQotICAgIGlmIChwSWNjTW9kdWxlID09IE5VTEwpIHsNCi0gICAgICAgIHBJY2NUcmFuc2Zvcm0gPSBOVUxMOw0KLSAgICB9DQotICAgIG1fcEljY1RyYW5zZm9ybSA9IHBJY2NUcmFuc2Zvcm07DQotICAgIGlmICgoZGVzdF9mb3JtYXQgJiAweGZmKSA9PSAxKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKG1fU3JjRm9ybWF0ID09IEZYRElCXzFicHBNYXNrIHx8IG1fU3JjRm9ybWF0ID09IEZYRElCXzhicHBNYXNrKSB7DQotICAgICAgICByZXR1cm4gX1NjYW5saW5lQ29tcG9zaXRvcl9Jbml0U291cmNlTWFzayhkZXN0X2Zvcm1hdCwgYWxwaGFfZmxhZywgbWFza19jb2xvciwNCi0gICAgICAgICAgICAgICAgbV9NYXNrQWxwaGEsIG1fTWFza1JlZCwgbV9NYXNrR3JlZW4sIG1fTWFza0JsdWUsIG1fTWFza0JsYWNrLA0KLSAgICAgICAgICAgICAgICBwSWNjTW9kdWxlLCBwSWNjVHJhbnNmb3JtKTsNCi0gICAgfQ0KLSAgICBpZiAocEljY1RyYW5zZm9ybSA9PSBOVUxMICYmICh+c3JjX2Zvcm1hdCAmIDB4MDQwMCkgJiYgKGRlc3RfZm9ybWF0ICYgMHgwNDAwKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmICgobV9TcmNGb3JtYXQgJiAweGZmKSA8PSA4KSB7DQotICAgICAgICBpZiAoZGVzdF9mb3JtYXQgPT0gRlhESUJfOGJwcE1hc2spIHsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgICAgIF9TY2FubGluZUNvbXBvc2l0b3JfSW5pdFNvdXJjZVBhbGV0dGUoc3JjX2Zvcm1hdCwgZGVzdF9mb3JtYXQsIG1fcFNyY1BhbGV0dGUsIHBTcmNQYWxldHRlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwSWNjTW9kdWxlLCBwSWNjVHJhbnNmb3JtKTsNCi0gICAgICAgIG1fVHJhbnNwYXJlbmN5ID0gKGRlc3RfZm9ybWF0ID09IEZYRElCX0FyZ2IgPyAxIDogMCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAoZGVzdF9mb3JtYXQgJiAweDAyMDAgPyAyIDogMCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAoZGVzdF9mb3JtYXQgJiAweDA0MDAgPyA0IDogMCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgKyAoKHNyY19mb3JtYXQgJiAweGZmKSA9PSAxID8gOCA6IDApOw0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgbV9UcmFuc3BhcmVuY3kgPSAoc3JjX2Zvcm1hdCAmIDB4MDIwMCA/IDAgOiAxKQ0KLSAgICAgICAgICAgICAgICAgICAgICsgKGRlc3RfZm9ybWF0ICYgMHgwMjAwID8gMCA6IDIpDQotICAgICAgICAgICAgICAgICAgICAgKyAoYmxlbmRfdHlwZSA9PSBGWERJQl9CTEVORF9OT1JNQUwgPyA0IDogMCkNCi0gICAgICAgICAgICAgICAgICAgICArIChiQ2xpcCA/IDggOiAwKQ0KLSAgICAgICAgICAgICAgICAgICAgICsgKHNyY19mb3JtYXQgJiAweDA0MDAgPyAxNiA6IDApDQotICAgICAgICAgICAgICAgICAgICAgKyAoZGVzdF9mb3JtYXQgJiAweDA0MDAgPyAzMiA6IDApDQotICAgICAgICAgICAgICAgICAgICAgKyAocEljY1RyYW5zZm9ybSA/IDY0IDogMCk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi12b2lkIENGWF9TY2FubGluZUNvbXBvc2l0b3I6OkNvbXBvc2l0ZVJnYkJpdG1hcExpbmUoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwNCi0gICAgICAgIEZYX0xQQ0JZVEUgc3JjX2V4dHJhX2FscGhhLCBGWF9MUEJZVEUgZHN0X2V4dHJhX2FscGhhKQ0KLXsNCi0gICAgaW50IHNyY19CcHAgPSAobV9TcmNGb3JtYXQgJiAweGZmKSA+PiAzOw0KLSAgICBpbnQgZGVzdF9CcHAgPSAobV9EZXN0Rm9ybWF0ICYgMHhmZikgPj4gMzsNCi0gICAgaW50IGRlc3RfU2l6ZSA9IHdpZHRoICogZGVzdF9CcHAgKyA0Ow0KLSAgICBpZiAobV9iUmdiQnl0ZU9yZGVyKSB7DQotICAgICAgICBzd2l0Y2ggKG1fVHJhbnNwYXJlbmN5KSB7DQotICAgICAgICAgICAgY2FzZSAwOg0KLSAgICAgICAgICAgIGNhc2UgNDoNCi0gICAgICAgICAgICBjYXNlIDg6DQotICAgICAgICAgICAgY2FzZSAxMjoNCi0gICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19BcmdiMkFyZ2JfUmdiQnl0ZU9yZGVyKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBtX0JsZW5kVHlwZSwgY2xpcF9zY2FuKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSAxOg0KLSAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X1JnYjJBcmdiX0JsZW5kX05vQ2xpcF9SZ2JCeXRlT3JkZXIoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIG1fQmxlbmRUeXBlLCBzcmNfQnBwKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSAyOg0KLSAgICAgICAgICAgIGNhc2UgMTA6DQotICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfQXJnYjJSZ2JfQmxlbmRfUmdiQnl0ZU9yZGVyKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBtX0JsZW5kVHlwZSwgZGVzdF9CcHAsIGNsaXBfc2Nhbik7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgMzoNCi0gICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2IyUmdiX0JsZW5kX05vQ2xpcF9SZ2JCeXRlT3JkZXIoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIG1fQmxlbmRUeXBlLCBkZXN0X0JwcCwgc3JjX0JwcCk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgNToNCi0gICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2IyQXJnYl9Ob0JsZW5kX05vQ2xpcF9SZ2JCeXRlT3JkZXIoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIHNyY19CcHApOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDY6DQotICAgICAgICAgICAgY2FzZSAxNDoNCi0gICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19BcmdiMlJnYl9Ob0JsZW5kX1JnYkJ5dGVPcmRlcihkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgZGVzdF9CcHAsIGNsaXBfc2Nhbik7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgNzoNCi0gICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2IyUmdiX05vQmxlbmRfTm9DbGlwX1JnYkJ5dGVPcmRlcihkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgZGVzdF9CcHAsIHNyY19CcHApOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDk6DQotICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfQmxlbmRfQ2xpcF9SZ2JCeXRlT3JkZXIoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIG1fQmxlbmRUeXBlLCBzcmNfQnBwLCBjbGlwX3NjYW4pOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDExOg0KLSAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X1JnYjJSZ2JfQmxlbmRfQ2xpcF9SZ2JCeXRlT3JkZXIoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIG1fQmxlbmRUeXBlLCBkZXN0X0JwcCwgc3JjX0JwcCwgY2xpcF9zY2FuKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSAxMzoNCi0gICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2IyQXJnYl9Ob0JsZW5kX0NsaXBfUmdiQnl0ZU9yZGVyKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBzcmNfQnBwLCBjbGlwX3NjYW4pOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDE1Og0KLSAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X1JnYjJSZ2JfTm9CbGVuZF9DbGlwX1JnYkJ5dGVPcmRlcihkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgZGVzdF9CcHAsIHNyY19CcHAsIGNsaXBfc2Nhbik7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChtX0Rlc3RGb3JtYXQgPT0gRlhESUJfOGJwcE1hc2spIHsNCi0gICAgICAgIGlmIChtX1NyY0Zvcm1hdCAmIDB4MDIwMCkgew0KLSAgICAgICAgICAgIGlmIChtX1NyY0Zvcm1hdCA9PSBGWERJQl9BcmdiKSB7DQotICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfQXJnYjJNYXNrKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBjbGlwX3NjYW4pOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfUmdiYTJNYXNrKGRlc3Rfc2Nhbiwgc3JjX2V4dHJhX2FscGhhLCB3aWR0aCwgY2xpcF9zY2FuKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfUmdiMk1hc2soZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIGNsaXBfc2Nhbik7DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZiAoKG1fRGVzdEZvcm1hdCAmIDB4ZmYpID09IDgpIHsNCi0gICAgICAgIGlmIChtX0Rlc3RGb3JtYXQgJiAweDA0MDApIHsNCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHdpZHRoOyBpICsrKSB7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSB+KmRlc3Rfc2NhbjsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuKys7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fU3JjRm9ybWF0ICYgMHgwMjAwKSB7DQotICAgICAgICAgICAgaWYgKG1fRGVzdEZvcm1hdCAmIDB4MDIwMCkgew0KLSAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X0FyZ2IyR3JheWEoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIG1fQmxlbmRUeXBlLCBjbGlwX3NjYW4sIHNyY19leHRyYV9hbHBoYSwgZHN0X2V4dHJhX2FscGhhLCBtX3BJY2NUcmFuc2Zvcm0pOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfQXJnYjJHcmF5KGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBtX0JsZW5kVHlwZSwgY2xpcF9zY2FuLCBzcmNfZXh0cmFfYWxwaGEsIG1fcEljY1RyYW5zZm9ybSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAobV9EZXN0Rm9ybWF0ICYgMHgwMjAwKSB7DQotICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfUmdiMkdyYXlhKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHNyY19CcHAsIHdpZHRoLCBtX0JsZW5kVHlwZSwgY2xpcF9zY2FuLCBkc3RfZXh0cmFfYWxwaGEsIG1fcEljY1RyYW5zZm9ybSk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2IyR3JheShkZXN0X3NjYW4sIHNyY19zY2FuLCBzcmNfQnBwLCB3aWR0aCwgbV9CbGVuZFR5cGUsIGNsaXBfc2NhbiwgbV9wSWNjVHJhbnNmb3JtKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9EZXN0Rm9ybWF0ICYgMHgwNDAwKSB7DQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsgaSArKykgew0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gfipkZXN0X3NjYW47DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbisrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGlmIChkZXN0X1NpemUgPiBtX0NhY2hlU2l6ZSkgew0KLSAgICAgICAgICAgIG1fcENhY2hlU2NhbmxpbmUgPSBGWF9SZWFsbG9jKEZYX0JZVEUsIG1fcENhY2hlU2NhbmxpbmUsIGRlc3RfU2l6ZSk7DQotICAgICAgICAgICAgaWYgKCFtX3BDYWNoZVNjYW5saW5lKSB7DQotICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9DYWNoZVNpemUgPSBkZXN0X1NpemU7DQotICAgICAgICB9DQotICAgICAgICBzd2l0Y2ggKG1fVHJhbnNwYXJlbmN5KSB7DQotICAgICAgICAgICAgY2FzZSAwOg0KLSAgICAgICAgICAgIGNhc2UgNDoNCi0gICAgICAgICAgICBjYXNlIDg6DQotICAgICAgICAgICAgY2FzZSA0Kzg6IHsNCi0gICAgICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfQXJnYjJBcmdiKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBtX0JsZW5kVHlwZSwgY2xpcF9zY2FuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2V4dHJhX2FscGhhLCBzcmNfZXh0cmFfYWxwaGEpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgNjQ6DQotICAgICAgICAgICAgY2FzZSA0KzY0Og0KLSAgICAgICAgICAgIGNhc2UgOCs2NDoNCi0gICAgICAgICAgICBjYXNlIDQrOCs2NDogew0KLSAgICAgICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19BcmdiMkFyZ2JfVHJhbnNmb3JtKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBtX0JsZW5kVHlwZSwgY2xpcF9zY2FuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdF9leHRyYV9hbHBoYSwgc3JjX2V4dHJhX2FscGhhLCBtX3BDYWNoZVNjYW5saW5lLCBtX3BJY2NUcmFuc2Zvcm0pOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgMToNCi0gICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2IyQXJnYl9CbGVuZF9Ob0NsaXAoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIG1fQmxlbmRUeXBlLCBzcmNfQnBwLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RfZXh0cmFfYWxwaGEpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDErNjQ6DQotICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfQmxlbmRfTm9DbGlwX1RyYW5zZm9ybShkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgbV9CbGVuZFR5cGUsIHNyY19CcHAsDQotICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2V4dHJhX2FscGhhLCBtX3BDYWNoZVNjYW5saW5lLCBtX3BJY2NUcmFuc2Zvcm0pOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDErODoNCi0gICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2IyQXJnYl9CbGVuZF9DbGlwKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBtX0JsZW5kVHlwZSwgc3JjX0JwcCwgY2xpcF9zY2FuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2V4dHJhX2FscGhhKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSAxKzgrNjQ6DQotICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfQmxlbmRfQ2xpcF9UcmFuc2Zvcm0oZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIG1fQmxlbmRUeXBlLCBzcmNfQnBwLCBjbGlwX3NjYW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2V4dHJhX2FscGhhLCBtX3BDYWNoZVNjYW5saW5lLCBtX3BJY2NUcmFuc2Zvcm0pOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDErNDoNCi0gICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2IyQXJnYl9Ob0JsZW5kX05vQ2xpcChkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgc3JjX0JwcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RfZXh0cmFfYWxwaGEpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDErNCs2NDoNCi0gICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2IyQXJnYl9Ob0JsZW5kX05vQ2xpcF9UcmFuc2Zvcm0oZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIHNyY19CcHAsDQotICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2V4dHJhX2FscGhhLCBtX3BDYWNoZVNjYW5saW5lLCBtX3BJY2NUcmFuc2Zvcm0pOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDErNCs4Og0KLSAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X1JnYjJBcmdiX05vQmxlbmRfQ2xpcChkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgc3JjX0JwcCwgY2xpcF9zY2FuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RfZXh0cmFfYWxwaGEpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDErNCs4KzY0Og0KLSAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X1JnYjJBcmdiX05vQmxlbmRfQ2xpcF9UcmFuc2Zvcm0oZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIHNyY19CcHAsIGNsaXBfc2NhbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICBkc3RfZXh0cmFfYWxwaGEsIG1fcENhY2hlU2NhbmxpbmUsIG1fcEljY1RyYW5zZm9ybSk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgMjoNCi0gICAgICAgICAgICBjYXNlIDIrODoNCi0gICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19BcmdiMlJnYl9CbGVuZChkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgbV9CbGVuZFR5cGUsIGRlc3RfQnBwLCBjbGlwX3NjYW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2V4dHJhX2FscGhhKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSAyKzY0Og0KLSAgICAgICAgICAgIGNhc2UgMis4KzY0Og0KLSAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X0FyZ2IyUmdiX0JsZW5kX1RyYW5zZm9ybShkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgbV9CbGVuZFR5cGUsIGRlc3RfQnBwLCBjbGlwX3NjYW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19leHRyYV9hbHBoYSwgbV9wQ2FjaGVTY2FubGluZSwgbV9wSWNjVHJhbnNmb3JtKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSAyKzQ6DQotICAgICAgICAgICAgY2FzZSAyKzQrODoNCi0gICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19BcmdiMlJnYl9Ob0JsZW5kKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBkZXN0X0JwcCwgY2xpcF9zY2FuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2V4dHJhX2FscGhhKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSAyKzQrNjQ6DQotICAgICAgICAgICAgY2FzZSAyKzQrOCs2NDoNCi0gICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19BcmdiMlJnYl9Ob0JsZW5kX1RyYW5zZm9ybShkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgZGVzdF9CcHAsIGNsaXBfc2NhbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICBzcmNfZXh0cmFfYWxwaGEsIG1fcENhY2hlU2NhbmxpbmUsIG1fcEljY1RyYW5zZm9ybSk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgMSsyOg0KLSAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X1JnYjJSZ2JfQmxlbmRfTm9DbGlwKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBtX0JsZW5kVHlwZSwgZGVzdF9CcHAsIHNyY19CcHApOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDErMis2NDoNCi0gICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2IyUmdiX0JsZW5kX05vQ2xpcF9UcmFuc2Zvcm0oZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIG1fQmxlbmRUeXBlLCBkZXN0X0JwcCwgc3JjX0JwcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3BDYWNoZVNjYW5saW5lLCBtX3BJY2NUcmFuc2Zvcm0pOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDErMis4Og0KLSAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X1JnYjJSZ2JfQmxlbmRfQ2xpcChkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgbV9CbGVuZFR5cGUsIGRlc3RfQnBwLCBzcmNfQnBwLCBjbGlwX3NjYW4pOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDErMis4KzY0Og0KLSAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X1JnYjJSZ2JfQmxlbmRfQ2xpcF9UcmFuc2Zvcm0oZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIG1fQmxlbmRUeXBlLCBkZXN0X0JwcCwgc3JjX0JwcCwgY2xpcF9zY2FuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcENhY2hlU2NhbmxpbmUsIG1fcEljY1RyYW5zZm9ybSk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgMSsyKzQ6DQotICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9Ob0JsZW5kX05vQ2xpcChkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgZGVzdF9CcHAsIHNyY19CcHApOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDErMis0KzY0Og0KLSAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X1JnYjJSZ2JfTm9CbGVuZF9Ob0NsaXBfVHJhbnNmb3JtKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBkZXN0X0JwcCwgc3JjX0JwcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3BDYWNoZVNjYW5saW5lLCBtX3BJY2NUcmFuc2Zvcm0pOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDErMis0Kzg6DQotICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9Ob0JsZW5kX0NsaXAoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIGRlc3RfQnBwLCBzcmNfQnBwLCBjbGlwX3NjYW4pOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDErMis0KzgrNjQ6DQotICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9Ob0JsZW5kX0NsaXBfVHJhbnNmb3JtKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBkZXN0X0JwcCwgc3JjX0JwcCwgY2xpcF9zY2FuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcENhY2hlU2NhbmxpbmUsIG1fcEljY1RyYW5zZm9ybSk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLXZvaWQgQ0ZYX1NjYW5saW5lQ29tcG9zaXRvcjo6Q29tcG9zaXRlUGFsQml0bWFwTGluZShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgc3JjX2xlZnQsIGludCB3aWR0aCwgRlhfTFBDQllURSBjbGlwX3NjYW4sDQotICAgICAgICBGWF9MUENCWVRFIHNyY19leHRyYV9hbHBoYSwgRlhfTFBCWVRFIGRzdF9leHRyYV9hbHBoYSkNCi17DQotICAgIGlmIChtX2JSZ2JCeXRlT3JkZXIpIHsNCi0gICAgICAgIGlmIChtX1NyY0Zvcm1hdCA9PSBGWERJQl8xYnBwUmdiKSB7DQotICAgICAgICAgICAgaWYgKG1fRGVzdEZvcm1hdCA9PSBGWERJQl84YnBwUmdiKSB7DQotICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICB9IGVsc2UgaWYobV9EZXN0Rm9ybWF0ID09IEZYRElCX0FyZ2IpIHsNCi0gICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd18xYnBwUmdiMkFyZ2JfTm9CbGVuZF9SZ2JCeXRlT3JkZXIoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgc3JjX2xlZnQsIHdpZHRoLCBtX3BTcmNQYWxldHRlLCBjbGlwX3NjYW4pOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfMWJwcFJnYjJSZ2JfTm9CbGVuZF9SZ2JCeXRlT3JkZXIoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgc3JjX2xlZnQsIG1fcFNyY1BhbGV0dGUsIHdpZHRoLCAobV9EZXN0Rm9ybWF0ICYgMHhmZikgPj4gMywgY2xpcF9zY2FuKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlmIChtX0Rlc3RGb3JtYXQgPT0gRlhESUJfOGJwcFJnYikgew0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfSBlbHNlIGlmIChtX0Rlc3RGb3JtYXQgPT0gRlhESUJfQXJnYikgew0KLSAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93XzhicHBSZ2IyQXJnYl9Ob0JsZW5kX1JnYkJ5dGVPcmRlcihkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgbV9wU3JjUGFsZXR0ZSwgY2xpcF9zY2FuKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93XzhicHBSZ2IyUmdiX05vQmxlbmRfUmdiQnl0ZU9yZGVyKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIG1fcFNyY1BhbGV0dGUsIHdpZHRoLCAobV9EZXN0Rm9ybWF0ICYgMHhmZikgPj4gMywgY2xpcF9zY2FuKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKG1fRGVzdEZvcm1hdCA9PSBGWERJQl84YnBwTWFzaykgew0KLSAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2IyTWFzayhkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgY2xpcF9zY2FuKTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfSBlbHNlIGlmICgobV9EZXN0Rm9ybWF0ICYgMHhmZikgPT0gOCkgew0KLSAgICAgICAgaWYgKG1fVHJhbnNwYXJlbmN5ICYgOCkgew0KLSAgICAgICAgICAgIGlmIChtX0Rlc3RGb3JtYXQgJiAweDAyMDApIHsNCi0gICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd18xYnBwUGFsMkdyYXlhKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHNyY19sZWZ0LCAoRlhfTFBDQllURSltX3BTcmNQYWxldHRlLCB3aWR0aCwgbV9CbGVuZFR5cGUsIGNsaXBfc2NhbiwgZHN0X2V4dHJhX2FscGhhKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93XzFicHBQYWwyR3JheShkZXN0X3NjYW4sIHNyY19zY2FuLCBzcmNfbGVmdCwgKEZYX0xQQ0JZVEUpbV9wU3JjUGFsZXR0ZSwgd2lkdGgsIG1fQmxlbmRUeXBlLCBjbGlwX3NjYW4pOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYgKG1fRGVzdEZvcm1hdCAmIDB4MDIwMCkNCi0gICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd184YnBwUGFsMkdyYXlhKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIChGWF9MUENCWVRFKW1fcFNyY1BhbGV0dGUsIHdpZHRoLCBtX0JsZW5kVHlwZSwgY2xpcF9zY2FuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2V4dHJhX2FscGhhLCBzcmNfZXh0cmFfYWxwaGEpOw0KLSAgICAgICAgICAgIGVsc2UNCi0gICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd184YnBwUGFsMkdyYXkoZGVzdF9zY2FuLCBzcmNfc2NhbiwgKEZYX0xQQ0JZVEUpbV9wU3JjUGFsZXR0ZSwgd2lkdGgsIG1fQmxlbmRUeXBlLCBjbGlwX3NjYW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19leHRyYV9hbHBoYSk7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBzd2l0Y2ggKG1fVHJhbnNwYXJlbmN5KSB7DQotICAgICAgICAgICAgY2FzZSAxKzI6DQotICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfOGJwcFJnYjJBcmdiX05vQmxlbmQoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIG1fcFNyY1BhbGV0dGUsIGNsaXBfc2NhbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfZXh0cmFfYWxwaGEpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDErMis4Og0KLSAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93XzFicHBSZ2IyQXJnYl9Ob0JsZW5kKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHNyY19sZWZ0LCB3aWR0aCwgbV9wU3JjUGFsZXR0ZSwgY2xpcF9zY2FuKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSAwOg0KLSAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93XzhicHBSZ2IyUmdiX05vQmxlbmQoZGVzdF9zY2FuLCBzcmNfc2NhbiwgbV9wU3JjUGFsZXR0ZSwgd2lkdGgsIChtX0Rlc3RGb3JtYXQgJiAweGZmKSA+PiAzLCBjbGlwX3NjYW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfZXh0cmFfYWxwaGEpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDArODoNCi0gICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd18xYnBwUmdiMlJnYl9Ob0JsZW5kKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHNyY19sZWZ0LCBtX3BTcmNQYWxldHRlLCB3aWR0aCwgKG1fRGVzdEZvcm1hdCAmIDB4ZmYpID4+IDMsIGNsaXBfc2Nhbik7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgMCsyOg0KLSAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93XzhicHBSZ2IyUmdiX05vQmxlbmQoZGVzdF9zY2FuLCBzcmNfc2NhbiwgbV9wU3JjUGFsZXR0ZSwgd2lkdGgsIChtX0Rlc3RGb3JtYXQgJiAweGZmKSA+PiAzLCBjbGlwX3NjYW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfZXh0cmFfYWxwaGEpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIDArMis4Og0KLSAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93XzFicHBSZ2IyUmdiYV9Ob0JsZW5kKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHNyY19sZWZ0LCB3aWR0aCwgbV9wU3JjUGFsZXR0ZSwgY2xpcF9zY2FuLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdF9leHRyYV9hbHBoYSk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi12b2lkIENGWF9TY2FubGluZUNvbXBvc2l0b3I6OkNvbXBvc2l0ZUJ5dGVNYXNrTGluZShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLA0KLSAgICAgICAgRlhfTFBCWVRFIGRzdF9leHRyYV9hbHBoYSkNCi17DQotICAgIGlmIChtX0Rlc3RGb3JtYXQgPT0gRlhESUJfOGJwcE1hc2spIHsNCi0gICAgICAgIF9Db21wb3NpdGVSb3dfQnl0ZU1hc2syTWFzayhkZXN0X3NjYW4sIHNyY19zY2FuLCBtX01hc2tBbHBoYSwgd2lkdGgsIGNsaXBfc2Nhbik7DQotICAgIH0gZWxzZSBpZiAoKG1fRGVzdEZvcm1hdCAmIDB4ZmYpID09IDgpIHsNCi0gICAgICAgIGlmIChtX0Rlc3RGb3JtYXQgJiAweDAyMDApIHsNCi0gICAgICAgICAgICBfQ29tcG9zaXRlUm93X0J5dGVNYXNrMkdyYXlhKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIG1fTWFza0FscGhhLCBtX01hc2tSZWQsIHdpZHRoLCBjbGlwX3NjYW4sIGRzdF9leHRyYV9hbHBoYSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfQnl0ZU1hc2syR3JheShkZXN0X3NjYW4sIHNyY19zY2FuLCBtX01hc2tBbHBoYSwgbV9NYXNrUmVkLCB3aWR0aCwgY2xpcF9zY2FuKTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIGlmIChtX2JSZ2JCeXRlT3JkZXIpIHsNCi0gICAgICAgIGlmIChtX0Rlc3RGb3JtYXQgPT0gRlhESUJfQXJnYikNCi0gICAgICAgICAgICBfQ29tcG9zaXRlUm93X0J5dGVNYXNrMkFyZ2JfUmdiQnl0ZU9yZGVyKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIG1fTWFza0FscGhhLCBtX01hc2tSZWQsIG1fTWFza0dyZWVuLCBtX01hc2tCbHVlLA0KLSAgICAgICAgICAgICAgICAgICAgd2lkdGgsIG1fQmxlbmRUeXBlLCBjbGlwX3NjYW4pOw0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfQnl0ZU1hc2syUmdiX1JnYkJ5dGVPcmRlcihkZXN0X3NjYW4sIHNyY19zY2FuLCBtX01hc2tBbHBoYSwgbV9NYXNrUmVkLCBtX01hc2tHcmVlbiwgbV9NYXNrQmx1ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIG1fQmxlbmRUeXBlLCAobV9EZXN0Rm9ybWF0ICYgMHhmZikgPj4gMywgY2xpcF9zY2FuKTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfSBlbHNlIGlmIChtX0Rlc3RGb3JtYXQgPT0gRlhESUJfQXJnYikNCi0gICAgICAgIF9Db21wb3NpdGVSb3dfQnl0ZU1hc2syQXJnYihkZXN0X3NjYW4sIHNyY19zY2FuLCBtX01hc2tBbHBoYSwgbV9NYXNrUmVkLCBtX01hc2tHcmVlbiwgbV9NYXNrQmx1ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgbV9CbGVuZFR5cGUsIGNsaXBfc2Nhbik7DQotICAgIGVsc2UgaWYgKG1fRGVzdEZvcm1hdCA9PSBGWERJQl9SZ2IgfHwgbV9EZXN0Rm9ybWF0ID09IEZYRElCX1JnYjMyKQ0KLSAgICAgICAgX0NvbXBvc2l0ZVJvd19CeXRlTWFzazJSZ2IoZGVzdF9zY2FuLCBzcmNfc2NhbiwgbV9NYXNrQWxwaGEsIG1fTWFza1JlZCwgbV9NYXNrR3JlZW4sIG1fTWFza0JsdWUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgbV9CbGVuZFR5cGUsIChtX0Rlc3RGb3JtYXQgJiAweGZmKSA+PiAzLCBjbGlwX3NjYW4pOw0KLSAgICBlbHNlIGlmIChtX0Rlc3RGb3JtYXQgPT0gRlhESUJfUmdiYSkNCi0gICAgICAgIF9Db21wb3NpdGVSb3dfQnl0ZU1hc2syUmdiYShkZXN0X3NjYW4sIHNyY19zY2FuLCBtX01hc2tBbHBoYSwgbV9NYXNrUmVkLCBtX01hc2tHcmVlbiwgbV9NYXNrQmx1ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgbV9CbGVuZFR5cGUsIGNsaXBfc2NhbiwgZHN0X2V4dHJhX2FscGhhKTsNCi19DQotdm9pZCBDRlhfU2NhbmxpbmVDb21wb3NpdG9yOjpDb21wb3NpdGVCaXRNYXNrTGluZShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgc3JjX2xlZnQsIGludCB3aWR0aCwgRlhfTFBDQllURSBjbGlwX3NjYW4sDQotICAgICAgICBGWF9MUEJZVEUgZHN0X2V4dHJhX2FscGhhKQ0KLXsNCi0gICAgaWYgKG1fRGVzdEZvcm1hdCA9PSBGWERJQl84YnBwTWFzaykgew0KLSAgICAgICAgX0NvbXBvc2l0ZVJvd19CaXRNYXNrMk1hc2soZGVzdF9zY2FuLCBzcmNfc2NhbiwgbV9NYXNrQWxwaGEsIHNyY19sZWZ0LCB3aWR0aCwgY2xpcF9zY2FuKTsNCi0gICAgfSBlbHNlIGlmICgobV9EZXN0Rm9ybWF0ICYgMHhmZikgPT0gOCkgew0KLSAgICAgICAgaWYgKG1fRGVzdEZvcm1hdCAmIDB4MDIwMCkNCi0gICAgICAgICAgICBfQ29tcG9zaXRlUm93X0JpdE1hc2syR3JheWEoZGVzdF9zY2FuLCBzcmNfc2NhbiwgbV9NYXNrQWxwaGEsIG1fTWFza1JlZCwgc3JjX2xlZnQsIHdpZHRoLCBjbGlwX3NjYW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdF9leHRyYV9hbHBoYSk7DQotICAgICAgICBlbHNlIHsNCi0gICAgICAgICAgICBfQ29tcG9zaXRlUm93X0JpdE1hc2syR3JheShkZXN0X3NjYW4sIHNyY19zY2FuLCBtX01hc2tBbHBoYSwgbV9NYXNrUmVkLCBzcmNfbGVmdCwgd2lkdGgsIGNsaXBfc2Nhbik7DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZiAobV9iUmdiQnl0ZU9yZGVyKSB7DQotICAgICAgICBpZiAobV9EZXN0Rm9ybWF0ID09IEZYRElCX0FyZ2IpDQotICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19CaXRNYXNrMkFyZ2JfUmdiQnl0ZU9yZGVyKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIG1fTWFza0FscGhhLCBtX01hc2tSZWQsIG1fTWFza0dyZWVuLCBtX01hc2tCbHVlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfbGVmdCwgd2lkdGgsIG1fQmxlbmRUeXBlLCBjbGlwX3NjYW4pOw0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfQml0TWFzazJSZ2JfUmdiQnl0ZU9yZGVyKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIG1fTWFza0FscGhhLCBtX01hc2tSZWQsIG1fTWFza0dyZWVuLCBtX01hc2tCbHVlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19sZWZ0LCB3aWR0aCwgbV9CbGVuZFR5cGUsIChtX0Rlc3RGb3JtYXQgJiAweGZmKSA+PiAzLCBjbGlwX3NjYW4pOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9IGVsc2UgaWYgKG1fRGVzdEZvcm1hdCA9PSBGWERJQl9BcmdiKQ0KLSAgICAgICAgX0NvbXBvc2l0ZVJvd19CaXRNYXNrMkFyZ2IoZGVzdF9zY2FuLCBzcmNfc2NhbiwgbV9NYXNrQWxwaGEsIG1fTWFza1JlZCwgbV9NYXNrR3JlZW4sIG1fTWFza0JsdWUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfbGVmdCwgd2lkdGgsIG1fQmxlbmRUeXBlLCBjbGlwX3NjYW4pOw0KLSAgICBlbHNlIGlmIChtX0Rlc3RGb3JtYXQgPT0gRlhESUJfUmdiIHx8IG1fRGVzdEZvcm1hdCA9PSBGWERJQl9SZ2IzMikNCi0gICAgICAgIF9Db21wb3NpdGVSb3dfQml0TWFzazJSZ2IoZGVzdF9zY2FuLCBzcmNfc2NhbiwgbV9NYXNrQWxwaGEsIG1fTWFza1JlZCwgbV9NYXNrR3JlZW4sIG1fTWFza0JsdWUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19sZWZ0LCB3aWR0aCwgbV9CbGVuZFR5cGUsIChtX0Rlc3RGb3JtYXQgJiAweGZmKSA+PiAzLCBjbGlwX3NjYW4pOw0KLX0NCi1GWF9CT09MIENGWF9ESUJpdG1hcDo6Q29tcG9zaXRlQml0bWFwKGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyY0JpdG1hcCwgaW50IHNyY19sZWZ0LCBpbnQgc3JjX3RvcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibGVuZF90eXBlLCBjb25zdCBDRlhfQ2xpcFJnbiogcENsaXBSZ24sIEZYX0JPT0wgYlJnYkJ5dGVPcmRlciwgdm9pZCogcEljY1RyYW5zZm9ybSkNCi17DQotICAgIGlmIChtX3BCdWZmZXIgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEFTU0VSVCghcFNyY0JpdG1hcC0+SXNBbHBoYU1hc2soKSk7DQotICAgIEFTU0VSVChtX2JwcCA+PSA4KTsNCi0gICAgaWYgKHBTcmNCaXRtYXAtPklzQWxwaGFNYXNrKCkgfHwgbV9icHAgPCA4KSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgR2V0T3ZlcmxhcFJlY3QoZGVzdF9sZWZ0LCBkZXN0X3RvcCwgd2lkdGgsIGhlaWdodCwgcFNyY0JpdG1hcC0+R2V0V2lkdGgoKSwgcFNyY0JpdG1hcC0+R2V0SGVpZ2h0KCksDQotICAgICAgICAgICAgICAgICAgIHNyY19sZWZ0LCBzcmNfdG9wLCBwQ2xpcFJnbik7DQotICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBjb25zdCBDRlhfRElCaXRtYXAqIHBDbGlwTWFzayA9IE5VTEw7DQotICAgIEZYX1JFQ1QgY2xpcF9ib3g7DQotICAgIGlmIChwQ2xpcFJnbiAmJiBwQ2xpcFJnbi0+R2V0VHlwZSgpICE9IENGWF9DbGlwUmduOjpSZWN0SSkgew0KLSAgICAgICAgQVNTRVJUKHBDbGlwUmduLT5HZXRUeXBlKCkgPT0gQ0ZYX0NsaXBSZ246Ok1hc2tGKTsNCi0gICAgICAgIHBDbGlwTWFzayA9IHBDbGlwUmduLT5HZXRNYXNrKCk7DQotICAgICAgICBjbGlwX2JveCA9IHBDbGlwUmduLT5HZXRCb3goKTsNCi0gICAgfQ0KLSAgICBDRlhfU2NhbmxpbmVDb21wb3NpdG9yIGNvbXBvc2l0b3I7DQotICAgIGlmICghY29tcG9zaXRvci5Jbml0KEdldEZvcm1hdCgpLCBwU3JjQml0bWFwLT5HZXRGb3JtYXQoKSwgd2lkdGgsIHBTcmNCaXRtYXAtPkdldFBhbGV0dGUoKSwgMCwgYmxlbmRfdHlwZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgcENsaXBNYXNrICE9IE5VTEwsIGJSZ2JCeXRlT3JkZXIsIDAsIHBJY2NUcmFuc2Zvcm0pKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaW50IGRlc3RfQnBwID0gbV9icHAgLyA4Ow0KLSAgICBpbnQgc3JjX0JwcCA9IHBTcmNCaXRtYXAtPkdldEJQUCgpIC8gODsNCi0gICAgRlhfQk9PTCBiUmdiID0gRkFMU0U7DQotICAgIEZYX0JPT0wgYkNteWsgPSBGQUxTRTsNCi0gICAgaWYgKHNyY19CcHAgPiAxKSB7DQotICAgICAgICBpZiAocFNyY0JpdG1hcC0+SXNDbXlrSW1hZ2UoKSkgew0KLSAgICAgICAgICAgIGJDbXlrID0gVFJVRTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgYlJnYiA9IFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgQ0ZYX0RJQml0bWFwKiBwU3JjQWxwaGFNYXNrID0gcFNyY0JpdG1hcC0+bV9wQWxwaGFNYXNrOw0KLSAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IG1fcEJ1ZmZlciArIChkZXN0X3RvcCArIHJvdykgKiBtX1BpdGNoICsgZGVzdF9sZWZ0ICogZGVzdF9CcHA7DQotICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gcFNyY0JpdG1hcC0+R2V0U2NhbmxpbmUoc3JjX3RvcCArIHJvdykgKyBzcmNfbGVmdCAqIHNyY19CcHA7DQotICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuX2V4dHJhX2FscGhhID0gcFNyY0FscGhhTWFzayA/IHBTcmNBbHBoYU1hc2stPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpICsgc3JjX2xlZnQgOiBOVUxMOw0KLSAgICAgICAgRlhfTFBCWVRFIGRzdF9zY2FuX2V4dHJhX2FscGhhID0gbV9wQWxwaGFNYXNrID8gKEZYX0xQQllURSltX3BBbHBoYU1hc2stPkdldFNjYW5saW5lKGRlc3RfdG9wICsgcm93KSArIGRlc3RfbGVmdCA6IE5VTEw7DQotICAgICAgICBGWF9MUENCWVRFIGNsaXBfc2NhbiA9IE5VTEw7DQotICAgICAgICBpZiAocENsaXBNYXNrKSB7DQotICAgICAgICAgICAgY2xpcF9zY2FuID0gcENsaXBNYXNrLT5tX3BCdWZmZXIgKyAoZGVzdF90b3AgKyByb3cgLSBjbGlwX2JveC50b3ApICogcENsaXBNYXNrLT5tX1BpdGNoICsgKGRlc3RfbGVmdCAtIGNsaXBfYm94LmxlZnQpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGJSZ2IpIHsNCi0gICAgICAgICAgICBjb21wb3NpdG9yLkNvbXBvc2l0ZVJnYkJpdG1hcExpbmUoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIGNsaXBfc2Nhbiwgc3JjX3NjYW5fZXh0cmFfYWxwaGEsIGRzdF9zY2FuX2V4dHJhX2FscGhhKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgY29tcG9zaXRvci5Db21wb3NpdGVQYWxCaXRtYXBMaW5lKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHNyY19sZWZ0LCB3aWR0aCwgY2xpcF9zY2FuLCBzcmNfc2Nhbl9leHRyYV9hbHBoYSwgZHN0X3NjYW5fZXh0cmFfYWxwaGEpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENGWF9ESUJpdG1hcDo6Q29tcG9zaXRlTWFzayhpbnQgZGVzdF9sZWZ0LCBpbnQgZGVzdF90b3AsIGludCB3aWR0aCwgaW50IGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwTWFzaywgRlhfRFdPUkQgY29sb3IsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3AsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsZW5kX3R5cGUsIGNvbnN0IENGWF9DbGlwUmduKiBwQ2xpcFJnbiwgRlhfQk9PTCBiUmdiQnl0ZU9yZGVyLCBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSkNCi17DQotICAgIGlmIChtX3BCdWZmZXIgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEFTU0VSVChwTWFzay0+SXNBbHBoYU1hc2soKSk7DQotICAgIEFTU0VSVChtX2JwcCA+PSA4KTsNCi0gICAgaWYgKCFwTWFzay0+SXNBbHBoYU1hc2soKSB8fCBtX2JwcCA8IDgpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBHZXRPdmVybGFwUmVjdChkZXN0X2xlZnQsIGRlc3RfdG9wLCB3aWR0aCwgaGVpZ2h0LCBwTWFzay0+R2V0V2lkdGgoKSwgcE1hc2stPkdldEhlaWdodCgpLCBzcmNfbGVmdCwgc3JjX3RvcCwgcENsaXBSZ24pOw0KLSAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgaW50IHNyY19hbHBoYSA9IChGWF9CWVRFKShhbHBoYV9mbGFnID4+IDgpID8gKGFscGhhX2ZsYWcgJiAweGZmKSA6IEZYQVJHQl9BKGNvbG9yKTsNCi0gICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBjb25zdCBDRlhfRElCaXRtYXAqIHBDbGlwTWFzayA9IE5VTEw7DQotICAgIEZYX1JFQ1QgY2xpcF9ib3g7DQotICAgIGlmIChwQ2xpcFJnbiAmJiBwQ2xpcFJnbi0+R2V0VHlwZSgpICE9IENGWF9DbGlwUmduOjpSZWN0SSkgew0KLSAgICAgICAgQVNTRVJUKHBDbGlwUmduLT5HZXRUeXBlKCkgPT0gQ0ZYX0NsaXBSZ246Ok1hc2tGKTsNCi0gICAgICAgIHBDbGlwTWFzayA9IHBDbGlwUmduLT5HZXRNYXNrKCk7DQotICAgICAgICBjbGlwX2JveCA9IHBDbGlwUmduLT5HZXRCb3goKTsNCi0gICAgfQ0KLSAgICBpbnQgc3JjX2JwcCA9IHBNYXNrLT5HZXRCUFAoKTsNCi0gICAgaW50IEJwcCA9IEdldEJQUCgpIC8gODsNCi0gICAgQ0ZYX1NjYW5saW5lQ29tcG9zaXRvciBjb21wb3NpdG9yOw0KLSAgICBpZiAoIWNvbXBvc2l0b3IuSW5pdChHZXRGb3JtYXQoKSwgcE1hc2stPkdldEZvcm1hdCgpLCB3aWR0aCwgTlVMTCwgY29sb3IsIGJsZW5kX3R5cGUsIHBDbGlwTWFzayAhPSBOVUxMLCBiUmdiQnl0ZU9yZGVyLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7DQotICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gbV9wQnVmZmVyICsgKGRlc3RfdG9wICsgcm93KSAqIG1fUGl0Y2ggKyBkZXN0X2xlZnQgKiBCcHA7DQotICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gcE1hc2stPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpOw0KLSAgICAgICAgRlhfTFBCWVRFIGRzdF9zY2FuX2V4dHJhX2FscGhhID0gbV9wQWxwaGFNYXNrID8gKEZYX0xQQllURSltX3BBbHBoYU1hc2stPkdldFNjYW5saW5lKGRlc3RfdG9wICsgcm93KSArIGRlc3RfbGVmdCA6IE5VTEw7DQotICAgICAgICBGWF9MUENCWVRFIGNsaXBfc2NhbiA9IE5VTEw7DQotICAgICAgICBpZiAocENsaXBNYXNrKSB7DQotICAgICAgICAgICAgY2xpcF9zY2FuID0gcENsaXBNYXNrLT5tX3BCdWZmZXIgKyAoZGVzdF90b3AgKyByb3cgLSBjbGlwX2JveC50b3ApICogcENsaXBNYXNrLT5tX1BpdGNoICsgKGRlc3RfbGVmdCAtIGNsaXBfYm94LmxlZnQpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHNyY19icHAgPT0gMSkgew0KLSAgICAgICAgICAgIGNvbXBvc2l0b3IuQ29tcG9zaXRlQml0TWFza0xpbmUoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgc3JjX2xlZnQsIHdpZHRoLCBjbGlwX3NjYW4sIGRzdF9zY2FuX2V4dHJhX2FscGhhKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgY29tcG9zaXRvci5Db21wb3NpdGVCeXRlTWFza0xpbmUoZGVzdF9zY2FuLCBzcmNfc2NhbiArIHNyY19sZWZ0LCB3aWR0aCwgY2xpcF9zY2FuLCBkc3Rfc2Nhbl9leHRyYV9hbHBoYSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ0ZYX0RJQml0bWFwOjpDb21wb3NpdGVSZWN0KGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEZYX0RXT1JEIGNvbG9yLCBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSkNCi17DQotICAgIGlmIChtX3BCdWZmZXIgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGludCBzcmNfYWxwaGEgPSAoYWxwaGFfZmxhZyA+PiA4KSA/IChhbHBoYV9mbGFnICYgMHhmZikgOiBGWEFSR0JfQShjb2xvcik7DQotICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgRlhfUkVDVCByZWN0KGxlZnQsIHRvcCwgbGVmdCArIHdpZHRoLCB0b3AgKyBoZWlnaHQpOw0KLSAgICByZWN0LkludGVyc2VjdCgwLCAwLCBtX1dpZHRoLCBtX0hlaWdodCk7DQotICAgIGlmIChyZWN0LklzRW1wdHkoKSkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgd2lkdGggPSByZWN0LldpZHRoKCk7DQotICAgIEZYX0RXT1JEIGRzdF9jb2xvcjsNCi0gICAgaWYgKGFscGhhX2ZsYWcgPj4gOCkgew0KLSAgICAgICAgZHN0X2NvbG9yID0gRlhDTVlLX1RPRElCKGNvbG9yKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGRzdF9jb2xvciA9IEZYQVJHQl9UT0RJQihjb2xvcik7DQotICAgIH0NCi0gICAgRlhfTFBCWVRFIGNvbG9yX3AgPSAoRlhfTFBCWVRFKSZkc3RfY29sb3I7DQotICAgIGlmIChtX2JwcCA9PSA4KSB7DQotICAgICAgICBGWF9CWVRFIGdyYXkgPSAyNTU7DQotICAgICAgICBpZiAoIUlzQWxwaGFNYXNrKCkpIHsNCi0gICAgICAgICAgICBpZiAocEljY1RyYW5zZm9ybSAmJiBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpICYmIENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpKSB7DQotICAgICAgICAgICAgICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsNCi0gICAgICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgJmdyYXksIGNvbG9yX3AsIDEpOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGlmIChhbHBoYV9mbGFnID4+IDgpIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgciwgZywgYjsNCi0gICAgICAgICAgICAgICAgICAgIEFkb2JlQ01ZS190b19zUkdCMShjb2xvcl9wWzBdLCBjb2xvcl9wWzFdLCBjb2xvcl9wWzJdLCBjb2xvcl9wWzNdLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIpOw0KLSAgICAgICAgICAgICAgICAgICAgZ3JheSA9IEZYUkdCMkdSQVkociwgZywgYik7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBncmF5ID0gKEZYX0JZVEUpRlhSR0IyR1JBWSgoaW50KWNvbG9yX3BbMl0sIGNvbG9yX3BbMV0sIGNvbG9yX3BbMF0pOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChJc0NteWtJbWFnZSgpKSB7DQotICAgICAgICAgICAgICAgIGdyYXkgPSB+Z3JheTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBmb3IgKGludCByb3cgPSByZWN0LnRvcDsgcm93IDwgcmVjdC5ib3R0b207IHJvdyArKykgew0KLSAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBtX3BCdWZmZXIgKyByb3cgKiBtX1BpdGNoICsgcmVjdC5sZWZ0Ow0KLSAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMjU1KSB7DQotICAgICAgICAgICAgICAgIEZYU1lTX21lbXNldDgoZGVzdF9zY2FuLCBncmF5LCB3aWR0aCk7DQotICAgICAgICAgICAgfSBlbHNlDQotICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBncmF5LCBzcmNfYWxwaGEpOw0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfSBlbHNlIGlmIChtX2JwcCA9PSAxKSB7DQotICAgICAgICBBU1NFUlQoIUlzQ215a0ltYWdlKCkgJiYgKEZYX0JZVEUpKGFscGhhX2ZsYWcgPj4gOCkgPT0gMCk7DQotICAgICAgICBpbnQgbGVmdF9zaGlmdCA9IHJlY3QubGVmdCAlIDg7DQotICAgICAgICBpbnQgcmlnaHRfc2hpZnQgPSByZWN0LnJpZ2h0ICUgODsNCi0gICAgICAgIGludCB3aWR0aCA9IHJlY3QucmlnaHQgLyA4IC0gcmVjdC5sZWZ0IC8gODsNCi0gICAgICAgIGludCBpbmRleCA9IDA7DQotICAgICAgICBpZiAobV9wUGFsZXR0ZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgaW5kZXggPSAoKEZYX0JZVEUpY29sb3IgPT0gMHhmZikgPyAxIDogMDsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpICsrKQ0KLSAgICAgICAgICAgICAgICBpZiAobV9wUGFsZXR0ZVtpXSA9PSBjb2xvcikgew0KLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBmb3IgKGludCByb3cgPSByZWN0LnRvcDsgcm93IDwgcmVjdC5ib3R0b207IHJvdyArKykgew0KLSAgICAgICAgICAgIEZYX0JZVEUqIGRlc3Rfc2Nhbl90b3AgPSAoRlhfQllURSopR2V0U2NhbmxpbmUocm93KSArIHJlY3QubGVmdCAvIDg7DQotICAgICAgICAgICAgRlhfQllURSogZGVzdF9zY2FuX3RvcF9yID0gKEZYX0JZVEUqKUdldFNjYW5saW5lKHJvdykgKyByZWN0LnJpZ2h0IC8gODsNCi0gICAgICAgICAgICBGWF9CWVRFIGxlZnRfZmxhZyA9ICAqZGVzdF9zY2FuX3RvcCAmICgyNTUgPDwgKDggLSBsZWZ0X3NoaWZ0KSk7DQotICAgICAgICAgICAgRlhfQllURSByaWdodF9mbGFnID0gKmRlc3Rfc2Nhbl90b3BfciAmICgyNTUgPj4gcmlnaHRfc2hpZnQpOw0KLSAgICAgICAgICAgIGlmICh3aWR0aCkgew0KLSAgICAgICAgICAgICAgICBGWFNZU19tZW1zZXQ4KGRlc3Rfc2Nhbl90b3AgKyAxLCBpbmRleCA/IDI1NSA6IDAsIHdpZHRoIC0gMSk7DQotICAgICAgICAgICAgICAgIGlmICghaW5kZXgpIHsNCi0gICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW5fdG9wICY9IGxlZnRfZmxhZzsNCi0gICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW5fdG9wX3IgJj0gcmlnaHRfZmxhZzsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW5fdG9wIHw9IH5sZWZ0X2ZsYWc7DQotICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuX3RvcF9yIHw9IH5yaWdodF9mbGFnOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgaWYgKCFpbmRleCkgew0KLSAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2Nhbl90b3AgJj0gbGVmdF9mbGFnIHwgcmlnaHRfZmxhZzsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW5fdG9wIHw9IH4obGVmdF9mbGFnIHwgcmlnaHRfZmxhZyk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBBU1NFUlQobV9icHAgPj0gMjQpOw0KLSAgICBpZiAobV9icHAgPCAyNCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChwSWNjVHJhbnNmb3JtICYmIENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCkpIHsNCi0gICAgICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsNCi0gICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGNvbG9yX3AsIGNvbG9yX3AsIDEpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYgKGFscGhhX2ZsYWcgPj4gOCAmJiAhSXNDbXlrSW1hZ2UoKSkNCi0gICAgICAgICAgICBBZG9iZUNNWUtfdG9fc1JHQjEoRlhTWVNfR2V0Q1ZhbHVlKGNvbG9yKSwgRlhTWVNfR2V0TVZhbHVlKGNvbG9yKSwgRlhTWVNfR2V0WVZhbHVlKGNvbG9yKSwgRlhTWVNfR2V0S1ZhbHVlKGNvbG9yKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JfcFsyXSwgY29sb3JfcFsxXSwgY29sb3JfcFswXSk7DQotICAgICAgICBlbHNlIGlmICghKGFscGhhX2ZsYWcgPj4gOCkgJiYgSXNDbXlrSW1hZ2UoKSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZighSXNDbXlrSW1hZ2UoKSkgew0KLSAgICAgICAgY29sb3JfcFszXSA9IChGWF9CWVRFKXNyY19hbHBoYTsNCi0gICAgfQ0KLSAgICBpbnQgQnBwID0gbV9icHAgLyA4Ow0KLSAgICBGWF9CT09MIGJBbHBoYSA9IEhhc0FscGhhKCk7DQotICAgIEZYX0JPT0wgYkFyZ2IgPSBHZXRGb3JtYXQoKSA9PSBGWERJQl9BcmdiID8gVFJVRSA6IEZBTFNFOw0KLSAgICBpZiAoc3JjX2FscGhhID09IDI1NSkgew0KLSAgICAgICAgZm9yIChpbnQgcm93ID0gcmVjdC50b3A7IHJvdyA8IHJlY3QuYm90dG9tOyByb3cgKyspIHsNCi0gICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gbV9wQnVmZmVyICsgcm93ICogbV9QaXRjaCArIHJlY3QubGVmdCAqIEJwcDsNCi0gICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuX2FscGhhID0gbV9wQWxwaGFNYXNrID8gKEZYX0xQQllURSltX3BBbHBoYU1hc2stPkdldFNjYW5saW5lKHJvdykgKyByZWN0LmxlZnQgOiBOVUxMOw0KLSAgICAgICAgICAgIGlmIChkZXN0X3NjYW5fYWxwaGEpIHsNCi0gICAgICAgICAgICAgICAgRlhTWVNfbWVtc2V0OChkZXN0X3NjYW5fYWxwaGEsIDB4ZmYsIHdpZHRoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKEJwcCA9PSA0KSB7DQotICAgICAgICAgICAgICAgIEZYX0RXT1JEKiBzY2FuID0gKEZYX0RXT1JEKilkZXN0X3NjYW47DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICpzY2FuICsrID0gZHN0X2NvbG9yOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiArKyA9IGNvbG9yX3BbMF07DQotICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuICsrID0gY29sb3JfcFsxXTsNCi0gICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gKysgPSBjb2xvcl9wWzJdOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgZm9yIChpbnQgcm93ID0gcmVjdC50b3A7IHJvdyA8IHJlY3QuYm90dG9tOyByb3cgKyspIHsNCi0gICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBtX3BCdWZmZXIgKyByb3cgKiBtX1BpdGNoICsgcmVjdC5sZWZ0ICogQnBwOw0KLSAgICAgICAgaWYgKGJBbHBoYSkgew0KLSAgICAgICAgICAgIGlmIChiQXJnYikgew0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSBkZXN0X3NjYW5bM107DQotICAgICAgICAgICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgRlhBUkdCX1NFVERJQihkZXN0X3NjYW4sIEZYQVJHQl9NQUtFKHNyY19hbHBoYSwgY29sb3JfcFsyXSwgY29sb3JfcFsxXSwgY29sb3JfcFswXSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOw0KLSAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGNvbG9yX3BbMF0sIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBjb2xvcl9wWzFdLCBhbHBoYV9yYXRpbyk7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgY29sb3JfcFsyXSwgYWxwaGFfcmF0aW8pOw0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gZGVzdF9hbHBoYTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW5fYWxwaGEgPSAoRlhfTFBCWVRFKW1fcEFscGhhTWFzay0+R2V0U2NhbmxpbmUocm93KSArIHJlY3QubGVmdDsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gKmRlc3Rfc2Nhbl9hbHBoYTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChiYWNrX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuX2FscGhhKysgPSBzcmNfYWxwaGE7DQotICAgICAgICAgICAgICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIoZGVzdF9zY2FuLCBjb2xvcl9wLCBCcHApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7DQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW5fYWxwaGEgKysgPSBkZXN0X2FscGhhOw0KLSAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsNCi0gICAgICAgICAgICAgICAgICAgIGZvcihpbnQgY29tcHMgPSAwOyBjb21wcyA8IEJwcDsgY29tcHMgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgY29sb3JfcFtjb21wc10sIGFscGhhX3JhdGlvKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgZm9yKGludCBjb21wcyA9IDA7IGNvbXBzIDwgQnBwOyBjb21wcyArKykgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBzID09IDMpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuICsrID0gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGNvbG9yX3BbY29tcHNdLCBzcmNfYWxwaGEpOw0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1DRlhfQml0bWFwQ29tcG9zZXI6OkNGWF9CaXRtYXBDb21wb3NlcigpDQotew0KLSAgICBtX3BTY2FubGluZVYgPSBOVUxMOw0KLSAgICBtX3BTY2FubGluZUFscGhhViA9IE5VTEw7DQotICAgIG1fcENsaXBTY2FuViA9IE5VTEw7DQotICAgIG1fcEFkZENsaXBTY2FuID0gTlVMTDsNCi0gICAgbV9iUmdiQnl0ZU9yZGVyID0gRkFMU0U7DQotICAgIG1fQmxlbmRUeXBlID0gRlhESUJfQkxFTkRfTk9STUFMOw0KLX0NCi1DRlhfQml0bWFwQ29tcG9zZXI6On5DRlhfQml0bWFwQ29tcG9zZXIoKQ0KLXsNCi0gICAgaWYgKG1fcFNjYW5saW5lVikgew0KLSAgICAgICAgRlhfRnJlZShtX3BTY2FubGluZVYpOw0KLSAgICB9DQotICAgIGlmIChtX3BTY2FubGluZUFscGhhVikgew0KLSAgICAgICAgRlhfRnJlZShtX3BTY2FubGluZUFscGhhVik7DQotICAgIH0NCi0gICAgaWYgKG1fcENsaXBTY2FuVikgew0KLSAgICAgICAgRlhfRnJlZShtX3BDbGlwU2NhblYpOw0KLSAgICB9DQotICAgIGlmIChtX3BBZGRDbGlwU2Nhbikgew0KLSAgICAgICAgRlhfRnJlZShtX3BBZGRDbGlwU2Nhbik7DQotICAgIH0NCi19DQotdm9pZCBDRlhfQml0bWFwQ29tcG9zZXI6OkNvbXBvc2UoQ0ZYX0RJQml0bWFwKiBwRGVzdCwgY29uc3QgQ0ZYX0NsaXBSZ24qIHBDbGlwUmduLCBpbnQgYml0bWFwX2FscGhhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIG1hc2tfY29sb3IsIEZYX1JFQ1QmIGRlc3RfcmVjdCwgRlhfQk9PTCBiVmVydGljYWwsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQk9PTCBiRmxpcFgsIEZYX0JPT0wgYkZsaXBZLCBGWF9CT09MIGJSZ2JCeXRlT3JkZXIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0sIGludCBibGVuZF90eXBlKQ0KLXsNCi0gICAgbV9wQml0bWFwID0gcERlc3Q7DQotICAgIG1fcENsaXBSZ24gPSBwQ2xpcFJnbjsNCi0gICAgbV9EZXN0TGVmdCA9IGRlc3RfcmVjdC5sZWZ0Ow0KLSAgICBtX0Rlc3RUb3AgPSBkZXN0X3JlY3QudG9wOw0KLSAgICBtX0Rlc3RXaWR0aCA9IGRlc3RfcmVjdC5XaWR0aCgpOw0KLSAgICBtX0Rlc3RIZWlnaHQgPSBkZXN0X3JlY3QuSGVpZ2h0KCk7DQotICAgIG1fQml0bWFwQWxwaGEgPSBiaXRtYXBfYWxwaGE7DQotICAgIG1fTWFza0NvbG9yID0gbWFza19jb2xvcjsNCi0gICAgbV9wQ2xpcE1hc2sgPSBOVUxMOw0KLSAgICBpZiAocENsaXBSZ24gJiYgcENsaXBSZ24tPkdldFR5cGUoKSAhPSBDRlhfQ2xpcFJnbjo6UmVjdEkpIHsNCi0gICAgICAgIG1fcENsaXBNYXNrID0gcENsaXBSZ24tPkdldE1hc2soKTsNCi0gICAgfQ0KLSAgICBtX2JWZXJ0aWNhbCA9IGJWZXJ0aWNhbDsNCi0gICAgbV9iRmxpcFggPSBiRmxpcFg7DQotICAgIG1fYkZsaXBZID0gYkZsaXBZOw0KLSAgICBtX0FscGhhRmxhZyA9IGFscGhhX2ZsYWc7DQotICAgIG1fcEljY1RyYW5zZm9ybSA9IHBJY2NUcmFuc2Zvcm07DQotICAgIG1fYlJnYkJ5dGVPcmRlciA9IGJSZ2JCeXRlT3JkZXI7DQotICAgIG1fQmxlbmRUeXBlID0gYmxlbmRfdHlwZTsNCi19DQotRlhfQk9PTCBDRlhfQml0bWFwQ29tcG9zZXI6OlNldEluZm8oaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBGWERJQl9Gb3JtYXQgc3JjX2Zvcm1hdCwgRlhfRFdPUkQqIHBTcmNQYWxldHRlKQ0KLXsNCi0gICAgbV9TcmNGb3JtYXQgPSBzcmNfZm9ybWF0Ow0KLSAgICBpZiAoIW1fQ29tcG9zaXRvci5Jbml0KG1fcEJpdG1hcC0+R2V0Rm9ybWF0KCksIHNyY19mb3JtYXQsIHdpZHRoLCBwU3JjUGFsZXR0ZSwgbV9NYXNrQ29sb3IsIEZYRElCX0JMRU5EX05PUk1BTCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BDbGlwTWFzayAhPSBOVUxMIHx8IChtX0JpdG1hcEFscGhhIDwgMjU1KSwgbV9iUmdiQnl0ZU9yZGVyLCBtX0FscGhhRmxhZywgbV9wSWNjVHJhbnNmb3JtKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChtX2JWZXJ0aWNhbCkgew0KLSAgICAgICAgbV9wU2NhbmxpbmVWID0gRlhfQWxsb2MoRlhfQllURSwgbV9wQml0bWFwLT5HZXRCUFAoKSAvIDggKiB3aWR0aCArIDQpOw0KLSAgICAgICAgaWYgKCFtX3BTY2FubGluZVYpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBtX3BDbGlwU2NhblYgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX3BCaXRtYXAtPkdldEhlaWdodCgpKTsNCi0gICAgICAgIGlmICghbV9wQ2xpcFNjYW5WKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fcEJpdG1hcC0+bV9wQWxwaGFNYXNrKSB7DQotICAgICAgICAgICAgbV9wU2NhbmxpbmVBbHBoYVYgPSBGWF9BbGxvYyhGWF9CWVRFLCB3aWR0aCArIDQpOw0KLSAgICAgICAgICAgIGlmICghbV9wU2NhbmxpbmVBbHBoYVYpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAobV9CaXRtYXBBbHBoYSA8IDI1NSkgew0KLSAgICAgICAgbV9wQWRkQ2xpcFNjYW4gPSBGWF9BbGxvYyhGWF9CWVRFLCBtX2JWZXJ0aWNhbCA/IG1fcEJpdG1hcC0+R2V0SGVpZ2h0KCkgOiBtX3BCaXRtYXAtPkdldFdpZHRoKCkpOw0KLSAgICAgICAgaWYgKCFtX3BBZGRDbGlwU2Nhbikgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotdm9pZCBDRlhfQml0bWFwQ29tcG9zZXI6OkRvQ29tcG9zZShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgZGVzdF93aWR0aCwgRlhfTFBDQllURSBjbGlwX3NjYW4sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19leHRyYV9hbHBoYSwgRlhfTFBCWVRFIGRzdF9leHRyYV9hbHBoYSkNCi17DQotICAgIGlmIChtX0JpdG1hcEFscGhhIDwgMjU1KSB7DQotICAgICAgICBpZiAoY2xpcF9zY2FuKSB7DQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXN0X3dpZHRoOyBpICsrKSB7DQotICAgICAgICAgICAgICAgIG1fcEFkZENsaXBTY2FuW2ldID0gY2xpcF9zY2FuW2ldICogbV9CaXRtYXBBbHBoYSAvIDI1NTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIEZYU1lTX21lbXNldDgobV9wQWRkQ2xpcFNjYW4sIG1fQml0bWFwQWxwaGEsIGRlc3Rfd2lkdGgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgY2xpcF9zY2FuID0gbV9wQWRkQ2xpcFNjYW47DQotICAgIH0NCi0gICAgaWYgKG1fU3JjRm9ybWF0ID09IEZYRElCXzhicHBNYXNrKSB7DQotICAgICAgICBtX0NvbXBvc2l0b3IuQ29tcG9zaXRlQnl0ZU1hc2tMaW5lKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIGRlc3Rfd2lkdGgsIGNsaXBfc2NhbiwgZHN0X2V4dHJhX2FscGhhKTsNCi0gICAgfSBlbHNlIGlmICgobV9TcmNGb3JtYXQgJiAweGZmKSA9PSA4KSB7DQotICAgICAgICBtX0NvbXBvc2l0b3IuQ29tcG9zaXRlUGFsQml0bWFwTGluZShkZXN0X3NjYW4sIHNyY19zY2FuLCAwLCBkZXN0X3dpZHRoLCBjbGlwX3NjYW4sIHNyY19leHRyYV9hbHBoYSwgZHN0X2V4dHJhX2FscGhhKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1fQ29tcG9zaXRvci5Db21wb3NpdGVSZ2JCaXRtYXBMaW5lKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIGRlc3Rfd2lkdGgsIGNsaXBfc2Nhbiwgc3JjX2V4dHJhX2FscGhhLCBkc3RfZXh0cmFfYWxwaGEpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0ZYX0JpdG1hcENvbXBvc2VyOjpDb21wb3NlU2NhbmxpbmUoaW50IGxpbmUsIEZYX0xQQ0JZVEUgc2NhbmxpbmUsIEZYX0xQQ0JZVEUgc2Nhbl9leHRyYV9hbHBoYSkNCi17DQotICAgIGlmIChtX2JWZXJ0aWNhbCkgew0KLSAgICAgICAgQ29tcG9zZVNjYW5saW5lVihsaW5lLCBzY2FubGluZSwgc2Nhbl9leHRyYV9hbHBoYSk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhfTFBDQllURSBjbGlwX3NjYW4gPSBOVUxMOw0KLSAgICBpZiAobV9wQ2xpcE1hc2spDQotICAgICAgICBjbGlwX3NjYW4gPSBtX3BDbGlwTWFzay0+R2V0QnVmZmVyKCkgKyAobV9EZXN0VG9wICsgbGluZSAtIG1fcENsaXBSZ24tPkdldEJveCgpLnRvcCkgKg0KLSAgICAgICAgICAgICAgICAgICAgbV9wQ2xpcE1hc2stPkdldFBpdGNoKCkgKyAobV9EZXN0TGVmdCAtIG1fcENsaXBSZ24tPkdldEJveCgpLmxlZnQpOw0KLSAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gKEZYX0xQQllURSltX3BCaXRtYXAtPkdldFNjYW5saW5lKGxpbmUgKyBtX0Rlc3RUb3ApICsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG1fRGVzdExlZnQgKiBtX3BCaXRtYXAtPkdldEJQUCgpIC8gODsNCi0gICAgRlhfTFBCWVRFIGRlc3RfYWxwaGFfc2NhbiA9IG1fcEJpdG1hcC0+bV9wQWxwaGFNYXNrID8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGWF9MUEJZVEUpbV9wQml0bWFwLT5tX3BBbHBoYU1hc2stPkdldFNjYW5saW5lKGxpbmUgKyBtX0Rlc3RUb3ApICsgbV9EZXN0TGVmdCA6IE5VTEw7DQotICAgIERvQ29tcG9zZShkZXN0X3NjYW4sIHNjYW5saW5lLCBtX0Rlc3RXaWR0aCwgY2xpcF9zY2FuLCBzY2FuX2V4dHJhX2FscGhhLCBkZXN0X2FscGhhX3NjYW4pOw0KLX0NCi12b2lkIENGWF9CaXRtYXBDb21wb3Nlcjo6Q29tcG9zZVNjYW5saW5lVihpbnQgbGluZSwgRlhfTFBDQllURSBzY2FubGluZSwgRlhfTFBDQllURSBzY2FuX2V4dHJhX2FscGhhKQ0KLXsNCi0gICAgaW50IGk7DQotICAgIGludCBCcHAgPSBtX3BCaXRtYXAtPkdldEJQUCgpIC8gODsNCi0gICAgaW50IGRlc3RfcGl0Y2ggPSBtX3BCaXRtYXAtPkdldFBpdGNoKCk7DQotICAgIGludCBkZXN0X2FscGhhX3BpdGNoID0gbV9wQml0bWFwLT5tX3BBbHBoYU1hc2sgPyBtX3BCaXRtYXAtPm1fcEFscGhhTWFzay0+R2V0UGl0Y2goKSA6IDA7DQotICAgIGludCBkZXN0X3ggPSBtX0Rlc3RMZWZ0ICsgKG1fYkZsaXBYID8gKG1fRGVzdFdpZHRoIC0gbGluZSAtIDEpIDogbGluZSk7DQotICAgIEZYX0xQQllURSBkZXN0X2J1ZiA9IG1fcEJpdG1hcC0+R2V0QnVmZmVyKCkgKyBkZXN0X3ggKiBCcHAgKyBtX0Rlc3RUb3AgKiBkZXN0X3BpdGNoOw0KLSAgICBGWF9MUEJZVEUgZGVzdF9hbHBoYV9idWYgPSBtX3BCaXRtYXAtPm1fcEFscGhhTWFzayA/DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcEJpdG1hcC0+bV9wQWxwaGFNYXNrLT5HZXRCdWZmZXIoKSArIGRlc3RfeCArIG1fRGVzdFRvcCAqIGRlc3RfYWxwaGFfcGl0Y2ggOiBOVUxMOw0KLSAgICBpZiAobV9iRmxpcFkpIHsNCi0gICAgICAgIGRlc3RfYnVmICs9IGRlc3RfcGl0Y2ggKiAobV9EZXN0SGVpZ2h0IC0gMSk7DQotICAgICAgICBkZXN0X2FscGhhX2J1ZiArPSBkZXN0X2FscGhhX3BpdGNoICogKG1fRGVzdEhlaWdodCAtIDEpOw0KLSAgICB9DQotICAgIGludCB5X3N0ZXAgPSBkZXN0X3BpdGNoOw0KLSAgICBpbnQgeV9hbHBoYV9zdGVwID0gZGVzdF9hbHBoYV9waXRjaDsNCi0gICAgaWYgKG1fYkZsaXBZKSB7DQotICAgICAgICB5X3N0ZXAgPSAteV9zdGVwOw0KLSAgICAgICAgeV9hbHBoYV9zdGVwID0gLXlfYWxwaGFfc3RlcDsNCi0gICAgfQ0KLSAgICBGWF9MUEJZVEUgc3JjX3NjYW4gPSBtX3BTY2FubGluZVY7DQotICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZjsNCi0gICAgZm9yIChpID0gMDsgaSA8IG1fRGVzdEhlaWdodDsgaSArKykgew0KLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBCcHA7IGogKyspIHsNCi0gICAgICAgICAgICAqc3JjX3NjYW4rKyA9IGRlc3Rfc2NhbltqXTsNCi0gICAgICAgIH0NCi0gICAgICAgIGRlc3Rfc2NhbiArPSB5X3N0ZXA7DQotICAgIH0NCi0gICAgRlhfTFBCWVRFIHNyY19hbHBoYV9zY2FuID0gbV9wU2NhbmxpbmVBbHBoYVY7DQotICAgIEZYX0xQQllURSBkZXN0X2FscGhhX3NjYW4gPSBkZXN0X2FscGhhX2J1ZjsNCi0gICAgaWYgKGRlc3RfYWxwaGFfc2Nhbikgew0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG1fRGVzdEhlaWdodDsgaSArKykgew0KLSAgICAgICAgICAgICpzcmNfYWxwaGFfc2NhbisrID0gKmRlc3RfYWxwaGFfc2NhbjsNCi0gICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4gKz0geV9hbHBoYV9zdGVwOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIEZYX0xQQllURSBjbGlwX3NjYW4gPSBOVUxMOw0KLSAgICBpZiAobV9wQ2xpcE1hc2spIHsNCi0gICAgICAgIGNsaXBfc2NhbiA9IG1fcENsaXBTY2FuVjsNCi0gICAgICAgIGludCBjbGlwX3BpdGNoID0gbV9wQ2xpcE1hc2stPkdldFBpdGNoKCk7DQotICAgICAgICBGWF9MUENCWVRFIHNyY19jbGlwID0gbV9wQ2xpcE1hc2stPkdldEJ1ZmZlcigpICsgKG1fRGVzdFRvcCAtIG1fcENsaXBSZ24tPkdldEJveCgpLnRvcCkgKg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBfcGl0Y2ggKyAoZGVzdF94IC0gbV9wQ2xpcFJnbi0+R2V0Qm94KCkubGVmdCk7DQotICAgICAgICBpZiAobV9iRmxpcFkpIHsNCi0gICAgICAgICAgICBzcmNfY2xpcCArPSBjbGlwX3BpdGNoICogKG1fRGVzdEhlaWdodCAtIDEpOw0KLSAgICAgICAgICAgIGNsaXBfcGl0Y2ggPSAtY2xpcF9waXRjaDsNCi0gICAgICAgIH0NCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBtX0Rlc3RIZWlnaHQ7IGkgKyspIHsNCi0gICAgICAgICAgICBjbGlwX3NjYW5baV0gPSAqc3JjX2NsaXA7DQotICAgICAgICAgICAgc3JjX2NsaXAgKz0gY2xpcF9waXRjaDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBEb0NvbXBvc2UobV9wU2NhbmxpbmVWLCBzY2FubGluZSwgbV9EZXN0SGVpZ2h0LCBjbGlwX3NjYW4sIHNjYW5fZXh0cmFfYWxwaGEsIG1fcFNjYW5saW5lQWxwaGFWKTsNCi0gICAgc3JjX3NjYW4gPSBtX3BTY2FubGluZVY7DQotICAgIGRlc3Rfc2NhbiA9IGRlc3RfYnVmOw0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbV9EZXN0SGVpZ2h0OyBpICsrKSB7DQotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IEJwcDsgaiArKykgew0KLSAgICAgICAgICAgIGRlc3Rfc2NhbltqXSA9ICpzcmNfc2NhbisrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdF9zY2FuICs9IHlfc3RlcDsNCi0gICAgfQ0KLSAgICBzcmNfYWxwaGFfc2NhbiA9IG1fcFNjYW5saW5lQWxwaGFWOw0KLSAgICBkZXN0X2FscGhhX3NjYW4gPSBkZXN0X2FscGhhX2J1ZjsNCi0gICAgaWYgKGRlc3RfYWxwaGFfc2Nhbikgew0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG1fRGVzdEhlaWdodDsgaSArKykgew0KLSAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4gPSAqc3JjX2FscGhhX3NjYW4rKzsNCi0gICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4gKz0geV9hbHBoYV9zdGVwOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2UuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaCIKKyNpbmNsdWRlICJkaWJfaW50LmgiCitjb25zdCBGWF9CWVRFIGdfR2FtbWFSYW1wWzI1Nl0gPSB7CisgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAxLCAgIDEsICAgMSwgICAxLCAgIDEsICAgMSwgICAxLCAgIDEsICAgMSwKKyAgICAxLCAgIDEsICAgMiwgICAyLCAgIDIsICAgMiwgICAyLCAgIDIsICAgMiwgICAyLCAgIDMsICAgMywgICAzLCAgIDMsICAgMywgICAzLAorICAgIDQsICAgNCwgICA0LCAgIDQsICAgNCwgICA1LCAgIDUsICAgNSwgICA1LCAgIDYsICAgNiwgICA2LCAgIDYsICAgNywgICA3LCAgIDcsCisgICAgOCwgICA4LCAgIDgsICAgOCwgICA5LCAgIDksICAgOSwgIDEwLCAgMTAsICAxMCwgIDExLCAgMTEsICAxMiwgIDEyLCAgMTIsICAxMywKKyAgICAxMywgIDEzLCAgMTQsICAxNCwgIDE1LCAgMTUsICAxNiwgIDE2LCAgMTcsICAxNywgIDE3LCAgMTgsICAxOCwgIDE5LCAgMTksICAyMCwKKyAgICAyMCwgIDIxLCAgMjIsICAyMiwgIDIzLCAgMjMsICAyNCwgIDI0LCAgMjUsICAyNSwgIDI2LCAgMjcsICAyNywgIDI4LCAgMjksICAyOSwKKyAgICAzMCwgIDMwLCAgMzEsICAzMiwgIDMyLCAgMzMsICAzNCwgIDM1LCAgMzUsICAzNiwgIDM3LCAgMzcsICAzOCwgIDM5LCAgNDAsICA0MSwKKyAgICA0MSwgIDQyLCAgNDMsICA0NCwgIDQ1LCAgNDUsICA0NiwgIDQ3LCAgNDgsICA0OSwgIDUwLCAgNTEsICA1MSwgIDUyLCAgNTMsICA1NCwKKyAgICA1NSwgIDU2LCAgNTcsICA1OCwgIDU5LCAgNjAsICA2MSwgIDYyLCAgNjMsICA2NCwgIDY1LCAgNjYsICA2NywgIDY4LCAgNjksICA3MCwKKyAgICA3MSwgIDcyLCAgNzMsICA3NCwgIDc2LCAgNzcsICA3OCwgIDc5LCAgODAsICA4MSwgIDgyLCAgODQsICA4NSwgIDg2LCAgODcsICA4OCwKKyAgICA5MCwgIDkxLCAgOTIsICA5MywgIDk1LCAgOTYsICA5NywgIDk5LCAxMDAsIDEwMSwgMTAzLCAxMDQsIDEwNSwgMTA3LCAxMDgsIDEwOSwKKyAgICAxMTEsIDExMiwgMTE0LCAxMTUsIDExNiwgMTE4LCAxMTksIDEyMSwgMTIyLCAxMjQsIDEyNSwgMTI3LCAxMjgsIDEzMCwgMTMxLCAxMzMsCisgICAgMTM0LCAxMzYsIDEzOCwgMTM5LCAxNDEsIDE0MiwgMTQ0LCAxNDYsIDE0NywgMTQ5LCAxNTEsIDE1MiwgMTU0LCAxNTYsIDE1NywgMTU5LAorICAgIDE2MSwgMTYzLCAxNjQsIDE2NiwgMTY4LCAxNzAsIDE3MSwgMTczLCAxNzUsIDE3NywgMTc5LCAxODEsIDE4MywgMTg0LCAxODYsIDE4OCwKKyAgICAxOTAsIDE5MiwgMTk0LCAxOTYsIDE5OCwgMjAwLCAyMDIsIDIwNCwgMjA2LCAyMDgsIDIxMCwgMjEyLCAyMTQsIDIxNiwgMjE4LCAyMjAsCisgICAgMjIyLCAyMjQsIDIyNiwgMjI5LCAyMzEsIDIzMywgMjM1LCAyMzcsIDIzOSwgMjQyLCAyNDQsIDI0NiwgMjQ4LCAyNTAsIDI1MywgMjU1LAorfTsKK2NvbnN0IEZYX0JZVEUgZ19HYW1tYUludmVyc2VbMjU2XSA9IHsKKyAgICAwLCAgMTMsICAyMiwgIDI4LCAgMzQsICAzOCwgIDQyLCAgNDYsICA1MCwgIDUzLCAgNTYsICA1OSwgIDYxLCAgNjQsICA2NiwgIDY5LAorICAgIDcxLCAgNzMsICA3NSwgIDc3LCAgNzksICA4MSwgIDgzLCAgODUsICA4NiwgIDg4LCAgOTAsICA5MiwgIDkzLCAgOTUsICA5NiwgIDk4LAorICAgIDk5LCAxMDEsIDEwMiwgMTA0LCAxMDUsIDEwNiwgMTA4LCAxMDksIDExMCwgMTEyLCAxMTMsIDExNCwgMTE1LCAxMTcsIDExOCwgMTE5LAorICAgIDEyMCwgMTIxLCAxMjIsIDEyNCwgMTI1LCAxMjYsIDEyNywgMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsIDEzNiwKKyAgICAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsIDE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDgsIDE0OSwgMTUwLCAxNTEsCisgICAgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwgMTU5LCAxNjAsIDE2MSwgMTYyLCAxNjMsIDE2MywgMTY0LAorICAgIDE2NSwgMTY2LCAxNjcsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcwLCAxNzEsIDE3MiwgMTczLCAxNzMsIDE3NCwgMTc1LCAxNzUsIDE3NiwKKyAgICAxNzcsIDE3OCwgMTc4LCAxNzksIDE4MCwgMTgwLCAxODEsIDE4MiwgMTgyLCAxODMsIDE4NCwgMTg1LCAxODUsIDE4NiwgMTg3LCAxODcsCisgICAgMTg4LCAxODksIDE4OSwgMTkwLCAxOTAsIDE5MSwgMTkyLCAxOTIsIDE5MywgMTk0LCAxOTQsIDE5NSwgMTk2LCAxOTYsIDE5NywgMTk3LAorICAgIDE5OCwgMTk5LCAxOTksIDIwMCwgMjAwLCAyMDEsIDIwMiwgMjAyLCAyMDMsIDIwMywgMjA0LCAyMDUsIDIwNSwgMjA2LCAyMDYsIDIwNywKKyAgICAyMDgsIDIwOCwgMjA5LCAyMDksIDIxMCwgMjEwLCAyMTEsIDIxMiwgMjEyLCAyMTMsIDIxMywgMjE0LCAyMTQsIDIxNSwgMjE1LCAyMTYsCisgICAgMjE2LCAyMTcsIDIxOCwgMjE4LCAyMTksIDIxOSwgMjIwLCAyMjAsIDIyMSwgMjIxLCAyMjIsIDIyMiwgMjIzLCAyMjMsIDIyNCwgMjI0LAorICAgIDIyNSwgMjI2LCAyMjYsIDIyNywgMjI3LCAyMjgsIDIyOCwgMjI5LCAyMjksIDIzMCwgMjMwLCAyMzEsIDIzMSwgMjMyLCAyMzIsIDIzMywKKyAgICAyMzMsIDIzNCwgMjM0LCAyMzUsIDIzNSwgMjM2LCAyMzYsIDIzNywgMjM3LCAyMzgsIDIzOCwgMjM4LCAyMzksIDIzOSwgMjQwLCAyNDAsCisgICAgMjQxLCAyNDEsIDI0MiwgMjQyLCAyNDMsIDI0MywgMjQ0LCAyNDQsIDI0NSwgMjQ1LCAyNDYsIDI0NiwgMjQ2LCAyNDcsIDI0NywgMjQ4LAorICAgIDI0OCwgMjQ5LCAyNDksIDI1MCwgMjUwLCAyNTEsIDI1MSwgMjUxLCAyNTIsIDI1MiwgMjUzLCAyNTMsIDI1NCwgMjU0LCAyNTUsIDI1NSwKK307Citjb25zdCBGWF9CWVRFIF9jb2xvcl9zcXJ0WzI1Nl0gPSB7CisgICAgMHgwMCwgMHgwMywgMHgwNywgMHgwQiwgMHgwRiwgMHgxMiwgMHgxNiwgMHgxOSwgMHgxRCwgMHgyMCwgMHgyMywgMHgyNiwgMHgyOSwgMHgyQywgMHgyRiwgMHgzMiwKKyAgICAweDM1LCAweDM3LCAweDNBLCAweDNDLCAweDNGLCAweDQxLCAweDQzLCAweDQ2LCAweDQ4LCAweDRBLCAweDRDLCAweDRFLCAweDUwLCAweDUyLCAweDU0LCAweDU2LAorICAgIDB4NTcsIDB4NTksIDB4NUIsIDB4NUMsIDB4NUUsIDB4NjAsIDB4NjEsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjcsIDB4NjgsIDB4NjksIDB4NkIsIDB4NkMsIDB4NkQsCisgICAgMHg2RSwgMHg3MCwgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCwgMHg3OSwgMHg3QSwgMHg3QiwgMHg3QywgMHg3RCwgMHg3RSwKKyAgICAweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LCAweDg3LCAweDg4LCAweDg5LCAweDhBLCAweDhCLCAweDhDLCAweDhELCAweDhFLAorICAgIDB4OEYsIDB4OTAsIDB4OTEsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsIDB4OTcsIDB4OTgsIDB4OTksIDB4OUEsIDB4OUIsIDB4OUMsCisgICAgMHg5QywgMHg5RCwgMHg5RSwgMHg5RiwgMHhBMCwgMHhBMCwgMHhBMSwgMHhBMiwgMHhBMywgMHhBNCwgMHhBNCwgMHhBNSwgMHhBNiwgMHhBNywgMHhBNywgMHhBOCwKKyAgICAweEE5LCAweEFBLCAweEFBLCAweEFCLCAweEFDLCAweEFELCAweEFELCAweEFFLCAweEFGLCAweEIwLCAweEIwLCAweEIxLCAweEIyLCAweEIzLCAweEIzLCAweEI0LAorICAgIDB4QjUsIDB4QjUsIDB4QjYsIDB4QjcsIDB4QjcsIDB4QjgsIDB4QjksIDB4QkEsIDB4QkEsIDB4QkIsIDB4QkMsIDB4QkMsIDB4QkQsIDB4QkUsIDB4QkUsIDB4QkYsCisgICAgMHhDMCwgMHhDMCwgMHhDMSwgMHhDMiwgMHhDMiwgMHhDMywgMHhDNCwgMHhDNCwgMHhDNSwgMHhDNiwgMHhDNiwgMHhDNywgMHhDNywgMHhDOCwgMHhDOSwgMHhDOSwKKyAgICAweENBLCAweENCLCAweENCLCAweENDLCAweENDLCAweENELCAweENFLCAweENFLCAweENGLCAweEQwLCAweEQwLCAweEQxLCAweEQxLCAweEQyLCAweEQzLCAweEQzLAorICAgIDB4RDQsIDB4RDQsIDB4RDUsIDB4RDYsIDB4RDYsIDB4RDcsIDB4RDcsIDB4RDgsIDB4RDksIDB4RDksIDB4REEsIDB4REEsIDB4REIsIDB4REMsIDB4REMsIDB4REQsCisgICAgMHhERCwgMHhERSwgMHhERSwgMHhERiwgMHhFMCwgMHhFMCwgMHhFMSwgMHhFMSwgMHhFMiwgMHhFMiwgMHhFMywgMHhFNCwgMHhFNCwgMHhFNSwgMHhFNSwgMHhFNiwKKyAgICAweEU2LCAweEU3LCAweEU3LCAweEU4LCAweEU5LCAweEU5LCAweEVBLCAweEVBLCAweEVCLCAweEVCLCAweEVDLCAweEVDLCAweEVELCAweEVELCAweEVFLCAweEVFLAorICAgIDB4RUYsIDB4RjAsIDB4RjAsIDB4RjEsIDB4RjEsIDB4RjIsIDB4RjIsIDB4RjMsIDB4RjMsIDB4RjQsIDB4RjQsIDB4RjUsIDB4RjUsIDB4RjYsIDB4RjYsIDB4RjcsCisgICAgMHhGNywgMHhGOCwgMHhGOCwgMHhGOSwgMHhGOSwgMHhGQSwgMHhGQSwgMHhGQiwgMHhGQiwgMHhGQywgMHhGQywgMHhGRCwgMHhGRCwgMHhGRSwgMHhGRSwgMHhGRgorfTsKK2ludCBfQkxFTkQoaW50IGJsZW5kX21vZGUsIGludCBiYWNrX2NvbG9yLCBpbnQgc3JjX2NvbG9yKQoreworICAgIHN3aXRjaCAoYmxlbmRfbW9kZSkgeworICAgICAgICBjYXNlIEZYRElCX0JMRU5EX05PUk1BTDoKKyAgICAgICAgICAgIHJldHVybiBzcmNfY29sb3I7CisgICAgICAgIGNhc2UgRlhESUJfQkxFTkRfTVVMVElQTFk6CisgICAgICAgICAgICByZXR1cm4gc3JjX2NvbG9yICogYmFja19jb2xvciAvIDI1NTsKKyAgICAgICAgY2FzZSBGWERJQl9CTEVORF9TQ1JFRU46CisgICAgICAgICAgICByZXR1cm4gc3JjX2NvbG9yICsgYmFja19jb2xvciAtIHNyY19jb2xvciAqIGJhY2tfY29sb3IgLyAyNTU7CisgICAgICAgIGNhc2UgRlhESUJfQkxFTkRfT1ZFUkxBWToKKyAgICAgICAgICAgIHJldHVybiBfQkxFTkQoRlhESUJfQkxFTkRfSEFSRExJR0hULCBzcmNfY29sb3IsIGJhY2tfY29sb3IpOworICAgICAgICBjYXNlIEZYRElCX0JMRU5EX0RBUktFTjoKKyAgICAgICAgICAgIHJldHVybiBzcmNfY29sb3IgPCBiYWNrX2NvbG9yID8gc3JjX2NvbG9yIDogYmFja19jb2xvcjsKKyAgICAgICAgY2FzZSBGWERJQl9CTEVORF9MSUdIVEVOOgorICAgICAgICAgICAgcmV0dXJuIHNyY19jb2xvciA+IGJhY2tfY29sb3IgPyBzcmNfY29sb3IgOiBiYWNrX2NvbG9yOworICAgICAgICBjYXNlIEZYRElCX0JMRU5EX0NPTE9SRE9ER0U6IHsKKyAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbG9yID09IDI1NSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3JjX2NvbG9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gYmFja19jb2xvciAqIDI1NSAvICgyNTUgLSBzcmNfY29sb3IpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPiAyNTUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDI1NTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBGWERJQl9CTEVORF9DT0xPUkJVUk46IHsKKyAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbG9yID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNyY19jb2xvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9ICgyNTUgLSBiYWNrX2NvbG9yKSAqIDI1NSAvIHNyY19jb2xvcjsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID4gMjU1KSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IDI1NTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIDI1NSAtIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBGWERJQl9CTEVORF9IQVJETElHSFQ6CisgICAgICAgICAgICBpZiAoc3JjX2NvbG9yIDwgMTI4KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIChzcmNfY29sb3IgKiBiYWNrX2NvbG9yICogMikgLyAyNTU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gX0JMRU5EKEZYRElCX0JMRU5EX1NDUkVFTiwgYmFja19jb2xvciwgMiAqIHNyY19jb2xvciAtIDI1NSk7CisgICAgICAgIGNhc2UgRlhESUJfQkxFTkRfU09GVExJR0hUOiB7CisgICAgICAgICAgICAgICAgaWYgKHNyY19jb2xvciA8IDEyOCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFja19jb2xvciAtICgyNTUgLSAyICogc3JjX2NvbG9yKSAqIGJhY2tfY29sb3IgKiAoMjU1IC0gYmFja19jb2xvcikgLyAyNTUgLyAyNTU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBiYWNrX2NvbG9yICsgKDIgKiBzcmNfY29sb3IgLSAyNTUpICogKF9jb2xvcl9zcXJ0W2JhY2tfY29sb3JdIC0gYmFja19jb2xvcikgLyAyNTU7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgRlhESUJfQkxFTkRfRElGRkVSRU5DRToKKyAgICAgICAgICAgIHJldHVybiBiYWNrX2NvbG9yIDwgc3JjX2NvbG9yID8gc3JjX2NvbG9yIC0gYmFja19jb2xvciA6IGJhY2tfY29sb3IgLSBzcmNfY29sb3I7CisgICAgICAgIGNhc2UgRlhESUJfQkxFTkRfRVhDTFVTSU9OOgorICAgICAgICAgICAgcmV0dXJuIGJhY2tfY29sb3IgKyBzcmNfY29sb3IgLSAyICogYmFja19jb2xvciAqIHNyY19jb2xvciAvIDI1NTsKKyAgICB9CisgICAgcmV0dXJuIHNyY19jb2xvcjsKK30KK3N0cnVjdCBfUkdCIHsKKyAgICBpbnQgcmVkOworICAgIGludCBncmVlbjsKKyAgICBpbnQgYmx1ZTsKK307CitzdGF0aWMgaW5saW5lIGludCBfTHVtKF9SR0IgY29sb3IpCit7CisgICAgcmV0dXJuIChjb2xvci5yZWQgKiAzMCArIGNvbG9yLmdyZWVuICogNTkgKyBjb2xvci5ibHVlICogMTEpIC8gMTAwOworfQorc3RhdGljIF9SR0IgX0NsaXBDb2xvcihfUkdCIGNvbG9yKQoreworICAgIGludCBsID0gX0x1bShjb2xvcik7CisgICAgaW50IG4gPSBjb2xvci5yZWQ7CisgICAgaWYgKGNvbG9yLmdyZWVuIDwgbikgeworICAgICAgICBuID0gY29sb3IuZ3JlZW47CisgICAgfQorICAgIGlmIChjb2xvci5ibHVlIDwgbikgeworICAgICAgICBuID0gY29sb3IuYmx1ZTsKKyAgICB9CisgICAgaW50IHggPSBjb2xvci5yZWQ7CisgICAgaWYgKGNvbG9yLmdyZWVuID4geCkgeworICAgICAgICB4ID0gY29sb3IuZ3JlZW47CisgICAgfQorICAgIGlmIChjb2xvci5ibHVlID4geCkgeworICAgICAgICB4ID0gY29sb3IuYmx1ZTsKKyAgICB9CisgICAgaWYgKG4gPCAwKSB7CisgICAgICAgIGNvbG9yLnJlZCA9IGwgKyAoKGNvbG9yLnJlZCAtIGwpICogbCAvIChsIC0gbikpOworICAgICAgICBjb2xvci5ncmVlbiA9IGwgKyAoKGNvbG9yLmdyZWVuIC0gbCkgKiBsIC8gKGwgLSBuKSk7CisgICAgICAgIGNvbG9yLmJsdWUgPSBsICsgKChjb2xvci5ibHVlIC0gbCkgKiBsIC8gKGwgLSBuKSk7CisgICAgfQorICAgIGlmICh4ID4gMjU1KSB7CisgICAgICAgIGNvbG9yLnJlZCA9IGwgKyAoKGNvbG9yLnJlZCAtIGwpICogKDI1NSAtIGwpIC8gKHggLSBsKSk7CisgICAgICAgIGNvbG9yLmdyZWVuID0gbCArICgoY29sb3IuZ3JlZW4gLSBsKSAqICgyNTUgLSBsKSAvICh4IC0gbCkpOworICAgICAgICBjb2xvci5ibHVlID0gbCArICgoY29sb3IuYmx1ZSAtIGwpICogKDI1NSAtIGwpIC8gKHggLSBsKSk7CisgICAgfQorICAgIHJldHVybiBjb2xvcjsKK30KK3N0YXRpYyBfUkdCIF9TZXRMdW0oX1JHQiBjb2xvciwgaW50IGwpCit7CisgICAgaW50IGQgPSBsIC0gX0x1bShjb2xvcik7CisgICAgY29sb3IucmVkICs9IGQ7CisgICAgY29sb3IuZ3JlZW4gKz0gZDsKKyAgICBjb2xvci5ibHVlICs9IGQ7CisgICAgcmV0dXJuIF9DbGlwQ29sb3IoY29sb3IpOworfQorc3RhdGljIGludCBfU2F0KF9SR0IgY29sb3IpCit7CisgICAgaW50IG4gPSBjb2xvci5yZWQ7CisgICAgaWYgKGNvbG9yLmdyZWVuIDwgbikgeworICAgICAgICBuID0gY29sb3IuZ3JlZW47CisgICAgfQorICAgIGlmIChjb2xvci5ibHVlIDwgbikgeworICAgICAgICBuID0gY29sb3IuYmx1ZTsKKyAgICB9CisgICAgaW50IHggPSBjb2xvci5yZWQ7CisgICAgaWYgKGNvbG9yLmdyZWVuID4geCkgeworICAgICAgICB4ID0gY29sb3IuZ3JlZW47CisgICAgfQorICAgIGlmIChjb2xvci5ibHVlID4geCkgeworICAgICAgICB4ID0gY29sb3IuYmx1ZTsKKyAgICB9CisgICAgcmV0dXJuIHggLSBuOworfQorc3RhdGljIF9SR0IgX1NldFNhdChfUkdCIGNvbG9yLCBpbnQgcykKK3sKKyAgICBpbnQqIG1heCA9ICZjb2xvci5yZWQ7CisgICAgaW50KiBtaWQgPSAmY29sb3IucmVkOworICAgIGludCogbWluID0gJmNvbG9yLnJlZDsKKyAgICBpZiAoY29sb3IuZ3JlZW4gPiAqbWF4KSB7CisgICAgICAgIG1heCA9ICZjb2xvci5ncmVlbjsKKyAgICB9CisgICAgaWYgKGNvbG9yLmJsdWUgPiAqbWF4KSB7CisgICAgICAgIG1heCA9ICZjb2xvci5ibHVlOworICAgIH0KKyAgICBpZiAoY29sb3IuZ3JlZW4gPCAqbWluKSB7CisgICAgICAgIG1pbiA9ICZjb2xvci5ncmVlbjsKKyAgICB9CisgICAgaWYgKGNvbG9yLmJsdWUgPCAqbWluKSB7CisgICAgICAgIG1pbiA9ICZjb2xvci5ibHVlOworICAgIH0KKyAgICBpZiAoKm1heCA9PSAqbWluKSB7CisgICAgICAgIGNvbG9yLnJlZCA9IDA7CisgICAgICAgIGNvbG9yLmdyZWVuID0gMDsKKyAgICAgICAgY29sb3IuYmx1ZSA9IDA7CisgICAgICAgIHJldHVybiBjb2xvcjsKKyAgICB9CisgICAgaWYgKG1heCA9PSAmY29sb3IucmVkKSB7CisgICAgICAgIGlmIChtaW4gPT0gJmNvbG9yLmdyZWVuKSB7CisgICAgICAgICAgICBtaWQgPSAmY29sb3IuYmx1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1pZCA9ICZjb2xvci5ncmVlbjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobWF4ID09ICZjb2xvci5ncmVlbikgeworICAgICAgICBpZiAobWluID09ICZjb2xvci5yZWQpIHsKKyAgICAgICAgICAgIG1pZCA9ICZjb2xvci5ibHVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWlkID0gJmNvbG9yLnJlZDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtaW4gPT0gJmNvbG9yLmdyZWVuKSB7CisgICAgICAgICAgICBtaWQgPSAmY29sb3IucmVkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWlkID0gJmNvbG9yLmdyZWVuOworICAgICAgICB9CisgICAgfQorICAgIGlmICgqbWF4ID4gKm1pbikgeworICAgICAgICAqbWlkID0gKCptaWQgLSAqbWluKSAqIHMgLyAoKm1heCAtICptaW4pOworICAgICAgICAqbWF4ID0gczsKKyAgICAgICAgKm1pbiA9IDA7CisgICAgfQorICAgIHJldHVybiBjb2xvcjsKK30KK3ZvaWQgX1JHQl9CbGVuZChpbnQgYmxlbmRfbW9kZSwgRlhfTFBDQllURSBzcmNfc2NhbiwgRlhfQllURSogZGVzdF9zY2FuLCBpbnQgcmVzdWx0c1szXSkKK3sKKyAgICBfUkdCIHNyYywgYmFjaywgcmVzdWx0OworICAgIHNyYy5yZWQgPSBzcmNfc2NhblsyXTsKKyAgICBzcmMuZ3JlZW4gPSBzcmNfc2NhblsxXTsKKyAgICBzcmMuYmx1ZSA9IHNyY19zY2FuWzBdOworICAgIGJhY2sucmVkID0gZGVzdF9zY2FuWzJdOworICAgIGJhY2suZ3JlZW4gPSBkZXN0X3NjYW5bMV07CisgICAgYmFjay5ibHVlID0gZGVzdF9zY2FuWzBdOworICAgIHN3aXRjaCAoYmxlbmRfbW9kZSkgeworICAgICAgICBjYXNlIEZYRElCX0JMRU5EX0hVRToKKyAgICAgICAgICAgIHJlc3VsdCA9IF9TZXRMdW0oX1NldFNhdChzcmMsIF9TYXQoYmFjaykpLCBfTHVtKGJhY2spKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZYRElCX0JMRU5EX1NBVFVSQVRJT046CisgICAgICAgICAgICByZXN1bHQgPSBfU2V0THVtKF9TZXRTYXQoYmFjaywgX1NhdChzcmMpKSwgX0x1bShiYWNrKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGWERJQl9CTEVORF9DT0xPUjoKKyAgICAgICAgICAgIHJlc3VsdCA9IF9TZXRMdW0oc3JjLCBfTHVtKGJhY2spKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZYRElCX0JMRU5EX0xVTUlOT1NJVFk6CisgICAgICAgICAgICByZXN1bHQgPSBfU2V0THVtKGJhY2ssIF9MdW0oc3JjKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmVzdWx0c1swXSA9IHJlc3VsdC5ibHVlOworICAgIHJlc3VsdHNbMV0gPSByZXN1bHQuZ3JlZW47CisgICAgcmVzdWx0c1syXSA9IHJlc3VsdC5yZWQ7Cit9CitpbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93X0FyZ2IyTWFzayhGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgcGl4ZWxfY291bnQsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuKQoreworICAgIHNyY19zY2FuICs9IDM7CisgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgeworICAgICAgICBpbnQgc3JjX2FscGhhID0gKnNyY19zY2FuOworICAgICAgICBpZiAoY2xpcF9zY2FuKSB7CisgICAgICAgICAgICBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgfQorICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSAqZGVzdF9zY2FuOworICAgICAgICBpZiAoIWJhY2tfYWxwaGEpIHsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBzcmNfYWxwaGE7CisgICAgICAgIH0gZWxzZSBpZiAoc3JjX2FscGhhKSB7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7CisgICAgICAgIH0KKyAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICBzcmNfc2NhbiArPSA0OworICAgIH0KK30KK3ZvaWQgX0NvbXBvc2l0ZVJvd19SZ2JhMk1hc2soRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfYWxwaGFfc2NhbiwgaW50IHBpeGVsX2NvdW50LCBGWF9MUENCWVRFIGNsaXBfc2NhbikKK3sKKyAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7CisgICAgICAgIGludCBzcmNfYWxwaGEgPSAqc3JjX2FscGhhX3NjYW4rKzsKKyAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfYWxwaGEgLyAyNTU7CisgICAgICAgIH0KKyAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gKmRlc3Rfc2NhbjsKKyAgICAgICAgaWYgKCFiYWNrX2FscGhhKSB7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gc3JjX2FscGhhOworICAgICAgICB9IGVsc2UgaWYgKHNyY19hbHBoYSkgeworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1OworICAgICAgICB9CisgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICB9Cit9Cit2b2lkIF9Db21wb3NpdGVSb3dfUmdiMk1hc2soRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBGWF9MUENCWVRFIGNsaXBfc2NhbikKK3sKKyAgICBpZiAoY2xpcF9zY2FuKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgd2lkdGg7IGkgKyspIHsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9VTklPTigqZGVzdF9zY2FuLCAqY2xpcF9zY2FuKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgIGNsaXBfc2NhbiArKzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEZYU1lTX21lbXNldDgoZGVzdF9zY2FuLCAweGZmLCB3aWR0aCk7CisgICAgfQorfQordm9pZCBfQ29tcG9zaXRlUm93X0FyZ2IyR3JheWEoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHBpeGVsX2NvdW50LCBpbnQgYmxlbmRfdHlwZSwgRlhfTFBDQllURSBjbGlwX3NjYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19hbHBoYV9zY2FuLCBGWF9MUEJZVEUgZHN0X2FscGhhX3NjYW4sIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IE5VTEw7CisgICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsKKyAgICAgICAgcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOworICAgIH0KKyAgICBpZiAoYmxlbmRfdHlwZSkgeworICAgICAgICBGWF9CT09MIGJOb25zZXBhcmFibGVCbGVuZCA9IGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFOworICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcjsKKyAgICAgICAgaWYgKHNyY19hbHBoYV9zY2FuKSB7CisgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gKmRzdF9hbHBoYV9zY2FuOworICAgICAgICAgICAgICAgIGlmIChiYWNrX2FscGhhID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9ICpzcmNfYWxwaGFfc2NhbisrOworICAgICAgICAgICAgICAgICAgICBpZiAoY2xpcF9zY2FuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2FscGhhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocEljY1RyYW5zZm9ybSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gIEZYUkdCMkdSQVkoc3JjX3NjYW5bMl0sIHNyY19zY2FuWzFdLCAqc3JjX3NjYW4pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgKmRzdF9hbHBoYV9zY2FuID0gc3JjX2FscGhhOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICAgICAgICAgZHN0X2FscGhhX3NjYW4gKys7CisgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBGWF9CWVRFIHNyY19hbHBoYSA9ICpzcmNfYWxwaGFfc2NhbisrOworICAgICAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsKKyAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgICAgIGRzdF9hbHBoYV9zY2FuICsrOworICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKmRzdF9hbHBoYV9zY2FuID0gRlhESUJfQUxQSEFfVU5JT04oYmFja19hbHBoYSwgc3JjX2FscGhhKTsKKyAgICAgICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyAoKmRzdF9hbHBoYV9zY2FuKTsKKyAgICAgICAgICAgICAgICBGWF9CWVRFIGdyYXk7CisgICAgICAgICAgICAgICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsKKyAgICAgICAgICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgJmdyYXksIHNyY19zY2FuLCAxKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBncmF5ID0gRlhSR0IyR1JBWShzcmNfc2NhblsyXSwgc3JjX3NjYW5bMV0sICpzcmNfc2Nhbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChiTm9uc2VwYXJhYmxlQmxlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYmxlbmRlZF9jb2xvciA9IGJsZW5kX3R5cGUgPT0gRlhESUJfQkxFTkRfTFVNSU5PU0lUWSA/IGdyYXkgOiAqZGVzdF9zY2FuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBncmF5ID0gYk5vbnNlcGFyYWJsZUJsZW5kID8gYmxlbmRlZF9jb2xvciA6IF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCBncmF5KTsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBkc3RfYWxwaGFfc2NhbisrOworICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgeworICAgICAgICAgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9ICpkc3RfYWxwaGFfc2NhbjsKKyAgICAgICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBzcmNfc2NhblszXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBkZXN0X3NjYW4sIHNyY19zY2FuLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9ICBGWFJHQjJHUkFZKHNyY19zY2FuWzJdLCBzcmNfc2NhblsxXSwgKnNyY19zY2FuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICpkc3RfYWxwaGFfc2NhbiA9IHNyY19hbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgICAgIGRzdF9hbHBoYV9zY2FuICsrOworICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSA0OworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRlhfQllURSBzcmNfYWxwaGEgPSBzcmNfc2NhblszXTsKKyAgICAgICAgICAgICAgICBpZiAoY2xpcF9zY2FuKSB7CisgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdICogc3JjX2FscGhhIC8gMjU1OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgICAgICBkc3RfYWxwaGFfc2NhbiArKzsKKyAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpkc3RfYWxwaGFfc2NhbiA9IEZYRElCX0FMUEhBX1VOSU9OKGJhY2tfYWxwaGEsIHNyY19hbHBoYSk7CisgICAgICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gKCpkc3RfYWxwaGFfc2Nhbik7CisgICAgICAgICAgICAgICAgRlhfQllURSBncmF5OworICAgICAgICAgICAgICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7CisgICAgICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sICZncmF5LCBzcmNfc2NhbiwgMSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZ3JheSA9IEZYUkdCMkdSQVkoc3JjX3NjYW5bMl0sIHNyY19zY2FuWzFdLCAqc3JjX3NjYW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBkc3RfYWxwaGFfc2NhbisrOworICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHNyY19hbHBoYV9zY2FuKSB7CisgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9ICpkc3RfYWxwaGFfc2NhbjsKKyAgICAgICAgICAgIGlmIChiYWNrX2FscGhhID09IDApIHsKKyAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gKnNyY19hbHBoYV9zY2FuKys7CisgICAgICAgICAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocEljY1RyYW5zZm9ybSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgZGVzdF9zY2FuLCBzcmNfc2NhbiwgMSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gIEZYUkdCMkdSQVkoc3JjX3NjYW5bMl0sIHNyY19zY2FuWzFdLCAqc3JjX3NjYW4pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICpkc3RfYWxwaGFfc2NhbiA9IHNyY19hbHBoYTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgIGRzdF9hbHBoYV9zY2FuICsrOworICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9CWVRFIHNyY19hbHBoYSA9ICpzcmNfYWxwaGFfc2NhbisrOworICAgICAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdICogc3JjX2FscGhhIC8gMjU1OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgIGRzdF9hbHBoYV9zY2FuICsrOworICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqZHN0X2FscGhhX3NjYW4gPSBGWERJQl9BTFBIQV9VTklPTihiYWNrX2FscGhhLCBzcmNfYWxwaGEpOworICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gKCpkc3RfYWxwaGFfc2Nhbik7CisgICAgICAgICAgICBGWF9CWVRFIGdyYXk7CisgICAgICAgICAgICBpZiAocEljY1RyYW5zZm9ybSkgeworICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sICZncmF5LCBzcmNfc2NhbiwgMSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGdyYXkgPSBGWFJHQjJHUkFZKHNyY19zY2FuWzJdLCBzcmNfc2NhblsxXSwgKnNyY19zY2FuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBncmF5LCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICBkc3RfYWxwaGFfc2NhbisrOworICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7CisgICAgICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSAqZHN0X2FscGhhX3NjYW47CisgICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWzNdOworICAgICAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsKKyAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzcmNfYWxwaGEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIDEpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9ICBGWFJHQjJHUkFZKHNyY19zY2FuWzJdLCBzcmNfc2NhblsxXSwgKnNyY19zY2FuKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqZHN0X2FscGhhX3NjYW4gPSBzcmNfYWxwaGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBkc3RfYWxwaGFfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSA0OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfQllURSBzcmNfYWxwaGEgPSBzcmNfc2NhblszXTsKKyAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsKKyAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBkc3RfYWxwaGFfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSA0OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKmRzdF9hbHBoYV9zY2FuID0gRlhESUJfQUxQSEFfVU5JT04oYmFja19hbHBoYSwgc3JjX2FscGhhKTsKKyAgICAgICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvICgqZHN0X2FscGhhX3NjYW4pOworICAgICAgICAgICAgRlhfQllURSBncmF5OworICAgICAgICAgICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsKKyAgICAgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCAmZ3JheSwgc3JjX3NjYW4sIDEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBncmF5ID0gRlhSR0IyR1JBWShzcmNfc2NhblsyXSwgc3JjX3NjYW5bMV0sICpzcmNfc2Nhbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgZHN0X2FscGhhX3NjYW4rKzsKKyAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7CisgICAgICAgIH0KK30KK2lubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfQXJnYjJHcmF5KEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCBwaXhlbF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibGVuZF90eXBlLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX2FscGhhX3NjYW4sIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IE5VTEw7CisgICAgRlhfQllURSBncmF5OworICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7CisgICAgICAgIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsKKyAgICB9CisgICAgaWYgKGJsZW5kX3R5cGUpIHsKKyAgICAgICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsKKyAgICAgICAgaW50IGJsZW5kZWRfY29sb3I7CisgICAgICAgIGlmIChzcmNfYWxwaGFfc2NhbikgeworICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgeworICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSAqc3JjX2FscGhhX3NjYW4rKzsKKyAgICAgICAgICAgICAgICBpZiAoY2xpcF9zY2FuKSB7CisgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdICogc3JjX2FscGhhIC8gMjU1OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc3JjX2FscGhhKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCAmZ3JheSwgc3JjX3NjYW4sIDEpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZ3JheSA9IEZYUkdCMkdSQVkoc3JjX3NjYW5bMl0sIHNyY19zY2FuWzFdLCAqc3JjX3NjYW4pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChiTm9uc2VwYXJhYmxlQmxlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kZWRfY29sb3IgPSBibGVuZF90eXBlID09IEZYRElCX0JMRU5EX0xVTUlOT1NJVFkgPyBncmF5IDogKmRlc3Rfc2NhbjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBncmF5ID0gYk5vbnNlcGFyYWJsZUJsZW5kID8gYmxlbmRlZF9jb2xvciA6IF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCBncmF5KTsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGdyYXksIHNyY19hbHBoYSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gc3JjX3NjYW5bM107CisgICAgICAgICAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocEljY1RyYW5zZm9ybSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgJmdyYXksIHNyY19zY2FuLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyYXkgPSBGWFJHQjJHUkFZKHNyY19zY2FuWzJdLCBzcmNfc2NhblsxXSwgKnNyY19zY2FuKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBibGVuZGVkX2NvbG9yID0gYmxlbmRfdHlwZSA9PSBGWERJQl9CTEVORF9MVU1JTk9TSVRZID8gZ3JheSA6ICpkZXN0X3NjYW47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZ3JheSA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3IgOiBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2NhbiwgZ3JheSk7CisgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBncmF5LCBzcmNfYWxwaGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoc3JjX2FscGhhX3NjYW4pIHsKKyAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgeworICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9ICpzcmNfYWxwaGFfc2NhbisrOworICAgICAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdICogc3JjX2FscGhhIC8gMjU1OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNyY19hbHBoYSkgeworICAgICAgICAgICAgICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7CisgICAgICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sICZncmF5LCBzcmNfc2NhbiwgMSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZ3JheSA9IEZYUkdCMkdSQVkoc3JjX3NjYW5bMl0sIHNyY19zY2FuWzFdLCAqc3JjX3NjYW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgc3JjX2FscGhhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgIHNyY19zY2FuICs9IDM7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgeworICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWzNdOworICAgICAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdICogc3JjX2FscGhhIC8gMjU1OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNyY19hbHBoYSkgeworICAgICAgICAgICAgICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7CisgICAgICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sICZncmF5LCBzcmNfc2NhbiwgMSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZ3JheSA9IEZYUkdCMkdSQVkoc3JjX3NjYW5bMl0sIHNyY19zY2FuWzFdLCAqc3JjX3NjYW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgc3JjX2FscGhhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7CisgICAgICAgIH0KK30KK2lubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMkdyYXkoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHNyY19CcHAsIGludCBwaXhlbF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsZW5kX3R5cGUsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBOVUxMOworICAgIEZYX0JZVEUgZ3JheTsKKyAgICBpZiAocEljY1RyYW5zZm9ybSkgeworICAgICAgICBwSWNjTW9kdWxlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCk7CisgICAgfQorICAgIGlmIChibGVuZF90eXBlKSB7CisgICAgICAgIEZYX0JPT0wgYk5vbnNlcGFyYWJsZUJsZW5kID0gYmxlbmRfdHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEU7CisgICAgICAgIGludCBibGVuZGVkX2NvbG9yOworICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7CisgICAgICAgICAgICBpZiAocEljY1RyYW5zZm9ybSkgeworICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sICZncmF5LCBzcmNfc2NhbiwgMSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGdyYXkgPSBGWFJHQjJHUkFZKHNyY19zY2FuWzJdLCBzcmNfc2NhblsxXSwgKnNyY19zY2FuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChiTm9uc2VwYXJhYmxlQmxlbmQpIHsKKyAgICAgICAgICAgICAgICBibGVuZGVkX2NvbG9yID0gYmxlbmRfdHlwZSA9PSBGWERJQl9CTEVORF9MVU1JTk9TSVRZID8gZ3JheSA6ICpkZXN0X3NjYW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBncmF5ID0gYk5vbnNlcGFyYWJsZUJsZW5kID8gYmxlbmRlZF9jb2xvciA6IF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCBncmF5KTsKKyAgICAgICAgICAgIGlmIChjbGlwX3NjYW4gJiYgY2xpcF9zY2FuW2NvbF0gPCAyNTUpIHsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgY2xpcF9zY2FuW2NvbF0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gZ3JheTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7CisgICAgICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7CisgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCAmZ3JheSwgc3JjX3NjYW4sIDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZ3JheSA9IEZYUkdCMkdSQVkoc3JjX3NjYW5bMl0sIHNyY19zY2FuWzFdLCAqc3JjX3NjYW4pOworICAgICAgICB9CisgICAgICAgIGlmIChjbGlwX3NjYW4gJiYgY2xpcF9zY2FuW2NvbF0gPCAyNTUpIHsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBncmF5LCBjbGlwX3NjYW5bY29sXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gZ3JheTsKKyAgICAgICAgfQorICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7CisgICAgfQorfQordm9pZCBfQ29tcG9zaXRlUm93X1JnYjJHcmF5YShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgc3JjX0JwcCwgaW50IHBpeGVsX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxlbmRfdHlwZSwgRlhfTFBDQllURSBjbGlwX3NjYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X2FscGhhX3NjYW4sIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IE5VTEw7CisgICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsKKyAgICAgICAgcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOworICAgIH0KKyAgICBpZiAoYmxlbmRfdHlwZSkgeworICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcjsKKyAgICAgICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsKKyAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgeworICAgICAgICAgICAgaW50IGJhY2tfYWxwaGEgPSAqZGVzdF9hbHBoYV9zY2FuOworICAgICAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7CisgICAgICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIDEpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWFJHQjJHUkFZKHNyY19zY2FuWzJdLCBzcmNfc2NhblsxXSwgKnNyY19zY2FuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbisrOworICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gMjU1OworICAgICAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfQnBwOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuKysgPSBkZXN0X2FscGhhOworICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsKKyAgICAgICAgICAgIEZYX0JZVEUgZ3JheTsKKyAgICAgICAgICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7CisgICAgICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgJmdyYXksIHNyY19zY2FuLCAxKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZ3JheSA9IEZYUkdCMkdSQVkoc3JjX3NjYW5bMl0sIHNyY19zY2FuWzFdLCAqc3JjX3NjYW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgeworICAgICAgICAgICAgICAgIGJsZW5kZWRfY29sb3IgPSBibGVuZF90eXBlID09IEZYRElCX0JMRU5EX0xVTUlOT1NJVFkgPyBncmF5IDogKmRlc3Rfc2NhbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdyYXkgPSBiTm9uc2VwYXJhYmxlQmxlbmQgPyBibGVuZGVkX2NvbG9yIDogX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sIGdyYXkpOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGdyYXksIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7CisgICAgICAgIGludCBzcmNfYWxwaGEgPSAyNTU7CisgICAgICAgIGlmIChjbGlwX3NjYW4pIHsKKyAgICAgICAgICAgIHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdOworICAgICAgICB9CisgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMjU1KSB7CisgICAgICAgICAgICBpZiAocEljY1RyYW5zZm9ybSkgeworICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIDEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhSR0IyR1JBWShzcmNfc2NhblsyXSwgc3JjX3NjYW5bMV0sICpzcmNfc2Nhbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuKysgPSAyNTU7CisgICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfQnBwOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4gKys7CisgICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfQnBwOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaW50IGJhY2tfYWxwaGEgPSAqZGVzdF9hbHBoYV9zY2FuOworICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgKmRlc3RfYWxwaGFfc2NhbisrID0gZGVzdF9hbHBoYTsKKyAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsKKyAgICAgICAgRlhfQllURSBncmF5OworICAgICAgICBpZiAocEljY1RyYW5zZm9ybSkgeworICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgJmdyYXksIHNyY19zY2FuLCAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdyYXkgPSBGWFJHQjJHUkFZKHNyY19zY2FuWzJdLCBzcmNfc2NhblsxXSwgKnNyY19zY2FuKTsKKyAgICAgICAgfQorICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgYWxwaGFfcmF0aW8pOworICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7CisgICAgfQorfQordm9pZCBfQ29tcG9zaXRlUm93X0FyZ2IyQXJnYihGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgcGl4ZWxfY291bnQsIGludCBibGVuZF90eXBlLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3RfYWxwaGFfc2NhbiwgRlhfTFBDQllURSBzcmNfYWxwaGFfc2NhbikKK3sKKyAgICBpbnQgYmxlbmRlZF9jb2xvcnNbM107CisgICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsKKyAgICBpZiAoZGVzdF9hbHBoYV9zY2FuID09IE5VTEwpIHsKKyAgICAgICAgaWYgKHNyY19hbHBoYV9zY2FuID09IE5VTEwpIHsKKyAgICAgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgYmFja19hbHBoYSA9IGRlc3Rfc2NhblszXTsKKyAgICAgICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqIHNyY19zY2FuWzNdIC8gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgRlhBUkdCX1NFVERJQihkZXN0X3NjYW4sIChGWEFSR0JfR0VURElCKHNyY19zY2FuKSAmIDB4ZmZmZmZmKSB8IChzcmNfYWxwaGEgPDwgMjQpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZYQVJHQl9DT1BZKGRlc3Rfc2Nhbiwgc3JjX3NjYW4pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSA0OworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRlhfQllURSBzcmNfYWxwaGE7CisgICAgICAgICAgICAgICAgaWYgKGNsaXBfc2NhbiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzNdOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdICogc3JjX3NjYW5bM10gLyAyNTU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1OworICAgICAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IGRlc3RfYWxwaGE7CisgICAgICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsKKyAgICAgICAgICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX3NjYW4sIGRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2xvciA9IDA7IGNvbG9yIDwgMzsgY29sb3IgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJsZW5kX3R5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBibGVuZGVkID0gYk5vbnNlcGFyYWJsZUJsZW5kID8gYmxlbmRlZF9jb2xvcnNbY29sb3JdIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sICpzcmNfc2Nhbik7CisgICAgICAgICAgICAgICAgICAgICAgICBibGVuZGVkID0gRlhESUJfQUxQSEFfTUVSR0UoKnNyY19zY2FuLCBibGVuZGVkLCBiYWNrX2FscGhhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgKnNyY19zY2FuLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgeworICAgICAgICAgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9IGRlc3Rfc2NhblszXTsKKyAgICAgICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqICgqc3JjX2FscGhhX3NjYW4pIC8gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgRlhBUkdCX1NFVERJQihkZXN0X3NjYW4sIEZYQVJHQl9NQUtFKChzcmNfYWxwaGEgPDwgMjQpLCBzcmNfc2NhblsyXSwgc3JjX3NjYW5bMV0sICpzcmNfc2NhbikpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgRlhBUkdCX1NFVERJQihkZXN0X3NjYW4sIEZYQVJHQl9NQUtFKCgqc3JjX2FscGhhX3NjYW4gPDwgMjQpLCBzcmNfc2NhblsyXSwgc3JjX3NjYW5bMV0sICpzcmNfc2NhbikpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGFfc2NhbiArKzsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEZYX0JZVEUgc3JjX2FscGhhOworICAgICAgICAgICAgICAgIGlmIChjbGlwX3NjYW4gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSAqc3JjX2FscGhhX3NjYW4gKys7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiAoKnNyY19hbHBoYV9zY2FuICsrKSAvIDI1NTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzNdID0gZGVzdF9hbHBoYTsKKyAgICAgICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOworICAgICAgICAgICAgICAgIGlmIChiTm9uc2VwYXJhYmxlQmxlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9ycyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbG9yID0gMDsgY29sb3IgPCAzOyBjb2xvciArKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoYmxlbmRfdHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBiTm9uc2VwYXJhYmxlQmxlbmQgPyBibGVuZGVkX2NvbG9yc1tjb2xvcl0gOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2NhbiwgKnNyY19zY2FuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kZWQgPSBGWERJQl9BTFBIQV9NRVJHRSgqc3JjX3NjYW4sIGJsZW5kZWQsIGJhY2tfYWxwaGEpOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWQsIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCAqc3JjX3NjYW4sIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3JjX2FscGhhX3NjYW4pIHsKKyAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSAqZGVzdF9hbHBoYV9zY2FuOworICAgICAgICAgICAgICAgIGlmIChiYWNrX2FscGhhID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdICogKCpzcmNfYWxwaGFfc2NhbikgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuID0gc3JjX2FscGhhOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiA9ICpzcmNfYWxwaGFfc2NhbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4gKys7CisgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYV9zY2FuICsrOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRlhfQllURSBzcmNfYWxwaGE7CisgICAgICAgICAgICAgICAgaWYgKGNsaXBfc2NhbiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9ICpzcmNfYWxwaGFfc2NhbiArKzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqICgqc3JjX2FscGhhX3NjYW4gKyspIC8gMjU1OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDM7CisgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7CisgICAgICAgICAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1OworICAgICAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4gKysgPSBkZXN0X2FscGhhOworICAgICAgICAgICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvIGRlc3RfYWxwaGE7CisgICAgICAgICAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgeworICAgICAgICAgICAgICAgICAgICBfUkdCX0JsZW5kKGJsZW5kX3R5cGUsIHNyY19zY2FuLCBkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChibGVuZF90eXBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxlbmRlZCA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3JzW2NvbG9yXSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCAqc3JjX3NjYW4pOworICAgICAgICAgICAgICAgICAgICAgICAgYmxlbmRlZCA9IEZYRElCX0FMUEhBX01FUkdFKCpzcmNfc2NhbiwgYmxlbmRlZCwgYmFja19hbHBoYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZCwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sICpzcmNfc2NhbiwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgeworICAgICAgICAgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9ICpkZXN0X2FscGhhX3NjYW47CisgICAgICAgICAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2xpcF9zY2FuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfc2NhblszXSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4gPSBzcmNfYWxwaGE7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuID0gc3JjX3NjYW5bM107CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVzdF9hbHBoYV9zY2FuICsrOworICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEZYX0JZVEUgc3JjX2FscGhhOworICAgICAgICAgICAgICAgIGlmIChjbGlwX3NjYW4gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblszXTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqIHNyY19zY2FuWzNdIC8gMjU1OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDM7CisgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1OworICAgICAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4rKyA9IGRlc3RfYWxwaGE7CisgICAgICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsKKyAgICAgICAgICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX3NjYW4sIGRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2xvciA9IDA7IGNvbG9yIDwgMzsgY29sb3IgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJsZW5kX3R5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBibGVuZGVkID0gYk5vbnNlcGFyYWJsZUJsZW5kID8gYmxlbmRlZF9jb2xvcnNbY29sb3JdIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sICpzcmNfc2Nhbik7CisgICAgICAgICAgICAgICAgICAgICAgICBibGVuZGVkID0gRlhESUJfQUxQSEFfTUVSR0UoKnNyY19zY2FuLCBibGVuZGVkLCBiYWNrX2FscGhhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgKnNyY19zY2FuLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3JjX3NjYW4gKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9Cit2b2lkIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfQmxlbmRfTm9DbGlwKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgaW50IGJsZW5kX3R5cGUsIGludCBzcmNfQnBwLAorICAgICAgICBGWF9MUEJZVEUgZGVzdF9hbHBoYV9zY2FuKQoreworICAgIGludCBibGVuZGVkX2NvbG9yc1szXTsKKyAgICBGWF9CT09MIGJOb25zZXBhcmFibGVCbGVuZCA9IGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFOworICAgIGludCBzcmNfZ2FwID0gc3JjX0JwcCAtIDM7CisgICAgaWYgKGRlc3RfYWxwaGFfc2NhbiA9PSBOVUxMKSB7CisgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9IGRlc3Rfc2NhblszXTsKKyAgICAgICAgICAgIGlmIChiYWNrX2FscGhhID09IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoc3JjX0JwcCA9PSA0KSB7CisgICAgICAgICAgICAgICAgICAgIEZYQVJHQl9TRVRESUIoZGVzdF9zY2FuLCAweGZmMDAwMDAwIHwgRlhBUkdCX0dFVERJQihzcmNfc2NhbikpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIEZYQVJHQl9TRVRESUIoZGVzdF9zY2FuLCBGWEFSR0JfTUFLRSgweGZmLCBzcmNfc2NhblsyXSwgc3JjX3NjYW5bMV0sIHNyY19zY2FuWzBdKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXN0X3NjYW5bM10gPSAweGZmOworICAgICAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgeworICAgICAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX3NjYW4sIGRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7CisgICAgICAgICAgICAgICAgaW50IHNyY19jb2xvciA9ICpzcmNfc2NhbjsKKyAgICAgICAgICAgICAgICBpbnQgYmxlbmRlZCA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3JzW2NvbG9yXSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX2NvbG9yKTsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0Uoc3JjX2NvbG9yLCBibGVuZGVkLCBiYWNrX2FscGhhKTsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgc3JjX3NjYW4gKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfZ2FwOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gKmRlc3RfYWxwaGFfc2NhbjsKKyAgICAgICAgICAgIGlmIChiYWNrX2FscGhhID09IDApIHsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuKysgPSAweGZmOworICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19nYXA7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuKysgPSAweGZmOworICAgICAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgeworICAgICAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX3NjYW4sIGRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7CisgICAgICAgICAgICAgICAgaW50IHNyY19jb2xvciA9ICpzcmNfc2NhbjsKKyAgICAgICAgICAgICAgICBpbnQgYmxlbmRlZCA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3JzW2NvbG9yXSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX2NvbG9yKTsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0Uoc3JjX2NvbG9yLCBibGVuZGVkLCBiYWNrX2FscGhhKTsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgc3JjX3NjYW4gKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfZ2FwOworICAgICAgICB9CisgICAgfQorfQoraW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd19SZ2IyQXJnYl9CbGVuZF9DbGlwKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgaW50IGJsZW5kX3R5cGUsIGludCBzcmNfQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwKKyAgICAgICAgRlhfTFBCWVRFIGRlc3RfYWxwaGFfc2NhbikKK3sKKyAgICBpbnQgYmxlbmRlZF9jb2xvcnNbM107CisgICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsKKyAgICBpbnQgc3JjX2dhcCA9IHNyY19CcHAgLSAzOworICAgIGlmIChkZXN0X2FscGhhX3NjYW4gPT0gTlVMTCkgeworICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gKmNsaXBfc2NhbiArKzsKKyAgICAgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9IGRlc3Rfc2NhblszXTsKKyAgICAgICAgICAgIGlmIChiYWNrX2FscGhhID09IDApIHsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfZ2FwOworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IGRlc3RfYWxwaGE7CisgICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOworICAgICAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgeworICAgICAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX3NjYW4sIGRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7CisgICAgICAgICAgICAgICAgaW50IHNyY19jb2xvciA9ICpzcmNfc2NhbjsKKyAgICAgICAgICAgICAgICBpbnQgYmxlbmRlZCA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3JzW2NvbG9yXSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX2NvbG9yKTsKKyAgICAgICAgICAgICAgICBibGVuZGVkID0gRlhESUJfQUxQSEFfTUVSR0Uoc3JjX2NvbG9yLCBibGVuZGVkLCBiYWNrX2FscGhhKTsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZCwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19nYXA7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gKmNsaXBfc2NhbiArKzsKKyAgICAgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9ICpkZXN0X2FscGhhX3NjYW47CisgICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7CisgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7CisgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7CisgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX2dhcDsKKyAgICAgICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4rKzsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSAzOworICAgICAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbisrOworICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4rKyA9IGRlc3RfYWxwaGE7CisgICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOworICAgICAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgeworICAgICAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX3NjYW4sIGRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7CisgICAgICAgICAgICAgICAgaW50IHNyY19jb2xvciA9ICpzcmNfc2NhbjsKKyAgICAgICAgICAgICAgICBpbnQgYmxlbmRlZCA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3JzW2NvbG9yXSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX2NvbG9yKTsKKyAgICAgICAgICAgICAgICBibGVuZGVkID0gRlhESUJfQUxQSEFfTUVSR0Uoc3JjX2NvbG9yLCBibGVuZGVkLCBiYWNrX2FscGhhKTsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZCwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19nYXA7CisgICAgICAgIH0KKyAgICB9Cit9CitpbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93X1JnYjJBcmdiX05vQmxlbmRfQ2xpcChGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBzcmNfQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwKKyAgICAgICAgRlhfTFBCWVRFIGRlc3RfYWxwaGFfc2NhbikKK3sKKyAgICBpbnQgc3JjX2dhcCA9IHNyY19CcHAgLSAzOworICAgIGlmIChkZXN0X2FscGhhX3NjYW4gPT0gTlVMTCkgeworICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF07CisgICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDI1NSkgeworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IDI1NTsKKyAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfZ2FwOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX0JwcDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBiYWNrX2FscGhhID0gZGVzdF9zY2FuWzNdOworICAgICAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7CisgICAgICAgICAgICBkZXN0X3NjYW5bM10gPSBkZXN0X2FscGhhOworICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsKKyAgICAgICAgICAgIGZvciAoaW50IGNvbG9yID0gMDsgY29sb3IgPCAzOyBjb2xvciArKykgeworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCAqc3JjX3NjYW4sIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgc3JjX3NjYW4gKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfZ2FwOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdOworICAgICAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuKysgPSAyNTU7CisgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX2dhcDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSAzOworICAgICAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfQnBwOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGJhY2tfYWxwaGEgPSAqZGVzdF9hbHBoYV9zY2FuOworICAgICAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuICsrID0gZGVzdF9hbHBoYTsKKyAgICAgICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvIGRlc3RfYWxwaGE7CisgICAgICAgICAgICBmb3IgKGludCBjb2xvciA9IDA7IGNvbG9yIDwgMzsgY29sb3IgKyspIHsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgKnNyY19zY2FuLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX2dhcDsKKyAgICAgICAgfQorICAgIH0KK30KK2lubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfTm9CbGVuZF9Ob0NsaXAoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgc3JjX0JwcCwKKyAgICAgICAgRlhfTFBCWVRFIGRlc3RfYWxwaGFfc2NhbikKK3sKKyAgICBpZiAoZGVzdF9hbHBoYV9zY2FuID09IE5VTEwpIHsKKyAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgaWYgKHNyY19CcHAgPT0gNCkgeworICAgICAgICAgICAgICAgIEZYQVJHQl9TRVRESUIoZGVzdF9zY2FuLCAweGZmMDAwMDAwIHwgRlhBUkdCX0dFVERJQihzcmNfc2NhbikpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBGWEFSR0JfU0VURElCKGRlc3Rfc2NhbiwgRlhBUkdCX01BS0UoMHhmZiwgc3JjX3NjYW5bMl0sIHNyY19zY2FuWzFdLCBzcmNfc2NhblswXSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfQnBwOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IHNyY19nYXAgPSBzcmNfQnBwIC0gMzsKKyAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7CisgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOworICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbisrID0gMHhmZjsKKyAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19nYXA7CisgICAgICAgIH0KKyAgICB9Cit9CitpbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93X0FyZ2IyUmdiX0JsZW5kKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgaW50IGJsZW5kX3R5cGUsIGludCBkZXN0X0JwcCwgRlhfTFBDQllURSBjbGlwX3NjYW4sCisgICAgICAgIEZYX0xQQ0JZVEUgc3JjX2FscGhhX3NjYW4pCit7CisgICAgaW50IGJsZW5kZWRfY29sb3JzWzNdOworICAgIEZYX0JPT0wgYk5vbnNlcGFyYWJsZUJsZW5kID0gYmxlbmRfdHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEU7CisgICAgaW50IGRlc3RfZ2FwID0gZGVzdF9CcHAgLSAzOworICAgIGlmIChzcmNfYWxwaGFfc2NhbiA9PSBOVUxMKSB7CisgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgIEZYX0JZVEUgc3JjX2FscGhhOworICAgICAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzNdICogKCpjbGlwX3NjYW4rKykgLyAyNTU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzNdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfQnBwOworICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7CisgICAgICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9ycyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBjb2xvciA9IDA7IGNvbG9yIDwgMzsgY29sb3IgKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgYmFja19jb2xvciA9ICpkZXN0X3NjYW47CisgICAgICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBiTm9uc2VwYXJhYmxlQmxlbmQgPyBibGVuZGVkX2NvbG9yc1tjb2xvcl0gOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JMRU5EKGJsZW5kX3R5cGUsIGJhY2tfY29sb3IsICpzcmNfc2Nhbik7CisgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKGJhY2tfY29sb3IsIGJsZW5kZWQsIHNyY19hbHBoYSk7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfZ2FwOworICAgICAgICAgICAgc3JjX3NjYW4gKys7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICBGWF9CWVRFIHNyY19hbHBoYTsKKyAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsKKyAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSAoKnNyY19hbHBoYV9zY2FuKyspICogKCpjbGlwX3NjYW4rKykgLyAyNTU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9ICpzcmNfYWxwaGFfc2NhbisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfQnBwOworICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7CisgICAgICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9ycyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBjb2xvciA9IDA7IGNvbG9yIDwgMzsgY29sb3IgKyspIHsKKyAgICAgICAgICAgICAgICBpbnQgYmFja19jb2xvciA9ICpkZXN0X3NjYW47CisgICAgICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBiTm9uc2VwYXJhYmxlQmxlbmQgPyBibGVuZGVkX2NvbG9yc1tjb2xvcl0gOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JMRU5EKGJsZW5kX3R5cGUsIGJhY2tfY29sb3IsICpzcmNfc2Nhbik7CisgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKGJhY2tfY29sb3IsIGJsZW5kZWQsIHNyY19hbHBoYSk7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfZ2FwOworICAgICAgICB9CisgICAgfQorfQoraW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd19BcmdiMlJnYl9Ob0JsZW5kKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgaW50IGRlc3RfQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwKKyAgICAgICAgRlhfTFBDQllURSBzcmNfYWxwaGFfc2NhbikKK3sKKyAgICBpbnQgZGVzdF9nYXAgPSBkZXN0X0JwcCAtIDM7CisgICAgaWYgKHNyY19hbHBoYV9zY2FuID09IE5VTEwpIHsKKyAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgRlhfQllURSBzcmNfYWxwaGE7CisgICAgICAgICAgICBpZiAoY2xpcF9zY2FuKSB7CisgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bM10gKiAoKmNsaXBfc2NhbisrKSAvIDI1NTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bM107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDI1NSkgeworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X2dhcDsKKyAgICAgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X0JwcDsKKyAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSA0OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7CisgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sICpzcmNfc2Nhbiwgc3JjX2FscGhhKTsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgc3JjX3NjYW4gKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9nYXA7CisgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgIEZYX0JZVEUgc3JjX2FscGhhOworICAgICAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9ICgqc3JjX2FscGhhX3NjYW4rKykgKiAoKmNsaXBfc2NhbisrKSAvIDI1NTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gKnNyY19hbHBoYV9zY2FuKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDI1NSkgeworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X2dhcDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X0JwcDsKKyAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7CisgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sICpzcmNfc2Nhbiwgc3JjX2FscGhhKTsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgc3JjX3NjYW4gKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9nYXA7CisgICAgICAgIH0KKyAgICB9Cit9CitpbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93X1JnYjJSZ2JfQmxlbmRfTm9DbGlwKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgaW50IGJsZW5kX3R5cGUsIGludCBkZXN0X0JwcCwgaW50IHNyY19CcHApCit7CisgICAgaW50IGJsZW5kZWRfY29sb3JzWzNdOworICAgIEZYX0JPT0wgYk5vbnNlcGFyYWJsZUJsZW5kID0gYmxlbmRfdHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEU7CisgICAgaW50IGRlc3RfZ2FwID0gZGVzdF9CcHAgLSAzOworICAgIGludCBzcmNfZ2FwID0gc3JjX0JwcCAtIDM7CisgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7CisgICAgICAgICAgICBfUkdCX0JsZW5kKGJsZW5kX3R5cGUsIHNyY19zY2FuLCBkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBjb2xvciA9IDA7IGNvbG9yIDwgMzsgY29sb3IgKyspIHsKKyAgICAgICAgICAgIGludCBiYWNrX2NvbG9yID0gKmRlc3Rfc2NhbjsKKyAgICAgICAgICAgIGludCBzcmNfY29sb3IgPSAqc3JjX3NjYW47CisgICAgICAgICAgICBpbnQgYmxlbmRlZCA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3JzW2NvbG9yXSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgIF9CTEVORChibGVuZF90eXBlLCBiYWNrX2NvbG9yLCBzcmNfY29sb3IpOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IGJsZW5kZWQ7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgfQorICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9nYXA7CisgICAgICAgIHNyY19zY2FuICs9IHNyY19nYXA7CisgICAgfQorfQoraW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd19SZ2IyUmdiX0JsZW5kX0NsaXAoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgYmxlbmRfdHlwZSwgaW50IGRlc3RfQnBwLCBpbnQgc3JjX0JwcCwgRlhfTFBDQllURSBjbGlwX3NjYW4pCit7CisgICAgaW50IGJsZW5kZWRfY29sb3JzWzNdOworICAgIEZYX0JPT0wgYk5vbnNlcGFyYWJsZUJsZW5kID0gYmxlbmRfdHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEU7CisgICAgaW50IGRlc3RfZ2FwID0gZGVzdF9CcHAgLSAzOworICAgIGludCBzcmNfZ2FwID0gc3JjX0JwcCAtIDM7CisgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICBGWF9CWVRFIHNyY19hbHBoYSA9ICpjbGlwX3NjYW4gKys7CisgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfQnBwOworICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX0JwcDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChiTm9uc2VwYXJhYmxlQmxlbmQpIHsKKyAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX3NjYW4sIGRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnMpOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGNvbG9yID0gMDsgY29sb3IgPCAzOyBjb2xvciArKykgeworICAgICAgICAgICAgaW50IHNyY19jb2xvciA9ICpzcmNfc2NhbjsKKyAgICAgICAgICAgIGludCBiYWNrX2NvbG9yID0gKmRlc3Rfc2NhbjsKKyAgICAgICAgICAgIGludCBibGVuZGVkID0gYk5vbnNlcGFyYWJsZUJsZW5kID8gYmxlbmRlZF9jb2xvcnNbY29sb3JdIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX0JMRU5EKGJsZW5kX3R5cGUsIGJhY2tfY29sb3IsIHNyY19jb2xvcik7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoYmFja19jb2xvciwgYmxlbmRlZCwgc3JjX2FscGhhKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgIHNyY19zY2FuICsrOworICAgICAgICB9CisgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X2dhcDsKKyAgICAgICAgc3JjX3NjYW4gKz0gc3JjX2dhcDsKKyAgICB9Cit9CitpbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93X1JnYjJSZ2JfTm9CbGVuZF9Ob0NsaXAoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgZGVzdF9CcHAsIGludCBzcmNfQnBwKQoreworICAgIGlmIChkZXN0X0JwcCA9PSBzcmNfQnBwKSB7CisgICAgICAgIEZYU1lTX21lbWNweTMyKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoICogZGVzdF9CcHApOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgZGVzdF9zY2FuWzBdID0gc3JjX3NjYW5bMF07CisgICAgICAgIGRlc3Rfc2NhblsxXSA9IHNyY19zY2FuWzFdOworICAgICAgICBkZXN0X3NjYW5bMl0gPSBzcmNfc2NhblsyXTsKKyAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfQnBwOworICAgICAgICBzcmNfc2NhbiArPSBzcmNfQnBwOworICAgIH0KK30KK2lubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9Ob0JsZW5kX0NsaXAoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgZGVzdF9CcHAsIGludCBzcmNfQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbikKK3sKKyAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgIGludCBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXTsKKyAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IHNyY19zY2FuWzBdOworICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gc3JjX3NjYW5bMV07CisgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBzcmNfc2NhblsyXTsKKyAgICAgICAgfSBlbHNlIGlmIChzcmNfYWxwaGEpIHsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCAqc3JjX3NjYW4sIHNyY19hbHBoYSk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCAqc3JjX3NjYW4sIHNyY19hbHBoYSk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCAqc3JjX3NjYW4sIHNyY19hbHBoYSk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9CcHAgLSAyOworICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX0JwcCAtIDI7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9CcHA7CisgICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7CisgICAgfQorfQordm9pZCBfQ29tcG9zaXRlUm93X0FyZ2IyQXJnYl9UcmFuc2Zvcm0oRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHBpeGVsX2NvdW50LCBpbnQgYmxlbmRfdHlwZSwgRlhfTFBDQllURSBjbGlwX3NjYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9hbHBoYV9zY2FuLCBGWF9MUENCWVRFIHNyY19hbHBoYV9zY2FuLCBGWF9MUEJZVEUgc3JjX2NhY2hlX3NjYW4sIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgRlhfTFBCWVRFIGRwID0gc3JjX2NhY2hlX3NjYW47CisgICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOworICAgIGlmIChzcmNfYWxwaGFfc2NhbikgeworICAgICAgICBpZiAoZGVzdF9hbHBoYV9zY2FuID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBkcCwgc3JjX3NjYW4sIDEpOworICAgICAgICAgICAgICAgIGRwWzNdID0gKnNyY19hbHBoYV9zY2FuKys7CisgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsKKyAgICAgICAgICAgICAgICBkcCArPSA0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3JjX2FscGhhX3NjYW4gPSBOVUxMOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgZHAsIHNyY19zY2FuLCBwaXhlbF9jb3VudCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoZGVzdF9hbHBoYV9zY2FuID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBkcCwgc3JjX3NjYW4sIDEpOworICAgICAgICAgICAgICAgIGRwWzNdID0gc3JjX3NjYW5bM107CisgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsKKyAgICAgICAgICAgICAgICBkcCArPSA0OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IGJsZW5kZWRfY29sb3JzWzNdOworICAgICAgICAgICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsKKyAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBzcmNfY2FjaGVfc2Nhbiwgc3JjX3NjYW4sIDEpOworICAgICAgICAgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9ICpkZXN0X2FscGhhX3NjYW47CisgICAgICAgICAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2xpcF9zY2FuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfc2NhblszXSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4gPSBzcmNfYWxwaGE7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX2NhY2hlX3NjYW4rKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfY2FjaGVfc2NhbisrOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19jYWNoZV9zY2FuKys7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuID0gc3JjX3NjYW5bM107CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX2NhY2hlX3NjYW4rKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfY2FjaGVfc2NhbisrOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19jYWNoZV9zY2FuKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVzdF9hbHBoYV9zY2FuICsrOworICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSA0OworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRlhfQllURSBzcmNfYWxwaGE7CisgICAgICAgICAgICAgICAgaWYgKGNsaXBfc2NhbiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzNdOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdICogc3JjX3NjYW5bM10gLyAyNTU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICBzcmNfY2FjaGVfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4gKys7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuICsrID0gZGVzdF9hbHBoYTsKKyAgICAgICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOworICAgICAgICAgICAgICAgIGlmIChiTm9uc2VwYXJhYmxlQmxlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfY2FjaGVfc2NhbiwgZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9ycyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbG9yID0gMDsgY29sb3IgPCAzOyBjb2xvciArKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoYmxlbmRfdHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBiTm9uc2VwYXJhYmxlQmxlbmQgPyBibGVuZGVkX2NvbG9yc1tjb2xvcl0gOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2NhbiwgKnNyY19jYWNoZV9zY2FuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kZWQgPSBGWERJQl9BTFBIQV9NRVJHRSgqc3JjX2NhY2hlX3NjYW4sIGJsZW5kZWQsIGJhY2tfYWxwaGEpOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWQsIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCAqc3JjX2NhY2hlX3NjYW4sIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgICAgIHNyY19jYWNoZV9zY2FuICsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBfQ29tcG9zaXRlUm93X0FyZ2IyQXJnYihkZXN0X3NjYW4sIHNyY19jYWNoZV9zY2FuLCBwaXhlbF9jb3VudCwgYmxlbmRfdHlwZSwgY2xpcF9zY2FuLCBkZXN0X2FscGhhX3NjYW4sIHNyY19hbHBoYV9zY2FuKTsKK30KK3ZvaWQgX0NvbXBvc2l0ZVJvd19SZ2IyQXJnYl9CbGVuZF9Ob0NsaXBfVHJhbnNmb3JtKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgaW50IGJsZW5kX3R5cGUsIGludCBzcmNfQnBwLAorICAgICAgICBGWF9MUEJZVEUgZGVzdF9hbHBoYV9zY2FuLCBGWF9MUEJZVEUgc3JjX2NhY2hlX3NjYW4sIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOworICAgIGlmIChzcmNfQnBwID09IDMpIHsKKyAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgc3JjX2NhY2hlX3NjYW4sIHNyY19zY2FuLCB3aWR0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgRlhfTFBCWVRFIGRwID0gc3JjX2NhY2hlX3NjYW47CisgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGRwLCBzcmNfc2NhbiwgMSk7CisgICAgICAgICAgICBzcmNfc2NhbiArPSA0OworICAgICAgICAgICAgZHAgKz0gMzsKKyAgICAgICAgfQorICAgIH0KKyAgICBfQ29tcG9zaXRlUm93X1JnYjJBcmdiX0JsZW5kX05vQ2xpcChkZXN0X3NjYW4sIHNyY19jYWNoZV9zY2FuLCB3aWR0aCwgYmxlbmRfdHlwZSwgMywgZGVzdF9hbHBoYV9zY2FuKTsKK30KK2lubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfQmxlbmRfQ2xpcF9UcmFuc2Zvcm0oRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgYmxlbmRfdHlwZSwgaW50IHNyY19CcHAsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLAorICAgICAgICBGWF9MUEJZVEUgZGVzdF9hbHBoYV9zY2FuLCBGWF9MUEJZVEUgc3JjX2NhY2hlX3NjYW4sIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOworICAgIGlmIChzcmNfQnBwID09IDMpIHsKKyAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgc3JjX2NhY2hlX3NjYW4sIHNyY19zY2FuLCB3aWR0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgRlhfTFBCWVRFIGRwID0gc3JjX2NhY2hlX3NjYW47CisgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGRwLCBzcmNfc2NhbiwgMSk7CisgICAgICAgICAgICBzcmNfc2NhbiArPSA0OworICAgICAgICAgICAgZHAgKz0gMzsKKyAgICAgICAgfQorICAgIH0KKyAgICBfQ29tcG9zaXRlUm93X1JnYjJBcmdiX0JsZW5kX0NsaXAoZGVzdF9zY2FuLCBzcmNfY2FjaGVfc2Nhbiwgd2lkdGgsIGJsZW5kX3R5cGUsIDMsIGNsaXBfc2NhbiwgZGVzdF9hbHBoYV9zY2FuKTsKK30KK2lubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfTm9CbGVuZF9DbGlwX1RyYW5zZm9ybShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBzcmNfQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwKKyAgICAgICAgRlhfTFBCWVRFIGRlc3RfYWxwaGFfc2NhbiwgRlhfTFBCWVRFIHNyY19jYWNoZV9zY2FuLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsKKyAgICBpZiAoc3JjX0JwcCA9PSAzKSB7CisgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIHNyY19jYWNoZV9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgpOworICAgIH0gZWxzZSB7CisgICAgICAgIEZYX0xQQllURSBkcCA9IHNyY19jYWNoZV9zY2FuOworICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBkcCwgc3JjX3NjYW4sIDEpOworICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsKKyAgICAgICAgICAgIGRwICs9IDM7CisgICAgICAgIH0KKyAgICB9CisgICAgX0NvbXBvc2l0ZVJvd19SZ2IyQXJnYl9Ob0JsZW5kX0NsaXAoZGVzdF9zY2FuLCBzcmNfY2FjaGVfc2Nhbiwgd2lkdGgsIDMsIGNsaXBfc2NhbiwgZGVzdF9hbHBoYV9zY2FuKTsKK30KK2lubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfTm9CbGVuZF9Ob0NsaXBfVHJhbnNmb3JtKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgaW50IHNyY19CcHAsCisgICAgICAgIEZYX0xQQllURSBkZXN0X2FscGhhX3NjYW4sIEZYX0xQQllURSBzcmNfY2FjaGVfc2Nhbiwgdm9pZCogcEljY1RyYW5zZm9ybSkKK3sKKyAgICBJQ29kZWNfSWNjTW9kdWxlKiBwSWNjTW9kdWxlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCk7CisgICAgaWYgKHNyY19CcHAgPT0gMykgeworICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBzcmNfY2FjaGVfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBGWF9MUEJZVEUgZHAgPSBzcmNfY2FjaGVfc2NhbjsKKyAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgZHAsIHNyY19zY2FuLCAxKTsKKyAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7CisgICAgICAgICAgICBkcCArPSAzOworICAgICAgICB9CisgICAgfQorICAgIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfTm9CbGVuZF9Ob0NsaXAoZGVzdF9zY2FuLCBzcmNfY2FjaGVfc2Nhbiwgd2lkdGgsIDMsIGRlc3RfYWxwaGFfc2Nhbik7Cit9CitpbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93X0FyZ2IyUmdiX0JsZW5kX1RyYW5zZm9ybShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBibGVuZF90eXBlLCBpbnQgZGVzdF9CcHAsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLAorICAgICAgICBGWF9MUENCWVRFIHNyY19hbHBoYV9zY2FuLCBGWF9MUEJZVEUgc3JjX2NhY2hlX3NjYW4sIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOworICAgIGlmIChzcmNfYWxwaGFfc2NhbikgeworICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBzcmNfY2FjaGVfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcnNbM107CisgICAgICAgIEZYX0JPT0wgYk5vbnNlcGFyYWJsZUJsZW5kID0gYmxlbmRfdHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEU7CisgICAgICAgIGludCBkZXN0X2dhcCA9IGRlc3RfQnBwIC0gMzsKKyAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgc3JjX2NhY2hlX3NjYW4sIHNyY19zY2FuLCAxKTsKKyAgICAgICAgICAgIEZYX0JZVEUgc3JjX2FscGhhOworICAgICAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzNdICogKCpjbGlwX3NjYW4rKykgLyAyNTU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzNdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsKKyAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X0JwcDsKKyAgICAgICAgICAgICAgICBzcmNfY2FjaGVfc2NhbiArPSAzOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgeworICAgICAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX2NhY2hlX3NjYW4sIGRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7CisgICAgICAgICAgICAgICAgaW50IGJhY2tfY29sb3IgPSAqZGVzdF9zY2FuOworICAgICAgICAgICAgICAgIGludCBibGVuZGVkID0gYk5vbnNlcGFyYWJsZUJsZW5kID8gYmxlbmRlZF9jb2xvcnNbY29sb3JdIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CTEVORChibGVuZF90eXBlLCBiYWNrX2NvbG9yLCAqc3JjX2NhY2hlX3NjYW4pOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRShiYWNrX2NvbG9yLCBibGVuZGVkLCBzcmNfYWxwaGEpOworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBzcmNfY2FjaGVfc2NhbiArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X2dhcDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIF9Db21wb3NpdGVSb3dfQXJnYjJSZ2JfQmxlbmQoZGVzdF9zY2FuLCBzcmNfY2FjaGVfc2Nhbiwgd2lkdGgsIGJsZW5kX3R5cGUsIGRlc3RfQnBwLCBjbGlwX3NjYW4sIHNyY19hbHBoYV9zY2FuKTsKK30KK2lubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfQXJnYjJSZ2JfTm9CbGVuZF9UcmFuc2Zvcm0oRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgZGVzdF9CcHAsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLAorICAgICAgICBGWF9MUENCWVRFIHNyY19hbHBoYV9zY2FuLCBGWF9MUEJZVEUgc3JjX2NhY2hlX3NjYW4sIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOworICAgIGlmIChzcmNfYWxwaGFfc2NhbikgeworICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBzcmNfY2FjaGVfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgZGVzdF9nYXAgPSBkZXN0X0JwcCAtIDM7CisgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIHNyY19jYWNoZV9zY2FuLCBzcmNfc2NhbiwgMSk7CisgICAgICAgICAgICBGWF9CWVRFIHNyY19hbHBoYTsKKyAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsKKyAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblszXSAqICgqY2xpcF9zY2FuKyspIC8gMjU1OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblszXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7CisgICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDI1NSkgeworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfY2FjaGVfc2NhbisrOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfY2FjaGVfc2NhbisrOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfY2FjaGVfc2NhbisrOworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X2dhcDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X0JwcDsKKyAgICAgICAgICAgICAgICBzcmNfY2FjaGVfc2NhbiArPSAzOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7CisgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sICpzcmNfY2FjaGVfc2Nhbiwgc3JjX2FscGhhKTsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgc3JjX2NhY2hlX3NjYW4gKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9nYXA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBfQ29tcG9zaXRlUm93X0FyZ2IyUmdiX05vQmxlbmQoZGVzdF9zY2FuLCBzcmNfY2FjaGVfc2Nhbiwgd2lkdGgsIGRlc3RfQnBwLCBjbGlwX3NjYW4sIHNyY19hbHBoYV9zY2FuKTsKK30KK2lubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9CbGVuZF9Ob0NsaXBfVHJhbnNmb3JtKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgaW50IGJsZW5kX3R5cGUsIGludCBkZXN0X0JwcCwgaW50IHNyY19CcHAsCisgICAgICAgIEZYX0xQQllURSBzcmNfY2FjaGVfc2Nhbiwgdm9pZCogcEljY1RyYW5zZm9ybSkKK3sKKyAgICBJQ29kZWNfSWNjTW9kdWxlKiBwSWNjTW9kdWxlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCk7CisgICAgaWYgKHNyY19CcHAgPT0gMykgeworICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBzcmNfY2FjaGVfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBGWF9MUEJZVEUgZHAgPSBzcmNfY2FjaGVfc2NhbjsKKyAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgZHAsIHNyY19zY2FuLCAxKTsKKyAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7CisgICAgICAgICAgICBkcCArPSAzOworICAgICAgICB9CisgICAgfQorICAgIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9CbGVuZF9Ob0NsaXAoZGVzdF9zY2FuLCBzcmNfY2FjaGVfc2Nhbiwgd2lkdGgsIGJsZW5kX3R5cGUsIGRlc3RfQnBwLCAzKTsKK30KK2lubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9CbGVuZF9DbGlwX1RyYW5zZm9ybShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBibGVuZF90eXBlLCBpbnQgZGVzdF9CcHAsIGludCBzcmNfQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwKKyAgICAgICAgRlhfTFBCWVRFIHNyY19jYWNoZV9zY2FuLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsKKyAgICBpZiAoc3JjX0JwcCA9PSAzKSB7CisgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIHNyY19jYWNoZV9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgpOworICAgIH0gZWxzZSB7CisgICAgICAgIEZYX0xQQllURSBkcCA9IHNyY19jYWNoZV9zY2FuOworICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBkcCwgc3JjX3NjYW4sIDEpOworICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsKKyAgICAgICAgICAgIGRwICs9IDM7CisgICAgICAgIH0KKyAgICB9CisgICAgX0NvbXBvc2l0ZVJvd19SZ2IyUmdiX0JsZW5kX0NsaXAoZGVzdF9zY2FuLCBzcmNfY2FjaGVfc2Nhbiwgd2lkdGgsIGJsZW5kX3R5cGUsIGRlc3RfQnBwLCAzLCBjbGlwX3NjYW4pOworfQoraW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd19SZ2IyUmdiX05vQmxlbmRfTm9DbGlwX1RyYW5zZm9ybShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBkZXN0X0JwcCwgaW50IHNyY19CcHAsCisgICAgICAgIEZYX0xQQllURSBzcmNfY2FjaGVfc2Nhbiwgdm9pZCogcEljY1RyYW5zZm9ybSkKK3sKKyAgICBJQ29kZWNfSWNjTW9kdWxlKiBwSWNjTW9kdWxlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCk7CisgICAgaWYgKHNyY19CcHAgPT0gMykgeworICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBzcmNfY2FjaGVfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBGWF9MUEJZVEUgZHAgPSBzcmNfY2FjaGVfc2NhbjsKKyAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgZHAsIHNyY19zY2FuLCAxKTsKKyAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7CisgICAgICAgICAgICBkcCArPSAzOworICAgICAgICB9CisgICAgfQorICAgIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9Ob0JsZW5kX05vQ2xpcChkZXN0X3NjYW4sIHNyY19jYWNoZV9zY2FuLCB3aWR0aCwgZGVzdF9CcHAsIDMpOworfQoraW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd19SZ2IyUmdiX05vQmxlbmRfQ2xpcF9UcmFuc2Zvcm0oRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgZGVzdF9CcHAsIGludCBzcmNfQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwKKyAgICAgICAgRlhfTFBCWVRFIHNyY19jYWNoZV9zY2FuLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsKKyAgICBpZiAoc3JjX0JwcCA9PSAzKSB7CisgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIHNyY19jYWNoZV9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgpOworICAgIH0gZWxzZSB7CisgICAgICAgIEZYX0xQQllURSBkcCA9IHNyY19jYWNoZV9zY2FuOworICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBkcCwgc3JjX3NjYW4sIDEpOworICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsKKyAgICAgICAgICAgIGRwICs9IDM7CisgICAgICAgIH0KKyAgICB9CisgICAgX0NvbXBvc2l0ZVJvd19SZ2IyUmdiX05vQmxlbmRfQ2xpcChkZXN0X3NjYW4sIHNyY19jYWNoZV9zY2FuLCB3aWR0aCwgZGVzdF9CcHAsIDMsIGNsaXBfc2Nhbik7Cit9CitpbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93XzhicHBQYWwyR3JheShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBGWF9MUENCWVRFIHBQYWxldHRlLCBpbnQgcGl4ZWxfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxlbmRfdHlwZSwgRlhfTFBDQllURSBjbGlwX3NjYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19hbHBoYV9zY2FuKQoreworICAgIGlmIChzcmNfYWxwaGFfc2NhbikgeworICAgICAgICBpZiAoYmxlbmRfdHlwZSkgeworICAgICAgICAgICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsKKyAgICAgICAgICAgIGludCBibGVuZGVkX2NvbG9yOworICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgeworICAgICAgICAgICAgICAgIEZYX0JZVEUgZ3JheSA9IHBQYWxldHRlWypzcmNfc2Nhbl07CisgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9ICpzcmNfYWxwaGFfc2NhbisrOworICAgICAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsKKyAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChiTm9uc2VwYXJhYmxlQmxlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYmxlbmRlZF9jb2xvciA9IGJsZW5kX3R5cGUgPT0gRlhESUJfQkxFTkRfTFVNSU5PU0lUWSA/IGdyYXkgOiAqZGVzdF9zY2FuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBncmF5ID0gYk5vbnNlcGFyYWJsZUJsZW5kID8gYmxlbmRlZF9jb2xvciA6IF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCBncmF5KTsKKyAgICAgICAgICAgICAgICBpZiAoc3JjX2FscGhhKSB7CisgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBncmF5LCBzcmNfYWxwaGEpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBncmF5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgc3JjX3NjYW4gKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgeworICAgICAgICAgICAgRlhfQllURSBncmF5ID0gcFBhbGV0dGVbKnNyY19zY2FuXTsKKyAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSAqc3JjX2FscGhhX3NjYW4rKzsKKyAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsKKyAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzcmNfYWxwaGEpIHsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgc3JjX2FscGhhKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IGdyYXk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChibGVuZF90eXBlKSB7CisgICAgICAgICAgICBGWF9CT09MIGJOb25zZXBhcmFibGVCbGVuZCA9IGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFOworICAgICAgICAgICAgaW50IGJsZW5kZWRfY29sb3I7CisgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgRlhfQllURSBncmF5ID0gcFBhbGV0dGVbKnNyY19zY2FuXTsKKyAgICAgICAgICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGJsZW5kZWRfY29sb3IgPSBibGVuZF90eXBlID09IEZYRElCX0JMRU5EX0xVTUlOT1NJVFkgPyBncmF5IDogKmRlc3Rfc2NhbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ3JheSA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3IgOiBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2NhbiwgZ3JheSk7CisgICAgICAgICAgICAgICAgaWYgKGNsaXBfc2NhbiAmJiBjbGlwX3NjYW5bY29sXSA8IDI1NSkgeworICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgY2xpcF9zY2FuW2NvbF0pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBncmF5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgc3JjX3NjYW4gKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgeworICAgICAgICAgICAgRlhfQllURSBncmF5ID0gcFBhbGV0dGVbKnNyY19zY2FuXTsKKyAgICAgICAgICAgIGlmIChjbGlwX3NjYW4gJiYgY2xpcF9zY2FuW2NvbF0gPCAyNTUpIHsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgY2xpcF9zY2FuW2NvbF0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gZ3JheTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgIHNyY19zY2FuICsrOworICAgICAgICB9CisgICAgfQorfQoraW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd184YnBwUGFsMkdyYXlhKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIEZYX0xQQ0JZVEUgcFBhbGV0dGUsIGludCBwaXhlbF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxlbmRfdHlwZSwgRlhfTFBDQllURSBjbGlwX3NjYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3RfYWxwaGFfc2NhbiwgRlhfTFBDQllURSBzcmNfYWxwaGFfc2NhbikKK3sKKyAgICBpZiAoc3JjX2FscGhhX3NjYW4pIHsKKyAgICAgICAgaWYgKGJsZW5kX3R5cGUpIHsKKyAgICAgICAgICAgIEZYX0JPT0wgYk5vbnNlcGFyYWJsZUJsZW5kID0gYmxlbmRfdHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEU7CisgICAgICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcjsKKyAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICBGWF9CWVRFIGdyYXkgPSBwUGFsZXR0ZVsqc3JjX3NjYW5dOworICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOworICAgICAgICAgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9ICpkZXN0X2FscGhhX3NjYW47CisgICAgICAgICAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gKnNyY19hbHBoYV9zY2FuICsrOworICAgICAgICAgICAgICAgICAgICBpZiAoY2xpcF9zY2FuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2FscGhhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gZ3JheTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4gPSBzcmNfYWxwaGE7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4gKys7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBGWF9CWVRFIHNyY19hbHBoYSA9ICpzcmNfYWxwaGFfc2NhbisrOworICAgICAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsKKyAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4gPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyAoKmRlc3RfYWxwaGFfc2Nhbik7CisgICAgICAgICAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgeworICAgICAgICAgICAgICAgICAgICBibGVuZGVkX2NvbG9yID0gYmxlbmRfdHlwZSA9PSBGWERJQl9CTEVORF9MVU1JTk9TSVRZID8gZ3JheSA6ICpkZXN0X3NjYW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdyYXkgPSBiTm9uc2VwYXJhYmxlQmxlbmQgPyBibGVuZGVkX2NvbG9yIDogX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sIGdyYXkpOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBncmF5LCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICAgICAgZGVzdF9hbHBoYV9zY2FuICsrOworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7CisgICAgICAgICAgICBGWF9CWVRFIGdyYXkgPSBwUGFsZXR0ZVsqc3JjX3NjYW5dOworICAgICAgICAgICAgc3JjX3NjYW4gKys7CisgICAgICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSAqZGVzdF9hbHBoYV9zY2FuOworICAgICAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSAqc3JjX2FscGhhX3NjYW4gKys7CisgICAgICAgICAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYSkgeworICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gZ3JheTsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiA9IHNyY19hbHBoYTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZYX0JZVEUgc3JjX2FscGhhID0gKnNyY19hbHBoYV9zY2FuKys7CisgICAgICAgICAgICBpZiAoY2xpcF9zY2FuKSB7CisgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfYWxwaGEgLyAyNTU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgZGVzdF9hbHBoYV9zY2FuICsrOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1OworICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gKCpkZXN0X2FscGhhX3NjYW4pOworICAgICAgICAgICAgZGVzdF9hbHBoYV9zY2FuICsrOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGdyYXksIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChibGVuZF90eXBlKSB7CisgICAgICAgICAgICBGWF9CT09MIGJOb25zZXBhcmFibGVCbGVuZCA9IGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFOworICAgICAgICAgICAgaW50IGJsZW5kZWRfY29sb3I7CisgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgRlhfQllURSBncmF5ID0gcFBhbGV0dGVbKnNyY19zY2FuXTsKKyAgICAgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBpZiAoY2xpcF9zY2FuID09IE5VTEwgfHwgY2xpcF9zY2FuW2NvbF0gPT0gMjU1KSB7CisgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IGdyYXk7CisgICAgICAgICAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4rKyA9IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXTsKKyAgICAgICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4gKys7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnQgYmFja19hbHBoYSA9ICpkZXN0X2FscGhhX3NjYW47CisgICAgICAgICAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiArKyA9IGRlc3RfYWxwaGE7CisgICAgICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsKKyAgICAgICAgICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGJsZW5kZWRfY29sb3IgPSBibGVuZF90eXBlID09IEZYRElCX0JMRU5EX0xVTUlOT1NJVFkgPyBncmF5IDogKmRlc3Rfc2NhbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ3JheSA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3IgOiBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2NhbiwgZ3JheSk7CisgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGdyYXksIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgeworICAgICAgICAgICAgRlhfQllURSBncmF5ID0gcFBhbGV0dGVbKnNyY19zY2FuXTsKKyAgICAgICAgICAgIHNyY19zY2FuICsrOworICAgICAgICAgICAgaWYgKGNsaXBfc2NhbiA9PSBOVUxMIHx8IGNsaXBfc2Nhbltjb2xdID09IDI1NSkgeworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IGdyYXk7CisgICAgICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbisrID0gMjU1OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdOworICAgICAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBiYWNrX2FscGhhID0gKmRlc3RfYWxwaGFfc2NhbjsKKyAgICAgICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1OworICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiArKyA9IGRlc3RfYWxwaGE7CisgICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGdyYXksIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgfQorICAgIH0KK30KK2lubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfMWJwcFBhbDJHcmF5KEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCBzcmNfbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgcFBhbGV0dGUsIGludCBwaXhlbF9jb3VudCwgaW50IGJsZW5kX3R5cGUsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuKQoreworICAgIGludCByZXNldF9ncmF5ID0gcFBhbGV0dGVbMF07CisgICAgaW50IHNldF9ncmF5ID0gcFBhbGV0dGVbMV07CisgICAgaWYgKGJsZW5kX3R5cGUpIHsKKyAgICAgICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsKKyAgICAgICAgaW50IGJsZW5kZWRfY29sb3I7CisgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgICAgIEZYX0JZVEUgZ3JheSA9IChzcmNfc2NhblsoY29sICsgc3JjX2xlZnQpIC8gOF0gJiAoMSA8PCAoNyAtIChjb2wgKyBzcmNfbGVmdCkgJSA4KSkpID8gc2V0X2dyYXkgOiByZXNldF9ncmF5OworICAgICAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgeworICAgICAgICAgICAgICAgIGJsZW5kZWRfY29sb3IgPSBibGVuZF90eXBlID09IEZYRElCX0JMRU5EX0xVTUlOT1NJVFkgPyBncmF5IDogKmRlc3Rfc2NhbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdyYXkgPSBiTm9uc2VwYXJhYmxlQmxlbmQgPyBibGVuZGVkX2NvbG9yIDogX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sIGdyYXkpOworICAgICAgICAgICAgaWYgKGNsaXBfc2NhbiAmJiBjbGlwX3NjYW5bY29sXSA8IDI1NSkgeworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBncmF5LCBjbGlwX3NjYW5bY29sXSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBncmF5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgeworICAgICAgICBGWF9CWVRFIGdyYXkgPSAoc3JjX3NjYW5bKGNvbCArIHNyY19sZWZ0KSAvIDhdICYgKDEgPDwgKDcgLSAoY29sICsgc3JjX2xlZnQpICUgOCkpKSA/IHNldF9ncmF5IDogcmVzZXRfZ3JheTsKKyAgICAgICAgaWYgKGNsaXBfc2NhbiAmJiBjbGlwX3NjYW5bY29sXSA8IDI1NSkgeworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGdyYXksIGNsaXBfc2Nhbltjb2xdKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBncmF5OworICAgICAgICB9CisgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICB9Cit9CitpbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93XzFicHBQYWwyR3JheWEoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHNyY19sZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgcFBhbGV0dGUsIGludCBwaXhlbF9jb3VudCwgaW50IGJsZW5kX3R5cGUsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X2FscGhhX3NjYW4pCit7CisgICAgaW50IHJlc2V0X2dyYXkgPSBwUGFsZXR0ZVswXTsKKyAgICBpbnQgc2V0X2dyYXkgPSBwUGFsZXR0ZVsxXTsKKyAgICBpZiAoYmxlbmRfdHlwZSkgeworICAgICAgICBGWF9CT09MIGJOb25zZXBhcmFibGVCbGVuZCA9IGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFOworICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcjsKKyAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgeworICAgICAgICAgICAgRlhfQllURSBncmF5ID0gKHNyY19zY2FuWyhjb2wgKyBzcmNfbGVmdCkgLyA4XSAmICgxIDw8ICg3IC0gKGNvbCArIHNyY19sZWZ0KSAlIDgpKSkgPyBzZXRfZ3JheSA6IHJlc2V0X2dyYXk7CisgICAgICAgICAgICBpZiAoY2xpcF9zY2FuID09IE5VTEwgfHwgY2xpcF9zY2FuW2NvbF0gPT0gMjU1KSB7CisgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gZ3JheTsKKyAgICAgICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuICsrID0gMjU1OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdOworICAgICAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBiYWNrX2FscGhhID0gKmRlc3RfYWxwaGFfc2NhbjsKKyAgICAgICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1OworICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiArKyA9IGRlc3RfYWxwaGE7CisgICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOworICAgICAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgeworICAgICAgICAgICAgICAgIGJsZW5kZWRfY29sb3IgPSBibGVuZF90eXBlID09IEZYRElCX0JMRU5EX0xVTUlOT1NJVFkgPyBncmF5IDogKmRlc3Rfc2NhbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdyYXkgPSBiTm9uc2VwYXJhYmxlQmxlbmQgPyBibGVuZGVkX2NvbG9yIDogX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sIGdyYXkpOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGdyYXksIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgRlhfQllURSBncmF5ID0gKHNyY19zY2FuWyhjb2wgKyBzcmNfbGVmdCkgLyA4XSAmICgxIDw8ICg3IC0gKGNvbCArIHNyY19sZWZ0KSAlIDgpKSkgPyBzZXRfZ3JheSA6IHJlc2V0X2dyYXk7CisgICAgICAgIGlmIChjbGlwX3NjYW4gPT0gTlVMTCB8fCBjbGlwX3NjYW5bY29sXSA9PSAyNTUpIHsKKyAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IGdyYXk7CisgICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuICsrID0gMjU1OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaW50IHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdOworICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGludCBiYWNrX2FscGhhID0gKmRlc3RfYWxwaGFfc2NhbjsKKyAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7CisgICAgICAgICpkZXN0X2FscGhhX3NjYW4gKysgPSBkZXN0X2FscGhhOworICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOworICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgZ3JheSwgYWxwaGFfcmF0aW8pOworICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgfQorfQoraW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd184YnBwUmdiMlJnYl9Ob0JsZW5kKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIEZYX0RXT1JEKiBwUGFsZXR0ZSwgaW50IHBpeGVsX2NvdW50LAorICAgICAgICBpbnQgRGVzdEJwcCwgRlhfTFBDQllURSBjbGlwX3NjYW4sCisgICAgICAgIEZYX0xQQ0JZVEUgc3JjX2FscGhhX3NjYW4pCit7CisgICAgaWYgKHNyY19hbHBoYV9zY2FuKSB7CisgICAgICAgIGludCBkZXN0X2dhcCA9IERlc3RCcHAgLSAzOworICAgICAgICBGWF9BUkdCIGFyZ2IgPSAwOworICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7CisgICAgICAgICAgICBhcmdiID0gcFBhbGV0dGVbKnNyY19zY2FuXTsKKyAgICAgICAgICAgIGludCBzcmNfciA9IEZYQVJHQl9SKGFyZ2IpOworICAgICAgICAgICAgaW50IHNyY19nID0gRlhBUkdCX0coYXJnYik7CisgICAgICAgICAgICBpbnQgc3JjX2IgPSBGWEFSR0JfQihhcmdiKTsKKyAgICAgICAgICAgIHNyY19zY2FuICsrOworICAgICAgICAgICAgRlhfQllURSBzcmNfYWxwaGEgPSAwOworICAgICAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9ICgqc3JjX2FscGhhX3NjYW4rKykgKiAoKmNsaXBfc2NhbisrKSAvIDI1NTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gKnNyY19hbHBoYV9zY2FuKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDI1NSkgeworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19iOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19nOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19yOworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X2dhcDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBEZXN0QnBwOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19iLCBzcmNfYWxwaGEpOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19nLCBzcmNfYWxwaGEpOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19yLCBzcmNfYWxwaGEpOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfZ2FwOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgRlhfQVJHQiBhcmdiID0gMDsKKyAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgeworICAgICAgICAgICAgYXJnYiA9IHBQYWxldHRlWypzcmNfc2Nhbl07CisgICAgICAgICAgICBpbnQgc3JjX3IgPSBGWEFSR0JfUihhcmdiKTsKKyAgICAgICAgICAgIGludCBzcmNfZyA9IEZYQVJHQl9HKGFyZ2IpOworICAgICAgICAgICAgaW50IHNyY19iID0gRlhBUkdCX0IoYXJnYik7CisgICAgICAgICAgICBpZiAoY2xpcF9zY2FuICYmIGNsaXBfc2Nhbltjb2xdIDwgMjU1KSB7CisgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19iLCBjbGlwX3NjYW5bY29sXSk7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfZywgY2xpcF9zY2FuW2NvbF0pOworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX3IsIGNsaXBfc2Nhbltjb2xdKTsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19iOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19nOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKERlc3RCcHAgPT0gNCkgeworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3JjX3NjYW4gKys7CisgICAgICAgIH0KKyAgICB9Cit9CitpbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93XzFicHBSZ2IyUmdiX05vQmxlbmQoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHNyY19sZWZ0LAorICAgICAgICBGWF9EV09SRCogcFBhbGV0dGUsIGludCBwaXhlbF9jb3VudCwgaW50IERlc3RCcHAsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuKQoreworICAgIGludCByZXNldF9yLCByZXNldF9nLCByZXNldF9iOworICAgIGludCBzZXRfciwgc2V0X2csIHNldF9iOworICAgIHJlc2V0X3IgPSBGWEFSR0JfUihwUGFsZXR0ZVswXSk7CisgICAgcmVzZXRfZyA9IEZYQVJHQl9HKHBQYWxldHRlWzBdKTsKKyAgICByZXNldF9iID0gRlhBUkdCX0IocFBhbGV0dGVbMF0pOworICAgIHNldF9yID0gRlhBUkdCX1IocFBhbGV0dGVbMV0pOworICAgIHNldF9nID0gRlhBUkdCX0cocFBhbGV0dGVbMV0pOworICAgIHNldF9iID0gRlhBUkdCX0IocFBhbGV0dGVbMV0pOworICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgaW50IHNyY19yLCBzcmNfZywgc3JjX2I7CisgICAgICAgIGlmIChzcmNfc2NhblsoY29sICsgc3JjX2xlZnQpIC8gOF0gJiAoMSA8PCAoNyAtIChjb2wgKyBzcmNfbGVmdCkgJSA4KSkpIHsKKyAgICAgICAgICAgIHNyY19yID0gc2V0X3I7CisgICAgICAgICAgICBzcmNfZyA9IHNldF9nOworICAgICAgICAgICAgc3JjX2IgPSBzZXRfYjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNyY19yID0gcmVzZXRfcjsKKyAgICAgICAgICAgIHNyY19nID0gcmVzZXRfZzsKKyAgICAgICAgICAgIHNyY19iID0gcmVzZXRfYjsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2xpcF9zY2FuICYmIGNsaXBfc2Nhbltjb2xdIDwgMjU1KSB7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2IsIGNsaXBfc2Nhbltjb2xdKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfZywgY2xpcF9zY2FuW2NvbF0pOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19yLCBjbGlwX3NjYW5bY29sXSk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSBzcmNfYjsKKyAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19nOworICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gc3JjX3I7CisgICAgICAgIH0KKyAgICAgICAgaWYgKERlc3RCcHAgPT0gNCkgeworICAgICAgICAgICAgZGVzdF9zY2FuKys7CisgICAgICAgIH0KKyAgICB9Cit9CitpbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93XzhicHBSZ2IyQXJnYl9Ob0JsZW5kKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwKKyAgICAgICAgRlhfRFdPUkQqIHBQYWxldHRlLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwKKyAgICAgICAgRlhfTFBDQllURSBzcmNfYWxwaGFfc2NhbikKK3sKKyAgICBpZiAoc3JjX2FscGhhX3NjYW4pIHsKKyAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgRlhfQVJHQiBhcmdiID0gcFBhbGV0dGVbKnNyY19zY2FuXTsKKyAgICAgICAgICAgIHNyY19zY2FuICsrOworICAgICAgICAgICAgaW50IHNyY19yID0gRlhBUkdCX1IoYXJnYik7CisgICAgICAgICAgICBpbnQgc3JjX2cgPSBGWEFSR0JfRyhhcmdiKTsKKyAgICAgICAgICAgIGludCBzcmNfYiA9IEZYQVJHQl9CKGFyZ2IpOworICAgICAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gZGVzdF9zY2FuWzNdOworICAgICAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdICogKCpzcmNfYWxwaGFfc2NhbikgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgIEZYQVJHQl9TRVRESUIoZGVzdF9zY2FuLCBGWEFSR0JfTUFLRShzcmNfYWxwaGEsIHNyY19yLCBzcmNfZywgc3JjX2IpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBGWEFSR0JfU0VURElCKGRlc3Rfc2NhbiwgRlhBUkdCX01BS0UoKnNyY19hbHBoYV9zY2FuLCBzcmNfciwgc3JjX2csIHNyY19iKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICAgICAgICAgIHNyY19hbHBoYV9zY2FuICsrOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfQllURSBzcmNfYWxwaGE7CisgICAgICAgICAgICBpZiAoY2xpcF9zY2FuID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSAqc3JjX2FscGhhX3NjYW4gKys7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdICogKCpzcmNfYWxwaGFfc2NhbisrKSAvIDI1NTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7CisgICAgICAgICAgICBkZXN0X3NjYW5bM10gPSBkZXN0X2FscGhhOworICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfYiwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19nLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX3IsIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICBGWF9BUkdCIGFyZ2IgPSBwUGFsZXR0ZVsqc3JjX3NjYW5dOworICAgICAgICAgICAgaW50IHNyY19yID0gRlhBUkdCX1IoYXJnYik7CisgICAgICAgICAgICBpbnQgc3JjX2cgPSBGWEFSR0JfRyhhcmdiKTsKKyAgICAgICAgICAgIGludCBzcmNfYiA9IEZYQVJHQl9CKGFyZ2IpOworICAgICAgICAgICAgaWYgKGNsaXBfc2NhbiA9PSBOVUxMIHx8IGNsaXBfc2Nhbltjb2xdID09IDI1NSkgeworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19iOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19nOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19yOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IDI1NTsKKyAgICAgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXTsKKyAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGJhY2tfYWxwaGEgPSBkZXN0X3NjYW5bM107CisgICAgICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IGRlc3RfYWxwaGE7CisgICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19iLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2csIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfciwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgc3JjX3NjYW4gKys7CisgICAgICAgIH0KK30KK3ZvaWQgX0NvbXBvc2l0ZVJvd184YnBwUmdiMlJnYmFfTm9CbGVuZChGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQqIHBQYWxldHRlLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9hbHBoYV9zY2FuLCBGWF9MUENCWVRFIHNyY19hbHBoYV9zY2FuKQoreworICAgIGlmIChzcmNfYWxwaGFfc2NhbikgeworICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICBGWF9BUkdCIGFyZ2IgPSBwUGFsZXR0ZVsqc3JjX3NjYW5dOworICAgICAgICAgICAgc3JjX3NjYW4gKys7CisgICAgICAgICAgICBpbnQgc3JjX3IgPSBGWEFSR0JfUihhcmdiKTsKKyAgICAgICAgICAgIGludCBzcmNfZyA9IEZYQVJHQl9HKGFyZ2IpOworICAgICAgICAgICAgaW50IHNyY19iID0gRlhBUkdCX0IoYXJnYik7CisgICAgICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSAqZGVzdF9hbHBoYV9zY2FuOworICAgICAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChjbGlwX3NjYW4pIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IGNsaXBfc2Nhbltjb2xdICogKCpzcmNfYWxwaGFfc2NhbikgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4gKysgPSBzcmNfYWxwaGE7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiArKyA9ICpzcmNfYWxwaGFfc2NhbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiArKyA9IHNyY19iOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gKysgPSBzcmNfZzsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuICsrID0gc3JjX3I7CisgICAgICAgICAgICAgICAgc3JjX2FscGhhX3NjYW4gKys7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9CWVRFIHNyY19hbHBoYTsKKyAgICAgICAgICAgIGlmIChjbGlwX3NjYW4gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9ICpzcmNfYWxwaGFfc2NhbisrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqICgqc3JjX2FscGhhX3NjYW4rKykgLyAyNTU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gMzsKKyAgICAgICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4gKys7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4gKysgPSBkZXN0X2FscGhhOworICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfYiwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19nLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX3IsIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICBGWF9BUkdCIGFyZ2IgPSBwUGFsZXR0ZVsqc3JjX3NjYW5dOworICAgICAgICAgICAgaW50IHNyY19yID0gRlhBUkdCX1IoYXJnYik7CisgICAgICAgICAgICBpbnQgc3JjX2cgPSBGWEFSR0JfRyhhcmdiKTsKKyAgICAgICAgICAgIGludCBzcmNfYiA9IEZYQVJHQl9CKGFyZ2IpOworICAgICAgICAgICAgaWYgKGNsaXBfc2NhbiA9PSBOVUxMIHx8IGNsaXBfc2Nhbltjb2xdID09IDI1NSkgeworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19iOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19nOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19yOworICAgICAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4rKyA9IDI1NTsKKyAgICAgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXTsKKyAgICAgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSAzOworICAgICAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBiYWNrX2FscGhhID0gKmRlc3RfYWxwaGFfc2NhbjsKKyAgICAgICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1OworICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiArKyA9IGRlc3RfYWxwaGE7CisgICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19iLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2csIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfciwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgc3JjX3NjYW4gKys7CisgICAgICAgIH0KK30KK2lubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfMWJwcFJnYjJBcmdiX05vQmxlbmQoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHNyY19sZWZ0LCBpbnQgd2lkdGgsCisgICAgICAgIEZYX0RXT1JEKiBwUGFsZXR0ZSwgRlhfTFBDQllURSBjbGlwX3NjYW4pCit7CisgICAgaW50IHJlc2V0X3IsIHJlc2V0X2csIHJlc2V0X2I7CisgICAgaW50IHNldF9yLCBzZXRfZywgc2V0X2I7CisgICAgcmVzZXRfciA9IEZYQVJHQl9SKHBQYWxldHRlWzBdKTsKKyAgICByZXNldF9nID0gRlhBUkdCX0cocFBhbGV0dGVbMF0pOworICAgIHJlc2V0X2IgPSBGWEFSR0JfQihwUGFsZXR0ZVswXSk7CisgICAgc2V0X3IgPSBGWEFSR0JfUihwUGFsZXR0ZVsxXSk7CisgICAgc2V0X2cgPSBGWEFSR0JfRyhwUGFsZXR0ZVsxXSk7CisgICAgc2V0X2IgPSBGWEFSR0JfQihwUGFsZXR0ZVsxXSk7CisgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICBpbnQgc3JjX3IsIHNyY19nLCBzcmNfYjsKKyAgICAgICAgaWYgKHNyY19zY2FuWyhjb2wgKyBzcmNfbGVmdCkgLyA4XSAmICgxIDw8ICg3IC0gKGNvbCArIHNyY19sZWZ0KSAlIDgpKSkgeworICAgICAgICAgICAgc3JjX3IgPSBzZXRfcjsKKyAgICAgICAgICAgIHNyY19nID0gc2V0X2c7CisgICAgICAgICAgICBzcmNfYiA9IHNldF9iOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3JjX3IgPSByZXNldF9yOworICAgICAgICAgICAgc3JjX2cgPSByZXNldF9nOworICAgICAgICAgICAgc3JjX2IgPSByZXNldF9iOworICAgICAgICB9CisgICAgICAgIGlmIChjbGlwX3NjYW4gPT0gTlVMTCB8fCBjbGlwX3NjYW5bY29sXSA9PSAyNTUpIHsKKyAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19iOworICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gc3JjX2c7CisgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSBzcmNfcjsKKyAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IDI1NTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGludCBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXTsKKyAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGludCBiYWNrX2FscGhhID0gZGVzdF9zY2FuWzNdOworICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgZGVzdF9zY2FuWzNdID0gZGVzdF9hbHBoYTsKKyAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsKKyAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19iLCBhbHBoYV9yYXRpbyk7CisgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19nLCBhbHBoYV9yYXRpbyk7CisgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19yLCBhbHBoYV9yYXRpbyk7CisgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgZGVzdF9zY2FuICsrOworICAgIH0KK30KK3ZvaWQgX0NvbXBvc2l0ZVJvd18xYnBwUmdiMlJnYmFfTm9CbGVuZChGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgc3JjX2xlZnQsIGludCB3aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCogcFBhbGV0dGUsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X2FscGhhX3NjYW4pCit7CisgICAgaW50IHJlc2V0X3IsIHJlc2V0X2csIHJlc2V0X2I7CisgICAgaW50IHNldF9yLCBzZXRfZywgc2V0X2I7CisgICAgcmVzZXRfciA9IEZYQVJHQl9SKHBQYWxldHRlWzBdKTsKKyAgICByZXNldF9nID0gRlhBUkdCX0cocFBhbGV0dGVbMF0pOworICAgIHJlc2V0X2IgPSBGWEFSR0JfQihwUGFsZXR0ZVswXSk7CisgICAgc2V0X3IgPSBGWEFSR0JfUihwUGFsZXR0ZVsxXSk7CisgICAgc2V0X2cgPSBGWEFSR0JfRyhwUGFsZXR0ZVsxXSk7CisgICAgc2V0X2IgPSBGWEFSR0JfQihwUGFsZXR0ZVsxXSk7CisgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICBpbnQgc3JjX3IsIHNyY19nLCBzcmNfYjsKKyAgICAgICAgaWYgKHNyY19zY2FuWyhjb2wgKyBzcmNfbGVmdCkgLyA4XSAmICgxIDw8ICg3IC0gKGNvbCArIHNyY19sZWZ0KSAlIDgpKSkgeworICAgICAgICAgICAgc3JjX3IgPSBzZXRfcjsKKyAgICAgICAgICAgIHNyY19nID0gc2V0X2c7CisgICAgICAgICAgICBzcmNfYiA9IHNldF9iOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3JjX3IgPSByZXNldF9yOworICAgICAgICAgICAgc3JjX2cgPSByZXNldF9nOworICAgICAgICAgICAgc3JjX2IgPSByZXNldF9iOworICAgICAgICB9CisgICAgICAgIGlmIChjbGlwX3NjYW4gPT0gTlVMTCB8fCBjbGlwX3NjYW5bY29sXSA9PSAyNTUpIHsKKyAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19iOworICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gc3JjX2c7CisgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSBzcmNfcjsKKyAgICAgICAgICAgICpkZXN0X2FscGhhX3NjYW4rKyA9IDI1NTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGludCBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXTsKKyAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICBkZXN0X3NjYW4gKz0gMzsKKyAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGludCBiYWNrX2FscGhhID0gKmRlc3RfYWxwaGFfc2NhbjsKKyAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7CisgICAgICAgICpkZXN0X2FscGhhX3NjYW4gKysgPSBkZXN0X2FscGhhOworICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOworICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2IsIGFscGhhX3JhdGlvKTsKKyAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2csIGFscGhhX3JhdGlvKTsKKyAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX3IsIGFscGhhX3JhdGlvKTsKKyAgICAgICAgZGVzdF9zY2FuICsrOworICAgIH0KK30KK3ZvaWQgX0NvbXBvc2l0ZVJvd19CeXRlTWFzazJBcmdiKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCBtYXNrX2FscGhhLCBpbnQgc3JjX3IsIGludCBzcmNfZywgaW50IHNyY19iLCBpbnQgcGl4ZWxfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxlbmRfdHlwZSwgRlhfTFBDQllURSBjbGlwX3NjYW4pCit7CisgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgeworICAgICAgICBpbnQgc3JjX2FscGhhOworICAgICAgICBpZiAoY2xpcF9zY2FuKSB7CisgICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhICogY2xpcF9zY2FuW2NvbF0gKiBzcmNfc2Nhbltjb2xdIC8gMjU1IC8gMjU1OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYSAqIHNyY19zY2FuW2NvbF0gLyAyNTU7CisgICAgICAgIH0KKyAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gZGVzdF9zY2FuWzNdOworICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICBGWEFSR0JfU0VURElCKGRlc3Rfc2NhbiwgRlhBUkdCX01BS0Uoc3JjX2FscGhhLCBzcmNfciwgc3JjX2csIHNyY19iKSk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgZGVzdF9zY2FuWzNdID0gZGVzdF9hbHBoYTsKKyAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsKKyAgICAgICAgaWYgKGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFKSB7CisgICAgICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcnNbM107CisgICAgICAgICAgICBGWF9CWVRFIHNyY19zY2FuWzNdOworICAgICAgICAgICAgc3JjX3NjYW5bMF0gPSBzcmNfYjsKKyAgICAgICAgICAgIHNyY19zY2FuWzFdID0gc3JjX2c7CisgICAgICAgICAgICBzcmNfc2NhblsyXSA9IHNyY19yOworICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9ycyk7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnNbMF0sIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9yc1sxXSwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzWzJdLCBhbHBoYV9yYXRpbyk7CisgICAgICAgIH0gZWxzZSBpZiAoYmxlbmRfdHlwZSkgeworICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX2IpOworICAgICAgICAgICAgYmxlbmRlZCA9IEZYRElCX0FMUEhBX01FUkdFKHNyY19iLCBibGVuZGVkLCBiYWNrX2FscGhhKTsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICBibGVuZGVkID0gX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sIHNyY19nKTsKKyAgICAgICAgICAgIGJsZW5kZWQgPSBGWERJQl9BTFBIQV9NRVJHRShzcmNfZywgYmxlbmRlZCwgYmFja19hbHBoYSk7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZCwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgYmxlbmRlZCA9IF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCBzcmNfcik7CisgICAgICAgICAgICBibGVuZGVkID0gRlhESUJfQUxQSEFfTUVSR0Uoc3JjX3IsIGJsZW5kZWQsIGJhY2tfYWxwaGEpOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWQsIGFscGhhX3JhdGlvKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfYiwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19nLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX3IsIGFscGhhX3JhdGlvKTsKKyAgICAgICAgfQorICAgICAgICBkZXN0X3NjYW4gKz0gMjsKKyAgICB9Cit9Cit2b2lkIF9Db21wb3NpdGVSb3dfQnl0ZU1hc2syUmdiYShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgbWFza19hbHBoYSwgaW50IHNyY19yLCBpbnQgc3JjX2csIGludCBzcmNfYiwgaW50IHBpeGVsX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsZW5kX3R5cGUsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3RfYWxwaGFfc2NhbikKK3sKKyAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7CisgICAgICAgIGludCBzcmNfYWxwaGE7CisgICAgICAgIGlmIChjbGlwX3NjYW4pIHsKKyAgICAgICAgICAgIHNyY19hbHBoYSA9IG1hc2tfYWxwaGEgKiBjbGlwX3NjYW5bY29sXSAqIHNyY19zY2FuW2NvbF0gLyAyNTUgLyAyNTU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhICogc3JjX3NjYW5bY29sXSAvIDI1NTsKKyAgICAgICAgfQorICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSAqZGVzdF9hbHBoYV9zY2FuOworICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAqZGVzdF9zY2FuICsrID0gc3JjX2I7CisgICAgICAgICAgICAqZGVzdF9zY2FuICsrID0gc3JjX2c7CisgICAgICAgICAgICAqZGVzdF9zY2FuICsrID0gc3JjX3I7CisgICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuICsrID0gc3JjX2FscGhhOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICBkZXN0X3NjYW4gKz0gMzsKKyAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1OworICAgICAgICAqZGVzdF9hbHBoYV9zY2FuICsrID0gZGVzdF9hbHBoYTsKKyAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsKKyAgICAgICAgaWYgKGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFKSB7CisgICAgICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcnNbM107CisgICAgICAgICAgICBGWF9CWVRFIHNyY19zY2FuWzNdOworICAgICAgICAgICAgc3JjX3NjYW5bMF0gPSBzcmNfYjsKKyAgICAgICAgICAgIHNyY19zY2FuWzFdID0gc3JjX2c7CisgICAgICAgICAgICBzcmNfc2NhblsyXSA9IHNyY19yOworICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9ycyk7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnNbMF0sIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9yc1sxXSwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzWzJdLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgIH0gZWxzZSBpZiAoYmxlbmRfdHlwZSkgeworICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX2IpOworICAgICAgICAgICAgYmxlbmRlZCA9IEZYRElCX0FMUEhBX01FUkdFKHNyY19iLCBibGVuZGVkLCBiYWNrX2FscGhhKTsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICBibGVuZGVkID0gX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sIHNyY19nKTsKKyAgICAgICAgICAgIGJsZW5kZWQgPSBGWERJQl9BTFBIQV9NRVJHRShzcmNfZywgYmxlbmRlZCwgYmFja19hbHBoYSk7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZCwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgYmxlbmRlZCA9IF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCBzcmNfcik7CisgICAgICAgICAgICBibGVuZGVkID0gRlhESUJfQUxQSEFfTUVSR0Uoc3JjX3IsIGJsZW5kZWQsIGJhY2tfYWxwaGEpOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWQsIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfYiwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19nLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX3IsIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgfQorICAgIH0KK30KK3ZvaWQgX0NvbXBvc2l0ZVJvd19CeXRlTWFzazJSZ2IoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IG1hc2tfYWxwaGEsIGludCBzcmNfciwgaW50IHNyY19nLCBpbnQgc3JjX2IsIGludCBwaXhlbF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsZW5kX3R5cGUsIGludCBCcHAsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuKQoreworICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgaW50IHNyY19hbHBoYTsKKyAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYSAqIGNsaXBfc2Nhbltjb2xdICogc3JjX3NjYW5bY29sXSAvIDI1NSAvIDI1NTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNyY19hbHBoYSA9IG1hc2tfYWxwaGEgKiBzcmNfc2Nhbltjb2xdIC8gMjU1OworICAgICAgICB9CisgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRSkgeworICAgICAgICAgICAgaW50IGJsZW5kZWRfY29sb3JzWzNdOworICAgICAgICAgICAgRlhfQllURSBzcmNfc2NhblszXTsKKyAgICAgICAgICAgIHNyY19zY2FuWzBdID0gc3JjX2I7CisgICAgICAgICAgICBzcmNfc2NhblsxXSA9IHNyY19nOworICAgICAgICAgICAgc3JjX3NjYW5bMl0gPSBzcmNfcjsKKyAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX3NjYW4sIGRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnMpOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzWzBdLCBzcmNfYWxwaGEpOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzWzFdLCBzcmNfYWxwaGEpOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzWzJdLCBzcmNfYWxwaGEpOworICAgICAgICB9IGVsc2UgaWYgKGJsZW5kX3R5cGUpIHsKKyAgICAgICAgICAgIGludCBibGVuZGVkID0gX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sIHNyY19iKTsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkLCBzcmNfYWxwaGEpOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgYmxlbmRlZCA9IF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCBzcmNfZyk7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZCwgc3JjX2FscGhhKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgIGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX3IpOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWQsIHNyY19hbHBoYSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2IsIHNyY19hbHBoYSk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2csIHNyY19hbHBoYSk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX3IsIHNyY19hbHBoYSk7CisgICAgICAgIH0KKyAgICAgICAgZGVzdF9zY2FuICs9IEJwcCAtIDI7CisgICAgfQorfQordm9pZCBfQ29tcG9zaXRlUm93X0J5dGVNYXNrMk1hc2soRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IG1hc2tfYWxwaGEsIGludCBwaXhlbF9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgY2xpcF9zY2FuKQoreworICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgaW50IHNyY19hbHBoYTsKKyAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYSAqIGNsaXBfc2Nhbltjb2xdICogc3JjX3NjYW5bY29sXSAvIDI1NSAvIDI1NTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNyY19hbHBoYSA9IG1hc2tfYWxwaGEgKiBzcmNfc2Nhbltjb2xdIC8gMjU1OworICAgICAgICB9CisgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9ICpkZXN0X3NjYW47CisgICAgICAgIGlmICghYmFja19hbHBoYSkgeworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IHNyY19hbHBoYTsKKyAgICAgICAgfSBlbHNlIGlmIChzcmNfYWxwaGEpIHsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgfQorICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgfQorfQordm9pZCBfQ29tcG9zaXRlUm93X0J5dGVNYXNrMkdyYXkoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IG1hc2tfYWxwaGEsIGludCBzcmNfZ3JheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwaXhlbF9jb3VudCwgRlhfTFBDQllURSBjbGlwX3NjYW4pCit7CisgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgeworICAgICAgICBpbnQgc3JjX2FscGhhOworICAgICAgICBpZiAoY2xpcF9zY2FuKSB7CisgICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhICogY2xpcF9zY2FuW2NvbF0gKiBzcmNfc2Nhbltjb2xdIC8gMjU1IC8gMjU1OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYSAqIHNyY19zY2FuW2NvbF0gLyAyNTU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNyY19hbHBoYSkgeworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19ncmF5LCBzcmNfYWxwaGEpOworICAgICAgICB9CisgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICB9Cit9Cit2b2lkIF9Db21wb3NpdGVSb3dfQnl0ZU1hc2syR3JheWEoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IG1hc2tfYWxwaGEsIGludCBzcmNfZ3JheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxfY291bnQsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X2FscGhhX3NjYW4pCit7CisgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgeworICAgICAgICBpbnQgc3JjX2FscGhhOworICAgICAgICBpZiAoY2xpcF9zY2FuKSB7CisgICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhICogY2xpcF9zY2FuW2NvbF0gKiBzcmNfc2Nhbltjb2xdIC8gMjU1IC8gMjU1OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYSAqIHNyY19zY2FuW2NvbF0gLyAyNTU7CisgICAgICAgIH0KKyAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gKmRlc3RfYWxwaGFfc2NhbjsKKyAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgKmRlc3Rfc2NhbiArKyA9IHNyY19ncmF5OworICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiArKyA9IHNyY19hbHBoYTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgZGVzdF9hbHBoYV9zY2FuICsrOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7CisgICAgICAgICpkZXN0X2FscGhhX3NjYW4rKyA9IGRlc3RfYWxwaGE7CisgICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvIGRlc3RfYWxwaGE7CisgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfZ3JheSwgYWxwaGFfcmF0aW8pOworICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgfQorfQordm9pZCBfQ29tcG9zaXRlUm93X0JpdE1hc2syQXJnYihGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgbWFza19hbHBoYSwgaW50IHNyY19yLCBpbnQgc3JjX2csIGludCBzcmNfYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19sZWZ0LCBpbnQgcGl4ZWxfY291bnQsIGludCBibGVuZF90eXBlLCBGWF9MUENCWVRFIGNsaXBfc2NhbikKK3sKKyAgICBpZiAoYmxlbmRfdHlwZSA9PSBGWERJQl9CTEVORF9OT1JNQUwgJiYgY2xpcF9zY2FuID09IE5VTEwgJiYgbWFza19hbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgRlhfQVJHQiBhcmdiID0gRlhBUkdCX01BS0UoMHhmZiwgc3JjX3IsIHNyY19nLCBzcmNfYik7CisgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgICAgIGlmIChzcmNfc2Nhblsoc3JjX2xlZnQgKyBjb2wpIC8gOF0gJiAoMSA8PCAoNyAtIChzcmNfbGVmdCArIGNvbCkgJSA4KSkpIHsKKyAgICAgICAgICAgICAgICBGWEFSR0JfU0VURElCKGRlc3Rfc2NhbiwgYXJnYik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgaWYgKCEoc3JjX3NjYW5bKHNyY19sZWZ0ICsgY29sKSAvIDhdICYgKDEgPDwgKDcgLSAoc3JjX2xlZnQgKyBjb2wpICUgOCkpKSkgeworICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpbnQgc3JjX2FscGhhOworICAgICAgICBpZiAoY2xpcF9zY2FuKSB7CisgICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhICogY2xpcF9zY2FuW2NvbF0gLyAyNTU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhOworICAgICAgICB9CisgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9IGRlc3Rfc2NhblszXTsKKyAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgRlhBUkdCX1NFVERJQihkZXN0X3NjYW4sIEZYQVJHQl9NQUtFKHNyY19hbHBoYSwgc3JjX3IsIHNyY19nLCBzcmNfYikpOworICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgZGVzdF9zY2FuWzNdID0gZGVzdF9hbHBoYTsKKyAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsKKyAgICAgICAgaWYgKGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFKSB7CisgICAgICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcnNbM107CisgICAgICAgICAgICBGWF9CWVRFIHNyY19zY2FuWzNdOworICAgICAgICAgICAgc3JjX3NjYW5bMF0gPSBzcmNfYjsKKyAgICAgICAgICAgIHNyY19zY2FuWzFdID0gc3JjX2c7CisgICAgICAgICAgICBzcmNfc2NhblsyXSA9IHNyY19yOworICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9ycyk7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnNbMF0sIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9yc1sxXSwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzWzJdLCBhbHBoYV9yYXRpbyk7CisgICAgICAgIH0gZWxzZSBpZiAoYmxlbmRfdHlwZSkgeworICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX2IpOworICAgICAgICAgICAgYmxlbmRlZCA9IEZYRElCX0FMUEhBX01FUkdFKHNyY19iLCBibGVuZGVkLCBiYWNrX2FscGhhKTsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICBibGVuZGVkID0gX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sIHNyY19nKTsKKyAgICAgICAgICAgIGJsZW5kZWQgPSBGWERJQl9BTFBIQV9NRVJHRShzcmNfZywgYmxlbmRlZCwgYmFja19hbHBoYSk7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZCwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgYmxlbmRlZCA9IF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCBzcmNfcik7CisgICAgICAgICAgICBibGVuZGVkID0gRlhESUJfQUxQSEFfTUVSR0Uoc3JjX3IsIGJsZW5kZWQsIGJhY2tfYWxwaGEpOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWQsIGFscGhhX3JhdGlvKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfYiwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19nLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX3IsIGFscGhhX3JhdGlvKTsKKyAgICAgICAgfQorICAgICAgICBkZXN0X3NjYW4gKz0gMjsKKyAgICB9Cit9Cit2b2lkIF9Db21wb3NpdGVSb3dfQml0TWFzazJSZ2JhKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCBtYXNrX2FscGhhLCBpbnQgc3JjX3IsIGludCBzcmNfZywgaW50IHNyY19iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2xlZnQsIGludCBwaXhlbF9jb3VudCwgaW50IGJsZW5kX3R5cGUsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9hbHBoYV9zY2FuKQoreworICAgIGlmIChibGVuZF90eXBlID09IEZYRElCX0JMRU5EX05PUk1BTCAmJiBjbGlwX3NjYW4gPT0gTlVMTCAmJiBtYXNrX2FscGhhID09IDI1NSkgeworICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7CisgICAgICAgICAgICBpZiAoc3JjX3NjYW5bKHNyY19sZWZ0ICsgY29sKSAvIDhdICYgKDEgPDwgKDcgLSAoc3JjX2xlZnQgKyBjb2wpICUgOCkpKSB7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gc3JjX2I7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gc3JjX2c7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gc3JjX3I7CisgICAgICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiA9IG1hc2tfYWxwaGE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXN0X3NjYW4gKz0gMzsKKyAgICAgICAgICAgIGRlc3RfYWxwaGFfc2NhbiArKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgaWYgKCEoc3JjX3NjYW5bKHNyY19sZWZ0ICsgY29sKSAvIDhdICYgKDEgPDwgKDcgLSAoc3JjX2xlZnQgKyBjb2wpICUgOCkpKSkgeworICAgICAgICAgICAgZGVzdF9zY2FuICs9IDM7CisgICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4gKys7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpbnQgc3JjX2FscGhhOworICAgICAgICBpZiAoY2xpcF9zY2FuKSB7CisgICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhICogY2xpcF9zY2FuW2NvbF0gLyAyNTU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhOworICAgICAgICB9CisgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9IGRlc3Rfc2NhblszXTsKKyAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgKmRlc3Rfc2NhbiArKyA9IHNyY19iOworICAgICAgICAgICAgKmRlc3Rfc2NhbiArKyA9IHNyY19nOworICAgICAgICAgICAgKmRlc3Rfc2NhbiArKyA9IHNyY19yOworICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiArKyA9IG1hc2tfYWxwaGE7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiArKyA9IGRlc3RfYWxwaGE7CisgICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvIGRlc3RfYWxwaGE7CisgICAgICAgIGlmIChibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRSkgeworICAgICAgICAgICAgaW50IGJsZW5kZWRfY29sb3JzWzNdOworICAgICAgICAgICAgRlhfQllURSBzcmNfc2NhblszXTsKKyAgICAgICAgICAgIHNyY19zY2FuWzBdID0gc3JjX2I7CisgICAgICAgICAgICBzcmNfc2NhblsxXSA9IHNyY19nOworICAgICAgICAgICAgc3JjX3NjYW5bMl0gPSBzcmNfcjsKKyAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX3NjYW4sIGRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnMpOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWRfY29sb3JzWzBdLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnNbMV0sIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9yc1syXSwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICB9IGVsc2UgaWYgKGJsZW5kX3R5cGUpIHsKKyAgICAgICAgICAgIGludCBibGVuZGVkID0gX0JMRU5EKGJsZW5kX3R5cGUsICpkZXN0X3NjYW4sIHNyY19iKTsKKyAgICAgICAgICAgIGJsZW5kZWQgPSBGWERJQl9BTFBIQV9NRVJHRShzcmNfYiwgYmxlbmRlZCwgYmFja19hbHBoYSk7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZCwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgYmxlbmRlZCA9IF9CTEVORChibGVuZF90eXBlLCAqZGVzdF9zY2FuLCBzcmNfZyk7CisgICAgICAgICAgICBibGVuZGVkID0gRlhESUJfQUxQSEFfTUVSR0Uoc3JjX2csIGJsZW5kZWQsIGJhY2tfYWxwaGEpOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWQsIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgIGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX3IpOworICAgICAgICAgICAgYmxlbmRlZCA9IEZYRElCX0FMUEhBX01FUkdFKHNyY19yLCBibGVuZGVkLCBiYWNrX2FscGhhKTsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBibGVuZGVkLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2IsIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBzcmNfZywgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19yLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgIH0KKyAgICB9Cit9Cit2b2lkIF9Db21wb3NpdGVSb3dfQml0TWFzazJSZ2IoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IG1hc2tfYWxwaGEsIGludCBzcmNfciwgaW50IHNyY19nLCBpbnQgc3JjX2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19sZWZ0LCBpbnQgcGl4ZWxfY291bnQsIGludCBibGVuZF90eXBlLCBpbnQgQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbikKK3sKKyAgICBpZiAoYmxlbmRfdHlwZSA9PSBGWERJQl9CTEVORF9OT1JNQUwgJiYgY2xpcF9zY2FuID09IE5VTEwgJiYgbWFza19hbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgeworICAgICAgICAgICAgaWYgKHNyY19zY2FuWyhzcmNfbGVmdCArIGNvbCkgLyA4XSAmICgxIDw8ICg3IC0gKHNyY19sZWZ0ICsgY29sKSAlIDgpKSkgeworICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IHNyY19yOworICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IHNyY19nOworICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IHNyY19iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgaWYgKCEoc3JjX3NjYW5bKHNyY19sZWZ0ICsgY29sKSAvIDhdICYgKDEgPDwgKDcgLSAoc3JjX2xlZnQgKyBjb2wpICUgOCkpKSkgeworICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGludCBzcmNfYWxwaGE7CisgICAgICAgIGlmIChjbGlwX3NjYW4pIHsKKyAgICAgICAgICAgIHNyY19hbHBoYSA9IG1hc2tfYWxwaGEgKiBjbGlwX3NjYW5bY29sXSAvIDI1NTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNyY19hbHBoYSA9IG1hc2tfYWxwaGE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICBkZXN0X3NjYW4gKz0gQnBwOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFKSB7CisgICAgICAgICAgICBpbnQgYmxlbmRlZF9jb2xvcnNbM107CisgICAgICAgICAgICBGWF9CWVRFIHNyY19zY2FuWzNdOworICAgICAgICAgICAgc3JjX3NjYW5bMF0gPSBzcmNfYjsKKyAgICAgICAgICAgIHNyY19zY2FuWzFdID0gc3JjX2c7CisgICAgICAgICAgICBzcmNfc2NhblsyXSA9IHNyY19yOworICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuLCBibGVuZGVkX2NvbG9ycyk7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnNbMF0sIHNyY19hbHBoYSk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnNbMV0sIHNyY19hbHBoYSk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgYmxlbmRlZF9jb2xvcnNbMl0sIHNyY19hbHBoYSk7CisgICAgICAgIH0gZWxzZSBpZiAoYmxlbmRfdHlwZSkgeworICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX2IpOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWQsIHNyY19hbHBoYSk7CisgICAgICAgICAgICBkZXN0X3NjYW4rKzsKKyAgICAgICAgICAgIGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX2cpOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWQsIHNyY19hbHBoYSk7CisgICAgICAgICAgICBkZXN0X3NjYW4rKzsKKyAgICAgICAgICAgIGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgKmRlc3Rfc2Nhbiwgc3JjX3IpOworICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGJsZW5kZWQsIHNyY19hbHBoYSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2IsIHNyY19hbHBoYSk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2csIHNyY19hbHBoYSk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX3IsIHNyY19hbHBoYSk7CisgICAgICAgIH0KKyAgICAgICAgZGVzdF9zY2FuICs9IEJwcCAtIDI7CisgICAgfQorfQordm9pZCBfQ29tcG9zaXRlUm93X0JpdE1hc2syTWFzayhGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgbWFza19hbHBoYSwgaW50IHNyY19sZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxfY291bnQsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuKQoreworICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgaWYgKCEoc3JjX3NjYW5bKHNyY19sZWZ0ICsgY29sKSAvIDhdICYgKDEgPDwgKDcgLSAoc3JjX2xlZnQgKyBjb2wpICUgOCkpKSkgeworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaW50IHNyY19hbHBoYTsKKyAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYSAqIGNsaXBfc2Nhbltjb2xdIC8gMjU1OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYTsKKyAgICAgICAgfQorICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSAqZGVzdF9zY2FuOworICAgICAgICBpZiAoIWJhY2tfYWxwaGEpIHsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gPSBzcmNfYWxwaGE7CisgICAgICAgIH0gZWxzZSBpZiAoc3JjX2FscGhhKSB7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7CisgICAgICAgIH0KKyAgICAgICAgZGVzdF9zY2FuICsrOworICAgIH0KK30KK3ZvaWQgX0NvbXBvc2l0ZVJvd19CaXRNYXNrMkdyYXkoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IG1hc2tfYWxwaGEsIGludCBzcmNfZ3JheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19sZWZ0LCBpbnQgcGl4ZWxfY291bnQsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuKQoreworICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgaWYgKCEoc3JjX3NjYW5bKHNyY19sZWZ0ICsgY29sKSAvIDhdICYgKDEgPDwgKDcgLSAoc3JjX2xlZnQgKyBjb2wpICUgOCkpKSkgeworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaW50IHNyY19hbHBoYTsKKyAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYSAqIGNsaXBfc2Nhbltjb2xdIC8gMjU1OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3JjX2FscGhhKSB7CisgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2Nhbiwgc3JjX2dyYXksIHNyY19hbHBoYSk7CisgICAgICAgIH0KKyAgICAgICAgZGVzdF9zY2FuICsrOworICAgIH0KK30KK3ZvaWQgX0NvbXBvc2l0ZVJvd19CaXRNYXNrMkdyYXlhKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCBtYXNrX2FscGhhLCBpbnQgc3JjX2dyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2xlZnQsIGludCBwaXhlbF9jb3VudCwgRlhfTFBDQllURSBjbGlwX3NjYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9hbHBoYV9zY2FuKQoreworICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgaWYgKCEoc3JjX3NjYW5bKHNyY19sZWZ0ICsgY29sKSAvIDhdICYgKDEgPDwgKDcgLSAoc3JjX2xlZnQgKyBjb2wpICUgOCkpKSkgeworICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgZGVzdF9hbHBoYV9zY2FuICsrOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaW50IHNyY19hbHBoYTsKKyAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYSAqIGNsaXBfc2Nhbltjb2xdIC8gMjU1OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYTsKKyAgICAgICAgfQorICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSAqZGVzdF9hbHBoYV9zY2FuOworICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAqZGVzdF9zY2FuICsrID0gc3JjX2dyYXk7CisgICAgICAgICAgICAqZGVzdF9hbHBoYV9zY2FuICsrID0gc3JjX2FscGhhOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4gKys7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgKmRlc3RfYWxwaGFfc2NhbisrID0gZGVzdF9hbHBoYTsKKyAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsKKyAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIHNyY19ncmF5LCBhbHBoYV9yYXRpbyk7CisgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICB9Cit9Cit2b2lkIF9Db21wb3NpdGVSb3dfQXJnYjJBcmdiX1JnYkJ5dGVPcmRlcihGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgcGl4ZWxfY291bnQsIGludCBibGVuZF90eXBlLCBGWF9MUENCWVRFIGNsaXBfc2NhbikKK3sKKyAgICBpbnQgYmxlbmRlZF9jb2xvcnNbM107CisgICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsKKyAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7CisgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9IGRlc3Rfc2NhblszXTsKKyAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXSAqIHNyY19zY2FuWzNdIC8gMjU1OworICAgICAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IHNyY19hbHBoYTsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBzcmNfc2NhblsyXTsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBzcmNfc2NhblsxXTsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBzcmNfc2NhblswXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgRlhBUkdCX1JHQk9SREVSQ09QWShkZXN0X3NjYW4sIHNyY19zY2FuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEZYX0JZVEUgc3JjX2FscGhhOworICAgICAgICBpZiAoY2xpcF9zY2FuID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzNdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF0gKiBzcmNfc2NhblszXSAvIDI1NTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1OworICAgICAgICBkZXN0X3NjYW5bM10gPSBkZXN0X2FscGhhOworICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOworICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7CisgICAgICAgICAgICBGWF9CWVRFIGRlc3Rfc2Nhbl9vWzNdOworICAgICAgICAgICAgZGVzdF9zY2FuX29bMF0gPSBkZXN0X3NjYW5bMl07CisgICAgICAgICAgICBkZXN0X3NjYW5fb1sxXSA9IGRlc3Rfc2NhblsxXTsKKyAgICAgICAgICAgIGRlc3Rfc2Nhbl9vWzJdID0gZGVzdF9zY2FuWzBdOworICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuX28sIGJsZW5kZWRfY29sb3JzKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBjb2xvciA9IDA7IGNvbG9yIDwgMzsgY29sb3IgKyspIHsKKyAgICAgICAgICAgIGludCBpbmRleCA9IDIgLSBjb2xvcjsKKyAgICAgICAgICAgIGlmIChibGVuZF90eXBlKSB7CisgICAgICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBiTm9uc2VwYXJhYmxlQmxlbmQgPyBibGVuZGVkX2NvbG9yc1tjb2xvcl0gOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JMRU5EKGJsZW5kX3R5cGUsIGRlc3Rfc2NhbltpbmRleF0sICpzcmNfc2Nhbik7CisgICAgICAgICAgICAgICAgYmxlbmRlZCA9IEZYRElCX0FMUEhBX01FUkdFKCpzcmNfc2NhbiwgYmxlbmRlZCwgYmFja19hbHBoYSk7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2luZGV4XSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhbltpbmRleF0sIGJsZW5kZWQsIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2luZGV4XSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhbltpbmRleF0sICpzcmNfc2NhbiwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3JjX3NjYW4gKys7CisgICAgICAgIH0KKyAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgIHNyY19zY2FuKys7CisgICAgfQorfQordm9pZCBfQ29tcG9zaXRlUm93X1JnYjJBcmdiX0JsZW5kX05vQ2xpcF9SZ2JCeXRlT3JkZXIoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgYmxlbmRfdHlwZSwgaW50IHNyY19CcHApCit7CisgICAgaW50IGJsZW5kZWRfY29sb3JzWzNdOworICAgIEZYX0JPT0wgYk5vbnNlcGFyYWJsZUJsZW5kID0gYmxlbmRfdHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEU7CisgICAgaW50IHNyY19nYXAgPSBzcmNfQnBwIC0gMzsKKyAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9IGRlc3Rfc2NhblszXTsKKyAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgaWYgKHNyY19CcHAgPT0gNCkgeworICAgICAgICAgICAgICAgIEZYQVJHQl9TRVRSR0JPUkRFUkRJQihkZXN0X3NjYW4sIDB4ZmYwMDAwMDAgfCBGWEFSR0JfR0VURElCKHNyY19zY2FuKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEZYQVJHQl9TRVRSR0JPUkRFUkRJQihkZXN0X3NjYW4sIEZYQVJHQl9NQUtFKDB4ZmYsIHNyY19zY2FuWzJdLCBzcmNfc2NhblsxXSwgc3JjX3NjYW5bMF0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX0JwcDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGRlc3Rfc2NhblszXSA9IDB4ZmY7CisgICAgICAgIGlmIChiTm9uc2VwYXJhYmxlQmxlbmQpCXsKKyAgICAgICAgICAgIEZYX0JZVEUgZGVzdF9zY2FuX29bM107CisgICAgICAgICAgICBkZXN0X3NjYW5fb1swXSA9IGRlc3Rfc2NhblsyXTsKKyAgICAgICAgICAgIGRlc3Rfc2Nhbl9vWzFdID0gZGVzdF9zY2FuWzFdOworICAgICAgICAgICAgZGVzdF9zY2FuX29bMl0gPSBkZXN0X3NjYW5bMF07CisgICAgICAgICAgICBfUkdCX0JsZW5kKGJsZW5kX3R5cGUsIHNyY19zY2FuLCBkZXN0X3NjYW5fbywgYmxlbmRlZF9jb2xvcnMpOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGNvbG9yID0gMDsgY29sb3IgPCAzOyBjb2xvciArKykgeworICAgICAgICAgICAgaW50IGluZGV4ID0gMiAtIGNvbG9yOworICAgICAgICAgICAgaW50IHNyY19jb2xvciA9IEZYX0dBTU1BKCpzcmNfc2Nhbik7CisgICAgICAgICAgICBpbnQgYmxlbmRlZCA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3JzW2NvbG9yXSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgIF9CTEVORChibGVuZF90eXBlLCBkZXN0X3NjYW5baW5kZXhdLCBzcmNfY29sb3IpOworICAgICAgICAgICAgZGVzdF9zY2FuW2luZGV4XSA9IEZYRElCX0FMUEhBX01FUkdFKHNyY19jb2xvciwgYmxlbmRlZCwgYmFja19hbHBoYSk7CisgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgfQorICAgICAgICBkZXN0X3NjYW4gKz0gNDsKKyAgICAgICAgc3JjX3NjYW4gKz0gc3JjX2dhcDsKKyAgICB9Cit9CitpbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93X0FyZ2IyUmdiX0JsZW5kX1JnYkJ5dGVPcmRlcihGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBibGVuZF90eXBlLCBpbnQgZGVzdF9CcHAsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuKQoreworICAgIGludCBibGVuZGVkX2NvbG9yc1szXTsKKyAgICBGWF9CT09MIGJOb25zZXBhcmFibGVCbGVuZCA9IGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFOworICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgRlhfQllURSBzcmNfYWxwaGE7CisgICAgICAgIGlmIChjbGlwX3NjYW4pIHsKKyAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzNdICogKCpjbGlwX3NjYW4rKykgLyAyNTU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblszXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X0JwcDsKKyAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7CisgICAgICAgICAgICBGWF9CWVRFIGRlc3Rfc2Nhbl9vWzNdOworICAgICAgICAgICAgZGVzdF9zY2FuX29bMF0gPSBkZXN0X3NjYW5bMl07CisgICAgICAgICAgICBkZXN0X3NjYW5fb1sxXSA9IGRlc3Rfc2NhblsxXTsKKyAgICAgICAgICAgIGRlc3Rfc2Nhbl9vWzJdID0gZGVzdF9zY2FuWzBdOworICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuX28sIGJsZW5kZWRfY29sb3JzKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBjb2xvciA9IDA7IGNvbG9yIDwgMzsgY29sb3IgKyspIHsKKyAgICAgICAgICAgIGludCBpbmRleCA9IDIgLSBjb2xvcjsKKyAgICAgICAgICAgIGludCBiYWNrX2NvbG9yID0gRlhfR0FNTUEoZGVzdF9zY2FuW2luZGV4XSk7CisgICAgICAgICAgICBpbnQgYmxlbmRlZCA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3JzW2NvbG9yXSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgIF9CTEVORChibGVuZF90eXBlLCBiYWNrX2NvbG9yLCAqc3JjX3NjYW4pOworICAgICAgICAgICAgZGVzdF9zY2FuW2luZGV4XSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoYmFja19jb2xvciwgYmxlbmRlZCwgc3JjX2FscGhhKSk7CisgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgfQorICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9CcHA7CisgICAgICAgIHNyY19zY2FuICsrOworICAgIH0KK30KK2lubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfTm9CbGVuZF9Ob0NsaXBfUmdiQnl0ZU9yZGVyKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCB3aWR0aCwgaW50IHNyY19CcHApCit7CisgICAgaW50IHNyY19nYXAgPSBzcmNfQnBwIC0gMzsKKyAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgIGlmIChzcmNfQnBwID09IDQpIHsKKyAgICAgICAgICAgIEZYQVJHQl9TRVRSR0JPUkRFUkRJQihkZXN0X3NjYW4sIDB4ZmYwMDAwMDAgfCBGWEFSR0JfR0VURElCKHNyY19zY2FuKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBGWEFSR0JfU0VUUkdCT1JERVJESUIoZGVzdF9zY2FuLCBGWEFSR0JfTUFLRSgweGZmLCBzcmNfc2NhblsyXSwgc3JjX3NjYW5bMV0sIHNyY19zY2FuWzBdKSk7CisgICAgICAgIH0KKyAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7CisgICAgfQorfQoraW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd19SZ2IyUmdiX0JsZW5kX05vQ2xpcF9SZ2JCeXRlT3JkZXIoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgYmxlbmRfdHlwZSwgaW50IGRlc3RfQnBwLCBpbnQgc3JjX0JwcCkKK3sKKyAgICBpbnQgYmxlbmRlZF9jb2xvcnNbM107CisgICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsKKyAgICBpbnQgc3JjX2dhcCA9IHNyY19CcHAgLSAzOworICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgaWYgKGJOb25zZXBhcmFibGVCbGVuZCkgeworICAgICAgICAgICAgRlhfQllURSBkZXN0X3NjYW5fb1szXTsKKyAgICAgICAgICAgIGRlc3Rfc2Nhbl9vWzBdID0gZGVzdF9zY2FuWzJdOworICAgICAgICAgICAgZGVzdF9zY2FuX29bMV0gPSBkZXN0X3NjYW5bMV07CisgICAgICAgICAgICBkZXN0X3NjYW5fb1syXSA9IGRlc3Rfc2NhblswXTsKKyAgICAgICAgICAgIF9SR0JfQmxlbmQoYmxlbmRfdHlwZSwgc3JjX3NjYW4sIGRlc3Rfc2Nhbl9vLCBibGVuZGVkX2NvbG9ycyk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7CisgICAgICAgICAgICBpbnQgaW5kZXggPSAyIC0gY29sb3I7CisgICAgICAgICAgICBpbnQgYmFja19jb2xvciA9IEZYX0dBTU1BKGRlc3Rfc2NhbltpbmRleF0pOworICAgICAgICAgICAgaW50IHNyY19jb2xvciA9IEZYX0dBTU1BKCpzcmNfc2Nhbik7CisgICAgICAgICAgICBpbnQgYmxlbmRlZCA9IGJOb25zZXBhcmFibGVCbGVuZCA/IGJsZW5kZWRfY29sb3JzW2NvbG9yXSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgIF9CTEVORChibGVuZF90eXBlLCBiYWNrX2NvbG9yLCBzcmNfY29sb3IpOworICAgICAgICAgICAgZGVzdF9zY2FuW2luZGV4XSA9IEZYX0dBTU1BX0lOVkVSU0UoYmxlbmRlZCk7CisgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgfQorICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9CcHA7CisgICAgICAgIHNyY19zY2FuICs9IHNyY19nYXA7CisgICAgfQorfQoraW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd19BcmdiMlJnYl9Ob0JsZW5kX1JnYkJ5dGVPcmRlcihGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBkZXN0X0JwcCwgRlhfTFBDQllURSBjbGlwX3NjYW4pCit7CisgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICBGWF9CWVRFIHNyY19hbHBoYTsKKyAgICAgICAgaWYgKGNsaXBfc2NhbikgeworICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bM10gKiAoKmNsaXBfc2NhbisrKSAvIDI1NTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzNdOworICAgICAgICB9CisgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMjU1KSB7CisgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKCpzcmNfc2NhbisrKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoKnNyY19zY2FuKyspOworICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhfR0FNTUFfSU5WRVJTRSgqc3JjX3NjYW4rKyk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9CcHA7CisgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfQnBwOworICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGNvbG9yID0gMDsgY29sb3IgPCAzOyBjb2xvciArKykgeworICAgICAgICAgICAgaW50IGluZGV4ID0gMiAtIGNvbG9yOworICAgICAgICAgICAgZGVzdF9zY2FuW2luZGV4XSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuW2luZGV4XSksICpzcmNfc2Nhbiwgc3JjX2FscGhhKSk7CisgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgfQorICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9CcHA7CisgICAgICAgIHNyY19zY2FuICsrOworICAgIH0KK30KK2lubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9Ob0JsZW5kX05vQ2xpcF9SZ2JCeXRlT3JkZXIoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgZGVzdF9CcHAsIGludCBzcmNfQnBwKQoreworICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgZGVzdF9zY2FuWzJdID0gc3JjX3NjYW5bMF07CisgICAgICAgIGRlc3Rfc2NhblsxXSA9IHNyY19zY2FuWzFdOworICAgICAgICBkZXN0X3NjYW5bMF0gPSBzcmNfc2NhblsyXTsKKyAgICAgICAgZGVzdF9zY2FuICs9IGRlc3RfQnBwOworICAgICAgICBzcmNfc2NhbiArPSBzcmNfQnBwOworICAgIH0KK30KK2lubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfQmxlbmRfQ2xpcF9SZ2JCeXRlT3JkZXIoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgYmxlbmRfdHlwZSwgaW50IHNyY19CcHAsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuKQoreworICAgIGludCBibGVuZGVkX2NvbG9yc1szXTsKKyAgICBGWF9CT09MIGJOb25zZXBhcmFibGVCbGVuZCA9IGJsZW5kX3R5cGUgPj0gRlhESUJfQkxFTkRfTk9OU0VQQVJBQkxFOworICAgIGludCBzcmNfZ2FwID0gc3JjX0JwcCAtIDM7CisgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICBpbnQgc3JjX2FscGhhID0gKmNsaXBfc2NhbiArKzsKKyAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gZGVzdF9zY2FuWzNdOworICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQSgqc3JjX3NjYW4rKyk7CisgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQSgqc3JjX3NjYW4rKyk7CisgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQSgqc3JjX3NjYW4rKyk7CisgICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfZ2FwOworICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX0JwcDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1OworICAgICAgICBkZXN0X3NjYW5bM10gPSBkZXN0X2FscGhhOworICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOworICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7CisgICAgICAgICAgICBGWF9CWVRFIGRlc3Rfc2Nhbl9vWzNdOworICAgICAgICAgICAgZGVzdF9zY2FuX29bMF0gPSBkZXN0X3NjYW5bMl07CisgICAgICAgICAgICBkZXN0X3NjYW5fb1sxXSA9IGRlc3Rfc2NhblsxXTsKKyAgICAgICAgICAgIGRlc3Rfc2Nhbl9vWzJdID0gZGVzdF9zY2FuWzBdOworICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuX28sIGJsZW5kZWRfY29sb3JzKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBjb2xvciA9IDA7IGNvbG9yIDwgMzsgY29sb3IgKyspIHsKKyAgICAgICAgICAgIGludCBpbmRleCA9IDIgLSBjb2xvcjsKKyAgICAgICAgICAgIGludCBzcmNfY29sb3IgPSBGWF9HQU1NQSgqc3JjX3NjYW4pOworICAgICAgICAgICAgaW50IGJsZW5kZWQgPSBiTm9uc2VwYXJhYmxlQmxlbmQgPyBibGVuZGVkX2NvbG9yc1tjb2xvcl0gOgorICAgICAgICAgICAgICAgICAgICAgICAgICBfQkxFTkQoYmxlbmRfdHlwZSwgZGVzdF9zY2FuW2luZGV4XSwgc3JjX2NvbG9yKTsKKyAgICAgICAgICAgIGJsZW5kZWQgPSBGWERJQl9BTFBIQV9NRVJHRShzcmNfY29sb3IsIGJsZW5kZWQsIGJhY2tfYWxwaGEpOworICAgICAgICAgICAgZGVzdF9zY2FuW2luZGV4XSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhbltpbmRleF0sIGJsZW5kZWQsIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIHNyY19zY2FuICsrOworICAgICAgICB9CisgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICBzcmNfc2NhbiArPSBzcmNfZ2FwOworICAgIH0KK30KK2lubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9CbGVuZF9DbGlwX1JnYkJ5dGVPcmRlcihGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIGludCBibGVuZF90eXBlLCBpbnQgZGVzdF9CcHAsIGludCBzcmNfQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbikKK3sKKyAgICBpbnQgYmxlbmRlZF9jb2xvcnNbM107CisgICAgRlhfQk9PTCBiTm9uc2VwYXJhYmxlQmxlbmQgPSBibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRTsKKyAgICBpbnQgc3JjX2dhcCA9IHNyY19CcHAgLSAzOworICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgRlhfQllURSBzcmNfYWxwaGEgPSAqY2xpcF9zY2FuICsrOworICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X0JwcDsKKyAgICAgICAgICAgIHNyY19zY2FuICs9IHNyY19CcHA7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYk5vbnNlcGFyYWJsZUJsZW5kKSB7CisgICAgICAgICAgICBGWF9CWVRFIGRlc3Rfc2Nhbl9vWzNdOworICAgICAgICAgICAgZGVzdF9zY2FuX29bMF0gPSBkZXN0X3NjYW5bMl07CisgICAgICAgICAgICBkZXN0X3NjYW5fb1sxXSA9IGRlc3Rfc2NhblsxXTsKKyAgICAgICAgICAgIGRlc3Rfc2Nhbl9vWzJdID0gZGVzdF9zY2FuWzBdOworICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuX28sIGJsZW5kZWRfY29sb3JzKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBjb2xvciA9IDA7IGNvbG9yIDwgMzsgY29sb3IgKyspIHsKKyAgICAgICAgICAgIGludCBpbmRleCA9IDIgLSBjb2xvcjsKKyAgICAgICAgICAgIGludCBzcmNfY29sb3IgPSBGWF9HQU1NQSgqc3JjX3NjYW4pOworICAgICAgICAgICAgaW50IGJhY2tfY29sb3IgPSBGWF9HQU1NQShkZXN0X3NjYW5baW5kZXhdKTsKKyAgICAgICAgICAgIGludCBibGVuZGVkID0gYk5vbnNlcGFyYWJsZUJsZW5kID8gYmxlbmRlZF9jb2xvcnNbY29sb3JdIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX0JMRU5EKGJsZW5kX3R5cGUsIGJhY2tfY29sb3IsIHNyY19jb2xvcik7CisgICAgICAgICAgICBkZXN0X3NjYW5baW5kZXhdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShiYWNrX2NvbG9yLCBibGVuZGVkLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgIHNyY19zY2FuICsrOworICAgICAgICB9CisgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X0JwcDsKKyAgICAgICAgc3JjX3NjYW4gKz0gc3JjX2dhcDsKKyAgICB9Cit9CitpbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93X1JnYjJBcmdiX05vQmxlbmRfQ2xpcF9SZ2JCeXRlT3JkZXIoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgc3JjX0JwcCwgRlhfTFBDQllURSBjbGlwX3NjYW4pCit7CisgICAgaW50IHNyY19nYXAgPSBzcmNfQnBwIC0gMzsKKyAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgIGludCBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXTsKKyAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BKCpzcmNfc2NhbisrKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BKCpzcmNfc2NhbisrKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BKCpzcmNfc2NhbisrKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IDI1NTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICAgICAgc3JjX3NjYW4gICs9IHNyY19nYXA7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX0JwcDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGludCBiYWNrX2FscGhhID0gZGVzdF9zY2FuWzNdOworICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgZGVzdF9zY2FuWzNdID0gZGVzdF9hbHBoYTsKKyAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsKKyAgICAgICAgZm9yIChpbnQgY29sb3IgPSAwOyBjb2xvciA8IDM7IGNvbG9yICsrKSB7CisgICAgICAgICAgICBpbnQgaW5kZXggPSAyIC0gY29sb3I7CisgICAgICAgICAgICBkZXN0X3NjYW5baW5kZXhdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuW2luZGV4XSwgRlhfR0FNTUEoKnNyY19zY2FuKSwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgc3JjX3NjYW4gKys7CisgICAgICAgIH0KKyAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgIHNyY19zY2FuICs9IHNyY19nYXA7CisgICAgfQorfQoraW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd19SZ2IyUmdiX05vQmxlbmRfQ2xpcF9SZ2JCeXRlT3JkZXIoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBpbnQgZGVzdF9CcHAsIGludCBzcmNfQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbikKK3sKKyAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgIGludCBzcmNfYWxwaGEgPSBjbGlwX3NjYW5bY29sXTsKKyAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IHNyY19zY2FuWzBdOworICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gc3JjX3NjYW5bMV07CisgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBzcmNfc2NhblsyXTsKKyAgICAgICAgfSBlbHNlIGlmIChzcmNfYWxwaGEpIHsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzJdKSwgRlhfR0FNTUEoKnNyY19zY2FuKSwgc3JjX2FscGhhKSk7CisgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgRlhfR0FNTUEoKnNyY19zY2FuKSwgc3JjX2FscGhhKSk7CisgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgRlhfR0FNTUEoKnNyY19zY2FuKSwgc3JjX2FscGhhKSk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9CcHA7CisgICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfQnBwIC0gMjsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X0JwcDsKKyAgICAgICAgc3JjX3NjYW4gKz0gc3JjX0JwcDsKKyAgICB9Cit9CitpbmxpbmUgdm9pZCBfQ29tcG9zaXRlUm93XzhicHBSZ2IyUmdiX05vQmxlbmRfUmdiQnl0ZU9yZGVyKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIEZYX0FSR0IqIHBQYWxldHRlLCBpbnQgcGl4ZWxfY291bnQsCisgICAgICAgIGludCBEZXN0QnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbikKK3sKKyAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7CisgICAgICAgIEZYX0FSR0IgYXJnYiA9IHBQYWxldHRlID8gcFBhbGV0dGVbKnNyY19zY2FuXSA6ICgqc3JjX3NjYW4pICogMHgwMTAxMDE7CisgICAgICAgIGludCBzcmNfciA9IEZYQVJHQl9SKGFyZ2IpOworICAgICAgICBpbnQgc3JjX2cgPSBGWEFSR0JfRyhhcmdiKTsKKyAgICAgICAgaW50IHNyY19iID0gRlhBUkdCX0IoYXJnYik7CisgICAgICAgIGlmIChjbGlwX3NjYW4gJiYgY2xpcF9zY2FuW2NvbF0gPCAyNTUpIHsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsyXSwgc3JjX2IsIGNsaXBfc2Nhbltjb2xdKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsxXSwgc3JjX2csIGNsaXBfc2Nhbltjb2xdKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblswXSwgc3JjX3IsIGNsaXBfc2Nhbltjb2xdKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IHNyY19iOworICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gc3JjX2c7CisgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBzcmNfcjsKKyAgICAgICAgfQorICAgICAgICBkZXN0X3NjYW4gKz0gRGVzdEJwcDsKKyAgICAgICAgc3JjX3NjYW4gKys7CisgICAgfQorfQoraW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd18xYnBwUmdiMlJnYl9Ob0JsZW5kX1JnYkJ5dGVPcmRlcihGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgc3JjX2xlZnQsCisgICAgICAgIEZYX0FSR0IqIHBQYWxldHRlLCBpbnQgcGl4ZWxfY291bnQsIGludCBEZXN0QnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbikKK3sKKyAgICBpbnQgcmVzZXRfciwgcmVzZXRfZywgcmVzZXRfYjsKKyAgICBpbnQgc2V0X3IsIHNldF9nLCBzZXRfYjsKKyAgICBpZiAocFBhbGV0dGUpIHsKKyAgICAgICAgcmVzZXRfciA9IEZYQVJHQl9SKHBQYWxldHRlWzBdKTsKKyAgICAgICAgcmVzZXRfZyA9IEZYQVJHQl9HKHBQYWxldHRlWzBdKTsKKyAgICAgICAgcmVzZXRfYiA9IEZYQVJHQl9CKHBQYWxldHRlWzBdKTsKKyAgICAgICAgc2V0X3IgPSBGWEFSR0JfUihwUGFsZXR0ZVsxXSk7CisgICAgICAgIHNldF9nID0gRlhBUkdCX0cocFBhbGV0dGVbMV0pOworICAgICAgICBzZXRfYiA9IEZYQVJHQl9CKHBQYWxldHRlWzFdKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXNldF9yID0gcmVzZXRfZyA9IHJlc2V0X2IgPSAwOworICAgICAgICBzZXRfciA9IHNldF9nID0gc2V0X2IgPSAyNTU7CisgICAgfQorICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgaW50IHNyY19yLCBzcmNfZywgc3JjX2I7CisgICAgICAgIGlmIChzcmNfc2NhblsoY29sICsgc3JjX2xlZnQpIC8gOF0gJiAoMSA8PCAoNyAtIChjb2wgKyBzcmNfbGVmdCkgJSA4KSkpIHsKKyAgICAgICAgICAgIHNyY19yID0gc2V0X3I7CisgICAgICAgICAgICBzcmNfZyA9IHNldF9nOworICAgICAgICAgICAgc3JjX2IgPSBzZXRfYjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNyY19yID0gcmVzZXRfcjsKKyAgICAgICAgICAgIHNyY19nID0gcmVzZXRfZzsKKyAgICAgICAgICAgIHNyY19iID0gcmVzZXRfYjsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2xpcF9zY2FuICYmIGNsaXBfc2Nhbltjb2xdIDwgMjU1KSB7CisgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMl0sIHNyY19iLCBjbGlwX3NjYW5bY29sXSk7CisgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMV0sIHNyY19nLCBjbGlwX3NjYW5bY29sXSk7CisgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMF0sIHNyY19yLCBjbGlwX3NjYW5bY29sXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBzcmNfYjsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IHNyY19nOworICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gc3JjX3I7CisgICAgICAgIH0KKyAgICAgICAgZGVzdF9zY2FuICs9IERlc3RCcHA7CisgICAgfQorfQoraW5saW5lIHZvaWQgX0NvbXBvc2l0ZVJvd184YnBwUmdiMkFyZ2JfTm9CbGVuZF9SZ2JCeXRlT3JkZXIoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLAorICAgICAgICBGWF9BUkdCKiBwUGFsZXR0ZSwgRlhfTFBDQllURSBjbGlwX3NjYW4pCit7CisgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICBpbnQgc3JjX3IsIHNyY19nLCBzcmNfYjsKKyAgICAgICAgaWYgKHBQYWxldHRlKSB7CisgICAgICAgICAgICBGWF9BUkdCIGFyZ2IgPSBwUGFsZXR0ZVsqc3JjX3NjYW5dOworICAgICAgICAgICAgc3JjX3IgPSBGWEFSR0JfUihhcmdiKTsKKyAgICAgICAgICAgIHNyY19nID0gRlhBUkdCX0coYXJnYik7CisgICAgICAgICAgICBzcmNfYiA9IEZYQVJHQl9CKGFyZ2IpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3JjX3IgPSBzcmNfZyA9IHNyY19iID0gKnNyY19zY2FuOworICAgICAgICB9CisgICAgICAgIGlmIChjbGlwX3NjYW4gPT0gTlVMTCB8fCBjbGlwX3NjYW5bY29sXSA9PSAyNTUpIHsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BKHNyY19iKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BKHNyY19nKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BKHNyY19yKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IDI1NTsKKyAgICAgICAgICAgIHNyY19zY2FuICsrOworICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpbnQgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF07CisgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICBzcmNfc2NhbiArKzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGludCBiYWNrX2FscGhhID0gZGVzdF9zY2FuWzNdOworICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgZGVzdF9zY2FuWzNdID0gZGVzdF9hbHBoYTsKKyAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsKKyAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzJdLCBGWF9HQU1NQShzcmNfYiksIGFscGhhX3JhdGlvKTsKKyAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzFdLCBGWF9HQU1NQShzcmNfZyksIGFscGhhX3JhdGlvKTsKKyAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzBdLCBGWF9HQU1NQShzcmNfciksIGFscGhhX3JhdGlvKTsKKyAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgIHNyY19zY2FuICsrOworICAgIH0KK30KK2lubGluZSB2b2lkIF9Db21wb3NpdGVSb3dfMWJwcFJnYjJBcmdiX05vQmxlbmRfUmdiQnl0ZU9yZGVyKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCBzcmNfbGVmdCwgaW50IHdpZHRoLAorICAgICAgICBGWF9BUkdCKiBwUGFsZXR0ZSwgRlhfTFBDQllURSBjbGlwX3NjYW4pCit7CisgICAgaW50IHJlc2V0X3IsIHJlc2V0X2csIHJlc2V0X2I7CisgICAgaW50IHNldF9yLCBzZXRfZywgc2V0X2I7CisgICAgaWYgKHBQYWxldHRlKSB7CisgICAgICAgIHJlc2V0X3IgPSBGWEFSR0JfUihwUGFsZXR0ZVswXSk7CisgICAgICAgIHJlc2V0X2cgPSBGWEFSR0JfRyhwUGFsZXR0ZVswXSk7CisgICAgICAgIHJlc2V0X2IgPSBGWEFSR0JfQihwUGFsZXR0ZVswXSk7CisgICAgICAgIHNldF9yID0gRlhBUkdCX1IocFBhbGV0dGVbMV0pOworICAgICAgICBzZXRfZyA9IEZYQVJHQl9HKHBQYWxldHRlWzFdKTsKKyAgICAgICAgc2V0X2IgPSBGWEFSR0JfQihwUGFsZXR0ZVsxXSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVzZXRfciA9IHJlc2V0X2cgPSByZXNldF9iID0gMDsKKyAgICAgICAgc2V0X3IgPSBzZXRfZyA9IHNldF9iID0gMjU1OworICAgIH0KKyAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgIGludCBzcmNfciwgc3JjX2csIHNyY19iOworICAgICAgICBpZiAoc3JjX3NjYW5bKGNvbCArIHNyY19sZWZ0KSAvIDhdICYgKDEgPDwgKDcgLSAoY29sICsgc3JjX2xlZnQpICUgOCkpKSB7CisgICAgICAgICAgICBzcmNfciA9IHNldF9yOworICAgICAgICAgICAgc3JjX2cgPSBzZXRfZzsKKyAgICAgICAgICAgIHNyY19iID0gc2V0X2I7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzcmNfciA9IHJlc2V0X3I7CisgICAgICAgICAgICBzcmNfZyA9IHJlc2V0X2c7CisgICAgICAgICAgICBzcmNfYiA9IHJlc2V0X2I7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNsaXBfc2NhbiA9PSBOVUxMIHx8IGNsaXBfc2Nhbltjb2xdID09IDI1NSkgeworICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUEoc3JjX2IpOworICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUEoc3JjX2cpOworICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhfR0FNTUEoc3JjX3IpOworICAgICAgICAgICAgZGVzdF9zY2FuWzNdID0gMjU1OworICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpbnQgc3JjX2FscGhhID0gY2xpcF9zY2FuW2NvbF07CisgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpbnQgYmFja19hbHBoYSA9IGRlc3Rfc2NhblszXTsKKyAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGEgLyAyNTU7CisgICAgICAgIGRlc3Rfc2NhblszXSA9IGRlc3RfYWxwaGE7CisgICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvIGRlc3RfYWxwaGE7CisgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsyXSwgRlhfR0FNTUEoc3JjX2IpLCBhbHBoYV9yYXRpbyk7CisgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsxXSwgRlhfR0FNTUEoc3JjX2cpLCBhbHBoYV9yYXRpbyk7CisgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblswXSwgRlhfR0FNTUEoc3JjX3IpLCBhbHBoYV9yYXRpbyk7CisgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgIH0KK30KK3ZvaWQgX0NvbXBvc2l0ZVJvd19CeXRlTWFzazJBcmdiX1JnYkJ5dGVPcmRlcihGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgbWFza19hbHBoYSwgaW50IHNyY19yLCBpbnQgc3JjX2csIGludCBzcmNfYiwgaW50IHBpeGVsX2NvdW50LAorICAgICAgICBpbnQgYmxlbmRfdHlwZSwgRlhfTFBDQllURSBjbGlwX3NjYW4pCit7CisgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcGl4ZWxfY291bnQ7IGNvbCArKykgeworICAgICAgICBpbnQgc3JjX2FscGhhOworICAgICAgICBpZiAoY2xpcF9zY2FuKSB7CisgICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhICogY2xpcF9zY2FuW2NvbF0gKiBzcmNfc2Nhbltjb2xdIC8gMjU1IC8gMjU1OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3JjX2FscGhhID0gbWFza19hbHBoYSAqIHNyY19zY2FuW2NvbF0gLyAyNTU7CisgICAgICAgIH0KKyAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gZGVzdF9zY2FuWzNdOworICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICBGWEFSR0JfU0VUUkdCT1JERVJESUIoZGVzdF9zY2FuLCBGWEFSR0JfTUFLRShzcmNfYWxwaGEsIHNyY19yLCBzcmNfZywgc3JjX2IpKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNyY19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1OworICAgICAgICBkZXN0X3NjYW5bM10gPSBkZXN0X2FscGhhOworICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOworICAgICAgICBpZiAoYmxlbmRfdHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEUpIHsKKyAgICAgICAgICAgIGludCBibGVuZGVkX2NvbG9yc1szXTsKKyAgICAgICAgICAgIEZYX0JZVEUgc3JjX3NjYW5bM107CisgICAgICAgICAgICBGWF9CWVRFIGRlc3Rfc2Nhbl9vWzNdOworICAgICAgICAgICAgc3JjX3NjYW5bMF0gPSBzcmNfYjsKKyAgICAgICAgICAgIHNyY19zY2FuWzFdID0gc3JjX2c7CisgICAgICAgICAgICBzcmNfc2NhblsyXSA9IHNyY19yOworICAgICAgICAgICAgZGVzdF9zY2FuX29bMF0gPSBkZXN0X3NjYW5bMl07CisgICAgICAgICAgICBkZXN0X3NjYW5fb1sxXSA9IGRlc3Rfc2NhblsxXTsKKyAgICAgICAgICAgIGRlc3Rfc2Nhbl9vWzJdID0gZGVzdF9zY2FuWzBdOworICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuX28sIGJsZW5kZWRfY29sb3JzKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsyXSwgYmxlbmRlZF9jb2xvcnNbMF0sIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsxXSwgYmxlbmRlZF9jb2xvcnNbMV0sIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblswXSwgYmxlbmRlZF9jb2xvcnNbMl0sIGFscGhhX3JhdGlvKTsKKyAgICAgICAgfSBlbHNlIGlmIChibGVuZF90eXBlKSB7CisgICAgICAgICAgICBpbnQgYmxlbmRlZCA9IF9CTEVORChibGVuZF90eXBlLCBkZXN0X3NjYW5bMl0sIHNyY19iKTsKKyAgICAgICAgICAgIGJsZW5kZWQgPSBGWERJQl9BTFBIQV9NRVJHRShzcmNfYiwgYmxlbmRlZCwgYmFja19hbHBoYSk7CisgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMl0sIGJsZW5kZWQsIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgZGVzdF9zY2FuWzFdLCBzcmNfZyk7CisgICAgICAgICAgICBibGVuZGVkID0gRlhESUJfQUxQSEFfTUVSR0Uoc3JjX2csIGJsZW5kZWQsIGJhY2tfYWxwaGEpOworICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzFdLCBibGVuZGVkLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICBibGVuZGVkID0gX0JMRU5EKGJsZW5kX3R5cGUsIGRlc3Rfc2NhblswXSwgc3JjX3IpOworICAgICAgICAgICAgYmxlbmRlZCA9IEZYRElCX0FMUEhBX01FUkdFKHNyY19yLCBibGVuZGVkLCBiYWNrX2FscGhhKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblswXSwgYmxlbmRlZCwgYWxwaGFfcmF0aW8pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzJdLCBzcmNfYiwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzFdLCBzcmNfZywgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzBdLCBzcmNfciwgYWxwaGFfcmF0aW8pOworICAgICAgICB9CisgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgIH0KK30KK3ZvaWQgX0NvbXBvc2l0ZVJvd19CeXRlTWFzazJSZ2JfUmdiQnl0ZU9yZGVyKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCBtYXNrX2FscGhhLCBpbnQgc3JjX3IsIGludCBzcmNfZywgaW50IHNyY19iLCBpbnQgcGl4ZWxfY291bnQsCisgICAgICAgIGludCBibGVuZF90eXBlLCBpbnQgQnBwLCBGWF9MUENCWVRFIGNsaXBfc2NhbikKK3sKKyAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7CisgICAgICAgIGludCBzcmNfYWxwaGE7CisgICAgICAgIGlmIChjbGlwX3NjYW4pIHsKKyAgICAgICAgICAgIHNyY19hbHBoYSA9IG1hc2tfYWxwaGEgKiBjbGlwX3NjYW5bY29sXSAqIHNyY19zY2FuW2NvbF0gLyAyNTUgLyAyNTU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhICogc3JjX3NjYW5bY29sXSAvIDI1NTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3JjX2FscGhhID09IDApIHsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYmxlbmRfdHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEUpIHsKKyAgICAgICAgICAgIGludCBibGVuZGVkX2NvbG9yc1szXTsKKyAgICAgICAgICAgIEZYX0JZVEUgc3JjX3NjYW5bM107CisgICAgICAgICAgICBGWF9CWVRFIGRlc3Rfc2Nhbl9vWzNdOworICAgICAgICAgICAgc3JjX3NjYW5bMF0gPSBzcmNfYjsKKyAgICAgICAgICAgIHNyY19zY2FuWzFdID0gc3JjX2c7CisgICAgICAgICAgICBzcmNfc2NhblsyXSA9IHNyY19yOworICAgICAgICAgICAgZGVzdF9zY2FuX29bMF0gPSBkZXN0X3NjYW5bMl07CisgICAgICAgICAgICBkZXN0X3NjYW5fb1sxXSA9IGRlc3Rfc2NhblsxXTsKKyAgICAgICAgICAgIGRlc3Rfc2Nhbl9vWzJdID0gZGVzdF9zY2FuWzBdOworICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuX28sIGJsZW5kZWRfY29sb3JzKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsyXSwgYmxlbmRlZF9jb2xvcnNbMF0sIHNyY19hbHBoYSk7CisgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMV0sIGJsZW5kZWRfY29sb3JzWzFdLCBzcmNfYWxwaGEpOworICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzBdLCBibGVuZGVkX2NvbG9yc1syXSwgc3JjX2FscGhhKTsKKyAgICAgICAgfSBlbHNlIGlmIChibGVuZF90eXBlKSB7CisgICAgICAgICAgICBpbnQgYmxlbmRlZCA9IF9CTEVORChibGVuZF90eXBlLCBkZXN0X3NjYW5bMl0sIHNyY19iKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsyXSwgYmxlbmRlZCwgc3JjX2FscGhhKTsKKyAgICAgICAgICAgIGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgZGVzdF9zY2FuWzFdLCBzcmNfZyk7CisgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMV0sIGJsZW5kZWQsIHNyY19hbHBoYSk7CisgICAgICAgICAgICBibGVuZGVkID0gX0JMRU5EKGJsZW5kX3R5cGUsIGRlc3Rfc2NhblswXSwgc3JjX3IpOworICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzBdLCBibGVuZGVkLCBzcmNfYWxwaGEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzJdLCBzcmNfYiwgc3JjX2FscGhhKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsxXSwgc3JjX2csIHNyY19hbHBoYSk7CisgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMF0sIHNyY19yLCBzcmNfYWxwaGEpOworICAgICAgICB9CisgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7CisgICAgfQorfQordm9pZCBfQ29tcG9zaXRlUm93X0JpdE1hc2syQXJnYl9SZ2JCeXRlT3JkZXIoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IG1hc2tfYWxwaGEsIGludCBzcmNfciwgaW50IHNyY19nLCBpbnQgc3JjX2IsCisgICAgICAgIGludCBzcmNfbGVmdCwgaW50IHBpeGVsX2NvdW50LCBpbnQgYmxlbmRfdHlwZSwgRlhfTFBDQllURSBjbGlwX3NjYW4pCit7CisgICAgaWYgKGJsZW5kX3R5cGUgPT0gRlhESUJfQkxFTkRfTk9STUFMICYmIGNsaXBfc2NhbiA9PSBOVUxMICYmIG1hc2tfYWxwaGEgPT0gMjU1KSB7CisgICAgICAgIEZYX0FSR0IgYXJnYiA9IEZYQVJHQl9NQUtFKDB4ZmYsIHNyY19yLCBzcmNfZywgc3JjX2IpOworICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7CisgICAgICAgICAgICBpZiAoc3JjX3NjYW5bKHNyY19sZWZ0ICsgY29sKSAvIDhdICYgKDEgPDwgKDcgLSAoc3JjX2xlZnQgKyBjb2wpICUgOCkpKSB7CisgICAgICAgICAgICAgICAgRlhBUkdCX1NFVFJHQk9SREVSRElCKGRlc3Rfc2NhbiwgYXJnYik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgaWYgKCEoc3JjX3NjYW5bKHNyY19sZWZ0ICsgY29sKSAvIDhdICYgKDEgPDwgKDcgLSAoc3JjX2xlZnQgKyBjb2wpICUgOCkpKSkgeworICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpbnQgc3JjX2FscGhhOworICAgICAgICBpZiAoY2xpcF9zY2FuKSB7CisgICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhICogY2xpcF9zY2FuW2NvbF0gLyAyNTU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhOworICAgICAgICB9CisgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9IGRlc3Rfc2NhblszXTsKKyAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgRlhBUkdCX1NFVFJHQk9SREVSRElCKGRlc3Rfc2NhbiwgRlhBUkdCX01BS0Uoc3JjX2FscGhhLCBzcmNfciwgc3JjX2csIHNyY19iKSk7CisgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhIC8gMjU1OworICAgICAgICBkZXN0X3NjYW5bM10gPSBkZXN0X2FscGhhOworICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGEgKiAyNTUgLyBkZXN0X2FscGhhOworICAgICAgICBpZiAoYmxlbmRfdHlwZSA+PSBGWERJQl9CTEVORF9OT05TRVBBUkFCTEUpIHsKKyAgICAgICAgICAgIGludCBibGVuZGVkX2NvbG9yc1szXTsKKyAgICAgICAgICAgIEZYX0JZVEUgc3JjX3NjYW5bM107CisgICAgICAgICAgICBGWF9CWVRFIGRlc3Rfc2Nhbl9vWzNdOworICAgICAgICAgICAgc3JjX3NjYW5bMF0gPSBzcmNfYjsKKyAgICAgICAgICAgIHNyY19zY2FuWzFdID0gc3JjX2c7CisgICAgICAgICAgICBzcmNfc2NhblsyXSA9IHNyY19yOworICAgICAgICAgICAgZGVzdF9zY2FuX29bMF0gPSBkZXN0X3NjYW5bMl07CisgICAgICAgICAgICBkZXN0X3NjYW5fb1sxXSA9IGRlc3Rfc2NhblsxXTsKKyAgICAgICAgICAgIGRlc3Rfc2Nhbl9vWzJdID0gZGVzdF9zY2FuWzBdOworICAgICAgICAgICAgX1JHQl9CbGVuZChibGVuZF90eXBlLCBzcmNfc2NhbiwgZGVzdF9zY2FuX28sIGJsZW5kZWRfY29sb3JzKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsyXSwgYmxlbmRlZF9jb2xvcnNbMF0sIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsxXSwgYmxlbmRlZF9jb2xvcnNbMV0sIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblswXSwgYmxlbmRlZF9jb2xvcnNbMl0sIGFscGhhX3JhdGlvKTsKKyAgICAgICAgfSBlbHNlIGlmIChibGVuZF90eXBlKSB7CisgICAgICAgICAgICBpbnQgYmxlbmRlZCA9IF9CTEVORChibGVuZF90eXBlLCBkZXN0X3NjYW5bMl0sIHNyY19iKTsKKyAgICAgICAgICAgIGJsZW5kZWQgPSBGWERJQl9BTFBIQV9NRVJHRShzcmNfYiwgYmxlbmRlZCwgYmFja19hbHBoYSk7CisgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMl0sIGJsZW5kZWQsIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgIGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgZGVzdF9zY2FuWzFdLCBzcmNfZyk7CisgICAgICAgICAgICBibGVuZGVkID0gRlhESUJfQUxQSEFfTUVSR0Uoc3JjX2csIGJsZW5kZWQsIGJhY2tfYWxwaGEpOworICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzFdLCBibGVuZGVkLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICBibGVuZGVkID0gX0JMRU5EKGJsZW5kX3R5cGUsIGRlc3Rfc2NhblswXSwgc3JjX3IpOworICAgICAgICAgICAgYmxlbmRlZCA9IEZYRElCX0FMUEhBX01FUkdFKHNyY19yLCBibGVuZGVkLCBiYWNrX2FscGhhKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblswXSwgYmxlbmRlZCwgYWxwaGFfcmF0aW8pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzJdLCBzcmNfYiwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzFdLCBzcmNfZywgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzBdLCBzcmNfciwgYWxwaGFfcmF0aW8pOworICAgICAgICB9CisgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgIH0KK30KK3ZvaWQgX0NvbXBvc2l0ZVJvd19CaXRNYXNrMlJnYl9SZ2JCeXRlT3JkZXIoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IG1hc2tfYWxwaGEsIGludCBzcmNfciwgaW50IHNyY19nLCBpbnQgc3JjX2IsCisgICAgICAgIGludCBzcmNfbGVmdCwgaW50IHBpeGVsX2NvdW50LCBpbnQgYmxlbmRfdHlwZSwgaW50IEJwcCwgRlhfTFBDQllURSBjbGlwX3NjYW4pCit7CisgICAgaWYgKGJsZW5kX3R5cGUgPT0gRlhESUJfQkxFTkRfTk9STUFMICYmIGNsaXBfc2NhbiA9PSBOVUxMICYmIG1hc2tfYWxwaGEgPT0gMjU1KSB7CisgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHBpeGVsX2NvdW50OyBjb2wgKyspIHsKKyAgICAgICAgICAgIGlmIChzcmNfc2Nhblsoc3JjX2xlZnQgKyBjb2wpIC8gOF0gJiAoMSA8PCAoNyAtIChzcmNfbGVmdCArIGNvbCkgJSA4KSkpIHsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBzcmNfYjsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBzcmNfZzsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBzcmNfcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBwaXhlbF9jb3VudDsgY29sICsrKSB7CisgICAgICAgIGlmICghKHNyY19zY2FuWyhzcmNfbGVmdCArIGNvbCkgLyA4XSAmICgxIDw8ICg3IC0gKHNyY19sZWZ0ICsgY29sKSAlIDgpKSkpIHsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpbnQgc3JjX2FscGhhOworICAgICAgICBpZiAoY2xpcF9zY2FuKSB7CisgICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhICogY2xpcF9zY2FuW2NvbF0gLyAyNTU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzcmNfYWxwaGEgPSBtYXNrX2FscGhhOworICAgICAgICB9CisgICAgICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChibGVuZF90eXBlID49IEZYRElCX0JMRU5EX05PTlNFUEFSQUJMRSkgeworICAgICAgICAgICAgaW50IGJsZW5kZWRfY29sb3JzWzNdOworICAgICAgICAgICAgRlhfQllURSBzcmNfc2NhblszXTsKKyAgICAgICAgICAgIEZYX0JZVEUgZGVzdF9zY2FuX29bM107CisgICAgICAgICAgICBzcmNfc2NhblswXSA9IHNyY19iOworICAgICAgICAgICAgc3JjX3NjYW5bMV0gPSBzcmNfZzsKKyAgICAgICAgICAgIHNyY19zY2FuWzJdID0gc3JjX3I7CisgICAgICAgICAgICBkZXN0X3NjYW5fb1swXSA9IGRlc3Rfc2NhblsyXTsKKyAgICAgICAgICAgIGRlc3Rfc2Nhbl9vWzFdID0gZGVzdF9zY2FuWzFdOworICAgICAgICAgICAgZGVzdF9zY2FuX29bMl0gPSBkZXN0X3NjYW5bMF07CisgICAgICAgICAgICBfUkdCX0JsZW5kKGJsZW5kX3R5cGUsIHNyY19zY2FuLCBkZXN0X3NjYW5fbywgYmxlbmRlZF9jb2xvcnMpOworICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhESUJfQUxQSEFfTUVSR0UoZGVzdF9zY2FuWzJdLCBibGVuZGVkX2NvbG9yc1swXSwgc3JjX2FscGhhKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYRElCX0FMUEhBX01FUkdFKGRlc3Rfc2NhblsxXSwgYmxlbmRlZF9jb2xvcnNbMV0sIHNyY19hbHBoYSk7CisgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWERJQl9BTFBIQV9NRVJHRShkZXN0X3NjYW5bMF0sIGJsZW5kZWRfY29sb3JzWzJdLCBzcmNfYWxwaGEpOworICAgICAgICB9IGVsc2UgaWYgKGJsZW5kX3R5cGUpIHsKKyAgICAgICAgICAgIGludCBiYWNrX2NvbG9yID0gRlhfR0FNTUEoZGVzdF9zY2FuWzJdKTsKKyAgICAgICAgICAgIGludCBibGVuZGVkID0gX0JMRU5EKGJsZW5kX3R5cGUsIGJhY2tfY29sb3IsIHNyY19iKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoYmFja19jb2xvciwgYmxlbmRlZCwgc3JjX2FscGhhKSk7CisgICAgICAgICAgICBiYWNrX2NvbG9yID0gRlhfR0FNTUEoZGVzdF9zY2FuWzFdKTsKKyAgICAgICAgICAgIGJsZW5kZWQgPSBfQkxFTkQoYmxlbmRfdHlwZSwgYmFja19jb2xvciwgc3JjX2cpOworICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShiYWNrX2NvbG9yLCBibGVuZGVkLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgIGJhY2tfY29sb3IgPSBGWF9HQU1NQShkZXN0X3NjYW5bMF0pOworICAgICAgICAgICAgYmxlbmRlZCA9IF9CTEVORChibGVuZF90eXBlLCBiYWNrX2NvbG9yLCBzcmNfcik7CisgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKGJhY2tfY29sb3IsIGJsZW5kZWQsIHNyY19hbHBoYSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCBzcmNfYiwgc3JjX2FscGhhKSk7CisgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsxXSksIHNyY19nLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgc3JjX3IsIHNyY19hbHBoYSkpOworICAgICAgICB9CisgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7CisgICAgfQorfQoraW5saW5lIEZYX0JPT0wgX1NjYW5saW5lQ29tcG9zaXRvcl9Jbml0U291cmNlTWFzayhGWERJQl9Gb3JtYXQgZGVzdF9mb3JtYXQsIGludCBhbHBoYV9mbGFnLCBGWF9EV09SRCBtYXNrX2NvbG9yLCBpbnQmIG1hc2tfYWxwaGEsCisgICAgICAgIGludCYgbWFza19yZWQsIGludCYgbWFza19ncmVlbiwgaW50JiBtYXNrX2JsdWUsIGludCYgbWFza19ibGFjaywKKyAgICAgICAgdm9pZCogaWNjX21vZHVsZSwgdm9pZCogcEljY1RyYW5zZm9ybSkKK3sKKyAgICBJQ29kZWNfSWNjTW9kdWxlKiBwSWNjTW9kdWxlID0gKElDb2RlY19JY2NNb2R1bGUqKWljY19tb2R1bGU7CisgICAgaWYgKGFscGhhX2ZsYWcgPj4gOCkgeworICAgICAgICBtYXNrX2FscGhhID0gYWxwaGFfZmxhZyAmIDB4ZmY7CisgICAgICAgIG1hc2tfcmVkID0gRlhTWVNfR2V0Q1ZhbHVlKG1hc2tfY29sb3IpOworICAgICAgICBtYXNrX2dyZWVuID0gRlhTWVNfR2V0TVZhbHVlKG1hc2tfY29sb3IpOworICAgICAgICBtYXNrX2JsdWUgPSBGWFNZU19HZXRZVmFsdWUobWFza19jb2xvcik7CisgICAgICAgIG1hc2tfYmxhY2sgPSBGWFNZU19HZXRLVmFsdWUobWFza19jb2xvcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbWFza19hbHBoYSA9IEZYQVJHQl9BKG1hc2tfY29sb3IpOworICAgICAgICBtYXNrX3JlZCA9IEZYQVJHQl9SKG1hc2tfY29sb3IpOworICAgICAgICBtYXNrX2dyZWVuID0gRlhBUkdCX0cobWFza19jb2xvcik7CisgICAgICAgIG1hc2tfYmx1ZSA9IEZYQVJHQl9CKG1hc2tfY29sb3IpOworICAgIH0KKyAgICBpZiAoZGVzdF9mb3JtYXQgPT0gRlhESUJfOGJwcE1hc2spIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGlmICgoZGVzdF9mb3JtYXQgJiAweGZmKSA9PSA4KSB7CisgICAgICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7CisgICAgICAgICAgICBtYXNrX2NvbG9yID0gKGFscGhhX2ZsYWcgPj4gOCkgPyBGWENNWUtfVE9ESUIobWFza19jb2xvcikgOiBGWEFSR0JfVE9ESUIobWFza19jb2xvcik7CisgICAgICAgICAgICBGWF9MUEJZVEUgZ3JheV9wID0gKEZYX0xQQllURSkmbWFza19jb2xvcjsKKyAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGdyYXlfcCwgZ3JheV9wLCAxKTsKKyAgICAgICAgICAgIG1hc2tfcmVkID0gZGVzdF9mb3JtYXQgJiAweDA0MDAgPyBGWF9DQ09MT1IoZ3JheV9wWzBdKSA6IGdyYXlfcFswXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChhbHBoYV9mbGFnID4+IDgpIHsKKyAgICAgICAgICAgICAgICBGWF9CWVRFIHIsIGcsIGI7CisgICAgICAgICAgICAgICAgQWRvYmVDTVlLX3RvX3NSR0IxKG1hc2tfcmVkLCBtYXNrX2dyZWVuLCBtYXNrX2JsdWUsIG1hc2tfYmxhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIpOworICAgICAgICAgICAgICAgIG1hc2tfcmVkID0gRlhSR0IyR1JBWShyLCBnLCBiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWFza19yZWQgPSBGWFJHQjJHUkFZKG1hc2tfcmVkLCBtYXNrX2dyZWVuLCBtYXNrX2JsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlc3RfZm9ybWF0ICYgMHgwNDAwKSB7CisgICAgICAgICAgICAgICAgbWFza19yZWQgPSBGWF9DQ09MT1IobWFza19yZWQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgRlhfTFBCWVRFIG1hc2tfY29sb3JfcCA9IChGWF9MUEJZVEUpJm1hc2tfY29sb3I7CisgICAgICAgIG1hc2tfY29sb3IgPSAoYWxwaGFfZmxhZyA+PiA4KSA/IEZYQ01ZS19UT0RJQihtYXNrX2NvbG9yKSA6IEZYQVJHQl9UT0RJQihtYXNrX2NvbG9yKTsKKyAgICAgICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsKKyAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIG1hc2tfY29sb3JfcCwgbWFza19jb2xvcl9wLCAxKTsKKyAgICAgICAgICAgIG1hc2tfcmVkID0gbWFza19jb2xvcl9wWzJdOworICAgICAgICAgICAgbWFza19ncmVlbiA9IG1hc2tfY29sb3JfcFsxXTsKKyAgICAgICAgICAgIG1hc2tfYmx1ZSA9IG1hc2tfY29sb3JfcFswXTsKKyAgICAgICAgfSBlbHNlIGlmIChhbHBoYV9mbGFnID4+IDgpIHsKKyAgICAgICAgICAgIEFkb2JlQ01ZS190b19zUkdCMShtYXNrX2NvbG9yX3BbMF0sIG1hc2tfY29sb3JfcFsxXSwgbWFza19jb2xvcl9wWzJdLCBtYXNrX2NvbG9yX3BbM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza19jb2xvcl9wWzJdLCBtYXNrX2NvbG9yX3BbMV0sIG1hc2tfY29sb3JfcFswXSk7CisgICAgICAgICAgICBtYXNrX3JlZCA9IG1hc2tfY29sb3JfcFsyXTsKKyAgICAgICAgICAgIG1hc2tfZ3JlZW4gPSBtYXNrX2NvbG9yX3BbMV07CisgICAgICAgICAgICBtYXNrX2JsdWUgPSBtYXNrX2NvbG9yX3BbMF07CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitpbmxpbmUgdm9pZCBfU2NhbmxpbmVDb21wb3NpdG9yX0luaXRTb3VyY2VQYWxldHRlKEZYRElCX0Zvcm1hdCBzcmNfZm9ybWF0LCBGWERJQl9Gb3JtYXQgZGVzdF9mb3JtYXQsCisgICAgICAgIEZYX0RXT1JEKiYgcERlc3RQYWxldHRlLCBGWF9EV09SRCogcFNyY1BhbGV0dGUsCisgICAgICAgIHZvaWQqIGljY19tb2R1bGUsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IChJQ29kZWNfSWNjTW9kdWxlKilpY2NfbW9kdWxlOworICAgIEZYX0JPT0wgaXNTcmNDbXlrID0gc3JjX2Zvcm1hdCAmIDB4MDQwMCA/IFRSVUUgOiBGQUxTRTsKKyAgICBGWF9CT09MIGlzRHN0Q215ayA9IGRlc3RfZm9ybWF0ICYgMHgwNDAwID8gVFJVRSA6IEZBTFNFOworICAgIHBEZXN0UGFsZXR0ZSA9IE5VTEw7CisgICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsKKyAgICAgICAgaWYgKHBTcmNQYWxldHRlKSB7CisgICAgICAgICAgICBpZiAoKGRlc3RfZm9ybWF0ICYgMHhmZikgPT0gOCkgeworICAgICAgICAgICAgICAgIGludCBwYWxfY291bnQgPSAxIDw8IChzcmNfZm9ybWF0ICYgMHhmZik7CisgICAgICAgICAgICAgICAgRlhfTFBCWVRFIGdyYXlfcGFsID0gRlhfQWxsb2MoRlhfQllURSwgcGFsX2NvdW50KTsKKyAgICAgICAgICAgICAgICBpZiAoIWdyYXlfcGFsKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcERlc3RQYWxldHRlID0gKEZYX0RXT1JEKilncmF5X3BhbDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhbF9jb3VudDsgaSArKykgeworICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBjb2xvciA9IGlzU3JjQ215ayA/IEZYQ01ZS19UT0RJQihwU3JjUGFsZXR0ZVtpXSkgOiBGWEFSR0JfVE9ESUIocFNyY1BhbGV0dGVbaV0pOworICAgICAgICAgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBncmF5X3BhbCwgKEZYX0xQQ0JZVEUpJmNvbG9yLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgZ3JheV9wYWwgKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgcGFsc2l6ZSA9IDEgPDwgKHNyY19mb3JtYXQgJiAweGZmKTsKKyAgICAgICAgICAgICAgICBwRGVzdFBhbGV0dGUgPSBGWF9BbGxvYyhGWF9EV09SRCwgcGFsc2l6ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFwRGVzdFBhbGV0dGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhbHNpemU7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgY29sb3IgPSBpc1NyY0NteWsgPyBGWENNWUtfVE9ESUIocFNyY1BhbGV0dGVbaV0pIDogRlhBUkdCX1RPRElCKHBTcmNQYWxldHRlW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgKEZYX0xQQllURSkmY29sb3IsIChGWF9MUENCWVRFKSZjb2xvciwgMSk7CisgICAgICAgICAgICAgICAgICAgIHBEZXN0UGFsZXR0ZVtpXSA9IGlzRHN0Q215ayA/IEZYQ01ZS19UT0RJQihjb2xvcikgOiBGWEFSR0JfVE9ESUIoY29sb3IpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBwYWxfY291bnQgPSAxIDw8IChzcmNfZm9ybWF0ICYgMHhmZik7CisgICAgICAgICAgICBGWF9MUEJZVEUgZ3JheV9wYWwgPSBGWF9BbGxvYyhGWF9CWVRFLCBwYWxfY291bnQpOworICAgICAgICAgICAgaWYgKCFncmF5X3BhbCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwYWxfY291bnQgPT0gMikgeworICAgICAgICAgICAgICAgIGdyYXlfcGFsWzBdID0gMDsKKyAgICAgICAgICAgICAgICBncmF5X3BhbFsxXSA9IDI1NTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYWxfY291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBncmF5X3BhbFtpXSA9IGk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChkZXN0X2Zvcm1hdCAmIDB4ZmYpID09IDgpIHsKKyAgICAgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBncmF5X3BhbCwgZ3JheV9wYWwsIHBhbF9jb3VudCk7CisgICAgICAgICAgICAgICAgcERlc3RQYWxldHRlID0gKEZYX0RXT1JEKilncmF5X3BhbDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcERlc3RQYWxldHRlID0gRlhfQWxsb2MoRlhfRFdPUkQsIHBhbF9jb3VudCk7CisgICAgICAgICAgICAgICAgaWYgKCFwRGVzdFBhbGV0dGUpIHsKKyAgICAgICAgICAgICAgICAgICAgRlhfRnJlZShncmF5X3BhbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYWxfY291bnQ7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgKEZYX0xQQllURSkmcERlc3RQYWxldHRlW2ldLCAmZ3JheV9wYWxbaV0sIDEpOworICAgICAgICAgICAgICAgICAgICBwRGVzdFBhbGV0dGVbaV0gPSBpc0RzdENteWsgPyBGWENNWUtfVE9ESUIocERlc3RQYWxldHRlW2ldKSA6IEZYQVJHQl9UT0RJQihwRGVzdFBhbGV0dGVbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBGWF9GcmVlKGdyYXlfcGFsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChwU3JjUGFsZXR0ZSkgeworICAgICAgICAgICAgaWYgKChkZXN0X2Zvcm1hdCAmIDB4ZmYpID09IDgpIHsKKyAgICAgICAgICAgICAgICBpbnQgcGFsX2NvdW50ID0gMSA8PCAoc3JjX2Zvcm1hdCAmIDB4ZmYpOworICAgICAgICAgICAgICAgIEZYX0xQQllURSBncmF5X3BhbCA9IEZYX0FsbG9jKEZYX0JZVEUsIHBhbF9jb3VudCk7CisgICAgICAgICAgICAgICAgaWYgKCFncmF5X3BhbCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBEZXN0UGFsZXR0ZSA9IChGWF9EV09SRCopZ3JheV9wYWw7CisgICAgICAgICAgICAgICAgaWYgKGlzU3JjQ215aykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhbF9jb3VudDsgaSArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgRlhfQ01ZSyBjbXlrID0gcFNyY1BhbGV0dGVbaV07CisgICAgICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHIsIGcsIGI7CisgICAgICAgICAgICAgICAgICAgICAgICBBZG9iZUNNWUtfdG9fc1JHQjEoRlhTWVNfR2V0Q1ZhbHVlKGNteWspLCBGWFNZU19HZXRNVmFsdWUoY215ayksIEZYU1lTX0dldFlWYWx1ZShjbXlrKSwgRlhTWVNfR2V0S1ZhbHVlKGNteWspLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIpOworICAgICAgICAgICAgICAgICAgICAgICAgKmdyYXlfcGFsICsrID0gRlhSR0IyR1JBWShyLCBnLCBiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhbF9jb3VudDsgaSArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgRlhfQVJHQiBhcmdiID0gcFNyY1BhbGV0dGVbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAqZ3JheV9wYWwgKysgPSBGWFJHQjJHUkFZKEZYQVJHQl9SKGFyZ2IpLCBGWEFSR0JfRyhhcmdiKSwgRlhBUkdCX0IoYXJnYikpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGludCBwYWxzaXplID0gMSA8PCAoc3JjX2Zvcm1hdCAmIDB4ZmYpOworICAgICAgICAgICAgICAgIHBEZXN0UGFsZXR0ZSA9IEZYX0FsbG9jKEZYX0RXT1JELCBwYWxzaXplKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBEZXN0UGFsZXR0ZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpc0RzdENteWsgPT0gaXNTcmNDbXlrKSB7CisgICAgICAgICAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKHBEZXN0UGFsZXR0ZSwgcFNyY1BhbGV0dGUsIHBhbHNpemUgKiBzaXplb2YoRlhfRFdPUkQpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhbHNpemU7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZYX0NNWUsgY215ayA9IHBTcmNQYWxldHRlW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSByLCBnLCBiOworICAgICAgICAgICAgICAgICAgICAgICAgQWRvYmVDTVlLX3RvX3NSR0IxKEZYU1lTX0dldENWYWx1ZShjbXlrKSwgRlhTWVNfR2V0TVZhbHVlKGNteWspLCBGWFNZU19HZXRZVmFsdWUoY215ayksIEZYU1lTX0dldEtWYWx1ZShjbXlrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLCBnLCBiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBEZXN0UGFsZXR0ZVtpXSA9IEZYQVJHQl9NQUtFKDB4ZmYsIHIsIGcsIGIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKChkZXN0X2Zvcm1hdCAmIDB4ZmYpID09IDgpIHsKKyAgICAgICAgICAgICAgICBpbnQgcGFsX2NvdW50ID0gMSA8PCAoc3JjX2Zvcm1hdCAmIDB4ZmYpOworICAgICAgICAgICAgICAgIEZYX0xQQllURSBncmF5X3BhbCA9IEZYX0FsbG9jKEZYX0JZVEUsIHBhbF9jb3VudCk7CisgICAgICAgICAgICAgICAgaWYgKCFncmF5X3BhbCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChwYWxfY291bnQgPT0gMikgeworICAgICAgICAgICAgICAgICAgICBncmF5X3BhbFswXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGdyYXlfcGFsWzFdID0gMjU1OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFsX2NvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyYXlfcGFsW2ldID0gaTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwRGVzdFBhbGV0dGUgPSAoRlhfRFdPUkQqKWdyYXlfcGFsOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgcGFsc2l6ZSA9IDEgPDwgKHNyY19mb3JtYXQgJiAweGZmKTsKKyAgICAgICAgICAgICAgICBwRGVzdFBhbGV0dGUgPSBGWF9BbGxvYyhGWF9EV09SRCwgcGFsc2l6ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFwRGVzdFBhbGV0dGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocGFsc2l6ZSA9PSAyKSB7CisgICAgICAgICAgICAgICAgICAgIHBEZXN0UGFsZXR0ZVswXSA9IGlzU3JjQ215ayA/IDI1NSA6IDB4ZmYwMDAwMDA7CisgICAgICAgICAgICAgICAgICAgIHBEZXN0UGFsZXR0ZVsxXSA9IGlzU3JjQ215ayA/IDAgOiAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFsc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwRGVzdFBhbGV0dGVbaV0gPSBpc1NyY0NteWsgPyBGWF9DQ09MT1IoaSkgOiAoaSAqIDB4MTAxMDEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpc1NyY0NteWsgIT0gaXNEc3RDbXlrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFsc2l6ZTsgaSArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgRlhfQ01ZSyBjbXlrID0gcERlc3RQYWxldHRlW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSByLCBnLCBiOworICAgICAgICAgICAgICAgICAgICAgICAgQWRvYmVDTVlLX3RvX3NSR0IxKEZYU1lTX0dldENWYWx1ZShjbXlrKSwgRlhTWVNfR2V0TVZhbHVlKGNteWspLCBGWFNZU19HZXRZVmFsdWUoY215ayksIEZYU1lTX0dldEtWYWx1ZShjbXlrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLCBnLCBiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBEZXN0UGFsZXR0ZVtpXSA9IEZYQVJHQl9NQUtFKDB4ZmYsIHIsIGcsIGIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorQ0ZYX1NjYW5saW5lQ29tcG9zaXRvcjo6Q0ZYX1NjYW5saW5lQ29tcG9zaXRvcigpCit7CisgICAgbV9wU3JjUGFsZXR0ZSA9IE5VTEw7CisgICAgbV9wQ2FjaGVTY2FubGluZSA9IE5VTEw7CisgICAgbV9DYWNoZVNpemUgPSAwOworICAgIG1fYlJnYkJ5dGVPcmRlciA9IEZBTFNFOworICAgIG1fQmxlbmRUeXBlID0gRlhESUJfQkxFTkRfTk9STUFMOworfQorQ0ZYX1NjYW5saW5lQ29tcG9zaXRvcjo6fkNGWF9TY2FubGluZUNvbXBvc2l0b3IoKQoreworICAgIGlmIChtX3BTcmNQYWxldHRlKSB7CisgICAgICAgIEZYX0ZyZWUobV9wU3JjUGFsZXR0ZSk7CisgICAgfQorICAgIGlmIChtX3BDYWNoZVNjYW5saW5lKSB7CisgICAgICAgIEZYX0ZyZWUobV9wQ2FjaGVTY2FubGluZSk7CisgICAgfQorfQorRlhfQk9PTCBDRlhfU2NhbmxpbmVDb21wb3NpdG9yOjpJbml0KEZYRElCX0Zvcm1hdCBkZXN0X2Zvcm1hdCwgRlhESUJfRm9ybWF0IHNyY19mb3JtYXQsIEZYX0lOVDMyIHdpZHRoLCBGWF9EV09SRCogcFNyY1BhbGV0dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgbWFza19jb2xvciwgaW50IGJsZW5kX3R5cGUsIEZYX0JPT0wgYkNsaXAsIEZYX0JPT0wgYlJnYkJ5dGVPcmRlciwgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgbV9TcmNGb3JtYXQgPSBzcmNfZm9ybWF0OworICAgIG1fRGVzdEZvcm1hdCA9IGRlc3RfZm9ybWF0OworICAgIG1fQmxlbmRUeXBlID0gYmxlbmRfdHlwZTsKKyAgICBtX2JSZ2JCeXRlT3JkZXIgPSBiUmdiQnl0ZU9yZGVyOworICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBOVUxMOworICAgIGlmIChDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpKSB7CisgICAgICAgIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsKKyAgICB9CisgICAgaWYgKHBJY2NNb2R1bGUgPT0gTlVMTCkgeworICAgICAgICBwSWNjVHJhbnNmb3JtID0gTlVMTDsKKyAgICB9CisgICAgbV9wSWNjVHJhbnNmb3JtID0gcEljY1RyYW5zZm9ybTsKKyAgICBpZiAoKGRlc3RfZm9ybWF0ICYgMHhmZikgPT0gMSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChtX1NyY0Zvcm1hdCA9PSBGWERJQl8xYnBwTWFzayB8fCBtX1NyY0Zvcm1hdCA9PSBGWERJQl84YnBwTWFzaykgeworICAgICAgICByZXR1cm4gX1NjYW5saW5lQ29tcG9zaXRvcl9Jbml0U291cmNlTWFzayhkZXN0X2Zvcm1hdCwgYWxwaGFfZmxhZywgbWFza19jb2xvciwKKyAgICAgICAgICAgICAgICBtX01hc2tBbHBoYSwgbV9NYXNrUmVkLCBtX01hc2tHcmVlbiwgbV9NYXNrQmx1ZSwgbV9NYXNrQmxhY2ssCisgICAgICAgICAgICAgICAgcEljY01vZHVsZSwgcEljY1RyYW5zZm9ybSk7CisgICAgfQorICAgIGlmIChwSWNjVHJhbnNmb3JtID09IE5VTEwgJiYgKH5zcmNfZm9ybWF0ICYgMHgwNDAwKSAmJiAoZGVzdF9mb3JtYXQgJiAweDA0MDApKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKChtX1NyY0Zvcm1hdCAmIDB4ZmYpIDw9IDgpIHsKKyAgICAgICAgaWYgKGRlc3RfZm9ybWF0ID09IEZYRElCXzhicHBNYXNrKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBfU2NhbmxpbmVDb21wb3NpdG9yX0luaXRTb3VyY2VQYWxldHRlKHNyY19mb3JtYXQsIGRlc3RfZm9ybWF0LCBtX3BTcmNQYWxldHRlLCBwU3JjUGFsZXR0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwSWNjTW9kdWxlLCBwSWNjVHJhbnNmb3JtKTsKKyAgICAgICAgbV9UcmFuc3BhcmVuY3kgPSAoZGVzdF9mb3JtYXQgPT0gRlhESUJfQXJnYiA/IDEgOiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICsgKGRlc3RfZm9ybWF0ICYgMHgwMjAwID8gMiA6IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgKyAoZGVzdF9mb3JtYXQgJiAweDA0MDAgPyA0IDogMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICArICgoc3JjX2Zvcm1hdCAmIDB4ZmYpID09IDEgPyA4IDogMCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBtX1RyYW5zcGFyZW5jeSA9IChzcmNfZm9ybWF0ICYgMHgwMjAwID8gMCA6IDEpCisgICAgICAgICAgICAgICAgICAgICArIChkZXN0X2Zvcm1hdCAmIDB4MDIwMCA/IDAgOiAyKQorICAgICAgICAgICAgICAgICAgICAgKyAoYmxlbmRfdHlwZSA9PSBGWERJQl9CTEVORF9OT1JNQUwgPyA0IDogMCkKKyAgICAgICAgICAgICAgICAgICAgICsgKGJDbGlwID8gOCA6IDApCisgICAgICAgICAgICAgICAgICAgICArIChzcmNfZm9ybWF0ICYgMHgwNDAwID8gMTYgOiAwKQorICAgICAgICAgICAgICAgICAgICAgKyAoZGVzdF9mb3JtYXQgJiAweDA0MDAgPyAzMiA6IDApCisgICAgICAgICAgICAgICAgICAgICArIChwSWNjVHJhbnNmb3JtID8gNjQgOiAwKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK3ZvaWQgQ0ZYX1NjYW5saW5lQ29tcG9zaXRvcjo6Q29tcG9zaXRlUmdiQml0bWFwTGluZShGWF9MUEJZVEUgZGVzdF9zY2FuLCBGWF9MUENCWVRFIHNyY19zY2FuLCBpbnQgd2lkdGgsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLAorICAgICAgICBGWF9MUENCWVRFIHNyY19leHRyYV9hbHBoYSwgRlhfTFBCWVRFIGRzdF9leHRyYV9hbHBoYSkKK3sKKyAgICBpbnQgc3JjX0JwcCA9IChtX1NyY0Zvcm1hdCAmIDB4ZmYpID4+IDM7CisgICAgaW50IGRlc3RfQnBwID0gKG1fRGVzdEZvcm1hdCAmIDB4ZmYpID4+IDM7CisgICAgaW50IGRlc3RfU2l6ZSA9IHdpZHRoICogZGVzdF9CcHAgKyA0OworICAgIGlmIChtX2JSZ2JCeXRlT3JkZXIpIHsKKyAgICAgICAgc3dpdGNoIChtX1RyYW5zcGFyZW5jeSkgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgY2FzZSAxMjoKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X0FyZ2IyQXJnYl9SZ2JCeXRlT3JkZXIoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIG1fQmxlbmRUeXBlLCBjbGlwX3NjYW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfQmxlbmRfTm9DbGlwX1JnYkJ5dGVPcmRlcihkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgbV9CbGVuZFR5cGUsIHNyY19CcHApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgY2FzZSAxMDoKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X0FyZ2IyUmdiX0JsZW5kX1JnYkJ5dGVPcmRlcihkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgbV9CbGVuZFR5cGUsIGRlc3RfQnBwLCBjbGlwX3NjYW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9CbGVuZF9Ob0NsaXBfUmdiQnl0ZU9yZGVyKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBtX0JsZW5kVHlwZSwgZGVzdF9CcHAsIHNyY19CcHApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfTm9CbGVuZF9Ob0NsaXBfUmdiQnl0ZU9yZGVyKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBzcmNfQnBwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgIGNhc2UgMTQ6CisgICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19BcmdiMlJnYl9Ob0JsZW5kX1JnYkJ5dGVPcmRlcihkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgZGVzdF9CcHAsIGNsaXBfc2Nhbik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2IyUmdiX05vQmxlbmRfTm9DbGlwX1JnYkJ5dGVPcmRlcihkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgZGVzdF9CcHAsIHNyY19CcHApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA5OgorICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfQmxlbmRfQ2xpcF9SZ2JCeXRlT3JkZXIoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIG1fQmxlbmRUeXBlLCBzcmNfQnBwLCBjbGlwX3NjYW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxMToKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X1JnYjJSZ2JfQmxlbmRfQ2xpcF9SZ2JCeXRlT3JkZXIoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIG1fQmxlbmRUeXBlLCBkZXN0X0JwcCwgc3JjX0JwcCwgY2xpcF9zY2FuKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMTM6CisgICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2IyQXJnYl9Ob0JsZW5kX0NsaXBfUmdiQnl0ZU9yZGVyKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBzcmNfQnBwLCBjbGlwX3NjYW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxNToKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X1JnYjJSZ2JfTm9CbGVuZF9DbGlwX1JnYkJ5dGVPcmRlcihkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgZGVzdF9CcHAsIHNyY19CcHAsIGNsaXBfc2Nhbik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9EZXN0Rm9ybWF0ID09IEZYRElCXzhicHBNYXNrKSB7CisgICAgICAgIGlmIChtX1NyY0Zvcm1hdCAmIDB4MDIwMCkgeworICAgICAgICAgICAgaWYgKG1fU3JjRm9ybWF0ID09IEZYRElCX0FyZ2IpIHsKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X0FyZ2IyTWFzayhkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgY2xpcF9zY2FuKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2JhMk1hc2soZGVzdF9zY2FuLCBzcmNfZXh0cmFfYWxwaGEsIHdpZHRoLCBjbGlwX3NjYW4pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2IyTWFzayhkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgY2xpcF9zY2FuKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoKG1fRGVzdEZvcm1hdCAmIDB4ZmYpID09IDgpIHsKKyAgICAgICAgaWYgKG1fRGVzdEZvcm1hdCAmIDB4MDQwMCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsgaSArKykgeworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSB+KmRlc3Rfc2NhbjsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4rKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobV9TcmNGb3JtYXQgJiAweDAyMDApIHsKKyAgICAgICAgICAgIGlmIChtX0Rlc3RGb3JtYXQgJiAweDAyMDApIHsKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X0FyZ2IyR3JheWEoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIG1fQmxlbmRUeXBlLCBjbGlwX3NjYW4sIHNyY19leHRyYV9hbHBoYSwgZHN0X2V4dHJhX2FscGhhLCBtX3BJY2NUcmFuc2Zvcm0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X0FyZ2IyR3JheShkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgbV9CbGVuZFR5cGUsIGNsaXBfc2Nhbiwgc3JjX2V4dHJhX2FscGhhLCBtX3BJY2NUcmFuc2Zvcm0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fRGVzdEZvcm1hdCAmIDB4MDIwMCkgeworICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfUmdiMkdyYXlhKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHNyY19CcHAsIHdpZHRoLCBtX0JsZW5kVHlwZSwgY2xpcF9zY2FuLCBkc3RfZXh0cmFfYWxwaGEsIG1fcEljY1RyYW5zZm9ybSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfUmdiMkdyYXkoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgc3JjX0JwcCwgd2lkdGgsIG1fQmxlbmRUeXBlLCBjbGlwX3NjYW4sIG1fcEljY1RyYW5zZm9ybSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fRGVzdEZvcm1hdCAmIDB4MDQwMCkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB3aWR0aDsgaSArKykgeworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSB+KmRlc3Rfc2NhbjsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4rKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChkZXN0X1NpemUgPiBtX0NhY2hlU2l6ZSkgeworICAgICAgICAgICAgbV9wQ2FjaGVTY2FubGluZSA9IEZYX1JlYWxsb2MoRlhfQllURSwgbV9wQ2FjaGVTY2FubGluZSwgZGVzdF9TaXplKTsKKyAgICAgICAgICAgIGlmICghbV9wQ2FjaGVTY2FubGluZSkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fQ2FjaGVTaXplID0gZGVzdF9TaXplOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAobV9UcmFuc3BhcmVuY3kpIHsKKyAgICAgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIGNhc2UgNCs4OiB7CisgICAgICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfQXJnYjJBcmdiKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBtX0JsZW5kVHlwZSwgY2xpcF9zY2FuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RfZXh0cmFfYWxwaGEsIHNyY19leHRyYV9hbHBoYSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSA2NDoKKyAgICAgICAgICAgIGNhc2UgNCs2NDoKKyAgICAgICAgICAgIGNhc2UgOCs2NDoKKyAgICAgICAgICAgIGNhc2UgNCs4KzY0OiB7CisgICAgICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfQXJnYjJBcmdiX1RyYW5zZm9ybShkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgbV9CbGVuZFR5cGUsIGNsaXBfc2NhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdF9leHRyYV9hbHBoYSwgc3JjX2V4dHJhX2FscGhhLCBtX3BDYWNoZVNjYW5saW5lLCBtX3BJY2NUcmFuc2Zvcm0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X1JnYjJBcmdiX0JsZW5kX05vQ2xpcChkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgbV9CbGVuZFR5cGUsIHNyY19CcHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2V4dHJhX2FscGhhKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMSs2NDoKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X1JnYjJBcmdiX0JsZW5kX05vQ2xpcF9UcmFuc2Zvcm0oZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIG1fQmxlbmRUeXBlLCBzcmNfQnBwLAorICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2V4dHJhX2FscGhhLCBtX3BDYWNoZVNjYW5saW5lLCBtX3BJY2NUcmFuc2Zvcm0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxKzg6CisgICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2IyQXJnYl9CbGVuZF9DbGlwKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBtX0JsZW5kVHlwZSwgc3JjX0JwcCwgY2xpcF9zY2FuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RfZXh0cmFfYWxwaGEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxKzgrNjQ6CisgICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2IyQXJnYl9CbGVuZF9DbGlwX1RyYW5zZm9ybShkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgbV9CbGVuZFR5cGUsIHNyY19CcHAsIGNsaXBfc2NhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRzdF9leHRyYV9hbHBoYSwgbV9wQ2FjaGVTY2FubGluZSwgbV9wSWNjVHJhbnNmb3JtKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMSs0OgorICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfTm9CbGVuZF9Ob0NsaXAoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIHNyY19CcHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RfZXh0cmFfYWxwaGEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxKzQrNjQ6CisgICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2IyQXJnYl9Ob0JsZW5kX05vQ2xpcF9UcmFuc2Zvcm0oZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIHNyY19CcHAsCisgICAgICAgICAgICAgICAgICAgICAgICBkc3RfZXh0cmFfYWxwaGEsIG1fcENhY2hlU2NhbmxpbmUsIG1fcEljY1RyYW5zZm9ybSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDErNCs4OgorICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfUmdiMkFyZ2JfTm9CbGVuZF9DbGlwKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBzcmNfQnBwLCBjbGlwX3NjYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2V4dHJhX2FscGhhKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMSs0KzgrNjQ6CisgICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2IyQXJnYl9Ob0JsZW5kX0NsaXBfVHJhbnNmb3JtKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBzcmNfQnBwLCBjbGlwX3NjYW4sCisgICAgICAgICAgICAgICAgICAgICAgICBkc3RfZXh0cmFfYWxwaGEsIG1fcENhY2hlU2NhbmxpbmUsIG1fcEljY1RyYW5zZm9ybSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBjYXNlIDIrODoKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X0FyZ2IyUmdiX0JsZW5kKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBtX0JsZW5kVHlwZSwgZGVzdF9CcHAsIGNsaXBfc2NhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19leHRyYV9hbHBoYSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDIrNjQ6CisgICAgICAgICAgICBjYXNlIDIrOCs2NDoKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X0FyZ2IyUmdiX0JsZW5kX1RyYW5zZm9ybShkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgbV9CbGVuZFR5cGUsIGRlc3RfQnBwLCBjbGlwX3NjYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2V4dHJhX2FscGhhLCBtX3BDYWNoZVNjYW5saW5lLCBtX3BJY2NUcmFuc2Zvcm0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAyKzQ6CisgICAgICAgICAgICBjYXNlIDIrNCs4OgorICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfQXJnYjJSZ2JfTm9CbGVuZChkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgZGVzdF9CcHAsIGNsaXBfc2NhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2V4dHJhX2FscGhhKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMis0KzY0OgorICAgICAgICAgICAgY2FzZSAyKzQrOCs2NDoKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X0FyZ2IyUmdiX05vQmxlbmRfVHJhbnNmb3JtKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBkZXN0X0JwcCwgY2xpcF9zY2FuLAorICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2V4dHJhX2FscGhhLCBtX3BDYWNoZVNjYW5saW5lLCBtX3BJY2NUcmFuc2Zvcm0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxKzI6CisgICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2IyUmdiX0JsZW5kX05vQ2xpcChkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgbV9CbGVuZFR5cGUsIGRlc3RfQnBwLCBzcmNfQnBwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMSsyKzY0OgorICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9CbGVuZF9Ob0NsaXBfVHJhbnNmb3JtKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBtX0JsZW5kVHlwZSwgZGVzdF9CcHAsIHNyY19CcHAsCisgICAgICAgICAgICAgICAgICAgICAgICBtX3BDYWNoZVNjYW5saW5lLCBtX3BJY2NUcmFuc2Zvcm0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxKzIrODoKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X1JnYjJSZ2JfQmxlbmRfQ2xpcChkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgbV9CbGVuZFR5cGUsIGRlc3RfQnBwLCBzcmNfQnBwLCBjbGlwX3NjYW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxKzIrOCs2NDoKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X1JnYjJSZ2JfQmxlbmRfQ2xpcF9UcmFuc2Zvcm0oZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIG1fQmxlbmRUeXBlLCBkZXN0X0JwcCwgc3JjX0JwcCwgY2xpcF9zY2FuLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9wQ2FjaGVTY2FubGluZSwgbV9wSWNjVHJhbnNmb3JtKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMSsyKzQ6CisgICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19SZ2IyUmdiX05vQmxlbmRfTm9DbGlwKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBkZXN0X0JwcCwgc3JjX0JwcCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDErMis0KzY0OgorICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfUmdiMlJnYl9Ob0JsZW5kX05vQ2xpcF9UcmFuc2Zvcm0oZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIGRlc3RfQnBwLCBzcmNfQnBwLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9wQ2FjaGVTY2FubGluZSwgbV9wSWNjVHJhbnNmb3JtKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMSsyKzQrODoKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X1JnYjJSZ2JfTm9CbGVuZF9DbGlwKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoLCBkZXN0X0JwcCwgc3JjX0JwcCwgY2xpcF9zY2FuKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMSsyKzQrOCs2NDoKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93X1JnYjJSZ2JfTm9CbGVuZF9DbGlwX1RyYW5zZm9ybShkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgZGVzdF9CcHAsIHNyY19CcHAsIGNsaXBfc2NhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcENhY2hlU2NhbmxpbmUsIG1fcEljY1RyYW5zZm9ybSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9Cit2b2lkIENGWF9TY2FubGluZUNvbXBvc2l0b3I6OkNvbXBvc2l0ZVBhbEJpdG1hcExpbmUoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHNyY19sZWZ0LCBpbnQgd2lkdGgsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLAorICAgICAgICBGWF9MUENCWVRFIHNyY19leHRyYV9hbHBoYSwgRlhfTFBCWVRFIGRzdF9leHRyYV9hbHBoYSkKK3sKKyAgICBpZiAobV9iUmdiQnl0ZU9yZGVyKSB7CisgICAgICAgIGlmIChtX1NyY0Zvcm1hdCA9PSBGWERJQl8xYnBwUmdiKSB7CisgICAgICAgICAgICBpZiAobV9EZXN0Rm9ybWF0ID09IEZYRElCXzhicHBSZ2IpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9IGVsc2UgaWYobV9EZXN0Rm9ybWF0ID09IEZYRElCX0FyZ2IpIHsKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93XzFicHBSZ2IyQXJnYl9Ob0JsZW5kX1JnYkJ5dGVPcmRlcihkZXN0X3NjYW4sIHNyY19zY2FuLCBzcmNfbGVmdCwgd2lkdGgsIG1fcFNyY1BhbGV0dGUsIGNsaXBfc2Nhbik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfMWJwcFJnYjJSZ2JfTm9CbGVuZF9SZ2JCeXRlT3JkZXIoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgc3JjX2xlZnQsIG1fcFNyY1BhbGV0dGUsIHdpZHRoLCAobV9EZXN0Rm9ybWF0ICYgMHhmZikgPj4gMywgY2xpcF9zY2FuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX0Rlc3RGb3JtYXQgPT0gRlhESUJfOGJwcFJnYikgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9EZXN0Rm9ybWF0ID09IEZYRElCX0FyZ2IpIHsKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93XzhicHBSZ2IyQXJnYl9Ob0JsZW5kX1JnYkJ5dGVPcmRlcihkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgbV9wU3JjUGFsZXR0ZSwgY2xpcF9zY2FuKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd184YnBwUmdiMlJnYl9Ob0JsZW5kX1JnYkJ5dGVPcmRlcihkZXN0X3NjYW4sIHNyY19zY2FuLCBtX3BTcmNQYWxldHRlLCB3aWR0aCwgKG1fRGVzdEZvcm1hdCAmIDB4ZmYpID4+IDMsIGNsaXBfc2Nhbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9EZXN0Rm9ybWF0ID09IEZYRElCXzhicHBNYXNrKSB7CisgICAgICAgIF9Db21wb3NpdGVSb3dfUmdiMk1hc2soZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgsIGNsaXBfc2Nhbik7CisgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYgKChtX0Rlc3RGb3JtYXQgJiAweGZmKSA9PSA4KSB7CisgICAgICAgIGlmIChtX1RyYW5zcGFyZW5jeSAmIDgpIHsKKyAgICAgICAgICAgIGlmIChtX0Rlc3RGb3JtYXQgJiAweDAyMDApIHsKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93XzFicHBQYWwyR3JheWEoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgc3JjX2xlZnQsIChGWF9MUENCWVRFKW1fcFNyY1BhbGV0dGUsIHdpZHRoLCBtX0JsZW5kVHlwZSwgY2xpcF9zY2FuLCBkc3RfZXh0cmFfYWxwaGEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93XzFicHBQYWwyR3JheShkZXN0X3NjYW4sIHNyY19zY2FuLCBzcmNfbGVmdCwgKEZYX0xQQ0JZVEUpbV9wU3JjUGFsZXR0ZSwgd2lkdGgsIG1fQmxlbmRUeXBlLCBjbGlwX3NjYW4pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fRGVzdEZvcm1hdCAmIDB4MDIwMCkKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93XzhicHBQYWwyR3JheWEoZGVzdF9zY2FuLCBzcmNfc2NhbiwgKEZYX0xQQ0JZVEUpbV9wU3JjUGFsZXR0ZSwgd2lkdGgsIG1fQmxlbmRUeXBlLCBjbGlwX3NjYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdF9leHRyYV9hbHBoYSwgc3JjX2V4dHJhX2FscGhhKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93XzhicHBQYWwyR3JheShkZXN0X3NjYW4sIHNyY19zY2FuLCAoRlhfTFBDQllURSltX3BTcmNQYWxldHRlLCB3aWR0aCwgbV9CbGVuZFR5cGUsIGNsaXBfc2NhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfZXh0cmFfYWxwaGEpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNoIChtX1RyYW5zcGFyZW5jeSkgeworICAgICAgICAgICAgY2FzZSAxKzI6CisgICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd184YnBwUmdiMkFyZ2JfTm9CbGVuZChkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgbV9wU3JjUGFsZXR0ZSwgY2xpcF9zY2FuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2V4dHJhX2FscGhhKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMSsyKzg6CisgICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd18xYnBwUmdiMkFyZ2JfTm9CbGVuZChkZXN0X3NjYW4sIHNyY19zY2FuLCBzcmNfbGVmdCwgd2lkdGgsIG1fcFNyY1BhbGV0dGUsIGNsaXBfc2Nhbik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd184YnBwUmdiMlJnYl9Ob0JsZW5kKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIG1fcFNyY1BhbGV0dGUsIHdpZHRoLCAobV9EZXN0Rm9ybWF0ICYgMHhmZikgPj4gMywgY2xpcF9zY2FuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfZXh0cmFfYWxwaGEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAwKzg6CisgICAgICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd18xYnBwUmdiMlJnYl9Ob0JsZW5kKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHNyY19sZWZ0LCBtX3BTcmNQYWxldHRlLCB3aWR0aCwgKG1fRGVzdEZvcm1hdCAmIDB4ZmYpID4+IDMsIGNsaXBfc2Nhbik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDArMjoKKyAgICAgICAgICAgICAgICBfQ29tcG9zaXRlUm93XzhicHBSZ2IyUmdiX05vQmxlbmQoZGVzdF9zY2FuLCBzcmNfc2NhbiwgbV9wU3JjUGFsZXR0ZSwgd2lkdGgsIChtX0Rlc3RGb3JtYXQgJiAweGZmKSA+PiAzLCBjbGlwX3NjYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19leHRyYV9hbHBoYSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDArMis4OgorICAgICAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfMWJwcFJnYjJSZ2JhX05vQmxlbmQoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgc3JjX2xlZnQsIHdpZHRoLCBtX3BTcmNQYWxldHRlLCBjbGlwX3NjYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RfZXh0cmFfYWxwaGEpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQordm9pZCBDRlhfU2NhbmxpbmVDb21wb3NpdG9yOjpDb21wb3NpdGVCeXRlTWFza0xpbmUoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IHdpZHRoLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwKKyAgICAgICAgRlhfTFBCWVRFIGRzdF9leHRyYV9hbHBoYSkKK3sKKyAgICBpZiAobV9EZXN0Rm9ybWF0ID09IEZYRElCXzhicHBNYXNrKSB7CisgICAgICAgIF9Db21wb3NpdGVSb3dfQnl0ZU1hc2syTWFzayhkZXN0X3NjYW4sIHNyY19zY2FuLCBtX01hc2tBbHBoYSwgd2lkdGgsIGNsaXBfc2Nhbik7CisgICAgfSBlbHNlIGlmICgobV9EZXN0Rm9ybWF0ICYgMHhmZikgPT0gOCkgeworICAgICAgICBpZiAobV9EZXN0Rm9ybWF0ICYgMHgwMjAwKSB7CisgICAgICAgICAgICBfQ29tcG9zaXRlUm93X0J5dGVNYXNrMkdyYXlhKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIG1fTWFza0FscGhhLCBtX01hc2tSZWQsIHdpZHRoLCBjbGlwX3NjYW4sIGRzdF9leHRyYV9hbHBoYSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBfQ29tcG9zaXRlUm93X0J5dGVNYXNrMkdyYXkoZGVzdF9zY2FuLCBzcmNfc2NhbiwgbV9NYXNrQWxwaGEsIG1fTWFza1JlZCwgd2lkdGgsIGNsaXBfc2Nhbik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fYlJnYkJ5dGVPcmRlcikgeworICAgICAgICBpZiAobV9EZXN0Rm9ybWF0ID09IEZYRElCX0FyZ2IpCisgICAgICAgICAgICBfQ29tcG9zaXRlUm93X0J5dGVNYXNrMkFyZ2JfUmdiQnl0ZU9yZGVyKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIG1fTWFza0FscGhhLCBtX01hc2tSZWQsIG1fTWFza0dyZWVuLCBtX01hc2tCbHVlLAorICAgICAgICAgICAgICAgICAgICB3aWR0aCwgbV9CbGVuZFR5cGUsIGNsaXBfc2Nhbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfQnl0ZU1hc2syUmdiX1JnYkJ5dGVPcmRlcihkZXN0X3NjYW4sIHNyY19zY2FuLCBtX01hc2tBbHBoYSwgbV9NYXNrUmVkLCBtX01hc2tHcmVlbiwgbV9NYXNrQmx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgbV9CbGVuZFR5cGUsIChtX0Rlc3RGb3JtYXQgJiAweGZmKSA+PiAzLCBjbGlwX3NjYW4pOworICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChtX0Rlc3RGb3JtYXQgPT0gRlhESUJfQXJnYikKKyAgICAgICAgX0NvbXBvc2l0ZVJvd19CeXRlTWFzazJBcmdiKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIG1fTWFza0FscGhhLCBtX01hc2tSZWQsIG1fTWFza0dyZWVuLCBtX01hc2tCbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIG1fQmxlbmRUeXBlLCBjbGlwX3NjYW4pOworICAgIGVsc2UgaWYgKG1fRGVzdEZvcm1hdCA9PSBGWERJQl9SZ2IgfHwgbV9EZXN0Rm9ybWF0ID09IEZYRElCX1JnYjMyKQorICAgICAgICBfQ29tcG9zaXRlUm93X0J5dGVNYXNrMlJnYihkZXN0X3NjYW4sIHNyY19zY2FuLCBtX01hc2tBbHBoYSwgbV9NYXNrUmVkLCBtX01hc2tHcmVlbiwgbV9NYXNrQmx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIG1fQmxlbmRUeXBlLCAobV9EZXN0Rm9ybWF0ICYgMHhmZikgPj4gMywgY2xpcF9zY2FuKTsKKyAgICBlbHNlIGlmIChtX0Rlc3RGb3JtYXQgPT0gRlhESUJfUmdiYSkKKyAgICAgICAgX0NvbXBvc2l0ZVJvd19CeXRlTWFzazJSZ2JhKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIG1fTWFza0FscGhhLCBtX01hc2tSZWQsIG1fTWFza0dyZWVuLCBtX01hc2tCbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIG1fQmxlbmRUeXBlLCBjbGlwX3NjYW4sIGRzdF9leHRyYV9hbHBoYSk7Cit9Cit2b2lkIENGWF9TY2FubGluZUNvbXBvc2l0b3I6OkNvbXBvc2l0ZUJpdE1hc2tMaW5lKEZYX0xQQllURSBkZXN0X3NjYW4sIEZYX0xQQ0JZVEUgc3JjX3NjYW4sIGludCBzcmNfbGVmdCwgaW50IHdpZHRoLCBGWF9MUENCWVRFIGNsaXBfc2NhbiwKKyAgICAgICAgRlhfTFBCWVRFIGRzdF9leHRyYV9hbHBoYSkKK3sKKyAgICBpZiAobV9EZXN0Rm9ybWF0ID09IEZYRElCXzhicHBNYXNrKSB7CisgICAgICAgIF9Db21wb3NpdGVSb3dfQml0TWFzazJNYXNrKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIG1fTWFza0FscGhhLCBzcmNfbGVmdCwgd2lkdGgsIGNsaXBfc2Nhbik7CisgICAgfSBlbHNlIGlmICgobV9EZXN0Rm9ybWF0ICYgMHhmZikgPT0gOCkgeworICAgICAgICBpZiAobV9EZXN0Rm9ybWF0ICYgMHgwMjAwKQorICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19CaXRNYXNrMkdyYXlhKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIG1fTWFza0FscGhhLCBtX01hc2tSZWQsIHNyY19sZWZ0LCB3aWR0aCwgY2xpcF9zY2FuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdF9leHRyYV9hbHBoYSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19CaXRNYXNrMkdyYXkoZGVzdF9zY2FuLCBzcmNfc2NhbiwgbV9NYXNrQWxwaGEsIG1fTWFza1JlZCwgc3JjX2xlZnQsIHdpZHRoLCBjbGlwX3NjYW4pOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX2JSZ2JCeXRlT3JkZXIpIHsKKyAgICAgICAgaWYgKG1fRGVzdEZvcm1hdCA9PSBGWERJQl9BcmdiKQorICAgICAgICAgICAgX0NvbXBvc2l0ZVJvd19CaXRNYXNrMkFyZ2JfUmdiQnl0ZU9yZGVyKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIG1fTWFza0FscGhhLCBtX01hc2tSZWQsIG1fTWFza0dyZWVuLCBtX01hc2tCbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19sZWZ0LCB3aWR0aCwgbV9CbGVuZFR5cGUsIGNsaXBfc2Nhbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIF9Db21wb3NpdGVSb3dfQml0TWFzazJSZ2JfUmdiQnl0ZU9yZGVyKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIG1fTWFza0FscGhhLCBtX01hc2tSZWQsIG1fTWFza0dyZWVuLCBtX01hc2tCbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2xlZnQsIHdpZHRoLCBtX0JsZW5kVHlwZSwgKG1fRGVzdEZvcm1hdCAmIDB4ZmYpID4+IDMsIGNsaXBfc2Nhbik7CisgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYgKG1fRGVzdEZvcm1hdCA9PSBGWERJQl9BcmdiKQorICAgICAgICBfQ29tcG9zaXRlUm93X0JpdE1hc2syQXJnYihkZXN0X3NjYW4sIHNyY19zY2FuLCBtX01hc2tBbHBoYSwgbV9NYXNrUmVkLCBtX01hc2tHcmVlbiwgbV9NYXNrQmx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2xlZnQsIHdpZHRoLCBtX0JsZW5kVHlwZSwgY2xpcF9zY2FuKTsKKyAgICBlbHNlIGlmIChtX0Rlc3RGb3JtYXQgPT0gRlhESUJfUmdiIHx8IG1fRGVzdEZvcm1hdCA9PSBGWERJQl9SZ2IzMikKKyAgICAgICAgX0NvbXBvc2l0ZVJvd19CaXRNYXNrMlJnYihkZXN0X3NjYW4sIHNyY19zY2FuLCBtX01hc2tBbHBoYSwgbV9NYXNrUmVkLCBtX01hc2tHcmVlbiwgbV9NYXNrQmx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfbGVmdCwgd2lkdGgsIG1fQmxlbmRUeXBlLCAobV9EZXN0Rm9ybWF0ICYgMHhmZikgPj4gMywgY2xpcF9zY2FuKTsKK30KK0ZYX0JPT0wgQ0ZYX0RJQml0bWFwOjpDb21wb3NpdGVCaXRtYXAoaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibGVuZF90eXBlLCBjb25zdCBDRlhfQ2xpcFJnbiogcENsaXBSZ24sIEZYX0JPT0wgYlJnYkJ5dGVPcmRlciwgdm9pZCogcEljY1RyYW5zZm9ybSkKK3sKKyAgICBpZiAobV9wQnVmZmVyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBBU1NFUlQoIXBTcmNCaXRtYXAtPklzQWxwaGFNYXNrKCkpOworICAgIEFTU0VSVChtX2JwcCA+PSA4KTsKKyAgICBpZiAocFNyY0JpdG1hcC0+SXNBbHBoYU1hc2soKSB8fCBtX2JwcCA8IDgpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBHZXRPdmVybGFwUmVjdChkZXN0X2xlZnQsIGRlc3RfdG9wLCB3aWR0aCwgaGVpZ2h0LCBwU3JjQml0bWFwLT5HZXRXaWR0aCgpLCBwU3JjQml0bWFwLT5HZXRIZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICBzcmNfbGVmdCwgc3JjX3RvcCwgcENsaXBSZ24pOworICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBjb25zdCBDRlhfRElCaXRtYXAqIHBDbGlwTWFzayA9IE5VTEw7CisgICAgRlhfUkVDVCBjbGlwX2JveDsKKyAgICBpZiAocENsaXBSZ24gJiYgcENsaXBSZ24tPkdldFR5cGUoKSAhPSBDRlhfQ2xpcFJnbjo6UmVjdEkpIHsKKyAgICAgICAgQVNTRVJUKHBDbGlwUmduLT5HZXRUeXBlKCkgPT0gQ0ZYX0NsaXBSZ246Ok1hc2tGKTsKKyAgICAgICAgcENsaXBNYXNrID0gcENsaXBSZ24tPkdldE1hc2soKTsKKyAgICAgICAgY2xpcF9ib3ggPSBwQ2xpcFJnbi0+R2V0Qm94KCk7CisgICAgfQorICAgIENGWF9TY2FubGluZUNvbXBvc2l0b3IgY29tcG9zaXRvcjsKKyAgICBpZiAoIWNvbXBvc2l0b3IuSW5pdChHZXRGb3JtYXQoKSwgcFNyY0JpdG1hcC0+R2V0Rm9ybWF0KCksIHdpZHRoLCBwU3JjQml0bWFwLT5HZXRQYWxldHRlKCksIDAsIGJsZW5kX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgcENsaXBNYXNrICE9IE5VTEwsIGJSZ2JCeXRlT3JkZXIsIDAsIHBJY2NUcmFuc2Zvcm0pKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaW50IGRlc3RfQnBwID0gbV9icHAgLyA4OworICAgIGludCBzcmNfQnBwID0gcFNyY0JpdG1hcC0+R2V0QlBQKCkgLyA4OworICAgIEZYX0JPT0wgYlJnYiA9IEZBTFNFOworICAgIEZYX0JPT0wgYkNteWsgPSBGQUxTRTsKKyAgICBpZiAoc3JjX0JwcCA+IDEpIHsKKyAgICAgICAgaWYgKHBTcmNCaXRtYXAtPklzQ215a0ltYWdlKCkpIHsKKyAgICAgICAgICAgIGJDbXlrID0gVFJVRTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJSZ2IgPSBUUlVFOworICAgICAgICB9CisgICAgfQorICAgIENGWF9ESUJpdG1hcCogcFNyY0FscGhhTWFzayA9IHBTcmNCaXRtYXAtPm1fcEFscGhhTWFzazsKKyAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgeworICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gbV9wQnVmZmVyICsgKGRlc3RfdG9wICsgcm93KSAqIG1fUGl0Y2ggKyBkZXN0X2xlZnQgKiBkZXN0X0JwcDsKKyAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBTcmNCaXRtYXAtPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpICsgc3JjX2xlZnQgKiBzcmNfQnBwOworICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuX2V4dHJhX2FscGhhID0gcFNyY0FscGhhTWFzayA/IHBTcmNBbHBoYU1hc2stPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpICsgc3JjX2xlZnQgOiBOVUxMOworICAgICAgICBGWF9MUEJZVEUgZHN0X3NjYW5fZXh0cmFfYWxwaGEgPSBtX3BBbHBoYU1hc2sgPyAoRlhfTFBCWVRFKW1fcEFscGhhTWFzay0+R2V0U2NhbmxpbmUoZGVzdF90b3AgKyByb3cpICsgZGVzdF9sZWZ0IDogTlVMTDsKKyAgICAgICAgRlhfTFBDQllURSBjbGlwX3NjYW4gPSBOVUxMOworICAgICAgICBpZiAocENsaXBNYXNrKSB7CisgICAgICAgICAgICBjbGlwX3NjYW4gPSBwQ2xpcE1hc2stPm1fcEJ1ZmZlciArIChkZXN0X3RvcCArIHJvdyAtIGNsaXBfYm94LnRvcCkgKiBwQ2xpcE1hc2stPm1fUGl0Y2ggKyAoZGVzdF9sZWZ0IC0gY2xpcF9ib3gubGVmdCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJSZ2IpIHsKKyAgICAgICAgICAgIGNvbXBvc2l0b3IuQ29tcG9zaXRlUmdiQml0bWFwTGluZShkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCwgY2xpcF9zY2FuLCBzcmNfc2Nhbl9leHRyYV9hbHBoYSwgZHN0X3NjYW5fZXh0cmFfYWxwaGEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29tcG9zaXRvci5Db21wb3NpdGVQYWxCaXRtYXBMaW5lKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHNyY19sZWZ0LCB3aWR0aCwgY2xpcF9zY2FuLCBzcmNfc2Nhbl9leHRyYV9hbHBoYSwgZHN0X3NjYW5fZXh0cmFfYWxwaGEpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDRlhfRElCaXRtYXA6OkNvbXBvc2l0ZU1hc2soaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwTWFzaywgRlhfRFdPUkQgY29sb3IsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxlbmRfdHlwZSwgY29uc3QgQ0ZYX0NsaXBSZ24qIHBDbGlwUmduLCBGWF9CT09MIGJSZ2JCeXRlT3JkZXIsIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIGlmIChtX3BCdWZmZXIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEFTU0VSVChwTWFzay0+SXNBbHBoYU1hc2soKSk7CisgICAgQVNTRVJUKG1fYnBwID49IDgpOworICAgIGlmICghcE1hc2stPklzQWxwaGFNYXNrKCkgfHwgbV9icHAgPCA4KSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgR2V0T3ZlcmxhcFJlY3QoZGVzdF9sZWZ0LCBkZXN0X3RvcCwgd2lkdGgsIGhlaWdodCwgcE1hc2stPkdldFdpZHRoKCksIHBNYXNrLT5HZXRIZWlnaHQoKSwgc3JjX2xlZnQsIHNyY190b3AsIHBDbGlwUmduKTsKKyAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgaW50IHNyY19hbHBoYSA9IChGWF9CWVRFKShhbHBoYV9mbGFnID4+IDgpID8gKGFscGhhX2ZsYWcgJiAweGZmKSA6IEZYQVJHQl9BKGNvbG9yKTsKKyAgICBpZiAoc3JjX2FscGhhID09IDApIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGNvbnN0IENGWF9ESUJpdG1hcCogcENsaXBNYXNrID0gTlVMTDsKKyAgICBGWF9SRUNUIGNsaXBfYm94OworICAgIGlmIChwQ2xpcFJnbiAmJiBwQ2xpcFJnbi0+R2V0VHlwZSgpICE9IENGWF9DbGlwUmduOjpSZWN0SSkgeworICAgICAgICBBU1NFUlQocENsaXBSZ24tPkdldFR5cGUoKSA9PSBDRlhfQ2xpcFJnbjo6TWFza0YpOworICAgICAgICBwQ2xpcE1hc2sgPSBwQ2xpcFJnbi0+R2V0TWFzaygpOworICAgICAgICBjbGlwX2JveCA9IHBDbGlwUmduLT5HZXRCb3goKTsKKyAgICB9CisgICAgaW50IHNyY19icHAgPSBwTWFzay0+R2V0QlBQKCk7CisgICAgaW50IEJwcCA9IEdldEJQUCgpIC8gODsKKyAgICBDRlhfU2NhbmxpbmVDb21wb3NpdG9yIGNvbXBvc2l0b3I7CisgICAgaWYgKCFjb21wb3NpdG9yLkluaXQoR2V0Rm9ybWF0KCksIHBNYXNrLT5HZXRGb3JtYXQoKSwgd2lkdGgsIE5VTEwsIGNvbG9yLCBibGVuZF90eXBlLCBwQ2xpcE1hc2sgIT0gTlVMTCwgYlJnYkJ5dGVPcmRlciwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgeworICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gbV9wQnVmZmVyICsgKGRlc3RfdG9wICsgcm93KSAqIG1fUGl0Y2ggKyBkZXN0X2xlZnQgKiBCcHA7CisgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBwTWFzay0+R2V0U2NhbmxpbmUoc3JjX3RvcCArIHJvdyk7CisgICAgICAgIEZYX0xQQllURSBkc3Rfc2Nhbl9leHRyYV9hbHBoYSA9IG1fcEFscGhhTWFzayA/IChGWF9MUEJZVEUpbV9wQWxwaGFNYXNrLT5HZXRTY2FubGluZShkZXN0X3RvcCArIHJvdykgKyBkZXN0X2xlZnQgOiBOVUxMOworICAgICAgICBGWF9MUENCWVRFIGNsaXBfc2NhbiA9IE5VTEw7CisgICAgICAgIGlmIChwQ2xpcE1hc2spIHsKKyAgICAgICAgICAgIGNsaXBfc2NhbiA9IHBDbGlwTWFzay0+bV9wQnVmZmVyICsgKGRlc3RfdG9wICsgcm93IC0gY2xpcF9ib3gudG9wKSAqIHBDbGlwTWFzay0+bV9QaXRjaCArIChkZXN0X2xlZnQgLSBjbGlwX2JveC5sZWZ0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3JjX2JwcCA9PSAxKSB7CisgICAgICAgICAgICBjb21wb3NpdG9yLkNvbXBvc2l0ZUJpdE1hc2tMaW5lKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHNyY19sZWZ0LCB3aWR0aCwgY2xpcF9zY2FuLCBkc3Rfc2Nhbl9leHRyYV9hbHBoYSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb21wb3NpdG9yLkNvbXBvc2l0ZUJ5dGVNYXNrTGluZShkZXN0X3NjYW4sIHNyY19zY2FuICsgc3JjX2xlZnQsIHdpZHRoLCBjbGlwX3NjYW4sIGRzdF9zY2FuX2V4dHJhX2FscGhhKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0ZYX0RJQml0bWFwOjpDb21wb3NpdGVSZWN0KGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEZYX0RXT1JEIGNvbG9yLCBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSkKK3sKKyAgICBpZiAobV9wQnVmZmVyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpbnQgc3JjX2FscGhhID0gKGFscGhhX2ZsYWcgPj4gOCkgPyAoYWxwaGFfZmxhZyAmIDB4ZmYpIDogRlhBUkdCX0EoY29sb3IpOworICAgIGlmIChzcmNfYWxwaGEgPT0gMCkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgRlhfUkVDVCByZWN0KGxlZnQsIHRvcCwgbGVmdCArIHdpZHRoLCB0b3AgKyBoZWlnaHQpOworICAgIHJlY3QuSW50ZXJzZWN0KDAsIDAsIG1fV2lkdGgsIG1fSGVpZ2h0KTsKKyAgICBpZiAocmVjdC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHdpZHRoID0gcmVjdC5XaWR0aCgpOworICAgIEZYX0RXT1JEIGRzdF9jb2xvcjsKKyAgICBpZiAoYWxwaGFfZmxhZyA+PiA4KSB7CisgICAgICAgIGRzdF9jb2xvciA9IEZYQ01ZS19UT0RJQihjb2xvcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZHN0X2NvbG9yID0gRlhBUkdCX1RPRElCKGNvbG9yKTsKKyAgICB9CisgICAgRlhfTFBCWVRFIGNvbG9yX3AgPSAoRlhfTFBCWVRFKSZkc3RfY29sb3I7CisgICAgaWYgKG1fYnBwID09IDgpIHsKKyAgICAgICAgRlhfQllURSBncmF5ID0gMjU1OworICAgICAgICBpZiAoIUlzQWxwaGFNYXNrKCkpIHsKKyAgICAgICAgICAgIGlmIChwSWNjVHJhbnNmb3JtICYmIENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCkgJiYgQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCkpIHsKKyAgICAgICAgICAgICAgICBJQ29kZWNfSWNjTW9kdWxlKiBwSWNjTW9kdWxlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCk7CisgICAgICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgJmdyYXksIGNvbG9yX3AsIDEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoYWxwaGFfZmxhZyA+PiA4KSB7CisgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgciwgZywgYjsKKyAgICAgICAgICAgICAgICAgICAgQWRvYmVDTVlLX3RvX3NSR0IxKGNvbG9yX3BbMF0sIGNvbG9yX3BbMV0sIGNvbG9yX3BbMl0sIGNvbG9yX3BbM10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLCBnLCBiKTsKKyAgICAgICAgICAgICAgICAgICAgZ3JheSA9IEZYUkdCMkdSQVkociwgZywgYik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZ3JheSA9IChGWF9CWVRFKUZYUkdCMkdSQVkoKGludCljb2xvcl9wWzJdLCBjb2xvcl9wWzFdLCBjb2xvcl9wWzBdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoSXNDbXlrSW1hZ2UoKSkgeworICAgICAgICAgICAgICAgIGdyYXkgPSB+Z3JheTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCByb3cgPSByZWN0LnRvcDsgcm93IDwgcmVjdC5ib3R0b207IHJvdyArKykgeworICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IG1fcEJ1ZmZlciArIHJvdyAqIG1fUGl0Y2ggKyByZWN0LmxlZnQ7CisgICAgICAgICAgICBpZiAoc3JjX2FscGhhID09IDI1NSkgeworICAgICAgICAgICAgICAgIEZYU1lTX21lbXNldDgoZGVzdF9zY2FuLCBncmF5LCB3aWR0aCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBncmF5LCBzcmNfYWxwaGEpOworICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0gZWxzZSBpZiAobV9icHAgPT0gMSkgeworICAgICAgICBBU1NFUlQoIUlzQ215a0ltYWdlKCkgJiYgKEZYX0JZVEUpKGFscGhhX2ZsYWcgPj4gOCkgPT0gMCk7CisgICAgICAgIGludCBsZWZ0X3NoaWZ0ID0gcmVjdC5sZWZ0ICUgODsKKyAgICAgICAgaW50IHJpZ2h0X3NoaWZ0ID0gcmVjdC5yaWdodCAlIDg7CisgICAgICAgIGludCB3aWR0aCA9IHJlY3QucmlnaHQgLyA4IC0gcmVjdC5sZWZ0IC8gODsKKyAgICAgICAgaW50IGluZGV4ID0gMDsKKyAgICAgICAgaWYgKG1fcFBhbGV0dGUgPT0gTlVMTCkgeworICAgICAgICAgICAgaW5kZXggPSAoKEZYX0JZVEUpY29sb3IgPT0gMHhmZikgPyAxIDogMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSArKykKKyAgICAgICAgICAgICAgICBpZiAobV9wUGFsZXR0ZVtpXSA9PSBjb2xvcikgeworICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAoaW50IHJvdyA9IHJlY3QudG9wOyByb3cgPCByZWN0LmJvdHRvbTsgcm93ICsrKSB7CisgICAgICAgICAgICBGWF9CWVRFKiBkZXN0X3NjYW5fdG9wID0gKEZYX0JZVEUqKUdldFNjYW5saW5lKHJvdykgKyByZWN0LmxlZnQgLyA4OworICAgICAgICAgICAgRlhfQllURSogZGVzdF9zY2FuX3RvcF9yID0gKEZYX0JZVEUqKUdldFNjYW5saW5lKHJvdykgKyByZWN0LnJpZ2h0IC8gODsKKyAgICAgICAgICAgIEZYX0JZVEUgbGVmdF9mbGFnID0gICpkZXN0X3NjYW5fdG9wICYgKDI1NSA8PCAoOCAtIGxlZnRfc2hpZnQpKTsKKyAgICAgICAgICAgIEZYX0JZVEUgcmlnaHRfZmxhZyA9ICpkZXN0X3NjYW5fdG9wX3IgJiAoMjU1ID4+IHJpZ2h0X3NoaWZ0KTsKKyAgICAgICAgICAgIGlmICh3aWR0aCkgeworICAgICAgICAgICAgICAgIEZYU1lTX21lbXNldDgoZGVzdF9zY2FuX3RvcCArIDEsIGluZGV4ID8gMjU1IDogMCwgd2lkdGggLSAxKTsKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW5fdG9wICY9IGxlZnRfZmxhZzsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2Nhbl90b3BfciAmPSByaWdodF9mbGFnOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW5fdG9wIHw9IH5sZWZ0X2ZsYWc7CisgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW5fdG9wX3IgfD0gfnJpZ2h0X2ZsYWc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4KSB7CisgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW5fdG9wICY9IGxlZnRfZmxhZyB8IHJpZ2h0X2ZsYWc7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2Nhbl90b3AgfD0gfihsZWZ0X2ZsYWcgfCByaWdodF9mbGFnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIEFTU0VSVChtX2JwcCA+PSAyNCk7CisgICAgaWYgKG1fYnBwIDwgMjQpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAocEljY1RyYW5zZm9ybSAmJiBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpKSB7CisgICAgICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsKKyAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgY29sb3JfcCwgY29sb3JfcCwgMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGFscGhhX2ZsYWcgPj4gOCAmJiAhSXNDbXlrSW1hZ2UoKSkKKyAgICAgICAgICAgIEFkb2JlQ01ZS190b19zUkdCMShGWFNZU19HZXRDVmFsdWUoY29sb3IpLCBGWFNZU19HZXRNVmFsdWUoY29sb3IpLCBGWFNZU19HZXRZVmFsdWUoY29sb3IpLCBGWFNZU19HZXRLVmFsdWUoY29sb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yX3BbMl0sIGNvbG9yX3BbMV0sIGNvbG9yX3BbMF0pOworICAgICAgICBlbHNlIGlmICghKGFscGhhX2ZsYWcgPj4gOCkgJiYgSXNDbXlrSW1hZ2UoKSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgfQorICAgIGlmKCFJc0NteWtJbWFnZSgpKSB7CisgICAgICAgIGNvbG9yX3BbM10gPSAoRlhfQllURSlzcmNfYWxwaGE7CisgICAgfQorICAgIGludCBCcHAgPSBtX2JwcCAvIDg7CisgICAgRlhfQk9PTCBiQWxwaGEgPSBIYXNBbHBoYSgpOworICAgIEZYX0JPT0wgYkFyZ2IgPSBHZXRGb3JtYXQoKSA9PSBGWERJQl9BcmdiID8gVFJVRSA6IEZBTFNFOworICAgIGlmIChzcmNfYWxwaGEgPT0gMjU1KSB7CisgICAgICAgIGZvciAoaW50IHJvdyA9IHJlY3QudG9wOyByb3cgPCByZWN0LmJvdHRvbTsgcm93ICsrKSB7CisgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gbV9wQnVmZmVyICsgcm93ICogbV9QaXRjaCArIHJlY3QubGVmdCAqIEJwcDsKKyAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW5fYWxwaGEgPSBtX3BBbHBoYU1hc2sgPyAoRlhfTFBCWVRFKW1fcEFscGhhTWFzay0+R2V0U2NhbmxpbmUocm93KSArIHJlY3QubGVmdCA6IE5VTEw7CisgICAgICAgICAgICBpZiAoZGVzdF9zY2FuX2FscGhhKSB7CisgICAgICAgICAgICAgICAgRlhTWVNfbWVtc2V0OChkZXN0X3NjYW5fYWxwaGEsIDB4ZmYsIHdpZHRoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChCcHAgPT0gNCkgeworICAgICAgICAgICAgICAgIEZYX0RXT1JEKiBzY2FuID0gKEZYX0RXT1JEKilkZXN0X3NjYW47CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICAqc2NhbiArKyA9IGRzdF9jb2xvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiArKyA9IGNvbG9yX3BbMF07CisgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gKysgPSBjb2xvcl9wWzFdOworICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuICsrID0gY29sb3JfcFsyXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGZvciAoaW50IHJvdyA9IHJlY3QudG9wOyByb3cgPCByZWN0LmJvdHRvbTsgcm93ICsrKSB7CisgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBtX3BCdWZmZXIgKyByb3cgKiBtX1BpdGNoICsgcmVjdC5sZWZ0ICogQnBwOworICAgICAgICBpZiAoYkFscGhhKSB7CisgICAgICAgICAgICBpZiAoYkFyZ2IpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9IGRlc3Rfc2NhblszXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgRlhBUkdCX1NFVERJQihkZXN0X3NjYW4sIEZYQVJHQl9NQUtFKHNyY19hbHBoYSwgY29sb3JfcFsyXSwgY29sb3JfcFsxXSwgY29sb3JfcFswXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhICogMjU1IC8gZGVzdF9hbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IEZYRElCX0FMUEhBX01FUkdFKCpkZXN0X3NjYW4sIGNvbG9yX3BbMF0sIGFscGhhX3JhdGlvKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgY29sb3JfcFsxXSwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBjb2xvcl9wWzJdLCBhbHBoYV9yYXRpbyk7CisgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gZGVzdF9hbHBoYTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW5fYWxwaGEgPSAoRlhfTFBCWVRFKW1fcEFscGhhTWFzay0+R2V0U2NhbmxpbmUocm93KSArIHJlY3QubGVmdDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9ICpkZXN0X3NjYW5fYWxwaGE7CisgICAgICAgICAgICAgICAgICAgIGlmIChiYWNrX2FscGhhID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW5fYWxwaGErKyA9IHNyY19hbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKGRlc3Rfc2NhbiwgY29sb3JfcCwgQnBwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2Nhbl9hbHBoYSArKyA9IGRlc3RfYWxwaGE7CisgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYSAqIDI1NSAvIGRlc3RfYWxwaGE7CisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgY29tcHMgPSAwOyBjb21wcyA8IEJwcDsgY29tcHMgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBGWERJQl9BTFBIQV9NRVJHRSgqZGVzdF9zY2FuLCBjb2xvcl9wW2NvbXBzXSwgYWxwaGFfcmF0aW8pOworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgIGZvcihpbnQgY29tcHMgPSAwOyBjb21wcyA8IEJwcDsgY29tcHMgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBzID09IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gKysgPSAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gRlhESUJfQUxQSEFfTUVSR0UoKmRlc3Rfc2NhbiwgY29sb3JfcFtjb21wc10sIHNyY19hbHBoYSk7CisgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitDRlhfQml0bWFwQ29tcG9zZXI6OkNGWF9CaXRtYXBDb21wb3NlcigpCit7CisgICAgbV9wU2NhbmxpbmVWID0gTlVMTDsKKyAgICBtX3BTY2FubGluZUFscGhhViA9IE5VTEw7CisgICAgbV9wQ2xpcFNjYW5WID0gTlVMTDsKKyAgICBtX3BBZGRDbGlwU2NhbiA9IE5VTEw7CisgICAgbV9iUmdiQnl0ZU9yZGVyID0gRkFMU0U7CisgICAgbV9CbGVuZFR5cGUgPSBGWERJQl9CTEVORF9OT1JNQUw7Cit9CitDRlhfQml0bWFwQ29tcG9zZXI6On5DRlhfQml0bWFwQ29tcG9zZXIoKQoreworICAgIGlmIChtX3BTY2FubGluZVYpIHsKKyAgICAgICAgRlhfRnJlZShtX3BTY2FubGluZVYpOworICAgIH0KKyAgICBpZiAobV9wU2NhbmxpbmVBbHBoYVYpIHsKKyAgICAgICAgRlhfRnJlZShtX3BTY2FubGluZUFscGhhVik7CisgICAgfQorICAgIGlmIChtX3BDbGlwU2NhblYpIHsKKyAgICAgICAgRlhfRnJlZShtX3BDbGlwU2NhblYpOworICAgIH0KKyAgICBpZiAobV9wQWRkQ2xpcFNjYW4pIHsKKyAgICAgICAgRlhfRnJlZShtX3BBZGRDbGlwU2Nhbik7CisgICAgfQorfQordm9pZCBDRlhfQml0bWFwQ29tcG9zZXI6OkNvbXBvc2UoQ0ZYX0RJQml0bWFwKiBwRGVzdCwgY29uc3QgQ0ZYX0NsaXBSZ24qIHBDbGlwUmduLCBpbnQgYml0bWFwX2FscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgbWFza19jb2xvciwgRlhfUkVDVCYgZGVzdF9yZWN0LCBGWF9CT09MIGJWZXJ0aWNhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JPT0wgYkZsaXBYLCBGWF9CT09MIGJGbGlwWSwgRlhfQk9PTCBiUmdiQnl0ZU9yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0sIGludCBibGVuZF90eXBlKQoreworICAgIG1fcEJpdG1hcCA9IHBEZXN0OworICAgIG1fcENsaXBSZ24gPSBwQ2xpcFJnbjsKKyAgICBtX0Rlc3RMZWZ0ID0gZGVzdF9yZWN0LmxlZnQ7CisgICAgbV9EZXN0VG9wID0gZGVzdF9yZWN0LnRvcDsKKyAgICBtX0Rlc3RXaWR0aCA9IGRlc3RfcmVjdC5XaWR0aCgpOworICAgIG1fRGVzdEhlaWdodCA9IGRlc3RfcmVjdC5IZWlnaHQoKTsKKyAgICBtX0JpdG1hcEFscGhhID0gYml0bWFwX2FscGhhOworICAgIG1fTWFza0NvbG9yID0gbWFza19jb2xvcjsKKyAgICBtX3BDbGlwTWFzayA9IE5VTEw7CisgICAgaWYgKHBDbGlwUmduICYmIHBDbGlwUmduLT5HZXRUeXBlKCkgIT0gQ0ZYX0NsaXBSZ246OlJlY3RJKSB7CisgICAgICAgIG1fcENsaXBNYXNrID0gcENsaXBSZ24tPkdldE1hc2soKTsKKyAgICB9CisgICAgbV9iVmVydGljYWwgPSBiVmVydGljYWw7CisgICAgbV9iRmxpcFggPSBiRmxpcFg7CisgICAgbV9iRmxpcFkgPSBiRmxpcFk7CisgICAgbV9BbHBoYUZsYWcgPSBhbHBoYV9mbGFnOworICAgIG1fcEljY1RyYW5zZm9ybSA9IHBJY2NUcmFuc2Zvcm07CisgICAgbV9iUmdiQnl0ZU9yZGVyID0gYlJnYkJ5dGVPcmRlcjsKKyAgICBtX0JsZW5kVHlwZSA9IGJsZW5kX3R5cGU7Cit9CitGWF9CT09MIENGWF9CaXRtYXBDb21wb3Nlcjo6U2V0SW5mbyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIEZYRElCX0Zvcm1hdCBzcmNfZm9ybWF0LCBGWF9EV09SRCogcFNyY1BhbGV0dGUpCit7CisgICAgbV9TcmNGb3JtYXQgPSBzcmNfZm9ybWF0OworICAgIGlmICghbV9Db21wb3NpdG9yLkluaXQobV9wQml0bWFwLT5HZXRGb3JtYXQoKSwgc3JjX2Zvcm1hdCwgd2lkdGgsIHBTcmNQYWxldHRlLCBtX01hc2tDb2xvciwgRlhESUJfQkxFTkRfTk9STUFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wQ2xpcE1hc2sgIT0gTlVMTCB8fCAobV9CaXRtYXBBbHBoYSA8IDI1NSksIG1fYlJnYkJ5dGVPcmRlciwgbV9BbHBoYUZsYWcsIG1fcEljY1RyYW5zZm9ybSkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAobV9iVmVydGljYWwpIHsKKyAgICAgICAgbV9wU2NhbmxpbmVWID0gRlhfQWxsb2MoRlhfQllURSwgbV9wQml0bWFwLT5HZXRCUFAoKSAvIDggKiB3aWR0aCArIDQpOworICAgICAgICBpZiAoIW1fcFNjYW5saW5lVikgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIG1fcENsaXBTY2FuViA9IEZYX0FsbG9jKEZYX0JZVEUsIG1fcEJpdG1hcC0+R2V0SGVpZ2h0KCkpOworICAgICAgICBpZiAoIW1fcENsaXBTY2FuVikgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmIChtX3BCaXRtYXAtPm1fcEFscGhhTWFzaykgeworICAgICAgICAgICAgbV9wU2NhbmxpbmVBbHBoYVYgPSBGWF9BbGxvYyhGWF9CWVRFLCB3aWR0aCArIDQpOworICAgICAgICAgICAgaWYgKCFtX3BTY2FubGluZUFscGhhVikgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9CaXRtYXBBbHBoYSA8IDI1NSkgeworICAgICAgICBtX3BBZGRDbGlwU2NhbiA9IEZYX0FsbG9jKEZYX0JZVEUsIG1fYlZlcnRpY2FsID8gbV9wQml0bWFwLT5HZXRIZWlnaHQoKSA6IG1fcEJpdG1hcC0+R2V0V2lkdGgoKSk7CisgICAgICAgIGlmICghbV9wQWRkQ2xpcFNjYW4pIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK3ZvaWQgQ0ZYX0JpdG1hcENvbXBvc2VyOjpEb0NvbXBvc2UoRlhfTFBCWVRFIGRlc3Rfc2NhbiwgRlhfTFBDQllURSBzcmNfc2NhbiwgaW50IGRlc3Rfd2lkdGgsIEZYX0xQQ0JZVEUgY2xpcF9zY2FuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19leHRyYV9hbHBoYSwgRlhfTFBCWVRFIGRzdF9leHRyYV9hbHBoYSkKK3sKKyAgICBpZiAobV9CaXRtYXBBbHBoYSA8IDI1NSkgeworICAgICAgICBpZiAoY2xpcF9zY2FuKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlc3Rfd2lkdGg7IGkgKyspIHsKKyAgICAgICAgICAgICAgICBtX3BBZGRDbGlwU2NhbltpXSA9IGNsaXBfc2NhbltpXSAqIG1fQml0bWFwQWxwaGEgLyAyNTU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBGWFNZU19tZW1zZXQ4KG1fcEFkZENsaXBTY2FuLCBtX0JpdG1hcEFscGhhLCBkZXN0X3dpZHRoKTsKKyAgICAgICAgfQorICAgICAgICBjbGlwX3NjYW4gPSBtX3BBZGRDbGlwU2NhbjsKKyAgICB9CisgICAgaWYgKG1fU3JjRm9ybWF0ID09IEZYRElCXzhicHBNYXNrKSB7CisgICAgICAgIG1fQ29tcG9zaXRvci5Db21wb3NpdGVCeXRlTWFza0xpbmUoZGVzdF9zY2FuLCBzcmNfc2NhbiwgZGVzdF93aWR0aCwgY2xpcF9zY2FuLCBkc3RfZXh0cmFfYWxwaGEpOworICAgIH0gZWxzZSBpZiAoKG1fU3JjRm9ybWF0ICYgMHhmZikgPT0gOCkgeworICAgICAgICBtX0NvbXBvc2l0b3IuQ29tcG9zaXRlUGFsQml0bWFwTGluZShkZXN0X3NjYW4sIHNyY19zY2FuLCAwLCBkZXN0X3dpZHRoLCBjbGlwX3NjYW4sIHNyY19leHRyYV9hbHBoYSwgZHN0X2V4dHJhX2FscGhhKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX0NvbXBvc2l0b3IuQ29tcG9zaXRlUmdiQml0bWFwTGluZShkZXN0X3NjYW4sIHNyY19zY2FuLCBkZXN0X3dpZHRoLCBjbGlwX3NjYW4sIHNyY19leHRyYV9hbHBoYSwgZHN0X2V4dHJhX2FscGhhKTsKKyAgICB9Cit9Cit2b2lkIENGWF9CaXRtYXBDb21wb3Nlcjo6Q29tcG9zZVNjYW5saW5lKGludCBsaW5lLCBGWF9MUENCWVRFIHNjYW5saW5lLCBGWF9MUENCWVRFIHNjYW5fZXh0cmFfYWxwaGEpCit7CisgICAgaWYgKG1fYlZlcnRpY2FsKSB7CisgICAgICAgIENvbXBvc2VTY2FubGluZVYobGluZSwgc2NhbmxpbmUsIHNjYW5fZXh0cmFfYWxwaGEpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX0xQQ0JZVEUgY2xpcF9zY2FuID0gTlVMTDsKKyAgICBpZiAobV9wQ2xpcE1hc2spCisgICAgICAgIGNsaXBfc2NhbiA9IG1fcENsaXBNYXNrLT5HZXRCdWZmZXIoKSArIChtX0Rlc3RUb3AgKyBsaW5lIC0gbV9wQ2xpcFJnbi0+R2V0Qm94KCkudG9wKSAqCisgICAgICAgICAgICAgICAgICAgIG1fcENsaXBNYXNrLT5HZXRQaXRjaCgpICsgKG1fRGVzdExlZnQgLSBtX3BDbGlwUmduLT5HZXRCb3goKS5sZWZ0KTsKKyAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gKEZYX0xQQllURSltX3BCaXRtYXAtPkdldFNjYW5saW5lKGxpbmUgKyBtX0Rlc3RUb3ApICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbV9EZXN0TGVmdCAqIG1fcEJpdG1hcC0+R2V0QlBQKCkgLyA4OworICAgIEZYX0xQQllURSBkZXN0X2FscGhhX3NjYW4gPSBtX3BCaXRtYXAtPm1fcEFscGhhTWFzayA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGWF9MUEJZVEUpbV9wQml0bWFwLT5tX3BBbHBoYU1hc2stPkdldFNjYW5saW5lKGxpbmUgKyBtX0Rlc3RUb3ApICsgbV9EZXN0TGVmdCA6IE5VTEw7CisgICAgRG9Db21wb3NlKGRlc3Rfc2Nhbiwgc2NhbmxpbmUsIG1fRGVzdFdpZHRoLCBjbGlwX3NjYW4sIHNjYW5fZXh0cmFfYWxwaGEsIGRlc3RfYWxwaGFfc2Nhbik7Cit9Cit2b2lkIENGWF9CaXRtYXBDb21wb3Nlcjo6Q29tcG9zZVNjYW5saW5lVihpbnQgbGluZSwgRlhfTFBDQllURSBzY2FubGluZSwgRlhfTFBDQllURSBzY2FuX2V4dHJhX2FscGhhKQoreworICAgIGludCBpOworICAgIGludCBCcHAgPSBtX3BCaXRtYXAtPkdldEJQUCgpIC8gODsKKyAgICBpbnQgZGVzdF9waXRjaCA9IG1fcEJpdG1hcC0+R2V0UGl0Y2goKTsKKyAgICBpbnQgZGVzdF9hbHBoYV9waXRjaCA9IG1fcEJpdG1hcC0+bV9wQWxwaGFNYXNrID8gbV9wQml0bWFwLT5tX3BBbHBoYU1hc2stPkdldFBpdGNoKCkgOiAwOworICAgIGludCBkZXN0X3ggPSBtX0Rlc3RMZWZ0ICsgKG1fYkZsaXBYID8gKG1fRGVzdFdpZHRoIC0gbGluZSAtIDEpIDogbGluZSk7CisgICAgRlhfTFBCWVRFIGRlc3RfYnVmID0gbV9wQml0bWFwLT5HZXRCdWZmZXIoKSArIGRlc3RfeCAqIEJwcCArIG1fRGVzdFRvcCAqIGRlc3RfcGl0Y2g7CisgICAgRlhfTFBCWVRFIGRlc3RfYWxwaGFfYnVmID0gbV9wQml0bWFwLT5tX3BBbHBoYU1hc2sgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcEJpdG1hcC0+bV9wQWxwaGFNYXNrLT5HZXRCdWZmZXIoKSArIGRlc3RfeCArIG1fRGVzdFRvcCAqIGRlc3RfYWxwaGFfcGl0Y2ggOiBOVUxMOworICAgIGlmIChtX2JGbGlwWSkgeworICAgICAgICBkZXN0X2J1ZiArPSBkZXN0X3BpdGNoICogKG1fRGVzdEhlaWdodCAtIDEpOworICAgICAgICBkZXN0X2FscGhhX2J1ZiArPSBkZXN0X2FscGhhX3BpdGNoICogKG1fRGVzdEhlaWdodCAtIDEpOworICAgIH0KKyAgICBpbnQgeV9zdGVwID0gZGVzdF9waXRjaDsKKyAgICBpbnQgeV9hbHBoYV9zdGVwID0gZGVzdF9hbHBoYV9waXRjaDsKKyAgICBpZiAobV9iRmxpcFkpIHsKKyAgICAgICAgeV9zdGVwID0gLXlfc3RlcDsKKyAgICAgICAgeV9hbHBoYV9zdGVwID0gLXlfYWxwaGFfc3RlcDsKKyAgICB9CisgICAgRlhfTFBCWVRFIHNyY19zY2FuID0gbV9wU2NhbmxpbmVWOworICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZjsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbV9EZXN0SGVpZ2h0OyBpICsrKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgQnBwOyBqICsrKSB7CisgICAgICAgICAgICAqc3JjX3NjYW4rKyA9IGRlc3Rfc2NhbltqXTsKKyAgICAgICAgfQorICAgICAgICBkZXN0X3NjYW4gKz0geV9zdGVwOworICAgIH0KKyAgICBGWF9MUEJZVEUgc3JjX2FscGhhX3NjYW4gPSBtX3BTY2FubGluZUFscGhhVjsKKyAgICBGWF9MUEJZVEUgZGVzdF9hbHBoYV9zY2FuID0gZGVzdF9hbHBoYV9idWY7CisgICAgaWYgKGRlc3RfYWxwaGFfc2NhbikgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9EZXN0SGVpZ2h0OyBpICsrKSB7CisgICAgICAgICAgICAqc3JjX2FscGhhX3NjYW4rKyA9ICpkZXN0X2FscGhhX3NjYW47CisgICAgICAgICAgICBkZXN0X2FscGhhX3NjYW4gKz0geV9hbHBoYV9zdGVwOworICAgICAgICB9CisgICAgfQorICAgIEZYX0xQQllURSBjbGlwX3NjYW4gPSBOVUxMOworICAgIGlmIChtX3BDbGlwTWFzaykgeworICAgICAgICBjbGlwX3NjYW4gPSBtX3BDbGlwU2NhblY7CisgICAgICAgIGludCBjbGlwX3BpdGNoID0gbV9wQ2xpcE1hc2stPkdldFBpdGNoKCk7CisgICAgICAgIEZYX0xQQ0JZVEUgc3JjX2NsaXAgPSBtX3BDbGlwTWFzay0+R2V0QnVmZmVyKCkgKyAobV9EZXN0VG9wIC0gbV9wQ2xpcFJnbi0+R2V0Qm94KCkudG9wKSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwX3BpdGNoICsgKGRlc3RfeCAtIG1fcENsaXBSZ24tPkdldEJveCgpLmxlZnQpOworICAgICAgICBpZiAobV9iRmxpcFkpIHsKKyAgICAgICAgICAgIHNyY19jbGlwICs9IGNsaXBfcGl0Y2ggKiAobV9EZXN0SGVpZ2h0IC0gMSk7CisgICAgICAgICAgICBjbGlwX3BpdGNoID0gLWNsaXBfcGl0Y2g7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG1fRGVzdEhlaWdodDsgaSArKykgeworICAgICAgICAgICAgY2xpcF9zY2FuW2ldID0gKnNyY19jbGlwOworICAgICAgICAgICAgc3JjX2NsaXAgKz0gY2xpcF9waXRjaDsKKyAgICAgICAgfQorICAgIH0KKyAgICBEb0NvbXBvc2UobV9wU2NhbmxpbmVWLCBzY2FubGluZSwgbV9EZXN0SGVpZ2h0LCBjbGlwX3NjYW4sIHNjYW5fZXh0cmFfYWxwaGEsIG1fcFNjYW5saW5lQWxwaGFWKTsKKyAgICBzcmNfc2NhbiA9IG1fcFNjYW5saW5lVjsKKyAgICBkZXN0X3NjYW4gPSBkZXN0X2J1ZjsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbV9EZXN0SGVpZ2h0OyBpICsrKSB7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgQnBwOyBqICsrKSB7CisgICAgICAgICAgICBkZXN0X3NjYW5bal0gPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgfQorICAgICAgICBkZXN0X3NjYW4gKz0geV9zdGVwOworICAgIH0KKyAgICBzcmNfYWxwaGFfc2NhbiA9IG1fcFNjYW5saW5lQWxwaGFWOworICAgIGRlc3RfYWxwaGFfc2NhbiA9IGRlc3RfYWxwaGFfYnVmOworICAgIGlmIChkZXN0X2FscGhhX3NjYW4pIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG1fRGVzdEhlaWdodDsgaSArKykgeworICAgICAgICAgICAgKmRlc3RfYWxwaGFfc2NhbiA9ICpzcmNfYWxwaGFfc2NhbisrOworICAgICAgICAgICAgZGVzdF9hbHBoYV9zY2FuICs9IHlfYWxwaGFfc3RlcDsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2UvZGliL2Z4X2RpYl9jb252ZXJ0LmNwcCBiL2NvcmUvc3JjL2Z4Z2UvZGliL2Z4X2RpYl9jb252ZXJ0LmNwcAppbmRleCBmZTRhN2JmLi4wMTIwNzIxIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL2RpYi9meF9kaWJfY29udmVydC5jcHAKKysrIGIvY29yZS9zcmMvZnhnZS9kaWIvZnhfZGliX2NvbnZlcnQuY3BwCkBAIC0xLDEwOTAgKzEsMTA5MCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9kaWIuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjb2RlYy9meF9jb2RlYy5oIg0KLWNvbnN0IEZYX0RXT1JEIGdfZHdXaW5QYWxldHRlWzI1Nl0gPSB7DQotICAgIDB4ZmYwMDAwMDAsIDB4ZmY4MDAwMDAsIDB4ZmYwMDgwMDAsIDB4ZmY4MDgwMDAsIDB4ZmYwMDAwODAsIDB4ZmY4MDAwODAsDQotICAgIDB4ZmYwMDgwODAsIDB4ZmY4MDgwODAsIDB4ZmZDMERDQzAsIDB4ZmZBNkNBRjAsIDB4ZmYyQTNGQUEsIDB4ZmYyQTNGRkYsDQotICAgIDB4ZmYyQTVGMDAsIDB4ZmYyQTVGNTUsIDB4ZmYyQTVGQUEsIDB4ZmYyQTVGRkYsIDB4ZmYyQTdGMDAsIDB4ZmYyQTdGNTUsDQotICAgIDB4ZmYyQTdGQUEsIDB4ZmYyQTdGRkYsIDB4ZmYyQTlGMDAsIDB4ZmYyQTlGNTUsIDB4ZmYyQTlGQUEsIDB4ZmYyQTlGRkYsDQotICAgIDB4ZmYyQUJGMDAsIDB4ZmYyQUJGNTUsIDB4ZmYyQUJGQUEsIDB4ZmYyQUJGRkYsIDB4ZmYyQURGMDAsIDB4ZmYyQURGNTUsDQotICAgIDB4ZmYyQURGQUEsIDB4ZmYyQURGRkYsIDB4ZmYyQUZGMDAsIDB4ZmYyQUZGNTUsIDB4ZmYyQUZGQUEsIDB4ZmYyQUZGRkYsDQotICAgIDB4ZmY1NTAwMDAsIDB4ZmY1NTAwNTUsIDB4ZmY1NTAwQUEsIDB4ZmY1NTAwRkYsIDB4ZmY1NTFGMDAsIDB4ZmY1NTFGNTUsDQotICAgIDB4ZmY1NTFGQUEsIDB4ZmY1NTFGRkYsIDB4ZmY1NTNGMDAsIDB4ZmY1NTNGNTUsIDB4ZmY1NTNGQUEsIDB4ZmY1NTNGRkYsDQotICAgIDB4ZmY1NTVGMDAsIDB4ZmY1NTVGNTUsIDB4ZmY1NTVGQUEsIDB4ZmY1NTVGRkYsIDB4ZmY1NTdGMDAsIDB4ZmY1NTdGNTUsDQotICAgIDB4ZmY1NTdGQUEsIDB4ZmY1NTdGRkYsIDB4ZmY1NTlGMDAsIDB4ZmY1NTlGNTUsIDB4ZmY1NTlGQUEsIDB4ZmY1NTlGRkYsDQotICAgIDB4ZmY1NUJGMDAsIDB4ZmY1NUJGNTUsIDB4ZmY1NUJGQUEsIDB4ZmY1NUJGRkYsIDB4ZmY1NURGMDAsIDB4ZmY1NURGNTUsDQotICAgIDB4ZmY1NURGQUEsIDB4ZmY1NURGRkYsIDB4ZmY1NUZGMDAsIDB4ZmY1NUZGNTUsIDB4ZmY1NUZGQUEsIDB4ZmY1NUZGRkYsDQotICAgIDB4ZmY3RjAwMDAsIDB4ZmY3RjAwNTUsIDB4ZmY3RjAwQUEsIDB4ZmY3RjAwRkYsIDB4ZmY3RjFGMDAsIDB4ZmY3RjFGNTUsDQotICAgIDB4ZmY3RjFGQUEsIDB4ZmY3RjFGRkYsIDB4ZmY3RjNGMDAsIDB4ZmY3RjNGNTUsIDB4ZmY3RjNGQUEsIDB4ZmY3RjNGRkYsDQotICAgIDB4ZmY3RjVGMDAsIDB4ZmY3RjVGNTUsIDB4ZmY3RjVGQUEsIDB4ZmY3RjVGRkYsIDB4ZmY3RjdGMDAsIDB4ZmY3RjdGNTUsDQotICAgIDB4ZmY3RjdGQUEsIDB4ZmY3RjdGRkYsIDB4ZmY3RjlGMDAsIDB4ZmY3RjlGNTUsIDB4ZmY3RjlGQUEsIDB4ZmY3RjlGRkYsDQotICAgIDB4ZmY3RkJGMDAsIDB4ZmY3RkJGNTUsIDB4ZmY3RkJGQUEsIDB4ZmY3RkJGRkYsIDB4ZmY3RkRGMDAsIDB4ZmY3RkRGNTUsDQotICAgIDB4ZmY3RkRGQUEsIDB4ZmY3RkRGRkYsIDB4ZmYwMEZGN0YsIDB4ZmY3RkZGNTUsIDB4ZmY3RkZGQUEsIDB4ZmY3RkZGRkYsDQotICAgIDB4ZmZBQTAwMDAsIDB4ZmZBQTAwNTUsIDB4ZmZBQTAwQUEsIDB4ZmZBQTAwRkYsIDB4ZmZBQTFGMDAsIDB4ZmZBQTFGNTUsDQotICAgIDB4ZmZBQTFGQUEsIDB4ZmZBQTFGRkYsIDB4ZmZBQTNGMDAsIDB4ZmZBQTNGNTUsIDB4ZmZBQTNGQUEsIDB4ZmZBQTNGRkYsDQotICAgIDB4ZmZBQTVGMDAsIDB4ZmZBQTVGNTUsIDB4ZmZBQTVGQUEsIDB4ZmZBQTVGRkYsIDB4ZmZBQTdGMDAsIDB4ZmZBQTdGNTUsDQotICAgIDB4ZmZBQTdGQUEsIDB4ZmZBQTdGRkYsIDB4ZmZBQTlGMDAsIDB4ZmZBQTlGNTUsIDB4ZmZBQTlGQUEsIDB4ZmZBQTlGRkYsDQotICAgIDB4ZmZBQUJGMDAsIDB4ZmZBQUJGNTUsIDB4ZmZBQUJGQUEsIDB4ZmZBQUJGRkYsIDB4ZmZBQURGMDAsIDB4ZmZBQURGNTUsDQotICAgIDB4ZmZBQURGQUEsIDB4ZmZBQURGRkYsIDB4ZmZBQUZGMDAsIDB4ZmZBQUZGNTUsIDB4ZmZBQUZGQUEsIDB4ZmZBQUZGRkYsDQotICAgIDB4ZmZENDAwMDAsIDB4ZmZENDAwNTUsIDB4ZmZENDAwQUEsIDB4ZmZENDAwRkYsIDB4ZmZENDFGMDAsIDB4ZmZENDFGNTUsDQotICAgIDB4ZmZENDFGQUEsIDB4ZmZENDFGRkYsIDB4ZmZENDNGMDAsIDB4ZmZENDNGNTUsIDB4ZmZENDNGQUEsIDB4ZmZENDNGRkYsDQotICAgIDB4ZmZENDVGMDAsIDB4ZmZENDVGNTUsIDB4ZmZENDVGQUEsIDB4ZmZENDVGRkYsIDB4ZmZENDdGMDAsIDB4ZmZENDdGNTUsDQotICAgIDB4ZmZENDdGQUEsIDB4ZmZENEY3RkYsIDB4ZmZENDlGMDAsIDB4ZmZENDlGNTUsIDB4ZmZENDlGQUEsIDB4ZmZENDlGRkYsDQotICAgIDB4ZmZENEJGMDAsIDB4ZmZENEJGNTUsIDB4ZmZENEJGQUEsIDB4ZmZENEJGRkYsIDB4ZmZENERGMDAsIDB4ZmZENERGNTUsDQotICAgIDB4ZmZENERGQUEsIDB4ZmZENERGRkYsIDB4ZmZENEZGMDAsIDB4ZmZENEZGNTUsIDB4ZmZENEZGQUEsIDB4ZmZENEZGRkYsDQotICAgIDB4ZmZGRjAwNTUsIDB4ZmZGRjAwQUEsIDB4ZmZGRjFGMDAsIDB4ZmZGRjFGNTUsIDB4ZmZGRjFGQUEsIDB4ZmZGRjFGRkYsDQotICAgIDB4ZmZGRjNGMDAsIDB4ZmZGRjNGNTUsIDB4ZmZGRjNGQUEsIDB4ZmZGRjNGRkYsIDB4ZmZGRjVGMDAsIDB4ZmZGRjVGNTUsDQotICAgIDB4ZmZGRjVGQUEsIDB4ZmZGRjVGRkYsIDB4ZmZGRjdGMDAsIDB4ZmZGRjdGNTUsIDB4ZmZGRjdGQUEsIDB4ZmZGRjdGRkYsDQotICAgIDB4ZmZGRjlGMDAsIDB4ZmZGRjlGNTUsIDB4ZmZGRjlGQUEsIDB4ZmZGRjlGRkYsIDB4ZmZGRkJGMDAsIDB4ZmZGRkJGNTUsDQotICAgIDB4ZmZGRkJGQUEsIDB4ZmZGRkJGRkYsIDB4ZmZGRkRGMDAsIDB4ZmZGRkRGNTUsIDB4ZmZGRkRGQUEsIDB4ZmZGRkRGRkYsDQotICAgIDB4ZmZGRkZGNTUsIDB4ZmZGRkZGQUEsIDB4ZmZDQ0NDRkYsIDB4ZmZGRkNDRkYsIDB4ZmYzM0ZGRkYsIDB4ZmY2NkZGRkYsDQotICAgIDB4ZmY5OUZGRkYsIDB4ZmZDQ0ZGRkYsIDB4ZmYwMDdGMDAsIDB4ZmYwMDdGNTUsIDB4ZmYwMDdGQUEsIDB4ZmYwMDdGRkYsDQotICAgIDB4ZmYwMDlGMDAsIDB4ZmYwMDlGNTUsIDB4ZmYwMDlGQUEsIDB4ZmYwMDlGRkYsIDB4ZmYwMEJGMDAsIDB4ZmYwMEJGNTUsDQotICAgIDB4ZmYwMEJGQUEsIDB4ZmYwMEJGRkYsIDB4ZmYwMERGMDAsIDB4ZmYwMERGNTUsIDB4ZmYwMERGQUEsIDB4ZmYwMERGRkYsDQotICAgIDB4ZmYwMEZGNTUsIDB4ZmYwMEZGQUEsIDB4ZmYyQTAwMDAsIDB4ZmYyQTAwNTUsIDB4ZmYyQTAwQUEsIDB4ZmYyQTAwRkYsDQotICAgIDB4ZmYyQTFGMDAsIDB4ZmYyQTFGNTUsIDB4ZmYyQTFGQUEsIDB4ZmYyQTFGRkYsIDB4ZmYyQTNGMDAsIDB4ZmYyQTNGNTUsDQotICAgIDB4ZmZGRkZCRjAsIDB4ZmZBMEEwQTQsIDB4ZmY4MDgwODAsIDB4ZmZGRjAwMDAsIDB4ZmYwMEZGMDAsIDB4ZmZGRjAwMDAsDQotICAgIDB4ZmYwMDAwRkYsIDB4ZmZGRjAwRkYsIDB4ZmYwMEZGRkYsIDB4ZmZGRkZGRkYNCi19Ow0KLWNvbnN0IEZYX0RXT1JEIGdfZHdNYWNQYWxldHRlWzI1Nl0gPSB7DQotICAgIDB4ZmZGRkZGRkYsIDB4ZmZGRkZGQ0MsIDB4ZmZGRkZGOTksIDB4ZmZGRkZGNjYsIDB4ZmZGRkZGMzMsIDB4ZmZGRkZGMDAsDQotICAgIDB4ZmZGRkNDRkYsIDB4ZmZGRkNDQ0MsIDB4ZmZGRkNDOTksIDB4ZmZGRkNDNjYsIDB4ZmZGRkNDMzMsIDB4ZmZGRkNDMDAsDQotICAgIDB4ZmZGRjk5RkYsIDB4ZmZGRjk5Q0MsIDB4ZmZGRjk5OTksIDB4ZmZGRjk5NjYsIDB4ZmZGRjk5MzMsIDB4ZmZGRjk5MDAsDQotICAgIDB4ZmZGRjY2RkYsIDB4ZmZGRjY2Q0MsIDB4ZmZGRjY2OTksIDB4ZmZGRjY2NjYsIDB4ZmZGRjY2MzMsIDB4ZmZGRjY2MDAsDQotICAgIDB4ZmZGRjMzRkYsIDB4ZmZGRjMzQ0MsIDB4ZmZGRjMzOTksIDB4ZmZGRjMzNjYsIDB4ZmZGRjMzMzMsIDB4ZmZGRjMzMDAsDQotICAgIDB4ZmZGRjAwRkYsIDB4ZmZGRjAwQ0MsIDB4ZmZGRjAwOTksIDB4ZmZGRjAwNjYsIDB4ZmZGRjAwMzMsIDB4ZmZGRjAwMDAsDQotICAgIDB4ZmZDQ0ZGRkYsIDB4ZmZDQ0ZGQ0MsIDB4ZmZDQ0ZGOTksIDB4ZmZDQ0ZGNjYsIDB4ZmZDQ0ZGMzMsIDB4ZmZDQ0ZGMDAsDQotICAgIDB4ZmZDQ0NDRkYsIDB4ZmZDQ0NDQ0MsIDB4ZmZDQ0NDOTksIDB4ZmZDQ0NDNjYsIDB4ZmZDQ0NDMzMsIDB4ZmZDQ0NDMDAsDQotICAgIDB4ZmZDQzk5RkYsIDB4ZmZDQzk5Q0MsIDB4ZmZDQzk5OTksIDB4ZmZDQzk5NjYsIDB4ZmZDQzk5MzMsIDB4ZmZDQzk5MDAsDQotICAgIDB4ZmZDQzY2RkYsIDB4ZmZDQzY2Q0MsIDB4ZmZDQzY2OTksIDB4ZmZDQzY2NjYsIDB4ZmZDQzY2MzMsIDB4ZmZDQzY2MDAsDQotICAgIDB4ZmZDQzMzRkYsIDB4ZmZDQzMzQ0MsIDB4ZmZDQzMzOTksIDB4ZmZDQzMzNjYsIDB4ZmZDQzMzMzMsIDB4ZmZDQzMzMDAsDQotICAgIDB4ZmZDQzAwRkYsIDB4ZmZDQzAwQ0MsIDB4ZmZDQzAwOTksIDB4ZmZDQzAwNjYsIDB4ZmZDQzAwMzMsIDB4ZmZDQzAwMDAsDQotICAgIDB4ZmY5OUZGRkYsIDB4ZmY5OUZGQ0MsIDB4ZmY5OUZGOTksIDB4ZmY5OUZGNjYsIDB4ZmY5OUZGMzMsIDB4ZmY5OUZGMDAsDQotICAgIDB4ZmY5OUNDRkYsIDB4ZmY5OUNDQ0MsIDB4ZmY5OUNDOTksIDB4ZmY5OUNDNjYsIDB4ZmY5OUNDMzMsIDB4ZmY5OUNDMDAsDQotICAgIDB4ZmY5OTk5RkYsIDB4ZmY5OTk5Q0MsIDB4ZmY5OTk5OTksIDB4ZmY5OTk5NjYsIDB4ZmY5OTk5MzMsIDB4ZmY5OTk5MDAsDQotICAgIDB4ZmY5OTY2RkYsIDB4ZmY5OTY2Q0MsIDB4ZmY5OTY2OTksIDB4ZmY5OTY2NjYsIDB4ZmY5OTY2MzMsIDB4ZmY5OTY2MDAsDQotICAgIDB4ZmY5OTMzRkYsIDB4ZmY5OTMzQ0MsIDB4ZmY5OTMzOTksIDB4ZmY5OTMzNjYsIDB4ZmY5OTMzMzMsIDB4ZmY5OTMzMDAsDQotICAgIDB4ZmY5OTAwRkYsIDB4ZmY5OTAwQ0MsIDB4ZmY5OTAwOTksIDB4ZmY5OTAwNjYsIDB4ZmY5OTAwMzMsIDB4ZmY5OTAwMDAsDQotICAgIDB4ZmY2NkZGRkYsIDB4ZmY2NkZGQ0MsIDB4ZmY2NkZGOTksIDB4ZmY2NkZGNjYsIDB4ZmY2NkZGMzMsIDB4ZmY2NkZGMDAsDQotICAgIDB4ZmY2NkNDRkYsIDB4ZmY2NkNDQ0MsIDB4ZmY2NkNDOTksIDB4ZmY2NkNDNjYsIDB4ZmY2NkNDMzMsIDB4ZmY2NkNDMDAsDQotICAgIDB4ZmY2Njk5RkYsIDB4ZmY2Njk5Q0MsIDB4ZmY2Njk5OTksIDB4ZmY2Njk5NjYsIDB4ZmY2Njk5MzMsIDB4ZmY2Njk5MDAsDQotICAgIDB4ZmY2NjY2RkYsIDB4ZmY2NjY2Q0MsIDB4ZmY2NjY2OTksIDB4ZmY2NjY2NjYsIDB4ZmY2NjY2MzMsIDB4ZmY2NjY2MDAsDQotICAgIDB4ZmY2NjMzRkYsIDB4ZmY2NjMzQ0MsIDB4ZmY2NjMzOTksIDB4ZmY2NjMzNjYsIDB4ZmY2NjMzMzMsIDB4ZmY2NjMzMDAsDQotICAgIDB4ZmY2NjAwRkYsIDB4ZmY2NjAwQ0MsIDB4ZmY2NjAwOTksIDB4ZmY2NjAwNjYsIDB4ZmY2NjAwMzMsIDB4ZmY2NjAwMDAsDQotICAgIDB4ZmYzM0ZGRkYsIDB4ZmYzM0ZGQ0MsIDB4ZmYzM0ZGOTksIDB4ZmYzM0ZGNjYsIDB4ZmYzM0ZGMzMsIDB4ZmYzM0ZGMDAsDQotICAgIDB4ZmYzM0NDRkYsIDB4ZmYzM0NDQ0MsIDB4ZmYzM0NDOTksIDB4ZmYzM0NDNjYsIDB4ZmYzM0NDMzMsIDB4ZmYzM0NDMDAsDQotICAgIDB4ZmYzMzk5RkYsIDB4ZmYzMzk5Q0MsIDB4ZmYzMzk5OTksIDB4ZmYzMzk5NjYsIDB4ZmYzMzk5MzMsIDB4ZmYzMzk5MDAsDQotICAgIDB4ZmYzMzY2RkYsIDB4ZmYzMzY2Q0MsIDB4ZmYzMzY2OTksIDB4ZmYzMzY2NjYsIDB4ZmYzMzY2MzMsIDB4ZmYzMzY2MDAsDQotICAgIDB4ZmYzMzMzRkYsIDB4ZmYzMzMzQ0MsIDB4ZmYzMzMzOTksIDB4ZmYzMzMzNjYsIDB4ZmYzMzMzMzMsIDB4ZmYzMzMzMDAsDQotICAgIDB4ZmYzMzAwRkYsIDB4ZmYzMzAwQ0MsIDB4ZmYzMzAwOTksIDB4ZmYzMzAwNjYsIDB4ZmYzMzAwMzMsIDB4ZmYzMzAwMDAsDQotICAgIDB4ZmYwMEZGRkYsIDB4ZmYwMEZGQ0MsIDB4ZmYwMEZGOTksIDB4ZmYwMEZGNjYsIDB4ZmYwMEZGMzMsIDB4ZmYwMEZGMDAsDQotICAgIDB4ZmYwMENDRkYsIDB4ZmYwMENDQ0MsIDB4ZmYwMENDOTksIDB4ZmYwMENDNjYsIDB4ZmYwMENDMzMsIDB4ZmYwMENDMDAsDQotICAgIDB4ZmYwMDk5RkYsIDB4ZmYwMDk5Q0MsIDB4ZmYwMDk5OTksIDB4ZmYwMDk5NjYsIDB4ZmYwMDk5MzMsIDB4ZmYwMDk5MDAsDQotICAgIDB4ZmYwMDY2RkYsIDB4ZmYwMDY2Q0MsIDB4ZmYwMDY2OTksIDB4ZmYwMDY2NjYsIDB4ZmYwMDY2MzMsIDB4ZmYwMDY2MDAsDQotICAgIDB4ZmYwMDMzRkYsIDB4ZmYwMDMzQ0MsIDB4ZmYwMDMzOTksIDB4ZmYwMDMzNjYsIDB4ZmYwMDMzMzMsIDB4ZmYwMDMzMDAsDQotICAgIDB4ZmYwMDAwRkYsIDB4ZmYwMDAwQ0MsIDB4ZmYwMDAwOTksIDB4ZmYwMDAwNjYsIDB4ZmYwMDAwMzMsDQotICAgIDB4ZmZFRTAwMDAsIDB4ZmZERDAwMDAsIDB4ZmZCQjAwMDAsIDB4ZmZBQTAwMDAsIDB4ZmY4ODAwMDAsIDB4ZmY3NzAwMDAsDQotICAgIDB4ZmY1NTAwMDAsIDB4ZmY0NDAwMDAsIDB4ZmYyMjAwMDAsIDB4ZmYxMTAwMDAsIDB4ZmYwMEVFMDAsIDB4ZmYwMEREMDAsDQotICAgIDB4ZmYwMEJCMDAsIDB4ZmYwMEFBMDAsIDB4ZmYwMDg4MDAsIDB4ZmYwMDc3MDAsIDB4ZmYwMDU1MDAsIDB4ZmYwMDQ0MDAsDQotICAgIDB4ZmYwMDIyMDAsIDB4ZmYwMDExMDAsIDB4ZmYwMDAwRUUsIDB4ZmYwMDAwREQsIDB4ZmYwMDAwQkIsIDB4ZmYwMDAwQUEsDQotICAgIDB4ZmYwMDAwODgsIDB4ZmYwMDAwNzcsIDB4ZmYwMDAwNTUsIDB4ZmYwMDAwNDQsIDB4ZmYwMDAwMjIsIDB4ZmYwMDAwMTEsDQotICAgIDB4ZmZFRUVFRUUsIDB4ZmZEREREREQsIDB4ZmZCQkJCQkIsIDB4ZmZBQUFBQUEsIDB4ZmY4ODg4ODgsIDB4ZmY3Nzc3NzcsDQotICAgIDB4ZmY1NTU1NTUsIDB4ZmY0NDQ0NDQsIDB4ZmYyMjIyMjIsIDB4ZmYxMTExMTEsIDB4ZmYwMDAwMDANCi19Ow0KLWNsYXNzIENGWF9QYWxldHRlIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDRlhfUGFsZXR0ZSgpOw0KLSAgICB+Q0ZYX1BhbGV0dGUoKTsNCi1wdWJsaWM6DQotICAgIEZYX0JPT0wgICAgICBCdWlsZFBhbGV0dGUoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwgaW50IGR3UGFsZXR0ZVR5cGUpOw0KLSAgICBGWF9EV09SRCogICAgR2V0UGFsZXR0ZSgpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX3BQYWxldHRlOw0KLSAgICB9DQotDQotICAgIEZYX0RXT1JEKiAgICBHZXRDb2xvckx1dCgpY29uc3QNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIG1fY0x1dDsNCi0gICAgfQ0KLSAgICBGWF9EV09SRCogICAgR2V0QW1vdW50THV0KCljb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9hTHV0Ow0KLSAgICB9DQotICAgIEZYX0lOVDMyICAgICBHZXRsdXQoKWNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBtX2x1dDsNCi0gICAgfQ0KLXByb3RlY3RlZDoNCi0gICAgRlhfRFdPUkQqICAgIG1fcFBhbGV0dGU7DQotICAgIEZYX0RXT1JEKiAgICBtX2NMdXQ7DQotICAgIEZYX0RXT1JEKiAgICBtX2FMdXQ7DQotICAgIGludCAgICAgICAgICBtX2x1dDsNCi19Ow0KLWludCBfUGFydGl0aW9uKEZYX0RXT1JEKiBhbHV0LCBGWF9EV09SRCogY2x1dCwgaW50IGwsIGludCByKQ0KLXsNCi0gICAgRlhfRFdPUkQgcF9hID0gYWx1dFtsXTsNCi0gICAgRlhfRFdPUkQgcF9jID0gY2x1dFtsXTsNCi0gICAgd2hpbGUobCA8IHIpIHsNCi0gICAgICAgIHdoaWxlKGwgPCByICYmIGFsdXRbcl0gPj0gcF9hKSB7DQotICAgICAgICAgICAgci0tOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGwgPCByKSB7DQotICAgICAgICAgICAgYWx1dFtsXSA9IGFsdXRbcl07DQotICAgICAgICAgICAgY2x1dFtsKytdID0gY2x1dFtyXTsNCi0gICAgICAgIH0NCi0gICAgICAgIHdoaWxlKGwgPCByICYmIGFsdXRbbF0gPD0gcF9hKSB7DQotICAgICAgICAgICAgbCsrOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGwgPCByKSB7DQotICAgICAgICAgICAgYWx1dFtyXSA9IGFsdXRbbF07DQotICAgICAgICAgICAgY2x1dFtyLS1dID0gY2x1dFtsXTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBhbHV0W2xdID0gcF9hOw0KLSAgICBjbHV0W2xdID0gcF9jOw0KLSAgICByZXR1cm4gbDsNCi19DQotdm9pZCBfUXNvcnQoRlhfRFdPUkQqIGFsdXQsIEZYX0RXT1JEKiBjbHV0LCBpbnQgbCwgaW50IHIpDQotew0KLSAgICBpZihsIDwgcikgew0KLSAgICAgICAgaW50IHBJID0gX1BhcnRpdGlvbihhbHV0LCBjbHV0LCBsLCByKTsNCi0gICAgICAgIF9Rc29ydChhbHV0LCBjbHV0LCBsLCBwSSAtIDEpOw0KLSAgICAgICAgX1Fzb3J0KGFsdXQsIGNsdXQsIHBJICsgMSwgcik7DQotICAgIH0NCi19DQotdm9pZCBfQ29sb3JEZWNvZGUoRlhfRFdPUkQgcGFsX3YsIEZYX0JZVEUmIHIsIEZYX0JZVEUmIGcsIEZYX0JZVEUmIGIpDQotew0KLSAgICByID0gKEZYX0JZVEUpKChwYWxfdiAmIDB4ZjAwKSA+PiA0KTsNCi0gICAgZyA9IChGWF9CWVRFKShwYWxfdiAmIDB4MGYwKTsNCi0gICAgYiA9IChGWF9CWVRFKSgocGFsX3YgJiAweDAwZikgPDwgNCk7DQotfQ0KLXZvaWQgX09idGFpbl9QYWwoRlhfRFdPUkQqIGFMdXQsIEZYX0RXT1JEKmNMdXQsIEZYX0RXT1JEKiBkZXN0X3BhbCwgaW50IHBhbF90eXBlLCBGWF9EV09SRCogd2luX21hY19wYWwsIEZYX0RXT1JEIGx1dCkNCi17DQotICAgIGludCByb3csIGNvbDsNCi0gICAgRlhfRFdPUkQgbHV0XzEgPSBsdXQgLSAxOw0KLSAgICBpZiAocGFsX3R5cGUgPT0gRlhESUJfUEFMRVRURV9MT0MpIHsNCi0gICAgICAgIGZvciAocm93ID0gMDsgcm93IDwgMjU2OyByb3crKykgew0KLSAgICAgICAgICAgIGludCBsdXRfb2Zmc2V0ID0gbHV0XzEgLSByb3c7DQotICAgICAgICAgICAgaWYgKGx1dF9vZmZzZXQgPCAwKSB7DQotICAgICAgICAgICAgICAgIGx1dF9vZmZzZXQgKz0gMjU2Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9EV09SRCBjb2xvciA9IGNMdXRbbHV0X29mZnNldF07DQotICAgICAgICAgICAgRlhfQllURSByLCBnLCBiOw0KLSAgICAgICAgICAgIF9Db2xvckRlY29kZShjb2xvciwgciwgZywgYik7DQotICAgICAgICAgICAgZGVzdF9wYWxbcm93XSA9ICgoRlhfRFdPUkQpciA8PCAxNikgfCAoKEZYX0RXT1JEKWcgPDwgOCkgfCBiIHwgMHhmZjAwMDAwMDsNCi0gICAgICAgICAgICBhTHV0W2x1dF9vZmZzZXRdID0gcm93Ow0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZm9yIChyb3cgPSAwOyByb3cgPCAyNTY7IHJvdysrKSB7DQotICAgICAgICAgICAgaW50IGx1dF9vZmZzZXQgPSBsdXRfMSAtIHJvdzsNCi0gICAgICAgICAgICBpZiAobHV0X29mZnNldCA8IDApIHsNCi0gICAgICAgICAgICAgICAgbHV0X29mZnNldCArPSAyNTY7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIEZYX0JZVEUgciwgZywgYjsNCi0gICAgICAgICAgICBfQ29sb3JEZWNvZGUoY0x1dFtsdXRfb2Zmc2V0XSwgciwgZywgYik7DQotICAgICAgICAgICAgaW50IGVycm9yLCBtaW5fZXJyb3IgPSAxMDAwMDAwOw0KLSAgICAgICAgICAgIGludCBjX2luZGV4ID0gMDsNCi0gICAgICAgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IDI1NjsgY29sKyspIHsNCi0gICAgICAgICAgICAgICAgRlhfRFdPUkQgcF9jb2xvciA9IHdpbl9tYWNfcGFsW2NvbF07DQotICAgICAgICAgICAgICAgIGludCBkX3IgPSByIC0gKEZYX0JZVEUpKHBfY29sb3IgPj4gMTYpOw0KLSAgICAgICAgICAgICAgICBpbnQgZF9nID0gZyAtIChGWF9CWVRFKShwX2NvbG9yID4+IDgpOw0KLSAgICAgICAgICAgICAgICBpbnQgZF9iID0gYiAtIChGWF9CWVRFKXBfY29sb3I7DQotICAgICAgICAgICAgICAgIGVycm9yID0gZF9yICogZF9yICsgZF9nICogZF9nICsgZF9iICogZF9iOw0KLSAgICAgICAgICAgICAgICBpZiAoZXJyb3IgPCBtaW5fZXJyb3IpIHsNCi0gICAgICAgICAgICAgICAgICAgIG1pbl9lcnJvciA9IGVycm9yOw0KLSAgICAgICAgICAgICAgICAgICAgY19pbmRleCA9IGNvbDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBkZXN0X3BhbFtyb3ddID0gIHdpbl9tYWNfcGFsW2NfaW5kZXhdOw0KLSAgICAgICAgICAgIGFMdXRbbHV0X29mZnNldF0gPSByb3c7DQotICAgICAgICB9DQotICAgIH0NCi19DQotQ0ZYX1BhbGV0dGU6OkNGWF9QYWxldHRlKCkNCi17DQotICAgIG1fcFBhbGV0dGUgPSBOVUxMOw0KLSAgICBtX2NMdXQgPSBOVUxMOw0KLSAgICBtX2FMdXQgPSBOVUxMOw0KLSAgICBtX2x1dCA9IDA7DQotfQ0KLUNGWF9QYWxldHRlOjp+Q0ZYX1BhbGV0dGUoKQ0KLXsNCi0gICAgaWYgKG1fcFBhbGV0dGUpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wUGFsZXR0ZSk7DQotICAgIH0NCi0gICAgaWYgKG1fY0x1dCkgew0KLSAgICAgICAgRlhfRnJlZShtX2NMdXQpOw0KLSAgICB9DQotICAgIGlmIChtX2FMdXQpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9hTHV0KTsNCi0gICAgfQ0KLSAgICBtX2x1dCA9IDA7DQotfQ0KLUZYX0JPT0wgQ0ZYX1BhbGV0dGU6OkJ1aWxkUGFsZXR0ZShjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBpbnQgcGFsX3R5cGUpDQotew0KLSAgICBpZiAocEJpdG1hcCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKG1fcFBhbGV0dGUgIT0gTlVMTCkgew0KLSAgICAgICAgRlhfRnJlZShtX3BQYWxldHRlKTsNCi0gICAgfQ0KLSAgICBtX3BQYWxldHRlID0gRlhfQWxsb2MoRlhfRFdPUkQsIDI1Nik7DQotICAgIGlmICghbV9wUGFsZXR0ZSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYU1lTX21lbXNldDMyKG1fcFBhbGV0dGUsIDAsIHNpemVvZihGWF9EV09SRCkgKiAyNTYpOw0KLSAgICBpbnQgYnBwICAgID0gcEJpdG1hcC0+R2V0QlBQKCkgLyA4Ow0KLSAgICBpbnQgd2lkdGggID0gcEJpdG1hcC0+R2V0V2lkdGgoKTsNCi0gICAgaW50IGhlaWdodCA9IHBCaXRtYXAtPkdldEhlaWdodCgpOw0KLSAgICBpZiAobV9jTHV0KSB7DQotICAgICAgICBGWF9GcmVlKG1fY0x1dCk7DQotICAgICAgICBtX2NMdXQgPSBOVUxMOw0KLSAgICB9DQotICAgIGlmIChtX2FMdXQpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9hTHV0KTsNCi0gICAgICAgIG1fYUx1dCA9IE5VTEw7DQotICAgIH0NCi0gICAgbV9jTHV0ID0gRlhfQWxsb2MoRlhfRFdPUkQsIDQwOTYpOw0KLSAgICBpZiAoIW1fY0x1dCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fYUx1dCA9IEZYX0FsbG9jKEZYX0RXT1JELCA0MDk2KTsNCi0gICAgaWYgKCFtX2FMdXQpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWFNZU19tZW1zZXQzMihtX2FMdXQsIDAsIHNpemVvZihGWF9EV09SRCkgKiA0MDk2KTsNCi0gICAgRlhTWVNfbWVtc2V0MzIobV9jTHV0LCAwLCBzaXplb2YoRlhfRFdPUkQpICogNDA5Nik7DQotICAgIGludCByb3csIGNvbDsNCi0gICAgbV9sdXQgPSAwOw0KLSAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93KyspIHsNCi0gICAgICAgIEZYX0JZVEUqIHNjYW5fbGluZSA9IChGWF9CWVRFKilwQml0bWFwLT5HZXRTY2FubGluZShyb3cpOw0KLSAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sKyspIHsNCi0gICAgICAgICAgICBGWF9CWVRFKiBzcmNfcG9ydCA9IHNjYW5fbGluZSArIGNvbCAqIGJwcDsNCi0gICAgICAgICAgICBGWF9EV09SRCBiID0gc3JjX3BvcnRbMF0gJiAweGYwOw0KLSAgICAgICAgICAgIEZYX0RXT1JEIGcgPSBzcmNfcG9ydFsxXSAmIDB4ZjA7DQotICAgICAgICAgICAgRlhfRFdPUkQgciA9IHNyY19wb3J0WzJdICYgMHhmMDsNCi0gICAgICAgICAgICBGWF9EV09SRCBpbmRleCA9IChyIDw8IDQpICsgZyArIChiID4+IDQpOw0KLSAgICAgICAgICAgIG1fYUx1dFtpbmRleF0rKzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IDQwOTY7IHJvdysrKSB7DQotICAgICAgICBpZiAobV9hTHV0W3Jvd10gIT0gMCkgew0KLSAgICAgICAgICAgIG1fYUx1dFttX2x1dF0gPSBtX2FMdXRbcm93XTsNCi0gICAgICAgICAgICBtX2NMdXRbbV9sdXRdID0gcm93Ow0KLSAgICAgICAgICAgIG1fbHV0Kys7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgX1Fzb3J0KG1fYUx1dCwgbV9jTHV0LCAwLCBtX2x1dCAtIDEpOw0KLSAgICBGWF9EV09SRCogd2luX21hY19wYWwgPSBOVUxMOw0KLSAgICBpZiAocGFsX3R5cGUgPT0gRlhESUJfUEFMRVRURV9XSU4pIHsNCi0gICAgICAgIHdpbl9tYWNfcGFsID0gKEZYX0RXT1JEKilnX2R3V2luUGFsZXR0ZTsNCi0gICAgfSBlbHNlIGlmIChwYWxfdHlwZSA9PSBGWERJQl9QQUxFVFRFX01BQykgew0KLSAgICAgICAgd2luX21hY19wYWwgPSAoRlhfRFdPUkQqKWdfZHdNYWNQYWxldHRlOw0KLSAgICB9DQotICAgIF9PYnRhaW5fUGFsKG1fYUx1dCwgbV9jTHV0LCBtX3BQYWxldHRlLCBwYWxfdHlwZSwgd2luX21hY19wYWwsIG1fbHV0KTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgX0NvbnZlcnRCdWZmZXJfMWJwcE1hc2syR3JheShGWF9MUEJZVEUgZGVzdF9idWYsIGludCBkZXN0X3BpdGNoLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3ApDQotew0KLSAgICBGWF9CWVRFIHNldF9ncmF5LCByZXNldF9ncmF5Ow0KLSAgICBzZXRfZ3JheSA9IDB4ZmY7DQotICAgIHJlc2V0X2dyYXkgPSAweDAwOw0KLSAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IGRlc3RfYnVmICsgcm93ICogZGVzdF9waXRjaDsNCi0gICAgICAgIEZYU1lTX21lbXNldDgoZGVzdF9zY2FuLCByZXNldF9ncmF5LCB3aWR0aCk7DQotICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gcFNyY0JpdG1hcC0+R2V0U2NhbmxpbmUoc3JjX3RvcCArIHJvdyk7DQotICAgICAgICBmb3IgKGludCBjb2wgPSBzcmNfbGVmdDsgY29sIDwgc3JjX2xlZnQgKyB3aWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgaWYgKHNyY19zY2FuW2NvbCAvIDhdICYgKDEgPDwgKDcgLSBjb2wgJSA4KSkpIHsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IHNldF9ncmF5Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgX0NvbnZlcnRCdWZmZXJfOGJwcE1hc2syR3JheShGWF9MUEJZVEUgZGVzdF9idWYsIGludCBkZXN0X3BpdGNoLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3ApDQotew0KLSAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IGRlc3RfYnVmICsgcm93ICogZGVzdF9waXRjaDsNCi0gICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBwU3JjQml0bWFwLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KSArIHNyY19sZWZ0Ow0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgpOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIF9Db252ZXJ0QnVmZmVyXzFicHBQbHQyR3JheShGWF9MUEJZVEUgZGVzdF9idWYsIGludCBkZXN0X3BpdGNoLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyY0JpdG1hcCwgaW50IHNyY19sZWZ0LCBpbnQgc3JjX3RvcCwgdm9pZCogcEljY1RyYW5zZm9ybSkNCi17DQotICAgIEZYX0RXT1JEKiBzcmNfcGx0ID0gcFNyY0JpdG1hcC0+R2V0UGFsZXR0ZSgpOw0KLSAgICBGWF9CWVRFIGdyYXlbMl07DQotICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7DQotICAgICAgICBGWF9EV09SRCBwbHRbMl07DQotICAgICAgICBpZiAocFNyY0JpdG1hcC0+SXNDbXlrSW1hZ2UoKSkgew0KLSAgICAgICAgICAgIHBsdFswXSA9IEZYQ01ZS19UT0RJQihzcmNfcGx0WzBdKTsNCi0gICAgICAgICAgICBwbHRbMV0gPSBGWENNWUtfVE9ESUIoc3JjX3BsdFsxXSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIEZYX0xQQllURSBiZ3JfcHRyID0gKEZYX0xQQllURSlwbHQ7DQotICAgICAgICAgICAgYmdyX3B0clswXSA9IEZYQVJHQl9CKHNyY19wbHRbMF0pOw0KLSAgICAgICAgICAgIGJncl9wdHJbMV0gPSBGWEFSR0JfRyhzcmNfcGx0WzBdKTsNCi0gICAgICAgICAgICBiZ3JfcHRyWzJdID0gRlhBUkdCX1Ioc3JjX3BsdFswXSk7DQotICAgICAgICAgICAgYmdyX3B0clszXSA9IEZYQVJHQl9CKHNyY19wbHRbMV0pOw0KLSAgICAgICAgICAgIGJncl9wdHJbNF0gPSBGWEFSR0JfRyhzcmNfcGx0WzFdKTsNCi0gICAgICAgICAgICBiZ3JfcHRyWzVdID0gRlhBUkdCX1Ioc3JjX3BsdFsxXSk7DQotICAgICAgICB9DQotICAgICAgICBJQ29kZWNfSWNjTW9kdWxlKiBwSWNjTW9kdWxlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCk7DQotICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBncmF5LCAoRlhfTFBDQllURSlwbHQsIDIpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgRlhfQllURSByZXNldF9yLCByZXNldF9nLCByZXNldF9iLA0KLSAgICAgICAgICAgICAgICBzZXRfciwgc2V0X2csIHNldF9iOw0KLSAgICAgICAgaWYgKHBTcmNCaXRtYXAtPklzQ215a0ltYWdlKCkpIHsNCi0gICAgICAgICAgICBBZG9iZUNNWUtfdG9fc1JHQjEoRlhTWVNfR2V0Q1ZhbHVlKHNyY19wbHRbMF0pLCBGWFNZU19HZXRNVmFsdWUoc3JjX3BsdFswXSksIEZYU1lTX0dldFlWYWx1ZShzcmNfcGx0WzBdKSwgRlhTWVNfR2V0S1ZhbHVlKHNyY19wbHRbMF0pLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldF9yLCByZXNldF9nLCByZXNldF9iKTsNCi0gICAgICAgICAgICBBZG9iZUNNWUtfdG9fc1JHQjEoRlhTWVNfR2V0Q1ZhbHVlKHNyY19wbHRbMV0pLCBGWFNZU19HZXRNVmFsdWUoc3JjX3BsdFsxXSksIEZYU1lTX0dldFlWYWx1ZShzcmNfcGx0WzFdKSwgRlhTWVNfR2V0S1ZhbHVlKHNyY19wbHRbMV0pLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfciwgc2V0X2csIHNldF9iKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcmVzZXRfciA9IEZYQVJHQl9SKHNyY19wbHRbMF0pOw0KLSAgICAgICAgICAgIHJlc2V0X2cgPSBGWEFSR0JfRyhzcmNfcGx0WzBdKTsNCi0gICAgICAgICAgICByZXNldF9iID0gRlhBUkdCX0Ioc3JjX3BsdFswXSk7DQotICAgICAgICAgICAgc2V0X3IgPSBGWEFSR0JfUihzcmNfcGx0WzFdKTsNCi0gICAgICAgICAgICBzZXRfZyA9IEZYQVJHQl9HKHNyY19wbHRbMV0pOw0KLSAgICAgICAgICAgIHNldF9iID0gRlhBUkdCX0Ioc3JjX3BsdFsxXSk7DQotICAgICAgICB9DQotICAgICAgICBncmF5WzBdID0gRlhSR0IyR1JBWShyZXNldF9yLCByZXNldF9nLCByZXNldF9iKTsNCi0gICAgICAgIGdyYXlbMV0gPSBGWFJHQjJHUkFZKHNldF9yLCBzZXRfZywgc2V0X2IpOw0KLSAgICB9DQotICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7DQotICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyByb3cgKiBkZXN0X3BpdGNoOw0KLSAgICAgICAgRlhTWVNfbWVtc2V0OChkZXN0X3NjYW4sIGdyYXlbMF0sIHdpZHRoKTsNCi0gICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBwU3JjQml0bWFwLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KTsNCi0gICAgICAgIGZvciAoaW50IGNvbCA9IHNyY19sZWZ0OyBjb2wgPCBzcmNfbGVmdCArIHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICBpZiAoc3JjX3NjYW5bY29sIC8gOF0gJiAoMSA8PCAoNyAtIGNvbCAlIDgpKSkgew0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gZ3JheVsxXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZGVzdF9zY2FuICsrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIF9Db252ZXJ0QnVmZmVyXzhicHBQbHQyR3JheShGWF9MUEJZVEUgZGVzdF9idWYsIGludCBkZXN0X3BpdGNoLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyY0JpdG1hcCwgaW50IHNyY19sZWZ0LCBpbnQgc3JjX3RvcCwgdm9pZCogcEljY1RyYW5zZm9ybSkNCi17DQotICAgIEZYX0RXT1JEKiBzcmNfcGx0ID0gcFNyY0JpdG1hcC0+R2V0UGFsZXR0ZSgpOw0KLSAgICBGWF9CWVRFIGdyYXlbMjU2XTsNCi0gICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsNCi0gICAgICAgIEZYX0RXT1JEIHBsdFsyNTZdOw0KLSAgICAgICAgaWYgKHBTcmNCaXRtYXAtPklzQ215a0ltYWdlKCkpIHsNCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSArKykgew0KLSAgICAgICAgICAgICAgICBwbHRbaV0gPSBGWENNWUtfVE9ESUIoc3JjX3BsdFtpXSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBGWF9MUEJZVEUgYmdyX3B0ciA9IChGWF9MUEJZVEUpcGx0Ow0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7DQotICAgICAgICAgICAgICAgICpiZ3JfcHRyKysgPSBGWEFSR0JfQihzcmNfcGx0W2ldKTsNCi0gICAgICAgICAgICAgICAgKmJncl9wdHIrKyA9IEZYQVJHQl9HKHNyY19wbHRbaV0pOw0KLSAgICAgICAgICAgICAgICAqYmdyX3B0cisrID0gRlhBUkdCX1Ioc3JjX3BsdFtpXSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOw0KLSAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgZ3JheSwgKEZYX0xQQ0JZVEUpcGx0LCAyNTYpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYgKHBTcmNCaXRtYXAtPklzQ215a0ltYWdlKCkpIHsNCi0gICAgICAgICAgICBGWF9CWVRFIHIsIGcsIGI7DQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgQWRvYmVDTVlLX3RvX3NSR0IxKEZYU1lTX0dldENWYWx1ZShzcmNfcGx0W2ldKSwgRlhTWVNfR2V0TVZhbHVlKHNyY19wbHRbaV0pLCBGWFNZU19HZXRZVmFsdWUoc3JjX3BsdFtpXSksIEZYU1lTX0dldEtWYWx1ZShzcmNfcGx0W2ldKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIpOw0KLSAgICAgICAgICAgICAgICBncmF5W2ldID0gRlhSR0IyR1JBWShyLCBnLCBiKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2UNCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSArKykgew0KLSAgICAgICAgICAgICAgICBncmF5W2ldID0gRlhSR0IyR1JBWShGWEFSR0JfUihzcmNfcGx0W2ldKSwgRlhBUkdCX0coc3JjX3BsdFtpXSksIEZYQVJHQl9CKHNyY19wbHRbaV0pKTsNCi0gICAgICAgICAgICB9DQotICAgIH0NCi0gICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIHJvdyAqIGRlc3RfcGl0Y2g7DQotICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gcFNyY0JpdG1hcC0+R2V0U2NhbmxpbmUoc3JjX3RvcCArIHJvdykgKyBzcmNfbGVmdDsNCi0gICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuKysgPSBncmF5WypzcmNfc2NhbisrXTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBfQ29udmVydEJ1ZmZlcl9SZ2JPckNteWsyR3JheShGWF9MUEJZVEUgZGVzdF9idWYsIGludCBkZXN0X3BpdGNoLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwU3JjQml0bWFwLCBpbnQgc3JjX2xlZnQsIGludCBzcmNfdG9wLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQ0KLXsNCi0gICAgaW50IEJwcCA9IHBTcmNCaXRtYXAtPkdldEJQUCgpIC8gODsNCi0gICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsNCi0gICAgICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsNCi0gICAgICAgIGlmIChCcHAgPT0gMyB8fCBwU3JjQml0bWFwLT5Jc0NteWtJbWFnZSgpKSB7DQotICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IGRlc3RfYnVmICsgcm93ICogZGVzdF9waXRjaDsNCi0gICAgICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBTcmNCaXRtYXAtPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpICsgc3JjX2xlZnQgKiBCcHA7DQotICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7DQotICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIHJvdyAqIGRlc3RfcGl0Y2g7DQotICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBwU3JjQml0bWFwLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KSArIHNyY19sZWZ0ICogNDsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgZGVzdF9zY2FuLCBzcmNfc2NhbiwgMSk7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4rKzsNCi0gICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZiAocFNyY0JpdG1hcC0+SXNDbXlrSW1hZ2UoKSkgew0KLSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7DQotICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIHJvdyAqIGRlc3RfcGl0Y2g7DQotICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBwU3JjQml0bWFwLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KSArIHNyY19sZWZ0ICogNDsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgRlhfQllURSByLCBnLCBiOw0KLSAgICAgICAgICAgICAgICAgICAgQWRvYmVDTVlLX3RvX3NSR0IxKEZYU1lTX0dldENWYWx1ZSgoRlhfRFdPUkQpc3JjX3NjYW5bMF0pLCBGWFNZU19HZXRNVmFsdWUoKEZYX0RXT1JEKXNyY19zY2FuWzFdKSwgRlhTWVNfR2V0WVZhbHVlKChGWF9EV09SRClzcmNfc2NhblsyXSksIEZYU1lTX0dldEtWYWx1ZSgoRlhfRFdPUkQpc3JjX3NjYW5bM10pLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIpOw0KLSAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gRlhSR0IyR1JBWShyLCBnLCBiKTsNCi0gICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2UNCi0gICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyByb3cgKiBkZXN0X3BpdGNoOw0KLSAgICAgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gcFNyY0JpdG1hcC0+R2V0U2NhbmxpbmUoc3JjX3RvcCArIHJvdykgKyBzcmNfbGVmdCAqIEJwcDsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gRlhSR0IyR1JBWShzcmNfc2NhblsyXSwgc3JjX3NjYW5bMV0sIHNyY19zY2FuWzBdKTsNCi0gICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IEJwcDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotaW5saW5lIHZvaWQgX0NvbnZlcnRCdWZmZXJfSW5kZXhDb3B5KEZYX0xQQllURSBkZXN0X2J1ZiwgaW50IGRlc3RfcGl0Y2gsIGludCB3aWR0aCwgaW50IGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyY0JpdG1hcCwgaW50IHNyY19sZWZ0LCBpbnQgc3JjX3RvcCkNCi17DQotICAgIGlmIChwU3JjQml0bWFwLT5HZXRCUFAoKSA9PSAxKSB7DQotICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIHJvdyAqIGRlc3RfcGl0Y2g7DQotICAgICAgICAgICAgRlhTWVNfbWVtc2V0MzIoZGVzdF9zY2FuLCAwLCB3aWR0aCk7DQotICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBTcmNCaXRtYXAtPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpOw0KLSAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IHNyY19sZWZ0OyBjb2wgPCBzcmNfbGVmdCArIHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgaWYgKHNyY19zY2FuW2NvbCAvIDhdICYgKDEgPDwgKDcgLSBjb2wgJSA4KSkpIHsNCi0gICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSAxOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIHJvdyAqIGRlc3RfcGl0Y2g7DQotICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBTcmNCaXRtYXAtPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpICsgc3JjX2xlZnQ7DQotICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLUZYX0JPT0wgX0NvbnZlcnRCdWZmZXJfUGx0MlBsdFJnYjgoRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQgZGVzdF9waXRjaCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyY0JpdG1hcCwgaW50IHNyY19sZWZ0LCBpbnQgc3JjX3RvcCwgRlhfRFdPUkQqIGRzdF9wbHQsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBfQ29udmVydEJ1ZmZlcl9JbmRleENvcHkoZGVzdF9idWYsIGRlc3RfcGl0Y2gsIHdpZHRoLCBoZWlnaHQsIHBTcmNCaXRtYXAsIHNyY19sZWZ0LCBzcmNfdG9wKTsNCi0gICAgRlhfRFdPUkQqIHNyY19wbHQgPSBwU3JjQml0bWFwLT5HZXRQYWxldHRlKCk7DQotICAgIGludCBwbHRfc2l6ZSA9IHBTcmNCaXRtYXAtPkdldFBhbGV0dGVTaXplKCk7DQotICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7DQotICAgICAgICBGWF9EV09SRCBwbHRbMjU2XTsNCi0gICAgICAgIEZYX0xQQllURSBiZ3JfcHRyID0gKEZYX0xQQllURSlwbHQ7DQotICAgICAgICBpZiAocFNyY0JpdG1hcC0+SXNDbXlrSW1hZ2UoKSkgew0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGx0X3NpemU7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgcGx0W2ldID0gRlhDTVlLX1RPRElCKHNyY19wbHRbaV0pOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwbHRfc2l6ZTsgaSArKykgew0KLSAgICAgICAgICAgICAgICAqYmdyX3B0cisrID0gRlhBUkdCX0Ioc3JjX3BsdFtpXSk7DQotICAgICAgICAgICAgICAgICpiZ3JfcHRyKysgPSBGWEFSR0JfRyhzcmNfcGx0W2ldKTsNCi0gICAgICAgICAgICAgICAgKmJncl9wdHIrKyA9IEZYQVJHQl9SKHNyY19wbHRbaV0pOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBiZ3JfcHRyID0gKEZYX0xQQllURSlwbHQ7DQotICAgICAgICB9DQotICAgICAgICBJQ29kZWNfSWNjTW9kdWxlKiBwSWNjTW9kdWxlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCk7DQotICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCAoRlhfTFBCWVRFKXBsdCwgKEZYX0xQQ0JZVEUpcGx0LCBwbHRfc2l6ZSk7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBsdF9zaXplOyBpICsrKSB7DQotICAgICAgICAgICAgZHN0X3BsdFtpXSA9IEZYQVJHQl9NQUtFKDB4ZmYsIGJncl9wdHJbMl0sIGJncl9wdHJbMV0sIGJncl9wdHJbMF0pOw0KLSAgICAgICAgICAgIGJncl9wdHIgKz0gMzsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGlmIChwU3JjQml0bWFwLT5Jc0NteWtJbWFnZSgpKSB7DQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwbHRfc2l6ZTsgaSArKykgew0KLSAgICAgICAgICAgICAgICBGWF9CWVRFIHIsIGcsIGI7DQotICAgICAgICAgICAgICAgIEFkb2JlQ01ZS190b19zUkdCMShGWFNZU19HZXRDVmFsdWUoc3JjX3BsdFtpXSksIEZYU1lTX0dldE1WYWx1ZShzcmNfcGx0W2ldKSwgRlhTWVNfR2V0WVZhbHVlKHNyY19wbHRbaV0pLCBGWFNZU19HZXRLVmFsdWUoc3JjX3BsdFtpXSksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLCBnLCBiKTsNCi0gICAgICAgICAgICAgICAgZHN0X3BsdFtpXSA9IEZYQVJHQl9NQUtFKDB4ZmYsIHIsIGcsIGIpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIoZHN0X3BsdCwgc3JjX3BsdCwgcGx0X3NpemUgKiA0KTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotaW5saW5lIEZYX0JPT0wgX0NvbnZlcnRCdWZmZXJfUmdiMlBsdFJnYjhfTm9UcmFuc2Zvcm0oRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQgZGVzdF9waXRjaCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KLSAgICAgICAgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyY0JpdG1hcCwgaW50IHNyY19sZWZ0LCBpbnQgc3JjX3RvcCwgRlhfRFdPUkQqIGRzdF9wbHQpDQotew0KLSAgICBpbnQgYnBwID0gcFNyY0JpdG1hcC0+R2V0QlBQKCkgLyA4Ow0KLSAgICBpbnQgcm93LCBjb2w7DQotICAgIENGWF9QYWxldHRlIHBhbGV0dGU7DQotICAgIHBhbGV0dGUuQnVpbGRQYWxldHRlKHBTcmNCaXRtYXAsIEZYRElCX1BBTEVUVEVfTE9DKTsNCi0gICAgRlhfRFdPUkQqIGNMdXQgPSBwYWxldHRlLkdldENvbG9yTHV0KCk7DQotICAgIEZYX0RXT1JEKiBhTHV0ID0gcGFsZXR0ZS5HZXRBbW91bnRMdXQoKTsNCi0gICAgaWYgKGNMdXQgPT0gTlVMTCB8fCBhTHV0ID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpbnQgbHV0ID0gcGFsZXR0ZS5HZXRsdXQoKTsNCi0gICAgRlhfRFdPUkQqIHBQYWxldHRlID0gcGFsZXR0ZS5HZXRQYWxldHRlKCk7DQotICAgIGlmIChsdXQgPiAyNTYpIHsNCi0gICAgICAgIGludCBlcnIsIG1pbl9lcnI7DQotICAgICAgICBpbnQgbHV0XzI1NiA9IGx1dCAtIDI1NjsNCi0gICAgICAgIGZvciAocm93ID0gMDsgcm93IDwgbHV0XzI1Njsgcm93KyspIHsNCi0gICAgICAgICAgICBtaW5fZXJyID0gMTAwMDAwMDsNCi0gICAgICAgICAgICBGWF9CWVRFIHIsIGcsIGI7DQotICAgICAgICAgICAgX0NvbG9yRGVjb2RlKGNMdXRbcm93XSwgciwgZywgYik7DQotICAgICAgICAgICAgaW50IGNscmluZGV4ID0gMDsNCi0gICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCAyNTY7IGNvbCsrKSB7DQotICAgICAgICAgICAgICAgIEZYX0RXT1JEIHBfY29sb3IgPSAqKHBQYWxldHRlICsgY29sKTsNCi0gICAgICAgICAgICAgICAgaW50IGRfciA9IHIgLSAoRlhfQllURSkocF9jb2xvciA+PiAxNik7DQotICAgICAgICAgICAgICAgIGludCBkX2cgPSBnIC0gKEZYX0JZVEUpKHBfY29sb3IgPj4gOCk7DQotICAgICAgICAgICAgICAgIGludCBkX2IgPSBiIC0gKEZYX0JZVEUpKHBfY29sb3IpOw0KLSAgICAgICAgICAgICAgICBlcnIgPSBkX3IgKiBkX3IgKyBkX2cgKiBkX2cgKyBkX2IgKiBkX2I7DQotICAgICAgICAgICAgICAgIGlmIChlcnIgPCBtaW5fZXJyKSB7DQotICAgICAgICAgICAgICAgICAgICBtaW5fZXJyID0gZXJyOw0KLSAgICAgICAgICAgICAgICAgICAgY2xyaW5kZXggPSBjb2w7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgYUx1dFtyb3ddID0gY2xyaW5kZXg7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhfSU5UMzIgbHV0XzEgPSBsdXQgLSAxOw0KLSAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7DQotICAgICAgICBGWF9CWVRFKiBzcmNfc2NhbiA9IChGWF9CWVRFKilwU3JjQml0bWFwLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KSArIHNyY19sZWZ0Ow0KLSAgICAgICAgRlhfQllURSogZGVzdF9zY2FuID0gZGVzdF9idWYgKyByb3cgKiBkZXN0X3BpdGNoOw0KLSAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sKyspIHsNCi0gICAgICAgICAgICBGWF9CWVRFKiBzcmNfcG9ydCA9IHNyY19zY2FuICsgY29sICogYnBwOw0KLSAgICAgICAgICAgIGludCByID0gc3JjX3BvcnRbMl0gJiAweGYwOw0KLSAgICAgICAgICAgIGludCBnID0gc3JjX3BvcnRbMV0gJiAweGYwOw0KLSAgICAgICAgICAgIGludCBiID0gc3JjX3BvcnRbMF0gJiAweGYwOw0KLSAgICAgICAgICAgIEZYX0RXT1JEIGNscmluZGV4ID0gKHIgPDwgNCkgKyBnICsgKGIgPj4gNCk7DQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IGx1dF8xOyBpID49IDA7IGktLSkNCi0gICAgICAgICAgICAgICAgaWYgKGNscmluZGV4ID09IGNMdXRbaV0pIHsNCi0gICAgICAgICAgICAgICAgICAgICooZGVzdF9zY2FuICsgY29sKSA9IChGWF9CWVRFKShhTHV0W2ldKTsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhTWVNfbWVtY3B5MzIoZHN0X3BsdCwgcFBhbGV0dGUsIHNpemVvZihGWF9EV09SRCkgKiAyNTYpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBfQ29udmVydEJ1ZmZlcl9SZ2IyUGx0UmdiOChGWF9MUEJZVEUgZGVzdF9idWYsIGludCBkZXN0X3BpdGNoLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwU3JjQml0bWFwLCBpbnQgc3JjX2xlZnQsIGludCBzcmNfdG9wLCBGWF9EV09SRCogZHN0X3BsdCwgdm9pZCogcEljY1RyYW5zZm9ybSkNCi17DQotICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBOVUxMOw0KLSAgICBpZiAocEljY1RyYW5zZm9ybSkgew0KLSAgICAgICAgcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOw0KLSAgICB9DQotICAgIEZYX0JPT0wgcmV0ID0gX0NvbnZlcnRCdWZmZXJfUmdiMlBsdFJnYjhfTm9UcmFuc2Zvcm0oZGVzdF9idWYsIGRlc3RfcGl0Y2gsIHdpZHRoLCBoZWlnaHQsIHBTcmNCaXRtYXAsIHNyY19sZWZ0LCBzcmNfdG9wLCBkc3RfcGx0KTsNCi0gICAgaWYgKHJldCAmJiBwSWNjVHJhbnNmb3JtKSB7DQotICAgICAgICBJQ29kZWNfSWNjTW9kdWxlKiBwSWNjTW9kdWxlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCk7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7DQotICAgICAgICAgICAgRlhfQVJHQiogcGx0ID0gZHN0X3BsdCArIGk7DQotICAgICAgICAgICAgRlhfQVJHQiBwbHRfZW50cnkgPSBGWEFSR0JfVE9ESUIoKnBsdCk7DQotICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgKEZYX0xQQllURSkmcGx0X2VudHJ5LCAoRlhfTFBDQllURSkmcGx0X2VudHJ5LCAxKTsNCi0gICAgICAgICAgICAqcGx0ID0gRlhBUkdCX1RPRElCKHBsdF9lbnRyeSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIHJldDsNCi19DQotRlhfQk9PTCBfQ29udmVydEJ1ZmZlcl8xYnBwTWFzazJSZ2IoRlhESUJfRm9ybWF0IGRzdF9mb3JtYXQsIEZYX0xQQllURSBkZXN0X2J1ZiwgaW50IGRlc3RfcGl0Y2gsIGludCB3aWR0aCwgaW50IGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwU3JjQml0bWFwLCBpbnQgc3JjX2xlZnQsIGludCBzcmNfdG9wKQ0KLXsNCi0gICAgaW50IGNvbXBzID0gKGRzdF9mb3JtYXQgJiAweGZmKSAvIDg7DQotICAgIEZYX0JZVEUgc2V0X2dyYXksIHJlc2V0X2dyYXk7DQotICAgIHNldF9ncmF5ID0gMHhmZjsNCi0gICAgcmVzZXRfZ3JheSA9IDB4MDA7DQotICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7DQotICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyByb3cgKiBkZXN0X3BpdGNoOw0KLSAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBTcmNCaXRtYXAtPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpOw0KLSAgICAgICAgZm9yIChpbnQgY29sID0gc3JjX2xlZnQ7IGNvbCA8IHNyY19sZWZ0ICsgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgIGlmIChzcmNfc2Nhbltjb2wgLyA4XSAmICgxIDw8ICg3IC0gY29sICUgOCkpKSB7DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IHNldF9ncmF5Ow0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBzZXRfZ3JheTsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gc2V0X2dyYXk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gcmVzZXRfZ3JheTsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gcmVzZXRfZ3JheTsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gcmVzZXRfZ3JheTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZGVzdF9zY2FuICs9IGNvbXBzOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIF9Db252ZXJ0QnVmZmVyXzhicHBNYXNrMlJnYihGWERJQl9Gb3JtYXQgZHN0X2Zvcm1hdCwgRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQgZGVzdF9waXRjaCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3ApDQotew0KLSAgICBpbnQgY29tcHMgPSAoZHN0X2Zvcm1hdCAmIDB4ZmYpIC8gODsNCi0gICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIHJvdyAqIGRlc3RfcGl0Y2g7DQotICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gcFNyY0JpdG1hcC0+R2V0U2NhbmxpbmUoc3JjX3RvcCArIHJvdykgKyBzcmNfbGVmdDsNCi0gICAgICAgIEZYX0JZVEUgc3JjX3BpeGVsOw0KLSAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgIHNyY19waXhlbCA9ICpzcmNfc2NhbisrOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19waXhlbDsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuKysgPSBzcmNfcGl4ZWw7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiAgID0gc3JjX3BpeGVsOw0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBjb21wcyAtIDI7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgX0NvbnZlcnRCdWZmZXJfMWJwcFBsdDJSZ2IoRlhESUJfRm9ybWF0IGRzdF9mb3JtYXQsIEZYX0xQQllURSBkZXN0X2J1ZiwgaW50IGRlc3RfcGl0Y2gsIGludCB3aWR0aCwgaW50IGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3AsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBpbnQgY29tcHMgPSAoZHN0X2Zvcm1hdCAmIDB4ZmYpIC8gODsNCi0gICAgRlhfRFdPUkQqIHNyY19wbHQgPSBwU3JjQml0bWFwLT5HZXRQYWxldHRlKCk7DQotICAgIEZYX0RXT1JEIHBsdFsyXTsNCi0gICAgRlhfTFBCWVRFIGJncl9wdHIgPSAoRlhfTFBCWVRFKXBsdDsNCi0gICAgaWYgKHBTcmNCaXRtYXAtPklzQ215a0ltYWdlKCkpIHsNCi0gICAgICAgIHBsdFswXSA9IEZYQ01ZS19UT0RJQihzcmNfcGx0WzBdKTsNCi0gICAgICAgIHBsdFsxXSA9IEZYQ01ZS19UT0RJQihzcmNfcGx0WzFdKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGJncl9wdHJbMF0gPSBGWEFSR0JfQihzcmNfcGx0WzBdKTsNCi0gICAgICAgIGJncl9wdHJbMV0gPSBGWEFSR0JfRyhzcmNfcGx0WzBdKTsNCi0gICAgICAgIGJncl9wdHJbMl0gPSBGWEFSR0JfUihzcmNfcGx0WzBdKTsNCi0gICAgICAgIGJncl9wdHJbM10gPSBGWEFSR0JfQihzcmNfcGx0WzFdKTsNCi0gICAgICAgIGJncl9wdHJbNF0gPSBGWEFSR0JfRyhzcmNfcGx0WzFdKTsNCi0gICAgICAgIGJncl9wdHJbNV0gPSBGWEFSR0JfUihzcmNfcGx0WzFdKTsNCi0gICAgfQ0KLSAgICBpZiAocEljY1RyYW5zZm9ybSkgew0KLSAgICAgICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOw0KLSAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgKEZYX0xQQllURSlwbHQsIChGWF9MUENCWVRFKXBsdCwgMik7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZiAocFNyY0JpdG1hcC0+SXNDbXlrSW1hZ2UoKSkgew0KLSAgICAgICAgICAgIEFkb2JlQ01ZS190b19zUkdCMShGWFNZU19HZXRDVmFsdWUoc3JjX3BsdFswXSksIEZYU1lTX0dldE1WYWx1ZShzcmNfcGx0WzBdKSwgRlhTWVNfR2V0WVZhbHVlKHNyY19wbHRbMF0pLCBGWFNZU19HZXRLVmFsdWUoc3JjX3BsdFswXSksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJncl9wdHJbMl0sIGJncl9wdHJbMV0sIGJncl9wdHJbMF0pOw0KLSAgICAgICAgICAgIEFkb2JlQ01ZS190b19zUkdCMShGWFNZU19HZXRDVmFsdWUoc3JjX3BsdFsxXSksIEZYU1lTX0dldE1WYWx1ZShzcmNfcGx0WzFdKSwgRlhTWVNfR2V0WVZhbHVlKHNyY19wbHRbMV0pLCBGWFNZU19HZXRLVmFsdWUoc3JjX3BsdFsxXSksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJncl9wdHJbNV0sIGJncl9wdHJbNF0sIGJncl9wdHJbM10pOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7DQotICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyByb3cgKiBkZXN0X3BpdGNoOw0KLSAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBTcmNCaXRtYXAtPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpOw0KLSAgICAgICAgZm9yIChpbnQgY29sID0gc3JjX2xlZnQ7IGNvbCA8IHNyY19sZWZ0ICsgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgIGlmIChzcmNfc2Nhbltjb2wgLyA4XSAmICgxIDw8ICg3IC0gY29sICUgOCkpKSB7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IGJncl9wdHJbM107DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IGJncl9wdHJbNF07DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gICA9IGJncl9wdHJbNV07DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gYmdyX3B0clswXTsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gYmdyX3B0clsxXTsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiAgID0gYmdyX3B0clsyXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZGVzdF9zY2FuICs9IGNvbXBzIC0gMjsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBfQ29udmVydEJ1ZmZlcl84YnBwUGx0MlJnYihGWERJQl9Gb3JtYXQgZHN0X2Zvcm1hdCwgRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQgZGVzdF9waXRjaCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyY0JpdG1hcCwgaW50IHNyY19sZWZ0LCBpbnQgc3JjX3RvcCwgdm9pZCogcEljY1RyYW5zZm9ybSkNCi17DQotICAgIGludCBjb21wcyA9IChkc3RfZm9ybWF0ICYgMHhmZikgLyA4Ow0KLSAgICBGWF9EV09SRCogc3JjX3BsdCA9IHBTcmNCaXRtYXAtPkdldFBhbGV0dGUoKTsNCi0gICAgRlhfRFdPUkQgcGx0WzI1Nl07DQotICAgIEZYX0xQQllURSBiZ3JfcHRyID0gKEZYX0xQQllURSlwbHQ7DQotICAgIGlmICghcFNyY0JpdG1hcC0+SXNDbXlrSW1hZ2UoKSkgew0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkrKykgew0KLSAgICAgICAgICAgICpiZ3JfcHRyKysgPSBGWEFSR0JfQihzcmNfcGx0W2ldKTsNCi0gICAgICAgICAgICAqYmdyX3B0cisrID0gRlhBUkdCX0coc3JjX3BsdFtpXSk7DQotICAgICAgICAgICAgKmJncl9wdHIrKyA9IEZYQVJHQl9SKHNyY19wbHRbaV0pOw0KLSAgICAgICAgfQ0KLSAgICAgICAgYmdyX3B0ciA9IChGWF9MUEJZVEUpcGx0Ow0KLSAgICB9DQotICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7DQotICAgICAgICBpZiAocFNyY0JpdG1hcC0+SXNDbXlrSW1hZ2UoKSkgew0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpKyspIHsNCi0gICAgICAgICAgICAgICAgcGx0W2ldID0gRlhDTVlLX1RPRElCKHNyY19wbHRbaV0pOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsNCi0gICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIChGWF9MUEJZVEUpcGx0LCAoRlhfTFBDQllURSlwbHQsIDI1Nik7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZiAocFNyY0JpdG1hcC0+SXNDbXlrSW1hZ2UoKSkgew0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpKyspIHsNCi0gICAgICAgICAgICAgICAgQWRvYmVDTVlLX3RvX3NSR0IxKEZYU1lTX0dldENWYWx1ZShzcmNfcGx0W2ldKSwgRlhTWVNfR2V0TVZhbHVlKHNyY19wbHRbaV0pLCBGWFNZU19HZXRZVmFsdWUoc3JjX3BsdFtpXSksIEZYU1lTX0dldEtWYWx1ZShzcmNfcGx0W2ldKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJncl9wdHJbMl0sIGJncl9wdHJbMV0sIGJncl9wdHJbMF0pOw0KLSAgICAgICAgICAgICAgICBiZ3JfcHRyICs9IDM7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGJncl9wdHIgPSAoRlhfTFBCWVRFKXBsdDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IGRlc3RfYnVmICsgcm93ICogZGVzdF9waXRjaDsNCi0gICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBwU3JjQml0bWFwLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KSArIHNyY19sZWZ0Ow0KLSAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgIEZYX0xQQllURSBzcmNfcGl4ZWwgPSBiZ3JfcHRyICsgMyAqICgqc3JjX3NjYW4rKyk7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19waXhlbCsrOw0KLSAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfcGl4ZWwrKzsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuICAgPSAqc3JjX3BpeGVsKys7DQotICAgICAgICAgICAgZGVzdF9zY2FuICs9IGNvbXBzIC0gMjsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBfQ29udmVydEJ1ZmZlcl8yNGJwcFJnYjJSZ2IyNChGWF9MUEJZVEUgZGVzdF9idWYsIGludCBkZXN0X3BpdGNoLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwU3JjQml0bWFwLCBpbnQgc3JjX2xlZnQsIGludCBzcmNfdG9wLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQ0KLXsNCi0gICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsNCi0gICAgICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsNCi0gICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7DQotICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IGRlc3RfYnVmICsgcm93ICogZGVzdF9waXRjaDsNCi0gICAgICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gcFNyY0JpdG1hcC0+R2V0U2NhbmxpbmUoc3JjX3RvcCArIHJvdykgKyBzcmNfbGVmdCAqIDM7DQotICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgpOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyByb3cgKiBkZXN0X3BpdGNoOw0KLSAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBwU3JjQml0bWFwLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KSArIHNyY19sZWZ0ICogMzsNCi0gICAgICAgICAgICBGWFNZU19tZW1jcHkzMihkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCAqIDMpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIF9Db252ZXJ0QnVmZmVyXzMyYnBwUmdiMlJnYjI0KEZYX0xQQllURSBkZXN0X2J1ZiwgaW50IGRlc3RfcGl0Y2gsIGludCB3aWR0aCwgaW50IGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3AsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IGRlc3RfYnVmICsgcm93ICogZGVzdF9waXRjaDsNCi0gICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBwU3JjQml0bWFwLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KSArIHNyY19sZWZ0ICogNDsNCi0gICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsNCi0gICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsNCi0gICAgICAgICAgICBzcmNfc2NhbisrOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7DQotICAgICAgICBJQ29kZWNfSWNjTW9kdWxlKiBwSWNjTW9kdWxlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCk7DQotICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIHJvdyAqIGRlc3RfcGl0Y2g7DQotICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgZGVzdF9zY2FuLCBkZXN0X3NjYW4sIHdpZHRoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBfQ29udmVydEJ1ZmZlcl9SZ2IyUmdiMzIoRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQgZGVzdF9waXRjaCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3AsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBpbnQgY29tcHMgPSBwU3JjQml0bWFwLT5HZXRCUFAoKSAvIDg7DQotICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7DQotICAgICAgICBJQ29kZWNfSWNjTW9kdWxlKiBwSWNjTW9kdWxlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCk7DQotICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIHJvdyAqIGRlc3RfcGl0Y2g7DQotICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBTcmNCaXRtYXAtPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpICsgc3JjX2xlZnQgKiBjb21wczsNCi0gICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIDEpOw0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gY29tcHM7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyByb3cgKiBkZXN0X3BpdGNoOw0KLSAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBwU3JjQml0bWFwLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KSArIHNyY19sZWZ0ICogY29tcHM7DQotICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsNCi0gICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7DQotICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOw0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4rKzsNCi0gICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gY29tcHMgLSAzOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBfQ29udmVydEJ1ZmZlcl8zMmJwcENteWsyUmdiMzIoRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQgZGVzdF9waXRjaCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3AsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBpZiAocEljY1RyYW5zZm9ybSkgew0KLSAgICAgICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOw0KLSAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyByb3cgKiBkZXN0X3BpdGNoOw0KLSAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBwU3JjQml0bWFwLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KSArIHNyY19sZWZ0ICogNDsNCi0gICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIDEpOw0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIHJvdyAqIGRlc3RfcGl0Y2g7DQotICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBTcmNCaXRtYXAtPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpICsgc3JjX2xlZnQgKiA0Ow0KLSAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgQWRvYmVDTVlLX3RvX3NSR0IxKHNyY19zY2FuWzBdLCBzcmNfc2NhblsxXSwgc3JjX3NjYW5bMl0sIHNyY19zY2FuWzNdLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdLCBkZXN0X3NjYW5bMV0sIGRlc3Rfc2NhblswXSk7DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDb252ZXJ0QnVmZmVyKEZYRElCX0Zvcm1hdCBkZXN0X2Zvcm1hdCwgRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQgZGVzdF9waXRjaCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwU3JjQml0bWFwLCBpbnQgc3JjX2xlZnQsIGludCBzcmNfdG9wLCBGWF9EV09SRComIGRfcGFsLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQ0KLXsNCi0gICAgRlhESUJfRm9ybWF0IHNyY19mb3JtYXQgPSBwU3JjQml0bWFwLT5HZXRGb3JtYXQoKTsNCi0gICAgaWYgKCFDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpIHx8ICFDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKSkgew0KLSAgICAgICAgcEljY1RyYW5zZm9ybSA9IE5VTEw7DQotICAgIH0NCi0gICAgc3dpdGNoIChkZXN0X2Zvcm1hdCkgew0KLSAgICAgICAgY2FzZSBGWERJQl9JbnZhbGlkOg0KLSAgICAgICAgY2FzZSBGWERJQl8xYnBwQ215azoNCi0gICAgICAgIGNhc2UgRlhESUJfMWJwcE1hc2s6DQotICAgICAgICBjYXNlIEZYRElCXzFicHBSZ2I6DQotICAgICAgICAgICAgQVNTRVJUKEZBTFNFKTsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICBjYXNlIEZYRElCXzhicHBNYXNrOiB7DQotICAgICAgICAgICAgICAgIGlmICgoc3JjX2Zvcm1hdCAmIDB4ZmYpID09IDEpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwU3JjQml0bWFwLT5HZXRQYWxldHRlKCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0NvbnZlcnRCdWZmZXJfMWJwcFBsdDJHcmF5KGRlc3RfYnVmLCBkZXN0X3BpdGNoLCB3aWR0aCwgaGVpZ2h0LCBwU3JjQml0bWFwLCBzcmNfbGVmdCwgc3JjX3RvcCwgcEljY1RyYW5zZm9ybSk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0NvbnZlcnRCdWZmZXJfMWJwcE1hc2syR3JheShkZXN0X2J1ZiwgZGVzdF9waXRjaCwgd2lkdGgsIGhlaWdodCwgcFNyY0JpdG1hcCwgc3JjX2xlZnQsIHNyY190b3ApOw0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChzcmNfZm9ybWF0ICYgMHhmZikgPT0gOCkgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBTcmNCaXRtYXAtPkdldFBhbGV0dGUoKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfQ29udmVydEJ1ZmZlcl84YnBwUGx0MkdyYXkoZGVzdF9idWYsIGRlc3RfcGl0Y2gsIHdpZHRoLCBoZWlnaHQsIHBTcmNCaXRtYXAsIHNyY19sZWZ0LCBzcmNfdG9wLCBwSWNjVHJhbnNmb3JtKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBfQ29udmVydEJ1ZmZlcl84YnBwTWFzazJHcmF5KGRlc3RfYnVmLCBkZXN0X3BpdGNoLCB3aWR0aCwgaGVpZ2h0LCBwU3JjQml0bWFwLCBzcmNfbGVmdCwgc3JjX3RvcCk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHNyY19mb3JtYXQgJiAweGZmKSA+PSAyNCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9Db252ZXJ0QnVmZmVyX1JnYk9yQ215azJHcmF5KGRlc3RfYnVmLCBkZXN0X3BpdGNoLCB3aWR0aCwgaGVpZ2h0LCBwU3JjQml0bWFwLCBzcmNfbGVmdCwgc3JjX3RvcCwgcEljY1RyYW5zZm9ybSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgRlhESUJfOGJwcFJnYjoNCi0gICAgICAgIGNhc2UgRlhESUJfOGJwcFJnYmE6IHsNCi0gICAgICAgICAgICAgICAgaWYgKChzcmNfZm9ybWF0ICYgMHhmZikgPT0gOCAmJiBwU3JjQml0bWFwLT5HZXRQYWxldHRlKCkgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnZlcnRCdWZmZXIoRlhESUJfOGJwcE1hc2ssIGRlc3RfYnVmLCBkZXN0X3BpdGNoLCB3aWR0aCwgaGVpZ2h0LCBwU3JjQml0bWFwLCBzcmNfbGVmdCwgc3JjX3RvcCwgZF9wYWwsIHBJY2NUcmFuc2Zvcm0pOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGRfcGFsID0gRlhfQWxsb2MoRlhfRFdPUkQsIDI1Nik7DQotICAgICAgICAgICAgICAgIGlmICghZF9wYWwpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBGWFNZU19tZW1zZXQzMihkX3BhbCwgMCwgc2l6ZW9mKEZYX0RXT1JEKSAqIDI1Nik7DQotICAgICAgICAgICAgICAgIGlmICgoKHNyY19mb3JtYXQgJiAweGZmKSA9PSAxIHx8IChzcmNfZm9ybWF0ICYgMHhmZikgPT0gOCkgJiYgcFNyY0JpdG1hcC0+R2V0UGFsZXR0ZSgpKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0NvbnZlcnRCdWZmZXJfUGx0MlBsdFJnYjgoZGVzdF9idWYsIGRlc3RfcGl0Y2gsIHdpZHRoLCBoZWlnaHQsIHBTcmNCaXRtYXAsIHNyY19sZWZ0LCBzcmNfdG9wLCBkX3BhbCwgcEljY1RyYW5zZm9ybSk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHNyY19mb3JtYXQgJiAweGZmKSA+PSAyNCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9Db252ZXJ0QnVmZmVyX1JnYjJQbHRSZ2I4KGRlc3RfYnVmLCBkZXN0X3BpdGNoLCB3aWR0aCwgaGVpZ2h0LCBwU3JjQml0bWFwLCBzcmNfbGVmdCwgc3JjX3RvcCwgZF9wYWwsIHBJY2NUcmFuc2Zvcm0pOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIEZYRElCX1JnYjoNCi0gICAgICAgIGNhc2UgRlhESUJfUmdiYTogew0KLSAgICAgICAgICAgICAgICBpZiAoKHNyY19mb3JtYXQgJiAweGZmKSA9PSAxKSB7DQotICAgICAgICAgICAgICAgICAgICBpZiAocFNyY0JpdG1hcC0+R2V0UGFsZXR0ZSgpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9Db252ZXJ0QnVmZmVyXzFicHBQbHQyUmdiKGRlc3RfZm9ybWF0LCBkZXN0X2J1ZiwgZGVzdF9waXRjaCwgd2lkdGgsIGhlaWdodCwgcFNyY0JpdG1hcCwgc3JjX2xlZnQsIHNyY190b3AsIHBJY2NUcmFuc2Zvcm0pOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9Db252ZXJ0QnVmZmVyXzFicHBNYXNrMlJnYihkZXN0X2Zvcm1hdCwgZGVzdF9idWYsIGRlc3RfcGl0Y2gsIHdpZHRoLCBoZWlnaHQsIHBTcmNCaXRtYXAsIHNyY19sZWZ0LCBzcmNfdG9wKTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoc3JjX2Zvcm1hdCAmIDB4ZmYpID09IDgpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwU3JjQml0bWFwLT5HZXRQYWxldHRlKCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0NvbnZlcnRCdWZmZXJfOGJwcFBsdDJSZ2IoZGVzdF9mb3JtYXQsIGRlc3RfYnVmLCBkZXN0X3BpdGNoLCB3aWR0aCwgaGVpZ2h0LCBwU3JjQml0bWFwLCBzcmNfbGVmdCwgc3JjX3RvcCwgcEljY1RyYW5zZm9ybSk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0NvbnZlcnRCdWZmZXJfOGJwcE1hc2syUmdiKGRlc3RfZm9ybWF0LCBkZXN0X2J1ZiwgZGVzdF9waXRjaCwgd2lkdGgsIGhlaWdodCwgcFNyY0JpdG1hcCwgc3JjX2xlZnQsIHNyY190b3ApOw0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChzcmNfZm9ybWF0ICYgMHhmZikgPT0gMjQpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBfQ29udmVydEJ1ZmZlcl8yNGJwcFJnYjJSZ2IyNChkZXN0X2J1ZiwgZGVzdF9waXRjaCwgd2lkdGgsIGhlaWdodCwgcFNyY0JpdG1hcCwgc3JjX2xlZnQsIHNyY190b3AsIHBJY2NUcmFuc2Zvcm0pOw0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChzcmNfZm9ybWF0ICYgMHhmZikgPT0gMzIpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBfQ29udmVydEJ1ZmZlcl8zMmJwcFJnYjJSZ2IyNChkZXN0X2J1ZiwgZGVzdF9waXRjaCwgd2lkdGgsIGhlaWdodCwgcFNyY0JpdG1hcCwgc3JjX2xlZnQsIHNyY190b3AsIHBJY2NUcmFuc2Zvcm0pOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIEZYRElCX0FyZ2I6DQotICAgICAgICBjYXNlIEZYRElCX1JnYjMyOiB7DQotICAgICAgICAgICAgICAgIGlmICgoc3JjX2Zvcm1hdCAmIDB4ZmYpID09IDEpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwU3JjQml0bWFwLT5HZXRQYWxldHRlKCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0NvbnZlcnRCdWZmZXJfMWJwcFBsdDJSZ2IoZGVzdF9mb3JtYXQsIGRlc3RfYnVmLCBkZXN0X3BpdGNoLCB3aWR0aCwgaGVpZ2h0LCBwU3JjQml0bWFwLCBzcmNfbGVmdCwgc3JjX3RvcCwgcEljY1RyYW5zZm9ybSk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0NvbnZlcnRCdWZmZXJfMWJwcE1hc2syUmdiKGRlc3RfZm9ybWF0LCBkZXN0X2J1ZiwgZGVzdF9waXRjaCwgd2lkdGgsIGhlaWdodCwgcFNyY0JpdG1hcCwgc3JjX2xlZnQsIHNyY190b3ApOw0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChzcmNfZm9ybWF0ICYgMHhmZikgPT0gOCkgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBTcmNCaXRtYXAtPkdldFBhbGV0dGUoKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfQ29udmVydEJ1ZmZlcl84YnBwUGx0MlJnYihkZXN0X2Zvcm1hdCwgZGVzdF9idWYsIGRlc3RfcGl0Y2gsIHdpZHRoLCBoZWlnaHQsIHBTcmNCaXRtYXAsIHNyY19sZWZ0LCBzcmNfdG9wLCBwSWNjVHJhbnNmb3JtKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBfQ29udmVydEJ1ZmZlcl84YnBwTWFzazJSZ2IoZGVzdF9mb3JtYXQsIGRlc3RfYnVmLCBkZXN0X3BpdGNoLCB3aWR0aCwgaGVpZ2h0LCBwU3JjQml0bWFwLCBzcmNfbGVmdCwgc3JjX3RvcCk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHNyY19mb3JtYXQgJiAweGZmKSA+PSAyNCkgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19mb3JtYXQgJiAweDA0MDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0NvbnZlcnRCdWZmZXJfMzJicHBDbXlrMlJnYjMyKGRlc3RfYnVmLCBkZXN0X3BpdGNoLCB3aWR0aCwgaGVpZ2h0LCBwU3JjQml0bWFwLCBzcmNfbGVmdCwgc3JjX3RvcCwgcEljY1RyYW5zZm9ybSk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0NvbnZlcnRCdWZmZXJfUmdiMlJnYjMyKGRlc3RfYnVmLCBkZXN0X3BpdGNoLCB3aWR0aCwgaGVpZ2h0LCBwU3JjQml0bWFwLCBzcmNfbGVmdCwgc3JjX3RvcCwgcEljY1RyYW5zZm9ybSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotQ0ZYX0RJQml0bWFwKiBDRlhfRElCU291cmNlOjpDbG9uZUNvbnZlcnQoRlhESUJfRm9ybWF0IGRlc3RfZm9ybWF0LCBjb25zdCBGWF9SRUNUKiBwQ2xpcCwgdm9pZCogcEljY1RyYW5zZm9ybSkgY29uc3QNCi17DQotICAgIGlmKGRlc3RfZm9ybWF0ID09IEdldEZvcm1hdCgpICYmIHBJY2NUcmFuc2Zvcm0gPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIENsb25lKHBDbGlwKTsNCi0gICAgfQ0KLSAgICBpZiAocENsaXApIHsNCi0gICAgICAgIENGWF9ESUJpdG1hcCogcENsb25lID0gQ2xvbmUocENsaXApOw0KLSAgICAgICAgaWYgKHBDbG9uZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBpZighcENsb25lLT5Db252ZXJ0Rm9ybWF0KGRlc3RfZm9ybWF0LCBwSWNjVHJhbnNmb3JtKSkgew0KLSAgICAgICAgICAgIGRlbGV0ZSBwQ2xvbmU7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gcENsb25lOw0KLSAgICB9DQotICAgIENGWF9ESUJpdG1hcCogcENsb25lID0gRlhfTkVXIENGWF9ESUJpdG1hcDsNCi0gICAgaWYgKCFwQ2xvbmUpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmKCFwQ2xvbmUtPkNyZWF0ZShtX1dpZHRoLCBtX0hlaWdodCwgZGVzdF9mb3JtYXQpKSB7DQotICAgICAgICBkZWxldGUgcENsb25lOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgRlhfQk9PTCByZXQgPSBUUlVFOw0KLSAgICBDRlhfRElCaXRtYXAqIHBTcmNBbHBoYSA9IE5VTEw7DQotICAgIGlmIChtX0FscGhhRmxhZyAmIDIpIHsNCi0gICAgICAgIHBTcmNBbHBoYSA9IChHZXRGb3JtYXQoKSA9PSBGWERJQl9BcmdiKSA/IEdldEFscGhhTWFzaygpIDogbV9wQWxwaGFNYXNrOw0KLSAgICAgICAgaWYgKHBTcmNBbHBoYSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgZGVsZXRlIHBDbG9uZTsNCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoZGVzdF9mb3JtYXQgJiAweDAyMDApIHsNCi0gICAgICAgIGlmIChkZXN0X2Zvcm1hdCA9PSBGWERJQl9BcmdiKQ0KLSAgICAgICAgICAgIHJldCA9IHBTcmNBbHBoYSA/DQotICAgICAgICAgICAgICAgICAgcENsb25lLT5Mb2FkQ2hhbm5lbChGWERJQl9BbHBoYSwgcFNyY0FscGhhLCBGWERJQl9BbHBoYSkgOg0KLSAgICAgICAgICAgICAgICAgIHBDbG9uZS0+TG9hZENoYW5uZWwoRlhESUJfQWxwaGEsIDB4ZmYpOw0KLSAgICAgICAgZWxzZSB7DQotICAgICAgICAgICAgcmV0ID0gcENsb25lLT5Db3B5QWxwaGFNYXNrKHBTcmNBbHBoYSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKHBTcmNBbHBoYSAmJiBwU3JjQWxwaGEgIT0gbV9wQWxwaGFNYXNrKSB7DQotICAgICAgICBkZWxldGUgcFNyY0FscGhhOw0KLSAgICAgICAgcFNyY0FscGhhID0gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAoIXJldCkgew0KLSAgICAgICAgZGVsZXRlIHBDbG9uZTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIEZYX0RXT1JEKiBwYWxfOGJwcCA9IE5VTEw7DQotICAgIHJldCA9IENvbnZlcnRCdWZmZXIoZGVzdF9mb3JtYXQsIHBDbG9uZS0+R2V0QnVmZmVyKCksIHBDbG9uZS0+R2V0UGl0Y2goKSwgbV9XaWR0aCwgbV9IZWlnaHQsIHRoaXMsIDAsIDAsIHBhbF84YnBwLCBwSWNjVHJhbnNmb3JtKTsNCi0gICAgaWYgKCFyZXQpIHsNCi0gICAgICAgIGlmIChwYWxfOGJwcCkgew0KLSAgICAgICAgICAgIEZYX0ZyZWUocGFsXzhicHApOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVsZXRlIHBDbG9uZTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmIChwYWxfOGJwcCkgew0KLSAgICAgICAgcENsb25lLT5Db3B5UGFsZXR0ZShwYWxfOGJwcCk7DQotICAgICAgICBGWF9GcmVlKHBhbF84YnBwKTsNCi0gICAgICAgIHBhbF84YnBwID0gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gcENsb25lOw0KLX0NCi1GWF9CT09MIENGWF9ESUJpdG1hcDo6Q29udmVydEZvcm1hdChGWERJQl9Gb3JtYXQgZGVzdF9mb3JtYXQsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBGWERJQl9Gb3JtYXQgc3JjX2Zvcm1hdCA9IEdldEZvcm1hdCgpOw0KLSAgICBpZiAoZGVzdF9mb3JtYXQgPT0gc3JjX2Zvcm1hdCAmJiBwSWNjVHJhbnNmb3JtID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIGlmIChkZXN0X2Zvcm1hdCA9PSBGWERJQl84YnBwTWFzayAmJiBzcmNfZm9ybWF0ID09IEZYRElCXzhicHBSZ2IgJiYgbV9wUGFsZXR0ZSA9PSBOVUxMKSB7DQotICAgICAgICBtX0FscGhhRmxhZyA9IDE7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBpZiAoZGVzdF9mb3JtYXQgPT0gRlhESUJfQXJnYiAmJiBzcmNfZm9ybWF0ID09IEZYRElCX1JnYjMyICYmIHBJY2NUcmFuc2Zvcm0gPT0gTlVMTCkgew0KLSAgICAgICAgbV9BbHBoYUZsYWcgPSAyOw0KLSAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9IZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgIEZYX0xQQllURSBzY2FubGluZSA9IG1fcEJ1ZmZlciArIHJvdyAqIG1fUGl0Y2ggKyAzOw0KLSAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAqc2NhbmxpbmUgPSAweGZmOw0KLSAgICAgICAgICAgICAgICBzY2FubGluZSArPSA0Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIGludCBkZXN0X2JwcCA9IGRlc3RfZm9ybWF0ICYgMHhmZjsNCi0gICAgaW50IGRlc3RfcGl0Y2ggPSAoZGVzdF9icHAgKiBtX1dpZHRoICsgMzEpIC8gMzIgKiA0Ow0KLSAgICBGWF9MUEJZVEUgZGVzdF9idWYgPSBGWF9BbGxvY05MKEZYX0JZVEUsIGRlc3RfcGl0Y2ggKiBtX0hlaWdodCArIDQpOw0KLSAgICBpZiAoZGVzdF9idWYgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIENGWF9ESUJpdG1hcCogcEFscGhhTWFzayA9IE5VTEw7DQotICAgIGlmIChkZXN0X2Zvcm1hdCA9PSBGWERJQl9BcmdiKSB7DQotICAgICAgICBGWFNZU19tZW1zZXQ4KGRlc3RfYnVmLCAweGZmLCBkZXN0X3BpdGNoICogbV9IZWlnaHQgKyA0KTsNCi0gICAgICAgIGlmIChtX3BBbHBoYU1hc2spIHsNCi0gICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBtX0hlaWdodDsgcm93ICsrKSB7DQotICAgICAgICAgICAgICAgIEZYX0xQQllURSBwRHN0U2NhbmxpbmUgPSBkZXN0X2J1ZiArIHJvdyAqIGRlc3RfcGl0Y2ggKyAzOw0KLSAgICAgICAgICAgICAgICBGWF9MUENCWVRFIHBTcmNTY2FubGluZSA9IG1fcEFscGhhTWFzay0+R2V0U2NhbmxpbmUocm93KTsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbV9XaWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAqcERzdFNjYW5saW5lID0gKnBTcmNTY2FubGluZSsrOw0KLSAgICAgICAgICAgICAgICAgICAgcERzdFNjYW5saW5lICs9IDQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZiAoZGVzdF9mb3JtYXQgJiAweDAyMDApIHsNCi0gICAgICAgIGlmIChzcmNfZm9ybWF0ID09IEZYRElCX0FyZ2IpIHsNCi0gICAgICAgICAgICBwQWxwaGFNYXNrID0gR2V0QWxwaGFNYXNrKCk7DQotICAgICAgICAgICAgaWYgKHBBbHBoYU1hc2sgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICBGWF9GcmVlKGRlc3RfYnVmKTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYgKG1fcEFscGhhTWFzayA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIGlmICghQnVpbGRBbHBoYU1hc2soKSkgew0KLSAgICAgICAgICAgICAgICAgICAgRlhfRnJlZShkZXN0X2J1Zik7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcEFscGhhTWFzayA9IG1fcEFscGhhTWFzazsNCi0gICAgICAgICAgICAgICAgbV9wQWxwaGFNYXNrID0gTlVMTDsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBwQWxwaGFNYXNrID0gbV9wQWxwaGFNYXNrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBGWF9CT09MIHJldCA9IEZBTFNFOw0KLSAgICBGWF9EV09SRCogcGFsXzhicHAgPSBOVUxMOw0KLSAgICByZXQgPSBDb252ZXJ0QnVmZmVyKGRlc3RfZm9ybWF0LCBkZXN0X2J1ZiwgZGVzdF9waXRjaCwgbV9XaWR0aCwgbV9IZWlnaHQsIHRoaXMsIDAsIDAsIHBhbF84YnBwLCBwSWNjVHJhbnNmb3JtKTsNCi0gICAgaWYgKCFyZXQpIHsNCi0gICAgICAgIGlmIChwYWxfOGJwcCkgew0KLSAgICAgICAgICAgIEZYX0ZyZWUocGFsXzhicHApOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBBbHBoYU1hc2sgIT0gbV9wQWxwaGFNYXNrKSB7DQotICAgICAgICAgICAgZGVsZXRlIHBBbHBoYU1hc2s7DQotICAgICAgICB9DQotICAgICAgICBpZiAoZGVzdF9idWYpIHsNCi0gICAgICAgICAgICBGWF9GcmVlKGRlc3RfYnVmKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAobV9wQWxwaGFNYXNrICYmIHBBbHBoYU1hc2sgIT0gbV9wQWxwaGFNYXNrKSB7DQotICAgICAgICBkZWxldGUgbV9wQWxwaGFNYXNrOw0KLSAgICB9DQotICAgIG1fcEFscGhhTWFzayA9IHBBbHBoYU1hc2s7DQotICAgIGlmIChtX3BQYWxldHRlKSB7DQotICAgICAgICBGWF9GcmVlKG1fcFBhbGV0dGUpOw0KLSAgICB9DQotICAgIG1fcFBhbGV0dGUgPSBwYWxfOGJwcDsNCi0gICAgaWYgKCFtX2JFeHRCdWYpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wQnVmZmVyKTsNCi0gICAgfQ0KLSAgICBtX2JFeHRCdWYgPSBGQUxTRTsNCi0gICAgbV9wQnVmZmVyID0gZGVzdF9idWY7DQotICAgIG1fYnBwID0gKEZYX0JZVEUpZGVzdF9mb3JtYXQ7DQotICAgIG1fQWxwaGFGbGFnID0gKEZYX0JZVEUpKGRlc3RfZm9ybWF0ID4+IDgpOw0KLSAgICBtX1BpdGNoID0gZGVzdF9waXRjaDsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZGliLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgiCitjb25zdCBGWF9EV09SRCBnX2R3V2luUGFsZXR0ZVsyNTZdID0geworICAgIDB4ZmYwMDAwMDAsIDB4ZmY4MDAwMDAsIDB4ZmYwMDgwMDAsIDB4ZmY4MDgwMDAsIDB4ZmYwMDAwODAsIDB4ZmY4MDAwODAsCisgICAgMHhmZjAwODA4MCwgMHhmZjgwODA4MCwgMHhmZkMwRENDMCwgMHhmZkE2Q0FGMCwgMHhmZjJBM0ZBQSwgMHhmZjJBM0ZGRiwKKyAgICAweGZmMkE1RjAwLCAweGZmMkE1RjU1LCAweGZmMkE1RkFBLCAweGZmMkE1RkZGLCAweGZmMkE3RjAwLCAweGZmMkE3RjU1LAorICAgIDB4ZmYyQTdGQUEsIDB4ZmYyQTdGRkYsIDB4ZmYyQTlGMDAsIDB4ZmYyQTlGNTUsIDB4ZmYyQTlGQUEsIDB4ZmYyQTlGRkYsCisgICAgMHhmZjJBQkYwMCwgMHhmZjJBQkY1NSwgMHhmZjJBQkZBQSwgMHhmZjJBQkZGRiwgMHhmZjJBREYwMCwgMHhmZjJBREY1NSwKKyAgICAweGZmMkFERkFBLCAweGZmMkFERkZGLCAweGZmMkFGRjAwLCAweGZmMkFGRjU1LCAweGZmMkFGRkFBLCAweGZmMkFGRkZGLAorICAgIDB4ZmY1NTAwMDAsIDB4ZmY1NTAwNTUsIDB4ZmY1NTAwQUEsIDB4ZmY1NTAwRkYsIDB4ZmY1NTFGMDAsIDB4ZmY1NTFGNTUsCisgICAgMHhmZjU1MUZBQSwgMHhmZjU1MUZGRiwgMHhmZjU1M0YwMCwgMHhmZjU1M0Y1NSwgMHhmZjU1M0ZBQSwgMHhmZjU1M0ZGRiwKKyAgICAweGZmNTU1RjAwLCAweGZmNTU1RjU1LCAweGZmNTU1RkFBLCAweGZmNTU1RkZGLCAweGZmNTU3RjAwLCAweGZmNTU3RjU1LAorICAgIDB4ZmY1NTdGQUEsIDB4ZmY1NTdGRkYsIDB4ZmY1NTlGMDAsIDB4ZmY1NTlGNTUsIDB4ZmY1NTlGQUEsIDB4ZmY1NTlGRkYsCisgICAgMHhmZjU1QkYwMCwgMHhmZjU1QkY1NSwgMHhmZjU1QkZBQSwgMHhmZjU1QkZGRiwgMHhmZjU1REYwMCwgMHhmZjU1REY1NSwKKyAgICAweGZmNTVERkFBLCAweGZmNTVERkZGLCAweGZmNTVGRjAwLCAweGZmNTVGRjU1LCAweGZmNTVGRkFBLCAweGZmNTVGRkZGLAorICAgIDB4ZmY3RjAwMDAsIDB4ZmY3RjAwNTUsIDB4ZmY3RjAwQUEsIDB4ZmY3RjAwRkYsIDB4ZmY3RjFGMDAsIDB4ZmY3RjFGNTUsCisgICAgMHhmZjdGMUZBQSwgMHhmZjdGMUZGRiwgMHhmZjdGM0YwMCwgMHhmZjdGM0Y1NSwgMHhmZjdGM0ZBQSwgMHhmZjdGM0ZGRiwKKyAgICAweGZmN0Y1RjAwLCAweGZmN0Y1RjU1LCAweGZmN0Y1RkFBLCAweGZmN0Y1RkZGLCAweGZmN0Y3RjAwLCAweGZmN0Y3RjU1LAorICAgIDB4ZmY3RjdGQUEsIDB4ZmY3RjdGRkYsIDB4ZmY3RjlGMDAsIDB4ZmY3RjlGNTUsIDB4ZmY3RjlGQUEsIDB4ZmY3RjlGRkYsCisgICAgMHhmZjdGQkYwMCwgMHhmZjdGQkY1NSwgMHhmZjdGQkZBQSwgMHhmZjdGQkZGRiwgMHhmZjdGREYwMCwgMHhmZjdGREY1NSwKKyAgICAweGZmN0ZERkFBLCAweGZmN0ZERkZGLCAweGZmMDBGRjdGLCAweGZmN0ZGRjU1LCAweGZmN0ZGRkFBLCAweGZmN0ZGRkZGLAorICAgIDB4ZmZBQTAwMDAsIDB4ZmZBQTAwNTUsIDB4ZmZBQTAwQUEsIDB4ZmZBQTAwRkYsIDB4ZmZBQTFGMDAsIDB4ZmZBQTFGNTUsCisgICAgMHhmZkFBMUZBQSwgMHhmZkFBMUZGRiwgMHhmZkFBM0YwMCwgMHhmZkFBM0Y1NSwgMHhmZkFBM0ZBQSwgMHhmZkFBM0ZGRiwKKyAgICAweGZmQUE1RjAwLCAweGZmQUE1RjU1LCAweGZmQUE1RkFBLCAweGZmQUE1RkZGLCAweGZmQUE3RjAwLCAweGZmQUE3RjU1LAorICAgIDB4ZmZBQTdGQUEsIDB4ZmZBQTdGRkYsIDB4ZmZBQTlGMDAsIDB4ZmZBQTlGNTUsIDB4ZmZBQTlGQUEsIDB4ZmZBQTlGRkYsCisgICAgMHhmZkFBQkYwMCwgMHhmZkFBQkY1NSwgMHhmZkFBQkZBQSwgMHhmZkFBQkZGRiwgMHhmZkFBREYwMCwgMHhmZkFBREY1NSwKKyAgICAweGZmQUFERkFBLCAweGZmQUFERkZGLCAweGZmQUFGRjAwLCAweGZmQUFGRjU1LCAweGZmQUFGRkFBLCAweGZmQUFGRkZGLAorICAgIDB4ZmZENDAwMDAsIDB4ZmZENDAwNTUsIDB4ZmZENDAwQUEsIDB4ZmZENDAwRkYsIDB4ZmZENDFGMDAsIDB4ZmZENDFGNTUsCisgICAgMHhmZkQ0MUZBQSwgMHhmZkQ0MUZGRiwgMHhmZkQ0M0YwMCwgMHhmZkQ0M0Y1NSwgMHhmZkQ0M0ZBQSwgMHhmZkQ0M0ZGRiwKKyAgICAweGZmRDQ1RjAwLCAweGZmRDQ1RjU1LCAweGZmRDQ1RkFBLCAweGZmRDQ1RkZGLCAweGZmRDQ3RjAwLCAweGZmRDQ3RjU1LAorICAgIDB4ZmZENDdGQUEsIDB4ZmZENEY3RkYsIDB4ZmZENDlGMDAsIDB4ZmZENDlGNTUsIDB4ZmZENDlGQUEsIDB4ZmZENDlGRkYsCisgICAgMHhmZkQ0QkYwMCwgMHhmZkQ0QkY1NSwgMHhmZkQ0QkZBQSwgMHhmZkQ0QkZGRiwgMHhmZkQ0REYwMCwgMHhmZkQ0REY1NSwKKyAgICAweGZmRDRERkFBLCAweGZmRDRERkZGLCAweGZmRDRGRjAwLCAweGZmRDRGRjU1LCAweGZmRDRGRkFBLCAweGZmRDRGRkZGLAorICAgIDB4ZmZGRjAwNTUsIDB4ZmZGRjAwQUEsIDB4ZmZGRjFGMDAsIDB4ZmZGRjFGNTUsIDB4ZmZGRjFGQUEsIDB4ZmZGRjFGRkYsCisgICAgMHhmZkZGM0YwMCwgMHhmZkZGM0Y1NSwgMHhmZkZGM0ZBQSwgMHhmZkZGM0ZGRiwgMHhmZkZGNUYwMCwgMHhmZkZGNUY1NSwKKyAgICAweGZmRkY1RkFBLCAweGZmRkY1RkZGLCAweGZmRkY3RjAwLCAweGZmRkY3RjU1LCAweGZmRkY3RkFBLCAweGZmRkY3RkZGLAorICAgIDB4ZmZGRjlGMDAsIDB4ZmZGRjlGNTUsIDB4ZmZGRjlGQUEsIDB4ZmZGRjlGRkYsIDB4ZmZGRkJGMDAsIDB4ZmZGRkJGNTUsCisgICAgMHhmZkZGQkZBQSwgMHhmZkZGQkZGRiwgMHhmZkZGREYwMCwgMHhmZkZGREY1NSwgMHhmZkZGREZBQSwgMHhmZkZGREZGRiwKKyAgICAweGZmRkZGRjU1LCAweGZmRkZGRkFBLCAweGZmQ0NDQ0ZGLCAweGZmRkZDQ0ZGLCAweGZmMzNGRkZGLCAweGZmNjZGRkZGLAorICAgIDB4ZmY5OUZGRkYsIDB4ZmZDQ0ZGRkYsIDB4ZmYwMDdGMDAsIDB4ZmYwMDdGNTUsIDB4ZmYwMDdGQUEsIDB4ZmYwMDdGRkYsCisgICAgMHhmZjAwOUYwMCwgMHhmZjAwOUY1NSwgMHhmZjAwOUZBQSwgMHhmZjAwOUZGRiwgMHhmZjAwQkYwMCwgMHhmZjAwQkY1NSwKKyAgICAweGZmMDBCRkFBLCAweGZmMDBCRkZGLCAweGZmMDBERjAwLCAweGZmMDBERjU1LCAweGZmMDBERkFBLCAweGZmMDBERkZGLAorICAgIDB4ZmYwMEZGNTUsIDB4ZmYwMEZGQUEsIDB4ZmYyQTAwMDAsIDB4ZmYyQTAwNTUsIDB4ZmYyQTAwQUEsIDB4ZmYyQTAwRkYsCisgICAgMHhmZjJBMUYwMCwgMHhmZjJBMUY1NSwgMHhmZjJBMUZBQSwgMHhmZjJBMUZGRiwgMHhmZjJBM0YwMCwgMHhmZjJBM0Y1NSwKKyAgICAweGZmRkZGQkYwLCAweGZmQTBBMEE0LCAweGZmODA4MDgwLCAweGZmRkYwMDAwLCAweGZmMDBGRjAwLCAweGZmRkYwMDAwLAorICAgIDB4ZmYwMDAwRkYsIDB4ZmZGRjAwRkYsIDB4ZmYwMEZGRkYsIDB4ZmZGRkZGRkYKK307Citjb25zdCBGWF9EV09SRCBnX2R3TWFjUGFsZXR0ZVsyNTZdID0geworICAgIDB4ZmZGRkZGRkYsIDB4ZmZGRkZGQ0MsIDB4ZmZGRkZGOTksIDB4ZmZGRkZGNjYsIDB4ZmZGRkZGMzMsIDB4ZmZGRkZGMDAsCisgICAgMHhmZkZGQ0NGRiwgMHhmZkZGQ0NDQywgMHhmZkZGQ0M5OSwgMHhmZkZGQ0M2NiwgMHhmZkZGQ0MzMywgMHhmZkZGQ0MwMCwKKyAgICAweGZmRkY5OUZGLCAweGZmRkY5OUNDLCAweGZmRkY5OTk5LCAweGZmRkY5OTY2LCAweGZmRkY5OTMzLCAweGZmRkY5OTAwLAorICAgIDB4ZmZGRjY2RkYsIDB4ZmZGRjY2Q0MsIDB4ZmZGRjY2OTksIDB4ZmZGRjY2NjYsIDB4ZmZGRjY2MzMsIDB4ZmZGRjY2MDAsCisgICAgMHhmZkZGMzNGRiwgMHhmZkZGMzNDQywgMHhmZkZGMzM5OSwgMHhmZkZGMzM2NiwgMHhmZkZGMzMzMywgMHhmZkZGMzMwMCwKKyAgICAweGZmRkYwMEZGLCAweGZmRkYwMENDLCAweGZmRkYwMDk5LCAweGZmRkYwMDY2LCAweGZmRkYwMDMzLCAweGZmRkYwMDAwLAorICAgIDB4ZmZDQ0ZGRkYsIDB4ZmZDQ0ZGQ0MsIDB4ZmZDQ0ZGOTksIDB4ZmZDQ0ZGNjYsIDB4ZmZDQ0ZGMzMsIDB4ZmZDQ0ZGMDAsCisgICAgMHhmZkNDQ0NGRiwgMHhmZkNDQ0NDQywgMHhmZkNDQ0M5OSwgMHhmZkNDQ0M2NiwgMHhmZkNDQ0MzMywgMHhmZkNDQ0MwMCwKKyAgICAweGZmQ0M5OUZGLCAweGZmQ0M5OUNDLCAweGZmQ0M5OTk5LCAweGZmQ0M5OTY2LCAweGZmQ0M5OTMzLCAweGZmQ0M5OTAwLAorICAgIDB4ZmZDQzY2RkYsIDB4ZmZDQzY2Q0MsIDB4ZmZDQzY2OTksIDB4ZmZDQzY2NjYsIDB4ZmZDQzY2MzMsIDB4ZmZDQzY2MDAsCisgICAgMHhmZkNDMzNGRiwgMHhmZkNDMzNDQywgMHhmZkNDMzM5OSwgMHhmZkNDMzM2NiwgMHhmZkNDMzMzMywgMHhmZkNDMzMwMCwKKyAgICAweGZmQ0MwMEZGLCAweGZmQ0MwMENDLCAweGZmQ0MwMDk5LCAweGZmQ0MwMDY2LCAweGZmQ0MwMDMzLCAweGZmQ0MwMDAwLAorICAgIDB4ZmY5OUZGRkYsIDB4ZmY5OUZGQ0MsIDB4ZmY5OUZGOTksIDB4ZmY5OUZGNjYsIDB4ZmY5OUZGMzMsIDB4ZmY5OUZGMDAsCisgICAgMHhmZjk5Q0NGRiwgMHhmZjk5Q0NDQywgMHhmZjk5Q0M5OSwgMHhmZjk5Q0M2NiwgMHhmZjk5Q0MzMywgMHhmZjk5Q0MwMCwKKyAgICAweGZmOTk5OUZGLCAweGZmOTk5OUNDLCAweGZmOTk5OTk5LCAweGZmOTk5OTY2LCAweGZmOTk5OTMzLCAweGZmOTk5OTAwLAorICAgIDB4ZmY5OTY2RkYsIDB4ZmY5OTY2Q0MsIDB4ZmY5OTY2OTksIDB4ZmY5OTY2NjYsIDB4ZmY5OTY2MzMsIDB4ZmY5OTY2MDAsCisgICAgMHhmZjk5MzNGRiwgMHhmZjk5MzNDQywgMHhmZjk5MzM5OSwgMHhmZjk5MzM2NiwgMHhmZjk5MzMzMywgMHhmZjk5MzMwMCwKKyAgICAweGZmOTkwMEZGLCAweGZmOTkwMENDLCAweGZmOTkwMDk5LCAweGZmOTkwMDY2LCAweGZmOTkwMDMzLCAweGZmOTkwMDAwLAorICAgIDB4ZmY2NkZGRkYsIDB4ZmY2NkZGQ0MsIDB4ZmY2NkZGOTksIDB4ZmY2NkZGNjYsIDB4ZmY2NkZGMzMsIDB4ZmY2NkZGMDAsCisgICAgMHhmZjY2Q0NGRiwgMHhmZjY2Q0NDQywgMHhmZjY2Q0M5OSwgMHhmZjY2Q0M2NiwgMHhmZjY2Q0MzMywgMHhmZjY2Q0MwMCwKKyAgICAweGZmNjY5OUZGLCAweGZmNjY5OUNDLCAweGZmNjY5OTk5LCAweGZmNjY5OTY2LCAweGZmNjY5OTMzLCAweGZmNjY5OTAwLAorICAgIDB4ZmY2NjY2RkYsIDB4ZmY2NjY2Q0MsIDB4ZmY2NjY2OTksIDB4ZmY2NjY2NjYsIDB4ZmY2NjY2MzMsIDB4ZmY2NjY2MDAsCisgICAgMHhmZjY2MzNGRiwgMHhmZjY2MzNDQywgMHhmZjY2MzM5OSwgMHhmZjY2MzM2NiwgMHhmZjY2MzMzMywgMHhmZjY2MzMwMCwKKyAgICAweGZmNjYwMEZGLCAweGZmNjYwMENDLCAweGZmNjYwMDk5LCAweGZmNjYwMDY2LCAweGZmNjYwMDMzLCAweGZmNjYwMDAwLAorICAgIDB4ZmYzM0ZGRkYsIDB4ZmYzM0ZGQ0MsIDB4ZmYzM0ZGOTksIDB4ZmYzM0ZGNjYsIDB4ZmYzM0ZGMzMsIDB4ZmYzM0ZGMDAsCisgICAgMHhmZjMzQ0NGRiwgMHhmZjMzQ0NDQywgMHhmZjMzQ0M5OSwgMHhmZjMzQ0M2NiwgMHhmZjMzQ0MzMywgMHhmZjMzQ0MwMCwKKyAgICAweGZmMzM5OUZGLCAweGZmMzM5OUNDLCAweGZmMzM5OTk5LCAweGZmMzM5OTY2LCAweGZmMzM5OTMzLCAweGZmMzM5OTAwLAorICAgIDB4ZmYzMzY2RkYsIDB4ZmYzMzY2Q0MsIDB4ZmYzMzY2OTksIDB4ZmYzMzY2NjYsIDB4ZmYzMzY2MzMsIDB4ZmYzMzY2MDAsCisgICAgMHhmZjMzMzNGRiwgMHhmZjMzMzNDQywgMHhmZjMzMzM5OSwgMHhmZjMzMzM2NiwgMHhmZjMzMzMzMywgMHhmZjMzMzMwMCwKKyAgICAweGZmMzMwMEZGLCAweGZmMzMwMENDLCAweGZmMzMwMDk5LCAweGZmMzMwMDY2LCAweGZmMzMwMDMzLCAweGZmMzMwMDAwLAorICAgIDB4ZmYwMEZGRkYsIDB4ZmYwMEZGQ0MsIDB4ZmYwMEZGOTksIDB4ZmYwMEZGNjYsIDB4ZmYwMEZGMzMsIDB4ZmYwMEZGMDAsCisgICAgMHhmZjAwQ0NGRiwgMHhmZjAwQ0NDQywgMHhmZjAwQ0M5OSwgMHhmZjAwQ0M2NiwgMHhmZjAwQ0MzMywgMHhmZjAwQ0MwMCwKKyAgICAweGZmMDA5OUZGLCAweGZmMDA5OUNDLCAweGZmMDA5OTk5LCAweGZmMDA5OTY2LCAweGZmMDA5OTMzLCAweGZmMDA5OTAwLAorICAgIDB4ZmYwMDY2RkYsIDB4ZmYwMDY2Q0MsIDB4ZmYwMDY2OTksIDB4ZmYwMDY2NjYsIDB4ZmYwMDY2MzMsIDB4ZmYwMDY2MDAsCisgICAgMHhmZjAwMzNGRiwgMHhmZjAwMzNDQywgMHhmZjAwMzM5OSwgMHhmZjAwMzM2NiwgMHhmZjAwMzMzMywgMHhmZjAwMzMwMCwKKyAgICAweGZmMDAwMEZGLCAweGZmMDAwMENDLCAweGZmMDAwMDk5LCAweGZmMDAwMDY2LCAweGZmMDAwMDMzLAorICAgIDB4ZmZFRTAwMDAsIDB4ZmZERDAwMDAsIDB4ZmZCQjAwMDAsIDB4ZmZBQTAwMDAsIDB4ZmY4ODAwMDAsIDB4ZmY3NzAwMDAsCisgICAgMHhmZjU1MDAwMCwgMHhmZjQ0MDAwMCwgMHhmZjIyMDAwMCwgMHhmZjExMDAwMCwgMHhmZjAwRUUwMCwgMHhmZjAwREQwMCwKKyAgICAweGZmMDBCQjAwLCAweGZmMDBBQTAwLCAweGZmMDA4ODAwLCAweGZmMDA3NzAwLCAweGZmMDA1NTAwLCAweGZmMDA0NDAwLAorICAgIDB4ZmYwMDIyMDAsIDB4ZmYwMDExMDAsIDB4ZmYwMDAwRUUsIDB4ZmYwMDAwREQsIDB4ZmYwMDAwQkIsIDB4ZmYwMDAwQUEsCisgICAgMHhmZjAwMDA4OCwgMHhmZjAwMDA3NywgMHhmZjAwMDA1NSwgMHhmZjAwMDA0NCwgMHhmZjAwMDAyMiwgMHhmZjAwMDAxMSwKKyAgICAweGZmRUVFRUVFLCAweGZmRERERERELCAweGZmQkJCQkJCLCAweGZmQUFBQUFBLCAweGZmODg4ODg4LCAweGZmNzc3Nzc3LAorICAgIDB4ZmY1NTU1NTUsIDB4ZmY0NDQ0NDQsIDB4ZmYyMjIyMjIsIDB4ZmYxMTExMTEsIDB4ZmYwMDAwMDAKK307CitjbGFzcyBDRlhfUGFsZXR0ZSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ0ZYX1BhbGV0dGUoKTsKKyAgICB+Q0ZYX1BhbGV0dGUoKTsKK3B1YmxpYzoKKyAgICBGWF9CT09MICAgICAgQnVpbGRQYWxldHRlKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIGludCBkd1BhbGV0dGVUeXBlKTsKKyAgICBGWF9EV09SRCogICAgR2V0UGFsZXR0ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9wUGFsZXR0ZTsKKyAgICB9CisKKyAgICBGWF9EV09SRCogICAgR2V0Q29sb3JMdXQoKWNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jTHV0OworICAgIH0KKyAgICBGWF9EV09SRCogICAgR2V0QW1vdW50THV0KCljb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYUx1dDsKKyAgICB9CisgICAgRlhfSU5UMzIgICAgIEdldGx1dCgpY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2x1dDsKKyAgICB9Citwcm90ZWN0ZWQ6CisgICAgRlhfRFdPUkQqICAgIG1fcFBhbGV0dGU7CisgICAgRlhfRFdPUkQqICAgIG1fY0x1dDsKKyAgICBGWF9EV09SRCogICAgbV9hTHV0OworICAgIGludCAgICAgICAgICBtX2x1dDsKK307CitpbnQgX1BhcnRpdGlvbihGWF9EV09SRCogYWx1dCwgRlhfRFdPUkQqIGNsdXQsIGludCBsLCBpbnQgcikKK3sKKyAgICBGWF9EV09SRCBwX2EgPSBhbHV0W2xdOworICAgIEZYX0RXT1JEIHBfYyA9IGNsdXRbbF07CisgICAgd2hpbGUobCA8IHIpIHsKKyAgICAgICAgd2hpbGUobCA8IHIgJiYgYWx1dFtyXSA+PSBwX2EpIHsKKyAgICAgICAgICAgIHItLTsKKyAgICAgICAgfQorICAgICAgICBpZiAobCA8IHIpIHsKKyAgICAgICAgICAgIGFsdXRbbF0gPSBhbHV0W3JdOworICAgICAgICAgICAgY2x1dFtsKytdID0gY2x1dFtyXTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZShsIDwgciAmJiBhbHV0W2xdIDw9IHBfYSkgeworICAgICAgICAgICAgbCsrOworICAgICAgICB9CisgICAgICAgIGlmIChsIDwgcikgeworICAgICAgICAgICAgYWx1dFtyXSA9IGFsdXRbbF07CisgICAgICAgICAgICBjbHV0W3ItLV0gPSBjbHV0W2xdOworICAgICAgICB9CisgICAgfQorICAgIGFsdXRbbF0gPSBwX2E7CisgICAgY2x1dFtsXSA9IHBfYzsKKyAgICByZXR1cm4gbDsKK30KK3ZvaWQgX1Fzb3J0KEZYX0RXT1JEKiBhbHV0LCBGWF9EV09SRCogY2x1dCwgaW50IGwsIGludCByKQoreworICAgIGlmKGwgPCByKSB7CisgICAgICAgIGludCBwSSA9IF9QYXJ0aXRpb24oYWx1dCwgY2x1dCwgbCwgcik7CisgICAgICAgIF9Rc29ydChhbHV0LCBjbHV0LCBsLCBwSSAtIDEpOworICAgICAgICBfUXNvcnQoYWx1dCwgY2x1dCwgcEkgKyAxLCByKTsKKyAgICB9Cit9Cit2b2lkIF9Db2xvckRlY29kZShGWF9EV09SRCBwYWxfdiwgRlhfQllURSYgciwgRlhfQllURSYgZywgRlhfQllURSYgYikKK3sKKyAgICByID0gKEZYX0JZVEUpKChwYWxfdiAmIDB4ZjAwKSA+PiA0KTsKKyAgICBnID0gKEZYX0JZVEUpKHBhbF92ICYgMHgwZjApOworICAgIGIgPSAoRlhfQllURSkoKHBhbF92ICYgMHgwMGYpIDw8IDQpOworfQordm9pZCBfT2J0YWluX1BhbChGWF9EV09SRCogYUx1dCwgRlhfRFdPUkQqY0x1dCwgRlhfRFdPUkQqIGRlc3RfcGFsLCBpbnQgcGFsX3R5cGUsIEZYX0RXT1JEKiB3aW5fbWFjX3BhbCwgRlhfRFdPUkQgbHV0KQoreworICAgIGludCByb3csIGNvbDsKKyAgICBGWF9EV09SRCBsdXRfMSA9IGx1dCAtIDE7CisgICAgaWYgKHBhbF90eXBlID09IEZYRElCX1BBTEVUVEVfTE9DKSB7CisgICAgICAgIGZvciAocm93ID0gMDsgcm93IDwgMjU2OyByb3crKykgeworICAgICAgICAgICAgaW50IGx1dF9vZmZzZXQgPSBsdXRfMSAtIHJvdzsKKyAgICAgICAgICAgIGlmIChsdXRfb2Zmc2V0IDwgMCkgeworICAgICAgICAgICAgICAgIGx1dF9vZmZzZXQgKz0gMjU2OworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfRFdPUkQgY29sb3IgPSBjTHV0W2x1dF9vZmZzZXRdOworICAgICAgICAgICAgRlhfQllURSByLCBnLCBiOworICAgICAgICAgICAgX0NvbG9yRGVjb2RlKGNvbG9yLCByLCBnLCBiKTsKKyAgICAgICAgICAgIGRlc3RfcGFsW3Jvd10gPSAoKEZYX0RXT1JEKXIgPDwgMTYpIHwgKChGWF9EV09SRClnIDw8IDgpIHwgYiB8IDB4ZmYwMDAwMDA7CisgICAgICAgICAgICBhTHV0W2x1dF9vZmZzZXRdID0gcm93OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChyb3cgPSAwOyByb3cgPCAyNTY7IHJvdysrKSB7CisgICAgICAgICAgICBpbnQgbHV0X29mZnNldCA9IGx1dF8xIC0gcm93OworICAgICAgICAgICAgaWYgKGx1dF9vZmZzZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgbHV0X29mZnNldCArPSAyNTY7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9CWVRFIHIsIGcsIGI7CisgICAgICAgICAgICBfQ29sb3JEZWNvZGUoY0x1dFtsdXRfb2Zmc2V0XSwgciwgZywgYik7CisgICAgICAgICAgICBpbnQgZXJyb3IsIG1pbl9lcnJvciA9IDEwMDAwMDA7CisgICAgICAgICAgICBpbnQgY19pbmRleCA9IDA7CisgICAgICAgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IDI1NjsgY29sKyspIHsKKyAgICAgICAgICAgICAgICBGWF9EV09SRCBwX2NvbG9yID0gd2luX21hY19wYWxbY29sXTsKKyAgICAgICAgICAgICAgICBpbnQgZF9yID0gciAtIChGWF9CWVRFKShwX2NvbG9yID4+IDE2KTsKKyAgICAgICAgICAgICAgICBpbnQgZF9nID0gZyAtIChGWF9CWVRFKShwX2NvbG9yID4+IDgpOworICAgICAgICAgICAgICAgIGludCBkX2IgPSBiIC0gKEZYX0JZVEUpcF9jb2xvcjsKKyAgICAgICAgICAgICAgICBlcnJvciA9IGRfciAqIGRfciArIGRfZyAqIGRfZyArIGRfYiAqIGRfYjsKKyAgICAgICAgICAgICAgICBpZiAoZXJyb3IgPCBtaW5fZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgbWluX2Vycm9yID0gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIGNfaW5kZXggPSBjb2w7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVzdF9wYWxbcm93XSA9ICB3aW5fbWFjX3BhbFtjX2luZGV4XTsKKyAgICAgICAgICAgIGFMdXRbbHV0X29mZnNldF0gPSByb3c7CisgICAgICAgIH0KKyAgICB9Cit9CitDRlhfUGFsZXR0ZTo6Q0ZYX1BhbGV0dGUoKQoreworICAgIG1fcFBhbGV0dGUgPSBOVUxMOworICAgIG1fY0x1dCA9IE5VTEw7CisgICAgbV9hTHV0ID0gTlVMTDsKKyAgICBtX2x1dCA9IDA7Cit9CitDRlhfUGFsZXR0ZTo6fkNGWF9QYWxldHRlKCkKK3sKKyAgICBpZiAobV9wUGFsZXR0ZSkgeworICAgICAgICBGWF9GcmVlKG1fcFBhbGV0dGUpOworICAgIH0KKyAgICBpZiAobV9jTHV0KSB7CisgICAgICAgIEZYX0ZyZWUobV9jTHV0KTsKKyAgICB9CisgICAgaWYgKG1fYUx1dCkgeworICAgICAgICBGWF9GcmVlKG1fYUx1dCk7CisgICAgfQorICAgIG1fbHV0ID0gMDsKK30KK0ZYX0JPT0wgQ0ZYX1BhbGV0dGU6OkJ1aWxkUGFsZXR0ZShjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBpbnQgcGFsX3R5cGUpCit7CisgICAgaWYgKHBCaXRtYXAgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChtX3BQYWxldHRlICE9IE5VTEwpIHsKKyAgICAgICAgRlhfRnJlZShtX3BQYWxldHRlKTsKKyAgICB9CisgICAgbV9wUGFsZXR0ZSA9IEZYX0FsbG9jKEZYX0RXT1JELCAyNTYpOworICAgIGlmICghbV9wUGFsZXR0ZSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEZYU1lTX21lbXNldDMyKG1fcFBhbGV0dGUsIDAsIHNpemVvZihGWF9EV09SRCkgKiAyNTYpOworICAgIGludCBicHAgICAgPSBwQml0bWFwLT5HZXRCUFAoKSAvIDg7CisgICAgaW50IHdpZHRoICA9IHBCaXRtYXAtPkdldFdpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IHBCaXRtYXAtPkdldEhlaWdodCgpOworICAgIGlmIChtX2NMdXQpIHsKKyAgICAgICAgRlhfRnJlZShtX2NMdXQpOworICAgICAgICBtX2NMdXQgPSBOVUxMOworICAgIH0KKyAgICBpZiAobV9hTHV0KSB7CisgICAgICAgIEZYX0ZyZWUobV9hTHV0KTsKKyAgICAgICAgbV9hTHV0ID0gTlVMTDsKKyAgICB9CisgICAgbV9jTHV0ID0gRlhfQWxsb2MoRlhfRFdPUkQsIDQwOTYpOworICAgIGlmICghbV9jTHV0KSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9hTHV0ID0gRlhfQWxsb2MoRlhfRFdPUkQsIDQwOTYpOworICAgIGlmICghbV9hTHV0KSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgRlhTWVNfbWVtc2V0MzIobV9hTHV0LCAwLCBzaXplb2YoRlhfRFdPUkQpICogNDA5Nik7CisgICAgRlhTWVNfbWVtc2V0MzIobV9jTHV0LCAwLCBzaXplb2YoRlhfRFdPUkQpICogNDA5Nik7CisgICAgaW50IHJvdywgY29sOworICAgIG1fbHV0ID0gMDsKKyAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93KyspIHsKKyAgICAgICAgRlhfQllURSogc2Nhbl9saW5lID0gKEZYX0JZVEUqKXBCaXRtYXAtPkdldFNjYW5saW5lKHJvdyk7CisgICAgICAgIGZvciAoY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCsrKSB7CisgICAgICAgICAgICBGWF9CWVRFKiBzcmNfcG9ydCA9IHNjYW5fbGluZSArIGNvbCAqIGJwcDsKKyAgICAgICAgICAgIEZYX0RXT1JEIGIgPSBzcmNfcG9ydFswXSAmIDB4ZjA7CisgICAgICAgICAgICBGWF9EV09SRCBnID0gc3JjX3BvcnRbMV0gJiAweGYwOworICAgICAgICAgICAgRlhfRFdPUkQgciA9IHNyY19wb3J0WzJdICYgMHhmMDsKKyAgICAgICAgICAgIEZYX0RXT1JEIGluZGV4ID0gKHIgPDwgNCkgKyBnICsgKGIgPj4gNCk7CisgICAgICAgICAgICBtX2FMdXRbaW5kZXhdKys7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChyb3cgPSAwOyByb3cgPCA0MDk2OyByb3crKykgeworICAgICAgICBpZiAobV9hTHV0W3Jvd10gIT0gMCkgeworICAgICAgICAgICAgbV9hTHV0W21fbHV0XSA9IG1fYUx1dFtyb3ddOworICAgICAgICAgICAgbV9jTHV0W21fbHV0XSA9IHJvdzsKKyAgICAgICAgICAgIG1fbHV0Kys7CisgICAgICAgIH0KKyAgICB9CisgICAgX1Fzb3J0KG1fYUx1dCwgbV9jTHV0LCAwLCBtX2x1dCAtIDEpOworICAgIEZYX0RXT1JEKiB3aW5fbWFjX3BhbCA9IE5VTEw7CisgICAgaWYgKHBhbF90eXBlID09IEZYRElCX1BBTEVUVEVfV0lOKSB7CisgICAgICAgIHdpbl9tYWNfcGFsID0gKEZYX0RXT1JEKilnX2R3V2luUGFsZXR0ZTsKKyAgICB9IGVsc2UgaWYgKHBhbF90eXBlID09IEZYRElCX1BBTEVUVEVfTUFDKSB7CisgICAgICAgIHdpbl9tYWNfcGFsID0gKEZYX0RXT1JEKilnX2R3TWFjUGFsZXR0ZTsKKyAgICB9CisgICAgX09idGFpbl9QYWwobV9hTHV0LCBtX2NMdXQsIG1fcFBhbGV0dGUsIHBhbF90eXBlLCB3aW5fbWFjX3BhbCwgbV9sdXQpOworICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBfQ29udmVydEJ1ZmZlcl8xYnBwTWFzazJHcmF5KEZYX0xQQllURSBkZXN0X2J1ZiwgaW50IGRlc3RfcGl0Y2gsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwU3JjQml0bWFwLCBpbnQgc3JjX2xlZnQsIGludCBzcmNfdG9wKQoreworICAgIEZYX0JZVEUgc2V0X2dyYXksIHJlc2V0X2dyYXk7CisgICAgc2V0X2dyYXkgPSAweGZmOworICAgIHJlc2V0X2dyYXkgPSAweDAwOworICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7CisgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIHJvdyAqIGRlc3RfcGl0Y2g7CisgICAgICAgIEZYU1lTX21lbXNldDgoZGVzdF9zY2FuLCByZXNldF9ncmF5LCB3aWR0aCk7CisgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBwU3JjQml0bWFwLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KTsKKyAgICAgICAgZm9yIChpbnQgY29sID0gc3JjX2xlZnQ7IGNvbCA8IHNyY19sZWZ0ICsgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgaWYgKHNyY19zY2FuW2NvbCAvIDhdICYgKDEgPDwgKDcgLSBjb2wgJSA4KSkpIHsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gc2V0X2dyYXk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIF9Db252ZXJ0QnVmZmVyXzhicHBNYXNrMkdyYXkoRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQgZGVzdF9waXRjaCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3ApCit7CisgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IGRlc3RfYnVmICsgcm93ICogZGVzdF9waXRjaDsKKyAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBTcmNCaXRtYXAtPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpICsgc3JjX2xlZnQ7CisgICAgICAgIEZYU1lTX21lbWNweTMyKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoKTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIF9Db252ZXJ0QnVmZmVyXzFicHBQbHQyR3JheShGWF9MUEJZVEUgZGVzdF9idWYsIGludCBkZXN0X3BpdGNoLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwU3JjQml0bWFwLCBpbnQgc3JjX2xlZnQsIGludCBzcmNfdG9wLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIEZYX0RXT1JEKiBzcmNfcGx0ID0gcFNyY0JpdG1hcC0+R2V0UGFsZXR0ZSgpOworICAgIEZYX0JZVEUgZ3JheVsyXTsKKyAgICBpZiAocEljY1RyYW5zZm9ybSkgeworICAgICAgICBGWF9EV09SRCBwbHRbMl07CisgICAgICAgIGlmIChwU3JjQml0bWFwLT5Jc0NteWtJbWFnZSgpKSB7CisgICAgICAgICAgICBwbHRbMF0gPSBGWENNWUtfVE9ESUIoc3JjX3BsdFswXSk7CisgICAgICAgICAgICBwbHRbMV0gPSBGWENNWUtfVE9ESUIoc3JjX3BsdFsxXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBGWF9MUEJZVEUgYmdyX3B0ciA9IChGWF9MUEJZVEUpcGx0OworICAgICAgICAgICAgYmdyX3B0clswXSA9IEZYQVJHQl9CKHNyY19wbHRbMF0pOworICAgICAgICAgICAgYmdyX3B0clsxXSA9IEZYQVJHQl9HKHNyY19wbHRbMF0pOworICAgICAgICAgICAgYmdyX3B0clsyXSA9IEZYQVJHQl9SKHNyY19wbHRbMF0pOworICAgICAgICAgICAgYmdyX3B0clszXSA9IEZYQVJHQl9CKHNyY19wbHRbMV0pOworICAgICAgICAgICAgYmdyX3B0cls0XSA9IEZYQVJHQl9HKHNyY19wbHRbMV0pOworICAgICAgICAgICAgYmdyX3B0cls1XSA9IEZYQVJHQl9SKHNyY19wbHRbMV0pOworICAgICAgICB9CisgICAgICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsKKyAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgZ3JheSwgKEZYX0xQQ0JZVEUpcGx0LCAyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBGWF9CWVRFIHJlc2V0X3IsIHJlc2V0X2csIHJlc2V0X2IsCisgICAgICAgICAgICAgICAgc2V0X3IsIHNldF9nLCBzZXRfYjsKKyAgICAgICAgaWYgKHBTcmNCaXRtYXAtPklzQ215a0ltYWdlKCkpIHsKKyAgICAgICAgICAgIEFkb2JlQ01ZS190b19zUkdCMShGWFNZU19HZXRDVmFsdWUoc3JjX3BsdFswXSksIEZYU1lTX0dldE1WYWx1ZShzcmNfcGx0WzBdKSwgRlhTWVNfR2V0WVZhbHVlKHNyY19wbHRbMF0pLCBGWFNZU19HZXRLVmFsdWUoc3JjX3BsdFswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRfciwgcmVzZXRfZywgcmVzZXRfYik7CisgICAgICAgICAgICBBZG9iZUNNWUtfdG9fc1JHQjEoRlhTWVNfR2V0Q1ZhbHVlKHNyY19wbHRbMV0pLCBGWFNZU19HZXRNVmFsdWUoc3JjX3BsdFsxXSksIEZYU1lTX0dldFlWYWx1ZShzcmNfcGx0WzFdKSwgRlhTWVNfR2V0S1ZhbHVlKHNyY19wbHRbMV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9yLCBzZXRfZywgc2V0X2IpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzZXRfciA9IEZYQVJHQl9SKHNyY19wbHRbMF0pOworICAgICAgICAgICAgcmVzZXRfZyA9IEZYQVJHQl9HKHNyY19wbHRbMF0pOworICAgICAgICAgICAgcmVzZXRfYiA9IEZYQVJHQl9CKHNyY19wbHRbMF0pOworICAgICAgICAgICAgc2V0X3IgPSBGWEFSR0JfUihzcmNfcGx0WzFdKTsKKyAgICAgICAgICAgIHNldF9nID0gRlhBUkdCX0coc3JjX3BsdFsxXSk7CisgICAgICAgICAgICBzZXRfYiA9IEZYQVJHQl9CKHNyY19wbHRbMV0pOworICAgICAgICB9CisgICAgICAgIGdyYXlbMF0gPSBGWFJHQjJHUkFZKHJlc2V0X3IsIHJlc2V0X2csIHJlc2V0X2IpOworICAgICAgICBncmF5WzFdID0gRlhSR0IyR1JBWShzZXRfciwgc2V0X2csIHNldF9iKTsKKyAgICB9CisgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IGRlc3RfYnVmICsgcm93ICogZGVzdF9waXRjaDsKKyAgICAgICAgRlhTWVNfbWVtc2V0OChkZXN0X3NjYW4sIGdyYXlbMF0sIHdpZHRoKTsKKyAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBTcmNCaXRtYXAtPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpOworICAgICAgICBmb3IgKGludCBjb2wgPSBzcmNfbGVmdDsgY29sIDwgc3JjX2xlZnQgKyB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICBpZiAoc3JjX3NjYW5bY29sIC8gOF0gJiAoMSA8PCAoNyAtIGNvbCAlIDgpKSkgeworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBncmF5WzFdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBfQ29udmVydEJ1ZmZlcl84YnBwUGx0MkdyYXkoRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQgZGVzdF9waXRjaCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyY0JpdG1hcCwgaW50IHNyY19sZWZ0LCBpbnQgc3JjX3RvcCwgdm9pZCogcEljY1RyYW5zZm9ybSkKK3sKKyAgICBGWF9EV09SRCogc3JjX3BsdCA9IHBTcmNCaXRtYXAtPkdldFBhbGV0dGUoKTsKKyAgICBGWF9CWVRFIGdyYXlbMjU2XTsKKyAgICBpZiAocEljY1RyYW5zZm9ybSkgeworICAgICAgICBGWF9EV09SRCBwbHRbMjU2XTsKKyAgICAgICAgaWYgKHBTcmNCaXRtYXAtPklzQ215a0ltYWdlKCkpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7CisgICAgICAgICAgICAgICAgcGx0W2ldID0gRlhDTVlLX1RPRElCKHNyY19wbHRbaV0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRlhfTFBCWVRFIGJncl9wdHIgPSAoRlhfTFBCWVRFKXBsdDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7CisgICAgICAgICAgICAgICAgKmJncl9wdHIrKyA9IEZYQVJHQl9CKHNyY19wbHRbaV0pOworICAgICAgICAgICAgICAgICpiZ3JfcHRyKysgPSBGWEFSR0JfRyhzcmNfcGx0W2ldKTsKKyAgICAgICAgICAgICAgICAqYmdyX3B0cisrID0gRlhBUkdCX1Ioc3JjX3BsdFtpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOworICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBncmF5LCAoRlhfTFBDQllURSlwbHQsIDI1Nik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHBTcmNCaXRtYXAtPklzQ215a0ltYWdlKCkpIHsKKyAgICAgICAgICAgIEZYX0JZVEUgciwgZywgYjsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7CisgICAgICAgICAgICAgICAgQWRvYmVDTVlLX3RvX3NSR0IxKEZYU1lTX0dldENWYWx1ZShzcmNfcGx0W2ldKSwgRlhTWVNfR2V0TVZhbHVlKHNyY19wbHRbaV0pLCBGWFNZU19HZXRZVmFsdWUoc3JjX3BsdFtpXSksIEZYU1lTX0dldEtWYWx1ZShzcmNfcGx0W2ldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYik7CisgICAgICAgICAgICAgICAgZ3JheVtpXSA9IEZYUkdCMkdSQVkociwgZywgYik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsKKyAgICAgICAgICAgICAgICBncmF5W2ldID0gRlhSR0IyR1JBWShGWEFSR0JfUihzcmNfcGx0W2ldKSwgRlhBUkdCX0coc3JjX3BsdFtpXSksIEZYQVJHQl9CKHNyY19wbHRbaV0pKTsKKyAgICAgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IGRlc3RfYnVmICsgcm93ICogZGVzdF9waXRjaDsKKyAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBTcmNCaXRtYXAtPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpICsgc3JjX2xlZnQ7CisgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IGdyYXlbKnNyY19zY2FuKytdOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBfQ29udmVydEJ1ZmZlcl9SZ2JPckNteWsyR3JheShGWF9MUEJZVEUgZGVzdF9idWYsIGludCBkZXN0X3BpdGNoLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3AsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgaW50IEJwcCA9IHBTcmNCaXRtYXAtPkdldEJQUCgpIC8gODsKKyAgICBpZiAocEljY1RyYW5zZm9ybSkgeworICAgICAgICBJQ29kZWNfSWNjTW9kdWxlKiBwSWNjTW9kdWxlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCk7CisgICAgICAgIGlmIChCcHAgPT0gMyB8fCBwU3JjQml0bWFwLT5Jc0NteWtJbWFnZSgpKSB7CisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIHJvdyAqIGRlc3RfcGl0Y2g7CisgICAgICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBTcmNCaXRtYXAtPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpICsgc3JjX2xlZnQgKiBCcHA7CisgICAgICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgZGVzdF9zY2FuLCBzcmNfc2Nhbiwgd2lkdGgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyByb3cgKiBkZXN0X3BpdGNoOworICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBwU3JjQml0bWFwLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KSArIHNyY19sZWZ0ICogNDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIDEpOworICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4rKzsKKyAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocFNyY0JpdG1hcC0+SXNDbXlrSW1hZ2UoKSkgeworICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyByb3cgKiBkZXN0X3BpdGNoOworICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBwU3JjQml0bWFwLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KSArIHNyY19sZWZ0ICogNDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgciwgZywgYjsKKyAgICAgICAgICAgICAgICAgICAgQWRvYmVDTVlLX3RvX3NSR0IxKEZYU1lTX0dldENWYWx1ZSgoRlhfRFdPUkQpc3JjX3NjYW5bMF0pLCBGWFNZU19HZXRNVmFsdWUoKEZYX0RXT1JEKXNyY19zY2FuWzFdKSwgRlhTWVNfR2V0WVZhbHVlKChGWF9EV09SRClzcmNfc2NhblsyXSksIEZYU1lTX0dldEtWYWx1ZSgoRlhfRFdPUkQpc3JjX3NjYW5bM10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciwgZywgYik7CisgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IEZYUkdCMkdSQVkociwgZywgYik7CisgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7CisgICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IGRlc3RfYnVmICsgcm93ICogZGVzdF9waXRjaDsKKyAgICAgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gcFNyY0JpdG1hcC0+R2V0U2NhbmxpbmUoc3JjX3RvcCArIHJvdykgKyBzcmNfbGVmdCAqIEJwcDsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IEZYUkdCMkdSQVkoc3JjX3NjYW5bMl0sIHNyY19zY2FuWzFdLCBzcmNfc2NhblswXSk7CisgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IEJwcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQoraW5saW5lIHZvaWQgX0NvbnZlcnRCdWZmZXJfSW5kZXhDb3B5KEZYX0xQQllURSBkZXN0X2J1ZiwgaW50IGRlc3RfcGl0Y2gsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwU3JjQml0bWFwLCBpbnQgc3JjX2xlZnQsIGludCBzcmNfdG9wKQoreworICAgIGlmIChwU3JjQml0bWFwLT5HZXRCUFAoKSA9PSAxKSB7CisgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7CisgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyByb3cgKiBkZXN0X3BpdGNoOworICAgICAgICAgICAgRlhTWVNfbWVtc2V0MzIoZGVzdF9zY2FuLCAwLCB3aWR0aCk7CisgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gcFNyY0JpdG1hcC0+R2V0U2NhbmxpbmUoc3JjX3RvcCArIHJvdyk7CisgICAgICAgICAgICBmb3IgKGludCBjb2wgPSBzcmNfbGVmdDsgY29sIDwgc3JjX2xlZnQgKyB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHNyY19zY2FuW2NvbCAvIDhdICYgKDEgPDwgKDcgLSBjb2wgJSA4KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7CisgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyByb3cgKiBkZXN0X3BpdGNoOworICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBTcmNCaXRtYXAtPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpICsgc3JjX2xlZnQ7CisgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCk7CisgICAgICAgIH0KKyAgICB9Cit9CitGWF9CT09MIF9Db252ZXJ0QnVmZmVyX1BsdDJQbHRSZ2I4KEZYX0xQQllURSBkZXN0X2J1ZiwgaW50IGRlc3RfcGl0Y2gsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyY0JpdG1hcCwgaW50IHNyY19sZWZ0LCBpbnQgc3JjX3RvcCwgRlhfRFdPUkQqIGRzdF9wbHQsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgX0NvbnZlcnRCdWZmZXJfSW5kZXhDb3B5KGRlc3RfYnVmLCBkZXN0X3BpdGNoLCB3aWR0aCwgaGVpZ2h0LCBwU3JjQml0bWFwLCBzcmNfbGVmdCwgc3JjX3RvcCk7CisgICAgRlhfRFdPUkQqIHNyY19wbHQgPSBwU3JjQml0bWFwLT5HZXRQYWxldHRlKCk7CisgICAgaW50IHBsdF9zaXplID0gcFNyY0JpdG1hcC0+R2V0UGFsZXR0ZVNpemUoKTsKKyAgICBpZiAocEljY1RyYW5zZm9ybSkgeworICAgICAgICBGWF9EV09SRCBwbHRbMjU2XTsKKyAgICAgICAgRlhfTFBCWVRFIGJncl9wdHIgPSAoRlhfTFBCWVRFKXBsdDsKKyAgICAgICAgaWYgKHBTcmNCaXRtYXAtPklzQ215a0ltYWdlKCkpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGx0X3NpemU7IGkgKyspIHsKKyAgICAgICAgICAgICAgICBwbHRbaV0gPSBGWENNWUtfVE9ESUIoc3JjX3BsdFtpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBsdF9zaXplOyBpICsrKSB7CisgICAgICAgICAgICAgICAgKmJncl9wdHIrKyA9IEZYQVJHQl9CKHNyY19wbHRbaV0pOworICAgICAgICAgICAgICAgICpiZ3JfcHRyKysgPSBGWEFSR0JfRyhzcmNfcGx0W2ldKTsKKyAgICAgICAgICAgICAgICAqYmdyX3B0cisrID0gRlhBUkdCX1Ioc3JjX3BsdFtpXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiZ3JfcHRyID0gKEZYX0xQQllURSlwbHQ7CisgICAgICAgIH0KKyAgICAgICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOworICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCAoRlhfTFBCWVRFKXBsdCwgKEZYX0xQQ0JZVEUpcGx0LCBwbHRfc2l6ZSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGx0X3NpemU7IGkgKyspIHsKKyAgICAgICAgICAgIGRzdF9wbHRbaV0gPSBGWEFSR0JfTUFLRSgweGZmLCBiZ3JfcHRyWzJdLCBiZ3JfcHRyWzFdLCBiZ3JfcHRyWzBdKTsKKyAgICAgICAgICAgIGJncl9wdHIgKz0gMzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChwU3JjQml0bWFwLT5Jc0NteWtJbWFnZSgpKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBsdF9zaXplOyBpICsrKSB7CisgICAgICAgICAgICAgICAgRlhfQllURSByLCBnLCBiOworICAgICAgICAgICAgICAgIEFkb2JlQ01ZS190b19zUkdCMShGWFNZU19HZXRDVmFsdWUoc3JjX3BsdFtpXSksIEZYU1lTX0dldE1WYWx1ZShzcmNfcGx0W2ldKSwgRlhTWVNfR2V0WVZhbHVlKHNyY19wbHRbaV0pLCBGWFNZU19HZXRLVmFsdWUoc3JjX3BsdFtpXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIpOworICAgICAgICAgICAgICAgIGRzdF9wbHRbaV0gPSBGWEFSR0JfTUFLRSgweGZmLCByLCBnLCBiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKGRzdF9wbHQsIHNyY19wbHQsIHBsdF9zaXplICogNCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitpbmxpbmUgRlhfQk9PTCBfQ29udmVydEJ1ZmZlcl9SZ2IyUGx0UmdiOF9Ob1RyYW5zZm9ybShGWF9MUEJZVEUgZGVzdF9idWYsIGludCBkZXN0X3BpdGNoLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3AsIEZYX0RXT1JEKiBkc3RfcGx0KQoreworICAgIGludCBicHAgPSBwU3JjQml0bWFwLT5HZXRCUFAoKSAvIDg7CisgICAgaW50IHJvdywgY29sOworICAgIENGWF9QYWxldHRlIHBhbGV0dGU7CisgICAgcGFsZXR0ZS5CdWlsZFBhbGV0dGUocFNyY0JpdG1hcCwgRlhESUJfUEFMRVRURV9MT0MpOworICAgIEZYX0RXT1JEKiBjTHV0ID0gcGFsZXR0ZS5HZXRDb2xvckx1dCgpOworICAgIEZYX0RXT1JEKiBhTHV0ID0gcGFsZXR0ZS5HZXRBbW91bnRMdXQoKTsKKyAgICBpZiAoY0x1dCA9PSBOVUxMIHx8IGFMdXQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGludCBsdXQgPSBwYWxldHRlLkdldGx1dCgpOworICAgIEZYX0RXT1JEKiBwUGFsZXR0ZSA9IHBhbGV0dGUuR2V0UGFsZXR0ZSgpOworICAgIGlmIChsdXQgPiAyNTYpIHsKKyAgICAgICAgaW50IGVyciwgbWluX2VycjsKKyAgICAgICAgaW50IGx1dF8yNTYgPSBsdXQgLSAyNTY7CisgICAgICAgIGZvciAocm93ID0gMDsgcm93IDwgbHV0XzI1Njsgcm93KyspIHsKKyAgICAgICAgICAgIG1pbl9lcnIgPSAxMDAwMDAwOworICAgICAgICAgICAgRlhfQllURSByLCBnLCBiOworICAgICAgICAgICAgX0NvbG9yRGVjb2RlKGNMdXRbcm93XSwgciwgZywgYik7CisgICAgICAgICAgICBpbnQgY2xyaW5kZXggPSAwOworICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgMjU2OyBjb2wrKykgeworICAgICAgICAgICAgICAgIEZYX0RXT1JEIHBfY29sb3IgPSAqKHBQYWxldHRlICsgY29sKTsKKyAgICAgICAgICAgICAgICBpbnQgZF9yID0gciAtIChGWF9CWVRFKShwX2NvbG9yID4+IDE2KTsKKyAgICAgICAgICAgICAgICBpbnQgZF9nID0gZyAtIChGWF9CWVRFKShwX2NvbG9yID4+IDgpOworICAgICAgICAgICAgICAgIGludCBkX2IgPSBiIC0gKEZYX0JZVEUpKHBfY29sb3IpOworICAgICAgICAgICAgICAgIGVyciA9IGRfciAqIGRfciArIGRfZyAqIGRfZyArIGRfYiAqIGRfYjsKKyAgICAgICAgICAgICAgICBpZiAoZXJyIDwgbWluX2VycikgeworICAgICAgICAgICAgICAgICAgICBtaW5fZXJyID0gZXJyOworICAgICAgICAgICAgICAgICAgICBjbHJpbmRleCA9IGNvbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhTHV0W3Jvd10gPSBjbHJpbmRleDsKKyAgICAgICAgfQorICAgIH0KKyAgICBGWF9JTlQzMiBsdXRfMSA9IGx1dCAtIDE7CisgICAgZm9yIChyb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgeworICAgICAgICBGWF9CWVRFKiBzcmNfc2NhbiA9IChGWF9CWVRFKilwU3JjQml0bWFwLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KSArIHNyY19sZWZ0OworICAgICAgICBGWF9CWVRFKiBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIHJvdyAqIGRlc3RfcGl0Y2g7CisgICAgICAgIGZvciAoY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCsrKSB7CisgICAgICAgICAgICBGWF9CWVRFKiBzcmNfcG9ydCA9IHNyY19zY2FuICsgY29sICogYnBwOworICAgICAgICAgICAgaW50IHIgPSBzcmNfcG9ydFsyXSAmIDB4ZjA7CisgICAgICAgICAgICBpbnQgZyA9IHNyY19wb3J0WzFdICYgMHhmMDsKKyAgICAgICAgICAgIGludCBiID0gc3JjX3BvcnRbMF0gJiAweGYwOworICAgICAgICAgICAgRlhfRFdPUkQgY2xyaW5kZXggPSAociA8PCA0KSArIGcgKyAoYiA+PiA0KTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSBsdXRfMTsgaSA+PSAwOyBpLS0pCisgICAgICAgICAgICAgICAgaWYgKGNscmluZGV4ID09IGNMdXRbaV0pIHsKKyAgICAgICAgICAgICAgICAgICAgKihkZXN0X3NjYW4gKyBjb2wpID0gKEZYX0JZVEUpKGFMdXRbaV0pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgRlhTWVNfbWVtY3B5MzIoZHN0X3BsdCwgcFBhbGV0dGUsIHNpemVvZihGWF9EV09SRCkgKiAyNTYpOworICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBfQ29udmVydEJ1ZmZlcl9SZ2IyUGx0UmdiOChGWF9MUEJZVEUgZGVzdF9idWYsIGludCBkZXN0X3BpdGNoLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3AsIEZYX0RXT1JEKiBkc3RfcGx0LCB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBOVUxMOworICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7CisgICAgICAgIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsKKyAgICB9CisgICAgRlhfQk9PTCByZXQgPSBfQ29udmVydEJ1ZmZlcl9SZ2IyUGx0UmdiOF9Ob1RyYW5zZm9ybShkZXN0X2J1ZiwgZGVzdF9waXRjaCwgd2lkdGgsIGhlaWdodCwgcFNyY0JpdG1hcCwgc3JjX2xlZnQsIHNyY190b3AsIGRzdF9wbHQpOworICAgIGlmIChyZXQgJiYgcEljY1RyYW5zZm9ybSkgeworICAgICAgICBJQ29kZWNfSWNjTW9kdWxlKiBwSWNjTW9kdWxlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAgICAgICAgIEZYX0FSR0IqIHBsdCA9IGRzdF9wbHQgKyBpOworICAgICAgICAgICAgRlhfQVJHQiBwbHRfZW50cnkgPSBGWEFSR0JfVE9ESUIoKnBsdCk7CisgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCAoRlhfTFBCWVRFKSZwbHRfZW50cnksIChGWF9MUENCWVRFKSZwbHRfZW50cnksIDEpOworICAgICAgICAgICAgKnBsdCA9IEZYQVJHQl9UT0RJQihwbHRfZW50cnkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CitGWF9CT09MIF9Db252ZXJ0QnVmZmVyXzFicHBNYXNrMlJnYihGWERJQl9Gb3JtYXQgZHN0X2Zvcm1hdCwgRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQgZGVzdF9waXRjaCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyY0JpdG1hcCwgaW50IHNyY19sZWZ0LCBpbnQgc3JjX3RvcCkKK3sKKyAgICBpbnQgY29tcHMgPSAoZHN0X2Zvcm1hdCAmIDB4ZmYpIC8gODsKKyAgICBGWF9CWVRFIHNldF9ncmF5LCByZXNldF9ncmF5OworICAgIHNldF9ncmF5ID0gMHhmZjsKKyAgICByZXNldF9ncmF5ID0gMHgwMDsKKyAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgeworICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyByb3cgKiBkZXN0X3BpdGNoOworICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gcFNyY0JpdG1hcC0+R2V0U2NhbmxpbmUoc3JjX3RvcCArIHJvdyk7CisgICAgICAgIGZvciAoaW50IGNvbCA9IHNyY19sZWZ0OyBjb2wgPCBzcmNfbGVmdCArIHdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgIGlmIChzcmNfc2Nhbltjb2wgLyA4XSAmICgxIDw8ICg3IC0gY29sICUgOCkpKSB7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gc2V0X2dyYXk7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gc2V0X2dyYXk7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gc2V0X2dyYXk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IHJlc2V0X2dyYXk7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gcmVzZXRfZ3JheTsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSByZXNldF9ncmF5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVzdF9zY2FuICs9IGNvbXBzOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBfQ29udmVydEJ1ZmZlcl84YnBwTWFzazJSZ2IoRlhESUJfRm9ybWF0IGRzdF9mb3JtYXQsIEZYX0xQQllURSBkZXN0X2J1ZiwgaW50IGRlc3RfcGl0Y2gsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3ApCit7CisgICAgaW50IGNvbXBzID0gKGRzdF9mb3JtYXQgJiAweGZmKSAvIDg7CisgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IGRlc3RfYnVmICsgcm93ICogZGVzdF9waXRjaDsKKyAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBTcmNCaXRtYXAtPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpICsgc3JjX2xlZnQ7CisgICAgICAgIEZYX0JZVEUgc3JjX3BpeGVsOworICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICBzcmNfcGl4ZWwgPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19waXhlbDsKKyAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19waXhlbDsKKyAgICAgICAgICAgICpkZXN0X3NjYW4gICA9IHNyY19waXhlbDsKKyAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBjb21wcyAtIDI7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIF9Db252ZXJ0QnVmZmVyXzFicHBQbHQyUmdiKEZYRElCX0Zvcm1hdCBkc3RfZm9ybWF0LCBGWF9MUEJZVEUgZGVzdF9idWYsIGludCBkZXN0X3BpdGNoLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3AsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgaW50IGNvbXBzID0gKGRzdF9mb3JtYXQgJiAweGZmKSAvIDg7CisgICAgRlhfRFdPUkQqIHNyY19wbHQgPSBwU3JjQml0bWFwLT5HZXRQYWxldHRlKCk7CisgICAgRlhfRFdPUkQgcGx0WzJdOworICAgIEZYX0xQQllURSBiZ3JfcHRyID0gKEZYX0xQQllURSlwbHQ7CisgICAgaWYgKHBTcmNCaXRtYXAtPklzQ215a0ltYWdlKCkpIHsKKyAgICAgICAgcGx0WzBdID0gRlhDTVlLX1RPRElCKHNyY19wbHRbMF0pOworICAgICAgICBwbHRbMV0gPSBGWENNWUtfVE9ESUIoc3JjX3BsdFsxXSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmdyX3B0clswXSA9IEZYQVJHQl9CKHNyY19wbHRbMF0pOworICAgICAgICBiZ3JfcHRyWzFdID0gRlhBUkdCX0coc3JjX3BsdFswXSk7CisgICAgICAgIGJncl9wdHJbMl0gPSBGWEFSR0JfUihzcmNfcGx0WzBdKTsKKyAgICAgICAgYmdyX3B0clszXSA9IEZYQVJHQl9CKHNyY19wbHRbMV0pOworICAgICAgICBiZ3JfcHRyWzRdID0gRlhBUkdCX0coc3JjX3BsdFsxXSk7CisgICAgICAgIGJncl9wdHJbNV0gPSBGWEFSR0JfUihzcmNfcGx0WzFdKTsKKyAgICB9CisgICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsKKyAgICAgICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOworICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCAoRlhfTFBCWVRFKXBsdCwgKEZYX0xQQ0JZVEUpcGx0LCAyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocFNyY0JpdG1hcC0+SXNDbXlrSW1hZ2UoKSkgeworICAgICAgICAgICAgQWRvYmVDTVlLX3RvX3NSR0IxKEZYU1lTX0dldENWYWx1ZShzcmNfcGx0WzBdKSwgRlhTWVNfR2V0TVZhbHVlKHNyY19wbHRbMF0pLCBGWFNZU19HZXRZVmFsdWUoc3JjX3BsdFswXSksIEZYU1lTX0dldEtWYWx1ZShzcmNfcGx0WzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZ3JfcHRyWzJdLCBiZ3JfcHRyWzFdLCBiZ3JfcHRyWzBdKTsKKyAgICAgICAgICAgIEFkb2JlQ01ZS190b19zUkdCMShGWFNZU19HZXRDVmFsdWUoc3JjX3BsdFsxXSksIEZYU1lTX0dldE1WYWx1ZShzcmNfcGx0WzFdKSwgRlhTWVNfR2V0WVZhbHVlKHNyY19wbHRbMV0pLCBGWFNZU19HZXRLVmFsdWUoc3JjX3BsdFsxXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmdyX3B0cls1XSwgYmdyX3B0cls0XSwgYmdyX3B0clszXSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IGRlc3RfYnVmICsgcm93ICogZGVzdF9waXRjaDsKKyAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBTcmNCaXRtYXAtPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpOworICAgICAgICBmb3IgKGludCBjb2wgPSBzcmNfbGVmdDsgY29sIDwgc3JjX2xlZnQgKyB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICBpZiAoc3JjX3NjYW5bY29sIC8gOF0gJiAoMSA8PCAoNyAtIGNvbCAlIDgpKSkgeworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IGJncl9wdHJbM107CisgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gYmdyX3B0cls0XTsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuICAgPSBiZ3JfcHRyWzVdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSBiZ3JfcHRyWzBdOworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IGJncl9wdHJbMV07CisgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiAgID0gYmdyX3B0clsyXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBjb21wcyAtIDI7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIF9Db252ZXJ0QnVmZmVyXzhicHBQbHQyUmdiKEZYRElCX0Zvcm1hdCBkc3RfZm9ybWF0LCBGWF9MUEJZVEUgZGVzdF9idWYsIGludCBkZXN0X3BpdGNoLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3AsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgaW50IGNvbXBzID0gKGRzdF9mb3JtYXQgJiAweGZmKSAvIDg7CisgICAgRlhfRFdPUkQqIHNyY19wbHQgPSBwU3JjQml0bWFwLT5HZXRQYWxldHRlKCk7CisgICAgRlhfRFdPUkQgcGx0WzI1Nl07CisgICAgRlhfTFBCWVRFIGJncl9wdHIgPSAoRlhfTFBCWVRFKXBsdDsKKyAgICBpZiAoIXBTcmNCaXRtYXAtPklzQ215a0ltYWdlKCkpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgKmJncl9wdHIrKyA9IEZYQVJHQl9CKHNyY19wbHRbaV0pOworICAgICAgICAgICAgKmJncl9wdHIrKyA9IEZYQVJHQl9HKHNyY19wbHRbaV0pOworICAgICAgICAgICAgKmJncl9wdHIrKyA9IEZYQVJHQl9SKHNyY19wbHRbaV0pOworICAgICAgICB9CisgICAgICAgIGJncl9wdHIgPSAoRlhfTFBCWVRFKXBsdDsKKyAgICB9CisgICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsKKyAgICAgICAgaWYgKHBTcmNCaXRtYXAtPklzQ215a0ltYWdlKCkpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAgICAgICAgICAgICBwbHRbaV0gPSBGWENNWUtfVE9ESUIoc3JjX3BsdFtpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOworICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCAoRlhfTFBCWVRFKXBsdCwgKEZYX0xQQ0JZVEUpcGx0LCAyNTYpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChwU3JjQml0bWFwLT5Jc0NteWtJbWFnZSgpKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAgICAgICAgQWRvYmVDTVlLX3RvX3NSR0IxKEZYU1lTX0dldENWYWx1ZShzcmNfcGx0W2ldKSwgRlhTWVNfR2V0TVZhbHVlKHNyY19wbHRbaV0pLCBGWFNZU19HZXRZVmFsdWUoc3JjX3BsdFtpXSksIEZYU1lTX0dldEtWYWx1ZShzcmNfcGx0W2ldKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmdyX3B0clsyXSwgYmdyX3B0clsxXSwgYmdyX3B0clswXSk7CisgICAgICAgICAgICAgICAgYmdyX3B0ciArPSAzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYmdyX3B0ciA9IChGWF9MUEJZVEUpcGx0OworICAgICAgICB9CisgICAgfQorICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7CisgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIHJvdyAqIGRlc3RfcGl0Y2g7CisgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBwU3JjQml0bWFwLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KSArIHNyY19sZWZ0OworICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICBGWF9MUEJZVEUgc3JjX3BpeGVsID0gYmdyX3B0ciArIDMgKiAoKnNyY19zY2FuKyspOworICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19waXhlbCsrOworICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19waXhlbCsrOworICAgICAgICAgICAgKmRlc3Rfc2NhbiAgID0gKnNyY19waXhlbCsrOworICAgICAgICAgICAgZGVzdF9zY2FuICs9IGNvbXBzIC0gMjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgX0NvbnZlcnRCdWZmZXJfMjRicHBSZ2IyUmdiMjQoRlhfTFBCWVRFIGRlc3RfYnVmLCBpbnQgZGVzdF9waXRjaCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwU3JjQml0bWFwLCBpbnQgc3JjX2xlZnQsIGludCBzcmNfdG9wLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7CisgICAgICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsKKyAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIHJvdyAqIGRlc3RfcGl0Y2g7CisgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gcFNyY0JpdG1hcC0+R2V0U2NhbmxpbmUoc3JjX3RvcCArIHJvdykgKyBzcmNfbGVmdCAqIDM7CisgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IGRlc3RfYnVmICsgcm93ICogZGVzdF9waXRjaDsKKyAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBwU3JjQml0bWFwLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KSArIHNyY19sZWZ0ICogMzsKKyAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoICogMyk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIF9Db252ZXJ0QnVmZmVyXzMyYnBwUmdiMlJnYjI0KEZYX0xQQllURSBkZXN0X2J1ZiwgaW50IGRlc3RfcGl0Y2gsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyY0JpdG1hcCwgaW50IHNyY19sZWZ0LCBpbnQgc3JjX3RvcCwgdm9pZCogcEljY1RyYW5zZm9ybSkKK3sKKyAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgeworICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyByb3cgKiBkZXN0X3BpdGNoOworICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gcFNyY0JpdG1hcC0+R2V0U2NhbmxpbmUoc3JjX3RvcCArIHJvdykgKyBzcmNfbGVmdCAqIDQ7CisgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbisrOworICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7CisgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgIHNyY19zY2FuKys7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsKKyAgICAgICAgSUNvZGVjX0ljY01vZHVsZSogcEljY01vZHVsZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpOworICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IGRlc3RfYnVmICsgcm93ICogZGVzdF9waXRjaDsKKyAgICAgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGRlc3Rfc2NhbiwgZGVzdF9zY2FuLCB3aWR0aCk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIF9Db252ZXJ0QnVmZmVyX1JnYjJSZ2IzMihGWF9MUEJZVEUgZGVzdF9idWYsIGludCBkZXN0X3BpdGNoLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwU3JjQml0bWFwLCBpbnQgc3JjX2xlZnQsIGludCBzcmNfdG9wLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIGludCBjb21wcyA9IHBTcmNCaXRtYXAtPkdldEJQUCgpIC8gODsKKyAgICBpZiAocEljY1RyYW5zZm9ybSkgeworICAgICAgICBJQ29kZWNfSWNjTW9kdWxlKiBwSWNjTW9kdWxlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCk7CisgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7CisgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyByb3cgKiBkZXN0X3BpdGNoOworICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBTcmNCaXRtYXAtPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpICsgc3JjX2xlZnQgKiBjb21wczsKKyAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBkZXN0X3NjYW4sIHNyY19zY2FuLCAxKTsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsKKyAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSBjb21wczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7CisgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyByb3cgKiBkZXN0X3BpdGNoOworICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBTcmNCaXRtYXAtPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpICsgc3JjX2xlZnQgKiBjb21wczsKKyAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4rKzsKKyAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSBjb21wcyAtIDM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIF9Db252ZXJ0QnVmZmVyXzMyYnBwQ215azJSZ2IzMihGWF9MUEJZVEUgZGVzdF9idWYsIGludCBkZXN0X3BpdGNoLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwU3JjQml0bWFwLCBpbnQgc3JjX2xlZnQsIGludCBzcmNfdG9wLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7CisgICAgICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsKKyAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIHJvdyAqIGRlc3RfcGl0Y2g7CisgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gcFNyY0JpdG1hcC0+R2V0U2NhbmxpbmUoc3JjX3RvcCArIHJvdykgKyBzcmNfbGVmdCAqIDQ7CisgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgZGVzdF9zY2FuLCBzcmNfc2NhbiwgMSk7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7CisgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyByb3cgKiBkZXN0X3BpdGNoOworICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBTcmNCaXRtYXAtPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpICsgc3JjX2xlZnQgKiA0OworICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgIEFkb2JlQ01ZS190b19zUkdCMShzcmNfc2NhblswXSwgc3JjX3NjYW5bMV0sIHNyY19zY2FuWzJdLCBzcmNfc2NhblszXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdLCBkZXN0X3NjYW5bMV0sIGRlc3Rfc2NhblswXSk7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ29udmVydEJ1ZmZlcihGWERJQl9Gb3JtYXQgZGVzdF9mb3JtYXQsIEZYX0xQQllURSBkZXN0X2J1ZiwgaW50IGRlc3RfcGl0Y2gsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwU3JjQml0bWFwLCBpbnQgc3JjX2xlZnQsIGludCBzcmNfdG9wLCBGWF9EV09SRComIGRfcGFsLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIEZYRElCX0Zvcm1hdCBzcmNfZm9ybWF0ID0gcFNyY0JpdG1hcC0+R2V0Rm9ybWF0KCk7CisgICAgaWYgKCFDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpIHx8ICFDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKSkgeworICAgICAgICBwSWNjVHJhbnNmb3JtID0gTlVMTDsKKyAgICB9CisgICAgc3dpdGNoIChkZXN0X2Zvcm1hdCkgeworICAgICAgICBjYXNlIEZYRElCX0ludmFsaWQ6CisgICAgICAgIGNhc2UgRlhESUJfMWJwcENteWs6CisgICAgICAgIGNhc2UgRlhESUJfMWJwcE1hc2s6CisgICAgICAgIGNhc2UgRlhESUJfMWJwcFJnYjoKKyAgICAgICAgICAgIEFTU0VSVChGQUxTRSk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIGNhc2UgRlhESUJfOGJwcE1hc2s6IHsKKyAgICAgICAgICAgICAgICBpZiAoKHNyY19mb3JtYXQgJiAweGZmKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwU3JjQml0bWFwLT5HZXRQYWxldHRlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfQ29udmVydEJ1ZmZlcl8xYnBwUGx0MkdyYXkoZGVzdF9idWYsIGRlc3RfcGl0Y2gsIHdpZHRoLCBoZWlnaHQsIHBTcmNCaXRtYXAsIHNyY19sZWZ0LCBzcmNfdG9wLCBwSWNjVHJhbnNmb3JtKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0NvbnZlcnRCdWZmZXJfMWJwcE1hc2syR3JheShkZXN0X2J1ZiwgZGVzdF9waXRjaCwgd2lkdGgsIGhlaWdodCwgcFNyY0JpdG1hcCwgc3JjX2xlZnQsIHNyY190b3ApOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHNyY19mb3JtYXQgJiAweGZmKSA9PSA4KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwU3JjQml0bWFwLT5HZXRQYWxldHRlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfQ29udmVydEJ1ZmZlcl84YnBwUGx0MkdyYXkoZGVzdF9idWYsIGRlc3RfcGl0Y2gsIHdpZHRoLCBoZWlnaHQsIHBTcmNCaXRtYXAsIHNyY19sZWZ0LCBzcmNfdG9wLCBwSWNjVHJhbnNmb3JtKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0NvbnZlcnRCdWZmZXJfOGJwcE1hc2syR3JheShkZXN0X2J1ZiwgZGVzdF9waXRjaCwgd2lkdGgsIGhlaWdodCwgcFNyY0JpdG1hcCwgc3JjX2xlZnQsIHNyY190b3ApOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHNyY19mb3JtYXQgJiAweGZmKSA+PSAyNCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0NvbnZlcnRCdWZmZXJfUmdiT3JDbXlrMkdyYXkoZGVzdF9idWYsIGRlc3RfcGl0Y2gsIHdpZHRoLCBoZWlnaHQsIHBTcmNCaXRtYXAsIHNyY19sZWZ0LCBzcmNfdG9wLCBwSWNjVHJhbnNmb3JtKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIEZYRElCXzhicHBSZ2I6CisgICAgICAgIGNhc2UgRlhESUJfOGJwcFJnYmE6IHsKKyAgICAgICAgICAgICAgICBpZiAoKHNyY19mb3JtYXQgJiAweGZmKSA9PSA4ICYmIHBTcmNCaXRtYXAtPkdldFBhbGV0dGUoKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb252ZXJ0QnVmZmVyKEZYRElCXzhicHBNYXNrLCBkZXN0X2J1ZiwgZGVzdF9waXRjaCwgd2lkdGgsIGhlaWdodCwgcFNyY0JpdG1hcCwgc3JjX2xlZnQsIHNyY190b3AsIGRfcGFsLCBwSWNjVHJhbnNmb3JtKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZF9wYWwgPSBGWF9BbGxvYyhGWF9EV09SRCwgMjU2KTsKKyAgICAgICAgICAgICAgICBpZiAoIWRfcGFsKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRlhTWVNfbWVtc2V0MzIoZF9wYWwsIDAsIHNpemVvZihGWF9EV09SRCkgKiAyNTYpOworICAgICAgICAgICAgICAgIGlmICgoKHNyY19mb3JtYXQgJiAweGZmKSA9PSAxIHx8IChzcmNfZm9ybWF0ICYgMHhmZikgPT0gOCkgJiYgcFNyY0JpdG1hcC0+R2V0UGFsZXR0ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBfQ29udmVydEJ1ZmZlcl9QbHQyUGx0UmdiOChkZXN0X2J1ZiwgZGVzdF9waXRjaCwgd2lkdGgsIGhlaWdodCwgcFNyY0JpdG1hcCwgc3JjX2xlZnQsIHNyY190b3AsIGRfcGFsLCBwSWNjVHJhbnNmb3JtKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChzcmNfZm9ybWF0ICYgMHhmZikgPj0gMjQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9Db252ZXJ0QnVmZmVyX1JnYjJQbHRSZ2I4KGRlc3RfYnVmLCBkZXN0X3BpdGNoLCB3aWR0aCwgaGVpZ2h0LCBwU3JjQml0bWFwLCBzcmNfbGVmdCwgc3JjX3RvcCwgZF9wYWwsIHBJY2NUcmFuc2Zvcm0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgRlhESUJfUmdiOgorICAgICAgICBjYXNlIEZYRElCX1JnYmE6IHsKKyAgICAgICAgICAgICAgICBpZiAoKHNyY19mb3JtYXQgJiAweGZmKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwU3JjQml0bWFwLT5HZXRQYWxldHRlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfQ29udmVydEJ1ZmZlcl8xYnBwUGx0MlJnYihkZXN0X2Zvcm1hdCwgZGVzdF9idWYsIGRlc3RfcGl0Y2gsIHdpZHRoLCBoZWlnaHQsIHBTcmNCaXRtYXAsIHNyY19sZWZ0LCBzcmNfdG9wLCBwSWNjVHJhbnNmb3JtKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0NvbnZlcnRCdWZmZXJfMWJwcE1hc2syUmdiKGRlc3RfZm9ybWF0LCBkZXN0X2J1ZiwgZGVzdF9waXRjaCwgd2lkdGgsIGhlaWdodCwgcFNyY0JpdG1hcCwgc3JjX2xlZnQsIHNyY190b3ApOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHNyY19mb3JtYXQgJiAweGZmKSA9PSA4KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwU3JjQml0bWFwLT5HZXRQYWxldHRlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfQ29udmVydEJ1ZmZlcl84YnBwUGx0MlJnYihkZXN0X2Zvcm1hdCwgZGVzdF9idWYsIGRlc3RfcGl0Y2gsIHdpZHRoLCBoZWlnaHQsIHBTcmNCaXRtYXAsIHNyY19sZWZ0LCBzcmNfdG9wLCBwSWNjVHJhbnNmb3JtKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0NvbnZlcnRCdWZmZXJfOGJwcE1hc2syUmdiKGRlc3RfZm9ybWF0LCBkZXN0X2J1ZiwgZGVzdF9waXRjaCwgd2lkdGgsIGhlaWdodCwgcFNyY0JpdG1hcCwgc3JjX2xlZnQsIHNyY190b3ApOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHNyY19mb3JtYXQgJiAweGZmKSA9PSAyNCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0NvbnZlcnRCdWZmZXJfMjRicHBSZ2IyUmdiMjQoZGVzdF9idWYsIGRlc3RfcGl0Y2gsIHdpZHRoLCBoZWlnaHQsIHBTcmNCaXRtYXAsIHNyY19sZWZ0LCBzcmNfdG9wLCBwSWNjVHJhbnNmb3JtKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChzcmNfZm9ybWF0ICYgMHhmZikgPT0gMzIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9Db252ZXJ0QnVmZmVyXzMyYnBwUmdiMlJnYjI0KGRlc3RfYnVmLCBkZXN0X3BpdGNoLCB3aWR0aCwgaGVpZ2h0LCBwU3JjQml0bWFwLCBzcmNfbGVmdCwgc3JjX3RvcCwgcEljY1RyYW5zZm9ybSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBGWERJQl9BcmdiOgorICAgICAgICBjYXNlIEZYRElCX1JnYjMyOiB7CisgICAgICAgICAgICAgICAgaWYgKChzcmNfZm9ybWF0ICYgMHhmZikgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocFNyY0JpdG1hcC0+R2V0UGFsZXR0ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0NvbnZlcnRCdWZmZXJfMWJwcFBsdDJSZ2IoZGVzdF9mb3JtYXQsIGRlc3RfYnVmLCBkZXN0X3BpdGNoLCB3aWR0aCwgaGVpZ2h0LCBwU3JjQml0bWFwLCBzcmNfbGVmdCwgc3JjX3RvcCwgcEljY1RyYW5zZm9ybSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9Db252ZXJ0QnVmZmVyXzFicHBNYXNrMlJnYihkZXN0X2Zvcm1hdCwgZGVzdF9idWYsIGRlc3RfcGl0Y2gsIHdpZHRoLCBoZWlnaHQsIHBTcmNCaXRtYXAsIHNyY19sZWZ0LCBzcmNfdG9wKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChzcmNfZm9ybWF0ICYgMHhmZikgPT0gOCkgeworICAgICAgICAgICAgICAgICAgICBpZiAocFNyY0JpdG1hcC0+R2V0UGFsZXR0ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0NvbnZlcnRCdWZmZXJfOGJwcFBsdDJSZ2IoZGVzdF9mb3JtYXQsIGRlc3RfYnVmLCBkZXN0X3BpdGNoLCB3aWR0aCwgaGVpZ2h0LCBwU3JjQml0bWFwLCBzcmNfbGVmdCwgc3JjX3RvcCwgcEljY1RyYW5zZm9ybSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9Db252ZXJ0QnVmZmVyXzhicHBNYXNrMlJnYihkZXN0X2Zvcm1hdCwgZGVzdF9idWYsIGRlc3RfcGl0Y2gsIHdpZHRoLCBoZWlnaHQsIHBTcmNCaXRtYXAsIHNyY19sZWZ0LCBzcmNfdG9wKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChzcmNfZm9ybWF0ICYgMHhmZikgPj0gMjQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19mb3JtYXQgJiAweDA0MDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfQ29udmVydEJ1ZmZlcl8zMmJwcENteWsyUmdiMzIoZGVzdF9idWYsIGRlc3RfcGl0Y2gsIHdpZHRoLCBoZWlnaHQsIHBTcmNCaXRtYXAsIHNyY19sZWZ0LCBzcmNfdG9wLCBwSWNjVHJhbnNmb3JtKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gX0NvbnZlcnRCdWZmZXJfUmdiMlJnYjMyKGRlc3RfYnVmLCBkZXN0X3BpdGNoLCB3aWR0aCwgaGVpZ2h0LCBwU3JjQml0bWFwLCBzcmNfbGVmdCwgc3JjX3RvcCwgcEljY1RyYW5zZm9ybSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorQ0ZYX0RJQml0bWFwKiBDRlhfRElCU291cmNlOjpDbG9uZUNvbnZlcnQoRlhESUJfRm9ybWF0IGRlc3RfZm9ybWF0LCBjb25zdCBGWF9SRUNUKiBwQ2xpcCwgdm9pZCogcEljY1RyYW5zZm9ybSkgY29uc3QKK3sKKyAgICBpZihkZXN0X2Zvcm1hdCA9PSBHZXRGb3JtYXQoKSAmJiBwSWNjVHJhbnNmb3JtID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIENsb25lKHBDbGlwKTsKKyAgICB9CisgICAgaWYgKHBDbGlwKSB7CisgICAgICAgIENGWF9ESUJpdG1hcCogcENsb25lID0gQ2xvbmUocENsaXApOworICAgICAgICBpZiAocENsb25lID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmKCFwQ2xvbmUtPkNvbnZlcnRGb3JtYXQoZGVzdF9mb3JtYXQsIHBJY2NUcmFuc2Zvcm0pKSB7CisgICAgICAgICAgICBkZWxldGUgcENsb25lOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHBDbG9uZTsKKyAgICB9CisgICAgQ0ZYX0RJQml0bWFwKiBwQ2xvbmUgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOworICAgIGlmICghcENsb25lKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZighcENsb25lLT5DcmVhdGUobV9XaWR0aCwgbV9IZWlnaHQsIGRlc3RfZm9ybWF0KSkgeworICAgICAgICBkZWxldGUgcENsb25lOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRlhfQk9PTCByZXQgPSBUUlVFOworICAgIENGWF9ESUJpdG1hcCogcFNyY0FscGhhID0gTlVMTDsKKyAgICBpZiAobV9BbHBoYUZsYWcgJiAyKSB7CisgICAgICAgIHBTcmNBbHBoYSA9IChHZXRGb3JtYXQoKSA9PSBGWERJQl9BcmdiKSA/IEdldEFscGhhTWFzaygpIDogbV9wQWxwaGFNYXNrOworICAgICAgICBpZiAocFNyY0FscGhhID09IE5VTEwpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwQ2xvbmU7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZGVzdF9mb3JtYXQgJiAweDAyMDApIHsKKyAgICAgICAgaWYgKGRlc3RfZm9ybWF0ID09IEZYRElCX0FyZ2IpCisgICAgICAgICAgICByZXQgPSBwU3JjQWxwaGEgPworICAgICAgICAgICAgICAgICAgcENsb25lLT5Mb2FkQ2hhbm5lbChGWERJQl9BbHBoYSwgcFNyY0FscGhhLCBGWERJQl9BbHBoYSkgOgorICAgICAgICAgICAgICAgICAgcENsb25lLT5Mb2FkQ2hhbm5lbChGWERJQl9BbHBoYSwgMHhmZik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0ID0gcENsb25lLT5Db3B5QWxwaGFNYXNrKHBTcmNBbHBoYSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHBTcmNBbHBoYSAmJiBwU3JjQWxwaGEgIT0gbV9wQWxwaGFNYXNrKSB7CisgICAgICAgIGRlbGV0ZSBwU3JjQWxwaGE7CisgICAgICAgIHBTcmNBbHBoYSA9IE5VTEw7CisgICAgfQorICAgIGlmICghcmV0KSB7CisgICAgICAgIGRlbGV0ZSBwQ2xvbmU7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBGWF9EV09SRCogcGFsXzhicHAgPSBOVUxMOworICAgIHJldCA9IENvbnZlcnRCdWZmZXIoZGVzdF9mb3JtYXQsIHBDbG9uZS0+R2V0QnVmZmVyKCksIHBDbG9uZS0+R2V0UGl0Y2goKSwgbV9XaWR0aCwgbV9IZWlnaHQsIHRoaXMsIDAsIDAsIHBhbF84YnBwLCBwSWNjVHJhbnNmb3JtKTsKKyAgICBpZiAoIXJldCkgeworICAgICAgICBpZiAocGFsXzhicHApIHsKKyAgICAgICAgICAgIEZYX0ZyZWUocGFsXzhicHApOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZSBwQ2xvbmU7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAocGFsXzhicHApIHsKKyAgICAgICAgcENsb25lLT5Db3B5UGFsZXR0ZShwYWxfOGJwcCk7CisgICAgICAgIEZYX0ZyZWUocGFsXzhicHApOworICAgICAgICBwYWxfOGJwcCA9IE5VTEw7CisgICAgfQorICAgIHJldHVybiBwQ2xvbmU7Cit9CitGWF9CT09MIENGWF9ESUJpdG1hcDo6Q29udmVydEZvcm1hdChGWERJQl9Gb3JtYXQgZGVzdF9mb3JtYXQsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgRlhESUJfRm9ybWF0IHNyY19mb3JtYXQgPSBHZXRGb3JtYXQoKTsKKyAgICBpZiAoZGVzdF9mb3JtYXQgPT0gc3JjX2Zvcm1hdCAmJiBwSWNjVHJhbnNmb3JtID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGlmIChkZXN0X2Zvcm1hdCA9PSBGWERJQl84YnBwTWFzayAmJiBzcmNfZm9ybWF0ID09IEZYRElCXzhicHBSZ2IgJiYgbV9wUGFsZXR0ZSA9PSBOVUxMKSB7CisgICAgICAgIG1fQWxwaGFGbGFnID0gMTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGlmIChkZXN0X2Zvcm1hdCA9PSBGWERJQl9BcmdiICYmIHNyY19mb3JtYXQgPT0gRlhESUJfUmdiMzIgJiYgcEljY1RyYW5zZm9ybSA9PSBOVUxMKSB7CisgICAgICAgIG1fQWxwaGFGbGFnID0gMjsKKyAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9IZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgRlhfTFBCWVRFIHNjYW5saW5lID0gbV9wQnVmZmVyICsgcm93ICogbV9QaXRjaCArIDM7CisgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1dpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAqc2NhbmxpbmUgPSAweGZmOworICAgICAgICAgICAgICAgIHNjYW5saW5lICs9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGludCBkZXN0X2JwcCA9IGRlc3RfZm9ybWF0ICYgMHhmZjsKKyAgICBpbnQgZGVzdF9waXRjaCA9IChkZXN0X2JwcCAqIG1fV2lkdGggKyAzMSkgLyAzMiAqIDQ7CisgICAgRlhfTFBCWVRFIGRlc3RfYnVmID0gRlhfQWxsb2NOTChGWF9CWVRFLCBkZXN0X3BpdGNoICogbV9IZWlnaHQgKyA0KTsKKyAgICBpZiAoZGVzdF9idWYgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIENGWF9ESUJpdG1hcCogcEFscGhhTWFzayA9IE5VTEw7CisgICAgaWYgKGRlc3RfZm9ybWF0ID09IEZYRElCX0FyZ2IpIHsKKyAgICAgICAgRlhTWVNfbWVtc2V0OChkZXN0X2J1ZiwgMHhmZiwgZGVzdF9waXRjaCAqIG1fSGVpZ2h0ICsgNCk7CisgICAgICAgIGlmIChtX3BBbHBoYU1hc2spIHsKKyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fSGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgICAgICBGWF9MUEJZVEUgcERzdFNjYW5saW5lID0gZGVzdF9idWYgKyByb3cgKiBkZXN0X3BpdGNoICsgMzsKKyAgICAgICAgICAgICAgICBGWF9MUENCWVRFIHBTcmNTY2FubGluZSA9IG1fcEFscGhhTWFzay0+R2V0U2NhbmxpbmUocm93KTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1dpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgKnBEc3RTY2FubGluZSA9ICpwU3JjU2NhbmxpbmUrKzsKKyAgICAgICAgICAgICAgICAgICAgcERzdFNjYW5saW5lICs9IDQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIGlmIChkZXN0X2Zvcm1hdCAmIDB4MDIwMCkgeworICAgICAgICBpZiAoc3JjX2Zvcm1hdCA9PSBGWERJQl9BcmdiKSB7CisgICAgICAgICAgICBwQWxwaGFNYXNrID0gR2V0QWxwaGFNYXNrKCk7CisgICAgICAgICAgICBpZiAocEFscGhhTWFzayA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgRlhfRnJlZShkZXN0X2J1Zik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fcEFscGhhTWFzayA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKCFCdWlsZEFscGhhTWFzaygpKSB7CisgICAgICAgICAgICAgICAgICAgIEZYX0ZyZWUoZGVzdF9idWYpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBBbHBoYU1hc2sgPSBtX3BBbHBoYU1hc2s7CisgICAgICAgICAgICAgICAgbV9wQWxwaGFNYXNrID0gTlVMTDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcEFscGhhTWFzayA9IG1fcEFscGhhTWFzazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBGWF9CT09MIHJldCA9IEZBTFNFOworICAgIEZYX0RXT1JEKiBwYWxfOGJwcCA9IE5VTEw7CisgICAgcmV0ID0gQ29udmVydEJ1ZmZlcihkZXN0X2Zvcm1hdCwgZGVzdF9idWYsIGRlc3RfcGl0Y2gsIG1fV2lkdGgsIG1fSGVpZ2h0LCB0aGlzLCAwLCAwLCBwYWxfOGJwcCwgcEljY1RyYW5zZm9ybSk7CisgICAgaWYgKCFyZXQpIHsKKyAgICAgICAgaWYgKHBhbF84YnBwKSB7CisgICAgICAgICAgICBGWF9GcmVlKHBhbF84YnBwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocEFscGhhTWFzayAhPSBtX3BBbHBoYU1hc2spIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwQWxwaGFNYXNrOworICAgICAgICB9CisgICAgICAgIGlmIChkZXN0X2J1ZikgeworICAgICAgICAgICAgRlhfRnJlZShkZXN0X2J1Zik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAobV9wQWxwaGFNYXNrICYmIHBBbHBoYU1hc2sgIT0gbV9wQWxwaGFNYXNrKSB7CisgICAgICAgIGRlbGV0ZSBtX3BBbHBoYU1hc2s7CisgICAgfQorICAgIG1fcEFscGhhTWFzayA9IHBBbHBoYU1hc2s7CisgICAgaWYgKG1fcFBhbGV0dGUpIHsKKyAgICAgICAgRlhfRnJlZShtX3BQYWxldHRlKTsKKyAgICB9CisgICAgbV9wUGFsZXR0ZSA9IHBhbF84YnBwOworICAgIGlmICghbV9iRXh0QnVmKSB7CisgICAgICAgIEZYX0ZyZWUobV9wQnVmZmVyKTsKKyAgICB9CisgICAgbV9iRXh0QnVmID0gRkFMU0U7CisgICAgbV9wQnVmZmVyID0gZGVzdF9idWY7CisgICAgbV9icHAgPSAoRlhfQllURSlkZXN0X2Zvcm1hdDsKKyAgICBtX0FscGhhRmxhZyA9IChGWF9CWVRFKShkZXN0X2Zvcm1hdCA+PiA4KTsKKyAgICBtX1BpdGNoID0gZGVzdF9waXRjaDsKKyAgICByZXR1cm4gVFJVRTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2UvZGliL2Z4X2RpYl9lbmdpbmUuY3BwIGIvY29yZS9zcmMvZnhnZS9kaWIvZnhfZGliX2VuZ2luZS5jcHAKaW5kZXggM2RkYmZmNi4uYTUxMDM4NiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhnZS9kaWIvZnhfZGliX2VuZ2luZS5jcHAKKysrIGIvY29yZS9zcmMvZnhnZS9kaWIvZnhfZGliX2VuZ2luZS5jcHAKQEAgLTEsODY3ICsxLDg2NyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9kaWIuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiDQotI2luY2x1ZGUgImRpYl9pbnQuaCINCi0jaW5jbHVkZSA8bGltaXRzLmg+DQotZXh0ZXJuIGludCBTRFBfVGFibGVbNTEzXTsNCi12b2lkIENXZWlnaHRUYWJsZTo6Q2FsYyhpbnQgZGVzdF9sZW4sIGludCBkZXN0X21pbiwgaW50IGRlc3RfbWF4LCBpbnQgc3JjX2xlbiwgaW50IHNyY19taW4sIGludCBzcmNfbWF4LCBpbnQgZmxhZ3MpDQotew0KLSAgICBpZiAobV9wV2VpZ2h0VGFibGVzKSB7DQotICAgICAgICBGWF9GcmVlKG1fcFdlaWdodFRhYmxlcyk7DQotICAgICAgICBtX3BXZWlnaHRUYWJsZXMgPSBOVUxMOw0KLSAgICB9DQotICAgIGRvdWJsZSBzY2FsZSwgYmFzZTsNCi0gICAgc2NhbGUgPSBGWFNZU19EaXYoKEZYX0ZMT0FUKShzcmNfbGVuKSwgKEZYX0ZMT0FUKShkZXN0X2xlbikpOw0KLSAgICBpZiAoZGVzdF9sZW4gPCAwKSB7DQotICAgICAgICBiYXNlID0gKEZYX0ZMT0FUKShzcmNfbGVuKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGJhc2UgPSAwOw0KLSAgICB9DQotICAgIGludCBleHRfc2l6ZSA9IGZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCA/IDMgOiAxOw0KLSAgICBtX0l0ZW1TaXplID0gc2l6ZW9mKGludCkgKiAyICsgKGludCkoc2l6ZW9mKGludCkgKiAoRlhTWVNfY2VpbChGWFNZU19mYWJzKChGWF9GTE9BVClzY2FsZSkpICsgZXh0X3NpemUpKTsNCi0gICAgbV9EZXN0TWluID0gZGVzdF9taW47DQotICAgIGlmICgoZGVzdF9tYXggLSBkZXN0X21pbikgPiAoaW50KSgoMVUgPDwgMzApIC0gNCkgLyBtX0l0ZW1TaXplKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbV9wV2VpZ2h0VGFibGVzID0gRlhfQWxsb2NOTChGWF9CWVRFLCAoZGVzdF9tYXggLSBkZXN0X21pbikgKiBtX0l0ZW1TaXplICsgNCk7DQotICAgIGlmIChtX3BXZWlnaHRUYWJsZXMgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYU1lTX21lbXNldDMyKG1fcFdlaWdodFRhYmxlcywgMCwgc2l6ZW9mKEZYX0JZVEUpICogKChkZXN0X21heCAtIGRlc3RfbWluKSptX0l0ZW1TaXplICsgNCkpOw0KLSAgICBpZiAoKGZsYWdzICYgRlhESUJfTk9TTU9PVEgpICE9IDAgfHwgRlhTWVNfZmFicygoRlhfRkxPQVQpc2NhbGUpIDwgMS4wZikgew0KLSAgICAgICAgZm9yIChpbnQgZGVzdF9waXhlbCA9IGRlc3RfbWluOyBkZXN0X3BpeGVsIDwgZGVzdF9tYXg7IGRlc3RfcGl4ZWwgKyspIHsNCi0gICAgICAgICAgICBQaXhlbFdlaWdodCYgcGl4ZWxfd2VpZ2h0cyA9ICpHZXRQaXhlbFdlaWdodChkZXN0X3BpeGVsKTsNCi0gICAgICAgICAgICBkb3VibGUgc3JjX3BvcyA9IGRlc3RfcGl4ZWwgKiBzY2FsZSArIHNjYWxlIC8gMiArIGJhc2U7DQotICAgICAgICAgICAgaWYgKGZsYWdzICYgRlhESUJfSU5URVJQT0wpIHsNCi0gICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0ID0gKGludClGWFNZU19mbG9vcigoRlhfRkxPQVQpc3JjX3BvcyAtIDEuMGYgLyAyKTsNCi0gICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1NyY0VuZCA9IChpbnQpRlhTWVNfZmxvb3IoKEZYX0ZMT0FUKXNyY19wb3MgKyAxLjBmIC8gMik7DQotICAgICAgICAgICAgICAgIGlmIChwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgPCBzcmNfbWluKSB7DQotICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgPSBzcmNfbWluOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChwaXhlbF93ZWlnaHRzLm1fU3JjRW5kID49IHNyY19tYXgpIHsNCi0gICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9TcmNFbmQgPSBzcmNfbWF4IC0gMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAocGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0ID09IHBpeGVsX3dlaWdodHMubV9TcmNFbmQpIHsNCi0gICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9XZWlnaHRzWzBdID0gNjU1MzY7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fV2VpZ2h0c1sxXSA9IEZYU1lTX3JvdW5kKChGWF9GTE9BVCkoc3JjX3BvcyAtIHBpeGVsX3dlaWdodHMubV9TcmNTdGFydCAtIDEuMGYgLyAyKSAqIDY1NTM2KTsNCi0gICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9XZWlnaHRzWzBdID0gNjU1MzYgLSBwaXhlbF93ZWlnaHRzLm1fV2VpZ2h0c1sxXTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiBGWERJQl9CSUNVQklDX0lOVEVSUE9MKSB7DQotICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9TcmNTdGFydCA9IChpbnQpRlhTWVNfZmxvb3IoKEZYX0ZMT0FUKXNyY19wb3MgLSAxLjBmIC8gMik7DQotICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9TcmNFbmQgPSAoaW50KUZYU1lTX2Zsb29yKChGWF9GTE9BVClzcmNfcG9zICsgMS4wZiAvIDIpOw0KLSAgICAgICAgICAgICAgICBpbnQgc3RhcnQgPSBwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgLSAxOw0KLSAgICAgICAgICAgICAgICBpbnQgZW5kID0gcGl4ZWxfd2VpZ2h0cy5tX1NyY0VuZCArIDE7DQotICAgICAgICAgICAgICAgIGlmIChzdGFydCA8IHNyY19taW4pIHsNCi0gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gc3JjX21pbjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoZW5kID49IHNyY19tYXgpIHsNCi0gICAgICAgICAgICAgICAgICAgIGVuZCA9IHNyY19tYXggLSAxOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgPCBzcmNfbWluKSB7DQotICAgICAgICAgICAgICAgICAgICBzcmNfcG9zICs9IHNyY19taW4gLSBwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQ7DQotICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgPSBzcmNfbWluOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChwaXhlbF93ZWlnaHRzLm1fU3JjRW5kID49IHNyY19tYXgpIHsNCi0gICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9TcmNFbmQgPSBzcmNfbWF4IC0gMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpbnQgd2VpZ2h0Ow0KLSAgICAgICAgICAgICAgICB3ZWlnaHQgPSBGWFNZU19yb3VuZCgoRlhfRkxPQVQpKHNyY19wb3MgLSBwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgLSAxLjBmIC8gMikgKiAyNTYpOw0KLSAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPT0gZW5kKSB7DQotICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fV2VpZ2h0c1swXSA9IChTRFBfVGFibGVbMjU2ICsgd2VpZ2h0XSArIFNEUF9UYWJsZVt3ZWlnaHRdICsgU0RQX1RhYmxlWzI1NiAtIHdlaWdodF0gKyBTRFBfVGFibGVbNTEyIC0gd2VpZ2h0XSkgPDwgODsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoc3RhcnQgPT0gcGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0ICYmIChwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgPT0gcGl4ZWxfd2VpZ2h0cy5tX1NyY0VuZCB8fA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPT0gcGl4ZWxfd2VpZ2h0cy5tX1NyY0VuZCkgJiYgc3RhcnQgPCBlbmQpIHx8IChzdGFydCA8IHBpeGVsX3dlaWdodHMubV9TcmNTdGFydCAmJiBwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgPT0gcGl4ZWxfd2VpZ2h0cy5tX1NyY0VuZCAmJiBlbmQgPT0gcGl4ZWxfd2VpZ2h0cy5tX1NyY0VuZCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydCA8IHBpeGVsX3dlaWdodHMubV9TcmNTdGFydCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9XZWlnaHRzWzBdID0gU0RQX1RhYmxlWzI1NiArIHdlaWdodF0gPDwgODsNCi0gICAgICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fV2VpZ2h0c1sxXSA9IChTRFBfVGFibGVbd2VpZ2h0XSArIFNEUF9UYWJsZVsyNTYgLSB3ZWlnaHRdICsgU0RQX1RhYmxlWzUxMiAtIHdlaWdodF0pIDw8IDg7DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgPT0gcGl4ZWxfd2VpZ2h0cy5tX1NyY0VuZCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fV2VpZ2h0c1swXSA9IChTRFBfVGFibGVbMjU2ICsgd2VpZ2h0XSArIFNEUF9UYWJsZVt3ZWlnaHRdICsgU0RQX1RhYmxlWzI1NiAtIHdlaWdodF0pIDw8IDg7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9XZWlnaHRzWzFdID0gU0RQX1RhYmxlWzUxMiAtIHdlaWdodF0gPDwgODsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fV2VpZ2h0c1swXSA9IChTRFBfVGFibGVbMjU2ICsgd2VpZ2h0XSArIFNEUF9UYWJsZVt3ZWlnaHRdKSA8PCA4Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fV2VpZ2h0c1sxXSA9IChTRFBfVGFibGVbMjU2IC0gd2VpZ2h0XSArIFNEUF9UYWJsZVs1MTIgLSB3ZWlnaHRdKSA8PCA4Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGlmIChwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgPT0gcGl4ZWxfd2VpZ2h0cy5tX1NyY0VuZCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9TcmNFbmQgPSBlbmQ7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPCBwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgPSBzdGFydDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydCA9PSBwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgJiYNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA8IHBpeGVsX3dlaWdodHMubV9TcmNFbmQgJiYNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fU3JjRW5kIDwgZW5kKSB7DQotICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fV2VpZ2h0c1swXSA9IChTRFBfVGFibGVbMjU2ICsgd2VpZ2h0XSArIFNEUF9UYWJsZVt3ZWlnaHRdKSA8PCA4Ow0KLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1dlaWdodHNbMV0gPSBTRFBfVGFibGVbMjU2IC0gd2VpZ2h0XSA8PCA4Ow0KLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1dlaWdodHNbMl0gPSBTRFBfVGFibGVbNTEyIC0gd2VpZ2h0XSA8PCA4Ow0KLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1NyY0VuZCA9IGVuZDsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydCA8IHBpeGVsX3dlaWdodHMubV9TcmNTdGFydCAmJg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9TcmNTdGFydCA8IHBpeGVsX3dlaWdodHMubV9TcmNFbmQgJiYNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fU3JjRW5kID09IGVuZCkgew0KLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1dlaWdodHNbMF0gPSBTRFBfVGFibGVbMjU2ICsgd2VpZ2h0XSA8PCA4Ow0KLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1dlaWdodHNbMV0gPSBTRFBfVGFibGVbd2VpZ2h0XSA8PCA4Ow0KLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1dlaWdodHNbMl0gPSAoU0RQX1RhYmxlWzI1NiAtIHdlaWdodF0gKyBTRFBfVGFibGVbNTEyIC0gd2VpZ2h0XSkgPDwgODsNCi0gICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9TcmNTdGFydCA9IHN0YXJ0Ow0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1dlaWdodHNbMF0gPSBTRFBfVGFibGVbMjU2ICsgd2VpZ2h0XSA8PCA4Ow0KLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1dlaWdodHNbMV0gPSBTRFBfVGFibGVbd2VpZ2h0XSA8PCA4Ow0KLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1dlaWdodHNbMl0gPSBTRFBfVGFibGVbMjU2IC0gd2VpZ2h0XSA8PCA4Ow0KLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1dlaWdodHNbM10gPSBTRFBfVGFibGVbNTEyIC0gd2VpZ2h0XSA8PCA4Ow0KLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0ID0gc3RhcnQ7DQotICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fU3JjRW5kID0gZW5kOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0ID0gcGl4ZWxfd2VpZ2h0cy5tX1NyY0VuZCA9IChpbnQpRlhTWVNfZmxvb3IoKEZYX0ZMT0FUKXNyY19wb3MpOw0KLSAgICAgICAgICAgICAgICBpZiAocGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0IDwgc3JjX21pbikgew0KLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0ID0gc3JjX21pbjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAocGl4ZWxfd2VpZ2h0cy5tX1NyY0VuZCA+PSBzcmNfbWF4KSB7DQotICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fU3JjRW5kID0gc3JjX21heCAtIDE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1dlaWdodHNbMF0gPSA2NTUzNjsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgZm9yIChpbnQgZGVzdF9waXhlbCA9IGRlc3RfbWluOyBkZXN0X3BpeGVsIDwgZGVzdF9tYXg7IGRlc3RfcGl4ZWwgKyspIHsNCi0gICAgICAgIFBpeGVsV2VpZ2h0JiBwaXhlbF93ZWlnaHRzID0gKkdldFBpeGVsV2VpZ2h0KGRlc3RfcGl4ZWwpOw0KLSAgICAgICAgZG91YmxlIHNyY19zdGFydCA9IGRlc3RfcGl4ZWwgKiBzY2FsZSArIGJhc2U7DQotICAgICAgICBkb3VibGUgc3JjX2VuZCA9IHNyY19zdGFydCArIHNjYWxlOw0KLSAgICAgICAgaW50IHN0YXJ0X2ksIGVuZF9pOw0KLSAgICAgICAgaWYgKHNyY19zdGFydCA8IHNyY19lbmQpIHsNCi0gICAgICAgICAgICBzdGFydF9pID0gKGludClGWFNZU19mbG9vcigoRlhfRkxPQVQpc3JjX3N0YXJ0KTsNCi0gICAgICAgICAgICBlbmRfaSA9IChpbnQpRlhTWVNfY2VpbCgoRlhfRkxPQVQpc3JjX2VuZCk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHN0YXJ0X2kgPSAoaW50KUZYU1lTX2Zsb29yKChGWF9GTE9BVClzcmNfZW5kKTsNCi0gICAgICAgICAgICBlbmRfaSA9IChpbnQpRlhTWVNfY2VpbCgoRlhfRkxPQVQpc3JjX3N0YXJ0KTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChzdGFydF9pIDwgc3JjX21pbikgew0KLSAgICAgICAgICAgIHN0YXJ0X2kgPSBzcmNfbWluOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGVuZF9pID49IHNyY19tYXgpIHsNCi0gICAgICAgICAgICBlbmRfaSA9IHNyY19tYXggLSAxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHN0YXJ0X2kgPiBlbmRfaSkgew0KLSAgICAgICAgICAgIGlmIChzdGFydF9pID49IHNyY19tYXgpIHsNCi0gICAgICAgICAgICAgICAgc3RhcnRfaSA9IHNyY19tYXggLSAxOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgPSBzdGFydF9pOw0KLSAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9TcmNFbmQgPSBzdGFydF9pOw0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0ID0gc3RhcnRfaTsNCi0gICAgICAgIHBpeGVsX3dlaWdodHMubV9TcmNFbmQgPSBlbmRfaTsNCi0gICAgICAgIGZvciAoaW50IGogPSBzdGFydF9pOyBqIDw9IGVuZF9pOyBqICsrKSB7DQotICAgICAgICAgICAgZG91YmxlIGRlc3Rfc3RhcnQgPSBGWFNZU19EaXYoKEZYX0ZMT0FUKShqKSAtIGJhc2UsIHNjYWxlKTsNCi0gICAgICAgICAgICBkb3VibGUgZGVzdF9lbmQgPSBGWFNZU19EaXYoKEZYX0ZMT0FUKShqICsgMSkgLSBiYXNlLCBzY2FsZSk7DQotICAgICAgICAgICAgaWYgKGRlc3Rfc3RhcnQgPiBkZXN0X2VuZCkgew0KLSAgICAgICAgICAgICAgICBkb3VibGUgdGVtcCA9IGRlc3Rfc3RhcnQ7DQotICAgICAgICAgICAgICAgIGRlc3Rfc3RhcnQgPSBkZXN0X2VuZDsNCi0gICAgICAgICAgICAgICAgZGVzdF9lbmQgPSB0ZW1wOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBkb3VibGUgYXJlYV9zdGFydCA9IGRlc3Rfc3RhcnQgPiAoRlhfRkxPQVQpKGRlc3RfcGl4ZWwpID8gZGVzdF9zdGFydCA6IChGWF9GTE9BVCkoZGVzdF9waXhlbCk7DQotICAgICAgICAgICAgZG91YmxlIGFyZWFfZW5kID0gZGVzdF9lbmQgPiAoRlhfRkxPQVQpKGRlc3RfcGl4ZWwgKyAxKSA/IChGWF9GTE9BVCkoZGVzdF9waXhlbCArIDEpIDogZGVzdF9lbmQ7DQotICAgICAgICAgICAgZG91YmxlIHdlaWdodCA9IGFyZWFfc3RhcnQgPj0gYXJlYV9lbmQgPyAwLjBmIDogYXJlYV9lbmQgLSBhcmVhX3N0YXJ0Ow0KLSAgICAgICAgICAgIGlmICh3ZWlnaHQgPT0gMCAmJiBqID09IGVuZF9pKSB7DQotICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9TcmNFbmQgLS07DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fV2VpZ2h0c1tqIC0gc3RhcnRfaV0gPSBGWFNZU19yb3VuZCgoRlhfRkxPQVQpKHdlaWdodCAqIDY1NTM2KSk7DQotICAgICAgICB9DQotICAgIH0NCi19DQotQ1N0cmV0Y2hFbmdpbmU6OkNTdHJldGNoRW5naW5lKElGWF9TY2FubGluZUNvbXBvc2VyKiBwRGVzdEJpdG1hcCwgRlhESUJfRm9ybWF0IGRlc3RfZm9ybWF0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0LCBjb25zdCBGWF9SRUNUJiBjbGlwX3JlY3QsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBmbGFncykNCi17DQotICAgIG1fU3RhdGUgPSAwOw0KLSAgICBtX0Rlc3RGb3JtYXQgPSBkZXN0X2Zvcm1hdDsNCi0gICAgbV9EZXN0QnBwID0gZGVzdF9mb3JtYXQgJiAweGZmOw0KLSAgICBtX1NyY0JwcCA9IHBTcmNCaXRtYXAtPkdldEZvcm1hdCgpICYgMHhmZjsNCi0gICAgbV9iSGFzQWxwaGEgPSBwU3JjQml0bWFwLT5HZXRGb3JtYXQoKSAmIDB4MjAwOw0KLSAgICBtX3BTcmNQYWxldHRlID0gcFNyY0JpdG1hcC0+R2V0UGFsZXR0ZSgpOw0KLSAgICBtX3BEZXN0Qml0bWFwID0gcERlc3RCaXRtYXA7DQotICAgIG1fRGVzdFdpZHRoID0gZGVzdF93aWR0aDsNCi0gICAgbV9EZXN0SGVpZ2h0ID0gZGVzdF9oZWlnaHQ7DQotICAgIG1fcEludGVyQnVmID0gTlVMTDsNCi0gICAgbV9wRXh0cmFBbHBoYUJ1ZiA9IE5VTEw7DQotICAgIG1fcERlc3RNYXNrU2NhbmxpbmUgPSBOVUxMOw0KLSAgICBtX0Rlc3RDbGlwID0gY2xpcF9yZWN0Ow0KLSAgICBGWF9EV09SRCBzaXplID0gY2xpcF9yZWN0LldpZHRoKCk7DQotICAgIGlmIChzaXplICYmIG1fRGVzdEJwcCA+IChpbnQpKElOVF9NQVggLyBzaXplKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHNpemUgKj0gbV9EZXN0QnBwOw0KLSAgICBpZiAoc2l6ZSA+IElOVF9NQVggLSAzMSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHNpemUgKz0gMzE7DQotICAgIHNpemUgPSBzaXplIC8gMzIgKiA0Ow0KLSAgICBtX3BEZXN0U2NhbmxpbmUgPSBGWF9BbGxvY05MKEZYX0JZVEUsIHNpemUpOw0KLSAgICBpZiAobV9wRGVzdFNjYW5saW5lID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWFNZU19tZW1zZXQzMihtX3BEZXN0U2NhbmxpbmUsIDAsIHNpemVvZihGWF9CWVRFKSAqIHNpemUpOw0KLSAgICBpZiAoZGVzdF9mb3JtYXQgPT0gRlhESUJfUmdiMzIpIHsNCi0gICAgICAgIEZYU1lTX21lbXNldDgobV9wRGVzdFNjYW5saW5lLCAyNTUsIHNpemUpOw0KLSAgICB9DQotICAgIG1fSW50ZXJQaXRjaCA9IChtX0Rlc3RDbGlwLldpZHRoKCkgKiBtX0Rlc3RCcHAgKyAzMSkgLyAzMiAqIDQ7DQotICAgIG1fRXh0cmFNYXNrUGl0Y2ggPSAobV9EZXN0Q2xpcC5XaWR0aCgpICogOCArIDMxKSAvIDMyICogNDsNCi0gICAgbV9wSW50ZXJCdWYgPSBOVUxMOw0KLSAgICBtX3BTb3VyY2UgPSBwU3JjQml0bWFwOw0KLSAgICBtX1NyY1dpZHRoID0gcFNyY0JpdG1hcC0+R2V0V2lkdGgoKTsNCi0gICAgbV9TcmNIZWlnaHQgPSBwU3JjQml0bWFwLT5HZXRIZWlnaHQoKTsNCi0gICAgbV9TcmNQaXRjaCA9IChtX1NyY1dpZHRoICogbV9TcmNCcHAgKyAzMSkgLyAzMiAqIDQ7DQotICAgIGlmICgoZmxhZ3MgJiBGWERJQl9OT1NNT09USCkgPT0gMCkgew0KLSAgICAgICAgRlhfQk9PTCBiSW50ZXJwb2wgPSBmbGFncyAmIEZYRElCX0lOVEVSUE9MIHx8IGZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTDsNCi0gICAgICAgIGlmICghYkludGVycG9sICYmIEZYU1lTX2FicyhkZXN0X3dpZHRoKSAhPSAwICYmIEZYU1lTX2FicyhkZXN0X2hlaWdodCkgPCBtX1NyY1dpZHRoICogbV9TcmNIZWlnaHQgKiA4IC8gRlhTWVNfYWJzKGRlc3Rfd2lkdGgpKSB7DQotICAgICAgICAgICAgZmxhZ3MgPSBGWERJQl9JTlRFUlBPTDsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fRmxhZ3MgPSBmbGFnczsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1fRmxhZ3MgPSBGWERJQl9OT1NNT09USDsNCi0gICAgICAgIGlmIChmbGFncyAmIEZYRElCX0RPV05TQU1QTEUpIHsNCi0gICAgICAgICAgICBtX0ZsYWdzIHw9IEZYRElCX0RPV05TQU1QTEU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgZG91YmxlIHNjYWxlX3ggPSBGWFNZU19EaXYoKEZYX0ZMT0FUKShtX1NyY1dpZHRoKSwgKEZYX0ZMT0FUKShtX0Rlc3RXaWR0aCkpOw0KLSAgICBkb3VibGUgc2NhbGVfeSA9IEZYU1lTX0RpdigoRlhfRkxPQVQpKG1fU3JjSGVpZ2h0KSwgKEZYX0ZMT0FUKShtX0Rlc3RIZWlnaHQpKTsNCi0gICAgZG91YmxlIGJhc2VfeCA9IG1fRGVzdFdpZHRoID4gMCA/IDAuMGYgOiAoRlhfRkxPQVQpKG1fRGVzdFdpZHRoKTsNCi0gICAgZG91YmxlIGJhc2VfeSA9IG1fRGVzdEhlaWdodCA+IDAgPyAwLjBmIDogKEZYX0ZMT0FUKShtX0Rlc3RIZWlnaHQpOw0KLSAgICBkb3VibGUgc3JjX2xlZnQgPSBGWFNZU19NdWwoc2NhbGVfeCwgKEZYX0ZMT0FUKShjbGlwX3JlY3QubGVmdCkgKyBiYXNlX3gpOw0KLSAgICBkb3VibGUgc3JjX3JpZ2h0ID0gRlhTWVNfTXVsKHNjYWxlX3gsIChGWF9GTE9BVCkoY2xpcF9yZWN0LnJpZ2h0KSArIGJhc2VfeCk7DQotICAgIGRvdWJsZSBzcmNfdG9wID0gRlhTWVNfTXVsKHNjYWxlX3ksIChGWF9GTE9BVCkoY2xpcF9yZWN0LnRvcCkgKyBiYXNlX3kpOw0KLSAgICBkb3VibGUgc3JjX2JvdHRvbSA9IEZYU1lTX011bChzY2FsZV95LCAoRlhfRkxPQVQpKGNsaXBfcmVjdC5ib3R0b20pICsgYmFzZV95KTsNCi0gICAgaWYgKHNyY19sZWZ0ID4gc3JjX3JpZ2h0KSB7DQotICAgICAgICBkb3VibGUgdGVtcCA9IHNyY19sZWZ0Ow0KLSAgICAgICAgc3JjX2xlZnQgPSBzcmNfcmlnaHQ7DQotICAgICAgICBzcmNfcmlnaHQgPSB0ZW1wOw0KLSAgICB9DQotICAgIGlmIChzcmNfdG9wID4gc3JjX2JvdHRvbSkgew0KLSAgICAgICAgZG91YmxlIHRlbXAgPSBzcmNfdG9wOw0KLSAgICAgICAgc3JjX3RvcCA9IHNyY19ib3R0b207DQotICAgICAgICBzcmNfYm90dG9tID0gdGVtcDsNCi0gICAgfQ0KLSAgICBtX1NyY0NsaXAubGVmdCA9IChpbnQpRlhTWVNfZmxvb3IoKEZYX0ZMT0FUKXNyY19sZWZ0KTsNCi0gICAgbV9TcmNDbGlwLnJpZ2h0ID0gKGludClGWFNZU19jZWlsKChGWF9GTE9BVClzcmNfcmlnaHQpOw0KLSAgICBtX1NyY0NsaXAudG9wID0gKGludClGWFNZU19mbG9vcigoRlhfRkxPQVQpc3JjX3RvcCk7DQotICAgIG1fU3JjQ2xpcC5ib3R0b20gPSAoaW50KUZYU1lTX2NlaWwoKEZYX0ZMT0FUKXNyY19ib3R0b20pOw0KLSAgICBGWF9SRUNUIHNyY19yZWN0KDAsIDAsIG1fU3JjV2lkdGgsIG1fU3JjSGVpZ2h0KTsNCi0gICAgbV9TcmNDbGlwLkludGVyc2VjdChzcmNfcmVjdCk7DQotICAgIGlmIChtX1NyY0JwcCA9PSAxKSB7DQotICAgICAgICBpZiAobV9EZXN0QnBwID09IDgpIHsNCi0gICAgICAgICAgICBtX1RyYW5zTWV0aG9kID0gMTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbV9UcmFuc01ldGhvZCA9IDI7DQotICAgICAgICB9DQotICAgIH0gZWxzZSBpZiAobV9TcmNCcHAgPT0gOCkgew0KLSAgICAgICAgaWYgKG1fRGVzdEJwcCA9PSA4KSB7DQotICAgICAgICAgICAgaWYgKCFtX2JIYXNBbHBoYSkgew0KLSAgICAgICAgICAgICAgICBtX1RyYW5zTWV0aG9kID0gMzsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBtX1RyYW5zTWV0aG9kID0gNDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlmICghbV9iSGFzQWxwaGEpIHsNCi0gICAgICAgICAgICAgICAgbV9UcmFuc01ldGhvZCA9IDU7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgbV9UcmFuc01ldGhvZCA9IDY7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYgKCFtX2JIYXNBbHBoYSkgew0KLSAgICAgICAgICAgIG1fVHJhbnNNZXRob2QgPSA3Ow0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBtX1RyYW5zTWV0aG9kID0gODsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1GWF9CT09MIENTdHJldGNoRW5naW5lOjpDb250aW51ZShJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIHdoaWxlIChtX1N0YXRlID09IDEpIHsNCi0gICAgICAgIGlmIChDb250aW51ZVN0cmV0Y2hIb3J6KHBQYXVzZSkpIHsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fU3RhdGUgPSAyOw0KLSAgICAgICAgU3RyZXRjaFZlcnQoKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUNTdHJldGNoRW5naW5lOjp+Q1N0cmV0Y2hFbmdpbmUoKQ0KLXsNCi0gICAgaWYgKG1fcERlc3RTY2FubGluZSkgew0KLSAgICAgICAgRlhfRnJlZShtX3BEZXN0U2NhbmxpbmUpOw0KLSAgICB9DQotICAgIGlmIChtX3BJbnRlckJ1Zikgew0KLSAgICAgICAgRlhfRnJlZShtX3BJbnRlckJ1Zik7DQotICAgIH0NCi0gICAgaWYgKG1fcEV4dHJhQWxwaGFCdWYpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wRXh0cmFBbHBoYUJ1Zik7DQotICAgIH0NCi0gICAgaWYgKG1fcERlc3RNYXNrU2NhbmxpbmUpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wRGVzdE1hc2tTY2FubGluZSk7DQotICAgIH0NCi19DQotRlhfQk9PTCBDU3RyZXRjaEVuZ2luZTo6U3RhcnRTdHJldGNoSG9yeigpDQotew0KLSAgICBpZiAobV9EZXN0V2lkdGggPT0gMCB8fCBtX3BEZXN0U2NhbmxpbmUgPT0gTlVMTCB8fCBtX1NyY0NsaXAuSGVpZ2h0KCkgPiAoaW50KSgoMVUgPDwgMjkpIC8gbV9JbnRlclBpdGNoKSB8fCBtX1NyY0NsaXAuSGVpZ2h0KCkgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotI2lmbmRlZiBfRlBERkFQSV9NSU5JXw0KLSAgICBtX3BJbnRlckJ1ZiA9IEZYX0FsbG9jTkwodW5zaWduZWQgY2hhciwgbV9TcmNDbGlwLkhlaWdodCgpICogbV9JbnRlclBpdGNoKTsNCi0jZWxzZQ0KLSAgICBtX3BJbnRlckJ1ZiA9IEZYX0FsbG9jKHVuc2lnbmVkIGNoYXIsIG1fU3JjQ2xpcC5IZWlnaHQoKSAqIG1fSW50ZXJQaXRjaCk7DQotI2VuZGlmDQotICAgIGlmIChtX3BJbnRlckJ1ZiA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKG1fcFNvdXJjZSAmJiBtX2JIYXNBbHBoYSAmJiBtX3BTb3VyY2UtPm1fcEFscGhhTWFzaykgew0KLSAgICAgICAgbV9wRXh0cmFBbHBoYUJ1ZiA9IEZYX0FsbG9jKHVuc2lnbmVkIGNoYXIsIG1fU3JjQ2xpcC5IZWlnaHQoKSAqIG1fRXh0cmFNYXNrUGl0Y2gpOw0KLSAgICAgICAgaWYgKCFtX3BFeHRyYUFscGhhQnVmKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfRFdPUkQgc2l6ZSA9IChtX0Rlc3RDbGlwLldpZHRoKCkgKiA4ICsgMzEpIC8gMzIgKiA0Ow0KLSAgICAgICAgbV9wRGVzdE1hc2tTY2FubGluZSA9IEZYX0FsbG9jTkwodW5zaWduZWQgY2hhciwgc2l6ZSk7DQotICAgICAgICBpZiAoIW1fcERlc3RNYXNrU2NhbmxpbmUpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9XZWlnaHRUYWJsZS5DYWxjKG1fRGVzdFdpZHRoLCBtX0Rlc3RDbGlwLmxlZnQsIG1fRGVzdENsaXAucmlnaHQsIG1fU3JjV2lkdGgsIG1fU3JjQ2xpcC5sZWZ0LCBtX1NyY0NsaXAucmlnaHQsIG1fRmxhZ3MpOw0KLSAgICBpZiAobV9XZWlnaHRUYWJsZS5tX3BXZWlnaHRUYWJsZXMgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fQ3VyUm93ID0gbV9TcmNDbGlwLnRvcDsNCi0gICAgbV9TdGF0ZSA9IDE7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi0jZGVmaW5lIEZYX1NUUkVDSF9QQVVTRV9ST1dTCTEwDQotRlhfQk9PTCBDU3RyZXRjaEVuZ2luZTo6Q29udGludWVTdHJldGNoSG9yeihJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIGlmICghbV9EZXN0V2lkdGgpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGlmIChtX3BTb3VyY2UtPlNraXBUb1NjYW5saW5lKG1fQ3VyUm93LCBwUGF1c2UpKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBpbnQgQnBwID0gbV9EZXN0QnBwIC8gODsNCi0gICAgaW50IHJvd3NfdG9fZ28gPSBGWF9TVFJFQ0hfUEFVU0VfUk9XUzsNCi0gICAgZm9yICg7IG1fQ3VyUm93IDwgbV9TcmNDbGlwLmJvdHRvbTsgbV9DdXJSb3cgKyspIHsNCi0gICAgICAgIGlmIChyb3dzX3RvX2dvID09IDApIHsNCi0gICAgICAgICAgICBpZiAocFBhdXNlICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICByb3dzX3RvX2dvID0gRlhfU1RSRUNIX1BBVVNFX1JPV1M7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IG1fcFNvdXJjZS0+R2V0U2NhbmxpbmUobV9DdXJSb3cpOw0KLSAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IG1fcEludGVyQnVmICsgKG1fQ3VyUm93IC0gbV9TcmNDbGlwLnRvcCkgKiBtX0ludGVyUGl0Y2g7DQotICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuX21hc2sgPSBOVUxMOw0KLSAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2Nhbl9tYXNrID0gTlVMTDsNCi0gICAgICAgIGlmIChtX3BFeHRyYUFscGhhQnVmKSB7DQotICAgICAgICAgICAgc3JjX3NjYW5fbWFzayA9IG1fcFNvdXJjZS0+bV9wQWxwaGFNYXNrLT5HZXRTY2FubGluZShtX0N1clJvdyk7DQotICAgICAgICAgICAgZGVzdF9zY2FuX21hc2sgPSBtX3BFeHRyYUFscGhhQnVmICsgKG1fQ3VyUm93IC0gbV9TcmNDbGlwLnRvcCkgKiBtX0V4dHJhTWFza1BpdGNoOw0KLSAgICAgICAgfQ0KLSAgICAgICAgc3dpdGNoIChtX1RyYW5zTWV0aG9kKSB7DQotICAgICAgICAgICAgY2FzZSAxOg0KLSAgICAgICAgICAgIGNhc2UgMjogew0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gbV9EZXN0Q2xpcC5sZWZ0OyBjb2wgPCBtX0Rlc3RDbGlwLnJpZ2h0OyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBQaXhlbFdlaWdodCogcFBpeGVsV2VpZ2h0cyA9IG1fV2VpZ2h0VGFibGUuR2V0UGl4ZWxXZWlnaHQoY29sKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF9hID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNTdGFydDsgaiA8PSBwUGl4ZWxXZWlnaHRzLT5tX1NyY0VuZDsgaiArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxfd2VpZ2h0ID0gcFBpeGVsV2VpZ2h0cy0+bV9XZWlnaHRzW2ogLSBwUGl4ZWxXZWlnaHRzLT5tX1NyY1N0YXJ0XTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19zY2FuW2ogLyA4XSAmICgxIDw8ICg3IC0gaiAlIDgpKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9hICs9IHBpeGVsX3dlaWdodCAqIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9GbGFncyAmIEZYRElCX0JJQ1VCSUNfSU5URVJQT0wpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9hID0gZGVzdF9hIDwgMCA/IDAgOiBkZXN0X2EgPiAxNjcxMTY4MCA/IDE2NzExNjgwIDogZGVzdF9hOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAoRlhfQllURSkoZGVzdF9hID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgY2FzZSAzOiB7DQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSBtX0Rlc3RDbGlwLmxlZnQ7IGNvbCA8IG1fRGVzdENsaXAucmlnaHQ7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsV2VpZ2h0KiBwUGl4ZWxXZWlnaHRzID0gbV9XZWlnaHRUYWJsZS5HZXRQaXhlbFdlaWdodChjb2wpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X2EgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSBwUGl4ZWxXZWlnaHRzLT5tX1NyY1N0YXJ0OyBqIDw9IHBQaXhlbFdlaWdodHMtPm1fU3JjRW5kOyBqICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwaXhlbF93ZWlnaHQgPSBwUGl4ZWxXZWlnaHRzLT5tX1dlaWdodHNbaiAtIHBQaXhlbFdlaWdodHMtPm1fU3JjU3RhcnRdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2EgKz0gcGl4ZWxfd2VpZ2h0ICogc3JjX3NjYW5bal07DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2EgPSBkZXN0X2EgPCAwID8gMCA6IGRlc3RfYSA+IDE2NzExNjgwID8gMTY3MTE2ODAgOiBkZXN0X2E7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IChGWF9CWVRFKShkZXN0X2EgPj4gMTYpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjYXNlIDQ6IHsNCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IG1fRGVzdENsaXAubGVmdDsgY29sIDwgbV9EZXN0Q2xpcC5yaWdodDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWxXZWlnaHQqIHBQaXhlbFdlaWdodHMgPSBtX1dlaWdodFRhYmxlLkdldFBpeGVsV2VpZ2h0KGNvbCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RfYSA9IDAsIGRlc3RfciA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IHBQaXhlbFdlaWdodHMtPm1fU3JjU3RhcnQ7IGogPD0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNFbmQ7IGogKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBpeGVsX3dlaWdodCA9IHBQaXhlbFdlaWdodHMtPm1fV2VpZ2h0c1tqIC0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNTdGFydF07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodCA9IHBpeGVsX3dlaWdodCAqIHNyY19zY2FuX21hc2tbal0gLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfciArPSBwaXhlbF93ZWlnaHQgKiBzcmNfc2NhbltqXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9hICs9IHBpeGVsX3dlaWdodDsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fRmxhZ3MgJiBGWERJQl9CSUNVQklDX0lOVEVSUE9MKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfciA9IGRlc3RfciA8IDAgPyAwIDogZGVzdF9yID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfcjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9hID0gZGVzdF9hIDwgMCA/IDAgOiBkZXN0X2EgPiA2NTUzNiA/IDY1NTM2IDogZGVzdF9hOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAoRlhfQllURSkoZGVzdF9yID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuX21hc2srKyA9IChGWF9CWVRFKSgoZGVzdF9hICogMjU1KSA+PiAxNik7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNhc2UgNTogew0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gbV9EZXN0Q2xpcC5sZWZ0OyBjb2wgPCBtX0Rlc3RDbGlwLnJpZ2h0OyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBQaXhlbFdlaWdodCogcFBpeGVsV2VpZ2h0cyA9IG1fV2VpZ2h0VGFibGUuR2V0UGl4ZWxXZWlnaHQoY29sKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF9yX3kgPSAwLCBkZXN0X2dfbSA9IDAsIGRlc3RfYl9jID0gMCwgZGVzdF9rID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNTdGFydDsgaiA8PSBwUGl4ZWxXZWlnaHRzLT5tX1NyY0VuZDsgaiArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxfd2VpZ2h0ID0gcFBpeGVsV2VpZ2h0cy0+bV9XZWlnaHRzW2ogLSBwUGl4ZWxXZWlnaHRzLT5tX1NyY1N0YXJ0XTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhcmdiX2NteWsgPSBtX3BTcmNQYWxldHRlW3NyY19zY2FuW2pdXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fRGVzdEZvcm1hdCA9PSBGWERJQl9SZ2IpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfcl95ICs9IHBpeGVsX3dlaWdodCAqIChGWF9CWVRFKShhcmdiX2NteWsgPj4gMTYpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9nX20gKz0gcGl4ZWxfd2VpZ2h0ICogKEZYX0JZVEUpKGFyZ2JfY215ayA+PiA4KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYl9jICs9IHBpeGVsX3dlaWdodCAqIChGWF9CWVRFKWFyZ2JfY215azsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYl9jICs9IHBpeGVsX3dlaWdodCAqIChGWF9CWVRFKShhcmdiX2NteWsgPj4gMjQpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9nX20gKz0gcGl4ZWxfd2VpZ2h0ICogKEZYX0JZVEUpKGFyZ2JfY215ayA+PiAxNik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3JfeSArPSBwaXhlbF93ZWlnaHQgKiAoRlhfQllURSkoYXJnYl9jbXlrID4+IDgpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3JfeSA9IGRlc3Rfcl95IDwgMCA/IDAgOiBkZXN0X3JfeSA+IDE2NzExNjgwID8gMTY3MTE2ODAgOiBkZXN0X3JfeTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9nX20gPSBkZXN0X2dfbSA8IDAgPyAwIDogZGVzdF9nX20gPiAxNjcxMTY4MCA/IDE2NzExNjgwIDogZGVzdF9nX207DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYl9jID0gZGVzdF9iX2MgPCAwID8gMCA6IGRlc3RfYl9jID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfYl9jOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAoRlhfQllURSkoZGVzdF9iX2MgPj4gMTYpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IChGWF9CWVRFKShkZXN0X2dfbSA+PiAxNik7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKEZYX0JZVEUpKGRlc3Rfcl95ID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgY2FzZSA2OiB7DQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSBtX0Rlc3RDbGlwLmxlZnQ7IGNvbCA8IG1fRGVzdENsaXAucmlnaHQ7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsV2VpZ2h0KiBwUGl4ZWxXZWlnaHRzID0gbV9XZWlnaHRUYWJsZS5HZXRQaXhlbFdlaWdodChjb2wpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X2EgPSAwLCBkZXN0X3JfeSA9IDAsIGRlc3RfZ19tID0gMCwgZGVzdF9iX2MgPSAwLCBkZXN0X2sgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSBwUGl4ZWxXZWlnaHRzLT5tX1NyY1N0YXJ0OyBqIDw9IHBQaXhlbFdlaWdodHMtPm1fU3JjRW5kOyBqICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwaXhlbF93ZWlnaHQgPSBwUGl4ZWxXZWlnaHRzLT5tX1dlaWdodHNbaiAtIHBQaXhlbFdlaWdodHMtPm1fU3JjU3RhcnRdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHQgPSBwaXhlbF93ZWlnaHQgKiBzcmNfc2Nhbl9tYXNrW2pdIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFyZ2JfY215ayA9IG1fcFNyY1BhbGV0dGVbc3JjX3NjYW5bal1dOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9EZXN0Rm9ybWF0ID09IEZYRElCX1JnYmEpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfcl95ICs9IHBpeGVsX3dlaWdodCAqIChGWF9CWVRFKShhcmdiX2NteWsgPj4gMTYpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9nX20gKz0gcGl4ZWxfd2VpZ2h0ICogKEZYX0JZVEUpKGFyZ2JfY215ayA+PiA4KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYl9jICs9IHBpeGVsX3dlaWdodCAqIChGWF9CWVRFKWFyZ2JfY215azsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYl9jICs9IHBpeGVsX3dlaWdodCAqIChGWF9CWVRFKShhcmdiX2NteWsgPj4gMjQpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9nX20gKz0gcGl4ZWxfd2VpZ2h0ICogKEZYX0JZVEUpKGFyZ2JfY215ayA+PiAxNik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3JfeSArPSBwaXhlbF93ZWlnaHQgKiAoRlhfQllURSkoYXJnYl9jbXlrID4+IDgpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYSArPSBwaXhlbF93ZWlnaHQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2sgPSBkZXN0X2sgPCAwID8gMCA6IGRlc3RfayA+IDE2NzExNjgwID8gMTY3MTE2ODAgOiBkZXN0X2s7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYl9jID0gZGVzdF9iX2MgPCAwID8gMCA6IGRlc3RfYl9jID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfYl9jOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2dfbSA9IGRlc3RfZ19tIDwgMCA/IDAgOiBkZXN0X2dfbSA+IDE2NzExNjgwID8gMTY3MTE2ODAgOiBkZXN0X2dfbTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9yX3kgPSBkZXN0X3JfeSA8IDAgPyAwIDogZGVzdF9yX3kgPiAxNjcxMTY4MCA/IDE2NzExNjgwIDogZGVzdF9yX3k7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYSA9IGRlc3RfYSA8IDAgPyAwIDogZGVzdF9hID4gNjU1MzYgPyA2NTUzNiA6IGRlc3RfYTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKEZYX0JZVEUpKGRlc3RfYl9jID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAoRlhfQllURSkoZGVzdF9nX20gPj4gMTYpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IChGWF9CWVRFKShkZXN0X3JfeSA+PiAxNik7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2Nhbl9tYXNrKysgPSAoRlhfQllURSkoKGRlc3RfYSAqIDI1NSkgPj4gMTYpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjYXNlIDc6IHsNCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IG1fRGVzdENsaXAubGVmdDsgY29sIDwgbV9EZXN0Q2xpcC5yaWdodDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWxXZWlnaHQqIHBQaXhlbFdlaWdodHMgPSBtX1dlaWdodFRhYmxlLkdldFBpeGVsV2VpZ2h0KGNvbCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfcl95ID0gMCwgZGVzdF9nX20gPSAwLCBkZXN0X2JfYyA9IDAsIGRlc3RfayA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IHBQaXhlbFdlaWdodHMtPm1fU3JjU3RhcnQ7IGogPD0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNFbmQ7IGogKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBpeGVsX3dlaWdodCA9IHBQaXhlbFdlaWdodHMtPm1fV2VpZ2h0c1tqIC0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNTdGFydF07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3BpeGVsID0gc3JjX3NjYW4gKyBqICogQnBwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2JfYyArPSBwaXhlbF93ZWlnaHQgKiAoKnNyY19waXhlbCsrKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9nX20gKz0gcGl4ZWxfd2VpZ2h0ICogKCpzcmNfcGl4ZWwrKyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfcl95ICs9IHBpeGVsX3dlaWdodCAqICgqc3JjX3BpeGVsKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fRmxhZ3MgJiBGWERJQl9CSUNVQklDX0lOVEVSUE9MKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYl9jID0gZGVzdF9iX2MgPCAwID8gMCA6IGRlc3RfYl9jID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfYl9jOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2dfbSA9IGRlc3RfZ19tIDwgMCA/IDAgOiBkZXN0X2dfbSA+IDE2NzExNjgwID8gMTY3MTE2ODAgOiBkZXN0X2dfbTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9yX3kgPSBkZXN0X3JfeSA8IDAgPyAwIDogZGVzdF9yX3kgPiAxNjcxMTY4MCA/IDE2NzExNjgwIDogZGVzdF9yX3k7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IChGWF9CWVRFKSgoZGVzdF9iX2MpID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAoRlhfQllURSkoKGRlc3RfZ19tKSA+PiAxNik7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKEZYX0JZVEUpKChkZXN0X3JfeSkgPj4gMTYpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHAgLSAzOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjYXNlIDg6IHsNCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IG1fRGVzdENsaXAubGVmdDsgY29sIDwgbV9EZXN0Q2xpcC5yaWdodDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWxXZWlnaHQqIHBQaXhlbFdlaWdodHMgPSBtX1dlaWdodFRhYmxlLkdldFBpeGVsV2VpZ2h0KGNvbCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RfYSA9IDAsIGRlc3Rfcl95ID0gMCwgZGVzdF9nX20gPSAwLCBkZXN0X2JfYyA9IDAsIGRlc3RfayA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IHBQaXhlbFdlaWdodHMtPm1fU3JjU3RhcnQ7IGogPD0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNFbmQ7IGogKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBpeGVsX3dlaWdodCA9IHBQaXhlbFdlaWdodHMtPm1fV2VpZ2h0c1tqIC0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNTdGFydF07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3BpeGVsID0gc3JjX3NjYW4gKyBqICogQnBwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9EZXN0Rm9ybWF0ID09IEZYRElCX0FyZ2IpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodCA9IHBpeGVsX3dlaWdodCAqIHNyY19waXhlbFszXSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodCA9IHBpeGVsX3dlaWdodCAqIHNyY19zY2FuX21hc2tbal0gLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9iX2MgKz0gcGl4ZWxfd2VpZ2h0ICogKCpzcmNfcGl4ZWwrKyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfZ19tICs9IHBpeGVsX3dlaWdodCAqICgqc3JjX3BpeGVsKyspOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3JfeSArPSBwaXhlbF93ZWlnaHQgKiAoKnNyY19waXhlbCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYSArPSBwaXhlbF93ZWlnaHQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3JfeSA9IGRlc3Rfcl95IDwgMCA/IDAgOiBkZXN0X3JfeSA+IDE2NzExNjgwID8gMTY3MTE2ODAgOiBkZXN0X3JfeTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9nX20gPSBkZXN0X2dfbSA8IDAgPyAwIDogZGVzdF9nX20gPiAxNjcxMTY4MCA/IDE2NzExNjgwIDogZGVzdF9nX207DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYl9jID0gZGVzdF9iX2MgPCAwID8gMCA6IGRlc3RfYl9jID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfYl9jOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2EgPSBkZXN0X2EgPCAwID8gMCA6IGRlc3RfYSA+IDY1NTM2ID8gNjU1MzYgOiBkZXN0X2E7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IChGWF9CWVRFKSgoZGVzdF9iX2MpID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAoRlhfQllURSkoKGRlc3RfZ19tKSA+PiAxNik7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKEZYX0JZVEUpKChkZXN0X3JfeSkgPj4gMTYpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0Rlc3RGb3JtYXQgPT0gRlhESUJfQXJnYikgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gKEZYX0JZVEUpKChkZXN0X2EgKiAyNTUpID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3Rfc2Nhbl9tYXNrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW5fbWFzaysrID0gKEZYX0JZVEUpKChkZXN0X2EgKiAyNTUpID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcCAtIDM7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcm93c190b19nbyAtLTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLXZvaWQgQ1N0cmV0Y2hFbmdpbmU6OlN0cmV0Y2hWZXJ0KCkNCi17DQotICAgIGlmIChtX0Rlc3RIZWlnaHQgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENXZWlnaHRUYWJsZSB0YWJsZTsNCi0gICAgdGFibGUuQ2FsYyhtX0Rlc3RIZWlnaHQsIG1fRGVzdENsaXAudG9wLCBtX0Rlc3RDbGlwLmJvdHRvbSwgbV9TcmNIZWlnaHQsIG1fU3JjQ2xpcC50b3AsIG1fU3JjQ2xpcC5ib3R0b20sIG1fRmxhZ3MpOw0KLSAgICBpZiAodGFibGUubV9wV2VpZ2h0VGFibGVzID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpbnQgRGVzdEJwcCA9IG1fRGVzdEJwcCAvIDg7DQotICAgIGZvciAoaW50IHJvdyA9IG1fRGVzdENsaXAudG9wOyByb3cgPCBtX0Rlc3RDbGlwLmJvdHRvbTsgcm93ICsrKSB7DQotICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0X3NjYW4gPSBtX3BEZXN0U2NhbmxpbmU7DQotICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0X3NhY25fbWFzayA9IG1fcERlc3RNYXNrU2NhbmxpbmU7DQotICAgICAgICBQaXhlbFdlaWdodCogcFBpeGVsV2VpZ2h0cyA9IHRhYmxlLkdldFBpeGVsV2VpZ2h0KHJvdyk7DQotICAgICAgICBzd2l0Y2gobV9UcmFuc01ldGhvZCkgew0KLSAgICAgICAgICAgIGNhc2UgMToNCi0gICAgICAgICAgICBjYXNlIDI6DQotICAgICAgICAgICAgY2FzZSAzOiB7DQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSBtX0Rlc3RDbGlwLmxlZnQ7IGNvbCA8IG1fRGVzdENsaXAucmlnaHQ7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHNyY19zY2FuID0gbV9wSW50ZXJCdWYgKyAoY29sIC0gbV9EZXN0Q2xpcC5sZWZ0KSAqIERlc3RCcHA7DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RfYSA9IDA7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IHBQaXhlbFdlaWdodHMtPm1fU3JjU3RhcnQ7IGogPD0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNFbmQ7IGogKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBpeGVsX3dlaWdodCA9IHBQaXhlbFdlaWdodHMtPm1fV2VpZ2h0c1tqIC0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNTdGFydF07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYSArPSBwaXhlbF93ZWlnaHQgKiBzcmNfc2NhblsoaiAtIG1fU3JjQ2xpcC50b3ApICogbV9JbnRlclBpdGNoXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fRmxhZ3MgJiBGWERJQl9CSUNVQklDX0lOVEVSUE9MKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYSA9IGRlc3RfYSA8IDAgPyAwIDogZGVzdF9hID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfYTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9IChGWF9CWVRFKShkZXN0X2EgPj4gMTYpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBEZXN0QnBwOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjYXNlIDQ6IHsNCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IG1fRGVzdENsaXAubGVmdDsgY29sIDwgbV9EZXN0Q2xpcC5yaWdodDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogc3JjX3NjYW4gPSBtX3BJbnRlckJ1ZiArIChjb2wgLSBtX0Rlc3RDbGlwLmxlZnQpICogRGVzdEJwcDsNCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBzcmNfc2Nhbl9tYXNrID0gbV9wRXh0cmFBbHBoYUJ1ZiArIChjb2wgLSBtX0Rlc3RDbGlwLmxlZnQpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X2EgPSAwLCBkZXN0X2sgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSBwUGl4ZWxXZWlnaHRzLT5tX1NyY1N0YXJ0OyBqIDw9IHBQaXhlbFdlaWdodHMtPm1fU3JjRW5kOyBqICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwaXhlbF93ZWlnaHQgPSBwUGl4ZWxXZWlnaHRzLT5tX1dlaWdodHNbaiAtIHBQaXhlbFdlaWdodHMtPm1fU3JjU3RhcnRdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2sgKz0gcGl4ZWxfd2VpZ2h0ICogc3JjX3NjYW5bKGogLSBtX1NyY0NsaXAudG9wKSAqIG1fSW50ZXJQaXRjaF07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYSArPSBwaXhlbF93ZWlnaHQgKiBzcmNfc2Nhbl9tYXNrWyhqIC0gbV9TcmNDbGlwLnRvcCkgKiBtX0V4dHJhTWFza1BpdGNoXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fRmxhZ3MgJiBGWERJQl9CSUNVQklDX0lOVEVSUE9MKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfayA9IGRlc3RfayA8IDAgPyAwIDogZGVzdF9rID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfazsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9hID0gZGVzdF9hIDwgMCA/IDAgOiBkZXN0X2EgPiAxNjcxMTY4MCA/IDE2NzExNjgwIDogZGVzdF9hOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gKEZYX0JZVEUpKGRlc3RfayA+PiAxNik7DQotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IERlc3RCcHA7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2Fjbl9tYXNrKysgPSAoRlhfQllURSkoZGVzdF9hID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgY2FzZSA1Og0KLSAgICAgICAgICAgIGNhc2UgNzogew0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gbV9EZXN0Q2xpcC5sZWZ0OyBjb2wgPCBtX0Rlc3RDbGlwLnJpZ2h0OyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBzcmNfc2NhbiA9IG1fcEludGVyQnVmICsgKGNvbCAtIG1fRGVzdENsaXAubGVmdCkgKiBEZXN0QnBwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3JfeSA9IDAsIGRlc3RfZ19tID0gMCwgZGVzdF9iX2MgPSAwLCBkZXN0X2sgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSBwUGl4ZWxXZWlnaHRzLT5tX1NyY1N0YXJ0OyBqIDw9IHBQaXhlbFdlaWdodHMtPm1fU3JjRW5kOyBqICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwaXhlbF93ZWlnaHQgPSBwUGl4ZWxXZWlnaHRzLT5tX1dlaWdodHNbaiAtIHBQaXhlbFdlaWdodHMtPm1fU3JjU3RhcnRdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19waXhlbCA9IHNyY19zY2FuICsgKGogLSBtX1NyY0NsaXAudG9wKSAqIG1fSW50ZXJQaXRjaDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9iX2MgKz0gcGl4ZWxfd2VpZ2h0ICogKCpzcmNfcGl4ZWwrKyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfZ19tICs9IHBpeGVsX3dlaWdodCAqICgqc3JjX3BpeGVsKyspOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3JfeSArPSBwaXhlbF93ZWlnaHQgKiAoKnNyY19waXhlbCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3JfeSA9IGRlc3Rfcl95IDwgMCA/IDAgOiBkZXN0X3JfeSA+IDE2NzExNjgwID8gMTY3MTE2ODAgOiBkZXN0X3JfeTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9nX20gPSBkZXN0X2dfbSA8IDAgPyAwIDogZGVzdF9nX20gPiAxNjcxMTY4MCA/IDE2NzExNjgwIDogZGVzdF9nX207DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYl9jID0gZGVzdF9iX2MgPCAwID8gMCA6IGRlc3RfYl9jID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfYl9jOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSAoRlhfQllURSkoKGRlc3RfYl9jKSA+PiAxNik7DQotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gKEZYX0JZVEUpKChkZXN0X2dfbSkgPj4gMTYpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IChGWF9CWVRFKSgoZGVzdF9yX3kpID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gRGVzdEJwcDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgY2FzZSA2Og0KLSAgICAgICAgICAgIGNhc2UgODogew0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gbV9EZXN0Q2xpcC5sZWZ0OyBjb2wgPCBtX0Rlc3RDbGlwLnJpZ2h0OyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBzcmNfc2NhbiA9IG1fcEludGVyQnVmICsgKGNvbCAtIG1fRGVzdENsaXAubGVmdCkgKiBEZXN0QnBwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHNyY19zY2FuX21hc2sgPSBOVUxMOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0Rlc3RGb3JtYXQgIT0gRlhESUJfQXJnYikgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2Nhbl9tYXNrID0gbV9wRXh0cmFBbHBoYUJ1ZiArIChjb2wgLSBtX0Rlc3RDbGlwLmxlZnQpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF9hID0gMCwgZGVzdF9rID0gMCwgZGVzdF9yX3kgPSAwLCBkZXN0X2dfbSA9IDAsIGRlc3RfYl9jID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNTdGFydDsgaiA8PSBwUGl4ZWxXZWlnaHRzLT5tX1NyY0VuZDsgaiArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxfd2VpZ2h0ID0gcFBpeGVsV2VpZ2h0cy0+bV9XZWlnaHRzW2ogLSBwUGl4ZWxXZWlnaHRzLT5tX1NyY1N0YXJ0XTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfcGl4ZWwgPSBzcmNfc2NhbiArIChqIC0gbV9TcmNDbGlwLnRvcCkgKiBtX0ludGVyUGl0Y2g7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXNrX3YgPSAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfc2Nhbl9tYXNrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrX3YgPSBzcmNfc2Nhbl9tYXNrWyhqIC0gbV9TcmNDbGlwLnRvcCkgKiBtX0V4dHJhTWFza1BpdGNoXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2JfYyArPSBwaXhlbF93ZWlnaHQgKiAoKnNyY19waXhlbCsrKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9nX20gKz0gcGl4ZWxfd2VpZ2h0ICogKCpzcmNfcGl4ZWwrKyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfcl95ICs9IHBpeGVsX3dlaWdodCAqICgqc3JjX3BpeGVsKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fRGVzdEZvcm1hdCA9PSBGWERJQl9BcmdiKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2EgKz0gcGl4ZWxfd2VpZ2h0ICogKCooc3JjX3BpeGVsICsgMSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9hICs9IHBpeGVsX3dlaWdodCAqIG1hc2tfdjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9GbGFncyAmIEZYRElCX0JJQ1VCSUNfSU5URVJQT0wpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9yX3kgPSBkZXN0X3JfeSA8IDAgPyAwIDogZGVzdF9yX3kgPiAxNjcxMTY4MCA/IDE2NzExNjgwIDogZGVzdF9yX3k7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfZ19tID0gZGVzdF9nX20gPCAwID8gMCA6IGRlc3RfZ19tID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfZ19tOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2JfYyA9IGRlc3RfYl9jIDwgMCA/IDAgOiBkZXN0X2JfYyA+IDE2NzExNjgwID8gMTY3MTE2ODAgOiBkZXN0X2JfYzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9hID0gZGVzdF9hIDwgMCA/IDAgOiBkZXN0X2EgPiAxNjcxMTY4MCA/IDE2NzExNjgwIDogZGVzdF9hOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdF9hKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByID0gKChGWF9EV09SRClkZXN0X3JfeSkgKiAyNTUgLyBkZXN0X2E7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBnID0gKChGWF9EV09SRClkZXN0X2dfbSkgKiAyNTUgLyBkZXN0X2E7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiID0gKChGWF9EV09SRClkZXN0X2JfYykgKiAyNTUgLyBkZXN0X2E7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IGIgPiAyNTUgPyAyNTUgOiBiIDwgMCA/IDAgOiBiOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBnID4gMjU1ID8gMjU1IDogZyA8IDAgPyAwIDogZzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gciA+IDI1NSA/IDI1NSA6IHIgPCAwID8gMCA6IHI7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0Rlc3RGb3JtYXQgPT0gRlhESUJfQXJnYikgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bM10gPSAoRlhfQllURSkoKGRlc3RfYSkgPj4gMTYpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NhY25fbWFzayA9IChGWF9CWVRFKSgoZGVzdF9hKSA+PiAxNik7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBEZXN0QnBwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXN0X3NhY25fbWFzaykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NhY25fbWFzaysrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBtX3BEZXN0Qml0bWFwLT5Db21wb3NlU2NhbmxpbmUocm93IC0gbV9EZXN0Q2xpcC50b3AsIG1fcERlc3RTY2FubGluZSwgbV9wRGVzdE1hc2tTY2FubGluZSk7DQotICAgIH0NCi19DQotQ0ZYX0ltYWdlU3RyZXRjaGVyOjpDRlhfSW1hZ2VTdHJldGNoZXIoKQ0KLXsNCi0gICAgbV9wU2NhbmxpbmUgPSBOVUxMOw0KLSAgICBtX3BTdHJldGNoRW5naW5lID0gTlVMTDsNCi0gICAgbV9wTWFza1NjYW5saW5lID0gTlVMTDsNCi19DQotQ0ZYX0ltYWdlU3RyZXRjaGVyOjp+Q0ZYX0ltYWdlU3RyZXRjaGVyKCkNCi17DQotICAgIGlmIChtX3BTY2FubGluZSkgew0KLSAgICAgICAgRlhfRnJlZShtX3BTY2FubGluZSk7DQotICAgIH0NCi0gICAgaWYgKG1fcFN0cmV0Y2hFbmdpbmUpIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BTdHJldGNoRW5naW5lOw0KLSAgICB9DQotICAgIGlmIChtX3BNYXNrU2NhbmxpbmUpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wTWFza1NjYW5saW5lKTsNCi0gICAgfQ0KLX0NCi1GWERJQl9Gb3JtYXQgX0dldFN0cmV0Y2hlZEZvcm1hdChjb25zdCBDRlhfRElCU291cmNlKiBwU3JjKQ0KLXsNCi0gICAgRlhESUJfRm9ybWF0IGZvcm1hdCA9IHBTcmMtPkdldEZvcm1hdCgpOw0KLSAgICBpZiAoZm9ybWF0ID09IEZYRElCXzFicHBNYXNrKSB7DQotICAgICAgICBmb3JtYXQgPSBGWERJQl84YnBwTWFzazsNCi0gICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gRlhESUJfMWJwcFJnYikgew0KLSAgICAgICAgZm9ybWF0ID0gRlhESUJfOGJwcFJnYjsNCi0gICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gRlhESUJfOGJwcFJnYikgew0KLSAgICAgICAgaWYgKHBTcmMtPkdldFBhbGV0dGUoKSkgew0KLSAgICAgICAgICAgIGZvcm1hdCA9IEZYRElCX1JnYjsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gZm9ybWF0Ow0KLX0NCi1GWF9CT09MIENGWF9JbWFnZVN0cmV0Y2hlcjo6U3RhcnQoSUZYX1NjYW5saW5lQ29tcG9zZXIqIHBEZXN0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwU291cmNlLCBpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGWF9SRUNUJiByZWN0LCBGWF9EV09SRCBmbGFncykNCi17DQotICAgIG1fRGVzdEZvcm1hdCA9IF9HZXRTdHJldGNoZWRGb3JtYXQocFNvdXJjZSk7DQotICAgIG1fRGVzdEJQUCA9IG1fRGVzdEZvcm1hdCAmIDB4ZmY7DQotICAgIG1fcERlc3QgPSBwRGVzdDsNCi0gICAgbV9wU291cmNlID0gcFNvdXJjZTsNCi0gICAgbV9EZXN0V2lkdGggPSBkZXN0X3dpZHRoOw0KLSAgICBtX0Rlc3RIZWlnaHQgPSBkZXN0X2hlaWdodDsNCi0gICAgbV9DbGlwUmVjdCA9IHJlY3Q7DQotICAgIG1fRmxhZ3MgPSBmbGFnczsNCi0gICAgaWYgKHBTb3VyY2UtPkdldEZvcm1hdCgpID09IEZYRElCXzFicHBSZ2IgJiYgcFNvdXJjZS0+R2V0UGFsZXR0ZSgpKSB7DQotICAgICAgICBGWF9BUkdCIHBhbFsyNTZdOw0KLSAgICAgICAgaW50IGEwLCByMCwgZzAsIGIwLCBhMSwgcjEsIGcxLCBiMTsNCi0gICAgICAgIEFyZ2JEZWNvZGUocFNvdXJjZS0+R2V0UGFsZXR0ZUVudHJ5KDApLCBhMCwgcjAsIGcwLCBiMCk7DQotICAgICAgICBBcmdiRGVjb2RlKHBTb3VyY2UtPkdldFBhbGV0dGVFbnRyeSgxKSwgYTEsIHIxLCBnMSwgYjEpOw0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsNCi0gICAgICAgICAgICBpbnQgYSA9IGEwICsgKGExIC0gYTApICogaSAvIDI1NTsNCi0gICAgICAgICAgICBpbnQgciA9IHIwICsgKHIxIC0gcjApICogaSAvIDI1NTsNCi0gICAgICAgICAgICBpbnQgZyA9IGcwICsgKGcxIC0gZzApICogaSAvIDI1NTsNCi0gICAgICAgICAgICBpbnQgYiA9IGIwICsgKGIxIC0gYjApICogaSAvIDI1NTsNCi0gICAgICAgICAgICBwYWxbaV0gPSBBcmdiRW5jb2RlKGEsIHIsIGcsIGIpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCFwRGVzdC0+U2V0SW5mbyhyZWN0LldpZHRoKCksIHJlY3QuSGVpZ2h0KCksIG1fRGVzdEZvcm1hdCwgcGFsKSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIGlmIChwU291cmNlLT5HZXRGb3JtYXQoKSA9PSBGWERJQl8xYnBwQ215ayAmJiBwU291cmNlLT5HZXRQYWxldHRlKCkpIHsNCi0gICAgICAgIEZYX0NNWUsgcGFsWzI1Nl07DQotICAgICAgICBpbnQgYzAsIG0wLCB5MCwgazAsIGMxLCBtMSwgeTEsIGsxOw0KLSAgICAgICAgQ215a0RlY29kZShwU291cmNlLT5HZXRQYWxldHRlRW50cnkoMCksIGMwLCBtMCwgeTAsIGswKTsNCi0gICAgICAgIENteWtEZWNvZGUocFNvdXJjZS0+R2V0UGFsZXR0ZUVudHJ5KDEpLCBjMSwgbTEsIHkxLCBrMSk7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSArKykgew0KLSAgICAgICAgICAgIGludCBjID0gYzAgKyAoYzEgLSBjMCkgKiBpIC8gMjU1Ow0KLSAgICAgICAgICAgIGludCBtID0gbTAgKyAobTEgLSBtMCkgKiBpIC8gMjU1Ow0KLSAgICAgICAgICAgIGludCB5ID0geTAgKyAoeTEgLSB5MCkgKiBpIC8gMjU1Ow0KLSAgICAgICAgICAgIGludCBrID0gazAgKyAoazEgLSBrMCkgKiBpIC8gMjU1Ow0KLSAgICAgICAgICAgIHBhbFtpXSA9IENteWtFbmNvZGUoYywgbSwgeSwgayk7DQotICAgICAgICB9DQotICAgICAgICBpZiAoIXBEZXN0LT5TZXRJbmZvKHJlY3QuV2lkdGgoKSwgcmVjdC5IZWlnaHQoKSwgbV9EZXN0Rm9ybWF0LCBwYWwpKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2UgaWYgKCFwRGVzdC0+U2V0SW5mbyhyZWN0LldpZHRoKCksIHJlY3QuSGVpZ2h0KCksIG1fRGVzdEZvcm1hdCwgTlVMTCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoZmxhZ3MgJiBGWERJQl9ET1dOU0FNUExFKSB7DQotICAgICAgICByZXR1cm4gU3RhcnRRdWlja1N0cmV0Y2goKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIHJldHVybiBTdGFydFN0cmV0Y2goKTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENGWF9JbWFnZVN0cmV0Y2hlcjo6Q29udGludWUoSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBpZiAobV9GbGFncyAmIEZYRElCX0RPV05TQU1QTEUpIHsNCi0gICAgICAgIHJldHVybiBDb250aW51ZVF1aWNrU3RyZXRjaChwUGF1c2UpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmV0dXJuIENvbnRpbnVlU3RyZXRjaChwUGF1c2UpOw0KLSAgICB9DQotfQ0KLSNpZm5kZWYgX0ZQREZBUElfTUlOSV8NCi0jZGVmaW5lIE1BWF9QUk9HUkVTU0lWRV9TVFJFVENIX1BJWEVMUwkxMDAwMDAwDQotI2Vsc2UNCi0jZGVmaW5lIE1BWF9QUk9HUkVTU0lWRV9TVFJFVENIX1BJWEVMUwkxMDAwMDANCi0jZW5kaWYNCi1GWF9CT09MIENGWF9JbWFnZVN0cmV0Y2hlcjo6U3RhcnRTdHJldGNoKCkNCi17DQotICAgIG1fcFN0cmV0Y2hFbmdpbmUgPSBGWF9ORVcgQ1N0cmV0Y2hFbmdpbmUobV9wRGVzdCwgbV9EZXN0Rm9ybWF0LCBtX0Rlc3RXaWR0aCwgbV9EZXN0SGVpZ2h0LCBtX0NsaXBSZWN0LCBtX3BTb3VyY2UsIG1fRmxhZ3MpOw0KLSAgICBpZiAoIW1fcFN0cmV0Y2hFbmdpbmUpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBtX3BTdHJldGNoRW5naW5lLT5TdGFydFN0cmV0Y2hIb3J6KCk7DQotICAgIGlmIChtX3BTb3VyY2UtPkdldFdpZHRoKCkgKiBtX3BTb3VyY2UtPkdldEhlaWdodCgpIDwgTUFYX1BST0dSRVNTSVZFX1NUUkVUQ0hfUElYRUxTKSB7DQotICAgICAgICBtX3BTdHJldGNoRW5naW5lLT5Db250aW51ZShOVUxMKTsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDRlhfSW1hZ2VTdHJldGNoZXI6OkNvbnRpbnVlU3RyZXRjaChJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIGlmIChtX3BTdHJldGNoRW5naW5lID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wU3RyZXRjaEVuZ2luZS0+Q29udGludWUocFBhdXNlKTsNCi19DQotRlhfQk9PTCBDRlhfSW1hZ2VTdHJldGNoZXI6OlN0YXJ0UXVpY2tTdHJldGNoKCkNCi17DQotI2lmZGVmIF9GUERGQVBJX01JTklfDQotICAgIG1fcFNvdXJjZS0+U2V0RG93blNhbXBsZVNpemUobV9EZXN0V2lkdGgsIG1fRGVzdEhlaWdodCk7DQotI2VuZGlmDQotICAgIG1fYkZsaXBYID0gRkFMU0U7DQotICAgIG1fYkZsaXBZID0gRkFMU0U7DQotICAgIGlmIChtX0Rlc3RXaWR0aCA8IDApIHsNCi0gICAgICAgIG1fYkZsaXBYID0gVFJVRTsNCi0gICAgICAgIG1fRGVzdFdpZHRoID0gLW1fRGVzdFdpZHRoOw0KLSAgICB9DQotICAgIGlmIChtX0Rlc3RIZWlnaHQgPCAwKSB7DQotICAgICAgICBtX2JGbGlwWSA9IFRSVUU7DQotICAgICAgICBtX0Rlc3RIZWlnaHQgPSAtbV9EZXN0SGVpZ2h0Ow0KLSAgICB9DQotICAgIG1fTGluZUluZGV4ID0gMDsNCi0gICAgRlhfRFdPUkQgc2l6ZSA9IG1fQ2xpcFJlY3QuV2lkdGgoKTsNCi0gICAgaWYgKHNpemUgJiYgbV9EZXN0QlBQID4gKGludCkoSU5UX01BWCAvIHNpemUpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgc2l6ZSAqPSBtX0Rlc3RCUFA7DQotICAgIG1fcFNjYW5saW5lID0gRlhfQWxsb2MoRlhfQllURSwgKHNpemUgLyA4ICsgMykgLyA0ICogNCk7DQotICAgIGlmICghbV9wU2NhbmxpbmUpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAobV9wU291cmNlLT5tX3BBbHBoYU1hc2spIHsNCi0gICAgICAgIG1fcE1hc2tTY2FubGluZSA9IEZYX0FsbG9jKEZYX0JZVEUsIChtX0NsaXBSZWN0LldpZHRoKCkgKyAzKSAvIDQgKiA0KTsNCi0gICAgICAgIGlmICghbV9wTWFza1NjYW5saW5lKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChtX3BTb3VyY2UtPkdldFdpZHRoKCkgKiBtX3BTb3VyY2UtPkdldEhlaWdodCgpIDwgTUFYX1BST0dSRVNTSVZFX1NUUkVUQ0hfUElYRUxTKSB7DQotICAgICAgICBDb250aW51ZVF1aWNrU3RyZXRjaChOVUxMKTsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDRlhfSW1hZ2VTdHJldGNoZXI6OkNvbnRpbnVlUXVpY2tTdHJldGNoKElGWF9QYXVzZSogcFBhdXNlKQ0KLXsNCi0gICAgaWYgKG1fcFNjYW5saW5lID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpbnQgcmVzdWx0X3dpZHRoID0gbV9DbGlwUmVjdC5XaWR0aCgpLCByZXN1bHRfaGVpZ2h0ID0gbV9DbGlwUmVjdC5IZWlnaHQoKTsNCi0gICAgaW50IHNyY193aWR0aCA9IG1fcFNvdXJjZS0+R2V0V2lkdGgoKSwgc3JjX2hlaWdodCA9IG1fcFNvdXJjZS0+R2V0SGVpZ2h0KCk7DQotICAgIGZvciAoOyBtX0xpbmVJbmRleCA8IHJlc3VsdF9oZWlnaHQ7IG1fTGluZUluZGV4ICsrKSB7DQotICAgICAgICBpbnQgZGVzdF95LCBzcmNfeTsNCi0gICAgICAgIGlmIChtX2JGbGlwWSkgew0KLSAgICAgICAgICAgIGRlc3RfeSA9IHJlc3VsdF9oZWlnaHQgLSBtX0xpbmVJbmRleCAtIDE7DQotICAgICAgICAgICAgc3JjX3kgPSAobV9EZXN0SGVpZ2h0IC0gKGRlc3RfeSArIG1fQ2xpcFJlY3QudG9wKSAtIDEpICogc3JjX2hlaWdodCAvIG1fRGVzdEhlaWdodDsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgZGVzdF95ID0gbV9MaW5lSW5kZXg7DQotICAgICAgICAgICAgc3JjX3kgPSAoZGVzdF95ICsgbV9DbGlwUmVjdC50b3ApICogc3JjX2hlaWdodCAvIG1fRGVzdEhlaWdodDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChzcmNfeSA+PSBzcmNfaGVpZ2h0KSB7DQotICAgICAgICAgICAgc3JjX3kgPSBzcmNfaGVpZ2h0IC0gMTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChzcmNfeSA8IDApIHsNCi0gICAgICAgICAgICBzcmNfeSA9IDA7DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9wU291cmNlLT5Ta2lwVG9TY2FubGluZShzcmNfeSwgcFBhdXNlKSkgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wU291cmNlLT5Eb3duU2FtcGxlU2NhbmxpbmUoc3JjX3ksIG1fcFNjYW5saW5lLCBtX0Rlc3RCUFAsIG1fRGVzdFdpZHRoLCBtX2JGbGlwWCwgbV9DbGlwUmVjdC5sZWZ0LCByZXN1bHRfd2lkdGgpOw0KLSAgICAgICAgRlhfTFBCWVRFIHNjYW5fZXh0cmFfYWxwaGEgPSBOVUxMOw0KLSAgICAgICAgaWYgKG1fcE1hc2tTY2FubGluZSkgew0KLSAgICAgICAgICAgIG1fcFNvdXJjZS0+bV9wQWxwaGFNYXNrLT5Eb3duU2FtcGxlU2NhbmxpbmUoc3JjX3ksIG1fcE1hc2tTY2FubGluZSwgMSwgbV9EZXN0V2lkdGgsIG1fYkZsaXBYLCBtX0NsaXBSZWN0LmxlZnQsIHJlc3VsdF93aWR0aCk7DQotICAgICAgICB9DQotICAgICAgICBtX3BEZXN0LT5Db21wb3NlU2NhbmxpbmUoZGVzdF95LCBtX3BTY2FubGluZSwgbV9wTWFza1NjYW5saW5lKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZGliLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiCisjaW5jbHVkZSAiZGliX2ludC5oIgorI2luY2x1ZGUgPGxpbWl0cy5oPgorZXh0ZXJuIGludCBTRFBfVGFibGVbNTEzXTsKK3ZvaWQgQ1dlaWdodFRhYmxlOjpDYWxjKGludCBkZXN0X2xlbiwgaW50IGRlc3RfbWluLCBpbnQgZGVzdF9tYXgsIGludCBzcmNfbGVuLCBpbnQgc3JjX21pbiwgaW50IHNyY19tYXgsIGludCBmbGFncykKK3sKKyAgICBpZiAobV9wV2VpZ2h0VGFibGVzKSB7CisgICAgICAgIEZYX0ZyZWUobV9wV2VpZ2h0VGFibGVzKTsKKyAgICAgICAgbV9wV2VpZ2h0VGFibGVzID0gTlVMTDsKKyAgICB9CisgICAgZG91YmxlIHNjYWxlLCBiYXNlOworICAgIHNjYWxlID0gRlhTWVNfRGl2KChGWF9GTE9BVCkoc3JjX2xlbiksIChGWF9GTE9BVCkoZGVzdF9sZW4pKTsKKyAgICBpZiAoZGVzdF9sZW4gPCAwKSB7CisgICAgICAgIGJhc2UgPSAoRlhfRkxPQVQpKHNyY19sZW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIGJhc2UgPSAwOworICAgIH0KKyAgICBpbnQgZXh0X3NpemUgPSBmbGFncyAmIEZYRElCX0JJQ1VCSUNfSU5URVJQT0wgPyAzIDogMTsKKyAgICBtX0l0ZW1TaXplID0gc2l6ZW9mKGludCkgKiAyICsgKGludCkoc2l6ZW9mKGludCkgKiAoRlhTWVNfY2VpbChGWFNZU19mYWJzKChGWF9GTE9BVClzY2FsZSkpICsgZXh0X3NpemUpKTsKKyAgICBtX0Rlc3RNaW4gPSBkZXN0X21pbjsKKyAgICBpZiAoKGRlc3RfbWF4IC0gZGVzdF9taW4pID4gKGludCkoKDFVIDw8IDMwKSAtIDQpIC8gbV9JdGVtU2l6ZSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcFdlaWdodFRhYmxlcyA9IEZYX0FsbG9jTkwoRlhfQllURSwgKGRlc3RfbWF4IC0gZGVzdF9taW4pICogbV9JdGVtU2l6ZSArIDQpOworICAgIGlmIChtX3BXZWlnaHRUYWJsZXMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYU1lTX21lbXNldDMyKG1fcFdlaWdodFRhYmxlcywgMCwgc2l6ZW9mKEZYX0JZVEUpICogKChkZXN0X21heCAtIGRlc3RfbWluKSptX0l0ZW1TaXplICsgNCkpOworICAgIGlmICgoZmxhZ3MgJiBGWERJQl9OT1NNT09USCkgIT0gMCB8fCBGWFNZU19mYWJzKChGWF9GTE9BVClzY2FsZSkgPCAxLjBmKSB7CisgICAgICAgIGZvciAoaW50IGRlc3RfcGl4ZWwgPSBkZXN0X21pbjsgZGVzdF9waXhlbCA8IGRlc3RfbWF4OyBkZXN0X3BpeGVsICsrKSB7CisgICAgICAgICAgICBQaXhlbFdlaWdodCYgcGl4ZWxfd2VpZ2h0cyA9ICpHZXRQaXhlbFdlaWdodChkZXN0X3BpeGVsKTsKKyAgICAgICAgICAgIGRvdWJsZSBzcmNfcG9zID0gZGVzdF9waXhlbCAqIHNjYWxlICsgc2NhbGUgLyAyICsgYmFzZTsKKyAgICAgICAgICAgIGlmIChmbGFncyAmIEZYRElCX0lOVEVSUE9MKSB7CisgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0ID0gKGludClGWFNZU19mbG9vcigoRlhfRkxPQVQpc3JjX3BvcyAtIDEuMGYgLyAyKTsKKyAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fU3JjRW5kID0gKGludClGWFNZU19mbG9vcigoRlhfRkxPQVQpc3JjX3BvcyArIDEuMGYgLyAyKTsKKyAgICAgICAgICAgICAgICBpZiAocGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0IDwgc3JjX21pbikgeworICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgPSBzcmNfbWluOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocGl4ZWxfd2VpZ2h0cy5tX1NyY0VuZCA+PSBzcmNfbWF4KSB7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9TcmNFbmQgPSBzcmNfbWF4IC0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBpeGVsX3dlaWdodHMubV9TcmNTdGFydCA9PSBwaXhlbF93ZWlnaHRzLm1fU3JjRW5kKSB7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9XZWlnaHRzWzBdID0gNjU1MzY7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1dlaWdodHNbMV0gPSBGWFNZU19yb3VuZCgoRlhfRkxPQVQpKHNyY19wb3MgLSBwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgLSAxLjBmIC8gMikgKiA2NTUzNik7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9XZWlnaHRzWzBdID0gNjU1MzYgLSBwaXhlbF93ZWlnaHRzLm1fV2VpZ2h0c1sxXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCkgeworICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9TcmNTdGFydCA9IChpbnQpRlhTWVNfZmxvb3IoKEZYX0ZMT0FUKXNyY19wb3MgLSAxLjBmIC8gMik7CisgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1NyY0VuZCA9IChpbnQpRlhTWVNfZmxvb3IoKEZYX0ZMT0FUKXNyY19wb3MgKyAxLjBmIC8gMik7CisgICAgICAgICAgICAgICAgaW50IHN0YXJ0ID0gcGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0IC0gMTsKKyAgICAgICAgICAgICAgICBpbnQgZW5kID0gcGl4ZWxfd2VpZ2h0cy5tX1NyY0VuZCArIDE7CisgICAgICAgICAgICAgICAgaWYgKHN0YXJ0IDwgc3JjX21pbikgeworICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHNyY19taW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChlbmQgPj0gc3JjX21heCkgeworICAgICAgICAgICAgICAgICAgICBlbmQgPSBzcmNfbWF4IC0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBpeGVsX3dlaWdodHMubV9TcmNTdGFydCA8IHNyY19taW4pIHsKKyAgICAgICAgICAgICAgICAgICAgc3JjX3BvcyArPSBzcmNfbWluIC0gcGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0OworICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgPSBzcmNfbWluOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocGl4ZWxfd2VpZ2h0cy5tX1NyY0VuZCA+PSBzcmNfbWF4KSB7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9TcmNFbmQgPSBzcmNfbWF4IC0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW50IHdlaWdodDsKKyAgICAgICAgICAgICAgICB3ZWlnaHQgPSBGWFNZU19yb3VuZCgoRlhfRkxPQVQpKHNyY19wb3MgLSBwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgLSAxLjBmIC8gMikgKiAyNTYpOworICAgICAgICAgICAgICAgIGlmIChzdGFydCA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1dlaWdodHNbMF0gPSAoU0RQX1RhYmxlWzI1NiArIHdlaWdodF0gKyBTRFBfVGFibGVbd2VpZ2h0XSArIFNEUF9UYWJsZVsyNTYgLSB3ZWlnaHRdICsgU0RQX1RhYmxlWzUxMiAtIHdlaWdodF0pIDw8IDg7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoc3RhcnQgPT0gcGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0ICYmIChwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgPT0gcGl4ZWxfd2VpZ2h0cy5tX1NyY0VuZCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9PSBwaXhlbF93ZWlnaHRzLm1fU3JjRW5kKSAmJiBzdGFydCA8IGVuZCkgfHwgKHN0YXJ0IDwgcGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0ICYmIHBpeGVsX3dlaWdodHMubV9TcmNTdGFydCA9PSBwaXhlbF93ZWlnaHRzLm1fU3JjRW5kICYmIGVuZCA9PSBwaXhlbF93ZWlnaHRzLm1fU3JjRW5kKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPCBwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9XZWlnaHRzWzBdID0gU0RQX1RhYmxlWzI1NiArIHdlaWdodF0gPDwgODsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9XZWlnaHRzWzFdID0gKFNEUF9UYWJsZVt3ZWlnaHRdICsgU0RQX1RhYmxlWzI1NiAtIHdlaWdodF0gKyBTRFBfVGFibGVbNTEyIC0gd2VpZ2h0XSkgPDwgODsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgPT0gcGl4ZWxfd2VpZ2h0cy5tX1NyY0VuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9XZWlnaHRzWzBdID0gKFNEUF9UYWJsZVsyNTYgKyB3ZWlnaHRdICsgU0RQX1RhYmxlW3dlaWdodF0gKyBTRFBfVGFibGVbMjU2IC0gd2VpZ2h0XSkgPDwgODsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fV2VpZ2h0c1sxXSA9IFNEUF9UYWJsZVs1MTIgLSB3ZWlnaHRdIDw8IDg7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9XZWlnaHRzWzBdID0gKFNEUF9UYWJsZVsyNTYgKyB3ZWlnaHRdICsgU0RQX1RhYmxlW3dlaWdodF0pIDw8IDg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1dlaWdodHNbMV0gPSAoU0RQX1RhYmxlWzI1NiAtIHdlaWdodF0gKyBTRFBfVGFibGVbNTEyIC0gd2VpZ2h0XSkgPDwgODsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAocGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0ID09IHBpeGVsX3dlaWdodHMubV9TcmNFbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9TcmNFbmQgPSBlbmQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0IDwgcGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgPSBzdGFydDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgPT0gcGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA8IHBpeGVsX3dlaWdodHMubV9TcmNFbmQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9TcmNFbmQgPCBlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1dlaWdodHNbMF0gPSAoU0RQX1RhYmxlWzI1NiArIHdlaWdodF0gKyBTRFBfVGFibGVbd2VpZ2h0XSkgPDwgODsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1dlaWdodHNbMV0gPSBTRFBfVGFibGVbMjU2IC0gd2VpZ2h0XSA8PCA4OworICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fV2VpZ2h0c1syXSA9IFNEUF9UYWJsZVs1MTIgLSB3ZWlnaHRdIDw8IDg7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9TcmNFbmQgPSBlbmQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydCA8IHBpeGVsX3dlaWdodHMubV9TcmNTdGFydCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0IDwgcGl4ZWxfd2VpZ2h0cy5tX1NyY0VuZCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1NyY0VuZCA9PSBlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1dlaWdodHNbMF0gPSBTRFBfVGFibGVbMjU2ICsgd2VpZ2h0XSA8PCA4OworICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fV2VpZ2h0c1sxXSA9IFNEUF9UYWJsZVt3ZWlnaHRdIDw8IDg7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9XZWlnaHRzWzJdID0gKFNEUF9UYWJsZVsyNTYgLSB3ZWlnaHRdICsgU0RQX1RhYmxlWzUxMiAtIHdlaWdodF0pIDw8IDg7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9TcmNTdGFydCA9IHN0YXJ0OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9XZWlnaHRzWzBdID0gU0RQX1RhYmxlWzI1NiArIHdlaWdodF0gPDwgODsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1dlaWdodHNbMV0gPSBTRFBfVGFibGVbd2VpZ2h0XSA8PCA4OworICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fV2VpZ2h0c1syXSA9IFNEUF9UYWJsZVsyNTYgLSB3ZWlnaHRdIDw8IDg7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9XZWlnaHRzWzNdID0gU0RQX1RhYmxlWzUxMiAtIHdlaWdodF0gPDwgODsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0ID0gc3RhcnQ7CisgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9TcmNFbmQgPSBlbmQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fU3JjU3RhcnQgPSBwaXhlbF93ZWlnaHRzLm1fU3JjRW5kID0gKGludClGWFNZU19mbG9vcigoRlhfRkxPQVQpc3JjX3Bvcyk7CisgICAgICAgICAgICAgICAgaWYgKHBpeGVsX3dlaWdodHMubV9TcmNTdGFydCA8IHNyY19taW4pIHsKKyAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0ID0gc3JjX21pbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBpeGVsX3dlaWdodHMubV9TcmNFbmQgPj0gc3JjX21heCkgeworICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fU3JjRW5kID0gc3JjX21heCAtIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9XZWlnaHRzWzBdID0gNjU1MzY7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmb3IgKGludCBkZXN0X3BpeGVsID0gZGVzdF9taW47IGRlc3RfcGl4ZWwgPCBkZXN0X21heDsgZGVzdF9waXhlbCArKykgeworICAgICAgICBQaXhlbFdlaWdodCYgcGl4ZWxfd2VpZ2h0cyA9ICpHZXRQaXhlbFdlaWdodChkZXN0X3BpeGVsKTsKKyAgICAgICAgZG91YmxlIHNyY19zdGFydCA9IGRlc3RfcGl4ZWwgKiBzY2FsZSArIGJhc2U7CisgICAgICAgIGRvdWJsZSBzcmNfZW5kID0gc3JjX3N0YXJ0ICsgc2NhbGU7CisgICAgICAgIGludCBzdGFydF9pLCBlbmRfaTsKKyAgICAgICAgaWYgKHNyY19zdGFydCA8IHNyY19lbmQpIHsKKyAgICAgICAgICAgIHN0YXJ0X2kgPSAoaW50KUZYU1lTX2Zsb29yKChGWF9GTE9BVClzcmNfc3RhcnQpOworICAgICAgICAgICAgZW5kX2kgPSAoaW50KUZYU1lTX2NlaWwoKEZYX0ZMT0FUKXNyY19lbmQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RhcnRfaSA9IChpbnQpRlhTWVNfZmxvb3IoKEZYX0ZMT0FUKXNyY19lbmQpOworICAgICAgICAgICAgZW5kX2kgPSAoaW50KUZYU1lTX2NlaWwoKEZYX0ZMT0FUKXNyY19zdGFydCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXJ0X2kgPCBzcmNfbWluKSB7CisgICAgICAgICAgICBzdGFydF9pID0gc3JjX21pbjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZW5kX2kgPj0gc3JjX21heCkgeworICAgICAgICAgICAgZW5kX2kgPSBzcmNfbWF4IC0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RhcnRfaSA+IGVuZF9pKSB7CisgICAgICAgICAgICBpZiAoc3RhcnRfaSA+PSBzcmNfbWF4KSB7CisgICAgICAgICAgICAgICAgc3RhcnRfaSA9IHNyY19tYXggLSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0ID0gc3RhcnRfaTsKKyAgICAgICAgICAgIHBpeGVsX3dlaWdodHMubV9TcmNFbmQgPSBzdGFydF9pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1NyY1N0YXJ0ID0gc3RhcnRfaTsKKyAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1NyY0VuZCA9IGVuZF9pOworICAgICAgICBmb3IgKGludCBqID0gc3RhcnRfaTsgaiA8PSBlbmRfaTsgaiArKykgeworICAgICAgICAgICAgZG91YmxlIGRlc3Rfc3RhcnQgPSBGWFNZU19EaXYoKEZYX0ZMT0FUKShqKSAtIGJhc2UsIHNjYWxlKTsKKyAgICAgICAgICAgIGRvdWJsZSBkZXN0X2VuZCA9IEZYU1lTX0RpdigoRlhfRkxPQVQpKGogKyAxKSAtIGJhc2UsIHNjYWxlKTsKKyAgICAgICAgICAgIGlmIChkZXN0X3N0YXJ0ID4gZGVzdF9lbmQpIHsKKyAgICAgICAgICAgICAgICBkb3VibGUgdGVtcCA9IGRlc3Rfc3RhcnQ7CisgICAgICAgICAgICAgICAgZGVzdF9zdGFydCA9IGRlc3RfZW5kOworICAgICAgICAgICAgICAgIGRlc3RfZW5kID0gdGVtcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRvdWJsZSBhcmVhX3N0YXJ0ID0gZGVzdF9zdGFydCA+IChGWF9GTE9BVCkoZGVzdF9waXhlbCkgPyBkZXN0X3N0YXJ0IDogKEZYX0ZMT0FUKShkZXN0X3BpeGVsKTsKKyAgICAgICAgICAgIGRvdWJsZSBhcmVhX2VuZCA9IGRlc3RfZW5kID4gKEZYX0ZMT0FUKShkZXN0X3BpeGVsICsgMSkgPyAoRlhfRkxPQVQpKGRlc3RfcGl4ZWwgKyAxKSA6IGRlc3RfZW5kOworICAgICAgICAgICAgZG91YmxlIHdlaWdodCA9IGFyZWFfc3RhcnQgPj0gYXJlYV9lbmQgPyAwLjBmIDogYXJlYV9lbmQgLSBhcmVhX3N0YXJ0OworICAgICAgICAgICAgaWYgKHdlaWdodCA9PSAwICYmIGogPT0gZW5kX2kpIHsKKyAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHRzLm1fU3JjRW5kIC0tOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0cy5tX1dlaWdodHNbaiAtIHN0YXJ0X2ldID0gRlhTWVNfcm91bmQoKEZYX0ZMT0FUKSh3ZWlnaHQgKiA2NTUzNikpOworICAgICAgICB9CisgICAgfQorfQorQ1N0cmV0Y2hFbmdpbmU6OkNTdHJldGNoRW5naW5lKElGWF9TY2FubGluZUNvbXBvc2VyKiBwRGVzdEJpdG1hcCwgRlhESUJfRm9ybWF0IGRlc3RfZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsIGNvbnN0IEZYX1JFQ1QmIGNsaXBfcmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwU3JjQml0bWFwLCBpbnQgZmxhZ3MpCit7CisgICAgbV9TdGF0ZSA9IDA7CisgICAgbV9EZXN0Rm9ybWF0ID0gZGVzdF9mb3JtYXQ7CisgICAgbV9EZXN0QnBwID0gZGVzdF9mb3JtYXQgJiAweGZmOworICAgIG1fU3JjQnBwID0gcFNyY0JpdG1hcC0+R2V0Rm9ybWF0KCkgJiAweGZmOworICAgIG1fYkhhc0FscGhhID0gcFNyY0JpdG1hcC0+R2V0Rm9ybWF0KCkgJiAweDIwMDsKKyAgICBtX3BTcmNQYWxldHRlID0gcFNyY0JpdG1hcC0+R2V0UGFsZXR0ZSgpOworICAgIG1fcERlc3RCaXRtYXAgPSBwRGVzdEJpdG1hcDsKKyAgICBtX0Rlc3RXaWR0aCA9IGRlc3Rfd2lkdGg7CisgICAgbV9EZXN0SGVpZ2h0ID0gZGVzdF9oZWlnaHQ7CisgICAgbV9wSW50ZXJCdWYgPSBOVUxMOworICAgIG1fcEV4dHJhQWxwaGFCdWYgPSBOVUxMOworICAgIG1fcERlc3RNYXNrU2NhbmxpbmUgPSBOVUxMOworICAgIG1fRGVzdENsaXAgPSBjbGlwX3JlY3Q7CisgICAgRlhfRFdPUkQgc2l6ZSA9IGNsaXBfcmVjdC5XaWR0aCgpOworICAgIGlmIChzaXplICYmIG1fRGVzdEJwcCA+IChpbnQpKElOVF9NQVggLyBzaXplKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNpemUgKj0gbV9EZXN0QnBwOworICAgIGlmIChzaXplID4gSU5UX01BWCAtIDMxKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2l6ZSArPSAzMTsKKyAgICBzaXplID0gc2l6ZSAvIDMyICogNDsKKyAgICBtX3BEZXN0U2NhbmxpbmUgPSBGWF9BbGxvY05MKEZYX0JZVEUsIHNpemUpOworICAgIGlmIChtX3BEZXN0U2NhbmxpbmUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYU1lTX21lbXNldDMyKG1fcERlc3RTY2FubGluZSwgMCwgc2l6ZW9mKEZYX0JZVEUpICogc2l6ZSk7CisgICAgaWYgKGRlc3RfZm9ybWF0ID09IEZYRElCX1JnYjMyKSB7CisgICAgICAgIEZYU1lTX21lbXNldDgobV9wRGVzdFNjYW5saW5lLCAyNTUsIHNpemUpOworICAgIH0KKyAgICBtX0ludGVyUGl0Y2ggPSAobV9EZXN0Q2xpcC5XaWR0aCgpICogbV9EZXN0QnBwICsgMzEpIC8gMzIgKiA0OworICAgIG1fRXh0cmFNYXNrUGl0Y2ggPSAobV9EZXN0Q2xpcC5XaWR0aCgpICogOCArIDMxKSAvIDMyICogNDsKKyAgICBtX3BJbnRlckJ1ZiA9IE5VTEw7CisgICAgbV9wU291cmNlID0gcFNyY0JpdG1hcDsKKyAgICBtX1NyY1dpZHRoID0gcFNyY0JpdG1hcC0+R2V0V2lkdGgoKTsKKyAgICBtX1NyY0hlaWdodCA9IHBTcmNCaXRtYXAtPkdldEhlaWdodCgpOworICAgIG1fU3JjUGl0Y2ggPSAobV9TcmNXaWR0aCAqIG1fU3JjQnBwICsgMzEpIC8gMzIgKiA0OworICAgIGlmICgoZmxhZ3MgJiBGWERJQl9OT1NNT09USCkgPT0gMCkgeworICAgICAgICBGWF9CT09MIGJJbnRlcnBvbCA9IGZsYWdzICYgRlhESUJfSU5URVJQT0wgfHwgZmxhZ3MgJiBGWERJQl9CSUNVQklDX0lOVEVSUE9MOworICAgICAgICBpZiAoIWJJbnRlcnBvbCAmJiBGWFNZU19hYnMoZGVzdF93aWR0aCkgIT0gMCAmJiBGWFNZU19hYnMoZGVzdF9oZWlnaHQpIDwgbV9TcmNXaWR0aCAqIG1fU3JjSGVpZ2h0ICogOCAvIEZYU1lTX2FicyhkZXN0X3dpZHRoKSkgeworICAgICAgICAgICAgZmxhZ3MgPSBGWERJQl9JTlRFUlBPTDsKKyAgICAgICAgfQorICAgICAgICBtX0ZsYWdzID0gZmxhZ3M7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9GbGFncyA9IEZYRElCX05PU01PT1RIOworICAgICAgICBpZiAoZmxhZ3MgJiBGWERJQl9ET1dOU0FNUExFKSB7CisgICAgICAgICAgICBtX0ZsYWdzIHw9IEZYRElCX0RPV05TQU1QTEU7CisgICAgICAgIH0KKyAgICB9CisgICAgZG91YmxlIHNjYWxlX3ggPSBGWFNZU19EaXYoKEZYX0ZMT0FUKShtX1NyY1dpZHRoKSwgKEZYX0ZMT0FUKShtX0Rlc3RXaWR0aCkpOworICAgIGRvdWJsZSBzY2FsZV95ID0gRlhTWVNfRGl2KChGWF9GTE9BVCkobV9TcmNIZWlnaHQpLCAoRlhfRkxPQVQpKG1fRGVzdEhlaWdodCkpOworICAgIGRvdWJsZSBiYXNlX3ggPSBtX0Rlc3RXaWR0aCA+IDAgPyAwLjBmIDogKEZYX0ZMT0FUKShtX0Rlc3RXaWR0aCk7CisgICAgZG91YmxlIGJhc2VfeSA9IG1fRGVzdEhlaWdodCA+IDAgPyAwLjBmIDogKEZYX0ZMT0FUKShtX0Rlc3RIZWlnaHQpOworICAgIGRvdWJsZSBzcmNfbGVmdCA9IEZYU1lTX011bChzY2FsZV94LCAoRlhfRkxPQVQpKGNsaXBfcmVjdC5sZWZ0KSArIGJhc2VfeCk7CisgICAgZG91YmxlIHNyY19yaWdodCA9IEZYU1lTX011bChzY2FsZV94LCAoRlhfRkxPQVQpKGNsaXBfcmVjdC5yaWdodCkgKyBiYXNlX3gpOworICAgIGRvdWJsZSBzcmNfdG9wID0gRlhTWVNfTXVsKHNjYWxlX3ksIChGWF9GTE9BVCkoY2xpcF9yZWN0LnRvcCkgKyBiYXNlX3kpOworICAgIGRvdWJsZSBzcmNfYm90dG9tID0gRlhTWVNfTXVsKHNjYWxlX3ksIChGWF9GTE9BVCkoY2xpcF9yZWN0LmJvdHRvbSkgKyBiYXNlX3kpOworICAgIGlmIChzcmNfbGVmdCA+IHNyY19yaWdodCkgeworICAgICAgICBkb3VibGUgdGVtcCA9IHNyY19sZWZ0OworICAgICAgICBzcmNfbGVmdCA9IHNyY19yaWdodDsKKyAgICAgICAgc3JjX3JpZ2h0ID0gdGVtcDsKKyAgICB9CisgICAgaWYgKHNyY190b3AgPiBzcmNfYm90dG9tKSB7CisgICAgICAgIGRvdWJsZSB0ZW1wID0gc3JjX3RvcDsKKyAgICAgICAgc3JjX3RvcCA9IHNyY19ib3R0b207CisgICAgICAgIHNyY19ib3R0b20gPSB0ZW1wOworICAgIH0KKyAgICBtX1NyY0NsaXAubGVmdCA9IChpbnQpRlhTWVNfZmxvb3IoKEZYX0ZMT0FUKXNyY19sZWZ0KTsKKyAgICBtX1NyY0NsaXAucmlnaHQgPSAoaW50KUZYU1lTX2NlaWwoKEZYX0ZMT0FUKXNyY19yaWdodCk7CisgICAgbV9TcmNDbGlwLnRvcCA9IChpbnQpRlhTWVNfZmxvb3IoKEZYX0ZMT0FUKXNyY190b3ApOworICAgIG1fU3JjQ2xpcC5ib3R0b20gPSAoaW50KUZYU1lTX2NlaWwoKEZYX0ZMT0FUKXNyY19ib3R0b20pOworICAgIEZYX1JFQ1Qgc3JjX3JlY3QoMCwgMCwgbV9TcmNXaWR0aCwgbV9TcmNIZWlnaHQpOworICAgIG1fU3JjQ2xpcC5JbnRlcnNlY3Qoc3JjX3JlY3QpOworICAgIGlmIChtX1NyY0JwcCA9PSAxKSB7CisgICAgICAgIGlmIChtX0Rlc3RCcHAgPT0gOCkgeworICAgICAgICAgICAgbV9UcmFuc01ldGhvZCA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX1RyYW5zTWV0aG9kID0gMjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9TcmNCcHAgPT0gOCkgeworICAgICAgICBpZiAobV9EZXN0QnBwID09IDgpIHsKKyAgICAgICAgICAgIGlmICghbV9iSGFzQWxwaGEpIHsKKyAgICAgICAgICAgICAgICBtX1RyYW5zTWV0aG9kID0gMzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9UcmFuc01ldGhvZCA9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIW1fYkhhc0FscGhhKSB7CisgICAgICAgICAgICAgICAgbV9UcmFuc01ldGhvZCA9IDU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1fVHJhbnNNZXRob2QgPSA2OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFtX2JIYXNBbHBoYSkgeworICAgICAgICAgICAgbV9UcmFuc01ldGhvZCA9IDc7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX1RyYW5zTWV0aG9kID0gODsKKyAgICAgICAgfQorICAgIH0KK30KK0ZYX0JPT0wgQ1N0cmV0Y2hFbmdpbmU6OkNvbnRpbnVlKElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIHdoaWxlIChtX1N0YXRlID09IDEpIHsKKyAgICAgICAgaWYgKENvbnRpbnVlU3RyZXRjaEhvcnoocFBhdXNlKSkgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgbV9TdGF0ZSA9IDI7CisgICAgICAgIFN0cmV0Y2hWZXJ0KCk7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK0NTdHJldGNoRW5naW5lOjp+Q1N0cmV0Y2hFbmdpbmUoKQoreworICAgIGlmIChtX3BEZXN0U2NhbmxpbmUpIHsKKyAgICAgICAgRlhfRnJlZShtX3BEZXN0U2NhbmxpbmUpOworICAgIH0KKyAgICBpZiAobV9wSW50ZXJCdWYpIHsKKyAgICAgICAgRlhfRnJlZShtX3BJbnRlckJ1Zik7CisgICAgfQorICAgIGlmIChtX3BFeHRyYUFscGhhQnVmKSB7CisgICAgICAgIEZYX0ZyZWUobV9wRXh0cmFBbHBoYUJ1Zik7CisgICAgfQorICAgIGlmIChtX3BEZXN0TWFza1NjYW5saW5lKSB7CisgICAgICAgIEZYX0ZyZWUobV9wRGVzdE1hc2tTY2FubGluZSk7CisgICAgfQorfQorRlhfQk9PTCBDU3RyZXRjaEVuZ2luZTo6U3RhcnRTdHJldGNoSG9yeigpCit7CisgICAgaWYgKG1fRGVzdFdpZHRoID09IDAgfHwgbV9wRGVzdFNjYW5saW5lID09IE5VTEwgfHwgbV9TcmNDbGlwLkhlaWdodCgpID4gKGludCkoKDFVIDw8IDI5KSAvIG1fSW50ZXJQaXRjaCkgfHwgbV9TcmNDbGlwLkhlaWdodCgpID09IDApIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyNpZm5kZWYgX0ZQREZBUElfTUlOSV8KKyAgICBtX3BJbnRlckJ1ZiA9IEZYX0FsbG9jTkwodW5zaWduZWQgY2hhciwgbV9TcmNDbGlwLkhlaWdodCgpICogbV9JbnRlclBpdGNoKTsKKyNlbHNlCisgICAgbV9wSW50ZXJCdWYgPSBGWF9BbGxvYyh1bnNpZ25lZCBjaGFyLCBtX1NyY0NsaXAuSGVpZ2h0KCkgKiBtX0ludGVyUGl0Y2gpOworI2VuZGlmCisgICAgaWYgKG1fcEludGVyQnVmID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAobV9wU291cmNlICYmIG1fYkhhc0FscGhhICYmIG1fcFNvdXJjZS0+bV9wQWxwaGFNYXNrKSB7CisgICAgICAgIG1fcEV4dHJhQWxwaGFCdWYgPSBGWF9BbGxvYyh1bnNpZ25lZCBjaGFyLCBtX1NyY0NsaXAuSGVpZ2h0KCkgKiBtX0V4dHJhTWFza1BpdGNoKTsKKyAgICAgICAgaWYgKCFtX3BFeHRyYUFscGhhQnVmKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgRlhfRFdPUkQgc2l6ZSA9IChtX0Rlc3RDbGlwLldpZHRoKCkgKiA4ICsgMzEpIC8gMzIgKiA0OworICAgICAgICBtX3BEZXN0TWFza1NjYW5saW5lID0gRlhfQWxsb2NOTCh1bnNpZ25lZCBjaGFyLCBzaXplKTsKKyAgICAgICAgaWYgKCFtX3BEZXN0TWFza1NjYW5saW5lKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9XZWlnaHRUYWJsZS5DYWxjKG1fRGVzdFdpZHRoLCBtX0Rlc3RDbGlwLmxlZnQsIG1fRGVzdENsaXAucmlnaHQsIG1fU3JjV2lkdGgsIG1fU3JjQ2xpcC5sZWZ0LCBtX1NyY0NsaXAucmlnaHQsIG1fRmxhZ3MpOworICAgIGlmIChtX1dlaWdodFRhYmxlLm1fcFdlaWdodFRhYmxlcyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9DdXJSb3cgPSBtX1NyY0NsaXAudG9wOworICAgIG1fU3RhdGUgPSAxOworICAgIHJldHVybiBUUlVFOworfQorI2RlZmluZSBGWF9TVFJFQ0hfUEFVU0VfUk9XUwkxMAorRlhfQk9PTCBDU3RyZXRjaEVuZ2luZTo6Q29udGludWVTdHJldGNoSG9yeihJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBpZiAoIW1fRGVzdFdpZHRoKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAobV9wU291cmNlLT5Ta2lwVG9TY2FubGluZShtX0N1clJvdywgcFBhdXNlKSkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgaW50IEJwcCA9IG1fRGVzdEJwcCAvIDg7CisgICAgaW50IHJvd3NfdG9fZ28gPSBGWF9TVFJFQ0hfUEFVU0VfUk9XUzsKKyAgICBmb3IgKDsgbV9DdXJSb3cgPCBtX1NyY0NsaXAuYm90dG9tOyBtX0N1clJvdyArKykgeworICAgICAgICBpZiAocm93c190b19nbyA9PSAwKSB7CisgICAgICAgICAgICBpZiAocFBhdXNlICYmIHBQYXVzZS0+TmVlZFRvUGF1c2VOb3coKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByb3dzX3RvX2dvID0gRlhfU1RSRUNIX1BBVVNFX1JPV1M7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IG1fcFNvdXJjZS0+R2V0U2NhbmxpbmUobV9DdXJSb3cpOworICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gbV9wSW50ZXJCdWYgKyAobV9DdXJSb3cgLSBtX1NyY0NsaXAudG9wKSAqIG1fSW50ZXJQaXRjaDsKKyAgICAgICAgRlhfTFBDQllURSBzcmNfc2Nhbl9tYXNrID0gTlVMTDsKKyAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2Nhbl9tYXNrID0gTlVMTDsKKyAgICAgICAgaWYgKG1fcEV4dHJhQWxwaGFCdWYpIHsKKyAgICAgICAgICAgIHNyY19zY2FuX21hc2sgPSBtX3BTb3VyY2UtPm1fcEFscGhhTWFzay0+R2V0U2NhbmxpbmUobV9DdXJSb3cpOworICAgICAgICAgICAgZGVzdF9zY2FuX21hc2sgPSBtX3BFeHRyYUFscGhhQnVmICsgKG1fQ3VyUm93IC0gbV9TcmNDbGlwLnRvcCkgKiBtX0V4dHJhTWFza1BpdGNoOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAobV9UcmFuc01ldGhvZCkgeworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgY2FzZSAyOiB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IG1fRGVzdENsaXAubGVmdDsgY29sIDwgbV9EZXN0Q2xpcC5yaWdodDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQaXhlbFdlaWdodCogcFBpeGVsV2VpZ2h0cyA9IG1fV2VpZ2h0VGFibGUuR2V0UGl4ZWxXZWlnaHQoY29sKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X2EgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IHBQaXhlbFdlaWdodHMtPm1fU3JjU3RhcnQ7IGogPD0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNFbmQ7IGogKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxfd2VpZ2h0ID0gcFBpeGVsV2VpZ2h0cy0+bV9XZWlnaHRzW2ogLSBwUGl4ZWxXZWlnaHRzLT5tX1NyY1N0YXJ0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX3NjYW5baiAvIDhdICYgKDEgPDwgKDcgLSBqICUgOCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYSArPSBwaXhlbF93ZWlnaHQgKiAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fRmxhZ3MgJiBGWERJQl9CSUNVQklDX0lOVEVSUE9MKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9hID0gZGVzdF9hIDwgMCA/IDAgOiBkZXN0X2EgPiAxNjcxMTY4MCA/IDE2NzExNjgwIDogZGVzdF9hOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKEZYX0JZVEUpKGRlc3RfYSA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSAzOiB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IG1fRGVzdENsaXAubGVmdDsgY29sIDwgbV9EZXN0Q2xpcC5yaWdodDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQaXhlbFdlaWdodCogcFBpeGVsV2VpZ2h0cyA9IG1fV2VpZ2h0VGFibGUuR2V0UGl4ZWxXZWlnaHQoY29sKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X2EgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IHBQaXhlbFdlaWdodHMtPm1fU3JjU3RhcnQ7IGogPD0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNFbmQ7IGogKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxfd2VpZ2h0ID0gcFBpeGVsV2VpZ2h0cy0+bV9XZWlnaHRzW2ogLSBwUGl4ZWxXZWlnaHRzLT5tX1NyY1N0YXJ0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2EgKz0gcGl4ZWxfd2VpZ2h0ICogc3JjX3NjYW5bal07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9GbGFncyAmIEZYRElCX0JJQ1VCSUNfSU5URVJQT0wpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2EgPSBkZXN0X2EgPCAwID8gMCA6IGRlc3RfYSA+IDE2NzExNjgwID8gMTY3MTE2ODAgOiBkZXN0X2E7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAoRlhfQllURSkoZGVzdF9hID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIDQ6IHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gbV9EZXN0Q2xpcC5sZWZ0OyBjb2wgPCBtX0Rlc3RDbGlwLnJpZ2h0OyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsV2VpZ2h0KiBwUGl4ZWxXZWlnaHRzID0gbV9XZWlnaHRUYWJsZS5HZXRQaXhlbFdlaWdodChjb2wpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RfYSA9IDAsIGRlc3RfciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNTdGFydDsgaiA8PSBwUGl4ZWxXZWlnaHRzLT5tX1NyY0VuZDsgaiArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwaXhlbF93ZWlnaHQgPSBwUGl4ZWxXZWlnaHRzLT5tX1dlaWdodHNbaiAtIHBQaXhlbFdlaWdodHMtPm1fU3JjU3RhcnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodCA9IHBpeGVsX3dlaWdodCAqIHNyY19zY2FuX21hc2tbal0gLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9yICs9IHBpeGVsX3dlaWdodCAqIHNyY19zY2FuW2pdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYSArPSBwaXhlbF93ZWlnaHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9GbGFncyAmIEZYRElCX0JJQ1VCSUNfSU5URVJQT0wpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3IgPSBkZXN0X3IgPCAwID8gMCA6IGRlc3RfciA+IDE2NzExNjgwID8gMTY3MTE2ODAgOiBkZXN0X3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9hID0gZGVzdF9hIDwgMCA/IDAgOiBkZXN0X2EgPiA2NTUzNiA/IDY1NTM2IDogZGVzdF9hOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKEZYX0JZVEUpKGRlc3RfciA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuX21hc2srKyA9IChGWF9CWVRFKSgoZGVzdF9hICogMjU1KSA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSA1OiB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IG1fRGVzdENsaXAubGVmdDsgY29sIDwgbV9EZXN0Q2xpcC5yaWdodDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQaXhlbFdlaWdodCogcFBpeGVsV2VpZ2h0cyA9IG1fV2VpZ2h0VGFibGUuR2V0UGl4ZWxXZWlnaHQoY29sKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3JfeSA9IDAsIGRlc3RfZ19tID0gMCwgZGVzdF9iX2MgPSAwLCBkZXN0X2sgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IHBQaXhlbFdlaWdodHMtPm1fU3JjU3RhcnQ7IGogPD0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNFbmQ7IGogKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxfd2VpZ2h0ID0gcFBpeGVsV2VpZ2h0cy0+bV9XZWlnaHRzW2ogLSBwUGl4ZWxXZWlnaHRzLT5tX1NyY1N0YXJ0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFyZ2JfY215ayA9IG1fcFNyY1BhbGV0dGVbc3JjX3NjYW5bal1dOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0Rlc3RGb3JtYXQgPT0gRlhESUJfUmdiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfcl95ICs9IHBpeGVsX3dlaWdodCAqIChGWF9CWVRFKShhcmdiX2NteWsgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2dfbSArPSBwaXhlbF93ZWlnaHQgKiAoRlhfQllURSkoYXJnYl9jbXlrID4+IDgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2JfYyArPSBwaXhlbF93ZWlnaHQgKiAoRlhfQllURSlhcmdiX2NteWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9iX2MgKz0gcGl4ZWxfd2VpZ2h0ICogKEZYX0JZVEUpKGFyZ2JfY215ayA+PiAyNCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfZ19tICs9IHBpeGVsX3dlaWdodCAqIChGWF9CWVRFKShhcmdiX2NteWsgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3JfeSArPSBwaXhlbF93ZWlnaHQgKiAoRlhfQllURSkoYXJnYl9jbXlrID4+IDgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfcl95ID0gZGVzdF9yX3kgPCAwID8gMCA6IGRlc3Rfcl95ID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3Rfcl95OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfZ19tID0gZGVzdF9nX20gPCAwID8gMCA6IGRlc3RfZ19tID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfZ19tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYl9jID0gZGVzdF9iX2MgPCAwID8gMCA6IGRlc3RfYl9jID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfYl9jOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKEZYX0JZVEUpKGRlc3RfYl9jID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IChGWF9CWVRFKShkZXN0X2dfbSA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAoRlhfQllURSkoZGVzdF9yX3kgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgNjogeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSBtX0Rlc3RDbGlwLmxlZnQ7IGNvbCA8IG1fRGVzdENsaXAucmlnaHQ7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWxXZWlnaHQqIHBQaXhlbFdlaWdodHMgPSBtX1dlaWdodFRhYmxlLkdldFBpeGVsV2VpZ2h0KGNvbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF9hID0gMCwgZGVzdF9yX3kgPSAwLCBkZXN0X2dfbSA9IDAsIGRlc3RfYl9jID0gMCwgZGVzdF9rID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSBwUGl4ZWxXZWlnaHRzLT5tX1NyY1N0YXJ0OyBqIDw9IHBQaXhlbFdlaWdodHMtPm1fU3JjRW5kOyBqICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBpeGVsX3dlaWdodCA9IHBQaXhlbFdlaWdodHMtPm1fV2VpZ2h0c1tqIC0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNTdGFydF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxfd2VpZ2h0ID0gcGl4ZWxfd2VpZ2h0ICogc3JjX3NjYW5fbWFza1tqXSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFyZ2JfY215ayA9IG1fcFNyY1BhbGV0dGVbc3JjX3NjYW5bal1dOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0Rlc3RGb3JtYXQgPT0gRlhESUJfUmdiYSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3JfeSArPSBwaXhlbF93ZWlnaHQgKiAoRlhfQllURSkoYXJnYl9jbXlrID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9nX20gKz0gcGl4ZWxfd2VpZ2h0ICogKEZYX0JZVEUpKGFyZ2JfY215ayA+PiA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9iX2MgKz0gcGl4ZWxfd2VpZ2h0ICogKEZYX0JZVEUpYXJnYl9jbXlrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYl9jICs9IHBpeGVsX3dlaWdodCAqIChGWF9CWVRFKShhcmdiX2NteWsgPj4gMjQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2dfbSArPSBwaXhlbF93ZWlnaHQgKiAoRlhfQllURSkoYXJnYl9jbXlrID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9yX3kgKz0gcGl4ZWxfd2VpZ2h0ICogKEZYX0JZVEUpKGFyZ2JfY215ayA+PiA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9hICs9IHBpeGVsX3dlaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfayA9IGRlc3RfayA8IDAgPyAwIDogZGVzdF9rID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2JfYyA9IGRlc3RfYl9jIDwgMCA/IDAgOiBkZXN0X2JfYyA+IDE2NzExNjgwID8gMTY3MTE2ODAgOiBkZXN0X2JfYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2dfbSA9IGRlc3RfZ19tIDwgMCA/IDAgOiBkZXN0X2dfbSA+IDE2NzExNjgwID8gMTY3MTE2ODAgOiBkZXN0X2dfbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3JfeSA9IGRlc3Rfcl95IDwgMCA/IDAgOiBkZXN0X3JfeSA+IDE2NzExNjgwID8gMTY3MTE2ODAgOiBkZXN0X3JfeTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2EgPSBkZXN0X2EgPCAwID8gMCA6IGRlc3RfYSA+IDY1NTM2ID8gNjU1MzYgOiBkZXN0X2E7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAoRlhfQllURSkoZGVzdF9iX2MgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKEZYX0JZVEUpKGRlc3RfZ19tID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IChGWF9CWVRFKShkZXN0X3JfeSA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuX21hc2srKyA9IChGWF9CWVRFKSgoZGVzdF9hICogMjU1KSA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSA3OiB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IG1fRGVzdENsaXAubGVmdDsgY29sIDwgbV9EZXN0Q2xpcC5yaWdodDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQaXhlbFdlaWdodCogcFBpeGVsV2VpZ2h0cyA9IG1fV2VpZ2h0VGFibGUuR2V0UGl4ZWxXZWlnaHQoY29sKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3JfeSA9IDAsIGRlc3RfZ19tID0gMCwgZGVzdF9iX2MgPSAwLCBkZXN0X2sgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IHBQaXhlbFdlaWdodHMtPm1fU3JjU3RhcnQ7IGogPD0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNFbmQ7IGogKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGl4ZWxfd2VpZ2h0ID0gcFBpeGVsV2VpZ2h0cy0+bV9XZWlnaHRzW2ogLSBwUGl4ZWxXZWlnaHRzLT5tX1NyY1N0YXJ0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19waXhlbCA9IHNyY19zY2FuICsgaiAqIEJwcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2JfYyArPSBwaXhlbF93ZWlnaHQgKiAoKnNyY19waXhlbCsrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2dfbSArPSBwaXhlbF93ZWlnaHQgKiAoKnNyY19waXhlbCsrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3JfeSArPSBwaXhlbF93ZWlnaHQgKiAoKnNyY19waXhlbCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9GbGFncyAmIEZYRElCX0JJQ1VCSUNfSU5URVJQT0wpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2JfYyA9IGRlc3RfYl9jIDwgMCA/IDAgOiBkZXN0X2JfYyA+IDE2NzExNjgwID8gMTY3MTE2ODAgOiBkZXN0X2JfYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2dfbSA9IGRlc3RfZ19tIDwgMCA/IDAgOiBkZXN0X2dfbSA+IDE2NzExNjgwID8gMTY3MTE2ODAgOiBkZXN0X2dfbTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3JfeSA9IGRlc3Rfcl95IDwgMCA/IDAgOiBkZXN0X3JfeSA+IDE2NzExNjgwID8gMTY3MTE2ODAgOiBkZXN0X3JfeTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IChGWF9CWVRFKSgoZGVzdF9iX2MpID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IChGWF9CWVRFKSgoZGVzdF9nX20pID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IChGWF9CWVRFKSgoZGVzdF9yX3kpID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHAgLSAzOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgODogeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSBtX0Rlc3RDbGlwLmxlZnQ7IGNvbCA8IG1fRGVzdENsaXAucmlnaHQ7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWxXZWlnaHQqIHBQaXhlbFdlaWdodHMgPSBtX1dlaWdodFRhYmxlLkdldFBpeGVsV2VpZ2h0KGNvbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF9hID0gMCwgZGVzdF9yX3kgPSAwLCBkZXN0X2dfbSA9IDAsIGRlc3RfYl9jID0gMCwgZGVzdF9rID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSBwUGl4ZWxXZWlnaHRzLT5tX1NyY1N0YXJ0OyBqIDw9IHBQaXhlbFdlaWdodHMtPm1fU3JjRW5kOyBqICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBpeGVsX3dlaWdodCA9IHBQaXhlbFdlaWdodHMtPm1fV2VpZ2h0c1tqIC0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNTdGFydF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfcGl4ZWwgPSBzcmNfc2NhbiArIGogKiBCcHA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fRGVzdEZvcm1hdCA9PSBGWERJQl9BcmdiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsX3dlaWdodCA9IHBpeGVsX3dlaWdodCAqIHNyY19waXhlbFszXSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbF93ZWlnaHQgPSBwaXhlbF93ZWlnaHQgKiBzcmNfc2Nhbl9tYXNrW2pdIC8gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2JfYyArPSBwaXhlbF93ZWlnaHQgKiAoKnNyY19waXhlbCsrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2dfbSArPSBwaXhlbF93ZWlnaHQgKiAoKnNyY19waXhlbCsrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3JfeSArPSBwaXhlbF93ZWlnaHQgKiAoKnNyY19waXhlbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9hICs9IHBpeGVsX3dlaWdodDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfcl95ID0gZGVzdF9yX3kgPCAwID8gMCA6IGRlc3Rfcl95ID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3Rfcl95OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfZ19tID0gZGVzdF9nX20gPCAwID8gMCA6IGRlc3RfZ19tID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfZ19tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYl9jID0gZGVzdF9iX2MgPCAwID8gMCA6IGRlc3RfYl9jID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfYl9jOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYSA9IGRlc3RfYSA8IDAgPyAwIDogZGVzdF9hID4gNjU1MzYgPyA2NTUzNiA6IGRlc3RfYTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IChGWF9CWVRFKSgoZGVzdF9iX2MpID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IChGWF9CWVRFKSgoZGVzdF9nX20pID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IChGWF9CWVRFKSgoZGVzdF9yX3kpID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0Rlc3RGb3JtYXQgPT0gRlhESUJfQXJnYikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSAoRlhfQllURSkoKGRlc3RfYSAqIDI1NSkgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3Rfc2Nhbl9tYXNrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2Nhbl9tYXNrKysgPSAoRlhfQllURSkoKGRlc3RfYSAqIDI1NSkgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcCAtIDM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJvd3NfdG9fZ28gLS07CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK3ZvaWQgQ1N0cmV0Y2hFbmdpbmU6OlN0cmV0Y2hWZXJ0KCkKK3sKKyAgICBpZiAobV9EZXN0SGVpZ2h0ID09IDApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDV2VpZ2h0VGFibGUgdGFibGU7CisgICAgdGFibGUuQ2FsYyhtX0Rlc3RIZWlnaHQsIG1fRGVzdENsaXAudG9wLCBtX0Rlc3RDbGlwLmJvdHRvbSwgbV9TcmNIZWlnaHQsIG1fU3JjQ2xpcC50b3AsIG1fU3JjQ2xpcC5ib3R0b20sIG1fRmxhZ3MpOworICAgIGlmICh0YWJsZS5tX3BXZWlnaHRUYWJsZXMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludCBEZXN0QnBwID0gbV9EZXN0QnBwIC8gODsKKyAgICBmb3IgKGludCByb3cgPSBtX0Rlc3RDbGlwLnRvcDsgcm93IDwgbV9EZXN0Q2xpcC5ib3R0b207IHJvdyArKykgeworICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0X3NjYW4gPSBtX3BEZXN0U2NhbmxpbmU7CisgICAgICAgIHVuc2lnbmVkIGNoYXIqIGRlc3Rfc2Fjbl9tYXNrID0gbV9wRGVzdE1hc2tTY2FubGluZTsKKyAgICAgICAgUGl4ZWxXZWlnaHQqIHBQaXhlbFdlaWdodHMgPSB0YWJsZS5HZXRQaXhlbFdlaWdodChyb3cpOworICAgICAgICBzd2l0Y2gobV9UcmFuc01ldGhvZCkgeworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgY2FzZSAzOiB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IG1fRGVzdENsaXAubGVmdDsgY29sIDwgbV9EZXN0Q2xpcC5yaWdodDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBzcmNfc2NhbiA9IG1fcEludGVyQnVmICsgKGNvbCAtIG1fRGVzdENsaXAubGVmdCkgKiBEZXN0QnBwOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RfYSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNTdGFydDsgaiA8PSBwUGl4ZWxXZWlnaHRzLT5tX1NyY0VuZDsgaiArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwaXhlbF93ZWlnaHQgPSBwUGl4ZWxXZWlnaHRzLT5tX1dlaWdodHNbaiAtIHBQaXhlbFdlaWdodHMtPm1fU3JjU3RhcnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYSArPSBwaXhlbF93ZWlnaHQgKiBzcmNfc2NhblsoaiAtIG1fU3JjQ2xpcC50b3ApICogbV9JbnRlclBpdGNoXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYSA9IGRlc3RfYSA8IDAgPyAwIDogZGVzdF9hID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfYTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSAoRlhfQllURSkoZGVzdF9hID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBEZXN0QnBwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgNDogeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSBtX0Rlc3RDbGlwLmxlZnQ7IGNvbCA8IG1fRGVzdENsaXAucmlnaHQ7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogc3JjX3NjYW4gPSBtX3BJbnRlckJ1ZiArIChjb2wgLSBtX0Rlc3RDbGlwLmxlZnQpICogRGVzdEJwcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHNyY19zY2FuX21hc2sgPSBtX3BFeHRyYUFscGhhQnVmICsgKGNvbCAtIG1fRGVzdENsaXAubGVmdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF9hID0gMCwgZGVzdF9rID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSBwUGl4ZWxXZWlnaHRzLT5tX1NyY1N0YXJ0OyBqIDw9IHBQaXhlbFdlaWdodHMtPm1fU3JjRW5kOyBqICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBpeGVsX3dlaWdodCA9IHBQaXhlbFdlaWdodHMtPm1fV2VpZ2h0c1tqIC0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNTdGFydF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9rICs9IHBpeGVsX3dlaWdodCAqIHNyY19zY2FuWyhqIC0gbV9TcmNDbGlwLnRvcCkgKiBtX0ludGVyUGl0Y2hdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYSArPSBwaXhlbF93ZWlnaHQgKiBzcmNfc2Nhbl9tYXNrWyhqIC0gbV9TcmNDbGlwLnRvcCkgKiBtX0V4dHJhTWFza1BpdGNoXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfayA9IGRlc3RfayA8IDAgPyAwIDogZGVzdF9rID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2EgPSBkZXN0X2EgPCAwID8gMCA6IGRlc3RfYSA+IDE2NzExNjgwID8gMTY3MTE2ODAgOiBkZXN0X2E7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gKEZYX0JZVEUpKGRlc3RfayA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gRGVzdEJwcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NhY25fbWFzaysrID0gKEZYX0JZVEUpKGRlc3RfYSA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgY2FzZSA3OiB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IG1fRGVzdENsaXAubGVmdDsgY29sIDwgbV9EZXN0Q2xpcC5yaWdodDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBzcmNfc2NhbiA9IG1fcEludGVyQnVmICsgKGNvbCAtIG1fRGVzdENsaXAubGVmdCkgKiBEZXN0QnBwOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfcl95ID0gMCwgZGVzdF9nX20gPSAwLCBkZXN0X2JfYyA9IDAsIGRlc3RfayA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNTdGFydDsgaiA8PSBwUGl4ZWxXZWlnaHRzLT5tX1NyY0VuZDsgaiArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwaXhlbF93ZWlnaHQgPSBwUGl4ZWxXZWlnaHRzLT5tX1dlaWdodHNbaiAtIHBQaXhlbFdlaWdodHMtPm1fU3JjU3RhcnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3BpeGVsID0gc3JjX3NjYW4gKyAoaiAtIG1fU3JjQ2xpcC50b3ApICogbV9JbnRlclBpdGNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYl9jICs9IHBpeGVsX3dlaWdodCAqICgqc3JjX3BpeGVsKyspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfZ19tICs9IHBpeGVsX3dlaWdodCAqICgqc3JjX3BpeGVsKyspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfcl95ICs9IHBpeGVsX3dlaWdodCAqICgqc3JjX3BpeGVsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfcl95ID0gZGVzdF9yX3kgPCAwID8gMCA6IGRlc3Rfcl95ID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3Rfcl95OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfZ19tID0gZGVzdF9nX20gPCAwID8gMCA6IGRlc3RfZ19tID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfZ19tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYl9jID0gZGVzdF9iX2MgPCAwID8gMCA6IGRlc3RfYl9jID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfYl9jOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gKEZYX0JZVEUpKChkZXN0X2JfYykgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gKEZYX0JZVEUpKChkZXN0X2dfbSkgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gKEZYX0JZVEUpKChkZXN0X3JfeSkgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IERlc3RCcHA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSA2OgorICAgICAgICAgICAgY2FzZSA4OiB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IG1fRGVzdENsaXAubGVmdDsgY29sIDwgbV9EZXN0Q2xpcC5yaWdodDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBzcmNfc2NhbiA9IG1fcEludGVyQnVmICsgKGNvbCAtIG1fRGVzdENsaXAubGVmdCkgKiBEZXN0QnBwOworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogc3JjX3NjYW5fbWFzayA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9EZXN0Rm9ybWF0ICE9IEZYRElCX0FyZ2IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2Nhbl9tYXNrID0gbV9wRXh0cmFBbHBoYUJ1ZiArIChjb2wgLSBtX0Rlc3RDbGlwLmxlZnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RfYSA9IDAsIGRlc3RfayA9IDAsIGRlc3Rfcl95ID0gMCwgZGVzdF9nX20gPSAwLCBkZXN0X2JfYyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gcFBpeGVsV2VpZ2h0cy0+bV9TcmNTdGFydDsgaiA8PSBwUGl4ZWxXZWlnaHRzLT5tX1NyY0VuZDsgaiArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwaXhlbF93ZWlnaHQgPSBwUGl4ZWxXZWlnaHRzLT5tX1dlaWdodHNbaiAtIHBQaXhlbFdlaWdodHMtPm1fU3JjU3RhcnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3BpeGVsID0gc3JjX3NjYW4gKyAoaiAtIG1fU3JjQ2xpcC50b3ApICogbV9JbnRlclBpdGNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXNrX3YgPSAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19zY2FuX21hc2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza192ID0gc3JjX3NjYW5fbWFza1soaiAtIG1fU3JjQ2xpcC50b3ApICogbV9FeHRyYU1hc2tQaXRjaF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYl9jICs9IHBpeGVsX3dlaWdodCAqICgqc3JjX3BpeGVsKyspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfZ19tICs9IHBpeGVsX3dlaWdodCAqICgqc3JjX3BpeGVsKyspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfcl95ICs9IHBpeGVsX3dlaWdodCAqICgqc3JjX3BpeGVsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9EZXN0Rm9ybWF0ID09IEZYRElCX0FyZ2IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9hICs9IHBpeGVsX3dlaWdodCAqICgqKHNyY19waXhlbCArIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2EgKz0gcGl4ZWxfd2VpZ2h0ICogbWFza192OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0ZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfcl95ID0gZGVzdF9yX3kgPCAwID8gMCA6IGRlc3Rfcl95ID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3Rfcl95OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfZ19tID0gZGVzdF9nX20gPCAwID8gMCA6IGRlc3RfZ19tID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfZ19tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYl9jID0gZGVzdF9iX2MgPCAwID8gMCA6IGRlc3RfYl9jID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfYl9jOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfYSA9IGRlc3RfYSA8IDAgPyAwIDogZGVzdF9hID4gMTY3MTE2ODAgPyAxNjcxMTY4MCA6IGRlc3RfYTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXN0X2EpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgciA9ICgoRlhfRFdPUkQpZGVzdF9yX3kpICogMjU1IC8gZGVzdF9hOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBnID0gKChGWF9EV09SRClkZXN0X2dfbSkgKiAyNTUgLyBkZXN0X2E7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGIgPSAoKEZYX0RXT1JEKWRlc3RfYl9jKSAqIDI1NSAvIGRlc3RfYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBiID4gMjU1ID8gMjU1IDogYiA8IDAgPyAwIDogYjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBnID4gMjU1ID8gMjU1IDogZyA8IDAgPyAwIDogZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSByID4gMjU1ID8gMjU1IDogciA8IDAgPyAwIDogcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX0Rlc3RGb3JtYXQgPT0gRlhESUJfQXJnYikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IChGWF9CWVRFKSgoZGVzdF9hKSA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NhY25fbWFzayA9IChGWF9CWVRFKSgoZGVzdF9hKSA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gRGVzdEJwcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXN0X3NhY25fbWFzaykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2Fjbl9tYXNrKys7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fcERlc3RCaXRtYXAtPkNvbXBvc2VTY2FubGluZShyb3cgLSBtX0Rlc3RDbGlwLnRvcCwgbV9wRGVzdFNjYW5saW5lLCBtX3BEZXN0TWFza1NjYW5saW5lKTsKKyAgICB9Cit9CitDRlhfSW1hZ2VTdHJldGNoZXI6OkNGWF9JbWFnZVN0cmV0Y2hlcigpCit7CisgICAgbV9wU2NhbmxpbmUgPSBOVUxMOworICAgIG1fcFN0cmV0Y2hFbmdpbmUgPSBOVUxMOworICAgIG1fcE1hc2tTY2FubGluZSA9IE5VTEw7Cit9CitDRlhfSW1hZ2VTdHJldGNoZXI6On5DRlhfSW1hZ2VTdHJldGNoZXIoKQoreworICAgIGlmIChtX3BTY2FubGluZSkgeworICAgICAgICBGWF9GcmVlKG1fcFNjYW5saW5lKTsKKyAgICB9CisgICAgaWYgKG1fcFN0cmV0Y2hFbmdpbmUpIHsKKyAgICAgICAgZGVsZXRlIG1fcFN0cmV0Y2hFbmdpbmU7CisgICAgfQorICAgIGlmIChtX3BNYXNrU2NhbmxpbmUpIHsKKyAgICAgICAgRlhfRnJlZShtX3BNYXNrU2NhbmxpbmUpOworICAgIH0KK30KK0ZYRElCX0Zvcm1hdCBfR2V0U3RyZXRjaGVkRm9ybWF0KGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmMpCit7CisgICAgRlhESUJfRm9ybWF0IGZvcm1hdCA9IHBTcmMtPkdldEZvcm1hdCgpOworICAgIGlmIChmb3JtYXQgPT0gRlhESUJfMWJwcE1hc2spIHsKKyAgICAgICAgZm9ybWF0ID0gRlhESUJfOGJwcE1hc2s7CisgICAgfSBlbHNlIGlmIChmb3JtYXQgPT0gRlhESUJfMWJwcFJnYikgeworICAgICAgICBmb3JtYXQgPSBGWERJQl84YnBwUmdiOworICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09IEZYRElCXzhicHBSZ2IpIHsKKyAgICAgICAgaWYgKHBTcmMtPkdldFBhbGV0dGUoKSkgeworICAgICAgICAgICAgZm9ybWF0ID0gRlhESUJfUmdiOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmb3JtYXQ7Cit9CitGWF9CT09MIENGWF9JbWFnZVN0cmV0Y2hlcjo6U3RhcnQoSUZYX1NjYW5saW5lQ29tcG9zZXIqIHBEZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTb3VyY2UsIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRlhfUkVDVCYgcmVjdCwgRlhfRFdPUkQgZmxhZ3MpCit7CisgICAgbV9EZXN0Rm9ybWF0ID0gX0dldFN0cmV0Y2hlZEZvcm1hdChwU291cmNlKTsKKyAgICBtX0Rlc3RCUFAgPSBtX0Rlc3RGb3JtYXQgJiAweGZmOworICAgIG1fcERlc3QgPSBwRGVzdDsKKyAgICBtX3BTb3VyY2UgPSBwU291cmNlOworICAgIG1fRGVzdFdpZHRoID0gZGVzdF93aWR0aDsKKyAgICBtX0Rlc3RIZWlnaHQgPSBkZXN0X2hlaWdodDsKKyAgICBtX0NsaXBSZWN0ID0gcmVjdDsKKyAgICBtX0ZsYWdzID0gZmxhZ3M7CisgICAgaWYgKHBTb3VyY2UtPkdldEZvcm1hdCgpID09IEZYRElCXzFicHBSZ2IgJiYgcFNvdXJjZS0+R2V0UGFsZXR0ZSgpKSB7CisgICAgICAgIEZYX0FSR0IgcGFsWzI1Nl07CisgICAgICAgIGludCBhMCwgcjAsIGcwLCBiMCwgYTEsIHIxLCBnMSwgYjE7CisgICAgICAgIEFyZ2JEZWNvZGUocFNvdXJjZS0+R2V0UGFsZXR0ZUVudHJ5KDApLCBhMCwgcjAsIGcwLCBiMCk7CisgICAgICAgIEFyZ2JEZWNvZGUocFNvdXJjZS0+R2V0UGFsZXR0ZUVudHJ5KDEpLCBhMSwgcjEsIGcxLCBiMSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7CisgICAgICAgICAgICBpbnQgYSA9IGEwICsgKGExIC0gYTApICogaSAvIDI1NTsKKyAgICAgICAgICAgIGludCByID0gcjAgKyAocjEgLSByMCkgKiBpIC8gMjU1OworICAgICAgICAgICAgaW50IGcgPSBnMCArIChnMSAtIGcwKSAqIGkgLyAyNTU7CisgICAgICAgICAgICBpbnQgYiA9IGIwICsgKGIxIC0gYjApICogaSAvIDI1NTsKKyAgICAgICAgICAgIHBhbFtpXSA9IEFyZ2JFbmNvZGUoYSwgciwgZywgYik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFwRGVzdC0+U2V0SW5mbyhyZWN0LldpZHRoKCksIHJlY3QuSGVpZ2h0KCksIG1fRGVzdEZvcm1hdCwgcGFsKSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChwU291cmNlLT5HZXRGb3JtYXQoKSA9PSBGWERJQl8xYnBwQ215ayAmJiBwU291cmNlLT5HZXRQYWxldHRlKCkpIHsKKyAgICAgICAgRlhfQ01ZSyBwYWxbMjU2XTsKKyAgICAgICAgaW50IGMwLCBtMCwgeTAsIGswLCBjMSwgbTEsIHkxLCBrMTsKKyAgICAgICAgQ215a0RlY29kZShwU291cmNlLT5HZXRQYWxldHRlRW50cnkoMCksIGMwLCBtMCwgeTAsIGswKTsKKyAgICAgICAgQ215a0RlY29kZShwU291cmNlLT5HZXRQYWxldHRlRW50cnkoMSksIGMxLCBtMSwgeTEsIGsxKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsKKyAgICAgICAgICAgIGludCBjID0gYzAgKyAoYzEgLSBjMCkgKiBpIC8gMjU1OworICAgICAgICAgICAgaW50IG0gPSBtMCArIChtMSAtIG0wKSAqIGkgLyAyNTU7CisgICAgICAgICAgICBpbnQgeSA9IHkwICsgKHkxIC0geTApICogaSAvIDI1NTsKKyAgICAgICAgICAgIGludCBrID0gazAgKyAoazEgLSBrMCkgKiBpIC8gMjU1OworICAgICAgICAgICAgcGFsW2ldID0gQ215a0VuY29kZShjLCBtLCB5LCBrKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXBEZXN0LT5TZXRJbmZvKHJlY3QuV2lkdGgoKSwgcmVjdC5IZWlnaHQoKSwgbV9EZXN0Rm9ybWF0LCBwYWwpKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCFwRGVzdC0+U2V0SW5mbyhyZWN0LldpZHRoKCksIHJlY3QuSGVpZ2h0KCksIG1fRGVzdEZvcm1hdCwgTlVMTCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoZmxhZ3MgJiBGWERJQl9ET1dOU0FNUExFKSB7CisgICAgICAgIHJldHVybiBTdGFydFF1aWNrU3RyZXRjaCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBTdGFydFN0cmV0Y2goKTsKKyAgICB9Cit9CitGWF9CT09MIENGWF9JbWFnZVN0cmV0Y2hlcjo6Q29udGludWUoSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgaWYgKG1fRmxhZ3MgJiBGWERJQl9ET1dOU0FNUExFKSB7CisgICAgICAgIHJldHVybiBDb250aW51ZVF1aWNrU3RyZXRjaChwUGF1c2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBDb250aW51ZVN0cmV0Y2gocFBhdXNlKTsKKyAgICB9Cit9CisjaWZuZGVmIF9GUERGQVBJX01JTklfCisjZGVmaW5lIE1BWF9QUk9HUkVTU0lWRV9TVFJFVENIX1BJWEVMUwkxMDAwMDAwCisjZWxzZQorI2RlZmluZSBNQVhfUFJPR1JFU1NJVkVfU1RSRVRDSF9QSVhFTFMJMTAwMDAwCisjZW5kaWYKK0ZYX0JPT0wgQ0ZYX0ltYWdlU3RyZXRjaGVyOjpTdGFydFN0cmV0Y2goKQoreworICAgIG1fcFN0cmV0Y2hFbmdpbmUgPSBGWF9ORVcgQ1N0cmV0Y2hFbmdpbmUobV9wRGVzdCwgbV9EZXN0Rm9ybWF0LCBtX0Rlc3RXaWR0aCwgbV9EZXN0SGVpZ2h0LCBtX0NsaXBSZWN0LCBtX3BTb3VyY2UsIG1fRmxhZ3MpOworICAgIGlmICghbV9wU3RyZXRjaEVuZ2luZSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fcFN0cmV0Y2hFbmdpbmUtPlN0YXJ0U3RyZXRjaEhvcnooKTsKKyAgICBpZiAobV9wU291cmNlLT5HZXRXaWR0aCgpICogbV9wU291cmNlLT5HZXRIZWlnaHQoKSA8IE1BWF9QUk9HUkVTU0lWRV9TVFJFVENIX1BJWEVMUykgeworICAgICAgICBtX3BTdHJldGNoRW5naW5lLT5Db250aW51ZShOVUxMKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0ZYX0ltYWdlU3RyZXRjaGVyOjpDb250aW51ZVN0cmV0Y2goSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgaWYgKG1fcFN0cmV0Y2hFbmdpbmUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBtX3BTdHJldGNoRW5naW5lLT5Db250aW51ZShwUGF1c2UpOworfQorRlhfQk9PTCBDRlhfSW1hZ2VTdHJldGNoZXI6OlN0YXJ0UXVpY2tTdHJldGNoKCkKK3sKKyNpZmRlZiBfRlBERkFQSV9NSU5JXworICAgIG1fcFNvdXJjZS0+U2V0RG93blNhbXBsZVNpemUobV9EZXN0V2lkdGgsIG1fRGVzdEhlaWdodCk7CisjZW5kaWYKKyAgICBtX2JGbGlwWCA9IEZBTFNFOworICAgIG1fYkZsaXBZID0gRkFMU0U7CisgICAgaWYgKG1fRGVzdFdpZHRoIDwgMCkgeworICAgICAgICBtX2JGbGlwWCA9IFRSVUU7CisgICAgICAgIG1fRGVzdFdpZHRoID0gLW1fRGVzdFdpZHRoOworICAgIH0KKyAgICBpZiAobV9EZXN0SGVpZ2h0IDwgMCkgeworICAgICAgICBtX2JGbGlwWSA9IFRSVUU7CisgICAgICAgIG1fRGVzdEhlaWdodCA9IC1tX0Rlc3RIZWlnaHQ7CisgICAgfQorICAgIG1fTGluZUluZGV4ID0gMDsKKyAgICBGWF9EV09SRCBzaXplID0gbV9DbGlwUmVjdC5XaWR0aCgpOworICAgIGlmIChzaXplICYmIG1fRGVzdEJQUCA+IChpbnQpKElOVF9NQVggLyBzaXplKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHNpemUgKj0gbV9EZXN0QlBQOworICAgIG1fcFNjYW5saW5lID0gRlhfQWxsb2MoRlhfQllURSwgKHNpemUgLyA4ICsgMykgLyA0ICogNCk7CisgICAgaWYgKCFtX3BTY2FubGluZSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChtX3BTb3VyY2UtPm1fcEFscGhhTWFzaykgeworICAgICAgICBtX3BNYXNrU2NhbmxpbmUgPSBGWF9BbGxvYyhGWF9CWVRFLCAobV9DbGlwUmVjdC5XaWR0aCgpICsgMykgLyA0ICogNCk7CisgICAgICAgIGlmICghbV9wTWFza1NjYW5saW5lKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1fcFNvdXJjZS0+R2V0V2lkdGgoKSAqIG1fcFNvdXJjZS0+R2V0SGVpZ2h0KCkgPCBNQVhfUFJPR1JFU1NJVkVfU1RSRVRDSF9QSVhFTFMpIHsKKyAgICAgICAgQ29udGludWVRdWlja1N0cmV0Y2goTlVMTCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENGWF9JbWFnZVN0cmV0Y2hlcjo6Q29udGludWVRdWlja1N0cmV0Y2goSUZYX1BhdXNlKiBwUGF1c2UpCit7CisgICAgaWYgKG1fcFNjYW5saW5lID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpbnQgcmVzdWx0X3dpZHRoID0gbV9DbGlwUmVjdC5XaWR0aCgpLCByZXN1bHRfaGVpZ2h0ID0gbV9DbGlwUmVjdC5IZWlnaHQoKTsKKyAgICBpbnQgc3JjX3dpZHRoID0gbV9wU291cmNlLT5HZXRXaWR0aCgpLCBzcmNfaGVpZ2h0ID0gbV9wU291cmNlLT5HZXRIZWlnaHQoKTsKKyAgICBmb3IgKDsgbV9MaW5lSW5kZXggPCByZXN1bHRfaGVpZ2h0OyBtX0xpbmVJbmRleCArKykgeworICAgICAgICBpbnQgZGVzdF95LCBzcmNfeTsKKyAgICAgICAgaWYgKG1fYkZsaXBZKSB7CisgICAgICAgICAgICBkZXN0X3kgPSByZXN1bHRfaGVpZ2h0IC0gbV9MaW5lSW5kZXggLSAxOworICAgICAgICAgICAgc3JjX3kgPSAobV9EZXN0SGVpZ2h0IC0gKGRlc3RfeSArIG1fQ2xpcFJlY3QudG9wKSAtIDEpICogc3JjX2hlaWdodCAvIG1fRGVzdEhlaWdodDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlc3RfeSA9IG1fTGluZUluZGV4OworICAgICAgICAgICAgc3JjX3kgPSAoZGVzdF95ICsgbV9DbGlwUmVjdC50b3ApICogc3JjX2hlaWdodCAvIG1fRGVzdEhlaWdodDsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3JjX3kgPj0gc3JjX2hlaWdodCkgeworICAgICAgICAgICAgc3JjX3kgPSBzcmNfaGVpZ2h0IC0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3JjX3kgPCAwKSB7CisgICAgICAgICAgICBzcmNfeSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fcFNvdXJjZS0+U2tpcFRvU2NhbmxpbmUoc3JjX3ksIHBQYXVzZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIG1fcFNvdXJjZS0+RG93blNhbXBsZVNjYW5saW5lKHNyY195LCBtX3BTY2FubGluZSwgbV9EZXN0QlBQLCBtX0Rlc3RXaWR0aCwgbV9iRmxpcFgsIG1fQ2xpcFJlY3QubGVmdCwgcmVzdWx0X3dpZHRoKTsKKyAgICAgICAgRlhfTFBCWVRFIHNjYW5fZXh0cmFfYWxwaGEgPSBOVUxMOworICAgICAgICBpZiAobV9wTWFza1NjYW5saW5lKSB7CisgICAgICAgICAgICBtX3BTb3VyY2UtPm1fcEFscGhhTWFzay0+RG93blNhbXBsZVNjYW5saW5lKHNyY195LCBtX3BNYXNrU2NhbmxpbmUsIDEsIG1fRGVzdFdpZHRoLCBtX2JGbGlwWCwgbV9DbGlwUmVjdC5sZWZ0LCByZXN1bHRfd2lkdGgpOworICAgICAgICB9CisgICAgICAgIG1fcERlc3QtPkNvbXBvc2VTY2FubGluZShkZXN0X3ksIG1fcFNjYW5saW5lLCBtX3BNYXNrU2NhbmxpbmUpOworICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGdlL2RpYi9meF9kaWJfbWFpbi5jcHAgYi9jb3JlL3NyYy9meGdlL2RpYi9meF9kaWJfbWFpbi5jcHAKaW5kZXggMDk1M2YyZC4uOWIyN2ExMyAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhnZS9kaWIvZnhfZGliX21haW4uY3BwCisrKyBiL2NvcmUvc3JjL2Z4Z2UvZGliL2Z4X2RpYl9tYWluLmNwcApAQCAtMSwxNzM0ICsxLDE3MzQgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZGliLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZS5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaCINCi0jaW5jbHVkZSAiZGliX2ludC5oIg0KLSNpbmNsdWRlIDxsaW1pdHMuaD4NCi1GWF9CT09MIENvbnZlcnRCdWZmZXIoRlhESUJfRm9ybWF0IGRlc3RfZm9ybWF0LCBGWF9MUEJZVEUgZGVzdF9idWYsIGludCBkZXN0X3BpdGNoLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3AsIEZYX0RXT1JEKiYgcGFsLCB2b2lkKiBwSWNjVHJhbnNmb3JtKTsNCi12b2lkIENteWtEZWNvZGUoRlhfRFdPUkQgY215aywgaW50JiBjLCBpbnQmIG0sIGludCYgeSwgaW50JiBrKQ0KLXsNCi0gICAgYyA9IEZYU1lTX0dldENWYWx1ZShjbXlrKTsNCi0gICAgbSA9IEZYU1lTX0dldE1WYWx1ZShjbXlrKTsNCi0gICAgeSA9IEZYU1lTX0dldFlWYWx1ZShjbXlrKTsNCi0gICAgayA9IEZYU1lTX0dldEtWYWx1ZShjbXlrKTsNCi19DQotdm9pZCBBcmdiRGVjb2RlKEZYX0RXT1JEIGFyZ2IsIGludCYgYSwgaW50JiByLCBpbnQmIGcsIGludCYgYikNCi17DQotICAgIGEgPSBGWEFSR0JfQShhcmdiKTsNCi0gICAgciA9IEZYQVJHQl9SKGFyZ2IpOw0KLSAgICBnID0gRlhBUkdCX0coYXJnYik7DQotICAgIGIgPSBGWEFSR0JfQihhcmdiKTsNCi19DQotdm9pZCBBcmdiRGVjb2RlKEZYX0RXT1JEIGFyZ2IsIGludCYgYSwgRlhfQ09MT1JSRUYmIHJnYikNCi17DQotICAgIGEgPSBGWEFSR0JfQShhcmdiKTsNCi0gICAgcmdiID0gRlhTWVNfUkdCKEZYQVJHQl9SKGFyZ2IpLCBGWEFSR0JfRyhhcmdiKSwgRlhBUkdCX0IoYXJnYikpOw0KLX0NCi1GWF9EV09SRCBBcmdiRW5jb2RlKGludCBhLCBGWF9DT0xPUlJFRiByZ2IpDQotew0KLSAgICByZXR1cm4gRlhBUkdCX01BS0UoYSwgRlhTWVNfR2V0UlZhbHVlKHJnYiksIEZYU1lTX0dldEdWYWx1ZShyZ2IpLCBGWFNZU19HZXRCVmFsdWUocmdiKSk7DQotfQ0KLUNGWF9ESUJTb3VyY2U6OkNGWF9ESUJTb3VyY2UoKQ0KLXsNCi0gICAgbV9icHAgPSAwOw0KLSAgICBtX0FscGhhRmxhZyA9IDA7DQotICAgIG1fV2lkdGggPSBtX0hlaWdodCA9IDA7DQotICAgIG1fUGl0Y2ggPSAwOw0KLSAgICBtX3BQYWxldHRlID0gTlVMTDsNCi0gICAgbV9wQWxwaGFNYXNrID0gTlVMTDsNCi19DQotQ0ZYX0RJQlNvdXJjZTo6fkNGWF9ESUJTb3VyY2UoKQ0KLXsNCi0gICAgaWYgKG1fcFBhbGV0dGUpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wUGFsZXR0ZSk7DQotICAgIH0NCi0gICAgaWYgKG1fcEFscGhhTWFzaykgew0KLSAgICAgICAgZGVsZXRlIG1fcEFscGhhTWFzazsNCi0gICAgfQ0KLX0NCi1DRlhfRElCaXRtYXA6OkNGWF9ESUJpdG1hcCgpDQotew0KLSAgICBtX2JFeHRCdWYgPSBGQUxTRTsNCi0gICAgbV9wQnVmZmVyID0gTlVMTDsNCi0gICAgbV9wUGFsZXR0ZSA9IE5VTEw7DQotfQ0KLSNkZWZpbmUgX01BWF9PT01fTElNSVRfCTEyMDAwMDAwDQotRlhfQk9PTCBDRlhfRElCaXRtYXA6OkNyZWF0ZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIEZYRElCX0Zvcm1hdCBmb3JtYXQsIEZYX0xQQllURSBwQnVmZmVyLCBpbnQgcGl0Y2gpDQotew0KLSAgICBtX3BCdWZmZXIgPSBOVUxMOw0KLSAgICBtX2JwcCA9IChGWF9CWVRFKWZvcm1hdDsNCi0gICAgbV9BbHBoYUZsYWcgPSAoRlhfQllURSkoZm9ybWF0ID4+IDgpOw0KLSAgICBtX1dpZHRoID0gbV9IZWlnaHQgPSBtX1BpdGNoID0gMDsNCi0gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAgfHwgcGl0Y2ggPCAwKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKChJTlRfTUFYIC0gMzEpIC8gd2lkdGggPCAoZm9ybWF0ICYgMHhmZikpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoIXBpdGNoKSB7DQotICAgICAgICBwaXRjaCA9ICh3aWR0aCAqIChmb3JtYXQgJiAweGZmKSArIDMxKSAvIDMyICogNDsNCi0gICAgfQ0KLSAgICBpZiAoKDEgPDwgMzApIC8gcGl0Y2ggPCBoZWlnaHQpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAocEJ1ZmZlcikgew0KLSAgICAgICAgbV9wQnVmZmVyID0gcEJ1ZmZlcjsNCi0gICAgICAgIG1fYkV4dEJ1ZiA9IFRSVUU7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpbnQgc2l6ZSA9IHBpdGNoICogaGVpZ2h0ICsgNDsNCi0gICAgICAgIGludCBvb21saW1pdCA9IF9NQVhfT09NX0xJTUlUXzsNCi0gICAgICAgIGlmIChvb21saW1pdCA+PSAwICYmIHNpemUgPj0gb29tbGltaXQpIHsNCi0gICAgICAgICAgICBtX3BCdWZmZXIgPSBGWF9BbGxvY05MKEZYX0JZVEUsIHNpemUpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBtX3BCdWZmZXIgPSBGWF9BbGxvYyhGWF9CWVRFLCBzaXplKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX3BCdWZmZXIgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYU1lTX21lbXNldDMyKG1fcEJ1ZmZlciwgMCwgc2l6ZW9mIChGWF9CWVRFKSAqIHNpemUpOw0KLSAgICB9DQotICAgIG1fV2lkdGggPSB3aWR0aDsNCi0gICAgbV9IZWlnaHQgPSBoZWlnaHQ7DQotICAgIG1fUGl0Y2ggPSBwaXRjaDsNCi0gICAgaWYgKEhhc0FscGhhKCkgJiYgZm9ybWF0ICE9IEZYRElCX0FyZ2IpIHsNCi0gICAgICAgIEZYX0JPT0wgcmV0ID0gVFJVRTsNCi0gICAgICAgIHJldCA9IEJ1aWxkQWxwaGFNYXNrKCk7DQotICAgICAgICBpZiAoIXJldCkgew0KLSAgICAgICAgICAgIGlmICghbV9iRXh0QnVmICYmIG1fcEJ1ZmZlcikgew0KLSAgICAgICAgICAgICAgICBGWF9GcmVlKG1fcEJ1ZmZlcik7DQotICAgICAgICAgICAgICAgIG1fcEJ1ZmZlciA9IE5VTEw7DQotICAgICAgICAgICAgICAgIG1fV2lkdGggPSBtX0hlaWdodCA9IG1fUGl0Y2ggPSAwOw0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENGWF9ESUJpdG1hcDo6Q29weShjb25zdCBDRlhfRElCU291cmNlKiBwU3JjKQ0KLXsNCi0gICAgaWYgKG1fcEJ1ZmZlcikgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmICghQ3JlYXRlKHBTcmMtPkdldFdpZHRoKCksIHBTcmMtPkdldEhlaWdodCgpLCBwU3JjLT5HZXRGb3JtYXQoKSkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDb3B5UGFsZXR0ZShwU3JjLT5HZXRQYWxldHRlKCkpOw0KLSAgICBDb3B5QWxwaGFNYXNrKHBTcmMtPm1fcEFscGhhTWFzayk7DQotICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHBTcmMtPkdldEhlaWdodCgpOyByb3cgKyspIHsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKG1fcEJ1ZmZlciArIHJvdyAqIG1fUGl0Y2gsIHBTcmMtPkdldFNjYW5saW5lKHJvdyksIG1fUGl0Y2gpOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1DRlhfRElCaXRtYXA6On5DRlhfRElCaXRtYXAoKQ0KLXsNCi0gICAgaWYgKG1fcEJ1ZmZlciAmJiAhbV9iRXh0QnVmKSB7DQotICAgICAgICBGWF9GcmVlKG1fcEJ1ZmZlcik7DQotICAgIH0NCi0gICAgbV9wQnVmZmVyID0gTlVMTDsNCi19DQotdm9pZCBDRlhfRElCaXRtYXA6OlRha2VPdmVyKENGWF9ESUJpdG1hcCogcFNyY0JpdG1hcCkNCi17DQotICAgIGlmIChtX3BCdWZmZXIgJiYgIW1fYkV4dEJ1Zikgew0KLSAgICAgICAgRlhfRnJlZShtX3BCdWZmZXIpOw0KLSAgICB9DQotICAgIGlmIChtX3BQYWxldHRlKSB7DQotICAgICAgICBGWF9GcmVlKG1fcFBhbGV0dGUpOw0KLSAgICB9DQotICAgIGlmIChtX3BBbHBoYU1hc2spIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BBbHBoYU1hc2s7DQotICAgIH0NCi0gICAgbV9wQnVmZmVyID0gcFNyY0JpdG1hcC0+bV9wQnVmZmVyOw0KLSAgICBtX3BQYWxldHRlID0gcFNyY0JpdG1hcC0+bV9wUGFsZXR0ZTsNCi0gICAgbV9wQWxwaGFNYXNrID0gcFNyY0JpdG1hcC0+bV9wQWxwaGFNYXNrOw0KLSAgICBwU3JjQml0bWFwLT5tX3BCdWZmZXIgPSBOVUxMOw0KLSAgICBwU3JjQml0bWFwLT5tX3BQYWxldHRlID0gTlVMTDsNCi0gICAgcFNyY0JpdG1hcC0+bV9wQWxwaGFNYXNrID0gTlVMTDsNCi0gICAgbV9icHAgPSBwU3JjQml0bWFwLT5tX2JwcDsNCi0gICAgbV9iRXh0QnVmID0gcFNyY0JpdG1hcC0+bV9iRXh0QnVmOw0KLSAgICBtX0FscGhhRmxhZyA9IHBTcmNCaXRtYXAtPm1fQWxwaGFGbGFnOw0KLSAgICBtX1dpZHRoID0gcFNyY0JpdG1hcC0+bV9XaWR0aDsNCi0gICAgbV9IZWlnaHQgPSBwU3JjQml0bWFwLT5tX0hlaWdodDsNCi0gICAgbV9QaXRjaCA9IHBTcmNCaXRtYXAtPm1fUGl0Y2g7DQotfQ0KLUNGWF9ESUJpdG1hcCogQ0ZYX0RJQlNvdXJjZTo6Q2xvbmUoY29uc3QgRlhfUkVDVCogcENsaXApIGNvbnN0DQotew0KLSAgICBGWF9SRUNUIHJlY3QoMCwgMCwgbV9XaWR0aCwgbV9IZWlnaHQpOw0KLSAgICBpZiAocENsaXApIHsNCi0gICAgICAgIHJlY3QuSW50ZXJzZWN0KCpwQ2xpcCk7DQotICAgICAgICBpZiAocmVjdC5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBDRlhfRElCaXRtYXAqIHBOZXdCaXRtYXAgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOw0KLSAgICBpZiAoIXBOZXdCaXRtYXApIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmICghcE5ld0JpdG1hcC0+Q3JlYXRlKHJlY3QuV2lkdGgoKSwgcmVjdC5IZWlnaHQoKSwgR2V0Rm9ybWF0KCkpKSB7DQotICAgICAgICBkZWxldGUgcE5ld0JpdG1hcDsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHBOZXdCaXRtYXAtPkNvcHlQYWxldHRlKG1fcFBhbGV0dGUpOw0KLSAgICBwTmV3Qml0bWFwLT5Db3B5QWxwaGFNYXNrKG1fcEFscGhhTWFzaywgcENsaXApOw0KLSAgICBpZiAoR2V0QlBQKCkgPT0gMSAmJiByZWN0LmxlZnQgJSA4ICE9IDApIHsNCi0gICAgICAgIGludCBsZWZ0X3NoaWZ0ID0gcmVjdC5sZWZ0ICUgMzI7DQotICAgICAgICBpbnQgcmlnaHRfc2hpZnQgPSAzMiAtIGxlZnRfc2hpZnQ7DQotICAgICAgICBpbnQgZHdvcmRfY291bnQgPSBwTmV3Qml0bWFwLT5tX1BpdGNoIC8gNDsNCi0gICAgICAgIGZvciAoaW50IHJvdyA9IHJlY3QudG9wOyByb3cgPCByZWN0LmJvdHRvbTsgcm93ICsrKSB7DQotICAgICAgICAgICAgRlhfRFdPUkQqIHNyY19zY2FuID0gKEZYX0RXT1JEKilHZXRTY2FubGluZShyb3cpICsgcmVjdC5sZWZ0IC8gMzI7DQotICAgICAgICAgICAgRlhfRFdPUkQqIGRlc3Rfc2NhbiA9IChGWF9EV09SRCopcE5ld0JpdG1hcC0+R2V0U2NhbmxpbmUocm93IC0gcmVjdC50b3ApOw0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZHdvcmRfY291bnQ7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuW2ldID0gKHNyY19zY2FuW2ldIDw8IGxlZnRfc2hpZnQpIHwgKHNyY19zY2FuW2kgKyAxXSA+PiByaWdodF9zaGlmdCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaW50IGNvcHlfbGVuID0gKHBOZXdCaXRtYXAtPkdldFdpZHRoKCkgKiBwTmV3Qml0bWFwLT5HZXRCUFAoKSArIDcpIC8gODsNCi0gICAgICAgIGlmIChtX1BpdGNoIDwgKEZYX0RXT1JEKWNvcHlfbGVuKSB7DQotICAgICAgICAgICAgY29weV9sZW4gPSBtX1BpdGNoOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yIChpbnQgcm93ID0gcmVjdC50b3A7IHJvdyA8IHJlY3QuYm90dG9tOyByb3cgKyspIHsNCi0gICAgICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gR2V0U2NhbmxpbmUocm93KSArIHJlY3QubGVmdCAqIG1fYnBwIC8gODsNCi0gICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gKEZYX0xQQllURSlwTmV3Qml0bWFwLT5HZXRTY2FubGluZShyb3cgLSByZWN0LnRvcCk7DQotICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIoZGVzdF9zY2FuLCBzcmNfc2NhbiwgY29weV9sZW4pOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBwTmV3Qml0bWFwOw0KLX0NCi12b2lkIENGWF9ESUJTb3VyY2U6OkJ1aWxkUGFsZXR0ZSgpDQotew0KLSAgICBpZiAobV9wUGFsZXR0ZSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChHZXRCUFAoKSA9PSAxKSB7DQotICAgICAgICBtX3BQYWxldHRlID0gRlhfQWxsb2MoRlhfRFdPUkQsIDIpOw0KLSAgICAgICAgaWYgKCFtX3BQYWxldHRlKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYoSXNDbXlrSW1hZ2UoKSkgew0KLSAgICAgICAgICAgIG1fcFBhbGV0dGVbMF0gPSAweGZmOw0KLSAgICAgICAgICAgIG1fcFBhbGV0dGVbMV0gPSAwOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBtX3BQYWxldHRlWzBdID0gMHhmZjAwMDAwMDsNCi0gICAgICAgICAgICBtX3BQYWxldHRlWzFdID0gMHhmZmZmZmZmZjsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIGlmIChHZXRCUFAoKSA9PSA4KSB7DQotICAgICAgICBtX3BQYWxldHRlID0gRlhfQWxsb2MoRlhfRFdPUkQsIDI1Nik7DQotICAgICAgICBpZiAoIW1fcFBhbGV0dGUpIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBpZihJc0NteWtJbWFnZSgpKSB7DQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgbV9wUGFsZXR0ZVtpXSA9IDB4ZmYgLSBpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgbV9wUGFsZXR0ZVtpXSA9IDB4ZmYwMDAwMDAgfCAoaSAqIDB4MTAxMDEpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1GWF9CT09MIENGWF9ESUJTb3VyY2U6OkJ1aWxkQWxwaGFNYXNrKCkNCi17DQotICAgIGlmIChtX3BBbHBoYU1hc2spIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIG1fcEFscGhhTWFzayA9IEZYX05FVyBDRlhfRElCaXRtYXA7DQotICAgIGlmICghbV9wQWxwaGFNYXNrKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKCFtX3BBbHBoYU1hc2stPkNyZWF0ZShtX1dpZHRoLCBtX0hlaWdodCwgRlhESUJfOGJwcE1hc2spKSB7DQotICAgICAgICBkZWxldGUgbV9wQWxwaGFNYXNrOw0KLSAgICAgICAgbV9wQWxwaGFNYXNrID0gTlVMTDsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWFNZU19tZW1zZXQ4KG1fcEFscGhhTWFzay0+R2V0QnVmZmVyKCksIDB4ZmYsIG1fcEFscGhhTWFzay0+R2V0SGVpZ2h0KCkqbV9wQWxwaGFNYXNrLT5HZXRQaXRjaCgpKTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0RXT1JEIENGWF9ESUJTb3VyY2U6OkdldFBhbGV0dGVFbnRyeShpbnQgaW5kZXgpIGNvbnN0DQotew0KLSAgICBBU1NFUlQoKEdldEJQUCgpID09IDEgfHwgR2V0QlBQKCkgPT0gOCkgJiYgIUlzQWxwaGFNYXNrKCkpOw0KLSAgICBpZiAobV9wUGFsZXR0ZSkgew0KLSAgICAgICAgcmV0dXJuIG1fcFBhbGV0dGVbaW5kZXhdOw0KLSAgICB9DQotICAgIGlmIChJc0NteWtJbWFnZSgpKSB7DQotICAgICAgICBpZiAoR2V0QlBQKCkgPT0gMSkgew0KLSAgICAgICAgICAgIHJldHVybiBpbmRleCA/IDAgOiAweGZmOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIDB4ZmYgLSBpbmRleDsNCi0gICAgfQ0KLSAgICBpZiAoR2V0QlBQKCkgPT0gMSkgew0KLSAgICAgICAgcmV0dXJuIGluZGV4ID8gMHhmZmZmZmZmZiA6IDB4ZmYwMDAwMDA7DQotICAgIH0NCi0gICAgcmV0dXJuIGluZGV4ICogMHgxMDEwMSB8IDB4ZmYwMDAwMDA7DQotfQ0KLXZvaWQgQ0ZYX0RJQlNvdXJjZTo6U2V0UGFsZXR0ZUVudHJ5KGludCBpbmRleCwgRlhfRFdPUkQgY29sb3IpDQotew0KLSAgICBBU1NFUlQoKEdldEJQUCgpID09IDEgfHwgR2V0QlBQKCkgPT0gOCkgJiYgIUlzQWxwaGFNYXNrKCkpOw0KLSAgICBpZiAobV9wUGFsZXR0ZSA9PSBOVUxMKSB7DQotICAgICAgICBCdWlsZFBhbGV0dGUoKTsNCi0gICAgfQ0KLSAgICBtX3BQYWxldHRlW2luZGV4XSA9IGNvbG9yOw0KLX0NCi1pbnQgQ0ZYX0RJQlNvdXJjZTo6RmluZFBhbGV0dGUoRlhfRFdPUkQgY29sb3IpIGNvbnN0DQotew0KLSAgICBBU1NFUlQoKEdldEJQUCgpID09IDEgfHwgR2V0QlBQKCkgPT0gOCkgJiYgIUlzQWxwaGFNYXNrKCkpOw0KLSAgICBpZiAobV9wUGFsZXR0ZSA9PSBOVUxMKSB7DQotICAgICAgICBpZiAoSXNDbXlrSW1hZ2UoKSkgew0KLSAgICAgICAgICAgIGlmIChHZXRCUFAoKSA9PSAxKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiAoKEZYX0JZVEUpY29sb3IgPT0gMHhmZikgPyAwIDogMTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuIDB4ZmYgLSAoRlhfQllURSljb2xvcjsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChHZXRCUFAoKSA9PSAxKSB7DQotICAgICAgICAgICAgcmV0dXJuICgoRlhfQllURSljb2xvciA9PSAweGZmKSA/IDEgOiAwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIChGWF9CWVRFKWNvbG9yOw0KLSAgICB9DQotICAgIGludCBwYWxzaXplID0gKDEgPDwgR2V0QlBQKCkpOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhbHNpemU7IGkgKyspDQotICAgICAgICBpZiAobV9wUGFsZXR0ZVtpXSA9PSBjb2xvcikgew0KLSAgICAgICAgICAgIHJldHVybiBpOw0KLSAgICAgICAgfQ0KLSAgICByZXR1cm4gLTE7DQotfQ0KLXZvaWQgQ0ZYX0RJQml0bWFwOjpDbGVhcihGWF9EV09SRCBjb2xvcikNCi17DQotICAgIGlmIChtX3BCdWZmZXIgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIHN3aXRjaCAoR2V0Rm9ybWF0KCkpIHsNCi0gICAgICAgIGNhc2UgRlhESUJfMWJwcE1hc2s6DQotICAgICAgICAgICAgRlhTWVNfbWVtc2V0OChtX3BCdWZmZXIsIChjb2xvciAmIDB4ZmYwMDAwMDApID8gMHhmZiA6IDAsIG1fUGl0Y2ggKiBtX0hlaWdodCk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIEZYRElCXzFicHBSZ2I6IHsNCi0gICAgICAgICAgICAgICAgaW50IGluZGV4ID0gRmluZFBhbGV0dGUoY29sb3IpOw0KLSAgICAgICAgICAgICAgICBGWFNZU19tZW1zZXQ4KG1fcEJ1ZmZlciwgaW5kZXggPyAweGZmIDogMCwgbV9QaXRjaCAqIG1fSGVpZ2h0KTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgY2FzZSBGWERJQl84YnBwTWFzazoNCi0gICAgICAgICAgICBGWFNZU19tZW1zZXQ4KG1fcEJ1ZmZlciwgY29sb3IgPj4gMjQsIG1fUGl0Y2ggKiBtX0hlaWdodCk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIEZYRElCXzhicHBSZ2I6IHsNCi0gICAgICAgICAgICAgICAgaW50IGluZGV4ID0gRmluZFBhbGV0dGUoY29sb3IpOw0KLSAgICAgICAgICAgICAgICBGWFNZU19tZW1zZXQ4KG1fcEJ1ZmZlciwgaW5kZXgsIG1fUGl0Y2ggKiBtX0hlaWdodCk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgRlhESUJfUmdiOg0KLSAgICAgICAgY2FzZSBGWERJQl9SZ2JhOiB7DQotICAgICAgICAgICAgICAgIGludCBhLCByLCBnLCBiOw0KLSAgICAgICAgICAgICAgICBBcmdiRGVjb2RlKGNvbG9yLCBhLCByLCBnLCBiKTsNCi0gICAgICAgICAgICAgICAgaWYgKHIgPT0gZyAmJiBnID09IGIpIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYU1lTX21lbXNldDgobV9wQnVmZmVyLCByLCBtX1BpdGNoICogbV9IZWlnaHQpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVfcG9zID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fcEJ1ZmZlcltieXRlX3BvcysrXSA9IGI7DQotICAgICAgICAgICAgICAgICAgICAgICAgbV9wQnVmZmVyW2J5dGVfcG9zKytdID0gZzsNCi0gICAgICAgICAgICAgICAgICAgICAgICBtX3BCdWZmZXJbYnl0ZV9wb3MrK10gPSByOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMTsgcm93IDwgbV9IZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcEJ1ZmZlciArIHJvdyAqIG1fUGl0Y2gsIG1fcEJ1ZmZlciwgbV9QaXRjaCk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgY2FzZSBGWERJQl9SZ2IzMjoNCi0gICAgICAgIGNhc2UgRlhESUJfQXJnYjogew0KLSAgICAgICAgICAgICAgICBjb2xvciA9IElzQ215a0ltYWdlKCkgPyBGWENNWUtfVE9ESUIoY29sb3IpIDogRlhBUkdCX1RPRElCKGNvbG9yKTsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX1dpZHRoOyBpICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAoKEZYX0RXT1JEKiltX3BCdWZmZXIpW2ldID0gY29sb3I7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMTsgcm93IDwgbV9IZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wQnVmZmVyICsgcm93ICogbV9QaXRjaCwgbV9wQnVmZmVyLCBtX1BpdGNoKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICBkZWZhdWx0Og0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0ZYX0RJQlNvdXJjZTo6R2V0T3ZlcmxhcFJlY3QoaW50JiBkZXN0X2xlZnQsIGludCYgZGVzdF90b3AsIGludCYgd2lkdGgsIGludCYgaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY193aWR0aCwgaW50IHNyY19oZWlnaHQsIGludCYgc3JjX2xlZnQsIGludCYgc3JjX3RvcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9DbGlwUmduKiBwQ2xpcFJnbikNCi17DQotICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQVNTRVJUKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTsNCi0gICAgaWYgKGRlc3RfbGVmdCA+IG1fV2lkdGggfHwgZGVzdF90b3AgPiBtX0hlaWdodCkgew0KLSAgICAgICAgd2lkdGggPSAwOw0KLSAgICAgICAgaGVpZ2h0ID0gMDsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpbnQgeF9vZmZzZXQgPSBkZXN0X2xlZnQgLSBzcmNfbGVmdDsNCi0gICAgaW50IHlfb2Zmc2V0ID0gZGVzdF90b3AgLSBzcmNfdG9wOw0KLSAgICBGWF9SRUNUIHNyY19yZWN0KHNyY19sZWZ0LCBzcmNfdG9wLCBzcmNfbGVmdCArIHdpZHRoLCBzcmNfdG9wICsgaGVpZ2h0KTsNCi0gICAgRlhfUkVDVCBzcmNfYm91bmQoMCwgMCwgc3JjX3dpZHRoLCBzcmNfaGVpZ2h0KTsNCi0gICAgc3JjX3JlY3QuSW50ZXJzZWN0KHNyY19ib3VuZCk7DQotICAgIEZYX1JFQ1QgZGVzdF9yZWN0KHNyY19yZWN0LmxlZnQgKyB4X29mZnNldCwgc3JjX3JlY3QudG9wICsgeV9vZmZzZXQsDQotICAgICAgICAgICAgICAgICAgICAgIHNyY19yZWN0LnJpZ2h0ICsgeF9vZmZzZXQsIHNyY19yZWN0LmJvdHRvbSArIHlfb2Zmc2V0KTsNCi0gICAgRlhfUkVDVCBkZXN0X2JvdW5kKDAsIDAsIG1fV2lkdGgsIG1fSGVpZ2h0KTsNCi0gICAgZGVzdF9yZWN0LkludGVyc2VjdChkZXN0X2JvdW5kKTsNCi0gICAgaWYgKHBDbGlwUmduKSB7DQotICAgICAgICBkZXN0X3JlY3QuSW50ZXJzZWN0KHBDbGlwUmduLT5HZXRCb3goKSk7DQotICAgIH0NCi0gICAgZGVzdF9sZWZ0ID0gZGVzdF9yZWN0LmxlZnQ7DQotICAgIGRlc3RfdG9wID0gZGVzdF9yZWN0LnRvcDsNCi0gICAgc3JjX2xlZnQgPSBkZXN0X2xlZnQgLSB4X29mZnNldDsNCi0gICAgc3JjX3RvcCA9IGRlc3RfdG9wIC0geV9vZmZzZXQ7DQotICAgIHdpZHRoID0gZGVzdF9yZWN0LnJpZ2h0IC0gZGVzdF9yZWN0LmxlZnQ7DQotICAgIGhlaWdodCA9IGRlc3RfcmVjdC5ib3R0b20gLSBkZXN0X3JlY3QudG9wOw0KLX0NCi1GWF9CT09MIENGWF9ESUJpdG1hcDo6VHJhbnNmZXJCaXRtYXAoaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIGludCBzcmNfbGVmdCwgaW50IHNyY190b3AsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBpZiAobV9wQnVmZmVyID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBHZXRPdmVybGFwUmVjdChkZXN0X2xlZnQsIGRlc3RfdG9wLCB3aWR0aCwgaGVpZ2h0LCBwU3JjQml0bWFwLT5HZXRXaWR0aCgpLCBwU3JjQml0bWFwLT5HZXRIZWlnaHQoKSwgc3JjX2xlZnQsIHNyY190b3AsIE5VTEwpOw0KLSAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgRlhESUJfRm9ybWF0IGRlc3RfZm9ybWF0ID0gR2V0Rm9ybWF0KCk7DQotICAgIEZYRElCX0Zvcm1hdCBzcmNfZm9ybWF0ID0gcFNyY0JpdG1hcC0+R2V0Rm9ybWF0KCk7DQotICAgIGlmIChkZXN0X2Zvcm1hdCA9PSBzcmNfZm9ybWF0ICYmIHBJY2NUcmFuc2Zvcm0gPT0gTlVMTCkgew0KLSAgICAgICAgaWYgKEdldEJQUCgpID09IDEpIHsNCi0gICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gbV9wQnVmZmVyICsgKGRlc3RfdG9wICsgcm93KSAqIG1fUGl0Y2g7DQotICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBwU3JjQml0bWFwLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KTsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19zY2FuWyhzcmNfbGVmdCArIGNvbCkgLyA4XSAmICgxIDw8ICg3IC0gKHNyY19sZWZ0ICsgY29sKSAlIDgpKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsoZGVzdF9sZWZ0ICsgY29sKSAvIDhdIHw9IDEgPDwgKDcgLSAoZGVzdF9sZWZ0ICsgY29sKSAlIDgpOw0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bKGRlc3RfbGVmdCArIGNvbCkgLyA4XSAmPSB+KDEgPDwgKDcgLSAoZGVzdF9sZWZ0ICsgY29sKSAlIDgpKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaW50IEJwcCA9IEdldEJQUCgpIC8gODsNCi0gICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gbV9wQnVmZmVyICsgKGRlc3RfdG9wICsgcm93KSAqIG1fUGl0Y2ggKyBkZXN0X2xlZnQgKiBCcHA7DQotICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBwU3JjQml0bWFwLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KSArIHNyY19sZWZ0ICogQnBwOw0KLSAgICAgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihkZXN0X3NjYW4sIHNyY19zY2FuLCB3aWR0aCAqIEJwcCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYgKG1fcFBhbGV0dGUpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9icHAgPT0gOCkgew0KLSAgICAgICAgICAgIGRlc3RfZm9ybWF0ID0gRlhESUJfOGJwcE1hc2s7DQotICAgICAgICB9DQotICAgICAgICBGWF9MUEJZVEUgZGVzdF9idWYgPSBtX3BCdWZmZXIgKyBkZXN0X3RvcCAqIG1fUGl0Y2ggKyBkZXN0X2xlZnQgKiBHZXRCUFAoKSAvIDg7DQotICAgICAgICBGWF9EV09SRCogZF9wbHQgPSBOVUxMOw0KLSAgICAgICAgaWYoIUNvbnZlcnRCdWZmZXIoZGVzdF9mb3JtYXQsIGRlc3RfYnVmLCBtX1BpdGNoLCB3aWR0aCwgaGVpZ2h0LCBwU3JjQml0bWFwLCBzcmNfbGVmdCwgc3JjX3RvcCwgZF9wbHQsIHBJY2NUcmFuc2Zvcm0pKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi0jaWZuZGVmIF9GUERGQVBJX01JTklfDQotRlhfQk9PTCBDRlhfRElCaXRtYXA6OlRyYW5zZmVyTWFzayhpbnQgZGVzdF9sZWZ0LCBpbnQgZGVzdF90b3AsIGludCB3aWR0aCwgaW50IGhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBNYXNrLCBGWF9EV09SRCBjb2xvciwgaW50IHNyY19sZWZ0LCBpbnQgc3JjX3RvcCwgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBpZiAobV9wQnVmZmVyID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBBU1NFUlQoSGFzQWxwaGEoKSAmJiAobV9icHAgPj0gMjQpKTsNCi0gICAgQVNTRVJUKHBNYXNrLT5Jc0FscGhhTWFzaygpKTsNCi0gICAgaWYgKCFIYXNBbHBoYSgpIHx8ICFwTWFzay0+SXNBbHBoYU1hc2soKSB8fCBtX2JwcCA8IDI0KSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgR2V0T3ZlcmxhcFJlY3QoZGVzdF9sZWZ0LCBkZXN0X3RvcCwgd2lkdGgsIGhlaWdodCwgcE1hc2stPkdldFdpZHRoKCksIHBNYXNrLT5HZXRIZWlnaHQoKSwgc3JjX2xlZnQsIHNyY190b3AsIE5VTEwpOw0KLSAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgaW50IHNyY19waXRjaCA9IHBNYXNrLT5HZXRQaXRjaCgpOw0KLSAgICBpbnQgc3JjX2JwcCA9IHBNYXNrLT5HZXRCUFAoKTsNCi0gICAgaW50IGFscGhhOw0KLSAgICBGWF9EV09SRCBkc3RfY29sb3I7DQotICAgIGlmIChhbHBoYV9mbGFnID4+IDgpIHsNCi0gICAgICAgIGFscGhhID0gYWxwaGFfZmxhZyAmIDB4ZmY7DQotICAgICAgICBkc3RfY29sb3IgPSBGWENNWUtfVE9ESUIoY29sb3IpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgYWxwaGEgPSBGWEFSR0JfQShjb2xvcik7DQotICAgICAgICBkc3RfY29sb3IgPSBGWEFSR0JfVE9ESUIoY29sb3IpOw0KLSAgICB9DQotICAgIEZYX0xQQllURSBjb2xvcl9wID0gKEZYX0xQQllURSkmZHN0X2NvbG9yOw0KLSAgICBpZiAocEljY1RyYW5zZm9ybSAmJiBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpICYmIENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpKSB7DQotICAgICAgICBJQ29kZWNfSWNjTW9kdWxlKiBwSWNjTW9kdWxlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCk7DQotICAgICAgICBwSWNjTW9kdWxlLT5UcmFuc2xhdGVTY2FubGluZShwSWNjVHJhbnNmb3JtLCBjb2xvcl9wLCBjb2xvcl9wLCAxKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGlmIChhbHBoYV9mbGFnID4+IDggJiYgIUlzQ215a0ltYWdlKCkpDQotICAgICAgICAgICAgQWRvYmVDTVlLX3RvX3NSR0IxKEZYU1lTX0dldENWYWx1ZShjb2xvciksIEZYU1lTX0dldE1WYWx1ZShjb2xvciksIEZYU1lTX0dldFlWYWx1ZShjb2xvciksIEZYU1lTX0dldEtWYWx1ZShjb2xvciksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yX3BbMl0sIGNvbG9yX3BbMV0sIGNvbG9yX3BbMF0pOw0KLSAgICAgICAgZWxzZSBpZiAoIShhbHBoYV9mbGFnID4+IDgpICYmIElzQ215a0ltYWdlKCkpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYoIUlzQ215a0ltYWdlKCkpIHsNCi0gICAgICAgIGNvbG9yX3BbM10gPSAoRlhfQllURSlhbHBoYTsNCi0gICAgfQ0KLSAgICBpZiAoR2V0Rm9ybWF0KCkgPT0gRlhESUJfQXJnYikgew0KLSAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgICAgICBGWF9EV09SRCogZGVzdF9wb3MgPSAoRlhfRFdPUkQqKShtX3BCdWZmZXIgKyAoZGVzdF90b3AgKyByb3cpICogbV9QaXRjaCArIGRlc3RfbGVmdCAqIDQpOw0KLSAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBwTWFzay0+R2V0U2NhbmxpbmUoc3JjX3RvcCArIHJvdyk7DQotICAgICAgICAgICAgaWYgKHNyY19icHAgPT0gMSkgew0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2JpdHBvcyA9IHNyY19sZWZ0ICsgY29sOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19zY2FuW3NyY19iaXRwb3MgLyA4XSAmICgxIDw8ICg3IC0gc3JjX2JpdHBvcyAlIDgpKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3BvcyA9IGRzdF9jb2xvcjsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfcG9zID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zICsrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX2xlZnQ7DQotICAgICAgICAgICAgICAgIGRzdF9jb2xvciA9IEZYQVJHQl9UT0RJQihkc3RfY29sb3IpOw0KLSAgICAgICAgICAgICAgICBkc3RfY29sb3IgJj0gMHhmZmZmZmY7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IHdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYQVJHQl9TRVRESUIoZGVzdF9wb3MrKywgZHN0X2NvbG9yIHwgKChhbHBoYSAqICgqc3JjX3NjYW4rKykgLyAyNTUpIDw8IDI0KSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpbnQgY29tcHMgPSBtX2JwcCAvIDg7DQotICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X2NvbG9yX3BvcyA9IG1fcEJ1ZmZlciArIChkZXN0X3RvcCArIHJvdykgKiBtX1BpdGNoICsgZGVzdF9sZWZ0ICogY29tcHM7DQotICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3RfYWxwaGFfcG9zID0gKEZYX0xQQllURSltX3BBbHBoYU1hc2stPkdldFNjYW5saW5lKGRlc3RfdG9wICsgcm93KSArIGRlc3RfbGVmdDsNCi0gICAgICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gcE1hc2stPkdldFNjYW5saW5lKHNyY190b3AgKyByb3cpOw0KLSAgICAgICAgICAgIGlmIChzcmNfYnBwID09IDEpIHsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgaW50IHNyY19iaXRwb3MgPSBzcmNfbGVmdCArIGNvbDsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChzcmNfc2NhbltzcmNfYml0cG9zIC8gOF0gJiAoMSA8PCAoNyAtIHNyY19iaXRwb3MgJSA4KSkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihkZXN0X2NvbG9yX3BvcywgY29sb3JfcCwgY29tcHMpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X2FscGhhX3BvcyA9IDB4ZmY7DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIEZYU1lTX21lbXNldDMyKGRlc3RfY29sb3JfcG9zLCAwLCBjb21wcyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfYWxwaGFfcG9zID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGRlc3RfY29sb3JfcG9zICs9IGNvbXBzOw0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9hbHBoYV9wb3MgKys7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfbGVmdDsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIoZGVzdF9jb2xvcl9wb3MsIGNvbG9yX3AsIGNvbXBzKTsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3RfY29sb3JfcG9zICs9IGNvbXBzOw0KLSAgICAgICAgICAgICAgICAgICAgKmRlc3RfYWxwaGFfcG9zKysgPSAoYWxwaGEgKiAoKnNyY19zY2FuKyspIC8gMjU1KTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotI2VuZGlmDQotdm9pZCBDRlhfRElCU291cmNlOjpDb3B5UGFsZXR0ZShjb25zdCBGWF9EV09SRCogcFNyYywgRlhfRFdPUkQgc2l6ZSkNCi17DQotICAgIGlmIChwU3JjID09IE5VTEwgfHwgR2V0QlBQKCkgPiA4KSB7DQotICAgICAgICBpZiAobV9wUGFsZXR0ZSkgew0KLSAgICAgICAgICAgIEZYX0ZyZWUobV9wUGFsZXR0ZSk7DQotICAgICAgICB9DQotICAgICAgICBtX3BQYWxldHRlID0gTlVMTDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEZYX0RXT1JEIHBhbF9zaXplID0gMSA8PCBHZXRCUFAoKTsNCi0gICAgICAgIGlmIChtX3BQYWxldHRlID09IE5VTEwpIHsNCi0gICAgICAgICAgICBtX3BQYWxldHRlID0gRlhfQWxsb2MoRlhfRFdPUkQsIHBhbF9zaXplKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICghbV9wUGFsZXR0ZSkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwYWxfc2l6ZSA+IHNpemUpIHsNCi0gICAgICAgICAgICBwYWxfc2l6ZSA9IHNpemU7DQotICAgICAgICB9DQotICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BQYWxldHRlLCBwU3JjLCBwYWxfc2l6ZSAqIHNpemVvZihGWF9EV09SRCkpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0ZYX0RJQlNvdXJjZTo6R2V0UGFsZXR0ZShGWF9EV09SRCogcGFsLCBpbnQgYWxwaGEpIGNvbnN0DQotew0KLSAgICBBU1NFUlQoR2V0QlBQKCkgPD0gOCAmJiAhSXNDbXlrSW1hZ2UoKSk7DQotICAgIGlmIChHZXRCUFAoKSA9PSAxKSB7DQotICAgICAgICBwYWxbMF0gPSAoKG1fcFBhbGV0dGUgPyBtX3BQYWxldHRlWzBdIDogMHhmZjAwMDAwMCkgJiAweGZmZmZmZikgfCAoYWxwaGEgPDwgMjQpOw0KLSAgICAgICAgcGFsWzFdID0gKChtX3BQYWxldHRlID8gbV9wUGFsZXR0ZVsxXSA6IDB4ZmZmZmZmZmYpICYgMHhmZmZmZmYpIHwgKGFscGhhIDw8IDI0KTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAobV9wUGFsZXR0ZSkgew0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsNCi0gICAgICAgICAgICBwYWxbaV0gPSAobV9wUGFsZXR0ZVtpXSAmIDB4MDBmZmZmZmYpIHwgKGFscGhhIDw8IDI0KTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7DQotICAgICAgICAgICAgcGFsW2ldID0gKGkgKiAweDEwMTAxKSB8IChhbHBoYSA8PCAyNCk7DQotICAgICAgICB9DQotICAgIH0NCi19DQotQ0ZYX0RJQml0bWFwKiBDRlhfRElCU291cmNlOjpHZXRBbHBoYU1hc2soY29uc3QgRlhfUkVDVCogcENsaXApIGNvbnN0DQotew0KLSAgICBBU1NFUlQoR2V0Rm9ybWF0KCkgPT0gRlhESUJfQXJnYik7DQotICAgIEZYX1JFQ1QgcmVjdCgwLCAwLCBtX1dpZHRoLCBtX0hlaWdodCk7DQotICAgIGlmIChwQ2xpcCkgew0KLSAgICAgICAgcmVjdC5JbnRlcnNlY3QoKnBDbGlwKTsNCi0gICAgICAgIGlmIChyZWN0LklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIENGWF9ESUJpdG1hcCogcE1hc2sgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOw0KLSAgICBpZiAoIXBNYXNrKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAoIXBNYXNrLT5DcmVhdGUocmVjdC5XaWR0aCgpLCByZWN0LkhlaWdodCgpLCBGWERJQl84YnBwTWFzaykpIHsNCi0gICAgICAgIGRlbGV0ZSBwTWFzazsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGZvciAoaW50IHJvdyA9IHJlY3QudG9wOyByb3cgPCByZWN0LmJvdHRvbTsgcm93ICsrKSB7DQotICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gR2V0U2NhbmxpbmUocm93KSArIHJlY3QubGVmdCAqIDQgKyAzOw0KLSAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IChGWF9MUEJZVEUpcE1hc2stPkdldFNjYW5saW5lKHJvdyAtIHJlY3QudG9wKTsNCi0gICAgICAgIGZvciAoaW50IGNvbCA9IHJlY3QubGVmdDsgY29sIDwgcmVjdC5yaWdodDsgY29sICsrKSB7DQotICAgICAgICAgICAgKmRlc3Rfc2NhbiArKyA9ICpzcmNfc2NhbjsNCi0gICAgICAgICAgICBzcmNfc2NhbiArPSA0Ow0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBwTWFzazsNCi19DQotRlhfQk9PTCBDRlhfRElCU291cmNlOjpDb3B5QWxwaGFNYXNrKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBBbHBoYU1hc2ssIGNvbnN0IEZYX1JFQ1QqIHBDbGlwKQ0KLXsNCi0gICAgaWYgKCFIYXNBbHBoYSgpIHx8IEdldEZvcm1hdCgpID09IEZYRElCX0FyZ2IpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAocEFscGhhTWFzaykgew0KLSAgICAgICAgRlhfUkVDVCByZWN0KDAsIDAsIHBBbHBoYU1hc2stPm1fV2lkdGgsIHBBbHBoYU1hc2stPm1fSGVpZ2h0KTsNCi0gICAgICAgIGlmIChwQ2xpcCkgew0KLSAgICAgICAgICAgIHJlY3QuSW50ZXJzZWN0KCpwQ2xpcCk7DQotICAgICAgICAgICAgaWYgKHJlY3QuSXNFbXB0eSgpIHx8IHJlY3QuV2lkdGgoKSAhPSBtX1dpZHRoIHx8IHJlY3QuSGVpZ2h0KCkgIT0gbV9IZWlnaHQpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYgKHBBbHBoYU1hc2stPm1fV2lkdGggIT0gbV9XaWR0aCB8fCBwQWxwaGFNYXNrLT5tX0hlaWdodCAhPSBtX0hlaWdodCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9IZWlnaHQ7IHJvdyArKykNCi0gICAgICAgICAgICBGWFNZU19tZW1jcHkzMigodm9pZCopbV9wQWxwaGFNYXNrLT5HZXRTY2FubGluZShyb3cpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBbHBoYU1hc2stPkdldFNjYW5saW5lKHJvdyArIHJlY3QudG9wKSArIHJlY3QubGVmdCwgbV9wQWxwaGFNYXNrLT5tX1BpdGNoKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIG1fcEFscGhhTWFzay0+Q2xlYXIoMHhmZjAwMDAwMCk7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLWNvbnN0IGludCBnX0NoYW5uZWxPZmZzZXRbXSA9IHswLCAyLCAxLCAwLCAwLCAxLCAyLCAzLCAzfTsNCi1GWF9CT09MIENGWF9ESUJpdG1hcDo6TG9hZENoYW5uZWwoRlhESUJfQ2hhbm5lbCBkZXN0Q2hhbm5lbCwgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyY0JpdG1hcCwgRlhESUJfQ2hhbm5lbCBzcmNDaGFubmVsKQ0KLXsNCi0gICAgaWYgKG1fcEJ1ZmZlciA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ0ZYX0RJQlNvdXJjZSogcFNyY0Nsb25lID0gKENGWF9ESUJTb3VyY2UqKXBTcmNCaXRtYXA7DQotICAgIENGWF9ESUJpdG1hcCogcERzdCA9IHRoaXM7DQotICAgIGludCBkZXN0T2Zmc2V0LCBzcmNPZmZzZXQ7DQotICAgIGlmIChzcmNDaGFubmVsID09IEZYRElCX0FscGhhKSB7DQotICAgICAgICBpZiAoIXBTcmNCaXRtYXAtPkhhc0FscGhhKCkgJiYgIXBTcmNCaXRtYXAtPklzQWxwaGFNYXNrKCkpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBpZiAocFNyY0JpdG1hcC0+R2V0QlBQKCkgPT0gMSkgew0KLSAgICAgICAgICAgIHBTcmNDbG9uZSA9IHBTcmNCaXRtYXAtPkNsb25lQ29udmVydChGWERJQl84YnBwTWFzayk7DQotICAgICAgICAgICAgaWYgKHBTcmNDbG9uZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZihwU3JjQml0bWFwLT5HZXRGb3JtYXQoKSA9PSBGWERJQl9BcmdiKSB7DQotICAgICAgICAgICAgc3JjT2Zmc2V0ID0gMzsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc3JjT2Zmc2V0ID0gMDsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGlmIChwU3JjQml0bWFwLT5Jc0FscGhhTWFzaygpKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBTcmNCaXRtYXAtPkdldEJQUCgpIDwgMjQpIHsNCi0gICAgICAgICAgICBpZiAocFNyY0JpdG1hcC0+SXNDbXlrSW1hZ2UoKSkgew0KLSAgICAgICAgICAgICAgICBwU3JjQ2xvbmUgPSBwU3JjQml0bWFwLT5DbG9uZUNvbnZlcnQoKEZYRElCX0Zvcm1hdCkoKHBTcmNCaXRtYXAtPkdldEZvcm1hdCgpICYgMHhmZjAwKSB8IDB4MjApKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBwU3JjQ2xvbmUgPSBwU3JjQml0bWFwLT5DbG9uZUNvbnZlcnQoKEZYRElCX0Zvcm1hdCkoKHBTcmNCaXRtYXAtPkdldEZvcm1hdCgpICYgMHhmZjAwKSB8IDB4MTgpKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKHBTcmNDbG9uZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBzcmNPZmZzZXQgPSBnX0NoYW5uZWxPZmZzZXRbc3JjQ2hhbm5lbF07DQotICAgIH0NCi0gICAgaWYgKGRlc3RDaGFubmVsID09IEZYRElCX0FscGhhKSB7DQotICAgICAgICBpZiAoSXNBbHBoYU1hc2soKSkgew0KLSAgICAgICAgICAgIGlmKCFDb252ZXJ0Rm9ybWF0KEZYRElCXzhicHBNYXNrKSkgew0KLSAgICAgICAgICAgICAgICBpZiAocFNyY0Nsb25lICE9IHBTcmNCaXRtYXApIHsNCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwU3JjQ2xvbmU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBkZXN0T2Zmc2V0ID0gMDsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgZGVzdE9mZnNldCA9IDA7DQotICAgICAgICAgICAgaWYoIUNvbnZlcnRGb3JtYXQoSXNDbXlrSW1hZ2UoKSA/IEZYRElCX0NteWthIDogRlhESUJfQXJnYikpIHsNCi0gICAgICAgICAgICAgICAgaWYgKHBTcmNDbG9uZSAhPSBwU3JjQml0bWFwKSB7DQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgcFNyY0Nsb25lOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKEdldEZvcm1hdCgpID09IEZYRElCX0FyZ2IpIHsNCi0gICAgICAgICAgICAgICAgZGVzdE9mZnNldCA9IDM7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYgKElzQWxwaGFNYXNrKCkpIHsNCi0gICAgICAgICAgICBpZiAocFNyY0Nsb25lICE9IHBTcmNCaXRtYXApIHsNCi0gICAgICAgICAgICAgICAgZGVsZXRlIHBTcmNDbG9uZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKEdldEJQUCgpIDwgMjQpIHsNCi0gICAgICAgICAgICBpZiAoSGFzQWxwaGEoKSkgew0KLSAgICAgICAgICAgICAgICBpZiAoIUNvbnZlcnRGb3JtYXQoSXNDbXlrSW1hZ2UoKSA/IEZYRElCX0NteWthIDogRlhESUJfQXJnYikpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwU3JjQ2xvbmUgIT0gcFNyY0JpdG1hcCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwU3JjQ2xvbmU7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2UNCi0jaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfDQotICAgICAgICAgICAgICAgIGlmICghQ29udmVydEZvcm1hdChJc0NteWtJbWFnZSgpID8gRlhESUJfQ215ayA6IEZYRElCX1JnYjMyKSkgew0KLSNlbHNlDQotICAgICAgICAgICAgICAgIGlmICghQ29udmVydEZvcm1hdChJc0NteWtJbWFnZSgpID8gRlhESUJfQ215ayA6IEZYRElCX1JnYikpIHsNCi0jZW5kaWYNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwU3JjQ2xvbmUgIT0gcFNyY0JpdG1hcCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwU3JjQ2xvbmU7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGRlc3RPZmZzZXQgPSBnX0NoYW5uZWxPZmZzZXRbZGVzdENoYW5uZWxdOw0KLSAgICB9DQotICAgIGlmIChzcmNDaGFubmVsID09IEZYRElCX0FscGhhICYmIHBTcmNDbG9uZS0+bV9wQWxwaGFNYXNrKSB7DQotICAgICAgICBDRlhfRElCaXRtYXAqIHBBbHBoYU1hc2sgPSBwU3JjQ2xvbmUtPm1fcEFscGhhTWFzazsNCi0gICAgICAgIGlmIChwU3JjQ2xvbmUtPkdldFdpZHRoKCkgIT0gbV9XaWR0aCB8fCBwU3JjQ2xvbmUtPkdldEhlaWdodCgpICE9IG1fSGVpZ2h0KSB7DQotICAgICAgICAgICAgaWYgKHBBbHBoYU1hc2spIHsNCi0gICAgICAgICAgICAgICAgcEFscGhhTWFzayA9IHBBbHBoYU1hc2stPlN0cmV0Y2hUbyhtX1dpZHRoLCBtX0hlaWdodCk7DQotICAgICAgICAgICAgICAgIGlmIChwQWxwaGFNYXNrID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChwU3JjQ2xvbmUgIT0gcFNyY0JpdG1hcCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwU3JjQ2xvbmU7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAocFNyY0Nsb25lICE9IHBTcmNCaXRtYXApIHsNCi0gICAgICAgICAgICBwU3JjQ2xvbmUtPm1fcEFscGhhTWFzayA9IE5VTEw7DQotICAgICAgICAgICAgZGVsZXRlIHBTcmNDbG9uZTsNCi0gICAgICAgIH0NCi0gICAgICAgIHBTcmNDbG9uZSA9IHBBbHBoYU1hc2s7DQotICAgICAgICBzcmNPZmZzZXQgPSAwOw0KLSAgICB9IGVsc2UgaWYgKHBTcmNDbG9uZS0+R2V0V2lkdGgoKSAhPSBtX1dpZHRoIHx8IHBTcmNDbG9uZS0+R2V0SGVpZ2h0KCkgIT0gbV9IZWlnaHQpIHsNCi0gICAgICAgIENGWF9ESUJpdG1hcCogcFNyY01hdGNoZWQgPSBwU3JjQ2xvbmUtPlN0cmV0Y2hUbyhtX1dpZHRoLCBtX0hlaWdodCk7DQotICAgICAgICBpZiAocFNyY0Nsb25lICE9IHBTcmNCaXRtYXApIHsNCi0gICAgICAgICAgICBkZWxldGUgcFNyY0Nsb25lOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBTcmNNYXRjaGVkID09IE5VTEwpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBwU3JjQ2xvbmUgPSBwU3JjTWF0Y2hlZDsNCi0gICAgfQ0KLSAgICBpZiAoZGVzdENoYW5uZWwgPT0gRlhESUJfQWxwaGEgJiYgbV9wQWxwaGFNYXNrKSB7DQotICAgICAgICBwRHN0ID0gbV9wQWxwaGFNYXNrOw0KLSAgICAgICAgZGVzdE9mZnNldCA9IDA7DQotICAgIH0NCi0gICAgaW50IHNyY0J5dGVzID0gcFNyY0Nsb25lLT5HZXRCUFAoKSAvIDg7DQotICAgIGludCBkZXN0Qnl0ZXMgPSBwRHN0LT5HZXRCUFAoKSAvIDg7DQotICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fSGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgIEZYX0xQQllURSBkZXN0X3BvcyA9IChGWF9MUEJZVEUpcERzdC0+R2V0U2NhbmxpbmUocm93KSArIGRlc3RPZmZzZXQ7DQotICAgICAgICBGWF9MUENCWVRFIHNyY19wb3MgPSBwU3JjQ2xvbmUtPkdldFNjYW5saW5lKHJvdykgKyBzcmNPZmZzZXQ7DQotICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1dpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAqZGVzdF9wb3MgPSAqc3JjX3BvczsNCi0gICAgICAgICAgICBkZXN0X3BvcyArPSBkZXN0Qnl0ZXM7DQotICAgICAgICAgICAgc3JjX3BvcyArPSBzcmNCeXRlczsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAocFNyY0Nsb25lICE9IHBTcmNCaXRtYXAgJiYgcFNyY0Nsb25lICE9IHBTcmNCaXRtYXAtPm1fcEFscGhhTWFzaykgew0KLSAgICAgICAgZGVsZXRlIHBTcmNDbG9uZTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDRlhfRElCaXRtYXA6OkxvYWRDaGFubmVsKEZYRElCX0NoYW5uZWwgZGVzdENoYW5uZWwsIGludCB2YWx1ZSkNCi17DQotICAgIGlmIChtX3BCdWZmZXIgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGludCBkZXN0T2Zmc2V0Ow0KLSAgICBpZiAoZGVzdENoYW5uZWwgPT0gRlhESUJfQWxwaGEpIHsNCi0gICAgICAgIGlmIChJc0FscGhhTWFzaygpKSB7DQotICAgICAgICAgICAgaWYoIUNvbnZlcnRGb3JtYXQoRlhESUJfOGJwcE1hc2spKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZGVzdE9mZnNldCA9IDA7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGRlc3RPZmZzZXQgPSAwOw0KLSAgICAgICAgICAgIGlmKCFDb252ZXJ0Rm9ybWF0KElzQ215a0ltYWdlKCkgPyBGWERJQl9DbXlrYSA6IEZYRElCX0FyZ2IpKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKEdldEZvcm1hdCgpID09IEZYRElCX0FyZ2IpIHsNCi0gICAgICAgICAgICAgICAgZGVzdE9mZnNldCA9IDM7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYgKElzQWxwaGFNYXNrKCkpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBpZiAoR2V0QlBQKCkgPCAyNCkgew0KLSAgICAgICAgICAgIGlmIChIYXNBbHBoYSgpKSB7DQotICAgICAgICAgICAgICAgIGlmICghQ29udmVydEZvcm1hdChJc0NteWtJbWFnZSgpID8gRlhESUJfQ215a2EgOiBGWERJQl9BcmdiKSkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlDQotI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXw0KLSAgICAgICAgICAgICAgICBpZiAoIUNvbnZlcnRGb3JtYXQoSXNDbXlrSW1hZ2UoKSA/IEZYRElCX0NteWsgOiBGWERJQl9SZ2IpKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgIH0NCi0jZWxzZQ0KLSAgICAgICAgICAgICAgICBpZiAoIUNvbnZlcnRGb3JtYXQoSXNDbXlrSW1hZ2UoKSA/IEZYRElCX0NteWsgOiBGWERJQl9SZ2IzMikpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICAgICAgfQ0KLSNlbmRpZg0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVzdE9mZnNldCA9IGdfQ2hhbm5lbE9mZnNldFtkZXN0Q2hhbm5lbF07DQotICAgIH0NCi0gICAgaW50IEJwcCA9IEdldEJQUCgpIC8gODsNCi0gICAgaWYgKEJwcCA9PSAxKSB7DQotICAgICAgICBGWFNZU19tZW1zZXQ4KG1fcEJ1ZmZlciwgdmFsdWUsIG1fSGVpZ2h0ICogbV9QaXRjaCk7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBpZiAoZGVzdENoYW5uZWwgPT0gRlhESUJfQWxwaGEgJiYgbV9wQWxwaGFNYXNrKSB7DQotICAgICAgICBGWFNZU19tZW1zZXQ4KG1fcEFscGhhTWFzay0+R2V0QnVmZmVyKCksIHZhbHVlLCBtX3BBbHBoYU1hc2stPkdldEhlaWdodCgpKm1fcEFscGhhTWFzay0+R2V0UGl0Y2goKSk7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBtX0hlaWdodDsgcm93ICsrKSB7DQotICAgICAgICBGWF9MUEJZVEUgc2Nhbl9saW5lID0gbV9wQnVmZmVyICsgcm93ICogbV9QaXRjaCArIGRlc3RPZmZzZXQ7DQotICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1dpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAqc2Nhbl9saW5lID0gdmFsdWU7DQotICAgICAgICAgICAgc2Nhbl9saW5lICs9IEJwcDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDRlhfRElCaXRtYXA6Ok11bHRpcGx5QWxwaGEoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyY0JpdG1hcCkNCi17DQotICAgIGlmIChtX3BCdWZmZXIgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEFTU0VSVChwU3JjQml0bWFwLT5Jc0FscGhhTWFzaygpKTsNCi0gICAgaWYgKCFwU3JjQml0bWFwLT5Jc0FscGhhTWFzaygpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKCFJc0FscGhhTWFzaygpICYmICFIYXNBbHBoYSgpKSB7DQotICAgICAgICByZXR1cm4gTG9hZENoYW5uZWwoRlhESUJfQWxwaGEsIHBTcmNCaXRtYXAsIEZYRElCX0FscGhhKTsNCi0gICAgfQ0KLSAgICBDRlhfRElCaXRtYXAqIHBTcmNDbG9uZSA9IChDRlhfRElCaXRtYXAqKXBTcmNCaXRtYXA7DQotICAgIGlmIChwU3JjQml0bWFwLT5HZXRXaWR0aCgpICE9IG1fV2lkdGggfHwgcFNyY0JpdG1hcC0+R2V0SGVpZ2h0KCkgIT0gbV9IZWlnaHQpIHsNCi0gICAgICAgIHBTcmNDbG9uZSA9IHBTcmNCaXRtYXAtPlN0cmV0Y2hUbyhtX1dpZHRoLCBtX0hlaWdodCk7DQotICAgICAgICBBU1NFUlQocFNyY0Nsb25lICE9IE5VTEwpOw0KLSAgICAgICAgaWYgKHBTcmNDbG9uZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChJc0FscGhhTWFzaygpKSB7DQotICAgICAgICBpZighQ29udmVydEZvcm1hdChGWERJQl84YnBwTWFzaykpIHsNCi0gICAgICAgICAgICBpZiAocFNyY0Nsb25lICE9IHBTcmNCaXRtYXApIHsNCi0gICAgICAgICAgICAgICAgZGVsZXRlIHBTcmNDbG9uZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9IZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBtX3BCdWZmZXIgKyBtX1BpdGNoICogcm93Ow0KLSAgICAgICAgICAgIEZYX0xQQllURSBzcmNfc2NhbiA9IHBTcmNDbG9uZS0+bV9wQnVmZmVyICsgcFNyY0Nsb25lLT5tX1BpdGNoICogcm93Ow0KLSAgICAgICAgICAgIGlmIChwU3JjQ2xvbmUtPkdldEJQUCgpID09IDEpIHsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbV9XaWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBpZiAoISgoMSA8PCAoNyAtIGNvbCAlIDgpKSAmIHNyY19zY2FuW2NvbCAvIDhdKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2Nhbltjb2xdID0gMDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9ICgqZGVzdF9zY2FuKSAqIHNyY19zY2FuW2NvbF0gLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZihHZXRGb3JtYXQoKSA9PSBGWERJQl9BcmdiKSB7DQotICAgICAgICAgICAgaWYgKHBTcmNDbG9uZS0+R2V0QlBQKCkgPT0gMSkgew0KLSAgICAgICAgICAgICAgICBpZiAocFNyY0Nsb25lICE9IHBTcmNCaXRtYXApIHsNCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwU3JjQ2xvbmU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBtX0hlaWdodDsgcm93ICsrKSB7DQotICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBtX3BCdWZmZXIgKyBtX1BpdGNoICogcm93ICsgMzsNCi0gICAgICAgICAgICAgICAgRlhfTFBCWVRFIHNyY19zY2FuID0gcFNyY0Nsb25lLT5tX3BCdWZmZXIgKyBwU3JjQ2xvbmUtPm1fUGl0Y2ggKiByb3c7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9ICgqZGVzdF9zY2FuKSAqIHNyY19zY2FuW2NvbF0gLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgbV9wQWxwaGFNYXNrLT5NdWx0aXBseUFscGhhKHBTcmNDbG9uZSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKHBTcmNDbG9uZSAhPSBwU3JjQml0bWFwKSB7DQotICAgICAgICBkZWxldGUgcFNyY0Nsb25lOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENGWF9ESUJpdG1hcDo6R2V0R3JheURhdGEodm9pZCogcEljY1RyYW5zZm9ybSkNCi17DQotICAgIGlmIChtX3BCdWZmZXIgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHN3aXRjaCAoR2V0Rm9ybWF0KCkpIHsNCi0gICAgICAgIGNhc2UgRlhESUJfMWJwcFJnYjogew0KLSAgICAgICAgICAgICAgICBpZiAobV9wUGFsZXR0ZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgRlhfQllURSBncmF5WzJdOw0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGludCByID0gKEZYX0JZVEUpKG1fcFBhbGV0dGVbaV0gPj4gMTYpOw0KLSAgICAgICAgICAgICAgICAgICAgaW50IGcgPSAoRlhfQllURSkobV9wUGFsZXR0ZVtpXSA+PiA4KTsNCi0gICAgICAgICAgICAgICAgICAgIGludCBiID0gKEZYX0JZVEUpbV9wUGFsZXR0ZVtpXTsNCi0gICAgICAgICAgICAgICAgICAgIGdyYXlbaV0gPSAoRlhfQllURSlGWFJHQjJHUkFZKHIsIGcsIGIpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIENGWF9ESUJpdG1hcCogcE1hc2sgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOw0KLSAgICAgICAgICAgICAgICBpZiAoIXBNYXNrKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKCFwTWFzay0+Q3JlYXRlKG1fV2lkdGgsIG1fSGVpZ2h0LCBGWERJQl84YnBwTWFzaykpIHsNCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwTWFzazsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBGWFNZU19tZW1zZXQ4KHBNYXNrLT5HZXRCdWZmZXIoKSwgZ3JheVswXSwgcE1hc2stPkdldFBpdGNoKCkgKiBtX0hlaWdodCk7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fSGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSBzcmNfcG9zID0gbV9wQnVmZmVyICsgcm93ICogbV9QaXRjaDsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3BvcyA9IChGWF9MUEJZVEUpcE1hc2stPkdldFNjYW5saW5lKHJvdyk7DQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1dpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX3Bvc1tjb2wgLyA4XSAmICgxIDw8ICg3IC0gY29sICUgOCkpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3BvcyA9IGdyYXlbMV07DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zICsrOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIFRha2VPdmVyKHBNYXNrKTsNCi0gICAgICAgICAgICAgICAgZGVsZXRlIHBNYXNrOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIEZYRElCXzhicHBSZ2I6IHsNCi0gICAgICAgICAgICAgICAgaWYgKG1fcFBhbGV0dGUgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIEZYX0JZVEUgZ3JheVsyNTZdOw0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSArKykgew0KLSAgICAgICAgICAgICAgICAgICAgaW50IHIgPSAoRlhfQllURSkobV9wUGFsZXR0ZVtpXSA+PiAxNik7DQotICAgICAgICAgICAgICAgICAgICBpbnQgZyA9IChGWF9CWVRFKShtX3BQYWxldHRlW2ldID4+IDgpOw0KLSAgICAgICAgICAgICAgICAgICAgaW50IGIgPSAoRlhfQllURSltX3BQYWxldHRlW2ldOw0KLSAgICAgICAgICAgICAgICAgICAgZ3JheVtpXSA9IChGWF9CWVRFKUZYUkdCMkdSQVkociwgZywgYik7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgQ0ZYX0RJQml0bWFwKiBwTWFzayA9IEZYX05FVyBDRlhfRElCaXRtYXA7DQotICAgICAgICAgICAgICAgIGlmICghcE1hc2spIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoIXBNYXNrLT5DcmVhdGUobV9XaWR0aCwgbV9IZWlnaHQsIEZYRElCXzhicHBNYXNrKSkgew0KLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBNYXNrOw0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fSGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3BvcyA9IHBNYXNrLT5HZXRCdWZmZXIoKSArIHJvdyAqIHBNYXNrLT5HZXRQaXRjaCgpOw0KLSAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFIHNyY19wb3MgPSBtX3BCdWZmZXIgKyByb3cgKiBtX1BpdGNoOw0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbV9XaWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfcG9zICsrID0gZ3JheVsqc3JjX3BvcyArK107DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgVGFrZU92ZXIocE1hc2spOw0KLSAgICAgICAgICAgICAgICBkZWxldGUgcE1hc2s7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgRlhESUJfUmdiOiB7DQotICAgICAgICAgICAgICAgIENGWF9ESUJpdG1hcCogcE1hc2sgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOw0KLSAgICAgICAgICAgICAgICBpZiAoIXBNYXNrKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKCFwTWFzay0+Q3JlYXRlKG1fV2lkdGgsIG1fSGVpZ2h0LCBGWERJQl84YnBwTWFzaykpIHsNCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwTWFzazsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBtX0hlaWdodDsgcm93ICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgc3JjX3BvcyA9IG1fcEJ1ZmZlciArIHJvdyAqIG1fUGl0Y2g7DQotICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9wb3MgPSBwTWFzay0+R2V0QnVmZmVyKCkgKyByb3cgKiBwTWFzay0+R2V0UGl0Y2goKTsNCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3BvcyArKyA9IEZYUkdCMkdSQVkoc3JjX3Bvc1syXSwgc3JjX3Bvc1sxXSwgKnNyY19wb3MpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNyY19wb3MgKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBUYWtlT3ZlcihwTWFzayk7DQotICAgICAgICAgICAgICAgIGRlbGV0ZSBwTWFzazsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgY2FzZSBGWERJQl9SZ2IzMjogew0KLSAgICAgICAgICAgICAgICBDRlhfRElCaXRtYXAqIHBNYXNrID0gRlhfTkVXIENGWF9ESUJpdG1hcDsNCi0gICAgICAgICAgICAgICAgaWYgKCFwTWFzaykgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmICghcE1hc2stPkNyZWF0ZShtX1dpZHRoLCBtX0hlaWdodCwgRlhESUJfOGJwcE1hc2spKSB7DQotICAgICAgICAgICAgICAgICAgICBkZWxldGUgcE1hc2s7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9IZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFIHNyY19wb3MgPSBtX3BCdWZmZXIgKyByb3cgKiBtX1BpdGNoOw0KLSAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3RfcG9zID0gcE1hc2stPkdldEJ1ZmZlcigpICsgcm93ICogcE1hc2stPkdldFBpdGNoKCk7DQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1dpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9wb3MgKysgPSBGWFJHQjJHUkFZKHNyY19wb3NbMl0sIHNyY19wb3NbMV0sICpzcmNfcG9zKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzcmNfcG9zICs9IDQ7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgVGFrZU92ZXIocE1hc2spOw0KLSAgICAgICAgICAgICAgICBkZWxldGUgcE1hc2s7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENGWF9ESUJpdG1hcDo6TXVsdGlwbHlBbHBoYShpbnQgYWxwaGEpDQotew0KLSAgICBpZiAobV9wQnVmZmVyID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBzd2l0Y2ggKEdldEZvcm1hdCgpKSB7DQotICAgICAgICBjYXNlIEZYRElCXzFicHBNYXNrOg0KLSAgICAgICAgICAgIGlmICghQ29udmVydEZvcm1hdChGWERJQl84YnBwTWFzaykpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBNdWx0aXBseUFscGhhKGFscGhhKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgRlhESUJfOGJwcE1hc2s6IHsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9IZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFIHNjYW5fbGluZSA9IG1fcEJ1ZmZlciArIHJvdyAqIG1fUGl0Y2g7DQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1dpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzY2FuX2xpbmVbY29sXSA9IHNjYW5fbGluZVtjb2xdICogYWxwaGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgY2FzZSBGWERJQl9BcmdiOiB7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fSGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSBzY2FuX2xpbmUgPSBtX3BCdWZmZXIgKyByb3cgKiBtX1BpdGNoICsgMzsNCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICpzY2FuX2xpbmUgPSAoKnNjYW5fbGluZSkgKiBhbHBoYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzY2FuX2xpbmUgKz0gNDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICBkZWZhdWx0Og0KLSAgICAgICAgICAgIGlmIChIYXNBbHBoYSgpKSB7DQotICAgICAgICAgICAgICAgIG1fcEFscGhhTWFzay0+TXVsdGlwbHlBbHBoYShhbHBoYSk7DQotICAgICAgICAgICAgfSBlbHNlIGlmIChJc0NteWtJbWFnZSgpKSB7DQotICAgICAgICAgICAgICAgIGlmICghQ29udmVydEZvcm1hdCgoRlhESUJfRm9ybWF0KShHZXRGb3JtYXQoKSB8IDB4MDIwMCkpKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbV9wQWxwaGFNYXNrLT5NdWx0aXBseUFscGhhKGFscGhhKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBpZiAoIUNvbnZlcnRGb3JtYXQoRlhESUJfQXJnYikpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBNdWx0aXBseUFscGhhKGFscGhhKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgYnJlYWs7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLSNpZiAhZGVmaW5lZChfRlBERkFQSV9NSU5JXykgfHwgZGVmaW5lZChfRlhDT1JFX0ZFQVRVUkVfQUxMXykNCi1GWF9EV09SRCBDRlhfRElCaXRtYXA6OkdldFBpeGVsKGludCB4LCBpbnQgeSkgY29uc3QNCi17DQotICAgIGlmIChtX3BCdWZmZXIgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgRlhfTFBCWVRFIHBvcyA9IG1fcEJ1ZmZlciArIHkgKiBtX1BpdGNoICsgeCAqIEdldEJQUCgpIC8gODsNCi0gICAgc3dpdGNoIChHZXRGb3JtYXQoKSkgew0KLSAgICAgICAgY2FzZSBGWERJQl8xYnBwTWFzazogew0KLSAgICAgICAgICAgICAgICBpZiAoKCpwb3MpICYgKDEgPDwgKDcgLSB4ICUgOCkpKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMHhmZjAwMDAwMDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIEZYRElCXzFicHBSZ2I6IHsNCi0gICAgICAgICAgICAgICAgaWYgKCgqcG9zKSAmICgxIDw8ICg3IC0geCAlIDgpKSkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fcFBhbGV0dGUgPyBtX3BQYWxldHRlWzFdIDogMHhmZmZmZmZmZjsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtX3BQYWxldHRlID8gbV9wUGFsZXR0ZVswXSA6IDB4ZmYwMDAwMDA7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgY2FzZSBGWERJQl84YnBwTWFzazoNCi0gICAgICAgICAgICByZXR1cm4gKCpwb3MpIDw8IDI0Ow0KLSAgICAgICAgY2FzZSBGWERJQl84YnBwUmdiOg0KLSAgICAgICAgICAgIHJldHVybiBtX3BQYWxldHRlID8gbV9wUGFsZXR0ZVsqcG9zXSA6ICgweGZmMDAwMDAwIHwgKCgqcG9zKSAqIDB4MTAxMDEpKTsNCi0gICAgICAgIGNhc2UgRlhESUJfUmdiOg0KLSAgICAgICAgY2FzZSBGWERJQl9SZ2JhOg0KLSAgICAgICAgY2FzZSBGWERJQl9SZ2IzMjoNCi0gICAgICAgICAgICByZXR1cm4gRlhBUkdCX0dFVERJQihwb3MpIHwgMHhmZjAwMDAwMDsNCi0gICAgICAgIGNhc2UgRlhESUJfQXJnYjoNCi0gICAgICAgICAgICByZXR1cm4gRlhBUkdCX0dFVERJQihwb3MpOw0KLSAgICAgICAgZGVmYXVsdDoNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgfQ0KLSAgICByZXR1cm4gMDsNCi19DQotI2VuZGlmDQotdm9pZCBDRlhfRElCaXRtYXA6OlNldFBpeGVsKGludCB4LCBpbnQgeSwgRlhfRFdPUkQgY29sb3IpDQotew0KLSAgICBpZiAobV9wQnVmZmVyID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAoeCA8IDAgfHwgeCA+PSBtX1dpZHRoIHx8IHkgPCAwIHx8IHkgPj0gbV9IZWlnaHQpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9MUEJZVEUgcG9zID0gbV9wQnVmZmVyICsgeSAqIG1fUGl0Y2ggKyB4ICogR2V0QlBQKCkgLyA4Ow0KLSAgICBzd2l0Y2ggKEdldEZvcm1hdCgpKSB7DQotICAgICAgICBjYXNlIEZYRElCXzFicHBNYXNrOg0KLSAgICAgICAgICAgIGlmIChjb2xvciA+PiAyNCkgew0KLSAgICAgICAgICAgICAgICAqcG9zIHw9IDEgPDwgKDcgLSB4ICUgOCk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgKnBvcyAmPSB+KDEgPDwgKDcgLSB4ICUgOCkpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgRlhESUJfMWJwcFJnYjoNCi0gICAgICAgICAgICBpZiAobV9wUGFsZXR0ZSkgew0KLSAgICAgICAgICAgICAgICBpZiAoY29sb3IgPT0gbV9wUGFsZXR0ZVsxXSkgew0KLSAgICAgICAgICAgICAgICAgICAgKnBvcyB8PSAxIDw8ICg3IC0geCAlIDgpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgKnBvcyAmPSB+KDEgPDwgKDcgLSB4ICUgOCkpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgaWYgKGNvbG9yID09IDB4ZmZmZmZmZmYpIHsNCi0gICAgICAgICAgICAgICAgICAgICpwb3MgfD0gMSA8PCAoNyAtIHggJSA4KTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICpwb3MgJj0gfigxIDw8ICg3IC0geCAlIDgpKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgRlhESUJfOGJwcE1hc2s6DQotICAgICAgICAgICAgKnBvcyA9IChGWF9CWVRFKShjb2xvciA+PiAyNCk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIEZYRElCXzhicHBSZ2I6IHsNCi0gICAgICAgICAgICAgICAgaWYgKG1fcFBhbGV0dGUpIHsNCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fcFBhbGV0dGVbaV0gPT0gY29sb3IpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBvcyA9IChGWF9CWVRFKWk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAqcG9zID0gMDsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICpwb3MgPSBGWFJHQjJHUkFZKEZYQVJHQl9SKGNvbG9yKSwgRlhBUkdCX0coY29sb3IpLCBGWEFSR0JfQihjb2xvcikpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgRlhESUJfUmdiOg0KLSAgICAgICAgY2FzZSBGWERJQl9SZ2IzMjogew0KLSAgICAgICAgICAgICAgICBpbnQgYWxwaGEgPSBGWEFSR0JfQShjb2xvcik7DQotICAgICAgICAgICAgICAgIHBvc1swXSA9IChGWEFSR0JfQihjb2xvcikgKiBhbHBoYSArIHBvc1swXSAqICgyNTUgLSBhbHBoYSkpIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICBwb3NbMV0gPSAoRlhBUkdCX0coY29sb3IpICogYWxwaGEgKyBwb3NbMV0gKiAoMjU1IC0gYWxwaGEpKSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgcG9zWzJdID0gKEZYQVJHQl9SKGNvbG9yKSAqIGFscGhhICsgcG9zWzJdICogKDI1NSAtIGFscGhhKSkgLyAyNTU7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgRlhESUJfUmdiYTogew0KLSAgICAgICAgICAgICAgICBwb3NbMF0gPSBGWEFSR0JfQihjb2xvcik7DQotICAgICAgICAgICAgICAgIHBvc1sxXSA9IEZYQVJHQl9HKGNvbG9yKTsNCi0gICAgICAgICAgICAgICAgcG9zWzJdID0gRlhBUkdCX1IoY29sb3IpOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICBjYXNlIEZYRElCX0FyZ2I6DQotICAgICAgICAgICAgRlhBUkdCX1NFVERJQihwb3MsIGNvbG9yKTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgYnJlYWs7DQotICAgIH0NCi19DQotdm9pZCBDRlhfRElCaXRtYXA6OkRvd25TYW1wbGVTY2FubGluZShpbnQgbGluZSwgRlhfTFBCWVRFIGRlc3Rfc2NhbiwgaW50IGRlc3RfYnBwLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGgsIEZYX0JPT0wgYkZsaXBYLCBpbnQgY2xpcF9sZWZ0LCBpbnQgY2xpcF93aWR0aCkgY29uc3QNCi17DQotICAgIGlmIChtX3BCdWZmZXIgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGludCBzcmNfQnBwID0gbV9icHAgLyA4Ow0KLSAgICBGWF9MUEJZVEUgc2NhbmxpbmUgPSBtX3BCdWZmZXIgKyBsaW5lICogbV9QaXRjaDsNCi0gICAgaWYgKHNyY19CcHAgPT0gMCkgew0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbGlwX3dpZHRoOyBpICsrKSB7DQotICAgICAgICAgICAgRlhfRFdPUkQgZGVzdF94ID0gY2xpcF9sZWZ0ICsgaTsNCi0gICAgICAgICAgICBGWF9EV09SRCBzcmNfeCA9IGRlc3RfeCAqIG1fV2lkdGggLyBkZXN0X3dpZHRoOw0KLSAgICAgICAgICAgIGlmIChiRmxpcFgpIHsNCi0gICAgICAgICAgICAgICAgc3JjX3ggPSBtX1dpZHRoIC0gc3JjX3ggLSAxOw0KLSAgICAgICAgICAgIH0NCi0jaWZkZWYgRk9YSVRfQ0hST01FX0JVSUxEDQotICAgICAgICAgICAgc3JjX3ggJT0gbV9XaWR0aDsNCi0jZW5kaWYNCi0gICAgICAgICAgICBkZXN0X3NjYW5baV0gPSAoc2NhbmxpbmVbc3JjX3ggLyA4XSAmICgxIDw8ICg3IC0gc3JjX3ggJSA4KSkpID8gMjU1IDogMDsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIGlmIChzcmNfQnBwID09IDEpIHsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xpcF93aWR0aDsgaSArKykgew0KLSAgICAgICAgICAgIEZYX0RXT1JEIGRlc3RfeCA9IGNsaXBfbGVmdCArIGk7DQotICAgICAgICAgICAgRlhfRFdPUkQgc3JjX3ggPSBkZXN0X3ggKiBtX1dpZHRoIC8gZGVzdF93aWR0aDsNCi0gICAgICAgICAgICBpZiAoYkZsaXBYKSB7DQotICAgICAgICAgICAgICAgIHNyY194ID0gbV9XaWR0aCAtIHNyY194IC0gMTsNCi0gICAgICAgICAgICB9DQotI2lmZGVmIEZPWElUX0NIUk9NRV9CVUlMRA0KLSAgICAgICAgICAgIHNyY194ICU9IG1fV2lkdGg7DQotI2VuZGlmDQotICAgICAgICAgICAgaW50IGRlc3RfcG9zID0gaTsNCi0gICAgICAgICAgICBpZiAobV9wUGFsZXR0ZSkgew0KLSAgICAgICAgICAgICAgICBpZiAoIUlzQ215a0ltYWdlKCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zICo9IDM7DQotICAgICAgICAgICAgICAgICAgICBGWF9BUkdCIGFyZ2IgPSBtX3BQYWxldHRlW3NjYW5saW5lW3NyY194XV07DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bZGVzdF9wb3NdID0gRlhBUkdCX0IoYXJnYik7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bZGVzdF9wb3MgKyAxXSA9IEZYQVJHQl9HKGFyZ2IpOw0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfcG9zICsgMl0gPSBGWEFSR0JfUihhcmdiKTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zICo9IDQ7DQotICAgICAgICAgICAgICAgICAgICBGWF9DTVlLIGNteWsgPSBtX3BQYWxldHRlW3NjYW5saW5lW3NyY194XV07DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bZGVzdF9wb3NdID0gRlhTWVNfR2V0Q1ZhbHVlKGNteWspOw0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfcG9zICsgMV0gPSBGWFNZU19HZXRNVmFsdWUoY215ayk7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bZGVzdF9wb3MgKyAyXSA9IEZYU1lTX0dldFlWYWx1ZShjbXlrKTsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X3BvcyArIDNdID0gRlhTWVNfR2V0S1ZhbHVlKGNteWspOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfcG9zXSA9IHNjYW5saW5lW3NyY194XTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsaXBfd2lkdGg7IGkgKyspIHsNCi0gICAgICAgICAgICBGWF9EV09SRCBkZXN0X3ggPSBjbGlwX2xlZnQgKyBpOw0KLSAgICAgICAgICAgIEZYX0RXT1JEIHNyY194ID0gYkZsaXBYID8gKG1fV2lkdGggLSBkZXN0X3ggKiBtX1dpZHRoIC8gZGVzdF93aWR0aCAtIDEpICogc3JjX0JwcCA6IChkZXN0X3ggKiBtX1dpZHRoIC8gZGVzdF93aWR0aCkgKiBzcmNfQnBwOw0KLSNpZmRlZiBGT1hJVF9DSFJPTUVfQlVJTEQNCi0gICAgICAgICAgICBzcmNfeCAlPSBtX1dpZHRoICogc3JjX0JwcDsNCi0jZW5kaWYNCi0gICAgICAgICAgICBpbnQgZGVzdF9wb3MgPSBpICogc3JjX0JwcDsNCi0gICAgICAgICAgICBmb3IgKGludCBiID0gMDsgYiA8IHNyY19CcHA7IGIgKyspIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfcG9zICsgYl0gPSBzY2FubGluZVtzcmNfeCArIGJdOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1GWF9CT09MIENGWF9ESUJpdG1hcDo6Q29udmVydENvbG9yU2NhbGUoRlhfRFdPUkQgZm9yZWNvbG9yLCBGWF9EV09SRCBiYWNrY29sb3IpDQotew0KLSAgICBBU1NFUlQoIUlzQWxwaGFNYXNrKCkpOw0KLSAgICBpZiAobV9wQnVmZmVyID09IE5VTEwgfHwgSXNBbHBoYU1hc2soKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGludCBmYywgZm0sIGZ5LCBmaywgYmMsIGJtLCBieSwgYms7DQotICAgIGludCBmciwgZmcsIGZiLCBiciwgYmcsIGJiOw0KLSAgICBGWF9CT09MIGlzQ215a0ltYWdlID0gSXNDbXlrSW1hZ2UoKTsNCi0gICAgaWYgKGlzQ215a0ltYWdlKSB7DQotICAgICAgICBmYyA9IEZYU1lTX0dldENWYWx1ZShmb3JlY29sb3IpOw0KLSAgICAgICAgZm0gPSBGWFNZU19HZXRNVmFsdWUoZm9yZWNvbG9yKTsNCi0gICAgICAgIGZ5ID0gRlhTWVNfR2V0WVZhbHVlKGZvcmVjb2xvcik7DQotICAgICAgICBmayA9IEZYU1lTX0dldEtWYWx1ZShmb3JlY29sb3IpOw0KLSAgICAgICAgYmMgPSBGWFNZU19HZXRDVmFsdWUoYmFja2NvbG9yKTsNCi0gICAgICAgIGJtID0gRlhTWVNfR2V0TVZhbHVlKGJhY2tjb2xvcik7DQotICAgICAgICBieSA9IEZYU1lTX0dldFlWYWx1ZShiYWNrY29sb3IpOw0KLSAgICAgICAgYmsgPSBGWFNZU19HZXRLVmFsdWUoYmFja2NvbG9yKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGZyID0gRlhTWVNfR2V0UlZhbHVlKGZvcmVjb2xvcik7DQotICAgICAgICBmZyA9IEZYU1lTX0dldEdWYWx1ZShmb3JlY29sb3IpOw0KLSAgICAgICAgZmIgPSBGWFNZU19HZXRCVmFsdWUoZm9yZWNvbG9yKTsNCi0gICAgICAgIGJyID0gRlhTWVNfR2V0UlZhbHVlKGJhY2tjb2xvcik7DQotICAgICAgICBiZyA9IEZYU1lTX0dldEdWYWx1ZShiYWNrY29sb3IpOw0KLSAgICAgICAgYmIgPSBGWFNZU19HZXRCVmFsdWUoYmFja2NvbG9yKTsNCi0gICAgfQ0KLSAgICBpZiAobV9icHAgPD0gOCkgew0KLSAgICAgICAgaWYgKGlzQ215a0ltYWdlKSB7DQotICAgICAgICAgICAgaWYgKGZvcmVjb2xvciA9PSAweGZmICYmIGJhY2tjb2xvciA9PSAwICYmIG1fcFBhbGV0dGUgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2UgaWYgKGZvcmVjb2xvciA9PSAwICYmIGJhY2tjb2xvciA9PSAweGZmZmZmZiAmJiBtX3BQYWxldHRlID09IE5VTEwpIHsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX3BQYWxldHRlID09IE5VTEwpIHsNCi0gICAgICAgICAgICBCdWlsZFBhbGV0dGUoKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBzaXplID0gMSA8PCBtX2JwcDsNCi0gICAgICAgIGlmIChpc0NteWtJbWFnZSkgew0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgew0KLSAgICAgICAgICAgICAgICBGWF9CWVRFIGIsIGcsIHI7DQotICAgICAgICAgICAgICAgIEFkb2JlQ01ZS190b19zUkdCMShGWFNZU19HZXRDVmFsdWUobV9wUGFsZXR0ZVtpXSksIEZYU1lTX0dldE1WYWx1ZShtX3BQYWxldHRlW2ldKSwgRlhTWVNfR2V0WVZhbHVlKG1fcFBhbGV0dGVbaV0pLCBGWFNZU19HZXRLVmFsdWUobV9wUGFsZXR0ZVtpXSksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLCBnLCBiKTsNCi0gICAgICAgICAgICAgICAgaW50IGdyYXkgPSAyNTUgLSBGWFJHQjJHUkFZKHIsIGcsIGIpOw0KLSAgICAgICAgICAgICAgICBtX3BQYWxldHRlW2ldID0gQ215a0VuY29kZShiYyArIChmYyAtIGJjKSAqIGdyYXkgLyAyNTUsIGJtICsgKGZtIC0gYm0pICogZ3JheSAvIDI1NSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgKyAoZnkgLSBieSkgKiBncmF5IC8gMjU1LCBiayArIChmayAtIGJrKSAqIGdyYXkgLyAyNTUpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZQ0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSArKykgew0KLSAgICAgICAgICAgICAgICBpbnQgZ3JheSA9IEZYUkdCMkdSQVkoRlhBUkdCX1IobV9wUGFsZXR0ZVtpXSksIEZYQVJHQl9HKG1fcFBhbGV0dGVbaV0pLCBGWEFSR0JfQihtX3BQYWxldHRlW2ldKSk7DQotICAgICAgICAgICAgICAgIG1fcFBhbGV0dGVbaV0gPSBGWEFSR0JfTUFLRSgweGZmLCBiciArIChmciAtIGJyKSAqIGdyYXkgLyAyNTUsIGJnICsgKGZnIC0gYmcpICogZ3JheSAvIDI1NSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJiICsgKGZiIC0gYmIpICogZ3JheSAvIDI1NSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgaWYgKGlzQ215a0ltYWdlKSB7DQotICAgICAgICBpZiAoZm9yZWNvbG9yID09IDB4ZmYgJiYgYmFja2NvbG9yID09IDB4MDApIHsNCi0gICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBtX0hlaWdodDsgcm93ICsrKSB7DQotICAgICAgICAgICAgICAgIEZYX0xQQllURSBzY2FubGluZSA9IG1fcEJ1ZmZlciArIHJvdyAqIG1fUGl0Y2g7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgRlhfQllURSBiLCBnLCByOw0KLSAgICAgICAgICAgICAgICAgICAgQWRvYmVDTVlLX3RvX3NSR0IxKHNjYW5saW5lWzBdLCBzY2FubGluZVsxXSwgc2NhbmxpbmVbMl0sIHNjYW5saW5lWzNdLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIpOw0KLSAgICAgICAgICAgICAgICAgICAgKnNjYW5saW5lICsrID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICpzY2FubGluZSArKyA9IDA7DQotICAgICAgICAgICAgICAgICAgICAqc2NhbmxpbmUgKysgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgKnNjYW5saW5lICsrID0gMjU1IC0gRlhSR0IyR1JBWShyLCBnLCBiKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIGlmIChmb3JlY29sb3IgPT0gMCAmJiBiYWNrY29sb3IgPT0gMHhmZmZmZmYpIHsNCi0gICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fSGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgICAgICBGWF9MUEJZVEUgc2NhbmxpbmUgPSBtX3BCdWZmZXIgKyByb3cgKiBtX1BpdGNoOw0KLSAgICAgICAgICAgIGludCBnYXAgPSBtX2JwcCAvIDggLSAyOw0KLSAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICBpbnQgZ3JheSA9IEZYUkdCMkdSQVkoc2NhbmxpbmVbMl0sIHNjYW5saW5lWzFdLCBzY2FubGluZVswXSk7DQotICAgICAgICAgICAgICAgICpzY2FubGluZSArKyA9IGdyYXk7DQotICAgICAgICAgICAgICAgICpzY2FubGluZSArKyA9IGdyYXk7DQotICAgICAgICAgICAgICAgICpzY2FubGluZSAgICA9IGdyYXk7DQotICAgICAgICAgICAgICAgIHNjYW5saW5lICs9IGdhcDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBpZiAoaXNDbXlrSW1hZ2UpIHsNCi0gICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fSGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgICAgICBGWF9MUEJZVEUgc2NhbmxpbmUgPSBtX3BCdWZmZXIgKyByb3cgKiBtX1BpdGNoOw0KLSAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICBGWF9CWVRFIGIsIGcsIHI7DQotICAgICAgICAgICAgICAgIEFkb2JlQ01ZS190b19zUkdCMShzY2FubGluZVswXSwgc2NhbmxpbmVbMV0sIHNjYW5saW5lWzJdLCBzY2FubGluZVszXSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIpOw0KLSAgICAgICAgICAgICAgICBpbnQgZ3JheSA9IDI1NSAtIEZYUkdCMkdSQVkociwgZywgYik7DQotICAgICAgICAgICAgICAgICpzY2FubGluZSArKyA9IGJjICsgKGZjIC0gYmMpICogZ3JheSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgKnNjYW5saW5lICsrID0gYm0gKyAoZm0gLSBibSkgKiBncmF5IC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAqc2NhbmxpbmUgKysgPSBieSArIChmeSAtIGJ5KSAqIGdyYXkgLyAyNTU7DQotICAgICAgICAgICAgICAgICpzY2FubGluZSArKyA9IGJrICsgKGZrIC0gYmspICogZ3JheSAvIDI1NTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZQ0KLSAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9IZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgIEZYX0xQQllURSBzY2FubGluZSA9IG1fcEJ1ZmZlciArIHJvdyAqIG1fUGl0Y2g7DQotICAgICAgICAgICAgaW50IGdhcCA9IG1fYnBwIC8gOCAtIDI7DQotICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbV9XaWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgIGludCBncmF5ID0gRlhSR0IyR1JBWShzY2FubGluZVsyXSwgc2NhbmxpbmVbMV0sIHNjYW5saW5lWzBdKTsNCi0gICAgICAgICAgICAgICAgKnNjYW5saW5lICsrID0gYmIgKyAoZmIgLSBiYikgKiBncmF5IC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAqc2NhbmxpbmUgKysgPSBiZyArIChmZyAtIGJnKSAqIGdyYXkgLyAyNTU7DQotICAgICAgICAgICAgICAgICpzY2FubGluZSAgICA9IGJyICsgKGZyIC0gYnIpICogZ3JheSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgc2NhbmxpbmUgKz0gZ2FwOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ0ZYX0RJQml0bWFwOjpEaXRoZXJGUyhjb25zdCBGWF9EV09SRCogcFBhbGV0dGUsIGludCBwYWxfc2l6ZSwgY29uc3QgRlhfUkVDVCogcFJlY3QpDQotew0KLSAgICBpZiAobV9wQnVmZmVyID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAobV9icHAgIT0gOCAmJiBtX3BQYWxldHRlICE9IE5VTEwgJiYgbV9BbHBoYUZsYWcgIT0gMCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChtX1dpZHRoIDwgNCAmJiBtX0hlaWdodCA8IDQpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWF9SRUNUIHJlY3QoMCwgMCwgbV9XaWR0aCwgbV9IZWlnaHQpOw0KLSAgICBpZiAocFJlY3QpIHsNCi0gICAgICAgIHJlY3QuSW50ZXJzZWN0KCpwUmVjdCk7DQotICAgIH0NCi0gICAgRlhfQllURSB0cmFuc2xhdGVbMjU2XTsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsNCi0gICAgICAgIGludCBlcnIyID0gNjU1MzY7DQotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBhbF9zaXplOyBqICsrKSB7DQotICAgICAgICAgICAgRlhfQllURSBlbnRyeSA9IChGWF9CWVRFKXBQYWxldHRlW2pdOw0KLSAgICAgICAgICAgIGludCBlcnIgPSAoaW50KWVudHJ5IC0gaTsNCi0gICAgICAgICAgICBpZiAoZXJyICogZXJyIDwgZXJyMikgew0KLSAgICAgICAgICAgICAgICBlcnIyID0gZXJyICogZXJyOw0KLSAgICAgICAgICAgICAgICB0cmFuc2xhdGVbaV0gPSBlbnRyeTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgZm9yIChpbnQgcm93ID0gcmVjdC50b3A7IHJvdyA8IHJlY3QuYm90dG9tOyByb3cgKyspIHsNCi0gICAgICAgIEZYX0xQQllURSBzY2FuID0gbV9wQnVmZmVyICsgcm93ICogbV9QaXRjaDsNCi0gICAgICAgIEZYX0xQQllURSBuZXh0X3NjYW4gPSBtX3BCdWZmZXIgKyAocm93ICsgMSkgKiBtX1BpdGNoOw0KLSAgICAgICAgZm9yIChpbnQgY29sID0gcmVjdC5sZWZ0OyBjb2wgPCByZWN0LnJpZ2h0OyBjb2wgKyspIHsNCi0gICAgICAgICAgICBpbnQgc3JjX3BpeGVsID0gc2Nhbltjb2xdOw0KLSAgICAgICAgICAgIGludCBkZXN0X3BpeGVsID0gdHJhbnNsYXRlW3NyY19waXhlbF07DQotICAgICAgICAgICAgc2Nhbltjb2xdID0gKEZYX0JZVEUpZGVzdF9waXhlbDsNCi0gICAgICAgICAgICBpbnQgZXJyb3IgPSAtZGVzdF9waXhlbCArIHNyY19waXhlbDsNCi0gICAgICAgICAgICBpZiAoY29sIDwgcmVjdC5yaWdodCAtIDEpIHsNCi0gICAgICAgICAgICAgICAgaW50IHNyYyA9IHNjYW5bY29sICsgMV07DQotICAgICAgICAgICAgICAgIHNyYyArPSBlcnJvciAqIDcgLyAxNjsNCi0gICAgICAgICAgICAgICAgaWYgKHNyYyA+IDI1NSkgew0KLSAgICAgICAgICAgICAgICAgICAgc2Nhbltjb2wgKyAxXSA9IDI1NTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcmMgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICBzY2FuW2NvbCArIDFdID0gMDsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIHNjYW5bY29sICsgMV0gPSBzcmM7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGNvbCA8IHJlY3QucmlnaHQgLSAxICYmIHJvdyA8IHJlY3QuYm90dG9tIC0gMSkgew0KLSAgICAgICAgICAgICAgICBpbnQgc3JjID0gbmV4dF9zY2FuW2NvbCArIDFdOw0KLSAgICAgICAgICAgICAgICBzcmMgKz0gZXJyb3IgKiAxIC8gMTY7DQotICAgICAgICAgICAgICAgIGlmIChzcmMgPiAyNTUpIHsNCi0gICAgICAgICAgICAgICAgICAgIG5leHRfc2Nhbltjb2wgKyAxXSA9IDI1NTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcmMgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICBuZXh0X3NjYW5bY29sICsgMV0gPSAwOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgbmV4dF9zY2FuW2NvbCArIDFdID0gc3JjOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChyb3cgPCByZWN0LmJvdHRvbSAtIDEpIHsNCi0gICAgICAgICAgICAgICAgaW50IHNyYyA9IG5leHRfc2Nhbltjb2xdOw0KLSAgICAgICAgICAgICAgICBzcmMgKz0gZXJyb3IgKiA1IC8gMTY7DQotICAgICAgICAgICAgICAgIGlmIChzcmMgPiAyNTUpIHsNCi0gICAgICAgICAgICAgICAgICAgIG5leHRfc2Nhbltjb2xdID0gMjU1Ow0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNyYyA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIG5leHRfc2Nhbltjb2xdID0gMDsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIG5leHRfc2Nhbltjb2xdID0gc3JjOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChjb2wgPiByZWN0LmxlZnQgJiYgcm93IDwgcmVjdC5ib3R0b20gLSAxKSB7DQotICAgICAgICAgICAgICAgIGludCBzcmMgPSBuZXh0X3NjYW5bY29sIC0gMV07DQotICAgICAgICAgICAgICAgIHNyYyArPSBlcnJvciAqIDMgLyAxNjsNCi0gICAgICAgICAgICAgICAgaWYgKHNyYyA+IDI1NSkgew0KLSAgICAgICAgICAgICAgICAgICAgbmV4dF9zY2FuW2NvbCAtIDFdID0gMjU1Ow0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNyYyA8IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIG5leHRfc2Nhbltjb2wgLSAxXSA9IDA7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBuZXh0X3NjYW5bY29sIC0gMV0gPSBzcmM7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUNGWF9ESUJpdG1hcCogQ0ZYX0RJQlNvdXJjZTo6RmxpcEltYWdlKEZYX0JPT0wgYlhGbGlwLCBGWF9CT09MIGJZRmxpcCkgY29uc3QNCi17DQotICAgIENGWF9ESUJpdG1hcCogcEZsaXBwZWQgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOw0KLSAgICBpZiAoIXBGbGlwcGVkKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAoIXBGbGlwcGVkLT5DcmVhdGUobV9XaWR0aCwgbV9IZWlnaHQsIEdldEZvcm1hdCgpKSkgew0KLSAgICAgICAgZGVsZXRlIHBGbGlwcGVkOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcEZsaXBwZWQtPkNvcHlQYWxldHRlKG1fcFBhbGV0dGUpOw0KLSAgICBGWF9MUEJZVEUgcERlc3RCdWZmZXIgPSBwRmxpcHBlZC0+R2V0QnVmZmVyKCk7DQotICAgIGludCBCcHAgPSBtX2JwcCAvIDg7DQotICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fSGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBHZXRTY2FubGluZShyb3cpOw0KLSAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IHBEZXN0QnVmZmVyICsgbV9QaXRjaCAqIChiWUZsaXAgPyAobV9IZWlnaHQgLSByb3cgLSAxKSA6IHJvdyk7DQotICAgICAgICBpZiAoIWJYRmxpcCkgew0KLSAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIG1fUGl0Y2gpOw0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fYnBwID09IDEpIHsNCi0gICAgICAgICAgICBGWFNZU19tZW1zZXQzMihkZXN0X3NjYW4sIDAsIG1fUGl0Y2gpOw0KLSAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykNCi0gICAgICAgICAgICAgICAgaWYgKHNyY19zY2FuW2NvbCAvIDhdICYgKDEgPDwgKDcgLSBjb2wgJSA4KSkpIHsNCi0gICAgICAgICAgICAgICAgICAgIGludCBkZXN0X2NvbCA9IG1fV2lkdGggLSBjb2wgLSAxOw0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfY29sIC8gOF0gfD0gKDEgPDwgKDcgLSBkZXN0X2NvbCAlIDgpKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBkZXN0X3NjYW4gKz0gKG1fV2lkdGggLSAxKSAqIEJwcDsNCi0gICAgICAgICAgICBpZiAoQnBwID09IDEpIHsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbV9XaWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gKnNyY19zY2FuOw0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuIC0tOw0KLSAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKys7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2UgaWYgKEJwcCA9PSAzKSB7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gc3JjX3NjYW5bMF07DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBzcmNfc2NhblsxXTsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IHNyY19zY2FuWzJdOw0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuIC09IDM7DQotICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgQVNTRVJUKEJwcCA9PSA0KTsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbV9XaWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAqKEZYX0RXT1JEKilkZXN0X3NjYW4gPSAqKEZYX0RXT1JEKilzcmNfc2NhbjsNCi0gICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiAtPSA0Ow0KLSAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gNDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAobV9wQWxwaGFNYXNrKSB7DQotICAgICAgICBwRGVzdEJ1ZmZlciA9IHBGbGlwcGVkLT5tX3BBbHBoYU1hc2stPkdldEJ1ZmZlcigpOw0KLSAgICAgICAgRlhfRFdPUkQgZGVzdF9waXRjaCA9IHBGbGlwcGVkLT5tX3BBbHBoYU1hc2stPkdldFBpdGNoKCk7DQotICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBtX0hlaWdodDsgcm93ICsrKSB7DQotICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IG1fcEFscGhhTWFzay0+R2V0U2NhbmxpbmUocm93KTsNCi0gICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gcERlc3RCdWZmZXIgKyBkZXN0X3BpdGNoICogKGJZRmxpcCA/IChtX0hlaWdodCAtIHJvdyAtIDEpIDogcm93KTsNCi0gICAgICAgICAgICBpZiAoIWJYRmxpcCkgew0KLSAgICAgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihkZXN0X3NjYW4sIHNyY19zY2FuLCBkZXN0X3BpdGNoKTsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGRlc3Rfc2NhbiArPSAobV9XaWR0aCAtIDEpOw0KLSAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gKnNyY19zY2FuOw0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW4gLS07DQotICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gcEZsaXBwZWQ7DQotfQ0KLUNGWF9ESUJFeHRyYWN0b3I6OkNGWF9ESUJFeHRyYWN0b3IoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyYykNCi17DQotICAgIG1fcEJpdG1hcCA9IE5VTEw7DQotICAgIGlmIChwU3JjLT5HZXRCdWZmZXIoKSA9PSBOVUxMKSB7DQotICAgICAgICBtX3BCaXRtYXAgPSBwU3JjLT5DbG9uZSgpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wQml0bWFwID0gRlhfTkVXIENGWF9ESUJpdG1hcDsNCi0gICAgICAgIGlmICghbV9wQml0bWFwKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCFtX3BCaXRtYXAtPkNyZWF0ZShwU3JjLT5HZXRXaWR0aCgpLCBwU3JjLT5HZXRIZWlnaHQoKSwgcFNyYy0+R2V0Rm9ybWF0KCksIHBTcmMtPkdldEJ1ZmZlcigpKSkgew0KLSAgICAgICAgICAgIGRlbGV0ZSBtX3BCaXRtYXA7DQotICAgICAgICAgICAgbV9wQml0bWFwID0gTlVMTDsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBtX3BCaXRtYXAtPkNvcHlQYWxldHRlKHBTcmMtPkdldFBhbGV0dGUoKSk7DQotICAgICAgICBtX3BCaXRtYXAtPkNvcHlBbHBoYU1hc2socFNyYy0+bV9wQWxwaGFNYXNrKTsNCi0gICAgfQ0KLX0NCi1DRlhfRElCRXh0cmFjdG9yOjp+Q0ZYX0RJQkV4dHJhY3RvcigpDQotew0KLSAgICBpZiAobV9wQml0bWFwKSB7DQotICAgICAgICBkZWxldGUgbV9wQml0bWFwOw0KLSAgICB9DQotfQ0KLUNGWF9GaWx0ZXJlZERJQjo6Q0ZYX0ZpbHRlcmVkRElCKCkNCi17DQotICAgIG1fcFNjYW5saW5lID0gTlVMTDsNCi0gICAgbV9wU3JjID0gTlVMTDsNCi19DQotQ0ZYX0ZpbHRlcmVkRElCOjp+Q0ZYX0ZpbHRlcmVkRElCKCkNCi17DQotICAgIGlmIChtX3BTcmMgJiYgbV9iQXV0b0Ryb3BTcmMpIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BTcmM7DQotICAgIH0NCi0gICAgaWYgKG1fcFNjYW5saW5lKSB7DQotICAgICAgICBGWF9GcmVlKG1fcFNjYW5saW5lKTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9GaWx0ZXJlZERJQjo6TG9hZFNyYyhjb25zdCBDRlhfRElCU291cmNlKiBwU3JjLCBGWF9CT09MIGJBdXRvRHJvcFNyYykNCi17DQotICAgIG1fcFNyYyA9IHBTcmM7DQotICAgIG1fYkF1dG9Ecm9wU3JjID0gYkF1dG9Ecm9wU3JjOw0KLSAgICBtX1dpZHRoID0gcFNyYy0+R2V0V2lkdGgoKTsNCi0gICAgbV9IZWlnaHQgPSBwU3JjLT5HZXRIZWlnaHQoKTsNCi0gICAgRlhESUJfRm9ybWF0IGZvcm1hdCA9IEdldERlc3RGb3JtYXQoKTsNCi0gICAgbV9icHAgPSAoRlhfQllURSlmb3JtYXQ7DQotICAgIG1fQWxwaGFGbGFnID0gKEZYX0JZVEUpKGZvcm1hdCA+PiA4KTsNCi0gICAgbV9QaXRjaCA9IChtX1dpZHRoICogKGZvcm1hdCAmIDB4ZmYpICsgMzEpIC8gMzIgKiA0Ow0KLSAgICBtX3BQYWxldHRlID0gR2V0RGVzdFBhbGV0dGUoKTsNCi0gICAgbV9wU2NhbmxpbmUgPSBGWF9BbGxvYyhGWF9CWVRFLCBtX1BpdGNoKTsNCi19DQotRlhfTFBDQllURSBDRlhfRmlsdGVyZWRESUI6OkdldFNjYW5saW5lKGludCBsaW5lKSBjb25zdA0KLXsNCi0gICAgVHJhbnNsYXRlU2NhbmxpbmUobV9wU2NhbmxpbmUsIG1fcFNyYy0+R2V0U2NhbmxpbmUobGluZSkpOw0KLSAgICByZXR1cm4gbV9wU2NhbmxpbmU7DQotfQ0KLXZvaWQgQ0ZYX0ZpbHRlcmVkRElCOjpEb3duU2FtcGxlU2NhbmxpbmUoaW50IGxpbmUsIEZYX0xQQllURSBkZXN0X3NjYW4sIGludCBkZXN0X2JwcCwNCi0gICAgICAgIGludCBkZXN0X3dpZHRoLCBGWF9CT09MIGJGbGlwWCwgaW50IGNsaXBfbGVmdCwgaW50IGNsaXBfd2lkdGgpIGNvbnN0DQotew0KLSAgICBtX3BTcmMtPkRvd25TYW1wbGVTY2FubGluZShsaW5lLCBkZXN0X3NjYW4sIGRlc3RfYnBwLCBkZXN0X3dpZHRoLCBiRmxpcFgsIGNsaXBfbGVmdCwgY2xpcF93aWR0aCk7DQotICAgIFRyYW5zbGF0ZURvd25TYW1wbGVzKGRlc3Rfc2NhbiwgZGVzdF9zY2FuLCBjbGlwX3dpZHRoLCBkZXN0X2JwcCk7DQotfQ0KLUNGWF9JbWFnZVJlbmRlcmVyOjpDRlhfSW1hZ2VSZW5kZXJlcigpDQotew0KLSAgICBtX1N0YXR1cyA9IDA7DQotICAgIG1fcFRyYW5zZm9ybWVyID0gTlVMTDsNCi0gICAgbV9iUmdiQnl0ZU9yZGVyID0gRkFMU0U7DQotICAgIG1fQmxlbmRUeXBlID0gRlhESUJfQkxFTkRfTk9STUFMOw0KLX0NCi1DRlhfSW1hZ2VSZW5kZXJlcjo6fkNGWF9JbWFnZVJlbmRlcmVyKCkNCi17DQotICAgIGlmIChtX3BUcmFuc2Zvcm1lcikgew0KLSAgICAgICAgZGVsZXRlIG1fcFRyYW5zZm9ybWVyOw0KLSAgICB9DQotfQ0KLWV4dGVybiBGWF9SRUNUIF9GWERJQl9Td2FwQ2xpcEJveChGWF9SRUNUJiBjbGlwLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEZYX0JPT0wgYkZsaXBYLCBGWF9CT09MIGJGbGlwWSk7DQotRlhfQk9PTCBDRlhfSW1hZ2VSZW5kZXJlcjo6U3RhcnQoQ0ZYX0RJQml0bWFwKiBwRGV2aWNlLCBjb25zdCBDRlhfQ2xpcFJnbiogcENsaXBSZ24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNvdXJjZSwgaW50IGJpdG1hcF9hbHBoYSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBtYXNrX2NvbG9yLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGRpYl9mbGFncywgRlhfQk9PTCBiUmdiQnl0ZU9yZGVyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQgYmxlbmRfdHlwZSkNCi17DQotICAgIG1fTWF0cml4ID0gKnBNYXRyaXg7DQotICAgIENGWF9GbG9hdFJlY3QgaW1hZ2VfcmVjdF9mID0gbV9NYXRyaXguR2V0VW5pdFJlY3QoKTsNCi0gICAgRlhfUkVDVCBpbWFnZV9yZWN0ID0gaW1hZ2VfcmVjdF9mLkdldE91dHRlclJlY3QoKTsNCi0gICAgbV9DbGlwQm94ID0gcENsaXBSZ24gPyBwQ2xpcFJnbi0+R2V0Qm94KCkgOiBGWF9SRUNUKDAsIDAsIHBEZXZpY2UtPkdldFdpZHRoKCksIHBEZXZpY2UtPkdldEhlaWdodCgpKTsNCi0gICAgbV9DbGlwQm94LkludGVyc2VjdChpbWFnZV9yZWN0KTsNCi0gICAgaWYgKG1fQ2xpcEJveC5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBtX3BEZXZpY2UgPSBwRGV2aWNlOw0KLSAgICBtX3BDbGlwUmduID0gcENsaXBSZ247DQotICAgIG1fTWFza0NvbG9yID0gbWFza19jb2xvcjsNCi0gICAgbV9CaXRtYXBBbHBoYSA9IGJpdG1hcF9hbHBoYTsNCi0gICAgbV9NYXRyaXggPSAqcE1hdHJpeDsNCi0gICAgbV9GbGFncyA9IGRpYl9mbGFnczsNCi0gICAgbV9BbHBoYUZsYWcgPSBhbHBoYV9mbGFnOw0KLSAgICBtX3BJY2NUcmFuc2Zvcm0gPSBwSWNjVHJhbnNmb3JtOw0KLSAgICBtX2JSZ2JCeXRlT3JkZXIgPSBiUmdiQnl0ZU9yZGVyOw0KLSAgICBtX0JsZW5kVHlwZSA9IGJsZW5kX3R5cGU7DQotICAgIEZYX0JPT0wgcmV0ID0gVFJVRTsNCi0gICAgaWYgKChGWFNZU19mYWJzKG1fTWF0cml4LmIpID49IDAuNWYgfHwgbV9NYXRyaXguYSA9PSAwKSB8fA0KLSAgICAgICAgICAgIChGWFNZU19mYWJzKG1fTWF0cml4LmMpID49IDAuNWYgfHwgbV9NYXRyaXguZCA9PSAwKSApIHsNCi0gICAgICAgIGlmIChGWFNZU19mYWJzKG1fTWF0cml4LmEpIDwgRlhTWVNfZmFicyhtX01hdHJpeC5iKSAvIDIwICYmIEZYU1lTX2ZhYnMobV9NYXRyaXguZCkgPCBGWFNZU19mYWJzKG1fTWF0cml4LmMpIC8gMjAgJiYNCi0gICAgICAgICAgICAgICAgRlhTWVNfZmFicyhtX01hdHJpeC5hKSA8IDAuNWYgJiYgRlhTWVNfZmFicyhtX01hdHJpeC5kKSA8IDAuNWYpIHsNCi0gICAgICAgICAgICBpbnQgZGVzdF93aWR0aCA9IGltYWdlX3JlY3QuV2lkdGgoKTsNCi0gICAgICAgICAgICBpbnQgZGVzdF9oZWlnaHQgPSBpbWFnZV9yZWN0LkhlaWdodCgpOw0KLSAgICAgICAgICAgIEZYX1JFQ1QgYml0bWFwX2NsaXAgPSBtX0NsaXBCb3g7DQotICAgICAgICAgICAgYml0bWFwX2NsaXAuT2Zmc2V0KC1pbWFnZV9yZWN0LmxlZnQsIC1pbWFnZV9yZWN0LnRvcCk7DQotICAgICAgICAgICAgYml0bWFwX2NsaXAgPSBfRlhESUJfU3dhcENsaXBCb3goYml0bWFwX2NsaXAsIGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0LCBtX01hdHJpeC5jID4gMCwgbV9NYXRyaXguYiA8IDApOw0KLSAgICAgICAgICAgIG1fQ29tcG9zZXIuQ29tcG9zZShwRGV2aWNlLCBwQ2xpcFJnbiwgYml0bWFwX2FscGhhLCBtYXNrX2NvbG9yLCBtX0NsaXBCb3gsIFRSVUUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fTWF0cml4LmMgPiAwLCBtX01hdHJpeC5iIDwgMCwgbV9iUmdiQnl0ZU9yZGVyLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtLCBtX0JsZW5kVHlwZSk7DQotICAgICAgICAgICAgaWYgKCFtX1N0cmV0Y2hlci5TdGFydCgmbV9Db21wb3NlciwgcFNvdXJjZSwgZGVzdF9oZWlnaHQsIGRlc3Rfd2lkdGgsIGJpdG1hcF9jbGlwLCBkaWJfZmxhZ3MpKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9TdGF0dXMgPSAxOw0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9TdGF0dXMgPSAyOw0KLSAgICAgICAgbV9wVHJhbnNmb3JtZXIgPSBGWF9ORVcgQ0ZYX0ltYWdlVHJhbnNmb3JtZXI7DQotICAgICAgICBpZiAoIW1fcFRyYW5zZm9ybWVyKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wVHJhbnNmb3JtZXItPlN0YXJ0KHBTb3VyY2UsICZtX01hdHJpeCwgZGliX2ZsYWdzLCAmbV9DbGlwQm94KTsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIGludCBkZXN0X3dpZHRoID0gaW1hZ2VfcmVjdC5XaWR0aCgpOw0KLSAgICBpZiAobV9NYXRyaXguYSA8IDApIHsNCi0gICAgICAgIGRlc3Rfd2lkdGggPSAtZGVzdF93aWR0aDsNCi0gICAgfQ0KLSAgICBpbnQgZGVzdF9oZWlnaHQgPSBpbWFnZV9yZWN0LkhlaWdodCgpOw0KLSAgICBpZiAobV9NYXRyaXguZCA+IDApIHsNCi0gICAgICAgIGRlc3RfaGVpZ2h0ID0gLWRlc3RfaGVpZ2h0Ow0KLSAgICB9DQotICAgIGlmIChkZXN0X3dpZHRoID09IDAgfHwgZGVzdF9oZWlnaHQgPT0gMCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYX1JFQ1QgYml0bWFwX2NsaXAgPSBtX0NsaXBCb3g7DQotICAgIGJpdG1hcF9jbGlwLk9mZnNldCgtaW1hZ2VfcmVjdC5sZWZ0LCAtaW1hZ2VfcmVjdC50b3ApOw0KLSAgICBtX0NvbXBvc2VyLkNvbXBvc2UocERldmljZSwgcENsaXBSZ24sIGJpdG1hcF9hbHBoYSwgbWFza19jb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgIG1fQ2xpcEJveCwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgbV9iUmdiQnl0ZU9yZGVyLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtLCBtX0JsZW5kVHlwZSk7DQotICAgIG1fU3RhdHVzID0gMTsNCi0gICAgcmV0ID0gbV9TdHJldGNoZXIuU3RhcnQoJm1fQ29tcG9zZXIsIHBTb3VyY2UsIGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0LCBiaXRtYXBfY2xpcCwgZGliX2ZsYWdzKTsNCi0gICAgcmV0dXJuIHJldDsNCi19DQotRlhfQk9PTCBDRlhfSW1hZ2VSZW5kZXJlcjo6Q29udGludWUoSUZYX1BhdXNlKiBwUGF1c2UpDQotew0KLSAgICBpZiAobV9TdGF0dXMgPT0gMSkgew0KLSAgICAgICAgcmV0dXJuIG1fU3RyZXRjaGVyLkNvbnRpbnVlKHBQYXVzZSk7DQotICAgIH0gZWxzZSBpZiAobV9TdGF0dXMgPT0gMikgew0KLSAgICAgICAgaWYgKG1fcFRyYW5zZm9ybWVyLT5Db250aW51ZShwUGF1c2UpKSB7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgICAgICBDRlhfRElCaXRtYXAqIHBCaXRtYXAgPSBtX3BUcmFuc2Zvcm1lci0+bV9TdG9yZXIuRGV0YWNoKCk7DQotICAgICAgICBpZiAocEJpdG1hcCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBCaXRtYXAtPkdldEJ1ZmZlcigpID09IE5VTEwpIHsNCi0gICAgICAgICAgICBkZWxldGUgcEJpdG1hcDsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBpZiAocEJpdG1hcC0+SXNBbHBoYU1hc2soKSkgew0KLSAgICAgICAgICAgIGlmIChtX0JpdG1hcEFscGhhICE9IDI1NSkgew0KLSAgICAgICAgICAgICAgICBpZiAobV9BbHBoYUZsYWcgPj4gOCkgew0KLSAgICAgICAgICAgICAgICAgICAgbV9BbHBoYUZsYWcgPSAoKChGWF9CWVRFKSgobV9BbHBoYUZsYWcgJiAweGZmKSAqIG1fQml0bWFwQWxwaGEgLyAyNTUpKSB8ICgobV9BbHBoYUZsYWcgPj4gOCkgPDwgOCkpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgbV9NYXNrQ29sb3IgPSBGWEFSR0JfTVVMX0FMUEhBKG1fTWFza0NvbG9yLCBtX0JpdG1hcEFscGhhKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBtX3BEZXZpY2UtPkNvbXBvc2l0ZU1hc2sobV9wVHJhbnNmb3JtZXItPm1fUmVzdWx0TGVmdCwgbV9wVHJhbnNmb3JtZXItPm1fUmVzdWx0VG9wLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQml0bWFwLT5HZXRXaWR0aCgpLCBwQml0bWFwLT5HZXRIZWlnaHQoKSwgcEJpdG1hcCwgbV9NYXNrQ29sb3IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIG1fQmxlbmRUeXBlLCBtX3BDbGlwUmduLCBtX2JSZ2JCeXRlT3JkZXIsIG1fQWxwaGFGbGFnLCBtX3BJY2NUcmFuc2Zvcm0pOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAobV9CaXRtYXBBbHBoYSAhPSAyNTUpIHsNCi0gICAgICAgICAgICAgICAgcEJpdG1hcC0+TXVsdGlwbHlBbHBoYShtX0JpdG1hcEFscGhhKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9wRGV2aWNlLT5Db21wb3NpdGVCaXRtYXAobV9wVHJhbnNmb3JtZXItPm1fUmVzdWx0TGVmdCwgbV9wVHJhbnNmb3JtZXItPm1fUmVzdWx0VG9wLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCaXRtYXAtPkdldFdpZHRoKCksIHBCaXRtYXAtPkdldEhlaWdodCgpLCBwQml0bWFwLCAwLCAwLCBtX0JsZW5kVHlwZSwgbV9wQ2xpcFJnbiwgbV9iUmdiQnl0ZU9yZGVyLCBtX3BJY2NUcmFuc2Zvcm0pOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZGVsZXRlIHBCaXRtYXA7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1DRlhfQml0bWFwU3RvcmVyOjpDRlhfQml0bWFwU3RvcmVyKCkNCi17DQotICAgIG1fcEJpdG1hcCA9IE5VTEw7DQotfQ0KLUNGWF9CaXRtYXBTdG9yZXI6On5DRlhfQml0bWFwU3RvcmVyKCkNCi17DQotICAgIGlmIChtX3BCaXRtYXApIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BCaXRtYXA7DQotICAgIH0NCi19DQotQ0ZYX0RJQml0bWFwKiBDRlhfQml0bWFwU3RvcmVyOjpEZXRhY2goKQ0KLXsNCi0gICAgQ0ZYX0RJQml0bWFwKiBwQml0bWFwID0gbV9wQml0bWFwOw0KLSAgICBtX3BCaXRtYXAgPSBOVUxMOw0KLSAgICByZXR1cm4gcEJpdG1hcDsNCi19DQotdm9pZCBDRlhfQml0bWFwU3RvcmVyOjpSZXBsYWNlKENGWF9ESUJpdG1hcCogcEJpdG1hcCkNCi17DQotICAgIGlmIChtX3BCaXRtYXApIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BCaXRtYXA7DQotICAgIH0NCi0gICAgbV9wQml0bWFwID0gcEJpdG1hcDsNCi19DQotdm9pZCBDRlhfQml0bWFwU3RvcmVyOjpDb21wb3NlU2NhbmxpbmUoaW50IGxpbmUsIEZYX0xQQ0JZVEUgc2NhbmxpbmUsIEZYX0xQQ0JZVEUgc2Nhbl9leHRyYV9hbHBoYSkNCi17DQotICAgIEZYX0xQQllURSBkZXN0X2J1ZiA9IChGWF9MUEJZVEUpbV9wQml0bWFwLT5HZXRTY2FubGluZShsaW5lKTsNCi0gICAgRlhfTFBCWVRFIGRlc3RfYWxwaGFfYnVmID0gbV9wQml0bWFwLT5tX3BBbHBoYU1hc2sgPw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlhfTFBCWVRFKW1fcEJpdG1hcC0+bV9wQWxwaGFNYXNrLT5HZXRTY2FubGluZShsaW5lKSA6IE5VTEw7DQotICAgIGlmIChkZXN0X2J1Zikgew0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIoZGVzdF9idWYsIHNjYW5saW5lLCBtX3BCaXRtYXAtPkdldFBpdGNoKCkpOw0KLSAgICB9DQotICAgIGlmIChkZXN0X2FscGhhX2J1Zikgew0KLSAgICAgICAgRlhTWVNfbWVtY3B5MzIoZGVzdF9hbHBoYV9idWYsIHNjYW5fZXh0cmFfYWxwaGEsIG1fcEJpdG1hcC0+bV9wQWxwaGFNYXNrLT5HZXRQaXRjaCgpKTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENGWF9CaXRtYXBTdG9yZXI6OlNldEluZm8oaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBGWERJQl9Gb3JtYXQgc3JjX2Zvcm1hdCwgRlhfRFdPUkQqIHBTcmNQYWxldHRlKQ0KLXsNCi0gICAgbV9wQml0bWFwID0gRlhfTkVXIENGWF9ESUJpdG1hcDsNCi0gICAgaWYgKCFtX3BCaXRtYXApIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoIW1fcEJpdG1hcC0+Q3JlYXRlKHdpZHRoLCBoZWlnaHQsIHNyY19mb3JtYXQpKSB7DQotICAgICAgICBkZWxldGUgbV9wQml0bWFwOw0KLSAgICAgICAgbV9wQml0bWFwID0gTlVMTDsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAocFNyY1BhbGV0dGUpIHsNCi0gICAgICAgIG1fcEJpdG1hcC0+Q29weVBhbGV0dGUocFNyY1BhbGV0dGUpOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2RpYi5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZS5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjb2RlYy9meF9jb2RlYy5oIgorI2luY2x1ZGUgImRpYl9pbnQuaCIKKyNpbmNsdWRlIDxsaW1pdHMuaD4KK0ZYX0JPT0wgQ29udmVydEJ1ZmZlcihGWERJQl9Gb3JtYXQgZGVzdF9mb3JtYXQsIEZYX0xQQllURSBkZXN0X2J1ZiwgaW50IGRlc3RfcGl0Y2gsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwU3JjQml0bWFwLCBpbnQgc3JjX2xlZnQsIGludCBzcmNfdG9wLCBGWF9EV09SRComIHBhbCwgdm9pZCogcEljY1RyYW5zZm9ybSk7Cit2b2lkIENteWtEZWNvZGUoRlhfRFdPUkQgY215aywgaW50JiBjLCBpbnQmIG0sIGludCYgeSwgaW50JiBrKQoreworICAgIGMgPSBGWFNZU19HZXRDVmFsdWUoY215ayk7CisgICAgbSA9IEZYU1lTX0dldE1WYWx1ZShjbXlrKTsKKyAgICB5ID0gRlhTWVNfR2V0WVZhbHVlKGNteWspOworICAgIGsgPSBGWFNZU19HZXRLVmFsdWUoY215ayk7Cit9Cit2b2lkIEFyZ2JEZWNvZGUoRlhfRFdPUkQgYXJnYiwgaW50JiBhLCBpbnQmIHIsIGludCYgZywgaW50JiBiKQoreworICAgIGEgPSBGWEFSR0JfQShhcmdiKTsKKyAgICByID0gRlhBUkdCX1IoYXJnYik7CisgICAgZyA9IEZYQVJHQl9HKGFyZ2IpOworICAgIGIgPSBGWEFSR0JfQihhcmdiKTsKK30KK3ZvaWQgQXJnYkRlY29kZShGWF9EV09SRCBhcmdiLCBpbnQmIGEsIEZYX0NPTE9SUkVGJiByZ2IpCit7CisgICAgYSA9IEZYQVJHQl9BKGFyZ2IpOworICAgIHJnYiA9IEZYU1lTX1JHQihGWEFSR0JfUihhcmdiKSwgRlhBUkdCX0coYXJnYiksIEZYQVJHQl9CKGFyZ2IpKTsKK30KK0ZYX0RXT1JEIEFyZ2JFbmNvZGUoaW50IGEsIEZYX0NPTE9SUkVGIHJnYikKK3sKKyAgICByZXR1cm4gRlhBUkdCX01BS0UoYSwgRlhTWVNfR2V0UlZhbHVlKHJnYiksIEZYU1lTX0dldEdWYWx1ZShyZ2IpLCBGWFNZU19HZXRCVmFsdWUocmdiKSk7Cit9CitDRlhfRElCU291cmNlOjpDRlhfRElCU291cmNlKCkKK3sKKyAgICBtX2JwcCA9IDA7CisgICAgbV9BbHBoYUZsYWcgPSAwOworICAgIG1fV2lkdGggPSBtX0hlaWdodCA9IDA7CisgICAgbV9QaXRjaCA9IDA7CisgICAgbV9wUGFsZXR0ZSA9IE5VTEw7CisgICAgbV9wQWxwaGFNYXNrID0gTlVMTDsKK30KK0NGWF9ESUJTb3VyY2U6On5DRlhfRElCU291cmNlKCkKK3sKKyAgICBpZiAobV9wUGFsZXR0ZSkgeworICAgICAgICBGWF9GcmVlKG1fcFBhbGV0dGUpOworICAgIH0KKyAgICBpZiAobV9wQWxwaGFNYXNrKSB7CisgICAgICAgIGRlbGV0ZSBtX3BBbHBoYU1hc2s7CisgICAgfQorfQorQ0ZYX0RJQml0bWFwOjpDRlhfRElCaXRtYXAoKQoreworICAgIG1fYkV4dEJ1ZiA9IEZBTFNFOworICAgIG1fcEJ1ZmZlciA9IE5VTEw7CisgICAgbV9wUGFsZXR0ZSA9IE5VTEw7Cit9CisjZGVmaW5lIF9NQVhfT09NX0xJTUlUXwkxMjAwMDAwMAorRlhfQk9PTCBDRlhfRElCaXRtYXA6OkNyZWF0ZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIEZYRElCX0Zvcm1hdCBmb3JtYXQsIEZYX0xQQllURSBwQnVmZmVyLCBpbnQgcGl0Y2gpCit7CisgICAgbV9wQnVmZmVyID0gTlVMTDsKKyAgICBtX2JwcCA9IChGWF9CWVRFKWZvcm1hdDsKKyAgICBtX0FscGhhRmxhZyA9IChGWF9CWVRFKShmb3JtYXQgPj4gOCk7CisgICAgbV9XaWR0aCA9IG1fSGVpZ2h0ID0gbV9QaXRjaCA9IDA7CisgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAgfHwgcGl0Y2ggPCAwKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKChJTlRfTUFYIC0gMzEpIC8gd2lkdGggPCAoZm9ybWF0ICYgMHhmZikpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoIXBpdGNoKSB7CisgICAgICAgIHBpdGNoID0gKHdpZHRoICogKGZvcm1hdCAmIDB4ZmYpICsgMzEpIC8gMzIgKiA0OworICAgIH0KKyAgICBpZiAoKDEgPDwgMzApIC8gcGl0Y2ggPCBoZWlnaHQpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAocEJ1ZmZlcikgeworICAgICAgICBtX3BCdWZmZXIgPSBwQnVmZmVyOworICAgICAgICBtX2JFeHRCdWYgPSBUUlVFOworICAgIH0gZWxzZSB7CisgICAgICAgIGludCBzaXplID0gcGl0Y2ggKiBoZWlnaHQgKyA0OworICAgICAgICBpbnQgb29tbGltaXQgPSBfTUFYX09PTV9MSU1JVF87CisgICAgICAgIGlmIChvb21saW1pdCA+PSAwICYmIHNpemUgPj0gb29tbGltaXQpIHsKKyAgICAgICAgICAgIG1fcEJ1ZmZlciA9IEZYX0FsbG9jTkwoRlhfQllURSwgc2l6ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3BCdWZmZXIgPSBGWF9BbGxvYyhGWF9CWVRFLCBzaXplKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9wQnVmZmVyID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBGWFNZU19tZW1zZXQzMihtX3BCdWZmZXIsIDAsIHNpemVvZiAoRlhfQllURSkgKiBzaXplKTsKKyAgICB9CisgICAgbV9XaWR0aCA9IHdpZHRoOworICAgIG1fSGVpZ2h0ID0gaGVpZ2h0OworICAgIG1fUGl0Y2ggPSBwaXRjaDsKKyAgICBpZiAoSGFzQWxwaGEoKSAmJiBmb3JtYXQgIT0gRlhESUJfQXJnYikgeworICAgICAgICBGWF9CT09MIHJldCA9IFRSVUU7CisgICAgICAgIHJldCA9IEJ1aWxkQWxwaGFNYXNrKCk7CisgICAgICAgIGlmICghcmV0KSB7CisgICAgICAgICAgICBpZiAoIW1fYkV4dEJ1ZiAmJiBtX3BCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBGWF9GcmVlKG1fcEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgbV9wQnVmZmVyID0gTlVMTDsKKyAgICAgICAgICAgICAgICBtX1dpZHRoID0gbV9IZWlnaHQgPSBtX1BpdGNoID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENGWF9ESUJpdG1hcDo6Q29weShjb25zdCBDRlhfRElCU291cmNlKiBwU3JjKQoreworICAgIGlmIChtX3BCdWZmZXIpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoIUNyZWF0ZShwU3JjLT5HZXRXaWR0aCgpLCBwU3JjLT5HZXRIZWlnaHQoKSwgcFNyYy0+R2V0Rm9ybWF0KCkpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgQ29weVBhbGV0dGUocFNyYy0+R2V0UGFsZXR0ZSgpKTsKKyAgICBDb3B5QWxwaGFNYXNrKHBTcmMtPm1fcEFscGhhTWFzayk7CisgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgcFNyYy0+R2V0SGVpZ2h0KCk7IHJvdyArKykgeworICAgICAgICBGWFNZU19tZW1jcHkzMihtX3BCdWZmZXIgKyByb3cgKiBtX1BpdGNoLCBwU3JjLT5HZXRTY2FubGluZShyb3cpLCBtX1BpdGNoKTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitDRlhfRElCaXRtYXA6On5DRlhfRElCaXRtYXAoKQoreworICAgIGlmIChtX3BCdWZmZXIgJiYgIW1fYkV4dEJ1ZikgeworICAgICAgICBGWF9GcmVlKG1fcEJ1ZmZlcik7CisgICAgfQorICAgIG1fcEJ1ZmZlciA9IE5VTEw7Cit9Cit2b2lkIENGWF9ESUJpdG1hcDo6VGFrZU92ZXIoQ0ZYX0RJQml0bWFwKiBwU3JjQml0bWFwKQoreworICAgIGlmIChtX3BCdWZmZXIgJiYgIW1fYkV4dEJ1ZikgeworICAgICAgICBGWF9GcmVlKG1fcEJ1ZmZlcik7CisgICAgfQorICAgIGlmIChtX3BQYWxldHRlKSB7CisgICAgICAgIEZYX0ZyZWUobV9wUGFsZXR0ZSk7CisgICAgfQorICAgIGlmIChtX3BBbHBoYU1hc2spIHsKKyAgICAgICAgZGVsZXRlIG1fcEFscGhhTWFzazsKKyAgICB9CisgICAgbV9wQnVmZmVyID0gcFNyY0JpdG1hcC0+bV9wQnVmZmVyOworICAgIG1fcFBhbGV0dGUgPSBwU3JjQml0bWFwLT5tX3BQYWxldHRlOworICAgIG1fcEFscGhhTWFzayA9IHBTcmNCaXRtYXAtPm1fcEFscGhhTWFzazsKKyAgICBwU3JjQml0bWFwLT5tX3BCdWZmZXIgPSBOVUxMOworICAgIHBTcmNCaXRtYXAtPm1fcFBhbGV0dGUgPSBOVUxMOworICAgIHBTcmNCaXRtYXAtPm1fcEFscGhhTWFzayA9IE5VTEw7CisgICAgbV9icHAgPSBwU3JjQml0bWFwLT5tX2JwcDsKKyAgICBtX2JFeHRCdWYgPSBwU3JjQml0bWFwLT5tX2JFeHRCdWY7CisgICAgbV9BbHBoYUZsYWcgPSBwU3JjQml0bWFwLT5tX0FscGhhRmxhZzsKKyAgICBtX1dpZHRoID0gcFNyY0JpdG1hcC0+bV9XaWR0aDsKKyAgICBtX0hlaWdodCA9IHBTcmNCaXRtYXAtPm1fSGVpZ2h0OworICAgIG1fUGl0Y2ggPSBwU3JjQml0bWFwLT5tX1BpdGNoOworfQorQ0ZYX0RJQml0bWFwKiBDRlhfRElCU291cmNlOjpDbG9uZShjb25zdCBGWF9SRUNUKiBwQ2xpcCkgY29uc3QKK3sKKyAgICBGWF9SRUNUIHJlY3QoMCwgMCwgbV9XaWR0aCwgbV9IZWlnaHQpOworICAgIGlmIChwQ2xpcCkgeworICAgICAgICByZWN0LkludGVyc2VjdCgqcENsaXApOworICAgICAgICBpZiAocmVjdC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIENGWF9ESUJpdG1hcCogcE5ld0JpdG1hcCA9IEZYX05FVyBDRlhfRElCaXRtYXA7CisgICAgaWYgKCFwTmV3Qml0bWFwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoIXBOZXdCaXRtYXAtPkNyZWF0ZShyZWN0LldpZHRoKCksIHJlY3QuSGVpZ2h0KCksIEdldEZvcm1hdCgpKSkgeworICAgICAgICBkZWxldGUgcE5ld0JpdG1hcDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBOZXdCaXRtYXAtPkNvcHlQYWxldHRlKG1fcFBhbGV0dGUpOworICAgIHBOZXdCaXRtYXAtPkNvcHlBbHBoYU1hc2sobV9wQWxwaGFNYXNrLCBwQ2xpcCk7CisgICAgaWYgKEdldEJQUCgpID09IDEgJiYgcmVjdC5sZWZ0ICUgOCAhPSAwKSB7CisgICAgICAgIGludCBsZWZ0X3NoaWZ0ID0gcmVjdC5sZWZ0ICUgMzI7CisgICAgICAgIGludCByaWdodF9zaGlmdCA9IDMyIC0gbGVmdF9zaGlmdDsKKyAgICAgICAgaW50IGR3b3JkX2NvdW50ID0gcE5ld0JpdG1hcC0+bV9QaXRjaCAvIDQ7CisgICAgICAgIGZvciAoaW50IHJvdyA9IHJlY3QudG9wOyByb3cgPCByZWN0LmJvdHRvbTsgcm93ICsrKSB7CisgICAgICAgICAgICBGWF9EV09SRCogc3JjX3NjYW4gPSAoRlhfRFdPUkQqKUdldFNjYW5saW5lKHJvdykgKyByZWN0LmxlZnQgLyAzMjsKKyAgICAgICAgICAgIEZYX0RXT1JEKiBkZXN0X3NjYW4gPSAoRlhfRFdPUkQqKXBOZXdCaXRtYXAtPkdldFNjYW5saW5lKHJvdyAtIHJlY3QudG9wKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZHdvcmRfY291bnQ7IGkgKyspIHsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW5baV0gPSAoc3JjX3NjYW5baV0gPDwgbGVmdF9zaGlmdCkgfCAoc3JjX3NjYW5baSArIDFdID4+IHJpZ2h0X3NoaWZ0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGludCBjb3B5X2xlbiA9IChwTmV3Qml0bWFwLT5HZXRXaWR0aCgpICogcE5ld0JpdG1hcC0+R2V0QlBQKCkgKyA3KSAvIDg7CisgICAgICAgIGlmIChtX1BpdGNoIDwgKEZYX0RXT1JEKWNvcHlfbGVuKSB7CisgICAgICAgICAgICBjb3B5X2xlbiA9IG1fUGl0Y2g7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgcm93ID0gcmVjdC50b3A7IHJvdyA8IHJlY3QuYm90dG9tOyByb3cgKyspIHsKKyAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBHZXRTY2FubGluZShyb3cpICsgcmVjdC5sZWZ0ICogbV9icHAgLyA4OworICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IChGWF9MUEJZVEUpcE5ld0JpdG1hcC0+R2V0U2NhbmxpbmUocm93IC0gcmVjdC50b3ApOworICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIoZGVzdF9zY2FuLCBzcmNfc2NhbiwgY29weV9sZW4pOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwTmV3Qml0bWFwOworfQordm9pZCBDRlhfRElCU291cmNlOjpCdWlsZFBhbGV0dGUoKQoreworICAgIGlmIChtX3BQYWxldHRlKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKEdldEJQUCgpID09IDEpIHsKKyAgICAgICAgbV9wUGFsZXR0ZSA9IEZYX0FsbG9jKEZYX0RXT1JELCAyKTsKKyAgICAgICAgaWYgKCFtX3BQYWxldHRlKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYoSXNDbXlrSW1hZ2UoKSkgeworICAgICAgICAgICAgbV9wUGFsZXR0ZVswXSA9IDB4ZmY7CisgICAgICAgICAgICBtX3BQYWxldHRlWzFdID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fcFBhbGV0dGVbMF0gPSAweGZmMDAwMDAwOworICAgICAgICAgICAgbV9wUGFsZXR0ZVsxXSA9IDB4ZmZmZmZmZmY7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKEdldEJQUCgpID09IDgpIHsKKyAgICAgICAgbV9wUGFsZXR0ZSA9IEZYX0FsbG9jKEZYX0RXT1JELCAyNTYpOworICAgICAgICBpZiAoIW1fcFBhbGV0dGUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZihJc0NteWtJbWFnZSgpKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSArKykgeworICAgICAgICAgICAgICAgIG1fcFBhbGV0dGVbaV0gPSAweGZmIC0gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7CisgICAgICAgICAgICAgICAgbV9wUGFsZXR0ZVtpXSA9IDB4ZmYwMDAwMDAgfCAoaSAqIDB4MTAxMDEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorRlhfQk9PTCBDRlhfRElCU291cmNlOjpCdWlsZEFscGhhTWFzaygpCit7CisgICAgaWYgKG1fcEFscGhhTWFzaykgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgbV9wQWxwaGFNYXNrID0gRlhfTkVXIENGWF9ESUJpdG1hcDsKKyAgICBpZiAoIW1fcEFscGhhTWFzaykgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmICghbV9wQWxwaGFNYXNrLT5DcmVhdGUobV9XaWR0aCwgbV9IZWlnaHQsIEZYRElCXzhicHBNYXNrKSkgeworICAgICAgICBkZWxldGUgbV9wQWxwaGFNYXNrOworICAgICAgICBtX3BBbHBoYU1hc2sgPSBOVUxMOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEZYU1lTX21lbXNldDgobV9wQWxwaGFNYXNrLT5HZXRCdWZmZXIoKSwgMHhmZiwgbV9wQWxwaGFNYXNrLT5HZXRIZWlnaHQoKSptX3BBbHBoYU1hc2stPkdldFBpdGNoKCkpOworICAgIHJldHVybiBUUlVFOworfQorRlhfRFdPUkQgQ0ZYX0RJQlNvdXJjZTo6R2V0UGFsZXR0ZUVudHJ5KGludCBpbmRleCkgY29uc3QKK3sKKyAgICBBU1NFUlQoKEdldEJQUCgpID09IDEgfHwgR2V0QlBQKCkgPT0gOCkgJiYgIUlzQWxwaGFNYXNrKCkpOworICAgIGlmIChtX3BQYWxldHRlKSB7CisgICAgICAgIHJldHVybiBtX3BQYWxldHRlW2luZGV4XTsKKyAgICB9CisgICAgaWYgKElzQ215a0ltYWdlKCkpIHsKKyAgICAgICAgaWYgKEdldEJQUCgpID09IDEpIHsKKyAgICAgICAgICAgIHJldHVybiBpbmRleCA/IDAgOiAweGZmOworICAgICAgICB9CisgICAgICAgIHJldHVybiAweGZmIC0gaW5kZXg7CisgICAgfQorICAgIGlmIChHZXRCUFAoKSA9PSAxKSB7CisgICAgICAgIHJldHVybiBpbmRleCA/IDB4ZmZmZmZmZmYgOiAweGZmMDAwMDAwOworICAgIH0KKyAgICByZXR1cm4gaW5kZXggKiAweDEwMTAxIHwgMHhmZjAwMDAwMDsKK30KK3ZvaWQgQ0ZYX0RJQlNvdXJjZTo6U2V0UGFsZXR0ZUVudHJ5KGludCBpbmRleCwgRlhfRFdPUkQgY29sb3IpCit7CisgICAgQVNTRVJUKChHZXRCUFAoKSA9PSAxIHx8IEdldEJQUCgpID09IDgpICYmICFJc0FscGhhTWFzaygpKTsKKyAgICBpZiAobV9wUGFsZXR0ZSA9PSBOVUxMKSB7CisgICAgICAgIEJ1aWxkUGFsZXR0ZSgpOworICAgIH0KKyAgICBtX3BQYWxldHRlW2luZGV4XSA9IGNvbG9yOworfQoraW50IENGWF9ESUJTb3VyY2U6OkZpbmRQYWxldHRlKEZYX0RXT1JEIGNvbG9yKSBjb25zdAoreworICAgIEFTU0VSVCgoR2V0QlBQKCkgPT0gMSB8fCBHZXRCUFAoKSA9PSA4KSAmJiAhSXNBbHBoYU1hc2soKSk7CisgICAgaWYgKG1fcFBhbGV0dGUgPT0gTlVMTCkgeworICAgICAgICBpZiAoSXNDbXlrSW1hZ2UoKSkgeworICAgICAgICAgICAgaWYgKEdldEJQUCgpID09IDEpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKChGWF9CWVRFKWNvbG9yID09IDB4ZmYpID8gMCA6IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMHhmZiAtIChGWF9CWVRFKWNvbG9yOworICAgICAgICB9CisgICAgICAgIGlmIChHZXRCUFAoKSA9PSAxKSB7CisgICAgICAgICAgICByZXR1cm4gKChGWF9CWVRFKWNvbG9yID09IDB4ZmYpID8gMSA6IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChGWF9CWVRFKWNvbG9yOworICAgIH0KKyAgICBpbnQgcGFsc2l6ZSA9ICgxIDw8IEdldEJQUCgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhbHNpemU7IGkgKyspCisgICAgICAgIGlmIChtX3BQYWxldHRlW2ldID09IGNvbG9yKSB7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIHJldHVybiAtMTsKK30KK3ZvaWQgQ0ZYX0RJQml0bWFwOjpDbGVhcihGWF9EV09SRCBjb2xvcikKK3sKKyAgICBpZiAobV9wQnVmZmVyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzd2l0Y2ggKEdldEZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgRlhESUJfMWJwcE1hc2s6CisgICAgICAgICAgICBGWFNZU19tZW1zZXQ4KG1fcEJ1ZmZlciwgKGNvbG9yICYgMHhmZjAwMDAwMCkgPyAweGZmIDogMCwgbV9QaXRjaCAqIG1fSGVpZ2h0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZYRElCXzFicHBSZ2I6IHsKKyAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBGaW5kUGFsZXR0ZShjb2xvcik7CisgICAgICAgICAgICAgICAgRlhTWVNfbWVtc2V0OChtX3BCdWZmZXIsIGluZGV4ID8gMHhmZiA6IDAsIG1fUGl0Y2ggKiBtX0hlaWdodCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgRlhESUJfOGJwcE1hc2s6CisgICAgICAgICAgICBGWFNZU19tZW1zZXQ4KG1fcEJ1ZmZlciwgY29sb3IgPj4gMjQsIG1fUGl0Y2ggKiBtX0hlaWdodCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGWERJQl84YnBwUmdiOiB7CisgICAgICAgICAgICAgICAgaW50IGluZGV4ID0gRmluZFBhbGV0dGUoY29sb3IpOworICAgICAgICAgICAgICAgIEZYU1lTX21lbXNldDgobV9wQnVmZmVyLCBpbmRleCwgbV9QaXRjaCAqIG1fSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBGWERJQl9SZ2I6CisgICAgICAgIGNhc2UgRlhESUJfUmdiYTogeworICAgICAgICAgICAgICAgIGludCBhLCByLCBnLCBiOworICAgICAgICAgICAgICAgIEFyZ2JEZWNvZGUoY29sb3IsIGEsIHIsIGcsIGIpOworICAgICAgICAgICAgICAgIGlmIChyID09IGcgJiYgZyA9PSBiKSB7CisgICAgICAgICAgICAgICAgICAgIEZYU1lTX21lbXNldDgobV9wQnVmZmVyLCByLCBtX1BpdGNoICogbV9IZWlnaHQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGludCBieXRlX3BvcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9wQnVmZmVyW2J5dGVfcG9zKytdID0gYjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcEJ1ZmZlcltieXRlX3BvcysrXSA9IGc7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BCdWZmZXJbYnl0ZV9wb3MrK10gPSByOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDE7IHJvdyA8IG1fSGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKG1fcEJ1ZmZlciArIHJvdyAqIG1fUGl0Y2gsIG1fcEJ1ZmZlciwgbV9QaXRjaCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgRlhESUJfUmdiMzI6CisgICAgICAgIGNhc2UgRlhESUJfQXJnYjogeworICAgICAgICAgICAgICAgIGNvbG9yID0gSXNDbXlrSW1hZ2UoKSA/IEZYQ01ZS19UT0RJQihjb2xvcikgOiBGWEFSR0JfVE9ESUIoY29sb3IpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9XaWR0aDsgaSArKykgeworICAgICAgICAgICAgICAgICAgICAoKEZYX0RXT1JEKiltX3BCdWZmZXIpW2ldID0gY29sb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDE7IHJvdyA8IG1fSGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wQnVmZmVyICsgcm93ICogbV9QaXRjaCwgbV9wQnVmZmVyLCBtX1BpdGNoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9Cit2b2lkIENGWF9ESUJTb3VyY2U6OkdldE92ZXJsYXBSZWN0KGludCYgZGVzdF9sZWZ0LCBpbnQmIGRlc3RfdG9wLCBpbnQmIHdpZHRoLCBpbnQmIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY193aWR0aCwgaW50IHNyY19oZWlnaHQsIGludCYgc3JjX2xlZnQsIGludCYgc3JjX3RvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0NsaXBSZ24qIHBDbGlwUmduKQoreworICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQVNTRVJUKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTsKKyAgICBpZiAoZGVzdF9sZWZ0ID4gbV9XaWR0aCB8fCBkZXN0X3RvcCA+IG1fSGVpZ2h0KSB7CisgICAgICAgIHdpZHRoID0gMDsKKyAgICAgICAgaGVpZ2h0ID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgeF9vZmZzZXQgPSBkZXN0X2xlZnQgLSBzcmNfbGVmdDsKKyAgICBpbnQgeV9vZmZzZXQgPSBkZXN0X3RvcCAtIHNyY190b3A7CisgICAgRlhfUkVDVCBzcmNfcmVjdChzcmNfbGVmdCwgc3JjX3RvcCwgc3JjX2xlZnQgKyB3aWR0aCwgc3JjX3RvcCArIGhlaWdodCk7CisgICAgRlhfUkVDVCBzcmNfYm91bmQoMCwgMCwgc3JjX3dpZHRoLCBzcmNfaGVpZ2h0KTsKKyAgICBzcmNfcmVjdC5JbnRlcnNlY3Qoc3JjX2JvdW5kKTsKKyAgICBGWF9SRUNUIGRlc3RfcmVjdChzcmNfcmVjdC5sZWZ0ICsgeF9vZmZzZXQsIHNyY19yZWN0LnRvcCArIHlfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgIHNyY19yZWN0LnJpZ2h0ICsgeF9vZmZzZXQsIHNyY19yZWN0LmJvdHRvbSArIHlfb2Zmc2V0KTsKKyAgICBGWF9SRUNUIGRlc3RfYm91bmQoMCwgMCwgbV9XaWR0aCwgbV9IZWlnaHQpOworICAgIGRlc3RfcmVjdC5JbnRlcnNlY3QoZGVzdF9ib3VuZCk7CisgICAgaWYgKHBDbGlwUmduKSB7CisgICAgICAgIGRlc3RfcmVjdC5JbnRlcnNlY3QocENsaXBSZ24tPkdldEJveCgpKTsKKyAgICB9CisgICAgZGVzdF9sZWZ0ID0gZGVzdF9yZWN0LmxlZnQ7CisgICAgZGVzdF90b3AgPSBkZXN0X3JlY3QudG9wOworICAgIHNyY19sZWZ0ID0gZGVzdF9sZWZ0IC0geF9vZmZzZXQ7CisgICAgc3JjX3RvcCA9IGRlc3RfdG9wIC0geV9vZmZzZXQ7CisgICAgd2lkdGggPSBkZXN0X3JlY3QucmlnaHQgLSBkZXN0X3JlY3QubGVmdDsKKyAgICBoZWlnaHQgPSBkZXN0X3JlY3QuYm90dG9tIC0gZGVzdF9yZWN0LnRvcDsKK30KK0ZYX0JPT0wgQ0ZYX0RJQml0bWFwOjpUcmFuc2ZlckJpdG1hcChpbnQgZGVzdF9sZWZ0LCBpbnQgZGVzdF90b3AsIGludCB3aWR0aCwgaW50IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCU291cmNlKiBwU3JjQml0bWFwLCBpbnQgc3JjX2xlZnQsIGludCBzcmNfdG9wLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIGlmIChtX3BCdWZmZXIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEdldE92ZXJsYXBSZWN0KGRlc3RfbGVmdCwgZGVzdF90b3AsIHdpZHRoLCBoZWlnaHQsIHBTcmNCaXRtYXAtPkdldFdpZHRoKCksIHBTcmNCaXRtYXAtPkdldEhlaWdodCgpLCBzcmNfbGVmdCwgc3JjX3RvcCwgTlVMTCk7CisgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIEZYRElCX0Zvcm1hdCBkZXN0X2Zvcm1hdCA9IEdldEZvcm1hdCgpOworICAgIEZYRElCX0Zvcm1hdCBzcmNfZm9ybWF0ID0gcFNyY0JpdG1hcC0+R2V0Rm9ybWF0KCk7CisgICAgaWYgKGRlc3RfZm9ybWF0ID09IHNyY19mb3JtYXQgJiYgcEljY1RyYW5zZm9ybSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChHZXRCUFAoKSA9PSAxKSB7CisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBtX3BCdWZmZXIgKyAoZGVzdF90b3AgKyByb3cpICogbV9QaXRjaDsKKyAgICAgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gcFNyY0JpdG1hcC0+R2V0U2NhbmxpbmUoc3JjX3RvcCArIHJvdyk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX3NjYW5bKHNyY19sZWZ0ICsgY29sKSAvIDhdICYgKDEgPDwgKDcgLSAoc3JjX2xlZnQgKyBjb2wpICUgOCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bKGRlc3RfbGVmdCArIGNvbCkgLyA4XSB8PSAxIDw8ICg3IC0gKGRlc3RfbGVmdCArIGNvbCkgJSA4KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsoZGVzdF9sZWZ0ICsgY29sKSAvIDhdICY9IH4oMSA8PCAoNyAtIChkZXN0X2xlZnQgKyBjb2wpICUgOCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW50IEJwcCA9IEdldEJQUCgpIC8gODsKKyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7CisgICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IG1fcEJ1ZmZlciArIChkZXN0X3RvcCArIHJvdykgKiBtX1BpdGNoICsgZGVzdF9sZWZ0ICogQnBwOworICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBwU3JjQml0bWFwLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KSArIHNyY19sZWZ0ICogQnBwOworICAgICAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIHdpZHRoICogQnBwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX3BQYWxldHRlKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fYnBwID09IDgpIHsKKyAgICAgICAgICAgIGRlc3RfZm9ybWF0ID0gRlhESUJfOGJwcE1hc2s7CisgICAgICAgIH0KKyAgICAgICAgRlhfTFBCWVRFIGRlc3RfYnVmID0gbV9wQnVmZmVyICsgZGVzdF90b3AgKiBtX1BpdGNoICsgZGVzdF9sZWZ0ICogR2V0QlBQKCkgLyA4OworICAgICAgICBGWF9EV09SRCogZF9wbHQgPSBOVUxMOworICAgICAgICBpZighQ29udmVydEJ1ZmZlcihkZXN0X2Zvcm1hdCwgZGVzdF9idWYsIG1fUGl0Y2gsIHdpZHRoLCBoZWlnaHQsIHBTcmNCaXRtYXAsIHNyY19sZWZ0LCBzcmNfdG9wLCBkX3BsdCwgcEljY1RyYW5zZm9ybSkpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKyNpZm5kZWYgX0ZQREZBUElfTUlOSV8KK0ZYX0JPT0wgQ0ZYX0RJQml0bWFwOjpUcmFuc2Zlck1hc2soaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBNYXNrLCBGWF9EV09SRCBjb2xvciwgaW50IHNyY19sZWZ0LCBpbnQgc3JjX3RvcCwgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgaWYgKG1fcEJ1ZmZlciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgQVNTRVJUKEhhc0FscGhhKCkgJiYgKG1fYnBwID49IDI0KSk7CisgICAgQVNTRVJUKHBNYXNrLT5Jc0FscGhhTWFzaygpKTsKKyAgICBpZiAoIUhhc0FscGhhKCkgfHwgIXBNYXNrLT5Jc0FscGhhTWFzaygpIHx8IG1fYnBwIDwgMjQpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBHZXRPdmVybGFwUmVjdChkZXN0X2xlZnQsIGRlc3RfdG9wLCB3aWR0aCwgaGVpZ2h0LCBwTWFzay0+R2V0V2lkdGgoKSwgcE1hc2stPkdldEhlaWdodCgpLCBzcmNfbGVmdCwgc3JjX3RvcCwgTlVMTCk7CisgICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGludCBzcmNfcGl0Y2ggPSBwTWFzay0+R2V0UGl0Y2goKTsKKyAgICBpbnQgc3JjX2JwcCA9IHBNYXNrLT5HZXRCUFAoKTsKKyAgICBpbnQgYWxwaGE7CisgICAgRlhfRFdPUkQgZHN0X2NvbG9yOworICAgIGlmIChhbHBoYV9mbGFnID4+IDgpIHsKKyAgICAgICAgYWxwaGEgPSBhbHBoYV9mbGFnICYgMHhmZjsKKyAgICAgICAgZHN0X2NvbG9yID0gRlhDTVlLX1RPRElCKGNvbG9yKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhbHBoYSA9IEZYQVJHQl9BKGNvbG9yKTsKKyAgICAgICAgZHN0X2NvbG9yID0gRlhBUkdCX1RPRElCKGNvbG9yKTsKKyAgICB9CisgICAgRlhfTFBCWVRFIGNvbG9yX3AgPSAoRlhfTFBCWVRFKSZkc3RfY29sb3I7CisgICAgaWYgKHBJY2NUcmFuc2Zvcm0gJiYgQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKSAmJiBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKSkgeworICAgICAgICBJQ29kZWNfSWNjTW9kdWxlKiBwSWNjTW9kdWxlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCk7CisgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGNvbG9yX3AsIGNvbG9yX3AsIDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChhbHBoYV9mbGFnID4+IDggJiYgIUlzQ215a0ltYWdlKCkpCisgICAgICAgICAgICBBZG9iZUNNWUtfdG9fc1JHQjEoRlhTWVNfR2V0Q1ZhbHVlKGNvbG9yKSwgRlhTWVNfR2V0TVZhbHVlKGNvbG9yKSwgRlhTWVNfR2V0WVZhbHVlKGNvbG9yKSwgRlhTWVNfR2V0S1ZhbHVlKGNvbG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcl9wWzJdLCBjb2xvcl9wWzFdLCBjb2xvcl9wWzBdKTsKKyAgICAgICAgZWxzZSBpZiAoIShhbHBoYV9mbGFnID4+IDgpICYmIElzQ215a0ltYWdlKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZighSXNDbXlrSW1hZ2UoKSkgeworICAgICAgICBjb2xvcl9wWzNdID0gKEZYX0JZVEUpYWxwaGE7CisgICAgfQorICAgIGlmIChHZXRGb3JtYXQoKSA9PSBGWERJQl9BcmdiKSB7CisgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7CisgICAgICAgICAgICBGWF9EV09SRCogZGVzdF9wb3MgPSAoRlhfRFdPUkQqKShtX3BCdWZmZXIgKyAoZGVzdF90b3AgKyByb3cpICogbV9QaXRjaCArIGRlc3RfbGVmdCAqIDQpOworICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBNYXNrLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KTsKKyAgICAgICAgICAgIGlmIChzcmNfYnBwID09IDEpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYml0cG9zID0gc3JjX2xlZnQgKyBjb2w7CisgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfc2NhbltzcmNfYml0cG9zIC8gOF0gJiAoMSA8PCAoNyAtIHNyY19iaXRwb3MgJSA4KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3BvcyA9IGRzdF9jb2xvcjsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3BvcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3MgKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSBzcmNfbGVmdDsKKyAgICAgICAgICAgICAgICBkc3RfY29sb3IgPSBGWEFSR0JfVE9ESUIoZHN0X2NvbG9yKTsKKyAgICAgICAgICAgICAgICBkc3RfY29sb3IgJj0gMHhmZmZmZmY7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICBGWEFSR0JfU0VURElCKGRlc3RfcG9zKyssIGRzdF9jb2xvciB8ICgoYWxwaGEgKiAoKnNyY19zY2FuKyspIC8gMjU1KSA8PCAyNCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGludCBjb21wcyA9IG1fYnBwIC8gODsKKyAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X2NvbG9yX3BvcyA9IG1fcEJ1ZmZlciArIChkZXN0X3RvcCArIHJvdykgKiBtX1BpdGNoICsgZGVzdF9sZWZ0ICogY29tcHM7CisgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9hbHBoYV9wb3MgPSAoRlhfTFBCWVRFKW1fcEFscGhhTWFzay0+R2V0U2NhbmxpbmUoZGVzdF90b3AgKyByb3cpICsgZGVzdF9sZWZ0OworICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBNYXNrLT5HZXRTY2FubGluZShzcmNfdG9wICsgcm93KTsKKyAgICAgICAgICAgIGlmIChzcmNfYnBwID09IDEpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYml0cG9zID0gc3JjX2xlZnQgKyBjb2w7CisgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfc2NhbltzcmNfYml0cG9zIC8gOF0gJiAoMSA8PCAoNyAtIHNyY19iaXRwb3MgJSA4KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKGRlc3RfY29sb3JfcG9zLCBjb2xvcl9wLCBjb21wcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9hbHBoYV9wb3MgPSAweGZmOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgRlhTWVNfbWVtc2V0MzIoZGVzdF9jb2xvcl9wb3MsIDAsIGNvbXBzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X2FscGhhX3BvcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVzdF9jb2xvcl9wb3MgKz0gY29tcHM7CisgICAgICAgICAgICAgICAgICAgIGRlc3RfYWxwaGFfcG9zICsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gc3JjX2xlZnQ7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihkZXN0X2NvbG9yX3BvcywgY29sb3JfcCwgY29tcHMpOworICAgICAgICAgICAgICAgICAgICBkZXN0X2NvbG9yX3BvcyArPSBjb21wczsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3RfYWxwaGFfcG9zKysgPSAoYWxwaGEgKiAoKnNyY19zY2FuKyspIC8gMjU1KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CisjZW5kaWYKK3ZvaWQgQ0ZYX0RJQlNvdXJjZTo6Q29weVBhbGV0dGUoY29uc3QgRlhfRFdPUkQqIHBTcmMsIEZYX0RXT1JEIHNpemUpCit7CisgICAgaWYgKHBTcmMgPT0gTlVMTCB8fCBHZXRCUFAoKSA+IDgpIHsKKyAgICAgICAgaWYgKG1fcFBhbGV0dGUpIHsKKyAgICAgICAgICAgIEZYX0ZyZWUobV9wUGFsZXR0ZSk7CisgICAgICAgIH0KKyAgICAgICAgbV9wUGFsZXR0ZSA9IE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgRlhfRFdPUkQgcGFsX3NpemUgPSAxIDw8IEdldEJQUCgpOworICAgICAgICBpZiAobV9wUGFsZXR0ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBtX3BQYWxldHRlID0gRlhfQWxsb2MoRlhfRFdPUkQsIHBhbF9zaXplKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1fcFBhbGV0dGUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAocGFsX3NpemUgPiBzaXplKSB7CisgICAgICAgICAgICBwYWxfc2l6ZSA9IHNpemU7CisgICAgICAgIH0KKyAgICAgICAgRlhTWVNfbWVtY3B5MzIobV9wUGFsZXR0ZSwgcFNyYywgcGFsX3NpemUgKiBzaXplb2YoRlhfRFdPUkQpKTsKKyAgICB9Cit9Cit2b2lkIENGWF9ESUJTb3VyY2U6OkdldFBhbGV0dGUoRlhfRFdPUkQqIHBhbCwgaW50IGFscGhhKSBjb25zdAoreworICAgIEFTU0VSVChHZXRCUFAoKSA8PSA4ICYmICFJc0NteWtJbWFnZSgpKTsKKyAgICBpZiAoR2V0QlBQKCkgPT0gMSkgeworICAgICAgICBwYWxbMF0gPSAoKG1fcFBhbGV0dGUgPyBtX3BQYWxldHRlWzBdIDogMHhmZjAwMDAwMCkgJiAweGZmZmZmZikgfCAoYWxwaGEgPDwgMjQpOworICAgICAgICBwYWxbMV0gPSAoKG1fcFBhbGV0dGUgPyBtX3BQYWxldHRlWzFdIDogMHhmZmZmZmZmZikgJiAweGZmZmZmZikgfCAoYWxwaGEgPDwgMjQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX3BQYWxldHRlKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7CisgICAgICAgICAgICBwYWxbaV0gPSAobV9wUGFsZXR0ZVtpXSAmIDB4MDBmZmZmZmYpIHwgKGFscGhhIDw8IDI0KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7CisgICAgICAgICAgICBwYWxbaV0gPSAoaSAqIDB4MTAxMDEpIHwgKGFscGhhIDw8IDI0KTsKKyAgICAgICAgfQorICAgIH0KK30KK0NGWF9ESUJpdG1hcCogQ0ZYX0RJQlNvdXJjZTo6R2V0QWxwaGFNYXNrKGNvbnN0IEZYX1JFQ1QqIHBDbGlwKSBjb25zdAoreworICAgIEFTU0VSVChHZXRGb3JtYXQoKSA9PSBGWERJQl9BcmdiKTsKKyAgICBGWF9SRUNUIHJlY3QoMCwgMCwgbV9XaWR0aCwgbV9IZWlnaHQpOworICAgIGlmIChwQ2xpcCkgeworICAgICAgICByZWN0LkludGVyc2VjdCgqcENsaXApOworICAgICAgICBpZiAocmVjdC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIENGWF9ESUJpdG1hcCogcE1hc2sgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOworICAgIGlmICghcE1hc2spIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmICghcE1hc2stPkNyZWF0ZShyZWN0LldpZHRoKCksIHJlY3QuSGVpZ2h0KCksIEZYRElCXzhicHBNYXNrKSkgeworICAgICAgICBkZWxldGUgcE1hc2s7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBmb3IgKGludCByb3cgPSByZWN0LnRvcDsgcm93IDwgcmVjdC5ib3R0b207IHJvdyArKykgeworICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gR2V0U2NhbmxpbmUocm93KSArIHJlY3QubGVmdCAqIDQgKyAzOworICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gKEZYX0xQQllURSlwTWFzay0+R2V0U2NhbmxpbmUocm93IC0gcmVjdC50b3ApOworICAgICAgICBmb3IgKGludCBjb2wgPSByZWN0LmxlZnQ7IGNvbCA8IHJlY3QucmlnaHQ7IGNvbCArKykgeworICAgICAgICAgICAgKmRlc3Rfc2NhbiArKyA9ICpzcmNfc2NhbjsKKyAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBNYXNrOworfQorRlhfQk9PTCBDRlhfRElCU291cmNlOjpDb3B5QWxwaGFNYXNrKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBBbHBoYU1hc2ssIGNvbnN0IEZYX1JFQ1QqIHBDbGlwKQoreworICAgIGlmICghSGFzQWxwaGEoKSB8fCBHZXRGb3JtYXQoKSA9PSBGWERJQl9BcmdiKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKHBBbHBoYU1hc2spIHsKKyAgICAgICAgRlhfUkVDVCByZWN0KDAsIDAsIHBBbHBoYU1hc2stPm1fV2lkdGgsIHBBbHBoYU1hc2stPm1fSGVpZ2h0KTsKKyAgICAgICAgaWYgKHBDbGlwKSB7CisgICAgICAgICAgICByZWN0LkludGVyc2VjdCgqcENsaXApOworICAgICAgICAgICAgaWYgKHJlY3QuSXNFbXB0eSgpIHx8IHJlY3QuV2lkdGgoKSAhPSBtX1dpZHRoIHx8IHJlY3QuSGVpZ2h0KCkgIT0gbV9IZWlnaHQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAocEFscGhhTWFzay0+bV9XaWR0aCAhPSBtX1dpZHRoIHx8IHBBbHBoYU1hc2stPm1fSGVpZ2h0ICE9IG1fSGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fSGVpZ2h0OyByb3cgKyspCisgICAgICAgICAgICBGWFNZU19tZW1jcHkzMigodm9pZCopbV9wQWxwaGFNYXNrLT5HZXRTY2FubGluZShyb3cpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFscGhhTWFzay0+R2V0U2NhbmxpbmUocm93ICsgcmVjdC50b3ApICsgcmVjdC5sZWZ0LCBtX3BBbHBoYU1hc2stPm1fUGl0Y2gpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcEFscGhhTWFzay0+Q2xlYXIoMHhmZjAwMDAwMCk7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorY29uc3QgaW50IGdfQ2hhbm5lbE9mZnNldFtdID0gezAsIDIsIDEsIDAsIDAsIDEsIDIsIDMsIDN9OworRlhfQk9PTCBDRlhfRElCaXRtYXA6OkxvYWRDaGFubmVsKEZYRElCX0NoYW5uZWwgZGVzdENoYW5uZWwsIGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmNCaXRtYXAsIEZYRElCX0NoYW5uZWwgc3JjQ2hhbm5lbCkKK3sKKyAgICBpZiAobV9wQnVmZmVyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDRlhfRElCU291cmNlKiBwU3JjQ2xvbmUgPSAoQ0ZYX0RJQlNvdXJjZSopcFNyY0JpdG1hcDsKKyAgICBDRlhfRElCaXRtYXAqIHBEc3QgPSB0aGlzOworICAgIGludCBkZXN0T2Zmc2V0LCBzcmNPZmZzZXQ7CisgICAgaWYgKHNyY0NoYW5uZWwgPT0gRlhESUJfQWxwaGEpIHsKKyAgICAgICAgaWYgKCFwU3JjQml0bWFwLT5IYXNBbHBoYSgpICYmICFwU3JjQml0bWFwLT5Jc0FscGhhTWFzaygpKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBTcmNCaXRtYXAtPkdldEJQUCgpID09IDEpIHsKKyAgICAgICAgICAgIHBTcmNDbG9uZSA9IHBTcmNCaXRtYXAtPkNsb25lQ29udmVydChGWERJQl84YnBwTWFzayk7CisgICAgICAgICAgICBpZiAocFNyY0Nsb25lID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYocFNyY0JpdG1hcC0+R2V0Rm9ybWF0KCkgPT0gRlhESUJfQXJnYikgeworICAgICAgICAgICAgc3JjT2Zmc2V0ID0gMzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNyY09mZnNldCA9IDA7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocFNyY0JpdG1hcC0+SXNBbHBoYU1hc2soKSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmIChwU3JjQml0bWFwLT5HZXRCUFAoKSA8IDI0KSB7CisgICAgICAgICAgICBpZiAocFNyY0JpdG1hcC0+SXNDbXlrSW1hZ2UoKSkgeworICAgICAgICAgICAgICAgIHBTcmNDbG9uZSA9IHBTcmNCaXRtYXAtPkNsb25lQ29udmVydCgoRlhESUJfRm9ybWF0KSgocFNyY0JpdG1hcC0+R2V0Rm9ybWF0KCkgJiAweGZmMDApIHwgMHgyMCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwU3JjQ2xvbmUgPSBwU3JjQml0bWFwLT5DbG9uZUNvbnZlcnQoKEZYRElCX0Zvcm1hdCkoKHBTcmNCaXRtYXAtPkdldEZvcm1hdCgpICYgMHhmZjAwKSB8IDB4MTgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwU3JjQ2xvbmUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzcmNPZmZzZXQgPSBnX0NoYW5uZWxPZmZzZXRbc3JjQ2hhbm5lbF07CisgICAgfQorICAgIGlmIChkZXN0Q2hhbm5lbCA9PSBGWERJQl9BbHBoYSkgeworICAgICAgICBpZiAoSXNBbHBoYU1hc2soKSkgeworICAgICAgICAgICAgaWYoIUNvbnZlcnRGb3JtYXQoRlhESUJfOGJwcE1hc2spKSB7CisgICAgICAgICAgICAgICAgaWYgKHBTcmNDbG9uZSAhPSBwU3JjQml0bWFwKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwU3JjQ2xvbmU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlc3RPZmZzZXQgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGVzdE9mZnNldCA9IDA7CisgICAgICAgICAgICBpZighQ29udmVydEZvcm1hdChJc0NteWtJbWFnZSgpID8gRlhESUJfQ215a2EgOiBGWERJQl9BcmdiKSkgeworICAgICAgICAgICAgICAgIGlmIChwU3JjQ2xvbmUgIT0gcFNyY0JpdG1hcCkgeworICAgICAgICAgICAgICAgICAgICBkZWxldGUgcFNyY0Nsb25lOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoR2V0Rm9ybWF0KCkgPT0gRlhESUJfQXJnYikgeworICAgICAgICAgICAgICAgIGRlc3RPZmZzZXQgPSAzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKElzQWxwaGFNYXNrKCkpIHsKKyAgICAgICAgICAgIGlmIChwU3JjQ2xvbmUgIT0gcFNyY0JpdG1hcCkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBwU3JjQ2xvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKEdldEJQUCgpIDwgMjQpIHsKKyAgICAgICAgICAgIGlmIChIYXNBbHBoYSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFDb252ZXJ0Rm9ybWF0KElzQ215a0ltYWdlKCkgPyBGWERJQl9DbXlrYSA6IEZYRElCX0FyZ2IpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwU3JjQ2xvbmUgIT0gcFNyY0JpdG1hcCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBTcmNDbG9uZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlCisjaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfCisgICAgICAgICAgICAgICAgaWYgKCFDb252ZXJ0Rm9ybWF0KElzQ215a0ltYWdlKCkgPyBGWERJQl9DbXlrIDogRlhESUJfUmdiMzIpKSB7CisjZWxzZQorICAgICAgICAgICAgICAgIGlmICghQ29udmVydEZvcm1hdChJc0NteWtJbWFnZSgpID8gRlhESUJfQ215ayA6IEZYRElCX1JnYikpIHsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBpZiAocFNyY0Nsb25lICE9IHBTcmNCaXRtYXApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwU3JjQ2xvbmU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZXN0T2Zmc2V0ID0gZ19DaGFubmVsT2Zmc2V0W2Rlc3RDaGFubmVsXTsKKyAgICB9CisgICAgaWYgKHNyY0NoYW5uZWwgPT0gRlhESUJfQWxwaGEgJiYgcFNyY0Nsb25lLT5tX3BBbHBoYU1hc2spIHsKKyAgICAgICAgQ0ZYX0RJQml0bWFwKiBwQWxwaGFNYXNrID0gcFNyY0Nsb25lLT5tX3BBbHBoYU1hc2s7CisgICAgICAgIGlmIChwU3JjQ2xvbmUtPkdldFdpZHRoKCkgIT0gbV9XaWR0aCB8fCBwU3JjQ2xvbmUtPkdldEhlaWdodCgpICE9IG1fSGVpZ2h0KSB7CisgICAgICAgICAgICBpZiAocEFscGhhTWFzaykgeworICAgICAgICAgICAgICAgIHBBbHBoYU1hc2sgPSBwQWxwaGFNYXNrLT5TdHJldGNoVG8obV9XaWR0aCwgbV9IZWlnaHQpOworICAgICAgICAgICAgICAgIGlmIChwQWxwaGFNYXNrID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBTcmNDbG9uZSAhPSBwU3JjQml0bWFwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcFNyY0Nsb25lOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBTcmNDbG9uZSAhPSBwU3JjQml0bWFwKSB7CisgICAgICAgICAgICBwU3JjQ2xvbmUtPm1fcEFscGhhTWFzayA9IE5VTEw7CisgICAgICAgICAgICBkZWxldGUgcFNyY0Nsb25lOworICAgICAgICB9CisgICAgICAgIHBTcmNDbG9uZSA9IHBBbHBoYU1hc2s7CisgICAgICAgIHNyY09mZnNldCA9IDA7CisgICAgfSBlbHNlIGlmIChwU3JjQ2xvbmUtPkdldFdpZHRoKCkgIT0gbV9XaWR0aCB8fCBwU3JjQ2xvbmUtPkdldEhlaWdodCgpICE9IG1fSGVpZ2h0KSB7CisgICAgICAgIENGWF9ESUJpdG1hcCogcFNyY01hdGNoZWQgPSBwU3JjQ2xvbmUtPlN0cmV0Y2hUbyhtX1dpZHRoLCBtX0hlaWdodCk7CisgICAgICAgIGlmIChwU3JjQ2xvbmUgIT0gcFNyY0JpdG1hcCkgeworICAgICAgICAgICAgZGVsZXRlIHBTcmNDbG9uZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocFNyY01hdGNoZWQgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIHBTcmNDbG9uZSA9IHBTcmNNYXRjaGVkOworICAgIH0KKyAgICBpZiAoZGVzdENoYW5uZWwgPT0gRlhESUJfQWxwaGEgJiYgbV9wQWxwaGFNYXNrKSB7CisgICAgICAgIHBEc3QgPSBtX3BBbHBoYU1hc2s7CisgICAgICAgIGRlc3RPZmZzZXQgPSAwOworICAgIH0KKyAgICBpbnQgc3JjQnl0ZXMgPSBwU3JjQ2xvbmUtPkdldEJQUCgpIC8gODsKKyAgICBpbnQgZGVzdEJ5dGVzID0gcERzdC0+R2V0QlBQKCkgLyA4OworICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fSGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgRlhfTFBCWVRFIGRlc3RfcG9zID0gKEZYX0xQQllURSlwRHN0LT5HZXRTY2FubGluZShyb3cpICsgZGVzdE9mZnNldDsKKyAgICAgICAgRlhfTFBDQllURSBzcmNfcG9zID0gcFNyY0Nsb25lLT5HZXRTY2FubGluZShyb3cpICsgc3JjT2Zmc2V0OworICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1dpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICpkZXN0X3BvcyA9ICpzcmNfcG9zOworICAgICAgICAgICAgZGVzdF9wb3MgKz0gZGVzdEJ5dGVzOworICAgICAgICAgICAgc3JjX3BvcyArPSBzcmNCeXRlczsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocFNyY0Nsb25lICE9IHBTcmNCaXRtYXAgJiYgcFNyY0Nsb25lICE9IHBTcmNCaXRtYXAtPm1fcEFscGhhTWFzaykgeworICAgICAgICBkZWxldGUgcFNyY0Nsb25lOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0ZYX0RJQml0bWFwOjpMb2FkQ2hhbm5lbChGWERJQl9DaGFubmVsIGRlc3RDaGFubmVsLCBpbnQgdmFsdWUpCit7CisgICAgaWYgKG1fcEJ1ZmZlciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaW50IGRlc3RPZmZzZXQ7CisgICAgaWYgKGRlc3RDaGFubmVsID09IEZYRElCX0FscGhhKSB7CisgICAgICAgIGlmIChJc0FscGhhTWFzaygpKSB7CisgICAgICAgICAgICBpZighQ29udmVydEZvcm1hdChGWERJQl84YnBwTWFzaykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXN0T2Zmc2V0ID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlc3RPZmZzZXQgPSAwOworICAgICAgICAgICAgaWYoIUNvbnZlcnRGb3JtYXQoSXNDbXlrSW1hZ2UoKSA/IEZYRElCX0NteWthIDogRlhESUJfQXJnYikpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoR2V0Rm9ybWF0KCkgPT0gRlhESUJfQXJnYikgeworICAgICAgICAgICAgICAgIGRlc3RPZmZzZXQgPSAzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKElzQWxwaGFNYXNrKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoR2V0QlBQKCkgPCAyNCkgeworICAgICAgICAgICAgaWYgKEhhc0FscGhhKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIUNvbnZlcnRGb3JtYXQoSXNDbXlrSW1hZ2UoKSA/IEZYRElCX0NteWthIDogRlhESUJfQXJnYikpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXworICAgICAgICAgICAgICAgIGlmICghQ29udmVydEZvcm1hdChJc0NteWtJbWFnZSgpID8gRlhESUJfQ215ayA6IEZYRElCX1JnYikpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICAgICAgaWYgKCFDb252ZXJ0Rm9ybWF0KElzQ215a0ltYWdlKCkgPyBGWERJQl9DbXlrIDogRlhESUJfUmdiMzIpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBkZXN0T2Zmc2V0ID0gZ19DaGFubmVsT2Zmc2V0W2Rlc3RDaGFubmVsXTsKKyAgICB9CisgICAgaW50IEJwcCA9IEdldEJQUCgpIC8gODsKKyAgICBpZiAoQnBwID09IDEpIHsKKyAgICAgICAgRlhTWVNfbWVtc2V0OChtX3BCdWZmZXIsIHZhbHVlLCBtX0hlaWdodCAqIG1fUGl0Y2gpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgaWYgKGRlc3RDaGFubmVsID09IEZYRElCX0FscGhhICYmIG1fcEFscGhhTWFzaykgeworICAgICAgICBGWFNZU19tZW1zZXQ4KG1fcEFscGhhTWFzay0+R2V0QnVmZmVyKCksIHZhbHVlLCBtX3BBbHBoYU1hc2stPkdldEhlaWdodCgpKm1fcEFscGhhTWFzay0+R2V0UGl0Y2goKSk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBtX0hlaWdodDsgcm93ICsrKSB7CisgICAgICAgIEZYX0xQQllURSBzY2FuX2xpbmUgPSBtX3BCdWZmZXIgKyByb3cgKiBtX1BpdGNoICsgZGVzdE9mZnNldDsKKyAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbV9XaWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICAqc2Nhbl9saW5lID0gdmFsdWU7CisgICAgICAgICAgICBzY2FuX2xpbmUgKz0gQnBwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDRlhfRElCaXRtYXA6Ok11bHRpcGx5QWxwaGEoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyY0JpdG1hcCkKK3sKKyAgICBpZiAobV9wQnVmZmVyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBBU1NFUlQocFNyY0JpdG1hcC0+SXNBbHBoYU1hc2soKSk7CisgICAgaWYgKCFwU3JjQml0bWFwLT5Jc0FscGhhTWFzaygpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKCFJc0FscGhhTWFzaygpICYmICFIYXNBbHBoYSgpKSB7CisgICAgICAgIHJldHVybiBMb2FkQ2hhbm5lbChGWERJQl9BbHBoYSwgcFNyY0JpdG1hcCwgRlhESUJfQWxwaGEpOworICAgIH0KKyAgICBDRlhfRElCaXRtYXAqIHBTcmNDbG9uZSA9IChDRlhfRElCaXRtYXAqKXBTcmNCaXRtYXA7CisgICAgaWYgKHBTcmNCaXRtYXAtPkdldFdpZHRoKCkgIT0gbV9XaWR0aCB8fCBwU3JjQml0bWFwLT5HZXRIZWlnaHQoKSAhPSBtX0hlaWdodCkgeworICAgICAgICBwU3JjQ2xvbmUgPSBwU3JjQml0bWFwLT5TdHJldGNoVG8obV9XaWR0aCwgbV9IZWlnaHQpOworICAgICAgICBBU1NFUlQocFNyY0Nsb25lICE9IE5VTEwpOworICAgICAgICBpZiAocFNyY0Nsb25lID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoSXNBbHBoYU1hc2soKSkgeworICAgICAgICBpZighQ29udmVydEZvcm1hdChGWERJQl84YnBwTWFzaykpIHsKKyAgICAgICAgICAgIGlmIChwU3JjQ2xvbmUgIT0gcFNyY0JpdG1hcCkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBwU3JjQ2xvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9IZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IG1fcEJ1ZmZlciArIG1fUGl0Y2ggKiByb3c7CisgICAgICAgICAgICBGWF9MUEJZVEUgc3JjX3NjYW4gPSBwU3JjQ2xvbmUtPm1fcEJ1ZmZlciArIHBTcmNDbG9uZS0+bV9QaXRjaCAqIHJvdzsKKyAgICAgICAgICAgIGlmIChwU3JjQ2xvbmUtPkdldEJQUCgpID09IDEpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1dpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEoKDEgPDwgKDcgLSBjb2wgJSA4KSkgJiBzcmNfc2Nhbltjb2wgLyA4XSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2Nhbltjb2xdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbV9XaWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSAoKmRlc3Rfc2NhbikgKiBzcmNfc2Nhbltjb2xdIC8gMjU1OworICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYoR2V0Rm9ybWF0KCkgPT0gRlhESUJfQXJnYikgeworICAgICAgICAgICAgaWYgKHBTcmNDbG9uZS0+R2V0QlBQKCkgPT0gMSkgeworICAgICAgICAgICAgICAgIGlmIChwU3JjQ2xvbmUgIT0gcFNyY0JpdG1hcCkgeworICAgICAgICAgICAgICAgICAgICBkZWxldGUgcFNyY0Nsb25lOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBtX0hlaWdodDsgcm93ICsrKSB7CisgICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IG1fcEJ1ZmZlciArIG1fUGl0Y2ggKiByb3cgKyAzOworICAgICAgICAgICAgICAgIEZYX0xQQllURSBzcmNfc2NhbiA9IHBTcmNDbG9uZS0+bV9wQnVmZmVyICsgcFNyY0Nsb25lLT5tX1BpdGNoICogcm93OworICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gKCpkZXN0X3NjYW4pICogc3JjX3NjYW5bY29sXSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9wQWxwaGFNYXNrLT5NdWx0aXBseUFscGhhKHBTcmNDbG9uZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHBTcmNDbG9uZSAhPSBwU3JjQml0bWFwKSB7CisgICAgICAgIGRlbGV0ZSBwU3JjQ2xvbmU7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDRlhfRElCaXRtYXA6OkdldEdyYXlEYXRhKHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgaWYgKG1fcEJ1ZmZlciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgc3dpdGNoIChHZXRGb3JtYXQoKSkgeworICAgICAgICBjYXNlIEZYRElCXzFicHBSZ2I6IHsKKyAgICAgICAgICAgICAgICBpZiAobV9wUGFsZXR0ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRlhfQllURSBncmF5WzJdOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSArKykgeworICAgICAgICAgICAgICAgICAgICBpbnQgciA9IChGWF9CWVRFKShtX3BQYWxldHRlW2ldID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGcgPSAoRlhfQllURSkobV9wUGFsZXR0ZVtpXSA+PiA4KTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGIgPSAoRlhfQllURSltX3BQYWxldHRlW2ldOworICAgICAgICAgICAgICAgICAgICBncmF5W2ldID0gKEZYX0JZVEUpRlhSR0IyR1JBWShyLCBnLCBiKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQ0ZYX0RJQml0bWFwKiBwTWFzayA9IEZYX05FVyBDRlhfRElCaXRtYXA7CisgICAgICAgICAgICAgICAgaWYgKCFwTWFzaykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghcE1hc2stPkNyZWF0ZShtX1dpZHRoLCBtX0hlaWdodCwgRlhESUJfOGJwcE1hc2spKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwTWFzazsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBGWFNZU19tZW1zZXQ4KHBNYXNrLT5HZXRCdWZmZXIoKSwgZ3JheVswXSwgcE1hc2stPkdldFBpdGNoKCkgKiBtX0hlaWdodCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9IZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgc3JjX3BvcyA9IG1fcEJ1ZmZlciArIHJvdyAqIG1fUGl0Y2g7CisgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3BvcyA9IChGWF9MUEJZVEUpcE1hc2stPkdldFNjYW5saW5lKHJvdyk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19wb3NbY29sIC8gOF0gJiAoMSA8PCAoNyAtIGNvbCAlIDgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3BvcyA9IGdyYXlbMV07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3BvcyArKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBUYWtlT3ZlcihwTWFzayk7CisgICAgICAgICAgICAgICAgZGVsZXRlIHBNYXNrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIEZYRElCXzhicHBSZ2I6IHsKKyAgICAgICAgICAgICAgICBpZiAobV9wUGFsZXR0ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgRlhfQllURSBncmF5WzI1Nl07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHIgPSAoRlhfQllURSkobV9wUGFsZXR0ZVtpXSA+PiAxNik7CisgICAgICAgICAgICAgICAgICAgIGludCBnID0gKEZYX0JZVEUpKG1fcFBhbGV0dGVbaV0gPj4gOCk7CisgICAgICAgICAgICAgICAgICAgIGludCBiID0gKEZYX0JZVEUpbV9wUGFsZXR0ZVtpXTsKKyAgICAgICAgICAgICAgICAgICAgZ3JheVtpXSA9IChGWF9CWVRFKUZYUkdCMkdSQVkociwgZywgYik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIENGWF9ESUJpdG1hcCogcE1hc2sgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOworICAgICAgICAgICAgICAgIGlmICghcE1hc2spIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXBNYXNrLT5DcmVhdGUobV9XaWR0aCwgbV9IZWlnaHQsIEZYRElCXzhicHBNYXNrKSkgeworICAgICAgICAgICAgICAgICAgICBkZWxldGUgcE1hc2s7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9IZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9wb3MgPSBwTWFzay0+R2V0QnVmZmVyKCkgKyByb3cgKiBwTWFzay0+R2V0UGl0Y2goKTsKKyAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFIHNyY19wb3MgPSBtX3BCdWZmZXIgKyByb3cgKiBtX1BpdGNoOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1dpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3BvcyArKyA9IGdyYXlbKnNyY19wb3MgKytdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFRha2VPdmVyKHBNYXNrKTsKKyAgICAgICAgICAgICAgICBkZWxldGUgcE1hc2s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgRlhESUJfUmdiOiB7CisgICAgICAgICAgICAgICAgQ0ZYX0RJQml0bWFwKiBwTWFzayA9IEZYX05FVyBDRlhfRElCaXRtYXA7CisgICAgICAgICAgICAgICAgaWYgKCFwTWFzaykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghcE1hc2stPkNyZWF0ZShtX1dpZHRoLCBtX0hlaWdodCwgRlhESUJfOGJwcE1hc2spKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwTWFzazsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBtX0hlaWdodDsgcm93ICsrKSB7CisgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSBzcmNfcG9zID0gbV9wQnVmZmVyICsgcm93ICogbV9QaXRjaDsKKyAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3RfcG9zID0gcE1hc2stPkdldEJ1ZmZlcigpICsgcm93ICogcE1hc2stPkdldFBpdGNoKCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfcG9zICsrID0gRlhSR0IyR1JBWShzcmNfcG9zWzJdLCBzcmNfcG9zWzFdLCAqc3JjX3Bvcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBzcmNfcG9zICs9IDM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVGFrZU92ZXIocE1hc2spOworICAgICAgICAgICAgICAgIGRlbGV0ZSBwTWFzazsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBGWERJQl9SZ2IzMjogeworICAgICAgICAgICAgICAgIENGWF9ESUJpdG1hcCogcE1hc2sgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOworICAgICAgICAgICAgICAgIGlmICghcE1hc2spIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXBNYXNrLT5DcmVhdGUobV9XaWR0aCwgbV9IZWlnaHQsIEZYRElCXzhicHBNYXNrKSkgeworICAgICAgICAgICAgICAgICAgICBkZWxldGUgcE1hc2s7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9IZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgc3JjX3BvcyA9IG1fcEJ1ZmZlciArIHJvdyAqIG1fUGl0Y2g7CisgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3BvcyA9IHBNYXNrLT5HZXRCdWZmZXIoKSArIHJvdyAqIHBNYXNrLT5HZXRQaXRjaCgpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1dpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3BvcyArKyA9IEZYUkdCMkdSQVkoc3JjX3Bvc1syXSwgc3JjX3Bvc1sxXSwgKnNyY19wb3MpOworICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3BvcyArPSA0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFRha2VPdmVyKHBNYXNrKTsKKyAgICAgICAgICAgICAgICBkZWxldGUgcE1hc2s7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDRlhfRElCaXRtYXA6Ok11bHRpcGx5QWxwaGEoaW50IGFscGhhKQoreworICAgIGlmIChtX3BCdWZmZXIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHN3aXRjaCAoR2V0Rm9ybWF0KCkpIHsKKyAgICAgICAgY2FzZSBGWERJQl8xYnBwTWFzazoKKyAgICAgICAgICAgIGlmICghQ29udmVydEZvcm1hdChGWERJQl84YnBwTWFzaykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBNdWx0aXBseUFscGhhKGFscGhhKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZYRElCXzhicHBNYXNrOiB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9IZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgc2Nhbl9saW5lID0gbV9wQnVmZmVyICsgcm93ICogbV9QaXRjaDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbV9XaWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzY2FuX2xpbmVbY29sXSA9IHNjYW5fbGluZVtjb2xdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgRlhESUJfQXJnYjogeworICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fSGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgRlhfTFBCWVRFIHNjYW5fbGluZSA9IG1fcEJ1ZmZlciArIHJvdyAqIG1fUGl0Y2ggKyAzOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1dpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpzY2FuX2xpbmUgPSAoKnNjYW5fbGluZSkgKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5fbGluZSArPSA0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKEhhc0FscGhhKCkpIHsKKyAgICAgICAgICAgICAgICBtX3BBbHBoYU1hc2stPk11bHRpcGx5QWxwaGEoYWxwaGEpOworICAgICAgICAgICAgfSBlbHNlIGlmIChJc0NteWtJbWFnZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFDb252ZXJ0Rm9ybWF0KChGWERJQl9Gb3JtYXQpKEdldEZvcm1hdCgpIHwgMHgwMjAwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX3BBbHBoYU1hc2stPk11bHRpcGx5QWxwaGEoYWxwaGEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIUNvbnZlcnRGb3JtYXQoRlhESUJfQXJnYikpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBNdWx0aXBseUFscGhhKGFscGhhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKyNpZiAhZGVmaW5lZChfRlBERkFQSV9NSU5JXykgfHwgZGVmaW5lZChfRlhDT1JFX0ZFQVRVUkVfQUxMXykKK0ZYX0RXT1JEIENGWF9ESUJpdG1hcDo6R2V0UGl4ZWwoaW50IHgsIGludCB5KSBjb25zdAoreworICAgIGlmIChtX3BCdWZmZXIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgRlhfTFBCWVRFIHBvcyA9IG1fcEJ1ZmZlciArIHkgKiBtX1BpdGNoICsgeCAqIEdldEJQUCgpIC8gODsKKyAgICBzd2l0Y2ggKEdldEZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgRlhESUJfMWJwcE1hc2s6IHsKKyAgICAgICAgICAgICAgICBpZiAoKCpwb3MpICYgKDEgPDwgKDcgLSB4ICUgOCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAweGZmMDAwMDAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBGWERJQl8xYnBwUmdiOiB7CisgICAgICAgICAgICAgICAgaWYgKCgqcG9zKSAmICgxIDw8ICg3IC0geCAlIDgpKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9wUGFsZXR0ZSA/IG1fcFBhbGV0dGVbMV0gOiAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX3BQYWxldHRlID8gbV9wUGFsZXR0ZVswXSA6IDB4ZmYwMDAwMDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIEZYRElCXzhicHBNYXNrOgorICAgICAgICAgICAgcmV0dXJuICgqcG9zKSA8PCAyNDsKKyAgICAgICAgY2FzZSBGWERJQl84YnBwUmdiOgorICAgICAgICAgICAgcmV0dXJuIG1fcFBhbGV0dGUgPyBtX3BQYWxldHRlWypwb3NdIDogKDB4ZmYwMDAwMDAgfCAoKCpwb3MpICogMHgxMDEwMSkpOworICAgICAgICBjYXNlIEZYRElCX1JnYjoKKyAgICAgICAgY2FzZSBGWERJQl9SZ2JhOgorICAgICAgICBjYXNlIEZYRElCX1JnYjMyOgorICAgICAgICAgICAgcmV0dXJuIEZYQVJHQl9HRVRESUIocG9zKSB8IDB4ZmYwMDAwMDA7CisgICAgICAgIGNhc2UgRlhESUJfQXJnYjoKKyAgICAgICAgICAgIHJldHVybiBGWEFSR0JfR0VURElCKHBvcyk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKK3ZvaWQgQ0ZYX0RJQml0bWFwOjpTZXRQaXhlbChpbnQgeCwgaW50IHksIEZYX0RXT1JEIGNvbG9yKQoreworICAgIGlmIChtX3BCdWZmZXIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh4IDwgMCB8fCB4ID49IG1fV2lkdGggfHwgeSA8IDAgfHwgeSA+PSBtX0hlaWdodCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX0xQQllURSBwb3MgPSBtX3BCdWZmZXIgKyB5ICogbV9QaXRjaCArIHggKiBHZXRCUFAoKSAvIDg7CisgICAgc3dpdGNoIChHZXRGb3JtYXQoKSkgeworICAgICAgICBjYXNlIEZYRElCXzFicHBNYXNrOgorICAgICAgICAgICAgaWYgKGNvbG9yID4+IDI0KSB7CisgICAgICAgICAgICAgICAgKnBvcyB8PSAxIDw8ICg3IC0geCAlIDgpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAqcG9zICY9IH4oMSA8PCAoNyAtIHggJSA4KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGWERJQl8xYnBwUmdiOgorICAgICAgICAgICAgaWYgKG1fcFBhbGV0dGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29sb3IgPT0gbV9wUGFsZXR0ZVsxXSkgeworICAgICAgICAgICAgICAgICAgICAqcG9zIHw9IDEgPDwgKDcgLSB4ICUgOCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgKnBvcyAmPSB+KDEgPDwgKDcgLSB4ICUgOCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbG9yID09IDB4ZmZmZmZmZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgKnBvcyB8PSAxIDw8ICg3IC0geCAlIDgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICpwb3MgJj0gfigxIDw8ICg3IC0geCAlIDgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGWERJQl84YnBwTWFzazoKKyAgICAgICAgICAgICpwb3MgPSAoRlhfQllURSkoY29sb3IgPj4gMjQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRlhESUJfOGJwcFJnYjogeworICAgICAgICAgICAgICAgIGlmIChtX3BQYWxldHRlKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9wUGFsZXR0ZVtpXSA9PSBjb2xvcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwb3MgPSAoRlhfQllURSlpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqcG9zID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAqcG9zID0gRlhSR0IyR1JBWShGWEFSR0JfUihjb2xvciksIEZYQVJHQl9HKGNvbG9yKSwgRlhBUkdCX0IoY29sb3IpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgRlhESUJfUmdiOgorICAgICAgICBjYXNlIEZYRElCX1JnYjMyOiB7CisgICAgICAgICAgICAgICAgaW50IGFscGhhID0gRlhBUkdCX0EoY29sb3IpOworICAgICAgICAgICAgICAgIHBvc1swXSA9IChGWEFSR0JfQihjb2xvcikgKiBhbHBoYSArIHBvc1swXSAqICgyNTUgLSBhbHBoYSkpIC8gMjU1OworICAgICAgICAgICAgICAgIHBvc1sxXSA9IChGWEFSR0JfRyhjb2xvcikgKiBhbHBoYSArIHBvc1sxXSAqICgyNTUgLSBhbHBoYSkpIC8gMjU1OworICAgICAgICAgICAgICAgIHBvc1syXSA9IChGWEFSR0JfUihjb2xvcikgKiBhbHBoYSArIHBvc1syXSAqICgyNTUgLSBhbHBoYSkpIC8gMjU1OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIEZYRElCX1JnYmE6IHsKKyAgICAgICAgICAgICAgICBwb3NbMF0gPSBGWEFSR0JfQihjb2xvcik7CisgICAgICAgICAgICAgICAgcG9zWzFdID0gRlhBUkdCX0coY29sb3IpOworICAgICAgICAgICAgICAgIHBvc1syXSA9IEZYQVJHQl9SKGNvbG9yKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBGWERJQl9BcmdiOgorICAgICAgICAgICAgRlhBUkdCX1NFVERJQihwb3MsIGNvbG9yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQordm9pZCBDRlhfRElCaXRtYXA6OkRvd25TYW1wbGVTY2FubGluZShpbnQgbGluZSwgRlhfTFBCWVRFIGRlc3Rfc2NhbiwgaW50IGRlc3RfYnBwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF93aWR0aCwgRlhfQk9PTCBiRmxpcFgsIGludCBjbGlwX2xlZnQsIGludCBjbGlwX3dpZHRoKSBjb25zdAoreworICAgIGlmIChtX3BCdWZmZXIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGludCBzcmNfQnBwID0gbV9icHAgLyA4OworICAgIEZYX0xQQllURSBzY2FubGluZSA9IG1fcEJ1ZmZlciArIGxpbmUgKiBtX1BpdGNoOworICAgIGlmIChzcmNfQnBwID09IDApIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbGlwX3dpZHRoOyBpICsrKSB7CisgICAgICAgICAgICBGWF9EV09SRCBkZXN0X3ggPSBjbGlwX2xlZnQgKyBpOworICAgICAgICAgICAgRlhfRFdPUkQgc3JjX3ggPSBkZXN0X3ggKiBtX1dpZHRoIC8gZGVzdF93aWR0aDsKKyAgICAgICAgICAgIGlmIChiRmxpcFgpIHsKKyAgICAgICAgICAgICAgICBzcmNfeCA9IG1fV2lkdGggLSBzcmNfeCAtIDE7CisgICAgICAgICAgICB9CisjaWZkZWYgRk9YSVRfQ0hST01FX0JVSUxECisgICAgICAgICAgICBzcmNfeCAlPSBtX1dpZHRoOworI2VuZGlmCisgICAgICAgICAgICBkZXN0X3NjYW5baV0gPSAoc2NhbmxpbmVbc3JjX3ggLyA4XSAmICgxIDw8ICg3IC0gc3JjX3ggJSA4KSkpID8gMjU1IDogMDsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc3JjX0JwcCA9PSAxKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xpcF93aWR0aDsgaSArKykgeworICAgICAgICAgICAgRlhfRFdPUkQgZGVzdF94ID0gY2xpcF9sZWZ0ICsgaTsKKyAgICAgICAgICAgIEZYX0RXT1JEIHNyY194ID0gZGVzdF94ICogbV9XaWR0aCAvIGRlc3Rfd2lkdGg7CisgICAgICAgICAgICBpZiAoYkZsaXBYKSB7CisgICAgICAgICAgICAgICAgc3JjX3ggPSBtX1dpZHRoIC0gc3JjX3ggLSAxOworICAgICAgICAgICAgfQorI2lmZGVmIEZPWElUX0NIUk9NRV9CVUlMRAorICAgICAgICAgICAgc3JjX3ggJT0gbV9XaWR0aDsKKyNlbmRpZgorICAgICAgICAgICAgaW50IGRlc3RfcG9zID0gaTsKKyAgICAgICAgICAgIGlmIChtX3BQYWxldHRlKSB7CisgICAgICAgICAgICAgICAgaWYgKCFJc0NteWtJbWFnZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zICo9IDM7CisgICAgICAgICAgICAgICAgICAgIEZYX0FSR0IgYXJnYiA9IG1fcFBhbGV0dGVbc2NhbmxpbmVbc3JjX3hdXTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfcG9zXSA9IEZYQVJHQl9CKGFyZ2IpOworICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bZGVzdF9wb3MgKyAxXSA9IEZYQVJHQl9HKGFyZ2IpOworICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bZGVzdF9wb3MgKyAyXSA9IEZYQVJHQl9SKGFyZ2IpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zICo9IDQ7CisgICAgICAgICAgICAgICAgICAgIEZYX0NNWUsgY215ayA9IG1fcFBhbGV0dGVbc2NhbmxpbmVbc3JjX3hdXTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfcG9zXSA9IEZYU1lTX0dldENWYWx1ZShjbXlrKTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfcG9zICsgMV0gPSBGWFNZU19HZXRNVmFsdWUoY215ayk7CisgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X3BvcyArIDJdID0gRlhTWVNfR2V0WVZhbHVlKGNteWspOworICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bZGVzdF9wb3MgKyAzXSA9IEZYU1lTX0dldEtWYWx1ZShjbXlrKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X3Bvc10gPSBzY2FubGluZVtzcmNfeF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsaXBfd2lkdGg7IGkgKyspIHsKKyAgICAgICAgICAgIEZYX0RXT1JEIGRlc3RfeCA9IGNsaXBfbGVmdCArIGk7CisgICAgICAgICAgICBGWF9EV09SRCBzcmNfeCA9IGJGbGlwWCA/IChtX1dpZHRoIC0gZGVzdF94ICogbV9XaWR0aCAvIGRlc3Rfd2lkdGggLSAxKSAqIHNyY19CcHAgOiAoZGVzdF94ICogbV9XaWR0aCAvIGRlc3Rfd2lkdGgpICogc3JjX0JwcDsKKyNpZmRlZiBGT1hJVF9DSFJPTUVfQlVJTEQKKyAgICAgICAgICAgIHNyY194ICU9IG1fV2lkdGggKiBzcmNfQnBwOworI2VuZGlmCisgICAgICAgICAgICBpbnQgZGVzdF9wb3MgPSBpICogc3JjX0JwcDsKKyAgICAgICAgICAgIGZvciAoaW50IGIgPSAwOyBiIDwgc3JjX0JwcDsgYiArKykgeworICAgICAgICAgICAgICAgIGRlc3Rfc2NhbltkZXN0X3BvcyArIGJdID0gc2NhbmxpbmVbc3JjX3ggKyBiXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KK0ZYX0JPT0wgQ0ZYX0RJQml0bWFwOjpDb252ZXJ0Q29sb3JTY2FsZShGWF9EV09SRCBmb3JlY29sb3IsIEZYX0RXT1JEIGJhY2tjb2xvcikKK3sKKyAgICBBU1NFUlQoIUlzQWxwaGFNYXNrKCkpOworICAgIGlmIChtX3BCdWZmZXIgPT0gTlVMTCB8fCBJc0FscGhhTWFzaygpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaW50IGZjLCBmbSwgZnksIGZrLCBiYywgYm0sIGJ5LCBiazsKKyAgICBpbnQgZnIsIGZnLCBmYiwgYnIsIGJnLCBiYjsKKyAgICBGWF9CT09MIGlzQ215a0ltYWdlID0gSXNDbXlrSW1hZ2UoKTsKKyAgICBpZiAoaXNDbXlrSW1hZ2UpIHsKKyAgICAgICAgZmMgPSBGWFNZU19HZXRDVmFsdWUoZm9yZWNvbG9yKTsKKyAgICAgICAgZm0gPSBGWFNZU19HZXRNVmFsdWUoZm9yZWNvbG9yKTsKKyAgICAgICAgZnkgPSBGWFNZU19HZXRZVmFsdWUoZm9yZWNvbG9yKTsKKyAgICAgICAgZmsgPSBGWFNZU19HZXRLVmFsdWUoZm9yZWNvbG9yKTsKKyAgICAgICAgYmMgPSBGWFNZU19HZXRDVmFsdWUoYmFja2NvbG9yKTsKKyAgICAgICAgYm0gPSBGWFNZU19HZXRNVmFsdWUoYmFja2NvbG9yKTsKKyAgICAgICAgYnkgPSBGWFNZU19HZXRZVmFsdWUoYmFja2NvbG9yKTsKKyAgICAgICAgYmsgPSBGWFNZU19HZXRLVmFsdWUoYmFja2NvbG9yKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmciA9IEZYU1lTX0dldFJWYWx1ZShmb3JlY29sb3IpOworICAgICAgICBmZyA9IEZYU1lTX0dldEdWYWx1ZShmb3JlY29sb3IpOworICAgICAgICBmYiA9IEZYU1lTX0dldEJWYWx1ZShmb3JlY29sb3IpOworICAgICAgICBiciA9IEZYU1lTX0dldFJWYWx1ZShiYWNrY29sb3IpOworICAgICAgICBiZyA9IEZYU1lTX0dldEdWYWx1ZShiYWNrY29sb3IpOworICAgICAgICBiYiA9IEZYU1lTX0dldEJWYWx1ZShiYWNrY29sb3IpOworICAgIH0KKyAgICBpZiAobV9icHAgPD0gOCkgeworICAgICAgICBpZiAoaXNDbXlrSW1hZ2UpIHsKKyAgICAgICAgICAgIGlmIChmb3JlY29sb3IgPT0gMHhmZiAmJiBiYWNrY29sb3IgPT0gMCAmJiBtX3BQYWxldHRlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChmb3JlY29sb3IgPT0gMCAmJiBiYWNrY29sb3IgPT0gMHhmZmZmZmYgJiYgbV9wUGFsZXR0ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9wUGFsZXR0ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBCdWlsZFBhbGV0dGUoKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgc2l6ZSA9IDEgPDwgbV9icHA7CisgICAgICAgIGlmIChpc0NteWtJbWFnZSkgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKSB7CisgICAgICAgICAgICAgICAgRlhfQllURSBiLCBnLCByOworICAgICAgICAgICAgICAgIEFkb2JlQ01ZS190b19zUkdCMShGWFNZU19HZXRDVmFsdWUobV9wUGFsZXR0ZVtpXSksIEZYU1lTX0dldE1WYWx1ZShtX3BQYWxldHRlW2ldKSwgRlhTWVNfR2V0WVZhbHVlKG1fcFBhbGV0dGVbaV0pLCBGWFNZU19HZXRLVmFsdWUobV9wUGFsZXR0ZVtpXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIpOworICAgICAgICAgICAgICAgIGludCBncmF5ID0gMjU1IC0gRlhSR0IyR1JBWShyLCBnLCBiKTsKKyAgICAgICAgICAgICAgICBtX3BQYWxldHRlW2ldID0gQ215a0VuY29kZShiYyArIChmYyAtIGJjKSAqIGdyYXkgLyAyNTUsIGJtICsgKGZtIC0gYm0pICogZ3JheSAvIDI1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSArIChmeSAtIGJ5KSAqIGdyYXkgLyAyNTUsIGJrICsgKGZrIC0gYmspICogZ3JheSAvIDI1NSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpICsrKSB7CisgICAgICAgICAgICAgICAgaW50IGdyYXkgPSBGWFJHQjJHUkFZKEZYQVJHQl9SKG1fcFBhbGV0dGVbaV0pLCBGWEFSR0JfRyhtX3BQYWxldHRlW2ldKSwgRlhBUkdCX0IobV9wUGFsZXR0ZVtpXSkpOworICAgICAgICAgICAgICAgIG1fcFBhbGV0dGVbaV0gPSBGWEFSR0JfTUFLRSgweGZmLCBiciArIChmciAtIGJyKSAqIGdyYXkgLyAyNTUsIGJnICsgKGZnIC0gYmcpICogZ3JheSAvIDI1NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmIgKyAoZmIgLSBiYikgKiBncmF5IC8gMjU1KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGlmIChpc0NteWtJbWFnZSkgeworICAgICAgICBpZiAoZm9yZWNvbG9yID09IDB4ZmYgJiYgYmFja2NvbG9yID09IDB4MDApIHsKKyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fSGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgICAgICBGWF9MUEJZVEUgc2NhbmxpbmUgPSBtX3BCdWZmZXIgKyByb3cgKiBtX1BpdGNoOworICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIGIsIGcsIHI7CisgICAgICAgICAgICAgICAgICAgIEFkb2JlQ01ZS190b19zUkdCMShzY2FubGluZVswXSwgc2NhbmxpbmVbMV0sIHNjYW5saW5lWzJdLCBzY2FubGluZVszXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsIGcsIGIpOworICAgICAgICAgICAgICAgICAgICAqc2NhbmxpbmUgKysgPSAwOworICAgICAgICAgICAgICAgICAgICAqc2NhbmxpbmUgKysgPSAwOworICAgICAgICAgICAgICAgICAgICAqc2NhbmxpbmUgKysgPSAwOworICAgICAgICAgICAgICAgICAgICAqc2NhbmxpbmUgKysgPSAyNTUgLSBGWFJHQjJHUkFZKHIsIGcsIGIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChmb3JlY29sb3IgPT0gMCAmJiBiYWNrY29sb3IgPT0gMHhmZmZmZmYpIHsKKyAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9IZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgRlhfTFBCWVRFIHNjYW5saW5lID0gbV9wQnVmZmVyICsgcm93ICogbV9QaXRjaDsKKyAgICAgICAgICAgIGludCBnYXAgPSBtX2JwcCAvIDggLSAyOworICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbV9XaWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgaW50IGdyYXkgPSBGWFJHQjJHUkFZKHNjYW5saW5lWzJdLCBzY2FubGluZVsxXSwgc2NhbmxpbmVbMF0pOworICAgICAgICAgICAgICAgICpzY2FubGluZSArKyA9IGdyYXk7CisgICAgICAgICAgICAgICAgKnNjYW5saW5lICsrID0gZ3JheTsKKyAgICAgICAgICAgICAgICAqc2NhbmxpbmUgICAgPSBncmF5OworICAgICAgICAgICAgICAgIHNjYW5saW5lICs9IGdhcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgaWYgKGlzQ215a0ltYWdlKSB7CisgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fSGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgIEZYX0xQQllURSBzY2FubGluZSA9IG1fcEJ1ZmZlciArIHJvdyAqIG1fUGl0Y2g7CisgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1dpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICBGWF9CWVRFIGIsIGcsIHI7CisgICAgICAgICAgICAgICAgQWRvYmVDTVlLX3RvX3NSR0IxKHNjYW5saW5lWzBdLCBzY2FubGluZVsxXSwgc2NhbmxpbmVbMl0sIHNjYW5saW5lWzNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLCBnLCBiKTsKKyAgICAgICAgICAgICAgICBpbnQgZ3JheSA9IDI1NSAtIEZYUkdCMkdSQVkociwgZywgYik7CisgICAgICAgICAgICAgICAgKnNjYW5saW5lICsrID0gYmMgKyAoZmMgLSBiYykgKiBncmF5IC8gMjU1OworICAgICAgICAgICAgICAgICpzY2FubGluZSArKyA9IGJtICsgKGZtIC0gYm0pICogZ3JheSAvIDI1NTsKKyAgICAgICAgICAgICAgICAqc2NhbmxpbmUgKysgPSBieSArIChmeSAtIGJ5KSAqIGdyYXkgLyAyNTU7CisgICAgICAgICAgICAgICAgKnNjYW5saW5lICsrID0gYmsgKyAoZmsgLSBiaykgKiBncmF5IC8gMjU1OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fSGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgIEZYX0xQQllURSBzY2FubGluZSA9IG1fcEJ1ZmZlciArIHJvdyAqIG1fUGl0Y2g7CisgICAgICAgICAgICBpbnQgZ2FwID0gbV9icHAgLyA4IC0gMjsKKyAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgIGludCBncmF5ID0gRlhSR0IyR1JBWShzY2FubGluZVsyXSwgc2NhbmxpbmVbMV0sIHNjYW5saW5lWzBdKTsKKyAgICAgICAgICAgICAgICAqc2NhbmxpbmUgKysgPSBiYiArIChmYiAtIGJiKSAqIGdyYXkgLyAyNTU7CisgICAgICAgICAgICAgICAgKnNjYW5saW5lICsrID0gYmcgKyAoZmcgLSBiZykgKiBncmF5IC8gMjU1OworICAgICAgICAgICAgICAgICpzY2FubGluZSAgICA9IGJyICsgKGZyIC0gYnIpICogZ3JheSAvIDI1NTsKKyAgICAgICAgICAgICAgICBzY2FubGluZSArPSBnYXA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0ZYX0RJQml0bWFwOjpEaXRoZXJGUyhjb25zdCBGWF9EV09SRCogcFBhbGV0dGUsIGludCBwYWxfc2l6ZSwgY29uc3QgRlhfUkVDVCogcFJlY3QpCit7CisgICAgaWYgKG1fcEJ1ZmZlciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKG1fYnBwICE9IDggJiYgbV9wUGFsZXR0ZSAhPSBOVUxMICYmIG1fQWxwaGFGbGFnICE9IDApIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAobV9XaWR0aCA8IDQgJiYgbV9IZWlnaHQgPCA0KSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgRlhfUkVDVCByZWN0KDAsIDAsIG1fV2lkdGgsIG1fSGVpZ2h0KTsKKyAgICBpZiAocFJlY3QpIHsKKyAgICAgICAgcmVjdC5JbnRlcnNlY3QoKnBSZWN0KTsKKyAgICB9CisgICAgRlhfQllURSB0cmFuc2xhdGVbMjU2XTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSArKykgeworICAgICAgICBpbnQgZXJyMiA9IDY1NTM2OworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBhbF9zaXplOyBqICsrKSB7CisgICAgICAgICAgICBGWF9CWVRFIGVudHJ5ID0gKEZYX0JZVEUpcFBhbGV0dGVbal07CisgICAgICAgICAgICBpbnQgZXJyID0gKGludCllbnRyeSAtIGk7CisgICAgICAgICAgICBpZiAoZXJyICogZXJyIDwgZXJyMikgeworICAgICAgICAgICAgICAgIGVycjIgPSBlcnIgKiBlcnI7CisgICAgICAgICAgICAgICAgdHJhbnNsYXRlW2ldID0gZW50cnk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChpbnQgcm93ID0gcmVjdC50b3A7IHJvdyA8IHJlY3QuYm90dG9tOyByb3cgKyspIHsKKyAgICAgICAgRlhfTFBCWVRFIHNjYW4gPSBtX3BCdWZmZXIgKyByb3cgKiBtX1BpdGNoOworICAgICAgICBGWF9MUEJZVEUgbmV4dF9zY2FuID0gbV9wQnVmZmVyICsgKHJvdyArIDEpICogbV9QaXRjaDsKKyAgICAgICAgZm9yIChpbnQgY29sID0gcmVjdC5sZWZ0OyBjb2wgPCByZWN0LnJpZ2h0OyBjb2wgKyspIHsKKyAgICAgICAgICAgIGludCBzcmNfcGl4ZWwgPSBzY2FuW2NvbF07CisgICAgICAgICAgICBpbnQgZGVzdF9waXhlbCA9IHRyYW5zbGF0ZVtzcmNfcGl4ZWxdOworICAgICAgICAgICAgc2Nhbltjb2xdID0gKEZYX0JZVEUpZGVzdF9waXhlbDsKKyAgICAgICAgICAgIGludCBlcnJvciA9IC1kZXN0X3BpeGVsICsgc3JjX3BpeGVsOworICAgICAgICAgICAgaWYgKGNvbCA8IHJlY3QucmlnaHQgLSAxKSB7CisgICAgICAgICAgICAgICAgaW50IHNyYyA9IHNjYW5bY29sICsgMV07CisgICAgICAgICAgICAgICAgc3JjICs9IGVycm9yICogNyAvIDE2OworICAgICAgICAgICAgICAgIGlmIChzcmMgPiAyNTUpIHsKKyAgICAgICAgICAgICAgICAgICAgc2Nhbltjb2wgKyAxXSA9IDI1NTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNyYyA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgc2Nhbltjb2wgKyAxXSA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2Nhbltjb2wgKyAxXSA9IHNyYzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29sIDwgcmVjdC5yaWdodCAtIDEgJiYgcm93IDwgcmVjdC5ib3R0b20gLSAxKSB7CisgICAgICAgICAgICAgICAgaW50IHNyYyA9IG5leHRfc2Nhbltjb2wgKyAxXTsKKyAgICAgICAgICAgICAgICBzcmMgKz0gZXJyb3IgKiAxIC8gMTY7CisgICAgICAgICAgICAgICAgaWYgKHNyYyA+IDI1NSkgeworICAgICAgICAgICAgICAgICAgICBuZXh0X3NjYW5bY29sICsgMV0gPSAyNTU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcmMgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIG5leHRfc2Nhbltjb2wgKyAxXSA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbmV4dF9zY2FuW2NvbCArIDFdID0gc3JjOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyb3cgPCByZWN0LmJvdHRvbSAtIDEpIHsKKyAgICAgICAgICAgICAgICBpbnQgc3JjID0gbmV4dF9zY2FuW2NvbF07CisgICAgICAgICAgICAgICAgc3JjICs9IGVycm9yICogNSAvIDE2OworICAgICAgICAgICAgICAgIGlmIChzcmMgPiAyNTUpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV4dF9zY2FuW2NvbF0gPSAyNTU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcmMgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIG5leHRfc2Nhbltjb2xdID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBuZXh0X3NjYW5bY29sXSA9IHNyYzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29sID4gcmVjdC5sZWZ0ICYmIHJvdyA8IHJlY3QuYm90dG9tIC0gMSkgeworICAgICAgICAgICAgICAgIGludCBzcmMgPSBuZXh0X3NjYW5bY29sIC0gMV07CisgICAgICAgICAgICAgICAgc3JjICs9IGVycm9yICogMyAvIDE2OworICAgICAgICAgICAgICAgIGlmIChzcmMgPiAyNTUpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV4dF9zY2FuW2NvbCAtIDFdID0gMjU1OworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3JjIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBuZXh0X3NjYW5bY29sIC0gMV0gPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG5leHRfc2Nhbltjb2wgLSAxXSA9IHNyYzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitDRlhfRElCaXRtYXAqIENGWF9ESUJTb3VyY2U6OkZsaXBJbWFnZShGWF9CT09MIGJYRmxpcCwgRlhfQk9PTCBiWUZsaXApIGNvbnN0Cit7CisgICAgQ0ZYX0RJQml0bWFwKiBwRmxpcHBlZCA9IEZYX05FVyBDRlhfRElCaXRtYXA7CisgICAgaWYgKCFwRmxpcHBlZCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKCFwRmxpcHBlZC0+Q3JlYXRlKG1fV2lkdGgsIG1fSGVpZ2h0LCBHZXRGb3JtYXQoKSkpIHsKKyAgICAgICAgZGVsZXRlIHBGbGlwcGVkOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcEZsaXBwZWQtPkNvcHlQYWxldHRlKG1fcFBhbGV0dGUpOworICAgIEZYX0xQQllURSBwRGVzdEJ1ZmZlciA9IHBGbGlwcGVkLT5HZXRCdWZmZXIoKTsKKyAgICBpbnQgQnBwID0gbV9icHAgLyA4OworICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fSGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IEdldFNjYW5saW5lKHJvdyk7CisgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBwRGVzdEJ1ZmZlciArIG1fUGl0Y2ggKiAoYllGbGlwID8gKG1fSGVpZ2h0IC0gcm93IC0gMSkgOiByb3cpOworICAgICAgICBpZiAoIWJYRmxpcCkgeworICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIoZGVzdF9zY2FuLCBzcmNfc2NhbiwgbV9QaXRjaCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9icHAgPT0gMSkgeworICAgICAgICAgICAgRlhTWVNfbWVtc2V0MzIoZGVzdF9zY2FuLCAwLCBtX1BpdGNoKTsKKyAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykKKyAgICAgICAgICAgICAgICBpZiAoc3JjX3NjYW5bY29sIC8gOF0gJiAoMSA8PCAoNyAtIGNvbCAlIDgpKSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF9jb2wgPSBtX1dpZHRoIC0gY29sIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfY29sIC8gOF0gfD0gKDEgPDwgKDcgLSBkZXN0X2NvbCAlIDgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZXN0X3NjYW4gKz0gKG1fV2lkdGggLSAxKSAqIEJwcDsKKyAgICAgICAgICAgIGlmIChCcHAgPT0gMSkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gKnNyY19zY2FuOworICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gLS07CisgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoQnBwID09IDMpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1dpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gc3JjX3NjYW5bMF07CisgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IHNyY19zY2FuWzFdOworICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBzcmNfc2NhblsyXTsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuIC09IDM7CisgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoQnBwID09IDQpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICAqKEZYX0RXT1JEKilkZXN0X3NjYW4gPSAqKEZYX0RXT1JEKilzcmNfc2NhbjsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuIC09IDQ7CisgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChtX3BBbHBoYU1hc2spIHsKKyAgICAgICAgcERlc3RCdWZmZXIgPSBwRmxpcHBlZC0+bV9wQWxwaGFNYXNrLT5HZXRCdWZmZXIoKTsKKyAgICAgICAgRlhfRFdPUkQgZGVzdF9waXRjaCA9IHBGbGlwcGVkLT5tX3BBbHBoYU1hc2stPkdldFBpdGNoKCk7CisgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fSGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBtX3BBbHBoYU1hc2stPkdldFNjYW5saW5lKHJvdyk7CisgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gcERlc3RCdWZmZXIgKyBkZXN0X3BpdGNoICogKGJZRmxpcCA/IChtX0hlaWdodCAtIHJvdyAtIDEpIDogcm93KTsKKyAgICAgICAgICAgIGlmICghYlhGbGlwKSB7CisgICAgICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIoZGVzdF9zY2FuLCBzcmNfc2NhbiwgZGVzdF9waXRjaCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXN0X3NjYW4gKz0gKG1fV2lkdGggLSAxKTsKKyAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fV2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSAqc3JjX3NjYW47CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuIC0tOworICAgICAgICAgICAgICAgIHNyY19zY2FuICsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBwRmxpcHBlZDsKK30KK0NGWF9ESUJFeHRyYWN0b3I6OkNGWF9ESUJFeHRyYWN0b3IoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyYykKK3sKKyAgICBtX3BCaXRtYXAgPSBOVUxMOworICAgIGlmIChwU3JjLT5HZXRCdWZmZXIoKSA9PSBOVUxMKSB7CisgICAgICAgIG1fcEJpdG1hcCA9IHBTcmMtPkNsb25lKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wQml0bWFwID0gRlhfTkVXIENGWF9ESUJpdG1hcDsKKyAgICAgICAgaWYgKCFtX3BCaXRtYXApIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1fcEJpdG1hcC0+Q3JlYXRlKHBTcmMtPkdldFdpZHRoKCksIHBTcmMtPkdldEhlaWdodCgpLCBwU3JjLT5HZXRGb3JtYXQoKSwgcFNyYy0+R2V0QnVmZmVyKCkpKSB7CisgICAgICAgICAgICBkZWxldGUgbV9wQml0bWFwOworICAgICAgICAgICAgbV9wQml0bWFwID0gTlVMTDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX3BCaXRtYXAtPkNvcHlQYWxldHRlKHBTcmMtPkdldFBhbGV0dGUoKSk7CisgICAgICAgIG1fcEJpdG1hcC0+Q29weUFscGhhTWFzayhwU3JjLT5tX3BBbHBoYU1hc2spOworICAgIH0KK30KK0NGWF9ESUJFeHRyYWN0b3I6On5DRlhfRElCRXh0cmFjdG9yKCkKK3sKKyAgICBpZiAobV9wQml0bWFwKSB7CisgICAgICAgIGRlbGV0ZSBtX3BCaXRtYXA7CisgICAgfQorfQorQ0ZYX0ZpbHRlcmVkRElCOjpDRlhfRmlsdGVyZWRESUIoKQoreworICAgIG1fcFNjYW5saW5lID0gTlVMTDsKKyAgICBtX3BTcmMgPSBOVUxMOworfQorQ0ZYX0ZpbHRlcmVkRElCOjp+Q0ZYX0ZpbHRlcmVkRElCKCkKK3sKKyAgICBpZiAobV9wU3JjICYmIG1fYkF1dG9Ecm9wU3JjKSB7CisgICAgICAgIGRlbGV0ZSBtX3BTcmM7CisgICAgfQorICAgIGlmIChtX3BTY2FubGluZSkgeworICAgICAgICBGWF9GcmVlKG1fcFNjYW5saW5lKTsKKyAgICB9Cit9Cit2b2lkIENGWF9GaWx0ZXJlZERJQjo6TG9hZFNyYyhjb25zdCBDRlhfRElCU291cmNlKiBwU3JjLCBGWF9CT09MIGJBdXRvRHJvcFNyYykKK3sKKyAgICBtX3BTcmMgPSBwU3JjOworICAgIG1fYkF1dG9Ecm9wU3JjID0gYkF1dG9Ecm9wU3JjOworICAgIG1fV2lkdGggPSBwU3JjLT5HZXRXaWR0aCgpOworICAgIG1fSGVpZ2h0ID0gcFNyYy0+R2V0SGVpZ2h0KCk7CisgICAgRlhESUJfRm9ybWF0IGZvcm1hdCA9IEdldERlc3RGb3JtYXQoKTsKKyAgICBtX2JwcCA9IChGWF9CWVRFKWZvcm1hdDsKKyAgICBtX0FscGhhRmxhZyA9IChGWF9CWVRFKShmb3JtYXQgPj4gOCk7CisgICAgbV9QaXRjaCA9IChtX1dpZHRoICogKGZvcm1hdCAmIDB4ZmYpICsgMzEpIC8gMzIgKiA0OworICAgIG1fcFBhbGV0dGUgPSBHZXREZXN0UGFsZXR0ZSgpOworICAgIG1fcFNjYW5saW5lID0gRlhfQWxsb2MoRlhfQllURSwgbV9QaXRjaCk7Cit9CitGWF9MUENCWVRFIENGWF9GaWx0ZXJlZERJQjo6R2V0U2NhbmxpbmUoaW50IGxpbmUpIGNvbnN0Cit7CisgICAgVHJhbnNsYXRlU2NhbmxpbmUobV9wU2NhbmxpbmUsIG1fcFNyYy0+R2V0U2NhbmxpbmUobGluZSkpOworICAgIHJldHVybiBtX3BTY2FubGluZTsKK30KK3ZvaWQgQ0ZYX0ZpbHRlcmVkRElCOjpEb3duU2FtcGxlU2NhbmxpbmUoaW50IGxpbmUsIEZYX0xQQllURSBkZXN0X3NjYW4sIGludCBkZXN0X2JwcCwKKyAgICAgICAgaW50IGRlc3Rfd2lkdGgsIEZYX0JPT0wgYkZsaXBYLCBpbnQgY2xpcF9sZWZ0LCBpbnQgY2xpcF93aWR0aCkgY29uc3QKK3sKKyAgICBtX3BTcmMtPkRvd25TYW1wbGVTY2FubGluZShsaW5lLCBkZXN0X3NjYW4sIGRlc3RfYnBwLCBkZXN0X3dpZHRoLCBiRmxpcFgsIGNsaXBfbGVmdCwgY2xpcF93aWR0aCk7CisgICAgVHJhbnNsYXRlRG93blNhbXBsZXMoZGVzdF9zY2FuLCBkZXN0X3NjYW4sIGNsaXBfd2lkdGgsIGRlc3RfYnBwKTsKK30KK0NGWF9JbWFnZVJlbmRlcmVyOjpDRlhfSW1hZ2VSZW5kZXJlcigpCit7CisgICAgbV9TdGF0dXMgPSAwOworICAgIG1fcFRyYW5zZm9ybWVyID0gTlVMTDsKKyAgICBtX2JSZ2JCeXRlT3JkZXIgPSBGQUxTRTsKKyAgICBtX0JsZW5kVHlwZSA9IEZYRElCX0JMRU5EX05PUk1BTDsKK30KK0NGWF9JbWFnZVJlbmRlcmVyOjp+Q0ZYX0ltYWdlUmVuZGVyZXIoKQoreworICAgIGlmIChtX3BUcmFuc2Zvcm1lcikgeworICAgICAgICBkZWxldGUgbV9wVHJhbnNmb3JtZXI7CisgICAgfQorfQorZXh0ZXJuIEZYX1JFQ1QgX0ZYRElCX1N3YXBDbGlwQm94KEZYX1JFQ1QmIGNsaXAsIGludCB3aWR0aCwgaW50IGhlaWdodCwgRlhfQk9PTCBiRmxpcFgsIEZYX0JPT0wgYkZsaXBZKTsKK0ZYX0JPT0wgQ0ZYX0ltYWdlUmVuZGVyZXI6OlN0YXJ0KENGWF9ESUJpdG1hcCogcERldmljZSwgY29uc3QgQ0ZYX0NsaXBSZ24qIHBDbGlwUmduLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNvdXJjZSwgaW50IGJpdG1hcF9hbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIG1hc2tfY29sb3IsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBkaWJfZmxhZ3MsIEZYX0JPT0wgYlJnYkJ5dGVPcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQgYmxlbmRfdHlwZSkKK3sKKyAgICBtX01hdHJpeCA9ICpwTWF0cml4OworICAgIENGWF9GbG9hdFJlY3QgaW1hZ2VfcmVjdF9mID0gbV9NYXRyaXguR2V0VW5pdFJlY3QoKTsKKyAgICBGWF9SRUNUIGltYWdlX3JlY3QgPSBpbWFnZV9yZWN0X2YuR2V0T3V0dGVyUmVjdCgpOworICAgIG1fQ2xpcEJveCA9IHBDbGlwUmduID8gcENsaXBSZ24tPkdldEJveCgpIDogRlhfUkVDVCgwLCAwLCBwRGV2aWNlLT5HZXRXaWR0aCgpLCBwRGV2aWNlLT5HZXRIZWlnaHQoKSk7CisgICAgbV9DbGlwQm94LkludGVyc2VjdChpbWFnZV9yZWN0KTsKKyAgICBpZiAobV9DbGlwQm94LklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fcERldmljZSA9IHBEZXZpY2U7CisgICAgbV9wQ2xpcFJnbiA9IHBDbGlwUmduOworICAgIG1fTWFza0NvbG9yID0gbWFza19jb2xvcjsKKyAgICBtX0JpdG1hcEFscGhhID0gYml0bWFwX2FscGhhOworICAgIG1fTWF0cml4ID0gKnBNYXRyaXg7CisgICAgbV9GbGFncyA9IGRpYl9mbGFnczsKKyAgICBtX0FscGhhRmxhZyA9IGFscGhhX2ZsYWc7CisgICAgbV9wSWNjVHJhbnNmb3JtID0gcEljY1RyYW5zZm9ybTsKKyAgICBtX2JSZ2JCeXRlT3JkZXIgPSBiUmdiQnl0ZU9yZGVyOworICAgIG1fQmxlbmRUeXBlID0gYmxlbmRfdHlwZTsKKyAgICBGWF9CT09MIHJldCA9IFRSVUU7CisgICAgaWYgKChGWFNZU19mYWJzKG1fTWF0cml4LmIpID49IDAuNWYgfHwgbV9NYXRyaXguYSA9PSAwKSB8fAorICAgICAgICAgICAgKEZYU1lTX2ZhYnMobV9NYXRyaXguYykgPj0gMC41ZiB8fCBtX01hdHJpeC5kID09IDApICkgeworICAgICAgICBpZiAoRlhTWVNfZmFicyhtX01hdHJpeC5hKSA8IEZYU1lTX2ZhYnMobV9NYXRyaXguYikgLyAyMCAmJiBGWFNZU19mYWJzKG1fTWF0cml4LmQpIDwgRlhTWVNfZmFicyhtX01hdHJpeC5jKSAvIDIwICYmCisgICAgICAgICAgICAgICAgRlhTWVNfZmFicyhtX01hdHJpeC5hKSA8IDAuNWYgJiYgRlhTWVNfZmFicyhtX01hdHJpeC5kKSA8IDAuNWYpIHsKKyAgICAgICAgICAgIGludCBkZXN0X3dpZHRoID0gaW1hZ2VfcmVjdC5XaWR0aCgpOworICAgICAgICAgICAgaW50IGRlc3RfaGVpZ2h0ID0gaW1hZ2VfcmVjdC5IZWlnaHQoKTsKKyAgICAgICAgICAgIEZYX1JFQ1QgYml0bWFwX2NsaXAgPSBtX0NsaXBCb3g7CisgICAgICAgICAgICBiaXRtYXBfY2xpcC5PZmZzZXQoLWltYWdlX3JlY3QubGVmdCwgLWltYWdlX3JlY3QudG9wKTsKKyAgICAgICAgICAgIGJpdG1hcF9jbGlwID0gX0ZYRElCX1N3YXBDbGlwQm94KGJpdG1hcF9jbGlwLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgbV9NYXRyaXguYyA+IDAsIG1fTWF0cml4LmIgPCAwKTsKKyAgICAgICAgICAgIG1fQ29tcG9zZXIuQ29tcG9zZShwRGV2aWNlLCBwQ2xpcFJnbiwgYml0bWFwX2FscGhhLCBtYXNrX2NvbG9yLCBtX0NsaXBCb3gsIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9NYXRyaXguYyA+IDAsIG1fTWF0cml4LmIgPCAwLCBtX2JSZ2JCeXRlT3JkZXIsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0sIG1fQmxlbmRUeXBlKTsKKyAgICAgICAgICAgIGlmICghbV9TdHJldGNoZXIuU3RhcnQoJm1fQ29tcG9zZXIsIHBTb3VyY2UsIGRlc3RfaGVpZ2h0LCBkZXN0X3dpZHRoLCBiaXRtYXBfY2xpcCwgZGliX2ZsYWdzKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fU3RhdHVzID0gMTsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIG1fU3RhdHVzID0gMjsKKyAgICAgICAgbV9wVHJhbnNmb3JtZXIgPSBGWF9ORVcgQ0ZYX0ltYWdlVHJhbnNmb3JtZXI7CisgICAgICAgIGlmICghbV9wVHJhbnNmb3JtZXIpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBtX3BUcmFuc2Zvcm1lci0+U3RhcnQocFNvdXJjZSwgJm1fTWF0cml4LCBkaWJfZmxhZ3MsICZtX0NsaXBCb3gpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgaW50IGRlc3Rfd2lkdGggPSBpbWFnZV9yZWN0LldpZHRoKCk7CisgICAgaWYgKG1fTWF0cml4LmEgPCAwKSB7CisgICAgICAgIGRlc3Rfd2lkdGggPSAtZGVzdF93aWR0aDsKKyAgICB9CisgICAgaW50IGRlc3RfaGVpZ2h0ID0gaW1hZ2VfcmVjdC5IZWlnaHQoKTsKKyAgICBpZiAobV9NYXRyaXguZCA+IDApIHsKKyAgICAgICAgZGVzdF9oZWlnaHQgPSAtZGVzdF9oZWlnaHQ7CisgICAgfQorICAgIGlmIChkZXN0X3dpZHRoID09IDAgfHwgZGVzdF9oZWlnaHQgPT0gMCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEZYX1JFQ1QgYml0bWFwX2NsaXAgPSBtX0NsaXBCb3g7CisgICAgYml0bWFwX2NsaXAuT2Zmc2V0KC1pbWFnZV9yZWN0LmxlZnQsIC1pbWFnZV9yZWN0LnRvcCk7CisgICAgbV9Db21wb3Nlci5Db21wb3NlKHBEZXZpY2UsIHBDbGlwUmduLCBiaXRtYXBfYWxwaGEsIG1hc2tfY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgIG1fQ2xpcEJveCwgRkFMU0UsIEZBTFNFLCBGQUxTRSwgbV9iUmdiQnl0ZU9yZGVyLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtLCBtX0JsZW5kVHlwZSk7CisgICAgbV9TdGF0dXMgPSAxOworICAgIHJldCA9IG1fU3RyZXRjaGVyLlN0YXJ0KCZtX0NvbXBvc2VyLCBwU291cmNlLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgYml0bWFwX2NsaXAsIGRpYl9mbGFncyk7CisgICAgcmV0dXJuIHJldDsKK30KK0ZYX0JPT0wgQ0ZYX0ltYWdlUmVuZGVyZXI6OkNvbnRpbnVlKElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIGlmIChtX1N0YXR1cyA9PSAxKSB7CisgICAgICAgIHJldHVybiBtX1N0cmV0Y2hlci5Db250aW51ZShwUGF1c2UpOworICAgIH0gZWxzZSBpZiAobV9TdGF0dXMgPT0gMikgeworICAgICAgICBpZiAobV9wVHJhbnNmb3JtZXItPkNvbnRpbnVlKHBQYXVzZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgICAgIENGWF9ESUJpdG1hcCogcEJpdG1hcCA9IG1fcFRyYW5zZm9ybWVyLT5tX1N0b3Jlci5EZXRhY2goKTsKKyAgICAgICAgaWYgKHBCaXRtYXAgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmIChwQml0bWFwLT5HZXRCdWZmZXIoKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBkZWxldGUgcEJpdG1hcDsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBpZiAocEJpdG1hcC0+SXNBbHBoYU1hc2soKSkgeworICAgICAgICAgICAgaWYgKG1fQml0bWFwQWxwaGEgIT0gMjU1KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fQWxwaGFGbGFnID4+IDgpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9BbHBoYUZsYWcgPSAoKChGWF9CWVRFKSgobV9BbHBoYUZsYWcgJiAweGZmKSAqIG1fQml0bWFwQWxwaGEgLyAyNTUpKSB8ICgobV9BbHBoYUZsYWcgPj4gOCkgPDwgOCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1fTWFza0NvbG9yID0gRlhBUkdCX01VTF9BTFBIQShtX01hc2tDb2xvciwgbV9CaXRtYXBBbHBoYSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9wRGV2aWNlLT5Db21wb3NpdGVNYXNrKG1fcFRyYW5zZm9ybWVyLT5tX1Jlc3VsdExlZnQsIG1fcFRyYW5zZm9ybWVyLT5tX1Jlc3VsdFRvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQml0bWFwLT5HZXRXaWR0aCgpLCBwQml0bWFwLT5HZXRIZWlnaHQoKSwgcEJpdG1hcCwgbV9NYXNrQ29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgbV9CbGVuZFR5cGUsIG1fcENsaXBSZ24sIG1fYlJnYkJ5dGVPcmRlciwgbV9BbHBoYUZsYWcsIG1fcEljY1RyYW5zZm9ybSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobV9CaXRtYXBBbHBoYSAhPSAyNTUpIHsKKyAgICAgICAgICAgICAgICBwQml0bWFwLT5NdWx0aXBseUFscGhhKG1fQml0bWFwQWxwaGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9wRGV2aWNlLT5Db21wb3NpdGVCaXRtYXAobV9wVHJhbnNmb3JtZXItPm1fUmVzdWx0TGVmdCwgbV9wVHJhbnNmb3JtZXItPm1fUmVzdWx0VG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJpdG1hcC0+R2V0V2lkdGgoKSwgcEJpdG1hcC0+R2V0SGVpZ2h0KCksIHBCaXRtYXAsIDAsIDAsIG1fQmxlbmRUeXBlLCBtX3BDbGlwUmduLCBtX2JSZ2JCeXRlT3JkZXIsIG1fcEljY1RyYW5zZm9ybSk7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIHBCaXRtYXA7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorQ0ZYX0JpdG1hcFN0b3Jlcjo6Q0ZYX0JpdG1hcFN0b3JlcigpCit7CisgICAgbV9wQml0bWFwID0gTlVMTDsKK30KK0NGWF9CaXRtYXBTdG9yZXI6On5DRlhfQml0bWFwU3RvcmVyKCkKK3sKKyAgICBpZiAobV9wQml0bWFwKSB7CisgICAgICAgIGRlbGV0ZSBtX3BCaXRtYXA7CisgICAgfQorfQorQ0ZYX0RJQml0bWFwKiBDRlhfQml0bWFwU3RvcmVyOjpEZXRhY2goKQoreworICAgIENGWF9ESUJpdG1hcCogcEJpdG1hcCA9IG1fcEJpdG1hcDsKKyAgICBtX3BCaXRtYXAgPSBOVUxMOworICAgIHJldHVybiBwQml0bWFwOworfQordm9pZCBDRlhfQml0bWFwU3RvcmVyOjpSZXBsYWNlKENGWF9ESUJpdG1hcCogcEJpdG1hcCkKK3sKKyAgICBpZiAobV9wQml0bWFwKSB7CisgICAgICAgIGRlbGV0ZSBtX3BCaXRtYXA7CisgICAgfQorICAgIG1fcEJpdG1hcCA9IHBCaXRtYXA7Cit9Cit2b2lkIENGWF9CaXRtYXBTdG9yZXI6OkNvbXBvc2VTY2FubGluZShpbnQgbGluZSwgRlhfTFBDQllURSBzY2FubGluZSwgRlhfTFBDQllURSBzY2FuX2V4dHJhX2FscGhhKQoreworICAgIEZYX0xQQllURSBkZXN0X2J1ZiA9IChGWF9MUEJZVEUpbV9wQml0bWFwLT5HZXRTY2FubGluZShsaW5lKTsKKyAgICBGWF9MUEJZVEUgZGVzdF9hbHBoYV9idWYgPSBtX3BCaXRtYXAtPm1fcEFscGhhTWFzayA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZYX0xQQllURSltX3BCaXRtYXAtPm1fcEFscGhhTWFzay0+R2V0U2NhbmxpbmUobGluZSkgOiBOVUxMOworICAgIGlmIChkZXN0X2J1ZikgeworICAgICAgICBGWFNZU19tZW1jcHkzMihkZXN0X2J1Ziwgc2NhbmxpbmUsIG1fcEJpdG1hcC0+R2V0UGl0Y2goKSk7CisgICAgfQorICAgIGlmIChkZXN0X2FscGhhX2J1ZikgeworICAgICAgICBGWFNZU19tZW1jcHkzMihkZXN0X2FscGhhX2J1Ziwgc2Nhbl9leHRyYV9hbHBoYSwgbV9wQml0bWFwLT5tX3BBbHBoYU1hc2stPkdldFBpdGNoKCkpOworICAgIH0KK30KK0ZYX0JPT0wgQ0ZYX0JpdG1hcFN0b3Jlcjo6U2V0SW5mbyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIEZYRElCX0Zvcm1hdCBzcmNfZm9ybWF0LCBGWF9EV09SRCogcFNyY1BhbGV0dGUpCit7CisgICAgbV9wQml0bWFwID0gRlhfTkVXIENGWF9ESUJpdG1hcDsKKyAgICBpZiAoIW1fcEJpdG1hcCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmICghbV9wQml0bWFwLT5DcmVhdGUod2lkdGgsIGhlaWdodCwgc3JjX2Zvcm1hdCkpIHsKKyAgICAgICAgZGVsZXRlIG1fcEJpdG1hcDsKKyAgICAgICAgbV9wQml0bWFwID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAocFNyY1BhbGV0dGUpIHsKKyAgICAgICAgbV9wQml0bWFwLT5Db3B5UGFsZXR0ZShwU3JjUGFsZXR0ZSk7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9kaWIvZnhfZGliX3RyYW5zZm9ybS5jcHAgYi9jb3JlL3NyYy9meGdlL2RpYi9meF9kaWJfdHJhbnNmb3JtLmNwcAppbmRleCA0ZDgzMDA1Li44MDQ3NWNiIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL2RpYi9meF9kaWJfdHJhbnNmb3JtLmNwcAorKysgYi9jb3JlL3NyYy9meGdlL2RpYi9meF9kaWJfdHJhbnNmb3JtLmNwcApAQCAtMSw3OTcgKzEsNzk3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2RpYi5oIg0KLSNpbmNsdWRlICJkaWJfaW50LmgiDQotaW50IFNEUF9UYWJsZVs1MTNdID0gew0KLSAgICAyNTYsIDI1NiwgMjU2LCAyNTYsIDI1NiwgMjU2LCAyNTYsIDI1NiwgMjU2LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTQsIDI1NCwgMjU0LCAyNTQsDQotICAgIDI1MywgMjUzLCAyNTMsIDI1MiwgMjUyLCAyNTIsIDI1MSwgMjUxLCAyNTEsIDI1MCwgMjUwLCAyNDksIDI0OSwgMjQ5LCAyNDgsIDI0OCwgMjQ3LCAyNDcsIDI0NiwNCi0gICAgMjQ2LCAyNDUsIDI0NCwgMjQ0LCAyNDMsIDI0MywgMjQyLCAyNDIsIDI0MSwgMjQwLCAyNDAsIDIzOSwgMjM4LCAyMzgsIDIzNywgMjM2LCAyMzYsIDIzNSwgMjM0LA0KLSAgICAyMzMsIDIzMywgMjMyLCAyMzEsIDIzMCwgMjMwLCAyMjksIDIyOCwgMjI3LCAyMjYsIDIyNiwgMjI1LCAyMjQsIDIyMywgMjIyLCAyMjEsIDIyMCwgMjE5LCAyMTgsDQotICAgIDIxOCwgMjE3LCAyMTYsIDIxNSwgMjE0LCAyMTMsIDIxMiwgMjExLCAyMTAsIDIwOSwgMjA4LCAyMDcsIDIwNiwgMjA1LCAyMDQsIDIwMywgMjAyLCAyMDEsIDIwMCwNCi0gICAgMTk5LCAxOTgsIDE5NiwgMTk1LCAxOTQsIDE5MywgMTkyLCAxOTEsIDE5MCwgMTg5LCAxODgsIDE4NiwgMTg1LCAxODQsIDE4MywgMTgyLCAxODEsIDE3OSwgMTc4LA0KLSAgICAxNzcsIDE3NiwgMTc1LCAxNzMsIDE3MiwgMTcxLCAxNzAsIDE2OSwgMTY3LCAxNjYsIDE2NSwgMTY0LCAxNjIsIDE2MSwgMTYwLCAxNTksIDE1NywgMTU2LCAxNTUsDQotICAgIDE1NCwgMTUyLCAxNTEsIDE1MCwgMTQ5LCAxNDcsIDE0NiwgMTQ1LCAxNDMsIDE0MiwgMTQxLCAxNDAsIDEzOCwgMTM3LCAxMzYsIDEzNCwgMTMzLCAxMzIsIDEzMCwNCi0gICAgMTI5LCAxMjgsIDEyNiwgMTI1LCAxMjQsIDEyMiwgMTIxLCAxMjAsIDExOSwgMTE3LCAxMTYsIDExNSwgMTEzLCAxMTIsIDExMSwgMTA5LCAxMDgsIDEwNywgMTA1LA0KLSAgICAxMDQsIDEwMywgMTAxLCAxMDAsIDk5LCA5NywgOTYsIDk1LCA5MywgOTIsIDkxLCA4OSwgODgsIDg3LCA4NSwgODQsIDgzLCA4MSwgODAsIDc5LCA3NywgNzYsIDc1LA0KLSAgICA3MywgNzIsIDcxLCA2OSwgNjgsIDY3LCA2NiwgNjQsIDYzLCA2MiwgNjAsIDU5LCA1OCwgNTcsIDU1LCA1NCwgNTMsIDUyLCA1MCwgNDksIDQ4LCA0NywgNDUsIDQ0LA0KLSAgICA0MywgNDIsIDQwLCAzOSwgMzgsIDM3LCAzNiwgMzQsIDMzLCAzMiwgMzEsIDMwLCAyOCwgMjcsIDI2LCAyNSwgMjQsIDIzLCAyMSwgMjAsIDE5LCAxOCwgMTcsIDE2LA0KLSAgICAxNSwgMTQsIDEzLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDAsIDAsIC0xLCAtMiwgLTMsIC00LCAtNSwgLTYsIC03LCAtNywgLTgsIC05LCAtMTAsDQotICAgIC0xMSwgLTEyLCAtMTIsIC0xMywgLTE0LCAtMTUsIC0xNSwgLTE2LCAtMTcsIC0xNywgLTE4LCAtMTksIC0xOSwgLTIwLCAtMjEsIC0yMSwgLTIyLCAtMjIsIC0yMywgLTI0LA0KLSAgICAtMjQsIC0yNSwgLTI1LCAtMjYsIC0yNiwgLTI3LCAtMjcsIC0yNywgLTI4LCAtMjgsIC0yOSwgLTI5LCAtMzAsIC0zMCwgLTMwLCAtMzEsIC0zMSwgLTMxLCAtMzIsIC0zMiwNCi0gICAgLTMyLCAtMzMsIC0zMywgLTMzLCAtMzMsIC0zNCwgLTM0LCAtMzQsIC0zNCwgLTM1LCAtMzUsIC0zNSwgLTM1LCAtMzUsIC0zNiwgLTM2LCAtMzYsIC0zNiwgLTM2LCAtMzYsDQotICAgIC0zNiwgLTM2LCAtMzYsIC0zNywgLTM3LCAtMzcsIC0zNywgLTM3LCAtMzcsIC0zNywgLTM3LCAtMzcsIC0zNywgLTM3LCAtMzcsIC0zNywgLTM3LCAtMzcsIC0zNywgLTM3LA0KLSAgICAtMzcsIC0zNywgLTM3LCAtMzcsIC0zNiwgLTM2LCAtMzYsIC0zNiwgLTM2LCAtMzYsIC0zNiwgLTM2LCAtMzYsIC0zNSwgLTM1LCAtMzUsIC0zNSwgLTM1LCAtMzUsIC0zNCwNCi0gICAgLTM0LCAtMzQsIC0zNCwgLTM0LCAtMzMsIC0zMywgLTMzLCAtMzMsIC0zMywgLTMyLCAtMzIsIC0zMiwgLTMyLCAtMzEsIC0zMSwgLTMxLCAtMzEsIC0zMCwgLTMwLCAtMzAsDQotICAgIC0zMCwgLTI5LCAtMjksIC0yOSwgLTI5LCAtMjgsIC0yOCwgLTI4LCAtMjcsIC0yNywgLTI3LCAtMjcsIC0yNiwgLTI2LCAtMjYsIC0yNSwgLTI1LCAtMjUsIC0yNCwgLTI0LA0KLSAgICAtMjQsIC0yMywgLTIzLCAtMjMsIC0yMiwgLTIyLCAtMjIsIC0yMiwgLTIxLCAtMjEsIC0yMSwgLTIwLCAtMjAsIC0yMCwgLTE5LCAtMTksIC0xOSwgLTE4LCAtMTgsIC0xOCwNCi0gICAgLTE3LCAtMTcsIC0xNywgLTE2LCAtMTYsIC0xNiwgLTE1LCAtMTUsIC0xNSwgLTE0LCAtMTQsIC0xNCwgLTEzLCAtMTMsIC0xMywgLTEyLCAtMTIsIC0xMiwgLTExLCAtMTEsDQotICAgIC0xMSwgLTEwLCAtMTAsIC0xMCwgLTksIC05LCAtOSwgLTksIC04LCAtOCwgLTgsIC03LCAtNywgLTcsIC03LCAtNiwgLTYsIC02LCAtNiwgLTUsIC01LCAtNSwgLTUsIC00LA0KLSAgICAtNCwgLTQsIC00LCAtMywgLTMsIC0zLCAtMywgLTMsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwNCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwNCi19Ow0KLWNsYXNzIENGWF9CaWxpbmVhck1hdHJpeCA6IHB1YmxpYyBDUERGX0ZpeGVkTWF0cml4DQotew0KLXB1YmxpYzoNCi0gICAgQ0ZYX0JpbGluZWFyTWF0cml4KGNvbnN0IENGWF9BZmZpbmVNYXRyaXgmIHNyYywgaW50IGJpdHMpOiBDUERGX0ZpeGVkTWF0cml4KHNyYywgYml0cykNCi0gICAge30NCi0gICAgaW5saW5lIHZvaWQJVHJhbnNmb3JtKGludCB4LCBpbnQgeSwgaW50JiB4MSwgaW50JiB5MSwgaW50JnJlc194LCBpbnQmcmVzX3kpDQotICAgIHsNCi0gICAgICAgIHgxID0gYSAqIHggKyBjICogeSArIGUgKyBiYXNlIC8gMjsNCi0gICAgICAgIHkxID0gYiAqIHggKyBkICogeSArIGYgKyBiYXNlIC8gMjsNCi0gICAgICAgIHJlc194ID0geDEgJSBiYXNlOw0KLSAgICAgICAgcmVzX3kgPSB5MSAlIGJhc2U7DQotICAgICAgICBpZiAocmVzX3ggPCAwICYmIHJlc194ID4gLWJhc2UpIHsNCi0gICAgICAgICAgICByZXNfeCA9IGJhc2UgKyByZXNfeDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChyZXNfeSA8IDAgJiYgcmVzX3ggPiAtYmFzZSkgew0KLSAgICAgICAgICAgIHJlc195ID0gYmFzZSArIHJlc195Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgeDEgLz0gYmFzZTsNCi0gICAgICAgIHkxIC89IGJhc2U7DQotICAgIH0NCi19Ow0KLUNGWF9ESUJpdG1hcCogQ0ZYX0RJQlNvdXJjZTo6U3dhcFhZKEZYX0JPT0wgYlhGbGlwLCBGWF9CT09MIGJZRmxpcCwgY29uc3QgRlhfUkVDVCogcERlc3RDbGlwKSBjb25zdA0KLXsNCi0gICAgRlhfUkVDVCBkZXN0X2NsaXAoMCwgMCwgbV9IZWlnaHQsIG1fV2lkdGgpOw0KLSAgICBpZiAocERlc3RDbGlwKSB7DQotICAgICAgICBkZXN0X2NsaXAuSW50ZXJzZWN0KCpwRGVzdENsaXApOw0KLSAgICB9DQotICAgIGlmIChkZXN0X2NsaXAuSXNFbXB0eSgpKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDRlhfRElCaXRtYXAqIHBUcmFuc0JpdG1hcCA9IEZYX05FVyBDRlhfRElCaXRtYXA7DQotICAgIGlmICghcFRyYW5zQml0bWFwKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpbnQgcmVzdWx0X2hlaWdodCA9IGRlc3RfY2xpcC5IZWlnaHQoKSwgcmVzdWx0X3dpZHRoID0gZGVzdF9jbGlwLldpZHRoKCk7DQotICAgIGlmICghcFRyYW5zQml0bWFwLT5DcmVhdGUocmVzdWx0X3dpZHRoLCByZXN1bHRfaGVpZ2h0LCBHZXRGb3JtYXQoKSkpIHsNCi0gICAgICAgIGRlbGV0ZSBwVHJhbnNCaXRtYXA7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBwVHJhbnNCaXRtYXAtPkNvcHlQYWxldHRlKG1fcFBhbGV0dGUpOw0KLSAgICBpbnQgc3JjX3BpdGNoID0gbV9QaXRjaDsNCi0gICAgaW50IGRlc3RfcGl0Y2ggPSBwVHJhbnNCaXRtYXAtPkdldFBpdGNoKCk7DQotICAgIEZYX0xQQllURSBkZXN0X2J1ZiA9IHBUcmFuc0JpdG1hcC0+R2V0QnVmZmVyKCk7DQotICAgIGludCByb3dfc3RhcnQgPSBiWEZsaXAgPyBtX0hlaWdodCAtIGRlc3RfY2xpcC5yaWdodCA6IGRlc3RfY2xpcC5sZWZ0Ow0KLSAgICBpbnQgcm93X2VuZCA9IGJYRmxpcCA/IG1fSGVpZ2h0IC0gZGVzdF9jbGlwLmxlZnQgOiBkZXN0X2NsaXAucmlnaHQ7DQotICAgIGludCBjb2xfc3RhcnQgPSBiWUZsaXAgPyBtX1dpZHRoIC0gZGVzdF9jbGlwLmJvdHRvbSA6IGRlc3RfY2xpcC50b3A7DQotICAgIGludCBjb2xfZW5kID0gYllGbGlwID8gbV9XaWR0aCAtIGRlc3RfY2xpcC50b3AgOiBkZXN0X2NsaXAuYm90dG9tOw0KLSAgICBpZiAoR2V0QlBQKCkgPT0gMSkgew0KLSAgICAgICAgRlhTWVNfbWVtc2V0OChkZXN0X2J1ZiwgMHhmZiwgZGVzdF9waXRjaCAqIHJlc3VsdF9oZWlnaHQpOw0KLSAgICAgICAgZm9yIChpbnQgcm93ID0gcm93X3N0YXJ0OyByb3cgPCByb3dfZW5kOyByb3cgKyspIHsNCi0gICAgICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gR2V0U2NhbmxpbmUocm93KTsNCi0gICAgICAgICAgICBpbnQgZGVzdF9jb2wgPSAoYlhGbGlwID8gZGVzdF9jbGlwLnJpZ2h0IC0gKHJvdyAtIHJvd19zdGFydCkgLSAxIDogcm93KSAtIGRlc3RfY2xpcC5sZWZ0Ow0KLSAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZjsNCi0gICAgICAgICAgICBpZiAoYllGbGlwKSB7DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSAocmVzdWx0X2hlaWdodCAtIDEpICogZGVzdF9waXRjaDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaW50IGRlc3Rfc3RlcCA9IGJZRmxpcCA/IC1kZXN0X3BpdGNoIDogZGVzdF9waXRjaDsNCi0gICAgICAgICAgICBmb3IgKGludCBjb2wgPSBjb2xfc3RhcnQ7IGNvbCA8IGNvbF9lbmQ7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICBpZiAoIShzcmNfc2Nhbltjb2wgLyA4XSAmICgxIDw8ICg3IC0gY29sICUgOCkpKSkgew0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfY29sIC8gOF0gJj0gfigxIDw8ICg3IC0gZGVzdF9jb2wgJSA4KSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IGRlc3Rfc3RlcDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpbnQgbkJ5dGVzID0gR2V0QlBQKCkgLyA4Ow0KLSAgICAgICAgaW50IGRlc3Rfc3RlcCA9IGJZRmxpcCA/IC1kZXN0X3BpdGNoIDogZGVzdF9waXRjaDsNCi0gICAgICAgIGlmIChuQnl0ZXMgPT0gMykgew0KLSAgICAgICAgICAgIGRlc3Rfc3RlcCAtPSAyOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yIChpbnQgcm93ID0gcm93X3N0YXJ0OyByb3cgPCByb3dfZW5kOyByb3cgKyspIHsNCi0gICAgICAgICAgICBpbnQgZGVzdF9jb2wgPSAoYlhGbGlwID8gZGVzdF9jbGlwLnJpZ2h0IC0gKHJvdyAtIHJvd19zdGFydCkgLSAxIDogcm93KSAtIGRlc3RfY2xpcC5sZWZ0Ow0KLSAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIGRlc3RfY29sICogbkJ5dGVzOw0KLSAgICAgICAgICAgIGlmIChiWUZsaXApIHsNCi0gICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IChyZXN1bHRfaGVpZ2h0IC0gMSkgKiBkZXN0X3BpdGNoOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAobkJ5dGVzID09IDQpIHsNCi0gICAgICAgICAgICAgICAgRlhfRFdPUkQqIHNyY19zY2FuID0gKEZYX0RXT1JEKilHZXRTY2FubGluZShyb3cpICsgY29sX3N0YXJ0Ow0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSBjb2xfc3RhcnQ7IGNvbCA8IGNvbF9lbmQ7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgKihGWF9EV09SRCopZGVzdF9zY2FuID0gKnNyY19zY2FuKys7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9zdGVwOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IEdldFNjYW5saW5lKHJvdykgKyBjb2xfc3RhcnQgKiBuQnl0ZXM7DQotICAgICAgICAgICAgICAgIGlmIChuQnl0ZXMgPT0gMSkNCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IGNvbF9zdGFydDsgY29sIDwgY29sX2VuZDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9ICpzcmNfc2NhbisrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X3N0ZXA7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGVsc2UNCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IGNvbF9zdGFydDsgY29sIDwgY29sX2VuZDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9ICpzcmNfc2NhbisrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X3N0ZXA7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChtX3BBbHBoYU1hc2spIHsNCi0gICAgICAgIHNyY19waXRjaCA9IG1fcEFscGhhTWFzay0+bV9QaXRjaDsNCi0gICAgICAgIGRlc3RfcGl0Y2ggPSBwVHJhbnNCaXRtYXAtPm1fcEFscGhhTWFzay0+R2V0UGl0Y2goKTsNCi0gICAgICAgIGRlc3RfYnVmID0gcFRyYW5zQml0bWFwLT5tX3BBbHBoYU1hc2stPkdldEJ1ZmZlcigpOw0KLSAgICAgICAgaW50IGRlc3Rfc3RlcCA9IGJZRmxpcCA/IC1kZXN0X3BpdGNoIDogZGVzdF9waXRjaDsNCi0gICAgICAgIGZvciAoaW50IHJvdyA9IHJvd19zdGFydDsgcm93IDwgcm93X2VuZDsgcm93ICsrKSB7DQotICAgICAgICAgICAgaW50IGRlc3RfY29sID0gKGJYRmxpcCA/IGRlc3RfY2xpcC5yaWdodCAtIChyb3cgLSByb3dfc3RhcnQpIC0gMSA6IHJvdykgLSBkZXN0X2NsaXAubGVmdDsNCi0gICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyBkZXN0X2NvbDsNCi0gICAgICAgICAgICBpZiAoYllGbGlwKSB7DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSAocmVzdWx0X2hlaWdodCAtIDEpICogZGVzdF9waXRjaDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IG1fcEFscGhhTWFzay0+R2V0U2NhbmxpbmUocm93KSArIGNvbF9zdGFydDsNCi0gICAgICAgICAgICBmb3IgKGludCBjb2wgPSBjb2xfc3RhcnQ7IGNvbCA8IGNvbF9lbmQ7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gKnNyY19zY2FuKys7DQotICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X3N0ZXA7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBwVHJhbnNCaXRtYXA7DQotfQ0KLSNkZWZpbmUgRklYMTZfMDA1IDAuMDVmDQotRlhfUkVDVCBfRlhESUJfU3dhcENsaXBCb3goRlhfUkVDVCYgY2xpcCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBGWF9CT09MIGJGbGlwWCwgRlhfQk9PTCBiRmxpcFkpDQotew0KLSAgICBGWF9SRUNUIHJlY3Q7DQotICAgIGlmIChiRmxpcFkpIHsNCi0gICAgICAgIHJlY3QubGVmdCA9IGhlaWdodCAtIGNsaXAudG9wOw0KLSAgICAgICAgcmVjdC5yaWdodCA9IGhlaWdodCAtIGNsaXAuYm90dG9tOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmVjdC5sZWZ0ID0gY2xpcC50b3A7DQotICAgICAgICByZWN0LnJpZ2h0ID0gY2xpcC5ib3R0b207DQotICAgIH0NCi0gICAgaWYgKGJGbGlwWCkgew0KLSAgICAgICAgcmVjdC50b3AgPSB3aWR0aCAtIGNsaXAubGVmdDsNCi0gICAgICAgIHJlY3QuYm90dG9tID0gd2lkdGggLSBjbGlwLnJpZ2h0Ow0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgcmVjdC50b3AgPSBjbGlwLmxlZnQ7DQotICAgICAgICByZWN0LmJvdHRvbSA9IGNsaXAucmlnaHQ7DQotICAgIH0NCi0gICAgcmVjdC5Ob3JtYWxpemUoKTsNCi0gICAgcmV0dXJuIHJlY3Q7DQotfQ0KLUNGWF9ESUJpdG1hcCogQ0ZYX0RJQlNvdXJjZTo6VHJhbnNmb3JtVG8oY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcERlc3RNYXRyaXgsIGludCYgcmVzdWx0X2xlZnQsIGludCYgcmVzdWx0X3RvcCwNCi0gICAgICAgIEZYX0RXT1JEIGZsYWdzLCBjb25zdCBGWF9SRUNUKiBwRGVzdENsaXApIGNvbnN0DQotew0KLSAgICBDRlhfSW1hZ2VUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lcjsNCi0gICAgdHJhbnNmb3JtZXIuU3RhcnQodGhpcywgcERlc3RNYXRyaXgsIGZsYWdzLCBwRGVzdENsaXApOw0KLSAgICB0cmFuc2Zvcm1lci5Db250aW51ZShOVUxMKTsNCi0gICAgcmVzdWx0X2xlZnQgPSB0cmFuc2Zvcm1lci5tX1Jlc3VsdExlZnQ7DQotICAgIHJlc3VsdF90b3AgPSB0cmFuc2Zvcm1lci5tX1Jlc3VsdFRvcDsNCi0gICAgQ0ZYX0RJQml0bWFwKiBwVHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1lci5tX1N0b3Jlci5EZXRhY2goKTsNCi0gICAgcmV0dXJuIHBUcmFuc2Zvcm1lZDsNCi19DQotQ0ZYX0RJQml0bWFwKiBDRlhfRElCU291cmNlOjpTdHJldGNoVG8oaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgRlhfRFdPUkQgZmxhZ3MsIGNvbnN0IEZYX1JFQ1QqIHBDbGlwKSBjb25zdA0KLXsNCi0gICAgRlhfUkVDVCBjbGlwX3JlY3QoMCwgMCwgRlhTWVNfYWJzKGRlc3Rfd2lkdGgpLCBGWFNZU19hYnMoZGVzdF9oZWlnaHQpKTsNCi0gICAgaWYgKHBDbGlwKSB7DQotICAgICAgICBjbGlwX3JlY3QuSW50ZXJzZWN0KCpwQ2xpcCk7DQotICAgIH0NCi0gICAgaWYgKGNsaXBfcmVjdC5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGlmIChkZXN0X3dpZHRoID09IG1fV2lkdGggJiYgZGVzdF9oZWlnaHQgPT0gbV9IZWlnaHQpIHsNCi0gICAgICAgIHJldHVybiBDbG9uZSgmY2xpcF9yZWN0KTsNCi0gICAgfQ0KLSAgICBDRlhfSW1hZ2VTdHJldGNoZXIgc3RyZXRjaGVyOw0KLSAgICBDRlhfQml0bWFwU3RvcmVyIHN0b3JlcjsNCi0gICAgaWYgKHN0cmV0Y2hlci5TdGFydCgmc3RvcmVyLCB0aGlzLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgY2xpcF9yZWN0LCBmbGFncykpIHsNCi0gICAgICAgIHN0cmV0Y2hlci5Db250aW51ZShOVUxMKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gc3RvcmVyLkRldGFjaCgpOw0KLX0NCi1DRlhfSW1hZ2VUcmFuc2Zvcm1lcjo6Q0ZYX0ltYWdlVHJhbnNmb3JtZXIoKQ0KLXsNCi0gICAgbV9TdGF0dXMgPSAwOw0KLSAgICBtX3BNYXRyaXggPSBOVUxMOw0KLX0NCi1DRlhfSW1hZ2VUcmFuc2Zvcm1lcjo6fkNGWF9JbWFnZVRyYW5zZm9ybWVyKCkNCi17DQotfQ0KLUZYX0JPT0wgQ0ZYX0ltYWdlVHJhbnNmb3JtZXI6OlN0YXJ0KGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmMsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBEZXN0TWF0cml4LCBpbnQgZmxhZ3MsIGNvbnN0IEZYX1JFQ1QqIHBEZXN0Q2xpcCkNCi17DQotICAgIG1fcE1hdHJpeCA9IChDRlhfQWZmaW5lTWF0cml4KilwRGVzdE1hdHJpeDsNCi0gICAgQ0ZYX0Zsb2F0UmVjdCB1bml0X3JlY3QgPSBwRGVzdE1hdHJpeC0+R2V0VW5pdFJlY3QoKTsNCi0gICAgRlhfUkVDVCByZXN1bHRfcmVjdCA9IHVuaXRfcmVjdC5HZXRDbG9zZXN0UmVjdCgpOw0KLSAgICBGWF9SRUNUIHJlc3VsdF9jbGlwID0gcmVzdWx0X3JlY3Q7DQotICAgIGlmIChwRGVzdENsaXApIHsNCi0gICAgICAgIHJlc3VsdF9jbGlwLkludGVyc2VjdCgqcERlc3RDbGlwKTsNCi0gICAgfQ0KLSAgICBpZiAocmVzdWx0X2NsaXAuSXNFbXB0eSgpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbV9SZXN1bHRMZWZ0ID0gcmVzdWx0X2NsaXAubGVmdDsNCi0gICAgbV9SZXN1bHRUb3AgPSByZXN1bHRfY2xpcC50b3A7DQotICAgIG1fUmVzdWx0V2lkdGggPSByZXN1bHRfY2xpcC5XaWR0aCgpOw0KLSAgICBtX1Jlc3VsdEhlaWdodCA9IHJlc3VsdF9jbGlwLkhlaWdodCgpOw0KLSAgICBtX0ZsYWdzID0gZmxhZ3M7DQotICAgIGlmIChGWFNZU19mYWJzKHBEZXN0TWF0cml4LT5hKSA8IEZYU1lTX2ZhYnMocERlc3RNYXRyaXgtPmIpIC8gMjAgJiYNCi0gICAgICAgICAgICBGWFNZU19mYWJzKHBEZXN0TWF0cml4LT5kKSA8IEZYU1lTX2ZhYnMocERlc3RNYXRyaXgtPmMpIC8gMjAgJiYNCi0gICAgICAgICAgICBGWFNZU19mYWJzKHBEZXN0TWF0cml4LT5hKSA8IDAuNWYgJiYgRlhTWVNfZmFicyhwRGVzdE1hdHJpeC0+ZCkgPCAwLjVmKSB7DQotICAgICAgICBpbnQgZGVzdF93aWR0aCA9IHJlc3VsdF9yZWN0LldpZHRoKCk7DQotICAgICAgICBpbnQgZGVzdF9oZWlnaHQgPSByZXN1bHRfcmVjdC5IZWlnaHQoKTsNCi0gICAgICAgIHJlc3VsdF9jbGlwLk9mZnNldCgtcmVzdWx0X3JlY3QubGVmdCwgLXJlc3VsdF9yZWN0LnRvcCk7DQotICAgICAgICByZXN1bHRfY2xpcCA9IF9GWERJQl9Td2FwQ2xpcEJveChyZXN1bHRfY2xpcCwgZGVzdF93aWR0aCwgZGVzdF9oZWlnaHQsIHBEZXN0TWF0cml4LT5jID4gMCwgcERlc3RNYXRyaXgtPmIgPCAwKTsNCi0gICAgICAgIG1fU3RyZXRjaGVyLlN0YXJ0KCZtX1N0b3JlciwgcFNyYywgZGVzdF9oZWlnaHQsIGRlc3Rfd2lkdGgsIHJlc3VsdF9jbGlwLCBmbGFncyk7DQotICAgICAgICBtX1N0YXR1cyA9IDE7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBpZiAoRlhTWVNfZmFicyhwRGVzdE1hdHJpeC0+YikgPCBGSVgxNl8wMDUgJiYgRlhTWVNfZmFicyhwRGVzdE1hdHJpeC0+YykgPCBGSVgxNl8wMDUpIHsNCi0gICAgICAgIGludCBkZXN0X3dpZHRoID0gcERlc3RNYXRyaXgtPmEgPiAwID8gKGludClGWFNZU19jZWlsKHBEZXN0TWF0cml4LT5hKSA6IChpbnQpRlhTWVNfZmxvb3IocERlc3RNYXRyaXgtPmEpOw0KLSAgICAgICAgaW50IGRlc3RfaGVpZ2h0ID0gcERlc3RNYXRyaXgtPmQgPiAwID8gKGludCkgLSBGWFNZU19jZWlsKHBEZXN0TWF0cml4LT5kKSA6IChpbnQpIC0gRlhTWVNfZmxvb3IocERlc3RNYXRyaXgtPmQpOw0KLSAgICAgICAgcmVzdWx0X2NsaXAuT2Zmc2V0KC1yZXN1bHRfcmVjdC5sZWZ0LCAtcmVzdWx0X3JlY3QudG9wKTsNCi0gICAgICAgIG1fU3RyZXRjaGVyLlN0YXJ0KCZtX1N0b3JlciwgcFNyYywgZGVzdF93aWR0aCwgZGVzdF9oZWlnaHQsIHJlc3VsdF9jbGlwLCBmbGFncyk7DQotICAgICAgICBtX1N0YXR1cyA9IDI7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBpbnQgc3RyZXRjaF93aWR0aCA9IChpbnQpRlhTWVNfY2VpbChGWFNZU19zcXJ0MihwRGVzdE1hdHJpeC0+YSwgcERlc3RNYXRyaXgtPmIpKTsNCi0gICAgaW50IHN0cmV0Y2hfaGVpZ2h0ID0gKGludClGWFNZU19jZWlsKEZYU1lTX3NxcnQyKHBEZXN0TWF0cml4LT5jLCBwRGVzdE1hdHJpeC0+ZCkpOw0KLSAgICBDRlhfQWZmaW5lTWF0cml4IHN0cmV0Y2gyZGVzdCgxLjBmLCAwLjBmLCAwLjBmLCAtMS4wZiwgMC4wZiwgKEZYX0ZMT0FUKShzdHJldGNoX2hlaWdodCkpOw0KLSAgICBzdHJldGNoMmRlc3QuQ29uY2F0KHBEZXN0TWF0cml4LT5hIC8gc3RyZXRjaF93aWR0aCwgcERlc3RNYXRyaXgtPmIgLyBzdHJldGNoX3dpZHRoLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBEZXN0TWF0cml4LT5jIC8gc3RyZXRjaF9oZWlnaHQsIHBEZXN0TWF0cml4LT5kIC8gc3RyZXRjaF9oZWlnaHQsIHBEZXN0TWF0cml4LT5lLCBwRGVzdE1hdHJpeC0+Zik7DQotICAgIG1fZGVzdDJzdHJldGNoLlNldFJldmVyc2Uoc3RyZXRjaDJkZXN0KTsNCi0gICAgQ0ZYX0Zsb2F0UmVjdCBjbGlwX3JlY3RfZihyZXN1bHRfY2xpcCk7DQotICAgIGNsaXBfcmVjdF9mLlRyYW5zZm9ybSgmbV9kZXN0MnN0cmV0Y2gpOw0KLSAgICBtX1N0cmV0Y2hDbGlwID0gY2xpcF9yZWN0X2YuR2V0T3V0dGVyUmVjdCgpOw0KLSAgICBtX1N0cmV0Y2hDbGlwLkludGVyc2VjdCgwLCAwLCBzdHJldGNoX3dpZHRoLCBzdHJldGNoX2hlaWdodCk7DQotICAgIG1fU3RyZXRjaGVyLlN0YXJ0KCZtX1N0b3JlciwgcFNyYywgc3RyZXRjaF93aWR0aCwgc3RyZXRjaF9oZWlnaHQsIG1fU3RyZXRjaENsaXAsIGZsYWdzKTsNCi0gICAgbV9TdGF0dXMgPSAzOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQllURSBfYmlsaW5lYXJfaW50ZXJwb2woRlhfTFBDQllURSBidWYsIGludCByb3dfb2Zmc2V0X2wsIGludCByb3dfb2Zmc2V0X3IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19jb2xfbCwgaW50IHNyY19jb2xfciwgaW50IHJlc194LCBpbnQgcmVzX3ksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJwcCwgaW50IGNfb2Zmc2V0KQ0KLXsNCi0gICAgaW50IGlfcmVzeCA9IDI1NSAtIHJlc194Ow0KLSAgICBpbnQgY29sX2JwcF9sID0gc3JjX2NvbF9sICogYnBwOw0KLSAgICBpbnQgY29sX2JwcF9yID0gc3JjX2NvbF9yICogYnBwOw0KLSAgICBGWF9MUENCWVRFIGJ1Zl91ID0gYnVmICsgcm93X29mZnNldF9sICsgY19vZmZzZXQ7DQotICAgIEZYX0xQQ0JZVEUgYnVmX2QgPSBidWYgKyByb3dfb2Zmc2V0X3IgKyBjX29mZnNldDsNCi0gICAgRlhfTFBDQllURSBzcmNfcG9zMCA9IGJ1Zl91ICsgY29sX2JwcF9sOw0KLSAgICBGWF9MUENCWVRFIHNyY19wb3MxID0gYnVmX3UgKyBjb2xfYnBwX3I7DQotICAgIEZYX0xQQ0JZVEUgc3JjX3BvczIgPSBidWZfZCArIGNvbF9icHBfbDsNCi0gICAgRlhfTFBDQllURSBzcmNfcG9zMyA9IGJ1Zl9kICsgY29sX2JwcF9yOw0KLSAgICBGWF9CWVRFIHJfcG9zXzAgPSAoKnNyY19wb3MwICogaV9yZXN4ICsgKnNyY19wb3MxICogcmVzX3gpID4+IDg7DQotICAgIEZYX0JZVEUgcl9wb3NfMSA9ICgqc3JjX3BvczIgKiBpX3Jlc3ggKyAqc3JjX3BvczMgKiByZXNfeCkgPj4gODsNCi0gICAgcmV0dXJuIChyX3Bvc18wICogKDI1NSAtIHJlc195KSArIHJfcG9zXzEgKiByZXNfeSkgPj4gODsNCi19DQotRlhfQllURSBfYmljdWJpY19pbnRlcnBvbChGWF9MUENCWVRFIGJ1ZiwgaW50IHBpdGNoLCBpbnQgcG9zX3BpeGVsW10sIGludCB1X3dbXSwgaW50IHZfd1tdLCBpbnQgcmVzX3gsIGludCByZXNfeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBicHAsIGludCBjX29mZnNldCkNCi17DQotICAgIGludCBzX3Jlc3VsdCA9IDA7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSArKykgew0KLSAgICAgICAgaW50IGFfcmVzdWx0ID0gMDsNCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaiArKykgew0KLSAgICAgICAgICAgIGFfcmVzdWx0ICs9IHVfd1tqXSAqICgqKEZYX0JZVEUqKShidWYgKyBwb3NfcGl4ZWxbaSArIDRdICogcGl0Y2ggKyBwb3NfcGl4ZWxbal0gKiBicHAgKyBjX29mZnNldCkpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgc19yZXN1bHQgKz0gYV9yZXN1bHQgKiB2X3dbaV07DQotICAgIH0NCi0gICAgc19yZXN1bHQgPj49IDE2Ow0KLSAgICByZXR1cm4gKEZYX0JZVEUpKHNfcmVzdWx0IDwgMCA/IDAgOiBzX3Jlc3VsdCA+IDI1NSA/IDI1NSA6IHNfcmVzdWx0KTsNCi19DQotdm9pZCBfYmljdWJpY19nZXRfcG9zX3dlaWdodChpbnQgcG9zX3BpeGVsW10sIGludCB1X3dbXSwgaW50IHZfd1tdLCBpbnQgc3JjX2NvbF9sLCBpbnQgc3JjX3Jvd19sLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc194LCBpbnQgcmVzX3ksIGludCBzdHJldGNoX3dpZHRoLCBpbnQgc3RyZXRjaF9oZWlnaHQpDQotew0KLSAgICBwb3NfcGl4ZWxbMF0gPSBzcmNfY29sX2wgLSAxOw0KLSAgICBwb3NfcGl4ZWxbMV0gPSBzcmNfY29sX2w7DQotICAgIHBvc19waXhlbFsyXSA9IHNyY19jb2xfbCArIDE7DQotICAgIHBvc19waXhlbFszXSA9IHNyY19jb2xfbCArIDI7DQotICAgIHBvc19waXhlbFs0XSA9IHNyY19yb3dfbCAtIDE7DQotICAgIHBvc19waXhlbFs1XSA9IHNyY19yb3dfbDsNCi0gICAgcG9zX3BpeGVsWzZdID0gc3JjX3Jvd19sICsgMTsNCi0gICAgcG9zX3BpeGVsWzddID0gc3JjX3Jvd19sICsgMjsNCi0gICAgZm9yIChpbnQgaSA9IDAgOyBpIDwgNDsgaSArKykgew0KLSAgICAgICAgaWYgKHBvc19waXhlbFtpXSA8IDApIHsNCi0gICAgICAgICAgICBwb3NfcGl4ZWxbaV0gPSAwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBvc19waXhlbFtpXSA+PSBzdHJldGNoX3dpZHRoKSB7DQotICAgICAgICAgICAgcG9zX3BpeGVsW2ldID0gc3RyZXRjaF93aWR0aCAtIDE7DQotICAgICAgICB9DQotICAgICAgICBpZiAocG9zX3BpeGVsW2kgKyA0XSA8IDApIHsNCi0gICAgICAgICAgICBwb3NfcGl4ZWxbaSArIDRdID0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwb3NfcGl4ZWxbaSArIDRdID49IHN0cmV0Y2hfaGVpZ2h0KSB7DQotICAgICAgICAgICAgcG9zX3BpeGVsW2kgKyA0XSA9IHN0cmV0Y2hfaGVpZ2h0IC0gMTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICB1X3dbMF0gPSBTRFBfVGFibGVbMjU2ICsgcmVzX3hdOw0KLSAgICB1X3dbMV0gPSBTRFBfVGFibGVbcmVzX3hdOw0KLSAgICB1X3dbMl0gPSBTRFBfVGFibGVbMjU2IC0gcmVzX3hdOw0KLSAgICB1X3dbM10gPSBTRFBfVGFibGVbNTEyIC0gcmVzX3hdOw0KLSAgICB2X3dbMF0gPSBTRFBfVGFibGVbMjU2ICsgcmVzX3ldOw0KLSAgICB2X3dbMV0gPSBTRFBfVGFibGVbcmVzX3ldOw0KLSAgICB2X3dbMl0gPSBTRFBfVGFibGVbMjU2IC0gcmVzX3ldOw0KLSAgICB2X3dbM10gPSBTRFBfVGFibGVbNTEyIC0gcmVzX3ldOw0KLX0NCi1GWERJQl9Gb3JtYXQgX0dldFRyYW5zZm9ybWVkRm9ybWF0KGNvbnN0IENGWF9ESUJTb3VyY2UqIHBEcmMpDQotew0KLSAgICBGWERJQl9Gb3JtYXQgZm9ybWF0ID0gcERyYy0+R2V0Rm9ybWF0KCk7DQotICAgIGlmIChwRHJjLT5Jc0FscGhhTWFzaygpKSB7DQotICAgICAgICBmb3JtYXQgPSBGWERJQl84YnBwTWFzazsNCi0gICAgfSBlbHNlIGlmIChmb3JtYXQgPj0gMTAyNSkgew0KLSAgICAgICAgZm9ybWF0ID0gRlhESUJfQ215a2E7DQotICAgIH0gZWxzZSBpZiAoZm9ybWF0IDw9IDMyIHx8IGZvcm1hdCA9PSBGWERJQl9BcmdiKSB7DQotICAgICAgICBmb3JtYXQgPSBGWERJQl9BcmdiOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZm9ybWF0ID0gRlhESUJfUmdiYTsNCi0gICAgfQ0KLSAgICByZXR1cm4gZm9ybWF0Ow0KLX0NCi1GWF9CT09MIENGWF9JbWFnZVRyYW5zZm9ybWVyOjpDb250aW51ZShJRlhfUGF1c2UqIHBQYXVzZSkNCi17DQotICAgIGlmIChtX1N0YXR1cyA9PSAxKSB7DQotICAgICAgICBpZiAobV9TdHJldGNoZXIuQ29udGludWUocFBhdXNlKSkgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fU3RvcmVyLkdldEJpdG1hcCgpKSB7DQotICAgICAgICAgICAgbV9TdG9yZXIuUmVwbGFjZShtX1N0b3Jlci5HZXRCaXRtYXAoKS0+U3dhcFhZKG1fcE1hdHJpeC0+YyA+IDAsIG1fcE1hdHJpeC0+YiA8IDApKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfSBlbHNlIGlmIChtX1N0YXR1cyA9PSAyKSB7DQotICAgICAgICByZXR1cm4gbV9TdHJldGNoZXIuQ29udGludWUocFBhdXNlKTsNCi0gICAgfSBlbHNlIGlmIChtX1N0YXR1cyAhPSAzKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKG1fU3RyZXRjaGVyLkNvbnRpbnVlKHBQYXVzZSkpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIGludCBzdHJldGNoX3dpZHRoID0gbV9TdHJldGNoQ2xpcC5XaWR0aCgpOw0KLSAgICBpbnQgc3RyZXRjaF9oZWlnaHQgPSBtX1N0cmV0Y2hDbGlwLkhlaWdodCgpOw0KLSAgICBpZiAobV9TdG9yZXIuR2V0Qml0bWFwKCkgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYX0xQQ0JZVEUgc3RyZXRjaF9idWYgPSBtX1N0b3Jlci5HZXRCaXRtYXAoKS0+R2V0QnVmZmVyKCk7DQotICAgIEZYX0xQQ0JZVEUgc3RyZXRjaF9idWZfbWFzayA9IE5VTEw7DQotICAgIGlmIChtX1N0b3Jlci5HZXRCaXRtYXAoKS0+bV9wQWxwaGFNYXNrKSB7DQotICAgICAgICBzdHJldGNoX2J1Zl9tYXNrID0gbV9TdG9yZXIuR2V0Qml0bWFwKCktPm1fcEFscGhhTWFzay0+R2V0QnVmZmVyKCk7DQotICAgIH0NCi0gICAgaW50IHN0cmV0Y2hfcGl0Y2ggPSBtX1N0b3Jlci5HZXRCaXRtYXAoKS0+R2V0UGl0Y2goKTsNCi0gICAgQ0ZYX0RJQml0bWFwKiBwVHJhbnNmb3JtZWQgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOw0KLSAgICBpZiAoIXBUcmFuc2Zvcm1lZCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYRElCX0Zvcm1hdCB0cmFuc2Zvcm1GID0gX0dldFRyYW5zZm9ybWVkRm9ybWF0KG1fU3RyZXRjaGVyLm1fcFNvdXJjZSk7DQotICAgIGlmICghcFRyYW5zZm9ybWVkLT5DcmVhdGUobV9SZXN1bHRXaWR0aCwgbV9SZXN1bHRIZWlnaHQsIHRyYW5zZm9ybUYpKSB7DQotICAgICAgICBkZWxldGUgcFRyYW5zZm9ybWVkOw0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHBUcmFuc2Zvcm1lZC0+Q2xlYXIoMCk7DQotICAgIGlmIChwVHJhbnNmb3JtZWQtPm1fcEFscGhhTWFzaykgew0KLSAgICAgICAgcFRyYW5zZm9ybWVkLT5tX3BBbHBoYU1hc2stPkNsZWFyKDApOw0KLSAgICB9DQotICAgIENGWF9BZmZpbmVNYXRyaXggcmVzdWx0MnN0cmV0Y2goMS4wZiwgMC4wZiwgMC4wZiwgMS4wZiwgKEZYX0ZMT0FUKShtX1Jlc3VsdExlZnQpLCAoRlhfRkxPQVQpKG1fUmVzdWx0VG9wKSk7DQotICAgIHJlc3VsdDJzdHJldGNoLkNvbmNhdChtX2Rlc3Qyc3RyZXRjaCk7DQotICAgIHJlc3VsdDJzdHJldGNoLlRyYW5zbGF0ZUkoLW1fU3RyZXRjaENsaXAubGVmdCwgLW1fU3RyZXRjaENsaXAudG9wKTsNCi0gICAgaWYgKHN0cmV0Y2hfYnVmX21hc2sgPT0gTlVMTCAmJiBwVHJhbnNmb3JtZWQtPm1fcEFscGhhTWFzaykgew0KLSAgICAgICAgcFRyYW5zZm9ybWVkLT5tX3BBbHBoYU1hc2stPkNsZWFyKDB4ZmYwMDAwMDApOw0KLSAgICB9IGVsc2UgaWYgKHBUcmFuc2Zvcm1lZC0+bV9wQWxwaGFNYXNrKSB7DQotICAgICAgICBpbnQgc3RyZXRjaF9waXRjaF9tYXNrID0gbV9TdG9yZXIuR2V0Qml0bWFwKCktPm1fcEFscGhhTWFzay0+R2V0UGl0Y2goKTsNCi0gICAgICAgIGlmICghKG1fRmxhZ3MgJiBGWERJQl9ET1dOU0FNUExFKSAmJiAhKG1fRmxhZ3MgJiBGWERJQl9CSUNVQklDX0lOVEVSUE9MKSkgew0KLSAgICAgICAgICAgIENGWF9CaWxpbmVhck1hdHJpeCByZXN1bHQyc3RyZXRjaF9maXgocmVzdWx0MnN0cmV0Y2gsIDgpOw0KLSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fUmVzdWx0SGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgICAgICAgICAgRlhfQllURSogZGVzdF9wb3NfbWFzayA9IChGWF9CWVRFKilwVHJhbnNmb3JtZWQtPm1fcEFscGhhTWFzay0+R2V0U2NhbmxpbmUocm93KTsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbV9SZXN1bHRXaWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2NvbF9sLCBzcmNfcm93X2wsIHJlc194LCByZXNfeTsNCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdDJzdHJldGNoX2ZpeC5UcmFuc2Zvcm0oY29sLCByb3csIHNyY19jb2xfbCwgc3JjX3Jvd19sLCByZXNfeCwgcmVzX3kpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19jb2xfbCA+PSAwICYmIHNyY19jb2xfbCA8PSBzdHJldGNoX3dpZHRoICYmIHNyY19yb3dfbCA+PSAwICYmIHNyY19yb3dfbCA8PSBzdHJldGNoX2hlaWdodCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfY29sX2wgPT0gc3RyZXRjaF93aWR0aCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfY29sX2wtLTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19yb3dfbCA9PSBzdHJldGNoX2hlaWdodCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfcm93X2wtLTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19jb2xfciA9IHNyY19jb2xfbCArIDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19yb3dfciA9IHNyY19yb3dfbCArIDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19jb2xfciA9PSBzdHJldGNoX3dpZHRoKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19jb2xfci0tOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX3Jvd19yID09IHN0cmV0Y2hfaGVpZ2h0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19yb3dfci0tOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcm93X29mZnNldF9sID0gc3JjX3Jvd19sICogc3RyZXRjaF9waXRjaF9tYXNrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCByb3dfb2Zmc2V0X3IgPSBzcmNfcm93X3IgKiBzdHJldGNoX3BpdGNoX21hc2s7DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfcG9zX21hc2sgPSBfYmlsaW5lYXJfaW50ZXJwb2woc3RyZXRjaF9idWZfbWFzaywgcm93X29mZnNldF9sLCByb3dfb2Zmc2V0X3IsIHNyY19jb2xfbCwgc3JjX2NvbF9yLCByZXNfeCwgcmVzX3ksIDEsIDApOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3NfbWFzaysrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIGlmIChtX0ZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCkgew0KLSAgICAgICAgICAgIENGWF9CaWxpbmVhck1hdHJpeCByZXN1bHQyc3RyZXRjaF9maXgocmVzdWx0MnN0cmV0Y2gsIDgpOw0KLSAgICAgICAgICAgIGludCBwb3NfcGl4ZWxbOF07DQotICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9SZXN1bHRIZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgICAgICBGWF9CWVRFKiBkZXN0X3Bvc19tYXNrID0gKEZYX0JZVEUqKXBUcmFuc2Zvcm1lZC0+bV9wQWxwaGFNYXNrLT5HZXRTY2FubGluZShyb3cpOw0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1Jlc3VsdFdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGludCBzcmNfY29sX2wsIHNyY19yb3dfbCwgcmVzX3gsIHJlc195Ow0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0MnN0cmV0Y2hfZml4LlRyYW5zZm9ybShjb2wsIHJvdywgc3JjX2NvbF9sLCBzcmNfcm93X2wsIHJlc194LCByZXNfeSk7DQotICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbF9sID49IDAgJiYgc3JjX2NvbF9sIDw9IHN0cmV0Y2hfd2lkdGggJiYgc3JjX3Jvd19sID49IDAgJiYgc3JjX3Jvd19sIDw9IHN0cmV0Y2hfaGVpZ2h0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHVfd1s0XSwgdl93WzRdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfY29sX2wgPT0gc3RyZXRjaF93aWR0aCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfY29sX2wtLTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19yb3dfbCA9PSBzdHJldGNoX2hlaWdodCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfcm93X2wtLTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgX2JpY3ViaWNfZ2V0X3Bvc193ZWlnaHQocG9zX3BpeGVsLCB1X3csIHZfdywgc3JjX2NvbF9sLCBzcmNfcm93X2wsIHJlc194LCByZXNfeSwgc3RyZXRjaF93aWR0aCwgc3RyZXRjaF9oZWlnaHQpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3Bvc19tYXNrID0gX2JpY3ViaWNfaW50ZXJwb2woc3RyZXRjaF9idWZfbWFzaywgc3RyZXRjaF9waXRjaF9tYXNrLCBwb3NfcGl4ZWwsIHVfdywgdl93LCByZXNfeCwgcmVzX3ksIDEsIDApOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3NfbWFzaysrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBDUERGX0ZpeGVkTWF0cml4IHJlc3VsdDJzdHJldGNoX2ZpeChyZXN1bHQyc3RyZXRjaCwgOCk7DQotICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9SZXN1bHRIZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgICAgICBGWF9CWVRFKiBkZXN0X3Bvc19tYXNrID0gKEZYX0JZVEUqKXBUcmFuc2Zvcm1lZC0+bV9wQWxwaGFNYXNrLT5HZXRTY2FubGluZShyb3cpOw0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1Jlc3VsdFdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGludCBzcmNfY29sLCBzcmNfcm93Ow0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0MnN0cmV0Y2hfZml4LlRyYW5zZm9ybShjb2wsIHJvdywgc3JjX2NvbCwgc3JjX3Jvdyk7DQotICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbCA+PSAwICYmIHNyY19jb2wgPD0gc3RyZXRjaF93aWR0aCAmJiBzcmNfcm93ID49IDAgJiYgc3JjX3JvdyA8PSBzdHJldGNoX2hlaWdodCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfY29sID09IHN0cmV0Y2hfd2lkdGgpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2NvbCAtLTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19yb3cgPT0gc3RyZXRjaF9oZWlnaHQpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3JvdyAtLTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfcG9zX21hc2sgPSBzdHJldGNoX2J1Zl9tYXNrW3NyY19yb3cgKiBzdHJldGNoX3BpdGNoX21hc2sgKyBzcmNfY29sXTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zX21hc2srKzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAobV9TdG9yZXIuR2V0Qml0bWFwKCktPklzQWxwaGFNYXNrKCkpIHsNCi0gICAgICAgIGlmICghKG1fRmxhZ3MgJiBGWERJQl9ET1dOU0FNUExFKSAmJiAhKG1fRmxhZ3MgJiBGWERJQl9CSUNVQklDX0lOVEVSUE9MKSkgew0KLSAgICAgICAgICAgIENGWF9CaWxpbmVhck1hdHJpeCByZXN1bHQyc3RyZXRjaF9maXgocmVzdWx0MnN0cmV0Y2gsIDgpOw0KLSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fUmVzdWx0SGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IChGWF9MUEJZVEUpcFRyYW5zZm9ybWVkLT5HZXRTY2FubGluZShyb3cpOw0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1Jlc3VsdFdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGludCBzcmNfY29sX2wsIHNyY19yb3dfbCwgcmVzX3gsIHJlc195Ow0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0MnN0cmV0Y2hfZml4LlRyYW5zZm9ybShjb2wsIHJvdywgc3JjX2NvbF9sLCBzcmNfcm93X2wsIHJlc194LCByZXNfeSk7DQotICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbF9sID49IDAgJiYgc3JjX2NvbF9sIDw9IHN0cmV0Y2hfd2lkdGggJiYgc3JjX3Jvd19sID49IDAgJiYgc3JjX3Jvd19sIDw9IHN0cmV0Y2hfaGVpZ2h0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19jb2xfbCA9PSBzdHJldGNoX3dpZHRoKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19jb2xfbC0tOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX3Jvd19sID09IHN0cmV0Y2hfaGVpZ2h0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19yb3dfbC0tOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2NvbF9yID0gc3JjX2NvbF9sICsgMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX3Jvd19yID0gc3JjX3Jvd19sICsgMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbF9yID09IHN0cmV0Y2hfd2lkdGgpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2NvbF9yLS07DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfcm93X3IgPT0gc3RyZXRjaF9oZWlnaHQpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3Jvd19yLS07DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCByb3dfb2Zmc2V0X2wgPSBzcmNfcm93X2wgKiBzdHJldGNoX3BpdGNoOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCByb3dfb2Zmc2V0X3IgPSBzcmNfcm93X3IgKiBzdHJldGNoX3BpdGNoOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBfYmlsaW5lYXJfaW50ZXJwb2woc3RyZXRjaF9idWYsIHJvd19vZmZzZXRfbCwgcm93X29mZnNldF9yLCBzcmNfY29sX2wsIHNyY19jb2xfciwgcmVzX3gsIHJlc195LCAxLCAwKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSBpZiAobV9GbGFncyAmIEZYRElCX0JJQ1VCSUNfSU5URVJQT0wpIHsNCi0gICAgICAgICAgICBDRlhfQmlsaW5lYXJNYXRyaXggcmVzdWx0MnN0cmV0Y2hfZml4KHJlc3VsdDJzdHJldGNoLCA4KTsNCi0gICAgICAgICAgICBpbnQgcG9zX3BpeGVsWzhdOw0KLSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fUmVzdWx0SGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IChGWF9MUEJZVEUpcFRyYW5zZm9ybWVkLT5HZXRTY2FubGluZShyb3cpOw0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1Jlc3VsdFdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGludCBzcmNfY29sX2wsIHNyY19yb3dfbCwgcmVzX3gsIHJlc195Ow0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0MnN0cmV0Y2hfZml4LlRyYW5zZm9ybShjb2wsIHJvdywgc3JjX2NvbF9sLCBzcmNfcm93X2wsIHJlc194LCByZXNfeSk7DQotICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbF9sID49IDAgJiYgc3JjX2NvbF9sIDw9IHN0cmV0Y2hfd2lkdGggJiYgc3JjX3Jvd19sID49IDAgJiYgc3JjX3Jvd19sIDw9IHN0cmV0Y2hfaGVpZ2h0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHVfd1s0XSwgdl93WzRdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfY29sX2wgPT0gc3RyZXRjaF93aWR0aCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfY29sX2wtLTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19yb3dfbCA9PSBzdHJldGNoX2hlaWdodCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfcm93X2wtLTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgX2JpY3ViaWNfZ2V0X3Bvc193ZWlnaHQocG9zX3BpeGVsLCB1X3csIHZfdywgc3JjX2NvbF9sLCBzcmNfcm93X2wsIHJlc194LCByZXNfeSwgc3RyZXRjaF93aWR0aCwgc3RyZXRjaF9oZWlnaHQpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBfYmljdWJpY19pbnRlcnBvbChzdHJldGNoX2J1Ziwgc3RyZXRjaF9waXRjaCwgcG9zX3BpeGVsLCB1X3csIHZfdywgcmVzX3gsIHJlc195LCAxLCAwKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgQ1BERl9GaXhlZE1hdHJpeCByZXN1bHQyc3RyZXRjaF9maXgocmVzdWx0MnN0cmV0Y2gsIDgpOw0KLSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fUmVzdWx0SGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IChGWF9MUEJZVEUpcFRyYW5zZm9ybWVkLT5HZXRTY2FubGluZShyb3cpOw0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1Jlc3VsdFdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGludCBzcmNfY29sLCBzcmNfcm93Ow0KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0MnN0cmV0Y2hfZml4LlRyYW5zZm9ybShjb2wsIHJvdywgc3JjX2NvbCwgc3JjX3Jvdyk7DQotICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbCA+PSAwICYmIHNyY19jb2wgPD0gc3RyZXRjaF93aWR0aCAmJiBzcmNfcm93ID49IDAgJiYgc3JjX3JvdyA8PSBzdHJldGNoX2hlaWdodCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfY29sID09IHN0cmV0Y2hfd2lkdGgpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2NvbCAtLTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19yb3cgPT0gc3RyZXRjaF9oZWlnaHQpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3JvdyAtLTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfcGl4ZWwgPSBzdHJldGNoX2J1ZiArIHN0cmV0Y2hfcGl0Y2ggKiBzcmNfcm93ICsgc3JjX2NvbDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gKnNyY19waXhlbDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArKzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGludCBCcHAgPSBtX1N0b3Jlci5HZXRCaXRtYXAoKS0+R2V0QlBQKCkgLyA4Ow0KLSAgICAgICAgaW50IGRlc3RCcHAgPSBwVHJhbnNmb3JtZWQtPkdldEJQUCgpIC8gODsNCi0gICAgICAgIGlmIChCcHAgPT0gMSkgew0KLSAgICAgICAgICAgIEZYX0JPT0wgYkhhc0FscGhhID0gbV9TdG9yZXIuR2V0Qml0bWFwKCktPkhhc0FscGhhKCk7DQotICAgICAgICAgICAgRlhfRFdPUkQgYXJnYlsyNTZdOw0KLSAgICAgICAgICAgIEZYX0FSR0IqIHBQYWwgPSBtX1N0b3Jlci5HZXRCaXRtYXAoKS0+R2V0UGFsZXR0ZSgpOw0KLSAgICAgICAgICAgIGlmIChwUGFsKSB7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBhcmdiW2ldID0gcFBhbFtpXTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGlmIChtX1N0b3Jlci5HZXRCaXRtYXAoKS0+SXNDbXlrSW1hZ2UoKSkNCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgYXJnYltpXSA9IDI1NSAtIGk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGVsc2UNCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgYXJnYltpXSA9IDB4ZmYwMDAwMDAgfCAoaSAqIDB4MDEwMTAxKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKCEobV9GbGFncyAmIEZYRElCX0RPV05TQU1QTEUpICYmICEobV9GbGFncyAmIEZYRElCX0JJQ1VCSUNfSU5URVJQT0wpKSB7DQotICAgICAgICAgICAgICAgIENGWF9CaWxpbmVhck1hdHJpeCByZXN1bHQyc3RyZXRjaF9maXgocmVzdWx0MnN0cmV0Y2gsIDgpOw0KLSAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBtX1Jlc3VsdEhlaWdodDsgcm93ICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBGWF9CWVRFKiBkZXN0X3BvcyA9IChGWF9CWVRFKilwVHJhbnNmb3JtZWQtPkdldFNjYW5saW5lKHJvdyk7DQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1Jlc3VsdFdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2NvbF9sLCBzcmNfcm93X2wsIHJlc194LCByZXNfeTsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQyc3RyZXRjaF9maXguVHJhbnNmb3JtKGNvbCwgcm93LCBzcmNfY29sX2wsIHNyY19yb3dfbCwgcmVzX3gsIHJlc195KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbF9sID49IDAgJiYgc3JjX2NvbF9sIDw9IHN0cmV0Y2hfd2lkdGggJiYgc3JjX3Jvd19sID49IDAgJiYgc3JjX3Jvd19sIDw9IHN0cmV0Y2hfaGVpZ2h0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfY29sX2wgPT0gc3RyZXRjaF93aWR0aCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2NvbF9sLS07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19yb3dfbCA9PSBzdHJldGNoX2hlaWdodCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3Jvd19sLS07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19jb2xfciA9IHNyY19jb2xfbCArIDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfcm93X3IgPSBzcmNfcm93X2wgKyAxOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbF9yID09IHN0cmV0Y2hfd2lkdGgpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19jb2xfci0tOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfcm93X3IgPT0gc3RyZXRjaF9oZWlnaHQpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19yb3dfci0tOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByb3dfb2Zmc2V0X2wgPSBzcmNfcm93X2wgKiBzdHJldGNoX3BpdGNoOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcm93X29mZnNldF9yID0gc3JjX3Jvd19yICogc3RyZXRjaF9waXRjaDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgcl9iZ3JhX2NteWsgPSBhcmdiW19iaWxpbmVhcl9pbnRlcnBvbChzdHJldGNoX2J1Ziwgcm93X29mZnNldF9sLCByb3dfb2Zmc2V0X3IsIHNyY19jb2xfbCwgc3JjX2NvbF9yLCByZXNfeCwgcmVzX3ksIDEsIDApXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUYgPT0gRlhESUJfUmdiYSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3NbMF0gPSAoRlhfQllURSkocl9iZ3JhX2NteWsgPj4gMjQpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3NbMV0gPSAoRlhfQllURSkocl9iZ3JhX2NteWsgPj4gMTYpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3NbMl0gPSAoRlhfQllURSkocl9iZ3JhX2NteWsgPj4gOCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKEZYX0RXT1JEKilkZXN0X3BvcyA9IHJfYmdyYV9jbXlrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zICs9IGRlc3RCcHA7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fRmxhZ3MgJiBGWERJQl9CSUNVQklDX0lOVEVSUE9MKSB7DQotICAgICAgICAgICAgICAgIENGWF9CaWxpbmVhck1hdHJpeCByZXN1bHQyc3RyZXRjaF9maXgocmVzdWx0MnN0cmV0Y2gsIDgpOw0KLSAgICAgICAgICAgICAgICBpbnQgcG9zX3BpeGVsWzhdOw0KLSAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBtX1Jlc3VsdEhlaWdodDsgcm93ICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBGWF9CWVRFKiBkZXN0X3BvcyA9IChGWF9CWVRFKilwVHJhbnNmb3JtZWQtPkdldFNjYW5saW5lKHJvdyk7DQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1Jlc3VsdFdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2NvbF9sLCBzcmNfcm93X2wsIHJlc194LCByZXNfeTsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQyc3RyZXRjaF9maXguVHJhbnNmb3JtKGNvbCwgcm93LCBzcmNfY29sX2wsIHNyY19yb3dfbCwgcmVzX3gsIHJlc195KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbF9sID49IDAgJiYgc3JjX2NvbF9sIDw9IHN0cmV0Y2hfd2lkdGggJiYgc3JjX3Jvd19sID49IDAgJiYgc3JjX3Jvd19sIDw9IHN0cmV0Y2hfaGVpZ2h0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB1X3dbNF0sIHZfd1s0XTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19jb2xfbCA9PSBzdHJldGNoX3dpZHRoKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfY29sX2wtLTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX3Jvd19sID09IHN0cmV0Y2hfaGVpZ2h0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfcm93X2wtLTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYmljdWJpY19nZXRfcG9zX3dlaWdodChwb3NfcGl4ZWwsIHVfdywgdl93LCBzcmNfY29sX2wsIHNyY19yb3dfbCwgcmVzX3gsIHJlc195LCBzdHJldGNoX3dpZHRoLCBzdHJldGNoX2hlaWdodCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIHJfYmdyYV9jbXlrID0gYXJnYltfYmljdWJpY19pbnRlcnBvbChzdHJldGNoX2J1Ziwgc3RyZXRjaF9waXRjaCwgcG9zX3BpeGVsLCB1X3csIHZfdywgcmVzX3gsIHJlc195LCAxLCAwKV07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1GID09IEZYRElCX1JnYmEpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zWzBdID0gKEZYX0JZVEUpKHJfYmdyYV9jbXlrID4+IDI0KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zWzFdID0gKEZYX0JZVEUpKHJfYmdyYV9jbXlrID4+IDE2KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zWzJdID0gKEZYX0JZVEUpKHJfYmdyYV9jbXlrID4+IDgpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihGWF9EV09SRCopZGVzdF9wb3MgPSByX2JncmFfY215azsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3BvcyArPSBkZXN0QnBwOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgQ1BERl9GaXhlZE1hdHJpeCByZXN1bHQyc3RyZXRjaF9maXgocmVzdWx0MnN0cmV0Y2gsIDgpOw0KLSAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBtX1Jlc3VsdEhlaWdodDsgcm93ICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBGWF9CWVRFKiBkZXN0X3BvcyA9IChGWF9CWVRFKilwVHJhbnNmb3JtZWQtPkdldFNjYW5saW5lKHJvdyk7DQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1Jlc3VsdFdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2NvbCwgc3JjX3JvdzsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQyc3RyZXRjaF9maXguVHJhbnNmb3JtKGNvbCwgcm93LCBzcmNfY29sLCBzcmNfcm93KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbCA+PSAwICYmIHNyY19jb2wgPD0gc3RyZXRjaF93aWR0aCAmJiBzcmNfcm93ID49IDAgJiYgc3JjX3JvdyA8PSBzdHJldGNoX2hlaWdodCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbCA9PSBzdHJldGNoX3dpZHRoKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfY29sIC0tOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfcm93ID09IHN0cmV0Y2hfaGVpZ2h0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfcm93IC0tOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIHJfYmdyYV9jbXlrID0gYXJnYltzdHJldGNoX2J1ZltzcmNfcm93ICogc3RyZXRjaF9waXRjaCArIHNyY19jb2xdXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUYgPT0gRlhESUJfUmdiYSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3NbMF0gPSAoRlhfQllURSkocl9iZ3JhX2NteWsgPj4gMjQpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3NbMV0gPSAoRlhfQllURSkocl9iZ3JhX2NteWsgPj4gMTYpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3NbMl0gPSAoRlhfQllURSkocl9iZ3JhX2NteWsgPj4gOCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKEZYX0RXT1JEKilkZXN0X3BvcyA9IHJfYmdyYV9jbXlrOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zICs9IGRlc3RCcHA7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIEZYX0JPT0wgYkhhc0FscGhhID0gbV9TdG9yZXIuR2V0Qml0bWFwKCktPkhhc0FscGhhKCk7DQotICAgICAgICAgICAgaW50IGRlc3RCcHAgPSBwVHJhbnNmb3JtZWQtPkdldEJQUCgpIC8gODsNCi0gICAgICAgICAgICBpZiAoIShtX0ZsYWdzICYgRlhESUJfRE9XTlNBTVBMRSkgJiYgIShtX0ZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCkpIHsNCi0gICAgICAgICAgICAgICAgQ0ZYX0JpbGluZWFyTWF0cml4IHJlc3VsdDJzdHJldGNoX2ZpeChyZXN1bHQyc3RyZXRjaCwgOCk7DQotICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fUmVzdWx0SGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0JZVEUqIGRlc3RfcG9zID0gKEZYX0JZVEUqKXBUcmFuc2Zvcm1lZC0+R2V0U2NhbmxpbmUocm93KTsNCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fUmVzdWx0V2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfY29sX2wsIHNyY19yb3dfbCwgcmVzX3gsIHJlc195LCByX3Bvc19rX3IgPSAwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDJzdHJldGNoX2ZpeC5UcmFuc2Zvcm0oY29sLCByb3csIHNyY19jb2xfbCwgc3JjX3Jvd19sLCByZXNfeCwgcmVzX3kpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfY29sX2wgPj0gMCAmJiBzcmNfY29sX2wgPD0gc3RyZXRjaF93aWR0aCAmJiBzcmNfcm93X2wgPj0gMCAmJiBzcmNfcm93X2wgPD0gc3RyZXRjaF9oZWlnaHQpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19jb2xfbCA9PSBzdHJldGNoX3dpZHRoKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfY29sX2wtLTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX3Jvd19sID09IHN0cmV0Y2hfaGVpZ2h0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfcm93X2wtLTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2NvbF9yID0gc3JjX2NvbF9sICsgMTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19yb3dfciA9IHNyY19yb3dfbCArIDE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfY29sX3IgPT0gc3RyZXRjaF93aWR0aCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2NvbF9yLS07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19yb3dfciA9PSBzdHJldGNoX2hlaWdodCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3Jvd19yLS07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJvd19vZmZzZXRfbCA9IHNyY19yb3dfbCAqIHN0cmV0Y2hfcGl0Y2g7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByb3dfb2Zmc2V0X3IgPSBzcmNfcm93X3IgKiBzdHJldGNoX3BpdGNoOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHJfcG9zX3JlZF95X3IgICA9IF9iaWxpbmVhcl9pbnRlcnBvbChzdHJldGNoX2J1Ziwgcm93X29mZnNldF9sLCByb3dfb2Zmc2V0X3IsIHNyY19jb2xfbCwgc3JjX2NvbF9yLCByZXNfeCwgcmVzX3ksIEJwcCwgMik7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgcl9wb3NfZ3JlZW5fbV9yID0gX2JpbGluZWFyX2ludGVycG9sKHN0cmV0Y2hfYnVmLCByb3dfb2Zmc2V0X2wsIHJvd19vZmZzZXRfciwgc3JjX2NvbF9sLCBzcmNfY29sX3IsIHJlc194LCByZXNfeSwgQnBwLCAxKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSByX3Bvc19ibHVlX2NfciAgPSBfYmlsaW5lYXJfaW50ZXJwb2woc3RyZXRjaF9idWYsIHJvd19vZmZzZXRfbCwgcm93X29mZnNldF9yLCBzcmNfY29sX2wsIHNyY19jb2xfciwgcmVzX3gsIHJlc195LCBCcHAsIDApOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYkhhc0FscGhhKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtRiAhPSBGWERJQl9BcmdiKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUYgPT0gRlhESUJfUmdiYSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3Bvc1swXSA9IHJfcG9zX2JsdWVfY19yOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3Bvc1sxXSA9IHJfcG9zX2dyZWVuX21fcjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3NbMl0gPSByX3Bvc19yZWRfeV9yOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJfcG9zX2tfciA9IF9iaWxpbmVhcl9pbnRlcnBvbChzdHJldGNoX2J1Ziwgcm93X29mZnNldF9sLCByb3dfb2Zmc2V0X3IsIHNyY19jb2xfbCwgc3JjX2NvbF9yLCByZXNfeCwgcmVzX3ksIEJwcCwgMyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooRlhfRFdPUkQqKWRlc3RfcG9zID0gRlhDTVlLX1RPRElCKENteWtFbmNvZGUocl9wb3NfYmx1ZV9jX3IsIHJfcG9zX2dyZWVuX21fciwgcl9wb3NfcmVkX3lfciwgcl9wb3Nfa19yKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHJfcG9zX2FfciA9IF9iaWxpbmVhcl9pbnRlcnBvbChzdHJldGNoX2J1Ziwgcm93X29mZnNldF9sLCByb3dfb2Zmc2V0X3IsIHNyY19jb2xfbCwgc3JjX2NvbF9yLCByZXNfeCwgcmVzX3ksIEJwcCwgMyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihGWF9EV09SRCopZGVzdF9wb3MgPSBGWEFSR0JfVE9ESUIoRlhBUkdCX01BS0Uocl9wb3NfYV9yLCByX3Bvc19yZWRfeV9yLCByX3Bvc19ncmVlbl9tX3IsIHJfcG9zX2JsdWVfY19yKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByX3Bvc19rX3IgPSAweGZmOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUYgPT0gRlhESUJfQ215a2EpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByX3Bvc19rX3IgPSBfYmlsaW5lYXJfaW50ZXJwb2woc3RyZXRjaF9idWYsIHJvd19vZmZzZXRfbCwgcm93X29mZnNldF9yLCBzcmNfY29sX2wsIHNyY19jb2xfciwgcmVzX3gsIHJlc195LCBCcHAsIDMpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooRlhfRFdPUkQqKWRlc3RfcG9zID0gRlhDTVlLX1RPRElCKENteWtFbmNvZGUocl9wb3NfYmx1ZV9jX3IsIHJfcG9zX2dyZWVuX21fciwgcl9wb3NfcmVkX3lfciwgcl9wb3Nfa19yKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooRlhfRFdPUkQqKWRlc3RfcG9zID0gRlhBUkdCX1RPRElCKEZYQVJHQl9NQUtFKHJfcG9zX2tfciwgcl9wb3NfcmVkX3lfciwgcl9wb3NfZ3JlZW5fbV9yLCByX3Bvc19ibHVlX2NfcikpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zICs9IGRlc3RCcHA7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2UgaWYgKG1fRmxhZ3MgJiBGWERJQl9CSUNVQklDX0lOVEVSUE9MKSB7DQotICAgICAgICAgICAgICAgIENGWF9CaWxpbmVhck1hdHJpeCByZXN1bHQyc3RyZXRjaF9maXgocmVzdWx0MnN0cmV0Y2gsIDgpOw0KLSAgICAgICAgICAgICAgICBpbnQgcG9zX3BpeGVsWzhdOw0KLSAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBtX1Jlc3VsdEhlaWdodDsgcm93ICsrKSB7DQotICAgICAgICAgICAgICAgICAgICBGWF9CWVRFKiBkZXN0X3BvcyA9IChGWF9CWVRFKilwVHJhbnNmb3JtZWQtPkdldFNjYW5saW5lKHJvdyk7DQotICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1Jlc3VsdFdpZHRoOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2NvbF9sLCBzcmNfcm93X2wsIHJlc194LCByZXNfeSwgcl9wb3Nfa19yID0gMDsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQyc3RyZXRjaF9maXguVHJhbnNmb3JtKGNvbCwgcm93LCBzcmNfY29sX2wsIHNyY19yb3dfbCwgcmVzX3gsIHJlc195KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbF9sID49IDAgJiYgc3JjX2NvbF9sIDw9IHN0cmV0Y2hfd2lkdGggJiYgc3JjX3Jvd19sID49IDAgJiYgc3JjX3Jvd19sIDw9IHN0cmV0Y2hfaGVpZ2h0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB1X3dbNF0sIHZfd1s0XTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19jb2xfbCA9PSBzdHJldGNoX3dpZHRoKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfY29sX2wtLTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX3Jvd19sID09IHN0cmV0Y2hfaGVpZ2h0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfcm93X2wtLTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYmljdWJpY19nZXRfcG9zX3dlaWdodChwb3NfcGl4ZWwsIHVfdywgdl93LCBzcmNfY29sX2wsIHNyY19yb3dfbCwgcmVzX3gsIHJlc195LCBzdHJldGNoX3dpZHRoLCBzdHJldGNoX2hlaWdodCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgcl9wb3NfcmVkX3lfciAgID0gX2JpY3ViaWNfaW50ZXJwb2woc3RyZXRjaF9idWYsIHN0cmV0Y2hfcGl0Y2gsIHBvc19waXhlbCwgdV93LCB2X3csIHJlc194LCByZXNfeSwgQnBwLCAyKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSByX3Bvc19ncmVlbl9tX3IgPSBfYmljdWJpY19pbnRlcnBvbChzdHJldGNoX2J1Ziwgc3RyZXRjaF9waXRjaCwgcG9zX3BpeGVsLCB1X3csIHZfdywgcmVzX3gsIHJlc195LCBCcHAsIDEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHJfcG9zX2JsdWVfY19yICA9IF9iaWN1YmljX2ludGVycG9sKHN0cmV0Y2hfYnVmLCBzdHJldGNoX3BpdGNoLCBwb3NfcGl4ZWwsIHVfdywgdl93LCByZXNfeCwgcmVzX3ksIEJwcCwgMCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiSGFzQWxwaGEpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1GICE9IEZYRElCX0FyZ2IpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtRiA9PSBGWERJQl9SZ2JhKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zWzBdID0gcl9wb3NfYmx1ZV9jX3I7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zWzFdID0gcl9wb3NfZ3JlZW5fbV9yOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3Bvc1syXSA9IHJfcG9zX3JlZF95X3I7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcl9wb3Nfa19yID0gX2JpY3ViaWNfaW50ZXJwb2woc3RyZXRjaF9idWYsIHN0cmV0Y2hfcGl0Y2gsIHBvc19waXhlbCwgdV93LCB2X3csIHJlc194LCByZXNfeSwgQnBwLCAzKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihGWF9EV09SRCopZGVzdF9wb3MgPSBGWENNWUtfVE9ESUIoQ215a0VuY29kZShyX3Bvc19ibHVlX2Nfciwgcl9wb3NfZ3JlZW5fbV9yLCByX3Bvc19yZWRfeV9yLCByX3Bvc19rX3IpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgcl9wb3NfYV9yID0gX2JpY3ViaWNfaW50ZXJwb2woc3RyZXRjaF9idWYsIHN0cmV0Y2hfcGl0Y2gsIHBvc19waXhlbCwgdV93LCB2X3csIHJlc194LCByZXNfeSwgQnBwLCAzKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKEZYX0RXT1JEKilkZXN0X3BvcyA9IEZYQVJHQl9UT0RJQihGWEFSR0JfTUFLRShyX3Bvc19hX3IsIHJfcG9zX3JlZF95X3IsIHJfcG9zX2dyZWVuX21fciwgcl9wb3NfYmx1ZV9jX3IpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJfcG9zX2tfciA9IDB4ZmY7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtRiA9PSBGWERJQl9DbXlrYSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJfcG9zX2tfciA9IF9iaWN1YmljX2ludGVycG9sKHN0cmV0Y2hfYnVmLCBzdHJldGNoX3BpdGNoLCBwb3NfcGl4ZWwsIHVfdywgdl93LCByZXNfeCwgcmVzX3ksIEJwcCwgMyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihGWF9EV09SRCopZGVzdF9wb3MgPSBGWENNWUtfVE9ESUIoQ215a0VuY29kZShyX3Bvc19ibHVlX2Nfciwgcl9wb3NfZ3JlZW5fbV9yLCByX3Bvc19yZWRfeV9yLCByX3Bvc19rX3IpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihGWF9EV09SRCopZGVzdF9wb3MgPSBGWEFSR0JfVE9ESUIoRlhBUkdCX01BS0Uocl9wb3Nfa19yLCByX3Bvc19yZWRfeV9yLCByX3Bvc19ncmVlbl9tX3IsIHJfcG9zX2JsdWVfY19yKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3MgKz0gZGVzdEJwcDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIENQREZfRml4ZWRNYXRyaXggcmVzdWx0MnN0cmV0Y2hfZml4KHJlc3VsdDJzdHJldGNoLCA4KTsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9SZXN1bHRIZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgICAgICAgICAgRlhfQllURSogZGVzdF9wb3MgPSAoRlhfQllURSopcFRyYW5zZm9ybWVkLT5HZXRTY2FubGluZShyb3cpOw0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbV9SZXN1bHRXaWR0aDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19jb2wsIHNyY19yb3c7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0MnN0cmV0Y2hfZml4LlRyYW5zZm9ybShjb2wsIHJvdywgc3JjX2NvbCwgc3JjX3Jvdyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19jb2wgPj0gMCAmJiBzcmNfY29sIDw9IHN0cmV0Y2hfd2lkdGggJiYgc3JjX3JvdyA+PSAwICYmIHNyY19yb3cgPD0gc3RyZXRjaF9oZWlnaHQpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19jb2wgPT0gc3RyZXRjaF93aWR0aCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2NvbCAtLTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX3JvdyA9PSBzdHJldGNoX2hlaWdodCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3JvdyAtLTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19wb3MgPSBzdHJldGNoX2J1ZiArIHNyY19yb3cgKiBzdHJldGNoX3BpdGNoICsgc3JjX2NvbCAqIEJwcDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJIYXNBbHBoYSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUYgIT0gRlhESUJfQXJnYikgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1GID09IEZYRElCX1JnYmEpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3NbMF0gPSBzcmNfcG9zWzBdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3Bvc1sxXSA9IHNyY19wb3NbMV07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zWzJdID0gc3JjX3Bvc1syXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKEZYX0RXT1JEKilkZXN0X3BvcyA9IEZYQ01ZS19UT0RJQihDbXlrRW5jb2RlKHNyY19wb3NbMF0sIHNyY19wb3NbMV0sIHNyY19wb3NbMl0sIHNyY19wb3NbM10pKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooRlhfRFdPUkQqKWRlc3RfcG9zID0gRlhBUkdCX1RPRElCKEZYQVJHQl9NQUtFKHNyY19wb3NbM10sIHNyY19wb3NbMl0sIHNyY19wb3NbMV0sIHNyY19wb3NbMF0pKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1GID09IEZYRElCX0NteWthKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihGWF9EV09SRCopZGVzdF9wb3MgPSBGWENNWUtfVE9ESUIoQ215a0VuY29kZShzcmNfcG9zWzBdLCBzcmNfcG9zWzFdLCBzcmNfcG9zWzJdLCBzcmNfcG9zWzNdKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooRlhfRFdPUkQqKWRlc3RfcG9zID0gRlhBUkdCX1RPRElCKEZYQVJHQl9NQUtFKDB4ZmYsIHNyY19wb3NbMl0sIHNyY19wb3NbMV0sIHNyY19wb3NbMF0pKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3BvcyArPSBkZXN0QnBwOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fU3RvcmVyLlJlcGxhY2UocFRyYW5zZm9ybWVkKTsNCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2RpYi5oIgorI2luY2x1ZGUgImRpYl9pbnQuaCIKK2ludCBTRFBfVGFibGVbNTEzXSA9IHsKKyAgICAyNTYsIDI1NiwgMjU2LCAyNTYsIDI1NiwgMjU2LCAyNTYsIDI1NiwgMjU2LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTQsIDI1NCwgMjU0LCAyNTQsCisgICAgMjUzLCAyNTMsIDI1MywgMjUyLCAyNTIsIDI1MiwgMjUxLCAyNTEsIDI1MSwgMjUwLCAyNTAsIDI0OSwgMjQ5LCAyNDksIDI0OCwgMjQ4LCAyNDcsIDI0NywgMjQ2LAorICAgIDI0NiwgMjQ1LCAyNDQsIDI0NCwgMjQzLCAyNDMsIDI0MiwgMjQyLCAyNDEsIDI0MCwgMjQwLCAyMzksIDIzOCwgMjM4LCAyMzcsIDIzNiwgMjM2LCAyMzUsIDIzNCwKKyAgICAyMzMsIDIzMywgMjMyLCAyMzEsIDIzMCwgMjMwLCAyMjksIDIyOCwgMjI3LCAyMjYsIDIyNiwgMjI1LCAyMjQsIDIyMywgMjIyLCAyMjEsIDIyMCwgMjE5LCAyMTgsCisgICAgMjE4LCAyMTcsIDIxNiwgMjE1LCAyMTQsIDIxMywgMjEyLCAyMTEsIDIxMCwgMjA5LCAyMDgsIDIwNywgMjA2LCAyMDUsIDIwNCwgMjAzLCAyMDIsIDIwMSwgMjAwLAorICAgIDE5OSwgMTk4LCAxOTYsIDE5NSwgMTk0LCAxOTMsIDE5MiwgMTkxLCAxOTAsIDE4OSwgMTg4LCAxODYsIDE4NSwgMTg0LCAxODMsIDE4MiwgMTgxLCAxNzksIDE3OCwKKyAgICAxNzcsIDE3NiwgMTc1LCAxNzMsIDE3MiwgMTcxLCAxNzAsIDE2OSwgMTY3LCAxNjYsIDE2NSwgMTY0LCAxNjIsIDE2MSwgMTYwLCAxNTksIDE1NywgMTU2LCAxNTUsCisgICAgMTU0LCAxNTIsIDE1MSwgMTUwLCAxNDksIDE0NywgMTQ2LCAxNDUsIDE0MywgMTQyLCAxNDEsIDE0MCwgMTM4LCAxMzcsIDEzNiwgMTM0LCAxMzMsIDEzMiwgMTMwLAorICAgIDEyOSwgMTI4LCAxMjYsIDEyNSwgMTI0LCAxMjIsIDEyMSwgMTIwLCAxMTksIDExNywgMTE2LCAxMTUsIDExMywgMTEyLCAxMTEsIDEwOSwgMTA4LCAxMDcsIDEwNSwKKyAgICAxMDQsIDEwMywgMTAxLCAxMDAsIDk5LCA5NywgOTYsIDk1LCA5MywgOTIsIDkxLCA4OSwgODgsIDg3LCA4NSwgODQsIDgzLCA4MSwgODAsIDc5LCA3NywgNzYsIDc1LAorICAgIDczLCA3MiwgNzEsIDY5LCA2OCwgNjcsIDY2LCA2NCwgNjMsIDYyLCA2MCwgNTksIDU4LCA1NywgNTUsIDU0LCA1MywgNTIsIDUwLCA0OSwgNDgsIDQ3LCA0NSwgNDQsCisgICAgNDMsIDQyLCA0MCwgMzksIDM4LCAzNywgMzYsIDM0LCAzMywgMzIsIDMxLCAzMCwgMjgsIDI3LCAyNiwgMjUsIDI0LCAyMywgMjEsIDIwLCAxOSwgMTgsIDE3LCAxNiwKKyAgICAxNSwgMTQsIDEzLCAxMSwgMTAsIDksIDgsIDcsIDYsIDUsIDQsIDMsIDIsIDEsIDAsIDAsIC0xLCAtMiwgLTMsIC00LCAtNSwgLTYsIC03LCAtNywgLTgsIC05LCAtMTAsCisgICAgLTExLCAtMTIsIC0xMiwgLTEzLCAtMTQsIC0xNSwgLTE1LCAtMTYsIC0xNywgLTE3LCAtMTgsIC0xOSwgLTE5LCAtMjAsIC0yMSwgLTIxLCAtMjIsIC0yMiwgLTIzLCAtMjQsCisgICAgLTI0LCAtMjUsIC0yNSwgLTI2LCAtMjYsIC0yNywgLTI3LCAtMjcsIC0yOCwgLTI4LCAtMjksIC0yOSwgLTMwLCAtMzAsIC0zMCwgLTMxLCAtMzEsIC0zMSwgLTMyLCAtMzIsCisgICAgLTMyLCAtMzMsIC0zMywgLTMzLCAtMzMsIC0zNCwgLTM0LCAtMzQsIC0zNCwgLTM1LCAtMzUsIC0zNSwgLTM1LCAtMzUsIC0zNiwgLTM2LCAtMzYsIC0zNiwgLTM2LCAtMzYsCisgICAgLTM2LCAtMzYsIC0zNiwgLTM3LCAtMzcsIC0zNywgLTM3LCAtMzcsIC0zNywgLTM3LCAtMzcsIC0zNywgLTM3LCAtMzcsIC0zNywgLTM3LCAtMzcsIC0zNywgLTM3LCAtMzcsCisgICAgLTM3LCAtMzcsIC0zNywgLTM3LCAtMzYsIC0zNiwgLTM2LCAtMzYsIC0zNiwgLTM2LCAtMzYsIC0zNiwgLTM2LCAtMzUsIC0zNSwgLTM1LCAtMzUsIC0zNSwgLTM1LCAtMzQsCisgICAgLTM0LCAtMzQsIC0zNCwgLTM0LCAtMzMsIC0zMywgLTMzLCAtMzMsIC0zMywgLTMyLCAtMzIsIC0zMiwgLTMyLCAtMzEsIC0zMSwgLTMxLCAtMzEsIC0zMCwgLTMwLCAtMzAsCisgICAgLTMwLCAtMjksIC0yOSwgLTI5LCAtMjksIC0yOCwgLTI4LCAtMjgsIC0yNywgLTI3LCAtMjcsIC0yNywgLTI2LCAtMjYsIC0yNiwgLTI1LCAtMjUsIC0yNSwgLTI0LCAtMjQsCisgICAgLTI0LCAtMjMsIC0yMywgLTIzLCAtMjIsIC0yMiwgLTIyLCAtMjIsIC0yMSwgLTIxLCAtMjEsIC0yMCwgLTIwLCAtMjAsIC0xOSwgLTE5LCAtMTksIC0xOCwgLTE4LCAtMTgsCisgICAgLTE3LCAtMTcsIC0xNywgLTE2LCAtMTYsIC0xNiwgLTE1LCAtMTUsIC0xNSwgLTE0LCAtMTQsIC0xNCwgLTEzLCAtMTMsIC0xMywgLTEyLCAtMTIsIC0xMiwgLTExLCAtMTEsCisgICAgLTExLCAtMTAsIC0xMCwgLTEwLCAtOSwgLTksIC05LCAtOSwgLTgsIC04LCAtOCwgLTcsIC03LCAtNywgLTcsIC02LCAtNiwgLTYsIC02LCAtNSwgLTUsIC01LCAtNSwgLTQsCisgICAgLTQsIC00LCAtNCwgLTMsIC0zLCAtMywgLTMsIC0zLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKK307CitjbGFzcyBDRlhfQmlsaW5lYXJNYXRyaXggOiBwdWJsaWMgQ1BERl9GaXhlZE1hdHJpeAoreworcHVibGljOgorICAgIENGWF9CaWxpbmVhck1hdHJpeChjb25zdCBDRlhfQWZmaW5lTWF0cml4JiBzcmMsIGludCBiaXRzKTogQ1BERl9GaXhlZE1hdHJpeChzcmMsIGJpdHMpCisgICAge30KKyAgICBpbmxpbmUgdm9pZAlUcmFuc2Zvcm0oaW50IHgsIGludCB5LCBpbnQmIHgxLCBpbnQmIHkxLCBpbnQmcmVzX3gsIGludCZyZXNfeSkKKyAgICB7CisgICAgICAgIHgxID0gYSAqIHggKyBjICogeSArIGUgKyBiYXNlIC8gMjsKKyAgICAgICAgeTEgPSBiICogeCArIGQgKiB5ICsgZiArIGJhc2UgLyAyOworICAgICAgICByZXNfeCA9IHgxICUgYmFzZTsKKyAgICAgICAgcmVzX3kgPSB5MSAlIGJhc2U7CisgICAgICAgIGlmIChyZXNfeCA8IDAgJiYgcmVzX3ggPiAtYmFzZSkgeworICAgICAgICAgICAgcmVzX3ggPSBiYXNlICsgcmVzX3g7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc195IDwgMCAmJiByZXNfeCA+IC1iYXNlKSB7CisgICAgICAgICAgICByZXNfeSA9IGJhc2UgKyByZXNfeTsKKyAgICAgICAgfQorICAgICAgICB4MSAvPSBiYXNlOworICAgICAgICB5MSAvPSBiYXNlOworICAgIH0KK307CitDRlhfRElCaXRtYXAqIENGWF9ESUJTb3VyY2U6OlN3YXBYWShGWF9CT09MIGJYRmxpcCwgRlhfQk9PTCBiWUZsaXAsIGNvbnN0IEZYX1JFQ1QqIHBEZXN0Q2xpcCkgY29uc3QKK3sKKyAgICBGWF9SRUNUIGRlc3RfY2xpcCgwLCAwLCBtX0hlaWdodCwgbV9XaWR0aCk7CisgICAgaWYgKHBEZXN0Q2xpcCkgeworICAgICAgICBkZXN0X2NsaXAuSW50ZXJzZWN0KCpwRGVzdENsaXApOworICAgIH0KKyAgICBpZiAoZGVzdF9jbGlwLklzRW1wdHkoKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0ZYX0RJQml0bWFwKiBwVHJhbnNCaXRtYXAgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOworICAgIGlmICghcFRyYW5zQml0bWFwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpbnQgcmVzdWx0X2hlaWdodCA9IGRlc3RfY2xpcC5IZWlnaHQoKSwgcmVzdWx0X3dpZHRoID0gZGVzdF9jbGlwLldpZHRoKCk7CisgICAgaWYgKCFwVHJhbnNCaXRtYXAtPkNyZWF0ZShyZXN1bHRfd2lkdGgsIHJlc3VsdF9oZWlnaHQsIEdldEZvcm1hdCgpKSkgeworICAgICAgICBkZWxldGUgcFRyYW5zQml0bWFwOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcFRyYW5zQml0bWFwLT5Db3B5UGFsZXR0ZShtX3BQYWxldHRlKTsKKyAgICBpbnQgc3JjX3BpdGNoID0gbV9QaXRjaDsKKyAgICBpbnQgZGVzdF9waXRjaCA9IHBUcmFuc0JpdG1hcC0+R2V0UGl0Y2goKTsKKyAgICBGWF9MUEJZVEUgZGVzdF9idWYgPSBwVHJhbnNCaXRtYXAtPkdldEJ1ZmZlcigpOworICAgIGludCByb3dfc3RhcnQgPSBiWEZsaXAgPyBtX0hlaWdodCAtIGRlc3RfY2xpcC5yaWdodCA6IGRlc3RfY2xpcC5sZWZ0OworICAgIGludCByb3dfZW5kID0gYlhGbGlwID8gbV9IZWlnaHQgLSBkZXN0X2NsaXAubGVmdCA6IGRlc3RfY2xpcC5yaWdodDsKKyAgICBpbnQgY29sX3N0YXJ0ID0gYllGbGlwID8gbV9XaWR0aCAtIGRlc3RfY2xpcC5ib3R0b20gOiBkZXN0X2NsaXAudG9wOworICAgIGludCBjb2xfZW5kID0gYllGbGlwID8gbV9XaWR0aCAtIGRlc3RfY2xpcC50b3AgOiBkZXN0X2NsaXAuYm90dG9tOworICAgIGlmIChHZXRCUFAoKSA9PSAxKSB7CisgICAgICAgIEZYU1lTX21lbXNldDgoZGVzdF9idWYsIDB4ZmYsIGRlc3RfcGl0Y2ggKiByZXN1bHRfaGVpZ2h0KTsKKyAgICAgICAgZm9yIChpbnQgcm93ID0gcm93X3N0YXJ0OyByb3cgPCByb3dfZW5kOyByb3cgKyspIHsKKyAgICAgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBHZXRTY2FubGluZShyb3cpOworICAgICAgICAgICAgaW50IGRlc3RfY29sID0gKGJYRmxpcCA/IGRlc3RfY2xpcC5yaWdodCAtIChyb3cgLSByb3dfc3RhcnQpIC0gMSA6IHJvdykgLSBkZXN0X2NsaXAubGVmdDsKKyAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZjsKKyAgICAgICAgICAgIGlmIChiWUZsaXApIHsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gKHJlc3VsdF9oZWlnaHQgLSAxKSAqIGRlc3RfcGl0Y2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgZGVzdF9zdGVwID0gYllGbGlwID8gLWRlc3RfcGl0Y2ggOiBkZXN0X3BpdGNoOworICAgICAgICAgICAgZm9yIChpbnQgY29sID0gY29sX3N0YXJ0OyBjb2wgPCBjb2xfZW5kOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoIShzcmNfc2Nhbltjb2wgLyA4XSAmICgxIDw8ICg3IC0gY29sICUgOCkpKSkgeworICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bZGVzdF9jb2wgLyA4XSAmPSB+KDEgPDwgKDcgLSBkZXN0X2NvbCAlIDgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IGRlc3Rfc3RlcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGludCBuQnl0ZXMgPSBHZXRCUFAoKSAvIDg7CisgICAgICAgIGludCBkZXN0X3N0ZXAgPSBiWUZsaXAgPyAtZGVzdF9waXRjaCA6IGRlc3RfcGl0Y2g7CisgICAgICAgIGlmIChuQnl0ZXMgPT0gMykgeworICAgICAgICAgICAgZGVzdF9zdGVwIC09IDI7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpbnQgcm93ID0gcm93X3N0YXJ0OyByb3cgPCByb3dfZW5kOyByb3cgKyspIHsKKyAgICAgICAgICAgIGludCBkZXN0X2NvbCA9IChiWEZsaXAgPyBkZXN0X2NsaXAucmlnaHQgLSAocm93IC0gcm93X3N0YXJ0KSAtIDEgOiByb3cpIC0gZGVzdF9jbGlwLmxlZnQ7CisgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyBkZXN0X2NvbCAqIG5CeXRlczsKKyAgICAgICAgICAgIGlmIChiWUZsaXApIHsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gKHJlc3VsdF9oZWlnaHQgLSAxKSAqIGRlc3RfcGl0Y2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobkJ5dGVzID09IDQpIHsKKyAgICAgICAgICAgICAgICBGWF9EV09SRCogc3JjX3NjYW4gPSAoRlhfRFdPUkQqKUdldFNjYW5saW5lKHJvdykgKyBjb2xfc3RhcnQ7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gY29sX3N0YXJ0OyBjb2wgPCBjb2xfZW5kOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgKihGWF9EV09SRCopZGVzdF9zY2FuID0gKnNyY19zY2FuKys7CisgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X3N0ZXA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gR2V0U2NhbmxpbmUocm93KSArIGNvbF9zdGFydCAqIG5CeXRlczsKKyAgICAgICAgICAgICAgICBpZiAobkJ5dGVzID09IDEpCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IGNvbF9zdGFydDsgY29sIDwgY29sX2VuZDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gKnNyY19zY2FuKys7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gZGVzdF9zdGVwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSBjb2xfc3RhcnQ7IGNvbCA8IGNvbF9lbmQ7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gKnNyY19zY2FuKys7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSAqc3JjX3NjYW4rKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBkZXN0X3N0ZXA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9wQWxwaGFNYXNrKSB7CisgICAgICAgIHNyY19waXRjaCA9IG1fcEFscGhhTWFzay0+bV9QaXRjaDsKKyAgICAgICAgZGVzdF9waXRjaCA9IHBUcmFuc0JpdG1hcC0+bV9wQWxwaGFNYXNrLT5HZXRQaXRjaCgpOworICAgICAgICBkZXN0X2J1ZiA9IHBUcmFuc0JpdG1hcC0+bV9wQWxwaGFNYXNrLT5HZXRCdWZmZXIoKTsKKyAgICAgICAgaW50IGRlc3Rfc3RlcCA9IGJZRmxpcCA/IC1kZXN0X3BpdGNoIDogZGVzdF9waXRjaDsKKyAgICAgICAgZm9yIChpbnQgcm93ID0gcm93X3N0YXJ0OyByb3cgPCByb3dfZW5kOyByb3cgKyspIHsKKyAgICAgICAgICAgIGludCBkZXN0X2NvbCA9IChiWEZsaXAgPyBkZXN0X2NsaXAucmlnaHQgLSAocm93IC0gcm93X3N0YXJ0KSAtIDEgOiByb3cpIC0gZGVzdF9jbGlwLmxlZnQ7CisgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyBkZXN0X2NvbDsKKyAgICAgICAgICAgIGlmIChiWUZsaXApIHsKKyAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gKHJlc3VsdF9oZWlnaHQgLSAxKSAqIGRlc3RfcGl0Y2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gbV9wQWxwaGFNYXNrLT5HZXRTY2FubGluZShyb3cpICsgY29sX3N0YXJ0OworICAgICAgICAgICAgZm9yIChpbnQgY29sID0gY29sX3N0YXJ0OyBjb2wgPCBjb2xfZW5kOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gKnNyY19zY2FuKys7CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IGRlc3Rfc3RlcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcFRyYW5zQml0bWFwOworfQorI2RlZmluZSBGSVgxNl8wMDUgMC4wNWYKK0ZYX1JFQ1QgX0ZYRElCX1N3YXBDbGlwQm94KEZYX1JFQ1QmIGNsaXAsIGludCB3aWR0aCwgaW50IGhlaWdodCwgRlhfQk9PTCBiRmxpcFgsIEZYX0JPT0wgYkZsaXBZKQoreworICAgIEZYX1JFQ1QgcmVjdDsKKyAgICBpZiAoYkZsaXBZKSB7CisgICAgICAgIHJlY3QubGVmdCA9IGhlaWdodCAtIGNsaXAudG9wOworICAgICAgICByZWN0LnJpZ2h0ID0gaGVpZ2h0IC0gY2xpcC5ib3R0b207CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVjdC5sZWZ0ID0gY2xpcC50b3A7CisgICAgICAgIHJlY3QucmlnaHQgPSBjbGlwLmJvdHRvbTsKKyAgICB9CisgICAgaWYgKGJGbGlwWCkgeworICAgICAgICByZWN0LnRvcCA9IHdpZHRoIC0gY2xpcC5sZWZ0OworICAgICAgICByZWN0LmJvdHRvbSA9IHdpZHRoIC0gY2xpcC5yaWdodDsKKyAgICB9IGVsc2UgeworICAgICAgICByZWN0LnRvcCA9IGNsaXAubGVmdDsKKyAgICAgICAgcmVjdC5ib3R0b20gPSBjbGlwLnJpZ2h0OworICAgIH0KKyAgICByZWN0Lk5vcm1hbGl6ZSgpOworICAgIHJldHVybiByZWN0OworfQorQ0ZYX0RJQml0bWFwKiBDRlhfRElCU291cmNlOjpUcmFuc2Zvcm1Ubyhjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwRGVzdE1hdHJpeCwgaW50JiByZXN1bHRfbGVmdCwgaW50JiByZXN1bHRfdG9wLAorICAgICAgICBGWF9EV09SRCBmbGFncywgY29uc3QgRlhfUkVDVCogcERlc3RDbGlwKSBjb25zdAoreworICAgIENGWF9JbWFnZVRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyOworICAgIHRyYW5zZm9ybWVyLlN0YXJ0KHRoaXMsIHBEZXN0TWF0cml4LCBmbGFncywgcERlc3RDbGlwKTsKKyAgICB0cmFuc2Zvcm1lci5Db250aW51ZShOVUxMKTsKKyAgICByZXN1bHRfbGVmdCA9IHRyYW5zZm9ybWVyLm1fUmVzdWx0TGVmdDsKKyAgICByZXN1bHRfdG9wID0gdHJhbnNmb3JtZXIubV9SZXN1bHRUb3A7CisgICAgQ0ZYX0RJQml0bWFwKiBwVHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1lci5tX1N0b3Jlci5EZXRhY2goKTsKKyAgICByZXR1cm4gcFRyYW5zZm9ybWVkOworfQorQ0ZYX0RJQml0bWFwKiBDRlhfRElCU291cmNlOjpTdHJldGNoVG8oaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgRlhfRFdPUkQgZmxhZ3MsIGNvbnN0IEZYX1JFQ1QqIHBDbGlwKSBjb25zdAoreworICAgIEZYX1JFQ1QgY2xpcF9yZWN0KDAsIDAsIEZYU1lTX2FicyhkZXN0X3dpZHRoKSwgRlhTWVNfYWJzKGRlc3RfaGVpZ2h0KSk7CisgICAgaWYgKHBDbGlwKSB7CisgICAgICAgIGNsaXBfcmVjdC5JbnRlcnNlY3QoKnBDbGlwKTsKKyAgICB9CisgICAgaWYgKGNsaXBfcmVjdC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChkZXN0X3dpZHRoID09IG1fV2lkdGggJiYgZGVzdF9oZWlnaHQgPT0gbV9IZWlnaHQpIHsKKyAgICAgICAgcmV0dXJuIENsb25lKCZjbGlwX3JlY3QpOworICAgIH0KKyAgICBDRlhfSW1hZ2VTdHJldGNoZXIgc3RyZXRjaGVyOworICAgIENGWF9CaXRtYXBTdG9yZXIgc3RvcmVyOworICAgIGlmIChzdHJldGNoZXIuU3RhcnQoJnN0b3JlciwgdGhpcywgZGVzdF93aWR0aCwgZGVzdF9oZWlnaHQsIGNsaXBfcmVjdCwgZmxhZ3MpKSB7CisgICAgICAgIHN0cmV0Y2hlci5Db250aW51ZShOVUxMKTsKKyAgICB9CisgICAgcmV0dXJuIHN0b3Jlci5EZXRhY2goKTsKK30KK0NGWF9JbWFnZVRyYW5zZm9ybWVyOjpDRlhfSW1hZ2VUcmFuc2Zvcm1lcigpCit7CisgICAgbV9TdGF0dXMgPSAwOworICAgIG1fcE1hdHJpeCA9IE5VTEw7Cit9CitDRlhfSW1hZ2VUcmFuc2Zvcm1lcjo6fkNGWF9JbWFnZVRyYW5zZm9ybWVyKCkKK3sKK30KK0ZYX0JPT0wgQ0ZYX0ltYWdlVHJhbnNmb3JtZXI6OlN0YXJ0KGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTcmMsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBEZXN0TWF0cml4LCBpbnQgZmxhZ3MsIGNvbnN0IEZYX1JFQ1QqIHBEZXN0Q2xpcCkKK3sKKyAgICBtX3BNYXRyaXggPSAoQ0ZYX0FmZmluZU1hdHJpeCopcERlc3RNYXRyaXg7CisgICAgQ0ZYX0Zsb2F0UmVjdCB1bml0X3JlY3QgPSBwRGVzdE1hdHJpeC0+R2V0VW5pdFJlY3QoKTsKKyAgICBGWF9SRUNUIHJlc3VsdF9yZWN0ID0gdW5pdF9yZWN0LkdldENsb3Nlc3RSZWN0KCk7CisgICAgRlhfUkVDVCByZXN1bHRfY2xpcCA9IHJlc3VsdF9yZWN0OworICAgIGlmIChwRGVzdENsaXApIHsKKyAgICAgICAgcmVzdWx0X2NsaXAuSW50ZXJzZWN0KCpwRGVzdENsaXApOworICAgIH0KKyAgICBpZiAocmVzdWx0X2NsaXAuSXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9SZXN1bHRMZWZ0ID0gcmVzdWx0X2NsaXAubGVmdDsKKyAgICBtX1Jlc3VsdFRvcCA9IHJlc3VsdF9jbGlwLnRvcDsKKyAgICBtX1Jlc3VsdFdpZHRoID0gcmVzdWx0X2NsaXAuV2lkdGgoKTsKKyAgICBtX1Jlc3VsdEhlaWdodCA9IHJlc3VsdF9jbGlwLkhlaWdodCgpOworICAgIG1fRmxhZ3MgPSBmbGFnczsKKyAgICBpZiAoRlhTWVNfZmFicyhwRGVzdE1hdHJpeC0+YSkgPCBGWFNZU19mYWJzKHBEZXN0TWF0cml4LT5iKSAvIDIwICYmCisgICAgICAgICAgICBGWFNZU19mYWJzKHBEZXN0TWF0cml4LT5kKSA8IEZYU1lTX2ZhYnMocERlc3RNYXRyaXgtPmMpIC8gMjAgJiYKKyAgICAgICAgICAgIEZYU1lTX2ZhYnMocERlc3RNYXRyaXgtPmEpIDwgMC41ZiAmJiBGWFNZU19mYWJzKHBEZXN0TWF0cml4LT5kKSA8IDAuNWYpIHsKKyAgICAgICAgaW50IGRlc3Rfd2lkdGggPSByZXN1bHRfcmVjdC5XaWR0aCgpOworICAgICAgICBpbnQgZGVzdF9oZWlnaHQgPSByZXN1bHRfcmVjdC5IZWlnaHQoKTsKKyAgICAgICAgcmVzdWx0X2NsaXAuT2Zmc2V0KC1yZXN1bHRfcmVjdC5sZWZ0LCAtcmVzdWx0X3JlY3QudG9wKTsKKyAgICAgICAgcmVzdWx0X2NsaXAgPSBfRlhESUJfU3dhcENsaXBCb3gocmVzdWx0X2NsaXAsIGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0LCBwRGVzdE1hdHJpeC0+YyA+IDAsIHBEZXN0TWF0cml4LT5iIDwgMCk7CisgICAgICAgIG1fU3RyZXRjaGVyLlN0YXJ0KCZtX1N0b3JlciwgcFNyYywgZGVzdF9oZWlnaHQsIGRlc3Rfd2lkdGgsIHJlc3VsdF9jbGlwLCBmbGFncyk7CisgICAgICAgIG1fU3RhdHVzID0gMTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGlmIChGWFNZU19mYWJzKHBEZXN0TWF0cml4LT5iKSA8IEZJWDE2XzAwNSAmJiBGWFNZU19mYWJzKHBEZXN0TWF0cml4LT5jKSA8IEZJWDE2XzAwNSkgeworICAgICAgICBpbnQgZGVzdF93aWR0aCA9IHBEZXN0TWF0cml4LT5hID4gMCA/IChpbnQpRlhTWVNfY2VpbChwRGVzdE1hdHJpeC0+YSkgOiAoaW50KUZYU1lTX2Zsb29yKHBEZXN0TWF0cml4LT5hKTsKKyAgICAgICAgaW50IGRlc3RfaGVpZ2h0ID0gcERlc3RNYXRyaXgtPmQgPiAwID8gKGludCkgLSBGWFNZU19jZWlsKHBEZXN0TWF0cml4LT5kKSA6IChpbnQpIC0gRlhTWVNfZmxvb3IocERlc3RNYXRyaXgtPmQpOworICAgICAgICByZXN1bHRfY2xpcC5PZmZzZXQoLXJlc3VsdF9yZWN0LmxlZnQsIC1yZXN1bHRfcmVjdC50b3ApOworICAgICAgICBtX1N0cmV0Y2hlci5TdGFydCgmbV9TdG9yZXIsIHBTcmMsIGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0LCByZXN1bHRfY2xpcCwgZmxhZ3MpOworICAgICAgICBtX1N0YXR1cyA9IDI7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBpbnQgc3RyZXRjaF93aWR0aCA9IChpbnQpRlhTWVNfY2VpbChGWFNZU19zcXJ0MihwRGVzdE1hdHJpeC0+YSwgcERlc3RNYXRyaXgtPmIpKTsKKyAgICBpbnQgc3RyZXRjaF9oZWlnaHQgPSAoaW50KUZYU1lTX2NlaWwoRlhTWVNfc3FydDIocERlc3RNYXRyaXgtPmMsIHBEZXN0TWF0cml4LT5kKSk7CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBzdHJldGNoMmRlc3QoMS4wZiwgMC4wZiwgMC4wZiwgLTEuMGYsIDAuMGYsIChGWF9GTE9BVCkoc3RyZXRjaF9oZWlnaHQpKTsKKyAgICBzdHJldGNoMmRlc3QuQ29uY2F0KHBEZXN0TWF0cml4LT5hIC8gc3RyZXRjaF93aWR0aCwgcERlc3RNYXRyaXgtPmIgLyBzdHJldGNoX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgcERlc3RNYXRyaXgtPmMgLyBzdHJldGNoX2hlaWdodCwgcERlc3RNYXRyaXgtPmQgLyBzdHJldGNoX2hlaWdodCwgcERlc3RNYXRyaXgtPmUsIHBEZXN0TWF0cml4LT5mKTsKKyAgICBtX2Rlc3Qyc3RyZXRjaC5TZXRSZXZlcnNlKHN0cmV0Y2gyZGVzdCk7CisgICAgQ0ZYX0Zsb2F0UmVjdCBjbGlwX3JlY3RfZihyZXN1bHRfY2xpcCk7CisgICAgY2xpcF9yZWN0X2YuVHJhbnNmb3JtKCZtX2Rlc3Qyc3RyZXRjaCk7CisgICAgbV9TdHJldGNoQ2xpcCA9IGNsaXBfcmVjdF9mLkdldE91dHRlclJlY3QoKTsKKyAgICBtX1N0cmV0Y2hDbGlwLkludGVyc2VjdCgwLCAwLCBzdHJldGNoX3dpZHRoLCBzdHJldGNoX2hlaWdodCk7CisgICAgbV9TdHJldGNoZXIuU3RhcnQoJm1fU3RvcmVyLCBwU3JjLCBzdHJldGNoX3dpZHRoLCBzdHJldGNoX2hlaWdodCwgbV9TdHJldGNoQ2xpcCwgZmxhZ3MpOworICAgIG1fU3RhdHVzID0gMzsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JZVEUgX2JpbGluZWFyX2ludGVycG9sKEZYX0xQQ0JZVEUgYnVmLCBpbnQgcm93X29mZnNldF9sLCBpbnQgcm93X29mZnNldF9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19jb2xfbCwgaW50IHNyY19jb2xfciwgaW50IHJlc194LCBpbnQgcmVzX3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnBwLCBpbnQgY19vZmZzZXQpCit7CisgICAgaW50IGlfcmVzeCA9IDI1NSAtIHJlc194OworICAgIGludCBjb2xfYnBwX2wgPSBzcmNfY29sX2wgKiBicHA7CisgICAgaW50IGNvbF9icHBfciA9IHNyY19jb2xfciAqIGJwcDsKKyAgICBGWF9MUENCWVRFIGJ1Zl91ID0gYnVmICsgcm93X29mZnNldF9sICsgY19vZmZzZXQ7CisgICAgRlhfTFBDQllURSBidWZfZCA9IGJ1ZiArIHJvd19vZmZzZXRfciArIGNfb2Zmc2V0OworICAgIEZYX0xQQ0JZVEUgc3JjX3BvczAgPSBidWZfdSArIGNvbF9icHBfbDsKKyAgICBGWF9MUENCWVRFIHNyY19wb3MxID0gYnVmX3UgKyBjb2xfYnBwX3I7CisgICAgRlhfTFBDQllURSBzcmNfcG9zMiA9IGJ1Zl9kICsgY29sX2JwcF9sOworICAgIEZYX0xQQ0JZVEUgc3JjX3BvczMgPSBidWZfZCArIGNvbF9icHBfcjsKKyAgICBGWF9CWVRFIHJfcG9zXzAgPSAoKnNyY19wb3MwICogaV9yZXN4ICsgKnNyY19wb3MxICogcmVzX3gpID4+IDg7CisgICAgRlhfQllURSByX3Bvc18xID0gKCpzcmNfcG9zMiAqIGlfcmVzeCArICpzcmNfcG9zMyAqIHJlc194KSA+PiA4OworICAgIHJldHVybiAocl9wb3NfMCAqICgyNTUgLSByZXNfeSkgKyByX3Bvc18xICogcmVzX3kpID4+IDg7Cit9CitGWF9CWVRFIF9iaWN1YmljX2ludGVycG9sKEZYX0xQQ0JZVEUgYnVmLCBpbnQgcGl0Y2gsIGludCBwb3NfcGl4ZWxbXSwgaW50IHVfd1tdLCBpbnQgdl93W10sIGludCByZXNfeCwgaW50IHJlc195LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnBwLCBpbnQgY19vZmZzZXQpCit7CisgICAgaW50IHNfcmVzdWx0ID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkgKyspIHsKKyAgICAgICAgaW50IGFfcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqICsrKSB7CisgICAgICAgICAgICBhX3Jlc3VsdCArPSB1X3dbal0gKiAoKihGWF9CWVRFKikoYnVmICsgcG9zX3BpeGVsW2kgKyA0XSAqIHBpdGNoICsgcG9zX3BpeGVsW2pdICogYnBwICsgY19vZmZzZXQpKTsKKyAgICAgICAgfQorICAgICAgICBzX3Jlc3VsdCArPSBhX3Jlc3VsdCAqIHZfd1tpXTsKKyAgICB9CisgICAgc19yZXN1bHQgPj49IDE2OworICAgIHJldHVybiAoRlhfQllURSkoc19yZXN1bHQgPCAwID8gMCA6IHNfcmVzdWx0ID4gMjU1ID8gMjU1IDogc19yZXN1bHQpOworfQordm9pZCBfYmljdWJpY19nZXRfcG9zX3dlaWdodChpbnQgcG9zX3BpeGVsW10sIGludCB1X3dbXSwgaW50IHZfd1tdLCBpbnQgc3JjX2NvbF9sLCBpbnQgc3JjX3Jvd19sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzX3gsIGludCByZXNfeSwgaW50IHN0cmV0Y2hfd2lkdGgsIGludCBzdHJldGNoX2hlaWdodCkKK3sKKyAgICBwb3NfcGl4ZWxbMF0gPSBzcmNfY29sX2wgLSAxOworICAgIHBvc19waXhlbFsxXSA9IHNyY19jb2xfbDsKKyAgICBwb3NfcGl4ZWxbMl0gPSBzcmNfY29sX2wgKyAxOworICAgIHBvc19waXhlbFszXSA9IHNyY19jb2xfbCArIDI7CisgICAgcG9zX3BpeGVsWzRdID0gc3JjX3Jvd19sIC0gMTsKKyAgICBwb3NfcGl4ZWxbNV0gPSBzcmNfcm93X2w7CisgICAgcG9zX3BpeGVsWzZdID0gc3JjX3Jvd19sICsgMTsKKyAgICBwb3NfcGl4ZWxbN10gPSBzcmNfcm93X2wgKyAyOworICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IDQ7IGkgKyspIHsKKyAgICAgICAgaWYgKHBvc19waXhlbFtpXSA8IDApIHsKKyAgICAgICAgICAgIHBvc19waXhlbFtpXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBvc19waXhlbFtpXSA+PSBzdHJldGNoX3dpZHRoKSB7CisgICAgICAgICAgICBwb3NfcGl4ZWxbaV0gPSBzdHJldGNoX3dpZHRoIC0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAocG9zX3BpeGVsW2kgKyA0XSA8IDApIHsKKyAgICAgICAgICAgIHBvc19waXhlbFtpICsgNF0gPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChwb3NfcGl4ZWxbaSArIDRdID49IHN0cmV0Y2hfaGVpZ2h0KSB7CisgICAgICAgICAgICBwb3NfcGl4ZWxbaSArIDRdID0gc3RyZXRjaF9oZWlnaHQgLSAxOworICAgICAgICB9CisgICAgfQorICAgIHVfd1swXSA9IFNEUF9UYWJsZVsyNTYgKyByZXNfeF07CisgICAgdV93WzFdID0gU0RQX1RhYmxlW3Jlc194XTsKKyAgICB1X3dbMl0gPSBTRFBfVGFibGVbMjU2IC0gcmVzX3hdOworICAgIHVfd1szXSA9IFNEUF9UYWJsZVs1MTIgLSByZXNfeF07CisgICAgdl93WzBdID0gU0RQX1RhYmxlWzI1NiArIHJlc195XTsKKyAgICB2X3dbMV0gPSBTRFBfVGFibGVbcmVzX3ldOworICAgIHZfd1syXSA9IFNEUF9UYWJsZVsyNTYgLSByZXNfeV07CisgICAgdl93WzNdID0gU0RQX1RhYmxlWzUxMiAtIHJlc195XTsKK30KK0ZYRElCX0Zvcm1hdCBfR2V0VHJhbnNmb3JtZWRGb3JtYXQoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcERyYykKK3sKKyAgICBGWERJQl9Gb3JtYXQgZm9ybWF0ID0gcERyYy0+R2V0Rm9ybWF0KCk7CisgICAgaWYgKHBEcmMtPklzQWxwaGFNYXNrKCkpIHsKKyAgICAgICAgZm9ybWF0ID0gRlhESUJfOGJwcE1hc2s7CisgICAgfSBlbHNlIGlmIChmb3JtYXQgPj0gMTAyNSkgeworICAgICAgICBmb3JtYXQgPSBGWERJQl9DbXlrYTsKKyAgICB9IGVsc2UgaWYgKGZvcm1hdCA8PSAzMiB8fCBmb3JtYXQgPT0gRlhESUJfQXJnYikgeworICAgICAgICBmb3JtYXQgPSBGWERJQl9BcmdiOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvcm1hdCA9IEZYRElCX1JnYmE7CisgICAgfQorICAgIHJldHVybiBmb3JtYXQ7Cit9CitGWF9CT09MIENGWF9JbWFnZVRyYW5zZm9ybWVyOjpDb250aW51ZShJRlhfUGF1c2UqIHBQYXVzZSkKK3sKKyAgICBpZiAobV9TdGF0dXMgPT0gMSkgeworICAgICAgICBpZiAobV9TdHJldGNoZXIuQ29udGludWUocFBhdXNlKSkgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fU3RvcmVyLkdldEJpdG1hcCgpKSB7CisgICAgICAgICAgICBtX1N0b3Jlci5SZXBsYWNlKG1fU3RvcmVyLkdldEJpdG1hcCgpLT5Td2FwWFkobV9wTWF0cml4LT5jID4gMCwgbV9wTWF0cml4LT5iIDwgMCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9IGVsc2UgaWYgKG1fU3RhdHVzID09IDIpIHsKKyAgICAgICAgcmV0dXJuIG1fU3RyZXRjaGVyLkNvbnRpbnVlKHBQYXVzZSk7CisgICAgfSBlbHNlIGlmIChtX1N0YXR1cyAhPSAzKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKG1fU3RyZXRjaGVyLkNvbnRpbnVlKHBQYXVzZSkpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGludCBzdHJldGNoX3dpZHRoID0gbV9TdHJldGNoQ2xpcC5XaWR0aCgpOworICAgIGludCBzdHJldGNoX2hlaWdodCA9IG1fU3RyZXRjaENsaXAuSGVpZ2h0KCk7CisgICAgaWYgKG1fU3RvcmVyLkdldEJpdG1hcCgpID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWF9MUENCWVRFIHN0cmV0Y2hfYnVmID0gbV9TdG9yZXIuR2V0Qml0bWFwKCktPkdldEJ1ZmZlcigpOworICAgIEZYX0xQQ0JZVEUgc3RyZXRjaF9idWZfbWFzayA9IE5VTEw7CisgICAgaWYgKG1fU3RvcmVyLkdldEJpdG1hcCgpLT5tX3BBbHBoYU1hc2spIHsKKyAgICAgICAgc3RyZXRjaF9idWZfbWFzayA9IG1fU3RvcmVyLkdldEJpdG1hcCgpLT5tX3BBbHBoYU1hc2stPkdldEJ1ZmZlcigpOworICAgIH0KKyAgICBpbnQgc3RyZXRjaF9waXRjaCA9IG1fU3RvcmVyLkdldEJpdG1hcCgpLT5HZXRQaXRjaCgpOworICAgIENGWF9ESUJpdG1hcCogcFRyYW5zZm9ybWVkID0gRlhfTkVXIENGWF9ESUJpdG1hcDsKKyAgICBpZiAoIXBUcmFuc2Zvcm1lZCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEZYRElCX0Zvcm1hdCB0cmFuc2Zvcm1GID0gX0dldFRyYW5zZm9ybWVkRm9ybWF0KG1fU3RyZXRjaGVyLm1fcFNvdXJjZSk7CisgICAgaWYgKCFwVHJhbnNmb3JtZWQtPkNyZWF0ZShtX1Jlc3VsdFdpZHRoLCBtX1Jlc3VsdEhlaWdodCwgdHJhbnNmb3JtRikpIHsKKyAgICAgICAgZGVsZXRlIHBUcmFuc2Zvcm1lZDsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBwVHJhbnNmb3JtZWQtPkNsZWFyKDApOworICAgIGlmIChwVHJhbnNmb3JtZWQtPm1fcEFscGhhTWFzaykgeworICAgICAgICBwVHJhbnNmb3JtZWQtPm1fcEFscGhhTWFzay0+Q2xlYXIoMCk7CisgICAgfQorICAgIENGWF9BZmZpbmVNYXRyaXggcmVzdWx0MnN0cmV0Y2goMS4wZiwgMC4wZiwgMC4wZiwgMS4wZiwgKEZYX0ZMT0FUKShtX1Jlc3VsdExlZnQpLCAoRlhfRkxPQVQpKG1fUmVzdWx0VG9wKSk7CisgICAgcmVzdWx0MnN0cmV0Y2guQ29uY2F0KG1fZGVzdDJzdHJldGNoKTsKKyAgICByZXN1bHQyc3RyZXRjaC5UcmFuc2xhdGVJKC1tX1N0cmV0Y2hDbGlwLmxlZnQsIC1tX1N0cmV0Y2hDbGlwLnRvcCk7CisgICAgaWYgKHN0cmV0Y2hfYnVmX21hc2sgPT0gTlVMTCAmJiBwVHJhbnNmb3JtZWQtPm1fcEFscGhhTWFzaykgeworICAgICAgICBwVHJhbnNmb3JtZWQtPm1fcEFscGhhTWFzay0+Q2xlYXIoMHhmZjAwMDAwMCk7CisgICAgfSBlbHNlIGlmIChwVHJhbnNmb3JtZWQtPm1fcEFscGhhTWFzaykgeworICAgICAgICBpbnQgc3RyZXRjaF9waXRjaF9tYXNrID0gbV9TdG9yZXIuR2V0Qml0bWFwKCktPm1fcEFscGhhTWFzay0+R2V0UGl0Y2goKTsKKyAgICAgICAgaWYgKCEobV9GbGFncyAmIEZYRElCX0RPV05TQU1QTEUpICYmICEobV9GbGFncyAmIEZYRElCX0JJQ1VCSUNfSU5URVJQT0wpKSB7CisgICAgICAgICAgICBDRlhfQmlsaW5lYXJNYXRyaXggcmVzdWx0MnN0cmV0Y2hfZml4KHJlc3VsdDJzdHJldGNoLCA4KTsKKyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fUmVzdWx0SGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgICAgICBGWF9CWVRFKiBkZXN0X3Bvc19tYXNrID0gKEZYX0JZVEUqKXBUcmFuc2Zvcm1lZC0+bV9wQWxwaGFNYXNrLT5HZXRTY2FubGluZShyb3cpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fUmVzdWx0V2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2NvbF9sLCBzcmNfcm93X2wsIHJlc194LCByZXNfeTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0MnN0cmV0Y2hfZml4LlRyYW5zZm9ybShjb2wsIHJvdywgc3JjX2NvbF9sLCBzcmNfcm93X2wsIHJlc194LCByZXNfeSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfY29sX2wgPj0gMCAmJiBzcmNfY29sX2wgPD0gc3RyZXRjaF93aWR0aCAmJiBzcmNfcm93X2wgPj0gMCAmJiBzcmNfcm93X2wgPD0gc3RyZXRjaF9oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfY29sX2wgPT0gc3RyZXRjaF93aWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19jb2xfbC0tOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19yb3dfbCA9PSBzdHJldGNoX2hlaWdodCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19yb3dfbC0tOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19jb2xfciA9IHNyY19jb2xfbCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX3Jvd19yID0gc3JjX3Jvd19sICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfY29sX3IgPT0gc3RyZXRjaF93aWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19jb2xfci0tOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19yb3dfciA9PSBzdHJldGNoX2hlaWdodCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19yb3dfci0tOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJvd19vZmZzZXRfbCA9IHNyY19yb3dfbCAqIHN0cmV0Y2hfcGl0Y2hfbWFzazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByb3dfb2Zmc2V0X3IgPSBzcmNfcm93X3IgKiBzdHJldGNoX3BpdGNoX21hc2s7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9wb3NfbWFzayA9IF9iaWxpbmVhcl9pbnRlcnBvbChzdHJldGNoX2J1Zl9tYXNrLCByb3dfb2Zmc2V0X2wsIHJvd19vZmZzZXRfciwgc3JjX2NvbF9sLCBzcmNfY29sX3IsIHJlc194LCByZXNfeSwgMSwgMCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3NfbWFzaysrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChtX0ZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCkgeworICAgICAgICAgICAgQ0ZYX0JpbGluZWFyTWF0cml4IHJlc3VsdDJzdHJldGNoX2ZpeChyZXN1bHQyc3RyZXRjaCwgOCk7CisgICAgICAgICAgICBpbnQgcG9zX3BpeGVsWzhdOworICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9SZXN1bHRIZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgICAgIEZYX0JZVEUqIGRlc3RfcG9zX21hc2sgPSAoRlhfQllURSopcFRyYW5zZm9ybWVkLT5tX3BBbHBoYU1hc2stPkdldFNjYW5saW5lKHJvdyk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbV9SZXN1bHRXaWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBzcmNfY29sX2wsIHNyY19yb3dfbCwgcmVzX3gsIHJlc195OworICAgICAgICAgICAgICAgICAgICByZXN1bHQyc3RyZXRjaF9maXguVHJhbnNmb3JtKGNvbCwgcm93LCBzcmNfY29sX2wsIHNyY19yb3dfbCwgcmVzX3gsIHJlc195KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19jb2xfbCA+PSAwICYmIHNyY19jb2xfbCA8PSBzdHJldGNoX3dpZHRoICYmIHNyY19yb3dfbCA+PSAwICYmIHNyY19yb3dfbCA8PSBzdHJldGNoX2hlaWdodCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHVfd1s0XSwgdl93WzRdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19jb2xfbCA9PSBzdHJldGNoX3dpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2NvbF9sLS07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX3Jvd19sID09IHN0cmV0Y2hfaGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3Jvd19sLS07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBfYmljdWJpY19nZXRfcG9zX3dlaWdodChwb3NfcGl4ZWwsIHVfdywgdl93LCBzcmNfY29sX2wsIHNyY19yb3dfbCwgcmVzX3gsIHJlc195LCBzdHJldGNoX3dpZHRoLCBzdHJldGNoX2hlaWdodCk7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9wb3NfbWFzayA9IF9iaWN1YmljX2ludGVycG9sKHN0cmV0Y2hfYnVmX21hc2ssIHN0cmV0Y2hfcGl0Y2hfbWFzaywgcG9zX3BpeGVsLCB1X3csIHZfdywgcmVzX3gsIHJlc195LCAxLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZXN0X3Bvc19tYXNrKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQ1BERl9GaXhlZE1hdHJpeCByZXN1bHQyc3RyZXRjaF9maXgocmVzdWx0MnN0cmV0Y2gsIDgpOworICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9SZXN1bHRIZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgICAgIEZYX0JZVEUqIGRlc3RfcG9zX21hc2sgPSAoRlhfQllURSopcFRyYW5zZm9ybWVkLT5tX3BBbHBoYU1hc2stPkdldFNjYW5saW5lKHJvdyk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbV9SZXN1bHRXaWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBzcmNfY29sLCBzcmNfcm93OworICAgICAgICAgICAgICAgICAgICByZXN1bHQyc3RyZXRjaF9maXguVHJhbnNmb3JtKGNvbCwgcm93LCBzcmNfY29sLCBzcmNfcm93KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19jb2wgPj0gMCAmJiBzcmNfY29sIDw9IHN0cmV0Y2hfd2lkdGggJiYgc3JjX3JvdyA+PSAwICYmIHNyY19yb3cgPD0gc3RyZXRjaF9oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfY29sID09IHN0cmV0Y2hfd2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfY29sIC0tOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19yb3cgPT0gc3RyZXRjaF9oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfcm93IC0tOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3RfcG9zX21hc2sgPSBzdHJldGNoX2J1Zl9tYXNrW3NyY19yb3cgKiBzdHJldGNoX3BpdGNoX21hc2sgKyBzcmNfY29sXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZXN0X3Bvc19tYXNrKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChtX1N0b3Jlci5HZXRCaXRtYXAoKS0+SXNBbHBoYU1hc2soKSkgeworICAgICAgICBpZiAoIShtX0ZsYWdzICYgRlhESUJfRE9XTlNBTVBMRSkgJiYgIShtX0ZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCkpIHsKKyAgICAgICAgICAgIENGWF9CaWxpbmVhck1hdHJpeCByZXN1bHQyc3RyZXRjaF9maXgocmVzdWx0MnN0cmV0Y2gsIDgpOworICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9SZXN1bHRIZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSAoRlhfTFBCWVRFKXBUcmFuc2Zvcm1lZC0+R2V0U2NhbmxpbmUocm93KTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1Jlc3VsdFdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHNyY19jb2xfbCwgc3JjX3Jvd19sLCByZXNfeCwgcmVzX3k7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdDJzdHJldGNoX2ZpeC5UcmFuc2Zvcm0oY29sLCByb3csIHNyY19jb2xfbCwgc3JjX3Jvd19sLCByZXNfeCwgcmVzX3kpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbF9sID49IDAgJiYgc3JjX2NvbF9sIDw9IHN0cmV0Y2hfd2lkdGggJiYgc3JjX3Jvd19sID49IDAgJiYgc3JjX3Jvd19sIDw9IHN0cmV0Y2hfaGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbF9sID09IHN0cmV0Y2hfd2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfY29sX2wtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfcm93X2wgPT0gc3RyZXRjaF9oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfcm93X2wtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfY29sX3IgPSBzcmNfY29sX2wgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19yb3dfciA9IHNyY19yb3dfbCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbF9yID09IHN0cmV0Y2hfd2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfY29sX3ItLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfcm93X3IgPT0gc3RyZXRjaF9oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfcm93X3ItLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByb3dfb2Zmc2V0X2wgPSBzcmNfcm93X2wgKiBzdHJldGNoX3BpdGNoOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJvd19vZmZzZXRfciA9IHNyY19yb3dfciAqIHN0cmV0Y2hfcGl0Y2g7CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuID0gX2JpbGluZWFyX2ludGVycG9sKHN0cmV0Y2hfYnVmLCByb3dfb2Zmc2V0X2wsIHJvd19vZmZzZXRfciwgc3JjX2NvbF9sLCBzcmNfY29sX3IsIHJlc194LCByZXNfeSwgMSwgMCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChtX0ZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCkgeworICAgICAgICAgICAgQ0ZYX0JpbGluZWFyTWF0cml4IHJlc3VsdDJzdHJldGNoX2ZpeChyZXN1bHQyc3RyZXRjaCwgOCk7CisgICAgICAgICAgICBpbnQgcG9zX3BpeGVsWzhdOworICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9SZXN1bHRIZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSAoRlhfTFBCWVRFKXBUcmFuc2Zvcm1lZC0+R2V0U2NhbmxpbmUocm93KTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1Jlc3VsdFdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHNyY19jb2xfbCwgc3JjX3Jvd19sLCByZXNfeCwgcmVzX3k7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdDJzdHJldGNoX2ZpeC5UcmFuc2Zvcm0oY29sLCByb3csIHNyY19jb2xfbCwgc3JjX3Jvd19sLCByZXNfeCwgcmVzX3kpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbF9sID49IDAgJiYgc3JjX2NvbF9sIDw9IHN0cmV0Y2hfd2lkdGggJiYgc3JjX3Jvd19sID49IDAgJiYgc3JjX3Jvd19sIDw9IHN0cmV0Y2hfaGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdV93WzRdLCB2X3dbNF07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbF9sID09IHN0cmV0Y2hfd2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfY29sX2wtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfcm93X2wgPT0gc3RyZXRjaF9oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfcm93X2wtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIF9iaWN1YmljX2dldF9wb3Nfd2VpZ2h0KHBvc19waXhlbCwgdV93LCB2X3csIHNyY19jb2xfbCwgc3JjX3Jvd19sLCByZXNfeCwgcmVzX3ksIHN0cmV0Y2hfd2lkdGgsIHN0cmV0Y2hfaGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4gPSBfYmljdWJpY19pbnRlcnBvbChzdHJldGNoX2J1Ziwgc3RyZXRjaF9waXRjaCwgcG9zX3BpeGVsLCB1X3csIHZfdywgcmVzX3gsIHJlc195LCAxLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQ1BERl9GaXhlZE1hdHJpeCByZXN1bHQyc3RyZXRjaF9maXgocmVzdWx0MnN0cmV0Y2gsIDgpOworICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9SZXN1bHRIZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSAoRlhfTFBCWVRFKXBUcmFuc2Zvcm1lZC0+R2V0U2NhbmxpbmUocm93KTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1Jlc3VsdFdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHNyY19jb2wsIHNyY19yb3c7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdDJzdHJldGNoX2ZpeC5UcmFuc2Zvcm0oY29sLCByb3csIHNyY19jb2wsIHNyY19yb3cpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbCA+PSAwICYmIHNyY19jb2wgPD0gc3RyZXRjaF93aWR0aCAmJiBzcmNfcm93ID49IDAgJiYgc3JjX3JvdyA8PSBzdHJldGNoX2hlaWdodCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19jb2wgPT0gc3RyZXRjaF93aWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19jb2wgLS07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX3JvdyA9PSBzdHJldGNoX2hlaWdodCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19yb3cgLS07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19waXhlbCA9IHN0cmV0Y2hfYnVmICsgc3RyZXRjaF9waXRjaCAqIHNyY19yb3cgKyBzcmNfY29sOworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbiA9ICpzcmNfcGl4ZWw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGludCBCcHAgPSBtX1N0b3Jlci5HZXRCaXRtYXAoKS0+R2V0QlBQKCkgLyA4OworICAgICAgICBpbnQgZGVzdEJwcCA9IHBUcmFuc2Zvcm1lZC0+R2V0QlBQKCkgLyA4OworICAgICAgICBpZiAoQnBwID09IDEpIHsKKyAgICAgICAgICAgIEZYX0JPT0wgYkhhc0FscGhhID0gbV9TdG9yZXIuR2V0Qml0bWFwKCktPkhhc0FscGhhKCk7CisgICAgICAgICAgICBGWF9EV09SRCBhcmdiWzI1Nl07CisgICAgICAgICAgICBGWF9BUkdCKiBwUGFsID0gbV9TdG9yZXIuR2V0Qml0bWFwKCktPkdldFBhbGV0dGUoKTsKKyAgICAgICAgICAgIGlmIChwUGFsKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgYXJnYltpXSA9IHBQYWxbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobV9TdG9yZXIuR2V0Qml0bWFwKCktPklzQ215a0ltYWdlKCkpCisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhcmdiW2ldID0gMjU1IC0gaTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ2JbaV0gPSAweGZmMDAwMDAwIHwgKGkgKiAweDAxMDEwMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghKG1fRmxhZ3MgJiBGWERJQl9ET1dOU0FNUExFKSAmJiAhKG1fRmxhZ3MgJiBGWERJQl9CSUNVQklDX0lOVEVSUE9MKSkgeworICAgICAgICAgICAgICAgIENGWF9CaWxpbmVhck1hdHJpeCByZXN1bHQyc3RyZXRjaF9maXgocmVzdWx0MnN0cmV0Y2gsIDgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fUmVzdWx0SGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgRlhfQllURSogZGVzdF9wb3MgPSAoRlhfQllURSopcFRyYW5zZm9ybWVkLT5HZXRTY2FubGluZShyb3cpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1Jlc3VsdFdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfY29sX2wsIHNyY19yb3dfbCwgcmVzX3gsIHJlc195OworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0MnN0cmV0Y2hfZml4LlRyYW5zZm9ybShjb2wsIHJvdywgc3JjX2NvbF9sLCBzcmNfcm93X2wsIHJlc194LCByZXNfeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbF9sID49IDAgJiYgc3JjX2NvbF9sIDw9IHN0cmV0Y2hfd2lkdGggJiYgc3JjX3Jvd19sID49IDAgJiYgc3JjX3Jvd19sIDw9IHN0cmV0Y2hfaGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19jb2xfbCA9PSBzdHJldGNoX3dpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19jb2xfbC0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX3Jvd19sID09IHN0cmV0Y2hfaGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19yb3dfbC0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2NvbF9yID0gc3JjX2NvbF9sICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX3Jvd19yID0gc3JjX3Jvd19sICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbF9yID09IHN0cmV0Y2hfd2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2NvbF9yLS07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfcm93X3IgPT0gc3RyZXRjaF9oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3Jvd19yLS07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByb3dfb2Zmc2V0X2wgPSBzcmNfcm93X2wgKiBzdHJldGNoX3BpdGNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByb3dfb2Zmc2V0X3IgPSBzcmNfcm93X3IgKiBzdHJldGNoX3BpdGNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIHJfYmdyYV9jbXlrID0gYXJnYltfYmlsaW5lYXJfaW50ZXJwb2woc3RyZXRjaF9idWYsIHJvd19vZmZzZXRfbCwgcm93X29mZnNldF9yLCBzcmNfY29sX2wsIHNyY19jb2xfciwgcmVzX3gsIHJlc195LCAxLCAwKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUYgPT0gRlhESUJfUmdiYSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3Bvc1swXSA9IChGWF9CWVRFKShyX2JncmFfY215ayA+PiAyNCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zWzFdID0gKEZYX0JZVEUpKHJfYmdyYV9jbXlrID4+IDE2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3NbMl0gPSAoRlhfQllURSkocl9iZ3JhX2NteWsgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihGWF9EV09SRCopZGVzdF9wb3MgPSByX2JncmFfY215azsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3BvcyArPSBkZXN0QnBwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChtX0ZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCkgeworICAgICAgICAgICAgICAgIENGWF9CaWxpbmVhck1hdHJpeCByZXN1bHQyc3RyZXRjaF9maXgocmVzdWx0MnN0cmV0Y2gsIDgpOworICAgICAgICAgICAgICAgIGludCBwb3NfcGl4ZWxbOF07CisgICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbV9SZXN1bHRIZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgICAgICAgICBGWF9CWVRFKiBkZXN0X3BvcyA9IChGWF9CWVRFKilwVHJhbnNmb3JtZWQtPkdldFNjYW5saW5lKHJvdyk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IG1fUmVzdWx0V2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19jb2xfbCwgc3JjX3Jvd19sLCByZXNfeCwgcmVzX3k7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQyc3RyZXRjaF9maXguVHJhbnNmb3JtKGNvbCwgcm93LCBzcmNfY29sX2wsIHNyY19yb3dfbCwgcmVzX3gsIHJlc195KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfY29sX2wgPj0gMCAmJiBzcmNfY29sX2wgPD0gc3RyZXRjaF93aWR0aCAmJiBzcmNfcm93X2wgPj0gMCAmJiBzcmNfcm93X2wgPD0gc3RyZXRjaF9oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdV93WzRdLCB2X3dbNF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19jb2xfbCA9PSBzdHJldGNoX3dpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19jb2xfbC0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX3Jvd19sID09IHN0cmV0Y2hfaGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19yb3dfbC0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYmljdWJpY19nZXRfcG9zX3dlaWdodChwb3NfcGl4ZWwsIHVfdywgdl93LCBzcmNfY29sX2wsIHNyY19yb3dfbCwgcmVzX3gsIHJlc195LCBzdHJldGNoX3dpZHRoLCBzdHJldGNoX2hlaWdodCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgcl9iZ3JhX2NteWsgPSBhcmdiW19iaWN1YmljX2ludGVycG9sKHN0cmV0Y2hfYnVmLCBzdHJldGNoX3BpdGNoLCBwb3NfcGl4ZWwsIHVfdywgdl93LCByZXNfeCwgcmVzX3ksIDEsIDApXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtRiA9PSBGWERJQl9SZ2JhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zWzBdID0gKEZYX0JZVEUpKHJfYmdyYV9jbXlrID4+IDI0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3NbMV0gPSAoRlhfQllURSkocl9iZ3JhX2NteWsgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3Bvc1syXSA9IChGWF9CWVRFKShyX2JncmFfY215ayA+PiA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKEZYX0RXT1JEKilkZXN0X3BvcyA9IHJfYmdyYV9jbXlrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zICs9IGRlc3RCcHA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIENQREZfRml4ZWRNYXRyaXggcmVzdWx0MnN0cmV0Y2hfZml4KHJlc3VsdDJzdHJldGNoLCA4KTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBtX1Jlc3VsdEhlaWdodDsgcm93ICsrKSB7CisgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUqIGRlc3RfcG9zID0gKEZYX0JZVEUqKXBUcmFuc2Zvcm1lZC0+R2V0U2NhbmxpbmUocm93KTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgbV9SZXN1bHRXaWR0aDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2NvbCwgc3JjX3JvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDJzdHJldGNoX2ZpeC5UcmFuc2Zvcm0oY29sLCByb3csIHNyY19jb2wsIHNyY19yb3cpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19jb2wgPj0gMCAmJiBzcmNfY29sIDw9IHN0cmV0Y2hfd2lkdGggJiYgc3JjX3JvdyA+PSAwICYmIHNyY19yb3cgPD0gc3RyZXRjaF9oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbCA9PSBzdHJldGNoX3dpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19jb2wgLS07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfcm93ID09IHN0cmV0Y2hfaGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19yb3cgLS07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIHJfYmdyYV9jbXlrID0gYXJnYltzdHJldGNoX2J1ZltzcmNfcm93ICogc3RyZXRjaF9waXRjaCArIHNyY19jb2xdXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtRiA9PSBGWERJQl9SZ2JhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zWzBdID0gKEZYX0JZVEUpKHJfYmdyYV9jbXlrID4+IDI0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3NbMV0gPSAoRlhfQllURSkocl9iZ3JhX2NteWsgPj4gMTYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3Bvc1syXSA9IChGWF9CWVRFKShyX2JncmFfY215ayA+PiA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKEZYX0RXT1JEKilkZXN0X3BvcyA9IHJfYmdyYV9jbXlrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zICs9IGRlc3RCcHA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBGWF9CT09MIGJIYXNBbHBoYSA9IG1fU3RvcmVyLkdldEJpdG1hcCgpLT5IYXNBbHBoYSgpOworICAgICAgICAgICAgaW50IGRlc3RCcHAgPSBwVHJhbnNmb3JtZWQtPkdldEJQUCgpIC8gODsKKyAgICAgICAgICAgIGlmICghKG1fRmxhZ3MgJiBGWERJQl9ET1dOU0FNUExFKSAmJiAhKG1fRmxhZ3MgJiBGWERJQl9CSUNVQklDX0lOVEVSUE9MKSkgeworICAgICAgICAgICAgICAgIENGWF9CaWxpbmVhck1hdHJpeCByZXN1bHQyc3RyZXRjaF9maXgocmVzdWx0MnN0cmV0Y2gsIDgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fUmVzdWx0SGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgRlhfQllURSogZGVzdF9wb3MgPSAoRlhfQllURSopcFRyYW5zZm9ybWVkLT5HZXRTY2FubGluZShyb3cpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1Jlc3VsdFdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfY29sX2wsIHNyY19yb3dfbCwgcmVzX3gsIHJlc195LCByX3Bvc19rX3IgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0MnN0cmV0Y2hfZml4LlRyYW5zZm9ybShjb2wsIHJvdywgc3JjX2NvbF9sLCBzcmNfcm93X2wsIHJlc194LCByZXNfeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbF9sID49IDAgJiYgc3JjX2NvbF9sIDw9IHN0cmV0Y2hfd2lkdGggJiYgc3JjX3Jvd19sID49IDAgJiYgc3JjX3Jvd19sIDw9IHN0cmV0Y2hfaGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19jb2xfbCA9PSBzdHJldGNoX3dpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19jb2xfbC0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX3Jvd19sID09IHN0cmV0Y2hfaGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19yb3dfbC0tOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2NvbF9yID0gc3JjX2NvbF9sICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX3Jvd19yID0gc3JjX3Jvd19sICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbF9yID09IHN0cmV0Y2hfd2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2NvbF9yLS07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfcm93X3IgPT0gc3RyZXRjaF9oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3Jvd19yLS07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByb3dfb2Zmc2V0X2wgPSBzcmNfcm93X2wgKiBzdHJldGNoX3BpdGNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByb3dfb2Zmc2V0X3IgPSBzcmNfcm93X3IgKiBzdHJldGNoX3BpdGNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgcl9wb3NfcmVkX3lfciAgID0gX2JpbGluZWFyX2ludGVycG9sKHN0cmV0Y2hfYnVmLCByb3dfb2Zmc2V0X2wsIHJvd19vZmZzZXRfciwgc3JjX2NvbF9sLCBzcmNfY29sX3IsIHJlc194LCByZXNfeSwgQnBwLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHJfcG9zX2dyZWVuX21fciA9IF9iaWxpbmVhcl9pbnRlcnBvbChzdHJldGNoX2J1Ziwgcm93X29mZnNldF9sLCByb3dfb2Zmc2V0X3IsIHNyY19jb2xfbCwgc3JjX2NvbF9yLCByZXNfeCwgcmVzX3ksIEJwcCwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSByX3Bvc19ibHVlX2NfciAgPSBfYmlsaW5lYXJfaW50ZXJwb2woc3RyZXRjaF9idWYsIHJvd19vZmZzZXRfbCwgcm93X29mZnNldF9yLCBzcmNfY29sX2wsIHNyY19jb2xfciwgcmVzX3gsIHJlc195LCBCcHAsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiSGFzQWxwaGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUYgIT0gRlhESUJfQXJnYikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUYgPT0gRlhESUJfUmdiYSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zWzBdID0gcl9wb3NfYmx1ZV9jX3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3NbMV0gPSByX3Bvc19ncmVlbl9tX3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3NbMl0gPSByX3Bvc19yZWRfeV9yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByX3Bvc19rX3IgPSBfYmlsaW5lYXJfaW50ZXJwb2woc3RyZXRjaF9idWYsIHJvd19vZmZzZXRfbCwgcm93X29mZnNldF9yLCBzcmNfY29sX2wsIHNyY19jb2xfciwgcmVzX3gsIHJlc195LCBCcHAsIDMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooRlhfRFdPUkQqKWRlc3RfcG9zID0gRlhDTVlLX1RPRElCKENteWtFbmNvZGUocl9wb3NfYmx1ZV9jX3IsIHJfcG9zX2dyZWVuX21fciwgcl9wb3NfcmVkX3lfciwgcl9wb3Nfa19yKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHJfcG9zX2FfciA9IF9iaWxpbmVhcl9pbnRlcnBvbChzdHJldGNoX2J1Ziwgcm93X29mZnNldF9sLCByb3dfb2Zmc2V0X3IsIHNyY19jb2xfbCwgc3JjX2NvbF9yLCByZXNfeCwgcmVzX3ksIEJwcCwgMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKEZYX0RXT1JEKilkZXN0X3BvcyA9IEZYQVJHQl9UT0RJQihGWEFSR0JfTUFLRShyX3Bvc19hX3IsIHJfcG9zX3JlZF95X3IsIHJfcG9zX2dyZWVuX21fciwgcl9wb3NfYmx1ZV9jX3IpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJfcG9zX2tfciA9IDB4ZmY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1GID09IEZYRElCX0NteWthKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByX3Bvc19rX3IgPSBfYmlsaW5lYXJfaW50ZXJwb2woc3RyZXRjaF9idWYsIHJvd19vZmZzZXRfbCwgcm93X29mZnNldF9yLCBzcmNfY29sX2wsIHNyY19jb2xfciwgcmVzX3gsIHJlc195LCBCcHAsIDMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihGWF9EV09SRCopZGVzdF9wb3MgPSBGWENNWUtfVE9ESUIoQ215a0VuY29kZShyX3Bvc19ibHVlX2Nfciwgcl9wb3NfZ3JlZW5fbV9yLCByX3Bvc19yZWRfeV9yLCByX3Bvc19rX3IpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooRlhfRFdPUkQqKWRlc3RfcG9zID0gRlhBUkdCX1RPRElCKEZYQVJHQl9NQUtFKHJfcG9zX2tfciwgcl9wb3NfcmVkX3lfciwgcl9wb3NfZ3JlZW5fbV9yLCByX3Bvc19ibHVlX2NfcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3MgKz0gZGVzdEJwcDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9GbGFncyAmIEZYRElCX0JJQ1VCSUNfSU5URVJQT0wpIHsKKyAgICAgICAgICAgICAgICBDRlhfQmlsaW5lYXJNYXRyaXggcmVzdWx0MnN0cmV0Y2hfZml4KHJlc3VsdDJzdHJldGNoLCA4KTsKKyAgICAgICAgICAgICAgICBpbnQgcG9zX3BpeGVsWzhdOworICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fUmVzdWx0SGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgRlhfQllURSogZGVzdF9wb3MgPSAoRlhfQllURSopcFRyYW5zZm9ybWVkLT5HZXRTY2FubGluZShyb3cpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1Jlc3VsdFdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfY29sX2wsIHNyY19yb3dfbCwgcmVzX3gsIHJlc195LCByX3Bvc19rX3IgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0MnN0cmV0Y2hfZml4LlRyYW5zZm9ybShjb2wsIHJvdywgc3JjX2NvbF9sLCBzcmNfcm93X2wsIHJlc194LCByZXNfeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbF9sID49IDAgJiYgc3JjX2NvbF9sIDw9IHN0cmV0Y2hfd2lkdGggJiYgc3JjX3Jvd19sID49IDAgJiYgc3JjX3Jvd19sIDw9IHN0cmV0Y2hfaGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHVfd1s0XSwgdl93WzRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfY29sX2wgPT0gc3RyZXRjaF93aWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfY29sX2wtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19yb3dfbCA9PSBzdHJldGNoX2hlaWdodCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfcm93X2wtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2JpY3ViaWNfZ2V0X3Bvc193ZWlnaHQocG9zX3BpeGVsLCB1X3csIHZfdywgc3JjX2NvbF9sLCBzcmNfcm93X2wsIHJlc194LCByZXNfeSwgc3RyZXRjaF93aWR0aCwgc3RyZXRjaF9oZWlnaHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgcl9wb3NfcmVkX3lfciAgID0gX2JpY3ViaWNfaW50ZXJwb2woc3RyZXRjaF9idWYsIHN0cmV0Y2hfcGl0Y2gsIHBvc19waXhlbCwgdV93LCB2X3csIHJlc194LCByZXNfeSwgQnBwLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHJfcG9zX2dyZWVuX21fciA9IF9iaWN1YmljX2ludGVycG9sKHN0cmV0Y2hfYnVmLCBzdHJldGNoX3BpdGNoLCBwb3NfcGl4ZWwsIHVfdywgdl93LCByZXNfeCwgcmVzX3ksIEJwcCwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSByX3Bvc19ibHVlX2NfciAgPSBfYmljdWJpY19pbnRlcnBvbChzdHJldGNoX2J1Ziwgc3RyZXRjaF9waXRjaCwgcG9zX3BpeGVsLCB1X3csIHZfdywgcmVzX3gsIHJlc195LCBCcHAsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiSGFzQWxwaGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUYgIT0gRlhESUJfQXJnYikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUYgPT0gRlhESUJfUmdiYSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zWzBdID0gcl9wb3NfYmx1ZV9jX3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3NbMV0gPSByX3Bvc19ncmVlbl9tX3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3NbMl0gPSByX3Bvc19yZWRfeV9yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByX3Bvc19rX3IgPSBfYmljdWJpY19pbnRlcnBvbChzdHJldGNoX2J1Ziwgc3RyZXRjaF9waXRjaCwgcG9zX3BpeGVsLCB1X3csIHZfdywgcmVzX3gsIHJlc195LCBCcHAsIDMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooRlhfRFdPUkQqKWRlc3RfcG9zID0gRlhDTVlLX1RPRElCKENteWtFbmNvZGUocl9wb3NfYmx1ZV9jX3IsIHJfcG9zX2dyZWVuX21fciwgcl9wb3NfcmVkX3lfciwgcl9wb3Nfa19yKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIHJfcG9zX2FfciA9IF9iaWN1YmljX2ludGVycG9sKHN0cmV0Y2hfYnVmLCBzdHJldGNoX3BpdGNoLCBwb3NfcGl4ZWwsIHVfdywgdl93LCByZXNfeCwgcmVzX3ksIEJwcCwgMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKEZYX0RXT1JEKilkZXN0X3BvcyA9IEZYQVJHQl9UT0RJQihGWEFSR0JfTUFLRShyX3Bvc19hX3IsIHJfcG9zX3JlZF95X3IsIHJfcG9zX2dyZWVuX21fciwgcl9wb3NfYmx1ZV9jX3IpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJfcG9zX2tfciA9IDB4ZmY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1GID09IEZYRElCX0NteWthKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByX3Bvc19rX3IgPSBfYmljdWJpY19pbnRlcnBvbChzdHJldGNoX2J1Ziwgc3RyZXRjaF9waXRjaCwgcG9zX3BpeGVsLCB1X3csIHZfdywgcmVzX3gsIHJlc195LCBCcHAsIDMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihGWF9EV09SRCopZGVzdF9wb3MgPSBGWENNWUtfVE9ESUIoQ215a0VuY29kZShyX3Bvc19ibHVlX2Nfciwgcl9wb3NfZ3JlZW5fbV9yLCByX3Bvc19yZWRfeV9yLCByX3Bvc19rX3IpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooRlhfRFdPUkQqKWRlc3RfcG9zID0gRlhBUkdCX1RPRElCKEZYQVJHQl9NQUtFKHJfcG9zX2tfciwgcl9wb3NfcmVkX3lfciwgcl9wb3NfZ3JlZW5fbV9yLCByX3Bvc19ibHVlX2NfcikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3MgKz0gZGVzdEJwcDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQ1BERl9GaXhlZE1hdHJpeCByZXN1bHQyc3RyZXRjaF9maXgocmVzdWx0MnN0cmV0Y2gsIDgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG1fUmVzdWx0SGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgRlhfQllURSogZGVzdF9wb3MgPSAoRlhfQllURSopcFRyYW5zZm9ybWVkLT5HZXRTY2FubGluZShyb3cpOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCBtX1Jlc3VsdFdpZHRoOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfY29sLCBzcmNfcm93OworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0MnN0cmV0Y2hfZml4LlRyYW5zZm9ybShjb2wsIHJvdywgc3JjX2NvbCwgc3JjX3Jvdyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2NvbCA+PSAwICYmIHNyY19jb2wgPD0gc3RyZXRjaF93aWR0aCAmJiBzcmNfcm93ID49IDAgJiYgc3JjX3JvdyA8PSBzdHJldGNoX2hlaWdodCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfY29sID09IHN0cmV0Y2hfd2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2NvbCAtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19yb3cgPT0gc3RyZXRjaF9oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3JvdyAtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfcG9zID0gc3RyZXRjaF9idWYgKyBzcmNfcm93ICogc3RyZXRjaF9waXRjaCArIHNyY19jb2wgKiBCcHA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJIYXNBbHBoYSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtRiAhPSBGWERJQl9BcmdiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtRiA9PSBGWERJQl9SZ2JhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3NbMF0gPSBzcmNfcG9zWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfcG9zWzFdID0gc3JjX3Bvc1sxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3Bvc1syXSA9IHNyY19wb3NbMl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooRlhfRFdPUkQqKWRlc3RfcG9zID0gRlhDTVlLX1RPRElCKENteWtFbmNvZGUoc3JjX3Bvc1swXSwgc3JjX3Bvc1sxXSwgc3JjX3Bvc1syXSwgc3JjX3Bvc1szXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihGWF9EV09SRCopZGVzdF9wb3MgPSBGWEFSR0JfVE9ESUIoRlhBUkdCX01BS0Uoc3JjX3Bvc1szXSwgc3JjX3Bvc1syXSwgc3JjX3Bvc1sxXSwgc3JjX3Bvc1swXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUYgPT0gRlhESUJfQ215a2EpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooRlhfRFdPUkQqKWRlc3RfcG9zID0gRlhDTVlLX1RPRElCKENteWtFbmNvZGUoc3JjX3Bvc1swXSwgc3JjX3Bvc1sxXSwgc3JjX3Bvc1syXSwgc3JjX3Bvc1szXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihGWF9EV09SRCopZGVzdF9wb3MgPSBGWEFSR0JfVE9ESUIoRlhBUkdCX01BS0UoMHhmZiwgc3JjX3Bvc1syXSwgc3JjX3Bvc1sxXSwgc3JjX3Bvc1swXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9wb3MgKz0gZGVzdEJwcDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBtX1N0b3Jlci5SZXBsYWNlKHBUcmFuc2Zvcm1lZCk7CisgICAgcmV0dXJuIEZBTFNFOworfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9nZS9meF9nZS5jcHAgYi9jb3JlL3NyYy9meGdlL2dlL2Z4X2dlLmNwcAppbmRleCBkZjIwMGQ1Li5kMDQ0ZDcyIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL2dlL2Z4X2dlLmNwcAorKysgYi9jb3JlL3NyYy9meGdlL2dlL2Z4X2dlLmNwcApAQCAtMSw3OSArMSw3OSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZS5oIg0KLSNpbmNsdWRlICJ0ZXh0X2ludC5oIg0KLXN0YXRpYyBDRlhfR0VNb2R1bGUqIGdfcEdFTW9kdWxlID0gTlVMTDsNCi1DRlhfR0VNb2R1bGU6OkNGWF9HRU1vZHVsZSgpDQotew0KLSAgICBtX3BGb250Q2FjaGUgPSBOVUxMOw0KLSAgICBtX3BGb250TWdyID0gTlVMTDsNCi0gICAgbV9GVExpYnJhcnkgPSBOVUxMOw0KLSAgICBtX3BDb2RlY01vZHVsZSA9IE5VTEw7DQotICAgIG1fcFBsYXRmb3JtRGF0YSA9IE5VTEw7DQotfQ0KLUNGWF9HRU1vZHVsZTo6fkNGWF9HRU1vZHVsZSgpDQotew0KLSAgICBpZiAobV9wRm9udENhY2hlKSB7DQotICAgICAgICBkZWxldGUgbV9wRm9udENhY2hlOw0KLSAgICB9DQotICAgIG1fcEZvbnRDYWNoZSA9IE5VTEw7DQotICAgIGlmIChtX3BGb250TWdyKSB7DQotICAgICAgICBkZWxldGUgbV9wRm9udE1ncjsNCi0gICAgfQ0KLSAgICBtX3BGb250TWdyID0gTlVMTDsNCi0gICAgRGVzdHJveVBsYXRmb3JtKCk7DQotfQ0KLUNGWF9HRU1vZHVsZSogQ0ZYX0dFTW9kdWxlOjpHZXQoKQ0KLXsNCi0gICAgcmV0dXJuIGdfcEdFTW9kdWxlOw0KLX0NCi12b2lkIENGWF9HRU1vZHVsZTo6Q3JlYXRlKCkNCi17DQotICAgIGdfcEdFTW9kdWxlID0gRlhfTkVXIENGWF9HRU1vZHVsZTsNCi0gICAgaWYgKCFnX3BHRU1vZHVsZSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGdfcEdFTW9kdWxlLT5tX3BGb250TWdyID0gRlhfTkVXIENGWF9Gb250TWdyOw0KLSAgICBnX3BHRU1vZHVsZS0+SW5pdFBsYXRmb3JtKCk7DQotICAgIGdfcEdFTW9kdWxlLT5TZXRUZXh0R2FtbWEoMi4yZik7DQotfQ0KLXZvaWQgQ0ZYX0dFTW9kdWxlOjpVc2UoQ0ZYX0dFTW9kdWxlKiBwTW9kdWxlKQ0KLXsNCi0gICAgZ19wR0VNb2R1bGUgPSBwTW9kdWxlOw0KLX0NCi12b2lkIENGWF9HRU1vZHVsZTo6RGVzdHJveSgpDQotew0KLSAgICBpZiAoZ19wR0VNb2R1bGUpIHsNCi0gICAgICAgIGRlbGV0ZSBnX3BHRU1vZHVsZTsNCi0gICAgfQ0KLSAgICBnX3BHRU1vZHVsZSA9IE5VTEw7DQotfQ0KLUNGWF9Gb250Q2FjaGUqIENGWF9HRU1vZHVsZTo6R2V0Rm9udENhY2hlKCkNCi17DQotICAgIGlmIChtX3BGb250Q2FjaGUgPT0gTlVMTCkgew0KLSAgICAgICAgbV9wRm9udENhY2hlID0gRlhfTkVXIENGWF9Gb250Q2FjaGUoKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wRm9udENhY2hlOw0KLX0NCi12b2lkIENGWF9HRU1vZHVsZTo6U2V0VGV4dEdhbW1hKEZYX0ZMT0FUIGdhbW1hVmFsdWUpDQotew0KLSAgICBnYW1tYVZhbHVlIC89IDIuMmY7DQotICAgIGludCBpID0gMDsNCi0gICAgd2hpbGUgKGkgPCAyNTYpIHsNCi0gICAgICAgIG1fR2FtbWFWYWx1ZVtpXSA9IChGWF9CWVRFKShGWFNZU19wb3coKEZYX0ZMT0FUKWkgLyAyNTUsIGdhbW1hVmFsdWUpICogMjU1LjBmICsgMC41Zik7DQotICAgICAgICBpKys7DQotICAgIH0NCi19DQotRlhfTFBDQllURSBDRlhfR0VNb2R1bGU6OkdldFRleHRHYW1tYVRhYmxlKCkNCi17DQotICAgIHJldHVybiBtX0dhbW1hVmFsdWU7DQotfQ0KLXZvaWQgQ0ZYX0dFTW9kdWxlOjpTZXRFeHRGb250TWFwcGVyKElGWF9Gb250TWFwcGVyKiBwRm9udE1hcHBlcikNCi17DQotICAgIEdldEZvbnRNZ3IoKS0+bV9wRXh0TWFwcGVyID0gcEZvbnRNYXBwZXI7DQotICAgIHBGb250TWFwcGVyLT5tX3BGb250TWdyID0gbV9wRm9udE1ncjsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZS5oIgorI2luY2x1ZGUgInRleHRfaW50LmgiCitzdGF0aWMgQ0ZYX0dFTW9kdWxlKiBnX3BHRU1vZHVsZSA9IE5VTEw7CitDRlhfR0VNb2R1bGU6OkNGWF9HRU1vZHVsZSgpCit7CisgICAgbV9wRm9udENhY2hlID0gTlVMTDsKKyAgICBtX3BGb250TWdyID0gTlVMTDsKKyAgICBtX0ZUTGlicmFyeSA9IE5VTEw7CisgICAgbV9wQ29kZWNNb2R1bGUgPSBOVUxMOworICAgIG1fcFBsYXRmb3JtRGF0YSA9IE5VTEw7Cit9CitDRlhfR0VNb2R1bGU6On5DRlhfR0VNb2R1bGUoKQoreworICAgIGlmIChtX3BGb250Q2FjaGUpIHsKKyAgICAgICAgZGVsZXRlIG1fcEZvbnRDYWNoZTsKKyAgICB9CisgICAgbV9wRm9udENhY2hlID0gTlVMTDsKKyAgICBpZiAobV9wRm9udE1ncikgeworICAgICAgICBkZWxldGUgbV9wRm9udE1ncjsKKyAgICB9CisgICAgbV9wRm9udE1nciA9IE5VTEw7CisgICAgRGVzdHJveVBsYXRmb3JtKCk7Cit9CitDRlhfR0VNb2R1bGUqIENGWF9HRU1vZHVsZTo6R2V0KCkKK3sKKyAgICByZXR1cm4gZ19wR0VNb2R1bGU7Cit9Cit2b2lkIENGWF9HRU1vZHVsZTo6Q3JlYXRlKCkKK3sKKyAgICBnX3BHRU1vZHVsZSA9IEZYX05FVyBDRlhfR0VNb2R1bGU7CisgICAgaWYgKCFnX3BHRU1vZHVsZSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGdfcEdFTW9kdWxlLT5tX3BGb250TWdyID0gRlhfTkVXIENGWF9Gb250TWdyOworICAgIGdfcEdFTW9kdWxlLT5Jbml0UGxhdGZvcm0oKTsKKyAgICBnX3BHRU1vZHVsZS0+U2V0VGV4dEdhbW1hKDIuMmYpOworfQordm9pZCBDRlhfR0VNb2R1bGU6OlVzZShDRlhfR0VNb2R1bGUqIHBNb2R1bGUpCit7CisgICAgZ19wR0VNb2R1bGUgPSBwTW9kdWxlOworfQordm9pZCBDRlhfR0VNb2R1bGU6OkRlc3Ryb3koKQoreworICAgIGlmIChnX3BHRU1vZHVsZSkgeworICAgICAgICBkZWxldGUgZ19wR0VNb2R1bGU7CisgICAgfQorICAgIGdfcEdFTW9kdWxlID0gTlVMTDsKK30KK0NGWF9Gb250Q2FjaGUqIENGWF9HRU1vZHVsZTo6R2V0Rm9udENhY2hlKCkKK3sKKyAgICBpZiAobV9wRm9udENhY2hlID09IE5VTEwpIHsKKyAgICAgICAgbV9wRm9udENhY2hlID0gRlhfTkVXIENGWF9Gb250Q2FjaGUoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fcEZvbnRDYWNoZTsKK30KK3ZvaWQgQ0ZYX0dFTW9kdWxlOjpTZXRUZXh0R2FtbWEoRlhfRkxPQVQgZ2FtbWFWYWx1ZSkKK3sKKyAgICBnYW1tYVZhbHVlIC89IDIuMmY7CisgICAgaW50IGkgPSAwOworICAgIHdoaWxlIChpIDwgMjU2KSB7CisgICAgICAgIG1fR2FtbWFWYWx1ZVtpXSA9IChGWF9CWVRFKShGWFNZU19wb3coKEZYX0ZMT0FUKWkgLyAyNTUsIGdhbW1hVmFsdWUpICogMjU1LjBmICsgMC41Zik7CisgICAgICAgIGkrKzsKKyAgICB9Cit9CitGWF9MUENCWVRFIENGWF9HRU1vZHVsZTo6R2V0VGV4dEdhbW1hVGFibGUoKQoreworICAgIHJldHVybiBtX0dhbW1hVmFsdWU7Cit9Cit2b2lkIENGWF9HRU1vZHVsZTo6U2V0RXh0Rm9udE1hcHBlcihJRlhfRm9udE1hcHBlciogcEZvbnRNYXBwZXIpCit7CisgICAgR2V0Rm9udE1ncigpLT5tX3BFeHRNYXBwZXIgPSBwRm9udE1hcHBlcjsKKyAgICBwRm9udE1hcHBlci0+bV9wRm9udE1nciA9IG1fcEZvbnRNZ3I7Cit9CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGdlL2dlL2Z4X2dlX2RldmljZS5jcHAgYi9jb3JlL3NyYy9meGdlL2dlL2Z4X2dlX2RldmljZS5jcHAKaW5kZXggOGY3Y2NkYi4uOWMyNjhiNSAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhnZS9nZS9meF9nZV9kZXZpY2UuY3BwCisrKyBiL2NvcmUvc3JjL2Z4Z2UvZ2UvZnhfZ2VfZGV2aWNlLmNwcApAQCAtMSw0MDUgKzEsNDA1IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiDQotQ0ZYX1JlbmRlckRldmljZTo6Q0ZYX1JlbmRlckRldmljZSgpDQotew0KLSAgICBtX3BEZXZpY2VEcml2ZXIgPSBOVUxMOw0KLSAgICBtX3BCaXRtYXAgPSBOVUxMOw0KLX0NCi1DRlhfUmVuZGVyRGV2aWNlOjp+Q0ZYX1JlbmRlckRldmljZSgpDQotew0KLSAgICBpZiAobV9wRGV2aWNlRHJpdmVyKSB7DQotICAgICAgICBkZWxldGUgbV9wRGV2aWNlRHJpdmVyOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0ZYX1JlbmRlckRldmljZTo6U2V0RGV2aWNlRHJpdmVyKElGWF9SZW5kZXJEZXZpY2VEcml2ZXIqIHBEcml2ZXIpDQotew0KLSAgICBpZiAobV9wRGV2aWNlRHJpdmVyKSB7DQotICAgICAgICBkZWxldGUgbV9wRGV2aWNlRHJpdmVyOw0KLSAgICB9DQotICAgIG1fcERldmljZURyaXZlciA9IHBEcml2ZXI7DQotICAgIEluaXREZXZpY2VJbmZvKCk7DQotfQ0KLXZvaWQgQ0ZYX1JlbmRlckRldmljZTo6SW5pdERldmljZUluZm8oKQ0KLXsNCi0gICAgQVNTRVJUKG1fcERldmljZURyaXZlciAhPSBOVUxMKTsNCi0gICAgbV9XaWR0aCA9IG1fcERldmljZURyaXZlci0+R2V0RGV2aWNlQ2FwcyhGWERDX1BJWEVMX1dJRFRIKTsNCi0gICAgbV9IZWlnaHQgPSBtX3BEZXZpY2VEcml2ZXItPkdldERldmljZUNhcHMoRlhEQ19QSVhFTF9IRUlHSFQpOw0KLSAgICBtX2JwcCA9IG1fcERldmljZURyaXZlci0+R2V0RGV2aWNlQ2FwcyhGWERDX0JJVFNfUElYRUwpOw0KLSAgICBtX1JlbmRlckNhcHMgPSBtX3BEZXZpY2VEcml2ZXItPkdldERldmljZUNhcHMoRlhEQ19SRU5ERVJfQ0FQUyk7DQotICAgIG1fRGV2aWNlQ2xhc3MgPSBtX3BEZXZpY2VEcml2ZXItPkdldERldmljZUNhcHMoRlhEQ19ERVZJQ0VfQ0xBU1MpOw0KLSAgICBpZiAoIW1fcERldmljZURyaXZlci0+R2V0Q2xpcEJveCgmbV9DbGlwQm94KSkgew0KLSAgICAgICAgbV9DbGlwQm94LmxlZnQgPSAwOw0KLSAgICAgICAgbV9DbGlwQm94LnRvcCA9IDA7DQotICAgICAgICBtX0NsaXBCb3gucmlnaHQgPSBtX1dpZHRoOw0KLSAgICAgICAgbV9DbGlwQm94LmJvdHRvbSA9IG1fSGVpZ2h0Ow0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ0ZYX1JlbmRlckRldmljZTo6U3RhcnRSZW5kZXJpbmcoKQ0KLXsNCi0gICAgcmV0dXJuIG1fcERldmljZURyaXZlci0+U3RhcnRSZW5kZXJpbmcoKTsNCi19DQotdm9pZCBDRlhfUmVuZGVyRGV2aWNlOjpFbmRSZW5kZXJpbmcoKQ0KLXsNCi0gICAgbV9wRGV2aWNlRHJpdmVyLT5FbmRSZW5kZXJpbmcoKTsNCi19DQotdm9pZCBDRlhfUmVuZGVyRGV2aWNlOjpTYXZlU3RhdGUoKQ0KLXsNCi0gICAgbV9wRGV2aWNlRHJpdmVyLT5TYXZlU3RhdGUoKTsNCi19DQotdm9pZCBDRlhfUmVuZGVyRGV2aWNlOjpSZXN0b3JlU3RhdGUoRlhfQk9PTCBiS2VlcFNhdmVkKQ0KLXsNCi0gICAgbV9wRGV2aWNlRHJpdmVyLT5SZXN0b3JlU3RhdGUoYktlZXBTYXZlZCk7DQotICAgIFVwZGF0ZUNsaXBCb3goKTsNCi19DQotaW50IENGWF9SZW5kZXJEZXZpY2U6OkdldERldmljZUNhcHMoaW50IGNhcHNfaWQpIGNvbnN0DQotew0KLSAgICByZXR1cm4gbV9wRGV2aWNlRHJpdmVyLT5HZXREZXZpY2VDYXBzKGNhcHNfaWQpOw0KLX0NCi1DRlhfTWF0cml4IENGWF9SZW5kZXJEZXZpY2U6OkdldENUTSgpIGNvbnN0DQotew0KLSAgICByZXR1cm4gbV9wRGV2aWNlRHJpdmVyLT5HZXRDVE0oKTsNCi19DQotRlhfQk9PTCBDRlhfUmVuZGVyRGV2aWNlOjpDcmVhdGVDb21wYXRpYmxlQml0bWFwKENGWF9ESUJpdG1hcCogcERJQiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdA0KLXsNCi0gICAgaWYgKG1fUmVuZGVyQ2FwcyAmIEZYUkNfQ01ZS19PVVRQVVQpIHsNCi0gICAgICAgIHJldHVybiBwRElCLT5DcmVhdGUod2lkdGgsIGhlaWdodCwgbV9SZW5kZXJDYXBzICYgRlhSQ19BTFBIQV9PVVRQVVQgPyBGWERJQl9DbXlrYSA6IEZYRElCX0NteWspOw0KLSAgICB9IGVsc2UgaWYgKG1fUmVuZGVyQ2FwcyAmIEZYUkNfQllURU1BU0tfT1VUUFVUKSB7DQotICAgICAgICByZXR1cm4gcERJQi0+Q3JlYXRlKHdpZHRoLCBoZWlnaHQsIEZYRElCXzhicHBNYXNrKTsNCi0gICAgfSBlbHNlDQotI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXw0KLSAgICAgICAgcmV0dXJuIHBESUItPkNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCBtX1JlbmRlckNhcHMgJiBGWFJDX0FMUEhBX09VVFBVVCA/IEZYRElCX0FyZ2IgOiBGWERJQl9SZ2IzMik7DQotI2Vsc2UNCi0gICAgICAgIHJldHVybiBwRElCLT5DcmVhdGUod2lkdGgsIGhlaWdodCwgbV9SZW5kZXJDYXBzICYgRlhSQ19BTFBIQV9PVVRQVVQgPyBGWERJQl9BcmdiIDogRlhESUJfUmdiKTsNCi0jZW5kaWYNCi19DQotRlhfQk9PTCBDRlhfUmVuZGVyRGV2aWNlOjpTZXRDbGlwX1BhdGhGaWxsKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLA0KLSAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsDQotICAgICAgICBpbnQgZmlsbF9tb2RlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KLXsNCi0gICAgaWYgKCFtX3BEZXZpY2VEcml2ZXItPlNldENsaXBfUGF0aEZpbGwocFBhdGhEYXRhLCBwT2JqZWN0MkRldmljZSwgZmlsbF9tb2RlKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIFVwZGF0ZUNsaXBCb3goKTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ0ZYX1JlbmRlckRldmljZTo6U2V0Q2xpcF9QYXRoU3Ryb2tlKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLA0KLSAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsDQotICAgICAgICBjb25zdCBDRlhfR3JhcGhTdGF0ZURhdGEqIHBHcmFwaFN0YXRlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQotew0KLSAgICBpZiAoIW1fcERldmljZURyaXZlci0+U2V0Q2xpcF9QYXRoU3Ryb2tlKHBQYXRoRGF0YSwgcE9iamVjdDJEZXZpY2UsIHBHcmFwaFN0YXRlKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIFVwZGF0ZUNsaXBCb3goKTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ0ZYX1JlbmRlckRldmljZTo6U2V0Q2xpcF9SZWN0KGNvbnN0IEZYX1JFQ1QqIHBSZWN0KQ0KLXsNCi0gICAgQ0ZYX1BhdGhEYXRhIHBhdGg7DQotICAgIHBhdGguQXBwZW5kUmVjdCgoRlhfRkxPQVQpKHBSZWN0LT5sZWZ0KSwgKEZYX0ZMT0FUKShwUmVjdC0+Ym90dG9tKSwgKEZYX0ZMT0FUKShwUmVjdC0+cmlnaHQpLCAoRlhfRkxPQVQpKHBSZWN0LT50b3ApKTsNCi0gICAgaWYgKCFTZXRDbGlwX1BhdGhGaWxsKCZwYXRoLCBOVUxMLCBGWEZJTExfV0lORElORykpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBVcGRhdGVDbGlwQm94KCk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi12b2lkIENGWF9SZW5kZXJEZXZpY2U6OlVwZGF0ZUNsaXBCb3goKQ0KLXsNCi0gICAgaWYgKG1fcERldmljZURyaXZlci0+R2V0Q2xpcEJveCgmbV9DbGlwQm94KSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fQ2xpcEJveC5sZWZ0ID0gMDsNCi0gICAgbV9DbGlwQm94LnRvcCA9IDA7DQotICAgIG1fQ2xpcEJveC5yaWdodCA9IG1fV2lkdGg7DQotICAgIG1fQ2xpcEJveC5ib3R0b20gPSBtX0hlaWdodDsNCi19DQotRlhfQk9PTCBDRlhfUmVuZGVyRGV2aWNlOjpEcmF3UGF0aChjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGZpbGxfY29sb3IsIEZYX0RXT1JEIHN0cm9rZV9jb2xvciwgaW50IGZpbGxfbW9kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQgYmxlbmRfdHlwZSkNCi17DQotICAgIEZYX0JZVEUgZmlsbF9hbHBoYSwgc3Ryb2tlX2FscGhhOw0KLSAgICBpZiAoRlhHRVRGTEFHX0NPTE9SVFlQRShhbHBoYV9mbGFnKSkgew0KLSAgICAgICAgZmlsbF9hbHBoYSA9IEZYR0VURkxBR19BTFBIQV9GSUxMKGFscGhhX2ZsYWcpOw0KLSAgICAgICAgc3Ryb2tlX2FscGhhID0gRlhHRVRGTEFHX0FMUEhBX1NUUk9LRShhbHBoYV9mbGFnKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGZpbGxfYWxwaGEgPSBGWEFSR0JfQShmaWxsX2NvbG9yKTsNCi0gICAgICAgIHN0cm9rZV9hbHBoYSA9IEZYQVJHQl9BKHN0cm9rZV9jb2xvcik7DQotICAgIH0NCi0gICAgaWYgKChmaWxsX21vZGUgJiAzKSA9PSAwKSB7DQotICAgICAgICBmaWxsX2FscGhhID0gMDsNCi0gICAgfQ0KLSAgICBpZiAocEdyYXBoU3RhdGUgPT0gTlVMTCkgew0KLSAgICAgICAgc3Ryb2tlX2FscGhhID0gMDsNCi0gICAgfQ0KLSAgICBpZiAoc3Ryb2tlX2FscGhhID09IDAgJiYgcFBhdGhEYXRhLT5HZXRQb2ludENvdW50KCkgPT0gMikgew0KLSAgICAgICAgRlhfUEFUSFBPSU5UKiBwUG9pbnRzID0gcFBhdGhEYXRhLT5HZXRQb2ludHMoKTsNCi0gICAgICAgIEZYX0ZMT0FUIHgxLCB4MiwgeTEsIHkyOw0KLSAgICAgICAgaWYgKHBPYmplY3QyRGV2aWNlKSB7DQotICAgICAgICAgICAgcE9iamVjdDJEZXZpY2UtPlRyYW5zZm9ybShwUG9pbnRzWzBdLm1fUG9pbnRYLCBwUG9pbnRzWzBdLm1fUG9pbnRZLCB4MSwgeTEpOw0KLSAgICAgICAgICAgIHBPYmplY3QyRGV2aWNlLT5UcmFuc2Zvcm0ocFBvaW50c1sxXS5tX1BvaW50WCwgcFBvaW50c1sxXS5tX1BvaW50WSwgeDIsIHkyKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgeDEgPSBwUG9pbnRzWzBdLm1fUG9pbnRYOw0KLSAgICAgICAgICAgIHkxID0gcFBvaW50c1swXS5tX1BvaW50WTsNCi0gICAgICAgICAgICB4MiA9IHBQb2ludHNbMV0ubV9Qb2ludFg7DQotICAgICAgICAgICAgeTIgPSBwUG9pbnRzWzFdLm1fUG9pbnRZOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRHJhd0Nvc21ldGljTGluZSh4MSwgeTEsIHgyLCB5MiwgZmlsbF9jb2xvciwgZmlsbF9tb2RlLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtLCBibGVuZF90eXBlKTsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIGlmICgocFBhdGhEYXRhLT5HZXRQb2ludENvdW50KCkgPT0gNSB8fCBwUGF0aERhdGEtPkdldFBvaW50Q291bnQoKSA9PSA0KSAmJiBzdHJva2VfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgQ0ZYX0Zsb2F0UmVjdCByZWN0X2Y7DQotICAgICAgICBpZiAoIShmaWxsX21vZGUgJiBGWEZJTExfUkVDVF9BQSkgJiYgcFBhdGhEYXRhLT5Jc1JlY3QocE9iamVjdDJEZXZpY2UsICZyZWN0X2YpKSB7DQotICAgICAgICAgICAgRlhfUkVDVCByZWN0X2kgPSByZWN0X2YuR2V0T3V0dGVyUmVjdCgpOw0KLSAgICAgICAgICAgIGludCB3aWR0aCA9IChpbnQpRlhTWVNfY2VpbChyZWN0X2YucmlnaHQgLSByZWN0X2YubGVmdCk7DQotICAgICAgICAgICAgaWYgKHdpZHRoIDwgMSkgew0KLSAgICAgICAgICAgICAgICB3aWR0aCA9IDE7DQotICAgICAgICAgICAgICAgIGlmIChyZWN0X2kubGVmdCA9PSByZWN0X2kucmlnaHQpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJlY3RfaS5yaWdodCArKzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpbnQgaGVpZ2h0ID0gKGludClGWFNZU19jZWlsKHJlY3RfZi50b3AgLSByZWN0X2YuYm90dG9tKTsNCi0gICAgICAgICAgICBpZiAoaGVpZ2h0IDwgMSkgew0KLSAgICAgICAgICAgICAgICBoZWlnaHQgPSAxOw0KLSAgICAgICAgICAgICAgICBpZiAocmVjdF9pLmJvdHRvbSA9PSByZWN0X2kudG9wKSB7DQotICAgICAgICAgICAgICAgICAgICByZWN0X2kuYm90dG9tICsrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChyZWN0X2kuV2lkdGgoKSA+PSB3aWR0aCArIDEpIHsNCi0gICAgICAgICAgICAgICAgaWYgKHJlY3RfZi5sZWZ0IC0gKEZYX0ZMT0FUKShyZWN0X2kubGVmdCkgPiAoRlhfRkxPQVQpKHJlY3RfaS5yaWdodCkgLSByZWN0X2YucmlnaHQpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJlY3RfaS5sZWZ0ICsrOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgcmVjdF9pLnJpZ2h0IC0tOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChyZWN0X2kuSGVpZ2h0KCkgPj0gaGVpZ2h0ICsgMSkgew0KLSAgICAgICAgICAgICAgICBpZiAocmVjdF9mLnRvcCAtIChGWF9GTE9BVCkocmVjdF9pLnRvcCkgPiAoRlhfRkxPQVQpKHJlY3RfaS5ib3R0b20pIC0gcmVjdF9mLmJvdHRvbSkgew0KLSAgICAgICAgICAgICAgICAgICAgcmVjdF9pLnRvcCArKzsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIHJlY3RfaS5ib3R0b20gLS07DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKEZpbGxSZWN0KCZyZWN0X2ksIGZpbGxfY29sb3IsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0sIGJsZW5kX3R5cGUpKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZigoZmlsbF9tb2RlICYgMykgJiYgc3Ryb2tlX2FscGhhID09IDAgJiYgIShmaWxsX21vZGUgJiBGWF9GSUxMX1NUUk9LRSkgJiYgIShmaWxsX21vZGUgJiBGWF9GSUxMX1RFWFRfTU9ERSkpIHsNCi0gICAgICAgIENGWF9QYXRoRGF0YSBuZXdQYXRoOw0KLSAgICAgICAgRlhfQk9PTCBiVGhpbiA9IEZBTFNFOw0KLSAgICAgICAgaWYgKHBQYXRoRGF0YS0+R2V0WmVyb0FyZWFQYXRoKG5ld1BhdGgsIChDRlhfTWF0cml4KilwT2JqZWN0MkRldmljZSwgYlRoaW4sIG1fcERldmljZURyaXZlci0+R2V0RHJpdmVyVHlwZSgpKSkgew0KLSAgICAgICAgICAgIENGWF9HcmFwaFN0YXRlRGF0YSBncmFwaFN0YXRlOw0KLSAgICAgICAgICAgIGdyYXBoU3RhdGUubV9MaW5lV2lkdGggPSAwLjBmOw0KLSAgICAgICAgICAgIEZYX0RXT1JEIHN0cm9rZWNvbG9yID0gZmlsbF9jb2xvcjsNCi0gICAgICAgICAgICBpZiAoYlRoaW4pIHsNCi0gICAgICAgICAgICAgICAgaWYgKEZYR0VURkxBR19DT0xPUlRZUEUoYWxwaGFfZmxhZykpIHsNCi0gICAgICAgICAgICAgICAgICAgIEZYU0VURkxBR19BTFBIQV9TVFJPS0UoYWxwaGFfZmxhZywgZmlsbF9hbHBoYSA+PiAyKTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIHN0cm9rZWNvbG9yID0gKCgoZmlsbF9hbHBoYSA+PiAyKSA8PCAyNCkgfCAoc3Ryb2tlY29sb3IgJiAweDAwZmZmZmZmKSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCA9IE5VTEw7DQotICAgICAgICAgICAgaWYgKHBPYmplY3QyRGV2aWNlICYmICFwT2JqZWN0MkRldmljZS0+SXNJZGVudGl0eSgpKSB7DQotICAgICAgICAgICAgICAgIHBNYXRyaXggPSAoQ0ZYX0FmZmluZU1hdHJpeCopcE9iamVjdDJEZXZpY2U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGludCBzbW9vdGhfcGF0aCA9IEZYX1pFUk9BUkVBX0ZJTEw7DQotICAgICAgICAgICAgaWYgKGZpbGxfbW9kZSAmIEZYRklMTF9OT1BBVEhTTU9PVEgpIHsNCi0gICAgICAgICAgICAgICAgc21vb3RoX3BhdGggfD0gRlhGSUxMX05PUEFUSFNNT09USDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9wRGV2aWNlRHJpdmVyLT5EcmF3UGF0aCgmbmV3UGF0aCwgcE1hdHJpeCwgJmdyYXBoU3RhdGUsIDAsIHN0cm9rZWNvbG9yLCBzbW9vdGhfcGF0aCwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSwgYmxlbmRfdHlwZSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKChmaWxsX21vZGUgJiAzKSAmJiBmaWxsX2FscGhhICYmIHN0cm9rZV9hbHBoYSA8IDB4ZmYgJiYgKGZpbGxfbW9kZSAmIEZYX0ZJTExfU1RST0tFKSkgew0KLSAgICAgICAgaWYgKCEobV9SZW5kZXJDYXBzICYgRlhSQ19HRVRfQklUUykpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBDRlhfRmxvYXRSZWN0IGJib3g7DQotICAgICAgICBpZiAocEdyYXBoU3RhdGUpIHsNCi0gICAgICAgICAgICBiYm94ID0gcFBhdGhEYXRhLT5HZXRCb3VuZGluZ0JveChwR3JhcGhTdGF0ZS0+bV9MaW5lV2lkdGgsIHBHcmFwaFN0YXRlLT5tX01pdGVyTGltaXQpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBiYm94ID0gcFBhdGhEYXRhLT5HZXRCb3VuZGluZ0JveCgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBPYmplY3QyRGV2aWNlKSB7DQotICAgICAgICAgICAgYmJveC5UcmFuc2Zvcm0ocE9iamVjdDJEZXZpY2UpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ0ZYX01hdHJpeCBjdG0gPSBHZXRDVE0oKTsNCi0gICAgICAgIEZYX0ZMT0FUIGZTY2FsZVggPSBGWFNZU19mYWJzKGN0bS5hKTsNCi0gICAgICAgIEZYX0ZMT0FUIGZTY2FsZVkgPSBGWFNZU19mYWJzKGN0bS5kKTsNCi0gICAgICAgIEZYX1JFQ1QgcmVjdCA9IGJib3guR2V0T3V0dGVyUmVjdCgpOw0KLSAgICAgICAgQ0ZYX0RJQml0bWFwIGJpdG1hcCwgQmFja2Ryb3A7DQotICAgICAgICBpZiAoIUNyZWF0ZUNvbXBhdGlibGVCaXRtYXAoJmJpdG1hcCwgRlhTWVNfcm91bmQocmVjdC5XaWR0aCgpICogZlNjYWxlWCksIEZYU1lTX3JvdW5kKHJlY3QuSGVpZ2h0KCkgKiBmU2NhbGVZKSkpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBpZiAoYml0bWFwLkhhc0FscGhhKCkpIHsNCi0gICAgICAgICAgICBiaXRtYXAuQ2xlYXIoMCk7DQotICAgICAgICAgICAgQmFja2Ryb3AuQ29weSgmYml0bWFwKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYgKCFtX3BEZXZpY2VEcml2ZXItPkdldERJQml0cygmYml0bWFwLCByZWN0LmxlZnQsIHJlY3QudG9wLCBOVUxMKSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIEJhY2tkcm9wLkNvcHkoJmJpdG1hcCk7DQotICAgICAgICB9DQotICAgICAgICBDRlhfRnhnZURldmljZSBiaXRtYXBfZGV2aWNlOw0KLSAgICAgICAgYml0bWFwX2RldmljZS5BdHRhY2goJmJpdG1hcCwgMCwgRkFMU0UsICZCYWNrZHJvcCwgVFJVRSk7DQotICAgICAgICBDRlhfQWZmaW5lTWF0cml4IG1hdHJpeDsNCi0gICAgICAgIGlmIChwT2JqZWN0MkRldmljZSkgew0KLSAgICAgICAgICAgIG1hdHJpeCA9ICpwT2JqZWN0MkRldmljZTsNCi0gICAgICAgIH0NCi0gICAgICAgIG1hdHJpeC5UcmFuc2xhdGVJKC1yZWN0LmxlZnQsIC1yZWN0LnRvcCk7DQotICAgICAgICBtYXRyaXguQ29uY2F0KGZTY2FsZVgsIDAsIDAsIGZTY2FsZVksIDAsIDApOw0KLSAgICAgICAgaWYgKCFiaXRtYXBfZGV2aWNlLkdldERldmljZURyaXZlcigpLT5EcmF3UGF0aChwUGF0aERhdGEsICZtYXRyaXgsIHBHcmFwaFN0YXRlLCBmaWxsX2NvbG9yLCBzdHJva2VfY29sb3IsIGZpbGxfbW9kZSwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSwgYmxlbmRfdHlwZSkpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBGWF9SRUNUIHNyY19yZWN0KDAsIDAsIEZYU1lTX3JvdW5kKHJlY3QuV2lkdGgoKSAqIGZTY2FsZVgpLCBGWFNZU19yb3VuZChyZWN0LkhlaWdodCgpICogZlNjYWxlWSkpOw0KLSAgICAgICAgcmV0dXJuIG1fcERldmljZURyaXZlci0+U2V0RElCaXRzKCZiaXRtYXAsIDAsICZzcmNfcmVjdCwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgRlhESUJfQkxFTkRfTk9STUFMKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wRGV2aWNlRHJpdmVyLT5EcmF3UGF0aChwUGF0aERhdGEsIHBPYmplY3QyRGV2aWNlLCBwR3JhcGhTdGF0ZSwgZmlsbF9jb2xvciwgc3Ryb2tlX2NvbG9yLCBmaWxsX21vZGUsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0sIGJsZW5kX3R5cGUpOw0KLX0NCi1GWF9CT09MIENGWF9SZW5kZXJEZXZpY2U6OlNldFBpeGVsKGludCB4LCBpbnQgeSwgRlhfRFdPUkQgY29sb3IsIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQ0KLXsNCi0gICAgaWYgKG1fcERldmljZURyaXZlci0+U2V0UGl4ZWwoeCwgeSwgY29sb3IsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBGWF9SRUNUIHJlY3QoeCwgeSwgeCArIDEsIHkgKyAxKTsNCi0gICAgcmV0dXJuIEZpbGxSZWN0KCZyZWN0LCBjb2xvciwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSk7DQotfQ0KLUZYX0JPT0wgQ0ZYX1JlbmRlckRldmljZTo6RmlsbFJlY3QoY29uc3QgRlhfUkVDVCogcFJlY3QsIEZYX0RXT1JEIGZpbGxfY29sb3IsIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQgYmxlbmRfdHlwZSkNCi17DQotICAgIGlmIChtX3BEZXZpY2VEcml2ZXItPkZpbGxSZWN0KHBSZWN0LCBmaWxsX2NvbG9yLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtLCBibGVuZF90eXBlKSkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgaWYgKCEobV9SZW5kZXJDYXBzICYgRlhSQ19HRVRfQklUUykpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDRlhfRElCaXRtYXAgYml0bWFwOw0KLSAgICBpZiAoIUNyZWF0ZUNvbXBhdGlibGVCaXRtYXAoJmJpdG1hcCwgcFJlY3QtPldpZHRoKCksIHBSZWN0LT5IZWlnaHQoKSkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoIW1fcERldmljZURyaXZlci0+R2V0RElCaXRzKCZiaXRtYXAsIHBSZWN0LT5sZWZ0LCBwUmVjdC0+dG9wKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmICghYml0bWFwLkNvbXBvc2l0ZVJlY3QoMCwgMCwgcFJlY3QtPldpZHRoKCksIHBSZWN0LT5IZWlnaHQoKSwgZmlsbF9jb2xvciwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWF9SRUNUIHNyY19yZWN0KDAsIDAsIHBSZWN0LT5XaWR0aCgpLCBwUmVjdC0+SGVpZ2h0KCkpOw0KLSAgICBtX3BEZXZpY2VEcml2ZXItPlNldERJQml0cygmYml0bWFwLCAwLCAmc3JjX3JlY3QsIHBSZWN0LT5sZWZ0LCBwUmVjdC0+dG9wLCBGWERJQl9CTEVORF9OT1JNQUwpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDRlhfUmVuZGVyRGV2aWNlOjpEcmF3Q29zbWV0aWNMaW5lKEZYX0ZMT0FUIHgxLCBGWF9GTE9BVCB5MSwgRlhfRkxPQVQgeDIsIEZYX0ZMT0FUIHkyLCBGWF9EV09SRCBjb2xvciwNCi0gICAgICAgIGludCBmaWxsX21vZGUsIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQgYmxlbmRfdHlwZSkNCi17DQotICAgIGlmICgoKG1fUmVuZGVyQ2FwcyAmIEZYUkNfQUxQSEFfUEFUSCkgJiYNCi0gICAgICAgICAgICAoRlhHRVRGTEFHX0NPTE9SVFlQRShhbHBoYV9mbGFnKSAmJiBGWEdFVEZMQUdfQUxQSEFfRklMTChhbHBoYV9mbGFnKSA9PSAweGZmKSkgfHwNCi0gICAgICAgICAgICBjb2xvciA+PSAweGZmMDAwMDAwKQ0KLSAgICAgICAgaWYgKG1fcERldmljZURyaXZlci0+RHJhd0Nvc21ldGljTGluZSh4MSwgeTEsIHgyLCB5MiwgY29sb3IsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0sIGJsZW5kX3R5cGUpKSB7DQotICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICB9DQotICAgIENGWF9HcmFwaFN0YXRlRGF0YSBncmFwaF9zdGF0ZTsNCi0gICAgQ0ZYX1BhdGhEYXRhIHBhdGg7DQotICAgIHBhdGguU2V0UG9pbnRDb3VudCgyKTsNCi0gICAgcGF0aC5TZXRQb2ludCgwLCB4MSwgeTEsIEZYUFRfTU9WRVRPKTsNCi0gICAgcGF0aC5TZXRQb2ludCgxLCB4MiwgeTIsIEZYUFRfTElORVRPKTsNCi0gICAgcmV0dXJuIG1fcERldmljZURyaXZlci0+RHJhd1BhdGgoJnBhdGgsIE5VTEwsICZncmFwaF9zdGF0ZSwgMCwgY29sb3IsIGZpbGxfbW9kZSwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSwgYmxlbmRfdHlwZSk7DQotfQ0KLUZYX0JPT0wgQ0ZYX1JlbmRlckRldmljZTo6R2V0RElCaXRzKENGWF9ESUJpdG1hcCogcEJpdG1hcCwgaW50IGxlZnQsIGludCB0b3AsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBpZiAoIShtX1JlbmRlckNhcHMgJiBGWFJDX0dFVF9CSVRTKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHJldHVybiBtX3BEZXZpY2VEcml2ZXItPkdldERJQml0cyhwQml0bWFwLCBsZWZ0LCB0b3AsIHBJY2NUcmFuc2Zvcm0pOw0KLX0NCi1DRlhfRElCaXRtYXAqIENGWF9SZW5kZXJEZXZpY2U6OkdldEJhY2tEcm9wKCkNCi17DQotICAgIHJldHVybiBtX3BEZXZpY2VEcml2ZXItPkdldEJhY2tEcm9wKCk7DQotfQ0KLUZYX0JPT0wgQ0ZYX1JlbmRlckRldmljZTo6U2V0RElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgYmxlbmRfbW9kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBwSWNjVHJhbnNmb3JtKQ0KLXsNCi0gICAgQVNTRVJUKCFwQml0bWFwLT5Jc0FscGhhTWFzaygpKTsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBjdG0gPSBHZXRDVE0oKTsNCi0gICAgRlhfRkxPQVQgZlNjYWxlWCA9IEZYU1lTX2ZhYnMoY3RtLmEpOw0KLSAgICBGWF9GTE9BVCBmU2NhbGVZID0gRlhTWVNfZmFicyhjdG0uZCk7DQotICAgIEZYX1JFQ1QgZGVzdF9yZWN0KGxlZnQsIHRvcCwgRlhTWVNfcm91bmQobGVmdCArIHBCaXRtYXAtPkdldFdpZHRoKCkgLyBmU2NhbGVYKSwgRlhTWVNfcm91bmQodG9wICsgcEJpdG1hcC0+R2V0SGVpZ2h0KCkgLyBmU2NhbGVZKSk7DQotICAgIGRlc3RfcmVjdC5JbnRlcnNlY3QobV9DbGlwQm94KTsNCi0gICAgaWYgKGRlc3RfcmVjdC5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIEZYX1JFQ1Qgc3JjX3JlY3QoZGVzdF9yZWN0LmxlZnQgLSBsZWZ0LCBkZXN0X3JlY3QudG9wIC0gdG9wLA0KLSAgICAgICAgICAgICAgICAgICAgIGRlc3RfcmVjdC5sZWZ0IC0gbGVmdCArIGRlc3RfcmVjdC5XaWR0aCgpLCBkZXN0X3JlY3QudG9wIC0gdG9wICsgZGVzdF9yZWN0LkhlaWdodCgpKTsNCi0gICAgc3JjX3JlY3QubGVmdCA9IEZYU1lTX3JvdW5kKHNyY19yZWN0LmxlZnQgKiBmU2NhbGVYKTsNCi0gICAgc3JjX3JlY3QudG9wID0gRlhTWVNfcm91bmQoc3JjX3JlY3QudG9wICogZlNjYWxlWSk7DQotICAgIHNyY19yZWN0LnJpZ2h0ID0gRlhTWVNfcm91bmQoc3JjX3JlY3QucmlnaHQgKiBmU2NhbGVYKTsNCi0gICAgc3JjX3JlY3QuYm90dG9tID0gRlhTWVNfcm91bmQoc3JjX3JlY3QuYm90dG9tICogZlNjYWxlWSk7DQotICAgIGlmICgoYmxlbmRfbW9kZSAhPSBGWERJQl9CTEVORF9OT1JNQUwgJiYgIShtX1JlbmRlckNhcHMgJiBGWFJDX0JMRU5EX01PREUpKSB8fA0KLSAgICAgICAgICAgIChwQml0bWFwLT5IYXNBbHBoYSgpICYmICEobV9SZW5kZXJDYXBzICYgRlhSQ19BTFBIQV9JTUFHRSkpKSB7DQotICAgICAgICBpZiAoIShtX1JlbmRlckNhcHMgJiBGWFJDX0dFVF9CSVRTKSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBiZ19waXhlbF93aWR0aCA9IEZYU1lTX3JvdW5kKGRlc3RfcmVjdC5XaWR0aCgpICogZlNjYWxlWCk7DQotICAgICAgICBpbnQgYmdfcGl4ZWxfaGVpZ2h0ID0gRlhTWVNfcm91bmQoZGVzdF9yZWN0LkhlaWdodCgpICogZlNjYWxlWSk7DQotICAgICAgICBDRlhfRElCaXRtYXAgYmFja2dyb3VuZDsNCi0gICAgICAgIGlmICghYmFja2dyb3VuZC5DcmVhdGUoYmdfcGl4ZWxfd2lkdGgsIGJnX3BpeGVsX2hlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1fUmVuZGVyQ2FwcyAmIEZYUkNfQ01ZS19PVVRQVVQpID8gRlhESUJfQ215ayA6IEZYRElCX1JnYjMyKSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICghbV9wRGV2aWNlRHJpdmVyLT5HZXRESUJpdHMoJmJhY2tncm91bmQsIGRlc3RfcmVjdC5sZWZ0LCBkZXN0X3JlY3QudG9wKSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICghYmFja2dyb3VuZC5Db21wb3NpdGVCaXRtYXAoMCwgMCwgYmdfcGl4ZWxfd2lkdGgsIGJnX3BpeGVsX2hlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJpdG1hcCwgc3JjX3JlY3QubGVmdCwgc3JjX3JlY3QudG9wLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGVuZF9tb2RlLCBOVUxMLCBGQUxTRSwgcEljY1RyYW5zZm9ybSkpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBGWF9SRUNUIHNyY19yZWN0KDAsIDAsIGJnX3BpeGVsX3dpZHRoLCBiZ19waXhlbF9oZWlnaHQpOw0KLSAgICAgICAgcmV0dXJuIG1fcERldmljZURyaXZlci0+U2V0RElCaXRzKCZiYWNrZ3JvdW5kLCAwLCAmc3JjX3JlY3QsIGRlc3RfcmVjdC5sZWZ0LCBkZXN0X3JlY3QudG9wLCBGWERJQl9CTEVORF9OT1JNQUwpOw0KLSAgICB9DQotICAgIHJldHVybiBtX3BEZXZpY2VEcml2ZXItPlNldERJQml0cyhwQml0bWFwLCAwLCAmc3JjX3JlY3QsIGRlc3RfcmVjdC5sZWZ0LCBkZXN0X3JlY3QudG9wLCBibGVuZF9tb2RlLCAwLCBwSWNjVHJhbnNmb3JtKTsNCi19DQotRlhfQk9PTCBDRlhfUmVuZGVyRGV2aWNlOjpTdHJldGNoRElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIGludCBsZWZ0LCBpbnQgdG9wLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0LCBGWF9EV09SRCBmbGFncywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogcEljY1RyYW5zZm9ybSwgaW50IGJsZW5kX21vZGUpDQotew0KLSAgICBGWF9SRUNUIGRlc3RfcmVjdChsZWZ0LCB0b3AsIGxlZnQgKyBkZXN0X3dpZHRoLCB0b3AgKyBkZXN0X2hlaWdodCk7DQotICAgIEZYX1JFQ1QgY2xpcF9ib3ggPSBtX0NsaXBCb3g7DQotICAgIGNsaXBfYm94LkludGVyc2VjdChkZXN0X3JlY3QpOw0KLSAgICBpZiAoY2xpcF9ib3guSXNFbXB0eSgpKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gbV9wRGV2aWNlRHJpdmVyLT5TdHJldGNoRElCaXRzKHBCaXRtYXAsIDAsIGxlZnQsIHRvcCwgZGVzdF93aWR0aCwgZGVzdF9oZWlnaHQsICZjbGlwX2JveCwgZmxhZ3MsIDAsIHBJY2NUcmFuc2Zvcm0sIGJsZW5kX21vZGUpOw0KLX0NCi1GWF9CT09MIENGWF9SZW5kZXJEZXZpY2U6OlNldEJpdE1hc2soY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwgaW50IGxlZnQsIGludCB0b3AsIEZYX0RXT1JEIGFyZ2IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQ0KLXsNCi0gICAgRlhfUkVDVCBzcmNfcmVjdCgwLCAwLCBwQml0bWFwLT5HZXRXaWR0aCgpLCBwQml0bWFwLT5HZXRIZWlnaHQoKSk7DQotICAgIHJldHVybiBtX3BEZXZpY2VEcml2ZXItPlNldERJQml0cyhwQml0bWFwLCBhcmdiLCAmc3JjX3JlY3QsIGxlZnQsIHRvcCwgRlhESUJfQkxFTkRfTk9STUFMLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtKTsNCi19DQotRlhfQk9PTCBDRlhfUmVuZGVyRGV2aWNlOjpTdHJldGNoQml0TWFzayhjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBpbnQgbGVmdCwgaW50IHRvcCwNCi0gICAgICAgIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsIEZYX0RXT1JEIGFyZ2IsIEZYX0RXT1JEIGZsYWdzLA0KLSAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBGWF9SRUNUIGRlc3RfcmVjdChsZWZ0LCB0b3AsIGxlZnQgKyBkZXN0X3dpZHRoLCB0b3AgKyBkZXN0X2hlaWdodCk7DQotICAgIEZYX1JFQ1QgY2xpcF9ib3ggPSBtX0NsaXBCb3g7DQotICAgIGNsaXBfYm94LkludGVyc2VjdChkZXN0X3JlY3QpOw0KLSAgICByZXR1cm4gbV9wRGV2aWNlRHJpdmVyLT5TdHJldGNoRElCaXRzKHBCaXRtYXAsIGFyZ2IsIGxlZnQsIHRvcCwgZGVzdF93aWR0aCwgZGVzdF9oZWlnaHQsICZjbGlwX2JveCwgZmxhZ3MsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOw0KLX0NCi1GWF9CT09MIENGWF9SZW5kZXJEZXZpY2U6OlN0YXJ0RElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIGludCBiaXRtYXBfYWxwaGEsIEZYX0RXT1JEIGFyZ2IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LCBGWF9EV09SRCBmbGFncywgRlhfTFBWT0lEJiBoYW5kbGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSwgaW50IGJsZW5kX21vZGUpDQotew0KLSAgICByZXR1cm4gbV9wRGV2aWNlRHJpdmVyLT5TdGFydERJQml0cyhwQml0bWFwLCBiaXRtYXBfYWxwaGEsIGFyZ2IsIHBNYXRyaXgsIGZsYWdzLCBoYW5kbGUsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0sIGJsZW5kX21vZGUpOw0KLX0NCi1GWF9CT09MIENGWF9SZW5kZXJEZXZpY2U6OkNvbnRpbnVlRElCaXRzKEZYX0xQVk9JRCBoYW5kbGUsIElGWF9QYXVzZSogcFBhdXNlKQ0KLXsNCi0gICAgcmV0dXJuIG1fcERldmljZURyaXZlci0+Q29udGludWVESUJpdHMoaGFuZGxlLCBwUGF1c2UpOw0KLX0NCi12b2lkIENGWF9SZW5kZXJEZXZpY2U6OkNhbmNlbERJQml0cyhGWF9MUFZPSUQgaGFuZGxlKQ0KLXsNCi0gICAgbV9wRGV2aWNlRHJpdmVyLT5DYW5jZWxESUJpdHMoaGFuZGxlKTsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZS5oIgorQ0ZYX1JlbmRlckRldmljZTo6Q0ZYX1JlbmRlckRldmljZSgpCit7CisgICAgbV9wRGV2aWNlRHJpdmVyID0gTlVMTDsKKyAgICBtX3BCaXRtYXAgPSBOVUxMOworfQorQ0ZYX1JlbmRlckRldmljZTo6fkNGWF9SZW5kZXJEZXZpY2UoKQoreworICAgIGlmIChtX3BEZXZpY2VEcml2ZXIpIHsKKyAgICAgICAgZGVsZXRlIG1fcERldmljZURyaXZlcjsKKyAgICB9Cit9Cit2b2lkIENGWF9SZW5kZXJEZXZpY2U6OlNldERldmljZURyaXZlcihJRlhfUmVuZGVyRGV2aWNlRHJpdmVyKiBwRHJpdmVyKQoreworICAgIGlmIChtX3BEZXZpY2VEcml2ZXIpIHsKKyAgICAgICAgZGVsZXRlIG1fcERldmljZURyaXZlcjsKKyAgICB9CisgICAgbV9wRGV2aWNlRHJpdmVyID0gcERyaXZlcjsKKyAgICBJbml0RGV2aWNlSW5mbygpOworfQordm9pZCBDRlhfUmVuZGVyRGV2aWNlOjpJbml0RGV2aWNlSW5mbygpCit7CisgICAgQVNTRVJUKG1fcERldmljZURyaXZlciAhPSBOVUxMKTsKKyAgICBtX1dpZHRoID0gbV9wRGV2aWNlRHJpdmVyLT5HZXREZXZpY2VDYXBzKEZYRENfUElYRUxfV0lEVEgpOworICAgIG1fSGVpZ2h0ID0gbV9wRGV2aWNlRHJpdmVyLT5HZXREZXZpY2VDYXBzKEZYRENfUElYRUxfSEVJR0hUKTsKKyAgICBtX2JwcCA9IG1fcERldmljZURyaXZlci0+R2V0RGV2aWNlQ2FwcyhGWERDX0JJVFNfUElYRUwpOworICAgIG1fUmVuZGVyQ2FwcyA9IG1fcERldmljZURyaXZlci0+R2V0RGV2aWNlQ2FwcyhGWERDX1JFTkRFUl9DQVBTKTsKKyAgICBtX0RldmljZUNsYXNzID0gbV9wRGV2aWNlRHJpdmVyLT5HZXREZXZpY2VDYXBzKEZYRENfREVWSUNFX0NMQVNTKTsKKyAgICBpZiAoIW1fcERldmljZURyaXZlci0+R2V0Q2xpcEJveCgmbV9DbGlwQm94KSkgeworICAgICAgICBtX0NsaXBCb3gubGVmdCA9IDA7CisgICAgICAgIG1fQ2xpcEJveC50b3AgPSAwOworICAgICAgICBtX0NsaXBCb3gucmlnaHQgPSBtX1dpZHRoOworICAgICAgICBtX0NsaXBCb3guYm90dG9tID0gbV9IZWlnaHQ7CisgICAgfQorfQorRlhfQk9PTCBDRlhfUmVuZGVyRGV2aWNlOjpTdGFydFJlbmRlcmluZygpCit7CisgICAgcmV0dXJuIG1fcERldmljZURyaXZlci0+U3RhcnRSZW5kZXJpbmcoKTsKK30KK3ZvaWQgQ0ZYX1JlbmRlckRldmljZTo6RW5kUmVuZGVyaW5nKCkKK3sKKyAgICBtX3BEZXZpY2VEcml2ZXItPkVuZFJlbmRlcmluZygpOworfQordm9pZCBDRlhfUmVuZGVyRGV2aWNlOjpTYXZlU3RhdGUoKQoreworICAgIG1fcERldmljZURyaXZlci0+U2F2ZVN0YXRlKCk7Cit9Cit2b2lkIENGWF9SZW5kZXJEZXZpY2U6OlJlc3RvcmVTdGF0ZShGWF9CT09MIGJLZWVwU2F2ZWQpCit7CisgICAgbV9wRGV2aWNlRHJpdmVyLT5SZXN0b3JlU3RhdGUoYktlZXBTYXZlZCk7CisgICAgVXBkYXRlQ2xpcEJveCgpOworfQoraW50IENGWF9SZW5kZXJEZXZpY2U6OkdldERldmljZUNhcHMoaW50IGNhcHNfaWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcERldmljZURyaXZlci0+R2V0RGV2aWNlQ2FwcyhjYXBzX2lkKTsKK30KK0NGWF9NYXRyaXggQ0ZYX1JlbmRlckRldmljZTo6R2V0Q1RNKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wRGV2aWNlRHJpdmVyLT5HZXRDVE0oKTsKK30KK0ZYX0JPT0wgQ0ZYX1JlbmRlckRldmljZTo6Q3JlYXRlQ29tcGF0aWJsZUJpdG1hcChDRlhfRElCaXRtYXAqIHBESUIsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3QKK3sKKyAgICBpZiAobV9SZW5kZXJDYXBzICYgRlhSQ19DTVlLX09VVFBVVCkgeworICAgICAgICByZXR1cm4gcERJQi0+Q3JlYXRlKHdpZHRoLCBoZWlnaHQsIG1fUmVuZGVyQ2FwcyAmIEZYUkNfQUxQSEFfT1VUUFVUID8gRlhESUJfQ215a2EgOiBGWERJQl9DbXlrKTsKKyAgICB9IGVsc2UgaWYgKG1fUmVuZGVyQ2FwcyAmIEZYUkNfQllURU1BU0tfT1VUUFVUKSB7CisgICAgICAgIHJldHVybiBwRElCLT5DcmVhdGUod2lkdGgsIGhlaWdodCwgRlhESUJfOGJwcE1hc2spOworICAgIH0gZWxzZQorI2lmIF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXworICAgICAgICByZXR1cm4gcERJQi0+Q3JlYXRlKHdpZHRoLCBoZWlnaHQsIG1fUmVuZGVyQ2FwcyAmIEZYUkNfQUxQSEFfT1VUUFVUID8gRlhESUJfQXJnYiA6IEZYRElCX1JnYjMyKTsKKyNlbHNlCisgICAgICAgIHJldHVybiBwRElCLT5DcmVhdGUod2lkdGgsIGhlaWdodCwgbV9SZW5kZXJDYXBzICYgRlhSQ19BTFBIQV9PVVRQVVQgPyBGWERJQl9BcmdiIDogRlhESUJfUmdiKTsKKyNlbmRpZgorfQorRlhfQk9PTCBDRlhfUmVuZGVyRGV2aWNlOjpTZXRDbGlwX1BhdGhGaWxsKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLAorICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkRldmljZSwKKyAgICAgICAgaW50IGZpbGxfbW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQoreworICAgIGlmICghbV9wRGV2aWNlRHJpdmVyLT5TZXRDbGlwX1BhdGhGaWxsKHBQYXRoRGF0YSwgcE9iamVjdDJEZXZpY2UsIGZpbGxfbW9kZSkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBVcGRhdGVDbGlwQm94KCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENGWF9SZW5kZXJEZXZpY2U6OlNldENsaXBfUGF0aFN0cm9rZShjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwKKyAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsCisgICAgICAgIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQoreworICAgIGlmICghbV9wRGV2aWNlRHJpdmVyLT5TZXRDbGlwX1BhdGhTdHJva2UocFBhdGhEYXRhLCBwT2JqZWN0MkRldmljZSwgcEdyYXBoU3RhdGUpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgVXBkYXRlQ2xpcEJveCgpOworICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDRlhfUmVuZGVyRGV2aWNlOjpTZXRDbGlwX1JlY3QoY29uc3QgRlhfUkVDVCogcFJlY3QpCit7CisgICAgQ0ZYX1BhdGhEYXRhIHBhdGg7CisgICAgcGF0aC5BcHBlbmRSZWN0KChGWF9GTE9BVCkocFJlY3QtPmxlZnQpLCAoRlhfRkxPQVQpKHBSZWN0LT5ib3R0b20pLCAoRlhfRkxPQVQpKHBSZWN0LT5yaWdodCksIChGWF9GTE9BVCkocFJlY3QtPnRvcCkpOworICAgIGlmICghU2V0Q2xpcF9QYXRoRmlsbCgmcGF0aCwgTlVMTCwgRlhGSUxMX1dJTkRJTkcpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgVXBkYXRlQ2xpcEJveCgpOworICAgIHJldHVybiBUUlVFOworfQordm9pZCBDRlhfUmVuZGVyRGV2aWNlOjpVcGRhdGVDbGlwQm94KCkKK3sKKyAgICBpZiAobV9wRGV2aWNlRHJpdmVyLT5HZXRDbGlwQm94KCZtX0NsaXBCb3gpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9DbGlwQm94LmxlZnQgPSAwOworICAgIG1fQ2xpcEJveC50b3AgPSAwOworICAgIG1fQ2xpcEJveC5yaWdodCA9IG1fV2lkdGg7CisgICAgbV9DbGlwQm94LmJvdHRvbSA9IG1fSGVpZ2h0OworfQorRlhfQk9PTCBDRlhfUmVuZGVyRGV2aWNlOjpEcmF3UGF0aChjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGZpbGxfY29sb3IsIEZYX0RXT1JEIHN0cm9rZV9jb2xvciwgaW50IGZpbGxfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0sIGludCBibGVuZF90eXBlKQoreworICAgIEZYX0JZVEUgZmlsbF9hbHBoYSwgc3Ryb2tlX2FscGhhOworICAgIGlmIChGWEdFVEZMQUdfQ09MT1JUWVBFKGFscGhhX2ZsYWcpKSB7CisgICAgICAgIGZpbGxfYWxwaGEgPSBGWEdFVEZMQUdfQUxQSEFfRklMTChhbHBoYV9mbGFnKTsKKyAgICAgICAgc3Ryb2tlX2FscGhhID0gRlhHRVRGTEFHX0FMUEhBX1NUUk9LRShhbHBoYV9mbGFnKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmaWxsX2FscGhhID0gRlhBUkdCX0EoZmlsbF9jb2xvcik7CisgICAgICAgIHN0cm9rZV9hbHBoYSA9IEZYQVJHQl9BKHN0cm9rZV9jb2xvcik7CisgICAgfQorICAgIGlmICgoZmlsbF9tb2RlICYgMykgPT0gMCkgeworICAgICAgICBmaWxsX2FscGhhID0gMDsKKyAgICB9CisgICAgaWYgKHBHcmFwaFN0YXRlID09IE5VTEwpIHsKKyAgICAgICAgc3Ryb2tlX2FscGhhID0gMDsKKyAgICB9CisgICAgaWYgKHN0cm9rZV9hbHBoYSA9PSAwICYmIHBQYXRoRGF0YS0+R2V0UG9pbnRDb3VudCgpID09IDIpIHsKKyAgICAgICAgRlhfUEFUSFBPSU5UKiBwUG9pbnRzID0gcFBhdGhEYXRhLT5HZXRQb2ludHMoKTsKKyAgICAgICAgRlhfRkxPQVQgeDEsIHgyLCB5MSwgeTI7CisgICAgICAgIGlmIChwT2JqZWN0MkRldmljZSkgeworICAgICAgICAgICAgcE9iamVjdDJEZXZpY2UtPlRyYW5zZm9ybShwUG9pbnRzWzBdLm1fUG9pbnRYLCBwUG9pbnRzWzBdLm1fUG9pbnRZLCB4MSwgeTEpOworICAgICAgICAgICAgcE9iamVjdDJEZXZpY2UtPlRyYW5zZm9ybShwUG9pbnRzWzFdLm1fUG9pbnRYLCBwUG9pbnRzWzFdLm1fUG9pbnRZLCB4MiwgeTIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeDEgPSBwUG9pbnRzWzBdLm1fUG9pbnRYOworICAgICAgICAgICAgeTEgPSBwUG9pbnRzWzBdLm1fUG9pbnRZOworICAgICAgICAgICAgeDIgPSBwUG9pbnRzWzFdLm1fUG9pbnRYOworICAgICAgICAgICAgeTIgPSBwUG9pbnRzWzFdLm1fUG9pbnRZOworICAgICAgICB9CisgICAgICAgIERyYXdDb3NtZXRpY0xpbmUoeDEsIHkxLCB4MiwgeTIsIGZpbGxfY29sb3IsIGZpbGxfbW9kZSwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSwgYmxlbmRfdHlwZSk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBpZiAoKHBQYXRoRGF0YS0+R2V0UG9pbnRDb3VudCgpID09IDUgfHwgcFBhdGhEYXRhLT5HZXRQb2ludENvdW50KCkgPT0gNCkgJiYgc3Ryb2tlX2FscGhhID09IDApIHsKKyAgICAgICAgQ0ZYX0Zsb2F0UmVjdCByZWN0X2Y7CisgICAgICAgIGlmICghKGZpbGxfbW9kZSAmIEZYRklMTF9SRUNUX0FBKSAmJiBwUGF0aERhdGEtPklzUmVjdChwT2JqZWN0MkRldmljZSwgJnJlY3RfZikpIHsKKyAgICAgICAgICAgIEZYX1JFQ1QgcmVjdF9pID0gcmVjdF9mLkdldE91dHRlclJlY3QoKTsKKyAgICAgICAgICAgIGludCB3aWR0aCA9IChpbnQpRlhTWVNfY2VpbChyZWN0X2YucmlnaHQgLSByZWN0X2YubGVmdCk7CisgICAgICAgICAgICBpZiAod2lkdGggPCAxKSB7CisgICAgICAgICAgICAgICAgd2lkdGggPSAxOworICAgICAgICAgICAgICAgIGlmIChyZWN0X2kubGVmdCA9PSByZWN0X2kucmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVjdF9pLnJpZ2h0ICsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBoZWlnaHQgPSAoaW50KUZYU1lTX2NlaWwocmVjdF9mLnRvcCAtIHJlY3RfZi5ib3R0b20pOworICAgICAgICAgICAgaWYgKGhlaWdodCA8IDEpIHsKKyAgICAgICAgICAgICAgICBoZWlnaHQgPSAxOworICAgICAgICAgICAgICAgIGlmIChyZWN0X2kuYm90dG9tID09IHJlY3RfaS50b3ApIHsKKyAgICAgICAgICAgICAgICAgICAgcmVjdF9pLmJvdHRvbSArKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmVjdF9pLldpZHRoKCkgPj0gd2lkdGggKyAxKSB7CisgICAgICAgICAgICAgICAgaWYgKHJlY3RfZi5sZWZ0IC0gKEZYX0ZMT0FUKShyZWN0X2kubGVmdCkgPiAoRlhfRkxPQVQpKHJlY3RfaS5yaWdodCkgLSByZWN0X2YucmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVjdF9pLmxlZnQgKys7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmVjdF9pLnJpZ2h0IC0tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZWN0X2kuSGVpZ2h0KCkgPj0gaGVpZ2h0ICsgMSkgeworICAgICAgICAgICAgICAgIGlmIChyZWN0X2YudG9wIC0gKEZYX0ZMT0FUKShyZWN0X2kudG9wKSA+IChGWF9GTE9BVCkocmVjdF9pLmJvdHRvbSkgLSByZWN0X2YuYm90dG9tKSB7CisgICAgICAgICAgICAgICAgICAgIHJlY3RfaS50b3AgKys7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmVjdF9pLmJvdHRvbSAtLTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoRmlsbFJlY3QoJnJlY3RfaSwgZmlsbF9jb2xvciwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSwgYmxlbmRfdHlwZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZigoZmlsbF9tb2RlICYgMykgJiYgc3Ryb2tlX2FscGhhID09IDAgJiYgIShmaWxsX21vZGUgJiBGWF9GSUxMX1NUUk9LRSkgJiYgIShmaWxsX21vZGUgJiBGWF9GSUxMX1RFWFRfTU9ERSkpIHsKKyAgICAgICAgQ0ZYX1BhdGhEYXRhIG5ld1BhdGg7CisgICAgICAgIEZYX0JPT0wgYlRoaW4gPSBGQUxTRTsKKyAgICAgICAgaWYgKHBQYXRoRGF0YS0+R2V0WmVyb0FyZWFQYXRoKG5ld1BhdGgsIChDRlhfTWF0cml4KilwT2JqZWN0MkRldmljZSwgYlRoaW4sIG1fcERldmljZURyaXZlci0+R2V0RHJpdmVyVHlwZSgpKSkgeworICAgICAgICAgICAgQ0ZYX0dyYXBoU3RhdGVEYXRhIGdyYXBoU3RhdGU7CisgICAgICAgICAgICBncmFwaFN0YXRlLm1fTGluZVdpZHRoID0gMC4wZjsKKyAgICAgICAgICAgIEZYX0RXT1JEIHN0cm9rZWNvbG9yID0gZmlsbF9jb2xvcjsKKyAgICAgICAgICAgIGlmIChiVGhpbikgeworICAgICAgICAgICAgICAgIGlmIChGWEdFVEZMQUdfQ09MT1JUWVBFKGFscGhhX2ZsYWcpKSB7CisgICAgICAgICAgICAgICAgICAgIEZYU0VURkxBR19BTFBIQV9TVFJPS0UoYWxwaGFfZmxhZywgZmlsbF9hbHBoYSA+PiAyKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdHJva2Vjb2xvciA9ICgoKGZpbGxfYWxwaGEgPj4gMikgPDwgMjQpIHwgKHN0cm9rZWNvbG9yICYgMHgwMGZmZmZmZikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXggPSBOVUxMOworICAgICAgICAgICAgaWYgKHBPYmplY3QyRGV2aWNlICYmICFwT2JqZWN0MkRldmljZS0+SXNJZGVudGl0eSgpKSB7CisgICAgICAgICAgICAgICAgcE1hdHJpeCA9IChDRlhfQWZmaW5lTWF0cml4KilwT2JqZWN0MkRldmljZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBzbW9vdGhfcGF0aCA9IEZYX1pFUk9BUkVBX0ZJTEw7CisgICAgICAgICAgICBpZiAoZmlsbF9tb2RlICYgRlhGSUxMX05PUEFUSFNNT09USCkgeworICAgICAgICAgICAgICAgIHNtb290aF9wYXRoIHw9IEZYRklMTF9OT1BBVEhTTU9PVEg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3BEZXZpY2VEcml2ZXItPkRyYXdQYXRoKCZuZXdQYXRoLCBwTWF0cml4LCAmZ3JhcGhTdGF0ZSwgMCwgc3Ryb2tlY29sb3IsIHNtb290aF9wYXRoLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtLCBibGVuZF90eXBlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoKGZpbGxfbW9kZSAmIDMpICYmIGZpbGxfYWxwaGEgJiYgc3Ryb2tlX2FscGhhIDwgMHhmZiAmJiAoZmlsbF9tb2RlICYgRlhfRklMTF9TVFJPS0UpKSB7CisgICAgICAgIGlmICghKG1fUmVuZGVyQ2FwcyAmIEZYUkNfR0VUX0JJVFMpKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgQ0ZYX0Zsb2F0UmVjdCBiYm94OworICAgICAgICBpZiAocEdyYXBoU3RhdGUpIHsKKyAgICAgICAgICAgIGJib3ggPSBwUGF0aERhdGEtPkdldEJvdW5kaW5nQm94KHBHcmFwaFN0YXRlLT5tX0xpbmVXaWR0aCwgcEdyYXBoU3RhdGUtPm1fTWl0ZXJMaW1pdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiYm94ID0gcFBhdGhEYXRhLT5HZXRCb3VuZGluZ0JveCgpOworICAgICAgICB9CisgICAgICAgIGlmIChwT2JqZWN0MkRldmljZSkgeworICAgICAgICAgICAgYmJveC5UcmFuc2Zvcm0ocE9iamVjdDJEZXZpY2UpOworICAgICAgICB9CisgICAgICAgIENGWF9NYXRyaXggY3RtID0gR2V0Q1RNKCk7CisgICAgICAgIEZYX0ZMT0FUIGZTY2FsZVggPSBGWFNZU19mYWJzKGN0bS5hKTsKKyAgICAgICAgRlhfRkxPQVQgZlNjYWxlWSA9IEZYU1lTX2ZhYnMoY3RtLmQpOworICAgICAgICBGWF9SRUNUIHJlY3QgPSBiYm94LkdldE91dHRlclJlY3QoKTsKKyAgICAgICAgQ0ZYX0RJQml0bWFwIGJpdG1hcCwgQmFja2Ryb3A7CisgICAgICAgIGlmICghQ3JlYXRlQ29tcGF0aWJsZUJpdG1hcCgmYml0bWFwLCBGWFNZU19yb3VuZChyZWN0LldpZHRoKCkgKiBmU2NhbGVYKSwgRlhTWVNfcm91bmQocmVjdC5IZWlnaHQoKSAqIGZTY2FsZVkpKSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmIChiaXRtYXAuSGFzQWxwaGEoKSkgeworICAgICAgICAgICAgYml0bWFwLkNsZWFyKDApOworICAgICAgICAgICAgQmFja2Ryb3AuQ29weSgmYml0bWFwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghbV9wRGV2aWNlRHJpdmVyLT5HZXRESUJpdHMoJmJpdG1hcCwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgTlVMTCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBCYWNrZHJvcC5Db3B5KCZiaXRtYXApOworICAgICAgICB9CisgICAgICAgIENGWF9GeGdlRGV2aWNlIGJpdG1hcF9kZXZpY2U7CisgICAgICAgIGJpdG1hcF9kZXZpY2UuQXR0YWNoKCZiaXRtYXAsIDAsIEZBTFNFLCAmQmFja2Ryb3AsIFRSVUUpOworICAgICAgICBDRlhfQWZmaW5lTWF0cml4IG1hdHJpeDsKKyAgICAgICAgaWYgKHBPYmplY3QyRGV2aWNlKSB7CisgICAgICAgICAgICBtYXRyaXggPSAqcE9iamVjdDJEZXZpY2U7CisgICAgICAgIH0KKyAgICAgICAgbWF0cml4LlRyYW5zbGF0ZUkoLXJlY3QubGVmdCwgLXJlY3QudG9wKTsKKyAgICAgICAgbWF0cml4LkNvbmNhdChmU2NhbGVYLCAwLCAwLCBmU2NhbGVZLCAwLCAwKTsKKyAgICAgICAgaWYgKCFiaXRtYXBfZGV2aWNlLkdldERldmljZURyaXZlcigpLT5EcmF3UGF0aChwUGF0aERhdGEsICZtYXRyaXgsIHBHcmFwaFN0YXRlLCBmaWxsX2NvbG9yLCBzdHJva2VfY29sb3IsIGZpbGxfbW9kZSwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSwgYmxlbmRfdHlwZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBGWF9SRUNUIHNyY19yZWN0KDAsIDAsIEZYU1lTX3JvdW5kKHJlY3QuV2lkdGgoKSAqIGZTY2FsZVgpLCBGWFNZU19yb3VuZChyZWN0LkhlaWdodCgpICogZlNjYWxlWSkpOworICAgICAgICByZXR1cm4gbV9wRGV2aWNlRHJpdmVyLT5TZXRESUJpdHMoJmJpdG1hcCwgMCwgJnNyY19yZWN0LCByZWN0LmxlZnQsIHJlY3QudG9wLCBGWERJQl9CTEVORF9OT1JNQUwpOworICAgIH0KKyAgICByZXR1cm4gbV9wRGV2aWNlRHJpdmVyLT5EcmF3UGF0aChwUGF0aERhdGEsIHBPYmplY3QyRGV2aWNlLCBwR3JhcGhTdGF0ZSwgZmlsbF9jb2xvciwgc3Ryb2tlX2NvbG9yLCBmaWxsX21vZGUsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0sIGJsZW5kX3R5cGUpOworfQorRlhfQk9PTCBDRlhfUmVuZGVyRGV2aWNlOjpTZXRQaXhlbChpbnQgeCwgaW50IHksIEZYX0RXT1JEIGNvbG9yLCBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSkKK3sKKyAgICBpZiAobV9wRGV2aWNlRHJpdmVyLT5TZXRQaXhlbCh4LCB5LCBjb2xvciwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSkpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIEZYX1JFQ1QgcmVjdCh4LCB5LCB4ICsgMSwgeSArIDEpOworICAgIHJldHVybiBGaWxsUmVjdCgmcmVjdCwgY29sb3IsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOworfQorRlhfQk9PTCBDRlhfUmVuZGVyRGV2aWNlOjpGaWxsUmVjdChjb25zdCBGWF9SRUNUKiBwUmVjdCwgRlhfRFdPUkQgZmlsbF9jb2xvciwgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0sIGludCBibGVuZF90eXBlKQoreworICAgIGlmIChtX3BEZXZpY2VEcml2ZXItPkZpbGxSZWN0KHBSZWN0LCBmaWxsX2NvbG9yLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtLCBibGVuZF90eXBlKSkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgaWYgKCEobV9SZW5kZXJDYXBzICYgRlhSQ19HRVRfQklUUykpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDRlhfRElCaXRtYXAgYml0bWFwOworICAgIGlmICghQ3JlYXRlQ29tcGF0aWJsZUJpdG1hcCgmYml0bWFwLCBwUmVjdC0+V2lkdGgoKSwgcFJlY3QtPkhlaWdodCgpKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmICghbV9wRGV2aWNlRHJpdmVyLT5HZXRESUJpdHMoJmJpdG1hcCwgcFJlY3QtPmxlZnQsIHBSZWN0LT50b3ApKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKCFiaXRtYXAuQ29tcG9zaXRlUmVjdCgwLCAwLCBwUmVjdC0+V2lkdGgoKSwgcFJlY3QtPkhlaWdodCgpLCBmaWxsX2NvbG9yLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEZYX1JFQ1Qgc3JjX3JlY3QoMCwgMCwgcFJlY3QtPldpZHRoKCksIHBSZWN0LT5IZWlnaHQoKSk7CisgICAgbV9wRGV2aWNlRHJpdmVyLT5TZXRESUJpdHMoJmJpdG1hcCwgMCwgJnNyY19yZWN0LCBwUmVjdC0+bGVmdCwgcFJlY3QtPnRvcCwgRlhESUJfQkxFTkRfTk9STUFMKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0ZYX1JlbmRlckRldmljZTo6RHJhd0Nvc21ldGljTGluZShGWF9GTE9BVCB4MSwgRlhfRkxPQVQgeTEsIEZYX0ZMT0FUIHgyLCBGWF9GTE9BVCB5MiwgRlhfRFdPUkQgY29sb3IsCisgICAgICAgIGludCBmaWxsX21vZGUsIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQgYmxlbmRfdHlwZSkKK3sKKyAgICBpZiAoKChtX1JlbmRlckNhcHMgJiBGWFJDX0FMUEhBX1BBVEgpICYmCisgICAgICAgICAgICAoRlhHRVRGTEFHX0NPTE9SVFlQRShhbHBoYV9mbGFnKSAmJiBGWEdFVEZMQUdfQUxQSEFfRklMTChhbHBoYV9mbGFnKSA9PSAweGZmKSkgfHwKKyAgICAgICAgICAgIGNvbG9yID49IDB4ZmYwMDAwMDApCisgICAgICAgIGlmIChtX3BEZXZpY2VEcml2ZXItPkRyYXdDb3NtZXRpY0xpbmUoeDEsIHkxLCB4MiwgeTIsIGNvbG9yLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtLCBibGVuZF90eXBlKSkgeworICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0KKyAgICBDRlhfR3JhcGhTdGF0ZURhdGEgZ3JhcGhfc3RhdGU7CisgICAgQ0ZYX1BhdGhEYXRhIHBhdGg7CisgICAgcGF0aC5TZXRQb2ludENvdW50KDIpOworICAgIHBhdGguU2V0UG9pbnQoMCwgeDEsIHkxLCBGWFBUX01PVkVUTyk7CisgICAgcGF0aC5TZXRQb2ludCgxLCB4MiwgeTIsIEZYUFRfTElORVRPKTsKKyAgICByZXR1cm4gbV9wRGV2aWNlRHJpdmVyLT5EcmF3UGF0aCgmcGF0aCwgTlVMTCwgJmdyYXBoX3N0YXRlLCAwLCBjb2xvciwgZmlsbF9tb2RlLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtLCBibGVuZF90eXBlKTsKK30KK0ZYX0JPT0wgQ0ZYX1JlbmRlckRldmljZTo6R2V0RElCaXRzKENGWF9ESUJpdG1hcCogcEJpdG1hcCwgaW50IGxlZnQsIGludCB0b3AsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgaWYgKCEobV9SZW5kZXJDYXBzICYgRlhSQ19HRVRfQklUUykpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gbV9wRGV2aWNlRHJpdmVyLT5HZXRESUJpdHMocEJpdG1hcCwgbGVmdCwgdG9wLCBwSWNjVHJhbnNmb3JtKTsKK30KK0NGWF9ESUJpdG1hcCogQ0ZYX1JlbmRlckRldmljZTo6R2V0QmFja0Ryb3AoKQoreworICAgIHJldHVybiBtX3BEZXZpY2VEcml2ZXItPkdldEJhY2tEcm9wKCk7Cit9CitGWF9CT09MIENGWF9SZW5kZXJEZXZpY2U6OlNldERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IGJsZW5kX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIEFTU0VSVCghcEJpdG1hcC0+SXNBbHBoYU1hc2soKSk7CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBjdG0gPSBHZXRDVE0oKTsKKyAgICBGWF9GTE9BVCBmU2NhbGVYID0gRlhTWVNfZmFicyhjdG0uYSk7CisgICAgRlhfRkxPQVQgZlNjYWxlWSA9IEZYU1lTX2ZhYnMoY3RtLmQpOworICAgIEZYX1JFQ1QgZGVzdF9yZWN0KGxlZnQsIHRvcCwgRlhTWVNfcm91bmQobGVmdCArIHBCaXRtYXAtPkdldFdpZHRoKCkgLyBmU2NhbGVYKSwgRlhTWVNfcm91bmQodG9wICsgcEJpdG1hcC0+R2V0SGVpZ2h0KCkgLyBmU2NhbGVZKSk7CisgICAgZGVzdF9yZWN0LkludGVyc2VjdChtX0NsaXBCb3gpOworICAgIGlmIChkZXN0X3JlY3QuSXNFbXB0eSgpKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBGWF9SRUNUIHNyY19yZWN0KGRlc3RfcmVjdC5sZWZ0IC0gbGVmdCwgZGVzdF9yZWN0LnRvcCAtIHRvcCwKKyAgICAgICAgICAgICAgICAgICAgIGRlc3RfcmVjdC5sZWZ0IC0gbGVmdCArIGRlc3RfcmVjdC5XaWR0aCgpLCBkZXN0X3JlY3QudG9wIC0gdG9wICsgZGVzdF9yZWN0LkhlaWdodCgpKTsKKyAgICBzcmNfcmVjdC5sZWZ0ID0gRlhTWVNfcm91bmQoc3JjX3JlY3QubGVmdCAqIGZTY2FsZVgpOworICAgIHNyY19yZWN0LnRvcCA9IEZYU1lTX3JvdW5kKHNyY19yZWN0LnRvcCAqIGZTY2FsZVkpOworICAgIHNyY19yZWN0LnJpZ2h0ID0gRlhTWVNfcm91bmQoc3JjX3JlY3QucmlnaHQgKiBmU2NhbGVYKTsKKyAgICBzcmNfcmVjdC5ib3R0b20gPSBGWFNZU19yb3VuZChzcmNfcmVjdC5ib3R0b20gKiBmU2NhbGVZKTsKKyAgICBpZiAoKGJsZW5kX21vZGUgIT0gRlhESUJfQkxFTkRfTk9STUFMICYmICEobV9SZW5kZXJDYXBzICYgRlhSQ19CTEVORF9NT0RFKSkgfHwKKyAgICAgICAgICAgIChwQml0bWFwLT5IYXNBbHBoYSgpICYmICEobV9SZW5kZXJDYXBzICYgRlhSQ19BTFBIQV9JTUFHRSkpKSB7CisgICAgICAgIGlmICghKG1fUmVuZGVyQ2FwcyAmIEZYUkNfR0VUX0JJVFMpKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgaW50IGJnX3BpeGVsX3dpZHRoID0gRlhTWVNfcm91bmQoZGVzdF9yZWN0LldpZHRoKCkgKiBmU2NhbGVYKTsKKyAgICAgICAgaW50IGJnX3BpeGVsX2hlaWdodCA9IEZYU1lTX3JvdW5kKGRlc3RfcmVjdC5IZWlnaHQoKSAqIGZTY2FsZVkpOworICAgICAgICBDRlhfRElCaXRtYXAgYmFja2dyb3VuZDsKKyAgICAgICAgaWYgKCFiYWNrZ3JvdW5kLkNyZWF0ZShiZ19waXhlbF93aWR0aCwgYmdfcGl4ZWxfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtX1JlbmRlckNhcHMgJiBGWFJDX0NNWUtfT1VUUFVUKSA/IEZYRElCX0NteWsgOiBGWERJQl9SZ2IzMikpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1fcERldmljZURyaXZlci0+R2V0RElCaXRzKCZiYWNrZ3JvdW5kLCBkZXN0X3JlY3QubGVmdCwgZGVzdF9yZWN0LnRvcCkpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWJhY2tncm91bmQuQ29tcG9zaXRlQml0bWFwKDAsIDAsIGJnX3BpeGVsX3dpZHRoLCBiZ19waXhlbF9oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEJpdG1hcCwgc3JjX3JlY3QubGVmdCwgc3JjX3JlY3QudG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kX21vZGUsIE5VTEwsIEZBTFNFLCBwSWNjVHJhbnNmb3JtKSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIEZYX1JFQ1Qgc3JjX3JlY3QoMCwgMCwgYmdfcGl4ZWxfd2lkdGgsIGJnX3BpeGVsX2hlaWdodCk7CisgICAgICAgIHJldHVybiBtX3BEZXZpY2VEcml2ZXItPlNldERJQml0cygmYmFja2dyb3VuZCwgMCwgJnNyY19yZWN0LCBkZXN0X3JlY3QubGVmdCwgZGVzdF9yZWN0LnRvcCwgRlhESUJfQkxFTkRfTk9STUFMKTsKKyAgICB9CisgICAgcmV0dXJuIG1fcERldmljZURyaXZlci0+U2V0RElCaXRzKHBCaXRtYXAsIDAsICZzcmNfcmVjdCwgZGVzdF9yZWN0LmxlZnQsIGRlc3RfcmVjdC50b3AsIGJsZW5kX21vZGUsIDAsIHBJY2NUcmFuc2Zvcm0pOworfQorRlhfQk9PTCBDRlhfUmVuZGVyRGV2aWNlOjpTdHJldGNoRElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIGludCBsZWZ0LCBpbnQgdG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsIEZYX0RXT1JEIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHBJY2NUcmFuc2Zvcm0sIGludCBibGVuZF9tb2RlKQoreworICAgIEZYX1JFQ1QgZGVzdF9yZWN0KGxlZnQsIHRvcCwgbGVmdCArIGRlc3Rfd2lkdGgsIHRvcCArIGRlc3RfaGVpZ2h0KTsKKyAgICBGWF9SRUNUIGNsaXBfYm94ID0gbV9DbGlwQm94OworICAgIGNsaXBfYm94LkludGVyc2VjdChkZXN0X3JlY3QpOworICAgIGlmIChjbGlwX2JveC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBtX3BEZXZpY2VEcml2ZXItPlN0cmV0Y2hESUJpdHMocEJpdG1hcCwgMCwgbGVmdCwgdG9wLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgJmNsaXBfYm94LCBmbGFncywgMCwgcEljY1RyYW5zZm9ybSwgYmxlbmRfbW9kZSk7Cit9CitGWF9CT09MIENGWF9SZW5kZXJEZXZpY2U6OlNldEJpdE1hc2soY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwgaW50IGxlZnQsIGludCB0b3AsIEZYX0RXT1JEIGFyZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgRlhfUkVDVCBzcmNfcmVjdCgwLCAwLCBwQml0bWFwLT5HZXRXaWR0aCgpLCBwQml0bWFwLT5HZXRIZWlnaHQoKSk7CisgICAgcmV0dXJuIG1fcERldmljZURyaXZlci0+U2V0RElCaXRzKHBCaXRtYXAsIGFyZ2IsICZzcmNfcmVjdCwgbGVmdCwgdG9wLCBGWERJQl9CTEVORF9OT1JNQUwsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOworfQorRlhfQk9PTCBDRlhfUmVuZGVyRGV2aWNlOjpTdHJldGNoQml0TWFzayhjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBpbnQgbGVmdCwgaW50IHRvcCwKKyAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgRlhfRFdPUkQgYXJnYiwgRlhfRFdPUkQgZmxhZ3MsCisgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIEZYX1JFQ1QgZGVzdF9yZWN0KGxlZnQsIHRvcCwgbGVmdCArIGRlc3Rfd2lkdGgsIHRvcCArIGRlc3RfaGVpZ2h0KTsKKyAgICBGWF9SRUNUIGNsaXBfYm94ID0gbV9DbGlwQm94OworICAgIGNsaXBfYm94LkludGVyc2VjdChkZXN0X3JlY3QpOworICAgIHJldHVybiBtX3BEZXZpY2VEcml2ZXItPlN0cmV0Y2hESUJpdHMocEJpdG1hcCwgYXJnYiwgbGVmdCwgdG9wLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgJmNsaXBfYm94LCBmbGFncywgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSk7Cit9CitGWF9CT09MIENGWF9SZW5kZXJEZXZpY2U6OlN0YXJ0RElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIGludCBiaXRtYXBfYWxwaGEsIEZYX0RXT1JEIGFyZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIEZYX0RXT1JEIGZsYWdzLCBGWF9MUFZPSUQmIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0sIGludCBibGVuZF9tb2RlKQoreworICAgIHJldHVybiBtX3BEZXZpY2VEcml2ZXItPlN0YXJ0RElCaXRzKHBCaXRtYXAsIGJpdG1hcF9hbHBoYSwgYXJnYiwgcE1hdHJpeCwgZmxhZ3MsIGhhbmRsZSwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSwgYmxlbmRfbW9kZSk7Cit9CitGWF9CT09MIENGWF9SZW5kZXJEZXZpY2U6OkNvbnRpbnVlRElCaXRzKEZYX0xQVk9JRCBoYW5kbGUsIElGWF9QYXVzZSogcFBhdXNlKQoreworICAgIHJldHVybiBtX3BEZXZpY2VEcml2ZXItPkNvbnRpbnVlRElCaXRzKGhhbmRsZSwgcFBhdXNlKTsKK30KK3ZvaWQgQ0ZYX1JlbmRlckRldmljZTo6Q2FuY2VsRElCaXRzKEZYX0xQVk9JRCBoYW5kbGUpCit7CisgICAgbV9wRGV2aWNlRHJpdmVyLT5DYW5jZWxESUJpdHMoaGFuZGxlKTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2UvZ2UvZnhfZ2VfZm9udC5jcHAgYi9jb3JlL3NyYy9meGdlL2dlL2Z4X2dlX2ZvbnQuY3BwCmluZGV4IGUwNDdkMmUuLmYzMjU0ZWEgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Z2UvZ2UvZnhfZ2VfZm9udC5jcHAKKysrIGIvY29yZS9zcmMvZnhnZS9nZS9meF9nZV9mb250LmNwcApAQCAtMSw0NTggKzEsNDU4IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9mcmVldHlwZS5oIg0KLSNpbmNsdWRlICJ0ZXh0X2ludC5oIg0KLSNkZWZpbmUgRU1fQURKVVNUKGVtLCBhKSAoZW0gPT0gMD8oYSk6IChhKSoxMDAwL2VtKQ0KLWV4dGVybiB2b2lkIF9GUERGQVBJX0dldEludGVybmFsRm9udERhdGEoaW50IGlkMSwgRlhfTFBDQllURSYgZGF0YSwgRlhfRFdPUkQmIHNpemUpOw0KLUNGWF9Gb250OjpDRlhfRm9udCgpDQotew0KLSAgICBtX3BTdWJzdEZvbnQgPSBOVUxMOw0KLSAgICBtX0ZhY2UgPSBOVUxMOw0KLSAgICBtX2JFbWJlZGRlZCA9IEZBTFNFOw0KLSAgICBtX2JWZXJ0aWNhbCA9IEZBTFNFOw0KLSAgICBtX3BGb250RGF0YSA9IE5VTEw7DQotICAgIG1fcEZvbnREYXRhQWxsb2NhdGlvbiA9IE5VTEw7DQotICAgIG1fZHdTaXplID0gMDsNCi0gICAgbV9wT3duZWRTdHJlYW0gPSBOVUxMOw0KLSAgICBtX3BHc3ViRGF0YSA9IE5VTEw7DQotICAgIG1fcFBsYXRmb3JtRm9udCA9IE5VTEw7DQotICAgIG1fcFBsYXRmb3JtRm9udENvbGxlY3Rpb24gPSBOVUxMOw0KLSAgICBtX3BEd0ZvbnQgPSBOVUxMOw0KLSAgICBtX2hIYW5kbGUgPSBOVUxMOw0KLSAgICBtX2JEd0xvYWRlZCA9IEZBTFNFOw0KLX0NCi1DRlhfRm9udDo6fkNGWF9Gb250KCkNCi17DQotICAgIGlmIChtX3BTdWJzdEZvbnQpIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BTdWJzdEZvbnQ7DQotICAgICAgICBtX3BTdWJzdEZvbnQgPSBOVUxMOw0KLSAgICB9DQotI2lmZGVmIEZPWElUX0NIUk9NRV9CVUlMRA0KLSAgICBpZiAobV9wRm9udERhdGFBbGxvY2F0aW9uKSB7DQotICAgICAgICBGWF9GcmVlKG1fcEZvbnREYXRhQWxsb2NhdGlvbik7DQotICAgICAgICBtX3BGb250RGF0YUFsbG9jYXRpb24gPSBOVUxMOw0KLSAgICB9DQotI2VuZGlmDQotICAgIGlmIChtX0ZhY2UpIHsNCi0jaWZkZWYgRk9YSVRfQ0hST01FX0JVSUxEDQotICAgICAgICBGWEZUX0xpYnJhcnkgbGlicmFyeSA9IEZYRlRfR2V0X0ZhY2VfRnJlZVR5cGUobV9GYWNlKTsNCi0gICAgICAgIGlmIChGWEZUX0dldF9GYWNlX0V4dGVybmFsX1N0cmVhbShtX0ZhY2UpKSB7DQotICAgICAgICAgICAgRlhGVF9DbGVhcl9GYWNlX0V4dGVybmFsX1N0cmVhbShtX0ZhY2UpOw0KLSAgICAgICAgfQ0KLSNlbmRpZg0KLSAgICAgICAgaWYobV9iRW1iZWRkZWQpIHsNCi0gICAgICAgICAgICBEZWxldGVGYWNlKCk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIENGWF9HRU1vZHVsZTo6R2V0KCktPkdldEZvbnRNZ3IoKS0+UmVsZWFzZUZhY2UobV9GYWNlKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAobV9wT3duZWRTdHJlYW0pIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wT3duZWRTdHJlYW0pOw0KLSAgICAgICAgbV9wT3duZWRTdHJlYW0gPSBOVUxMOw0KLSAgICB9DQotICAgIGlmIChtX3BHc3ViRGF0YSkgew0KLSAgICAgICAgRlhfRnJlZShtX3BHc3ViRGF0YSk7DQotICAgICAgICBtX3BHc3ViRGF0YSA9IE5VTEw7DQotICAgIH0NCi0jaWYgKF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXyAmJiAoIWRlZmluZWQoX0ZQREZBUElfTUlOSV8pKSkNCi0gICAgUmVsZWFzZVBsYXRmb3JtUmVzb3VyY2UoKTsNCi0jZW5kaWYNCi19DQotdm9pZCBDRlhfRm9udDo6RGVsZXRlRmFjZSgpDQotew0KLSAgICBGWEZUX0RvbmVfRmFjZShtX0ZhY2UpOw0KLSAgICBtX0ZhY2UgPSBOVUxMOw0KLX0NCi1GWF9CT09MIENGWF9Gb250OjpMb2FkU3Vic3QoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGZhY2VfbmFtZSwgRlhfQk9PTCBiVHJ1ZVR5cGUsIEZYX0RXT1JEIGZsYWdzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2VpZ2h0LCBpbnQgaXRhbGljX2FuZ2xlLCBpbnQgQ2hhcnNldENQLCBGWF9CT09MIGJWZXJ0aWNhbCkNCi17DQotICAgIG1fYkVtYmVkZGVkID0gRkFMU0U7DQotICAgIG1fYlZlcnRpY2FsID0gYlZlcnRpY2FsOw0KLSAgICBtX3BTdWJzdEZvbnQgPSBGWF9ORVcgQ0ZYX1N1YnN0Rm9udDsNCi0gICAgaWYgKCFtX3BTdWJzdEZvbnQpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBtX0ZhY2UgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRGb250TWdyKCktPkZpbmRTdWJzdEZvbnQoZmFjZV9uYW1lLCBiVHJ1ZVR5cGUsIGZsYWdzLCB3ZWlnaHQsIGl0YWxpY19hbmdsZSwNCi0gICAgICAgICAgICAgQ2hhcnNldENQLCBtX3BTdWJzdEZvbnQpOw0KLSNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8NCi0gICAgaWYobV9wU3Vic3RGb250LT5tX0V4dEhhbmRsZSkgew0KLSAgICAgICAgbV9wUGxhdGZvcm1Gb250ID0gbV9wU3Vic3RGb250LT5tX0V4dEhhbmRsZTsNCi0gICAgICAgIG1fcFN1YnN0Rm9udC0+bV9FeHRIYW5kbGUgPSBOVUxMOw0KLSAgICB9DQotI2VuZGlmDQotICAgIGlmIChtX0ZhY2UpIHsNCi0gICAgICAgIG1fcEZvbnREYXRhID0gRlhGVF9HZXRfRmFjZV9TdHJlYW1fQmFzZShtX0ZhY2UpOw0KLSAgICAgICAgbV9kd1NpemUgPSBGWEZUX0dldF9GYWNlX1N0cmVhbV9TaXplKG1fRmFjZSk7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLWV4dGVybiAiQyIgew0KLSAgICB1bnNpZ25lZCBsb25nIF9GVFN0cmVhbVJlYWQoRlhGVF9TdHJlYW0gc3RyZWFtLCB1bnNpZ25lZCBsb25nIG9mZnNldCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCkNCi0gICAgew0KLSAgICAgICAgaWYgKGNvdW50ID09IDApIHsNCi0gICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIElGWF9GaWxlUmVhZCogcEZpbGUgPSAoSUZYX0ZpbGVSZWFkKilzdHJlYW0tPmRlc2NyaXB0b3IucG9pbnRlcjsNCi0gICAgICAgIGludCByZXMgPSBwRmlsZS0+UmVhZEJsb2NrKGJ1ZmZlciwgb2Zmc2V0LCBjb3VudCk7DQotICAgICAgICBpZiAocmVzKSB7DQotICAgICAgICAgICAgcmV0dXJuIGNvdW50Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgdm9pZCBfRlRTdHJlYW1DbG9zZShGWEZUX1N0cmVhbSBzdHJlYW0pDQotICAgIHsNCi0gICAgfQ0KLX07DQotRlhfQk9PTCBfTG9hZEZpbGUoRlhGVF9MaWJyYXJ5IGxpYnJhcnksIEZYRlRfRmFjZSogRmFjZSwgSUZYX0ZpbGVSZWFkKiBwRmlsZSwgRlhGVF9TdHJlYW0qIHN0cmVhbSkNCi17DQotICAgIEZYRlRfU3RyZWFtIHN0cmVhbTEgPSAoRlhGVF9TdHJlYW0pRlhfQWxsb2MoRlhfQllURSwgc2l6ZW9mIChGWEZUX1N0cmVhbVJlYykpOw0KLSAgICBpZiAoIXN0cmVhbTEpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBzdHJlYW0xLT5iYXNlID0gTlVMTDsNCi0gICAgc3RyZWFtMS0+c2l6ZSA9ICh1bnNpZ25lZCBsb25nKXBGaWxlLT5HZXRTaXplKCk7DQotICAgIHN0cmVhbTEtPnBvcyA9IDA7DQotICAgIHN0cmVhbTEtPmRlc2NyaXB0b3IucG9pbnRlciA9IHBGaWxlOw0KLSAgICBzdHJlYW0xLT5jbG9zZSA9IF9GVFN0cmVhbUNsb3NlOw0KLSAgICBzdHJlYW0xLT5yZWFkID0gX0ZUU3RyZWFtUmVhZDsNCi0gICAgRlhGVF9PcGVuX0FyZ3MgYXJnczsNCi0gICAgYXJncy5mbGFncyA9IEZUX09QRU5fU1RSRUFNOw0KLSAgICBhcmdzLnN0cmVhbSA9IHN0cmVhbTE7DQotICAgIGlmIChGWEZUX09wZW5fRmFjZShsaWJyYXJ5LCAmYXJncywgMCwgRmFjZSkpIHsNCi0gICAgICAgIEZYX0ZyZWUoc3RyZWFtMSk7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKHN0cmVhbSkgew0KLSAgICAgICAgKnN0cmVhbSA9IHN0cmVhbTE7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ0ZYX0ZvbnQ6OkxvYWRGaWxlKElGWF9GaWxlUmVhZCogcEZpbGUpDQotew0KLSAgICBtX2JFbWJlZGRlZCA9IEZBTFNFOw0KLSAgICBGWEZUX0xpYnJhcnkgbGlicmFyeTsNCi0gICAgaWYgKENGWF9HRU1vZHVsZTo6R2V0KCktPkdldEZvbnRNZ3IoKS0+bV9GVExpYnJhcnkgPT0gTlVMTCkgew0KLSAgICAgICAgRlhGVF9Jbml0X0ZyZWVUeXBlKCZDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRGb250TWdyKCktPm1fRlRMaWJyYXJ5KTsNCi0gICAgfQ0KLSAgICBsaWJyYXJ5ID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Rm9udE1ncigpLT5tX0ZUTGlicmFyeTsNCi0gICAgRlhGVF9TdHJlYW0gc3RyZWFtID0gTlVMTDsNCi0gICAgaWYgKCFfTG9hZEZpbGUobGlicmFyeSwgJm1fRmFjZSwgcEZpbGUsICZzdHJlYW0pKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbV9wT3duZWRTdHJlYW0gPSBzdHJlYW07DQotICAgIEZYRlRfU2V0X1BpeGVsX1NpemVzKG1fRmFjZSwgMCwgNjQpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotaW50IENGWF9Gb250OjpHZXRHbHlwaFdpZHRoKEZYX0RXT1JEIGdseXBoX2luZGV4KQ0KLXsNCi0gICAgaWYgKCFtX0ZhY2UpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGlmIChtX3BTdWJzdEZvbnQgJiYgKG1fcFN1YnN0Rm9udC0+bV9TdWJzdEZsYWdzICYgRlhGT05UX1NVQlNUX01NKSkgew0KLSAgICAgICAgQWRqdXN0TU1QYXJhbXMoZ2x5cGhfaW5kZXgsIDAsIDApOw0KLSAgICB9DQotICAgIGludCBlcnIgPSBGWEZUX0xvYWRfR2x5cGgobV9GYWNlLCBnbHlwaF9pbmRleCwgRlhGVF9MT0FEX05PX1NDQUxFIHwgRlhGVF9MT0FEX0lHTk9SRV9HTE9CQUxfQURWQU5DRV9XSURUSCk7DQotICAgIGlmIChlcnIpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGludCB3aWR0aCA9IEVNX0FESlVTVChGWEZUX0dldF9GYWNlX1VuaXRzUGVyRU0obV9GYWNlKSwgRlhGVF9HZXRfR2x5cGhfSG9yaUFkdmFuY2UobV9GYWNlKSk7DQotICAgIHJldHVybiB3aWR0aDsNCi19DQotc3RhdGljIEZYRlRfRmFjZSBGVF9Mb2FkRm9udChGWF9MUEJZVEUgcERhdGEsIGludCBzaXplKQ0KLXsNCi0gICAgRlhGVF9MaWJyYXJ5IGxpYnJhcnk7DQotICAgIGlmIChDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRGb250TWdyKCktPm1fRlRMaWJyYXJ5ID09IE5VTEwpIHsNCi0gICAgICAgIEZYRlRfSW5pdF9GcmVlVHlwZSgmQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Rm9udE1ncigpLT5tX0ZUTGlicmFyeSk7DQotICAgIH0NCi0gICAgbGlicmFyeSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldEZvbnRNZ3IoKS0+bV9GVExpYnJhcnk7DQotICAgIEZYRlRfRmFjZSBmYWNlOw0KLSAgICBpbnQgZXJyb3IgPSBGWEZUX05ld19NZW1vcnlfRmFjZShsaWJyYXJ5LCBwRGF0YSwgc2l6ZSwgMCwgJmZhY2UpOw0KLSAgICBpZiAoZXJyb3IpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGVycm9yID0gRlhGVF9TZXRfUGl4ZWxfU2l6ZXMoZmFjZSwgNjQsIDY0KTsNCi0gICAgaWYgKGVycm9yKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gZmFjZTsNCi19DQotRlhfQk9PTCBDRlhfRm9udDo6TG9hZEVtYmVkZGVkKEZYX0xQQ0JZVEUgZGF0YSwgRlhfRFdPUkQgc2l6ZSkNCi17DQotI2lmZGVmIEZPWElUX0NIUk9NRV9CVUlMRA0KLSAgICBtX3BGb250RGF0YUFsbG9jYXRpb24gPSBGWF9BbGxvYyhGWF9CWVRFLCBzaXplKTsNCi0gICAgaWYgKCFtX3BGb250RGF0YUFsbG9jYXRpb24pIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWFNZU19tZW1jcHkzMihtX3BGb250RGF0YUFsbG9jYXRpb24sIGRhdGEsIHNpemUpOw0KLSAgICBtX0ZhY2UgPSBGVF9Mb2FkRm9udCgoRlhfTFBCWVRFKW1fcEZvbnREYXRhQWxsb2NhdGlvbiwgc2l6ZSk7DQotICAgIG1fcEZvbnREYXRhID0gKEZYX0xQQllURSltX3BGb250RGF0YUFsbG9jYXRpb247DQotI2Vsc2UNCi0gICAgbV9GYWNlID0gRlRfTG9hZEZvbnQoKEZYX0xQQllURSlkYXRhLCBzaXplKTsNCi0gICAgbV9wRm9udERhdGEgPSAoRlhfTFBCWVRFKWRhdGE7DQotI2VuZGlmDQotICAgIG1fYkVtYmVkZGVkID0gVFJVRTsNCi0gICAgbV9kd1NpemUgPSBzaXplOw0KLSAgICByZXR1cm4gbV9GYWNlICE9IE5VTEw7DQotfQ0KLUZYX0JPT0wgQ0ZYX0ZvbnQ6OklzVFRGb250KCkNCi17DQotICAgIGlmIChtX0ZhY2UgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHJldHVybiBGWEZUX0lzX0ZhY2VfVFRfT1QobV9GYWNlKSA9PSBGWEZUX0ZBQ0VfRkxBR19TRk5UOw0KLX0NCi1pbnQgQ0ZYX0ZvbnQ6OkdldEFzY2VudCgpIGNvbnN0DQotew0KLSAgICBpZiAobV9GYWNlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGludCBhc2NlbnQgPSBFTV9BREpVU1QoRlhGVF9HZXRfRmFjZV9Vbml0c1BlckVNKG1fRmFjZSksIEZYRlRfR2V0X0ZhY2VfQXNjZW5kZXIobV9GYWNlKSk7DQotICAgIHJldHVybiBhc2NlbnQ7DQotfQ0KLWludCBDRlhfRm9udDo6R2V0RGVzY2VudCgpIGNvbnN0DQotew0KLSAgICBpZiAobV9GYWNlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGludCBkZXNjZW50ID0gRU1fQURKVVNUKEZYRlRfR2V0X0ZhY2VfVW5pdHNQZXJFTShtX0ZhY2UpLCBGWEZUX0dldF9GYWNlX0Rlc2NlbmRlcihtX0ZhY2UpKTsNCi0gICAgcmV0dXJuIGRlc2NlbnQ7DQotfQ0KLUZYX0JPT0wgQ0ZYX0ZvbnQ6OkdldEdseXBoQkJveChGWF9EV09SRCBnbHlwaF9pbmRleCwgRlhfUkVDVCAmYmJveCkNCi17DQotICAgIGlmIChtX0ZhY2UgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChGWEZUX0lzX0ZhY2VfVHJpY2t5KG1fRmFjZSkpIHsNCi0gICAgICAgIGludCBlcnJvciA9IEZYRlRfU2V0X0NoYXJfU2l6ZShtX0ZhY2UsIDAsIDEwMDAgKiA2NCwgNzIsIDcyKTsNCi0gICAgICAgIGlmIChlcnJvcikgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGVycm9yID0gRlhGVF9Mb2FkX0dseXBoKG1fRmFjZSwgZ2x5cGhfaW5kZXgsIEZYRlRfTE9BRF9JR05PUkVfR0xPQkFMX0FEVkFOQ0VfV0lEVEgpOw0KLSAgICAgICAgaWYgKGVycm9yKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhGVF9CQm94IGNib3g7DQotICAgICAgICBGVF9HbHlwaCBnbHlwaDsNCi0gICAgICAgIGVycm9yID0gRlhGVF9HZXRfR2x5cGgoKChGWEZUX0ZhY2UpbV9GYWNlKS0+Z2x5cGgsICZnbHlwaCk7DQotICAgICAgICBpZiAoZXJyb3IpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBGWEZUX0dseXBoX0dldF9DQm94KGdseXBoLCBGWEZUX0dMWVBIX0JCT1hfUElYRUxTLCAmY2JveCk7DQotICAgICAgICBpbnQgcGl4ZWxfc2l6ZV94ID0gKChGWEZUX0ZhY2UpbV9GYWNlKS0+c2l6ZS0+bWV0cmljcy54X3BwZW0sDQotICAgICAgICAgICAgcGl4ZWxfc2l6ZV95ID0gKChGWEZUX0ZhY2UpbV9GYWNlKS0+c2l6ZS0+bWV0cmljcy55X3BwZW07DQotICAgICAgICBpZiAocGl4ZWxfc2l6ZV94ID09IDAgfHwgcGl4ZWxfc2l6ZV95ID09IDApIHsNCi0gICAgICAgICAgICBiYm94LmxlZnQgPSBjYm94LnhNaW47DQotICAgICAgICAgICAgYmJveC5yaWdodCA9IGNib3gueE1heDsNCi0gICAgICAgICAgICBiYm94LnRvcCA9IGNib3gueU1heDsNCi0gICAgICAgICAgICBiYm94LmJvdHRvbSA9IGNib3gueU1pbjsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgYmJveC5sZWZ0ID0gY2JveC54TWluICogMTAwMCAvIHBpeGVsX3NpemVfeDsNCi0gICAgICAgICAgICBiYm94LnJpZ2h0ID0gY2JveC54TWF4ICogMTAwMCAvIHBpeGVsX3NpemVfeDsNCi0gICAgICAgICAgICBiYm94LnRvcCA9IGNib3gueU1heCAqIDEwMDAgLyBwaXhlbF9zaXplX3k7DQotICAgICAgICAgICAgYmJveC5ib3R0b20gPSBjYm94LnlNaW4gKiAxMDAwIC8gcGl4ZWxfc2l6ZV95Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGJib3gudG9wID4gRlhGVF9HZXRfRmFjZV9Bc2NlbmRlcihtX0ZhY2UpKSB7DQotICAgICAgICAgICAgYmJveC50b3AgPSBGWEZUX0dldF9GYWNlX0FzY2VuZGVyKG1fRmFjZSk7DQotICAgICAgICB9DQotICAgICAgICBpZiAoYmJveC5ib3R0b20gPCBGWEZUX0dldF9GYWNlX0Rlc2NlbmRlcihtX0ZhY2UpKSB7DQotICAgICAgICAgICAgYmJveC5ib3R0b20gPSBGWEZUX0dldF9GYWNlX0Rlc2NlbmRlcihtX0ZhY2UpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlRfRG9uZV9HbHlwaChnbHlwaCk7DQotICAgICAgICByZXR1cm4gRlhGVF9TZXRfUGl4ZWxfU2l6ZXMobV9GYWNlLCAwLCA2NCkgPT0gMDsNCi0gICAgfQ0KLSAgICBpZiAoRlhGVF9Mb2FkX0dseXBoKG1fRmFjZSwgZ2x5cGhfaW5kZXgsIEZYRlRfTE9BRF9OT19TQ0FMRSB8IEZYRlRfTE9BRF9JR05PUkVfR0xPQkFMX0FEVkFOQ0VfV0lEVEgpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaW50IGVtID0gRlhGVF9HZXRfRmFjZV9Vbml0c1BlckVNKG1fRmFjZSk7DQotICAgIGlmIChlbSA9PSAwKSB7DQotICAgICAgICBiYm94LmxlZnQgPSBGWEZUX0dldF9HbHlwaF9Ib3JpQmVhcmluZ1gobV9GYWNlKTsNCi0gICAgICAgIGJib3guYm90dG9tID0gRlhGVF9HZXRfR2x5cGhfSG9yaUJlYXJpbmdZKG1fRmFjZSk7DQotICAgICAgICBiYm94LnRvcCA9IGJib3guYm90dG9tIC0gRlhGVF9HZXRfR2x5cGhfSGVpZ2h0KG1fRmFjZSk7DQotICAgICAgICBiYm94LnJpZ2h0ID0gYmJveC5sZWZ0ICsgRlhGVF9HZXRfR2x5cGhfV2lkdGgobV9GYWNlKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGJib3gubGVmdCA9IEZYRlRfR2V0X0dseXBoX0hvcmlCZWFyaW5nWChtX0ZhY2UpICogMTAwMCAvIGVtOw0KLSAgICAgICAgYmJveC50b3AgPSAoRlhGVF9HZXRfR2x5cGhfSG9yaUJlYXJpbmdZKG1fRmFjZSkgLSBGWEZUX0dldF9HbHlwaF9IZWlnaHQobV9GYWNlKSkgKiAxMDAwIC8gZW07DQotICAgICAgICBiYm94LnJpZ2h0ID0gKEZYRlRfR2V0X0dseXBoX0hvcmlCZWFyaW5nWChtX0ZhY2UpICsgRlhGVF9HZXRfR2x5cGhfV2lkdGgobV9GYWNlKSkgKiAxMDAwIC8gZW07DQotICAgICAgICBiYm94LmJvdHRvbSA9IChGWEZUX0dldF9HbHlwaF9Ib3JpQmVhcmluZ1kobV9GYWNlKSkgKiAxMDAwIC8gZW07DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ0ZYX0ZvbnQ6OklzSXRhbGljKCkNCi17DQotICAgIGlmIChtX0ZhY2UgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYX0JPT0wgcmV0ID0gRlhGVF9Jc19GYWNlX0l0YWxpYyhtX0ZhY2UpID09IEZYRlRfU1RZTEVfRkxBR19JVEFMSUM7DQotICAgIGlmICghcmV0KSB7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyBzdHIoRlhGVF9HZXRfRmFjZV9TdHlsZV9OYW1lKG1fRmFjZSkpOw0KLSAgICAgICAgc3RyLk1ha2VMb3dlcigpOw0KLSAgICAgICAgaWYgKHN0ci5GaW5kKCJpdGFsaWMiKSAhPSAtMSkgew0KLSAgICAgICAgICAgIHJldCA9IFRSVUU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIHJldDsNCi19DQotRlhfQk9PTCBDRlhfRm9udDo6SXNCb2xkKCkNCi17DQotICAgIGlmIChtX0ZhY2UgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHJldHVybiBGWEZUX0lzX0ZhY2VfQm9sZChtX0ZhY2UpID09IEZYRlRfU1RZTEVfRkxBR19CT0xEOw0KLX0NCi1GWF9CT09MIENGWF9Gb250OjpJc0ZpeGVkV2lkdGgoKQ0KLXsNCi0gICAgaWYgKG1fRmFjZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgcmV0dXJuIEZYRlRfSXNfRmFjZV9maXhlZHdpZHRoKG1fRmFjZSk7DQotfQ0KLUNGWF9XaWRlU3RyaW5nIENGWF9Gb250OjpHZXRQc05hbWUoKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fRmFjZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsNCi0gICAgfQ0KLSAgICBDRlhfV2lkZVN0cmluZyBwc05hbWUgPSBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKEZYRlRfR2V0X1Bvc3RzY3JpcHRfTmFtZShtX0ZhY2UpKTsNCi0gICAgaWYgKHBzTmFtZS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIHBzTmFtZSA9ICBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKCJVbnRpdGxlZCIpOw0KLSAgICB9DQotICAgIHJldHVybiBwc05hbWU7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIENGWF9Gb250OjpHZXRGYW1pbHlOYW1lKCkgY29uc3QNCi17DQotICAgIGlmIChtX0ZhY2UgPT0gTlVMTCAmJiBtX3BTdWJzdEZvbnQgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKCk7DQotICAgIH0NCi0gICAgaWYgKG1fRmFjZSkgew0KLSAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKEZYRlRfR2V0X0ZhY2VfRmFtaWx5X05hbWUobV9GYWNlKSk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICByZXR1cm4gbV9wU3Vic3RGb250LT5tX0ZhbWlseTsNCi0gICAgfQ0KLX0NCi1DRlhfQnl0ZVN0cmluZyBDRlhfRm9udDo6R2V0RmFjZU5hbWUoKSBjb25zdA0KLXsNCi0gICAgaWYgKG1fRmFjZSA9PSBOVUxMICYmIG1fcFN1YnN0Rm9udCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsNCi0gICAgfQ0KLSAgICBpZiAobV9GYWNlKSB7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyBmYWNlbmFtZTsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIHN0eWxlID0gQ0ZYX0J5dGVTdHJpbmcoRlhGVF9HZXRfRmFjZV9TdHlsZV9OYW1lKG1fRmFjZSkpOw0KLSAgICAgICAgZmFjZW5hbWUgPSBHZXRGYW1pbHlOYW1lKCk7DQotICAgICAgICBpZiAoZmFjZW5hbWUuSXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgZmFjZW5hbWUgPSAiVW50aXRsZWQiOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCFzdHlsZS5Jc0VtcHR5KCkgJiYgc3R5bGUgIT0gIlJlZ3VsYXIiKSB7DQotICAgICAgICAgICAgZmFjZW5hbWUgKz0gIiAiICsgc3R5bGU7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gZmFjZW5hbWU7DQotICAgIH0gZWxzZSB7DQotICAgICAgICByZXR1cm4gbV9wU3Vic3RGb250LT5tX0ZhbWlseTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENGWF9Gb250OjpHZXRCQm94KEZYX1JFQ1QgJmJib3gpDQotew0KLSAgICBpZiAobV9GYWNlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpbnQgZW0gPSBGWEZUX0dldF9GYWNlX1VuaXRzUGVyRU0obV9GYWNlKTsNCi0gICAgaWYgKGVtID09IDApIHsNCi0gICAgICAgIGJib3gubGVmdCA9IEZYRlRfR2V0X0ZhY2VfeE1pbihtX0ZhY2UpOw0KLSAgICAgICAgYmJveC5ib3R0b20gPSBGWEZUX0dldF9GYWNlX3lNYXgobV9GYWNlKTsNCi0gICAgICAgIGJib3gudG9wID0gRlhGVF9HZXRfRmFjZV95TWluKG1fRmFjZSk7DQotICAgICAgICBiYm94LnJpZ2h0ID0gRlhGVF9HZXRfRmFjZV94TWF4KG1fRmFjZSk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBiYm94LmxlZnQgPSBGWEZUX0dldF9GYWNlX3hNaW4obV9GYWNlKSAqIDEwMDAgLyBlbTsNCi0gICAgICAgIGJib3gudG9wID0gRlhGVF9HZXRfRmFjZV95TWluKG1fRmFjZSkgKiAxMDAwIC8gZW07DQotICAgICAgICBiYm94LnJpZ2h0ID0gRlhGVF9HZXRfRmFjZV94TWF4KG1fRmFjZSkgKiAxMDAwIC8gZW07DQotICAgICAgICBiYm94LmJvdHRvbSA9IEZYRlRfR2V0X0ZhY2VfeU1heChtX0ZhY2UpICogMTAwMCAvIGVtOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1pbnQgQ0ZYX0ZvbnQ6OkdldEhlaWdodCgpDQotew0KLSAgICBpZiAobV9GYWNlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGludCBoZWlnaHQgPSBFTV9BREpVU1QoRlhGVF9HZXRfRmFjZV9Vbml0c1BlckVNKG1fRmFjZSksIEZYRlRfR2V0X0ZhY2VfSGVpZ2h0KG1fRmFjZSkpOw0KLSAgICByZXR1cm4gaGVpZ2h0Ow0KLX0NCi1pbnQgQ0ZYX0ZvbnQ6OkdldE1heEFkdmFuY2VXaWR0aCgpDQotew0KLSAgICBpZiAobV9GYWNlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGludCB3aWR0aCA9IEVNX0FESlVTVChGWEZUX0dldF9GYWNlX1VuaXRzUGVyRU0obV9GYWNlKSwgRlhGVF9HZXRfRmFjZV9NYXhBZHZhbmNlV2lkdGgobV9GYWNlKSk7DQotICAgIHJldHVybiB3aWR0aDsNCi19DQotaW50IENGWF9Gb250OjpHZXRVTFBvcygpDQotew0KLSAgICBpZiAobV9GYWNlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIGludCBwb3MgPSBFTV9BREpVU1QoRlhGVF9HZXRfRmFjZV9Vbml0c1BlckVNKG1fRmFjZSksIEZYRlRfR2V0X0ZhY2VfVW5kZXJMaW5lUG9zaXRpb24obV9GYWNlKSk7DQotICAgIHJldHVybiBwb3M7DQotfQ0KLWludCBDRlhfRm9udDo6R2V0VUx0aGlja25lc3MoKQ0KLXsNCi0gICAgaWYgKG1fRmFjZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICBpbnQgdGhpY2tuZXNzID0gRU1fQURKVVNUKEZYRlRfR2V0X0ZhY2VfVW5pdHNQZXJFTShtX0ZhY2UpLCBGWEZUX0dldF9GYWNlX1VuZGVyTGluZVRoaWNrbmVzcyhtX0ZhY2UpKTsNCi0gICAgcmV0dXJuIHRoaWNrbmVzczsNCi19DQotQ0ZYX1VuaWNvZGVFbmNvZGluZzo6Q0ZYX1VuaWNvZGVFbmNvZGluZyhDRlhfRm9udCogcEZvbnQpDQotew0KLSAgICBtX3BGb250ID0gcEZvbnQ7DQotfQ0KLUZYX0RXT1JEIENGWF9Vbmljb2RlRW5jb2Rpbmc6OkdseXBoRnJvbUNoYXJDb2RlKEZYX0RXT1JEIGNoYXJjb2RlKQ0KLXsNCi0gICAgRlhGVF9GYWNlIGZhY2UgPSAgbV9wRm9udC0+R2V0RmFjZSgpOw0KLSAgICBpZiAoIWZhY2UpIHsNCi0gICAgICAgIHJldHVybiBjaGFyY29kZTsNCi0gICAgfQ0KLSAgICBpZiAoRlhGVF9TZWxlY3RfQ2hhcm1hcChmYWNlLCBGWEZUX0VOQ09ESU5HX1VOSUNPREUpID09IDApIHsNCi0gICAgICAgIHJldHVybiBGWEZUX0dldF9DaGFyX0luZGV4KGZhY2UsIGNoYXJjb2RlKTsNCi0gICAgfQ0KLSAgICBpZiAobV9wRm9udC0+bV9wU3Vic3RGb250ICYmIG1fcEZvbnQtPm1fcFN1YnN0Rm9udC0+bV9DaGFyc2V0ID09IDIpIHsNCi0gICAgICAgIEZYX0RXT1JEIGluZGV4ID0gMDsNCi0gICAgICAgIGlmIChGWEZUX1NlbGVjdF9DaGFybWFwKGZhY2UsIEZYRlRfRU5DT0RJTkdfTVNfU1lNQk9MKSA9PSAwKSB7DQotICAgICAgICAgICAgaW5kZXggPSBGWEZUX0dldF9DaGFyX0luZGV4KGZhY2UsIGNoYXJjb2RlKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICghaW5kZXggJiYgIUZYRlRfU2VsZWN0X0NoYXJtYXAoZmFjZSwgRlhGVF9FTkNPRElOR19BUFBMRV9ST01BTikpIHsNCi0gICAgICAgICAgICByZXR1cm4gRlhGVF9HZXRfQ2hhcl9JbmRleChmYWNlLCBjaGFyY29kZSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIGNoYXJjb2RlOw0KLX0NCi1GWF9EV09SRCBDRlhfVW5pY29kZUVuY29kaW5nOjpHbHlwaEZyb21DaGFyQ29kZUV4KEZYX0RXT1JEIGNoYXJjb2RlLCBpbnQgZW5jb2RpbmcpDQotew0KLSAgICBGWEZUX0ZhY2UgZmFjZSA9ICBtX3BGb250LT5HZXRGYWNlKCk7DQotICAgIGlmICghZmFjZSkgew0KLSAgICAgICAgcmV0dXJuIGNoYXJjb2RlOw0KLSAgICB9DQotICAgIGlmIChlbmNvZGluZyA9PSBFTkNPRElOR19VTklDT0RFKSB7DQotICAgICAgICByZXR1cm4JR2x5cGhGcm9tQ2hhckNvZGUoY2hhcmNvZGUpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaW50IG5tYXBzID0gRlhGVF9HZXRfRmFjZV9DaGFybWFwQ291bnQobV9wRm9udC0+bV9GYWNlKTsNCi0gICAgICAgIGludCBpID0gMDsNCi0gICAgICAgIHdoaWxlIChpIDwgbm1hcHMpIHsNCi0gICAgICAgICAgICBpbnQgZW5jb2RpbmcgPSBGWEZUX0dldF9DaGFybWFwX0VuY29kaW5nKEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcHMoZmFjZSlbaSsrXSk7DQotICAgICAgICAgICAgaWYgKGVuY29kaW5nICE9IEZYRlRfRU5DT0RJTkdfVU5JQ09ERSkgew0KLSAgICAgICAgICAgICAgICBGWEZUX1NlbGVjdF9DaGFybWFwKGZhY2UsIGVuY29kaW5nKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBGWEZUX0dldF9DaGFyX0luZGV4KGZhY2UsIGNoYXJjb2RlKTsNCi19DQotSUZYX0ZvbnRFbmNvZGluZyogRlhHRV9DcmVhdGVVbmljb2RlRW5jb2RpbmcoQ0ZYX0ZvbnQqIHBGb250KQ0KLXsNCi0gICAgQ0ZYX1VuaWNvZGVFbmNvZGluZyogcEVuY29kaW5nID0gTlVMTDsNCi0gICAgcEVuY29kaW5nID0gRlhfTkVXIENGWF9Vbmljb2RlRW5jb2RpbmcocEZvbnQpOw0KLSAgICByZXR1cm4gcEVuY29kaW5nOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2ZyZWV0eXBlLmgiCisjaW5jbHVkZSAidGV4dF9pbnQuaCIKKyNkZWZpbmUgRU1fQURKVVNUKGVtLCBhKSAoZW0gPT0gMD8oYSk6IChhKSoxMDAwL2VtKQorZXh0ZXJuIHZvaWQgX0ZQREZBUElfR2V0SW50ZXJuYWxGb250RGF0YShpbnQgaWQxLCBGWF9MUENCWVRFJiBkYXRhLCBGWF9EV09SRCYgc2l6ZSk7CitDRlhfRm9udDo6Q0ZYX0ZvbnQoKQoreworICAgIG1fcFN1YnN0Rm9udCA9IE5VTEw7CisgICAgbV9GYWNlID0gTlVMTDsKKyAgICBtX2JFbWJlZGRlZCA9IEZBTFNFOworICAgIG1fYlZlcnRpY2FsID0gRkFMU0U7CisgICAgbV9wRm9udERhdGEgPSBOVUxMOworICAgIG1fcEZvbnREYXRhQWxsb2NhdGlvbiA9IE5VTEw7CisgICAgbV9kd1NpemUgPSAwOworICAgIG1fcE93bmVkU3RyZWFtID0gTlVMTDsKKyAgICBtX3BHc3ViRGF0YSA9IE5VTEw7CisgICAgbV9wUGxhdGZvcm1Gb250ID0gTlVMTDsKKyAgICBtX3BQbGF0Zm9ybUZvbnRDb2xsZWN0aW9uID0gTlVMTDsKKyAgICBtX3BEd0ZvbnQgPSBOVUxMOworICAgIG1faEhhbmRsZSA9IE5VTEw7CisgICAgbV9iRHdMb2FkZWQgPSBGQUxTRTsKK30KK0NGWF9Gb250Ojp+Q0ZYX0ZvbnQoKQoreworICAgIGlmIChtX3BTdWJzdEZvbnQpIHsKKyAgICAgICAgZGVsZXRlIG1fcFN1YnN0Rm9udDsKKyAgICAgICAgbV9wU3Vic3RGb250ID0gTlVMTDsKKyAgICB9CisjaWZkZWYgRk9YSVRfQ0hST01FX0JVSUxECisgICAgaWYgKG1fcEZvbnREYXRhQWxsb2NhdGlvbikgeworICAgICAgICBGWF9GcmVlKG1fcEZvbnREYXRhQWxsb2NhdGlvbik7CisgICAgICAgIG1fcEZvbnREYXRhQWxsb2NhdGlvbiA9IE5VTEw7CisgICAgfQorI2VuZGlmCisgICAgaWYgKG1fRmFjZSkgeworI2lmZGVmIEZPWElUX0NIUk9NRV9CVUlMRAorICAgICAgICBGWEZUX0xpYnJhcnkgbGlicmFyeSA9IEZYRlRfR2V0X0ZhY2VfRnJlZVR5cGUobV9GYWNlKTsKKyAgICAgICAgaWYgKEZYRlRfR2V0X0ZhY2VfRXh0ZXJuYWxfU3RyZWFtKG1fRmFjZSkpIHsKKyAgICAgICAgICAgIEZYRlRfQ2xlYXJfRmFjZV9FeHRlcm5hbF9TdHJlYW0obV9GYWNlKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmKG1fYkVtYmVkZGVkKSB7CisgICAgICAgICAgICBEZWxldGVGYWNlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRGb250TWdyKCktPlJlbGVhc2VGYWNlKG1fRmFjZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1fcE93bmVkU3RyZWFtKSB7CisgICAgICAgIEZYX0ZyZWUobV9wT3duZWRTdHJlYW0pOworICAgICAgICBtX3BPd25lZFN0cmVhbSA9IE5VTEw7CisgICAgfQorICAgIGlmIChtX3BHc3ViRGF0YSkgeworICAgICAgICBGWF9GcmVlKG1fcEdzdWJEYXRhKTsKKyAgICAgICAgbV9wR3N1YkRhdGEgPSBOVUxMOworICAgIH0KKyNpZiAoX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfICYmICghZGVmaW5lZChfRlBERkFQSV9NSU5JXykpKQorICAgIFJlbGVhc2VQbGF0Zm9ybVJlc291cmNlKCk7CisjZW5kaWYKK30KK3ZvaWQgQ0ZYX0ZvbnQ6OkRlbGV0ZUZhY2UoKQoreworICAgIEZYRlRfRG9uZV9GYWNlKG1fRmFjZSk7CisgICAgbV9GYWNlID0gTlVMTDsKK30KK0ZYX0JPT0wgQ0ZYX0ZvbnQ6OkxvYWRTdWJzdChjb25zdCBDRlhfQnl0ZVN0cmluZyYgZmFjZV9uYW1lLCBGWF9CT09MIGJUcnVlVHlwZSwgRlhfRFdPUkQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdlaWdodCwgaW50IGl0YWxpY19hbmdsZSwgaW50IENoYXJzZXRDUCwgRlhfQk9PTCBiVmVydGljYWwpCit7CisgICAgbV9iRW1iZWRkZWQgPSBGQUxTRTsKKyAgICBtX2JWZXJ0aWNhbCA9IGJWZXJ0aWNhbDsKKyAgICBtX3BTdWJzdEZvbnQgPSBGWF9ORVcgQ0ZYX1N1YnN0Rm9udDsKKyAgICBpZiAoIW1fcFN1YnN0Rm9udCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fRmFjZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldEZvbnRNZ3IoKS0+RmluZFN1YnN0Rm9udChmYWNlX25hbWUsIGJUcnVlVHlwZSwgZmxhZ3MsIHdlaWdodCwgaXRhbGljX2FuZ2xlLAorICAgICAgICAgICAgIENoYXJzZXRDUCwgbV9wU3Vic3RGb250KTsKKyNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8KKyAgICBpZihtX3BTdWJzdEZvbnQtPm1fRXh0SGFuZGxlKSB7CisgICAgICAgIG1fcFBsYXRmb3JtRm9udCA9IG1fcFN1YnN0Rm9udC0+bV9FeHRIYW5kbGU7CisgICAgICAgIG1fcFN1YnN0Rm9udC0+bV9FeHRIYW5kbGUgPSBOVUxMOworICAgIH0KKyNlbmRpZgorICAgIGlmIChtX0ZhY2UpIHsKKyAgICAgICAgbV9wRm9udERhdGEgPSBGWEZUX0dldF9GYWNlX1N0cmVhbV9CYXNlKG1fRmFjZSk7CisgICAgICAgIG1fZHdTaXplID0gRlhGVF9HZXRfRmFjZV9TdHJlYW1fU2l6ZShtX0ZhY2UpOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK2V4dGVybiAiQyIgeworICAgIHVuc2lnbmVkIGxvbmcgX0ZUU3RyZWFtUmVhZChGWEZUX1N0cmVhbSBzdHJlYW0sIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQpCisgICAgeworICAgICAgICBpZiAoY291bnQgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgSUZYX0ZpbGVSZWFkKiBwRmlsZSA9IChJRlhfRmlsZVJlYWQqKXN0cmVhbS0+ZGVzY3JpcHRvci5wb2ludGVyOworICAgICAgICBpbnQgcmVzID0gcEZpbGUtPlJlYWRCbG9jayhidWZmZXIsIG9mZnNldCwgY291bnQpOworICAgICAgICBpZiAocmVzKSB7CisgICAgICAgICAgICByZXR1cm4gY291bnQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHZvaWQgX0ZUU3RyZWFtQ2xvc2UoRlhGVF9TdHJlYW0gc3RyZWFtKQorICAgIHsKKyAgICB9Cit9OworRlhfQk9PTCBfTG9hZEZpbGUoRlhGVF9MaWJyYXJ5IGxpYnJhcnksIEZYRlRfRmFjZSogRmFjZSwgSUZYX0ZpbGVSZWFkKiBwRmlsZSwgRlhGVF9TdHJlYW0qIHN0cmVhbSkKK3sKKyAgICBGWEZUX1N0cmVhbSBzdHJlYW0xID0gKEZYRlRfU3RyZWFtKUZYX0FsbG9jKEZYX0JZVEUsIHNpemVvZiAoRlhGVF9TdHJlYW1SZWMpKTsKKyAgICBpZiAoIXN0cmVhbTEpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBzdHJlYW0xLT5iYXNlID0gTlVMTDsKKyAgICBzdHJlYW0xLT5zaXplID0gKHVuc2lnbmVkIGxvbmcpcEZpbGUtPkdldFNpemUoKTsKKyAgICBzdHJlYW0xLT5wb3MgPSAwOworICAgIHN0cmVhbTEtPmRlc2NyaXB0b3IucG9pbnRlciA9IHBGaWxlOworICAgIHN0cmVhbTEtPmNsb3NlID0gX0ZUU3RyZWFtQ2xvc2U7CisgICAgc3RyZWFtMS0+cmVhZCA9IF9GVFN0cmVhbVJlYWQ7CisgICAgRlhGVF9PcGVuX0FyZ3MgYXJnczsKKyAgICBhcmdzLmZsYWdzID0gRlRfT1BFTl9TVFJFQU07CisgICAgYXJncy5zdHJlYW0gPSBzdHJlYW0xOworICAgIGlmIChGWEZUX09wZW5fRmFjZShsaWJyYXJ5LCAmYXJncywgMCwgRmFjZSkpIHsKKyAgICAgICAgRlhfRnJlZShzdHJlYW0xKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoc3RyZWFtKSB7CisgICAgICAgICpzdHJlYW0gPSBzdHJlYW0xOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0ZYX0ZvbnQ6OkxvYWRGaWxlKElGWF9GaWxlUmVhZCogcEZpbGUpCit7CisgICAgbV9iRW1iZWRkZWQgPSBGQUxTRTsKKyAgICBGWEZUX0xpYnJhcnkgbGlicmFyeTsKKyAgICBpZiAoQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Rm9udE1ncigpLT5tX0ZUTGlicmFyeSA9PSBOVUxMKSB7CisgICAgICAgIEZYRlRfSW5pdF9GcmVlVHlwZSgmQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Rm9udE1ncigpLT5tX0ZUTGlicmFyeSk7CisgICAgfQorICAgIGxpYnJhcnkgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRGb250TWdyKCktPm1fRlRMaWJyYXJ5OworICAgIEZYRlRfU3RyZWFtIHN0cmVhbSA9IE5VTEw7CisgICAgaWYgKCFfTG9hZEZpbGUobGlicmFyeSwgJm1fRmFjZSwgcEZpbGUsICZzdHJlYW0pKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgbV9wT3duZWRTdHJlYW0gPSBzdHJlYW07CisgICAgRlhGVF9TZXRfUGl4ZWxfU2l6ZXMobV9GYWNlLCAwLCA2NCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CitpbnQgQ0ZYX0ZvbnQ6OkdldEdseXBoV2lkdGgoRlhfRFdPUkQgZ2x5cGhfaW5kZXgpCit7CisgICAgaWYgKCFtX0ZhY2UpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChtX3BTdWJzdEZvbnQgJiYgKG1fcFN1YnN0Rm9udC0+bV9TdWJzdEZsYWdzICYgRlhGT05UX1NVQlNUX01NKSkgeworICAgICAgICBBZGp1c3RNTVBhcmFtcyhnbHlwaF9pbmRleCwgMCwgMCk7CisgICAgfQorICAgIGludCBlcnIgPSBGWEZUX0xvYWRfR2x5cGgobV9GYWNlLCBnbHlwaF9pbmRleCwgRlhGVF9MT0FEX05PX1NDQUxFIHwgRlhGVF9MT0FEX0lHTk9SRV9HTE9CQUxfQURWQU5DRV9XSURUSCk7CisgICAgaWYgKGVycikgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaW50IHdpZHRoID0gRU1fQURKVVNUKEZYRlRfR2V0X0ZhY2VfVW5pdHNQZXJFTShtX0ZhY2UpLCBGWEZUX0dldF9HbHlwaF9Ib3JpQWR2YW5jZShtX0ZhY2UpKTsKKyAgICByZXR1cm4gd2lkdGg7Cit9CitzdGF0aWMgRlhGVF9GYWNlIEZUX0xvYWRGb250KEZYX0xQQllURSBwRGF0YSwgaW50IHNpemUpCit7CisgICAgRlhGVF9MaWJyYXJ5IGxpYnJhcnk7CisgICAgaWYgKENGWF9HRU1vZHVsZTo6R2V0KCktPkdldEZvbnRNZ3IoKS0+bV9GVExpYnJhcnkgPT0gTlVMTCkgeworICAgICAgICBGWEZUX0luaXRfRnJlZVR5cGUoJkNGWF9HRU1vZHVsZTo6R2V0KCktPkdldEZvbnRNZ3IoKS0+bV9GVExpYnJhcnkpOworICAgIH0KKyAgICBsaWJyYXJ5ID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Rm9udE1ncigpLT5tX0ZUTGlicmFyeTsKKyAgICBGWEZUX0ZhY2UgZmFjZTsKKyAgICBpbnQgZXJyb3IgPSBGWEZUX05ld19NZW1vcnlfRmFjZShsaWJyYXJ5LCBwRGF0YSwgc2l6ZSwgMCwgJmZhY2UpOworICAgIGlmIChlcnJvcikgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZXJyb3IgPSBGWEZUX1NldF9QaXhlbF9TaXplcyhmYWNlLCA2NCwgNjQpOworICAgIGlmIChlcnJvcikgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIGZhY2U7Cit9CitGWF9CT09MIENGWF9Gb250OjpMb2FkRW1iZWRkZWQoRlhfTFBDQllURSBkYXRhLCBGWF9EV09SRCBzaXplKQoreworI2lmZGVmIEZPWElUX0NIUk9NRV9CVUlMRAorICAgIG1fcEZvbnREYXRhQWxsb2NhdGlvbiA9IEZYX0FsbG9jKEZYX0JZVEUsIHNpemUpOworICAgIGlmICghbV9wRm9udERhdGFBbGxvY2F0aW9uKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgRlhTWVNfbWVtY3B5MzIobV9wRm9udERhdGFBbGxvY2F0aW9uLCBkYXRhLCBzaXplKTsKKyAgICBtX0ZhY2UgPSBGVF9Mb2FkRm9udCgoRlhfTFBCWVRFKW1fcEZvbnREYXRhQWxsb2NhdGlvbiwgc2l6ZSk7CisgICAgbV9wRm9udERhdGEgPSAoRlhfTFBCWVRFKW1fcEZvbnREYXRhQWxsb2NhdGlvbjsKKyNlbHNlCisgICAgbV9GYWNlID0gRlRfTG9hZEZvbnQoKEZYX0xQQllURSlkYXRhLCBzaXplKTsKKyAgICBtX3BGb250RGF0YSA9IChGWF9MUEJZVEUpZGF0YTsKKyNlbmRpZgorICAgIG1fYkVtYmVkZGVkID0gVFJVRTsKKyAgICBtX2R3U2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIG1fRmFjZSAhPSBOVUxMOworfQorRlhfQk9PTCBDRlhfRm9udDo6SXNUVEZvbnQoKQoreworICAgIGlmIChtX0ZhY2UgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBGWEZUX0lzX0ZhY2VfVFRfT1QobV9GYWNlKSA9PSBGWEZUX0ZBQ0VfRkxBR19TRk5UOworfQoraW50IENGWF9Gb250OjpHZXRBc2NlbnQoKSBjb25zdAoreworICAgIGlmIChtX0ZhY2UgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaW50IGFzY2VudCA9IEVNX0FESlVTVChGWEZUX0dldF9GYWNlX1VuaXRzUGVyRU0obV9GYWNlKSwgRlhGVF9HZXRfRmFjZV9Bc2NlbmRlcihtX0ZhY2UpKTsKKyAgICByZXR1cm4gYXNjZW50OworfQoraW50IENGWF9Gb250OjpHZXREZXNjZW50KCkgY29uc3QKK3sKKyAgICBpZiAobV9GYWNlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGludCBkZXNjZW50ID0gRU1fQURKVVNUKEZYRlRfR2V0X0ZhY2VfVW5pdHNQZXJFTShtX0ZhY2UpLCBGWEZUX0dldF9GYWNlX0Rlc2NlbmRlcihtX0ZhY2UpKTsKKyAgICByZXR1cm4gZGVzY2VudDsKK30KK0ZYX0JPT0wgQ0ZYX0ZvbnQ6OkdldEdseXBoQkJveChGWF9EV09SRCBnbHlwaF9pbmRleCwgRlhfUkVDVCAmYmJveCkKK3sKKyAgICBpZiAobV9GYWNlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoRlhGVF9Jc19GYWNlX1RyaWNreShtX0ZhY2UpKSB7CisgICAgICAgIGludCBlcnJvciA9IEZYRlRfU2V0X0NoYXJfU2l6ZShtX0ZhY2UsIDAsIDEwMDAgKiA2NCwgNzIsIDcyKTsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgZXJyb3IgPSBGWEZUX0xvYWRfR2x5cGgobV9GYWNlLCBnbHlwaF9pbmRleCwgRlhGVF9MT0FEX0lHTk9SRV9HTE9CQUxfQURWQU5DRV9XSURUSCk7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIEZYRlRfQkJveCBjYm94OworICAgICAgICBGVF9HbHlwaCBnbHlwaDsKKyAgICAgICAgZXJyb3IgPSBGWEZUX0dldF9HbHlwaCgoKEZYRlRfRmFjZSltX0ZhY2UpLT5nbHlwaCwgJmdseXBoKTsKKyAgICAgICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgRlhGVF9HbHlwaF9HZXRfQ0JveChnbHlwaCwgRlhGVF9HTFlQSF9CQk9YX1BJWEVMUywgJmNib3gpOworICAgICAgICBpbnQgcGl4ZWxfc2l6ZV94ID0gKChGWEZUX0ZhY2UpbV9GYWNlKS0+c2l6ZS0+bWV0cmljcy54X3BwZW0sCisgICAgICAgICAgICBwaXhlbF9zaXplX3kgPSAoKEZYRlRfRmFjZSltX0ZhY2UpLT5zaXplLT5tZXRyaWNzLnlfcHBlbTsKKyAgICAgICAgaWYgKHBpeGVsX3NpemVfeCA9PSAwIHx8IHBpeGVsX3NpemVfeSA9PSAwKSB7CisgICAgICAgICAgICBiYm94LmxlZnQgPSBjYm94LnhNaW47CisgICAgICAgICAgICBiYm94LnJpZ2h0ID0gY2JveC54TWF4OworICAgICAgICAgICAgYmJveC50b3AgPSBjYm94LnlNYXg7CisgICAgICAgICAgICBiYm94LmJvdHRvbSA9IGNib3gueU1pbjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJib3gubGVmdCA9IGNib3gueE1pbiAqIDEwMDAgLyBwaXhlbF9zaXplX3g7CisgICAgICAgICAgICBiYm94LnJpZ2h0ID0gY2JveC54TWF4ICogMTAwMCAvIHBpeGVsX3NpemVfeDsKKyAgICAgICAgICAgIGJib3gudG9wID0gY2JveC55TWF4ICogMTAwMCAvIHBpeGVsX3NpemVfeTsKKyAgICAgICAgICAgIGJib3guYm90dG9tID0gY2JveC55TWluICogMTAwMCAvIHBpeGVsX3NpemVfeTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYmJveC50b3AgPiBGWEZUX0dldF9GYWNlX0FzY2VuZGVyKG1fRmFjZSkpIHsKKyAgICAgICAgICAgIGJib3gudG9wID0gRlhGVF9HZXRfRmFjZV9Bc2NlbmRlcihtX0ZhY2UpOworICAgICAgICB9CisgICAgICAgIGlmIChiYm94LmJvdHRvbSA8IEZYRlRfR2V0X0ZhY2VfRGVzY2VuZGVyKG1fRmFjZSkpIHsKKyAgICAgICAgICAgIGJib3guYm90dG9tID0gRlhGVF9HZXRfRmFjZV9EZXNjZW5kZXIobV9GYWNlKTsKKyAgICAgICAgfQorICAgICAgICBGVF9Eb25lX0dseXBoKGdseXBoKTsKKyAgICAgICAgcmV0dXJuIEZYRlRfU2V0X1BpeGVsX1NpemVzKG1fRmFjZSwgMCwgNjQpID09IDA7CisgICAgfQorICAgIGlmIChGWEZUX0xvYWRfR2x5cGgobV9GYWNlLCBnbHlwaF9pbmRleCwgRlhGVF9MT0FEX05PX1NDQUxFIHwgRlhGVF9MT0FEX0lHTk9SRV9HTE9CQUxfQURWQU5DRV9XSURUSCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpbnQgZW0gPSBGWEZUX0dldF9GYWNlX1VuaXRzUGVyRU0obV9GYWNlKTsKKyAgICBpZiAoZW0gPT0gMCkgeworICAgICAgICBiYm94LmxlZnQgPSBGWEZUX0dldF9HbHlwaF9Ib3JpQmVhcmluZ1gobV9GYWNlKTsKKyAgICAgICAgYmJveC5ib3R0b20gPSBGWEZUX0dldF9HbHlwaF9Ib3JpQmVhcmluZ1kobV9GYWNlKTsKKyAgICAgICAgYmJveC50b3AgPSBiYm94LmJvdHRvbSAtIEZYRlRfR2V0X0dseXBoX0hlaWdodChtX0ZhY2UpOworICAgICAgICBiYm94LnJpZ2h0ID0gYmJveC5sZWZ0ICsgRlhGVF9HZXRfR2x5cGhfV2lkdGgobV9GYWNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBiYm94LmxlZnQgPSBGWEZUX0dldF9HbHlwaF9Ib3JpQmVhcmluZ1gobV9GYWNlKSAqIDEwMDAgLyBlbTsKKyAgICAgICAgYmJveC50b3AgPSAoRlhGVF9HZXRfR2x5cGhfSG9yaUJlYXJpbmdZKG1fRmFjZSkgLSBGWEZUX0dldF9HbHlwaF9IZWlnaHQobV9GYWNlKSkgKiAxMDAwIC8gZW07CisgICAgICAgIGJib3gucmlnaHQgPSAoRlhGVF9HZXRfR2x5cGhfSG9yaUJlYXJpbmdYKG1fRmFjZSkgKyBGWEZUX0dldF9HbHlwaF9XaWR0aChtX0ZhY2UpKSAqIDEwMDAgLyBlbTsKKyAgICAgICAgYmJveC5ib3R0b20gPSAoRlhGVF9HZXRfR2x5cGhfSG9yaUJlYXJpbmdZKG1fRmFjZSkpICogMTAwMCAvIGVtOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0ZYX0ZvbnQ6OklzSXRhbGljKCkKK3sKKyAgICBpZiAobV9GYWNlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWF9CT09MIHJldCA9IEZYRlRfSXNfRmFjZV9JdGFsaWMobV9GYWNlKSA9PSBGWEZUX1NUWUxFX0ZMQUdfSVRBTElDOworICAgIGlmICghcmV0KSB7CisgICAgICAgIENGWF9CeXRlU3RyaW5nIHN0cihGWEZUX0dldF9GYWNlX1N0eWxlX05hbWUobV9GYWNlKSk7CisgICAgICAgIHN0ci5NYWtlTG93ZXIoKTsKKyAgICAgICAgaWYgKHN0ci5GaW5kKCJpdGFsaWMiKSAhPSAtMSkgeworICAgICAgICAgICAgcmV0ID0gVFJVRTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorRlhfQk9PTCBDRlhfRm9udDo6SXNCb2xkKCkKK3sKKyAgICBpZiAobV9GYWNlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gRlhGVF9Jc19GYWNlX0JvbGQobV9GYWNlKSA9PSBGWEZUX1NUWUxFX0ZMQUdfQk9MRDsKK30KK0ZYX0JPT0wgQ0ZYX0ZvbnQ6OklzRml4ZWRXaWR0aCgpCit7CisgICAgaWYgKG1fRmFjZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIEZYRlRfSXNfRmFjZV9maXhlZHdpZHRoKG1fRmFjZSk7Cit9CitDRlhfV2lkZVN0cmluZyBDRlhfRm9udDo6R2V0UHNOYW1lKCkgY29uc3QKK3sKKyAgICBpZiAobV9GYWNlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7CisgICAgfQorICAgIENGWF9XaWRlU3RyaW5nIHBzTmFtZSA9IENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoRlhGVF9HZXRfUG9zdHNjcmlwdF9OYW1lKG1fRmFjZSkpOworICAgIGlmIChwc05hbWUuSXNFbXB0eSgpKSB7CisgICAgICAgIHBzTmFtZSA9ICBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKCJVbnRpdGxlZCIpOworICAgIH0KKyAgICByZXR1cm4gcHNOYW1lOworfQorQ0ZYX0J5dGVTdHJpbmcgQ0ZYX0ZvbnQ6OkdldEZhbWlseU5hbWUoKSBjb25zdAoreworICAgIGlmIChtX0ZhY2UgPT0gTlVMTCAmJiBtX3BTdWJzdEZvbnQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsKKyAgICB9CisgICAgaWYgKG1fRmFjZSkgeworICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoRlhGVF9HZXRfRmFjZV9GYW1pbHlfTmFtZShtX0ZhY2UpKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gbV9wU3Vic3RGb250LT5tX0ZhbWlseTsKKyAgICB9Cit9CitDRlhfQnl0ZVN0cmluZyBDRlhfRm9udDo6R2V0RmFjZU5hbWUoKSBjb25zdAoreworICAgIGlmIChtX0ZhY2UgPT0gTlVMTCAmJiBtX3BTdWJzdEZvbnQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsKKyAgICB9CisgICAgaWYgKG1fRmFjZSkgeworICAgICAgICBDRlhfQnl0ZVN0cmluZyBmYWNlbmFtZTsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc3R5bGUgPSBDRlhfQnl0ZVN0cmluZyhGWEZUX0dldF9GYWNlX1N0eWxlX05hbWUobV9GYWNlKSk7CisgICAgICAgIGZhY2VuYW1lID0gR2V0RmFtaWx5TmFtZSgpOworICAgICAgICBpZiAoZmFjZW5hbWUuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICBmYWNlbmFtZSA9ICJVbnRpdGxlZCI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzdHlsZS5Jc0VtcHR5KCkgJiYgc3R5bGUgIT0gIlJlZ3VsYXIiKSB7CisgICAgICAgICAgICBmYWNlbmFtZSArPSAiICIgKyBzdHlsZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFjZW5hbWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIG1fcFN1YnN0Rm9udC0+bV9GYW1pbHk7CisgICAgfQorfQorRlhfQk9PTCBDRlhfRm9udDo6R2V0QkJveChGWF9SRUNUICZiYm94KQoreworICAgIGlmIChtX0ZhY2UgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGludCBlbSA9IEZYRlRfR2V0X0ZhY2VfVW5pdHNQZXJFTShtX0ZhY2UpOworICAgIGlmIChlbSA9PSAwKSB7CisgICAgICAgIGJib3gubGVmdCA9IEZYRlRfR2V0X0ZhY2VfeE1pbihtX0ZhY2UpOworICAgICAgICBiYm94LmJvdHRvbSA9IEZYRlRfR2V0X0ZhY2VfeU1heChtX0ZhY2UpOworICAgICAgICBiYm94LnRvcCA9IEZYRlRfR2V0X0ZhY2VfeU1pbihtX0ZhY2UpOworICAgICAgICBiYm94LnJpZ2h0ID0gRlhGVF9HZXRfRmFjZV94TWF4KG1fRmFjZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYmJveC5sZWZ0ID0gRlhGVF9HZXRfRmFjZV94TWluKG1fRmFjZSkgKiAxMDAwIC8gZW07CisgICAgICAgIGJib3gudG9wID0gRlhGVF9HZXRfRmFjZV95TWluKG1fRmFjZSkgKiAxMDAwIC8gZW07CisgICAgICAgIGJib3gucmlnaHQgPSBGWEZUX0dldF9GYWNlX3hNYXgobV9GYWNlKSAqIDEwMDAgLyBlbTsKKyAgICAgICAgYmJveC5ib3R0b20gPSBGWEZUX0dldF9GYWNlX3lNYXgobV9GYWNlKSAqIDEwMDAgLyBlbTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitpbnQgQ0ZYX0ZvbnQ6OkdldEhlaWdodCgpCit7CisgICAgaWYgKG1fRmFjZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpbnQgaGVpZ2h0ID0gRU1fQURKVVNUKEZYRlRfR2V0X0ZhY2VfVW5pdHNQZXJFTShtX0ZhY2UpLCBGWEZUX0dldF9GYWNlX0hlaWdodChtX0ZhY2UpKTsKKyAgICByZXR1cm4gaGVpZ2h0OworfQoraW50IENGWF9Gb250OjpHZXRNYXhBZHZhbmNlV2lkdGgoKQoreworICAgIGlmIChtX0ZhY2UgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaW50IHdpZHRoID0gRU1fQURKVVNUKEZYRlRfR2V0X0ZhY2VfVW5pdHNQZXJFTShtX0ZhY2UpLCBGWEZUX0dldF9GYWNlX01heEFkdmFuY2VXaWR0aChtX0ZhY2UpKTsKKyAgICByZXR1cm4gd2lkdGg7Cit9CitpbnQgQ0ZYX0ZvbnQ6OkdldFVMUG9zKCkKK3sKKyAgICBpZiAobV9GYWNlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGludCBwb3MgPSBFTV9BREpVU1QoRlhGVF9HZXRfRmFjZV9Vbml0c1BlckVNKG1fRmFjZSksIEZYRlRfR2V0X0ZhY2VfVW5kZXJMaW5lUG9zaXRpb24obV9GYWNlKSk7CisgICAgcmV0dXJuIHBvczsKK30KK2ludCBDRlhfRm9udDo6R2V0VUx0aGlja25lc3MoKQoreworICAgIGlmIChtX0ZhY2UgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaW50IHRoaWNrbmVzcyA9IEVNX0FESlVTVChGWEZUX0dldF9GYWNlX1VuaXRzUGVyRU0obV9GYWNlKSwgRlhGVF9HZXRfRmFjZV9VbmRlckxpbmVUaGlja25lc3MobV9GYWNlKSk7CisgICAgcmV0dXJuIHRoaWNrbmVzczsKK30KK0NGWF9Vbmljb2RlRW5jb2Rpbmc6OkNGWF9Vbmljb2RlRW5jb2RpbmcoQ0ZYX0ZvbnQqIHBGb250KQoreworICAgIG1fcEZvbnQgPSBwRm9udDsKK30KK0ZYX0RXT1JEIENGWF9Vbmljb2RlRW5jb2Rpbmc6OkdseXBoRnJvbUNoYXJDb2RlKEZYX0RXT1JEIGNoYXJjb2RlKQoreworICAgIEZYRlRfRmFjZSBmYWNlID0gIG1fcEZvbnQtPkdldEZhY2UoKTsKKyAgICBpZiAoIWZhY2UpIHsKKyAgICAgICAgcmV0dXJuIGNoYXJjb2RlOworICAgIH0KKyAgICBpZiAoRlhGVF9TZWxlY3RfQ2hhcm1hcChmYWNlLCBGWEZUX0VOQ09ESU5HX1VOSUNPREUpID09IDApIHsKKyAgICAgICAgcmV0dXJuIEZYRlRfR2V0X0NoYXJfSW5kZXgoZmFjZSwgY2hhcmNvZGUpOworICAgIH0KKyAgICBpZiAobV9wRm9udC0+bV9wU3Vic3RGb250ICYmIG1fcEZvbnQtPm1fcFN1YnN0Rm9udC0+bV9DaGFyc2V0ID09IDIpIHsKKyAgICAgICAgRlhfRFdPUkQgaW5kZXggPSAwOworICAgICAgICBpZiAoRlhGVF9TZWxlY3RfQ2hhcm1hcChmYWNlLCBGWEZUX0VOQ09ESU5HX01TX1NZTUJPTCkgPT0gMCkgeworICAgICAgICAgICAgaW5kZXggPSBGWEZUX0dldF9DaGFyX0luZGV4KGZhY2UsIGNoYXJjb2RlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWluZGV4ICYmICFGWEZUX1NlbGVjdF9DaGFybWFwKGZhY2UsIEZYRlRfRU5DT0RJTkdfQVBQTEVfUk9NQU4pKSB7CisgICAgICAgICAgICByZXR1cm4gRlhGVF9HZXRfQ2hhcl9JbmRleChmYWNlLCBjaGFyY29kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNoYXJjb2RlOworfQorRlhfRFdPUkQgQ0ZYX1VuaWNvZGVFbmNvZGluZzo6R2x5cGhGcm9tQ2hhckNvZGVFeChGWF9EV09SRCBjaGFyY29kZSwgaW50IGVuY29kaW5nKQoreworICAgIEZYRlRfRmFjZSBmYWNlID0gIG1fcEZvbnQtPkdldEZhY2UoKTsKKyAgICBpZiAoIWZhY2UpIHsKKyAgICAgICAgcmV0dXJuIGNoYXJjb2RlOworICAgIH0KKyAgICBpZiAoZW5jb2RpbmcgPT0gRU5DT0RJTkdfVU5JQ09ERSkgeworICAgICAgICByZXR1cm4JR2x5cGhGcm9tQ2hhckNvZGUoY2hhcmNvZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGludCBubWFwcyA9IEZYRlRfR2V0X0ZhY2VfQ2hhcm1hcENvdW50KG1fcEZvbnQtPm1fRmFjZSk7CisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgd2hpbGUgKGkgPCBubWFwcykgeworICAgICAgICAgICAgaW50IGVuY29kaW5nID0gRlhGVF9HZXRfQ2hhcm1hcF9FbmNvZGluZyhGWEZUX0dldF9GYWNlX0NoYXJtYXBzKGZhY2UpW2krK10pOworICAgICAgICAgICAgaWYgKGVuY29kaW5nICE9IEZYRlRfRU5DT0RJTkdfVU5JQ09ERSkgeworICAgICAgICAgICAgICAgIEZYRlRfU2VsZWN0X0NoYXJtYXAoZmFjZSwgZW5jb2RpbmcpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBGWEZUX0dldF9DaGFyX0luZGV4KGZhY2UsIGNoYXJjb2RlKTsKK30KK0lGWF9Gb250RW5jb2RpbmcqIEZYR0VfQ3JlYXRlVW5pY29kZUVuY29kaW5nKENGWF9Gb250KiBwRm9udCkKK3sKKyAgICBDRlhfVW5pY29kZUVuY29kaW5nKiBwRW5jb2RpbmcgPSBOVUxMOworICAgIHBFbmNvZGluZyA9IEZYX05FVyBDRlhfVW5pY29kZUVuY29kaW5nKHBGb250KTsKKyAgICByZXR1cm4gcEVuY29kaW5nOworfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9nZS9meF9nZV9mb250bWFwLmNwcCBiL2NvcmUvc3JjL2Z4Z2UvZ2UvZnhfZ2VfZm9udG1hcC5jcHAKaW5kZXggNjU0OWU4ZS4uOGMyNzUxZCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhnZS9nZS9meF9nZV9mb250bWFwLmNwcAorKysgYi9jb3JlL3NyYy9meGdlL2dlL2Z4X2dlX2ZvbnRtYXAuY3BwCkBAIC0xLDE1NTggKzEsMTU1OCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZS5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZnJlZXR5cGUuaCINCi0jaW5jbHVkZSAidGV4dF9pbnQuaCINCi0jZGVmaW5lIEdFVF9UVF9TSE9SVCh3KSAgKEZYX1dPUkQpKCgodylbMF0gPDwgOCkgfCAodylbMV0pDQotI2RlZmluZSBHRVRfVFRfTE9ORyh3KSAoRlhfRFdPUkQpKCgodylbMF0gPDwgMjQpIHwgKCh3KVsxXSA8PCAxNikgfCAoKHcpWzJdIDw8IDgpIHwgKHcpWzNdKQ0KLUNGWF9TdWJzdEZvbnQ6OkNGWF9TdWJzdEZvbnQoKQ0KLXsNCi0gICAgbV9FeHRIYW5kbGUgPSBOVUxMOw0KLSAgICBtX0NoYXJzZXQgPSAwOw0KLSAgICBtX1N1YnN0RmxhZ3MgPSAwOw0KLSAgICBtX1dlaWdodCA9IDA7DQotICAgIG1fSXRhbGljQW5nbGUgPSAwOw0KLSAgICBtX2JTdWJzdE9mQ0pLID0gRkFMU0U7DQotICAgIG1fV2VpZ2h0Q0pLID0gMDsNCi0gICAgbV9iSXRsaWNDSksgPSBGQUxTRTsNCi19DQotQ1RURm9udERlc2M6On5DVFRGb250RGVzYygpDQotew0KLSAgICBpZiAobV9UeXBlID09IDEpIHsNCi0gICAgICAgIGlmIChtX1NpbmdsZUZhY2UubV9wRmFjZSkgew0KLSAgICAgICAgICAgIEZYRlRfRG9uZV9GYWNlKG1fU2luZ2xlRmFjZS5tX3BGYWNlKTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIGlmIChtX1R5cGUgPT0gMikgew0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSArKykNCi0gICAgICAgICAgICBpZiAobV9UVENGYWNlLm1fcEZhY2VzW2ldKSB7DQotICAgICAgICAgICAgICAgIEZYRlRfRG9uZV9GYWNlKG1fVFRDRmFjZS5tX3BGYWNlc1tpXSk7DQotICAgICAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChtX3BGb250RGF0YSkgew0KLSAgICAgICAgRlhfRnJlZShtX3BGb250RGF0YSk7DQotICAgIH0NCi19DQotRlhfQk9PTCBDVFRGb250RGVzYzo6UmVsZWFzZUZhY2UoRlhGVF9GYWNlIGZhY2UpDQotew0KLSAgICBpZiAobV9UeXBlID09IDEpIHsNCi0gICAgICAgIGlmIChtX1NpbmdsZUZhY2UubV9wRmFjZSAhPSBmYWNlKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2UgaWYgKG1fVHlwZSA9PSAyKSB7DQotICAgICAgICBpbnQgaTsNCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSArKykNCi0gICAgICAgICAgICBpZiAobV9UVENGYWNlLm1fcEZhY2VzW2ldID09IGZhY2UpIHsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgaWYgKGkgPT0gMTYpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgbV9SZWZDb3VudCAtLTsNCi0gICAgaWYgKG1fUmVmQ291bnQpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBkZWxldGUgdGhpczsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUNGWF9Gb250TWdyOjpDRlhfRm9udE1ncigpDQotew0KLSAgICBtX3BCdWlsdGluTWFwcGVyID0gRlhfTkVXIENGWF9Gb250TWFwcGVyOw0KLSAgICBpZiAoIW1fcEJ1aWx0aW5NYXBwZXIpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX3BCdWlsdGluTWFwcGVyLT5tX3BGb250TWdyID0gdGhpczsNCi0gICAgbV9wRXh0TWFwcGVyID0gTlVMTDsNCi0gICAgbV9GVExpYnJhcnkgPSBOVUxMOw0KLSAgICBGWFNZU19tZW1zZXQzMihtX0V4dGVybmFsRm9udHMsIDAsIHNpemVvZiBtX0V4dGVybmFsRm9udHMpOw0KLX0NCi1DRlhfRm9udE1ncjo6fkNGWF9Gb250TWdyKCkNCi17DQotICAgIGlmIChtX3BCdWlsdGluTWFwcGVyKSB7DQotICAgICAgICBkZWxldGUgbV9wQnVpbHRpbk1hcHBlcjsNCi0gICAgfQ0KLSAgICBGcmVlQ2FjaGUoKTsNCi0gICAgaWYgKG1fRlRMaWJyYXJ5KSB7DQotICAgICAgICBGWEZUX0RvbmVfRnJlZVR5cGUobV9GVExpYnJhcnkpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0ZYX0ZvbnRNZ3I6OkluaXRGVExpYnJhcnkoKQ0KLXsNCi0gICAgaWYgKG1fRlRMaWJyYXJ5ID09IE5VTEwpIHsNCi0gICAgICAgIEZYRlRfSW5pdF9GcmVlVHlwZSgmbV9GVExpYnJhcnkpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0ZYX0ZvbnRNZ3I6OkZyZWVDYWNoZSgpDQotew0KLSAgICBGWF9QT1NJVElPTiBwb3MgPSBtX0ZhY2VNYXAuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICB3aGlsZShwb3MpIHsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIEtleTsNCi0gICAgICAgIENUVEZvbnREZXNjKiBmYWNlOw0KLSAgICAgICAgbV9GYWNlTWFwLkdldE5leHRBc3NvYyhwb3MsIEtleSwgKHZvaWQqJilmYWNlKTsNCi0gICAgICAgIGRlbGV0ZSBmYWNlOw0KLSAgICB9DQotICAgIG1fRmFjZU1hcC5SZW1vdmVBbGwoKTsNCi19DQotdm9pZCBDRlhfRm9udE1ncjo6U2V0U3lzdGVtRm9udEluZm8oSUZYX1N5c3RlbUZvbnRJbmZvKiBwRm9udEluZm8pDQotew0KLSAgICBtX3BCdWlsdGluTWFwcGVyLT5TZXRTeXN0ZW1Gb250SW5mbyhwRm9udEluZm8pOw0KLX0NCi1GWEZUX0ZhY2UgQ0ZYX0ZvbnRNZ3I6OkZpbmRTdWJzdEZvbnQoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGZhY2VfbmFtZSwgRlhfQk9PTCBiVHJ1ZVR5cGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGZsYWdzLCBpbnQgd2VpZ2h0LCBpbnQgaXRhbGljX2FuZ2xlLCBpbnQgQ2hhcnNldENQLCBDRlhfU3Vic3RGb250KiBwU3Vic3RGb250KQ0KLXsNCi0gICAgaWYgKG1fRlRMaWJyYXJ5ID09IE5VTEwpIHsNCi0gICAgICAgIEZYRlRfSW5pdF9GcmVlVHlwZSgmbV9GVExpYnJhcnkpOw0KLSAgICB9DQotICAgIGlmIChtX3BFeHRNYXBwZXIpIHsNCi0gICAgICAgIEZYRlRfRmFjZSBmYWNlID0gbV9wRXh0TWFwcGVyLT5GaW5kU3Vic3RGb250KGZhY2VfbmFtZSwgYlRydWVUeXBlLCBmbGFncywgd2VpZ2h0LCBpdGFsaWNfYW5nbGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDUCwgcFN1YnN0Rm9udCk7DQotICAgICAgICBpZiAoZmFjZSkgew0KLSAgICAgICAgICAgIHJldHVybiBmYWNlOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBtX3BCdWlsdGluTWFwcGVyLT5GaW5kU3Vic3RGb250KGZhY2VfbmFtZSwgYlRydWVUeXBlLCBmbGFncywgd2VpZ2h0LCBpdGFsaWNfYW5nbGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYXJzZXRDUCwgcFN1YnN0Rm9udCk7DQotfQ0KLUZYRlRfRmFjZSBDRlhfRm9udE1ncjo6R2V0Q2FjaGVkRmFjZShjb25zdCBDRlhfQnl0ZVN0cmluZyYgZmFjZV9uYW1lLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2VpZ2h0LCBGWF9CT09MIGJJdGFsaWMsIEZYX0xQQllURSYgcEZvbnREYXRhKQ0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcga2V5KGZhY2VfbmFtZSk7DQotICAgIGtleSArPSAnLCc7DQotICAgIGtleSArPSBDRlhfQnl0ZVN0cmluZzo6Rm9ybWF0SW50ZWdlcih3ZWlnaHQpOw0KLSAgICBrZXkgKz0gYkl0YWxpYyA/ICdJJyA6ICdOJzsNCi0gICAgQ1RURm9udERlc2MqIHBGb250RGVzYyA9IE5VTEw7DQotICAgIG1fRmFjZU1hcC5Mb29rdXAoa2V5LCAodm9pZComKXBGb250RGVzYyk7DQotICAgIGlmKHBGb250RGVzYykgew0KLSAgICAgICAgcEZvbnREYXRhID0gcEZvbnREZXNjLT5tX3BGb250RGF0YTsNCi0gICAgICAgIHBGb250RGVzYy0+bV9SZWZDb3VudCArKzsNCi0gICAgICAgIHJldHVybiBwRm9udERlc2MtPm1fU2luZ2xlRmFjZS5tX3BGYWNlOw0KLSAgICB9DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi1GWEZUX0ZhY2UgQ0ZYX0ZvbnRNZ3I6OkFkZENhY2hlZEZhY2UoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGZhY2VfbmFtZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdlaWdodCwgRlhfQk9PTCBiSXRhbGljLCBGWF9MUEJZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUsIGludCBmYWNlX2luZGV4KQ0KLXsNCi0gICAgQ1RURm9udERlc2MqIHBGb250RGVzYyA9IEZYX05FVyBDVFRGb250RGVzYzsNCi0gICAgaWYgKCFwRm9udERlc2MpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHBGb250RGVzYy0+bV9UeXBlID0gMTsNCi0gICAgcEZvbnREZXNjLT5tX1NpbmdsZUZhY2UubV9wRmFjZSA9IE5VTEw7DQotICAgIHBGb250RGVzYy0+bV9TaW5nbGVGYWNlLm1fYkJvbGQgPSB3ZWlnaHQ7DQotICAgIHBGb250RGVzYy0+bV9TaW5nbGVGYWNlLm1fYkl0YWxpYyA9IGJJdGFsaWM7DQotICAgIHBGb250RGVzYy0+bV9wRm9udERhdGEgPSBwRGF0YTsNCi0gICAgcEZvbnREZXNjLT5tX1JlZkNvdW50ID0gMTsNCi0gICAgRlhGVF9MaWJyYXJ5IGxpYnJhcnk7DQotICAgIGlmIChtX0ZUTGlicmFyeSA9PSBOVUxMKSB7DQotICAgICAgICBGWEZUX0luaXRfRnJlZVR5cGUoJm1fRlRMaWJyYXJ5KTsNCi0gICAgfQ0KLSAgICBsaWJyYXJ5ID0gbV9GVExpYnJhcnk7DQotICAgIGludCByZXQgPSBGWEZUX05ld19NZW1vcnlfRmFjZShsaWJyYXJ5LCBwRGF0YSwgc2l6ZSwgZmFjZV9pbmRleCwgJnBGb250RGVzYy0+bV9TaW5nbGVGYWNlLm1fcEZhY2UpOw0KLSAgICBpZiAocmV0KSB7DQotICAgICAgICBkZWxldGUgcEZvbnREZXNjOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0ID0gRlhGVF9TZXRfUGl4ZWxfU2l6ZXMocEZvbnREZXNjLT5tX1NpbmdsZUZhY2UubV9wRmFjZSwgNjQsIDY0KTsNCi0gICAgaWYgKHJldCkgew0KLSAgICAgICAgZGVsZXRlIHBGb250RGVzYzsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIGtleShmYWNlX25hbWUpOw0KLSAgICBrZXkgKz0gJywnOw0KLSAgICBrZXkgKz0gQ0ZYX0J5dGVTdHJpbmc6OkZvcm1hdEludGVnZXIod2VpZ2h0KTsNCi0gICAga2V5ICs9IGJJdGFsaWMgPyAnSScgOiAnTic7DQotICAgIG1fRmFjZU1hcC5TZXRBdChrZXksIHBGb250RGVzYyk7DQotICAgIHJldHVybiBwRm9udERlc2MtPm1fU2luZ2xlRmFjZS5tX3BGYWNlOw0KLX0NCi1jb25zdCBGWF9MUENTVFIgZ19CYXNlMTRGb250TmFtZXNbMTRdID0gew0KLSAgICAiQ291cmllciIsDQotICAgICJDb3VyaWVyLUJvbGQiLA0KLSAgICAiQ291cmllci1Cb2xkT2JsaXF1ZSIsDQotICAgICJDb3VyaWVyLU9ibGlxdWUiLA0KLSAgICAiSGVsdmV0aWNhIiwNCi0gICAgIkhlbHZldGljYS1Cb2xkIiwNCi0gICAgIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsDQotICAgICJIZWx2ZXRpY2EtT2JsaXF1ZSIsDQotICAgICJUaW1lcy1Sb21hbiIsDQotICAgICJUaW1lcy1Cb2xkIiwNCi0gICAgIlRpbWVzLUJvbGRJdGFsaWMiLA0KLSAgICAiVGltZXMtSXRhbGljIiwNCi0gICAgIlN5bWJvbCIsDQotICAgICJaYXBmRGluZ2JhdHMiLA0KLX07DQotY29uc3Qgc3RydWN0IF9BbHRGb250TmFtZSB7DQotICAgIGNvbnN0IEZYX0NIQVIqCW1fcE5hbWU7DQotICAgIGludAkJbV9JbmRleDsNCi19DQotZ19BbHRGb250TmFtZXNbXSA9IHsNCi0gICAgeyJBcmlhbCIsIDR9LA0KLSAgICB7IkFyaWFsLEJvbGQiLCA1fSwNCi0gICAgeyJBcmlhbCxCb2xkSXRhbGljIiwgNn0sDQotICAgIHsiQXJpYWwsSXRhbGljIiwgN30sDQotICAgIHsiQXJpYWwtQm9sZCIsIDV9LA0KLSAgICB7IkFyaWFsLUJvbGRJdGFsaWMiLCA2fSwNCi0gICAgeyJBcmlhbC1Cb2xkSXRhbGljTVQiLCA2fSwNCi0gICAgeyJBcmlhbC1Cb2xkTVQiLCA1fSwNCi0gICAgeyJBcmlhbC1JdGFsaWMiLCA3fSwNCi0gICAgeyJBcmlhbC1JdGFsaWNNVCIsIDd9LA0KLSAgICB7IkFyaWFsQm9sZCIsIDV9LA0KLSAgICB7IkFyaWFsQm9sZEl0YWxpYyIsIDZ9LA0KLSAgICB7IkFyaWFsSXRhbGljIiwgN30sDQotICAgIHsiQXJpYWxNVCIsIDR9LA0KLSAgICB7IkFyaWFsTVQsQm9sZCIsIDV9LA0KLSAgICB7IkFyaWFsTVQsQm9sZEl0YWxpYyIsIDZ9LA0KLSAgICB7IkFyaWFsTVQsSXRhbGljIiwgN30sDQotICAgIHsiQXJpYWxSb3VuZGVkTVRCb2xkIiwgNX0sDQotICAgIHsiQ291cmllciIsIDB9LA0KLSAgICB7IkNvdXJpZXIsQm9sZCIsIDF9LA0KLSAgICB7IkNvdXJpZXIsQm9sZEl0YWxpYyIsIDJ9LA0KLSAgICB7IkNvdXJpZXIsSXRhbGljIiwgM30sDQotICAgIHsiQ291cmllci1Cb2xkIiwgMX0sDQotICAgIHsiQ291cmllci1Cb2xkT2JsaXF1ZSIsIDJ9LA0KLSAgICB7IkNvdXJpZXItT2JsaXF1ZSIsIDN9LA0KLSAgICB7IkNvdXJpZXJCb2xkIiwgMX0sDQotICAgIHsiQ291cmllckJvbGRJdGFsaWMiLCAyfSwNCi0gICAgeyJDb3VyaWVySXRhbGljIiwgM30sDQotICAgIHsiQ291cmllck5ldyIsIDB9LA0KLSAgICB7IkNvdXJpZXJOZXcsQm9sZCIsIDF9LA0KLSAgICB7IkNvdXJpZXJOZXcsQm9sZEl0YWxpYyIsIDJ9LA0KLSAgICB7IkNvdXJpZXJOZXcsSXRhbGljIiwgM30sDQotICAgIHsiQ291cmllck5ldy1Cb2xkIiwgMX0sDQotICAgIHsiQ291cmllck5ldy1Cb2xkSXRhbGljIiwgMn0sDQotICAgIHsiQ291cmllck5ldy1JdGFsaWMiLCAzfSwNCi0gICAgeyJDb3VyaWVyTmV3Qm9sZCIsIDF9LA0KLSAgICB7IkNvdXJpZXJOZXdCb2xkSXRhbGljIiwgMn0sDQotICAgIHsiQ291cmllck5ld0l0YWxpYyIsIDN9LA0KLSAgICB7IkNvdXJpZXJOZXdQUy1Cb2xkSXRhbGljTVQiLCAyfSwNCi0gICAgeyJDb3VyaWVyTmV3UFMtQm9sZE1UIiwgMX0sDQotICAgIHsiQ291cmllck5ld1BTLUl0YWxpY01UIiwgM30sDQotICAgIHsiQ291cmllck5ld1BTTVQiLCAwfSwNCi0gICAgeyJDb3VyaWVyU3RkIiwgMH0sDQotICAgIHsiQ291cmllclN0ZC1Cb2xkIiwgMX0sDQotICAgIHsiQ291cmllclN0ZC1Cb2xkT2JsaXF1ZSIsIDJ9LA0KLSAgICB7IkNvdXJpZXJTdGQtT2JsaXF1ZSIsIDN9LA0KLSAgICB7IkhlbHZldGljYSIsIDR9LA0KLSAgICB7IkhlbHZldGljYSxCb2xkIiwgNX0sDQotICAgIHsiSGVsdmV0aWNhLEJvbGRJdGFsaWMiLCA2fSwNCi0gICAgeyJIZWx2ZXRpY2EsSXRhbGljIiwgN30sDQotICAgIHsiSGVsdmV0aWNhLUJvbGQiLCA1fSwNCi0gICAgeyJIZWx2ZXRpY2EtQm9sZEl0YWxpYyIsIDZ9LA0KLSAgICB7IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsIDZ9LA0KLSAgICB7IkhlbHZldGljYS1JdGFsaWMiLCA3fSwNCi0gICAgeyJIZWx2ZXRpY2EtT2JsaXF1ZSIsIDd9LA0KLSAgICB7IkhlbHZldGljYUJvbGQiLCA1fSwNCi0gICAgeyJIZWx2ZXRpY2FCb2xkSXRhbGljIiwgNn0sDQotICAgIHsiSGVsdmV0aWNhSXRhbGljIiwgN30sDQotICAgIHsiU3ltYm9sIiwgMTJ9LA0KLSAgICB7IlN5bWJvbE1UIiwgMTJ9LA0KLSAgICB7IlRpbWVzLUJvbGQiLCA5fSwNCi0gICAgeyJUaW1lcy1Cb2xkSXRhbGljIiwgMTB9LA0KLSAgICB7IlRpbWVzLUl0YWxpYyIsIDExfSwNCi0gICAgeyJUaW1lcy1Sb21hbiIsIDh9LA0KLSAgICB7IlRpbWVzQm9sZCIsIDl9LA0KLSAgICB7IlRpbWVzQm9sZEl0YWxpYyIsIDEwfSwNCi0gICAgeyJUaW1lc0l0YWxpYyIsIDExfSwNCi0gICAgeyJUaW1lc05ld1JvbWFuIiwgOH0sDQotICAgIHsiVGltZXNOZXdSb21hbixCb2xkIiwgOX0sDQotICAgIHsiVGltZXNOZXdSb21hbixCb2xkSXRhbGljIiwgMTB9LA0KLSAgICB7IlRpbWVzTmV3Um9tYW4sSXRhbGljIiwgMTF9LA0KLSAgICB7IlRpbWVzTmV3Um9tYW4tQm9sZCIsIDl9LA0KLSAgICB7IlRpbWVzTmV3Um9tYW4tQm9sZEl0YWxpYyIsIDEwfSwNCi0gICAgeyJUaW1lc05ld1JvbWFuLUl0YWxpYyIsIDExfSwNCi0gICAgeyJUaW1lc05ld1JvbWFuQm9sZCIsIDl9LA0KLSAgICB7IlRpbWVzTmV3Um9tYW5Cb2xkSXRhbGljIiwgMTB9LA0KLSAgICB7IlRpbWVzTmV3Um9tYW5JdGFsaWMiLCAxMX0sDQotICAgIHsiVGltZXNOZXdSb21hblBTIiwgOH0sDQotICAgIHsiVGltZXNOZXdSb21hblBTLUJvbGQiLCA5fSwNCi0gICAgeyJUaW1lc05ld1JvbWFuUFMtQm9sZEl0YWxpYyIsIDEwfSwNCi0gICAgeyJUaW1lc05ld1JvbWFuUFMtQm9sZEl0YWxpY01UIiwgMTB9LA0KLSAgICB7IlRpbWVzTmV3Um9tYW5QUy1Cb2xkTVQiLCA5fSwNCi0gICAgeyJUaW1lc05ld1JvbWFuUFMtSXRhbGljIiwgMTF9LA0KLSAgICB7IlRpbWVzTmV3Um9tYW5QUy1JdGFsaWNNVCIsIDExfSwNCi0gICAgeyJUaW1lc05ld1JvbWFuUFNNVCIsIDh9LA0KLSAgICB7IlRpbWVzTmV3Um9tYW5QU01ULEJvbGQiLCA5fSwNCi0gICAgeyJUaW1lc05ld1JvbWFuUFNNVCxCb2xkSXRhbGljIiwgMTB9LA0KLSAgICB7IlRpbWVzTmV3Um9tYW5QU01ULEl0YWxpYyIsIDExfSwNCi0gICAgeyJaYXBmRGluZ2JhdHMiLCAxM30sDQotfTsNCi1leHRlcm4gIkMiIHsNCi0gICAgc3RhdGljIGludCBjb21wYXJlU3RyaW5nKGNvbnN0IHZvaWQqIGtleSwgY29uc3Qgdm9pZCogZWxlbWVudCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEZYU1lTX3N0cmljbXAoKEZYX0xQQ1NUUilrZXksICgoX0FsdEZvbnROYW1lKillbGVtZW50KS0+bV9wTmFtZSk7DQotICAgIH0NCi19DQotaW50IF9QREZfR2V0U3RhbmRhcmRGb250TmFtZShDRlhfQnl0ZVN0cmluZyYgbmFtZSkNCi17DQotICAgIF9BbHRGb250TmFtZSogZm91bmQgPSAoX0FsdEZvbnROYW1lKilGWFNZU19ic2VhcmNoKChGWF9MUENTVFIpbmFtZSwgZ19BbHRGb250TmFtZXMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgZ19BbHRGb250TmFtZXMgLyBzaXplb2YgKF9BbHRGb250TmFtZSksIHNpemVvZiAoX0FsdEZvbnROYW1lKSwgY29tcGFyZVN0cmluZyk7DQotICAgIGlmIChmb3VuZCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gLTE7DQotICAgIH0NCi0gICAgbmFtZSA9IGdfQmFzZTE0Rm9udE5hbWVzW2ZvdW5kLT5tX0luZGV4XTsNCi0gICAgcmV0dXJuIGZvdW5kLT5tX0luZGV4Ow0KLX0NCi1pbnQgR2V0VFRDSW5kZXgoRlhfTFBDQllURSBwRm9udERhdGEsIEZYX0RXT1JEIHR0Y19zaXplLCBGWF9EV09SRCBmb250X29mZnNldCkNCi17DQotICAgIGludCBmYWNlX2luZGV4ID0gMDsNCi0gICAgRlhfTFBDQllURSBwID0gcEZvbnREYXRhICsgODsNCi0gICAgRlhfRFdPUkQgbmZvbnQgPSBHRVRfVFRfTE9ORyhwKTsNCi0gICAgRlhfRFdPUkQgaW5kZXg7DQotICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IG5mb250OyBpbmRleCArKykgew0KLSAgICAgICAgcCA9IHBGb250RGF0YSArIDEyICsgaW5kZXggKiA0Ow0KLSAgICAgICAgaWYgKEdFVF9UVF9MT05HKHApID09IGZvbnRfb2Zmc2V0KSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYoaW5kZXggPj0gbmZvbnQpIHsNCi0gICAgICAgIGZhY2VfaW5kZXggPSAwOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZmFjZV9pbmRleCA9IGluZGV4Ow0KLSAgICB9DQotICAgIHJldHVybiBmYWNlX2luZGV4Ow0KLX0NCi1GWEZUX0ZhY2UgQ0ZYX0ZvbnRNZ3I6OkdldENhY2hlZFRUQ0ZhY2UoaW50IHR0Y19zaXplLCBGWF9EV09SRCBjaGVja3N1bSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZvbnRfb2Zmc2V0LCBGWF9MUEJZVEUmIHBGb250RGF0YSkNCi17DQotICAgIENGWF9CeXRlU3RyaW5nIGtleTsNCi0gICAga2V5LkZvcm1hdCgiJWQ6JWQiLCB0dGNfc2l6ZSwgY2hlY2tzdW0pOw0KLSAgICBDVFRGb250RGVzYyogcEZvbnREZXNjID0gTlVMTDsNCi0gICAgbV9GYWNlTWFwLkxvb2t1cChrZXksICh2b2lkKiYpcEZvbnREZXNjKTsNCi0gICAgaWYgKHBGb250RGVzYyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBwRm9udERhdGEgPSBwRm9udERlc2MtPm1fcEZvbnREYXRhOw0KLSAgICBwRm9udERlc2MtPm1fUmVmQ291bnQgKys7DQotICAgIGludCBmYWNlX2luZGV4ID0gR2V0VFRDSW5kZXgocEZvbnREZXNjLT5tX3BGb250RGF0YSwgdHRjX3NpemUsIGZvbnRfb2Zmc2V0KTsNCi0gICAgaWYgKHBGb250RGVzYy0+bV9UVENGYWNlLm1fcEZhY2VzW2ZhY2VfaW5kZXhdID09IE5VTEwpIHsNCi0gICAgICAgIHBGb250RGVzYy0+bV9UVENGYWNlLm1fcEZhY2VzW2ZhY2VfaW5kZXhdID0gR2V0Rml4ZWRGYWNlKHBGb250RGVzYy0+bV9wRm9udERhdGEsIHR0Y19zaXplLCBmYWNlX2luZGV4KTsNCi0gICAgfQ0KLSAgICByZXR1cm4gcEZvbnREZXNjLT5tX1RUQ0ZhY2UubV9wRmFjZXNbZmFjZV9pbmRleF07DQotfQ0KLUZYRlRfRmFjZSBDRlhfRm9udE1ncjo6QWRkQ2FjaGVkVFRDRmFjZShpbnQgdHRjX3NpemUsIEZYX0RXT1JEIGNoZWNrc3VtLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUsIGludCBmb250X29mZnNldCkNCi17DQotICAgIENGWF9CeXRlU3RyaW5nIGtleTsNCi0gICAga2V5LkZvcm1hdCgiJWQ6JWQiLCB0dGNfc2l6ZSwgY2hlY2tzdW0pOw0KLSAgICBDVFRGb250RGVzYyogcEZvbnREZXNjID0gRlhfTkVXIENUVEZvbnREZXNjOw0KLSAgICBpZiAoIXBGb250RGVzYykgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcEZvbnREZXNjLT5tX1R5cGUgPSAyOw0KLSAgICBwRm9udERlc2MtPm1fcEZvbnREYXRhID0gcERhdGE7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7IGkgKyspIHsNCi0gICAgICAgIHBGb250RGVzYy0+bV9UVENGYWNlLm1fcEZhY2VzW2ldID0gTlVMTDsNCi0gICAgfQ0KLSAgICBwRm9udERlc2MtPm1fUmVmQ291bnQgKys7DQotICAgIGtleS5Gb3JtYXQoIiVkOiVkIiwgdHRjX3NpemUsIGNoZWNrc3VtKTsNCi0gICAgbV9GYWNlTWFwLlNldEF0KGtleSwgcEZvbnREZXNjKTsNCi0gICAgaW50IGZhY2VfaW5kZXggPSBHZXRUVENJbmRleChwRm9udERlc2MtPm1fcEZvbnREYXRhLCB0dGNfc2l6ZSwgZm9udF9vZmZzZXQpOw0KLSAgICBwRm9udERlc2MtPm1fVFRDRmFjZS5tX3BGYWNlc1tmYWNlX2luZGV4XSA9IEdldEZpeGVkRmFjZShwRm9udERlc2MtPm1fcEZvbnREYXRhLCB0dGNfc2l6ZSwgZmFjZV9pbmRleCk7DQotICAgIHJldHVybiBwRm9udERlc2MtPm1fVFRDRmFjZS5tX3BGYWNlc1tmYWNlX2luZGV4XTsNCi19DQotRlhGVF9GYWNlIENGWF9Gb250TWdyOjpHZXRGaXhlZEZhY2UoRlhfTFBDQllURSBwRGF0YSwgRlhfRFdPUkQgc2l6ZSwgaW50IGZhY2VfaW5kZXgpDQotew0KLSAgICBGWEZUX0xpYnJhcnkgbGlicmFyeTsNCi0gICAgaWYgKG1fRlRMaWJyYXJ5ID09IE5VTEwpIHsNCi0gICAgICAgIEZYRlRfSW5pdF9GcmVlVHlwZSgmbV9GVExpYnJhcnkpOw0KLSAgICB9DQotICAgIGxpYnJhcnkgPSBtX0ZUTGlicmFyeTsNCi0gICAgRlhGVF9GYWNlIGZhY2UgPSBOVUxMOw0KLSAgICBpbnQgcmV0ID0gRlhGVF9OZXdfTWVtb3J5X0ZhY2UobGlicmFyeSwgcERhdGEsIHNpemUsIGZhY2VfaW5kZXgsICZmYWNlKTsNCi0gICAgaWYgKHJldCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0ID0gRlhGVF9TZXRfUGl4ZWxfU2l6ZXMoZmFjZSwgNjQsIDY0KTsNCi0gICAgaWYgKHJldCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIGZhY2U7DQotfQ0KLUZYRlRfRmFjZSBDRlhfRm9udE1ncjo6R2V0RmlsZUZhY2UoRlhfTFBDU1RSIGZpbGVuYW1lLCBpbnQgZmFjZV9pbmRleCkNCi17DQotICAgIEZYRlRfTGlicmFyeSBsaWJyYXJ5Ow0KLSAgICBpZiAobV9GVExpYnJhcnkgPT0gTlVMTCkgew0KLSAgICAgICAgRlhGVF9Jbml0X0ZyZWVUeXBlKCZtX0ZUTGlicmFyeSk7DQotICAgIH0NCi0gICAgbGlicmFyeSA9IG1fRlRMaWJyYXJ5Ow0KLSAgICBGWEZUX0ZhY2UgZmFjZSA9IE5VTEw7DQotICAgIGludCByZXQgPSBGWEZUX05ld19GYWNlKGxpYnJhcnksIGZpbGVuYW1lLCBmYWNlX2luZGV4LCAmZmFjZSk7DQotICAgIGlmIChyZXQpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldCA9IEZYRlRfU2V0X1BpeGVsX1NpemVzKGZhY2UsIDY0LCA2NCk7DQotICAgIGlmIChyZXQpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiBmYWNlOw0KLX0NCi12b2lkIENGWF9Gb250TWdyOjpSZWxlYXNlRmFjZShGWEZUX0ZhY2UgZmFjZSkNCi17DQotICAgIGlmIChmYWNlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9QT1NJVElPTiBwb3MgPSBtX0ZhY2VNYXAuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICB3aGlsZShwb3MpIHsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIEtleTsNCi0gICAgICAgIENUVEZvbnREZXNjKiB0dGZhY2U7DQotICAgICAgICBtX0ZhY2VNYXAuR2V0TmV4dEFzc29jKHBvcywgS2V5LCAodm9pZComKXR0ZmFjZSk7DQotICAgICAgICBpZiAodHRmYWNlLT5SZWxlYXNlRmFjZShmYWNlKSkgew0KLSAgICAgICAgICAgIG1fRmFjZU1hcC5SZW1vdmVLZXkoS2V5KTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi1leHRlcm4gIkMiIHsNCi0gICAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ19Gb3hpdEZpeGVkSXRhbGljRm9udERhdGEgWzE4NzQ2XTsNCi0gICAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ19Gb3hpdEZpeGVkRm9udERhdGEgWzE3NTk3XTsNCi0gICAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ19Gb3hpdFNhbnNJdGFsaWNGb250RGF0YSBbMTYzMzldOw0KLSAgICBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBnX0ZveGl0U2Fuc0ZvbnREYXRhIFsxNTAyNV07DQotICAgIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGdfRm94aXRTZXJpZkl0YWxpY0ZvbnREYXRhIFsyMTIyN107DQotICAgIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGdfRm94aXRTZXJpZkZvbnREYXRhIFsxOTQ2OV07DQotICAgIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGdfRm94aXRGaXhlZEJvbGRJdGFsaWNGb250RGF0YSBbMTkxNTFdOw0KLSAgICBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBnX0ZveGl0Rml4ZWRCb2xkRm9udERhdGEgWzE4MDU1XTsNCi0gICAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ19Gb3hpdFNhbnNCb2xkSXRhbGljRm9udERhdGEgWzE2NDE4XTsNCi0gICAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ19Gb3hpdFNhbnNCb2xkRm9udERhdGEgWzE2MzQ0XTsNCi0gICAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ19Gb3hpdFNlcmlmQm9sZEl0YWxpY0ZvbnREYXRhIFsyMDczM107DQotICAgIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGdfRm94aXRTZXJpZkJvbGRGb250RGF0YSBbMTkzOTVdOw0KLSAgICBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBnX0ZveGl0U3ltYm9sRm9udERhdGFbMTY3MjldOw0KLSAgICBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBnX0ZveGl0RGluZ2JhdHNGb250RGF0YVsyOTUxM107DQotICAgIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGdfRm94aXRTZXJpZk1NRm9udERhdGFbMTEzNDE3XTsNCi0gICAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ19Gb3hpdFNhbnNNTUZvbnREYXRhWzY2OTE5XTsNCi19Ow0KLWNvbnN0IEZveGl0Rm9udHMgZ19Gb3hpdEZvbnRzWzE0XSA9IHsNCi0gICAge2dfRm94aXRGaXhlZEZvbnREYXRhLCAxNzU5N30sDQotICAgIHtnX0ZveGl0Rml4ZWRCb2xkRm9udERhdGEsIDE4MDU1fSwNCi0gICAge2dfRm94aXRGaXhlZEJvbGRJdGFsaWNGb250RGF0YSwgMTkxNTF9LA0KLSAgICB7Z19Gb3hpdEZpeGVkSXRhbGljRm9udERhdGEsIDE4NzQ2fSwNCi0gICAge2dfRm94aXRTYW5zRm9udERhdGEsIDE1MDI1fSwNCi0gICAge2dfRm94aXRTYW5zQm9sZEZvbnREYXRhLCAxNjM0NH0sDQotICAgIHtnX0ZveGl0U2Fuc0JvbGRJdGFsaWNGb250RGF0YSwgMTY0MTh9LA0KLSAgICB7Z19Gb3hpdFNhbnNJdGFsaWNGb250RGF0YSwgMTYzMzl9LA0KLSAgICB7Z19Gb3hpdFNlcmlmRm9udERhdGEsIDE5NDY5fSwNCi0gICAge2dfRm94aXRTZXJpZkJvbGRGb250RGF0YSwgMTkzOTV9LA0KLSAgICB7Z19Gb3hpdFNlcmlmQm9sZEl0YWxpY0ZvbnREYXRhLCAyMDczM30sDQotICAgIHtnX0ZveGl0U2VyaWZJdGFsaWNGb250RGF0YSwgMjEyMjd9LA0KLSAgICB7Z19Gb3hpdFN5bWJvbEZvbnREYXRhLCAxNjcyOX0sDQotICAgIHtnX0ZveGl0RGluZ2JhdHNGb250RGF0YSwgMjk1MTN9LA0KLX07DQotdm9pZCBfRlBERkFQSV9HZXRJbnRlcm5hbEZvbnREYXRhKGludCBpZCwgRlhfTFBDQllURSYgZGF0YSwgRlhfRFdPUkQmIHNpemUpDQotew0KLSAgICBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRGb250TWdyKCktPkdldFN0YW5kYXJkRm9udChkYXRhLCBzaXplLCBpZCk7DQotfQ0KLUZYX0JPT0wgQ0ZYX0ZvbnRNZ3I6OkdldFN0YW5kYXJkRm9udChGWF9MUENCWVRFJiBwRm9udERhdGEsIEZYX0RXT1JEJiBzaXplLCBpbnQgaW5kZXgpDQotew0KLSAgICBpZiAoaW5kZXggPiAxNSB8fCBpbmRleCA8IDApIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICB7DQotICAgICAgICBpZiAoaW5kZXggPj0gMTQpIHsNCi0gICAgICAgICAgICBpZiAoaW5kZXggPT0gMTQpIHsNCi0gICAgICAgICAgICAgICAgcEZvbnREYXRhID0gZ19Gb3hpdFNlcmlmTU1Gb250RGF0YTsNCi0gICAgICAgICAgICAgICAgc2l6ZSA9IDExMzQxNzsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBwRm9udERhdGEgPSBnX0ZveGl0U2Fuc01NRm9udERhdGE7DQotICAgICAgICAgICAgICAgIHNpemUgPSA2NjkxOTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHBGb250RGF0YSA9IGdfRm94aXRGb250c1tpbmRleF0ubV9wRm9udERhdGE7DQotICAgICAgICAgICAgc2l6ZSA9IGdfRm94aXRGb250c1tpbmRleF0ubV9kd1NpemU7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUNGWF9Gb250TWFwcGVyOjpDRlhfRm9udE1hcHBlcigpDQotew0KLSAgICBGWFNZU19tZW1zZXQzMihtX0ZveGl0RmFjZXMsIDAsIHNpemVvZiBtX0ZveGl0RmFjZXMpOw0KLSAgICBtX01NRmFjZXNbMF0gPSBtX01NRmFjZXNbMV0gPSBOVUxMOw0KLSAgICBtX3BGb250SW5mbyA9IE5VTEw7DQotICAgIG1fYkxpc3RMb2FkZWQgPSBGQUxTRTsNCi0gICAgbV9wRm9udEVudW1lcmF0b3IgPSBOVUxMOw0KLX0NCi1DRlhfRm9udE1hcHBlcjo6fkNGWF9Gb250TWFwcGVyKCkNCi17DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTQ7IGkgKyspDQotICAgICAgICBpZiAobV9Gb3hpdEZhY2VzW2ldKSB7DQotICAgICAgICAgICAgRlhGVF9Eb25lX0ZhY2UobV9Gb3hpdEZhY2VzW2ldKTsNCi0gICAgICAgIH0NCi0gICAgaWYgKG1fTU1GYWNlc1swXSkgew0KLSAgICAgICAgRlhGVF9Eb25lX0ZhY2UobV9NTUZhY2VzWzBdKTsNCi0gICAgfQ0KLSAgICBpZiAobV9NTUZhY2VzWzFdKSB7DQotICAgICAgICBGWEZUX0RvbmVfRmFjZShtX01NRmFjZXNbMV0pOw0KLSAgICB9DQotICAgIGlmIChtX3BGb250SW5mbykgew0KLSAgICAgICAgbV9wRm9udEluZm8tPlJlbGVhc2UoKTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9Gb250TWFwcGVyOjpTZXRTeXN0ZW1Gb250SW5mbyhJRlhfU3lzdGVtRm9udEluZm8qIHBGb250SW5mbykNCi17DQotICAgIGlmIChwRm9udEluZm8gPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmIChtX3BGb250SW5mbykgew0KLSAgICAgICAgbV9wRm9udEluZm8tPlJlbGVhc2UoKTsNCi0gICAgfQ0KLSAgICBtX3BGb250SW5mbyA9IHBGb250SW5mbzsNCi19DQotc3RhdGljIENGWF9CeXRlU3RyaW5nIF9UVF9Ob3JtYWxpemVOYW1lKEZYX0xQQ1NUUiBmYW1pbHkpDQotew0KLSAgICBDRlhfQnl0ZVN0cmluZyBub3JtKGZhbWlseSwgLTEpOw0KLSAgICBub3JtLlJlbW92ZSgnICcpOw0KLSAgICBub3JtLlJlbW92ZSgnLScpOw0KLSAgICBub3JtLlJlbW92ZSgnLCcpOw0KLSAgICBpbnQgcG9zID0gbm9ybS5GaW5kKCcrJyk7DQotICAgIGlmIChwb3MgPiAwKSB7DQotICAgICAgICBub3JtID0gbm9ybS5MZWZ0KHBvcyk7DQotICAgIH0NCi0gICAgbm9ybS5NYWtlTG93ZXIoKTsNCi0gICAgcmV0dXJuIG5vcm07DQotfQ0KLUNGWF9CeXRlU3RyaW5nIF9GUERGX0dldE5hbWVGcm9tVFQoRlhfTFBDQllURSBuYW1lX3RhYmxlLCBGWF9EV09SRCBuYW1lX2lkKQ0KLXsNCi0gICAgRlhfTFBDQllURSBwdHIgPSBuYW1lX3RhYmxlICsgMjsNCi0gICAgaW50IG5hbWVfY291bnQgPSBHRVRfVFRfU0hPUlQocHRyKTsNCi0gICAgaW50IHN0cmluZ19vZmZzZXQgPSBHRVRfVFRfU0hPUlQocHRyICsgMik7DQotICAgIEZYX0xQQ0JZVEUgc3RyaW5nX3B0ciA9IG5hbWVfdGFibGUgKyBzdHJpbmdfb2Zmc2V0Ow0KLSAgICBwdHIgKz0gNDsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lX2NvdW50OyBpICsrKSB7DQotICAgICAgICBpZiAoR0VUX1RUX1NIT1JUKHB0ciArIDYpID09IG5hbWVfaWQgJiYgR0VUX1RUX1NIT1JUKHB0cikgPT0gMSAmJiBHRVRfVFRfU0hPUlQocHRyICsgMikgPT0gMCkgew0KLSAgICAgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0Moc3RyaW5nX3B0ciArIEdFVF9UVF9TSE9SVChwdHIgKyAxMCksIEdFVF9UVF9TSE9SVChwdHIgKyA4KSk7DQotICAgICAgICB9DQotICAgICAgICBwdHIgKz0gMTI7DQotICAgIH0NCi0gICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKCk7DQotfQ0KLXN0YXRpYyBDRlhfQnl0ZVN0cmluZyBfRlBERl9SZWFkU3RyaW5nRnJvbUZpbGUoRlhTWVNfRklMRSogcEZpbGUsIEZYX0RXT1JEIHNpemUpDQotew0KLSAgICBDRlhfQnl0ZVN0cmluZyBidWZmZXI7DQotICAgIGlmICghRlhTWVNfZnJlYWQoYnVmZmVyLkdldEJ1ZmZlcihzaXplKSwgc2l6ZSwgMSwgcEZpbGUpKSB7DQotICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsNCi0gICAgfQ0KLSAgICBidWZmZXIuUmVsZWFzZUJ1ZmZlcihzaXplKTsNCi0gICAgcmV0dXJuIGJ1ZmZlcjsNCi19DQotc3RhdGljIENGWF9CeXRlU3RyaW5nIF9GUERGX1JlYWRTdHJpbmdGcm9tU3RyZWFtRmlsZShJRlhfRmlsZVN0cmVhbSogcEZpbGUsIEZYX0RXT1JEIHNpemUpDQotew0KLSAgICBDRlhfQnl0ZVN0cmluZyBidWZmZXI7DQotICAgIGlmICghcEZpbGUtPlJlYWRCbG9jayhidWZmZXIuR2V0QnVmZmVyKHNpemUpLCBzaXplKSkgew0KLSAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKCk7DQotICAgIH0NCi0gICAgYnVmZmVyLlJlbGVhc2VCdWZmZXIoc2l6ZSk7DQotICAgIHJldHVybiBidWZmZXI7DQotfQ0KLUNGWF9CeXRlU3RyaW5nIF9GUERGX0xvYWRUYWJsZUZyb21UVChGWFNZU19GSUxFKiBwRmlsZSwgRlhfTFBDQllURSBwVGFibGVzLCBGWF9EV09SRCBuVGFibGVzLCBGWF9EV09SRCB0YWcpDQotew0KLSAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgblRhYmxlczsgaSArKykgew0KLSAgICAgICAgRlhfTFBDQllURSBwID0gcFRhYmxlcyArIGkgKiAxNjsNCi0gICAgICAgIGlmIChHRVRfVFRfTE9ORyhwKSA9PSB0YWcpIHsNCi0gICAgICAgICAgICBGWF9EV09SRCBvZmZzZXQgPSBHRVRfVFRfTE9ORyhwICsgOCk7DQotICAgICAgICAgICAgRlhfRFdPUkQgc2l6ZSA9IEdFVF9UVF9MT05HKHAgKyAxMik7DQotICAgICAgICAgICAgRlhTWVNfZnNlZWsocEZpbGUsIG9mZnNldCwgRlhTWVNfU0VFS19TRVQpOw0KLSAgICAgICAgICAgIHJldHVybiBfRlBERl9SZWFkU3RyaW5nRnJvbUZpbGUocEZpbGUsIHNpemUpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZygpOw0KLX0NCi1DRlhfQnl0ZVN0cmluZyBfRlBERl9Mb2FkVGFibGVGcm9tVFRTdHJlYW1GaWxlKElGWF9GaWxlU3RyZWFtKiBwRmlsZSwgRlhfTFBDQllURSBwVGFibGVzLCBGWF9EV09SRCBuVGFibGVzLCBGWF9EV09SRCB0YWcpDQotew0KLSAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgblRhYmxlczsgaSArKykgew0KLSAgICAgICAgRlhfTFBDQllURSBwID0gcFRhYmxlcyArIGkgKiAxNjsNCi0gICAgICAgIGlmIChHRVRfVFRfTE9ORyhwKSA9PSB0YWcpIHsNCi0gICAgICAgICAgICBGWF9EV09SRCBvZmZzZXQgPSBHRVRfVFRfTE9ORyhwICsgOCk7DQotICAgICAgICAgICAgRlhfRFdPUkQgc2l6ZSA9IEdFVF9UVF9MT05HKHAgKyAxMik7DQotICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgYnVmZmVyOw0KLSAgICAgICAgICAgIGlmICghcEZpbGUtPlJlYWRCbG9jayhidWZmZXIuR2V0QnVmZmVyKHNpemUpLCBvZmZzZXQsIHNpemUpKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZygpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBidWZmZXIuUmVsZWFzZUJ1ZmZlcihzaXplKTsNCi0gICAgICAgICAgICByZXR1cm4gYnVmZmVyOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZygpOw0KLX0NCi1DRlhfQnl0ZVN0cmluZyBDRlhfRm9udE1hcHBlcjo6R2V0UFNOYW1lRnJvbVRUKHZvaWQqIGhGb250KQ0KLXsNCi0gICAgaWYgKG1fcEZvbnRJbmZvID09IE5VTEwpIHsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nKCk7DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgcmVzdWx0Ow0KLSAgICBGWF9EV09SRCBzaXplID0gbV9wRm9udEluZm8tPkdldEZvbnREYXRhKGhGb250LCAweDZlNjE2ZDY1LCBOVUxMLCAwKTsNCi0gICAgaWYgKHNpemUpIHsNCi0gICAgICAgIEZYX0xQQllURSBidWZmZXIgPSBGWF9BbGxvYyhGWF9CWVRFLCBzaXplKTsNCi0gICAgICAgIGlmICghYnVmZmVyKSB7DQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fcEZvbnRJbmZvLT5HZXRGb250RGF0YShoRm9udCwgMHg2ZTYxNmQ2NSwgYnVmZmVyLCBzaXplKTsNCi0gICAgICAgIHJlc3VsdCA9IF9GUERGX0dldE5hbWVGcm9tVFQoYnVmZmVyLCA2KTsNCi0gICAgICAgIEZYX0ZyZWUoYnVmZmVyKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gcmVzdWx0Ow0KLX0NCi12b2lkIENGWF9Gb250TWFwcGVyOjpBZGRJbnN0YWxsZWRGb250KGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lLCBpbnQgY2hhcnNldCkNCi17DQotICAgIGlmIChtX3BGb250SW5mbyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKG1fQ2hhcnNldEFycmF5LkZpbmQoKEZYX0RXT1JEKWNoYXJzZXQpID09IC0xKSB7DQotICAgICAgICBtX0NoYXJzZXRBcnJheS5BZGQoKEZYX0RXT1JEKWNoYXJzZXQpOw0KLSAgICAgICAgbV9GYWNlQXJyYXkuQWRkKG5hbWUpOw0KLSAgICB9DQotICAgIGlmIChuYW1lID09IG1fTGFzdEZhbWlseSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIEZYX0xQQ0JZVEUgcHRyID0gbmFtZTsNCi0gICAgRlhfQk9PTCBiTG9jYWxpemVkID0gRkFMU0U7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZS5HZXRMZW5ndGgoKTsgaSArKykNCi0gICAgICAgIGlmIChwdHJbaV0gPiAweDgwKSB7DQotICAgICAgICAgICAgYkxvY2FsaXplZCA9IFRSVUU7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIGlmIChiTG9jYWxpemVkKSB7DQotICAgICAgICB2b2lkKiBoRm9udCA9IG1fcEZvbnRJbmZvLT5HZXRGb250KG5hbWUpOw0KLSAgICAgICAgaWYgKGhGb250ID09IE5VTEwpIHsNCi0gICAgICAgICAgICBGWF9CT09MIGJFeGFjdDsNCi0gICAgICAgICAgICBoRm9udCA9IG1fcEZvbnRJbmZvLT5NYXBGb250KDAsIDAsIEZYRk9OVF9ERUZBVUxUX0NIQVJTRVQsIDAsIG5hbWUsIGJFeGFjdCk7DQotICAgICAgICAgICAgaWYgKGhGb250ID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIG5ld19uYW1lID0gR2V0UFNOYW1lRnJvbVRUKGhGb250KTsNCi0gICAgICAgIGlmICghbmV3X25hbWUuSXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgbmV3X25hbWUuSW5zZXJ0KDAsICcgJyk7DQotICAgICAgICAgICAgbV9JbnN0YWxsZWRUVEZvbnRzLkFkZChuZXdfbmFtZSk7DQotICAgICAgICB9DQotICAgICAgICBtX3BGb250SW5mby0+RGVsZXRlRm9udChoRm9udCk7DQotICAgIH0NCi0gICAgbV9JbnN0YWxsZWRUVEZvbnRzLkFkZChuYW1lKTsNCi0gICAgbV9MYXN0RmFtaWx5ID0gbmFtZTsNCi19DQotdm9pZCBDRlhfRm9udE1hcHBlcjo6TG9hZEluc3RhbGxlZEZvbnRzKCkNCi17DQotICAgIGlmIChtX3BGb250SW5mbyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKG1fYkxpc3RMb2FkZWQpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAobV9iTGlzdExvYWRlZCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIG1fcEZvbnRJbmZvLT5FbnVtRm9udExpc3QodGhpcyk7DQotICAgIG1fYkxpc3RMb2FkZWQgPSBUUlVFOw0KLX0NCi1DRlhfQnl0ZVN0cmluZyBDRlhfRm9udE1hcHBlcjo6TWF0Y2hJbnN0YWxsZWRGb250cyhjb25zdCBDRlhfQnl0ZVN0cmluZyYgbm9ybV9uYW1lKQ0KLXsNCi0gICAgTG9hZEluc3RhbGxlZEZvbnRzKCk7DQotICAgIGludCBpOw0KLSAgICBmb3IgKGkgPSBtX0luc3RhbGxlZFRURm9udHMuR2V0U2l6ZSgpIC0gMTsgaSA+PSAwOyBpIC0tKSB7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyBub3JtMSA9IF9UVF9Ob3JtYWxpemVOYW1lKG1fSW5zdGFsbGVkVFRGb250c1tpXSk7DQotICAgICAgICBpZiAobm9ybTEgPT0gbm9ybV9uYW1lKSB7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKGkgPCAwKSB7DQotICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsNCi0gICAgfQ0KLSAgICBDRlhfQnl0ZVN0cmluZyBtYXRjaCA9IG1fSW5zdGFsbGVkVFRGb250c1tpXTsNCi0gICAgaWYgKG1hdGNoWzBdID09ICcgJykgew0KLSAgICAgICAgbWF0Y2ggPSBtX0luc3RhbGxlZFRURm9udHNbaSArIDFdOw0KLSAgICB9DQotICAgIHJldHVybiBtYXRjaDsNCi19DQotdHlwZWRlZiBzdHJ1Y3QgX0NIQVJTRVRfTUFQXyB7DQotICAgIEZYX0JZVEUgY2hhcnNldDsNCi0gICAgRlhfV09SRCBjb2RlcGFnZTsNCi19IENIQVJTRVRfTUFQOw0KLXN0YXRpYyBjb25zdCBDSEFSU0VUX01BUCBnX0NvZGVwYWdlMkNoYXJzZXRUYWJsZVtdID0gew0KLSAgICB7IDEJICwgMAl9LA0KLSAgICB7IDIJICwgNDIJfSwNCi0gICAgeyAyNTQsIDQzNwl9LA0KLSAgICB7IDI1NSwgODUwCX0sDQotICAgIHsgMjIyLCA4NzQJfSwNCi0gICAgeyAxMjgsIDkzMgl9LA0KLSAgICB7IDEzNCwgOTM2CX0sDQotICAgIHsgMTI5LCA5NDkJfSwNCi0gICAgeyAxMzYsIDk1MAl9LA0KLSAgICB7IDIzOCwgMTI1MAl9LA0KLSAgICB7IDIwNCwgMTI1MQl9LA0KLSAgICB7IDAsICAgMTI1Mgl9LA0KLSAgICB7IDE2MSwgMTI1Mwl9LA0KLSAgICB7IDE2MiwgMTI1NAl9LA0KLSAgICB7IDE3NywgMTI1NQl9LA0KLSAgICB7IDE3OCwgMTI1Ngl9LA0KLSAgICB7IDE4NiwgMTI1Nwl9LA0KLSAgICB7IDE2MywgMTI1OCB9LA0KLSAgICB7IDEzMCwgMTM2MSB9LA0KLSAgICB7IDc3LCAxMDAwMCB9LA0KLSAgICB7IDc4LCAxMDAwMSB9LA0KLSAgICB7IDc5LCAxMDAwMyB9LA0KLSAgICB7IDgwLCAxMDAwOCB9LA0KLSAgICB7IDgxLCAxMDAwMiB9LA0KLSAgICB7IDgzLCAxMDAwNSB9LA0KLSAgICB7IDg0LCAxMDAwNCB9LA0KLSAgICB7IDg1LCAxMDAwNiB9LA0KLSAgICB7IDg2LCAxMDA4MSB9LA0KLSAgICB7IDg3LCAxMDAyMSB9LA0KLSAgICB7IDg4LCAxMDAyOSB9LA0KLSAgICB7IDg5LCAxMDAwNyB9LA0KLX07DQotRlhfQllURSBfR2V0Q2hhcnNldEZyb21Db2RlUGFnZShGWF9XT1JEIGNvZGVwYWdlKQ0KLXsNCi0gICAgRlhfSU5UMzIgaUVuZCA9IHNpemVvZihnX0NvZGVwYWdlMkNoYXJzZXRUYWJsZSkgLyBzaXplb2YoQ0hBUlNFVF9NQVApIC0gMTsNCi0gICAgRlhTWVNfYXNzZXJ0KGlFbmQgPj0gMCk7DQotICAgIEZYX0lOVDMyIGlTdGFydCA9IDAsIGlNaWQ7DQotICAgIGRvIHsNCi0gICAgICAgIGlNaWQgPSAoaVN0YXJ0ICsgaUVuZCkgLyAyOw0KLSAgICAgICAgY29uc3QgQ0hBUlNFVF9NQVAgJiBjcCA9IGdfQ29kZXBhZ2UyQ2hhcnNldFRhYmxlW2lNaWRdOw0KLSAgICAgICAgaWYgKGNvZGVwYWdlID09IGNwLmNvZGVwYWdlKSB7DQotICAgICAgICAgICAgcmV0dXJuIGNwLmNoYXJzZXQ7DQotICAgICAgICB9IGVsc2UgaWYgKGNvZGVwYWdlIDwgY3AuY29kZXBhZ2UpIHsNCi0gICAgICAgICAgICBpRW5kID0gaU1pZCAtIDE7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlTdGFydCA9IGlNaWQgKyAxOw0KLSAgICAgICAgfQ0KLSAgICB9IHdoaWxlIChpU3RhcnQgPD0gaUVuZCk7DQotICAgIHJldHVybiAxOw0KLX0NCi1GWF9EV09SRCBfR2V0Q29kZVBhZ2VSYW5nZUZyb21DaGFyc2V0KGludCBjaGFyc2V0KQ0KLXsNCi0gICAgaWYgKGNoYXJzZXQgPT0gRlhGT05UX0VBU1RFVVJPUEVfQ0hBUlNFVCkgew0KLSAgICAgICAgcmV0dXJuIDEgPDwgMTsNCi0gICAgfQ0KLSAgICBpZiAoY2hhcnNldCA9PSBGWEZPTlRfR1JFRUtfQ0hBUlNFVCkgew0KLSAgICAgICAgcmV0dXJuIDEgPDwgMzsNCi0gICAgfQ0KLSAgICBpZiAoY2hhcnNldCA9PSBGWEZPTlRfVFVSS0lTSF9DSEFSU0VUKSB7DQotICAgICAgICByZXR1cm4gMSA8PCA0Ow0KLSAgICB9DQotICAgIGlmIChjaGFyc2V0ID09IEZYRk9OVF9IRUJSRVdfQ0hBUlNFVCkgew0KLSAgICAgICAgcmV0dXJuIDEgPDwgNTsNCi0gICAgfQ0KLSAgICBpZiAoY2hhcnNldCA9PSBGWEZPTlRfQVJBQklDX0NIQVJTRVQpIHsNCi0gICAgICAgIHJldHVybiAxIDw8IDY7DQotICAgIH0NCi0gICAgaWYgKGNoYXJzZXQgPT0gRlhGT05UX0JBTFRJQ19DSEFSU0VUKSB7DQotICAgICAgICByZXR1cm4gMSA8PCA3Ow0KLSAgICB9DQotICAgIGlmIChjaGFyc2V0ID09IEZYRk9OVF9USEFJX0NIQVJTRVQpIHsNCi0gICAgICAgIHJldHVybiAxIDw8IDE2Ow0KLSAgICB9DQotICAgIGlmIChjaGFyc2V0ID09IEZYRk9OVF9TSElGVEpJU19DSEFSU0VUKSB7DQotICAgICAgICByZXR1cm4gMSA8PCAxNzsNCi0gICAgfQ0KLSAgICBpZiAoY2hhcnNldCA9PSBGWEZPTlRfR0IyMzEyX0NIQVJTRVQpIHsNCi0gICAgICAgIHJldHVybiAxIDw8IDE4Ow0KLSAgICB9DQotICAgIGlmIChjaGFyc2V0ID09IEZYRk9OVF9DSElORVNFQklHNV9DSEFSU0VUKSB7DQotICAgICAgICByZXR1cm4gMSA8PCAyMDsNCi0gICAgfQ0KLSAgICBpZiAoY2hhcnNldCA9PSBGWEZPTlRfSEFOR0VVTF9DSEFSU0VUKSB7DQotICAgICAgICByZXR1cm4gMSA8PCAxOTsNCi0gICAgfQ0KLSAgICBpZiAoY2hhcnNldCA9PSBGWEZPTlRfU1lNQk9MX0NIQVJTRVQpIHsNCi0gICAgICAgIHJldHVybiAxIDw8IDMxOw0KLSAgICB9DQotICAgIHJldHVybiAxIDw8IDIxOw0KLX0NCi1zdGF0aWMgaW50IENQMkNoYXJTZXQoaW50IGNwKQ0KLXsNCi0gICAgaWYoY3AgPT0gOTMyKSB7DQotICAgICAgICByZXR1cm4gRlhGT05UX1NISUZUSklTX0NIQVJTRVQ7DQotICAgIH0gZWxzZSBpZihjcCA9PSA5MzYpIHsNCi0gICAgICAgIHJldHVybiBGWEZPTlRfR0IyMzEyX0NIQVJTRVQ7DQotICAgIH0gZWxzZSBpZihjcCA9PSA5NDkpIHsNCi0gICAgICAgIHJldHVybiBGWEZPTlRfSEFOR0VVTF9DSEFSU0VUOw0KLSAgICB9IGVsc2UgaWYoY3AgPT0gOTUwKSB7DQotICAgICAgICByZXR1cm4gRlhGT05UX0NISU5FU0VCSUc1X0NIQVJTRVQ7DQotICAgIH0NCi0gICAgcmV0dXJuIEZYRk9OVF9ERUZBVUxUX0NIQVJTRVQ7DQotfQ0KLUZYRlRfRmFjZSBDRlhfRm9udE1hcHBlcjo6VXNlSW50ZXJuYWxTdWJzdChDRlhfU3Vic3RGb250KiBwU3Vic3RGb250LCBpbnQgaUJhc2VGb250LCBpbnQgaXRhbGljX2FuZ2xlLCBpbnQgd2VpZ2h0LCBpbnQgcGljdGhmYW1pbHkpDQotew0KLSAgICBpZiAoaUJhc2VGb250IDwgMTIpIHsNCi0gICAgICAgIGlmIChtX0ZveGl0RmFjZXNbaUJhc2VGb250XSkgew0KLSAgICAgICAgICAgIHJldHVybiBtX0ZveGl0RmFjZXNbaUJhc2VGb250XTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0xQQ0JZVEUgcEZvbnREYXRhID0gTlVMTDsNCi0gICAgICAgIEZYX0RXT1JEIHNpemUgPSAwOw0KLSAgICAgICAgaWYgKG1fcEZvbnRNZ3ItPkdldFN0YW5kYXJkRm9udChwRm9udERhdGEsIHNpemUsIGlCYXNlRm9udCkpIHsNCi0gICAgICAgICAgICBtX0ZveGl0RmFjZXNbaUJhc2VGb250XSA9IG1fcEZvbnRNZ3ItPkdldEZpeGVkRmFjZShwRm9udERhdGEsIHNpemUsIDApOw0KLSAgICAgICAgICAgIHJldHVybiBtX0ZveGl0RmFjZXNbaUJhc2VGb250XTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBwU3Vic3RGb250LT5tX1N1YnN0RmxhZ3MgfD0gRlhGT05UX1NVQlNUX01NOw0KLSAgICBwU3Vic3RGb250LT5tX0l0YWxpY0FuZ2xlID0gaXRhbGljX2FuZ2xlOw0KLSAgICBpZiAod2VpZ2h0KSB7DQotICAgICAgICBwU3Vic3RGb250LT5tX1dlaWdodCA9IHdlaWdodDsNCi0gICAgfQ0KLSAgICBpZiAocGljdGhmYW1pbHkgJiBGWEZPTlRfRkZfUk9NQU4pIHsNCi0gICAgICAgIHBTdWJzdEZvbnQtPm1fV2VpZ2h0ID0gcFN1YnN0Rm9udC0+bV9XZWlnaHQgKiA0IC8gNTsNCi0gICAgICAgIHBTdWJzdEZvbnQtPm1fRmFtaWx5ID0gIkNocm9tZSBTZXJpZiI7DQotICAgICAgICBpZiAobV9NTUZhY2VzWzFdKSB7DQotICAgICAgICAgICAgcmV0dXJuIG1fTU1GYWNlc1sxXTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0xQQ0JZVEUgcEZvbnREYXRhID0gTlVMTDsNCi0gICAgICAgIEZYX0RXT1JEIHNpemU7DQotICAgICAgICBtX3BGb250TWdyLT5HZXRTdGFuZGFyZEZvbnQocEZvbnREYXRhLCBzaXplLCAxNCk7DQotICAgICAgICBtX01NRmFjZXNbMV0gPSBtX3BGb250TWdyLT5HZXRGaXhlZEZhY2UocEZvbnREYXRhLCBzaXplLCAwKTsNCi0gICAgICAgIHJldHVybiBtX01NRmFjZXNbMV07DQotICAgIH0NCi0gICAgcFN1YnN0Rm9udC0+bV9GYW1pbHkgPSAiQ2hyb21lIFNhbnMiOw0KLSAgICBpZiAobV9NTUZhY2VzWzBdKSB7DQotICAgICAgICByZXR1cm4gbV9NTUZhY2VzWzBdOw0KLSAgICB9DQotICAgIEZYX0xQQ0JZVEUgcEZvbnREYXRhID0gTlVMTDsNCi0gICAgRlhfRFdPUkQgc2l6ZSA9IDA7DQotICAgIG1fcEZvbnRNZ3ItPkdldFN0YW5kYXJkRm9udChwRm9udERhdGEsIHNpemUsIDE1KTsNCi0gICAgbV9NTUZhY2VzWzBdID0gbV9wRm9udE1nci0+R2V0Rml4ZWRGYWNlKHBGb250RGF0YSwgc2l6ZSwgMCk7DQotICAgIHJldHVybiBtX01NRmFjZXNbMF07DQotfQ0KLWNvbnN0IHN0cnVjdCBfQWx0Rm9udEZhbWlseSB7DQotICAgIEZYX0xQQ1NUUiBtX3BGb250TmFtZTsNCi0gICAgRlhfTFBDU1RSIG1fcEZvbnRGYW1pbHk7DQotfQ0KLWdfQWx0Rm9udEZhbWlsaWVzW10gPSB7DQotICAgIHsiQUdhcmFtb25kUHJvIiwgIkFkb2JlIEdhcmFtb25kIFBybyJ9LA0KLSAgICB7IkJhbmtHb3RoaWNCVC1NZWRpdW0iLCAiQmFua0dvdGhpYyBNZCBCVCJ9LA0KLSAgICB7IkZvcnRlTVQiLCAiRm9ydGUifSwNCi19Ow0KLWV4dGVybiAiQyIgew0KLSAgICBzdGF0aWMgaW50IGNvbXBhcmVGb250RmFtaWx5U3RyaW5nKGNvbnN0IHZvaWQqIGtleSwgY29uc3Qgdm9pZCogZWxlbWVudCkNCi0gICAgew0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc3RyX2tleSgoRlhfTFBDU1RSKWtleSk7DQotICAgICAgICBpZiAoc3RyX2tleS5GaW5kKCgoX0FsdEZvbnRGYW1pbHkqKWVsZW1lbnQpLT5tX3BGb250TmFtZSkgIT0gLTEpIHsNCi0gICAgICAgICAgICByZXR1cm4gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBGWFNZU19zdHJpY21wKChGWF9MUENTVFIpa2V5LCAoKF9BbHRGb250RmFtaWx5KillbGVtZW50KS0+bV9wRm9udE5hbWUpOw0KLSAgICB9DQotfQ0KLSNkZWZpbmUgRlhfRk9OVF9TVFlMRV9Ob25lCQkweDAwDQotI2RlZmluZSBGWF9GT05UX1NUWUxFX0JvbGQJCTB4MDENCi0jZGVmaW5lIEZYX0ZPTlRfU1RZTEVfSXRhbGljCTB4MDINCi0jZGVmaW5lIEZYX0ZPTlRfU1RZTEVfQm9sZEJvbGQJMHgwNA0KLXN0YXRpYyBDRlhfQnl0ZVN0cmluZyBfR2V0Rm9udEZhbWlseShDRlhfQnl0ZVN0cmluZyBmb250TmFtZSwgaW50IG5TdHlsZSkNCi17DQotICAgIGlmIChmb250TmFtZS5GaW5kKCJTY3JpcHQiKSA+PSAwKSB7DQotICAgICAgICBpZiAoKG5TdHlsZSAmIEZYX0ZPTlRfU1RZTEVfQm9sZCkgPT0gRlhfRk9OVF9TVFlMRV9Cb2xkKSB7DQotICAgICAgICAgICAgZm9udE5hbWUgPSAiU2NyaXB0TVRCb2xkIjsNCi0gICAgICAgIH0gZWxzZSBpZiAoZm9udE5hbWUuRmluZCgiUGFsYWNlIikgPj0gMCkgew0KLSAgICAgICAgICAgIGZvbnROYW1lID0gIlBhbGFjZVNjcmlwdE1UIjsNCi0gICAgICAgIH0gZWxzZSBpZiAoZm9udE5hbWUuRmluZCgiRnJlbmNoIikgPj0gMCkgew0KLSAgICAgICAgICAgIGZvbnROYW1lID0gIkZyZW5jaFNjcmlwdE1UIjsNCi0gICAgICAgIH0gZWxzZSBpZiAoZm9udE5hbWUuRmluZCgiRnJlZVN0eWxlIikgPj0gMCkgew0KLSAgICAgICAgICAgIGZvbnROYW1lID0gIkZyZWVTdHlsZVNjcmlwdCI7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gZm9udE5hbWU7DQotICAgIH0NCi0gICAgX0FsdEZvbnRGYW1pbHkqIGZvdW5kID0gKF9BbHRGb250RmFtaWx5KilGWFNZU19ic2VhcmNoKChGWF9MUENTVFIpZm9udE5hbWUsIGdfQWx0Rm9udEZhbWlsaWVzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgZ19BbHRGb250RmFtaWxpZXMgLyBzaXplb2YgKF9BbHRGb250RmFtaWx5KSwgc2l6ZW9mIChfQWx0Rm9udEZhbWlseSksIGNvbXBhcmVGb250RmFtaWx5U3RyaW5nKTsNCi0gICAgaWYgKGZvdW5kID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBmb250TmFtZTsNCi0gICAgfQ0KLSAgICByZXR1cm4gZm91bmQtPm1fcEZvbnRGYW1pbHk7DQotfTsNCi10eXBlZGVmIHN0cnVjdCBfRlhfRm9udFN0eWxlIHsNCi0gICAgRlhfTFBDU1RSIHN0eWxlOw0KLSAgICBGWF9JTlQzMiBsZW47DQotfSBGWF9Gb250U3R5bGU7DQotY29uc3QgRlhfRm9udFN0eWxlIGdfRm9udFN0eWxlc1tdID0gew0KLSAgICAiQm9sZCIsIDQsDQotICAgICJJdGFsaWMiLCA2LA0KLSAgICAiQm9sZEl0YWxpYyIsIDEwLA0KLSAgICAiUmVnIiwgMywNCi0gICAgIlJlZ3VsYXIiLCA3LA0KLX07DQotQ0ZYX0J5dGVTdHJpbmcgUGFyc2VTdHlsZShGWF9MUENTVFIgcFN0eWxlLCBpbnQgaUxlbiwgaW50IGlJbmRleCkNCi17DQotICAgIENGWF9CeXRlVGV4dEJ1ZiBidWY7DQotICAgIGlmICghaUxlbiB8fCBpTGVuIDw9IGlJbmRleCkgew0KLSAgICAgICAgcmV0dXJuIGJ1Zi5HZXRCeXRlU3RyaW5nKCk7DQotICAgIH0NCi0gICAgd2hpbGUgKGlJbmRleCA8IGlMZW4pIHsNCi0gICAgICAgIGlmIChwU3R5bGVbaUluZGV4XSA9PSAnLCcpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgICAgIGJ1Zi5BcHBlbmRDaGFyKHBTdHlsZVtpSW5kZXhdKTsNCi0gICAgICAgICsraUluZGV4Ow0KLSAgICB9DQotICAgIHJldHVybiBidWYuR2V0Qnl0ZVN0cmluZygpOw0KLX0NCi1GWF9JTlQzMiBHZXRTdHlsZVR5cGUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcgJmJzU3R5bGUsIEZYX0JPT0wgYlJldmVydCkNCi17DQotICAgIEZYX0lOVDMyIGlMZW4gPSBic1N0eWxlLkdldExlbmd0aCgpOw0KLSAgICBpZiAoIWlMZW4pIHsNCi0gICAgICAgIHJldHVybiAtMTsNCi0gICAgfQ0KLSAgICBpbnQgaVNpemUgPSBzaXplb2YoZ19Gb250U3R5bGVzKSAvIHNpemVvZihGWF9Gb250U3R5bGUpOw0KLSAgICBjb25zdCBGWF9Gb250U3R5bGUgKnBTdHlsZSA9IE5VTEw7DQotICAgIGZvciAoaW50IGkgPSBpU2l6ZSAtIDE7IGkgPj0gMDsgLS1pKSB7DQotICAgICAgICBwU3R5bGUgPSBnX0ZvbnRTdHlsZXMgKyBpOw0KLSAgICAgICAgaWYgKCFwU3R5bGUgfHwgcFN0eWxlLT5sZW4gPiBpTGVuKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoIWJSZXZlcnQpIHsNCi0gICAgICAgICAgICBpZiAoYnNTdHlsZS5MZWZ0KHBTdHlsZS0+bGVuKS5Db21wYXJlKHBTdHlsZS0+c3R5bGUpID09IDApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAoYnNTdHlsZS5SaWdodChwU3R5bGUtPmxlbikuQ29tcGFyZShwU3R5bGUtPnN0eWxlKSA9PSAwKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gLTE7DQotfQ0KLUZYX0JPT0wgQ2hlY2tTdXBwb3J0VGhpcmRQYXJ0Rm9udChDRlhfQnl0ZVN0cmluZyBuYW1lLCBpbnQgJlBpdGNoRmFtaWx5KQ0KLXsNCi0gICAgaWYgKG5hbWUgPT0gRlhfQlNUUkMoIk15cmlhZFBybyIpKSB7DQotICAgICAgICBQaXRjaEZhbWlseSAmPSB+RlhGT05UX0ZGX1JPTUFOOw0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1GWEZUX0ZhY2UgQ0ZYX0ZvbnRNYXBwZXI6OkZpbmRTdWJzdEZvbnQoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUsIEZYX0JPT0wgYlRydWVUeXBlLCBGWF9EV09SRCBmbGFncywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdlaWdodCwgaW50IGl0YWxpY19hbmdsZSwgaW50IFdpbmRvd0NQLCBDRlhfU3Vic3RGb250KiBwU3Vic3RGb250KQ0KLXsNCi0gICAgaWYgKCEoZmxhZ3MgJiBGWEZPTlRfVVNFRVhURVJOQVRUUikpIHsNCi0gICAgICAgIHdlaWdodCA9IEZYRk9OVF9GV19OT1JNQUw7DQotICAgICAgICBpdGFsaWNfYW5nbGUgPSAwOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIFN1YnN0TmFtZSA9IG5hbWU7DQotICAgIFN1YnN0TmFtZS5SZW1vdmUoMHgyMCk7DQotICAgIGlmIChiVHJ1ZVR5cGUpIHsNCi0gICAgICAgIGlmIChuYW1lWzBdID09ICdAJykgew0KLSAgICAgICAgICAgIFN1YnN0TmFtZSA9IG5hbWUuTWlkKDEpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIF9QREZfR2V0U3RhbmRhcmRGb250TmFtZShTdWJzdE5hbWUpOw0KLSAgICBpZiAoU3Vic3ROYW1lID09IEZYX0JTVFJDKCJTeW1ib2wiKSAmJiAhYlRydWVUeXBlKSB7DQotICAgICAgICBwU3Vic3RGb250LT5tX0ZhbWlseSA9ICJDaHJvbWUgU3ltYm9sIjsNCi0gICAgICAgIHBTdWJzdEZvbnQtPm1fQ2hhcnNldCA9IEZYRk9OVF9TWU1CT0xfQ0hBUlNFVDsNCi0gICAgICAgIHBTdWJzdEZvbnQtPm1fU3Vic3RGbGFncyB8PSBGWEZPTlRfU1VCU1RfU1RBTkRBUkQ7DQotICAgICAgICBpZiAobV9Gb3hpdEZhY2VzWzEyXSkgew0KLSAgICAgICAgICAgIHJldHVybiBtX0ZveGl0RmFjZXNbMTJdOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfTFBDQllURSBwRm9udERhdGEgPSBOVUxMOw0KLSAgICAgICAgRlhfRFdPUkQgc2l6ZSA9IDA7DQotICAgICAgICBtX3BGb250TWdyLT5HZXRTdGFuZGFyZEZvbnQocEZvbnREYXRhLCBzaXplLCAxMik7DQotICAgICAgICBtX0ZveGl0RmFjZXNbMTJdID0gbV9wRm9udE1nci0+R2V0Rml4ZWRGYWNlKHBGb250RGF0YSwgc2l6ZSwgMCk7DQotICAgICAgICByZXR1cm4gbV9Gb3hpdEZhY2VzWzEyXTsNCi0gICAgfQ0KLSAgICBpZiAoU3Vic3ROYW1lID09IEZYX0JTVFJDKCJaYXBmRGluZ2JhdHMiKSkgew0KLSAgICAgICAgcFN1YnN0Rm9udC0+bV9GYW1pbHkgPSAiQ2hyb21lIERpbmdiYXRzIjsNCi0gICAgICAgIHBTdWJzdEZvbnQtPm1fQ2hhcnNldCA9IEZYRk9OVF9TWU1CT0xfQ0hBUlNFVDsNCi0gICAgICAgIHBTdWJzdEZvbnQtPm1fU3Vic3RGbGFncyB8PSBGWEZPTlRfU1VCU1RfU1RBTkRBUkQ7DQotICAgICAgICBpZiAobV9Gb3hpdEZhY2VzWzEzXSkgew0KLSAgICAgICAgICAgIHJldHVybiBtX0ZveGl0RmFjZXNbMTNdOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfTFBDQllURSBwRm9udERhdGEgPSBOVUxMOw0KLSAgICAgICAgRlhfRFdPUkQgc2l6ZSA9IDA7DQotICAgICAgICBtX3BGb250TWdyLT5HZXRTdGFuZGFyZEZvbnQocEZvbnREYXRhLCBzaXplLCAxMyk7DQotICAgICAgICBtX0ZveGl0RmFjZXNbMTNdID0gbV9wRm9udE1nci0+R2V0Rml4ZWRGYWNlKHBGb250RGF0YSwgc2l6ZSwgMCk7DQotICAgICAgICByZXR1cm4gbV9Gb3hpdEZhY2VzWzEzXTsNCi0gICAgfQ0KLSAgICBpbnQgaUJhc2VGb250ID0gMDsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgZmFtaWx5LCBzdHlsZTsNCi0gICAgRlhfQk9PTAliSGFzQ29tbWEgPSBGQUxTRTsNCi0gICAgRlhfQk9PTCBiSGFzSHlwZW4gPSBGQUxTRTsNCi0gICAgaW50IGZpbmQgPSBTdWJzdE5hbWUuRmluZChGWF9CU1RSQygiLCIpLCAwKTsNCi0gICAgaWYgKGZpbmQgPj0gMCkgew0KLSAgICAgICAgZmFtaWx5ID0gU3Vic3ROYW1lLkxlZnQoZmluZCk7DQotICAgICAgICBfUERGX0dldFN0YW5kYXJkRm9udE5hbWUoZmFtaWx5KTsNCi0gICAgICAgIHN0eWxlID0gU3Vic3ROYW1lLk1pZChmaW5kICsgMSk7DQotICAgICAgICBiSGFzQ29tbWEgPSBUUlVFOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZmFtaWx5ID0gU3Vic3ROYW1lOw0KLSAgICB9DQotICAgIGZvciAoOyBpQmFzZUZvbnQgPCAxMjsgaUJhc2VGb250ICsrKQ0KLSAgICAgICAgaWYgKGZhbWlseSA9PSBDRlhfQnl0ZVN0cmluZ0MoZ19CYXNlMTRGb250TmFtZXNbaUJhc2VGb250XSkpIHsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIH0NCi0gICAgaW50IFBpdGNoRmFtaWx5ID0gMDsNCi0gICAgRlhfQk9PTCBiSXRhbGljID0gRkFMU0U7DQotICAgIEZYX0RXT1JEIG5TdHlsZSA9IDA7DQotICAgIEZYX0JPT0wgYlN0eWxlQXZhaWwgPSBGQUxTRTsNCi0gICAgRlhfQk9PTCBiRmFtaWx5U3R5bGVJc1dob2xlID0gRkFMU0U7DQotICAgIEZYX0JPT0wgYk5leHRGID0gRkFMU0U7DQotICAgIGlmIChpQmFzZUZvbnQgPCAxMikgew0KLSAgICAgICAgZmFtaWx5ID0gZ19CYXNlMTRGb250TmFtZXNbaUJhc2VGb250XTsNCi0gICAgICAgIGlmICgoaUJhc2VGb250ICUgNCkgPT0gMSB8fCAoaUJhc2VGb250ICUgNCkgPT0gMikgew0KLSAgICAgICAgICAgIG5TdHlsZSB8PSBGWF9GT05UX1NUWUxFX0JvbGQ7DQotICAgICAgICB9DQotICAgICAgICBpZiAoKGlCYXNlRm9udCAlIDQpIC8gMikgew0KLSAgICAgICAgICAgIG5TdHlsZSB8PSBGWF9GT05UX1NUWUxFX0l0YWxpYzsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChpQmFzZUZvbnQgPCA0KSB7DQotICAgICAgICAgICAgUGl0Y2hGYW1pbHkgfD0gRlhGT05UX0ZGX0ZJWEVEUElUQ0g7DQotICAgICAgICB9DQotICAgICAgICBpZiAoaUJhc2VGb250ID49IDgpIHsNCi0gICAgICAgICAgICBQaXRjaEZhbWlseSB8PSBGWEZPTlRfRkZfUk9NQU47DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZiAoIWJIYXNDb21tYSkgew0KLSAgICAgICAgICAgIGZpbmQgPSBmYW1pbHkuUmV2ZXJzZUZpbmQoJy0nKTsNCi0gICAgICAgICAgICBpZiAoZmluZCA+PSAwKSB7DQotICAgICAgICAgICAgICAgIHN0eWxlID0gZmFtaWx5Lk1pZChmaW5kICsgMSk7DQotICAgICAgICAgICAgICAgIGZhbWlseSA9IGZhbWlseS5MZWZ0KGZpbmQpOw0KLSAgICAgICAgICAgICAgICBiSGFzSHlwZW4gPSBUUlVFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmICghYkhhc0h5cGVuKSB7DQotICAgICAgICAgICAgaW50IG5MZW4gPSBmYW1pbHkuR2V0TGVuZ3RoKCk7DQotICAgICAgICAgICAgRlhfSU5UMzIgblJldCA9IEdldFN0eWxlVHlwZShmYW1pbHksIFRSVUUpOw0KLSAgICAgICAgICAgIGlmIChuUmV0ID4gLTEpIHsNCi0gICAgICAgICAgICAgICAgZmFtaWx5ID0gZmFtaWx5LkxlZnQobkxlbiAtIGdfRm9udFN0eWxlc1tuUmV0XS5sZW4pOw0KLSAgICAgICAgICAgICAgICBpZiAoblJldCA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICBuU3R5bGUgfD0gRlhfRk9OVF9TVFlMRV9Cb2xkOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChuUmV0ID09IDEpIHsNCi0gICAgICAgICAgICAgICAgICAgIG5TdHlsZSB8PSBGWF9GT05UX1NUWUxFX0l0YWxpYzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoblJldCA9PSAyKSB7DQotICAgICAgICAgICAgICAgICAgICBuU3R5bGUgfD0gKEZYX0ZPTlRfU1RZTEVfQm9sZCB8IEZYX0ZPTlRfU1RZTEVfSXRhbGljKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChmbGFncyAmIEZYRk9OVF9TRVJJRikgew0KLSAgICAgICAgICAgIFBpdGNoRmFtaWx5IHw9IEZYRk9OVF9GRl9ST01BTjsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChmbGFncyAmIEZYRk9OVF9TQ1JJUFQpIHsNCi0gICAgICAgICAgICBQaXRjaEZhbWlseSB8PSBGWEZPTlRfRkZfU0NSSVBUOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGZsYWdzICYgRlhGT05UX0ZJWEVEX1BJVENIKSB7DQotICAgICAgICAgICAgUGl0Y2hGYW1pbHkgfD0gRlhGT05UX0ZGX0ZJWEVEUElUQ0g7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKCFzdHlsZS5Jc0VtcHR5KCkpIHsNCi0gICAgICAgIGludCBuTGVuID0gc3R5bGUuR2V0TGVuZ3RoKCk7DQotICAgICAgICBGWF9MUENTVFIgcFN0eWxlID0gc3R5bGU7DQotICAgICAgICBpbnQgaSA9IDA7DQotICAgICAgICBGWF9CT09MIGJGaXJzdEl0ZW0gPSBUUlVFOw0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgYnVmOw0KLSAgICAgICAgd2hpbGUgKGkgPCBuTGVuKSB7DQotICAgICAgICAgICAgYnVmID0gUGFyc2VTdHlsZShwU3R5bGUsIG5MZW4sIGkpOw0KLSAgICAgICAgICAgIEZYX0lOVDMyIG5SZXQgPSBHZXRTdHlsZVR5cGUoYnVmLCBGQUxTRSk7DQotICAgICAgICAgICAgaWYgKChpICYmICFiU3R5bGVBdmFpbCkgfHwgKCFpICYmIG5SZXQgPCAwKSkgew0KLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBTdWJzdE5hbWU7DQotICAgICAgICAgICAgICAgIGlCYXNlRm9udCA9IDEyOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9IGVsc2UgaWYgKG5SZXQgPj0gMCkgew0KLSAgICAgICAgICAgICAgICBiU3R5bGVBdmFpbCA9IFRSVUU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChuUmV0ID09IDApIHsNCi0gICAgICAgICAgICAgICAgaWYgKG5TdHlsZSAmIEZYX0ZPTlRfU1RZTEVfQm9sZCkgew0KLSAgICAgICAgICAgICAgICAgICAgblN0eWxlIHw9IEZYX0ZPTlRfU1RZTEVfQm9sZEJvbGQ7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBuU3R5bGUgfD0gRlhfRk9OVF9TVFlMRV9Cb2xkOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGJGaXJzdEl0ZW0gPSBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKG5SZXQgPT0gMSkgew0KLSAgICAgICAgICAgICAgICBpZiAoYkZpcnN0SXRlbSkgew0KLSAgICAgICAgICAgICAgICAgICAgblN0eWxlIHw9IEZYX0ZPTlRfU1RZTEVfSXRhbGljOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gU3Vic3ROYW1lOw0KLSAgICAgICAgICAgICAgICAgICAgaUJhc2VGb250ID0gMTI7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChuUmV0ID09IDIpIHsNCi0gICAgICAgICAgICAgICAgblN0eWxlIHw9IEZYX0ZPTlRfU1RZTEVfSXRhbGljOw0KLSAgICAgICAgICAgICAgICBpZiAoblN0eWxlICYgRlhfRk9OVF9TVFlMRV9Cb2xkKSB7DQotICAgICAgICAgICAgICAgICAgICBuU3R5bGUgfD0gRlhfRk9OVF9TVFlMRV9Cb2xkQm9sZDsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIG5TdHlsZSB8PSBGWF9GT05UX1NUWUxFX0JvbGQ7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgYkZpcnN0SXRlbSA9IEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpICs9IGJ1Zi5HZXRMZW5ndGgoKSArIDE7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgd2VpZ2h0ID0gd2VpZ2h0ID8gd2VpZ2h0IDogRlhGT05UX0ZXX05PUk1BTDsNCi0gICAgaW50IG9sZF93ZWlnaHQgPSB3ZWlnaHQ7DQotICAgIGlmIChuU3R5bGUpIHsNCi0gICAgICAgIHdlaWdodCA9IG5TdHlsZSAmIEZYX0ZPTlRfU1RZTEVfQm9sZEJvbGQgPyA5MDAgOiAoblN0eWxlICYgRlhfRk9OVF9TVFlMRV9Cb2xkID8gRlhGT05UX0ZXX0JPTEQgOiBGWEZPTlRfRldfTk9STUFMKTsNCi0gICAgfQ0KLSAgICBpZiAoblN0eWxlICYgRlhfRk9OVF9TVFlMRV9JdGFsaWMpIHsNCi0gICAgICAgIGJJdGFsaWMgPSBUUlVFOw0KLSAgICB9DQotICAgIEZYX0JPT0wgYkNKSyA9IEZBTFNFOw0KLSAgICBGWF9CT09MIGJFeGFjdCA9IEZBTFNFOw0KLSAgICBpbnQgQ2hhcnNldCA9IEZYRk9OVF9BTlNJX0NIQVJTRVQ7DQotICAgIGlmIChXaW5kb3dDUCkgew0KLSAgICAgICAgQ2hhcnNldCA9IF9HZXRDaGFyc2V0RnJvbUNvZGVQYWdlKFdpbmRvd0NQKTsNCi0gICAgfSBlbHNlIGlmIChpQmFzZUZvbnQgPT0gMTIgJiYgKGZsYWdzICYgRlhGT05UX1NZTUJPTElDKSkgew0KLSAgICAgICAgQ2hhcnNldCA9IEZYRk9OVF9TWU1CT0xfQ0hBUlNFVDsNCi0gICAgfQ0KLSAgICBpZiAoQ2hhcnNldCA9PSBGWEZPTlRfU0hJRlRKSVNfQ0hBUlNFVCB8fCBDaGFyc2V0ID09IEZYRk9OVF9HQjIzMTJfQ0hBUlNFVCB8fA0KLSAgICAgICAgICAgIENoYXJzZXQgPT0gRlhGT05UX0hBTkdFVUxfQ0hBUlNFVCB8fCBDaGFyc2V0ID09IEZYRk9OVF9DSElORVNFQklHNV9DSEFSU0VUKSB7DQotICAgICAgICBiQ0pLID0gVFJVRTsNCi0gICAgfQ0KLSAgICBpZiAobV9wRm9udEluZm8gPT0gTlVMTCkgew0KLSAgICAgICAgcFN1YnN0Rm9udC0+bV9TdWJzdEZsYWdzIHw9IEZYRk9OVF9TVUJTVF9TVEFOREFSRDsNCi0gICAgICAgIHJldHVybiBVc2VJbnRlcm5hbFN1YnN0KHBTdWJzdEZvbnQsIGlCYXNlRm9udCwgaXRhbGljX2FuZ2xlLCBvbGRfd2VpZ2h0LCBQaXRjaEZhbWlseSk7DQotICAgIH0NCi0gICAgZmFtaWx5ID0gX0dldEZvbnRGYW1pbHkoZmFtaWx5LCBuU3R5bGUpOw0KLSAgICBDRlhfQnl0ZVN0cmluZyBtYXRjaCA9IE1hdGNoSW5zdGFsbGVkRm9udHMoX1RUX05vcm1hbGl6ZU5hbWUoZmFtaWx5KSk7DQotICAgIGlmIChtYXRjaC5Jc0VtcHR5KCkgJiYgZmFtaWx5ICE9IFN1YnN0TmFtZSAmJiAoIWJIYXNDb21tYSAmJiAoIWJIYXNIeXBlbiB8fCAoYkhhc0h5cGVuICYmICFiU3R5bGVBdmFpbCkpKSkgew0KLSAgICAgICAgbWF0Y2ggPSBNYXRjaEluc3RhbGxlZEZvbnRzKF9UVF9Ob3JtYWxpemVOYW1lKFN1YnN0TmFtZSkpOw0KLSAgICB9DQotICAgIGlmIChtYXRjaC5Jc0VtcHR5KCkgJiYgaUJhc2VGb250ID49IDEyKSB7DQotICAgICAgICBpZiAoIWJDSkspIHsNCi0gICAgICAgICAgICBpZiAoIUNoZWNrU3VwcG9ydFRoaXJkUGFydEZvbnQoZmFtaWx5LCBQaXRjaEZhbWlseSkpIHsNCi0gICAgICAgICAgICAgICAgaWYgKGl0YWxpY19hbmdsZSAhPSAwKSB7DQotICAgICAgICAgICAgICAgICAgICBiSXRhbGljID0gVFJVRTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIGJJdGFsaWMgPSBGQUxTRTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB3ZWlnaHQgPSBvbGRfd2VpZ2h0Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcFN1YnN0Rm9udC0+bV9iU3Vic3RPZkNKSyA9IFRSVUU7DQotICAgICAgICAgICAgaWYgKG5TdHlsZSkgew0KLSAgICAgICAgICAgICAgICBwU3Vic3RGb250LT5tX1dlaWdodENKSyA9IHdlaWdodDsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBwU3Vic3RGb250LT5tX1dlaWdodENKSyA9IEZYRk9OVF9GV19OT1JNQUw7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChuU3R5bGUgJiBGWF9GT05UX1NUWUxFX0l0YWxpYykgew0KLSAgICAgICAgICAgICAgICBwU3Vic3RGb250LT5tX2JJdGxpY0NKSyA9IFRSVUU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaXRhbGljX2FuZ2xlID0gMDsNCi0gICAgICAgIHdlaWdodCA9IG5TdHlsZSAmIEZYX0ZPTlRfU1RZTEVfQm9sZEJvbGQgPyA5MDAgOiAoblN0eWxlICYgRlhfRk9OVF9TVFlMRV9Cb2xkID8gRlhGT05UX0ZXX0JPTEQgOiBGWEZPTlRfRldfTk9STUFMKTsNCi0gICAgfQ0KLSAgICBpZiAoIW1hdGNoLklzRW1wdHkoKSB8fCBpQmFzZUZvbnQgPCAxMikgew0KLSAgICAgICAgcFN1YnN0Rm9udC0+bV9TdWJzdEZsYWdzIHw9IEZYRk9OVF9TVUJTVF9FWEFDVDsNCi0gICAgICAgIGlmICghbWF0Y2guSXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgZmFtaWx5ID0gbWF0Y2g7DQotICAgICAgICB9DQotICAgICAgICBpZiAoaUJhc2VGb250IDwgMTIpIHsNCi0gICAgICAgICAgICBpZiAoblN0eWxlICYmICEoaUJhc2VGb250ICUgNCkpIHsNCi0gICAgICAgICAgICAgICAgaWYgKChuU3R5bGUgJiAweDMpID09IDEpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlCYXNlRm9udCArPSAxOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmICgoblN0eWxlICYgMHgzKSA9PSAyKSB7DQotICAgICAgICAgICAgICAgICAgICBpQmFzZUZvbnQgKz0gMzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBpZiAoKG5TdHlsZSAmIDB4MykgPT0gMykgew0KLSAgICAgICAgICAgICAgICAgICAgaUJhc2VGb250ICs9IDI7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKG1fcEZvbnRNZ3ItPm1fRXh0ZXJuYWxGb250c1tpQmFzZUZvbnRdLm1fcEZvbnREYXRhKSB7DQotICAgICAgICAgICAgICAgIGlmIChtX0ZveGl0RmFjZXNbaUJhc2VGb250XSkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fRm94aXRGYWNlc1tpQmFzZUZvbnRdOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIG1fRm94aXRGYWNlc1tpQmFzZUZvbnRdID0gbV9wRm9udE1nci0+R2V0Rml4ZWRGYWNlKG1fcEZvbnRNZ3ItPm1fRXh0ZXJuYWxGb250c1tpQmFzZUZvbnRdLm1fcEZvbnREYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcEZvbnRNZ3ItPm1fRXh0ZXJuYWxGb250c1tpQmFzZUZvbnRdLm1fZHdTaXplLCAwKTsNCi0gICAgICAgICAgICAgICAgaWYgKG1fRm94aXRGYWNlc1tpQmFzZUZvbnRdKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9Gb3hpdEZhY2VzW2lCYXNlRm9udF07DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBmYW1pbHkgPSBnX0Jhc2UxNEZvbnROYW1lc1tpQmFzZUZvbnRdOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwU3Vic3RGb250LT5tX1N1YnN0RmxhZ3MgfD0gRlhGT05UX1NVQlNUX1NUQU5EQVJEOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYgKGZsYWdzICYgRlhGT05UX0lUQUxJQykgew0KLSAgICAgICAgICAgIGJJdGFsaWMgPSBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGJFeGFjdCA9ICFtYXRjaC5Jc0VtcHR5KCk7DQotICAgIHZvaWQqIGhGb250ID0gbV9wRm9udEluZm8tPk1hcEZvbnQod2VpZ2h0LCBiSXRhbGljLCBDaGFyc2V0LCBQaXRjaEZhbWlseSwgZmFtaWx5LCBiRXhhY3QpOw0KLSAgICBpZiAoYkV4YWN0KSB7DQotICAgICAgICBwU3Vic3RGb250LT5tX1N1YnN0RmxhZ3MgfD0gRlhGT05UX1NVQlNUX0VYQUNUOw0KLSAgICB9DQotICAgIGlmIChoRm9udCA9PSBOVUxMKSB7DQotICAgICAgICBpZiAoYkNKSykgew0KLSAgICAgICAgICAgIGlmIChpdGFsaWNfYW5nbGUgIT0gMCkgew0KLSAgICAgICAgICAgICAgICBiSXRhbGljID0gVFJVRTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBiSXRhbGljID0gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHdlaWdodCA9IG9sZF93ZWlnaHQ7DQotICAgICAgICB9DQotICAgICAgICBpZiAoIW1hdGNoLklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgIGhGb250ID0gbV9wRm9udEluZm8tPkdldEZvbnQobWF0Y2gpOw0KLSAgICAgICAgICAgIGlmIChoRm9udCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBVc2VJbnRlcm5hbFN1YnN0KHBTdWJzdEZvbnQsIGlCYXNlRm9udCwgaXRhbGljX2FuZ2xlLCBvbGRfd2VpZ2h0LCBQaXRjaEZhbWlseSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAoQ2hhcnNldCA9PSBGWEZPTlRfU1lNQk9MX0NIQVJTRVQpIHsNCi0jaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfIHx8IF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FORFJPSURfDQotICAgICAgICAgICAgICAgIGlmIChTdWJzdE5hbWUgPT0gRlhfQlNUUkMoIlN5bWJvbCIpKSB7DQotICAgICAgICAgICAgICAgICAgICBwU3Vic3RGb250LT5tX0ZhbWlseSA9ICJDaHJvbWUgU3ltYm9sIjsNCi0gICAgICAgICAgICAgICAgICAgIHBTdWJzdEZvbnQtPm1fU3Vic3RGbGFncyB8PSBGWEZPTlRfU1VCU1RfU1RBTkRBUkQ7DQotICAgICAgICAgICAgICAgICAgICBwU3Vic3RGb250LT5tX0NoYXJzZXQgPSBGWEZPTlRfU1lNQk9MX0NIQVJTRVQ7DQotICAgICAgICAgICAgICAgICAgICBpZiAobV9Gb3hpdEZhY2VzWzEyXSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX0ZveGl0RmFjZXNbMTJdOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgRlhfTFBDQllURSBwRm9udERhdGEgPSBOVUxMOw0KLSAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgc2l6ZSA9IDA7DQotICAgICAgICAgICAgICAgICAgICBtX3BGb250TWdyLT5HZXRTdGFuZGFyZEZvbnQocEZvbnREYXRhLCBzaXplLCAxMik7DQotICAgICAgICAgICAgICAgICAgICBtX0ZveGl0RmFjZXNbMTJdID0gbV9wRm9udE1nci0+R2V0Rml4ZWRGYWNlKHBGb250RGF0YSwgc2l6ZSwgMCk7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9Gb3hpdEZhY2VzWzEyXTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIHBTdWJzdEZvbnQtPm1fU3Vic3RGbGFncyB8PSBGWEZPTlRfU1VCU1RfTk9OU1lNQk9MOw0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZpbmRTdWJzdEZvbnQoZmFtaWx5LCBiVHJ1ZVR5cGUsIGZsYWdzICYgfkZYRk9OVF9TWU1CT0xJQywgd2VpZ2h0LCBpdGFsaWNfYW5nbGUsIDAsIHBTdWJzdEZvbnQpOw0KLSAgICAgICAgICAgICAgICB9DQotI2Vsc2UNCi0gICAgICAgICAgICAgICAgcFN1YnN0Rm9udC0+bV9TdWJzdEZsYWdzIHw9IEZYRk9OVF9TVUJTVF9OT05TWU1CT0w7DQotICAgICAgICAgICAgICAgIHJldHVybiBGaW5kU3Vic3RGb250KGZhbWlseSwgYlRydWVUeXBlLCBmbGFncyAmIH5GWEZPTlRfU1lNQk9MSUMsIHdlaWdodCwgaXRhbGljX2FuZ2xlLCAwLCBwU3Vic3RGb250KTsNCi0jZW5kaWYNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKENoYXJzZXQgPT0gRlhGT05UX0FOU0lfQ0hBUlNFVCkgew0KLSAgICAgICAgICAgICAgICBwU3Vic3RGb250LT5tX1N1YnN0RmxhZ3MgfD0gRlhGT05UX1NVQlNUX1NUQU5EQVJEOw0KLSAgICAgICAgICAgICAgICByZXR1cm4gVXNlSW50ZXJuYWxTdWJzdChwU3Vic3RGb250LCBpQmFzZUZvbnQsIGl0YWxpY19hbmdsZSwgb2xkX3dlaWdodCwgUGl0Y2hGYW1pbHkpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpbnQgaW5kZXggPSBtX0NoYXJzZXRBcnJheS5GaW5kKENoYXJzZXQpOw0KLSAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIFVzZUludGVybmFsU3Vic3QocFN1YnN0Rm9udCwgaUJhc2VGb250LCBpdGFsaWNfYW5nbGUsIG9sZF93ZWlnaHQsIFBpdGNoRmFtaWx5KTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBoRm9udCA9IG1fcEZvbnRJbmZvLT5HZXRGb250KG1fRmFjZUFycmF5W2luZGV4XSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHBTdWJzdEZvbnQtPm1fRXh0SGFuZGxlID0gbV9wRm9udEluZm8tPlJldGFpbkZvbnQoaEZvbnQpOw0KLSAgICBpZiAoaEZvbnQgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgbV9wRm9udEluZm8tPkdldEZhY2VOYW1lKGhGb250LCBTdWJzdE5hbWUpOw0KLSAgICBpZiAoQ2hhcnNldCA9PSBGWEZPTlRfREVGQVVMVF9DSEFSU0VUKSB7DQotICAgICAgICBtX3BGb250SW5mby0+R2V0Rm9udENoYXJzZXQoaEZvbnQsIENoYXJzZXQpOw0KLSAgICB9DQotICAgIEZYX0RXT1JEIHR0Y19zaXplID0gbV9wRm9udEluZm8tPkdldEZvbnREYXRhKGhGb250LCAweDc0NzQ2MzY2LCBOVUxMLCAwKTsNCi0gICAgRlhfRFdPUkQgZm9udF9zaXplID0gbV9wRm9udEluZm8tPkdldEZvbnREYXRhKGhGb250LCAwLCBOVUxMLCAwKTsNCi0gICAgaWYoZm9udF9zaXplID09IDAgJiYgdHRjX3NpemUgPT0gMCkgew0KLSAgICAgICAgbV9wRm9udEluZm8tPkRlbGV0ZUZvbnQoaEZvbnQpOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgRlhGVF9GYWNlIGZhY2UgPSBOVUxMOw0KLSAgICBpZiAodHRjX3NpemUpIHsNCi0gICAgICAgIEZYX0JZVEUgdGVtcFsxMDI0XTsNCi0gICAgICAgIG1fcEZvbnRJbmZvLT5HZXRGb250RGF0YShoRm9udCwgMHg3NDc0NjM2NiwgdGVtcCwgMTAyNCk7DQotICAgICAgICBGWF9EV09SRCBjaGVja3N1bSA9IDA7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSArKykgew0KLSAgICAgICAgICAgIGNoZWNrc3VtICs9ICgoRlhfRFdPUkQqKXRlbXApW2ldOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfTFBCWVRFIHBGb250RGF0YTsNCi0gICAgICAgIGZhY2UgPSBtX3BGb250TWdyLT5HZXRDYWNoZWRUVENGYWNlKHR0Y19zaXplLCBjaGVja3N1bSwgdHRjX3NpemUgLSBmb250X3NpemUsIHBGb250RGF0YSk7DQotICAgICAgICBpZiAoZmFjZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcEZvbnREYXRhID0gRlhfQWxsb2MoRlhfQllURSwgdHRjX3NpemUpOw0KLSAgICAgICAgICAgIGlmIChwRm9udERhdGEpIHsNCi0gICAgICAgICAgICAgICAgbV9wRm9udEluZm8tPkdldEZvbnREYXRhKGhGb250LCAweDc0NzQ2MzY2LCBwRm9udERhdGEsIHR0Y19zaXplKTsNCi0gICAgICAgICAgICAgICAgZmFjZSA9IG1fcEZvbnRNZ3ItPkFkZENhY2hlZFRUQ0ZhY2UodHRjX3NpemUsIGNoZWNrc3VtLCBwRm9udERhdGEsIHR0Y19zaXplLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGNfc2l6ZSAtIGZvbnRfc2l6ZSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgRlhfTFBCWVRFIHBGb250RGF0YTsNCi0gICAgICAgIGZhY2UgPSBtX3BGb250TWdyLT5HZXRDYWNoZWRGYWNlKFN1YnN0TmFtZSwgd2VpZ2h0LCBiSXRhbGljLCBwRm9udERhdGEpOw0KLSAgICAgICAgaWYgKGZhY2UgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHBGb250RGF0YSA9IEZYX0FsbG9jKEZYX0JZVEUsIGZvbnRfc2l6ZSk7DQotICAgICAgICAgICAgaWYgKCFwRm9udERhdGEpIHsNCi0gICAgICAgICAgICAgICAgbV9wRm9udEluZm8tPkRlbGV0ZUZvbnQoaEZvbnQpOw0KLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgbV9wRm9udEluZm8tPkdldEZvbnREYXRhKGhGb250LCAwLCBwRm9udERhdGEsIGZvbnRfc2l6ZSk7DQotICAgICAgICAgICAgZmFjZSA9IG1fcEZvbnRNZ3ItPkFkZENhY2hlZEZhY2UoU3Vic3ROYW1lLCB3ZWlnaHQsIGJJdGFsaWMsIHBGb250RGF0YSwgZm9udF9zaXplLCBtX3BGb250SW5mby0+R2V0RmFjZUluZGV4KGhGb250KSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKGZhY2UgPT0gTlVMTCkgew0KLSAgICAgICAgbV9wRm9udEluZm8tPkRlbGV0ZUZvbnQoaEZvbnQpOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcFN1YnN0Rm9udC0+bV9GYW1pbHkgPSBTdWJzdE5hbWU7DQotICAgIHBTdWJzdEZvbnQtPm1fQ2hhcnNldCA9IENoYXJzZXQ7DQotICAgIEZYX0JPT0wgYk5lZWRVcGRhdGVXZWlnaHQgPSBGQUxTRTsNCi0gICAgaWYgKEZYRlRfSXNfRmFjZV9Cb2xkKGZhY2UpKSB7DQotICAgICAgICBpZiAod2VpZ2h0ID09IEZYRk9OVF9GV19CT0xEKSB7DQotICAgICAgICAgICAgYk5lZWRVcGRhdGVXZWlnaHQgPSBGQUxTRTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgYk5lZWRVcGRhdGVXZWlnaHQgPSBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYgKHdlaWdodCA9PSBGWEZPTlRfRldfTk9STUFMKSB7DQotICAgICAgICAgICAgYk5lZWRVcGRhdGVXZWlnaHQgPSBGQUxTRTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgYk5lZWRVcGRhdGVXZWlnaHQgPSBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChiTmVlZFVwZGF0ZVdlaWdodCkgew0KLSAgICAgICAgcFN1YnN0Rm9udC0+bV9XZWlnaHQgPSB3ZWlnaHQ7DQotICAgIH0NCi0gICAgaWYgKGJJdGFsaWMgJiYgIUZYRlRfSXNfRmFjZV9JdGFsaWMoZmFjZSkpIHsNCi0gICAgICAgIGlmIChpdGFsaWNfYW5nbGUgPT0gMCkgew0KLSAgICAgICAgICAgIGl0YWxpY19hbmdsZSA9IC0xMjsNCi0gICAgICAgIH0gZWxzZSBpZiAoRlhTWVNfYWJzKGl0YWxpY19hbmdsZSkgPCA1KSB7DQotICAgICAgICAgICAgaXRhbGljX2FuZ2xlID0gMDsNCi0gICAgICAgIH0NCi0gICAgICAgIHBTdWJzdEZvbnQtPm1fSXRhbGljQW5nbGUgPSBpdGFsaWNfYW5nbGU7DQotICAgIH0NCi0gICAgbV9wRm9udEluZm8tPkRlbGV0ZUZvbnQoaEZvbnQpOw0KLSAgICByZXR1cm4gZmFjZTsNCi19DQotZXh0ZXJuICJDIiB7DQotICAgIHVuc2lnbmVkIGxvbmcgX0ZUU3RyZWFtUmVhZChGWEZUX1N0cmVhbSBzdHJlYW0sIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsNCi0gICAgdm9pZCBfRlRTdHJlYW1DbG9zZShGWEZUX1N0cmVhbSBzdHJlYW0pOw0KLX07DQotQ0ZvbnRGaWxlRmFjZUluZm86OkNGb250RmlsZUZhY2VJbmZvKCkNCi17DQotICAgIG1fcEZpbGUgPSBOVUxMOw0KLSAgICBtX0ZhY2UgPSBOVUxMOw0KLSAgICBtX0NoYXJzZXRzID0gMDsNCi0gICAgbV9GaWxlU2l6ZSA9IDA7DQotICAgIG1fRm9udE9mZnNldCA9IDA7DQotICAgIG1fV2VpZ2h0ID0gMDsNCi0gICAgbV9iSXRhbGljID0gRkFMU0U7DQotICAgIG1fUGl0Y2hGYW1pbHkgPSAwOw0KLX0NCi1DRm9udEZpbGVGYWNlSW5mbzo6fkNGb250RmlsZUZhY2VJbmZvKCkNCi17DQotICAgIGlmIChtX0ZhY2UpIHsNCi0gICAgICAgIEZYRlRfRG9uZV9GYWNlKG1fRmFjZSk7DQotICAgIH0NCi0gICAgbV9GYWNlID0gTlVMTDsNCi19DQotZXh0ZXJuIEZYX0JPT0wgX0xvYWRGaWxlKEZYRlRfTGlicmFyeSBsaWJyYXJ5LCBGWEZUX0ZhY2UqIEZhY2UsIElGWF9GaWxlUmVhZCogcEZpbGUsIEZYRlRfU3RyZWFtKiBzdHJlYW0pOw0KLSNpZiBkZWZpbmVkKF9GUERGQVBJX01JTklfKSB8fCBfRlhfT1NfID09IF9GWF9BTkRST0lEXw0KLUlGWF9TeXN0ZW1Gb250SW5mbyogSUZYX1N5c3RlbUZvbnRJbmZvOjpDcmVhdGVEZWZhdWx0KCkNCi17DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi0jZW5kaWYNCi0jaWYgIWRlZmluZWQoX0ZQREZBUElfTUlOSV8pDQotQ0ZYX0ZvbGRlckZvbnRJbmZvOjpDRlhfRm9sZGVyRm9udEluZm8oKQ0KLXsNCi19DQotQ0ZYX0ZvbGRlckZvbnRJbmZvOjp+Q0ZYX0ZvbGRlckZvbnRJbmZvKCkNCi17DQotICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fRm9udExpc3QuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyBrZXk7DQotICAgICAgICBGWF9MUFZPSUQgdmFsdWU7DQotICAgICAgICBtX0ZvbnRMaXN0LkdldE5leHRBc3NvYyhwb3MsIGtleSwgdmFsdWUpOw0KLSAgICAgICAgZGVsZXRlIChDRm9udEZhY2VJbmZvKil2YWx1ZTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9Gb2xkZXJGb250SW5mbzo6QWRkUGF0aChGWF9CU1RSIHBhdGgpDQotew0KLSAgICBtX1BhdGhMaXN0LkFkZChwYXRoKTsNCi19DQotdm9pZCBDRlhfRm9sZGVyRm9udEluZm86OlJlbGVhc2UoKQ0KLXsNCi0gICAgZGVsZXRlIHRoaXM7DQotfQ0KLUZYX0JPT0wgQ0ZYX0ZvbGRlckZvbnRJbmZvOjpFbnVtRm9udExpc3QoQ0ZYX0ZvbnRNYXBwZXIqIHBNYXBwZXIpDQotew0KLSAgICBtX3BNYXBwZXIgPSBwTWFwcGVyOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fUGF0aExpc3QuR2V0U2l6ZSgpOyBpICsrKSB7DQotICAgICAgICBTY2FuUGF0aChtX1BhdGhMaXN0W2ldKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotdm9pZCBDRlhfRm9sZGVyRm9udEluZm86OlNjYW5QYXRoKENGWF9CeXRlU3RyaW5nJiBwYXRoKQ0KLXsNCi0gICAgdm9pZCogaGFuZGxlID0gRlhfT3BlbkZvbGRlcihwYXRoKTsNCi0gICAgaWYgKGhhbmRsZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgZmlsZW5hbWU7DQotICAgIEZYX0JPT0wgYkZvbGRlcjsNCi0gICAgd2hpbGUgKEZYX0dldE5leHRGaWxlKGhhbmRsZSwgZmlsZW5hbWUsIGJGb2xkZXIpKSB7DQotICAgICAgICBpZiAoYkZvbGRlcikgew0KLSAgICAgICAgICAgIGlmIChmaWxlbmFtZSA9PSAiLiIgfHwgZmlsZW5hbWUgPT0gIi4uIikgew0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGV4dCA9IGZpbGVuYW1lLlJpZ2h0KDQpOw0KLSAgICAgICAgICAgIGV4dC5NYWtlVXBwZXIoKTsNCi0gICAgICAgICAgICBpZiAoZXh0ICE9ICIuVFRGIiAmJiBleHQgIT0gIi5PVEYiICYmIGV4dCAhPSAiLlRUQyIpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgZnVsbHBhdGggPSBwYXRoOw0KLSNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9XSU5ET1dTXw0KLSAgICAgICAgZnVsbHBhdGggKz0gIlxcIjsNCi0jZWxzZQ0KLSAgICAgICAgZnVsbHBhdGggKz0gIi8iOw0KLSNlbmRpZg0KLSAgICAgICAgZnVsbHBhdGggKz0gZmlsZW5hbWU7DQotICAgICAgICBpZiAoYkZvbGRlcikgew0KLSAgICAgICAgICAgIFNjYW5QYXRoKGZ1bGxwYXRoKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgU2NhbkZpbGUoZnVsbHBhdGgpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIEZYX0Nsb3NlRm9sZGVyKGhhbmRsZSk7DQotfQ0KLXZvaWQgQ0ZYX0ZvbGRlckZvbnRJbmZvOjpTY2FuRmlsZShDRlhfQnl0ZVN0cmluZyYgcGF0aCkNCi17DQotICAgIEZYU1lTX0ZJTEUqIHBGaWxlID0gRlhTWVNfZm9wZW4ocGF0aCwgInJiIik7DQotICAgIGlmIChwRmlsZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgRlhTWVNfZnNlZWsocEZpbGUsIDAsIEZYU1lTX1NFRUtfRU5EKTsNCi0gICAgRlhfRFdPUkQgZmlsZXNpemUgPSBGWFNZU19mdGVsbChwRmlsZSk7DQotICAgIEZYX0JZVEUgYnVmZmVyWzE2XTsNCi0gICAgRlhTWVNfZnNlZWsocEZpbGUsIDAsIEZYU1lTX1NFRUtfU0VUKTsNCi0gICAgc2l6ZV90IHJlYWRDbnQgPSBGWFNZU19mcmVhZChidWZmZXIsIDEyLCAxLCBwRmlsZSk7DQotICAgIGlmIChHRVRfVFRfTE9ORyhidWZmZXIpID09IDB4NzQ3NDYzNjYpIHsNCi0gICAgICAgIEZYX0RXT1JEIG5GYWNlcyA9IEdFVF9UVF9MT05HKGJ1ZmZlciArIDgpOw0KLSAgICAgICAgRlhfTFBCWVRFIG9mZnNldHMgPSBGWF9BbGxvYyhGWF9CWVRFLCBuRmFjZXMgKiA0KTsNCi0gICAgICAgIGlmICghb2Zmc2V0cykgew0KLSAgICAgICAgICAgIEZYU1lTX2ZjbG9zZShwRmlsZSk7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmVhZENudCA9IEZYU1lTX2ZyZWFkKG9mZnNldHMsIG5GYWNlcyAqIDQsIDEsIHBGaWxlKTsNCi0gICAgICAgIGZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBuRmFjZXM7IGkgKyspIHsNCi0gICAgICAgICAgICBGWF9MUEJZVEUgcCA9IG9mZnNldHMgKyBpICogNDsNCi0gICAgICAgICAgICBSZXBvcnRGYWNlKHBhdGgsIHBGaWxlLCBmaWxlc2l6ZSwgR0VUX1RUX0xPTkcocCkpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfRnJlZShvZmZzZXRzKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIFJlcG9ydEZhY2UocGF0aCwgcEZpbGUsIGZpbGVzaXplLCAwKTsNCi0gICAgfQ0KLSAgICBGWFNZU19mY2xvc2UocEZpbGUpOw0KLX0NCi12b2lkIENGWF9Gb2xkZXJGb250SW5mbzo6UmVwb3J0RmFjZShDRlhfQnl0ZVN0cmluZyYgcGF0aCwgRlhTWVNfRklMRSogcEZpbGUsIEZYX0RXT1JEIGZpbGVzaXplLCBGWF9EV09SRCBvZmZzZXQpDQotew0KLSAgICBGWFNZU19mc2VlayhwRmlsZSwgb2Zmc2V0LCBGWFNZU19TRUVLX1NFVCk7DQotICAgIGNoYXIgYnVmZmVyWzE2XTsNCi0gICAgaWYgKCFGWFNZU19mcmVhZChidWZmZXIsIDEyLCAxLCBwRmlsZSkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9EV09SRCBuVGFibGVzID0gR0VUX1RUX1NIT1JUKGJ1ZmZlciArIDQpOw0KLSAgICBDRlhfQnl0ZVN0cmluZyB0YWJsZXMgPSBfRlBERl9SZWFkU3RyaW5nRnJvbUZpbGUocEZpbGUsIG5UYWJsZXMgKiAxNik7DQotICAgIENGWF9CeXRlU3RyaW5nIG5hbWVzID0gX0ZQREZfTG9hZFRhYmxlRnJvbVRUKHBGaWxlLCB0YWJsZXMsIG5UYWJsZXMsIDB4NmU2MTZkNjUpOw0KLSAgICBDRlhfQnl0ZVN0cmluZyBmYWNlbmFtZSA9IF9GUERGX0dldE5hbWVGcm9tVFQobmFtZXMsIDEpOw0KLSAgICBDRlhfQnl0ZVN0cmluZyBzdHlsZSA9IF9GUERGX0dldE5hbWVGcm9tVFQobmFtZXMsIDIpOw0KLSAgICBpZiAoc3R5bGUgIT0gIlJlZ3VsYXIiKSB7DQotICAgICAgICBmYWNlbmFtZSArPSAiICIgKyBzdHlsZTsNCi0gICAgfQ0KLSAgICBGWF9MUFZPSUQgcDsNCi0gICAgaWYgKG1fRm9udExpc3QuTG9va3VwKGZhY2VuYW1lLCBwKSkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENGb250RmFjZUluZm8qIHBJbmZvID0gRlhfTkVXIENGb250RmFjZUluZm87DQotICAgIGlmICghcEluZm8pIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBwSW5mby0+bV9GaWxlUGF0aCA9IHBhdGg7DQotICAgIHBJbmZvLT5tX0ZhY2VOYW1lID0gZmFjZW5hbWU7DQotICAgIHBJbmZvLT5tX0ZvbnRUYWJsZXMgPSB0YWJsZXM7DQotICAgIHBJbmZvLT5tX0ZvbnRPZmZzZXQgPSBvZmZzZXQ7DQotICAgIHBJbmZvLT5tX0ZpbGVTaXplID0gZmlsZXNpemU7DQotICAgIHBJbmZvLT5tX0NoYXJzZXRzID0gMDsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgb3MyID0gX0ZQREZfTG9hZFRhYmxlRnJvbVRUKHBGaWxlLCB0YWJsZXMsIG5UYWJsZXMsIDB4NGY1MzJmMzIpOw0KLSAgICBpZiAob3MyLkdldExlbmd0aCgpID49IDg2KSB7DQotICAgICAgICBGWF9MUENCWVRFIHAgPSAoRlhfTFBDQllURSlvczIgKyA3ODsNCi0gICAgICAgIEZYX0RXT1JEIGNvZGVwYWdlcyA9IEdFVF9UVF9MT05HKHApOw0KLSAgICAgICAgaWYgKGNvZGVwYWdlcyAmICgxIDw8IDE3KSkgew0KLSAgICAgICAgICAgIG1fcE1hcHBlci0+QWRkSW5zdGFsbGVkRm9udChmYWNlbmFtZSwgRlhGT05UX1NISUZUSklTX0NIQVJTRVQpOw0KLSAgICAgICAgICAgIHBJbmZvLT5tX0NoYXJzZXRzIHw9IENIQVJTRVRfRkxBR19TSElGVEpJUzsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChjb2RlcGFnZXMgJiAoMSA8PCAxOCkpIHsNCi0gICAgICAgICAgICBtX3BNYXBwZXItPkFkZEluc3RhbGxlZEZvbnQoZmFjZW5hbWUsIEZYRk9OVF9HQjIzMTJfQ0hBUlNFVCk7DQotICAgICAgICAgICAgcEluZm8tPm1fQ2hhcnNldHMgfD0gQ0hBUlNFVF9GTEFHX0dCOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGNvZGVwYWdlcyAmICgxIDw8IDIwKSkgew0KLSAgICAgICAgICAgIG1fcE1hcHBlci0+QWRkSW5zdGFsbGVkRm9udChmYWNlbmFtZSwgRlhGT05UX0NISU5FU0VCSUc1X0NIQVJTRVQpOw0KLSAgICAgICAgICAgIHBJbmZvLT5tX0NoYXJzZXRzIHw9IENIQVJTRVRfRkxBR19CSUc1Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKChjb2RlcGFnZXMgJiAoMSA8PCAxOSkpIHx8IChjb2RlcGFnZXMgJiAoMSA8PCAyMSkpKSB7DQotICAgICAgICAgICAgbV9wTWFwcGVyLT5BZGRJbnN0YWxsZWRGb250KGZhY2VuYW1lLCBGWEZPTlRfSEFOR0VVTF9DSEFSU0VUKTsNCi0gICAgICAgICAgICBwSW5mby0+bV9DaGFyc2V0cyB8PSBDSEFSU0VUX0ZMQUdfS09SRUFOOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGNvZGVwYWdlcyAmICgxIDw8IDMxKSkgew0KLSAgICAgICAgICAgIG1fcE1hcHBlci0+QWRkSW5zdGFsbGVkRm9udChmYWNlbmFtZSwgRlhGT05UX1NZTUJPTF9DSEFSU0VUKTsNCi0gICAgICAgICAgICBwSW5mby0+bV9DaGFyc2V0cyB8PSBDSEFSU0VUX0ZMQUdfU1lNQk9MOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fcE1hcHBlci0+QWRkSW5zdGFsbGVkRm9udChmYWNlbmFtZSwgRlhGT05UX0FOU0lfQ0hBUlNFVCk7DQotICAgIHBJbmZvLT5tX0NoYXJzZXRzIHw9IENIQVJTRVRfRkxBR19BTlNJOw0KLSAgICBwSW5mby0+bV9TdHlsZXMgPSAwOw0KLSAgICBpZiAoc3R5bGUuRmluZChGWF9CU1RSQygiQm9sZCIpKSA+IC0xKSB7DQotICAgICAgICBwSW5mby0+bV9TdHlsZXMgfD0gRlhGT05UX0JPTEQ7DQotICAgIH0NCi0gICAgaWYgKHN0eWxlLkZpbmQoRlhfQlNUUkMoIkl0YWxpYyIpKSA+IC0xIHx8IHN0eWxlLkZpbmQoRlhfQlNUUkMoIk9ibGlxdWUiKSkgPiAtMSkgew0KLSAgICAgICAgcEluZm8tPm1fU3R5bGVzIHw9IEZYRk9OVF9JVEFMSUM7DQotICAgIH0NCi0gICAgaWYgKGZhY2VuYW1lLkZpbmQoRlhfQlNUUkMoIlNlcmlmIikpID4gLTEpIHsNCi0gICAgICAgIHBJbmZvLT5tX1N0eWxlcyB8PSBGWEZPTlRfU0VSSUY7DQotICAgIH0NCi0gICAgbV9Gb250TGlzdC5TZXRBdChmYWNlbmFtZSwgcEluZm8pOw0KLX0NCi12b2lkKiBDRlhfRm9sZGVyRm9udEluZm86Ok1hcEZvbnQoaW50IHdlaWdodCwgRlhfQk9PTCBiSXRhbGljLCBpbnQgY2hhcnNldCwgaW50IHBpdGNoX2ZhbWlseSwgRlhfTFBDU1RSIGZhbWlseSwgRlhfQk9PTCYgYkV4YWN0KQ0KLXsNCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLXZvaWQqIENGWF9Gb2xkZXJGb250SW5mbzo6R2V0Rm9udChGWF9MUENTVFIgZmFjZSkNCi17DQotICAgIEZYX0xQVk9JRCBwOw0KLSAgICBpZiAoIW1fRm9udExpc3QuTG9va3VwKGZhY2UsIHApKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICByZXR1cm4gcDsNCi19DQotRlhfRFdPUkQgQ0ZYX0ZvbGRlckZvbnRJbmZvOjpHZXRGb250RGF0YSh2b2lkKiBoRm9udCwgRlhfRFdPUkQgdGFibGUsIEZYX0xQQllURSBidWZmZXIsIEZYX0RXT1JEIHNpemUpDQotew0KLSAgICBpZiAoaEZvbnQgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgQ0ZvbnRGYWNlSW5mbyogcEZvbnQgPSAoQ0ZvbnRGYWNlSW5mbyopaEZvbnQ7DQotICAgIEZYU1lTX0ZJTEUqIHBGaWxlID0gTlVMTDsNCi0gICAgaWYgKHNpemUgPiAwKSB7DQotICAgICAgICBwRmlsZSA9IEZYU1lTX2ZvcGVuKHBGb250LT5tX0ZpbGVQYXRoLCAicmIiKTsNCi0gICAgICAgIGlmIChwRmlsZSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIDA7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhfRFdPUkQgZGF0YXNpemUgPSAwOw0KLSAgICBGWF9EV09SRCBvZmZzZXQ7DQotICAgIGlmICh0YWJsZSA9PSAwKQl7DQotICAgICAgICBkYXRhc2l6ZSA9IHBGb250LT5tX0ZvbnRPZmZzZXQgPyAwIDogcEZvbnQtPm1fRmlsZVNpemU7DQotICAgICAgICBvZmZzZXQgPSAwOw0KLSAgICB9IGVsc2UgaWYgKHRhYmxlID09IDB4NzQ3NDYzNjYpCXsNCi0gICAgICAgIGRhdGFzaXplID0gcEZvbnQtPm1fRm9udE9mZnNldCA/IHBGb250LT5tX0ZpbGVTaXplIDogMDsNCi0gICAgICAgIG9mZnNldCA9IDA7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBGWF9EV09SRCBuVGFibGVzID0gcEZvbnQtPm1fRm9udFRhYmxlcy5HZXRMZW5ndGgoKSAvIDE2Ow0KLSAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IG5UYWJsZXM7IGkgKyspIHsNCi0gICAgICAgICAgICBGWF9MUENCWVRFIHAgPSAoRlhfTFBDQllURSlwRm9udC0+bV9Gb250VGFibGVzICsgaSAqIDE2Ow0KLSAgICAgICAgICAgIGlmIChHRVRfVFRfTE9ORyhwKSA9PSB0YWJsZSkgew0KLSAgICAgICAgICAgICAgICBvZmZzZXQgPSBHRVRfVFRfTE9ORyhwICsgOCk7DQotICAgICAgICAgICAgICAgIGRhdGFzaXplID0gR0VUX1RUX0xPTkcocCArIDEyKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKGRhdGFzaXplICYmIHNpemUgPj0gZGF0YXNpemUgJiYgcEZpbGUpIHsNCi0gICAgICAgIEZYU1lTX2ZzZWVrKHBGaWxlLCBvZmZzZXQsIEZYU1lTX1NFRUtfU0VUKTsNCi0gICAgICAgIHNpemVfdCByZWFkQ250ID0gRlhTWVNfZnJlYWQoYnVmZmVyLCBkYXRhc2l6ZSwgMSwgcEZpbGUpOw0KLSAgICB9DQotICAgIGlmIChwRmlsZSkgew0KLSAgICAgICAgRlhTWVNfZmNsb3NlKHBGaWxlKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gZGF0YXNpemU7DQotfQ0KLXZvaWQgQ0ZYX0ZvbGRlckZvbnRJbmZvOjpEZWxldGVGb250KHZvaWQqIGhGb250KQ0KLXsNCi19DQotRlhfQk9PTCBDRlhfRm9sZGVyRm9udEluZm86OkdldEZhY2VOYW1lKHZvaWQqIGhGb250LCBDRlhfQnl0ZVN0cmluZyYgbmFtZSkNCi17DQotICAgIGlmIChoRm9udCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ0ZvbnRGYWNlSW5mbyogcEZvbnQgPSAoQ0ZvbnRGYWNlSW5mbyopaEZvbnQ7DQotICAgIG5hbWUgPSBwRm9udC0+bV9GYWNlTmFtZTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ0ZYX0ZvbGRlckZvbnRJbmZvOjpHZXRGb250Q2hhcnNldCh2b2lkKiBoRm9udCwgaW50JiBjaGFyc2V0KQ0KLXsNCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2ZyZWV0eXBlLmgiCisjaW5jbHVkZSAidGV4dF9pbnQuaCIKKyNkZWZpbmUgR0VUX1RUX1NIT1JUKHcpICAoRlhfV09SRCkoKCh3KVswXSA8PCA4KSB8ICh3KVsxXSkKKyNkZWZpbmUgR0VUX1RUX0xPTkcodykgKEZYX0RXT1JEKSgoKHcpWzBdIDw8IDI0KSB8ICgodylbMV0gPDwgMTYpIHwgKCh3KVsyXSA8PCA4KSB8ICh3KVszXSkKK0NGWF9TdWJzdEZvbnQ6OkNGWF9TdWJzdEZvbnQoKQoreworICAgIG1fRXh0SGFuZGxlID0gTlVMTDsKKyAgICBtX0NoYXJzZXQgPSAwOworICAgIG1fU3Vic3RGbGFncyA9IDA7CisgICAgbV9XZWlnaHQgPSAwOworICAgIG1fSXRhbGljQW5nbGUgPSAwOworICAgIG1fYlN1YnN0T2ZDSksgPSBGQUxTRTsKKyAgICBtX1dlaWdodENKSyA9IDA7CisgICAgbV9iSXRsaWNDSksgPSBGQUxTRTsKK30KK0NUVEZvbnREZXNjOjp+Q1RURm9udERlc2MoKQoreworICAgIGlmIChtX1R5cGUgPT0gMSkgeworICAgICAgICBpZiAobV9TaW5nbGVGYWNlLm1fcEZhY2UpIHsKKyAgICAgICAgICAgIEZYRlRfRG9uZV9GYWNlKG1fU2luZ2xlRmFjZS5tX3BGYWNlKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9UeXBlID09IDIpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSArKykKKyAgICAgICAgICAgIGlmIChtX1RUQ0ZhY2UubV9wRmFjZXNbaV0pIHsKKyAgICAgICAgICAgICAgICBGWEZUX0RvbmVfRmFjZShtX1RUQ0ZhY2UubV9wRmFjZXNbaV0pOworICAgICAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9wRm9udERhdGEpIHsKKyAgICAgICAgRlhfRnJlZShtX3BGb250RGF0YSk7CisgICAgfQorfQorRlhfQk9PTCBDVFRGb250RGVzYzo6UmVsZWFzZUZhY2UoRlhGVF9GYWNlIGZhY2UpCit7CisgICAgaWYgKG1fVHlwZSA9PSAxKSB7CisgICAgICAgIGlmIChtX1NpbmdsZUZhY2UubV9wRmFjZSAhPSBmYWNlKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fVHlwZSA9PSAyKSB7CisgICAgICAgIGludCBpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkgKyspCisgICAgICAgICAgICBpZiAobV9UVENGYWNlLm1fcEZhY2VzW2ldID09IGZhY2UpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKGkgPT0gMTYpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX1JlZkNvdW50IC0tOworICAgIGlmIChtX1JlZkNvdW50KSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgZGVsZXRlIHRoaXM7CisgICAgcmV0dXJuIFRSVUU7Cit9CitDRlhfRm9udE1ncjo6Q0ZYX0ZvbnRNZ3IoKQoreworICAgIG1fcEJ1aWx0aW5NYXBwZXIgPSBGWF9ORVcgQ0ZYX0ZvbnRNYXBwZXI7CisgICAgaWYgKCFtX3BCdWlsdGluTWFwcGVyKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wQnVpbHRpbk1hcHBlci0+bV9wRm9udE1nciA9IHRoaXM7CisgICAgbV9wRXh0TWFwcGVyID0gTlVMTDsKKyAgICBtX0ZUTGlicmFyeSA9IE5VTEw7CisgICAgRlhTWVNfbWVtc2V0MzIobV9FeHRlcm5hbEZvbnRzLCAwLCBzaXplb2YgbV9FeHRlcm5hbEZvbnRzKTsKK30KK0NGWF9Gb250TWdyOjp+Q0ZYX0ZvbnRNZ3IoKQoreworICAgIGlmIChtX3BCdWlsdGluTWFwcGVyKSB7CisgICAgICAgIGRlbGV0ZSBtX3BCdWlsdGluTWFwcGVyOworICAgIH0KKyAgICBGcmVlQ2FjaGUoKTsKKyAgICBpZiAobV9GVExpYnJhcnkpIHsKKyAgICAgICAgRlhGVF9Eb25lX0ZyZWVUeXBlKG1fRlRMaWJyYXJ5KTsKKyAgICB9Cit9Cit2b2lkIENGWF9Gb250TWdyOjpJbml0RlRMaWJyYXJ5KCkKK3sKKyAgICBpZiAobV9GVExpYnJhcnkgPT0gTlVMTCkgeworICAgICAgICBGWEZUX0luaXRfRnJlZVR5cGUoJm1fRlRMaWJyYXJ5KTsKKyAgICB9Cit9Cit2b2lkIENGWF9Gb250TWdyOjpGcmVlQ2FjaGUoKQoreworICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fRmFjZU1hcC5HZXRTdGFydFBvc2l0aW9uKCk7CisgICAgd2hpbGUocG9zKSB7CisgICAgICAgIENGWF9CeXRlU3RyaW5nIEtleTsKKyAgICAgICAgQ1RURm9udERlc2MqIGZhY2U7CisgICAgICAgIG1fRmFjZU1hcC5HZXROZXh0QXNzb2MocG9zLCBLZXksICh2b2lkKiYpZmFjZSk7CisgICAgICAgIGRlbGV0ZSBmYWNlOworICAgIH0KKyAgICBtX0ZhY2VNYXAuUmVtb3ZlQWxsKCk7Cit9Cit2b2lkIENGWF9Gb250TWdyOjpTZXRTeXN0ZW1Gb250SW5mbyhJRlhfU3lzdGVtRm9udEluZm8qIHBGb250SW5mbykKK3sKKyAgICBtX3BCdWlsdGluTWFwcGVyLT5TZXRTeXN0ZW1Gb250SW5mbyhwRm9udEluZm8pOworfQorRlhGVF9GYWNlIENGWF9Gb250TWdyOjpGaW5kU3Vic3RGb250KGNvbnN0IENGWF9CeXRlU3RyaW5nJiBmYWNlX25hbWUsIEZYX0JPT0wgYlRydWVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGZsYWdzLCBpbnQgd2VpZ2h0LCBpbnQgaXRhbGljX2FuZ2xlLCBpbnQgQ2hhcnNldENQLCBDRlhfU3Vic3RGb250KiBwU3Vic3RGb250KQoreworICAgIGlmIChtX0ZUTGlicmFyeSA9PSBOVUxMKSB7CisgICAgICAgIEZYRlRfSW5pdF9GcmVlVHlwZSgmbV9GVExpYnJhcnkpOworICAgIH0KKyAgICBpZiAobV9wRXh0TWFwcGVyKSB7CisgICAgICAgIEZYRlRfRmFjZSBmYWNlID0gbV9wRXh0TWFwcGVyLT5GaW5kU3Vic3RGb250KGZhY2VfbmFtZSwgYlRydWVUeXBlLCBmbGFncywgd2VpZ2h0LCBpdGFsaWNfYW5nbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENQLCBwU3Vic3RGb250KTsKKyAgICAgICAgaWYgKGZhY2UpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtX3BCdWlsdGluTWFwcGVyLT5GaW5kU3Vic3RGb250KGZhY2VfbmFtZSwgYlRydWVUeXBlLCBmbGFncywgd2VpZ2h0LCBpdGFsaWNfYW5nbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcnNldENQLCBwU3Vic3RGb250KTsKK30KK0ZYRlRfRmFjZSBDRlhfRm9udE1ncjo6R2V0Q2FjaGVkRmFjZShjb25zdCBDRlhfQnl0ZVN0cmluZyYgZmFjZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3ZWlnaHQsIEZYX0JPT0wgYkl0YWxpYywgRlhfTFBCWVRFJiBwRm9udERhdGEpCit7CisgICAgQ0ZYX0J5dGVTdHJpbmcga2V5KGZhY2VfbmFtZSk7CisgICAga2V5ICs9ICcsJzsKKyAgICBrZXkgKz0gQ0ZYX0J5dGVTdHJpbmc6OkZvcm1hdEludGVnZXIod2VpZ2h0KTsKKyAgICBrZXkgKz0gYkl0YWxpYyA/ICdJJyA6ICdOJzsKKyAgICBDVFRGb250RGVzYyogcEZvbnREZXNjID0gTlVMTDsKKyAgICBtX0ZhY2VNYXAuTG9va3VwKGtleSwgKHZvaWQqJilwRm9udERlc2MpOworICAgIGlmKHBGb250RGVzYykgeworICAgICAgICBwRm9udERhdGEgPSBwRm9udERlc2MtPm1fcEZvbnREYXRhOworICAgICAgICBwRm9udERlc2MtPm1fUmVmQ291bnQgKys7CisgICAgICAgIHJldHVybiBwRm9udERlc2MtPm1fU2luZ2xlRmFjZS5tX3BGYWNlOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK0ZYRlRfRmFjZSBDRlhfRm9udE1ncjo6QWRkQ2FjaGVkRmFjZShjb25zdCBDRlhfQnl0ZVN0cmluZyYgZmFjZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3ZWlnaHQsIEZYX0JPT0wgYkl0YWxpYywgRlhfTFBCWVRFIHBEYXRhLCBGWF9EV09SRCBzaXplLCBpbnQgZmFjZV9pbmRleCkKK3sKKyAgICBDVFRGb250RGVzYyogcEZvbnREZXNjID0gRlhfTkVXIENUVEZvbnREZXNjOworICAgIGlmICghcEZvbnREZXNjKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwRm9udERlc2MtPm1fVHlwZSA9IDE7CisgICAgcEZvbnREZXNjLT5tX1NpbmdsZUZhY2UubV9wRmFjZSA9IE5VTEw7CisgICAgcEZvbnREZXNjLT5tX1NpbmdsZUZhY2UubV9iQm9sZCA9IHdlaWdodDsKKyAgICBwRm9udERlc2MtPm1fU2luZ2xlRmFjZS5tX2JJdGFsaWMgPSBiSXRhbGljOworICAgIHBGb250RGVzYy0+bV9wRm9udERhdGEgPSBwRGF0YTsKKyAgICBwRm9udERlc2MtPm1fUmVmQ291bnQgPSAxOworICAgIEZYRlRfTGlicmFyeSBsaWJyYXJ5OworICAgIGlmIChtX0ZUTGlicmFyeSA9PSBOVUxMKSB7CisgICAgICAgIEZYRlRfSW5pdF9GcmVlVHlwZSgmbV9GVExpYnJhcnkpOworICAgIH0KKyAgICBsaWJyYXJ5ID0gbV9GVExpYnJhcnk7CisgICAgaW50IHJldCA9IEZYRlRfTmV3X01lbW9yeV9GYWNlKGxpYnJhcnksIHBEYXRhLCBzaXplLCBmYWNlX2luZGV4LCAmcEZvbnREZXNjLT5tX1NpbmdsZUZhY2UubV9wRmFjZSk7CisgICAgaWYgKHJldCkgeworICAgICAgICBkZWxldGUgcEZvbnREZXNjOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0ID0gRlhGVF9TZXRfUGl4ZWxfU2l6ZXMocEZvbnREZXNjLT5tX1NpbmdsZUZhY2UubV9wRmFjZSwgNjQsIDY0KTsKKyAgICBpZiAocmV0KSB7CisgICAgICAgIGRlbGV0ZSBwRm9udERlc2M7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDRlhfQnl0ZVN0cmluZyBrZXkoZmFjZV9uYW1lKTsKKyAgICBrZXkgKz0gJywnOworICAgIGtleSArPSBDRlhfQnl0ZVN0cmluZzo6Rm9ybWF0SW50ZWdlcih3ZWlnaHQpOworICAgIGtleSArPSBiSXRhbGljID8gJ0knIDogJ04nOworICAgIG1fRmFjZU1hcC5TZXRBdChrZXksIHBGb250RGVzYyk7CisgICAgcmV0dXJuIHBGb250RGVzYy0+bV9TaW5nbGVGYWNlLm1fcEZhY2U7Cit9Citjb25zdCBGWF9MUENTVFIgZ19CYXNlMTRGb250TmFtZXNbMTRdID0geworICAgICJDb3VyaWVyIiwKKyAgICAiQ291cmllci1Cb2xkIiwKKyAgICAiQ291cmllci1Cb2xkT2JsaXF1ZSIsCisgICAgIkNvdXJpZXItT2JsaXF1ZSIsCisgICAgIkhlbHZldGljYSIsCisgICAgIkhlbHZldGljYS1Cb2xkIiwKKyAgICAiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIiwKKyAgICAiSGVsdmV0aWNhLU9ibGlxdWUiLAorICAgICJUaW1lcy1Sb21hbiIsCisgICAgIlRpbWVzLUJvbGQiLAorICAgICJUaW1lcy1Cb2xkSXRhbGljIiwKKyAgICAiVGltZXMtSXRhbGljIiwKKyAgICAiU3ltYm9sIiwKKyAgICAiWmFwZkRpbmdiYXRzIiwKK307Citjb25zdCBzdHJ1Y3QgX0FsdEZvbnROYW1lIHsKKyAgICBjb25zdCBGWF9DSEFSKgltX3BOYW1lOworICAgIGludAkJbV9JbmRleDsKK30KK2dfQWx0Rm9udE5hbWVzW10gPSB7CisgICAgeyJBcmlhbCIsIDR9LAorICAgIHsiQXJpYWwsQm9sZCIsIDV9LAorICAgIHsiQXJpYWwsQm9sZEl0YWxpYyIsIDZ9LAorICAgIHsiQXJpYWwsSXRhbGljIiwgN30sCisgICAgeyJBcmlhbC1Cb2xkIiwgNX0sCisgICAgeyJBcmlhbC1Cb2xkSXRhbGljIiwgNn0sCisgICAgeyJBcmlhbC1Cb2xkSXRhbGljTVQiLCA2fSwKKyAgICB7IkFyaWFsLUJvbGRNVCIsIDV9LAorICAgIHsiQXJpYWwtSXRhbGljIiwgN30sCisgICAgeyJBcmlhbC1JdGFsaWNNVCIsIDd9LAorICAgIHsiQXJpYWxCb2xkIiwgNX0sCisgICAgeyJBcmlhbEJvbGRJdGFsaWMiLCA2fSwKKyAgICB7IkFyaWFsSXRhbGljIiwgN30sCisgICAgeyJBcmlhbE1UIiwgNH0sCisgICAgeyJBcmlhbE1ULEJvbGQiLCA1fSwKKyAgICB7IkFyaWFsTVQsQm9sZEl0YWxpYyIsIDZ9LAorICAgIHsiQXJpYWxNVCxJdGFsaWMiLCA3fSwKKyAgICB7IkFyaWFsUm91bmRlZE1UQm9sZCIsIDV9LAorICAgIHsiQ291cmllciIsIDB9LAorICAgIHsiQ291cmllcixCb2xkIiwgMX0sCisgICAgeyJDb3VyaWVyLEJvbGRJdGFsaWMiLCAyfSwKKyAgICB7IkNvdXJpZXIsSXRhbGljIiwgM30sCisgICAgeyJDb3VyaWVyLUJvbGQiLCAxfSwKKyAgICB7IkNvdXJpZXItQm9sZE9ibGlxdWUiLCAyfSwKKyAgICB7IkNvdXJpZXItT2JsaXF1ZSIsIDN9LAorICAgIHsiQ291cmllckJvbGQiLCAxfSwKKyAgICB7IkNvdXJpZXJCb2xkSXRhbGljIiwgMn0sCisgICAgeyJDb3VyaWVySXRhbGljIiwgM30sCisgICAgeyJDb3VyaWVyTmV3IiwgMH0sCisgICAgeyJDb3VyaWVyTmV3LEJvbGQiLCAxfSwKKyAgICB7IkNvdXJpZXJOZXcsQm9sZEl0YWxpYyIsIDJ9LAorICAgIHsiQ291cmllck5ldyxJdGFsaWMiLCAzfSwKKyAgICB7IkNvdXJpZXJOZXctQm9sZCIsIDF9LAorICAgIHsiQ291cmllck5ldy1Cb2xkSXRhbGljIiwgMn0sCisgICAgeyJDb3VyaWVyTmV3LUl0YWxpYyIsIDN9LAorICAgIHsiQ291cmllck5ld0JvbGQiLCAxfSwKKyAgICB7IkNvdXJpZXJOZXdCb2xkSXRhbGljIiwgMn0sCisgICAgeyJDb3VyaWVyTmV3SXRhbGljIiwgM30sCisgICAgeyJDb3VyaWVyTmV3UFMtQm9sZEl0YWxpY01UIiwgMn0sCisgICAgeyJDb3VyaWVyTmV3UFMtQm9sZE1UIiwgMX0sCisgICAgeyJDb3VyaWVyTmV3UFMtSXRhbGljTVQiLCAzfSwKKyAgICB7IkNvdXJpZXJOZXdQU01UIiwgMH0sCisgICAgeyJDb3VyaWVyU3RkIiwgMH0sCisgICAgeyJDb3VyaWVyU3RkLUJvbGQiLCAxfSwKKyAgICB7IkNvdXJpZXJTdGQtQm9sZE9ibGlxdWUiLCAyfSwKKyAgICB7IkNvdXJpZXJTdGQtT2JsaXF1ZSIsIDN9LAorICAgIHsiSGVsdmV0aWNhIiwgNH0sCisgICAgeyJIZWx2ZXRpY2EsQm9sZCIsIDV9LAorICAgIHsiSGVsdmV0aWNhLEJvbGRJdGFsaWMiLCA2fSwKKyAgICB7IkhlbHZldGljYSxJdGFsaWMiLCA3fSwKKyAgICB7IkhlbHZldGljYS1Cb2xkIiwgNX0sCisgICAgeyJIZWx2ZXRpY2EtQm9sZEl0YWxpYyIsIDZ9LAorICAgIHsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIiwgNn0sCisgICAgeyJIZWx2ZXRpY2EtSXRhbGljIiwgN30sCisgICAgeyJIZWx2ZXRpY2EtT2JsaXF1ZSIsIDd9LAorICAgIHsiSGVsdmV0aWNhQm9sZCIsIDV9LAorICAgIHsiSGVsdmV0aWNhQm9sZEl0YWxpYyIsIDZ9LAorICAgIHsiSGVsdmV0aWNhSXRhbGljIiwgN30sCisgICAgeyJTeW1ib2wiLCAxMn0sCisgICAgeyJTeW1ib2xNVCIsIDEyfSwKKyAgICB7IlRpbWVzLUJvbGQiLCA5fSwKKyAgICB7IlRpbWVzLUJvbGRJdGFsaWMiLCAxMH0sCisgICAgeyJUaW1lcy1JdGFsaWMiLCAxMX0sCisgICAgeyJUaW1lcy1Sb21hbiIsIDh9LAorICAgIHsiVGltZXNCb2xkIiwgOX0sCisgICAgeyJUaW1lc0JvbGRJdGFsaWMiLCAxMH0sCisgICAgeyJUaW1lc0l0YWxpYyIsIDExfSwKKyAgICB7IlRpbWVzTmV3Um9tYW4iLCA4fSwKKyAgICB7IlRpbWVzTmV3Um9tYW4sQm9sZCIsIDl9LAorICAgIHsiVGltZXNOZXdSb21hbixCb2xkSXRhbGljIiwgMTB9LAorICAgIHsiVGltZXNOZXdSb21hbixJdGFsaWMiLCAxMX0sCisgICAgeyJUaW1lc05ld1JvbWFuLUJvbGQiLCA5fSwKKyAgICB7IlRpbWVzTmV3Um9tYW4tQm9sZEl0YWxpYyIsIDEwfSwKKyAgICB7IlRpbWVzTmV3Um9tYW4tSXRhbGljIiwgMTF9LAorICAgIHsiVGltZXNOZXdSb21hbkJvbGQiLCA5fSwKKyAgICB7IlRpbWVzTmV3Um9tYW5Cb2xkSXRhbGljIiwgMTB9LAorICAgIHsiVGltZXNOZXdSb21hbkl0YWxpYyIsIDExfSwKKyAgICB7IlRpbWVzTmV3Um9tYW5QUyIsIDh9LAorICAgIHsiVGltZXNOZXdSb21hblBTLUJvbGQiLCA5fSwKKyAgICB7IlRpbWVzTmV3Um9tYW5QUy1Cb2xkSXRhbGljIiwgMTB9LAorICAgIHsiVGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWNNVCIsIDEwfSwKKyAgICB7IlRpbWVzTmV3Um9tYW5QUy1Cb2xkTVQiLCA5fSwKKyAgICB7IlRpbWVzTmV3Um9tYW5QUy1JdGFsaWMiLCAxMX0sCisgICAgeyJUaW1lc05ld1JvbWFuUFMtSXRhbGljTVQiLCAxMX0sCisgICAgeyJUaW1lc05ld1JvbWFuUFNNVCIsIDh9LAorICAgIHsiVGltZXNOZXdSb21hblBTTVQsQm9sZCIsIDl9LAorICAgIHsiVGltZXNOZXdSb21hblBTTVQsQm9sZEl0YWxpYyIsIDEwfSwKKyAgICB7IlRpbWVzTmV3Um9tYW5QU01ULEl0YWxpYyIsIDExfSwKKyAgICB7IlphcGZEaW5nYmF0cyIsIDEzfSwKK307CitleHRlcm4gIkMiIHsKKyAgICBzdGF0aWMgaW50IGNvbXBhcmVTdHJpbmcoY29uc3Qgdm9pZCoga2V5LCBjb25zdCB2b2lkKiBlbGVtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZYU1lTX3N0cmljbXAoKEZYX0xQQ1NUUilrZXksICgoX0FsdEZvbnROYW1lKillbGVtZW50KS0+bV9wTmFtZSk7CisgICAgfQorfQoraW50IF9QREZfR2V0U3RhbmRhcmRGb250TmFtZShDRlhfQnl0ZVN0cmluZyYgbmFtZSkKK3sKKyAgICBfQWx0Rm9udE5hbWUqIGZvdW5kID0gKF9BbHRGb250TmFtZSopRlhTWVNfYnNlYXJjaCgoRlhfTFBDU1RSKW5hbWUsIGdfQWx0Rm9udE5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgZ19BbHRGb250TmFtZXMgLyBzaXplb2YgKF9BbHRGb250TmFtZSksIHNpemVvZiAoX0FsdEZvbnROYW1lKSwgY29tcGFyZVN0cmluZyk7CisgICAgaWYgKGZvdW5kID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBuYW1lID0gZ19CYXNlMTRGb250TmFtZXNbZm91bmQtPm1fSW5kZXhdOworICAgIHJldHVybiBmb3VuZC0+bV9JbmRleDsKK30KK2ludCBHZXRUVENJbmRleChGWF9MUENCWVRFIHBGb250RGF0YSwgRlhfRFdPUkQgdHRjX3NpemUsIEZYX0RXT1JEIGZvbnRfb2Zmc2V0KQoreworICAgIGludCBmYWNlX2luZGV4ID0gMDsKKyAgICBGWF9MUENCWVRFIHAgPSBwRm9udERhdGEgKyA4OworICAgIEZYX0RXT1JEIG5mb250ID0gR0VUX1RUX0xPTkcocCk7CisgICAgRlhfRFdPUkQgaW5kZXg7CisgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbmZvbnQ7IGluZGV4ICsrKSB7CisgICAgICAgIHAgPSBwRm9udERhdGEgKyAxMiArIGluZGV4ICogNDsKKyAgICAgICAgaWYgKEdFVF9UVF9MT05HKHApID09IGZvbnRfb2Zmc2V0KSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZihpbmRleCA+PSBuZm9udCkgeworICAgICAgICBmYWNlX2luZGV4ID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBmYWNlX2luZGV4ID0gaW5kZXg7CisgICAgfQorICAgIHJldHVybiBmYWNlX2luZGV4OworfQorRlhGVF9GYWNlIENGWF9Gb250TWdyOjpHZXRDYWNoZWRUVENGYWNlKGludCB0dGNfc2l6ZSwgRlhfRFdPUkQgY2hlY2tzdW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZvbnRfb2Zmc2V0LCBGWF9MUEJZVEUmIHBGb250RGF0YSkKK3sKKyAgICBDRlhfQnl0ZVN0cmluZyBrZXk7CisgICAga2V5LkZvcm1hdCgiJWQ6JWQiLCB0dGNfc2l6ZSwgY2hlY2tzdW0pOworICAgIENUVEZvbnREZXNjKiBwRm9udERlc2MgPSBOVUxMOworICAgIG1fRmFjZU1hcC5Mb29rdXAoa2V5LCAodm9pZComKXBGb250RGVzYyk7CisgICAgaWYgKHBGb250RGVzYyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwRm9udERhdGEgPSBwRm9udERlc2MtPm1fcEZvbnREYXRhOworICAgIHBGb250RGVzYy0+bV9SZWZDb3VudCArKzsKKyAgICBpbnQgZmFjZV9pbmRleCA9IEdldFRUQ0luZGV4KHBGb250RGVzYy0+bV9wRm9udERhdGEsIHR0Y19zaXplLCBmb250X29mZnNldCk7CisgICAgaWYgKHBGb250RGVzYy0+bV9UVENGYWNlLm1fcEZhY2VzW2ZhY2VfaW5kZXhdID09IE5VTEwpIHsKKyAgICAgICAgcEZvbnREZXNjLT5tX1RUQ0ZhY2UubV9wRmFjZXNbZmFjZV9pbmRleF0gPSBHZXRGaXhlZEZhY2UocEZvbnREZXNjLT5tX3BGb250RGF0YSwgdHRjX3NpemUsIGZhY2VfaW5kZXgpOworICAgIH0KKyAgICByZXR1cm4gcEZvbnREZXNjLT5tX1RUQ0ZhY2UubV9wRmFjZXNbZmFjZV9pbmRleF07Cit9CitGWEZUX0ZhY2UgQ0ZYX0ZvbnRNZ3I6OkFkZENhY2hlZFRUQ0ZhY2UoaW50IHR0Y19zaXplLCBGWF9EV09SRCBjaGVja3N1bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUsIGludCBmb250X29mZnNldCkKK3sKKyAgICBDRlhfQnl0ZVN0cmluZyBrZXk7CisgICAga2V5LkZvcm1hdCgiJWQ6JWQiLCB0dGNfc2l6ZSwgY2hlY2tzdW0pOworICAgIENUVEZvbnREZXNjKiBwRm9udERlc2MgPSBGWF9ORVcgQ1RURm9udERlc2M7CisgICAgaWYgKCFwRm9udERlc2MpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBGb250RGVzYy0+bV9UeXBlID0gMjsKKyAgICBwRm9udERlc2MtPm1fcEZvbnREYXRhID0gcERhdGE7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSArKykgeworICAgICAgICBwRm9udERlc2MtPm1fVFRDRmFjZS5tX3BGYWNlc1tpXSA9IE5VTEw7CisgICAgfQorICAgIHBGb250RGVzYy0+bV9SZWZDb3VudCArKzsKKyAgICBrZXkuRm9ybWF0KCIlZDolZCIsIHR0Y19zaXplLCBjaGVja3N1bSk7CisgICAgbV9GYWNlTWFwLlNldEF0KGtleSwgcEZvbnREZXNjKTsKKyAgICBpbnQgZmFjZV9pbmRleCA9IEdldFRUQ0luZGV4KHBGb250RGVzYy0+bV9wRm9udERhdGEsIHR0Y19zaXplLCBmb250X29mZnNldCk7CisgICAgcEZvbnREZXNjLT5tX1RUQ0ZhY2UubV9wRmFjZXNbZmFjZV9pbmRleF0gPSBHZXRGaXhlZEZhY2UocEZvbnREZXNjLT5tX3BGb250RGF0YSwgdHRjX3NpemUsIGZhY2VfaW5kZXgpOworICAgIHJldHVybiBwRm9udERlc2MtPm1fVFRDRmFjZS5tX3BGYWNlc1tmYWNlX2luZGV4XTsKK30KK0ZYRlRfRmFjZSBDRlhfRm9udE1ncjo6R2V0Rml4ZWRGYWNlKEZYX0xQQ0JZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUsIGludCBmYWNlX2luZGV4KQoreworICAgIEZYRlRfTGlicmFyeSBsaWJyYXJ5OworICAgIGlmIChtX0ZUTGlicmFyeSA9PSBOVUxMKSB7CisgICAgICAgIEZYRlRfSW5pdF9GcmVlVHlwZSgmbV9GVExpYnJhcnkpOworICAgIH0KKyAgICBsaWJyYXJ5ID0gbV9GVExpYnJhcnk7CisgICAgRlhGVF9GYWNlIGZhY2UgPSBOVUxMOworICAgIGludCByZXQgPSBGWEZUX05ld19NZW1vcnlfRmFjZShsaWJyYXJ5LCBwRGF0YSwgc2l6ZSwgZmFjZV9pbmRleCwgJmZhY2UpOworICAgIGlmIChyZXQpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldCA9IEZYRlRfU2V0X1BpeGVsX1NpemVzKGZhY2UsIDY0LCA2NCk7CisgICAgaWYgKHJldCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIGZhY2U7Cit9CitGWEZUX0ZhY2UgQ0ZYX0ZvbnRNZ3I6OkdldEZpbGVGYWNlKEZYX0xQQ1NUUiBmaWxlbmFtZSwgaW50IGZhY2VfaW5kZXgpCit7CisgICAgRlhGVF9MaWJyYXJ5IGxpYnJhcnk7CisgICAgaWYgKG1fRlRMaWJyYXJ5ID09IE5VTEwpIHsKKyAgICAgICAgRlhGVF9Jbml0X0ZyZWVUeXBlKCZtX0ZUTGlicmFyeSk7CisgICAgfQorICAgIGxpYnJhcnkgPSBtX0ZUTGlicmFyeTsKKyAgICBGWEZUX0ZhY2UgZmFjZSA9IE5VTEw7CisgICAgaW50IHJldCA9IEZYRlRfTmV3X0ZhY2UobGlicmFyeSwgZmlsZW5hbWUsIGZhY2VfaW5kZXgsICZmYWNlKTsKKyAgICBpZiAocmV0KSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXQgPSBGWEZUX1NldF9QaXhlbF9TaXplcyhmYWNlLCA2NCwgNjQpOworICAgIGlmIChyZXQpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBmYWNlOworfQordm9pZCBDRlhfRm9udE1ncjo6UmVsZWFzZUZhY2UoRlhGVF9GYWNlIGZhY2UpCit7CisgICAgaWYgKGZhY2UgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fRmFjZU1hcC5HZXRTdGFydFBvc2l0aW9uKCk7CisgICAgd2hpbGUocG9zKSB7CisgICAgICAgIENGWF9CeXRlU3RyaW5nIEtleTsKKyAgICAgICAgQ1RURm9udERlc2MqIHR0ZmFjZTsKKyAgICAgICAgbV9GYWNlTWFwLkdldE5leHRBc3NvYyhwb3MsIEtleSwgKHZvaWQqJil0dGZhY2UpOworICAgICAgICBpZiAodHRmYWNlLT5SZWxlYXNlRmFjZShmYWNlKSkgeworICAgICAgICAgICAgbV9GYWNlTWFwLlJlbW92ZUtleShLZXkpOworICAgICAgICB9CisgICAgfQorfQorZXh0ZXJuICJDIiB7CisgICAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ19Gb3hpdEZpeGVkSXRhbGljRm9udERhdGEgWzE4NzQ2XTsKKyAgICBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBnX0ZveGl0Rml4ZWRGb250RGF0YSBbMTc1OTddOworICAgIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGdfRm94aXRTYW5zSXRhbGljRm9udERhdGEgWzE2MzM5XTsKKyAgICBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBnX0ZveGl0U2Fuc0ZvbnREYXRhIFsxNTAyNV07CisgICAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ19Gb3hpdFNlcmlmSXRhbGljRm9udERhdGEgWzIxMjI3XTsKKyAgICBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBnX0ZveGl0U2VyaWZGb250RGF0YSBbMTk0NjldOworICAgIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGdfRm94aXRGaXhlZEJvbGRJdGFsaWNGb250RGF0YSBbMTkxNTFdOworICAgIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGdfRm94aXRGaXhlZEJvbGRGb250RGF0YSBbMTgwNTVdOworICAgIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGdfRm94aXRTYW5zQm9sZEl0YWxpY0ZvbnREYXRhIFsxNjQxOF07CisgICAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ19Gb3hpdFNhbnNCb2xkRm9udERhdGEgWzE2MzQ0XTsKKyAgICBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBnX0ZveGl0U2VyaWZCb2xkSXRhbGljRm9udERhdGEgWzIwNzMzXTsKKyAgICBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBnX0ZveGl0U2VyaWZCb2xkRm9udERhdGEgWzE5Mzk1XTsKKyAgICBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBnX0ZveGl0U3ltYm9sRm9udERhdGFbMTY3MjldOworICAgIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGdfRm94aXREaW5nYmF0c0ZvbnREYXRhWzI5NTEzXTsKKyAgICBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBnX0ZveGl0U2VyaWZNTUZvbnREYXRhWzExMzQxN107CisgICAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ19Gb3hpdFNhbnNNTUZvbnREYXRhWzY2OTE5XTsKK307Citjb25zdCBGb3hpdEZvbnRzIGdfRm94aXRGb250c1sxNF0gPSB7CisgICAge2dfRm94aXRGaXhlZEZvbnREYXRhLCAxNzU5N30sCisgICAge2dfRm94aXRGaXhlZEJvbGRGb250RGF0YSwgMTgwNTV9LAorICAgIHtnX0ZveGl0Rml4ZWRCb2xkSXRhbGljRm9udERhdGEsIDE5MTUxfSwKKyAgICB7Z19Gb3hpdEZpeGVkSXRhbGljRm9udERhdGEsIDE4NzQ2fSwKKyAgICB7Z19Gb3hpdFNhbnNGb250RGF0YSwgMTUwMjV9LAorICAgIHtnX0ZveGl0U2Fuc0JvbGRGb250RGF0YSwgMTYzNDR9LAorICAgIHtnX0ZveGl0U2Fuc0JvbGRJdGFsaWNGb250RGF0YSwgMTY0MTh9LAorICAgIHtnX0ZveGl0U2Fuc0l0YWxpY0ZvbnREYXRhLCAxNjMzOX0sCisgICAge2dfRm94aXRTZXJpZkZvbnREYXRhLCAxOTQ2OX0sCisgICAge2dfRm94aXRTZXJpZkJvbGRGb250RGF0YSwgMTkzOTV9LAorICAgIHtnX0ZveGl0U2VyaWZCb2xkSXRhbGljRm9udERhdGEsIDIwNzMzfSwKKyAgICB7Z19Gb3hpdFNlcmlmSXRhbGljRm9udERhdGEsIDIxMjI3fSwKKyAgICB7Z19Gb3hpdFN5bWJvbEZvbnREYXRhLCAxNjcyOX0sCisgICAge2dfRm94aXREaW5nYmF0c0ZvbnREYXRhLCAyOTUxM30sCit9Owordm9pZCBfRlBERkFQSV9HZXRJbnRlcm5hbEZvbnREYXRhKGludCBpZCwgRlhfTFBDQllURSYgZGF0YSwgRlhfRFdPUkQmIHNpemUpCit7CisgICAgQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Rm9udE1ncigpLT5HZXRTdGFuZGFyZEZvbnQoZGF0YSwgc2l6ZSwgaWQpOworfQorRlhfQk9PTCBDRlhfRm9udE1ncjo6R2V0U3RhbmRhcmRGb250KEZYX0xQQ0JZVEUmIHBGb250RGF0YSwgRlhfRFdPUkQmIHNpemUsIGludCBpbmRleCkKK3sKKyAgICBpZiAoaW5kZXggPiAxNSB8fCBpbmRleCA8IDApIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSAxNCkgeworICAgICAgICAgICAgaWYgKGluZGV4ID09IDE0KSB7CisgICAgICAgICAgICAgICAgcEZvbnREYXRhID0gZ19Gb3hpdFNlcmlmTU1Gb250RGF0YTsKKyAgICAgICAgICAgICAgICBzaXplID0gMTEzNDE3OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwRm9udERhdGEgPSBnX0ZveGl0U2Fuc01NRm9udERhdGE7CisgICAgICAgICAgICAgICAgc2l6ZSA9IDY2OTE5OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcEZvbnREYXRhID0gZ19Gb3hpdEZvbnRzW2luZGV4XS5tX3BGb250RGF0YTsKKyAgICAgICAgICAgIHNpemUgPSBnX0ZveGl0Rm9udHNbaW5kZXhdLm1fZHdTaXplOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorQ0ZYX0ZvbnRNYXBwZXI6OkNGWF9Gb250TWFwcGVyKCkKK3sKKyAgICBGWFNZU19tZW1zZXQzMihtX0ZveGl0RmFjZXMsIDAsIHNpemVvZiBtX0ZveGl0RmFjZXMpOworICAgIG1fTU1GYWNlc1swXSA9IG1fTU1GYWNlc1sxXSA9IE5VTEw7CisgICAgbV9wRm9udEluZm8gPSBOVUxMOworICAgIG1fYkxpc3RMb2FkZWQgPSBGQUxTRTsKKyAgICBtX3BGb250RW51bWVyYXRvciA9IE5VTEw7Cit9CitDRlhfRm9udE1hcHBlcjo6fkNGWF9Gb250TWFwcGVyKCkKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDE0OyBpICsrKQorICAgICAgICBpZiAobV9Gb3hpdEZhY2VzW2ldKSB7CisgICAgICAgICAgICBGWEZUX0RvbmVfRmFjZShtX0ZveGl0RmFjZXNbaV0pOworICAgICAgICB9CisgICAgaWYgKG1fTU1GYWNlc1swXSkgeworICAgICAgICBGWEZUX0RvbmVfRmFjZShtX01NRmFjZXNbMF0pOworICAgIH0KKyAgICBpZiAobV9NTUZhY2VzWzFdKSB7CisgICAgICAgIEZYRlRfRG9uZV9GYWNlKG1fTU1GYWNlc1sxXSk7CisgICAgfQorICAgIGlmIChtX3BGb250SW5mbykgeworICAgICAgICBtX3BGb250SW5mby0+UmVsZWFzZSgpOworICAgIH0KK30KK3ZvaWQgQ0ZYX0ZvbnRNYXBwZXI6OlNldFN5c3RlbUZvbnRJbmZvKElGWF9TeXN0ZW1Gb250SW5mbyogcEZvbnRJbmZvKQoreworICAgIGlmIChwRm9udEluZm8gPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX3BGb250SW5mbykgeworICAgICAgICBtX3BGb250SW5mby0+UmVsZWFzZSgpOworICAgIH0KKyAgICBtX3BGb250SW5mbyA9IHBGb250SW5mbzsKK30KK3N0YXRpYyBDRlhfQnl0ZVN0cmluZyBfVFRfTm9ybWFsaXplTmFtZShGWF9MUENTVFIgZmFtaWx5KQoreworICAgIENGWF9CeXRlU3RyaW5nIG5vcm0oZmFtaWx5LCAtMSk7CisgICAgbm9ybS5SZW1vdmUoJyAnKTsKKyAgICBub3JtLlJlbW92ZSgnLScpOworICAgIG5vcm0uUmVtb3ZlKCcsJyk7CisgICAgaW50IHBvcyA9IG5vcm0uRmluZCgnKycpOworICAgIGlmIChwb3MgPiAwKSB7CisgICAgICAgIG5vcm0gPSBub3JtLkxlZnQocG9zKTsKKyAgICB9CisgICAgbm9ybS5NYWtlTG93ZXIoKTsKKyAgICByZXR1cm4gbm9ybTsKK30KK0NGWF9CeXRlU3RyaW5nIF9GUERGX0dldE5hbWVGcm9tVFQoRlhfTFBDQllURSBuYW1lX3RhYmxlLCBGWF9EV09SRCBuYW1lX2lkKQoreworICAgIEZYX0xQQ0JZVEUgcHRyID0gbmFtZV90YWJsZSArIDI7CisgICAgaW50IG5hbWVfY291bnQgPSBHRVRfVFRfU0hPUlQocHRyKTsKKyAgICBpbnQgc3RyaW5nX29mZnNldCA9IEdFVF9UVF9TSE9SVChwdHIgKyAyKTsKKyAgICBGWF9MUENCWVRFIHN0cmluZ19wdHIgPSBuYW1lX3RhYmxlICsgc3RyaW5nX29mZnNldDsKKyAgICBwdHIgKz0gNDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5hbWVfY291bnQ7IGkgKyspIHsKKyAgICAgICAgaWYgKEdFVF9UVF9TSE9SVChwdHIgKyA2KSA9PSBuYW1lX2lkICYmIEdFVF9UVF9TSE9SVChwdHIpID09IDEgJiYgR0VUX1RUX1NIT1JUKHB0ciArIDIpID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZ0Moc3RyaW5nX3B0ciArIEdFVF9UVF9TSE9SVChwdHIgKyAxMCksIEdFVF9UVF9TSE9SVChwdHIgKyA4KSk7CisgICAgICAgIH0KKyAgICAgICAgcHRyICs9IDEyOworICAgIH0KKyAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsKK30KK3N0YXRpYyBDRlhfQnl0ZVN0cmluZyBfRlBERl9SZWFkU3RyaW5nRnJvbUZpbGUoRlhTWVNfRklMRSogcEZpbGUsIEZYX0RXT1JEIHNpemUpCit7CisgICAgQ0ZYX0J5dGVTdHJpbmcgYnVmZmVyOworICAgIGlmICghRlhTWVNfZnJlYWQoYnVmZmVyLkdldEJ1ZmZlcihzaXplKSwgc2l6ZSwgMSwgcEZpbGUpKSB7CisgICAgICAgIHJldHVybiBDRlhfQnl0ZVN0cmluZygpOworICAgIH0KKyAgICBidWZmZXIuUmVsZWFzZUJ1ZmZlcihzaXplKTsKKyAgICByZXR1cm4gYnVmZmVyOworfQorc3RhdGljIENGWF9CeXRlU3RyaW5nIF9GUERGX1JlYWRTdHJpbmdGcm9tU3RyZWFtRmlsZShJRlhfRmlsZVN0cmVhbSogcEZpbGUsIEZYX0RXT1JEIHNpemUpCit7CisgICAgQ0ZYX0J5dGVTdHJpbmcgYnVmZmVyOworICAgIGlmICghcEZpbGUtPlJlYWRCbG9jayhidWZmZXIuR2V0QnVmZmVyKHNpemUpLCBzaXplKSkgeworICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsKKyAgICB9CisgICAgYnVmZmVyLlJlbGVhc2VCdWZmZXIoc2l6ZSk7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KK0NGWF9CeXRlU3RyaW5nIF9GUERGX0xvYWRUYWJsZUZyb21UVChGWFNZU19GSUxFKiBwRmlsZSwgRlhfTFBDQllURSBwVGFibGVzLCBGWF9EV09SRCBuVGFibGVzLCBGWF9EV09SRCB0YWcpCit7CisgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IG5UYWJsZXM7IGkgKyspIHsKKyAgICAgICAgRlhfTFBDQllURSBwID0gcFRhYmxlcyArIGkgKiAxNjsKKyAgICAgICAgaWYgKEdFVF9UVF9MT05HKHApID09IHRhZykgeworICAgICAgICAgICAgRlhfRFdPUkQgb2Zmc2V0ID0gR0VUX1RUX0xPTkcocCArIDgpOworICAgICAgICAgICAgRlhfRFdPUkQgc2l6ZSA9IEdFVF9UVF9MT05HKHAgKyAxMik7CisgICAgICAgICAgICBGWFNZU19mc2VlayhwRmlsZSwgb2Zmc2V0LCBGWFNZU19TRUVLX1NFVCk7CisgICAgICAgICAgICByZXR1cm4gX0ZQREZfUmVhZFN0cmluZ0Zyb21GaWxlKHBGaWxlLCBzaXplKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsKK30KK0NGWF9CeXRlU3RyaW5nIF9GUERGX0xvYWRUYWJsZUZyb21UVFN0cmVhbUZpbGUoSUZYX0ZpbGVTdHJlYW0qIHBGaWxlLCBGWF9MUENCWVRFIHBUYWJsZXMsIEZYX0RXT1JEIG5UYWJsZXMsIEZYX0RXT1JEIHRhZykKK3sKKyAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgblRhYmxlczsgaSArKykgeworICAgICAgICBGWF9MUENCWVRFIHAgPSBwVGFibGVzICsgaSAqIDE2OworICAgICAgICBpZiAoR0VUX1RUX0xPTkcocCkgPT0gdGFnKSB7CisgICAgICAgICAgICBGWF9EV09SRCBvZmZzZXQgPSBHRVRfVFRfTE9ORyhwICsgOCk7CisgICAgICAgICAgICBGWF9EV09SRCBzaXplID0gR0VUX1RUX0xPTkcocCArIDEyKTsKKyAgICAgICAgICAgIENGWF9CeXRlU3RyaW5nIGJ1ZmZlcjsKKyAgICAgICAgICAgIGlmICghcEZpbGUtPlJlYWRCbG9jayhidWZmZXIuR2V0QnVmZmVyKHNpemUpLCBvZmZzZXQsIHNpemUpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBidWZmZXIuUmVsZWFzZUJ1ZmZlcihzaXplKTsKKyAgICAgICAgICAgIHJldHVybiBidWZmZXI7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIENGWF9CeXRlU3RyaW5nKCk7Cit9CitDRlhfQnl0ZVN0cmluZyBDRlhfRm9udE1hcHBlcjo6R2V0UFNOYW1lRnJvbVRUKHZvaWQqIGhGb250KQoreworICAgIGlmIChtX3BGb250SW5mbyA9PSBOVUxMKSB7CisgICAgICAgIENGWF9CeXRlU3RyaW5nKCk7CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIHJlc3VsdDsKKyAgICBGWF9EV09SRCBzaXplID0gbV9wRm9udEluZm8tPkdldEZvbnREYXRhKGhGb250LCAweDZlNjE2ZDY1LCBOVUxMLCAwKTsKKyAgICBpZiAoc2l6ZSkgeworICAgICAgICBGWF9MUEJZVEUgYnVmZmVyID0gRlhfQWxsb2MoRlhfQllURSwgc2l6ZSk7CisgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIG1fcEZvbnRJbmZvLT5HZXRGb250RGF0YShoRm9udCwgMHg2ZTYxNmQ2NSwgYnVmZmVyLCBzaXplKTsKKyAgICAgICAgcmVzdWx0ID0gX0ZQREZfR2V0TmFtZUZyb21UVChidWZmZXIsIDYpOworICAgICAgICBGWF9GcmVlKGJ1ZmZlcik7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9Cit2b2lkIENGWF9Gb250TWFwcGVyOjpBZGRJbnN0YWxsZWRGb250KGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lLCBpbnQgY2hhcnNldCkKK3sKKyAgICBpZiAobV9wRm9udEluZm8gPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX0NoYXJzZXRBcnJheS5GaW5kKChGWF9EV09SRCljaGFyc2V0KSA9PSAtMSkgeworICAgICAgICBtX0NoYXJzZXRBcnJheS5BZGQoKEZYX0RXT1JEKWNoYXJzZXQpOworICAgICAgICBtX0ZhY2VBcnJheS5BZGQobmFtZSk7CisgICAgfQorICAgIGlmIChuYW1lID09IG1fTGFzdEZhbWlseSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX0xQQ0JZVEUgcHRyID0gbmFtZTsKKyAgICBGWF9CT09MIGJMb2NhbGl6ZWQgPSBGQUxTRTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5hbWUuR2V0TGVuZ3RoKCk7IGkgKyspCisgICAgICAgIGlmIChwdHJbaV0gPiAweDgwKSB7CisgICAgICAgICAgICBiTG9jYWxpemVkID0gVFJVRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgaWYgKGJMb2NhbGl6ZWQpIHsKKyAgICAgICAgdm9pZCogaEZvbnQgPSBtX3BGb250SW5mby0+R2V0Rm9udChuYW1lKTsKKyAgICAgICAgaWYgKGhGb250ID09IE5VTEwpIHsKKyAgICAgICAgICAgIEZYX0JPT0wgYkV4YWN0OworICAgICAgICAgICAgaEZvbnQgPSBtX3BGb250SW5mby0+TWFwRm9udCgwLCAwLCBGWEZPTlRfREVGQVVMVF9DSEFSU0VULCAwLCBuYW1lLCBiRXhhY3QpOworICAgICAgICAgICAgaWYgKGhGb250ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgbmV3X25hbWUgPSBHZXRQU05hbWVGcm9tVFQoaEZvbnQpOworICAgICAgICBpZiAoIW5ld19uYW1lLklzRW1wdHkoKSkgeworICAgICAgICAgICAgbmV3X25hbWUuSW5zZXJ0KDAsICcgJyk7CisgICAgICAgICAgICBtX0luc3RhbGxlZFRURm9udHMuQWRkKG5ld19uYW1lKTsKKyAgICAgICAgfQorICAgICAgICBtX3BGb250SW5mby0+RGVsZXRlRm9udChoRm9udCk7CisgICAgfQorICAgIG1fSW5zdGFsbGVkVFRGb250cy5BZGQobmFtZSk7CisgICAgbV9MYXN0RmFtaWx5ID0gbmFtZTsKK30KK3ZvaWQgQ0ZYX0ZvbnRNYXBwZXI6OkxvYWRJbnN0YWxsZWRGb250cygpCit7CisgICAgaWYgKG1fcEZvbnRJbmZvID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9iTGlzdExvYWRlZCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX2JMaXN0TG9hZGVkKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wRm9udEluZm8tPkVudW1Gb250TGlzdCh0aGlzKTsKKyAgICBtX2JMaXN0TG9hZGVkID0gVFJVRTsKK30KK0NGWF9CeXRlU3RyaW5nIENGWF9Gb250TWFwcGVyOjpNYXRjaEluc3RhbGxlZEZvbnRzKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBub3JtX25hbWUpCit7CisgICAgTG9hZEluc3RhbGxlZEZvbnRzKCk7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gbV9JbnN0YWxsZWRUVEZvbnRzLkdldFNpemUoKSAtIDE7IGkgPj0gMDsgaSAtLSkgeworICAgICAgICBDRlhfQnl0ZVN0cmluZyBub3JtMSA9IF9UVF9Ob3JtYWxpemVOYW1lKG1fSW5zdGFsbGVkVFRGb250c1tpXSk7CisgICAgICAgIGlmIChub3JtMSA9PSBub3JtX25hbWUpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmIChpIDwgMCkgeworICAgICAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgbWF0Y2ggPSBtX0luc3RhbGxlZFRURm9udHNbaV07CisgICAgaWYgKG1hdGNoWzBdID09ICcgJykgeworICAgICAgICBtYXRjaCA9IG1fSW5zdGFsbGVkVFRGb250c1tpICsgMV07CisgICAgfQorICAgIHJldHVybiBtYXRjaDsKK30KK3R5cGVkZWYgc3RydWN0IF9DSEFSU0VUX01BUF8geworICAgIEZYX0JZVEUgY2hhcnNldDsKKyAgICBGWF9XT1JEIGNvZGVwYWdlOworfSBDSEFSU0VUX01BUDsKK3N0YXRpYyBjb25zdCBDSEFSU0VUX01BUCBnX0NvZGVwYWdlMkNoYXJzZXRUYWJsZVtdID0geworICAgIHsgMQkgLCAwCX0sCisgICAgeyAyCSAsIDQyCX0sCisgICAgeyAyNTQsIDQzNwl9LAorICAgIHsgMjU1LCA4NTAJfSwKKyAgICB7IDIyMiwgODc0CX0sCisgICAgeyAxMjgsIDkzMgl9LAorICAgIHsgMTM0LCA5MzYJfSwKKyAgICB7IDEyOSwgOTQ5CX0sCisgICAgeyAxMzYsIDk1MAl9LAorICAgIHsgMjM4LCAxMjUwCX0sCisgICAgeyAyMDQsIDEyNTEJfSwKKyAgICB7IDAsICAgMTI1Mgl9LAorICAgIHsgMTYxLCAxMjUzCX0sCisgICAgeyAxNjIsIDEyNTQJfSwKKyAgICB7IDE3NywgMTI1NQl9LAorICAgIHsgMTc4LCAxMjU2CX0sCisgICAgeyAxODYsIDEyNTcJfSwKKyAgICB7IDE2MywgMTI1OCB9LAorICAgIHsgMTMwLCAxMzYxIH0sCisgICAgeyA3NywgMTAwMDAgfSwKKyAgICB7IDc4LCAxMDAwMSB9LAorICAgIHsgNzksIDEwMDAzIH0sCisgICAgeyA4MCwgMTAwMDggfSwKKyAgICB7IDgxLCAxMDAwMiB9LAorICAgIHsgODMsIDEwMDA1IH0sCisgICAgeyA4NCwgMTAwMDQgfSwKKyAgICB7IDg1LCAxMDAwNiB9LAorICAgIHsgODYsIDEwMDgxIH0sCisgICAgeyA4NywgMTAwMjEgfSwKKyAgICB7IDg4LCAxMDAyOSB9LAorICAgIHsgODksIDEwMDA3IH0sCit9OworRlhfQllURSBfR2V0Q2hhcnNldEZyb21Db2RlUGFnZShGWF9XT1JEIGNvZGVwYWdlKQoreworICAgIEZYX0lOVDMyIGlFbmQgPSBzaXplb2YoZ19Db2RlcGFnZTJDaGFyc2V0VGFibGUpIC8gc2l6ZW9mKENIQVJTRVRfTUFQKSAtIDE7CisgICAgRlhTWVNfYXNzZXJ0KGlFbmQgPj0gMCk7CisgICAgRlhfSU5UMzIgaVN0YXJ0ID0gMCwgaU1pZDsKKyAgICBkbyB7CisgICAgICAgIGlNaWQgPSAoaVN0YXJ0ICsgaUVuZCkgLyAyOworICAgICAgICBjb25zdCBDSEFSU0VUX01BUCAmIGNwID0gZ19Db2RlcGFnZTJDaGFyc2V0VGFibGVbaU1pZF07CisgICAgICAgIGlmIChjb2RlcGFnZSA9PSBjcC5jb2RlcGFnZSkgeworICAgICAgICAgICAgcmV0dXJuIGNwLmNoYXJzZXQ7CisgICAgICAgIH0gZWxzZSBpZiAoY29kZXBhZ2UgPCBjcC5jb2RlcGFnZSkgeworICAgICAgICAgICAgaUVuZCA9IGlNaWQgLSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaVN0YXJ0ID0gaU1pZCArIDE7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChpU3RhcnQgPD0gaUVuZCk7CisgICAgcmV0dXJuIDE7Cit9CitGWF9EV09SRCBfR2V0Q29kZVBhZ2VSYW5nZUZyb21DaGFyc2V0KGludCBjaGFyc2V0KQoreworICAgIGlmIChjaGFyc2V0ID09IEZYRk9OVF9FQVNURVVST1BFX0NIQVJTRVQpIHsKKyAgICAgICAgcmV0dXJuIDEgPDwgMTsKKyAgICB9CisgICAgaWYgKGNoYXJzZXQgPT0gRlhGT05UX0dSRUVLX0NIQVJTRVQpIHsKKyAgICAgICAgcmV0dXJuIDEgPDwgMzsKKyAgICB9CisgICAgaWYgKGNoYXJzZXQgPT0gRlhGT05UX1RVUktJU0hfQ0hBUlNFVCkgeworICAgICAgICByZXR1cm4gMSA8PCA0OworICAgIH0KKyAgICBpZiAoY2hhcnNldCA9PSBGWEZPTlRfSEVCUkVXX0NIQVJTRVQpIHsKKyAgICAgICAgcmV0dXJuIDEgPDwgNTsKKyAgICB9CisgICAgaWYgKGNoYXJzZXQgPT0gRlhGT05UX0FSQUJJQ19DSEFSU0VUKSB7CisgICAgICAgIHJldHVybiAxIDw8IDY7CisgICAgfQorICAgIGlmIChjaGFyc2V0ID09IEZYRk9OVF9CQUxUSUNfQ0hBUlNFVCkgeworICAgICAgICByZXR1cm4gMSA8PCA3OworICAgIH0KKyAgICBpZiAoY2hhcnNldCA9PSBGWEZPTlRfVEhBSV9DSEFSU0VUKSB7CisgICAgICAgIHJldHVybiAxIDw8IDE2OworICAgIH0KKyAgICBpZiAoY2hhcnNldCA9PSBGWEZPTlRfU0hJRlRKSVNfQ0hBUlNFVCkgeworICAgICAgICByZXR1cm4gMSA8PCAxNzsKKyAgICB9CisgICAgaWYgKGNoYXJzZXQgPT0gRlhGT05UX0dCMjMxMl9DSEFSU0VUKSB7CisgICAgICAgIHJldHVybiAxIDw8IDE4OworICAgIH0KKyAgICBpZiAoY2hhcnNldCA9PSBGWEZPTlRfQ0hJTkVTRUJJRzVfQ0hBUlNFVCkgeworICAgICAgICByZXR1cm4gMSA8PCAyMDsKKyAgICB9CisgICAgaWYgKGNoYXJzZXQgPT0gRlhGT05UX0hBTkdFVUxfQ0hBUlNFVCkgeworICAgICAgICByZXR1cm4gMSA8PCAxOTsKKyAgICB9CisgICAgaWYgKGNoYXJzZXQgPT0gRlhGT05UX1NZTUJPTF9DSEFSU0VUKSB7CisgICAgICAgIHJldHVybiAxIDw8IDMxOworICAgIH0KKyAgICByZXR1cm4gMSA8PCAyMTsKK30KK3N0YXRpYyBpbnQgQ1AyQ2hhclNldChpbnQgY3ApCit7CisgICAgaWYoY3AgPT0gOTMyKSB7CisgICAgICAgIHJldHVybiBGWEZPTlRfU0hJRlRKSVNfQ0hBUlNFVDsKKyAgICB9IGVsc2UgaWYoY3AgPT0gOTM2KSB7CisgICAgICAgIHJldHVybiBGWEZPTlRfR0IyMzEyX0NIQVJTRVQ7CisgICAgfSBlbHNlIGlmKGNwID09IDk0OSkgeworICAgICAgICByZXR1cm4gRlhGT05UX0hBTkdFVUxfQ0hBUlNFVDsKKyAgICB9IGVsc2UgaWYoY3AgPT0gOTUwKSB7CisgICAgICAgIHJldHVybiBGWEZPTlRfQ0hJTkVTRUJJRzVfQ0hBUlNFVDsKKyAgICB9CisgICAgcmV0dXJuIEZYRk9OVF9ERUZBVUxUX0NIQVJTRVQ7Cit9CitGWEZUX0ZhY2UgQ0ZYX0ZvbnRNYXBwZXI6OlVzZUludGVybmFsU3Vic3QoQ0ZYX1N1YnN0Rm9udCogcFN1YnN0Rm9udCwgaW50IGlCYXNlRm9udCwgaW50IGl0YWxpY19hbmdsZSwgaW50IHdlaWdodCwgaW50IHBpY3RoZmFtaWx5KQoreworICAgIGlmIChpQmFzZUZvbnQgPCAxMikgeworICAgICAgICBpZiAobV9Gb3hpdEZhY2VzW2lCYXNlRm9udF0pIHsKKyAgICAgICAgICAgIHJldHVybiBtX0ZveGl0RmFjZXNbaUJhc2VGb250XTsKKyAgICAgICAgfQorICAgICAgICBGWF9MUENCWVRFIHBGb250RGF0YSA9IE5VTEw7CisgICAgICAgIEZYX0RXT1JEIHNpemUgPSAwOworICAgICAgICBpZiAobV9wRm9udE1nci0+R2V0U3RhbmRhcmRGb250KHBGb250RGF0YSwgc2l6ZSwgaUJhc2VGb250KSkgeworICAgICAgICAgICAgbV9Gb3hpdEZhY2VzW2lCYXNlRm9udF0gPSBtX3BGb250TWdyLT5HZXRGaXhlZEZhY2UocEZvbnREYXRhLCBzaXplLCAwKTsKKyAgICAgICAgICAgIHJldHVybiBtX0ZveGl0RmFjZXNbaUJhc2VGb250XTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwU3Vic3RGb250LT5tX1N1YnN0RmxhZ3MgfD0gRlhGT05UX1NVQlNUX01NOworICAgIHBTdWJzdEZvbnQtPm1fSXRhbGljQW5nbGUgPSBpdGFsaWNfYW5nbGU7CisgICAgaWYgKHdlaWdodCkgeworICAgICAgICBwU3Vic3RGb250LT5tX1dlaWdodCA9IHdlaWdodDsKKyAgICB9CisgICAgaWYgKHBpY3RoZmFtaWx5ICYgRlhGT05UX0ZGX1JPTUFOKSB7CisgICAgICAgIHBTdWJzdEZvbnQtPm1fV2VpZ2h0ID0gcFN1YnN0Rm9udC0+bV9XZWlnaHQgKiA0IC8gNTsKKyAgICAgICAgcFN1YnN0Rm9udC0+bV9GYW1pbHkgPSAiQ2hyb21lIFNlcmlmIjsKKyAgICAgICAgaWYgKG1fTU1GYWNlc1sxXSkgeworICAgICAgICAgICAgcmV0dXJuIG1fTU1GYWNlc1sxXTsKKyAgICAgICAgfQorICAgICAgICBGWF9MUENCWVRFIHBGb250RGF0YSA9IE5VTEw7CisgICAgICAgIEZYX0RXT1JEIHNpemU7CisgICAgICAgIG1fcEZvbnRNZ3ItPkdldFN0YW5kYXJkRm9udChwRm9udERhdGEsIHNpemUsIDE0KTsKKyAgICAgICAgbV9NTUZhY2VzWzFdID0gbV9wRm9udE1nci0+R2V0Rml4ZWRGYWNlKHBGb250RGF0YSwgc2l6ZSwgMCk7CisgICAgICAgIHJldHVybiBtX01NRmFjZXNbMV07CisgICAgfQorICAgIHBTdWJzdEZvbnQtPm1fRmFtaWx5ID0gIkNocm9tZSBTYW5zIjsKKyAgICBpZiAobV9NTUZhY2VzWzBdKSB7CisgICAgICAgIHJldHVybiBtX01NRmFjZXNbMF07CisgICAgfQorICAgIEZYX0xQQ0JZVEUgcEZvbnREYXRhID0gTlVMTDsKKyAgICBGWF9EV09SRCBzaXplID0gMDsKKyAgICBtX3BGb250TWdyLT5HZXRTdGFuZGFyZEZvbnQocEZvbnREYXRhLCBzaXplLCAxNSk7CisgICAgbV9NTUZhY2VzWzBdID0gbV9wRm9udE1nci0+R2V0Rml4ZWRGYWNlKHBGb250RGF0YSwgc2l6ZSwgMCk7CisgICAgcmV0dXJuIG1fTU1GYWNlc1swXTsKK30KK2NvbnN0IHN0cnVjdCBfQWx0Rm9udEZhbWlseSB7CisgICAgRlhfTFBDU1RSIG1fcEZvbnROYW1lOworICAgIEZYX0xQQ1NUUiBtX3BGb250RmFtaWx5OworfQorZ19BbHRGb250RmFtaWxpZXNbXSA9IHsKKyAgICB7IkFHYXJhbW9uZFBybyIsICJBZG9iZSBHYXJhbW9uZCBQcm8ifSwKKyAgICB7IkJhbmtHb3RoaWNCVC1NZWRpdW0iLCAiQmFua0dvdGhpYyBNZCBCVCJ9LAorICAgIHsiRm9ydGVNVCIsICJGb3J0ZSJ9LAorfTsKK2V4dGVybiAiQyIgeworICAgIHN0YXRpYyBpbnQgY29tcGFyZUZvbnRGYW1pbHlTdHJpbmcoY29uc3Qgdm9pZCoga2V5LCBjb25zdCB2b2lkKiBlbGVtZW50KQorICAgIHsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgc3RyX2tleSgoRlhfTFBDU1RSKWtleSk7CisgICAgICAgIGlmIChzdHJfa2V5LkZpbmQoKChfQWx0Rm9udEZhbWlseSopZWxlbWVudCktPm1fcEZvbnROYW1lKSAhPSAtMSkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEZYU1lTX3N0cmljbXAoKEZYX0xQQ1NUUilrZXksICgoX0FsdEZvbnRGYW1pbHkqKWVsZW1lbnQpLT5tX3BGb250TmFtZSk7CisgICAgfQorfQorI2RlZmluZSBGWF9GT05UX1NUWUxFX05vbmUJCTB4MDAKKyNkZWZpbmUgRlhfRk9OVF9TVFlMRV9Cb2xkCQkweDAxCisjZGVmaW5lIEZYX0ZPTlRfU1RZTEVfSXRhbGljCTB4MDIKKyNkZWZpbmUgRlhfRk9OVF9TVFlMRV9Cb2xkQm9sZAkweDA0CitzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcgX0dldEZvbnRGYW1pbHkoQ0ZYX0J5dGVTdHJpbmcgZm9udE5hbWUsIGludCBuU3R5bGUpCit7CisgICAgaWYgKGZvbnROYW1lLkZpbmQoIlNjcmlwdCIpID49IDApIHsKKyAgICAgICAgaWYgKChuU3R5bGUgJiBGWF9GT05UX1NUWUxFX0JvbGQpID09IEZYX0ZPTlRfU1RZTEVfQm9sZCkgeworICAgICAgICAgICAgZm9udE5hbWUgPSAiU2NyaXB0TVRCb2xkIjsKKyAgICAgICAgfSBlbHNlIGlmIChmb250TmFtZS5GaW5kKCJQYWxhY2UiKSA+PSAwKSB7CisgICAgICAgICAgICBmb250TmFtZSA9ICJQYWxhY2VTY3JpcHRNVCI7CisgICAgICAgIH0gZWxzZSBpZiAoZm9udE5hbWUuRmluZCgiRnJlbmNoIikgPj0gMCkgeworICAgICAgICAgICAgZm9udE5hbWUgPSAiRnJlbmNoU2NyaXB0TVQiOworICAgICAgICB9IGVsc2UgaWYgKGZvbnROYW1lLkZpbmQoIkZyZWVTdHlsZSIpID49IDApIHsKKyAgICAgICAgICAgIGZvbnROYW1lID0gIkZyZWVTdHlsZVNjcmlwdCI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZvbnROYW1lOworICAgIH0KKyAgICBfQWx0Rm9udEZhbWlseSogZm91bmQgPSAoX0FsdEZvbnRGYW1pbHkqKUZYU1lTX2JzZWFyY2goKEZYX0xQQ1NUUilmb250TmFtZSwgZ19BbHRGb250RmFtaWxpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIGdfQWx0Rm9udEZhbWlsaWVzIC8gc2l6ZW9mIChfQWx0Rm9udEZhbWlseSksIHNpemVvZiAoX0FsdEZvbnRGYW1pbHkpLCBjb21wYXJlRm9udEZhbWlseVN0cmluZyk7CisgICAgaWYgKGZvdW5kID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIGZvbnROYW1lOworICAgIH0KKyAgICByZXR1cm4gZm91bmQtPm1fcEZvbnRGYW1pbHk7Cit9OwordHlwZWRlZiBzdHJ1Y3QgX0ZYX0ZvbnRTdHlsZSB7CisgICAgRlhfTFBDU1RSIHN0eWxlOworICAgIEZYX0lOVDMyIGxlbjsKK30gRlhfRm9udFN0eWxlOworY29uc3QgRlhfRm9udFN0eWxlIGdfRm9udFN0eWxlc1tdID0geworICAgICJCb2xkIiwgNCwKKyAgICAiSXRhbGljIiwgNiwKKyAgICAiQm9sZEl0YWxpYyIsIDEwLAorICAgICJSZWciLCAzLAorICAgICJSZWd1bGFyIiwgNywKK307CitDRlhfQnl0ZVN0cmluZyBQYXJzZVN0eWxlKEZYX0xQQ1NUUiBwU3R5bGUsIGludCBpTGVuLCBpbnQgaUluZGV4KQoreworICAgIENGWF9CeXRlVGV4dEJ1ZiBidWY7CisgICAgaWYgKCFpTGVuIHx8IGlMZW4gPD0gaUluZGV4KSB7CisgICAgICAgIHJldHVybiBidWYuR2V0Qnl0ZVN0cmluZygpOworICAgIH0KKyAgICB3aGlsZSAoaUluZGV4IDwgaUxlbikgeworICAgICAgICBpZiAocFN0eWxlW2lJbmRleF0gPT0gJywnKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBidWYuQXBwZW5kQ2hhcihwU3R5bGVbaUluZGV4XSk7CisgICAgICAgICsraUluZGV4OworICAgIH0KKyAgICByZXR1cm4gYnVmLkdldEJ5dGVTdHJpbmcoKTsKK30KK0ZYX0lOVDMyIEdldFN0eWxlVHlwZShjb25zdCBDRlhfQnl0ZVN0cmluZyAmYnNTdHlsZSwgRlhfQk9PTCBiUmV2ZXJ0KQoreworICAgIEZYX0lOVDMyIGlMZW4gPSBic1N0eWxlLkdldExlbmd0aCgpOworICAgIGlmICghaUxlbikgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGludCBpU2l6ZSA9IHNpemVvZihnX0ZvbnRTdHlsZXMpIC8gc2l6ZW9mKEZYX0ZvbnRTdHlsZSk7CisgICAgY29uc3QgRlhfRm9udFN0eWxlICpwU3R5bGUgPSBOVUxMOworICAgIGZvciAoaW50IGkgPSBpU2l6ZSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIHBTdHlsZSA9IGdfRm9udFN0eWxlcyArIGk7CisgICAgICAgIGlmICghcFN0eWxlIHx8IHBTdHlsZS0+bGVuID4gaUxlbikgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFiUmV2ZXJ0KSB7CisgICAgICAgICAgICBpZiAoYnNTdHlsZS5MZWZ0KHBTdHlsZS0+bGVuKS5Db21wYXJlKHBTdHlsZS0+c3R5bGUpID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChic1N0eWxlLlJpZ2h0KHBTdHlsZS0+bGVuKS5Db21wYXJlKHBTdHlsZS0+c3R5bGUpID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CitGWF9CT09MIENoZWNrU3VwcG9ydFRoaXJkUGFydEZvbnQoQ0ZYX0J5dGVTdHJpbmcgbmFtZSwgaW50ICZQaXRjaEZhbWlseSkKK3sKKyAgICBpZiAobmFtZSA9PSBGWF9CU1RSQygiTXlyaWFkUHJvIikpIHsKKyAgICAgICAgUGl0Y2hGYW1pbHkgJj0gfkZYRk9OVF9GRl9ST01BTjsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK0ZYRlRfRmFjZSBDRlhfRm9udE1hcHBlcjo6RmluZFN1YnN0Rm9udChjb25zdCBDRlhfQnl0ZVN0cmluZyYgbmFtZSwgRlhfQk9PTCBiVHJ1ZVR5cGUsIEZYX0RXT1JEIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3ZWlnaHQsIGludCBpdGFsaWNfYW5nbGUsIGludCBXaW5kb3dDUCwgQ0ZYX1N1YnN0Rm9udCogcFN1YnN0Rm9udCkKK3sKKyAgICBpZiAoIShmbGFncyAmIEZYRk9OVF9VU0VFWFRFUk5BVFRSKSkgeworICAgICAgICB3ZWlnaHQgPSBGWEZPTlRfRldfTk9STUFMOworICAgICAgICBpdGFsaWNfYW5nbGUgPSAwOworICAgIH0KKyAgICBDRlhfQnl0ZVN0cmluZyBTdWJzdE5hbWUgPSBuYW1lOworICAgIFN1YnN0TmFtZS5SZW1vdmUoMHgyMCk7CisgICAgaWYgKGJUcnVlVHlwZSkgeworICAgICAgICBpZiAobmFtZVswXSA9PSAnQCcpIHsKKyAgICAgICAgICAgIFN1YnN0TmFtZSA9IG5hbWUuTWlkKDEpOworICAgICAgICB9CisgICAgfQorICAgIF9QREZfR2V0U3RhbmRhcmRGb250TmFtZShTdWJzdE5hbWUpOworICAgIGlmIChTdWJzdE5hbWUgPT0gRlhfQlNUUkMoIlN5bWJvbCIpICYmICFiVHJ1ZVR5cGUpIHsKKyAgICAgICAgcFN1YnN0Rm9udC0+bV9GYW1pbHkgPSAiQ2hyb21lIFN5bWJvbCI7CisgICAgICAgIHBTdWJzdEZvbnQtPm1fQ2hhcnNldCA9IEZYRk9OVF9TWU1CT0xfQ0hBUlNFVDsKKyAgICAgICAgcFN1YnN0Rm9udC0+bV9TdWJzdEZsYWdzIHw9IEZYRk9OVF9TVUJTVF9TVEFOREFSRDsKKyAgICAgICAgaWYgKG1fRm94aXRGYWNlc1sxMl0pIHsKKyAgICAgICAgICAgIHJldHVybiBtX0ZveGl0RmFjZXNbMTJdOworICAgICAgICB9CisgICAgICAgIEZYX0xQQ0JZVEUgcEZvbnREYXRhID0gTlVMTDsKKyAgICAgICAgRlhfRFdPUkQgc2l6ZSA9IDA7CisgICAgICAgIG1fcEZvbnRNZ3ItPkdldFN0YW5kYXJkRm9udChwRm9udERhdGEsIHNpemUsIDEyKTsKKyAgICAgICAgbV9Gb3hpdEZhY2VzWzEyXSA9IG1fcEZvbnRNZ3ItPkdldEZpeGVkRmFjZShwRm9udERhdGEsIHNpemUsIDApOworICAgICAgICByZXR1cm4gbV9Gb3hpdEZhY2VzWzEyXTsKKyAgICB9CisgICAgaWYgKFN1YnN0TmFtZSA9PSBGWF9CU1RSQygiWmFwZkRpbmdiYXRzIikpIHsKKyAgICAgICAgcFN1YnN0Rm9udC0+bV9GYW1pbHkgPSAiQ2hyb21lIERpbmdiYXRzIjsKKyAgICAgICAgcFN1YnN0Rm9udC0+bV9DaGFyc2V0ID0gRlhGT05UX1NZTUJPTF9DSEFSU0VUOworICAgICAgICBwU3Vic3RGb250LT5tX1N1YnN0RmxhZ3MgfD0gRlhGT05UX1NVQlNUX1NUQU5EQVJEOworICAgICAgICBpZiAobV9Gb3hpdEZhY2VzWzEzXSkgeworICAgICAgICAgICAgcmV0dXJuIG1fRm94aXRGYWNlc1sxM107CisgICAgICAgIH0KKyAgICAgICAgRlhfTFBDQllURSBwRm9udERhdGEgPSBOVUxMOworICAgICAgICBGWF9EV09SRCBzaXplID0gMDsKKyAgICAgICAgbV9wRm9udE1nci0+R2V0U3RhbmRhcmRGb250KHBGb250RGF0YSwgc2l6ZSwgMTMpOworICAgICAgICBtX0ZveGl0RmFjZXNbMTNdID0gbV9wRm9udE1nci0+R2V0Rml4ZWRGYWNlKHBGb250RGF0YSwgc2l6ZSwgMCk7CisgICAgICAgIHJldHVybiBtX0ZveGl0RmFjZXNbMTNdOworICAgIH0KKyAgICBpbnQgaUJhc2VGb250ID0gMDsKKyAgICBDRlhfQnl0ZVN0cmluZyBmYW1pbHksIHN0eWxlOworICAgIEZYX0JPT0wJYkhhc0NvbW1hID0gRkFMU0U7CisgICAgRlhfQk9PTCBiSGFzSHlwZW4gPSBGQUxTRTsKKyAgICBpbnQgZmluZCA9IFN1YnN0TmFtZS5GaW5kKEZYX0JTVFJDKCIsIiksIDApOworICAgIGlmIChmaW5kID49IDApIHsKKyAgICAgICAgZmFtaWx5ID0gU3Vic3ROYW1lLkxlZnQoZmluZCk7CisgICAgICAgIF9QREZfR2V0U3RhbmRhcmRGb250TmFtZShmYW1pbHkpOworICAgICAgICBzdHlsZSA9IFN1YnN0TmFtZS5NaWQoZmluZCArIDEpOworICAgICAgICBiSGFzQ29tbWEgPSBUUlVFOworICAgIH0gZWxzZSB7CisgICAgICAgIGZhbWlseSA9IFN1YnN0TmFtZTsKKyAgICB9CisgICAgZm9yICg7IGlCYXNlRm9udCA8IDEyOyBpQmFzZUZvbnQgKyspCisgICAgICAgIGlmIChmYW1pbHkgPT0gQ0ZYX0J5dGVTdHJpbmdDKGdfQmFzZTE0Rm9udE5hbWVzW2lCYXNlRm9udF0pKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIGludCBQaXRjaEZhbWlseSA9IDA7CisgICAgRlhfQk9PTCBiSXRhbGljID0gRkFMU0U7CisgICAgRlhfRFdPUkQgblN0eWxlID0gMDsKKyAgICBGWF9CT09MIGJTdHlsZUF2YWlsID0gRkFMU0U7CisgICAgRlhfQk9PTCBiRmFtaWx5U3R5bGVJc1dob2xlID0gRkFMU0U7CisgICAgRlhfQk9PTCBiTmV4dEYgPSBGQUxTRTsKKyAgICBpZiAoaUJhc2VGb250IDwgMTIpIHsKKyAgICAgICAgZmFtaWx5ID0gZ19CYXNlMTRGb250TmFtZXNbaUJhc2VGb250XTsKKyAgICAgICAgaWYgKChpQmFzZUZvbnQgJSA0KSA9PSAxIHx8IChpQmFzZUZvbnQgJSA0KSA9PSAyKSB7CisgICAgICAgICAgICBuU3R5bGUgfD0gRlhfRk9OVF9TVFlMRV9Cb2xkOworICAgICAgICB9CisgICAgICAgIGlmICgoaUJhc2VGb250ICUgNCkgLyAyKSB7CisgICAgICAgICAgICBuU3R5bGUgfD0gRlhfRk9OVF9TVFlMRV9JdGFsaWM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlCYXNlRm9udCA8IDQpIHsKKyAgICAgICAgICAgIFBpdGNoRmFtaWx5IHw9IEZYRk9OVF9GRl9GSVhFRFBJVENIOworICAgICAgICB9CisgICAgICAgIGlmIChpQmFzZUZvbnQgPj0gOCkgeworICAgICAgICAgICAgUGl0Y2hGYW1pbHkgfD0gRlhGT05UX0ZGX1JPTUFOOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFiSGFzQ29tbWEpIHsKKyAgICAgICAgICAgIGZpbmQgPSBmYW1pbHkuUmV2ZXJzZUZpbmQoJy0nKTsKKyAgICAgICAgICAgIGlmIChmaW5kID49IDApIHsKKyAgICAgICAgICAgICAgICBzdHlsZSA9IGZhbWlseS5NaWQoZmluZCArIDEpOworICAgICAgICAgICAgICAgIGZhbWlseSA9IGZhbWlseS5MZWZ0KGZpbmQpOworICAgICAgICAgICAgICAgIGJIYXNIeXBlbiA9IFRSVUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFiSGFzSHlwZW4pIHsKKyAgICAgICAgICAgIGludCBuTGVuID0gZmFtaWx5LkdldExlbmd0aCgpOworICAgICAgICAgICAgRlhfSU5UMzIgblJldCA9IEdldFN0eWxlVHlwZShmYW1pbHksIFRSVUUpOworICAgICAgICAgICAgaWYgKG5SZXQgPiAtMSkgeworICAgICAgICAgICAgICAgIGZhbWlseSA9IGZhbWlseS5MZWZ0KG5MZW4gLSBnX0ZvbnRTdHlsZXNbblJldF0ubGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoblJldCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIG5TdHlsZSB8PSBGWF9GT05UX1NUWUxFX0JvbGQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChuUmV0ID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgblN0eWxlIHw9IEZYX0ZPTlRfU1RZTEVfSXRhbGljOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoblJldCA9PSAyKSB7CisgICAgICAgICAgICAgICAgICAgIG5TdHlsZSB8PSAoRlhfRk9OVF9TVFlMRV9Cb2xkIHwgRlhfRk9OVF9TVFlMRV9JdGFsaWMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZmxhZ3MgJiBGWEZPTlRfU0VSSUYpIHsKKyAgICAgICAgICAgIFBpdGNoRmFtaWx5IHw9IEZYRk9OVF9GRl9ST01BTjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZmxhZ3MgJiBGWEZPTlRfU0NSSVBUKSB7CisgICAgICAgICAgICBQaXRjaEZhbWlseSB8PSBGWEZPTlRfRkZfU0NSSVBUOworICAgICAgICB9CisgICAgICAgIGlmIChmbGFncyAmIEZYRk9OVF9GSVhFRF9QSVRDSCkgeworICAgICAgICAgICAgUGl0Y2hGYW1pbHkgfD0gRlhGT05UX0ZGX0ZJWEVEUElUQ0g7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFzdHlsZS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgaW50IG5MZW4gPSBzdHlsZS5HZXRMZW5ndGgoKTsKKyAgICAgICAgRlhfTFBDU1RSIHBTdHlsZSA9IHN0eWxlOworICAgICAgICBpbnQgaSA9IDA7CisgICAgICAgIEZYX0JPT0wgYkZpcnN0SXRlbSA9IFRSVUU7CisgICAgICAgIENGWF9CeXRlU3RyaW5nIGJ1ZjsKKyAgICAgICAgd2hpbGUgKGkgPCBuTGVuKSB7CisgICAgICAgICAgICBidWYgPSBQYXJzZVN0eWxlKHBTdHlsZSwgbkxlbiwgaSk7CisgICAgICAgICAgICBGWF9JTlQzMiBuUmV0ID0gR2V0U3R5bGVUeXBlKGJ1ZiwgRkFMU0UpOworICAgICAgICAgICAgaWYgKChpICYmICFiU3R5bGVBdmFpbCkgfHwgKCFpICYmIG5SZXQgPCAwKSkgeworICAgICAgICAgICAgICAgIGZhbWlseSA9IFN1YnN0TmFtZTsKKyAgICAgICAgICAgICAgICBpQmFzZUZvbnQgPSAxMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoblJldCA+PSAwKSB7CisgICAgICAgICAgICAgICAgYlN0eWxlQXZhaWwgPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5SZXQgPT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChuU3R5bGUgJiBGWF9GT05UX1NUWUxFX0JvbGQpIHsKKyAgICAgICAgICAgICAgICAgICAgblN0eWxlIHw9IEZYX0ZPTlRfU1RZTEVfQm9sZEJvbGQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgblN0eWxlIHw9IEZYX0ZPTlRfU1RZTEVfQm9sZDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYkZpcnN0SXRlbSA9IEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5SZXQgPT0gMSkgeworICAgICAgICAgICAgICAgIGlmIChiRmlyc3RJdGVtKSB7CisgICAgICAgICAgICAgICAgICAgIG5TdHlsZSB8PSBGWF9GT05UX1NUWUxFX0l0YWxpYzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmYW1pbHkgPSBTdWJzdE5hbWU7CisgICAgICAgICAgICAgICAgICAgIGlCYXNlRm9udCA9IDEyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuUmV0ID09IDIpIHsKKyAgICAgICAgICAgICAgICBuU3R5bGUgfD0gRlhfRk9OVF9TVFlMRV9JdGFsaWM7CisgICAgICAgICAgICAgICAgaWYgKG5TdHlsZSAmIEZYX0ZPTlRfU1RZTEVfQm9sZCkgeworICAgICAgICAgICAgICAgICAgICBuU3R5bGUgfD0gRlhfRk9OVF9TVFlMRV9Cb2xkQm9sZDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBuU3R5bGUgfD0gRlhfRk9OVF9TVFlMRV9Cb2xkOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBiRmlyc3RJdGVtID0gRkFMU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IGJ1Zi5HZXRMZW5ndGgoKSArIDE7CisgICAgICAgIH0KKyAgICB9CisgICAgd2VpZ2h0ID0gd2VpZ2h0ID8gd2VpZ2h0IDogRlhGT05UX0ZXX05PUk1BTDsKKyAgICBpbnQgb2xkX3dlaWdodCA9IHdlaWdodDsKKyAgICBpZiAoblN0eWxlKSB7CisgICAgICAgIHdlaWdodCA9IG5TdHlsZSAmIEZYX0ZPTlRfU1RZTEVfQm9sZEJvbGQgPyA5MDAgOiAoblN0eWxlICYgRlhfRk9OVF9TVFlMRV9Cb2xkID8gRlhGT05UX0ZXX0JPTEQgOiBGWEZPTlRfRldfTk9STUFMKTsKKyAgICB9CisgICAgaWYgKG5TdHlsZSAmIEZYX0ZPTlRfU1RZTEVfSXRhbGljKSB7CisgICAgICAgIGJJdGFsaWMgPSBUUlVFOworICAgIH0KKyAgICBGWF9CT09MIGJDSksgPSBGQUxTRTsKKyAgICBGWF9CT09MIGJFeGFjdCA9IEZBTFNFOworICAgIGludCBDaGFyc2V0ID0gRlhGT05UX0FOU0lfQ0hBUlNFVDsKKyAgICBpZiAoV2luZG93Q1ApIHsKKyAgICAgICAgQ2hhcnNldCA9IF9HZXRDaGFyc2V0RnJvbUNvZGVQYWdlKFdpbmRvd0NQKTsKKyAgICB9IGVsc2UgaWYgKGlCYXNlRm9udCA9PSAxMiAmJiAoZmxhZ3MgJiBGWEZPTlRfU1lNQk9MSUMpKSB7CisgICAgICAgIENoYXJzZXQgPSBGWEZPTlRfU1lNQk9MX0NIQVJTRVQ7CisgICAgfQorICAgIGlmIChDaGFyc2V0ID09IEZYRk9OVF9TSElGVEpJU19DSEFSU0VUIHx8IENoYXJzZXQgPT0gRlhGT05UX0dCMjMxMl9DSEFSU0VUIHx8CisgICAgICAgICAgICBDaGFyc2V0ID09IEZYRk9OVF9IQU5HRVVMX0NIQVJTRVQgfHwgQ2hhcnNldCA9PSBGWEZPTlRfQ0hJTkVTRUJJRzVfQ0hBUlNFVCkgeworICAgICAgICBiQ0pLID0gVFJVRTsKKyAgICB9CisgICAgaWYgKG1fcEZvbnRJbmZvID09IE5VTEwpIHsKKyAgICAgICAgcFN1YnN0Rm9udC0+bV9TdWJzdEZsYWdzIHw9IEZYRk9OVF9TVUJTVF9TVEFOREFSRDsKKyAgICAgICAgcmV0dXJuIFVzZUludGVybmFsU3Vic3QocFN1YnN0Rm9udCwgaUJhc2VGb250LCBpdGFsaWNfYW5nbGUsIG9sZF93ZWlnaHQsIFBpdGNoRmFtaWx5KTsKKyAgICB9CisgICAgZmFtaWx5ID0gX0dldEZvbnRGYW1pbHkoZmFtaWx5LCBuU3R5bGUpOworICAgIENGWF9CeXRlU3RyaW5nIG1hdGNoID0gTWF0Y2hJbnN0YWxsZWRGb250cyhfVFRfTm9ybWFsaXplTmFtZShmYW1pbHkpKTsKKyAgICBpZiAobWF0Y2guSXNFbXB0eSgpICYmIGZhbWlseSAhPSBTdWJzdE5hbWUgJiYgKCFiSGFzQ29tbWEgJiYgKCFiSGFzSHlwZW4gfHwgKGJIYXNIeXBlbiAmJiAhYlN0eWxlQXZhaWwpKSkpIHsKKyAgICAgICAgbWF0Y2ggPSBNYXRjaEluc3RhbGxlZEZvbnRzKF9UVF9Ob3JtYWxpemVOYW1lKFN1YnN0TmFtZSkpOworICAgIH0KKyAgICBpZiAobWF0Y2guSXNFbXB0eSgpICYmIGlCYXNlRm9udCA+PSAxMikgeworICAgICAgICBpZiAoIWJDSkspIHsKKyAgICAgICAgICAgIGlmICghQ2hlY2tTdXBwb3J0VGhpcmRQYXJ0Rm9udChmYW1pbHksIFBpdGNoRmFtaWx5KSkgeworICAgICAgICAgICAgICAgIGlmIChpdGFsaWNfYW5nbGUgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBiSXRhbGljID0gVFJVRTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBiSXRhbGljID0gRkFMU0U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdlaWdodCA9IG9sZF93ZWlnaHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwU3Vic3RGb250LT5tX2JTdWJzdE9mQ0pLID0gVFJVRTsKKyAgICAgICAgICAgIGlmIChuU3R5bGUpIHsKKyAgICAgICAgICAgICAgICBwU3Vic3RGb250LT5tX1dlaWdodENKSyA9IHdlaWdodDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcFN1YnN0Rm9udC0+bV9XZWlnaHRDSksgPSBGWEZPTlRfRldfTk9STUFMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5TdHlsZSAmIEZYX0ZPTlRfU1RZTEVfSXRhbGljKSB7CisgICAgICAgICAgICAgICAgcFN1YnN0Rm9udC0+bV9iSXRsaWNDSksgPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaXRhbGljX2FuZ2xlID0gMDsKKyAgICAgICAgd2VpZ2h0ID0gblN0eWxlICYgRlhfRk9OVF9TVFlMRV9Cb2xkQm9sZCA/IDkwMCA6IChuU3R5bGUgJiBGWF9GT05UX1NUWUxFX0JvbGQgPyBGWEZPTlRfRldfQk9MRCA6IEZYRk9OVF9GV19OT1JNQUwpOworICAgIH0KKyAgICBpZiAoIW1hdGNoLklzRW1wdHkoKSB8fCBpQmFzZUZvbnQgPCAxMikgeworICAgICAgICBwU3Vic3RGb250LT5tX1N1YnN0RmxhZ3MgfD0gRlhGT05UX1NVQlNUX0VYQUNUOworICAgICAgICBpZiAoIW1hdGNoLklzRW1wdHkoKSkgeworICAgICAgICAgICAgZmFtaWx5ID0gbWF0Y2g7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlCYXNlRm9udCA8IDEyKSB7CisgICAgICAgICAgICBpZiAoblN0eWxlICYmICEoaUJhc2VGb250ICUgNCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoKG5TdHlsZSAmIDB4MykgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBpQmFzZUZvbnQgKz0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKChuU3R5bGUgJiAweDMpID09IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgaUJhc2VGb250ICs9IDM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgoblN0eWxlICYgMHgzKSA9PSAzKSB7CisgICAgICAgICAgICAgICAgICAgIGlCYXNlRm9udCArPSAyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX3BGb250TWdyLT5tX0V4dGVybmFsRm9udHNbaUJhc2VGb250XS5tX3BGb250RGF0YSkgeworICAgICAgICAgICAgICAgIGlmIChtX0ZveGl0RmFjZXNbaUJhc2VGb250XSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9Gb3hpdEZhY2VzW2lCYXNlRm9udF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fRm94aXRGYWNlc1tpQmFzZUZvbnRdID0gbV9wRm9udE1nci0+R2V0Rml4ZWRGYWNlKG1fcEZvbnRNZ3ItPm1fRXh0ZXJuYWxGb250c1tpQmFzZUZvbnRdLm1fcEZvbnREYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wRm9udE1nci0+bV9FeHRlcm5hbEZvbnRzW2lCYXNlRm9udF0ubV9kd1NpemUsIDApOworICAgICAgICAgICAgICAgIGlmIChtX0ZveGl0RmFjZXNbaUJhc2VGb250XSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9Gb3hpdEZhY2VzW2lCYXNlRm9udF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmYW1pbHkgPSBnX0Jhc2UxNEZvbnROYW1lc1tpQmFzZUZvbnRdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcFN1YnN0Rm9udC0+bV9TdWJzdEZsYWdzIHw9IEZYRk9OVF9TVUJTVF9TVEFOREFSRDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChmbGFncyAmIEZYRk9OVF9JVEFMSUMpIHsKKyAgICAgICAgICAgIGJJdGFsaWMgPSBUUlVFOworICAgICAgICB9CisgICAgfQorICAgIGJFeGFjdCA9ICFtYXRjaC5Jc0VtcHR5KCk7CisgICAgdm9pZCogaEZvbnQgPSBtX3BGb250SW5mby0+TWFwRm9udCh3ZWlnaHQsIGJJdGFsaWMsIENoYXJzZXQsIFBpdGNoRmFtaWx5LCBmYW1pbHksIGJFeGFjdCk7CisgICAgaWYgKGJFeGFjdCkgeworICAgICAgICBwU3Vic3RGb250LT5tX1N1YnN0RmxhZ3MgfD0gRlhGT05UX1NVQlNUX0VYQUNUOworICAgIH0KKyAgICBpZiAoaEZvbnQgPT0gTlVMTCkgeworICAgICAgICBpZiAoYkNKSykgeworICAgICAgICAgICAgaWYgKGl0YWxpY19hbmdsZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgYkl0YWxpYyA9IFRSVUU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJJdGFsaWMgPSBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdlaWdodCA9IG9sZF93ZWlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFtYXRjaC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGhGb250ID0gbV9wRm9udEluZm8tPkdldEZvbnQobWF0Y2gpOworICAgICAgICAgICAgaWYgKGhGb250ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gVXNlSW50ZXJuYWxTdWJzdChwU3Vic3RGb250LCBpQmFzZUZvbnQsIGl0YWxpY19hbmdsZSwgb2xkX3dlaWdodCwgUGl0Y2hGYW1pbHkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKENoYXJzZXQgPT0gRlhGT05UX1NZTUJPTF9DSEFSU0VUKSB7CisjaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfIHx8IF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FORFJPSURfCisgICAgICAgICAgICAgICAgaWYgKFN1YnN0TmFtZSA9PSBGWF9CU1RSQygiU3ltYm9sIikpIHsKKyAgICAgICAgICAgICAgICAgICAgcFN1YnN0Rm9udC0+bV9GYW1pbHkgPSAiQ2hyb21lIFN5bWJvbCI7CisgICAgICAgICAgICAgICAgICAgIHBTdWJzdEZvbnQtPm1fU3Vic3RGbGFncyB8PSBGWEZPTlRfU1VCU1RfU1RBTkRBUkQ7CisgICAgICAgICAgICAgICAgICAgIHBTdWJzdEZvbnQtPm1fQ2hhcnNldCA9IEZYRk9OVF9TWU1CT0xfQ0hBUlNFVDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fRm94aXRGYWNlc1sxMl0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX0ZveGl0RmFjZXNbMTJdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEZYX0xQQ0JZVEUgcEZvbnREYXRhID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgc2l6ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgIG1fcEZvbnRNZ3ItPkdldFN0YW5kYXJkRm9udChwRm9udERhdGEsIHNpemUsIDEyKTsKKyAgICAgICAgICAgICAgICAgICAgbV9Gb3hpdEZhY2VzWzEyXSA9IG1fcEZvbnRNZ3ItPkdldEZpeGVkRmFjZShwRm9udERhdGEsIHNpemUsIDApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9Gb3hpdEZhY2VzWzEyXTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwU3Vic3RGb250LT5tX1N1YnN0RmxhZ3MgfD0gRlhGT05UX1NVQlNUX05PTlNZTUJPTDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZpbmRTdWJzdEZvbnQoZmFtaWx5LCBiVHJ1ZVR5cGUsIGZsYWdzICYgfkZYRk9OVF9TWU1CT0xJQywgd2VpZ2h0LCBpdGFsaWNfYW5nbGUsIDAsIHBTdWJzdEZvbnQpOworICAgICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICAgICAgcFN1YnN0Rm9udC0+bV9TdWJzdEZsYWdzIHw9IEZYRk9OVF9TVUJTVF9OT05TWU1CT0w7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZpbmRTdWJzdEZvbnQoZmFtaWx5LCBiVHJ1ZVR5cGUsIGZsYWdzICYgfkZYRk9OVF9TWU1CT0xJQywgd2VpZ2h0LCBpdGFsaWNfYW5nbGUsIDAsIHBTdWJzdEZvbnQpOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoQ2hhcnNldCA9PSBGWEZPTlRfQU5TSV9DSEFSU0VUKSB7CisgICAgICAgICAgICAgICAgcFN1YnN0Rm9udC0+bV9TdWJzdEZsYWdzIHw9IEZYRk9OVF9TVUJTVF9TVEFOREFSRDsKKyAgICAgICAgICAgICAgICByZXR1cm4gVXNlSW50ZXJuYWxTdWJzdChwU3Vic3RGb250LCBpQmFzZUZvbnQsIGl0YWxpY19hbmdsZSwgb2xkX3dlaWdodCwgUGl0Y2hGYW1pbHkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGluZGV4ID0gbV9DaGFyc2V0QXJyYXkuRmluZChDaGFyc2V0KTsKKyAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gVXNlSW50ZXJuYWxTdWJzdChwU3Vic3RGb250LCBpQmFzZUZvbnQsIGl0YWxpY19hbmdsZSwgb2xkX3dlaWdodCwgUGl0Y2hGYW1pbHkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBoRm9udCA9IG1fcEZvbnRJbmZvLT5HZXRGb250KG1fRmFjZUFycmF5W2luZGV4XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcFN1YnN0Rm9udC0+bV9FeHRIYW5kbGUgPSBtX3BGb250SW5mby0+UmV0YWluRm9udChoRm9udCk7CisgICAgaWYgKGhGb250ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG1fcEZvbnRJbmZvLT5HZXRGYWNlTmFtZShoRm9udCwgU3Vic3ROYW1lKTsKKyAgICBpZiAoQ2hhcnNldCA9PSBGWEZPTlRfREVGQVVMVF9DSEFSU0VUKSB7CisgICAgICAgIG1fcEZvbnRJbmZvLT5HZXRGb250Q2hhcnNldChoRm9udCwgQ2hhcnNldCk7CisgICAgfQorICAgIEZYX0RXT1JEIHR0Y19zaXplID0gbV9wRm9udEluZm8tPkdldEZvbnREYXRhKGhGb250LCAweDc0NzQ2MzY2LCBOVUxMLCAwKTsKKyAgICBGWF9EV09SRCBmb250X3NpemUgPSBtX3BGb250SW5mby0+R2V0Rm9udERhdGEoaEZvbnQsIDAsIE5VTEwsIDApOworICAgIGlmKGZvbnRfc2l6ZSA9PSAwICYmIHR0Y19zaXplID09IDApIHsKKyAgICAgICAgbV9wRm9udEluZm8tPkRlbGV0ZUZvbnQoaEZvbnQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgRlhGVF9GYWNlIGZhY2UgPSBOVUxMOworICAgIGlmICh0dGNfc2l6ZSkgeworICAgICAgICBGWF9CWVRFIHRlbXBbMTAyNF07CisgICAgICAgIG1fcEZvbnRJbmZvLT5HZXRGb250RGF0YShoRm9udCwgMHg3NDc0NjM2NiwgdGVtcCwgMTAyNCk7CisgICAgICAgIEZYX0RXT1JEIGNoZWNrc3VtID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsKKyAgICAgICAgICAgIGNoZWNrc3VtICs9ICgoRlhfRFdPUkQqKXRlbXApW2ldOworICAgICAgICB9CisgICAgICAgIEZYX0xQQllURSBwRm9udERhdGE7CisgICAgICAgIGZhY2UgPSBtX3BGb250TWdyLT5HZXRDYWNoZWRUVENGYWNlKHR0Y19zaXplLCBjaGVja3N1bSwgdHRjX3NpemUgLSBmb250X3NpemUsIHBGb250RGF0YSk7CisgICAgICAgIGlmIChmYWNlID09IE5VTEwpIHsKKyAgICAgICAgICAgIHBGb250RGF0YSA9IEZYX0FsbG9jKEZYX0JZVEUsIHR0Y19zaXplKTsKKyAgICAgICAgICAgIGlmIChwRm9udERhdGEpIHsKKyAgICAgICAgICAgICAgICBtX3BGb250SW5mby0+R2V0Rm9udERhdGEoaEZvbnQsIDB4NzQ3NDYzNjYsIHBGb250RGF0YSwgdHRjX3NpemUpOworICAgICAgICAgICAgICAgIGZhY2UgPSBtX3BGb250TWdyLT5BZGRDYWNoZWRUVENGYWNlKHR0Y19zaXplLCBjaGVja3N1bSwgcEZvbnREYXRhLCB0dGNfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGNfc2l6ZSAtIGZvbnRfc2l6ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBGWF9MUEJZVEUgcEZvbnREYXRhOworICAgICAgICBmYWNlID0gbV9wRm9udE1nci0+R2V0Q2FjaGVkRmFjZShTdWJzdE5hbWUsIHdlaWdodCwgYkl0YWxpYywgcEZvbnREYXRhKTsKKyAgICAgICAgaWYgKGZhY2UgPT0gTlVMTCkgeworICAgICAgICAgICAgcEZvbnREYXRhID0gRlhfQWxsb2MoRlhfQllURSwgZm9udF9zaXplKTsKKyAgICAgICAgICAgIGlmICghcEZvbnREYXRhKSB7CisgICAgICAgICAgICAgICAgbV9wRm9udEluZm8tPkRlbGV0ZUZvbnQoaEZvbnQpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9wRm9udEluZm8tPkdldEZvbnREYXRhKGhGb250LCAwLCBwRm9udERhdGEsIGZvbnRfc2l6ZSk7CisgICAgICAgICAgICBmYWNlID0gbV9wRm9udE1nci0+QWRkQ2FjaGVkRmFjZShTdWJzdE5hbWUsIHdlaWdodCwgYkl0YWxpYywgcEZvbnREYXRhLCBmb250X3NpemUsIG1fcEZvbnRJbmZvLT5HZXRGYWNlSW5kZXgoaEZvbnQpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZmFjZSA9PSBOVUxMKSB7CisgICAgICAgIG1fcEZvbnRJbmZvLT5EZWxldGVGb250KGhGb250KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBTdWJzdEZvbnQtPm1fRmFtaWx5ID0gU3Vic3ROYW1lOworICAgIHBTdWJzdEZvbnQtPm1fQ2hhcnNldCA9IENoYXJzZXQ7CisgICAgRlhfQk9PTCBiTmVlZFVwZGF0ZVdlaWdodCA9IEZBTFNFOworICAgIGlmIChGWEZUX0lzX0ZhY2VfQm9sZChmYWNlKSkgeworICAgICAgICBpZiAod2VpZ2h0ID09IEZYRk9OVF9GV19CT0xEKSB7CisgICAgICAgICAgICBiTmVlZFVwZGF0ZVdlaWdodCA9IEZBTFNFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYk5lZWRVcGRhdGVXZWlnaHQgPSBUUlVFOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHdlaWdodCA9PSBGWEZPTlRfRldfTk9STUFMKSB7CisgICAgICAgICAgICBiTmVlZFVwZGF0ZVdlaWdodCA9IEZBTFNFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYk5lZWRVcGRhdGVXZWlnaHQgPSBUUlVFOworICAgICAgICB9CisgICAgfQorICAgIGlmIChiTmVlZFVwZGF0ZVdlaWdodCkgeworICAgICAgICBwU3Vic3RGb250LT5tX1dlaWdodCA9IHdlaWdodDsKKyAgICB9CisgICAgaWYgKGJJdGFsaWMgJiYgIUZYRlRfSXNfRmFjZV9JdGFsaWMoZmFjZSkpIHsKKyAgICAgICAgaWYgKGl0YWxpY19hbmdsZSA9PSAwKSB7CisgICAgICAgICAgICBpdGFsaWNfYW5nbGUgPSAtMTI7CisgICAgICAgIH0gZWxzZSBpZiAoRlhTWVNfYWJzKGl0YWxpY19hbmdsZSkgPCA1KSB7CisgICAgICAgICAgICBpdGFsaWNfYW5nbGUgPSAwOworICAgICAgICB9CisgICAgICAgIHBTdWJzdEZvbnQtPm1fSXRhbGljQW5nbGUgPSBpdGFsaWNfYW5nbGU7CisgICAgfQorICAgIG1fcEZvbnRJbmZvLT5EZWxldGVGb250KGhGb250KTsKKyAgICByZXR1cm4gZmFjZTsKK30KK2V4dGVybiAiQyIgeworICAgIHVuc2lnbmVkIGxvbmcgX0ZUU3RyZWFtUmVhZChGWEZUX1N0cmVhbSBzdHJlYW0sIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQpOworICAgIHZvaWQgX0ZUU3RyZWFtQ2xvc2UoRlhGVF9TdHJlYW0gc3RyZWFtKTsKK307CitDRm9udEZpbGVGYWNlSW5mbzo6Q0ZvbnRGaWxlRmFjZUluZm8oKQoreworICAgIG1fcEZpbGUgPSBOVUxMOworICAgIG1fRmFjZSA9IE5VTEw7CisgICAgbV9DaGFyc2V0cyA9IDA7CisgICAgbV9GaWxlU2l6ZSA9IDA7CisgICAgbV9Gb250T2Zmc2V0ID0gMDsKKyAgICBtX1dlaWdodCA9IDA7CisgICAgbV9iSXRhbGljID0gRkFMU0U7CisgICAgbV9QaXRjaEZhbWlseSA9IDA7Cit9CitDRm9udEZpbGVGYWNlSW5mbzo6fkNGb250RmlsZUZhY2VJbmZvKCkKK3sKKyAgICBpZiAobV9GYWNlKSB7CisgICAgICAgIEZYRlRfRG9uZV9GYWNlKG1fRmFjZSk7CisgICAgfQorICAgIG1fRmFjZSA9IE5VTEw7Cit9CitleHRlcm4gRlhfQk9PTCBfTG9hZEZpbGUoRlhGVF9MaWJyYXJ5IGxpYnJhcnksIEZYRlRfRmFjZSogRmFjZSwgSUZYX0ZpbGVSZWFkKiBwRmlsZSwgRlhGVF9TdHJlYW0qIHN0cmVhbSk7CisjaWYgZGVmaW5lZChfRlBERkFQSV9NSU5JXykgfHwgX0ZYX09TXyA9PSBfRlhfQU5EUk9JRF8KK0lGWF9TeXN0ZW1Gb250SW5mbyogSUZYX1N5c3RlbUZvbnRJbmZvOjpDcmVhdGVEZWZhdWx0KCkKK3sKKyAgICByZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorI2lmICFkZWZpbmVkKF9GUERGQVBJX01JTklfKQorQ0ZYX0ZvbGRlckZvbnRJbmZvOjpDRlhfRm9sZGVyRm9udEluZm8oKQoreworfQorQ0ZYX0ZvbGRlckZvbnRJbmZvOjp+Q0ZYX0ZvbGRlckZvbnRJbmZvKCkKK3sKKyAgICBGWF9QT1NJVElPTiBwb3MgPSBtX0ZvbnRMaXN0LkdldFN0YXJ0UG9zaXRpb24oKTsKKyAgICB3aGlsZSAocG9zKSB7CisgICAgICAgIENGWF9CeXRlU3RyaW5nIGtleTsKKyAgICAgICAgRlhfTFBWT0lEIHZhbHVlOworICAgICAgICBtX0ZvbnRMaXN0LkdldE5leHRBc3NvYyhwb3MsIGtleSwgdmFsdWUpOworICAgICAgICBkZWxldGUgKENGb250RmFjZUluZm8qKXZhbHVlOworICAgIH0KK30KK3ZvaWQgQ0ZYX0ZvbGRlckZvbnRJbmZvOjpBZGRQYXRoKEZYX0JTVFIgcGF0aCkKK3sKKyAgICBtX1BhdGhMaXN0LkFkZChwYXRoKTsKK30KK3ZvaWQgQ0ZYX0ZvbGRlckZvbnRJbmZvOjpSZWxlYXNlKCkKK3sKKyAgICBkZWxldGUgdGhpczsKK30KK0ZYX0JPT0wgQ0ZYX0ZvbGRlckZvbnRJbmZvOjpFbnVtRm9udExpc3QoQ0ZYX0ZvbnRNYXBwZXIqIHBNYXBwZXIpCit7CisgICAgbV9wTWFwcGVyID0gcE1hcHBlcjsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fUGF0aExpc3QuR2V0U2l6ZSgpOyBpICsrKSB7CisgICAgICAgIFNjYW5QYXRoKG1fUGF0aExpc3RbaV0pOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK3ZvaWQgQ0ZYX0ZvbGRlckZvbnRJbmZvOjpTY2FuUGF0aChDRlhfQnl0ZVN0cmluZyYgcGF0aCkKK3sKKyAgICB2b2lkKiBoYW5kbGUgPSBGWF9PcGVuRm9sZGVyKHBhdGgpOworICAgIGlmIChoYW5kbGUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIGZpbGVuYW1lOworICAgIEZYX0JPT0wgYkZvbGRlcjsKKyAgICB3aGlsZSAoRlhfR2V0TmV4dEZpbGUoaGFuZGxlLCBmaWxlbmFtZSwgYkZvbGRlcikpIHsKKyAgICAgICAgaWYgKGJGb2xkZXIpIHsKKyAgICAgICAgICAgIGlmIChmaWxlbmFtZSA9PSAiLiIgfHwgZmlsZW5hbWUgPT0gIi4uIikgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgZXh0ID0gZmlsZW5hbWUuUmlnaHQoNCk7CisgICAgICAgICAgICBleHQuTWFrZVVwcGVyKCk7CisgICAgICAgICAgICBpZiAoZXh0ICE9ICIuVFRGIiAmJiBleHQgIT0gIi5PVEYiICYmIGV4dCAhPSAiLlRUQyIpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBDRlhfQnl0ZVN0cmluZyBmdWxscGF0aCA9IHBhdGg7CisjaWYgX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fV0lORE9XU18KKyAgICAgICAgZnVsbHBhdGggKz0gIlxcIjsKKyNlbHNlCisgICAgICAgIGZ1bGxwYXRoICs9ICIvIjsKKyNlbmRpZgorICAgICAgICBmdWxscGF0aCArPSBmaWxlbmFtZTsKKyAgICAgICAgaWYgKGJGb2xkZXIpIHsKKyAgICAgICAgICAgIFNjYW5QYXRoKGZ1bGxwYXRoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFNjYW5GaWxlKGZ1bGxwYXRoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBGWF9DbG9zZUZvbGRlcihoYW5kbGUpOworfQordm9pZCBDRlhfRm9sZGVyRm9udEluZm86OlNjYW5GaWxlKENGWF9CeXRlU3RyaW5nJiBwYXRoKQoreworICAgIEZYU1lTX0ZJTEUqIHBGaWxlID0gRlhTWVNfZm9wZW4ocGF0aCwgInJiIik7CisgICAgaWYgKHBGaWxlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGWFNZU19mc2VlayhwRmlsZSwgMCwgRlhTWVNfU0VFS19FTkQpOworICAgIEZYX0RXT1JEIGZpbGVzaXplID0gRlhTWVNfZnRlbGwocEZpbGUpOworICAgIEZYX0JZVEUgYnVmZmVyWzE2XTsKKyAgICBGWFNZU19mc2VlayhwRmlsZSwgMCwgRlhTWVNfU0VFS19TRVQpOworICAgIHNpemVfdCByZWFkQ250ID0gRlhTWVNfZnJlYWQoYnVmZmVyLCAxMiwgMSwgcEZpbGUpOworICAgIGlmIChHRVRfVFRfTE9ORyhidWZmZXIpID09IDB4NzQ3NDYzNjYpIHsKKyAgICAgICAgRlhfRFdPUkQgbkZhY2VzID0gR0VUX1RUX0xPTkcoYnVmZmVyICsgOCk7CisgICAgICAgIEZYX0xQQllURSBvZmZzZXRzID0gRlhfQWxsb2MoRlhfQllURSwgbkZhY2VzICogNCk7CisgICAgICAgIGlmICghb2Zmc2V0cykgeworICAgICAgICAgICAgRlhTWVNfZmNsb3NlKHBGaWxlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICByZWFkQ250ID0gRlhTWVNfZnJlYWQob2Zmc2V0cywgbkZhY2VzICogNCwgMSwgcEZpbGUpOworICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgbkZhY2VzOyBpICsrKSB7CisgICAgICAgICAgICBGWF9MUEJZVEUgcCA9IG9mZnNldHMgKyBpICogNDsKKyAgICAgICAgICAgIFJlcG9ydEZhY2UocGF0aCwgcEZpbGUsIGZpbGVzaXplLCBHRVRfVFRfTE9ORyhwKSk7CisgICAgICAgIH0KKyAgICAgICAgRlhfRnJlZShvZmZzZXRzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBSZXBvcnRGYWNlKHBhdGgsIHBGaWxlLCBmaWxlc2l6ZSwgMCk7CisgICAgfQorICAgIEZYU1lTX2ZjbG9zZShwRmlsZSk7Cit9Cit2b2lkIENGWF9Gb2xkZXJGb250SW5mbzo6UmVwb3J0RmFjZShDRlhfQnl0ZVN0cmluZyYgcGF0aCwgRlhTWVNfRklMRSogcEZpbGUsIEZYX0RXT1JEIGZpbGVzaXplLCBGWF9EV09SRCBvZmZzZXQpCit7CisgICAgRlhTWVNfZnNlZWsocEZpbGUsIG9mZnNldCwgRlhTWVNfU0VFS19TRVQpOworICAgIGNoYXIgYnVmZmVyWzE2XTsKKyAgICBpZiAoIUZYU1lTX2ZyZWFkKGJ1ZmZlciwgMTIsIDEsIHBGaWxlKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEZYX0RXT1JEIG5UYWJsZXMgPSBHRVRfVFRfU0hPUlQoYnVmZmVyICsgNCk7CisgICAgQ0ZYX0J5dGVTdHJpbmcgdGFibGVzID0gX0ZQREZfUmVhZFN0cmluZ0Zyb21GaWxlKHBGaWxlLCBuVGFibGVzICogMTYpOworICAgIENGWF9CeXRlU3RyaW5nIG5hbWVzID0gX0ZQREZfTG9hZFRhYmxlRnJvbVRUKHBGaWxlLCB0YWJsZXMsIG5UYWJsZXMsIDB4NmU2MTZkNjUpOworICAgIENGWF9CeXRlU3RyaW5nIGZhY2VuYW1lID0gX0ZQREZfR2V0TmFtZUZyb21UVChuYW1lcywgMSk7CisgICAgQ0ZYX0J5dGVTdHJpbmcgc3R5bGUgPSBfRlBERl9HZXROYW1lRnJvbVRUKG5hbWVzLCAyKTsKKyAgICBpZiAoc3R5bGUgIT0gIlJlZ3VsYXIiKSB7CisgICAgICAgIGZhY2VuYW1lICs9ICIgIiArIHN0eWxlOworICAgIH0KKyAgICBGWF9MUFZPSUQgcDsKKyAgICBpZiAobV9Gb250TGlzdC5Mb29rdXAoZmFjZW5hbWUsIHApKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgQ0ZvbnRGYWNlSW5mbyogcEluZm8gPSBGWF9ORVcgQ0ZvbnRGYWNlSW5mbzsKKyAgICBpZiAoIXBJbmZvKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcEluZm8tPm1fRmlsZVBhdGggPSBwYXRoOworICAgIHBJbmZvLT5tX0ZhY2VOYW1lID0gZmFjZW5hbWU7CisgICAgcEluZm8tPm1fRm9udFRhYmxlcyA9IHRhYmxlczsKKyAgICBwSW5mby0+bV9Gb250T2Zmc2V0ID0gb2Zmc2V0OworICAgIHBJbmZvLT5tX0ZpbGVTaXplID0gZmlsZXNpemU7CisgICAgcEluZm8tPm1fQ2hhcnNldHMgPSAwOworICAgIENGWF9CeXRlU3RyaW5nIG9zMiA9IF9GUERGX0xvYWRUYWJsZUZyb21UVChwRmlsZSwgdGFibGVzLCBuVGFibGVzLCAweDRmNTMyZjMyKTsKKyAgICBpZiAob3MyLkdldExlbmd0aCgpID49IDg2KSB7CisgICAgICAgIEZYX0xQQ0JZVEUgcCA9IChGWF9MUENCWVRFKW9zMiArIDc4OworICAgICAgICBGWF9EV09SRCBjb2RlcGFnZXMgPSBHRVRfVFRfTE9ORyhwKTsKKyAgICAgICAgaWYgKGNvZGVwYWdlcyAmICgxIDw8IDE3KSkgeworICAgICAgICAgICAgbV9wTWFwcGVyLT5BZGRJbnN0YWxsZWRGb250KGZhY2VuYW1lLCBGWEZPTlRfU0hJRlRKSVNfQ0hBUlNFVCk7CisgICAgICAgICAgICBwSW5mby0+bV9DaGFyc2V0cyB8PSBDSEFSU0VUX0ZMQUdfU0hJRlRKSVM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvZGVwYWdlcyAmICgxIDw8IDE4KSkgeworICAgICAgICAgICAgbV9wTWFwcGVyLT5BZGRJbnN0YWxsZWRGb250KGZhY2VuYW1lLCBGWEZPTlRfR0IyMzEyX0NIQVJTRVQpOworICAgICAgICAgICAgcEluZm8tPm1fQ2hhcnNldHMgfD0gQ0hBUlNFVF9GTEFHX0dCOworICAgICAgICB9CisgICAgICAgIGlmIChjb2RlcGFnZXMgJiAoMSA8PCAyMCkpIHsKKyAgICAgICAgICAgIG1fcE1hcHBlci0+QWRkSW5zdGFsbGVkRm9udChmYWNlbmFtZSwgRlhGT05UX0NISU5FU0VCSUc1X0NIQVJTRVQpOworICAgICAgICAgICAgcEluZm8tPm1fQ2hhcnNldHMgfD0gQ0hBUlNFVF9GTEFHX0JJRzU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChjb2RlcGFnZXMgJiAoMSA8PCAxOSkpIHx8IChjb2RlcGFnZXMgJiAoMSA8PCAyMSkpKSB7CisgICAgICAgICAgICBtX3BNYXBwZXItPkFkZEluc3RhbGxlZEZvbnQoZmFjZW5hbWUsIEZYRk9OVF9IQU5HRVVMX0NIQVJTRVQpOworICAgICAgICAgICAgcEluZm8tPm1fQ2hhcnNldHMgfD0gQ0hBUlNFVF9GTEFHX0tPUkVBTjsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29kZXBhZ2VzICYgKDEgPDwgMzEpKSB7CisgICAgICAgICAgICBtX3BNYXBwZXItPkFkZEluc3RhbGxlZEZvbnQoZmFjZW5hbWUsIEZYRk9OVF9TWU1CT0xfQ0hBUlNFVCk7CisgICAgICAgICAgICBwSW5mby0+bV9DaGFyc2V0cyB8PSBDSEFSU0VUX0ZMQUdfU1lNQk9MOworICAgICAgICB9CisgICAgfQorICAgIG1fcE1hcHBlci0+QWRkSW5zdGFsbGVkRm9udChmYWNlbmFtZSwgRlhGT05UX0FOU0lfQ0hBUlNFVCk7CisgICAgcEluZm8tPm1fQ2hhcnNldHMgfD0gQ0hBUlNFVF9GTEFHX0FOU0k7CisgICAgcEluZm8tPm1fU3R5bGVzID0gMDsKKyAgICBpZiAoc3R5bGUuRmluZChGWF9CU1RSQygiQm9sZCIpKSA+IC0xKSB7CisgICAgICAgIHBJbmZvLT5tX1N0eWxlcyB8PSBGWEZPTlRfQk9MRDsKKyAgICB9CisgICAgaWYgKHN0eWxlLkZpbmQoRlhfQlNUUkMoIkl0YWxpYyIpKSA+IC0xIHx8IHN0eWxlLkZpbmQoRlhfQlNUUkMoIk9ibGlxdWUiKSkgPiAtMSkgeworICAgICAgICBwSW5mby0+bV9TdHlsZXMgfD0gRlhGT05UX0lUQUxJQzsKKyAgICB9CisgICAgaWYgKGZhY2VuYW1lLkZpbmQoRlhfQlNUUkMoIlNlcmlmIikpID4gLTEpIHsKKyAgICAgICAgcEluZm8tPm1fU3R5bGVzIHw9IEZYRk9OVF9TRVJJRjsKKyAgICB9CisgICAgbV9Gb250TGlzdC5TZXRBdChmYWNlbmFtZSwgcEluZm8pOworfQordm9pZCogQ0ZYX0ZvbGRlckZvbnRJbmZvOjpNYXBGb250KGludCB3ZWlnaHQsIEZYX0JPT0wgYkl0YWxpYywgaW50IGNoYXJzZXQsIGludCBwaXRjaF9mYW1pbHksIEZYX0xQQ1NUUiBmYW1pbHksIEZYX0JPT0wmIGJFeGFjdCkKK3sKKyAgICByZXR1cm4gTlVMTDsKK30KK3ZvaWQqIENGWF9Gb2xkZXJGb250SW5mbzo6R2V0Rm9udChGWF9MUENTVFIgZmFjZSkKK3sKKyAgICBGWF9MUFZPSUQgcDsKKyAgICBpZiAoIW1fRm9udExpc3QuTG9va3VwKGZhY2UsIHApKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcDsKK30KK0ZYX0RXT1JEIENGWF9Gb2xkZXJGb250SW5mbzo6R2V0Rm9udERhdGEodm9pZCogaEZvbnQsIEZYX0RXT1JEIHRhYmxlLCBGWF9MUEJZVEUgYnVmZmVyLCBGWF9EV09SRCBzaXplKQoreworICAgIGlmIChoRm9udCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBDRm9udEZhY2VJbmZvKiBwRm9udCA9IChDRm9udEZhY2VJbmZvKiloRm9udDsKKyAgICBGWFNZU19GSUxFKiBwRmlsZSA9IE5VTEw7CisgICAgaWYgKHNpemUgPiAwKSB7CisgICAgICAgIHBGaWxlID0gRlhTWVNfZm9wZW4ocEZvbnQtPm1fRmlsZVBhdGgsICJyYiIpOworICAgICAgICBpZiAocEZpbGUgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgRlhfRFdPUkQgZGF0YXNpemUgPSAwOworICAgIEZYX0RXT1JEIG9mZnNldDsKKyAgICBpZiAodGFibGUgPT0gMCkJeworICAgICAgICBkYXRhc2l6ZSA9IHBGb250LT5tX0ZvbnRPZmZzZXQgPyAwIDogcEZvbnQtPm1fRmlsZVNpemU7CisgICAgICAgIG9mZnNldCA9IDA7CisgICAgfSBlbHNlIGlmICh0YWJsZSA9PSAweDc0NzQ2MzY2KQl7CisgICAgICAgIGRhdGFzaXplID0gcEZvbnQtPm1fRm9udE9mZnNldCA/IHBGb250LT5tX0ZpbGVTaXplIDogMDsKKyAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBGWF9EV09SRCBuVGFibGVzID0gcEZvbnQtPm1fRm9udFRhYmxlcy5HZXRMZW5ndGgoKSAvIDE2OworICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgblRhYmxlczsgaSArKykgeworICAgICAgICAgICAgRlhfTFBDQllURSBwID0gKEZYX0xQQ0JZVEUpcEZvbnQtPm1fRm9udFRhYmxlcyArIGkgKiAxNjsKKyAgICAgICAgICAgIGlmIChHRVRfVFRfTE9ORyhwKSA9PSB0YWJsZSkgeworICAgICAgICAgICAgICAgIG9mZnNldCA9IEdFVF9UVF9MT05HKHAgKyA4KTsKKyAgICAgICAgICAgICAgICBkYXRhc2l6ZSA9IEdFVF9UVF9MT05HKHAgKyAxMik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGRhdGFzaXplICYmIHNpemUgPj0gZGF0YXNpemUgJiYgcEZpbGUpIHsKKyAgICAgICAgRlhTWVNfZnNlZWsocEZpbGUsIG9mZnNldCwgRlhTWVNfU0VFS19TRVQpOworICAgICAgICBzaXplX3QgcmVhZENudCA9IEZYU1lTX2ZyZWFkKGJ1ZmZlciwgZGF0YXNpemUsIDEsIHBGaWxlKTsKKyAgICB9CisgICAgaWYgKHBGaWxlKSB7CisgICAgICAgIEZYU1lTX2ZjbG9zZShwRmlsZSk7CisgICAgfQorICAgIHJldHVybiBkYXRhc2l6ZTsKK30KK3ZvaWQgQ0ZYX0ZvbGRlckZvbnRJbmZvOjpEZWxldGVGb250KHZvaWQqIGhGb250KQoreworfQorRlhfQk9PTCBDRlhfRm9sZGVyRm9udEluZm86OkdldEZhY2VOYW1lKHZvaWQqIGhGb250LCBDRlhfQnl0ZVN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAoaEZvbnQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIENGb250RmFjZUluZm8qIHBGb250ID0gKENGb250RmFjZUluZm8qKWhGb250OworICAgIG5hbWUgPSBwRm9udC0+bV9GYWNlTmFtZTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0ZYX0ZvbGRlckZvbnRJbmZvOjpHZXRGb250Q2hhcnNldCh2b2lkKiBoRm9udCwgaW50JiBjaGFyc2V0KQoreworICAgIHJldHVybiBGQUxTRTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9nZS9meF9nZV9saW51eC5jcHAgYi9jb3JlL3NyYy9meGdlL2dlL2Z4X2dlX2xpbnV4LmNwcAppbmRleCAzM2NmY2ZlLi43MzVlY2FjIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL2dlL2Z4X2dlX2xpbnV4LmNwcAorKysgYi9jb3JlL3NyYy9meGdlL2dlL2Z4X2dlX2xpbnV4LmNwcApAQCAtMSwyNTkgKzEsMjU5IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiDQotI2luY2x1ZGUgIi4uL2FnZy9pbmNsdWRlL2Z4X2FnZ19kcml2ZXIuaCINCi0jaW5jbHVkZSAidGV4dF9pbnQuaCINCi0jaWYgIWRlZmluZWQoX0ZQREZBUElfTUlOSV8pICYmICBfRlhNX1BMQVRGT1JNXyA9PSBfRlhNX1BMQVRGT1JNX0xJTlVYXw0KLSNpZiAoX0ZYTV9QTEFURk9STV8gID09IF9GWE1fUExBVEZPUk1fQVBQTEVfICYmICghZGVmaW5lZChfRlBERkFQSV9NSU5JXykpKQ0KLXZvaWQgQ0ZYX0FnZ0RldmljZURyaXZlcjo6SW5pdFBsYXRmb3JtKCkNCi17DQotfQ0KLXZvaWQgQ0ZYX0FnZ0RldmljZURyaXZlcjo6RGVzdHJveVBsYXRmb3JtKCkNCi17DQotfQ0KLXZvaWQgQ0ZYX0ZhY2VDYWNoZTo6SW5pdFBsYXRmb3JtKCkNCi17DQotfQ0KLUZYX0JPT0wgQ0ZYX0FnZ0RldmljZURyaXZlcjo6RHJhd0RldmljZVRleHQoaW50IG5DaGFycywgY29uc3QgRlhURVhUX0NIQVJQT1MqIHBDaGFyUG9zLCBDRlhfRm9udCogcEZvbnQsDQotICAgICAgICBDRlhfRm9udENhY2hlKiBwQ2FjaGUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLA0KLSAgICAgICAgRlhfRkxPQVQgZm9udF9zaXplLCBGWF9EV09SRCBhcmdiKQ0KLXsNCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1DRlhfR2x5cGhCaXRtYXAqIENGWF9GYWNlQ2FjaGU6OlJlbmRlckdseXBoX05hdGl2ZXRleHQoQ0ZYX0ZvbnQqIHBGb250LCBGWF9EV09SRCBnbHlwaF9pbmRleCwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwNCi0gICAgICAgIGludCBkZXN0X3dpZHRoLCBpbnQgYW50aV9hbGlhcykNCi17DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi12b2lkIENGWF9Gb250OjpSZWxlYXNlUGxhdGZvcm1SZXNvdXJjZSgpDQotew0KLX0NCi0jZW5kaWYNCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsNCi0gICAgRlhfTFBDU1RSCW1fcE5hbWU7DQotICAgIEZYX0xQQ1NUUgltX3BTdWJzdE5hbWU7DQotfQ0KLUJhc2UxNFN1YnN0c1tdID0gew0KLSAgICB7IkNvdXJpZXIiLCAiQ291cmllciBOZXcifSwNCi0gICAgeyJDb3VyaWVyLUJvbGQiLCAiQ291cmllciBOZXcgQm9sZCJ9LA0KLSAgICB7IkNvdXJpZXItQm9sZE9ibGlxdWUiLCAiQ291cmllciBOZXcgQm9sZCBJdGFsaWMifSwNCi0gICAgeyJDb3VyaWVyLU9ibGlxdWUiLCAiQ291cmllciBOZXcgSXRhbGljIn0sDQotICAgIHsiSGVsdmV0aWNhIiwgIkFyaWFsIn0sDQotICAgIHsiSGVsdmV0aWNhLUJvbGQiLCAiQXJpYWwgQm9sZCJ9LA0KLSAgICB7IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsICJBcmlhbCBCb2xkIEl0YWxpYyJ9LA0KLSAgICB7IkhlbHZldGljYS1PYmxpcXVlIiwgIkFyaWFsIEl0YWxpYyJ9LA0KLSAgICB7IlRpbWVzLVJvbWFuIiwgIlRpbWVzIE5ldyBSb21hbiJ9LA0KLSAgICB7IlRpbWVzLUJvbGQiLCAiVGltZXMgTmV3IFJvbWFuIEJvbGQifSwNCi0gICAgeyJUaW1lcy1Cb2xkSXRhbGljIiwgIlRpbWVzIE5ldyBSb21hbiBCb2xkIEl0YWxpYyJ9LA0KLSAgICB7IlRpbWVzLUl0YWxpYyIsICJUaW1lcyBOZXcgUm9tYW4gSXRhbGljIn0sDQotfTsNCi1jbGFzcyBDRlhfTGludXhGb250SW5mbyA6IHB1YmxpYyBDRlhfRm9sZGVyRm9udEluZm8NCi17DQotcHVibGljOg0KLSAgICB2aXJ0dWFsIHZvaWQqCQlNYXBGb250KGludCB3ZWlnaHQsIEZYX0JPT0wgYkl0YWxpYywgaW50IGNoYXJzZXQsIGludCBwaXRjaF9mYW1pbHksIEZYX0xQQ1NUUiBmYW1pbHksIEZYX0JPT0wmIGJFeGFjdCk7DQotICAgIEZYX0JPT0wJCQkJUGFyc2VGb250Q2ZnKCk7DQotICAgIHZvaWQqCQkJCUZpbmRGb250KGludCB3ZWlnaHQsIEZYX0JPT0wgYkl0YWxpYywgaW50IGNoYXJzZXQsIGludCBwaXRjaF9mYW1pbHksIEZYX0xQQ1NUUiBmYW1pbHksIEZYX0JPT0wgYk1hdGNoTmFtZSk7DQotfTsNCi0jZGVmaW5lIExJTlVYX0dQTkFNRVNJWkUJNg0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgew0KLSAgICBGWF9MUENTVFIgTmFtZUFycltMSU5VWF9HUE5BTUVTSVpFXTsNCi19DQotTGludXhHcEZvbnRMaXN0W10gPSB7DQotICAgIHt7IlRha2FvUEdvdGhpYyIsICJWTCBQR290aGljIiwgIklQQVBHb3RoaWMiLCAiVkwgR290aGljIiwgIktvY2hpIEdvdGhpYyIsICJWTCBHb3RoaWMgcmVndWxhciJ9fSwNCi0gICAge3siVGFrYW9Hb3RoaWMiLCAiVkwgR290aGljIiwgIklQQUdvdGhpYyIsICJLb2NoaSBHb3RoaWMiLCBOVUxMLCAiVkwgR290aGljIHJlZ3VsYXIifX0sDQotICAgIHt7IlRha2FvUE1pbmNobyIsICJJUEFQTWluY2hvIiwgIlZMIEdvdGhpYyIsICJLb2NoaSBNaW5jaG8iLCBOVUxMLCAiVkwgR290aGljIHJlZ3VsYXIifX0sDQotICAgIHt7IlRha2FvTWluY2hvIiwgIklQQU1pbmNobyIsICJWTCBHb3RoaWMiLCAiS29jaGkgTWluY2hvIiwgTlVMTCwgIlZMIEdvdGhpYyByZWd1bGFyIn19LA0KLX07DQotc3RhdGljIGNvbnN0IEZYX0xQQ1NUUiBnX0xpbnV4R2JGb250TGlzdFtdID0gew0KLSAgICAiQVIgUEwgVU1pbmcgQ04gTGlnaHQiLA0KLSAgICAiV2VuUXVhbllpIE1pY3JvIEhlaSIsDQotICAgICJBUiBQTCBVS2FpIENOIiwNCi19Ow0KLXN0YXRpYyBjb25zdCBGWF9MUENTVFIgZ19MaW51eEI1Rm9udExpc3RbXSA9IHsNCi0gICAgIkFSIFBMIFVNaW5nIFRXIExpZ2h0IiwNCi0gICAgIldlblF1YW5ZaSBNaWNybyBIZWkiLA0KLSAgICAiQVIgUEwgVUthaSBUVyIsDQotfTsNCi1zdGF0aWMgY29uc3QgRlhfTFBDU1RSIGdfTGludXhIR0ZvbnRMaXN0W10gPSB7DQotICAgICJVbkRvdHVtIiwNCi19Ow0KLXN0YXRpYyBGWF9JTlQzMiBHZXRKYXBhbmVzZVByZWZlcmVuY2UoRlhfTFBDU1RSIGZhY2VhcnIsIGludCB3ZWlnaHQsIGludCBwaWN0aF9mYW1pbHkpDQotew0KLSAgICBDRlhfQnl0ZVN0cmluZyBmYWNlID0gZmFjZWFycjsNCi0gICAgaWYgKGZhY2UuRmluZCgiR290aGljIikgPj0gMCB8fCBmYWNlLkZpbmQoIlx4ODNceDUzXHg4M1x4NTZceDgzXHg2Mlx4ODNceDRlIikgPj0gMCkgew0KLSAgICAgICAgaWYgKGZhY2UuRmluZCgiUEdvdGhpYyIpID49IDAgfHwgZmFjZS5GaW5kKCJceDgyXHg2Zlx4ODNceDUzXHg4M1x4NTZceDgzXHg2Mlx4ODNceDRlIikgPj0gMCkgew0KLSAgICAgICAgICAgIHJldHVybiAwOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICByZXR1cm4gMTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIGlmIChmYWNlLkZpbmQoIk1pbmNobyIpID49IDAgfHwgZmFjZS5GaW5kKCJceDk2XHhiZVx4OTJceGE5IikgPj0gMCkgew0KLSAgICAgICAgaWYgKGZhY2UuRmluZCgiUE1pbmNobyIpID49IDAgfHwgZmFjZS5GaW5kKCJceDgyXHg2Zlx4OTZceGJlXHg5Mlx4YTkiKSA+PSAwKSB7DQotICAgICAgICAgICAgcmV0dXJuIDI7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHJldHVybiAzOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmICghKHBpY3RoX2ZhbWlseSAmIEZYRk9OVF9GRl9ST01BTikgJiYgd2VpZ2h0ID4gNDAwKSB7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLSAgICByZXR1cm4gMjsNCi19DQotdm9pZCogQ0ZYX0xpbnV4Rm9udEluZm86Ok1hcEZvbnQoaW50IHdlaWdodCwgRlhfQk9PTCBiSXRhbGljLCBpbnQgY2hhcnNldCwgaW50IHBpdGNoX2ZhbWlseSwgRlhfTFBDU1RSIGNzdHJfZmFjZSwgRlhfQk9PTCYgYkV4YWN0KQ0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgZmFjZSA9IGNzdHJfZmFjZTsNCi0gICAgaW50IGlCYXNlRm9udDsNCi0gICAgZm9yIChpQmFzZUZvbnQgPSAwOyBpQmFzZUZvbnQgPCAxMjsgaUJhc2VGb250ICsrKQ0KLSAgICAgICAgaWYgKGZhY2UgPT0gQ0ZYX0J5dGVTdHJpbmdDKEJhc2UxNFN1YnN0c1tpQmFzZUZvbnRdLm1fcE5hbWUpKSB7DQotICAgICAgICAgICAgZmFjZSA9IEJhc2UxNFN1YnN0c1tpQmFzZUZvbnRdLm1fcFN1YnN0TmFtZTsNCi0gICAgICAgICAgICBiRXhhY3QgPSBUUlVFOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICBpZiAoaUJhc2VGb250IDwgMTIpIHsNCi0gICAgICAgIHJldHVybiBHZXRGb250KGZhY2UpOw0KLSAgICB9DQotICAgIEZYX0xQVk9JRCBwID0gTlVMTDsNCi0gICAgRlhfQk9PTCBiQ0pLID0gVFJVRTsNCi0gICAgc3dpdGNoIChjaGFyc2V0KSB7DQotICAgICAgICBjYXNlIEZYRk9OVF9TSElGVEpJU19DSEFSU0VUOiB7DQotICAgICAgICAgICAgICAgIEZYX0lOVDMyIGluZGV4ID0gR2V0SmFwYW5lc2VQcmVmZXJlbmNlKGNzdHJfZmFjZSwgd2VpZ2h0LCBwaXRjaF9mYW1pbHkpOw0KLSAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBmb3IgKEZYX0lOVDMyIGkgPSAwOyBpIDwgTElOVVhfR1BOQU1FU0laRTsgaSsrKQ0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fRm9udExpc3QuTG9va3VwKExpbnV4R3BGb250TGlzdFtpbmRleF0uTmFtZUFycltpXSwgcCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIEZYRk9OVF9HQjIzMTJfQ0hBUlNFVDogew0KLSAgICAgICAgICAgICAgICBzdGF0aWMgRlhfSU5UMzIgc19nYkNvdW50ID0gc2l6ZW9mKGdfTGludXhHYkZvbnRMaXN0KSAvIHNpemVvZihGWF9MUENTVFIpOw0KLSAgICAgICAgICAgICAgICBmb3IgKEZYX0lOVDMyIGkgPSAwOyBpIDwgc19nYkNvdW50OyBpKyspDQotICAgICAgICAgICAgICAgICAgICBpZiAobV9Gb250TGlzdC5Mb29rdXAoZ19MaW51eEdiRm9udExpc3RbaV0sIHApKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBGWEZPTlRfQ0hJTkVTRUJJRzVfQ0hBUlNFVDogew0KLSAgICAgICAgICAgICAgICBzdGF0aWMgRlhfSU5UMzIgc19iNUNvdW50ID0gc2l6ZW9mKGdfTGludXhCNUZvbnRMaXN0KSAvIHNpemVvZihGWF9MUENTVFIpOw0KLSAgICAgICAgICAgICAgICBmb3IgKEZYX0lOVDMyIGkgPSAwOyBpIDwgc19iNUNvdW50OyBpKyspDQotICAgICAgICAgICAgICAgICAgICBpZiAobV9Gb250TGlzdC5Mb29rdXAoZ19MaW51eEI1Rm9udExpc3RbaV0sIHApKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBGWEZPTlRfSEFOR0VVTF9DSEFSU0VUOiB7DQotICAgICAgICAgICAgICAgIHN0YXRpYyBGWF9JTlQzMiBzX2hnQ291bnQgPSBzaXplb2YoZ19MaW51eEhHRm9udExpc3QpIC8gc2l6ZW9mKEZYX0xQQ1NUUik7DQotICAgICAgICAgICAgICAgIGZvciAoRlhfSU5UMzIgaSA9IDA7IGkgPCBzX2hnQ291bnQ7IGkrKykNCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX0ZvbnRMaXN0Lkxvb2t1cChnX0xpbnV4SEdGb250TGlzdFtpXSwgcCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcDsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBkZWZhdWx0Og0KLSAgICAgICAgICAgIGJDSksgPSBGQUxTRTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgfQ0KLSAgICBpZiAoY2hhcnNldCA9PSBGWEZPTlRfQU5TSV9DSEFSU0VUICYmIChwaXRjaF9mYW1pbHkgJiBGWEZPTlRfRkZfRklYRURQSVRDSCkpIHsNCi0gICAgICAgIHJldHVybiBHZXRGb250KCJDb3VyaWVyIE5ldyIpOw0KLSAgICB9DQotICAgIHJldHVybiBGaW5kRm9udCh3ZWlnaHQsIGJJdGFsaWMsIGNoYXJzZXQsIHBpdGNoX2ZhbWlseSwgY3N0cl9mYWNlLCAhYkNKSyk7DQotfQ0KLXN0YXRpYyBGWF9EV09SRCBfTGludXhHZXRDaGFyc2V0KGludCBjaGFyc2V0KQ0KLXsNCi0gICAgc3dpdGNoKGNoYXJzZXQpIHsNCi0gICAgICAgIGNhc2UgRlhGT05UX1NISUZUSklTX0NIQVJTRVQ6DQotICAgICAgICAgICAgcmV0dXJuIENIQVJTRVRfRkxBR19TSElGVEpJUzsNCi0gICAgICAgIGNhc2UgRlhGT05UX0dCMjMxMl9DSEFSU0VUOg0KLSAgICAgICAgICAgIHJldHVybiBDSEFSU0VUX0ZMQUdfR0I7DQotICAgICAgICBjYXNlIEZYRk9OVF9DSElORVNFQklHNV9DSEFSU0VUOg0KLSAgICAgICAgICAgIHJldHVybiBDSEFSU0VUX0ZMQUdfQklHNTsNCi0gICAgICAgIGNhc2UgRlhGT05UX0hBTkdFVUxfQ0hBUlNFVDoNCi0gICAgICAgICAgICByZXR1cm4gQ0hBUlNFVF9GTEFHX0tPUkVBTjsNCi0gICAgICAgIGNhc2UgRlhGT05UX1NZTUJPTF9DSEFSU0VUOg0KLSAgICAgICAgICAgIHJldHVybiBDSEFSU0VUX0ZMQUdfU1lNQk9MOw0KLSAgICAgICAgY2FzZSBGWEZPTlRfQU5TSV9DSEFSU0VUOg0KLSAgICAgICAgICAgIHJldHVybiBDSEFSU0VUX0ZMQUdfQU5TSTsNCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgYnJlYWs7DQotICAgIH0NCi0gICAgcmV0dXJuIDA7DQotfQ0KLXN0YXRpYyBGWF9JTlQzMiBfTGludXhHZXRTaW1pbGFyVmFsdWUoaW50IHdlaWdodCwgRlhfQk9PTCBiSXRhbGljLCBpbnQgcGl0Y2hfZmFtaWx5LCBGWF9EV09SRCBzdHlsZSkNCi17DQotICAgIEZYX0lOVDMyIGlTaW1pbGFyVmFsdWUgPSAwOw0KLSAgICBpZiAoKHN0eWxlICYgRlhGT05UX0JPTEQpID09ICh3ZWlnaHQgPiA0MDApKSB7DQotICAgICAgICBpU2ltaWxhclZhbHVlICs9IDE2Ow0KLSAgICB9DQotICAgIGlmICgoc3R5bGUgJiBGWEZPTlRfSVRBTElDKSA9PSBiSXRhbGljKSB7DQotICAgICAgICBpU2ltaWxhclZhbHVlICs9IDE2Ow0KLSAgICB9DQotICAgIGlmICgoc3R5bGUgJiBGWEZPTlRfU0VSSUYpID09IChwaXRjaF9mYW1pbHkgJiBGWEZPTlRfRkZfUk9NQU4pKSB7DQotICAgICAgICBpU2ltaWxhclZhbHVlICs9IDE2Ow0KLSAgICB9DQotICAgIGlmICgoc3R5bGUgJiBGWEZPTlRfU0NSSVBUKSA9PSAocGl0Y2hfZmFtaWx5ICYgRlhGT05UX0ZGX1NDUklQVCkpIHsNCi0gICAgICAgIGlTaW1pbGFyVmFsdWUgKz0gODsNCi0gICAgfQ0KLSAgICBpZiAoKHN0eWxlICYgRlhGT05UX0ZJWEVEX1BJVENIKSA9PSAocGl0Y2hfZmFtaWx5ICYgRlhGT05UX0ZGX0ZJWEVEUElUQ0gpKSB7DQotICAgICAgICBpU2ltaWxhclZhbHVlICs9IDg7DQotICAgIH0NCi0gICAgcmV0dXJuIGlTaW1pbGFyVmFsdWU7DQotfQ0KLXZvaWQqIENGWF9MaW51eEZvbnRJbmZvOjpGaW5kRm9udChpbnQgd2VpZ2h0LCBGWF9CT09MIGJJdGFsaWMsIGludCBjaGFyc2V0LCBpbnQgcGl0Y2hfZmFtaWx5LCBGWF9MUENTVFIgZmFtaWx5LCBGWF9CT09MIGJNYXRjaE5hbWUpDQotew0KLSAgICBDRm9udEZhY2VJbmZvKiBwRmluZCA9IE5VTEw7DQotICAgIEZYX0RXT1JEIGNoYXJzZXRfZmxhZyA9IF9MaW51eEdldENoYXJzZXQoY2hhcnNldCk7DQotICAgIEZYX0lOVDMyIGlCZXN0U2ltaWxhciA9IDA7DQotICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fRm9udExpc3QuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyBic05hbWU7DQotICAgICAgICBDRm9udEZhY2VJbmZvKiBwRm9udCA9IE5VTEw7DQotICAgICAgICBtX0ZvbnRMaXN0LkdldE5leHRBc3NvYyhwb3MsIGJzTmFtZSwgKEZYX0xQVk9JRCYpcEZvbnQpOw0KLSAgICAgICAgaWYgKCEocEZvbnQtPm1fQ2hhcnNldHMgJiBjaGFyc2V0X2ZsYWcpICYmIGNoYXJzZXQgIT0gRlhGT05UX0RFRkFVTFRfQ0hBUlNFVCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfSU5UMzIgaVNpbWlsYXJWYWx1ZSA9IDA7DQotICAgICAgICBGWF9JTlQzMiBpbmRleCA9IGJzTmFtZS5GaW5kKGZhbWlseSk7DQotICAgICAgICBpZiAoYk1hdGNoTmFtZSAmJiBpbmRleCA8IDApIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICghYk1hdGNoTmFtZSAmJiBpbmRleCA+IDApIHsNCi0gICAgICAgICAgICBpU2ltaWxhclZhbHVlICs9IDY0Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgaVNpbWlsYXJWYWx1ZSA9IF9MaW51eEdldFNpbWlsYXJWYWx1ZSh3ZWlnaHQsIGJJdGFsaWMsIHBpdGNoX2ZhbWlseSwgcEZvbnQtPm1fU3R5bGVzKTsNCi0gICAgICAgIGlmIChpU2ltaWxhclZhbHVlID4gaUJlc3RTaW1pbGFyKSB7DQotICAgICAgICAgICAgaUJlc3RTaW1pbGFyID0gaVNpbWlsYXJWYWx1ZTsNCi0gICAgICAgICAgICBwRmluZCA9IHBGb250Ow0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBwRmluZDsNCi19DQotSUZYX1N5c3RlbUZvbnRJbmZvKiBJRlhfU3lzdGVtRm9udEluZm86OkNyZWF0ZURlZmF1bHQoKQ0KLXsNCi0gICAgQ0ZYX0xpbnV4Rm9udEluZm8qIHBJbmZvID0gRlhfTkVXIENGWF9MaW51eEZvbnRJbmZvOw0KLSAgICBpZiAoIXBJbmZvKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAoIXBJbmZvLT5QYXJzZUZvbnRDZmcoKSkgew0KLSAgICAgICAgcEluZm8tPkFkZFBhdGgoIi91c3Ivc2hhcmUvZm9udHMiKTsNCi0gICAgICAgIHBJbmZvLT5BZGRQYXRoKCIvdXNyL3NoYXJlL1gxMS9mb250cy9UeXBlMSIpOw0KLSAgICAgICAgcEluZm8tPkFkZFBhdGgoIi91c3Ivc2hhcmUvWDExL2ZvbnRzL1RURiIpOw0KLSAgICAgICAgcEluZm8tPkFkZFBhdGgoIi91c3IvbG9jYWwvc2hhcmUvZm9udHMiKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gcEluZm87DQotfQ0KLUZYX0JPT0wgQ0ZYX0xpbnV4Rm9udEluZm86OlBhcnNlRm9udENmZygpDQotew0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLXZvaWQgQ0ZYX0dFTW9kdWxlOjpJbml0UGxhdGZvcm0oKQ0KLXsNCi0gICAgbV9wRm9udE1nci0+U2V0U3lzdGVtRm9udEluZm8oSUZYX1N5c3RlbUZvbnRJbmZvOjpDcmVhdGVEZWZhdWx0KCkpOw0KLX0NCi12b2lkIENGWF9HRU1vZHVsZTo6RGVzdHJveVBsYXRmb3JtKCkNCi17DQotfQ0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2UuaCIKKyNpbmNsdWRlICIuLi9hZ2cvaW5jbHVkZS9meF9hZ2dfZHJpdmVyLmgiCisjaW5jbHVkZSAidGV4dF9pbnQuaCIKKyNpZiAhZGVmaW5lZChfRlBERkFQSV9NSU5JXykgJiYgIF9GWE1fUExBVEZPUk1fID09IF9GWE1fUExBVEZPUk1fTElOVVhfCisjaWYgKF9GWE1fUExBVEZPUk1fICA9PSBfRlhNX1BMQVRGT1JNX0FQUExFXyAmJiAoIWRlZmluZWQoX0ZQREZBUElfTUlOSV8pKSkKK3ZvaWQgQ0ZYX0FnZ0RldmljZURyaXZlcjo6SW5pdFBsYXRmb3JtKCkKK3sKK30KK3ZvaWQgQ0ZYX0FnZ0RldmljZURyaXZlcjo6RGVzdHJveVBsYXRmb3JtKCkKK3sKK30KK3ZvaWQgQ0ZYX0ZhY2VDYWNoZTo6SW5pdFBsYXRmb3JtKCkKK3sKK30KK0ZYX0JPT0wgQ0ZYX0FnZ0RldmljZURyaXZlcjo6RHJhd0RldmljZVRleHQoaW50IG5DaGFycywgY29uc3QgRlhURVhUX0NIQVJQT1MqIHBDaGFyUG9zLCBDRlhfRm9udCogcEZvbnQsCisgICAgICAgIENGWF9Gb250Q2FjaGUqIHBDYWNoZSwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsCisgICAgICAgIEZYX0ZMT0FUIGZvbnRfc2l6ZSwgRlhfRFdPUkQgYXJnYikKK3sKKyAgICByZXR1cm4gRkFMU0U7Cit9CitDRlhfR2x5cGhCaXRtYXAqIENGWF9GYWNlQ2FjaGU6OlJlbmRlckdseXBoX05hdGl2ZXRleHQoQ0ZYX0ZvbnQqIHBGb250LCBGWF9EV09SRCBnbHlwaF9pbmRleCwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwKKyAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBhbnRpX2FsaWFzKQoreworICAgIHJldHVybiBOVUxMOworfQordm9pZCBDRlhfRm9udDo6UmVsZWFzZVBsYXRmb3JtUmVzb3VyY2UoKQoreworfQorI2VuZGlmCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICBGWF9MUENTVFIJbV9wTmFtZTsKKyAgICBGWF9MUENTVFIJbV9wU3Vic3ROYW1lOworfQorQmFzZTE0U3Vic3RzW10gPSB7CisgICAgeyJDb3VyaWVyIiwgIkNvdXJpZXIgTmV3In0sCisgICAgeyJDb3VyaWVyLUJvbGQiLCAiQ291cmllciBOZXcgQm9sZCJ9LAorICAgIHsiQ291cmllci1Cb2xkT2JsaXF1ZSIsICJDb3VyaWVyIE5ldyBCb2xkIEl0YWxpYyJ9LAorICAgIHsiQ291cmllci1PYmxpcXVlIiwgIkNvdXJpZXIgTmV3IEl0YWxpYyJ9LAorICAgIHsiSGVsdmV0aWNhIiwgIkFyaWFsIn0sCisgICAgeyJIZWx2ZXRpY2EtQm9sZCIsICJBcmlhbCBCb2xkIn0sCisgICAgeyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLCAiQXJpYWwgQm9sZCBJdGFsaWMifSwKKyAgICB7IkhlbHZldGljYS1PYmxpcXVlIiwgIkFyaWFsIEl0YWxpYyJ9LAorICAgIHsiVGltZXMtUm9tYW4iLCAiVGltZXMgTmV3IFJvbWFuIn0sCisgICAgeyJUaW1lcy1Cb2xkIiwgIlRpbWVzIE5ldyBSb21hbiBCb2xkIn0sCisgICAgeyJUaW1lcy1Cb2xkSXRhbGljIiwgIlRpbWVzIE5ldyBSb21hbiBCb2xkIEl0YWxpYyJ9LAorICAgIHsiVGltZXMtSXRhbGljIiwgIlRpbWVzIE5ldyBSb21hbiBJdGFsaWMifSwKK307CitjbGFzcyBDRlhfTGludXhGb250SW5mbyA6IHB1YmxpYyBDRlhfRm9sZGVyRm9udEluZm8KK3sKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQqCQlNYXBGb250KGludCB3ZWlnaHQsIEZYX0JPT0wgYkl0YWxpYywgaW50IGNoYXJzZXQsIGludCBwaXRjaF9mYW1pbHksIEZYX0xQQ1NUUiBmYW1pbHksIEZYX0JPT0wmIGJFeGFjdCk7CisgICAgRlhfQk9PTAkJCQlQYXJzZUZvbnRDZmcoKTsKKyAgICB2b2lkKgkJCQlGaW5kRm9udChpbnQgd2VpZ2h0LCBGWF9CT09MIGJJdGFsaWMsIGludCBjaGFyc2V0LCBpbnQgcGl0Y2hfZmFtaWx5LCBGWF9MUENTVFIgZmFtaWx5LCBGWF9CT09MIGJNYXRjaE5hbWUpOworfTsKKyNkZWZpbmUgTElOVVhfR1BOQU1FU0laRQk2CitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICBGWF9MUENTVFIgTmFtZUFycltMSU5VWF9HUE5BTUVTSVpFXTsKK30KK0xpbnV4R3BGb250TGlzdFtdID0geworICAgIHt7IlRha2FvUEdvdGhpYyIsICJWTCBQR290aGljIiwgIklQQVBHb3RoaWMiLCAiVkwgR290aGljIiwgIktvY2hpIEdvdGhpYyIsICJWTCBHb3RoaWMgcmVndWxhciJ9fSwKKyAgICB7eyJUYWthb0dvdGhpYyIsICJWTCBHb3RoaWMiLCAiSVBBR290aGljIiwgIktvY2hpIEdvdGhpYyIsIE5VTEwsICJWTCBHb3RoaWMgcmVndWxhciJ9fSwKKyAgICB7eyJUYWthb1BNaW5jaG8iLCAiSVBBUE1pbmNobyIsICJWTCBHb3RoaWMiLCAiS29jaGkgTWluY2hvIiwgTlVMTCwgIlZMIEdvdGhpYyByZWd1bGFyIn19LAorICAgIHt7IlRha2FvTWluY2hvIiwgIklQQU1pbmNobyIsICJWTCBHb3RoaWMiLCAiS29jaGkgTWluY2hvIiwgTlVMTCwgIlZMIEdvdGhpYyByZWd1bGFyIn19LAorfTsKK3N0YXRpYyBjb25zdCBGWF9MUENTVFIgZ19MaW51eEdiRm9udExpc3RbXSA9IHsKKyAgICAiQVIgUEwgVU1pbmcgQ04gTGlnaHQiLAorICAgICJXZW5RdWFuWWkgTWljcm8gSGVpIiwKKyAgICAiQVIgUEwgVUthaSBDTiIsCit9Oworc3RhdGljIGNvbnN0IEZYX0xQQ1NUUiBnX0xpbnV4QjVGb250TGlzdFtdID0geworICAgICJBUiBQTCBVTWluZyBUVyBMaWdodCIsCisgICAgIldlblF1YW5ZaSBNaWNybyBIZWkiLAorICAgICJBUiBQTCBVS2FpIFRXIiwKK307CitzdGF0aWMgY29uc3QgRlhfTFBDU1RSIGdfTGludXhIR0ZvbnRMaXN0W10gPSB7CisgICAgIlVuRG90dW0iLAorfTsKK3N0YXRpYyBGWF9JTlQzMiBHZXRKYXBhbmVzZVByZWZlcmVuY2UoRlhfTFBDU1RSIGZhY2VhcnIsIGludCB3ZWlnaHQsIGludCBwaWN0aF9mYW1pbHkpCit7CisgICAgQ0ZYX0J5dGVTdHJpbmcgZmFjZSA9IGZhY2VhcnI7CisgICAgaWYgKGZhY2UuRmluZCgiR290aGljIikgPj0gMCB8fCBmYWNlLkZpbmQoIlx4ODNceDUzXHg4M1x4NTZceDgzXHg2Mlx4ODNceDRlIikgPj0gMCkgeworICAgICAgICBpZiAoZmFjZS5GaW5kKCJQR290aGljIikgPj0gMCB8fCBmYWNlLkZpbmQoIlx4ODJceDZmXHg4M1x4NTNceDgzXHg1Nlx4ODNceDYyXHg4M1x4NGUiKSA+PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChmYWNlLkZpbmQoIk1pbmNobyIpID49IDAgfHwgZmFjZS5GaW5kKCJceDk2XHhiZVx4OTJceGE5IikgPj0gMCkgeworICAgICAgICBpZiAoZmFjZS5GaW5kKCJQTWluY2hvIikgPj0gMCB8fCBmYWNlLkZpbmQoIlx4ODJceDZmXHg5Nlx4YmVceDkyXHhhOSIpID49IDApIHsKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCEocGljdGhfZmFtaWx5ICYgRlhGT05UX0ZGX1JPTUFOKSAmJiB3ZWlnaHQgPiA0MDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiAyOworfQordm9pZCogQ0ZYX0xpbnV4Rm9udEluZm86Ok1hcEZvbnQoaW50IHdlaWdodCwgRlhfQk9PTCBiSXRhbGljLCBpbnQgY2hhcnNldCwgaW50IHBpdGNoX2ZhbWlseSwgRlhfTFBDU1RSIGNzdHJfZmFjZSwgRlhfQk9PTCYgYkV4YWN0KQoreworICAgIENGWF9CeXRlU3RyaW5nIGZhY2UgPSBjc3RyX2ZhY2U7CisgICAgaW50IGlCYXNlRm9udDsKKyAgICBmb3IgKGlCYXNlRm9udCA9IDA7IGlCYXNlRm9udCA8IDEyOyBpQmFzZUZvbnQgKyspCisgICAgICAgIGlmIChmYWNlID09IENGWF9CeXRlU3RyaW5nQyhCYXNlMTRTdWJzdHNbaUJhc2VGb250XS5tX3BOYW1lKSkgeworICAgICAgICAgICAgZmFjZSA9IEJhc2UxNFN1YnN0c1tpQmFzZUZvbnRdLm1fcFN1YnN0TmFtZTsKKyAgICAgICAgICAgIGJFeGFjdCA9IFRSVUU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIGlmIChpQmFzZUZvbnQgPCAxMikgeworICAgICAgICByZXR1cm4gR2V0Rm9udChmYWNlKTsKKyAgICB9CisgICAgRlhfTFBWT0lEIHAgPSBOVUxMOworICAgIEZYX0JPT0wgYkNKSyA9IFRSVUU7CisgICAgc3dpdGNoIChjaGFyc2V0KSB7CisgICAgICAgIGNhc2UgRlhGT05UX1NISUZUSklTX0NIQVJTRVQ6IHsKKyAgICAgICAgICAgICAgICBGWF9JTlQzMiBpbmRleCA9IEdldEphcGFuZXNlUHJlZmVyZW5jZShjc3RyX2ZhY2UsIHdlaWdodCwgcGl0Y2hfZmFtaWx5KTsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKEZYX0lOVDMyIGkgPSAwOyBpIDwgTElOVVhfR1BOQU1FU0laRTsgaSsrKQorICAgICAgICAgICAgICAgICAgICBpZiAobV9Gb250TGlzdC5Mb29rdXAoTGludXhHcEZvbnRMaXN0W2luZGV4XS5OYW1lQXJyW2ldLCBwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZYRk9OVF9HQjIzMTJfQ0hBUlNFVDogeworICAgICAgICAgICAgICAgIHN0YXRpYyBGWF9JTlQzMiBzX2diQ291bnQgPSBzaXplb2YoZ19MaW51eEdiRm9udExpc3QpIC8gc2l6ZW9mKEZYX0xQQ1NUUik7CisgICAgICAgICAgICAgICAgZm9yIChGWF9JTlQzMiBpID0gMDsgaSA8IHNfZ2JDb3VudDsgaSsrKQorICAgICAgICAgICAgICAgICAgICBpZiAobV9Gb250TGlzdC5Mb29rdXAoZ19MaW51eEdiRm9udExpc3RbaV0sIHApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRlhGT05UX0NISU5FU0VCSUc1X0NIQVJTRVQ6IHsKKyAgICAgICAgICAgICAgICBzdGF0aWMgRlhfSU5UMzIgc19iNUNvdW50ID0gc2l6ZW9mKGdfTGludXhCNUZvbnRMaXN0KSAvIHNpemVvZihGWF9MUENTVFIpOworICAgICAgICAgICAgICAgIGZvciAoRlhfSU5UMzIgaSA9IDA7IGkgPCBzX2I1Q291bnQ7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fRm9udExpc3QuTG9va3VwKGdfTGludXhCNUZvbnRMaXN0W2ldLCBwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZYRk9OVF9IQU5HRVVMX0NIQVJTRVQ6IHsKKyAgICAgICAgICAgICAgICBzdGF0aWMgRlhfSU5UMzIgc19oZ0NvdW50ID0gc2l6ZW9mKGdfTGludXhIR0ZvbnRMaXN0KSAvIHNpemVvZihGWF9MUENTVFIpOworICAgICAgICAgICAgICAgIGZvciAoRlhfSU5UMzIgaSA9IDA7IGkgPCBzX2hnQ291bnQ7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fRm9udExpc3QuTG9va3VwKGdfTGludXhIR0ZvbnRMaXN0W2ldLCBwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYkNKSyA9IEZBTFNFOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChjaGFyc2V0ID09IEZYRk9OVF9BTlNJX0NIQVJTRVQgJiYgKHBpdGNoX2ZhbWlseSAmIEZYRk9OVF9GRl9GSVhFRFBJVENIKSkgeworICAgICAgICByZXR1cm4gR2V0Rm9udCgiQ291cmllciBOZXciKTsKKyAgICB9CisgICAgcmV0dXJuIEZpbmRGb250KHdlaWdodCwgYkl0YWxpYywgY2hhcnNldCwgcGl0Y2hfZmFtaWx5LCBjc3RyX2ZhY2UsICFiQ0pLKTsKK30KK3N0YXRpYyBGWF9EV09SRCBfTGludXhHZXRDaGFyc2V0KGludCBjaGFyc2V0KQoreworICAgIHN3aXRjaChjaGFyc2V0KSB7CisgICAgICAgIGNhc2UgRlhGT05UX1NISUZUSklTX0NIQVJTRVQ6CisgICAgICAgICAgICByZXR1cm4gQ0hBUlNFVF9GTEFHX1NISUZUSklTOworICAgICAgICBjYXNlIEZYRk9OVF9HQjIzMTJfQ0hBUlNFVDoKKyAgICAgICAgICAgIHJldHVybiBDSEFSU0VUX0ZMQUdfR0I7CisgICAgICAgIGNhc2UgRlhGT05UX0NISU5FU0VCSUc1X0NIQVJTRVQ6CisgICAgICAgICAgICByZXR1cm4gQ0hBUlNFVF9GTEFHX0JJRzU7CisgICAgICAgIGNhc2UgRlhGT05UX0hBTkdFVUxfQ0hBUlNFVDoKKyAgICAgICAgICAgIHJldHVybiBDSEFSU0VUX0ZMQUdfS09SRUFOOworICAgICAgICBjYXNlIEZYRk9OVF9TWU1CT0xfQ0hBUlNFVDoKKyAgICAgICAgICAgIHJldHVybiBDSEFSU0VUX0ZMQUdfU1lNQk9MOworICAgICAgICBjYXNlIEZYRk9OVF9BTlNJX0NIQVJTRVQ6CisgICAgICAgICAgICByZXR1cm4gQ0hBUlNFVF9GTEFHX0FOU0k7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CitzdGF0aWMgRlhfSU5UMzIgX0xpbnV4R2V0U2ltaWxhclZhbHVlKGludCB3ZWlnaHQsIEZYX0JPT0wgYkl0YWxpYywgaW50IHBpdGNoX2ZhbWlseSwgRlhfRFdPUkQgc3R5bGUpCit7CisgICAgRlhfSU5UMzIgaVNpbWlsYXJWYWx1ZSA9IDA7CisgICAgaWYgKChzdHlsZSAmIEZYRk9OVF9CT0xEKSA9PSAod2VpZ2h0ID4gNDAwKSkgeworICAgICAgICBpU2ltaWxhclZhbHVlICs9IDE2OworICAgIH0KKyAgICBpZiAoKHN0eWxlICYgRlhGT05UX0lUQUxJQykgPT0gYkl0YWxpYykgeworICAgICAgICBpU2ltaWxhclZhbHVlICs9IDE2OworICAgIH0KKyAgICBpZiAoKHN0eWxlICYgRlhGT05UX1NFUklGKSA9PSAocGl0Y2hfZmFtaWx5ICYgRlhGT05UX0ZGX1JPTUFOKSkgeworICAgICAgICBpU2ltaWxhclZhbHVlICs9IDE2OworICAgIH0KKyAgICBpZiAoKHN0eWxlICYgRlhGT05UX1NDUklQVCkgPT0gKHBpdGNoX2ZhbWlseSAmIEZYRk9OVF9GRl9TQ1JJUFQpKSB7CisgICAgICAgIGlTaW1pbGFyVmFsdWUgKz0gODsKKyAgICB9CisgICAgaWYgKChzdHlsZSAmIEZYRk9OVF9GSVhFRF9QSVRDSCkgPT0gKHBpdGNoX2ZhbWlseSAmIEZYRk9OVF9GRl9GSVhFRFBJVENIKSkgeworICAgICAgICBpU2ltaWxhclZhbHVlICs9IDg7CisgICAgfQorICAgIHJldHVybiBpU2ltaWxhclZhbHVlOworfQordm9pZCogQ0ZYX0xpbnV4Rm9udEluZm86OkZpbmRGb250KGludCB3ZWlnaHQsIEZYX0JPT0wgYkl0YWxpYywgaW50IGNoYXJzZXQsIGludCBwaXRjaF9mYW1pbHksIEZYX0xQQ1NUUiBmYW1pbHksIEZYX0JPT0wgYk1hdGNoTmFtZSkKK3sKKyAgICBDRm9udEZhY2VJbmZvKiBwRmluZCA9IE5VTEw7CisgICAgRlhfRFdPUkQgY2hhcnNldF9mbGFnID0gX0xpbnV4R2V0Q2hhcnNldChjaGFyc2V0KTsKKyAgICBGWF9JTlQzMiBpQmVzdFNpbWlsYXIgPSAwOworICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fRm9udExpc3QuR2V0U3RhcnRQb3NpdGlvbigpOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgYnNOYW1lOworICAgICAgICBDRm9udEZhY2VJbmZvKiBwRm9udCA9IE5VTEw7CisgICAgICAgIG1fRm9udExpc3QuR2V0TmV4dEFzc29jKHBvcywgYnNOYW1lLCAoRlhfTFBWT0lEJilwRm9udCk7CisgICAgICAgIGlmICghKHBGb250LT5tX0NoYXJzZXRzICYgY2hhcnNldF9mbGFnKSAmJiBjaGFyc2V0ICE9IEZYRk9OVF9ERUZBVUxUX0NIQVJTRVQpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIEZYX0lOVDMyIGlTaW1pbGFyVmFsdWUgPSAwOworICAgICAgICBGWF9JTlQzMiBpbmRleCA9IGJzTmFtZS5GaW5kKGZhbWlseSk7CisgICAgICAgIGlmIChiTWF0Y2hOYW1lICYmIGluZGV4IDwgMCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFiTWF0Y2hOYW1lICYmIGluZGV4ID4gMCkgeworICAgICAgICAgICAgaVNpbWlsYXJWYWx1ZSArPSA2NDsKKyAgICAgICAgfQorICAgICAgICBpU2ltaWxhclZhbHVlID0gX0xpbnV4R2V0U2ltaWxhclZhbHVlKHdlaWdodCwgYkl0YWxpYywgcGl0Y2hfZmFtaWx5LCBwRm9udC0+bV9TdHlsZXMpOworICAgICAgICBpZiAoaVNpbWlsYXJWYWx1ZSA+IGlCZXN0U2ltaWxhcikgeworICAgICAgICAgICAgaUJlc3RTaW1pbGFyID0gaVNpbWlsYXJWYWx1ZTsKKyAgICAgICAgICAgIHBGaW5kID0gcEZvbnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBGaW5kOworfQorSUZYX1N5c3RlbUZvbnRJbmZvKiBJRlhfU3lzdGVtRm9udEluZm86OkNyZWF0ZURlZmF1bHQoKQoreworICAgIENGWF9MaW51eEZvbnRJbmZvKiBwSW5mbyA9IEZYX05FVyBDRlhfTGludXhGb250SW5mbzsKKyAgICBpZiAoIXBJbmZvKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoIXBJbmZvLT5QYXJzZUZvbnRDZmcoKSkgeworICAgICAgICBwSW5mby0+QWRkUGF0aCgiL3Vzci9zaGFyZS9mb250cyIpOworICAgICAgICBwSW5mby0+QWRkUGF0aCgiL3Vzci9zaGFyZS9YMTEvZm9udHMvVHlwZTEiKTsKKyAgICAgICAgcEluZm8tPkFkZFBhdGgoIi91c3Ivc2hhcmUvWDExL2ZvbnRzL1RURiIpOworICAgICAgICBwSW5mby0+QWRkUGF0aCgiL3Vzci9sb2NhbC9zaGFyZS9mb250cyIpOworICAgIH0KKyAgICByZXR1cm4gcEluZm87Cit9CitGWF9CT09MIENGWF9MaW51eEZvbnRJbmZvOjpQYXJzZUZvbnRDZmcoKQoreworICAgIHJldHVybiBGQUxTRTsKK30KK3ZvaWQgQ0ZYX0dFTW9kdWxlOjpJbml0UGxhdGZvcm0oKQoreworICAgIG1fcEZvbnRNZ3ItPlNldFN5c3RlbUZvbnRJbmZvKElGWF9TeXN0ZW1Gb250SW5mbzo6Q3JlYXRlRGVmYXVsdCgpKTsKK30KK3ZvaWQgQ0ZYX0dFTW9kdWxlOjpEZXN0cm95UGxhdGZvcm0oKQoreworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGdlL2dlL2Z4X2dlX3BhdGguY3BwIGIvY29yZS9zcmMvZnhnZS9nZS9meF9nZV9wYXRoLmNwcAppbmRleCBmYzZlZTUyLi5jZDNmZjBlIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL2dlL2Z4X2dlX3BhdGguY3BwCisrKyBiL2NvcmUvc3JjL2Z4Z2UvZ2UvZnhfZ2VfcGF0aC5jcHAKQEAgLTEsNjU0ICsxLDY1NCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjcnQvZnhfYmFzaWMuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiDQotQ0ZYX0NsaXBSZ246OkNGWF9DbGlwUmduKGludCB3aWR0aCwgaW50IGhlaWdodCkNCi17DQotICAgIG1fVHlwZSA9IFJlY3RJOw0KLSAgICBtX0JveC5sZWZ0ID0gbV9Cb3gudG9wID0gMDsNCi0gICAgbV9Cb3gucmlnaHQgPSB3aWR0aDsNCi0gICAgbV9Cb3guYm90dG9tID0gaGVpZ2h0Ow0KLX0NCi1DRlhfQ2xpcFJnbjo6Q0ZYX0NsaXBSZ24oY29uc3QgRlhfUkVDVCYgcmVjdCkNCi17DQotICAgIG1fVHlwZSA9IFJlY3RJOw0KLSAgICBtX0JveCA9IHJlY3Q7DQotfQ0KLUNGWF9DbGlwUmduOjpDRlhfQ2xpcFJnbihjb25zdCBDRlhfQ2xpcFJnbiYgc3JjKQ0KLXsNCi0gICAgbV9UeXBlID0gc3JjLm1fVHlwZTsNCi0gICAgbV9Cb3ggPSBzcmMubV9Cb3g7DQotICAgIG1fTWFzayA9IHNyYy5tX01hc2s7DQotfQ0KLUNGWF9DbGlwUmduOjp+Q0ZYX0NsaXBSZ24oKQ0KLXsNCi19DQotdm9pZCBDRlhfQ2xpcFJnbjo6UmVzZXQoY29uc3QgRlhfUkVDVCYgcmVjdCkNCi17DQotICAgIG1fVHlwZSA9IFJlY3RJOw0KLSAgICBtX0JveCA9IHJlY3Q7DQotICAgIG1fTWFzay5TZXROdWxsKCk7DQotfQ0KLXZvaWQgQ0ZYX0NsaXBSZ246OkludGVyc2VjdFJlY3QoY29uc3QgRlhfUkVDVCYgcmVjdCkNCi17DQotICAgIGlmIChtX1R5cGUgPT0gUmVjdEkpIHsNCi0gICAgICAgIG1fQm94LkludGVyc2VjdChyZWN0KTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAobV9UeXBlID09IE1hc2tGKSB7DQotICAgICAgICBJbnRlcnNlY3RNYXNrUmVjdChyZWN0LCBtX0JveCwgbV9NYXNrKTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9DbGlwUmduOjpJbnRlcnNlY3RNYXNrUmVjdChGWF9SRUNUIHJlY3QsIEZYX1JFQ1QgbWFza19yZWN0LCBDRlhfRElCaXRtYXBSZWYgTWFzaykNCi17DQotICAgIGNvbnN0IENGWF9ESUJpdG1hcCogbWFza19kaWIgPSBNYXNrOw0KLSAgICBtX1R5cGUgPSBNYXNrRjsNCi0gICAgbV9Cb3ggPSByZWN0Ow0KLSAgICBtX0JveC5JbnRlcnNlY3QobWFza19yZWN0KTsNCi0gICAgaWYgKG1fQm94LklzRW1wdHkoKSkgew0KLSAgICAgICAgbV9UeXBlID0gUmVjdEk7DQotICAgICAgICByZXR1cm47DQotICAgIH0gZWxzZSBpZiAobV9Cb3ggPT0gbWFza19yZWN0KSB7DQotICAgICAgICBtX01hc2sgPSBNYXNrOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENGWF9ESUJpdG1hcCogbmV3X2RpYiA9IG1fTWFzay5OZXcoKTsNCi0gICAgaWYgKCFuZXdfZGliKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbmV3X2RpYi0+Q3JlYXRlKG1fQm94LldpZHRoKCksIG1fQm94LkhlaWdodCgpLCBGWERJQl84YnBwTWFzayk7DQotICAgIGZvciAoaW50IHJvdyA9IG1fQm94LnRvcDsgcm93IDwgbV9Cb3guYm90dG9tOyByb3cgKyspIHsNCi0gICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBuZXdfZGliLT5HZXRCdWZmZXIoKSArIG5ld19kaWItPkdldFBpdGNoKCkgKiAocm93IC0gbV9Cb3gudG9wKTsNCi0gICAgICAgIEZYX0xQQllURSBzcmNfc2NhbiA9IG1hc2tfZGliLT5HZXRCdWZmZXIoKSArIG1hc2tfZGliLT5HZXRQaXRjaCgpICogKHJvdyAtIG1hc2tfcmVjdC50b3ApOw0KLSAgICAgICAgZm9yIChpbnQgY29sID0gbV9Cb3gubGVmdDsgY29sIDwgbV9Cb3gucmlnaHQ7IGNvbCArKykgew0KLSAgICAgICAgICAgIGRlc3Rfc2Nhbltjb2wgLSBtX0JveC5sZWZ0XSA9IHNyY19zY2FuW2NvbCAtIG1hc2tfcmVjdC5sZWZ0XTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCi12b2lkIENGWF9DbGlwUmduOjpJbnRlcnNlY3RNYXNrRihpbnQgbGVmdCwgaW50IHRvcCwgQ0ZYX0RJQml0bWFwUmVmIE1hc2spDQotew0KLSAgICBjb25zdCBDRlhfRElCaXRtYXAqIG1hc2tfZGliID0gTWFzazsNCi0gICAgQVNTRVJUKG1hc2tfZGliLT5HZXRGb3JtYXQoKSA9PSBGWERJQl84YnBwTWFzayk7DQotICAgIEZYX1JFQ1QgbWFza19ib3gobGVmdCwgdG9wLCBsZWZ0ICsgbWFza19kaWItPkdldFdpZHRoKCksIHRvcCArIG1hc2tfZGliLT5HZXRIZWlnaHQoKSk7DQotICAgIGlmIChtX1R5cGUgPT0gUmVjdEkpIHsNCi0gICAgICAgIEludGVyc2VjdE1hc2tSZWN0KG1fQm94LCBtYXNrX2JveCwgTWFzayk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKG1fVHlwZSA9PSBNYXNrRikgew0KLSAgICAgICAgRlhfUkVDVCBuZXdfYm94ID0gbV9Cb3g7DQotICAgICAgICBuZXdfYm94LkludGVyc2VjdChtYXNrX2JveCk7DQotICAgICAgICBpZiAobmV3X2JveC5Jc0VtcHR5KCkpIHsNCi0gICAgICAgICAgICBtX1R5cGUgPSBSZWN0STsNCi0gICAgICAgICAgICBtX01hc2suU2V0TnVsbCgpOw0KLSAgICAgICAgICAgIG1fQm94ID0gbmV3X2JveDsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBDRlhfRElCaXRtYXBSZWYgbmV3X21hc2s7DQotICAgICAgICBDRlhfRElCaXRtYXAqIG5ld19kaWIgPSBuZXdfbWFzay5OZXcoKTsNCi0gICAgICAgIGlmICghbmV3X2RpYikgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIG5ld19kaWItPkNyZWF0ZShuZXdfYm94LldpZHRoKCksIG5ld19ib3guSGVpZ2h0KCksIEZYRElCXzhicHBNYXNrKTsNCi0gICAgICAgIGNvbnN0IENGWF9ESUJpdG1hcCogb2xkX2RpYiA9IG1fTWFzazsNCi0gICAgICAgIGZvciAoaW50IHJvdyA9IG5ld19ib3gudG9wOyByb3cgPCBuZXdfYm94LmJvdHRvbTsgcm93ICsrKSB7DQotICAgICAgICAgICAgRlhfTFBCWVRFIG9sZF9zY2FuID0gb2xkX2RpYi0+R2V0QnVmZmVyKCkgKyAocm93IC0gbV9Cb3gudG9wKSAqIG9sZF9kaWItPkdldFBpdGNoKCk7DQotICAgICAgICAgICAgRlhfTFBCWVRFIG1hc2tfc2NhbiA9IG1hc2tfZGliLT5HZXRCdWZmZXIoKSArIChyb3cgLSB0b3ApICogbWFza19kaWItPkdldFBpdGNoKCk7DQotICAgICAgICAgICAgRlhfTFBCWVRFIG5ld19zY2FuID0gbmV3X2RpYi0+R2V0QnVmZmVyKCkgKyAocm93IC0gbmV3X2JveC50b3ApICogbmV3X2RpYi0+R2V0UGl0Y2goKTsNCi0gICAgICAgICAgICBmb3IgKGludCBjb2wgPSBuZXdfYm94LmxlZnQ7IGNvbCA8IG5ld19ib3gucmlnaHQ7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICBuZXdfc2Nhbltjb2wgLSBuZXdfYm94LmxlZnRdID0gb2xkX3NjYW5bY29sIC0gbV9Cb3gubGVmdF0gKiBtYXNrX3NjYW5bY29sIC0gbGVmdF0gLyAyNTU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9Cb3ggPSBuZXdfYm94Ow0KLSAgICAgICAgbV9NYXNrID0gbmV3X21hc2s7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgQVNTRVJUKEZBTFNFKTsNCi19DQotQ0ZYX1BhdGhEYXRhOjpDRlhfUGF0aERhdGEoKQ0KLXsNCi0gICAgbV9Qb2ludENvdW50ID0gbV9BbGxvY0NvdW50ID0gMDsNCi0gICAgbV9wUG9pbnRzID0gTlVMTDsNCi19DQotQ0ZYX1BhdGhEYXRhOjp+Q0ZYX1BhdGhEYXRhKCkNCi17DQotICAgIGlmIChtX3BQb2ludHMpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wUG9pbnRzKTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENGWF9QYXRoRGF0YTo6U2V0UG9pbnRDb3VudChpbnQgblBvaW50cykNCi17DQotICAgIG1fUG9pbnRDb3VudCA9IG5Qb2ludHM7DQotICAgIGlmIChtX0FsbG9jQ291bnQgPCBuUG9pbnRzKSB7DQotICAgICAgICBpZiAobV9wUG9pbnRzKSB7DQotICAgICAgICAgICAgRlhfRnJlZShtX3BQb2ludHMpOw0KLSAgICAgICAgICAgIG1fcFBvaW50cyA9IE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBtX3BQb2ludHMgPSBGWF9BbGxvYyhGWF9QQVRIUE9JTlQsIG5Qb2ludHMpOw0KLSAgICAgICAgaWYgKCFtX3BQb2ludHMpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBtX0FsbG9jQ291bnQgPSBuUG9pbnRzOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENGWF9QYXRoRGF0YTo6QWxsb2NQb2ludENvdW50KGludCBuUG9pbnRzKQ0KLXsNCi0gICAgaWYgKG1fQWxsb2NDb3VudCA8IG5Qb2ludHMpIHsNCi0gICAgICAgIEZYX1BBVEhQT0lOVCogcE5ld0J1ZiA9IEZYX0FsbG9jKEZYX1BBVEhQT0lOVCwgblBvaW50cyk7DQotICAgICAgICBpZiAoIXBOZXdCdWYpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9Qb2ludENvdW50KSB7DQotICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIocE5ld0J1ZiwgbV9wUG9pbnRzLCBtX1BvaW50Q291bnQgKiBzaXplb2YoRlhfUEFUSFBPSU5UKSk7DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9wUG9pbnRzKSB7DQotICAgICAgICAgICAgRlhfRnJlZShtX3BQb2ludHMpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbV9wUG9pbnRzID0gcE5ld0J1ZjsNCi0gICAgICAgIG1fQWxsb2NDb3VudCA9IG5Qb2ludHM7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUNGWF9QYXRoRGF0YTo6Q0ZYX1BhdGhEYXRhKGNvbnN0IENGWF9QYXRoRGF0YSYgc3JjKQ0KLXsNCi0gICAgbV9wUG9pbnRzID0gTlVMTDsNCi0gICAgbV9Qb2ludENvdW50ID0gbV9BbGxvY0NvdW50ID0gc3JjLm1fUG9pbnRDb3VudDsNCi0gICAgbV9wUG9pbnRzID0gRlhfQWxsb2MoRlhfUEFUSFBPSU5ULCBzcmMubV9Qb2ludENvdW50KTsNCi0gICAgaWYgKCFtX3BQb2ludHMpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWFNZU19tZW1jcHkzMihtX3BQb2ludHMsIHNyYy5tX3BQb2ludHMsIHNpemVvZihGWF9QQVRIUE9JTlQpICogbV9Qb2ludENvdW50KTsNCi19DQotdm9pZCBDRlhfUGF0aERhdGE6OlRyaW1Qb2ludHMoaW50IG5Qb2ludHMpDQotew0KLSAgICBpZiAobV9Qb2ludENvdW50IDw9IG5Qb2ludHMpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBTZXRQb2ludENvdW50KG5Qb2ludHMpOw0KLX0NCi1GWF9CT09MIENGWF9QYXRoRGF0YTo6QWRkUG9pbnRDb3VudChpbnQgYWRkUG9pbnRzKQ0KLXsNCi0gICAgaW50IG5ld19jb3VudCA9IG1fUG9pbnRDb3VudCArIGFkZFBvaW50czsNCi0gICAgaWYgKCFBbGxvY1BvaW50Q291bnQobmV3X2NvdW50KSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIG1fUG9pbnRDb3VudCA9IG5ld19jb3VudDsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ0ZYX1BhdGhEYXRhOjpBcHBlbmQoY29uc3QgQ0ZYX1BhdGhEYXRhKiBwU3JjLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4KQ0KLXsNCi0gICAgaW50IG9sZF9jb3VudCA9IG1fUG9pbnRDb3VudDsNCi0gICAgaWYgKCFBZGRQb2ludENvdW50KHBTcmMtPm1fUG9pbnRDb3VudCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWFNZU19tZW1jcHkzMihtX3BQb2ludHMgKyBvbGRfY291bnQsIHBTcmMtPm1fcFBvaW50cywgcFNyYy0+bV9Qb2ludENvdW50ICogc2l6ZW9mKEZYX1BBVEhQT0lOVCkpOw0KLSAgICBpZiAocE1hdHJpeCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBTcmMtPm1fUG9pbnRDb3VudDsgaSArKykgew0KLSAgICAgICAgcE1hdHJpeC0+VHJhbnNmb3JtKG1fcFBvaW50c1tvbGRfY291bnQgKyBpXS5tX1BvaW50WCwgbV9wUG9pbnRzW29sZF9jb3VudCArIGldLm1fUG9pbnRZKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotdm9pZCBDRlhfUGF0aERhdGE6OlNldFBvaW50KGludCBpbmRleCwgRlhfRkxPQVQgeCwgRlhfRkxPQVQgeSwgaW50IGZsYWcpDQotew0KLSAgICBBU1NFUlQoaW5kZXggPCBtX1BvaW50Q291bnQpOw0KLSAgICBtX3BQb2ludHNbaW5kZXhdLm1fUG9pbnRYID0geDsNCi0gICAgbV9wUG9pbnRzW2luZGV4XS5tX1BvaW50WSA9IHk7DQotICAgIG1fcFBvaW50c1tpbmRleF0ubV9GbGFnID0gZmxhZzsNCi19DQotRlhfQk9PTCBDRlhfUGF0aERhdGE6OkFwcGVuZFJlY3QoRlhfRkxPQVQgbGVmdCwgRlhfRkxPQVQgYm90dG9tLCBGWF9GTE9BVCByaWdodCwgRlhfRkxPQVQgdG9wKQ0KLXsNCi0gICAgaW50IG9sZF9jb3VudCA9IG1fUG9pbnRDb3VudDsNCi0gICAgaWYgKCFBZGRQb2ludENvdW50KDUpKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgRlhfUEFUSFBPSU5UKiBwUG9pbnRzID0gbV9wUG9pbnRzICsgb2xkX2NvdW50Ow0KLSAgICBwUG9pbnRzWzBdLm1fUG9pbnRYID0gcFBvaW50c1sxXS5tX1BvaW50WCA9IHBQb2ludHNbNF0ubV9Qb2ludFggPSBsZWZ0Ow0KLSAgICBwUG9pbnRzWzJdLm1fUG9pbnRYID0gcFBvaW50c1szXS5tX1BvaW50WCA9IHJpZ2h0Ow0KLSAgICBwUG9pbnRzWzBdLm1fUG9pbnRZID0gcFBvaW50c1szXS5tX1BvaW50WSA9IHBQb2ludHNbNF0ubV9Qb2ludFkgPSBib3R0b207DQotICAgIHBQb2ludHNbMV0ubV9Qb2ludFkgPSBwUG9pbnRzWzJdLm1fUG9pbnRZID0gdG9wOw0KLSAgICBwUG9pbnRzWzBdLm1fRmxhZyA9IEZYUFRfTU9WRVRPOw0KLSAgICBwUG9pbnRzWzFdLm1fRmxhZyA9IHBQb2ludHNbMl0ubV9GbGFnID0gcFBvaW50c1szXS5tX0ZsYWcgPSBGWFBUX0xJTkVUTzsNCi0gICAgcFBvaW50c1s0XS5tX0ZsYWcgPSBGWFBUX0xJTkVUTyB8IEZYUFRfQ0xPU0VGSUdVUkU7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1DRlhfRmxvYXRSZWN0IENGWF9QYXRoRGF0YTo6R2V0Qm91bmRpbmdCb3goKSBjb25zdA0KLXsNCi0gICAgQ0ZYX0Zsb2F0UmVjdCByZWN0Ow0KLSAgICBpZiAobV9Qb2ludENvdW50KSB7DQotICAgICAgICByZWN0LkluaXRSZWN0KG1fcFBvaW50c1swXS5tX1BvaW50WCwgbV9wUG9pbnRzWzBdLm1fUG9pbnRZKTsNCi0gICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbV9Qb2ludENvdW50OyBpICsrKSB7DQotICAgICAgICAgICAgcmVjdC5VcGRhdGVSZWN0KG1fcFBvaW50c1tpXS5tX1BvaW50WCwgbV9wUG9pbnRzW2ldLm1fUG9pbnRZKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gcmVjdDsNCi19DQotc3RhdGljIHZvaWQgX1VwZGF0ZUxpbmVFbmRQb2ludHMoQ0ZYX0Zsb2F0UmVjdCYgcmVjdCwgRlhfRkxPQVQgc3RhcnRfeCwgRlhfRkxPQVQgc3RhcnRfeSwgRlhfRkxPQVQgZW5kX3gsIEZYX0ZMT0FUIGVuZF95LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIGh3KQ0KLXsNCi0gICAgaWYgKHN0YXJ0X3ggPT0gZW5kX3gpIHsNCi0gICAgICAgIGlmIChzdGFydF95ID09IGVuZF95KSB7DQotICAgICAgICAgICAgcmVjdC5VcGRhdGVSZWN0KGVuZF94ICsgaHcsIGVuZF95ICsgaHcpOw0KLSAgICAgICAgICAgIHJlY3QuVXBkYXRlUmVjdChlbmRfeCAtIGh3LCBlbmRfeSAtIGh3KTsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBGWF9GTE9BVCBwb2ludF95Ow0KLSAgICAgICAgaWYgKGVuZF95IDwgc3RhcnRfeSkgew0KLSAgICAgICAgICAgIHBvaW50X3kgPSBlbmRfeSAtIGh3Ow0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBwb2ludF95ID0gZW5kX3kgKyBodzsNCi0gICAgICAgIH0NCi0gICAgICAgIHJlY3QuVXBkYXRlUmVjdChlbmRfeCArIGh3LCBwb2ludF95KTsNCi0gICAgICAgIHJlY3QuVXBkYXRlUmVjdChlbmRfeCAtIGh3LCBwb2ludF95KTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfSBlbHNlIGlmIChzdGFydF95ID09IGVuZF95KSB7DQotICAgICAgICBGWF9GTE9BVCBwb2ludF94Ow0KLSAgICAgICAgaWYgKGVuZF94IDwgc3RhcnRfeCkgew0KLSAgICAgICAgICAgIHBvaW50X3ggPSBlbmRfeCAtIGh3Ow0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBwb2ludF94ID0gZW5kX3ggKyBodzsNCi0gICAgICAgIH0NCi0gICAgICAgIHJlY3QuVXBkYXRlUmVjdChwb2ludF94LCBlbmRfeSArIGh3KTsNCi0gICAgICAgIHJlY3QuVXBkYXRlUmVjdChwb2ludF94LCBlbmRfeSAtIGh3KTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9GTE9BVCBkeCA9IGVuZF94IC0gc3RhcnRfeDsNCi0gICAgRlhfRkxPQVQgZHkgPSBlbmRfeSAtIHN0YXJ0X3k7DQotICAgIEZYX0ZMT0FUIGxsID0gRlhTWVNfc3FydDIoZHgsIGR5KTsNCi0gICAgRlhfRkxPQVQgbXggPSBlbmRfeCArIGh3ICogZHggLyBsbDsNCi0gICAgRlhfRkxPQVQgbXkgPSBlbmRfeSArIGh3ICogZHkgLyBsbDsNCi0gICAgRlhfRkxPQVQgZHgxID0gaHcgKiBkeSAvIGxsOw0KLSAgICBGWF9GTE9BVCBkeTEgPSBodyAqIGR4IC8gbGw7DQotICAgIHJlY3QuVXBkYXRlUmVjdChteCAtIGR4MSwgbXkgKyBkeTEpOw0KLSAgICByZWN0LlVwZGF0ZVJlY3QobXggKyBkeDEsIG15IC0gZHkxKTsNCi19DQotc3RhdGljIHZvaWQgX1VwZGF0ZUxpbmVKb2luUG9pbnRzKENGWF9GbG9hdFJlY3QmIHJlY3QsIEZYX0ZMT0FUIHN0YXJ0X3gsIEZYX0ZMT0FUIHN0YXJ0X3ksDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIG1pZGRsZV94LCBGWF9GTE9BVCBtaWRkbGVfeSwgRlhfRkxPQVQgZW5kX3gsIEZYX0ZMT0FUIGVuZF95LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCBoYWxmX3dpZHRoLCBGWF9GTE9BVCBtaXRlcl9saW1pdCkNCi17DQotICAgIEZYX0ZMT0FUIHN0YXJ0X2sgPSAwLCBzdGFydF9jID0gMCwgZW5kX2sgPSAwLCBlbmRfYyA9IDAsIHN0YXJ0X2xlbiA9IDAsIHN0YXJ0X2RjID0gMCwgZW5kX2xlbiA9IDAsIGVuZF9kYyA9IDA7DQotICAgIEZYX0JPT0wgYlN0YXJ0VmVydCA9IEZYU1lTX2ZhYnMoc3RhcnRfeCAtIG1pZGRsZV94KSA8IDEuMGYgLyAyMDsNCi0gICAgRlhfQk9PTCBiRW5kVmVydCA9IEZYU1lTX2ZhYnMobWlkZGxlX3ggLSBlbmRfeCkgPCAxLjBmIC8gMjA7DQotICAgIGlmIChiU3RhcnRWZXJ0ICYmIGJFbmRWZXJ0KSB7DQotICAgICAgICBpbnQgc3RhcnRfZGlyID0gbWlkZGxlX3kgPiBzdGFydF95ID8gMSA6IC0xOw0KLSAgICAgICAgRlhfRkxPQVQgcG9pbnRfeSA9IG1pZGRsZV95ICsgaGFsZl93aWR0aCAqIHN0YXJ0X2RpcjsNCi0gICAgICAgIHJlY3QuVXBkYXRlUmVjdChtaWRkbGVfeCArIGhhbGZfd2lkdGgsIHBvaW50X3kpOw0KLSAgICAgICAgcmVjdC5VcGRhdGVSZWN0KG1pZGRsZV94IC0gaGFsZl93aWR0aCwgcG9pbnRfeSk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKCFiU3RhcnRWZXJ0KSB7DQotICAgICAgICBzdGFydF9rID0gRlhTWVNfRGl2KG1pZGRsZV95IC0gc3RhcnRfeSwgbWlkZGxlX3ggLSBzdGFydF94KTsNCi0gICAgICAgIHN0YXJ0X2MgPSBtaWRkbGVfeSAtIEZYU1lTX011bChzdGFydF9rLCBtaWRkbGVfeCk7DQotICAgICAgICBzdGFydF9sZW4gPSBGWFNZU19zcXJ0MihzdGFydF94IC0gbWlkZGxlX3gsIHN0YXJ0X3kgLSBtaWRkbGVfeSk7DQotICAgICAgICBzdGFydF9kYyA9IChGWF9GTE9BVClGWFNZU19mYWJzKEZYU1lTX011bERpdihoYWxmX3dpZHRoLCBzdGFydF9sZW4sIHN0YXJ0X3ggLSBtaWRkbGVfeCkpOw0KLSAgICB9DQotICAgIGlmICghYkVuZFZlcnQpIHsNCi0gICAgICAgIGVuZF9rID0gRlhTWVNfRGl2KGVuZF95IC0gbWlkZGxlX3ksIGVuZF94IC0gbWlkZGxlX3gpOw0KLSAgICAgICAgZW5kX2MgPSBtaWRkbGVfeSAtIEZYU1lTX011bChlbmRfaywgbWlkZGxlX3gpOw0KLSAgICAgICAgZW5kX2xlbiA9IEZYU1lTX3NxcnQyKGVuZF94IC0gbWlkZGxlX3gsIGVuZF95IC0gbWlkZGxlX3kpOw0KLSAgICAgICAgZW5kX2RjID0gKEZYX0ZMT0FUKUZYU1lTX2ZhYnMoRlhTWVNfTXVsRGl2KGhhbGZfd2lkdGgsIGVuZF9sZW4sIGVuZF94IC0gbWlkZGxlX3gpKTsNCi0gICAgfQ0KLSAgICBpZiAoYlN0YXJ0VmVydCkgew0KLSAgICAgICAgRlhfRkxPQVQgb3V0c2lkZV94ID0gc3RhcnRfeDsNCi0gICAgICAgIGlmIChlbmRfeCA8IHN0YXJ0X3gpIHsNCi0gICAgICAgICAgICBvdXRzaWRlX3ggKz0gaGFsZl93aWR0aDsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgb3V0c2lkZV94IC09IGhhbGZfd2lkdGg7DQotICAgICAgICB9DQotICAgICAgICBGWF9GTE9BVCBvdXRzaWRlX3k7DQotICAgICAgICBpZiAoc3RhcnRfeSA8IEZYU1lTX011bChlbmRfaywgc3RhcnRfeCkgKyBlbmRfYykgew0KLSAgICAgICAgICAgIG91dHNpZGVfeSA9IEZYU1lTX011bChlbmRfaywgb3V0c2lkZV94KSArIGVuZF9jICsgZW5kX2RjOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBvdXRzaWRlX3kgPSBGWFNZU19NdWwoZW5kX2ssIG91dHNpZGVfeCkgKyBlbmRfYyAtIGVuZF9kYzsNCi0gICAgICAgIH0NCi0gICAgICAgIHJlY3QuVXBkYXRlUmVjdChvdXRzaWRlX3gsIG91dHNpZGVfeSk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKGJFbmRWZXJ0KSB7DQotICAgICAgICBGWF9GTE9BVCBvdXRzaWRlX3ggPSBlbmRfeDsNCi0gICAgICAgIGlmIChzdGFydF94IDwgZW5kX3gpIHsNCi0gICAgICAgICAgICBvdXRzaWRlX3ggKz0gaGFsZl93aWR0aDsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgb3V0c2lkZV94IC09IGhhbGZfd2lkdGg7DQotICAgICAgICB9DQotICAgICAgICBGWF9GTE9BVCBvdXRzaWRlX3k7DQotICAgICAgICBpZiAoZW5kX3kgPCBGWFNZU19NdWwoc3RhcnRfaywgZW5kX3gpICsgc3RhcnRfYykgew0KLSAgICAgICAgICAgIG91dHNpZGVfeSA9IEZYU1lTX011bChzdGFydF9rLCBvdXRzaWRlX3gpICsgc3RhcnRfYyArIHN0YXJ0X2RjOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBvdXRzaWRlX3kgPSBGWFNZU19NdWwoc3RhcnRfaywgb3V0c2lkZV94KSArIHN0YXJ0X2MgLSBzdGFydF9kYzsNCi0gICAgICAgIH0NCi0gICAgICAgIHJlY3QuVXBkYXRlUmVjdChvdXRzaWRlX3gsIG91dHNpZGVfeSk7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKEZYU1lTX2ZhYnMoc3RhcnRfayAtIGVuZF9rKSA8IDEuMGYgLyAyMCkgew0KLSAgICAgICAgaW50IHN0YXJ0X2RpciA9IG1pZGRsZV94ID4gc3RhcnRfeCA/IDEgOiAtMTsNCi0gICAgICAgIGludCBlbmRfZGlyID0gZW5kX3ggPiBtaWRkbGVfeCA/IDEgOiAtMTsNCi0gICAgICAgIGlmIChzdGFydF9kaXIgPT0gZW5kX2Rpcikgew0KLSAgICAgICAgICAgIF9VcGRhdGVMaW5lRW5kUG9pbnRzKHJlY3QsIG1pZGRsZV94LCBtaWRkbGVfeSwgZW5kX3gsIGVuZF95LCBoYWxmX3dpZHRoKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgX1VwZGF0ZUxpbmVFbmRQb2ludHMocmVjdCwgc3RhcnRfeCwgc3RhcnRfeSwgbWlkZGxlX3gsIG1pZGRsZV95LCBoYWxmX3dpZHRoKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBGWF9GTE9BVCBzdGFydF9vdXRzaWRlX2MgPSBzdGFydF9jOw0KLSAgICBpZiAoZW5kX3kgPCBGWFNZU19NdWwoc3RhcnRfaywgZW5kX3gpICsgc3RhcnRfYykgew0KLSAgICAgICAgc3RhcnRfb3V0c2lkZV9jICs9IHN0YXJ0X2RjOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgc3RhcnRfb3V0c2lkZV9jIC09IHN0YXJ0X2RjOw0KLSAgICB9DQotICAgIEZYX0ZMT0FUIGVuZF9vdXRzaWRlX2MgPSBlbmRfYzsNCi0gICAgaWYgKHN0YXJ0X3kgPCBGWFNZU19NdWwoZW5kX2ssIHN0YXJ0X3gpICsgZW5kX2MpIHsNCi0gICAgICAgIGVuZF9vdXRzaWRlX2MgKz0gZW5kX2RjOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZW5kX291dHNpZGVfYyAtPSBlbmRfZGM7DQotICAgIH0NCi0gICAgRlhfRkxPQVQgam9pbl94ID0gRlhTWVNfRGl2KGVuZF9vdXRzaWRlX2MgLSBzdGFydF9vdXRzaWRlX2MsIHN0YXJ0X2sgLSBlbmRfayk7DQotICAgIEZYX0ZMT0FUIGpvaW5feSA9IEZYU1lTX011bChzdGFydF9rLCBqb2luX3gpICsgc3RhcnRfb3V0c2lkZV9jOw0KLSAgICByZWN0LlVwZGF0ZVJlY3Qoam9pbl94LCBqb2luX3kpOw0KLX0NCi1DRlhfRmxvYXRSZWN0IENGWF9QYXRoRGF0YTo6R2V0Qm91bmRpbmdCb3goRlhfRkxPQVQgbGluZV93aWR0aCwgRlhfRkxPQVQgbWl0ZXJfbGltaXQpIGNvbnN0DQotew0KLSAgICBDRlhfRmxvYXRSZWN0IHJlY3QoMTAwMDAwICogMS4wZiwgMTAwMDAwICogMS4wZiwgLTEwMDAwMCAqIDEuMGYsIC0xMDAwMDAgKiAxLjBmKTsNCi0gICAgaW50IGlQb2ludCA9IDA7DQotICAgIEZYX0ZMT0FUIGhhbGZfd2lkdGggPSBsaW5lX3dpZHRoOw0KLSAgICBpbnQgaVN0YXJ0UG9pbnQsIGlFbmRQb2ludCwgaU1pZGRsZVBvaW50Ow0KLSAgICBGWF9CT09MIGJKb2luOw0KLSAgICB3aGlsZSAoaVBvaW50IDwgbV9Qb2ludENvdW50KSB7DQotICAgICAgICBpZiAobV9wUG9pbnRzW2lQb2ludF0ubV9GbGFnID09IEZYUFRfTU9WRVRPKSB7DQotICAgICAgICAgICAgaVN0YXJ0UG9pbnQgPSBpUG9pbnQgKyAxOw0KLSAgICAgICAgICAgIGlFbmRQb2ludCA9IGlQb2ludDsNCi0gICAgICAgICAgICBiSm9pbiA9IEZBTFNFOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpZiAobV9wUG9pbnRzW2lQb2ludF0ubV9GbGFnID09IEZYUFRfQkVaSUVSVE8pIHsNCi0gICAgICAgICAgICAgICAgcmVjdC5VcGRhdGVSZWN0KG1fcFBvaW50c1tpUG9pbnRdLm1fUG9pbnRYLCBtX3BQb2ludHNbaVBvaW50XS5tX1BvaW50WSk7DQotICAgICAgICAgICAgICAgIHJlY3QuVXBkYXRlUmVjdChtX3BQb2ludHNbaVBvaW50ICsgMV0ubV9Qb2ludFgsIG1fcFBvaW50c1tpUG9pbnQgKyAxXS5tX1BvaW50WSk7DQotICAgICAgICAgICAgICAgIGlQb2ludCArPSAyOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoaVBvaW50ID09IG1fUG9pbnRDb3VudCAtIDEgfHwgbV9wUG9pbnRzW2lQb2ludCArIDFdLm1fRmxhZyA9PSBGWFBUX01PVkVUTykgew0KLSAgICAgICAgICAgICAgICBpU3RhcnRQb2ludCA9IGlQb2ludCAtIDE7DQotICAgICAgICAgICAgICAgIGlFbmRQb2ludCA9IGlQb2ludDsNCi0gICAgICAgICAgICAgICAgYkpvaW4gPSBGQUxTRTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBpU3RhcnRQb2ludCA9IGlQb2ludCAtIDE7DQotICAgICAgICAgICAgICAgIGlNaWRkbGVQb2ludCA9IGlQb2ludDsNCi0gICAgICAgICAgICAgICAgaUVuZFBvaW50ID0gaVBvaW50ICsgMTsNCi0gICAgICAgICAgICAgICAgYkpvaW4gPSBUUlVFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0ZMT0FUIHN0YXJ0X3ggPSBtX3BQb2ludHNbaVN0YXJ0UG9pbnRdLm1fUG9pbnRYOw0KLSAgICAgICAgRlhfRkxPQVQgc3RhcnRfeSA9IG1fcFBvaW50c1tpU3RhcnRQb2ludF0ubV9Qb2ludFk7DQotICAgICAgICBGWF9GTE9BVCBlbmRfeCA9IG1fcFBvaW50c1tpRW5kUG9pbnRdLm1fUG9pbnRYOw0KLSAgICAgICAgRlhfRkxPQVQgZW5kX3kgPSBtX3BQb2ludHNbaUVuZFBvaW50XS5tX1BvaW50WTsNCi0gICAgICAgIGlmIChiSm9pbikgew0KLSAgICAgICAgICAgIEZYX0ZMT0FUIG1pZGRsZV94ID0gbV9wUG9pbnRzW2lNaWRkbGVQb2ludF0ubV9Qb2ludFg7DQotICAgICAgICAgICAgRlhfRkxPQVQgbWlkZGxlX3kgPSBtX3BQb2ludHNbaU1pZGRsZVBvaW50XS5tX1BvaW50WTsNCi0gICAgICAgICAgICBfVXBkYXRlTGluZUpvaW5Qb2ludHMocmVjdCwgc3RhcnRfeCwgc3RhcnRfeSwgbWlkZGxlX3gsIG1pZGRsZV95LCBlbmRfeCwgZW5kX3ksIGhhbGZfd2lkdGgsIG1pdGVyX2xpbWl0KTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgX1VwZGF0ZUxpbmVFbmRQb2ludHMocmVjdCwgc3RhcnRfeCwgc3RhcnRfeSwgZW5kX3gsIGVuZF95LCBoYWxmX3dpZHRoKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlQb2ludCArKzsNCi0gICAgfQ0KLSAgICByZXR1cm4gcmVjdDsNCi19DQotdm9pZCBDRlhfUGF0aERhdGE6OlRyYW5zZm9ybShjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4KQ0KLXsNCi0gICAgaWYgKHBNYXRyaXggPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9Qb2ludENvdW50OyBpICsrKSB7DQotICAgICAgICBwTWF0cml4LT5UcmFuc2Zvcm0obV9wUG9pbnRzW2ldLm1fUG9pbnRYLCBtX3BQb2ludHNbaV0ubV9Qb2ludFkpOw0KLSAgICB9DQotfQ0KLWNvbnN0IGludCBnX0Rpc3RhbnRbMTBdID0gezEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwfTsNCi1GWF9CT09MIENGWF9QYXRoRGF0YTo6R2V0WmVyb0FyZWFQYXRoKENGWF9QYXRoRGF0YSYgTmV3UGF0aCwgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgRlhfQk9PTCZiVGhpbiwgRlhfQk9PTCBiQWRqdXN0KSBjb25zdA0KLXsNCi0gICAgaWYgKG1fUG9pbnRDb3VudCA8IDMpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAobV9Qb2ludENvdW50ID09IDMgJiYgKG1fcFBvaW50c1swXS5tX0ZsYWcgJiBGWFBUX1RZUEUpID09IEZYUFRfTU9WRVRPICYmDQotICAgICAgICAgICAgKG1fcFBvaW50c1sxXS5tX0ZsYWcgJiBGWFBUX1RZUEUpID09IEZYUFRfTElORVRPICYmIChtX3BQb2ludHNbMl0ubV9GbGFnICYgRlhQVF9UWVBFKSA9PSBGWFBUX0xJTkVUTw0KLSAgICAgICAgICAgICYmIG1fcFBvaW50c1swXS5tX1BvaW50WCA9PSBtX3BQb2ludHNbMl0ubV9Qb2ludFggJiYgbV9wUG9pbnRzWzBdLm1fUG9pbnRZID09IG1fcFBvaW50c1syXS5tX1BvaW50WSkgew0KLSAgICAgICAgTmV3UGF0aC5BZGRQb2ludENvdW50KDIpOw0KLSAgICAgICAgaWYgKGJBZGp1c3QpIHsNCi0gICAgICAgICAgICBpZiAocE1hdHJpeCkgew0KLSAgICAgICAgICAgICAgICBGWF9GTE9BVCB4ID0gbV9wUG9pbnRzWzBdLm1fUG9pbnRYLCB5ID0gbV9wUG9pbnRzWzBdLm1fUG9pbnRZOw0KLSAgICAgICAgICAgICAgICBwTWF0cml4LT5UcmFuc2Zvcm1Qb2ludCh4LCB5KTsNCi0gICAgICAgICAgICAgICAgeCA9IChpbnQpeCArIDAuNWY7DQotICAgICAgICAgICAgICAgIHkgPSAoaW50KXkgKyAwLjVmOw0KLSAgICAgICAgICAgICAgICBOZXdQYXRoLlNldFBvaW50KDAsIHgsIHksIEZYUFRfTU9WRVRPKTsNCi0gICAgICAgICAgICAgICAgeCA9IG1fcFBvaW50c1sxXS5tX1BvaW50WCwgeSA9IG1fcFBvaW50c1sxXS5tX1BvaW50WTsNCi0gICAgICAgICAgICAgICAgcE1hdHJpeC0+VHJhbnNmb3JtUG9pbnQoeCwgeSk7DQotICAgICAgICAgICAgICAgIHggPSAoaW50KXggKyAwLjVmOw0KLSAgICAgICAgICAgICAgICB5ID0gKGludCl5ICsgMC41ZjsNCi0gICAgICAgICAgICAgICAgTmV3UGF0aC5TZXRQb2ludCgxLCB4LCB5LCBGWFBUX0xJTkVUTyk7DQotICAgICAgICAgICAgICAgIHBNYXRyaXgtPlNldElkZW50aXR5KCk7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgRlhfRkxPQVQgeCA9IChpbnQpbV9wUG9pbnRzWzBdLm1fUG9pbnRYICsgMC41ZiwgeSA9IChpbnQpbV9wUG9pbnRzWzBdLm1fUG9pbnRZICsgMC41ZjsNCi0gICAgICAgICAgICAgICAgTmV3UGF0aC5TZXRQb2ludCgwLCB4LCB5LCBGWFBUX01PVkVUTyk7DQotICAgICAgICAgICAgICAgIHggPSAoaW50KW1fcFBvaW50c1sxXS5tX1BvaW50WCArIDAuNWYsIHkgPSAoaW50KW1fcFBvaW50c1sxXS5tX1BvaW50WSArIDAuNWY7DQotICAgICAgICAgICAgICAgIE5ld1BhdGguU2V0UG9pbnQoMSwgeCwgeSwgRlhQVF9MSU5FVE8pOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgTmV3UGF0aC5TZXRQb2ludCgwLCBtX3BQb2ludHNbMF0ubV9Qb2ludFgsIG1fcFBvaW50c1swXS5tX1BvaW50WSwgRlhQVF9NT1ZFVE8pOw0KLSAgICAgICAgICAgIE5ld1BhdGguU2V0UG9pbnQoMSwgbV9wUG9pbnRzWzFdLm1fUG9pbnRYLCBtX3BQb2ludHNbMV0ubV9Qb2ludFksIEZYUFRfTElORVRPKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX3BQb2ludHNbMF0ubV9Qb2ludFggIT0gbV9wUG9pbnRzWzFdLm1fUG9pbnRYICYmIG1fcFBvaW50c1swXS5tX1BvaW50WSAhPSBtX3BQb2ludHNbMV0ubV9Qb2ludFkpIHsNCi0gICAgICAgICAgICBiVGhpbiA9IFRSVUU7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBpZiAoKChtX1BvaW50Q291bnQgPiAzKSAmJiAobV9Qb2ludENvdW50ICUgMikpKSB7DQotICAgICAgICBpbnQgbWlkID0gbV9Qb2ludENvdW50IC8gMjsNCi0gICAgICAgIEZYX0JPT0wgYlplcm9BcmVhID0gRkFMU0U7DQotICAgICAgICBDRlhfUGF0aERhdGEgdF9wYXRoOw0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaWQ7IGkrKykgew0KLSAgICAgICAgICAgIGlmICghKG1fcFBvaW50c1ttaWQgLSBpIC0gMV0ubV9Qb2ludFggPT0gbV9wUG9pbnRzW21pZCArIGkgKyAxXS5tX1BvaW50WA0KLSAgICAgICAgICAgICAgICAgICAgJiYgbV9wUG9pbnRzW21pZCAtIGkgLSAxXS5tX1BvaW50WSA9PSBtX3BQb2ludHNbbWlkICsgaSArIDFdLm1fUG9pbnRZICYmDQotICAgICAgICAgICAgICAgICAgICAoKG1fcFBvaW50c1ttaWQgLSBpIC0gMV0ubV9GbGFnICYgRlhQVF9UWVBFKSAhPSBGWFBUX0JFWklFUlRPICYmIChtX3BQb2ludHNbbWlkICsgaSArIDFdLm1fRmxhZyAmIEZYUFRfVFlQRSkgIT0gRlhQVF9CRVpJRVJUTykpKSB7DQotICAgICAgICAgICAgICAgIGJaZXJvQXJlYSA9IFRSVUU7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpbnQgbmV3X2NvdW50ID0gdF9wYXRoLkdldFBvaW50Q291bnQoKTsNCi0gICAgICAgICAgICB0X3BhdGguQWRkUG9pbnRDb3VudCgyKTsNCi0gICAgICAgICAgICB0X3BhdGguU2V0UG9pbnQobmV3X2NvdW50LCBtX3BQb2ludHNbbWlkIC0gaV0ubV9Qb2ludFgsIG1fcFBvaW50c1ttaWQgLSBpXS5tX1BvaW50WSwgRlhQVF9NT1ZFVE8pOw0KLSAgICAgICAgICAgIHRfcGF0aC5TZXRQb2ludChuZXdfY291bnQgKyAxLCBtX3BQb2ludHNbbWlkIC0gaSAtIDFdLm1fUG9pbnRYLCBtX3BQb2ludHNbbWlkIC0gaSAtIDFdLm1fUG9pbnRZLCBGWFBUX0xJTkVUTyk7DQotICAgICAgICB9DQotICAgICAgICBpZiAoIWJaZXJvQXJlYSkgew0KLSAgICAgICAgICAgIE5ld1BhdGguQXBwZW5kKCZ0X3BhdGgsIE5VTEwpOw0KLSAgICAgICAgICAgIGJUaGluID0gVFJVRTsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpbnQgc3RyYXRQb2ludCA9IDA7DQotICAgIGludCBuZXh0ID0gMCwgaTsNCi0gICAgZm9yIChpID0gMDsgaSA8IG1fUG9pbnRDb3VudDsgaSsrKSB7DQotICAgICAgICBpbnQgcG9pbnRfdHlwZSA9IG1fcFBvaW50c1tpXS5tX0ZsYWcgJiBGWFBUX1RZUEU7DQotICAgICAgICBpZiAocG9pbnRfdHlwZSA9PSBGWFBUX01PVkVUTykgew0KLSAgICAgICAgICAgIHN0cmF0UG9pbnQgPSBpOw0KLSAgICAgICAgfSBlbHNlIGlmIChwb2ludF90eXBlID09IEZYUFRfTElORVRPKSB7DQotICAgICAgICAgICAgbmV4dCA9IChpICsgMSAtIHN0cmF0UG9pbnQpICUgKG1fUG9pbnRDb3VudCAtIHN0cmF0UG9pbnQpICsgc3RyYXRQb2ludDsNCi0gICAgICAgICAgICBpZiAoKG1fcFBvaW50c1tuZXh0XS5tX0ZsYWcgJiBGWFBUX1RZUEUpICE9IEZYUFRfQkVaSUVSVE8gJiYgKG1fcFBvaW50c1tuZXh0XS5tX0ZsYWcgJiBGWFBUX1RZUEUpICE9IEZYUFRfTU9WRVRPKSB7DQotICAgICAgICAgICAgICAgIGlmKChtX3BQb2ludHNbaSAtIDFdLm1fUG9pbnRYID09IG1fcFBvaW50c1tpXS5tX1BvaW50WCAmJiBtX3BQb2ludHNbaV0ubV9Qb2ludFggPT0gbV9wUG9pbnRzW25leHRdLm1fUG9pbnRYKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICYmICgobV9wUG9pbnRzW2ldLm1fUG9pbnRZIC0gbV9wUG9pbnRzW2kgLSAxXS5tX1BvaW50WSkgKiAobV9wUG9pbnRzW2ldLm1fUG9pbnRZIC0gbV9wUG9pbnRzW25leHRdLm1fUG9pbnRZKSA+IDApKSB7DQotICAgICAgICAgICAgICAgICAgICBpbnQgcHJlID0gaTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChGWFNZU19mYWJzKG1fcFBvaW50c1tpXS5tX1BvaW50WSAtIG1fcFBvaW50c1tpIC0gMV0ubV9Qb2ludFkpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwgRlhTWVNfZmFicyhtX3BQb2ludHNbaV0ubV9Qb2ludFkgLSBtX3BQb2ludHNbbmV4dF0ubV9Qb2ludFkpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcHJlIC0tOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5leHQtLTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGludCBuZXdfY291bnQgPSBOZXdQYXRoLkdldFBvaW50Q291bnQoKTsNCi0gICAgICAgICAgICAgICAgICAgIE5ld1BhdGguQWRkUG9pbnRDb3VudCgyKTsNCi0gICAgICAgICAgICAgICAgICAgIE5ld1BhdGguU2V0UG9pbnQobmV3X2NvdW50LCBtX3BQb2ludHNbcHJlXS5tX1BvaW50WCwgbV9wUG9pbnRzW3ByZV0ubV9Qb2ludFksIEZYUFRfTU9WRVRPKTsNCi0gICAgICAgICAgICAgICAgICAgIE5ld1BhdGguU2V0UG9pbnQobmV3X2NvdW50ICsgMSwgbV9wUG9pbnRzW25leHRdLm1fUG9pbnRYLCBtX3BQb2ludHNbbmV4dF0ubV9Qb2ludFksIEZYUFRfTElORVRPKTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmKChtX3BQb2ludHNbaSAtIDFdLm1fUG9pbnRZID09IG1fcFBvaW50c1tpXS5tX1BvaW50WSAmJiBtX3BQb2ludHNbaV0ubV9Qb2ludFkgPT0gbV9wUG9pbnRzW25leHRdLm1fUG9pbnRZKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChtX3BQb2ludHNbaV0ubV9Qb2ludFggLSBtX3BQb2ludHNbaSAtIDFdLm1fUG9pbnRYKSAqIChtX3BQb2ludHNbaV0ubV9Qb2ludFggLSBtX3BQb2ludHNbbmV4dF0ubV9Qb2ludFgpID4gMCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIGludCBwcmUgPSBpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKEZYU1lTX2ZhYnMobV9wUG9pbnRzW2ldLm1fUG9pbnRYIC0gbV9wUG9pbnRzW2kgLSAxXS5tX1BvaW50WCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCBGWFNZU19mYWJzKG1fcFBvaW50c1tpXS5tX1BvaW50WCAtIG1fcFBvaW50c1tuZXh0XS5tX1BvaW50WCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmUgLS07DQotICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC0tOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaW50IG5ld19jb3VudCA9IE5ld1BhdGguR2V0UG9pbnRDb3VudCgpOw0KLSAgICAgICAgICAgICAgICAgICAgTmV3UGF0aC5BZGRQb2ludENvdW50KDIpOw0KLSAgICAgICAgICAgICAgICAgICAgTmV3UGF0aC5TZXRQb2ludChuZXdfY291bnQsIG1fcFBvaW50c1twcmVdLm1fUG9pbnRYLCBtX3BQb2ludHNbcHJlXS5tX1BvaW50WSwgRlhQVF9NT1ZFVE8pOw0KLSAgICAgICAgICAgICAgICAgICAgTmV3UGF0aC5TZXRQb2ludChuZXdfY291bnQgKyAxLCBtX3BQb2ludHNbbmV4dF0ubV9Qb2ludFgsIG1fcFBvaW50c1tuZXh0XS5tX1BvaW50WSwgRlhQVF9MSU5FVE8pOw0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChtX3BQb2ludHNbaSAtIDFdLm1fRmxhZyAmIEZYUFRfVFlQRSkgPT0gRlhQVF9NT1ZFVE8gJiYgKG1fcFBvaW50c1tuZXh0XS5tX0ZsYWcgJiBGWFBUX1RZUEUpID09IEZYUFRfTElORVRPICYmDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wUG9pbnRzW2kgLSAxXS5tX1BvaW50WCA9PSBtX3BQb2ludHNbbmV4dF0ubV9Qb2ludFggJiYgbV9wUG9pbnRzW2kgLSAxXS5tX1BvaW50WSA9PSBtX3BQb2ludHNbbmV4dF0ubV9Qb2ludFkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBtX3BQb2ludHNbbmV4dF0ubV9GbGFnICYgRlhQVF9DTE9TRUZJR1VSRSkgew0KLSAgICAgICAgICAgICAgICAgICAgaW50IG5ld19jb3VudCA9IE5ld1BhdGguR2V0UG9pbnRDb3VudCgpOw0KLSAgICAgICAgICAgICAgICAgICAgTmV3UGF0aC5BZGRQb2ludENvdW50KDIpOw0KLSAgICAgICAgICAgICAgICAgICAgTmV3UGF0aC5TZXRQb2ludChuZXdfY291bnQsIG1fcFBvaW50c1tpIC0gMV0ubV9Qb2ludFgsIG1fcFBvaW50c1tpIC0gMV0ubV9Qb2ludFksIEZYUFRfTU9WRVRPKTsNCi0gICAgICAgICAgICAgICAgICAgIE5ld1BhdGguU2V0UG9pbnQobmV3X2NvdW50ICsgMSwgbV9wUG9pbnRzW2ldLm1fUG9pbnRYLCBtX3BQb2ludHNbaV0ubV9Qb2ludFksIEZYUFRfTElORVRPKTsNCi0gICAgICAgICAgICAgICAgICAgIGJUaGluID0gVFJVRTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSBpZiAocG9pbnRfdHlwZSA9PSBGWFBUX0JFWklFUlRPKSB7DQotICAgICAgICAgICAgaSArPSAyOw0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChtX1BvaW50Q291bnQgPiAzICYmIE5ld1BhdGguR2V0UG9pbnRDb3VudCgpKSB7DQotICAgICAgICBiVGhpbiA9IFRSVUU7DQotICAgIH0NCi0gICAgaWYgKE5ld1BhdGguR2V0UG9pbnRDb3VudCgpID09IDApIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDRlhfUGF0aERhdGE6OklzUmVjdCgpIGNvbnN0DQotew0KLSAgICBpZiAobV9Qb2ludENvdW50ICE9IDUgJiYgbV9Qb2ludENvdW50ICE9IDQpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoKG1fUG9pbnRDb3VudCA9PSA1ICYmIChtX3BQb2ludHNbMF0ubV9Qb2ludFggIT0gbV9wUG9pbnRzWzRdLm1fUG9pbnRYIHx8DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcFBvaW50c1swXS5tX1BvaW50WSAhPSBtX3BQb2ludHNbNF0ubV9Qb2ludFkpKSB8fA0KLSAgICAgICAgICAgIChtX3BQb2ludHNbMF0ubV9Qb2ludFggPT0gbV9wUG9pbnRzWzJdLm1fUG9pbnRYICYmIG1fcFBvaW50c1swXS5tX1BvaW50WSA9PSBtX3BQb2ludHNbMl0ubV9Qb2ludFkpIHx8DQotICAgICAgICAgICAgKG1fcFBvaW50c1sxXS5tX1BvaW50WCA9PSBtX3BQb2ludHNbM10ubV9Qb2ludFggJiYgbV9wUG9pbnRzWzFdLm1fUG9pbnRZID09IG1fcFBvaW50c1szXS5tX1BvaW50WSkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAobV9wUG9pbnRzWzBdLm1fUG9pbnRYICE9IG1fcFBvaW50c1szXS5tX1BvaW50WCAmJiBtX3BQb2ludHNbMF0ubV9Qb2ludFkgIT0gbV9wUG9pbnRzWzNdLm1fUG9pbnRZKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgZm9yIChpbnQgaSA9IDE7IGkgPCA0OyBpICsrKSB7DQotICAgICAgICBpZiAoKG1fcFBvaW50c1tpXS5tX0ZsYWcgJiBGWFBUX1RZUEUpICE9IEZYUFRfTElORVRPKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKG1fcFBvaW50c1tpXS5tX1BvaW50WCAhPSBtX3BQb2ludHNbaSAtIDFdLm1fUG9pbnRYICYmIG1fcFBvaW50c1tpXS5tX1BvaW50WSAhPSBtX3BQb2ludHNbaSAtIDFdLm1fUG9pbnRZKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBtX1BvaW50Q291bnQgPT0gNSB8fCAobV9wUG9pbnRzWzNdLm1fRmxhZyAmIEZYUFRfQ0xPU0VGSUdVUkUpOw0KLX0NCi1GWF9CT09MIENGWF9QYXRoRGF0YTo6SXNSZWN0KGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIENGWF9GbG9hdFJlY3QqIHBSZWN0KSBjb25zdA0KLXsNCi0gICAgaWYgKHBNYXRyaXggPT0gTlVMTCkgew0KLSAgICAgICAgaWYgKCFJc1JlY3QoKSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwUmVjdCkgew0KLSAgICAgICAgICAgIHBSZWN0LT5sZWZ0ID0gbV9wUG9pbnRzWzBdLm1fUG9pbnRYOw0KLSAgICAgICAgICAgIHBSZWN0LT5yaWdodCA9IG1fcFBvaW50c1syXS5tX1BvaW50WDsNCi0gICAgICAgICAgICBwUmVjdC0+Ym90dG9tID0gbV9wUG9pbnRzWzBdLm1fUG9pbnRZOw0KLSAgICAgICAgICAgIHBSZWN0LT50b3AgPSBtX3BQb2ludHNbMl0ubV9Qb2ludFk7DQotICAgICAgICAgICAgcFJlY3QtPk5vcm1hbGl6ZSgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgaWYgKG1fUG9pbnRDb3VudCAhPSA1ICYmIG1fUG9pbnRDb3VudCAhPSA0KSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKChtX1BvaW50Q291bnQgPT0gNSAmJiAobV9wUG9pbnRzWzBdLm1fUG9pbnRYICE9IG1fcFBvaW50c1s0XS5tX1BvaW50WCB8fCBtX3BQb2ludHNbMF0ubV9Qb2ludFkgIT0gbV9wUG9pbnRzWzRdLm1fUG9pbnRZKSkgfHwNCi0gICAgICAgICAgICAobV9wUG9pbnRzWzFdLm1fUG9pbnRYID09IG1fcFBvaW50c1szXS5tX1BvaW50WCAmJiBtX3BQb2ludHNbMV0ubV9Qb2ludFkgPT0gbV9wUG9pbnRzWzNdLm1fUG9pbnRZKSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChtX1BvaW50Q291bnQgPT0gNCAmJiBtX3BQb2ludHNbMF0ubV9Qb2ludFggIT0gbV9wUG9pbnRzWzNdLm1fUG9pbnRYICYmIG1fcFBvaW50c1swXS5tX1BvaW50WSAhPSBtX3BQb2ludHNbM10ubV9Qb2ludFkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWF9GTE9BVCB4WzVdLCB5WzVdOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fUG9pbnRDb3VudDsgaSArKykgew0KLSAgICAgICAgcE1hdHJpeC0+VHJhbnNmb3JtKG1fcFBvaW50c1tpXS5tX1BvaW50WCwgbV9wUG9pbnRzW2ldLm1fUG9pbnRZLCB4W2ldLCB5W2ldKTsNCi0gICAgICAgIGlmIChpKSB7DQotICAgICAgICAgICAgaWYgKChtX3BQb2ludHNbaV0ubV9GbGFnICYgRlhQVF9UWVBFKSAhPSBGWFBUX0xJTkVUTykgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmICh4W2ldICE9IHhbaSAtIDFdICYmIHlbaV0gIT0geVtpIC0gMV0pIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAocFJlY3QpIHsNCi0gICAgICAgIHBSZWN0LT5sZWZ0ID0geFswXTsNCi0gICAgICAgIHBSZWN0LT5yaWdodCA9IHhbMl07DQotICAgICAgICBwUmVjdC0+Ym90dG9tID0geVswXTsNCi0gICAgICAgIHBSZWN0LT50b3AgPSB5WzJdOw0KLSAgICAgICAgcFJlY3QtPk5vcm1hbGl6ZSgpOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENGWF9QYXRoRGF0YTo6Q29weShjb25zdCBDRlhfUGF0aERhdGEgJnNyYykNCi17DQotICAgIGlmICghU2V0UG9pbnRDb3VudChzcmMubV9Qb2ludENvdW50KSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYU1lTX21lbWNweTMyKG1fcFBvaW50cywgc3JjLm1fcFBvaW50cywgc2l6ZW9mKEZYX1BBVEhQT0lOVCkgKiBtX1BvaW50Q291bnQpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotQ0ZYX0dyYXBoU3RhdGVEYXRhOjpDRlhfR3JhcGhTdGF0ZURhdGEoKQ0KLXsNCi0gICAgbV9MaW5lQ2FwID0gTGluZUNhcEJ1dHQ7DQotICAgIG1fRGFzaENvdW50ID0gMDsNCi0gICAgbV9EYXNoQXJyYXkgPSBOVUxMOw0KLSAgICBtX0Rhc2hQaGFzZSA9IDA7DQotICAgIG1fTGluZUpvaW4gPSBMaW5lSm9pbk1pdGVyOw0KLSAgICBtX01pdGVyTGltaXQgPSAxMCAqIDEuMGY7DQotICAgIG1fTGluZVdpZHRoID0gMS4wZjsNCi19DQotQ0ZYX0dyYXBoU3RhdGVEYXRhOjpDRlhfR3JhcGhTdGF0ZURhdGEoY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhJiBzcmMpDQotew0KLSAgICBtX0Rhc2hBcnJheSA9IE5VTEw7DQotICAgIENvcHkoc3JjKTsNCi19DQotdm9pZCBDRlhfR3JhcGhTdGF0ZURhdGE6OkNvcHkoY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhJiBzcmMpDQotew0KLSAgICBtX0xpbmVDYXAgPSBzcmMubV9MaW5lQ2FwOw0KLSAgICBtX0Rhc2hDb3VudCA9IHNyYy5tX0Rhc2hDb3VudDsNCi0gICAgaWYgKG1fRGFzaEFycmF5KSB7DQotICAgICAgICBGWF9GcmVlKG1fRGFzaEFycmF5KTsNCi0gICAgfQ0KLSAgICBtX0Rhc2hBcnJheSA9IE5VTEw7DQotICAgIG1fRGFzaFBoYXNlID0gc3JjLm1fRGFzaFBoYXNlOw0KLSAgICBtX0xpbmVKb2luID0gc3JjLm1fTGluZUpvaW47DQotICAgIG1fTWl0ZXJMaW1pdCA9IHNyYy5tX01pdGVyTGltaXQ7DQotICAgIG1fTGluZVdpZHRoID0gc3JjLm1fTGluZVdpZHRoOw0KLSAgICBpZiAobV9EYXNoQ291bnQpIHsNCi0gICAgICAgIG1fRGFzaEFycmF5ID0gRlhfQWxsb2MoRlhfRkxPQVQsIG1fRGFzaENvdW50KTsNCi0gICAgICAgIGlmICghbV9EYXNoQXJyYXkpIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBGWFNZU19tZW1jcHkzMihtX0Rhc2hBcnJheSwgc3JjLm1fRGFzaEFycmF5LCBtX0Rhc2hDb3VudCAqIHNpemVvZihGWF9GTE9BVCkpOw0KLSAgICB9DQotfQ0KLUNGWF9HcmFwaFN0YXRlRGF0YTo6fkNGWF9HcmFwaFN0YXRlRGF0YSgpDQotew0KLSAgICBpZiAobV9EYXNoQXJyYXkpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9EYXNoQXJyYXkpOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0ZYX0dyYXBoU3RhdGVEYXRhOjpTZXREYXNoQ291bnQoaW50IGNvdW50KQ0KLXsNCi0gICAgaWYgKG1fRGFzaEFycmF5KSB7DQotICAgICAgICBGWF9GcmVlKG1fRGFzaEFycmF5KTsNCi0gICAgfQ0KLSAgICBtX0Rhc2hBcnJheSA9IE5VTEw7DQotICAgIG1fRGFzaENvdW50ID0gY291bnQ7DQotICAgIGlmIChjb3VudCA9PSAwKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbV9EYXNoQXJyYXkgPSBGWF9BbGxvYyhGWF9GTE9BVCwgY291bnQpOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNydC9meF9iYXNpYy5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZS5oIgorQ0ZYX0NsaXBSZ246OkNGWF9DbGlwUmduKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBtX1R5cGUgPSBSZWN0STsKKyAgICBtX0JveC5sZWZ0ID0gbV9Cb3gudG9wID0gMDsKKyAgICBtX0JveC5yaWdodCA9IHdpZHRoOworICAgIG1fQm94LmJvdHRvbSA9IGhlaWdodDsKK30KK0NGWF9DbGlwUmduOjpDRlhfQ2xpcFJnbihjb25zdCBGWF9SRUNUJiByZWN0KQoreworICAgIG1fVHlwZSA9IFJlY3RJOworICAgIG1fQm94ID0gcmVjdDsKK30KK0NGWF9DbGlwUmduOjpDRlhfQ2xpcFJnbihjb25zdCBDRlhfQ2xpcFJnbiYgc3JjKQoreworICAgIG1fVHlwZSA9IHNyYy5tX1R5cGU7CisgICAgbV9Cb3ggPSBzcmMubV9Cb3g7CisgICAgbV9NYXNrID0gc3JjLm1fTWFzazsKK30KK0NGWF9DbGlwUmduOjp+Q0ZYX0NsaXBSZ24oKQoreworfQordm9pZCBDRlhfQ2xpcFJnbjo6UmVzZXQoY29uc3QgRlhfUkVDVCYgcmVjdCkKK3sKKyAgICBtX1R5cGUgPSBSZWN0STsKKyAgICBtX0JveCA9IHJlY3Q7CisgICAgbV9NYXNrLlNldE51bGwoKTsKK30KK3ZvaWQgQ0ZYX0NsaXBSZ246OkludGVyc2VjdFJlY3QoY29uc3QgRlhfUkVDVCYgcmVjdCkKK3sKKyAgICBpZiAobV9UeXBlID09IFJlY3RJKSB7CisgICAgICAgIG1fQm94LkludGVyc2VjdChyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9UeXBlID09IE1hc2tGKSB7CisgICAgICAgIEludGVyc2VjdE1hc2tSZWN0KHJlY3QsIG1fQm94LCBtX01hc2spOworICAgICAgICByZXR1cm47CisgICAgfQorfQordm9pZCBDRlhfQ2xpcFJnbjo6SW50ZXJzZWN0TWFza1JlY3QoRlhfUkVDVCByZWN0LCBGWF9SRUNUIG1hc2tfcmVjdCwgQ0ZYX0RJQml0bWFwUmVmIE1hc2spCit7CisgICAgY29uc3QgQ0ZYX0RJQml0bWFwKiBtYXNrX2RpYiA9IE1hc2s7CisgICAgbV9UeXBlID0gTWFza0Y7CisgICAgbV9Cb3ggPSByZWN0OworICAgIG1fQm94LkludGVyc2VjdChtYXNrX3JlY3QpOworICAgIGlmIChtX0JveC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgbV9UeXBlID0gUmVjdEk7CisgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYgKG1fQm94ID09IG1hc2tfcmVjdCkgeworICAgICAgICBtX01hc2sgPSBNYXNrOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENGWF9ESUJpdG1hcCogbmV3X2RpYiA9IG1fTWFzay5OZXcoKTsKKyAgICBpZiAoIW5ld19kaWIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBuZXdfZGliLT5DcmVhdGUobV9Cb3guV2lkdGgoKSwgbV9Cb3guSGVpZ2h0KCksIEZYRElCXzhicHBNYXNrKTsKKyAgICBmb3IgKGludCByb3cgPSBtX0JveC50b3A7IHJvdyA8IG1fQm94LmJvdHRvbTsgcm93ICsrKSB7CisgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBuZXdfZGliLT5HZXRCdWZmZXIoKSArIG5ld19kaWItPkdldFBpdGNoKCkgKiAocm93IC0gbV9Cb3gudG9wKTsKKyAgICAgICAgRlhfTFBCWVRFIHNyY19zY2FuID0gbWFza19kaWItPkdldEJ1ZmZlcigpICsgbWFza19kaWItPkdldFBpdGNoKCkgKiAocm93IC0gbWFza19yZWN0LnRvcCk7CisgICAgICAgIGZvciAoaW50IGNvbCA9IG1fQm94LmxlZnQ7IGNvbCA8IG1fQm94LnJpZ2h0OyBjb2wgKyspIHsKKyAgICAgICAgICAgIGRlc3Rfc2Nhbltjb2wgLSBtX0JveC5sZWZ0XSA9IHNyY19zY2FuW2NvbCAtIG1hc2tfcmVjdC5sZWZ0XTsKKyAgICAgICAgfQorICAgIH0KK30KK3ZvaWQgQ0ZYX0NsaXBSZ246OkludGVyc2VjdE1hc2tGKGludCBsZWZ0LCBpbnQgdG9wLCBDRlhfRElCaXRtYXBSZWYgTWFzaykKK3sKKyAgICBjb25zdCBDRlhfRElCaXRtYXAqIG1hc2tfZGliID0gTWFzazsKKyAgICBBU1NFUlQobWFza19kaWItPkdldEZvcm1hdCgpID09IEZYRElCXzhicHBNYXNrKTsKKyAgICBGWF9SRUNUIG1hc2tfYm94KGxlZnQsIHRvcCwgbGVmdCArIG1hc2tfZGliLT5HZXRXaWR0aCgpLCB0b3AgKyBtYXNrX2RpYi0+R2V0SGVpZ2h0KCkpOworICAgIGlmIChtX1R5cGUgPT0gUmVjdEkpIHsKKyAgICAgICAgSW50ZXJzZWN0TWFza1JlY3QobV9Cb3gsIG1hc2tfYm94LCBNYXNrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobV9UeXBlID09IE1hc2tGKSB7CisgICAgICAgIEZYX1JFQ1QgbmV3X2JveCA9IG1fQm94OworICAgICAgICBuZXdfYm94LkludGVyc2VjdChtYXNrX2JveCk7CisgICAgICAgIGlmIChuZXdfYm94LklzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9UeXBlID0gUmVjdEk7CisgICAgICAgICAgICBtX01hc2suU2V0TnVsbCgpOworICAgICAgICAgICAgbV9Cb3ggPSBuZXdfYm94OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIENGWF9ESUJpdG1hcFJlZiBuZXdfbWFzazsKKyAgICAgICAgQ0ZYX0RJQml0bWFwKiBuZXdfZGliID0gbmV3X21hc2suTmV3KCk7CisgICAgICAgIGlmICghbmV3X2RpYikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG5ld19kaWItPkNyZWF0ZShuZXdfYm94LldpZHRoKCksIG5ld19ib3guSGVpZ2h0KCksIEZYRElCXzhicHBNYXNrKTsKKyAgICAgICAgY29uc3QgQ0ZYX0RJQml0bWFwKiBvbGRfZGliID0gbV9NYXNrOworICAgICAgICBmb3IgKGludCByb3cgPSBuZXdfYm94LnRvcDsgcm93IDwgbmV3X2JveC5ib3R0b207IHJvdyArKykgeworICAgICAgICAgICAgRlhfTFBCWVRFIG9sZF9zY2FuID0gb2xkX2RpYi0+R2V0QnVmZmVyKCkgKyAocm93IC0gbV9Cb3gudG9wKSAqIG9sZF9kaWItPkdldFBpdGNoKCk7CisgICAgICAgICAgICBGWF9MUEJZVEUgbWFza19zY2FuID0gbWFza19kaWItPkdldEJ1ZmZlcigpICsgKHJvdyAtIHRvcCkgKiBtYXNrX2RpYi0+R2V0UGl0Y2goKTsKKyAgICAgICAgICAgIEZYX0xQQllURSBuZXdfc2NhbiA9IG5ld19kaWItPkdldEJ1ZmZlcigpICsgKHJvdyAtIG5ld19ib3gudG9wKSAqIG5ld19kaWItPkdldFBpdGNoKCk7CisgICAgICAgICAgICBmb3IgKGludCBjb2wgPSBuZXdfYm94LmxlZnQ7IGNvbCA8IG5ld19ib3gucmlnaHQ7IGNvbCArKykgeworICAgICAgICAgICAgICAgIG5ld19zY2FuW2NvbCAtIG5ld19ib3gubGVmdF0gPSBvbGRfc2Nhbltjb2wgLSBtX0JveC5sZWZ0XSAqIG1hc2tfc2Nhbltjb2wgLSBsZWZ0XSAvIDI1NTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX0JveCA9IG5ld19ib3g7CisgICAgICAgIG1fTWFzayA9IG5ld19tYXNrOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChGQUxTRSk7Cit9CitDRlhfUGF0aERhdGE6OkNGWF9QYXRoRGF0YSgpCit7CisgICAgbV9Qb2ludENvdW50ID0gbV9BbGxvY0NvdW50ID0gMDsKKyAgICBtX3BQb2ludHMgPSBOVUxMOworfQorQ0ZYX1BhdGhEYXRhOjp+Q0ZYX1BhdGhEYXRhKCkKK3sKKyAgICBpZiAobV9wUG9pbnRzKSB7CisgICAgICAgIEZYX0ZyZWUobV9wUG9pbnRzKTsKKyAgICB9Cit9CitGWF9CT09MIENGWF9QYXRoRGF0YTo6U2V0UG9pbnRDb3VudChpbnQgblBvaW50cykKK3sKKyAgICBtX1BvaW50Q291bnQgPSBuUG9pbnRzOworICAgIGlmIChtX0FsbG9jQ291bnQgPCBuUG9pbnRzKSB7CisgICAgICAgIGlmIChtX3BQb2ludHMpIHsKKyAgICAgICAgICAgIEZYX0ZyZWUobV9wUG9pbnRzKTsKKyAgICAgICAgICAgIG1fcFBvaW50cyA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbV9wUG9pbnRzID0gRlhfQWxsb2MoRlhfUEFUSFBPSU5ULCBuUG9pbnRzKTsKKyAgICAgICAgaWYgKCFtX3BQb2ludHMpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBtX0FsbG9jQ291bnQgPSBuUG9pbnRzOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0ZYX1BhdGhEYXRhOjpBbGxvY1BvaW50Q291bnQoaW50IG5Qb2ludHMpCit7CisgICAgaWYgKG1fQWxsb2NDb3VudCA8IG5Qb2ludHMpIHsKKyAgICAgICAgRlhfUEFUSFBPSU5UKiBwTmV3QnVmID0gRlhfQWxsb2MoRlhfUEFUSFBPSU5ULCBuUG9pbnRzKTsKKyAgICAgICAgaWYgKCFwTmV3QnVmKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fUG9pbnRDb3VudCkgeworICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIocE5ld0J1ZiwgbV9wUG9pbnRzLCBtX1BvaW50Q291bnQgKiBzaXplb2YoRlhfUEFUSFBPSU5UKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fcFBvaW50cykgeworICAgICAgICAgICAgRlhfRnJlZShtX3BQb2ludHMpOworICAgICAgICB9CisgICAgICAgIG1fcFBvaW50cyA9IHBOZXdCdWY7CisgICAgICAgIG1fQWxsb2NDb3VudCA9IG5Qb2ludHM7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorQ0ZYX1BhdGhEYXRhOjpDRlhfUGF0aERhdGEoY29uc3QgQ0ZYX1BhdGhEYXRhJiBzcmMpCit7CisgICAgbV9wUG9pbnRzID0gTlVMTDsKKyAgICBtX1BvaW50Q291bnQgPSBtX0FsbG9jQ291bnQgPSBzcmMubV9Qb2ludENvdW50OworICAgIG1fcFBvaW50cyA9IEZYX0FsbG9jKEZYX1BBVEhQT0lOVCwgc3JjLm1fUG9pbnRDb3VudCk7CisgICAgaWYgKCFtX3BQb2ludHMpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGWFNZU19tZW1jcHkzMihtX3BQb2ludHMsIHNyYy5tX3BQb2ludHMsIHNpemVvZihGWF9QQVRIUE9JTlQpICogbV9Qb2ludENvdW50KTsKK30KK3ZvaWQgQ0ZYX1BhdGhEYXRhOjpUcmltUG9pbnRzKGludCBuUG9pbnRzKQoreworICAgIGlmIChtX1BvaW50Q291bnQgPD0gblBvaW50cykgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFNldFBvaW50Q291bnQoblBvaW50cyk7Cit9CitGWF9CT09MIENGWF9QYXRoRGF0YTo6QWRkUG9pbnRDb3VudChpbnQgYWRkUG9pbnRzKQoreworICAgIGludCBuZXdfY291bnQgPSBtX1BvaW50Q291bnQgKyBhZGRQb2ludHM7CisgICAgaWYgKCFBbGxvY1BvaW50Q291bnQobmV3X2NvdW50KSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG1fUG9pbnRDb3VudCA9IG5ld19jb3VudDsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0ZYX1BhdGhEYXRhOjpBcHBlbmQoY29uc3QgQ0ZYX1BhdGhEYXRhKiBwU3JjLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4KQoreworICAgIGludCBvbGRfY291bnQgPSBtX1BvaW50Q291bnQ7CisgICAgaWYgKCFBZGRQb2ludENvdW50KHBTcmMtPm1fUG9pbnRDb3VudCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWFNZU19tZW1jcHkzMihtX3BQb2ludHMgKyBvbGRfY291bnQsIHBTcmMtPm1fcFBvaW50cywgcFNyYy0+bV9Qb2ludENvdW50ICogc2l6ZW9mKEZYX1BBVEhQT0lOVCkpOworICAgIGlmIChwTWF0cml4ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcFNyYy0+bV9Qb2ludENvdW50OyBpICsrKSB7CisgICAgICAgIHBNYXRyaXgtPlRyYW5zZm9ybShtX3BQb2ludHNbb2xkX2NvdW50ICsgaV0ubV9Qb2ludFgsIG1fcFBvaW50c1tvbGRfY291bnQgKyBpXS5tX1BvaW50WSk7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQordm9pZCBDRlhfUGF0aERhdGE6OlNldFBvaW50KGludCBpbmRleCwgRlhfRkxPQVQgeCwgRlhfRkxPQVQgeSwgaW50IGZsYWcpCit7CisgICAgQVNTRVJUKGluZGV4IDwgbV9Qb2ludENvdW50KTsKKyAgICBtX3BQb2ludHNbaW5kZXhdLm1fUG9pbnRYID0geDsKKyAgICBtX3BQb2ludHNbaW5kZXhdLm1fUG9pbnRZID0geTsKKyAgICBtX3BQb2ludHNbaW5kZXhdLm1fRmxhZyA9IGZsYWc7Cit9CitGWF9CT09MIENGWF9QYXRoRGF0YTo6QXBwZW5kUmVjdChGWF9GTE9BVCBsZWZ0LCBGWF9GTE9BVCBib3R0b20sIEZYX0ZMT0FUIHJpZ2h0LCBGWF9GTE9BVCB0b3ApCit7CisgICAgaW50IG9sZF9jb3VudCA9IG1fUG9pbnRDb3VudDsKKyAgICBpZiAoIUFkZFBvaW50Q291bnQoNSkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWF9QQVRIUE9JTlQqIHBQb2ludHMgPSBtX3BQb2ludHMgKyBvbGRfY291bnQ7CisgICAgcFBvaW50c1swXS5tX1BvaW50WCA9IHBQb2ludHNbMV0ubV9Qb2ludFggPSBwUG9pbnRzWzRdLm1fUG9pbnRYID0gbGVmdDsKKyAgICBwUG9pbnRzWzJdLm1fUG9pbnRYID0gcFBvaW50c1szXS5tX1BvaW50WCA9IHJpZ2h0OworICAgIHBQb2ludHNbMF0ubV9Qb2ludFkgPSBwUG9pbnRzWzNdLm1fUG9pbnRZID0gcFBvaW50c1s0XS5tX1BvaW50WSA9IGJvdHRvbTsKKyAgICBwUG9pbnRzWzFdLm1fUG9pbnRZID0gcFBvaW50c1syXS5tX1BvaW50WSA9IHRvcDsKKyAgICBwUG9pbnRzWzBdLm1fRmxhZyA9IEZYUFRfTU9WRVRPOworICAgIHBQb2ludHNbMV0ubV9GbGFnID0gcFBvaW50c1syXS5tX0ZsYWcgPSBwUG9pbnRzWzNdLm1fRmxhZyA9IEZYUFRfTElORVRPOworICAgIHBQb2ludHNbNF0ubV9GbGFnID0gRlhQVF9MSU5FVE8gfCBGWFBUX0NMT1NFRklHVVJFOworICAgIHJldHVybiBUUlVFOworfQorQ0ZYX0Zsb2F0UmVjdCBDRlhfUGF0aERhdGE6OkdldEJvdW5kaW5nQm94KCkgY29uc3QKK3sKKyAgICBDRlhfRmxvYXRSZWN0IHJlY3Q7CisgICAgaWYgKG1fUG9pbnRDb3VudCkgeworICAgICAgICByZWN0LkluaXRSZWN0KG1fcFBvaW50c1swXS5tX1BvaW50WCwgbV9wUG9pbnRzWzBdLm1fUG9pbnRZKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBtX1BvaW50Q291bnQ7IGkgKyspIHsKKyAgICAgICAgICAgIHJlY3QuVXBkYXRlUmVjdChtX3BQb2ludHNbaV0ubV9Qb2ludFgsIG1fcFBvaW50c1tpXS5tX1BvaW50WSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlY3Q7Cit9CitzdGF0aWMgdm9pZCBfVXBkYXRlTGluZUVuZFBvaW50cyhDRlhfRmxvYXRSZWN0JiByZWN0LCBGWF9GTE9BVCBzdGFydF94LCBGWF9GTE9BVCBzdGFydF95LCBGWF9GTE9BVCBlbmRfeCwgRlhfRkxPQVQgZW5kX3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCBodykKK3sKKyAgICBpZiAoc3RhcnRfeCA9PSBlbmRfeCkgeworICAgICAgICBpZiAoc3RhcnRfeSA9PSBlbmRfeSkgeworICAgICAgICAgICAgcmVjdC5VcGRhdGVSZWN0KGVuZF94ICsgaHcsIGVuZF95ICsgaHcpOworICAgICAgICAgICAgcmVjdC5VcGRhdGVSZWN0KGVuZF94IC0gaHcsIGVuZF95IC0gaHcpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEZYX0ZMT0FUIHBvaW50X3k7CisgICAgICAgIGlmIChlbmRfeSA8IHN0YXJ0X3kpIHsKKyAgICAgICAgICAgIHBvaW50X3kgPSBlbmRfeSAtIGh3OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcG9pbnRfeSA9IGVuZF95ICsgaHc7CisgICAgICAgIH0KKyAgICAgICAgcmVjdC5VcGRhdGVSZWN0KGVuZF94ICsgaHcsIHBvaW50X3kpOworICAgICAgICByZWN0LlVwZGF0ZVJlY3QoZW5kX3ggLSBodywgcG9pbnRfeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYgKHN0YXJ0X3kgPT0gZW5kX3kpIHsKKyAgICAgICAgRlhfRkxPQVQgcG9pbnRfeDsKKyAgICAgICAgaWYgKGVuZF94IDwgc3RhcnRfeCkgeworICAgICAgICAgICAgcG9pbnRfeCA9IGVuZF94IC0gaHc7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwb2ludF94ID0gZW5kX3ggKyBodzsKKyAgICAgICAgfQorICAgICAgICByZWN0LlVwZGF0ZVJlY3QocG9pbnRfeCwgZW5kX3kgKyBodyk7CisgICAgICAgIHJlY3QuVXBkYXRlUmVjdChwb2ludF94LCBlbmRfeSAtIGh3KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGWF9GTE9BVCBkeCA9IGVuZF94IC0gc3RhcnRfeDsKKyAgICBGWF9GTE9BVCBkeSA9IGVuZF95IC0gc3RhcnRfeTsKKyAgICBGWF9GTE9BVCBsbCA9IEZYU1lTX3NxcnQyKGR4LCBkeSk7CisgICAgRlhfRkxPQVQgbXggPSBlbmRfeCArIGh3ICogZHggLyBsbDsKKyAgICBGWF9GTE9BVCBteSA9IGVuZF95ICsgaHcgKiBkeSAvIGxsOworICAgIEZYX0ZMT0FUIGR4MSA9IGh3ICogZHkgLyBsbDsKKyAgICBGWF9GTE9BVCBkeTEgPSBodyAqIGR4IC8gbGw7CisgICAgcmVjdC5VcGRhdGVSZWN0KG14IC0gZHgxLCBteSArIGR5MSk7CisgICAgcmVjdC5VcGRhdGVSZWN0KG14ICsgZHgxLCBteSAtIGR5MSk7Cit9CitzdGF0aWMgdm9pZCBfVXBkYXRlTGluZUpvaW5Qb2ludHMoQ0ZYX0Zsb2F0UmVjdCYgcmVjdCwgRlhfRkxPQVQgc3RhcnRfeCwgRlhfRkxPQVQgc3RhcnRfeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCBtaWRkbGVfeCwgRlhfRkxPQVQgbWlkZGxlX3ksIEZYX0ZMT0FUIGVuZF94LCBGWF9GTE9BVCBlbmRfeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCBoYWxmX3dpZHRoLCBGWF9GTE9BVCBtaXRlcl9saW1pdCkKK3sKKyAgICBGWF9GTE9BVCBzdGFydF9rID0gMCwgc3RhcnRfYyA9IDAsIGVuZF9rID0gMCwgZW5kX2MgPSAwLCBzdGFydF9sZW4gPSAwLCBzdGFydF9kYyA9IDAsIGVuZF9sZW4gPSAwLCBlbmRfZGMgPSAwOworICAgIEZYX0JPT0wgYlN0YXJ0VmVydCA9IEZYU1lTX2ZhYnMoc3RhcnRfeCAtIG1pZGRsZV94KSA8IDEuMGYgLyAyMDsKKyAgICBGWF9CT09MIGJFbmRWZXJ0ID0gRlhTWVNfZmFicyhtaWRkbGVfeCAtIGVuZF94KSA8IDEuMGYgLyAyMDsKKyAgICBpZiAoYlN0YXJ0VmVydCAmJiBiRW5kVmVydCkgeworICAgICAgICBpbnQgc3RhcnRfZGlyID0gbWlkZGxlX3kgPiBzdGFydF95ID8gMSA6IC0xOworICAgICAgICBGWF9GTE9BVCBwb2ludF95ID0gbWlkZGxlX3kgKyBoYWxmX3dpZHRoICogc3RhcnRfZGlyOworICAgICAgICByZWN0LlVwZGF0ZVJlY3QobWlkZGxlX3ggKyBoYWxmX3dpZHRoLCBwb2ludF95KTsKKyAgICAgICAgcmVjdC5VcGRhdGVSZWN0KG1pZGRsZV94IC0gaGFsZl93aWR0aCwgcG9pbnRfeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFiU3RhcnRWZXJ0KSB7CisgICAgICAgIHN0YXJ0X2sgPSBGWFNZU19EaXYobWlkZGxlX3kgLSBzdGFydF95LCBtaWRkbGVfeCAtIHN0YXJ0X3gpOworICAgICAgICBzdGFydF9jID0gbWlkZGxlX3kgLSBGWFNZU19NdWwoc3RhcnRfaywgbWlkZGxlX3gpOworICAgICAgICBzdGFydF9sZW4gPSBGWFNZU19zcXJ0MihzdGFydF94IC0gbWlkZGxlX3gsIHN0YXJ0X3kgLSBtaWRkbGVfeSk7CisgICAgICAgIHN0YXJ0X2RjID0gKEZYX0ZMT0FUKUZYU1lTX2ZhYnMoRlhTWVNfTXVsRGl2KGhhbGZfd2lkdGgsIHN0YXJ0X2xlbiwgc3RhcnRfeCAtIG1pZGRsZV94KSk7CisgICAgfQorICAgIGlmICghYkVuZFZlcnQpIHsKKyAgICAgICAgZW5kX2sgPSBGWFNZU19EaXYoZW5kX3kgLSBtaWRkbGVfeSwgZW5kX3ggLSBtaWRkbGVfeCk7CisgICAgICAgIGVuZF9jID0gbWlkZGxlX3kgLSBGWFNZU19NdWwoZW5kX2ssIG1pZGRsZV94KTsKKyAgICAgICAgZW5kX2xlbiA9IEZYU1lTX3NxcnQyKGVuZF94IC0gbWlkZGxlX3gsIGVuZF95IC0gbWlkZGxlX3kpOworICAgICAgICBlbmRfZGMgPSAoRlhfRkxPQVQpRlhTWVNfZmFicyhGWFNZU19NdWxEaXYoaGFsZl93aWR0aCwgZW5kX2xlbiwgZW5kX3ggLSBtaWRkbGVfeCkpOworICAgIH0KKyAgICBpZiAoYlN0YXJ0VmVydCkgeworICAgICAgICBGWF9GTE9BVCBvdXRzaWRlX3ggPSBzdGFydF94OworICAgICAgICBpZiAoZW5kX3ggPCBzdGFydF94KSB7CisgICAgICAgICAgICBvdXRzaWRlX3ggKz0gaGFsZl93aWR0aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG91dHNpZGVfeCAtPSBoYWxmX3dpZHRoOworICAgICAgICB9CisgICAgICAgIEZYX0ZMT0FUIG91dHNpZGVfeTsKKyAgICAgICAgaWYgKHN0YXJ0X3kgPCBGWFNZU19NdWwoZW5kX2ssIHN0YXJ0X3gpICsgZW5kX2MpIHsKKyAgICAgICAgICAgIG91dHNpZGVfeSA9IEZYU1lTX011bChlbmRfaywgb3V0c2lkZV94KSArIGVuZF9jICsgZW5kX2RjOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgb3V0c2lkZV95ID0gRlhTWVNfTXVsKGVuZF9rLCBvdXRzaWRlX3gpICsgZW5kX2MgLSBlbmRfZGM7CisgICAgICAgIH0KKyAgICAgICAgcmVjdC5VcGRhdGVSZWN0KG91dHNpZGVfeCwgb3V0c2lkZV95KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYkVuZFZlcnQpIHsKKyAgICAgICAgRlhfRkxPQVQgb3V0c2lkZV94ID0gZW5kX3g7CisgICAgICAgIGlmIChzdGFydF94IDwgZW5kX3gpIHsKKyAgICAgICAgICAgIG91dHNpZGVfeCArPSBoYWxmX3dpZHRoOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgb3V0c2lkZV94IC09IGhhbGZfd2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgRlhfRkxPQVQgb3V0c2lkZV95OworICAgICAgICBpZiAoZW5kX3kgPCBGWFNZU19NdWwoc3RhcnRfaywgZW5kX3gpICsgc3RhcnRfYykgeworICAgICAgICAgICAgb3V0c2lkZV95ID0gRlhTWVNfTXVsKHN0YXJ0X2ssIG91dHNpZGVfeCkgKyBzdGFydF9jICsgc3RhcnRfZGM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvdXRzaWRlX3kgPSBGWFNZU19NdWwoc3RhcnRfaywgb3V0c2lkZV94KSArIHN0YXJ0X2MgLSBzdGFydF9kYzsKKyAgICAgICAgfQorICAgICAgICByZWN0LlVwZGF0ZVJlY3Qob3V0c2lkZV94LCBvdXRzaWRlX3kpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChGWFNZU19mYWJzKHN0YXJ0X2sgLSBlbmRfaykgPCAxLjBmIC8gMjApIHsKKyAgICAgICAgaW50IHN0YXJ0X2RpciA9IG1pZGRsZV94ID4gc3RhcnRfeCA/IDEgOiAtMTsKKyAgICAgICAgaW50IGVuZF9kaXIgPSBlbmRfeCA+IG1pZGRsZV94ID8gMSA6IC0xOworICAgICAgICBpZiAoc3RhcnRfZGlyID09IGVuZF9kaXIpIHsKKyAgICAgICAgICAgIF9VcGRhdGVMaW5lRW5kUG9pbnRzKHJlY3QsIG1pZGRsZV94LCBtaWRkbGVfeSwgZW5kX3gsIGVuZF95LCBoYWxmX3dpZHRoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIF9VcGRhdGVMaW5lRW5kUG9pbnRzKHJlY3QsIHN0YXJ0X3gsIHN0YXJ0X3ksIG1pZGRsZV94LCBtaWRkbGVfeSwgaGFsZl93aWR0aCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBGWF9GTE9BVCBzdGFydF9vdXRzaWRlX2MgPSBzdGFydF9jOworICAgIGlmIChlbmRfeSA8IEZYU1lTX011bChzdGFydF9rLCBlbmRfeCkgKyBzdGFydF9jKSB7CisgICAgICAgIHN0YXJ0X291dHNpZGVfYyArPSBzdGFydF9kYzsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGFydF9vdXRzaWRlX2MgLT0gc3RhcnRfZGM7CisgICAgfQorICAgIEZYX0ZMT0FUIGVuZF9vdXRzaWRlX2MgPSBlbmRfYzsKKyAgICBpZiAoc3RhcnRfeSA8IEZYU1lTX011bChlbmRfaywgc3RhcnRfeCkgKyBlbmRfYykgeworICAgICAgICBlbmRfb3V0c2lkZV9jICs9IGVuZF9kYzsKKyAgICB9IGVsc2UgeworICAgICAgICBlbmRfb3V0c2lkZV9jIC09IGVuZF9kYzsKKyAgICB9CisgICAgRlhfRkxPQVQgam9pbl94ID0gRlhTWVNfRGl2KGVuZF9vdXRzaWRlX2MgLSBzdGFydF9vdXRzaWRlX2MsIHN0YXJ0X2sgLSBlbmRfayk7CisgICAgRlhfRkxPQVQgam9pbl95ID0gRlhTWVNfTXVsKHN0YXJ0X2ssIGpvaW5feCkgKyBzdGFydF9vdXRzaWRlX2M7CisgICAgcmVjdC5VcGRhdGVSZWN0KGpvaW5feCwgam9pbl95KTsKK30KK0NGWF9GbG9hdFJlY3QgQ0ZYX1BhdGhEYXRhOjpHZXRCb3VuZGluZ0JveChGWF9GTE9BVCBsaW5lX3dpZHRoLCBGWF9GTE9BVCBtaXRlcl9saW1pdCkgY29uc3QKK3sKKyAgICBDRlhfRmxvYXRSZWN0IHJlY3QoMTAwMDAwICogMS4wZiwgMTAwMDAwICogMS4wZiwgLTEwMDAwMCAqIDEuMGYsIC0xMDAwMDAgKiAxLjBmKTsKKyAgICBpbnQgaVBvaW50ID0gMDsKKyAgICBGWF9GTE9BVCBoYWxmX3dpZHRoID0gbGluZV93aWR0aDsKKyAgICBpbnQgaVN0YXJ0UG9pbnQsIGlFbmRQb2ludCwgaU1pZGRsZVBvaW50OworICAgIEZYX0JPT0wgYkpvaW47CisgICAgd2hpbGUgKGlQb2ludCA8IG1fUG9pbnRDb3VudCkgeworICAgICAgICBpZiAobV9wUG9pbnRzW2lQb2ludF0ubV9GbGFnID09IEZYUFRfTU9WRVRPKSB7CisgICAgICAgICAgICBpU3RhcnRQb2ludCA9IGlQb2ludCArIDE7CisgICAgICAgICAgICBpRW5kUG9pbnQgPSBpUG9pbnQ7CisgICAgICAgICAgICBiSm9pbiA9IEZBTFNFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1fcFBvaW50c1tpUG9pbnRdLm1fRmxhZyA9PSBGWFBUX0JFWklFUlRPKSB7CisgICAgICAgICAgICAgICAgcmVjdC5VcGRhdGVSZWN0KG1fcFBvaW50c1tpUG9pbnRdLm1fUG9pbnRYLCBtX3BQb2ludHNbaVBvaW50XS5tX1BvaW50WSk7CisgICAgICAgICAgICAgICAgcmVjdC5VcGRhdGVSZWN0KG1fcFBvaW50c1tpUG9pbnQgKyAxXS5tX1BvaW50WCwgbV9wUG9pbnRzW2lQb2ludCArIDFdLm1fUG9pbnRZKTsKKyAgICAgICAgICAgICAgICBpUG9pbnQgKz0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpUG9pbnQgPT0gbV9Qb2ludENvdW50IC0gMSB8fCBtX3BQb2ludHNbaVBvaW50ICsgMV0ubV9GbGFnID09IEZYUFRfTU9WRVRPKSB7CisgICAgICAgICAgICAgICAgaVN0YXJ0UG9pbnQgPSBpUG9pbnQgLSAxOworICAgICAgICAgICAgICAgIGlFbmRQb2ludCA9IGlQb2ludDsKKyAgICAgICAgICAgICAgICBiSm9pbiA9IEZBTFNFOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpU3RhcnRQb2ludCA9IGlQb2ludCAtIDE7CisgICAgICAgICAgICAgICAgaU1pZGRsZVBvaW50ID0gaVBvaW50OworICAgICAgICAgICAgICAgIGlFbmRQb2ludCA9IGlQb2ludCArIDE7CisgICAgICAgICAgICAgICAgYkpvaW4gPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEZYX0ZMT0FUIHN0YXJ0X3ggPSBtX3BQb2ludHNbaVN0YXJ0UG9pbnRdLm1fUG9pbnRYOworICAgICAgICBGWF9GTE9BVCBzdGFydF95ID0gbV9wUG9pbnRzW2lTdGFydFBvaW50XS5tX1BvaW50WTsKKyAgICAgICAgRlhfRkxPQVQgZW5kX3ggPSBtX3BQb2ludHNbaUVuZFBvaW50XS5tX1BvaW50WDsKKyAgICAgICAgRlhfRkxPQVQgZW5kX3kgPSBtX3BQb2ludHNbaUVuZFBvaW50XS5tX1BvaW50WTsKKyAgICAgICAgaWYgKGJKb2luKSB7CisgICAgICAgICAgICBGWF9GTE9BVCBtaWRkbGVfeCA9IG1fcFBvaW50c1tpTWlkZGxlUG9pbnRdLm1fUG9pbnRYOworICAgICAgICAgICAgRlhfRkxPQVQgbWlkZGxlX3kgPSBtX3BQb2ludHNbaU1pZGRsZVBvaW50XS5tX1BvaW50WTsKKyAgICAgICAgICAgIF9VcGRhdGVMaW5lSm9pblBvaW50cyhyZWN0LCBzdGFydF94LCBzdGFydF95LCBtaWRkbGVfeCwgbWlkZGxlX3ksIGVuZF94LCBlbmRfeSwgaGFsZl93aWR0aCwgbWl0ZXJfbGltaXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgX1VwZGF0ZUxpbmVFbmRQb2ludHMocmVjdCwgc3RhcnRfeCwgc3RhcnRfeSwgZW5kX3gsIGVuZF95LCBoYWxmX3dpZHRoKTsKKyAgICAgICAgfQorICAgICAgICBpUG9pbnQgKys7CisgICAgfQorICAgIHJldHVybiByZWN0OworfQordm9pZCBDRlhfUGF0aERhdGE6OlRyYW5zZm9ybShjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4KQoreworICAgIGlmIChwTWF0cml4ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fUG9pbnRDb3VudDsgaSArKykgeworICAgICAgICBwTWF0cml4LT5UcmFuc2Zvcm0obV9wUG9pbnRzW2ldLm1fUG9pbnRYLCBtX3BQb2ludHNbaV0ubV9Qb2ludFkpOworICAgIH0KK30KK2NvbnN0IGludCBnX0Rpc3RhbnRbMTBdID0gezEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwfTsKK0ZYX0JPT0wgQ0ZYX1BhdGhEYXRhOjpHZXRaZXJvQXJlYVBhdGgoQ0ZYX1BhdGhEYXRhJiBOZXdQYXRoLCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LCBGWF9CT09MJmJUaGluLCBGWF9CT09MIGJBZGp1c3QpIGNvbnN0Cit7CisgICAgaWYgKG1fUG9pbnRDb3VudCA8IDMpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAobV9Qb2ludENvdW50ID09IDMgJiYgKG1fcFBvaW50c1swXS5tX0ZsYWcgJiBGWFBUX1RZUEUpID09IEZYUFRfTU9WRVRPICYmCisgICAgICAgICAgICAobV9wUG9pbnRzWzFdLm1fRmxhZyAmIEZYUFRfVFlQRSkgPT0gRlhQVF9MSU5FVE8gJiYgKG1fcFBvaW50c1syXS5tX0ZsYWcgJiBGWFBUX1RZUEUpID09IEZYUFRfTElORVRPCisgICAgICAgICAgICAmJiBtX3BQb2ludHNbMF0ubV9Qb2ludFggPT0gbV9wUG9pbnRzWzJdLm1fUG9pbnRYICYmIG1fcFBvaW50c1swXS5tX1BvaW50WSA9PSBtX3BQb2ludHNbMl0ubV9Qb2ludFkpIHsKKyAgICAgICAgTmV3UGF0aC5BZGRQb2ludENvdW50KDIpOworICAgICAgICBpZiAoYkFkanVzdCkgeworICAgICAgICAgICAgaWYgKHBNYXRyaXgpIHsKKyAgICAgICAgICAgICAgICBGWF9GTE9BVCB4ID0gbV9wUG9pbnRzWzBdLm1fUG9pbnRYLCB5ID0gbV9wUG9pbnRzWzBdLm1fUG9pbnRZOworICAgICAgICAgICAgICAgIHBNYXRyaXgtPlRyYW5zZm9ybVBvaW50KHgsIHkpOworICAgICAgICAgICAgICAgIHggPSAoaW50KXggKyAwLjVmOworICAgICAgICAgICAgICAgIHkgPSAoaW50KXkgKyAwLjVmOworICAgICAgICAgICAgICAgIE5ld1BhdGguU2V0UG9pbnQoMCwgeCwgeSwgRlhQVF9NT1ZFVE8pOworICAgICAgICAgICAgICAgIHggPSBtX3BQb2ludHNbMV0ubV9Qb2ludFgsIHkgPSBtX3BQb2ludHNbMV0ubV9Qb2ludFk7CisgICAgICAgICAgICAgICAgcE1hdHJpeC0+VHJhbnNmb3JtUG9pbnQoeCwgeSk7CisgICAgICAgICAgICAgICAgeCA9IChpbnQpeCArIDAuNWY7CisgICAgICAgICAgICAgICAgeSA9IChpbnQpeSArIDAuNWY7CisgICAgICAgICAgICAgICAgTmV3UGF0aC5TZXRQb2ludCgxLCB4LCB5LCBGWFBUX0xJTkVUTyk7CisgICAgICAgICAgICAgICAgcE1hdHJpeC0+U2V0SWRlbnRpdHkoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgRlhfRkxPQVQgeCA9IChpbnQpbV9wUG9pbnRzWzBdLm1fUG9pbnRYICsgMC41ZiwgeSA9IChpbnQpbV9wUG9pbnRzWzBdLm1fUG9pbnRZICsgMC41ZjsKKyAgICAgICAgICAgICAgICBOZXdQYXRoLlNldFBvaW50KDAsIHgsIHksIEZYUFRfTU9WRVRPKTsKKyAgICAgICAgICAgICAgICB4ID0gKGludCltX3BQb2ludHNbMV0ubV9Qb2ludFggKyAwLjVmLCB5ID0gKGludCltX3BQb2ludHNbMV0ubV9Qb2ludFkgKyAwLjVmOworICAgICAgICAgICAgICAgIE5ld1BhdGguU2V0UG9pbnQoMSwgeCwgeSwgRlhQVF9MSU5FVE8pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTmV3UGF0aC5TZXRQb2ludCgwLCBtX3BQb2ludHNbMF0ubV9Qb2ludFgsIG1fcFBvaW50c1swXS5tX1BvaW50WSwgRlhQVF9NT1ZFVE8pOworICAgICAgICAgICAgTmV3UGF0aC5TZXRQb2ludCgxLCBtX3BQb2ludHNbMV0ubV9Qb2ludFgsIG1fcFBvaW50c1sxXS5tX1BvaW50WSwgRlhQVF9MSU5FVE8pOworICAgICAgICB9CisgICAgICAgIGlmIChtX3BQb2ludHNbMF0ubV9Qb2ludFggIT0gbV9wUG9pbnRzWzFdLm1fUG9pbnRYICYmIG1fcFBvaW50c1swXS5tX1BvaW50WSAhPSBtX3BQb2ludHNbMV0ubV9Qb2ludFkpIHsKKyAgICAgICAgICAgIGJUaGluID0gVFJVRTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgaWYgKCgobV9Qb2ludENvdW50ID4gMykgJiYgKG1fUG9pbnRDb3VudCAlIDIpKSkgeworICAgICAgICBpbnQgbWlkID0gbV9Qb2ludENvdW50IC8gMjsKKyAgICAgICAgRlhfQk9PTCBiWmVyb0FyZWEgPSBGQUxTRTsKKyAgICAgICAgQ0ZYX1BhdGhEYXRhIHRfcGF0aDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaWQ7IGkrKykgeworICAgICAgICAgICAgaWYgKCEobV9wUG9pbnRzW21pZCAtIGkgLSAxXS5tX1BvaW50WCA9PSBtX3BQb2ludHNbbWlkICsgaSArIDFdLm1fUG9pbnRYCisgICAgICAgICAgICAgICAgICAgICYmIG1fcFBvaW50c1ttaWQgLSBpIC0gMV0ubV9Qb2ludFkgPT0gbV9wUG9pbnRzW21pZCArIGkgKyAxXS5tX1BvaW50WSAmJgorICAgICAgICAgICAgICAgICAgICAoKG1fcFBvaW50c1ttaWQgLSBpIC0gMV0ubV9GbGFnICYgRlhQVF9UWVBFKSAhPSBGWFBUX0JFWklFUlRPICYmIChtX3BQb2ludHNbbWlkICsgaSArIDFdLm1fRmxhZyAmIEZYUFRfVFlQRSkgIT0gRlhQVF9CRVpJRVJUTykpKSB7CisgICAgICAgICAgICAgICAgYlplcm9BcmVhID0gVFJVRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBuZXdfY291bnQgPSB0X3BhdGguR2V0UG9pbnRDb3VudCgpOworICAgICAgICAgICAgdF9wYXRoLkFkZFBvaW50Q291bnQoMik7CisgICAgICAgICAgICB0X3BhdGguU2V0UG9pbnQobmV3X2NvdW50LCBtX3BQb2ludHNbbWlkIC0gaV0ubV9Qb2ludFgsIG1fcFBvaW50c1ttaWQgLSBpXS5tX1BvaW50WSwgRlhQVF9NT1ZFVE8pOworICAgICAgICAgICAgdF9wYXRoLlNldFBvaW50KG5ld19jb3VudCArIDEsIG1fcFBvaW50c1ttaWQgLSBpIC0gMV0ubV9Qb2ludFgsIG1fcFBvaW50c1ttaWQgLSBpIC0gMV0ubV9Qb2ludFksIEZYUFRfTElORVRPKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWJaZXJvQXJlYSkgeworICAgICAgICAgICAgTmV3UGF0aC5BcHBlbmQoJnRfcGF0aCwgTlVMTCk7CisgICAgICAgICAgICBiVGhpbiA9IFRSVUU7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpbnQgc3RyYXRQb2ludCA9IDA7CisgICAgaW50IG5leHQgPSAwLCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBtX1BvaW50Q291bnQ7IGkrKykgeworICAgICAgICBpbnQgcG9pbnRfdHlwZSA9IG1fcFBvaW50c1tpXS5tX0ZsYWcgJiBGWFBUX1RZUEU7CisgICAgICAgIGlmIChwb2ludF90eXBlID09IEZYUFRfTU9WRVRPKSB7CisgICAgICAgICAgICBzdHJhdFBvaW50ID0gaTsKKyAgICAgICAgfSBlbHNlIGlmIChwb2ludF90eXBlID09IEZYUFRfTElORVRPKSB7CisgICAgICAgICAgICBuZXh0ID0gKGkgKyAxIC0gc3RyYXRQb2ludCkgJSAobV9Qb2ludENvdW50IC0gc3RyYXRQb2ludCkgKyBzdHJhdFBvaW50OworICAgICAgICAgICAgaWYgKChtX3BQb2ludHNbbmV4dF0ubV9GbGFnICYgRlhQVF9UWVBFKSAhPSBGWFBUX0JFWklFUlRPICYmIChtX3BQb2ludHNbbmV4dF0ubV9GbGFnICYgRlhQVF9UWVBFKSAhPSBGWFBUX01PVkVUTykgeworICAgICAgICAgICAgICAgIGlmKChtX3BQb2ludHNbaSAtIDFdLm1fUG9pbnRYID09IG1fcFBvaW50c1tpXS5tX1BvaW50WCAmJiBtX3BQb2ludHNbaV0ubV9Qb2ludFggPT0gbV9wUG9pbnRzW25leHRdLm1fUG9pbnRYKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChtX3BQb2ludHNbaV0ubV9Qb2ludFkgLSBtX3BQb2ludHNbaSAtIDFdLm1fUG9pbnRZKSAqIChtX3BQb2ludHNbaV0ubV9Qb2ludFkgLSBtX3BQb2ludHNbbmV4dF0ubV9Qb2ludFkpID4gMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHByZSA9IGk7CisgICAgICAgICAgICAgICAgICAgIGlmIChGWFNZU19mYWJzKG1fcFBvaW50c1tpXS5tX1BvaW50WSAtIG1fcFBvaW50c1tpIC0gMV0ubV9Qb2ludFkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCBGWFNZU19mYWJzKG1fcFBvaW50c1tpXS5tX1BvaW50WSAtIG1fcFBvaW50c1tuZXh0XS5tX1BvaW50WSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZSAtLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHQtLTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpbnQgbmV3X2NvdW50ID0gTmV3UGF0aC5HZXRQb2ludENvdW50KCk7CisgICAgICAgICAgICAgICAgICAgIE5ld1BhdGguQWRkUG9pbnRDb3VudCgyKTsKKyAgICAgICAgICAgICAgICAgICAgTmV3UGF0aC5TZXRQb2ludChuZXdfY291bnQsIG1fcFBvaW50c1twcmVdLm1fUG9pbnRYLCBtX3BQb2ludHNbcHJlXS5tX1BvaW50WSwgRlhQVF9NT1ZFVE8pOworICAgICAgICAgICAgICAgICAgICBOZXdQYXRoLlNldFBvaW50KG5ld19jb3VudCArIDEsIG1fcFBvaW50c1tuZXh0XS5tX1BvaW50WCwgbV9wUG9pbnRzW25leHRdLm1fUG9pbnRZLCBGWFBUX0xJTkVUTyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmKChtX3BQb2ludHNbaSAtIDFdLm1fUG9pbnRZID09IG1fcFBvaW50c1tpXS5tX1BvaW50WSAmJiBtX3BQb2ludHNbaV0ubV9Qb2ludFkgPT0gbV9wUG9pbnRzW25leHRdLm1fUG9pbnRZKQorICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKG1fcFBvaW50c1tpXS5tX1BvaW50WCAtIG1fcFBvaW50c1tpIC0gMV0ubV9Qb2ludFgpICogKG1fcFBvaW50c1tpXS5tX1BvaW50WCAtIG1fcFBvaW50c1tuZXh0XS5tX1BvaW50WCkgPiAwKSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgcHJlID0gaTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEZYU1lTX2ZhYnMobV9wUG9pbnRzW2ldLm1fUG9pbnRYIC0gbV9wUG9pbnRzW2kgLSAxXS5tX1BvaW50WCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IEZYU1lTX2ZhYnMobV9wUG9pbnRzW2ldLm1fUG9pbnRYIC0gbV9wUG9pbnRzW25leHRdLm1fUG9pbnRYKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJlIC0tOworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC0tOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGludCBuZXdfY291bnQgPSBOZXdQYXRoLkdldFBvaW50Q291bnQoKTsKKyAgICAgICAgICAgICAgICAgICAgTmV3UGF0aC5BZGRQb2ludENvdW50KDIpOworICAgICAgICAgICAgICAgICAgICBOZXdQYXRoLlNldFBvaW50KG5ld19jb3VudCwgbV9wUG9pbnRzW3ByZV0ubV9Qb2ludFgsIG1fcFBvaW50c1twcmVdLm1fUG9pbnRZLCBGWFBUX01PVkVUTyk7CisgICAgICAgICAgICAgICAgICAgIE5ld1BhdGguU2V0UG9pbnQobmV3X2NvdW50ICsgMSwgbV9wUG9pbnRzW25leHRdLm1fUG9pbnRYLCBtX3BQb2ludHNbbmV4dF0ubV9Qb2ludFksIEZYUFRfTElORVRPKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChtX3BQb2ludHNbaSAtIDFdLm1fRmxhZyAmIEZYUFRfVFlQRSkgPT0gRlhQVF9NT1ZFVE8gJiYgKG1fcFBvaW50c1tuZXh0XS5tX0ZsYWcgJiBGWFBUX1RZUEUpID09IEZYUFRfTElORVRPICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BQb2ludHNbaSAtIDFdLm1fUG9pbnRYID09IG1fcFBvaW50c1tuZXh0XS5tX1BvaW50WCAmJiBtX3BQb2ludHNbaSAtIDFdLm1fUG9pbnRZID09IG1fcFBvaW50c1tuZXh0XS5tX1BvaW50WQorICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV9wUG9pbnRzW25leHRdLm1fRmxhZyAmIEZYUFRfQ0xPU0VGSUdVUkUpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IG5ld19jb3VudCA9IE5ld1BhdGguR2V0UG9pbnRDb3VudCgpOworICAgICAgICAgICAgICAgICAgICBOZXdQYXRoLkFkZFBvaW50Q291bnQoMik7CisgICAgICAgICAgICAgICAgICAgIE5ld1BhdGguU2V0UG9pbnQobmV3X2NvdW50LCBtX3BQb2ludHNbaSAtIDFdLm1fUG9pbnRYLCBtX3BQb2ludHNbaSAtIDFdLm1fUG9pbnRZLCBGWFBUX01PVkVUTyk7CisgICAgICAgICAgICAgICAgICAgIE5ld1BhdGguU2V0UG9pbnQobmV3X2NvdW50ICsgMSwgbV9wUG9pbnRzW2ldLm1fUG9pbnRYLCBtX3BQb2ludHNbaV0ubV9Qb2ludFksIEZYUFRfTElORVRPKTsKKyAgICAgICAgICAgICAgICAgICAgYlRoaW4gPSBUUlVFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChwb2ludF90eXBlID09IEZYUFRfQkVaSUVSVE8pIHsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgfQorICAgIGlmIChtX1BvaW50Q291bnQgPiAzICYmIE5ld1BhdGguR2V0UG9pbnRDb3VudCgpKSB7CisgICAgICAgIGJUaGluID0gVFJVRTsKKyAgICB9CisgICAgaWYgKE5ld1BhdGguR2V0UG9pbnRDb3VudCgpID09IDApIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0ZYX1BhdGhEYXRhOjpJc1JlY3QoKSBjb25zdAoreworICAgIGlmIChtX1BvaW50Q291bnQgIT0gNSAmJiBtX1BvaW50Q291bnQgIT0gNCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmICgobV9Qb2ludENvdW50ID09IDUgJiYgKG1fcFBvaW50c1swXS5tX1BvaW50WCAhPSBtX3BQb2ludHNbNF0ubV9Qb2ludFggfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3BQb2ludHNbMF0ubV9Qb2ludFkgIT0gbV9wUG9pbnRzWzRdLm1fUG9pbnRZKSkgfHwKKyAgICAgICAgICAgIChtX3BQb2ludHNbMF0ubV9Qb2ludFggPT0gbV9wUG9pbnRzWzJdLm1fUG9pbnRYICYmIG1fcFBvaW50c1swXS5tX1BvaW50WSA9PSBtX3BQb2ludHNbMl0ubV9Qb2ludFkpIHx8CisgICAgICAgICAgICAobV9wUG9pbnRzWzFdLm1fUG9pbnRYID09IG1fcFBvaW50c1szXS5tX1BvaW50WCAmJiBtX3BQb2ludHNbMV0ubV9Qb2ludFkgPT0gbV9wUG9pbnRzWzNdLm1fUG9pbnRZKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChtX3BQb2ludHNbMF0ubV9Qb2ludFggIT0gbV9wUG9pbnRzWzNdLm1fUG9pbnRYICYmIG1fcFBvaW50c1swXS5tX1BvaW50WSAhPSBtX3BQb2ludHNbM10ubV9Qb2ludFkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBmb3IgKGludCBpID0gMTsgaSA8IDQ7IGkgKyspIHsKKyAgICAgICAgaWYgKChtX3BQb2ludHNbaV0ubV9GbGFnICYgRlhQVF9UWVBFKSAhPSBGWFBUX0xJTkVUTykgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmIChtX3BQb2ludHNbaV0ubV9Qb2ludFggIT0gbV9wUG9pbnRzW2kgLSAxXS5tX1BvaW50WCAmJiBtX3BQb2ludHNbaV0ubV9Qb2ludFkgIT0gbV9wUG9pbnRzW2kgLSAxXS5tX1BvaW50WSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtX1BvaW50Q291bnQgPT0gNSB8fCAobV9wUG9pbnRzWzNdLm1fRmxhZyAmIEZYUFRfQ0xPU0VGSUdVUkUpOworfQorRlhfQk9PTCBDRlhfUGF0aERhdGE6OklzUmVjdChjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LCBDRlhfRmxvYXRSZWN0KiBwUmVjdCkgY29uc3QKK3sKKyAgICBpZiAocE1hdHJpeCA9PSBOVUxMKSB7CisgICAgICAgIGlmICghSXNSZWN0KCkpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBpZiAocFJlY3QpIHsKKyAgICAgICAgICAgIHBSZWN0LT5sZWZ0ID0gbV9wUG9pbnRzWzBdLm1fUG9pbnRYOworICAgICAgICAgICAgcFJlY3QtPnJpZ2h0ID0gbV9wUG9pbnRzWzJdLm1fUG9pbnRYOworICAgICAgICAgICAgcFJlY3QtPmJvdHRvbSA9IG1fcFBvaW50c1swXS5tX1BvaW50WTsKKyAgICAgICAgICAgIHBSZWN0LT50b3AgPSBtX3BQb2ludHNbMl0ubV9Qb2ludFk7CisgICAgICAgICAgICBwUmVjdC0+Tm9ybWFsaXplKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGlmIChtX1BvaW50Q291bnQgIT0gNSAmJiBtX1BvaW50Q291bnQgIT0gNCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmICgobV9Qb2ludENvdW50ID09IDUgJiYgKG1fcFBvaW50c1swXS5tX1BvaW50WCAhPSBtX3BQb2ludHNbNF0ubV9Qb2ludFggfHwgbV9wUG9pbnRzWzBdLm1fUG9pbnRZICE9IG1fcFBvaW50c1s0XS5tX1BvaW50WSkpIHx8CisgICAgICAgICAgICAobV9wUG9pbnRzWzFdLm1fUG9pbnRYID09IG1fcFBvaW50c1szXS5tX1BvaW50WCAmJiBtX3BQb2ludHNbMV0ubV9Qb2ludFkgPT0gbV9wUG9pbnRzWzNdLm1fUG9pbnRZKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChtX1BvaW50Q291bnQgPT0gNCAmJiBtX3BQb2ludHNbMF0ubV9Qb2ludFggIT0gbV9wUG9pbnRzWzNdLm1fUG9pbnRYICYmIG1fcFBvaW50c1swXS5tX1BvaW50WSAhPSBtX3BQb2ludHNbM10ubV9Qb2ludFkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWF9GTE9BVCB4WzVdLCB5WzVdOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9Qb2ludENvdW50OyBpICsrKSB7CisgICAgICAgIHBNYXRyaXgtPlRyYW5zZm9ybShtX3BQb2ludHNbaV0ubV9Qb2ludFgsIG1fcFBvaW50c1tpXS5tX1BvaW50WSwgeFtpXSwgeVtpXSk7CisgICAgICAgIGlmIChpKSB7CisgICAgICAgICAgICBpZiAoKG1fcFBvaW50c1tpXS5tX0ZsYWcgJiBGWFBUX1RZUEUpICE9IEZYUFRfTElORVRPKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHhbaV0gIT0geFtpIC0gMV0gJiYgeVtpXSAhPSB5W2kgLSAxXSkgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocFJlY3QpIHsKKyAgICAgICAgcFJlY3QtPmxlZnQgPSB4WzBdOworICAgICAgICBwUmVjdC0+cmlnaHQgPSB4WzJdOworICAgICAgICBwUmVjdC0+Ym90dG9tID0geVswXTsKKyAgICAgICAgcFJlY3QtPnRvcCA9IHlbMl07CisgICAgICAgIHBSZWN0LT5Ob3JtYWxpemUoKTsKKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENGWF9QYXRoRGF0YTo6Q29weShjb25zdCBDRlhfUGF0aERhdGEgJnNyYykKK3sKKyAgICBpZiAoIVNldFBvaW50Q291bnQoc3JjLm1fUG9pbnRDb3VudCkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBGWFNZU19tZW1jcHkzMihtX3BQb2ludHMsIHNyYy5tX3BQb2ludHMsIHNpemVvZihGWF9QQVRIUE9JTlQpICogbV9Qb2ludENvdW50KTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0NGWF9HcmFwaFN0YXRlRGF0YTo6Q0ZYX0dyYXBoU3RhdGVEYXRhKCkKK3sKKyAgICBtX0xpbmVDYXAgPSBMaW5lQ2FwQnV0dDsKKyAgICBtX0Rhc2hDb3VudCA9IDA7CisgICAgbV9EYXNoQXJyYXkgPSBOVUxMOworICAgIG1fRGFzaFBoYXNlID0gMDsKKyAgICBtX0xpbmVKb2luID0gTGluZUpvaW5NaXRlcjsKKyAgICBtX01pdGVyTGltaXQgPSAxMCAqIDEuMGY7CisgICAgbV9MaW5lV2lkdGggPSAxLjBmOworfQorQ0ZYX0dyYXBoU3RhdGVEYXRhOjpDRlhfR3JhcGhTdGF0ZURhdGEoY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhJiBzcmMpCit7CisgICAgbV9EYXNoQXJyYXkgPSBOVUxMOworICAgIENvcHkoc3JjKTsKK30KK3ZvaWQgQ0ZYX0dyYXBoU3RhdGVEYXRhOjpDb3B5KGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSYgc3JjKQoreworICAgIG1fTGluZUNhcCA9IHNyYy5tX0xpbmVDYXA7CisgICAgbV9EYXNoQ291bnQgPSBzcmMubV9EYXNoQ291bnQ7CisgICAgaWYgKG1fRGFzaEFycmF5KSB7CisgICAgICAgIEZYX0ZyZWUobV9EYXNoQXJyYXkpOworICAgIH0KKyAgICBtX0Rhc2hBcnJheSA9IE5VTEw7CisgICAgbV9EYXNoUGhhc2UgPSBzcmMubV9EYXNoUGhhc2U7CisgICAgbV9MaW5lSm9pbiA9IHNyYy5tX0xpbmVKb2luOworICAgIG1fTWl0ZXJMaW1pdCA9IHNyYy5tX01pdGVyTGltaXQ7CisgICAgbV9MaW5lV2lkdGggPSBzcmMubV9MaW5lV2lkdGg7CisgICAgaWYgKG1fRGFzaENvdW50KSB7CisgICAgICAgIG1fRGFzaEFycmF5ID0gRlhfQWxsb2MoRlhfRkxPQVQsIG1fRGFzaENvdW50KTsKKyAgICAgICAgaWYgKCFtX0Rhc2hBcnJheSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEZYU1lTX21lbWNweTMyKG1fRGFzaEFycmF5LCBzcmMubV9EYXNoQXJyYXksIG1fRGFzaENvdW50ICogc2l6ZW9mKEZYX0ZMT0FUKSk7CisgICAgfQorfQorQ0ZYX0dyYXBoU3RhdGVEYXRhOjp+Q0ZYX0dyYXBoU3RhdGVEYXRhKCkKK3sKKyAgICBpZiAobV9EYXNoQXJyYXkpIHsKKyAgICAgICAgRlhfRnJlZShtX0Rhc2hBcnJheSk7CisgICAgfQorfQordm9pZCBDRlhfR3JhcGhTdGF0ZURhdGE6OlNldERhc2hDb3VudChpbnQgY291bnQpCit7CisgICAgaWYgKG1fRGFzaEFycmF5KSB7CisgICAgICAgIEZYX0ZyZWUobV9EYXNoQXJyYXkpOworICAgIH0KKyAgICBtX0Rhc2hBcnJheSA9IE5VTEw7CisgICAgbV9EYXNoQ291bnQgPSBjb3VudDsKKyAgICBpZiAoY291bnQgPT0gMCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fRGFzaEFycmF5ID0gRlhfQWxsb2MoRlhfRkxPQVQsIGNvdW50KTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2UvZ2UvZnhfZ2VfcHMuY3BwIGIvY29yZS9zcmMvZnhnZS9nZS9meF9nZV9wcy5jcHAKaW5kZXggYTM5YWIyZC4uZDY2NGI3MCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhnZS9nZS9meF9nZV9wcy5jcHAKKysrIGIvY29yZS9zcmMvZnhnZS9nZS9meF9nZV9wcy5jcHAKQEAgLTEsNjU3ICsxLDY1NyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZS5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaCINCi0jaW5jbHVkZSAidGV4dF9pbnQuaCINCi1zdHJ1Y3QgUFNHbHlwaCB7DQotICAgIENGWF9Gb250KgkJbV9wRm9udDsNCi0gICAgRlhfRFdPUkQJCW1fR2x5cGhJbmRleDsNCi0gICAgRlhfQk9PTAkJCW1fYkdseXBoQWRqdXN0Ow0KLSAgICBGWF9GTE9BVAkJbV9BZGp1c3RNYXRyaXhbNF07DQotfTsNCi1jbGFzcyBDUFNGb250IDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBQU0dseXBoCQkJbV9HbHlwaHNbMjU2XTsNCi0gICAgaW50CQkJCW1fbkdseXBoczsNCi19Ow0KLUNGWF9QU1JlbmRlcmVyOjpDRlhfUFNSZW5kZXJlcigpDQotew0KLSAgICBtX3BPdXRwdXQgPSBOVUxMOw0KLSAgICBtX2JDb2xvclNldCA9IG1fYkdyYXBoU3RhdGVTZXQgPSBGQUxTRTsNCi0gICAgbV9iSW5pdGVkID0gRkFMU0U7DQotfQ0KLUNGWF9QU1JlbmRlcmVyOjp+Q0ZYX1BTUmVuZGVyZXIoKQ0KLXsNCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoaW50KW1fUFNGb250TGlzdC5HZXRTaXplKCk7IGkgKyspIHsNCi0gICAgICAgIENQU0ZvbnQqIHBGb250ID0gbV9QU0ZvbnRMaXN0W2ldOw0KLSAgICAgICAgZGVsZXRlIHBGb250Ow0KLSAgICB9DQotfQ0KLSNkZWZpbmUgT1VUUFVUX1BTKHN0cikgbV9wT3V0cHV0LT5PdXRwdXRQUyhzdHIsIHNpemVvZiBzdHItMSkNCi12b2lkIENGWF9QU1JlbmRlcmVyOjpJbml0KElGWF9QU091dHB1dCogcE91dHB1dCwgaW50IHBzbGV2ZWwsIGludCB3aWR0aCwgaW50IGhlaWdodCwgRlhfQk9PTCBiQ215a091dHB1dCkNCi17DQotICAgIG1fUFNMZXZlbCA9IHBzbGV2ZWw7DQotICAgIG1fcE91dHB1dCA9IHBPdXRwdXQ7DQotICAgIG1fQ2xpcEJveC5sZWZ0ID0gbV9DbGlwQm94LnRvcCA9IDA7DQotICAgIG1fQ2xpcEJveC5yaWdodCA9IHdpZHRoOw0KLSAgICBtX0NsaXBCb3guYm90dG9tID0gaGVpZ2h0Ow0KLSAgICBtX2JDbXlrT3V0cHV0ID0gYkNteWtPdXRwdXQ7DQotfQ0KLUZYX0JPT0wgQ0ZYX1BTUmVuZGVyZXI6OlN0YXJ0UmVuZGVyaW5nKCkNCi17DQotICAgIGlmIChtX2JJbml0ZWQpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIHN0YXRpYyBjb25zdCBjaGFyIGluaXRfc3RyW10gPSAiXG5zYXZlXG4vaW0vaW5pdG1hdHJpeCBsb2FkIGRlZlxuIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9uL25ld3BhdGggbG9hZCBkZWYvbS9tb3ZldG8gbG9hZCBkZWYvbC9saW5ldG8gbG9hZCBkZWYvYy9jdXJ2ZXRvIGxvYWQgZGVmL2gvY2xvc2VwYXRoIGxvYWQgZGVmXG4iDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL2YvZmlsbCBsb2FkIGRlZi9GL2VvZmlsbCBsb2FkIGRlZi9zL3N0cm9rZSBsb2FkIGRlZi9XL2NsaXAgbG9hZCBkZWYvVyovZW9jbGlwIGxvYWQgZGVmXG4iDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL3JnL3NldHJnYmNvbG9yIGxvYWQgZGVmL2svc2V0Y215a2NvbG9yIGxvYWQgZGVmXG4iDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL0ovc2V0bGluZWNhcCBsb2FkIGRlZi9qL3NldGxpbmVqb2luIGxvYWQgZGVmL3cvc2V0bGluZXdpZHRoIGxvYWQgZGVmL00vc2V0bWl0ZXJsaW1pdCBsb2FkIGRlZi9kL3NldGRhc2ggbG9hZCBkZWZcbiINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvcS9nc2F2ZSBsb2FkIGRlZi9RL2dyZXN0b3JlIGxvYWQgZGVmL2lNL2ltYWdlbWFzayBsb2FkIGRlZlxuIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9Uai9zaG93IGxvYWQgZGVmL0ZmL2ZpbmRmb250IGxvYWQgZGVmL0ZzL3NjYWxlZm9udCBsb2FkIGRlZi9TZi9zZXRmb250IGxvYWQgZGVmXG4iDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL2NtL2NvbmNhdCBsb2FkIGRlZi9DbS9jdXJyZW50bWF0cml4IGxvYWQgZGVmL214L21hdHJpeCBsb2FkIGRlZi9zbS9zZXRtYXRyaXggbG9hZCBkZWZcbiINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsNCi0gICAgT1VUUFVUX1BTKGluaXRfc3RyKTsNCi0gICAgbV9iSW5pdGVkID0gVFJVRTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ0ZYX1BTUmVuZGVyZXI6OkVuZFJlbmRlcmluZygpDQotew0KLSAgICBpZiAobV9iSW5pdGVkKSB7DQotICAgICAgICBPVVRQVVRfUFMoIlxucmVzdG9yZVxuIik7DQotICAgIH0NCi0gICAgbV9iSW5pdGVkID0gRkFMU0U7DQotfQ0KLXZvaWQgQ0ZYX1BTUmVuZGVyZXI6OlNhdmVTdGF0ZSgpDQotew0KLSAgICBTdGFydFJlbmRlcmluZygpOw0KLSAgICBPVVRQVVRfUFMoInFcbiIpOw0KLSAgICBtX0NsaXBCb3hTdGFjay5BZGQobV9DbGlwQm94KTsNCi19DQotdm9pZCBDRlhfUFNSZW5kZXJlcjo6UmVzdG9yZVN0YXRlKEZYX0JPT0wgYktlZXBTYXZlZCkNCi17DQotICAgIFN0YXJ0UmVuZGVyaW5nKCk7DQotICAgIGlmIChiS2VlcFNhdmVkKSB7DQotICAgICAgICBPVVRQVVRfUFMoIlFcbnFcbiIpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgT1VUUFVUX1BTKCJRXG4iKTsNCi0gICAgfQ0KLSAgICBtX2JDb2xvclNldCA9IG1fYkdyYXBoU3RhdGVTZXQgPSBGQUxTRTsNCi0gICAgbV9DbGlwQm94ID0gbV9DbGlwQm94U3RhY2suR2V0QXQobV9DbGlwQm94U3RhY2suR2V0U2l6ZSgpIC0gMSk7DQotICAgIGlmICghYktlZXBTYXZlZCkgew0KLSAgICAgICAgbV9DbGlwQm94U3RhY2suUmVtb3ZlQXQobV9DbGlwQm94U3RhY2suR2V0U2l6ZSgpIC0gMSk7DQotICAgIH0NCi19DQotdm9pZCBDRlhfUFNSZW5kZXJlcjo6T3V0cHV0UGF0aChjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UpDQotew0KLSAgICBpbnQgblBvaW50cyA9IHBQYXRoRGF0YS0+R2V0UG9pbnRDb3VudCgpOw0KLSAgICBDRlhfQnl0ZVRleHRCdWYgYnVmOw0KLSAgICBidWYuRXN0aW1hdGVTaXplKG5Qb2ludHMgKiAxMCk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgblBvaW50czsgaSArKykgew0KLSAgICAgICAgRlhfQllURSBmbGFnID0gcFBhdGhEYXRhLT5HZXRGbGFnKGkpOw0KLSAgICAgICAgRlhfRkxPQVQgeCA9IHBQYXRoRGF0YS0+R2V0UG9pbnRYKGkpOw0KLSAgICAgICAgRlhfRkxPQVQgeSA9IHBQYXRoRGF0YS0+R2V0UG9pbnRZKGkpOw0KLSAgICAgICAgaWYgKHBPYmplY3QyRGV2aWNlKSB7DQotICAgICAgICAgICAgcE9iamVjdDJEZXZpY2UtPlRyYW5zZm9ybSh4LCB5KTsNCi0gICAgICAgIH0NCi0gICAgICAgIGJ1ZiA8PCB4IDw8IEZYX0JTVFJDKCIgIikgPDwgeTsNCi0gICAgICAgIHN3aXRjaCAoZmxhZyAmIEZYUFRfVFlQRSkgew0KLSAgICAgICAgICAgIGNhc2UgRlhQVF9NT1ZFVE86DQotICAgICAgICAgICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiIG0gIik7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgRlhQVF9MSU5FVE86DQotICAgICAgICAgICAgICAgIGlmIChmbGFnICYgRlhQVF9DTE9TRUZJR1VSRSkgew0KLSAgICAgICAgICAgICAgICAgICAgYnVmIDw8IEZYX0JTVFJDKCIgbCBoICIpOw0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgYnVmIDw8IEZYX0JTVFJDKCIgbCAiKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICBjYXNlIEZYUFRfQkVaSUVSVE86IHsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIHgxID0gcFBhdGhEYXRhLT5HZXRQb2ludFgoaSArIDEpOw0KLSAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQgeDIgPSBwUGF0aERhdGEtPkdldFBvaW50WChpICsgMik7DQotICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCB5MSA9IHBQYXRoRGF0YS0+R2V0UG9pbnRZKGkgKyAxKTsNCi0gICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIHkyID0gcFBhdGhEYXRhLT5HZXRQb2ludFkoaSArIDIpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBPYmplY3QyRGV2aWNlKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcE9iamVjdDJEZXZpY2UtPlRyYW5zZm9ybSh4MSwgeTEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBPYmplY3QyRGV2aWNlLT5UcmFuc2Zvcm0oeDIsIHkyKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiICIpIDw8IHgxIDw8IEZYX0JTVFJDKCIgIikgPDwgeTEgPDwgRlhfQlNUUkMoIiAiKSA8PCB4MiA8PCBGWF9CU1RSQygiICIpIDw8IHkyOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWcgJiBGWFBUX0NMT1NFRklHVVJFKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnVmIDw8IEZYX0JTVFJDKCIgYyBoXG4iKTsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgYnVmIDw8IEZYX0JTVFJDKCIgY1xuIik7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBpICs9IDI7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIG1fcE91dHB1dC0+T3V0cHV0UFMoKEZYX0xQQ1NUUilidWYuR2V0QnVmZmVyKCksIGJ1Zi5HZXRTaXplKCkpOw0KLX0NCi12b2lkIENGWF9QU1JlbmRlcmVyOjpTZXRDbGlwX1BhdGhGaWxsKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmlsbF9tb2RlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCi17DQotICAgIFN0YXJ0UmVuZGVyaW5nKCk7DQotICAgIE91dHB1dFBhdGgocFBhdGhEYXRhLCBwT2JqZWN0MkRldmljZSk7DQotICAgIENGWF9GbG9hdFJlY3QgcmVjdCA9IHBQYXRoRGF0YS0+R2V0Qm91bmRpbmdCb3goKTsNCi0gICAgaWYgKHBPYmplY3QyRGV2aWNlKSB7DQotICAgICAgICByZWN0LlRyYW5zZm9ybShwT2JqZWN0MkRldmljZSk7DQotICAgIH0NCi0gICAgbV9DbGlwQm94LkludGVyc2VjdChyZWN0LkdldE91dHRlclJlY3QoKSk7DQotICAgIGlmICgoZmlsbF9tb2RlICYgMykgPT0gRlhGSUxMX1dJTkRJTkcpIHsNCi0gICAgICAgIE9VVFBVVF9QUygiVyBuXG4iKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIE9VVFBVVF9QUygiVyogblxuIik7DQotICAgIH0NCi19DQotdm9pZCBDRlhfUFNSZW5kZXJlcjo6U2V0Q2xpcF9QYXRoU3Ryb2tlKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkRldmljZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCi17DQotICAgIFN0YXJ0UmVuZGVyaW5nKCk7DQotICAgIFNldEdyYXBoU3RhdGUocEdyYXBoU3RhdGUpOw0KLSAgICBpZiAocE9iamVjdDJEZXZpY2UpIHsNCi0gICAgICAgIENGWF9CeXRlVGV4dEJ1ZiBidWY7DQotICAgICAgICBidWYgPDwgRlhfQlNUUkMoIm14IENtIFsiKSA8PCBwT2JqZWN0MkRldmljZS0+YSA8PCBGWF9CU1RSQygiICIpIDw8IHBPYmplY3QyRGV2aWNlLT5iIDw8IEZYX0JTVFJDKCIgIikgPDwNCi0gICAgICAgICAgICBwT2JqZWN0MkRldmljZS0+YyA8PCBGWF9CU1RSQygiICIpIDw8IHBPYmplY3QyRGV2aWNlLT5kIDw8IEZYX0JTVFJDKCIgIikgPDwgcE9iamVjdDJEZXZpY2UtPmUgPDwNCi0gICAgICAgICAgICBGWF9CU1RSQygiICIpIDw8IHBPYmplY3QyRGV2aWNlLT5mIDw8IEZYX0JTVFJDKCJdY20gIik7DQotICAgICAgICBtX3BPdXRwdXQtPk91dHB1dFBTKChGWF9MUENTVFIpYnVmLkdldEJ1ZmZlcigpLCBidWYuR2V0U2l6ZSgpKTsNCi0gICAgfQ0KLSAgICBPdXRwdXRQYXRoKHBQYXRoRGF0YSwgTlVMTCk7DQotICAgIENGWF9GbG9hdFJlY3QgcmVjdCA9IHBQYXRoRGF0YS0+R2V0Qm91bmRpbmdCb3gocEdyYXBoU3RhdGUtPm1fTGluZVdpZHRoLCBwR3JhcGhTdGF0ZS0+bV9NaXRlckxpbWl0KTsNCi0gICAgcmVjdC5UcmFuc2Zvcm0ocE9iamVjdDJEZXZpY2UpOw0KLSAgICBtX0NsaXBCb3guSW50ZXJzZWN0KHJlY3QuR2V0T3V0dGVyUmVjdCgpKTsNCi0gICAgaWYgKHBPYmplY3QyRGV2aWNlKSB7DQotICAgICAgICBPVVRQVVRfUFMoInN0cm9rZXBhdGggVyBuIHNtXG4iKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIE9VVFBVVF9QUygic3Ryb2tlcGF0aCBXIG5cbiIpOw0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ0ZYX1BTUmVuZGVyZXI6OkRyYXdQYXRoKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgZmlsbF9jb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBzdHJva2VfY29sb3IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpbGxfbW9kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBwSWNjVHJhbnNmb3JtDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQotew0KLSAgICBTdGFydFJlbmRlcmluZygpOw0KLSAgICBpbnQgZmlsbF9hbHBoYSA9IEZYR0VURkxBR19DT0xPUlRZUEUoYWxwaGFfZmxhZykgPyBGWEdFVEZMQUdfQUxQSEFfRklMTChhbHBoYV9mbGFnKSA6IEZYQVJHQl9BKGZpbGxfY29sb3IpOw0KLSAgICBpbnQgc3Ryb2tlX2FscGhhID0gRlhHRVRGTEFHX0NPTE9SVFlQRShhbHBoYV9mbGFnKSA/IEZYR0VURkxBR19BTFBIQV9TVFJPS0UoYWxwaGFfZmxhZykgOiBGWEFSR0JfQShzdHJva2VfY29sb3IpOw0KLSAgICBpZiAoZmlsbF9hbHBoYSAmJiBmaWxsX2FscGhhIDwgMjU1KSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKHN0cm9rZV9hbHBoYSAmJiBzdHJva2VfYWxwaGEgPCAyNTUpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoZmlsbF9hbHBoYSA9PSAwICYmIHN0cm9rZV9hbHBoYSA9PSAwKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaWYgKHN0cm9rZV9hbHBoYSkgew0KLSAgICAgICAgU2V0R3JhcGhTdGF0ZShwR3JhcGhTdGF0ZSk7DQotICAgICAgICBpZiAocE9iamVjdDJEZXZpY2UpIHsNCi0gICAgICAgICAgICBDRlhfQnl0ZVRleHRCdWYgYnVmOw0KLSAgICAgICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygibXggQ20gWyIpIDw8IHBPYmplY3QyRGV2aWNlLT5hIDw8IEZYX0JTVFJDKCIgIikgPDwgcE9iamVjdDJEZXZpY2UtPmIgPDwgRlhfQlNUUkMoIiAiKSA8PA0KLSAgICAgICAgICAgICAgICBwT2JqZWN0MkRldmljZS0+YyA8PCBGWF9CU1RSQygiICIpIDw8IHBPYmplY3QyRGV2aWNlLT5kIDw8IEZYX0JTVFJDKCIgIikgPDwgcE9iamVjdDJEZXZpY2UtPmUgPDwNCi0gICAgICAgICAgICAgICAgRlhfQlNUUkMoIiAiKSA8PCBwT2JqZWN0MkRldmljZS0+ZiA8PCBGWF9CU1RSQygiXWNtICIpOw0KLSAgICAgICAgICAgIG1fcE91dHB1dC0+T3V0cHV0UFMoKEZYX0xQQ1NUUilidWYuR2V0QnVmZmVyKCksIGJ1Zi5HZXRTaXplKCkpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIE91dHB1dFBhdGgocFBhdGhEYXRhLCBzdHJva2VfYWxwaGEgPyBOVUxMIDogcE9iamVjdDJEZXZpY2UpOw0KLSAgICBpZiAoZmlsbF9tb2RlICYmIGZpbGxfYWxwaGEpIHsNCi0gICAgICAgIFNldENvbG9yKGZpbGxfY29sb3IsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOw0KLSAgICAgICAgaWYgKChmaWxsX21vZGUgJiAzKSA9PSBGWEZJTExfV0lORElORykgew0KLSAgICAgICAgICAgIGlmIChzdHJva2VfYWxwaGEpIHsNCi0gICAgICAgICAgICAgICAgT1VUUFVUX1BTKCJxIGYgUSAiKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBPVVRQVVRfUFMoImYiKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2UgaWYgKChmaWxsX21vZGUgJiAzKSA9PSBGWEZJTExfQUxURVJOQVRFKSB7DQotICAgICAgICAgICAgaWYgKHN0cm9rZV9hbHBoYSkgew0KLSAgICAgICAgICAgICAgICBPVVRQVVRfUFMoInEgRiBRICIpOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIE9VVFBVVF9QUygiRiIpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoc3Ryb2tlX2FscGhhKSB7DQotICAgICAgICBTZXRDb2xvcihzdHJva2VfY29sb3IsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOw0KLSAgICAgICAgaWYgKHBPYmplY3QyRGV2aWNlKSB7DQotICAgICAgICAgICAgT1VUUFVUX1BTKCJzIHNtIik7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIE9VVFBVVF9QUygicyIpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIE9VVFBVVF9QUygiXG4iKTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ0ZYX1BTUmVuZGVyZXI6OlNldEdyYXBoU3RhdGUoY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZSkNCi17DQotICAgIENGWF9CeXRlVGV4dEJ1ZiBidWY7DQotICAgIGlmICghbV9iR3JhcGhTdGF0ZVNldCB8fCBtX0N1ckdyYXBoU3RhdGUubV9MaW5lQ2FwICE9IHBHcmFwaFN0YXRlLT5tX0xpbmVDYXApIHsNCi0gICAgICAgIGJ1ZiA8PCBwR3JhcGhTdGF0ZS0+bV9MaW5lQ2FwIDw8IEZYX0JTVFJDKCIgSlxuIik7DQotICAgIH0NCi0gICAgaWYgKCFtX2JHcmFwaFN0YXRlU2V0IHx8IG1fQ3VyR3JhcGhTdGF0ZS5tX0Rhc2hDb3VudCAhPSBwR3JhcGhTdGF0ZS0+bV9EYXNoQ291bnQgfHwNCi0gICAgICAgICAgICBGWFNZU19tZW1jbXAzMihtX0N1ckdyYXBoU3RhdGUubV9EYXNoQXJyYXksIHBHcmFwaFN0YXRlLT5tX0Rhc2hBcnJheSwgc2l6ZW9mKEZYX0ZMT0FUKSptX0N1ckdyYXBoU3RhdGUubV9EYXNoQ291bnQpKSB7DQotICAgICAgICBidWYgPDwgRlhfQlNUUkMoIlsiKTsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcEdyYXBoU3RhdGUtPm1fRGFzaENvdW50OyBpICsrKSB7DQotICAgICAgICAgICAgYnVmIDw8IHBHcmFwaFN0YXRlLT5tX0Rhc2hBcnJheVtpXSA8PCBGWF9CU1RSQygiICIpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgYnVmIDw8IEZYX0JTVFJDKCJdIikgPDwgcEdyYXBoU3RhdGUtPm1fRGFzaFBoYXNlIDw8IEZYX0JTVFJDKCIgZFxuIik7DQotICAgIH0NCi0gICAgaWYgKCFtX2JHcmFwaFN0YXRlU2V0IHx8IG1fQ3VyR3JhcGhTdGF0ZS5tX0xpbmVKb2luICE9IHBHcmFwaFN0YXRlLT5tX0xpbmVKb2luKSB7DQotICAgICAgICBidWYgPDwgcEdyYXBoU3RhdGUtPm1fTGluZUpvaW4gPDwgRlhfQlNUUkMoIiBqXG4iKTsNCi0gICAgfQ0KLSAgICBpZiAoIW1fYkdyYXBoU3RhdGVTZXQgfHwgbV9DdXJHcmFwaFN0YXRlLm1fTGluZVdpZHRoICE9IHBHcmFwaFN0YXRlLT5tX0xpbmVXaWR0aCkgew0KLSAgICAgICAgYnVmIDw8IHBHcmFwaFN0YXRlLT5tX0xpbmVXaWR0aCA8PCBGWF9CU1RSQygiIHdcbiIpOw0KLSAgICB9DQotICAgIGlmICghbV9iR3JhcGhTdGF0ZVNldCB8fCBtX0N1ckdyYXBoU3RhdGUubV9NaXRlckxpbWl0ICE9IHBHcmFwaFN0YXRlLT5tX01pdGVyTGltaXQpIHsNCi0gICAgICAgIGJ1ZiA8PCBwR3JhcGhTdGF0ZS0+bV9NaXRlckxpbWl0IDw8IEZYX0JTVFJDKCIgTVxuIik7DQotICAgIH0NCi0gICAgbV9DdXJHcmFwaFN0YXRlLkNvcHkoKnBHcmFwaFN0YXRlKTsNCi0gICAgbV9iR3JhcGhTdGF0ZVNldCA9IFRSVUU7DQotICAgIGlmIChidWYuR2V0U2l6ZSgpKSB7DQotICAgICAgICBtX3BPdXRwdXQtPk91dHB1dFBTKChGWF9MUENTVFIpYnVmLkdldEJ1ZmZlcigpLCBidWYuR2V0U2l6ZSgpKTsNCi0gICAgfQ0KLX0NCi1zdGF0aWMgdm9pZCBGYXhDb21wcmVzc0RhdGEoRlhfTFBCWVRFIHNyY19idWYsIGludCB3aWR0aCwgaW50IGhlaWdodCwgRlhfTFBCWVRFJiBkZXN0X2J1ZiwgRlhfRFdPUkQmIGRlc3Rfc2l6ZSkNCi17DQotICAgIENDb2RlY19Nb2R1bGVNZ3IqIHBFbmNvZGVycyA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCk7DQotICAgIGlmICh3aWR0aCAqIGhlaWdodCA+IDEyOCAmJiBwRW5jb2RlcnMgJiYgcEVuY29kZXJzLT5HZXRGYXhNb2R1bGUoKS0+RW5jb2RlKHNyY19idWYsIHdpZHRoLCBoZWlnaHQsICh3aWR0aCArIDcpIC8gOCwgZGVzdF9idWYsIGRlc3Rfc2l6ZSkpIHsNCi0gICAgICAgIEZYX0ZyZWUoc3JjX2J1Zik7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBkZXN0X2J1ZiA9IHNyY19idWY7DQotICAgICAgICBkZXN0X3NpemUgPSAod2lkdGggKyA3KSAvIDggKiBoZWlnaHQ7DQotICAgIH0NCi19DQotc3RhdGljIHZvaWQgUFNDb21wcmVzc0RhdGEoaW50IFBTTGV2ZWwsIEZYX0xQQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9MUEJZVEUmIG91dHB1dF9idWYsIEZYX0RXT1JEJiBvdXRwdXRfc2l6ZSwgRlhfTFBDU1RSJiBmaWx0ZXIpDQotew0KLSAgICBvdXRwdXRfYnVmID0gc3JjX2J1ZjsNCi0gICAgb3V0cHV0X3NpemUgPSBzcmNfc2l6ZTsNCi0gICAgZmlsdGVyID0gIiI7DQotICAgIGlmIChzcmNfc2l6ZSA8IDEwMjQpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDQ29kZWNfTW9kdWxlTWdyKiBwRW5jb2RlcnMgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpOw0KLSAgICBGWF9MUEJZVEUgZGVzdF9idWYgPSBOVUxMOw0KLSAgICBGWF9EV09SRCBkZXN0X3NpemUgPSBzcmNfc2l6ZTsNCi0gICAgaWYgKFBTTGV2ZWwgPj0gMykgew0KLSAgICAgICAgaWYgKHBFbmNvZGVycyAmJiBwRW5jb2RlcnMtPkdldEZsYXRlTW9kdWxlKCktPkVuY29kZShzcmNfYnVmLCBzcmNfc2l6ZSwgZGVzdF9idWYsIGRlc3Rfc2l6ZSkpIHsNCi0gICAgICAgICAgICBmaWx0ZXIgPSAiL0ZsYXRlRGVjb2RlIGZpbHRlciAiOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYgKHBFbmNvZGVycyAmJiBwRW5jb2RlcnMtPkdldEJhc2ljTW9kdWxlKCktPlJ1bkxlbmd0aEVuY29kZShzcmNfYnVmLCBzcmNfc2l6ZSwgZGVzdF9idWYsIGRlc3Rfc2l6ZSkpIHsNCi0gICAgICAgICAgICBmaWx0ZXIgPSAiL1J1bkxlbmd0aERlY29kZSBmaWx0ZXIgIjsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAoZGVzdF9zaXplIDwgc3JjX3NpemUpIHsNCi0gICAgICAgIG91dHB1dF9idWYgPSBkZXN0X2J1ZjsNCi0gICAgICAgIG91dHB1dF9zaXplID0gZGVzdF9zaXplOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZmlsdGVyID0gTlVMTDsNCi0gICAgICAgIGlmIChkZXN0X2J1Zikgew0KLSAgICAgICAgICAgIEZYX0ZyZWUoZGVzdF9idWYpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ0ZYX1BTUmVuZGVyZXI6OlNldERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwU291cmNlLCBGWF9EV09SRCBjb2xvciwgaW50IGxlZnQsIGludCB0b3AsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQ0KLXsNCi0gICAgU3RhcnRSZW5kZXJpbmcoKTsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXgoKEZYX0ZMT0FUKShwU291cmNlLT5HZXRXaWR0aCgpKSwgMC4wZiwgMC4wZiwgLShGWF9GTE9BVCkocFNvdXJjZS0+R2V0SGVpZ2h0KCkpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlhfRkxPQVQpKGxlZnQpLCAoRlhfRkxPQVQpKHRvcCArIHBTb3VyY2UtPkdldEhlaWdodCgpKSk7DQotICAgIHJldHVybiBEcmF3RElCaXRzKHBTb3VyY2UsIGNvbG9yLCAmbWF0cml4LCAwLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtKTsNCi19DQotRlhfQk9PTCBDRlhfUFNSZW5kZXJlcjo6U3RyZXRjaERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwU291cmNlLCBGWF9EV09SRCBjb2xvciwgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgRlhfRFdPUkQgZmxhZ3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSkNCi17DQotICAgIFN0YXJ0UmVuZGVyaW5nKCk7DQotICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4KChGWF9GTE9BVCkoZGVzdF93aWR0aCksIDAuMGYsIDAuMGYsIChGWF9GTE9BVCkoLWRlc3RfaGVpZ2h0KSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZYX0ZMT0FUKShkZXN0X2xlZnQpLCAoRlhfRkxPQVQpKGRlc3RfdG9wICsgZGVzdF9oZWlnaHQpKTsNCi0gICAgcmV0dXJuIERyYXdESUJpdHMocFNvdXJjZSwgY29sb3IsICZtYXRyaXgsIGZsYWdzLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtKTsNCi19DQotRlhfQk9PTCBDRlhfUFNSZW5kZXJlcjo6RHJhd0RJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwU291cmNlLCBGWF9EV09SRCBjb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIEZYX0RXT1JEIGZsYWdzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBTdGFydFJlbmRlcmluZygpOw0KLSAgICBpZiAoKHBNYXRyaXgtPmEgPT0gMCAmJiBwTWF0cml4LT5iID09IDApIHx8IChwTWF0cml4LT5jID09IDAgJiYgcE1hdHJpeC0+ZCA9PSAwKSkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgaWYgKHBTb3VyY2UtPkhhc0FscGhhKCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpbnQgYWxwaGEgPSBGWEdFVEZMQUdfQ09MT1JUWVBFKGFscGhhX2ZsYWcpID8gRlhHRVRGTEFHX0FMUEhBX0ZJTEwoY29sb3IpIDogRlhBUkdCX0EoY29sb3IpOw0KLSAgICBpZiAocFNvdXJjZS0+SXNBbHBoYU1hc2soKSAmJiAoYWxwaGEgPCAyNTUgfHwgcFNvdXJjZS0+R2V0QlBQKCkgIT0gMSkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBPVVRQVVRfUFMoInFcbiIpOw0KLSAgICBDRlhfQnl0ZVRleHRCdWYgYnVmOw0KLSAgICBidWYgPDwgRlhfQlNUUkMoIlsiKSA8PCBwTWF0cml4LT5hIDw8IEZYX0JTVFJDKCIgIikgPDwgcE1hdHJpeC0+YiA8PCBGWF9CU1RSQygiICIpIDw8DQotICAgICAgICBwTWF0cml4LT5jIDw8IEZYX0JTVFJDKCIgIikgPDwgcE1hdHJpeC0+ZCA8PCBGWF9CU1RSQygiICIpIDw8IHBNYXRyaXgtPmUgPDwNCi0gICAgICAgIEZYX0JTVFJDKCIgIikgPDwgcE1hdHJpeC0+ZiA8PCBGWF9CU1RSQygiXWNtICIpOw0KLSAgICBpbnQgd2lkdGggPSBwU291cmNlLT5HZXRXaWR0aCgpOw0KLSAgICBpbnQgaGVpZ2h0ID0gcFNvdXJjZS0+R2V0SGVpZ2h0KCk7DQotICAgIGJ1ZiA8PCB3aWR0aCA8PCBGWF9CU1RSQygiICIpIDw8IGhlaWdodDsNCi0gICAgaWYgKHBTb3VyY2UtPkdldEJQUCgpID09IDEgJiYgcFNvdXJjZS0+R2V0UGFsZXR0ZSgpID09IE5VTEwpIHsNCi0gICAgICAgIGludCBwaXRjaCA9ICh3aWR0aCArIDcpIC8gODsNCi0gICAgICAgIEZYX0RXT1JEIHNyY19zaXplID0gaGVpZ2h0ICogcGl0Y2g7DQotICAgICAgICBGWF9MUEJZVEUgc3JjX2J1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIHNyY19zaXplKTsNCi0gICAgICAgIGlmICghc3JjX2J1Zikgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7DQotICAgICAgICAgICAgRlhfTFBDQllURSBzcmNfc2NhbiA9IHBTb3VyY2UtPkdldFNjYW5saW5lKHJvdyk7DQotICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIoc3JjX2J1ZiArIHJvdyAqIHBpdGNoLCBzcmNfc2NhbiwgcGl0Y2gpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfTFBCWVRFIG91dHB1dF9idWY7DQotICAgICAgICBGWF9EV09SRCBvdXRwdXRfc2l6ZTsNCi0gICAgICAgIEZheENvbXByZXNzRGF0YShzcmNfYnVmLCB3aWR0aCwgaGVpZ2h0LCBvdXRwdXRfYnVmLCBvdXRwdXRfc2l6ZSk7DQotICAgICAgICBpZiAocFNvdXJjZS0+SXNBbHBoYU1hc2soKSkgew0KLSAgICAgICAgICAgIFNldENvbG9yKGNvbG9yLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtKTsNCi0gICAgICAgICAgICBtX2JDb2xvclNldCA9IEZBTFNFOw0KLSAgICAgICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiIHRydWVbIik7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiIDFbIik7DQotICAgICAgICB9DQotICAgICAgICBidWYgPDwgd2lkdGggPDwgRlhfQlNUUkMoIiAwIDAgLSIpIDw8IGhlaWdodCA8PCBGWF9CU1RSQygiIDAgIikgPDwgaGVpZ2h0IDw8DQotICAgICAgICAgICAgRlhfQlNUUkMoIl1jdXJyZW50ZmlsZS9BU0NJSTg1RGVjb2RlIGZpbHRlciAiKTsNCi0gICAgICAgIGlmIChvdXRwdXRfYnVmICE9IHNyY19idWYpDQotICAgICAgICAgICAgYnVmIDw8IEZYX0JTVFJDKCI8PC9LIC0xL0VuZE9mQmxvY2sgZmFsc2UvQ29sdW1ucyAiKSA8PCB3aWR0aCA8PCBGWF9CU1RSQygiL1Jvd3MgIikgPDwgaGVpZ2h0IDw8DQotICAgICAgICAgICAgICAgIEZYX0JTVFJDKCI+Pi9DQ0lUVEZheERlY29kZSBmaWx0ZXIgIik7DQotICAgICAgICBpZiAocFNvdXJjZS0+SXNBbHBoYU1hc2soKSkgew0KLSAgICAgICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiaU1cbiIpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBidWYgPDwgRlhfQlNUUkMoImZhbHNlIDEgY29sb3JpbWFnZVxuIik7DQotICAgICAgICB9DQotICAgICAgICBtX3BPdXRwdXQtPk91dHB1dFBTKChGWF9MUENTVFIpYnVmLkdldEJ1ZmZlcigpLCBidWYuR2V0U2l6ZSgpKTsNCi0gICAgICAgIFdyaXRlUFNCaW5hcnkob3V0cHV0X2J1Ziwgb3V0cHV0X3NpemUpOw0KLSAgICAgICAgRlhfRnJlZShvdXRwdXRfYnVmKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIENGWF9ESUJTb3VyY2UqIHBDb252ZXJ0ZWQgPSAoQ0ZYX0RJQlNvdXJjZSopcFNvdXJjZTsNCi0gICAgICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7DQotICAgICAgICAgICAgRlhESUJfRm9ybWF0IGZvcm1hdCA9IG1fYkNteWtPdXRwdXQgPyBGWERJQl9DbXlrIDogRlhESUJfUmdiOw0KLSAgICAgICAgICAgIHBDb252ZXJ0ZWQgPSBwU291cmNlLT5DbG9uZUNvbnZlcnQoZm9ybWF0LCBOVUxMLCBwSWNjVHJhbnNmb3JtKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc3dpdGNoIChwU291cmNlLT5HZXRGb3JtYXQoKSkgew0KLSAgICAgICAgICAgICAgICBjYXNlIEZYRElCXzFicHBSZ2I6DQotICAgICAgICAgICAgICAgIGNhc2UgRlhESUJfUmdiMzI6DQotICAgICAgICAgICAgICAgICAgICBwQ29udmVydGVkID0gcFNvdXJjZS0+Q2xvbmVDb252ZXJ0KEZYRElCX1JnYik7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSBGWERJQl84YnBwUmdiOg0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHBTb3VyY2UtPkdldFBhbGV0dGUoKSAhPSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcENvbnZlcnRlZCA9IHBTb3VyY2UtPkNsb25lQ29udmVydChGWERJQl9SZ2IpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgRlhESUJfMWJwcENteWs6DQotICAgICAgICAgICAgICAgICAgICBwQ29udmVydGVkID0gcFNvdXJjZS0+Q2xvbmVDb252ZXJ0KEZYRElCX0NteWspOw0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgRlhESUJfOGJwcENteWs6DQotICAgICAgICAgICAgICAgICAgICBpZiAocFNvdXJjZS0+R2V0UGFsZXR0ZSgpICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBwQ29udmVydGVkID0gcFNvdXJjZS0+Q2xvbmVDb252ZXJ0KEZYRElCX0NteWspOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAocENvbnZlcnRlZCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgT1VUUFVUX1BTKCJcblFcbiIpOw0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBCcHAgPSBwQ29udmVydGVkLT5HZXRCUFAoKSAvIDg7DQotICAgICAgICBGWF9MUEJZVEUgb3V0cHV0X2J1ZiA9IE5VTEw7DQotICAgICAgICBGWF9TVFJTSVpFIG91dHB1dF9zaXplID0gMDsNCi0gICAgICAgIEZYX0xQQ1NUUiBmaWx0ZXIgPSBOVUxMOw0KLSAgICAgICAgaWYgKGZsYWdzICYgRlhSRU5ERVJfSU1BR0VfTE9TU1kpIHsNCi0gICAgICAgICAgICBDQ29kZWNfTW9kdWxlTWdyKiBwRW5jb2RlcnMgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpOw0KLSAgICAgICAgICAgIGlmIChwRW5jb2RlcnMgJiYgcEVuY29kZXJzLT5HZXRKcGVnTW9kdWxlKCktPkVuY29kZShwQ29udmVydGVkLCBvdXRwdXRfYnVmLCBvdXRwdXRfc2l6ZSkpIHsNCi0gICAgICAgICAgICAgICAgZmlsdGVyID0gIi9EQ1REZWNvZGUgZmlsdGVyICI7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGZpbHRlciA9PSBOVUxMKSB7DQotICAgICAgICAgICAgaW50IHNyY19waXRjaCA9IHdpZHRoICogQnBwOw0KLSAgICAgICAgICAgIG91dHB1dF9zaXplID0gaGVpZ2h0ICogc3JjX3BpdGNoOw0KLSAgICAgICAgICAgIG91dHB1dF9idWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBvdXRwdXRfc2l6ZSk7DQotICAgICAgICAgICAgaWYgKCFvdXRwdXRfYnVmKSB7DQotICAgICAgICAgICAgICAgIGlmIChwQ29udmVydGVkICE9IHBTb3VyY2UpIHsNCi0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwQ29udmVydGVkOw0KLSAgICAgICAgICAgICAgICAgICAgcENvbnZlcnRlZCA9IE5VTEw7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgew0KLSAgICAgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gcENvbnZlcnRlZC0+R2V0U2NhbmxpbmUocm93KTsNCi0gICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IG91dHB1dF9idWYgKyByb3cgKiBzcmNfcGl0Y2g7DQotICAgICAgICAgICAgICAgIGlmIChCcHAgPT0gMykgew0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19zY2FuWzJdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9IHNyY19zY2FuWzFdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbjsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIoZGVzdF9zY2FuLCBzcmNfc2Nhbiwgc3JjX3BpdGNoKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9MUEJZVEUgY29tcHJlc3NlZF9idWY7DQotICAgICAgICAgICAgRlhfRFdPUkQgY29tcHJlc3NlZF9zaXplOw0KLSAgICAgICAgICAgIFBTQ29tcHJlc3NEYXRhKG1fUFNMZXZlbCwgb3V0cHV0X2J1Ziwgb3V0cHV0X3NpemUsIGNvbXByZXNzZWRfYnVmLCBjb21wcmVzc2VkX3NpemUsIGZpbHRlcik7DQotICAgICAgICAgICAgaWYgKG91dHB1dF9idWYgIT0gY29tcHJlc3NlZF9idWYpIHsNCi0gICAgICAgICAgICAgICAgRlhfRnJlZShvdXRwdXRfYnVmKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgb3V0cHV0X2J1ZiA9IGNvbXByZXNzZWRfYnVmOw0KLSAgICAgICAgICAgIG91dHB1dF9zaXplID0gY29tcHJlc3NlZF9zaXplOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBDb252ZXJ0ZWQgIT0gcFNvdXJjZSkgew0KLSAgICAgICAgICAgIGRlbGV0ZSBwQ29udmVydGVkOw0KLSAgICAgICAgICAgIHBDb252ZXJ0ZWQgPSBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICAgICAgYnVmIDw8IEZYX0JTVFJDKCIgOFsiKTsNCi0gICAgICAgIGJ1ZiA8PCB3aWR0aCA8PCBGWF9CU1RSQygiIDAgMCAtIikgPDwgaGVpZ2h0IDw8IEZYX0JTVFJDKCIgMCAiKSA8PCBoZWlnaHQgPDwgRlhfQlNUUkMoIl0iKTsNCi0gICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiY3VycmVudGZpbGUvQVNDSUk4NURlY29kZSBmaWx0ZXIgIik7DQotICAgICAgICBpZiAoZmlsdGVyKSB7DQotICAgICAgICAgICAgYnVmIDw8IGZpbHRlcjsNCi0gICAgICAgIH0NCi0gICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiZmFsc2UgIikgPDwgQnBwOw0KLSAgICAgICAgYnVmIDw8IEZYX0JTVFJDKCIgY29sb3JpbWFnZVxuIik7DQotICAgICAgICBtX3BPdXRwdXQtPk91dHB1dFBTKChGWF9MUENTVFIpYnVmLkdldEJ1ZmZlcigpLCBidWYuR2V0U2l6ZSgpKTsNCi0gICAgICAgIFdyaXRlUFNCaW5hcnkob3V0cHV0X2J1Ziwgb3V0cHV0X3NpemUpOw0KLSAgICAgICAgRlhfRnJlZShvdXRwdXRfYnVmKTsNCi0gICAgfQ0KLSAgICBPVVRQVVRfUFMoIlxuUVxuIik7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi12b2lkIENGWF9QU1JlbmRlcmVyOjpTZXRDb2xvcihGWF9EV09SRCBjb2xvciwgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBpZiAoIUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCkgfHwgIUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCktPkdldEljY01vZHVsZSgpKSB7DQotICAgICAgICBwSWNjVHJhbnNmb3JtID0gTlVMTDsNCi0gICAgfQ0KLSAgICBGWF9CT09MIGJDTVlLID0gRkFMU0U7DQotICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7DQotICAgICAgICBJQ29kZWNfSWNjTW9kdWxlKiBwSWNjTW9kdWxlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCk7DQotICAgICAgICBjb2xvciA9IEZYR0VURkxBR19DT0xPUlRZUEUoYWxwaGFfZmxhZykgPyBGWENNWUtfVE9ESUIoY29sb3IpIDogRlhBUkdCX1RPRElCKGNvbG9yKTsNCi0gICAgICAgIEZYX0xQQllURSBwQ29sb3IgPSAoRlhfTFBCWVRFKSZjb2xvcjsNCi0gICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIHBDb2xvciwgcENvbG9yLCAxKTsNCi0gICAgICAgIGNvbG9yID0gbV9iQ215a091dHB1dCA/IEZYQ01ZS19UT0RJQihjb2xvcikgOiBGWEFSR0JfVE9ESUIoY29sb3IpOw0KLSAgICAgICAgYkNNWUsgPSBtX2JDbXlrT3V0cHV0Ow0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgYkNNWUsgPSBGWEdFVEZMQUdfQ09MT1JUWVBFKGFscGhhX2ZsYWcpOw0KLSAgICB9DQotICAgIGlmIChiQ01ZSyAhPSBtX2JDbXlrT3V0cHV0IHx8ICFtX2JDb2xvclNldCB8fCBtX0xhc3RDb2xvciAhPSBjb2xvcikgew0KLSAgICAgICAgQ0ZYX0J5dGVUZXh0QnVmIGJ1ZjsNCi0gICAgICAgIGlmIChiQ01ZSykgew0KLSAgICAgICAgICAgIGJ1ZiA8PCBGWFNZU19HZXRDVmFsdWUoY29sb3IpIC8gMjU1LjAgPDwgRlhfQlNUUkMoIiAiKSA8PCBGWFNZU19HZXRNVmFsdWUoY29sb3IpIC8gMjU1LjAgPDwgRlhfQlNUUkMoIiAiKQ0KLSAgICAgICAgICAgICAgICA8PCBGWFNZU19HZXRZVmFsdWUoY29sb3IpIC8gMjU1LjAgPDwgRlhfQlNUUkMoIiAiKSA8PCBGWFNZU19HZXRLVmFsdWUoY29sb3IpIC8gMjU1LjAgPDwgRlhfQlNUUkMoIiBrXG4iKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgYnVmIDw8IEZYQVJHQl9SKGNvbG9yKSAvIDI1NS4wIDw8IEZYX0JTVFJDKCIgIikgPDwgRlhBUkdCX0coY29sb3IpIC8gMjU1LjAgPDwgRlhfQlNUUkMoIiAiKQ0KLSAgICAgICAgICAgICAgICA8PCBGWEFSR0JfQihjb2xvcikgLyAyNTUuMCA8PCBGWF9CU1RSQygiIHJnXG4iKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChiQ01ZSyA9PSBtX2JDbXlrT3V0cHV0KSB7DQotICAgICAgICAgICAgbV9iQ29sb3JTZXQgPSBUUlVFOw0KLSAgICAgICAgICAgIG1fTGFzdENvbG9yID0gY29sb3I7DQotICAgICAgICB9DQotICAgICAgICBtX3BPdXRwdXQtPk91dHB1dFBTKChGWF9MUENTVFIpYnVmLkdldEJ1ZmZlcigpLCBidWYuR2V0U2l6ZSgpKTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9QU1JlbmRlcmVyOjpGaW5kUFNGb250R2x5cGgoQ0ZYX0ZhY2VDYWNoZSogcEZhY2VDYWNoZSwgQ0ZYX0ZvbnQqIHBGb250LCBjb25zdCBGWFRFWFRfQ0hBUlBPUyYgY2hhcnBvcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBwc19mb250bnVtLCBpbnQgJnBzX2dseXBoaW5kZXgpDQotew0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IChpbnQpbV9QU0ZvbnRMaXN0LkdldFNpemUoKTsgaSArKykgew0KLSAgICAgICAgQ1BTRm9udCogcFBTRm9udCA9IG1fUFNGb250TGlzdFtpXTsNCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcFBTRm9udC0+bV9uR2x5cGhzOyBqICsrKQ0KLSAgICAgICAgICAgIGlmIChwUFNGb250LT5tX0dseXBoc1tqXS5tX3BGb250ID09IHBGb250ICYmIHBQU0ZvbnQtPm1fR2x5cGhzW2pdLm1fR2x5cGhJbmRleCA9PSBjaGFycG9zLm1fR2x5cGhJbmRleCkgew0KLSAgICAgICAgICAgICAgICBpZiAoKCFwUFNGb250LT5tX0dseXBoc1tqXS5tX2JHbHlwaEFkanVzdCAmJiAhY2hhcnBvcy5tX2JHbHlwaEFkanVzdCkgfHwNCi0gICAgICAgICAgICAgICAgICAgICAgICAocFBTRm9udC0+bV9HbHlwaHNbal0ubV9iR2x5cGhBZGp1c3QgJiYgY2hhcnBvcy5tX2JHbHlwaEFkanVzdCAmJg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAoRlhTWVNfZmFicyhwUFNGb250LT5tX0dseXBoc1tqXS5tX0FkanVzdE1hdHJpeFswXSAtIGNoYXJwb3MubV9BZGp1c3RNYXRyaXhbMF0pIDwgMC4wMSAmJg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlhTWVNfZmFicyhwUFNGb250LT5tX0dseXBoc1tqXS5tX0FkanVzdE1hdHJpeFsxXSAtIGNoYXJwb3MubV9BZGp1c3RNYXRyaXhbMV0pIDwgMC4wMSAmJg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlhTWVNfZmFicyhwUFNGb250LT5tX0dseXBoc1tqXS5tX0FkanVzdE1hdHJpeFsyXSAtIGNoYXJwb3MubV9BZGp1c3RNYXRyaXhbMl0pIDwgMC4wMSAmJg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgRlhTWVNfZmFicyhwUFNGb250LT5tX0dseXBoc1tqXS5tX0FkanVzdE1hdHJpeFszXSAtIGNoYXJwb3MubV9BZGp1c3RNYXRyaXhbM10pIDwgMC4wMSkpKSB7DQotICAgICAgICAgICAgICAgICAgICBwc19mb250bnVtID0gaTsNCi0gICAgICAgICAgICAgICAgICAgIHBzX2dseXBoaW5kZXggPSBqOw0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmIChtX1BTRm9udExpc3QuR2V0U2l6ZSgpID09IDAgfHwgbV9QU0ZvbnRMaXN0W21fUFNGb250TGlzdC5HZXRTaXplKCkgLSAxXS0+bV9uR2x5cGhzID09IDI1Nikgew0KLSAgICAgICAgQ1BTRm9udCogcFBTRm9udCA9IEZYX05FVyBDUFNGb250Ow0KLSAgICAgICAgaWYgKCFwUFNGb250KSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcFBTRm9udC0+bV9uR2x5cGhzID0gMDsNCi0gICAgICAgIG1fUFNGb250TGlzdC5BZGQocFBTRm9udCk7DQotICAgICAgICBDRlhfQnl0ZVRleHRCdWYgYnVmOw0KLSAgICAgICAgYnVmIDw8IEZYX0JTVFJDKCI4IGRpY3QgYmVnaW4vRm9udFR5cGUgMyBkZWYvRm9udE1hdHJpeFsxIDAgMCAxIDAgMF1kZWZcbiINCi0gICAgICAgICAgICAgICAgICAgICAgICAiL0ZvbnRCQm94WzAgMCAwIDBdZGVmL0VuY29kaW5nIDI1NiBhcnJheSBkZWYgMCAxIDI1NXtFbmNvZGluZyBleGNoLy5ub3RkZWYgcHV0fWZvclxuIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICIvQ2hhclByb2NzIDEgZGljdCBkZWYgQ2hhclByb2NzIGJlZ2luLy5ub3RkZWYge30gZGVmIGVuZFxuIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICIvQnVpbGRHbHlwaHsxIDAgLTEwIC0xMCAxMCAxMCBzZXRjYWNoZWRldmljZSBleGNoL0NoYXJQcm9jcyBnZXQgZXhjaCAyIGNvcHkga25vd24gbm90e3BvcC8ubm90ZGVmfWlmIGdldCBleGVjfWJpbmQgZGVmXG4iDQotICAgICAgICAgICAgICAgICAgICAgICAgIi9CdWlsZENoYXJ7MSBpbmRleC9FbmNvZGluZyBnZXQgZXhjaCBnZXQgMSBpbmRleC9CdWlsZEdseXBoIGdldCBleGVjfWJpbmQgZGVmXG4iDQotICAgICAgICAgICAgICAgICAgICAgICAgImN1cnJlbnRkaWN0IGVuZFxuIik7DQotICAgICAgICBidWYgPDwgRlhfQlNUUkMoIi9YIikgPDwgbV9QU0ZvbnRMaXN0LkdldFNpemUoKSAtIDEgPDwgRlhfQlNUUkMoIiBleGNoIGRlZmluZWZvbnQgcG9wXG4iKTsNCi0gICAgICAgIG1fcE91dHB1dC0+T3V0cHV0UFMoKEZYX0xQQ1NUUilidWYuR2V0QnVmZmVyKCksIGJ1Zi5HZXRTaXplKCkpOw0KLSAgICAgICAgYnVmLkNsZWFyKCk7DQotICAgIH0NCi0gICAgcHNfZm9udG51bSA9IG1fUFNGb250TGlzdC5HZXRTaXplKCkgLSAxOw0KLSAgICBDUFNGb250KiBwUFNGb250ID0gbV9QU0ZvbnRMaXN0W3BzX2ZvbnRudW1dOw0KLSAgICBwc19nbHlwaGluZGV4ID0gcFBTRm9udC0+bV9uR2x5cGhzOw0KLSAgICBwUFNGb250LT5tX0dseXBoc1twc19nbHlwaGluZGV4XS5tX0dseXBoSW5kZXggPSBjaGFycG9zLm1fR2x5cGhJbmRleDsNCi0gICAgcFBTRm9udC0+bV9HbHlwaHNbcHNfZ2x5cGhpbmRleF0ubV9wRm9udCA9IHBGb250Ow0KLSAgICBwUFNGb250LT5tX0dseXBoc1twc19nbHlwaGluZGV4XS5tX2JHbHlwaEFkanVzdCA9IGNoYXJwb3MubV9iR2x5cGhBZGp1c3Q7DQotICAgIGlmIChjaGFycG9zLm1fYkdseXBoQWRqdXN0KSB7DQotICAgICAgICBwUFNGb250LT5tX0dseXBoc1twc19nbHlwaGluZGV4XS5tX0FkanVzdE1hdHJpeFswXSA9IGNoYXJwb3MubV9BZGp1c3RNYXRyaXhbMF07DQotICAgICAgICBwUFNGb250LT5tX0dseXBoc1twc19nbHlwaGluZGV4XS5tX0FkanVzdE1hdHJpeFsxXSA9IGNoYXJwb3MubV9BZGp1c3RNYXRyaXhbMV07DQotICAgICAgICBwUFNGb250LT5tX0dseXBoc1twc19nbHlwaGluZGV4XS5tX0FkanVzdE1hdHJpeFsyXSA9IGNoYXJwb3MubV9BZGp1c3RNYXRyaXhbMl07DQotICAgICAgICBwUFNGb250LT5tX0dseXBoc1twc19nbHlwaGluZGV4XS5tX0FkanVzdE1hdHJpeFszXSA9IGNoYXJwb3MubV9BZGp1c3RNYXRyaXhbM107DQotICAgIH0NCi0gICAgcFBTRm9udC0+bV9uR2x5cGhzICsrOw0KLSAgICBDRlhfQWZmaW5lTWF0cml4IG1hdHJpeDsNCi0gICAgaWYgKGNoYXJwb3MubV9iR2x5cGhBZGp1c3QpDQotICAgICAgICBtYXRyaXguU2V0KGNoYXJwb3MubV9BZGp1c3RNYXRyaXhbMF0sIGNoYXJwb3MubV9BZGp1c3RNYXRyaXhbMV0sDQotICAgICAgICAgICAgICAgICAgIGNoYXJwb3MubV9BZGp1c3RNYXRyaXhbMl0sIGNoYXJwb3MubV9BZGp1c3RNYXRyaXhbM10sIDAsIDApOw0KLSAgICBtYXRyaXguQ29uY2F0KDEuMGYsIDAsIDAsIDEuMGYsIDAsIDApOw0KLSAgICBjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSA9IHBGYWNlQ2FjaGUtPkxvYWRHbHlwaFBhdGgocEZvbnQsIGNoYXJwb3MubV9HbHlwaEluZGV4LCBjaGFycG9zLm1fRm9udENoYXJXaWR0aCk7DQotICAgIGlmIChwUGF0aERhdGEgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIENGWF9QYXRoRGF0YSBUcmFuc2Zvcm1lZFBhdGgoKnBQYXRoRGF0YSk7DQotICAgIGlmIChjaGFycG9zLm1fYkdseXBoQWRqdXN0KSB7DQotICAgICAgICBUcmFuc2Zvcm1lZFBhdGguVHJhbnNmb3JtKCZtYXRyaXgpOw0KLSAgICB9DQotICAgIENGWF9CeXRlVGV4dEJ1ZiBidWY7DQotICAgIGJ1ZiA8PCBGWF9CU1RSQygiL1giKSA8PCBwc19mb250bnVtIDw8IEZYX0JTVFJDKCIgRmYvQ2hhclByb2NzIGdldCBiZWdpbi8iKQ0KLSAgICAgICAgPDwgcHNfZ2x5cGhpbmRleCA8PCBGWF9CU1RSQygieyIpOw0KLSAgICBidWYgPDwgRlhfQlNUUkMoIm4gIik7DQotICAgIGZvciAoaW50IHAgPSAwOyBwIDwgVHJhbnNmb3JtZWRQYXRoLkdldFBvaW50Q291bnQoKTsgcCArKykgew0KLSAgICAgICAgRlhfRkxPQVQgeCA9IFRyYW5zZm9ybWVkUGF0aC5HZXRQb2ludFgocCksIHkgPSBUcmFuc2Zvcm1lZFBhdGguR2V0UG9pbnRZKHApOw0KLSAgICAgICAgc3dpdGNoIChUcmFuc2Zvcm1lZFBhdGguR2V0RmxhZyhwKSAmIEZYUFRfVFlQRSkgew0KLSAgICAgICAgICAgIGNhc2UgRlhQVF9NT1ZFVE86IHsNCi0gICAgICAgICAgICAgICAgICAgIGJ1ZiA8PCB4IDw8IEZYX0JTVFJDKCIgIikgPDwgeSA8PCBGWF9CU1RSQygiIG1cbiIpOw0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBjYXNlIEZYUFRfTElORVRPOiB7DQotICAgICAgICAgICAgICAgICAgICBidWYgPDwgeCA8PCBGWF9CU1RSQygiICIpIDw8IHkgPDwgRlhfQlNUUkMoIiBsXG4iKTsNCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgY2FzZSBGWFBUX0JFWklFUlRPOiB7DQotICAgICAgICAgICAgICAgICAgICBidWYgPDwgeCA8PCBGWF9CU1RSQygiICIpIDw8IHkgPDwgRlhfQlNUUkMoIiAiKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIDw8IFRyYW5zZm9ybWVkUGF0aC5HZXRQb2ludFgocCArIDEpIDw8IEZYX0JTVFJDKCIgIikNCi0gICAgICAgICAgICAgICAgICAgICAgICA8PCBUcmFuc2Zvcm1lZFBhdGguR2V0UG9pbnRZKHAgKyAxKSA8PCBGWF9CU1RSQygiICIpDQotICAgICAgICAgICAgICAgICAgICAgICAgPDwgVHJhbnNmb3JtZWRQYXRoLkdldFBvaW50WChwICsgMikgPDwgRlhfQlNUUkMoIiAiKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIDw8IFRyYW5zZm9ybWVkUGF0aC5HZXRQb2ludFkocCArIDIpIDw8IEZYX0JTVFJDKCIgY1xuIik7DQotICAgICAgICAgICAgICAgICAgICBwICs9IDI7DQotICAgICAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGJ1ZiA8PCBGWF9CU1RSQygiZiIpOw0KLSAgICBidWYgPDwgRlhfQlNUUkMoIn1iaW5kIGRlZiBlbmRcbiIpOw0KLSAgICBidWYgPDwgRlhfQlNUUkMoIi9YIikgPDwgcHNfZm9udG51bSA8PCBGWF9CU1RSQygiIEZmL0VuY29kaW5nIGdldCAiKSA8PCBwc19nbHlwaGluZGV4DQotICAgICAgICA8PCBGWF9CU1RSQygiLyIpIDw8IHBzX2dseXBoaW5kZXggPDwgRlhfQlNUUkMoIiBwdXRcbiIpOw0KLSAgICBtX3BPdXRwdXQtPk91dHB1dFBTKChGWF9MUENTVFIpYnVmLkdldEJ1ZmZlcigpLCBidWYuR2V0U2l6ZSgpKTsNCi19DQotRlhfQk9PTCBDRlhfUFNSZW5kZXJlcjo6RHJhd1RleHQoaW50IG5DaGFycywgY29uc3QgRlhURVhUX0NIQVJQT1MqIHBDaGFyUG9zLCBDRlhfRm9udCogcEZvbnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX0ZvbnRDYWNoZSogcENhY2hlLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkRldmljZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCBmb250X3NpemUsIEZYX0RXT1JEIGNvbG9yLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQ0KLXsNCi0gICAgU3RhcnRSZW5kZXJpbmcoKTsNCi0gICAgaW50IGFscGhhID0gRlhHRVRGTEFHX0NPTE9SVFlQRShhbHBoYV9mbGFnKSA/IEZYR0VURkxBR19BTFBIQV9GSUxMKGFscGhhX2ZsYWcpIDogRlhBUkdCX0EoY29sb3IpOw0KLSAgICBpZiAoYWxwaGEgPCAyNTUpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoKHBPYmplY3QyRGV2aWNlLT5hID09IDAgJiYgcE9iamVjdDJEZXZpY2UtPmIgPT0gMCkgfHwgKHBPYmplY3QyRGV2aWNlLT5jID09IDAgJiYgcE9iamVjdDJEZXZpY2UtPmQgPT0gMCkpIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIFNldENvbG9yKGNvbG9yLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtKTsNCi0gICAgQ0ZYX0J5dGVUZXh0QnVmIGJ1ZjsNCi0gICAgYnVmIDw8IEZYX0JTVFJDKCJxWyIpIDw8IHBPYmplY3QyRGV2aWNlLT5hIDw8IEZYX0JTVFJDKCIgIikgPDwgcE9iamVjdDJEZXZpY2UtPmIgPDwgRlhfQlNUUkMoIiAiKQ0KLSAgICAgICAgPDwgcE9iamVjdDJEZXZpY2UtPmMgPDwgRlhfQlNUUkMoIiAiKSA8PCBwT2JqZWN0MkRldmljZS0+ZDsNCi0gICAgYnVmIDw8IEZYX0JTVFJDKCIgIikgPDwgcE9iamVjdDJEZXZpY2UtPmUgPDwgRlhfQlNUUkMoIiAiKSA8PCBwT2JqZWN0MkRldmljZS0+ZiA8PCAiXWNtXG4iOw0KLSAgICBpZiAocENhY2hlID09IE5VTEwpIHsNCi0gICAgICAgIHBDYWNoZSA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldEZvbnRDYWNoZSgpOw0KLSAgICB9DQotICAgIENGWF9GYWNlQ2FjaGUqIHBGYWNlQ2FjaGUgPSBwQ2FjaGUtPkdldENhY2hlZEZhY2UocEZvbnQpOw0KLSAgICBGWF9GT05UQ0FDSEVfREVGSU5FKHBDYWNoZSwgcEZvbnQpOw0KLSAgICBpbnQgbGFzdF9mb250bnVtID0gLTE7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkNoYXJzOyBpICsrKSB7DQotICAgICAgICBpbnQgcHNfZm9udG51bSwgcHNfZ2x5cGhpbmRleDsNCi0gICAgICAgIEZpbmRQU0ZvbnRHbHlwaChwRmFjZUNhY2hlLCBwRm9udCwgcENoYXJQb3NbaV0sIHBzX2ZvbnRudW0sIHBzX2dseXBoaW5kZXgpOw0KLSAgICAgICAgaWYgKGxhc3RfZm9udG51bSAhPSBwc19mb250bnVtKSB7DQotICAgICAgICAgICAgYnVmIDw8IEZYX0JTVFJDKCIvWCIpIDw8IHBzX2ZvbnRudW0gPDwgRlhfQlNUUkMoIiBGZiAiKSA8PCBmb250X3NpemUNCi0gICAgICAgICAgICAgICAgPDwgRlhfQlNUUkMoIiBGcyBTZiAiKTsNCi0gICAgICAgICAgICBsYXN0X2ZvbnRudW0gPSBwc19mb250bnVtOw0KLSAgICAgICAgfQ0KLSAgICAgICAgYnVmIDw8IHBDaGFyUG9zW2ldLm1fT3JpZ2luWCA8PCBGWF9CU1RSQygiICIpDQotICAgICAgICAgICAgPDwgcENoYXJQb3NbaV0ubV9PcmlnaW5ZIDw8IEZYX0JTVFJDKCIgbSIpOw0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgaGV4Ow0KLSAgICAgICAgaGV4LkZvcm1hdCgiPCUwMlg+IiwgcHNfZ2x5cGhpbmRleCk7DQotICAgICAgICBidWYgPDwgaGV4IDw8IEZYX0JTVFJDKCJUalxuIik7DQotICAgIH0NCi0gICAgYnVmIDw8IEZYX0JTVFJDKCJRXG4iKTsNCi0gICAgbV9wT3V0cHV0LT5PdXRwdXRQUygoRlhfTFBDU1RSKWJ1Zi5HZXRCdWZmZXIoKSwgYnVmLkdldFNpemUoKSk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi12b2lkIENGWF9QU1JlbmRlcmVyOjpXcml0ZVBTQmluYXJ5KEZYX0xQQ0JZVEUgZGF0YSwgaW50IGxlbikNCi17DQotICAgIEZYX0xQQllURSBkZXN0X2J1ZjsNCi0gICAgRlhfRFdPUkQgZGVzdF9zaXplOw0KLSAgICBDQ29kZWNfTW9kdWxlTWdyKiBwRW5jb2RlcnMgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpOw0KLSAgICBpZiAocEVuY29kZXJzICYmIHBFbmNvZGVycy0+R2V0QmFzaWNNb2R1bGUoKS0+QTg1RW5jb2RlKGRhdGEsIGxlbiwgZGVzdF9idWYsIGRlc3Rfc2l6ZSkpIHsNCi0gICAgICAgIG1fcE91dHB1dC0+T3V0cHV0UFMoKEZYX0xQQ1NUUilkZXN0X2J1ZiwgZGVzdF9zaXplKTsNCi0gICAgICAgIEZYX0ZyZWUoZGVzdF9idWYpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9wT3V0cHV0LT5PdXRwdXRQUygoRlhfTFBDU1RSKWRhdGEsIGxlbik7DQotICAgIH0NCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZS5oIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjb2RlYy9meF9jb2RlYy5oIgorI2luY2x1ZGUgInRleHRfaW50LmgiCitzdHJ1Y3QgUFNHbHlwaCB7CisgICAgQ0ZYX0ZvbnQqCQltX3BGb250OworICAgIEZYX0RXT1JECQltX0dseXBoSW5kZXg7CisgICAgRlhfQk9PTAkJCW1fYkdseXBoQWRqdXN0OworICAgIEZYX0ZMT0FUCQltX0FkanVzdE1hdHJpeFs0XTsKK307CitjbGFzcyBDUFNGb250IDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBQU0dseXBoCQkJbV9HbHlwaHNbMjU2XTsKKyAgICBpbnQJCQkJbV9uR2x5cGhzOworfTsKK0NGWF9QU1JlbmRlcmVyOjpDRlhfUFNSZW5kZXJlcigpCit7CisgICAgbV9wT3V0cHV0ID0gTlVMTDsKKyAgICBtX2JDb2xvclNldCA9IG1fYkdyYXBoU3RhdGVTZXQgPSBGQUxTRTsKKyAgICBtX2JJbml0ZWQgPSBGQUxTRTsKK30KK0NGWF9QU1JlbmRlcmVyOjp+Q0ZYX1BTUmVuZGVyZXIoKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKGludCltX1BTRm9udExpc3QuR2V0U2l6ZSgpOyBpICsrKSB7CisgICAgICAgIENQU0ZvbnQqIHBGb250ID0gbV9QU0ZvbnRMaXN0W2ldOworICAgICAgICBkZWxldGUgcEZvbnQ7CisgICAgfQorfQorI2RlZmluZSBPVVRQVVRfUFMoc3RyKSBtX3BPdXRwdXQtPk91dHB1dFBTKHN0ciwgc2l6ZW9mIHN0ci0xKQordm9pZCBDRlhfUFNSZW5kZXJlcjo6SW5pdChJRlhfUFNPdXRwdXQqIHBPdXRwdXQsIGludCBwc2xldmVsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEZYX0JPT0wgYkNteWtPdXRwdXQpCit7CisgICAgbV9QU0xldmVsID0gcHNsZXZlbDsKKyAgICBtX3BPdXRwdXQgPSBwT3V0cHV0OworICAgIG1fQ2xpcEJveC5sZWZ0ID0gbV9DbGlwQm94LnRvcCA9IDA7CisgICAgbV9DbGlwQm94LnJpZ2h0ID0gd2lkdGg7CisgICAgbV9DbGlwQm94LmJvdHRvbSA9IGhlaWdodDsKKyAgICBtX2JDbXlrT3V0cHV0ID0gYkNteWtPdXRwdXQ7Cit9CitGWF9CT09MIENGWF9QU1JlbmRlcmVyOjpTdGFydFJlbmRlcmluZygpCit7CisgICAgaWYgKG1fYkluaXRlZCkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgc3RhdGljIGNvbnN0IGNoYXIgaW5pdF9zdHJbXSA9ICJcbnNhdmVcbi9pbS9pbml0bWF0cml4IGxvYWQgZGVmXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvbi9uZXdwYXRoIGxvYWQgZGVmL20vbW92ZXRvIGxvYWQgZGVmL2wvbGluZXRvIGxvYWQgZGVmL2MvY3VydmV0byBsb2FkIGRlZi9oL2Nsb3NlcGF0aCBsb2FkIGRlZlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL2YvZmlsbCBsb2FkIGRlZi9GL2VvZmlsbCBsb2FkIGRlZi9zL3N0cm9rZSBsb2FkIGRlZi9XL2NsaXAgbG9hZCBkZWYvVyovZW9jbGlwIGxvYWQgZGVmXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvcmcvc2V0cmdiY29sb3IgbG9hZCBkZWYvay9zZXRjbXlrY29sb3IgbG9hZCBkZWZcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9KL3NldGxpbmVjYXAgbG9hZCBkZWYvai9zZXRsaW5lam9pbiBsb2FkIGRlZi93L3NldGxpbmV3aWR0aCBsb2FkIGRlZi9NL3NldG1pdGVybGltaXQgbG9hZCBkZWYvZC9zZXRkYXNoIGxvYWQgZGVmXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvcS9nc2F2ZSBsb2FkIGRlZi9RL2dyZXN0b3JlIGxvYWQgZGVmL2lNL2ltYWdlbWFzayBsb2FkIGRlZlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL1RqL3Nob3cgbG9hZCBkZWYvRmYvZmluZGZvbnQgbG9hZCBkZWYvRnMvc2NhbGVmb250IGxvYWQgZGVmL1NmL3NldGZvbnQgbG9hZCBkZWZcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9jbS9jb25jYXQgbG9hZCBkZWYvQ20vY3VycmVudG1hdHJpeCBsb2FkIGRlZi9teC9tYXRyaXggbG9hZCBkZWYvc20vc2V0bWF0cml4IGxvYWQgZGVmXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKyAgICBPVVRQVVRfUFMoaW5pdF9zdHIpOworICAgIG1fYkluaXRlZCA9IFRSVUU7CisgICAgcmV0dXJuIFRSVUU7Cit9Cit2b2lkIENGWF9QU1JlbmRlcmVyOjpFbmRSZW5kZXJpbmcoKQoreworICAgIGlmIChtX2JJbml0ZWQpIHsKKyAgICAgICAgT1VUUFVUX1BTKCJcbnJlc3RvcmVcbiIpOworICAgIH0KKyAgICBtX2JJbml0ZWQgPSBGQUxTRTsKK30KK3ZvaWQgQ0ZYX1BTUmVuZGVyZXI6OlNhdmVTdGF0ZSgpCit7CisgICAgU3RhcnRSZW5kZXJpbmcoKTsKKyAgICBPVVRQVVRfUFMoInFcbiIpOworICAgIG1fQ2xpcEJveFN0YWNrLkFkZChtX0NsaXBCb3gpOworfQordm9pZCBDRlhfUFNSZW5kZXJlcjo6UmVzdG9yZVN0YXRlKEZYX0JPT0wgYktlZXBTYXZlZCkKK3sKKyAgICBTdGFydFJlbmRlcmluZygpOworICAgIGlmIChiS2VlcFNhdmVkKSB7CisgICAgICAgIE9VVFBVVF9QUygiUVxucVxuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgT1VUUFVUX1BTKCJRXG4iKTsKKyAgICB9CisgICAgbV9iQ29sb3JTZXQgPSBtX2JHcmFwaFN0YXRlU2V0ID0gRkFMU0U7CisgICAgbV9DbGlwQm94ID0gbV9DbGlwQm94U3RhY2suR2V0QXQobV9DbGlwQm94U3RhY2suR2V0U2l6ZSgpIC0gMSk7CisgICAgaWYgKCFiS2VlcFNhdmVkKSB7CisgICAgICAgIG1fQ2xpcEJveFN0YWNrLlJlbW92ZUF0KG1fQ2xpcEJveFN0YWNrLkdldFNpemUoKSAtIDEpOworICAgIH0KK30KK3ZvaWQgQ0ZYX1BTUmVuZGVyZXI6Ok91dHB1dFBhdGgoY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlKQoreworICAgIGludCBuUG9pbnRzID0gcFBhdGhEYXRhLT5HZXRQb2ludENvdW50KCk7CisgICAgQ0ZYX0J5dGVUZXh0QnVmIGJ1ZjsKKyAgICBidWYuRXN0aW1hdGVTaXplKG5Qb2ludHMgKiAxMCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuUG9pbnRzOyBpICsrKSB7CisgICAgICAgIEZYX0JZVEUgZmxhZyA9IHBQYXRoRGF0YS0+R2V0RmxhZyhpKTsKKyAgICAgICAgRlhfRkxPQVQgeCA9IHBQYXRoRGF0YS0+R2V0UG9pbnRYKGkpOworICAgICAgICBGWF9GTE9BVCB5ID0gcFBhdGhEYXRhLT5HZXRQb2ludFkoaSk7CisgICAgICAgIGlmIChwT2JqZWN0MkRldmljZSkgeworICAgICAgICAgICAgcE9iamVjdDJEZXZpY2UtPlRyYW5zZm9ybSh4LCB5KTsKKyAgICAgICAgfQorICAgICAgICBidWYgPDwgeCA8PCBGWF9CU1RSQygiICIpIDw8IHk7CisgICAgICAgIHN3aXRjaCAoZmxhZyAmIEZYUFRfVFlQRSkgeworICAgICAgICAgICAgY2FzZSBGWFBUX01PVkVUTzoKKyAgICAgICAgICAgICAgICBidWYgPDwgRlhfQlNUUkMoIiBtICIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGWFBUX0xJTkVUTzoKKyAgICAgICAgICAgICAgICBpZiAoZmxhZyAmIEZYUFRfQ0xPU0VGSUdVUkUpIHsKKyAgICAgICAgICAgICAgICAgICAgYnVmIDw8IEZYX0JTVFJDKCIgbCBoICIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiIGwgIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGWFBUX0JFWklFUlRPOiB7CisgICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIHgxID0gcFBhdGhEYXRhLT5HZXRQb2ludFgoaSArIDEpOworICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCB4MiA9IHBQYXRoRGF0YS0+R2V0UG9pbnRYKGkgKyAyKTsKKyAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQgeTEgPSBwUGF0aERhdGEtPkdldFBvaW50WShpICsgMSk7CisgICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIHkyID0gcFBhdGhEYXRhLT5HZXRQb2ludFkoaSArIDIpOworICAgICAgICAgICAgICAgICAgICBpZiAocE9iamVjdDJEZXZpY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBPYmplY3QyRGV2aWNlLT5UcmFuc2Zvcm0oeDEsIHkxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBPYmplY3QyRGV2aWNlLT5UcmFuc2Zvcm0oeDIsIHkyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBidWYgPDwgRlhfQlNUUkMoIiAiKSA8PCB4MSA8PCBGWF9CU1RSQygiICIpIDw8IHkxIDw8IEZYX0JTVFJDKCIgIikgPDwgeDIgPDwgRlhfQlNUUkMoIiAiKSA8PCB5MjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWcgJiBGWFBUX0NMT1NFRklHVVJFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBidWYgPDwgRlhfQlNUUkMoIiBjIGhcbiIpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYnVmIDw8IEZYX0JTVFJDKCIgY1xuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaSArPSAyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgbV9wT3V0cHV0LT5PdXRwdXRQUygoRlhfTFBDU1RSKWJ1Zi5HZXRCdWZmZXIoKSwgYnVmLkdldFNpemUoKSk7Cit9Cit2b2lkIENGWF9QU1JlbmRlcmVyOjpTZXRDbGlwX1BhdGhGaWxsKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpbGxfbW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKK3sKKyAgICBTdGFydFJlbmRlcmluZygpOworICAgIE91dHB1dFBhdGgocFBhdGhEYXRhLCBwT2JqZWN0MkRldmljZSk7CisgICAgQ0ZYX0Zsb2F0UmVjdCByZWN0ID0gcFBhdGhEYXRhLT5HZXRCb3VuZGluZ0JveCgpOworICAgIGlmIChwT2JqZWN0MkRldmljZSkgeworICAgICAgICByZWN0LlRyYW5zZm9ybShwT2JqZWN0MkRldmljZSk7CisgICAgfQorICAgIG1fQ2xpcEJveC5JbnRlcnNlY3QocmVjdC5HZXRPdXR0ZXJSZWN0KCkpOworICAgIGlmICgoZmlsbF9tb2RlICYgMykgPT0gRlhGSUxMX1dJTkRJTkcpIHsKKyAgICAgICAgT1VUUFVUX1BTKCJXIG5cbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIE9VVFBVVF9QUygiVyogblxuIik7CisgICAgfQorfQordm9pZCBDRlhfUFNSZW5kZXJlcjo6U2V0Q2xpcF9QYXRoU3Ryb2tlKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKK3sKKyAgICBTdGFydFJlbmRlcmluZygpOworICAgIFNldEdyYXBoU3RhdGUocEdyYXBoU3RhdGUpOworICAgIGlmIChwT2JqZWN0MkRldmljZSkgeworICAgICAgICBDRlhfQnl0ZVRleHRCdWYgYnVmOworICAgICAgICBidWYgPDwgRlhfQlNUUkMoIm14IENtIFsiKSA8PCBwT2JqZWN0MkRldmljZS0+YSA8PCBGWF9CU1RSQygiICIpIDw8IHBPYmplY3QyRGV2aWNlLT5iIDw8IEZYX0JTVFJDKCIgIikgPDwKKyAgICAgICAgICAgIHBPYmplY3QyRGV2aWNlLT5jIDw8IEZYX0JTVFJDKCIgIikgPDwgcE9iamVjdDJEZXZpY2UtPmQgPDwgRlhfQlNUUkMoIiAiKSA8PCBwT2JqZWN0MkRldmljZS0+ZSA8PAorICAgICAgICAgICAgRlhfQlNUUkMoIiAiKSA8PCBwT2JqZWN0MkRldmljZS0+ZiA8PCBGWF9CU1RSQygiXWNtICIpOworICAgICAgICBtX3BPdXRwdXQtPk91dHB1dFBTKChGWF9MUENTVFIpYnVmLkdldEJ1ZmZlcigpLCBidWYuR2V0U2l6ZSgpKTsKKyAgICB9CisgICAgT3V0cHV0UGF0aChwUGF0aERhdGEsIE5VTEwpOworICAgIENGWF9GbG9hdFJlY3QgcmVjdCA9IHBQYXRoRGF0YS0+R2V0Qm91bmRpbmdCb3gocEdyYXBoU3RhdGUtPm1fTGluZVdpZHRoLCBwR3JhcGhTdGF0ZS0+bV9NaXRlckxpbWl0KTsKKyAgICByZWN0LlRyYW5zZm9ybShwT2JqZWN0MkRldmljZSk7CisgICAgbV9DbGlwQm94LkludGVyc2VjdChyZWN0LkdldE91dHRlclJlY3QoKSk7CisgICAgaWYgKHBPYmplY3QyRGV2aWNlKSB7CisgICAgICAgIE9VVFBVVF9QUygic3Ryb2tlcGF0aCBXIG4gc21cbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIE9VVFBVVF9QUygic3Ryb2tlcGF0aCBXIG5cbiIpOworICAgIH0KK30KK0ZYX0JPT0wgQ0ZYX1BTUmVuZGVyZXI6OkRyYXdQYXRoKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfR3JhcGhTdGF0ZURhdGEqIHBHcmFwaFN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgZmlsbF9jb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIHN0cm9rZV9jb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWxsX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHBJY2NUcmFuc2Zvcm0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQoreworICAgIFN0YXJ0UmVuZGVyaW5nKCk7CisgICAgaW50IGZpbGxfYWxwaGEgPSBGWEdFVEZMQUdfQ09MT1JUWVBFKGFscGhhX2ZsYWcpID8gRlhHRVRGTEFHX0FMUEhBX0ZJTEwoYWxwaGFfZmxhZykgOiBGWEFSR0JfQShmaWxsX2NvbG9yKTsKKyAgICBpbnQgc3Ryb2tlX2FscGhhID0gRlhHRVRGTEFHX0NPTE9SVFlQRShhbHBoYV9mbGFnKSA/IEZYR0VURkxBR19BTFBIQV9TVFJPS0UoYWxwaGFfZmxhZykgOiBGWEFSR0JfQShzdHJva2VfY29sb3IpOworICAgIGlmIChmaWxsX2FscGhhICYmIGZpbGxfYWxwaGEgPCAyNTUpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoc3Ryb2tlX2FscGhhICYmIHN0cm9rZV9hbHBoYSA8IDI1NSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChmaWxsX2FscGhhID09IDAgJiYgc3Ryb2tlX2FscGhhID09IDApIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpZiAoc3Ryb2tlX2FscGhhKSB7CisgICAgICAgIFNldEdyYXBoU3RhdGUocEdyYXBoU3RhdGUpOworICAgICAgICBpZiAocE9iamVjdDJEZXZpY2UpIHsKKyAgICAgICAgICAgIENGWF9CeXRlVGV4dEJ1ZiBidWY7CisgICAgICAgICAgICBidWYgPDwgRlhfQlNUUkMoIm14IENtIFsiKSA8PCBwT2JqZWN0MkRldmljZS0+YSA8PCBGWF9CU1RSQygiICIpIDw8IHBPYmplY3QyRGV2aWNlLT5iIDw8IEZYX0JTVFJDKCIgIikgPDwKKyAgICAgICAgICAgICAgICBwT2JqZWN0MkRldmljZS0+YyA8PCBGWF9CU1RSQygiICIpIDw8IHBPYmplY3QyRGV2aWNlLT5kIDw8IEZYX0JTVFJDKCIgIikgPDwgcE9iamVjdDJEZXZpY2UtPmUgPDwKKyAgICAgICAgICAgICAgICBGWF9CU1RSQygiICIpIDw8IHBPYmplY3QyRGV2aWNlLT5mIDw8IEZYX0JTVFJDKCJdY20gIik7CisgICAgICAgICAgICBtX3BPdXRwdXQtPk91dHB1dFBTKChGWF9MUENTVFIpYnVmLkdldEJ1ZmZlcigpLCBidWYuR2V0U2l6ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBPdXRwdXRQYXRoKHBQYXRoRGF0YSwgc3Ryb2tlX2FscGhhID8gTlVMTCA6IHBPYmplY3QyRGV2aWNlKTsKKyAgICBpZiAoZmlsbF9tb2RlICYmIGZpbGxfYWxwaGEpIHsKKyAgICAgICAgU2V0Q29sb3IoZmlsbF9jb2xvciwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSk7CisgICAgICAgIGlmICgoZmlsbF9tb2RlICYgMykgPT0gRlhGSUxMX1dJTkRJTkcpIHsKKyAgICAgICAgICAgIGlmIChzdHJva2VfYWxwaGEpIHsKKyAgICAgICAgICAgICAgICBPVVRQVVRfUFMoInEgZiBRICIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBPVVRQVVRfUFMoImYiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgoZmlsbF9tb2RlICYgMykgPT0gRlhGSUxMX0FMVEVSTkFURSkgeworICAgICAgICAgICAgaWYgKHN0cm9rZV9hbHBoYSkgeworICAgICAgICAgICAgICAgIE9VVFBVVF9QUygicSBGIFEgIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIE9VVFBVVF9QUygiRiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmIChzdHJva2VfYWxwaGEpIHsKKyAgICAgICAgU2V0Q29sb3Ioc3Ryb2tlX2NvbG9yLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtKTsKKyAgICAgICAgaWYgKHBPYmplY3QyRGV2aWNlKSB7CisgICAgICAgICAgICBPVVRQVVRfUFMoInMgc20iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE9VVFBVVF9QUygicyIpOworICAgICAgICB9CisgICAgfQorICAgIE9VVFBVVF9QUygiXG4iKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK3ZvaWQgQ0ZYX1BTUmVuZGVyZXI6OlNldEdyYXBoU3RhdGUoY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZSkKK3sKKyAgICBDRlhfQnl0ZVRleHRCdWYgYnVmOworICAgIGlmICghbV9iR3JhcGhTdGF0ZVNldCB8fCBtX0N1ckdyYXBoU3RhdGUubV9MaW5lQ2FwICE9IHBHcmFwaFN0YXRlLT5tX0xpbmVDYXApIHsKKyAgICAgICAgYnVmIDw8IHBHcmFwaFN0YXRlLT5tX0xpbmVDYXAgPDwgRlhfQlNUUkMoIiBKXG4iKTsKKyAgICB9CisgICAgaWYgKCFtX2JHcmFwaFN0YXRlU2V0IHx8IG1fQ3VyR3JhcGhTdGF0ZS5tX0Rhc2hDb3VudCAhPSBwR3JhcGhTdGF0ZS0+bV9EYXNoQ291bnQgfHwKKyAgICAgICAgICAgIEZYU1lTX21lbWNtcDMyKG1fQ3VyR3JhcGhTdGF0ZS5tX0Rhc2hBcnJheSwgcEdyYXBoU3RhdGUtPm1fRGFzaEFycmF5LCBzaXplb2YoRlhfRkxPQVQpKm1fQ3VyR3JhcGhTdGF0ZS5tX0Rhc2hDb3VudCkpIHsKKyAgICAgICAgYnVmIDw8IEZYX0JTVFJDKCJbIik7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcEdyYXBoU3RhdGUtPm1fRGFzaENvdW50OyBpICsrKSB7CisgICAgICAgICAgICBidWYgPDwgcEdyYXBoU3RhdGUtPm1fRGFzaEFycmF5W2ldIDw8IEZYX0JTVFJDKCIgIik7CisgICAgICAgIH0KKyAgICAgICAgYnVmIDw8IEZYX0JTVFJDKCJdIikgPDwgcEdyYXBoU3RhdGUtPm1fRGFzaFBoYXNlIDw8IEZYX0JTVFJDKCIgZFxuIik7CisgICAgfQorICAgIGlmICghbV9iR3JhcGhTdGF0ZVNldCB8fCBtX0N1ckdyYXBoU3RhdGUubV9MaW5lSm9pbiAhPSBwR3JhcGhTdGF0ZS0+bV9MaW5lSm9pbikgeworICAgICAgICBidWYgPDwgcEdyYXBoU3RhdGUtPm1fTGluZUpvaW4gPDwgRlhfQlNUUkMoIiBqXG4iKTsKKyAgICB9CisgICAgaWYgKCFtX2JHcmFwaFN0YXRlU2V0IHx8IG1fQ3VyR3JhcGhTdGF0ZS5tX0xpbmVXaWR0aCAhPSBwR3JhcGhTdGF0ZS0+bV9MaW5lV2lkdGgpIHsKKyAgICAgICAgYnVmIDw8IHBHcmFwaFN0YXRlLT5tX0xpbmVXaWR0aCA8PCBGWF9CU1RSQygiIHdcbiIpOworICAgIH0KKyAgICBpZiAoIW1fYkdyYXBoU3RhdGVTZXQgfHwgbV9DdXJHcmFwaFN0YXRlLm1fTWl0ZXJMaW1pdCAhPSBwR3JhcGhTdGF0ZS0+bV9NaXRlckxpbWl0KSB7CisgICAgICAgIGJ1ZiA8PCBwR3JhcGhTdGF0ZS0+bV9NaXRlckxpbWl0IDw8IEZYX0JTVFJDKCIgTVxuIik7CisgICAgfQorICAgIG1fQ3VyR3JhcGhTdGF0ZS5Db3B5KCpwR3JhcGhTdGF0ZSk7CisgICAgbV9iR3JhcGhTdGF0ZVNldCA9IFRSVUU7CisgICAgaWYgKGJ1Zi5HZXRTaXplKCkpIHsKKyAgICAgICAgbV9wT3V0cHV0LT5PdXRwdXRQUygoRlhfTFBDU1RSKWJ1Zi5HZXRCdWZmZXIoKSwgYnVmLkdldFNpemUoKSk7CisgICAgfQorfQorc3RhdGljIHZvaWQgRmF4Q29tcHJlc3NEYXRhKEZYX0xQQllURSBzcmNfYnVmLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEZYX0xQQllURSYgZGVzdF9idWYsIEZYX0RXT1JEJiBkZXN0X3NpemUpCit7CisgICAgQ0NvZGVjX01vZHVsZU1nciogcEVuY29kZXJzID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKTsKKyAgICBpZiAod2lkdGggKiBoZWlnaHQgPiAxMjggJiYgcEVuY29kZXJzICYmIHBFbmNvZGVycy0+R2V0RmF4TW9kdWxlKCktPkVuY29kZShzcmNfYnVmLCB3aWR0aCwgaGVpZ2h0LCAod2lkdGggKyA3KSAvIDgsIGRlc3RfYnVmLCBkZXN0X3NpemUpKSB7CisgICAgICAgIEZYX0ZyZWUoc3JjX2J1Zik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVzdF9idWYgPSBzcmNfYnVmOworICAgICAgICBkZXN0X3NpemUgPSAod2lkdGggKyA3KSAvIDggKiBoZWlnaHQ7CisgICAgfQorfQorc3RhdGljIHZvaWQgUFNDb21wcmVzc0RhdGEoaW50IFBTTGV2ZWwsIEZYX0xQQllURSBzcmNfYnVmLCBGWF9EV09SRCBzcmNfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0xQQllURSYgb3V0cHV0X2J1ZiwgRlhfRFdPUkQmIG91dHB1dF9zaXplLCBGWF9MUENTVFImIGZpbHRlcikKK3sKKyAgICBvdXRwdXRfYnVmID0gc3JjX2J1ZjsKKyAgICBvdXRwdXRfc2l6ZSA9IHNyY19zaXplOworICAgIGZpbHRlciA9ICIiOworICAgIGlmIChzcmNfc2l6ZSA8IDEwMjQpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDQ29kZWNfTW9kdWxlTWdyKiBwRW5jb2RlcnMgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpOworICAgIEZYX0xQQllURSBkZXN0X2J1ZiA9IE5VTEw7CisgICAgRlhfRFdPUkQgZGVzdF9zaXplID0gc3JjX3NpemU7CisgICAgaWYgKFBTTGV2ZWwgPj0gMykgeworICAgICAgICBpZiAocEVuY29kZXJzICYmIHBFbmNvZGVycy0+R2V0RmxhdGVNb2R1bGUoKS0+RW5jb2RlKHNyY19idWYsIHNyY19zaXplLCBkZXN0X2J1ZiwgZGVzdF9zaXplKSkgeworICAgICAgICAgICAgZmlsdGVyID0gIi9GbGF0ZURlY29kZSBmaWx0ZXIgIjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChwRW5jb2RlcnMgJiYgcEVuY29kZXJzLT5HZXRCYXNpY01vZHVsZSgpLT5SdW5MZW5ndGhFbmNvZGUoc3JjX2J1Ziwgc3JjX3NpemUsIGRlc3RfYnVmLCBkZXN0X3NpemUpKSB7CisgICAgICAgICAgICBmaWx0ZXIgPSAiL1J1bkxlbmd0aERlY29kZSBmaWx0ZXIgIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZGVzdF9zaXplIDwgc3JjX3NpemUpIHsKKyAgICAgICAgb3V0cHV0X2J1ZiA9IGRlc3RfYnVmOworICAgICAgICBvdXRwdXRfc2l6ZSA9IGRlc3Rfc2l6ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBmaWx0ZXIgPSBOVUxMOworICAgICAgICBpZiAoZGVzdF9idWYpIHsKKyAgICAgICAgICAgIEZYX0ZyZWUoZGVzdF9idWYpOworICAgICAgICB9CisgICAgfQorfQorRlhfQk9PTCBDRlhfUFNSZW5kZXJlcjo6U2V0RElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTb3VyY2UsIEZYX0RXT1JEIGNvbG9yLCBpbnQgbGVmdCwgaW50IHRvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSkKK3sKKyAgICBTdGFydFJlbmRlcmluZygpOworICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4KChGWF9GTE9BVCkocFNvdXJjZS0+R2V0V2lkdGgoKSksIDAuMGYsIDAuMGYsIC0oRlhfRkxPQVQpKHBTb3VyY2UtPkdldEhlaWdodCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlhfRkxPQVQpKGxlZnQpLCAoRlhfRkxPQVQpKHRvcCArIHBTb3VyY2UtPkdldEhlaWdodCgpKSk7CisgICAgcmV0dXJuIERyYXdESUJpdHMocFNvdXJjZSwgY29sb3IsICZtYXRyaXgsIDAsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOworfQorRlhfQk9PTCBDRlhfUFNSZW5kZXJlcjo6U3RyZXRjaERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwU291cmNlLCBGWF9EV09SRCBjb2xvciwgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0LCBGWF9EV09SRCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgU3RhcnRSZW5kZXJpbmcoKTsKKyAgICBDRlhfQWZmaW5lTWF0cml4IG1hdHJpeCgoRlhfRkxPQVQpKGRlc3Rfd2lkdGgpLCAwLjBmLCAwLjBmLCAoRlhfRkxPQVQpKC1kZXN0X2hlaWdodCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZYX0ZMT0FUKShkZXN0X2xlZnQpLCAoRlhfRkxPQVQpKGRlc3RfdG9wICsgZGVzdF9oZWlnaHQpKTsKKyAgICByZXR1cm4gRHJhd0RJQml0cyhwU291cmNlLCBjb2xvciwgJm1hdHJpeCwgZmxhZ3MsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOworfQorRlhfQk9PTCBDRlhfUFNSZW5kZXJlcjo6RHJhd0RJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwU291cmNlLCBGWF9EV09SRCBjb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgRlhfRFdPUkQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIFN0YXJ0UmVuZGVyaW5nKCk7CisgICAgaWYgKChwTWF0cml4LT5hID09IDAgJiYgcE1hdHJpeC0+YiA9PSAwKSB8fCAocE1hdHJpeC0+YyA9PSAwICYmIHBNYXRyaXgtPmQgPT0gMCkpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGlmIChwU291cmNlLT5IYXNBbHBoYSgpKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaW50IGFscGhhID0gRlhHRVRGTEFHX0NPTE9SVFlQRShhbHBoYV9mbGFnKSA/IEZYR0VURkxBR19BTFBIQV9GSUxMKGNvbG9yKSA6IEZYQVJHQl9BKGNvbG9yKTsKKyAgICBpZiAocFNvdXJjZS0+SXNBbHBoYU1hc2soKSAmJiAoYWxwaGEgPCAyNTUgfHwgcFNvdXJjZS0+R2V0QlBQKCkgIT0gMSkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBPVVRQVVRfUFMoInFcbiIpOworICAgIENGWF9CeXRlVGV4dEJ1ZiBidWY7CisgICAgYnVmIDw8IEZYX0JTVFJDKCJbIikgPDwgcE1hdHJpeC0+YSA8PCBGWF9CU1RSQygiICIpIDw8IHBNYXRyaXgtPmIgPDwgRlhfQlNUUkMoIiAiKSA8PAorICAgICAgICBwTWF0cml4LT5jIDw8IEZYX0JTVFJDKCIgIikgPDwgcE1hdHJpeC0+ZCA8PCBGWF9CU1RSQygiICIpIDw8IHBNYXRyaXgtPmUgPDwKKyAgICAgICAgRlhfQlNUUkMoIiAiKSA8PCBwTWF0cml4LT5mIDw8IEZYX0JTVFJDKCJdY20gIik7CisgICAgaW50IHdpZHRoID0gcFNvdXJjZS0+R2V0V2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gcFNvdXJjZS0+R2V0SGVpZ2h0KCk7CisgICAgYnVmIDw8IHdpZHRoIDw8IEZYX0JTVFJDKCIgIikgPDwgaGVpZ2h0OworICAgIGlmIChwU291cmNlLT5HZXRCUFAoKSA9PSAxICYmIHBTb3VyY2UtPkdldFBhbGV0dGUoKSA9PSBOVUxMKSB7CisgICAgICAgIGludCBwaXRjaCA9ICh3aWR0aCArIDcpIC8gODsKKyAgICAgICAgRlhfRFdPUkQgc3JjX3NpemUgPSBoZWlnaHQgKiBwaXRjaDsKKyAgICAgICAgRlhfTFBCWVRFIHNyY19idWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBzcmNfc2l6ZSk7CisgICAgICAgIGlmICghc3JjX2J1ZikgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7CisgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gcFNvdXJjZS0+R2V0U2NhbmxpbmUocm93KTsKKyAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKHNyY19idWYgKyByb3cgKiBwaXRjaCwgc3JjX3NjYW4sIHBpdGNoKTsKKyAgICAgICAgfQorICAgICAgICBGWF9MUEJZVEUgb3V0cHV0X2J1ZjsKKyAgICAgICAgRlhfRFdPUkQgb3V0cHV0X3NpemU7CisgICAgICAgIEZheENvbXByZXNzRGF0YShzcmNfYnVmLCB3aWR0aCwgaGVpZ2h0LCBvdXRwdXRfYnVmLCBvdXRwdXRfc2l6ZSk7CisgICAgICAgIGlmIChwU291cmNlLT5Jc0FscGhhTWFzaygpKSB7CisgICAgICAgICAgICBTZXRDb2xvcihjb2xvciwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSk7CisgICAgICAgICAgICBtX2JDb2xvclNldCA9IEZBTFNFOworICAgICAgICAgICAgYnVmIDw8IEZYX0JTVFJDKCIgdHJ1ZVsiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiIDFbIik7CisgICAgICAgIH0KKyAgICAgICAgYnVmIDw8IHdpZHRoIDw8IEZYX0JTVFJDKCIgMCAwIC0iKSA8PCBoZWlnaHQgPDwgRlhfQlNUUkMoIiAwICIpIDw8IGhlaWdodCA8PAorICAgICAgICAgICAgRlhfQlNUUkMoIl1jdXJyZW50ZmlsZS9BU0NJSTg1RGVjb2RlIGZpbHRlciAiKTsKKyAgICAgICAgaWYgKG91dHB1dF9idWYgIT0gc3JjX2J1ZikKKyAgICAgICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiPDwvSyAtMS9FbmRPZkJsb2NrIGZhbHNlL0NvbHVtbnMgIikgPDwgd2lkdGggPDwgRlhfQlNUUkMoIi9Sb3dzICIpIDw8IGhlaWdodCA8PAorICAgICAgICAgICAgICAgIEZYX0JTVFJDKCI+Pi9DQ0lUVEZheERlY29kZSBmaWx0ZXIgIik7CisgICAgICAgIGlmIChwU291cmNlLT5Jc0FscGhhTWFzaygpKSB7CisgICAgICAgICAgICBidWYgPDwgRlhfQlNUUkMoImlNXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiZmFsc2UgMSBjb2xvcmltYWdlXG4iKTsKKyAgICAgICAgfQorICAgICAgICBtX3BPdXRwdXQtPk91dHB1dFBTKChGWF9MUENTVFIpYnVmLkdldEJ1ZmZlcigpLCBidWYuR2V0U2l6ZSgpKTsKKyAgICAgICAgV3JpdGVQU0JpbmFyeShvdXRwdXRfYnVmLCBvdXRwdXRfc2l6ZSk7CisgICAgICAgIEZYX0ZyZWUob3V0cHV0X2J1Zik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQ0ZYX0RJQlNvdXJjZSogcENvbnZlcnRlZCA9IChDRlhfRElCU291cmNlKilwU291cmNlOworICAgICAgICBpZiAocEljY1RyYW5zZm9ybSkgeworICAgICAgICAgICAgRlhESUJfRm9ybWF0IGZvcm1hdCA9IG1fYkNteWtPdXRwdXQgPyBGWERJQl9DbXlrIDogRlhESUJfUmdiOworICAgICAgICAgICAgcENvbnZlcnRlZCA9IHBTb3VyY2UtPkNsb25lQ29udmVydChmb3JtYXQsIE5VTEwsIHBJY2NUcmFuc2Zvcm0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3dpdGNoIChwU291cmNlLT5HZXRGb3JtYXQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgRlhESUJfMWJwcFJnYjoKKyAgICAgICAgICAgICAgICBjYXNlIEZYRElCX1JnYjMyOgorICAgICAgICAgICAgICAgICAgICBwQ29udmVydGVkID0gcFNvdXJjZS0+Q2xvbmVDb252ZXJ0KEZYRElCX1JnYik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRlhESUJfOGJwcFJnYjoKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBTb3VyY2UtPkdldFBhbGV0dGUoKSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwQ29udmVydGVkID0gcFNvdXJjZS0+Q2xvbmVDb252ZXJ0KEZYRElCX1JnYik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGWERJQl8xYnBwQ215azoKKyAgICAgICAgICAgICAgICAgICAgcENvbnZlcnRlZCA9IHBTb3VyY2UtPkNsb25lQ29udmVydChGWERJQl9DbXlrKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGWERJQl84YnBwQ215azoKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBTb3VyY2UtPkdldFBhbGV0dGUoKSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwQ29udmVydGVkID0gcFNvdXJjZS0+Q2xvbmVDb252ZXJ0KEZYRElCX0NteWspOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChwQ29udmVydGVkID09IE5VTEwpIHsKKyAgICAgICAgICAgIE9VVFBVVF9QUygiXG5RXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBpbnQgQnBwID0gcENvbnZlcnRlZC0+R2V0QlBQKCkgLyA4OworICAgICAgICBGWF9MUEJZVEUgb3V0cHV0X2J1ZiA9IE5VTEw7CisgICAgICAgIEZYX1NUUlNJWkUgb3V0cHV0X3NpemUgPSAwOworICAgICAgICBGWF9MUENTVFIgZmlsdGVyID0gTlVMTDsKKyAgICAgICAgaWYgKGZsYWdzICYgRlhSRU5ERVJfSU1BR0VfTE9TU1kpIHsKKyAgICAgICAgICAgIENDb2RlY19Nb2R1bGVNZ3IqIHBFbmNvZGVycyA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCk7CisgICAgICAgICAgICBpZiAocEVuY29kZXJzICYmIHBFbmNvZGVycy0+R2V0SnBlZ01vZHVsZSgpLT5FbmNvZGUocENvbnZlcnRlZCwgb3V0cHV0X2J1Ziwgb3V0cHV0X3NpemUpKSB7CisgICAgICAgICAgICAgICAgZmlsdGVyID0gIi9EQ1REZWNvZGUgZmlsdGVyICI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZpbHRlciA9PSBOVUxMKSB7CisgICAgICAgICAgICBpbnQgc3JjX3BpdGNoID0gd2lkdGggKiBCcHA7CisgICAgICAgICAgICBvdXRwdXRfc2l6ZSA9IGhlaWdodCAqIHNyY19waXRjaDsKKyAgICAgICAgICAgIG91dHB1dF9idWYgPSBGWF9BbGxvYyhGWF9CWVRFLCBvdXRwdXRfc2l6ZSk7CisgICAgICAgICAgICBpZiAoIW91dHB1dF9idWYpIHsKKyAgICAgICAgICAgICAgICBpZiAocENvbnZlcnRlZCAhPSBwU291cmNlKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwQ29udmVydGVkOworICAgICAgICAgICAgICAgICAgICBwQ29udmVydGVkID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgICAgICBGWF9MUENCWVRFIHNyY19zY2FuID0gcENvbnZlcnRlZC0+R2V0U2NhbmxpbmUocm93KTsKKyAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gb3V0cHV0X2J1ZiArIHJvdyAqIHNyY19waXRjaDsKKyAgICAgICAgICAgICAgICBpZiAoQnBwID09IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgKmRlc3Rfc2NhbisrID0gc3JjX3NjYW5bMl07CisgICAgICAgICAgICAgICAgICAgICAgICAqZGVzdF9zY2FuKysgPSBzcmNfc2NhblsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpkZXN0X3NjYW4rKyA9ICpzcmNfc2NhbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihkZXN0X3NjYW4sIHNyY19zY2FuLCBzcmNfcGl0Y2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZYX0xQQllURSBjb21wcmVzc2VkX2J1ZjsKKyAgICAgICAgICAgIEZYX0RXT1JEIGNvbXByZXNzZWRfc2l6ZTsKKyAgICAgICAgICAgIFBTQ29tcHJlc3NEYXRhKG1fUFNMZXZlbCwgb3V0cHV0X2J1Ziwgb3V0cHV0X3NpemUsIGNvbXByZXNzZWRfYnVmLCBjb21wcmVzc2VkX3NpemUsIGZpbHRlcik7CisgICAgICAgICAgICBpZiAob3V0cHV0X2J1ZiAhPSBjb21wcmVzc2VkX2J1ZikgeworICAgICAgICAgICAgICAgIEZYX0ZyZWUob3V0cHV0X2J1Zik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRwdXRfYnVmID0gY29tcHJlc3NlZF9idWY7CisgICAgICAgICAgICBvdXRwdXRfc2l6ZSA9IGNvbXByZXNzZWRfc2l6ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocENvbnZlcnRlZCAhPSBwU291cmNlKSB7CisgICAgICAgICAgICBkZWxldGUgcENvbnZlcnRlZDsKKyAgICAgICAgICAgIHBDb252ZXJ0ZWQgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiIDhbIik7CisgICAgICAgIGJ1ZiA8PCB3aWR0aCA8PCBGWF9CU1RSQygiIDAgMCAtIikgPDwgaGVpZ2h0IDw8IEZYX0JTVFJDKCIgMCAiKSA8PCBoZWlnaHQgPDwgRlhfQlNUUkMoIl0iKTsKKyAgICAgICAgYnVmIDw8IEZYX0JTVFJDKCJjdXJyZW50ZmlsZS9BU0NJSTg1RGVjb2RlIGZpbHRlciAiKTsKKyAgICAgICAgaWYgKGZpbHRlcikgeworICAgICAgICAgICAgYnVmIDw8IGZpbHRlcjsKKyAgICAgICAgfQorICAgICAgICBidWYgPDwgRlhfQlNUUkMoImZhbHNlICIpIDw8IEJwcDsKKyAgICAgICAgYnVmIDw8IEZYX0JTVFJDKCIgY29sb3JpbWFnZVxuIik7CisgICAgICAgIG1fcE91dHB1dC0+T3V0cHV0UFMoKEZYX0xQQ1NUUilidWYuR2V0QnVmZmVyKCksIGJ1Zi5HZXRTaXplKCkpOworICAgICAgICBXcml0ZVBTQmluYXJ5KG91dHB1dF9idWYsIG91dHB1dF9zaXplKTsKKyAgICAgICAgRlhfRnJlZShvdXRwdXRfYnVmKTsKKyAgICB9CisgICAgT1VUUFVUX1BTKCJcblFcbiIpOworICAgIHJldHVybiBUUlVFOworfQordm9pZCBDRlhfUFNSZW5kZXJlcjo6U2V0Q29sb3IoRlhfRFdPUkQgY29sb3IsIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIGlmICghQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKSB8fCAhQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCkpIHsKKyAgICAgICAgcEljY1RyYW5zZm9ybSA9IE5VTEw7CisgICAgfQorICAgIEZYX0JPT0wgYkNNWUsgPSBGQUxTRTsKKyAgICBpZiAocEljY1RyYW5zZm9ybSkgeworICAgICAgICBJQ29kZWNfSWNjTW9kdWxlKiBwSWNjTW9kdWxlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCk7CisgICAgICAgIGNvbG9yID0gRlhHRVRGTEFHX0NPTE9SVFlQRShhbHBoYV9mbGFnKSA/IEZYQ01ZS19UT0RJQihjb2xvcikgOiBGWEFSR0JfVE9ESUIoY29sb3IpOworICAgICAgICBGWF9MUEJZVEUgcENvbG9yID0gKEZYX0xQQllURSkmY29sb3I7CisgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIHBDb2xvciwgcENvbG9yLCAxKTsKKyAgICAgICAgY29sb3IgPSBtX2JDbXlrT3V0cHV0ID8gRlhDTVlLX1RPRElCKGNvbG9yKSA6IEZYQVJHQl9UT0RJQihjb2xvcik7CisgICAgICAgIGJDTVlLID0gbV9iQ215a091dHB1dDsKKyAgICB9IGVsc2UgeworICAgICAgICBiQ01ZSyA9IEZYR0VURkxBR19DT0xPUlRZUEUoYWxwaGFfZmxhZyk7CisgICAgfQorICAgIGlmIChiQ01ZSyAhPSBtX2JDbXlrT3V0cHV0IHx8ICFtX2JDb2xvclNldCB8fCBtX0xhc3RDb2xvciAhPSBjb2xvcikgeworICAgICAgICBDRlhfQnl0ZVRleHRCdWYgYnVmOworICAgICAgICBpZiAoYkNNWUspIHsKKyAgICAgICAgICAgIGJ1ZiA8PCBGWFNZU19HZXRDVmFsdWUoY29sb3IpIC8gMjU1LjAgPDwgRlhfQlNUUkMoIiAiKSA8PCBGWFNZU19HZXRNVmFsdWUoY29sb3IpIC8gMjU1LjAgPDwgRlhfQlNUUkMoIiAiKQorICAgICAgICAgICAgICAgIDw8IEZYU1lTX0dldFlWYWx1ZShjb2xvcikgLyAyNTUuMCA8PCBGWF9CU1RSQygiICIpIDw8IEZYU1lTX0dldEtWYWx1ZShjb2xvcikgLyAyNTUuMCA8PCBGWF9CU1RSQygiIGtcbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnVmIDw8IEZYQVJHQl9SKGNvbG9yKSAvIDI1NS4wIDw8IEZYX0JTVFJDKCIgIikgPDwgRlhBUkdCX0coY29sb3IpIC8gMjU1LjAgPDwgRlhfQlNUUkMoIiAiKQorICAgICAgICAgICAgICAgIDw8IEZYQVJHQl9CKGNvbG9yKSAvIDI1NS4wIDw8IEZYX0JTVFJDKCIgcmdcbiIpOworICAgICAgICB9CisgICAgICAgIGlmIChiQ01ZSyA9PSBtX2JDbXlrT3V0cHV0KSB7CisgICAgICAgICAgICBtX2JDb2xvclNldCA9IFRSVUU7CisgICAgICAgICAgICBtX0xhc3RDb2xvciA9IGNvbG9yOworICAgICAgICB9CisgICAgICAgIG1fcE91dHB1dC0+T3V0cHV0UFMoKEZYX0xQQ1NUUilidWYuR2V0QnVmZmVyKCksIGJ1Zi5HZXRTaXplKCkpOworICAgIH0KK30KK3ZvaWQgQ0ZYX1BTUmVuZGVyZXI6OkZpbmRQU0ZvbnRHbHlwaChDRlhfRmFjZUNhY2hlKiBwRmFjZUNhY2hlLCBDRlhfRm9udCogcEZvbnQsIGNvbnN0IEZYVEVYVF9DSEFSUE9TJiBjaGFycG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgcHNfZm9udG51bSwgaW50ICZwc19nbHlwaGluZGV4KQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKGludCltX1BTRm9udExpc3QuR2V0U2l6ZSgpOyBpICsrKSB7CisgICAgICAgIENQU0ZvbnQqIHBQU0ZvbnQgPSBtX1BTRm9udExpc3RbaV07CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcFBTRm9udC0+bV9uR2x5cGhzOyBqICsrKQorICAgICAgICAgICAgaWYgKHBQU0ZvbnQtPm1fR2x5cGhzW2pdLm1fcEZvbnQgPT0gcEZvbnQgJiYgcFBTRm9udC0+bV9HbHlwaHNbal0ubV9HbHlwaEluZGV4ID09IGNoYXJwb3MubV9HbHlwaEluZGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKCghcFBTRm9udC0+bV9HbHlwaHNbal0ubV9iR2x5cGhBZGp1c3QgJiYgIWNoYXJwb3MubV9iR2x5cGhBZGp1c3QpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAocFBTRm9udC0+bV9HbHlwaHNbal0ubV9iR2x5cGhBZGp1c3QgJiYgY2hhcnBvcy5tX2JHbHlwaEFkanVzdCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIChGWFNZU19mYWJzKHBQU0ZvbnQtPm1fR2x5cGhzW2pdLm1fQWRqdXN0TWF0cml4WzBdIC0gY2hhcnBvcy5tX0FkanVzdE1hdHJpeFswXSkgPCAwLjAxICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgIEZYU1lTX2ZhYnMocFBTRm9udC0+bV9HbHlwaHNbal0ubV9BZGp1c3RNYXRyaXhbMV0gLSBjaGFycG9zLm1fQWRqdXN0TWF0cml4WzFdKSA8IDAuMDEgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRlhTWVNfZmFicyhwUFNGb250LT5tX0dseXBoc1tqXS5tX0FkanVzdE1hdHJpeFsyXSAtIGNoYXJwb3MubV9BZGp1c3RNYXRyaXhbMl0pIDwgMC4wMSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICBGWFNZU19mYWJzKHBQU0ZvbnQtPm1fR2x5cGhzW2pdLm1fQWRqdXN0TWF0cml4WzNdIC0gY2hhcnBvcy5tX0FkanVzdE1hdHJpeFszXSkgPCAwLjAxKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcHNfZm9udG51bSA9IGk7CisgICAgICAgICAgICAgICAgICAgIHBzX2dseXBoaW5kZXggPSBqOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9QU0ZvbnRMaXN0LkdldFNpemUoKSA9PSAwIHx8IG1fUFNGb250TGlzdFttX1BTRm9udExpc3QuR2V0U2l6ZSgpIC0gMV0tPm1fbkdseXBocyA9PSAyNTYpIHsKKyAgICAgICAgQ1BTRm9udCogcFBTRm9udCA9IEZYX05FVyBDUFNGb250OworICAgICAgICBpZiAoIXBQU0ZvbnQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBwUFNGb250LT5tX25HbHlwaHMgPSAwOworICAgICAgICBtX1BTRm9udExpc3QuQWRkKHBQU0ZvbnQpOworICAgICAgICBDRlhfQnl0ZVRleHRCdWYgYnVmOworICAgICAgICBidWYgPDwgRlhfQlNUUkMoIjggZGljdCBiZWdpbi9Gb250VHlwZSAzIGRlZi9Gb250TWF0cml4WzEgMCAwIDEgMCAwXWRlZlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIi9Gb250QkJveFswIDAgMCAwXWRlZi9FbmNvZGluZyAyNTYgYXJyYXkgZGVmIDAgMSAyNTV7RW5jb2RpbmcgZXhjaC8ubm90ZGVmIHB1dH1mb3JcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIvQ2hhclByb2NzIDEgZGljdCBkZWYgQ2hhclByb2NzIGJlZ2luLy5ub3RkZWYge30gZGVmIGVuZFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgIi9CdWlsZEdseXBoezEgMCAtMTAgLTEwIDEwIDEwIHNldGNhY2hlZGV2aWNlIGV4Y2gvQ2hhclByb2NzIGdldCBleGNoIDIgY29weSBrbm93biBub3R7cG9wLy5ub3RkZWZ9aWYgZ2V0IGV4ZWN9YmluZCBkZWZcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICIvQnVpbGRDaGFyezEgaW5kZXgvRW5jb2RpbmcgZ2V0IGV4Y2ggZ2V0IDEgaW5kZXgvQnVpbGRHbHlwaCBnZXQgZXhlY31iaW5kIGRlZlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgImN1cnJlbnRkaWN0IGVuZFxuIik7CisgICAgICAgIGJ1ZiA8PCBGWF9CU1RSQygiL1giKSA8PCBtX1BTRm9udExpc3QuR2V0U2l6ZSgpIC0gMSA8PCBGWF9CU1RSQygiIGV4Y2ggZGVmaW5lZm9udCBwb3BcbiIpOworICAgICAgICBtX3BPdXRwdXQtPk91dHB1dFBTKChGWF9MUENTVFIpYnVmLkdldEJ1ZmZlcigpLCBidWYuR2V0U2l6ZSgpKTsKKyAgICAgICAgYnVmLkNsZWFyKCk7CisgICAgfQorICAgIHBzX2ZvbnRudW0gPSBtX1BTRm9udExpc3QuR2V0U2l6ZSgpIC0gMTsKKyAgICBDUFNGb250KiBwUFNGb250ID0gbV9QU0ZvbnRMaXN0W3BzX2ZvbnRudW1dOworICAgIHBzX2dseXBoaW5kZXggPSBwUFNGb250LT5tX25HbHlwaHM7CisgICAgcFBTRm9udC0+bV9HbHlwaHNbcHNfZ2x5cGhpbmRleF0ubV9HbHlwaEluZGV4ID0gY2hhcnBvcy5tX0dseXBoSW5kZXg7CisgICAgcFBTRm9udC0+bV9HbHlwaHNbcHNfZ2x5cGhpbmRleF0ubV9wRm9udCA9IHBGb250OworICAgIHBQU0ZvbnQtPm1fR2x5cGhzW3BzX2dseXBoaW5kZXhdLm1fYkdseXBoQWRqdXN0ID0gY2hhcnBvcy5tX2JHbHlwaEFkanVzdDsKKyAgICBpZiAoY2hhcnBvcy5tX2JHbHlwaEFkanVzdCkgeworICAgICAgICBwUFNGb250LT5tX0dseXBoc1twc19nbHlwaGluZGV4XS5tX0FkanVzdE1hdHJpeFswXSA9IGNoYXJwb3MubV9BZGp1c3RNYXRyaXhbMF07CisgICAgICAgIHBQU0ZvbnQtPm1fR2x5cGhzW3BzX2dseXBoaW5kZXhdLm1fQWRqdXN0TWF0cml4WzFdID0gY2hhcnBvcy5tX0FkanVzdE1hdHJpeFsxXTsKKyAgICAgICAgcFBTRm9udC0+bV9HbHlwaHNbcHNfZ2x5cGhpbmRleF0ubV9BZGp1c3RNYXRyaXhbMl0gPSBjaGFycG9zLm1fQWRqdXN0TWF0cml4WzJdOworICAgICAgICBwUFNGb250LT5tX0dseXBoc1twc19nbHlwaGluZGV4XS5tX0FkanVzdE1hdHJpeFszXSA9IGNoYXJwb3MubV9BZGp1c3RNYXRyaXhbM107CisgICAgfQorICAgIHBQU0ZvbnQtPm1fbkdseXBocyArKzsKKyAgICBDRlhfQWZmaW5lTWF0cml4IG1hdHJpeDsKKyAgICBpZiAoY2hhcnBvcy5tX2JHbHlwaEFkanVzdCkKKyAgICAgICAgbWF0cml4LlNldChjaGFycG9zLm1fQWRqdXN0TWF0cml4WzBdLCBjaGFycG9zLm1fQWRqdXN0TWF0cml4WzFdLAorICAgICAgICAgICAgICAgICAgIGNoYXJwb3MubV9BZGp1c3RNYXRyaXhbMl0sIGNoYXJwb3MubV9BZGp1c3RNYXRyaXhbM10sIDAsIDApOworICAgIG1hdHJpeC5Db25jYXQoMS4wZiwgMCwgMCwgMS4wZiwgMCwgMCk7CisgICAgY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEgPSBwRmFjZUNhY2hlLT5Mb2FkR2x5cGhQYXRoKHBGb250LCBjaGFycG9zLm1fR2x5cGhJbmRleCwgY2hhcnBvcy5tX0ZvbnRDaGFyV2lkdGgpOworICAgIGlmIChwUGF0aERhdGEgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIENGWF9QYXRoRGF0YSBUcmFuc2Zvcm1lZFBhdGgoKnBQYXRoRGF0YSk7CisgICAgaWYgKGNoYXJwb3MubV9iR2x5cGhBZGp1c3QpIHsKKyAgICAgICAgVHJhbnNmb3JtZWRQYXRoLlRyYW5zZm9ybSgmbWF0cml4KTsKKyAgICB9CisgICAgQ0ZYX0J5dGVUZXh0QnVmIGJ1ZjsKKyAgICBidWYgPDwgRlhfQlNUUkMoIi9YIikgPDwgcHNfZm9udG51bSA8PCBGWF9CU1RSQygiIEZmL0NoYXJQcm9jcyBnZXQgYmVnaW4vIikKKyAgICAgICAgPDwgcHNfZ2x5cGhpbmRleCA8PCBGWF9CU1RSQygieyIpOworICAgIGJ1ZiA8PCBGWF9CU1RSQygibiAiKTsKKyAgICBmb3IgKGludCBwID0gMDsgcCA8IFRyYW5zZm9ybWVkUGF0aC5HZXRQb2ludENvdW50KCk7IHAgKyspIHsKKyAgICAgICAgRlhfRkxPQVQgeCA9IFRyYW5zZm9ybWVkUGF0aC5HZXRQb2ludFgocCksIHkgPSBUcmFuc2Zvcm1lZFBhdGguR2V0UG9pbnRZKHApOworICAgICAgICBzd2l0Y2ggKFRyYW5zZm9ybWVkUGF0aC5HZXRGbGFnKHApICYgRlhQVF9UWVBFKSB7CisgICAgICAgICAgICBjYXNlIEZYUFRfTU9WRVRPOiB7CisgICAgICAgICAgICAgICAgICAgIGJ1ZiA8PCB4IDw8IEZYX0JTVFJDKCIgIikgPDwgeSA8PCBGWF9CU1RSQygiIG1cbiIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEZYUFRfTElORVRPOiB7CisgICAgICAgICAgICAgICAgICAgIGJ1ZiA8PCB4IDw8IEZYX0JTVFJDKCIgIikgPDwgeSA8PCBGWF9CU1RSQygiIGxcbiIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEZYUFRfQkVaSUVSVE86IHsKKyAgICAgICAgICAgICAgICAgICAgYnVmIDw8IHggPDwgRlhfQlNUUkMoIiAiKSA8PCB5IDw8IEZYX0JTVFJDKCIgIikKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8IFRyYW5zZm9ybWVkUGF0aC5HZXRQb2ludFgocCArIDEpIDw8IEZYX0JTVFJDKCIgIikKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8IFRyYW5zZm9ybWVkUGF0aC5HZXRQb2ludFkocCArIDEpIDw8IEZYX0JTVFJDKCIgIikKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8IFRyYW5zZm9ybWVkUGF0aC5HZXRQb2ludFgocCArIDIpIDw8IEZYX0JTVFJDKCIgIikKKyAgICAgICAgICAgICAgICAgICAgICAgIDw8IFRyYW5zZm9ybWVkUGF0aC5HZXRQb2ludFkocCArIDIpIDw8IEZYX0JTVFJDKCIgY1xuIik7CisgICAgICAgICAgICAgICAgICAgIHAgKz0gMjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGJ1ZiA8PCBGWF9CU1RSQygiZiIpOworICAgIGJ1ZiA8PCBGWF9CU1RSQygifWJpbmQgZGVmIGVuZFxuIik7CisgICAgYnVmIDw8IEZYX0JTVFJDKCIvWCIpIDw8IHBzX2ZvbnRudW0gPDwgRlhfQlNUUkMoIiBGZi9FbmNvZGluZyBnZXQgIikgPDwgcHNfZ2x5cGhpbmRleAorICAgICAgICA8PCBGWF9CU1RSQygiLyIpIDw8IHBzX2dseXBoaW5kZXggPDwgRlhfQlNUUkMoIiBwdXRcbiIpOworICAgIG1fcE91dHB1dC0+T3V0cHV0UFMoKEZYX0xQQ1NUUilidWYuR2V0QnVmZmVyKCksIGJ1Zi5HZXRTaXplKCkpOworfQorRlhfQk9PTCBDRlhfUFNSZW5kZXJlcjo6RHJhd1RleHQoaW50IG5DaGFycywgY29uc3QgRlhURVhUX0NIQVJQT1MqIHBDaGFyUG9zLCBDRlhfRm9udCogcEZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlhfRm9udENhY2hlKiBwQ2FjaGUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQgZm9udF9zaXplLCBGWF9EV09SRCBjb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIFN0YXJ0UmVuZGVyaW5nKCk7CisgICAgaW50IGFscGhhID0gRlhHRVRGTEFHX0NPTE9SVFlQRShhbHBoYV9mbGFnKSA/IEZYR0VURkxBR19BTFBIQV9GSUxMKGFscGhhX2ZsYWcpIDogRlhBUkdCX0EoY29sb3IpOworICAgIGlmIChhbHBoYSA8IDI1NSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmICgocE9iamVjdDJEZXZpY2UtPmEgPT0gMCAmJiBwT2JqZWN0MkRldmljZS0+YiA9PSAwKSB8fCAocE9iamVjdDJEZXZpY2UtPmMgPT0gMCAmJiBwT2JqZWN0MkRldmljZS0+ZCA9PSAwKSkgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgU2V0Q29sb3IoY29sb3IsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOworICAgIENGWF9CeXRlVGV4dEJ1ZiBidWY7CisgICAgYnVmIDw8IEZYX0JTVFJDKCJxWyIpIDw8IHBPYmplY3QyRGV2aWNlLT5hIDw8IEZYX0JTVFJDKCIgIikgPDwgcE9iamVjdDJEZXZpY2UtPmIgPDwgRlhfQlNUUkMoIiAiKQorICAgICAgICA8PCBwT2JqZWN0MkRldmljZS0+YyA8PCBGWF9CU1RSQygiICIpIDw8IHBPYmplY3QyRGV2aWNlLT5kOworICAgIGJ1ZiA8PCBGWF9CU1RSQygiICIpIDw8IHBPYmplY3QyRGV2aWNlLT5lIDw8IEZYX0JTVFJDKCIgIikgPDwgcE9iamVjdDJEZXZpY2UtPmYgPDwgIl1jbVxuIjsKKyAgICBpZiAocENhY2hlID09IE5VTEwpIHsKKyAgICAgICAgcENhY2hlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Rm9udENhY2hlKCk7CisgICAgfQorICAgIENGWF9GYWNlQ2FjaGUqIHBGYWNlQ2FjaGUgPSBwQ2FjaGUtPkdldENhY2hlZEZhY2UocEZvbnQpOworICAgIEZYX0ZPTlRDQUNIRV9ERUZJTkUocENhY2hlLCBwRm9udCk7CisgICAgaW50IGxhc3RfZm9udG51bSA9IC0xOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbkNoYXJzOyBpICsrKSB7CisgICAgICAgIGludCBwc19mb250bnVtLCBwc19nbHlwaGluZGV4OworICAgICAgICBGaW5kUFNGb250R2x5cGgocEZhY2VDYWNoZSwgcEZvbnQsIHBDaGFyUG9zW2ldLCBwc19mb250bnVtLCBwc19nbHlwaGluZGV4KTsKKyAgICAgICAgaWYgKGxhc3RfZm9udG51bSAhPSBwc19mb250bnVtKSB7CisgICAgICAgICAgICBidWYgPDwgRlhfQlNUUkMoIi9YIikgPDwgcHNfZm9udG51bSA8PCBGWF9CU1RSQygiIEZmICIpIDw8IGZvbnRfc2l6ZQorICAgICAgICAgICAgICAgIDw8IEZYX0JTVFJDKCIgRnMgU2YgIik7CisgICAgICAgICAgICBsYXN0X2ZvbnRudW0gPSBwc19mb250bnVtOworICAgICAgICB9CisgICAgICAgIGJ1ZiA8PCBwQ2hhclBvc1tpXS5tX09yaWdpblggPDwgRlhfQlNUUkMoIiAiKQorICAgICAgICAgICAgPDwgcENoYXJQb3NbaV0ubV9PcmlnaW5ZIDw8IEZYX0JTVFJDKCIgbSIpOworICAgICAgICBDRlhfQnl0ZVN0cmluZyBoZXg7CisgICAgICAgIGhleC5Gb3JtYXQoIjwlMDJYPiIsIHBzX2dseXBoaW5kZXgpOworICAgICAgICBidWYgPDwgaGV4IDw8IEZYX0JTVFJDKCJUalxuIik7CisgICAgfQorICAgIGJ1ZiA8PCBGWF9CU1RSQygiUVxuIik7CisgICAgbV9wT3V0cHV0LT5PdXRwdXRQUygoRlhfTFBDU1RSKWJ1Zi5HZXRCdWZmZXIoKSwgYnVmLkdldFNpemUoKSk7CisgICAgcmV0dXJuIFRSVUU7Cit9Cit2b2lkIENGWF9QU1JlbmRlcmVyOjpXcml0ZVBTQmluYXJ5KEZYX0xQQ0JZVEUgZGF0YSwgaW50IGxlbikKK3sKKyAgICBGWF9MUEJZVEUgZGVzdF9idWY7CisgICAgRlhfRFdPUkQgZGVzdF9zaXplOworICAgIENDb2RlY19Nb2R1bGVNZ3IqIHBFbmNvZGVycyA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldENvZGVjTW9kdWxlKCk7CisgICAgaWYgKHBFbmNvZGVycyAmJiBwRW5jb2RlcnMtPkdldEJhc2ljTW9kdWxlKCktPkE4NUVuY29kZShkYXRhLCBsZW4sIGRlc3RfYnVmLCBkZXN0X3NpemUpKSB7CisgICAgICAgIG1fcE91dHB1dC0+T3V0cHV0UFMoKEZYX0xQQ1NUUilkZXN0X2J1ZiwgZGVzdF9zaXplKTsKKyAgICAgICAgRlhfRnJlZShkZXN0X2J1Zik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wT3V0cHV0LT5PdXRwdXRQUygoRlhfTFBDU1RSKWRhdGEsIGxlbik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS9nZS9meF9nZV90ZXh0LmNwcCBiL2NvcmUvc3JjL2Z4Z2UvZ2UvZnhfZ2VfdGV4dC5jcHAKaW5kZXggOTJmNjMxZS4uNDBhY2M1ZiAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhnZS9nZS9meF9nZV90ZXh0LmNwcAorKysgYi9jb3JlL3NyYy9meGdlL2dlL2Z4X2dlX3RleHQuY3BwCkBAIC0xLDE3NzQgKzEsMTc3NCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZS5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZnJlZXR5cGUuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgiDQotI2luY2x1ZGUgInRleHRfaW50LmgiDQotI3VuZGVmIEZYX0dBTU1BDQotI3VuZGVmIEZYX0dBTU1BX0lOVkVSU0UNCi0jZGVmaW5lIEZYX0dBTU1BKHZhbHVlKQkJCSh2YWx1ZSkNCi0jZGVmaW5lIEZYX0dBTU1BX0lOVkVSU0UodmFsdWUpCSh2YWx1ZSkNCi1GWF9SRUNUIEZYR0VfR2V0R2x5cGhzQkJveChGWFRFWFRfR0xZUEhQT1MqIHBHbHlwaEFuZFBvcywgaW50IG5DaGFycywgaW50IGFudGlfYWxpYXMsIEZYX0ZMT0FUIHJldGluYVNjYWxlWCwgRlhfRkxPQVQgcmV0aW5hU2NhbGVZKQ0KLXsNCi0gICAgRlhfUkVDVCByZWN0KDAsIDAsIDAsIDApOw0KLSAgICBGWF9CT09MIGJTdGFydGVkID0gRkFMU0U7DQotICAgIGZvciAoaW50IGlDaGFyID0gMDsgaUNoYXIgPCBuQ2hhcnM7IGlDaGFyICsrKSB7DQotICAgICAgICBGWFRFWFRfR0xZUEhQT1MmIGdseXBoID0gcEdseXBoQW5kUG9zW2lDaGFyXTsNCi0gICAgICAgIGNvbnN0IENGWF9HbHlwaEJpdG1hcCogcEdseXBoID0gZ2x5cGgubV9wR2x5cGg7DQotICAgICAgICBpZiAocEdseXBoID09IE5VTEwpIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBjaGFyX2xlZnQgPSBnbHlwaC5tX09yaWdpblggKyBwR2x5cGgtPm1fTGVmdDsNCi0gICAgICAgIGludCBjaGFyX3dpZHRoID0gKGludCkocEdseXBoLT5tX0JpdG1hcC5HZXRXaWR0aCgpIC8gcmV0aW5hU2NhbGVYKTsNCi0gICAgICAgIGlmIChhbnRpX2FsaWFzID09IEZYRlRfUkVOREVSX01PREVfTENEKSB7DQotICAgICAgICAgICAgY2hhcl93aWR0aCAvPSAzOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW50IGNoYXJfcmlnaHQgPSBjaGFyX2xlZnQgKyBjaGFyX3dpZHRoOw0KLSAgICAgICAgaW50IGNoYXJfdG9wID0gZ2x5cGgubV9PcmlnaW5ZIC0gcEdseXBoLT5tX1RvcDsNCi0gICAgICAgIGludCBjaGFyX2JvdHRvbSA9IGNoYXJfdG9wICsgKGludCkocEdseXBoLT5tX0JpdG1hcC5HZXRIZWlnaHQoKSAvIHJldGluYVNjYWxlWSk7DQotICAgICAgICBpZiAoIWJTdGFydGVkKSB7DQotICAgICAgICAgICAgcmVjdC5sZWZ0ID0gY2hhcl9sZWZ0Ow0KLSAgICAgICAgICAgIHJlY3QucmlnaHQgPSBjaGFyX3JpZ2h0Ow0KLSAgICAgICAgICAgIHJlY3QudG9wID0gY2hhcl90b3A7DQotICAgICAgICAgICAgcmVjdC5ib3R0b20gPSBjaGFyX2JvdHRvbTsNCi0gICAgICAgICAgICBiU3RhcnRlZCA9IFRSVUU7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlmIChyZWN0LmxlZnQgPiBjaGFyX2xlZnQpIHsNCi0gICAgICAgICAgICAgICAgcmVjdC5sZWZ0ID0gY2hhcl9sZWZ0Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAocmVjdC5yaWdodCA8IGNoYXJfcmlnaHQpIHsNCi0gICAgICAgICAgICAgICAgcmVjdC5yaWdodCA9IGNoYXJfcmlnaHQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChyZWN0LnRvcCA+IGNoYXJfdG9wKSB7DQotICAgICAgICAgICAgICAgIHJlY3QudG9wID0gY2hhcl90b3A7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChyZWN0LmJvdHRvbSA8IGNoYXJfYm90dG9tKSB7DQotICAgICAgICAgICAgICAgIHJlY3QuYm90dG9tID0gY2hhcl9ib3R0b207DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiByZWN0Ow0KLX0NCi1zdGF0aWMgdm9pZCBfQWRqdXN0R2x5cGhTcGFjZShGWFRFWFRfR0xZUEhQT1MqIHBHbHlwaEFuZFBvcywgaW50IG5DaGFycykNCi17DQotICAgIEFTU0VSVChuQ2hhcnMgPiAxKTsNCi0gICAgRlhfQk9PTCBiVmVydGljYWwgPSBGQUxTRTsNCi0gICAgaWYgKHBHbHlwaEFuZFBvc1tuQ2hhcnMgLSAxXS5tX09yaWdpblggPT0gcEdseXBoQW5kUG9zWzBdLm1fT3JpZ2luWCkgew0KLSAgICAgICAgYlZlcnRpY2FsID0gVFJVRTsNCi0gICAgfSBlbHNlIGlmIChwR2x5cGhBbmRQb3NbbkNoYXJzIC0gMV0ubV9PcmlnaW5ZICE9IHBHbHlwaEFuZFBvc1swXS5tX09yaWdpblkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpbnQgaSA9IG5DaGFycyAtIDE7DQotICAgIGludCogbmV4dF9vcmlnaW4gPSBiVmVydGljYWwgPyAmcEdseXBoQW5kUG9zW2ldLm1fT3JpZ2luWSA6ICZwR2x5cGhBbmRQb3NbaV0ubV9PcmlnaW5YOw0KLSAgICBGWF9GTE9BVCBuZXh0X29yaWdpbl9mID0gYlZlcnRpY2FsID8gcEdseXBoQW5kUG9zW2ldLm1fZk9yaWdpblkgOiBwR2x5cGhBbmRQb3NbaV0ubV9mT3JpZ2luWDsNCi0gICAgZm9yIChpIC0tOyBpID4gMDsgaSAtLSkgew0KLSAgICAgICAgaW50KiB0aGlzX29yaWdpbiA9IGJWZXJ0aWNhbCA/ICZwR2x5cGhBbmRQb3NbaV0ubV9PcmlnaW5ZIDogJnBHbHlwaEFuZFBvc1tpXS5tX09yaWdpblg7DQotICAgICAgICBGWF9GTE9BVCB0aGlzX29yaWdpbl9mID0gYlZlcnRpY2FsID8gcEdseXBoQW5kUG9zW2ldLm1fZk9yaWdpblkgOiBwR2x5cGhBbmRQb3NbaV0ubV9mT3JpZ2luWDsNCi0gICAgICAgIGludCBzcGFjZSA9ICgqbmV4dF9vcmlnaW4pIC0gKCp0aGlzX29yaWdpbik7DQotICAgICAgICBGWF9GTE9BVCBzcGFjZV9mID0gbmV4dF9vcmlnaW5fZiAtIHRoaXNfb3JpZ2luX2Y7DQotICAgICAgICBGWF9GTE9BVCBlcnJvciA9IChGWF9GTE9BVCkoRlhTWVNfZmFicyhzcGFjZV9mKSAtIEZYU1lTX2ZhYnMoKEZYX0ZMT0FUKShzcGFjZSkpKTsNCi0gICAgICAgIGlmIChlcnJvciA+IDAuNWYpIHsNCi0gICAgICAgICAgICAqdGhpc19vcmlnaW4gKz0gc3BhY2UgPiAwID8gLTEgOiAxOw0KLSAgICAgICAgfQ0KLSAgICAgICAgbmV4dF9vcmlnaW4gPSB0aGlzX29yaWdpbjsNCi0gICAgICAgIG5leHRfb3JpZ2luX2YgPSB0aGlzX29yaWdpbl9mOw0KLSAgICB9DQotfQ0KLXN0YXRpYyBjb25zdCBGWF9CWVRFIGdfR2RpcEdhbW1hX2Jnd1s5XSA9IHswLCAwLCA2MywgMTIwLCAwLCAxNjgsIDIxMCwgMjM5LCAyNTV9Ow0KLXN0YXRpYyBjb25zdCBGWF9CWVRFIGdfR2RpcEdhbW1hX2Znd1s5XSA9IHswLCAwLCAxNiwgNDUsIDAsIDg3LCAxMzUsIDE5MiwgMjU1fTsNCi1zdGF0aWMgY29uc3QgRlhfQllURSBnX0dkaXBHYW1tYUFkanVzdF80N1s0OF0gPSB7DQotICAgIDAsIDMwLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOCwgMzksIDM5LCA0MCwgNDAsIDQwLCA0MSwgNDEsIDQxLCA0MiwgNDIsIDQyLCA0MiwgNDMsDQotICAgIDQzLCA0MywgNDMsIDQzLCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDYsDQotICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0Nw0KLX07DQotc3RhdGljIGNvbnN0IEZYX0JZVEUgZ19HZGlwR2FtbWFBZGp1c3RfNzVbNzZdID0gew0KLSAgICAwLCA0NiwgNTAsIDUyLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjAsIDYxLCA2MSwgNjIsIDYyLCA2MywgNjMsIDY0LCA2NCwgNjQsIDY1LA0KLSAgICA2NSwgNjUsIDY2LCA2NiwgNjYsIDY3LCA2NywgNjcsIDY3LCA2OCwgNjgsIDY4LCA2OCwgNjgsIDY5LCA2OSwgNjksIDY5LCA2OSwgNzAsIDcwLCA3MCwNCi0gICAgNzAsIDcwLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MiwgNzIsIDcyLCA3MiwgNzIsIDcyLCA3MiwgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsDQotICAgIDczLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc1DQotfTsNCi1zdGF0aWMgY29uc3QgRlhfQllURSBnX0dkaXBHYW1tYUFkanVzdF84MVs4Ml0gPSB7DQotICAgIDAsIDQ5LCA1MywgNTYsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjUsIDY2LCA2NiwgNjcsIDY3LCA2OCwgNjgsIDY5LCA2OSwgNjksIDcwLCA3MCwgNzAsDQotICAgIDcxLCA3MSwgNzEsIDcyLCA3MiwgNzIsIDcyLCA3MywgNzMsIDczLCA3MywgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NSwgNzUsIDc1LCA3NSwgNzUsIDc2LCA3NiwgNzYsIDc2LA0KLSAgICA3NiwgNzYsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDgwLA0KLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODENCi19Ow0KLXN0YXRpYyB2b2lkIF9BZGp1c3RfYWxwaGEoaW50IGJhY2tncm91bmQsIGludCBmb3JlZ3JvdW5kLCBpbnQmIHNyY19hbHBoYSwgaW50IHRleHRfZmxhZ3MsIGludCBhKQ0KLXsNCi19DQotc3RhdGljIGNvbnN0IEZYX0JZVEUgZ19UZXh0R2FtbWFBZGp1c3RbMjU2XSA9IHsNCi0gICAgMCwgMiwgMywgNCwgNiwgNywgOCwgMTAsIDExLCAxMiwgMTMsIDE1LCAxNiwgMTcsIDE4LCAxOSwNCi0gICAgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzgsDQotICAgIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTEsIDUyLCA1MywgNTQsIDU1LA0KLSAgICA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcxLCA3MiwNCi0gICAgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywgODgsDQotICAgIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTcsIDk4LCA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsDQotICAgIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwgMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwNCi0gICAgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LCAxMjgsIDEyOSwgMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LA0KLSAgICAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywgMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsDQotICAgIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTYsIDE1NywgMTU4LCAxNTksIDE2MCwgMTYxLCAxNjIsIDE2MywgMTY0LCAxNjUsIDE2NiwNCi0gICAgMTY3LCAxNjgsIDE2OSwgMTcwLCAxNzEsIDE3MiwgMTczLCAxNzQsIDE3NCwgMTc1LCAxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLA0KLSAgICAxODIsIDE4MywgMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTAsIDE5MSwgMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsDQotICAgIDE5NywgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDQsIDIwNSwgMjA2LCAyMDcsIDIwOCwgMjA5LCAyMTAsIDIxMSwNCi0gICAgMjEyLCAyMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEsIDIyMiwgMjIzLCAyMjQsIDIyNSwgMjI2LA0KLSAgICAyMjcsIDIyOCwgMjI4LCAyMjksIDIzMCwgMjMxLCAyMzIsIDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwgMjM5LCAyNDAsDQotICAgIDI0MSwgMjQyLCAyNDMsIDI0NCwgMjQ1LCAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NSwNCi19Ow0KLSNkZWZpbmUgQURKVVNUX0FMUEhBKGJhY2tncm91bmQsIGZvcmVncm91bmQsIHNyY19hbHBoYSwgdGV4dF9mbGFncywgYSkgXA0KLSAgICBzcmNfYWxwaGEgPSBnX1RleHRHYW1tYUFkanVzdFsoRlhfQllURSlzcmNfYWxwaGFdOw0KLXZvaWQgX0NvbG9yMkFyZ2IoRlhfQVJHQiYgYXJnYiwgRlhfRFdPUkQgY29sb3IsIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQ0KLXsNCi0gICAgaWYgKHBJY2NUcmFuc2Zvcm0gPT0gTlVMTCAmJiAhRlhHRVRGTEFHX0NPTE9SVFlQRShhbHBoYV9mbGFnKSkgew0KLSAgICAgICAgYXJnYiA9IGNvbG9yOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmICghQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKSB8fCAhQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCkpIHsNCi0gICAgICAgIHBJY2NUcmFuc2Zvcm0gPSBOVUxMOw0KLSAgICB9DQotICAgIEZYX0JZVEUgYmdyYVs0XTsNCi0gICAgaWYgKHBJY2NUcmFuc2Zvcm0pIHsNCi0gICAgICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsNCi0gICAgICAgIGNvbG9yID0gRlhHRVRGTEFHX0NPTE9SVFlQRShhbHBoYV9mbGFnKSA/IEZYQ01ZS19UT0RJQihjb2xvcikgOiBGWEFSR0JfVE9ESUIoY29sb3IpOw0KLSAgICAgICAgcEljY01vZHVsZS0+VHJhbnNsYXRlU2NhbmxpbmUocEljY1RyYW5zZm9ybSwgYmdyYSwgKEZYX0xQQ0JZVEUpJmNvbG9yLCAxKTsNCi0gICAgICAgIGJncmFbM10gPSBGWEdFVEZMQUdfQ09MT1JUWVBFKGFscGhhX2ZsYWcpID8NCi0gICAgICAgICAgICAgICAgICAoYWxwaGFfZmxhZyA+PiAyNCkgPyBGWEdFVEZMQUdfQUxQSEFfRklMTChhbHBoYV9mbGFnKSA6IEZYR0VURkxBR19BTFBIQV9TVFJPS0UoYWxwaGFfZmxhZykgOg0KLSAgICAgICAgICAgICAgICAgIEZYQVJHQl9BKGNvbG9yKTsNCi0gICAgICAgIGFyZ2IgPSBGWEFSR0JfTUFLRShiZ3JhWzNdLCBiZ3JhWzJdLCBiZ3JhWzFdLCBiZ3JhWzBdKTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBBZG9iZUNNWUtfdG9fc1JHQjEoRlhTWVNfR2V0Q1ZhbHVlKGNvbG9yKSwgRlhTWVNfR2V0TVZhbHVlKGNvbG9yKSwNCi0gICAgICAgICAgICAgICAgICAgICAgIEZYU1lTX0dldFlWYWx1ZShjb2xvciksIEZYU1lTX0dldEtWYWx1ZShjb2xvciksDQotICAgICAgICAgICAgICAgICAgICAgICBiZ3JhWzJdLCBiZ3JhWzFdLCBiZ3JhWzBdKTsNCi0gICAgYmdyYVszXSA9IChhbHBoYV9mbGFnID4+IDI0KSA/IEZYR0VURkxBR19BTFBIQV9GSUxMKGFscGhhX2ZsYWcpIDogRlhHRVRGTEFHX0FMUEhBX1NUUk9LRShhbHBoYV9mbGFnKTsNCi0gICAgYXJnYiA9IEZYQVJHQl9NQUtFKGJncmFbM10sIGJncmFbMl0sIGJncmFbMV0sIGJncmFbMF0pOw0KLX0NCi1GWF9CT09MIENGWF9SZW5kZXJEZXZpY2U6OkRyYXdOb3JtYWxUZXh0KGludCBuQ2hhcnMsIGNvbnN0IEZYVEVYVF9DSEFSUE9TKiBwQ2hhclBvcywNCi0gICAgICAgIENGWF9Gb250KiBwRm9udCwgQ0ZYX0ZvbnRDYWNoZSogcENhY2hlLA0KLSAgICAgICAgRlhfRkxPQVQgZm9udF9zaXplLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwVGV4dDJEZXZpY2UsDQotICAgICAgICBGWF9EV09SRCBmaWxsX2NvbG9yLCBGWF9EV09SRCB0ZXh0X2ZsYWdzLA0KLSAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBpbnQgbmF0aXZldGV4dF9mbGFncyA9IHRleHRfZmxhZ3M7DQotICAgIGlmIChtX0RldmljZUNsYXNzICE9IEZYRENfRElTUExBWSkgew0KLSAgICAgICAgaWYgKCEodGV4dF9mbGFncyAmIEZYVEVYVF9QUklOVEdSQVBISUNURVhUKSkgew0KLSNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8NCi0gICAgICAgICAgICBpZiAoISh0ZXh0X2ZsYWdzICYgRlhGT05UX0NJREZPTlQpICYmIHBGb250LT5HZXRQc05hbWUoKS5GaW5kKENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoIitaSkhMIikpID09IC0xKQ0KLSNpZmRlZiBGT1hJVF9DSFJPTUVfQlVJTEQNCi0gICAgICAgICAgICAgICAgaWYgKHBGb250LT5HZXRQc05hbWUoKSAhPSBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKCJDTkFBSkkrY21leDEwIikpDQotI2VuZGlmDQotI2VuZGlmDQotICAgICAgICAgICAgICAgICAgICBpZiAobV9wRGV2aWNlRHJpdmVyLT5EcmF3RGV2aWNlVGV4dChuQ2hhcnMsIHBDaGFyUG9zLCBwRm9udCwgcENhY2hlLCBwVGV4dDJEZXZpY2UsIGZvbnRfc2l6ZSwgZmlsbF9jb2xvciwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGludCBhbHBoYSA9IEZYR0VURkxBR19DT0xPUlRZUEUoYWxwaGFfZmxhZykgPyBGWEdFVEZMQUdfQUxQSEFfRklMTChhbHBoYV9mbGFnKSA6IEZYQVJHQl9BKGZpbGxfY29sb3IpOw0KLSAgICAgICAgaWYgKGFscGhhIDwgMjU1KSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2UgaWYgKCEodGV4dF9mbGFncyAmIEZYVEVYVF9OT19OQVRJVkVURVhUKSkgew0KLSNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8NCi0gICAgICAgIGlmICghKHRleHRfZmxhZ3MgJiBGWEZPTlRfQ0lERk9OVCkpDQotI2lmZGVmIEZPWElUX0NIUk9NRV9CVUlMRA0KLSAgICAgICAgICAgIGlmIChwRm9udC0+R2V0UHNOYW1lKCkgIT0gQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbCgiQ05BQUpJK2NtZXgxMCIpKQ0KLSNlbmRpZg0KLSNlbmRpZg0KLSAgICAgICAgICAgICAgICBpZiAobV9wRGV2aWNlRHJpdmVyLT5EcmF3RGV2aWNlVGV4dChuQ2hhcnMsIHBDaGFyUG9zLCBwRm9udCwgcENhY2hlLCBwVGV4dDJEZXZpY2UsIGZvbnRfc2l6ZSwgZmlsbF9jb2xvciwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSkpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgICAgICAgICB9DQotICAgIH0NCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBjaGFyMmRldmljZSwgZGV2aWNlQ3RtLCB0ZXh0MkRldmljZTsNCi0gICAgaWYgKHBUZXh0MkRldmljZSkgew0KLSAgICAgICAgY2hhcjJkZXZpY2UgPSAqcFRleHQyRGV2aWNlOw0KLSAgICAgICAgdGV4dDJEZXZpY2UgPSAqcFRleHQyRGV2aWNlOw0KLSAgICB9DQotICAgIGNoYXIyZGV2aWNlLlNjYWxlKGZvbnRfc2l6ZSwgLWZvbnRfc2l6ZSk7DQotICAgIGlmIChGWFNZU19mYWJzKGNoYXIyZGV2aWNlLmEpICsgRlhTWVNfZmFicyhjaGFyMmRldmljZS5iKSA+IDUwICogMS4wZiB8fA0KLSAgICAgICAgICAgICgobV9EZXZpY2VDbGFzcyA9PSBGWERDX1BSSU5URVIgJiYgIW1fcERldmljZURyaXZlci0+SXNQU1ByaW50RHJpdmVyKCkpDQotICAgICAgICAgICAgICYmICEodGV4dF9mbGFncyAmIEZYVEVYVF9QUklOVElNQUdFVEVYVCkpKSB7DQotICAgICAgICBpZiAocEZvbnQtPkdldEZhY2UoKSAhPSBOVUxMIHx8IChwRm9udC0+R2V0U3Vic3RGb250KCktPm1fU3Vic3RGbGFncyAmIEZYRk9OVF9TVUJTVF9HTFlQSFBBVEgpKSB7DQotICAgICAgICAgICAgaW50IG5QYXRoRmxhZ3MgPSAodGV4dF9mbGFncyAmIEZYVEVYVF9OT1NNT09USCkgPT0gMCA/IDAgOiBGWEZJTExfTk9QQVRIU01PT1RIOw0KLSAgICAgICAgICAgIHJldHVybiBEcmF3VGV4dFBhdGgobkNoYXJzLCBwQ2hhclBvcywgcEZvbnQsIHBDYWNoZSwgZm9udF9zaXplLCBwVGV4dDJEZXZpY2UsIE5VTEwsIE5VTEwsIGZpbGxfY29sb3IsIDAsIE5VTEwsIG5QYXRoRmxhZ3MsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGludCBhbnRpX2FsaWFzID0gRlhGVF9SRU5ERVJfTU9ERV9NT05POw0KLSAgICBGWF9CT09MIGJOb3JtYWwgPSBGQUxTRTsNCi0gICAgaWYgKCh0ZXh0X2ZsYWdzICYgRlhURVhUX05PU01PT1RIKSA9PSAwKSB7DQotICAgICAgICBpZiAobV9EZXZpY2VDbGFzcyA9PSBGWERDX0RJU1BMQVkgJiYgbV9icHAgPiAxKSB7DQotICAgICAgICAgICAgRlhfQk9PTCBiQ2xlYXJUeXBlOw0KLSAgICAgICAgICAgIGlmIChwRm9udC0+R2V0RmFjZSgpID09IE5VTEwgJiYgIShwRm9udC0+R2V0U3Vic3RGb250KCktPm1fU3Vic3RGbGFncyAmIEZYRk9OVF9TVUJTVF9DTEVBUlRZUEUpKSB7DQotICAgICAgICAgICAgICAgIGJDbGVhclR5cGUgPSBGQUxTRTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBiQ2xlYXJUeXBlID0gdGV4dF9mbGFncyAmIEZYVEVYVF9DTEVBUlRZUEU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmICgobV9SZW5kZXJDYXBzICYgKEZYUkNfQUxQSEFfT1VUUFVUIHwgRlhSQ19DTVlLX09VVFBVVCkpKSB7DQotICAgICAgICAgICAgICAgIGFudGlfYWxpYXMgPSBGWEZUX1JFTkRFUl9NT0RFX0xDRDsNCi0gICAgICAgICAgICAgICAgYk5vcm1hbCA9IFRSVUU7DQotICAgICAgICAgICAgfSBlbHNlIGlmIChtX2JwcCA8IDE2KSB7DQotICAgICAgICAgICAgICAgIGFudGlfYWxpYXMgPSBGWEZUX1JFTkRFUl9NT0RFX05PUk1BTDsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBpZiAoYkNsZWFyVHlwZSA9PSBGQUxTRSkgew0KLSAgICAgICAgICAgICAgICAgICAgYW50aV9hbGlhcyA9IEZYRlRfUkVOREVSX01PREVfTENEOw0KLSAgICAgICAgICAgICAgICAgICAgYk5vcm1hbCA9IFRSVUU7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBhbnRpX2FsaWFzID0gRlhGVF9SRU5ERVJfTU9ERV9MQ0Q7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKHBDYWNoZSA9PSBOVUxMKSB7DQotICAgICAgICBwQ2FjaGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRGb250Q2FjaGUoKTsNCi0gICAgfQ0KLSAgICBDRlhfRmFjZUNhY2hlKiBwRmFjZUNhY2hlID0gcENhY2hlLT5HZXRDYWNoZWRGYWNlKHBGb250KTsNCi0gICAgRlhfRk9OVENBQ0hFX0RFRklORShwQ2FjaGUsIHBGb250KTsNCi0gICAgRlhURVhUX0dMWVBIUE9TKiBwR2x5cGhBbmRQb3MgPSBGWF9BbGxvYyhGWFRFWFRfR0xZUEhQT1MsIG5DaGFycyk7DQotICAgIGlmICghcEdseXBoQW5kUG9zKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgaW50IGlDaGFyOw0KLSAgICBkZXZpY2VDdG0gPSBjaGFyMmRldmljZTsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXhDVE0gPSBHZXRDVE0oKTsNCi0gICAgRlhfRkxPQVQgc2NhbGVfeCA9IEZYU1lTX2ZhYnMobWF0cml4Q1RNLmEpOw0KLSAgICBGWF9GTE9BVCBzY2FsZV95ID0gRlhTWVNfZmFicyhtYXRyaXhDVE0uZCk7DQotICAgIGRldmljZUN0bS5Db25jYXQoc2NhbGVfeCwgMCwgMCwgc2NhbGVfeSwgMCwgMCk7DQotICAgIHRleHQyRGV2aWNlLkNvbmNhdChzY2FsZV94LCAwLCAwLCBzY2FsZV95LCAwLCAwKTsNCi0gICAgZm9yIChpQ2hhciA9IDA7IGlDaGFyIDwgbkNoYXJzOyBpQ2hhciArKykgew0KLSAgICAgICAgRlhURVhUX0dMWVBIUE9TJiBnbHlwaCA9IHBHbHlwaEFuZFBvc1tpQ2hhcl07DQotICAgICAgICBjb25zdCBGWFRFWFRfQ0hBUlBPUyYgY2hhcnBvcyA9IHBDaGFyUG9zW2lDaGFyXTsNCi0gICAgICAgIGdseXBoLm1fZk9yaWdpblggPSBjaGFycG9zLm1fT3JpZ2luWDsNCi0gICAgICAgIGdseXBoLm1fZk9yaWdpblkgPSBjaGFycG9zLm1fT3JpZ2luWTsNCi0gICAgICAgIHRleHQyRGV2aWNlLlRyYW5zZm9ybShnbHlwaC5tX2ZPcmlnaW5YLCBnbHlwaC5tX2ZPcmlnaW5ZKTsNCi0gICAgICAgIGlmIChhbnRpX2FsaWFzIDwgRlhGVF9SRU5ERVJfTU9ERV9MQ0QpIHsNCi0gICAgICAgICAgICBnbHlwaC5tX09yaWdpblggPSBGWFNZU19yb3VuZChnbHlwaC5tX2ZPcmlnaW5YKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgZ2x5cGgubV9PcmlnaW5YID0gKGludClGWFNZU19mbG9vcihnbHlwaC5tX2ZPcmlnaW5YKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGdseXBoLm1fT3JpZ2luWSA9IEZYU1lTX3JvdW5kKGdseXBoLm1fZk9yaWdpblkpOw0KLSAgICAgICAgaWYgKGNoYXJwb3MubV9iR2x5cGhBZGp1c3QpIHsNCi0gICAgICAgICAgICBDRlhfQWZmaW5lTWF0cml4IG5ld19tYXRyaXgoY2hhcnBvcy5tX0FkanVzdE1hdHJpeFswXSwgY2hhcnBvcy5tX0FkanVzdE1hdHJpeFsxXSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnBvcy5tX0FkanVzdE1hdHJpeFsyXSwgY2hhcnBvcy5tX0FkanVzdE1hdHJpeFszXSwgMCwgMCk7DQotICAgICAgICAgICAgbmV3X21hdHJpeC5Db25jYXQoZGV2aWNlQ3RtKTsNCi0gICAgICAgICAgICBnbHlwaC5tX3BHbHlwaCA9IHBGYWNlQ2FjaGUtPkxvYWRHbHlwaEJpdG1hcChwRm9udCwgY2hhcnBvcy5tX0dseXBoSW5kZXgsIGNoYXJwb3MubV9iRm9udFN0eWxlLCAmbmV3X21hdHJpeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJwb3MubV9Gb250Q2hhcldpZHRoLCBhbnRpX2FsaWFzLCBuYXRpdmV0ZXh0X2ZsYWdzKTsNCi0gICAgICAgIH0gZWxzZQ0KLSAgICAgICAgICAgIGdseXBoLm1fcEdseXBoID0gcEZhY2VDYWNoZS0+TG9hZEdseXBoQml0bWFwKHBGb250LCBjaGFycG9zLm1fR2x5cGhJbmRleCwgY2hhcnBvcy5tX2JGb250U3R5bGUsICZkZXZpY2VDdG0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFycG9zLm1fRm9udENoYXJXaWR0aCwgYW50aV9hbGlhcywgbmF0aXZldGV4dF9mbGFncyk7DQotICAgIH0NCi0gICAgaWYgKGFudGlfYWxpYXMgPCBGWEZUX1JFTkRFUl9NT0RFX0xDRCAmJiBuQ2hhcnMgPiAxKSB7DQotICAgICAgICBfQWRqdXN0R2x5cGhTcGFjZShwR2x5cGhBbmRQb3MsIG5DaGFycyk7DQotICAgIH0NCi0gICAgRlhfUkVDVCBibXBfcmVjdDEgPSBGWEdFX0dldEdseXBoc0JCb3gocEdseXBoQW5kUG9zLCBuQ2hhcnMsIGFudGlfYWxpYXMpOw0KLSAgICBpZiAoc2NhbGVfeCA+IDEgJiYgc2NhbGVfeSA+IDEpIHsNCi0gICAgICAgIGJtcF9yZWN0MS5sZWZ0LS07DQotICAgICAgICBibXBfcmVjdDEudG9wIC0tOw0KLSAgICAgICAgYm1wX3JlY3QxLnJpZ2h0ICsrOw0KLSAgICAgICAgYm1wX3JlY3QxLmJvdHRvbSArKzsNCi0gICAgfQ0KLSAgICBGWF9SRUNUIGJtcF9yZWN0KEZYU1lTX3JvdW5kKChGWF9GTE9BVCkoYm1wX3JlY3QxLmxlZnQpIC8gc2NhbGVfeCksIEZYU1lTX3JvdW5kKChGWF9GTE9BVCkoYm1wX3JlY3QxLnRvcCkgLyBzY2FsZV95KSwNCi0gICAgICAgICAgICAgICAgICAgICBGWFNZU19yb3VuZCgoRlhfRkxPQVQpYm1wX3JlY3QxLnJpZ2h0IC8gc2NhbGVfeCksIEZYU1lTX3JvdW5kKChGWF9GTE9BVClibXBfcmVjdDEuYm90dG9tIC8gc2NhbGVfeSkpOw0KLSAgICBibXBfcmVjdC5JbnRlcnNlY3QobV9DbGlwQm94KTsNCi0gICAgaWYgKGJtcF9yZWN0LklzRW1wdHkoKSkgew0KLSAgICAgICAgRlhfRnJlZShwR2x5cGhBbmRQb3MpOw0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgaW50IHBpeGVsX3dpZHRoID0gRlhTWVNfcm91bmQoYm1wX3JlY3QuV2lkdGgoKSAqIHNjYWxlX3gpOw0KLSAgICBpbnQgcGl4ZWxfaGVpZ2h0ID0gRlhTWVNfcm91bmQoYm1wX3JlY3QuSGVpZ2h0KCkgKiBzY2FsZV95KTsNCi0gICAgaW50IHBpeGVsX2xlZnQgPSBGWFNZU19yb3VuZChibXBfcmVjdC5sZWZ0ICogc2NhbGVfeCk7DQotICAgIGludCBwaXhlbF90b3AgPSBGWFNZU19yb3VuZChibXBfcmVjdC50b3AgKiBzY2FsZV95KTsNCi0gICAgaWYgKGFudGlfYWxpYXMgPT0gRlhGVF9SRU5ERVJfTU9ERV9NT05PKSB7DQotICAgICAgICBDRlhfRElCaXRtYXAgYml0bWFwOw0KLSAgICAgICAgaWYgKCFiaXRtYXAuQ3JlYXRlKHBpeGVsX3dpZHRoLCBwaXhlbF9oZWlnaHQsIEZYRElCXzFicHBNYXNrKSkgew0KLSAgICAgICAgICAgIEZYX0ZyZWUocEdseXBoQW5kUG9zKTsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBiaXRtYXAuQ2xlYXIoMCk7DQotICAgICAgICBmb3IgKGlDaGFyID0gMDsgaUNoYXIgPCBuQ2hhcnM7IGlDaGFyICsrKSB7DQotICAgICAgICAgICAgRlhURVhUX0dMWVBIUE9TJiBnbHlwaCA9IHBHbHlwaEFuZFBvc1tpQ2hhcl07DQotICAgICAgICAgICAgaWYgKGdseXBoLm1fcEdseXBoID09IE5VTEwpIHsNCi0gICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGNvbnN0IENGWF9ESUJpdG1hcCogcEdseXBoID0gJmdseXBoLm1fcEdseXBoLT5tX0JpdG1hcDsNCi0gICAgICAgICAgICBiaXRtYXAuVHJhbnNmZXJCaXRtYXAoZ2x5cGgubV9PcmlnaW5YICsgZ2x5cGgubV9wR2x5cGgtPm1fTGVmdCAtIHBpeGVsX2xlZnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoLm1fT3JpZ2luWSAtIGdseXBoLm1fcEdseXBoLT5tX1RvcCAtIHBpeGVsX3RvcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEdseXBoLT5HZXRXaWR0aCgpLCBwR2x5cGgtPkdldEhlaWdodCgpLCBwR2x5cGgsIDAsIDApOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfRnJlZShwR2x5cGhBbmRQb3MpOw0KLSAgICAgICAgcmV0dXJuIFNldEJpdE1hc2soJmJpdG1hcCwgYm1wX3JlY3QubGVmdCwgYm1wX3JlY3QudG9wLCBmaWxsX2NvbG9yKTsNCi0gICAgfQ0KLSAgICBDRlhfRElCaXRtYXAgYml0bWFwOw0KLSAgICBpZiAobV9icHAgPT0gOCkgew0KLSAgICAgICAgaWYgKCFiaXRtYXAuQ3JlYXRlKHBpeGVsX3dpZHRoLCBwaXhlbF9oZWlnaHQsIEZYRElCXzhicHBNYXNrKSkgew0KLSAgICAgICAgICAgIEZYX0ZyZWUocEdseXBoQW5kUG9zKTsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZiAoIUNyZWF0ZUNvbXBhdGlibGVCaXRtYXAoJmJpdG1hcCwgcGl4ZWxfd2lkdGgsIHBpeGVsX2hlaWdodCkpIHsNCi0gICAgICAgICAgICBGWF9GcmVlKHBHbHlwaEFuZFBvcyk7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGlmICghYml0bWFwLkhhc0FscGhhKCkgJiYgIWJpdG1hcC5Jc0FscGhhTWFzaygpKSB7DQotICAgICAgICBiaXRtYXAuQ2xlYXIoMHhGRkZGRkZGRik7DQotICAgICAgICBpZiAoIUdldERJQml0cygmYml0bWFwLCBibXBfcmVjdC5sZWZ0LCBibXBfcmVjdC50b3ApKSB7DQotICAgICAgICAgICAgRlhfRnJlZShwR2x5cGhBbmRQb3MpOw0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGJpdG1hcC5DbGVhcigwKTsNCi0gICAgICAgIGlmIChiaXRtYXAubV9wQWxwaGFNYXNrKSB7DQotICAgICAgICAgICAgYml0bWFwLm1fcEFscGhhTWFzay0+Q2xlYXIoMCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaW50IGRlc3Rfd2lkdGggPSBwaXhlbF93aWR0aDsNCi0gICAgRlhfTFBCWVRFIGRlc3RfYnVmID0gYml0bWFwLkdldEJ1ZmZlcigpOw0KLSAgICBpbnQgZGVzdF9waXRjaCA9IGJpdG1hcC5HZXRQaXRjaCgpOw0KLSAgICBpbnQgQnBwID0gYml0bWFwLkdldEJQUCgpIC8gODsNCi0gICAgaW50IGEsIHIsIGcsIGI7DQotICAgIGlmIChhbnRpX2FsaWFzID09IEZYRlRfUkVOREVSX01PREVfTENEKSB7DQotICAgICAgICBfQ29sb3IyQXJnYihmaWxsX2NvbG9yLCBmaWxsX2NvbG9yLCBhbHBoYV9mbGFnIHwgKDEgPDwgMjQpLCBwSWNjVHJhbnNmb3JtKTsNCi0gICAgICAgIEFyZ2JEZWNvZGUoZmlsbF9jb2xvciwgYSwgciwgZywgYik7DQotICAgICAgICByID0gRlhfR0FNTUEocik7DQotICAgICAgICBnID0gRlhfR0FNTUEoZyk7DQotICAgICAgICBiID0gRlhfR0FNTUEoYik7DQotICAgIH0NCi0gICAgZm9yIChpQ2hhciA9IDA7IGlDaGFyIDwgbkNoYXJzOyBpQ2hhciArKykgew0KLSAgICAgICAgRlhURVhUX0dMWVBIUE9TJiBnbHlwaCA9IHBHbHlwaEFuZFBvc1tpQ2hhcl07DQotICAgICAgICBpZiAoZ2x5cGgubV9wR2x5cGggPT0gTlVMTCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgY29uc3QgQ0ZYX0RJQml0bWFwKiBwR2x5cGggPSAmZ2x5cGgubV9wR2x5cGgtPm1fQml0bWFwOw0KLSAgICAgICAgaW50IGxlZnQgPSBnbHlwaC5tX09yaWdpblggKyBnbHlwaC5tX3BHbHlwaC0+bV9MZWZ0IC0gcGl4ZWxfbGVmdDsNCi0gICAgICAgIGludCB0b3AgPSBnbHlwaC5tX09yaWdpblkgLSBnbHlwaC5tX3BHbHlwaC0+bV9Ub3AgLSBwaXhlbF90b3A7DQotICAgICAgICBpbnQgbmNvbHMgPSBwR2x5cGgtPkdldFdpZHRoKCk7DQotICAgICAgICBpbnQgbnJvd3MgPSBwR2x5cGgtPkdldEhlaWdodCgpOw0KLSAgICAgICAgaWYgKGFudGlfYWxpYXMgPT0gRlhGVF9SRU5ERVJfTU9ERV9OT1JNQUwpIHsNCi0gICAgICAgICAgICBpZiAoIWJpdG1hcC5Db21wb3NpdGVNYXNrKGxlZnQsIHRvcCwgbmNvbHMsIG5yb3dzLCBwR2x5cGgsIGZpbGxfY29sb3IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBGWERJQl9CTEVORF9OT1JNQUwsIE5VTEwsIEZBTFNFLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtKSkgew0KLSAgICAgICAgICAgICAgICBGWF9GcmVlKHBHbHlwaEFuZFBvcyk7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBGWF9CT09MIGJCR1JTdHJpcGUgPSB0ZXh0X2ZsYWdzICYgRlhURVhUX0JHUl9TVFJJUEU7DQotICAgICAgICBuY29scyAvPSAzOw0KLSAgICAgICAgaW50IHhfc3VicGl4ZWwgPSAoaW50KShnbHlwaC5tX2ZPcmlnaW5YICogMykgJSAzOw0KLSAgICAgICAgRlhfTFBCWVRFIHNyY19idWYgPSBwR2x5cGgtPkdldEJ1ZmZlcigpOw0KLSAgICAgICAgaW50IHNyY19waXRjaCA9IHBHbHlwaC0+R2V0UGl0Y2goKTsNCi0gICAgICAgIGludCBzdGFydF9jb2wgPSBsZWZ0Ow0KLSAgICAgICAgaWYgKHN0YXJ0X2NvbCA8IDApIHsNCi0gICAgICAgICAgICBzdGFydF9jb2wgPSAwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW50IGVuZF9jb2wgPSBsZWZ0ICsgbmNvbHM7DQotICAgICAgICBpZiAoZW5kX2NvbCA+IGRlc3Rfd2lkdGgpIHsNCi0gICAgICAgICAgICBlbmRfY29sID0gZGVzdF93aWR0aDsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChzdGFydF9jb2wgPj0gZW5kX2NvbCkgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKGJpdG1hcC5HZXRGb3JtYXQoKSA9PSBGWERJQl9BcmdiKSB7DQotICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgbnJvd3M7IHJvdyArKykgew0KLSAgICAgICAgICAgICAgICBpbnQgZGVzdF9yb3cgPSByb3cgKyB0b3A7DQotICAgICAgICAgICAgICAgIGlmIChkZXN0X3JvdyA8IDAgfHwgZGVzdF9yb3cgPj0gYml0bWFwLkdldEhlaWdodCgpKSB7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBGWF9MUEJZVEUgc3JjX3NjYW4gPSBzcmNfYnVmICsgcm93ICogc3JjX3BpdGNoICsgKHN0YXJ0X2NvbCAtIGxlZnQpICogMzsNCi0gICAgICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IGRlc3RfYnVmICsgZGVzdF9yb3cgKiBkZXN0X3BpdGNoICsgKHN0YXJ0X2NvbCA8PCAyKTsNCi0gICAgICAgICAgICAgICAgaWYgKGJCR1JTdHJpcGUpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmICh4X3N1YnBpeGVsID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSBzdGFydF9jb2w7IGNvbCA8IGVuZF9jb2w7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gc3JjX3NjYW5bMl07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzJdKSwgciwgc3JjX2FscGhhKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzFdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsxXSksIGcsIHNyY19hbHBoYSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblswXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMF0pLCBiLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzNdID0gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHhfc3VicGl4ZWwgPT0gMSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBzcmNfc2NhblsxXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzJdLCByLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblswXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzFdLCBnLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRfY29sID4gbGVmdCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblstMV07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMF0sIGIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgc3JjX2FscGhhKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IHN0YXJ0X2NvbCArIDE7IGNvbCA8IGVuZF9jb2wgLSAxOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWzFdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzJdLCByLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHIsIHNyY19hbHBoYSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblswXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsxXSwgZywgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bLTFdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzBdLCBiLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIHNyY19hbHBoYSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bM10gPSAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWzBdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMl0sIHIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHIsIHNyY19hbHBoYSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydF9jb2wgPiBsZWZ0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWy0xXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsxXSwgZywgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bLTJdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzBdLCBiLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIHNyY19hbHBoYSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bM10gPSAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSBzdGFydF9jb2wgKyAxOyBjb2wgPCBlbmRfY29sIC0gMTsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBzcmNfc2NhblswXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bLTFdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzFdLCBnLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsxXSksIGcsIHNyY19hbHBoYSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblstMl07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMF0sIGIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgc3JjX2FscGhhKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHhfc3VicGl4ZWwgPT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IHN0YXJ0X2NvbDsgY29sIDwgZW5kX2NvbDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiTm9ybWFsKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhMSA9IChzcmNfc2NhblswXSArIHNyY19zY2FuWzFdICsgc3JjX3NjYW5bMl0pIC8gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMl0sIHIsIHNyY19hbHBoYTEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhMSA9IHNyY19hbHBoYTEgKiBhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gZGVzdF9zY2FuWzNdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYQVJHQl9TRVRESUIoZGVzdF9zY2FuLCBGWEFSR0JfTUFLRShzcmNfYWxwaGExLCByLCBnLCBiKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfYWxwaGExID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYTEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhMSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IGRlc3RfYWxwaGE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGExICogMjU1IC8gZGVzdF9hbHBoYTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzJdKSwgciwgYWxwaGFfcmF0aW8pKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgZywgYWxwaGFfcmF0aW8pKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgYWxwaGFfcmF0aW8pKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBzcmNfc2NhblswXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bMV07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMV0sIGcsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgZywgc3JjX2FscGhhKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzJdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzBdLCBiLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIHNyY19hbHBoYSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bM10gPSAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeF9zdWJwaXhlbCA9PSAxKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJOb3JtYWwpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYTEgPSBzdGFydF9jb2wgPiBsZWZ0ID8gKChzcmNfc2NhblstMV0gKyBzcmNfc2NhblswXSArIHNyY19zY2FuWzFdKSAvIDMpIDogKChzcmNfc2NhblswXSArIHNyY19zY2FuWzFdKSAvIDMpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzJdLCByLCBzcmNfYWxwaGExLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhMSA9IHNyY19hbHBoYTEgKiBhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2FscGhhMSA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSBkZXN0X3NjYW5bM107DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhBUkdCX1NFVERJQihkZXN0X3NjYW4sIEZYQVJHQl9NQUtFKHNyY19hbHBoYTEsIHIsIGcsIGIpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYTEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhMSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bM10gPSBkZXN0X2FscGhhOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYTEgKiAyNTUgLyBkZXN0X2FscGhhOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzJdKSwgciwgYWxwaGFfcmF0aW8pKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsxXSksIGcsIGFscGhhX3JhdGlvKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMF0pLCBiLCBhbHBoYV9yYXRpbykpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0X2NvbCA+IGxlZnQpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBzcmNfc2NhblstMV07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzJdLCByLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzJdKSwgciwgc3JjX2FscGhhKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWzBdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzFdLCBnLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsxXSksIGcsIHNyY19hbHBoYSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblsxXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblswXSwgYiwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMF0pLCBiLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzNdID0gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gc3RhcnRfY29sICsgMTsgY29sIDwgZW5kX2NvbDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiTm9ybWFsKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhMSA9IChzcmNfc2NhblstMV0gKyBzcmNfc2NhblswXSArIHNyY19zY2FuWzFdKSAvIDM7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzJdLCByLCBzcmNfYWxwaGExLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYTEgPSBzcmNfYWxwaGExICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgYmFja19hbHBoYSA9IGRlc3Rfc2NhblszXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYWNrX2FscGhhID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWEFSR0JfU0VURElCKGRlc3Rfc2NhbiwgRlhBUkdCX01BS0Uoc3JjX2FscGhhMSwgciwgZywgYikpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2FscGhhMSA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGExIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYTEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bM10gPSBkZXN0X2FscGhhOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhMSAqIDI1NSAvIGRlc3RfYWxwaGE7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHIsIGFscGhhX3JhdGlvKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsxXSksIGcsIGFscGhhX3JhdGlvKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIGFscGhhX3JhdGlvKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gc3JjX3NjYW5bLTFdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzJdLCByLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHIsIHNyY19hbHBoYSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblswXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsxXSwgZywgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bMV07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMF0sIGIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgc3JjX2FscGhhKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYk5vcm1hbCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhMSA9IHN0YXJ0X2NvbCA+IGxlZnQgPyAoKHNyY19zY2FuWy0yXSArIHNyY19zY2FuWy0xXSArIHNyY19zY2FuWzBdKSAvIDMpIDogKChzcmNfc2NhblswXSkgLyAzKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhMSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYTEgPSBzcmNfYWxwaGExICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYTEgPT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gZGVzdF9zY2FuWzNdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhY2tfYWxwaGEgPT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYQVJHQl9TRVRESUIoZGVzdF9zY2FuLCBGWEFSR0JfTUFLRShzcmNfYWxwaGExLCByLCBnLCBiKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0JZVEUgZGVzdF9hbHBoYSA9IGJhY2tfYWxwaGEgKyBzcmNfYWxwaGExIC0gYmFja19hbHBoYSAqIHNyY19hbHBoYTEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzNdID0gZGVzdF9hbHBoYTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGExICogMjU1IC8gZGVzdF9hbHBoYTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHIsIGFscGhhX3JhdGlvKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBhbHBoYV9yYXRpbykpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgYWxwaGFfcmF0aW8pKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydF9jb2wgPiBsZWZ0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gc3JjX3NjYW5bLTJdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHIsIHNyY19hbHBoYSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bLTFdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsxXSwgZywgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsxXSksIGcsIHNyY19hbHBoYSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBzcmNfc2NhblswXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblswXSwgYiwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMF0pLCBiLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzNdID0gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gc3RhcnRfY29sICsgMTsgY29sIDwgZW5kX2NvbDsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiTm9ybWFsKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhMSA9IChzcmNfc2NhblstMl0gKyBzcmNfc2NhblstMV0gKyBzcmNfc2NhblswXSkgLyAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhMSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGExID0gc3JjX2FscGhhMSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIGJhY2tfYWxwaGEgPSBkZXN0X3NjYW5bM107DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhBUkdCX1NFVERJQihkZXN0X3NjYW4sIEZYQVJHQl9NQUtFKHNyY19hbHBoYTEsIHIsIGcsIGIpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYTEgPT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9CWVRFIGRlc3RfYWxwaGEgPSBiYWNrX2FscGhhICsgc3JjX2FscGhhMSAtIGJhY2tfYWxwaGEgKiBzcmNfYWxwaGExIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzNdID0gZGVzdF9hbHBoYTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9yYXRpbyA9IHNyY19hbHBoYTEgKiAyNTUgLyBkZXN0X2FscGhhOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBhbHBoYV9yYXRpbykpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBhbHBoYV9yYXRpbykpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMF0pLCBiLCBhbHBoYV9yYXRpbykpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWy0yXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bLTFdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzFdLCBnLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsxXSksIGcsIHNyY19hbHBoYSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblswXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblswXSwgYiwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMF0pLCBiLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzNdID0gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IG5yb3dzOyByb3cgKyspIHsNCi0gICAgICAgICAgICAgICAgaW50IGRlc3Rfcm93ID0gcm93ICsgdG9wOw0KLSAgICAgICAgICAgICAgICBpZiAoZGVzdF9yb3cgPCAwIHx8IGRlc3Rfcm93ID49IGJpdG1hcC5HZXRIZWlnaHQoKSkgew0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgRlhfTFBCWVRFIHNyY19zY2FuID0gc3JjX2J1ZiArIHJvdyAqIHNyY19waXRjaCArIChzdGFydF9jb2wgLSBsZWZ0KSAqIDM7DQotICAgICAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIGRlc3Rfcm93ICogZGVzdF9waXRjaCArIHN0YXJ0X2NvbCAqIEJwcDsNCi0gICAgICAgICAgICAgICAgaWYgKGJCR1JTdHJpcGUpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmICh4X3N1YnBpeGVsID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSBzdGFydF9jb2w7IGNvbCA8IGVuZF9jb2w7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gc3JjX3NjYW5bMl07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMl0sIHIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzJdKSwgciwgc3JjX2FscGhhKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzFdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzFdLCBnLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsxXSksIGcsIHNyY19hbHBoYSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblswXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblswXSwgYiwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMF0pLCBiLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHhfc3VicGl4ZWwgPT0gMSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBzcmNfc2NhblsxXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzJdLCByLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblswXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzFdLCBnLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRfY29sID4gbGVmdCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblstMV07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMF0sIGIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgc3JjX2FscGhhKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7DQotICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSBzdGFydF9jb2wgKyAxOyBjb2wgPCBlbmRfY29sIC0gMTsgY29sICsrKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBzcmNfc2NhblsxXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bMF07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMV0sIGcsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgZywgc3JjX2FscGhhKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWy0xXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblswXSwgYiwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMF0pLCBiLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBzcmNfc2NhblswXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzJdLCByLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRfY29sID4gbGVmdCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblstMV07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMV0sIGcsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgZywgc3JjX2FscGhhKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWy0yXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblswXSwgYiwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMF0pLCBiLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IHN0YXJ0X2NvbCArIDE7IGNvbCA8IGVuZF9jb2wgLSAxOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWzBdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzJdLCByLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHIsIHNyY19hbHBoYSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblstMV07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMV0sIGcsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgZywgc3JjX2FscGhhKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWy0yXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblswXSwgYiwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMF0pLCBiLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBpZiAoeF9zdWJwaXhlbCA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gc3RhcnRfY29sOyBjb2wgPCBlbmRfY29sOyBjb2wgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJOb3JtYWwpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGExID0gKHNyY19zY2FuWzBdICsgc3JjX3NjYW5bMV0gKyBzcmNfc2NhblsyXSkgLyAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhMSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGExID0gc3JjX2FscGhhMSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2FscGhhMSA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBzcmNfYWxwaGExKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsxXSksIGcsIHNyY19hbHBoYTEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgc3JjX2FscGhhMSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gc3JjX3NjYW5bMF07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMl0sIHIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzJdKSwgciwgc3JjX2FscGhhKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzFdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzFdLCBnLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsxXSksIGcsIHNyY19hbHBoYSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblsyXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblswXSwgYiwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMF0pLCBiLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHhfc3VicGl4ZWwgPT0gMSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiTm9ybWFsKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGExID0gc3RhcnRfY29sID4gbGVmdCA/IChzcmNfc2NhblswXSArIHNyY19zY2FuWzFdICsgc3JjX3NjYW5bLTFdKSAvIDMgOiAoc3JjX3NjYW5bMF0gKyBzcmNfc2NhblsxXSkgLyAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzJdLCByLCBzcmNfYWxwaGExLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhMSA9IHNyY19hbHBoYTEgKiBhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHIsIHNyY19hbHBoYTEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBzcmNfYWxwaGExKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgc3JjX2FscGhhMSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gQnBwOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydF9jb2wgPiBsZWZ0KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gc3JjX3NjYW5bLTFdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHIsIHNyY19hbHBoYSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBzcmNfc2NhblswXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsxXSwgZywgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bMV07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMF0sIGIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgc3JjX2FscGhhKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IHN0YXJ0X2NvbCArIDE7IGNvbCA8IGVuZF9jb2w7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYk5vcm1hbCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYTEgPSAoc3JjX3NjYW5bMF0gKyBzcmNfc2NhblsxXSArIHNyY19zY2FuWy0xXSkgLyAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhMSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGExID0gc3JjX2FscGhhMSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3JjX2FscGhhMSA9PSAwKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBzcmNfYWxwaGExKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsxXSksIGcsIHNyY19hbHBoYTEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgc3JjX2FscGhhMSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gc3JjX3NjYW5bLTFdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzJdLCByLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHIsIHNyY19hbHBoYSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblswXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsxXSwgZywgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bMV07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMF0sIGIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgc3JjX2FscGhhKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYk5vcm1hbCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhMSA9IHN0YXJ0X2NvbCA+IGxlZnQgPyAoc3JjX3NjYW5bMF0gKyBzcmNfc2NhblstMl0gKyBzcmNfc2NhblstMV0pIC8gMyA6IHNyY19zY2FuWzBdIC8gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhMSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYTEgPSBzcmNfYWxwaGExICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBzcmNfYWxwaGExKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgZywgc3JjX2FscGhhMSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIHNyY19hbHBoYTEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRfY29sID4gbGVmdCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWy0yXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMl0sIHIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWy0xXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMV0sIGcsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gc3JjX3NjYW5bMF07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMF0sIGIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgc3JjX2FscGhhKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IHN0YXJ0X2NvbCArIDE7IGNvbCA8IGVuZF9jb2w7IGNvbCArKykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYk5vcm1hbCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYTEgPSAoKGludCkoc3JjX3NjYW5bMF0pICsgKGludCkoc3JjX3NjYW5bLTJdKSArIChpbnQpKHNyY19zY2FuWy0xXSkpIC8gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMl0sIHIsIHNyY19hbHBoYTEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhMSA9IHNyY19hbHBoYTEgKiBhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYTEgPT0gMCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzJdKSwgciwgc3JjX2FscGhhMSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBzcmNfYWxwaGExKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIHNyY19hbHBoYTEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWy0yXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bLTFdOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzFdLCBnLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsxXSksIGcsIHNyY19hbHBoYSkpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblswXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblswXSwgYiwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMF0pLCBiLCBzcmNfYWxwaGEpKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKGJpdG1hcC5Jc0FscGhhTWFzaygpKSB7DQotICAgICAgICBTZXRCaXRNYXNrKCZiaXRtYXAsIGJtcF9yZWN0LmxlZnQsIGJtcF9yZWN0LnRvcCwgZmlsbF9jb2xvciwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBTZXRESUJpdHMoJmJpdG1hcCwgYm1wX3JlY3QubGVmdCwgYm1wX3JlY3QudG9wKTsNCi0gICAgfQ0KLSAgICBGWF9GcmVlKHBHbHlwaEFuZFBvcyk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENGWF9SZW5kZXJEZXZpY2U6OkRyYXdUZXh0UGF0aChpbnQgbkNoYXJzLCBjb25zdCBGWFRFWFRfQ0hBUlBPUyogcENoYXJQb3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZYX0ZvbnQqIHBGb250LCBDRlhfRm9udENhY2hlKiBwQ2FjaGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQgZm9udF9zaXplLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwVGV4dDJVc2VyLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBVc2VyMkRldmljZSwgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBmaWxsX2NvbG9yLCBGWF9BUkdCIHN0cm9rZV9jb2xvciwgQ0ZYX1BhdGhEYXRhKiBwQ2xpcHBpbmdQYXRoLCBpbnQgbkZsYWcsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0sIGludCBibGVuZF90eXBlKQ0KLXsNCi0gICAgaWYgKHBDYWNoZSA9PSBOVUxMKSB7DQotICAgICAgICBwQ2FjaGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRGb250Q2FjaGUoKTsNCi0gICAgfQ0KLSAgICBDRlhfRmFjZUNhY2hlKiBwRmFjZUNhY2hlID0gcENhY2hlLT5HZXRDYWNoZWRGYWNlKHBGb250KTsNCi0gICAgRlhfRk9OVENBQ0hFX0RFRklORShwQ2FjaGUsIHBGb250KTsNCi0gICAgZm9yIChpbnQgaUNoYXIgPSAwOyBpQ2hhciA8IG5DaGFyczsgaUNoYXIgKyspIHsNCi0gICAgICAgIGNvbnN0IEZYVEVYVF9DSEFSUE9TJiBjaGFycG9zID0gcENoYXJQb3NbaUNoYXJdOw0KLSAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXg7DQotICAgICAgICBpZiAoY2hhcnBvcy5tX2JHbHlwaEFkanVzdCkNCi0gICAgICAgICAgICBtYXRyaXguU2V0KGNoYXJwb3MubV9BZGp1c3RNYXRyaXhbMF0sIGNoYXJwb3MubV9BZGp1c3RNYXRyaXhbMV0sDQotICAgICAgICAgICAgICAgICAgICAgICBjaGFycG9zLm1fQWRqdXN0TWF0cml4WzJdLCBjaGFycG9zLm1fQWRqdXN0TWF0cml4WzNdLCAwLCAwKTsNCi0gICAgICAgIG1hdHJpeC5Db25jYXQoZm9udF9zaXplLCAwLCAwLCBmb250X3NpemUsIGNoYXJwb3MubV9PcmlnaW5YLCBjaGFycG9zLm1fT3JpZ2luWSk7DQotICAgICAgICBjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoID0gcEZhY2VDYWNoZS0+TG9hZEdseXBoUGF0aChwRm9udCwgY2hhcnBvcy5tX0dseXBoSW5kZXgsIGNoYXJwb3MubV9Gb250Q2hhcldpZHRoKTsNCi0gICAgICAgIGlmIChwUGF0aCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICB9DQotICAgICAgICBtYXRyaXguQ29uY2F0KCpwVGV4dDJVc2VyKTsNCi0gICAgICAgIENGWF9QYXRoRGF0YSBUcmFuc2Zvcm1lZFBhdGgoKnBQYXRoKTsNCi0gICAgICAgIFRyYW5zZm9ybWVkUGF0aC5UcmFuc2Zvcm0oJm1hdHJpeCk7DQotICAgICAgICBGWF9CT09MIGJIYXNBbHBoYSA9IEZYR0VURkxBR19DT0xPUlRZUEUoYWxwaGFfZmxhZykgPw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlhHRVRGTEFHX0FMUEhBX0ZJTEwoYWxwaGFfZmxhZykgfHwgRlhHRVRGTEFHX0FMUEhBX1NUUk9LRShhbHBoYV9mbGFnKSkgOg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsbF9jb2xvciB8fCBzdHJva2VfY29sb3IpOw0KLSAgICAgICAgaWYgKGJIYXNBbHBoYSkgew0KLSAgICAgICAgICAgIGludCBmaWxsX21vZGUgPSBuRmxhZzsNCi0gICAgICAgICAgICBpZiAoRlhHRVRGTEFHX0NPTE9SVFlQRShhbHBoYV9mbGFnKSkgew0KLSAgICAgICAgICAgICAgICBpZiAoRlhHRVRGTEFHX0FMUEhBX0ZJTEwoYWxwaGFfZmxhZykpIHsNCi0gICAgICAgICAgICAgICAgICAgIGZpbGxfbW9kZSB8PSBGWEZJTExfV0lORElORzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGlmIChmaWxsX2NvbG9yKSB7DQotICAgICAgICAgICAgICAgICAgICBmaWxsX21vZGUgfD0gRlhGSUxMX1dJTkRJTkc7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZmlsbF9tb2RlIHw9IEZYX0ZJTExfVEVYVF9NT0RFOw0KLSAgICAgICAgICAgIGlmICghRHJhd1BhdGgoJlRyYW5zZm9ybWVkUGF0aCwgcFVzZXIyRGV2aWNlLCBwR3JhcGhTdGF0ZSwgZmlsbF9jb2xvciwgc3Ryb2tlX2NvbG9yLCBmaWxsX21vZGUsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0sIGJsZW5kX3R5cGUpKSB7DQotICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAocENsaXBwaW5nUGF0aCkgew0KLSAgICAgICAgICAgIHBDbGlwcGluZ1BhdGgtPkFwcGVuZCgmVHJhbnNmb3JtZWRQYXRoLCBwVXNlcjJEZXZpY2UpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1DRlhfRm9udENhY2hlOjp+Q0ZYX0ZvbnRDYWNoZSgpDQotew0KLSAgICBGcmVlQ2FjaGUoVFJVRSk7DQotfQ0KLUNGWF9GYWNlQ2FjaGUqIENGWF9Gb250Q2FjaGU6OkdldENhY2hlZEZhY2UoQ0ZYX0ZvbnQqIHBGb250KQ0KLXsNCi0gICAgRlhfQk9PTCBiRXh0ZXJuYWwgPSBwRm9udC0+R2V0RmFjZSgpID09IE5VTEw7DQotICAgIHZvaWQqIGZhY2UgPSBiRXh0ZXJuYWwgPyBwRm9udC0+R2V0U3Vic3RGb250KCktPm1fRXh0SGFuZGxlIDogcEZvbnQtPkdldEZhY2UoKTsNCi0gICAgQ0ZYX0ZUQ2FjaGVNYXAmIG1hcCA9ICBiRXh0ZXJuYWwgPyBtX0V4dEZhY2VNYXAgOiBtX0ZURmFjZU1hcDsNCi0gICAgQ0ZYX0NvdW50ZWRGYWNlQ2FjaGUqIGNvdW50ZWRfZmFjZV9jYWNoZSA9IE5VTEw7DQotICAgIGlmIChtYXAuTG9va3VwKChGWEZUX0ZhY2UpZmFjZSwgY291bnRlZF9mYWNlX2NhY2hlKSkgew0KLSAgICAgICAgY291bnRlZF9mYWNlX2NhY2hlLT5tX25Db3VudCsrOw0KLSAgICAgICAgcmV0dXJuIGNvdW50ZWRfZmFjZV9jYWNoZS0+bV9PYmo7DQotICAgIH0NCi0gICAgQ0ZYX0ZhY2VDYWNoZSogZmFjZV9jYWNoZSA9IE5VTEw7DQotICAgIGZhY2VfY2FjaGUgPSBGWF9ORVcgQ0ZYX0ZhY2VDYWNoZShiRXh0ZXJuYWwgPyBOVUxMIDogKEZYRlRfRmFjZSlmYWNlKTsNCi0gICAgaWYgKGZhY2VfY2FjaGUgPT0gTlVMTCkJew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgY291bnRlZF9mYWNlX2NhY2hlID0gRlhfTkVXIENGWF9Db3VudGVkRmFjZUNhY2hlOw0KLSAgICBpZiAoIWNvdW50ZWRfZmFjZV9jYWNoZSkgew0KLSAgICAgICAgaWYgKGZhY2VfY2FjaGUpIHsNCi0gICAgICAgICAgICBkZWxldGUgZmFjZV9jYWNoZTsNCi0gICAgICAgICAgICBmYWNlX2NhY2hlID0gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGNvdW50ZWRfZmFjZV9jYWNoZS0+bV9uQ291bnQgPSAyOw0KLSAgICBjb3VudGVkX2ZhY2VfY2FjaGUtPm1fT2JqID0gZmFjZV9jYWNoZTsNCi0gICAgbWFwLlNldEF0KChGWEZUX0ZhY2UpZmFjZSwgY291bnRlZF9mYWNlX2NhY2hlKTsNCi0gICAgcmV0dXJuIGZhY2VfY2FjaGU7DQotfQ0KLXZvaWQgQ0ZYX0ZvbnRDYWNoZTo6UmVsZWFzZUNhY2hlZEZhY2UoQ0ZYX0ZvbnQqIHBGb250KQ0KLXsNCi0gICAgRlhfQk9PTCBiRXh0ZXJuYWwgPSBwRm9udC0+R2V0RmFjZSgpID09IE5VTEw7DQotICAgIHZvaWQqIGZhY2UgPSBiRXh0ZXJuYWwgPyBwRm9udC0+R2V0U3Vic3RGb250KCktPm1fRXh0SGFuZGxlIDogcEZvbnQtPkdldEZhY2UoKTsNCi0gICAgQ0ZYX0ZUQ2FjaGVNYXAmIG1hcCA9ICBiRXh0ZXJuYWwgPyBtX0V4dEZhY2VNYXAgOiBtX0ZURmFjZU1hcDsNCi0gICAgQ0ZYX0NvdW50ZWRGYWNlQ2FjaGUqIGNvdW50ZWRfZmFjZV9jYWNoZSA9IE5VTEw7DQotICAgIGlmICghbWFwLkxvb2t1cCgoRlhGVF9GYWNlKWZhY2UsIGNvdW50ZWRfZmFjZV9jYWNoZSkpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAoY291bnRlZF9mYWNlX2NhY2hlLT5tX25Db3VudCA+IDEpIHsNCi0gICAgICAgIGNvdW50ZWRfZmFjZV9jYWNoZS0+bV9uQ291bnQtLTsNCi0gICAgfQ0KLX0NCi12b2lkIENGWF9Gb250Q2FjaGU6OkZyZWVDYWNoZShGWF9CT09MIGJSZWxlYXNlKQ0KLXsNCi0gICAgew0KLSAgICAgICAgRlhfUE9TSVRJT04gcG9zOw0KLSAgICAgICAgcG9zID0gbV9GVEZhY2VNYXAuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICAgICAgd2hpbGUgKHBvcykgew0KLSAgICAgICAgICAgIEZYRlRfRmFjZSBmYWNlOw0KLSAgICAgICAgICAgIENGWF9Db3VudGVkRmFjZUNhY2hlKiBjYWNoZTsNCi0gICAgICAgICAgICBtX0ZURmFjZU1hcC5HZXROZXh0QXNzb2MocG9zLCBmYWNlLCBjYWNoZSk7DQotICAgICAgICAgICAgaWYgKGJSZWxlYXNlIHx8IGNhY2hlLT5tX25Db3VudCA8IDIpIHsNCi0gICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hlLT5tX09iajsNCi0gICAgICAgICAgICAgICAgZGVsZXRlIGNhY2hlOw0KLSAgICAgICAgICAgICAgICBtX0ZURmFjZU1hcC5SZW1vdmVLZXkoZmFjZSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcG9zID0gbV9FeHRGYWNlTWFwLkdldFN0YXJ0UG9zaXRpb24oKTsNCi0gICAgICAgIHdoaWxlIChwb3MpIHsNCi0gICAgICAgICAgICBGWEZUX0ZhY2UgZmFjZTsNCi0gICAgICAgICAgICBDRlhfQ291bnRlZEZhY2VDYWNoZSogY2FjaGU7DQotICAgICAgICAgICAgbV9FeHRGYWNlTWFwLkdldE5leHRBc3NvYyhwb3MsIGZhY2UsIGNhY2hlKTsNCi0gICAgICAgICAgICBpZiAoYlJlbGVhc2UgfHwgY2FjaGUtPm1fbkNvdW50IDwgMikgew0KLSAgICAgICAgICAgICAgICBkZWxldGUgY2FjaGUtPm1fT2JqOw0KLSAgICAgICAgICAgICAgICBkZWxldGUgY2FjaGU7DQotICAgICAgICAgICAgICAgIG1fRXh0RmFjZU1hcC5SZW1vdmVLZXkoZmFjZSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLUNGWF9GYWNlQ2FjaGU6OkNGWF9GYWNlQ2FjaGUoRlhGVF9GYWNlIGZhY2UpDQotew0KLSAgICBtX0ZhY2UgPSBmYWNlOw0KLSAgICBtX3BCaXRtYXAgPSBOVUxMOw0KLX0NCi1DRlhfRmFjZUNhY2hlOjp+Q0ZYX0ZhY2VDYWNoZSgpDQotew0KLSAgICBGWF9QT1NJVElPTiBwb3MgPSBtX1NpemVNYXAuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICBDRlhfQnl0ZVN0cmluZyBLZXk7DQotICAgIENGWF9TaXplR2x5cGhDYWNoZSogcFNpemVDYWNoZSA9IE5VTEw7DQotICAgIHdoaWxlKHBvcykgew0KLSAgICAgICAgbV9TaXplTWFwLkdldE5leHRBc3NvYyggcG9zLCBLZXksICh2b2lkKiYpcFNpemVDYWNoZSk7DQotICAgICAgICBkZWxldGUgcFNpemVDYWNoZTsNCi0gICAgfQ0KLSAgICBtX1NpemVNYXAuUmVtb3ZlQWxsKCk7DQotICAgIHBvcyA9IG1fUGF0aE1hcC5HZXRTdGFydFBvc2l0aW9uKCk7DQotICAgIEZYX0xQVk9JRCBrZXkxOw0KLSAgICBDRlhfUGF0aERhdGEqIHBQYXRoOw0KLSAgICB3aGlsZSAocG9zKSB7DQotICAgICAgICBtX1BhdGhNYXAuR2V0TmV4dEFzc29jKHBvcywga2V5MSwgKEZYX0xQVk9JRCYpcFBhdGgpOw0KLSAgICAgICAgZGVsZXRlIHBQYXRoOw0KLSAgICB9DQotICAgIGlmIChtX3BCaXRtYXApIHsNCi0gICAgICAgIGRlbGV0ZSBtX3BCaXRtYXA7DQotICAgIH0NCi0gICAgbV9QYXRoTWFwLlJlbW92ZUFsbCgpOw0KLX0NCi0jaWYgKChfRlhNX1BMQVRGT1JNXyAgIT0gX0ZYTV9QTEFURk9STV9BUFBMRV8pfHwgZGVmaW5lZChfRlBERkFQSV9NSU5JXykpDQotdm9pZCBDRlhfRmFjZUNhY2hlOjpJbml0UGxhdGZvcm0oKQ0KLXsNCi19DQotI2VuZGlmDQotQ0ZYX0dseXBoQml0bWFwKiBDRlhfRmFjZUNhY2hlOjpMb29rVXBHbHlwaEJpdG1hcChDRlhfRm9udCogcEZvbnQsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsDQotICAgICAgICBDRlhfQnl0ZVN0cmluZ0MmIEZhY2VHbHlwaHNLZXksIEZYX0RXT1JEIGdseXBoX2luZGV4LCBGWF9CT09MIGJGb250U3R5bGUsDQotICAgICAgICBpbnQgZGVzdF93aWR0aCwgaW50IGFudGlfYWxpYXMpDQotew0KLSAgICBDRlhfU2l6ZUdseXBoQ2FjaGUqIHBTaXplQ2FjaGUgPSBOVUxMOw0KLSAgICBpZiAoIW1fU2l6ZU1hcC5Mb29rdXAoRmFjZUdseXBoc0tleSwgKHZvaWQqJilwU2l6ZUNhY2hlKSkgew0KLSAgICAgICAgcFNpemVDYWNoZSA9IEZYX05FVyBDRlhfU2l6ZUdseXBoQ2FjaGU7DQotICAgICAgICBpZiAocFNpemVDYWNoZSA9PSBOVUxMKQl7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBtX1NpemVNYXAuU2V0QXQoRmFjZUdseXBoc0tleSwgcFNpemVDYWNoZSk7DQotICAgIH0NCi0gICAgQ0ZYX0dseXBoQml0bWFwKiBwR2x5cGhCaXRtYXAgPSBOVUxMOw0KLSAgICBpZiAocFNpemVDYWNoZS0+bV9HbHlwaE1hcC5Mb29rdXAoKEZYX0xQVk9JRCkoRlhfVUlOVFBUUilnbHlwaF9pbmRleCwgKHZvaWQqJilwR2x5cGhCaXRtYXApKSB7DQotICAgICAgICByZXR1cm4gcEdseXBoQml0bWFwOw0KLSAgICB9DQotICAgIHBHbHlwaEJpdG1hcCA9IFJlbmRlckdseXBoKHBGb250LCBnbHlwaF9pbmRleCwgYkZvbnRTdHlsZSwgcE1hdHJpeCwgZGVzdF93aWR0aCwgYW50aV9hbGlhcyk7DQotICAgIGlmIChwR2x5cGhCaXRtYXAgPT0gTlVMTCkJew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcFNpemVDYWNoZS0+bV9HbHlwaE1hcC5TZXRBdCgoRlhfTFBWT0lEKShGWF9VSU5UUFRSKWdseXBoX2luZGV4LCBwR2x5cGhCaXRtYXApOw0KLSAgICByZXR1cm4gcEdseXBoQml0bWFwOw0KLX0NCi1jb25zdCBDRlhfR2x5cGhCaXRtYXAqIENGWF9GYWNlQ2FjaGU6OkxvYWRHbHlwaEJpdG1hcChDRlhfRm9udCogcEZvbnQsIEZYX0RXT1JEIGdseXBoX2luZGV4LCBGWF9CT09MIGJGb250U3R5bGUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsDQotICAgICAgICBpbnQgZGVzdF93aWR0aCwgaW50IGFudGlfYWxpYXMsIGludCYgdGV4dF9mbGFncykNCi17DQotICAgIGlmIChnbHlwaF9pbmRleCA9PSAoRlhfRFdPUkQpIC0gMSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgX0NGWF9VbmlxdWVLZXlHZW4ga2V5Z2VuOw0KLSNpZiAoKF9GWE1fUExBVEZPUk1fICAhPSBfRlhNX1BMQVRGT1JNX0FQUExFXyl8fCBkZWZpbmVkKF9GUERGQVBJX01JTklfKSkNCi0gICAgaWYgKHBGb250LT5HZXRTdWJzdEZvbnQoKSkNCi0gICAgICAgIGtleWdlbi5HZW5lcmF0ZSg5LCAoaW50KShwTWF0cml4LT5hICogMTAwMDApLCAoaW50KShwTWF0cml4LT5iICogMTAwMDApLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKHBNYXRyaXgtPmMgKiAxMDAwMCksIChpbnQpKHBNYXRyaXgtPmQgKiAxMDAwMCksIGRlc3Rfd2lkdGgsIGFudGlfYWxpYXMsDQotICAgICAgICAgICAgICAgICAgICAgICAgcEZvbnQtPkdldFN1YnN0Rm9udCgpLT5tX1dlaWdodCwgcEZvbnQtPkdldFN1YnN0Rm9udCgpLT5tX0l0YWxpY0FuZ2xlLCBwRm9udC0+SXNWZXJ0aWNhbCgpKTsNCi0gICAgZWxzZQ0KLSAgICAgICAga2V5Z2VuLkdlbmVyYXRlKDYsIChpbnQpKHBNYXRyaXgtPmEgKiAxMDAwMCksIChpbnQpKHBNYXRyaXgtPmIgKiAxMDAwMCksDQotICAgICAgICAgICAgICAgICAgICAgICAgKGludCkocE1hdHJpeC0+YyAqIDEwMDAwKSwgKGludCkocE1hdHJpeC0+ZCAqIDEwMDAwKSwgZGVzdF93aWR0aCwgYW50aV9hbGlhcyk7DQotI2Vsc2UNCi0gICAgaWYgKHRleHRfZmxhZ3MgJiBGWFRFWFRfTk9fTkFUSVZFVEVYVCkgew0KLSAgICAgICAgaWYgKHBGb250LT5HZXRTdWJzdEZvbnQoKSkNCi0gICAgICAgICAgICBrZXlnZW4uR2VuZXJhdGUoOSwgKGludCkocE1hdHJpeC0+YSAqIDEwMDAwKSwgKGludCkocE1hdHJpeC0+YiAqIDEwMDAwKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkocE1hdHJpeC0+YyAqIDEwMDAwKSwgKGludCkocE1hdHJpeC0+ZCAqIDEwMDAwKSwgZGVzdF93aWR0aCwgYW50aV9hbGlhcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcEZvbnQtPkdldFN1YnN0Rm9udCgpLT5tX1dlaWdodCwgcEZvbnQtPkdldFN1YnN0Rm9udCgpLT5tX0l0YWxpY0FuZ2xlLCBwRm9udC0+SXNWZXJ0aWNhbCgpKTsNCi0gICAgICAgIGVsc2UNCi0gICAgICAgICAgICBrZXlnZW4uR2VuZXJhdGUoNiwgKGludCkocE1hdHJpeC0+YSAqIDEwMDAwKSwgKGludCkocE1hdHJpeC0+YiAqIDEwMDAwKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkocE1hdHJpeC0+YyAqIDEwMDAwKSwgKGludCkocE1hdHJpeC0+ZCAqIDEwMDAwKSwgZGVzdF93aWR0aCwgYW50aV9hbGlhcyk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZiAocEZvbnQtPkdldFN1YnN0Rm9udCgpKQ0KLSAgICAgICAgICAgIGtleWdlbi5HZW5lcmF0ZSgxMCwgKGludCkocE1hdHJpeC0+YSAqIDEwMDAwKSwgKGludCkocE1hdHJpeC0+YiAqIDEwMDAwKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkocE1hdHJpeC0+YyAqIDEwMDAwKSwgKGludCkocE1hdHJpeC0+ZCAqIDEwMDAwKSwgZGVzdF93aWR0aCwgYW50aV9hbGlhcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcEZvbnQtPkdldFN1YnN0Rm9udCgpLT5tX1dlaWdodCwgcEZvbnQtPkdldFN1YnN0Rm9udCgpLT5tX0l0YWxpY0FuZ2xlLCBwRm9udC0+SXNWZXJ0aWNhbCgpLCAzKTsNCi0gICAgICAgIGVsc2UNCi0gICAgICAgICAgICBrZXlnZW4uR2VuZXJhdGUoNywgKGludCkocE1hdHJpeC0+YSAqIDEwMDAwKSwgKGludCkocE1hdHJpeC0+YiAqIDEwMDAwKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkocE1hdHJpeC0+YyAqIDEwMDAwKSwgKGludCkocE1hdHJpeC0+ZCAqIDEwMDAwKSwgZGVzdF93aWR0aCwgYW50aV9hbGlhcywgMyk7DQotICAgIH0NCi0jZW5kaWYNCi0gICAgQ0ZYX0J5dGVTdHJpbmdDIEZhY2VHbHlwaHNLZXkoa2V5Z2VuLm1fS2V5LCBrZXlnZW4ubV9LZXlMZW4pOw0KLSNpZiAoKF9GWE1fUExBVEZPUk1fICAhPSBfRlhNX1BMQVRGT1JNX0FQUExFXyl8fCBkZWZpbmVkKF9GUERGQVBJX01JTklfKSkNCi0gICAgcmV0dXJuIExvb2tVcEdseXBoQml0bWFwKHBGb250LCBwTWF0cml4LCBGYWNlR2x5cGhzS2V5LCBnbHlwaF9pbmRleCwgYkZvbnRTdHlsZSwgZGVzdF93aWR0aCwgYW50aV9hbGlhcyk7DQotI2Vsc2UNCi0gICAgaWYgKHRleHRfZmxhZ3MgJiBGWFRFWFRfTk9fTkFUSVZFVEVYVCkgew0KLSAgICAgICAgcmV0dXJuIExvb2tVcEdseXBoQml0bWFwKHBGb250LCBwTWF0cml4LCBGYWNlR2x5cGhzS2V5LCBnbHlwaF9pbmRleCwgYkZvbnRTdHlsZSwgZGVzdF93aWR0aCwgYW50aV9hbGlhcyk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBDRlhfR2x5cGhCaXRtYXAqIHBHbHlwaEJpdG1hcDsNCi0gICAgICAgIENGWF9TaXplR2x5cGhDYWNoZSogcFNpemVDYWNoZSA9IE5VTEw7DQotICAgICAgICBpZiAobV9TaXplTWFwLkxvb2t1cChGYWNlR2x5cGhzS2V5LCAodm9pZComKXBTaXplQ2FjaGUpKSB7DQotICAgICAgICAgICAgaWYgKHBTaXplQ2FjaGUtPm1fR2x5cGhNYXAuTG9va3VwKChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpZ2x5cGhfaW5kZXgsICh2b2lkKiYpcEdseXBoQml0bWFwKSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gcEdseXBoQml0bWFwOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBwR2x5cGhCaXRtYXAgPSBSZW5kZXJHbHlwaF9OYXRpdmV0ZXh0KHBGb250LCBnbHlwaF9pbmRleCwgcE1hdHJpeCwgZGVzdF93aWR0aCwgYW50aV9hbGlhcyk7DQotICAgICAgICAgICAgaWYgKHBHbHlwaEJpdG1hcCkgew0KLSAgICAgICAgICAgICAgICBwU2l6ZUNhY2hlLT5tX0dseXBoTWFwLlNldEF0KChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpZ2x5cGhfaW5kZXgsIHBHbHlwaEJpdG1hcCk7DQotICAgICAgICAgICAgICAgIHJldHVybiBwR2x5cGhCaXRtYXA7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBwR2x5cGhCaXRtYXAgPSBSZW5kZXJHbHlwaF9OYXRpdmV0ZXh0KHBGb250LCBnbHlwaF9pbmRleCwgcE1hdHJpeCwgZGVzdF93aWR0aCwgYW50aV9hbGlhcyk7DQotICAgICAgICAgICAgaWYgKHBHbHlwaEJpdG1hcCkgew0KLSAgICAgICAgICAgICAgICBwU2l6ZUNhY2hlID0gRlhfTkVXIENGWF9TaXplR2x5cGhDYWNoZTsNCi0gICAgICAgICAgICAgICAgaWYgKHBTaXplQ2FjaGUgPT0gTlVMTCkJew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbV9TaXplTWFwLlNldEF0KEZhY2VHbHlwaHNLZXksIHBTaXplQ2FjaGUpOw0KLSAgICAgICAgICAgICAgICBwU2l6ZUNhY2hlLT5tX0dseXBoTWFwLlNldEF0KChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpZ2x5cGhfaW5kZXgsIHBHbHlwaEJpdG1hcCk7DQotICAgICAgICAgICAgICAgIHJldHVybiBwR2x5cGhCaXRtYXA7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHBGb250LT5HZXRTdWJzdEZvbnQoKSkNCi0gICAgICAgICAgICBrZXlnZW4uR2VuZXJhdGUoOSwgKGludCkocE1hdHJpeC0+YSAqIDEwMDAwKSwgKGludCkocE1hdHJpeC0+YiAqIDEwMDAwKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkocE1hdHJpeC0+YyAqIDEwMDAwKSwgKGludCkocE1hdHJpeC0+ZCAqIDEwMDAwKSwgZGVzdF93aWR0aCwgYW50aV9hbGlhcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcEZvbnQtPkdldFN1YnN0Rm9udCgpLT5tX1dlaWdodCwgcEZvbnQtPkdldFN1YnN0Rm9udCgpLT5tX0l0YWxpY0FuZ2xlLCBwRm9udC0+SXNWZXJ0aWNhbCgpKTsNCi0gICAgICAgIGVsc2UNCi0gICAgICAgICAgICBrZXlnZW4uR2VuZXJhdGUoNiwgKGludCkocE1hdHJpeC0+YSAqIDEwMDAwKSwgKGludCkocE1hdHJpeC0+YiAqIDEwMDAwKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkocE1hdHJpeC0+YyAqIDEwMDAwKSwgKGludCkocE1hdHJpeC0+ZCAqIDEwMDAwKSwgZGVzdF93aWR0aCwgYW50aV9hbGlhcyk7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZ0MgRmFjZUdseXBoc0tleShrZXlnZW4ubV9LZXksIGtleWdlbi5tX0tleUxlbik7DQotICAgICAgICB0ZXh0X2ZsYWdzIHw9IEZYVEVYVF9OT19OQVRJVkVURVhUOw0KLSAgICAgICAgcmV0dXJuIExvb2tVcEdseXBoQml0bWFwKHBGb250LCBwTWF0cml4LCBGYWNlR2x5cGhzS2V5LCBnbHlwaF9pbmRleCwgYkZvbnRTdHlsZSwgZGVzdF93aWR0aCwgYW50aV9hbGlhcyk7DQotICAgIH0NCi0jZW5kaWYNCi19DQotQ0ZYX1NpemVHbHlwaENhY2hlOjp+Q0ZYX1NpemVHbHlwaENhY2hlKCkNCi17DQotICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fR2x5cGhNYXAuR2V0U3RhcnRQb3NpdGlvbigpOw0KLSAgICBGWF9MUFZPSUQgS2V5Ow0KLSAgICBDRlhfR2x5cGhCaXRtYXAqIHBHbHlwaEJpdG1hcCA9IE5VTEw7DQotICAgIHdoaWxlKHBvcykgew0KLSAgICAgICAgbV9HbHlwaE1hcC5HZXROZXh0QXNzb2MocG9zLCBLZXksICh2b2lkKiYpcEdseXBoQml0bWFwKTsNCi0gICAgICAgIGRlbGV0ZSBwR2x5cGhCaXRtYXA7DQotICAgIH0NCi0gICAgbV9HbHlwaE1hcC5SZW1vdmVBbGwoKTsNCi19DQotI2lmIGRlZmluZWQoX0ZQREZBUElfTUlOSV8pDQotI2RlZmluZSBDT05UUkFTVF9SQU1QX1NURVAJMTYNCi0jZWxzZQ0KLSNkZWZpbmUgQ09OVFJBU1RfUkFNUF9TVEVQCTENCi0jZW5kaWYNCi1zdGF0aWMgY29uc3QgRlhfQllURSBnX2FkanVzdF9jb250cmFzdDExWzI1Nl0gPSB7DQotICAgIDAsIDAsIDIsIDMsIDQsIDUsIDYsIDgsIDksIDEwLCAxMSwgMTMsIDE0LCAxNSwgMTcsIDE4LCAxOSwgMjEsIDIyLCAyNCwgMjUsIDI2LCAyOCwgMjksIDMxLA0KLSAgICAzMiwgMzMsIDM1LCAzNiwgMzgsIDM5LCA0MCwgNDIsIDQzLCA0NSwgNDYsIDQ4LCA0OSwgNTEsIDUyLCA1NCwgNTUsIDU2LCA1OCwgNTksIDYxLCA2MiwgNjQsIDY1LA0KLSAgICA2NywgNjgsIDcwLCA3MSwgNzIsIDc0LCA3NSwgNzcsIDc4LCA4MCwgODEsIDgzLCA4NCwgODYsIDg3LCA4OSwgOTAsIDkxLCA5MywgOTQsIDk2LCA5NywgOTksIDEwMCwNCi0gICAgMTAxLCAxMDMsIDEwNCwgMTA2LCAxMDcsIDEwOSwgMTEwLCAxMTEsIDExMywgMTE0LCAxMTYsIDExNywgMTE4LCAxMjAsIDEyMSwgMTIzLCAxMjQsIDEyNSwgMTI3LA0KLSAgICAxMjgsIDEzMCwgMTMxLCAxMzIsIDEzNCwgMTM1LCAxMzYsIDEzOCwgMTM5LCAxNDAsIDE0MiwgMTQzLCAxNDQsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUxLCAxNTIsDQotICAgIDE1MywgMTU1LCAxNTYsIDE1NywgMTU4LCAxNjAsIDE2MSwgMTYyLCAxNjMsIDE2NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzEsIDE3MiwgMTczLCAxNzQsIDE3NSwNCi0gICAgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgzLCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsIDE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LA0KLSAgICAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywgMjA4LCAyMDksIDIxMCwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsDQotICAgIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgMjIxLCAyMjIsIDIyMywgMjI0LCAyMjQsIDIyNSwgMjI2LCAyMjcsIDIyNywgMjI4LCAyMjksIDIzMCwNCi0gICAgMjMwLCAyMzEsIDIzMiwgMjMyLCAyMzMsIDIzNCwgMjM0LCAyMzUsIDIzNiwgMjM2LCAyMzcsIDIzNywgMjM4LCAyMzksIDIzOSwgMjQwLCAyNDAsIDI0MSwgMjQxLA0KLSAgICAyNDIsIDI0MiwgMjQzLCAyNDMsIDI0NCwgMjQ0LCAyNDUsIDI0NSwgMjQ2LCAyNDYsIDI0NiwgMjQ3LCAyNDcsIDI0OCwgMjQ4LCAyNDgsIDI0OSwgMjQ5LCAyNDksDQotICAgIDI1MCwgMjUwLCAyNTAsIDI1MSwgMjUxLCAyNTEsIDI1MSwgMjUyLCAyNTIsIDI1MiwgMjUyLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTQsIDI1NCwNCi0gICAgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NSwNCi19Ow0KLXN0YXRpYyBjb25zdCBGWF9CWVRFIGdfYWRqdXN0X2NvbnRyYXN0MTVbMjU2XSA9IHsNCi0gICAgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMiwgMiwgMywgMywgNCwgNSwgNSwgNiwgNywgNywgOCwgOSwgMTAsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsDQotICAgIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzQsIDM1LCAzNiwgMzcsIDM4LCA0MCwgNDEsIDQyLCA0MywgNDUsIDQ2LCA0NywgNDgsIDUwLCA1MSwNCi0gICAgNTIsIDU0LCA1NSwgNTYsIDU4LCA1OSwgNjAsIDYyLCA2MywgNjQsIDY2LCA2NywgNjgsIDcwLCA3MSwgNzMsIDc0LCA3NSwgNzcsIDc4LCA4MCwgODEsIDgyLCA4NCwgODUsIDg3LA0KLSAgICA4OCwgOTAsIDkxLCA5MywgOTQsIDk1LCA5NywgOTgsIDEwMCwgMTAxLCAxMDMsIDEwNCwgMTA2LCAxMDcsIDEwOSwgMTEwLCAxMTEsIDExMywgMTE0LCAxMTYsIDExNywgMTE5LA0KLSAgICAxMjAsIDEyMiwgMTIzLCAxMjUsIDEyNiwgMTI4LCAxMjksIDEzMCwgMTMyLCAxMzMsIDEzNSwgMTM2LCAxMzgsIDEzOSwgMTQxLCAxNDIsIDE0MywgMTQ1LCAxNDYsIDE0OCwNCi0gICAgMTQ5LCAxNTAsIDE1MiwgMTUzLCAxNTUsIDE1NiwgMTU3LCAxNTksIDE2MCwgMTYxLCAxNjMsIDE2NCwgMTY2LCAxNjcsIDE2OCwgMTcwLCAxNzEsIDE3MiwgMTc0LCAxNzUsDQotICAgIDE3NiwgMTc3LCAxNzksIDE4MCwgMTgxLCAxODMsIDE4NCwgMTg1LCAxODYsIDE4OCwgMTg5LCAxOTAsIDE5MSwgMTkyLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5LA0KLSAgICAyMDEsIDIwMiwgMjAzLCAyMDQsIDIwNSwgMjA2LCAyMDcsIDIwOCwgMjA5LCAyMTAsIDIxMSwgMjEyLCAyMTMsIDIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIyMCwNCi0gICAgMjIxLCAyMjIsIDIyMywgMjI0LCAyMjUsIDIyNiwgMjI3LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzIsIDIzMywgMjM0LCAyMzUsIDIzNSwgMjM2LCAyMzcsDQotICAgIDIzNywgMjM4LCAyMzksIDIzOSwgMjQwLCAyNDEsIDI0MSwgMjQyLCAyNDIsIDI0MywgMjQ0LCAyNDQsIDI0NSwgMjQ1LCAyNDYsIDI0NiwgMjQ3LCAyNDcsIDI0OCwgMjQ4LA0KLSAgICAyNDgsIDI0OSwgMjQ5LCAyNTAsIDI1MCwgMjUwLCAyNTEsIDI1MSwgMjUxLCAyNTIsIDI1MiwgMjUyLCAyNTIsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTQsIDI1NCwNCi0gICAgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU1LA0KLX07DQotc3RhdGljIHZvaWQgX0NhbGNDb250cmFzdFJhbXAoRlhfTFBCWVRFIHJhbXAsIGludCBsZXZlbCkNCi17DQotICAgIGludCBjb250cmFzdF9taW4gPSAwLCBjb250cmFzdF9tYXggPSAyNTUgLSBsZXZlbCwgaTsNCi0gICAgZm9yIChpID0gMDsgaSA8IGNvbnRyYXN0X21pbjsgaSArKykgew0KLSAgICAgICAgcmFtcFtpXSA9IDA7DQotICAgIH0NCi0gICAgZm9yIChpID0gY29udHJhc3RfbWluOyBpIDwgY29udHJhc3RfbWF4OyBpICsrKSB7DQotICAgICAgICByYW1wW2ldID0gMjU1ICogKGkgLSBjb250cmFzdF9taW4pIC8gKGNvbnRyYXN0X21heCAtIGNvbnRyYXN0X21pbik7DQotICAgIH0NCi0gICAgZm9yIChpID0gY29udHJhc3RfbWF4OyBpIDwgMjU2OyBpICsrKSB7DQotICAgICAgICByYW1wW2ldID0gMjU1Ow0KLSAgICB9DQotfQ0KLXZvaWQgQ0ZYX0ZvbnQ6OkFkanVzdE1NUGFyYW1zKGludCBnbHlwaF9pbmRleCwgaW50IGRlc3Rfd2lkdGgsIGludCB3ZWlnaHQpDQotew0KLSAgICBGWEZUX01NX1ZhciBwTWFzdGVycyA9IE5VTEw7DQotICAgIEZYRlRfR2V0X01NX1ZhcihtX0ZhY2UsICZwTWFzdGVycyk7DQotICAgIGlmIChwTWFzdGVycyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgbG9uZyBjb29yZHNbMl07DQotICAgIGlmICh3ZWlnaHQgPT0gMCkgew0KLSAgICAgICAgY29vcmRzWzBdID0gRlhGVF9HZXRfTU1fQXhpc19EZWYoRlhGVF9HZXRfTU1fQXhpcyhwTWFzdGVycywgMCkpIC8gNjU1MzY7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBjb29yZHNbMF0gPSB3ZWlnaHQ7DQotICAgIH0NCi0gICAgaWYgKGRlc3Rfd2lkdGggPT0gMCkgew0KLSAgICAgICAgY29vcmRzWzFdID0gRlhGVF9HZXRfTU1fQXhpc19EZWYoRlhGVF9HZXRfTU1fQXhpcyhwTWFzdGVycywgMSkpIC8gNjU1MzY7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpbnQgbWluX3BhcmFtID0gRlhGVF9HZXRfTU1fQXhpc19NaW4oRlhGVF9HZXRfTU1fQXhpcyhwTWFzdGVycywgMSkpIC8gNjU1MzY7DQotICAgICAgICBpbnQgbWF4X3BhcmFtID0gRlhGVF9HZXRfTU1fQXhpc19NYXgoRlhGVF9HZXRfTU1fQXhpcyhwTWFzdGVycywgMSkpIC8gNjU1MzY7DQotICAgICAgICBjb29yZHNbMV0gPSBtaW5fcGFyYW07DQotICAgICAgICBpbnQgZXJyb3IgPSBGWEZUX1NldF9NTV9EZXNpZ25fQ29vcmRpbmF0ZXMobV9GYWNlLCAyLCBjb29yZHMpOw0KLSAgICAgICAgZXJyb3IgPSBGWEZUX0xvYWRfR2x5cGgobV9GYWNlLCBnbHlwaF9pbmRleCwgRlhGVF9MT0FEX05PX1NDQUxFIHwgRlhGVF9MT0FEX0lHTk9SRV9HTE9CQUxfQURWQU5DRV9XSURUSCk7DQotICAgICAgICBpbnQgbWluX3dpZHRoID0gRlhGVF9HZXRfR2x5cGhfSG9yaUFkdmFuY2UobV9GYWNlKSAqIDEwMDAgLyBGWEZUX0dldF9GYWNlX1VuaXRzUGVyRU0obV9GYWNlKTsNCi0gICAgICAgIGNvb3Jkc1sxXSA9IG1heF9wYXJhbTsNCi0gICAgICAgIGVycm9yID0gRlhGVF9TZXRfTU1fRGVzaWduX0Nvb3JkaW5hdGVzKG1fRmFjZSwgMiwgY29vcmRzKTsNCi0gICAgICAgIGVycm9yID0gRlhGVF9Mb2FkX0dseXBoKG1fRmFjZSwgZ2x5cGhfaW5kZXgsIEZYRlRfTE9BRF9OT19TQ0FMRSB8IEZYRlRfTE9BRF9JR05PUkVfR0xPQkFMX0FEVkFOQ0VfV0lEVEgpOw0KLSAgICAgICAgaW50IG1heF93aWR0aCA9IEZYRlRfR2V0X0dseXBoX0hvcmlBZHZhbmNlKG1fRmFjZSkgKiAxMDAwIC8gRlhGVF9HZXRfRmFjZV9Vbml0c1BlckVNKG1fRmFjZSk7DQotICAgICAgICBpZiAobWF4X3dpZHRoID09IG1pbl93aWR0aCkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBwYXJhbSA9IG1pbl9wYXJhbSArIChtYXhfcGFyYW0gLSBtaW5fcGFyYW0pICogKGRlc3Rfd2lkdGggLSBtaW5fd2lkdGgpIC8gKG1heF93aWR0aCAtIG1pbl93aWR0aCk7DQotICAgICAgICBjb29yZHNbMV0gPSBwYXJhbTsNCi0gICAgfQ0KLSAgICBGWEZUX0ZyZWUobV9GYWNlLCBwTWFzdGVycyk7DQotICAgIEZYRlRfU2V0X01NX0Rlc2lnbl9Db29yZGluYXRlcyhtX0ZhY2UsIDIsIGNvb3Jkcyk7DQotfQ0KLWV4dGVybiBjb25zdCBjaGFyIGdfQW5nbGVTa2V3WzMwXSA9IHsNCi0gICAgMCwgMiwgMywgNSwgNywgOSwgMTEsIDEyLCAxNCwgMTYsDQotICAgIDE4LCAxOSwgMjEsIDIzLCAyNSwgMjcsIDI5LCAzMSwgMzIsIDM0LA0KLSAgICAzNiwgMzgsIDQwLCA0MiwgNDUsIDQ3LCA0OSwgNTEsIDUzLCA1NSwNCi19Ow0KLXN0YXRpYyBjb25zdCBGWF9CWVRFIGdfV2VpZ2h0UG93WzEwMF0gPSB7DQotICAgIDAsIDMsIDYsIDcsIDgsIDksIDExLCAxMiwgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsDQotICAgIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM1LCAzNiwgMzYsDQotICAgIDM3LCAzNywgMzcsIDM4LCAzOCwgMzgsIDM5LCAzOSwgMzksIDQwLCA0MCwgNDAsIDQxLCA0MSwgNDEsIDQyLCA0MiwgNDIsDQotICAgIDQyLCA0MywgNDMsIDQzLCA0NCwgNDQsIDQ0LCA0NCwgNDUsIDQ1LCA0NSwgNDUsIDQ2LCA0NiwgNDYsIDQ2LCA0NywgNDcsDQotICAgIDQ3LCA0NywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OSwgNDksIDQ5LCA0OSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MSwgNTEsDQotICAgIDUxLCA1MSwgNTEsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTMsIDUzLCA1MywgNTMsIDUzLA0KLX07DQotZXh0ZXJuIGNvbnN0IEZYX0JZVEUgZ19XZWlnaHRQb3dfMTFbMTAwXSA9IHsNCi0gICAgMCwgNCwgNywgOCwgOSwgMTAsIDEyLCAxMywgMTUsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsDQotICAgIDIzLCAyNCwgMjUsIDI2LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzksIDM5LCA0MCwgNDAsDQotICAgIDQxLCA0MSwgNDEsIDQyLCA0MiwgNDIsIDQzLCA0MywgNDMsIDQ0LCA0NCwgNDQsIDQ1LCA0NSwgNDUsIDQ2LCA0NiwgNDYsDQotICAgIDQ2LCA0MywgNDcsIDQ3LCA0OCwgNDgsIDQ4LCA0OCwgNDUsIDUwLCA1MCwgNTAsIDQ2LCA1MSwgNTEsIDUxLCA1MiwgNTIsDQotICAgIDUyLCA1MiwgNTMsIDUzLCA1MywgNTMsIDUzLCA1NCwgNTQsIDU0LCA1NCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NiwgNTYsDQotICAgIDU2LCA1NiwgNTYsIDU3LCA1NywgNTcsIDU3LCA1NywgNTgsIDU4LCA1OCwgNTgsIDU4LA0KLX07DQotZXh0ZXJuIGNvbnN0IEZYX0JZVEUgZ19XZWlnaHRQb3dfU0hJRlRKSVNbMTAwXSA9IHsNCi0gICAgMCwgMCwgMSwgMiwgMywgNCwgNSwgNywgOCwgMTAsIDExLCAxMywgMTQsIDE2LCAxNywgMTksIDIxLCAyMiwgMjQsIDI2LCAyOCwNCi0gICAgMzAsIDMyLCAzMywgMzUsIDM3LCAzOSwgNDEsIDQzLCA0NSwgNDgsIDQ4LCA0OCwgNDgsIDQ5LCA0OSwgNDksIDUwLCA1MCwgNTAsIDUwLA0KLSAgICA1MSwgNTEsIDUxLCA1MSwgNTIsIDUyLCA1MiwgNTIsIDUyLCA1MywgNTMsIDUzLCA1MywgNTMsIDU0LCA1NCwgNTQsIDU0LCA1NCwgNTUsIDU1LA0KLSAgICA1NSwgNTUsIDU1LCA1NiwgNTYsIDU2LCA1NiwgNTYgLCA1NiwgNTcsIDU3LCA1NyAsIDU3ICwgNTcsIDU3LCA1NywgNTgsIDU4LCA1OCwgNTgsIDU4LA0KLSAgICA1OCwgNTgsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsDQotfTsNCi1zdGF0aWMgdm9pZCBfR2FtbWFBZGp1c3QoRlhfTFBCWVRFIHBEYXRhLCBpbnQgbldpZCwgaW50IG5IZWksIGludCBzcmNfcGl0Y2gsIEZYX0xQQ0JZVEUgZ2FtbWFUYWJsZSkNCi17DQotICAgIGludCBjb3VudCA9IG5IZWkgKiBzcmNfcGl0Y2g7DQotICAgIGZvcihpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7DQotICAgICAgICBwRGF0YVtpXSA9IGdhbW1hVGFibGVbcERhdGFbaV1dOw0KLSAgICB9DQotfQ0KLXN0YXRpYyB2b2lkIF9Db250cmFzdEFkanVzdChGWF9MUEJZVEUgcERhdGFJbiwgRlhfTFBCWVRFIHBEYXRhT3V0LCBpbnQgbldpZCwgaW50IG5IZWksIGludCBuU3JjUm93Qnl0ZXMsIGludCBuRHN0Um93Qnl0ZXMpDQotew0KLSAgICBpbnQgY29sLCByb3csIHRlbXA7DQotICAgIGludCBtYXggPSAwLCBtaW4gPSAyNTU7DQotICAgIEZYX0ZMT0FUIHJhdGU7DQotICAgIGZvciAocm93ID0gMDsgcm93IDwgbkhlaTsgcm93ICsrKSB7DQotICAgICAgICBGWF9MUEJZVEUgcFJvdyA9IHBEYXRhSW4gKyByb3cgKiBuU3JjUm93Qnl0ZXM7DQotICAgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IG5XaWQ7IGNvbCsrKSB7DQotICAgICAgICAgICAgdGVtcCA9ICpwUm93ICsrOw0KLSAgICAgICAgICAgIGlmICh0ZW1wID4gbWF4KSB7DQotICAgICAgICAgICAgICAgIG1heCA9IHRlbXA7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmICh0ZW1wIDwgbWluKSB7DQotICAgICAgICAgICAgICAgIG1pbiA9IHRlbXA7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHRlbXAgPSBtYXggLSBtaW47DQotICAgIGlmICgwID09IHRlbXAgfHwgMjU1ID09IHRlbXApIHsNCi0gICAgICAgIGludCByb3dieXRlcyA9IEZYU1lTX2FicyhuU3JjUm93Qnl0ZXMpID4gbkRzdFJvd0J5dGVzID8gbkRzdFJvd0J5dGVzIDogRlhTWVNfYWJzKG5TcmNSb3dCeXRlcyk7DQotICAgICAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IG5IZWk7IHJvdyArKykgew0KLSAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKHBEYXRhT3V0ICsgcm93ICogbkRzdFJvd0J5dGVzLCBwRGF0YUluICsgcm93ICogblNyY1Jvd0J5dGVzLCByb3dieXRlcyk7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgcmF0ZSA9IDI1NS5mIC8gdGVtcDsNCi0gICAgZm9yIChyb3cgPSAwOyByb3cgPCBuSGVpOyByb3cgKyspIHsNCi0gICAgICAgIEZYX0xQQllURSBwU3JjUm93ID0gcERhdGFJbiArIHJvdyAqIG5TcmNSb3dCeXRlczsNCi0gICAgICAgIEZYX0xQQllURSBwRHN0Um93ID0gcERhdGFPdXQgKyByb3cgKiBuRHN0Um93Qnl0ZXM7DQotICAgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IG5XaWQ7IGNvbCArKykgew0KLSAgICAgICAgICAgIHRlbXAgPSAoaW50KSgoKihwU3JjUm93KyspIC0gbWluKSAqIHJhdGUgKyAwLjUpOw0KLSAgICAgICAgICAgIGlmICh0ZW1wID4gMjU1KQl7DQotICAgICAgICAgICAgICAgIHRlbXAgPSAyNTU7DQotICAgICAgICAgICAgfSBlbHNlIGlmICh0ZW1wIDwgMCkgew0KLSAgICAgICAgICAgICAgICB0ZW1wID0gMDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgKnBEc3RSb3cgKysgPSAoRlhfQllURSl0ZW1wOw0KLSAgICAgICAgfQ0KLSAgICB9DQotfQ0KLUNGWF9HbHlwaEJpdG1hcCogQ0ZYX0ZhY2VDYWNoZTo6UmVuZGVyR2x5cGgoQ0ZYX0ZvbnQqIHBGb250LCBGWF9EV09SRCBnbHlwaF9pbmRleCwgRlhfQk9PTCBiRm9udFN0eWxlLA0KLSAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgaW50IGRlc3Rfd2lkdGgsIGludCBhbnRpX2FsaWFzKQ0KLXsNCi0gICAgaWYgKG1fRmFjZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBGWEZUX01hdHJpeCAgZnRfbWF0cml4Ow0KLSAgICBmdF9tYXRyaXgueHggPSAoc2lnbmVkIGxvbmcpKHBNYXRyaXgtPkdldEEoKSAvIDY0ICogNjU1MzYpOw0KLSAgICBmdF9tYXRyaXgueHkgPSAoc2lnbmVkIGxvbmcpKHBNYXRyaXgtPkdldEMoKSAvIDY0ICogNjU1MzYpOw0KLSAgICBmdF9tYXRyaXgueXggPSAoc2lnbmVkIGxvbmcpKHBNYXRyaXgtPkdldEIoKSAvIDY0ICogNjU1MzYpOw0KLSAgICBmdF9tYXRyaXgueXkgPSAoc2lnbmVkIGxvbmcpKHBNYXRyaXgtPkdldEQoKSAvIDY0ICogNjU1MzYpOw0KLSAgICBGWF9CT09MIGJVc2VDSktTdWJGb250ID0gRkFMU0U7DQotICAgIGNvbnN0IENGWF9TdWJzdEZvbnQqIHBTdWJzdEZvbnQgPSBwRm9udC0+R2V0U3Vic3RGb250KCk7DQotICAgIGlmIChwU3Vic3RGb250KSB7DQotICAgICAgICBiVXNlQ0pLU3ViRm9udCA9IHBTdWJzdEZvbnQtPm1fYlN1YnN0T2ZDSksgJiYgYkZvbnRTdHlsZTsNCi0gICAgICAgIGludCBza2V3ID0gMDsNCi0gICAgICAgIGlmIChiVXNlQ0pLU3ViRm9udCkgew0KLSAgICAgICAgICAgIHNrZXcgPSBwU3Vic3RGb250LT5tX2JJdGxpY0NKSyA/IC0xNSA6IDA7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHNrZXcgPSBwU3Vic3RGb250LT5tX0l0YWxpY0FuZ2xlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHNrZXcpIHsNCi0gICAgICAgICAgICBza2V3ID0gc2tldyA8PSAtMzAgPyAtNTggOiAtZ19BbmdsZVNrZXdbLXNrZXddOw0KLSAgICAgICAgICAgIGlmIChwRm9udC0+SXNWZXJ0aWNhbCgpKSB7DQotICAgICAgICAgICAgICAgIGZ0X21hdHJpeC55eCArPSBmdF9tYXRyaXgueXkgKiBza2V3IC8gMTAwOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGZ0X21hdHJpeC54eSArPSAtZnRfbWF0cml4Lnh4ICogc2tldyAvIDEwMDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBpZiAocFN1YnN0Rm9udC0+bV9TdWJzdEZsYWdzICYgRlhGT05UX1NVQlNUX01NKSB7DQotICAgICAgICAgICAgcEZvbnQtPkFkanVzdE1NUGFyYW1zKGdseXBoX2luZGV4LCBkZXN0X3dpZHRoLCBwRm9udC0+R2V0U3Vic3RGb250KCktPm1fV2VpZ2h0KTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpbnQgdHJhbnNmbGFnID0gRlhGVF9HZXRfRmFjZV9JbnRlcm5hbF9GbGFnKG1fRmFjZSk7DQotICAgIEZYRlRfU2V0X1RyYW5zZm9ybShtX0ZhY2UsICZmdF9tYXRyaXgsIDApOw0KLSAgICBpbnQgbG9hZF9mbGFncyA9IChtX0ZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfU0ZOVCkgPyBGWEZUX0xPQURfTk9fQklUTUFQIDogKEZYRlRfTE9BRF9OT19CSVRNQVAgfCBGVF9MT0FEX05PX0hJTlRJTkcpOw0KLSAgICBpbnQgZXJyb3IgPSBGWEZUX0xvYWRfR2x5cGgobV9GYWNlLCBnbHlwaF9pbmRleCwgbG9hZF9mbGFncyk7DQotICAgIGlmIChlcnJvcikgew0KLSAgICAgICAgRlhGVF9TZXRfRmFjZV9JbnRlcm5hbF9GbGFnKG1fRmFjZSwgdHJhbnNmbGFnKTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGludCB3ZWlnaHQgPSAwOw0KLSAgICBpZiAoYlVzZUNKS1N1YkZvbnQpIHsNCi0gICAgICAgIHdlaWdodCA9IHBTdWJzdEZvbnQtPm1fV2VpZ2h0Q0pLOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgd2VpZ2h0ID0gcFN1YnN0Rm9udCA/IHBTdWJzdEZvbnQtPm1fV2VpZ2h0IDogMDsNCi0gICAgfQ0KLSAgICBpZiAocFN1YnN0Rm9udCAmJiAhKHBTdWJzdEZvbnQtPm1fU3Vic3RGbGFncyAmIEZYRk9OVF9TVUJTVF9NTSkgJiYgd2VpZ2h0ID4gNDAwKSB7DQotICAgICAgICBpbnQgaW5kZXggPSAod2VpZ2h0IC0gNDAwKSAvIDEwOw0KLSAgICAgICAgaWYgKGluZGV4ID49IDEwMCkgew0KLSAgICAgICAgICAgIEZYRlRfU2V0X0ZhY2VfSW50ZXJuYWxfRmxhZyhtX0ZhY2UsIHRyYW5zZmxhZyk7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBpbnQgbGV2ZWwgPSAwOw0KLSAgICAgICAgaWYgKHBTdWJzdEZvbnQtPm1fQ2hhcnNldCA9PSBGWEZPTlRfU0hJRlRKSVNfQ0hBUlNFVCkgew0KLSAgICAgICAgICAgIGxldmVsID0gZ19XZWlnaHRQb3dfU0hJRlRKSVNbaW5kZXhdICogMiAqIChGWFNZU19hYnMoKGludCkoZnRfbWF0cml4Lnh4KSkgKyBGWFNZU19hYnMoKGludCkoZnRfbWF0cml4Lnh5KSkpIC8gMzY2NTU7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGxldmVsID0gZ19XZWlnaHRQb3dfMTFbaW5kZXhdICogKEZYU1lTX2FicygoaW50KShmdF9tYXRyaXgueHgpKSArIEZYU1lTX2FicygoaW50KShmdF9tYXRyaXgueHkpKSkgLyAzNjY1NTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYRlRfT3V0bGluZV9FbWJvbGRlbihGWEZUX0dldF9HbHlwaF9PdXRsaW5lKG1fRmFjZSksIGxldmVsKTsNCi0gICAgfQ0KLSAgICBGWEZUX0xpYnJhcnlfU2V0TGNkRmlsdGVyKENGWF9HRU1vZHVsZTo6R2V0KCktPkdldEZvbnRNZ3IoKS0+bV9GVExpYnJhcnksIEZUX0xDRF9GSUxURVJfREVGQVVMVCk7DQotICAgIGVycm9yID0gRlhGVF9SZW5kZXJfR2x5cGgobV9GYWNlLCBhbnRpX2FsaWFzKTsNCi0gICAgaWYgKGVycm9yKSB7DQotICAgICAgICBGWEZUX1NldF9GYWNlX0ludGVybmFsX0ZsYWcobV9GYWNlLCB0cmFuc2ZsYWcpOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaW50IGJtd2lkdGggPSBGWEZUX0dldF9CaXRtYXBfV2lkdGgoRlhGVF9HZXRfR2x5cGhfQml0bWFwKG1fRmFjZSkpOw0KLSAgICBpbnQgYm1oZWlnaHQgPSBGWEZUX0dldF9CaXRtYXBfUm93cyhGWEZUX0dldF9HbHlwaF9CaXRtYXAobV9GYWNlKSk7DQotICAgIGlmIChibXdpZHRoID4gMjA0OCB8fCBibWhlaWdodCA+IDIwNDgpIHsNCi0gICAgICAgIEZYRlRfU2V0X0ZhY2VfSW50ZXJuYWxfRmxhZyhtX0ZhY2UsIHRyYW5zZmxhZyk7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpbnQgZGliX3dpZHRoID0gYm13aWR0aDsNCi0gICAgQ0ZYX0dseXBoQml0bWFwKiBwR2x5cGhCaXRtYXAgPSBGWF9ORVcgQ0ZYX0dseXBoQml0bWFwOw0KLSAgICBpZiAoIXBHbHlwaEJpdG1hcCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcEdseXBoQml0bWFwLT5tX0JpdG1hcC5DcmVhdGUoZGliX3dpZHRoLCBibWhlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW50aV9hbGlhcyA9PSBGWEZUX1JFTkRFUl9NT0RFX01PTk8gPyBGWERJQl8xYnBwTWFzayA6IEZYRElCXzhicHBNYXNrKTsNCi0gICAgcEdseXBoQml0bWFwLT5tX0xlZnQgPSBGWEZUX0dldF9HbHlwaF9CaXRtYXBMZWZ0KG1fRmFjZSk7DQotICAgIHBHbHlwaEJpdG1hcC0+bV9Ub3AgPSBGWEZUX0dldF9HbHlwaF9CaXRtYXBUb3AobV9GYWNlKTsNCi0gICAgaW50IGRlc3RfcGl0Y2ggPSBwR2x5cGhCaXRtYXAtPm1fQml0bWFwLkdldFBpdGNoKCk7DQotICAgIGludCBzcmNfcGl0Y2ggPSBGWEZUX0dldF9CaXRtYXBfUGl0Y2goRlhGVF9HZXRfR2x5cGhfQml0bWFwKG1fRmFjZSkpOw0KLSAgICBGWF9CWVRFKiBwRGVzdEJ1ZiA9IHBHbHlwaEJpdG1hcC0+bV9CaXRtYXAuR2V0QnVmZmVyKCk7DQotICAgIEZYX0JZVEUqIHBTcmNCdWYgPSAoRlhfQllURSopRlhGVF9HZXRfQml0bWFwX0J1ZmZlcihGWEZUX0dldF9HbHlwaF9CaXRtYXAobV9GYWNlKSk7DQotICAgIGlmIChhbnRpX2FsaWFzICE9IEZYRlRfUkVOREVSX01PREVfTU9OTyAmJiBGWEZUX0dldF9CaXRtYXBfUGl4ZWxNb2RlKEZYRlRfR2V0X0dseXBoX0JpdG1hcChtX0ZhY2UpKSA9PSBGWEZUX1BJWEVMX01PREVfTU9OTykgew0KLSAgICAgICAgaW50IGJ5dGVzID0gYW50aV9hbGlhcyA9PSBGWEZUX1JFTkRFUl9NT0RFX0xDRCA/IDMgOiAxOw0KLSAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGJtaGVpZ2h0OyBpKyspDQotICAgICAgICAgICAgZm9yKGludCBuID0gMDsgbiA8IGJtd2lkdGg7IG4rKykgew0KLSAgICAgICAgICAgICAgICBGWF9CWVRFIGRhdGEgPSAocFNyY0J1ZltpICogc3JjX3BpdGNoICsgbiAvIDhdICYgKDB4ODAgPj4gKG4gJSA4KSkpID8gMjU1IDogMDsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgYiA9IDA7IGIgPCBieXRlczsgYiArKykgew0KLSAgICAgICAgICAgICAgICAgICAgcERlc3RCdWZbaSAqIGRlc3RfcGl0Y2ggKyBuICogYnl0ZXMgKyBiXSA9IGRhdGE7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgIH0gZWxzZSB7DQotICAgICAgICBGWFNZU19tZW1zZXQzMihwRGVzdEJ1ZiwgMCwgZGVzdF9waXRjaCAqIGJtaGVpZ2h0KTsNCi0gICAgICAgIGlmIChhbnRpX2FsaWFzID09IEZYRlRfUkVOREVSX01PREVfTU9OTyAmJiBGWEZUX0dldF9CaXRtYXBfUGl4ZWxNb2RlKEZYRlRfR2V0X0dseXBoX0JpdG1hcChtX0ZhY2UpKSA9PSBGWEZUX1BJWEVMX01PREVfTU9OTykgew0KLSAgICAgICAgICAgIGludCByb3dieXRlcyA9IEZYU1lTX2FicyhzcmNfcGl0Y2gpID4gZGVzdF9waXRjaCA/IGRlc3RfcGl0Y2ggOiBGWFNZU19hYnMoc3JjX3BpdGNoKTsNCi0gICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBibWhlaWdodDsgcm93ICsrKSB7DQotICAgICAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKHBEZXN0QnVmICsgcm93ICogZGVzdF9waXRjaCwgcFNyY0J1ZiArIHJvdyAqIHNyY19waXRjaCwgcm93Ynl0ZXMpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgX0NvbnRyYXN0QWRqdXN0KHBTcmNCdWYsIHBEZXN0QnVmLCBibXdpZHRoLCBibWhlaWdodCwgc3JjX3BpdGNoLCBkZXN0X3BpdGNoKTsNCi0gICAgICAgICAgICBfR2FtbWFBZGp1c3QocERlc3RCdWYsIGJtd2lkdGgsIGJtaGVpZ2h0LCBkZXN0X3BpdGNoLCBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRUZXh0R2FtbWFUYWJsZSgpKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBGWEZUX1NldF9GYWNlX0ludGVybmFsX0ZsYWcobV9GYWNlLCB0cmFuc2ZsYWcpOw0KLSAgICByZXR1cm4gcEdseXBoQml0bWFwOw0KLX0NCi1GWF9CT09MIF9PdXRwdXRHbHlwaCh2b2lkKiBkaWIsIGludCB4LCBpbnQgeSwgQ0ZYX0ZvbnQqIHBGb250LA0KLSAgICAgICAgICAgICAgICAgICAgIGludCBnbHlwaF9pbmRleCwgRlhfQVJHQiBhcmdiKQ0KLXsNCi0gICAgQ0ZYX0RJQml0bWFwKiBwRGliID0gKENGWF9ESUJpdG1hcCopZGliOw0KLSAgICBGWEZUX0ZhY2UgZmFjZSA9IHBGb250LT5HZXRGYWNlKCk7DQotICAgIGludCBlcnJvciA9IEZYRlRfTG9hZF9HbHlwaChmYWNlLCBnbHlwaF9pbmRleCwgRlhGVF9MT0FEX05PX0JJVE1BUCk7DQotICAgIGlmIChlcnJvcikgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGVycm9yID0gRlhGVF9SZW5kZXJfR2x5cGgoZmFjZSwgRlhGVF9SRU5ERVJfTU9ERV9OT1JNQUwpOw0KLSAgICBpZiAoZXJyb3IpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpbnQgYm13aWR0aCA9IEZYRlRfR2V0X0JpdG1hcF9XaWR0aChGWEZUX0dldF9HbHlwaF9CaXRtYXAoZmFjZSkpOw0KLSAgICBpbnQgYm1oZWlnaHQgPSBGWEZUX0dldF9CaXRtYXBfUm93cyhGWEZUX0dldF9HbHlwaF9CaXRtYXAoZmFjZSkpOw0KLSAgICBpbnQgbGVmdCA9IEZYRlRfR2V0X0dseXBoX0JpdG1hcExlZnQoZmFjZSk7DQotICAgIGludCB0b3AgPSBGWEZUX0dldF9HbHlwaF9CaXRtYXBUb3AoZmFjZSk7DQotICAgIEZYX0xQQ0JZVEUgc3JjX2J1ZiA9IChGWF9MUENCWVRFKUZYRlRfR2V0X0JpdG1hcF9CdWZmZXIoRlhGVF9HZXRfR2x5cGhfQml0bWFwKGZhY2UpKTsNCi0gICAgaW50IHNyY19waXRjaCA9IEZYRlRfR2V0X0JpdG1hcF9QaXRjaChGWEZUX0dldF9HbHlwaF9CaXRtYXAoZmFjZSkpOw0KLSAgICBDRlhfRElCaXRtYXAgbWFzazsNCi0gICAgbWFzay5DcmVhdGUoYm13aWR0aCwgYm1oZWlnaHQsIEZYRElCXzhicHBNYXNrKTsNCi0gICAgRlhfTFBCWVRFIGRlc3RfYnVmID0gbWFzay5HZXRCdWZmZXIoKTsNCi0gICAgaW50IGRlc3RfcGl0Y2ggPSBtYXNrLkdldFBpdGNoKCk7DQotICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGJtaGVpZ2h0OyByb3cgKyspIHsNCi0gICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBzcmNfYnVmICsgcm93ICogc3JjX3BpdGNoOw0KLSAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IGRlc3RfYnVmICsgcm93ICogZGVzdF9waXRjaDsNCi0gICAgICAgIEZYU1lTX21lbWNweTMyKGRlc3Rfc2Nhbiwgc3JjX3NjYW4sIGRlc3RfcGl0Y2gpOw0KLSAgICB9DQotICAgIHBEaWItPkNvbXBvc2l0ZU1hc2soeCArIGxlZnQsIHkgLSB0b3AsIGJtd2lkdGgsIGJtaGVpZ2h0LCAmbWFzaywgYXJnYiwgMCwgMCk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIE91dHB1dFRleHQodm9pZCogZGliLCBpbnQgeCwgaW50IHksIENGWF9Gb250KiBwRm9udCwgZG91YmxlIGZvbnRfc2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCogcFRleHRfbWF0cml4LCB1bnNpZ25lZCBzaG9ydCBjb25zdCogdGV4dCwgdW5zaWduZWQgbG9uZyBhcmdiKQ0KLXsNCi0gICAgaWYgKCFwRm9udCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEZYRlRfRmFjZSBmYWNlID0gcEZvbnQtPkdldEZhY2UoKTsNCi0gICAgRlhGVF9TZWxlY3RfQ2hhcm1hcChwRm9udC0+bV9GYWNlLCBGWEZUX0VOQ09ESU5HX1VOSUNPREUpOw0KLSAgICBpbnQgdHJhbnNmbGFnID0gRlhGVF9HZXRfRmFjZV9JbnRlcm5hbF9GbGFnKHBGb250LT5tX0ZhY2UpOw0KLSAgICBpZiAocFRleHRfbWF0cml4KSB7DQotICAgICAgICBGWEZUX01hdHJpeCAgZnRfbWF0cml4Ow0KLSAgICAgICAgZnRfbWF0cml4Lnh4ID0gKHNpZ25lZCBsb25nKShwVGV4dF9tYXRyaXgtPmEgLyA2NCAqIDY1NTM2KTsNCi0gICAgICAgIGZ0X21hdHJpeC54eSA9IChzaWduZWQgbG9uZykocFRleHRfbWF0cml4LT5jIC8gNjQgKiA2NTUzNik7DQotICAgICAgICBmdF9tYXRyaXgueXggPSAoc2lnbmVkIGxvbmcpKHBUZXh0X21hdHJpeC0+YiAvIDY0ICogNjU1MzYpOw0KLSAgICAgICAgZnRfbWF0cml4Lnl5ID0gKHNpZ25lZCBsb25nKShwVGV4dF9tYXRyaXgtPmQgLyA2NCAqIDY1NTM2KTsNCi0gICAgICAgIEZYRlRfU2V0X1RyYW5zZm9ybShmYWNlLCAmZnRfbWF0cml4LCAwKTsNCi0gICAgfQ0KLSAgICBGWF9GTE9BVCB4X3BvcyA9IDA7DQotICAgIGZvciAoOyAqdGV4dCAhPSAwOyB0ZXh0ICsrKSB7DQotICAgICAgICBGWF9XQ0hBUiB1bmljb2RlID0gKnRleHQ7DQotICAgICAgICBpbnQgZ2x5cGhfaW5kZXggPSBGWEZUX0dldF9DaGFyX0luZGV4KHBGb250LT5tX0ZhY2UsIHVuaWNvZGUpOw0KLSAgICAgICAgaWYgKGdseXBoX2luZGV4IDw9IDApIHsNCi0gICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBlcnIgPSBGWEZUX0xvYWRfR2x5cGgocEZvbnQtPm1fRmFjZSwgZ2x5cGhfaW5kZXgsIEZYRlRfTE9BRF9OT19TQ0FMRSB8IEZYRlRfTE9BRF9JR05PUkVfR0xPQkFMX0FEVkFOQ0VfV0lEVEgpOw0KLSAgICAgICAgaWYgKGVycikgew0KLSAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW50IHcgPSBGWEZUX0dldF9HbHlwaF9Ib3JpQWR2YW5jZShwRm9udC0+bV9GYWNlKTsNCi0gICAgICAgIGludCBlbSA9IEZYRlRfR2V0X0ZhY2VfVW5pdHNQZXJFTShwRm9udC0+bV9GYWNlKTsNCi0gICAgICAgIEZYX0ZMT0FUIHgxLCB5MTsNCi0gICAgICAgIHBUZXh0X21hdHJpeC0+VHJhbnNmb3JtKHhfcG9zLCAwLCB4MSwgeTEpOw0KLSAgICAgICAgX091dHB1dEdseXBoKGRpYiwgKGludCl4MSArIHgsIChpbnQpIC0geTEgKyB5LCBwRm9udCwNCi0gICAgICAgICAgICAgICAgICAgICBnbHlwaF9pbmRleCwgYXJnYik7DQotICAgICAgICB4X3BvcyArPSAoRlhfRkxPQVQpdyAvIGVtOw0KLSAgICB9DQotICAgIEZYRlRfU2V0X0ZhY2VfSW50ZXJuYWxfRmxhZyhwRm9udC0+bV9GYWNlLCB0cmFuc2ZsYWcpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBPdXRwdXRHbHlwaCh2b2lkKiBkaWIsIGludCB4LCBpbnQgeSwgQ0ZYX0ZvbnQqIHBGb250LCBkb3VibGUgZm9udF9zaXplLA0KLSAgICAgICAgICAgICAgICAgICAgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgdW5zaWduZWQgbG9uZyBnbHlwaF9pbmRleCwgdW5zaWduZWQgbG9uZyBhcmdiKQ0KLXsNCi0gICAgRlhGVF9NYXRyaXggIGZ0X21hdHJpeDsNCi0gICAgaWYgKHBNYXRyaXgpIHsNCi0gICAgICAgIGZ0X21hdHJpeC54eCA9IChzaWduZWQgbG9uZykocE1hdHJpeC0+YSAqIGZvbnRfc2l6ZSAvIDY0ICogNjU1MzYpOw0KLSAgICAgICAgZnRfbWF0cml4Lnh5ID0gKHNpZ25lZCBsb25nKShwTWF0cml4LT5jICogZm9udF9zaXplIC8gNjQgKiA2NTUzNik7DQotICAgICAgICBmdF9tYXRyaXgueXggPSAoc2lnbmVkIGxvbmcpKHBNYXRyaXgtPmIgKiBmb250X3NpemUgLyA2NCAqIDY1NTM2KTsNCi0gICAgICAgIGZ0X21hdHJpeC55eSA9IChzaWduZWQgbG9uZykocE1hdHJpeC0+ZCAqIGZvbnRfc2l6ZSAvIDY0ICogNjU1MzYpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgZnRfbWF0cml4Lnh4ID0gKHNpZ25lZCBsb25nKShmb250X3NpemUgLyA2NCAqIDY1NTM2KTsNCi0gICAgICAgIGZ0X21hdHJpeC54eSA9IGZ0X21hdHJpeC55eCA9IDA7DQotICAgICAgICBmdF9tYXRyaXgueXkgPSAoc2lnbmVkIGxvbmcpKGZvbnRfc2l6ZSAvIDY0ICogNjU1MzYpOw0KLSAgICB9DQotICAgIGludCB0cmFuc2ZsYWcgPSBGWEZUX0dldF9GYWNlX0ludGVybmFsX0ZsYWcocEZvbnQtPm1fRmFjZSk7DQotICAgIEZYRlRfU2V0X1RyYW5zZm9ybShwRm9udC0+bV9GYWNlLCAmZnRfbWF0cml4LCAwKTsNCi0gICAgRlhfQk9PTCByZXQgPSBfT3V0cHV0R2x5cGgoZGliLCB4LCB5LCBwRm9udCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsIGFyZ2IpOw0KLSAgICBGWEZUX1NldF9GYWNlX0ludGVybmFsX0ZsYWcocEZvbnQtPm1fRmFjZSwgdHJhbnNmbGFnKTsNCi0gICAgcmV0dXJuIHJldDsNCi19DQotY29uc3QgQ0ZYX1BhdGhEYXRhKiBDRlhfRmFjZUNhY2hlOjpMb2FkR2x5cGhQYXRoKENGWF9Gb250KiBwRm9udCwgRlhfRFdPUkQgZ2x5cGhfaW5kZXgsIGludCBkZXN0X3dpZHRoKQ0KLXsNCi0gICAgaWYgKG1fRmFjZSA9PSBOVUxMIHx8IGdseXBoX2luZGV4ID09IChGWF9EV09SRCkgLSAxKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDRlhfUGF0aERhdGEqIHBHbHlwaFBhdGggPSBOVUxMOw0KLSAgICBGWF9MUFZPSUQga2V5Ow0KLSAgICBpZiAocEZvbnQtPkdldFN1YnN0Rm9udCgpKQ0KLSAgICAgICAga2V5ID0gKEZYX0xQVk9JRCkoRlhfVUlOVFBUUikoZ2x5cGhfaW5kZXggKyAoKHBGb250LT5HZXRTdWJzdEZvbnQoKS0+bV9XZWlnaHQgLyAxNikgPDwgMTUpICsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocEZvbnQtPkdldFN1YnN0Rm9udCgpLT5tX0l0YWxpY0FuZ2xlIC8gMikgPDwgMjEpICsgKChkZXN0X3dpZHRoIC8gMTYpIDw8IDI1KSArDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocEZvbnQtPklzVmVydGljYWwoKSA8PCAzMSkpOw0KLSAgICBlbHNlIHsNCi0gICAgICAgIGtleSA9IChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpZ2x5cGhfaW5kZXg7DQotICAgIH0NCi0gICAgaWYgKG1fUGF0aE1hcC5Mb29rdXAoa2V5LCAoRlhfTFBWT0lEJilwR2x5cGhQYXRoKSkgew0KLSAgICAgICAgcmV0dXJuIHBHbHlwaFBhdGg7DQotICAgIH0NCi0gICAgcEdseXBoUGF0aCA9IHBGb250LT5Mb2FkR2x5cGhQYXRoKGdseXBoX2luZGV4LCBkZXN0X3dpZHRoKTsNCi0gICAgbV9QYXRoTWFwLlNldEF0KGtleSwgcEdseXBoUGF0aCk7DQotICAgIHJldHVybiBwR2x5cGhQYXRoOw0KLX0NCi10eXBlZGVmIHN0cnVjdCB7DQotICAgIEZYX0JPT0wJCQltX2JDb3VudDsNCi0gICAgaW50CQkJCW1fUG9pbnRDb3VudDsNCi0gICAgRlhfUEFUSFBPSU5UKgltX3BQb2ludHM7DQotICAgIGludAkJCQltX0N1clg7DQotICAgIGludAkJCQltX0N1clk7DQotICAgIEZYX0ZMT0FUCQltX0Nvb3JkVW5pdDsNCi19IE9VVExJTkVfUEFSQU1TOw0KLXZvaWQgX091dGxpbmVfQ2hlY2tFbXB0eUNvbnRvdXIoT1VUTElORV9QQVJBTVMqIHBhcmFtKQ0KLXsNCi0gICAgaWYgKHBhcmFtLT5tX1BvaW50Q291bnQgPj0gMiAmJiBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgLSAyXS5tX0ZsYWcgPT0gRlhQVF9NT1ZFVE8gJiYNCi0gICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgLSAyXS5tX1BvaW50WCA9PSBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgLSAxXS5tX1BvaW50WCAmJg0KLSAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudCAtIDJdLm1fUG9pbnRZID09IHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudCAtIDFdLm1fUG9pbnRZKSB7DQotICAgICAgICBwYXJhbS0+bV9Qb2ludENvdW50IC09IDI7DQotICAgIH0NCi0gICAgaWYgKHBhcmFtLT5tX1BvaW50Q291bnQgPj0gNCAmJiBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgLSA0XS5tX0ZsYWcgPT0gRlhQVF9NT1ZFVE8gJiYNCi0gICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgLSAzXS5tX0ZsYWcgPT0gRlhQVF9CRVpJRVJUTyAmJg0KLSAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudCAtIDNdLm1fUG9pbnRYID09IHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudCAtIDRdLm1fUG9pbnRYICYmDQotICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50IC0gM10ubV9Qb2ludFkgPT0gcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50IC0gNF0ubV9Qb2ludFkgJiYNCi0gICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgLSAyXS5tX1BvaW50WCA9PSBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgLSA0XS5tX1BvaW50WCAmJg0KLSAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudCAtIDJdLm1fUG9pbnRZID09IHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudCAtIDRdLm1fUG9pbnRZICYmDQotICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50IC0gMV0ubV9Qb2ludFggPT0gcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50IC0gNF0ubV9Qb2ludFggJiYNCi0gICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgLSAxXS5tX1BvaW50WSA9PSBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgLSA0XS5tX1BvaW50WSkgew0KLSAgICAgICAgcGFyYW0tPm1fUG9pbnRDb3VudCAtPSA0Ow0KLSAgICB9DQotfQ0KLWV4dGVybiAiQyIgew0KLSAgICBzdGF0aWMgaW50IF9PdXRsaW5lX01vdmVUbyhjb25zdCBGWEZUX1ZlY3RvciogdG8sIHZvaWQqIHVzZXIpDQotICAgIHsNCi0gICAgICAgIE9VVExJTkVfUEFSQU1TKiBwYXJhbSA9IChPVVRMSU5FX1BBUkFNUyopdXNlcjsNCi0gICAgICAgIGlmICghcGFyYW0tPm1fYkNvdW50KSB7DQotICAgICAgICAgICAgX091dGxpbmVfQ2hlY2tFbXB0eUNvbnRvdXIocGFyYW0pOw0KLSAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudF0ubV9Qb2ludFggPSB0by0+eCAvIHBhcmFtLT5tX0Nvb3JkVW5pdDsNCi0gICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnRdLm1fUG9pbnRZID0gdG8tPnkgLyBwYXJhbS0+bV9Db29yZFVuaXQ7DQotICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50XS5tX0ZsYWcgPSBGWFBUX01PVkVUTzsNCi0gICAgICAgICAgICBwYXJhbS0+bV9DdXJYID0gdG8tPng7DQotICAgICAgICAgICAgcGFyYW0tPm1fQ3VyWSA9IHRvLT55Ow0KLSAgICAgICAgICAgIGlmIChwYXJhbS0+bV9Qb2ludENvdW50KSB7DQotICAgICAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudCAtIDFdLm1fRmxhZyB8PSBGWFBUX0NMT1NFRklHVVJFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHBhcmFtLT5tX1BvaW50Q291bnQgKys7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLX07DQotZXh0ZXJuICJDIiB7DQotICAgIHN0YXRpYyBpbnQgX091dGxpbmVfTGluZVRvKGNvbnN0IEZYRlRfVmVjdG9yKiB0bywgdm9pZCogdXNlcikNCi0gICAgew0KLSAgICAgICAgT1VUTElORV9QQVJBTVMqIHBhcmFtID0gKE9VVExJTkVfUEFSQU1TKil1c2VyOw0KLSAgICAgICAgaWYgKCFwYXJhbS0+bV9iQ291bnQpIHsNCi0gICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnRdLm1fUG9pbnRYID0gdG8tPnggLyBwYXJhbS0+bV9Db29yZFVuaXQ7DQotICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50XS5tX1BvaW50WSA9IHRvLT55IC8gcGFyYW0tPm1fQ29vcmRVbml0Ow0KLSAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudF0ubV9GbGFnID0gRlhQVF9MSU5FVE87DQotICAgICAgICAgICAgcGFyYW0tPm1fQ3VyWCA9IHRvLT54Ow0KLSAgICAgICAgICAgIHBhcmFtLT5tX0N1clkgPSB0by0+eTsNCi0gICAgICAgIH0NCi0gICAgICAgIHBhcmFtLT5tX1BvaW50Q291bnQgKys7DQotICAgICAgICByZXR1cm4gMDsNCi0gICAgfQ0KLX07DQotZXh0ZXJuICJDIiB7DQotICAgIHN0YXRpYyBpbnQgX091dGxpbmVfQ29uaWNUbyhjb25zdCBGWEZUX1ZlY3RvciogY29udHJvbCwgY29uc3QgRlhGVF9WZWN0b3IqIHRvLCB2b2lkKiB1c2VyKQ0KLSAgICB7DQotICAgICAgICBPVVRMSU5FX1BBUkFNUyogcGFyYW0gPSAoT1VUTElORV9QQVJBTVMqKXVzZXI7DQotICAgICAgICBpZiAoIXBhcmFtLT5tX2JDb3VudCkgew0KLSAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudF0ubV9Qb2ludFggPSAocGFyYW0tPm1fQ3VyWCArIChjb250cm9sLT54IC0gcGFyYW0tPm1fQ3VyWCkgKiAyIC8gMykgLyBwYXJhbS0+bV9Db29yZFVuaXQ7DQotICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50XS5tX1BvaW50WSA9IChwYXJhbS0+bV9DdXJZICsgKGNvbnRyb2wtPnkgLSBwYXJhbS0+bV9DdXJZKSAqIDIgLyAzKSAvIHBhcmFtLT5tX0Nvb3JkVW5pdDsNCi0gICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnRdLm1fRmxhZyA9IEZYUFRfQkVaSUVSVE87DQotICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50ICsgMV0ubV9Qb2ludFggPSAoY29udHJvbC0+eCArICh0by0+eCAtIGNvbnRyb2wtPngpIC8gMykgLyBwYXJhbS0+bV9Db29yZFVuaXQ7DQotICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50ICsgMV0ubV9Qb2ludFkgPSAoY29udHJvbC0+eSArICh0by0+eSAtIGNvbnRyb2wtPnkpIC8gMykgLyBwYXJhbS0+bV9Db29yZFVuaXQ7DQotICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50ICsgMV0ubV9GbGFnID0gRlhQVF9CRVpJRVJUTzsNCi0gICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgKyAyXS5tX1BvaW50WCA9IHRvLT54IC8gcGFyYW0tPm1fQ29vcmRVbml0Ow0KLSAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudCArIDJdLm1fUG9pbnRZID0gdG8tPnkgLyBwYXJhbS0+bV9Db29yZFVuaXQ7DQotICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50ICsgMl0ubV9GbGFnID0gRlhQVF9CRVpJRVJUTzsNCi0gICAgICAgICAgICBwYXJhbS0+bV9DdXJYID0gdG8tPng7DQotICAgICAgICAgICAgcGFyYW0tPm1fQ3VyWSA9IHRvLT55Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgcGFyYW0tPm1fUG9pbnRDb3VudCArPSAzOw0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi19Ow0KLWV4dGVybiAiQyIgew0KLSAgICBzdGF0aWMgaW50IF9PdXRsaW5lX0N1YmljVG8oY29uc3QgRlhGVF9WZWN0b3IqIGNvbnRyb2wxLCBjb25zdCBGWEZUX1ZlY3RvciogY29udHJvbDIsIGNvbnN0IEZYRlRfVmVjdG9yKiB0bywgdm9pZCogdXNlcikNCi0gICAgew0KLSAgICAgICAgT1VUTElORV9QQVJBTVMqIHBhcmFtID0gKE9VVExJTkVfUEFSQU1TKil1c2VyOw0KLSAgICAgICAgaWYgKCFwYXJhbS0+bV9iQ291bnQpIHsNCi0gICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnRdLm1fUG9pbnRYID0gY29udHJvbDEtPnggLyBwYXJhbS0+bV9Db29yZFVuaXQ7DQotICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50XS5tX1BvaW50WSA9IGNvbnRyb2wxLT55IC8gcGFyYW0tPm1fQ29vcmRVbml0Ow0KLSAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudF0ubV9GbGFnID0gRlhQVF9CRVpJRVJUTzsNCi0gICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgKyAxXS5tX1BvaW50WCA9IGNvbnRyb2wyLT54IC8gcGFyYW0tPm1fQ29vcmRVbml0Ow0KLSAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudCArIDFdLm1fUG9pbnRZID0gY29udHJvbDItPnkgLyBwYXJhbS0+bV9Db29yZFVuaXQ7DQotICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50ICsgMV0ubV9GbGFnID0gRlhQVF9CRVpJRVJUTzsNCi0gICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgKyAyXS5tX1BvaW50WCA9IHRvLT54IC8gcGFyYW0tPm1fQ29vcmRVbml0Ow0KLSAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudCArIDJdLm1fUG9pbnRZID0gdG8tPnkgLyBwYXJhbS0+bV9Db29yZFVuaXQ7DQotICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50ICsgMl0ubV9GbGFnID0gRlhQVF9CRVpJRVJUTzsNCi0gICAgICAgICAgICBwYXJhbS0+bV9DdXJYID0gdG8tPng7DQotICAgICAgICAgICAgcGFyYW0tPm1fQ3VyWSA9IHRvLT55Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgcGFyYW0tPm1fUG9pbnRDb3VudCArPSAzOw0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi19Ow0KLUNGWF9QYXRoRGF0YSogQ0ZYX0ZvbnQ6OkxvYWRHbHlwaFBhdGgoRlhfRFdPUkQgZ2x5cGhfaW5kZXgsIGludCBkZXN0X3dpZHRoKQ0KLXsNCi0gICAgaWYgKG1fRmFjZSA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBGWEZUX1NldF9QaXhlbF9TaXplcyhtX0ZhY2UsIDAsIDY0KTsNCi0gICAgRlhGVF9NYXRyaXggIGZ0X21hdHJpeCA9IHs2NTUzNiwgMCwgMCwgNjU1MzZ9Ow0KLSAgICBpZiAobV9wU3Vic3RGb250KSB7DQotICAgICAgICBpZiAobV9wU3Vic3RGb250LT5tX0l0YWxpY0FuZ2xlKSB7DQotICAgICAgICAgICAgaW50IHNrZXcgPSBtX3BTdWJzdEZvbnQtPm1fSXRhbGljQW5nbGU7DQotICAgICAgICAgICAgc2tldyA9IHNrZXcgPD0gLTMwID8gLTU4IDogLWdfQW5nbGVTa2V3Wy1za2V3XTsNCi0gICAgICAgICAgICBpZiAobV9iVmVydGljYWwpIHsNCi0gICAgICAgICAgICAgICAgZnRfbWF0cml4Lnl4ICs9IGZ0X21hdHJpeC55eSAqIHNrZXcgLyAxMDA7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgZnRfbWF0cml4Lnh5ICs9IC1mdF9tYXRyaXgueHggKiBza2V3IC8gMTAwOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChtX3BTdWJzdEZvbnQtPm1fU3Vic3RGbGFncyAmIEZYRk9OVF9TVUJTVF9NTSkgew0KLSAgICAgICAgICAgIEFkanVzdE1NUGFyYW1zKGdseXBoX2luZGV4LCBkZXN0X3dpZHRoLCBtX3BTdWJzdEZvbnQtPm1fV2VpZ2h0KTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpbnQgdHJhbnNmbGFnID0gRlhGVF9HZXRfRmFjZV9JbnRlcm5hbF9GbGFnKG1fRmFjZSk7DQotICAgIEZYRlRfU2V0X1RyYW5zZm9ybShtX0ZhY2UsICZmdF9tYXRyaXgsIDApOw0KLSAgICBpbnQgbG9hZF9mbGFncyA9IChtX0ZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfU0ZOVCkgPyBGWEZUX0xPQURfTk9fQklUTUFQIDogRlhGVF9MT0FEX05PX0JJVE1BUCB8IEZUX0xPQURfTk9fSElOVElORzsNCi0gICAgaW50IGVycm9yID0gRlhGVF9Mb2FkX0dseXBoKG1fRmFjZSwgZ2x5cGhfaW5kZXgsIGxvYWRfZmxhZ3MpOw0KLSAgICBpZiAoZXJyb3IpIHsNCi0gICAgICAgIEZYRlRfU2V0X0ZhY2VfSW50ZXJuYWxfRmxhZyhtX0ZhY2UsIHRyYW5zZmxhZyk7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAobV9wU3Vic3RGb250ICYmICEobV9wU3Vic3RGb250LT5tX1N1YnN0RmxhZ3MgJiBGWEZPTlRfU1VCU1RfTU0pICYmIG1fcFN1YnN0Rm9udC0+bV9XZWlnaHQgPiA0MDApIHsNCi0gICAgICAgIGludCBsZXZlbCA9IDA7DQotICAgICAgICBpZiAobV9wU3Vic3RGb250LT5tX0NoYXJzZXQgPT0gRlhGT05UX1NISUZUSklTX0NIQVJTRVQpIHsNCi0gICAgICAgICAgICBsZXZlbCA9IGdfV2VpZ2h0UG93X1NISUZUSklTWyhtX3BTdWJzdEZvbnQtPm1fV2VpZ2h0IC0gNDAwKSAvIDEwXSAqIDIgKiA2NTUzNiAvIDM2NjU1Ow0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBsZXZlbCA9IGdfV2VpZ2h0UG93WyhtX3BTdWJzdEZvbnQtPm1fV2VpZ2h0IC0gNDAwKSAvIDEwXSAqIDI7DQotICAgICAgICB9DQotICAgICAgICBGWEZUX091dGxpbmVfRW1ib2xkZW4oRlhGVF9HZXRfR2x5cGhfT3V0bGluZShtX0ZhY2UpLCBsZXZlbCk7DQotICAgIH0NCi0gICAgRlhGVF9PdXRsaW5lX0Z1bmNzIGZ1bmNzOw0KLSAgICBmdW5jcy5tb3ZlX3RvID0gX091dGxpbmVfTW92ZVRvOw0KLSAgICBmdW5jcy5saW5lX3RvID0gX091dGxpbmVfTGluZVRvOw0KLSAgICBmdW5jcy5jb25pY190byA9IF9PdXRsaW5lX0NvbmljVG87DQotICAgIGZ1bmNzLmN1YmljX3RvID0gX091dGxpbmVfQ3ViaWNUbzsNCi0gICAgZnVuY3Muc2hpZnQgPSAwOw0KLSAgICBmdW5jcy5kZWx0YSA9IDA7DQotICAgIE9VVExJTkVfUEFSQU1TIHBhcmFtczsNCi0gICAgcGFyYW1zLm1fYkNvdW50ID0gVFJVRTsNCi0gICAgcGFyYW1zLm1fUG9pbnRDb3VudCA9IDA7DQotICAgIEZYRlRfT3V0bGluZV9EZWNvbXBvc2UoRlhGVF9HZXRfR2x5cGhfT3V0bGluZShtX0ZhY2UpLCAmZnVuY3MsICZwYXJhbXMpOw0KLSAgICBpZiAocGFyYW1zLm1fUG9pbnRDb3VudCA9PSAwKSB7DQotICAgICAgICBGWEZUX1NldF9GYWNlX0ludGVybmFsX0ZsYWcobV9GYWNlLCB0cmFuc2ZsYWcpOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ0ZYX1BhdGhEYXRhKiBwUGF0aCA9IEZYX05FVyBDRlhfUGF0aERhdGE7DQotICAgIGlmICghcFBhdGgpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIHBQYXRoLT5TZXRQb2ludENvdW50KHBhcmFtcy5tX1BvaW50Q291bnQpOw0KLSAgICBwYXJhbXMubV9iQ291bnQgPSBGQUxTRTsNCi0gICAgcGFyYW1zLm1fUG9pbnRDb3VudCA9IDA7DQotICAgIHBhcmFtcy5tX3BQb2ludHMgPSBwUGF0aC0+R2V0UG9pbnRzKCk7DQotICAgIHBhcmFtcy5tX0N1clggPSBwYXJhbXMubV9DdXJZID0gMDsNCi0gICAgcGFyYW1zLm1fQ29vcmRVbml0ID0gNjQgKiA2NC4wOw0KLSAgICBGWEZUX091dGxpbmVfRGVjb21wb3NlKEZYRlRfR2V0X0dseXBoX091dGxpbmUobV9GYWNlKSwgJmZ1bmNzLCAmcGFyYW1zKTsNCi0gICAgX091dGxpbmVfQ2hlY2tFbXB0eUNvbnRvdXIoJnBhcmFtcyk7DQotICAgIHBQYXRoLT5UcmltUG9pbnRzKHBhcmFtcy5tX1BvaW50Q291bnQpOw0KLSAgICBpZiAocGFyYW1zLm1fUG9pbnRDb3VudCkgew0KLSAgICAgICAgcFBhdGgtPkdldFBvaW50cygpW3BhcmFtcy5tX1BvaW50Q291bnQgLSAxXS5tX0ZsYWcgfD0gRlhQVF9DTE9TRUZJR1VSRTsNCi0gICAgfQ0KLSAgICBGWEZUX1NldF9GYWNlX0ludGVybmFsX0ZsYWcobV9GYWNlLCB0cmFuc2ZsYWcpOw0KLSAgICByZXR1cm4gcFBhdGg7DQotfQ0KLXZvaWQgX0NGWF9VbmlxdWVLZXlHZW46OkdlbmVyYXRlKGludCBjb3VudCwgLi4uKQ0KLXsNCi0gICAgdmFfbGlzdCBhcmdMaXN0Ow0KLSAgICB2YV9zdGFydChhcmdMaXN0LCBjb3VudCk7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkgKyspIHsNCi0gICAgICAgIGludCBwID0gdmFfYXJnKGFyZ0xpc3QsIGludCk7DQotICAgICAgICAoKEZYX0RXT1JEKiltX0tleSlbaV0gPSBwOw0KLSAgICB9DQotICAgIHZhX2VuZChhcmdMaXN0KTsNCi0gICAgbV9LZXlMZW4gPSBjb3VudCAqIHNpemVvZihGWF9EV09SRCk7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2UuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZnJlZXR5cGUuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Y29kZWMvZnhfY29kZWMuaCIKKyNpbmNsdWRlICJ0ZXh0X2ludC5oIgorI3VuZGVmIEZYX0dBTU1BCisjdW5kZWYgRlhfR0FNTUFfSU5WRVJTRQorI2RlZmluZSBGWF9HQU1NQSh2YWx1ZSkJCQkodmFsdWUpCisjZGVmaW5lIEZYX0dBTU1BX0lOVkVSU0UodmFsdWUpCSh2YWx1ZSkKK0ZYX1JFQ1QgRlhHRV9HZXRHbHlwaHNCQm94KEZYVEVYVF9HTFlQSFBPUyogcEdseXBoQW5kUG9zLCBpbnQgbkNoYXJzLCBpbnQgYW50aV9hbGlhcywgRlhfRkxPQVQgcmV0aW5hU2NhbGVYLCBGWF9GTE9BVCByZXRpbmFTY2FsZVkpCit7CisgICAgRlhfUkVDVCByZWN0KDAsIDAsIDAsIDApOworICAgIEZYX0JPT0wgYlN0YXJ0ZWQgPSBGQUxTRTsKKyAgICBmb3IgKGludCBpQ2hhciA9IDA7IGlDaGFyIDwgbkNoYXJzOyBpQ2hhciArKykgeworICAgICAgICBGWFRFWFRfR0xZUEhQT1MmIGdseXBoID0gcEdseXBoQW5kUG9zW2lDaGFyXTsKKyAgICAgICAgY29uc3QgQ0ZYX0dseXBoQml0bWFwKiBwR2x5cGggPSBnbHlwaC5tX3BHbHlwaDsKKyAgICAgICAgaWYgKHBHbHlwaCA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpbnQgY2hhcl9sZWZ0ID0gZ2x5cGgubV9PcmlnaW5YICsgcEdseXBoLT5tX0xlZnQ7CisgICAgICAgIGludCBjaGFyX3dpZHRoID0gKGludCkocEdseXBoLT5tX0JpdG1hcC5HZXRXaWR0aCgpIC8gcmV0aW5hU2NhbGVYKTsKKyAgICAgICAgaWYgKGFudGlfYWxpYXMgPT0gRlhGVF9SRU5ERVJfTU9ERV9MQ0QpIHsKKyAgICAgICAgICAgIGNoYXJfd2lkdGggLz0gMzsKKyAgICAgICAgfQorICAgICAgICBpbnQgY2hhcl9yaWdodCA9IGNoYXJfbGVmdCArIGNoYXJfd2lkdGg7CisgICAgICAgIGludCBjaGFyX3RvcCA9IGdseXBoLm1fT3JpZ2luWSAtIHBHbHlwaC0+bV9Ub3A7CisgICAgICAgIGludCBjaGFyX2JvdHRvbSA9IGNoYXJfdG9wICsgKGludCkocEdseXBoLT5tX0JpdG1hcC5HZXRIZWlnaHQoKSAvIHJldGluYVNjYWxlWSk7CisgICAgICAgIGlmICghYlN0YXJ0ZWQpIHsKKyAgICAgICAgICAgIHJlY3QubGVmdCA9IGNoYXJfbGVmdDsKKyAgICAgICAgICAgIHJlY3QucmlnaHQgPSBjaGFyX3JpZ2h0OworICAgICAgICAgICAgcmVjdC50b3AgPSBjaGFyX3RvcDsKKyAgICAgICAgICAgIHJlY3QuYm90dG9tID0gY2hhcl9ib3R0b207CisgICAgICAgICAgICBiU3RhcnRlZCA9IFRSVUU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAocmVjdC5sZWZ0ID4gY2hhcl9sZWZ0KSB7CisgICAgICAgICAgICAgICAgcmVjdC5sZWZ0ID0gY2hhcl9sZWZ0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJlY3QucmlnaHQgPCBjaGFyX3JpZ2h0KSB7CisgICAgICAgICAgICAgICAgcmVjdC5yaWdodCA9IGNoYXJfcmlnaHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmVjdC50b3AgPiBjaGFyX3RvcCkgeworICAgICAgICAgICAgICAgIHJlY3QudG9wID0gY2hhcl90b3A7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmVjdC5ib3R0b20gPCBjaGFyX2JvdHRvbSkgeworICAgICAgICAgICAgICAgIHJlY3QuYm90dG9tID0gY2hhcl9ib3R0b207CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlY3Q7Cit9CitzdGF0aWMgdm9pZCBfQWRqdXN0R2x5cGhTcGFjZShGWFRFWFRfR0xZUEhQT1MqIHBHbHlwaEFuZFBvcywgaW50IG5DaGFycykKK3sKKyAgICBBU1NFUlQobkNoYXJzID4gMSk7CisgICAgRlhfQk9PTCBiVmVydGljYWwgPSBGQUxTRTsKKyAgICBpZiAocEdseXBoQW5kUG9zW25DaGFycyAtIDFdLm1fT3JpZ2luWCA9PSBwR2x5cGhBbmRQb3NbMF0ubV9PcmlnaW5YKSB7CisgICAgICAgIGJWZXJ0aWNhbCA9IFRSVUU7CisgICAgfSBlbHNlIGlmIChwR2x5cGhBbmRQb3NbbkNoYXJzIC0gMV0ubV9PcmlnaW5ZICE9IHBHbHlwaEFuZFBvc1swXS5tX09yaWdpblkpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgaSA9IG5DaGFycyAtIDE7CisgICAgaW50KiBuZXh0X29yaWdpbiA9IGJWZXJ0aWNhbCA/ICZwR2x5cGhBbmRQb3NbaV0ubV9PcmlnaW5ZIDogJnBHbHlwaEFuZFBvc1tpXS5tX09yaWdpblg7CisgICAgRlhfRkxPQVQgbmV4dF9vcmlnaW5fZiA9IGJWZXJ0aWNhbCA/IHBHbHlwaEFuZFBvc1tpXS5tX2ZPcmlnaW5ZIDogcEdseXBoQW5kUG9zW2ldLm1fZk9yaWdpblg7CisgICAgZm9yIChpIC0tOyBpID4gMDsgaSAtLSkgeworICAgICAgICBpbnQqIHRoaXNfb3JpZ2luID0gYlZlcnRpY2FsID8gJnBHbHlwaEFuZFBvc1tpXS5tX09yaWdpblkgOiAmcEdseXBoQW5kUG9zW2ldLm1fT3JpZ2luWDsKKyAgICAgICAgRlhfRkxPQVQgdGhpc19vcmlnaW5fZiA9IGJWZXJ0aWNhbCA/IHBHbHlwaEFuZFBvc1tpXS5tX2ZPcmlnaW5ZIDogcEdseXBoQW5kUG9zW2ldLm1fZk9yaWdpblg7CisgICAgICAgIGludCBzcGFjZSA9ICgqbmV4dF9vcmlnaW4pIC0gKCp0aGlzX29yaWdpbik7CisgICAgICAgIEZYX0ZMT0FUIHNwYWNlX2YgPSBuZXh0X29yaWdpbl9mIC0gdGhpc19vcmlnaW5fZjsKKyAgICAgICAgRlhfRkxPQVQgZXJyb3IgPSAoRlhfRkxPQVQpKEZYU1lTX2ZhYnMoc3BhY2VfZikgLSBGWFNZU19mYWJzKChGWF9GTE9BVCkoc3BhY2UpKSk7CisgICAgICAgIGlmIChlcnJvciA+IDAuNWYpIHsKKyAgICAgICAgICAgICp0aGlzX29yaWdpbiArPSBzcGFjZSA+IDAgPyAtMSA6IDE7CisgICAgICAgIH0KKyAgICAgICAgbmV4dF9vcmlnaW4gPSB0aGlzX29yaWdpbjsKKyAgICAgICAgbmV4dF9vcmlnaW5fZiA9IHRoaXNfb3JpZ2luX2Y7CisgICAgfQorfQorc3RhdGljIGNvbnN0IEZYX0JZVEUgZ19HZGlwR2FtbWFfYmd3WzldID0gezAsIDAsIDYzLCAxMjAsIDAsIDE2OCwgMjEwLCAyMzksIDI1NX07CitzdGF0aWMgY29uc3QgRlhfQllURSBnX0dkaXBHYW1tYV9mZ3dbOV0gPSB7MCwgMCwgMTYsIDQ1LCAwLCA4NywgMTM1LCAxOTIsIDI1NX07CitzdGF0aWMgY29uc3QgRlhfQllURSBnX0dkaXBHYW1tYUFkanVzdF80N1s0OF0gPSB7CisgICAgMCwgMzAsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM4LCAzOSwgMzksIDQwLCA0MCwgNDAsIDQxLCA0MSwgNDEsIDQyLCA0MiwgNDIsIDQyLCA0MywKKyAgICA0MywgNDMsIDQzLCA0MywgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDUsIDQ1LCA0NSwgNDUsIDQ1LCA0NSwgNDUsIDQ2LAorICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NworfTsKK3N0YXRpYyBjb25zdCBGWF9CWVRFIGdfR2RpcEdhbW1hQWRqdXN0Xzc1Wzc2XSA9IHsKKyAgICAwLCA0NiwgNTAsIDUyLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjAsIDYxLCA2MSwgNjIsIDYyLCA2MywgNjMsIDY0LCA2NCwgNjQsIDY1LAorICAgIDY1LCA2NSwgNjYsIDY2LCA2NiwgNjcsIDY3LCA2NywgNjcsIDY4LCA2OCwgNjgsIDY4LCA2OCwgNjksIDY5LCA2OSwgNjksIDY5LCA3MCwgNzAsIDcwLAorICAgIDcwLCA3MCwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzIsIDcyLCA3MiwgNzIsIDcyLCA3MiwgNzIsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLAorICAgIDczLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc1Cit9Oworc3RhdGljIGNvbnN0IEZYX0JZVEUgZ19HZGlwR2FtbWFBZGp1c3RfODFbODJdID0geworICAgIDAsIDQ5LCA1MywgNTYsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjUsIDY2LCA2NiwgNjcsIDY3LCA2OCwgNjgsIDY5LCA2OSwgNjksIDcwLCA3MCwgNzAsCisgICAgNzEsIDcxLCA3MSwgNzIsIDcyLCA3MiwgNzIsIDczLCA3MywgNzMsIDczLCA3NCwgNzQsIDc0LCA3NCwgNzQsIDc1LCA3NSwgNzUsIDc1LCA3NSwgNzYsIDc2LCA3NiwgNzYsCisgICAgNzYsIDc2LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA4MCwKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODEKK307CitzdGF0aWMgdm9pZCBfQWRqdXN0X2FscGhhKGludCBiYWNrZ3JvdW5kLCBpbnQgZm9yZWdyb3VuZCwgaW50JiBzcmNfYWxwaGEsIGludCB0ZXh0X2ZsYWdzLCBpbnQgYSkKK3sKK30KK3N0YXRpYyBjb25zdCBGWF9CWVRFIGdfVGV4dEdhbW1hQWRqdXN0WzI1Nl0gPSB7CisgICAgMCwgMiwgMywgNCwgNiwgNywgOCwgMTAsIDExLCAxMiwgMTMsIDE1LCAxNiwgMTcsIDE4LCAxOSwKKyAgICAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzOCwKKyAgICAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUxLCA1MiwgNTMsIDU0LCA1NSwKKyAgICA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcxLCA3MiwKKyAgICA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDgxLCA4MiwgODMsIDg0LCA4NSwgODYsIDg3LCA4OCwKKyAgICA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LAorICAgIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwgMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwKKyAgICAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsIDEyOCwgMTI5LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgMTM0LCAxMzUsCisgICAgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsIDE0NCwgMTQ1LCAxNDYsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLAorICAgIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTYsIDE1NywgMTU4LCAxNTksIDE2MCwgMTYxLCAxNjIsIDE2MywgMTY0LCAxNjUsIDE2NiwKKyAgICAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MSwgMTcyLCAxNzMsIDE3NCwgMTc0LCAxNzUsIDE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODEsCisgICAgMTgyLCAxODMsIDE4NCwgMTg1LCAxODYsIDE4NywgMTg4LCAxODksIDE5MCwgMTkwLCAxOTEsIDE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LAorICAgIDE5NywgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDQsIDIwNSwgMjA2LCAyMDcsIDIwOCwgMjA5LCAyMTAsIDIxMSwKKyAgICAyMTIsIDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgMjIyLCAyMjMsIDIyNCwgMjI1LCAyMjYsCisgICAgMjI3LCAyMjgsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzMsIDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksIDIzOSwgMjQwLAorICAgIDI0MSwgMjQyLCAyNDMsIDI0NCwgMjQ1LCAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NSwKK307CisjZGVmaW5lIEFESlVTVF9BTFBIQShiYWNrZ3JvdW5kLCBmb3JlZ3JvdW5kLCBzcmNfYWxwaGEsIHRleHRfZmxhZ3MsIGEpIFwKKyAgICBzcmNfYWxwaGEgPSBnX1RleHRHYW1tYUFkanVzdFsoRlhfQllURSlzcmNfYWxwaGFdOwordm9pZCBfQ29sb3IyQXJnYihGWF9BUkdCJiBhcmdiLCBGWF9EV09SRCBjb2xvciwgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgaWYgKHBJY2NUcmFuc2Zvcm0gPT0gTlVMTCAmJiAhRlhHRVRGTEFHX0NPTE9SVFlQRShhbHBoYV9mbGFnKSkgeworICAgICAgICBhcmdiID0gY29sb3I7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpIHx8ICFDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKSkgeworICAgICAgICBwSWNjVHJhbnNmb3JtID0gTlVMTDsKKyAgICB9CisgICAgRlhfQllURSBiZ3JhWzRdOworICAgIGlmIChwSWNjVHJhbnNmb3JtKSB7CisgICAgICAgIElDb2RlY19JY2NNb2R1bGUqIHBJY2NNb2R1bGUgPSBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKTsKKyAgICAgICAgY29sb3IgPSBGWEdFVEZMQUdfQ09MT1JUWVBFKGFscGhhX2ZsYWcpID8gRlhDTVlLX1RPRElCKGNvbG9yKSA6IEZYQVJHQl9UT0RJQihjb2xvcik7CisgICAgICAgIHBJY2NNb2R1bGUtPlRyYW5zbGF0ZVNjYW5saW5lKHBJY2NUcmFuc2Zvcm0sIGJncmEsIChGWF9MUENCWVRFKSZjb2xvciwgMSk7CisgICAgICAgIGJncmFbM10gPSBGWEdFVEZMQUdfQ09MT1JUWVBFKGFscGhhX2ZsYWcpID8KKyAgICAgICAgICAgICAgICAgIChhbHBoYV9mbGFnID4+IDI0KSA/IEZYR0VURkxBR19BTFBIQV9GSUxMKGFscGhhX2ZsYWcpIDogRlhHRVRGTEFHX0FMUEhBX1NUUk9LRShhbHBoYV9mbGFnKSA6CisgICAgICAgICAgICAgICAgICBGWEFSR0JfQShjb2xvcik7CisgICAgICAgIGFyZ2IgPSBGWEFSR0JfTUFLRShiZ3JhWzNdLCBiZ3JhWzJdLCBiZ3JhWzFdLCBiZ3JhWzBdKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBZG9iZUNNWUtfdG9fc1JHQjEoRlhTWVNfR2V0Q1ZhbHVlKGNvbG9yKSwgRlhTWVNfR2V0TVZhbHVlKGNvbG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgRlhTWVNfR2V0WVZhbHVlKGNvbG9yKSwgRlhTWVNfR2V0S1ZhbHVlKGNvbG9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgYmdyYVsyXSwgYmdyYVsxXSwgYmdyYVswXSk7CisgICAgYmdyYVszXSA9IChhbHBoYV9mbGFnID4+IDI0KSA/IEZYR0VURkxBR19BTFBIQV9GSUxMKGFscGhhX2ZsYWcpIDogRlhHRVRGTEFHX0FMUEhBX1NUUk9LRShhbHBoYV9mbGFnKTsKKyAgICBhcmdiID0gRlhBUkdCX01BS0UoYmdyYVszXSwgYmdyYVsyXSwgYmdyYVsxXSwgYmdyYVswXSk7Cit9CitGWF9CT09MIENGWF9SZW5kZXJEZXZpY2U6OkRyYXdOb3JtYWxUZXh0KGludCBuQ2hhcnMsIGNvbnN0IEZYVEVYVF9DSEFSUE9TKiBwQ2hhclBvcywKKyAgICAgICAgQ0ZYX0ZvbnQqIHBGb250LCBDRlhfRm9udENhY2hlKiBwQ2FjaGUsCisgICAgICAgIEZYX0ZMT0FUIGZvbnRfc2l6ZSwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcFRleHQyRGV2aWNlLAorICAgICAgICBGWF9EV09SRCBmaWxsX2NvbG9yLCBGWF9EV09SRCB0ZXh0X2ZsYWdzLAorICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSkKK3sKKyAgICBpbnQgbmF0aXZldGV4dF9mbGFncyA9IHRleHRfZmxhZ3M7CisgICAgaWYgKG1fRGV2aWNlQ2xhc3MgIT0gRlhEQ19ESVNQTEFZKSB7CisgICAgICAgIGlmICghKHRleHRfZmxhZ3MgJiBGWFRFWFRfUFJJTlRHUkFQSElDVEVYVCkpIHsKKyNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8KKyAgICAgICAgICAgIGlmICghKHRleHRfZmxhZ3MgJiBGWEZPTlRfQ0lERk9OVCkgJiYgcEZvbnQtPkdldFBzTmFtZSgpLkZpbmQoQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbCgiK1pKSEwiKSkgPT0gLTEpCisjaWZkZWYgRk9YSVRfQ0hST01FX0JVSUxECisgICAgICAgICAgICAgICAgaWYgKHBGb250LT5HZXRQc05hbWUoKSAhPSBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKCJDTkFBSkkrY21leDEwIikpCisjZW5kaWYKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBpZiAobV9wRGV2aWNlRHJpdmVyLT5EcmF3RGV2aWNlVGV4dChuQ2hhcnMsIHBDaGFyUG9zLCBwRm9udCwgcENhY2hlLCBwVGV4dDJEZXZpY2UsIGZvbnRfc2l6ZSwgZmlsbF9jb2xvciwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaW50IGFscGhhID0gRlhHRVRGTEFHX0NPTE9SVFlQRShhbHBoYV9mbGFnKSA/IEZYR0VURkxBR19BTFBIQV9GSUxMKGFscGhhX2ZsYWcpIDogRlhBUkdCX0EoZmlsbF9jb2xvcik7CisgICAgICAgIGlmIChhbHBoYSA8IDI1NSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICghKHRleHRfZmxhZ3MgJiBGWFRFWFRfTk9fTkFUSVZFVEVYVCkpIHsKKyNpZiBfRlhNX1BMQVRGT1JNXyAgPT0gX0ZYTV9QTEFURk9STV9BUFBMRV8KKyAgICAgICAgaWYgKCEodGV4dF9mbGFncyAmIEZYRk9OVF9DSURGT05UKSkKKyNpZmRlZiBGT1hJVF9DSFJPTUVfQlVJTEQKKyAgICAgICAgICAgIGlmIChwRm9udC0+R2V0UHNOYW1lKCkgIT0gQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbCgiQ05BQUpJK2NtZXgxMCIpKQorI2VuZGlmCisjZW5kaWYKKyAgICAgICAgICAgICAgICBpZiAobV9wRGV2aWNlRHJpdmVyLT5EcmF3RGV2aWNlVGV4dChuQ2hhcnMsIHBDaGFyUG9zLCBwRm9udCwgcENhY2hlLCBwVGV4dDJEZXZpY2UsIGZvbnRfc2l6ZSwgZmlsbF9jb2xvciwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICAgICAgfQorICAgIH0KKyAgICBDRlhfQWZmaW5lTWF0cml4IGNoYXIyZGV2aWNlLCBkZXZpY2VDdG0sIHRleHQyRGV2aWNlOworICAgIGlmIChwVGV4dDJEZXZpY2UpIHsKKyAgICAgICAgY2hhcjJkZXZpY2UgPSAqcFRleHQyRGV2aWNlOworICAgICAgICB0ZXh0MkRldmljZSA9ICpwVGV4dDJEZXZpY2U7CisgICAgfQorICAgIGNoYXIyZGV2aWNlLlNjYWxlKGZvbnRfc2l6ZSwgLWZvbnRfc2l6ZSk7CisgICAgaWYgKEZYU1lTX2ZhYnMoY2hhcjJkZXZpY2UuYSkgKyBGWFNZU19mYWJzKGNoYXIyZGV2aWNlLmIpID4gNTAgKiAxLjBmIHx8CisgICAgICAgICAgICAoKG1fRGV2aWNlQ2xhc3MgPT0gRlhEQ19QUklOVEVSICYmICFtX3BEZXZpY2VEcml2ZXItPklzUFNQcmludERyaXZlcigpKQorICAgICAgICAgICAgICYmICEodGV4dF9mbGFncyAmIEZYVEVYVF9QUklOVElNQUdFVEVYVCkpKSB7CisgICAgICAgIGlmIChwRm9udC0+R2V0RmFjZSgpICE9IE5VTEwgfHwgKHBGb250LT5HZXRTdWJzdEZvbnQoKS0+bV9TdWJzdEZsYWdzICYgRlhGT05UX1NVQlNUX0dMWVBIUEFUSCkpIHsKKyAgICAgICAgICAgIGludCBuUGF0aEZsYWdzID0gKHRleHRfZmxhZ3MgJiBGWFRFWFRfTk9TTU9PVEgpID09IDAgPyAwIDogRlhGSUxMX05PUEFUSFNNT09USDsKKyAgICAgICAgICAgIHJldHVybiBEcmF3VGV4dFBhdGgobkNoYXJzLCBwQ2hhclBvcywgcEZvbnQsIHBDYWNoZSwgZm9udF9zaXplLCBwVGV4dDJEZXZpY2UsIE5VTEwsIE5VTEwsIGZpbGxfY29sb3IsIDAsIE5VTEwsIG5QYXRoRmxhZ3MsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOworICAgICAgICB9CisgICAgfQorICAgIGludCBhbnRpX2FsaWFzID0gRlhGVF9SRU5ERVJfTU9ERV9NT05POworICAgIEZYX0JPT0wgYk5vcm1hbCA9IEZBTFNFOworICAgIGlmICgodGV4dF9mbGFncyAmIEZYVEVYVF9OT1NNT09USCkgPT0gMCkgeworICAgICAgICBpZiAobV9EZXZpY2VDbGFzcyA9PSBGWERDX0RJU1BMQVkgJiYgbV9icHAgPiAxKSB7CisgICAgICAgICAgICBGWF9CT09MIGJDbGVhclR5cGU7CisgICAgICAgICAgICBpZiAocEZvbnQtPkdldEZhY2UoKSA9PSBOVUxMICYmICEocEZvbnQtPkdldFN1YnN0Rm9udCgpLT5tX1N1YnN0RmxhZ3MgJiBGWEZPTlRfU1VCU1RfQ0xFQVJUWVBFKSkgeworICAgICAgICAgICAgICAgIGJDbGVhclR5cGUgPSBGQUxTRTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYkNsZWFyVHlwZSA9IHRleHRfZmxhZ3MgJiBGWFRFWFRfQ0xFQVJUWVBFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChtX1JlbmRlckNhcHMgJiAoRlhSQ19BTFBIQV9PVVRQVVQgfCBGWFJDX0NNWUtfT1VUUFVUKSkpIHsKKyAgICAgICAgICAgICAgICBhbnRpX2FsaWFzID0gRlhGVF9SRU5ERVJfTU9ERV9MQ0Q7CisgICAgICAgICAgICAgICAgYk5vcm1hbCA9IFRSVUU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fYnBwIDwgMTYpIHsKKyAgICAgICAgICAgICAgICBhbnRpX2FsaWFzID0gRlhGVF9SRU5ERVJfTU9ERV9OT1JNQUw7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChiQ2xlYXJUeXBlID09IEZBTFNFKSB7CisgICAgICAgICAgICAgICAgICAgIGFudGlfYWxpYXMgPSBGWEZUX1JFTkRFUl9NT0RFX0xDRDsKKyAgICAgICAgICAgICAgICAgICAgYk5vcm1hbCA9IFRSVUU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYW50aV9hbGlhcyA9IEZYRlRfUkVOREVSX01PREVfTENEOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocENhY2hlID09IE5VTEwpIHsKKyAgICAgICAgcENhY2hlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Rm9udENhY2hlKCk7CisgICAgfQorICAgIENGWF9GYWNlQ2FjaGUqIHBGYWNlQ2FjaGUgPSBwQ2FjaGUtPkdldENhY2hlZEZhY2UocEZvbnQpOworICAgIEZYX0ZPTlRDQUNIRV9ERUZJTkUocENhY2hlLCBwRm9udCk7CisgICAgRlhURVhUX0dMWVBIUE9TKiBwR2x5cGhBbmRQb3MgPSBGWF9BbGxvYyhGWFRFWFRfR0xZUEhQT1MsIG5DaGFycyk7CisgICAgaWYgKCFwR2x5cGhBbmRQb3MpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBpbnQgaUNoYXI7CisgICAgZGV2aWNlQ3RtID0gY2hhcjJkZXZpY2U7CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXhDVE0gPSBHZXRDVE0oKTsKKyAgICBGWF9GTE9BVCBzY2FsZV94ID0gRlhTWVNfZmFicyhtYXRyaXhDVE0uYSk7CisgICAgRlhfRkxPQVQgc2NhbGVfeSA9IEZYU1lTX2ZhYnMobWF0cml4Q1RNLmQpOworICAgIGRldmljZUN0bS5Db25jYXQoc2NhbGVfeCwgMCwgMCwgc2NhbGVfeSwgMCwgMCk7CisgICAgdGV4dDJEZXZpY2UuQ29uY2F0KHNjYWxlX3gsIDAsIDAsIHNjYWxlX3ksIDAsIDApOworICAgIGZvciAoaUNoYXIgPSAwOyBpQ2hhciA8IG5DaGFyczsgaUNoYXIgKyspIHsKKyAgICAgICAgRlhURVhUX0dMWVBIUE9TJiBnbHlwaCA9IHBHbHlwaEFuZFBvc1tpQ2hhcl07CisgICAgICAgIGNvbnN0IEZYVEVYVF9DSEFSUE9TJiBjaGFycG9zID0gcENoYXJQb3NbaUNoYXJdOworICAgICAgICBnbHlwaC5tX2ZPcmlnaW5YID0gY2hhcnBvcy5tX09yaWdpblg7CisgICAgICAgIGdseXBoLm1fZk9yaWdpblkgPSBjaGFycG9zLm1fT3JpZ2luWTsKKyAgICAgICAgdGV4dDJEZXZpY2UuVHJhbnNmb3JtKGdseXBoLm1fZk9yaWdpblgsIGdseXBoLm1fZk9yaWdpblkpOworICAgICAgICBpZiAoYW50aV9hbGlhcyA8IEZYRlRfUkVOREVSX01PREVfTENEKSB7CisgICAgICAgICAgICBnbHlwaC5tX09yaWdpblggPSBGWFNZU19yb3VuZChnbHlwaC5tX2ZPcmlnaW5YKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdseXBoLm1fT3JpZ2luWCA9IChpbnQpRlhTWVNfZmxvb3IoZ2x5cGgubV9mT3JpZ2luWCk7CisgICAgICAgIH0KKyAgICAgICAgZ2x5cGgubV9PcmlnaW5ZID0gRlhTWVNfcm91bmQoZ2x5cGgubV9mT3JpZ2luWSk7CisgICAgICAgIGlmIChjaGFycG9zLm1fYkdseXBoQWRqdXN0KSB7CisgICAgICAgICAgICBDRlhfQWZmaW5lTWF0cml4IG5ld19tYXRyaXgoY2hhcnBvcy5tX0FkanVzdE1hdHJpeFswXSwgY2hhcnBvcy5tX0FkanVzdE1hdHJpeFsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFycG9zLm1fQWRqdXN0TWF0cml4WzJdLCBjaGFycG9zLm1fQWRqdXN0TWF0cml4WzNdLCAwLCAwKTsKKyAgICAgICAgICAgIG5ld19tYXRyaXguQ29uY2F0KGRldmljZUN0bSk7CisgICAgICAgICAgICBnbHlwaC5tX3BHbHlwaCA9IHBGYWNlQ2FjaGUtPkxvYWRHbHlwaEJpdG1hcChwRm9udCwgY2hhcnBvcy5tX0dseXBoSW5kZXgsIGNoYXJwb3MubV9iRm9udFN0eWxlLCAmbmV3X21hdHJpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnBvcy5tX0ZvbnRDaGFyV2lkdGgsIGFudGlfYWxpYXMsIG5hdGl2ZXRleHRfZmxhZ3MpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGdseXBoLm1fcEdseXBoID0gcEZhY2VDYWNoZS0+TG9hZEdseXBoQml0bWFwKHBGb250LCBjaGFycG9zLm1fR2x5cGhJbmRleCwgY2hhcnBvcy5tX2JGb250U3R5bGUsICZkZXZpY2VDdG0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJwb3MubV9Gb250Q2hhcldpZHRoLCBhbnRpX2FsaWFzLCBuYXRpdmV0ZXh0X2ZsYWdzKTsKKyAgICB9CisgICAgaWYgKGFudGlfYWxpYXMgPCBGWEZUX1JFTkRFUl9NT0RFX0xDRCAmJiBuQ2hhcnMgPiAxKSB7CisgICAgICAgIF9BZGp1c3RHbHlwaFNwYWNlKHBHbHlwaEFuZFBvcywgbkNoYXJzKTsKKyAgICB9CisgICAgRlhfUkVDVCBibXBfcmVjdDEgPSBGWEdFX0dldEdseXBoc0JCb3gocEdseXBoQW5kUG9zLCBuQ2hhcnMsIGFudGlfYWxpYXMpOworICAgIGlmIChzY2FsZV94ID4gMSAmJiBzY2FsZV95ID4gMSkgeworICAgICAgICBibXBfcmVjdDEubGVmdC0tOworICAgICAgICBibXBfcmVjdDEudG9wIC0tOworICAgICAgICBibXBfcmVjdDEucmlnaHQgKys7CisgICAgICAgIGJtcF9yZWN0MS5ib3R0b20gKys7CisgICAgfQorICAgIEZYX1JFQ1QgYm1wX3JlY3QoRlhTWVNfcm91bmQoKEZYX0ZMT0FUKShibXBfcmVjdDEubGVmdCkgLyBzY2FsZV94KSwgRlhTWVNfcm91bmQoKEZYX0ZMT0FUKShibXBfcmVjdDEudG9wKSAvIHNjYWxlX3kpLAorICAgICAgICAgICAgICAgICAgICAgRlhTWVNfcm91bmQoKEZYX0ZMT0FUKWJtcF9yZWN0MS5yaWdodCAvIHNjYWxlX3gpLCBGWFNZU19yb3VuZCgoRlhfRkxPQVQpYm1wX3JlY3QxLmJvdHRvbSAvIHNjYWxlX3kpKTsKKyAgICBibXBfcmVjdC5JbnRlcnNlY3QobV9DbGlwQm94KTsKKyAgICBpZiAoYm1wX3JlY3QuSXNFbXB0eSgpKSB7CisgICAgICAgIEZYX0ZyZWUocEdseXBoQW5kUG9zKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGludCBwaXhlbF93aWR0aCA9IEZYU1lTX3JvdW5kKGJtcF9yZWN0LldpZHRoKCkgKiBzY2FsZV94KTsKKyAgICBpbnQgcGl4ZWxfaGVpZ2h0ID0gRlhTWVNfcm91bmQoYm1wX3JlY3QuSGVpZ2h0KCkgKiBzY2FsZV95KTsKKyAgICBpbnQgcGl4ZWxfbGVmdCA9IEZYU1lTX3JvdW5kKGJtcF9yZWN0LmxlZnQgKiBzY2FsZV94KTsKKyAgICBpbnQgcGl4ZWxfdG9wID0gRlhTWVNfcm91bmQoYm1wX3JlY3QudG9wICogc2NhbGVfeSk7CisgICAgaWYgKGFudGlfYWxpYXMgPT0gRlhGVF9SRU5ERVJfTU9ERV9NT05PKSB7CisgICAgICAgIENGWF9ESUJpdG1hcCBiaXRtYXA7CisgICAgICAgIGlmICghYml0bWFwLkNyZWF0ZShwaXhlbF93aWR0aCwgcGl4ZWxfaGVpZ2h0LCBGWERJQl8xYnBwTWFzaykpIHsKKyAgICAgICAgICAgIEZYX0ZyZWUocEdseXBoQW5kUG9zKTsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBiaXRtYXAuQ2xlYXIoMCk7CisgICAgICAgIGZvciAoaUNoYXIgPSAwOyBpQ2hhciA8IG5DaGFyczsgaUNoYXIgKyspIHsKKyAgICAgICAgICAgIEZYVEVYVF9HTFlQSFBPUyYgZ2x5cGggPSBwR2x5cGhBbmRQb3NbaUNoYXJdOworICAgICAgICAgICAgaWYgKGdseXBoLm1fcEdseXBoID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IENGWF9ESUJpdG1hcCogcEdseXBoID0gJmdseXBoLm1fcEdseXBoLT5tX0JpdG1hcDsKKyAgICAgICAgICAgIGJpdG1hcC5UcmFuc2ZlckJpdG1hcChnbHlwaC5tX09yaWdpblggKyBnbHlwaC5tX3BHbHlwaC0+bV9MZWZ0IC0gcGl4ZWxfbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaC5tX09yaWdpblkgLSBnbHlwaC5tX3BHbHlwaC0+bV9Ub3AgLSBwaXhlbF90b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEdseXBoLT5HZXRXaWR0aCgpLCBwR2x5cGgtPkdldEhlaWdodCgpLCBwR2x5cGgsIDAsIDApOworICAgICAgICB9CisgICAgICAgIEZYX0ZyZWUocEdseXBoQW5kUG9zKTsKKyAgICAgICAgcmV0dXJuIFNldEJpdE1hc2soJmJpdG1hcCwgYm1wX3JlY3QubGVmdCwgYm1wX3JlY3QudG9wLCBmaWxsX2NvbG9yKTsKKyAgICB9CisgICAgQ0ZYX0RJQml0bWFwIGJpdG1hcDsKKyAgICBpZiAobV9icHAgPT0gOCkgeworICAgICAgICBpZiAoIWJpdG1hcC5DcmVhdGUocGl4ZWxfd2lkdGgsIHBpeGVsX2hlaWdodCwgRlhESUJfOGJwcE1hc2spKSB7CisgICAgICAgICAgICBGWF9GcmVlKHBHbHlwaEFuZFBvcyk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIUNyZWF0ZUNvbXBhdGlibGVCaXRtYXAoJmJpdG1hcCwgcGl4ZWxfd2lkdGgsIHBpeGVsX2hlaWdodCkpIHsKKyAgICAgICAgICAgIEZYX0ZyZWUocEdseXBoQW5kUG9zKTsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWJpdG1hcC5IYXNBbHBoYSgpICYmICFiaXRtYXAuSXNBbHBoYU1hc2soKSkgeworICAgICAgICBiaXRtYXAuQ2xlYXIoMHhGRkZGRkZGRik7CisgICAgICAgIGlmICghR2V0RElCaXRzKCZiaXRtYXAsIGJtcF9yZWN0LmxlZnQsIGJtcF9yZWN0LnRvcCkpIHsKKyAgICAgICAgICAgIEZYX0ZyZWUocEdseXBoQW5kUG9zKTsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGJpdG1hcC5DbGVhcigwKTsKKyAgICAgICAgaWYgKGJpdG1hcC5tX3BBbHBoYU1hc2spIHsKKyAgICAgICAgICAgIGJpdG1hcC5tX3BBbHBoYU1hc2stPkNsZWFyKDApOworICAgICAgICB9CisgICAgfQorICAgIGludCBkZXN0X3dpZHRoID0gcGl4ZWxfd2lkdGg7CisgICAgRlhfTFBCWVRFIGRlc3RfYnVmID0gYml0bWFwLkdldEJ1ZmZlcigpOworICAgIGludCBkZXN0X3BpdGNoID0gYml0bWFwLkdldFBpdGNoKCk7CisgICAgaW50IEJwcCA9IGJpdG1hcC5HZXRCUFAoKSAvIDg7CisgICAgaW50IGEsIHIsIGcsIGI7CisgICAgaWYgKGFudGlfYWxpYXMgPT0gRlhGVF9SRU5ERVJfTU9ERV9MQ0QpIHsKKyAgICAgICAgX0NvbG9yMkFyZ2IoZmlsbF9jb2xvciwgZmlsbF9jb2xvciwgYWxwaGFfZmxhZyB8ICgxIDw8IDI0KSwgcEljY1RyYW5zZm9ybSk7CisgICAgICAgIEFyZ2JEZWNvZGUoZmlsbF9jb2xvciwgYSwgciwgZywgYik7CisgICAgICAgIHIgPSBGWF9HQU1NQShyKTsKKyAgICAgICAgZyA9IEZYX0dBTU1BKGcpOworICAgICAgICBiID0gRlhfR0FNTUEoYik7CisgICAgfQorICAgIGZvciAoaUNoYXIgPSAwOyBpQ2hhciA8IG5DaGFyczsgaUNoYXIgKyspIHsKKyAgICAgICAgRlhURVhUX0dMWVBIUE9TJiBnbHlwaCA9IHBHbHlwaEFuZFBvc1tpQ2hhcl07CisgICAgICAgIGlmIChnbHlwaC5tX3BHbHlwaCA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBjb25zdCBDRlhfRElCaXRtYXAqIHBHbHlwaCA9ICZnbHlwaC5tX3BHbHlwaC0+bV9CaXRtYXA7CisgICAgICAgIGludCBsZWZ0ID0gZ2x5cGgubV9PcmlnaW5YICsgZ2x5cGgubV9wR2x5cGgtPm1fTGVmdCAtIHBpeGVsX2xlZnQ7CisgICAgICAgIGludCB0b3AgPSBnbHlwaC5tX09yaWdpblkgLSBnbHlwaC5tX3BHbHlwaC0+bV9Ub3AgLSBwaXhlbF90b3A7CisgICAgICAgIGludCBuY29scyA9IHBHbHlwaC0+R2V0V2lkdGgoKTsKKyAgICAgICAgaW50IG5yb3dzID0gcEdseXBoLT5HZXRIZWlnaHQoKTsKKyAgICAgICAgaWYgKGFudGlfYWxpYXMgPT0gRlhGVF9SRU5ERVJfTU9ERV9OT1JNQUwpIHsKKyAgICAgICAgICAgIGlmICghYml0bWFwLkNvbXBvc2l0ZU1hc2sobGVmdCwgdG9wLCBuY29scywgbnJvd3MsIHBHbHlwaCwgZmlsbF9jb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgRlhESUJfQkxFTkRfTk9STUFMLCBOVUxMLCBGQUxTRSwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSkpIHsKKyAgICAgICAgICAgICAgICBGWF9GcmVlKHBHbHlwaEFuZFBvcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgRlhfQk9PTCBiQkdSU3RyaXBlID0gdGV4dF9mbGFncyAmIEZYVEVYVF9CR1JfU1RSSVBFOworICAgICAgICBuY29scyAvPSAzOworICAgICAgICBpbnQgeF9zdWJwaXhlbCA9IChpbnQpKGdseXBoLm1fZk9yaWdpblggKiAzKSAlIDM7CisgICAgICAgIEZYX0xQQllURSBzcmNfYnVmID0gcEdseXBoLT5HZXRCdWZmZXIoKTsKKyAgICAgICAgaW50IHNyY19waXRjaCA9IHBHbHlwaC0+R2V0UGl0Y2goKTsKKyAgICAgICAgaW50IHN0YXJ0X2NvbCA9IGxlZnQ7CisgICAgICAgIGlmIChzdGFydF9jb2wgPCAwKSB7CisgICAgICAgICAgICBzdGFydF9jb2wgPSAwOworICAgICAgICB9CisgICAgICAgIGludCBlbmRfY29sID0gbGVmdCArIG5jb2xzOworICAgICAgICBpZiAoZW5kX2NvbCA+IGRlc3Rfd2lkdGgpIHsKKyAgICAgICAgICAgIGVuZF9jb2wgPSBkZXN0X3dpZHRoOworICAgICAgICB9CisgICAgICAgIGlmIChzdGFydF9jb2wgPj0gZW5kX2NvbCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJpdG1hcC5HZXRGb3JtYXQoKSA9PSBGWERJQl9BcmdiKSB7CisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBucm93czsgcm93ICsrKSB7CisgICAgICAgICAgICAgICAgaW50IGRlc3Rfcm93ID0gcm93ICsgdG9wOworICAgICAgICAgICAgICAgIGlmIChkZXN0X3JvdyA8IDAgfHwgZGVzdF9yb3cgPj0gYml0bWFwLkdldEhlaWdodCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBGWF9MUEJZVEUgc3JjX3NjYW4gPSBzcmNfYnVmICsgcm93ICogc3JjX3BpdGNoICsgKHN0YXJ0X2NvbCAtIGxlZnQpICogMzsKKyAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyBkZXN0X3JvdyAqIGRlc3RfcGl0Y2ggKyAoc3RhcnRfY29sIDw8IDIpOworICAgICAgICAgICAgICAgIGlmIChiQkdSU3RyaXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh4X3N1YnBpeGVsID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IHN0YXJ0X2NvbDsgY29sIDwgZW5kX2NvbDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWzJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgZywgc3JjX2FscGhhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bMF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHhfc3VicGl4ZWwgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWzFdOworICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHIsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bMF07CisgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzFdLCBnLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOworICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgZywgc3JjX2FscGhhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRfY29sID4gbGVmdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWy0xXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzBdLCBiLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMF0pLCBiLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IHN0YXJ0X2NvbCArIDE7IGNvbCA8IGVuZF9jb2wgLSAxOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gc3JjX3NjYW5bMV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzJdKSwgciwgc3JjX2FscGhhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bMF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsxXSwgZywgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgZywgc3JjX2FscGhhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bLTFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMF0sIGIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHIsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0X2NvbCA+IGxlZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblstMV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsxXSwgZywgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgZywgc3JjX2FscGhhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bLTJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMF0sIGIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzNdID0gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gc3RhcnRfY29sICsgMTsgY29sIDwgZW5kX2NvbCAtIDE7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBzcmNfc2NhblswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzJdLCByLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblstMV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsxXSwgZywgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgZywgc3JjX2FscGhhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bLTJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMF0sIGIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHhfc3VicGl4ZWwgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gc3RhcnRfY29sOyBjb2wgPCBlbmRfY29sOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYk5vcm1hbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhMSA9IChzcmNfc2NhblswXSArIHNyY19zY2FuWzFdICsgc3JjX3NjYW5bMl0pIC8gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhMSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYTEgPSBzcmNfYWxwaGExICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gZGVzdF9zY2FuWzNdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWEFSR0JfU0VURElCKGRlc3Rfc2NhbiwgRlhBUkdCX01BS0Uoc3JjX2FscGhhMSwgciwgZywgYikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYTEgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYTEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhMSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzNdID0gZGVzdF9hbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhMSAqIDI1NSAvIGRlc3RfYWxwaGE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzJdKSwgciwgYWxwaGFfcmF0aW8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBhbHBoYV9yYXRpbykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIGFscGhhX3JhdGlvKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMl0sIHIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHIsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMV0sIGcsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsxXSksIGcsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMF0sIGIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHhfc3VicGl4ZWwgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJOb3JtYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhMSA9IHN0YXJ0X2NvbCA+IGxlZnQgPyAoKHNyY19zY2FuWy0xXSArIHNyY19zY2FuWzBdICsgc3JjX3NjYW5bMV0pIC8gMykgOiAoKHNyY19zY2FuWzBdICsgc3JjX3NjYW5bMV0pIC8gMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhMSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhMSA9IHNyY19hbHBoYTEgKiBhIC8gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfYWxwaGExID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gZGVzdF9zY2FuWzNdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWEFSR0JfU0VURElCKGRlc3Rfc2NhbiwgRlhBUkdCX01BS0Uoc3JjX2FscGhhMSwgciwgZywgYikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYTEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhMSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IGRlc3RfYWxwaGE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGExICogMjU1IC8gZGVzdF9hbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzJdKSwgciwgYWxwaGFfcmF0aW8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgZywgYWxwaGFfcmF0aW8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgYWxwaGFfcmF0aW8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydF9jb2wgPiBsZWZ0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBzcmNfc2NhblstMV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMl0sIHIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzJdKSwgciwgc3JjX2FscGhhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBzcmNfc2NhblswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzFdLCBnLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzBdLCBiLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMF0pLCBiLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bM10gPSAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IHN0YXJ0X2NvbCArIDE7IGNvbCA8IGVuZF9jb2w7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiTm9ybWFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGExID0gKHNyY19zY2FuWy0xXSArIHNyY19zY2FuWzBdICsgc3JjX3NjYW5bMV0pIC8gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhMSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYTEgPSBzcmNfYWxwaGExICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gZGVzdF9zY2FuWzNdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWEFSR0JfU0VURElCKGRlc3Rfc2NhbiwgRlhBUkdCX01BS0Uoc3JjX2FscGhhMSwgciwgZywgYikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYTEgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYTEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhMSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzNdID0gZGVzdF9hbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhMSAqIDI1NSAvIGRlc3RfYWxwaGE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzJdKSwgciwgYWxwaGFfcmF0aW8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBhbHBoYV9yYXRpbykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIGFscGhhX3JhdGlvKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWy0xXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzJdLCByLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzFdLCBnLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzBdLCBiLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMF0pLCBiLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bM10gPSAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiTm9ybWFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYTEgPSBzdGFydF9jb2wgPiBsZWZ0ID8gKChzcmNfc2NhblstMl0gKyBzcmNfc2NhblstMV0gKyBzcmNfc2NhblswXSkgLyAzKSA6ICgoc3JjX3NjYW5bMF0pIC8gMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhMSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhMSA9IHNyY19hbHBoYTEgKiBhIC8gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfYWxwaGExID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gZGVzdF9zY2FuWzNdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWEFSR0JfU0VURElCKGRlc3Rfc2NhbiwgRlhBUkdCX01BS0Uoc3JjX2FscGhhMSwgciwgZywgYikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYTEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhMSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IGRlc3RfYWxwaGE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfcmF0aW8gPSBzcmNfYWxwaGExICogMjU1IC8gZGVzdF9hbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzJdKSwgciwgYWxwaGFfcmF0aW8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgZywgYWxwaGFfcmF0aW8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgYWxwaGFfcmF0aW8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydF9jb2wgPiBsZWZ0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBzcmNfc2NhblstMl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMl0sIHIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzJdKSwgciwgc3JjX2FscGhhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWy0xXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsxXSwgZywgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMF0sIGIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblszXSA9IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gc3RhcnRfY29sICsgMTsgY29sIDwgZW5kX2NvbDsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJOb3JtYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYTEgPSAoc3JjX3NjYW5bLTJdICsgc3JjX3NjYW5bLTFdICsgc3JjX3NjYW5bMF0pIC8gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhMSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYTEgPSBzcmNfYWxwaGExICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSBiYWNrX2FscGhhID0gZGVzdF9zY2FuWzNdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFja19hbHBoYSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWEFSR0JfU0VURElCKGRlc3Rfc2NhbiwgRlhBUkdCX01BS0Uoc3JjX2FscGhhMSwgciwgZywgYikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYTEgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfQllURSBkZXN0X2FscGhhID0gYmFja19hbHBoYSArIHNyY19hbHBoYTEgLSBiYWNrX2FscGhhICogc3JjX2FscGhhMSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzNdID0gZGVzdF9hbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX3JhdGlvID0gc3JjX2FscGhhMSAqIDI1NSAvIGRlc3RfYWxwaGE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzJdKSwgciwgYWxwaGFfcmF0aW8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBhbHBoYV9yYXRpbykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIGFscGhhX3JhdGlvKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWy0yXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzJdLCByLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblstMV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsxXSwgZywgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgZywgc3JjX2FscGhhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bMF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblswXSwgYiwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgc3JjX2FscGhhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzNdID0gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSA0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBucm93czsgcm93ICsrKSB7CisgICAgICAgICAgICAgICAgaW50IGRlc3Rfcm93ID0gcm93ICsgdG9wOworICAgICAgICAgICAgICAgIGlmIChkZXN0X3JvdyA8IDAgfHwgZGVzdF9yb3cgPj0gYml0bWFwLkdldEhlaWdodCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBGWF9MUEJZVEUgc3JjX3NjYW4gPSBzcmNfYnVmICsgcm93ICogc3JjX3BpdGNoICsgKHN0YXJ0X2NvbCAtIGxlZnQpICogMzsKKyAgICAgICAgICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyBkZXN0X3JvdyAqIGRlc3RfcGl0Y2ggKyBzdGFydF9jb2wgKiBCcHA7CisgICAgICAgICAgICAgICAgaWYgKGJCR1JTdHJpcGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHhfc3VicGl4ZWwgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gc3RhcnRfY29sOyBjb2wgPCBlbmRfY29sOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhID0gc3JjX3NjYW5bMl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzJdKSwgciwgc3JjX2FscGhhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bMV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsxXSwgZywgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgZywgc3JjX2FscGhhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bMF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblswXSwgYiwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgc3JjX2FscGhhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHhfc3VicGl4ZWwgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWzFdOworICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHIsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bMF07CisgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzFdLCBnLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOworICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgZywgc3JjX2FscGhhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRfY29sID4gbGVmdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWy0xXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzBdLCBiLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMF0pLCBiLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7CisgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gc3RhcnRfY29sICsgMTsgY29sIDwgZW5kX2NvbCAtIDE7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBzcmNfc2NhblsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzJdLCByLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzFdLCBnLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblstMV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblswXSwgYiwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgc3JjX2FscGhhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHIsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0X2NvbCA+IGxlZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblstMV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsxXSwgZywgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgZywgc3JjX2FscGhhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bLTJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMF0sIGIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSBzdGFydF9jb2wgKyAxOyBjb2wgPCBlbmRfY29sIC0gMTsgY29sICsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMl0sIHIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHIsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWy0xXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzFdLCBnLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblstMl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblswXSwgYiwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgc3JjX2FscGhhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHhfc3VicGl4ZWwgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gc3RhcnRfY29sOyBjb2wgPCBlbmRfY29sOyBjb2wgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYk5vcm1hbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3JjX2FscGhhMSA9IChzcmNfc2NhblswXSArIHNyY19zY2FuWzFdICsgc3JjX3NjYW5bMl0pIC8gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhMSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYTEgPSBzcmNfYWxwaGExICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYTEgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHIsIHNyY19hbHBoYTEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBzcmNfYWxwaGExKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgc3JjX2FscGhhMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gQnBwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMl0sIHIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHIsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMV0sIGcsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsxXSksIGcsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMF0sIGIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4X3N1YnBpeGVsID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiTm9ybWFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYTEgPSBzdGFydF9jb2wgPiBsZWZ0ID8gKHNyY19zY2FuWzBdICsgc3JjX3NjYW5bMV0gKyBzcmNfc2NhblstMV0pIC8gMyA6IChzcmNfc2NhblswXSArIHNyY19zY2FuWzFdKSAvIDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhMSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhMSA9IHNyY19hbHBoYTEgKiBhIC8gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzJdKSwgciwgc3JjX2FscGhhMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgZywgc3JjX2FscGhhMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgc3JjX2FscGhhMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0X2NvbCA+IGxlZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWy0xXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMV0sIGcsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsxXSksIGcsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMF0sIGIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IHN0YXJ0X2NvbCArIDE7IGNvbCA8IGVuZF9jb2w7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiTm9ybWFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGExID0gKHNyY19zY2FuWzBdICsgc3JjX3NjYW5bMV0gKyBzcmNfc2NhblstMV0pIC8gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhMSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYTEgPSBzcmNfYWxwaGExICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNyY19hbHBoYTEgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHIsIHNyY19hbHBoYTEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBzcmNfYWxwaGExKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblswXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzBdKSwgYiwgc3JjX2FscGhhMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gQnBwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWy0xXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzJdLCByLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzFdLCBnLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfc2NhblsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBREpVU1RfQUxQSEEoZGVzdF9zY2FuWzBdLCBiLCBzcmNfYWxwaGEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzBdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMF0pLCBiLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gQnBwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYk5vcm1hbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGExID0gc3RhcnRfY29sID4gbGVmdCA/IChzcmNfc2NhblswXSArIHNyY19zY2FuWy0yXSArIHNyY19zY2FuWy0xXSkgLyAzIDogc3JjX3NjYW5bMF0gLyAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMl0sIHIsIHNyY19hbHBoYTEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYTEgPSBzcmNfYWxwaGExICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMl0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsyXSksIHIsIHNyY19hbHBoYTEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsxXSksIGcsIHNyY19hbHBoYTEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIHNyY19hbHBoYTEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gQnBwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zY2FuICs9IDM7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydF9jb2wgPiBsZWZ0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBzcmNfc2NhblstMl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMl0sIHIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19hbHBoYSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzJdKSwgciwgc3JjX2FscGhhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWy0xXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsxXSwgZywgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzFdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMV0pLCBnLCBzcmNfYWxwaGEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNyY19hbHBoYSA9IHNyY19zY2FuWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMF0sIGIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IHN0YXJ0X2NvbCArIDE7IGNvbCA8IGVuZF9jb2w7IGNvbCArKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiTm9ybWFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGExID0gKChpbnQpKHNyY19zY2FuWzBdKSArIChpbnQpKHNyY19zY2FuWy0yXSkgKyAoaW50KShzcmNfc2NhblstMV0pKSAvIDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMl0sIHIsIHNyY19hbHBoYTEsIG5hdGl2ZXRleHRfZmxhZ3MsIGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGExID0gc3JjX2FscGhhMSAqIGEgLyAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcmNfYWxwaGExID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfc2NhbiArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzJdID0gRlhfR0FNTUFfSU5WRVJTRShGWERJQl9BTFBIQV9NRVJHRShGWF9HQU1NQShkZXN0X3NjYW5bMl0pLCByLCBzcmNfYWxwaGExKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsxXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzFdKSwgZywgc3JjX2FscGhhMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIHNyY19hbHBoYTEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuICs9IEJwcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcmNfYWxwaGEgPSBzcmNfc2NhblstMl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQURKVVNUX0FMUEhBKGRlc3Rfc2NhblsyXSwgciwgc3JjX2FscGhhLCBuYXRpdmV0ZXh0X2ZsYWdzLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfYWxwaGEgPSBzcmNfYWxwaGEgKiBhIC8gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhblsyXSA9IEZYX0dBTU1BX0lOVkVSU0UoRlhESUJfQUxQSEFfTUVSR0UoRlhfR0FNTUEoZGVzdF9zY2FuWzJdKSwgciwgc3JjX2FscGhhKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX3NjYW5bLTFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMV0sIGcsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMV0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblsxXSksIGcsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19hbHBoYSA9IHNyY19zY2FuWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFESlVTVF9BTFBIQShkZXN0X3NjYW5bMF0sIGIsIHNyY19hbHBoYSwgbmF0aXZldGV4dF9mbGFncywgYSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX2FscGhhID0gc3JjX2FscGhhICogYSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bMF0gPSBGWF9HQU1NQV9JTlZFUlNFKEZYRElCX0FMUEhBX01FUkdFKEZYX0dBTU1BKGRlc3Rfc2NhblswXSksIGIsIHNyY19hbHBoYSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rfc2NhbiArPSBCcHA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3NjYW4gKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoYml0bWFwLklzQWxwaGFNYXNrKCkpIHsKKyAgICAgICAgU2V0Qml0TWFzaygmYml0bWFwLCBibXBfcmVjdC5sZWZ0LCBibXBfcmVjdC50b3AsIGZpbGxfY29sb3IsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOworICAgIH0gZWxzZSB7CisgICAgICAgIFNldERJQml0cygmYml0bWFwLCBibXBfcmVjdC5sZWZ0LCBibXBfcmVjdC50b3ApOworICAgIH0KKyAgICBGWF9GcmVlKHBHbHlwaEFuZFBvcyk7CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENGWF9SZW5kZXJEZXZpY2U6OkRyYXdUZXh0UGF0aChpbnQgbkNoYXJzLCBjb25zdCBGWFRFWFRfQ0hBUlBPUyogcENoYXJQb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlhfRm9udCogcEZvbnQsIENGWF9Gb250Q2FjaGUqIHBDYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIGZvbnRfc2l6ZSwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcFRleHQyVXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBVc2VyMkRldmljZSwgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGZpbGxfY29sb3IsIEZYX0FSR0Igc3Ryb2tlX2NvbG9yLCBDRlhfUGF0aERhdGEqIHBDbGlwcGluZ1BhdGgsIGludCBuRmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQgYmxlbmRfdHlwZSkKK3sKKyAgICBpZiAocENhY2hlID09IE5VTEwpIHsKKyAgICAgICAgcENhY2hlID0gQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Rm9udENhY2hlKCk7CisgICAgfQorICAgIENGWF9GYWNlQ2FjaGUqIHBGYWNlQ2FjaGUgPSBwQ2FjaGUtPkdldENhY2hlZEZhY2UocEZvbnQpOworICAgIEZYX0ZPTlRDQUNIRV9ERUZJTkUocENhY2hlLCBwRm9udCk7CisgICAgZm9yIChpbnQgaUNoYXIgPSAwOyBpQ2hhciA8IG5DaGFyczsgaUNoYXIgKyspIHsKKyAgICAgICAgY29uc3QgRlhURVhUX0NIQVJQT1MmIGNoYXJwb3MgPSBwQ2hhclBvc1tpQ2hhcl07CisgICAgICAgIENGWF9BZmZpbmVNYXRyaXggbWF0cml4OworICAgICAgICBpZiAoY2hhcnBvcy5tX2JHbHlwaEFkanVzdCkKKyAgICAgICAgICAgIG1hdHJpeC5TZXQoY2hhcnBvcy5tX0FkanVzdE1hdHJpeFswXSwgY2hhcnBvcy5tX0FkanVzdE1hdHJpeFsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhcnBvcy5tX0FkanVzdE1hdHJpeFsyXSwgY2hhcnBvcy5tX0FkanVzdE1hdHJpeFszXSwgMCwgMCk7CisgICAgICAgIG1hdHJpeC5Db25jYXQoZm9udF9zaXplLCAwLCAwLCBmb250X3NpemUsIGNoYXJwb3MubV9PcmlnaW5YLCBjaGFycG9zLm1fT3JpZ2luWSk7CisgICAgICAgIGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGggPSBwRmFjZUNhY2hlLT5Mb2FkR2x5cGhQYXRoKHBGb250LCBjaGFycG9zLm1fR2x5cGhJbmRleCwgY2hhcnBvcy5tX0ZvbnRDaGFyV2lkdGgpOworICAgICAgICBpZiAocFBhdGggPT0gTlVMTCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgbWF0cml4LkNvbmNhdCgqcFRleHQyVXNlcik7CisgICAgICAgIENGWF9QYXRoRGF0YSBUcmFuc2Zvcm1lZFBhdGgoKnBQYXRoKTsKKyAgICAgICAgVHJhbnNmb3JtZWRQYXRoLlRyYW5zZm9ybSgmbWF0cml4KTsKKyAgICAgICAgRlhfQk9PTCBiSGFzQWxwaGEgPSBGWEdFVEZMQUdfQ09MT1JUWVBFKGFscGhhX2ZsYWcpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRlhHRVRGTEFHX0FMUEhBX0ZJTEwoYWxwaGFfZmxhZykgfHwgRlhHRVRGTEFHX0FMUEhBX1NUUk9LRShhbHBoYV9mbGFnKSkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWxsX2NvbG9yIHx8IHN0cm9rZV9jb2xvcik7CisgICAgICAgIGlmIChiSGFzQWxwaGEpIHsKKyAgICAgICAgICAgIGludCBmaWxsX21vZGUgPSBuRmxhZzsKKyAgICAgICAgICAgIGlmIChGWEdFVEZMQUdfQ09MT1JUWVBFKGFscGhhX2ZsYWcpKSB7CisgICAgICAgICAgICAgICAgaWYgKEZYR0VURkxBR19BTFBIQV9GSUxMKGFscGhhX2ZsYWcpKSB7CisgICAgICAgICAgICAgICAgICAgIGZpbGxfbW9kZSB8PSBGWEZJTExfV0lORElORzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChmaWxsX2NvbG9yKSB7CisgICAgICAgICAgICAgICAgICAgIGZpbGxfbW9kZSB8PSBGWEZJTExfV0lORElORzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaWxsX21vZGUgfD0gRlhfRklMTF9URVhUX01PREU7CisgICAgICAgICAgICBpZiAoIURyYXdQYXRoKCZUcmFuc2Zvcm1lZFBhdGgsIHBVc2VyMkRldmljZSwgcEdyYXBoU3RhdGUsIGZpbGxfY29sb3IsIHN0cm9rZV9jb2xvciwgZmlsbF9tb2RlLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtLCBibGVuZF90eXBlKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocENsaXBwaW5nUGF0aCkgeworICAgICAgICAgICAgcENsaXBwaW5nUGF0aC0+QXBwZW5kKCZUcmFuc2Zvcm1lZFBhdGgsIHBVc2VyMkRldmljZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFRSVUU7Cit9CitDRlhfRm9udENhY2hlOjp+Q0ZYX0ZvbnRDYWNoZSgpCit7CisgICAgRnJlZUNhY2hlKFRSVUUpOworfQorQ0ZYX0ZhY2VDYWNoZSogQ0ZYX0ZvbnRDYWNoZTo6R2V0Q2FjaGVkRmFjZShDRlhfRm9udCogcEZvbnQpCit7CisgICAgRlhfQk9PTCBiRXh0ZXJuYWwgPSBwRm9udC0+R2V0RmFjZSgpID09IE5VTEw7CisgICAgdm9pZCogZmFjZSA9IGJFeHRlcm5hbCA/IHBGb250LT5HZXRTdWJzdEZvbnQoKS0+bV9FeHRIYW5kbGUgOiBwRm9udC0+R2V0RmFjZSgpOworICAgIENGWF9GVENhY2hlTWFwJiBtYXAgPSAgYkV4dGVybmFsID8gbV9FeHRGYWNlTWFwIDogbV9GVEZhY2VNYXA7CisgICAgQ0ZYX0NvdW50ZWRGYWNlQ2FjaGUqIGNvdW50ZWRfZmFjZV9jYWNoZSA9IE5VTEw7CisgICAgaWYgKG1hcC5Mb29rdXAoKEZYRlRfRmFjZSlmYWNlLCBjb3VudGVkX2ZhY2VfY2FjaGUpKSB7CisgICAgICAgIGNvdW50ZWRfZmFjZV9jYWNoZS0+bV9uQ291bnQrKzsKKyAgICAgICAgcmV0dXJuIGNvdW50ZWRfZmFjZV9jYWNoZS0+bV9PYmo7CisgICAgfQorICAgIENGWF9GYWNlQ2FjaGUqIGZhY2VfY2FjaGUgPSBOVUxMOworICAgIGZhY2VfY2FjaGUgPSBGWF9ORVcgQ0ZYX0ZhY2VDYWNoZShiRXh0ZXJuYWwgPyBOVUxMIDogKEZYRlRfRmFjZSlmYWNlKTsKKyAgICBpZiAoZmFjZV9jYWNoZSA9PSBOVUxMKQl7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBjb3VudGVkX2ZhY2VfY2FjaGUgPSBGWF9ORVcgQ0ZYX0NvdW50ZWRGYWNlQ2FjaGU7CisgICAgaWYgKCFjb3VudGVkX2ZhY2VfY2FjaGUpIHsKKyAgICAgICAgaWYgKGZhY2VfY2FjaGUpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBmYWNlX2NhY2hlOworICAgICAgICAgICAgZmFjZV9jYWNoZSA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGNvdW50ZWRfZmFjZV9jYWNoZS0+bV9uQ291bnQgPSAyOworICAgIGNvdW50ZWRfZmFjZV9jYWNoZS0+bV9PYmogPSBmYWNlX2NhY2hlOworICAgIG1hcC5TZXRBdCgoRlhGVF9GYWNlKWZhY2UsIGNvdW50ZWRfZmFjZV9jYWNoZSk7CisgICAgcmV0dXJuIGZhY2VfY2FjaGU7Cit9Cit2b2lkIENGWF9Gb250Q2FjaGU6OlJlbGVhc2VDYWNoZWRGYWNlKENGWF9Gb250KiBwRm9udCkKK3sKKyAgICBGWF9CT09MIGJFeHRlcm5hbCA9IHBGb250LT5HZXRGYWNlKCkgPT0gTlVMTDsKKyAgICB2b2lkKiBmYWNlID0gYkV4dGVybmFsID8gcEZvbnQtPkdldFN1YnN0Rm9udCgpLT5tX0V4dEhhbmRsZSA6IHBGb250LT5HZXRGYWNlKCk7CisgICAgQ0ZYX0ZUQ2FjaGVNYXAmIG1hcCA9ICBiRXh0ZXJuYWwgPyBtX0V4dEZhY2VNYXAgOiBtX0ZURmFjZU1hcDsKKyAgICBDRlhfQ291bnRlZEZhY2VDYWNoZSogY291bnRlZF9mYWNlX2NhY2hlID0gTlVMTDsKKyAgICBpZiAoIW1hcC5Mb29rdXAoKEZYRlRfRmFjZSlmYWNlLCBjb3VudGVkX2ZhY2VfY2FjaGUpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGNvdW50ZWRfZmFjZV9jYWNoZS0+bV9uQ291bnQgPiAxKSB7CisgICAgICAgIGNvdW50ZWRfZmFjZV9jYWNoZS0+bV9uQ291bnQtLTsKKyAgICB9Cit9Cit2b2lkIENGWF9Gb250Q2FjaGU6OkZyZWVDYWNoZShGWF9CT09MIGJSZWxlYXNlKQoreworICAgIHsKKyAgICAgICAgRlhfUE9TSVRJT04gcG9zOworICAgICAgICBwb3MgPSBtX0ZURmFjZU1hcC5HZXRTdGFydFBvc2l0aW9uKCk7CisgICAgICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgICAgIEZYRlRfRmFjZSBmYWNlOworICAgICAgICAgICAgQ0ZYX0NvdW50ZWRGYWNlQ2FjaGUqIGNhY2hlOworICAgICAgICAgICAgbV9GVEZhY2VNYXAuR2V0TmV4dEFzc29jKHBvcywgZmFjZSwgY2FjaGUpOworICAgICAgICAgICAgaWYgKGJSZWxlYXNlIHx8IGNhY2hlLT5tX25Db3VudCA8IDIpIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgY2FjaGUtPm1fT2JqOworICAgICAgICAgICAgICAgIGRlbGV0ZSBjYWNoZTsKKyAgICAgICAgICAgICAgICBtX0ZURmFjZU1hcC5SZW1vdmVLZXkoZmFjZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcG9zID0gbV9FeHRGYWNlTWFwLkdldFN0YXJ0UG9zaXRpb24oKTsKKyAgICAgICAgd2hpbGUgKHBvcykgeworICAgICAgICAgICAgRlhGVF9GYWNlIGZhY2U7CisgICAgICAgICAgICBDRlhfQ291bnRlZEZhY2VDYWNoZSogY2FjaGU7CisgICAgICAgICAgICBtX0V4dEZhY2VNYXAuR2V0TmV4dEFzc29jKHBvcywgZmFjZSwgY2FjaGUpOworICAgICAgICAgICAgaWYgKGJSZWxlYXNlIHx8IGNhY2hlLT5tX25Db3VudCA8IDIpIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgY2FjaGUtPm1fT2JqOworICAgICAgICAgICAgICAgIGRlbGV0ZSBjYWNoZTsKKyAgICAgICAgICAgICAgICBtX0V4dEZhY2VNYXAuUmVtb3ZlS2V5KGZhY2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorQ0ZYX0ZhY2VDYWNoZTo6Q0ZYX0ZhY2VDYWNoZShGWEZUX0ZhY2UgZmFjZSkKK3sKKyAgICBtX0ZhY2UgPSBmYWNlOworICAgIG1fcEJpdG1hcCA9IE5VTEw7Cit9CitDRlhfRmFjZUNhY2hlOjp+Q0ZYX0ZhY2VDYWNoZSgpCit7CisgICAgRlhfUE9TSVRJT04gcG9zID0gbV9TaXplTWFwLkdldFN0YXJ0UG9zaXRpb24oKTsKKyAgICBDRlhfQnl0ZVN0cmluZyBLZXk7CisgICAgQ0ZYX1NpemVHbHlwaENhY2hlKiBwU2l6ZUNhY2hlID0gTlVMTDsKKyAgICB3aGlsZShwb3MpIHsKKyAgICAgICAgbV9TaXplTWFwLkdldE5leHRBc3NvYyggcG9zLCBLZXksICh2b2lkKiYpcFNpemVDYWNoZSk7CisgICAgICAgIGRlbGV0ZSBwU2l6ZUNhY2hlOworICAgIH0KKyAgICBtX1NpemVNYXAuUmVtb3ZlQWxsKCk7CisgICAgcG9zID0gbV9QYXRoTWFwLkdldFN0YXJ0UG9zaXRpb24oKTsKKyAgICBGWF9MUFZPSUQga2V5MTsKKyAgICBDRlhfUGF0aERhdGEqIHBQYXRoOworICAgIHdoaWxlIChwb3MpIHsKKyAgICAgICAgbV9QYXRoTWFwLkdldE5leHRBc3NvYyhwb3MsIGtleTEsIChGWF9MUFZPSUQmKXBQYXRoKTsKKyAgICAgICAgZGVsZXRlIHBQYXRoOworICAgIH0KKyAgICBpZiAobV9wQml0bWFwKSB7CisgICAgICAgIGRlbGV0ZSBtX3BCaXRtYXA7CisgICAgfQorICAgIG1fUGF0aE1hcC5SZW1vdmVBbGwoKTsKK30KKyNpZiAoKF9GWE1fUExBVEZPUk1fICAhPSBfRlhNX1BMQVRGT1JNX0FQUExFXyl8fCBkZWZpbmVkKF9GUERGQVBJX01JTklfKSkKK3ZvaWQgQ0ZYX0ZhY2VDYWNoZTo6SW5pdFBsYXRmb3JtKCkKK3sKK30KKyNlbmRpZgorQ0ZYX0dseXBoQml0bWFwKiBDRlhfRmFjZUNhY2hlOjpMb29rVXBHbHlwaEJpdG1hcChDRlhfRm9udCogcEZvbnQsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsCisgICAgICAgIENGWF9CeXRlU3RyaW5nQyYgRmFjZUdseXBoc0tleSwgRlhfRFdPUkQgZ2x5cGhfaW5kZXgsIEZYX0JPT0wgYkZvbnRTdHlsZSwKKyAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBhbnRpX2FsaWFzKQoreworICAgIENGWF9TaXplR2x5cGhDYWNoZSogcFNpemVDYWNoZSA9IE5VTEw7CisgICAgaWYgKCFtX1NpemVNYXAuTG9va3VwKEZhY2VHbHlwaHNLZXksICh2b2lkKiYpcFNpemVDYWNoZSkpIHsKKyAgICAgICAgcFNpemVDYWNoZSA9IEZYX05FVyBDRlhfU2l6ZUdseXBoQ2FjaGU7CisgICAgICAgIGlmIChwU2l6ZUNhY2hlID09IE5VTEwpCXsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG1fU2l6ZU1hcC5TZXRBdChGYWNlR2x5cGhzS2V5LCBwU2l6ZUNhY2hlKTsKKyAgICB9CisgICAgQ0ZYX0dseXBoQml0bWFwKiBwR2x5cGhCaXRtYXAgPSBOVUxMOworICAgIGlmIChwU2l6ZUNhY2hlLT5tX0dseXBoTWFwLkxvb2t1cCgoRlhfTFBWT0lEKShGWF9VSU5UUFRSKWdseXBoX2luZGV4LCAodm9pZComKXBHbHlwaEJpdG1hcCkpIHsKKyAgICAgICAgcmV0dXJuIHBHbHlwaEJpdG1hcDsKKyAgICB9CisgICAgcEdseXBoQml0bWFwID0gUmVuZGVyR2x5cGgocEZvbnQsIGdseXBoX2luZGV4LCBiRm9udFN0eWxlLCBwTWF0cml4LCBkZXN0X3dpZHRoLCBhbnRpX2FsaWFzKTsKKyAgICBpZiAocEdseXBoQml0bWFwID09IE5VTEwpCXsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBTaXplQ2FjaGUtPm1fR2x5cGhNYXAuU2V0QXQoKEZYX0xQVk9JRCkoRlhfVUlOVFBUUilnbHlwaF9pbmRleCwgcEdseXBoQml0bWFwKTsKKyAgICByZXR1cm4gcEdseXBoQml0bWFwOworfQorY29uc3QgQ0ZYX0dseXBoQml0bWFwKiBDRlhfRmFjZUNhY2hlOjpMb2FkR2x5cGhCaXRtYXAoQ0ZYX0ZvbnQqIHBGb250LCBGWF9EV09SRCBnbHlwaF9pbmRleCwgRlhfQk9PTCBiRm9udFN0eWxlLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LAorICAgICAgICBpbnQgZGVzdF93aWR0aCwgaW50IGFudGlfYWxpYXMsIGludCYgdGV4dF9mbGFncykKK3sKKyAgICBpZiAoZ2x5cGhfaW5kZXggPT0gKEZYX0RXT1JEKSAtIDEpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIF9DRlhfVW5pcXVlS2V5R2VuIGtleWdlbjsKKyNpZiAoKF9GWE1fUExBVEZPUk1fICAhPSBfRlhNX1BMQVRGT1JNX0FQUExFXyl8fCBkZWZpbmVkKF9GUERGQVBJX01JTklfKSkKKyAgICBpZiAocEZvbnQtPkdldFN1YnN0Rm9udCgpKQorICAgICAgICBrZXlnZW4uR2VuZXJhdGUoOSwgKGludCkocE1hdHJpeC0+YSAqIDEwMDAwKSwgKGludCkocE1hdHJpeC0+YiAqIDEwMDAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKHBNYXRyaXgtPmMgKiAxMDAwMCksIChpbnQpKHBNYXRyaXgtPmQgKiAxMDAwMCksIGRlc3Rfd2lkdGgsIGFudGlfYWxpYXMsCisgICAgICAgICAgICAgICAgICAgICAgICBwRm9udC0+R2V0U3Vic3RGb250KCktPm1fV2VpZ2h0LCBwRm9udC0+R2V0U3Vic3RGb250KCktPm1fSXRhbGljQW5nbGUsIHBGb250LT5Jc1ZlcnRpY2FsKCkpOworICAgIGVsc2UKKyAgICAgICAga2V5Z2VuLkdlbmVyYXRlKDYsIChpbnQpKHBNYXRyaXgtPmEgKiAxMDAwMCksIChpbnQpKHBNYXRyaXgtPmIgKiAxMDAwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShwTWF0cml4LT5jICogMTAwMDApLCAoaW50KShwTWF0cml4LT5kICogMTAwMDApLCBkZXN0X3dpZHRoLCBhbnRpX2FsaWFzKTsKKyNlbHNlCisgICAgaWYgKHRleHRfZmxhZ3MgJiBGWFRFWFRfTk9fTkFUSVZFVEVYVCkgeworICAgICAgICBpZiAocEZvbnQtPkdldFN1YnN0Rm9udCgpKQorICAgICAgICAgICAga2V5Z2VuLkdlbmVyYXRlKDksIChpbnQpKHBNYXRyaXgtPmEgKiAxMDAwMCksIChpbnQpKHBNYXRyaXgtPmIgKiAxMDAwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkocE1hdHJpeC0+YyAqIDEwMDAwKSwgKGludCkocE1hdHJpeC0+ZCAqIDEwMDAwKSwgZGVzdF93aWR0aCwgYW50aV9hbGlhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRm9udC0+R2V0U3Vic3RGb250KCktPm1fV2VpZ2h0LCBwRm9udC0+R2V0U3Vic3RGb250KCktPm1fSXRhbGljQW5nbGUsIHBGb250LT5Jc1ZlcnRpY2FsKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBrZXlnZW4uR2VuZXJhdGUoNiwgKGludCkocE1hdHJpeC0+YSAqIDEwMDAwKSwgKGludCkocE1hdHJpeC0+YiAqIDEwMDAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShwTWF0cml4LT5jICogMTAwMDApLCAoaW50KShwTWF0cml4LT5kICogMTAwMDApLCBkZXN0X3dpZHRoLCBhbnRpX2FsaWFzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocEZvbnQtPkdldFN1YnN0Rm9udCgpKQorICAgICAgICAgICAga2V5Z2VuLkdlbmVyYXRlKDEwLCAoaW50KShwTWF0cml4LT5hICogMTAwMDApLCAoaW50KShwTWF0cml4LT5iICogMTAwMDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKHBNYXRyaXgtPmMgKiAxMDAwMCksIChpbnQpKHBNYXRyaXgtPmQgKiAxMDAwMCksIGRlc3Rfd2lkdGgsIGFudGlfYWxpYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEZvbnQtPkdldFN1YnN0Rm9udCgpLT5tX1dlaWdodCwgcEZvbnQtPkdldFN1YnN0Rm9udCgpLT5tX0l0YWxpY0FuZ2xlLCBwRm9udC0+SXNWZXJ0aWNhbCgpLCAzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAga2V5Z2VuLkdlbmVyYXRlKDcsIChpbnQpKHBNYXRyaXgtPmEgKiAxMDAwMCksIChpbnQpKHBNYXRyaXgtPmIgKiAxMDAwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkocE1hdHJpeC0+YyAqIDEwMDAwKSwgKGludCkocE1hdHJpeC0+ZCAqIDEwMDAwKSwgZGVzdF93aWR0aCwgYW50aV9hbGlhcywgMyk7CisgICAgfQorI2VuZGlmCisgICAgQ0ZYX0J5dGVTdHJpbmdDIEZhY2VHbHlwaHNLZXkoa2V5Z2VuLm1fS2V5LCBrZXlnZW4ubV9LZXlMZW4pOworI2lmICgoX0ZYTV9QTEFURk9STV8gICE9IF9GWE1fUExBVEZPUk1fQVBQTEVfKXx8IGRlZmluZWQoX0ZQREZBUElfTUlOSV8pKQorICAgIHJldHVybiBMb29rVXBHbHlwaEJpdG1hcChwRm9udCwgcE1hdHJpeCwgRmFjZUdseXBoc0tleSwgZ2x5cGhfaW5kZXgsIGJGb250U3R5bGUsIGRlc3Rfd2lkdGgsIGFudGlfYWxpYXMpOworI2Vsc2UKKyAgICBpZiAodGV4dF9mbGFncyAmIEZYVEVYVF9OT19OQVRJVkVURVhUKSB7CisgICAgICAgIHJldHVybiBMb29rVXBHbHlwaEJpdG1hcChwRm9udCwgcE1hdHJpeCwgRmFjZUdseXBoc0tleSwgZ2x5cGhfaW5kZXgsIGJGb250U3R5bGUsIGRlc3Rfd2lkdGgsIGFudGlfYWxpYXMpOworICAgIH0gZWxzZSB7CisgICAgICAgIENGWF9HbHlwaEJpdG1hcCogcEdseXBoQml0bWFwOworICAgICAgICBDRlhfU2l6ZUdseXBoQ2FjaGUqIHBTaXplQ2FjaGUgPSBOVUxMOworICAgICAgICBpZiAobV9TaXplTWFwLkxvb2t1cChGYWNlR2x5cGhzS2V5LCAodm9pZComKXBTaXplQ2FjaGUpKSB7CisgICAgICAgICAgICBpZiAocFNpemVDYWNoZS0+bV9HbHlwaE1hcC5Mb29rdXAoKEZYX0xQVk9JRCkoRlhfVUlOVFBUUilnbHlwaF9pbmRleCwgKHZvaWQqJilwR2x5cGhCaXRtYXApKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBHbHlwaEJpdG1hcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBHbHlwaEJpdG1hcCA9IFJlbmRlckdseXBoX05hdGl2ZXRleHQocEZvbnQsIGdseXBoX2luZGV4LCBwTWF0cml4LCBkZXN0X3dpZHRoLCBhbnRpX2FsaWFzKTsKKyAgICAgICAgICAgIGlmIChwR2x5cGhCaXRtYXApIHsKKyAgICAgICAgICAgICAgICBwU2l6ZUNhY2hlLT5tX0dseXBoTWFwLlNldEF0KChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpZ2x5cGhfaW5kZXgsIHBHbHlwaEJpdG1hcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBHbHlwaEJpdG1hcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBHbHlwaEJpdG1hcCA9IFJlbmRlckdseXBoX05hdGl2ZXRleHQocEZvbnQsIGdseXBoX2luZGV4LCBwTWF0cml4LCBkZXN0X3dpZHRoLCBhbnRpX2FsaWFzKTsKKyAgICAgICAgICAgIGlmIChwR2x5cGhCaXRtYXApIHsKKyAgICAgICAgICAgICAgICBwU2l6ZUNhY2hlID0gRlhfTkVXIENGWF9TaXplR2x5cGhDYWNoZTsKKyAgICAgICAgICAgICAgICBpZiAocFNpemVDYWNoZSA9PSBOVUxMKQl7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX1NpemVNYXAuU2V0QXQoRmFjZUdseXBoc0tleSwgcFNpemVDYWNoZSk7CisgICAgICAgICAgICAgICAgcFNpemVDYWNoZS0+bV9HbHlwaE1hcC5TZXRBdCgoRlhfTFBWT0lEKShGWF9VSU5UUFRSKWdseXBoX2luZGV4LCBwR2x5cGhCaXRtYXApOworICAgICAgICAgICAgICAgIHJldHVybiBwR2x5cGhCaXRtYXA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBGb250LT5HZXRTdWJzdEZvbnQoKSkKKyAgICAgICAgICAgIGtleWdlbi5HZW5lcmF0ZSg5LCAoaW50KShwTWF0cml4LT5hICogMTAwMDApLCAoaW50KShwTWF0cml4LT5iICogMTAwMDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKHBNYXRyaXgtPmMgKiAxMDAwMCksIChpbnQpKHBNYXRyaXgtPmQgKiAxMDAwMCksIGRlc3Rfd2lkdGgsIGFudGlfYWxpYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEZvbnQtPkdldFN1YnN0Rm9udCgpLT5tX1dlaWdodCwgcEZvbnQtPkdldFN1YnN0Rm9udCgpLT5tX0l0YWxpY0FuZ2xlLCBwRm9udC0+SXNWZXJ0aWNhbCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAga2V5Z2VuLkdlbmVyYXRlKDYsIChpbnQpKHBNYXRyaXgtPmEgKiAxMDAwMCksIChpbnQpKHBNYXRyaXgtPmIgKiAxMDAwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkocE1hdHJpeC0+YyAqIDEwMDAwKSwgKGludCkocE1hdHJpeC0+ZCAqIDEwMDAwKSwgZGVzdF93aWR0aCwgYW50aV9hbGlhcyk7CisgICAgICAgIENGWF9CeXRlU3RyaW5nQyBGYWNlR2x5cGhzS2V5KGtleWdlbi5tX0tleSwga2V5Z2VuLm1fS2V5TGVuKTsKKyAgICAgICAgdGV4dF9mbGFncyB8PSBGWFRFWFRfTk9fTkFUSVZFVEVYVDsKKyAgICAgICAgcmV0dXJuIExvb2tVcEdseXBoQml0bWFwKHBGb250LCBwTWF0cml4LCBGYWNlR2x5cGhzS2V5LCBnbHlwaF9pbmRleCwgYkZvbnRTdHlsZSwgZGVzdF93aWR0aCwgYW50aV9hbGlhcyk7CisgICAgfQorI2VuZGlmCit9CitDRlhfU2l6ZUdseXBoQ2FjaGU6On5DRlhfU2l6ZUdseXBoQ2FjaGUoKQoreworICAgIEZYX1BPU0lUSU9OIHBvcyA9IG1fR2x5cGhNYXAuR2V0U3RhcnRQb3NpdGlvbigpOworICAgIEZYX0xQVk9JRCBLZXk7CisgICAgQ0ZYX0dseXBoQml0bWFwKiBwR2x5cGhCaXRtYXAgPSBOVUxMOworICAgIHdoaWxlKHBvcykgeworICAgICAgICBtX0dseXBoTWFwLkdldE5leHRBc3NvYyhwb3MsIEtleSwgKHZvaWQqJilwR2x5cGhCaXRtYXApOworICAgICAgICBkZWxldGUgcEdseXBoQml0bWFwOworICAgIH0KKyAgICBtX0dseXBoTWFwLlJlbW92ZUFsbCgpOworfQorI2lmIGRlZmluZWQoX0ZQREZBUElfTUlOSV8pCisjZGVmaW5lIENPTlRSQVNUX1JBTVBfU1RFUAkxNgorI2Vsc2UKKyNkZWZpbmUgQ09OVFJBU1RfUkFNUF9TVEVQCTEKKyNlbmRpZgorc3RhdGljIGNvbnN0IEZYX0JZVEUgZ19hZGp1c3RfY29udHJhc3QxMVsyNTZdID0geworICAgIDAsIDAsIDIsIDMsIDQsIDUsIDYsIDgsIDksIDEwLCAxMSwgMTMsIDE0LCAxNSwgMTcsIDE4LCAxOSwgMjEsIDIyLCAyNCwgMjUsIDI2LCAyOCwgMjksIDMxLAorICAgIDMyLCAzMywgMzUsIDM2LCAzOCwgMzksIDQwLCA0MiwgNDMsIDQ1LCA0NiwgNDgsIDQ5LCA1MSwgNTIsIDU0LCA1NSwgNTYsIDU4LCA1OSwgNjEsIDYyLCA2NCwgNjUsCisgICAgNjcsIDY4LCA3MCwgNzEsIDcyLCA3NCwgNzUsIDc3LCA3OCwgODAsIDgxLCA4MywgODQsIDg2LCA4NywgODksIDkwLCA5MSwgOTMsIDk0LCA5NiwgOTcsIDk5LCAxMDAsCisgICAgMTAxLCAxMDMsIDEwNCwgMTA2LCAxMDcsIDEwOSwgMTEwLCAxMTEsIDExMywgMTE0LCAxMTYsIDExNywgMTE4LCAxMjAsIDEyMSwgMTIzLCAxMjQsIDEyNSwgMTI3LAorICAgIDEyOCwgMTMwLCAxMzEsIDEzMiwgMTM0LCAxMzUsIDEzNiwgMTM4LCAxMzksIDE0MCwgMTQyLCAxNDMsIDE0NCwgMTQ2LCAxNDcsIDE0OCwgMTQ5LCAxNTEsIDE1MiwKKyAgICAxNTMsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTYwLCAxNjEsIDE2MiwgMTYzLCAxNjUsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcxLCAxNzIsIDE3MywgMTc0LCAxNzUsCisgICAgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgzLCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsIDE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LAorICAgIDE5NywgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNiwgMjA3LCAyMDgsIDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwKKyAgICAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEsIDIyMSwgMjIyLCAyMjMsIDIyNCwgMjI0LCAyMjUsIDIyNiwgMjI3LCAyMjcsIDIyOCwgMjI5LCAyMzAsCisgICAgMjMwLCAyMzEsIDIzMiwgMjMyLCAyMzMsIDIzNCwgMjM0LCAyMzUsIDIzNiwgMjM2LCAyMzcsIDIzNywgMjM4LCAyMzksIDIzOSwgMjQwLCAyNDAsIDI0MSwgMjQxLAorICAgIDI0MiwgMjQyLCAyNDMsIDI0MywgMjQ0LCAyNDQsIDI0NSwgMjQ1LCAyNDYsIDI0NiwgMjQ2LCAyNDcsIDI0NywgMjQ4LCAyNDgsIDI0OCwgMjQ5LCAyNDksIDI0OSwKKyAgICAyNTAsIDI1MCwgMjUwLCAyNTEsIDI1MSwgMjUxLCAyNTEsIDI1MiwgMjUyLCAyNTIsIDI1MiwgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjU0LCAyNTQsCisgICAgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NSwKK307CitzdGF0aWMgY29uc3QgRlhfQllURSBnX2FkanVzdF9jb250cmFzdDE1WzI1Nl0gPSB7CisgICAgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMiwgMiwgMywgMywgNCwgNSwgNSwgNiwgNywgNywgOCwgOSwgMTAsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsCisgICAgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzNCwgMzUsIDM2LCAzNywgMzgsIDQwLCA0MSwgNDIsIDQzLCA0NSwgNDYsIDQ3LCA0OCwgNTAsIDUxLAorICAgIDUyLCA1NCwgNTUsIDU2LCA1OCwgNTksIDYwLCA2MiwgNjMsIDY0LCA2NiwgNjcsIDY4LCA3MCwgNzEsIDczLCA3NCwgNzUsIDc3LCA3OCwgODAsIDgxLCA4MiwgODQsIDg1LCA4NywKKyAgICA4OCwgOTAsIDkxLCA5MywgOTQsIDk1LCA5NywgOTgsIDEwMCwgMTAxLCAxMDMsIDEwNCwgMTA2LCAxMDcsIDEwOSwgMTEwLCAxMTEsIDExMywgMTE0LCAxMTYsIDExNywgMTE5LAorICAgIDEyMCwgMTIyLCAxMjMsIDEyNSwgMTI2LCAxMjgsIDEyOSwgMTMwLCAxMzIsIDEzMywgMTM1LCAxMzYsIDEzOCwgMTM5LCAxNDEsIDE0MiwgMTQzLCAxNDUsIDE0NiwgMTQ4LAorICAgIDE0OSwgMTUwLCAxNTIsIDE1MywgMTU1LCAxNTYsIDE1NywgMTU5LCAxNjAsIDE2MSwgMTYzLCAxNjQsIDE2NiwgMTY3LCAxNjgsIDE3MCwgMTcxLCAxNzIsIDE3NCwgMTc1LAorICAgIDE3NiwgMTc3LCAxNzksIDE4MCwgMTgxLCAxODMsIDE4NCwgMTg1LCAxODYsIDE4OCwgMTg5LCAxOTAsIDE5MSwgMTkyLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5LAorICAgIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywgMjA4LCAyMDksIDIxMCwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIwLAorICAgIDIyMSwgMjIyLCAyMjMsIDIyNCwgMjI1LCAyMjYsIDIyNywgMjI3LCAyMjgsIDIyOSwgMjMwLCAyMzEsIDIzMiwgMjMyLCAyMzMsIDIzNCwgMjM1LCAyMzUsIDIzNiwgMjM3LAorICAgIDIzNywgMjM4LCAyMzksIDIzOSwgMjQwLCAyNDEsIDI0MSwgMjQyLCAyNDIsIDI0MywgMjQ0LCAyNDQsIDI0NSwgMjQ1LCAyNDYsIDI0NiwgMjQ3LCAyNDcsIDI0OCwgMjQ4LAorICAgIDI0OCwgMjQ5LCAyNDksIDI1MCwgMjUwLCAyNTAsIDI1MSwgMjUxLCAyNTEsIDI1MiwgMjUyLCAyNTIsIDI1MiwgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1NCwgMjU0LAorICAgIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NCwgMjU0LCAyNTQsIDI1NSwKK307CitzdGF0aWMgdm9pZCBfQ2FsY0NvbnRyYXN0UmFtcChGWF9MUEJZVEUgcmFtcCwgaW50IGxldmVsKQoreworICAgIGludCBjb250cmFzdF9taW4gPSAwLCBjb250cmFzdF9tYXggPSAyNTUgLSBsZXZlbCwgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgY29udHJhc3RfbWluOyBpICsrKSB7CisgICAgICAgIHJhbXBbaV0gPSAwOworICAgIH0KKyAgICBmb3IgKGkgPSBjb250cmFzdF9taW47IGkgPCBjb250cmFzdF9tYXg7IGkgKyspIHsKKyAgICAgICAgcmFtcFtpXSA9IDI1NSAqIChpIC0gY29udHJhc3RfbWluKSAvIChjb250cmFzdF9tYXggLSBjb250cmFzdF9taW4pOworICAgIH0KKyAgICBmb3IgKGkgPSBjb250cmFzdF9tYXg7IGkgPCAyNTY7IGkgKyspIHsKKyAgICAgICAgcmFtcFtpXSA9IDI1NTsKKyAgICB9Cit9Cit2b2lkIENGWF9Gb250OjpBZGp1c3RNTVBhcmFtcyhpbnQgZ2x5cGhfaW5kZXgsIGludCBkZXN0X3dpZHRoLCBpbnQgd2VpZ2h0KQoreworICAgIEZYRlRfTU1fVmFyIHBNYXN0ZXJzID0gTlVMTDsKKyAgICBGWEZUX0dldF9NTV9WYXIobV9GYWNlLCAmcE1hc3RlcnMpOworICAgIGlmIChwTWFzdGVycyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbG9uZyBjb29yZHNbMl07CisgICAgaWYgKHdlaWdodCA9PSAwKSB7CisgICAgICAgIGNvb3Jkc1swXSA9IEZYRlRfR2V0X01NX0F4aXNfRGVmKEZYRlRfR2V0X01NX0F4aXMocE1hc3RlcnMsIDApKSAvIDY1NTM2OworICAgIH0gZWxzZSB7CisgICAgICAgIGNvb3Jkc1swXSA9IHdlaWdodDsKKyAgICB9CisgICAgaWYgKGRlc3Rfd2lkdGggPT0gMCkgeworICAgICAgICBjb29yZHNbMV0gPSBGWEZUX0dldF9NTV9BeGlzX0RlZihGWEZUX0dldF9NTV9BeGlzKHBNYXN0ZXJzLCAxKSkgLyA2NTUzNjsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgbWluX3BhcmFtID0gRlhGVF9HZXRfTU1fQXhpc19NaW4oRlhGVF9HZXRfTU1fQXhpcyhwTWFzdGVycywgMSkpIC8gNjU1MzY7CisgICAgICAgIGludCBtYXhfcGFyYW0gPSBGWEZUX0dldF9NTV9BeGlzX01heChGWEZUX0dldF9NTV9BeGlzKHBNYXN0ZXJzLCAxKSkgLyA2NTUzNjsKKyAgICAgICAgY29vcmRzWzFdID0gbWluX3BhcmFtOworICAgICAgICBpbnQgZXJyb3IgPSBGWEZUX1NldF9NTV9EZXNpZ25fQ29vcmRpbmF0ZXMobV9GYWNlLCAyLCBjb29yZHMpOworICAgICAgICBlcnJvciA9IEZYRlRfTG9hZF9HbHlwaChtX0ZhY2UsIGdseXBoX2luZGV4LCBGWEZUX0xPQURfTk9fU0NBTEUgfCBGWEZUX0xPQURfSUdOT1JFX0dMT0JBTF9BRFZBTkNFX1dJRFRIKTsKKyAgICAgICAgaW50IG1pbl93aWR0aCA9IEZYRlRfR2V0X0dseXBoX0hvcmlBZHZhbmNlKG1fRmFjZSkgKiAxMDAwIC8gRlhGVF9HZXRfRmFjZV9Vbml0c1BlckVNKG1fRmFjZSk7CisgICAgICAgIGNvb3Jkc1sxXSA9IG1heF9wYXJhbTsKKyAgICAgICAgZXJyb3IgPSBGWEZUX1NldF9NTV9EZXNpZ25fQ29vcmRpbmF0ZXMobV9GYWNlLCAyLCBjb29yZHMpOworICAgICAgICBlcnJvciA9IEZYRlRfTG9hZF9HbHlwaChtX0ZhY2UsIGdseXBoX2luZGV4LCBGWEZUX0xPQURfTk9fU0NBTEUgfCBGWEZUX0xPQURfSUdOT1JFX0dMT0JBTF9BRFZBTkNFX1dJRFRIKTsKKyAgICAgICAgaW50IG1heF93aWR0aCA9IEZYRlRfR2V0X0dseXBoX0hvcmlBZHZhbmNlKG1fRmFjZSkgKiAxMDAwIC8gRlhGVF9HZXRfRmFjZV9Vbml0c1BlckVNKG1fRmFjZSk7CisgICAgICAgIGlmIChtYXhfd2lkdGggPT0gbWluX3dpZHRoKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaW50IHBhcmFtID0gbWluX3BhcmFtICsgKG1heF9wYXJhbSAtIG1pbl9wYXJhbSkgKiAoZGVzdF93aWR0aCAtIG1pbl93aWR0aCkgLyAobWF4X3dpZHRoIC0gbWluX3dpZHRoKTsKKyAgICAgICAgY29vcmRzWzFdID0gcGFyYW07CisgICAgfQorICAgIEZYRlRfRnJlZShtX0ZhY2UsIHBNYXN0ZXJzKTsKKyAgICBGWEZUX1NldF9NTV9EZXNpZ25fQ29vcmRpbmF0ZXMobV9GYWNlLCAyLCBjb29yZHMpOworfQorZXh0ZXJuIGNvbnN0IGNoYXIgZ19BbmdsZVNrZXdbMzBdID0geworICAgIDAsIDIsIDMsIDUsIDcsIDksIDExLCAxMiwgMTQsIDE2LAorICAgIDE4LCAxOSwgMjEsIDIzLCAyNSwgMjcsIDI5LCAzMSwgMzIsIDM0LAorICAgIDM2LCAzOCwgNDAsIDQyLCA0NSwgNDcsIDQ5LCA1MSwgNTMsIDU1LAorfTsKK3N0YXRpYyBjb25zdCBGWF9CWVRFIGdfV2VpZ2h0UG93WzEwMF0gPSB7CisgICAgMCwgMywgNiwgNywgOCwgOSwgMTEsIDEyLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwKKyAgICAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNSwgMzYsIDM2LAorICAgIDM3LCAzNywgMzcsIDM4LCAzOCwgMzgsIDM5LCAzOSwgMzksIDQwLCA0MCwgNDAsIDQxLCA0MSwgNDEsIDQyLCA0MiwgNDIsCisgICAgNDIsIDQzLCA0MywgNDMsIDQ0LCA0NCwgNDQsIDQ0LCA0NSwgNDUsIDQ1LCA0NSwgNDYsIDQ2LCA0NiwgNDYsIDQ3LCA0NywKKyAgICA0NywgNDcsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDksIDQ5LCA0OSwgNDksIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTEsIDUxLAorICAgIDUxLCA1MSwgNTEsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTMsIDUzLCA1MywgNTMsIDUzLAorfTsKK2V4dGVybiBjb25zdCBGWF9CWVRFIGdfV2VpZ2h0UG93XzExWzEwMF0gPSB7CisgICAgMCwgNCwgNywgOCwgOSwgMTAsIDEyLCAxMywgMTUsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsCisgICAgMjMsIDI0LCAyNSwgMjYsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOSwgMzksIDQwLCA0MCwKKyAgICA0MSwgNDEsIDQxLCA0MiwgNDIsIDQyLCA0MywgNDMsIDQzLCA0NCwgNDQsIDQ0LCA0NSwgNDUsIDQ1LCA0NiwgNDYsIDQ2LAorICAgIDQ2LCA0MywgNDcsIDQ3LCA0OCwgNDgsIDQ4LCA0OCwgNDUsIDUwLCA1MCwgNTAsIDQ2LCA1MSwgNTEsIDUxLCA1MiwgNTIsCisgICAgNTIsIDUyLCA1MywgNTMsIDUzLCA1MywgNTMsIDU0LCA1NCwgNTQsIDU0LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU2LCA1NiwKKyAgICA1NiwgNTYsIDU2LCA1NywgNTcsIDU3LCA1NywgNTcsIDU4LCA1OCwgNTgsIDU4LCA1OCwKK307CitleHRlcm4gY29uc3QgRlhfQllURSBnX1dlaWdodFBvd19TSElGVEpJU1sxMDBdID0geworICAgIDAsIDAsIDEsIDIsIDMsIDQsIDUsIDcsIDgsIDEwLCAxMSwgMTMsIDE0LCAxNiwgMTcsIDE5LCAyMSwgMjIsIDI0LCAyNiwgMjgsCisgICAgMzAsIDMyLCAzMywgMzUsIDM3LCAzOSwgNDEsIDQzLCA0NSwgNDgsIDQ4LCA0OCwgNDgsIDQ5LCA0OSwgNDksIDUwLCA1MCwgNTAsIDUwLAorICAgIDUxLCA1MSwgNTEsIDUxLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDUzLCA1MywgNTMsIDUzLCA1MywgNTQsIDU0LCA1NCwgNTQsIDU0LCA1NSwgNTUsCisgICAgNTUsIDU1LCA1NSwgNTYsIDU2LCA1NiwgNTYsIDU2ICwgNTYsIDU3LCA1NywgNTcgLCA1NyAsIDU3LCA1NywgNTcsIDU4LCA1OCwgNTgsIDU4LCA1OCwKKyAgICA1OCwgNTgsIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA2MCwgNjAsIDYwLCA2MCwgNjAsIDYwLCA2MCwgNjAsCit9Oworc3RhdGljIHZvaWQgX0dhbW1hQWRqdXN0KEZYX0xQQllURSBwRGF0YSwgaW50IG5XaWQsIGludCBuSGVpLCBpbnQgc3JjX3BpdGNoLCBGWF9MUENCWVRFIGdhbW1hVGFibGUpCit7CisgICAgaW50IGNvdW50ID0gbkhlaSAqIHNyY19waXRjaDsKKyAgICBmb3IoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBwRGF0YVtpXSA9IGdhbW1hVGFibGVbcERhdGFbaV1dOworICAgIH0KK30KK3N0YXRpYyB2b2lkIF9Db250cmFzdEFkanVzdChGWF9MUEJZVEUgcERhdGFJbiwgRlhfTFBCWVRFIHBEYXRhT3V0LCBpbnQgbldpZCwgaW50IG5IZWksIGludCBuU3JjUm93Qnl0ZXMsIGludCBuRHN0Um93Qnl0ZXMpCit7CisgICAgaW50IGNvbCwgcm93LCB0ZW1wOworICAgIGludCBtYXggPSAwLCBtaW4gPSAyNTU7CisgICAgRlhfRkxPQVQgcmF0ZTsKKyAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IG5IZWk7IHJvdyArKykgeworICAgICAgICBGWF9MUEJZVEUgcFJvdyA9IHBEYXRhSW4gKyByb3cgKiBuU3JjUm93Qnl0ZXM7CisgICAgICAgIGZvciAoY29sID0gMDsgY29sIDwgbldpZDsgY29sKyspIHsKKyAgICAgICAgICAgIHRlbXAgPSAqcFJvdyArKzsKKyAgICAgICAgICAgIGlmICh0ZW1wID4gbWF4KSB7CisgICAgICAgICAgICAgICAgbWF4ID0gdGVtcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0ZW1wIDwgbWluKSB7CisgICAgICAgICAgICAgICAgbWluID0gdGVtcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICB0ZW1wID0gbWF4IC0gbWluOworICAgIGlmICgwID09IHRlbXAgfHwgMjU1ID09IHRlbXApIHsKKyAgICAgICAgaW50IHJvd2J5dGVzID0gRlhTWVNfYWJzKG5TcmNSb3dCeXRlcykgPiBuRHN0Um93Qnl0ZXMgPyBuRHN0Um93Qnl0ZXMgOiBGWFNZU19hYnMoblNyY1Jvd0J5dGVzKTsKKyAgICAgICAgZm9yIChyb3cgPSAwOyByb3cgPCBuSGVpOyByb3cgKyspIHsKKyAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKHBEYXRhT3V0ICsgcm93ICogbkRzdFJvd0J5dGVzLCBwRGF0YUluICsgcm93ICogblNyY1Jvd0J5dGVzLCByb3dieXRlcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICByYXRlID0gMjU1LmYgLyB0ZW1wOworICAgIGZvciAocm93ID0gMDsgcm93IDwgbkhlaTsgcm93ICsrKSB7CisgICAgICAgIEZYX0xQQllURSBwU3JjUm93ID0gcERhdGFJbiArIHJvdyAqIG5TcmNSb3dCeXRlczsKKyAgICAgICAgRlhfTFBCWVRFIHBEc3RSb3cgPSBwRGF0YU91dCArIHJvdyAqIG5Ec3RSb3dCeXRlczsKKyAgICAgICAgZm9yIChjb2wgPSAwOyBjb2wgPCBuV2lkOyBjb2wgKyspIHsKKyAgICAgICAgICAgIHRlbXAgPSAoaW50KSgoKihwU3JjUm93KyspIC0gbWluKSAqIHJhdGUgKyAwLjUpOworICAgICAgICAgICAgaWYgKHRlbXAgPiAyNTUpCXsKKyAgICAgICAgICAgICAgICB0ZW1wID0gMjU1OworICAgICAgICAgICAgfSBlbHNlIGlmICh0ZW1wIDwgMCkgeworICAgICAgICAgICAgICAgIHRlbXAgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKnBEc3RSb3cgKysgPSAoRlhfQllURSl0ZW1wOworICAgICAgICB9CisgICAgfQorfQorQ0ZYX0dseXBoQml0bWFwKiBDRlhfRmFjZUNhY2hlOjpSZW5kZXJHbHlwaChDRlhfRm9udCogcEZvbnQsIEZYX0RXT1JEIGdseXBoX2luZGV4LCBGWF9CT09MIGJGb250U3R5bGUsCisgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIGludCBkZXN0X3dpZHRoLCBpbnQgYW50aV9hbGlhcykKK3sKKyAgICBpZiAobV9GYWNlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIEZYRlRfTWF0cml4ICBmdF9tYXRyaXg7CisgICAgZnRfbWF0cml4Lnh4ID0gKHNpZ25lZCBsb25nKShwTWF0cml4LT5HZXRBKCkgLyA2NCAqIDY1NTM2KTsKKyAgICBmdF9tYXRyaXgueHkgPSAoc2lnbmVkIGxvbmcpKHBNYXRyaXgtPkdldEMoKSAvIDY0ICogNjU1MzYpOworICAgIGZ0X21hdHJpeC55eCA9IChzaWduZWQgbG9uZykocE1hdHJpeC0+R2V0QigpIC8gNjQgKiA2NTUzNik7CisgICAgZnRfbWF0cml4Lnl5ID0gKHNpZ25lZCBsb25nKShwTWF0cml4LT5HZXREKCkgLyA2NCAqIDY1NTM2KTsKKyAgICBGWF9CT09MIGJVc2VDSktTdWJGb250ID0gRkFMU0U7CisgICAgY29uc3QgQ0ZYX1N1YnN0Rm9udCogcFN1YnN0Rm9udCA9IHBGb250LT5HZXRTdWJzdEZvbnQoKTsKKyAgICBpZiAocFN1YnN0Rm9udCkgeworICAgICAgICBiVXNlQ0pLU3ViRm9udCA9IHBTdWJzdEZvbnQtPm1fYlN1YnN0T2ZDSksgJiYgYkZvbnRTdHlsZTsKKyAgICAgICAgaW50IHNrZXcgPSAwOworICAgICAgICBpZiAoYlVzZUNKS1N1YkZvbnQpIHsKKyAgICAgICAgICAgIHNrZXcgPSBwU3Vic3RGb250LT5tX2JJdGxpY0NKSyA/IC0xNSA6IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBza2V3ID0gcFN1YnN0Rm9udC0+bV9JdGFsaWNBbmdsZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2tldykgeworICAgICAgICAgICAgc2tldyA9IHNrZXcgPD0gLTMwID8gLTU4IDogLWdfQW5nbGVTa2V3Wy1za2V3XTsKKyAgICAgICAgICAgIGlmIChwRm9udC0+SXNWZXJ0aWNhbCgpKSB7CisgICAgICAgICAgICAgICAgZnRfbWF0cml4Lnl4ICs9IGZ0X21hdHJpeC55eSAqIHNrZXcgLyAxMDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZ0X21hdHJpeC54eSArPSAtZnRfbWF0cml4Lnh4ICogc2tldyAvIDEwMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocFN1YnN0Rm9udC0+bV9TdWJzdEZsYWdzICYgRlhGT05UX1NVQlNUX01NKSB7CisgICAgICAgICAgICBwRm9udC0+QWRqdXN0TU1QYXJhbXMoZ2x5cGhfaW5kZXgsIGRlc3Rfd2lkdGgsIHBGb250LT5HZXRTdWJzdEZvbnQoKS0+bV9XZWlnaHQpOworICAgICAgICB9CisgICAgfQorICAgIGludCB0cmFuc2ZsYWcgPSBGWEZUX0dldF9GYWNlX0ludGVybmFsX0ZsYWcobV9GYWNlKTsKKyAgICBGWEZUX1NldF9UcmFuc2Zvcm0obV9GYWNlLCAmZnRfbWF0cml4LCAwKTsKKyAgICBpbnQgbG9hZF9mbGFncyA9IChtX0ZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfU0ZOVCkgPyBGWEZUX0xPQURfTk9fQklUTUFQIDogKEZYRlRfTE9BRF9OT19CSVRNQVAgfCBGVF9MT0FEX05PX0hJTlRJTkcpOworICAgIGludCBlcnJvciA9IEZYRlRfTG9hZF9HbHlwaChtX0ZhY2UsIGdseXBoX2luZGV4LCBsb2FkX2ZsYWdzKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgRlhGVF9TZXRfRmFjZV9JbnRlcm5hbF9GbGFnKG1fRmFjZSwgdHJhbnNmbGFnKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGludCB3ZWlnaHQgPSAwOworICAgIGlmIChiVXNlQ0pLU3ViRm9udCkgeworICAgICAgICB3ZWlnaHQgPSBwU3Vic3RGb250LT5tX1dlaWdodENKSzsKKyAgICB9IGVsc2UgeworICAgICAgICB3ZWlnaHQgPSBwU3Vic3RGb250ID8gcFN1YnN0Rm9udC0+bV9XZWlnaHQgOiAwOworICAgIH0KKyAgICBpZiAocFN1YnN0Rm9udCAmJiAhKHBTdWJzdEZvbnQtPm1fU3Vic3RGbGFncyAmIEZYRk9OVF9TVUJTVF9NTSkgJiYgd2VpZ2h0ID4gNDAwKSB7CisgICAgICAgIGludCBpbmRleCA9ICh3ZWlnaHQgLSA0MDApIC8gMTA7CisgICAgICAgIGlmIChpbmRleCA+PSAxMDApIHsKKyAgICAgICAgICAgIEZYRlRfU2V0X0ZhY2VfSW50ZXJuYWxfRmxhZyhtX0ZhY2UsIHRyYW5zZmxhZyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpbnQgbGV2ZWwgPSAwOworICAgICAgICBpZiAocFN1YnN0Rm9udC0+bV9DaGFyc2V0ID09IEZYRk9OVF9TSElGVEpJU19DSEFSU0VUKSB7CisgICAgICAgICAgICBsZXZlbCA9IGdfV2VpZ2h0UG93X1NISUZUSklTW2luZGV4XSAqIDIgKiAoRlhTWVNfYWJzKChpbnQpKGZ0X21hdHJpeC54eCkpICsgRlhTWVNfYWJzKChpbnQpKGZ0X21hdHJpeC54eSkpKSAvIDM2NjU1OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGV2ZWwgPSBnX1dlaWdodFBvd18xMVtpbmRleF0gKiAoRlhTWVNfYWJzKChpbnQpKGZ0X21hdHJpeC54eCkpICsgRlhTWVNfYWJzKChpbnQpKGZ0X21hdHJpeC54eSkpKSAvIDM2NjU1OworICAgICAgICB9CisgICAgICAgIEZYRlRfT3V0bGluZV9FbWJvbGRlbihGWEZUX0dldF9HbHlwaF9PdXRsaW5lKG1fRmFjZSksIGxldmVsKTsKKyAgICB9CisgICAgRlhGVF9MaWJyYXJ5X1NldExjZEZpbHRlcihDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRGb250TWdyKCktPm1fRlRMaWJyYXJ5LCBGVF9MQ0RfRklMVEVSX0RFRkFVTFQpOworICAgIGVycm9yID0gRlhGVF9SZW5kZXJfR2x5cGgobV9GYWNlLCBhbnRpX2FsaWFzKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgRlhGVF9TZXRfRmFjZV9JbnRlcm5hbF9GbGFnKG1fRmFjZSwgdHJhbnNmbGFnKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGludCBibXdpZHRoID0gRlhGVF9HZXRfQml0bWFwX1dpZHRoKEZYRlRfR2V0X0dseXBoX0JpdG1hcChtX0ZhY2UpKTsKKyAgICBpbnQgYm1oZWlnaHQgPSBGWEZUX0dldF9CaXRtYXBfUm93cyhGWEZUX0dldF9HbHlwaF9CaXRtYXAobV9GYWNlKSk7CisgICAgaWYgKGJtd2lkdGggPiAyMDQ4IHx8IGJtaGVpZ2h0ID4gMjA0OCkgeworICAgICAgICBGWEZUX1NldF9GYWNlX0ludGVybmFsX0ZsYWcobV9GYWNlLCB0cmFuc2ZsYWcpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaW50IGRpYl93aWR0aCA9IGJtd2lkdGg7CisgICAgQ0ZYX0dseXBoQml0bWFwKiBwR2x5cGhCaXRtYXAgPSBGWF9ORVcgQ0ZYX0dseXBoQml0bWFwOworICAgIGlmICghcEdseXBoQml0bWFwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwR2x5cGhCaXRtYXAtPm1fQml0bWFwLkNyZWF0ZShkaWJfd2lkdGgsIGJtaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFudGlfYWxpYXMgPT0gRlhGVF9SRU5ERVJfTU9ERV9NT05PID8gRlhESUJfMWJwcE1hc2sgOiBGWERJQl84YnBwTWFzayk7CisgICAgcEdseXBoQml0bWFwLT5tX0xlZnQgPSBGWEZUX0dldF9HbHlwaF9CaXRtYXBMZWZ0KG1fRmFjZSk7CisgICAgcEdseXBoQml0bWFwLT5tX1RvcCA9IEZYRlRfR2V0X0dseXBoX0JpdG1hcFRvcChtX0ZhY2UpOworICAgIGludCBkZXN0X3BpdGNoID0gcEdseXBoQml0bWFwLT5tX0JpdG1hcC5HZXRQaXRjaCgpOworICAgIGludCBzcmNfcGl0Y2ggPSBGWEZUX0dldF9CaXRtYXBfUGl0Y2goRlhGVF9HZXRfR2x5cGhfQml0bWFwKG1fRmFjZSkpOworICAgIEZYX0JZVEUqIHBEZXN0QnVmID0gcEdseXBoQml0bWFwLT5tX0JpdG1hcC5HZXRCdWZmZXIoKTsKKyAgICBGWF9CWVRFKiBwU3JjQnVmID0gKEZYX0JZVEUqKUZYRlRfR2V0X0JpdG1hcF9CdWZmZXIoRlhGVF9HZXRfR2x5cGhfQml0bWFwKG1fRmFjZSkpOworICAgIGlmIChhbnRpX2FsaWFzICE9IEZYRlRfUkVOREVSX01PREVfTU9OTyAmJiBGWEZUX0dldF9CaXRtYXBfUGl4ZWxNb2RlKEZYRlRfR2V0X0dseXBoX0JpdG1hcChtX0ZhY2UpKSA9PSBGWEZUX1BJWEVMX01PREVfTU9OTykgeworICAgICAgICBpbnQgYnl0ZXMgPSBhbnRpX2FsaWFzID09IEZYRlRfUkVOREVSX01PREVfTENEID8gMyA6IDE7CisgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBibWhlaWdodDsgaSsrKQorICAgICAgICAgICAgZm9yKGludCBuID0gMDsgbiA8IGJtd2lkdGg7IG4rKykgeworICAgICAgICAgICAgICAgIEZYX0JZVEUgZGF0YSA9IChwU3JjQnVmW2kgKiBzcmNfcGl0Y2ggKyBuIC8gOF0gJiAoMHg4MCA+PiAobiAlIDgpKSkgPyAyNTUgOiAwOworICAgICAgICAgICAgICAgIGZvciAoaW50IGIgPSAwOyBiIDwgYnl0ZXM7IGIgKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcERlc3RCdWZbaSAqIGRlc3RfcGl0Y2ggKyBuICogYnl0ZXMgKyBiXSA9IGRhdGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEZYU1lTX21lbXNldDMyKHBEZXN0QnVmLCAwLCBkZXN0X3BpdGNoICogYm1oZWlnaHQpOworICAgICAgICBpZiAoYW50aV9hbGlhcyA9PSBGWEZUX1JFTkRFUl9NT0RFX01PTk8gJiYgRlhGVF9HZXRfQml0bWFwX1BpeGVsTW9kZShGWEZUX0dldF9HbHlwaF9CaXRtYXAobV9GYWNlKSkgPT0gRlhGVF9QSVhFTF9NT0RFX01PTk8pIHsKKyAgICAgICAgICAgIGludCByb3dieXRlcyA9IEZYU1lTX2FicyhzcmNfcGl0Y2gpID4gZGVzdF9waXRjaCA/IGRlc3RfcGl0Y2ggOiBGWFNZU19hYnMoc3JjX3BpdGNoKTsKKyAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGJtaGVpZ2h0OyByb3cgKyspIHsKKyAgICAgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihwRGVzdEJ1ZiArIHJvdyAqIGRlc3RfcGl0Y2gsIHBTcmNCdWYgKyByb3cgKiBzcmNfcGl0Y2gsIHJvd2J5dGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIF9Db250cmFzdEFkanVzdChwU3JjQnVmLCBwRGVzdEJ1ZiwgYm13aWR0aCwgYm1oZWlnaHQsIHNyY19waXRjaCwgZGVzdF9waXRjaCk7CisgICAgICAgICAgICBfR2FtbWFBZGp1c3QocERlc3RCdWYsIGJtd2lkdGgsIGJtaGVpZ2h0LCBkZXN0X3BpdGNoLCBDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRUZXh0R2FtbWFUYWJsZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBGWEZUX1NldF9GYWNlX0ludGVybmFsX0ZsYWcobV9GYWNlLCB0cmFuc2ZsYWcpOworICAgIHJldHVybiBwR2x5cGhCaXRtYXA7Cit9CitGWF9CT09MIF9PdXRwdXRHbHlwaCh2b2lkKiBkaWIsIGludCB4LCBpbnQgeSwgQ0ZYX0ZvbnQqIHBGb250LAorICAgICAgICAgICAgICAgICAgICAgaW50IGdseXBoX2luZGV4LCBGWF9BUkdCIGFyZ2IpCit7CisgICAgQ0ZYX0RJQml0bWFwKiBwRGliID0gKENGWF9ESUJpdG1hcCopZGliOworICAgIEZYRlRfRmFjZSBmYWNlID0gcEZvbnQtPkdldEZhY2UoKTsKKyAgICBpbnQgZXJyb3IgPSBGWEZUX0xvYWRfR2x5cGgoZmFjZSwgZ2x5cGhfaW5kZXgsIEZYRlRfTE9BRF9OT19CSVRNQVApOworICAgIGlmIChlcnJvcikgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGVycm9yID0gRlhGVF9SZW5kZXJfR2x5cGgoZmFjZSwgRlhGVF9SRU5ERVJfTU9ERV9OT1JNQUwpOworICAgIGlmIChlcnJvcikgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGludCBibXdpZHRoID0gRlhGVF9HZXRfQml0bWFwX1dpZHRoKEZYRlRfR2V0X0dseXBoX0JpdG1hcChmYWNlKSk7CisgICAgaW50IGJtaGVpZ2h0ID0gRlhGVF9HZXRfQml0bWFwX1Jvd3MoRlhGVF9HZXRfR2x5cGhfQml0bWFwKGZhY2UpKTsKKyAgICBpbnQgbGVmdCA9IEZYRlRfR2V0X0dseXBoX0JpdG1hcExlZnQoZmFjZSk7CisgICAgaW50IHRvcCA9IEZYRlRfR2V0X0dseXBoX0JpdG1hcFRvcChmYWNlKTsKKyAgICBGWF9MUENCWVRFIHNyY19idWYgPSAoRlhfTFBDQllURSlGWEZUX0dldF9CaXRtYXBfQnVmZmVyKEZYRlRfR2V0X0dseXBoX0JpdG1hcChmYWNlKSk7CisgICAgaW50IHNyY19waXRjaCA9IEZYRlRfR2V0X0JpdG1hcF9QaXRjaChGWEZUX0dldF9HbHlwaF9CaXRtYXAoZmFjZSkpOworICAgIENGWF9ESUJpdG1hcCBtYXNrOworICAgIG1hc2suQ3JlYXRlKGJtd2lkdGgsIGJtaGVpZ2h0LCBGWERJQl84YnBwTWFzayk7CisgICAgRlhfTFBCWVRFIGRlc3RfYnVmID0gbWFzay5HZXRCdWZmZXIoKTsKKyAgICBpbnQgZGVzdF9waXRjaCA9IG1hc2suR2V0UGl0Y2goKTsKKyAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBibWhlaWdodDsgcm93ICsrKSB7CisgICAgICAgIEZYX0xQQ0JZVEUgc3JjX3NjYW4gPSBzcmNfYnVmICsgcm93ICogc3JjX3BpdGNoOworICAgICAgICBGWF9MUEJZVEUgZGVzdF9zY2FuID0gZGVzdF9idWYgKyByb3cgKiBkZXN0X3BpdGNoOworICAgICAgICBGWFNZU19tZW1jcHkzMihkZXN0X3NjYW4sIHNyY19zY2FuLCBkZXN0X3BpdGNoKTsKKyAgICB9CisgICAgcERpYi0+Q29tcG9zaXRlTWFzayh4ICsgbGVmdCwgeSAtIHRvcCwgYm13aWR0aCwgYm1oZWlnaHQsICZtYXNrLCBhcmdiLCAwLCAwKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgT3V0cHV0VGV4dCh2b2lkKiBkaWIsIGludCB4LCBpbnQgeSwgQ0ZYX0ZvbnQqIHBGb250LCBkb3VibGUgZm9udF9zaXplLAorICAgICAgICAgICAgICAgICAgIENGWF9BZmZpbmVNYXRyaXgqIHBUZXh0X21hdHJpeCwgdW5zaWduZWQgc2hvcnQgY29uc3QqIHRleHQsIHVuc2lnbmVkIGxvbmcgYXJnYikKK3sKKyAgICBpZiAoIXBGb250KSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgRlhGVF9GYWNlIGZhY2UgPSBwRm9udC0+R2V0RmFjZSgpOworICAgIEZYRlRfU2VsZWN0X0NoYXJtYXAocEZvbnQtPm1fRmFjZSwgRlhGVF9FTkNPRElOR19VTklDT0RFKTsKKyAgICBpbnQgdHJhbnNmbGFnID0gRlhGVF9HZXRfRmFjZV9JbnRlcm5hbF9GbGFnKHBGb250LT5tX0ZhY2UpOworICAgIGlmIChwVGV4dF9tYXRyaXgpIHsKKyAgICAgICAgRlhGVF9NYXRyaXggIGZ0X21hdHJpeDsKKyAgICAgICAgZnRfbWF0cml4Lnh4ID0gKHNpZ25lZCBsb25nKShwVGV4dF9tYXRyaXgtPmEgLyA2NCAqIDY1NTM2KTsKKyAgICAgICAgZnRfbWF0cml4Lnh5ID0gKHNpZ25lZCBsb25nKShwVGV4dF9tYXRyaXgtPmMgLyA2NCAqIDY1NTM2KTsKKyAgICAgICAgZnRfbWF0cml4Lnl4ID0gKHNpZ25lZCBsb25nKShwVGV4dF9tYXRyaXgtPmIgLyA2NCAqIDY1NTM2KTsKKyAgICAgICAgZnRfbWF0cml4Lnl5ID0gKHNpZ25lZCBsb25nKShwVGV4dF9tYXRyaXgtPmQgLyA2NCAqIDY1NTM2KTsKKyAgICAgICAgRlhGVF9TZXRfVHJhbnNmb3JtKGZhY2UsICZmdF9tYXRyaXgsIDApOworICAgIH0KKyAgICBGWF9GTE9BVCB4X3BvcyA9IDA7CisgICAgZm9yICg7ICp0ZXh0ICE9IDA7IHRleHQgKyspIHsKKyAgICAgICAgRlhfV0NIQVIgdW5pY29kZSA9ICp0ZXh0OworICAgICAgICBpbnQgZ2x5cGhfaW5kZXggPSBGWEZUX0dldF9DaGFyX0luZGV4KHBGb250LT5tX0ZhY2UsIHVuaWNvZGUpOworICAgICAgICBpZiAoZ2x5cGhfaW5kZXggPD0gMCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaW50IGVyciA9IEZYRlRfTG9hZF9HbHlwaChwRm9udC0+bV9GYWNlLCBnbHlwaF9pbmRleCwgRlhGVF9MT0FEX05PX1NDQUxFIHwgRlhGVF9MT0FEX0lHTk9SRV9HTE9CQUxfQURWQU5DRV9XSURUSCk7CisgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGludCB3ID0gRlhGVF9HZXRfR2x5cGhfSG9yaUFkdmFuY2UocEZvbnQtPm1fRmFjZSk7CisgICAgICAgIGludCBlbSA9IEZYRlRfR2V0X0ZhY2VfVW5pdHNQZXJFTShwRm9udC0+bV9GYWNlKTsKKyAgICAgICAgRlhfRkxPQVQgeDEsIHkxOworICAgICAgICBwVGV4dF9tYXRyaXgtPlRyYW5zZm9ybSh4X3BvcywgMCwgeDEsIHkxKTsKKyAgICAgICAgX091dHB1dEdseXBoKGRpYiwgKGludCl4MSArIHgsIChpbnQpIC0geTEgKyB5LCBwRm9udCwKKyAgICAgICAgICAgICAgICAgICAgIGdseXBoX2luZGV4LCBhcmdiKTsKKyAgICAgICAgeF9wb3MgKz0gKEZYX0ZMT0FUKXcgLyBlbTsKKyAgICB9CisgICAgRlhGVF9TZXRfRmFjZV9JbnRlcm5hbF9GbGFnKHBGb250LT5tX0ZhY2UsIHRyYW5zZmxhZyk7CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIE91dHB1dEdseXBoKHZvaWQqIGRpYiwgaW50IHgsIGludCB5LCBDRlhfRm9udCogcEZvbnQsIGRvdWJsZSBmb250X3NpemUsCisgICAgICAgICAgICAgICAgICAgIENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIHVuc2lnbmVkIGxvbmcgZ2x5cGhfaW5kZXgsIHVuc2lnbmVkIGxvbmcgYXJnYikKK3sKKyAgICBGWEZUX01hdHJpeCAgZnRfbWF0cml4OworICAgIGlmIChwTWF0cml4KSB7CisgICAgICAgIGZ0X21hdHJpeC54eCA9IChzaWduZWQgbG9uZykocE1hdHJpeC0+YSAqIGZvbnRfc2l6ZSAvIDY0ICogNjU1MzYpOworICAgICAgICBmdF9tYXRyaXgueHkgPSAoc2lnbmVkIGxvbmcpKHBNYXRyaXgtPmMgKiBmb250X3NpemUgLyA2NCAqIDY1NTM2KTsKKyAgICAgICAgZnRfbWF0cml4Lnl4ID0gKHNpZ25lZCBsb25nKShwTWF0cml4LT5iICogZm9udF9zaXplIC8gNjQgKiA2NTUzNik7CisgICAgICAgIGZ0X21hdHJpeC55eSA9IChzaWduZWQgbG9uZykocE1hdHJpeC0+ZCAqIGZvbnRfc2l6ZSAvIDY0ICogNjU1MzYpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZ0X21hdHJpeC54eCA9IChzaWduZWQgbG9uZykoZm9udF9zaXplIC8gNjQgKiA2NTUzNik7CisgICAgICAgIGZ0X21hdHJpeC54eSA9IGZ0X21hdHJpeC55eCA9IDA7CisgICAgICAgIGZ0X21hdHJpeC55eSA9IChzaWduZWQgbG9uZykoZm9udF9zaXplIC8gNjQgKiA2NTUzNik7CisgICAgfQorICAgIGludCB0cmFuc2ZsYWcgPSBGWEZUX0dldF9GYWNlX0ludGVybmFsX0ZsYWcocEZvbnQtPm1fRmFjZSk7CisgICAgRlhGVF9TZXRfVHJhbnNmb3JtKHBGb250LT5tX0ZhY2UsICZmdF9tYXRyaXgsIDApOworICAgIEZYX0JPT0wgcmV0ID0gX091dHB1dEdseXBoKGRpYiwgeCwgeSwgcEZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhfaW5kZXgsIGFyZ2IpOworICAgIEZYRlRfU2V0X0ZhY2VfSW50ZXJuYWxfRmxhZyhwRm9udC0+bV9GYWNlLCB0cmFuc2ZsYWcpOworICAgIHJldHVybiByZXQ7Cit9Citjb25zdCBDRlhfUGF0aERhdGEqIENGWF9GYWNlQ2FjaGU6OkxvYWRHbHlwaFBhdGgoQ0ZYX0ZvbnQqIHBGb250LCBGWF9EV09SRCBnbHlwaF9pbmRleCwgaW50IGRlc3Rfd2lkdGgpCit7CisgICAgaWYgKG1fRmFjZSA9PSBOVUxMIHx8IGdseXBoX2luZGV4ID09IChGWF9EV09SRCkgLSAxKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDRlhfUGF0aERhdGEqIHBHbHlwaFBhdGggPSBOVUxMOworICAgIEZYX0xQVk9JRCBrZXk7CisgICAgaWYgKHBGb250LT5HZXRTdWJzdEZvbnQoKSkKKyAgICAgICAga2V5ID0gKEZYX0xQVk9JRCkoRlhfVUlOVFBUUikoZ2x5cGhfaW5kZXggKyAoKHBGb250LT5HZXRTdWJzdEZvbnQoKS0+bV9XZWlnaHQgLyAxNikgPDwgMTUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwRm9udC0+R2V0U3Vic3RGb250KCktPm1fSXRhbGljQW5nbGUgLyAyKSA8PCAyMSkgKyAoKGRlc3Rfd2lkdGggLyAxNikgPDwgMjUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBGb250LT5Jc1ZlcnRpY2FsKCkgPDwgMzEpKTsKKyAgICBlbHNlIHsKKyAgICAgICAga2V5ID0gKEZYX0xQVk9JRCkoRlhfVUlOVFBUUilnbHlwaF9pbmRleDsKKyAgICB9CisgICAgaWYgKG1fUGF0aE1hcC5Mb29rdXAoa2V5LCAoRlhfTFBWT0lEJilwR2x5cGhQYXRoKSkgeworICAgICAgICByZXR1cm4gcEdseXBoUGF0aDsKKyAgICB9CisgICAgcEdseXBoUGF0aCA9IHBGb250LT5Mb2FkR2x5cGhQYXRoKGdseXBoX2luZGV4LCBkZXN0X3dpZHRoKTsKKyAgICBtX1BhdGhNYXAuU2V0QXQoa2V5LCBwR2x5cGhQYXRoKTsKKyAgICByZXR1cm4gcEdseXBoUGF0aDsKK30KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBGWF9CT09MCQkJbV9iQ291bnQ7CisgICAgaW50CQkJCW1fUG9pbnRDb3VudDsKKyAgICBGWF9QQVRIUE9JTlQqCW1fcFBvaW50czsKKyAgICBpbnQJCQkJbV9DdXJYOworICAgIGludAkJCQltX0N1clk7CisgICAgRlhfRkxPQVQJCW1fQ29vcmRVbml0OworfSBPVVRMSU5FX1BBUkFNUzsKK3ZvaWQgX091dGxpbmVfQ2hlY2tFbXB0eUNvbnRvdXIoT1VUTElORV9QQVJBTVMqIHBhcmFtKQoreworICAgIGlmIChwYXJhbS0+bV9Qb2ludENvdW50ID49IDIgJiYgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50IC0gMl0ubV9GbGFnID09IEZYUFRfTU9WRVRPICYmCisgICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgLSAyXS5tX1BvaW50WCA9PSBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgLSAxXS5tX1BvaW50WCAmJgorICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50IC0gMl0ubV9Qb2ludFkgPT0gcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50IC0gMV0ubV9Qb2ludFkpIHsKKyAgICAgICAgcGFyYW0tPm1fUG9pbnRDb3VudCAtPSAyOworICAgIH0KKyAgICBpZiAocGFyYW0tPm1fUG9pbnRDb3VudCA+PSA0ICYmIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudCAtIDRdLm1fRmxhZyA9PSBGWFBUX01PVkVUTyAmJgorICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50IC0gM10ubV9GbGFnID09IEZYUFRfQkVaSUVSVE8gJiYKKyAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudCAtIDNdLm1fUG9pbnRYID09IHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudCAtIDRdLm1fUG9pbnRYICYmCisgICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgLSAzXS5tX1BvaW50WSA9PSBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgLSA0XS5tX1BvaW50WSAmJgorICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50IC0gMl0ubV9Qb2ludFggPT0gcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50IC0gNF0ubV9Qb2ludFggJiYKKyAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudCAtIDJdLm1fUG9pbnRZID09IHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudCAtIDRdLm1fUG9pbnRZICYmCisgICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgLSAxXS5tX1BvaW50WCA9PSBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgLSA0XS5tX1BvaW50WCAmJgorICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50IC0gMV0ubV9Qb2ludFkgPT0gcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50IC0gNF0ubV9Qb2ludFkpIHsKKyAgICAgICAgcGFyYW0tPm1fUG9pbnRDb3VudCAtPSA0OworICAgIH0KK30KK2V4dGVybiAiQyIgeworICAgIHN0YXRpYyBpbnQgX091dGxpbmVfTW92ZVRvKGNvbnN0IEZYRlRfVmVjdG9yKiB0bywgdm9pZCogdXNlcikKKyAgICB7CisgICAgICAgIE9VVExJTkVfUEFSQU1TKiBwYXJhbSA9IChPVVRMSU5FX1BBUkFNUyopdXNlcjsKKyAgICAgICAgaWYgKCFwYXJhbS0+bV9iQ291bnQpIHsKKyAgICAgICAgICAgIF9PdXRsaW5lX0NoZWNrRW1wdHlDb250b3VyKHBhcmFtKTsKKyAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudF0ubV9Qb2ludFggPSB0by0+eCAvIHBhcmFtLT5tX0Nvb3JkVW5pdDsKKyAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudF0ubV9Qb2ludFkgPSB0by0+eSAvIHBhcmFtLT5tX0Nvb3JkVW5pdDsKKyAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudF0ubV9GbGFnID0gRlhQVF9NT1ZFVE87CisgICAgICAgICAgICBwYXJhbS0+bV9DdXJYID0gdG8tPng7CisgICAgICAgICAgICBwYXJhbS0+bV9DdXJZID0gdG8tPnk7CisgICAgICAgICAgICBpZiAocGFyYW0tPm1fUG9pbnRDb3VudCkgeworICAgICAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudCAtIDFdLm1fRmxhZyB8PSBGWFBUX0NMT1NFRklHVVJFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBhcmFtLT5tX1BvaW50Q291bnQgKys7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK307CitleHRlcm4gIkMiIHsKKyAgICBzdGF0aWMgaW50IF9PdXRsaW5lX0xpbmVUbyhjb25zdCBGWEZUX1ZlY3RvciogdG8sIHZvaWQqIHVzZXIpCisgICAgeworICAgICAgICBPVVRMSU5FX1BBUkFNUyogcGFyYW0gPSAoT1VUTElORV9QQVJBTVMqKXVzZXI7CisgICAgICAgIGlmICghcGFyYW0tPm1fYkNvdW50KSB7CisgICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnRdLm1fUG9pbnRYID0gdG8tPnggLyBwYXJhbS0+bV9Db29yZFVuaXQ7CisgICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnRdLm1fUG9pbnRZID0gdG8tPnkgLyBwYXJhbS0+bV9Db29yZFVuaXQ7CisgICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnRdLm1fRmxhZyA9IEZYUFRfTElORVRPOworICAgICAgICAgICAgcGFyYW0tPm1fQ3VyWCA9IHRvLT54OworICAgICAgICAgICAgcGFyYW0tPm1fQ3VyWSA9IHRvLT55OworICAgICAgICB9CisgICAgICAgIHBhcmFtLT5tX1BvaW50Q291bnQgKys7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK307CitleHRlcm4gIkMiIHsKKyAgICBzdGF0aWMgaW50IF9PdXRsaW5lX0NvbmljVG8oY29uc3QgRlhGVF9WZWN0b3IqIGNvbnRyb2wsIGNvbnN0IEZYRlRfVmVjdG9yKiB0bywgdm9pZCogdXNlcikKKyAgICB7CisgICAgICAgIE9VVExJTkVfUEFSQU1TKiBwYXJhbSA9IChPVVRMSU5FX1BBUkFNUyopdXNlcjsKKyAgICAgICAgaWYgKCFwYXJhbS0+bV9iQ291bnQpIHsKKyAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudF0ubV9Qb2ludFggPSAocGFyYW0tPm1fQ3VyWCArIChjb250cm9sLT54IC0gcGFyYW0tPm1fQ3VyWCkgKiAyIC8gMykgLyBwYXJhbS0+bV9Db29yZFVuaXQ7CisgICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnRdLm1fUG9pbnRZID0gKHBhcmFtLT5tX0N1clkgKyAoY29udHJvbC0+eSAtIHBhcmFtLT5tX0N1clkpICogMiAvIDMpIC8gcGFyYW0tPm1fQ29vcmRVbml0OworICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50XS5tX0ZsYWcgPSBGWFBUX0JFWklFUlRPOworICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50ICsgMV0ubV9Qb2ludFggPSAoY29udHJvbC0+eCArICh0by0+eCAtIGNvbnRyb2wtPngpIC8gMykgLyBwYXJhbS0+bV9Db29yZFVuaXQ7CisgICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgKyAxXS5tX1BvaW50WSA9IChjb250cm9sLT55ICsgKHRvLT55IC0gY29udHJvbC0+eSkgLyAzKSAvIHBhcmFtLT5tX0Nvb3JkVW5pdDsKKyAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudCArIDFdLm1fRmxhZyA9IEZYUFRfQkVaSUVSVE87CisgICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgKyAyXS5tX1BvaW50WCA9IHRvLT54IC8gcGFyYW0tPm1fQ29vcmRVbml0OworICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50ICsgMl0ubV9Qb2ludFkgPSB0by0+eSAvIHBhcmFtLT5tX0Nvb3JkVW5pdDsKKyAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudCArIDJdLm1fRmxhZyA9IEZYUFRfQkVaSUVSVE87CisgICAgICAgICAgICBwYXJhbS0+bV9DdXJYID0gdG8tPng7CisgICAgICAgICAgICBwYXJhbS0+bV9DdXJZID0gdG8tPnk7CisgICAgICAgIH0KKyAgICAgICAgcGFyYW0tPm1fUG9pbnRDb3VudCArPSAzOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9OworZXh0ZXJuICJDIiB7CisgICAgc3RhdGljIGludCBfT3V0bGluZV9DdWJpY1RvKGNvbnN0IEZYRlRfVmVjdG9yKiBjb250cm9sMSwgY29uc3QgRlhGVF9WZWN0b3IqIGNvbnRyb2wyLCBjb25zdCBGWEZUX1ZlY3RvciogdG8sIHZvaWQqIHVzZXIpCisgICAgeworICAgICAgICBPVVRMSU5FX1BBUkFNUyogcGFyYW0gPSAoT1VUTElORV9QQVJBTVMqKXVzZXI7CisgICAgICAgIGlmICghcGFyYW0tPm1fYkNvdW50KSB7CisgICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnRdLm1fUG9pbnRYID0gY29udHJvbDEtPnggLyBwYXJhbS0+bV9Db29yZFVuaXQ7CisgICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnRdLm1fUG9pbnRZID0gY29udHJvbDEtPnkgLyBwYXJhbS0+bV9Db29yZFVuaXQ7CisgICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnRdLm1fRmxhZyA9IEZYUFRfQkVaSUVSVE87CisgICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgKyAxXS5tX1BvaW50WCA9IGNvbnRyb2wyLT54IC8gcGFyYW0tPm1fQ29vcmRVbml0OworICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50ICsgMV0ubV9Qb2ludFkgPSBjb250cm9sMi0+eSAvIHBhcmFtLT5tX0Nvb3JkVW5pdDsKKyAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudCArIDFdLm1fRmxhZyA9IEZYUFRfQkVaSUVSVE87CisgICAgICAgICAgICBwYXJhbS0+bV9wUG9pbnRzW3BhcmFtLT5tX1BvaW50Q291bnQgKyAyXS5tX1BvaW50WCA9IHRvLT54IC8gcGFyYW0tPm1fQ29vcmRVbml0OworICAgICAgICAgICAgcGFyYW0tPm1fcFBvaW50c1twYXJhbS0+bV9Qb2ludENvdW50ICsgMl0ubV9Qb2ludFkgPSB0by0+eSAvIHBhcmFtLT5tX0Nvb3JkVW5pdDsKKyAgICAgICAgICAgIHBhcmFtLT5tX3BQb2ludHNbcGFyYW0tPm1fUG9pbnRDb3VudCArIDJdLm1fRmxhZyA9IEZYUFRfQkVaSUVSVE87CisgICAgICAgICAgICBwYXJhbS0+bV9DdXJYID0gdG8tPng7CisgICAgICAgICAgICBwYXJhbS0+bV9DdXJZID0gdG8tPnk7CisgICAgICAgIH0KKyAgICAgICAgcGFyYW0tPm1fUG9pbnRDb3VudCArPSAzOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9OworQ0ZYX1BhdGhEYXRhKiBDRlhfRm9udDo6TG9hZEdseXBoUGF0aChGWF9EV09SRCBnbHlwaF9pbmRleCwgaW50IGRlc3Rfd2lkdGgpCit7CisgICAgaWYgKG1fRmFjZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBGWEZUX1NldF9QaXhlbF9TaXplcyhtX0ZhY2UsIDAsIDY0KTsKKyAgICBGWEZUX01hdHJpeCAgZnRfbWF0cml4ID0gezY1NTM2LCAwLCAwLCA2NTUzNn07CisgICAgaWYgKG1fcFN1YnN0Rm9udCkgeworICAgICAgICBpZiAobV9wU3Vic3RGb250LT5tX0l0YWxpY0FuZ2xlKSB7CisgICAgICAgICAgICBpbnQgc2tldyA9IG1fcFN1YnN0Rm9udC0+bV9JdGFsaWNBbmdsZTsKKyAgICAgICAgICAgIHNrZXcgPSBza2V3IDw9IC0zMCA/IC01OCA6IC1nX0FuZ2xlU2tld1stc2tld107CisgICAgICAgICAgICBpZiAobV9iVmVydGljYWwpIHsKKyAgICAgICAgICAgICAgICBmdF9tYXRyaXgueXggKz0gZnRfbWF0cml4Lnl5ICogc2tldyAvIDEwMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZnRfbWF0cml4Lnh5ICs9IC1mdF9tYXRyaXgueHggKiBza2V3IC8gMTAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChtX3BTdWJzdEZvbnQtPm1fU3Vic3RGbGFncyAmIEZYRk9OVF9TVUJTVF9NTSkgeworICAgICAgICAgICAgQWRqdXN0TU1QYXJhbXMoZ2x5cGhfaW5kZXgsIGRlc3Rfd2lkdGgsIG1fcFN1YnN0Rm9udC0+bV9XZWlnaHQpOworICAgICAgICB9CisgICAgfQorICAgIGludCB0cmFuc2ZsYWcgPSBGWEZUX0dldF9GYWNlX0ludGVybmFsX0ZsYWcobV9GYWNlKTsKKyAgICBGWEZUX1NldF9UcmFuc2Zvcm0obV9GYWNlLCAmZnRfbWF0cml4LCAwKTsKKyAgICBpbnQgbG9hZF9mbGFncyA9IChtX0ZhY2UtPmZhY2VfZmxhZ3MgJiBGVF9GQUNFX0ZMQUdfU0ZOVCkgPyBGWEZUX0xPQURfTk9fQklUTUFQIDogRlhGVF9MT0FEX05PX0JJVE1BUCB8IEZUX0xPQURfTk9fSElOVElORzsKKyAgICBpbnQgZXJyb3IgPSBGWEZUX0xvYWRfR2x5cGgobV9GYWNlLCBnbHlwaF9pbmRleCwgbG9hZF9mbGFncyk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIEZYRlRfU2V0X0ZhY2VfSW50ZXJuYWxfRmxhZyhtX0ZhY2UsIHRyYW5zZmxhZyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAobV9wU3Vic3RGb250ICYmICEobV9wU3Vic3RGb250LT5tX1N1YnN0RmxhZ3MgJiBGWEZPTlRfU1VCU1RfTU0pICYmIG1fcFN1YnN0Rm9udC0+bV9XZWlnaHQgPiA0MDApIHsKKyAgICAgICAgaW50IGxldmVsID0gMDsKKyAgICAgICAgaWYgKG1fcFN1YnN0Rm9udC0+bV9DaGFyc2V0ID09IEZYRk9OVF9TSElGVEpJU19DSEFSU0VUKSB7CisgICAgICAgICAgICBsZXZlbCA9IGdfV2VpZ2h0UG93X1NISUZUSklTWyhtX3BTdWJzdEZvbnQtPm1fV2VpZ2h0IC0gNDAwKSAvIDEwXSAqIDIgKiA2NTUzNiAvIDM2NjU1OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGV2ZWwgPSBnX1dlaWdodFBvd1sobV9wU3Vic3RGb250LT5tX1dlaWdodCAtIDQwMCkgLyAxMF0gKiAyOworICAgICAgICB9CisgICAgICAgIEZYRlRfT3V0bGluZV9FbWJvbGRlbihGWEZUX0dldF9HbHlwaF9PdXRsaW5lKG1fRmFjZSksIGxldmVsKTsKKyAgICB9CisgICAgRlhGVF9PdXRsaW5lX0Z1bmNzIGZ1bmNzOworICAgIGZ1bmNzLm1vdmVfdG8gPSBfT3V0bGluZV9Nb3ZlVG87CisgICAgZnVuY3MubGluZV90byA9IF9PdXRsaW5lX0xpbmVUbzsKKyAgICBmdW5jcy5jb25pY190byA9IF9PdXRsaW5lX0NvbmljVG87CisgICAgZnVuY3MuY3ViaWNfdG8gPSBfT3V0bGluZV9DdWJpY1RvOworICAgIGZ1bmNzLnNoaWZ0ID0gMDsKKyAgICBmdW5jcy5kZWx0YSA9IDA7CisgICAgT1VUTElORV9QQVJBTVMgcGFyYW1zOworICAgIHBhcmFtcy5tX2JDb3VudCA9IFRSVUU7CisgICAgcGFyYW1zLm1fUG9pbnRDb3VudCA9IDA7CisgICAgRlhGVF9PdXRsaW5lX0RlY29tcG9zZShGWEZUX0dldF9HbHlwaF9PdXRsaW5lKG1fRmFjZSksICZmdW5jcywgJnBhcmFtcyk7CisgICAgaWYgKHBhcmFtcy5tX1BvaW50Q291bnQgPT0gMCkgeworICAgICAgICBGWEZUX1NldF9GYWNlX0ludGVybmFsX0ZsYWcobV9GYWNlLCB0cmFuc2ZsYWcpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgQ0ZYX1BhdGhEYXRhKiBwUGF0aCA9IEZYX05FVyBDRlhfUGF0aERhdGE7CisgICAgaWYgKCFwUGF0aCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcFBhdGgtPlNldFBvaW50Q291bnQocGFyYW1zLm1fUG9pbnRDb3VudCk7CisgICAgcGFyYW1zLm1fYkNvdW50ID0gRkFMU0U7CisgICAgcGFyYW1zLm1fUG9pbnRDb3VudCA9IDA7CisgICAgcGFyYW1zLm1fcFBvaW50cyA9IHBQYXRoLT5HZXRQb2ludHMoKTsKKyAgICBwYXJhbXMubV9DdXJYID0gcGFyYW1zLm1fQ3VyWSA9IDA7CisgICAgcGFyYW1zLm1fQ29vcmRVbml0ID0gNjQgKiA2NC4wOworICAgIEZYRlRfT3V0bGluZV9EZWNvbXBvc2UoRlhGVF9HZXRfR2x5cGhfT3V0bGluZShtX0ZhY2UpLCAmZnVuY3MsICZwYXJhbXMpOworICAgIF9PdXRsaW5lX0NoZWNrRW1wdHlDb250b3VyKCZwYXJhbXMpOworICAgIHBQYXRoLT5UcmltUG9pbnRzKHBhcmFtcy5tX1BvaW50Q291bnQpOworICAgIGlmIChwYXJhbXMubV9Qb2ludENvdW50KSB7CisgICAgICAgIHBQYXRoLT5HZXRQb2ludHMoKVtwYXJhbXMubV9Qb2ludENvdW50IC0gMV0ubV9GbGFnIHw9IEZYUFRfQ0xPU0VGSUdVUkU7CisgICAgfQorICAgIEZYRlRfU2V0X0ZhY2VfSW50ZXJuYWxfRmxhZyhtX0ZhY2UsIHRyYW5zZmxhZyk7CisgICAgcmV0dXJuIHBQYXRoOworfQordm9pZCBfQ0ZYX1VuaXF1ZUtleUdlbjo6R2VuZXJhdGUoaW50IGNvdW50LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdMaXN0OworICAgIHZhX3N0YXJ0KGFyZ0xpc3QsIGNvdW50KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpICsrKSB7CisgICAgICAgIGludCBwID0gdmFfYXJnKGFyZ0xpc3QsIGludCk7CisgICAgICAgICgoRlhfRFdPUkQqKW1fS2V5KVtpXSA9IHA7CisgICAgfQorICAgIHZhX2VuZChhcmdMaXN0KTsKKyAgICBtX0tleUxlbiA9IGNvdW50ICogc2l6ZW9mKEZYX0RXT1JEKTsKK30KZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2UvZ2UvdGV4dF9pbnQuaCBiL2NvcmUvc3JjL2Z4Z2UvZ2UvdGV4dF9pbnQuaAppbmRleCA3NjA4ZjhhLi5hM2M5NDE3IDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL2dlL3RleHRfaW50LmgKKysrIGIvY29yZS9zcmMvZnhnZS9nZS90ZXh0X2ludC5oCkBAIC0xLDEwMCArMSwxMDAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLXN0cnVjdCBfQ0ZYX1VuaXF1ZUtleUdlbiB7DQotICAgIHZvaWQJCUdlbmVyYXRlKGludCBjb3VudCwgLi4uKTsNCi0gICAgRlhfQ0hBUgkJbV9LZXlbMTI4XTsNCi0gICAgaW50CQkJbV9LZXlMZW47DQotfTsNCi1jbGFzcyBDRlhfU2l6ZUdseXBoQ2FjaGUgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENGWF9TaXplR2x5cGhDYWNoZSgpDQotICAgIHsNCi0gICAgICAgIG1fR2x5cGhNYXAuSW5pdEhhc2hUYWJsZSgyNTMpOw0KLSAgICB9DQotICAgIH5DRlhfU2l6ZUdseXBoQ2FjaGUoKTsNCi0gICAgQ0ZYX01hcFB0clRvUHRyCQkJbV9HbHlwaE1hcDsNCi19Ow0KLWNsYXNzIENUVEZvbnREZXNjIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDVFRGb250RGVzYygpDQotICAgIHsNCi0gICAgICAgIG1fVHlwZSA9IDA7DQotICAgICAgICBtX3BGb250RGF0YSA9IE5VTEw7DQotICAgICAgICBtX1JlZkNvdW50ID0gMDsNCi0gICAgfQ0KLSAgICB+Q1RURm9udERlc2MoKTsNCi0gICAgRlhfQk9PTAkJCVJlbGVhc2VGYWNlKEZYRlRfRmFjZSBmYWNlKTsNCi0gICAgaW50CQkJCW1fVHlwZTsNCi0gICAgdW5pb24gew0KLSAgICAgICAgc3RydWN0IHsNCi0gICAgICAgICAgICBGWF9CT09MCQltX2JJdGFsaWM7DQotICAgICAgICAgICAgRlhfQk9PTAkJbV9iQm9sZDsNCi0gICAgICAgICAgICBGWEZUX0ZhY2UJbV9wRmFjZTsNCi0gICAgICAgIH0gbV9TaW5nbGVGYWNlOw0KLSAgICAgICAgc3RydWN0IHsNCi0gICAgICAgICAgICBGWEZUX0ZhY2UJbV9wRmFjZXNbMTZdOw0KLSAgICAgICAgfSBtX1RUQ0ZhY2U7DQotICAgIH07DQotICAgIEZYX0JZVEUqCQltX3BGb250RGF0YTsNCi0gICAgaW50CQkJCW1fUmVmQ291bnQ7DQotfTsNCi1jbGFzcyBDRlhfVW5pY29kZUVuY29kaW5nIDogcHVibGljIElGWF9Gb250RW5jb2RpbmcNCi17DQotcHVibGljOg0KLSAgICBDRlhfVW5pY29kZUVuY29kaW5nKENGWF9Gb250KiBwRm9udCk7DQotICAgIHZpcnR1YWwgRlhfRFdPUkQJCUdseXBoRnJvbUNoYXJDb2RlRXgoRlhfRFdPUkQgY2hhcmNvZGUsIGludCBlbmNvZGluZyA9IEVOQ09ESU5HX1VOSUNPREUpOw0KLXByaXZhdGU6DQotICAgIENGWF9Gb250KgkJCW1fcEZvbnQ7DQotICAgIHZpcnR1YWwgRlhfRFdPUkQJCUdseXBoRnJvbUNoYXJDb2RlKEZYX0RXT1JEIGNoYXJjb2RlKTsNCi0gICAgdmlydHVhbCBDRlhfV2lkZVN0cmluZwlVbmljb2RlRnJvbUNoYXJDb2RlKEZYX0RXT1JEIGNoYXJjb2RlKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKEZYX1dDSEFSKWNoYXJjb2RlKTsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIEZYX0RXT1JECQlDaGFyQ29kZUZyb21Vbmljb2RlKEZYX1dDSEFSIFVuaWNvZGUpIGNvbnN0DQotICAgIHsNCi0gICAgICAgIHJldHVybiBVbmljb2RlOw0KLSAgICB9DQotICAgIHZpcnR1YWwgRlhfQk9PTAkJCUlzVW5pY29kZUNvbXBhdGlibGUoKSBjb25zdA0KLSAgICB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLX07DQotI2RlZmluZSBDSEFSU0VUX0ZMQUdfQU5TSQkJMQ0KLSNkZWZpbmUgQ0hBUlNFVF9GTEFHX1NZTUJPTAkJMg0KLSNkZWZpbmUgQ0hBUlNFVF9GTEFHX1NISUZUSklTCTQNCi0jZGVmaW5lIENIQVJTRVRfRkxBR19CSUc1CQk4DQotI2RlZmluZSBDSEFSU0VUX0ZMQUdfR0IJCQkxNg0KLSNkZWZpbmUgQ0hBUlNFVF9GTEFHX0tPUkVBTgkJMzINCi1jbGFzcyBDRm9udEZhY2VJbmZvIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDRlhfQnl0ZVN0cmluZwkJbV9GaWxlUGF0aDsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcJCW1fRmFjZU5hbWU7DQotICAgIEZYX0RXT1JECQkJbV9TdHlsZXM7DQotICAgIEZYX0RXT1JECQkJbV9DaGFyc2V0czsNCi0gICAgRlhfRFdPUkQJCQltX0ZvbnRPZmZzZXQ7DQotICAgIEZYX0RXT1JECQkJbV9GaWxlU2l6ZTsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcJCW1fRm9udFRhYmxlczsNCi19Ow0KLWNsYXNzIENGb250RmlsZUZhY2VJbmZvIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDRm9udEZpbGVGYWNlSW5mbygpOw0KLSAgICB+Q0ZvbnRGaWxlRmFjZUluZm8oKTsNCi0gICAgSUZYX0ZpbGVTdHJlYW0qCQltX3BGaWxlOw0KLSAgICBGWEZUX0ZhY2UJCQltX0ZhY2U7DQotICAgIENGWF9CeXRlU3RyaW5nCQltX0ZhY2VOYW1lOw0KLSAgICBGWF9EV09SRAkJCW1fQ2hhcnNldHM7DQotICAgIEZYX0RXT1JECQkJbV9GaWxlU2l6ZTsNCi0gICAgRlhfRFdPUkQJCQltX0ZvbnRPZmZzZXQ7DQotICAgIGludAkJCQkJbV9XZWlnaHQ7DQotICAgIEZYX0JPT0wJCQkJbV9iSXRhbGljOw0KLSAgICBpbnQJCQkJCW1fUGl0Y2hGYW1pbHk7DQotICAgIENGWF9CeXRlU3RyaW5nCQltX0ZvbnRUYWJsZXM7DQotfTsNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCitzdHJ1Y3QgX0NGWF9VbmlxdWVLZXlHZW4geworICAgIHZvaWQJCUdlbmVyYXRlKGludCBjb3VudCwgLi4uKTsKKyAgICBGWF9DSEFSCQltX0tleVsxMjhdOworICAgIGludAkJCW1fS2V5TGVuOworfTsKK2NsYXNzIENGWF9TaXplR2x5cGhDYWNoZSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ0ZYX1NpemVHbHlwaENhY2hlKCkKKyAgICB7CisgICAgICAgIG1fR2x5cGhNYXAuSW5pdEhhc2hUYWJsZSgyNTMpOworICAgIH0KKyAgICB+Q0ZYX1NpemVHbHlwaENhY2hlKCk7CisgICAgQ0ZYX01hcFB0clRvUHRyCQkJbV9HbHlwaE1hcDsKK307CitjbGFzcyBDVFRGb250RGVzYyA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ1RURm9udERlc2MoKQorICAgIHsKKyAgICAgICAgbV9UeXBlID0gMDsKKyAgICAgICAgbV9wRm9udERhdGEgPSBOVUxMOworICAgICAgICBtX1JlZkNvdW50ID0gMDsKKyAgICB9CisgICAgfkNUVEZvbnREZXNjKCk7CisgICAgRlhfQk9PTAkJCVJlbGVhc2VGYWNlKEZYRlRfRmFjZSBmYWNlKTsKKyAgICBpbnQJCQkJbV9UeXBlOworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIEZYX0JPT0wJCW1fYkl0YWxpYzsKKyAgICAgICAgICAgIEZYX0JPT0wJCW1fYkJvbGQ7CisgICAgICAgICAgICBGWEZUX0ZhY2UJbV9wRmFjZTsKKyAgICAgICAgfSBtX1NpbmdsZUZhY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBGWEZUX0ZhY2UJbV9wRmFjZXNbMTZdOworICAgICAgICB9IG1fVFRDRmFjZTsKKyAgICB9OworICAgIEZYX0JZVEUqCQltX3BGb250RGF0YTsKKyAgICBpbnQJCQkJbV9SZWZDb3VudDsKK307CitjbGFzcyBDRlhfVW5pY29kZUVuY29kaW5nIDogcHVibGljIElGWF9Gb250RW5jb2RpbmcKK3sKK3B1YmxpYzoKKyAgICBDRlhfVW5pY29kZUVuY29kaW5nKENGWF9Gb250KiBwRm9udCk7CisgICAgdmlydHVhbCBGWF9EV09SRAkJR2x5cGhGcm9tQ2hhckNvZGVFeChGWF9EV09SRCBjaGFyY29kZSwgaW50IGVuY29kaW5nID0gRU5DT0RJTkdfVU5JQ09ERSk7Citwcml2YXRlOgorICAgIENGWF9Gb250KgkJCW1fcEZvbnQ7CisgICAgdmlydHVhbCBGWF9EV09SRAkJR2x5cGhGcm9tQ2hhckNvZGUoRlhfRFdPUkQgY2hhcmNvZGUpOworICAgIHZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJVW5pY29kZUZyb21DaGFyQ29kZShGWF9EV09SRCBjaGFyY29kZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBDRlhfV2lkZVN0cmluZygoRlhfV0NIQVIpY2hhcmNvZGUpOworICAgIH0KKyAgICB2aXJ0dWFsIEZYX0RXT1JECQlDaGFyQ29kZUZyb21Vbmljb2RlKEZYX1dDSEFSIFVuaWNvZGUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVW5pY29kZTsKKyAgICB9CisgICAgdmlydHVhbCBGWF9CT09MCQkJSXNVbmljb2RlQ29tcGF0aWJsZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9Cit9OworI2RlZmluZSBDSEFSU0VUX0ZMQUdfQU5TSQkJMQorI2RlZmluZSBDSEFSU0VUX0ZMQUdfU1lNQk9MCQkyCisjZGVmaW5lIENIQVJTRVRfRkxBR19TSElGVEpJUwk0CisjZGVmaW5lIENIQVJTRVRfRkxBR19CSUc1CQk4CisjZGVmaW5lIENIQVJTRVRfRkxBR19HQgkJCTE2CisjZGVmaW5lIENIQVJTRVRfRkxBR19LT1JFQU4JCTMyCitjbGFzcyBDRm9udEZhY2VJbmZvIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKyAgICBDRlhfQnl0ZVN0cmluZwkJbV9GaWxlUGF0aDsKKyAgICBDRlhfQnl0ZVN0cmluZwkJbV9GYWNlTmFtZTsKKyAgICBGWF9EV09SRAkJCW1fU3R5bGVzOworICAgIEZYX0RXT1JECQkJbV9DaGFyc2V0czsKKyAgICBGWF9EV09SRAkJCW1fRm9udE9mZnNldDsKKyAgICBGWF9EV09SRAkJCW1fRmlsZVNpemU7CisgICAgQ0ZYX0J5dGVTdHJpbmcJCW1fRm9udFRhYmxlczsKK307CitjbGFzcyBDRm9udEZpbGVGYWNlSW5mbyA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ0ZvbnRGaWxlRmFjZUluZm8oKTsKKyAgICB+Q0ZvbnRGaWxlRmFjZUluZm8oKTsKKyAgICBJRlhfRmlsZVN0cmVhbSoJCW1fcEZpbGU7CisgICAgRlhGVF9GYWNlCQkJbV9GYWNlOworICAgIENGWF9CeXRlU3RyaW5nCQltX0ZhY2VOYW1lOworICAgIEZYX0RXT1JECQkJbV9DaGFyc2V0czsKKyAgICBGWF9EV09SRAkJCW1fRmlsZVNpemU7CisgICAgRlhfRFdPUkQJCQltX0ZvbnRPZmZzZXQ7CisgICAgaW50CQkJCQltX1dlaWdodDsKKyAgICBGWF9CT09MCQkJCW1fYkl0YWxpYzsKKyAgICBpbnQJCQkJCW1fUGl0Y2hGYW1pbHk7CisgICAgQ0ZYX0J5dGVTdHJpbmcJCW1fRm9udFRhYmxlczsKK307CmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGdlL3dpbjMyL2R3cml0ZV9pbnQuaCBiL2NvcmUvc3JjL2Z4Z2Uvd2luMzIvZHdyaXRlX2ludC5oCmluZGV4IDFmMDc3MGQuLjJlZWNjN2MgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Z2Uvd2luMzIvZHdyaXRlX2ludC5oCisrKyBiL2NvcmUvc3JjL2Z4Z2Uvd2luMzIvZHdyaXRlX2ludC5oCkBAIC0xLDU5ICsxLDU5IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GWF9ESVJFQ1RfV1JJVEVfDQotI2RlZmluZSBfRlhfRElSRUNUX1dSSVRFXw0KLSNpZm5kZWYgREVDTFNQRUNfVVVJRA0KLSNpZiAoX01TQ19WRVIgPj0gMTEwMCkgJiYgZGVmaW5lZCAoX19jcGx1c3BsdXMpDQotI2RlZmluZSBERUNMU1BFQ19VVUlEKHgpICAgIF9fZGVjbHNwZWModXVpZCh4KSkNCi0jZWxzZQ0KLSNkZWZpbmUgREVDTFNQRUNfVVVJRCh4KQ0KLSNlbmRpZg0KLSNlbmRpZg0KLSNpZm5kZWYgREVDTFNQRUNfTk9WVEFCTEUNCi0jaWYgKF9NU0NfVkVSID49IDExMDApICYmIGRlZmluZWQoX19jcGx1c3BsdXMpDQotI2RlZmluZSBERUNMU1BFQ19OT1ZUQUJMRSAgIF9fZGVjbHNwZWMobm92dGFibGUpDQotI2Vsc2UNCi0jZGVmaW5lIERFQ0xTUEVDX05PVlRBQkxFDQotI2VuZGlmDQotI2VuZGlmDQotI2lmKFdJTlZFUiA8IDB4MDUwMCkNCi0jaWZuZGVmIF9NQUMNCi1ERUNMQVJFX0hBTkRMRShITU9OSVRPUik7DQotI2VuZGlmDQotI2VuZGlmDQotY2xhc3MgQ0RXcml0ZUV4dA0KLXsNCi1wdWJsaWM6DQotICAgIENEV3JpdGVFeHQoKTsNCi0gICAgfkNEV3JpdGVFeHQoKTsNCi0NCi0gICAgdm9pZAkJCUxvYWQoKTsNCi0gICAgdm9pZCAgICAgICAgICAgIFVubG9hZCgpOw0KLQ0KLSAgICBGWF9CT09MCQkJSXNBdmFpbGFibGUoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9wRFdyaXRlRmFjdG9yeSAhPSBOVUxMOw0KLSAgICB9DQotDQotICAgIHZvaWQqCQkJRHdDcmVhdGVGb250RmFjZUZyb21TdHJlYW0oRlhfTFBCWVRFIHBEYXRhLCBGWF9EV09SRCBzaXplLCBpbnQgc2ltdWxhdGlvbl9zdHlsZSk7DQotICAgIEZYX0JPT0wgICAgICAgICBEd0NyZWF0ZVJlbmRlcmluZ1RhcmdldChDRlhfRElCaXRtYXAqIHBTcmMsIHZvaWQqKiByZW5kZXJUYXJnZXQpOw0KLSAgICB2b2lkICAgICAgICAgICAgRHdEZWxldGVSZW5kZXJpbmdUYXJnZXQodm9pZCogcmVuZGVyVGFyZ2V0KTsNCi0gICAgRlhfQk9PTAkJCUR3UmVuZGluZ1N0cmluZyh2b2lkKiByZW5kZXJUYXJnZXQsIENGWF9DbGlwUmduKiBwQ2xpcFJnbiwgRlhfUkVDVCYgc3RyaW5nUmVjdCwgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpmb250LCBGWF9GTE9BVCBmb250X3NpemUsIEZYX0FSR0IgdGV4dF9jb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZ2x5cGhfY291bnQsIHVuc2lnbmVkIHNob3J0KiBnbHlwaF9pbmRpY2VzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUIGJhc2VsaW5lT3JpZ2luWCwgRlhfRkxPQVQgYmFzZWxpbmVPcmlnaW5ZLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGdseXBoX29mZnNldHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRkxPQVQqIGdseXBoX2FkdmFuY2VzKTsNCi0gICAgdm9pZAkJCUR3RGVsZXRlRm9udCh2b2lkKiBwRm9udCk7DQotDQotcHJvdGVjdGVkOg0KLSAgICB2b2lkKgkJCW1faE1vZHVsZTsNCi0gICAgdm9pZCoJCQltX3BEV3JpdGVGYWN0b3J5Ow0KLSAgICB2b2lkKgkJICAgIG1fcER3Rm9udENvbnRleHQ7DQotICAgIHZvaWQqCSAgICAgICAgbV9wRHdUZXh0UmVuZGVyZXI7DQotfTsNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9GWF9ESVJFQ1RfV1JJVEVfCisjZGVmaW5lIF9GWF9ESVJFQ1RfV1JJVEVfCisjaWZuZGVmIERFQ0xTUEVDX1VVSUQKKyNpZiAoX01TQ19WRVIgPj0gMTEwMCkgJiYgZGVmaW5lZCAoX19jcGx1c3BsdXMpCisjZGVmaW5lIERFQ0xTUEVDX1VVSUQoeCkgICAgX19kZWNsc3BlYyh1dWlkKHgpKQorI2Vsc2UKKyNkZWZpbmUgREVDTFNQRUNfVVVJRCh4KQorI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgREVDTFNQRUNfTk9WVEFCTEUKKyNpZiAoX01TQ19WRVIgPj0gMTEwMCkgJiYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyNkZWZpbmUgREVDTFNQRUNfTk9WVEFCTEUgICBfX2RlY2xzcGVjKG5vdnRhYmxlKQorI2Vsc2UKKyNkZWZpbmUgREVDTFNQRUNfTk9WVEFCTEUKKyNlbmRpZgorI2VuZGlmCisjaWYoV0lOVkVSIDwgMHgwNTAwKQorI2lmbmRlZiBfTUFDCitERUNMQVJFX0hBTkRMRShITU9OSVRPUik7CisjZW5kaWYKKyNlbmRpZgorY2xhc3MgQ0RXcml0ZUV4dAoreworcHVibGljOgorICAgIENEV3JpdGVFeHQoKTsKKyAgICB+Q0RXcml0ZUV4dCgpOworCisgICAgdm9pZAkJCUxvYWQoKTsKKyAgICB2b2lkICAgICAgICAgICAgVW5sb2FkKCk7CisKKyAgICBGWF9CT09MCQkJSXNBdmFpbGFibGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcERXcml0ZUZhY3RvcnkgIT0gTlVMTDsKKyAgICB9CisKKyAgICB2b2lkKgkJCUR3Q3JlYXRlRm9udEZhY2VGcm9tU3RyZWFtKEZYX0xQQllURSBwRGF0YSwgRlhfRFdPUkQgc2l6ZSwgaW50IHNpbXVsYXRpb25fc3R5bGUpOworICAgIEZYX0JPT0wgICAgICAgICBEd0NyZWF0ZVJlbmRlcmluZ1RhcmdldChDRlhfRElCaXRtYXAqIHBTcmMsIHZvaWQqKiByZW5kZXJUYXJnZXQpOworICAgIHZvaWQgICAgICAgICAgICBEd0RlbGV0ZVJlbmRlcmluZ1RhcmdldCh2b2lkKiByZW5kZXJUYXJnZXQpOworICAgIEZYX0JPT0wJCQlEd1JlbmRpbmdTdHJpbmcodm9pZCogcmVuZGVyVGFyZ2V0LCBDRlhfQ2xpcFJnbiogcENsaXBSZ24sIEZYX1JFQ1QmIHN0cmluZ1JlY3QsIENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpmb250LCBGWF9GTE9BVCBmb250X3NpemUsIEZYX0FSR0IgdGV4dF9jb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBnbHlwaF9jb3VudCwgdW5zaWduZWQgc2hvcnQqIGdseXBoX2luZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCBiYXNlbGluZU9yaWdpblgsIEZYX0ZMT0FUIGJhc2VsaW5lT3JpZ2luWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGdseXBoX29mZnNldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCogZ2x5cGhfYWR2YW5jZXMpOworICAgIHZvaWQJCQlEd0RlbGV0ZUZvbnQodm9pZCogcEZvbnQpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCoJCQltX2hNb2R1bGU7CisgICAgdm9pZCoJCQltX3BEV3JpdGVGYWN0b3J5OworICAgIHZvaWQqCQkgICAgbV9wRHdGb250Q29udGV4dDsKKyAgICB2b2lkKgkgICAgICAgIG1fcER3VGV4dFJlbmRlcmVyOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS9zcmMvZnhnZS93aW4zMi9meF93aW4zMl9kZXZpY2UuY3BwIGIvY29yZS9zcmMvZnhnZS93aW4zMi9meF93aW4zMl9kZXZpY2UuY3BwCmluZGV4IGUzZjVhZTAuLjU5Mjg4NjIgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Z2Uvd2luMzIvZnhfd2luMzJfZGV2aWNlLmNwcAorKysgYi9jb3JlL3NyYy9meGdlL3dpbjMyL2Z4X3dpbjMyX2RldmljZS5jcHAKQEAgLTEsMTIwMCArMSwxMjAwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiDQotI2lmIF9GWF9PU18gPT0gX0ZYX1dJTjMyX0RFU0tUT1BfIHx8IF9GWF9PU18gPT0gX0ZYX1dJTjY0Xw0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2Vfd2luMzIuaCINCi0jaW5jbHVkZSA8Y3J0ZGJnLmg+DQotI2luY2x1ZGUgIi4uL2FnZy9pbmNsdWRlL2Z4ZnhfYWdnX2NsaXBfbGlhbmdfYmFyc2t5LmgiDQotI2luY2x1ZGUgImR3cml0ZV9pbnQuaCINCi0jaW5jbHVkZSAid2luMzJfaW50LmgiDQotI2luY2x1ZGUgIi4uL2dlL3RleHRfaW50LmgiDQotI2luY2x1ZGUgIi4uL2RpYi9kaWJfaW50LmgiDQotI2luY2x1ZGUgIi4uL2FnZy9pbmNsdWRlL2Z4X2FnZ19kcml2ZXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2ZyZWV0eXBlLmgiDQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhjb2RlYy9meF9jb2RlYy5oIg0KLWNsYXNzIENXaW4zMkZvbnRJbmZvIDogcHVibGljIElGWF9TeXN0ZW1Gb250SW5mbw0KLXsNCi1wdWJsaWM6DQotICAgIENXaW4zMkZvbnRJbmZvKCk7DQotICAgIH5DV2luMzJGb250SW5mbygpOw0KLSAgICB2aXJ0dWFsIHZvaWQJCVJlbGVhc2UoKTsNCi0gICAgdmlydHVhbAlGWF9CT09MCQlFbnVtRm9udExpc3QoQ0ZYX0ZvbnRNYXBwZXIqIHBNYXBwZXIpOw0KLSAgICB2aXJ0dWFsIHZvaWQqCQlNYXBGb250KGludCB3ZWlnaHQsIEZYX0JPT0wgYkl0YWxpYywgaW50IGNoYXJzZXQsIGludCBwaXRjaF9mYW1pbHksIEZYX0xQQ1NUUiBmYWNlLCBGWF9CT09MJiBiRXhhY3QpOw0KLSAgICB2aXJ0dWFsIHZvaWQqCQlHZXRGb250KEZYX0xQQ1NUUiBmYWNlKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIEZYX0RXT1JECUdldEZvbnREYXRhKHZvaWQqIGhGb250LCBGWF9EV09SRCB0YWJsZSwgRlhfTFBCWVRFIGJ1ZmZlciwgRlhfRFdPUkQgc2l6ZSk7DQotICAgIHZpcnR1YWwgdm9pZAkJRGVsZXRlRm9udCh2b2lkKiBoRm9udCk7DQotICAgIHZpcnR1YWwJRlhfQk9PTAkJR2V0RmFjZU5hbWUodm9pZCogaEZvbnQsIENGWF9CeXRlU3RyaW5nJiBuYW1lKTsNCi0gICAgdmlydHVhbCBGWF9CT09MCQlHZXRGb250Q2hhcnNldCh2b2lkKiBoRm9udCwgaW50JiBjaGFyc2V0KTsNCi0gICAgRlhfQk9PTAkJCQlJc09wZW5UeXBlRnJvbURpdihjb25zdCBMT0dGT05UQSAqcGxmKTsNCi0gICAgRlhfQk9PTAkJCQlJc1N1cHBvcnRGb250Rm9ybURpdihjb25zdCBMT0dGT05UQSogcGxmKTsNCi0gICAgdm9pZAkJCQlBZGRJbnN0YWxsZWRGb250KGNvbnN0IExPR0ZPTlRBICpwbGYsIEZYX0RXT1JEIEZvbnRUeXBlKTsNCi0gICAgdm9pZAkJCQlHZXRHQlByZWZlcmVuY2UoQ0ZYX0J5dGVTdHJpbmcmIGZhY2UsIGludCB3ZWlnaHQsIGludCBwaWN0aF9mYW1pbHkpOw0KLSAgICB2b2lkCQkJCUdldEphcGFuZXNlUHJlZmVyZW5jZShDRlhfQnl0ZVN0cmluZyYgZmFjZSwgaW50IHdlaWdodCwgaW50IHBpY3RoX2ZhbWlseSk7DQotICAgIENGWF9CeXRlU3RyaW5nCQlGaW5kRm9udChjb25zdCBDRlhfQnl0ZVN0cmluZyYgbmFtZSk7DQotICAgIEhEQwkJCQkJbV9oREM7DQotICAgIENGWF9Gb250TWFwcGVyKgkJbV9wTWFwcGVyOw0KLSAgICBDRlhfQnl0ZVN0cmluZwkJbV9MYXN0RmFtaWx5Ow0KLSAgICBDRlhfQnl0ZVN0cmluZwkJbV9LYWlUaSwgbV9GYW5nU29uZzsNCi19Ow0KLUNXaW4zMkZvbnRJbmZvOjpDV2luMzJGb250SW5mbygpDQotew0KLSAgICBtX2hEQyA9IENyZWF0ZUNvbXBhdGlibGVEQyhOVUxMKTsNCi19DQotQ1dpbjMyRm9udEluZm86On5DV2luMzJGb250SW5mbygpDQotew0KLSAgICBtX3BNYXBwZXIgPSBOVUxMOw0KLX0NCi12b2lkIENXaW4zMkZvbnRJbmZvOjpSZWxlYXNlKCkNCi17DQotICAgIERlbGV0ZURDKG1faERDKTsNCi0gICAgZGVsZXRlIHRoaXM7DQotfQ0KLSNkZWZpbmUgVFRfTUFLRV9UQUcoeDEsIHgyLCB4MywgeDQpICgoKEZYX0RXT1JEKXgxPDwyNCl8KChGWF9EV09SRCl4Mjw8MTYpfCgoRlhfRFdPUkQpeDM8PDgpfChGWF9EV09SRCl4NCkNCi1GWF9CT09MIENXaW4zMkZvbnRJbmZvOjpJc09wZW5UeXBlRnJvbURpdihjb25zdCBMT0dGT05UQSAqcGxmKQ0KLXsNCi0gICAgSEZPTlQgaEZvbnQgPSBDcmVhdGVGb250SW5kaXJlY3RBKHBsZik7DQotICAgIEZYX0JPT0wgcmV0ID0gRkFMU0U7DQotICAgIEZYX0RXT1JEIGZvbnRfc2l6ZSAgPSBHZXRGb250RGF0YShoRm9udCwgMCwgTlVMTCwgMCk7DQotICAgIGlmIChmb250X3NpemUgIT0gR0RJX0VSUk9SICYmIGZvbnRfc2l6ZSA+PSBzaXplb2YoRlhfRFdPUkQpKSB7DQotICAgICAgICBGWF9EV09SRCBsVmVyc2lvbiA9IDA7DQotICAgICAgICBHZXRGb250RGF0YShoRm9udCwgMCwgKEZYX0JZVEUqKSgmbFZlcnNpb24pLCBzaXplb2YoRlhfRFdPUkQpKTsNCi0gICAgICAgIGxWZXJzaW9uID0gKCgoRlhfRFdPUkQpKEZYX0JZVEUpKGxWZXJzaW9uKSkgPDwgMjQpIHwgKChGWF9EV09SRCkoKEZYX0JZVEUpKGxWZXJzaW9uID4+IDgpKSkgPDwgMTYgfA0KLSAgICAgICAgICAgICAgICAgICAoKEZYX0RXT1JEKSgoRlhfQllURSkobFZlcnNpb24gPj4gMTYpKSkgPDwgOCB8ICgoRlhfQllURSkobFZlcnNpb24gPj4gMjQpKTsNCi0gICAgICAgIGlmIChsVmVyc2lvbiA9PSBUVF9NQUtFX1RBRygnTycsICdUJywgJ1QnLCAnTycpIHx8DQotICAgICAgICAgICAgICAgIGxWZXJzaW9uID09IDB4MDAwMTAwMDAgfHwNCi0gICAgICAgICAgICAgICAgbFZlcnNpb24gPT0gVFRfTUFLRV9UQUcoJ3QnLCAndCcsICdjJywgJ2YnKSB8fA0KLSAgICAgICAgICAgICAgICBsVmVyc2lvbiA9PSBUVF9NQUtFX1RBRygndCcsICdyJywgJ3UnLCAnZScpIHx8DQotICAgICAgICAgICAgICAgIGxWZXJzaW9uID09IDB4MDAwMjAwMDApIHsNCi0gICAgICAgICAgICByZXQgPSBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIERlbGV0ZUZvbnQoaEZvbnQpOw0KLSAgICByZXR1cm4gcmV0Ow0KLX0NCi1GWF9CT09MIENXaW4zMkZvbnRJbmZvOjpJc1N1cHBvcnRGb250Rm9ybURpdihjb25zdCBMT0dGT05UQSogcGxmKQ0KLXsNCi0gICAgSEZPTlQgaEZvbnQgPSBDcmVhdGVGb250SW5kaXJlY3RBKHBsZik7DQotICAgIEZYX0JPT0wgcmV0ID0gRkFMU0U7DQotICAgIEZYX0RXT1JEIGZvbnRfc2l6ZSAgPSBHZXRGb250RGF0YShoRm9udCwgMCwgTlVMTCwgMCk7DQotICAgIGlmIChmb250X3NpemUgIT0gR0RJX0VSUk9SICYmIGZvbnRfc2l6ZSA+PSBzaXplb2YoRlhfRFdPUkQpKSB7DQotICAgICAgICBGWF9EV09SRCBsVmVyc2lvbiA9IDA7DQotICAgICAgICBHZXRGb250RGF0YShoRm9udCwgMCwgKEZYX0JZVEUqKSgmbFZlcnNpb24pLCBzaXplb2YoRlhfRFdPUkQpKTsNCi0gICAgICAgIGxWZXJzaW9uID0gKCgoRlhfRFdPUkQpKEZYX0JZVEUpKGxWZXJzaW9uKSkgPDwgMjQpIHwgKChGWF9EV09SRCkoKEZYX0JZVEUpKGxWZXJzaW9uID4+IDgpKSkgPDwgMTYgfA0KLSAgICAgICAgICAgICAgICAgICAoKEZYX0RXT1JEKSgoRlhfQllURSkobFZlcnNpb24gPj4gMTYpKSkgPDwgOCB8ICgoRlhfQllURSkobFZlcnNpb24gPj4gMjQpKTsNCi0gICAgICAgIGlmIChsVmVyc2lvbiA9PSBUVF9NQUtFX1RBRygnTycsICdUJywgJ1QnLCAnTycpIHx8DQotICAgICAgICAgICAgICAgIGxWZXJzaW9uID09IDB4MDAwMTAwMDAgfHwNCi0gICAgICAgICAgICAgICAgbFZlcnNpb24gPT0gVFRfTUFLRV9UQUcoJ3QnLCAndCcsICdjJywgJ2YnKSB8fA0KLSAgICAgICAgICAgICAgICBsVmVyc2lvbiA9PSBUVF9NQUtFX1RBRygndCcsICdyJywgJ3UnLCAnZScpIHx8DQotICAgICAgICAgICAgICAgIGxWZXJzaW9uID09IDB4MDAwMjAwMDApIHsNCi0gICAgICAgICAgICByZXQgPSBUUlVFOw0KLSAgICAgICAgfSBlbHNlIGlmICgobFZlcnNpb24gJiAweEZGRkYwMDAwKSA9PSBUVF9NQUtFX1RBRygweDgwLCAweDAxLCAweDAwLCAweDAwKSB8fA0KLSAgICAgICAgICAgICAgICAgICAobFZlcnNpb24gJiAweEZGRkYwMDAwKSA9PSBUVF9NQUtFX1RBRygnJScsICchJywgMCwgMCkpIHsNCi0gICAgICAgICAgICByZXQgPSBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIERlbGV0ZUZvbnQoaEZvbnQpOw0KLSAgICByZXR1cm4gcmV0Ow0KLX0NCi12b2lkIENXaW4zMkZvbnRJbmZvOjpBZGRJbnN0YWxsZWRGb250KGNvbnN0IExPR0ZPTlRBICpwbGYsIEZYX0RXT1JEIEZvbnRUeXBlKQ0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgbmFtZShwbGYtPmxmRmFjZU5hbWUsIC0xKTsNCi0gICAgaWYgKG5hbWVbMF0gPT0gJ0AnKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKG5hbWUgPT0gbV9MYXN0RmFtaWx5KSB7DQotICAgICAgICBtX3BNYXBwZXItPkFkZEluc3RhbGxlZEZvbnQobmFtZSwgcGxmLT5sZkNoYXJTZXQpOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmICghKEZvbnRUeXBlICYgVFJVRVRZUEVfRk9OVFRZUEUpICYmICEoRm9udFR5cGUgJiBERVZJQ0VfRk9OVFRZUEUpKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKCEoRm9udFR5cGUgJiBUUlVFVFlQRV9GT05UVFlQRSkpIHsNCi0gICAgICAgIGlmICghSXNTdXBwb3J0Rm9udEZvcm1EaXYocGxmKSkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBtX3BNYXBwZXItPkFkZEluc3RhbGxlZEZvbnQobmFtZSwgcGxmLT5sZkNoYXJTZXQpOw0KLSAgICBtX0xhc3RGYW1pbHkgPSBuYW1lOw0KLX0NCi1zdGF0aWMgaW50IENBTExCQUNLIEZvbnRFbnVtUHJvYygNCi0gICAgY29uc3QgTE9HRk9OVEEgKnBsZiwNCi0gICAgY29uc3QgVEVYVE1FVFJJQ0EgKmxwbnRtZSwNCi0gICAgRlhfRFdPUkQgRm9udFR5cGUsDQotICAgIExQQVJBTSBsUGFyYW0NCi0pDQotew0KLSAgICBDV2luMzJGb250SW5mbyogcEZvbnRJbmZvID0gKENXaW4zMkZvbnRJbmZvKilsUGFyYW07DQotICAgIGlmIChwRm9udEluZm8tPm1fcE1hcHBlci0+R2V0Rm9udEVudW1lcmF0b3IoKSkgew0KLSAgICAgICAgcEZvbnRJbmZvLT5tX3BNYXBwZXItPkdldEZvbnRFbnVtZXJhdG9yKCktPkhpdEZvbnQoKTsNCi0gICAgfQ0KLSAgICBwRm9udEluZm8tPkFkZEluc3RhbGxlZEZvbnQocGxmLCBGb250VHlwZSk7DQotICAgIHJldHVybiAxOw0KLX0NCi1GWF9CT09MIENXaW4zMkZvbnRJbmZvOjpFbnVtRm9udExpc3QoQ0ZYX0ZvbnRNYXBwZXIqIHBNYXBwZXIpDQotew0KLSAgICBtX3BNYXBwZXIgPSBwTWFwcGVyOw0KLSAgICBMT0dGT05UQSBsZjsNCi0gICAgRlhTWVNfbWVtc2V0MzIoJmxmLCAwLCBzaXplb2YoTE9HRk9OVEEpKTsNCi0gICAgbGYubGZDaGFyU2V0ID0gREVGQVVMVF9DSEFSU0VUOw0KLSAgICBsZi5sZkZhY2VOYW1lWzBdID0gMDsNCi0gICAgbGYubGZQaXRjaEFuZEZhbWlseSA9IDA7DQotICAgIEVudW1Gb250RmFtaWxpZXNFeEEobV9oREMsICZsZiwgKEZPTlRFTlVNUFJPQ0EpRm9udEVudW1Qcm9jLCAoRlhfVUlOVFBUUil0aGlzLCAwKTsNCi0gICAgaWYgKHBNYXBwZXItPkdldEZvbnRFbnVtZXJhdG9yKCkpIHsNCi0gICAgICAgIHBNYXBwZXItPkdldEZvbnRFbnVtZXJhdG9yKCktPkZpbmlzaCgpOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1zdGF0aWMgY29uc3Qgc3RydWN0IHsNCi0gICAgRlhfTFBDU1RSCW1fcEZhY2VOYW1lOw0KLSAgICBGWF9MUENTVFIJbV9wVmFyaWFudE5hbWU7DQotfQ0KLVZhcmlhbnROYW1lc1tdID0gew0KLSAgICB7IkRGS2FpLVNCIiwgIlx4MTlceDZBXHg3N1x4NjlceEQ0XHg5QSJ9LA0KLX07DQotc3RhdGljIGNvbnN0IHN0cnVjdCB7DQotICAgIEZYX0xQQ1NUUgltX3BOYW1lOw0KLSAgICBGWF9MUENTVFIJbV9wV2luTmFtZTsNCi0gICAgRlhfQk9PTAkJbV9iQm9sZDsNCi0gICAgRlhfQk9PTAkJbV9iSXRhbGljOw0KLX0NCi1CYXNlMTRTdWJzdHNbXSA9IHsNCi0gICAgeyJDb3VyaWVyIiwgIkNvdXJpZXIgTmV3IiwgRkFMU0UsIEZBTFNFfSwNCi0gICAgeyJDb3VyaWVyLUJvbGQiLCAiQ291cmllciBOZXciLCBUUlVFLCBGQUxTRX0sDQotICAgIHsiQ291cmllci1Cb2xkT2JsaXF1ZSIsICJDb3VyaWVyIE5ldyIsIFRSVUUsIFRSVUV9LA0KLSAgICB7IkNvdXJpZXItT2JsaXF1ZSIsICJDb3VyaWVyIE5ldyIsIEZBTFNFLCBUUlVFfSwNCi0gICAgeyJIZWx2ZXRpY2EiLCAiQXJpYWwiLCBGQUxTRSwgRkFMU0V9LA0KLSAgICB7IkhlbHZldGljYS1Cb2xkIiwgIkFyaWFsIiwgVFJVRSwgRkFMU0V9LA0KLSAgICB7IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsICJBcmlhbCIsIFRSVUUsIFRSVUV9LA0KLSAgICB7IkhlbHZldGljYS1PYmxpcXVlIiwgIkFyaWFsIiwgRkFMU0UsIFRSVUV9LA0KLSAgICB7IlRpbWVzLVJvbWFuIiwgIlRpbWVzIE5ldyBSb21hbiIsIEZBTFNFLCBGQUxTRX0sDQotICAgIHsiVGltZXMtQm9sZCIsICJUaW1lcyBOZXcgUm9tYW4iLCBUUlVFLCBGQUxTRX0sDQotICAgIHsiVGltZXMtQm9sZEl0YWxpYyIsICJUaW1lcyBOZXcgUm9tYW4iLCBUUlVFLCBUUlVFfSwNCi0gICAgeyJUaW1lcy1JdGFsaWMiLCAiVGltZXMgTmV3IFJvbWFuIiwgRkFMU0UsIFRSVUV9LA0KLX07DQotQ0ZYX0J5dGVTdHJpbmcgQ1dpbjMyRm9udEluZm86OkZpbmRGb250KGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lKQ0KLXsNCi0gICAgaWYgKG1fcE1hcHBlciA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gbmFtZTsNCi0gICAgfQ0KLSAgICBpbnQgbkZvbnRzID0gbV9wTWFwcGVyLT5tX0luc3RhbGxlZFRURm9udHMuR2V0U2l6ZSgpOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5Gb250czsgaSArKykgew0KLSAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgdGhpc25hbWUgPSBtX3BNYXBwZXItPm1fSW5zdGFsbGVkVFRGb250c1tpXTsNCi0gICAgICAgIGlmICh0aGlzbmFtZVswXSA9PSAnICcpIHsNCi0gICAgICAgICAgICBpZiAodGhpc25hbWUuTWlkKDEsIG5hbWUuR2V0TGVuZ3RoKCkpID09IG5hbWUpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fcE1hcHBlci0+bV9JbnN0YWxsZWRUVEZvbnRzW2kgKyAxXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2UgaWYgKHRoaXNuYW1lLkxlZnQobmFtZS5HZXRMZW5ndGgoKSkgPT0gbmFtZSkgew0KLSAgICAgICAgICAgIHJldHVybiBtX3BNYXBwZXItPm1fSW5zdGFsbGVkVFRGb250c1tpXTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsNCi19DQotc3RydWN0IF9Gb250TmFtZU1hcCB7DQotICAgIEZYX0xQQ1NUUgltX3BTdWJGb250TmFtZTsNCi0gICAgRlhfTFBDU1RSCW1fcFNyY0ZvbnROYW1lOw0KLX07DQotY29uc3QgX0ZvbnROYW1lTWFwIGdfSnBGb250TmFtZU1hcFtdID0gew0KLSAgICB7Ik1TIE1pbmNobyIsICJIZWlzZWltaW4tVzMifSwNCi0gICAgeyJNUyBHb3RoaWMiLCAiSnVuMTAxLUxpZ2h0In0sDQotfTsNCi1jb25zdCBfRm9udE5hbWVNYXAgZ19HYkZvbnROYW1lTWFwWzFdOw0KLWV4dGVybiAiQyIgew0KLSAgICBzdGF0aWMgaW50IGNvbXBhcmVTdHJpbmcoY29uc3Qgdm9pZCoga2V5LCBjb25zdCB2b2lkKiBlbGVtZW50KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gRlhTWVNfc3RyaWNtcCgoRlhfTFBDU1RSKWtleSwgKChfRm9udE5hbWVNYXAqKWVsZW1lbnQpLT5tX3BTcmNGb250TmFtZSk7DQotICAgIH0NCi19DQotRlhfQk9PTCBfR2V0U3ViRm9udE5hbWUoQ0ZYX0J5dGVTdHJpbmcmIG5hbWUsIGludCBsYW5nKQ0KLXsNCi0gICAgaW50IHNpemUgPSBzaXplb2YgZ19KcEZvbnROYW1lTWFwOw0KLSAgICB2b2lkKiBwRm9udG5hbWVNYXAgPSAodm9pZCopZ19KcEZvbnROYW1lTWFwOw0KLSAgICBpZiAobGFuZyA9PSAxKSB7DQotICAgICAgICBzaXplID0gc2l6ZW9mIGdfR2JGb250TmFtZU1hcDsNCi0gICAgICAgIHBGb250bmFtZU1hcCA9ICh2b2lkKilnX0diRm9udE5hbWVNYXA7DQotICAgIH0gZWxzZSBpZiAobGFuZyA9PSAyKSB7DQotICAgICAgICBzaXplID0gMDsNCi0gICAgfQ0KLSAgICBfRm9udE5hbWVNYXAqIGZvdW5kID0gKF9Gb250TmFtZU1hcCopRlhTWVNfYnNlYXJjaCgoRlhfTFBDU1RSKW5hbWUsIHBGb250bmFtZU1hcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgLyBzaXplb2YgKF9Gb250TmFtZU1hcCksIHNpemVvZiAoX0ZvbnROYW1lTWFwKSwgY29tcGFyZVN0cmluZyk7DQotICAgIGlmIChmb3VuZCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbmFtZSA9IGZvdW5kLT5tX3BTdWJGb250TmFtZTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLXZvaWQgQ1dpbjMyRm9udEluZm86OkdldEdCUHJlZmVyZW5jZShDRlhfQnl0ZVN0cmluZyYgZmFjZSwgaW50IHdlaWdodCwgaW50IHBpY3RoX2ZhbWlseSkNCi17DQotICAgIGlmIChmYWNlLkZpbmQoIkthaVRpIikgPj0gMCB8fCBmYWNlLkZpbmQoIlx4YmZceGFjIikgPj0gMCkgew0KLSAgICAgICAgaWYgKG1fS2FpVGkuSXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgbV9LYWlUaSA9IEZpbmRGb250KCJLYWlUaSIpOw0KLSAgICAgICAgICAgIGlmIChtX0thaVRpLklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgICAgICBtX0thaVRpID0gIlNpbVN1biI7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgZmFjZSA9IG1fS2FpVGk7DQotICAgIH0gZWxzZSBpZiAoZmFjZS5GaW5kKCJGYW5nU29uZyIpID49IDAgfHwgZmFjZS5GaW5kKCJceGI3XHhjMlx4Y2JceGNlIikgPj0gMCkgew0KLSAgICAgICAgaWYgKG1fRmFuZ1NvbmcuSXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgbV9GYW5nU29uZyA9IEZpbmRGb250KCJGYW5nU29uZyIpOw0KLSAgICAgICAgICAgIGlmIChtX0ZhbmdTb25nLklzRW1wdHkoKSkgew0KLSAgICAgICAgICAgICAgICBtX0ZhbmdTb25nID0gIlNpbVN1biI7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgZmFjZSA9IG1fRmFuZ1Nvbmc7DQotICAgIH0gZWxzZSBpZiAoZmFjZS5GaW5kKCJTaW1TdW4iKSA+PSAwIHx8IGZhY2UuRmluZCgiXHhjYlx4Y2UiKSA+PSAwKSB7DQotICAgICAgICBmYWNlID0gIlNpbVN1biI7DQotICAgIH0gZWxzZSBpZiAoZmFjZS5GaW5kKCJTaW1IZWkiKSA+PSAwIHx8IGZhY2UuRmluZCgiXHhiYVx4ZGEiKSA+PSAwKSB7DQotICAgICAgICBmYWNlID0gIlNpbUhlaSI7DQotICAgIH0gZWxzZSBpZiAoIShwaWN0aF9mYW1pbHkgJiBGRl9ST01BTikgJiYgd2VpZ2h0ID4gNTUwKSB7DQotICAgICAgICBmYWNlID0gIlNpbUhlaSI7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBmYWNlID0gIlNpbVN1biI7DQotICAgIH0NCi19DQotdm9pZCBDV2luMzJGb250SW5mbzo6R2V0SmFwYW5lc2VQcmVmZXJlbmNlKENGWF9CeXRlU3RyaW5nJiBmYWNlLCBpbnQgd2VpZ2h0LCBpbnQgcGljdGhfZmFtaWx5KQ0KLXsNCi0gICAgaWYgKGZhY2UuRmluZCgiR290aGljIikgPj0gMCB8fCBmYWNlLkZpbmQoIlx4ODNceDUzXHg4M1x4NTZceDgzXHg2Mlx4ODNceDRlIikgPj0gMCkgew0KLSAgICAgICAgaWYgKGZhY2UuRmluZCgiUEdvdGhpYyIpID49IDAgfHwgZmFjZS5GaW5kKCJceDgyXHg2Zlx4ODNceDUzXHg4M1x4NTZceDgzXHg2Mlx4ODNceDRlIikgPj0gMCkgew0KLSAgICAgICAgICAgIGZhY2UgPSAiTVMgUEdvdGhpYyI7DQotICAgICAgICB9IGVsc2UgaWYgKGZhY2UuRmluZCgiVUkgR290aGljIikgPj0gMCkgew0KLSAgICAgICAgICAgIGZhY2UgPSAiTVMgVUkgR290aGljIjsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYgKGZhY2UuRmluZCgiSEdTR290aGljTSIpID49IDAgfHwgZmFjZS5GaW5kKCJIR01hcnVHb3RoaWNNUFJPIikgPj0gMCkgew0KLSAgICAgICAgICAgICAgICBmYWNlID0gIk1TIFBHb3RoaWMiOw0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGZhY2UgPSAiTVMgR290aGljIjsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICByZXR1cm47DQotICAgIH0gZWxzZSBpZiAoZmFjZS5GaW5kKCJNaW5jaG8iKSA+PSAwIHx8IGZhY2UuRmluZCgiXHg5Nlx4YmVceDkyXHhhOSIpID49IDApIHsNCi0gICAgICAgIGlmIChmYWNlLkZpbmQoIlBNaW5jaG8iKSA+PSAwIHx8IGZhY2UuRmluZCgiXHg4Mlx4NmZceDk2XHhiZVx4OTJceGE5IikgPj0gMCkgew0KLSAgICAgICAgICAgIGZhY2UgPSAiTVMgUE1pbmNobyI7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGZhY2UgPSAiTVMgTWluY2hvIjsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBpZiAoX0dldFN1YkZvbnROYW1lKGZhY2UsIDApKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKCEocGljdGhfZmFtaWx5ICYgRkZfUk9NQU4pICYmIHdlaWdodCA+IDQwMCkgew0KLSAgICAgICAgZmFjZSA9ICJNUyBQR290aGljIjsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGZhY2UgPSAiTVMgUE1pbmNobyI7DQotICAgIH0NCi19DQotdm9pZCogQ1dpbjMyRm9udEluZm86Ok1hcEZvbnQoaW50IHdlaWdodCwgRlhfQk9PTCBiSXRhbGljLCBpbnQgY2hhcnNldCwgaW50IHBpdGNoX2ZhbWlseSwgRlhfTFBDU1RSIGNzdHJfZmFjZSwgRlhfQk9PTCYgYkV4YWN0KQ0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgZmFjZSA9IGNzdHJfZmFjZTsNCi0gICAgaW50IGlCYXNlRm9udDsNCi0gICAgZm9yIChpQmFzZUZvbnQgPSAwOyBpQmFzZUZvbnQgPCAxMjsgaUJhc2VGb250ICsrKQ0KLSAgICAgICAgaWYgKGZhY2UgPT0gQ0ZYX0J5dGVTdHJpbmdDKEJhc2UxNFN1YnN0c1tpQmFzZUZvbnRdLm1fcE5hbWUpKSB7DQotICAgICAgICAgICAgZmFjZSA9IEJhc2UxNFN1YnN0c1tpQmFzZUZvbnRdLm1fcFdpbk5hbWU7DQotICAgICAgICAgICAgd2VpZ2h0ID0gQmFzZTE0U3Vic3RzW2lCYXNlRm9udF0ubV9iQm9sZCA/IEZXX0JPTEQgOiBGV19OT1JNQUw7DQotICAgICAgICAgICAgYkl0YWxpYyA9IEJhc2UxNFN1YnN0c1tpQmFzZUZvbnRdLm1fYkl0YWxpYzsNCi0gICAgICAgICAgICBiRXhhY3QgPSBUUlVFOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgfQ0KLSAgICBpZiAoY2hhcnNldCA9PSBBTlNJX0NIQVJTRVQgfHwgY2hhcnNldCA9PSBTWU1CT0xfQ0hBUlNFVCkgew0KLSAgICAgICAgY2hhcnNldCA9IERFRkFVTFRfQ0hBUlNFVDsNCi0gICAgfQ0KLSAgICBpbnQgc3Vic3RfcGl0Y2hfZmFtaWx5ID0gcGl0Y2hfZmFtaWx5Ow0KLSAgICBzd2l0Y2ggKGNoYXJzZXQpIHsNCi0gICAgICAgIGNhc2UgU0hJRlRKSVNfQ0hBUlNFVDoNCi0gICAgICAgICAgICBzdWJzdF9waXRjaF9mYW1pbHkgPSBGRl9ST01BTjsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgQ0hJTkVTRUJJRzVfQ0hBUlNFVDoNCi0gICAgICAgIGNhc2UgSEFOR1VMX0NIQVJTRVQ6DQotICAgICAgICBjYXNlIEdCMjMxMl9DSEFSU0VUOg0KLSAgICAgICAgICAgIHN1YnN0X3BpdGNoX2ZhbWlseSA9IDA7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgIH0NCi0gICAgSEZPTlQgaEZvbnQgPSA6OkNyZWF0ZUZvbnRBKC0xMCwgMCwgMCwgMCwgd2VpZ2h0LCBiSXRhbGljLCAwLCAwLCBjaGFyc2V0LCBPVVRfVFRfT05MWV9QUkVDSVMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBzdWJzdF9waXRjaF9mYW1pbHksIGZhY2UpOw0KLSAgICBjaGFyIGZhY2VidWZbMTAwXTsNCi0gICAgSEZPTlQgaE9sZEZvbnQgPSAoSEZPTlQpOjpTZWxlY3RPYmplY3QobV9oREMsIGhGb250KTsNCi0gICAgaW50IHJldCA9IDo6R2V0VGV4dEZhY2VBKG1faERDLCAxMDAsIGZhY2VidWYpOw0KLSAgICA6OlNlbGVjdE9iamVjdChtX2hEQywgaE9sZEZvbnQpOw0KLSAgICBpZiAoZmFjZS5FcXVhbE5vQ2FzZShmYWNlYnVmKSkgew0KLSAgICAgICAgcmV0dXJuIGhGb250Ow0KLSAgICB9DQotICAgIGludCBpQ291bnQgPSBzaXplb2YoVmFyaWFudE5hbWVzKSAvIHNpemVvZihWYXJpYW50TmFtZXNbMF0pOw0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGlDb3VudDsgKytpKSB7DQotICAgICAgICBpZiAoZmFjZSA9PSBWYXJpYW50TmFtZXNbaV0ubV9wRmFjZU5hbWUpIHsNCi0gICAgICAgICAgICBDRlhfV2lkZVN0cmluZyB3c0ZhY2UgPSBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKGZhY2VidWYpOw0KLSAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIHdzTmFtZSA9IENGWF9XaWRlU3RyaW5nOjpGcm9tVVRGMTZMRSgoY29uc3QgdW5zaWduZWQgc2hvcnQqKVZhcmlhbnROYW1lc1tpXS5tX3BWYXJpYW50TmFtZSk7DQotICAgICAgICAgICAgaWYgKHdzRmFjZSA9PSB3c05hbWUpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIGhGb250Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICA6OkRlbGV0ZU9iamVjdChoRm9udCk7DQotICAgIGlmIChjaGFyc2V0ID09IERFRkFVTFRfQ0hBUlNFVCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgc3dpdGNoIChjaGFyc2V0KSB7DQotICAgICAgICBjYXNlIFNISUZUSklTX0NIQVJTRVQ6DQotICAgICAgICAgICAgR2V0SmFwYW5lc2VQcmVmZXJlbmNlKGZhY2UsIHdlaWdodCwgcGl0Y2hfZmFtaWx5KTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgR0IyMzEyX0NIQVJTRVQ6DQotICAgICAgICAgICAgR2V0R0JQcmVmZXJlbmNlKGZhY2UsIHdlaWdodCwgcGl0Y2hfZmFtaWx5KTsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgSEFOR1VMX0NIQVJTRVQ6DQotICAgICAgICAgICAgZmFjZSA9ICJHdWxpbSI7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIENISU5FU0VCSUc1X0NIQVJTRVQ6DQotICAgICAgICAgICAgaWYgKGZhY2UuRmluZCgiTVN1bmciKSA+PSAwKSB7DQotICAgICAgICAgICAgICAgIGZhY2UgPSAiTWluZ0xpVSI7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgZmFjZSA9ICJQTWluZ0xpVSI7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICB9DQotICAgIGhGb250ID0gOjpDcmVhdGVGb250QSgtMTAsIDAsIDAsIDAsIHdlaWdodCwgYkl0YWxpYywgMCwgMCwgY2hhcnNldCwgT1VUX1RUX09OTFlfUFJFQ0lTLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgc3Vic3RfcGl0Y2hfZmFtaWx5LCBmYWNlKTsNCi0gICAgcmV0dXJuIGhGb250Ow0KLX0NCi12b2lkIENXaW4zMkZvbnRJbmZvOjpEZWxldGVGb250KHZvaWQqIGhGb250KQ0KLXsNCi0gICAgOjpEZWxldGVPYmplY3QoaEZvbnQpOw0KLX0NCi1GWF9EV09SRCBDV2luMzJGb250SW5mbzo6R2V0Rm9udERhdGEodm9pZCogaEZvbnQsIEZYX0RXT1JEIHRhYmxlLCBGWF9MUEJZVEUgYnVmZmVyLCBGWF9EV09SRCBzaXplKQ0KLXsNCi0gICAgSEZPTlQgaE9sZEZvbnQgPSAoSEZPTlQpOjpTZWxlY3RPYmplY3QobV9oREMsIChIRk9OVCloRm9udCk7DQotICAgIHRhYmxlID0gRlhEV09SRF9GUk9NX01TQkZJUlNUKHRhYmxlKTsNCi0gICAgc2l6ZSA9IDo6R2V0Rm9udERhdGEobV9oREMsIHRhYmxlLCAwLCBidWZmZXIsIHNpemUpOw0KLSAgICA6OlNlbGVjdE9iamVjdChtX2hEQywgaE9sZEZvbnQpOw0KLSAgICBpZiAoc2l6ZSA9PSBHRElfRVJST1IpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIHJldHVybiBzaXplOw0KLX0NCi1GWF9CT09MIENXaW4zMkZvbnRJbmZvOjpHZXRGYWNlTmFtZSh2b2lkKiBoRm9udCwgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUpDQotew0KLSAgICBjaGFyIGZhY2VidWZbMTAwXTsNCi0gICAgSEZPTlQgaE9sZEZvbnQgPSAoSEZPTlQpOjpTZWxlY3RPYmplY3QobV9oREMsIChIRk9OVCloRm9udCk7DQotICAgIGludCByZXQgPSA6OkdldFRleHRGYWNlQShtX2hEQywgMTAwLCBmYWNlYnVmKTsNCi0gICAgOjpTZWxlY3RPYmplY3QobV9oREMsIGhPbGRGb250KTsNCi0gICAgaWYgKHJldCA9PSAwKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgbmFtZSA9IGZhY2VidWY7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENXaW4zMkZvbnRJbmZvOjpHZXRGb250Q2hhcnNldCh2b2lkKiBoRm9udCwgaW50JiBjaGFyc2V0KQ0KLXsNCi0gICAgVEVYVE1FVFJJQyB0bTsNCi0gICAgSEZPTlQgaE9sZEZvbnQgPSAoSEZPTlQpOjpTZWxlY3RPYmplY3QobV9oREMsIChIRk9OVCloRm9udCk7DQotICAgIDo6R2V0VGV4dE1ldHJpY3MobV9oREMsICZ0bSk7DQotICAgIDo6U2VsZWN0T2JqZWN0KG1faERDLCBoT2xkRm9udCk7DQotICAgIGNoYXJzZXQgPSB0bS50bUNoYXJTZXQ7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi0jaWZuZGVmIF9GUERGQVBJX01JTklfDQotSUZYX1N5c3RlbUZvbnRJbmZvKiBJRlhfU3lzdGVtRm9udEluZm86OkNyZWF0ZURlZmF1bHQoKQ0KLXsNCi0gICAgcmV0dXJuIEZYX05FVyBDV2luMzJGb250SW5mbzsNCi19DQotI2VuZGlmDQotdm9pZCBDRlhfR0VNb2R1bGU6OkluaXRQbGF0Zm9ybSgpDQotew0KLSAgICBDV2luMzJQbGF0Zm9ybSogcFBsYXRmb3JtRGF0YSA9IEZYX05FVyBDV2luMzJQbGF0Zm9ybTsNCi0gICAgaWYgKCFwUGxhdGZvcm1EYXRhKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgT1NWRVJTSU9OSU5GTyB2ZXI7DQotICAgIHZlci5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKHZlcik7DQotICAgIEdldFZlcnNpb25FeCgmdmVyKTsNCi0gICAgcFBsYXRmb3JtRGF0YS0+bV9iSGFsZlRvbmUgPSB2ZXIuZHdNYWpvclZlcnNpb24gPj0gNTsNCi0gICAgcFBsYXRmb3JtRGF0YS0+bV9HZGlwbHVzRXh0LkxvYWQoKTsNCi0gICAgbV9wUGxhdGZvcm1EYXRhID0gcFBsYXRmb3JtRGF0YTsNCi0gICAgbV9wRm9udE1nci0+U2V0U3lzdGVtRm9udEluZm8oSUZYX1N5c3RlbUZvbnRJbmZvOjpDcmVhdGVEZWZhdWx0KCkpOw0KLX0NCi12b2lkIENGWF9HRU1vZHVsZTo6RGVzdHJveVBsYXRmb3JtKCkNCi17DQotICAgIGlmIChtX3BQbGF0Zm9ybURhdGEpIHsNCi0gICAgICAgIGRlbGV0ZSAoQ1dpbjMyUGxhdGZvcm0qKW1fcFBsYXRmb3JtRGF0YTsNCi0gICAgfQ0KLSAgICBtX3BQbGF0Zm9ybURhdGEgPSBOVUxMOw0KLX0NCi1DR2RpRGV2aWNlRHJpdmVyOjpDR2RpRGV2aWNlRHJpdmVyKEhEQyBoREMsIGludCBkZXZpY2VfY2xhc3MpDQotew0KLSAgICBtX2hEQyA9IGhEQzsNCi0gICAgbV9EZXZpY2VDbGFzcyA9IGRldmljZV9jbGFzczsNCi0gICAgQ1dpbjMyUGxhdGZvcm0qIHBQbGF0Zm9ybSA9IChDV2luMzJQbGF0Zm9ybSopQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCk7DQotICAgIFNldFN0cmV0Y2hCbHRNb2RlKGhEQywgcFBsYXRmb3JtLT5tX2JIYWxmVG9uZSA/IEhBTEZUT05FIDogQ09MT1JPTkNPTE9SKTsNCi0gICAgaWYgKEdldE9iamVjdFR5cGUobV9oREMpID09IE9CSl9NRU1EQykgew0KLSAgICAgICAgSEJJVE1BUCBoQml0bWFwID0gQ3JlYXRlQml0bWFwKDEsIDEsIDEsIDEsIE5VTEwpOw0KLSAgICAgICAgaEJpdG1hcCA9IChIQklUTUFQKVNlbGVjdE9iamVjdChtX2hEQywgaEJpdG1hcCk7DQotICAgICAgICBCSVRNQVAgYml0bWFwOw0KLSAgICAgICAgR2V0T2JqZWN0KGhCaXRtYXAsIHNpemVvZiBiaXRtYXAsICZiaXRtYXApOw0KLSAgICAgICAgbV9uQml0c1BlclBpeGVsID0gYml0bWFwLmJtQml0c1BpeGVsOw0KLSAgICAgICAgbV9XaWR0aCA9IGJpdG1hcC5ibVdpZHRoOw0KLSAgICAgICAgbV9IZWlnaHQgPSBhYnMoYml0bWFwLmJtSGVpZ2h0KTsNCi0gICAgICAgIGhCaXRtYXAgPSAoSEJJVE1BUClTZWxlY3RPYmplY3QobV9oREMsIGhCaXRtYXApOw0KLSAgICAgICAgRGVsZXRlT2JqZWN0KGhCaXRtYXApOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9uQml0c1BlclBpeGVsID0gOjpHZXREZXZpY2VDYXBzKG1faERDLCBCSVRTUElYRUwpOw0KLSAgICAgICAgbV9XaWR0aCA9IDo6R2V0RGV2aWNlQ2FwcyhtX2hEQywgSE9SWlJFUyk7DQotICAgICAgICBtX0hlaWdodCA9IDo6R2V0RGV2aWNlQ2FwcyhtX2hEQywgVkVSVFJFUyk7DQotICAgIH0NCi0gICAgaWYgKG1fRGV2aWNlQ2xhc3MgIT0gRlhEQ19ESVNQTEFZKSB7DQotICAgICAgICBtX1JlbmRlckNhcHMgPSBGWFJDX0JJVF9NQVNLOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgbV9SZW5kZXJDYXBzID0gRlhSQ19HRVRfQklUUyB8IEZYUkNfQklUX01BU0s7DQotICAgIH0NCi19DQotaW50IENHZGlEZXZpY2VEcml2ZXI6OkdldERldmljZUNhcHMoaW50IGNhcHNfaWQpDQotew0KLSAgICBzd2l0Y2ggKGNhcHNfaWQpIHsNCi0gICAgICAgIGNhc2UgRlhEQ19ERVZJQ0VfQ0xBU1M6DQotICAgICAgICAgICAgcmV0dXJuIG1fRGV2aWNlQ2xhc3M7DQotICAgICAgICBjYXNlIEZYRENfUElYRUxfV0lEVEg6DQotICAgICAgICAgICAgcmV0dXJuIG1fV2lkdGg7DQotICAgICAgICBjYXNlIEZYRENfUElYRUxfSEVJR0hUOg0KLSAgICAgICAgICAgIHJldHVybiBtX0hlaWdodDsNCi0gICAgICAgIGNhc2UgRlhEQ19CSVRTX1BJWEVMOg0KLSAgICAgICAgICAgIHJldHVybiBtX25CaXRzUGVyUGl4ZWw7DQotICAgICAgICBjYXNlIEZYRENfUkVOREVSX0NBUFM6DQotICAgICAgICAgICAgcmV0dXJuIG1fUmVuZGVyQ2FwczsNCi0gICAgfQ0KLSAgICByZXR1cm4gMDsNCi19DQotRlhfTFBWT0lEIENHZGlEZXZpY2VEcml2ZXI6OkdldENsaXBSZ24oKQ0KLXsNCi0gICAgSFJHTiBoQ2xpcFJnbiA9IENyZWF0ZVJlY3RSZ24oMCwgMCwgMSwgMSk7DQotICAgIGlmICg6OkdldENsaXBSZ24obV9oREMsIGhDbGlwUmduKSA9PSAwKSB7DQotICAgICAgICBEZWxldGVPYmplY3QoaENsaXBSZ24pOw0KLSAgICAgICAgaENsaXBSZ24gPSBOVUxMOw0KLSAgICB9DQotICAgIHJldHVybiAoRlhfTFBWT0lEKWhDbGlwUmduOw0KLX0NCi1GWF9CT09MIENHZGlEZXZpY2VEcml2ZXI6OkdESV9TZXRESUJpdHMoY29uc3QgQ0ZYX0RJQml0bWFwKiBwQml0bWFwMSwgY29uc3QgRlhfUkVDVCogcFNyY1JlY3QsIGludCBsZWZ0LCBpbnQgdG9wLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQ0KLXsNCi0gICAgaWYgKG1fRGV2aWNlQ2xhc3MgPT0gRlhEQ19QUklOVEVSKSB7DQotICAgICAgICBDRlhfRElCaXRtYXAqIHBCaXRtYXAgPSBwQml0bWFwMS0+RmxpcEltYWdlKEZBTFNFLCBUUlVFKTsNCi0gICAgICAgIGlmIChwQml0bWFwID09IE5VTEwpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBpZiAoKHBCaXRtYXAtPklzQ215a0ltYWdlKCkgfHwgcEljY1RyYW5zZm9ybSkgJiYNCi0gICAgICAgICAgICAgICAgIXBCaXRtYXAtPkNvbnZlcnRGb3JtYXQoRlhESUJfUmdiLCBwSWNjVHJhbnNmb3JtKSkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCB3aWR0aCA9IHBTcmNSZWN0LT5XaWR0aCgpLCBoZWlnaHQgPSBwU3JjUmVjdC0+SGVpZ2h0KCk7DQotICAgICAgICBpbnQgcGl0Y2ggPSBwQml0bWFwLT5HZXRQaXRjaCgpOw0KLSAgICAgICAgTFBCWVRFIHBCdWZmZXIgPSBwQml0bWFwLT5HZXRCdWZmZXIoKTsNCi0gICAgICAgIENGWF9CeXRlU3RyaW5nIGluZm8gPSBDRlhfV2luZG93c0RJQjo6R2V0Qml0bWFwSW5mbyhwQml0bWFwKTsNCi0gICAgICAgICgoQklUTUFQSU5GT0hFQURFUiopKEZYX0xQQ1NUUilpbmZvKS0+YmlIZWlnaHQgKj0gLTE7DQotICAgICAgICBGWF9SRUNUIGRzdF9yZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOw0KLSAgICAgICAgZHN0X3JlY3QuSW50ZXJzZWN0KDAsIDAsIHBCaXRtYXAtPkdldFdpZHRoKCksIHBCaXRtYXAtPkdldEhlaWdodCgpKTsNCi0gICAgICAgIGludCBkc3Rfd2lkdGggPSBkc3RfcmVjdC5XaWR0aCgpOw0KLSAgICAgICAgaW50IGRzdF9oZWlnaHQgPSBkc3RfcmVjdC5IZWlnaHQoKTsNCi0gICAgICAgIDo6U3RyZXRjaERJQml0cyhtX2hEQywgbGVmdCwgdG9wLCBkc3Rfd2lkdGgsIGRzdF9oZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgZHN0X3dpZHRoLCBkc3RfaGVpZ2h0LCBwQnVmZmVyLCAoQklUTUFQSU5GTyopKEZYX0xQQ1NUUilpbmZvLCBESUJfUkdCX0NPTE9SUywgU1JDQ09QWSk7DQotICAgICAgICBkZWxldGUgcEJpdG1hcDsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIENGWF9ESUJpdG1hcCogcEJpdG1hcCA9IChDRlhfRElCaXRtYXAqKXBCaXRtYXAxOw0KLSAgICAgICAgaWYgKChwQml0bWFwLT5Jc0NteWtJbWFnZSgpIHx8IHBJY2NUcmFuc2Zvcm0pICYmDQotICAgICAgICAgICAgICAgIChwQml0bWFwID0gcEJpdG1hcC0+Q2xvbmVDb252ZXJ0KEZYRElCX1JnYiwgTlVMTCwgcEljY1RyYW5zZm9ybSkpID09IE5VTEwpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBpbnQgd2lkdGggPSBwU3JjUmVjdC0+V2lkdGgoKSwgaGVpZ2h0ID0gcFNyY1JlY3QtPkhlaWdodCgpOw0KLSAgICAgICAgaW50IHBpdGNoID0gcEJpdG1hcC0+R2V0UGl0Y2goKTsNCi0gICAgICAgIExQQllURSBwQnVmZmVyID0gcEJpdG1hcC0+R2V0QnVmZmVyKCk7DQotICAgICAgICBDRlhfQnl0ZVN0cmluZyBpbmZvID0gQ0ZYX1dpbmRvd3NESUI6OkdldEJpdG1hcEluZm8ocEJpdG1hcCk7DQotICAgICAgICA6OlNldERJQml0c1RvRGV2aWNlKG1faERDLCBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQsIHBTcmNSZWN0LT5sZWZ0LCBwQml0bWFwLT5HZXRIZWlnaHQoKSAtIHBTcmNSZWN0LT5ib3R0b20sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHBCaXRtYXAtPkdldEhlaWdodCgpLCBwQnVmZmVyLCAoQklUTUFQSU5GTyopKEZYX0xQQ1NUUilpbmZvLCBESUJfUkdCX0NPTE9SUyk7DQotICAgICAgICBpZiAocEJpdG1hcCAhPSBwQml0bWFwMSkgew0KLSAgICAgICAgICAgIGRlbGV0ZSBwQml0bWFwOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENHZGlEZXZpY2VEcml2ZXI6OkdESV9TdHJldGNoRElCaXRzKGNvbnN0IENGWF9ESUJpdG1hcCogcEJpdG1hcDEsIGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwNCi0gICAgICAgIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsIEZYX0RXT1JEIGZsYWdzLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQ0KLXsNCi0gICAgQ0ZYX0RJQml0bWFwKiBwQml0bWFwID0gKENGWF9ESUJpdG1hcCopcEJpdG1hcDE7DQotICAgIGlmIChwQml0bWFwID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAoKHBCaXRtYXAtPklzQ215a0ltYWdlKCkgfHwgcEljY1RyYW5zZm9ybSkgJiYNCi0gICAgICAgICAgICAhcEJpdG1hcC0+Q29udmVydEZvcm1hdChGWERJQl9SZ2IsIHBJY2NUcmFuc2Zvcm0pKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgaW5mbyA9IENGWF9XaW5kb3dzRElCOjpHZXRCaXRtYXBJbmZvKHBCaXRtYXApOw0KLSAgICBpZiAoYWJzKGRlc3Rfd2lkdGgpICogYWJzKGRlc3RfaGVpZ2h0KSA8IHBCaXRtYXAxLT5HZXRXaWR0aCgpICogcEJpdG1hcDEtPkdldEhlaWdodCgpICogNCB8fA0KLSAgICAgICAgICAgIChmbGFncyAmIEZYRElCX0lOVEVSUE9MKSB8fCAoZmxhZ3MgJiBGWERJQl9CSUNVQklDX0lOVEVSUE9MKSkgew0KLSAgICAgICAgU2V0U3RyZXRjaEJsdE1vZGUobV9oREMsIEhBTEZUT05FKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIFNldFN0cmV0Y2hCbHRNb2RlKG1faERDLCBDT0xPUk9OQ09MT1IpOw0KLSAgICB9DQotICAgIENGWF9ESUJpdG1hcCogcFRvU3RyZWNoQml0bWFwID0gcEJpdG1hcDsNCi0gICAgYm9vbCBkZWwgPSBmYWxzZTsNCi0gICAgaWYgKG1fRGV2aWNlQ2xhc3MgPT0gRlhEQ19QUklOVEVSICYmIChwQml0bWFwLT5HZXRXaWR0aCgpICogcEJpdG1hcC0+R2V0SGVpZ2h0KCkgPiBhYnMoZGVzdF93aWR0aCkgKiBhYnMoZGVzdF9oZWlnaHQpKSkgew0KLSAgICAgICAgcFRvU3RyZWNoQml0bWFwID0gcEJpdG1hcC0+U3RyZXRjaFRvKGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0KTsNCi0gICAgICAgIGRlbCA9IHRydWU7DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgdG9TdHJlY2hCaXRtYXBJbmZvID0gQ0ZYX1dpbmRvd3NESUI6OkdldEJpdG1hcEluZm8ocFRvU3RyZWNoQml0bWFwKTsNCi0gICAgOjpTdHJldGNoRElCaXRzKG1faERDLCBkZXN0X2xlZnQsIGRlc3RfdG9wLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgIDAsIDAsIHBUb1N0cmVjaEJpdG1hcC0+R2V0V2lkdGgoKSwgcFRvU3RyZWNoQml0bWFwLT5HZXRIZWlnaHQoKSwgcFRvU3RyZWNoQml0bWFwLT5HZXRCdWZmZXIoKSwNCi0gICAgICAgICAgICAgICAgICAgIChCSVRNQVBJTkZPKikoRlhfTFBDU1RSKXRvU3RyZWNoQml0bWFwSW5mbywgRElCX1JHQl9DT0xPUlMsIFNSQ0NPUFkpOw0KLSAgICBpZiAoZGVsKSB7DQotICAgICAgICBkZWxldGUgcFRvU3RyZWNoQml0bWFwOw0KLSAgICB9DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENHZGlEZXZpY2VEcml2ZXI6OkdESV9TdHJldGNoQml0TWFzayhjb25zdCBDRlhfRElCaXRtYXAqIHBCaXRtYXAxLCBpbnQgZGVzdF9sZWZ0LCBpbnQgZGVzdF90b3AsDQotICAgICAgICBpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0LCBGWF9EV09SRCBiaXRtYXBfY29sb3IsIEZYX0RXT1JEIGZsYWdzLA0KLSAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBDRlhfRElCaXRtYXAqIHBCaXRtYXAgPSAoQ0ZYX0RJQml0bWFwKilwQml0bWFwMTsNCi0gICAgaWYgKHBCaXRtYXAgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIF9Db2xvcjJBcmdiKGJpdG1hcF9jb2xvciwgYml0bWFwX2NvbG9yLCBhbHBoYV9mbGFnIHwgKDEgPDwgMjQpLCBwSWNjVHJhbnNmb3JtKTsNCi0gICAgaW50IHdpZHRoID0gcEJpdG1hcC0+R2V0V2lkdGgoKSwgaGVpZ2h0ID0gcEJpdG1hcC0+R2V0SGVpZ2h0KCk7DQotICAgIHN0cnVjdCB7DQotICAgICAgICBCSVRNQVBJTkZPSEVBREVSCWJtaUhlYWRlcjsNCi0gICAgICAgIEZYX0RXT1JECQkJYm1pQ29sb3JzWzJdOw0KLSAgICB9IGJtaTsNCi0gICAgRlhTWVNfbWVtc2V0MzIoJmJtaS5ibWlIZWFkZXIsIDAsIHNpemVvZiAoQklUTUFQSU5GT0hFQURFUikpOw0KLSAgICBibWkuYm1pSGVhZGVyLmJpU2l6ZSA9IHNpemVvZihCSVRNQVBJTkZPSEVBREVSKTsNCi0gICAgYm1pLmJtaUhlYWRlci5iaUJpdENvdW50ID0gMTsNCi0gICAgYm1pLmJtaUhlYWRlci5iaUNvbXByZXNzaW9uID0gQklfUkdCOw0KLSAgICBibWkuYm1pSGVhZGVyLmJpSGVpZ2h0ID0gLWhlaWdodDsNCi0gICAgYm1pLmJtaUhlYWRlci5iaVBsYW5lcyA9IDE7DQotICAgIGJtaS5ibWlIZWFkZXIuYmlXaWR0aCA9IHdpZHRoOw0KLSAgICBpZiAobV9uQml0c1BlclBpeGVsICE9IDEpIHsNCi0gICAgICAgIFNldFN0cmV0Y2hCbHRNb2RlKG1faERDLCBIQUxGVE9ORSk7DQotICAgIH0NCi0gICAgYm1pLmJtaUNvbG9yc1swXSA9IDB4ZmZmZmZmOw0KLSAgICBibWkuYm1pQ29sb3JzWzFdID0gMDsNCi0gICAgOjpTdHJldGNoRElCaXRzKG1faERDLCBkZXN0X2xlZnQsIGRlc3RfdG9wLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgIDAsIDAsIHdpZHRoLCBoZWlnaHQsIHBCaXRtYXAtPkdldEJ1ZmZlcigpLCAoQklUTUFQSU5GTyopJmJtaSwgRElCX1JHQl9DT0xPUlMsIFNSQ0FORCk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1CT09MIENHZGlEZXZpY2VEcml2ZXI6OkdldENsaXBCb3goRlhfUkVDVCogcFJlY3QpDQotew0KLSAgICByZXR1cm4gOjpHZXRDbGlwQm94KG1faERDLCAoUkVDVCopcFJlY3QpOw0KLX0NCi1GWF9CT09MIENHZGlEZXZpY2VEcml2ZXI6OlNldENsaXBSZ24oRlhfTFBWT0lEIGhSZ24pDQotew0KLSAgICA6OlNlbGVjdENsaXBSZ24obV9oREMsIChIUkdOKWhSZ24pOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotc3RhdGljIEhQRU4gX0NyZWF0ZVBlbihjb25zdCBDRlhfR3JhcGhTdGF0ZURhdGEqIHBHcmFwaFN0YXRlLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LCBGWF9EV09SRCBhcmdiKQ0KLXsNCi0gICAgRlhfRkxPQVQgd2lkdGg7DQotICAgIEZYX0ZMT0FUIHNjYWxlID0gMS5mOw0KLSAgICBpZiAocE1hdHJpeCkNCi0gICAgICAgIHNjYWxlID0gRlhTWVNfZmFicyhwTWF0cml4LT5hKSA+IEZYU1lTX2ZhYnMocE1hdHJpeC0+YikgPw0KLSAgICAgICAgICAgICAgICBGWFNZU19mYWJzKHBNYXRyaXgtPmEpIDogRlhTWVNfZmFicyhwTWF0cml4LT5iKTsNCi0gICAgaWYgKHBHcmFwaFN0YXRlKSB7DQotICAgICAgICB3aWR0aCA9IHNjYWxlICogcEdyYXBoU3RhdGUtPm1fTGluZVdpZHRoOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgd2lkdGggPSAxLjBmOw0KLSAgICB9DQotICAgIEZYX0RXT1JEIFBlblN0eWxlID0gUFNfR0VPTUVUUklDOw0KLSAgICBpZiAod2lkdGggPCAxKSB7DQotICAgICAgICB3aWR0aCA9IDE7DQotICAgIH0NCi0gICAgaWYocEdyYXBoU3RhdGUtPm1fRGFzaENvdW50KSB7DQotICAgICAgICBQZW5TdHlsZSB8PSBQU19VU0VSU1RZTEU7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBQZW5TdHlsZSB8PSBQU19TT0xJRDsNCi0gICAgfQ0KLSAgICBzd2l0Y2gocEdyYXBoU3RhdGUtPm1fTGluZUNhcCkgew0KLSAgICAgICAgY2FzZSAwOg0KLSAgICAgICAgICAgIFBlblN0eWxlIHw9IFBTX0VORENBUF9GTEFUOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSAxOg0KLSAgICAgICAgICAgIFBlblN0eWxlIHw9IFBTX0VORENBUF9ST1VORDsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgMjoNCi0gICAgICAgICAgICBQZW5TdHlsZSB8PSBQU19FTkRDQVBfU1FVQVJFOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICB9DQotICAgIHN3aXRjaChwR3JhcGhTdGF0ZS0+bV9MaW5lSm9pbikgew0KLSAgICAgICAgY2FzZSAwOg0KLSAgICAgICAgICAgIFBlblN0eWxlIHw9IFBTX0pPSU5fTUlURVI7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIDE6DQotICAgICAgICAgICAgUGVuU3R5bGUgfD0gUFNfSk9JTl9ST1VORDsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgMjoNCi0gICAgICAgICAgICBQZW5TdHlsZSB8PSBQU19KT0lOX0JFVkVMOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICB9DQotICAgIGludCBhOw0KLSAgICBGWF9DT0xPUlJFRiByZ2I7DQotICAgIEFyZ2JEZWNvZGUoYXJnYiwgYSwgcmdiKTsNCi0gICAgTE9HQlJVU0ggbGI7DQotICAgIGxiLmxiQ29sb3IgPSByZ2I7DQotICAgIGxiLmxiU3R5bGUgPSBCU19TT0xJRDsNCi0gICAgbGIubGJIYXRjaCA9IDA7DQotICAgIEZYX0RXT1JEKiBwRGFzaCA9IE5VTEw7DQotICAgIGlmIChwR3JhcGhTdGF0ZS0+bV9EYXNoQ291bnQpIHsNCi0gICAgICAgIHBEYXNoID0gRlhfQWxsb2MoRlhfRFdPUkQsIHBHcmFwaFN0YXRlLT5tX0Rhc2hDb3VudCk7DQotICAgICAgICBpZiAoIXBEYXNoKSB7DQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgICAgICB9DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBHcmFwaFN0YXRlLT5tX0Rhc2hDb3VudDsgaSArKykgew0KLSAgICAgICAgICAgIHBEYXNoW2ldID0gRlhTWVNfcm91bmQocE1hdHJpeCA/IHBNYXRyaXgtPlRyYW5zZm9ybURpc3RhbmNlKHBHcmFwaFN0YXRlLT5tX0Rhc2hBcnJheVtpXSkgOiBwR3JhcGhTdGF0ZS0+bV9EYXNoQXJyYXlbaV0pOw0KLSAgICAgICAgICAgIGlmIChwRGFzaFtpXSA8IDEpIHsNCi0gICAgICAgICAgICAgICAgcERhc2hbaV0gPSAxOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBIUEVOIGhQZW4gPSBFeHRDcmVhdGVQZW4oUGVuU3R5bGUsIChEV09SRClGWFNZU19jZWlsKHdpZHRoKSwgJmxiLCBwR3JhcGhTdGF0ZS0+bV9EYXNoQ291bnQsIChjb25zdCBEV09SRCopcERhc2gpOw0KLSAgICBpZiAocERhc2gpIHsNCi0gICAgICAgIEZYX0ZyZWUocERhc2gpOw0KLSAgICB9DQotICAgIHJldHVybiBoUGVuOw0KLX0NCi1zdGF0aWMgSEJSVVNIIF9DcmVhdGVCcnVzaChGWF9EV09SRCBhcmdiKQ0KLXsNCi0gICAgaW50IGE7DQotICAgIEZYX0NPTE9SUkVGIHJnYjsNCi0gICAgQXJnYkRlY29kZShhcmdiLCBhLCByZ2IpOw0KLSAgICByZXR1cm4gQ3JlYXRlU29saWRCcnVzaChyZ2IpOw0KLX0NCi1zdGF0aWMgdm9pZCBfU2V0UGF0aFRvREMoSERDIGhEQywgY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgpDQotew0KLSAgICBCZWdpblBhdGgoaERDKTsNCi0gICAgaW50IG5Qb2ludHMgPSBwUGF0aERhdGEtPkdldFBvaW50Q291bnQoKTsNCi0gICAgRlhfUEFUSFBPSU5UKiBwUG9pbnRzID0gcFBhdGhEYXRhLT5HZXRQb2ludHMoKTsNCi0gICAgZm9yKGludCBpID0gMDsgaSA8IG5Qb2ludHM7IGkrKykgew0KLSAgICAgICAgRlhfRkxPQVQgcG9zeCA9IHBQb2ludHNbaV0ubV9Qb2ludFgsIHBvc3kgPSBwUG9pbnRzW2ldLm1fUG9pbnRZOw0KLSAgICAgICAgaWYgKHBNYXRyaXgpIHsNCi0gICAgICAgICAgICBwTWF0cml4LT5UcmFuc2Zvcm0ocG9zeCwgcG9zeSk7DQotICAgICAgICB9DQotICAgICAgICBpbnQgc2NyZWVuX3ggPSBGWFNZU19yb3VuZChwb3N4KSwgc2NyZWVuX3kgPSBGWFNZU19yb3VuZChwb3N5KTsNCi0gICAgICAgIGludCBwb2ludF90eXBlID0gcFBvaW50c1tpXS5tX0ZsYWcgJiBGWFBUX1RZUEU7DQotICAgICAgICBpZihwb2ludF90eXBlID09IFBUX01PVkVUTykgew0KLSAgICAgICAgICAgIE1vdmVUb0V4KGhEQywgc2NyZWVuX3gsIHNjcmVlbl95LCBOVUxMKTsNCi0gICAgICAgIH0gZWxzZSBpZihwb2ludF90eXBlID09IFBUX0xJTkVUTykgew0KLSAgICAgICAgICAgIGlmIChwUG9pbnRzW2ldLm1fUG9pbnRZID09IHBQb2ludHNbaSAtIDFdLm1fUG9pbnRZICYmIHBQb2ludHNbaV0ubV9Qb2ludFggPT0gcFBvaW50c1tpIC0gMV0ubV9Qb2ludFgpIHsNCi0gICAgICAgICAgICAgICAgc2NyZWVuX3ggKys7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIExpbmVUbyhoREMsIHNjcmVlbl94LCBzY3JlZW5feSk7DQotICAgICAgICB9IGVsc2UgaWYocG9pbnRfdHlwZSA9PSBQVF9CRVpJRVJUTykgew0KLSAgICAgICAgICAgIFBPSU5UIGxwcHRbM107DQotICAgICAgICAgICAgbHBwdFswXS54ID0gc2NyZWVuX3g7DQotICAgICAgICAgICAgbHBwdFswXS55ID0gc2NyZWVuX3k7DQotICAgICAgICAgICAgcG9zeCA9IHBQb2ludHNbaSArIDFdLm1fUG9pbnRYOw0KLSAgICAgICAgICAgIHBvc3kgPSBwUG9pbnRzW2kgKyAxXS5tX1BvaW50WTsNCi0gICAgICAgICAgICBpZiAocE1hdHJpeCkgew0KLSAgICAgICAgICAgICAgICBwTWF0cml4LT5UcmFuc2Zvcm0ocG9zeCwgcG9zeSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGxwcHRbMV0ueCA9IEZYU1lTX3JvdW5kKHBvc3gpOw0KLSAgICAgICAgICAgIGxwcHRbMV0ueSA9IEZYU1lTX3JvdW5kKHBvc3kpOw0KLSAgICAgICAgICAgIHBvc3ggPSBwUG9pbnRzW2kgKyAyXS5tX1BvaW50WDsNCi0gICAgICAgICAgICBwb3N5ID0gcFBvaW50c1tpICsgMl0ubV9Qb2ludFk7DQotICAgICAgICAgICAgaWYgKHBNYXRyaXgpIHsNCi0gICAgICAgICAgICAgICAgcE1hdHJpeC0+VHJhbnNmb3JtKHBvc3gsIHBvc3kpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBscHB0WzJdLnggPSBGWFNZU19yb3VuZChwb3N4KTsNCi0gICAgICAgICAgICBscHB0WzJdLnkgPSBGWFNZU19yb3VuZChwb3N5KTsNCi0gICAgICAgICAgICBQb2x5QmV6aWVyVG8oaERDLCBscHB0LCAzKTsNCi0gICAgICAgICAgICBpICs9IDI7DQotICAgICAgICB9DQotICAgICAgICBpZiAocFBvaW50c1tpXS5tX0ZsYWcgJiBQVF9DTE9TRUZJR1VSRSkgew0KLSAgICAgICAgICAgIENsb3NlRmlndXJlKGhEQyk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRW5kUGF0aChoREMpOw0KLX0NCi12b2lkIENHZGlEZXZpY2VEcml2ZXI6OkRyYXdMaW5lKEZYX0ZMT0FUIHgxLCBGWF9GTE9BVCB5MSwgRlhfRkxPQVQgeDIsIEZYX0ZMT0FUIHkyKQ0KLXsNCi0gICAgaW50IGZsYWcxID0gKHgxIDwgMCkgfCAoKHgxID4gbV9XaWR0aCkgPDwgMSkgfCAoKHkxIDwgMCkgPDwgMikgfCAoKHkxID4gbV9IZWlnaHQpIDw8IDMpOw0KLSAgICBpbnQgZmxhZzIgPSAoeDIgPCAwKSB8ICgoeDIgPiBtX1dpZHRoKSA8PCAxKSB8ICgoeTIgPCAwKSA8PCAyKSB8ICgoeTIgPiBtX0hlaWdodCkgPDwgMyk7DQotICAgIGlmIChmbGFnMSAmIGZsYWcyKSB7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgaWYgKGZsYWcxIHx8IGZsYWcyKSB7DQotICAgICAgICBhZ2c6OnJlY3RfYmFzZTxGWF9GTE9BVD4gcmVjdCgwLjBmLCAwLjBmLCAoRlhfRkxPQVQpKG1fV2lkdGgpLCAoRlhfRkxPQVQpKG1fSGVpZ2h0KSk7DQotICAgICAgICBGWF9GTE9BVCB4WzJdLCB5WzJdOw0KLSAgICAgICAgaW50IG5wID0gYWdnOjpjbGlwX2xpYW5nX2JhcnNreTxGWF9GTE9BVD4oeDEsIHkxLCB4MiwgeTIsIHJlY3QsIHgsIHkpOw0KLSAgICAgICAgaWYgKG5wID09IDApIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBpZiAobnAgPT0gMSkgew0KLSAgICAgICAgICAgIHgyID0geFswXTsNCi0gICAgICAgICAgICB5MiA9IHlbMF07DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHgxID0geFswXTsNCi0gICAgICAgICAgICB5MSA9IHlbMF07DQotICAgICAgICAgICAgeDIgPSB4W25wIC0gMV07DQotICAgICAgICAgICAgeTIgPSB5W25wIC0gMV07DQotICAgICAgICB9DQotICAgIH0NCi0gICAgTW92ZVRvRXgobV9oREMsIEZYU1lTX3JvdW5kKHgxKSwgRlhTWVNfcm91bmQoeTEpLCBOVUxMKTsNCi0gICAgTGluZVRvKG1faERDLCBGWFNZU19yb3VuZCh4MiksIEZYU1lTX3JvdW5kKHkyKSk7DQotfQ0KLXN0YXRpYyBGWF9CT09MIF9NYXRyaXhOb1NjYWxlZChjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4KQ0KLXsNCi0gICAgcmV0dXJuIHBNYXRyaXgtPkdldEEoKSA9PSAxLjBmICYmIHBNYXRyaXgtPkdldEIoKSA9PSAwICYmIHBNYXRyaXgtPkdldEMoKSA9PSAwICYmIHBNYXRyaXgtPkdldEQoKSA9PSAxLjBmOw0KLX0NCi1GWF9CT09MIENHZGlEZXZpY2VEcml2ZXI6OkRyYXdQYXRoKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBmaWxsX2NvbG9yLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgc3Ryb2tlX2NvbG9yLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpbGxfbW9kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogcEljY1RyYW5zZm9ybSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludAlibGVuZF90eXBlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCi17DQotICAgIGlmIChibGVuZF90eXBlICE9IEZYRElCX0JMRU5EX05PUk1BTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIF9Db2xvcjJBcmdiKGZpbGxfY29sb3IsIGZpbGxfY29sb3IsIGFscGhhX2ZsYWcgfCAoMSA8PCAyNCksIHBJY2NUcmFuc2Zvcm0pOw0KLSAgICBfQ29sb3IyQXJnYihzdHJva2VfY29sb3IsIHN0cm9rZV9jb2xvciwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSk7DQotICAgIENXaW4zMlBsYXRmb3JtKiBwUGxhdGZvcm0gPSAoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpOw0KLSAgICBpZiAoKHBHcmFwaFN0YXRlID09IE5VTEwgfHwgc3Ryb2tlX2NvbG9yID09IDApICYmICFwUGxhdGZvcm0tPm1fR2RpcGx1c0V4dC5Jc0F2YWlsYWJsZSgpKSB7DQotICAgICAgICBDRlhfRmxvYXRSZWN0IGJib3hfZiA9IHBQYXRoRGF0YS0+R2V0Qm91bmRpbmdCb3goKTsNCi0gICAgICAgIGlmIChwTWF0cml4KSB7DQotICAgICAgICAgICAgYmJveF9mLlRyYW5zZm9ybShwTWF0cml4KTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX1JFQ1QgYmJveCA9IGJib3hfZi5HZXRJbm5lclJlY3QoKTsNCi0gICAgICAgIGlmIChiYm94LldpZHRoKCkgPD0gMCkgew0KLSAgICAgICAgICAgIHJldHVybiBEcmF3Q29zbWV0aWNMaW5lKChGWF9GTE9BVCkoYmJveC5sZWZ0KSwgKEZYX0ZMT0FUKShiYm94LnRvcCksIChGWF9GTE9BVCkoYmJveC5sZWZ0KSwgKEZYX0ZMT0FUKShiYm94LmJvdHRvbSArIDEpLCBmaWxsX2NvbG9yLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0sIEZYRElCX0JMRU5EX05PUk1BTCk7DQotICAgICAgICB9IGVsc2UgaWYgKGJib3guSGVpZ2h0KCkgPD0gMCkgew0KLSAgICAgICAgICAgIHJldHVybiBEcmF3Q29zbWV0aWNMaW5lKChGWF9GTE9BVCkoYmJveC5sZWZ0KSwgKEZYX0ZMT0FUKShiYm94LnRvcCksIChGWF9GTE9BVCkoYmJveC5yaWdodCArIDEpLCAoRlhfRkxPQVQpKGJib3gudG9wKSwgZmlsbF9jb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtLCBGWERJQl9CTEVORF9OT1JNQUwpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGludCBmaWxsX2FscGhhID0gRlhBUkdCX0EoZmlsbF9jb2xvcik7DQotICAgIGludCBzdHJva2VfYWxwaGEgPSBGWEFSR0JfQShzdHJva2VfY29sb3IpOw0KLSAgICBGWF9CT09MIGJEcmF3QWxwaGEgPSAoZmlsbF9hbHBoYSA+IDAgJiYgZmlsbF9hbHBoYSA8IDI1NSkgfHwgKHN0cm9rZV9hbHBoYSA+IDAgJiYgc3Ryb2tlX2FscGhhIDwgMjU1ICYmIHBHcmFwaFN0YXRlKTsNCi0gICAgaWYgKCFwUGxhdGZvcm0tPm1fR2RpcGx1c0V4dC5Jc0F2YWlsYWJsZSgpICYmIGJEcmF3QWxwaGEpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAocFBsYXRmb3JtLT5tX0dkaXBsdXNFeHQuSXNBdmFpbGFibGUoKSkgew0KLSAgICAgICAgaWYgKGJEcmF3QWxwaGEgfHwgKChtX0RldmljZUNsYXNzICE9IEZYRENfUFJJTlRFUiAmJiAhKGZpbGxfbW9kZSAmIEZYRklMTF9GVUxMQ09WRVIpKSB8fCBwR3JhcGhTdGF0ZSAmJiBwR3JhcGhTdGF0ZS0+bV9EYXNoQ291bnQpKSB7DQotICAgICAgICAgICAgaWYgKCAhKChOVUxMID09IHBNYXRyaXggfHwgX01hdHJpeE5vU2NhbGVkKHBNYXRyaXgpKSAmJg0KLSAgICAgICAgICAgICAgICAgICAgcEdyYXBoU3RhdGUgJiYgcEdyYXBoU3RhdGUtPm1fTGluZVdpZHRoID09IDEuZiAmJg0KLSAgICAgICAgICAgICAgICAgICAgKHBQYXRoRGF0YS0+R2V0UG9pbnRDb3VudCgpID09IDUgfHwgcFBhdGhEYXRhLT5HZXRQb2ludENvdW50KCkgPT0gNCkgJiYNCi0gICAgICAgICAgICAgICAgICAgIHBQYXRoRGF0YS0+SXNSZWN0KCkpICkgew0KLSAgICAgICAgICAgICAgICBpZiAocFBsYXRmb3JtLT5tX0dkaXBsdXNFeHQuRHJhd1BhdGgobV9oREMsIHBQYXRoRGF0YSwgcE1hdHJpeCwgcEdyYXBoU3RhdGUsIGZpbGxfY29sb3IsIHN0cm9rZV9jb2xvciwgZmlsbF9tb2RlKSkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaW50IG9sZF9maWxsX21vZGUgPSBmaWxsX21vZGU7DQotICAgIGZpbGxfbW9kZSAmPSAzOw0KLSAgICBIUEVOIGhQZW4gPSBOVUxMOw0KLSAgICBIQlJVU0ggaEJydXNoID0gTlVMTDsNCi0gICAgaWYgKHBHcmFwaFN0YXRlICYmIHN0cm9rZV9hbHBoYSkgew0KLSAgICAgICAgU2V0TWl0ZXJMaW1pdChtX2hEQywgcEdyYXBoU3RhdGUtPm1fTWl0ZXJMaW1pdCwgTlVMTCk7DQotICAgICAgICBoUGVuID0gX0NyZWF0ZVBlbihwR3JhcGhTdGF0ZSwgcE1hdHJpeCwgc3Ryb2tlX2NvbG9yKTsNCi0gICAgICAgIGhQZW4gPSAoSFBFTilTZWxlY3RPYmplY3QobV9oREMsIGhQZW4pOw0KLSAgICB9DQotICAgIGlmIChmaWxsX21vZGUgJiYgZmlsbF9hbHBoYSkgew0KLSAgICAgICAgU2V0UG9seUZpbGxNb2RlKG1faERDLCBmaWxsX21vZGUpOw0KLSAgICAgICAgaEJydXNoID0gX0NyZWF0ZUJydXNoKGZpbGxfY29sb3IpOw0KLSAgICAgICAgaEJydXNoID0gKEhCUlVTSClTZWxlY3RPYmplY3QobV9oREMsIGhCcnVzaCk7DQotICAgIH0NCi0gICAgaWYgKHBQYXRoRGF0YS0+R2V0UG9pbnRDb3VudCgpID09IDIgJiYgcEdyYXBoU3RhdGUgJiYgcEdyYXBoU3RhdGUtPm1fRGFzaENvdW50KSB7DQotICAgICAgICBGWF9GTE9BVCB4MSA9IHBQYXRoRGF0YS0+R2V0UG9pbnRYKDApLCB5MSA9IHBQYXRoRGF0YS0+R2V0UG9pbnRZKDApOw0KLSAgICAgICAgaWYgKHBNYXRyaXgpIHsNCi0gICAgICAgICAgICBwTWF0cml4LT5UcmFuc2Zvcm0oeDEsIHkxKTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0ZMT0FUIHgyID0gcFBhdGhEYXRhLT5HZXRQb2ludFgoMSksIHkyID0gcFBhdGhEYXRhLT5HZXRQb2ludFkoMSk7DQotICAgICAgICBpZiAocE1hdHJpeCkgew0KLSAgICAgICAgICAgIHBNYXRyaXgtPlRyYW5zZm9ybSh4MiwgeTIpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRHJhd0xpbmUoeDEsIHkxLCB4MiwgeTIpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgX1NldFBhdGhUb0RDKG1faERDLCBwUGF0aERhdGEsIHBNYXRyaXgpOw0KLSAgICAgICAgaWYgKHBHcmFwaFN0YXRlICYmIHN0cm9rZV9hbHBoYSkgew0KLSAgICAgICAgICAgIGlmIChmaWxsX21vZGUgJiYgZmlsbF9hbHBoYSkgew0KLSAgICAgICAgICAgICAgICBpZiAob2xkX2ZpbGxfbW9kZSAmIEZYX0ZJTExfVEVYVF9NT0RFKSB7DQotICAgICAgICAgICAgICAgICAgICBTdHJva2VBbmRGaWxsUGF0aChtX2hEQyk7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBGaWxsUGF0aChtX2hEQyk7DQotICAgICAgICAgICAgICAgICAgICBfU2V0UGF0aFRvREMobV9oREMsIHBQYXRoRGF0YSwgcE1hdHJpeCk7DQotICAgICAgICAgICAgICAgICAgICBTdHJva2VQYXRoKG1faERDKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIFN0cm9rZVBhdGgobV9oREMpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0gZWxzZSBpZiAoZmlsbF9tb2RlICYmIGZpbGxfYWxwaGEpIHsNCi0gICAgICAgICAgICBGaWxsUGF0aChtX2hEQyk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKGhQZW4pIHsNCi0gICAgICAgIGhQZW4gPSAoSFBFTilTZWxlY3RPYmplY3QobV9oREMsIGhQZW4pOw0KLSAgICAgICAgRGVsZXRlT2JqZWN0KGhQZW4pOw0KLSAgICB9DQotICAgIGlmIChoQnJ1c2gpIHsNCi0gICAgICAgIGhCcnVzaCA9IChIQlJVU0gpU2VsZWN0T2JqZWN0KG1faERDLCBoQnJ1c2gpOw0KLSAgICAgICAgRGVsZXRlT2JqZWN0KGhCcnVzaCk7DQotICAgIH0NCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ0dkaURldmljZURyaXZlcjo6RmlsbFJlY3QoY29uc3QgRlhfUkVDVCogcFJlY3QsIEZYX0RXT1JEIGZpbGxfY29sb3IsIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQgYmxlbmRfdHlwZSkNCi17DQotICAgIGlmIChibGVuZF90eXBlICE9IEZYRElCX0JMRU5EX05PUk1BTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIF9Db2xvcjJBcmdiKGZpbGxfY29sb3IsIGZpbGxfY29sb3IsIGFscGhhX2ZsYWcgfCAoMSA8PCAyNCksIHBJY2NUcmFuc2Zvcm0pOw0KLSAgICBpbnQgYWxwaGE7DQotICAgIEZYX0NPTE9SUkVGIHJnYjsNCi0gICAgQXJnYkRlY29kZShmaWxsX2NvbG9yLCBhbHBoYSwgcmdiKTsNCi0gICAgaWYgKGFscGhhID09IDApIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIGlmIChhbHBoYSA8IDI1NSkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEhCUlVTSCBoQnJ1c2ggPSBDcmVhdGVTb2xpZEJydXNoKHJnYik7DQotICAgIDo6RmlsbFJlY3QobV9oREMsIChSRUNUKilwUmVjdCwgaEJydXNoKTsNCi0gICAgRGVsZXRlT2JqZWN0KGhCcnVzaCk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENHZGlEZXZpY2VEcml2ZXI6OlNldENsaXBfUGF0aEZpbGwoY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEsDQotICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LA0KLSAgICAgICAgaW50IGZpbGxfbW9kZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCi17DQotICAgIGlmIChwUGF0aERhdGEtPkdldFBvaW50Q291bnQoKSA9PSA1KSB7DQotICAgICAgICBDRlhfRmxvYXRSZWN0IHJlY3RmOw0KLSAgICAgICAgaWYgKHBQYXRoRGF0YS0+SXNSZWN0KHBNYXRyaXgsICZyZWN0ZikpIHsNCi0gICAgICAgICAgICBGWF9SRUNUIHJlY3QgPSByZWN0Zi5HZXRPdXR0ZXJSZWN0KCk7DQotICAgICAgICAgICAgSW50ZXJzZWN0Q2xpcFJlY3QobV9oREMsIHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQsIHJlY3QuYm90dG9tKTsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBfU2V0UGF0aFRvREMobV9oREMsIHBQYXRoRGF0YSwgcE1hdHJpeCk7DQotICAgIFNldFBvbHlGaWxsTW9kZShtX2hEQywgZmlsbF9tb2RlICYgMyk7DQotICAgIFNlbGVjdENsaXBQYXRoKG1faERDLCBSR05fQU5EKTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLUZYX0JPT0wgQ0dkaURldmljZURyaXZlcjo6U2V0Q2xpcF9QYXRoU3Ryb2tlKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLA0KLSAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwNCi0gICAgICAgIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCi17DQotICAgIEhQRU4gaFBlbiA9IF9DcmVhdGVQZW4ocEdyYXBoU3RhdGUsIHBNYXRyaXgsIDB4ZmYwMDAwMDApOw0KLSAgICBoUGVuID0gKEhQRU4pU2VsZWN0T2JqZWN0KG1faERDLCBoUGVuKTsNCi0gICAgX1NldFBhdGhUb0RDKG1faERDLCBwUGF0aERhdGEsIHBNYXRyaXgpOw0KLSAgICBXaWRlblBhdGgobV9oREMpOw0KLSAgICBTZXRQb2x5RmlsbE1vZGUobV9oREMsIFdJTkRJTkcpOw0KLSAgICBGWF9CT09MIHJldCA9IFNlbGVjdENsaXBQYXRoKG1faERDLCBSR05fQU5EKTsNCi0gICAgaFBlbiA9IChIUEVOKVNlbGVjdE9iamVjdChtX2hEQywgaFBlbik7DQotICAgIERlbGV0ZU9iamVjdChoUGVuKTsNCi0gICAgcmV0dXJuIHJldDsNCi19DQotRlhfQk9PTCBDR2RpRGV2aWNlRHJpdmVyOjpEcmF3Q29zbWV0aWNMaW5lKEZYX0ZMT0FUIHgxLCBGWF9GTE9BVCB5MSwgRlhfRkxPQVQgeDIsIEZYX0ZMT0FUIHkyLCBGWF9EV09SRCBjb2xvciwNCi0gICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQJYmxlbmRfdHlwZSkNCi17DQotICAgIGlmIChibGVuZF90eXBlICE9IEZYRElCX0JMRU5EX05PUk1BTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIF9Db2xvcjJBcmdiKGNvbG9yLCBjb2xvciwgYWxwaGFfZmxhZyB8ICgxIDw8IDI0KSwgcEljY1RyYW5zZm9ybSk7DQotICAgIGludCBhOw0KLSAgICBGWF9DT0xPUlJFRiByZ2I7DQotICAgIEFyZ2JEZWNvZGUoY29sb3IsIGEsIHJnYik7DQotICAgIGlmIChhID09IDApIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIEhQRU4gaFBlbiA9IENyZWF0ZVBlbihQU19TT0xJRCwgMSwgcmdiKTsNCi0gICAgaFBlbiA9IChIUEVOKVNlbGVjdE9iamVjdChtX2hEQywgaFBlbik7DQotICAgIE1vdmVUb0V4KG1faERDLCBGWFNZU19yb3VuZCh4MSksIEZYU1lTX3JvdW5kKHkxKSwgTlVMTCk7DQotICAgIExpbmVUbyhtX2hEQywgRlhTWVNfcm91bmQoeDIpLCBGWFNZU19yb3VuZCh5MikpOw0KLSAgICBoUGVuID0gKEhQRU4pU2VsZWN0T2JqZWN0KG1faERDLCBoUGVuKTsNCi0gICAgRGVsZXRlT2JqZWN0KGhQZW4pOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDR2RpRGV2aWNlRHJpdmVyOjpEZWxldGVEZXZpY2VSZ24oRlhfTFBWT0lEIHBSZ24pDQotew0KLSAgICBEZWxldGVPYmplY3QoKEhHRElPQkopcFJnbik7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1DR2RpRGlzcGxheURyaXZlcjo6Q0dkaURpc3BsYXlEcml2ZXIoSERDIGhEQykgOiBDR2RpRGV2aWNlRHJpdmVyKGhEQywgRlhEQ19ESVNQTEFZKQ0KLXsNCi0gICAgQ1dpbjMyUGxhdGZvcm0qIHBQbGF0Zm9ybSA9IChDV2luMzJQbGF0Zm9ybSopQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCk7DQotICAgIGlmIChwUGxhdGZvcm0tPm1fR2RpcGx1c0V4dC5Jc0F2YWlsYWJsZSgpKSB7DQotICAgICAgICBtX1JlbmRlckNhcHMgfD0gRlhSQ19BTFBIQV9QQVRIIHwgRlhSQ19BTFBIQV9JTUFHRTsNCi0gICAgfQ0KLX0NCi1GWF9CT09MIENHZGlEaXNwbGF5RHJpdmVyOjpHZXRESUJpdHMoQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCBpbnQgbGVmdCwgaW50IHRvcCwgdm9pZCogcEljY1RyYW5zZm9ybSwgRlhfQk9PTCBiREVkZ2UpDQotew0KLSAgICBGWF9CT09MIHJldCA9IEZBTFNFOw0KLSAgICBpbnQgd2lkdGggPSBwQml0bWFwLT5HZXRXaWR0aCgpOw0KLSAgICBpbnQgaGVpZ2h0ID0gcEJpdG1hcC0+R2V0SGVpZ2h0KCk7DQotICAgIEhCSVRNQVAgaGJtcCA9IENyZWF0ZUNvbXBhdGlibGVCaXRtYXAobV9oREMsIHdpZHRoLCBoZWlnaHQpOw0KLSAgICBIREMgaERDTWVtb3J5ID0gQ3JlYXRlQ29tcGF0aWJsZURDKG1faERDKTsNCi0gICAgSEJJVE1BUCBob2xkYm1wICA9IChIQklUTUFQKVNlbGVjdE9iamVjdChoRENNZW1vcnksIGhibXApOw0KLSAgICBCaXRCbHQoaERDTWVtb3J5LCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCBtX2hEQywgbGVmdCwgdG9wLCBTUkNDT1BZKTsNCi0gICAgU2VsZWN0T2JqZWN0KGhEQ01lbW9yeSwgaG9sZGJtcCk7DQotICAgIEJJVE1BUElORk8gYm1pOw0KLSAgICBGWFNZU19tZW1zZXQzMigmYm1pLCAwLCBzaXplb2YgYm1pKTsNCi0gICAgYm1pLmJtaUhlYWRlci5iaVNpemUgPSBzaXplb2YgYm1pLmJtaUhlYWRlcjsNCi0gICAgYm1pLmJtaUhlYWRlci5iaUJpdENvdW50ID0gcEJpdG1hcC0+R2V0QlBQKCk7DQotICAgIGJtaS5ibWlIZWFkZXIuYmlIZWlnaHQgPSAtaGVpZ2h0Ow0KLSAgICBibWkuYm1pSGVhZGVyLmJpUGxhbmVzID0gMTsNCi0gICAgYm1pLmJtaUhlYWRlci5iaVdpZHRoID0gd2lkdGg7DQotICAgIGlmICghQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKSB8fCAhQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0Q29kZWNNb2R1bGUoKS0+R2V0SWNjTW9kdWxlKCkpIHsNCi0gICAgICAgIHBJY2NUcmFuc2Zvcm0gPSBOVUxMOw0KLSAgICB9DQotICAgIGlmIChwQml0bWFwLT5HZXRCUFAoKSA+IDggJiYgIXBCaXRtYXAtPklzQ215a0ltYWdlKCkgJiYgcEljY1RyYW5zZm9ybSA9PSBOVUxMKSB7DQotICAgICAgICByZXQgPSA6OkdldERJQml0cyhoRENNZW1vcnksIGhibXAsIDAsIGhlaWdodCwgcEJpdG1hcC0+R2V0QnVmZmVyKCksICZibWksIERJQl9SR0JfQ09MT1JTKSA9PSBoZWlnaHQ7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBDRlhfRElCaXRtYXAgYml0bWFwOw0KLSAgICAgICAgaWYgKGJpdG1hcC5DcmVhdGUod2lkdGgsIGhlaWdodCwgRlhESUJfUmdiKSkgew0KLSAgICAgICAgICAgIGJtaS5ibWlIZWFkZXIuYmlCaXRDb3VudCA9IDI0Ow0KLSAgICAgICAgICAgIDo6R2V0RElCaXRzKGhEQ01lbW9yeSwgaGJtcCwgMCwgaGVpZ2h0LCBiaXRtYXAuR2V0QnVmZmVyKCksICZibWksIERJQl9SR0JfQ09MT1JTKTsNCi0gICAgICAgICAgICByZXQgPSBwQml0bWFwLT5UcmFuc2ZlckJpdG1hcCgwLCAwLCB3aWR0aCwgaGVpZ2h0LCAmYml0bWFwLCAwLCAwLCBwSWNjVHJhbnNmb3JtKTsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcmV0ID0gRkFMU0U7DQotICAgICAgICB9DQotICAgIH0NCi0jaWZuZGVmIF9GUERGQVBJX01JTklfDQotICAgIGlmIChwQml0bWFwLT5IYXNBbHBoYSgpICYmIHJldCkgew0KLSAgICAgICAgcEJpdG1hcC0+TG9hZENoYW5uZWwoRlhESUJfQWxwaGEsIDB4ZmYpOw0KLSAgICB9DQotI2VuZGlmDQotICAgIERlbGV0ZU9iamVjdChoYm1wKTsNCi0gICAgRGVsZXRlT2JqZWN0KGhEQ01lbW9yeSk7DQotICAgIHJldHVybiByZXQ7DQotfQ0KLUZYX0JPT0wgQ0dkaURpc3BsYXlEcml2ZXI6OlNldERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwU291cmNlLCBGWF9EV09SRCBjb2xvciwgY29uc3QgRlhfUkVDVCogcFNyY1JlY3QsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgYmxlbmRfdHlwZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBBU1NFUlQoYmxlbmRfdHlwZSA9PSBGWERJQl9CTEVORF9OT1JNQUwpOw0KLSAgICBpZiAocFNvdXJjZS0+SXNBbHBoYU1hc2soKSkgew0KLSAgICAgICAgaW50IHdpZHRoID0gcFNvdXJjZS0+R2V0V2lkdGgoKSwgaGVpZ2h0ID0gcFNvdXJjZS0+R2V0SGVpZ2h0KCk7DQotICAgICAgICBpbnQgYWxwaGEgPSBGWEdFVEZMQUdfQ09MT1JUWVBFKGFscGhhX2ZsYWcpID8gRlhHRVRGTEFHX0FMUEhBX0ZJTEwoYWxwaGFfZmxhZykgOiBGWEFSR0JfQShjb2xvcik7DQotICAgICAgICBGWF9CT09MIGJHREkgPSBwU291cmNlLT5HZXRCUFAoKSA9PSAxICYmIGFscGhhID09IDI1NTsNCi0gICAgICAgIGlmICghYkdESSkgew0KLSAgICAgICAgICAgIENGWF9ESUJpdG1hcCBiYWNrZ3JvdW5kOw0KLSAgICAgICAgICAgIGlmICghYmFja2dyb3VuZC5DcmVhdGUod2lkdGgsIGhlaWdodCwgRlhESUJfUmdiMzIpIHx8DQotICAgICAgICAgICAgICAgICAgICAhR2V0RElCaXRzKCZiYWNrZ3JvdW5kLCBsZWZ0LCB0b3AsIE5VTEwpIHx8DQotICAgICAgICAgICAgICAgICAgICAhYmFja2dyb3VuZC5Db21wb3NpdGVNYXNrKDAsIDAsIHdpZHRoLCBoZWlnaHQsIHBTb3VyY2UsIGNvbG9yLCAwLCAwLCBGWERJQl9CTEVORF9OT1JNQUwsIE5VTEwsIEZBTFNFLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtKSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIEZYX1JFQ1Qgc3JjX3JlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7DQotICAgICAgICAgICAgcmV0dXJuIFNldERJQml0cygmYmFja2dyb3VuZCwgMCwgJnNyY19yZWN0LCBsZWZ0LCB0b3AsIEZYRElCX0JMRU5EX05PUk1BTCwgMCwgTlVMTCk7DQotICAgICAgICB9DQotICAgICAgICBGWF9SRUNUIGNsaXBfcmVjdChsZWZ0LCB0b3AsIGxlZnQgKyBwU3JjUmVjdC0+V2lkdGgoKSwgdG9wICsgcFNyY1JlY3QtPkhlaWdodCgpKTsNCi0gICAgICAgIHJldHVybiBTdHJldGNoRElCaXRzKHBTb3VyY2UsIGNvbG9yLCBsZWZ0IC0gcFNyY1JlY3QtPmxlZnQsIHRvcCAtIHBTcmNSZWN0LT50b3AsIHdpZHRoLCBoZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2xpcF9yZWN0LCAwLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtLCBGWERJQl9CTEVORF9OT1JNQUwpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaW50IHdpZHRoID0gcFNyY1JlY3QtPldpZHRoKCksIGhlaWdodCA9IHBTcmNSZWN0LT5IZWlnaHQoKTsNCi0gICAgICAgIGlmIChwU291cmNlLT5IYXNBbHBoYSgpKSB7DQotICAgICAgICAgICAgQ0ZYX0RJQml0bWFwIGJpdG1hcDsNCi0gICAgICAgICAgICBpZiAoIWJpdG1hcC5DcmVhdGUod2lkdGgsIGhlaWdodCwgRlhESUJfUmdiKSB8fA0KLSAgICAgICAgICAgICAgICAgICAgIUdldERJQml0cygmYml0bWFwLCBsZWZ0LCB0b3AsIE5VTEwpIHx8DQotICAgICAgICAgICAgICAgICAgICAhYml0bWFwLkNvbXBvc2l0ZUJpdG1hcCgwLCAwLCB3aWR0aCwgaGVpZ2h0LCBwU291cmNlLCBwU3JjUmVjdC0+bGVmdCwgcFNyY1JlY3QtPnRvcCwgRlhESUJfQkxFTkRfTk9STUFMLCBOVUxMLCBGQUxTRSwgcEljY1RyYW5zZm9ybSkpIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9SRUNUIHNyY19yZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOw0KLSAgICAgICAgICAgIHJldHVybiBTZXRESUJpdHMoJmJpdG1hcCwgMCwgJnNyY19yZWN0LCBsZWZ0LCB0b3AsIEZYRElCX0JMRU5EX05PUk1BTCwgMCwgTlVMTCk7DQotICAgICAgICB9DQotICAgICAgICBDRlhfRElCRXh0cmFjdG9yIHRlbXAocFNvdXJjZSk7DQotICAgICAgICBDRlhfRElCaXRtYXAqIHBCaXRtYXAgPSB0ZW1wOw0KLSAgICAgICAgaWYgKHBCaXRtYXApIHsNCi0gICAgICAgICAgICByZXR1cm4gR0RJX1NldERJQml0cyhwQml0bWFwLCBwU3JjUmVjdCwgbGVmdCwgdG9wLCBwSWNjVHJhbnNmb3JtKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUZYX0JPT0wgQ0dkaURpc3BsYXlEcml2ZXI6OlVzZUZveGl0U3RyZXRjaEVuZ2luZShjb25zdCBDRlhfRElCU291cmNlKiBwU291cmNlLCBGWF9EV09SRCBjb2xvciwgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLA0KLSAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgY29uc3QgRlhfUkVDVCogcENsaXBSZWN0LCBpbnQgcmVuZGVyX2ZsYWdzLA0KLSAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0sIGludCBibGVuZF90eXBlKQ0KLXsNCi0gICAgRlhfUkVDVCBiaXRtYXBfY2xpcCA9ICpwQ2xpcFJlY3Q7DQotICAgIGlmIChkZXN0X3dpZHRoIDwgMCkgew0KLSAgICAgICAgZGVzdF9sZWZ0ICs9IGRlc3Rfd2lkdGg7DQotICAgIH0NCi0gICAgaWYgKGRlc3RfaGVpZ2h0IDwgMCkgew0KLSAgICAgICAgZGVzdF90b3AgKz0gZGVzdF9oZWlnaHQ7DQotICAgIH0NCi0gICAgYml0bWFwX2NsaXAuT2Zmc2V0KC1kZXN0X2xlZnQsIC1kZXN0X3RvcCk7DQotICAgIENGWF9ESUJpdG1hcCogcFN0cmV0Y2hlZCA9IHBTb3VyY2UtPlN0cmV0Y2hUbyhkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgcmVuZGVyX2ZsYWdzLCAmYml0bWFwX2NsaXApOw0KLSAgICBpZiAocFN0cmV0Y2hlZCA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICBGWF9SRUNUIHNyY19yZWN0KDAsIDAsIHBTdHJldGNoZWQtPkdldFdpZHRoKCksIHBTdHJldGNoZWQtPkdldEhlaWdodCgpKTsNCi0gICAgRlhfQk9PTCByZXQgPSBTZXRESUJpdHMocFN0cmV0Y2hlZCwgY29sb3IsICZzcmNfcmVjdCwgcENsaXBSZWN0LT5sZWZ0LCBwQ2xpcFJlY3QtPnRvcCwgRlhESUJfQkxFTkRfTk9STUFMLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtKTsNCi0gICAgZGVsZXRlIHBTdHJldGNoZWQ7DQotICAgIHJldHVybiByZXQ7DQotfQ0KLUZYX0JPT0wgQ0dkaURpc3BsYXlEcml2ZXI6OlN0cmV0Y2hESUJpdHMoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNvdXJjZSwgRlhfRFdPUkQgY29sb3IsIGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwNCi0gICAgICAgIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsIGNvbnN0IEZYX1JFQ1QqIHBDbGlwUmVjdCwgRlhfRFdPUkQgZmxhZ3MsDQotICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSwgaW50IGJsZW5kX3R5cGUpDQotew0KLSAgICBBU1NFUlQocFNvdXJjZSAhPSBOVUxMICYmIHBDbGlwUmVjdCAhPSBOVUxMKTsNCi0gICAgaWYgKGZsYWdzIHx8IGRlc3Rfd2lkdGggPiAxMDAwMCB8fCBkZXN0X3dpZHRoIDwgLTEwMDAwIHx8IGRlc3RfaGVpZ2h0ID4gMTAwMDAgfHwgZGVzdF9oZWlnaHQgPCAtMTAwMDApDQotICAgICAgICByZXR1cm4gVXNlRm94aXRTdHJldGNoRW5naW5lKHBTb3VyY2UsIGNvbG9yLCBkZXN0X2xlZnQsIGRlc3RfdG9wLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcENsaXBSZWN0LCBmbGFncywgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSwgYmxlbmRfdHlwZSk7DQotICAgIGlmIChwU291cmNlLT5Jc0FscGhhTWFzaygpKSB7DQotICAgICAgICBGWF9SRUNUIGltYWdlX3JlY3Q7DQotICAgICAgICBpbWFnZV9yZWN0LmxlZnQgPSBkZXN0X3dpZHRoID4gMCA/IGRlc3RfbGVmdCA6IGRlc3RfbGVmdCArIGRlc3Rfd2lkdGg7DQotICAgICAgICBpbWFnZV9yZWN0LnJpZ2h0ID0gZGVzdF93aWR0aCA+IDAgPyBkZXN0X2xlZnQgKyBkZXN0X3dpZHRoIDogZGVzdF9sZWZ0Ow0KLSAgICAgICAgaW1hZ2VfcmVjdC50b3AgPSBkZXN0X2hlaWdodCA+IDAgPyBkZXN0X3RvcCA6IGRlc3RfdG9wICsgZGVzdF9oZWlnaHQ7DQotICAgICAgICBpbWFnZV9yZWN0LmJvdHRvbSA9IGRlc3RfaGVpZ2h0ID4gMCA/IGRlc3RfdG9wICsgZGVzdF9oZWlnaHQgOiBkZXN0X3RvcDsNCi0gICAgICAgIEZYX1JFQ1QgY2xpcF9yZWN0ID0gaW1hZ2VfcmVjdDsNCi0gICAgICAgIGNsaXBfcmVjdC5JbnRlcnNlY3QoKnBDbGlwUmVjdCk7DQotICAgICAgICBjbGlwX3JlY3QuT2Zmc2V0KC1pbWFnZV9yZWN0LmxlZnQsIC1pbWFnZV9yZWN0LnRvcCk7DQotICAgICAgICBpbnQgY2xpcF93aWR0aCA9IGNsaXBfcmVjdC5XaWR0aCgpLCBjbGlwX2hlaWdodCA9IGNsaXBfcmVjdC5IZWlnaHQoKTsNCi0gICAgICAgIENGWF9ESUJpdG1hcCogcFN0cmV0Y2hlZCA9IHBTb3VyY2UtPlN0cmV0Y2hUbyhkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgZmxhZ3MsICZjbGlwX3JlY3QpOw0KLSAgICAgICAgaWYgKHBTdHJldGNoZWQgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ0ZYX0RJQml0bWFwIGJhY2tncm91bmQ7DQotICAgICAgICBpZiAoIWJhY2tncm91bmQuQ3JlYXRlKGNsaXBfd2lkdGgsIGNsaXBfaGVpZ2h0LCBGWERJQl9SZ2IzMikgfHwNCi0gICAgICAgICAgICAgICAgIUdldERJQml0cygmYmFja2dyb3VuZCwgaW1hZ2VfcmVjdC5sZWZ0ICsgY2xpcF9yZWN0LmxlZnQsIGltYWdlX3JlY3QudG9wICsgY2xpcF9yZWN0LnRvcCwgTlVMTCkgfHwNCi0gICAgICAgICAgICAgICAgIWJhY2tncm91bmQuQ29tcG9zaXRlTWFzaygwLCAwLCBjbGlwX3dpZHRoLCBjbGlwX2hlaWdodCwgcFN0cmV0Y2hlZCwgY29sb3IsIDAsIDAsIEZYRElCX0JMRU5EX05PUk1BTCwgTlVMTCwgRkFMU0UsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pKSB7DQotICAgICAgICAgICAgZGVsZXRlIHBTdHJldGNoZWQ7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfUkVDVCBzcmNfcmVjdCgwLCAwLCBjbGlwX3dpZHRoLCBjbGlwX2hlaWdodCk7DQotICAgICAgICBGWF9CT09MIHJldCA9IFNldERJQml0cygmYmFja2dyb3VuZCwgMCwgJnNyY19yZWN0LCBpbWFnZV9yZWN0LmxlZnQgKyBjbGlwX3JlY3QubGVmdCwgaW1hZ2VfcmVjdC50b3AgKyBjbGlwX3JlY3QudG9wLCBGWERJQl9CTEVORF9OT1JNQUwsIDAsIE5VTEwpOw0KLSAgICAgICAgZGVsZXRlIHBTdHJldGNoZWQ7DQotICAgICAgICByZXR1cm4gcmV0Ow0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgaWYgKHBTb3VyY2UtPkhhc0FscGhhKCkpIHsNCi0gICAgICAgICAgICBDV2luMzJQbGF0Zm9ybSogcFBsYXRmb3JtID0gKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKTsNCi0gICAgICAgICAgICBpZiAocFBsYXRmb3JtLT5tX0dkaXBsdXNFeHQuSXNBdmFpbGFibGUoKSAmJiBwSWNjVHJhbnNmb3JtID09IE5VTEwgJiYgIXBTb3VyY2UtPklzQ215a0ltYWdlKCkpIHsNCi0gICAgICAgICAgICAgICAgQ0ZYX0RJQkV4dHJhY3RvciB0ZW1wKHBTb3VyY2UpOw0KLSAgICAgICAgICAgICAgICBDRlhfRElCaXRtYXAqIHBCaXRtYXAgPSB0ZW1wOw0KLSAgICAgICAgICAgICAgICBpZiAocEJpdG1hcCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBQbGF0Zm9ybS0+bV9HZGlwbHVzRXh0LlN0cmV0Y2hESUJpdHMobV9oREMsIHBCaXRtYXAsIGRlc3RfbGVmdCwgZGVzdF90b3AsIGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0LCBwQ2xpcFJlY3QsIGZsYWdzKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuIFVzZUZveGl0U3RyZXRjaEVuZ2luZShwU291cmNlLCBjb2xvciwgZGVzdF9sZWZ0LCBkZXN0X3RvcCwgZGVzdF93aWR0aCwgZGVzdF9oZWlnaHQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ2xpcFJlY3QsIGZsYWdzLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtLCBibGVuZF90eXBlKTsNCi0gICAgICAgIH0NCi0gICAgICAgIENGWF9ESUJFeHRyYWN0b3IgdGVtcChwU291cmNlKTsNCi0gICAgICAgIENGWF9ESUJpdG1hcCogcEJpdG1hcCA9IHRlbXA7DQotICAgICAgICBpZiAocEJpdG1hcCkgew0KLSAgICAgICAgICAgIHJldHVybiBHRElfU3RyZXRjaERJQml0cyhwQml0bWFwLCBkZXN0X2xlZnQsIGRlc3RfdG9wLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgZmxhZ3MsIHBJY2NUcmFuc2Zvcm0pOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotI2RlZmluZSBHRVRfUFNfRkVBVFVSRVNFVFRJTkcgICAgICAgIDQxMjENCi0jZGVmaW5lIEZFQVRVUkVTRVRUSU5HX1BTTEVWRUwgICAgICAgMg0KLWludCBHZXRQU0xldmVsKEhEQyBoREMpDQotew0KLSAgICBpbnQgZGV2aWNlX3R5cGUgPSA6OkdldERldmljZUNhcHMoaERDLCBURUNITk9MT0dZKTsNCi0gICAgaWYgKGRldmljZV90eXBlICE9IERUX1JBU1BSSU5URVIpIHsNCi0gICAgICAgIHJldHVybiAwOw0KLSAgICB9DQotICAgIEZYX0RXT1JEIGVzYyA9IEdFVF9QU19GRUFUVVJFU0VUVElORzsNCi0gICAgaWYgKEV4dEVzY2FwZShoREMsIFFVRVJZRVNDU1VQUE9SVCwgc2l6ZW9mIGVzYywgKGNoYXIqKSZlc2MsIDAsIE5VTEwpKSB7DQotICAgICAgICBpbnQgcGFyYW0gPSBGRUFUVVJFU0VUVElOR19QU0xFVkVMOw0KLSAgICAgICAgaWYgKEV4dEVzY2FwZShoREMsIEdFVF9QU19GRUFUVVJFU0VUVElORywgc2l6ZW9mKGludCksIChjaGFyKikmcGFyYW0sIHNpemVvZihpbnQpLCAoY2hhciopJnBhcmFtKSA+IDApIHsNCi0gICAgICAgICAgICByZXR1cm4gcGFyYW07DQotICAgICAgICB9DQotICAgIH0NCi0gICAgZXNjID0gUE9TVFNDUklQVF9JREVOVElGWTsNCi0gICAgaWYgKEV4dEVzY2FwZShoREMsIFFVRVJZRVNDU1VQUE9SVCwgc2l6ZW9mIGVzYywgKGNoYXIqKSZlc2MsIDAsIE5VTEwpID09IDApIHsNCi0gICAgICAgIGVzYyA9IFBPU1RTQ1JJUFRfREFUQTsNCi0gICAgICAgIGlmIChFeHRFc2NhcGUoaERDLCBRVUVSWUVTQ1NVUFBPUlQsIHNpemVvZiBlc2MsIChjaGFyKikmZXNjLCAwLCBOVUxMKSkgew0KLSAgICAgICAgICAgIHJldHVybiAyOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIDA7DQotICAgIH0NCi0gICAgZXNjID0gUFNJREVOVF9HRElDRU5UUklDOw0KLSAgICBpZiAoRXh0RXNjYXBlKGhEQywgUE9TVFNDUklQVF9JREVOVElGWSwgc2l6ZW9mKEZYX0RXT1JEKSwgKGNoYXIqKSZlc2MsIDAsIE5VTEwpIDw9IDApIHsNCi0gICAgICAgIHJldHVybiAyOw0KLSAgICB9DQotICAgIGVzYyA9IEdFVF9QU19GRUFUVVJFU0VUVElORzsNCi0gICAgaWYgKEV4dEVzY2FwZShoREMsIFFVRVJZRVNDU1VQUE9SVCwgc2l6ZW9mIGVzYywgKGNoYXIqKSZlc2MsIDAsIE5VTEwpKSB7DQotICAgICAgICBpbnQgcGFyYW0gPSBGRUFUVVJFU0VUVElOR19QU0xFVkVMOw0KLSAgICAgICAgaWYgKEV4dEVzY2FwZShoREMsIEdFVF9QU19GRUFUVVJFU0VUVElORywgc2l6ZW9mKGludCksIChjaGFyKikmcGFyYW0sIHNpemVvZihpbnQpLCAoY2hhciopJnBhcmFtKSA+IDApIHsNCi0gICAgICAgICAgICByZXR1cm4gcGFyYW07DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIDI7DQotfQ0KLWludCBDRlhfV2luZG93c0RldmljZTo6bV9wc0xldmVsID0gMjsNCi1DRlhfV2luZG93c0RldmljZTo6Q0ZYX1dpbmRvd3NEZXZpY2UoSERDIGhEQywgRlhfQk9PTCBiQ215a091dHB1dCwgRlhfQk9PTCBiRm9yY2VQU091dHB1dCwgaW50IHBzTGV2ZWwpDQotew0KLSAgICBtX2JGb3JjZVBTT3V0cHV0ID0gYkZvcmNlUFNPdXRwdXQ7DQotICAgIG1fcHNMZXZlbCA9IHBzTGV2ZWw7DQotICAgIGlmIChiRm9yY2VQU091dHB1dCkgew0KLSAgICAgICAgSUZYX1JlbmRlckRldmljZURyaXZlciogcERyaXZlciA9IEZYX05FVyBDUFNQcmludGVyRHJpdmVyOw0KLSAgICAgICAgaWYgKCFwRHJpdmVyKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgKChDUFNQcmludGVyRHJpdmVyKilwRHJpdmVyKS0+SW5pdChoREMsIHBzTGV2ZWwsIGJDbXlrT3V0cHV0KTsNCi0gICAgICAgIFNldERldmljZURyaXZlcihwRHJpdmVyKTsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBTZXREZXZpY2VEcml2ZXIoQ3JlYXRlRHJpdmVyKGhEQywgYkNteWtPdXRwdXQpKTsNCi19DQotSERDIENGWF9XaW5kb3dzRGV2aWNlOjpHZXREQygpIGNvbnN0DQotew0KLSAgICBJRlhfUmVuZGVyRGV2aWNlRHJpdmVyICpwUkREID0gR2V0RGV2aWNlRHJpdmVyKCk7DQotICAgIGlmICghcFJERCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIChIREMpcFJERC0+R2V0UGxhdGZvcm1TdXJmYWNlKCk7DQotfQ0KLUlGWF9SZW5kZXJEZXZpY2VEcml2ZXIqIENGWF9XaW5kb3dzRGV2aWNlOjpDcmVhdGVEcml2ZXIoSERDIGhEQywgRlhfQk9PTCBiQ215a091dHB1dCkNCi17DQotICAgIGludCBkZXZpY2VfdHlwZSA9IDo6R2V0RGV2aWNlQ2FwcyhoREMsIFRFQ0hOT0xPR1kpOw0KLSAgICBpbnQgb2JqX3R5cGUgPSA6OkdldE9iamVjdFR5cGUoaERDKTsNCi0gICAgaW50IGRldmljZV9jbGFzczsNCi0gICAgaWYgKGRldmljZV90eXBlID09IERUX1JBU1BSSU5URVIgfHwgZGV2aWNlX3R5cGUgPT0gRFRfUExPVFRFUiB8fCBvYmpfdHlwZSA9PSBPQkpfRU5ITUVUQURDKSB7DQotICAgICAgICBkZXZpY2VfY2xhc3MgPSBGWERDX1BSSU5URVI7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBkZXZpY2VfY2xhc3MgPSBGWERDX0RJU1BMQVk7DQotICAgIH0NCi0gICAgcmV0dXJuIEZYX05FVyBDR2RpRGlzcGxheURyaXZlcihoREMpOw0KLX0NCi1DRlhfV2luQml0bWFwRGV2aWNlOjpDRlhfV2luQml0bWFwRGV2aWNlKGludCB3aWR0aCwgaW50IGhlaWdodCwgRlhESUJfRm9ybWF0IGZvcm1hdCkNCi17DQotICAgIEJJVE1BUElORk9IRUFERVIgYm1paDsNCi0gICAgRlhTWVNfbWVtc2V0MzIoJmJtaWgsIDAsIHNpemVvZiAoQklUTUFQSU5GT0hFQURFUikpOw0KLSAgICBibWloLmJpU2l6ZSA9IHNpemVvZihCSVRNQVBJTkZPSEVBREVSKTsNCi0gICAgYm1paC5iaUJpdENvdW50ID0gZm9ybWF0ICYgMHhmZjsNCi0gICAgYm1paC5iaUhlaWdodCA9IC1oZWlnaHQ7DQotICAgIGJtaWguYmlQbGFuZXMgPSAxOw0KLSAgICBibWloLmJpV2lkdGggPSB3aWR0aDsNCi0gICAgRlhfTFBCWVRFIHBCdWZmZXI7DQotICAgIG1faEJpdG1hcCA9IENyZWF0ZURJQlNlY3Rpb24oTlVMTCwgKEJJVE1BUElORk8qKSZibWloLCBESUJfUkdCX0NPTE9SUywgKEZYX0xQVk9JRCopJnBCdWZmZXIsIE5VTEwsIDApOw0KLSAgICBpZiAobV9oQml0bWFwID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBDRlhfRElCaXRtYXAqIHBCaXRtYXAgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOw0KLSAgICBpZiAoIXBCaXRtYXApIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBwQml0bWFwLT5DcmVhdGUod2lkdGgsIGhlaWdodCwgZm9ybWF0LCBwQnVmZmVyKTsNCi0gICAgU2V0Qml0bWFwKHBCaXRtYXApOw0KLSAgICBtX2hEQyA9IDo6Q3JlYXRlQ29tcGF0aWJsZURDKE5VTEwpOw0KLSAgICBtX2hPbGRCaXRtYXAgPSAoSEJJVE1BUClTZWxlY3RPYmplY3QobV9oREMsIG1faEJpdG1hcCk7DQotICAgIElGWF9SZW5kZXJEZXZpY2VEcml2ZXIqIHBEcml2ZXIgPSBGWF9ORVcgQ0dkaURpc3BsYXlEcml2ZXIobV9oREMpOw0KLSAgICBpZiAoIXBEcml2ZXIpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBTZXREZXZpY2VEcml2ZXIocERyaXZlcik7DQotfQ0KLUNGWF9XaW5CaXRtYXBEZXZpY2U6On5DRlhfV2luQml0bWFwRGV2aWNlKCkNCi17DQotICAgIGlmIChtX2hEQykgew0KLSAgICAgICAgU2VsZWN0T2JqZWN0KG1faERDLCBtX2hPbGRCaXRtYXApOw0KLSAgICAgICAgRGVsZXRlREMobV9oREMpOw0KLSAgICB9DQotICAgIGlmIChtX2hCaXRtYXApIHsNCi0gICAgICAgIERlbGV0ZU9iamVjdChtX2hCaXRtYXApOw0KLSAgICB9DQotICAgIGRlbGV0ZSBHZXRCaXRtYXAoKTsNCi19DQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZS5oIgorI2lmIF9GWF9PU18gPT0gX0ZYX1dJTjMyX0RFU0tUT1BfIHx8IF9GWF9PU18gPT0gX0ZYX1dJTjY0XworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZV93aW4zMi5oIgorI2luY2x1ZGUgPGNydGRiZy5oPgorI2luY2x1ZGUgIi4uL2FnZy9pbmNsdWRlL2Z4ZnhfYWdnX2NsaXBfbGlhbmdfYmFyc2t5LmgiCisjaW5jbHVkZSAiZHdyaXRlX2ludC5oIgorI2luY2x1ZGUgIndpbjMyX2ludC5oIgorI2luY2x1ZGUgIi4uL2dlL3RleHRfaW50LmgiCisjaW5jbHVkZSAiLi4vZGliL2RpYl9pbnQuaCIKKyNpbmNsdWRlICIuLi9hZ2cvaW5jbHVkZS9meF9hZ2dfZHJpdmVyLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2ZyZWV0eXBlLmgiCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgiCitjbGFzcyBDV2luMzJGb250SW5mbyA6IHB1YmxpYyBJRlhfU3lzdGVtRm9udEluZm8KK3sKK3B1YmxpYzoKKyAgICBDV2luMzJGb250SW5mbygpOworICAgIH5DV2luMzJGb250SW5mbygpOworICAgIHZpcnR1YWwgdm9pZAkJUmVsZWFzZSgpOworICAgIHZpcnR1YWwJRlhfQk9PTAkJRW51bUZvbnRMaXN0KENGWF9Gb250TWFwcGVyKiBwTWFwcGVyKTsKKyAgICB2aXJ0dWFsIHZvaWQqCQlNYXBGb250KGludCB3ZWlnaHQsIEZYX0JPT0wgYkl0YWxpYywgaW50IGNoYXJzZXQsIGludCBwaXRjaF9mYW1pbHksIEZYX0xQQ1NUUiBmYWNlLCBGWF9CT09MJiBiRXhhY3QpOworICAgIHZpcnR1YWwgdm9pZCoJCUdldEZvbnQoRlhfTFBDU1RSIGZhY2UpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdmlydHVhbCBGWF9EV09SRAlHZXRGb250RGF0YSh2b2lkKiBoRm9udCwgRlhfRFdPUkQgdGFibGUsIEZYX0xQQllURSBidWZmZXIsIEZYX0RXT1JEIHNpemUpOworICAgIHZpcnR1YWwgdm9pZAkJRGVsZXRlRm9udCh2b2lkKiBoRm9udCk7CisgICAgdmlydHVhbAlGWF9CT09MCQlHZXRGYWNlTmFtZSh2b2lkKiBoRm9udCwgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUpOworICAgIHZpcnR1YWwgRlhfQk9PTAkJR2V0Rm9udENoYXJzZXQodm9pZCogaEZvbnQsIGludCYgY2hhcnNldCk7CisgICAgRlhfQk9PTAkJCQlJc09wZW5UeXBlRnJvbURpdihjb25zdCBMT0dGT05UQSAqcGxmKTsKKyAgICBGWF9CT09MCQkJCUlzU3VwcG9ydEZvbnRGb3JtRGl2KGNvbnN0IExPR0ZPTlRBKiBwbGYpOworICAgIHZvaWQJCQkJQWRkSW5zdGFsbGVkRm9udChjb25zdCBMT0dGT05UQSAqcGxmLCBGWF9EV09SRCBGb250VHlwZSk7CisgICAgdm9pZAkJCQlHZXRHQlByZWZlcmVuY2UoQ0ZYX0J5dGVTdHJpbmcmIGZhY2UsIGludCB3ZWlnaHQsIGludCBwaWN0aF9mYW1pbHkpOworICAgIHZvaWQJCQkJR2V0SmFwYW5lc2VQcmVmZXJlbmNlKENGWF9CeXRlU3RyaW5nJiBmYWNlLCBpbnQgd2VpZ2h0LCBpbnQgcGljdGhfZmFtaWx5KTsKKyAgICBDRlhfQnl0ZVN0cmluZwkJRmluZEZvbnQoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUpOworICAgIEhEQwkJCQkJbV9oREM7CisgICAgQ0ZYX0ZvbnRNYXBwZXIqCQltX3BNYXBwZXI7CisgICAgQ0ZYX0J5dGVTdHJpbmcJCW1fTGFzdEZhbWlseTsKKyAgICBDRlhfQnl0ZVN0cmluZwkJbV9LYWlUaSwgbV9GYW5nU29uZzsKK307CitDV2luMzJGb250SW5mbzo6Q1dpbjMyRm9udEluZm8oKQoreworICAgIG1faERDID0gQ3JlYXRlQ29tcGF0aWJsZURDKE5VTEwpOworfQorQ1dpbjMyRm9udEluZm86On5DV2luMzJGb250SW5mbygpCit7CisgICAgbV9wTWFwcGVyID0gTlVMTDsKK30KK3ZvaWQgQ1dpbjMyRm9udEluZm86OlJlbGVhc2UoKQoreworICAgIERlbGV0ZURDKG1faERDKTsKKyAgICBkZWxldGUgdGhpczsKK30KKyNkZWZpbmUgVFRfTUFLRV9UQUcoeDEsIHgyLCB4MywgeDQpICgoKEZYX0RXT1JEKXgxPDwyNCl8KChGWF9EV09SRCl4Mjw8MTYpfCgoRlhfRFdPUkQpeDM8PDgpfChGWF9EV09SRCl4NCkKK0ZYX0JPT0wgQ1dpbjMyRm9udEluZm86OklzT3BlblR5cGVGcm9tRGl2KGNvbnN0IExPR0ZPTlRBICpwbGYpCit7CisgICAgSEZPTlQgaEZvbnQgPSBDcmVhdGVGb250SW5kaXJlY3RBKHBsZik7CisgICAgRlhfQk9PTCByZXQgPSBGQUxTRTsKKyAgICBGWF9EV09SRCBmb250X3NpemUgID0gR2V0Rm9udERhdGEoaEZvbnQsIDAsIE5VTEwsIDApOworICAgIGlmIChmb250X3NpemUgIT0gR0RJX0VSUk9SICYmIGZvbnRfc2l6ZSA+PSBzaXplb2YoRlhfRFdPUkQpKSB7CisgICAgICAgIEZYX0RXT1JEIGxWZXJzaW9uID0gMDsKKyAgICAgICAgR2V0Rm9udERhdGEoaEZvbnQsIDAsIChGWF9CWVRFKikoJmxWZXJzaW9uKSwgc2l6ZW9mKEZYX0RXT1JEKSk7CisgICAgICAgIGxWZXJzaW9uID0gKCgoRlhfRFdPUkQpKEZYX0JZVEUpKGxWZXJzaW9uKSkgPDwgMjQpIHwgKChGWF9EV09SRCkoKEZYX0JZVEUpKGxWZXJzaW9uID4+IDgpKSkgPDwgMTYgfAorICAgICAgICAgICAgICAgICAgICgoRlhfRFdPUkQpKChGWF9CWVRFKShsVmVyc2lvbiA+PiAxNikpKSA8PCA4IHwgKChGWF9CWVRFKShsVmVyc2lvbiA+PiAyNCkpOworICAgICAgICBpZiAobFZlcnNpb24gPT0gVFRfTUFLRV9UQUcoJ08nLCAnVCcsICdUJywgJ08nKSB8fAorICAgICAgICAgICAgICAgIGxWZXJzaW9uID09IDB4MDAwMTAwMDAgfHwKKyAgICAgICAgICAgICAgICBsVmVyc2lvbiA9PSBUVF9NQUtFX1RBRygndCcsICd0JywgJ2MnLCAnZicpIHx8CisgICAgICAgICAgICAgICAgbFZlcnNpb24gPT0gVFRfTUFLRV9UQUcoJ3QnLCAncicsICd1JywgJ2UnKSB8fAorICAgICAgICAgICAgICAgIGxWZXJzaW9uID09IDB4MDAwMjAwMDApIHsKKyAgICAgICAgICAgIHJldCA9IFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgRGVsZXRlRm9udChoRm9udCk7CisgICAgcmV0dXJuIHJldDsKK30KK0ZYX0JPT0wgQ1dpbjMyRm9udEluZm86OklzU3VwcG9ydEZvbnRGb3JtRGl2KGNvbnN0IExPR0ZPTlRBKiBwbGYpCit7CisgICAgSEZPTlQgaEZvbnQgPSBDcmVhdGVGb250SW5kaXJlY3RBKHBsZik7CisgICAgRlhfQk9PTCByZXQgPSBGQUxTRTsKKyAgICBGWF9EV09SRCBmb250X3NpemUgID0gR2V0Rm9udERhdGEoaEZvbnQsIDAsIE5VTEwsIDApOworICAgIGlmIChmb250X3NpemUgIT0gR0RJX0VSUk9SICYmIGZvbnRfc2l6ZSA+PSBzaXplb2YoRlhfRFdPUkQpKSB7CisgICAgICAgIEZYX0RXT1JEIGxWZXJzaW9uID0gMDsKKyAgICAgICAgR2V0Rm9udERhdGEoaEZvbnQsIDAsIChGWF9CWVRFKikoJmxWZXJzaW9uKSwgc2l6ZW9mKEZYX0RXT1JEKSk7CisgICAgICAgIGxWZXJzaW9uID0gKCgoRlhfRFdPUkQpKEZYX0JZVEUpKGxWZXJzaW9uKSkgPDwgMjQpIHwgKChGWF9EV09SRCkoKEZYX0JZVEUpKGxWZXJzaW9uID4+IDgpKSkgPDwgMTYgfAorICAgICAgICAgICAgICAgICAgICgoRlhfRFdPUkQpKChGWF9CWVRFKShsVmVyc2lvbiA+PiAxNikpKSA8PCA4IHwgKChGWF9CWVRFKShsVmVyc2lvbiA+PiAyNCkpOworICAgICAgICBpZiAobFZlcnNpb24gPT0gVFRfTUFLRV9UQUcoJ08nLCAnVCcsICdUJywgJ08nKSB8fAorICAgICAgICAgICAgICAgIGxWZXJzaW9uID09IDB4MDAwMTAwMDAgfHwKKyAgICAgICAgICAgICAgICBsVmVyc2lvbiA9PSBUVF9NQUtFX1RBRygndCcsICd0JywgJ2MnLCAnZicpIHx8CisgICAgICAgICAgICAgICAgbFZlcnNpb24gPT0gVFRfTUFLRV9UQUcoJ3QnLCAncicsICd1JywgJ2UnKSB8fAorICAgICAgICAgICAgICAgIGxWZXJzaW9uID09IDB4MDAwMjAwMDApIHsKKyAgICAgICAgICAgIHJldCA9IFRSVUU7CisgICAgICAgIH0gZWxzZSBpZiAoKGxWZXJzaW9uICYgMHhGRkZGMDAwMCkgPT0gVFRfTUFLRV9UQUcoMHg4MCwgMHgwMSwgMHgwMCwgMHgwMCkgfHwKKyAgICAgICAgICAgICAgICAgICAobFZlcnNpb24gJiAweEZGRkYwMDAwKSA9PSBUVF9NQUtFX1RBRygnJScsICchJywgMCwgMCkpIHsKKyAgICAgICAgICAgIHJldCA9IFRSVUU7CisgICAgICAgIH0KKyAgICB9CisgICAgRGVsZXRlRm9udChoRm9udCk7CisgICAgcmV0dXJuIHJldDsKK30KK3ZvaWQgQ1dpbjMyRm9udEluZm86OkFkZEluc3RhbGxlZEZvbnQoY29uc3QgTE9HRk9OVEEgKnBsZiwgRlhfRFdPUkQgRm9udFR5cGUpCit7CisgICAgQ0ZYX0J5dGVTdHJpbmcgbmFtZShwbGYtPmxmRmFjZU5hbWUsIC0xKTsKKyAgICBpZiAobmFtZVswXSA9PSAnQCcpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobmFtZSA9PSBtX0xhc3RGYW1pbHkpIHsKKyAgICAgICAgbV9wTWFwcGVyLT5BZGRJbnN0YWxsZWRGb250KG5hbWUsIHBsZi0+bGZDaGFyU2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIShGb250VHlwZSAmIFRSVUVUWVBFX0ZPTlRUWVBFKSAmJiAhKEZvbnRUeXBlICYgREVWSUNFX0ZPTlRUWVBFKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghKEZvbnRUeXBlICYgVFJVRVRZUEVfRk9OVFRZUEUpKSB7CisgICAgICAgIGlmICghSXNTdXBwb3J0Rm9udEZvcm1EaXYocGxmKSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIG1fcE1hcHBlci0+QWRkSW5zdGFsbGVkRm9udChuYW1lLCBwbGYtPmxmQ2hhclNldCk7CisgICAgbV9MYXN0RmFtaWx5ID0gbmFtZTsKK30KK3N0YXRpYyBpbnQgQ0FMTEJBQ0sgRm9udEVudW1Qcm9jKAorICAgIGNvbnN0IExPR0ZPTlRBICpwbGYsCisgICAgY29uc3QgVEVYVE1FVFJJQ0EgKmxwbnRtZSwKKyAgICBGWF9EV09SRCBGb250VHlwZSwKKyAgICBMUEFSQU0gbFBhcmFtCispCit7CisgICAgQ1dpbjMyRm9udEluZm8qIHBGb250SW5mbyA9IChDV2luMzJGb250SW5mbyopbFBhcmFtOworICAgIGlmIChwRm9udEluZm8tPm1fcE1hcHBlci0+R2V0Rm9udEVudW1lcmF0b3IoKSkgeworICAgICAgICBwRm9udEluZm8tPm1fcE1hcHBlci0+R2V0Rm9udEVudW1lcmF0b3IoKS0+SGl0Rm9udCgpOworICAgIH0KKyAgICBwRm9udEluZm8tPkFkZEluc3RhbGxlZEZvbnQocGxmLCBGb250VHlwZSk7CisgICAgcmV0dXJuIDE7Cit9CitGWF9CT09MIENXaW4zMkZvbnRJbmZvOjpFbnVtRm9udExpc3QoQ0ZYX0ZvbnRNYXBwZXIqIHBNYXBwZXIpCit7CisgICAgbV9wTWFwcGVyID0gcE1hcHBlcjsKKyAgICBMT0dGT05UQSBsZjsKKyAgICBGWFNZU19tZW1zZXQzMigmbGYsIDAsIHNpemVvZihMT0dGT05UQSkpOworICAgIGxmLmxmQ2hhclNldCA9IERFRkFVTFRfQ0hBUlNFVDsKKyAgICBsZi5sZkZhY2VOYW1lWzBdID0gMDsKKyAgICBsZi5sZlBpdGNoQW5kRmFtaWx5ID0gMDsKKyAgICBFbnVtRm9udEZhbWlsaWVzRXhBKG1faERDLCAmbGYsIChGT05URU5VTVBST0NBKUZvbnRFbnVtUHJvYywgKEZYX1VJTlRQVFIpdGhpcywgMCk7CisgICAgaWYgKHBNYXBwZXItPkdldEZvbnRFbnVtZXJhdG9yKCkpIHsKKyAgICAgICAgcE1hcHBlci0+R2V0Rm9udEVudW1lcmF0b3IoKS0+RmluaXNoKCk7CisgICAgfQorICAgIHJldHVybiBUUlVFOworfQorc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgRlhfTFBDU1RSCW1fcEZhY2VOYW1lOworICAgIEZYX0xQQ1NUUgltX3BWYXJpYW50TmFtZTsKK30KK1ZhcmlhbnROYW1lc1tdID0geworICAgIHsiREZLYWktU0IiLCAiXHgxOVx4NkFceDc3XHg2OVx4RDRceDlBIn0sCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgRlhfTFBDU1RSCW1fcE5hbWU7CisgICAgRlhfTFBDU1RSCW1fcFdpbk5hbWU7CisgICAgRlhfQk9PTAkJbV9iQm9sZDsKKyAgICBGWF9CT09MCQltX2JJdGFsaWM7Cit9CitCYXNlMTRTdWJzdHNbXSA9IHsKKyAgICB7IkNvdXJpZXIiLCAiQ291cmllciBOZXciLCBGQUxTRSwgRkFMU0V9LAorICAgIHsiQ291cmllci1Cb2xkIiwgIkNvdXJpZXIgTmV3IiwgVFJVRSwgRkFMU0V9LAorICAgIHsiQ291cmllci1Cb2xkT2JsaXF1ZSIsICJDb3VyaWVyIE5ldyIsIFRSVUUsIFRSVUV9LAorICAgIHsiQ291cmllci1PYmxpcXVlIiwgIkNvdXJpZXIgTmV3IiwgRkFMU0UsIFRSVUV9LAorICAgIHsiSGVsdmV0aWNhIiwgIkFyaWFsIiwgRkFMU0UsIEZBTFNFfSwKKyAgICB7IkhlbHZldGljYS1Cb2xkIiwgIkFyaWFsIiwgVFJVRSwgRkFMU0V9LAorICAgIHsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIiwgIkFyaWFsIiwgVFJVRSwgVFJVRX0sCisgICAgeyJIZWx2ZXRpY2EtT2JsaXF1ZSIsICJBcmlhbCIsIEZBTFNFLCBUUlVFfSwKKyAgICB7IlRpbWVzLVJvbWFuIiwgIlRpbWVzIE5ldyBSb21hbiIsIEZBTFNFLCBGQUxTRX0sCisgICAgeyJUaW1lcy1Cb2xkIiwgIlRpbWVzIE5ldyBSb21hbiIsIFRSVUUsIEZBTFNFfSwKKyAgICB7IlRpbWVzLUJvbGRJdGFsaWMiLCAiVGltZXMgTmV3IFJvbWFuIiwgVFJVRSwgVFJVRX0sCisgICAgeyJUaW1lcy1JdGFsaWMiLCAiVGltZXMgTmV3IFJvbWFuIiwgRkFMU0UsIFRSVUV9LAorfTsKK0NGWF9CeXRlU3RyaW5nIENXaW4zMkZvbnRJbmZvOjpGaW5kRm9udChjb25zdCBDRlhfQnl0ZVN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobV9wTWFwcGVyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQorICAgIGludCBuRm9udHMgPSBtX3BNYXBwZXItPm1fSW5zdGFsbGVkVFRGb250cy5HZXRTaXplKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuRm9udHM7IGkgKyspIHsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgdGhpc25hbWUgPSBtX3BNYXBwZXItPm1fSW5zdGFsbGVkVFRGb250c1tpXTsKKyAgICAgICAgaWYgKHRoaXNuYW1lWzBdID09ICcgJykgeworICAgICAgICAgICAgaWYgKHRoaXNuYW1lLk1pZCgxLCBuYW1lLkdldExlbmd0aCgpKSA9PSBuYW1lKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcE1hcHBlci0+bV9JbnN0YWxsZWRUVEZvbnRzW2kgKyAxXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0aGlzbmFtZS5MZWZ0KG5hbWUuR2V0TGVuZ3RoKCkpID09IG5hbWUpIHsKKyAgICAgICAgICAgIHJldHVybiBtX3BNYXBwZXItPm1fSW5zdGFsbGVkVFRGb250c1tpXTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsKK30KK3N0cnVjdCBfRm9udE5hbWVNYXAgeworICAgIEZYX0xQQ1NUUgltX3BTdWJGb250TmFtZTsKKyAgICBGWF9MUENTVFIJbV9wU3JjRm9udE5hbWU7Cit9OworY29uc3QgX0ZvbnROYW1lTWFwIGdfSnBGb250TmFtZU1hcFtdID0geworICAgIHsiTVMgTWluY2hvIiwgIkhlaXNlaW1pbi1XMyJ9LAorICAgIHsiTVMgR290aGljIiwgIkp1bjEwMS1MaWdodCJ9LAorfTsKK2NvbnN0IF9Gb250TmFtZU1hcCBnX0diRm9udE5hbWVNYXBbMV07CitleHRlcm4gIkMiIHsKKyAgICBzdGF0aWMgaW50IGNvbXBhcmVTdHJpbmcoY29uc3Qgdm9pZCoga2V5LCBjb25zdCB2b2lkKiBlbGVtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZYU1lTX3N0cmljbXAoKEZYX0xQQ1NUUilrZXksICgoX0ZvbnROYW1lTWFwKillbGVtZW50KS0+bV9wU3JjRm9udE5hbWUpOworICAgIH0KK30KK0ZYX0JPT0wgX0dldFN1YkZvbnROYW1lKENGWF9CeXRlU3RyaW5nJiBuYW1lLCBpbnQgbGFuZykKK3sKKyAgICBpbnQgc2l6ZSA9IHNpemVvZiBnX0pwRm9udE5hbWVNYXA7CisgICAgdm9pZCogcEZvbnRuYW1lTWFwID0gKHZvaWQqKWdfSnBGb250TmFtZU1hcDsKKyAgICBpZiAobGFuZyA9PSAxKSB7CisgICAgICAgIHNpemUgPSBzaXplb2YgZ19HYkZvbnROYW1lTWFwOworICAgICAgICBwRm9udG5hbWVNYXAgPSAodm9pZCopZ19HYkZvbnROYW1lTWFwOworICAgIH0gZWxzZSBpZiAobGFuZyA9PSAyKSB7CisgICAgICAgIHNpemUgPSAwOworICAgIH0KKyAgICBfRm9udE5hbWVNYXAqIGZvdW5kID0gKF9Gb250TmFtZU1hcCopRlhTWVNfYnNlYXJjaCgoRlhfTFBDU1RSKW5hbWUsIHBGb250bmFtZU1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSAvIHNpemVvZiAoX0ZvbnROYW1lTWFwKSwgc2l6ZW9mIChfRm9udE5hbWVNYXApLCBjb21wYXJlU3RyaW5nKTsKKyAgICBpZiAoZm91bmQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIG5hbWUgPSBmb3VuZC0+bV9wU3ViRm9udE5hbWU7CisgICAgcmV0dXJuIFRSVUU7Cit9Cit2b2lkIENXaW4zMkZvbnRJbmZvOjpHZXRHQlByZWZlcmVuY2UoQ0ZYX0J5dGVTdHJpbmcmIGZhY2UsIGludCB3ZWlnaHQsIGludCBwaWN0aF9mYW1pbHkpCit7CisgICAgaWYgKGZhY2UuRmluZCgiS2FpVGkiKSA+PSAwIHx8IGZhY2UuRmluZCgiXHhiZlx4YWMiKSA+PSAwKSB7CisgICAgICAgIGlmIChtX0thaVRpLklzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9LYWlUaSA9IEZpbmRGb250KCJLYWlUaSIpOworICAgICAgICAgICAgaWYgKG1fS2FpVGkuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbV9LYWlUaSA9ICJTaW1TdW4iOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZhY2UgPSBtX0thaVRpOworICAgIH0gZWxzZSBpZiAoZmFjZS5GaW5kKCJGYW5nU29uZyIpID49IDAgfHwgZmFjZS5GaW5kKCJceGI3XHhjMlx4Y2JceGNlIikgPj0gMCkgeworICAgICAgICBpZiAobV9GYW5nU29uZy5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fRmFuZ1NvbmcgPSBGaW5kRm9udCgiRmFuZ1NvbmciKTsKKyAgICAgICAgICAgIGlmIChtX0ZhbmdTb25nLklzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIG1fRmFuZ1NvbmcgPSAiU2ltU3VuIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmYWNlID0gbV9GYW5nU29uZzsKKyAgICB9IGVsc2UgaWYgKGZhY2UuRmluZCgiU2ltU3VuIikgPj0gMCB8fCBmYWNlLkZpbmQoIlx4Y2JceGNlIikgPj0gMCkgeworICAgICAgICBmYWNlID0gIlNpbVN1biI7CisgICAgfSBlbHNlIGlmIChmYWNlLkZpbmQoIlNpbUhlaSIpID49IDAgfHwgZmFjZS5GaW5kKCJceGJhXHhkYSIpID49IDApIHsKKyAgICAgICAgZmFjZSA9ICJTaW1IZWkiOworICAgIH0gZWxzZSBpZiAoIShwaWN0aF9mYW1pbHkgJiBGRl9ST01BTikgJiYgd2VpZ2h0ID4gNTUwKSB7CisgICAgICAgIGZhY2UgPSAiU2ltSGVpIjsKKyAgICB9IGVsc2UgeworICAgICAgICBmYWNlID0gIlNpbVN1biI7CisgICAgfQorfQordm9pZCBDV2luMzJGb250SW5mbzo6R2V0SmFwYW5lc2VQcmVmZXJlbmNlKENGWF9CeXRlU3RyaW5nJiBmYWNlLCBpbnQgd2VpZ2h0LCBpbnQgcGljdGhfZmFtaWx5KQoreworICAgIGlmIChmYWNlLkZpbmQoIkdvdGhpYyIpID49IDAgfHwgZmFjZS5GaW5kKCJceDgzXHg1M1x4ODNceDU2XHg4M1x4NjJceDgzXHg0ZSIpID49IDApIHsKKyAgICAgICAgaWYgKGZhY2UuRmluZCgiUEdvdGhpYyIpID49IDAgfHwgZmFjZS5GaW5kKCJceDgyXHg2Zlx4ODNceDUzXHg4M1x4NTZceDgzXHg2Mlx4ODNceDRlIikgPj0gMCkgeworICAgICAgICAgICAgZmFjZSA9ICJNUyBQR290aGljIjsKKyAgICAgICAgfSBlbHNlIGlmIChmYWNlLkZpbmQoIlVJIEdvdGhpYyIpID49IDApIHsKKyAgICAgICAgICAgIGZhY2UgPSAiTVMgVUkgR290aGljIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChmYWNlLkZpbmQoIkhHU0dvdGhpY00iKSA+PSAwIHx8IGZhY2UuRmluZCgiSEdNYXJ1R290aGljTVBSTyIpID49IDApIHsKKyAgICAgICAgICAgICAgICBmYWNlID0gIk1TIFBHb3RoaWMiOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmYWNlID0gIk1TIEdvdGhpYyI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSBpZiAoZmFjZS5GaW5kKCJNaW5jaG8iKSA+PSAwIHx8IGZhY2UuRmluZCgiXHg5Nlx4YmVceDkyXHhhOSIpID49IDApIHsKKyAgICAgICAgaWYgKGZhY2UuRmluZCgiUE1pbmNobyIpID49IDAgfHwgZmFjZS5GaW5kKCJceDgyXHg2Zlx4OTZceGJlXHg5Mlx4YTkiKSA+PSAwKSB7CisgICAgICAgICAgICBmYWNlID0gIk1TIFBNaW5jaG8iOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZmFjZSA9ICJNUyBNaW5jaG8iOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKF9HZXRTdWJGb250TmFtZShmYWNlLCAwKSkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghKHBpY3RoX2ZhbWlseSAmIEZGX1JPTUFOKSAmJiB3ZWlnaHQgPiA0MDApIHsKKyAgICAgICAgZmFjZSA9ICJNUyBQR290aGljIjsKKyAgICB9IGVsc2UgeworICAgICAgICBmYWNlID0gIk1TIFBNaW5jaG8iOworICAgIH0KK30KK3ZvaWQqIENXaW4zMkZvbnRJbmZvOjpNYXBGb250KGludCB3ZWlnaHQsIEZYX0JPT0wgYkl0YWxpYywgaW50IGNoYXJzZXQsIGludCBwaXRjaF9mYW1pbHksIEZYX0xQQ1NUUiBjc3RyX2ZhY2UsIEZYX0JPT0wmIGJFeGFjdCkKK3sKKyAgICBDRlhfQnl0ZVN0cmluZyBmYWNlID0gY3N0cl9mYWNlOworICAgIGludCBpQmFzZUZvbnQ7CisgICAgZm9yIChpQmFzZUZvbnQgPSAwOyBpQmFzZUZvbnQgPCAxMjsgaUJhc2VGb250ICsrKQorICAgICAgICBpZiAoZmFjZSA9PSBDRlhfQnl0ZVN0cmluZ0MoQmFzZTE0U3Vic3RzW2lCYXNlRm9udF0ubV9wTmFtZSkpIHsKKyAgICAgICAgICAgIGZhY2UgPSBCYXNlMTRTdWJzdHNbaUJhc2VGb250XS5tX3BXaW5OYW1lOworICAgICAgICAgICAgd2VpZ2h0ID0gQmFzZTE0U3Vic3RzW2lCYXNlRm9udF0ubV9iQm9sZCA/IEZXX0JPTEQgOiBGV19OT1JNQUw7CisgICAgICAgICAgICBiSXRhbGljID0gQmFzZTE0U3Vic3RzW2lCYXNlRm9udF0ubV9iSXRhbGljOworICAgICAgICAgICAgYkV4YWN0ID0gVFJVRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgaWYgKGNoYXJzZXQgPT0gQU5TSV9DSEFSU0VUIHx8IGNoYXJzZXQgPT0gU1lNQk9MX0NIQVJTRVQpIHsKKyAgICAgICAgY2hhcnNldCA9IERFRkFVTFRfQ0hBUlNFVDsKKyAgICB9CisgICAgaW50IHN1YnN0X3BpdGNoX2ZhbWlseSA9IHBpdGNoX2ZhbWlseTsKKyAgICBzd2l0Y2ggKGNoYXJzZXQpIHsKKyAgICAgICAgY2FzZSBTSElGVEpJU19DSEFSU0VUOgorICAgICAgICAgICAgc3Vic3RfcGl0Y2hfZmFtaWx5ID0gRkZfUk9NQU47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDSElORVNFQklHNV9DSEFSU0VUOgorICAgICAgICBjYXNlIEhBTkdVTF9DSEFSU0VUOgorICAgICAgICBjYXNlIEdCMjMxMl9DSEFSU0VUOgorICAgICAgICAgICAgc3Vic3RfcGl0Y2hfZmFtaWx5ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBIRk9OVCBoRm9udCA9IDo6Q3JlYXRlRm9udEEoLTEwLCAwLCAwLCAwLCB3ZWlnaHQsIGJJdGFsaWMsIDAsIDAsIGNoYXJzZXQsIE9VVF9UVF9PTkxZX1BSRUNJUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgc3Vic3RfcGl0Y2hfZmFtaWx5LCBmYWNlKTsKKyAgICBjaGFyIGZhY2VidWZbMTAwXTsKKyAgICBIRk9OVCBoT2xkRm9udCA9IChIRk9OVCk6OlNlbGVjdE9iamVjdChtX2hEQywgaEZvbnQpOworICAgIGludCByZXQgPSA6OkdldFRleHRGYWNlQShtX2hEQywgMTAwLCBmYWNlYnVmKTsKKyAgICA6OlNlbGVjdE9iamVjdChtX2hEQywgaE9sZEZvbnQpOworICAgIGlmIChmYWNlLkVxdWFsTm9DYXNlKGZhY2VidWYpKSB7CisgICAgICAgIHJldHVybiBoRm9udDsKKyAgICB9CisgICAgaW50IGlDb3VudCA9IHNpemVvZihWYXJpYW50TmFtZXMpIC8gc2l6ZW9mKFZhcmlhbnROYW1lc1swXSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpQ291bnQ7ICsraSkgeworICAgICAgICBpZiAoZmFjZSA9PSBWYXJpYW50TmFtZXNbaV0ubV9wRmFjZU5hbWUpIHsKKyAgICAgICAgICAgIENGWF9XaWRlU3RyaW5nIHdzRmFjZSA9IENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoZmFjZWJ1Zik7CisgICAgICAgICAgICBDRlhfV2lkZVN0cmluZyB3c05hbWUgPSBDRlhfV2lkZVN0cmluZzo6RnJvbVVURjE2TEUoKGNvbnN0IHVuc2lnbmVkIHNob3J0KilWYXJpYW50TmFtZXNbaV0ubV9wVmFyaWFudE5hbWUpOworICAgICAgICAgICAgaWYgKHdzRmFjZSA9PSB3c05hbWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaEZvbnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgOjpEZWxldGVPYmplY3QoaEZvbnQpOworICAgIGlmIChjaGFyc2V0ID09IERFRkFVTFRfQ0hBUlNFVCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc3dpdGNoIChjaGFyc2V0KSB7CisgICAgICAgIGNhc2UgU0hJRlRKSVNfQ0hBUlNFVDoKKyAgICAgICAgICAgIEdldEphcGFuZXNlUHJlZmVyZW5jZShmYWNlLCB3ZWlnaHQsIHBpdGNoX2ZhbWlseSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHQjIzMTJfQ0hBUlNFVDoKKyAgICAgICAgICAgIEdldEdCUHJlZmVyZW5jZShmYWNlLCB3ZWlnaHQsIHBpdGNoX2ZhbWlseSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBIQU5HVUxfQ0hBUlNFVDoKKyAgICAgICAgICAgIGZhY2UgPSAiR3VsaW0iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ0hJTkVTRUJJRzVfQ0hBUlNFVDoKKyAgICAgICAgICAgIGlmIChmYWNlLkZpbmQoIk1TdW5nIikgPj0gMCkgeworICAgICAgICAgICAgICAgIGZhY2UgPSAiTWluZ0xpVSI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZhY2UgPSAiUE1pbmdMaVUiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGhGb250ID0gOjpDcmVhdGVGb250QSgtMTAsIDAsIDAsIDAsIHdlaWdodCwgYkl0YWxpYywgMCwgMCwgY2hhcnNldCwgT1VUX1RUX09OTFlfUFJFQ0lTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBzdWJzdF9waXRjaF9mYW1pbHksIGZhY2UpOworICAgIHJldHVybiBoRm9udDsKK30KK3ZvaWQgQ1dpbjMyRm9udEluZm86OkRlbGV0ZUZvbnQodm9pZCogaEZvbnQpCit7CisgICAgOjpEZWxldGVPYmplY3QoaEZvbnQpOworfQorRlhfRFdPUkQgQ1dpbjMyRm9udEluZm86OkdldEZvbnREYXRhKHZvaWQqIGhGb250LCBGWF9EV09SRCB0YWJsZSwgRlhfTFBCWVRFIGJ1ZmZlciwgRlhfRFdPUkQgc2l6ZSkKK3sKKyAgICBIRk9OVCBoT2xkRm9udCA9IChIRk9OVCk6OlNlbGVjdE9iamVjdChtX2hEQywgKEhGT05UKWhGb250KTsKKyAgICB0YWJsZSA9IEZYRFdPUkRfRlJPTV9NU0JGSVJTVCh0YWJsZSk7CisgICAgc2l6ZSA9IDo6R2V0Rm9udERhdGEobV9oREMsIHRhYmxlLCAwLCBidWZmZXIsIHNpemUpOworICAgIDo6U2VsZWN0T2JqZWN0KG1faERDLCBoT2xkRm9udCk7CisgICAgaWYgKHNpemUgPT0gR0RJX0VSUk9SKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gc2l6ZTsKK30KK0ZYX0JPT0wgQ1dpbjMyRm9udEluZm86OkdldEZhY2VOYW1lKHZvaWQqIGhGb250LCBDRlhfQnl0ZVN0cmluZyYgbmFtZSkKK3sKKyAgICBjaGFyIGZhY2VidWZbMTAwXTsKKyAgICBIRk9OVCBoT2xkRm9udCA9IChIRk9OVCk6OlNlbGVjdE9iamVjdChtX2hEQywgKEhGT05UKWhGb250KTsKKyAgICBpbnQgcmV0ID0gOjpHZXRUZXh0RmFjZUEobV9oREMsIDEwMCwgZmFjZWJ1Zik7CisgICAgOjpTZWxlY3RPYmplY3QobV9oREMsIGhPbGRGb250KTsKKyAgICBpZiAocmV0ID09IDApIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBuYW1lID0gZmFjZWJ1ZjsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ1dpbjMyRm9udEluZm86OkdldEZvbnRDaGFyc2V0KHZvaWQqIGhGb250LCBpbnQmIGNoYXJzZXQpCit7CisgICAgVEVYVE1FVFJJQyB0bTsKKyAgICBIRk9OVCBoT2xkRm9udCA9IChIRk9OVCk6OlNlbGVjdE9iamVjdChtX2hEQywgKEhGT05UKWhGb250KTsKKyAgICA6OkdldFRleHRNZXRyaWNzKG1faERDLCAmdG0pOworICAgIDo6U2VsZWN0T2JqZWN0KG1faERDLCBoT2xkRm9udCk7CisgICAgY2hhcnNldCA9IHRtLnRtQ2hhclNldDsKKyAgICByZXR1cm4gVFJVRTsKK30KKyNpZm5kZWYgX0ZQREZBUElfTUlOSV8KK0lGWF9TeXN0ZW1Gb250SW5mbyogSUZYX1N5c3RlbUZvbnRJbmZvOjpDcmVhdGVEZWZhdWx0KCkKK3sKKyAgICByZXR1cm4gRlhfTkVXIENXaW4zMkZvbnRJbmZvOworfQorI2VuZGlmCit2b2lkIENGWF9HRU1vZHVsZTo6SW5pdFBsYXRmb3JtKCkKK3sKKyAgICBDV2luMzJQbGF0Zm9ybSogcFBsYXRmb3JtRGF0YSA9IEZYX05FVyBDV2luMzJQbGF0Zm9ybTsKKyAgICBpZiAoIXBQbGF0Zm9ybURhdGEpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBPU1ZFUlNJT05JTkZPIHZlcjsKKyAgICB2ZXIuZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZih2ZXIpOworICAgIEdldFZlcnNpb25FeCgmdmVyKTsKKyAgICBwUGxhdGZvcm1EYXRhLT5tX2JIYWxmVG9uZSA9IHZlci5kd01ham9yVmVyc2lvbiA+PSA1OworICAgIHBQbGF0Zm9ybURhdGEtPm1fR2RpcGx1c0V4dC5Mb2FkKCk7CisgICAgbV9wUGxhdGZvcm1EYXRhID0gcFBsYXRmb3JtRGF0YTsKKyAgICBtX3BGb250TWdyLT5TZXRTeXN0ZW1Gb250SW5mbyhJRlhfU3lzdGVtRm9udEluZm86OkNyZWF0ZURlZmF1bHQoKSk7Cit9Cit2b2lkIENGWF9HRU1vZHVsZTo6RGVzdHJveVBsYXRmb3JtKCkKK3sKKyAgICBpZiAobV9wUGxhdGZvcm1EYXRhKSB7CisgICAgICAgIGRlbGV0ZSAoQ1dpbjMyUGxhdGZvcm0qKW1fcFBsYXRmb3JtRGF0YTsKKyAgICB9CisgICAgbV9wUGxhdGZvcm1EYXRhID0gTlVMTDsKK30KK0NHZGlEZXZpY2VEcml2ZXI6OkNHZGlEZXZpY2VEcml2ZXIoSERDIGhEQywgaW50IGRldmljZV9jbGFzcykKK3sKKyAgICBtX2hEQyA9IGhEQzsKKyAgICBtX0RldmljZUNsYXNzID0gZGV2aWNlX2NsYXNzOworICAgIENXaW4zMlBsYXRmb3JtKiBwUGxhdGZvcm0gPSAoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpOworICAgIFNldFN0cmV0Y2hCbHRNb2RlKGhEQywgcFBsYXRmb3JtLT5tX2JIYWxmVG9uZSA/IEhBTEZUT05FIDogQ09MT1JPTkNPTE9SKTsKKyAgICBpZiAoR2V0T2JqZWN0VHlwZShtX2hEQykgPT0gT0JKX01FTURDKSB7CisgICAgICAgIEhCSVRNQVAgaEJpdG1hcCA9IENyZWF0ZUJpdG1hcCgxLCAxLCAxLCAxLCBOVUxMKTsKKyAgICAgICAgaEJpdG1hcCA9IChIQklUTUFQKVNlbGVjdE9iamVjdChtX2hEQywgaEJpdG1hcCk7CisgICAgICAgIEJJVE1BUCBiaXRtYXA7CisgICAgICAgIEdldE9iamVjdChoQml0bWFwLCBzaXplb2YgYml0bWFwLCAmYml0bWFwKTsKKyAgICAgICAgbV9uQml0c1BlclBpeGVsID0gYml0bWFwLmJtQml0c1BpeGVsOworICAgICAgICBtX1dpZHRoID0gYml0bWFwLmJtV2lkdGg7CisgICAgICAgIG1fSGVpZ2h0ID0gYWJzKGJpdG1hcC5ibUhlaWdodCk7CisgICAgICAgIGhCaXRtYXAgPSAoSEJJVE1BUClTZWxlY3RPYmplY3QobV9oREMsIGhCaXRtYXApOworICAgICAgICBEZWxldGVPYmplY3QoaEJpdG1hcCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9uQml0c1BlclBpeGVsID0gOjpHZXREZXZpY2VDYXBzKG1faERDLCBCSVRTUElYRUwpOworICAgICAgICBtX1dpZHRoID0gOjpHZXREZXZpY2VDYXBzKG1faERDLCBIT1JaUkVTKTsKKyAgICAgICAgbV9IZWlnaHQgPSA6OkdldERldmljZUNhcHMobV9oREMsIFZFUlRSRVMpOworICAgIH0KKyAgICBpZiAobV9EZXZpY2VDbGFzcyAhPSBGWERDX0RJU1BMQVkpIHsKKyAgICAgICAgbV9SZW5kZXJDYXBzID0gRlhSQ19CSVRfTUFTSzsKKyAgICB9IGVsc2UgeworICAgICAgICBtX1JlbmRlckNhcHMgPSBGWFJDX0dFVF9CSVRTIHwgRlhSQ19CSVRfTUFTSzsKKyAgICB9Cit9CitpbnQgQ0dkaURldmljZURyaXZlcjo6R2V0RGV2aWNlQ2FwcyhpbnQgY2Fwc19pZCkKK3sKKyAgICBzd2l0Y2ggKGNhcHNfaWQpIHsKKyAgICAgICAgY2FzZSBGWERDX0RFVklDRV9DTEFTUzoKKyAgICAgICAgICAgIHJldHVybiBtX0RldmljZUNsYXNzOworICAgICAgICBjYXNlIEZYRENfUElYRUxfV0lEVEg6CisgICAgICAgICAgICByZXR1cm4gbV9XaWR0aDsKKyAgICAgICAgY2FzZSBGWERDX1BJWEVMX0hFSUdIVDoKKyAgICAgICAgICAgIHJldHVybiBtX0hlaWdodDsKKyAgICAgICAgY2FzZSBGWERDX0JJVFNfUElYRUw6CisgICAgICAgICAgICByZXR1cm4gbV9uQml0c1BlclBpeGVsOworICAgICAgICBjYXNlIEZYRENfUkVOREVSX0NBUFM6CisgICAgICAgICAgICByZXR1cm4gbV9SZW5kZXJDYXBzOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KK0ZYX0xQVk9JRCBDR2RpRGV2aWNlRHJpdmVyOjpHZXRDbGlwUmduKCkKK3sKKyAgICBIUkdOIGhDbGlwUmduID0gQ3JlYXRlUmVjdFJnbigwLCAwLCAxLCAxKTsKKyAgICBpZiAoOjpHZXRDbGlwUmduKG1faERDLCBoQ2xpcFJnbikgPT0gMCkgeworICAgICAgICBEZWxldGVPYmplY3QoaENsaXBSZ24pOworICAgICAgICBoQ2xpcFJnbiA9IE5VTEw7CisgICAgfQorICAgIHJldHVybiAoRlhfTFBWT0lEKWhDbGlwUmduOworfQorRlhfQk9PTCBDR2RpRGV2aWNlRHJpdmVyOjpHRElfU2V0RElCaXRzKGNvbnN0IENGWF9ESUJpdG1hcCogcEJpdG1hcDEsIGNvbnN0IEZYX1JFQ1QqIHBTcmNSZWN0LCBpbnQgbGVmdCwgaW50IHRvcCwgdm9pZCogcEljY1RyYW5zZm9ybSkKK3sKKyAgICBpZiAobV9EZXZpY2VDbGFzcyA9PSBGWERDX1BSSU5URVIpIHsKKyAgICAgICAgQ0ZYX0RJQml0bWFwKiBwQml0bWFwID0gcEJpdG1hcDEtPkZsaXBJbWFnZShGQUxTRSwgVFJVRSk7CisgICAgICAgIGlmIChwQml0bWFwID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHBCaXRtYXAtPklzQ215a0ltYWdlKCkgfHwgcEljY1RyYW5zZm9ybSkgJiYKKyAgICAgICAgICAgICAgICAhcEJpdG1hcC0+Q29udmVydEZvcm1hdChGWERJQl9SZ2IsIHBJY2NUcmFuc2Zvcm0pKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgaW50IHdpZHRoID0gcFNyY1JlY3QtPldpZHRoKCksIGhlaWdodCA9IHBTcmNSZWN0LT5IZWlnaHQoKTsKKyAgICAgICAgaW50IHBpdGNoID0gcEJpdG1hcC0+R2V0UGl0Y2goKTsKKyAgICAgICAgTFBCWVRFIHBCdWZmZXIgPSBwQml0bWFwLT5HZXRCdWZmZXIoKTsKKyAgICAgICAgQ0ZYX0J5dGVTdHJpbmcgaW5mbyA9IENGWF9XaW5kb3dzRElCOjpHZXRCaXRtYXBJbmZvKHBCaXRtYXApOworICAgICAgICAoKEJJVE1BUElORk9IRUFERVIqKShGWF9MUENTVFIpaW5mbyktPmJpSGVpZ2h0ICo9IC0xOworICAgICAgICBGWF9SRUNUIGRzdF9yZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBkc3RfcmVjdC5JbnRlcnNlY3QoMCwgMCwgcEJpdG1hcC0+R2V0V2lkdGgoKSwgcEJpdG1hcC0+R2V0SGVpZ2h0KCkpOworICAgICAgICBpbnQgZHN0X3dpZHRoID0gZHN0X3JlY3QuV2lkdGgoKTsKKyAgICAgICAgaW50IGRzdF9oZWlnaHQgPSBkc3RfcmVjdC5IZWlnaHQoKTsKKyAgICAgICAgOjpTdHJldGNoRElCaXRzKG1faERDLCBsZWZ0LCB0b3AsIGRzdF93aWR0aCwgZHN0X2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIGRzdF93aWR0aCwgZHN0X2hlaWdodCwgcEJ1ZmZlciwgKEJJVE1BUElORk8qKShGWF9MUENTVFIpaW5mbywgRElCX1JHQl9DT0xPUlMsIFNSQ0NPUFkpOworICAgICAgICBkZWxldGUgcEJpdG1hcDsKKyAgICB9IGVsc2UgeworICAgICAgICBDRlhfRElCaXRtYXAqIHBCaXRtYXAgPSAoQ0ZYX0RJQml0bWFwKilwQml0bWFwMTsKKyAgICAgICAgaWYgKChwQml0bWFwLT5Jc0NteWtJbWFnZSgpIHx8IHBJY2NUcmFuc2Zvcm0pICYmCisgICAgICAgICAgICAgICAgKHBCaXRtYXAgPSBwQml0bWFwLT5DbG9uZUNvbnZlcnQoRlhESUJfUmdiLCBOVUxMLCBwSWNjVHJhbnNmb3JtKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGludCB3aWR0aCA9IHBTcmNSZWN0LT5XaWR0aCgpLCBoZWlnaHQgPSBwU3JjUmVjdC0+SGVpZ2h0KCk7CisgICAgICAgIGludCBwaXRjaCA9IHBCaXRtYXAtPkdldFBpdGNoKCk7CisgICAgICAgIExQQllURSBwQnVmZmVyID0gcEJpdG1hcC0+R2V0QnVmZmVyKCk7CisgICAgICAgIENGWF9CeXRlU3RyaW5nIGluZm8gPSBDRlhfV2luZG93c0RJQjo6R2V0Qml0bWFwSW5mbyhwQml0bWFwKTsKKyAgICAgICAgOjpTZXRESUJpdHNUb0RldmljZShtX2hEQywgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0LCBwU3JjUmVjdC0+bGVmdCwgcEJpdG1hcC0+R2V0SGVpZ2h0KCkgLSBwU3JjUmVjdC0+Ym90dG9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHBCaXRtYXAtPkdldEhlaWdodCgpLCBwQnVmZmVyLCAoQklUTUFQSU5GTyopKEZYX0xQQ1NUUilpbmZvLCBESUJfUkdCX0NPTE9SUyk7CisgICAgICAgIGlmIChwQml0bWFwICE9IHBCaXRtYXAxKSB7CisgICAgICAgICAgICBkZWxldGUgcEJpdG1hcDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0dkaURldmljZURyaXZlcjo6R0RJX1N0cmV0Y2hESUJpdHMoY29uc3QgQ0ZYX0RJQml0bWFwKiBwQml0bWFwMSwgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLAorICAgICAgICBpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0LCBGWF9EV09SRCBmbGFncywgdm9pZCogcEljY1RyYW5zZm9ybSkKK3sKKyAgICBDRlhfRElCaXRtYXAqIHBCaXRtYXAgPSAoQ0ZYX0RJQml0bWFwKilwQml0bWFwMTsKKyAgICBpZiAocEJpdG1hcCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKChwQml0bWFwLT5Jc0NteWtJbWFnZSgpIHx8IHBJY2NUcmFuc2Zvcm0pICYmCisgICAgICAgICAgICAhcEJpdG1hcC0+Q29udmVydEZvcm1hdChGWERJQl9SZ2IsIHBJY2NUcmFuc2Zvcm0pKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgQ0ZYX0J5dGVTdHJpbmcgaW5mbyA9IENGWF9XaW5kb3dzRElCOjpHZXRCaXRtYXBJbmZvKHBCaXRtYXApOworICAgIGlmIChhYnMoZGVzdF93aWR0aCkgKiBhYnMoZGVzdF9oZWlnaHQpIDwgcEJpdG1hcDEtPkdldFdpZHRoKCkgKiBwQml0bWFwMS0+R2V0SGVpZ2h0KCkgKiA0IHx8CisgICAgICAgICAgICAoZmxhZ3MgJiBGWERJQl9JTlRFUlBPTCkgfHwgKGZsYWdzICYgRlhESUJfQklDVUJJQ19JTlRFUlBPTCkpIHsKKyAgICAgICAgU2V0U3RyZXRjaEJsdE1vZGUobV9oREMsIEhBTEZUT05FKTsKKyAgICB9IGVsc2UgeworICAgICAgICBTZXRTdHJldGNoQmx0TW9kZShtX2hEQywgQ09MT1JPTkNPTE9SKTsKKyAgICB9CisgICAgQ0ZYX0RJQml0bWFwKiBwVG9TdHJlY2hCaXRtYXAgPSBwQml0bWFwOworICAgIGJvb2wgZGVsID0gZmFsc2U7CisgICAgaWYgKG1fRGV2aWNlQ2xhc3MgPT0gRlhEQ19QUklOVEVSICYmIChwQml0bWFwLT5HZXRXaWR0aCgpICogcEJpdG1hcC0+R2V0SGVpZ2h0KCkgPiBhYnMoZGVzdF93aWR0aCkgKiBhYnMoZGVzdF9oZWlnaHQpKSkgeworICAgICAgICBwVG9TdHJlY2hCaXRtYXAgPSBwQml0bWFwLT5TdHJldGNoVG8oZGVzdF93aWR0aCwgZGVzdF9oZWlnaHQpOworICAgICAgICBkZWwgPSB0cnVlOworICAgIH0KKyAgICBDRlhfQnl0ZVN0cmluZyB0b1N0cmVjaEJpdG1hcEluZm8gPSBDRlhfV2luZG93c0RJQjo6R2V0Qml0bWFwSW5mbyhwVG9TdHJlY2hCaXRtYXApOworICAgIDo6U3RyZXRjaERJQml0cyhtX2hEQywgZGVzdF9sZWZ0LCBkZXN0X3RvcCwgZGVzdF93aWR0aCwgZGVzdF9oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgIDAsIDAsIHBUb1N0cmVjaEJpdG1hcC0+R2V0V2lkdGgoKSwgcFRvU3RyZWNoQml0bWFwLT5HZXRIZWlnaHQoKSwgcFRvU3RyZWNoQml0bWFwLT5HZXRCdWZmZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgKEJJVE1BUElORk8qKShGWF9MUENTVFIpdG9TdHJlY2hCaXRtYXBJbmZvLCBESUJfUkdCX0NPTE9SUywgU1JDQ09QWSk7CisgICAgaWYgKGRlbCkgeworICAgICAgICBkZWxldGUgcFRvU3RyZWNoQml0bWFwOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0dkaURldmljZURyaXZlcjo6R0RJX1N0cmV0Y2hCaXRNYXNrKGNvbnN0IENGWF9ESUJpdG1hcCogcEJpdG1hcDEsIGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwKKyAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgRlhfRFdPUkQgYml0bWFwX2NvbG9yLCBGWF9EV09SRCBmbGFncywKKyAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pCit7CisgICAgQ0ZYX0RJQml0bWFwKiBwQml0bWFwID0gKENGWF9ESUJpdG1hcCopcEJpdG1hcDE7CisgICAgaWYgKHBCaXRtYXAgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIF9Db2xvcjJBcmdiKGJpdG1hcF9jb2xvciwgYml0bWFwX2NvbG9yLCBhbHBoYV9mbGFnIHwgKDEgPDwgMjQpLCBwSWNjVHJhbnNmb3JtKTsKKyAgICBpbnQgd2lkdGggPSBwQml0bWFwLT5HZXRXaWR0aCgpLCBoZWlnaHQgPSBwQml0bWFwLT5HZXRIZWlnaHQoKTsKKyAgICBzdHJ1Y3QgeworICAgICAgICBCSVRNQVBJTkZPSEVBREVSCWJtaUhlYWRlcjsKKyAgICAgICAgRlhfRFdPUkQJCQlibWlDb2xvcnNbMl07CisgICAgfSBibWk7CisgICAgRlhTWVNfbWVtc2V0MzIoJmJtaS5ibWlIZWFkZXIsIDAsIHNpemVvZiAoQklUTUFQSU5GT0hFQURFUikpOworICAgIGJtaS5ibWlIZWFkZXIuYmlTaXplID0gc2l6ZW9mKEJJVE1BUElORk9IRUFERVIpOworICAgIGJtaS5ibWlIZWFkZXIuYmlCaXRDb3VudCA9IDE7CisgICAgYm1pLmJtaUhlYWRlci5iaUNvbXByZXNzaW9uID0gQklfUkdCOworICAgIGJtaS5ibWlIZWFkZXIuYmlIZWlnaHQgPSAtaGVpZ2h0OworICAgIGJtaS5ibWlIZWFkZXIuYmlQbGFuZXMgPSAxOworICAgIGJtaS5ibWlIZWFkZXIuYmlXaWR0aCA9IHdpZHRoOworICAgIGlmIChtX25CaXRzUGVyUGl4ZWwgIT0gMSkgeworICAgICAgICBTZXRTdHJldGNoQmx0TW9kZShtX2hEQywgSEFMRlRPTkUpOworICAgIH0KKyAgICBibWkuYm1pQ29sb3JzWzBdID0gMHhmZmZmZmY7CisgICAgYm1pLmJtaUNvbG9yc1sxXSA9IDA7CisgICAgOjpTdHJldGNoRElCaXRzKG1faERDLCBkZXN0X2xlZnQsIGRlc3RfdG9wLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgMCwgMCwgd2lkdGgsIGhlaWdodCwgcEJpdG1hcC0+R2V0QnVmZmVyKCksIChCSVRNQVBJTkZPKikmYm1pLCBESUJfUkdCX0NPTE9SUywgU1JDQU5EKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0JPT0wgQ0dkaURldmljZURyaXZlcjo6R2V0Q2xpcEJveChGWF9SRUNUKiBwUmVjdCkKK3sKKyAgICByZXR1cm4gOjpHZXRDbGlwQm94KG1faERDLCAoUkVDVCopcFJlY3QpOworfQorRlhfQk9PTCBDR2RpRGV2aWNlRHJpdmVyOjpTZXRDbGlwUmduKEZYX0xQVk9JRCBoUmduKQoreworICAgIDo6U2VsZWN0Q2xpcFJnbihtX2hEQywgKEhSR04paFJnbik7CisgICAgcmV0dXJuIFRSVUU7Cit9CitzdGF0aWMgSFBFTiBfQ3JlYXRlUGVuKGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIEZYX0RXT1JEIGFyZ2IpCit7CisgICAgRlhfRkxPQVQgd2lkdGg7CisgICAgRlhfRkxPQVQgc2NhbGUgPSAxLmY7CisgICAgaWYgKHBNYXRyaXgpCisgICAgICAgIHNjYWxlID0gRlhTWVNfZmFicyhwTWF0cml4LT5hKSA+IEZYU1lTX2ZhYnMocE1hdHJpeC0+YikgPworICAgICAgICAgICAgICAgIEZYU1lTX2ZhYnMocE1hdHJpeC0+YSkgOiBGWFNZU19mYWJzKHBNYXRyaXgtPmIpOworICAgIGlmIChwR3JhcGhTdGF0ZSkgeworICAgICAgICB3aWR0aCA9IHNjYWxlICogcEdyYXBoU3RhdGUtPm1fTGluZVdpZHRoOworICAgIH0gZWxzZSB7CisgICAgICAgIHdpZHRoID0gMS4wZjsKKyAgICB9CisgICAgRlhfRFdPUkQgUGVuU3R5bGUgPSBQU19HRU9NRVRSSUM7CisgICAgaWYgKHdpZHRoIDwgMSkgeworICAgICAgICB3aWR0aCA9IDE7CisgICAgfQorICAgIGlmKHBHcmFwaFN0YXRlLT5tX0Rhc2hDb3VudCkgeworICAgICAgICBQZW5TdHlsZSB8PSBQU19VU0VSU1RZTEU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUGVuU3R5bGUgfD0gUFNfU09MSUQ7CisgICAgfQorICAgIHN3aXRjaChwR3JhcGhTdGF0ZS0+bV9MaW5lQ2FwKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIFBlblN0eWxlIHw9IFBTX0VORENBUF9GTEFUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIFBlblN0eWxlIHw9IFBTX0VORENBUF9ST1VORDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBQZW5TdHlsZSB8PSBQU19FTkRDQVBfU1FVQVJFOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHN3aXRjaChwR3JhcGhTdGF0ZS0+bV9MaW5lSm9pbikgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBQZW5TdHlsZSB8PSBQU19KT0lOX01JVEVSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIFBlblN0eWxlIHw9IFBTX0pPSU5fUk9VTkQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgUGVuU3R5bGUgfD0gUFNfSk9JTl9CRVZFTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpbnQgYTsKKyAgICBGWF9DT0xPUlJFRiByZ2I7CisgICAgQXJnYkRlY29kZShhcmdiLCBhLCByZ2IpOworICAgIExPR0JSVVNIIGxiOworICAgIGxiLmxiQ29sb3IgPSByZ2I7CisgICAgbGIubGJTdHlsZSA9IEJTX1NPTElEOworICAgIGxiLmxiSGF0Y2ggPSAwOworICAgIEZYX0RXT1JEKiBwRGFzaCA9IE5VTEw7CisgICAgaWYgKHBHcmFwaFN0YXRlLT5tX0Rhc2hDb3VudCkgeworICAgICAgICBwRGFzaCA9IEZYX0FsbG9jKEZYX0RXT1JELCBwR3JhcGhTdGF0ZS0+bV9EYXNoQ291bnQpOworICAgICAgICBpZiAoIXBEYXNoKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBHcmFwaFN0YXRlLT5tX0Rhc2hDb3VudDsgaSArKykgeworICAgICAgICAgICAgcERhc2hbaV0gPSBGWFNZU19yb3VuZChwTWF0cml4ID8gcE1hdHJpeC0+VHJhbnNmb3JtRGlzdGFuY2UocEdyYXBoU3RhdGUtPm1fRGFzaEFycmF5W2ldKSA6IHBHcmFwaFN0YXRlLT5tX0Rhc2hBcnJheVtpXSk7CisgICAgICAgICAgICBpZiAocERhc2hbaV0gPCAxKSB7CisgICAgICAgICAgICAgICAgcERhc2hbaV0gPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIEhQRU4gaFBlbiA9IEV4dENyZWF0ZVBlbihQZW5TdHlsZSwgKERXT1JEKUZYU1lTX2NlaWwod2lkdGgpLCAmbGIsIHBHcmFwaFN0YXRlLT5tX0Rhc2hDb3VudCwgKGNvbnN0IERXT1JEKilwRGFzaCk7CisgICAgaWYgKHBEYXNoKSB7CisgICAgICAgIEZYX0ZyZWUocERhc2gpOworICAgIH0KKyAgICByZXR1cm4gaFBlbjsKK30KK3N0YXRpYyBIQlJVU0ggX0NyZWF0ZUJydXNoKEZYX0RXT1JEIGFyZ2IpCit7CisgICAgaW50IGE7CisgICAgRlhfQ09MT1JSRUYgcmdiOworICAgIEFyZ2JEZWNvZGUoYXJnYiwgYSwgcmdiKTsKKyAgICByZXR1cm4gQ3JlYXRlU29saWRCcnVzaChyZ2IpOworfQorc3RhdGljIHZvaWQgX1NldFBhdGhUb0RDKEhEQyBoREMsIGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4KQoreworICAgIEJlZ2luUGF0aChoREMpOworICAgIGludCBuUG9pbnRzID0gcFBhdGhEYXRhLT5HZXRQb2ludENvdW50KCk7CisgICAgRlhfUEFUSFBPSU5UKiBwUG9pbnRzID0gcFBhdGhEYXRhLT5HZXRQb2ludHMoKTsKKyAgICBmb3IoaW50IGkgPSAwOyBpIDwgblBvaW50czsgaSsrKSB7CisgICAgICAgIEZYX0ZMT0FUIHBvc3ggPSBwUG9pbnRzW2ldLm1fUG9pbnRYLCBwb3N5ID0gcFBvaW50c1tpXS5tX1BvaW50WTsKKyAgICAgICAgaWYgKHBNYXRyaXgpIHsKKyAgICAgICAgICAgIHBNYXRyaXgtPlRyYW5zZm9ybShwb3N4LCBwb3N5KTsKKyAgICAgICAgfQorICAgICAgICBpbnQgc2NyZWVuX3ggPSBGWFNZU19yb3VuZChwb3N4KSwgc2NyZWVuX3kgPSBGWFNZU19yb3VuZChwb3N5KTsKKyAgICAgICAgaW50IHBvaW50X3R5cGUgPSBwUG9pbnRzW2ldLm1fRmxhZyAmIEZYUFRfVFlQRTsKKyAgICAgICAgaWYocG9pbnRfdHlwZSA9PSBQVF9NT1ZFVE8pIHsKKyAgICAgICAgICAgIE1vdmVUb0V4KGhEQywgc2NyZWVuX3gsIHNjcmVlbl95LCBOVUxMKTsKKyAgICAgICAgfSBlbHNlIGlmKHBvaW50X3R5cGUgPT0gUFRfTElORVRPKSB7CisgICAgICAgICAgICBpZiAocFBvaW50c1tpXS5tX1BvaW50WSA9PSBwUG9pbnRzW2kgLSAxXS5tX1BvaW50WSAmJiBwUG9pbnRzW2ldLm1fUG9pbnRYID09IHBQb2ludHNbaSAtIDFdLm1fUG9pbnRYKSB7CisgICAgICAgICAgICAgICAgc2NyZWVuX3ggKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBMaW5lVG8oaERDLCBzY3JlZW5feCwgc2NyZWVuX3kpOworICAgICAgICB9IGVsc2UgaWYocG9pbnRfdHlwZSA9PSBQVF9CRVpJRVJUTykgeworICAgICAgICAgICAgUE9JTlQgbHBwdFszXTsKKyAgICAgICAgICAgIGxwcHRbMF0ueCA9IHNjcmVlbl94OworICAgICAgICAgICAgbHBwdFswXS55ID0gc2NyZWVuX3k7CisgICAgICAgICAgICBwb3N4ID0gcFBvaW50c1tpICsgMV0ubV9Qb2ludFg7CisgICAgICAgICAgICBwb3N5ID0gcFBvaW50c1tpICsgMV0ubV9Qb2ludFk7CisgICAgICAgICAgICBpZiAocE1hdHJpeCkgeworICAgICAgICAgICAgICAgIHBNYXRyaXgtPlRyYW5zZm9ybShwb3N4LCBwb3N5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxwcHRbMV0ueCA9IEZYU1lTX3JvdW5kKHBvc3gpOworICAgICAgICAgICAgbHBwdFsxXS55ID0gRlhTWVNfcm91bmQocG9zeSk7CisgICAgICAgICAgICBwb3N4ID0gcFBvaW50c1tpICsgMl0ubV9Qb2ludFg7CisgICAgICAgICAgICBwb3N5ID0gcFBvaW50c1tpICsgMl0ubV9Qb2ludFk7CisgICAgICAgICAgICBpZiAocE1hdHJpeCkgeworICAgICAgICAgICAgICAgIHBNYXRyaXgtPlRyYW5zZm9ybShwb3N4LCBwb3N5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxwcHRbMl0ueCA9IEZYU1lTX3JvdW5kKHBvc3gpOworICAgICAgICAgICAgbHBwdFsyXS55ID0gRlhTWVNfcm91bmQocG9zeSk7CisgICAgICAgICAgICBQb2x5QmV6aWVyVG8oaERDLCBscHB0LCAzKTsKKyAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgfQorICAgICAgICBpZiAocFBvaW50c1tpXS5tX0ZsYWcgJiBQVF9DTE9TRUZJR1VSRSkgeworICAgICAgICAgICAgQ2xvc2VGaWd1cmUoaERDKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBFbmRQYXRoKGhEQyk7Cit9Cit2b2lkIENHZGlEZXZpY2VEcml2ZXI6OkRyYXdMaW5lKEZYX0ZMT0FUIHgxLCBGWF9GTE9BVCB5MSwgRlhfRkxPQVQgeDIsIEZYX0ZMT0FUIHkyKQoreworICAgIGludCBmbGFnMSA9ICh4MSA8IDApIHwgKCh4MSA+IG1fV2lkdGgpIDw8IDEpIHwgKCh5MSA8IDApIDw8IDIpIHwgKCh5MSA+IG1fSGVpZ2h0KSA8PCAzKTsKKyAgICBpbnQgZmxhZzIgPSAoeDIgPCAwKSB8ICgoeDIgPiBtX1dpZHRoKSA8PCAxKSB8ICgoeTIgPCAwKSA8PCAyKSB8ICgoeTIgPiBtX0hlaWdodCkgPDwgMyk7CisgICAgaWYgKGZsYWcxICYgZmxhZzIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoZmxhZzEgfHwgZmxhZzIpIHsKKyAgICAgICAgYWdnOjpyZWN0X2Jhc2U8RlhfRkxPQVQ+IHJlY3QoMC4wZiwgMC4wZiwgKEZYX0ZMT0FUKShtX1dpZHRoKSwgKEZYX0ZMT0FUKShtX0hlaWdodCkpOworICAgICAgICBGWF9GTE9BVCB4WzJdLCB5WzJdOworICAgICAgICBpbnQgbnAgPSBhZ2c6OmNsaXBfbGlhbmdfYmFyc2t5PEZYX0ZMT0FUPih4MSwgeTEsIHgyLCB5MiwgcmVjdCwgeCwgeSk7CisgICAgICAgIGlmIChucCA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5wID09IDEpIHsKKyAgICAgICAgICAgIHgyID0geFswXTsKKyAgICAgICAgICAgIHkyID0geVswXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHgxID0geFswXTsKKyAgICAgICAgICAgIHkxID0geVswXTsKKyAgICAgICAgICAgIHgyID0geFtucCAtIDFdOworICAgICAgICAgICAgeTIgPSB5W25wIC0gMV07CisgICAgICAgIH0KKyAgICB9CisgICAgTW92ZVRvRXgobV9oREMsIEZYU1lTX3JvdW5kKHgxKSwgRlhTWVNfcm91bmQoeTEpLCBOVUxMKTsKKyAgICBMaW5lVG8obV9oREMsIEZYU1lTX3JvdW5kKHgyKSwgRlhTWVNfcm91bmQoeTIpKTsKK30KK3N0YXRpYyBGWF9CT09MIF9NYXRyaXhOb1NjYWxlZChjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4KQoreworICAgIHJldHVybiBwTWF0cml4LT5HZXRBKCkgPT0gMS4wZiAmJiBwTWF0cml4LT5HZXRCKCkgPT0gMCAmJiBwTWF0cml4LT5HZXRDKCkgPT0gMCAmJiBwTWF0cml4LT5HZXREKCkgPT0gMS4wZjsKK30KK0ZYX0JPT0wgQ0dkaURldmljZURyaXZlcjo6RHJhd1BhdGgoY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGZpbGxfY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIHN0cm9rZV9jb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpbGxfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHBJY2NUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludAlibGVuZF90eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQoreworICAgIGlmIChibGVuZF90eXBlICE9IEZYRElCX0JMRU5EX05PUk1BTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIF9Db2xvcjJBcmdiKGZpbGxfY29sb3IsIGZpbGxfY29sb3IsIGFscGhhX2ZsYWcgfCAoMSA8PCAyNCksIHBJY2NUcmFuc2Zvcm0pOworICAgIF9Db2xvcjJBcmdiKHN0cm9rZV9jb2xvciwgc3Ryb2tlX2NvbG9yLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtKTsKKyAgICBDV2luMzJQbGF0Zm9ybSogcFBsYXRmb3JtID0gKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKTsKKyAgICBpZiAoKHBHcmFwaFN0YXRlID09IE5VTEwgfHwgc3Ryb2tlX2NvbG9yID09IDApICYmICFwUGxhdGZvcm0tPm1fR2RpcGx1c0V4dC5Jc0F2YWlsYWJsZSgpKSB7CisgICAgICAgIENGWF9GbG9hdFJlY3QgYmJveF9mID0gcFBhdGhEYXRhLT5HZXRCb3VuZGluZ0JveCgpOworICAgICAgICBpZiAocE1hdHJpeCkgeworICAgICAgICAgICAgYmJveF9mLlRyYW5zZm9ybShwTWF0cml4KTsKKyAgICAgICAgfQorICAgICAgICBGWF9SRUNUIGJib3ggPSBiYm94X2YuR2V0SW5uZXJSZWN0KCk7CisgICAgICAgIGlmIChiYm94LldpZHRoKCkgPD0gMCkgeworICAgICAgICAgICAgcmV0dXJuIERyYXdDb3NtZXRpY0xpbmUoKEZYX0ZMT0FUKShiYm94LmxlZnQpLCAoRlhfRkxPQVQpKGJib3gudG9wKSwgKEZYX0ZMT0FUKShiYm94LmxlZnQpLCAoRlhfRkxPQVQpKGJib3guYm90dG9tICsgMSksIGZpbGxfY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtLCBGWERJQl9CTEVORF9OT1JNQUwpOworICAgICAgICB9IGVsc2UgaWYgKGJib3guSGVpZ2h0KCkgPD0gMCkgeworICAgICAgICAgICAgcmV0dXJuIERyYXdDb3NtZXRpY0xpbmUoKEZYX0ZMT0FUKShiYm94LmxlZnQpLCAoRlhfRkxPQVQpKGJib3gudG9wKSwgKEZYX0ZMT0FUKShiYm94LnJpZ2h0ICsgMSksIChGWF9GTE9BVCkoYmJveC50b3ApLCBmaWxsX2NvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSwgRlhESUJfQkxFTkRfTk9STUFMKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpbnQgZmlsbF9hbHBoYSA9IEZYQVJHQl9BKGZpbGxfY29sb3IpOworICAgIGludCBzdHJva2VfYWxwaGEgPSBGWEFSR0JfQShzdHJva2VfY29sb3IpOworICAgIEZYX0JPT0wgYkRyYXdBbHBoYSA9IChmaWxsX2FscGhhID4gMCAmJiBmaWxsX2FscGhhIDwgMjU1KSB8fCAoc3Ryb2tlX2FscGhhID4gMCAmJiBzdHJva2VfYWxwaGEgPCAyNTUgJiYgcEdyYXBoU3RhdGUpOworICAgIGlmICghcFBsYXRmb3JtLT5tX0dkaXBsdXNFeHQuSXNBdmFpbGFibGUoKSAmJiBiRHJhd0FscGhhKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKHBQbGF0Zm9ybS0+bV9HZGlwbHVzRXh0LklzQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgaWYgKGJEcmF3QWxwaGEgfHwgKChtX0RldmljZUNsYXNzICE9IEZYRENfUFJJTlRFUiAmJiAhKGZpbGxfbW9kZSAmIEZYRklMTF9GVUxMQ09WRVIpKSB8fCBwR3JhcGhTdGF0ZSAmJiBwR3JhcGhTdGF0ZS0+bV9EYXNoQ291bnQpKSB7CisgICAgICAgICAgICBpZiAoICEoKE5VTEwgPT0gcE1hdHJpeCB8fCBfTWF0cml4Tm9TY2FsZWQocE1hdHJpeCkpICYmCisgICAgICAgICAgICAgICAgICAgIHBHcmFwaFN0YXRlICYmIHBHcmFwaFN0YXRlLT5tX0xpbmVXaWR0aCA9PSAxLmYgJiYKKyAgICAgICAgICAgICAgICAgICAgKHBQYXRoRGF0YS0+R2V0UG9pbnRDb3VudCgpID09IDUgfHwgcFBhdGhEYXRhLT5HZXRQb2ludENvdW50KCkgPT0gNCkgJiYKKyAgICAgICAgICAgICAgICAgICAgcFBhdGhEYXRhLT5Jc1JlY3QoKSkgKSB7CisgICAgICAgICAgICAgICAgaWYgKHBQbGF0Zm9ybS0+bV9HZGlwbHVzRXh0LkRyYXdQYXRoKG1faERDLCBwUGF0aERhdGEsIHBNYXRyaXgsIHBHcmFwaFN0YXRlLCBmaWxsX2NvbG9yLCBzdHJva2VfY29sb3IsIGZpbGxfbW9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGludCBvbGRfZmlsbF9tb2RlID0gZmlsbF9tb2RlOworICAgIGZpbGxfbW9kZSAmPSAzOworICAgIEhQRU4gaFBlbiA9IE5VTEw7CisgICAgSEJSVVNIIGhCcnVzaCA9IE5VTEw7CisgICAgaWYgKHBHcmFwaFN0YXRlICYmIHN0cm9rZV9hbHBoYSkgeworICAgICAgICBTZXRNaXRlckxpbWl0KG1faERDLCBwR3JhcGhTdGF0ZS0+bV9NaXRlckxpbWl0LCBOVUxMKTsKKyAgICAgICAgaFBlbiA9IF9DcmVhdGVQZW4ocEdyYXBoU3RhdGUsIHBNYXRyaXgsIHN0cm9rZV9jb2xvcik7CisgICAgICAgIGhQZW4gPSAoSFBFTilTZWxlY3RPYmplY3QobV9oREMsIGhQZW4pOworICAgIH0KKyAgICBpZiAoZmlsbF9tb2RlICYmIGZpbGxfYWxwaGEpIHsKKyAgICAgICAgU2V0UG9seUZpbGxNb2RlKG1faERDLCBmaWxsX21vZGUpOworICAgICAgICBoQnJ1c2ggPSBfQ3JlYXRlQnJ1c2goZmlsbF9jb2xvcik7CisgICAgICAgIGhCcnVzaCA9IChIQlJVU0gpU2VsZWN0T2JqZWN0KG1faERDLCBoQnJ1c2gpOworICAgIH0KKyAgICBpZiAocFBhdGhEYXRhLT5HZXRQb2ludENvdW50KCkgPT0gMiAmJiBwR3JhcGhTdGF0ZSAmJiBwR3JhcGhTdGF0ZS0+bV9EYXNoQ291bnQpIHsKKyAgICAgICAgRlhfRkxPQVQgeDEgPSBwUGF0aERhdGEtPkdldFBvaW50WCgwKSwgeTEgPSBwUGF0aERhdGEtPkdldFBvaW50WSgwKTsKKyAgICAgICAgaWYgKHBNYXRyaXgpIHsKKyAgICAgICAgICAgIHBNYXRyaXgtPlRyYW5zZm9ybSh4MSwgeTEpOworICAgICAgICB9CisgICAgICAgIEZYX0ZMT0FUIHgyID0gcFBhdGhEYXRhLT5HZXRQb2ludFgoMSksIHkyID0gcFBhdGhEYXRhLT5HZXRQb2ludFkoMSk7CisgICAgICAgIGlmIChwTWF0cml4KSB7CisgICAgICAgICAgICBwTWF0cml4LT5UcmFuc2Zvcm0oeDIsIHkyKTsKKyAgICAgICAgfQorICAgICAgICBEcmF3TGluZSh4MSwgeTEsIHgyLCB5Mik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgX1NldFBhdGhUb0RDKG1faERDLCBwUGF0aERhdGEsIHBNYXRyaXgpOworICAgICAgICBpZiAocEdyYXBoU3RhdGUgJiYgc3Ryb2tlX2FscGhhKSB7CisgICAgICAgICAgICBpZiAoZmlsbF9tb2RlICYmIGZpbGxfYWxwaGEpIHsKKyAgICAgICAgICAgICAgICBpZiAob2xkX2ZpbGxfbW9kZSAmIEZYX0ZJTExfVEVYVF9NT0RFKSB7CisgICAgICAgICAgICAgICAgICAgIFN0cm9rZUFuZEZpbGxQYXRoKG1faERDKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBGaWxsUGF0aChtX2hEQyk7CisgICAgICAgICAgICAgICAgICAgIF9TZXRQYXRoVG9EQyhtX2hEQywgcFBhdGhEYXRhLCBwTWF0cml4KTsKKyAgICAgICAgICAgICAgICAgICAgU3Ryb2tlUGF0aChtX2hEQyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBTdHJva2VQYXRoKG1faERDKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChmaWxsX21vZGUgJiYgZmlsbF9hbHBoYSkgeworICAgICAgICAgICAgRmlsbFBhdGgobV9oREMpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChoUGVuKSB7CisgICAgICAgIGhQZW4gPSAoSFBFTilTZWxlY3RPYmplY3QobV9oREMsIGhQZW4pOworICAgICAgICBEZWxldGVPYmplY3QoaFBlbik7CisgICAgfQorICAgIGlmIChoQnJ1c2gpIHsKKyAgICAgICAgaEJydXNoID0gKEhCUlVTSClTZWxlY3RPYmplY3QobV9oREMsIGhCcnVzaCk7CisgICAgICAgIERlbGV0ZU9iamVjdChoQnJ1c2gpOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0dkaURldmljZURyaXZlcjo6RmlsbFJlY3QoY29uc3QgRlhfUkVDVCogcFJlY3QsIEZYX0RXT1JEIGZpbGxfY29sb3IsIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQgYmxlbmRfdHlwZSkKK3sKKyAgICBpZiAoYmxlbmRfdHlwZSAhPSBGWERJQl9CTEVORF9OT1JNQUwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBfQ29sb3IyQXJnYihmaWxsX2NvbG9yLCBmaWxsX2NvbG9yLCBhbHBoYV9mbGFnIHwgKDEgPDwgMjQpLCBwSWNjVHJhbnNmb3JtKTsKKyAgICBpbnQgYWxwaGE7CisgICAgRlhfQ09MT1JSRUYgcmdiOworICAgIEFyZ2JEZWNvZGUoZmlsbF9jb2xvciwgYWxwaGEsIHJnYik7CisgICAgaWYgKGFscGhhID09IDApIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIGlmIChhbHBoYSA8IDI1NSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEhCUlVTSCBoQnJ1c2ggPSBDcmVhdGVTb2xpZEJydXNoKHJnYik7CisgICAgOjpGaWxsUmVjdChtX2hEQywgKFJFQ1QqKXBSZWN0LCBoQnJ1c2gpOworICAgIERlbGV0ZU9iamVjdChoQnJ1c2gpOworICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTCBDR2RpRGV2aWNlRHJpdmVyOjpTZXRDbGlwX1BhdGhGaWxsKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLAorICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LAorICAgICAgICBpbnQgZmlsbF9tb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCit7CisgICAgaWYgKHBQYXRoRGF0YS0+R2V0UG9pbnRDb3VudCgpID09IDUpIHsKKyAgICAgICAgQ0ZYX0Zsb2F0UmVjdCByZWN0ZjsKKyAgICAgICAgaWYgKHBQYXRoRGF0YS0+SXNSZWN0KHBNYXRyaXgsICZyZWN0ZikpIHsKKyAgICAgICAgICAgIEZYX1JFQ1QgcmVjdCA9IHJlY3RmLkdldE91dHRlclJlY3QoKTsKKyAgICAgICAgICAgIEludGVyc2VjdENsaXBSZWN0KG1faERDLCByZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSk7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBfU2V0UGF0aFRvREMobV9oREMsIHBQYXRoRGF0YSwgcE1hdHJpeCk7CisgICAgU2V0UG9seUZpbGxNb2RlKG1faERDLCBmaWxsX21vZGUgJiAzKTsKKyAgICBTZWxlY3RDbGlwUGF0aChtX2hEQywgUkdOX0FORCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENHZGlEZXZpY2VEcml2ZXI6OlNldENsaXBfUGF0aFN0cm9rZShjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwKKyAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwKKyAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCit7CisgICAgSFBFTiBoUGVuID0gX0NyZWF0ZVBlbihwR3JhcGhTdGF0ZSwgcE1hdHJpeCwgMHhmZjAwMDAwMCk7CisgICAgaFBlbiA9IChIUEVOKVNlbGVjdE9iamVjdChtX2hEQywgaFBlbik7CisgICAgX1NldFBhdGhUb0RDKG1faERDLCBwUGF0aERhdGEsIHBNYXRyaXgpOworICAgIFdpZGVuUGF0aChtX2hEQyk7CisgICAgU2V0UG9seUZpbGxNb2RlKG1faERDLCBXSU5ESU5HKTsKKyAgICBGWF9CT09MIHJldCA9IFNlbGVjdENsaXBQYXRoKG1faERDLCBSR05fQU5EKTsKKyAgICBoUGVuID0gKEhQRU4pU2VsZWN0T2JqZWN0KG1faERDLCBoUGVuKTsKKyAgICBEZWxldGVPYmplY3QoaFBlbik7CisgICAgcmV0dXJuIHJldDsKK30KK0ZYX0JPT0wgQ0dkaURldmljZURyaXZlcjo6RHJhd0Nvc21ldGljTGluZShGWF9GTE9BVCB4MSwgRlhfRkxPQVQgeTEsIEZYX0ZMT0FUIHgyLCBGWF9GTE9BVCB5MiwgRlhfRFdPUkQgY29sb3IsCisgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQJYmxlbmRfdHlwZSkKK3sKKyAgICBpZiAoYmxlbmRfdHlwZSAhPSBGWERJQl9CTEVORF9OT1JNQUwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBfQ29sb3IyQXJnYihjb2xvciwgY29sb3IsIGFscGhhX2ZsYWcgfCAoMSA8PCAyNCksIHBJY2NUcmFuc2Zvcm0pOworICAgIGludCBhOworICAgIEZYX0NPTE9SUkVGIHJnYjsKKyAgICBBcmdiRGVjb2RlKGNvbG9yLCBhLCByZ2IpOworICAgIGlmIChhID09IDApIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIEhQRU4gaFBlbiA9IENyZWF0ZVBlbihQU19TT0xJRCwgMSwgcmdiKTsKKyAgICBoUGVuID0gKEhQRU4pU2VsZWN0T2JqZWN0KG1faERDLCBoUGVuKTsKKyAgICBNb3ZlVG9FeChtX2hEQywgRlhTWVNfcm91bmQoeDEpLCBGWFNZU19yb3VuZCh5MSksIE5VTEwpOworICAgIExpbmVUbyhtX2hEQywgRlhTWVNfcm91bmQoeDIpLCBGWFNZU19yb3VuZCh5MikpOworICAgIGhQZW4gPSAoSFBFTilTZWxlY3RPYmplY3QobV9oREMsIGhQZW4pOworICAgIERlbGV0ZU9iamVjdChoUGVuKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0ZYX0JPT0wgQ0dkaURldmljZURyaXZlcjo6RGVsZXRlRGV2aWNlUmduKEZYX0xQVk9JRCBwUmduKQoreworICAgIERlbGV0ZU9iamVjdCgoSEdESU9CSilwUmduKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK0NHZGlEaXNwbGF5RHJpdmVyOjpDR2RpRGlzcGxheURyaXZlcihIREMgaERDKSA6IENHZGlEZXZpY2VEcml2ZXIoaERDLCBGWERDX0RJU1BMQVkpCit7CisgICAgQ1dpbjMyUGxhdGZvcm0qIHBQbGF0Zm9ybSA9IChDV2luMzJQbGF0Zm9ybSopQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCk7CisgICAgaWYgKHBQbGF0Zm9ybS0+bV9HZGlwbHVzRXh0LklzQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgbV9SZW5kZXJDYXBzIHw9IEZYUkNfQUxQSEFfUEFUSCB8IEZYUkNfQUxQSEFfSU1BR0U7CisgICAgfQorfQorRlhfQk9PTCBDR2RpRGlzcGxheURyaXZlcjo6R2V0RElCaXRzKENGWF9ESUJpdG1hcCogcEJpdG1hcCwgaW50IGxlZnQsIGludCB0b3AsIHZvaWQqIHBJY2NUcmFuc2Zvcm0sIEZYX0JPT0wgYkRFZGdlKQoreworICAgIEZYX0JPT0wgcmV0ID0gRkFMU0U7CisgICAgaW50IHdpZHRoID0gcEJpdG1hcC0+R2V0V2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gcEJpdG1hcC0+R2V0SGVpZ2h0KCk7CisgICAgSEJJVE1BUCBoYm1wID0gQ3JlYXRlQ29tcGF0aWJsZUJpdG1hcChtX2hEQywgd2lkdGgsIGhlaWdodCk7CisgICAgSERDIGhEQ01lbW9yeSA9IENyZWF0ZUNvbXBhdGlibGVEQyhtX2hEQyk7CisgICAgSEJJVE1BUCBob2xkYm1wICA9IChIQklUTUFQKVNlbGVjdE9iamVjdChoRENNZW1vcnksIGhibXApOworICAgIEJpdEJsdChoRENNZW1vcnksIDAsIDAsIHdpZHRoLCBoZWlnaHQsIG1faERDLCBsZWZ0LCB0b3AsIFNSQ0NPUFkpOworICAgIFNlbGVjdE9iamVjdChoRENNZW1vcnksIGhvbGRibXApOworICAgIEJJVE1BUElORk8gYm1pOworICAgIEZYU1lTX21lbXNldDMyKCZibWksIDAsIHNpemVvZiBibWkpOworICAgIGJtaS5ibWlIZWFkZXIuYmlTaXplID0gc2l6ZW9mIGJtaS5ibWlIZWFkZXI7CisgICAgYm1pLmJtaUhlYWRlci5iaUJpdENvdW50ID0gcEJpdG1hcC0+R2V0QlBQKCk7CisgICAgYm1pLmJtaUhlYWRlci5iaUhlaWdodCA9IC1oZWlnaHQ7CisgICAgYm1pLmJtaUhlYWRlci5iaVBsYW5lcyA9IDE7CisgICAgYm1pLmJtaUhlYWRlci5iaVdpZHRoID0gd2lkdGg7CisgICAgaWYgKCFDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpIHx8ICFDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRDb2RlY01vZHVsZSgpLT5HZXRJY2NNb2R1bGUoKSkgeworICAgICAgICBwSWNjVHJhbnNmb3JtID0gTlVMTDsKKyAgICB9CisgICAgaWYgKHBCaXRtYXAtPkdldEJQUCgpID4gOCAmJiAhcEJpdG1hcC0+SXNDbXlrSW1hZ2UoKSAmJiBwSWNjVHJhbnNmb3JtID09IE5VTEwpIHsKKyAgICAgICAgcmV0ID0gOjpHZXRESUJpdHMoaERDTWVtb3J5LCBoYm1wLCAwLCBoZWlnaHQsIHBCaXRtYXAtPkdldEJ1ZmZlcigpLCAmYm1pLCBESUJfUkdCX0NPTE9SUykgPT0gaGVpZ2h0OworICAgIH0gZWxzZSB7CisgICAgICAgIENGWF9ESUJpdG1hcCBiaXRtYXA7CisgICAgICAgIGlmIChiaXRtYXAuQ3JlYXRlKHdpZHRoLCBoZWlnaHQsIEZYRElCX1JnYikpIHsKKyAgICAgICAgICAgIGJtaS5ibWlIZWFkZXIuYmlCaXRDb3VudCA9IDI0OworICAgICAgICAgICAgOjpHZXRESUJpdHMoaERDTWVtb3J5LCBoYm1wLCAwLCBoZWlnaHQsIGJpdG1hcC5HZXRCdWZmZXIoKSwgJmJtaSwgRElCX1JHQl9DT0xPUlMpOworICAgICAgICAgICAgcmV0ID0gcEJpdG1hcC0+VHJhbnNmZXJCaXRtYXAoMCwgMCwgd2lkdGgsIGhlaWdodCwgJmJpdG1hcCwgMCwgMCwgcEljY1RyYW5zZm9ybSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXQgPSBGQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyNpZm5kZWYgX0ZQREZBUElfTUlOSV8KKyAgICBpZiAocEJpdG1hcC0+SGFzQWxwaGEoKSAmJiByZXQpIHsKKyAgICAgICAgcEJpdG1hcC0+TG9hZENoYW5uZWwoRlhESUJfQWxwaGEsIDB4ZmYpOworICAgIH0KKyNlbmRpZgorICAgIERlbGV0ZU9iamVjdChoYm1wKTsKKyAgICBEZWxldGVPYmplY3QoaERDTWVtb3J5KTsKKyAgICByZXR1cm4gcmV0OworfQorRlhfQk9PTCBDR2RpRGlzcGxheURyaXZlcjo6U2V0RElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTb3VyY2UsIEZYX0RXT1JEIGNvbG9yLCBjb25zdCBGWF9SRUNUKiBwU3JjUmVjdCwgaW50IGxlZnQsIGludCB0b3AsIGludCBibGVuZF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIEFTU0VSVChibGVuZF90eXBlID09IEZYRElCX0JMRU5EX05PUk1BTCk7CisgICAgaWYgKHBTb3VyY2UtPklzQWxwaGFNYXNrKCkpIHsKKyAgICAgICAgaW50IHdpZHRoID0gcFNvdXJjZS0+R2V0V2lkdGgoKSwgaGVpZ2h0ID0gcFNvdXJjZS0+R2V0SGVpZ2h0KCk7CisgICAgICAgIGludCBhbHBoYSA9IEZYR0VURkxBR19DT0xPUlRZUEUoYWxwaGFfZmxhZykgPyBGWEdFVEZMQUdfQUxQSEFfRklMTChhbHBoYV9mbGFnKSA6IEZYQVJHQl9BKGNvbG9yKTsKKyAgICAgICAgRlhfQk9PTCBiR0RJID0gcFNvdXJjZS0+R2V0QlBQKCkgPT0gMSAmJiBhbHBoYSA9PSAyNTU7CisgICAgICAgIGlmICghYkdESSkgeworICAgICAgICAgICAgQ0ZYX0RJQml0bWFwIGJhY2tncm91bmQ7CisgICAgICAgICAgICBpZiAoIWJhY2tncm91bmQuQ3JlYXRlKHdpZHRoLCBoZWlnaHQsIEZYRElCX1JnYjMyKSB8fAorICAgICAgICAgICAgICAgICAgICAhR2V0RElCaXRzKCZiYWNrZ3JvdW5kLCBsZWZ0LCB0b3AsIE5VTEwpIHx8CisgICAgICAgICAgICAgICAgICAgICFiYWNrZ3JvdW5kLkNvbXBvc2l0ZU1hc2soMCwgMCwgd2lkdGgsIGhlaWdodCwgcFNvdXJjZSwgY29sb3IsIDAsIDAsIEZYRElCX0JMRU5EX05PUk1BTCwgTlVMTCwgRkFMU0UsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfUkVDVCBzcmNfcmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiBTZXRESUJpdHMoJmJhY2tncm91bmQsIDAsICZzcmNfcmVjdCwgbGVmdCwgdG9wLCBGWERJQl9CTEVORF9OT1JNQUwsIDAsIE5VTEwpOworICAgICAgICB9CisgICAgICAgIEZYX1JFQ1QgY2xpcF9yZWN0KGxlZnQsIHRvcCwgbGVmdCArIHBTcmNSZWN0LT5XaWR0aCgpLCB0b3AgKyBwU3JjUmVjdC0+SGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gU3RyZXRjaERJQml0cyhwU291cmNlLCBjb2xvciwgbGVmdCAtIHBTcmNSZWN0LT5sZWZ0LCB0b3AgLSBwU3JjUmVjdC0+dG9wLCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2xpcF9yZWN0LCAwLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtLCBGWERJQl9CTEVORF9OT1JNQUwpOworICAgIH0gZWxzZSB7CisgICAgICAgIGludCB3aWR0aCA9IHBTcmNSZWN0LT5XaWR0aCgpLCBoZWlnaHQgPSBwU3JjUmVjdC0+SGVpZ2h0KCk7CisgICAgICAgIGlmIChwU291cmNlLT5IYXNBbHBoYSgpKSB7CisgICAgICAgICAgICBDRlhfRElCaXRtYXAgYml0bWFwOworICAgICAgICAgICAgaWYgKCFiaXRtYXAuQ3JlYXRlKHdpZHRoLCBoZWlnaHQsIEZYRElCX1JnYikgfHwKKyAgICAgICAgICAgICAgICAgICAgIUdldERJQml0cygmYml0bWFwLCBsZWZ0LCB0b3AsIE5VTEwpIHx8CisgICAgICAgICAgICAgICAgICAgICFiaXRtYXAuQ29tcG9zaXRlQml0bWFwKDAsIDAsIHdpZHRoLCBoZWlnaHQsIHBTb3VyY2UsIHBTcmNSZWN0LT5sZWZ0LCBwU3JjUmVjdC0+dG9wLCBGWERJQl9CTEVORF9OT1JNQUwsIE5VTEwsIEZBTFNFLCBwSWNjVHJhbnNmb3JtKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZYX1JFQ1Qgc3JjX3JlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICByZXR1cm4gU2V0RElCaXRzKCZiaXRtYXAsIDAsICZzcmNfcmVjdCwgbGVmdCwgdG9wLCBGWERJQl9CTEVORF9OT1JNQUwsIDAsIE5VTEwpOworICAgICAgICB9CisgICAgICAgIENGWF9ESUJFeHRyYWN0b3IgdGVtcChwU291cmNlKTsKKyAgICAgICAgQ0ZYX0RJQml0bWFwKiBwQml0bWFwID0gdGVtcDsKKyAgICAgICAgaWYgKHBCaXRtYXApIHsKKyAgICAgICAgICAgIHJldHVybiBHRElfU2V0RElCaXRzKHBCaXRtYXAsIHBTcmNSZWN0LCBsZWZ0LCB0b3AsIHBJY2NUcmFuc2Zvcm0pOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK0ZYX0JPT0wgQ0dkaURpc3BsYXlEcml2ZXI6OlVzZUZveGl0U3RyZXRjaEVuZ2luZShjb25zdCBDRlhfRElCU291cmNlKiBwU291cmNlLCBGWF9EV09SRCBjb2xvciwgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLAorICAgICAgICBpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0LCBjb25zdCBGWF9SRUNUKiBwQ2xpcFJlY3QsIGludCByZW5kZXJfZmxhZ3MsCisgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQgYmxlbmRfdHlwZSkKK3sKKyAgICBGWF9SRUNUIGJpdG1hcF9jbGlwID0gKnBDbGlwUmVjdDsKKyAgICBpZiAoZGVzdF93aWR0aCA8IDApIHsKKyAgICAgICAgZGVzdF9sZWZ0ICs9IGRlc3Rfd2lkdGg7CisgICAgfQorICAgIGlmIChkZXN0X2hlaWdodCA8IDApIHsKKyAgICAgICAgZGVzdF90b3AgKz0gZGVzdF9oZWlnaHQ7CisgICAgfQorICAgIGJpdG1hcF9jbGlwLk9mZnNldCgtZGVzdF9sZWZ0LCAtZGVzdF90b3ApOworICAgIENGWF9ESUJpdG1hcCogcFN0cmV0Y2hlZCA9IHBTb3VyY2UtPlN0cmV0Y2hUbyhkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgcmVuZGVyX2ZsYWdzLCAmYml0bWFwX2NsaXApOworICAgIGlmIChwU3RyZXRjaGVkID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIEZYX1JFQ1Qgc3JjX3JlY3QoMCwgMCwgcFN0cmV0Y2hlZC0+R2V0V2lkdGgoKSwgcFN0cmV0Y2hlZC0+R2V0SGVpZ2h0KCkpOworICAgIEZYX0JPT0wgcmV0ID0gU2V0RElCaXRzKHBTdHJldGNoZWQsIGNvbG9yLCAmc3JjX3JlY3QsIHBDbGlwUmVjdC0+bGVmdCwgcENsaXBSZWN0LT50b3AsIEZYRElCX0JMRU5EX05PUk1BTCwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSk7CisgICAgZGVsZXRlIHBTdHJldGNoZWQ7CisgICAgcmV0dXJuIHJldDsKK30KK0ZYX0JPT0wgQ0dkaURpc3BsYXlEcml2ZXI6OlN0cmV0Y2hESUJpdHMoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNvdXJjZSwgRlhfRFdPUkQgY29sb3IsIGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwKKyAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgY29uc3QgRlhfUkVDVCogcENsaXBSZWN0LCBGWF9EV09SRCBmbGFncywKKyAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0sIGludCBibGVuZF90eXBlKQoreworICAgIEFTU0VSVChwU291cmNlICE9IE5VTEwgJiYgcENsaXBSZWN0ICE9IE5VTEwpOworICAgIGlmIChmbGFncyB8fCBkZXN0X3dpZHRoID4gMTAwMDAgfHwgZGVzdF93aWR0aCA8IC0xMDAwMCB8fCBkZXN0X2hlaWdodCA+IDEwMDAwIHx8IGRlc3RfaGVpZ2h0IDwgLTEwMDAwKQorICAgICAgICByZXR1cm4gVXNlRm94aXRTdHJldGNoRW5naW5lKHBTb3VyY2UsIGNvbG9yLCBkZXN0X2xlZnQsIGRlc3RfdG9wLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ2xpcFJlY3QsIGZsYWdzLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtLCBibGVuZF90eXBlKTsKKyAgICBpZiAocFNvdXJjZS0+SXNBbHBoYU1hc2soKSkgeworICAgICAgICBGWF9SRUNUIGltYWdlX3JlY3Q7CisgICAgICAgIGltYWdlX3JlY3QubGVmdCA9IGRlc3Rfd2lkdGggPiAwID8gZGVzdF9sZWZ0IDogZGVzdF9sZWZ0ICsgZGVzdF93aWR0aDsKKyAgICAgICAgaW1hZ2VfcmVjdC5yaWdodCA9IGRlc3Rfd2lkdGggPiAwID8gZGVzdF9sZWZ0ICsgZGVzdF93aWR0aCA6IGRlc3RfbGVmdDsKKyAgICAgICAgaW1hZ2VfcmVjdC50b3AgPSBkZXN0X2hlaWdodCA+IDAgPyBkZXN0X3RvcCA6IGRlc3RfdG9wICsgZGVzdF9oZWlnaHQ7CisgICAgICAgIGltYWdlX3JlY3QuYm90dG9tID0gZGVzdF9oZWlnaHQgPiAwID8gZGVzdF90b3AgKyBkZXN0X2hlaWdodCA6IGRlc3RfdG9wOworICAgICAgICBGWF9SRUNUIGNsaXBfcmVjdCA9IGltYWdlX3JlY3Q7CisgICAgICAgIGNsaXBfcmVjdC5JbnRlcnNlY3QoKnBDbGlwUmVjdCk7CisgICAgICAgIGNsaXBfcmVjdC5PZmZzZXQoLWltYWdlX3JlY3QubGVmdCwgLWltYWdlX3JlY3QudG9wKTsKKyAgICAgICAgaW50IGNsaXBfd2lkdGggPSBjbGlwX3JlY3QuV2lkdGgoKSwgY2xpcF9oZWlnaHQgPSBjbGlwX3JlY3QuSGVpZ2h0KCk7CisgICAgICAgIENGWF9ESUJpdG1hcCogcFN0cmV0Y2hlZCA9IHBTb3VyY2UtPlN0cmV0Y2hUbyhkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgZmxhZ3MsICZjbGlwX3JlY3QpOworICAgICAgICBpZiAocFN0cmV0Y2hlZCA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgICAgICBDRlhfRElCaXRtYXAgYmFja2dyb3VuZDsKKyAgICAgICAgaWYgKCFiYWNrZ3JvdW5kLkNyZWF0ZShjbGlwX3dpZHRoLCBjbGlwX2hlaWdodCwgRlhESUJfUmdiMzIpIHx8CisgICAgICAgICAgICAgICAgIUdldERJQml0cygmYmFja2dyb3VuZCwgaW1hZ2VfcmVjdC5sZWZ0ICsgY2xpcF9yZWN0LmxlZnQsIGltYWdlX3JlY3QudG9wICsgY2xpcF9yZWN0LnRvcCwgTlVMTCkgfHwKKyAgICAgICAgICAgICAgICAhYmFja2dyb3VuZC5Db21wb3NpdGVNYXNrKDAsIDAsIGNsaXBfd2lkdGgsIGNsaXBfaGVpZ2h0LCBwU3RyZXRjaGVkLCBjb2xvciwgMCwgMCwgRlhESUJfQkxFTkRfTk9STUFMLCBOVUxMLCBGQUxTRSwgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSkpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwU3RyZXRjaGVkOworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIEZYX1JFQ1Qgc3JjX3JlY3QoMCwgMCwgY2xpcF93aWR0aCwgY2xpcF9oZWlnaHQpOworICAgICAgICBGWF9CT09MIHJldCA9IFNldERJQml0cygmYmFja2dyb3VuZCwgMCwgJnNyY19yZWN0LCBpbWFnZV9yZWN0LmxlZnQgKyBjbGlwX3JlY3QubGVmdCwgaW1hZ2VfcmVjdC50b3AgKyBjbGlwX3JlY3QudG9wLCBGWERJQl9CTEVORF9OT1JNQUwsIDAsIE5VTEwpOworICAgICAgICBkZWxldGUgcFN0cmV0Y2hlZDsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocFNvdXJjZS0+SGFzQWxwaGEoKSkgeworICAgICAgICAgICAgQ1dpbjMyUGxhdGZvcm0qIHBQbGF0Zm9ybSA9IChDV2luMzJQbGF0Zm9ybSopQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCk7CisgICAgICAgICAgICBpZiAocFBsYXRmb3JtLT5tX0dkaXBsdXNFeHQuSXNBdmFpbGFibGUoKSAmJiBwSWNjVHJhbnNmb3JtID09IE5VTEwgJiYgIXBTb3VyY2UtPklzQ215a0ltYWdlKCkpIHsKKyAgICAgICAgICAgICAgICBDRlhfRElCRXh0cmFjdG9yIHRlbXAocFNvdXJjZSk7CisgICAgICAgICAgICAgICAgQ0ZYX0RJQml0bWFwKiBwQml0bWFwID0gdGVtcDsKKyAgICAgICAgICAgICAgICBpZiAocEJpdG1hcCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHBQbGF0Zm9ybS0+bV9HZGlwbHVzRXh0LlN0cmV0Y2hESUJpdHMobV9oREMsIHBCaXRtYXAsIGRlc3RfbGVmdCwgZGVzdF90b3AsIGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0LCBwQ2xpcFJlY3QsIGZsYWdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBVc2VGb3hpdFN0cmV0Y2hFbmdpbmUocFNvdXJjZSwgY29sb3IsIGRlc3RfbGVmdCwgZGVzdF90b3AsIGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ2xpcFJlY3QsIGZsYWdzLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtLCBibGVuZF90eXBlKTsKKyAgICAgICAgfQorICAgICAgICBDRlhfRElCRXh0cmFjdG9yIHRlbXAocFNvdXJjZSk7CisgICAgICAgIENGWF9ESUJpdG1hcCogcEJpdG1hcCA9IHRlbXA7CisgICAgICAgIGlmIChwQml0bWFwKSB7CisgICAgICAgICAgICByZXR1cm4gR0RJX1N0cmV0Y2hESUJpdHMocEJpdG1hcCwgZGVzdF9sZWZ0LCBkZXN0X3RvcCwgZGVzdF93aWR0aCwgZGVzdF9oZWlnaHQsIGZsYWdzLCBwSWNjVHJhbnNmb3JtKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CisjZGVmaW5lIEdFVF9QU19GRUFUVVJFU0VUVElORyAgICAgICAgNDEyMQorI2RlZmluZSBGRUFUVVJFU0VUVElOR19QU0xFVkVMICAgICAgIDIKK2ludCBHZXRQU0xldmVsKEhEQyBoREMpCit7CisgICAgaW50IGRldmljZV90eXBlID0gOjpHZXREZXZpY2VDYXBzKGhEQywgVEVDSE5PTE9HWSk7CisgICAgaWYgKGRldmljZV90eXBlICE9IERUX1JBU1BSSU5URVIpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEZYX0RXT1JEIGVzYyA9IEdFVF9QU19GRUFUVVJFU0VUVElORzsKKyAgICBpZiAoRXh0RXNjYXBlKGhEQywgUVVFUllFU0NTVVBQT1JULCBzaXplb2YgZXNjLCAoY2hhciopJmVzYywgMCwgTlVMTCkpIHsKKyAgICAgICAgaW50IHBhcmFtID0gRkVBVFVSRVNFVFRJTkdfUFNMRVZFTDsKKyAgICAgICAgaWYgKEV4dEVzY2FwZShoREMsIEdFVF9QU19GRUFUVVJFU0VUVElORywgc2l6ZW9mKGludCksIChjaGFyKikmcGFyYW0sIHNpemVvZihpbnQpLCAoY2hhciopJnBhcmFtKSA+IDApIHsKKyAgICAgICAgICAgIHJldHVybiBwYXJhbTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlc2MgPSBQT1NUU0NSSVBUX0lERU5USUZZOworICAgIGlmIChFeHRFc2NhcGUoaERDLCBRVUVSWUVTQ1NVUFBPUlQsIHNpemVvZiBlc2MsIChjaGFyKikmZXNjLCAwLCBOVUxMKSA9PSAwKSB7CisgICAgICAgIGVzYyA9IFBPU1RTQ1JJUFRfREFUQTsKKyAgICAgICAgaWYgKEV4dEVzY2FwZShoREMsIFFVRVJZRVNDU1VQUE9SVCwgc2l6ZW9mIGVzYywgKGNoYXIqKSZlc2MsIDAsIE5VTEwpKSB7CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZXNjID0gUFNJREVOVF9HRElDRU5UUklDOworICAgIGlmIChFeHRFc2NhcGUoaERDLCBQT1NUU0NSSVBUX0lERU5USUZZLCBzaXplb2YoRlhfRFdPUkQpLCAoY2hhciopJmVzYywgMCwgTlVMTCkgPD0gMCkgeworICAgICAgICByZXR1cm4gMjsKKyAgICB9CisgICAgZXNjID0gR0VUX1BTX0ZFQVRVUkVTRVRUSU5HOworICAgIGlmIChFeHRFc2NhcGUoaERDLCBRVUVSWUVTQ1NVUFBPUlQsIHNpemVvZiBlc2MsIChjaGFyKikmZXNjLCAwLCBOVUxMKSkgeworICAgICAgICBpbnQgcGFyYW0gPSBGRUFUVVJFU0VUVElOR19QU0xFVkVMOworICAgICAgICBpZiAoRXh0RXNjYXBlKGhEQywgR0VUX1BTX0ZFQVRVUkVTRVRUSU5HLCBzaXplb2YoaW50KSwgKGNoYXIqKSZwYXJhbSwgc2l6ZW9mKGludCksIChjaGFyKikmcGFyYW0pID4gMCkgeworICAgICAgICAgICAgcmV0dXJuIHBhcmFtOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAyOworfQoraW50IENGWF9XaW5kb3dzRGV2aWNlOjptX3BzTGV2ZWwgPSAyOworQ0ZYX1dpbmRvd3NEZXZpY2U6OkNGWF9XaW5kb3dzRGV2aWNlKEhEQyBoREMsIEZYX0JPT0wgYkNteWtPdXRwdXQsIEZYX0JPT0wgYkZvcmNlUFNPdXRwdXQsIGludCBwc0xldmVsKQoreworICAgIG1fYkZvcmNlUFNPdXRwdXQgPSBiRm9yY2VQU091dHB1dDsKKyAgICBtX3BzTGV2ZWwgPSBwc0xldmVsOworICAgIGlmIChiRm9yY2VQU091dHB1dCkgeworICAgICAgICBJRlhfUmVuZGVyRGV2aWNlRHJpdmVyKiBwRHJpdmVyID0gRlhfTkVXIENQU1ByaW50ZXJEcml2ZXI7CisgICAgICAgIGlmICghcERyaXZlcikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICgoQ1BTUHJpbnRlckRyaXZlciopcERyaXZlciktPkluaXQoaERDLCBwc0xldmVsLCBiQ215a091dHB1dCk7CisgICAgICAgIFNldERldmljZURyaXZlcihwRHJpdmVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBTZXREZXZpY2VEcml2ZXIoQ3JlYXRlRHJpdmVyKGhEQywgYkNteWtPdXRwdXQpKTsKK30KK0hEQyBDRlhfV2luZG93c0RldmljZTo6R2V0REMoKSBjb25zdAoreworICAgIElGWF9SZW5kZXJEZXZpY2VEcml2ZXIgKnBSREQgPSBHZXREZXZpY2VEcml2ZXIoKTsKKyAgICBpZiAoIXBSREQpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiAoSERDKXBSREQtPkdldFBsYXRmb3JtU3VyZmFjZSgpOworfQorSUZYX1JlbmRlckRldmljZURyaXZlciogQ0ZYX1dpbmRvd3NEZXZpY2U6OkNyZWF0ZURyaXZlcihIREMgaERDLCBGWF9CT09MIGJDbXlrT3V0cHV0KQoreworICAgIGludCBkZXZpY2VfdHlwZSA9IDo6R2V0RGV2aWNlQ2FwcyhoREMsIFRFQ0hOT0xPR1kpOworICAgIGludCBvYmpfdHlwZSA9IDo6R2V0T2JqZWN0VHlwZShoREMpOworICAgIGludCBkZXZpY2VfY2xhc3M7CisgICAgaWYgKGRldmljZV90eXBlID09IERUX1JBU1BSSU5URVIgfHwgZGV2aWNlX3R5cGUgPT0gRFRfUExPVFRFUiB8fCBvYmpfdHlwZSA9PSBPQkpfRU5ITUVUQURDKSB7CisgICAgICAgIGRldmljZV9jbGFzcyA9IEZYRENfUFJJTlRFUjsKKyAgICB9IGVsc2UgeworICAgICAgICBkZXZpY2VfY2xhc3MgPSBGWERDX0RJU1BMQVk7CisgICAgfQorICAgIHJldHVybiBGWF9ORVcgQ0dkaURpc3BsYXlEcml2ZXIoaERDKTsKK30KK0NGWF9XaW5CaXRtYXBEZXZpY2U6OkNGWF9XaW5CaXRtYXBEZXZpY2UoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBGWERJQl9Gb3JtYXQgZm9ybWF0KQoreworICAgIEJJVE1BUElORk9IRUFERVIgYm1paDsKKyAgICBGWFNZU19tZW1zZXQzMigmYm1paCwgMCwgc2l6ZW9mIChCSVRNQVBJTkZPSEVBREVSKSk7CisgICAgYm1paC5iaVNpemUgPSBzaXplb2YoQklUTUFQSU5GT0hFQURFUik7CisgICAgYm1paC5iaUJpdENvdW50ID0gZm9ybWF0ICYgMHhmZjsKKyAgICBibWloLmJpSGVpZ2h0ID0gLWhlaWdodDsKKyAgICBibWloLmJpUGxhbmVzID0gMTsKKyAgICBibWloLmJpV2lkdGggPSB3aWR0aDsKKyAgICBGWF9MUEJZVEUgcEJ1ZmZlcjsKKyAgICBtX2hCaXRtYXAgPSBDcmVhdGVESUJTZWN0aW9uKE5VTEwsIChCSVRNQVBJTkZPKikmYm1paCwgRElCX1JHQl9DT0xPUlMsIChGWF9MUFZPSUQqKSZwQnVmZmVyLCBOVUxMLCAwKTsKKyAgICBpZiAobV9oQml0bWFwID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBDRlhfRElCaXRtYXAqIHBCaXRtYXAgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOworICAgIGlmICghcEJpdG1hcCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHBCaXRtYXAtPkNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHBCdWZmZXIpOworICAgIFNldEJpdG1hcChwQml0bWFwKTsKKyAgICBtX2hEQyA9IDo6Q3JlYXRlQ29tcGF0aWJsZURDKE5VTEwpOworICAgIG1faE9sZEJpdG1hcCA9IChIQklUTUFQKVNlbGVjdE9iamVjdChtX2hEQywgbV9oQml0bWFwKTsKKyAgICBJRlhfUmVuZGVyRGV2aWNlRHJpdmVyKiBwRHJpdmVyID0gRlhfTkVXIENHZGlEaXNwbGF5RHJpdmVyKG1faERDKTsKKyAgICBpZiAoIXBEcml2ZXIpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBTZXREZXZpY2VEcml2ZXIocERyaXZlcik7Cit9CitDRlhfV2luQml0bWFwRGV2aWNlOjp+Q0ZYX1dpbkJpdG1hcERldmljZSgpCit7CisgICAgaWYgKG1faERDKSB7CisgICAgICAgIFNlbGVjdE9iamVjdChtX2hEQywgbV9oT2xkQml0bWFwKTsKKyAgICAgICAgRGVsZXRlREMobV9oREMpOworICAgIH0KKyAgICBpZiAobV9oQml0bWFwKSB7CisgICAgICAgIERlbGV0ZU9iamVjdChtX2hCaXRtYXApOworICAgIH0KKyAgICBkZWxldGUgR2V0Qml0bWFwKCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvc3JjL2Z4Z2Uvd2luMzIvZnhfd2luMzJfZGliLmNwcCBiL2NvcmUvc3JjL2Z4Z2Uvd2luMzIvZnhfd2luMzJfZGliLmNwcAppbmRleCBhOWNmNzhlLi4wMDkzZDVlIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL3dpbjMyL2Z4X3dpbjMyX2RpYi5jcHAKKysrIGIvY29yZS9zcmMvZnhnZS93aW4zMi9meF93aW4zMl9kaWIuY3BwCkBAIC0xLDMxMCArMSwzMTAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2UuaCINCi0jaWYgX0ZYX09TXyA9PSBfRlhfV0lOMzJfREVTS1RPUF8gfHwgIF9GWF9PU18gPT0gX0ZYX1dJTjY0Xw0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+DQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZV93aW4zMi5oIg0KLSNpbmNsdWRlICJ3aW4zMl9pbnQuaCINCi1DRlhfQnl0ZVN0cmluZyBDRlhfV2luZG93c0RJQjo6R2V0Qml0bWFwSW5mbyhjb25zdCBDRlhfRElCaXRtYXAqIHBCaXRtYXApDQotew0KLSAgICBDRlhfQnl0ZVN0cmluZyByZXN1bHQ7DQotICAgIGludCBsZW4gPSBzaXplb2YgKEJJVE1BUElORk9IRUFERVIpOw0KLSAgICBpZiAocEJpdG1hcC0+R2V0QlBQKCkgPT0gMSB8fCBwQml0bWFwLT5HZXRCUFAoKSA9PSA4KSB7DQotICAgICAgICBsZW4gKz0gc2l6ZW9mIChEV09SRCkgKiAoaW50KSgxIDw8IHBCaXRtYXAtPkdldEJQUCgpKTsNCi0gICAgfQ0KLSAgICBCSVRNQVBJTkZPSEVBREVSKiBwYm1paCA9IChCSVRNQVBJTkZPSEVBREVSKilyZXN1bHQuR2V0QnVmZmVyKGxlbik7DQotICAgIEZYU1lTX21lbXNldDMyKHBibWloLCAwLCBzaXplb2YgKEJJVE1BUElORk9IRUFERVIpKTsNCi0gICAgcGJtaWgtPmJpU2l6ZSA9IHNpemVvZihCSVRNQVBJTkZPSEVBREVSKTsNCi0gICAgcGJtaWgtPmJpQml0Q291bnQgPSBwQml0bWFwLT5HZXRCUFAoKTsNCi0gICAgcGJtaWgtPmJpQ29tcHJlc3Npb24gPSBCSV9SR0I7DQotICAgIHBibWloLT5iaUhlaWdodCA9IC0oaW50KXBCaXRtYXAtPkdldEhlaWdodCgpOw0KLSAgICBwYm1paC0+YmlQbGFuZXMgPSAxOw0KLSAgICBwYm1paC0+YmlXaWR0aCA9IHBCaXRtYXAtPkdldFdpZHRoKCk7DQotICAgIGlmIChwQml0bWFwLT5HZXRCUFAoKSA9PSA4KSB7DQotICAgICAgICBGWF9EV09SRCogcFBhbGV0dGUgPSAoRlhfRFdPUkQqKShwYm1paCArIDEpOw0KLSAgICAgICAgaWYgKHBCaXRtYXAtPkdldFBhbGV0dGUoKSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgcFBhbGV0dGVbaV0gPSBpICogMHgwMTAxMDE7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSArKykgew0KLSAgICAgICAgICAgICAgICBwUGFsZXR0ZVtpXSA9IHBCaXRtYXAtPkdldFBhbGV0dGUoKVtpXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKHBCaXRtYXAtPkdldEJQUCgpID09IDEpIHsNCi0gICAgICAgIEZYX0RXT1JEKiBwUGFsZXR0ZSA9IChGWF9EV09SRCopKHBibWloICsgMSk7DQotICAgICAgICBpZiAocEJpdG1hcC0+R2V0UGFsZXR0ZSgpID09IE5VTEwpIHsNCi0gICAgICAgICAgICBwUGFsZXR0ZVswXSA9IDA7DQotICAgICAgICAgICAgcFBhbGV0dGVbMV0gPSAweGZmZmZmZjsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcFBhbGV0dGVbMF0gPSBwQml0bWFwLT5HZXRQYWxldHRlKClbMF07DQotICAgICAgICAgICAgcFBhbGV0dGVbMV0gPSBwQml0bWFwLT5HZXRQYWxldHRlKClbMV07DQotICAgICAgICB9DQotICAgIH0NCi0gICAgcmVzdWx0LlJlbGVhc2VCdWZmZXIobGVuKTsNCi0gICAgcmV0dXJuIHJlc3VsdDsNCi19DQotQ0ZYX0RJQml0bWFwKiBfRlhfV2luZG93c0RJQl9Mb2FkRnJvbUJ1ZihCSVRNQVBJTkZPKiBwYm1pLCBMUFZPSUQgcERhdGEsIEZYX0JPT0wgYkFscGhhKQ0KLXsNCi0gICAgaW50IHdpZHRoID0gcGJtaS0+Ym1pSGVhZGVyLmJpV2lkdGg7DQotICAgIGludCBoZWlnaHQgPSBwYm1pLT5ibWlIZWFkZXIuYmlIZWlnaHQ7DQotICAgIEJPT0wgYkJvdHRvbVVwID0gVFJVRTsNCi0gICAgaWYgKGhlaWdodCA8IDApIHsNCi0gICAgICAgIGhlaWdodCA9IC1oZWlnaHQ7DQotICAgICAgICBiQm90dG9tVXAgPSBGQUxTRTsNCi0gICAgfQ0KLSAgICBpbnQgcGl0Y2ggPSAod2lkdGggKiBwYm1pLT5ibWlIZWFkZXIuYmlCaXRDb3VudCArIDMxKSAvIDMyICogNDsNCi0gICAgQ0ZYX0RJQml0bWFwKiBwQml0bWFwID0gRlhfTkVXIENGWF9ESUJpdG1hcDsNCi0gICAgaWYgKCFwQml0bWFwKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBGWERJQl9Gb3JtYXQgZm9ybWF0ID0gYkFscGhhID8gKEZYRElCX0Zvcm1hdCkocGJtaS0+Ym1pSGVhZGVyLmJpQml0Q291bnQgKyAweDIwMCkgOiAoRlhESUJfRm9ybWF0KXBibWktPmJtaUhlYWRlci5iaUJpdENvdW50Ow0KLSAgICBGWF9CT09MIHJldCA9IHBCaXRtYXAtPkNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpOw0KLSAgICBpZiAoIXJldCkgew0KLSAgICAgICAgZGVsZXRlIHBCaXRtYXA7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBGWFNZU19tZW1jcHkzMihwQml0bWFwLT5HZXRCdWZmZXIoKSwgcERhdGEsIHBpdGNoICogaGVpZ2h0KTsNCi0gICAgaWYgKGJCb3R0b21VcCkgew0KLSAgICAgICAgRlhfTFBCWVRFIHRlbXBfYnVmID0gRlhfQWxsb2MoRlhfQllURSwgcGl0Y2gpOw0KLSAgICAgICAgaWYgKCF0ZW1wX2J1Zikgew0KLSAgICAgICAgICAgIGlmIChwQml0bWFwKSB7DQotICAgICAgICAgICAgICAgIGRlbGV0ZSBwQml0bWFwOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCB0b3AgPSAwLCBib3R0b20gPSBoZWlnaHQgLSAxOw0KLSAgICAgICAgd2hpbGUgKHRvcCA8IGJvdHRvbSkgew0KLSAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKHRlbXBfYnVmLCBwQml0bWFwLT5HZXRCdWZmZXIoKSArIHRvcCAqIHBpdGNoLCBwaXRjaCk7DQotICAgICAgICAgICAgRlhTWVNfbWVtY3B5MzIocEJpdG1hcC0+R2V0QnVmZmVyKCkgKyB0b3AgKiBwaXRjaCwgcEJpdG1hcC0+R2V0QnVmZmVyKCkgKyBib3R0b20gKiBwaXRjaCwgcGl0Y2gpOw0KLSAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKHBCaXRtYXAtPkdldEJ1ZmZlcigpICsgYm90dG9tICogcGl0Y2gsIHRlbXBfYnVmLCBwaXRjaCk7DQotICAgICAgICAgICAgdG9wICsrOw0KLSAgICAgICAgICAgIGJvdHRvbSAtLTsNCi0gICAgICAgIH0NCi0gICAgICAgIEZYX0ZyZWUodGVtcF9idWYpOw0KLSAgICAgICAgdGVtcF9idWYgPSBOVUxMOw0KLSAgICB9DQotICAgIGlmIChwYm1pLT5ibWlIZWFkZXIuYmlCaXRDb3VudCA9PSAxKSB7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkgKyspIHsNCi0gICAgICAgICAgICBwQml0bWFwLT5TZXRQYWxldHRlRW50cnkoaSwgKChGWF9EV09SRCopcGJtaS0+Ym1pQ29sb3JzKVtpXSB8IDB4ZmYwMDAwMDApOw0KLSAgICAgICAgfQ0KLSAgICB9IGVsc2UgaWYgKHBibWktPmJtaUhlYWRlci5iaUJpdENvdW50ID09IDgpIHsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7DQotICAgICAgICAgICAgcEJpdG1hcC0+U2V0UGFsZXR0ZUVudHJ5KGksICgoRlhfRFdPUkQqKXBibWktPmJtaUNvbG9ycylbaV0gfCAweGZmMDAwMDAwKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gcEJpdG1hcDsNCi19DQotQ0ZYX0RJQml0bWFwKiBDRlhfV2luZG93c0RJQjo6TG9hZEZyb21CdWYoQklUTUFQSU5GTyogcGJtaSwgTFBWT0lEIHBEYXRhKQ0KLXsNCi0gICAgcmV0dXJuIF9GWF9XaW5kb3dzRElCX0xvYWRGcm9tQnVmKHBibWksIHBEYXRhLCBGQUxTRSk7DQotfQ0KLUhCSVRNQVAJQ0ZYX1dpbmRvd3NESUI6OkdldEREQml0bWFwKGNvbnN0IENGWF9ESUJpdG1hcCogcEJpdG1hcCwgSERDIGhEQykNCi17DQotICAgIENGWF9CeXRlU3RyaW5nIGluZm8gPSBHZXRCaXRtYXBJbmZvKHBCaXRtYXApOw0KLSAgICBIQklUTUFQIGhCaXRtYXAgPSBOVUxMOw0KLSAgICBoQml0bWFwID0gQ3JlYXRlRElCaXRtYXAoaERDLCAoQklUTUFQSU5GT0hFQURFUiopKEZYX0xQQ1NUUilpbmZvLCBDQk1fSU5JVCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCaXRtYXAtPkdldEJ1ZmZlcigpLCAoQklUTUFQSU5GTyopKEZYX0xQQ1NUUilpbmZvLCBESUJfUkdCX0NPTE9SUyk7DQotICAgIHJldHVybiBoQml0bWFwOw0KLX0NCi12b2lkIEdldEJpdG1hcFNpemUoSEJJVE1BUCBoQml0bWFwLCBpbnQmIHcsIGludCYgaCkNCi17DQotICAgIEJJVE1BUCBibXA7DQotICAgIEdldE9iamVjdChoQml0bWFwLCBzaXplb2YgYm1wLCAmYm1wKTsNCi0gICAgdyA9IGJtcC5ibVdpZHRoOw0KLSAgICBoID0gYm1wLmJtSGVpZ2h0Ow0KLX0NCi1DRlhfRElCaXRtYXAqIENGWF9XaW5kb3dzRElCOjpMb2FkRnJvbUZpbGUoRlhfTFBDV1NUUiBmaWxlbmFtZSkNCi17DQotICAgIENXaW4zMlBsYXRmb3JtKiBwUGxhdGZvcm0gPSAoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpOw0KLSAgICBpZiAocFBsYXRmb3JtLT5tX0dkaXBsdXNFeHQuSXNBdmFpbGFibGUoKSkgew0KLSAgICAgICAgV0lORElCX09wZW5fQXJnc18gYXJnczsNCi0gICAgICAgIGFyZ3MuZmxhZ3MgPSBXSU5ESUJfT1BFTl9QQVRITkFNRTsNCi0gICAgICAgIGFyZ3MucGF0aF9uYW1lID0gZmlsZW5hbWU7DQotICAgICAgICByZXR1cm4gcFBsYXRmb3JtLT5tX0dkaXBsdXNFeHQuTG9hZERJQml0bWFwKGFyZ3MpOw0KLSAgICB9DQotICAgIEhCSVRNQVAgaEJpdG1hcCA9IChIQklUTUFQKUxvYWRJbWFnZVcoTlVMTCwgKHdjaGFyX3QqKWZpbGVuYW1lLCBJTUFHRV9CSVRNQVAsIDAsIDAsIExSX0xPQURGUk9NRklMRSk7DQotICAgIGlmIChoQml0bWFwID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIEhEQyBoREMgPSBDcmVhdGVDb21wYXRpYmxlREMoTlVMTCk7DQotICAgIGludCB3aWR0aCwgaGVpZ2h0Ow0KLSAgICBHZXRCaXRtYXBTaXplKGhCaXRtYXAsIHdpZHRoLCBoZWlnaHQpOw0KLSAgICBDRlhfRElCaXRtYXAqIHBESUJpdG1hcCA9IEZYX05FVyBDRlhfRElCaXRtYXA7DQotICAgIGlmICghcERJQml0bWFwKSB7DQotICAgICAgICBEZWxldGVEQyhoREMpOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKCFwRElCaXRtYXAtPkNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCBGWERJQl9SZ2IpKSB7DQotICAgICAgICBkZWxldGUgcERJQml0bWFwOw0KLSAgICAgICAgRGVsZXRlREMoaERDKTsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIENGWF9CeXRlU3RyaW5nIGluZm8gPSBHZXRCaXRtYXBJbmZvKHBESUJpdG1hcCk7DQotICAgIGludCByZXQgPSBHZXRESUJpdHMoaERDLCBoQml0bWFwLCAwLCBoZWlnaHQsIHBESUJpdG1hcC0+R2V0QnVmZmVyKCksIChCSVRNQVBJTkZPKikoRlhfTFBDU1RSKWluZm8sIERJQl9SR0JfQ09MT1JTKTsNCi0gICAgaWYgKCFyZXQpIHsNCi0gICAgICAgIGlmIChwRElCaXRtYXApIHsNCi0gICAgICAgICAgICBkZWxldGUgcERJQml0bWFwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcERJQml0bWFwID0gTlVMTDsNCi0gICAgfQ0KLSAgICBEZWxldGVEQyhoREMpOw0KLSAgICByZXR1cm4gcERJQml0bWFwOw0KLX0NCi1DRlhfRElCaXRtYXAqIENGWF9XaW5kb3dzRElCOjpMb2FkRElCaXRtYXAoV0lORElCX09wZW5fQXJnc18gYXJncykNCi17DQotICAgIENXaW4zMlBsYXRmb3JtKiBwUGxhdGZvcm0gPSAoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpOw0KLSAgICBpZiAocFBsYXRmb3JtLT5tX0dkaXBsdXNFeHQuSXNBdmFpbGFibGUoKSkgew0KLSAgICAgICAgcmV0dXJuIHBQbGF0Zm9ybS0+bV9HZGlwbHVzRXh0LkxvYWRESUJpdG1hcChhcmdzKTsNCi0gICAgfSBlbHNlIGlmIChhcmdzLmZsYWdzID09IFdJTkRJQl9PUEVOX01FTU9SWSkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgSEJJVE1BUCBoQml0bWFwID0gKEhCSVRNQVApTG9hZEltYWdlVyhOVUxMLCAod2NoYXJfdCopYXJncy5wYXRoX25hbWUsIElNQUdFX0JJVE1BUCwgMCwgMCwgTFJfTE9BREZST01GSUxFKTsNCi0gICAgaWYgKGhCaXRtYXAgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgSERDIGhEQyA9IENyZWF0ZUNvbXBhdGlibGVEQyhOVUxMKTsNCi0gICAgaW50IHdpZHRoLCBoZWlnaHQ7DQotICAgIEdldEJpdG1hcFNpemUoaEJpdG1hcCwgd2lkdGgsIGhlaWdodCk7DQotICAgIENGWF9ESUJpdG1hcCogcERJQml0bWFwID0gRlhfTkVXIENGWF9ESUJpdG1hcDsNCi0gICAgaWYgKCFwRElCaXRtYXApIHsNCi0gICAgICAgIERlbGV0ZURDKGhEQyk7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAoIXBESUJpdG1hcC0+Q3JlYXRlKHdpZHRoLCBoZWlnaHQsIEZYRElCX1JnYikpIHsNCi0gICAgICAgIGRlbGV0ZSBwRElCaXRtYXA7DQotICAgICAgICBEZWxldGVEQyhoREMpOw0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgQ0ZYX0J5dGVTdHJpbmcgaW5mbyA9IEdldEJpdG1hcEluZm8ocERJQml0bWFwKTsNCi0gICAgaW50IHJldCA9IEdldERJQml0cyhoREMsIGhCaXRtYXAsIDAsIGhlaWdodCwgcERJQml0bWFwLT5HZXRCdWZmZXIoKSwgKEJJVE1BUElORk8qKShGWF9MUENTVFIpaW5mbywgRElCX1JHQl9DT0xPUlMpOw0KLSAgICBpZiAoIXJldCkgew0KLSAgICAgICAgaWYgKHBESUJpdG1hcCkgew0KLSAgICAgICAgICAgIGRlbGV0ZSBwRElCaXRtYXA7DQotICAgICAgICB9DQotICAgICAgICBwRElCaXRtYXAgPSBOVUxMOw0KLSAgICB9DQotICAgIERlbGV0ZURDKGhEQyk7DQotICAgIHJldHVybiBwRElCaXRtYXA7DQotfQ0KLUNGWF9ESUJpdG1hcCogQ0ZYX1dpbmRvd3NESUI6OkxvYWRGcm9tRERCKEhEQyBoREMsIEhCSVRNQVAgaEJpdG1hcCwgRlhfRFdPUkQqIHBQYWxldHRlLCBGWF9EV09SRCBwYWxzaXplKQ0KLXsNCi0gICAgRlhfQk9PTCBiQ3JlYXRlZERDID0gaERDID09IE5VTEw7DQotICAgIGlmIChoREMgPT0gTlVMTCkgew0KLSAgICAgICAgaERDID0gQ3JlYXRlQ29tcGF0aWJsZURDKE5VTEwpOw0KLSAgICB9DQotICAgIEJJVE1BUElORk9IRUFERVIgYm1paDsNCi0gICAgRlhTWVNfbWVtc2V0MzIoJmJtaWgsIDAsIHNpemVvZiBibWloKTsNCi0gICAgYm1paC5iaVNpemUgPSBzaXplb2YgYm1paDsNCi0gICAgR2V0RElCaXRzKGhEQywgaEJpdG1hcCwgMCwgMCwgTlVMTCwgKEJJVE1BUElORk8qKSZibWloLCBESUJfUkdCX0NPTE9SUyk7DQotICAgIGludCB3aWR0aCA9IGJtaWguYmlXaWR0aDsNCi0gICAgaW50IGhlaWdodCA9IGFicyhibWloLmJpSGVpZ2h0KTsNCi0gICAgYm1paC5iaUhlaWdodCA9IC1oZWlnaHQ7DQotICAgIGJtaWguYmlDb21wcmVzc2lvbiA9IEJJX1JHQjsNCi0gICAgQ0ZYX0RJQml0bWFwKiBwRElCaXRtYXAgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOw0KLSAgICBpZiAoIXBESUJpdG1hcCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaW50IHJldCA9IDA7DQotICAgIGlmIChibWloLmJpQml0Q291bnQgPT0gMSB8fCBibWloLmJpQml0Q291bnQgPT0gOCkgew0KLSAgICAgICAgaW50IHNpemUgPSBzaXplb2YgKEJJVE1BUElORk9IRUFERVIpICsgODsNCi0gICAgICAgIGlmIChibWloLmJpQml0Q291bnQgPT0gOCkgew0KLSAgICAgICAgICAgIHNpemUgKz0gc2l6ZW9mIChGWF9EV09SRCkgKiAyNTQ7DQotICAgICAgICB9DQotICAgICAgICBCSVRNQVBJTkZPKiBwYm1paCA9IChCSVRNQVBJTkZPKilGWF9BbGxvYyhGWF9CWVRFLCBzaXplKTsNCi0gICAgICAgIGlmICghcGJtaWgpIHsNCi0gICAgICAgICAgICBkZWxldGUgcERJQml0bWFwOw0KLSAgICAgICAgICAgIGlmIChiQ3JlYXRlZERDKSB7DQotICAgICAgICAgICAgICAgIERlbGV0ZURDKGhEQyk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhTWVNfbWVtc2V0MzIocGJtaWgsIDAsIHNpemVvZiAoQklUTUFQSU5GT0hFQURFUikpOw0KLSAgICAgICAgcGJtaWgtPmJtaUhlYWRlci5iaVNpemUgPSBzaXplb2YoQklUTUFQSU5GT0hFQURFUik7DQotICAgICAgICBwYm1paC0+Ym1pSGVhZGVyLmJpQml0Q291bnQgPSBibWloLmJpQml0Q291bnQ7DQotICAgICAgICBwYm1paC0+Ym1pSGVhZGVyLmJpQ29tcHJlc3Npb24gPSBCSV9SR0I7DQotICAgICAgICBwYm1paC0+Ym1pSGVhZGVyLmJpSGVpZ2h0ID0gLWhlaWdodDsNCi0gICAgICAgIHBibWloLT5ibWlIZWFkZXIuYmlQbGFuZXMgPSAxOw0KLSAgICAgICAgcGJtaWgtPmJtaUhlYWRlci5iaVdpZHRoID0gYm1paC5iaVdpZHRoOw0KLSAgICAgICAgaWYgKCFwRElCaXRtYXAtPkNyZWF0ZShibWloLmJpV2lkdGgsIGhlaWdodCwgYm1paC5iaUJpdENvdW50ID09IDEgPyBGWERJQl8xYnBwUmdiIDogRlhESUJfOGJwcFJnYikpIHsNCi0gICAgICAgICAgICBkZWxldGUgcERJQml0bWFwOw0KLSAgICAgICAgICAgIEZYX0ZyZWUocGJtaWgpOw0KLSAgICAgICAgICAgIGlmIChiQ3JlYXRlZERDKSB7DQotICAgICAgICAgICAgICAgIERlbGV0ZURDKGhEQyk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0ID0gR2V0RElCaXRzKGhEQywgaEJpdG1hcCwgMCwgaGVpZ2h0LCBwRElCaXRtYXAtPkdldEJ1ZmZlcigpLCAoQklUTUFQSU5GTyopcGJtaWgsIERJQl9SR0JfQ09MT1JTKTsNCi0gICAgICAgIEZYX0ZyZWUocGJtaWgpOw0KLSAgICAgICAgcGJtaWggPSBOVUxMOw0KLSAgICAgICAgcERJQml0bWFwLT5Db3B5UGFsZXR0ZShwUGFsZXR0ZSwgcGFsc2l6ZSk7DQotICAgIH0gZWxzZSB7DQotICAgICAgICBpZiAoYm1paC5iaUJpdENvdW50IDw9IDI0KSB7DQotICAgICAgICAgICAgYm1paC5iaUJpdENvdW50ID0gMjQ7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGJtaWguYmlCaXRDb3VudCA9IDMyOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCFwRElCaXRtYXAtPkNyZWF0ZShibWloLmJpV2lkdGgsIGhlaWdodCwgYm1paC5iaUJpdENvdW50ID09IDI0ID8gRlhESUJfUmdiIDogRlhESUJfUmdiMzIpKSB7DQotICAgICAgICAgICAgZGVsZXRlIHBESUJpdG1hcDsNCi0gICAgICAgICAgICBpZiAoYkNyZWF0ZWREQykgew0KLSAgICAgICAgICAgICAgICBEZWxldGVEQyhoREMpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldCA9IEdldERJQml0cyhoREMsIGhCaXRtYXAsIDAsIGhlaWdodCwgcERJQml0bWFwLT5HZXRCdWZmZXIoKSwgKEJJVE1BUElORk8qKSZibWloLCBESUJfUkdCX0NPTE9SUyk7DQotICAgICAgICBpZiAocmV0ICE9IDAgJiYgYm1paC5iaUJpdENvdW50ID09IDMyKSB7DQotICAgICAgICAgICAgaW50IHBpdGNoID0gcERJQml0bWFwLT5HZXRQaXRjaCgpOw0KLSAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICsrKSB7DQotICAgICAgICAgICAgICAgIEZYX0JZVEUqIGRlc3Rfc2NhbiA9IChGWF9CWVRFKikocERJQml0bWFwLT5HZXRCdWZmZXIoKSArIHJvdyAqIHBpdGNoKTsNCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgd2lkdGg7IGNvbCsrKSB7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW5bM10gPSAyNTU7DQotICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAocmV0ID09IDApIHsNCi0gICAgICAgIGlmIChwRElCaXRtYXApIHsNCi0gICAgICAgICAgICBkZWxldGUgcERJQml0bWFwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcERJQml0bWFwID0gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAoYkNyZWF0ZWREQykgew0KLSAgICAgICAgRGVsZXRlREMoaERDKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gcERJQml0bWFwOw0KLX0NCi1DRlhfV2luZG93c0RJQjo6Q0ZYX1dpbmRvd3NESUIoSERDIGhEQywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQ0KLXsNCi0gICAgQ3JlYXRlKHdpZHRoLCBoZWlnaHQsIEZYRElCX1JnYiwgKEZYX0xQQllURSkxKTsNCi0gICAgQklUTUFQSU5GT0hFQURFUiBibWloOw0KLSAgICBGWFNZU19tZW1zZXQzMigmYm1paCwgMCwgc2l6ZW9mIGJtaWgpOw0KLSAgICBibWloLmJpU2l6ZSA9IHNpemVvZiBibWloOw0KLSAgICBibWloLmJpQml0Q291bnQgPSAyNDsNCi0gICAgYm1paC5iaUhlaWdodCA9IC1oZWlnaHQ7DQotICAgIGJtaWguYmlQbGFuZXMgPSAxOw0KLSAgICBibWloLmJpV2lkdGggPSB3aWR0aDsNCi0gICAgbV9oQml0bWFwID0gQ3JlYXRlRElCU2VjdGlvbihoREMsIChCSVRNQVBJTkZPKikmYm1paCwgRElCX1JHQl9DT0xPUlMsIChMUFZPSUQqKSZtX3BCdWZmZXIsIE5VTEwsIDApOw0KLSAgICBtX2hNZW1EQyA9IENyZWF0ZUNvbXBhdGlibGVEQyhoREMpOw0KLSAgICBtX2hPbGRCaXRtYXAgPSAoSEJJVE1BUClTZWxlY3RPYmplY3QobV9oTWVtREMsIG1faEJpdG1hcCk7DQotfQ0KLUNGWF9XaW5kb3dzRElCOjp+Q0ZYX1dpbmRvd3NESUIoKQ0KLXsNCi0gICAgU2VsZWN0T2JqZWN0KG1faE1lbURDLCBtX2hPbGRCaXRtYXApOw0KLSAgICBEZWxldGVEQyhtX2hNZW1EQyk7DQotICAgIERlbGV0ZU9iamVjdChtX2hCaXRtYXApOw0KLX0NCi12b2lkIENGWF9XaW5kb3dzRElCOjpMb2FkRnJvbURldmljZShIREMgaERDLCBpbnQgbGVmdCwgaW50IHRvcCkNCi17DQotICAgIDo6Qml0Qmx0KG1faE1lbURDLCAwLCAwLCBtX1dpZHRoLCBtX0hlaWdodCwgaERDLCBsZWZ0LCB0b3AsIFNSQ0NPUFkpOw0KLX0NCi12b2lkIENGWF9XaW5kb3dzRElCOjpTZXRUb0RldmljZShIREMgaERDLCBpbnQgbGVmdCwgaW50IHRvcCkNCi17DQotICAgIDo6Qml0Qmx0KGhEQywgbGVmdCwgdG9wLCBtX1dpZHRoLCBtX0hlaWdodCwgbV9oTWVtREMsIDAsIDAsIFNSQ0NPUFkpOw0KLX0NCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiCisjaWYgX0ZYX09TXyA9PSBfRlhfV0lOMzJfREVTS1RPUF8gfHwgIF9GWF9PU18gPT0gX0ZYX1dJTjY0XworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2Vfd2luMzIuaCIKKyNpbmNsdWRlICJ3aW4zMl9pbnQuaCIKK0NGWF9CeXRlU3RyaW5nIENGWF9XaW5kb3dzRElCOjpHZXRCaXRtYXBJbmZvKGNvbnN0IENGWF9ESUJpdG1hcCogcEJpdG1hcCkKK3sKKyAgICBDRlhfQnl0ZVN0cmluZyByZXN1bHQ7CisgICAgaW50IGxlbiA9IHNpemVvZiAoQklUTUFQSU5GT0hFQURFUik7CisgICAgaWYgKHBCaXRtYXAtPkdldEJQUCgpID09IDEgfHwgcEJpdG1hcC0+R2V0QlBQKCkgPT0gOCkgeworICAgICAgICBsZW4gKz0gc2l6ZW9mIChEV09SRCkgKiAoaW50KSgxIDw8IHBCaXRtYXAtPkdldEJQUCgpKTsKKyAgICB9CisgICAgQklUTUFQSU5GT0hFQURFUiogcGJtaWggPSAoQklUTUFQSU5GT0hFQURFUiopcmVzdWx0LkdldEJ1ZmZlcihsZW4pOworICAgIEZYU1lTX21lbXNldDMyKHBibWloLCAwLCBzaXplb2YgKEJJVE1BUElORk9IRUFERVIpKTsKKyAgICBwYm1paC0+YmlTaXplID0gc2l6ZW9mKEJJVE1BUElORk9IRUFERVIpOworICAgIHBibWloLT5iaUJpdENvdW50ID0gcEJpdG1hcC0+R2V0QlBQKCk7CisgICAgcGJtaWgtPmJpQ29tcHJlc3Npb24gPSBCSV9SR0I7CisgICAgcGJtaWgtPmJpSGVpZ2h0ID0gLShpbnQpcEJpdG1hcC0+R2V0SGVpZ2h0KCk7CisgICAgcGJtaWgtPmJpUGxhbmVzID0gMTsKKyAgICBwYm1paC0+YmlXaWR0aCA9IHBCaXRtYXAtPkdldFdpZHRoKCk7CisgICAgaWYgKHBCaXRtYXAtPkdldEJQUCgpID09IDgpIHsKKyAgICAgICAgRlhfRFdPUkQqIHBQYWxldHRlID0gKEZYX0RXT1JEKikocGJtaWggKyAxKTsKKyAgICAgICAgaWYgKHBCaXRtYXAtPkdldFBhbGV0dGUoKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSArKykgeworICAgICAgICAgICAgICAgIHBQYWxldHRlW2ldID0gaSAqIDB4MDEwMTAxOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsKKyAgICAgICAgICAgICAgICBwUGFsZXR0ZVtpXSA9IHBCaXRtYXAtPkdldFBhbGV0dGUoKVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocEJpdG1hcC0+R2V0QlBQKCkgPT0gMSkgeworICAgICAgICBGWF9EV09SRCogcFBhbGV0dGUgPSAoRlhfRFdPUkQqKShwYm1paCArIDEpOworICAgICAgICBpZiAocEJpdG1hcC0+R2V0UGFsZXR0ZSgpID09IE5VTEwpIHsKKyAgICAgICAgICAgIHBQYWxldHRlWzBdID0gMDsKKyAgICAgICAgICAgIHBQYWxldHRlWzFdID0gMHhmZmZmZmY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwUGFsZXR0ZVswXSA9IHBCaXRtYXAtPkdldFBhbGV0dGUoKVswXTsKKyAgICAgICAgICAgIHBQYWxldHRlWzFdID0gcEJpdG1hcC0+R2V0UGFsZXR0ZSgpWzFdOworICAgICAgICB9CisgICAgfQorICAgIHJlc3VsdC5SZWxlYXNlQnVmZmVyKGxlbik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KK0NGWF9ESUJpdG1hcCogX0ZYX1dpbmRvd3NESUJfTG9hZEZyb21CdWYoQklUTUFQSU5GTyogcGJtaSwgTFBWT0lEIHBEYXRhLCBGWF9CT09MIGJBbHBoYSkKK3sKKyAgICBpbnQgd2lkdGggPSBwYm1pLT5ibWlIZWFkZXIuYmlXaWR0aDsKKyAgICBpbnQgaGVpZ2h0ID0gcGJtaS0+Ym1pSGVhZGVyLmJpSGVpZ2h0OworICAgIEJPT0wgYkJvdHRvbVVwID0gVFJVRTsKKyAgICBpZiAoaGVpZ2h0IDwgMCkgeworICAgICAgICBoZWlnaHQgPSAtaGVpZ2h0OworICAgICAgICBiQm90dG9tVXAgPSBGQUxTRTsKKyAgICB9CisgICAgaW50IHBpdGNoID0gKHdpZHRoICogcGJtaS0+Ym1pSGVhZGVyLmJpQml0Q291bnQgKyAzMSkgLyAzMiAqIDQ7CisgICAgQ0ZYX0RJQml0bWFwKiBwQml0bWFwID0gRlhfTkVXIENGWF9ESUJpdG1hcDsKKyAgICBpZiAoIXBCaXRtYXApIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIEZYRElCX0Zvcm1hdCBmb3JtYXQgPSBiQWxwaGEgPyAoRlhESUJfRm9ybWF0KShwYm1pLT5ibWlIZWFkZXIuYmlCaXRDb3VudCArIDB4MjAwKSA6IChGWERJQl9Gb3JtYXQpcGJtaS0+Ym1pSGVhZGVyLmJpQml0Q291bnQ7CisgICAgRlhfQk9PTCByZXQgPSBwQml0bWFwLT5DcmVhdGUod2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKKyAgICBpZiAoIXJldCkgeworICAgICAgICBkZWxldGUgcEJpdG1hcDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIEZYU1lTX21lbWNweTMyKHBCaXRtYXAtPkdldEJ1ZmZlcigpLCBwRGF0YSwgcGl0Y2ggKiBoZWlnaHQpOworICAgIGlmIChiQm90dG9tVXApIHsKKyAgICAgICAgRlhfTFBCWVRFIHRlbXBfYnVmID0gRlhfQWxsb2MoRlhfQllURSwgcGl0Y2gpOworICAgICAgICBpZiAoIXRlbXBfYnVmKSB7CisgICAgICAgICAgICBpZiAocEJpdG1hcCkgeworICAgICAgICAgICAgICAgIGRlbGV0ZSBwQml0bWFwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaW50IHRvcCA9IDAsIGJvdHRvbSA9IGhlaWdodCAtIDE7CisgICAgICAgIHdoaWxlICh0b3AgPCBib3R0b20pIHsKKyAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKHRlbXBfYnVmLCBwQml0bWFwLT5HZXRCdWZmZXIoKSArIHRvcCAqIHBpdGNoLCBwaXRjaCk7CisgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihwQml0bWFwLT5HZXRCdWZmZXIoKSArIHRvcCAqIHBpdGNoLCBwQml0bWFwLT5HZXRCdWZmZXIoKSArIGJvdHRvbSAqIHBpdGNoLCBwaXRjaCk7CisgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihwQml0bWFwLT5HZXRCdWZmZXIoKSArIGJvdHRvbSAqIHBpdGNoLCB0ZW1wX2J1ZiwgcGl0Y2gpOworICAgICAgICAgICAgdG9wICsrOworICAgICAgICAgICAgYm90dG9tIC0tOworICAgICAgICB9CisgICAgICAgIEZYX0ZyZWUodGVtcF9idWYpOworICAgICAgICB0ZW1wX2J1ZiA9IE5VTEw7CisgICAgfQorICAgIGlmIChwYm1pLT5ibWlIZWFkZXIuYmlCaXRDb3VudCA9PSAxKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSArKykgeworICAgICAgICAgICAgcEJpdG1hcC0+U2V0UGFsZXR0ZUVudHJ5KGksICgoRlhfRFdPUkQqKXBibWktPmJtaUNvbG9ycylbaV0gfCAweGZmMDAwMDAwKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAocGJtaS0+Ym1pSGVhZGVyLmJpQml0Q291bnQgPT0gOCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSArKykgeworICAgICAgICAgICAgcEJpdG1hcC0+U2V0UGFsZXR0ZUVudHJ5KGksICgoRlhfRFdPUkQqKXBibWktPmJtaUNvbG9ycylbaV0gfCAweGZmMDAwMDAwKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcEJpdG1hcDsKK30KK0NGWF9ESUJpdG1hcCogQ0ZYX1dpbmRvd3NESUI6OkxvYWRGcm9tQnVmKEJJVE1BUElORk8qIHBibWksIExQVk9JRCBwRGF0YSkKK3sKKyAgICByZXR1cm4gX0ZYX1dpbmRvd3NESUJfTG9hZEZyb21CdWYocGJtaSwgcERhdGEsIEZBTFNFKTsKK30KK0hCSVRNQVAJQ0ZYX1dpbmRvd3NESUI6OkdldEREQml0bWFwKGNvbnN0IENGWF9ESUJpdG1hcCogcEJpdG1hcCwgSERDIGhEQykKK3sKKyAgICBDRlhfQnl0ZVN0cmluZyBpbmZvID0gR2V0Qml0bWFwSW5mbyhwQml0bWFwKTsKKyAgICBIQklUTUFQIGhCaXRtYXAgPSBOVUxMOworICAgIGhCaXRtYXAgPSBDcmVhdGVESUJpdG1hcChoREMsIChCSVRNQVBJTkZPSEVBREVSKikoRlhfTFBDU1RSKWluZm8sIENCTV9JTklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQml0bWFwLT5HZXRCdWZmZXIoKSwgKEJJVE1BUElORk8qKShGWF9MUENTVFIpaW5mbywgRElCX1JHQl9DT0xPUlMpOworICAgIHJldHVybiBoQml0bWFwOworfQordm9pZCBHZXRCaXRtYXBTaXplKEhCSVRNQVAgaEJpdG1hcCwgaW50JiB3LCBpbnQmIGgpCit7CisgICAgQklUTUFQIGJtcDsKKyAgICBHZXRPYmplY3QoaEJpdG1hcCwgc2l6ZW9mIGJtcCwgJmJtcCk7CisgICAgdyA9IGJtcC5ibVdpZHRoOworICAgIGggPSBibXAuYm1IZWlnaHQ7Cit9CitDRlhfRElCaXRtYXAqIENGWF9XaW5kb3dzRElCOjpMb2FkRnJvbUZpbGUoRlhfTFBDV1NUUiBmaWxlbmFtZSkKK3sKKyAgICBDV2luMzJQbGF0Zm9ybSogcFBsYXRmb3JtID0gKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKTsKKyAgICBpZiAocFBsYXRmb3JtLT5tX0dkaXBsdXNFeHQuSXNBdmFpbGFibGUoKSkgeworICAgICAgICBXSU5ESUJfT3Blbl9BcmdzXyBhcmdzOworICAgICAgICBhcmdzLmZsYWdzID0gV0lORElCX09QRU5fUEFUSE5BTUU7CisgICAgICAgIGFyZ3MucGF0aF9uYW1lID0gZmlsZW5hbWU7CisgICAgICAgIHJldHVybiBwUGxhdGZvcm0tPm1fR2RpcGx1c0V4dC5Mb2FkRElCaXRtYXAoYXJncyk7CisgICAgfQorICAgIEhCSVRNQVAgaEJpdG1hcCA9IChIQklUTUFQKUxvYWRJbWFnZVcoTlVMTCwgKHdjaGFyX3QqKWZpbGVuYW1lLCBJTUFHRV9CSVRNQVAsIDAsIDAsIExSX0xPQURGUk9NRklMRSk7CisgICAgaWYgKGhCaXRtYXAgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgSERDIGhEQyA9IENyZWF0ZUNvbXBhdGlibGVEQyhOVUxMKTsKKyAgICBpbnQgd2lkdGgsIGhlaWdodDsKKyAgICBHZXRCaXRtYXBTaXplKGhCaXRtYXAsIHdpZHRoLCBoZWlnaHQpOworICAgIENGWF9ESUJpdG1hcCogcERJQml0bWFwID0gRlhfTkVXIENGWF9ESUJpdG1hcDsKKyAgICBpZiAoIXBESUJpdG1hcCkgeworICAgICAgICBEZWxldGVEQyhoREMpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKCFwRElCaXRtYXAtPkNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCBGWERJQl9SZ2IpKSB7CisgICAgICAgIGRlbGV0ZSBwRElCaXRtYXA7CisgICAgICAgIERlbGV0ZURDKGhEQyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDRlhfQnl0ZVN0cmluZyBpbmZvID0gR2V0Qml0bWFwSW5mbyhwRElCaXRtYXApOworICAgIGludCByZXQgPSBHZXRESUJpdHMoaERDLCBoQml0bWFwLCAwLCBoZWlnaHQsIHBESUJpdG1hcC0+R2V0QnVmZmVyKCksIChCSVRNQVBJTkZPKikoRlhfTFBDU1RSKWluZm8sIERJQl9SR0JfQ09MT1JTKTsKKyAgICBpZiAoIXJldCkgeworICAgICAgICBpZiAocERJQml0bWFwKSB7CisgICAgICAgICAgICBkZWxldGUgcERJQml0bWFwOworICAgICAgICB9CisgICAgICAgIHBESUJpdG1hcCA9IE5VTEw7CisgICAgfQorICAgIERlbGV0ZURDKGhEQyk7CisgICAgcmV0dXJuIHBESUJpdG1hcDsKK30KK0NGWF9ESUJpdG1hcCogQ0ZYX1dpbmRvd3NESUI6OkxvYWRESUJpdG1hcChXSU5ESUJfT3Blbl9BcmdzXyBhcmdzKQoreworICAgIENXaW4zMlBsYXRmb3JtKiBwUGxhdGZvcm0gPSAoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpOworICAgIGlmIChwUGxhdGZvcm0tPm1fR2RpcGx1c0V4dC5Jc0F2YWlsYWJsZSgpKSB7CisgICAgICAgIHJldHVybiBwUGxhdGZvcm0tPm1fR2RpcGx1c0V4dC5Mb2FkRElCaXRtYXAoYXJncyk7CisgICAgfSBlbHNlIGlmIChhcmdzLmZsYWdzID09IFdJTkRJQl9PUEVOX01FTU9SWSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgSEJJVE1BUCBoQml0bWFwID0gKEhCSVRNQVApTG9hZEltYWdlVyhOVUxMLCAod2NoYXJfdCopYXJncy5wYXRoX25hbWUsIElNQUdFX0JJVE1BUCwgMCwgMCwgTFJfTE9BREZST01GSUxFKTsKKyAgICBpZiAoaEJpdG1hcCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBIREMgaERDID0gQ3JlYXRlQ29tcGF0aWJsZURDKE5VTEwpOworICAgIGludCB3aWR0aCwgaGVpZ2h0OworICAgIEdldEJpdG1hcFNpemUoaEJpdG1hcCwgd2lkdGgsIGhlaWdodCk7CisgICAgQ0ZYX0RJQml0bWFwKiBwRElCaXRtYXAgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOworICAgIGlmICghcERJQml0bWFwKSB7CisgICAgICAgIERlbGV0ZURDKGhEQyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoIXBESUJpdG1hcC0+Q3JlYXRlKHdpZHRoLCBoZWlnaHQsIEZYRElCX1JnYikpIHsKKyAgICAgICAgZGVsZXRlIHBESUJpdG1hcDsKKyAgICAgICAgRGVsZXRlREMoaERDKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENGWF9CeXRlU3RyaW5nIGluZm8gPSBHZXRCaXRtYXBJbmZvKHBESUJpdG1hcCk7CisgICAgaW50IHJldCA9IEdldERJQml0cyhoREMsIGhCaXRtYXAsIDAsIGhlaWdodCwgcERJQml0bWFwLT5HZXRCdWZmZXIoKSwgKEJJVE1BUElORk8qKShGWF9MUENTVFIpaW5mbywgRElCX1JHQl9DT0xPUlMpOworICAgIGlmICghcmV0KSB7CisgICAgICAgIGlmIChwRElCaXRtYXApIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwRElCaXRtYXA7CisgICAgICAgIH0KKyAgICAgICAgcERJQml0bWFwID0gTlVMTDsKKyAgICB9CisgICAgRGVsZXRlREMoaERDKTsKKyAgICByZXR1cm4gcERJQml0bWFwOworfQorQ0ZYX0RJQml0bWFwKiBDRlhfV2luZG93c0RJQjo6TG9hZEZyb21EREIoSERDIGhEQywgSEJJVE1BUCBoQml0bWFwLCBGWF9EV09SRCogcFBhbGV0dGUsIEZYX0RXT1JEIHBhbHNpemUpCit7CisgICAgRlhfQk9PTCBiQ3JlYXRlZERDID0gaERDID09IE5VTEw7CisgICAgaWYgKGhEQyA9PSBOVUxMKSB7CisgICAgICAgIGhEQyA9IENyZWF0ZUNvbXBhdGlibGVEQyhOVUxMKTsKKyAgICB9CisgICAgQklUTUFQSU5GT0hFQURFUiBibWloOworICAgIEZYU1lTX21lbXNldDMyKCZibWloLCAwLCBzaXplb2YgYm1paCk7CisgICAgYm1paC5iaVNpemUgPSBzaXplb2YgYm1paDsKKyAgICBHZXRESUJpdHMoaERDLCBoQml0bWFwLCAwLCAwLCBOVUxMLCAoQklUTUFQSU5GTyopJmJtaWgsIERJQl9SR0JfQ09MT1JTKTsKKyAgICBpbnQgd2lkdGggPSBibWloLmJpV2lkdGg7CisgICAgaW50IGhlaWdodCA9IGFicyhibWloLmJpSGVpZ2h0KTsKKyAgICBibWloLmJpSGVpZ2h0ID0gLWhlaWdodDsKKyAgICBibWloLmJpQ29tcHJlc3Npb24gPSBCSV9SR0I7CisgICAgQ0ZYX0RJQml0bWFwKiBwRElCaXRtYXAgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOworICAgIGlmICghcERJQml0bWFwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpbnQgcmV0ID0gMDsKKyAgICBpZiAoYm1paC5iaUJpdENvdW50ID09IDEgfHwgYm1paC5iaUJpdENvdW50ID09IDgpIHsKKyAgICAgICAgaW50IHNpemUgPSBzaXplb2YgKEJJVE1BUElORk9IRUFERVIpICsgODsKKyAgICAgICAgaWYgKGJtaWguYmlCaXRDb3VudCA9PSA4KSB7CisgICAgICAgICAgICBzaXplICs9IHNpemVvZiAoRlhfRFdPUkQpICogMjU0OworICAgICAgICB9CisgICAgICAgIEJJVE1BUElORk8qIHBibWloID0gKEJJVE1BUElORk8qKUZYX0FsbG9jKEZYX0JZVEUsIHNpemUpOworICAgICAgICBpZiAoIXBibWloKSB7CisgICAgICAgICAgICBkZWxldGUgcERJQml0bWFwOworICAgICAgICAgICAgaWYgKGJDcmVhdGVkREMpIHsKKyAgICAgICAgICAgICAgICBEZWxldGVEQyhoREMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgRlhTWVNfbWVtc2V0MzIocGJtaWgsIDAsIHNpemVvZiAoQklUTUFQSU5GT0hFQURFUikpOworICAgICAgICBwYm1paC0+Ym1pSGVhZGVyLmJpU2l6ZSA9IHNpemVvZihCSVRNQVBJTkZPSEVBREVSKTsKKyAgICAgICAgcGJtaWgtPmJtaUhlYWRlci5iaUJpdENvdW50ID0gYm1paC5iaUJpdENvdW50OworICAgICAgICBwYm1paC0+Ym1pSGVhZGVyLmJpQ29tcHJlc3Npb24gPSBCSV9SR0I7CisgICAgICAgIHBibWloLT5ibWlIZWFkZXIuYmlIZWlnaHQgPSAtaGVpZ2h0OworICAgICAgICBwYm1paC0+Ym1pSGVhZGVyLmJpUGxhbmVzID0gMTsKKyAgICAgICAgcGJtaWgtPmJtaUhlYWRlci5iaVdpZHRoID0gYm1paC5iaVdpZHRoOworICAgICAgICBpZiAoIXBESUJpdG1hcC0+Q3JlYXRlKGJtaWguYmlXaWR0aCwgaGVpZ2h0LCBibWloLmJpQml0Q291bnQgPT0gMSA/IEZYRElCXzFicHBSZ2IgOiBGWERJQl84YnBwUmdiKSkgeworICAgICAgICAgICAgZGVsZXRlIHBESUJpdG1hcDsKKyAgICAgICAgICAgIEZYX0ZyZWUocGJtaWgpOworICAgICAgICAgICAgaWYgKGJDcmVhdGVkREMpIHsKKyAgICAgICAgICAgICAgICBEZWxldGVEQyhoREMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcmV0ID0gR2V0RElCaXRzKGhEQywgaEJpdG1hcCwgMCwgaGVpZ2h0LCBwRElCaXRtYXAtPkdldEJ1ZmZlcigpLCAoQklUTUFQSU5GTyopcGJtaWgsIERJQl9SR0JfQ09MT1JTKTsKKyAgICAgICAgRlhfRnJlZShwYm1paCk7CisgICAgICAgIHBibWloID0gTlVMTDsKKyAgICAgICAgcERJQml0bWFwLT5Db3B5UGFsZXR0ZShwUGFsZXR0ZSwgcGFsc2l6ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGJtaWguYmlCaXRDb3VudCA8PSAyNCkgeworICAgICAgICAgICAgYm1paC5iaUJpdENvdW50ID0gMjQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBibWloLmJpQml0Q291bnQgPSAzMjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXBESUJpdG1hcC0+Q3JlYXRlKGJtaWguYmlXaWR0aCwgaGVpZ2h0LCBibWloLmJpQml0Q291bnQgPT0gMjQgPyBGWERJQl9SZ2IgOiBGWERJQl9SZ2IzMikpIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwRElCaXRtYXA7CisgICAgICAgICAgICBpZiAoYkNyZWF0ZWREQykgeworICAgICAgICAgICAgICAgIERlbGV0ZURDKGhEQyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICByZXQgPSBHZXRESUJpdHMoaERDLCBoQml0bWFwLCAwLCBoZWlnaHQsIHBESUJpdG1hcC0+R2V0QnVmZmVyKCksIChCSVRNQVBJTkZPKikmYm1paCwgRElCX1JHQl9DT0xPUlMpOworICAgICAgICBpZiAocmV0ICE9IDAgJiYgYm1paC5iaUJpdENvdW50ID09IDMyKSB7CisgICAgICAgICAgICBpbnQgcGl0Y2ggPSBwRElCaXRtYXAtPkdldFBpdGNoKCk7CisgICAgICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdyArKykgeworICAgICAgICAgICAgICAgIEZYX0JZVEUqIGRlc3Rfc2NhbiA9IChGWF9CWVRFKikocERJQml0bWFwLT5HZXRCdWZmZXIoKSArIHJvdyAqIHBpdGNoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBjb2wgPSAwOyBjb2wgPCB3aWR0aDsgY29sKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzdF9zY2FuWzNdID0gMjU1OworICAgICAgICAgICAgICAgICAgICBkZXN0X3NjYW4gKz0gNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgIGlmIChwRElCaXRtYXApIHsKKyAgICAgICAgICAgIGRlbGV0ZSBwRElCaXRtYXA7CisgICAgICAgIH0KKyAgICAgICAgcERJQml0bWFwID0gTlVMTDsKKyAgICB9CisgICAgaWYgKGJDcmVhdGVkREMpIHsKKyAgICAgICAgRGVsZXRlREMoaERDKTsKKyAgICB9CisgICAgcmV0dXJuIHBESUJpdG1hcDsKK30KK0NGWF9XaW5kb3dzRElCOjpDRlhfV2luZG93c0RJQihIREMgaERDLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgQ3JlYXRlKHdpZHRoLCBoZWlnaHQsIEZYRElCX1JnYiwgKEZYX0xQQllURSkxKTsKKyAgICBCSVRNQVBJTkZPSEVBREVSIGJtaWg7CisgICAgRlhTWVNfbWVtc2V0MzIoJmJtaWgsIDAsIHNpemVvZiBibWloKTsKKyAgICBibWloLmJpU2l6ZSA9IHNpemVvZiBibWloOworICAgIGJtaWguYmlCaXRDb3VudCA9IDI0OworICAgIGJtaWguYmlIZWlnaHQgPSAtaGVpZ2h0OworICAgIGJtaWguYmlQbGFuZXMgPSAxOworICAgIGJtaWguYmlXaWR0aCA9IHdpZHRoOworICAgIG1faEJpdG1hcCA9IENyZWF0ZURJQlNlY3Rpb24oaERDLCAoQklUTUFQSU5GTyopJmJtaWgsIERJQl9SR0JfQ09MT1JTLCAoTFBWT0lEKikmbV9wQnVmZmVyLCBOVUxMLCAwKTsKKyAgICBtX2hNZW1EQyA9IENyZWF0ZUNvbXBhdGlibGVEQyhoREMpOworICAgIG1faE9sZEJpdG1hcCA9IChIQklUTUFQKVNlbGVjdE9iamVjdChtX2hNZW1EQywgbV9oQml0bWFwKTsKK30KK0NGWF9XaW5kb3dzRElCOjp+Q0ZYX1dpbmRvd3NESUIoKQoreworICAgIFNlbGVjdE9iamVjdChtX2hNZW1EQywgbV9oT2xkQml0bWFwKTsKKyAgICBEZWxldGVEQyhtX2hNZW1EQyk7CisgICAgRGVsZXRlT2JqZWN0KG1faEJpdG1hcCk7Cit9Cit2b2lkIENGWF9XaW5kb3dzRElCOjpMb2FkRnJvbURldmljZShIREMgaERDLCBpbnQgbGVmdCwgaW50IHRvcCkKK3sKKyAgICA6OkJpdEJsdChtX2hNZW1EQywgMCwgMCwgbV9XaWR0aCwgbV9IZWlnaHQsIGhEQywgbGVmdCwgdG9wLCBTUkNDT1BZKTsKK30KK3ZvaWQgQ0ZYX1dpbmRvd3NESUI6OlNldFRvRGV2aWNlKEhEQyBoREMsIGludCBsZWZ0LCBpbnQgdG9wKQoreworICAgIDo6Qml0Qmx0KGhEQywgbGVmdCwgdG9wLCBtX1dpZHRoLCBtX0hlaWdodCwgbV9oTWVtREMsIDAsIDAsIFNSQ0NPUFkpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGdlL3dpbjMyL2Z4X3dpbjMyX2R3cml0ZS5jcHAgYi9jb3JlL3NyYy9meGdlL3dpbjMyL2Z4X3dpbjMyX2R3cml0ZS5jcHAKaW5kZXggZDRjOTYyMC4uMmMyNzVhOCAxMDA2NDQKLS0tIGEvY29yZS9zcmMvZnhnZS93aW4zMi9meF93aW4zMl9kd3JpdGUuY3BwCisrKyBiL2NvcmUvc3JjL2Z4Z2Uvd2luMzIvZnhfd2luMzJfZHdyaXRlLmNwcApAQCAtMSw0ODAgKzEsNDgwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiDQotI2lmIF9GWF9PU18gPT0gX0ZYX1dJTjMyX0RFU0tUT1BfIHx8IF9GWF9PU18gPT0gX0ZYX1dJTjY0Xw0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2Vfd2luMzIuaCINCi0jaW5jbHVkZSAiZHdyaXRlX2ludC5oIg0KLSNpbmNsdWRlICIuLi9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvRFdyaXRlLmgiDQotdHlwZWRlZiBIUkVTVUxUICAoX19zdGRjYWxsICpGdW5jVHlwZV9EV3JpdGVDcmVhdGVGYWN0b3J5KShfX2luIERXUklURV9GQUNUT1JZX1RZUEUsIF9faW4gUkVGSUlELCBfX291dCBJVW5rbm93biAqKik7DQotdGVtcGxhdGUgPHR5cGVuYW1lIEludGVyZmFjZVR5cGU+DQotaW5saW5lIHZvaWQgU2FmZVJlbGVhc2UoSW50ZXJmYWNlVHlwZSoqIGN1cnJlbnRPYmplY3QpDQotew0KLSAgICBpZiAoKmN1cnJlbnRPYmplY3QgIT0gTlVMTCkgew0KLSAgICAgICAgKCpjdXJyZW50T2JqZWN0KS0+UmVsZWFzZSgpOw0KLSAgICAgICAgKmN1cnJlbnRPYmplY3QgPSBOVUxMOw0KLSAgICB9DQotfQ0KLXRlbXBsYXRlIDx0eXBlbmFtZSBJbnRlcmZhY2VUeXBlPg0KLWlubGluZSBJbnRlcmZhY2VUeXBlKiBTYWZlQWNxdWlyZShJbnRlcmZhY2VUeXBlKiBuZXdPYmplY3QpDQotew0KLSAgICBpZiAobmV3T2JqZWN0ICE9IE5VTEwpIHsNCi0gICAgICAgIG5ld09iamVjdC0+QWRkUmVmKCk7DQotICAgIH0NCi0gICAgcmV0dXJuIG5ld09iamVjdDsNCi19DQotY2xhc3MgQ0R3Rm9udEZpbGVTdHJlYW0gOiBwdWJsaWMgSURXcml0ZUZvbnRGaWxlU3RyZWFtLCBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIGV4cGxpY2l0IENEd0ZvbnRGaWxlU3RyZWFtKHZvaWQgY29uc3QqIGZvbnRGaWxlUmVmZXJlbmNlS2V5LCBVSU5UMzIgZm9udEZpbGVSZWZlcmVuY2VLZXlTaXplKTsNCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKFJFRklJRCBpaWQsIHZvaWQqKiBwcHZPYmplY3QpOw0KLSAgICB2aXJ0dWFsIFVMT05HICAgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKCk7DQotICAgIHZpcnR1YWwgVUxPTkcgICBTVERNRVRIT0RDQUxMVFlQRSBSZWxlYXNlKCk7DQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBSZWFkRmlsZUZyYWdtZW50KHZvaWQgY29uc3QqKiBmcmFnbWVudFN0YXJ0LCBVSU5UNjQgZmlsZU9mZnNldCwgVUlOVDY0IGZyYWdtZW50U2l6ZSwgT1VUIHZvaWQqKiBmcmFnbWVudENvbnRleHQpOw0KLSAgICB2aXJ0dWFsIHZvaWQgICAgU1RETUVUSE9EQ0FMTFRZUEUgUmVsZWFzZUZpbGVGcmFnbWVudCh2b2lkKiBmcmFnbWVudENvbnRleHQpOw0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0RmlsZVNpemUoT1VUIFVJTlQ2NCogZmlsZVNpemUpOw0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgR2V0TGFzdFdyaXRlVGltZShPVVQgVUlOVDY0KiBsYXN0V3JpdGVUaW1lKTsNCi0gICAgYm9vbCBJc0luaXRpYWxpemVkKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIHJlc291cmNlUHRyXyAhPSBOVUxMOw0KLSAgICB9DQotcHJpdmF0ZToNCi0gICAgVUxPTkcgcmVmQ291bnRfOw0KLSAgICB2b2lkIGNvbnN0KiByZXNvdXJjZVB0cl87DQotICAgIERXT1JEIHJlc291cmNlU2l6ZV87DQotfTsNCi1jbGFzcyBDRHdGb250RmlsZUxvYWRlciA6IHB1YmxpYyBJRFdyaXRlRm9udEZpbGVMb2FkZXIsIHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKFJFRklJRCBpaWQsIHZvaWQqKiBwcHZPYmplY3QpOw0KLSAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIEFkZFJlZigpOw0KLSAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2UoKTsNCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIENyZWF0ZVN0cmVhbUZyb21LZXkodm9pZCBjb25zdCogZm9udEZpbGVSZWZlcmVuY2VLZXksIFVJTlQzMiBmb250RmlsZVJlZmVyZW5jZUtleVNpemUsIE9VVCBJRFdyaXRlRm9udEZpbGVTdHJlYW0qKiBmb250RmlsZVN0cmVhbSk7DQotDQotICAgIHN0YXRpYyBJRFdyaXRlRm9udEZpbGVMb2FkZXIqIEdldExvYWRlcigpDQotICAgIHsNCi0gICAgICAgIGlmIChpbnN0YW5jZV8gPT0gTlVMTCkgew0KLSAgICAgICAgICAgIGluc3RhbmNlXyA9IEZYX05FVyBDRHdGb250RmlsZUxvYWRlcigpOw0KLSAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZV87DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gaW5zdGFuY2VfOw0KLSAgICB9DQotICAgIHN0YXRpYyBib29sIElzTG9hZGVySW5pdGlhbGl6ZWQoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gaW5zdGFuY2VfICE9IE5VTEw7DQotICAgIH0NCi1wcml2YXRlOg0KLSAgICBDRHdGb250RmlsZUxvYWRlcigpOw0KLSAgICBVTE9ORyByZWZDb3VudF87DQotICAgIHN0YXRpYyBJRFdyaXRlRm9udEZpbGVMb2FkZXIqIGluc3RhbmNlXzsNCi19Ow0KLWNsYXNzIENEd0ZvbnRDb250ZXh0IDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDRHdGb250Q29udGV4dChJRFdyaXRlRmFjdG9yeSogZHdyaXRlRmFjdG9yeSk7DQotICAgIH5DRHdGb250Q29udGV4dCgpOw0KLSAgICBIUkVTVUxUIEluaXRpYWxpemUoKTsNCi1wcml2YXRlOg0KLSAgICBDRHdGb250Q29udGV4dChDRHdGb250Q29udGV4dCBjb25zdCYpOw0KLSAgICB2b2lkIG9wZXJhdG9yPShDRHdGb250Q29udGV4dCBjb25zdCYpOw0KLSAgICBIUkVTVUxUIGhyXzsNCi0gICAgSURXcml0ZUZhY3RvcnkqIGR3cml0ZUZhY3RvcnlfOw0KLX07DQotY2xhc3MgQ0R3R2RpVGV4dFJlbmRlcmVyIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLSAgICBDRHdHZGlUZXh0UmVuZGVyZXIoDQotICAgICAgICBDRlhfRElCaXRtYXAqIHBCaXRtYXAsDQotICAgICAgICBJRFdyaXRlQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBSZW5kZXJUYXJnZXQsDQotICAgICAgICBJRFdyaXRlUmVuZGVyaW5nUGFyYW1zKiByZW5kZXJpbmdQYXJhbXMNCi0gICAgKTsNCi0gICAgQ0R3R2RpVGV4dFJlbmRlcmVyOjp+Q0R3R2RpVGV4dFJlbmRlcmVyKCk7DQotICAgIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgRHJhd0dseXBoUnVuKA0KLSAgICAgICAgY29uc3QgRlhfUkVDVCYgdGV4dF9iYm94LA0KLSAgICAgICAgX19pbl9vcHQgQ0ZYX0NsaXBSZ24qIHBDbGlwUmduLA0KLSAgICAgICAgX19pbl9vcHQgRFdSSVRFX01BVFJJWCBjb25zdCogcE1hdHJpeCwNCi0gICAgICAgIEZMT0FUIGJhc2VsaW5lT3JpZ2luWCwNCi0gICAgICAgIEZMT0FUIGJhc2VsaW5lT3JpZ2luWSwNCi0gICAgICAgIERXUklURV9NRUFTVVJJTkdfTU9ERSBtZWFzdXJpbmdNb2RlLA0KLSAgICAgICAgX19pbiBEV1JJVEVfR0xZUEhfUlVOIGNvbnN0KiBnbHlwaFJ1biwNCi0gICAgICAgIGNvbnN0IENPTE9SUkVGJiB0ZXh0Q29sb3INCi0gICAgKTsNCi1wcml2YXRlOg0KLSAgICBDRlhfRElCaXRtYXAqIHBCaXRtYXBfOw0KLSAgICBJRFdyaXRlQml0bWFwUmVuZGVyVGFyZ2V0KiBwUmVuZGVyVGFyZ2V0XzsNCi0gICAgSURXcml0ZVJlbmRlcmluZ1BhcmFtcyogcFJlbmRlcmluZ1BhcmFtc187DQotfTsNCi1DRFdyaXRlRXh0OjpDRFdyaXRlRXh0KCkNCi17DQotICAgIG1faE1vZHVsZSA9IE5VTEw7DQotICAgIG1fcERXcml0ZUZhY3RvcnkgPSBOVUxMOw0KLSAgICBtX3BEd0ZvbnRDb250ZXh0ID0gTlVMTDsNCi0gICAgbV9wRHdUZXh0UmVuZGVyZXIgPSBOVUxMOw0KLX0NCi12b2lkIENEV3JpdGVFeHQ6OkxvYWQoKQ0KLXsNCi19DQotdm9pZCBDRFdyaXRlRXh0OjpVbmxvYWQoKQ0KLXsNCi0gICAgaWYgKG1fcER3Rm9udENvbnRleHQpIHsNCi0gICAgICAgIGRlbGV0ZSAoQ0R3Rm9udENvbnRleHQqKW1fcER3Rm9udENvbnRleHQ7DQotICAgICAgICBtX3BEd0ZvbnRDb250ZXh0ID0gTlVMTDsNCi0gICAgfQ0KLSAgICBTYWZlUmVsZWFzZSgoSURXcml0ZUZhY3RvcnkqKikmbV9wRFdyaXRlRmFjdG9yeSk7DQotfQ0KLUNEV3JpdGVFeHQ6On5DRFdyaXRlRXh0KCkNCi17DQotICAgIFVubG9hZCgpOw0KLX0NCi1MUFZPSUQJQ0RXcml0ZUV4dDo6RHdDcmVhdGVGb250RmFjZUZyb21TdHJlYW0oRlhfTFBCWVRFIHBEYXRhLCBGWF9EV09SRCBzaXplLCBpbnQgc2ltdWxhdGlvbl9zdHlsZSkNCi17DQotICAgIElEV3JpdGVGYWN0b3J5KiBwRHdGYWN0b3J5ID0gKElEV3JpdGVGYWN0b3J5KiltX3BEV3JpdGVGYWN0b3J5Ow0KLSAgICBJRFdyaXRlRm9udEZpbGUqIHBEd0ZvbnRGaWxlID0gTlVMTDsNCi0gICAgSURXcml0ZUZvbnRGYWNlKiBwRHdGb250RmFjZSA9IE5VTEw7DQotICAgIEJPT0wgaXNTdXBwb3J0ZWRGb250VHlwZSA9IEZBTFNFOw0KLSAgICBEV1JJVEVfRk9OVF9GSUxFX1RZUEUgZm9udEZpbGVUeXBlOw0KLSAgICBEV1JJVEVfRk9OVF9GQUNFX1RZUEUgZm9udEZhY2VUeXBlOw0KLSAgICBVSU5UMzIgbnVtYmVyT2ZGYWNlczsNCi0gICAgRFdSSVRFX0ZPTlRfU0lNVUxBVElPTlMgZm9udFN0eWxlID0gKERXUklURV9GT05UX1NJTVVMQVRJT05TKShzaW11bGF0aW9uX3N0eWxlICYgMyk7DQotICAgIEhSRVNVTFQgaHIgPSBTX09LOw0KLSAgICBociA9IHBEd0ZhY3RvcnktPkNyZWF0ZUN1c3RvbUZvbnRGaWxlUmVmZXJlbmNlKA0KLSAgICAgICAgICAgICAodm9pZCBjb25zdCopcERhdGEsDQotICAgICAgICAgICAgIChVSU5UMzIpc2l6ZSwNCi0gICAgICAgICAgICAgQ0R3Rm9udEZpbGVMb2FkZXI6OkdldExvYWRlcigpLA0KLSAgICAgICAgICAgICAmcER3Rm9udEZpbGUNCi0gICAgICAgICApOw0KLSAgICBpZiAoRkFJTEVEKGhyKSkgew0KLSAgICAgICAgZ290byBmYWlsZWQ7DQotICAgIH0NCi0gICAgaHIgPSBwRHdGb250RmlsZS0+QW5hbHl6ZSgNCi0gICAgICAgICAgICAgJmlzU3VwcG9ydGVkRm9udFR5cGUsDQotICAgICAgICAgICAgICZmb250RmlsZVR5cGUsDQotICAgICAgICAgICAgICZmb250RmFjZVR5cGUsDQotICAgICAgICAgICAgICZudW1iZXJPZkZhY2VzDQotICAgICAgICAgKTsNCi0gICAgaWYgKEZBSUxFRChocikgfHwgIWlzU3VwcG9ydGVkRm9udFR5cGUgfHwgZm9udEZhY2VUeXBlID09IERXUklURV9GT05UX0ZBQ0VfVFlQRV9VTktOT1dOKSB7DQotICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgfQ0KLSAgICBociA9IHBEd0ZhY3RvcnktPkNyZWF0ZUZvbnRGYWNlKA0KLSAgICAgICAgICAgICBmb250RmFjZVR5cGUsDQotICAgICAgICAgICAgIDEsDQotICAgICAgICAgICAgICZwRHdGb250RmlsZSwNCi0gICAgICAgICAgICAgMCwNCi0gICAgICAgICAgICAgZm9udFN0eWxlLA0KLSAgICAgICAgICAgICAmcER3Rm9udEZhY2UNCi0gICAgICAgICApOw0KLSAgICBpZiAoRkFJTEVEKGhyKSkgew0KLSAgICAgICAgZ290byBmYWlsZWQ7DQotICAgIH0NCi0gICAgU2FmZVJlbGVhc2UoJnBEd0ZvbnRGaWxlKTsNCi0gICAgcmV0dXJuIHBEd0ZvbnRGYWNlOw0KLWZhaWxlZDoNCi0gICAgU2FmZVJlbGVhc2UoJnBEd0ZvbnRGaWxlKTsNCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLUZYX0JPT0wgQ0RXcml0ZUV4dDo6RHdDcmVhdGVSZW5kZXJpbmdUYXJnZXQoQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCB2b2lkKiogcmVuZGVyVGFyZ2V0KQ0KLXsNCi0gICAgaWYgKHBCaXRtYXAtPkdldEZvcm1hdCgpID4gRlhESUJfQXJnYikgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIElEV3JpdGVGYWN0b3J5KiBwRHdGYWN0b3J5ID0gKElEV3JpdGVGYWN0b3J5KiltX3BEV3JpdGVGYWN0b3J5Ow0KLSAgICBJRFdyaXRlR2RpSW50ZXJvcCogcEdkaUludGVyb3AgPSBOVUxMOw0KLSAgICBJRFdyaXRlQml0bWFwUmVuZGVyVGFyZ2V0KiBwQml0bWFwUmVuZGVyVGFyZ2V0ID0gTlVMTDsNCi0gICAgSURXcml0ZVJlbmRlcmluZ1BhcmFtcyogcFJlbmRlcmluZ1BhcmFtcyA9IE5VTEw7DQotICAgIEhSRVNVTFQgaHIgPSBTX09LOw0KLSAgICBociA9IHBEd0ZhY3RvcnktPkdldEdkaUludGVyb3AoJnBHZGlJbnRlcm9wKTsNCi0gICAgaWYgKEZBSUxFRChocikpIHsNCi0gICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICB9DQotICAgIGhyID0gcEdkaUludGVyb3AtPkNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldChOVUxMLCBwQml0bWFwLT5HZXRXaWR0aCgpLCBwQml0bWFwLT5HZXRIZWlnaHQoKSwNCi0gICAgICAgICAgICAmcEJpdG1hcFJlbmRlclRhcmdldCk7DQotICAgIGlmIChGQUlMRUQoaHIpKSB7DQotICAgICAgICBnb3RvIGZhaWxlZDsNCi0gICAgfQ0KLSAgICBociA9IHBEd0ZhY3RvcnktPkNyZWF0ZUN1c3RvbVJlbmRlcmluZ1BhcmFtcygNCi0gICAgICAgICAgICAgMS4wZiwNCi0gICAgICAgICAgICAgMC4wZiwNCi0gICAgICAgICAgICAgMS4wZiwNCi0gICAgICAgICAgICAgRFdSSVRFX1BJWEVMX0dFT01FVFJZX1JHQiwNCi0gICAgICAgICAgICAgRFdSSVRFX1JFTkRFUklOR19NT0RFX0RFRkFVTFQsDQotICAgICAgICAgICAgICZwUmVuZGVyaW5nUGFyYW1zDQotICAgICAgICAgKTsNCi0gICAgaWYgKEZBSUxFRChocikpIHsNCi0gICAgICAgIGdvdG8gZmFpbGVkOw0KLSAgICB9DQotICAgIGhyID0gcEJpdG1hcFJlbmRlclRhcmdldC0+U2V0UGl4ZWxzUGVyRGlwKDEuMGYpOw0KLSAgICBpZiAoRkFJTEVEKGhyKSkgew0KLSAgICAgICAgZ290byBmYWlsZWQ7DQotICAgIH0NCi0gICAgKihDRHdHZGlUZXh0UmVuZGVyZXIqKilyZW5kZXJUYXJnZXQgPSBGWF9ORVcgQ0R3R2RpVGV4dFJlbmRlcmVyKHBCaXRtYXAsIHBCaXRtYXBSZW5kZXJUYXJnZXQsIHBSZW5kZXJpbmdQYXJhbXMpOw0KLSAgICBpZiAoKihDRHdHZGlUZXh0UmVuZGVyZXIqKilyZW5kZXJUYXJnZXQgPT0gTlVMTCkgew0KLSAgICAgICAgZ290byBmYWlsZWQ7DQotICAgIH0NCi0gICAgU2FmZVJlbGVhc2UoJnBHZGlJbnRlcm9wKTsNCi0gICAgU2FmZVJlbGVhc2UoJnBCaXRtYXBSZW5kZXJUYXJnZXQpOw0KLSAgICBTYWZlUmVsZWFzZSgmcFJlbmRlcmluZ1BhcmFtcyk7DQotICAgIHJldHVybiBUUlVFOw0KLWZhaWxlZDoNCi0gICAgU2FmZVJlbGVhc2UoJnBHZGlJbnRlcm9wKTsNCi0gICAgU2FmZVJlbGVhc2UoJnBCaXRtYXBSZW5kZXJUYXJnZXQpOw0KLSAgICBTYWZlUmVsZWFzZSgmcFJlbmRlcmluZ1BhcmFtcyk7DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotRlhfQk9PTAlDRFdyaXRlRXh0OjpEd1JlbmRpbmdTdHJpbmcodm9pZCogcmVuZGVyVGFyZ2V0LCBDRlhfQ2xpcFJnbiogcENsaXBSZ24sIEZYX1JFQ1QmIHN0cmluZ1JlY3QsIENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZm9udCwgRlhfRkxPQVQgZm9udF9zaXplLCBGWF9BUkdCIHRleHRfY29sb3IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGdseXBoX2NvdW50LCB1bnNpZ25lZCBzaG9ydCogZ2x5cGhfaW5kaWNlcywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCBiYXNlbGluZU9yaWdpblgsIEZYX0ZMT0FUIGJhc2VsaW5lT3JpZ2luWSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBnbHlwaF9vZmZzZXRzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0ZMT0FUKiBnbHlwaF9hZHZhbmNlcykNCi17DQotICAgIGlmIChyZW5kZXJUYXJnZXQgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgQ0R3R2RpVGV4dFJlbmRlcmVyKiBwVGV4dFJlbmRlcmVyID0gKENEd0dkaVRleHRSZW5kZXJlciopcmVuZGVyVGFyZ2V0Ow0KLSAgICBEV1JJVEVfTUFUUklYIHRyYW5zZm9ybTsNCi0gICAgRFdSSVRFX0dMWVBIX1JVTiBnbHlwaFJ1bjsNCi0gICAgSFJFU1VMVCBociA9IFNfT0s7DQotICAgIGlmIChwTWF0cml4KSB7DQotICAgICAgICB0cmFuc2Zvcm0ubTExID0gcE1hdHJpeC0+YTsNCi0gICAgICAgIHRyYW5zZm9ybS5tMTIgPSBwTWF0cml4LT5iOw0KLSAgICAgICAgdHJhbnNmb3JtLm0yMSA9IHBNYXRyaXgtPmM7DQotICAgICAgICB0cmFuc2Zvcm0ubTIyID0gcE1hdHJpeC0+ZDsNCi0gICAgICAgIHRyYW5zZm9ybS5keCA9IHBNYXRyaXgtPmU7DQotICAgICAgICB0cmFuc2Zvcm0uZHkgPSBwTWF0cml4LT5mOw0KLSAgICB9DQotICAgIGdseXBoUnVuLmZvbnRGYWNlID0gKElEV3JpdGVGb250RmFjZSopZm9udDsNCi0gICAgZ2x5cGhSdW4uZm9udEVtU2l6ZSA9IGZvbnRfc2l6ZTsNCi0gICAgZ2x5cGhSdW4uZ2x5cGhDb3VudCA9IGdseXBoX2NvdW50Ow0KLSAgICBnbHlwaFJ1bi5nbHlwaEluZGljZXMgPSBnbHlwaF9pbmRpY2VzOw0KLSAgICBnbHlwaFJ1bi5nbHlwaEFkdmFuY2VzID0gZ2x5cGhfYWR2YW5jZXM7DQotICAgIGdseXBoUnVuLmdseXBoT2Zmc2V0cyA9IChEV1JJVEVfR0xZUEhfT0ZGU0VUKilnbHlwaF9vZmZzZXRzOw0KLSAgICBnbHlwaFJ1bi5pc1NpZGV3YXlzID0gRkFMU0U7DQotICAgIGdseXBoUnVuLmJpZGlMZXZlbCA9IDA7DQotICAgIGhyID0gcFRleHRSZW5kZXJlci0+RHJhd0dseXBoUnVuKA0KLSAgICAgICAgICAgICBzdHJpbmdSZWN0LA0KLSAgICAgICAgICAgICBwQ2xpcFJnbiwNCi0gICAgICAgICAgICAgcE1hdHJpeCA/ICZ0cmFuc2Zvcm0gOiBOVUxMLA0KLSAgICAgICAgICAgICBiYXNlbGluZU9yaWdpblgsIGJhc2VsaW5lT3JpZ2luWSwNCi0gICAgICAgICAgICAgRFdSSVRFX01FQVNVUklOR19NT0RFX05BVFVSQUwsDQotICAgICAgICAgICAgICZnbHlwaFJ1biwNCi0gICAgICAgICAgICAgUkdCKEZYQVJHQl9SKHRleHRfY29sb3IpLCBGWEFSR0JfRyh0ZXh0X2NvbG9yKSwgRlhBUkdCX0IodGV4dF9jb2xvcikpDQotICAgICAgICAgKTsNCi0gICAgcmV0dXJuIFNVQ0NFRURFRChocikgPyBUUlVFIDogRkFMU0U7DQotfQ0KLXZvaWQgQ0RXcml0ZUV4dDo6RHdEZWxldGVSZW5kZXJpbmdUYXJnZXQodm9pZCogcmVuZGVyVGFyZ2V0KQ0KLXsNCi0gICAgaWYgKHJlbmRlclRhcmdldCkgew0KLSAgICAgICAgZGVsZXRlIChDRHdHZGlUZXh0UmVuZGVyZXIqKXJlbmRlclRhcmdldDsNCi0gICAgfQ0KLX0NCi12b2lkIENEV3JpdGVFeHQ6OkR3RGVsZXRlRm9udCh2b2lkKiBwRm9udCkNCi17DQotICAgIGlmIChwRm9udCkgew0KLSAgICAgICAgU2FmZVJlbGVhc2UoKElEV3JpdGVGb250RmFjZSoqKSZwRm9udCk7DQotICAgIH0NCi19DQotQ0R3Rm9udEZpbGVTdHJlYW06OkNEd0ZvbnRGaWxlU3RyZWFtKHZvaWQgY29uc3QqIGZvbnRGaWxlUmVmZXJlbmNlS2V5LCBVSU5UMzIgZm9udEZpbGVSZWZlcmVuY2VLZXlTaXplKQ0KLXsNCi0gICAgcmVmQ291bnRfID0gMDsNCi0gICAgcmVzb3VyY2VQdHJfID0gZm9udEZpbGVSZWZlcmVuY2VLZXk7DQotICAgIHJlc291cmNlU2l6ZV8gPSBmb250RmlsZVJlZmVyZW5jZUtleVNpemU7DQotfQ0KLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQ0R3Rm9udEZpbGVTdHJlYW06OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCBpaWQsIHZvaWQqKiBwcHZPYmplY3QpDQotew0KLSAgICBpZiAoaWlkID09IElJRF9JVW5rbm93biB8fCBpaWQgPT0gX191dWlkb2YoSURXcml0ZUZvbnRGaWxlU3RyZWFtKSkgew0KLSAgICAgICAgKnBwdk9iamVjdCA9IHRoaXM7DQotICAgICAgICBBZGRSZWYoKTsNCi0gICAgICAgIHJldHVybiBTX09LOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgKnBwdk9iamVjdCA9IE5VTEw7DQotICAgICAgICByZXR1cm4gRV9OT0lOVEVSRkFDRTsNCi0gICAgfQ0KLX0NCi1VTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBDRHdGb250RmlsZVN0cmVhbTo6QWRkUmVmKCkNCi17DQotICAgIHJldHVybiBJbnRlcmxvY2tlZEluY3JlbWVudCgobG9uZyopKCZyZWZDb3VudF8pKTsNCi19DQotVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgQ0R3Rm9udEZpbGVTdHJlYW06OlJlbGVhc2UoKQ0KLXsNCi0gICAgVUxPTkcgbmV3Q291bnQgPSBJbnRlcmxvY2tlZERlY3JlbWVudCgobG9uZyopKCZyZWZDb3VudF8pKTsNCi0gICAgaWYgKG5ld0NvdW50ID09IDApIHsNCi0gICAgICAgIGRlbGV0ZSB0aGlzOw0KLSAgICB9DQotICAgIHJldHVybiBuZXdDb3VudDsNCi19DQotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBDRHdGb250RmlsZVN0cmVhbTo6UmVhZEZpbGVGcmFnbWVudCgNCi0gICAgdm9pZCBjb25zdCoqIGZyYWdtZW50U3RhcnQsDQotICAgIFVJTlQ2NCBmaWxlT2Zmc2V0LA0KLSAgICBVSU5UNjQgZnJhZ21lbnRTaXplLA0KLSAgICBPVVQgdm9pZCoqIGZyYWdtZW50Q29udGV4dA0KLSkNCi17DQotICAgIGlmIChmaWxlT2Zmc2V0IDw9IHJlc291cmNlU2l6ZV8gJiYNCi0gICAgICAgICAgICBmcmFnbWVudFNpemUgPD0gcmVzb3VyY2VTaXplXyAtIGZpbGVPZmZzZXQpIHsNCi0gICAgICAgICpmcmFnbWVudFN0YXJ0ID0gc3RhdGljX2Nhc3Q8RlhfQllURSBjb25zdCo+KHJlc291cmNlUHRyXykgKyBzdGF0aWNfY2FzdDxzaXplX3Q+KGZpbGVPZmZzZXQpOw0KLSAgICAgICAgKmZyYWdtZW50Q29udGV4dCA9IE5VTEw7DQotICAgICAgICByZXR1cm4gU19PSzsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgICpmcmFnbWVudFN0YXJ0ID0gTlVMTDsNCi0gICAgICAgICpmcmFnbWVudENvbnRleHQgPSBOVUxMOw0KLSAgICAgICAgcmV0dXJuIEVfRkFJTDsNCi0gICAgfQ0KLX0NCi12b2lkIFNURE1FVEhPRENBTExUWVBFIENEd0ZvbnRGaWxlU3RyZWFtOjpSZWxlYXNlRmlsZUZyYWdtZW50KHZvaWQqIGZyYWdtZW50Q29udGV4dCkNCi17DQotfQ0KLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQ0R3Rm9udEZpbGVTdHJlYW06OkdldEZpbGVTaXplKE9VVCBVSU5UNjQqIGZpbGVTaXplKQ0KLXsNCi0gICAgKmZpbGVTaXplID0gcmVzb3VyY2VTaXplXzsNCi0gICAgcmV0dXJuIFNfT0s7DQotfQ0KLUhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQ0R3Rm9udEZpbGVTdHJlYW06OkdldExhc3RXcml0ZVRpbWUoT1VUIFVJTlQ2NCogbGFzdFdyaXRlVGltZSkNCi17DQotICAgICpsYXN0V3JpdGVUaW1lID0gMDsNCi0gICAgcmV0dXJuIEVfTk9USU1QTDsNCi19DQotSURXcml0ZUZvbnRGaWxlTG9hZGVyKiBDRHdGb250RmlsZUxvYWRlcjo6aW5zdGFuY2VfID0gTlVMTDsNCi1DRHdGb250RmlsZUxvYWRlcjo6Q0R3Rm9udEZpbGVMb2FkZXIoKSA6DQotICAgIHJlZkNvdW50XygwKQ0KLXsNCi19DQotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBDRHdGb250RmlsZUxvYWRlcjo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIGlpZCwgdm9pZCoqIHBwdk9iamVjdCkNCi17DQotICAgIGlmIChpaWQgPT0gSUlEX0lVbmtub3duIHx8IGlpZCA9PSBfX3V1aWRvZihJRFdyaXRlRm9udEZpbGVMb2FkZXIpKSB7DQotICAgICAgICAqcHB2T2JqZWN0ID0gdGhpczsNCi0gICAgICAgIEFkZFJlZigpOw0KLSAgICAgICAgcmV0dXJuIFNfT0s7DQotICAgIH0gZWxzZSB7DQotICAgICAgICAqcHB2T2JqZWN0ID0gTlVMTDsNCi0gICAgICAgIHJldHVybiBFX05PSU5URVJGQUNFOw0KLSAgICB9DQotfQ0KLVVMT05HIFNURE1FVEhPRENBTExUWVBFIENEd0ZvbnRGaWxlTG9hZGVyOjpBZGRSZWYoKQ0KLXsNCi0gICAgcmV0dXJuIEludGVybG9ja2VkSW5jcmVtZW50KChsb25nKikoJnJlZkNvdW50XykpOw0KLX0NCi1VTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBDRHdGb250RmlsZUxvYWRlcjo6UmVsZWFzZSgpDQotew0KLSAgICBVTE9ORyBuZXdDb3VudCA9IEludGVybG9ja2VkRGVjcmVtZW50KChsb25nKikoJnJlZkNvdW50XykpOw0KLSAgICBpZiAobmV3Q291bnQgPT0gMCkgew0KLSAgICAgICAgaW5zdGFuY2VfID0gTlVMTDsNCi0gICAgICAgIGRlbGV0ZSB0aGlzOw0KLSAgICB9DQotICAgIHJldHVybiBuZXdDb3VudDsNCi19DQotSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBDRHdGb250RmlsZUxvYWRlcjo6Q3JlYXRlU3RyZWFtRnJvbUtleSgNCi0gICAgdm9pZCBjb25zdCogZm9udEZpbGVSZWZlcmVuY2VLZXksDQotICAgIFVJTlQzMiBmb250RmlsZVJlZmVyZW5jZUtleVNpemUsDQotICAgIE9VVCBJRFdyaXRlRm9udEZpbGVTdHJlYW0qKiBmb250RmlsZVN0cmVhbQ0KLSkNCi17DQotICAgICpmb250RmlsZVN0cmVhbSA9IE5VTEw7DQotICAgIENEd0ZvbnRGaWxlU3RyZWFtKiBzdHJlYW0gPSBGWF9ORVcgQ0R3Rm9udEZpbGVTdHJlYW0oZm9udEZpbGVSZWZlcmVuY2VLZXksIGZvbnRGaWxlUmVmZXJlbmNlS2V5U2l6ZSk7DQotICAgIGlmIChzdHJlYW0gPT0gTlVMTCkJew0KLSAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7DQotICAgIH0NCi0gICAgaWYgKCFzdHJlYW0tPklzSW5pdGlhbGl6ZWQoKSkgew0KLSAgICAgICAgZGVsZXRlIHN0cmVhbTsNCi0gICAgICAgIHJldHVybiBFX0ZBSUw7DQotICAgIH0NCi0gICAgKmZvbnRGaWxlU3RyZWFtID0gU2FmZUFjcXVpcmUoc3RyZWFtKTsNCi0gICAgcmV0dXJuIFNfT0s7DQotfQ0KLUNEd0ZvbnRDb250ZXh0OjpDRHdGb250Q29udGV4dChJRFdyaXRlRmFjdG9yeSogZHdyaXRlRmFjdG9yeSkgOg0KLSAgICBocl8oU19GQUxTRSksDQotICAgIGR3cml0ZUZhY3RvcnlfKFNhZmVBY3F1aXJlKGR3cml0ZUZhY3RvcnkpKQ0KLXsNCi19DQotQ0R3Rm9udENvbnRleHQ6On5DRHdGb250Q29udGV4dCgpDQotew0KLSAgICBpZihkd3JpdGVGYWN0b3J5XyAmJiBocl8gPT0gU19PSykgew0KLSAgICAgICAgZHdyaXRlRmFjdG9yeV8tPlVucmVnaXN0ZXJGb250RmlsZUxvYWRlcihDRHdGb250RmlsZUxvYWRlcjo6R2V0TG9hZGVyKCkpOw0KLSAgICB9DQotICAgIFNhZmVSZWxlYXNlKCZkd3JpdGVGYWN0b3J5Xyk7DQotfQ0KLUhSRVNVTFQgQ0R3Rm9udENvbnRleHQ6OkluaXRpYWxpemUoKQ0KLXsNCi0gICAgaWYgKGhyXyA9PSBTX0ZBTFNFKSB7DQotICAgICAgICByZXR1cm4gaHJfID0gZHdyaXRlRmFjdG9yeV8tPlJlZ2lzdGVyRm9udEZpbGVMb2FkZXIoQ0R3Rm9udEZpbGVMb2FkZXI6OkdldExvYWRlcigpKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gaHJfOw0KLX0NCi1DRHdHZGlUZXh0UmVuZGVyZXI6OkNEd0dkaVRleHRSZW5kZXJlcihDRlhfRElCaXRtYXAqIHBCaXRtYXAsIElEV3JpdGVCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1hcFJlbmRlclRhcmdldCwgSURXcml0ZVJlbmRlcmluZ1BhcmFtcyogcmVuZGVyaW5nUGFyYW1zKToNCi0gICAgcEJpdG1hcF8ocEJpdG1hcCksDQotICAgIHBSZW5kZXJUYXJnZXRfKFNhZmVBY3F1aXJlKGJpdG1hcFJlbmRlclRhcmdldCkpLA0KLSAgICBwUmVuZGVyaW5nUGFyYW1zXyhTYWZlQWNxdWlyZShyZW5kZXJpbmdQYXJhbXMpKQ0KLXsNCi19DQotQ0R3R2RpVGV4dFJlbmRlcmVyOjp+Q0R3R2RpVGV4dFJlbmRlcmVyKCkNCi17DQotICAgIFNhZmVSZWxlYXNlKCZwUmVuZGVyVGFyZ2V0Xyk7DQotICAgIFNhZmVSZWxlYXNlKCZwUmVuZGVyaW5nUGFyYW1zXyk7DQotfQ0KLVNURE1FVEhPRElNUCBDRHdHZGlUZXh0UmVuZGVyZXI6OkRyYXdHbHlwaFJ1bigNCi0gICAgY29uc3QgRlhfUkVDVCYgdGV4dF9iYm94LA0KLSAgICBfX2luX29wdCBDRlhfQ2xpcFJnbiogcENsaXBSZ24sDQotICAgIF9faW5fb3B0IERXUklURV9NQVRSSVggY29uc3QqIHBNYXRyaXgsDQotICAgIEZMT0FUIGJhc2VsaW5lT3JpZ2luWCwNCi0gICAgRkxPQVQgYmFzZWxpbmVPcmlnaW5ZLA0KLSAgICBEV1JJVEVfTUVBU1VSSU5HX01PREUgbWVhc3VyaW5nTW9kZSwNCi0gICAgX19pbiBEV1JJVEVfR0xZUEhfUlVOIGNvbnN0KiBnbHlwaFJ1biwNCi0gICAgY29uc3QgQ09MT1JSRUYmIHRleHRDb2xvcg0KLSkNCi17DQotICAgIEhSRVNVTFQgaHIgPSBTX09LOw0KLSAgICBpZiAocE1hdHJpeCkgew0KLSAgICAgICAgaHIgPSBwUmVuZGVyVGFyZ2V0Xy0+U2V0Q3VycmVudFRyYW5zZm9ybShwTWF0cml4KTsNCi0gICAgICAgIGlmIChGQUlMRUQoaHIpKSB7DQotICAgICAgICAgICAgcmV0dXJuIGhyOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIEhEQyBoREMgPSBwUmVuZGVyVGFyZ2V0Xy0+R2V0TWVtb3J5REMoKTsNCi0gICAgSEJJVE1BUCBoQml0bWFwID0gKEhCSVRNQVApOjpHZXRDdXJyZW50T2JqZWN0KGhEQywgT0JKX0JJVE1BUCk7DQotICAgIEJJVE1BUCBiaXRtYXA7DQotICAgIEdldE9iamVjdChoQml0bWFwLCBzaXplb2YgYml0bWFwLCAmYml0bWFwKTsNCi0gICAgQ0ZYX0RJQml0bWFwIGRpYjsNCi0gICAgZGliLkNyZWF0ZSgNCi0gICAgICAgIGJpdG1hcC5ibVdpZHRoLA0KLSAgICAgICAgYml0bWFwLmJtSGVpZ2h0LA0KLSAgICAgICAgYml0bWFwLmJtQml0c1BpeGVsID09IDI0ID8gRlhESUJfUmdiIDogRlhESUJfUmdiMzIsDQotICAgICAgICAoRlhfTFBCWVRFKWJpdG1hcC5ibUJpdHMNCi0gICAgKTsNCi0gICAgZGliLkNvbXBvc2l0ZUJpdG1hcCgNCi0gICAgICAgIHRleHRfYmJveC5sZWZ0LA0KLSAgICAgICAgdGV4dF9iYm94LnRvcCwNCi0gICAgICAgIHRleHRfYmJveC5XaWR0aCgpLA0KLSAgICAgICAgdGV4dF9iYm94LkhlaWdodCgpLA0KLSAgICAgICAgcEJpdG1hcF8sDQotICAgICAgICB0ZXh0X2Jib3gubGVmdCwNCi0gICAgICAgIHRleHRfYmJveC50b3AsDQotICAgICAgICBGWERJQl9CTEVORF9OT1JNQUwsDQotICAgICAgICBOVUxMDQotICAgICk7DQotICAgIGhyID0gcFJlbmRlclRhcmdldF8tPkRyYXdHbHlwaFJ1bigNCi0gICAgICAgICAgICAgYmFzZWxpbmVPcmlnaW5YLA0KLSAgICAgICAgICAgICBiYXNlbGluZU9yaWdpblksDQotICAgICAgICAgICAgIG1lYXN1cmluZ01vZGUsDQotICAgICAgICAgICAgIGdseXBoUnVuLA0KLSAgICAgICAgICAgICBwUmVuZGVyaW5nUGFyYW1zXywNCi0gICAgICAgICAgICAgdGV4dENvbG9yDQotICAgICAgICAgKTsNCi0gICAgaWYgKEZBSUxFRChocikpIHsNCi0gICAgICAgIHJldHVybiBocjsNCi0gICAgfQ0KLSAgICBwQml0bWFwXy0+Q29tcG9zaXRlQml0bWFwKA0KLSAgICAgICAgdGV4dF9iYm94LmxlZnQsDQotICAgICAgICB0ZXh0X2Jib3gudG9wLA0KLSAgICAgICAgdGV4dF9iYm94LldpZHRoKCksDQotICAgICAgICB0ZXh0X2Jib3guSGVpZ2h0KCksDQotICAgICAgICAmZGliLA0KLSAgICAgICAgdGV4dF9iYm94LmxlZnQsDQotICAgICAgICB0ZXh0X2Jib3gudG9wLA0KLSAgICAgICAgRlhESUJfQkxFTkRfTk9STUFMLA0KLSAgICAgICAgcENsaXBSZ24NCi0gICAgKTsNCi0gICAgcmV0dXJuIGhyOw0KLX0NCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiCisjaWYgX0ZYX09TXyA9PSBfRlhfV0lOMzJfREVTS1RPUF8gfHwgX0ZYX09TXyA9PSBfRlhfV0lONjRfCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlX3dpbjMyLmgiCisjaW5jbHVkZSAiZHdyaXRlX2ludC5oIgorI2luY2x1ZGUgIi4uL01pY3Jvc29mdCBTREsvaW5jbHVkZS9EV3JpdGUuaCIKK3R5cGVkZWYgSFJFU1VMVCAgKF9fc3RkY2FsbCAqRnVuY1R5cGVfRFdyaXRlQ3JlYXRlRmFjdG9yeSkoX19pbiBEV1JJVEVfRkFDVE9SWV9UWVBFLCBfX2luIFJFRklJRCwgX19vdXQgSVVua25vd24gKiopOwordGVtcGxhdGUgPHR5cGVuYW1lIEludGVyZmFjZVR5cGU+CitpbmxpbmUgdm9pZCBTYWZlUmVsZWFzZShJbnRlcmZhY2VUeXBlKiogY3VycmVudE9iamVjdCkKK3sKKyAgICBpZiAoKmN1cnJlbnRPYmplY3QgIT0gTlVMTCkgeworICAgICAgICAoKmN1cnJlbnRPYmplY3QpLT5SZWxlYXNlKCk7CisgICAgICAgICpjdXJyZW50T2JqZWN0ID0gTlVMTDsKKyAgICB9Cit9Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50ZXJmYWNlVHlwZT4KK2lubGluZSBJbnRlcmZhY2VUeXBlKiBTYWZlQWNxdWlyZShJbnRlcmZhY2VUeXBlKiBuZXdPYmplY3QpCit7CisgICAgaWYgKG5ld09iamVjdCAhPSBOVUxMKSB7CisgICAgICAgIG5ld09iamVjdC0+QWRkUmVmKCk7CisgICAgfQorICAgIHJldHVybiBuZXdPYmplY3Q7Cit9CitjbGFzcyBDRHdGb250RmlsZVN0cmVhbSA6IHB1YmxpYyBJRFdyaXRlRm9udEZpbGVTdHJlYW0sIHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ0R3Rm9udEZpbGVTdHJlYW0odm9pZCBjb25zdCogZm9udEZpbGVSZWZlcmVuY2VLZXksIFVJTlQzMiBmb250RmlsZVJlZmVyZW5jZUtleVNpemUpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBRdWVyeUludGVyZmFjZShSRUZJSUQgaWlkLCB2b2lkKiogcHB2T2JqZWN0KTsKKyAgICB2aXJ0dWFsIFVMT05HICAgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKCk7CisgICAgdmlydHVhbCBVTE9ORyAgIFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2UoKTsKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUmVhZEZpbGVGcmFnbWVudCh2b2lkIGNvbnN0KiogZnJhZ21lbnRTdGFydCwgVUlOVDY0IGZpbGVPZmZzZXQsIFVJTlQ2NCBmcmFnbWVudFNpemUsIE9VVCB2b2lkKiogZnJhZ21lbnRDb250ZXh0KTsKKyAgICB2aXJ0dWFsIHZvaWQgICAgU1RETUVUSE9EQ0FMTFRZUEUgUmVsZWFzZUZpbGVGcmFnbWVudCh2b2lkKiBmcmFnbWVudENvbnRleHQpOworICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBHZXRGaWxlU2l6ZShPVVQgVUlOVDY0KiBmaWxlU2l6ZSk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIEdldExhc3RXcml0ZVRpbWUoT1VUIFVJTlQ2NCogbGFzdFdyaXRlVGltZSk7CisgICAgYm9vbCBJc0luaXRpYWxpemVkKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZXNvdXJjZVB0cl8gIT0gTlVMTDsKKyAgICB9Citwcml2YXRlOgorICAgIFVMT05HIHJlZkNvdW50XzsKKyAgICB2b2lkIGNvbnN0KiByZXNvdXJjZVB0cl87CisgICAgRFdPUkQgcmVzb3VyY2VTaXplXzsKK307CitjbGFzcyBDRHdGb250RmlsZUxvYWRlciA6IHB1YmxpYyBJRFdyaXRlRm9udEZpbGVMb2FkZXIsIHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFF1ZXJ5SW50ZXJmYWNlKFJFRklJRCBpaWQsIHZvaWQqKiBwcHZPYmplY3QpOworICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKCk7CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBSZWxlYXNlKCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIENyZWF0ZVN0cmVhbUZyb21LZXkodm9pZCBjb25zdCogZm9udEZpbGVSZWZlcmVuY2VLZXksIFVJTlQzMiBmb250RmlsZVJlZmVyZW5jZUtleVNpemUsIE9VVCBJRFdyaXRlRm9udEZpbGVTdHJlYW0qKiBmb250RmlsZVN0cmVhbSk7CisKKyAgICBzdGF0aWMgSURXcml0ZUZvbnRGaWxlTG9hZGVyKiBHZXRMb2FkZXIoKQorICAgIHsKKyAgICAgICAgaWYgKGluc3RhbmNlXyA9PSBOVUxMKSB7CisgICAgICAgICAgICBpbnN0YW5jZV8gPSBGWF9ORVcgQ0R3Rm9udEZpbGVMb2FkZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZV87CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGluc3RhbmNlXzsKKyAgICB9CisgICAgc3RhdGljIGJvb2wgSXNMb2FkZXJJbml0aWFsaXplZCgpCisgICAgeworICAgICAgICByZXR1cm4gaW5zdGFuY2VfICE9IE5VTEw7CisgICAgfQorcHJpdmF0ZToKKyAgICBDRHdGb250RmlsZUxvYWRlcigpOworICAgIFVMT05HIHJlZkNvdW50XzsKKyAgICBzdGF0aWMgSURXcml0ZUZvbnRGaWxlTG9hZGVyKiBpbnN0YW5jZV87Cit9OworY2xhc3MgQ0R3Rm9udENvbnRleHQgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENEd0ZvbnRDb250ZXh0KElEV3JpdGVGYWN0b3J5KiBkd3JpdGVGYWN0b3J5KTsKKyAgICB+Q0R3Rm9udENvbnRleHQoKTsKKyAgICBIUkVTVUxUIEluaXRpYWxpemUoKTsKK3ByaXZhdGU6CisgICAgQ0R3Rm9udENvbnRleHQoQ0R3Rm9udENvbnRleHQgY29uc3QmKTsKKyAgICB2b2lkIG9wZXJhdG9yPShDRHdGb250Q29udGV4dCBjb25zdCYpOworICAgIEhSRVNVTFQgaHJfOworICAgIElEV3JpdGVGYWN0b3J5KiBkd3JpdGVGYWN0b3J5XzsKK307CitjbGFzcyBDRHdHZGlUZXh0UmVuZGVyZXIgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorICAgIENEd0dkaVRleHRSZW5kZXJlcigKKyAgICAgICAgQ0ZYX0RJQml0bWFwKiBwQml0bWFwLAorICAgICAgICBJRFdyaXRlQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBSZW5kZXJUYXJnZXQsCisgICAgICAgIElEV3JpdGVSZW5kZXJpbmdQYXJhbXMqIHJlbmRlcmluZ1BhcmFtcworICAgICk7CisgICAgQ0R3R2RpVGV4dFJlbmRlcmVyOjp+Q0R3R2RpVGV4dFJlbmRlcmVyKCk7CisgICAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBEcmF3R2x5cGhSdW4oCisgICAgICAgIGNvbnN0IEZYX1JFQ1QmIHRleHRfYmJveCwKKyAgICAgICAgX19pbl9vcHQgQ0ZYX0NsaXBSZ24qIHBDbGlwUmduLAorICAgICAgICBfX2luX29wdCBEV1JJVEVfTUFUUklYIGNvbnN0KiBwTWF0cml4LAorICAgICAgICBGTE9BVCBiYXNlbGluZU9yaWdpblgsCisgICAgICAgIEZMT0FUIGJhc2VsaW5lT3JpZ2luWSwKKyAgICAgICAgRFdSSVRFX01FQVNVUklOR19NT0RFIG1lYXN1cmluZ01vZGUsCisgICAgICAgIF9faW4gRFdSSVRFX0dMWVBIX1JVTiBjb25zdCogZ2x5cGhSdW4sCisgICAgICAgIGNvbnN0IENPTE9SUkVGJiB0ZXh0Q29sb3IKKyAgICApOworcHJpdmF0ZToKKyAgICBDRlhfRElCaXRtYXAqIHBCaXRtYXBfOworICAgIElEV3JpdGVCaXRtYXBSZW5kZXJUYXJnZXQqIHBSZW5kZXJUYXJnZXRfOworICAgIElEV3JpdGVSZW5kZXJpbmdQYXJhbXMqIHBSZW5kZXJpbmdQYXJhbXNfOworfTsKK0NEV3JpdGVFeHQ6OkNEV3JpdGVFeHQoKQoreworICAgIG1faE1vZHVsZSA9IE5VTEw7CisgICAgbV9wRFdyaXRlRmFjdG9yeSA9IE5VTEw7CisgICAgbV9wRHdGb250Q29udGV4dCA9IE5VTEw7CisgICAgbV9wRHdUZXh0UmVuZGVyZXIgPSBOVUxMOworfQordm9pZCBDRFdyaXRlRXh0OjpMb2FkKCkKK3sKK30KK3ZvaWQgQ0RXcml0ZUV4dDo6VW5sb2FkKCkKK3sKKyAgICBpZiAobV9wRHdGb250Q29udGV4dCkgeworICAgICAgICBkZWxldGUgKENEd0ZvbnRDb250ZXh0KiltX3BEd0ZvbnRDb250ZXh0OworICAgICAgICBtX3BEd0ZvbnRDb250ZXh0ID0gTlVMTDsKKyAgICB9CisgICAgU2FmZVJlbGVhc2UoKElEV3JpdGVGYWN0b3J5KiopJm1fcERXcml0ZUZhY3RvcnkpOworfQorQ0RXcml0ZUV4dDo6fkNEV3JpdGVFeHQoKQoreworICAgIFVubG9hZCgpOworfQorTFBWT0lECUNEV3JpdGVFeHQ6OkR3Q3JlYXRlRm9udEZhY2VGcm9tU3RyZWFtKEZYX0xQQllURSBwRGF0YSwgRlhfRFdPUkQgc2l6ZSwgaW50IHNpbXVsYXRpb25fc3R5bGUpCit7CisgICAgSURXcml0ZUZhY3RvcnkqIHBEd0ZhY3RvcnkgPSAoSURXcml0ZUZhY3RvcnkqKW1fcERXcml0ZUZhY3Rvcnk7CisgICAgSURXcml0ZUZvbnRGaWxlKiBwRHdGb250RmlsZSA9IE5VTEw7CisgICAgSURXcml0ZUZvbnRGYWNlKiBwRHdGb250RmFjZSA9IE5VTEw7CisgICAgQk9PTCBpc1N1cHBvcnRlZEZvbnRUeXBlID0gRkFMU0U7CisgICAgRFdSSVRFX0ZPTlRfRklMRV9UWVBFIGZvbnRGaWxlVHlwZTsKKyAgICBEV1JJVEVfRk9OVF9GQUNFX1RZUEUgZm9udEZhY2VUeXBlOworICAgIFVJTlQzMiBudW1iZXJPZkZhY2VzOworICAgIERXUklURV9GT05UX1NJTVVMQVRJT05TIGZvbnRTdHlsZSA9IChEV1JJVEVfRk9OVF9TSU1VTEFUSU9OUykoc2ltdWxhdGlvbl9zdHlsZSAmIDMpOworICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAgIGhyID0gcER3RmFjdG9yeS0+Q3JlYXRlQ3VzdG9tRm9udEZpbGVSZWZlcmVuY2UoCisgICAgICAgICAgICAgKHZvaWQgY29uc3QqKXBEYXRhLAorICAgICAgICAgICAgIChVSU5UMzIpc2l6ZSwKKyAgICAgICAgICAgICBDRHdGb250RmlsZUxvYWRlcjo6R2V0TG9hZGVyKCksCisgICAgICAgICAgICAgJnBEd0ZvbnRGaWxlCisgICAgICAgICApOworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKyAgICBociA9IHBEd0ZvbnRGaWxlLT5BbmFseXplKAorICAgICAgICAgICAgICZpc1N1cHBvcnRlZEZvbnRUeXBlLAorICAgICAgICAgICAgICZmb250RmlsZVR5cGUsCisgICAgICAgICAgICAgJmZvbnRGYWNlVHlwZSwKKyAgICAgICAgICAgICAmbnVtYmVyT2ZGYWNlcworICAgICAgICAgKTsKKyAgICBpZiAoRkFJTEVEKGhyKSB8fCAhaXNTdXBwb3J0ZWRGb250VHlwZSB8fCBmb250RmFjZVR5cGUgPT0gRFdSSVRFX0ZPTlRfRkFDRV9UWVBFX1VOS05PV04pIHsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIGhyID0gcER3RmFjdG9yeS0+Q3JlYXRlRm9udEZhY2UoCisgICAgICAgICAgICAgZm9udEZhY2VUeXBlLAorICAgICAgICAgICAgIDEsCisgICAgICAgICAgICAgJnBEd0ZvbnRGaWxlLAorICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgZm9udFN0eWxlLAorICAgICAgICAgICAgICZwRHdGb250RmFjZQorICAgICAgICAgKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICB9CisgICAgU2FmZVJlbGVhc2UoJnBEd0ZvbnRGaWxlKTsKKyAgICByZXR1cm4gcER3Rm9udEZhY2U7CitmYWlsZWQ6CisgICAgU2FmZVJlbGVhc2UoJnBEd0ZvbnRGaWxlKTsKKyAgICByZXR1cm4gTlVMTDsKK30KK0ZYX0JPT0wgQ0RXcml0ZUV4dDo6RHdDcmVhdGVSZW5kZXJpbmdUYXJnZXQoQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCB2b2lkKiogcmVuZGVyVGFyZ2V0KQoreworICAgIGlmIChwQml0bWFwLT5HZXRGb3JtYXQoKSA+IEZYRElCX0FyZ2IpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBJRFdyaXRlRmFjdG9yeSogcER3RmFjdG9yeSA9IChJRFdyaXRlRmFjdG9yeSopbV9wRFdyaXRlRmFjdG9yeTsKKyAgICBJRFdyaXRlR2RpSW50ZXJvcCogcEdkaUludGVyb3AgPSBOVUxMOworICAgIElEV3JpdGVCaXRtYXBSZW5kZXJUYXJnZXQqIHBCaXRtYXBSZW5kZXJUYXJnZXQgPSBOVUxMOworICAgIElEV3JpdGVSZW5kZXJpbmdQYXJhbXMqIHBSZW5kZXJpbmdQYXJhbXMgPSBOVUxMOworICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAgIGhyID0gcER3RmFjdG9yeS0+R2V0R2RpSW50ZXJvcCgmcEdkaUludGVyb3ApOworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKyAgICBociA9IHBHZGlJbnRlcm9wLT5DcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXQoTlVMTCwgcEJpdG1hcC0+R2V0V2lkdGgoKSwgcEJpdG1hcC0+R2V0SGVpZ2h0KCksCisgICAgICAgICAgICAmcEJpdG1hcFJlbmRlclRhcmdldCk7CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIGhyID0gcER3RmFjdG9yeS0+Q3JlYXRlQ3VzdG9tUmVuZGVyaW5nUGFyYW1zKAorICAgICAgICAgICAgIDEuMGYsCisgICAgICAgICAgICAgMC4wZiwKKyAgICAgICAgICAgICAxLjBmLAorICAgICAgICAgICAgIERXUklURV9QSVhFTF9HRU9NRVRSWV9SR0IsCisgICAgICAgICAgICAgRFdSSVRFX1JFTkRFUklOR19NT0RFX0RFRkFVTFQsCisgICAgICAgICAgICAgJnBSZW5kZXJpbmdQYXJhbXMKKyAgICAgICAgICk7CisgICAgaWYgKEZBSUxFRChocikpIHsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIGhyID0gcEJpdG1hcFJlbmRlclRhcmdldC0+U2V0UGl4ZWxzUGVyRGlwKDEuMGYpOworICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIH0KKyAgICAqKENEd0dkaVRleHRSZW5kZXJlcioqKXJlbmRlclRhcmdldCA9IEZYX05FVyBDRHdHZGlUZXh0UmVuZGVyZXIocEJpdG1hcCwgcEJpdG1hcFJlbmRlclRhcmdldCwgcFJlbmRlcmluZ1BhcmFtcyk7CisgICAgaWYgKCooQ0R3R2RpVGV4dFJlbmRlcmVyKiopcmVuZGVyVGFyZ2V0ID09IE5VTEwpIHsKKyAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIFNhZmVSZWxlYXNlKCZwR2RpSW50ZXJvcCk7CisgICAgU2FmZVJlbGVhc2UoJnBCaXRtYXBSZW5kZXJUYXJnZXQpOworICAgIFNhZmVSZWxlYXNlKCZwUmVuZGVyaW5nUGFyYW1zKTsKKyAgICByZXR1cm4gVFJVRTsKK2ZhaWxlZDoKKyAgICBTYWZlUmVsZWFzZSgmcEdkaUludGVyb3ApOworICAgIFNhZmVSZWxlYXNlKCZwQml0bWFwUmVuZGVyVGFyZ2V0KTsKKyAgICBTYWZlUmVsZWFzZSgmcFJlbmRlcmluZ1BhcmFtcyk7CisgICAgcmV0dXJuIEZBTFNFOworfQorRlhfQk9PTAlDRFdyaXRlRXh0OjpEd1JlbmRpbmdTdHJpbmcodm9pZCogcmVuZGVyVGFyZ2V0LCBDRlhfQ2xpcFJnbiogcENsaXBSZ24sIEZYX1JFQ1QmIHN0cmluZ1JlY3QsIENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpmb250LCBGWF9GTE9BVCBmb250X3NpemUsIEZYX0FSR0IgdGV4dF9jb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBnbHlwaF9jb3VudCwgdW5zaWduZWQgc2hvcnQqIGdseXBoX2luZGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCBiYXNlbGluZU9yaWdpblgsIEZYX0ZMT0FUIGJhc2VsaW5lT3JpZ2luWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGdseXBoX29mZnNldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9GTE9BVCogZ2x5cGhfYWR2YW5jZXMpCit7CisgICAgaWYgKHJlbmRlclRhcmdldCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBDRHdHZGlUZXh0UmVuZGVyZXIqIHBUZXh0UmVuZGVyZXIgPSAoQ0R3R2RpVGV4dFJlbmRlcmVyKilyZW5kZXJUYXJnZXQ7CisgICAgRFdSSVRFX01BVFJJWCB0cmFuc2Zvcm07CisgICAgRFdSSVRFX0dMWVBIX1JVTiBnbHlwaFJ1bjsKKyAgICBIUkVTVUxUIGhyID0gU19PSzsKKyAgICBpZiAocE1hdHJpeCkgeworICAgICAgICB0cmFuc2Zvcm0ubTExID0gcE1hdHJpeC0+YTsKKyAgICAgICAgdHJhbnNmb3JtLm0xMiA9IHBNYXRyaXgtPmI7CisgICAgICAgIHRyYW5zZm9ybS5tMjEgPSBwTWF0cml4LT5jOworICAgICAgICB0cmFuc2Zvcm0ubTIyID0gcE1hdHJpeC0+ZDsKKyAgICAgICAgdHJhbnNmb3JtLmR4ID0gcE1hdHJpeC0+ZTsKKyAgICAgICAgdHJhbnNmb3JtLmR5ID0gcE1hdHJpeC0+ZjsKKyAgICB9CisgICAgZ2x5cGhSdW4uZm9udEZhY2UgPSAoSURXcml0ZUZvbnRGYWNlKilmb250OworICAgIGdseXBoUnVuLmZvbnRFbVNpemUgPSBmb250X3NpemU7CisgICAgZ2x5cGhSdW4uZ2x5cGhDb3VudCA9IGdseXBoX2NvdW50OworICAgIGdseXBoUnVuLmdseXBoSW5kaWNlcyA9IGdseXBoX2luZGljZXM7CisgICAgZ2x5cGhSdW4uZ2x5cGhBZHZhbmNlcyA9IGdseXBoX2FkdmFuY2VzOworICAgIGdseXBoUnVuLmdseXBoT2Zmc2V0cyA9IChEV1JJVEVfR0xZUEhfT0ZGU0VUKilnbHlwaF9vZmZzZXRzOworICAgIGdseXBoUnVuLmlzU2lkZXdheXMgPSBGQUxTRTsKKyAgICBnbHlwaFJ1bi5iaWRpTGV2ZWwgPSAwOworICAgIGhyID0gcFRleHRSZW5kZXJlci0+RHJhd0dseXBoUnVuKAorICAgICAgICAgICAgIHN0cmluZ1JlY3QsCisgICAgICAgICAgICAgcENsaXBSZ24sCisgICAgICAgICAgICAgcE1hdHJpeCA/ICZ0cmFuc2Zvcm0gOiBOVUxMLAorICAgICAgICAgICAgIGJhc2VsaW5lT3JpZ2luWCwgYmFzZWxpbmVPcmlnaW5ZLAorICAgICAgICAgICAgIERXUklURV9NRUFTVVJJTkdfTU9ERV9OQVRVUkFMLAorICAgICAgICAgICAgICZnbHlwaFJ1biwKKyAgICAgICAgICAgICBSR0IoRlhBUkdCX1IodGV4dF9jb2xvciksIEZYQVJHQl9HKHRleHRfY29sb3IpLCBGWEFSR0JfQih0ZXh0X2NvbG9yKSkKKyAgICAgICAgICk7CisgICAgcmV0dXJuIFNVQ0NFRURFRChocikgPyBUUlVFIDogRkFMU0U7Cit9Cit2b2lkIENEV3JpdGVFeHQ6OkR3RGVsZXRlUmVuZGVyaW5nVGFyZ2V0KHZvaWQqIHJlbmRlclRhcmdldCkKK3sKKyAgICBpZiAocmVuZGVyVGFyZ2V0KSB7CisgICAgICAgIGRlbGV0ZSAoQ0R3R2RpVGV4dFJlbmRlcmVyKilyZW5kZXJUYXJnZXQ7CisgICAgfQorfQordm9pZCBDRFdyaXRlRXh0OjpEd0RlbGV0ZUZvbnQodm9pZCogcEZvbnQpCit7CisgICAgaWYgKHBGb250KSB7CisgICAgICAgIFNhZmVSZWxlYXNlKChJRFdyaXRlRm9udEZhY2UqKikmcEZvbnQpOworICAgIH0KK30KK0NEd0ZvbnRGaWxlU3RyZWFtOjpDRHdGb250RmlsZVN0cmVhbSh2b2lkIGNvbnN0KiBmb250RmlsZVJlZmVyZW5jZUtleSwgVUlOVDMyIGZvbnRGaWxlUmVmZXJlbmNlS2V5U2l6ZSkKK3sKKyAgICByZWZDb3VudF8gPSAwOworICAgIHJlc291cmNlUHRyXyA9IGZvbnRGaWxlUmVmZXJlbmNlS2V5OworICAgIHJlc291cmNlU2l6ZV8gPSBmb250RmlsZVJlZmVyZW5jZUtleVNpemU7Cit9CitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIENEd0ZvbnRGaWxlU3RyZWFtOjpRdWVyeUludGVyZmFjZShSRUZJSUQgaWlkLCB2b2lkKiogcHB2T2JqZWN0KQoreworICAgIGlmIChpaWQgPT0gSUlEX0lVbmtub3duIHx8IGlpZCA9PSBfX3V1aWRvZihJRFdyaXRlRm9udEZpbGVTdHJlYW0pKSB7CisgICAgICAgICpwcHZPYmplY3QgPSB0aGlzOworICAgICAgICBBZGRSZWYoKTsKKyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKnBwdk9iamVjdCA9IE5VTEw7CisgICAgICAgIHJldHVybiBFX05PSU5URVJGQUNFOworICAgIH0KK30KK1VMT05HIFNURE1FVEhPRENBTExUWVBFIENEd0ZvbnRGaWxlU3RyZWFtOjpBZGRSZWYoKQoreworICAgIHJldHVybiBJbnRlcmxvY2tlZEluY3JlbWVudCgobG9uZyopKCZyZWZDb3VudF8pKTsKK30KK1VMT05HIFNURE1FVEhPRENBTExUWVBFIENEd0ZvbnRGaWxlU3RyZWFtOjpSZWxlYXNlKCkKK3sKKyAgICBVTE9ORyBuZXdDb3VudCA9IEludGVybG9ja2VkRGVjcmVtZW50KChsb25nKikoJnJlZkNvdW50XykpOworICAgIGlmIChuZXdDb3VudCA9PSAwKSB7CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIH0KKyAgICByZXR1cm4gbmV3Q291bnQ7Cit9CitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIENEd0ZvbnRGaWxlU3RyZWFtOjpSZWFkRmlsZUZyYWdtZW50KAorICAgIHZvaWQgY29uc3QqKiBmcmFnbWVudFN0YXJ0LAorICAgIFVJTlQ2NCBmaWxlT2Zmc2V0LAorICAgIFVJTlQ2NCBmcmFnbWVudFNpemUsCisgICAgT1VUIHZvaWQqKiBmcmFnbWVudENvbnRleHQKKykKK3sKKyAgICBpZiAoZmlsZU9mZnNldCA8PSByZXNvdXJjZVNpemVfICYmCisgICAgICAgICAgICBmcmFnbWVudFNpemUgPD0gcmVzb3VyY2VTaXplXyAtIGZpbGVPZmZzZXQpIHsKKyAgICAgICAgKmZyYWdtZW50U3RhcnQgPSBzdGF0aWNfY2FzdDxGWF9CWVRFIGNvbnN0Kj4ocmVzb3VyY2VQdHJfKSArIHN0YXRpY19jYXN0PHNpemVfdD4oZmlsZU9mZnNldCk7CisgICAgICAgICpmcmFnbWVudENvbnRleHQgPSBOVUxMOworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9IGVsc2UgeworICAgICAgICAqZnJhZ21lbnRTdGFydCA9IE5VTEw7CisgICAgICAgICpmcmFnbWVudENvbnRleHQgPSBOVUxMOworICAgICAgICByZXR1cm4gRV9GQUlMOworICAgIH0KK30KK3ZvaWQgU1RETUVUSE9EQ0FMTFRZUEUgQ0R3Rm9udEZpbGVTdHJlYW06OlJlbGVhc2VGaWxlRnJhZ21lbnQodm9pZCogZnJhZ21lbnRDb250ZXh0KQoreworfQorSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBDRHdGb250RmlsZVN0cmVhbTo6R2V0RmlsZVNpemUoT1VUIFVJTlQ2NCogZmlsZVNpemUpCit7CisgICAgKmZpbGVTaXplID0gcmVzb3VyY2VTaXplXzsKKyAgICByZXR1cm4gU19PSzsKK30KK0hSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQ0R3Rm9udEZpbGVTdHJlYW06OkdldExhc3RXcml0ZVRpbWUoT1VUIFVJTlQ2NCogbGFzdFdyaXRlVGltZSkKK3sKKyAgICAqbGFzdFdyaXRlVGltZSA9IDA7CisgICAgcmV0dXJuIEVfTk9USU1QTDsKK30KK0lEV3JpdGVGb250RmlsZUxvYWRlciogQ0R3Rm9udEZpbGVMb2FkZXI6Omluc3RhbmNlXyA9IE5VTEw7CitDRHdGb250RmlsZUxvYWRlcjo6Q0R3Rm9udEZpbGVMb2FkZXIoKSA6CisgICAgcmVmQ291bnRfKDApCit7Cit9CitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIENEd0ZvbnRGaWxlTG9hZGVyOjpRdWVyeUludGVyZmFjZShSRUZJSUQgaWlkLCB2b2lkKiogcHB2T2JqZWN0KQoreworICAgIGlmIChpaWQgPT0gSUlEX0lVbmtub3duIHx8IGlpZCA9PSBfX3V1aWRvZihJRFdyaXRlRm9udEZpbGVMb2FkZXIpKSB7CisgICAgICAgICpwcHZPYmplY3QgPSB0aGlzOworICAgICAgICBBZGRSZWYoKTsKKyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKnBwdk9iamVjdCA9IE5VTEw7CisgICAgICAgIHJldHVybiBFX05PSU5URVJGQUNFOworICAgIH0KK30KK1VMT05HIFNURE1FVEhPRENBTExUWVBFIENEd0ZvbnRGaWxlTG9hZGVyOjpBZGRSZWYoKQoreworICAgIHJldHVybiBJbnRlcmxvY2tlZEluY3JlbWVudCgobG9uZyopKCZyZWZDb3VudF8pKTsKK30KK1VMT05HIFNURE1FVEhPRENBTExUWVBFIENEd0ZvbnRGaWxlTG9hZGVyOjpSZWxlYXNlKCkKK3sKKyAgICBVTE9ORyBuZXdDb3VudCA9IEludGVybG9ja2VkRGVjcmVtZW50KChsb25nKikoJnJlZkNvdW50XykpOworICAgIGlmIChuZXdDb3VudCA9PSAwKSB7CisgICAgICAgIGluc3RhbmNlXyA9IE5VTEw7CisgICAgICAgIGRlbGV0ZSB0aGlzOworICAgIH0KKyAgICByZXR1cm4gbmV3Q291bnQ7Cit9CitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIENEd0ZvbnRGaWxlTG9hZGVyOjpDcmVhdGVTdHJlYW1Gcm9tS2V5KAorICAgIHZvaWQgY29uc3QqIGZvbnRGaWxlUmVmZXJlbmNlS2V5LAorICAgIFVJTlQzMiBmb250RmlsZVJlZmVyZW5jZUtleVNpemUsCisgICAgT1VUIElEV3JpdGVGb250RmlsZVN0cmVhbSoqIGZvbnRGaWxlU3RyZWFtCispCit7CisgICAgKmZvbnRGaWxlU3RyZWFtID0gTlVMTDsKKyAgICBDRHdGb250RmlsZVN0cmVhbSogc3RyZWFtID0gRlhfTkVXIENEd0ZvbnRGaWxlU3RyZWFtKGZvbnRGaWxlUmVmZXJlbmNlS2V5LCBmb250RmlsZVJlZmVyZW5jZUtleVNpemUpOworICAgIGlmIChzdHJlYW0gPT0gTlVMTCkJeworICAgICAgICByZXR1cm4gRV9PVVRPRk1FTU9SWTsKKyAgICB9CisgICAgaWYgKCFzdHJlYW0tPklzSW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBkZWxldGUgc3RyZWFtOworICAgICAgICByZXR1cm4gRV9GQUlMOworICAgIH0KKyAgICAqZm9udEZpbGVTdHJlYW0gPSBTYWZlQWNxdWlyZShzdHJlYW0pOworICAgIHJldHVybiBTX09LOworfQorQ0R3Rm9udENvbnRleHQ6OkNEd0ZvbnRDb250ZXh0KElEV3JpdGVGYWN0b3J5KiBkd3JpdGVGYWN0b3J5KSA6CisgICAgaHJfKFNfRkFMU0UpLAorICAgIGR3cml0ZUZhY3RvcnlfKFNhZmVBY3F1aXJlKGR3cml0ZUZhY3RvcnkpKQoreworfQorQ0R3Rm9udENvbnRleHQ6On5DRHdGb250Q29udGV4dCgpCit7CisgICAgaWYoZHdyaXRlRmFjdG9yeV8gJiYgaHJfID09IFNfT0spIHsKKyAgICAgICAgZHdyaXRlRmFjdG9yeV8tPlVucmVnaXN0ZXJGb250RmlsZUxvYWRlcihDRHdGb250RmlsZUxvYWRlcjo6R2V0TG9hZGVyKCkpOworICAgIH0KKyAgICBTYWZlUmVsZWFzZSgmZHdyaXRlRmFjdG9yeV8pOworfQorSFJFU1VMVCBDRHdGb250Q29udGV4dDo6SW5pdGlhbGl6ZSgpCit7CisgICAgaWYgKGhyXyA9PSBTX0ZBTFNFKSB7CisgICAgICAgIHJldHVybiBocl8gPSBkd3JpdGVGYWN0b3J5Xy0+UmVnaXN0ZXJGb250RmlsZUxvYWRlcihDRHdGb250RmlsZUxvYWRlcjo6R2V0TG9hZGVyKCkpOworICAgIH0KKyAgICByZXR1cm4gaHJfOworfQorQ0R3R2RpVGV4dFJlbmRlcmVyOjpDRHdHZGlUZXh0UmVuZGVyZXIoQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCBJRFdyaXRlQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBSZW5kZXJUYXJnZXQsIElEV3JpdGVSZW5kZXJpbmdQYXJhbXMqIHJlbmRlcmluZ1BhcmFtcyk6CisgICAgcEJpdG1hcF8ocEJpdG1hcCksCisgICAgcFJlbmRlclRhcmdldF8oU2FmZUFjcXVpcmUoYml0bWFwUmVuZGVyVGFyZ2V0KSksCisgICAgcFJlbmRlcmluZ1BhcmFtc18oU2FmZUFjcXVpcmUocmVuZGVyaW5nUGFyYW1zKSkKK3sKK30KK0NEd0dkaVRleHRSZW5kZXJlcjo6fkNEd0dkaVRleHRSZW5kZXJlcigpCit7CisgICAgU2FmZVJlbGVhc2UoJnBSZW5kZXJUYXJnZXRfKTsKKyAgICBTYWZlUmVsZWFzZSgmcFJlbmRlcmluZ1BhcmFtc18pOworfQorU1RETUVUSE9ESU1QIENEd0dkaVRleHRSZW5kZXJlcjo6RHJhd0dseXBoUnVuKAorICAgIGNvbnN0IEZYX1JFQ1QmIHRleHRfYmJveCwKKyAgICBfX2luX29wdCBDRlhfQ2xpcFJnbiogcENsaXBSZ24sCisgICAgX19pbl9vcHQgRFdSSVRFX01BVFJJWCBjb25zdCogcE1hdHJpeCwKKyAgICBGTE9BVCBiYXNlbGluZU9yaWdpblgsCisgICAgRkxPQVQgYmFzZWxpbmVPcmlnaW5ZLAorICAgIERXUklURV9NRUFTVVJJTkdfTU9ERSBtZWFzdXJpbmdNb2RlLAorICAgIF9faW4gRFdSSVRFX0dMWVBIX1JVTiBjb25zdCogZ2x5cGhSdW4sCisgICAgY29uc3QgQ09MT1JSRUYmIHRleHRDb2xvcgorKQoreworICAgIEhSRVNVTFQgaHIgPSBTX09LOworICAgIGlmIChwTWF0cml4KSB7CisgICAgICAgIGhyID0gcFJlbmRlclRhcmdldF8tPlNldEN1cnJlbnRUcmFuc2Zvcm0ocE1hdHJpeCk7CisgICAgICAgIGlmIChGQUlMRUQoaHIpKSB7CisgICAgICAgICAgICByZXR1cm4gaHI7CisgICAgICAgIH0KKyAgICB9CisgICAgSERDIGhEQyA9IHBSZW5kZXJUYXJnZXRfLT5HZXRNZW1vcnlEQygpOworICAgIEhCSVRNQVAgaEJpdG1hcCA9IChIQklUTUFQKTo6R2V0Q3VycmVudE9iamVjdChoREMsIE9CSl9CSVRNQVApOworICAgIEJJVE1BUCBiaXRtYXA7CisgICAgR2V0T2JqZWN0KGhCaXRtYXAsIHNpemVvZiBiaXRtYXAsICZiaXRtYXApOworICAgIENGWF9ESUJpdG1hcCBkaWI7CisgICAgZGliLkNyZWF0ZSgKKyAgICAgICAgYml0bWFwLmJtV2lkdGgsCisgICAgICAgIGJpdG1hcC5ibUhlaWdodCwKKyAgICAgICAgYml0bWFwLmJtQml0c1BpeGVsID09IDI0ID8gRlhESUJfUmdiIDogRlhESUJfUmdiMzIsCisgICAgICAgIChGWF9MUEJZVEUpYml0bWFwLmJtQml0cworICAgICk7CisgICAgZGliLkNvbXBvc2l0ZUJpdG1hcCgKKyAgICAgICAgdGV4dF9iYm94LmxlZnQsCisgICAgICAgIHRleHRfYmJveC50b3AsCisgICAgICAgIHRleHRfYmJveC5XaWR0aCgpLAorICAgICAgICB0ZXh0X2Jib3guSGVpZ2h0KCksCisgICAgICAgIHBCaXRtYXBfLAorICAgICAgICB0ZXh0X2Jib3gubGVmdCwKKyAgICAgICAgdGV4dF9iYm94LnRvcCwKKyAgICAgICAgRlhESUJfQkxFTkRfTk9STUFMLAorICAgICAgICBOVUxMCisgICAgKTsKKyAgICBociA9IHBSZW5kZXJUYXJnZXRfLT5EcmF3R2x5cGhSdW4oCisgICAgICAgICAgICAgYmFzZWxpbmVPcmlnaW5YLAorICAgICAgICAgICAgIGJhc2VsaW5lT3JpZ2luWSwKKyAgICAgICAgICAgICBtZWFzdXJpbmdNb2RlLAorICAgICAgICAgICAgIGdseXBoUnVuLAorICAgICAgICAgICAgIHBSZW5kZXJpbmdQYXJhbXNfLAorICAgICAgICAgICAgIHRleHRDb2xvcgorICAgICAgICAgKTsKKyAgICBpZiAoRkFJTEVEKGhyKSkgeworICAgICAgICByZXR1cm4gaHI7CisgICAgfQorICAgIHBCaXRtYXBfLT5Db21wb3NpdGVCaXRtYXAoCisgICAgICAgIHRleHRfYmJveC5sZWZ0LAorICAgICAgICB0ZXh0X2Jib3gudG9wLAorICAgICAgICB0ZXh0X2Jib3guV2lkdGgoKSwKKyAgICAgICAgdGV4dF9iYm94LkhlaWdodCgpLAorICAgICAgICAmZGliLAorICAgICAgICB0ZXh0X2Jib3gubGVmdCwKKyAgICAgICAgdGV4dF9iYm94LnRvcCwKKyAgICAgICAgRlhESUJfQkxFTkRfTk9STUFMLAorICAgICAgICBwQ2xpcFJnbgorICAgICk7CisgICAgcmV0dXJuIGhyOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGdlL3dpbjMyL2Z4X3dpbjMyX2dkaXBleHQuY3BwIGIvY29yZS9zcmMvZnhnZS93aW4zMi9meF93aW4zMl9nZGlwZXh0LmNwcAppbmRleCA3ZjkyNDA2Li5kM2FlZWNjIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL3dpbjMyL2Z4X3dpbjMyX2dkaXBleHQuY3BwCisrKyBiL2NvcmUvc3JjL2Z4Z2Uvd2luMzIvZnhfd2luMzJfZ2RpcGV4dC5jcHAKQEAgLTEsMTI4NiArMSwxMjg2IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlLmgiDQotI2lmIF9GWF9PU18gPT0gX0ZYX1dJTjMyX0RFU0tUT1BfIHx8IF9GWF9PU18gPT0gX0ZYX1dJTjY0Xw0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+DQotI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZV93aW4zMi5oIg0KLSNpbmNsdWRlICJ3aW4zMl9pbnQuaCINCi0jaW5jbHVkZSAiLi4vTWljcm9zb2Z0IFNESy9pbmNsdWRlL0dkaVBsdXMuaCINCi11c2luZyBuYW1lc3BhY2UgR2RpcGx1czsNCi11c2luZyBuYW1lc3BhY2UgR2RpcGx1czo6RGxsRXhwb3J0czsNCi0jZGVmaW5lIEdkaUZpbGxUeXBlMkdkaXAoZmlsbF90eXBlKSAoZmlsbF90eXBlID09IEFMVEVSTkFURSA/IEZpbGxNb2RlQWx0ZXJuYXRlIDogRmlsbE1vZGVXaW5kaW5nKQ0KLXN0YXRpYyBDb21iaW5lTW9kZSBHZGlDb21iaW5lTW9kZTJHZGlwKGludCBtb2RlKQ0KLXsNCi0gICAgc3dpdGNoIChtb2RlKSB7DQotICAgICAgICBjYXNlIFJHTl9BTkQ6DQotICAgICAgICAgICAgcmV0dXJuIENvbWJpbmVNb2RlSW50ZXJzZWN0Ow0KLSAgICB9DQotICAgIHJldHVybiBDb21iaW5lTW9kZUludGVyc2VjdDsNCi19DQotZW51bSB7DQotICAgIEZ1bmNJZF9HZGlwQ3JlYXRlUGF0aDIsDQotICAgIEZ1bmNJZF9HZGlwU2V0UGVuRGFzaFN0eWxlLA0KLSAgICBGdW5jSWRfR2RpcFNldFBlbkRhc2hBcnJheSwNCi0gICAgRnVuY0lkX0dkaXBTZXRQZW5EYXNoQ2FwMTk3ODE5LA0KLSAgICBGdW5jSWRfR2RpcFNldFBlbkxpbmVKb2luLA0KLSAgICBGdW5jSWRfR2RpcFNldFBlbldpZHRoLA0KLSAgICBGdW5jSWRfR2RpcENyZWF0ZUZyb21IREMsDQotICAgIEZ1bmNJZF9HZGlwU2V0UGFnZVVuaXQsDQotICAgIEZ1bmNJZF9HZGlwU2V0U21vb3RoaW5nTW9kZSwNCi0gICAgRnVuY0lkX0dkaXBDcmVhdGVTb2xpZEZpbGwsDQotICAgIEZ1bmNJZF9HZGlwRmlsbFBhdGgsDQotICAgIEZ1bmNJZF9HZGlwRGVsZXRlQnJ1c2gsDQotICAgIEZ1bmNJZF9HZGlwQ3JlYXRlUGVuMSwNCi0gICAgRnVuY0lkX0dkaXBTZXRQZW5NaXRlckxpbWl0LA0KLSAgICBGdW5jSWRfR2RpcERyYXdQYXRoLA0KLSAgICBGdW5jSWRfR2RpcERlbGV0ZVBlbiwNCi0gICAgRnVuY0lkX0dkaXBEZWxldGVQYXRoLA0KLSAgICBGdW5jSWRfR2RpcERlbGV0ZUdyYXBoaWNzLA0KLSAgICBGdW5jSWRfR2RpcENyZWF0ZUJpdG1hcEZyb21GaWxlSUNNLA0KLSAgICBGdW5jSWRfR2RpcENyZWF0ZUJpdG1hcEZyb21TdHJlYW1JQ00sDQotICAgIEZ1bmNJZF9HZGlwR2V0SW1hZ2VIZWlnaHQsDQotICAgIEZ1bmNJZF9HZGlwR2V0SW1hZ2VXaWR0aCwNCi0gICAgRnVuY0lkX0dkaXBHZXRJbWFnZVBpeGVsRm9ybWF0LA0KLSAgICBGdW5jSWRfR2RpcEJpdG1hcExvY2tCaXRzLA0KLSAgICBGdW5jSWRfR2RpcEdldEltYWdlUGFsZXR0ZVNpemUsDQotICAgIEZ1bmNJZF9HZGlwR2V0SW1hZ2VQYWxldHRlLA0KLSAgICBGdW5jSWRfR2RpcEJpdG1hcFVubG9ja0JpdHMsDQotICAgIEZ1bmNJZF9HZGlwRGlzcG9zZUltYWdlLA0KLSAgICBGdW5jSWRfR2RpcEZpbGxSZWN0YW5nbGUsDQotICAgIEZ1bmNJZF9HZGlwQ3JlYXRlQml0bWFwRnJvbVNjYW4wLA0KLSAgICBGdW5jSWRfR2RpcFNldEltYWdlUGFsZXR0ZSwNCi0gICAgRnVuY0lkX0dkaXBTZXRJbnRlcnBvbGF0aW9uTW9kZSwNCi0gICAgRnVuY0lkX0dkaXBEcmF3SW1hZ2VQb2ludHNJLA0KLSAgICBGdW5jSWRfR2RpcENyZWF0ZUJpdG1hcEZyb21HZGlEaWIsDQotICAgIEZ1bmNJZF9HZGlwbHVzU3RhcnR1cCwNCi0gICAgRnVuY0lkX0dkaXBEcmF3TGluZUksDQotICAgIEZ1bmNJZF9HZGlwUmVzZXRDbGlwLA0KLSAgICBGdW5jSWRfR2RpcENyZWF0ZVBhdGgsDQotICAgIEZ1bmNJZF9HZGlwQWRkUGF0aFBhdGgsDQotICAgIEZ1bmNJZF9HZGlwU2V0UGF0aEZpbGxNb2RlLA0KLSAgICBGdW5jSWRfR2RpcFNldENsaXBQYXRoLA0KLSAgICBGdW5jSWRfR2RpcEdldENsaXAsDQotICAgIEZ1bmNJZF9HZGlwQ3JlYXRlUmVnaW9uLA0KLSAgICBGdW5jSWRfR2RpcEdldENsaXBCb3VuZHNJLA0KLSAgICBGdW5jSWRfR2RpcFNldENsaXBSZWdpb24sDQotICAgIEZ1bmNJZF9HZGlwV2lkZW5QYXRoLA0KLSAgICBGdW5jSWRfR2RpcEFkZFBhdGhMaW5lLA0KLSAgICBGdW5jSWRfR2RpcEFkZFBhdGhSZWN0YW5nbGUsDQotICAgIEZ1bmNJZF9HZGlwRGVsZXRlUmVnaW9uLA0KLSAgICBGdW5jSWRfR2RpcEdldERDLA0KLSAgICBGdW5jSWRfR2RpcFJlbGVhc2VEQywNCi0gICAgRnVuY0lkX0dkaXBTZXRQZW5MaW5lQ2FwMTk3ODE5LA0KLSAgICBGdW5jSWRfR2RpcFNldFBlbkRhc2hPZmZzZXQsDQotICAgIEZ1bmNJZF9HZGlwUmVzZXRQYXRoLA0KLSAgICBGdW5jSWRfR2RpcENyZWF0ZVJlZ2lvblBhdGgsDQotICAgIEZ1bmNJZF9HZGlwQ3JlYXRlRm9udCwNCi0gICAgRnVuY0lkX0dkaXBHZXRGb250U2l6ZSwNCi0gICAgRnVuY0lkX0dkaXBDcmVhdGVGb250RmFtaWx5RnJvbU5hbWUsDQotICAgIEZ1bmNJZF9HZGlwU2V0VGV4dFJlbmRlcmluZ0hpbnQsDQotICAgIEZ1bmNJZF9HZGlwRHJhd0RyaXZlclN0cmluZywNCi0gICAgRnVuY0lkX0dkaXBDcmVhdGVNYXRyaXgyLA0KLSAgICBGdW5jSWRfR2RpcERlbGV0ZU1hdHJpeCwNCi0gICAgRnVuY0lkX0dkaXBTZXRXb3JsZFRyYW5zZm9ybSwNCi0gICAgRnVuY0lkX0dkaXBSZXNldFdvcmxkVHJhbnNmb3JtLA0KLSAgICBGdW5jSWRfR2RpcERlbGV0ZUZvbnRGYW1pbHksDQotICAgIEZ1bmNJZF9HZGlwRGVsZXRlRm9udCwNCi0gICAgRnVuY0lkX0dkaXBOZXdQcml2YXRlRm9udENvbGxlY3Rpb24sDQotICAgIEZ1bmNJZF9HZGlwRGVsZXRlUHJpdmF0ZUZvbnRDb2xsZWN0aW9uLA0KLSAgICBGdW5jSWRfR2RpcFByaXZhdGVBZGRNZW1vcnlGb250LA0KLSAgICBGdW5jSWRfR2RpcEdldEZvbnRDb2xsZWN0aW9uRmFtaWx5TGlzdCwNCi0gICAgRnVuY0lkX0dkaXBHZXRGb250Q29sbGVjdGlvbkZhbWlseUNvdW50LA0KLSAgICBGdW5jSWRfR2RpcFNldFRleHRDb250cmFzdCwNCi0gICAgRnVuY0lkX0dkaXBTZXRQaXhlbE9mZnNldE1vZGUsDQotICAgIEZ1bmNJZF9HZGlwR2V0SW1hZ2VHcmFwaGljc0NvbnRleHQsDQotICAgIEZ1bmNJZF9HZGlwRHJhd0ltYWdlSSwNCi0gICAgRnVuY0lkX0dkaXBEcmF3SW1hZ2VSZWN0SSwNCi0gICAgRnVuY0lkX0dkaXBEcmF3U3RyaW5nLA0KLSAgICBGdW5jSWRfR2RpcFNldFBlblRyYW5zZm9ybSwNCi19Ow0KLXN0YXRpYyBMUENTVFIgZ19HZGlwRnVuY05hbWVzW10gPSB7DQotICAgICJHZGlwQ3JlYXRlUGF0aDIiLA0KLSAgICAiR2RpcFNldFBlbkRhc2hTdHlsZSIsDQotICAgICJHZGlwU2V0UGVuRGFzaEFycmF5IiwNCi0gICAgIkdkaXBTZXRQZW5EYXNoQ2FwMTk3ODE5IiwNCi0gICAgIkdkaXBTZXRQZW5MaW5lSm9pbiIsDQotICAgICJHZGlwU2V0UGVuV2lkdGgiLA0KLSAgICAiR2RpcENyZWF0ZUZyb21IREMiLA0KLSAgICAiR2RpcFNldFBhZ2VVbml0IiwNCi0gICAgIkdkaXBTZXRTbW9vdGhpbmdNb2RlIiwNCi0gICAgIkdkaXBDcmVhdGVTb2xpZEZpbGwiLA0KLSAgICAiR2RpcEZpbGxQYXRoIiwNCi0gICAgIkdkaXBEZWxldGVCcnVzaCIsDQotICAgICJHZGlwQ3JlYXRlUGVuMSIsDQotICAgICJHZGlwU2V0UGVuTWl0ZXJMaW1pdCIsDQotICAgICJHZGlwRHJhd1BhdGgiLA0KLSAgICAiR2RpcERlbGV0ZVBlbiIsDQotICAgICJHZGlwRGVsZXRlUGF0aCIsDQotICAgICJHZGlwRGVsZXRlR3JhcGhpY3MiLA0KLSAgICAiR2RpcENyZWF0ZUJpdG1hcEZyb21GaWxlSUNNIiwNCi0gICAgIkdkaXBDcmVhdGVCaXRtYXBGcm9tU3RyZWFtSUNNIiwNCi0gICAgIkdkaXBHZXRJbWFnZUhlaWdodCIsDQotICAgICJHZGlwR2V0SW1hZ2VXaWR0aCIsDQotICAgICJHZGlwR2V0SW1hZ2VQaXhlbEZvcm1hdCIsDQotICAgICJHZGlwQml0bWFwTG9ja0JpdHMiLA0KLSAgICAiR2RpcEdldEltYWdlUGFsZXR0ZVNpemUiLA0KLSAgICAiR2RpcEdldEltYWdlUGFsZXR0ZSIsDQotICAgICJHZGlwQml0bWFwVW5sb2NrQml0cyIsDQotICAgICJHZGlwRGlzcG9zZUltYWdlIiwNCi0gICAgIkdkaXBGaWxsUmVjdGFuZ2xlIiwNCi0gICAgIkdkaXBDcmVhdGVCaXRtYXBGcm9tU2NhbjAiLA0KLSAgICAiR2RpcFNldEltYWdlUGFsZXR0ZSIsDQotICAgICJHZGlwU2V0SW50ZXJwb2xhdGlvbk1vZGUiLA0KLSAgICAiR2RpcERyYXdJbWFnZVBvaW50c0kiLA0KLSAgICAiR2RpcENyZWF0ZUJpdG1hcEZyb21HZGlEaWIiLA0KLSAgICAiR2RpcGx1c1N0YXJ0dXAiLA0KLSAgICAiR2RpcERyYXdMaW5lSSIsDQotICAgICJHZGlwUmVzZXRDbGlwIiwNCi0gICAgIkdkaXBDcmVhdGVQYXRoIiwNCi0gICAgIkdkaXBBZGRQYXRoUGF0aCIsDQotICAgICJHZGlwU2V0UGF0aEZpbGxNb2RlIiwNCi0gICAgIkdkaXBTZXRDbGlwUGF0aCIsDQotICAgICJHZGlwR2V0Q2xpcCIsDQotICAgICJHZGlwQ3JlYXRlUmVnaW9uIiwNCi0gICAgIkdkaXBHZXRDbGlwQm91bmRzSSIsDQotICAgICJHZGlwU2V0Q2xpcFJlZ2lvbiIsDQotICAgICJHZGlwV2lkZW5QYXRoIiwNCi0gICAgIkdkaXBBZGRQYXRoTGluZSIsDQotICAgICJHZGlwQWRkUGF0aFJlY3RhbmdsZSIsDQotICAgICJHZGlwRGVsZXRlUmVnaW9uIiwNCi0gICAgIkdkaXBHZXREQyIsDQotICAgICJHZGlwUmVsZWFzZURDIiwNCi0gICAgIkdkaXBTZXRQZW5MaW5lQ2FwMTk3ODE5IiwNCi0gICAgIkdkaXBTZXRQZW5EYXNoT2Zmc2V0IiwNCi0gICAgIkdkaXBSZXNldFBhdGgiLA0KLSAgICAiR2RpcENyZWF0ZVJlZ2lvblBhdGgiLA0KLSAgICAiR2RpcENyZWF0ZUZvbnQiLA0KLSAgICAiR2RpcEdldEZvbnRTaXplIiwNCi0gICAgIkdkaXBDcmVhdGVGb250RmFtaWx5RnJvbU5hbWUiLA0KLSAgICAiR2RpcFNldFRleHRSZW5kZXJpbmdIaW50IiwNCi0gICAgIkdkaXBEcmF3RHJpdmVyU3RyaW5nIiwNCi0gICAgIkdkaXBDcmVhdGVNYXRyaXgyIiwNCi0gICAgIkdkaXBEZWxldGVNYXRyaXgiLA0KLSAgICAiR2RpcFNldFdvcmxkVHJhbnNmb3JtIiwNCi0gICAgIkdkaXBSZXNldFdvcmxkVHJhbnNmb3JtIiwNCi0gICAgIkdkaXBEZWxldGVGb250RmFtaWx5IiwNCi0gICAgIkdkaXBEZWxldGVGb250IiwNCi0gICAgIkdkaXBOZXdQcml2YXRlRm9udENvbGxlY3Rpb24iLA0KLSAgICAiR2RpcERlbGV0ZVByaXZhdGVGb250Q29sbGVjdGlvbiIsDQotICAgICJHZGlwUHJpdmF0ZUFkZE1lbW9yeUZvbnQiLA0KLSAgICAiR2RpcEdldEZvbnRDb2xsZWN0aW9uRmFtaWx5TGlzdCIsDQotICAgICJHZGlwR2V0Rm9udENvbGxlY3Rpb25GYW1pbHlDb3VudCIsDQotICAgICJHZGlwU2V0VGV4dENvbnRyYXN0IiwNCi0gICAgIkdkaXBTZXRQaXhlbE9mZnNldE1vZGUiLA0KLSAgICAiR2RpcEdldEltYWdlR3JhcGhpY3NDb250ZXh0IiwNCi0gICAgIkdkaXBEcmF3SW1hZ2VJIiwNCi0gICAgIkdkaXBEcmF3SW1hZ2VSZWN0SSIsDQotICAgICJHZGlwRHJhd1N0cmluZyIsDQotICAgICJHZGlwU2V0UGVuVHJhbnNmb3JtIiwNCi19Ow0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBDcmVhdGVQYXRoMikoR0RJUENPTlNUIEdwUG9pbnRGKiwgR0RJUENPTlNUIEJZVEUqLCBJTlQsIEdwRmlsbE1vZGUsIEdwUGF0aCAqKnBhdGgpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBTZXRQZW5EYXNoU3R5bGUpKEdwUGVuICpwZW4sIEdwRGFzaFN0eWxlIGRhc2hzdHlsZSk7DQotdHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcFNldFBlbkRhc2hBcnJheSkoR3BQZW4gKnBlbiwgR0RJUENPTlNUIFJFQUwgKmRhc2gsIElOVCBjb3VudCk7DQotdHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcFNldFBlbkRhc2hDYXAxOTc4MTkpKEdwUGVuICpwZW4sIEdwRGFzaENhcCBkYXNoQ2FwKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwU2V0UGVuTGluZUpvaW4pKEdwUGVuICpwZW4sIEdwTGluZUpvaW4gbGluZUpvaW4pOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBTZXRQZW5XaWR0aCkoR3BQZW4gKnBlbiwgUkVBTCB3aWR0aCk7DQotdHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcENyZWF0ZUZyb21IREMpKEhEQyBoZGMsIEdwR3JhcGhpY3MgKipncmFwaGljcyk7DQotdHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcFNldFBhZ2VVbml0KShHcEdyYXBoaWNzICpncmFwaGljcywgR3BVbml0IHVuaXQpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBTZXRTbW9vdGhpbmdNb2RlKShHcEdyYXBoaWNzICpncmFwaGljcywgU21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwQ3JlYXRlU29saWRGaWxsKShBUkdCIGNvbG9yLCBHcFNvbGlkRmlsbCAqKmJydXNoKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwRmlsbFBhdGgpKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEJydXNoICpicnVzaCwgR3BQYXRoICpwYXRoKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwRGVsZXRlQnJ1c2gpKEdwQnJ1c2ggKmJydXNoKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwQ3JlYXRlUGVuMSkoQVJHQiBjb2xvciwgUkVBTCB3aWR0aCwgR3BVbml0IHVuaXQsIEdwUGVuICoqcGVuKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwU2V0UGVuTWl0ZXJMaW1pdCkoR3BQZW4gKnBlbiwgUkVBTCBtaXRlckxpbWl0KTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwRHJhd1BhdGgpKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBHcFBhdGggKnBhdGgpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBEZWxldGVQZW4pKEdwUGVuICpwZW4pOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBEZWxldGVQYXRoKShHcFBhdGgqIHBhdGgpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBEZWxldGVHcmFwaGljcykoR3BHcmFwaGljcyAqZ3JhcGhpY3MpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBDcmVhdGVCaXRtYXBGcm9tRmlsZUlDTSkoR0RJUENPTlNUIFdDSEFSKiBmaWxlbmFtZSwgR3BCaXRtYXAgKipiaXRtYXApOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBDcmVhdGVCaXRtYXBGcm9tU3RyZWFtSUNNKShJU3RyZWFtKiBzdHJlYW0sIEdwQml0bWFwICoqYml0bWFwKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwR2V0SW1hZ2VXaWR0aCkoR3BJbWFnZSAqaW1hZ2UsIFVJTlQgKndpZHRoKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwR2V0SW1hZ2VIZWlnaHQpKEdwSW1hZ2UgKmltYWdlLCBVSU5UICpoZWlnaHQpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBHZXRJbWFnZVBpeGVsRm9ybWF0KShHcEltYWdlICppbWFnZSwgUGl4ZWxGb3JtYXQgKmZvcm1hdCk7DQotdHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcEJpdG1hcExvY2tCaXRzKShHcEJpdG1hcCogYml0bWFwLCBHRElQQ09OU1QgR3BSZWN0KiByZWN0LCBVSU5UIGZsYWdzLCBQaXhlbEZvcm1hdCBmb3JtYXQsIEJpdG1hcERhdGEqIGxvY2tlZEJpdG1hcERhdGEpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBHZXRJbWFnZVBhbGV0dGUpKEdwSW1hZ2UgKmltYWdlLCBDb2xvclBhbGV0dGUgKnBhbGV0dGUsIElOVCBzaXplKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwR2V0SW1hZ2VQYWxldHRlU2l6ZSkoR3BJbWFnZSAqaW1hZ2UsIElOVCAqc2l6ZSk7DQotdHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcEJpdG1hcFVubG9ja0JpdHMpKEdwQml0bWFwKiBiaXRtYXAsIEJpdG1hcERhdGEqIGxvY2tlZEJpdG1hcERhdGEpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBEaXNwb3NlSW1hZ2UpKEdwSW1hZ2UgKmltYWdlKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwRmlsbFJlY3RhbmdsZSkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwQnJ1c2ggKmJydXNoLCBSRUFMIHgsIFJFQUwgeSwgUkVBTCB3aWR0aCwgUkVBTCBoZWlnaHQpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBDcmVhdGVCaXRtYXBGcm9tU2NhbjApKElOVCB3aWR0aCwgSU5UIGhlaWdodCwgSU5UIHN0cmlkZSwgUGl4ZWxGb3JtYXQgZm9ybWF0LCBCWVRFKiBzY2FuMCwgR3BCaXRtYXAqKiBiaXRtYXApOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBTZXRJbWFnZVBhbGV0dGUpKEdwSW1hZ2UgKmltYWdlLCBHRElQQ09OU1QgQ29sb3JQYWxldHRlICpwYWxldHRlKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwU2V0SW50ZXJwb2xhdGlvbk1vZGUpKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBJbnRlcnBvbGF0aW9uTW9kZSBpbnRlcnBvbGF0aW9uTW9kZSk7DQotdHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcERyYXdJbWFnZVBvaW50c0kpKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEltYWdlICppbWFnZSwgR0RJUENPTlNUIEdwUG9pbnQgKmRzdHBvaW50cywgSU5UIGNvdW50KTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwQ3JlYXRlQml0bWFwRnJvbUdkaURpYikoR0RJUENPTlNUIEJJVE1BUElORk8qIGdkaUJpdG1hcEluZm8sIFZPSUQqIGdkaUJpdG1hcERhdGEsIEdwQml0bWFwKiogYml0bWFwKTsNCi10eXBlZGVmIFN0YXR1cyAoV0lOQVBJICpGdW5jVHlwZV9HZGlwbHVzU3RhcnR1cCkoT1VUIEZYX1VJTlRQVFIgKnRva2VuLCBjb25zdCBHZGlwbHVzU3RhcnR1cElucHV0ICppbnB1dCwgT1VUIEdkaXBsdXNTdGFydHVwT3V0cHV0ICpvdXRwdXQpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBEcmF3TGluZUkpKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFBlbiAqcGVuLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBSZXNldENsaXApKEdwR3JhcGhpY3MgKmdyYXBoaWNzKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwQ3JlYXRlUGF0aCkoR3BGaWxsTW9kZSBicnVzaE1vZGUsIEdwUGF0aCAqKnBhdGgpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBBZGRQYXRoUGF0aCkoR3BQYXRoICpwYXRoLCBHRElQQ09OU1QgR3BQYXRoKiBhZGRpbmdQYXRoLCBCT09MIGNvbm5lY3QpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBTZXRQYXRoRmlsbE1vZGUpKEdwUGF0aCAqcGF0aCwgR3BGaWxsTW9kZSBmaWxsbW9kZSk7DQotdHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcFNldENsaXBQYXRoKShHcEdyYXBoaWNzICpncmFwaGljcywgR3BQYXRoICpwYXRoLCBDb21iaW5lTW9kZSBjb21iaW5lTW9kZSk7DQotdHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcEdldENsaXApKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcFJlZ2lvbiAqcmVnaW9uKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwQ3JlYXRlUmVnaW9uKShHcFJlZ2lvbiAqKnJlZ2lvbik7DQotdHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcEdldENsaXBCb3VuZHNJKShHcEdyYXBoaWNzICpncmFwaGljcywgR3BSZWN0ICpyZWN0KTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwU2V0Q2xpcFJlZ2lvbikoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUmVnaW9uICpyZWdpb24sIENvbWJpbmVNb2RlIGNvbWJpbmVNb2RlKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwV2lkZW5QYXRoKShHcFBhdGggKm5hdGl2ZVBhdGgsIEdwUGVuICpwZW4sIEdwTWF0cml4ICptYXRyaXgsIFJFQUwgZmxhdG5lc3MpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBBZGRQYXRoTGluZSkoR3BQYXRoICpwYXRoLCBSRUFMIHgxLCBSRUFMIHkxLCBSRUFMIHgyLCBSRUFMIHkyKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwQWRkUGF0aFJlY3RhbmdsZSkoR3BQYXRoICpwYXRoLCBSRUFMIHgsIFJFQUwgeSwgUkVBTCB3aWR0aCwgUkVBTCBoZWlnaHQpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBEZWxldGVSZWdpb24pKEdwUmVnaW9uICpyZWdpb24pOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBHZXREQykoR3BHcmFwaGljcyogZ3JhcGhpY3MsIEhEQyAqIGhkYyk7DQotdHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcFJlbGVhc2VEQykoR3BHcmFwaGljcyogZ3JhcGhpY3MsIEhEQyBoZGMpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBTZXRQZW5MaW5lQ2FwMTk3ODE5KShHcFBlbiAqcGVuLCBHcExpbmVDYXAgc3RhcnRDYXAsIEdwTGluZUNhcCBlbmRDYXAsIEdwRGFzaENhcCBkYXNoQ2FwKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwU2V0UGVuRGFzaE9mZnNldCkoR3BQZW4gKnBlbiwgUkVBTCBvZmZzZXQpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBSZXNldFBhdGgpKEdwUGF0aCAqcGF0aCk7DQotdHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcENyZWF0ZVJlZ2lvblBhdGgpKEdwUGF0aCAqcGF0aCwgR3BSZWdpb24gKipyZWdpb24pOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBDcmVhdGVGb250KShHRElQQ09OU1QgR3BGb250RmFtaWx5ICpmb250RmFtaWx5LCBSRUFMIGVtU2l6ZSwgSU5UIHN0eWxlLCBVbml0IHVuaXQsIEdwRm9udCAqKmZvbnQpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBHZXRGb250U2l6ZSkoR3BGb250ICpmb250LCBSRUFMICpzaXplKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwQ3JlYXRlRm9udEZhbWlseUZyb21OYW1lKShHRElQQ09OU1QgV0NIQVIgKm5hbWUsIEdwRm9udENvbGxlY3Rpb24gKmZvbnRDb2xsZWN0aW9uLCBHcEZvbnRGYW1pbHkgKipGb250RmFtaWx5KTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwU2V0VGV4dFJlbmRlcmluZ0hpbnQpKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBUZXh0UmVuZGVyaW5nSGludCBtb2RlKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwRHJhd0RyaXZlclN0cmluZykoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdESVBDT05TVCBVSU5UMTYgKnRleHQsIElOVCBsZW5ndGgsIEdESVBDT05TVCBHcEZvbnQgKmZvbnQsIEdESVBDT05TVCBHcEJydXNoICpicnVzaCwgR0RJUENPTlNUIFBvaW50RiAqcG9zaXRpb25zLCBJTlQgZmxhZ3MsIEdESVBDT05TVCBHcE1hdHJpeCAqbWF0cml4KTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwQ3JlYXRlTWF0cml4MikoUkVBTCBtMTEsIFJFQUwgbTEyLCBSRUFMIG0yMSwgUkVBTCBtMjIsIFJFQUwgZHgsIFJFQUwgZHksIEdwTWF0cml4ICoqbWF0cml4KTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwRGVsZXRlTWF0cml4KShHcE1hdHJpeCAqbWF0cml4KTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwU2V0V29ybGRUcmFuc2Zvcm0pKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcE1hdHJpeCAqbWF0cml4KTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwUmVzZXRXb3JsZFRyYW5zZm9ybSkoR3BHcmFwaGljcyAqZ3JhcGhpY3MpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBEZWxldGVGb250RmFtaWx5KShHcEZvbnRGYW1pbHkgKkZvbnRGYW1pbHkpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBEZWxldGVGb250KShHcEZvbnQqIGZvbnQpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBOZXdQcml2YXRlRm9udENvbGxlY3Rpb24pKEdwRm9udENvbGxlY3Rpb24qKiBmb250Q29sbGVjdGlvbik7DQotdHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcERlbGV0ZVByaXZhdGVGb250Q29sbGVjdGlvbikoR3BGb250Q29sbGVjdGlvbioqIGZvbnRDb2xsZWN0aW9uKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwUHJpdmF0ZUFkZE1lbW9yeUZvbnQpKEdwRm9udENvbGxlY3Rpb24qIGZvbnRDb2xsZWN0aW9uLCBHRElQQ09OU1Qgdm9pZCogbWVtb3J5LCBJTlQgbGVuZ3RoKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwR2V0Rm9udENvbGxlY3Rpb25GYW1pbHlMaXN0KShHcEZvbnRDb2xsZWN0aW9uKiBmb250Q29sbGVjdGlvbiwgSU5UIG51bVNvdWdodCwgR3BGb250RmFtaWx5KiBncGZhbWlsaWVzW10sIElOVCogbnVtRm91bmQpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBHZXRGb250Q29sbGVjdGlvbkZhbWlseUNvdW50KShHcEZvbnRDb2xsZWN0aW9uKiBmb250Q29sbGVjdGlvbiwgSU5UKiBudW1Gb3VuZCk7DQotdHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcFNldFRleHRDb250cmFzdCkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIFVJTlQgY29udHJhc3QpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBTZXRQaXhlbE9mZnNldE1vZGUpKEdwR3JhcGhpY3MqIGdyYXBoaWNzLCBQaXhlbE9mZnNldE1vZGUgcGl4ZWxPZmZzZXRNb2RlKTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwR2V0SW1hZ2VHcmFwaGljc0NvbnRleHQpKEdwSW1hZ2UgKmltYWdlLCBHcEdyYXBoaWNzICoqZ3JhcGhpY3MpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBEcmF3SW1hZ2VJKShHcEdyYXBoaWNzICpncmFwaGljcywgR3BJbWFnZSAqaW1hZ2UsIElOVCB4LCBJTlQgeSk7DQotdHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcERyYXdJbWFnZVJlY3RJKShHcEdyYXBoaWNzICpncmFwaGljcywgR3BJbWFnZSAqaW1hZ2UsIElOVCB4LCBJTlQgeSwgSU5UIHdpZHRoLCBJTlQgaGVpZ2h0KTsNCi10eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwRHJhd1N0cmluZykoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdESVBDT05TVCBXQ0hBUiAqc3RyaW5nLCBJTlQgbGVuZ3RoLCBHRElQQ09OU1QgR3BGb250ICpmb250LCBHRElQQ09OU1QgUmVjdEYgKmxheW91dFJlY3QsIEdESVBDT05TVCBHcFN0cmluZ0Zvcm1hdCAqc3RyaW5nRm9ybWF0LCBHRElQQ09OU1QgR3BCcnVzaCAqYnJ1c2gpOw0KLXR5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBTZXRQZW5UcmFuc2Zvcm0pKEdwUGVuICpwZW4sIEdwTWF0cml4ICptYXRyaXgpOw0KLSNkZWZpbmUgQ2FsbEZ1bmMoZnVuY25hbWUpICgoRnVuY1R5cGVfIyNmdW5jbmFtZSlHZGlwbHVzRXh0Lm1fRnVuY3Rpb25zW0Z1bmNJZF8jI2Z1bmNuYW1lXSkNCi10eXBlZGVmIEhBTkRMRSAgIChfX3N0ZGNhbGwgKkZ1bmNUeXBlX0dkaUFkZEZvbnRNZW1SZXNvdXJjZUV4KShQVk9JRCBwYkZvbnQsIERXT1JEIGNiRm9udCwgUFZPSUQgcGR2LCBEV09SRCAqcGNGb250cyk7DQotdHlwZWRlZiBCT09MICAgICAoX19zdGRjYWxsICpGdW5jVHlwZV9HZGlSZW1vdmVGb250TWVtUmVzb3VyY2VFeCkoSEFORExFIGhhbmRsZSk7DQotdm9pZCogQ0dkaXBsdXNFeHQ6OkdkaUFkZEZvbnRNZW1SZXNvdXJjZUV4KHZvaWQgKnBGb250ZGF0YSwgRlhfRFdPUkQgc2l6ZSwgdm9pZCogcGR2LCBGWF9EV09SRCogbnVtX2ZhY2UpDQotew0KLSAgICBpZiAobV9wR2RpQWRkRm9udE1lbVJlc291cmNlRXgpIHsNCi0gICAgICAgIHJldHVybiAoKEZ1bmNUeXBlX0dkaUFkZEZvbnRNZW1SZXNvdXJjZUV4KW1fcEdkaUFkZEZvbnRNZW1SZXNvdXJjZUV4KSgoUFZPSUQpcEZvbnRkYXRhLCAoRFdPUkQpc2l6ZSwgKFBWT0lEKXBkdiwgKERXT1JEKiludW1fZmFjZSk7DQotICAgIH0NCi0gICAgcmV0dXJuIE5VTEw7DQotfQ0KLUZYX0JPT0wgQ0dkaXBsdXNFeHQ6OkdkaVJlbW92ZUZvbnRNZW1SZXNvdXJjZUV4KHZvaWQqIGhhbmRsZSkNCi17DQotICAgIGlmIChtX3BHZGlSZW1vdmVGb250TWVtUmVzb3Vyc2VFeCkgew0KLSAgICAgICAgcmV0dXJuICgoRnVuY1R5cGVfR2RpUmVtb3ZlRm9udE1lbVJlc291cmNlRXgpbV9wR2RpUmVtb3ZlRm9udE1lbVJlc291cnNlRXgpKChIQU5ETEUpaGFuZGxlKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLXN0YXRpYyBHcEJydXNoKiBfR2RpcENyZWF0ZUJydXNoKERXT1JEIGFyZ2IpDQotew0KLSAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0Ow0KLSAgICBHcFNvbGlkRmlsbCogc29saWRCcnVzaCA9IE5VTEw7DQotICAgIENhbGxGdW5jKEdkaXBDcmVhdGVTb2xpZEZpbGwpKChBUkdCKWFyZ2IsICZzb2xpZEJydXNoKTsNCi0gICAgcmV0dXJuIHNvbGlkQnJ1c2g7DQotfQ0KLXN0YXRpYyBDRlhfRElCaXRtYXAqIF9TdHJldGNoTW9ub1RvR3JheShpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCaXRtYXAqIHBTb3VyY2UsIEZYX1JFQ1QqIHBDbGlwUmVjdCkNCi17DQotICAgIEZYX0JPT0wgYkZsaXBYID0gZGVzdF93aWR0aCA8IDA7DQotICAgIGlmIChiRmxpcFgpIHsNCi0gICAgICAgIGRlc3Rfd2lkdGggPSAtZGVzdF93aWR0aDsNCi0gICAgfQ0KLSAgICBGWF9CT09MIGJGbGlwWSA9IGRlc3RfaGVpZ2h0IDwgMDsNCi0gICAgaWYgKGJGbGlwWSkgew0KLSAgICAgICAgZGVzdF9oZWlnaHQgPSAtZGVzdF9oZWlnaHQ7DQotICAgIH0NCi0gICAgaW50IHJlc3VsdF93aWR0aCA9IHBDbGlwUmVjdC0+V2lkdGgoKTsNCi0gICAgaW50IHJlc3VsdF9oZWlnaHQgPSBwQ2xpcFJlY3QtPkhlaWdodCgpOw0KLSAgICBpbnQgcmVzdWx0X3BpdGNoID0gKHJlc3VsdF93aWR0aCArIDMpIC8gNCAqIDQ7DQotICAgIENGWF9ESUJpdG1hcCogcFN0cmV0Y2hlZCA9IEZYX05FVyBDRlhfRElCaXRtYXA7DQotICAgIGlmICghcFN0cmV0Y2hlZCkgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKCFwU3RyZXRjaGVkLT5DcmVhdGUocmVzdWx0X3dpZHRoLCByZXN1bHRfaGVpZ2h0LCBGWERJQl84YnBwUmdiKSkgew0KLSAgICAgICAgZGVsZXRlIHBTdHJldGNoZWQ7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBMUEJZVEUgZGVzdF9idWYgPSBwU3RyZXRjaGVkLT5HZXRCdWZmZXIoKTsNCi0gICAgaW50IHNyY193aWR0aCA9IHBTb3VyY2UtPkdldFdpZHRoKCk7DQotICAgIGludCBzcmNfaGVpZ2h0ID0gcFNvdXJjZS0+R2V0SGVpZ2h0KCk7DQotICAgIGludCBzcmNfY291bnQgPSBzcmNfd2lkdGggKiBzcmNfaGVpZ2h0Ow0KLSAgICBpbnQgZGVzdF9jb3VudCA9IGRlc3Rfd2lkdGggKiBkZXN0X2hlaWdodDsNCi0gICAgaW50IHJhdGlvID0gMjU1ICogZGVzdF9jb3VudCAvIHNyY19jb3VudDsNCi0gICAgaW50IHlfdW5pdCA9IHNyY19oZWlnaHQgLyBkZXN0X2hlaWdodDsNCi0gICAgaW50IHhfdW5pdCA9IHNyY193aWR0aCAvIGRlc3Rfd2lkdGg7DQotICAgIGludCBhcmVhX3VuaXQgPSB5X3VuaXQgKiB4X3VuaXQ7DQotICAgIExQQllURSBzcmNfYnVmID0gcFNvdXJjZS0+R2V0QnVmZmVyKCk7DQotICAgIGludCBzcmNfcGl0Y2ggPSBwU291cmNlLT5HZXRQaXRjaCgpOw0KLSAgICBmb3IgKGludCBkZXN0X3kgPSAwOyBkZXN0X3kgPCByZXN1bHRfaGVpZ2h0OyBkZXN0X3kgKyspIHsNCi0gICAgICAgIExQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIGRlc3RfeSAqIHJlc3VsdF9waXRjaDsNCi0gICAgICAgIGludCBzcmNfeV9zdGFydCA9IGJGbGlwWSA/IChkZXN0X2hlaWdodCAtIDEgLSBkZXN0X3kgLSBwQ2xpcFJlY3QtPnRvcCkgOiAoZGVzdF95ICsgcENsaXBSZWN0LT50b3ApOw0KLSAgICAgICAgc3JjX3lfc3RhcnQgPSBzcmNfeV9zdGFydCAqIHNyY19oZWlnaHQgLyBkZXN0X2hlaWdodDsNCi0gICAgICAgIExQQllURSBzcmNfc2NhbiA9IHNyY19idWYgKyBzcmNfeV9zdGFydCAqIHNyY19waXRjaDsNCi0gICAgICAgIGZvciAoaW50IGRlc3RfeCA9IDA7IGRlc3RfeCA8IHJlc3VsdF93aWR0aDsgZGVzdF94ICsrKSB7DQotICAgICAgICAgICAgaW50IHN1bSA9IDA7DQotICAgICAgICAgICAgaW50IHNyY194X3N0YXJ0ID0gYkZsaXBYID8gKGRlc3Rfd2lkdGggLSAxIC0gZGVzdF94IC0gcENsaXBSZWN0LT5sZWZ0KSA6IChkZXN0X3ggKyBwQ2xpcFJlY3QtPmxlZnQpOw0KLSAgICAgICAgICAgIHNyY194X3N0YXJ0ID0gc3JjX3hfc3RhcnQgKiBzcmNfd2lkdGggLyBkZXN0X3dpZHRoOw0KLSAgICAgICAgICAgIGludCBzcmNfeF9lbmQgPSBzcmNfeF9zdGFydCArIHhfdW5pdDsNCi0gICAgICAgICAgICBMUEJZVEUgc3JjX2xpbmUgPSBzcmNfc2NhbjsNCi0gICAgICAgICAgICBmb3IgKGludCBzcmNfeSA9IDA7IHNyY195IDwgeV91bml0OyBzcmNfeSArKykgew0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBzcmNfeCA9IHNyY194X3N0YXJ0OyBzcmNfeCA8IHNyY194X2VuZDsgc3JjX3ggKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmICghKHNyY19saW5lW3NyY194IC8gOF0gJiAoMSA8PCAoNyAtIHNyY194ICUgOCkpKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN1bSArPSAyNTU7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgc3JjX2xpbmUgKz0gc3JjX3BpdGNoOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBkZXN0X3NjYW5bZGVzdF94XSA9IDI1NSAtIHN1bSAvIGFyZWFfdW5pdDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gcFN0cmV0Y2hlZDsNCi19DQotc3RhdGljIHZvaWQgT3V0cHV0SW1hZ2VNYXNrKEdwR3JhcGhpY3MqIHBHcmFwaGljcywgQk9PTCBiTW9ub0RldmljZSwgY29uc3QgQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCBpbnQgZGVzdF9sZWZ0LCBpbnQgZGVzdF90b3AsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsIEZYX0FSR0IgYXJnYiwgY29uc3QgRlhfUkVDVCogcENsaXBSZWN0KQ0KLXsNCi0gICAgQVNTRVJUKHBCaXRtYXAtPkdldEJQUCgpID09IDEpOw0KLSAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0Ow0KLSAgICBpbnQgc3JjX3dpZHRoID0gcEJpdG1hcC0+R2V0V2lkdGgoKSwgc3JjX2hlaWdodCA9IHBCaXRtYXAtPkdldEhlaWdodCgpOw0KLSAgICBpbnQgc3JjX3BpdGNoID0gcEJpdG1hcC0+R2V0UGl0Y2goKTsNCi0gICAgRlhfTFBCWVRFIHNjYW4wID0gcEJpdG1hcC0+R2V0QnVmZmVyKCk7DQotICAgIGlmIChzcmNfd2lkdGggPT0gMSAmJiBzcmNfaGVpZ2h0ID09IDEpIHsNCi0gICAgICAgIGlmICgoc2NhbjBbMF0gJiAweDgwKSA9PSAwKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgR3BTb2xpZEZpbGwqIHNvbGlkQnJ1c2g7DQotICAgICAgICBDYWxsRnVuYyhHZGlwQ3JlYXRlU29saWRGaWxsKSgoQVJHQilhcmdiLCAmc29saWRCcnVzaCk7DQotICAgICAgICBpZiAoZGVzdF93aWR0aCA8IDApIHsNCi0gICAgICAgICAgICBkZXN0X3dpZHRoID0gLWRlc3Rfd2lkdGg7DQotICAgICAgICAgICAgZGVzdF9sZWZ0IC09IGRlc3Rfd2lkdGg7DQotICAgICAgICB9DQotICAgICAgICBpZiAoZGVzdF9oZWlnaHQgPCAwKSB7DQotICAgICAgICAgICAgZGVzdF9oZWlnaHQgPSAtZGVzdF9oZWlnaHQ7DQotICAgICAgICAgICAgZGVzdF90b3AgLT0gZGVzdF9oZWlnaHQ7DQotICAgICAgICB9DQotICAgICAgICBDYWxsRnVuYyhHZGlwRmlsbFJlY3RhbmdsZSkocEdyYXBoaWNzLCBzb2xpZEJydXNoLCAoZmxvYXQpZGVzdF9sZWZ0LCAoZmxvYXQpZGVzdF90b3AsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KWRlc3Rfd2lkdGgsIChmbG9hdClkZXN0X2hlaWdodCk7DQotICAgICAgICBDYWxsRnVuYyhHZGlwRGVsZXRlQnJ1c2gpKHNvbGlkQnJ1c2gpOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGlmICghYk1vbm9EZXZpY2UgJiYgYWJzKGRlc3Rfd2lkdGgpIDwgc3JjX3dpZHRoICYmIGFicyhkZXN0X2hlaWdodCkgPCBzcmNfaGVpZ2h0KSB7DQotICAgICAgICBGWF9SRUNUIGltYWdlX3JlY3QoZGVzdF9sZWZ0LCBkZXN0X3RvcCwgZGVzdF9sZWZ0ICsgZGVzdF93aWR0aCwgZGVzdF90b3AgKyBkZXN0X2hlaWdodCk7DQotICAgICAgICBpbWFnZV9yZWN0Lk5vcm1hbGl6ZSgpOw0KLSAgICAgICAgRlhfUkVDVCBpbWFnZV9jbGlwID0gaW1hZ2VfcmVjdDsNCi0gICAgICAgIGltYWdlX2NsaXAuSW50ZXJzZWN0KCpwQ2xpcFJlY3QpOw0KLSAgICAgICAgaWYgKGltYWdlX2NsaXAuSXNFbXB0eSgpKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW1hZ2VfY2xpcC5PZmZzZXQoLWltYWdlX3JlY3QubGVmdCwgLWltYWdlX3JlY3QudG9wKTsNCi0gICAgICAgIENGWF9ESUJpdG1hcCogcFN0cmV0Y2hlZCA9IE5VTEw7DQotICAgICAgICBpZiAoc3JjX3dpZHRoICogc3JjX2hlaWdodCA+IDEwMDAwKSB7DQotICAgICAgICAgICAgcFN0cmV0Y2hlZCA9IF9TdHJldGNoTW9ub1RvR3JheShkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgcEJpdG1hcCwgJmltYWdlX2NsaXApOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBwU3RyZXRjaGVkID0gcEJpdG1hcC0+U3RyZXRjaFRvKGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0LCBGQUxTRSwgJmltYWdlX2NsaXApOw0KLSAgICAgICAgfQ0KLSAgICAgICAgR3BCaXRtYXAqIGJpdG1hcDsNCi0gICAgICAgIENhbGxGdW5jKEdkaXBDcmVhdGVCaXRtYXBGcm9tU2NhbjApKGltYWdlX2NsaXAuV2lkdGgoKSwgaW1hZ2VfY2xpcC5IZWlnaHQoKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbWFnZV9jbGlwLldpZHRoKCkgKyAzKSAvIDQgKiA0LCBQaXhlbEZvcm1hdDhicHBJbmRleGVkLCBwU3RyZXRjaGVkLT5HZXRCdWZmZXIoKSwgJmJpdG1hcCk7DQotICAgICAgICBpbnQgYSwgciwgZywgYjsNCi0gICAgICAgIEFyZ2JEZWNvZGUoYXJnYiwgYSwgciwgZywgYik7DQotICAgICAgICBVSU5UIHBhbFsyNThdOw0KLSAgICAgICAgcGFsWzBdID0gMDsNCi0gICAgICAgIHBhbFsxXSA9IDI1NjsNCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpICsrKSB7DQotICAgICAgICAgICAgcGFsW2kgKyAyXSA9IEFyZ2JFbmNvZGUoaSAqIGEgLyAyNTUsIHIsIGcsIGIpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgQ2FsbEZ1bmMoR2RpcFNldEltYWdlUGFsZXR0ZSkoYml0bWFwLCAoQ29sb3JQYWxldHRlKilwYWwpOw0KLSAgICAgICAgQ2FsbEZ1bmMoR2RpcERyYXdJbWFnZUkpKHBHcmFwaGljcywgYml0bWFwLCBpbWFnZV9yZWN0LmxlZnQgKyBpbWFnZV9jbGlwLmxlZnQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfcmVjdC50b3AgKyBpbWFnZV9jbGlwLnRvcCk7DQotICAgICAgICBDYWxsRnVuYyhHZGlwRGlzcG9zZUltYWdlKShiaXRtYXApOw0KLSAgICAgICAgZGVsZXRlIHBTdHJldGNoZWQ7DQotICAgICAgICByZXR1cm47DQotICAgIH0NCi0gICAgR3BCaXRtYXAqIGJpdG1hcDsNCi0gICAgQ2FsbEZ1bmMoR2RpcENyZWF0ZUJpdG1hcEZyb21TY2FuMCkoc3JjX3dpZHRoLCBzcmNfaGVpZ2h0LCBzcmNfcGl0Y2gsIFBpeGVsRm9ybWF0MWJwcEluZGV4ZWQsIHNjYW4wLCAmYml0bWFwKTsNCi0gICAgVUlOVCBwYWxldHRlWzRdID0geyBQYWxldHRlRmxhZ3NIYXNBbHBoYSwgMiwgMCwgYXJnYiB9Ow0KLSAgICBDYWxsRnVuYyhHZGlwU2V0SW1hZ2VQYWxldHRlKShiaXRtYXAsIChDb2xvclBhbGV0dGUqKXBhbGV0dGUpOw0KLSAgICBQb2ludCBkZXN0aW5hdGlvblBvaW50c1tdID0gew0KLSAgICAgICAgUG9pbnQoZGVzdF9sZWZ0LCBkZXN0X3RvcCksDQotICAgICAgICBQb2ludChkZXN0X2xlZnQgKyBkZXN0X3dpZHRoLCBkZXN0X3RvcCksDQotICAgICAgICBQb2ludChkZXN0X2xlZnQsIGRlc3RfdG9wICsgZGVzdF9oZWlnaHQpDQotICAgIH07DQotICAgIENhbGxGdW5jKEdkaXBEcmF3SW1hZ2VQb2ludHNJKShwR3JhcGhpY3MsIGJpdG1hcCwgZGVzdGluYXRpb25Qb2ludHMsIDMpOw0KLSAgICBDYWxsRnVuYyhHZGlwRGlzcG9zZUltYWdlKShiaXRtYXApOw0KLX0NCi1zdGF0aWMgdm9pZCBPdXRwdXRJbWFnZShHcEdyYXBoaWNzKiBwR3JhcGhpY3MsIGNvbnN0IENGWF9ESUJpdG1hcCogcEJpdG1hcCwgY29uc3QgRlhfUkVDVCogcFNyY1JlY3QsDQotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLCBpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0KQ0KLXsNCi0gICAgaW50IHNyY193aWR0aCA9IHBTcmNSZWN0LT5XaWR0aCgpLCBzcmNfaGVpZ2h0ID0gcFNyY1JlY3QtPkhlaWdodCgpOw0KLSAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0Ow0KLSAgICBpZiAocEJpdG1hcC0+R2V0QlBQKCkgPT0gMSAmJiAocFNyY1JlY3QtPmxlZnQgJSA4KSkgew0KLSAgICAgICAgRlhfUkVDVCBuZXdfcmVjdCgwLCAwLCBzcmNfd2lkdGgsIHNyY19oZWlnaHQpOw0KLSAgICAgICAgQ0ZYX0RJQml0bWFwKiBwQ2xvbmVkID0gcEJpdG1hcC0+Q2xvbmUocFNyY1JlY3QpOw0KLSAgICAgICAgaWYgKCFwQ2xvbmVkKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgT3V0cHV0SW1hZ2UocEdyYXBoaWNzLCBwQ2xvbmVkLCAmbmV3X3JlY3QsIGRlc3RfbGVmdCwgZGVzdF90b3AsIGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0KTsNCi0gICAgICAgIGRlbGV0ZSBwQ2xvbmVkOw0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGludCBzcmNfcGl0Y2ggPSBwQml0bWFwLT5HZXRQaXRjaCgpOw0KLSAgICBGWF9MUEJZVEUgc2NhbjAgPSBwQml0bWFwLT5HZXRCdWZmZXIoKSArIHBTcmNSZWN0LT50b3AgKiBzcmNfcGl0Y2ggKyBwQml0bWFwLT5HZXRCUFAoKSAqIHBTcmNSZWN0LT5sZWZ0IC8gODsNCi0gICAgR3BCaXRtYXAqIGJpdG1hcCA9IE5VTEw7DQotICAgIHN3aXRjaCAocEJpdG1hcC0+R2V0Rm9ybWF0KCkpIHsNCi0gICAgICAgIGNhc2UgRlhESUJfQXJnYjoNCi0gICAgICAgICAgICBDYWxsRnVuYyhHZGlwQ3JlYXRlQml0bWFwRnJvbVNjYW4wKShzcmNfd2lkdGgsIHNyY19oZWlnaHQsIHNyY19waXRjaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXhlbEZvcm1hdDMyYnBwQVJHQiwgc2NhbjAsICZiaXRtYXApOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBGWERJQl9SZ2IzMjoNCi0gICAgICAgICAgICBDYWxsRnVuYyhHZGlwQ3JlYXRlQml0bWFwRnJvbVNjYW4wKShzcmNfd2lkdGgsIHNyY19oZWlnaHQsIHNyY19waXRjaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXhlbEZvcm1hdDMyYnBwUkdCLCBzY2FuMCwgJmJpdG1hcCk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIEZYRElCX1JnYjoNCi0gICAgICAgICAgICBDYWxsRnVuYyhHZGlwQ3JlYXRlQml0bWFwRnJvbVNjYW4wKShzcmNfd2lkdGgsIHNyY19oZWlnaHQsIHNyY19waXRjaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXhlbEZvcm1hdDI0YnBwUkdCLCBzY2FuMCwgJmJpdG1hcCk7DQotICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICBjYXNlIEZYRElCXzhicHBSZ2I6IHsNCi0gICAgICAgICAgICAgICAgQ2FsbEZ1bmMoR2RpcENyZWF0ZUJpdG1hcEZyb21TY2FuMCkoc3JjX3dpZHRoLCBzcmNfaGVpZ2h0LCBzcmNfcGl0Y2gsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsRm9ybWF0OGJwcEluZGV4ZWQsIHNjYW4wLCAmYml0bWFwKTsNCi0gICAgICAgICAgICAgICAgVUlOVCBwYWxbMjU4XTsNCi0gICAgICAgICAgICAgICAgcGFsWzBdID0gMDsNCi0gICAgICAgICAgICAgICAgcGFsWzFdID0gMjU2Ow0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSArKykgew0KLSAgICAgICAgICAgICAgICAgICAgcGFsW2kgKyAyXSA9IHBCaXRtYXAtPkdldFBhbGV0dGVFbnRyeShpKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBDYWxsRnVuYyhHZGlwU2V0SW1hZ2VQYWxldHRlKShiaXRtYXAsIChDb2xvclBhbGV0dGUqKXBhbCk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIGNhc2UgRlhESUJfMWJwcFJnYjogew0KLSAgICAgICAgICAgICAgICBDYWxsRnVuYyhHZGlwQ3JlYXRlQml0bWFwRnJvbVNjYW4wKShzcmNfd2lkdGgsIHNyY19oZWlnaHQsIHNyY19waXRjaCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWxGb3JtYXQxYnBwSW5kZXhlZCwgc2NhbjAsICZiaXRtYXApOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKGRlc3RfaGVpZ2h0IDwgMCkgew0KLSAgICAgICAgZGVzdF9oZWlnaHQgLS07DQotICAgIH0NCi0gICAgaWYgKGRlc3Rfd2lkdGggPCAwKSB7DQotICAgICAgICBkZXN0X3dpZHRoIC0tOw0KLSAgICB9DQotICAgIFBvaW50IGRlc3RpbmF0aW9uUG9pbnRzW10gPSB7DQotICAgICAgICBQb2ludChkZXN0X2xlZnQsIGRlc3RfdG9wKSwNCi0gICAgICAgIFBvaW50KGRlc3RfbGVmdCArIGRlc3Rfd2lkdGgsIGRlc3RfdG9wKSwNCi0gICAgICAgIFBvaW50KGRlc3RfbGVmdCwgZGVzdF90b3AgKyBkZXN0X2hlaWdodCkNCi0gICAgfTsNCi0gICAgQ2FsbEZ1bmMoR2RpcERyYXdJbWFnZVBvaW50c0kpKHBHcmFwaGljcywgYml0bWFwLCBkZXN0aW5hdGlvblBvaW50cywgMyk7DQotICAgIENhbGxGdW5jKEdkaXBEaXNwb3NlSW1hZ2UpKGJpdG1hcCk7DQotfQ0KLUNHZGlwbHVzRXh0OjpDR2RpcGx1c0V4dCgpDQotew0KLSAgICBtX2hNb2R1bGUgPSBOVUxMOw0KLSAgICBtX0dkaU1vZHVsZSA9IE5VTEw7DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mIGdfR2RpcEZ1bmNOYW1lcyAvIHNpemVvZihMUENTVFIpOyBpICsrKSB7DQotICAgICAgICBtX0Z1bmN0aW9uc1tpXSA9IE5VTEw7DQotICAgIH0NCi0gICAgbV9wR2RpQWRkRm9udE1lbVJlc291cmNlRXggPSBOVUxMOw0KLSAgICBtX3BHZGlSZW1vdmVGb250TWVtUmVzb3Vyc2VFeCA9IE5VTEw7DQotfQ0KLXZvaWQgQ0dkaXBsdXNFeHQ6OkxvYWQoKQ0KLXsNCi0gICAgQ0ZYX0J5dGVTdHJpbmcgc3RyUGx1c1BhdGggPSAiIjsNCi0gICAgRlhfQ0hBUiBidWZbTUFYX1BBVEhdOw0KLSAgICBHZXRTeXN0ZW1EaXJlY3RvcnlBKGJ1ZiwgTUFYX1BBVEgpOw0KLSAgICBzdHJQbHVzUGF0aCArPSBidWY7DQotICAgIHN0clBsdXNQYXRoICs9ICJcXCI7DQotICAgIHN0clBsdXNQYXRoICs9ICJHRElQTFVTLkRMTCI7DQotICAgIG1faE1vZHVsZSA9IExvYWRMaWJyYXJ5QShzdHJQbHVzUGF0aCk7DQotICAgIGlmIChtX2hNb2R1bGUgPT0gTlVMTCkgew0KLSAgICAgICAgcmV0dXJuOw0KLSAgICB9DQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mIGdfR2RpcEZ1bmNOYW1lcyAvIHNpemVvZihMUENTVFIpOyBpICsrKSB7DQotICAgICAgICBtX0Z1bmN0aW9uc1tpXSA9IEdldFByb2NBZGRyZXNzKG1faE1vZHVsZSwgZ19HZGlwRnVuY05hbWVzW2ldKTsNCi0gICAgICAgIGlmIChtX0Z1bmN0aW9uc1tpXSA9PSBOVUxMKSB7DQotICAgICAgICAgICAgbV9oTW9kdWxlID0gTlVMTDsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgIH0NCi0gICAgRlhfVUlOVFBUUiBnZGlwbHVzVG9rZW47DQotICAgIEdkaXBsdXNTdGFydHVwSW5wdXQgZ2RpcGx1c1N0YXJ0dXBJbnB1dDsNCi0gICAgKChGdW5jVHlwZV9HZGlwbHVzU3RhcnR1cCltX0Z1bmN0aW9uc1tGdW5jSWRfR2RpcGx1c1N0YXJ0dXBdKSgmZ2RpcGx1c1Rva2VuLCAmZ2RpcGx1c1N0YXJ0dXBJbnB1dCwgTlVMTCk7DQotICAgIG1fR2RpTW9kdWxlID0gTG9hZExpYnJhcnlBKCJHREkzMi5ETEwiKTsNCi0gICAgaWYgKG1fR2RpTW9kdWxlID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybjsNCi0gICAgfQ0KLSAgICBtX3BHZGlBZGRGb250TWVtUmVzb3VyY2VFeCA9IEdldFByb2NBZGRyZXNzKG1fR2RpTW9kdWxlLCAiQWRkRm9udE1lbVJlc291cmNlRXgiKTsNCi0gICAgbV9wR2RpUmVtb3ZlRm9udE1lbVJlc291cnNlRXggPSBHZXRQcm9jQWRkcmVzcyhtX0dkaU1vZHVsZSwgIlJlbW92ZUZvbnRNZW1SZXNvdXJjZUV4Iik7DQotfQ0KLUNHZGlwbHVzRXh0Ojp+Q0dkaXBsdXNFeHQoKQ0KLXsNCi19DQotTFBWT0lEIENHZGlwbHVzRXh0OjpMb2FkTWVtRm9udChMUEJZVEUgcERhdGEsIEZYX0RXT1JEIHNpemUpDQotew0KLSAgICBHcEZvbnRDb2xsZWN0aW9uKiBwQ29sbGVjdGlvbiA9IE5VTEw7DQotICAgIENHZGlwbHVzRXh0JiBHZGlwbHVzRXh0ID0gKChDV2luMzJQbGF0Zm9ybSopQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCkpLT5tX0dkaXBsdXNFeHQ7DQotICAgIENhbGxGdW5jKEdkaXBOZXdQcml2YXRlRm9udENvbGxlY3Rpb24pKCZwQ29sbGVjdGlvbik7DQotICAgIEdwU3RhdHVzIHN0YXR1cyA9IENhbGxGdW5jKEdkaXBQcml2YXRlQWRkTWVtb3J5Rm9udCkocENvbGxlY3Rpb24sIHBEYXRhLCBzaXplKTsNCi0gICAgaWYgKHN0YXR1cyA9PSBPaykgew0KLSAgICAgICAgcmV0dXJuIHBDb2xsZWN0aW9uOw0KLSAgICB9DQotICAgIENhbGxGdW5jKEdkaXBEZWxldGVQcml2YXRlRm9udENvbGxlY3Rpb24pKCZwQ29sbGVjdGlvbik7DQotICAgIHJldHVybiBOVUxMOw0KLX0NCi12b2lkIENHZGlwbHVzRXh0OjpEZWxldGVNZW1Gb250KExQVk9JRCBwQ29sbGVjdGlvbikNCi17DQotICAgIENHZGlwbHVzRXh0JiBHZGlwbHVzRXh0ID0gKChDV2luMzJQbGF0Zm9ybSopQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCkpLT5tX0dkaXBsdXNFeHQ7DQotICAgIENhbGxGdW5jKEdkaXBEZWxldGVQcml2YXRlRm9udENvbGxlY3Rpb24pKChHcEZvbnRDb2xsZWN0aW9uKiopJnBDb2xsZWN0aW9uKTsNCi19DQotRlhfQk9PTCBDR2RpcGx1c0V4dDo6R2RpcENyZWF0ZUJpdG1hcChDRlhfRElCaXRtYXAqIHBCaXRtYXAsIHZvaWQqKmJpdG1hcCkNCi17DQotICAgIENHZGlwbHVzRXh0JiBHZGlwbHVzRXh0ID0gKChDV2luMzJQbGF0Zm9ybSopQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCkpLT5tX0dkaXBsdXNFeHQ7DQotICAgIFBpeGVsRm9ybWF0IGZvcm1hdDsNCi0gICAgc3dpdGNoIChwQml0bWFwLT5HZXRGb3JtYXQoKSkgew0KLSAgICAgICAgY2FzZSBGWERJQl9SZ2I6DQotICAgICAgICAgICAgZm9ybWF0ID0gUGl4ZWxGb3JtYXQyNGJwcFJHQjsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgRlhESUJfUmdiMzI6DQotICAgICAgICAgICAgZm9ybWF0ID0gUGl4ZWxGb3JtYXQzMmJwcFJHQjsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgRlhESUJfQXJnYjoNCi0gICAgICAgICAgICBmb3JtYXQgPSBQaXhlbEZvcm1hdDMyYnBwQVJHQjsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEdwU3RhdHVzIHN0YXR1cyA9IENhbGxGdW5jKEdkaXBDcmVhdGVCaXRtYXBGcm9tU2NhbjApKHBCaXRtYXAtPkdldFdpZHRoKCksIHBCaXRtYXAtPkdldEhlaWdodCgpLA0KLSAgICAgICAgICAgICAgICAgICAgICBwQml0bWFwLT5HZXRQaXRjaCgpLCBmb3JtYXQsIHBCaXRtYXAtPkdldEJ1ZmZlcigpLCAoR3BCaXRtYXAqKiliaXRtYXApOw0KLSAgICBpZiAoc3RhdHVzID09IE9rKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUZYX0JPT0wgQ0dkaXBsdXNFeHQ6OkdkaXBDcmVhdGVGcm9tSW1hZ2Uodm9pZCogYml0bWFwLCB2b2lkKiogZ3JhcGhpY3MpDQotew0KLSAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0Ow0KLSAgICBHcFN0YXR1cyBzdGF0dXMgPSBDYWxsRnVuYyhHZGlwR2V0SW1hZ2VHcmFwaGljc0NvbnRleHQpKChHcEJpdG1hcCopYml0bWFwLCAoR3BHcmFwaGljcyoqKWdyYXBoaWNzKTsNCi0gICAgaWYgKHN0YXR1cyA9PSBPaykgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1GWF9CT09MIENHZGlwbHVzRXh0OjpHZGlwQ3JlYXRlRm9udEZhbWlseUZyb21OYW1lKEZYX0xQQ1dTVFIgbmFtZSwgdm9pZCogcEZvbnRDb2xsZWN0aW9uLCB2b2lkKipwRmFtaWx5KQ0KLXsNCi0gICAgQ0dkaXBsdXNFeHQmIEdkaXBsdXNFeHQgPSAoKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPm1fR2RpcGx1c0V4dDsNCi0gICAgR3BTdGF0dXMgc3RhdHVzID0gQ2FsbEZ1bmMoR2RpcENyZWF0ZUZvbnRGYW1pbHlGcm9tTmFtZSkoKEdESVBDT05TVCBXQ0hBUiAqKW5hbWUsIChHcEZvbnRDb2xsZWN0aW9uKilwRm9udENvbGxlY3Rpb24sIChHcEZvbnRGYW1pbHkqKilwRmFtaWx5KTsNCi0gICAgaWYgKHN0YXR1cyA9PSBPaykgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgcmV0dXJuIEZBTFNFOw0KLX0NCi1GWF9CT09MIENHZGlwbHVzRXh0OjpHZGlwQ3JlYXRlRm9udEZyb21GYW1pbHkodm9pZCogcEZhbWlseSwgRlhfRkxPQVQgZm9udF9zaXplLCBpbnQgZm9udHN0eWxlLCBpbnQgZmxhZywgdm9pZCoqIHBGb250KQ0KLXsNCi0gICAgQ0dkaXBsdXNFeHQmIEdkaXBsdXNFeHQgPSAoKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPm1fR2RpcGx1c0V4dDsNCi0gICAgR3BTdGF0dXMgc3RhdHVzID0gQ2FsbEZ1bmMoR2RpcENyZWF0ZUZvbnQpKChHcEZvbnRGYW1pbHkqKXBGYW1pbHksIGZvbnRfc2l6ZSwgZm9udHN0eWxlLCBVbml0KGZsYWcpLCAoR3BGb250KiopcEZvbnQpOw0KLSAgICBpZiAoc3RhdHVzID09IE9rKSB7DQotICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLXZvaWQgQ0dkaXBsdXNFeHQ6OkdkaXBHZXRGb250U2l6ZSh2b2lkICpwRm9udCwgRlhfRkxPQVQgKnNpemUpDQotew0KLSAgICBSRUFMIGdldF9zaXplOw0KLSAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0Ow0KLSAgICBHcFN0YXR1cyBzdGF0dXMgPSBDYWxsRnVuYyhHZGlwR2V0Rm9udFNpemUpKChHcEZvbnQgKilwRm9udCwgKFJFQUwqKSZnZXRfc2l6ZSk7DQotICAgIGlmIChzdGF0dXMgPT0gT2spIHsNCi0gICAgICAgICpzaXplID0gKEZYX0ZMT0FUKWdldF9zaXplOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgKnNpemUgPSAwOw0KLSAgICB9DQotfQ0KLXZvaWQgQ0dkaXBsdXNFeHQ6OkdkaXBTZXRUZXh0UmVuZGVyaW5nSGludCh2b2lkKiBncmFwaGljcywgaW50IG1vZGUpDQotew0KLSAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0Ow0KLSAgICBDYWxsRnVuYyhHZGlwU2V0VGV4dFJlbmRlcmluZ0hpbnQpKChHcEdyYXBoaWNzKilncmFwaGljcywgKFRleHRSZW5kZXJpbmdIaW50KW1vZGUpOw0KLX0NCi12b2lkIENHZGlwbHVzRXh0OjpHZGlwU2V0UGFnZVVuaXQodm9pZCogZ3JhcGhpY3MsIEZYX0RXT1JEIHVuaXQpDQotew0KLSAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0Ow0KLSAgICBDYWxsRnVuYyhHZGlwU2V0UGFnZVVuaXQpKChHcEdyYXBoaWNzKilncmFwaGljcywgKEdwVW5pdCl1bml0KTsNCi19DQotRlhfQk9PTCBDR2RpcGx1c0V4dDo6R2RpcERyYXdEcml2ZXJTdHJpbmcodm9pZCAqZ3JhcGhpY3MsICB1bnNpZ25lZCBzaG9ydCAqdGV4dCwgaW50IGxlbmd0aCwNCi0gICAgICAgIHZvaWQgKmZvbnQsIHZvaWQqIGJydXNoLCB2b2lkICpwb3NpdGlvbnMsIGludCBmbGFncywgY29uc3Qgdm9pZCAqbWF0cml4KQ0KLXsNCi0gICAgQ0dkaXBsdXNFeHQmIEdkaXBsdXNFeHQgPSAoKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPm1fR2RpcGx1c0V4dDsNCi0gICAgR3BTdGF0dXMgc3RhdHVzID0gQ2FsbEZ1bmMoR2RpcERyYXdEcml2ZXJTdHJpbmcpKChHcEdyYXBoaWNzKilncmFwaGljcywgKEdESVBDT05TVCBVSU5UMTYgKil0ZXh0LCAoSU5UKWxlbmd0aCwgKEdESVBDT05TVCBHcEZvbnQgKilmb250LCAoR0RJUENPTlNUIEdwQnJ1c2gqKWJydXNoLA0KLSAgICAgICAgICAgICAgICAgICAgICAoR0RJUENPTlNUIFBvaW50RiAqKXBvc2l0aW9ucywgKElOVClmbGFncywgKEdESVBDT05TVCBHcE1hdHJpeCAqKW1hdHJpeCk7DQotICAgIGlmIChzdGF0dXMgPT0gT2spIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIHJldHVybiBGQUxTRTsNCi19DQotdm9pZCBDR2RpcGx1c0V4dDo6R2RpcENyZWF0ZUJydXNoKEZYX0RXT1JEIGZpbGxfYXJnYiwgdm9pZCoqIHBCcnVzaCkNCi17DQotICAgIENHZGlwbHVzRXh0JiBHZGlwbHVzRXh0ID0gKChDV2luMzJQbGF0Zm9ybSopQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCkpLT5tX0dkaXBsdXNFeHQ7DQotICAgIENhbGxGdW5jKEdkaXBDcmVhdGVTb2xpZEZpbGwpKChBUkdCKWZpbGxfYXJnYiwgKEdwU29saWRGaWxsKiopcEJydXNoKTsNCi19DQotdm9pZCBDR2RpcGx1c0V4dDo6R2RpcERlbGV0ZUJydXNoKHZvaWQqIHBCcnVzaCkNCi17DQotICAgIENHZGlwbHVzRXh0JiBHZGlwbHVzRXh0ID0gKChDV2luMzJQbGF0Zm9ybSopQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCkpLT5tX0dkaXBsdXNFeHQ7DQotICAgIENhbGxGdW5jKEdkaXBEZWxldGVCcnVzaCkoKEdwU29saWRGaWxsKilwQnJ1c2gpOw0KLX0NCi12b2lkKiBDR2RpcGx1c0V4dDo6R2RpcENyZWF0ZUZvbnRGcm9tQ29sbGVjdGlvbih2b2lkKiBwRm9udENvbGxlY3Rpb24sIEZYX0ZMT0FUIGZvbnRfc2l6ZSwgaW50IGZvbnRzdHlsZSkNCi17DQotICAgIENHZGlwbHVzRXh0JiBHZGlwbHVzRXh0ID0gKChDV2luMzJQbGF0Zm9ybSopQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCkpLT5tX0dkaXBsdXNFeHQ7DQotICAgIGludCBudW1GYW1pbGllcyA9IDA7DQotICAgIEdwU3RhdHVzIHN0YXR1cyA9IENhbGxGdW5jKEdkaXBHZXRGb250Q29sbGVjdGlvbkZhbWlseUNvdW50KSgoR3BGb250Q29sbGVjdGlvbiopcEZvbnRDb2xsZWN0aW9uLCAmbnVtRmFtaWxpZXMpOw0KLSAgICBpZiAoc3RhdHVzICE9IE9rKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBHcEZvbnRGYW1pbHkqIGZhbWlseV9saXN0WzFdOw0KLSAgICBzdGF0dXMgPSBDYWxsRnVuYyhHZGlwR2V0Rm9udENvbGxlY3Rpb25GYW1pbHlMaXN0KSgoR3BGb250Q29sbGVjdGlvbiopcEZvbnRDb2xsZWN0aW9uLCAxLCBmYW1pbHlfbGlzdCwgJm51bUZhbWlsaWVzKTsNCi0gICAgaWYgKHN0YXR1cyAhPSBPaykgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgR3BGb250KiBwRm9udCA9IE5VTEw7DQotICAgIHN0YXR1cyA9IENhbGxGdW5jKEdkaXBDcmVhdGVGb250KShmYW1pbHlfbGlzdFswXSwgZm9udF9zaXplLCBmb250c3R5bGUsIFVuaXRQaXhlbCwgJnBGb250KTsNCi0gICAgaWYgKHN0YXR1cyAhPSBPaykgew0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgcmV0dXJuIHBGb250Ow0KLX0NCi12b2lkIENHZGlwbHVzRXh0OjpHZGlwQ3JlYXRlTWF0cml4KEZYX0ZMT0FUIGEsIEZYX0ZMT0FUIGIsIEZYX0ZMT0FUIGMsIEZYX0ZMT0FUIGQsIEZYX0ZMT0FUIGUsIEZYX0ZMT0FUIGYsIHZvaWQqKiBtYXRyaXgpDQotew0KLSAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0Ow0KLSAgICBDYWxsRnVuYyhHZGlwQ3JlYXRlTWF0cml4MikoYSwgYiwgYywgZCwgZSwgZiwgKEdwTWF0cml4KiopbWF0cml4KTsNCi19DQotdm9pZCBDR2RpcGx1c0V4dDo6R2RpcERlbGV0ZU1hdHJpeCh2b2lkKiBtYXRyaXgpDQotew0KLSAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0Ow0KLSAgICBDYWxsRnVuYyhHZGlwRGVsZXRlTWF0cml4KSgoR3BNYXRyaXgqKW1hdHJpeCk7DQotfQ0KLXZvaWQgQ0dkaXBsdXNFeHQ6OkdkaXBEZWxldGVGb250RmFtaWx5KHZvaWQqIHBGYW1pbHkpDQotew0KLSAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0Ow0KLSAgICBDYWxsRnVuYyhHZGlwRGVsZXRlRm9udEZhbWlseSkoKEdwRm9udEZhbWlseSopcEZhbWlseSk7DQotfQ0KLXZvaWQgQ0dkaXBsdXNFeHQ6OkdkaXBEZWxldGVGb250KHZvaWQqIHBGb250KQ0KLXsNCi0gICAgQ0dkaXBsdXNFeHQmIEdkaXBsdXNFeHQgPSAoKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPm1fR2RpcGx1c0V4dDsNCi0gICAgQ2FsbEZ1bmMoR2RpcERlbGV0ZUZvbnQpKChHcEZvbnQqKXBGb250KTsNCi19DQotdm9pZCBDR2RpcGx1c0V4dDo6R2RpcFNldFdvcmxkVHJhbnNmb3JtKHZvaWQqIGdyYXBoaWNzLCB2b2lkKiBwTWF0cml4KQ0KLXsNCi0gICAgQ0dkaXBsdXNFeHQmIEdkaXBsdXNFeHQgPSAoKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPm1fR2RpcGx1c0V4dDsNCi0gICAgQ2FsbEZ1bmMoR2RpcFNldFdvcmxkVHJhbnNmb3JtKSgoR3BHcmFwaGljcyopZ3JhcGhpY3MsIChHcE1hdHJpeCopcE1hdHJpeCk7DQotfQ0KLXZvaWQgQ0dkaXBsdXNFeHQ6OkdkaXBEaXNwb3NlSW1hZ2Uodm9pZCogYml0bWFwKQ0KLXsNCi0gICAgQ0dkaXBsdXNFeHQmIEdkaXBsdXNFeHQgPSAoKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPm1fR2RpcGx1c0V4dDsNCi0gICAgQ2FsbEZ1bmMoR2RpcERpc3Bvc2VJbWFnZSkoKEdwQml0bWFwKiliaXRtYXApOw0KLX0NCi12b2lkIENHZGlwbHVzRXh0OjpHZGlwRGVsZXRlR3JhcGhpY3Modm9pZCogZ3JhcGhpY3MpDQotew0KLSAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0Ow0KLSAgICBDYWxsRnVuYyhHZGlwRGVsZXRlR3JhcGhpY3MpKChHcEdyYXBoaWNzKilncmFwaGljcyk7DQotfQ0KLUZYX0JPT0wgQ0dkaXBsdXNFeHQ6OlN0cmV0Y2hCaXRNYXNrKEhEQyBoREMsIEJPT0wgYk1vbm9EZXZpY2UsIGNvbnN0IENGWF9ESUJpdG1hcCogcEJpdG1hcCwgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsIEZYX0RXT1JEIGFyZ2IsIGNvbnN0IEZYX1JFQ1QqIHBDbGlwUmVjdCwgaW50IGZsYWdzKQ0KLXsNCi0gICAgQVNTRVJUKHBCaXRtYXAtPkdldEJQUCgpID09IDEpOw0KLSAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0Ow0KLSAgICBHcEdyYXBoaWNzKiBwR3JhcGhpY3MgPSBOVUxMOw0KLSAgICBDYWxsRnVuYyhHZGlwQ3JlYXRlRnJvbUhEQykoaERDLCAmcEdyYXBoaWNzKTsNCi0gICAgQ2FsbEZ1bmMoR2RpcFNldFBhZ2VVbml0KShwR3JhcGhpY3MsIFVuaXRQaXhlbCk7DQotICAgIGlmIChmbGFncyAmIEZYRElCX05PU01PT1RIKSB7DQotICAgICAgICBDYWxsRnVuYyhHZGlwU2V0SW50ZXJwb2xhdGlvbk1vZGUpKHBHcmFwaGljcywgSW50ZXJwb2xhdGlvbk1vZGVOZWFyZXN0TmVpZ2hib3IpOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgQ2FsbEZ1bmMoR2RpcFNldEludGVycG9sYXRpb25Nb2RlKShwR3JhcGhpY3MsIEludGVycG9sYXRpb25Nb2RlSGlnaFF1YWxpdHkpOw0KLSAgICB9DQotICAgIE91dHB1dEltYWdlTWFzayhwR3JhcGhpY3MsIGJNb25vRGV2aWNlLCBwQml0bWFwLCBkZXN0X2xlZnQsIGRlc3RfdG9wLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgYXJnYiwgcENsaXBSZWN0KTsNCi0gICAgQ2FsbEZ1bmMoR2RpcERlbGV0ZUdyYXBoaWNzKShwR3JhcGhpY3MpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTCBDR2RpcGx1c0V4dDo6U3RyZXRjaERJQml0cyhIREMgaERDLCBjb25zdCBDRlhfRElCaXRtYXAqIHBCaXRtYXAsIGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsIGNvbnN0IEZYX1JFQ1QqIHBDbGlwUmVjdCwgaW50IGZsYWdzKQ0KLXsNCi0gICAgR3BHcmFwaGljcyogcEdyYXBoaWNzOw0KLSAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0Ow0KLSAgICBDYWxsRnVuYyhHZGlwQ3JlYXRlRnJvbUhEQykoaERDLCAmcEdyYXBoaWNzKTsNCi0gICAgQ2FsbEZ1bmMoR2RpcFNldFBhZ2VVbml0KShwR3JhcGhpY3MsIFVuaXRQaXhlbCk7DQotICAgIGlmIChmbGFncyAmIEZYRElCX05PU01PT1RIKSB7DQotICAgICAgICBDYWxsRnVuYyhHZGlwU2V0SW50ZXJwb2xhdGlvbk1vZGUpKHBHcmFwaGljcywgSW50ZXJwb2xhdGlvbk1vZGVOZWFyZXN0TmVpZ2hib3IpOw0KLSAgICB9IGVsc2UgaWYgKHBCaXRtYXAtPkdldFdpZHRoKCkgPiBhYnMoZGVzdF93aWR0aCkgLyAyIHx8IHBCaXRtYXAtPkdldEhlaWdodCgpID4gYWJzKGRlc3RfaGVpZ2h0KSAvIDIpIHsNCi0gICAgICAgIENhbGxGdW5jKEdkaXBTZXRJbnRlcnBvbGF0aW9uTW9kZSkocEdyYXBoaWNzLCBJbnRlcnBvbGF0aW9uTW9kZUhpZ2hRdWFsaXR5KTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIENhbGxGdW5jKEdkaXBTZXRJbnRlcnBvbGF0aW9uTW9kZSkocEdyYXBoaWNzLCBJbnRlcnBvbGF0aW9uTW9kZUJpbGluZWFyKTsNCi0gICAgfQ0KLSAgICBGWF9SRUNUIHNyY19yZWN0KDAsIDAsIHBCaXRtYXAtPkdldFdpZHRoKCksIHBCaXRtYXAtPkdldEhlaWdodCgpKTsNCi0gICAgT3V0cHV0SW1hZ2UocEdyYXBoaWNzLCBwQml0bWFwLCAmc3JjX3JlY3QsIGRlc3RfbGVmdCwgZGVzdF90b3AsIGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0KTsNCi0gICAgQ2FsbEZ1bmMoR2RpcERlbGV0ZUdyYXBoaWNzKShwR3JhcGhpY3MpOw0KLSAgICBDYWxsRnVuYyhHZGlwRGVsZXRlR3JhcGhpY3MpKHBHcmFwaGljcyk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1zdGF0aWMgR3BQZW4qIF9HZGlwQ3JlYXRlUGVuKGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIERXT1JEIGFyZ2IsIEZYX0JPT0wgYlRleHRNb2RlID0gRkFMU0UpDQotew0KLSAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0Ow0KLSAgICBGWF9GTE9BVCB3aWR0aCA9IHBHcmFwaFN0YXRlID8gcEdyYXBoU3RhdGUtPm1fTGluZVdpZHRoIDogMS4wZjsNCi0gICAgaWYgKCFiVGV4dE1vZGUpIHsNCi0gICAgICAgIEZYX0ZMT0FUIHVuaXQgPSBwTWF0cml4ID09IE5VTEwgPyAxLjBmIDogRlhTWVNfRGl2KDEuMGYsIChwTWF0cml4LT5HZXRYVW5pdCgpICsgcE1hdHJpeC0+R2V0WVVuaXQoKSkgLyAyKTsNCi0gICAgICAgIGlmICh3aWR0aCA8IHVuaXQpIHsNCi0gICAgICAgICAgICB3aWR0aCA9IHVuaXQ7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgR3BQZW4qIHBQZW4gPSBOVUxMOw0KLSAgICBDYWxsRnVuYyhHZGlwQ3JlYXRlUGVuMSkoKEFSR0IpYXJnYiwgd2lkdGgsIFVuaXRXb3JsZCwgJnBQZW4pOw0KLSAgICBMaW5lQ2FwIGxpbmVDYXA7DQotICAgIERhc2hDYXAgZGFzaENhcCA9IERhc2hDYXBGbGF0Ow0KLSAgICBGWF9CT09MIGJEYXNoRXh0ZW5kID0gRkFMU0U7DQotICAgIHN3aXRjaChwR3JhcGhTdGF0ZS0+bV9MaW5lQ2FwKSB7DQotICAgICAgICBjYXNlIENGWF9HcmFwaFN0YXRlRGF0YTo6TGluZUNhcEJ1dHQ6DQotICAgICAgICAgICAgbGluZUNhcCA9IExpbmVDYXBGbGF0Ow0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBDRlhfR3JhcGhTdGF0ZURhdGE6OkxpbmVDYXBSb3VuZDoNCi0gICAgICAgICAgICBsaW5lQ2FwID0gTGluZUNhcFJvdW5kOw0KLSAgICAgICAgICAgIGRhc2hDYXAgPSBEYXNoQ2FwUm91bmQ7DQotICAgICAgICAgICAgYkRhc2hFeHRlbmQgPSBUUlVFOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgY2FzZSBDRlhfR3JhcGhTdGF0ZURhdGE6OkxpbmVDYXBTcXVhcmU6DQotICAgICAgICAgICAgbGluZUNhcCA9IExpbmVDYXBTcXVhcmU7DQotICAgICAgICAgICAgYkRhc2hFeHRlbmQgPSBUUlVFOw0KLSAgICAgICAgICAgIGJyZWFrOw0KLSAgICB9DQotICAgIENhbGxGdW5jKEdkaXBTZXRQZW5MaW5lQ2FwMTk3ODE5KShwUGVuLCBsaW5lQ2FwLCBsaW5lQ2FwLCBkYXNoQ2FwKTsNCi0gICAgTGluZUpvaW4gbGluZUpvaW47DQotICAgIHN3aXRjaChwR3JhcGhTdGF0ZS0+bV9MaW5lSm9pbikgew0KLSAgICAgICAgY2FzZSBDRlhfR3JhcGhTdGF0ZURhdGE6OkxpbmVKb2luTWl0ZXI6DQotICAgICAgICAgICAgbGluZUpvaW4gPSBMaW5lSm9pbk1pdGVyQ2xpcHBlZDsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgQ0ZYX0dyYXBoU3RhdGVEYXRhOjpMaW5lSm9pblJvdW5kOg0KLSAgICAgICAgICAgIGxpbmVKb2luID0gTGluZUpvaW5Sb3VuZDsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgICAgIGNhc2UgQ0ZYX0dyYXBoU3RhdGVEYXRhOjpMaW5lSm9pbkJldmVsOg0KLSAgICAgICAgICAgIGxpbmVKb2luID0gTGluZUpvaW5CZXZlbDsNCi0gICAgICAgICAgICBicmVhazsNCi0gICAgfQ0KLSAgICBDYWxsRnVuYyhHZGlwU2V0UGVuTGluZUpvaW4pKHBQZW4sIGxpbmVKb2luKTsNCi0gICAgaWYocEdyYXBoU3RhdGUtPm1fRGFzaENvdW50KSB7DQotICAgICAgICBGWF9GTE9BVCogcERhc2hBcnJheSA9IEZYX0FsbG9jKEZYX0ZMT0FULCBwR3JhcGhTdGF0ZS0+bV9EYXNoQ291bnQgKyBwR3JhcGhTdGF0ZS0+bV9EYXNoQ291bnQgJSAyKTsNCi0gICAgICAgIGlmICghcERhc2hBcnJheSkgew0KLSAgICAgICAgICAgIHJldHVybiBOVUxMOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW50IG5Db3VudCA9IDA7DQotICAgICAgICBGWF9GTE9BVCBvbl9sZWZ0b3ZlciA9IDAsIG9mZl9sZWZ0b3ZlciA9IDA7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBHcmFwaFN0YXRlLT5tX0Rhc2hDb3VudDsgaSArPSAyKSB7DQotICAgICAgICAgICAgRlhfRkxPQVQgb25fcGhhc2UgPSBwR3JhcGhTdGF0ZS0+bV9EYXNoQXJyYXlbaV07DQotICAgICAgICAgICAgRlhfRkxPQVQgb2ZmX3BoYXNlOw0KLSAgICAgICAgICAgIGlmIChpID09IHBHcmFwaFN0YXRlLT5tX0Rhc2hDb3VudCAtIDEpIHsNCi0gICAgICAgICAgICAgICAgb2ZmX3BoYXNlID0gb25fcGhhc2U7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgb2ZmX3BoYXNlID0gcEdyYXBoU3RhdGUtPm1fRGFzaEFycmF5W2kgKyAxXTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgb25fcGhhc2UgLz0gd2lkdGg7DQotICAgICAgICAgICAgb2ZmX3BoYXNlIC89IHdpZHRoOw0KLSAgICAgICAgICAgIGlmIChvbl9waGFzZSArIG9mZl9waGFzZSA8PSAwLjAwMDAyZikgew0KLSAgICAgICAgICAgICAgICBvbl9waGFzZSA9IDEuMGYgLyAxMDsNCi0gICAgICAgICAgICAgICAgb2ZmX3BoYXNlID0gMS4wZiAvIDEwOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoYkRhc2hFeHRlbmQpIHsNCi0gICAgICAgICAgICAgICAgaWYgKG9mZl9waGFzZSA8IDEpIHsNCi0gICAgICAgICAgICAgICAgICAgIG9mZl9waGFzZSA9IDA7DQotICAgICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICBvZmZfcGhhc2UgLT0gMTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBvbl9waGFzZSArPSAxOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAob25fcGhhc2UgPT0gMCB8fCBvZmZfcGhhc2UgPT0gMCkgew0KLSAgICAgICAgICAgICAgICBpZiAobkNvdW50ID09IDApIHsNCi0gICAgICAgICAgICAgICAgICAgIG9uX2xlZnRvdmVyICs9IG9uX3BoYXNlOw0KLSAgICAgICAgICAgICAgICAgICAgb2ZmX2xlZnRvdmVyICs9IG9mZl9waGFzZTsNCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgIHBEYXNoQXJyYXlbbkNvdW50IC0gMl0gKz0gb25fcGhhc2U7DQotICAgICAgICAgICAgICAgICAgICBwRGFzaEFycmF5W25Db3VudCAtIDFdICs9IG9mZl9waGFzZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIHBEYXNoQXJyYXlbbkNvdW50KytdID0gb25fcGhhc2UgKyBvbl9sZWZ0b3ZlcjsNCi0gICAgICAgICAgICAgICAgb25fbGVmdG92ZXIgPSAwOw0KLSAgICAgICAgICAgICAgICBwRGFzaEFycmF5W25Db3VudCsrXSA9IG9mZl9waGFzZSArIG9mZl9sZWZ0b3ZlcjsNCi0gICAgICAgICAgICAgICAgb2ZmX2xlZnRvdmVyID0gMDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBDYWxsRnVuYyhHZGlwU2V0UGVuRGFzaEFycmF5KShwUGVuLCBwRGFzaEFycmF5LCBuQ291bnQpOw0KLSAgICAgICAgRlhfRkxPQVQgcGhhc2UgPSBwR3JhcGhTdGF0ZS0+bV9EYXNoUGhhc2U7DQotICAgICAgICBpZiAoYkRhc2hFeHRlbmQpDQotICAgICAgICAgICAgaWYgKHBoYXNlIDwgMC41Zikgew0KLSAgICAgICAgICAgICAgICBwaGFzZSA9IDA7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgcGhhc2UgLT0gMC41ZjsNCi0gICAgICAgICAgICB9DQotICAgICAgICBDYWxsRnVuYyhHZGlwU2V0UGVuRGFzaE9mZnNldCkocFBlbiwgcGhhc2UpOw0KLSAgICAgICAgRlhfRnJlZShwRGFzaEFycmF5KTsNCi0gICAgICAgIHBEYXNoQXJyYXkgPSBOVUxMOw0KLSAgICB9DQotICAgIENhbGxGdW5jKEdkaXBTZXRQZW5NaXRlckxpbWl0KShwUGVuLCBwR3JhcGhTdGF0ZS0+bV9NaXRlckxpbWl0KTsNCi0gICAgcmV0dXJuIHBQZW47DQotfQ0KLXN0YXRpYyBCT09MIElzU21hbGxUcmlhbmdsZShQb2ludEYqIHBvaW50cywgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgaW50JiB2MSwgaW50JiB2MikNCi17DQotICAgIGludCBwYWlyc1tdID0gezEsIDIsIDAsIDIsIDAsIDF9Ow0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkgKyspIHsNCi0gICAgICAgIGludCBwYWlyMSA9IHBhaXJzW2kgKiAyXTsNCi0gICAgICAgIGludCBwYWlyMiA9IHBhaXJzW2kgKiAyICsgMV07DQotICAgICAgICBGWF9GTE9BVCB4MSA9IHBvaW50c1twYWlyMV0uWCwgeDIgPSBwb2ludHNbcGFpcjJdLlg7DQotICAgICAgICBGWF9GTE9BVCB5MSA9IHBvaW50c1twYWlyMV0uWSwgeTIgPSBwb2ludHNbcGFpcjJdLlk7DQotICAgICAgICBpZiAocE1hdHJpeCkgew0KLSAgICAgICAgICAgIHBNYXRyaXgtPlRyYW5zZm9ybSh4MSwgeTEpOw0KLSAgICAgICAgICAgIHBNYXRyaXgtPlRyYW5zZm9ybSh4MiwgeTIpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfRkxPQVQgZHggPSB4MSAtIHgyOw0KLSAgICAgICAgRlhfRkxPQVQgZHkgPSB5MSAtIHkyOw0KLSAgICAgICAgRlhfRkxPQVQgZGlzdGFuY2Vfc3F1YXJlID0gRlhTWVNfTXVsKGR4LCBkeCkgKyBGWFNZU19NdWwoZHksIGR5KTsNCi0gICAgICAgIGlmIChkaXN0YW5jZV9zcXVhcmUgPCAoMS4wZiAqIDIgKyAxLjBmIC8gNCkpIHsNCi0gICAgICAgICAgICB2MSA9IGk7DQotICAgICAgICAgICAgdjIgPSBwYWlyMTsNCi0gICAgICAgICAgICByZXR1cm4gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUJPT0wgQ0dkaXBsdXNFeHQ6OkRyYXdQYXRoKEhEQyBoREMsIGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgZmlsbF9hcmdiLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIHN0cm9rZV9hcmdiLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWxsX21vZGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICkNCi17DQotICAgIGludCBuUG9pbnRzID0gcFBhdGhEYXRhLT5HZXRQb2ludENvdW50KCk7DQotICAgIGlmIChuUG9pbnRzID09IDApIHsNCi0gICAgICAgIHJldHVybiBUUlVFOw0KLSAgICB9DQotICAgIEZYX1BBVEhQT0lOVCogcFBvaW50cyA9IHBQYXRoRGF0YS0+R2V0UG9pbnRzKCk7DQotICAgIEdwR3JhcGhpY3MqIHBHcmFwaGljcyA9IE5VTEw7DQotICAgIENHZGlwbHVzRXh0JiBHZGlwbHVzRXh0ID0gKChDV2luMzJQbGF0Zm9ybSopQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCkpLT5tX0dkaXBsdXNFeHQ7DQotICAgIENhbGxGdW5jKEdkaXBDcmVhdGVGcm9tSERDKShoREMsICZwR3JhcGhpY3MpOw0KLSAgICBDYWxsRnVuYyhHZGlwU2V0UGFnZVVuaXQpKHBHcmFwaGljcywgVW5pdFBpeGVsKTsNCi0gICAgQ2FsbEZ1bmMoR2RpcFNldFBpeGVsT2Zmc2V0TW9kZSkocEdyYXBoaWNzLCBQaXhlbE9mZnNldE1vZGVIYWxmKTsNCi0gICAgR3BNYXRyaXgqIHBNYXRyaXggPSBOVUxMOw0KLSAgICBpZiAocE9iamVjdDJEZXZpY2UpIHsNCi0gICAgICAgIENhbGxGdW5jKEdkaXBDcmVhdGVNYXRyaXgyKShwT2JqZWN0MkRldmljZS0+YSwgcE9iamVjdDJEZXZpY2UtPmIsIHBPYmplY3QyRGV2aWNlLT5jLCBwT2JqZWN0MkRldmljZS0+ZCwgcE9iamVjdDJEZXZpY2UtPmUsIHBPYmplY3QyRGV2aWNlLT5mLCAmcE1hdHJpeCk7DQotICAgICAgICBDYWxsRnVuYyhHZGlwU2V0V29ybGRUcmFuc2Zvcm0pKHBHcmFwaGljcywgcE1hdHJpeCk7DQotICAgIH0NCi0gICAgUG9pbnRGICpwb2ludHMgPSBGWF9BbGxvYyhQb2ludEYsIG5Qb2ludHMpOw0KLSAgICBpZiAoIXBvaW50cykgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIEJZVEUgKiB0eXBlcyAgPSBGWF9BbGxvYyhCWVRFLCBuUG9pbnRzKTsNCi0gICAgaWYgKCF0eXBlcykgew0KLSAgICAgICAgRlhfRnJlZShwb2ludHMpOw0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGludCBuU3ViUGF0aGVzID0gMDsNCi0gICAgRlhfQk9PTCBiU3ViQ2xvc2UgPSBGQUxTRTsNCi0gICAgaW50IHBvc19zdWJjbG9zZSA9IDA7DQotICAgIEZYX0JPT0wgYlNtb290aCA9IEZBTFNFOw0KLSAgICBpbnQgc3RhcnRwb2ludCA9IDA7DQotICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuUG9pbnRzOyBpKyspIHsNCi0gICAgICAgIHBvaW50c1tpXS5YID0gcFBvaW50c1tpXS5tX1BvaW50WDsNCi0gICAgICAgIHBvaW50c1tpXS5ZID0gcFBvaW50c1tpXS5tX1BvaW50WTsNCi0gICAgICAgIEZYX0ZMT0FUIHgsIHk7DQotICAgICAgICBpZiAocE9iamVjdDJEZXZpY2UpIHsNCi0gICAgICAgICAgICBwT2JqZWN0MkRldmljZS0+VHJhbnNmb3JtKHBQb2ludHNbaV0ubV9Qb2ludFgsIHBQb2ludHNbaV0ubV9Qb2ludFksIHgsIHkpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICB4ID0gcFBvaW50c1tpXS5tX1BvaW50WDsNCi0gICAgICAgICAgICB5ID0gcFBvaW50c1tpXS5tX1BvaW50WTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICh4ID4gNTAwMDAgKiAxLjBmKSB7DQotICAgICAgICAgICAgcG9pbnRzW2ldLlggPSA1MDAwMCAqIDEuMGY7DQotICAgICAgICB9DQotICAgICAgICBpZiAoeCA8IC01MDAwMCAqIDEuMGYpIHsNCi0gICAgICAgICAgICBwb2ludHNbaV0uWCA9IC01MDAwMCAqIDEuMGY7DQotICAgICAgICB9DQotICAgICAgICBpZiAoeSA+IDUwMDAwICogMS4wZikgew0KLSAgICAgICAgICAgIHBvaW50c1tpXS5ZID0gNTAwMDAgKiAxLjBmOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHkgPCAtNTAwMDAgKiAxLjBmKSB7DQotICAgICAgICAgICAgcG9pbnRzW2ldLlkgPSAtNTAwMDAgKiAxLjBmOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaW50IHBvaW50X3R5cGUgPSBwUG9pbnRzW2ldLm1fRmxhZyAmIEZYUFRfVFlQRTsNCi0gICAgICAgIGlmKHBvaW50X3R5cGUgPT0gRlhQVF9NT1ZFVE8pIHsNCi0gICAgICAgICAgICB0eXBlc1tpXSA9IFBhdGhQb2ludFR5cGVTdGFydDsNCi0gICAgICAgICAgICBuU3ViUGF0aGVzICsrOw0KLSAgICAgICAgICAgIGJTdWJDbG9zZSA9IEZBTFNFOw0KLSAgICAgICAgICAgIHN0YXJ0cG9pbnQgPSBpOw0KLSAgICAgICAgfSBlbHNlIGlmIChwb2ludF90eXBlID09IEZYUFRfTElORVRPKSB7DQotICAgICAgICAgICAgdHlwZXNbaV0gPSBQYXRoUG9pbnRUeXBlTGluZTsNCi0gICAgICAgICAgICBpZiAocFBvaW50c1tpIC0gMV0ubV9GbGFnID09IEZYUFRfTU9WRVRPICYmIChpID09IG5Qb2ludHMgLSAxIHx8IHBQb2ludHNbaSArIDFdLm1fRmxhZyA9PSBGWFBUX01PVkVUTykgJiYNCi0gICAgICAgICAgICAgICAgICAgIHBvaW50c1tpXS5ZID09IHBvaW50c1tpIC0gMV0uWSAmJiBwb2ludHNbaV0uWCA9PSBwb2ludHNbaSAtIDFdLlgpIHsNCi0gICAgICAgICAgICAgICAgcG9pbnRzW2ldLlggKz0gMC4wMWY7DQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoIWJTbW9vdGggJiYgcG9pbnRzW2ldLlggIT0gcG9pbnRzW2kgLSAxXS5YICYmIHBvaW50c1tpXS5ZICE9IHBvaW50c1tpIC0gMV0uWSkgew0KLSAgICAgICAgICAgICAgICBiU21vb3RoID0gVFJVRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9IGVsc2UgaWYgKHBvaW50X3R5cGUgPT0gRlhQVF9CRVpJRVJUTykJew0KLSAgICAgICAgICAgIHR5cGVzW2ldID0gUGF0aFBvaW50VHlwZUJlemllcjsNCi0gICAgICAgICAgICBiU21vb3RoID0gVFJVRTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwUG9pbnRzW2ldLm1fRmxhZyAmIEZYUFRfQ0xPU0VGSUdVUkUpIHsNCi0gICAgICAgICAgICBpZiAoYlN1YkNsb3NlKSB7DQotICAgICAgICAgICAgICAgIHR5cGVzW3Bvc19zdWJjbG9zZV0gJj0gflBhdGhQb2ludFR5cGVDbG9zZVN1YnBhdGg7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgYlN1YkNsb3NlID0gVFJVRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcG9zX3N1YmNsb3NlID0gaTsNCi0gICAgICAgICAgICB0eXBlc1tpXSB8PSBQYXRoUG9pbnRUeXBlQ2xvc2VTdWJwYXRoOw0KLSAgICAgICAgICAgIGlmICghYlNtb290aCAmJiBwb2ludHNbaV0uWCAhPSBwb2ludHNbc3RhcnRwb2ludF0uWCAmJiBwb2ludHNbaV0uWSAhPSBwb2ludHNbc3RhcnRwb2ludF0uWSkgew0KLSAgICAgICAgICAgICAgICBiU21vb3RoID0gVFJVRTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaWYgKGZpbGxfbW9kZSAmIEZYRklMTF9OT1BBVEhTTU9PVEgpIHsNCi0gICAgICAgIGJTbW9vdGggPSBGQUxTRTsNCi0gICAgICAgIENhbGxGdW5jKEdkaXBTZXRTbW9vdGhpbmdNb2RlKShwR3JhcGhpY3MsIFNtb290aGluZ01vZGVOb25lKTsNCi0gICAgfSBlbHNlIGlmICghKGZpbGxfbW9kZSAmIEZYRklMTF9GVUxMQ09WRVIpKSB7DQotICAgICAgICBpZiAoIWJTbW9vdGggJiYgKGZpbGxfbW9kZSAmIDMpKSB7DQotICAgICAgICAgICAgYlNtb290aCA9IFRSVUU7DQotICAgICAgICB9DQotICAgICAgICBpZiAoYlNtb290aCB8fCBwR3JhcGhTdGF0ZSAmJiBwR3JhcGhTdGF0ZS0+bV9MaW5lV2lkdGggPiAyKSB7DQotICAgICAgICAgICAgQ2FsbEZ1bmMoR2RpcFNldFNtb290aGluZ01vZGUpKHBHcmFwaGljcywgU21vb3RoaW5nTW9kZUFudGlBbGlhcyk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgaW50IG5ld19maWxsX21vZGUgPSBmaWxsX21vZGUgJiAzOw0KLSAgICBpZiAoblBvaW50cyA9PSA0ICYmIHBHcmFwaFN0YXRlID09IE5VTEwpIHsNCi0gICAgICAgIGludCB2MSwgdjI7DQotICAgICAgICBpZiAoSXNTbWFsbFRyaWFuZ2xlKHBvaW50cywgcE9iamVjdDJEZXZpY2UsIHYxLCB2MikpIHsNCi0gICAgICAgICAgICBHcFBlbiogcFBlbiA9IE5VTEw7DQotICAgICAgICAgICAgQ2FsbEZ1bmMoR2RpcENyZWF0ZVBlbjEpKGZpbGxfYXJnYiwgMS4wZiwgVW5pdFBpeGVsLCAmcFBlbik7DQotICAgICAgICAgICAgQ2FsbEZ1bmMoR2RpcERyYXdMaW5lSSkocEdyYXBoaWNzLCBwUGVuLCBGWFNZU19yb3VuZChwb2ludHNbdjFdLlgpLCBGWFNZU19yb3VuZChwb2ludHNbdjFdLlkpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYU1lTX3JvdW5kKHBvaW50c1t2Ml0uWCksIEZYU1lTX3JvdW5kKHBvaW50c1t2Ml0uWSkpOw0KLSAgICAgICAgICAgIENhbGxGdW5jKEdkaXBEZWxldGVQZW4pKHBQZW4pOw0KLSAgICAgICAgICAgIHJldHVybiBUUlVFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIEdwUGF0aCogcEdwUGF0aCA9IE5VTEw7DQotICAgIENhbGxGdW5jKEdkaXBDcmVhdGVQYXRoMikocG9pbnRzLCB0eXBlcywgblBvaW50cywgR2RpRmlsbFR5cGUyR2RpcChuZXdfZmlsbF9tb2RlKSwgJnBHcFBhdGgpOw0KLSAgICBpZiAoIXBHcFBhdGgpIHsNCi0gICAgICAgIGlmIChwTWF0cml4KSB7DQotICAgICAgICAgICAgQ2FsbEZ1bmMoR2RpcERlbGV0ZU1hdHJpeCkocE1hdHJpeCk7DQotICAgICAgICB9DQotICAgICAgICBGWF9GcmVlKHBvaW50cyk7DQotICAgICAgICBGWF9GcmVlKHR5cGVzKTsNCi0gICAgICAgIENhbGxGdW5jKEdkaXBEZWxldGVHcmFwaGljcykocEdyYXBoaWNzKTsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBpZiAobmV3X2ZpbGxfbW9kZSkgew0KLSAgICAgICAgR3BCcnVzaCogcEJydXNoID0gX0dkaXBDcmVhdGVCcnVzaChmaWxsX2FyZ2IpOw0KLSAgICAgICAgQ2FsbEZ1bmMoR2RpcFNldFBhdGhGaWxsTW9kZSkocEdwUGF0aCwgR2RpRmlsbFR5cGUyR2RpcChuZXdfZmlsbF9tb2RlKSk7DQotICAgICAgICBDYWxsRnVuYyhHZGlwRmlsbFBhdGgpKHBHcmFwaGljcywgcEJydXNoLCBwR3BQYXRoKTsNCi0gICAgICAgIENhbGxGdW5jKEdkaXBEZWxldGVCcnVzaCkocEJydXNoKTsNCi0gICAgfQ0KLSAgICBpZiAocEdyYXBoU3RhdGUgJiYgc3Ryb2tlX2FyZ2IpIHsNCi0gICAgICAgIEdwUGVuKiBwUGVuID0gX0dkaXBDcmVhdGVQZW4ocEdyYXBoU3RhdGUsIHBPYmplY3QyRGV2aWNlLCBzdHJva2VfYXJnYiwgZmlsbF9tb2RlICYgRlhfU1RST0tFX1RFWFRfTU9ERSk7DQotICAgICAgICBpZiAoblN1YlBhdGhlcyA9PSAxKSB7DQotICAgICAgICAgICAgQ2FsbEZ1bmMoR2RpcERyYXdQYXRoKShwR3JhcGhpY3MsIHBQZW4sIHBHcFBhdGgpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBpbnQgaVN0YXJ0ID0gMDsNCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5Qb2ludHM7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgaWYgKGkgPT0gblBvaW50cyAtIDEgfHwgdHlwZXNbaSArIDFdID09IFBhdGhQb2ludFR5cGVTdGFydCkgew0KLSAgICAgICAgICAgICAgICAgICAgR3BQYXRoKiBwU3ViUGF0aDsNCi0gICAgICAgICAgICAgICAgICAgIENhbGxGdW5jKEdkaXBDcmVhdGVQYXRoMikocG9pbnRzICsgaVN0YXJ0LCB0eXBlcyArIGlTdGFydCwgaSAtIGlTdGFydCArIDEsIEdkaUZpbGxUeXBlMkdkaXAobmV3X2ZpbGxfbW9kZSksICZwU3ViUGF0aCk7DQotICAgICAgICAgICAgICAgICAgICBpU3RhcnQgPSBpICsgMTsNCi0gICAgICAgICAgICAgICAgICAgIENhbGxGdW5jKEdkaXBEcmF3UGF0aCkocEdyYXBoaWNzLCBwUGVuLCBwU3ViUGF0aCk7DQotICAgICAgICAgICAgICAgICAgICBDYWxsRnVuYyhHZGlwRGVsZXRlUGF0aCkocFN1YlBhdGgpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgQ2FsbEZ1bmMoR2RpcERlbGV0ZVBlbikocFBlbik7DQotICAgIH0NCi0gICAgaWYgKHBNYXRyaXgpIHsNCi0gICAgICAgIENhbGxGdW5jKEdkaXBEZWxldGVNYXRyaXgpKHBNYXRyaXgpOw0KLSAgICB9DQotICAgIEZYX0ZyZWUocG9pbnRzKTsNCi0gICAgRlhfRnJlZSh0eXBlcyk7DQotICAgIENhbGxGdW5jKEdkaXBEZWxldGVQYXRoKShwR3BQYXRoKTsNCi0gICAgQ2FsbEZ1bmMoR2RpcERlbGV0ZUdyYXBoaWNzKShwR3JhcGhpY3MpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotY2xhc3MgR3BTdHJlYW0gOiBwdWJsaWMgSVN0cmVhbSwgcHVibGljIENGWF9PYmplY3QNCi17DQotICAgIExPTkcJbV9SZWZDb3VudDsNCi0gICAgaW50ICAgICBtX1JlYWRQb3M7DQotICAgIENGWF9CeXRlVGV4dEJ1ZgltX0ludGVyU3RyZWFtOw0KLXB1YmxpYzoNCi0gICAgR3BTdHJlYW0oKQ0KLSAgICB7DQotICAgICAgICBtX1JlZkNvdW50ID0gMTsNCi0gICAgICAgIG1fUmVhZFBvcyA9IDA7DQotICAgIH0NCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFDQotICAgIFF1ZXJ5SW50ZXJmYWNlKFJFRklJRCBpaWQsIHZvaWQgKiogcHB2T2JqZWN0KQ0KLSAgICB7DQotICAgICAgICBpZiAoaWlkID09IF9fdXVpZG9mKElVbmtub3duKSB8fCBpaWQgPT0gX191dWlkb2YoSVN0cmVhbSkgfHwNCi0gICAgICAgICAgICAgICAgaWlkID09IF9fdXVpZG9mKElTZXF1ZW50aWFsU3RyZWFtKSkJew0KLSAgICAgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJU3RyZWFtKj4odGhpcyk7DQotICAgICAgICAgICAgQWRkUmVmKCk7DQotICAgICAgICAgICAgcmV0dXJuIFNfT0s7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHJldHVybiBFX05PSU5URVJGQUNFOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgQWRkUmVmKHZvaWQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAoVUxPTkcpSW50ZXJsb2NrZWRJbmNyZW1lbnQoJm1fUmVmQ291bnQpOw0KLSAgICB9DQotICAgIHZpcnR1YWwgVUxPTkcgU1RETUVUSE9EQ0FMTFRZUEUgUmVsZWFzZSh2b2lkKQ0KLSAgICB7DQotICAgICAgICBVTE9ORyByZXMgPSAoVUxPTkcpIEludGVybG9ja2VkRGVjcmVtZW50KCZtX1JlZkNvdW50KTsNCi0gICAgICAgIGlmIChyZXMgPT0gMCkgew0KLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHJlczsNCi0gICAgfQ0KLXB1YmxpYzoNCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFJlYWQodm9pZCogT3V0cHV0LCBVTE9ORyBjYiwgVUxPTkcqIHBjYlJlYWQpDQotICAgIHsNCi0gICAgICAgIHNpemVfdAlieXRlc19sZWZ0Ow0KLSAgICAgICAgc2l6ZV90CWJ5dGVzX291dDsNCi0gICAgICAgIGlmIChwY2JSZWFkICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAqcGNiUmVhZCA9IDA7DQotICAgICAgICB9DQotICAgICAgICBpZiAobV9SZWFkUG9zID09IG1fSW50ZXJTdHJlYW0uR2V0TGVuZ3RoKCkpIHsNCi0gICAgICAgICAgICByZXR1cm4gSFJFU1VMVF9GUk9NX1dJTjMyKEVSUk9SX0VORF9PRl9NRURJQSk7DQotICAgICAgICB9DQotICAgICAgICBieXRlc19sZWZ0ID0gbV9JbnRlclN0cmVhbS5HZXRMZW5ndGgoKSAtIG1fUmVhZFBvczsNCi0gICAgICAgIGJ5dGVzX291dCA9IEZYX01JTihjYiwgYnl0ZXNfbGVmdCk7DQotICAgICAgICBGWFNZU19tZW1jcHkzMihPdXRwdXQsIG1fSW50ZXJTdHJlYW0uR2V0QnVmZmVyKCkgKyBtX1JlYWRQb3MsIGJ5dGVzX291dCk7DQotICAgICAgICBtX1JlYWRQb3MgKz0gKEZYX0lOVDMyKWJ5dGVzX291dDsNCi0gICAgICAgIGlmIChwY2JSZWFkICE9IE5VTEwpIHsNCi0gICAgICAgICAgICAqcGNiUmVhZCA9IChVTE9ORylieXRlc19vdXQ7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gU19PSzsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV3JpdGUodm9pZCBjb25zdCogSW5wdXQsIFVMT05HIGNiLCBVTE9ORyogcGNiV3JpdHRlbikNCi0gICAgew0KLSAgICAgICAgaWYgKGNiIDw9IDApIHsNCi0gICAgICAgICAgICBpZiAocGNiV3JpdHRlbiAhPSBOVUxMKSB7DQotICAgICAgICAgICAgICAgICpwY2JXcml0dGVuID0gMDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuIFNfT0s7DQotICAgICAgICB9DQotICAgICAgICBtX0ludGVyU3RyZWFtLkluc2VydEJsb2NrKG1fSW50ZXJTdHJlYW0uR2V0TGVuZ3RoKCksIElucHV0LCBjYik7DQotICAgICAgICBpZiAocGNiV3JpdHRlbiAhPSBOVUxMKSB7DQotICAgICAgICAgICAgKnBjYldyaXR0ZW4gPSBjYjsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBTX09LOw0KLSAgICB9DQotcHVibGljOg0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0U2l6ZShVTEFSR0VfSU5URUdFUikNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEVfTk9USU1QTDsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgQ29weVRvKElTdHJlYW0qLCBVTEFSR0VfSU5URUdFUiwgVUxBUkdFX0lOVEVHRVIqLCBVTEFSR0VfSU5URUdFUiopDQotICAgIHsNCi0gICAgICAgIHJldHVybiBFX05PVElNUEw7DQotICAgIH0NCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIENvbW1pdChEV09SRCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEVfTk9USU1QTDsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUmV2ZXJ0KHZvaWQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBFX05PVElNUEw7DQotICAgIH0NCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIExvY2tSZWdpb24oVUxBUkdFX0lOVEVHRVIsIFVMQVJHRV9JTlRFR0VSLCBEV09SRCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIEVfTk9USU1QTDsNCi0gICAgfQ0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgVW5sb2NrUmVnaW9uKFVMQVJHRV9JTlRFR0VSLCBVTEFSR0VfSU5URUdFUiwgRFdPUkQpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBFX05PVElNUEw7DQotICAgIH0NCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIENsb25lKElTdHJlYW0gKiopDQotICAgIHsNCi0gICAgICAgIHJldHVybiBFX05PVElNUEw7DQotICAgIH0NCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFNlZWsoTEFSR0VfSU5URUdFUiBsaURpc3RhbmNlVG9Nb3ZlLCBEV09SRCBkd09yaWdpbiwgVUxBUkdFX0lOVEVHRVIqIGxwTmV3RmlsZVBvaW50ZXIpDQotICAgIHsNCi0gICAgICAgIGxvbmcJc3RhcnQgPSAwOw0KLSAgICAgICAgbG9uZwluZXdfcmVhZF9wb3NpdGlvbjsNCi0gICAgICAgIHN3aXRjaChkd09yaWdpbikgew0KLSAgICAgICAgICAgIGNhc2UgU1RSRUFNX1NFRUtfU0VUOg0KLSAgICAgICAgICAgICAgICBzdGFydCA9IDA7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIGNhc2UgU1RSRUFNX1NFRUtfQ1VSOg0KLSAgICAgICAgICAgICAgICBzdGFydCA9IG1fUmVhZFBvczsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgY2FzZSBTVFJFQU1fU0VFS19FTkQ6DQotICAgICAgICAgICAgICAgIHN0YXJ0ID0gbV9JbnRlclN0cmVhbS5HZXRMZW5ndGgoKTsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgZGVmYXVsdDoNCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNUR19FX0lOVkFMSURGVU5DVElPTjsNCi0gICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICB9DQotICAgICAgICBuZXdfcmVhZF9wb3NpdGlvbiA9IHN0YXJ0ICsgKGxvbmcpbGlEaXN0YW5jZVRvTW92ZS5RdWFkUGFydDsNCi0gICAgICAgIGlmIChuZXdfcmVhZF9wb3NpdGlvbiA8IDAgfHwgbmV3X3JlYWRfcG9zaXRpb24gPiBtX0ludGVyU3RyZWFtLkdldExlbmd0aCgpKSB7DQotICAgICAgICAgICAgcmV0dXJuIFNUR19FX1NFRUtFUlJPUjsNCi0gICAgICAgIH0NCi0gICAgICAgIG1fUmVhZFBvcyA9IG5ld19yZWFkX3Bvc2l0aW9uOw0KLSAgICAgICAgaWYgKGxwTmV3RmlsZVBvaW50ZXIgIT0gTlVMTCkgew0KLSAgICAgICAgICAgIGxwTmV3RmlsZVBvaW50ZXItPlF1YWRQYXJ0ID0gbV9SZWFkUG9zOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIFNfT0s7DQotICAgIH0NCi0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFN0YXQoU1RBVFNURyogcFN0YXRzdGcsIERXT1JEIGdyZlN0YXRGbGFnKQ0KLSAgICB7DQotICAgICAgICBpZiAocFN0YXRzdGcgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiBTVEdfRV9JTlZBTElERlVOQ1RJT047DQotICAgICAgICB9DQotICAgICAgICBaZXJvTWVtb3J5KHBTdGF0c3RnLCBzaXplb2YoU1RBVFNURykpOw0KLSAgICAgICAgcFN0YXRzdGctPmNiU2l6ZS5RdWFkUGFydCA9IG1fSW50ZXJTdHJlYW0uR2V0TGVuZ3RoKCk7DQotICAgICAgICByZXR1cm4gU19PSzsNCi0gICAgfQ0KLX07DQotdHlwZWRlZiBzdHJ1Y3Qgew0KLSAgICBCSVRNQVBJTkZPKgkJcGJtaTsNCi0gICAgaW50CQkJCVN0cmlkZTsNCi0gICAgTFBCWVRFCQkJcFNjYW4wOw0KLSAgICBHcEJpdG1hcCoJCXBCaXRtYXA7DQotICAgIEJpdG1hcERhdGEqCQlwQml0bWFwRGF0YTsNCi0gICAgR3BTdHJlYW0qICAgICAgIHBTdHJlYW07DQotfSBQUkVWSUVXM19ESUJJVE1BUDsNCi1zdGF0aWMgUFJFVklFVzNfRElCSVRNQVAqIExvYWRESUJpdG1hcChXSU5ESUJfT3Blbl9BcmdzXyBhcmdzKQ0KLXsNCi0gICAgR3BCaXRtYXAqIHBCaXRtYXA7DQotICAgIEdwU3RyZWFtKiBwU3RyZWFtID0gTlVMTDsNCi0gICAgQ0dkaXBsdXNFeHQmIEdkaXBsdXNFeHQgPSAoKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPm1fR2RpcGx1c0V4dDsNCi0gICAgU3RhdHVzIHN0YXR1cyA9IE9rOw0KLSAgICBpZiAoYXJncy5mbGFncyA9PSBXSU5ESUJfT1BFTl9QQVRITkFNRSkgew0KLSAgICAgICAgc3RhdHVzID0gQ2FsbEZ1bmMoR2RpcENyZWF0ZUJpdG1hcEZyb21GaWxlSUNNKSgod2NoYXJfdCopYXJncy5wYXRoX25hbWUsICZwQml0bWFwKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGlmIChhcmdzLm1lbW9yeV9zaXplID09IDAgfHwgIWFyZ3MubWVtb3J5X2Jhc2UpIHsNCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIHBTdHJlYW0gPSBGWF9ORVcgR3BTdHJlYW07DQotICAgICAgICBpZiAoIXBTdHJlYW0pIHsNCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgICAgIH0NCi0gICAgICAgIHBTdHJlYW0tPldyaXRlKGFyZ3MubWVtb3J5X2Jhc2UsIChVTE9ORylhcmdzLm1lbW9yeV9zaXplLCBOVUxMKTsNCi0gICAgICAgIHN0YXR1cyA9IENhbGxGdW5jKEdkaXBDcmVhdGVCaXRtYXBGcm9tU3RyZWFtSUNNKShwU3RyZWFtLCAmcEJpdG1hcCk7DQotICAgIH0NCi0gICAgaWYgKHN0YXR1cyAhPSBPaykgew0KLSAgICAgICAgaWYgKHBTdHJlYW0pIHsNCi0gICAgICAgICAgICBwU3RyZWFtLT5SZWxlYXNlKCk7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBVSU5UIGhlaWdodCwgd2lkdGg7DQotICAgIENhbGxGdW5jKEdkaXBHZXRJbWFnZUhlaWdodCkocEJpdG1hcCwgJmhlaWdodCk7DQotICAgIENhbGxGdW5jKEdkaXBHZXRJbWFnZVdpZHRoKShwQml0bWFwLCAmd2lkdGgpOw0KLSAgICBQaXhlbEZvcm1hdCBwaXhlbF9mb3JtYXQ7DQotICAgIENhbGxGdW5jKEdkaXBHZXRJbWFnZVBpeGVsRm9ybWF0KShwQml0bWFwLCAmcGl4ZWxfZm9ybWF0KTsNCi0gICAgaW50IGluZm9fc2l6ZSA9IHNpemVvZihCSVRNQVBJTkZPSEVBREVSKTsNCi0gICAgaW50IGJwcCA9IDI0Ow0KLSAgICBpbnQgZGVzdF9waXhlbF9mb3JtYXQgPSBQaXhlbEZvcm1hdDI0YnBwUkdCOw0KLSAgICBpZiAocGl4ZWxfZm9ybWF0ID09IFBpeGVsRm9ybWF0MWJwcEluZGV4ZWQpIHsNCi0gICAgICAgIGluZm9fc2l6ZSArPSA4Ow0KLSAgICAgICAgYnBwID0gMTsNCi0gICAgICAgIGRlc3RfcGl4ZWxfZm9ybWF0ID0gUGl4ZWxGb3JtYXQxYnBwSW5kZXhlZDsNCi0gICAgfSBlbHNlIGlmIChwaXhlbF9mb3JtYXQgPT0gUGl4ZWxGb3JtYXQ4YnBwSW5kZXhlZCkgew0KLSAgICAgICAgaW5mb19zaXplICs9IDEwMjQ7DQotICAgICAgICBicHAgPSA4Ow0KLSAgICAgICAgZGVzdF9waXhlbF9mb3JtYXQgPSBQaXhlbEZvcm1hdDhicHBJbmRleGVkOw0KLSAgICB9IGVsc2UgaWYgKHBpeGVsX2Zvcm1hdCA9PSBQaXhlbEZvcm1hdDMyYnBwQVJHQikgew0KLSAgICAgICAgYnBwID0gMzI7DQotICAgICAgICBkZXN0X3BpeGVsX2Zvcm1hdCA9IFBpeGVsRm9ybWF0MzJicHBBUkdCOw0KLSAgICB9DQotICAgIExQQllURSBidWYgPSBGWF9BbGxvYyhCWVRFLCBpbmZvX3NpemUpOw0KLSAgICBpZiAoIWJ1Zikgew0KLSAgICAgICAgaWYgKHBTdHJlYW0pIHsNCi0gICAgICAgICAgICBwU3RyZWFtLT5SZWxlYXNlKCk7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBCSVRNQVBJTkZPSEVBREVSKiBwYm1paCA9IChCSVRNQVBJTkZPSEVBREVSKilidWY7DQotICAgIEZYU1lTX21lbXNldDMyKGJ1ZiwgMCwgaW5mb19zaXplKTsNCi0gICAgcGJtaWgtPmJpQml0Q291bnQgPSBicHA7DQotICAgIHBibWloLT5iaUNvbXByZXNzaW9uID0gQklfUkdCOw0KLSAgICBwYm1paC0+YmlIZWlnaHQgPSAtKGludCloZWlnaHQ7DQotICAgIHBibWloLT5iaVBsYW5lcyA9IDE7DQotICAgIHBibWloLT5iaVdpZHRoID0gd2lkdGg7DQotICAgIFJlY3QgcmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsNCi0gICAgQml0bWFwRGF0YSogcEJpdG1hcERhdGEgPSBGWF9BbGxvYyhCaXRtYXBEYXRhLCAxKTsNCi0gICAgaWYgKCFwQml0bWFwRGF0YSkgew0KLSAgICAgICAgaWYgKHBTdHJlYW0pIHsNCi0gICAgICAgICAgICBwU3RyZWFtLT5SZWxlYXNlKCk7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBDYWxsRnVuYyhHZGlwQml0bWFwTG9ja0JpdHMpKHBCaXRtYXAsICZyZWN0LCBJbWFnZUxvY2tNb2RlUmVhZCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X3BpeGVsX2Zvcm1hdCwgcEJpdG1hcERhdGEpOw0KLSAgICBpZiAocGl4ZWxfZm9ybWF0ID09IFBpeGVsRm9ybWF0MWJwcEluZGV4ZWQgfHwgcGl4ZWxfZm9ybWF0ID09IFBpeGVsRm9ybWF0OGJwcEluZGV4ZWQpIHsNCi0gICAgICAgIERXT1JEKiBwcGFsID0gKERXT1JEKikoYnVmICsgc2l6ZW9mKEJJVE1BUElORk9IRUFERVIpKTsNCi0gICAgICAgIHN0cnVjdCB7DQotICAgICAgICAgICAgVUlOVCBmbGFnczsNCi0gICAgICAgICAgICBVSU5UIENvdW50Ow0KLSAgICAgICAgICAgIERXT1JEIEVudHJpZXNbMjU2XTsNCi0gICAgICAgIH0gcGFsOw0KLSAgICAgICAgaW50IHNpemUgPSAwOw0KLSAgICAgICAgQ2FsbEZ1bmMoR2RpcEdldEltYWdlUGFsZXR0ZVNpemUpKHBCaXRtYXAsICZzaXplKTsNCi0gICAgICAgIENhbGxGdW5jKEdkaXBHZXRJbWFnZVBhbGV0dGUpKHBCaXRtYXAsIChDb2xvclBhbGV0dGUqKSZwYWwsIHNpemUpOw0KLSAgICAgICAgaW50IGVudHJpZXMgPSBwaXhlbF9mb3JtYXQgPT0gUGl4ZWxGb3JtYXQxYnBwSW5kZXhlZCA/IDIgOiAyNTY7DQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXM7IGkgKyspIHsNCi0gICAgICAgICAgICBwcGFsW2ldID0gcGFsLkVudHJpZXNbaV0gJiAweDAwZmZmZmZmOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIFBSRVZJRVczX0RJQklUTUFQKiBwSW5mbyA9IEZYX0FsbG9jKFBSRVZJRVczX0RJQklUTUFQLCAxKTsNCi0gICAgaWYgKCFwSW5mbykgew0KLSAgICAgICAgaWYgKHBTdHJlYW0pIHsNCi0gICAgICAgICAgICBwU3RyZWFtLT5SZWxlYXNlKCk7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBwSW5mby0+cGJtaSA9IChCSVRNQVBJTkZPKilidWY7DQotICAgIHBJbmZvLT5wU2NhbjAgPSAoTFBCWVRFKXBCaXRtYXBEYXRhLT5TY2FuMDsNCi0gICAgcEluZm8tPlN0cmlkZSA9IHBCaXRtYXBEYXRhLT5TdHJpZGU7DQotICAgIHBJbmZvLT5wQml0bWFwID0gcEJpdG1hcDsNCi0gICAgcEluZm8tPnBCaXRtYXBEYXRhID0gcEJpdG1hcERhdGE7DQotICAgIHBJbmZvLT5wU3RyZWFtID0gcFN0cmVhbTsNCi0gICAgcmV0dXJuIHBJbmZvOw0KLX0NCi1zdGF0aWMgdm9pZCBGcmVlRElCaXRtYXAoUFJFVklFVzNfRElCSVRNQVAqIHBJbmZvKQ0KLXsNCi0gICAgQ0dkaXBsdXNFeHQmIEdkaXBsdXNFeHQgPSAoKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPm1fR2RpcGx1c0V4dDsNCi0gICAgQ2FsbEZ1bmMoR2RpcEJpdG1hcFVubG9ja0JpdHMpKHBJbmZvLT5wQml0bWFwLCBwSW5mby0+cEJpdG1hcERhdGEpOw0KLSAgICBDYWxsRnVuYyhHZGlwRGlzcG9zZUltYWdlKShwSW5mby0+cEJpdG1hcCk7DQotICAgIEZYX0ZyZWUocEluZm8tPnBCaXRtYXBEYXRhKTsNCi0gICAgRlhfRnJlZSgoTFBCWVRFKXBJbmZvLT5wYm1pKTsNCi0gICAgaWYgKHBJbmZvLT5wU3RyZWFtKSB7DQotICAgICAgICBwSW5mby0+cFN0cmVhbS0+UmVsZWFzZSgpOw0KLSAgICB9DQotICAgIEZYX0ZyZWUocEluZm8pOw0KLX0NCi1DRlhfRElCaXRtYXAqIF9GWF9XaW5kb3dzRElCX0xvYWRGcm9tQnVmKEJJVE1BUElORk8qIHBibWksIExQVk9JRCBwRGF0YSwgRlhfQk9PTCBiQWxwaGEpOw0KLUNGWF9ESUJpdG1hcCogQ0dkaXBsdXNFeHQ6OkxvYWRESUJpdG1hcChXSU5ESUJfT3Blbl9BcmdzXyBhcmdzKQ0KLXsNCi0gICAgUFJFVklFVzNfRElCSVRNQVAqIHBJbmZvID0gOjpMb2FkRElCaXRtYXAoYXJncyk7DQotICAgIGlmIChwSW5mbyA9PSBOVUxMKSB7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpbnQgaGVpZ2h0ID0gYWJzKHBJbmZvLT5wYm1pLT5ibWlIZWFkZXIuYmlIZWlnaHQpOw0KLSAgICBpbnQgd2lkdGggPSBwSW5mby0+cGJtaS0+Ym1pSGVhZGVyLmJpV2lkdGg7DQotICAgIGludCBkZXN0X3BpdGNoID0gKHdpZHRoICogcEluZm8tPnBibWktPmJtaUhlYWRlci5iaUJpdENvdW50ICsgMzEpIC8gMzIgKiA0Ow0KLSAgICBMUEJZVEUgcERhdGEgPSBGWF9BbGxvYyhCWVRFLCBkZXN0X3BpdGNoICogaGVpZ2h0KTsNCi0gICAgaWYgKHBEYXRhID09IE5VTEwpIHsNCi0gICAgICAgIEZyZWVESUJpdG1hcChwSW5mbyk7DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBpZiAoZGVzdF9waXRjaCA9PSBwSW5mby0+U3RyaWRlKSB7DQotICAgICAgICBGWFNZU19tZW1jcHkzMihwRGF0YSwgcEluZm8tPnBTY2FuMCwgZGVzdF9waXRjaCAqIGhlaWdodCk7DQotICAgIH0gZWxzZSBmb3IgKGludCBpID0gMDsgaSA8IGhlaWdodDsgaSArKykgew0KLSAgICAgICAgICAgIEZYU1lTX21lbWNweTMyKHBEYXRhICsgZGVzdF9waXRjaCAqIGksIHBJbmZvLT5wU2NhbjAgKyBwSW5mby0+U3RyaWRlICogaSwgZGVzdF9waXRjaCk7DQotICAgICAgICB9DQotICAgIENGWF9ESUJpdG1hcCogcERJQml0bWFwID0gX0ZYX1dpbmRvd3NESUJfTG9hZEZyb21CdWYocEluZm8tPnBibWksIHBEYXRhLCBwSW5mby0+cGJtaS0+Ym1pSGVhZGVyLmJpQml0Q291bnQgPT0gMzIpOw0KLSAgICBGWF9GcmVlKHBEYXRhKTsNCi0gICAgRnJlZURJQml0bWFwKHBJbmZvKTsNCi0gICAgcmV0dXJuIHBESUJpdG1hcDsNCi19DQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZS5oIgorI2lmIF9GWF9PU18gPT0gX0ZYX1dJTjMyX0RFU0tUT1BfIHx8IF9GWF9PU18gPT0gX0ZYX1dJTjY0XworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2Vfd2luMzIuaCIKKyNpbmNsdWRlICJ3aW4zMl9pbnQuaCIKKyNpbmNsdWRlICIuLi9NaWNyb3NvZnQgU0RLL2luY2x1ZGUvR2RpUGx1cy5oIgordXNpbmcgbmFtZXNwYWNlIEdkaXBsdXM7Cit1c2luZyBuYW1lc3BhY2UgR2RpcGx1czo6RGxsRXhwb3J0czsKKyNkZWZpbmUgR2RpRmlsbFR5cGUyR2RpcChmaWxsX3R5cGUpIChmaWxsX3R5cGUgPT0gQUxURVJOQVRFID8gRmlsbE1vZGVBbHRlcm5hdGUgOiBGaWxsTW9kZVdpbmRpbmcpCitzdGF0aWMgQ29tYmluZU1vZGUgR2RpQ29tYmluZU1vZGUyR2RpcChpbnQgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgY2FzZSBSR05fQU5EOgorICAgICAgICAgICAgcmV0dXJuIENvbWJpbmVNb2RlSW50ZXJzZWN0OworICAgIH0KKyAgICByZXR1cm4gQ29tYmluZU1vZGVJbnRlcnNlY3Q7Cit9CitlbnVtIHsKKyAgICBGdW5jSWRfR2RpcENyZWF0ZVBhdGgyLAorICAgIEZ1bmNJZF9HZGlwU2V0UGVuRGFzaFN0eWxlLAorICAgIEZ1bmNJZF9HZGlwU2V0UGVuRGFzaEFycmF5LAorICAgIEZ1bmNJZF9HZGlwU2V0UGVuRGFzaENhcDE5NzgxOSwKKyAgICBGdW5jSWRfR2RpcFNldFBlbkxpbmVKb2luLAorICAgIEZ1bmNJZF9HZGlwU2V0UGVuV2lkdGgsCisgICAgRnVuY0lkX0dkaXBDcmVhdGVGcm9tSERDLAorICAgIEZ1bmNJZF9HZGlwU2V0UGFnZVVuaXQsCisgICAgRnVuY0lkX0dkaXBTZXRTbW9vdGhpbmdNb2RlLAorICAgIEZ1bmNJZF9HZGlwQ3JlYXRlU29saWRGaWxsLAorICAgIEZ1bmNJZF9HZGlwRmlsbFBhdGgsCisgICAgRnVuY0lkX0dkaXBEZWxldGVCcnVzaCwKKyAgICBGdW5jSWRfR2RpcENyZWF0ZVBlbjEsCisgICAgRnVuY0lkX0dkaXBTZXRQZW5NaXRlckxpbWl0LAorICAgIEZ1bmNJZF9HZGlwRHJhd1BhdGgsCisgICAgRnVuY0lkX0dkaXBEZWxldGVQZW4sCisgICAgRnVuY0lkX0dkaXBEZWxldGVQYXRoLAorICAgIEZ1bmNJZF9HZGlwRGVsZXRlR3JhcGhpY3MsCisgICAgRnVuY0lkX0dkaXBDcmVhdGVCaXRtYXBGcm9tRmlsZUlDTSwKKyAgICBGdW5jSWRfR2RpcENyZWF0ZUJpdG1hcEZyb21TdHJlYW1JQ00sCisgICAgRnVuY0lkX0dkaXBHZXRJbWFnZUhlaWdodCwKKyAgICBGdW5jSWRfR2RpcEdldEltYWdlV2lkdGgsCisgICAgRnVuY0lkX0dkaXBHZXRJbWFnZVBpeGVsRm9ybWF0LAorICAgIEZ1bmNJZF9HZGlwQml0bWFwTG9ja0JpdHMsCisgICAgRnVuY0lkX0dkaXBHZXRJbWFnZVBhbGV0dGVTaXplLAorICAgIEZ1bmNJZF9HZGlwR2V0SW1hZ2VQYWxldHRlLAorICAgIEZ1bmNJZF9HZGlwQml0bWFwVW5sb2NrQml0cywKKyAgICBGdW5jSWRfR2RpcERpc3Bvc2VJbWFnZSwKKyAgICBGdW5jSWRfR2RpcEZpbGxSZWN0YW5nbGUsCisgICAgRnVuY0lkX0dkaXBDcmVhdGVCaXRtYXBGcm9tU2NhbjAsCisgICAgRnVuY0lkX0dkaXBTZXRJbWFnZVBhbGV0dGUsCisgICAgRnVuY0lkX0dkaXBTZXRJbnRlcnBvbGF0aW9uTW9kZSwKKyAgICBGdW5jSWRfR2RpcERyYXdJbWFnZVBvaW50c0ksCisgICAgRnVuY0lkX0dkaXBDcmVhdGVCaXRtYXBGcm9tR2RpRGliLAorICAgIEZ1bmNJZF9HZGlwbHVzU3RhcnR1cCwKKyAgICBGdW5jSWRfR2RpcERyYXdMaW5lSSwKKyAgICBGdW5jSWRfR2RpcFJlc2V0Q2xpcCwKKyAgICBGdW5jSWRfR2RpcENyZWF0ZVBhdGgsCisgICAgRnVuY0lkX0dkaXBBZGRQYXRoUGF0aCwKKyAgICBGdW5jSWRfR2RpcFNldFBhdGhGaWxsTW9kZSwKKyAgICBGdW5jSWRfR2RpcFNldENsaXBQYXRoLAorICAgIEZ1bmNJZF9HZGlwR2V0Q2xpcCwKKyAgICBGdW5jSWRfR2RpcENyZWF0ZVJlZ2lvbiwKKyAgICBGdW5jSWRfR2RpcEdldENsaXBCb3VuZHNJLAorICAgIEZ1bmNJZF9HZGlwU2V0Q2xpcFJlZ2lvbiwKKyAgICBGdW5jSWRfR2RpcFdpZGVuUGF0aCwKKyAgICBGdW5jSWRfR2RpcEFkZFBhdGhMaW5lLAorICAgIEZ1bmNJZF9HZGlwQWRkUGF0aFJlY3RhbmdsZSwKKyAgICBGdW5jSWRfR2RpcERlbGV0ZVJlZ2lvbiwKKyAgICBGdW5jSWRfR2RpcEdldERDLAorICAgIEZ1bmNJZF9HZGlwUmVsZWFzZURDLAorICAgIEZ1bmNJZF9HZGlwU2V0UGVuTGluZUNhcDE5NzgxOSwKKyAgICBGdW5jSWRfR2RpcFNldFBlbkRhc2hPZmZzZXQsCisgICAgRnVuY0lkX0dkaXBSZXNldFBhdGgsCisgICAgRnVuY0lkX0dkaXBDcmVhdGVSZWdpb25QYXRoLAorICAgIEZ1bmNJZF9HZGlwQ3JlYXRlRm9udCwKKyAgICBGdW5jSWRfR2RpcEdldEZvbnRTaXplLAorICAgIEZ1bmNJZF9HZGlwQ3JlYXRlRm9udEZhbWlseUZyb21OYW1lLAorICAgIEZ1bmNJZF9HZGlwU2V0VGV4dFJlbmRlcmluZ0hpbnQsCisgICAgRnVuY0lkX0dkaXBEcmF3RHJpdmVyU3RyaW5nLAorICAgIEZ1bmNJZF9HZGlwQ3JlYXRlTWF0cml4MiwKKyAgICBGdW5jSWRfR2RpcERlbGV0ZU1hdHJpeCwKKyAgICBGdW5jSWRfR2RpcFNldFdvcmxkVHJhbnNmb3JtLAorICAgIEZ1bmNJZF9HZGlwUmVzZXRXb3JsZFRyYW5zZm9ybSwKKyAgICBGdW5jSWRfR2RpcERlbGV0ZUZvbnRGYW1pbHksCisgICAgRnVuY0lkX0dkaXBEZWxldGVGb250LAorICAgIEZ1bmNJZF9HZGlwTmV3UHJpdmF0ZUZvbnRDb2xsZWN0aW9uLAorICAgIEZ1bmNJZF9HZGlwRGVsZXRlUHJpdmF0ZUZvbnRDb2xsZWN0aW9uLAorICAgIEZ1bmNJZF9HZGlwUHJpdmF0ZUFkZE1lbW9yeUZvbnQsCisgICAgRnVuY0lkX0dkaXBHZXRGb250Q29sbGVjdGlvbkZhbWlseUxpc3QsCisgICAgRnVuY0lkX0dkaXBHZXRGb250Q29sbGVjdGlvbkZhbWlseUNvdW50LAorICAgIEZ1bmNJZF9HZGlwU2V0VGV4dENvbnRyYXN0LAorICAgIEZ1bmNJZF9HZGlwU2V0UGl4ZWxPZmZzZXRNb2RlLAorICAgIEZ1bmNJZF9HZGlwR2V0SW1hZ2VHcmFwaGljc0NvbnRleHQsCisgICAgRnVuY0lkX0dkaXBEcmF3SW1hZ2VJLAorICAgIEZ1bmNJZF9HZGlwRHJhd0ltYWdlUmVjdEksCisgICAgRnVuY0lkX0dkaXBEcmF3U3RyaW5nLAorICAgIEZ1bmNJZF9HZGlwU2V0UGVuVHJhbnNmb3JtLAorfTsKK3N0YXRpYyBMUENTVFIgZ19HZGlwRnVuY05hbWVzW10gPSB7CisgICAgIkdkaXBDcmVhdGVQYXRoMiIsCisgICAgIkdkaXBTZXRQZW5EYXNoU3R5bGUiLAorICAgICJHZGlwU2V0UGVuRGFzaEFycmF5IiwKKyAgICAiR2RpcFNldFBlbkRhc2hDYXAxOTc4MTkiLAorICAgICJHZGlwU2V0UGVuTGluZUpvaW4iLAorICAgICJHZGlwU2V0UGVuV2lkdGgiLAorICAgICJHZGlwQ3JlYXRlRnJvbUhEQyIsCisgICAgIkdkaXBTZXRQYWdlVW5pdCIsCisgICAgIkdkaXBTZXRTbW9vdGhpbmdNb2RlIiwKKyAgICAiR2RpcENyZWF0ZVNvbGlkRmlsbCIsCisgICAgIkdkaXBGaWxsUGF0aCIsCisgICAgIkdkaXBEZWxldGVCcnVzaCIsCisgICAgIkdkaXBDcmVhdGVQZW4xIiwKKyAgICAiR2RpcFNldFBlbk1pdGVyTGltaXQiLAorICAgICJHZGlwRHJhd1BhdGgiLAorICAgICJHZGlwRGVsZXRlUGVuIiwKKyAgICAiR2RpcERlbGV0ZVBhdGgiLAorICAgICJHZGlwRGVsZXRlR3JhcGhpY3MiLAorICAgICJHZGlwQ3JlYXRlQml0bWFwRnJvbUZpbGVJQ00iLAorICAgICJHZGlwQ3JlYXRlQml0bWFwRnJvbVN0cmVhbUlDTSIsCisgICAgIkdkaXBHZXRJbWFnZUhlaWdodCIsCisgICAgIkdkaXBHZXRJbWFnZVdpZHRoIiwKKyAgICAiR2RpcEdldEltYWdlUGl4ZWxGb3JtYXQiLAorICAgICJHZGlwQml0bWFwTG9ja0JpdHMiLAorICAgICJHZGlwR2V0SW1hZ2VQYWxldHRlU2l6ZSIsCisgICAgIkdkaXBHZXRJbWFnZVBhbGV0dGUiLAorICAgICJHZGlwQml0bWFwVW5sb2NrQml0cyIsCisgICAgIkdkaXBEaXNwb3NlSW1hZ2UiLAorICAgICJHZGlwRmlsbFJlY3RhbmdsZSIsCisgICAgIkdkaXBDcmVhdGVCaXRtYXBGcm9tU2NhbjAiLAorICAgICJHZGlwU2V0SW1hZ2VQYWxldHRlIiwKKyAgICAiR2RpcFNldEludGVycG9sYXRpb25Nb2RlIiwKKyAgICAiR2RpcERyYXdJbWFnZVBvaW50c0kiLAorICAgICJHZGlwQ3JlYXRlQml0bWFwRnJvbUdkaURpYiIsCisgICAgIkdkaXBsdXNTdGFydHVwIiwKKyAgICAiR2RpcERyYXdMaW5lSSIsCisgICAgIkdkaXBSZXNldENsaXAiLAorICAgICJHZGlwQ3JlYXRlUGF0aCIsCisgICAgIkdkaXBBZGRQYXRoUGF0aCIsCisgICAgIkdkaXBTZXRQYXRoRmlsbE1vZGUiLAorICAgICJHZGlwU2V0Q2xpcFBhdGgiLAorICAgICJHZGlwR2V0Q2xpcCIsCisgICAgIkdkaXBDcmVhdGVSZWdpb24iLAorICAgICJHZGlwR2V0Q2xpcEJvdW5kc0kiLAorICAgICJHZGlwU2V0Q2xpcFJlZ2lvbiIsCisgICAgIkdkaXBXaWRlblBhdGgiLAorICAgICJHZGlwQWRkUGF0aExpbmUiLAorICAgICJHZGlwQWRkUGF0aFJlY3RhbmdsZSIsCisgICAgIkdkaXBEZWxldGVSZWdpb24iLAorICAgICJHZGlwR2V0REMiLAorICAgICJHZGlwUmVsZWFzZURDIiwKKyAgICAiR2RpcFNldFBlbkxpbmVDYXAxOTc4MTkiLAorICAgICJHZGlwU2V0UGVuRGFzaE9mZnNldCIsCisgICAgIkdkaXBSZXNldFBhdGgiLAorICAgICJHZGlwQ3JlYXRlUmVnaW9uUGF0aCIsCisgICAgIkdkaXBDcmVhdGVGb250IiwKKyAgICAiR2RpcEdldEZvbnRTaXplIiwKKyAgICAiR2RpcENyZWF0ZUZvbnRGYW1pbHlGcm9tTmFtZSIsCisgICAgIkdkaXBTZXRUZXh0UmVuZGVyaW5nSGludCIsCisgICAgIkdkaXBEcmF3RHJpdmVyU3RyaW5nIiwKKyAgICAiR2RpcENyZWF0ZU1hdHJpeDIiLAorICAgICJHZGlwRGVsZXRlTWF0cml4IiwKKyAgICAiR2RpcFNldFdvcmxkVHJhbnNmb3JtIiwKKyAgICAiR2RpcFJlc2V0V29ybGRUcmFuc2Zvcm0iLAorICAgICJHZGlwRGVsZXRlRm9udEZhbWlseSIsCisgICAgIkdkaXBEZWxldGVGb250IiwKKyAgICAiR2RpcE5ld1ByaXZhdGVGb250Q29sbGVjdGlvbiIsCisgICAgIkdkaXBEZWxldGVQcml2YXRlRm9udENvbGxlY3Rpb24iLAorICAgICJHZGlwUHJpdmF0ZUFkZE1lbW9yeUZvbnQiLAorICAgICJHZGlwR2V0Rm9udENvbGxlY3Rpb25GYW1pbHlMaXN0IiwKKyAgICAiR2RpcEdldEZvbnRDb2xsZWN0aW9uRmFtaWx5Q291bnQiLAorICAgICJHZGlwU2V0VGV4dENvbnRyYXN0IiwKKyAgICAiR2RpcFNldFBpeGVsT2Zmc2V0TW9kZSIsCisgICAgIkdkaXBHZXRJbWFnZUdyYXBoaWNzQ29udGV4dCIsCisgICAgIkdkaXBEcmF3SW1hZ2VJIiwKKyAgICAiR2RpcERyYXdJbWFnZVJlY3RJIiwKKyAgICAiR2RpcERyYXdTdHJpbmciLAorICAgICJHZGlwU2V0UGVuVHJhbnNmb3JtIiwKK307Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwQ3JlYXRlUGF0aDIpKEdESVBDT05TVCBHcFBvaW50RiosIEdESVBDT05TVCBCWVRFKiwgSU5ULCBHcEZpbGxNb2RlLCBHcFBhdGggKipwYXRoKTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBTZXRQZW5EYXNoU3R5bGUpKEdwUGVuICpwZW4sIEdwRGFzaFN0eWxlIGRhc2hzdHlsZSk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwU2V0UGVuRGFzaEFycmF5KShHcFBlbiAqcGVuLCBHRElQQ09OU1QgUkVBTCAqZGFzaCwgSU5UIGNvdW50KTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBTZXRQZW5EYXNoQ2FwMTk3ODE5KShHcFBlbiAqcGVuLCBHcERhc2hDYXAgZGFzaENhcCk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwU2V0UGVuTGluZUpvaW4pKEdwUGVuICpwZW4sIEdwTGluZUpvaW4gbGluZUpvaW4pOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcFNldFBlbldpZHRoKShHcFBlbiAqcGVuLCBSRUFMIHdpZHRoKTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBDcmVhdGVGcm9tSERDKShIREMgaGRjLCBHcEdyYXBoaWNzICoqZ3JhcGhpY3MpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcFNldFBhZ2VVbml0KShHcEdyYXBoaWNzICpncmFwaGljcywgR3BVbml0IHVuaXQpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcFNldFNtb290aGluZ01vZGUpKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcENyZWF0ZVNvbGlkRmlsbCkoQVJHQiBjb2xvciwgR3BTb2xpZEZpbGwgKipicnVzaCk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwRmlsbFBhdGgpKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEJydXNoICpicnVzaCwgR3BQYXRoICpwYXRoKTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBEZWxldGVCcnVzaCkoR3BCcnVzaCAqYnJ1c2gpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcENyZWF0ZVBlbjEpKEFSR0IgY29sb3IsIFJFQUwgd2lkdGgsIEdwVW5pdCB1bml0LCBHcFBlbiAqKnBlbik7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwU2V0UGVuTWl0ZXJMaW1pdCkoR3BQZW4gKnBlbiwgUkVBTCBtaXRlckxpbWl0KTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBEcmF3UGF0aCkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sIEdwUGF0aCAqcGF0aCk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwRGVsZXRlUGVuKShHcFBlbiAqcGVuKTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBEZWxldGVQYXRoKShHcFBhdGgqIHBhdGgpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcERlbGV0ZUdyYXBoaWNzKShHcEdyYXBoaWNzICpncmFwaGljcyk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwQ3JlYXRlQml0bWFwRnJvbUZpbGVJQ00pKEdESVBDT05TVCBXQ0hBUiogZmlsZW5hbWUsIEdwQml0bWFwICoqYml0bWFwKTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBDcmVhdGVCaXRtYXBGcm9tU3RyZWFtSUNNKShJU3RyZWFtKiBzdHJlYW0sIEdwQml0bWFwICoqYml0bWFwKTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBHZXRJbWFnZVdpZHRoKShHcEltYWdlICppbWFnZSwgVUlOVCAqd2lkdGgpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcEdldEltYWdlSGVpZ2h0KShHcEltYWdlICppbWFnZSwgVUlOVCAqaGVpZ2h0KTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBHZXRJbWFnZVBpeGVsRm9ybWF0KShHcEltYWdlICppbWFnZSwgUGl4ZWxGb3JtYXQgKmZvcm1hdCk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwQml0bWFwTG9ja0JpdHMpKEdwQml0bWFwKiBiaXRtYXAsIEdESVBDT05TVCBHcFJlY3QqIHJlY3QsIFVJTlQgZmxhZ3MsIFBpeGVsRm9ybWF0IGZvcm1hdCwgQml0bWFwRGF0YSogbG9ja2VkQml0bWFwRGF0YSk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwR2V0SW1hZ2VQYWxldHRlKShHcEltYWdlICppbWFnZSwgQ29sb3JQYWxldHRlICpwYWxldHRlLCBJTlQgc2l6ZSk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwR2V0SW1hZ2VQYWxldHRlU2l6ZSkoR3BJbWFnZSAqaW1hZ2UsIElOVCAqc2l6ZSk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwQml0bWFwVW5sb2NrQml0cykoR3BCaXRtYXAqIGJpdG1hcCwgQml0bWFwRGF0YSogbG9ja2VkQml0bWFwRGF0YSk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwRGlzcG9zZUltYWdlKShHcEltYWdlICppbWFnZSk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwRmlsbFJlY3RhbmdsZSkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwQnJ1c2ggKmJydXNoLCBSRUFMIHgsIFJFQUwgeSwgUkVBTCB3aWR0aCwgUkVBTCBoZWlnaHQpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcENyZWF0ZUJpdG1hcEZyb21TY2FuMCkoSU5UIHdpZHRoLCBJTlQgaGVpZ2h0LCBJTlQgc3RyaWRlLCBQaXhlbEZvcm1hdCBmb3JtYXQsIEJZVEUqIHNjYW4wLCBHcEJpdG1hcCoqIGJpdG1hcCk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwU2V0SW1hZ2VQYWxldHRlKShHcEltYWdlICppbWFnZSwgR0RJUENPTlNUIENvbG9yUGFsZXR0ZSAqcGFsZXR0ZSk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwU2V0SW50ZXJwb2xhdGlvbk1vZGUpKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBJbnRlcnBvbGF0aW9uTW9kZSBpbnRlcnBvbGF0aW9uTW9kZSk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwRHJhd0ltYWdlUG9pbnRzSSkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwSW1hZ2UgKmltYWdlLCBHRElQQ09OU1QgR3BQb2ludCAqZHN0cG9pbnRzLCBJTlQgY291bnQpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcENyZWF0ZUJpdG1hcEZyb21HZGlEaWIpKEdESVBDT05TVCBCSVRNQVBJTkZPKiBnZGlCaXRtYXBJbmZvLCBWT0lEKiBnZGlCaXRtYXBEYXRhLCBHcEJpdG1hcCoqIGJpdG1hcCk7Cit0eXBlZGVmIFN0YXR1cyAoV0lOQVBJICpGdW5jVHlwZV9HZGlwbHVzU3RhcnR1cCkoT1VUIEZYX1VJTlRQVFIgKnRva2VuLCBjb25zdCBHZGlwbHVzU3RhcnR1cElucHV0ICppbnB1dCwgT1VUIEdkaXBsdXNTdGFydHVwT3V0cHV0ICpvdXRwdXQpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcERyYXdMaW5lSSkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUGVuICpwZW4sIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5Mik7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwUmVzZXRDbGlwKShHcEdyYXBoaWNzICpncmFwaGljcyk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwQ3JlYXRlUGF0aCkoR3BGaWxsTW9kZSBicnVzaE1vZGUsIEdwUGF0aCAqKnBhdGgpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcEFkZFBhdGhQYXRoKShHcFBhdGggKnBhdGgsIEdESVBDT05TVCBHcFBhdGgqIGFkZGluZ1BhdGgsIEJPT0wgY29ubmVjdCk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwU2V0UGF0aEZpbGxNb2RlKShHcFBhdGggKnBhdGgsIEdwRmlsbE1vZGUgZmlsbG1vZGUpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcFNldENsaXBQYXRoKShHcEdyYXBoaWNzICpncmFwaGljcywgR3BQYXRoICpwYXRoLCBDb21iaW5lTW9kZSBjb21iaW5lTW9kZSk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwR2V0Q2xpcCkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwUmVnaW9uICpyZWdpb24pOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcENyZWF0ZVJlZ2lvbikoR3BSZWdpb24gKipyZWdpb24pOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcEdldENsaXBCb3VuZHNJKShHcEdyYXBoaWNzICpncmFwaGljcywgR3BSZWN0ICpyZWN0KTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBTZXRDbGlwUmVnaW9uKShHcEdyYXBoaWNzICpncmFwaGljcywgR3BSZWdpb24gKnJlZ2lvbiwgQ29tYmluZU1vZGUgY29tYmluZU1vZGUpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcFdpZGVuUGF0aCkoR3BQYXRoICpuYXRpdmVQYXRoLCBHcFBlbiAqcGVuLCBHcE1hdHJpeCAqbWF0cml4LCBSRUFMIGZsYXRuZXNzKTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBBZGRQYXRoTGluZSkoR3BQYXRoICpwYXRoLCBSRUFMIHgxLCBSRUFMIHkxLCBSRUFMIHgyLCBSRUFMIHkyKTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBBZGRQYXRoUmVjdGFuZ2xlKShHcFBhdGggKnBhdGgsIFJFQUwgeCwgUkVBTCB5LCBSRUFMIHdpZHRoLCBSRUFMIGhlaWdodCk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwRGVsZXRlUmVnaW9uKShHcFJlZ2lvbiAqcmVnaW9uKTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBHZXREQykoR3BHcmFwaGljcyogZ3JhcGhpY3MsIEhEQyAqIGhkYyk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwUmVsZWFzZURDKShHcEdyYXBoaWNzKiBncmFwaGljcywgSERDIGhkYyk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwU2V0UGVuTGluZUNhcDE5NzgxOSkoR3BQZW4gKnBlbiwgR3BMaW5lQ2FwIHN0YXJ0Q2FwLCBHcExpbmVDYXAgZW5kQ2FwLCBHcERhc2hDYXAgZGFzaENhcCk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwU2V0UGVuRGFzaE9mZnNldCkoR3BQZW4gKnBlbiwgUkVBTCBvZmZzZXQpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcFJlc2V0UGF0aCkoR3BQYXRoICpwYXRoKTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBDcmVhdGVSZWdpb25QYXRoKShHcFBhdGggKnBhdGgsIEdwUmVnaW9uICoqcmVnaW9uKTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBDcmVhdGVGb250KShHRElQQ09OU1QgR3BGb250RmFtaWx5ICpmb250RmFtaWx5LCBSRUFMIGVtU2l6ZSwgSU5UIHN0eWxlLCBVbml0IHVuaXQsIEdwRm9udCAqKmZvbnQpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcEdldEZvbnRTaXplKShHcEZvbnQgKmZvbnQsIFJFQUwgKnNpemUpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcENyZWF0ZUZvbnRGYW1pbHlGcm9tTmFtZSkoR0RJUENPTlNUIFdDSEFSICpuYW1lLCBHcEZvbnRDb2xsZWN0aW9uICpmb250Q29sbGVjdGlvbiwgR3BGb250RmFtaWx5ICoqRm9udEZhbWlseSk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwU2V0VGV4dFJlbmRlcmluZ0hpbnQpKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBUZXh0UmVuZGVyaW5nSGludCBtb2RlKTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBEcmF3RHJpdmVyU3RyaW5nKShHcEdyYXBoaWNzICpncmFwaGljcywgR0RJUENPTlNUIFVJTlQxNiAqdGV4dCwgSU5UIGxlbmd0aCwgR0RJUENPTlNUIEdwRm9udCAqZm9udCwgR0RJUENPTlNUIEdwQnJ1c2ggKmJydXNoLCBHRElQQ09OU1QgUG9pbnRGICpwb3NpdGlvbnMsIElOVCBmbGFncywgR0RJUENPTlNUIEdwTWF0cml4ICptYXRyaXgpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcENyZWF0ZU1hdHJpeDIpKFJFQUwgbTExLCBSRUFMIG0xMiwgUkVBTCBtMjEsIFJFQUwgbTIyLCBSRUFMIGR4LCBSRUFMIGR5LCBHcE1hdHJpeCAqKm1hdHJpeCk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwRGVsZXRlTWF0cml4KShHcE1hdHJpeCAqbWF0cml4KTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBTZXRXb3JsZFRyYW5zZm9ybSkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwTWF0cml4ICptYXRyaXgpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcFJlc2V0V29ybGRUcmFuc2Zvcm0pKEdwR3JhcGhpY3MgKmdyYXBoaWNzKTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBEZWxldGVGb250RmFtaWx5KShHcEZvbnRGYW1pbHkgKkZvbnRGYW1pbHkpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcERlbGV0ZUZvbnQpKEdwRm9udCogZm9udCk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwTmV3UHJpdmF0ZUZvbnRDb2xsZWN0aW9uKShHcEZvbnRDb2xsZWN0aW9uKiogZm9udENvbGxlY3Rpb24pOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcERlbGV0ZVByaXZhdGVGb250Q29sbGVjdGlvbikoR3BGb250Q29sbGVjdGlvbioqIGZvbnRDb2xsZWN0aW9uKTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBQcml2YXRlQWRkTWVtb3J5Rm9udCkoR3BGb250Q29sbGVjdGlvbiogZm9udENvbGxlY3Rpb24sIEdESVBDT05TVCB2b2lkKiBtZW1vcnksIElOVCBsZW5ndGgpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcEdldEZvbnRDb2xsZWN0aW9uRmFtaWx5TGlzdCkoR3BGb250Q29sbGVjdGlvbiogZm9udENvbGxlY3Rpb24sIElOVCBudW1Tb3VnaHQsIEdwRm9udEZhbWlseSogZ3BmYW1pbGllc1tdLCBJTlQqIG51bUZvdW5kKTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBHZXRGb250Q29sbGVjdGlvbkZhbWlseUNvdW50KShHcEZvbnRDb2xsZWN0aW9uKiBmb250Q29sbGVjdGlvbiwgSU5UKiBudW1Gb3VuZCk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwU2V0VGV4dENvbnRyYXN0KShHcEdyYXBoaWNzICpncmFwaGljcywgVUlOVCBjb250cmFzdCk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwU2V0UGl4ZWxPZmZzZXRNb2RlKShHcEdyYXBoaWNzKiBncmFwaGljcywgUGl4ZWxPZmZzZXRNb2RlIHBpeGVsT2Zmc2V0TW9kZSk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwR2V0SW1hZ2VHcmFwaGljc0NvbnRleHQpKEdwSW1hZ2UgKmltYWdlLCBHcEdyYXBoaWNzICoqZ3JhcGhpY3MpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcERyYXdJbWFnZUkpKEdwR3JhcGhpY3MgKmdyYXBoaWNzLCBHcEltYWdlICppbWFnZSwgSU5UIHgsIElOVCB5KTsKK3R5cGVkZWYgR3BTdGF0dXMgKFdJTkdESVBBUEkgKkZ1bmNUeXBlX0dkaXBEcmF3SW1hZ2VSZWN0SSkoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdwSW1hZ2UgKmltYWdlLCBJTlQgeCwgSU5UIHksIElOVCB3aWR0aCwgSU5UIGhlaWdodCk7Cit0eXBlZGVmIEdwU3RhdHVzIChXSU5HRElQQVBJICpGdW5jVHlwZV9HZGlwRHJhd1N0cmluZykoR3BHcmFwaGljcyAqZ3JhcGhpY3MsIEdESVBDT05TVCBXQ0hBUiAqc3RyaW5nLCBJTlQgbGVuZ3RoLCBHRElQQ09OU1QgR3BGb250ICpmb250LCBHRElQQ09OU1QgUmVjdEYgKmxheW91dFJlY3QsIEdESVBDT05TVCBHcFN0cmluZ0Zvcm1hdCAqc3RyaW5nRm9ybWF0LCBHRElQQ09OU1QgR3BCcnVzaCAqYnJ1c2gpOwordHlwZWRlZiBHcFN0YXR1cyAoV0lOR0RJUEFQSSAqRnVuY1R5cGVfR2RpcFNldFBlblRyYW5zZm9ybSkoR3BQZW4gKnBlbiwgR3BNYXRyaXggKm1hdHJpeCk7CisjZGVmaW5lIENhbGxGdW5jKGZ1bmNuYW1lKSAoKEZ1bmNUeXBlXyMjZnVuY25hbWUpR2RpcGx1c0V4dC5tX0Z1bmN0aW9uc1tGdW5jSWRfIyNmdW5jbmFtZV0pCit0eXBlZGVmIEhBTkRMRSAgIChfX3N0ZGNhbGwgKkZ1bmNUeXBlX0dkaUFkZEZvbnRNZW1SZXNvdXJjZUV4KShQVk9JRCBwYkZvbnQsIERXT1JEIGNiRm9udCwgUFZPSUQgcGR2LCBEV09SRCAqcGNGb250cyk7Cit0eXBlZGVmIEJPT0wgICAgIChfX3N0ZGNhbGwgKkZ1bmNUeXBlX0dkaVJlbW92ZUZvbnRNZW1SZXNvdXJjZUV4KShIQU5ETEUgaGFuZGxlKTsKK3ZvaWQqIENHZGlwbHVzRXh0OjpHZGlBZGRGb250TWVtUmVzb3VyY2VFeCh2b2lkICpwRm9udGRhdGEsIEZYX0RXT1JEIHNpemUsIHZvaWQqIHBkdiwgRlhfRFdPUkQqIG51bV9mYWNlKQoreworICAgIGlmIChtX3BHZGlBZGRGb250TWVtUmVzb3VyY2VFeCkgeworICAgICAgICByZXR1cm4gKChGdW5jVHlwZV9HZGlBZGRGb250TWVtUmVzb3VyY2VFeCltX3BHZGlBZGRGb250TWVtUmVzb3VyY2VFeCkoKFBWT0lEKXBGb250ZGF0YSwgKERXT1JEKXNpemUsIChQVk9JRClwZHYsIChEV09SRCopbnVtX2ZhY2UpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KK0ZYX0JPT0wgQ0dkaXBsdXNFeHQ6OkdkaVJlbW92ZUZvbnRNZW1SZXNvdXJjZUV4KHZvaWQqIGhhbmRsZSkKK3sKKyAgICBpZiAobV9wR2RpUmVtb3ZlRm9udE1lbVJlc291cnNlRXgpIHsKKyAgICAgICAgcmV0dXJuICgoRnVuY1R5cGVfR2RpUmVtb3ZlRm9udE1lbVJlc291cmNlRXgpbV9wR2RpUmVtb3ZlRm9udE1lbVJlc291cnNlRXgpKChIQU5ETEUpaGFuZGxlKTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorc3RhdGljIEdwQnJ1c2gqIF9HZGlwQ3JlYXRlQnJ1c2goRFdPUkQgYXJnYikKK3sKKyAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0OworICAgIEdwU29saWRGaWxsKiBzb2xpZEJydXNoID0gTlVMTDsKKyAgICBDYWxsRnVuYyhHZGlwQ3JlYXRlU29saWRGaWxsKSgoQVJHQilhcmdiLCAmc29saWRCcnVzaCk7CisgICAgcmV0dXJuIHNvbGlkQnJ1c2g7Cit9CitzdGF0aWMgQ0ZYX0RJQml0bWFwKiBfU3RyZXRjaE1vbm9Ub0dyYXkoaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfRElCaXRtYXAqIHBTb3VyY2UsIEZYX1JFQ1QqIHBDbGlwUmVjdCkKK3sKKyAgICBGWF9CT09MIGJGbGlwWCA9IGRlc3Rfd2lkdGggPCAwOworICAgIGlmIChiRmxpcFgpIHsKKyAgICAgICAgZGVzdF93aWR0aCA9IC1kZXN0X3dpZHRoOworICAgIH0KKyAgICBGWF9CT09MIGJGbGlwWSA9IGRlc3RfaGVpZ2h0IDwgMDsKKyAgICBpZiAoYkZsaXBZKSB7CisgICAgICAgIGRlc3RfaGVpZ2h0ID0gLWRlc3RfaGVpZ2h0OworICAgIH0KKyAgICBpbnQgcmVzdWx0X3dpZHRoID0gcENsaXBSZWN0LT5XaWR0aCgpOworICAgIGludCByZXN1bHRfaGVpZ2h0ID0gcENsaXBSZWN0LT5IZWlnaHQoKTsKKyAgICBpbnQgcmVzdWx0X3BpdGNoID0gKHJlc3VsdF93aWR0aCArIDMpIC8gNCAqIDQ7CisgICAgQ0ZYX0RJQml0bWFwKiBwU3RyZXRjaGVkID0gRlhfTkVXIENGWF9ESUJpdG1hcDsKKyAgICBpZiAoIXBTdHJldGNoZWQpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmICghcFN0cmV0Y2hlZC0+Q3JlYXRlKHJlc3VsdF93aWR0aCwgcmVzdWx0X2hlaWdodCwgRlhESUJfOGJwcFJnYikpIHsKKyAgICAgICAgZGVsZXRlIHBTdHJldGNoZWQ7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBMUEJZVEUgZGVzdF9idWYgPSBwU3RyZXRjaGVkLT5HZXRCdWZmZXIoKTsKKyAgICBpbnQgc3JjX3dpZHRoID0gcFNvdXJjZS0+R2V0V2lkdGgoKTsKKyAgICBpbnQgc3JjX2hlaWdodCA9IHBTb3VyY2UtPkdldEhlaWdodCgpOworICAgIGludCBzcmNfY291bnQgPSBzcmNfd2lkdGggKiBzcmNfaGVpZ2h0OworICAgIGludCBkZXN0X2NvdW50ID0gZGVzdF93aWR0aCAqIGRlc3RfaGVpZ2h0OworICAgIGludCByYXRpbyA9IDI1NSAqIGRlc3RfY291bnQgLyBzcmNfY291bnQ7CisgICAgaW50IHlfdW5pdCA9IHNyY19oZWlnaHQgLyBkZXN0X2hlaWdodDsKKyAgICBpbnQgeF91bml0ID0gc3JjX3dpZHRoIC8gZGVzdF93aWR0aDsKKyAgICBpbnQgYXJlYV91bml0ID0geV91bml0ICogeF91bml0OworICAgIExQQllURSBzcmNfYnVmID0gcFNvdXJjZS0+R2V0QnVmZmVyKCk7CisgICAgaW50IHNyY19waXRjaCA9IHBTb3VyY2UtPkdldFBpdGNoKCk7CisgICAgZm9yIChpbnQgZGVzdF95ID0gMDsgZGVzdF95IDwgcmVzdWx0X2hlaWdodDsgZGVzdF95ICsrKSB7CisgICAgICAgIExQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIGRlc3RfeSAqIHJlc3VsdF9waXRjaDsKKyAgICAgICAgaW50IHNyY195X3N0YXJ0ID0gYkZsaXBZID8gKGRlc3RfaGVpZ2h0IC0gMSAtIGRlc3RfeSAtIHBDbGlwUmVjdC0+dG9wKSA6IChkZXN0X3kgKyBwQ2xpcFJlY3QtPnRvcCk7CisgICAgICAgIHNyY195X3N0YXJ0ID0gc3JjX3lfc3RhcnQgKiBzcmNfaGVpZ2h0IC8gZGVzdF9oZWlnaHQ7CisgICAgICAgIExQQllURSBzcmNfc2NhbiA9IHNyY19idWYgKyBzcmNfeV9zdGFydCAqIHNyY19waXRjaDsKKyAgICAgICAgZm9yIChpbnQgZGVzdF94ID0gMDsgZGVzdF94IDwgcmVzdWx0X3dpZHRoOyBkZXN0X3ggKyspIHsKKyAgICAgICAgICAgIGludCBzdW0gPSAwOworICAgICAgICAgICAgaW50IHNyY194X3N0YXJ0ID0gYkZsaXBYID8gKGRlc3Rfd2lkdGggLSAxIC0gZGVzdF94IC0gcENsaXBSZWN0LT5sZWZ0KSA6IChkZXN0X3ggKyBwQ2xpcFJlY3QtPmxlZnQpOworICAgICAgICAgICAgc3JjX3hfc3RhcnQgPSBzcmNfeF9zdGFydCAqIHNyY193aWR0aCAvIGRlc3Rfd2lkdGg7CisgICAgICAgICAgICBpbnQgc3JjX3hfZW5kID0gc3JjX3hfc3RhcnQgKyB4X3VuaXQ7CisgICAgICAgICAgICBMUEJZVEUgc3JjX2xpbmUgPSBzcmNfc2NhbjsKKyAgICAgICAgICAgIGZvciAoaW50IHNyY195ID0gMDsgc3JjX3kgPCB5X3VuaXQ7IHNyY195ICsrKSB7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgc3JjX3ggPSBzcmNfeF9zdGFydDsgc3JjX3ggPCBzcmNfeF9lbmQ7IHNyY194ICsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghKHNyY19saW5lW3NyY194IC8gOF0gJiAoMSA8PCAoNyAtIHNyY194ICUgOCkpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VtICs9IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzcmNfbGluZSArPSBzcmNfcGl0Y2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZXN0X3NjYW5bZGVzdF94XSA9IDI1NSAtIHN1bSAvIGFyZWFfdW5pdDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcFN0cmV0Y2hlZDsKK30KK3N0YXRpYyB2b2lkIE91dHB1dEltYWdlTWFzayhHcEdyYXBoaWNzKiBwR3JhcGhpY3MsIEJPT0wgYk1vbm9EZXZpY2UsIGNvbnN0IENGWF9ESUJpdG1hcCogcEJpdG1hcCwgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsIEZYX0FSR0IgYXJnYiwgY29uc3QgRlhfUkVDVCogcENsaXBSZWN0KQoreworICAgIEFTU0VSVChwQml0bWFwLT5HZXRCUFAoKSA9PSAxKTsKKyAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0OworICAgIGludCBzcmNfd2lkdGggPSBwQml0bWFwLT5HZXRXaWR0aCgpLCBzcmNfaGVpZ2h0ID0gcEJpdG1hcC0+R2V0SGVpZ2h0KCk7CisgICAgaW50IHNyY19waXRjaCA9IHBCaXRtYXAtPkdldFBpdGNoKCk7CisgICAgRlhfTFBCWVRFIHNjYW4wID0gcEJpdG1hcC0+R2V0QnVmZmVyKCk7CisgICAgaWYgKHNyY193aWR0aCA9PSAxICYmIHNyY19oZWlnaHQgPT0gMSkgeworICAgICAgICBpZiAoKHNjYW4wWzBdICYgMHg4MCkgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEdwU29saWRGaWxsKiBzb2xpZEJydXNoOworICAgICAgICBDYWxsRnVuYyhHZGlwQ3JlYXRlU29saWRGaWxsKSgoQVJHQilhcmdiLCAmc29saWRCcnVzaCk7CisgICAgICAgIGlmIChkZXN0X3dpZHRoIDwgMCkgeworICAgICAgICAgICAgZGVzdF93aWR0aCA9IC1kZXN0X3dpZHRoOworICAgICAgICAgICAgZGVzdF9sZWZ0IC09IGRlc3Rfd2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlc3RfaGVpZ2h0IDwgMCkgeworICAgICAgICAgICAgZGVzdF9oZWlnaHQgPSAtZGVzdF9oZWlnaHQ7CisgICAgICAgICAgICBkZXN0X3RvcCAtPSBkZXN0X2hlaWdodDsKKyAgICAgICAgfQorICAgICAgICBDYWxsRnVuYyhHZGlwRmlsbFJlY3RhbmdsZSkocEdyYXBoaWNzLCBzb2xpZEJydXNoLCAoZmxvYXQpZGVzdF9sZWZ0LCAoZmxvYXQpZGVzdF90b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpZGVzdF93aWR0aCwgKGZsb2F0KWRlc3RfaGVpZ2h0KTsKKyAgICAgICAgQ2FsbEZ1bmMoR2RpcERlbGV0ZUJydXNoKShzb2xpZEJydXNoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWJNb25vRGV2aWNlICYmIGFicyhkZXN0X3dpZHRoKSA8IHNyY193aWR0aCAmJiBhYnMoZGVzdF9oZWlnaHQpIDwgc3JjX2hlaWdodCkgeworICAgICAgICBGWF9SRUNUIGltYWdlX3JlY3QoZGVzdF9sZWZ0LCBkZXN0X3RvcCwgZGVzdF9sZWZ0ICsgZGVzdF93aWR0aCwgZGVzdF90b3AgKyBkZXN0X2hlaWdodCk7CisgICAgICAgIGltYWdlX3JlY3QuTm9ybWFsaXplKCk7CisgICAgICAgIEZYX1JFQ1QgaW1hZ2VfY2xpcCA9IGltYWdlX3JlY3Q7CisgICAgICAgIGltYWdlX2NsaXAuSW50ZXJzZWN0KCpwQ2xpcFJlY3QpOworICAgICAgICBpZiAoaW1hZ2VfY2xpcC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpbWFnZV9jbGlwLk9mZnNldCgtaW1hZ2VfcmVjdC5sZWZ0LCAtaW1hZ2VfcmVjdC50b3ApOworICAgICAgICBDRlhfRElCaXRtYXAqIHBTdHJldGNoZWQgPSBOVUxMOworICAgICAgICBpZiAoc3JjX3dpZHRoICogc3JjX2hlaWdodCA+IDEwMDAwKSB7CisgICAgICAgICAgICBwU3RyZXRjaGVkID0gX1N0cmV0Y2hNb25vVG9HcmF5KGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0LCBwQml0bWFwLCAmaW1hZ2VfY2xpcCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwU3RyZXRjaGVkID0gcEJpdG1hcC0+U3RyZXRjaFRvKGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0LCBGQUxTRSwgJmltYWdlX2NsaXApOworICAgICAgICB9CisgICAgICAgIEdwQml0bWFwKiBiaXRtYXA7CisgICAgICAgIENhbGxGdW5jKEdkaXBDcmVhdGVCaXRtYXBGcm9tU2NhbjApKGltYWdlX2NsaXAuV2lkdGgoKSwgaW1hZ2VfY2xpcC5IZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGltYWdlX2NsaXAuV2lkdGgoKSArIDMpIC8gNCAqIDQsIFBpeGVsRm9ybWF0OGJwcEluZGV4ZWQsIHBTdHJldGNoZWQtPkdldEJ1ZmZlcigpLCAmYml0bWFwKTsKKyAgICAgICAgaW50IGEsIHIsIGcsIGI7CisgICAgICAgIEFyZ2JEZWNvZGUoYXJnYiwgYSwgciwgZywgYik7CisgICAgICAgIFVJTlQgcGFsWzI1OF07CisgICAgICAgIHBhbFswXSA9IDA7CisgICAgICAgIHBhbFsxXSA9IDI1NjsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTY7IGkgKyspIHsKKyAgICAgICAgICAgIHBhbFtpICsgMl0gPSBBcmdiRW5jb2RlKGkgKiBhIC8gMjU1LCByLCBnLCBiKTsKKyAgICAgICAgfQorICAgICAgICBDYWxsRnVuYyhHZGlwU2V0SW1hZ2VQYWxldHRlKShiaXRtYXAsIChDb2xvclBhbGV0dGUqKXBhbCk7CisgICAgICAgIENhbGxGdW5jKEdkaXBEcmF3SW1hZ2VJKShwR3JhcGhpY3MsIGJpdG1hcCwgaW1hZ2VfcmVjdC5sZWZ0ICsgaW1hZ2VfY2xpcC5sZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VfcmVjdC50b3AgKyBpbWFnZV9jbGlwLnRvcCk7CisgICAgICAgIENhbGxGdW5jKEdkaXBEaXNwb3NlSW1hZ2UpKGJpdG1hcCk7CisgICAgICAgIGRlbGV0ZSBwU3RyZXRjaGVkOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdwQml0bWFwKiBiaXRtYXA7CisgICAgQ2FsbEZ1bmMoR2RpcENyZWF0ZUJpdG1hcEZyb21TY2FuMCkoc3JjX3dpZHRoLCBzcmNfaGVpZ2h0LCBzcmNfcGl0Y2gsIFBpeGVsRm9ybWF0MWJwcEluZGV4ZWQsIHNjYW4wLCAmYml0bWFwKTsKKyAgICBVSU5UIHBhbGV0dGVbNF0gPSB7IFBhbGV0dGVGbGFnc0hhc0FscGhhLCAyLCAwLCBhcmdiIH07CisgICAgQ2FsbEZ1bmMoR2RpcFNldEltYWdlUGFsZXR0ZSkoYml0bWFwLCAoQ29sb3JQYWxldHRlKilwYWxldHRlKTsKKyAgICBQb2ludCBkZXN0aW5hdGlvblBvaW50c1tdID0geworICAgICAgICBQb2ludChkZXN0X2xlZnQsIGRlc3RfdG9wKSwKKyAgICAgICAgUG9pbnQoZGVzdF9sZWZ0ICsgZGVzdF93aWR0aCwgZGVzdF90b3ApLAorICAgICAgICBQb2ludChkZXN0X2xlZnQsIGRlc3RfdG9wICsgZGVzdF9oZWlnaHQpCisgICAgfTsKKyAgICBDYWxsRnVuYyhHZGlwRHJhd0ltYWdlUG9pbnRzSSkocEdyYXBoaWNzLCBiaXRtYXAsIGRlc3RpbmF0aW9uUG9pbnRzLCAzKTsKKyAgICBDYWxsRnVuYyhHZGlwRGlzcG9zZUltYWdlKShiaXRtYXApOworfQorc3RhdGljIHZvaWQgT3V0cHV0SW1hZ2UoR3BHcmFwaGljcyogcEdyYXBoaWNzLCBjb25zdCBDRlhfRElCaXRtYXAqIHBCaXRtYXAsIGNvbnN0IEZYX1JFQ1QqIHBTcmNSZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLCBpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0KQoreworICAgIGludCBzcmNfd2lkdGggPSBwU3JjUmVjdC0+V2lkdGgoKSwgc3JjX2hlaWdodCA9IHBTcmNSZWN0LT5IZWlnaHQoKTsKKyAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0OworICAgIGlmIChwQml0bWFwLT5HZXRCUFAoKSA9PSAxICYmIChwU3JjUmVjdC0+bGVmdCAlIDgpKSB7CisgICAgICAgIEZYX1JFQ1QgbmV3X3JlY3QoMCwgMCwgc3JjX3dpZHRoLCBzcmNfaGVpZ2h0KTsKKyAgICAgICAgQ0ZYX0RJQml0bWFwKiBwQ2xvbmVkID0gcEJpdG1hcC0+Q2xvbmUocFNyY1JlY3QpOworICAgICAgICBpZiAoIXBDbG9uZWQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBPdXRwdXRJbWFnZShwR3JhcGhpY3MsIHBDbG9uZWQsICZuZXdfcmVjdCwgZGVzdF9sZWZ0LCBkZXN0X3RvcCwgZGVzdF93aWR0aCwgZGVzdF9oZWlnaHQpOworICAgICAgICBkZWxldGUgcENsb25lZDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpbnQgc3JjX3BpdGNoID0gcEJpdG1hcC0+R2V0UGl0Y2goKTsKKyAgICBGWF9MUEJZVEUgc2NhbjAgPSBwQml0bWFwLT5HZXRCdWZmZXIoKSArIHBTcmNSZWN0LT50b3AgKiBzcmNfcGl0Y2ggKyBwQml0bWFwLT5HZXRCUFAoKSAqIHBTcmNSZWN0LT5sZWZ0IC8gODsKKyAgICBHcEJpdG1hcCogYml0bWFwID0gTlVMTDsKKyAgICBzd2l0Y2ggKHBCaXRtYXAtPkdldEZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgRlhESUJfQXJnYjoKKyAgICAgICAgICAgIENhbGxGdW5jKEdkaXBDcmVhdGVCaXRtYXBGcm9tU2NhbjApKHNyY193aWR0aCwgc3JjX2hlaWdodCwgc3JjX3BpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGl4ZWxGb3JtYXQzMmJwcEFSR0IsIHNjYW4wLCAmYml0bWFwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZYRElCX1JnYjMyOgorICAgICAgICAgICAgQ2FsbEZ1bmMoR2RpcENyZWF0ZUJpdG1hcEZyb21TY2FuMCkoc3JjX3dpZHRoLCBzcmNfaGVpZ2h0LCBzcmNfcGl0Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXhlbEZvcm1hdDMyYnBwUkdCLCBzY2FuMCwgJmJpdG1hcCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGWERJQl9SZ2I6CisgICAgICAgICAgICBDYWxsRnVuYyhHZGlwQ3JlYXRlQml0bWFwRnJvbVNjYW4wKShzcmNfd2lkdGgsIHNyY19oZWlnaHQsIHNyY19waXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsRm9ybWF0MjRicHBSR0IsIHNjYW4wLCAmYml0bWFwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZYRElCXzhicHBSZ2I6IHsKKyAgICAgICAgICAgICAgICBDYWxsRnVuYyhHZGlwQ3JlYXRlQml0bWFwRnJvbVNjYW4wKShzcmNfd2lkdGgsIHNyY19oZWlnaHQsIHNyY19waXRjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaXhlbEZvcm1hdDhicHBJbmRleGVkLCBzY2FuMCwgJmJpdG1hcCk7CisgICAgICAgICAgICAgICAgVUlOVCBwYWxbMjU4XTsKKyAgICAgICAgICAgICAgICBwYWxbMF0gPSAwOworICAgICAgICAgICAgICAgIHBhbFsxXSA9IDI1NjsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSArKykgeworICAgICAgICAgICAgICAgICAgICBwYWxbaSArIDJdID0gcEJpdG1hcC0+R2V0UGFsZXR0ZUVudHJ5KGkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBDYWxsRnVuYyhHZGlwU2V0SW1hZ2VQYWxldHRlKShiaXRtYXAsIChDb2xvclBhbGV0dGUqKXBhbCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgRlhESUJfMWJwcFJnYjogeworICAgICAgICAgICAgICAgIENhbGxGdW5jKEdkaXBDcmVhdGVCaXRtYXBGcm9tU2NhbjApKHNyY193aWR0aCwgc3JjX2hlaWdodCwgc3JjX3BpdGNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpeGVsRm9ybWF0MWJwcEluZGV4ZWQsIHNjYW4wLCAmYml0bWFwKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGRlc3RfaGVpZ2h0IDwgMCkgeworICAgICAgICBkZXN0X2hlaWdodCAtLTsKKyAgICB9CisgICAgaWYgKGRlc3Rfd2lkdGggPCAwKSB7CisgICAgICAgIGRlc3Rfd2lkdGggLS07CisgICAgfQorICAgIFBvaW50IGRlc3RpbmF0aW9uUG9pbnRzW10gPSB7CisgICAgICAgIFBvaW50KGRlc3RfbGVmdCwgZGVzdF90b3ApLAorICAgICAgICBQb2ludChkZXN0X2xlZnQgKyBkZXN0X3dpZHRoLCBkZXN0X3RvcCksCisgICAgICAgIFBvaW50KGRlc3RfbGVmdCwgZGVzdF90b3AgKyBkZXN0X2hlaWdodCkKKyAgICB9OworICAgIENhbGxGdW5jKEdkaXBEcmF3SW1hZ2VQb2ludHNJKShwR3JhcGhpY3MsIGJpdG1hcCwgZGVzdGluYXRpb25Qb2ludHMsIDMpOworICAgIENhbGxGdW5jKEdkaXBEaXNwb3NlSW1hZ2UpKGJpdG1hcCk7Cit9CitDR2RpcGx1c0V4dDo6Q0dkaXBsdXNFeHQoKQoreworICAgIG1faE1vZHVsZSA9IE5VTEw7CisgICAgbV9HZGlNb2R1bGUgPSBOVUxMOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mIGdfR2RpcEZ1bmNOYW1lcyAvIHNpemVvZihMUENTVFIpOyBpICsrKSB7CisgICAgICAgIG1fRnVuY3Rpb25zW2ldID0gTlVMTDsKKyAgICB9CisgICAgbV9wR2RpQWRkRm9udE1lbVJlc291cmNlRXggPSBOVUxMOworICAgIG1fcEdkaVJlbW92ZUZvbnRNZW1SZXNvdXJzZUV4ID0gTlVMTDsKK30KK3ZvaWQgQ0dkaXBsdXNFeHQ6OkxvYWQoKQoreworICAgIENGWF9CeXRlU3RyaW5nIHN0clBsdXNQYXRoID0gIiI7CisgICAgRlhfQ0hBUiBidWZbTUFYX1BBVEhdOworICAgIEdldFN5c3RlbURpcmVjdG9yeUEoYnVmLCBNQVhfUEFUSCk7CisgICAgc3RyUGx1c1BhdGggKz0gYnVmOworICAgIHN0clBsdXNQYXRoICs9ICJcXCI7CisgICAgc3RyUGx1c1BhdGggKz0gIkdESVBMVVMuRExMIjsKKyAgICBtX2hNb2R1bGUgPSBMb2FkTGlicmFyeUEoc3RyUGx1c1BhdGgpOworICAgIGlmIChtX2hNb2R1bGUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZW9mIGdfR2RpcEZ1bmNOYW1lcyAvIHNpemVvZihMUENTVFIpOyBpICsrKSB7CisgICAgICAgIG1fRnVuY3Rpb25zW2ldID0gR2V0UHJvY0FkZHJlc3MobV9oTW9kdWxlLCBnX0dkaXBGdW5jTmFtZXNbaV0pOworICAgICAgICBpZiAobV9GdW5jdGlvbnNbaV0gPT0gTlVMTCkgeworICAgICAgICAgICAgbV9oTW9kdWxlID0gTlVMTDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBGWF9VSU5UUFRSIGdkaXBsdXNUb2tlbjsKKyAgICBHZGlwbHVzU3RhcnR1cElucHV0IGdkaXBsdXNTdGFydHVwSW5wdXQ7CisgICAgKChGdW5jVHlwZV9HZGlwbHVzU3RhcnR1cCltX0Z1bmN0aW9uc1tGdW5jSWRfR2RpcGx1c1N0YXJ0dXBdKSgmZ2RpcGx1c1Rva2VuLCAmZ2RpcGx1c1N0YXJ0dXBJbnB1dCwgTlVMTCk7CisgICAgbV9HZGlNb2R1bGUgPSBMb2FkTGlicmFyeUEoIkdESTMyLkRMTCIpOworICAgIGlmIChtX0dkaU1vZHVsZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wR2RpQWRkRm9udE1lbVJlc291cmNlRXggPSBHZXRQcm9jQWRkcmVzcyhtX0dkaU1vZHVsZSwgIkFkZEZvbnRNZW1SZXNvdXJjZUV4Iik7CisgICAgbV9wR2RpUmVtb3ZlRm9udE1lbVJlc291cnNlRXggPSBHZXRQcm9jQWRkcmVzcyhtX0dkaU1vZHVsZSwgIlJlbW92ZUZvbnRNZW1SZXNvdXJjZUV4Iik7Cit9CitDR2RpcGx1c0V4dDo6fkNHZGlwbHVzRXh0KCkKK3sKK30KK0xQVk9JRCBDR2RpcGx1c0V4dDo6TG9hZE1lbUZvbnQoTFBCWVRFIHBEYXRhLCBGWF9EV09SRCBzaXplKQoreworICAgIEdwRm9udENvbGxlY3Rpb24qIHBDb2xsZWN0aW9uID0gTlVMTDsKKyAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0OworICAgIENhbGxGdW5jKEdkaXBOZXdQcml2YXRlRm9udENvbGxlY3Rpb24pKCZwQ29sbGVjdGlvbik7CisgICAgR3BTdGF0dXMgc3RhdHVzID0gQ2FsbEZ1bmMoR2RpcFByaXZhdGVBZGRNZW1vcnlGb250KShwQ29sbGVjdGlvbiwgcERhdGEsIHNpemUpOworICAgIGlmIChzdGF0dXMgPT0gT2spIHsKKyAgICAgICAgcmV0dXJuIHBDb2xsZWN0aW9uOworICAgIH0KKyAgICBDYWxsRnVuYyhHZGlwRGVsZXRlUHJpdmF0ZUZvbnRDb2xsZWN0aW9uKSgmcENvbGxlY3Rpb24pOworICAgIHJldHVybiBOVUxMOworfQordm9pZCBDR2RpcGx1c0V4dDo6RGVsZXRlTWVtRm9udChMUFZPSUQgcENvbGxlY3Rpb24pCit7CisgICAgQ0dkaXBsdXNFeHQmIEdkaXBsdXNFeHQgPSAoKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPm1fR2RpcGx1c0V4dDsKKyAgICBDYWxsRnVuYyhHZGlwRGVsZXRlUHJpdmF0ZUZvbnRDb2xsZWN0aW9uKSgoR3BGb250Q29sbGVjdGlvbioqKSZwQ29sbGVjdGlvbik7Cit9CitGWF9CT09MIENHZGlwbHVzRXh0OjpHZGlwQ3JlYXRlQml0bWFwKENGWF9ESUJpdG1hcCogcEJpdG1hcCwgdm9pZCoqYml0bWFwKQoreworICAgIENHZGlwbHVzRXh0JiBHZGlwbHVzRXh0ID0gKChDV2luMzJQbGF0Zm9ybSopQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCkpLT5tX0dkaXBsdXNFeHQ7CisgICAgUGl4ZWxGb3JtYXQgZm9ybWF0OworICAgIHN3aXRjaCAocEJpdG1hcC0+R2V0Rm9ybWF0KCkpIHsKKyAgICAgICAgY2FzZSBGWERJQl9SZ2I6CisgICAgICAgICAgICBmb3JtYXQgPSBQaXhlbEZvcm1hdDI0YnBwUkdCOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRlhESUJfUmdiMzI6CisgICAgICAgICAgICBmb3JtYXQgPSBQaXhlbEZvcm1hdDMyYnBwUkdCOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRlhESUJfQXJnYjoKKyAgICAgICAgICAgIGZvcm1hdCA9IFBpeGVsRm9ybWF0MzJicHBBUkdCOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEdwU3RhdHVzIHN0YXR1cyA9IENhbGxGdW5jKEdkaXBDcmVhdGVCaXRtYXBGcm9tU2NhbjApKHBCaXRtYXAtPkdldFdpZHRoKCksIHBCaXRtYXAtPkdldEhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgIHBCaXRtYXAtPkdldFBpdGNoKCksIGZvcm1hdCwgcEJpdG1hcC0+R2V0QnVmZmVyKCksIChHcEJpdG1hcCoqKWJpdG1hcCk7CisgICAgaWYgKHN0YXR1cyA9PSBPaykgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorRlhfQk9PTCBDR2RpcGx1c0V4dDo6R2RpcENyZWF0ZUZyb21JbWFnZSh2b2lkKiBiaXRtYXAsIHZvaWQqKiBncmFwaGljcykKK3sKKyAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0OworICAgIEdwU3RhdHVzIHN0YXR1cyA9IENhbGxGdW5jKEdkaXBHZXRJbWFnZUdyYXBoaWNzQ29udGV4dCkoKEdwQml0bWFwKiliaXRtYXAsIChHcEdyYXBoaWNzKiopZ3JhcGhpY3MpOworICAgIGlmIChzdGF0dXMgPT0gT2spIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK0ZYX0JPT0wgQ0dkaXBsdXNFeHQ6OkdkaXBDcmVhdGVGb250RmFtaWx5RnJvbU5hbWUoRlhfTFBDV1NUUiBuYW1lLCB2b2lkKiBwRm9udENvbGxlY3Rpb24sIHZvaWQqKnBGYW1pbHkpCit7CisgICAgQ0dkaXBsdXNFeHQmIEdkaXBsdXNFeHQgPSAoKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPm1fR2RpcGx1c0V4dDsKKyAgICBHcFN0YXR1cyBzdGF0dXMgPSBDYWxsRnVuYyhHZGlwQ3JlYXRlRm9udEZhbWlseUZyb21OYW1lKSgoR0RJUENPTlNUIFdDSEFSICopbmFtZSwgKEdwRm9udENvbGxlY3Rpb24qKXBGb250Q29sbGVjdGlvbiwgKEdwRm9udEZhbWlseSoqKXBGYW1pbHkpOworICAgIGlmIChzdGF0dXMgPT0gT2spIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHJldHVybiBGQUxTRTsKK30KK0ZYX0JPT0wgQ0dkaXBsdXNFeHQ6OkdkaXBDcmVhdGVGb250RnJvbUZhbWlseSh2b2lkKiBwRmFtaWx5LCBGWF9GTE9BVCBmb250X3NpemUsIGludCBmb250c3R5bGUsIGludCBmbGFnLCB2b2lkKiogcEZvbnQpCit7CisgICAgQ0dkaXBsdXNFeHQmIEdkaXBsdXNFeHQgPSAoKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPm1fR2RpcGx1c0V4dDsKKyAgICBHcFN0YXR1cyBzdGF0dXMgPSBDYWxsRnVuYyhHZGlwQ3JlYXRlRm9udCkoKEdwRm9udEZhbWlseSopcEZhbWlseSwgZm9udF9zaXplLCBmb250c3R5bGUsIFVuaXQoZmxhZyksIChHcEZvbnQqKilwRm9udCk7CisgICAgaWYgKHN0YXR1cyA9PSBPaykgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQordm9pZCBDR2RpcGx1c0V4dDo6R2RpcEdldEZvbnRTaXplKHZvaWQgKnBGb250LCBGWF9GTE9BVCAqc2l6ZSkKK3sKKyAgICBSRUFMIGdldF9zaXplOworICAgIENHZGlwbHVzRXh0JiBHZGlwbHVzRXh0ID0gKChDV2luMzJQbGF0Zm9ybSopQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCkpLT5tX0dkaXBsdXNFeHQ7CisgICAgR3BTdGF0dXMgc3RhdHVzID0gQ2FsbEZ1bmMoR2RpcEdldEZvbnRTaXplKSgoR3BGb250ICopcEZvbnQsIChSRUFMKikmZ2V0X3NpemUpOworICAgIGlmIChzdGF0dXMgPT0gT2spIHsKKyAgICAgICAgKnNpemUgPSAoRlhfRkxPQVQpZ2V0X3NpemU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKnNpemUgPSAwOworICAgIH0KK30KK3ZvaWQgQ0dkaXBsdXNFeHQ6OkdkaXBTZXRUZXh0UmVuZGVyaW5nSGludCh2b2lkKiBncmFwaGljcywgaW50IG1vZGUpCit7CisgICAgQ0dkaXBsdXNFeHQmIEdkaXBsdXNFeHQgPSAoKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPm1fR2RpcGx1c0V4dDsKKyAgICBDYWxsRnVuYyhHZGlwU2V0VGV4dFJlbmRlcmluZ0hpbnQpKChHcEdyYXBoaWNzKilncmFwaGljcywgKFRleHRSZW5kZXJpbmdIaW50KW1vZGUpOworfQordm9pZCBDR2RpcGx1c0V4dDo6R2RpcFNldFBhZ2VVbml0KHZvaWQqIGdyYXBoaWNzLCBGWF9EV09SRCB1bml0KQoreworICAgIENHZGlwbHVzRXh0JiBHZGlwbHVzRXh0ID0gKChDV2luMzJQbGF0Zm9ybSopQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCkpLT5tX0dkaXBsdXNFeHQ7CisgICAgQ2FsbEZ1bmMoR2RpcFNldFBhZ2VVbml0KSgoR3BHcmFwaGljcyopZ3JhcGhpY3MsIChHcFVuaXQpdW5pdCk7Cit9CitGWF9CT09MIENHZGlwbHVzRXh0OjpHZGlwRHJhd0RyaXZlclN0cmluZyh2b2lkICpncmFwaGljcywgIHVuc2lnbmVkIHNob3J0ICp0ZXh0LCBpbnQgbGVuZ3RoLAorICAgICAgICB2b2lkICpmb250LCB2b2lkKiBicnVzaCwgdm9pZCAqcG9zaXRpb25zLCBpbnQgZmxhZ3MsIGNvbnN0IHZvaWQgKm1hdHJpeCkKK3sKKyAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0OworICAgIEdwU3RhdHVzIHN0YXR1cyA9IENhbGxGdW5jKEdkaXBEcmF3RHJpdmVyU3RyaW5nKSgoR3BHcmFwaGljcyopZ3JhcGhpY3MsIChHRElQQ09OU1QgVUlOVDE2ICopdGV4dCwgKElOVClsZW5ndGgsIChHRElQQ09OU1QgR3BGb250ICopZm9udCwgKEdESVBDT05TVCBHcEJydXNoKilicnVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAoR0RJUENPTlNUIFBvaW50RiAqKXBvc2l0aW9ucywgKElOVClmbGFncywgKEdESVBDT05TVCBHcE1hdHJpeCAqKW1hdHJpeCk7CisgICAgaWYgKHN0YXR1cyA9PSBPaykgeworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQordm9pZCBDR2RpcGx1c0V4dDo6R2RpcENyZWF0ZUJydXNoKEZYX0RXT1JEIGZpbGxfYXJnYiwgdm9pZCoqIHBCcnVzaCkKK3sKKyAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0OworICAgIENhbGxGdW5jKEdkaXBDcmVhdGVTb2xpZEZpbGwpKChBUkdCKWZpbGxfYXJnYiwgKEdwU29saWRGaWxsKiopcEJydXNoKTsKK30KK3ZvaWQgQ0dkaXBsdXNFeHQ6OkdkaXBEZWxldGVCcnVzaCh2b2lkKiBwQnJ1c2gpCit7CisgICAgQ0dkaXBsdXNFeHQmIEdkaXBsdXNFeHQgPSAoKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPm1fR2RpcGx1c0V4dDsKKyAgICBDYWxsRnVuYyhHZGlwRGVsZXRlQnJ1c2gpKChHcFNvbGlkRmlsbCopcEJydXNoKTsKK30KK3ZvaWQqIENHZGlwbHVzRXh0OjpHZGlwQ3JlYXRlRm9udEZyb21Db2xsZWN0aW9uKHZvaWQqIHBGb250Q29sbGVjdGlvbiwgRlhfRkxPQVQgZm9udF9zaXplLCBpbnQgZm9udHN0eWxlKQoreworICAgIENHZGlwbHVzRXh0JiBHZGlwbHVzRXh0ID0gKChDV2luMzJQbGF0Zm9ybSopQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCkpLT5tX0dkaXBsdXNFeHQ7CisgICAgaW50IG51bUZhbWlsaWVzID0gMDsKKyAgICBHcFN0YXR1cyBzdGF0dXMgPSBDYWxsRnVuYyhHZGlwR2V0Rm9udENvbGxlY3Rpb25GYW1pbHlDb3VudCkoKEdwRm9udENvbGxlY3Rpb24qKXBGb250Q29sbGVjdGlvbiwgJm51bUZhbWlsaWVzKTsKKyAgICBpZiAoc3RhdHVzICE9IE9rKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBHcEZvbnRGYW1pbHkqIGZhbWlseV9saXN0WzFdOworICAgIHN0YXR1cyA9IENhbGxGdW5jKEdkaXBHZXRGb250Q29sbGVjdGlvbkZhbWlseUxpc3QpKChHcEZvbnRDb2xsZWN0aW9uKilwRm9udENvbGxlY3Rpb24sIDEsIGZhbWlseV9saXN0LCAmbnVtRmFtaWxpZXMpOworICAgIGlmIChzdGF0dXMgIT0gT2spIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIEdwRm9udCogcEZvbnQgPSBOVUxMOworICAgIHN0YXR1cyA9IENhbGxGdW5jKEdkaXBDcmVhdGVGb250KShmYW1pbHlfbGlzdFswXSwgZm9udF9zaXplLCBmb250c3R5bGUsIFVuaXRQaXhlbCwgJnBGb250KTsKKyAgICBpZiAoc3RhdHVzICE9IE9rKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcEZvbnQ7Cit9Cit2b2lkIENHZGlwbHVzRXh0OjpHZGlwQ3JlYXRlTWF0cml4KEZYX0ZMT0FUIGEsIEZYX0ZMT0FUIGIsIEZYX0ZMT0FUIGMsIEZYX0ZMT0FUIGQsIEZYX0ZMT0FUIGUsIEZYX0ZMT0FUIGYsIHZvaWQqKiBtYXRyaXgpCit7CisgICAgQ0dkaXBsdXNFeHQmIEdkaXBsdXNFeHQgPSAoKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPm1fR2RpcGx1c0V4dDsKKyAgICBDYWxsRnVuYyhHZGlwQ3JlYXRlTWF0cml4MikoYSwgYiwgYywgZCwgZSwgZiwgKEdwTWF0cml4KiopbWF0cml4KTsKK30KK3ZvaWQgQ0dkaXBsdXNFeHQ6OkdkaXBEZWxldGVNYXRyaXgodm9pZCogbWF0cml4KQoreworICAgIENHZGlwbHVzRXh0JiBHZGlwbHVzRXh0ID0gKChDV2luMzJQbGF0Zm9ybSopQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCkpLT5tX0dkaXBsdXNFeHQ7CisgICAgQ2FsbEZ1bmMoR2RpcERlbGV0ZU1hdHJpeCkoKEdwTWF0cml4KiltYXRyaXgpOworfQordm9pZCBDR2RpcGx1c0V4dDo6R2RpcERlbGV0ZUZvbnRGYW1pbHkodm9pZCogcEZhbWlseSkKK3sKKyAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0OworICAgIENhbGxGdW5jKEdkaXBEZWxldGVGb250RmFtaWx5KSgoR3BGb250RmFtaWx5KilwRmFtaWx5KTsKK30KK3ZvaWQgQ0dkaXBsdXNFeHQ6OkdkaXBEZWxldGVGb250KHZvaWQqIHBGb250KQoreworICAgIENHZGlwbHVzRXh0JiBHZGlwbHVzRXh0ID0gKChDV2luMzJQbGF0Zm9ybSopQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+R2V0UGxhdGZvcm1EYXRhKCkpLT5tX0dkaXBsdXNFeHQ7CisgICAgQ2FsbEZ1bmMoR2RpcERlbGV0ZUZvbnQpKChHcEZvbnQqKXBGb250KTsKK30KK3ZvaWQgQ0dkaXBsdXNFeHQ6OkdkaXBTZXRXb3JsZFRyYW5zZm9ybSh2b2lkKiBncmFwaGljcywgdm9pZCogcE1hdHJpeCkKK3sKKyAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0OworICAgIENhbGxGdW5jKEdkaXBTZXRXb3JsZFRyYW5zZm9ybSkoKEdwR3JhcGhpY3MqKWdyYXBoaWNzLCAoR3BNYXRyaXgqKXBNYXRyaXgpOworfQordm9pZCBDR2RpcGx1c0V4dDo6R2RpcERpc3Bvc2VJbWFnZSh2b2lkKiBiaXRtYXApCit7CisgICAgQ0dkaXBsdXNFeHQmIEdkaXBsdXNFeHQgPSAoKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPm1fR2RpcGx1c0V4dDsKKyAgICBDYWxsRnVuYyhHZGlwRGlzcG9zZUltYWdlKSgoR3BCaXRtYXAqKWJpdG1hcCk7Cit9Cit2b2lkIENHZGlwbHVzRXh0OjpHZGlwRGVsZXRlR3JhcGhpY3Modm9pZCogZ3JhcGhpY3MpCit7CisgICAgQ0dkaXBsdXNFeHQmIEdkaXBsdXNFeHQgPSAoKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPm1fR2RpcGx1c0V4dDsKKyAgICBDYWxsRnVuYyhHZGlwRGVsZXRlR3JhcGhpY3MpKChHcEdyYXBoaWNzKilncmFwaGljcyk7Cit9CitGWF9CT09MIENHZGlwbHVzRXh0OjpTdHJldGNoQml0TWFzayhIREMgaERDLCBCT09MIGJNb25vRGV2aWNlLCBjb25zdCBDRlhfRElCaXRtYXAqIHBCaXRtYXAsIGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsIEZYX0RXT1JEIGFyZ2IsIGNvbnN0IEZYX1JFQ1QqIHBDbGlwUmVjdCwgaW50IGZsYWdzKQoreworICAgIEFTU0VSVChwQml0bWFwLT5HZXRCUFAoKSA9PSAxKTsKKyAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0OworICAgIEdwR3JhcGhpY3MqIHBHcmFwaGljcyA9IE5VTEw7CisgICAgQ2FsbEZ1bmMoR2RpcENyZWF0ZUZyb21IREMpKGhEQywgJnBHcmFwaGljcyk7CisgICAgQ2FsbEZ1bmMoR2RpcFNldFBhZ2VVbml0KShwR3JhcGhpY3MsIFVuaXRQaXhlbCk7CisgICAgaWYgKGZsYWdzICYgRlhESUJfTk9TTU9PVEgpIHsKKyAgICAgICAgQ2FsbEZ1bmMoR2RpcFNldEludGVycG9sYXRpb25Nb2RlKShwR3JhcGhpY3MsIEludGVycG9sYXRpb25Nb2RlTmVhcmVzdE5laWdoYm9yKTsKKyAgICB9IGVsc2UgeworICAgICAgICBDYWxsRnVuYyhHZGlwU2V0SW50ZXJwb2xhdGlvbk1vZGUpKHBHcmFwaGljcywgSW50ZXJwb2xhdGlvbk1vZGVIaWdoUXVhbGl0eSk7CisgICAgfQorICAgIE91dHB1dEltYWdlTWFzayhwR3JhcGhpY3MsIGJNb25vRGV2aWNlLCBwQml0bWFwLCBkZXN0X2xlZnQsIGRlc3RfdG9wLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgYXJnYiwgcENsaXBSZWN0KTsKKyAgICBDYWxsRnVuYyhHZGlwRGVsZXRlR3JhcGhpY3MpKHBHcmFwaGljcyk7CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENHZGlwbHVzRXh0OjpTdHJldGNoRElCaXRzKEhEQyBoREMsIGNvbnN0IENGWF9ESUJpdG1hcCogcEJpdG1hcCwgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0LCBjb25zdCBGWF9SRUNUKiBwQ2xpcFJlY3QsIGludCBmbGFncykKK3sKKyAgICBHcEdyYXBoaWNzKiBwR3JhcGhpY3M7CisgICAgQ0dkaXBsdXNFeHQmIEdkaXBsdXNFeHQgPSAoKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPm1fR2RpcGx1c0V4dDsKKyAgICBDYWxsRnVuYyhHZGlwQ3JlYXRlRnJvbUhEQykoaERDLCAmcEdyYXBoaWNzKTsKKyAgICBDYWxsRnVuYyhHZGlwU2V0UGFnZVVuaXQpKHBHcmFwaGljcywgVW5pdFBpeGVsKTsKKyAgICBpZiAoZmxhZ3MgJiBGWERJQl9OT1NNT09USCkgeworICAgICAgICBDYWxsRnVuYyhHZGlwU2V0SW50ZXJwb2xhdGlvbk1vZGUpKHBHcmFwaGljcywgSW50ZXJwb2xhdGlvbk1vZGVOZWFyZXN0TmVpZ2hib3IpOworICAgIH0gZWxzZSBpZiAocEJpdG1hcC0+R2V0V2lkdGgoKSA+IGFicyhkZXN0X3dpZHRoKSAvIDIgfHwgcEJpdG1hcC0+R2V0SGVpZ2h0KCkgPiBhYnMoZGVzdF9oZWlnaHQpIC8gMikgeworICAgICAgICBDYWxsRnVuYyhHZGlwU2V0SW50ZXJwb2xhdGlvbk1vZGUpKHBHcmFwaGljcywgSW50ZXJwb2xhdGlvbk1vZGVIaWdoUXVhbGl0eSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQ2FsbEZ1bmMoR2RpcFNldEludGVycG9sYXRpb25Nb2RlKShwR3JhcGhpY3MsIEludGVycG9sYXRpb25Nb2RlQmlsaW5lYXIpOworICAgIH0KKyAgICBGWF9SRUNUIHNyY19yZWN0KDAsIDAsIHBCaXRtYXAtPkdldFdpZHRoKCksIHBCaXRtYXAtPkdldEhlaWdodCgpKTsKKyAgICBPdXRwdXRJbWFnZShwR3JhcGhpY3MsIHBCaXRtYXAsICZzcmNfcmVjdCwgZGVzdF9sZWZ0LCBkZXN0X3RvcCwgZGVzdF93aWR0aCwgZGVzdF9oZWlnaHQpOworICAgIENhbGxGdW5jKEdkaXBEZWxldGVHcmFwaGljcykocEdyYXBoaWNzKTsKKyAgICBDYWxsRnVuYyhHZGlwRGVsZXRlR3JhcGhpY3MpKHBHcmFwaGljcyk7CisgICAgcmV0dXJuIFRSVUU7Cit9CitzdGF0aWMgR3BQZW4qIF9HZGlwQ3JlYXRlUGVuKGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIERXT1JEIGFyZ2IsIEZYX0JPT0wgYlRleHRNb2RlID0gRkFMU0UpCit7CisgICAgQ0dkaXBsdXNFeHQmIEdkaXBsdXNFeHQgPSAoKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPm1fR2RpcGx1c0V4dDsKKyAgICBGWF9GTE9BVCB3aWR0aCA9IHBHcmFwaFN0YXRlID8gcEdyYXBoU3RhdGUtPm1fTGluZVdpZHRoIDogMS4wZjsKKyAgICBpZiAoIWJUZXh0TW9kZSkgeworICAgICAgICBGWF9GTE9BVCB1bml0ID0gcE1hdHJpeCA9PSBOVUxMID8gMS4wZiA6IEZYU1lTX0RpdigxLjBmLCAocE1hdHJpeC0+R2V0WFVuaXQoKSArIHBNYXRyaXgtPkdldFlVbml0KCkpIC8gMik7CisgICAgICAgIGlmICh3aWR0aCA8IHVuaXQpIHsKKyAgICAgICAgICAgIHdpZHRoID0gdW5pdDsKKyAgICAgICAgfQorICAgIH0KKyAgICBHcFBlbiogcFBlbiA9IE5VTEw7CisgICAgQ2FsbEZ1bmMoR2RpcENyZWF0ZVBlbjEpKChBUkdCKWFyZ2IsIHdpZHRoLCBVbml0V29ybGQsICZwUGVuKTsKKyAgICBMaW5lQ2FwIGxpbmVDYXA7CisgICAgRGFzaENhcCBkYXNoQ2FwID0gRGFzaENhcEZsYXQ7CisgICAgRlhfQk9PTCBiRGFzaEV4dGVuZCA9IEZBTFNFOworICAgIHN3aXRjaChwR3JhcGhTdGF0ZS0+bV9MaW5lQ2FwKSB7CisgICAgICAgIGNhc2UgQ0ZYX0dyYXBoU3RhdGVEYXRhOjpMaW5lQ2FwQnV0dDoKKyAgICAgICAgICAgIGxpbmVDYXAgPSBMaW5lQ2FwRmxhdDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENGWF9HcmFwaFN0YXRlRGF0YTo6TGluZUNhcFJvdW5kOgorICAgICAgICAgICAgbGluZUNhcCA9IExpbmVDYXBSb3VuZDsKKyAgICAgICAgICAgIGRhc2hDYXAgPSBEYXNoQ2FwUm91bmQ7CisgICAgICAgICAgICBiRGFzaEV4dGVuZCA9IFRSVUU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDRlhfR3JhcGhTdGF0ZURhdGE6OkxpbmVDYXBTcXVhcmU6CisgICAgICAgICAgICBsaW5lQ2FwID0gTGluZUNhcFNxdWFyZTsKKyAgICAgICAgICAgIGJEYXNoRXh0ZW5kID0gVFJVRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBDYWxsRnVuYyhHZGlwU2V0UGVuTGluZUNhcDE5NzgxOSkocFBlbiwgbGluZUNhcCwgbGluZUNhcCwgZGFzaENhcCk7CisgICAgTGluZUpvaW4gbGluZUpvaW47CisgICAgc3dpdGNoKHBHcmFwaFN0YXRlLT5tX0xpbmVKb2luKSB7CisgICAgICAgIGNhc2UgQ0ZYX0dyYXBoU3RhdGVEYXRhOjpMaW5lSm9pbk1pdGVyOgorICAgICAgICAgICAgbGluZUpvaW4gPSBMaW5lSm9pbk1pdGVyQ2xpcHBlZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENGWF9HcmFwaFN0YXRlRGF0YTo6TGluZUpvaW5Sb3VuZDoKKyAgICAgICAgICAgIGxpbmVKb2luID0gTGluZUpvaW5Sb3VuZDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENGWF9HcmFwaFN0YXRlRGF0YTo6TGluZUpvaW5CZXZlbDoKKyAgICAgICAgICAgIGxpbmVKb2luID0gTGluZUpvaW5CZXZlbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBDYWxsRnVuYyhHZGlwU2V0UGVuTGluZUpvaW4pKHBQZW4sIGxpbmVKb2luKTsKKyAgICBpZihwR3JhcGhTdGF0ZS0+bV9EYXNoQ291bnQpIHsKKyAgICAgICAgRlhfRkxPQVQqIHBEYXNoQXJyYXkgPSBGWF9BbGxvYyhGWF9GTE9BVCwgcEdyYXBoU3RhdGUtPm1fRGFzaENvdW50ICsgcEdyYXBoU3RhdGUtPm1fRGFzaENvdW50ICUgMik7CisgICAgICAgIGlmICghcERhc2hBcnJheSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaW50IG5Db3VudCA9IDA7CisgICAgICAgIEZYX0ZMT0FUIG9uX2xlZnRvdmVyID0gMCwgb2ZmX2xlZnRvdmVyID0gMDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwR3JhcGhTdGF0ZS0+bV9EYXNoQ291bnQ7IGkgKz0gMikgeworICAgICAgICAgICAgRlhfRkxPQVQgb25fcGhhc2UgPSBwR3JhcGhTdGF0ZS0+bV9EYXNoQXJyYXlbaV07CisgICAgICAgICAgICBGWF9GTE9BVCBvZmZfcGhhc2U7CisgICAgICAgICAgICBpZiAoaSA9PSBwR3JhcGhTdGF0ZS0+bV9EYXNoQ291bnQgLSAxKSB7CisgICAgICAgICAgICAgICAgb2ZmX3BoYXNlID0gb25fcGhhc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG9mZl9waGFzZSA9IHBHcmFwaFN0YXRlLT5tX0Rhc2hBcnJheVtpICsgMV07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvbl9waGFzZSAvPSB3aWR0aDsKKyAgICAgICAgICAgIG9mZl9waGFzZSAvPSB3aWR0aDsKKyAgICAgICAgICAgIGlmIChvbl9waGFzZSArIG9mZl9waGFzZSA8PSAwLjAwMDAyZikgeworICAgICAgICAgICAgICAgIG9uX3BoYXNlID0gMS4wZiAvIDEwOworICAgICAgICAgICAgICAgIG9mZl9waGFzZSA9IDEuMGYgLyAxMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChiRGFzaEV4dGVuZCkgeworICAgICAgICAgICAgICAgIGlmIChvZmZfcGhhc2UgPCAxKSB7CisgICAgICAgICAgICAgICAgICAgIG9mZl9waGFzZSA9IDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb2ZmX3BoYXNlIC09IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG9uX3BoYXNlICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob25fcGhhc2UgPT0gMCB8fCBvZmZfcGhhc2UgPT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChuQ291bnQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBvbl9sZWZ0b3ZlciArPSBvbl9waGFzZTsKKyAgICAgICAgICAgICAgICAgICAgb2ZmX2xlZnRvdmVyICs9IG9mZl9waGFzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwRGFzaEFycmF5W25Db3VudCAtIDJdICs9IG9uX3BoYXNlOworICAgICAgICAgICAgICAgICAgICBwRGFzaEFycmF5W25Db3VudCAtIDFdICs9IG9mZl9waGFzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBEYXNoQXJyYXlbbkNvdW50KytdID0gb25fcGhhc2UgKyBvbl9sZWZ0b3ZlcjsKKyAgICAgICAgICAgICAgICBvbl9sZWZ0b3ZlciA9IDA7CisgICAgICAgICAgICAgICAgcERhc2hBcnJheVtuQ291bnQrK10gPSBvZmZfcGhhc2UgKyBvZmZfbGVmdG92ZXI7CisgICAgICAgICAgICAgICAgb2ZmX2xlZnRvdmVyID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBDYWxsRnVuYyhHZGlwU2V0UGVuRGFzaEFycmF5KShwUGVuLCBwRGFzaEFycmF5LCBuQ291bnQpOworICAgICAgICBGWF9GTE9BVCBwaGFzZSA9IHBHcmFwaFN0YXRlLT5tX0Rhc2hQaGFzZTsKKyAgICAgICAgaWYgKGJEYXNoRXh0ZW5kKQorICAgICAgICAgICAgaWYgKHBoYXNlIDwgMC41ZikgeworICAgICAgICAgICAgICAgIHBoYXNlID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcGhhc2UgLT0gMC41ZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgQ2FsbEZ1bmMoR2RpcFNldFBlbkRhc2hPZmZzZXQpKHBQZW4sIHBoYXNlKTsKKyAgICAgICAgRlhfRnJlZShwRGFzaEFycmF5KTsKKyAgICAgICAgcERhc2hBcnJheSA9IE5VTEw7CisgICAgfQorICAgIENhbGxGdW5jKEdkaXBTZXRQZW5NaXRlckxpbWl0KShwUGVuLCBwR3JhcGhTdGF0ZS0+bV9NaXRlckxpbWl0KTsKKyAgICByZXR1cm4gcFBlbjsKK30KK3N0YXRpYyBCT09MIElzU21hbGxUcmlhbmdsZShQb2ludEYqIHBvaW50cywgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgaW50JiB2MSwgaW50JiB2MikKK3sKKyAgICBpbnQgcGFpcnNbXSA9IHsxLCAyLCAwLCAyLCAwLCAxfTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkgKyspIHsKKyAgICAgICAgaW50IHBhaXIxID0gcGFpcnNbaSAqIDJdOworICAgICAgICBpbnQgcGFpcjIgPSBwYWlyc1tpICogMiArIDFdOworICAgICAgICBGWF9GTE9BVCB4MSA9IHBvaW50c1twYWlyMV0uWCwgeDIgPSBwb2ludHNbcGFpcjJdLlg7CisgICAgICAgIEZYX0ZMT0FUIHkxID0gcG9pbnRzW3BhaXIxXS5ZLCB5MiA9IHBvaW50c1twYWlyMl0uWTsKKyAgICAgICAgaWYgKHBNYXRyaXgpIHsKKyAgICAgICAgICAgIHBNYXRyaXgtPlRyYW5zZm9ybSh4MSwgeTEpOworICAgICAgICAgICAgcE1hdHJpeC0+VHJhbnNmb3JtKHgyLCB5Mik7CisgICAgICAgIH0KKyAgICAgICAgRlhfRkxPQVQgZHggPSB4MSAtIHgyOworICAgICAgICBGWF9GTE9BVCBkeSA9IHkxIC0geTI7CisgICAgICAgIEZYX0ZMT0FUIGRpc3RhbmNlX3NxdWFyZSA9IEZYU1lTX011bChkeCwgZHgpICsgRlhTWVNfTXVsKGR5LCBkeSk7CisgICAgICAgIGlmIChkaXN0YW5jZV9zcXVhcmUgPCAoMS4wZiAqIDIgKyAxLjBmIC8gNCkpIHsKKyAgICAgICAgICAgIHYxID0gaTsKKyAgICAgICAgICAgIHYyID0gcGFpcjE7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gRkFMU0U7Cit9CitCT09MIENHZGlwbHVzRXh0OjpEcmF3UGF0aChIREMgaERDLCBjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGZpbGxfYXJnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIHN0cm9rZV9hcmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpbGxfbW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICApCit7CisgICAgaW50IG5Qb2ludHMgPSBwUGF0aERhdGEtPkdldFBvaW50Q291bnQoKTsKKyAgICBpZiAoblBvaW50cyA9PSAwKSB7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICBGWF9QQVRIUE9JTlQqIHBQb2ludHMgPSBwUGF0aERhdGEtPkdldFBvaW50cygpOworICAgIEdwR3JhcGhpY3MqIHBHcmFwaGljcyA9IE5VTEw7CisgICAgQ0dkaXBsdXNFeHQmIEdkaXBsdXNFeHQgPSAoKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPm1fR2RpcGx1c0V4dDsKKyAgICBDYWxsRnVuYyhHZGlwQ3JlYXRlRnJvbUhEQykoaERDLCAmcEdyYXBoaWNzKTsKKyAgICBDYWxsRnVuYyhHZGlwU2V0UGFnZVVuaXQpKHBHcmFwaGljcywgVW5pdFBpeGVsKTsKKyAgICBDYWxsRnVuYyhHZGlwU2V0UGl4ZWxPZmZzZXRNb2RlKShwR3JhcGhpY3MsIFBpeGVsT2Zmc2V0TW9kZUhhbGYpOworICAgIEdwTWF0cml4KiBwTWF0cml4ID0gTlVMTDsKKyAgICBpZiAocE9iamVjdDJEZXZpY2UpIHsKKyAgICAgICAgQ2FsbEZ1bmMoR2RpcENyZWF0ZU1hdHJpeDIpKHBPYmplY3QyRGV2aWNlLT5hLCBwT2JqZWN0MkRldmljZS0+YiwgcE9iamVjdDJEZXZpY2UtPmMsIHBPYmplY3QyRGV2aWNlLT5kLCBwT2JqZWN0MkRldmljZS0+ZSwgcE9iamVjdDJEZXZpY2UtPmYsICZwTWF0cml4KTsKKyAgICAgICAgQ2FsbEZ1bmMoR2RpcFNldFdvcmxkVHJhbnNmb3JtKShwR3JhcGhpY3MsIHBNYXRyaXgpOworICAgIH0KKyAgICBQb2ludEYgKnBvaW50cyA9IEZYX0FsbG9jKFBvaW50RiwgblBvaW50cyk7CisgICAgaWYgKCFwb2ludHMpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBCWVRFICogdHlwZXMgID0gRlhfQWxsb2MoQllURSwgblBvaW50cyk7CisgICAgaWYgKCF0eXBlcykgeworICAgICAgICBGWF9GcmVlKHBvaW50cyk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaW50IG5TdWJQYXRoZXMgPSAwOworICAgIEZYX0JPT0wgYlN1YkNsb3NlID0gRkFMU0U7CisgICAgaW50IHBvc19zdWJjbG9zZSA9IDA7CisgICAgRlhfQk9PTCBiU21vb3RoID0gRkFMU0U7CisgICAgaW50IHN0YXJ0cG9pbnQgPSAwOworICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuUG9pbnRzOyBpKyspIHsKKyAgICAgICAgcG9pbnRzW2ldLlggPSBwUG9pbnRzW2ldLm1fUG9pbnRYOworICAgICAgICBwb2ludHNbaV0uWSA9IHBQb2ludHNbaV0ubV9Qb2ludFk7CisgICAgICAgIEZYX0ZMT0FUIHgsIHk7CisgICAgICAgIGlmIChwT2JqZWN0MkRldmljZSkgeworICAgICAgICAgICAgcE9iamVjdDJEZXZpY2UtPlRyYW5zZm9ybShwUG9pbnRzW2ldLm1fUG9pbnRYLCBwUG9pbnRzW2ldLm1fUG9pbnRZLCB4LCB5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHggPSBwUG9pbnRzW2ldLm1fUG9pbnRYOworICAgICAgICAgICAgeSA9IHBQb2ludHNbaV0ubV9Qb2ludFk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHggPiA1MDAwMCAqIDEuMGYpIHsKKyAgICAgICAgICAgIHBvaW50c1tpXS5YID0gNTAwMDAgKiAxLjBmOworICAgICAgICB9CisgICAgICAgIGlmICh4IDwgLTUwMDAwICogMS4wZikgeworICAgICAgICAgICAgcG9pbnRzW2ldLlggPSAtNTAwMDAgKiAxLjBmOworICAgICAgICB9CisgICAgICAgIGlmICh5ID4gNTAwMDAgKiAxLjBmKSB7CisgICAgICAgICAgICBwb2ludHNbaV0uWSA9IDUwMDAwICogMS4wZjsKKyAgICAgICAgfQorICAgICAgICBpZiAoeSA8IC01MDAwMCAqIDEuMGYpIHsKKyAgICAgICAgICAgIHBvaW50c1tpXS5ZID0gLTUwMDAwICogMS4wZjsKKyAgICAgICAgfQorICAgICAgICBpbnQgcG9pbnRfdHlwZSA9IHBQb2ludHNbaV0ubV9GbGFnICYgRlhQVF9UWVBFOworICAgICAgICBpZihwb2ludF90eXBlID09IEZYUFRfTU9WRVRPKSB7CisgICAgICAgICAgICB0eXBlc1tpXSA9IFBhdGhQb2ludFR5cGVTdGFydDsKKyAgICAgICAgICAgIG5TdWJQYXRoZXMgKys7CisgICAgICAgICAgICBiU3ViQ2xvc2UgPSBGQUxTRTsKKyAgICAgICAgICAgIHN0YXJ0cG9pbnQgPSBpOworICAgICAgICB9IGVsc2UgaWYgKHBvaW50X3R5cGUgPT0gRlhQVF9MSU5FVE8pIHsKKyAgICAgICAgICAgIHR5cGVzW2ldID0gUGF0aFBvaW50VHlwZUxpbmU7CisgICAgICAgICAgICBpZiAocFBvaW50c1tpIC0gMV0ubV9GbGFnID09IEZYUFRfTU9WRVRPICYmIChpID09IG5Qb2ludHMgLSAxIHx8IHBQb2ludHNbaSArIDFdLm1fRmxhZyA9PSBGWFBUX01PVkVUTykgJiYKKyAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2ldLlkgPT0gcG9pbnRzW2kgLSAxXS5ZICYmIHBvaW50c1tpXS5YID09IHBvaW50c1tpIC0gMV0uWCkgeworICAgICAgICAgICAgICAgIHBvaW50c1tpXS5YICs9IDAuMDFmOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFiU21vb3RoICYmIHBvaW50c1tpXS5YICE9IHBvaW50c1tpIC0gMV0uWCAmJiBwb2ludHNbaV0uWSAhPSBwb2ludHNbaSAtIDFdLlkpIHsKKyAgICAgICAgICAgICAgICBiU21vb3RoID0gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChwb2ludF90eXBlID09IEZYUFRfQkVaSUVSVE8pCXsKKyAgICAgICAgICAgIHR5cGVzW2ldID0gUGF0aFBvaW50VHlwZUJlemllcjsKKyAgICAgICAgICAgIGJTbW9vdGggPSBUUlVFOworICAgICAgICB9CisgICAgICAgIGlmIChwUG9pbnRzW2ldLm1fRmxhZyAmIEZYUFRfQ0xPU0VGSUdVUkUpIHsKKyAgICAgICAgICAgIGlmIChiU3ViQ2xvc2UpIHsKKyAgICAgICAgICAgICAgICB0eXBlc1twb3Nfc3ViY2xvc2VdICY9IH5QYXRoUG9pbnRUeXBlQ2xvc2VTdWJwYXRoOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBiU3ViQ2xvc2UgPSBUUlVFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcG9zX3N1YmNsb3NlID0gaTsKKyAgICAgICAgICAgIHR5cGVzW2ldIHw9IFBhdGhQb2ludFR5cGVDbG9zZVN1YnBhdGg7CisgICAgICAgICAgICBpZiAoIWJTbW9vdGggJiYgcG9pbnRzW2ldLlggIT0gcG9pbnRzW3N0YXJ0cG9pbnRdLlggJiYgcG9pbnRzW2ldLlkgIT0gcG9pbnRzW3N0YXJ0cG9pbnRdLlkpIHsKKyAgICAgICAgICAgICAgICBiU21vb3RoID0gVFJVRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZmlsbF9tb2RlICYgRlhGSUxMX05PUEFUSFNNT09USCkgeworICAgICAgICBiU21vb3RoID0gRkFMU0U7CisgICAgICAgIENhbGxGdW5jKEdkaXBTZXRTbW9vdGhpbmdNb2RlKShwR3JhcGhpY3MsIFNtb290aGluZ01vZGVOb25lKTsKKyAgICB9IGVsc2UgaWYgKCEoZmlsbF9tb2RlICYgRlhGSUxMX0ZVTExDT1ZFUikpIHsKKyAgICAgICAgaWYgKCFiU21vb3RoICYmIChmaWxsX21vZGUgJiAzKSkgeworICAgICAgICAgICAgYlNtb290aCA9IFRSVUU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJTbW9vdGggfHwgcEdyYXBoU3RhdGUgJiYgcEdyYXBoU3RhdGUtPm1fTGluZVdpZHRoID4gMikgeworICAgICAgICAgICAgQ2FsbEZ1bmMoR2RpcFNldFNtb290aGluZ01vZGUpKHBHcmFwaGljcywgU21vb3RoaW5nTW9kZUFudGlBbGlhcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgaW50IG5ld19maWxsX21vZGUgPSBmaWxsX21vZGUgJiAzOworICAgIGlmIChuUG9pbnRzID09IDQgJiYgcEdyYXBoU3RhdGUgPT0gTlVMTCkgeworICAgICAgICBpbnQgdjEsIHYyOworICAgICAgICBpZiAoSXNTbWFsbFRyaWFuZ2xlKHBvaW50cywgcE9iamVjdDJEZXZpY2UsIHYxLCB2MikpIHsKKyAgICAgICAgICAgIEdwUGVuKiBwUGVuID0gTlVMTDsKKyAgICAgICAgICAgIENhbGxGdW5jKEdkaXBDcmVhdGVQZW4xKShmaWxsX2FyZ2IsIDEuMGYsIFVuaXRQaXhlbCwgJnBQZW4pOworICAgICAgICAgICAgQ2FsbEZ1bmMoR2RpcERyYXdMaW5lSSkocEdyYXBoaWNzLCBwUGVuLCBGWFNZU19yb3VuZChwb2ludHNbdjFdLlgpLCBGWFNZU19yb3VuZChwb2ludHNbdjFdLlkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhTWVNfcm91bmQocG9pbnRzW3YyXS5YKSwgRlhTWVNfcm91bmQocG9pbnRzW3YyXS5ZKSk7CisgICAgICAgICAgICBDYWxsRnVuYyhHZGlwRGVsZXRlUGVuKShwUGVuKTsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9CisgICAgfQorICAgIEdwUGF0aCogcEdwUGF0aCA9IE5VTEw7CisgICAgQ2FsbEZ1bmMoR2RpcENyZWF0ZVBhdGgyKShwb2ludHMsIHR5cGVzLCBuUG9pbnRzLCBHZGlGaWxsVHlwZTJHZGlwKG5ld19maWxsX21vZGUpLCAmcEdwUGF0aCk7CisgICAgaWYgKCFwR3BQYXRoKSB7CisgICAgICAgIGlmIChwTWF0cml4KSB7CisgICAgICAgICAgICBDYWxsRnVuYyhHZGlwRGVsZXRlTWF0cml4KShwTWF0cml4KTsKKyAgICAgICAgfQorICAgICAgICBGWF9GcmVlKHBvaW50cyk7CisgICAgICAgIEZYX0ZyZWUodHlwZXMpOworICAgICAgICBDYWxsRnVuYyhHZGlwRGVsZXRlR3JhcGhpY3MpKHBHcmFwaGljcyk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKG5ld19maWxsX21vZGUpIHsKKyAgICAgICAgR3BCcnVzaCogcEJydXNoID0gX0dkaXBDcmVhdGVCcnVzaChmaWxsX2FyZ2IpOworICAgICAgICBDYWxsRnVuYyhHZGlwU2V0UGF0aEZpbGxNb2RlKShwR3BQYXRoLCBHZGlGaWxsVHlwZTJHZGlwKG5ld19maWxsX21vZGUpKTsKKyAgICAgICAgQ2FsbEZ1bmMoR2RpcEZpbGxQYXRoKShwR3JhcGhpY3MsIHBCcnVzaCwgcEdwUGF0aCk7CisgICAgICAgIENhbGxGdW5jKEdkaXBEZWxldGVCcnVzaCkocEJydXNoKTsKKyAgICB9CisgICAgaWYgKHBHcmFwaFN0YXRlICYmIHN0cm9rZV9hcmdiKSB7CisgICAgICAgIEdwUGVuKiBwUGVuID0gX0dkaXBDcmVhdGVQZW4ocEdyYXBoU3RhdGUsIHBPYmplY3QyRGV2aWNlLCBzdHJva2VfYXJnYiwgZmlsbF9tb2RlICYgRlhfU1RST0tFX1RFWFRfTU9ERSk7CisgICAgICAgIGlmIChuU3ViUGF0aGVzID09IDEpIHsKKyAgICAgICAgICAgIENhbGxGdW5jKEdkaXBEcmF3UGF0aCkocEdyYXBoaWNzLCBwUGVuLCBwR3BQYXRoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBpU3RhcnQgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuUG9pbnRzOyBpICsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGkgPT0gblBvaW50cyAtIDEgfHwgdHlwZXNbaSArIDFdID09IFBhdGhQb2ludFR5cGVTdGFydCkgeworICAgICAgICAgICAgICAgICAgICBHcFBhdGgqIHBTdWJQYXRoOworICAgICAgICAgICAgICAgICAgICBDYWxsRnVuYyhHZGlwQ3JlYXRlUGF0aDIpKHBvaW50cyArIGlTdGFydCwgdHlwZXMgKyBpU3RhcnQsIGkgLSBpU3RhcnQgKyAxLCBHZGlGaWxsVHlwZTJHZGlwKG5ld19maWxsX21vZGUpLCAmcFN1YlBhdGgpOworICAgICAgICAgICAgICAgICAgICBpU3RhcnQgPSBpICsgMTsKKyAgICAgICAgICAgICAgICAgICAgQ2FsbEZ1bmMoR2RpcERyYXdQYXRoKShwR3JhcGhpY3MsIHBQZW4sIHBTdWJQYXRoKTsKKyAgICAgICAgICAgICAgICAgICAgQ2FsbEZ1bmMoR2RpcERlbGV0ZVBhdGgpKHBTdWJQYXRoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQ2FsbEZ1bmMoR2RpcERlbGV0ZVBlbikocFBlbik7CisgICAgfQorICAgIGlmIChwTWF0cml4KSB7CisgICAgICAgIENhbGxGdW5jKEdkaXBEZWxldGVNYXRyaXgpKHBNYXRyaXgpOworICAgIH0KKyAgICBGWF9GcmVlKHBvaW50cyk7CisgICAgRlhfRnJlZSh0eXBlcyk7CisgICAgQ2FsbEZ1bmMoR2RpcERlbGV0ZVBhdGgpKHBHcFBhdGgpOworICAgIENhbGxGdW5jKEdkaXBEZWxldGVHcmFwaGljcykocEdyYXBoaWNzKTsKKyAgICByZXR1cm4gVFJVRTsKK30KK2NsYXNzIEdwU3RyZWFtIDogcHVibGljIElTdHJlYW0sIHB1YmxpYyBDRlhfT2JqZWN0Cit7CisgICAgTE9ORwltX1JlZkNvdW50OworICAgIGludCAgICAgbV9SZWFkUG9zOworICAgIENGWF9CeXRlVGV4dEJ1ZgltX0ludGVyU3RyZWFtOworcHVibGljOgorICAgIEdwU3RyZWFtKCkKKyAgICB7CisgICAgICAgIG1fUmVmQ291bnQgPSAxOworICAgICAgICBtX1JlYWRQb3MgPSAwOworICAgIH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUKKyAgICBRdWVyeUludGVyZmFjZShSRUZJSUQgaWlkLCB2b2lkICoqIHBwdk9iamVjdCkKKyAgICB7CisgICAgICAgIGlmIChpaWQgPT0gX191dWlkb2YoSVVua25vd24pIHx8IGlpZCA9PSBfX3V1aWRvZihJU3RyZWFtKSB8fAorICAgICAgICAgICAgICAgIGlpZCA9PSBfX3V1aWRvZihJU2VxdWVudGlhbFN0cmVhbSkpCXsKKyAgICAgICAgICAgICpwcHZPYmplY3QgPSBzdGF0aWNfY2FzdDxJU3RyZWFtKj4odGhpcyk7CisgICAgICAgICAgICBBZGRSZWYoKTsKKyAgICAgICAgICAgIHJldHVybiBTX09LOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIEVfTk9JTlRFUkZBQ0U7CisgICAgICAgIH0KKyAgICB9CisgICAgdmlydHVhbCBVTE9ORyBTVERNRVRIT0RDQUxMVFlQRSBBZGRSZWYodm9pZCkKKyAgICB7CisgICAgICAgIHJldHVybiAoVUxPTkcpSW50ZXJsb2NrZWRJbmNyZW1lbnQoJm1fUmVmQ291bnQpOworICAgIH0KKyAgICB2aXJ0dWFsIFVMT05HIFNURE1FVEhPRENBTExUWVBFIFJlbGVhc2Uodm9pZCkKKyAgICB7CisgICAgICAgIFVMT05HIHJlcyA9IChVTE9ORykgSW50ZXJsb2NrZWREZWNyZW1lbnQoJm1fUmVmQ291bnQpOworICAgICAgICBpZiAocmVzID09IDApIHsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorcHVibGljOgorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBSZWFkKHZvaWQqIE91dHB1dCwgVUxPTkcgY2IsIFVMT05HKiBwY2JSZWFkKQorICAgIHsKKyAgICAgICAgc2l6ZV90CWJ5dGVzX2xlZnQ7CisgICAgICAgIHNpemVfdAlieXRlc19vdXQ7CisgICAgICAgIGlmIChwY2JSZWFkICE9IE5VTEwpIHsKKyAgICAgICAgICAgICpwY2JSZWFkID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9SZWFkUG9zID09IG1fSW50ZXJTdHJlYW0uR2V0TGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHJldHVybiBIUkVTVUxUX0ZST01fV0lOMzIoRVJST1JfRU5EX09GX01FRElBKTsKKyAgICAgICAgfQorICAgICAgICBieXRlc19sZWZ0ID0gbV9JbnRlclN0cmVhbS5HZXRMZW5ndGgoKSAtIG1fUmVhZFBvczsKKyAgICAgICAgYnl0ZXNfb3V0ID0gRlhfTUlOKGNiLCBieXRlc19sZWZ0KTsKKyAgICAgICAgRlhTWVNfbWVtY3B5MzIoT3V0cHV0LCBtX0ludGVyU3RyZWFtLkdldEJ1ZmZlcigpICsgbV9SZWFkUG9zLCBieXRlc19vdXQpOworICAgICAgICBtX1JlYWRQb3MgKz0gKEZYX0lOVDMyKWJ5dGVzX291dDsKKyAgICAgICAgaWYgKHBjYlJlYWQgIT0gTlVMTCkgeworICAgICAgICAgICAgKnBjYlJlYWQgPSAoVUxPTkcpYnl0ZXNfb3V0OworICAgICAgICB9CisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV3JpdGUodm9pZCBjb25zdCogSW5wdXQsIFVMT05HIGNiLCBVTE9ORyogcGNiV3JpdHRlbikKKyAgICB7CisgICAgICAgIGlmIChjYiA8PSAwKSB7CisgICAgICAgICAgICBpZiAocGNiV3JpdHRlbiAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgKnBjYldyaXR0ZW4gPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgICAgIH0KKyAgICAgICAgbV9JbnRlclN0cmVhbS5JbnNlcnRCbG9jayhtX0ludGVyU3RyZWFtLkdldExlbmd0aCgpLCBJbnB1dCwgY2IpOworICAgICAgICBpZiAocGNiV3JpdHRlbiAhPSBOVUxMKSB7CisgICAgICAgICAgICAqcGNiV3JpdHRlbiA9IGNiOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTX09LOworICAgIH0KK3B1YmxpYzoKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2V0U2l6ZShVTEFSR0VfSU5URUdFUikKKyAgICB7CisgICAgICAgIHJldHVybiBFX05PVElNUEw7CisgICAgfQorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBDb3B5VG8oSVN0cmVhbSosIFVMQVJHRV9JTlRFR0VSLCBVTEFSR0VfSU5URUdFUiosIFVMQVJHRV9JTlRFR0VSKikKKyAgICB7CisgICAgICAgIHJldHVybiBFX05PVElNUEw7CisgICAgfQorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBDb21taXQoRFdPUkQpCisgICAgeworICAgICAgICByZXR1cm4gRV9OT1RJTVBMOworICAgIH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgUmV2ZXJ0KHZvaWQpCisgICAgeworICAgICAgICByZXR1cm4gRV9OT1RJTVBMOworICAgIH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgTG9ja1JlZ2lvbihVTEFSR0VfSU5URUdFUiwgVUxBUkdFX0lOVEVHRVIsIERXT1JEKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVfTk9USU1QTDsKKyAgICB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFVubG9ja1JlZ2lvbihVTEFSR0VfSU5URUdFUiwgVUxBUkdFX0lOVEVHRVIsIERXT1JEKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEVfTk9USU1QTDsKKyAgICB9CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIENsb25lKElTdHJlYW0gKiopCisgICAgeworICAgICAgICByZXR1cm4gRV9OT1RJTVBMOworICAgIH0KKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgU2VlayhMQVJHRV9JTlRFR0VSIGxpRGlzdGFuY2VUb01vdmUsIERXT1JEIGR3T3JpZ2luLCBVTEFSR0VfSU5URUdFUiogbHBOZXdGaWxlUG9pbnRlcikKKyAgICB7CisgICAgICAgIGxvbmcJc3RhcnQgPSAwOworICAgICAgICBsb25nCW5ld19yZWFkX3Bvc2l0aW9uOworICAgICAgICBzd2l0Y2goZHdPcmlnaW4pIHsKKyAgICAgICAgICAgIGNhc2UgU1RSRUFNX1NFRUtfU0VUOgorICAgICAgICAgICAgICAgIHN0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU1RSRUFNX1NFRUtfQ1VSOgorICAgICAgICAgICAgICAgIHN0YXJ0ID0gbV9SZWFkUG9zOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTVFJFQU1fU0VFS19FTkQ6CisgICAgICAgICAgICAgICAgc3RhcnQgPSBtX0ludGVyU3RyZWFtLkdldExlbmd0aCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gU1RHX0VfSU5WQUxJREZVTkNUSU9OOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG5ld19yZWFkX3Bvc2l0aW9uID0gc3RhcnQgKyAobG9uZylsaURpc3RhbmNlVG9Nb3ZlLlF1YWRQYXJ0OworICAgICAgICBpZiAobmV3X3JlYWRfcG9zaXRpb24gPCAwIHx8IG5ld19yZWFkX3Bvc2l0aW9uID4gbV9JbnRlclN0cmVhbS5HZXRMZW5ndGgoKSkgeworICAgICAgICAgICAgcmV0dXJuIFNUR19FX1NFRUtFUlJPUjsKKyAgICAgICAgfQorICAgICAgICBtX1JlYWRQb3MgPSBuZXdfcmVhZF9wb3NpdGlvbjsKKyAgICAgICAgaWYgKGxwTmV3RmlsZVBvaW50ZXIgIT0gTlVMTCkgeworICAgICAgICAgICAgbHBOZXdGaWxlUG9pbnRlci0+UXVhZFBhcnQgPSBtX1JlYWRQb3M7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFNfT0s7CisgICAgfQorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBTdGF0KFNUQVRTVEcqIHBTdGF0c3RnLCBEV09SRCBncmZTdGF0RmxhZykKKyAgICB7CisgICAgICAgIGlmIChwU3RhdHN0ZyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gU1RHX0VfSU5WQUxJREZVTkNUSU9OOworICAgICAgICB9CisgICAgICAgIFplcm9NZW1vcnkocFN0YXRzdGcsIHNpemVvZihTVEFUU1RHKSk7CisgICAgICAgIHBTdGF0c3RnLT5jYlNpemUuUXVhZFBhcnQgPSBtX0ludGVyU3RyZWFtLkdldExlbmd0aCgpOworICAgICAgICByZXR1cm4gU19PSzsKKyAgICB9Cit9OwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEJJVE1BUElORk8qCQlwYm1pOworICAgIGludAkJCQlTdHJpZGU7CisgICAgTFBCWVRFCQkJcFNjYW4wOworICAgIEdwQml0bWFwKgkJcEJpdG1hcDsKKyAgICBCaXRtYXBEYXRhKgkJcEJpdG1hcERhdGE7CisgICAgR3BTdHJlYW0qICAgICAgIHBTdHJlYW07Cit9IFBSRVZJRVczX0RJQklUTUFQOworc3RhdGljIFBSRVZJRVczX0RJQklUTUFQKiBMb2FkRElCaXRtYXAoV0lORElCX09wZW5fQXJnc18gYXJncykKK3sKKyAgICBHcEJpdG1hcCogcEJpdG1hcDsKKyAgICBHcFN0cmVhbSogcFN0cmVhbSA9IE5VTEw7CisgICAgQ0dkaXBsdXNFeHQmIEdkaXBsdXNFeHQgPSAoKENXaW4zMlBsYXRmb3JtKilDRlhfR0VNb2R1bGU6OkdldCgpLT5HZXRQbGF0Zm9ybURhdGEoKSktPm1fR2RpcGx1c0V4dDsKKyAgICBTdGF0dXMgc3RhdHVzID0gT2s7CisgICAgaWYgKGFyZ3MuZmxhZ3MgPT0gV0lORElCX09QRU5fUEFUSE5BTUUpIHsKKyAgICAgICAgc3RhdHVzID0gQ2FsbEZ1bmMoR2RpcENyZWF0ZUJpdG1hcEZyb21GaWxlSUNNKSgod2NoYXJfdCopYXJncy5wYXRoX25hbWUsICZwQml0bWFwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoYXJncy5tZW1vcnlfc2l6ZSA9PSAwIHx8ICFhcmdzLm1lbW9yeV9iYXNlKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBwU3RyZWFtID0gRlhfTkVXIEdwU3RyZWFtOworICAgICAgICBpZiAoIXBTdHJlYW0pIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHBTdHJlYW0tPldyaXRlKGFyZ3MubWVtb3J5X2Jhc2UsIChVTE9ORylhcmdzLm1lbW9yeV9zaXplLCBOVUxMKTsKKyAgICAgICAgc3RhdHVzID0gQ2FsbEZ1bmMoR2RpcENyZWF0ZUJpdG1hcEZyb21TdHJlYW1JQ00pKHBTdHJlYW0sICZwQml0bWFwKTsKKyAgICB9CisgICAgaWYgKHN0YXR1cyAhPSBPaykgeworICAgICAgICBpZiAocFN0cmVhbSkgeworICAgICAgICAgICAgcFN0cmVhbS0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBVSU5UIGhlaWdodCwgd2lkdGg7CisgICAgQ2FsbEZ1bmMoR2RpcEdldEltYWdlSGVpZ2h0KShwQml0bWFwLCAmaGVpZ2h0KTsKKyAgICBDYWxsRnVuYyhHZGlwR2V0SW1hZ2VXaWR0aCkocEJpdG1hcCwgJndpZHRoKTsKKyAgICBQaXhlbEZvcm1hdCBwaXhlbF9mb3JtYXQ7CisgICAgQ2FsbEZ1bmMoR2RpcEdldEltYWdlUGl4ZWxGb3JtYXQpKHBCaXRtYXAsICZwaXhlbF9mb3JtYXQpOworICAgIGludCBpbmZvX3NpemUgPSBzaXplb2YoQklUTUFQSU5GT0hFQURFUik7CisgICAgaW50IGJwcCA9IDI0OworICAgIGludCBkZXN0X3BpeGVsX2Zvcm1hdCA9IFBpeGVsRm9ybWF0MjRicHBSR0I7CisgICAgaWYgKHBpeGVsX2Zvcm1hdCA9PSBQaXhlbEZvcm1hdDFicHBJbmRleGVkKSB7CisgICAgICAgIGluZm9fc2l6ZSArPSA4OworICAgICAgICBicHAgPSAxOworICAgICAgICBkZXN0X3BpeGVsX2Zvcm1hdCA9IFBpeGVsRm9ybWF0MWJwcEluZGV4ZWQ7CisgICAgfSBlbHNlIGlmIChwaXhlbF9mb3JtYXQgPT0gUGl4ZWxGb3JtYXQ4YnBwSW5kZXhlZCkgeworICAgICAgICBpbmZvX3NpemUgKz0gMTAyNDsKKyAgICAgICAgYnBwID0gODsKKyAgICAgICAgZGVzdF9waXhlbF9mb3JtYXQgPSBQaXhlbEZvcm1hdDhicHBJbmRleGVkOworICAgIH0gZWxzZSBpZiAocGl4ZWxfZm9ybWF0ID09IFBpeGVsRm9ybWF0MzJicHBBUkdCKSB7CisgICAgICAgIGJwcCA9IDMyOworICAgICAgICBkZXN0X3BpeGVsX2Zvcm1hdCA9IFBpeGVsRm9ybWF0MzJicHBBUkdCOworICAgIH0KKyAgICBMUEJZVEUgYnVmID0gRlhfQWxsb2MoQllURSwgaW5mb19zaXplKTsKKyAgICBpZiAoIWJ1ZikgeworICAgICAgICBpZiAocFN0cmVhbSkgeworICAgICAgICAgICAgcFN0cmVhbS0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBCSVRNQVBJTkZPSEVBREVSKiBwYm1paCA9IChCSVRNQVBJTkZPSEVBREVSKilidWY7CisgICAgRlhTWVNfbWVtc2V0MzIoYnVmLCAwLCBpbmZvX3NpemUpOworICAgIHBibWloLT5iaUJpdENvdW50ID0gYnBwOworICAgIHBibWloLT5iaUNvbXByZXNzaW9uID0gQklfUkdCOworICAgIHBibWloLT5iaUhlaWdodCA9IC0oaW50KWhlaWdodDsKKyAgICBwYm1paC0+YmlQbGFuZXMgPSAxOworICAgIHBibWloLT5iaVdpZHRoID0gd2lkdGg7CisgICAgUmVjdCByZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAgIEJpdG1hcERhdGEqIHBCaXRtYXBEYXRhID0gRlhfQWxsb2MoQml0bWFwRGF0YSwgMSk7CisgICAgaWYgKCFwQml0bWFwRGF0YSkgeworICAgICAgICBpZiAocFN0cmVhbSkgeworICAgICAgICAgICAgcFN0cmVhbS0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBDYWxsRnVuYyhHZGlwQml0bWFwTG9ja0JpdHMpKHBCaXRtYXAsICZyZWN0LCBJbWFnZUxvY2tNb2RlUmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfcGl4ZWxfZm9ybWF0LCBwQml0bWFwRGF0YSk7CisgICAgaWYgKHBpeGVsX2Zvcm1hdCA9PSBQaXhlbEZvcm1hdDFicHBJbmRleGVkIHx8IHBpeGVsX2Zvcm1hdCA9PSBQaXhlbEZvcm1hdDhicHBJbmRleGVkKSB7CisgICAgICAgIERXT1JEKiBwcGFsID0gKERXT1JEKikoYnVmICsgc2l6ZW9mKEJJVE1BUElORk9IRUFERVIpKTsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIFVJTlQgZmxhZ3M7CisgICAgICAgICAgICBVSU5UIENvdW50OworICAgICAgICAgICAgRFdPUkQgRW50cmllc1syNTZdOworICAgICAgICB9IHBhbDsKKyAgICAgICAgaW50IHNpemUgPSAwOworICAgICAgICBDYWxsRnVuYyhHZGlwR2V0SW1hZ2VQYWxldHRlU2l6ZSkocEJpdG1hcCwgJnNpemUpOworICAgICAgICBDYWxsRnVuYyhHZGlwR2V0SW1hZ2VQYWxldHRlKShwQml0bWFwLCAoQ29sb3JQYWxldHRlKikmcGFsLCBzaXplKTsKKyAgICAgICAgaW50IGVudHJpZXMgPSBwaXhlbF9mb3JtYXQgPT0gUGl4ZWxGb3JtYXQxYnBwSW5kZXhlZCA/IDIgOiAyNTY7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZW50cmllczsgaSArKykgeworICAgICAgICAgICAgcHBhbFtpXSA9IHBhbC5FbnRyaWVzW2ldICYgMHgwMGZmZmZmZjsKKyAgICAgICAgfQorICAgIH0KKyAgICBQUkVWSUVXM19ESUJJVE1BUCogcEluZm8gPSBGWF9BbGxvYyhQUkVWSUVXM19ESUJJVE1BUCwgMSk7CisgICAgaWYgKCFwSW5mbykgeworICAgICAgICBpZiAocFN0cmVhbSkgeworICAgICAgICAgICAgcFN0cmVhbS0+UmVsZWFzZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwSW5mby0+cGJtaSA9IChCSVRNQVBJTkZPKilidWY7CisgICAgcEluZm8tPnBTY2FuMCA9IChMUEJZVEUpcEJpdG1hcERhdGEtPlNjYW4wOworICAgIHBJbmZvLT5TdHJpZGUgPSBwQml0bWFwRGF0YS0+U3RyaWRlOworICAgIHBJbmZvLT5wQml0bWFwID0gcEJpdG1hcDsKKyAgICBwSW5mby0+cEJpdG1hcERhdGEgPSBwQml0bWFwRGF0YTsKKyAgICBwSW5mby0+cFN0cmVhbSA9IHBTdHJlYW07CisgICAgcmV0dXJuIHBJbmZvOworfQorc3RhdGljIHZvaWQgRnJlZURJQml0bWFwKFBSRVZJRVczX0RJQklUTUFQKiBwSW5mbykKK3sKKyAgICBDR2RpcGx1c0V4dCYgR2RpcGx1c0V4dCA9ICgoQ1dpbjMyUGxhdGZvcm0qKUNGWF9HRU1vZHVsZTo6R2V0KCktPkdldFBsYXRmb3JtRGF0YSgpKS0+bV9HZGlwbHVzRXh0OworICAgIENhbGxGdW5jKEdkaXBCaXRtYXBVbmxvY2tCaXRzKShwSW5mby0+cEJpdG1hcCwgcEluZm8tPnBCaXRtYXBEYXRhKTsKKyAgICBDYWxsRnVuYyhHZGlwRGlzcG9zZUltYWdlKShwSW5mby0+cEJpdG1hcCk7CisgICAgRlhfRnJlZShwSW5mby0+cEJpdG1hcERhdGEpOworICAgIEZYX0ZyZWUoKExQQllURSlwSW5mby0+cGJtaSk7CisgICAgaWYgKHBJbmZvLT5wU3RyZWFtKSB7CisgICAgICAgIHBJbmZvLT5wU3RyZWFtLT5SZWxlYXNlKCk7CisgICAgfQorICAgIEZYX0ZyZWUocEluZm8pOworfQorQ0ZYX0RJQml0bWFwKiBfRlhfV2luZG93c0RJQl9Mb2FkRnJvbUJ1ZihCSVRNQVBJTkZPKiBwYm1pLCBMUFZPSUQgcERhdGEsIEZYX0JPT0wgYkFscGhhKTsKK0NGWF9ESUJpdG1hcCogQ0dkaXBsdXNFeHQ6OkxvYWRESUJpdG1hcChXSU5ESUJfT3Blbl9BcmdzXyBhcmdzKQoreworICAgIFBSRVZJRVczX0RJQklUTUFQKiBwSW5mbyA9IDo6TG9hZERJQml0bWFwKGFyZ3MpOworICAgIGlmIChwSW5mbyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpbnQgaGVpZ2h0ID0gYWJzKHBJbmZvLT5wYm1pLT5ibWlIZWFkZXIuYmlIZWlnaHQpOworICAgIGludCB3aWR0aCA9IHBJbmZvLT5wYm1pLT5ibWlIZWFkZXIuYmlXaWR0aDsKKyAgICBpbnQgZGVzdF9waXRjaCA9ICh3aWR0aCAqIHBJbmZvLT5wYm1pLT5ibWlIZWFkZXIuYmlCaXRDb3VudCArIDMxKSAvIDMyICogNDsKKyAgICBMUEJZVEUgcERhdGEgPSBGWF9BbGxvYyhCWVRFLCBkZXN0X3BpdGNoICogaGVpZ2h0KTsKKyAgICBpZiAocERhdGEgPT0gTlVMTCkgeworICAgICAgICBGcmVlRElCaXRtYXAocEluZm8pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGRlc3RfcGl0Y2ggPT0gcEluZm8tPlN0cmlkZSkgeworICAgICAgICBGWFNZU19tZW1jcHkzMihwRGF0YSwgcEluZm8tPnBTY2FuMCwgZGVzdF9waXRjaCAqIGhlaWdodCk7CisgICAgfSBlbHNlIGZvciAoaW50IGkgPSAwOyBpIDwgaGVpZ2h0OyBpICsrKSB7CisgICAgICAgICAgICBGWFNZU19tZW1jcHkzMihwRGF0YSArIGRlc3RfcGl0Y2ggKiBpLCBwSW5mby0+cFNjYW4wICsgcEluZm8tPlN0cmlkZSAqIGksIGRlc3RfcGl0Y2gpOworICAgICAgICB9CisgICAgQ0ZYX0RJQml0bWFwKiBwRElCaXRtYXAgPSBfRlhfV2luZG93c0RJQl9Mb2FkRnJvbUJ1ZihwSW5mby0+cGJtaSwgcERhdGEsIHBJbmZvLT5wYm1pLT5ibWlIZWFkZXIuYmlCaXRDb3VudCA9PSAzMik7CisgICAgRlhfRnJlZShwRGF0YSk7CisgICAgRnJlZURJQml0bWFwKHBJbmZvKTsKKyAgICByZXR1cm4gcERJQml0bWFwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGdlL3dpbjMyL2Z4X3dpbjMyX3ByaW50LmNwcCBiL2NvcmUvc3JjL2Z4Z2Uvd2luMzIvZnhfd2luMzJfcHJpbnQuY3BwCmluZGV4IGMwOGM4ZTcuLjllN2EwYWEgMTAwNjQ0Ci0tLSBhL2NvcmUvc3JjL2Z4Z2Uvd2luMzIvZnhfd2luMzJfcHJpbnQuY3BwCisrKyBiL2NvcmUvc3JjL2Z4Z2Uvd2luMzIvZnhfd2luMzJfcHJpbnQuY3BwCkBAIC0xLDQyNiArMSw0MjYgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2UuaCINCi0jaWYgX0ZYX09TXyA9PSBfRlhfV0lOMzJfREVTS1RPUF8gfHwgX0ZYX09TXyA9PSBfRlhfV0lONjRfDQotI2luY2x1ZGUgPHdpbmRvd3MuaD4NCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9meGdlL2Z4X2dlX3dpbjMyLmgiDQotI2luY2x1ZGUgIndpbjMyX2ludC5oIg0KLSNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZnJlZXR5cGUuaCINCi0jaW5jbHVkZSAiLi4vZ2UvdGV4dF9pbnQuaCINCi0jaW5jbHVkZSAiLi4vZGliL2RpYl9pbnQuaCINCi0jZGVmaW5lIFNJWkVUSFJFU0hPTEQgMTAwMA0KLSNkZWZpbmUgT1VUUFVUUFNMRU4gNDA5Ng0KLUNHZGlQcmludGVyRHJpdmVyOjpDR2RpUHJpbnRlckRyaXZlcihIREMgaERDKSA6IENHZGlEZXZpY2VEcml2ZXIoaERDLCBGWERDX1BSSU5URVIpDQotew0KLSAgICBtX0hvcnpTaXplID0gOjpHZXREZXZpY2VDYXBzKG1faERDLCBIT1JaU0laRSk7DQotICAgIG1fVmVydFNpemUgPSA6OkdldERldmljZUNhcHMobV9oREMsIFZFUlRTSVpFKTsNCi0gICAgbV9iU3VwcG9ydFJPUCA9IFRSVUU7DQotfQ0KLWludCBDR2RpUHJpbnRlckRyaXZlcjo6R2V0RGV2aWNlQ2FwcyhpbnQgY2Fwc19pZCkNCi17DQotICAgIGlmIChjYXBzX2lkID09IEZYRENfSE9SWl9TSVpFKSB7DQotICAgICAgICByZXR1cm4gbV9Ib3J6U2l6ZTsNCi0gICAgfQ0KLSAgICBpZiAoY2Fwc19pZCA9PSBGWERDX1ZFUlRfU0laRSkgew0KLSAgICAgICAgcmV0dXJuIG1fVmVydFNpemU7DQotICAgIH0NCi0gICAgcmV0dXJuIENHZGlEZXZpY2VEcml2ZXI6OkdldERldmljZUNhcHMoY2Fwc19pZCk7DQotfQ0KLUZYX0JPT0wgQ0dkaVByaW50ZXJEcml2ZXI6OlNldERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwU291cmNlLCBGWF9EV09SRCBjb2xvciwgY29uc3QgRlhfUkVDVCogcFNyY1JlY3QsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgYmxlbmRfdHlwZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICBpZiAocFNvdXJjZS0+SXNBbHBoYU1hc2soKSkgew0KLSAgICAgICAgRlhfUkVDVCBjbGlwX3JlY3QobGVmdCwgdG9wLCBsZWZ0ICsgcFNyY1JlY3QtPldpZHRoKCksIHRvcCArIHBTcmNSZWN0LT5IZWlnaHQoKSk7DQotICAgICAgICByZXR1cm4gU3RyZXRjaERJQml0cyhwU291cmNlLCBjb2xvciwgbGVmdCAtIHBTcmNSZWN0LT5sZWZ0LCB0b3AgLSBwU3JjUmVjdC0+dG9wLCBwU291cmNlLT5HZXRXaWR0aCgpLCBwU291cmNlLT5HZXRIZWlnaHQoKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbGlwX3JlY3QsIDAsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0sIEZYRElCX0JMRU5EX05PUk1BTCk7DQotICAgIH0NCi0gICAgQVNTRVJUKHBTb3VyY2UgIT0gTlVMTCAmJiAhcFNvdXJjZS0+SXNBbHBoYU1hc2soKSAmJiBwU3JjUmVjdCAhPSBOVUxMKTsNCi0gICAgQVNTRVJUKGJsZW5kX3R5cGUgPT0gRlhESUJfQkxFTkRfTk9STUFMKTsNCi0gICAgaWYgKHBTb3VyY2UtPkhhc0FscGhhKCkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDRlhfRElCRXh0cmFjdG9yIHRlbXAocFNvdXJjZSk7DQotICAgIENGWF9ESUJpdG1hcCogcEJpdG1hcCA9IHRlbXA7DQotICAgIGlmIChwQml0bWFwID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICByZXR1cm4gR0RJX1NldERJQml0cyhwQml0bWFwLCBwU3JjUmVjdCwgbGVmdCwgdG9wLCBwSWNjVHJhbnNmb3JtKTsNCi19DQotRlhfQk9PTCBDR2RpUHJpbnRlckRyaXZlcjo6U3RyZXRjaERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwU291cmNlLCBGWF9EV09SRCBjb2xvciwgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLA0KLSAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgY29uc3QgRlhfUkVDVCogcENsaXBSZWN0LCBGWF9EV09SRCBmbGFncywNCi0gICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQgYmxlbmRfdHlwZSkNCi17DQotICAgIGlmIChwU291cmNlLT5Jc0FscGhhTWFzaygpKSB7DQotICAgICAgICBpbnQgYWxwaGEgPSBGWEdFVEZMQUdfQ09MT1JUWVBFKGFscGhhX2ZsYWcpID8gRlhHRVRGTEFHX0FMUEhBX0ZJTEwoYWxwaGFfZmxhZykgOiBGWEFSR0JfQShjb2xvcik7DQotICAgICAgICBpZiAocFNvdXJjZS0+R2V0QlBQKCkgIT0gMSB8fCBhbHBoYSAhPSAyNTUgfHwgIW1fYlN1cHBvcnRST1ApIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBpZiAoZGVzdF93aWR0aCA8IDAgfHwgZGVzdF9oZWlnaHQgPCAwKSB7DQotICAgICAgICAgICAgQ0ZYX0RJQml0bWFwKiBwRmxpcHBlZCA9IHBTb3VyY2UtPkZsaXBJbWFnZShkZXN0X3dpZHRoIDwgMCwgZGVzdF9oZWlnaHQgPCAwKTsNCi0gICAgICAgICAgICBpZiAocEZsaXBwZWQgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChkZXN0X3dpZHRoIDwgMCkgew0KLSAgICAgICAgICAgICAgICBkZXN0X2xlZnQgKz0gZGVzdF93aWR0aDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGRlc3RfaGVpZ2h0IDwgMCkgew0KLSAgICAgICAgICAgICAgICBkZXN0X3RvcCArPSBkZXN0X2hlaWdodDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgRlhfQk9PTCByZXQgPSBHRElfU3RyZXRjaEJpdE1hc2socEZsaXBwZWQsIGRlc3RfbGVmdCwgZGVzdF90b3AsIGFicyhkZXN0X3dpZHRoKSwgYWJzKGRlc3RfaGVpZ2h0KSwgY29sb3IsIGZsYWdzLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtKTsNCi0gICAgICAgICAgICBkZWxldGUgcEZsaXBwZWQ7DQotICAgICAgICAgICAgcmV0dXJuIHJldDsNCi0gICAgICAgIH0NCi0gICAgICAgIENGWF9ESUJFeHRyYWN0b3IgdGVtcChwU291cmNlKTsNCi0gICAgICAgIENGWF9ESUJpdG1hcCogcEJpdG1hcCA9IHRlbXA7DQotICAgICAgICBpZiAocEJpdG1hcCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIEdESV9TdHJldGNoQml0TWFzayhwQml0bWFwLCBkZXN0X2xlZnQsIGRlc3RfdG9wLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgY29sb3IsIGZsYWdzLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIEFTU0VSVChwU291cmNlICE9IE5VTEwpOw0KLSAgICAgICAgaWYgKHBTb3VyY2UtPkhhc0FscGhhKCkpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBpZiAoZGVzdF93aWR0aCA8IDAgfHwgZGVzdF9oZWlnaHQgPCAwKSB7DQotICAgICAgICAgICAgQ0ZYX0RJQml0bWFwKiBwRmxpcHBlZCA9IHBTb3VyY2UtPkZsaXBJbWFnZShkZXN0X3dpZHRoIDwgMCwgZGVzdF9oZWlnaHQgPCAwKTsNCi0gICAgICAgICAgICBpZiAocEZsaXBwZWQgPT0gTlVMTCkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChkZXN0X3dpZHRoIDwgMCkgew0KLSAgICAgICAgICAgICAgICBkZXN0X2xlZnQgKz0gZGVzdF93aWR0aDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGRlc3RfaGVpZ2h0IDwgMCkgew0KLSAgICAgICAgICAgICAgICBkZXN0X3RvcCArPSBkZXN0X2hlaWdodDsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgRlhfQk9PTCByZXQgPSBHRElfU3RyZXRjaERJQml0cyhwRmxpcHBlZCwgZGVzdF9sZWZ0LCBkZXN0X3RvcCwgYWJzKGRlc3Rfd2lkdGgpLCBhYnMoZGVzdF9oZWlnaHQpLCBmbGFncywgcEljY1RyYW5zZm9ybSk7DQotICAgICAgICAgICAgZGVsZXRlIHBGbGlwcGVkOw0KLSAgICAgICAgICAgIHJldHVybiByZXQ7DQotICAgICAgICB9DQotICAgICAgICBDRlhfRElCRXh0cmFjdG9yIHRlbXAocFNvdXJjZSk7DQotICAgICAgICBDRlhfRElCaXRtYXAqIHBCaXRtYXAgPSB0ZW1wOw0KLSAgICAgICAgaWYgKHBCaXRtYXAgPT0gTlVMTCkgew0KLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBHRElfU3RyZXRjaERJQml0cyhwQml0bWFwLCBkZXN0X2xlZnQsIGRlc3RfdG9wLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgZmxhZ3MsIHBJY2NUcmFuc2Zvcm0pOw0KLSAgICB9DQotfQ0KLXN0YXRpYyBDRlhfRElCaXRtYXAqIFRyYW5zZm9ybTFicHBCaXRtYXAoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyYywgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcERlc3RNYXRyaXgpDQotew0KLSAgICBBU1NFUlQocFNyYy0+R2V0Rm9ybWF0KCkgPT0gRlhESUJfMWJwcFJnYiB8fCBwU3JjLT5HZXRGb3JtYXQoKSA9PSBGWERJQl8xYnBwTWFzayB8fCBwU3JjLT5HZXRGb3JtYXQoKSA9PSBGWERJQl8xYnBwQ215ayk7DQotICAgIENGWF9GbG9hdFJlY3QgdW5pdF9yZWN0ID0gcERlc3RNYXRyaXgtPkdldFVuaXRSZWN0KCk7DQotICAgIEZYX1JFQ1QgZnVsbF9yZWN0ID0gdW5pdF9yZWN0LkdldE91dHRlclJlY3QoKTsNCi0gICAgaW50IGZ1bGxfbGVmdCA9IGZ1bGxfcmVjdC5sZWZ0Ow0KLSAgICBpbnQgZnVsbF90b3AgPSBmdWxsX3JlY3QudG9wOw0KLSAgICBDRlhfRElCRXh0cmFjdG9yIHNyY19iaXRtYXAocFNyYyk7DQotICAgIENGWF9ESUJpdG1hcCogcFNyY0JpdG1hcCA9IHNyY19iaXRtYXA7DQotICAgIGlmIChwU3JjQml0bWFwID09IE5VTEwpIHsNCi0gICAgICAgIHJldHVybiBOVUxMOw0KLSAgICB9DQotICAgIGludCBzcmNfd2lkdGggPSBwU3JjQml0bWFwLT5HZXRXaWR0aCgpLCBzcmNfaGVpZ2h0ID0gcFNyY0JpdG1hcC0+R2V0SGVpZ2h0KCk7DQotICAgIEZYX0xQQllURSBzcmNfYnVmID0gcFNyY0JpdG1hcC0+R2V0QnVmZmVyKCk7DQotICAgIEZYX0RXT1JEIHNyY19waXRjaCA9IHBTcmNCaXRtYXAtPkdldFBpdGNoKCk7DQotICAgIEZYX0ZMT0FUIGRlc3RfYXJlYSA9IHBEZXN0TWF0cml4LT5HZXRVbml0QXJlYSgpOw0KLSAgICBGWF9GTE9BVCBhcmVhX3NjYWxlID0gRlhTWVNfRGl2KChGWF9GTE9BVCkoc3JjX3dpZHRoICogc3JjX2hlaWdodCksIGRlc3RfYXJlYSk7DQotICAgIEZYX0ZMT0FUIHNpemVfc2NhbGUgPSBGWFNZU19zcXJ0KGFyZWFfc2NhbGUpOw0KLSAgICBDRlhfQWZmaW5lTWF0cml4IGFkanVzdGVkX21hdHJpeCgqcERlc3RNYXRyaXgpOw0KLSAgICBhZGp1c3RlZF9tYXRyaXguU2NhbGUoc2l6ZV9zY2FsZSwgc2l6ZV9zY2FsZSk7DQotICAgIENGWF9GbG9hdFJlY3QgcmVzdWx0X3JlY3RfZiA9IGFkanVzdGVkX21hdHJpeC5HZXRVbml0UmVjdCgpOw0KLSAgICBGWF9SRUNUIHJlc3VsdF9yZWN0ID0gcmVzdWx0X3JlY3RfZi5HZXRPdXR0ZXJSZWN0KCk7DQotICAgIENGWF9BZmZpbmVNYXRyaXggc3JjMnJlc3VsdDsNCi0gICAgc3JjMnJlc3VsdC5lID0gYWRqdXN0ZWRfbWF0cml4LmMgKyBhZGp1c3RlZF9tYXRyaXguZTsNCi0gICAgc3JjMnJlc3VsdC5mID0gYWRqdXN0ZWRfbWF0cml4LmQgKyBhZGp1c3RlZF9tYXRyaXguZjsNCi0gICAgc3JjMnJlc3VsdC5hID0gYWRqdXN0ZWRfbWF0cml4LmEgLyBwU3JjQml0bWFwLT5HZXRXaWR0aCgpOw0KLSAgICBzcmMycmVzdWx0LmIgPSBhZGp1c3RlZF9tYXRyaXguYiAvIHBTcmNCaXRtYXAtPkdldFdpZHRoKCk7DQotICAgIHNyYzJyZXN1bHQuYyA9IC1hZGp1c3RlZF9tYXRyaXguYyAvIHBTcmNCaXRtYXAtPkdldEhlaWdodCgpOw0KLSAgICBzcmMycmVzdWx0LmQgPSAtYWRqdXN0ZWRfbWF0cml4LmQgLyBwU3JjQml0bWFwLT5HZXRIZWlnaHQoKTsNCi0gICAgc3JjMnJlc3VsdC5UcmFuc2xhdGVJKC1yZXN1bHRfcmVjdC5sZWZ0LCAtcmVzdWx0X3JlY3QudG9wKTsNCi0gICAgQ0ZYX0FmZmluZU1hdHJpeCByZXN1bHQyc3JjOw0KLSAgICByZXN1bHQyc3JjLlNldFJldmVyc2Uoc3JjMnJlc3VsdCk7DQotICAgIENQREZfRml4ZWRNYXRyaXggcmVzdWx0MnNyY19maXgocmVzdWx0MnNyYywgOCk7DQotICAgIGludCByZXN1bHRfd2lkdGggPSByZXN1bHRfcmVjdC5XaWR0aCgpOw0KLSAgICBpbnQgcmVzdWx0X2hlaWdodCA9IHJlc3VsdF9yZWN0LkhlaWdodCgpOw0KLSAgICBDRlhfRElCaXRtYXAqIHBUZW1wQml0bWFwID0gRlhfTkVXIENGWF9ESUJpdG1hcDsNCi0gICAgaWYgKCFwVGVtcEJpdG1hcCkgew0KLSAgICAgICAgaWYgKHBTcmNCaXRtYXAgIT0gc3JjX2JpdG1hcCkgew0KLSAgICAgICAgICAgIGRlbGV0ZSBwU3JjQml0bWFwOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIE5VTEw7DQotICAgIH0NCi0gICAgaWYgKCFwVGVtcEJpdG1hcC0+Q3JlYXRlKHJlc3VsdF93aWR0aCwgcmVzdWx0X2hlaWdodCwgcFNyYy0+R2V0Rm9ybWF0KCkpKSB7DQotICAgICAgICBkZWxldGUgcFRlbXBCaXRtYXA7DQotICAgICAgICBpZiAocFNyY0JpdG1hcCAhPSBzcmNfYml0bWFwKSB7DQotICAgICAgICAgICAgZGVsZXRlIHBTcmNCaXRtYXA7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gTlVMTDsNCi0gICAgfQ0KLSAgICBwVGVtcEJpdG1hcC0+Q29weVBhbGV0dGUocFNyYy0+R2V0UGFsZXR0ZSgpKTsNCi0gICAgRlhfTFBCWVRFIGRlc3RfYnVmID0gcFRlbXBCaXRtYXAtPkdldEJ1ZmZlcigpOw0KLSAgICBpbnQgZGVzdF9waXRjaCA9IHBUZW1wQml0bWFwLT5HZXRQaXRjaCgpOw0KLSAgICBGWFNZU19tZW1zZXQ4KGRlc3RfYnVmLCBwU3JjLT5Jc0FscGhhTWFzaygpID8gMCA6IDB4ZmYsIGRlc3RfcGl0Y2ggKiByZXN1bHRfaGVpZ2h0KTsNCi0gICAgaWYgKHBTcmNCaXRtYXAtPklzQWxwaGFNYXNrKCkpIHsNCi0gICAgICAgIGZvciAoaW50IGRlc3RfeSA9IDA7IGRlc3RfeSA8IHJlc3VsdF9oZWlnaHQ7IGRlc3RfeSArKykgew0KLSAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIGRlc3RfeSAqIGRlc3RfcGl0Y2g7DQotICAgICAgICAgICAgZm9yIChpbnQgZGVzdF94ID0gMDsgZGVzdF94IDwgcmVzdWx0X3dpZHRoOyBkZXN0X3ggKyspIHsNCi0gICAgICAgICAgICAgICAgaW50IHNyY194LCBzcmNfeTsNCi0gICAgICAgICAgICAgICAgcmVzdWx0MnNyY19maXguVHJhbnNmb3JtKGRlc3RfeCwgZGVzdF95LCBzcmNfeCwgc3JjX3kpOw0KLSAgICAgICAgICAgICAgICBpZiAoc3JjX3ggPCAwIHx8IHNyY194ID49IHNyY193aWR0aCB8fCBzcmNfeSA8IDAgfHwgc3JjX3kgPj0gc3JjX2hlaWdodCkgew0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKCEoKHNyY19idWYgKyBzcmNfcGl0Y2ggKiBzcmNfeSlbc3JjX3ggLyA4XSAmICgxIDw8ICg3IC0gc3JjX3ggJSA4KSkpKSB7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW5bZGVzdF94IC8gOF0gfD0gMSA8PCAoNyAtIGRlc3RfeCAlIDgpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfSBlbHNlIHsNCi0gICAgICAgIGZvciAoaW50IGRlc3RfeSA9IDA7IGRlc3RfeSA8IHJlc3VsdF9oZWlnaHQ7IGRlc3RfeSArKykgew0KLSAgICAgICAgICAgIEZYX0xQQllURSBkZXN0X3NjYW4gPSBkZXN0X2J1ZiArIGRlc3RfeSAqIGRlc3RfcGl0Y2g7DQotICAgICAgICAgICAgZm9yIChpbnQgZGVzdF94ID0gMDsgZGVzdF94IDwgcmVzdWx0X3dpZHRoOyBkZXN0X3ggKyspIHsNCi0gICAgICAgICAgICAgICAgaW50IHNyY194LCBzcmNfeTsNCi0gICAgICAgICAgICAgICAgcmVzdWx0MnNyY19maXguVHJhbnNmb3JtKGRlc3RfeCwgZGVzdF95LCBzcmNfeCwgc3JjX3kpOw0KLSAgICAgICAgICAgICAgICBpZiAoc3JjX3ggPCAwIHx8IHNyY194ID49IHNyY193aWR0aCB8fCBzcmNfeSA8IDAgfHwgc3JjX3kgPj0gc3JjX2hlaWdodCkgew0KLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKChzcmNfYnVmICsgc3JjX3BpdGNoICogc3JjX3kpW3NyY194IC8gOF0gJiAoMSA8PCAoNyAtIHNyY194ICUgOCkpKSB7DQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBkZXN0X3NjYW5bZGVzdF94IC8gOF0gJj0gfigxIDw8ICg3IC0gZGVzdF94ICUgOCkpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBpZiAocFNyY0JpdG1hcCAhPSBzcmNfYml0bWFwKSB7DQotICAgICAgICBkZWxldGUgcFNyY0JpdG1hcDsNCi0gICAgfQ0KLSAgICByZXR1cm4gcFRlbXBCaXRtYXA7DQotfQ0KLUZYX0JPT0wJQ0dkaVByaW50ZXJEcml2ZXI6OlN0YXJ0RElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTb3VyY2UsIGludCBiaXRtYXBfYWxwaGEsIEZYX0RXT1JEIGNvbG9yLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIEZYX0RXT1JEIHJlbmRlcl9mbGFncywgRlhfTFBWT0lEJiBoYW5kbGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0sIGludCBibGVuZF90eXBlKQ0KLXsNCi0gICAgaWYgKGJpdG1hcF9hbHBoYSA8IDI1NSB8fCBwU291cmNlLT5IYXNBbHBoYSgpIHx8IChwU291cmNlLT5Jc0FscGhhTWFzaygpICYmIChwU291cmNlLT5HZXRCUFAoKSAhPSAxIHx8ICFtX2JTdXBwb3J0Uk9QKSkpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBDRlhfRmxvYXRSZWN0IHVuaXRfcmVjdCA9IHBNYXRyaXgtPkdldFVuaXRSZWN0KCk7DQotICAgIEZYX1JFQ1QgZnVsbF9yZWN0ID0gdW5pdF9yZWN0LkdldE91dHRlclJlY3QoKTsNCi0gICAgaWYgKEZYU1lTX2ZhYnMocE1hdHJpeC0+YikgPCAwLjVmICYmIHBNYXRyaXgtPmEgIT0gMCAmJiBGWFNZU19mYWJzKHBNYXRyaXgtPmMpIDwgMC41ZiAmJiBwTWF0cml4LT5kICE9IDApIHsNCi0gICAgICAgIEZYX0JPT0wgYkZsaXBYID0gcE1hdHJpeC0+YSA8IDA7DQotICAgICAgICBGWF9CT09MIGJGbGlwWSA9IHBNYXRyaXgtPmQgPiAwOw0KLSAgICAgICAgcmV0dXJuIFN0cmV0Y2hESUJpdHMocFNvdXJjZSwgY29sb3IsIGJGbGlwWCA/IGZ1bGxfcmVjdC5yaWdodCA6IGZ1bGxfcmVjdC5sZWZ0LCBiRmxpcFkgPyBmdWxsX3JlY3QuYm90dG9tIDogZnVsbF9yZWN0LnRvcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJGbGlwWCA/IC1mdWxsX3JlY3QuV2lkdGgoKSA6IGZ1bGxfcmVjdC5XaWR0aCgpLCBiRmxpcFkgPyAtZnVsbF9yZWN0LkhlaWdodCgpIDogZnVsbF9yZWN0LkhlaWdodCgpLCBOVUxMLCAwLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSwgYmxlbmRfdHlwZSk7DQotICAgIH0NCi0gICAgaWYgKEZYU1lTX2ZhYnMocE1hdHJpeC0+YSkgPCAwLjVmICYmIEZYU1lTX2ZhYnMocE1hdHJpeC0+ZCkgPCAwLjVmKSB7DQotICAgICAgICBDRlhfRElCaXRtYXAqIHBUcmFuc2Zvcm1lZCA9IHBTb3VyY2UtPlN3YXBYWShwTWF0cml4LT5jID4gMCwgcE1hdHJpeC0+YiA8IDApOw0KLSAgICAgICAgaWYgKHBUcmFuc2Zvcm1lZCA9PSBOVUxMKSB7DQotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICAgICAgfQ0KLSAgICAgICAgRlhfQk9PTCByZXQgPSBTdHJldGNoRElCaXRzKHBUcmFuc2Zvcm1lZCwgY29sb3IsIGZ1bGxfcmVjdC5sZWZ0LCBmdWxsX3JlY3QudG9wLCBmdWxsX3JlY3QuV2lkdGgoKSwgZnVsbF9yZWN0LkhlaWdodCgpLCBOVUxMLCAwLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0sIGJsZW5kX3R5cGUpOw0KLSAgICAgICAgZGVsZXRlIHBUcmFuc2Zvcm1lZDsNCi0gICAgICAgIHJldHVybiByZXQ7DQotICAgIH0NCi0gICAgaWYgKHBTb3VyY2UtPkdldEJQUCgpID09IDEpIHsNCi0gICAgICAgIENGWF9ESUJpdG1hcCogcFRyYW5zZm9ybWVkID0gVHJhbnNmb3JtMWJwcEJpdG1hcChwU291cmNlLCBwTWF0cml4KTsNCi0gICAgICAgIGlmIChwSWNjVHJhbnNmb3JtID09IE5VTEwpIHsNCi0gICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICB9DQotICAgICAgICBTYXZlU3RhdGUoKTsNCi0gICAgICAgIENGWF9QYXRoRGF0YSBwYXRoOw0KLSAgICAgICAgcGF0aC5BcHBlbmRSZWN0KDAsIDAsIDEuMGYsIDEuMGYpOw0KLSAgICAgICAgU2V0Q2xpcF9QYXRoRmlsbCgmcGF0aCwgcE1hdHJpeCwgV0lORElORyk7DQotICAgICAgICBGWF9CT09MIHJldCA9IFN0cmV0Y2hESUJpdHMocFRyYW5zZm9ybWVkLCBjb2xvciwgZnVsbF9yZWN0LmxlZnQsIGZ1bGxfcmVjdC50b3AsIGZ1bGxfcmVjdC5XaWR0aCgpLCBmdWxsX3JlY3QuSGVpZ2h0KCksIE5VTEwsIDAsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSwgYmxlbmRfdHlwZSk7DQotICAgICAgICBSZXN0b3JlU3RhdGUoKTsNCi0gICAgICAgIGRlbGV0ZSBwVHJhbnNmb3JtZWQ7DQotICAgICAgICBoYW5kbGUgPSBOVUxMOw0KLSAgICAgICAgcmV0dXJuIHJldDsNCi0gICAgfQ0KLSAgICByZXR1cm4gRkFMU0U7DQotfQ0KLUNQU091dHB1dDo6Q1BTT3V0cHV0KEhEQyBoREMpDQotew0KLSAgICBtX2hEQyA9IGhEQzsNCi0gICAgbV9wQnVmID0gTlVMTDsNCi19DQotQ1BTT3V0cHV0Ojp+Q1BTT3V0cHV0KCkNCi17DQotICAgIGlmIChtX3BCdWYpIHsNCi0gICAgICAgIEZYX0ZyZWUobV9wQnVmKTsNCi0gICAgfQ0KLX0NCi12b2lkIENQU091dHB1dDo6SW5pdCgpDQotew0KLSAgICBtX3BCdWYgPSBGWF9BbGxvYyhGWF9DSEFSLCAxMDI2KTsNCi19DQotdm9pZCBDUFNPdXRwdXQ6Ok91dHB1dFBTKEZYX0xQQ1NUUiBzdHJpbmcsIGludCBsZW4pDQotew0KLSAgICBpZiAobGVuIDwgMCkgew0KLSAgICAgICAgbGVuID0gKGludClGWFNZU19zdHJsZW4oc3RyaW5nKTsNCi0gICAgfQ0KLSAgICBpbnQgc2VudF9sZW4gPSAwOw0KLSAgICB3aGlsZSAobGVuID4gMCkgew0KLSAgICAgICAgaW50IHNlbmRfbGVuID0gbGVuID4gMTAyNCA/IDEwMjQgOiBsZW47DQotICAgICAgICAqKEZYX1dPUkQqKW1fcEJ1ZiA9IHNlbmRfbGVuOw0KLSAgICAgICAgRlhTWVNfbWVtY3B5KG1fcEJ1ZiArIDIsIHN0cmluZyArIHNlbnRfbGVuLCBzZW5kX2xlbik7DQotICAgICAgICBpbnQgcmV0ID0gRXh0RXNjYXBlKG1faERDLCBQQVNTVEhST1VHSCwgc2VuZF9sZW4gKyAyLCBtX3BCdWYsIDAsIE5VTEwpOw0KLSAgICAgICAgc2VudF9sZW4gKz0gc2VuZF9sZW47DQotICAgICAgICBsZW4gLT0gc2VuZF9sZW47DQotICAgIH0NCi19DQotQ1BTUHJpbnRlckRyaXZlcjo6Q1BTUHJpbnRlckRyaXZlcigpDQotew0KLSAgICBtX3BQU091dHB1dCA9IE5VTEw7DQotICAgIG1fYkNteWtPdXRwdXQgPSBGQUxTRTsNCi19DQotQ1BTUHJpbnRlckRyaXZlcjo6fkNQU1ByaW50ZXJEcml2ZXIoKQ0KLXsNCi0gICAgRW5kUmVuZGVyaW5nKCk7DQotICAgIGlmIChtX3BQU091dHB1dCkgew0KLSAgICAgICAgZGVsZXRlIG1fcFBTT3V0cHV0Ow0KLSAgICB9DQotfQ0KLUZYX0JPT0wgQ1BTUHJpbnRlckRyaXZlcjo6SW5pdChIREMgaERDLCBpbnQgcHNsZXZlbCwgRlhfQk9PTCBiQ215a091dHB1dCkNCi17DQotICAgIG1faERDID0gaERDOw0KLSAgICBtX0hvcnpTaXplID0gOjpHZXREZXZpY2VDYXBzKG1faERDLCBIT1JaU0laRSk7DQotICAgIG1fVmVydFNpemUgPSA6OkdldERldmljZUNhcHMobV9oREMsIFZFUlRTSVpFKTsNCi0gICAgbV9XaWR0aCA9IDo6R2V0RGV2aWNlQ2FwcyhtX2hEQywgSE9SWlJFUyk7DQotICAgIG1fSGVpZ2h0ID0gOjpHZXREZXZpY2VDYXBzKG1faERDLCBWRVJUUkVTKTsNCi0gICAgbV9uQml0c1BlclBpeGVsID0gOjpHZXREZXZpY2VDYXBzKG1faERDLCBCSVRTUElYRUwpOw0KLSAgICBtX3BQU091dHB1dCA9IEZYX05FVyBDUFNPdXRwdXQoaERDKTsNCi0gICAgaWYgKCFtX3BQU091dHB1dCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgICgoQ1BTT3V0cHV0KiltX3BQU091dHB1dCktPkluaXQoKTsNCi0gICAgbV9QU1JlbmRlcmVyLkluaXQobV9wUFNPdXRwdXQsIHBzbGV2ZWwsIG1fV2lkdGgsIG1fSGVpZ2h0LCBiQ215a091dHB1dCk7DQotICAgIG1fYkNteWtPdXRwdXQgPSBiQ215a091dHB1dDsNCi0gICAgSFJHTiBoUmduID0gOjpDcmVhdGVSZWN0UmduKDAsIDAsIDEsIDEpOw0KLSAgICBpbnQgcmV0ID0gOjpHZXRDbGlwUmduKGhEQywgaFJnbik7DQotICAgIGlmIChyZXQgPT0gMSkgew0KLSAgICAgICAgcmV0ID0gOjpHZXRSZWdpb25EYXRhKGhSZ24sIDAsIE5VTEwpOw0KLSAgICAgICAgaWYgKHJldCkgew0KLSAgICAgICAgICAgIFJHTkRBVEEqIHBEYXRhID0gKFJHTkRBVEEqKUZYX0FsbG9jKEZYX0JZVEUsIHJldCk7DQotICAgICAgICAgICAgaWYgKCFwRGF0YSkgew0KLSAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldCA9IDo6R2V0UmVnaW9uRGF0YShoUmduLCByZXQsIHBEYXRhKTsNCi0gICAgICAgICAgICBpZiAocmV0KSB7DQotICAgICAgICAgICAgICAgIENGWF9QYXRoRGF0YSBwYXRoOw0KLSAgICAgICAgICAgICAgICBwYXRoLkFsbG9jUG9pbnRDb3VudChwRGF0YS0+cmRoLm5Db3VudCAqIDUpOw0KLSAgICAgICAgICAgICAgICBmb3IgKEZYX0RXT1JEIGkgPSAwOyBpIDwgcERhdGEtPnJkaC5uQ291bnQ7IGkgKyspIHsNCi0gICAgICAgICAgICAgICAgICAgIFJFQ1QqIHBSZWN0ID0gKFJFQ1QqKShwRGF0YS0+QnVmZmVyICsgcERhdGEtPnJkaC5uUmduU2l6ZSAqIGkpOw0KLSAgICAgICAgICAgICAgICAgICAgcGF0aC5BcHBlbmRSZWN0KChGWF9GTE9BVClwUmVjdC0+bGVmdCwgKEZYX0ZMT0FUKXBSZWN0LT5ib3R0b20sIChGWF9GTE9BVClwUmVjdC0+cmlnaHQsIChGWF9GTE9BVClwUmVjdC0+dG9wKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBtX1BTUmVuZGVyZXIuU2V0Q2xpcF9QYXRoRmlsbCgmcGF0aCwgTlVMTCwgRlhGSUxMX1dJTkRJTkcpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBGWF9GcmVlKHBEYXRhKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICA6OkRlbGV0ZU9iamVjdChoUmduKTsNCi0gICAgcmV0dXJuIFRSVUU7DQotfQ0KLWludCBDUFNQcmludGVyRHJpdmVyOjpHZXREZXZpY2VDYXBzKGludCBjYXBzX2lkKQ0KLXsNCi0gICAgc3dpdGNoIChjYXBzX2lkKSB7DQotICAgICAgICBjYXNlIEZYRENfREVWSUNFX0NMQVNTOg0KLSAgICAgICAgICAgIHJldHVybiBGWERDX1BSSU5URVI7DQotICAgICAgICBjYXNlIEZYRENfUElYRUxfV0lEVEg6DQotICAgICAgICAgICAgcmV0dXJuIG1fV2lkdGg7DQotICAgICAgICBjYXNlIEZYRENfUElYRUxfSEVJR0hUOg0KLSAgICAgICAgICAgIHJldHVybiBtX0hlaWdodDsNCi0gICAgICAgIGNhc2UgRlhEQ19CSVRTX1BJWEVMOg0KLSAgICAgICAgICAgIHJldHVybiBtX25CaXRzUGVyUGl4ZWw7DQotICAgICAgICBjYXNlIEZYRENfUkVOREVSX0NBUFM6DQotICAgICAgICAgICAgcmV0dXJuIG1fYkNteWtPdXRwdXQgPyBGWFJDX0JJVF9NQVNLIHwgRlhSQ19DTVlLX09VVFBVVCA6IEZYUkNfQklUX01BU0s7DQotICAgICAgICBjYXNlIEZYRENfSE9SWl9TSVpFOg0KLSAgICAgICAgICAgIHJldHVybiBtX0hvcnpTaXplOw0KLSAgICAgICAgY2FzZSBGWERDX1ZFUlRfU0laRToNCi0gICAgICAgICAgICByZXR1cm4gbV9WZXJ0U2l6ZTsNCi0gICAgfQ0KLSAgICByZXR1cm4gMDsNCi19DQotRlhfQk9PTCBDUFNQcmludGVyRHJpdmVyOjpTdGFydFJlbmRlcmluZygpDQotew0KLSAgICByZXR1cm4gbV9QU1JlbmRlcmVyLlN0YXJ0UmVuZGVyaW5nKCk7DQotfQ0KLXZvaWQgQ1BTUHJpbnRlckRyaXZlcjo6RW5kUmVuZGVyaW5nKCkNCi17DQotICAgIG1fUFNSZW5kZXJlci5FbmRSZW5kZXJpbmcoKTsNCi19DQotdm9pZCBDUFNQcmludGVyRHJpdmVyOjpTYXZlU3RhdGUoKQ0KLXsNCi0gICAgbV9QU1JlbmRlcmVyLlNhdmVTdGF0ZSgpOw0KLX0NCi12b2lkIENQU1ByaW50ZXJEcml2ZXI6OlJlc3RvcmVTdGF0ZShGWF9CT09MIGJLZWVwU2F2ZWQpDQotew0KLSAgICBtX1BTUmVuZGVyZXIuUmVzdG9yZVN0YXRlKGJLZWVwU2F2ZWQpOw0KLX0NCi1GWF9CT09MCUNQU1ByaW50ZXJEcml2ZXI6OlNldENsaXBfUGF0aEZpbGwoY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLA0KLSAgICAgICAgaW50IGZpbGxfbW9kZSkNCi17DQotICAgIG1fUFNSZW5kZXJlci5TZXRDbGlwX1BhdGhGaWxsKHBQYXRoRGF0YSwgcE9iamVjdDJEZXZpY2UsIGZpbGxfbW9kZSk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MCUNQU1ByaW50ZXJEcml2ZXI6OlNldENsaXBfUGF0aFN0cm9rZShjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwNCi0gICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLA0KLSAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZSkNCi17DQotICAgIG1fUFNSZW5kZXJlci5TZXRDbGlwX1BhdGhTdHJva2UocFBhdGhEYXRhLCBwT2JqZWN0MkRldmljZSwgcEdyYXBoU3RhdGUpOw0KLSAgICByZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTAlDUFNQcmludGVyRHJpdmVyOjpEcmF3UGF0aChjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZSwgRlhfQVJHQiBmaWxsX2NvbG9yLCBGWF9BUkdCIHN0cm9rZV9jb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWxsX21vZGUsIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQgYmxlbmRfdHlwZSkNCi17DQotICAgIGlmIChibGVuZF90eXBlICE9IEZYRElCX0JMRU5EX05PUk1BTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHJldHVybiBtX1BTUmVuZGVyZXIuRHJhd1BhdGgocFBhdGhEYXRhLCBwT2JqZWN0MkRldmljZSwgcEdyYXBoU3RhdGUsIGZpbGxfY29sb3IsIHN0cm9rZV9jb2xvciwgZmlsbF9tb2RlICYgMywgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSk7DQotfQ0KLUZYX0JPT0wgQ1BTUHJpbnRlckRyaXZlcjo6R2V0Q2xpcEJveChGWF9SRUNUKiBwUmVjdCkNCi17DQotICAgICpwUmVjdCA9IG1fUFNSZW5kZXJlci5HZXRDbGlwQm94KCk7DQotICAgIHJldHVybiBUUlVFOw0KLX0NCi1GWF9CT09MIENQU1ByaW50ZXJEcml2ZXI6OlNldERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBGWF9EV09SRCBjb2xvciwgY29uc3QgRlhfUkVDVCogcFNyY1JlY3QsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgYmxlbmRfdHlwZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSkNCi17DQotICAgIGlmIChibGVuZF90eXBlICE9IEZYRElCX0JMRU5EX05PUk1BTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIHJldHVybiBtX1BTUmVuZGVyZXIuU2V0RElCaXRzKHBCaXRtYXAsIGNvbG9yLCBsZWZ0LCB0b3AsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOw0KLX0NCi1GWF9CT09MIENQU1ByaW50ZXJEcml2ZXI6OlN0cmV0Y2hESUJpdHMoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwgRlhfRFdPUkQgY29sb3IsIGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgY29uc3QgRlhfUkVDVCogcENsaXBSZWN0LCBGWF9EV09SRCBmbGFncywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0sIGludCBibGVuZF90eXBlKQ0KLXsNCi0gICAgaWYgKGJsZW5kX3R5cGUgIT0gRlhESUJfQkxFTkRfTk9STUFMKSB7DQotICAgICAgICByZXR1cm4gRkFMU0U7DQotICAgIH0NCi0gICAgcmV0dXJuIG1fUFNSZW5kZXJlci5TdHJldGNoRElCaXRzKHBCaXRtYXAsIGNvbG9yLCBkZXN0X2xlZnQsIGRlc3RfdG9wLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgZmxhZ3MsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOw0KLX0NCi1GWF9CT09MCUNQU1ByaW50ZXJEcml2ZXI6OlN0YXJ0RElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIGludCBiaXRtYXBfYWxwaGEsIEZYX0RXT1JEIGNvbG9yLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgRlhfRFdPUkQgcmVuZGVyX2ZsYWdzLCBGWF9MUFZPSUQmIGhhbmRsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQgYmxlbmRfdHlwZSkNCi17DQotICAgIGlmIChibGVuZF90eXBlICE9IEZYRElCX0JMRU5EX05PUk1BTCkgew0KLSAgICAgICAgcmV0dXJuIEZBTFNFOw0KLSAgICB9DQotICAgIGlmIChiaXRtYXBfYWxwaGEgPCAyNTUpIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBoYW5kbGUgPSBOVUxMOw0KLSAgICByZXR1cm4gbV9QU1JlbmRlcmVyLkRyYXdESUJpdHMocEJpdG1hcCwgY29sb3IsIHBNYXRyaXgsIHJlbmRlcl9mbGFncywgYWxwaGFfZmxhZywgcEljY1RyYW5zZm9ybSk7DQotfQ0KLUZYX0JPT0wJQ1BTUHJpbnRlckRyaXZlcjo6RHJhd0RldmljZVRleHQoaW50IG5DaGFycywgY29uc3QgRlhURVhUX0NIQVJQT1MqIHBDaGFyUG9zLCBDRlhfRm9udCogcEZvbnQsDQotICAgICAgICBDRlhfRm9udENhY2hlKiBwQ2FjaGUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLCBGWF9GTE9BVCBmb250X3NpemUsIEZYX0RXT1JEIGNvbG9yLA0KLSAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pDQotew0KLSAgICByZXR1cm4gbV9QU1JlbmRlcmVyLkRyYXdUZXh0KG5DaGFycywgcENoYXJQb3MsIHBGb250LCBwQ2FjaGUsIHBPYmplY3QyRGV2aWNlLCBmb250X3NpemUsIGNvbG9yLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtKTsNCi19DQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvZnhnZS9meF9nZS5oIgorI2lmIF9GWF9PU18gPT0gX0ZYX1dJTjMyX0RFU0tUT1BfIHx8IF9GWF9PU18gPT0gX0ZYX1dJTjY0XworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZ2Vfd2luMzIuaCIKKyNpbmNsdWRlICJ3aW4zMl9pbnQuaCIKKyNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2Z4Z2UvZnhfZnJlZXR5cGUuaCIKKyNpbmNsdWRlICIuLi9nZS90ZXh0X2ludC5oIgorI2luY2x1ZGUgIi4uL2RpYi9kaWJfaW50LmgiCisjZGVmaW5lIFNJWkVUSFJFU0hPTEQgMTAwMAorI2RlZmluZSBPVVRQVVRQU0xFTiA0MDk2CitDR2RpUHJpbnRlckRyaXZlcjo6Q0dkaVByaW50ZXJEcml2ZXIoSERDIGhEQykgOiBDR2RpRGV2aWNlRHJpdmVyKGhEQywgRlhEQ19QUklOVEVSKQoreworICAgIG1fSG9yelNpemUgPSA6OkdldERldmljZUNhcHMobV9oREMsIEhPUlpTSVpFKTsKKyAgICBtX1ZlcnRTaXplID0gOjpHZXREZXZpY2VDYXBzKG1faERDLCBWRVJUU0laRSk7CisgICAgbV9iU3VwcG9ydFJPUCA9IFRSVUU7Cit9CitpbnQgQ0dkaVByaW50ZXJEcml2ZXI6OkdldERldmljZUNhcHMoaW50IGNhcHNfaWQpCit7CisgICAgaWYgKGNhcHNfaWQgPT0gRlhEQ19IT1JaX1NJWkUpIHsKKyAgICAgICAgcmV0dXJuIG1fSG9yelNpemU7CisgICAgfQorICAgIGlmIChjYXBzX2lkID09IEZYRENfVkVSVF9TSVpFKSB7CisgICAgICAgIHJldHVybiBtX1ZlcnRTaXplOworICAgIH0KKyAgICByZXR1cm4gQ0dkaURldmljZURyaXZlcjo6R2V0RGV2aWNlQ2FwcyhjYXBzX2lkKTsKK30KK0ZYX0JPT0wgQ0dkaVByaW50ZXJEcml2ZXI6OlNldERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwU291cmNlLCBGWF9EV09SRCBjb2xvciwgY29uc3QgRlhfUkVDVCogcFNyY1JlY3QsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgYmxlbmRfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSkKK3sKKyAgICBpZiAocFNvdXJjZS0+SXNBbHBoYU1hc2soKSkgeworICAgICAgICBGWF9SRUNUIGNsaXBfcmVjdChsZWZ0LCB0b3AsIGxlZnQgKyBwU3JjUmVjdC0+V2lkdGgoKSwgdG9wICsgcFNyY1JlY3QtPkhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuIFN0cmV0Y2hESUJpdHMocFNvdXJjZSwgY29sb3IsIGxlZnQgLSBwU3JjUmVjdC0+bGVmdCwgdG9wIC0gcFNyY1JlY3QtPnRvcCwgcFNvdXJjZS0+R2V0V2lkdGgoKSwgcFNvdXJjZS0+R2V0SGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbGlwX3JlY3QsIDAsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0sIEZYRElCX0JMRU5EX05PUk1BTCk7CisgICAgfQorICAgIEFTU0VSVChwU291cmNlICE9IE5VTEwgJiYgIXBTb3VyY2UtPklzQWxwaGFNYXNrKCkgJiYgcFNyY1JlY3QgIT0gTlVMTCk7CisgICAgQVNTRVJUKGJsZW5kX3R5cGUgPT0gRlhESUJfQkxFTkRfTk9STUFMKTsKKyAgICBpZiAocFNvdXJjZS0+SGFzQWxwaGEoKSkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIENGWF9ESUJFeHRyYWN0b3IgdGVtcChwU291cmNlKTsKKyAgICBDRlhfRElCaXRtYXAqIHBCaXRtYXAgPSB0ZW1wOworICAgIGlmIChwQml0bWFwID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gR0RJX1NldERJQml0cyhwQml0bWFwLCBwU3JjUmVjdCwgbGVmdCwgdG9wLCBwSWNjVHJhbnNmb3JtKTsKK30KK0ZYX0JPT0wgQ0dkaVByaW50ZXJEcml2ZXI6OlN0cmV0Y2hESUJpdHMoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNvdXJjZSwgRlhfRFdPUkQgY29sb3IsIGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwKKyAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgY29uc3QgRlhfUkVDVCogcENsaXBSZWN0LCBGWF9EV09SRCBmbGFncywKKyAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0sIGludCBibGVuZF90eXBlKQoreworICAgIGlmIChwU291cmNlLT5Jc0FscGhhTWFzaygpKSB7CisgICAgICAgIGludCBhbHBoYSA9IEZYR0VURkxBR19DT0xPUlRZUEUoYWxwaGFfZmxhZykgPyBGWEdFVEZMQUdfQUxQSEFfRklMTChhbHBoYV9mbGFnKSA6IEZYQVJHQl9BKGNvbG9yKTsKKyAgICAgICAgaWYgKHBTb3VyY2UtPkdldEJQUCgpICE9IDEgfHwgYWxwaGEgIT0gMjU1IHx8ICFtX2JTdXBwb3J0Uk9QKSB7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlc3Rfd2lkdGggPCAwIHx8IGRlc3RfaGVpZ2h0IDwgMCkgeworICAgICAgICAgICAgQ0ZYX0RJQml0bWFwKiBwRmxpcHBlZCA9IHBTb3VyY2UtPkZsaXBJbWFnZShkZXN0X3dpZHRoIDwgMCwgZGVzdF9oZWlnaHQgPCAwKTsKKyAgICAgICAgICAgIGlmIChwRmxpcHBlZCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlc3Rfd2lkdGggPCAwKSB7CisgICAgICAgICAgICAgICAgZGVzdF9sZWZ0ICs9IGRlc3Rfd2lkdGg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGVzdF9oZWlnaHQgPCAwKSB7CisgICAgICAgICAgICAgICAgZGVzdF90b3AgKz0gZGVzdF9oZWlnaHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBGWF9CT09MIHJldCA9IEdESV9TdHJldGNoQml0TWFzayhwRmxpcHBlZCwgZGVzdF9sZWZ0LCBkZXN0X3RvcCwgYWJzKGRlc3Rfd2lkdGgpLCBhYnMoZGVzdF9oZWlnaHQpLCBjb2xvciwgZmxhZ3MsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOworICAgICAgICAgICAgZGVsZXRlIHBGbGlwcGVkOworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgICAgICBDRlhfRElCRXh0cmFjdG9yIHRlbXAocFNvdXJjZSk7CisgICAgICAgIENGWF9ESUJpdG1hcCogcEJpdG1hcCA9IHRlbXA7CisgICAgICAgIGlmIChwQml0bWFwID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gR0RJX1N0cmV0Y2hCaXRNYXNrKHBCaXRtYXAsIGRlc3RfbGVmdCwgZGVzdF90b3AsIGRlc3Rfd2lkdGgsIGRlc3RfaGVpZ2h0LCBjb2xvciwgZmxhZ3MsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChwU291cmNlICE9IE5VTEwpOworICAgICAgICBpZiAocFNvdXJjZS0+SGFzQWxwaGEoKSkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGlmIChkZXN0X3dpZHRoIDwgMCB8fCBkZXN0X2hlaWdodCA8IDApIHsKKyAgICAgICAgICAgIENGWF9ESUJpdG1hcCogcEZsaXBwZWQgPSBwU291cmNlLT5GbGlwSW1hZ2UoZGVzdF93aWR0aCA8IDAsIGRlc3RfaGVpZ2h0IDwgMCk7CisgICAgICAgICAgICBpZiAocEZsaXBwZWQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZXN0X3dpZHRoIDwgMCkgeworICAgICAgICAgICAgICAgIGRlc3RfbGVmdCArPSBkZXN0X3dpZHRoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGRlc3RfaGVpZ2h0IDwgMCkgeworICAgICAgICAgICAgICAgIGRlc3RfdG9wICs9IGRlc3RfaGVpZ2h0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfQk9PTCByZXQgPSBHRElfU3RyZXRjaERJQml0cyhwRmxpcHBlZCwgZGVzdF9sZWZ0LCBkZXN0X3RvcCwgYWJzKGRlc3Rfd2lkdGgpLCBhYnMoZGVzdF9oZWlnaHQpLCBmbGFncywgcEljY1RyYW5zZm9ybSk7CisgICAgICAgICAgICBkZWxldGUgcEZsaXBwZWQ7CisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9CisgICAgICAgIENGWF9ESUJFeHRyYWN0b3IgdGVtcChwU291cmNlKTsKKyAgICAgICAgQ0ZYX0RJQml0bWFwKiBwQml0bWFwID0gdGVtcDsKKyAgICAgICAgaWYgKHBCaXRtYXAgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIHJldHVybiBHRElfU3RyZXRjaERJQml0cyhwQml0bWFwLCBkZXN0X2xlZnQsIGRlc3RfdG9wLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgZmxhZ3MsIHBJY2NUcmFuc2Zvcm0pOworICAgIH0KK30KK3N0YXRpYyBDRlhfRElCaXRtYXAqIFRyYW5zZm9ybTFicHBCaXRtYXAoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNyYywgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcERlc3RNYXRyaXgpCit7CisgICAgQVNTRVJUKHBTcmMtPkdldEZvcm1hdCgpID09IEZYRElCXzFicHBSZ2IgfHwgcFNyYy0+R2V0Rm9ybWF0KCkgPT0gRlhESUJfMWJwcE1hc2sgfHwgcFNyYy0+R2V0Rm9ybWF0KCkgPT0gRlhESUJfMWJwcENteWspOworICAgIENGWF9GbG9hdFJlY3QgdW5pdF9yZWN0ID0gcERlc3RNYXRyaXgtPkdldFVuaXRSZWN0KCk7CisgICAgRlhfUkVDVCBmdWxsX3JlY3QgPSB1bml0X3JlY3QuR2V0T3V0dGVyUmVjdCgpOworICAgIGludCBmdWxsX2xlZnQgPSBmdWxsX3JlY3QubGVmdDsKKyAgICBpbnQgZnVsbF90b3AgPSBmdWxsX3JlY3QudG9wOworICAgIENGWF9ESUJFeHRyYWN0b3Igc3JjX2JpdG1hcChwU3JjKTsKKyAgICBDRlhfRElCaXRtYXAqIHBTcmNCaXRtYXAgPSBzcmNfYml0bWFwOworICAgIGlmIChwU3JjQml0bWFwID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGludCBzcmNfd2lkdGggPSBwU3JjQml0bWFwLT5HZXRXaWR0aCgpLCBzcmNfaGVpZ2h0ID0gcFNyY0JpdG1hcC0+R2V0SGVpZ2h0KCk7CisgICAgRlhfTFBCWVRFIHNyY19idWYgPSBwU3JjQml0bWFwLT5HZXRCdWZmZXIoKTsKKyAgICBGWF9EV09SRCBzcmNfcGl0Y2ggPSBwU3JjQml0bWFwLT5HZXRQaXRjaCgpOworICAgIEZYX0ZMT0FUIGRlc3RfYXJlYSA9IHBEZXN0TWF0cml4LT5HZXRVbml0QXJlYSgpOworICAgIEZYX0ZMT0FUIGFyZWFfc2NhbGUgPSBGWFNZU19EaXYoKEZYX0ZMT0FUKShzcmNfd2lkdGggKiBzcmNfaGVpZ2h0KSwgZGVzdF9hcmVhKTsKKyAgICBGWF9GTE9BVCBzaXplX3NjYWxlID0gRlhTWVNfc3FydChhcmVhX3NjYWxlKTsKKyAgICBDRlhfQWZmaW5lTWF0cml4IGFkanVzdGVkX21hdHJpeCgqcERlc3RNYXRyaXgpOworICAgIGFkanVzdGVkX21hdHJpeC5TY2FsZShzaXplX3NjYWxlLCBzaXplX3NjYWxlKTsKKyAgICBDRlhfRmxvYXRSZWN0IHJlc3VsdF9yZWN0X2YgPSBhZGp1c3RlZF9tYXRyaXguR2V0VW5pdFJlY3QoKTsKKyAgICBGWF9SRUNUIHJlc3VsdF9yZWN0ID0gcmVzdWx0X3JlY3RfZi5HZXRPdXR0ZXJSZWN0KCk7CisgICAgQ0ZYX0FmZmluZU1hdHJpeCBzcmMycmVzdWx0OworICAgIHNyYzJyZXN1bHQuZSA9IGFkanVzdGVkX21hdHJpeC5jICsgYWRqdXN0ZWRfbWF0cml4LmU7CisgICAgc3JjMnJlc3VsdC5mID0gYWRqdXN0ZWRfbWF0cml4LmQgKyBhZGp1c3RlZF9tYXRyaXguZjsKKyAgICBzcmMycmVzdWx0LmEgPSBhZGp1c3RlZF9tYXRyaXguYSAvIHBTcmNCaXRtYXAtPkdldFdpZHRoKCk7CisgICAgc3JjMnJlc3VsdC5iID0gYWRqdXN0ZWRfbWF0cml4LmIgLyBwU3JjQml0bWFwLT5HZXRXaWR0aCgpOworICAgIHNyYzJyZXN1bHQuYyA9IC1hZGp1c3RlZF9tYXRyaXguYyAvIHBTcmNCaXRtYXAtPkdldEhlaWdodCgpOworICAgIHNyYzJyZXN1bHQuZCA9IC1hZGp1c3RlZF9tYXRyaXguZCAvIHBTcmNCaXRtYXAtPkdldEhlaWdodCgpOworICAgIHNyYzJyZXN1bHQuVHJhbnNsYXRlSSgtcmVzdWx0X3JlY3QubGVmdCwgLXJlc3VsdF9yZWN0LnRvcCk7CisgICAgQ0ZYX0FmZmluZU1hdHJpeCByZXN1bHQyc3JjOworICAgIHJlc3VsdDJzcmMuU2V0UmV2ZXJzZShzcmMycmVzdWx0KTsKKyAgICBDUERGX0ZpeGVkTWF0cml4IHJlc3VsdDJzcmNfZml4KHJlc3VsdDJzcmMsIDgpOworICAgIGludCByZXN1bHRfd2lkdGggPSByZXN1bHRfcmVjdC5XaWR0aCgpOworICAgIGludCByZXN1bHRfaGVpZ2h0ID0gcmVzdWx0X3JlY3QuSGVpZ2h0KCk7CisgICAgQ0ZYX0RJQml0bWFwKiBwVGVtcEJpdG1hcCA9IEZYX05FVyBDRlhfRElCaXRtYXA7CisgICAgaWYgKCFwVGVtcEJpdG1hcCkgeworICAgICAgICBpZiAocFNyY0JpdG1hcCAhPSBzcmNfYml0bWFwKSB7CisgICAgICAgICAgICBkZWxldGUgcFNyY0JpdG1hcDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKCFwVGVtcEJpdG1hcC0+Q3JlYXRlKHJlc3VsdF93aWR0aCwgcmVzdWx0X2hlaWdodCwgcFNyYy0+R2V0Rm9ybWF0KCkpKSB7CisgICAgICAgIGRlbGV0ZSBwVGVtcEJpdG1hcDsKKyAgICAgICAgaWYgKHBTcmNCaXRtYXAgIT0gc3JjX2JpdG1hcCkgeworICAgICAgICAgICAgZGVsZXRlIHBTcmNCaXRtYXA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBUZW1wQml0bWFwLT5Db3B5UGFsZXR0ZShwU3JjLT5HZXRQYWxldHRlKCkpOworICAgIEZYX0xQQllURSBkZXN0X2J1ZiA9IHBUZW1wQml0bWFwLT5HZXRCdWZmZXIoKTsKKyAgICBpbnQgZGVzdF9waXRjaCA9IHBUZW1wQml0bWFwLT5HZXRQaXRjaCgpOworICAgIEZYU1lTX21lbXNldDgoZGVzdF9idWYsIHBTcmMtPklzQWxwaGFNYXNrKCkgPyAwIDogMHhmZiwgZGVzdF9waXRjaCAqIHJlc3VsdF9oZWlnaHQpOworICAgIGlmIChwU3JjQml0bWFwLT5Jc0FscGhhTWFzaygpKSB7CisgICAgICAgIGZvciAoaW50IGRlc3RfeSA9IDA7IGRlc3RfeSA8IHJlc3VsdF9oZWlnaHQ7IGRlc3RfeSArKykgeworICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IGRlc3RfYnVmICsgZGVzdF95ICogZGVzdF9waXRjaDsKKyAgICAgICAgICAgIGZvciAoaW50IGRlc3RfeCA9IDA7IGRlc3RfeCA8IHJlc3VsdF93aWR0aDsgZGVzdF94ICsrKSB7CisgICAgICAgICAgICAgICAgaW50IHNyY194LCBzcmNfeTsKKyAgICAgICAgICAgICAgICByZXN1bHQyc3JjX2ZpeC5UcmFuc2Zvcm0oZGVzdF94LCBkZXN0X3ksIHNyY194LCBzcmNfeSk7CisgICAgICAgICAgICAgICAgaWYgKHNyY194IDwgMCB8fCBzcmNfeCA+PSBzcmNfd2lkdGggfHwgc3JjX3kgPCAwIHx8IHNyY195ID49IHNyY19oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghKChzcmNfYnVmICsgc3JjX3BpdGNoICogc3JjX3kpW3NyY194IC8gOF0gJiAoMSA8PCAoNyAtIHNyY194ICUgOCkpKSkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfeCAvIDhdIHw9IDEgPDwgKDcgLSBkZXN0X3ggJSA4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGRlc3RfeSA9IDA7IGRlc3RfeSA8IHJlc3VsdF9oZWlnaHQ7IGRlc3RfeSArKykgeworICAgICAgICAgICAgRlhfTFBCWVRFIGRlc3Rfc2NhbiA9IGRlc3RfYnVmICsgZGVzdF95ICogZGVzdF9waXRjaDsKKyAgICAgICAgICAgIGZvciAoaW50IGRlc3RfeCA9IDA7IGRlc3RfeCA8IHJlc3VsdF93aWR0aDsgZGVzdF94ICsrKSB7CisgICAgICAgICAgICAgICAgaW50IHNyY194LCBzcmNfeTsKKyAgICAgICAgICAgICAgICByZXN1bHQyc3JjX2ZpeC5UcmFuc2Zvcm0oZGVzdF94LCBkZXN0X3ksIHNyY194LCBzcmNfeSk7CisgICAgICAgICAgICAgICAgaWYgKHNyY194IDwgMCB8fCBzcmNfeCA+PSBzcmNfd2lkdGggfHwgc3JjX3kgPCAwIHx8IHNyY195ID49IHNyY19oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgoc3JjX2J1ZiArIHNyY19waXRjaCAqIHNyY195KVtzcmNfeCAvIDhdICYgKDEgPDwgKDcgLSBzcmNfeCAlIDgpKSkgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVzdF9zY2FuW2Rlc3RfeCAvIDhdICY9IH4oMSA8PCAoNyAtIGRlc3RfeCAlIDgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocFNyY0JpdG1hcCAhPSBzcmNfYml0bWFwKSB7CisgICAgICAgIGRlbGV0ZSBwU3JjQml0bWFwOworICAgIH0KKyAgICByZXR1cm4gcFRlbXBCaXRtYXA7Cit9CitGWF9CT09MCUNHZGlQcmludGVyRHJpdmVyOjpTdGFydERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwU291cmNlLCBpbnQgYml0bWFwX2FscGhhLCBGWF9EV09SRCBjb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIEZYX0RXT1JEIHJlbmRlcl9mbGFncywgRlhfTFBWT0lEJiBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSwgaW50IGJsZW5kX3R5cGUpCit7CisgICAgaWYgKGJpdG1hcF9hbHBoYSA8IDI1NSB8fCBwU291cmNlLT5IYXNBbHBoYSgpIHx8IChwU291cmNlLT5Jc0FscGhhTWFzaygpICYmIChwU291cmNlLT5HZXRCUFAoKSAhPSAxIHx8ICFtX2JTdXBwb3J0Uk9QKSkpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBDRlhfRmxvYXRSZWN0IHVuaXRfcmVjdCA9IHBNYXRyaXgtPkdldFVuaXRSZWN0KCk7CisgICAgRlhfUkVDVCBmdWxsX3JlY3QgPSB1bml0X3JlY3QuR2V0T3V0dGVyUmVjdCgpOworICAgIGlmIChGWFNZU19mYWJzKHBNYXRyaXgtPmIpIDwgMC41ZiAmJiBwTWF0cml4LT5hICE9IDAgJiYgRlhTWVNfZmFicyhwTWF0cml4LT5jKSA8IDAuNWYgJiYgcE1hdHJpeC0+ZCAhPSAwKSB7CisgICAgICAgIEZYX0JPT0wgYkZsaXBYID0gcE1hdHJpeC0+YSA8IDA7CisgICAgICAgIEZYX0JPT0wgYkZsaXBZID0gcE1hdHJpeC0+ZCA+IDA7CisgICAgICAgIHJldHVybiBTdHJldGNoRElCaXRzKHBTb3VyY2UsIGNvbG9yLCBiRmxpcFggPyBmdWxsX3JlY3QucmlnaHQgOiBmdWxsX3JlY3QubGVmdCwgYkZsaXBZID8gZnVsbF9yZWN0LmJvdHRvbSA6IGZ1bGxfcmVjdC50b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJGbGlwWCA/IC1mdWxsX3JlY3QuV2lkdGgoKSA6IGZ1bGxfcmVjdC5XaWR0aCgpLCBiRmxpcFkgPyAtZnVsbF9yZWN0LkhlaWdodCgpIDogZnVsbF9yZWN0LkhlaWdodCgpLCBOVUxMLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtLCBibGVuZF90eXBlKTsKKyAgICB9CisgICAgaWYgKEZYU1lTX2ZhYnMocE1hdHJpeC0+YSkgPCAwLjVmICYmIEZYU1lTX2ZhYnMocE1hdHJpeC0+ZCkgPCAwLjVmKSB7CisgICAgICAgIENGWF9ESUJpdG1hcCogcFRyYW5zZm9ybWVkID0gcFNvdXJjZS0+U3dhcFhZKHBNYXRyaXgtPmMgPiAwLCBwTWF0cml4LT5iIDwgMCk7CisgICAgICAgIGlmIChwVHJhbnNmb3JtZWQgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIEZYX0JPT0wgcmV0ID0gU3RyZXRjaERJQml0cyhwVHJhbnNmb3JtZWQsIGNvbG9yLCBmdWxsX3JlY3QubGVmdCwgZnVsbF9yZWN0LnRvcCwgZnVsbF9yZWN0LldpZHRoKCksIGZ1bGxfcmVjdC5IZWlnaHQoKSwgTlVMTCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0sIGJsZW5kX3R5cGUpOworICAgICAgICBkZWxldGUgcFRyYW5zZm9ybWVkOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICBpZiAocFNvdXJjZS0+R2V0QlBQKCkgPT0gMSkgeworICAgICAgICBDRlhfRElCaXRtYXAqIHBUcmFuc2Zvcm1lZCA9IFRyYW5zZm9ybTFicHBCaXRtYXAocFNvdXJjZSwgcE1hdHJpeCk7CisgICAgICAgIGlmIChwSWNjVHJhbnNmb3JtID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgICBTYXZlU3RhdGUoKTsKKyAgICAgICAgQ0ZYX1BhdGhEYXRhIHBhdGg7CisgICAgICAgIHBhdGguQXBwZW5kUmVjdCgwLCAwLCAxLjBmLCAxLjBmKTsKKyAgICAgICAgU2V0Q2xpcF9QYXRoRmlsbCgmcGF0aCwgcE1hdHJpeCwgV0lORElORyk7CisgICAgICAgIEZYX0JPT0wgcmV0ID0gU3RyZXRjaERJQml0cyhwVHJhbnNmb3JtZWQsIGNvbG9yLCBmdWxsX3JlY3QubGVmdCwgZnVsbF9yZWN0LnRvcCwgZnVsbF9yZWN0LldpZHRoKCksIGZ1bGxfcmVjdC5IZWlnaHQoKSwgTlVMTCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0sIGJsZW5kX3R5cGUpOworICAgICAgICBSZXN0b3JlU3RhdGUoKTsKKyAgICAgICAgZGVsZXRlIHBUcmFuc2Zvcm1lZDsKKyAgICAgICAgaGFuZGxlID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisgICAgcmV0dXJuIEZBTFNFOworfQorQ1BTT3V0cHV0OjpDUFNPdXRwdXQoSERDIGhEQykKK3sKKyAgICBtX2hEQyA9IGhEQzsKKyAgICBtX3BCdWYgPSBOVUxMOworfQorQ1BTT3V0cHV0Ojp+Q1BTT3V0cHV0KCkKK3sKKyAgICBpZiAobV9wQnVmKSB7CisgICAgICAgIEZYX0ZyZWUobV9wQnVmKTsKKyAgICB9Cit9Cit2b2lkIENQU091dHB1dDo6SW5pdCgpCit7CisgICAgbV9wQnVmID0gRlhfQWxsb2MoRlhfQ0hBUiwgMTAyNik7Cit9Cit2b2lkIENQU091dHB1dDo6T3V0cHV0UFMoRlhfTFBDU1RSIHN0cmluZywgaW50IGxlbikKK3sKKyAgICBpZiAobGVuIDwgMCkgeworICAgICAgICBsZW4gPSAoaW50KUZYU1lTX3N0cmxlbihzdHJpbmcpOworICAgIH0KKyAgICBpbnQgc2VudF9sZW4gPSAwOworICAgIHdoaWxlIChsZW4gPiAwKSB7CisgICAgICAgIGludCBzZW5kX2xlbiA9IGxlbiA+IDEwMjQgPyAxMDI0IDogbGVuOworICAgICAgICAqKEZYX1dPUkQqKW1fcEJ1ZiA9IHNlbmRfbGVuOworICAgICAgICBGWFNZU19tZW1jcHkobV9wQnVmICsgMiwgc3RyaW5nICsgc2VudF9sZW4sIHNlbmRfbGVuKTsKKyAgICAgICAgaW50IHJldCA9IEV4dEVzY2FwZShtX2hEQywgUEFTU1RIUk9VR0gsIHNlbmRfbGVuICsgMiwgbV9wQnVmLCAwLCBOVUxMKTsKKyAgICAgICAgc2VudF9sZW4gKz0gc2VuZF9sZW47CisgICAgICAgIGxlbiAtPSBzZW5kX2xlbjsKKyAgICB9Cit9CitDUFNQcmludGVyRHJpdmVyOjpDUFNQcmludGVyRHJpdmVyKCkKK3sKKyAgICBtX3BQU091dHB1dCA9IE5VTEw7CisgICAgbV9iQ215a091dHB1dCA9IEZBTFNFOworfQorQ1BTUHJpbnRlckRyaXZlcjo6fkNQU1ByaW50ZXJEcml2ZXIoKQoreworICAgIEVuZFJlbmRlcmluZygpOworICAgIGlmIChtX3BQU091dHB1dCkgeworICAgICAgICBkZWxldGUgbV9wUFNPdXRwdXQ7CisgICAgfQorfQorRlhfQk9PTCBDUFNQcmludGVyRHJpdmVyOjpJbml0KEhEQyBoREMsIGludCBwc2xldmVsLCBGWF9CT09MIGJDbXlrT3V0cHV0KQoreworICAgIG1faERDID0gaERDOworICAgIG1fSG9yelNpemUgPSA6OkdldERldmljZUNhcHMobV9oREMsIEhPUlpTSVpFKTsKKyAgICBtX1ZlcnRTaXplID0gOjpHZXREZXZpY2VDYXBzKG1faERDLCBWRVJUU0laRSk7CisgICAgbV9XaWR0aCA9IDo6R2V0RGV2aWNlQ2FwcyhtX2hEQywgSE9SWlJFUyk7CisgICAgbV9IZWlnaHQgPSA6OkdldERldmljZUNhcHMobV9oREMsIFZFUlRSRVMpOworICAgIG1fbkJpdHNQZXJQaXhlbCA9IDo6R2V0RGV2aWNlQ2FwcyhtX2hEQywgQklUU1BJWEVMKTsKKyAgICBtX3BQU091dHB1dCA9IEZYX05FVyBDUFNPdXRwdXQoaERDKTsKKyAgICBpZiAoIW1fcFBTT3V0cHV0KSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgKChDUFNPdXRwdXQqKW1fcFBTT3V0cHV0KS0+SW5pdCgpOworICAgIG1fUFNSZW5kZXJlci5Jbml0KG1fcFBTT3V0cHV0LCBwc2xldmVsLCBtX1dpZHRoLCBtX0hlaWdodCwgYkNteWtPdXRwdXQpOworICAgIG1fYkNteWtPdXRwdXQgPSBiQ215a091dHB1dDsKKyAgICBIUkdOIGhSZ24gPSA6OkNyZWF0ZVJlY3RSZ24oMCwgMCwgMSwgMSk7CisgICAgaW50IHJldCA9IDo6R2V0Q2xpcFJnbihoREMsIGhSZ24pOworICAgIGlmIChyZXQgPT0gMSkgeworICAgICAgICByZXQgPSA6OkdldFJlZ2lvbkRhdGEoaFJnbiwgMCwgTlVMTCk7CisgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgIFJHTkRBVEEqIHBEYXRhID0gKFJHTkRBVEEqKUZYX0FsbG9jKEZYX0JZVEUsIHJldCk7CisgICAgICAgICAgICBpZiAoIXBEYXRhKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0ID0gOjpHZXRSZWdpb25EYXRhKGhSZ24sIHJldCwgcERhdGEpOworICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgIENGWF9QYXRoRGF0YSBwYXRoOworICAgICAgICAgICAgICAgIHBhdGguQWxsb2NQb2ludENvdW50KHBEYXRhLT5yZGgubkNvdW50ICogNSk7CisgICAgICAgICAgICAgICAgZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHBEYXRhLT5yZGgubkNvdW50OyBpICsrKSB7CisgICAgICAgICAgICAgICAgICAgIFJFQ1QqIHBSZWN0ID0gKFJFQ1QqKShwRGF0YS0+QnVmZmVyICsgcERhdGEtPnJkaC5uUmduU2l6ZSAqIGkpOworICAgICAgICAgICAgICAgICAgICBwYXRoLkFwcGVuZFJlY3QoKEZYX0ZMT0FUKXBSZWN0LT5sZWZ0LCAoRlhfRkxPQVQpcFJlY3QtPmJvdHRvbSwgKEZYX0ZMT0FUKXBSZWN0LT5yaWdodCwgKEZYX0ZMT0FUKXBSZWN0LT50b3ApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX1BTUmVuZGVyZXIuU2V0Q2xpcF9QYXRoRmlsbCgmcGF0aCwgTlVMTCwgRlhGSUxMX1dJTkRJTkcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRlhfRnJlZShwRGF0YSk7CisgICAgICAgIH0KKyAgICB9CisgICAgOjpEZWxldGVPYmplY3QoaFJnbik7CisgICAgcmV0dXJuIFRSVUU7Cit9CitpbnQgQ1BTUHJpbnRlckRyaXZlcjo6R2V0RGV2aWNlQ2FwcyhpbnQgY2Fwc19pZCkKK3sKKyAgICBzd2l0Y2ggKGNhcHNfaWQpIHsKKyAgICAgICAgY2FzZSBGWERDX0RFVklDRV9DTEFTUzoKKyAgICAgICAgICAgIHJldHVybiBGWERDX1BSSU5URVI7CisgICAgICAgIGNhc2UgRlhEQ19QSVhFTF9XSURUSDoKKyAgICAgICAgICAgIHJldHVybiBtX1dpZHRoOworICAgICAgICBjYXNlIEZYRENfUElYRUxfSEVJR0hUOgorICAgICAgICAgICAgcmV0dXJuIG1fSGVpZ2h0OworICAgICAgICBjYXNlIEZYRENfQklUU19QSVhFTDoKKyAgICAgICAgICAgIHJldHVybiBtX25CaXRzUGVyUGl4ZWw7CisgICAgICAgIGNhc2UgRlhEQ19SRU5ERVJfQ0FQUzoKKyAgICAgICAgICAgIHJldHVybiBtX2JDbXlrT3V0cHV0ID8gRlhSQ19CSVRfTUFTSyB8IEZYUkNfQ01ZS19PVVRQVVQgOiBGWFJDX0JJVF9NQVNLOworICAgICAgICBjYXNlIEZYRENfSE9SWl9TSVpFOgorICAgICAgICAgICAgcmV0dXJuIG1fSG9yelNpemU7CisgICAgICAgIGNhc2UgRlhEQ19WRVJUX1NJWkU6CisgICAgICAgICAgICByZXR1cm4gbV9WZXJ0U2l6ZTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CitGWF9CT09MIENQU1ByaW50ZXJEcml2ZXI6OlN0YXJ0UmVuZGVyaW5nKCkKK3sKKyAgICByZXR1cm4gbV9QU1JlbmRlcmVyLlN0YXJ0UmVuZGVyaW5nKCk7Cit9Cit2b2lkIENQU1ByaW50ZXJEcml2ZXI6OkVuZFJlbmRlcmluZygpCit7CisgICAgbV9QU1JlbmRlcmVyLkVuZFJlbmRlcmluZygpOworfQordm9pZCBDUFNQcmludGVyRHJpdmVyOjpTYXZlU3RhdGUoKQoreworICAgIG1fUFNSZW5kZXJlci5TYXZlU3RhdGUoKTsKK30KK3ZvaWQgQ1BTUHJpbnRlckRyaXZlcjo6UmVzdG9yZVN0YXRlKEZYX0JPT0wgYktlZXBTYXZlZCkKK3sKKyAgICBtX1BTUmVuZGVyZXIuUmVzdG9yZVN0YXRlKGJLZWVwU2F2ZWQpOworfQorRlhfQk9PTAlDUFNQcmludGVyRHJpdmVyOjpTZXRDbGlwX1BhdGhGaWxsKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLCBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkRldmljZSwKKyAgICAgICAgaW50IGZpbGxfbW9kZSkKK3sKKyAgICBtX1BTUmVuZGVyZXIuU2V0Q2xpcF9QYXRoRmlsbChwUGF0aERhdGEsIHBPYmplY3QyRGV2aWNlLCBmaWxsX21vZGUpOworICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTAlDUFNQcmludGVyRHJpdmVyOjpTZXRDbGlwX1BhdGhTdHJva2UoY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEsCisgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLAorICAgICAgICBjb25zdCBDRlhfR3JhcGhTdGF0ZURhdGEqIHBHcmFwaFN0YXRlKQoreworICAgIG1fUFNSZW5kZXJlci5TZXRDbGlwX1BhdGhTdHJva2UocFBhdGhEYXRhLCBwT2JqZWN0MkRldmljZSwgcEdyYXBoU3RhdGUpOworICAgIHJldHVybiBUUlVFOworfQorRlhfQk9PTAlDUFNQcmludGVyRHJpdmVyOjpEcmF3UGF0aChjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUsIEZYX0FSR0IgZmlsbF9jb2xvciwgRlhfQVJHQiBzdHJva2VfY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWxsX21vZGUsIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQgYmxlbmRfdHlwZSkKK3sKKyAgICBpZiAoYmxlbmRfdHlwZSAhPSBGWERJQl9CTEVORF9OT1JNQUwpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gbV9QU1JlbmRlcmVyLkRyYXdQYXRoKHBQYXRoRGF0YSwgcE9iamVjdDJEZXZpY2UsIHBHcmFwaFN0YXRlLCBmaWxsX2NvbG9yLCBzdHJva2VfY29sb3IsIGZpbGxfbW9kZSAmIDMsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOworfQorRlhfQk9PTCBDUFNQcmludGVyRHJpdmVyOjpHZXRDbGlwQm94KEZYX1JFQ1QqIHBSZWN0KQoreworICAgICpwUmVjdCA9IG1fUFNSZW5kZXJlci5HZXRDbGlwQm94KCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MIENQU1ByaW50ZXJEcml2ZXI6OlNldERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBGWF9EV09SRCBjb2xvciwgY29uc3QgRlhfUkVDVCogcFNyY1JlY3QsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgYmxlbmRfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIGlmIChibGVuZF90eXBlICE9IEZYRElCX0JMRU5EX05PUk1BTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIHJldHVybiBtX1BTUmVuZGVyZXIuU2V0RElCaXRzKHBCaXRtYXAsIGNvbG9yLCBsZWZ0LCB0b3AsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOworfQorRlhfQk9PTCBDUFNQcmludGVyRHJpdmVyOjpTdHJldGNoRElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIEZYX0RXT1JEIGNvbG9yLCBpbnQgZGVzdF9sZWZ0LCBpbnQgZGVzdF90b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgY29uc3QgRlhfUkVDVCogcENsaXBSZWN0LCBGWF9EV09SRCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSwgaW50IGJsZW5kX3R5cGUpCit7CisgICAgaWYgKGJsZW5kX3R5cGUgIT0gRlhESUJfQkxFTkRfTk9STUFMKSB7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgcmV0dXJuIG1fUFNSZW5kZXJlci5TdHJldGNoRElCaXRzKHBCaXRtYXAsIGNvbG9yLCBkZXN0X2xlZnQsIGRlc3RfdG9wLCBkZXN0X3dpZHRoLCBkZXN0X2hlaWdodCwgZmxhZ3MsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOworfQorRlhfQk9PTAlDUFNQcmludGVyRHJpdmVyOjpTdGFydERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBpbnQgYml0bWFwX2FscGhhLCBGWF9EV09SRCBjb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgRlhfRFdPUkQgcmVuZGVyX2ZsYWdzLCBGWF9MUFZPSUQmIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0sIGludCBibGVuZF90eXBlKQoreworICAgIGlmIChibGVuZF90eXBlICE9IEZYRElCX0JMRU5EX05PUk1BTCkgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIGlmIChiaXRtYXBfYWxwaGEgPCAyNTUpIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICBoYW5kbGUgPSBOVUxMOworICAgIHJldHVybiBtX1BTUmVuZGVyZXIuRHJhd0RJQml0cyhwQml0bWFwLCBjb2xvciwgcE1hdHJpeCwgcmVuZGVyX2ZsYWdzLCBhbHBoYV9mbGFnLCBwSWNjVHJhbnNmb3JtKTsKK30KK0ZYX0JPT0wJQ1BTUHJpbnRlckRyaXZlcjo6RHJhd0RldmljZVRleHQoaW50IG5DaGFycywgY29uc3QgRlhURVhUX0NIQVJQT1MqIHBDaGFyUG9zLCBDRlhfRm9udCogcEZvbnQsCisgICAgICAgIENGWF9Gb250Q2FjaGUqIHBDYWNoZSwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsIEZYX0ZMT0FUIGZvbnRfc2l6ZSwgRlhfRFdPUkQgY29sb3IsCisgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtKQoreworICAgIHJldHVybiBtX1BTUmVuZGVyZXIuRHJhd1RleHQobkNoYXJzLCBwQ2hhclBvcywgcEZvbnQsIHBDYWNoZSwgcE9iamVjdDJEZXZpY2UsIGZvbnRfc2l6ZSwgY29sb3IsIGFscGhhX2ZsYWcsIHBJY2NUcmFuc2Zvcm0pOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3NyYy9meGdlL3dpbjMyL3dpbjMyX2ludC5oIGIvY29yZS9zcmMvZnhnZS93aW4zMi93aW4zMl9pbnQuaAppbmRleCAzZjk0MGVkLi44MzU5NWNiIDEwMDY0NAotLS0gYS9jb3JlL3NyYy9meGdlL3dpbjMyL3dpbjMyX2ludC5oCisrKyBiL2NvcmUvc3JjL2Z4Z2Uvd2luMzIvd2luMzJfaW50LmgKQEAgLTEsMjM4ICsxLDIzOCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotc3RydWN0ICBXSU5ESUJfT3Blbl9BcmdzXzsNCi1jbGFzcyBDR2RpcGx1c0V4dA0KLXsNCi1wdWJsaWM6DQotICAgIENHZGlwbHVzRXh0KCk7DQotICAgIH5DR2RpcGx1c0V4dCgpOw0KLSAgICB2b2lkCQkJTG9hZCgpOw0KLSAgICBGWF9CT09MCQkJSXNBdmFpbGFibGUoKQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbV9oTW9kdWxlICE9IE5VTEw7DQotICAgIH0NCi0gICAgRlhfQk9PTAkJCVN0cmV0Y2hCaXRNYXNrKEhEQyBoREMsIEJPT0wgYk1vbm9EZXZpY2UsIGNvbnN0IENGWF9ESUJpdG1hcCogcEJpdG1hcCwgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgRlhfRFdPUkQgYXJnYiwgY29uc3QgRlhfUkVDVCogcENsaXBSZWN0LCBpbnQgZmxhZ3MpOw0KLSAgICBGWF9CT09MCQkJU3RyZXRjaERJQml0cyhIREMgaERDLCBjb25zdCBDRlhfRElCaXRtYXAqIHBCaXRtYXAsIGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgY29uc3QgRlhfUkVDVCogcENsaXBSZWN0LCBpbnQgZmxhZ3MpOw0KLSAgICBGWF9CT09MCQkJRHJhd1BhdGgoSERDIGhEQywgY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkRldmljZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBmaWxsX2FyZ2IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBzdHJva2VfYXJnYiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWxsX21vZGUNCi0gICAgICAgICAgICAgICAgICAgICAgKTsNCi0NCi0gICAgdm9pZCoJCQlMb2FkTWVtRm9udChGWF9CWVRFKiBwRGF0YSwgRlhfRFdPUkQgc2l6ZSk7DQotICAgIHZvaWQJCQlEZWxldGVNZW1Gb250KHZvaWQqIHBGb250Q29sbGVjdGlvbik7DQotICAgIEZYX0JPT0wgICAgICAgICBHZGlwQ3JlYXRlRnJvbUltYWdlKHZvaWQqIGJpdG1hcCwgdm9pZCoqIGdyYXBoaWNzKTsNCi0gICAgdm9pZCAgICAgICAgICAgIEdkaXBEZWxldGVHcmFwaGljcyh2b2lkKiBncmFwaGljcyk7DQotICAgIHZvaWQgICAgICAgICAgICBHZGlwU2V0VGV4dFJlbmRlcmluZ0hpbnQodm9pZCogZ3JhcGhpY3MsIGludCBtb2RlKTsNCi0gICAgdm9pZCAgICAgICAgICAgIEdkaXBTZXRQYWdlVW5pdCh2b2lkKiBncmFwaGljcywgRlhfRFdPUkQgdW5pdCk7DQotICAgIHZvaWQgICAgICAgICAgICBHZGlwU2V0V29ybGRUcmFuc2Zvcm0odm9pZCogZ3JhcGhpY3MsIHZvaWQqIHBNYXRyaXgpOw0KLSAgICBGWF9CT09MICAgICAgICAgR2RpcERyYXdEcml2ZXJTdHJpbmcodm9pZCAqZ3JhcGhpY3MsICB1bnNpZ25lZCBzaG9ydCAqdGV4dCwgaW50IGxlbmd0aCwgdm9pZCAqZm9udCwgdm9pZCogYnJ1c2gsIHZvaWQgKnBvc2l0aW9ucywgaW50IGZsYWdzLCBjb25zdCB2b2lkICptYXRyaXgpOw0KLSAgICB2b2lkICAgICAgICAgICAgR2RpcENyZWF0ZUJydXNoKEZYX0RXT1JEIGZpbGxfYXJnYiwgdm9pZCoqIHBCcnVzaCk7DQotICAgIHZvaWQgICAgICAgICAgICBHZGlwRGVsZXRlQnJ1c2godm9pZCogcEJydXNoKTsNCi0gICAgdm9pZCAgICAgICAgICAgIEdkaXBDcmVhdGVNYXRyaXgoRlhfRkxPQVQgYSwgRlhfRkxPQVQgYiwgRlhfRkxPQVQgYywgRlhfRkxPQVQgZCwgRlhfRkxPQVQgZSwgRlhfRkxPQVQgZiwgdm9pZCoqIG1hdHJpeCk7DQotICAgIHZvaWQgICAgICAgICAgICBHZGlwRGVsZXRlTWF0cml4KHZvaWQqIG1hdHJpeCk7DQotICAgIEZYX0JPT0wgICAgICAgICBHZGlwQ3JlYXRlRm9udEZhbWlseUZyb21OYW1lKEZYX0xQQ1dTVFIgbmFtZSwgdm9pZCogcEZvbnRDb2xsZWN0aW9uLCB2b2lkKipwRmFtaWx5KTsNCi0gICAgdm9pZCAgICAgICAgICAgIEdkaXBEZWxldGVGb250RmFtaWx5KHZvaWQqIHBGYW1pbHkpOw0KLSAgICBGWF9CT09MICAgICAgICAgR2RpcENyZWF0ZUZvbnRGcm9tRmFtaWx5KHZvaWQqIHBGYW1pbHksIEZYX0ZMT0FUIGZvbnRfc2l6ZSwgaW50IGZvbnRzdHlsZSwgaW50IGZsYWcsIHZvaWQqKiBwRm9udCk7DQotICAgIHZvaWQqICAgICAgICAgICBHZGlwQ3JlYXRlRm9udEZyb21Db2xsZWN0aW9uKHZvaWQqIHBGb250Q29sbGVjdGlvbiwgRlhfRkxPQVQgZm9udF9zaXplLCBpbnQgZm9udHN0eWxlKTsNCi0gICAgdm9pZCAgICAgICAgICAgIEdkaXBEZWxldGVGb250KHZvaWQqIHBGb250KTsNCi0gICAgRlhfQk9PTCAgICAgICAgIEdkaXBDcmVhdGVCaXRtYXAoQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCB2b2lkKipiaXRtYXApOw0KLSAgICB2b2lkICAgICAgICAgICAgR2RpcERpc3Bvc2VJbWFnZSh2b2lkKiBiaXRtYXApOw0KLSAgICB2b2lkICAgICAgICAgICAgR2RpcEdldEZvbnRTaXplKHZvaWQgKnBGb250LCBGWF9GTE9BVCAqc2l6ZSk7DQotICAgIHZvaWQqICAgICAgICAgICBHZGlBZGRGb250TWVtUmVzb3VyY2VFeCh2b2lkICpwRm9udGRhdGEsIEZYX0RXT1JEIHNpemUsIHZvaWQqIHBkdiwgRlhfRFdPUkQqIG51bV9mYWNlKTsNCi0gICAgRlhfQk9PTCAgICAgICAgIEdkaVJlbW92ZUZvbnRNZW1SZXNvdXJjZUV4KHZvaWQqIGhhbmRsZSk7DQotICAgIHZvaWQqCQkJbV9GdW5jdGlvbnNbMTAwXTsNCi0gICAgdm9pZCogICAgICAgICAgIG1fcEdkaUFkZEZvbnRNZW1SZXNvdXJjZUV4Ow0KLSAgICB2b2lkKiAgICAgICAgICAgbV9wR2RpUmVtb3ZlRm9udE1lbVJlc291cnNlRXg7DQotICAgIENGWF9ESUJpdG1hcCoJTG9hZERJQml0bWFwKFdJTkRJQl9PcGVuX0FyZ3NfIGFyZ3MpOw0KLXByb3RlY3RlZDoNCi0gICAgSE1PRFVMRQkJCW1faE1vZHVsZTsNCi0gICAgSE1PRFVMRSAgICAgICAgIG1fR2RpTW9kdWxlOw0KLX07DQotI2luY2x1ZGUgImR3cml0ZV9pbnQuaCINCi1jbGFzcyBDV2luMzJQbGF0Zm9ybSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0gICAgRlhfQk9PTAkJCW1fYkhhbGZUb25lOw0KLSAgICBDR2RpcGx1c0V4dAkJbV9HZGlwbHVzRXh0Ow0KLSAgICBDRFdyaXRlRXh0ICAgICAgbV9EV3JpdGVFeHQ7DQotfTsNCi1jbGFzcyBDR2RpRGV2aWNlRHJpdmVyIDogcHVibGljIElGWF9SZW5kZXJEZXZpY2VEcml2ZXINCi17DQotcHJvdGVjdGVkOg0KLSAgICB2aXJ0dWFsIGludAkJR2V0RGV2aWNlQ2FwcyhpbnQgY2Fwc19pZCk7DQotICAgIHZpcnR1YWwgdm9pZAlTYXZlU3RhdGUoKQ0KLSAgICB7DQotICAgICAgICBTYXZlREMobV9oREMpOw0KLSAgICB9DQotICAgIHZpcnR1YWwgdm9pZAlSZXN0b3JlU3RhdGUoRlhfQk9PTCBiS2VlcFNhdmVkID0gRkFMU0UpDQotICAgIHsNCi0gICAgICAgIFJlc3RvcmVEQyhtX2hEQywgLTEpOw0KLSAgICAgICAgaWYgKGJLZWVwU2F2ZWQpIHsNCi0gICAgICAgICAgICBTYXZlREMobV9oREMpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIHZpcnR1YWwgRlhfQk9PTAlTZXRDbGlwX1BhdGhGaWxsKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkRldmljZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpbGxfbW9kZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAlTZXRDbGlwX1BhdGhTdHJva2UoY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCi0gICAgdmlydHVhbCBGWF9CT09MCURyYXdQYXRoKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfR3JhcGhTdGF0ZURhdGEqIHBHcmFwaFN0YXRlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgZmlsbF9jb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIHN0cm9rZV9jb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWxsX21vZGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHBJY2NUcmFuc2Zvcm0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQJYmxlbmRfdHlwZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wgRmlsbFJlY3QoY29uc3QgRlhfUkVDVCogcFJlY3QsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBmaWxsX2NvbG9yLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0sIGludCBibGVuZF90eXBlKTsNCi0gICAgdmlydHVhbCBGWF9CT09MCURyYXdDb3NtZXRpY0xpbmUoRlhfRkxPQVQgeDEsIEZYX0ZMT0FUIHkxLCBGWF9GTE9BVCB4MiwgRlhfRkxPQVQgeTIsIEZYX0RXT1JEIGNvbG9yLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSwgaW50IGJsZW5kX3R5cGUpOw0KLSAgICB2aXJ0dWFsIEZYX0xQVk9JRCBHZXRDbGlwUmduKCkgOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wgU2V0Q2xpcFJnbihGWF9MUFZPSUQgcFJnbikgOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wgR2V0Q2xpcEJveChGWF9SRUNUKiBwUmVjdCk7DQotICAgIHZpcnR1YWwgRlhfQk9PTCBEZWxldGVEZXZpY2VSZ24oRlhfTFBWT0lEIHBSZ24pOw0KLSAgICB2aXJ0dWFsIHZvaWQJRHJhd0xpbmUoRlhfRkxPQVQgeDEsIEZYX0ZMT0FUIHkxLCBGWF9GTE9BVCB4MiwgRlhfRkxPQVQgeTIpOw0KLSAgICB2aXJ0dWFsIHZvaWQqCUdldFBsYXRmb3JtU3VyZmFjZSgpDQotICAgIHsNCi0gICAgICAgIHJldHVybiAodm9pZCopbV9oREM7DQotICAgIH0NCi0gICAgRlhfQk9PTAkJCUdESV9TZXRESUJpdHMoY29uc3QgQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCBjb25zdCBGWF9SRUNUKiBwU3JjUmVjdCwgaW50IGxlZnQsIGludCB0b3AsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHBJY2NUcmFuc2Zvcm0pOw0KLSAgICBGWF9CT09MCQkJR0RJX1N0cmV0Y2hESUJpdHMoY29uc3QgQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCBpbnQgZGVzdF9sZWZ0LCBpbnQgZGVzdF90b3AsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0LCBGWF9EV09SRCBmbGFncywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHBJY2NUcmFuc2Zvcm0pOw0KLSAgICBGWF9CT09MCQkJR0RJX1N0cmV0Y2hCaXRNYXNrKGNvbnN0IENGWF9ESUJpdG1hcCogcEJpdG1hcCwgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsIEZYX0RXT1JEIGJpdG1hcF9jb2xvciwgRlhfRFdPUkQgZmxhZ3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0pOw0KLSAgICBIREMJCQkJbV9oREM7DQotICAgIGludAkJCQltX1dpZHRoLCBtX0hlaWdodCwgbV9uQml0c1BlclBpeGVsOw0KLSAgICBpbnQJCQkJbV9EZXZpY2VDbGFzcywgbV9SZW5kZXJDYXBzOw0KLSAgICBDR2RpRGV2aWNlRHJpdmVyKEhEQyBoREMsIGludCBkZXZpY2VfY2xhc3MpOw0KLSAgICB+Q0dkaURldmljZURyaXZlcigpIHt9DQotfTsNCi1jbGFzcyBDR2RpRGlzcGxheURyaXZlciA6IHB1YmxpYyBDR2RpRGV2aWNlRHJpdmVyDQotew0KLXB1YmxpYzoNCi0gICAgQ0dkaURpc3BsYXlEcml2ZXIoSERDIGhEQyk7DQotcHJvdGVjdGVkOg0KLSAgICB2aXJ0dWFsIEZYX0JPT0wgR2V0RElCaXRzKENGWF9ESUJpdG1hcCogcEJpdG1hcCwgaW50IGxlZnQsIGludCB0b3AsIHZvaWQqIHBJY2NUcmFuc2Zvcm0gPSBOVUxMLCBGWF9CT09MIGJERWRnZSA9IEZBTFNFKTsNCi0gICAgdmlydHVhbCBGWF9CT09MIFNldERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBGWF9EV09SRCBjb2xvciwgY29uc3QgRlhfUkVDVCogcFNyY1JlY3QsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgYmxlbmRfdHlwZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSk7DQotICAgIHZpcnR1YWwgRlhfQk9PTCBTdHJldGNoRElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIEZYX0RXT1JEIGNvbG9yLCBpbnQgZGVzdF9sZWZ0LCBpbnQgZGVzdF90b3AsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsIGNvbnN0IEZYX1JFQ1QqIHBDbGlwUmVjdCwgRlhfRFdPUkQgZmxhZ3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQgYmxlbmRfdHlwZSk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAlTdGFydERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBpbnQgYml0bWFwX2FscGhhLCBGWF9EV09SRCBjb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIEZYX0RXT1JEIHJlbmRlcl9mbGFncywgRlhfTFBWT0lEJiBoYW5kbGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSwgaW50IGJsZW5kX3R5cGUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiBGQUxTRTsNCi0gICAgfQ0KLSAgICBGWF9CT09MCQkJVXNlRm94aXRTdHJldGNoRW5naW5lKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBTb3VyY2UsIEZYX0RXT1JEIGNvbG9yLCBpbnQgZGVzdF9sZWZ0LCBpbnQgZGVzdF90b3AsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgY29uc3QgRlhfUkVDVCogcENsaXBSZWN0LCBpbnQgcmVuZGVyX2ZsYWdzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwsIGludCBibGVuZF90eXBlID0gRlhESUJfQkxFTkRfTk9STUFMKTsNCi19Ow0KLWNsYXNzIENHZGlQcmludGVyRHJpdmVyIDogcHVibGljIENHZGlEZXZpY2VEcml2ZXINCi17DQotcHVibGljOg0KLSAgICBDR2RpUHJpbnRlckRyaXZlcihIREMgaERDKTsNCi1wcm90ZWN0ZWQ6DQotICAgIHZpcnR1YWwgaW50CQlHZXREZXZpY2VDYXBzKGludCBjYXBzX2lkKTsNCi0gICAgdmlydHVhbCBGWF9CT09MIFNldERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBGWF9EV09SRCBjb2xvciwgY29uc3QgRlhfUkVDVCogcFNyY1JlY3QsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgYmxlbmRfdHlwZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSk7DQotICAgIHZpcnR1YWwgRlhfQk9PTCBTdHJldGNoRElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIEZYX0RXT1JEIGNvbG9yLCBpbnQgZGVzdF9sZWZ0LCBpbnQgZGVzdF90b3AsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsIGNvbnN0IEZYX1JFQ1QqIHBDbGlwUmVjdCwgRlhfRFdPUkQgZmxhZ3MsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQgYmxlbmRfdHlwZSk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAlTdGFydERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBpbnQgYml0bWFwX2FscGhhLCBGWF9EV09SRCBjb2xvciwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIEZYX0RXT1JEIHJlbmRlcl9mbGFncywgRlhfTFBWT0lEJiBoYW5kbGUsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSwgaW50IGJsZW5kX3R5cGUpOw0KLSAgICBpbnQJCQkJbV9Ib3J6U2l6ZSwgbV9WZXJ0U2l6ZTsNCi0gICAgRlhfQk9PTAkJCW1fYlN1cHBvcnRST1A7DQotfTsNCi1jbGFzcyBDUFNPdXRwdXQgOiBwdWJsaWMgSUZYX1BTT3V0cHV0LCBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotICAgIENQU091dHB1dChIREMgaERDKTsNCi0gICAgdmlydHVhbCB+Q1BTT3V0cHV0KCk7DQotICAgIHZpcnR1YWwgdm9pZAkJCVJlbGVhc2UoKQ0KLSAgICB7DQotICAgICAgICBkZWxldGUgdGhpczsNCi0gICAgfQ0KLSAgICB2b2lkIEluaXQoKTsNCi0gICAgdmlydHVhbCB2b2lkCU91dHB1dFBTKEZYX0xQQ1NUUiBzdHJpbmcsIGludCBsZW4pOw0KLSAgICBIREMJCQkJbV9oREM7DQotICAgIEZYX0xQU1RSICAgICAgICBtX3BCdWY7DQotfTsNCi1jbGFzcyBDUFNQcmludGVyRHJpdmVyIDogcHVibGljIElGWF9SZW5kZXJEZXZpY2VEcml2ZXINCi17DQotcHVibGljOg0KLSAgICBDUFNQcmludGVyRHJpdmVyKCk7DQotICAgIEZYX0JPT0wJCQlJbml0KEhEQyBoREMsIGludCBwc19sZXZlbCwgRlhfQk9PTCBiQ215a091dHB1dCk7DQotICAgIH5DUFNQcmludGVyRHJpdmVyKCk7DQotcHJvdGVjdGVkOg0KLSAgICB2aXJ0dWFsIEZYX0JPT0wgSXNQU1ByaW50RHJpdmVyKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIFRSVUU7DQotICAgIH0NCi0gICAgdmlydHVhbCBpbnQJCUdldERldmljZUNhcHMoaW50IGNhcHNfaWQpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJU3RhcnRSZW5kZXJpbmcoKTsNCi0gICAgdmlydHVhbCB2b2lkCUVuZFJlbmRlcmluZygpOw0KLSAgICB2aXJ0dWFsIHZvaWQJU2F2ZVN0YXRlKCk7DQotICAgIHZpcnR1YWwgdm9pZAlSZXN0b3JlU3RhdGUoRlhfQk9PTCBiS2VlcFNhdmVkID0gRkFMU0UpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJU2V0Q2xpcF9QYXRoRmlsbChjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWxsX21vZGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wJU2V0Q2xpcF9QYXRoU3Ryb2tlKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQotICAgIHZpcnR1YWwgRlhfQk9PTAlEcmF3UGF0aChjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGZpbGxfY29sb3IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBzdHJva2VfY29sb3IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmlsbF9tb2RlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBwSWNjVHJhbnNmb3JtLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsZW5kX3R5cGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCi0gICAgdmlydHVhbCBGWF9CT09MIEdldENsaXBCb3goRlhfUkVDVCogcFJlY3QpOw0KLSAgICB2aXJ0dWFsIEZYX0JPT0wgU2V0RElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIEZYX0RXT1JEIGNvbG9yLCBjb25zdCBGWF9SRUNUKiBwU3JjUmVjdCwgaW50IGxlZnQsIGludCB0b3AsIGludCBibGVuZF90eXBlLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtKTsNCi0gICAgdmlydHVhbCBGWF9CT09MIFN0cmV0Y2hESUJpdHMoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwgRlhfRFdPUkQgY29sb3IsIGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgY29uc3QgRlhfUkVDVCogcENsaXBSZWN0LCBGWF9EV09SRCBmbGFncywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0sIGludCBibGVuZF90eXBlKTsNCi0gICAgdmlydHVhbCBGWF9CT09MCVN0YXJ0RElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIGludCBiaXRtYXBfYWxwaGEsIEZYX0RXT1JEIGNvbG9yLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE1hdHJpeCwgRlhfRFdPUkQgcmVuZGVyX2ZsYWdzLCBGWF9MUFZPSUQmIGhhbmRsZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQgYmxlbmRfdHlwZSk7DQotICAgIHZpcnR1YWwgRlhfQk9PTCBEcmF3RGV2aWNlVGV4dChpbnQgbkNoYXJzLCBjb25zdCBGWFRFWFRfQ0hBUlBPUyogcENoYXJQb3MsIENGWF9Gb250KiBwRm9udCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENGWF9Gb250Q2FjaGUqIHBDYWNoZSwgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsIEZYX0ZMT0FUIGZvbnRfc2l6ZSwgRlhfRFdPUkQgY29sb3IsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSk7DQotICAgIHZpcnR1YWwgdm9pZCoJR2V0UGxhdGZvcm1TdXJmYWNlKCkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuICh2b2lkKiltX2hEQzsNCi0gICAgfQ0KLSAgICBIREMJCQkJbV9oREM7DQotICAgIEZYX0JPT0wJCQltX2JDbXlrT3V0cHV0Ow0KLSAgICBpbnQJCQkJbV9XaWR0aCwgbV9IZWlnaHQsIG1fbkJpdHNQZXJQaXhlbDsNCi0gICAgaW50CQkJCW1fSG9yelNpemUsIG1fVmVydFNpemU7DQotICAgIENQU091dHB1dCoJCW1fcFBTT3V0cHV0Ow0KLSAgICBDRlhfUFNSZW5kZXJlcgltX1BTUmVuZGVyZXI7DQotfTsNCi12b2lkIF9Db2xvcjJBcmdiKEZYX0FSR0ImIGFyZ2IsIEZYX0RXT1JEIGNvbG9yLCBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSk7DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworc3RydWN0ICBXSU5ESUJfT3Blbl9BcmdzXzsKK2NsYXNzIENHZGlwbHVzRXh0Cit7CitwdWJsaWM6CisgICAgQ0dkaXBsdXNFeHQoKTsKKyAgICB+Q0dkaXBsdXNFeHQoKTsKKyAgICB2b2lkCQkJTG9hZCgpOworICAgIEZYX0JPT0wJCQlJc0F2YWlsYWJsZSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9oTW9kdWxlICE9IE5VTEw7CisgICAgfQorICAgIEZYX0JPT0wJCQlTdHJldGNoQml0TWFzayhIREMgaERDLCBCT09MIGJNb25vRGV2aWNlLCBjb25zdCBDRlhfRElCaXRtYXAqIHBCaXRtYXAsIGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRlc3Rfd2lkdGgsIGludCBkZXN0X2hlaWdodCwgRlhfRFdPUkQgYXJnYiwgY29uc3QgRlhfUkVDVCogcENsaXBSZWN0LCBpbnQgZmxhZ3MpOworICAgIEZYX0JPT0wJCQlTdHJldGNoRElCaXRzKEhEQyBoREMsIGNvbnN0IENGWF9ESUJpdG1hcCogcEJpdG1hcCwgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsIGNvbnN0IEZYX1JFQ1QqIHBDbGlwUmVjdCwgaW50IGZsYWdzKTsKKyAgICBGWF9CT09MCQkJRHJhd1BhdGgoSERDIGhEQywgY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfR3JhcGhTdGF0ZURhdGEqIHBHcmFwaFN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGWF9EV09SRCBmaWxsX2FyZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIHN0cm9rZV9hcmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmlsbF9tb2RlCisgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgIHZvaWQqCQkJTG9hZE1lbUZvbnQoRlhfQllURSogcERhdGEsIEZYX0RXT1JEIHNpemUpOworICAgIHZvaWQJCQlEZWxldGVNZW1Gb250KHZvaWQqIHBGb250Q29sbGVjdGlvbik7CisgICAgRlhfQk9PTCAgICAgICAgIEdkaXBDcmVhdGVGcm9tSW1hZ2Uodm9pZCogYml0bWFwLCB2b2lkKiogZ3JhcGhpY3MpOworICAgIHZvaWQgICAgICAgICAgICBHZGlwRGVsZXRlR3JhcGhpY3Modm9pZCogZ3JhcGhpY3MpOworICAgIHZvaWQgICAgICAgICAgICBHZGlwU2V0VGV4dFJlbmRlcmluZ0hpbnQodm9pZCogZ3JhcGhpY3MsIGludCBtb2RlKTsKKyAgICB2b2lkICAgICAgICAgICAgR2RpcFNldFBhZ2VVbml0KHZvaWQqIGdyYXBoaWNzLCBGWF9EV09SRCB1bml0KTsKKyAgICB2b2lkICAgICAgICAgICAgR2RpcFNldFdvcmxkVHJhbnNmb3JtKHZvaWQqIGdyYXBoaWNzLCB2b2lkKiBwTWF0cml4KTsKKyAgICBGWF9CT09MICAgICAgICAgR2RpcERyYXdEcml2ZXJTdHJpbmcodm9pZCAqZ3JhcGhpY3MsICB1bnNpZ25lZCBzaG9ydCAqdGV4dCwgaW50IGxlbmd0aCwgdm9pZCAqZm9udCwgdm9pZCogYnJ1c2gsIHZvaWQgKnBvc2l0aW9ucywgaW50IGZsYWdzLCBjb25zdCB2b2lkICptYXRyaXgpOworICAgIHZvaWQgICAgICAgICAgICBHZGlwQ3JlYXRlQnJ1c2goRlhfRFdPUkQgZmlsbF9hcmdiLCB2b2lkKiogcEJydXNoKTsKKyAgICB2b2lkICAgICAgICAgICAgR2RpcERlbGV0ZUJydXNoKHZvaWQqIHBCcnVzaCk7CisgICAgdm9pZCAgICAgICAgICAgIEdkaXBDcmVhdGVNYXRyaXgoRlhfRkxPQVQgYSwgRlhfRkxPQVQgYiwgRlhfRkxPQVQgYywgRlhfRkxPQVQgZCwgRlhfRkxPQVQgZSwgRlhfRkxPQVQgZiwgdm9pZCoqIG1hdHJpeCk7CisgICAgdm9pZCAgICAgICAgICAgIEdkaXBEZWxldGVNYXRyaXgodm9pZCogbWF0cml4KTsKKyAgICBGWF9CT09MICAgICAgICAgR2RpcENyZWF0ZUZvbnRGYW1pbHlGcm9tTmFtZShGWF9MUENXU1RSIG5hbWUsIHZvaWQqIHBGb250Q29sbGVjdGlvbiwgdm9pZCoqcEZhbWlseSk7CisgICAgdm9pZCAgICAgICAgICAgIEdkaXBEZWxldGVGb250RmFtaWx5KHZvaWQqIHBGYW1pbHkpOworICAgIEZYX0JPT0wgICAgICAgICBHZGlwQ3JlYXRlRm9udEZyb21GYW1pbHkodm9pZCogcEZhbWlseSwgRlhfRkxPQVQgZm9udF9zaXplLCBpbnQgZm9udHN0eWxlLCBpbnQgZmxhZywgdm9pZCoqIHBGb250KTsKKyAgICB2b2lkKiAgICAgICAgICAgR2RpcENyZWF0ZUZvbnRGcm9tQ29sbGVjdGlvbih2b2lkKiBwRm9udENvbGxlY3Rpb24sIEZYX0ZMT0FUIGZvbnRfc2l6ZSwgaW50IGZvbnRzdHlsZSk7CisgICAgdm9pZCAgICAgICAgICAgIEdkaXBEZWxldGVGb250KHZvaWQqIHBGb250KTsKKyAgICBGWF9CT09MICAgICAgICAgR2RpcENyZWF0ZUJpdG1hcChDRlhfRElCaXRtYXAqIHBCaXRtYXAsIHZvaWQqKmJpdG1hcCk7CisgICAgdm9pZCAgICAgICAgICAgIEdkaXBEaXNwb3NlSW1hZ2Uodm9pZCogYml0bWFwKTsKKyAgICB2b2lkICAgICAgICAgICAgR2RpcEdldEZvbnRTaXplKHZvaWQgKnBGb250LCBGWF9GTE9BVCAqc2l6ZSk7CisgICAgdm9pZCogICAgICAgICAgIEdkaUFkZEZvbnRNZW1SZXNvdXJjZUV4KHZvaWQgKnBGb250ZGF0YSwgRlhfRFdPUkQgc2l6ZSwgdm9pZCogcGR2LCBGWF9EV09SRCogbnVtX2ZhY2UpOworICAgIEZYX0JPT0wgICAgICAgICBHZGlSZW1vdmVGb250TWVtUmVzb3VyY2VFeCh2b2lkKiBoYW5kbGUpOworICAgIHZvaWQqCQkJbV9GdW5jdGlvbnNbMTAwXTsKKyAgICB2b2lkKiAgICAgICAgICAgbV9wR2RpQWRkRm9udE1lbVJlc291cmNlRXg7CisgICAgdm9pZCogICAgICAgICAgIG1fcEdkaVJlbW92ZUZvbnRNZW1SZXNvdXJzZUV4OworICAgIENGWF9ESUJpdG1hcCoJTG9hZERJQml0bWFwKFdJTkRJQl9PcGVuX0FyZ3NfIGFyZ3MpOworcHJvdGVjdGVkOgorICAgIEhNT0RVTEUJCQltX2hNb2R1bGU7CisgICAgSE1PRFVMRSAgICAgICAgIG1fR2RpTW9kdWxlOworfTsKKyNpbmNsdWRlICJkd3JpdGVfaW50LmgiCitjbGFzcyBDV2luMzJQbGF0Zm9ybSA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgRlhfQk9PTAkJCW1fYkhhbGZUb25lOworICAgIENHZGlwbHVzRXh0CQltX0dkaXBsdXNFeHQ7CisgICAgQ0RXcml0ZUV4dCAgICAgIG1fRFdyaXRlRXh0OworfTsKK2NsYXNzIENHZGlEZXZpY2VEcml2ZXIgOiBwdWJsaWMgSUZYX1JlbmRlckRldmljZURyaXZlcgoreworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgaW50CQlHZXREZXZpY2VDYXBzKGludCBjYXBzX2lkKTsKKyAgICB2aXJ0dWFsIHZvaWQJU2F2ZVN0YXRlKCkKKyAgICB7CisgICAgICAgIFNhdmVEQyhtX2hEQyk7CisgICAgfQorICAgIHZpcnR1YWwgdm9pZAlSZXN0b3JlU3RhdGUoRlhfQk9PTCBiS2VlcFNhdmVkID0gRkFMU0UpCisgICAgeworICAgICAgICBSZXN0b3JlREMobV9oREMsIC0xKTsKKyAgICAgICAgaWYgKGJLZWVwU2F2ZWQpIHsKKyAgICAgICAgICAgIFNhdmVEQyhtX2hEQyk7CisgICAgICAgIH0KKyAgICB9CisgICAgdmlydHVhbCBGWF9CT09MCVNldENsaXBfUGF0aEZpbGwoY29uc3QgQ0ZYX1BhdGhEYXRhKiBwUGF0aERhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpbGxfbW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJU2V0Q2xpcF9QYXRoU3Ryb2tlKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfR3JhcGhTdGF0ZURhdGEqIHBHcmFwaFN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgdmlydHVhbCBGWF9CT09MCURyYXdQYXRoKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwT2JqZWN0MkRldmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgZmlsbF9jb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgc3Ryb2tlX2NvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmlsbF9tb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogcEljY1RyYW5zZm9ybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50CWJsZW5kX3R5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIHZpcnR1YWwgRlhfQk9PTCBGaWxsUmVjdChjb25zdCBGWF9SRUNUKiBwUmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlhfRFdPUkQgZmlsbF9jb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0sIGludCBibGVuZF90eXBlKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJRHJhd0Nvc21ldGljTGluZShGWF9GTE9BVCB4MSwgRlhfRkxPQVQgeTEsIEZYX0ZMT0FUIHgyLCBGWF9GTE9BVCB5MiwgRlhfRFdPUkQgY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0sIGludCBibGVuZF90eXBlKTsKKyAgICB2aXJ0dWFsIEZYX0xQVk9JRCBHZXRDbGlwUmduKCkgOworICAgIHZpcnR1YWwgRlhfQk9PTCBTZXRDbGlwUmduKEZYX0xQVk9JRCBwUmduKSA7CisgICAgdmlydHVhbCBGWF9CT09MIEdldENsaXBCb3goRlhfUkVDVCogcFJlY3QpOworICAgIHZpcnR1YWwgRlhfQk9PTCBEZWxldGVEZXZpY2VSZ24oRlhfTFBWT0lEIHBSZ24pOworICAgIHZpcnR1YWwgdm9pZAlEcmF3TGluZShGWF9GTE9BVCB4MSwgRlhfRkxPQVQgeTEsIEZYX0ZMT0FUIHgyLCBGWF9GTE9BVCB5Mik7CisgICAgdmlydHVhbCB2b2lkKglHZXRQbGF0Zm9ybVN1cmZhY2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICh2b2lkKiltX2hEQzsKKyAgICB9CisgICAgRlhfQk9PTAkJCUdESV9TZXRESUJpdHMoY29uc3QgQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCBjb25zdCBGWF9SRUNUKiBwU3JjUmVjdCwgaW50IGxlZnQsIGludCB0b3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogcEljY1RyYW5zZm9ybSk7CisgICAgRlhfQk9PTAkJCUdESV9TdHJldGNoRElCaXRzKGNvbnN0IENGWF9ESUJpdG1hcCogcEJpdG1hcCwgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0LCBGWF9EV09SRCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogcEljY1RyYW5zZm9ybSk7CisgICAgRlhfQk9PTAkJCUdESV9TdHJldGNoQml0TWFzayhjb25zdCBDRlhfRElCaXRtYXAqIHBCaXRtYXAsIGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsIEZYX0RXT1JEIGJpdG1hcF9jb2xvciwgRlhfRFdPUkQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSk7CisgICAgSERDCQkJCW1faERDOworICAgIGludAkJCQltX1dpZHRoLCBtX0hlaWdodCwgbV9uQml0c1BlclBpeGVsOworICAgIGludAkJCQltX0RldmljZUNsYXNzLCBtX1JlbmRlckNhcHM7CisgICAgQ0dkaURldmljZURyaXZlcihIREMgaERDLCBpbnQgZGV2aWNlX2NsYXNzKTsKKyAgICB+Q0dkaURldmljZURyaXZlcigpIHt9Cit9OworY2xhc3MgQ0dkaURpc3BsYXlEcml2ZXIgOiBwdWJsaWMgQ0dkaURldmljZURyaXZlcgoreworcHVibGljOgorICAgIENHZGlEaXNwbGF5RHJpdmVyKEhEQyBoREMpOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgRlhfQk9PTCBHZXRESUJpdHMoQ0ZYX0RJQml0bWFwKiBwQml0bWFwLCBpbnQgbGVmdCwgaW50IHRvcCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwsIEZYX0JPT0wgYkRFZGdlID0gRkFMU0UpOworICAgIHZpcnR1YWwgRlhfQk9PTCBTZXRESUJpdHMoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwgRlhfRFdPUkQgY29sb3IsIGNvbnN0IEZYX1JFQ1QqIHBTcmNSZWN0LCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IGJsZW5kX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSk7CisgICAgdmlydHVhbCBGWF9CT09MIFN0cmV0Y2hESUJpdHMoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwgRlhfRFdPUkQgY29sb3IsIGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0LCBjb25zdCBGWF9SRUNUKiBwQ2xpcFJlY3QsIEZYX0RXT1JEIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQgYmxlbmRfdHlwZSk7CisgICAgdmlydHVhbCBGWF9CT09MCVN0YXJ0RElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIGludCBiaXRtYXBfYWxwaGEsIEZYX0RXT1JEIGNvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LCBGWF9EV09SRCByZW5kZXJfZmxhZ3MsIEZYX0xQVk9JRCYgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSwgaW50IGJsZW5kX3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICAgIEZYX0JPT0wJCQlVc2VGb3hpdFN0cmV0Y2hFbmdpbmUoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcFNvdXJjZSwgRlhfRFdPUkQgY29sb3IsIGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsIGNvbnN0IEZYX1JFQ1QqIHBDbGlwUmVjdCwgaW50IHJlbmRlcl9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnID0gMCwgdm9pZCogcEljY1RyYW5zZm9ybSA9IE5VTEwsIGludCBibGVuZF90eXBlID0gRlhESUJfQkxFTkRfTk9STUFMKTsKK307CitjbGFzcyBDR2RpUHJpbnRlckRyaXZlciA6IHB1YmxpYyBDR2RpRGV2aWNlRHJpdmVyCit7CitwdWJsaWM6CisgICAgQ0dkaVByaW50ZXJEcml2ZXIoSERDIGhEQyk7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBpbnQJCUdldERldmljZUNhcHMoaW50IGNhcHNfaWQpOworICAgIHZpcnR1YWwgRlhfQk9PTCBTZXRESUJpdHMoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwgRlhfRFdPUkQgY29sb3IsIGNvbnN0IEZYX1JFQ1QqIHBTcmNSZWN0LCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IGJsZW5kX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSk7CisgICAgdmlydHVhbCBGWF9CT09MIFN0cmV0Y2hESUJpdHMoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwgRlhfRFdPUkQgY29sb3IsIGludCBkZXN0X2xlZnQsIGludCBkZXN0X3RvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGVzdF93aWR0aCwgaW50IGRlc3RfaGVpZ2h0LCBjb25zdCBGWF9SRUNUKiBwQ2xpcFJlY3QsIEZYX0RXT1JEIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQgYmxlbmRfdHlwZSk7CisgICAgdmlydHVhbCBGWF9CT09MCVN0YXJ0RElCaXRzKGNvbnN0IENGWF9ESUJTb3VyY2UqIHBCaXRtYXAsIGludCBiaXRtYXBfYWxwaGEsIEZYX0RXT1JEIGNvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDRlhfQWZmaW5lTWF0cml4KiBwTWF0cml4LCBGWF9EV09SRCByZW5kZXJfZmxhZ3MsIEZYX0xQVk9JRCYgaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSwgaW50IGJsZW5kX3R5cGUpOworICAgIGludAkJCQltX0hvcnpTaXplLCBtX1ZlcnRTaXplOworICAgIEZYX0JPT0wJCQltX2JTdXBwb3J0Uk9QOworfTsKK2NsYXNzIENQU091dHB1dCA6IHB1YmxpYyBJRlhfUFNPdXRwdXQsIHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisgICAgQ1BTT3V0cHV0KEhEQyBoREMpOworICAgIHZpcnR1YWwgfkNQU091dHB1dCgpOworICAgIHZpcnR1YWwgdm9pZAkJCVJlbGVhc2UoKQorICAgIHsKKyAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgfQorICAgIHZvaWQgSW5pdCgpOworICAgIHZpcnR1YWwgdm9pZAlPdXRwdXRQUyhGWF9MUENTVFIgc3RyaW5nLCBpbnQgbGVuKTsKKyAgICBIREMJCQkJbV9oREM7CisgICAgRlhfTFBTVFIgICAgICAgIG1fcEJ1ZjsKK307CitjbGFzcyBDUFNQcmludGVyRHJpdmVyIDogcHVibGljIElGWF9SZW5kZXJEZXZpY2VEcml2ZXIKK3sKK3B1YmxpYzoKKyAgICBDUFNQcmludGVyRHJpdmVyKCk7CisgICAgRlhfQk9PTAkJCUluaXQoSERDIGhEQywgaW50IHBzX2xldmVsLCBGWF9CT09MIGJDbXlrT3V0cHV0KTsKKyAgICB+Q1BTUHJpbnRlckRyaXZlcigpOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgRlhfQk9PTCBJc1BTUHJpbnREcml2ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICAgIHZpcnR1YWwgaW50CQlHZXREZXZpY2VDYXBzKGludCBjYXBzX2lkKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJU3RhcnRSZW5kZXJpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQJRW5kUmVuZGVyaW5nKCk7CisgICAgdmlydHVhbCB2b2lkCVNhdmVTdGF0ZSgpOworICAgIHZpcnR1YWwgdm9pZAlSZXN0b3JlU3RhdGUoRlhfQk9PTCBiS2VlcFNhdmVkID0gRkFMU0UpOworICAgIHZpcnR1YWwgRlhfQk9PTAlTZXRDbGlwX1BhdGhGaWxsKGNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmaWxsX21vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgdmlydHVhbCBGWF9CT09MCVNldENsaXBfUGF0aFN0cm9rZShjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0dyYXBoU3RhdGVEYXRhKiBwR3JhcGhTdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIHZpcnR1YWwgRlhfQk9PTAlEcmF3UGF0aChjb25zdCBDRlhfUGF0aERhdGEqIHBQYXRoRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ0ZYX0FmZmluZU1hdHJpeCogcE9iamVjdDJEZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9HcmFwaFN0YXRlRGF0YSogcEdyYXBoU3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIGZpbGxfY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZYX0RXT1JEIHN0cm9rZV9jb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZpbGxfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHBJY2NUcmFuc2Zvcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibGVuZF90eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wgR2V0Q2xpcEJveChGWF9SRUNUKiBwUmVjdCk7CisgICAgdmlydHVhbCBGWF9CT09MIFNldERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBGWF9EV09SRCBjb2xvciwgY29uc3QgRlhfUkVDVCogcFNyY1JlY3QsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgYmxlbmRfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wgU3RyZXRjaERJQml0cyhjb25zdCBDRlhfRElCU291cmNlKiBwQml0bWFwLCBGWF9EV09SRCBjb2xvciwgaW50IGRlc3RfbGVmdCwgaW50IGRlc3RfdG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXN0X3dpZHRoLCBpbnQgZGVzdF9oZWlnaHQsIGNvbnN0IEZYX1JFQ1QqIHBDbGlwUmVjdCwgRlhfRFdPUkQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFscGhhX2ZsYWcsIHZvaWQqIHBJY2NUcmFuc2Zvcm0sIGludCBibGVuZF90eXBlKTsKKyAgICB2aXJ0dWFsIEZYX0JPT0wJU3RhcnRESUJpdHMoY29uc3QgQ0ZYX0RJQlNvdXJjZSogcEJpdG1hcCwgaW50IGJpdG1hcF9hbHBoYSwgRlhfRFdPUkQgY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBNYXRyaXgsIEZYX0RXT1JEIHJlbmRlcl9mbGFncywgRlhfTFBWT0lEJiBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbHBoYV9mbGFnLCB2b2lkKiBwSWNjVHJhbnNmb3JtLCBpbnQgYmxlbmRfdHlwZSk7CisgICAgdmlydHVhbCBGWF9CT09MIERyYXdEZXZpY2VUZXh0KGludCBuQ2hhcnMsIGNvbnN0IEZYVEVYVF9DSEFSUE9TKiBwQ2hhclBvcywgQ0ZYX0ZvbnQqIHBGb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlhfRm9udENhY2hlKiBwQ2FjaGUsIGNvbnN0IENGWF9BZmZpbmVNYXRyaXgqIHBPYmplY3QyRGV2aWNlLCBGWF9GTE9BVCBmb250X3NpemUsIEZYX0RXT1JEIGNvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSk7CisgICAgdmlydHVhbCB2b2lkKglHZXRQbGF0Zm9ybVN1cmZhY2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICh2b2lkKiltX2hEQzsKKyAgICB9CisgICAgSERDCQkJCW1faERDOworICAgIEZYX0JPT0wJCQltX2JDbXlrT3V0cHV0OworICAgIGludAkJCQltX1dpZHRoLCBtX0hlaWdodCwgbV9uQml0c1BlclBpeGVsOworICAgIGludAkJCQltX0hvcnpTaXplLCBtX1ZlcnRTaXplOworICAgIENQU091dHB1dCoJCW1fcFBTT3V0cHV0OworICAgIENGWF9QU1JlbmRlcmVyCW1fUFNSZW5kZXJlcjsKK307Cit2b2lkIF9Db2xvcjJBcmdiKEZYX0FSR0ImIGFyZ2IsIEZYX0RXT1JEIGNvbG9yLCBpbnQgYWxwaGFfZmxhZywgdm9pZCogcEljY1RyYW5zZm9ybSk7CmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfQ0JBX0ZvbnRtYXAuaCBiL2ZwZGZzZGsvaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9DQkFfRm9udG1hcC5oCmluZGV4IDc2MjQ1OTYuLjUwZjUxNjAgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9DQkFfRm9udG1hcC5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9DQkFfRm9udG1hcC5oCkBAIC0xLDUxICsxLDUxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9SQU9fRk9OVE1BUF9IXw0KLSNkZWZpbmUgX1JBT19GT05UTUFQX0hfDQotDQotI2lmIF9NU0NfVkVSID4gMTAwMA0KLSNwcmFnbWEgb25jZQ0KLSNlbmRpZiAvLyBfTVNDX1ZFUiA+IDEwMDANCi0NCi1jbGFzcyBDUERGU0RLX0Fubm90Ow0KLQ0KLWNsYXNzIENCQV9Gb250TWFwIDogcHVibGljIENQV0xfRm9udE1hcA0KLXsNCi1wdWJsaWM6DQotCUNCQV9Gb250TWFwKENQREZTREtfQW5ub3QqIHBBbm5vdCwgSUZYX1N5c3RlbUhhbmRsZXIqIHBTeXN0ZW1IYW5kbGVyKTsNCi0JQ0JBX0ZvbnRNYXAoQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpY3QsIElGWF9TeXN0ZW1IYW5kbGVyKiBwU3lzdGVtSGFuZGxlcik7DQotDQotCXZpcnR1YWwgfkNCQV9Gb250TWFwKCk7DQotDQotCXZpcnR1YWwgdm9pZAkJCQlJbml0aWFsKEZYX0xQQ1NUUiBmb250bmFtZSA9IE5VTEwpOw0KLQ0KLXB1YmxpYzoNCi0Jdm9pZAkJCQkJCVNldERlZmF1bHRGb250KENQREZfRm9udCAqIHBGb250LCBjb25zdCBDRlhfQnl0ZVN0cmluZyAmIHNGb250TmFtZSk7DQotDQotCXZvaWQJCQkJCQlSZXNldCgpOw0KLQl2b2lkCQkJCQkJU2V0QVBUeXBlKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzQVBUeXBlKTsNCi0NCi1wcm90ZWN0ZWQ6DQotCXZpcnR1YWwgQ1BERl9Gb250KgkJCUZpbmRGb250U2FtZUNoYXJzZXQoQ0ZYX0J5dGVTdHJpbmcmIHNGb250QWxpYXMsIEZYX0lOVDMyIG5DaGFyc2V0KTsNCi0JdmlydHVhbCB2b2lkCQkJCUFkZGVkRm9udChDUERGX0ZvbnQqIHBGb250LCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc0ZvbnRBbGlhcyk7DQotCXZpcnR1YWwgQ1BERl9Eb2N1bWVudCoJCUdldERvY3VtZW50KCk7DQotcHJpdmF0ZToNCi0JQ1BERl9Gb250KgkJCQkJRmluZFJlc0ZvbnRTYW1lQ2hhcnNldChDUERGX0RpY3Rpb25hcnkqIHBSZXNEaWN0LCBDRlhfQnl0ZVN0cmluZyYgc0ZvbnRBbGlhcywNCi0JCQkJCQkJCQlGWF9JTlQzMiBuQ2hhcnNldCk7DQotCUNQREZfRm9udCoJCQkJCUdldEFubm90RGVmYXVsdEZvbnQoQ0ZYX0J5dGVTdHJpbmcgJmNzTmFtZVRhZyk7DQotCXZvaWQJCQkJCQlBZGRGb250VG9Bbm5vdERpY3QoQ1BERl9Gb250KiBwRm9udCwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNBbGlhcyk7DQotDQotcHJpdmF0ZToNCi0JQ1BERl9Eb2N1bWVudCoJCQkJbV9wRG9jdW1lbnQ7DQotCUNQREZfRGljdGlvbmFyeSoJCQltX3BBbm5vdERpY3Q7DQotCUNQREZfRm9udCoJCQkJCW1fcERlZmF1bHRGb250Ow0KLQlDRlhfQnl0ZVN0cmluZwkJCQltX3NEZWZhdWx0Rm9udE5hbWU7DQotCQ0KLQlDRlhfQnl0ZVN0cmluZwkJCQltX3NBUFR5cGU7DQotfTsNCi0NCi0jZW5kaWYgLy8gX1JBT19GT05UTUFQX0hfDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfUkFPX0ZPTlRNQVBfSF8KKyNkZWZpbmUgX1JBT19GT05UTUFQX0hfCisKKyNpZiBfTVNDX1ZFUiA+IDEwMDAKKyNwcmFnbWEgb25jZQorI2VuZGlmIC8vIF9NU0NfVkVSID4gMTAwMAorCitjbGFzcyBDUERGU0RLX0Fubm90OworCitjbGFzcyBDQkFfRm9udE1hcCA6IHB1YmxpYyBDUFdMX0ZvbnRNYXAKK3sKK3B1YmxpYzoKKwlDQkFfRm9udE1hcChDUERGU0RLX0Fubm90KiBwQW5ub3QsIElGWF9TeXN0ZW1IYW5kbGVyKiBwU3lzdGVtSGFuZGxlcik7CisJQ0JBX0ZvbnRNYXAoQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpY3QsIElGWF9TeXN0ZW1IYW5kbGVyKiBwU3lzdGVtSGFuZGxlcik7CisKKwl2aXJ0dWFsIH5DQkFfRm9udE1hcCgpOworCisJdmlydHVhbCB2b2lkCQkJCUluaXRpYWwoRlhfTFBDU1RSIGZvbnRuYW1lID0gTlVMTCk7CisKK3B1YmxpYzoKKwl2b2lkCQkJCQkJU2V0RGVmYXVsdEZvbnQoQ1BERl9Gb250ICogcEZvbnQsIGNvbnN0IENGWF9CeXRlU3RyaW5nICYgc0ZvbnROYW1lKTsKKworCXZvaWQJCQkJCQlSZXNldCgpOworCXZvaWQJCQkJCQlTZXRBUFR5cGUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNBUFR5cGUpOworCitwcm90ZWN0ZWQ6CisJdmlydHVhbCBDUERGX0ZvbnQqCQkJRmluZEZvbnRTYW1lQ2hhcnNldChDRlhfQnl0ZVN0cmluZyYgc0ZvbnRBbGlhcywgRlhfSU5UMzIgbkNoYXJzZXQpOworCXZpcnR1YWwgdm9pZAkJCQlBZGRlZEZvbnQoQ1BERl9Gb250KiBwRm9udCwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNGb250QWxpYXMpOworCXZpcnR1YWwgQ1BERl9Eb2N1bWVudCoJCUdldERvY3VtZW50KCk7Citwcml2YXRlOgorCUNQREZfRm9udCoJCQkJCUZpbmRSZXNGb250U2FtZUNoYXJzZXQoQ1BERl9EaWN0aW9uYXJ5KiBwUmVzRGljdCwgQ0ZYX0J5dGVTdHJpbmcmIHNGb250QWxpYXMsCisJCQkJCQkJCQlGWF9JTlQzMiBuQ2hhcnNldCk7CisJQ1BERl9Gb250KgkJCQkJR2V0QW5ub3REZWZhdWx0Rm9udChDRlhfQnl0ZVN0cmluZyAmY3NOYW1lVGFnKTsKKwl2b2lkCQkJCQkJQWRkRm9udFRvQW5ub3REaWN0KENQREZfRm9udCogcEZvbnQsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzQWxpYXMpOworCitwcml2YXRlOgorCUNQREZfRG9jdW1lbnQqCQkJCW1fcERvY3VtZW50OworCUNQREZfRGljdGlvbmFyeSoJCQltX3BBbm5vdERpY3Q7CisJQ1BERl9Gb250KgkJCQkJbV9wRGVmYXVsdEZvbnQ7CisJQ0ZYX0J5dGVTdHJpbmcJCQkJbV9zRGVmYXVsdEZvbnROYW1lOworCQorCUNGWF9CeXRlU3RyaW5nCQkJCW1fc0FQVHlwZTsKK307CisKKyNlbmRpZiAvLyBfUkFPX0ZPTlRNQVBfSF8KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9DaGVja0JveC5oIGIvZnBkZnNkay9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0NoZWNrQm94LmgKaW5kZXggZjhlZTM3MC4uOWFhZjdmZSAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0NoZWNrQm94LmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0NoZWNrQm94LmgKQEAgLTEsMjcgKzEsMjcgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0ZGTF9DSEVDS0JPWF9IXw0KLSNkZWZpbmUgX0ZGTF9DSEVDS0JPWF9IXw0KLQ0KLWNsYXNzIENGRkxfQ2hlY2tCb3ggOiBwdWJsaWMgQ0ZGTF9CdXR0b24NCi17DQotcHVibGljOg0KLQlDRkZMX0NoZWNrQm94KENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAsIENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0KTsNCi0JdmlydHVhbCB+Q0ZGTF9DaGVja0JveCgpOw0KLQ0KLQl2aXJ0dWFsIENQV0xfV25kKgkJCU5ld1BERldpbmRvdyhjb25zdCBQV0xfQ1JFQVRFUEFSQU0mIGNwLCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOw0KLQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25LZXlEb3duKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuS2V5Q29kZSwgRlhfVUlOVCBuRmxhZ3MpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25DaGFyKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuQ2hhciwgRlhfVUlOVCBuRmxhZ3MpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25MQnV0dG9uVXAoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCk7DQotDQotCXZpcnR1YWwgRlhfQk9PTAkJCQlJc0RhdGFDaGFuZ2VkKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyk7DQotCXZpcnR1YWwgdm9pZAkJCQlTYXZlRGF0YShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOw0KLX07DQotDQotI2VuZGlmIC8vX0ZGTF9DSEVDS0JPWF9IXw0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZGTF9DSEVDS0JPWF9IXworI2RlZmluZSBfRkZMX0NIRUNLQk9YX0hfCisKK2NsYXNzIENGRkxfQ2hlY2tCb3ggOiBwdWJsaWMgQ0ZGTF9CdXR0b24KK3sKK3B1YmxpYzoKKwlDRkZMX0NoZWNrQm94KENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAsIENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0KTsKKwl2aXJ0dWFsIH5DRkZMX0NoZWNrQm94KCk7CisKKwl2aXJ0dWFsIENQV0xfV25kKgkJCU5ld1BERldpbmRvdyhjb25zdCBQV0xfQ1JFQVRFUEFSQU0mIGNwLCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOworCisJdmlydHVhbCBGWF9CT09MCQkJCU9uS2V5RG93bihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbktleUNvZGUsIEZYX1VJTlQgbkZsYWdzKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25DaGFyKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuQ2hhciwgRlhfVUlOVCBuRmxhZ3MpOworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkxCdXR0b25VcChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsKKworCXZpcnR1YWwgRlhfQk9PTAkJCQlJc0RhdGFDaGFuZ2VkKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyk7CisJdmlydHVhbCB2b2lkCQkJCVNhdmVEYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyk7Cit9OworCisjZW5kaWYgLy9fRkZMX0NIRUNLQk9YX0hfCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9Db21ib0JveC5oIGIvZnBkZnNkay9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0NvbWJvQm94LmgKaW5kZXggZjExNmFjZi4uNmRmODM0NyAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0NvbWJvQm94LmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0NvbWJvQm94LmgKQEAgLTEsNjkgKzEsNjkgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0ZGTF9DT01CT0JPWF9IXw0KLSAjZGVmaW5lIF9GRkxfQ09NQk9CT1hfSF8NCi0NCi1zdHJ1Y3QgRkZMX0NvbWJvQm94U3RhdGUNCi17DQotCWludCBuSW5kZXg7DQotCWludCBuU3RhcnQ7DQotCWludCBuRW5kOw0KLQlDRlhfV2lkZVN0cmluZyBzVmFsdWU7DQotfTsNCi1jbGFzcyBDQkFfRm9udE1hcDsNCi0NCi1jbGFzcyBDRkZMX0NvbWJvQm94IDogcHVibGljIENGRkxfRm9ybUZpbGxlciwgcHVibGljIElQV0xfRm9jdXNIYW5kbGVyLCBwdWJsaWMgSVBXTF9FZGl0X05vdGlmeQ0KLXsNCi1wdWJsaWM6DQotCUNGRkxfQ29tYm9Cb3goQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCwgQ1BERlNES19Bbm5vdCogcFdpZGdldCk7DQotCXZpcnR1YWwgfkNGRkxfQ29tYm9Cb3goKTsNCi0JDQotCXZpcnR1YWwJUFdMX0NSRUFURVBBUkFNCQlHZXRDcmVhdGVQYXJhbSgpOw0KLQl2aXJ0dWFsIENQV0xfV25kKgkJCU5ld1BERldpbmRvdyhjb25zdCBQV0xfQ1JFQVRFUEFSQU0mIGNwLCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOw0KLQ0KLQkNCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uQ2hhcihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkNoYXIsIEZYX1VJTlQgbkZsYWdzKTsNCi0JDQotCXZpcnR1YWwgRlhfQk9PTAkJCQlJc0RhdGFDaGFuZ2VkKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyk7DQotCXZpcnR1YWwgdm9pZAkJCQlTYXZlRGF0YShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOw0KLQkNCi0gCXZpcnR1YWwgdm9pZAkJCQlHZXRBY3Rpb25EYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLCBQREZTREtfRmllbGRBY3Rpb24mIGZhKTsNCi0gCXZpcnR1YWwgdm9pZAkJCQlTZXRBY3Rpb25EYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLCBjb25zdCBQREZTREtfRmllbGRBY3Rpb24mIGZhKTsNCi0gCXZpcnR1YWwgRlhfQk9PTAkJCQlJc0FjdGlvbkRhdGFDaGFuZ2VkKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgY29uc3QgUERGU0RLX0ZpZWxkQWN0aW9uJiBmYU9sZCwgY29uc3QgUERGU0RLX0ZpZWxkQWN0aW9uJiBmYU5ldyk7DQotCXZpcnR1YWwgdm9pZAkJCQlTYXZlU3RhdGUoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsNCi0JdmlydHVhbCB2b2lkCQkJCVJlc3RvcmVTdGF0ZShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOw0KLQkNCi0JdmlydHVhbCBDUFdMX1duZCoJCQlSZXNldFBERldpbmRvdyhDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0JPT0wgYlJlc3RvcmVWYWx1ZSk7DQotCXZpcnR1YWwgdm9pZAkJCQlPbktleVN0cm9rZShGWF9CT09MIGJLZXlEb3duLCBGWF9VSU5UIG5GbGFnKTsNCi0JDQotcHVibGljOg0KLQl2aXJ0dWFsIHZvaWQJCQkJT25TZXRGb2N1cyhDUFdMX1duZCogcFduZCk7DQotCXZpcnR1YWwgdm9pZAkJCQlPbktpbGxGb2N1cyhDUFdMX1duZCogcFduZCk7DQotCQ0KLXB1YmxpYzoNCi0JdmlydHVhbCB2b2lkCQkJCU9uQWRkVW5kbyhDUFdMX0VkaXQqIHBFZGl0KTsNCi0JDQotcHVibGljOg0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJQ2FuQ29weShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOyANCi0JdmlydHVhbCBGWF9CT09MCQkJCUNhbkN1dChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOyANCi0JdmlydHVhbCBGWF9CT09MCQkJCUNhblBhc3RlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7IA0KLQkNCi0JdmlydHVhbCB2b2lkCQkJCURvQ29weShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOyANCi0JdmlydHVhbCB2b2lkCQkJCURvQ3V0KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7IA0KLQl2aXJ0dWFsIHZvaWQJCQkJRG9QYXN0ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOyANCi0JDQotcHJpdmF0ZToNCi0JQ0ZYX1dpZGVTdHJpbmcJCQkJR2V0U2VsZWN0RXhwb3J0VGV4dCgpOw0KLQ0KLXByaXZhdGU6DQotCUNCQV9Gb250TWFwKgkJCQltX3BGb250TWFwOw0KLQlGRkxfQ29tYm9Cb3hTdGF0ZQkJCQltX1N0YXRlOw0KLQkvL0NGRkxfSU1fQk9YCQkJCQltX0lNQm94Ow0KLX07DQotDQotI2VuZGlmIC8vX0ZGTF9DT01CT0JPWF9IXw0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZGTF9DT01CT0JPWF9IXworICNkZWZpbmUgX0ZGTF9DT01CT0JPWF9IXworCitzdHJ1Y3QgRkZMX0NvbWJvQm94U3RhdGUKK3sKKwlpbnQgbkluZGV4OworCWludCBuU3RhcnQ7CisJaW50IG5FbmQ7CisJQ0ZYX1dpZGVTdHJpbmcgc1ZhbHVlOworfTsKK2NsYXNzIENCQV9Gb250TWFwOworCitjbGFzcyBDRkZMX0NvbWJvQm94IDogcHVibGljIENGRkxfRm9ybUZpbGxlciwgcHVibGljIElQV0xfRm9jdXNIYW5kbGVyLCBwdWJsaWMgSVBXTF9FZGl0X05vdGlmeQoreworcHVibGljOgorCUNGRkxfQ29tYm9Cb3goQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCwgQ1BERlNES19Bbm5vdCogcFdpZGdldCk7CisJdmlydHVhbCB+Q0ZGTF9Db21ib0JveCgpOworCQorCXZpcnR1YWwJUFdMX0NSRUFURVBBUkFNCQlHZXRDcmVhdGVQYXJhbSgpOworCXZpcnR1YWwgQ1BXTF9XbmQqCQkJTmV3UERGV2luZG93KGNvbnN0IFBXTF9DUkVBVEVQQVJBTSYgY3AsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyk7CisKKwkKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25DaGFyKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuQ2hhciwgRlhfVUlOVCBuRmxhZ3MpOworCQorCXZpcnR1YWwgRlhfQk9PTAkJCQlJc0RhdGFDaGFuZ2VkKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyk7CisJdmlydHVhbCB2b2lkCQkJCVNhdmVEYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyk7CisJCisgCXZpcnR1YWwgdm9pZAkJCQlHZXRBY3Rpb25EYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLCBQREZTREtfRmllbGRBY3Rpb24mIGZhKTsKKyAJdmlydHVhbCB2b2lkCQkJCVNldEFjdGlvbkRhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIGNvbnN0IFBERlNES19GaWVsZEFjdGlvbiYgZmEpOworIAl2aXJ0dWFsIEZYX0JPT0wJCQkJSXNBY3Rpb25EYXRhQ2hhbmdlZChDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIGNvbnN0IFBERlNES19GaWVsZEFjdGlvbiYgZmFPbGQsIGNvbnN0IFBERlNES19GaWVsZEFjdGlvbiYgZmFOZXcpOworCXZpcnR1YWwgdm9pZAkJCQlTYXZlU3RhdGUoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsKKwl2aXJ0dWFsIHZvaWQJCQkJUmVzdG9yZVN0YXRlKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyk7CisJCisJdmlydHVhbCBDUFdMX1duZCoJCQlSZXNldFBERldpbmRvdyhDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0JPT0wgYlJlc3RvcmVWYWx1ZSk7CisJdmlydHVhbCB2b2lkCQkJCU9uS2V5U3Ryb2tlKEZYX0JPT0wgYktleURvd24sIEZYX1VJTlQgbkZsYWcpOworCQorcHVibGljOgorCXZpcnR1YWwgdm9pZAkJCQlPblNldEZvY3VzKENQV0xfV25kKiBwV25kKTsKKwl2aXJ0dWFsIHZvaWQJCQkJT25LaWxsRm9jdXMoQ1BXTF9XbmQqIHBXbmQpOworCQorcHVibGljOgorCXZpcnR1YWwgdm9pZAkJCQlPbkFkZFVuZG8oQ1BXTF9FZGl0KiBwRWRpdCk7CisJCitwdWJsaWM6CisJdmlydHVhbCBGWF9CT09MCQkJCUNhbkNvcHkoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsgCisJdmlydHVhbCBGWF9CT09MCQkJCUNhbkN1dChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOyAKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJQ2FuUGFzdGUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsgCisJCisJdmlydHVhbCB2b2lkCQkJCURvQ29weShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOyAKKwl2aXJ0dWFsIHZvaWQJCQkJRG9DdXQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsgCisJdmlydHVhbCB2b2lkCQkJCURvUGFzdGUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsgCisJCitwcml2YXRlOgorCUNGWF9XaWRlU3RyaW5nCQkJCUdldFNlbGVjdEV4cG9ydFRleHQoKTsKKworcHJpdmF0ZToKKwlDQkFfRm9udE1hcCoJCQkJbV9wRm9udE1hcDsKKwlGRkxfQ29tYm9Cb3hTdGF0ZQkJCQltX1N0YXRlOworCS8vQ0ZGTF9JTV9CT1gJCQkJCW1fSU1Cb3g7Cit9OworCisjZW5kaWYgLy9fRkZMX0NPTUJPQk9YX0hfCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9Gb3JtRmlsbGVyLmggYi9mcGRmc2RrL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfRm9ybUZpbGxlci5oCmluZGV4IGViODE2NzUuLjdhMzQwMmEgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9Gb3JtRmlsbGVyLmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0Zvcm1GaWxsZXIuaApAQCAtMSwxNzggKzEsMTc4IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GRkxfRk9STUZJTExFUl9IXw0KLSNkZWZpbmUgX0ZGTF9GT1JNRklMTEVSX0hfDQotDQotI2luY2x1ZGUgIkZGTF9JRm9ybUZpbGxlci5oIg0KLSNpbmNsdWRlICJGRkxfQ0JBX0ZvbnRtYXAuaCINCi0NCi1jbGFzcyBDUERGU0RLX0Fubm90Ow0KLWNsYXNzIENGRkxfRm9ybUZpbGxlcjsNCi1jbGFzcyBDRkZMX05vdGlmeTsNCi1jbGFzcyBDUERGRG9jX0Vudmlyb25tZW50Ow0KLWNsYXNzIENQREZTREtfUGFnZVZpZXc7DQotY2xhc3MgQ1BERlNES19Eb2N1bWVudDsNCi1jbGFzcyBDUERGU0RLX1dpZGdldDsNCi0NCi0NCi0jZGVmaW5lIENGRkxfUGFnZVZpZXcyUERGV2luZG93CQlDRlhfTWFwUHRyVGVtcGxhdGU8Q1BERlNES19QYWdlVmlldyosIENQV0xfV25kKj4NCi0NCi1zdHJ1Y3QgRkZMX0tleVN0cm9rZURhdGENCi17DQotCUNGWF9XaWRlU3RyaW5nCQlzd1ZhbHVlOw0KLQlGWF9CT09MCQkJCWJGdWxsOw0KLQlpbnQJCQkJCW5TZWxTdGFydDsNCi0JaW50CQkJCQluU2VsRW5kOw0KLX07DQotDQotDQotDQotY2xhc3MgQ0ZGTF9Gb3JtRmlsbGVyIDogLypwdWJsaWMgSUJBX0Fubm90RmlsbGVyLCovIHB1YmxpYyBJUFdMX1Byb3ZpZGVyLCBwdWJsaWMgQ1BXTF9UaW1lckhhbmRsZXINCi17DQotcHVibGljOg0KLQlDRkZMX0Zvcm1GaWxsZXIoQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCwgQ1BERlNES19Bbm5vdCogcEFubm90KTsNCi0JdmlydHVhbCB+Q0ZGTF9Gb3JtRmlsbGVyKCk7DQotDQotCXZpcnR1YWwgRlhfUkVDVAkJCQlHZXRWaWV3QkJveChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCk7DQotCXZpcnR1YWwgdm9pZAkJCQlPbkRyYXcoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCAvKkhEQyBoREMsKi8gQ1BERlNES19Bbm5vdCogcEFubm90LCANCi0JCQkJCQkJCQlDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLA0KLQkJCQkJCQkJCS8qY29uc3QgQ1JlY3QmIHJjV2luZG93LCAqL0ZYX0RXT1JEIGR3RmxhZ3MpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25EcmF3RGVhY3RpdmUoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCAvKkhEQyBoREMsKi8gQ1BERlNES19Bbm5vdCogcEFubm90LCANCi0JCQkJCQkJCUNGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsDQotCQkJCQkJCQkvKmNvbnN0IENSZWN0JiByY1dpbmRvdywgKi9GWF9EV09SRCBkd0ZsYWdzKTsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCU9uQ3JlYXRlKENQREZTREtfQW5ub3QqIHBBbm5vdCk7DQotCXZpcnR1YWwgdm9pZAkJCQlPbkxvYWQoQ1BERlNES19Bbm5vdCogcEFubm90KTsNCi0JdmlydHVhbCB2b2lkCQkJCU9uRGVsZXRlKENQREZTREtfQW5ub3QqIHBBbm5vdCk7DQotDQotCXZpcnR1YWwgdm9pZAkJCQlPbk1vdXNlRW50ZXIoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25Nb3VzZUV4aXQoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QpOw0KLQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25MQnV0dG9uRG93bihDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uTEJ1dHRvblVwKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25MQnV0dG9uRGJsQ2xrKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25Nb3VzZU1vdmUoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbk1vdXNlV2hlZWwoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBzaG9ydCB6RGVsdGEsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uUkJ1dHRvbkRvd24oQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPblJCdXR0b25VcChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uUkJ1dHRvbkRibENsayhDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsNCi0NCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uS2V5RG93bihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbktleUNvZGUsIEZYX1VJTlQgbkZsYWdzKTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uQ2hhcihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkNoYXIsIEZYX1VJTlQgbkZsYWdzKTsNCi0NCi0JdmlydHVhbAl2b2lkCQkJCU9uRGVTZWxlY3RlZChDUERGU0RLX0Fubm90KiBwQW5ub3QpOw0KLQl2aXJ0dWFsCXZvaWQJCQkJT25TZWxlY3RlZChDUERGU0RLX0Fubm90KiBwQW5ub3QpOw0KLQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25TZXRGb2N1cyhDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWcpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25LaWxsRm9jdXMoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFnKTsNCi0NCi0JdmlydHVhbCBGWF9CT09MCQkJCUNhbkNvcHkoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsgDQotCXZpcnR1YWwgRlhfQk9PTAkJCQlDYW5DdXQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsgDQotCXZpcnR1YWwgRlhfQk9PTAkJCQlDYW5QYXN0ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOyANCi0NCi0JdmlydHVhbCB2b2lkCQkJCURvQ29weShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOyANCi0JdmlydHVhbCB2b2lkCQkJCURvQ3V0KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7IA0KLQl2aXJ0dWFsIHZvaWQJCQkJRG9QYXN0ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOyANCi0NCi1wdWJsaWM6IC8vQ1BXTF9UaW1lckhhbmRsZXINCi0JdmlydHVhbCB2b2lkCQkJCVRpbWVyUHJvYygpOw0KLQl2aXJ0dWFsIElGWF9TeXN0ZW1IYW5kbGVyKglHZXRTeXN0ZW1IYW5kbGVyKCkgY29uc3Q7DQotDQotcHVibGljOg0KLQl2aXJ0dWFsIENQREZfTWF0cml4CQkJR2V0V2luZG93TWF0cml4KHZvaWQqIHBBdHRhY2hlZERhdGEpOw0KLQl2aXJ0dWFsIENGWF9XaWRlU3RyaW5nCQlMb2FkUG9wdXBNZW51U3RyaW5nKGludCBuSW5kZXgpOw0KLQ0KLSAJdmlydHVhbCB2b2lkCQkJCUdldEFjdGlvbkRhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsDQotIAkJCQkJCQkJCVBERlNES19GaWVsZEFjdGlvbiYgZmEpOw0KLSAJdmlydHVhbCB2b2lkCQkJCVNldEFjdGlvbkRhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIA0KLSAJCQkJCQkJCQljb25zdCBQREZTREtfRmllbGRBY3Rpb24mIGZhKTsNCi0gCXZpcnR1YWwgRlhfQk9PTAkJCQlJc0FjdGlvbkRhdGFDaGFuZ2VkKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgY29uc3QgUERGU0RLX0ZpZWxkQWN0aW9uJiBmYU9sZCwgDQotIAkJCQkJCQkJCWNvbnN0IFBERlNES19GaWVsZEFjdGlvbiYgZmFOZXcpOw0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJU2F2ZVN0YXRlKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyk7DQotCXZpcnR1YWwgdm9pZAkJCQlSZXN0b3JlU3RhdGUoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsNCi0NCi0JdmlydHVhbCBDUFdMX1duZCogCQkJUmVzZXRQREZXaW5kb3coQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBGWF9CT09MIGJSZXN0b3JlVmFsdWUpOw0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJT25LZXlTdHJva2UoRlhfQk9PTCBiS2V5RG93bik7DQotDQotCUNQREZfTWF0cml4CQkJCQlHZXRDdXJNYXRyaXgoKTsNCi0NCi0JQ1BERl9SZWN0CQkJCQlGRkx0b1BXTChjb25zdCBDUERGX1JlY3QmIHJlY3QpOw0KLQlDUERGX1JlY3QJCQkJCVBXTHRvRkZMKGNvbnN0IENQREZfUmVjdCYgcmVjdCk7DQotCUNQREZfUG9pbnQJCQkJCUZGTHRvUFdMKGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsNCi0JQ1BERl9Qb2ludAkJCQkJUFdMdG9GRkwoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOw0KLQ0KLQlDUERGX1BvaW50CQkJCQlXbmR0b1BXTChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIGNvbnN0IENQREZfUG9pbnQmIHB0KTsNCi0JQ1BERl9SZWN0CQkJCQlGRkx0b1duZChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIGNvbnN0IENQREZfUmVjdCYgcmVjdCk7DQotDQotCXZvaWQJCQkJCQlTZXRXaW5kb3dSZWN0KENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgY29uc3QgQ1BERl9SZWN0JiByY1dpbmRvdyk7DQotCUNQREZfUmVjdAkJCQkJR2V0V2luZG93UmVjdChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOw0KLQ0KLQlzdGF0aWMgdm9pZAkJCQkJRkZMX0ZyZWVEYXRhKHZvaWQqIHBEYXRhKTsNCi0NCi0JRlhfQk9PTAkJCQkJCUNvbW1pdERhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBGWF9VSU5UIG5GbGFnKTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCUlzRGF0YUNoYW5nZWQoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsNCi0JdmlydHVhbCB2b2lkCQkJCVNhdmVEYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyk7DQotDQotCXZpcnR1YWwgdm9pZAkJCQlHZXRLZXlTdHJva2VEYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRkZMX0tleVN0cm9rZURhdGEmIGRhdGEpOw0KLQ0KLXB1YmxpYzoNCi0JQ1BXTF9XbmQqCQkJCQlHZXRQREZXaW5kb3coQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBGWF9CT09MIGJOZXcpOw0KLQl2b2lkCQkJCQkJRGVzdHJveVBERldpbmRvdyhDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOw0KLQl2b2lkCQkJCQkJRXNjYXBlRmlsbGVyKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfQk9PTCBiRGVzdHJveVBERldpbmRvdyk7DQotDQotCXZpcnR1YWwJUFdMX0NSRUFURVBBUkFNCQlHZXRDcmVhdGVQYXJhbSgpOw0KLQl2aXJ0dWFsIENQV0xfV25kKgkJCU5ld1BERldpbmRvdyhjb25zdCBQV0xfQ1JFQVRFUEFSQU0mIGNwLCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpID0gMDsNCi0JdmlydHVhbCBDUERGX1JlY3QJCQlHZXRGb2N1c0JveChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOw0KLQ0KLXB1YmxpYzoNCi0JRlhfQk9PTAkJCQkJCUlzVmFsaWQoKSBjb25zdDsNCi0JQ1BERl9SZWN0CQkJCQlHZXRQREZXaW5kb3dSZWN0KCkgY29uc3Q7DQotDQotCUNQREZTREtfUGFnZVZpZXcqCQkJR2V0Q3VyUGFnZVZpZXcoKTsNCi0Jdm9pZAkJCQkJCVNldENoYW5nZU1hcmsoKTsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCUludmFsaWRhdGVSZWN0KGRvdWJsZSBsZWZ0LCBkb3VibGUgdG9wLCBkb3VibGUgcmlnaHQsIGRvdWJsZSBib3R0b20pOw0KLQlDUERGRG9jX0Vudmlyb25tZW50KgkJR2V0QXBwKCl7cmV0dXJuIG1fcEFwcDt9DQotCUNQREZTREtfQW5ub3QqCQkJCUdldFNES0Fubm90KCkge3JldHVybiBtX3BBbm5vdDt9CQ0KLXByb3RlY3RlZDoNCi0JQ1BERkRvY19FbnZpcm9ubWVudCoJCW1fcEFwcDsNCi0JQ1BERlNES19XaWRnZXQqCQkJCW1fcFdpZGdldDsNCi0JQ1BERlNES19Bbm5vdCoJCQkJbV9wQW5ub3Q7DQotDQotCUZYX0JPT0wJCQkJCQltX2JWYWxpZDsNCi0JQ0ZGTF9QYWdlVmlldzJQREZXaW5kb3cJCW1fTWFwczsNCi0JQ1BERl9Qb2ludAkJCQkJbV9wdE9sZFBvczsNCi19Ow0KLQ0KLWNsYXNzIENGRkxfQnV0dG9uIDogcHVibGljIENGRkxfRm9ybUZpbGxlcg0KLXsNCi1wdWJsaWM6DQotCUNGRkxfQnV0dG9uKENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAsIENQREZTREtfQW5ub3QqIHBXaWRnZXQpOw0KLQl2aXJ0dWFsIH5DRkZMX0J1dHRvbigpOw0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJT25Nb3VzZUVudGVyKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90KTsNCi0JdmlydHVhbCB2b2lkCQkJCU9uTW91c2VFeGl0KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90KTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uTEJ1dHRvbkRvd24oQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkxCdXR0b25VcChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uTW91c2VNb3ZlKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25EcmF3KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldy8qLCBIREMgaERDKi8sIENQREZTREtfQW5ub3QqIHBBbm5vdCwgDQotCQkJCQkJCQlDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLA0KLQkJCQkJCQkJLypjb25zdCBDUmVjdCYgcmNXaW5kb3csKi8gRlhfRFdPUkQgZHdGbGFncyk7DQotDQotCXZpcnR1YWwJdm9pZAkJCQlPbkRyYXdEZWFjdGl2ZShDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIC8qSERDIGhEQywqLyBDUERGU0RLX0Fubm90KiBwQW5ub3QsIA0KLQkJCQkJCQkJQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwNCi0JCQkJCQkJCS8qY29uc3QgQ1JlY3QmIHJjV2luZG93LCAqL0ZYX0RXT1JEIGR3RmxhZ3MpOw0KLXByb3RlY3RlZDoNCi0JRlhfQk9PTAkJCQkJCW1fYk1vdXNlSW47DQotCUZYX0JPT0wJCQkJCQltX2JNb3VzZURvd247DQotfTsNCi0NCi0vLyNkZWZpbmUgQ0ZGTF9JTV9CT1gJCQkJQ0ZYX0FycmF5VGVtcGxhdGU8Q0JBX0VkaXRJbnB1dCo+DQotDQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRkZMX0ZPUk1GSUxMRVJfSF8KKyNkZWZpbmUgX0ZGTF9GT1JNRklMTEVSX0hfCisKKyNpbmNsdWRlICJGRkxfSUZvcm1GaWxsZXIuaCIKKyNpbmNsdWRlICJGRkxfQ0JBX0ZvbnRtYXAuaCIKKworY2xhc3MgQ1BERlNES19Bbm5vdDsKK2NsYXNzIENGRkxfRm9ybUZpbGxlcjsKK2NsYXNzIENGRkxfTm90aWZ5OworY2xhc3MgQ1BERkRvY19FbnZpcm9ubWVudDsKK2NsYXNzIENQREZTREtfUGFnZVZpZXc7CitjbGFzcyBDUERGU0RLX0RvY3VtZW50OworY2xhc3MgQ1BERlNES19XaWRnZXQ7CisKKworI2RlZmluZSBDRkZMX1BhZ2VWaWV3MlBERldpbmRvdwkJQ0ZYX01hcFB0clRlbXBsYXRlPENQREZTREtfUGFnZVZpZXcqLCBDUFdMX1duZCo+CisKK3N0cnVjdCBGRkxfS2V5U3Ryb2tlRGF0YQoreworCUNGWF9XaWRlU3RyaW5nCQlzd1ZhbHVlOworCUZYX0JPT0wJCQkJYkZ1bGw7CisJaW50CQkJCQluU2VsU3RhcnQ7CisJaW50CQkJCQluU2VsRW5kOworfTsKKworCisKK2NsYXNzIENGRkxfRm9ybUZpbGxlciA6IC8qcHVibGljIElCQV9Bbm5vdEZpbGxlciwqLyBwdWJsaWMgSVBXTF9Qcm92aWRlciwgcHVibGljIENQV0xfVGltZXJIYW5kbGVyCit7CitwdWJsaWM6CisJQ0ZGTF9Gb3JtRmlsbGVyKENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAsIENQREZTREtfQW5ub3QqIHBBbm5vdCk7CisJdmlydHVhbCB+Q0ZGTF9Gb3JtRmlsbGVyKCk7CisKKwl2aXJ0dWFsIEZYX1JFQ1QJCQkJR2V0Vmlld0JCb3goQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QpOworCXZpcnR1YWwgdm9pZAkJCQlPbkRyYXcoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCAvKkhEQyBoREMsKi8gQ1BERlNES19Bbm5vdCogcEFubm90LCAKKwkJCQkJCQkJCUNGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsCisJCQkJCQkJCQkvKmNvbnN0IENSZWN0JiByY1dpbmRvdywgKi9GWF9EV09SRCBkd0ZsYWdzKTsKKwl2aXJ0dWFsIHZvaWQJCQkJT25EcmF3RGVhY3RpdmUoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCAvKkhEQyBoREMsKi8gQ1BERlNES19Bbm5vdCogcEFubm90LCAKKwkJCQkJCQkJQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwKKwkJCQkJCQkJLypjb25zdCBDUmVjdCYgcmNXaW5kb3csICovRlhfRFdPUkQgZHdGbGFncyk7CisKKwl2aXJ0dWFsIHZvaWQJCQkJT25DcmVhdGUoQ1BERlNES19Bbm5vdCogcEFubm90KTsKKwl2aXJ0dWFsIHZvaWQJCQkJT25Mb2FkKENQREZTREtfQW5ub3QqIHBBbm5vdCk7CisJdmlydHVhbCB2b2lkCQkJCU9uRGVsZXRlKENQREZTREtfQW5ub3QqIHBBbm5vdCk7CisKKwl2aXJ0dWFsIHZvaWQJCQkJT25Nb3VzZUVudGVyKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90KTsKKwl2aXJ0dWFsIHZvaWQJCQkJT25Nb3VzZUV4aXQoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QpOworCisJdmlydHVhbCBGWF9CT09MCQkJCU9uTEJ1dHRvbkRvd24oQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCk7CisJdmlydHVhbCBGWF9CT09MCQkJCU9uTEJ1dHRvblVwKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkxCdXR0b25EYmxDbGsoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCk7CisJdmlydHVhbCBGWF9CT09MCQkJCU9uTW91c2VNb3ZlKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbk1vdXNlV2hlZWwoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBzaG9ydCB6RGVsdGEsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25SQnV0dG9uRG93bihDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25SQnV0dG9uVXAoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCk7CisJdmlydHVhbCBGWF9CT09MCQkJCU9uUkJ1dHRvbkRibENsayhDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsKKworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbktleURvd24oQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5LZXlDb2RlLCBGWF9VSU5UIG5GbGFncyk7CisJdmlydHVhbCBGWF9CT09MCQkJCU9uQ2hhcihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkNoYXIsIEZYX1VJTlQgbkZsYWdzKTsKKworCXZpcnR1YWwJdm9pZAkJCQlPbkRlU2VsZWN0ZWQoQ1BERlNES19Bbm5vdCogcEFubm90KTsKKwl2aXJ0dWFsCXZvaWQJCQkJT25TZWxlY3RlZChDUERGU0RLX0Fubm90KiBwQW5ub3QpOworCisJdmlydHVhbCBGWF9CT09MCQkJCU9uU2V0Rm9jdXMoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFnKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25LaWxsRm9jdXMoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFnKTsKKworCXZpcnR1YWwgRlhfQk9PTAkJCQlDYW5Db3B5KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7IAorCXZpcnR1YWwgRlhfQk9PTAkJCQlDYW5DdXQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsgCisJdmlydHVhbCBGWF9CT09MCQkJCUNhblBhc3RlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7IAorCisJdmlydHVhbCB2b2lkCQkJCURvQ29weShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOyAKKwl2aXJ0dWFsIHZvaWQJCQkJRG9DdXQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsgCisJdmlydHVhbCB2b2lkCQkJCURvUGFzdGUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsgCisKK3B1YmxpYzogLy9DUFdMX1RpbWVySGFuZGxlcgorCXZpcnR1YWwgdm9pZAkJCQlUaW1lclByb2MoKTsKKwl2aXJ0dWFsIElGWF9TeXN0ZW1IYW5kbGVyKglHZXRTeXN0ZW1IYW5kbGVyKCkgY29uc3Q7CisKK3B1YmxpYzoKKwl2aXJ0dWFsIENQREZfTWF0cml4CQkJR2V0V2luZG93TWF0cml4KHZvaWQqIHBBdHRhY2hlZERhdGEpOworCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCUxvYWRQb3B1cE1lbnVTdHJpbmcoaW50IG5JbmRleCk7CisKKyAJdmlydHVhbCB2b2lkCQkJCUdldEFjdGlvbkRhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsCisgCQkJCQkJCQkJUERGU0RLX0ZpZWxkQWN0aW9uJiBmYSk7CisgCXZpcnR1YWwgdm9pZAkJCQlTZXRBY3Rpb25EYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLCAKKyAJCQkJCQkJCQljb25zdCBQREZTREtfRmllbGRBY3Rpb24mIGZhKTsKKyAJdmlydHVhbCBGWF9CT09MCQkJCUlzQWN0aW9uRGF0YUNoYW5nZWQoQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLCBjb25zdCBQREZTREtfRmllbGRBY3Rpb24mIGZhT2xkLCAKKyAJCQkJCQkJCQljb25zdCBQREZTREtfRmllbGRBY3Rpb24mIGZhTmV3KTsKKworCXZpcnR1YWwgdm9pZAkJCQlTYXZlU3RhdGUoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsKKwl2aXJ0dWFsIHZvaWQJCQkJUmVzdG9yZVN0YXRlKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyk7CisKKwl2aXJ0dWFsIENQV0xfV25kKiAJCQlSZXNldFBERldpbmRvdyhDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0JPT0wgYlJlc3RvcmVWYWx1ZSk7CisKKwl2aXJ0dWFsIHZvaWQJCQkJT25LZXlTdHJva2UoRlhfQk9PTCBiS2V5RG93bik7CisKKwlDUERGX01hdHJpeAkJCQkJR2V0Q3VyTWF0cml4KCk7CisKKwlDUERGX1JlY3QJCQkJCUZGTHRvUFdMKGNvbnN0IENQREZfUmVjdCYgcmVjdCk7CisJQ1BERl9SZWN0CQkJCQlQV0x0b0ZGTChjb25zdCBDUERGX1JlY3QmIHJlY3QpOworCUNQREZfUG9pbnQJCQkJCUZGTHRvUFdMKGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsKKwlDUERGX1BvaW50CQkJCQlQV0x0b0ZGTChjb25zdCBDUERGX1BvaW50JiBwb2ludCk7CisKKwlDUERGX1BvaW50CQkJCQlXbmR0b1BXTChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIGNvbnN0IENQREZfUG9pbnQmIHB0KTsKKwlDUERGX1JlY3QJCQkJCUZGTHRvV25kKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgY29uc3QgQ1BERl9SZWN0JiByZWN0KTsKKworCXZvaWQJCQkJCQlTZXRXaW5kb3dSZWN0KENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgY29uc3QgQ1BERl9SZWN0JiByY1dpbmRvdyk7CisJQ1BERl9SZWN0CQkJCQlHZXRXaW5kb3dSZWN0KENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyk7CisKKwlzdGF0aWMgdm9pZAkJCQkJRkZMX0ZyZWVEYXRhKHZvaWQqIHBEYXRhKTsKKworCUZYX0JPT0wJCQkJCQlDb21taXREYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfVUlOVCBuRmxhZyk7CisJdmlydHVhbCBGWF9CT09MCQkJCUlzRGF0YUNoYW5nZWQoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsKKwl2aXJ0dWFsIHZvaWQJCQkJU2F2ZURhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsKKworCXZpcnR1YWwgdm9pZAkJCQlHZXRLZXlTdHJva2VEYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRkZMX0tleVN0cm9rZURhdGEmIGRhdGEpOworCitwdWJsaWM6CisJQ1BXTF9XbmQqCQkJCQlHZXRQREZXaW5kb3coQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBGWF9CT09MIGJOZXcpOworCXZvaWQJCQkJCQlEZXN0cm95UERGV2luZG93KENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyk7CisJdm9pZAkJCQkJCUVzY2FwZUZpbGxlcihDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0JPT0wgYkRlc3Ryb3lQREZXaW5kb3cpOworCisJdmlydHVhbAlQV0xfQ1JFQVRFUEFSQU0JCUdldENyZWF0ZVBhcmFtKCk7CisJdmlydHVhbCBDUFdMX1duZCoJCQlOZXdQREZXaW5kb3coY29uc3QgUFdMX0NSRUFURVBBUkFNJiBjcCwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KSA9IDA7CisJdmlydHVhbCBDUERGX1JlY3QJCQlHZXRGb2N1c0JveChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOworCitwdWJsaWM6CisJRlhfQk9PTAkJCQkJCUlzVmFsaWQoKSBjb25zdDsKKwlDUERGX1JlY3QJCQkJCUdldFBERldpbmRvd1JlY3QoKSBjb25zdDsKKworCUNQREZTREtfUGFnZVZpZXcqCQkJR2V0Q3VyUGFnZVZpZXcoKTsKKwl2b2lkCQkJCQkJU2V0Q2hhbmdlTWFyaygpOworCisJdmlydHVhbCB2b2lkCQkJCUludmFsaWRhdGVSZWN0KGRvdWJsZSBsZWZ0LCBkb3VibGUgdG9wLCBkb3VibGUgcmlnaHQsIGRvdWJsZSBib3R0b20pOworCUNQREZEb2NfRW52aXJvbm1lbnQqCQlHZXRBcHAoKXtyZXR1cm4gbV9wQXBwO30KKwlDUERGU0RLX0Fubm90KgkJCQlHZXRTREtBbm5vdCgpIHtyZXR1cm4gbV9wQW5ub3Q7fQkKK3Byb3RlY3RlZDoKKwlDUERGRG9jX0Vudmlyb25tZW50KgkJbV9wQXBwOworCUNQREZTREtfV2lkZ2V0KgkJCQltX3BXaWRnZXQ7CisJQ1BERlNES19Bbm5vdCoJCQkJbV9wQW5ub3Q7CisKKwlGWF9CT09MCQkJCQkJbV9iVmFsaWQ7CisJQ0ZGTF9QYWdlVmlldzJQREZXaW5kb3cJCW1fTWFwczsKKwlDUERGX1BvaW50CQkJCQltX3B0T2xkUG9zOworfTsKKworY2xhc3MgQ0ZGTF9CdXR0b24gOiBwdWJsaWMgQ0ZGTF9Gb3JtRmlsbGVyCit7CitwdWJsaWM6CisJQ0ZGTF9CdXR0b24oQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCwgQ1BERlNES19Bbm5vdCogcFdpZGdldCk7CisJdmlydHVhbCB+Q0ZGTF9CdXR0b24oKTsKKworCXZpcnR1YWwgdm9pZAkJCQlPbk1vdXNlRW50ZXIoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QpOworCXZpcnR1YWwgdm9pZAkJCQlPbk1vdXNlRXhpdChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCk7CisJdmlydHVhbCBGWF9CT09MCQkJCU9uTEJ1dHRvbkRvd24oQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCk7CisJdmlydHVhbCBGWF9CT09MCQkJCU9uTEJ1dHRvblVwKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbk1vdXNlTW92ZShDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsKKwl2aXJ0dWFsIHZvaWQJCQkJT25EcmF3KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldy8qLCBIREMgaERDKi8sIENQREZTREtfQW5ub3QqIHBBbm5vdCwgCisJCQkJCQkJCUNGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsCisJCQkJCQkJCS8qY29uc3QgQ1JlY3QmIHJjV2luZG93LCovIEZYX0RXT1JEIGR3RmxhZ3MpOworCisJdmlydHVhbAl2b2lkCQkJCU9uRHJhd0RlYWN0aXZlKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgLypIREMgaERDLCovIENQREZTREtfQW5ub3QqIHBBbm5vdCwgCisJCQkJCQkJCUNGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsCisJCQkJCQkJCS8qY29uc3QgQ1JlY3QmIHJjV2luZG93LCAqL0ZYX0RXT1JEIGR3RmxhZ3MpOworcHJvdGVjdGVkOgorCUZYX0JPT0wJCQkJCQltX2JNb3VzZUluOworCUZYX0JPT0wJCQkJCQltX2JNb3VzZURvd247Cit9OworCisvLyNkZWZpbmUgQ0ZGTF9JTV9CT1gJCQkJQ0ZYX0FycmF5VGVtcGxhdGU8Q0JBX0VkaXRJbnB1dCo+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZnBkZnNkay9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0lGb3JtRmlsbGVyLmggYi9mcGRmc2RrL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfSUZvcm1GaWxsZXIuaAppbmRleCA3OWI0YjhlLi4zOTNmMGJlIDEwMDY0NAotLS0gYS9mcGRmc2RrL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfSUZvcm1GaWxsZXIuaAorKysgYi9mcGRmc2RrL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfSUZvcm1GaWxsZXIuaApAQCAtMSwxNDQgKzEsMTQ0IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GRkxfSUZPUk1GSUxMRVJfSF8NCi0jZGVmaW5lIF9GRkxfSUZPUk1GSUxMRVJfSF8NCi0NCi0jaW5jbHVkZSAiRm9ybUZpbGxlci5oIg0KLWNsYXNzIENGRkxfRm9ybUZpbGxlcjsNCi1jbGFzcyBDRkZMX1ByaXZhdGVEYXRhOw0KLQ0KLSNkZWZpbmUgQ0ZGTF9XaWRnZXQyRmlsbGVyCQlDRlhfTWFwUHRyVGVtcGxhdGU8Q1BERlNES19Bbm5vdCosIENGRkxfRm9ybUZpbGxlcio+DQotDQotLy8gI2RlZmluZSBJc0FMVHByZXNzZWQoKQkJCShHZXRLZXlTdGF0ZShWS19NRU5VKSA8IDApDQotLy8gI2RlZmluZSBJc0NUUkxwcmVzc2VkKCkJCQkoR2V0S2V5U3RhdGUoVktfQ09OVFJPTCkgPCAwKQ0KLS8vICNkZWZpbmUgSXNTSElGVHByZXNzZWQoKQkJKEdldEtleVN0YXRlKFZLX1NISUZUKSYweDgwMDApDQotLy8gI2RlZmluZSBJc0lOU0VSVHByZXNzZWQoKQkJKEdldEtleVN0YXRlKFZLX0lOU0VSVCkgJiAweDAxKQkNCi0vLyAjZGVmaW5lIFZLX1NISUZUICAgICAgICAgIDB4MTANCi0vLyAjZGVmaW5lIFZLX0NPTlRST0wgICAgICAgIDB4MTENCi0vLyAjZGVmaW5lIFZLX01FTlUgICAgICAgICAgIDB4MTINCi0vLyAjZGVmaW5lIFZLX1JFVFVSTiAgICAgICAgIDB4MEQNCi0vLyAjZGVmaW5lIFZLX1NQQUNFICAgICAgICAgIDB4MjANCi0vLyAjZGVmaW5lIFZLX0VTQ0FQRSAgICAgICAgIDB4MUINCi0NCi0NCi0NCi1jbGFzcyBDRkZMX0lGb3JtRmlsbGVyIDovKiBwdWJsaWMgSUJBX0Fubm90RmlsbGVyLCAqL3B1YmxpYyBJUFdMX0ZpbGxlcl9Ob3RpZnkvLywgDQotLy8JcHVibGljIElVbmRvX0V2ZW50SGFuZGxlciwgcHVibGljIElDbGlwYm9hcmRfSGFuZGxlcg0KLXsNCi1wdWJsaWM6DQotCUNGRkxfSUZvcm1GaWxsZXIoQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCk7DQotCXZpcnR1YWwgfkNGRkxfSUZvcm1GaWxsZXIoKTsNCi0NCi0JdmlydHVhbCBGWF9CT09MCQkJCUFubm90X0hpdFRlc3QoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LENQREZTREtfQW5ub3QqIHBBbm5vdCwgQ1BERl9Qb2ludCBwb2ludCk7DQotCXZpcnR1YWwgRlhfUkVDVAkJCQlHZXRWaWV3QkJveChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCk7DQotCXZpcnR1YWwgdm9pZAkJCQlPbkRyYXcoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCAvKkhEQyBoREMsKi8gQ1BERlNES19Bbm5vdCogcEFubm90LCANCi0JCQkJCQkJCQlDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLA0KLQkJCQkJCQkJCS8qY29uc3QgQ1JlY3QmIHJjV2luZG93LCovIEZYX0RXT1JEIGR3RmxhZ3MpOw0KLQ0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJT25DcmVhdGUoQ1BERlNES19Bbm5vdCogcEFubm90KTsNCi0JdmlydHVhbCB2b2lkCQkJCU9uTG9hZChDUERGU0RLX0Fubm90KiBwQW5ub3QpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25EZWxldGUoQ1BERlNES19Bbm5vdCogcEFubm90KTsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCU9uTW91c2VFbnRlcihDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZyk7DQotCXZpcnR1YWwgdm9pZAkJCQlPbk1vdXNlRXhpdChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZyk7DQotDQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkxCdXR0b25Eb3duKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25MQnV0dG9uVXAoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkxCdXR0b25EYmxDbGsoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbk1vdXNlTW92ZShDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uTW91c2VXaGVlbChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIHNob3J0IHpEZWx0YSwgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25SQnV0dG9uRG93bihDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uUkJ1dHRvblVwKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25SQnV0dG9uRGJsQ2xrKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOw0KLQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25LZXlEb3duKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuS2V5Q29kZSwgRlhfVUlOVCBuRmxhZ3MpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25DaGFyKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuQ2hhciwgRlhfVUlOVCBuRmxhZ3MpOw0KLQ0KLQl2aXJ0dWFsCXZvaWQJCQkJT25EZVNlbGVjdGVkKENQREZTREtfQW5ub3QqIHBBbm5vdCk7DQotCXZpcnR1YWwJdm9pZAkJCQlPblNlbGVjdGVkKENQREZTREtfQW5ub3QqIHBBbm5vdCk7DQotDQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPblNldEZvY3VzKENQREZTREtfQW5ub3QqIHBBbm5vdCxGWF9VSU5UIG5GbGFnKTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uS2lsbEZvY3VzKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZyk7DQotDQotcHVibGljOg0KLQl2aXJ0dWFsIHZvaWQJCQkJUXVlcnlXaGVyZVBvcHVwKHZvaWQqIHBQcml2YXRlRGF0YSwgRlhfRkxPQVQgZlBvcHVwTWluLEZYX0ZMT0FUIGZQb3B1cE1heCwgRlhfSU5UMzIgJiBuUmV0LCBGWF9GTE9BVCAmIGZQb3B1cFJldCk7DQotCXZpcnR1YWwgdm9pZAkJCQlPbkJlZm9yZUtleVN0cm9rZShGWF9CT09MIGJFZGl0T3JMaXN0LCB2b2lkKiBwUHJpdmF0ZURhdGEsIEZYX0lOVDMyIG5LZXlDb2RlLA0KLQkJCQkJCQkJCQlDRlhfV2lkZVN0cmluZyAmIHN0ckNoYW5nZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZUV4LCANCi0JCQkJCQkJCQkJaW50IG5TZWxTdGFydCwgaW50IG5TZWxFbmQsDQotCQkJCQkJCQkJCUZYX0JPT0wgYktleURvd24sIEZYX0JPT0wgJiBiUkMsIEZYX0JPT0wgJiBiRXhpdCwgRlhfRFdPUkQgbkZsYWcpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25BZnRlcktleVN0cm9rZShGWF9CT09MIGJFZGl0T3JMaXN0LCB2b2lkKiBwUHJpdmF0ZURhdGEsIEZYX0JPT0wgJiBiRXhpdCwgRlhfRFdPUkQgbkZsYWcpIDsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCU9uU2V0V2luZG93UmVjdCh2b2lkKiBwUHJpdmF0ZURhdGEsIGNvbnN0IENQREZfUmVjdCAmIHJjV2luZG93KTsNCi0JdmlydHVhbCB2b2lkCQkJCU9uS2V5U3Ryb2tlKEZYX0JPT0wgYkVkaXRPckxpc3QsIHZvaWQqIHBQcml2YXRlRGF0YSwgRlhfSU5UMzIgbktleUNvZGUsIENGWF9XaWRlU3RyaW5nICYgc3RyQ2hhbmdlLCANCi0JCQkJCQkJCQljb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyQ2hhbmdlRXgsIEZYX0JPT0wgYktleURvd24sIEZYX0JPT0wgJiBiUkMsIEZYX0JPT0wgJiBiRXhpdCk7DQotDQotcHVibGljOg0KLQl2aXJ0dWFsIHZvaWQJCQkJQmVmb3JlVW5kbyhDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJQmVmb3JlUmVkbyhDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJQWZ0ZXJVbmRvKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7DQotCXZpcnR1YWwgdm9pZAkJCQlBZnRlclJlZG8oQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsNCi0NCi1wdWJsaWM6DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlDYW5Db3B5KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7IA0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJQ2FuQ3V0KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7IA0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJQ2FuUGFzdGUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsgDQotDQotCXZpcnR1YWwgdm9pZAkJCQlEb0NvcHkoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsgDQotCXZpcnR1YWwgdm9pZAkJCQlEb0N1dChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOyANCi0JdmlydHVhbCB2b2lkCQkJCURvUGFzdGUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsgDQotDQotcHVibGljOg0KLQlDRkZMX0Zvcm1GaWxsZXIqCQkJR2V0Rm9ybUZpbGxlcihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0JPT0wgYlJlZ2lzdGVyKTsNCi0Jdm9pZAkJCQkJCVJlbW92ZUZvcm1GaWxsZXIoQ1BERlNES19Bbm5vdCogcEFubm90KTsNCi0NCi0Jc3RhdGljIEZYX0JPT0wJCQkJSXNWaXNpYmxlKENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0KTsNCi0Jc3RhdGljIEZYX0JPT0wJCQkJSXNSZWFkT25seShDUERGU0RLX1dpZGdldCogcFdpZGdldCk7DQotCXN0YXRpYyBGWF9CT09MCQkJCUlzRmlsbGluZ0FsbG93ZWQoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQpOw0KLSAJc3RhdGljIEZYX0JPT0wJCQkJSXNWYWxpZEFubm90KENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90KTsNCi0NCi0Jdm9pZAkJCQkJCU9uS2V5U3Ryb2tlQ29tbWl0KENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0LCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0JPT0wmIGJSQywgRlhfQk9PTCYgYkV4aXQsIEZYX0RXT1JEIG5GbGFnKTsNCi0Jdm9pZAkJCQkJCU9uVmFsaWRhdGUoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfQk9PTCYgYlJDLCBGWF9CT09MJiBiRXhpdCwgRlhfRFdPUkQgbkZsYWcpOw0KLQ0KLQl2b2lkCQkJCQkJT25DYWxjdWxhdGUoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfQk9PTCYgYkV4aXQsIEZYX0RXT1JEIG5GbGFnKTsNCi0Jdm9pZAkJCQkJCU9uRm9ybWF0KENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0LCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0JPT0wmIGJFeGl0LCBGWF9EV09SRCBuRmxhZyk7DQotCXZvaWQJCQkJCQlPbkJ1dHRvblVwKENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0LCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0JPT0wmIGJSZXNldCwgRlhfQk9PTCYgYkV4aXQsRlhfVUlOVCBuRmxhZyk7DQotLy8gCXN0YXRpYyBMUkVTVUxUIENBTExCQUNLCQlGRkxfV25kUHJvYygNCi0vLyAJCQkJCQkJCQkgIGludCBjb2RlLCAgICAgICAvLyBob29rIGNvZGUNCi0vLyAJCQkJCQkJCQkgIFdQQVJBTSB3UGFyYW0sICAvLyB2aXJ0dWFsLWtleSBjb2RlDQotLy8gCQkJCQkJCQkJICBMUEFSQU0gbFBhcmFtICAgLy8ga2V5c3Ryb2tlLW1lc3NhZ2UgaW5mb3JtYXRpb24NCi0vLyAJCQkJCQkJCQkJKTsNCi0vLyAJc3RhdGljIE1TRwkJCQkJR2V0TGFzdE1lc3NhZ2UoKTsNCi0Jc3RhdGljIGludAkJCQkJR2V0Q29tbWl0S2V5KCk7DQotCXN0YXRpYyBGWF9CT09MCQkJCUdldEtleURvd24oKTsNCi0NCi0NCi1wdWJsaWM6DQotLy8gCXN0YXRpYyBNU0cJCQkJCWdfTXNnOw0KLS8vIAlzdGF0aWMgSEhPT0sJCQkJbV9ob29rU2hlZXQ7DQotDQotcHJpdmF0ZToNCi0Jdm9pZAkJCQkJCVVuUmVnaXN0ZXJGb3JtRmlsbGVyKENQREZTREtfQW5ub3QqIHBBbm5vdCk7DQotCXZvaWQJCQkJCQlTZXRGb2N1c0Fubm90VGFiKENQREZTREtfQW5ub3QqIHBXaWRnZXQsIEZYX0JPT0wgYlNhbWVGaWVsZCwgRlhfQk9PTCBiTmV4dCk7DQotDQotcHJpdmF0ZToNCi0JQ1BERkRvY19FbnZpcm9ubWVudCoJCQkJbV9wQXBwOw0KLQlDRkZMX1dpZGdldDJGaWxsZXIJCQltX01hcHM7DQotCUZYX0JPT0wJCQkJCQltX2JOb3RpZnlpbmc7DQotfTsNCi0NCi1jbGFzcyBDRkZMX1ByaXZhdGVEYXRhDQotew0KLXB1YmxpYzoNCi0JQ1BERlNES19XaWRnZXQqCQkJcFdpZGdldDsNCi0JQ1BERlNES19QYWdlVmlldyoJcFBhZ2VWaWV3Ow0KLQlpbnQJCQkJCW5XaWRnZXRBZ2U7DQotCWludAkJCQkJblZhbHVlQWdlOw0KLX07DQotDQotI2VuZGlmIC8vX0ZGTF9JRk9STUZJTExFUl9IXw0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZGTF9JRk9STUZJTExFUl9IXworI2RlZmluZSBfRkZMX0lGT1JNRklMTEVSX0hfCisKKyNpbmNsdWRlICJGb3JtRmlsbGVyLmgiCitjbGFzcyBDRkZMX0Zvcm1GaWxsZXI7CitjbGFzcyBDRkZMX1ByaXZhdGVEYXRhOworCisjZGVmaW5lIENGRkxfV2lkZ2V0MkZpbGxlcgkJQ0ZYX01hcFB0clRlbXBsYXRlPENQREZTREtfQW5ub3QqLCBDRkZMX0Zvcm1GaWxsZXIqPgorCisvLyAjZGVmaW5lIElzQUxUcHJlc3NlZCgpCQkJKEdldEtleVN0YXRlKFZLX01FTlUpIDwgMCkKKy8vICNkZWZpbmUgSXNDVFJMcHJlc3NlZCgpCQkJKEdldEtleVN0YXRlKFZLX0NPTlRST0wpIDwgMCkKKy8vICNkZWZpbmUgSXNTSElGVHByZXNzZWQoKQkJKEdldEtleVN0YXRlKFZLX1NISUZUKSYweDgwMDApCisvLyAjZGVmaW5lIElzSU5TRVJUcHJlc3NlZCgpCQkoR2V0S2V5U3RhdGUoVktfSU5TRVJUKSAmIDB4MDEpCQorLy8gI2RlZmluZSBWS19TSElGVCAgICAgICAgICAweDEwCisvLyAjZGVmaW5lIFZLX0NPTlRST0wgICAgICAgIDB4MTEKKy8vICNkZWZpbmUgVktfTUVOVSAgICAgICAgICAgMHgxMgorLy8gI2RlZmluZSBWS19SRVRVUk4gICAgICAgICAweDBECisvLyAjZGVmaW5lIFZLX1NQQUNFICAgICAgICAgIDB4MjAKKy8vICNkZWZpbmUgVktfRVNDQVBFICAgICAgICAgMHgxQgorCisKKworY2xhc3MgQ0ZGTF9JRm9ybUZpbGxlciA6LyogcHVibGljIElCQV9Bbm5vdEZpbGxlciwgKi9wdWJsaWMgSVBXTF9GaWxsZXJfTm90aWZ5Ly8sIAorLy8JcHVibGljIElVbmRvX0V2ZW50SGFuZGxlciwgcHVibGljIElDbGlwYm9hcmRfSGFuZGxlcgoreworcHVibGljOgorCUNGRkxfSUZvcm1GaWxsZXIoQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCk7CisJdmlydHVhbCB+Q0ZGTF9JRm9ybUZpbGxlcigpOworCisJdmlydHVhbCBGWF9CT09MCQkJCUFubm90X0hpdFRlc3QoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LENQREZTREtfQW5ub3QqIHBBbm5vdCwgQ1BERl9Qb2ludCBwb2ludCk7CisJdmlydHVhbCBGWF9SRUNUCQkJCUdldFZpZXdCQm94KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90KTsKKwl2aXJ0dWFsIHZvaWQJCQkJT25EcmF3KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgLypIREMgaERDLCovIENQREZTREtfQW5ub3QqIHBBbm5vdCwgCisJCQkJCQkJCQlDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLAorCQkJCQkJCQkJLypjb25zdCBDUmVjdCYgcmNXaW5kb3csKi8gRlhfRFdPUkQgZHdGbGFncyk7CisKKworCXZpcnR1YWwgdm9pZAkJCQlPbkNyZWF0ZShDUERGU0RLX0Fubm90KiBwQW5ub3QpOworCXZpcnR1YWwgdm9pZAkJCQlPbkxvYWQoQ1BERlNES19Bbm5vdCogcEFubm90KTsKKwl2aXJ0dWFsIHZvaWQJCQkJT25EZWxldGUoQ1BERlNES19Bbm5vdCogcEFubm90KTsKKworCXZpcnR1YWwgdm9pZAkJCQlPbk1vdXNlRW50ZXIoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWcpOworCXZpcnR1YWwgdm9pZAkJCQlPbk1vdXNlRXhpdChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZyk7CisKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25MQnV0dG9uRG93bihDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25MQnV0dG9uVXAoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCk7CisJdmlydHVhbCBGWF9CT09MCQkJCU9uTEJ1dHRvbkRibENsayhDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25Nb3VzZU1vdmUoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCk7CisJdmlydHVhbCBGWF9CT09MCQkJCU9uTW91c2VXaGVlbChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIHNob3J0IHpEZWx0YSwgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOworCXZpcnR1YWwgRlhfQk9PTAkJCQlPblJCdXR0b25Eb3duKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOworCXZpcnR1YWwgRlhfQk9PTAkJCQlPblJCdXR0b25VcChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25SQnV0dG9uRGJsQ2xrKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOworCisJdmlydHVhbCBGWF9CT09MCQkJCU9uS2V5RG93bihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbktleUNvZGUsIEZYX1VJTlQgbkZsYWdzKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25DaGFyKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuQ2hhciwgRlhfVUlOVCBuRmxhZ3MpOworCisJdmlydHVhbAl2b2lkCQkJCU9uRGVTZWxlY3RlZChDUERGU0RLX0Fubm90KiBwQW5ub3QpOworCXZpcnR1YWwJdm9pZAkJCQlPblNlbGVjdGVkKENQREZTREtfQW5ub3QqIHBBbm5vdCk7CisKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25TZXRGb2N1cyhDUERGU0RLX0Fubm90KiBwQW5ub3QsRlhfVUlOVCBuRmxhZyk7CisJdmlydHVhbCBGWF9CT09MCQkJCU9uS2lsbEZvY3VzKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZyk7CisKK3B1YmxpYzoKKwl2aXJ0dWFsIHZvaWQJCQkJUXVlcnlXaGVyZVBvcHVwKHZvaWQqIHBQcml2YXRlRGF0YSwgRlhfRkxPQVQgZlBvcHVwTWluLEZYX0ZMT0FUIGZQb3B1cE1heCwgRlhfSU5UMzIgJiBuUmV0LCBGWF9GTE9BVCAmIGZQb3B1cFJldCk7CisJdmlydHVhbCB2b2lkCQkJCU9uQmVmb3JlS2V5U3Ryb2tlKEZYX0JPT0wgYkVkaXRPckxpc3QsIHZvaWQqIHBQcml2YXRlRGF0YSwgRlhfSU5UMzIgbktleUNvZGUsCisJCQkJCQkJCQkJQ0ZYX1dpZGVTdHJpbmcgJiBzdHJDaGFuZ2UsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJDaGFuZ2VFeCwgCisJCQkJCQkJCQkJaW50IG5TZWxTdGFydCwgaW50IG5TZWxFbmQsCisJCQkJCQkJCQkJRlhfQk9PTCBiS2V5RG93biwgRlhfQk9PTCAmIGJSQywgRlhfQk9PTCAmIGJFeGl0LCBGWF9EV09SRCBuRmxhZyk7CisJdmlydHVhbCB2b2lkCQkJCU9uQWZ0ZXJLZXlTdHJva2UoRlhfQk9PTCBiRWRpdE9yTGlzdCwgdm9pZCogcFByaXZhdGVEYXRhLCBGWF9CT09MICYgYkV4aXQsIEZYX0RXT1JEIG5GbGFnKSA7CisKKwl2aXJ0dWFsIHZvaWQJCQkJT25TZXRXaW5kb3dSZWN0KHZvaWQqIHBQcml2YXRlRGF0YSwgY29uc3QgQ1BERl9SZWN0ICYgcmNXaW5kb3cpOworCXZpcnR1YWwgdm9pZAkJCQlPbktleVN0cm9rZShGWF9CT09MIGJFZGl0T3JMaXN0LCB2b2lkKiBwUHJpdmF0ZURhdGEsIEZYX0lOVDMyIG5LZXlDb2RlLCBDRlhfV2lkZVN0cmluZyAmIHN0ckNoYW5nZSwgCisJCQkJCQkJCQljb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyQ2hhbmdlRXgsIEZYX0JPT0wgYktleURvd24sIEZYX0JPT0wgJiBiUkMsIEZYX0JPT0wgJiBiRXhpdCk7CisKK3B1YmxpYzoKKwl2aXJ0dWFsIHZvaWQJCQkJQmVmb3JlVW5kbyhDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOworCXZpcnR1YWwgdm9pZAkJCQlCZWZvcmVSZWRvKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7CisJdmlydHVhbCB2b2lkCQkJCUFmdGVyVW5kbyhDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOworCXZpcnR1YWwgdm9pZAkJCQlBZnRlclJlZG8oQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsKKworcHVibGljOgorCXZpcnR1YWwgRlhfQk9PTAkJCQlDYW5Db3B5KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7IAorCXZpcnR1YWwgRlhfQk9PTAkJCQlDYW5DdXQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsgCisJdmlydHVhbCBGWF9CT09MCQkJCUNhblBhc3RlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7IAorCisJdmlydHVhbCB2b2lkCQkJCURvQ29weShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOyAKKwl2aXJ0dWFsIHZvaWQJCQkJRG9DdXQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsgCisJdmlydHVhbCB2b2lkCQkJCURvUGFzdGUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsgCisKK3B1YmxpYzoKKwlDRkZMX0Zvcm1GaWxsZXIqCQkJR2V0Rm9ybUZpbGxlcihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0JPT0wgYlJlZ2lzdGVyKTsKKwl2b2lkCQkJCQkJUmVtb3ZlRm9ybUZpbGxlcihDUERGU0RLX0Fubm90KiBwQW5ub3QpOworCisJc3RhdGljIEZYX0JPT0wJCQkJSXNWaXNpYmxlKENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0KTsKKwlzdGF0aWMgRlhfQk9PTAkJCQlJc1JlYWRPbmx5KENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0KTsKKwlzdGF0aWMgRlhfQk9PTAkJCQlJc0ZpbGxpbmdBbGxvd2VkKENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0KTsKKyAJc3RhdGljIEZYX0JPT0wJCQkJSXNWYWxpZEFubm90KENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90KTsKKworCXZvaWQJCQkJCQlPbktleVN0cm9rZUNvbW1pdChDUERGU0RLX1dpZGdldCogcFdpZGdldCwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBGWF9CT09MJiBiUkMsIEZYX0JPT0wmIGJFeGl0LCBGWF9EV09SRCBuRmxhZyk7CisJdm9pZAkJCQkJCU9uVmFsaWRhdGUoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfQk9PTCYgYlJDLCBGWF9CT09MJiBiRXhpdCwgRlhfRFdPUkQgbkZsYWcpOworCisJdm9pZAkJCQkJCU9uQ2FsY3VsYXRlKENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0LCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0JPT0wmIGJFeGl0LCBGWF9EV09SRCBuRmxhZyk7CisJdm9pZAkJCQkJCU9uRm9ybWF0KENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0LCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0JPT0wmIGJFeGl0LCBGWF9EV09SRCBuRmxhZyk7CisJdm9pZAkJCQkJCU9uQnV0dG9uVXAoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfQk9PTCYgYlJlc2V0LCBGWF9CT09MJiBiRXhpdCxGWF9VSU5UIG5GbGFnKTsKKy8vIAlzdGF0aWMgTFJFU1VMVCBDQUxMQkFDSwkJRkZMX1duZFByb2MoCisvLyAJCQkJCQkJCQkgIGludCBjb2RlLCAgICAgICAvLyBob29rIGNvZGUKKy8vIAkJCQkJCQkJCSAgV1BBUkFNIHdQYXJhbSwgIC8vIHZpcnR1YWwta2V5IGNvZGUKKy8vIAkJCQkJCQkJCSAgTFBBUkFNIGxQYXJhbSAgIC8vIGtleXN0cm9rZS1tZXNzYWdlIGluZm9ybWF0aW9uCisvLyAJCQkJCQkJCQkJKTsKKy8vIAlzdGF0aWMgTVNHCQkJCQlHZXRMYXN0TWVzc2FnZSgpOworCXN0YXRpYyBpbnQJCQkJCUdldENvbW1pdEtleSgpOworCXN0YXRpYyBGWF9CT09MCQkJCUdldEtleURvd24oKTsKKworCitwdWJsaWM6CisvLyAJc3RhdGljIE1TRwkJCQkJZ19Nc2c7CisvLyAJc3RhdGljIEhIT09LCQkJCW1faG9va1NoZWV0OworCitwcml2YXRlOgorCXZvaWQJCQkJCQlVblJlZ2lzdGVyRm9ybUZpbGxlcihDUERGU0RLX0Fubm90KiBwQW5ub3QpOworCXZvaWQJCQkJCQlTZXRGb2N1c0Fubm90VGFiKENQREZTREtfQW5ub3QqIHBXaWRnZXQsIEZYX0JPT0wgYlNhbWVGaWVsZCwgRlhfQk9PTCBiTmV4dCk7CisKK3ByaXZhdGU6CisJQ1BERkRvY19FbnZpcm9ubWVudCoJCQkJbV9wQXBwOworCUNGRkxfV2lkZ2V0MkZpbGxlcgkJCW1fTWFwczsKKwlGWF9CT09MCQkJCQkJbV9iTm90aWZ5aW5nOworfTsKKworY2xhc3MgQ0ZGTF9Qcml2YXRlRGF0YQoreworcHVibGljOgorCUNQREZTREtfV2lkZ2V0KgkJCXBXaWRnZXQ7CisJQ1BERlNES19QYWdlVmlldyoJcFBhZ2VWaWV3OworCWludAkJCQkJbldpZGdldEFnZTsKKwlpbnQJCQkJCW5WYWx1ZUFnZTsKK307CisKKyNlbmRpZiAvL19GRkxfSUZPUk1GSUxMRVJfSF8KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0xpc3RCb3guaCBiL2ZwZGZzZGsvaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9MaXN0Qm94LmgKaW5kZXggODk5YzQ0ZC4uNDNmNWZjZSAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0xpc3RCb3guaAorKysgYi9mcGRmc2RrL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfTGlzdEJveC5oCkBAIC0xLDQ0ICsxLDQ0IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GRkxfTElTVEJPWF9IXw0KLSNkZWZpbmUgX0ZGTF9MSVNUQk9YX0hfDQotDQotY2xhc3MgIENCQV9Gb250TWFwOw0KLWNsYXNzIENGRkxfTGlzdEJveCA6IHB1YmxpYyBDRkZMX0Zvcm1GaWxsZXINCi17DQotcHVibGljOg0KLQlDRkZMX0xpc3RCb3goQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCwgQ1BERlNES19Bbm5vdCogcFdpZGdldCk7DQotCXZpcnR1YWwgfkNGRkxfTGlzdEJveCgpOw0KLQ0KLQl2aXJ0dWFsCVBXTF9DUkVBVEVQQVJBTQkJR2V0Q3JlYXRlUGFyYW0oKTsNCi0JdmlydHVhbCBDUFdMX1duZCoJCQlOZXdQREZXaW5kb3coY29uc3QgUFdMX0NSRUFURVBBUkFNJiBjcCwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsNCi0NCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uQ2hhcihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkNoYXIsIEZYX1VJTlQgbkZsYWdzKTsNCi0NCi0JdmlydHVhbCBGWF9CT09MCQkJCUlzRGF0YUNoYW5nZWQoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsNCi0JdmlydHVhbCB2b2lkCQkJCVNhdmVEYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyk7DQotDQotIAl2aXJ0dWFsIHZvaWQJCQkJR2V0QWN0aW9uRGF0YShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwNCi0gCQkJCQkJCQkJUERGU0RLX0ZpZWxkQWN0aW9uJiBmYSk7DQotIAl2aXJ0dWFsIHZvaWQJCQkJU2V0QWN0aW9uRGF0YShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgDQotIAkJCQkJCQkJCWNvbnN0IFBERlNES19GaWVsZEFjdGlvbiYgZmEpOw0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJU2F2ZVN0YXRlKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyk7DQotCXZpcnR1YWwgdm9pZAkJCQlSZXN0b3JlU3RhdGUoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsNCi0NCi0JdmlydHVhbCBDUFdMX1duZCoJCQlSZXNldFBERldpbmRvdyhDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0JPT0wgYlJlc3RvcmVWYWx1ZSk7DQotCXZpcnR1YWwgdm9pZAkJCQlPbktleVN0cm9rZShGWF9CT09MIGJLZXlEb3duLCBGWF9EV09SRCBuRmxhZyk7DQotDQotcHJpdmF0ZToNCi0JQ0JBX0ZvbnRNYXAqCQkJCQltX3BGb250TWFwOw0KLQlDRlhfTWFwUHRyVGVtcGxhdGU8aW50LCB2b2lkKj4JbV9PcmlnaW5TZWxlY3Rpb25zOw0KLQlDRlhfQXJyYXlUZW1wbGF0ZTxpbnQ+CQkJbV9TdGF0ZTsNCi19Ow0KLQ0KLQ0KLSNlbmRpZiAvL19GRkxfTElTVEJPWF9IXw0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZGTF9MSVNUQk9YX0hfCisjZGVmaW5lIF9GRkxfTElTVEJPWF9IXworCitjbGFzcyAgQ0JBX0ZvbnRNYXA7CitjbGFzcyBDRkZMX0xpc3RCb3ggOiBwdWJsaWMgQ0ZGTF9Gb3JtRmlsbGVyCit7CitwdWJsaWM6CisJQ0ZGTF9MaXN0Qm94KENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAsIENQREZTREtfQW5ub3QqIHBXaWRnZXQpOworCXZpcnR1YWwgfkNGRkxfTGlzdEJveCgpOworCisJdmlydHVhbAlQV0xfQ1JFQVRFUEFSQU0JCUdldENyZWF0ZVBhcmFtKCk7CisJdmlydHVhbCBDUFdMX1duZCoJCQlOZXdQREZXaW5kb3coY29uc3QgUFdMX0NSRUFURVBBUkFNJiBjcCwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsKKworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkNoYXIoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5DaGFyLCBGWF9VSU5UIG5GbGFncyk7CisKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJSXNEYXRhQ2hhbmdlZChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOworCXZpcnR1YWwgdm9pZAkJCQlTYXZlRGF0YShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOworCisgCXZpcnR1YWwgdm9pZAkJCQlHZXRBY3Rpb25EYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLAorIAkJCQkJCQkJCVBERlNES19GaWVsZEFjdGlvbiYgZmEpOworIAl2aXJ0dWFsIHZvaWQJCQkJU2V0QWN0aW9uRGF0YShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgCisgCQkJCQkJCQkJY29uc3QgUERGU0RLX0ZpZWxkQWN0aW9uJiBmYSk7CisKKwl2aXJ0dWFsIHZvaWQJCQkJU2F2ZVN0YXRlKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyk7CisJdmlydHVhbCB2b2lkCQkJCVJlc3RvcmVTdGF0ZShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOworCisJdmlydHVhbCBDUFdMX1duZCoJCQlSZXNldFBERldpbmRvdyhDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0JPT0wgYlJlc3RvcmVWYWx1ZSk7CisJdmlydHVhbCB2b2lkCQkJCU9uS2V5U3Ryb2tlKEZYX0JPT0wgYktleURvd24sIEZYX0RXT1JEIG5GbGFnKTsKKworcHJpdmF0ZToKKwlDQkFfRm9udE1hcCoJCQkJCW1fcEZvbnRNYXA7CisJQ0ZYX01hcFB0clRlbXBsYXRlPGludCwgdm9pZCo+CW1fT3JpZ2luU2VsZWN0aW9uczsKKwlDRlhfQXJyYXlUZW1wbGF0ZTxpbnQ+CQkJbV9TdGF0ZTsKK307CisKKworI2VuZGlmIC8vX0ZGTF9MSVNUQk9YX0hfCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9Ob3RpZnkuaCBiL2ZwZGZzZGsvaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9Ob3RpZnkuaAppbmRleCA4YTBiN2EzLi5jNzI5Yjc0IDEwMDY0NAotLS0gYS9mcGRmc2RrL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfTm90aWZ5LmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX05vdGlmeS5oCkBAIC0xLDU0ICsxLDU0IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWYgIWRlZmluZWQoX0ZGTF9OT1RJRllfSF8pDQotI2RlZmluZSBfRkZMX05PVElGWV9IXw0KLQ0KLWNsYXNzIENGRkxfRm9ybUZpbGxlcjsNCi0NCi1jbGFzcyBDRkZMX05vdGlmeQ0KLXsNCi1wdWJsaWM6DQotCUNGRkxfTm90aWZ5KENGRkxfRm9ybUZpbGxlciAqIHBGb3JtRmlsbGVyKTsJDQotCXZpcnR1YWwgfkNGRkxfTm90aWZ5KCk7DQotDQotcHVibGljOg0KLQlGWF9CT09MCQkJCQkJCQkJT25TZXRGb2N1cyhGWF9CT09MICYgYkV4aXQpOw0KLQlGWF9CT09MCQkJCQkJCQkJT25Nb3VzZUVudGVyKEZYX0JPT0wgJiBiRXhpdCk7DQotCUZYX0JPT0wJCQkJCQkJCQlPbk1vdXNlRG93bihGWF9CT09MICYgYkV4aXQpOw0KLQlGWF9CT09MCQkJCQkJCQkJT25Nb3VzZVVwKEZYX0JPT0wgJiBiRXhpdCk7CQ0KLQlGWF9CT09MCQkJCQkJCQkJT25Nb3VzZUV4aXQoRlhfQk9PTCAmIGJFeGl0KTsJDQotCUZYX0JPT0wJCQkJCQkJCQlPbktpbGxGb2N1cyhGWF9CT09MICYgYkV4aXQpOw0KLQ0KLQlGWF9CT09MCQkJCQkJCQkJT25DYWxjdWxhdGUoKTsNCi0JRlhfQk9PTAkJCQkJCQkJCU9uRm9ybWF0KGludCBpQ29tbWl0S2V5KTsNCi0JRlhfQk9PTAkJCQkJCQkJCU9uVmFsaWRhdGUoQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQsIENGWF9XaWRlU3RyaW5nJiBzdHJWYWx1ZSwgQ0ZYX1dpZGVTdHJpbmcgJiBzdHJDaGFuZ2UsIA0KLQkJCQkJCQkJCQkJICAgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZUV4LCBGWF9CT09MIGJLZXlEb3duLCBGWF9CT09MIGJNb2RpZmllciwNCi0JCQkJCQkJCQkJCSAgIEZYX0JPT0wgYlNoaWZ0LCBGWF9CT09MICYgYlJDKTsNCi0JRlhfQk9PTAkJCQkJCQkJCU9uS2V5U3Ryb2tlKENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkLCBpbnQgbkNvbW1pdEtleSwgQ0ZYX1dpZGVTdHJpbmcmIHN0clZhbHVlLCBDRlhfV2lkZVN0cmluZyYgc3RyQ2hhbmdlLCANCi0JCQkJCQkJCQkJCSAgIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJDaGFuZ2VFeCwgRlhfQk9PTCBiS2V5RG93biwgRlhfQk9PTCBiTW9kaWZpZXIsDQotCQkJCQkJCQkJCQkgICBGWF9CT09MIGJTaGlmdCwgRlhfQk9PTCBiV2lsbENvbW1pdCwgRlhfQk9PTCBiRmllbGRGdWxsLCANCi0JCQkJCQkJCQkJCSAgIGludCYgblNlbFN0YXJ0LCBpbnQmIG5TZWxFbmQsIEZYX0JPT0wmIGJSQyk7DQotDQotCXZvaWQJCQkJCQkJCQlCZWZvcmVOb3RpZnkoKTsNCi0Jdm9pZAkJCQkJCQkJCUFmdGVyTm90aWZ5KCk7DQotCUZYX0JPT0wJCQkJCQkJCQlJc05vdGlmeWluZygpIGNvbnN0IHtyZXR1cm4gbV9uTm90aWZ5RmxhZyA+IDA7fQ0KLQ0KLXByaXZhdGU6DQotLy8JQ1JlYWRlcl9JbnRlckZvcm0gKgkJCQkJCUdldFJlYWRlckludGVyRm9ybSgpOw0KLSAJRlhfQk9PTAkJCQkJCQkJCURvQUFjdGlvbihDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIGVBQVQsIEZYX0JPT0wgJiBiRXhpdCk7DQotIAlGWF9CT09MCQkJCQkJCQkJRmluZEFBY3Rpb24oQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSBlQUFULENQREZfQWN0aW9uICYgYWN0aW9uKTsNCi0gCUZYX0JPT0wJCQkJCQkJCQlGaW5kQUFjdGlvbihDUERGX0FBY3Rpb24gYWFjdGlvbixDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIGVBQVQsQ1BERl9BY3Rpb24gJiBhY3Rpb24pOw0KLSAJRlhfQk9PTAkJCQkJCQkJCUV4ZWN1dGVBY3Rpb25UcmVlKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgZUFBVCwgQ1BERl9BY3Rpb24gJiBhY3Rpb24sIEZYX0JPT0wmIGJFeGl0KTsNCi0gCUZYX0JPT0wJCQkJCQkJCQlFeGVjdXRlQWN0aW9uKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgZUFBVCxDUERGX0FjdGlvbiAmIGFjdGlvbixGWF9CT09MJiBiRXhpdCk7DQotDQotCUNGRkxfRm9ybUZpbGxlciAqCQkJCQkJbV9wRm9ybUZpbGxlcjsNCi0JRlhfQk9PTAkJCQkJCQkJCW1fYkRvQWN0aW9uaW5nOw0KLQlGWF9JTlQzMgkJCQkJCQkJbV9uTm90aWZ5RmxhZzsNCi19Ow0KLQ0KLSNlbmRpZg0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZiAhZGVmaW5lZChfRkZMX05PVElGWV9IXykKKyNkZWZpbmUgX0ZGTF9OT1RJRllfSF8KKworY2xhc3MgQ0ZGTF9Gb3JtRmlsbGVyOworCitjbGFzcyBDRkZMX05vdGlmeQoreworcHVibGljOgorCUNGRkxfTm90aWZ5KENGRkxfRm9ybUZpbGxlciAqIHBGb3JtRmlsbGVyKTsJCisJdmlydHVhbCB+Q0ZGTF9Ob3RpZnkoKTsKKworcHVibGljOgorCUZYX0JPT0wJCQkJCQkJCQlPblNldEZvY3VzKEZYX0JPT0wgJiBiRXhpdCk7CisJRlhfQk9PTAkJCQkJCQkJCU9uTW91c2VFbnRlcihGWF9CT09MICYgYkV4aXQpOworCUZYX0JPT0wJCQkJCQkJCQlPbk1vdXNlRG93bihGWF9CT09MICYgYkV4aXQpOworCUZYX0JPT0wJCQkJCQkJCQlPbk1vdXNlVXAoRlhfQk9PTCAmIGJFeGl0KTsJCisJRlhfQk9PTAkJCQkJCQkJCU9uTW91c2VFeGl0KEZYX0JPT0wgJiBiRXhpdCk7CQorCUZYX0JPT0wJCQkJCQkJCQlPbktpbGxGb2N1cyhGWF9CT09MICYgYkV4aXQpOworCisJRlhfQk9PTAkJCQkJCQkJCU9uQ2FsY3VsYXRlKCk7CisJRlhfQk9PTAkJCQkJCQkJCU9uRm9ybWF0KGludCBpQ29tbWl0S2V5KTsKKwlGWF9CT09MCQkJCQkJCQkJT25WYWxpZGF0ZShDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCwgQ0ZYX1dpZGVTdHJpbmcmIHN0clZhbHVlLCBDRlhfV2lkZVN0cmluZyAmIHN0ckNoYW5nZSwgCisJCQkJCQkJCQkJCSAgIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJDaGFuZ2VFeCwgRlhfQk9PTCBiS2V5RG93biwgRlhfQk9PTCBiTW9kaWZpZXIsCisJCQkJCQkJCQkJCSAgIEZYX0JPT0wgYlNoaWZ0LCBGWF9CT09MICYgYlJDKTsKKwlGWF9CT09MCQkJCQkJCQkJT25LZXlTdHJva2UoQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQsIGludCBuQ29tbWl0S2V5LCBDRlhfV2lkZVN0cmluZyYgc3RyVmFsdWUsIENGWF9XaWRlU3RyaW5nJiBzdHJDaGFuZ2UsIAorCQkJCQkJCQkJCQkgICBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyQ2hhbmdlRXgsIEZYX0JPT0wgYktleURvd24sIEZYX0JPT0wgYk1vZGlmaWVyLAorCQkJCQkJCQkJCQkgICBGWF9CT09MIGJTaGlmdCwgRlhfQk9PTCBiV2lsbENvbW1pdCwgRlhfQk9PTCBiRmllbGRGdWxsLCAKKwkJCQkJCQkJCQkJICAgaW50JiBuU2VsU3RhcnQsIGludCYgblNlbEVuZCwgRlhfQk9PTCYgYlJDKTsKKworCXZvaWQJCQkJCQkJCQlCZWZvcmVOb3RpZnkoKTsKKwl2b2lkCQkJCQkJCQkJQWZ0ZXJOb3RpZnkoKTsKKwlGWF9CT09MCQkJCQkJCQkJSXNOb3RpZnlpbmcoKSBjb25zdCB7cmV0dXJuIG1fbk5vdGlmeUZsYWcgPiAwO30KKworcHJpdmF0ZToKKy8vCUNSZWFkZXJfSW50ZXJGb3JtICoJCQkJCQlHZXRSZWFkZXJJbnRlckZvcm0oKTsKKyAJRlhfQk9PTAkJCQkJCQkJCURvQUFjdGlvbihDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIGVBQVQsIEZYX0JPT0wgJiBiRXhpdCk7CisgCUZYX0JPT0wJCQkJCQkJCQlGaW5kQUFjdGlvbihDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIGVBQVQsQ1BERl9BY3Rpb24gJiBhY3Rpb24pOworIAlGWF9CT09MCQkJCQkJCQkJRmluZEFBY3Rpb24oQ1BERl9BQWN0aW9uIGFhY3Rpb24sQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSBlQUFULENQREZfQWN0aW9uICYgYWN0aW9uKTsKKyAJRlhfQk9PTAkJCQkJCQkJCUV4ZWN1dGVBY3Rpb25UcmVlKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgZUFBVCwgQ1BERl9BY3Rpb24gJiBhY3Rpb24sIEZYX0JPT0wmIGJFeGl0KTsKKyAJRlhfQk9PTAkJCQkJCQkJCUV4ZWN1dGVBY3Rpb24oQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSBlQUFULENQREZfQWN0aW9uICYgYWN0aW9uLEZYX0JPT0wmIGJFeGl0KTsKKworCUNGRkxfRm9ybUZpbGxlciAqCQkJCQkJbV9wRm9ybUZpbGxlcjsKKwlGWF9CT09MCQkJCQkJCQkJbV9iRG9BY3Rpb25pbmc7CisJRlhfSU5UMzIJCQkJCQkJCW1fbk5vdGlmeUZsYWc7Cit9OworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX1B1c2hCdXR0b24uaCBiL2ZwZGZzZGsvaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9QdXNoQnV0dG9uLmgKaW5kZXggNGRjZmYxNC4uYmU1ZTczNSAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX1B1c2hCdXR0b24uaAorKysgYi9mcGRmc2RrL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfUHVzaEJ1dHRvbi5oCkBAIC0xLDI1ICsxLDI1IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GRkxfUFVTSEJVVFRPTl9IXw0KLSNkZWZpbmUgX0ZGTF9QVVNIQlVUVE9OX0hfDQotDQotY2xhc3MgQ0ZGTF9QdXNoQnV0dG9uIDogcHVibGljIENGRkxfQnV0dG9uDQotew0KLXB1YmxpYzoNCi0JQ0ZGTF9QdXNoQnV0dG9uKENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAsIENQREZTREtfQW5ub3QqIHBBbm5vdCk7DQotCXZpcnR1YWwgfkNGRkxfUHVzaEJ1dHRvbigpOw0KLQ0KLQl2aXJ0dWFsIENQV0xfV25kKgkJCU5ld1BERldpbmRvdyhjb25zdCBQV0xfQ1JFQVRFUEFSQU0mIGNwLCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOw0KLQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25DaGFyKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuQ2hhciwgRlhfVUlOVCBuRmxhZ3MpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25EcmF3KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgIENQREZTREtfQW5ub3QqIHBBbm5vdCwgDQotCQkJCQkJCQkJQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwNCi0JCQkJCQkJCQlGWF9EV09SRCBkd0ZsYWdzKTsNCi19Ow0KLQ0KLSNlbmRpZiAvL19GRkxfUFVTSEJVVFRPTl9IXw0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZGTF9QVVNIQlVUVE9OX0hfCisjZGVmaW5lIF9GRkxfUFVTSEJVVFRPTl9IXworCitjbGFzcyBDRkZMX1B1c2hCdXR0b24gOiBwdWJsaWMgQ0ZGTF9CdXR0b24KK3sKK3B1YmxpYzoKKwlDRkZMX1B1c2hCdXR0b24oQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCwgQ1BERlNES19Bbm5vdCogcEFubm90KTsKKwl2aXJ0dWFsIH5DRkZMX1B1c2hCdXR0b24oKTsKKworCXZpcnR1YWwgQ1BXTF9XbmQqCQkJTmV3UERGV2luZG93KGNvbnN0IFBXTF9DUkVBVEVQQVJBTSYgY3AsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyk7CisKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25DaGFyKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuQ2hhciwgRlhfVUlOVCBuRmxhZ3MpOworCXZpcnR1YWwgdm9pZAkJCQlPbkRyYXcoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCAgQ1BERlNES19Bbm5vdCogcEFubm90LCAKKwkJCQkJCQkJCUNGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsCisJCQkJCQkJCQlGWF9EV09SRCBkd0ZsYWdzKTsKK307CisKKyNlbmRpZiAvL19GRkxfUFVTSEJVVFRPTl9IXworCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfUmFkaW9CdXR0b24uaCBiL2ZwZGZzZGsvaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9SYWRpb0J1dHRvbi5oCmluZGV4IGJhYjg1ODQuLjAzN2U1NjMgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9SYWRpb0J1dHRvbi5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9SYWRpb0J1dHRvbi5oCkBAIC0xLDI1ICsxLDI1IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GRkxfUkFESU9CVVRUT05fSF8NCi0jZGVmaW5lIF9GRkxfUkFESU9CVVRUT05fSF8NCi0NCi1jbGFzcyBDRkZMX1JhZGlvQnV0dG9uIDogcHVibGljIENGRkxfQnV0dG9uDQotew0KLXB1YmxpYzoNCi0JQ0ZGTF9SYWRpb0J1dHRvbihDUERGRG9jX0Vudmlyb25tZW50KiBwQXBwLCBDUERGU0RLX0Fubm90KiBwQW5ub3QpOw0KLQl2aXJ0dWFsIH5DRkZMX1JhZGlvQnV0dG9uKCk7DQotCQ0KLQl2aXJ0dWFsIENQV0xfV25kKgkJCU5ld1BERldpbmRvdyhjb25zdCBQV0xfQ1JFQVRFUEFSQU0mIGNwLCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOw0KLSAgCXZpcnR1YWwgRlhfQk9PTAkJCQlPbktleURvd24oQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5LZXlDb2RlLCBGWF9VSU5UIG5GbGFncyk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkNoYXIoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5DaGFyLCBGWF9VSU5UIG5GbGFncyk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkxCdXR0b25VcChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCUlzRGF0YUNoYW5nZWQoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsNCi0JdmlydHVhbCB2b2lkCQkJCVNhdmVEYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyk7DQotfTsNCi0NCi0jZW5kaWYgLy9fRkZMX1JBRElPQlVUVE9OX0hfDQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRkZMX1JBRElPQlVUVE9OX0hfCisjZGVmaW5lIF9GRkxfUkFESU9CVVRUT05fSF8KKworY2xhc3MgQ0ZGTF9SYWRpb0J1dHRvbiA6IHB1YmxpYyBDRkZMX0J1dHRvbgoreworcHVibGljOgorCUNGRkxfUmFkaW9CdXR0b24oQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCwgQ1BERlNES19Bbm5vdCogcEFubm90KTsKKwl2aXJ0dWFsIH5DRkZMX1JhZGlvQnV0dG9uKCk7CisJCisJdmlydHVhbCBDUFdMX1duZCoJCQlOZXdQREZXaW5kb3coY29uc3QgUFdMX0NSRUFURVBBUkFNJiBjcCwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsKKyAgCXZpcnR1YWwgRlhfQk9PTAkJCQlPbktleURvd24oQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5LZXlDb2RlLCBGWF9VSU5UIG5GbGFncyk7CisJdmlydHVhbCBGWF9CT09MCQkJCU9uQ2hhcihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkNoYXIsIEZYX1VJTlQgbkZsYWdzKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25MQnV0dG9uVXAoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCk7CisJdmlydHVhbCBGWF9CT09MCQkJCUlzRGF0YUNoYW5nZWQoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsKKwl2aXJ0dWFsIHZvaWQJCQkJU2F2ZURhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsKK307CisKKyNlbmRpZiAvL19GRkxfUkFESU9CVVRUT05fSF8KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX1RleHRGaWVsZC5oIGIvZnBkZnNkay9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX1RleHRGaWVsZC5oCmluZGV4IDJiNmYwNjkuLmQyODA4ZTkgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9UZXh0RmllbGQuaAorKysgYi9mcGRmc2RrL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfVGV4dEZpZWxkLmgKQEAgLTEsODkgKzEsODkgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZiAhZGVmaW5lZChBRlhfRkZMX0VESVRfSF9fOEUwQzk0NTZfQ0JBMl80RUZCXzlGMzFfNTNDNkQ4QzFBOEFDX19JTkNMVURFRF8pDQotI2RlZmluZSBBRlhfRkZMX0VESVRfSF9fOEUwQzk0NTZfQ0JBMl80RUZCXzlGMzFfNTNDNkQ4QzFBOEFDX19JTkNMVURFRF8NCi0NCi0jaW5jbHVkZSAiRkZMX0Zvcm1GaWxsZXIuaCINCi0NCi0jZGVmaW5lIEJGX0FMSUdOX0xFRlQJCQkwDQotI2RlZmluZSBCRl9BTElHTl9NSURETEUJCQkxDQotI2RlZmluZSBCRl9BTElHTl9SSUdIVAkJCTINCi0NCi1jbGFzcyBDQkFfRm9udE1hcDsNCi0NCi1jbGFzcyBDRkZMX0VkaXRVbmRvSXRlbSAvLzogcHVibGljIElVbmRvSXRlbQ0KLXsNCi1wdWJsaWM6DQotCUNGRkxfRWRpdFVuZG9JdGVtKENQV0xfRWRpdCogcEVkaXQpOw0KLQl2aXJ0dWFsIH5DRkZMX0VkaXRVbmRvSXRlbSgpOw0KLQkNCi0JdmlydHVhbCB2b2lkCQkJCQlVbmRvKCk7DQotCXZpcnR1YWwgdm9pZAkJCQkJUmVkbygpOw0KLQl2aXJ0dWFsIENGWF9XaWRlU3RyaW5nCQkJR2V0RGVzY3IoKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlSZWxlYXNlKCk7DQotCQ0KLXByaXZhdGU6DQotCUNQV0xfRWRpdCoJCQkJCQltX3BFZGl0Ow0KLX07DQotDQotc3RydWN0IEZGTF9UZXh0RmllbGRTdGF0ZQ0KLXsNCi0JaW50IG5TdGFydDsNCi0JaW50IG5FbmQ7DQotCUNGWF9XaWRlU3RyaW5nIHNWYWx1ZTsNCi19Ow0KLQ0KLWNsYXNzIENGRkxfVGV4dEZpZWxkIDogcHVibGljIENGRkxfRm9ybUZpbGxlciwgcHVibGljIElQV0xfRm9jdXNIYW5kbGVyLCBwdWJsaWMgSVBXTF9FZGl0X05vdGlmeQ0KLXsNCi1wdWJsaWM6DQotCUNGRkxfVGV4dEZpZWxkKENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAsIENQREZTREtfQW5ub3QqIHBBbm5vdCk7DQotCXZpcnR1YWwgfkNGRkxfVGV4dEZpZWxkKCk7DQotCQ0KLQl2aXJ0dWFsCVBXTF9DUkVBVEVQQVJBTQkJR2V0Q3JlYXRlUGFyYW0oKTsNCi0JdmlydHVhbCBDUFdMX1duZCoJCQlOZXdQREZXaW5kb3coY29uc3QgUFdMX0NSRUFURVBBUkFNJiBjcCwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsNCi0NCi0JDQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkNoYXIoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5DaGFyLCBGWF9VSU5UIG5GbGFncyk7DQotCQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJSXNEYXRhQ2hhbmdlZChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJU2F2ZURhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsNCi0JDQotIAl2aXJ0dWFsIHZvaWQJCQkJR2V0QWN0aW9uRGF0YShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwNCi0gCQkJCQkJCQkJCQkJUERGU0RLX0ZpZWxkQWN0aW9uJiBmYSk7DQotIAl2aXJ0dWFsIHZvaWQJCQkJU2V0QWN0aW9uRGF0YShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgDQotCQkJCQkJCQkJY29uc3QgUERGU0RLX0ZpZWxkQWN0aW9uJiBmYSk7DQotIAl2aXJ0dWFsIEZYX0JPT0wJCQkJSXNBY3Rpb25EYXRhQ2hhbmdlZChDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIGNvbnN0IFBERlNES19GaWVsZEFjdGlvbiYgZmFPbGQsIA0KLSAJCQkJCQkJCQkJCQljb25zdCBQREZTREtfRmllbGRBY3Rpb24mIGZhTmV3KTsNCi0JdmlydHVhbCB2b2lkCQkJCVNhdmVTdGF0ZShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJUmVzdG9yZVN0YXRlKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyk7DQotCQ0KLQl2aXJ0dWFsIENQV0xfV25kKgkJCVJlc2V0UERGV2luZG93KENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfQk9PTCBiUmVzdG9yZVZhbHVlKTsNCi0JDQotcHVibGljOg0KLQl2aXJ0dWFsIHZvaWQJCQkJT25TZXRGb2N1cyhDUFdMX1duZCogcFduZCk7DQotCXZpcnR1YWwgdm9pZAkJCQlPbktpbGxGb2N1cyhDUFdMX1duZCogcFduZCk7DQotCQ0KLXB1YmxpYzoNCi0JdmlydHVhbCB2b2lkCQkJCU9uQWRkVW5kbyhDUFdMX0VkaXQqIHBFZGl0KTsNCi0JDQotcHVibGljOg0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJQ2FuQ29weShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOyANCi0JdmlydHVhbCBGWF9CT09MCQkJCUNhbkN1dChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOyANCi0JdmlydHVhbCBGWF9CT09MCQkJCUNhblBhc3RlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7IA0KLQkNCi0JdmlydHVhbCB2b2lkCQkJCURvQ29weShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOyANCi0JdmlydHVhbCB2b2lkCQkJCURvQ3V0KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7IA0KLQl2aXJ0dWFsIHZvaWQJCQkJRG9QYXN0ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOyANCi0JDQotcHJpdmF0ZToNCi0JQ0JBX0ZvbnRNYXAqCQkJCW1fcEZvbnRNYXA7DQotLy8JQ0JBX1NwZWxsQ2hlY2sqCQkJCW1fcFNwZWxsQ2hlY2s7DQotCUZGTF9UZXh0RmllbGRTdGF0ZQkJCW1fU3RhdGU7DQotLy8JQ0ZGTF9JTV9CT1gJCQkJCW1fSU1Cb3g7DQotfTsNCi0NCi0jZW5kaWYgLy8gIWRlZmluZWQoQUZYX0ZGTF9FRElUX0hfXzhFMEM5NDU2X0NCQTJfNEVGQl85RjMxXzUzQzZEOEMxQThBQ19fSU5DTFVERURfKQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZiAhZGVmaW5lZChBRlhfRkZMX0VESVRfSF9fOEUwQzk0NTZfQ0JBMl80RUZCXzlGMzFfNTNDNkQ4QzFBOEFDX19JTkNMVURFRF8pCisjZGVmaW5lIEFGWF9GRkxfRURJVF9IX184RTBDOTQ1Nl9DQkEyXzRFRkJfOUYzMV81M0M2RDhDMUE4QUNfX0lOQ0xVREVEXworCisjaW5jbHVkZSAiRkZMX0Zvcm1GaWxsZXIuaCIKKworI2RlZmluZSBCRl9BTElHTl9MRUZUCQkJMAorI2RlZmluZSBCRl9BTElHTl9NSURETEUJCQkxCisjZGVmaW5lIEJGX0FMSUdOX1JJR0hUCQkJMgorCitjbGFzcyBDQkFfRm9udE1hcDsKKworY2xhc3MgQ0ZGTF9FZGl0VW5kb0l0ZW0gLy86IHB1YmxpYyBJVW5kb0l0ZW0KK3sKK3B1YmxpYzoKKwlDRkZMX0VkaXRVbmRvSXRlbShDUFdMX0VkaXQqIHBFZGl0KTsKKwl2aXJ0dWFsIH5DRkZMX0VkaXRVbmRvSXRlbSgpOworCQorCXZpcnR1YWwgdm9pZAkJCQkJVW5kbygpOworCXZpcnR1YWwgdm9pZAkJCQkJUmVkbygpOworCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCQlHZXREZXNjcigpOworCXZpcnR1YWwgdm9pZAkJCQkJUmVsZWFzZSgpOworCQorcHJpdmF0ZToKKwlDUFdMX0VkaXQqCQkJCQkJbV9wRWRpdDsKK307CisKK3N0cnVjdCBGRkxfVGV4dEZpZWxkU3RhdGUKK3sKKwlpbnQgblN0YXJ0OworCWludCBuRW5kOworCUNGWF9XaWRlU3RyaW5nIHNWYWx1ZTsKK307CisKK2NsYXNzIENGRkxfVGV4dEZpZWxkIDogcHVibGljIENGRkxfRm9ybUZpbGxlciwgcHVibGljIElQV0xfRm9jdXNIYW5kbGVyLCBwdWJsaWMgSVBXTF9FZGl0X05vdGlmeQoreworcHVibGljOgorCUNGRkxfVGV4dEZpZWxkKENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAsIENQREZTREtfQW5ub3QqIHBBbm5vdCk7CisJdmlydHVhbCB+Q0ZGTF9UZXh0RmllbGQoKTsKKwkKKwl2aXJ0dWFsCVBXTF9DUkVBVEVQQVJBTQkJR2V0Q3JlYXRlUGFyYW0oKTsKKwl2aXJ0dWFsIENQV0xfV25kKgkJCU5ld1BERldpbmRvdyhjb25zdCBQV0xfQ1JFQVRFUEFSQU0mIGNwLCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOworCisJCisJdmlydHVhbCBGWF9CT09MCQkJCU9uQ2hhcihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkNoYXIsIEZYX1VJTlQgbkZsYWdzKTsKKwkKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJSXNEYXRhQ2hhbmdlZChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOworCXZpcnR1YWwgdm9pZAkJCQlTYXZlRGF0YShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOworCQorIAl2aXJ0dWFsIHZvaWQJCQkJR2V0QWN0aW9uRGF0YShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwKKyAJCQkJCQkJCQkJCQlQREZTREtfRmllbGRBY3Rpb24mIGZhKTsKKyAJdmlydHVhbCB2b2lkCQkJCVNldEFjdGlvbkRhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIAorCQkJCQkJCQkJY29uc3QgUERGU0RLX0ZpZWxkQWN0aW9uJiBmYSk7CisgCXZpcnR1YWwgRlhfQk9PTAkJCQlJc0FjdGlvbkRhdGFDaGFuZ2VkKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgY29uc3QgUERGU0RLX0ZpZWxkQWN0aW9uJiBmYU9sZCwgCisgCQkJCQkJCQkJCQkJY29uc3QgUERGU0RLX0ZpZWxkQWN0aW9uJiBmYU5ldyk7CisJdmlydHVhbCB2b2lkCQkJCVNhdmVTdGF0ZShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOworCXZpcnR1YWwgdm9pZAkJCQlSZXN0b3JlU3RhdGUoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsKKwkKKwl2aXJ0dWFsIENQV0xfV25kKgkJCVJlc2V0UERGV2luZG93KENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfQk9PTCBiUmVzdG9yZVZhbHVlKTsKKwkKK3B1YmxpYzoKKwl2aXJ0dWFsIHZvaWQJCQkJT25TZXRGb2N1cyhDUFdMX1duZCogcFduZCk7CisJdmlydHVhbCB2b2lkCQkJCU9uS2lsbEZvY3VzKENQV0xfV25kKiBwV25kKTsKKwkKK3B1YmxpYzoKKwl2aXJ0dWFsIHZvaWQJCQkJT25BZGRVbmRvKENQV0xfRWRpdCogcEVkaXQpOworCQorcHVibGljOgorCXZpcnR1YWwgRlhfQk9PTAkJCQlDYW5Db3B5KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7IAorCXZpcnR1YWwgRlhfQk9PTAkJCQlDYW5DdXQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsgCisJdmlydHVhbCBGWF9CT09MCQkJCUNhblBhc3RlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7IAorCQorCXZpcnR1YWwgdm9pZAkJCQlEb0NvcHkoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsgCisJdmlydHVhbCB2b2lkCQkJCURvQ3V0KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7IAorCXZpcnR1YWwgdm9pZAkJCQlEb1Bhc3RlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7IAorCQorcHJpdmF0ZToKKwlDQkFfRm9udE1hcCoJCQkJbV9wRm9udE1hcDsKKy8vCUNCQV9TcGVsbENoZWNrKgkJCQltX3BTcGVsbENoZWNrOworCUZGTF9UZXh0RmllbGRTdGF0ZQkJCW1fU3RhdGU7CisvLwlDRkZMX0lNX0JPWAkJCQkJbV9JTUJveDsKK307CisKKyNlbmRpZiAvLyAhZGVmaW5lZChBRlhfRkZMX0VESVRfSF9fOEUwQzk0NTZfQ0JBMl80RUZCXzlGMzFfNTNDNkQ4QzFBOEFDX19JTkNMVURFRF8pCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfVXRpbHMuaCBiL2ZwZGZzZGsvaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9VdGlscy5oCmluZGV4IDA3ZjJiZWUuLjJmZGM3YjEgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9VdGlscy5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9VdGlscy5oCkBAIC0xLDIwICsxLDIwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jZGVmaW5lIEZGTF9CQVNFX1VTRVJVTklUCQkJMS4wZiAvIDcyLjBmDQotDQotdGVtcGxhdGU8Y2xhc3MgVD4gVCBGRkxfTUlOIChjb25zdCBUICYgaSwgY29uc3QgVCAmIGopIHsgcmV0dXJuICgoaSA8IGopID8gaSA6IGopOyB9DQotdGVtcGxhdGU8Y2xhc3MgVD4gVCBGRkxfTUFYIChjb25zdCBUICYgaSwgY29uc3QgVCAmIGopIHsgcmV0dXJuICgoaSA+IGopID8gaSA6IGopOyB9DQotDQotY2xhc3MgQ0ZGTF9VdGlscw0KLXsNCi1wdWJsaWM6DQotCXN0YXRpYyBDUERGX1JlY3QJCQkJTWF4UmVjdChjb25zdCBDUERGX1JlY3QgJiByZWN0MSxjb25zdCBDUERGX1JlY3QgJiByZWN0Mik7DQotCXN0YXRpYyBDUERGX1JlY3QJCQkJSW5mbGF0ZVJlY3QoY29uc3QgQ1BERl9SZWN0ICYgY3JSZWN0LCBjb25zdCBGWF9GTE9BVCAmIGZTaXplKTsNCi0Jc3RhdGljIENQREZfUmVjdAkJCQlEZWZsYXRlUmVjdChjb25zdCBDUERGX1JlY3QgJiBjclJlY3QsIGNvbnN0IEZYX0ZMT0FUICYgZlNpemUpOw0KLQlzdGF0aWMgRlhfQk9PTAkJCQkJVHJhY2VPYmplY3QoQ1BERl9PYmplY3QqIHBPYmopOw0KLX07DQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2RlZmluZSBGRkxfQkFTRV9VU0VSVU5JVAkJCTEuMGYgLyA3Mi4wZgorCit0ZW1wbGF0ZTxjbGFzcyBUPiBUIEZGTF9NSU4gKGNvbnN0IFQgJiBpLCBjb25zdCBUICYgaikgeyByZXR1cm4gKChpIDwgaikgPyBpIDogaik7IH0KK3RlbXBsYXRlPGNsYXNzIFQ+IFQgRkZMX01BWCAoY29uc3QgVCAmIGksIGNvbnN0IFQgJiBqKSB7IHJldHVybiAoKGkgPiBqKSA/IGkgOiBqKTsgfQorCitjbGFzcyBDRkZMX1V0aWxzCit7CitwdWJsaWM6CisJc3RhdGljIENQREZfUmVjdAkJCQlNYXhSZWN0KGNvbnN0IENQREZfUmVjdCAmIHJlY3QxLGNvbnN0IENQREZfUmVjdCAmIHJlY3QyKTsKKwlzdGF0aWMgQ1BERl9SZWN0CQkJCUluZmxhdGVSZWN0KGNvbnN0IENQREZfUmVjdCAmIGNyUmVjdCwgY29uc3QgRlhfRkxPQVQgJiBmU2l6ZSk7CisJc3RhdGljIENQREZfUmVjdAkJCQlEZWZsYXRlUmVjdChjb25zdCBDUERGX1JlY3QgJiBjclJlY3QsIGNvbnN0IEZYX0ZMT0FUICYgZlNpemUpOworCXN0YXRpYyBGWF9CT09MCQkJCQlUcmFjZU9iamVjdChDUERGX09iamVjdCogcE9iaik7Cit9OworCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvZm9ybWZpbGxlci9Gb3JtRmlsbGVyLmggYi9mcGRmc2RrL2luY2x1ZGUvZm9ybWZpbGxlci9Gb3JtRmlsbGVyLmgKaW5kZXggZTdhMjJhMC4uOGU0NWQ1ZSAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2Zvcm1maWxsZXIvRm9ybUZpbGxlci5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9mb3JtZmlsbGVyL0Zvcm1GaWxsZXIuaApAQCAtMSwzMCArMSwzMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRk9STUZJTExFUl9IXw0KLSNkZWZpbmUgX0ZPUk1GSUxMRVJfSF8NCi0NCi0NCi0NCi0jaWZuZGVmIF9JTkNfUERGQVBJDQotCSNkZWZpbmUgX0lOQ19QREZBUEkNCi0NCi0JI2luY2x1ZGUgIi4uLy4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfbW9kdWxlLmgiIA0KLQkjaW5jbHVkZSAiLi4vLi4vLi4vY29yZS9pbmNsdWRlL2ZwZGZkb2MvZnBkZl9kb2MuaCIgDQotCSNpbmNsdWRlICIuLi8uLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmRvYy9mcGRmX3Z0LmgiIA0KLQkjaW5jbHVkZSAiLi4vLi4vLi4vY29yZS9pbmNsdWRlL2Z4Y3J0L2Z4X3htbC5oIiANCi0NCi0jZW5kaWYNCi0NCi0jaW5jbHVkZSAiLi4vZnNka19tZ3IuaCINCi0NCi0jaW5jbHVkZSAiLi4vZnhlZGl0L2Z4X2VkaXQuaCINCi0jaW5jbHVkZSAiLi4vcGRmd2luZG93L0lQREZXaW5kb3cuaCINCi0NCi0NCi0NCi0jZW5kaWYgLy9fRk9STUZJTExFUl9IXw0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZPUk1GSUxMRVJfSF8KKyNkZWZpbmUgX0ZPUk1GSUxMRVJfSF8KKworCisKKyNpZm5kZWYgX0lOQ19QREZBUEkKKwkjZGVmaW5lIF9JTkNfUERGQVBJCisKKwkjaW5jbHVkZSAiLi4vLi4vLi4vY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCIgCisJI2luY2x1ZGUgIi4uLy4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmZG9jL2ZwZGZfZG9jLmgiIAorCSNpbmNsdWRlICIuLi8uLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmRvYy9mcGRmX3Z0LmgiIAorCSNpbmNsdWRlICIuLi8uLi8uLi9jb3JlL2luY2x1ZGUvZnhjcnQvZnhfeG1sLmgiIAorCisjZW5kaWYKKworI2luY2x1ZGUgIi4uL2ZzZGtfbWdyLmgiCisKKyNpbmNsdWRlICIuLi9meGVkaXQvZnhfZWRpdC5oIgorI2luY2x1ZGUgIi4uL3BkZndpbmRvdy9JUERGV2luZG93LmgiCisKKworCisjZW5kaWYgLy9fRk9STUZJTExFUl9IXworCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvZnBkZl9kYXRhYXZhaWwuaCBiL2ZwZGZzZGsvaW5jbHVkZS9mcGRmX2RhdGFhdmFpbC5oCmluZGV4IDlkMzczZmMuLjk3MWFiMjUgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9mcGRmX2RhdGFhdmFpbC5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9mcGRmX2RhdGFhdmFpbC5oCkBAIC0xLDIyMiArMSwyMjIgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0ZQREZfREFUQUFWQUlMX0hfDQotI2RlZmluZSBfRlBERl9EQVRBQVZBSUxfSF8NCi0NCi0jaWZuZGVmIF9GUERGVklFV19IXw0KLSNpbmNsdWRlICJmcGRmdmlldy5oIg0KLSNlbmRpZg0KLQ0KLQ0KLS8qKiBUaGUgcmVzdWx0IG9mIHRoZSBwcm9jZXNzIHdoaWNoIGNoZWNrIGxpbmVhcml6ZWQgUERGLiAqLw0KLSNkZWZpbmUgRlNES19JU19MSU5FQVJJWkVECQkJMQ0KLSNkZWZpbmUgRlNES19OT1RfTElORUFSSVpFRAkJCTANCi0jZGVmaW5lIEZTREtfVU5LTk9XX0xJTkVBUklaRUQJCS0xDQotDQotDQotI2lmZGVmIF9fY3BsdXNwbHVzDQotZXh0ZXJuICJDIiB7DQotI2VuZGlmDQotDQotLyoqDQotICogSW50ZXJmYWNlOiBGWF9GSUxFQVZBSUwNCi0gKgkJCUludGVyZmFjZSBmb3IgY2hlY2tpbmcgd2hldGhlciB0aGUgc2VjdGlvbiBvZiB0aGUgZmlsZSBpcyBhdmFpbGFibGUuIA0KLSAqLw0KLXR5cGVkZWYgc3RydWN0IF9GWF9GSUxFQVZBSUwgew0KLQkvKioNCi0JICogVmVyc2lvbiBudW1iZXIgb2YgdGhlIGludGVyZmFjZS4gQ3VycmVudGx5IG11c3QgYmUgMS4NCi0JICovDQotCWludCB2ZXJzaW9uOw0KLQ0KLQkvKioNCi0JICogTWV0aG9kOiBJc0RhdGFBdmFpbA0KLQkgKgkJUmVwb3J0IHdoZXRoZXIgdGhlIHNwZWNpZmllZCBkYXRhIHNlY3Rpb24gaXMgYXZhaWxhYmxlLiBBIHNlY3Rpb24gaXMgYXZhaWxhYmxlIG9ubHkgaWYgYWxsIGJ5dGVzIGluIHRoZSBzZWN0aW9uIGlzIGF2YWlsYWJsZS4gDQotCSAqIEludGVyZmFjZSBWZXJzaW9uOg0KLQkgKgkJMQ0KLQkgKiBJbXBsZW1lbnRhdGlvbiBSZXF1aXJlZDoNCi0JICoJCVllcw0KLQkgKiBQYXJhbWV0ZXJzOg0KLQkgKgkJcFRoaXMJCS0JUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBpdHNlbGYuDQotCSAqCQlvZmZzZXQJCS0JVGhlIG9mZnNldCBvZiB0aGUgZGF0YSBzZWN0aW9uIGluIHRoZSBmaWxlLg0KLQkgKgkJc2l6ZQkJLQlUaGUgc2l6ZSBvZiB0aGUgZGF0YSBzZWN0aW9uDQotCSAqIFJldHVybiBWYWx1ZToNCi0JICoJCXRydWUgbWVhbnMgdGhlIHNwZWNpZmllZCBkYXRhIHNlY3Rpb24gaXMgYXZhaWxhYmxlLg0KLQkgKiBDb21tZW50czoNCi0JICoJCUNhbGxlZCBieSBGb3hpdCBTREsgdG8gY2hlY2sgd2hldGhlciB0aGUgZGF0YSBzZWN0aW9uIGlzIHJlYWR5Lg0KLQkgKi8NCi0JYm9vbCAoKklzRGF0YUF2YWlsKShzdHJ1Y3QgX0ZYX0ZJTEVBVkFJTCogcFRoaXMsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKTsNCi19IEZYX0ZJTEVBVkFJTDsNCi0NCi10eXBlZGVmIHZvaWQqIEZQREZfQVZBSUw7DQotDQotLyoqDQotKiBGdW5jdGlvbjogRlBERkF2YWlsX0NyZWF0ZQ0KLSoJCQlDcmVhdGUgYSBkb2N1bWVudCBhdmFpbGFiaWxpdHkgcHJvdmlkZXIuDQotKg0KLSogUGFyYW1ldGVyczogDQotKgkJCWZpbGVfYXZhaWwJLQlQb2ludGVyIHRvIGZpbGUgYXZhaWxhYmlsaXR5IGludGVyZmFjZSB0byBjaGVjayBhdmFpbGFiaWxpdHkgb2YgZmlsZSBkYXRhLg0KLSoJCQlmaWxlCQktCVBvaW50ZXIgdG8gYSBmaWxlIGFjY2VzcyBpbnRlcmZhY2UgZm9yIHJlYWRpbmcgZGF0YSBmcm9tIGZpbGUuDQotKiBSZXR1cm4gdmFsdWU6DQotKgkJCUEgaGFuZGxlIHRvIHRoZSBkb2N1bWVudCBhdmFpbGFiaWxpdHkgcHJvdmlkZXIuIE5VTEwgZm9yIGVycm9yLg0KLSogQ29tbWVudHM6DQotKgkJCUFwcGxpY2F0aW9uIG11c3QgY2FsbCBGUERGQXZhaWxfRGVzdHJveSB3aGVuIGRvbmUgd2l0aCB0aGUgYXZhaWxhYmlsaXR5IHByb3ZpZGVyLg0KLSovDQotRExMRVhQT1JUIEZQREZfQVZBSUwgU1REQ0FMTCBGUERGQXZhaWxfQ3JlYXRlKEZYX0ZJTEVBVkFJTCogZmlsZV9hdmFpbCwgRlBERl9GSUxFQUNDRVNTKiBmaWxlKTsNCi0NCi0vKioNCi0qIEZ1bmN0aW9uOiBGUERGQXZhaWxfRGVzdHJveQ0KLSoJCQlEZXN0cm95IGEgZG9jdW1lbnQgYXZhaWxpYml0eSBwcm92aWRlci4NCi0qDQotKiBQYXJhbWV0ZXJzOiANCi0qCQkJYXZhaWwJCS0JSGFuZGxlIHRvIGRvY3VtZW50IGF2YWlsYWJpbGl0eSBwcm92aWRlciByZXR1cm5lZCBieSBGUERGQXZhaWxfQ3JlYXRlDQotKiBSZXR1cm4gVmFsdWU6DQotKgkJCU5vbmUuDQotKi8NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZBdmFpbF9EZXN0cm95KEZQREZfQVZBSUwgYXZhaWwpOw0KLQ0KLS8qKg0KLSAqIEludGVyZmFjZTogRlhfRE9XTkxPQURISU5UUw0KLSAqCQkJRG93bmxvYWQgaGludHMgaW50ZXJmYWNlLiBVc2VkIHRvIHJlY2VpdmUgaGludHMgZm9yIGZ1cnRoZXIgZG93bmxvYWRpbmcuDQotICovDQotdHlwZWRlZiBzdHJ1Y3QgX0ZYX0RPV05MT0FESElOVFMgew0KLQkvKioNCi0JICogVmVyc2lvbiBudW1iZXIgb2YgdGhlIGludGVyZmFjZS4gQ3VycmVudGx5IG11c3QgYmUgMS4NCi0JICovDQotCWludCB2ZXJzaW9uOw0KLQ0KLQkvKioNCi0JICogTWV0aG9kOiBBZGRTZWdtZW50DQotCSAqCQlBZGQgYSBzZWN0aW9uIHRvIGJlIGRvd25sb2FkZWQuDQotCSAqIEludGVyZmFjZSBWZXJzaW9uOg0KLQkgKgkJMQ0KLQkgKiBJbXBsZW1lbnRhdGlvbiBSZXF1aXJlZDoNCi0JICoJCVllcw0KLQkgKiBQYXJhbWV0ZXJzOg0KLQkgKgkJcFRoaXMJCS0JUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBpdHNlbGYuDQotCSAqCQlvZmZzZXQJCS0JVGhlIG9mZnNldCBvZiB0aGUgaGludCByZXBvcnRlZCB0byBiZSBkb3dubG9hZGVkLg0KLQkgKgkJc2l6ZQkJLQlUaGUgc2l6ZSBvZiB0aGUgaGludCByZXBvcnRlZCB0byBiZSBkb3dubG9hZGVkLg0KLQkgKiBSZXR1cm4gVmFsdWU6DQotCSAqCQlOb25lLg0KLQkgKiBDb21tZW50czoNCi0JICoJCUNhbGxlZCBieSBGb3hpdCBTREsgdG8gcmVwb3J0IHNvbWUgZG93bmxvYWRpbmcgaGludHMgZm9yIGRvd25sb2FkIG1hbmFnZXIuDQotCSAqCQlUaGUgcG9zaXRpb24gYW5kIHNpemUgb2Ygc2VjdGlvbiBtYXkgYmUgbm90IGFjY3VyYXRlLCBwYXJ0IG9mIHRoZSBzZWN0aW9uIG1pZ2h0IGJlIGFscmVhZHkgYXZhaWxhYmxlLiANCi0JICoJCVRoZSBkb3dubG9hZCBtYW5hZ2VyIG11c3QgZGVhbCB3aXRoIHRoYXQgdG8gbWF4aW1pemUgZG93bmxvYWQgZWZmaWNpZW5jeS4NCi0JICovDQotCXZvaWQgKCpBZGRTZWdtZW50KShzdHJ1Y3QgX0ZYX0RPV05MT0FESElOVFMqIHBUaGlzLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSk7DQotfSBGWF9ET1dOTE9BREhJTlRTOw0KLQ0KLS8qKg0KLSogRnVuY3Rpb246IEZQREZBdmFpbF9Jc0RvY0F2YWlsDQotKgkJCUNoZWNrIHdoZXRoZXIgdGhlIGRvY3VtZW50IGlzIHJlYWR5IGZvciBsb2FkaW5nLCBpZiBub3QsIGdldCBkb3dubG9hZCBoaW50cy4NCi0qDQotKiBQYXJhbWV0ZXJzOiANCi0qCQkJYXZhaWwJCS0JSGFuZGxlIHRvIGRvY3VtZW50IGF2YWlsYWJpbGl0eSBwcm92aWRlciByZXR1cm5lZCBieSBGUERGQXZhaWxfQ3JlYXRlDQotKgkJCWhpbnRzCQktCVBvaW50ZXIgdG8gYSBkb3dubG9hZCBoaW50cyBpbnRlcmZhY2UsIHJlY2VpdmluZyBnZW5lcmF0ZWQgaGludHMNCi0qIFJldHVybiB2YWx1ZToNCi0qCQkJTm9uLXplcm8gZm9yIHBhZ2UgaXMgZnVsbHkgYXZhaWxhYmxlLCAwIGZvciBwYWdlIG5vdCB5ZXQgYXZhaWxhYmxlLg0KLSogQ29tbWVudHM6DQotKgkJCVRoZSBhcHBsaWNhdGlvbiBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW5ldmVyIG5ldyBkYXRhIGFycml2ZWQsIGFuZCBwcm9jZXNzIGFsbCB0aGUNCi0qCQkJZ2VuZXJhdGVkIGRvd25sb2FkIGhpbnRzIGlmIGFueSwgdW50aWwgdGhlIGZ1bmN0aW9uIHJldHVybnMgbm9uLXplcm8gdmFsdWUuIFRoZW4gdGhlIA0KLSoJCQlhcHBsaWNhdGlvbiBjYW4gY2FsbCBGUERGQXZhaWxfR2V0RG9jdW1lbnQoKSB0byBnZXQgYSBkb2N1bWVudCBoYW5kbGUuDQotKi8NCi1ETExFWFBPUlQgaW50IFNURENBTEwgRlBERkF2YWlsX0lzRG9jQXZhaWwoRlBERl9BVkFJTCBhdmFpbCwgRlhfRE9XTkxPQURISU5UUyogaGludHMpOw0KLQ0KLS8qKg0KLSogRnVuY3Rpb246IEZQREZBdmFpbF9HZXREb2N1bWVudA0KLSoJCQlHZXQgZG9jdW1lbnQgZnJvbSB0aGUgYXZhaWxhYmlsaXR5IHByb3ZpZGVyLg0KLSoNCi0qIFBhcmFtZXRlcnM6DQotKgkJCWF2YWlsCQktCUhhbmRsZSB0byBkb2N1bWVudCBhdmFpbGFiaWxpdHkgcHJvdmlkZXIgcmV0dXJuZWQgYnkgRlBERkF2YWlsX0NyZWF0ZQ0KLSogICAgIHBhc3N3b3JkCS0JT3B0aW9uYWwgcGFzc3dvcmQgZm9yIGRlY3J5cHRpbmcgdGhlIFBERiBmaWxlLg0KLSogUmV0dXJuIHZhbHVlOg0KLSoJCQlIYW5kbGUgdG8gdGhlIGRvY3VtZW50Lg0KLSogQ29tbWVudHM6DQotKgkJCUFmdGVyIEZQREZBdmFpbF9Jc0RvY0F2YWlsKCkgcmV0dXJucyBUUlVFLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiB0bw0KLSoJCQlnZXQgdGhlIGRvY3VtZW50IGhhbmRsZS4gVG8gY2xvc2UgdGhlIGRvY3VtZW50LCB1c2UgRlBERl9DbG9zZURvY3VtZW50IGZ1bmN0aW9uLg0KLSovDQotRExMRVhQT1JUIEZQREZfRE9DVU1FTlQgU1REQ0FMTCBGUERGQXZhaWxfR2V0RG9jdW1lbnQoRlBERl9BVkFJTCBhdmFpbCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUERGX0JZVEVTVFJJTkcgcGFzc3dvcmQpOw0KLQ0KLS8qKg0KLSogRnVuY3Rpb246IEZQREZBdmFpbF9HZXRGaXJzdFBhZ2VOdW0NCi0qCQkJR2V0IHBhZ2UgbnVtYmVyIGZvciB0aGUgZmlyc3QgYXZhaWxhYmxlIHBhZ2UgaW4gYSBsaW5lYXJpemVkIFBERg0KLSoNCi0qIFBhcmFtZXRlcnM6DQotKgkJCWRvYwkJCS0JQSBkb2N1bWVudCBoYW5kbGUgcmV0dXJuZWQgYnkgRlBERkF2YWlsX0dldERvY3VtZW50DQotKiBSZXR1cm4gVmFsdWU6DQotKgkJCVplcm8tYmFzZWQgaW5kZXggZm9yIHRoZSBmaXJzdCBhdmFpbGFibGUgcGFnZS4NCi0qIENvbW1lbnRzOg0KLSoJCQlGb3IgbW9zdCBsaW5lYXJpemVkIFBERnMsIHRoZSBmaXJzdCBhdmFpbGFibGUgcGFnZSB3b3VsZCBiZSBqdXN0IHRoZSBmaXJzdCBwYWdlLCBob3dldmVyLA0KLSoJCQlzb21lIFBERnMgbWlnaHQgbWFrZSBvdGhlciBwYWdlIHRvIGJlIHRoZSBmaXJzdCBhdmFpbGFibGUgcGFnZS4NCi0qCQkJRm9yIG5vbi1saW5lYXJpemVkIFBERiwgdGhpcyBmdW5jdGlvbiB3aWxsIGFsd2F5cyByZXR1cm4gemVyby4NCi0qLw0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGQXZhaWxfR2V0Rmlyc3RQYWdlTnVtKEZQREZfRE9DVU1FTlQgZG9jKTsNCi0NCi0vKioNCi0qIEZ1bmN0aW9uOiBGUERGQXZhaWxfSXNQYWdlQXZhaWwNCi0qCQkJQ2hlY2sgd2hldGhlciBhIHBhZ2UgaXMgcmVhZHkgZm9yIGxvYWRpbmcsIGlmIG5vdCwgZ2V0IGRvd25sb2FkIGhpbnRzLg0KLSoNCi0qIFBhcmFtZXRlcnM6IA0KLSoJCQlhdmFpbAkJLQlIYW5kbGUgdG8gZG9jdW1lbnQgYXZhaWxhYmlsaXR5IHByb3ZpZGVyIHJldHVybmVkIGJ5IEZQREZBdmFpbF9DcmVhdGUNCi0qCQkJcGFnZV9pbmRleAktCUluZGV4IG51bWJlciBvZiB0aGUgcGFnZS4gMCBmb3IgdGhlIGZpcnN0IHBhZ2UuDQotKgkJCWhpbnRzCQktCVBvaW50ZXIgdG8gYSBkb3dubG9hZCBoaW50cyBpbnRlcmZhY2UsIHJlY2VpdmluZyBnZW5lcmF0ZWQgaGludHMNCi0qIFJldHVybiB2YWx1ZToNCi0qCQkJTm9uLXplcm8gZm9yIHBhZ2UgaXMgZnVsbHkgYXZhaWxhYmxlLCAwIGZvciBwYWdlIG5vdCB5ZXQgYXZhaWxhYmxlLg0KLSogQ29tbWVudHM6DQotKgkJCVRoaXMgZnVuY3Rpb24gY2FsbCBiZSBjYWxsZWQgb25seSBhZnRlciBGUERGQXZhaWxfR2V0RG9jdW1lbnQgaWYgY2FsbGVkLg0KLSoJCQlUaGUgYXBwbGljYXRpb24gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuZXZlciBuZXcgZGF0YSBhcnJpdmVkLCBhbmQgcHJvY2VzcyBhbGwgdGhlDQotKgkJCWdlbmVyYXRlZCBkb3dubG9hZCBoaW50cyBpZiBhbnksIHVudGlsIHRoZSBmdW5jdGlvbiByZXR1cm5zIG5vbi16ZXJvIHZhbHVlLiBUaGVuIHRoZSANCi0qCQkJYXBwbGljYXRpb24gY2FuIHBlcmZvcm0gcGFnZSBsb2FkaW5nLg0KLSovDQotRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZBdmFpbF9Jc1BhZ2VBdmFpbChGUERGX0FWQUlMIGF2YWlsLCBpbnQgcGFnZV9pbmRleCwgRlhfRE9XTkxPQURISU5UUyogaGludHMpOw0KLQ0KLS8qKg0KLSogRnVuY3Rpb246IEZQREZBdmFpbF9JU0Zvcm1BdmFpbA0KLSoJCQlDaGVjayB3aGV0aGVyIEZvcm0gZGF0YSBpcyByZWFkeSBmb3IgaW5pdCwgaWYgbm90LCBnZXQgZG93bmxvYWQgaGludHMuDQotKg0KLSogUGFyYW1ldGVyczogDQotKgkJCWF2YWlsCQktCUhhbmRsZSB0byBkb2N1bWVudCBhdmFpbGFiaWxpdHkgcHJvdmlkZXIgcmV0dXJuZWQgYnkgRlBERkF2YWlsX0NyZWF0ZQ0KLSoJCQloaW50cwkJLQlQb2ludGVyIHRvIGEgZG93bmxvYWQgaGludHMgaW50ZXJmYWNlLCByZWNlaXZpbmcgZ2VuZXJhdGVkIGhpbnRzDQotKiBSZXR1cm4gdmFsdWU6DQotKgkJCU5vbi16ZXJvIGZvciBGb3JtIGRhdGEgaXMgZnVsbHkgYXZhaWxhYmxlLCAwIGZvciBGb3JtIGRhdGEgbm90IHlldCBhdmFpbGFibGUuDQotKgkJCURldGFpbHM6IC0xIC0gZXJyb3IsIHRoZSBpbnB1dCBwYXJhbWV0ZXIgbm90IGNvcnJlY3QsIHN1Y2ggYXMgaGludHMgaXMgbnVsbC4NCi0qCQkJCQkgMCAgLSBkYXRhIG5vdCBhdmFpbGFibGUNCi0qCQkJCQkgMSAgLSBkYXRhIGF2YWlsYWJsZQ0KLSoJCQkJCSAyICAtIG5vIGZvcm0gZGF0YS4JCQkJDQotKiBDb21tZW50czoNCi0qCQkJVGhpcyBmdW5jdGlvbiBjYWxsIGJlIGNhbGxlZCBvbmx5IGFmdGVyIEZQREZBdmFpbF9HZXREb2N1bWVudCBpZiBjYWxsZWQuIA0KLSoJCQlUaGUgYXBwbGljYXRpb24gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuZXZlciBuZXcgZGF0YSBhcnJpdmVkLCBhbmQgcHJvY2VzcyBhbGwgdGhlDQotKgkJCWdlbmVyYXRlZCBkb3dubG9hZCBoaW50cyBpZiBhbnksIHVudGlsIHRoZSBmdW5jdGlvbiByZXR1cm5zIG5vbi16ZXJvIHZhbHVlLiBUaGVuIHRoZSANCi0qCQkJYXBwbGljYXRpb24gY2FuIHBlcmZvcm0gcGFnZSBsb2FkaW5nLiBSZWNvbW1lbmQgdG8gY2FsbCBGUERGRE9DX0luaXRGb3JtRmlsbEVudmlyb3VtZW50DQotKgkJCWFmdGVyIHRoZSBmdW5jdGlvbiByZXR1cm5zIG5vbi16ZXJvIHZhbHVlLg0KLSovDQotRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZBdmFpbF9Jc0Zvcm1BdmFpbChGUERGX0FWQUlMIGF2YWlsLCBGWF9ET1dOTE9BREhJTlRTKiBoaW50cyk7DQotDQotLyoqDQotKiBGdW5jdGlvbjogRlBERkF2YWlsX0lzTGluZWFyaXplZA0KLSoJCQlUbyBjaGVjayB3aGV0aGVyIGEgZG9jdW1lbnQgaXMgTGluZWFyaXplZCBQREYgZmlsZS4NCi0qDQotKiBQYXJhbWV0ZXJzOg0KLSoJCQlhdmFpbAkJLQlIYW5kbGUgdG8gZG9jdW1lbnQgYXZhaWxhYmlsaXR5IHByb3ZpZGVyIHJldHVybmVkIGJ5IEZQREZBdmFpbF9DcmVhdGUNCi0qIFJldHVybiB2YWx1ZToNCi0qCQkJcmV0dXJuIFRSVUUgbWVhbnMgdGhlIGRvY3VtZW50IGlzIGxpbmVhcml6ZWQgUERGIGVsc2Ugbm90Lg0KLSoJCQlGU0RLX0lTX0xJTkVBUklaRUQgaXMgYSBsaW5lYXJpemUgZmlsZS4NCi0qCQkJRlNES19OT1RfTElORUFSSVpFRCBpcyBub3QgYSBsaW5lYXJpemUgZmlsZS4NCi0qCQkJRlNES19VTktOT1dfTElORUFSSVpFRCBkb24ndCBrbm93IHdoZXRoZXIgdGhlIGZpbGUgaXMgYSBsaW5lYXJpemUgZmlsZS4NCi0qIENvbW1lbnRzOg0KLSoJCQlJdCByZXR1cm4gVFJVRS9GQUxTRSBhcyBzb29uIGFzIHdlIGhhdmUgZmlyc3QgMUsgZGF0YS4gCUlmIHRoZSBmaWxlJ3Mgc2l6ZSBsZXNzIHRoYW4NCi0qCQkJMUssd2UgZG9uJ3Qga25vd24gd2hldGhlciB0aGUgUERGIGlzIGEgbGluZWFyaXplZCBmaWxlLg0KLSoNCi0qLw0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGQXZhaWxfSXNMaW5lYXJpemVkKEZQREZfQVZBSUwgYXZhaWwpOw0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX07DQotI2VuZGlmDQotDQotI2VuZGlmDQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlBERl9EQVRBQVZBSUxfSF8KKyNkZWZpbmUgX0ZQREZfREFUQUFWQUlMX0hfCisKKyNpZm5kZWYgX0ZQREZWSUVXX0hfCisjaW5jbHVkZSAiZnBkZnZpZXcuaCIKKyNlbmRpZgorCisKKy8qKiBUaGUgcmVzdWx0IG9mIHRoZSBwcm9jZXNzIHdoaWNoIGNoZWNrIGxpbmVhcml6ZWQgUERGLiAqLworI2RlZmluZSBGU0RLX0lTX0xJTkVBUklaRUQJCQkxCisjZGVmaW5lIEZTREtfTk9UX0xJTkVBUklaRUQJCQkwCisjZGVmaW5lIEZTREtfVU5LTk9XX0xJTkVBUklaRUQJCS0xCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIEludGVyZmFjZTogRlhfRklMRUFWQUlMCisgKgkJCUludGVyZmFjZSBmb3IgY2hlY2tpbmcgd2hldGhlciB0aGUgc2VjdGlvbiBvZiB0aGUgZmlsZSBpcyBhdmFpbGFibGUuIAorICovCit0eXBlZGVmIHN0cnVjdCBfRlhfRklMRUFWQUlMIHsKKwkvKioKKwkgKiBWZXJzaW9uIG51bWJlciBvZiB0aGUgaW50ZXJmYWNlLiBDdXJyZW50bHkgbXVzdCBiZSAxLgorCSAqLworCWludCB2ZXJzaW9uOworCisJLyoqCisJICogTWV0aG9kOiBJc0RhdGFBdmFpbAorCSAqCQlSZXBvcnQgd2hldGhlciB0aGUgc3BlY2lmaWVkIGRhdGEgc2VjdGlvbiBpcyBhdmFpbGFibGUuIEEgc2VjdGlvbiBpcyBhdmFpbGFibGUgb25seSBpZiBhbGwgYnl0ZXMgaW4gdGhlIHNlY3Rpb24gaXMgYXZhaWxhYmxlLiAKKwkgKiBJbnRlcmZhY2UgVmVyc2lvbjoKKwkgKgkJMQorCSAqIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOgorCSAqCQlZZXMKKwkgKiBQYXJhbWV0ZXJzOgorCSAqCQlwVGhpcwkJLQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZi4KKwkgKgkJb2Zmc2V0CQktCVRoZSBvZmZzZXQgb2YgdGhlIGRhdGEgc2VjdGlvbiBpbiB0aGUgZmlsZS4KKwkgKgkJc2l6ZQkJLQlUaGUgc2l6ZSBvZiB0aGUgZGF0YSBzZWN0aW9uCisJICogUmV0dXJuIFZhbHVlOgorCSAqCQl0cnVlIG1lYW5zIHRoZSBzcGVjaWZpZWQgZGF0YSBzZWN0aW9uIGlzIGF2YWlsYWJsZS4KKwkgKiBDb21tZW50czoKKwkgKgkJQ2FsbGVkIGJ5IEZveGl0IFNESyB0byBjaGVjayB3aGV0aGVyIHRoZSBkYXRhIHNlY3Rpb24gaXMgcmVhZHkuCisJICovCisJYm9vbCAoKklzRGF0YUF2YWlsKShzdHJ1Y3QgX0ZYX0ZJTEVBVkFJTCogcFRoaXMsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKTsKK30gRlhfRklMRUFWQUlMOworCit0eXBlZGVmIHZvaWQqIEZQREZfQVZBSUw7CisKKy8qKgorKiBGdW5jdGlvbjogRlBERkF2YWlsX0NyZWF0ZQorKgkJCUNyZWF0ZSBhIGRvY3VtZW50IGF2YWlsYWJpbGl0eSBwcm92aWRlci4KKyoKKyogUGFyYW1ldGVyczogCisqCQkJZmlsZV9hdmFpbAktCVBvaW50ZXIgdG8gZmlsZSBhdmFpbGFiaWxpdHkgaW50ZXJmYWNlIHRvIGNoZWNrIGF2YWlsYWJpbGl0eSBvZiBmaWxlIGRhdGEuCisqCQkJZmlsZQkJLQlQb2ludGVyIHRvIGEgZmlsZSBhY2Nlc3MgaW50ZXJmYWNlIGZvciByZWFkaW5nIGRhdGEgZnJvbSBmaWxlLgorKiBSZXR1cm4gdmFsdWU6CisqCQkJQSBoYW5kbGUgdG8gdGhlIGRvY3VtZW50IGF2YWlsYWJpbGl0eSBwcm92aWRlci4gTlVMTCBmb3IgZXJyb3IuCisqIENvbW1lbnRzOgorKgkJCUFwcGxpY2F0aW9uIG11c3QgY2FsbCBGUERGQXZhaWxfRGVzdHJveSB3aGVuIGRvbmUgd2l0aCB0aGUgYXZhaWxhYmlsaXR5IHByb3ZpZGVyLgorKi8KK0RMTEVYUE9SVCBGUERGX0FWQUlMIFNURENBTEwgRlBERkF2YWlsX0NyZWF0ZShGWF9GSUxFQVZBSUwqIGZpbGVfYXZhaWwsIEZQREZfRklMRUFDQ0VTUyogZmlsZSk7CisKKy8qKgorKiBGdW5jdGlvbjogRlBERkF2YWlsX0Rlc3Ryb3kKKyoJCQlEZXN0cm95IGEgZG9jdW1lbnQgYXZhaWxpYml0eSBwcm92aWRlci4KKyoKKyogUGFyYW1ldGVyczogCisqCQkJYXZhaWwJCS0JSGFuZGxlIHRvIGRvY3VtZW50IGF2YWlsYWJpbGl0eSBwcm92aWRlciByZXR1cm5lZCBieSBGUERGQXZhaWxfQ3JlYXRlCisqIFJldHVybiBWYWx1ZToKKyoJCQlOb25lLgorKi8KK0RMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERkF2YWlsX0Rlc3Ryb3koRlBERl9BVkFJTCBhdmFpbCk7CisKKy8qKgorICogSW50ZXJmYWNlOiBGWF9ET1dOTE9BREhJTlRTCisgKgkJCURvd25sb2FkIGhpbnRzIGludGVyZmFjZS4gVXNlZCB0byByZWNlaXZlIGhpbnRzIGZvciBmdXJ0aGVyIGRvd25sb2FkaW5nLgorICovCit0eXBlZGVmIHN0cnVjdCBfRlhfRE9XTkxPQURISU5UUyB7CisJLyoqCisJICogVmVyc2lvbiBudW1iZXIgb2YgdGhlIGludGVyZmFjZS4gQ3VycmVudGx5IG11c3QgYmUgMS4KKwkgKi8KKwlpbnQgdmVyc2lvbjsKKworCS8qKgorCSAqIE1ldGhvZDogQWRkU2VnbWVudAorCSAqCQlBZGQgYSBzZWN0aW9uIHRvIGJlIGRvd25sb2FkZWQuCisJICogSW50ZXJmYWNlIFZlcnNpb246CisJICoJCTEKKwkgKiBJbXBsZW1lbnRhdGlvbiBSZXF1aXJlZDoKKwkgKgkJWWVzCisJICogUGFyYW1ldGVyczoKKwkgKgkJcFRoaXMJCS0JUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBpdHNlbGYuCisJICoJCW9mZnNldAkJLQlUaGUgb2Zmc2V0IG9mIHRoZSBoaW50IHJlcG9ydGVkIHRvIGJlIGRvd25sb2FkZWQuCisJICoJCXNpemUJCS0JVGhlIHNpemUgb2YgdGhlIGhpbnQgcmVwb3J0ZWQgdG8gYmUgZG93bmxvYWRlZC4KKwkgKiBSZXR1cm4gVmFsdWU6CisJICoJCU5vbmUuCisJICogQ29tbWVudHM6CisJICoJCUNhbGxlZCBieSBGb3hpdCBTREsgdG8gcmVwb3J0IHNvbWUgZG93bmxvYWRpbmcgaGludHMgZm9yIGRvd25sb2FkIG1hbmFnZXIuCisJICoJCVRoZSBwb3NpdGlvbiBhbmQgc2l6ZSBvZiBzZWN0aW9uIG1heSBiZSBub3QgYWNjdXJhdGUsIHBhcnQgb2YgdGhlIHNlY3Rpb24gbWlnaHQgYmUgYWxyZWFkeSBhdmFpbGFibGUuIAorCSAqCQlUaGUgZG93bmxvYWQgbWFuYWdlciBtdXN0IGRlYWwgd2l0aCB0aGF0IHRvIG1heGltaXplIGRvd25sb2FkIGVmZmljaWVuY3kuCisJICovCisJdm9pZCAoKkFkZFNlZ21lbnQpKHN0cnVjdCBfRlhfRE9XTkxPQURISU5UUyogcFRoaXMsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKTsKK30gRlhfRE9XTkxPQURISU5UUzsKKworLyoqCisqIEZ1bmN0aW9uOiBGUERGQXZhaWxfSXNEb2NBdmFpbAorKgkJCUNoZWNrIHdoZXRoZXIgdGhlIGRvY3VtZW50IGlzIHJlYWR5IGZvciBsb2FkaW5nLCBpZiBub3QsIGdldCBkb3dubG9hZCBoaW50cy4KKyoKKyogUGFyYW1ldGVyczogCisqCQkJYXZhaWwJCS0JSGFuZGxlIHRvIGRvY3VtZW50IGF2YWlsYWJpbGl0eSBwcm92aWRlciByZXR1cm5lZCBieSBGUERGQXZhaWxfQ3JlYXRlCisqCQkJaGludHMJCS0JUG9pbnRlciB0byBhIGRvd25sb2FkIGhpbnRzIGludGVyZmFjZSwgcmVjZWl2aW5nIGdlbmVyYXRlZCBoaW50cworKiBSZXR1cm4gdmFsdWU6CisqCQkJTm9uLXplcm8gZm9yIHBhZ2UgaXMgZnVsbHkgYXZhaWxhYmxlLCAwIGZvciBwYWdlIG5vdCB5ZXQgYXZhaWxhYmxlLgorKiBDb21tZW50czoKKyoJCQlUaGUgYXBwbGljYXRpb24gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuZXZlciBuZXcgZGF0YSBhcnJpdmVkLCBhbmQgcHJvY2VzcyBhbGwgdGhlCisqCQkJZ2VuZXJhdGVkIGRvd25sb2FkIGhpbnRzIGlmIGFueSwgdW50aWwgdGhlIGZ1bmN0aW9uIHJldHVybnMgbm9uLXplcm8gdmFsdWUuIFRoZW4gdGhlIAorKgkJCWFwcGxpY2F0aW9uIGNhbiBjYWxsIEZQREZBdmFpbF9HZXREb2N1bWVudCgpIHRvIGdldCBhIGRvY3VtZW50IGhhbmRsZS4KKyovCitETExFWFBPUlQgaW50IFNURENBTEwgRlBERkF2YWlsX0lzRG9jQXZhaWwoRlBERl9BVkFJTCBhdmFpbCwgRlhfRE9XTkxPQURISU5UUyogaGludHMpOworCisvKioKKyogRnVuY3Rpb246IEZQREZBdmFpbF9HZXREb2N1bWVudAorKgkJCUdldCBkb2N1bWVudCBmcm9tIHRoZSBhdmFpbGFiaWxpdHkgcHJvdmlkZXIuCisqCisqIFBhcmFtZXRlcnM6CisqCQkJYXZhaWwJCS0JSGFuZGxlIHRvIGRvY3VtZW50IGF2YWlsYWJpbGl0eSBwcm92aWRlciByZXR1cm5lZCBieSBGUERGQXZhaWxfQ3JlYXRlCisqICAgICBwYXNzd29yZAktCU9wdGlvbmFsIHBhc3N3b3JkIGZvciBkZWNyeXB0aW5nIHRoZSBQREYgZmlsZS4KKyogUmV0dXJuIHZhbHVlOgorKgkJCUhhbmRsZSB0byB0aGUgZG9jdW1lbnQuCisqIENvbW1lbnRzOgorKgkJCUFmdGVyIEZQREZBdmFpbF9Jc0RvY0F2YWlsKCkgcmV0dXJucyBUUlVFLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiB0bworKgkJCWdldCB0aGUgZG9jdW1lbnQgaGFuZGxlLiBUbyBjbG9zZSB0aGUgZG9jdW1lbnQsIHVzZSBGUERGX0Nsb3NlRG9jdW1lbnQgZnVuY3Rpb24uCisqLworRExMRVhQT1JUIEZQREZfRE9DVU1FTlQgU1REQ0FMTCBGUERGQXZhaWxfR2V0RG9jdW1lbnQoRlBERl9BVkFJTCBhdmFpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZQREZfQllURVNUUklORyBwYXNzd29yZCk7CisKKy8qKgorKiBGdW5jdGlvbjogRlBERkF2YWlsX0dldEZpcnN0UGFnZU51bQorKgkJCUdldCBwYWdlIG51bWJlciBmb3IgdGhlIGZpcnN0IGF2YWlsYWJsZSBwYWdlIGluIGEgbGluZWFyaXplZCBQREYKKyoKKyogUGFyYW1ldGVyczoKKyoJCQlkb2MJCQktCUEgZG9jdW1lbnQgaGFuZGxlIHJldHVybmVkIGJ5IEZQREZBdmFpbF9HZXREb2N1bWVudAorKiBSZXR1cm4gVmFsdWU6CisqCQkJWmVyby1iYXNlZCBpbmRleCBmb3IgdGhlIGZpcnN0IGF2YWlsYWJsZSBwYWdlLgorKiBDb21tZW50czoKKyoJCQlGb3IgbW9zdCBsaW5lYXJpemVkIFBERnMsIHRoZSBmaXJzdCBhdmFpbGFibGUgcGFnZSB3b3VsZCBiZSBqdXN0IHRoZSBmaXJzdCBwYWdlLCBob3dldmVyLAorKgkJCXNvbWUgUERGcyBtaWdodCBtYWtlIG90aGVyIHBhZ2UgdG8gYmUgdGhlIGZpcnN0IGF2YWlsYWJsZSBwYWdlLgorKgkJCUZvciBub24tbGluZWFyaXplZCBQREYsIHRoaXMgZnVuY3Rpb24gd2lsbCBhbHdheXMgcmV0dXJuIHplcm8uCisqLworRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZBdmFpbF9HZXRGaXJzdFBhZ2VOdW0oRlBERl9ET0NVTUVOVCBkb2MpOworCisvKioKKyogRnVuY3Rpb246IEZQREZBdmFpbF9Jc1BhZ2VBdmFpbAorKgkJCUNoZWNrIHdoZXRoZXIgYSBwYWdlIGlzIHJlYWR5IGZvciBsb2FkaW5nLCBpZiBub3QsIGdldCBkb3dubG9hZCBoaW50cy4KKyoKKyogUGFyYW1ldGVyczogCisqCQkJYXZhaWwJCS0JSGFuZGxlIHRvIGRvY3VtZW50IGF2YWlsYWJpbGl0eSBwcm92aWRlciByZXR1cm5lZCBieSBGUERGQXZhaWxfQ3JlYXRlCisqCQkJcGFnZV9pbmRleAktCUluZGV4IG51bWJlciBvZiB0aGUgcGFnZS4gMCBmb3IgdGhlIGZpcnN0IHBhZ2UuCisqCQkJaGludHMJCS0JUG9pbnRlciB0byBhIGRvd25sb2FkIGhpbnRzIGludGVyZmFjZSwgcmVjZWl2aW5nIGdlbmVyYXRlZCBoaW50cworKiBSZXR1cm4gdmFsdWU6CisqCQkJTm9uLXplcm8gZm9yIHBhZ2UgaXMgZnVsbHkgYXZhaWxhYmxlLCAwIGZvciBwYWdlIG5vdCB5ZXQgYXZhaWxhYmxlLgorKiBDb21tZW50czoKKyoJCQlUaGlzIGZ1bmN0aW9uIGNhbGwgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgRlBERkF2YWlsX0dldERvY3VtZW50IGlmIGNhbGxlZC4KKyoJCQlUaGUgYXBwbGljYXRpb24gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuZXZlciBuZXcgZGF0YSBhcnJpdmVkLCBhbmQgcHJvY2VzcyBhbGwgdGhlCisqCQkJZ2VuZXJhdGVkIGRvd25sb2FkIGhpbnRzIGlmIGFueSwgdW50aWwgdGhlIGZ1bmN0aW9uIHJldHVybnMgbm9uLXplcm8gdmFsdWUuIFRoZW4gdGhlIAorKgkJCWFwcGxpY2F0aW9uIGNhbiBwZXJmb3JtIHBhZ2UgbG9hZGluZy4KKyovCitETExFWFBPUlQgaW50IFNURENBTEwgRlBERkF2YWlsX0lzUGFnZUF2YWlsKEZQREZfQVZBSUwgYXZhaWwsIGludCBwYWdlX2luZGV4LCBGWF9ET1dOTE9BREhJTlRTKiBoaW50cyk7CisKKy8qKgorKiBGdW5jdGlvbjogRlBERkF2YWlsX0lTRm9ybUF2YWlsCisqCQkJQ2hlY2sgd2hldGhlciBGb3JtIGRhdGEgaXMgcmVhZHkgZm9yIGluaXQsIGlmIG5vdCwgZ2V0IGRvd25sb2FkIGhpbnRzLgorKgorKiBQYXJhbWV0ZXJzOiAKKyoJCQlhdmFpbAkJLQlIYW5kbGUgdG8gZG9jdW1lbnQgYXZhaWxhYmlsaXR5IHByb3ZpZGVyIHJldHVybmVkIGJ5IEZQREZBdmFpbF9DcmVhdGUKKyoJCQloaW50cwkJLQlQb2ludGVyIHRvIGEgZG93bmxvYWQgaGludHMgaW50ZXJmYWNlLCByZWNlaXZpbmcgZ2VuZXJhdGVkIGhpbnRzCisqIFJldHVybiB2YWx1ZToKKyoJCQlOb24temVybyBmb3IgRm9ybSBkYXRhIGlzIGZ1bGx5IGF2YWlsYWJsZSwgMCBmb3IgRm9ybSBkYXRhIG5vdCB5ZXQgYXZhaWxhYmxlLgorKgkJCURldGFpbHM6IC0xIC0gZXJyb3IsIHRoZSBpbnB1dCBwYXJhbWV0ZXIgbm90IGNvcnJlY3QsIHN1Y2ggYXMgaGludHMgaXMgbnVsbC4KKyoJCQkJCSAwICAtIGRhdGEgbm90IGF2YWlsYWJsZQorKgkJCQkJIDEgIC0gZGF0YSBhdmFpbGFibGUKKyoJCQkJCSAyICAtIG5vIGZvcm0gZGF0YS4JCQkJCisqIENvbW1lbnRzOgorKgkJCVRoaXMgZnVuY3Rpb24gY2FsbCBiZSBjYWxsZWQgb25seSBhZnRlciBGUERGQXZhaWxfR2V0RG9jdW1lbnQgaWYgY2FsbGVkLiAKKyoJCQlUaGUgYXBwbGljYXRpb24gc2hvdWxkIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuZXZlciBuZXcgZGF0YSBhcnJpdmVkLCBhbmQgcHJvY2VzcyBhbGwgdGhlCisqCQkJZ2VuZXJhdGVkIGRvd25sb2FkIGhpbnRzIGlmIGFueSwgdW50aWwgdGhlIGZ1bmN0aW9uIHJldHVybnMgbm9uLXplcm8gdmFsdWUuIFRoZW4gdGhlIAorKgkJCWFwcGxpY2F0aW9uIGNhbiBwZXJmb3JtIHBhZ2UgbG9hZGluZy4gUmVjb21tZW5kIHRvIGNhbGwgRlBERkRPQ19Jbml0Rm9ybUZpbGxFbnZpcm91bWVudAorKgkJCWFmdGVyIHRoZSBmdW5jdGlvbiByZXR1cm5zIG5vbi16ZXJvIHZhbHVlLgorKi8KK0RMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGQXZhaWxfSXNGb3JtQXZhaWwoRlBERl9BVkFJTCBhdmFpbCwgRlhfRE9XTkxPQURISU5UUyogaGludHMpOworCisvKioKKyogRnVuY3Rpb246IEZQREZBdmFpbF9Jc0xpbmVhcml6ZWQKKyoJCQlUbyBjaGVjayB3aGV0aGVyIGEgZG9jdW1lbnQgaXMgTGluZWFyaXplZCBQREYgZmlsZS4KKyoKKyogUGFyYW1ldGVyczoKKyoJCQlhdmFpbAkJLQlIYW5kbGUgdG8gZG9jdW1lbnQgYXZhaWxhYmlsaXR5IHByb3ZpZGVyIHJldHVybmVkIGJ5IEZQREZBdmFpbF9DcmVhdGUKKyogUmV0dXJuIHZhbHVlOgorKgkJCXJldHVybiBUUlVFIG1lYW5zIHRoZSBkb2N1bWVudCBpcyBsaW5lYXJpemVkIFBERiBlbHNlIG5vdC4KKyoJCQlGU0RLX0lTX0xJTkVBUklaRUQgaXMgYSBsaW5lYXJpemUgZmlsZS4KKyoJCQlGU0RLX05PVF9MSU5FQVJJWkVEIGlzIG5vdCBhIGxpbmVhcml6ZSBmaWxlLgorKgkJCUZTREtfVU5LTk9XX0xJTkVBUklaRUQgZG9uJ3Qga25vdyB3aGV0aGVyIHRoZSBmaWxlIGlzIGEgbGluZWFyaXplIGZpbGUuCisqIENvbW1lbnRzOgorKgkJCUl0IHJldHVybiBUUlVFL0ZBTFNFIGFzIHNvb24gYXMgd2UgaGF2ZSBmaXJzdCAxSyBkYXRhLiAJSWYgdGhlIGZpbGUncyBzaXplIGxlc3MgdGhhbgorKgkJCTFLLHdlIGRvbid0IGtub3duIHdoZXRoZXIgdGhlIFBERiBpcyBhIGxpbmVhcml6ZWQgZmlsZS4KKyoKKyovCitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERkF2YWlsX0lzTGluZWFyaXplZChGUERGX0FWQUlMIGF2YWlsKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9OworI2VuZGlmCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvZnBkZl9leHQuaCBiL2ZwZGZzZGsvaW5jbHVkZS9mcGRmX2V4dC5oCmluZGV4IGE4ZjI2OGEuLjVlZmUwZTYgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9mcGRmX2V4dC5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9mcGRmX2V4dC5oCkBAIC0xLDEwOCArMSwxMDggQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0ZQREZfRVhUX0hfDQotI2RlZmluZSBfRlBERl9FWFRfSF8NCi0NCi0jaWZuZGVmIF9GUERGVklFV19IXw0KLSNpbmNsdWRlICJmcGRmdmlldy5oIg0KLSNlbmRpZg0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLWV4dGVybiAiQyIgew0KLSNlbmRpZg0KLQ0KLS8vZmxhZ3MgZm9yIHR5cGUgb2YgdW5zdXBwb3J0IG9iamVjdC4NCi0jZGVmaW5lIEZQREZfVU5TUF9ET0NfWEZBRk9STQkJCQkxDQotI2RlZmluZSBGUERGX1VOU1BfRE9DX1BPUlRBQkxFQ09MTEVDVElPTgkyDQotI2RlZmluZSBGUERGX1VOU1BfRE9DX0FUVEFDSE1FTlQJCQkzDQotI2RlZmluZSBGUERGX1VOU1BfRE9DX1NFQ1VSSVRZCQkJCTQNCi0jZGVmaW5lIEZQREZfVU5TUF9ET0NfU0hBUkVEUkVWSUVXCQkJNQ0KLSNkZWZpbmUgRlBERl9VTlNQX0RPQ19TSEFSRURGT1JNX0FDUk9CQVQJNg0KLSNkZWZpbmUgRlBERl9VTlNQX0RPQ19TSEFSRURGT1JNX0ZJTEVTWVNURU0JNw0KLSNkZWZpbmUgRlBERl9VTlNQX0RPQ19TSEFSRURGT1JNX0VNQUlMCQk4DQotI2RlZmluZSBGUERGX1VOU1BfQU5OT1RfM0RBTk5PVAkJCQkxMQ0KLSNkZWZpbmUgRlBERl9VTlNQX0FOTk9UX01PVklFCQkJCTEyDQotI2RlZmluZSBGUERGX1VOU1BfQU5OT1RfU09VTkQJCQkJMTMNCi0jZGVmaW5lIEZQREZfVU5TUF9BTk5PVF9TQ1JFRU5fTUVESUEJCTE0DQotI2RlZmluZSBGUERGX1VOU1BfQU5OT1RfU0NSRUVOX1JJQ0hNRURJQQkxNQ0KLSNkZWZpbmUgRlBERl9VTlNQX0FOTk9UX0FUVEFDSE1FTlQJCQkxNg0KLSNkZWZpbmUgRlBERl9VTlNQX0FOTk9UX1NJRwkJCQkJMTcNCi0NCi10eXBlZGVmCXN0cnVjdCBfVU5TVVBQT1JUX0lORk8NCi17DQotCS8qKg0KLQkqIFZlcnNpb24gbnVtYmVyIG9mIHRoZSBpbnRlcmZhY2UuIEN1cnJlbnRseSBtdXN0IGJlIDEuDQotCSoqLw0KLQlpbnQgdmVyc2lvbjsNCi0JDQotCS8qKiANCi0JKiBNZXRob2Q6IEZTREtfVW5TdXBwb3J0X0hhbmRsZXINCi0JKgkJCSBVblN1cHBvcnQgT2JqZWN0IHByb2Nlc3MgaGFuZGxpbmcgZnVuY3Rpb24uDQotCSogSW50ZXJmYWNlIFZlcnNpb246DQotCSoJCQkxDQotCSogSW1wbGVtZW50YXRpb24gUmVxdWlyZWQ6DQotCSoJCQlZZXMNCi0JKiBQYXJhbWV0ZXJzOg0KLQkqCQlwVGhpcwkJLQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZi4NCi0JKgkJblR5cGUJCS0JVGhlIHR5cGUgb2YgdW5zdXBwb3J0T2JqZWN0DQotCSogCVJldHVybiB2YWx1ZToNCi0JKiAJCU5vbmUuDQotCSogKi8NCi0NCi0Jdm9pZCgqRlNES19VblN1cHBvcnRfSGFuZGxlcikoX1VOU1VQUE9SVF9JTkZPKiBwVGhpcyxpbnQgblR5cGUpOw0KLX1VTlNVUFBPUlRfSU5GTzsNCi0NCi0NCi0vKioNCi0gKiBGdW5jdGlvbjogRlNES19TZXRVblNwT2JqUHJvY2Vzc0hhbmRsZXINCi0gKgkJCSBTZXR1cCBBIFVuU3VwcG9ydCBPYmplY3QgcHJvY2VzcyBoYW5kbGVyIGZvciBmb3hpdCBzZGsuIA0KLSAqIFBhcmFtZXRlcnM6DQotICoJCQl1bnNwX2luZm8JCS0JUG9pbnRlciB0byBhIFVOU1VQUE9SVF9JTkZPIHN0cnVjdHVyZS4NCi0gKiBSZXR1cm4gVmFsdWU6DQotICoJCQlUUlVFIG1lYW5zIHN1Y2Nlc3NmdWwuIEZBTFNFIG1lYW5zIGZhaWxzLiANCi0gKiovDQotDQotRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZTREtfU2V0VW5TcE9ialByb2Nlc3NIYW5kbGVyKFVOU1VQUE9SVF9JTkZPKiB1bnNwX2luZm8pOw0KLQ0KLS8vZmxhZ3MgZm9yIHBhZ2UgbW9kZS4gDQotDQotLy9Vbmtub3duIHZhbHVlDQotI2RlZmluZSBQQUdFTU9ERV9VTktPTk9XTgkJLTENCi0NCi0vL05laXRoZXIgZG9jdW1lbnQgb3V0bGluZSBub3IgdGh1bWJuYWlsIGltYWdlcyB2aXNpYmxlDQotI2RlZmluZSBQQUdFTU9ERV9VU0VOT05FCQkwDQotDQotLy9Eb2N1bWVudCBvdXRsaW5lIHZpc2libGUNCi0jZGVmaW5lIFBBR0VNT0RFX1VTRU9VVExJTkVTCTENCi0NCi0vL1RodW1ibmlhbCBpbWFnZXMgdmlzaWJsZQ0KLSNkZWZpbmUgUEFHRU1PREVfVVNFVEhVTUJTCQkyDQotDQotLy9GdWxsLXNjcmVlbiBtb2RlLCB3aXRoIG5vIG1lbnUgYmFyLCB3aW5kb3cgY29udHJvbHMsIG9yIGFueSBvdGhlciB3aW5kb3cgdmlzaWJsZQ0KLSNkZWZpbmUgUEFHRU1PREVfRlVMTFNDUkVFTgkJMw0KLQ0KLS8vT3B0aW9uYWwgY29udGVudCBncm91cCBwYW5lbCB2aXNpYmxlDQotI2RlZmluZSBQQUdFTU9ERV9VU0VPQwkJCTQNCi0NCi0vL0F0dGFjaG1lbnRzIHBhbmVsIHZpc2libGUNCi0jZGVmaW5lIFBBR0VNT0RFX1VTRUFUVEFDSE1FTlRTCTUNCi0NCi0NCi0vKioNCi0gKiBGdW5jdGlvbjogRlBERkRvY19HZXRQYWdlTW9kZQ0KLSAqCQkJIEdldCB0aGUgZG9jdW1lbnQncyBQYWdlTW9kZShIb3cgdGhlIGRvY3VtZW50IHNob3VsZCBiZSBkaXNwbGF5ZWQgd2hlbiBvcGVuZWQpIA0KLSAqIFBhcmFtZXRlcnM6DQotICoJCQlkb2MJCS0JSGFuZGxlIHRvIGRvY3VtZW50LiBSZXR1cm5lZCBieSBGUERGX0xvYWREb2N1bWVudCBmdW5jdGlvbi4NCi0gKiBSZXR1cm4gVmFsdWU6DQotICoJCQlUaGUgZmxhZ3MgZm9yIHBhZ2UgbW9kZS4NCi0gKiovDQotRExMRVhQT1JUIGludCBGUERGRG9jX0dldFBhZ2VNb2RlKEZQREZfRE9DVU1FTlQgZG9jdW1lbnQpOw0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX07DQotI2VuZGlmDQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlBERl9FWFRfSF8KKyNkZWZpbmUgX0ZQREZfRVhUX0hfCisKKyNpZm5kZWYgX0ZQREZWSUVXX0hfCisjaW5jbHVkZSAiZnBkZnZpZXcuaCIKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8vZmxhZ3MgZm9yIHR5cGUgb2YgdW5zdXBwb3J0IG9iamVjdC4KKyNkZWZpbmUgRlBERl9VTlNQX0RPQ19YRkFGT1JNCQkJCTEKKyNkZWZpbmUgRlBERl9VTlNQX0RPQ19QT1JUQUJMRUNPTExFQ1RJT04JMgorI2RlZmluZSBGUERGX1VOU1BfRE9DX0FUVEFDSE1FTlQJCQkzCisjZGVmaW5lIEZQREZfVU5TUF9ET0NfU0VDVVJJVFkJCQkJNAorI2RlZmluZSBGUERGX1VOU1BfRE9DX1NIQVJFRFJFVklFVwkJCTUKKyNkZWZpbmUgRlBERl9VTlNQX0RPQ19TSEFSRURGT1JNX0FDUk9CQVQJNgorI2RlZmluZSBGUERGX1VOU1BfRE9DX1NIQVJFREZPUk1fRklMRVNZU1RFTQk3CisjZGVmaW5lIEZQREZfVU5TUF9ET0NfU0hBUkVERk9STV9FTUFJTAkJOAorI2RlZmluZSBGUERGX1VOU1BfQU5OT1RfM0RBTk5PVAkJCQkxMQorI2RlZmluZSBGUERGX1VOU1BfQU5OT1RfTU9WSUUJCQkJMTIKKyNkZWZpbmUgRlBERl9VTlNQX0FOTk9UX1NPVU5ECQkJCTEzCisjZGVmaW5lIEZQREZfVU5TUF9BTk5PVF9TQ1JFRU5fTUVESUEJCTE0CisjZGVmaW5lIEZQREZfVU5TUF9BTk5PVF9TQ1JFRU5fUklDSE1FRElBCTE1CisjZGVmaW5lIEZQREZfVU5TUF9BTk5PVF9BVFRBQ0hNRU5UCQkJMTYKKyNkZWZpbmUgRlBERl9VTlNQX0FOTk9UX1NJRwkJCQkJMTcKKwordHlwZWRlZglzdHJ1Y3QgX1VOU1VQUE9SVF9JTkZPCit7CisJLyoqCisJKiBWZXJzaW9uIG51bWJlciBvZiB0aGUgaW50ZXJmYWNlLiBDdXJyZW50bHkgbXVzdCBiZSAxLgorCSoqLworCWludCB2ZXJzaW9uOworCQorCS8qKiAKKwkqIE1ldGhvZDogRlNES19VblN1cHBvcnRfSGFuZGxlcgorCSoJCQkgVW5TdXBwb3J0IE9iamVjdCBwcm9jZXNzIGhhbmRsaW5nIGZ1bmN0aW9uLgorCSogSW50ZXJmYWNlIFZlcnNpb246CisJKgkJCTEKKwkqIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOgorCSoJCQlZZXMKKwkqIFBhcmFtZXRlcnM6CisJKgkJcFRoaXMJCS0JUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBpdHNlbGYuCisJKgkJblR5cGUJCS0JVGhlIHR5cGUgb2YgdW5zdXBwb3J0T2JqZWN0CisJKiAJUmV0dXJuIHZhbHVlOgorCSogCQlOb25lLgorCSogKi8KKworCXZvaWQoKkZTREtfVW5TdXBwb3J0X0hhbmRsZXIpKF9VTlNVUFBPUlRfSU5GTyogcFRoaXMsaW50IG5UeXBlKTsKK31VTlNVUFBPUlRfSU5GTzsKKworCisvKioKKyAqIEZ1bmN0aW9uOiBGU0RLX1NldFVuU3BPYmpQcm9jZXNzSGFuZGxlcgorICoJCQkgU2V0dXAgQSBVblN1cHBvcnQgT2JqZWN0IHByb2Nlc3MgaGFuZGxlciBmb3IgZm94aXQgc2RrLiAKKyAqIFBhcmFtZXRlcnM6CisgKgkJCXVuc3BfaW5mbwkJLQlQb2ludGVyIHRvIGEgVU5TVVBQT1JUX0lORk8gc3RydWN0dXJlLgorICogUmV0dXJuIFZhbHVlOgorICoJCQlUUlVFIG1lYW5zIHN1Y2Nlc3NmdWwuIEZBTFNFIG1lYW5zIGZhaWxzLiAKKyAqKi8KKworRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZTREtfU2V0VW5TcE9ialByb2Nlc3NIYW5kbGVyKFVOU1VQUE9SVF9JTkZPKiB1bnNwX2luZm8pOworCisvL2ZsYWdzIGZvciBwYWdlIG1vZGUuIAorCisvL1Vua25vd24gdmFsdWUKKyNkZWZpbmUgUEFHRU1PREVfVU5LT05PV04JCS0xCisKKy8vTmVpdGhlciBkb2N1bWVudCBvdXRsaW5lIG5vciB0aHVtYm5haWwgaW1hZ2VzIHZpc2libGUKKyNkZWZpbmUgUEFHRU1PREVfVVNFTk9ORQkJMAorCisvL0RvY3VtZW50IG91dGxpbmUgdmlzaWJsZQorI2RlZmluZSBQQUdFTU9ERV9VU0VPVVRMSU5FUwkxCisKKy8vVGh1bWJuaWFsIGltYWdlcyB2aXNpYmxlCisjZGVmaW5lIFBBR0VNT0RFX1VTRVRIVU1CUwkJMgorCisvL0Z1bGwtc2NyZWVuIG1vZGUsIHdpdGggbm8gbWVudSBiYXIsIHdpbmRvdyBjb250cm9scywgb3IgYW55IG90aGVyIHdpbmRvdyB2aXNpYmxlCisjZGVmaW5lIFBBR0VNT0RFX0ZVTExTQ1JFRU4JCTMKKworLy9PcHRpb25hbCBjb250ZW50IGdyb3VwIHBhbmVsIHZpc2libGUKKyNkZWZpbmUgUEFHRU1PREVfVVNFT0MJCQk0CisKKy8vQXR0YWNobWVudHMgcGFuZWwgdmlzaWJsZQorI2RlZmluZSBQQUdFTU9ERV9VU0VBVFRBQ0hNRU5UUwk1CisKKworLyoqCisgKiBGdW5jdGlvbjogRlBERkRvY19HZXRQYWdlTW9kZQorICoJCQkgR2V0IHRoZSBkb2N1bWVudCdzIFBhZ2VNb2RlKEhvdyB0aGUgZG9jdW1lbnQgc2hvdWxkIGJlIGRpc3BsYXllZCB3aGVuIG9wZW5lZCkgCisgKiBQYXJhbWV0ZXJzOgorICoJCQlkb2MJCS0JSGFuZGxlIHRvIGRvY3VtZW50LiBSZXR1cm5lZCBieSBGUERGX0xvYWREb2N1bWVudCBmdW5jdGlvbi4KKyAqIFJldHVybiBWYWx1ZToKKyAqCQkJVGhlIGZsYWdzIGZvciBwYWdlIG1vZGUuCisgKiovCitETExFWFBPUlQgaW50IEZQREZEb2NfR2V0UGFnZU1vZGUoRlBERl9ET0NVTUVOVCBkb2N1bWVudCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfTsKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvZnBkZl9mbGF0dGVuLmggYi9mcGRmc2RrL2luY2x1ZGUvZnBkZl9mbGF0dGVuLmgKaW5kZXggMjZlMzI0ZC4uMmU5ZTUwOSAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2ZwZGZfZmxhdHRlbi5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9mcGRmX2ZsYXR0ZW4uaApAQCAtMSw0MiArMSw0MiBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlBERl9GTEFUVEVOX0hfDQotI2RlZmluZSBfRlBERl9GTEFUVEVOX0hfDQotCQ0KLSNpbmNsdWRlICJmcGRmdmlldy5oIg0KLQ0KLSNkZWZpbmUgRkxBVFRFTl9GQUlMCQkJMAkvLyBGbGF0dGVuIG9wZXJhdGlvbiBmYWlsZWQuDQotI2RlZmluZSBGTEFUVEVOX1NVQ0NFU1MJCQkxCS8vIEZsYXR0ZW4gb3BlcmF0aW9uIHN1Y2NlZWQuDQotI2RlZmluZSBGTEFUVEVOX05PVElOR1RPRE8JCTIJLy8gVGhlcmUgaXMgbm90aGluZyBjYW4gYmUgZmxhdHRlbi4NCi0JDQotI2lmZGVmIF9fY3BsdXNwbHVzDQotZXh0ZXJuICJDIiB7DQotI2VuZGlmDQotDQotI2RlZmluZSBGTEFUX05PUk1BTERJU1BMQVkgICAgIDANCi0jZGVmaW5lIEZMQVRfUFJJTlQgICAgICAgICAgICAgMSAgICANCi0JLy9GdW5jdGlvbjogRlBERlBhZ2VfRmxhdHRlbg0KLQ0KLQkvLwkJCUZsYXQgYSBwZGYgcGFnZSxhbm5vdGF0aW9ucyBvciBmb3JtIGZpZWxkcyB3aWxsIGJlY29tZSBwYXJ0IG9mIHRoZSBwYWdlIGNvbnRlbnRzLg0KLQkvL1BhcmFtZXRlcnM6DQotDQotCS8vCQkJcGFnZSAgLSBIYW5kbGUgdG8gdGhlIHBhZ2UuIFJldHVybmVkIGJ5IEZQREZfTG9hZFBhZ2UgZnVuY3Rpb24uDQotCS8vCQkJbkZsYWcgLSB0aGUgZmxhZyBmb3IgdGhlIHVzZSBvZiBmbGF0dGVuIHJlc3VsdC4gWmVybyBmb3Igbm9ybWFsIGRpc3BsYXksIDEgZm9yIHByaW50Lg0KLQkvL1JldHVybiB2YWx1ZToNCi0JLy8JCQlUaGUgcmVzdWx0IGZsYWcgb2YgdGhlIGZ1bmN0aW9uLCBTZWUgZmxhZ3MgYWJvdmUgKCBGTEFUVEVOX0ZBSUwsIEZMQVRURU5fU1VDQ0VTUywgRkxBVFRFTl9OT1RJTkdUT0RPICkuDQotCS8vDQotCS8vIENvbW1lbnRzOiBDdXJyZW50IHZlcnNpb24gYWxsIGZhaWxzIHJldHVybiB6ZXJvLiBJZiBuZWNlc3Nhcnkgd2Ugd2lsbCBhc3NpZ24gZGlmZmVyZW50IHZhbHVlDQotCS8vCQkJdG8gaW5kaWNhdGUgZGlmZmVyZW50IGZhaWwgcmVhc29uLg0KLQkvLyANCi0JRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZQYWdlX0ZsYXR0ZW4oIEZQREZfUEFHRSBwYWdlLCBpbnQgbkZsYWcpOw0KLQkJDQotCQkNCi0jaWZkZWYgX19jcGx1c3BsdXMNCi19Ow0KLSNlbmRpZg0KLQ0KLSNlbmRpZiAvL19GUERGX0ZMQVRURU5fSF8NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9GUERGX0ZMQVRURU5fSF8KKyNkZWZpbmUgX0ZQREZfRkxBVFRFTl9IXworCQorI2luY2x1ZGUgImZwZGZ2aWV3LmgiCisKKyNkZWZpbmUgRkxBVFRFTl9GQUlMCQkJMAkvLyBGbGF0dGVuIG9wZXJhdGlvbiBmYWlsZWQuCisjZGVmaW5lIEZMQVRURU5fU1VDQ0VTUwkJCTEJLy8gRmxhdHRlbiBvcGVyYXRpb24gc3VjY2VlZC4KKyNkZWZpbmUgRkxBVFRFTl9OT1RJTkdUT0RPCQkyCS8vIFRoZXJlIGlzIG5vdGhpbmcgY2FuIGJlIGZsYXR0ZW4uCisJCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgRkxBVF9OT1JNQUxESVNQTEFZICAgICAwCisjZGVmaW5lIEZMQVRfUFJJTlQgICAgICAgICAgICAgMSAgICAKKwkvL0Z1bmN0aW9uOiBGUERGUGFnZV9GbGF0dGVuCisKKwkvLwkJCUZsYXQgYSBwZGYgcGFnZSxhbm5vdGF0aW9ucyBvciBmb3JtIGZpZWxkcyB3aWxsIGJlY29tZSBwYXJ0IG9mIHRoZSBwYWdlIGNvbnRlbnRzLgorCS8vUGFyYW1ldGVyczoKKworCS8vCQkJcGFnZSAgLSBIYW5kbGUgdG8gdGhlIHBhZ2UuIFJldHVybmVkIGJ5IEZQREZfTG9hZFBhZ2UgZnVuY3Rpb24uCisJLy8JCQluRmxhZyAtIHRoZSBmbGFnIGZvciB0aGUgdXNlIG9mIGZsYXR0ZW4gcmVzdWx0LiBaZXJvIGZvciBub3JtYWwgZGlzcGxheSwgMSBmb3IgcHJpbnQuCisJLy9SZXR1cm4gdmFsdWU6CisJLy8JCQlUaGUgcmVzdWx0IGZsYWcgb2YgdGhlIGZ1bmN0aW9uLCBTZWUgZmxhZ3MgYWJvdmUgKCBGTEFUVEVOX0ZBSUwsIEZMQVRURU5fU1VDQ0VTUywgRkxBVFRFTl9OT1RJTkdUT0RPICkuCisJLy8KKwkvLyBDb21tZW50czogQ3VycmVudCB2ZXJzaW9uIGFsbCBmYWlscyByZXR1cm4gemVyby4gSWYgbmVjZXNzYXJ5IHdlIHdpbGwgYXNzaWduIGRpZmZlcmVudCB2YWx1ZQorCS8vCQkJdG8gaW5kaWNhdGUgZGlmZmVyZW50IGZhaWwgcmVhc29uLgorCS8vIAorCURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGUGFnZV9GbGF0dGVuKCBGUERGX1BBR0UgcGFnZSwgaW50IG5GbGFnKTsKKwkJCisJCQorI2lmZGVmIF9fY3BsdXNwbHVzCit9OworI2VuZGlmCisKKyNlbmRpZiAvL19GUERGX0ZMQVRURU5fSF8KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9mcGRmX2Z3bGV2ZW50LmggYi9mcGRmc2RrL2luY2x1ZGUvZnBkZl9md2xldmVudC5oCmluZGV4IGNmMzRjMjEuLmY3N2U3ZTMgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9mcGRmX2Z3bGV2ZW50LmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2ZwZGZfZndsZXZlbnQuaApAQCAtMSwyODYgKzEsMjg2IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GV0xfRVZFTlRfSA0KLSNkZWZpbmUgX0ZXTF9FVkVOVF9IDQotDQotI2luY2x1ZGUgImZwZGZ2aWV3LmgiDQotDQotdHlwZWRlZiBpbnQJCQlGUERGX0lOVDMyOw0KLXR5cGVkZWYgdW5zaWduZWQgaW50IEZQREZfVUlOVDMyOw0KLXR5cGVkZWYgZmxvYXQJCUZQREZfRkxPQVQ7DQotLy9ldmVudCB0eXBlDQotdHlwZWRlZiBlbnVtDQotew0KLQlGV0xfRVZFTlRUWVBFX01vdXNlID0gMAksDQotCUZXTF9FVkVOVFRZUEVfTW91c2VXaGVlbCwJDQotCUZXTF9FVkVOVFRZUEVfS2V5CQksDQotfSBGV0xfRVZFTlRUWVBFOw0KLQ0KLS8va2V5IGZsYWcNCi10eXBlZGVmIGVudW0NCi17ICAgIA0KLQlGV0xfRVZFTlRGTEFHX1NoaWZ0S2V5CQkJPSAxIDw8IDAsICAgIA0KLQlGV0xfRVZFTlRGTEFHX0NvbnRyb2xLZXkJCT0gMSA8PCAxLA0KLSAgICBGV0xfRVZFTlRGTEFHX0FsdEtleQkJCT0gMSA8PCAyLA0KLSAgICBGV0xfRVZFTlRGTEFHX01ldGFLZXkJCQk9IDEgPDwgMywNCi0gICAgRldMX0VWRU5URkxBR19LZXlQYWQJCQk9IDEgPDwgNCwNCi0gICAgRldMX0VWRU5URkxBR19BdXRvUmVwZWF0CQk9IDEgPDwgNSwNCi0gICAgRldMX0VWRU5URkxBR19MZWZ0QnV0dG9uRG93bgk9IDEgPDwgNiwNCi0gICAgRldMX0VWRU5URkxBR19NaWRkbGVCdXR0b25Eb3duCT0gMSA8PCA3LA0KLSAgICBGV0xfRVZFTlRGTEFHX1JpZ2h0QnV0dG9uRG93bgk9IDEgPDwgOCwgDQotfSBGV0xfRVZFTlRGTEFHOyAgDQotDQotLy8gTW91c2UgbWVzc2FnZSBjb21tYW5kDQotdHlwZWRlZiBlbnVtDQotew0KLQlGV0xfRVZFTlRNT1VTRUNNRF9MQnV0dG9uRG93biA9CTEJLAkNCi0JRldMX0VWRU5UTU9VU0VDTURfTEJ1dHRvblVwCQkJLA0KLQlGV0xfRVZFTlRNT1VTRUNNRF9MQnV0dG9uRGJsQ2xrCQksDQotCUZXTF9FVkVOVE1PVVNFQ01EX1JCdXR0b25Eb3duCQksDQotCUZXTF9FVkVOVE1PVVNFQ01EX1JCdXR0b25VcAkJCSwNCi0JRldMX0VWRU5UTU9VU0VDTURfUkJ1dHRvbkRibENsawkJLA0KLQlGV0xfRVZFTlRNT1VTRUNNRF9NQnV0dG9uRG93bgkJLA0KLQlGV0xfRVZFTlRNT1VTRUNNRF9NQnV0dG9uVXAJCQksDQotCUZXTF9FVkVOVE1PVVNFQ01EX01CdXR0b25EYmxDbGsJCSwNCi0JRldMX0VWRU5UTU9VU0VDTURfTW91c2VNb3ZlCQkJLA0KLQlGV0xfRVZFTlRNT1VTRUNNRF9Nb3VzZUVudGVyCQksDQotCUZXTF9FVkVOVE1PVVNFQ01EX01vdXNlSG92ZXIJCSwNCi0JRldMX0VWRU5UTU9VU0VDTURfTW91c2VMZWF2ZQkJLA0KLX0gRldMX0VWRU5UX01PVVNFQ01EOw0KLQ0KLS8vbW91c2UgZXZlbnQNCi1zdHJ1Y3QgRldMX0VWRU5UX01PVVNFIA0KLXsNCi0JRlBERl9VSU5UMzIgY29tbWFuZDsNCi0JRlBERl9EV09SRCBmbGFnOw0KLQlGUERGX0ZMT0FUIHg7DQotCUZQREZfRkxPQVQgeTsNCi19Ow0KLQ0KLS8vbW91c2Ugd2hlZWwNCi1zdHJ1Y3QgRldMX0VWRU5UX01PVVNFV0hFRUwgDQotewkNCi0JRlBERl9EV09SRCBmbGFnOw0KLQlGUERGX0ZMT0FUIHg7DQotCUZQREZfRkxPQVQgeTsNCi0JRlBERl9GTE9BVCBkZWx0YVg7DQotICAgIEZQREZfRkxPQVQgZGVsdGFZOyAgDQotfTsNCi0NCi0vL3ZpcnR1YWwga2V5Y29kZQ0KLXR5cGVkZWYgZW51bSANCi17DQotICBGV0xfVktFWV9CYWNrCQk9IDB4MDgsDQotICBGV0xfVktFWV9UYWIJCT0gMHgwOSwNCi0gIEZXTF9WS0VZX0NsZWFyCT0gMHgwQywNCi0gIEZXTF9WS0VZX1JldHVybgk9IDB4MEQsDQotICBGV0xfVktFWV9TaGlmdAk9IDB4MTAsDQotICBGV0xfVktFWV9Db250cm9sCT0gMHgxMSwNCi0gIEZXTF9WS0VZX01lbnUJCT0gMHgxMiwNCi0gIEZXTF9WS0VZX1BhdXNlCT0gMHgxMywNCi0gIEZXTF9WS0VZX0NhcGl0YWwJPSAweDE0LA0KLSAgRldMX1ZLRVlfS2FuYQkJPSAweDE1LA0KLSAgRldMX1ZLRVlfSGFuZ3VsCT0gMHgxNSwNCi0gIEZXTF9WS0VZX0p1bmphCT0gMHgxNywNCi0gIEZXTF9WS0VZX0ZpbmFsCT0gMHgxOCwNCi0gIEZXTF9WS0VZX0hhbmphCT0gMHgxOSwNCi0gIEZXTF9WS0VZX0thbmppCT0gMHgxOSwNCi0gIEZXTF9WS0VZX0VzY2FwZQk9IDB4MUIsDQotICBGV0xfVktFWV9Db252ZXJ0CT0gMHgxQywNCi0gIEZXTF9WS0VZX05vbkNvbnZlcnQgPSAweDFELA0KLSAgRldMX1ZLRVlfQWNjZXB0CSA9IDB4MUUsDQotICBGV0xfVktFWV9Nb2RlQ2hhbmdlID0gMHgxRiwNCi0gIEZXTF9WS0VZX1NwYWNlID0gMHgyMCwNCi0gIEZXTF9WS0VZX1ByaW9yID0gMHgyMSwNCi0gIEZXTF9WS0VZX05leHQgPSAweDIyLA0KLSAgRldMX1ZLRVlfRW5kID0gMHgyMywNCi0gIEZXTF9WS0VZX0hvbWUgPSAweDI0LA0KLSAgRldMX1ZLRVlfTGVmdCA9IDB4MjUsDQotICBGV0xfVktFWV9VcCA9IDB4MjYsDQotICBGV0xfVktFWV9SaWdodCA9IDB4MjcsDQotICBGV0xfVktFWV9Eb3duID0gMHgyOCwNCi0gIEZXTF9WS0VZX1NlbGVjdCA9IDB4MjksDQotICBGV0xfVktFWV9QcmludCA9IDB4MkEsDQotICBGV0xfVktFWV9FeGVjdXRlID0gMHgyQiwNCi0gIEZXTF9WS0VZX1NuYXBzaG90ID0gMHgyQywNCi0gIEZXTF9WS0VZX0luc2VydCA9IDB4MkQsDQotICBGV0xfVktFWV9EZWxldGUgPSAweDJFLA0KLSAgRldMX1ZLRVlfSGVscCA9IDB4MkYsDQotICBGV0xfVktFWV8wID0gMHgzMCwNCi0gIEZXTF9WS0VZXzEgPSAweDMxLA0KLSAgRldMX1ZLRVlfMiA9IDB4MzIsDQotICBGV0xfVktFWV8zID0gMHgzMywNCi0gIEZXTF9WS0VZXzQgPSAweDM0LA0KLSAgRldMX1ZLRVlfNSA9IDB4MzUsDQotICBGV0xfVktFWV82ID0gMHgzNiwNCi0gIEZXTF9WS0VZXzcgPSAweDM3LA0KLSAgRldMX1ZLRVlfOCA9IDB4MzgsDQotICBGV0xfVktFWV85ID0gMHgzOSwNCi0gIEZXTF9WS0VZX0EgPSAweDQxLA0KLSAgRldMX1ZLRVlfQiA9IDB4NDIsDQotICBGV0xfVktFWV9DID0gMHg0MywNCi0gIEZXTF9WS0VZX0QgPSAweDQ0LA0KLSAgRldMX1ZLRVlfRSA9IDB4NDUsDQotICBGV0xfVktFWV9GID0gMHg0NiwNCi0gIEZXTF9WS0VZX0cgPSAweDQ3LA0KLSAgRldMX1ZLRVlfSCA9IDB4NDgsDQotICBGV0xfVktFWV9JID0gMHg0OSwNCi0gIEZXTF9WS0VZX0ogPSAweDRBLA0KLSAgRldMX1ZLRVlfSyA9IDB4NEIsDQotICBGV0xfVktFWV9MID0gMHg0QywNCi0gIEZXTF9WS0VZX00gPSAweDRELA0KLSAgRldMX1ZLRVlfTiA9IDB4NEUsDQotICBGV0xfVktFWV9PID0gMHg0RiwNCi0gIEZXTF9WS0VZX1AgPSAweDUwLA0KLSAgRldMX1ZLRVlfUSA9IDB4NTEsDQotICBGV0xfVktFWV9SID0gMHg1MiwNCi0gIEZXTF9WS0VZX1MgPSAweDUzLA0KLSAgRldMX1ZLRVlfVCA9IDB4NTQsDQotICBGV0xfVktFWV9VID0gMHg1NSwNCi0gIEZXTF9WS0VZX1YgPSAweDU2LA0KLSAgRldMX1ZLRVlfVyA9IDB4NTcsDQotICBGV0xfVktFWV9YID0gMHg1OCwNCi0gIEZXTF9WS0VZX1kgPSAweDU5LA0KLSAgRldMX1ZLRVlfWiA9IDB4NUEsDQotICBGV0xfVktFWV9MV2luID0gMHg1QiwNCi0gIEZXTF9WS0VZX0NvbW1hbmQgPSAweDVCLA0KLSAgRldMX1ZLRVlfUldpbiA9IDB4NUMsDQotICBGV0xfVktFWV9BcHBzID0gMHg1RCwNCi0gIEZXTF9WS0VZX1NsZWVwID0gMHg1RiwNCi0gIEZXTF9WS0VZX051bVBhZDAgPSAweDYwLA0KLSAgRldMX1ZLRVlfTnVtUGFkMSA9IDB4NjEsDQotICBGV0xfVktFWV9OdW1QYWQyID0gMHg2MiwNCi0gIEZXTF9WS0VZX051bVBhZDMgPSAweDYzLA0KLSAgRldMX1ZLRVlfTnVtUGFkNCA9IDB4NjQsDQotICBGV0xfVktFWV9OdW1QYWQ1ID0gMHg2NSwNCi0gIEZXTF9WS0VZX051bVBhZDYgPSAweDY2LA0KLSAgRldMX1ZLRVlfTnVtUGFkNyA9IDB4NjcsDQotICBGV0xfVktFWV9OdW1QYWQ4ID0gMHg2OCwNCi0gIEZXTF9WS0VZX051bVBhZDkgPSAweDY5LA0KLSAgRldMX1ZLRVlfTXVsdGlwbHkgPSAweDZBLA0KLSAgRldMX1ZLRVlfQWRkID0gMHg2QiwNCi0gIEZXTF9WS0VZX1NlcGFyYXRvciA9IDB4NkMsDQotICBGV0xfVktFWV9TdWJ0cmFjdCA9IDB4NkQsDQotICBGV0xfVktFWV9EZWNpbWFsID0gMHg2RSwNCi0gIEZXTF9WS0VZX0RpdmlkZSA9IDB4NkYsDQotICBGV0xfVktFWV9GMSA9IDB4NzAsDQotICBGV0xfVktFWV9GMiA9IDB4NzEsDQotICBGV0xfVktFWV9GMyA9IDB4NzIsDQotICBGV0xfVktFWV9GNCA9IDB4NzMsDQotICBGV0xfVktFWV9GNSA9IDB4NzQsDQotICBGV0xfVktFWV9GNiA9IDB4NzUsDQotICBGV0xfVktFWV9GNyA9IDB4NzYsDQotICBGV0xfVktFWV9GOCA9IDB4NzcsDQotICBGV0xfVktFWV9GOSA9IDB4NzgsDQotICBGV0xfVktFWV9GMTAgPSAweDc5LA0KLSAgRldMX1ZLRVlfRjExID0gMHg3QSwNCi0gIEZXTF9WS0VZX0YxMiA9IDB4N0IsDQotICBGV0xfVktFWV9GMTMgPSAweDdDLA0KLSAgRldMX1ZLRVlfRjE0ID0gMHg3RCwNCi0gIEZXTF9WS0VZX0YxNSA9IDB4N0UsDQotICBGV0xfVktFWV9GMTYgPSAweDdGLA0KLSAgRldMX1ZLRVlfRjE3ID0gMHg4MCwNCi0gIEZXTF9WS0VZX0YxOCA9IDB4ODEsDQotICBGV0xfVktFWV9GMTkgPSAweDgyLA0KLSAgRldMX1ZLRVlfRjIwID0gMHg4MywNCi0gIEZXTF9WS0VZX0YyMSA9IDB4ODQsDQotICBGV0xfVktFWV9GMjIgPSAweDg1LA0KLSAgRldMX1ZLRVlfRjIzID0gMHg4NiwNCi0gIEZXTF9WS0VZX0YyNCA9IDB4ODcsDQotICBGV0xfVktFWV9OdW5Mb2NrID0gMHg5MCwNCi0gIEZXTF9WS0VZX1Njcm9sbCA9IDB4OTEsDQotICBGV0xfVktFWV9MU2hpZnQgPSAweEEwLA0KLSAgRldMX1ZLRVlfUlNoaWZ0ID0gMHhBMSwNCi0gIEZXTF9WS0VZX0xDb250cm9sID0gMHhBMiwNCi0gIEZXTF9WS0VZX1JDb250cm9sID0gMHhBMywNCi0gIEZXTF9WS0VZX0xNZW51ID0gMHhBNCwNCi0gIEZXTF9WS0VZX1JNZW51ID0gMHhBNSwNCi0gIEZXTF9WS0VZX0JST1dTRVJfQmFjayA9IDB4QTYsDQotICBGV0xfVktFWV9CUk9XU0VSX0ZvcndhcmQgPSAweEE3LA0KLSAgRldMX1ZLRVlfQlJPV1NFUl9SZWZyZXNoID0gMHhBOCwNCi0gIEZXTF9WS0VZX0JST1dTRVJfU3RvcCA9IDB4QTksDQotICBGV0xfVktFWV9CUk9XU0VSX1NlYXJjaCA9IDB4QUEsDQotICBGV0xfVktFWV9CUk9XU0VSX0Zhdm9yaXRlcyA9IDB4QUIsDQotICBGV0xfVktFWV9CUk9XU0VSX0hvbWUgPSAweEFDLA0KLSAgRldMX1ZLRVlfVk9MVU1FX011dGUgPSAweEFELA0KLSAgRldMX1ZLRVlfVk9MVU1FX0Rvd24gPSAweEFFLA0KLSAgRldMX1ZLRVlfVk9MVU1FX1VwID0gMHhBRiwNCi0gIEZXTF9WS0VZX01FRElBX05FWFRfVHJhY2sgPSAweEIwLA0KLSAgRldMX1ZLRVlfTUVESUFfUFJFVl9UcmFjayA9IDB4QjEsDQotICBGV0xfVktFWV9NRURJQV9TdG9wID0gMHhCMiwNCi0gIEZXTF9WS0VZX01FRElBX1BMQVlfUGF1c2UgPSAweEIzLA0KLSAgRldMX1ZLRVlfTUVESUFfTEFVTkNIX01haWwgPSAweEI0LA0KLSAgRldMX1ZLRVlfTUVESUFfTEFVTkNIX01FRElBX1NlbGVjdCA9IDB4QjUsDQotICBGV0xfVktFWV9NRURJQV9MQVVOQ0hfQVBQMSA9IDB4QjYsDQotICBGV0xfVktFWV9NRURJQV9MQVVOQ0hfQVBQMiA9IDB4QjcsDQotICBGV0xfVktFWV9PRU1fMSA9IDB4QkEsDQotICBGV0xfVktFWV9PRU1fUGx1cyA9IDB4QkIsDQotICBGV0xfVktFWV9PRU1fQ29tbWEgPSAweEJDLA0KLSAgRldMX1ZLRVlfT0VNX01pbnVzID0gMHhCRCwNCi0gIEZXTF9WS0VZX09FTV9QZXJpb2QgPSAweEJFLA0KLSAgRldMX1ZLRVlfT0VNXzIgPSAweEJGLA0KLSAgRldMX1ZLRVlfT0VNXzMgPSAweEMwLA0KLSAgRldMX1ZLRVlfT0VNXzQgPSAweERCLA0KLSAgRldMX1ZLRVlfT0VNXzUgPSAweERDLA0KLSAgRldMX1ZLRVlfT0VNXzYgPSAweERELA0KLSAgRldMX1ZLRVlfT0VNXzcgPSAweERFLA0KLSAgRldMX1ZLRVlfT0VNXzggPSAweERGLA0KLSAgRldMX1ZLRVlfT0VNXzEwMiA9IDB4RTIsDQotICBGV0xfVktFWV9Qcm9jZXNzS2V5ID0gMHhFNSwNCi0gIEZXTF9WS0VZX1BhY2tldCA9IDB4RTcsDQotICBGV0xfVktFWV9BdHRuID0gMHhGNiwNCi0gIEZXTF9WS0VZX0Nyc2VsID0gMHhGNywNCi0gIEZXTF9WS0VZX0V4c2VsID0gMHhGOCwNCi0gIEZXTF9WS0VZX0VyZW9mID0gMHhGOSwNCi0gIEZXTF9WS0VZX1BsYXkgPSAweEZBLA0KLSAgRldMX1ZLRVlfWm9vbSA9IDB4RkIsDQotICBGV0xfVktFWV9Ob05hbWUgPSAweEZDLA0KLSAgRldMX1ZLRVlfUEExID0gMHhGRCwNCi0gIEZXTF9WS0VZX09FTV9DbGVhciA9IDB4RkUsDQotICBGV0xfVktFWV9Vbmtub3duID0gMCwNCi19IEZXTF9WS0VZQ09ERTsNCi0NCi0vL2tleSBldmVudCBjb21tYW5kDQotdHlwZWRlZiBlbnVtDQotew0KLQlGV0xfRVZFTlRLRVlDTURfS2V5RG93biA9IDEJLA0KLQlGV0xfRVZFTlRLRVlDTURfS2V5VXAJCSwNCi0JRldMX0VWRU5US0VZQ01EX0NoYXIJCSwNCi19IEZXTF9FVkVOVEtFWUNNRDsNCi0NCi0vL2tleSBldmVudA0KLXN0cnVjdCBGV0xfRVZFTlRfS0VZDQotew0KLQlGUERGX1VJTlQzMiBjb21tYW5kOw0KLQlGUERGX0RXT1JEIGZsYWc7DQotCXVuaW9uDQotCXsNCi0JCS8vVmlydHVhbCBrZXkgY29kZS4NCi0JCUZQREZfVUlOVDMyIHZrY29kZTsNCi0JCS8vQ2hhcmFjdGVyIGNvZGUuDQotCQlGUERGX0RXT1JEIGNoYXJjb2RlOw0KLQl9Y29kZTsNCi19Ow0KLQ0KLS8vZXZlbnQgdHlwZQ0KLXN0cnVjdCBGV0xfRVZFTlQgDQotew0KLQkvL3N0cnVjdHVyZSBzaXplLg0KLQlGUERGX1VJTlQzMiBzaXplOw0KLQkvL0ZXTF9FVkVOVFRZUEUuDQotICAgIEZQREZfVUlOVDMyIHR5cGU7DQotCXVuaW9uDQotCXsNCi0JCXN0cnVjdCBGV0xfRVZFTlRfTU9VU0UgbW91c2U7DQotCQlzdHJ1Y3QgRldMX0VWRU5UX01PVVNFV0hFRUwgd2hlZWw7DQotCQlzdHJ1Y3QgRldMX0VWRU5UX0tFWSBrZXk7DQotCX1zOw0KLX07ICANCi0NCi0jZW5kaWYgLy9fRldMX0VWRU5UX0gNCi0NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9GV0xfRVZFTlRfSAorI2RlZmluZSBfRldMX0VWRU5UX0gKKworI2luY2x1ZGUgImZwZGZ2aWV3LmgiCisKK3R5cGVkZWYgaW50CQkJRlBERl9JTlQzMjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IEZQREZfVUlOVDMyOwordHlwZWRlZiBmbG9hdAkJRlBERl9GTE9BVDsKKy8vZXZlbnQgdHlwZQordHlwZWRlZiBlbnVtCit7CisJRldMX0VWRU5UVFlQRV9Nb3VzZSA9IDAJLAorCUZXTF9FVkVOVFRZUEVfTW91c2VXaGVlbCwJCisJRldMX0VWRU5UVFlQRV9LZXkJCSwKK30gRldMX0VWRU5UVFlQRTsKKworLy9rZXkgZmxhZwordHlwZWRlZiBlbnVtCit7ICAgIAorCUZXTF9FVkVOVEZMQUdfU2hpZnRLZXkJCQk9IDEgPDwgMCwgICAgCisJRldMX0VWRU5URkxBR19Db250cm9sS2V5CQk9IDEgPDwgMSwKKyAgICBGV0xfRVZFTlRGTEFHX0FsdEtleQkJCT0gMSA8PCAyLAorICAgIEZXTF9FVkVOVEZMQUdfTWV0YUtleQkJCT0gMSA8PCAzLAorICAgIEZXTF9FVkVOVEZMQUdfS2V5UGFkCQkJPSAxIDw8IDQsCisgICAgRldMX0VWRU5URkxBR19BdXRvUmVwZWF0CQk9IDEgPDwgNSwKKyAgICBGV0xfRVZFTlRGTEFHX0xlZnRCdXR0b25Eb3duCT0gMSA8PCA2LAorICAgIEZXTF9FVkVOVEZMQUdfTWlkZGxlQnV0dG9uRG93bgk9IDEgPDwgNywKKyAgICBGV0xfRVZFTlRGTEFHX1JpZ2h0QnV0dG9uRG93bgk9IDEgPDwgOCwgCit9IEZXTF9FVkVOVEZMQUc7ICAKKworLy8gTW91c2UgbWVzc2FnZSBjb21tYW5kCit0eXBlZGVmIGVudW0KK3sKKwlGV0xfRVZFTlRNT1VTRUNNRF9MQnV0dG9uRG93biA9CTEJLAkKKwlGV0xfRVZFTlRNT1VTRUNNRF9MQnV0dG9uVXAJCQksCisJRldMX0VWRU5UTU9VU0VDTURfTEJ1dHRvbkRibENsawkJLAorCUZXTF9FVkVOVE1PVVNFQ01EX1JCdXR0b25Eb3duCQksCisJRldMX0VWRU5UTU9VU0VDTURfUkJ1dHRvblVwCQkJLAorCUZXTF9FVkVOVE1PVVNFQ01EX1JCdXR0b25EYmxDbGsJCSwKKwlGV0xfRVZFTlRNT1VTRUNNRF9NQnV0dG9uRG93bgkJLAorCUZXTF9FVkVOVE1PVVNFQ01EX01CdXR0b25VcAkJCSwKKwlGV0xfRVZFTlRNT1VTRUNNRF9NQnV0dG9uRGJsQ2xrCQksCisJRldMX0VWRU5UTU9VU0VDTURfTW91c2VNb3ZlCQkJLAorCUZXTF9FVkVOVE1PVVNFQ01EX01vdXNlRW50ZXIJCSwKKwlGV0xfRVZFTlRNT1VTRUNNRF9Nb3VzZUhvdmVyCQksCisJRldMX0VWRU5UTU9VU0VDTURfTW91c2VMZWF2ZQkJLAorfSBGV0xfRVZFTlRfTU9VU0VDTUQ7CisKKy8vbW91c2UgZXZlbnQKK3N0cnVjdCBGV0xfRVZFTlRfTU9VU0UgCit7CisJRlBERl9VSU5UMzIgY29tbWFuZDsKKwlGUERGX0RXT1JEIGZsYWc7CisJRlBERl9GTE9BVCB4OworCUZQREZfRkxPQVQgeTsKK307CisKKy8vbW91c2Ugd2hlZWwKK3N0cnVjdCBGV0xfRVZFTlRfTU9VU0VXSEVFTCAKK3sJCisJRlBERl9EV09SRCBmbGFnOworCUZQREZfRkxPQVQgeDsKKwlGUERGX0ZMT0FUIHk7CisJRlBERl9GTE9BVCBkZWx0YVg7CisgICAgRlBERl9GTE9BVCBkZWx0YVk7ICAKK307CisKKy8vdmlydHVhbCBrZXljb2RlCit0eXBlZGVmIGVudW0gCit7CisgIEZXTF9WS0VZX0JhY2sJCT0gMHgwOCwKKyAgRldMX1ZLRVlfVGFiCQk9IDB4MDksCisgIEZXTF9WS0VZX0NsZWFyCT0gMHgwQywKKyAgRldMX1ZLRVlfUmV0dXJuCT0gMHgwRCwKKyAgRldMX1ZLRVlfU2hpZnQJPSAweDEwLAorICBGV0xfVktFWV9Db250cm9sCT0gMHgxMSwKKyAgRldMX1ZLRVlfTWVudQkJPSAweDEyLAorICBGV0xfVktFWV9QYXVzZQk9IDB4MTMsCisgIEZXTF9WS0VZX0NhcGl0YWwJPSAweDE0LAorICBGV0xfVktFWV9LYW5hCQk9IDB4MTUsCisgIEZXTF9WS0VZX0hhbmd1bAk9IDB4MTUsCisgIEZXTF9WS0VZX0p1bmphCT0gMHgxNywKKyAgRldMX1ZLRVlfRmluYWwJPSAweDE4LAorICBGV0xfVktFWV9IYW5qYQk9IDB4MTksCisgIEZXTF9WS0VZX0thbmppCT0gMHgxOSwKKyAgRldMX1ZLRVlfRXNjYXBlCT0gMHgxQiwKKyAgRldMX1ZLRVlfQ29udmVydAk9IDB4MUMsCisgIEZXTF9WS0VZX05vbkNvbnZlcnQgPSAweDFELAorICBGV0xfVktFWV9BY2NlcHQJID0gMHgxRSwKKyAgRldMX1ZLRVlfTW9kZUNoYW5nZSA9IDB4MUYsCisgIEZXTF9WS0VZX1NwYWNlID0gMHgyMCwKKyAgRldMX1ZLRVlfUHJpb3IgPSAweDIxLAorICBGV0xfVktFWV9OZXh0ID0gMHgyMiwKKyAgRldMX1ZLRVlfRW5kID0gMHgyMywKKyAgRldMX1ZLRVlfSG9tZSA9IDB4MjQsCisgIEZXTF9WS0VZX0xlZnQgPSAweDI1LAorICBGV0xfVktFWV9VcCA9IDB4MjYsCisgIEZXTF9WS0VZX1JpZ2h0ID0gMHgyNywKKyAgRldMX1ZLRVlfRG93biA9IDB4MjgsCisgIEZXTF9WS0VZX1NlbGVjdCA9IDB4MjksCisgIEZXTF9WS0VZX1ByaW50ID0gMHgyQSwKKyAgRldMX1ZLRVlfRXhlY3V0ZSA9IDB4MkIsCisgIEZXTF9WS0VZX1NuYXBzaG90ID0gMHgyQywKKyAgRldMX1ZLRVlfSW5zZXJ0ID0gMHgyRCwKKyAgRldMX1ZLRVlfRGVsZXRlID0gMHgyRSwKKyAgRldMX1ZLRVlfSGVscCA9IDB4MkYsCisgIEZXTF9WS0VZXzAgPSAweDMwLAorICBGV0xfVktFWV8xID0gMHgzMSwKKyAgRldMX1ZLRVlfMiA9IDB4MzIsCisgIEZXTF9WS0VZXzMgPSAweDMzLAorICBGV0xfVktFWV80ID0gMHgzNCwKKyAgRldMX1ZLRVlfNSA9IDB4MzUsCisgIEZXTF9WS0VZXzYgPSAweDM2LAorICBGV0xfVktFWV83ID0gMHgzNywKKyAgRldMX1ZLRVlfOCA9IDB4MzgsCisgIEZXTF9WS0VZXzkgPSAweDM5LAorICBGV0xfVktFWV9BID0gMHg0MSwKKyAgRldMX1ZLRVlfQiA9IDB4NDIsCisgIEZXTF9WS0VZX0MgPSAweDQzLAorICBGV0xfVktFWV9EID0gMHg0NCwKKyAgRldMX1ZLRVlfRSA9IDB4NDUsCisgIEZXTF9WS0VZX0YgPSAweDQ2LAorICBGV0xfVktFWV9HID0gMHg0NywKKyAgRldMX1ZLRVlfSCA9IDB4NDgsCisgIEZXTF9WS0VZX0kgPSAweDQ5LAorICBGV0xfVktFWV9KID0gMHg0QSwKKyAgRldMX1ZLRVlfSyA9IDB4NEIsCisgIEZXTF9WS0VZX0wgPSAweDRDLAorICBGV0xfVktFWV9NID0gMHg0RCwKKyAgRldMX1ZLRVlfTiA9IDB4NEUsCisgIEZXTF9WS0VZX08gPSAweDRGLAorICBGV0xfVktFWV9QID0gMHg1MCwKKyAgRldMX1ZLRVlfUSA9IDB4NTEsCisgIEZXTF9WS0VZX1IgPSAweDUyLAorICBGV0xfVktFWV9TID0gMHg1MywKKyAgRldMX1ZLRVlfVCA9IDB4NTQsCisgIEZXTF9WS0VZX1UgPSAweDU1LAorICBGV0xfVktFWV9WID0gMHg1NiwKKyAgRldMX1ZLRVlfVyA9IDB4NTcsCisgIEZXTF9WS0VZX1ggPSAweDU4LAorICBGV0xfVktFWV9ZID0gMHg1OSwKKyAgRldMX1ZLRVlfWiA9IDB4NUEsCisgIEZXTF9WS0VZX0xXaW4gPSAweDVCLAorICBGV0xfVktFWV9Db21tYW5kID0gMHg1QiwKKyAgRldMX1ZLRVlfUldpbiA9IDB4NUMsCisgIEZXTF9WS0VZX0FwcHMgPSAweDVELAorICBGV0xfVktFWV9TbGVlcCA9IDB4NUYsCisgIEZXTF9WS0VZX051bVBhZDAgPSAweDYwLAorICBGV0xfVktFWV9OdW1QYWQxID0gMHg2MSwKKyAgRldMX1ZLRVlfTnVtUGFkMiA9IDB4NjIsCisgIEZXTF9WS0VZX051bVBhZDMgPSAweDYzLAorICBGV0xfVktFWV9OdW1QYWQ0ID0gMHg2NCwKKyAgRldMX1ZLRVlfTnVtUGFkNSA9IDB4NjUsCisgIEZXTF9WS0VZX051bVBhZDYgPSAweDY2LAorICBGV0xfVktFWV9OdW1QYWQ3ID0gMHg2NywKKyAgRldMX1ZLRVlfTnVtUGFkOCA9IDB4NjgsCisgIEZXTF9WS0VZX051bVBhZDkgPSAweDY5LAorICBGV0xfVktFWV9NdWx0aXBseSA9IDB4NkEsCisgIEZXTF9WS0VZX0FkZCA9IDB4NkIsCisgIEZXTF9WS0VZX1NlcGFyYXRvciA9IDB4NkMsCisgIEZXTF9WS0VZX1N1YnRyYWN0ID0gMHg2RCwKKyAgRldMX1ZLRVlfRGVjaW1hbCA9IDB4NkUsCisgIEZXTF9WS0VZX0RpdmlkZSA9IDB4NkYsCisgIEZXTF9WS0VZX0YxID0gMHg3MCwKKyAgRldMX1ZLRVlfRjIgPSAweDcxLAorICBGV0xfVktFWV9GMyA9IDB4NzIsCisgIEZXTF9WS0VZX0Y0ID0gMHg3MywKKyAgRldMX1ZLRVlfRjUgPSAweDc0LAorICBGV0xfVktFWV9GNiA9IDB4NzUsCisgIEZXTF9WS0VZX0Y3ID0gMHg3NiwKKyAgRldMX1ZLRVlfRjggPSAweDc3LAorICBGV0xfVktFWV9GOSA9IDB4NzgsCisgIEZXTF9WS0VZX0YxMCA9IDB4NzksCisgIEZXTF9WS0VZX0YxMSA9IDB4N0EsCisgIEZXTF9WS0VZX0YxMiA9IDB4N0IsCisgIEZXTF9WS0VZX0YxMyA9IDB4N0MsCisgIEZXTF9WS0VZX0YxNCA9IDB4N0QsCisgIEZXTF9WS0VZX0YxNSA9IDB4N0UsCisgIEZXTF9WS0VZX0YxNiA9IDB4N0YsCisgIEZXTF9WS0VZX0YxNyA9IDB4ODAsCisgIEZXTF9WS0VZX0YxOCA9IDB4ODEsCisgIEZXTF9WS0VZX0YxOSA9IDB4ODIsCisgIEZXTF9WS0VZX0YyMCA9IDB4ODMsCisgIEZXTF9WS0VZX0YyMSA9IDB4ODQsCisgIEZXTF9WS0VZX0YyMiA9IDB4ODUsCisgIEZXTF9WS0VZX0YyMyA9IDB4ODYsCisgIEZXTF9WS0VZX0YyNCA9IDB4ODcsCisgIEZXTF9WS0VZX051bkxvY2sgPSAweDkwLAorICBGV0xfVktFWV9TY3JvbGwgPSAweDkxLAorICBGV0xfVktFWV9MU2hpZnQgPSAweEEwLAorICBGV0xfVktFWV9SU2hpZnQgPSAweEExLAorICBGV0xfVktFWV9MQ29udHJvbCA9IDB4QTIsCisgIEZXTF9WS0VZX1JDb250cm9sID0gMHhBMywKKyAgRldMX1ZLRVlfTE1lbnUgPSAweEE0LAorICBGV0xfVktFWV9STWVudSA9IDB4QTUsCisgIEZXTF9WS0VZX0JST1dTRVJfQmFjayA9IDB4QTYsCisgIEZXTF9WS0VZX0JST1dTRVJfRm9yd2FyZCA9IDB4QTcsCisgIEZXTF9WS0VZX0JST1dTRVJfUmVmcmVzaCA9IDB4QTgsCisgIEZXTF9WS0VZX0JST1dTRVJfU3RvcCA9IDB4QTksCisgIEZXTF9WS0VZX0JST1dTRVJfU2VhcmNoID0gMHhBQSwKKyAgRldMX1ZLRVlfQlJPV1NFUl9GYXZvcml0ZXMgPSAweEFCLAorICBGV0xfVktFWV9CUk9XU0VSX0hvbWUgPSAweEFDLAorICBGV0xfVktFWV9WT0xVTUVfTXV0ZSA9IDB4QUQsCisgIEZXTF9WS0VZX1ZPTFVNRV9Eb3duID0gMHhBRSwKKyAgRldMX1ZLRVlfVk9MVU1FX1VwID0gMHhBRiwKKyAgRldMX1ZLRVlfTUVESUFfTkVYVF9UcmFjayA9IDB4QjAsCisgIEZXTF9WS0VZX01FRElBX1BSRVZfVHJhY2sgPSAweEIxLAorICBGV0xfVktFWV9NRURJQV9TdG9wID0gMHhCMiwKKyAgRldMX1ZLRVlfTUVESUFfUExBWV9QYXVzZSA9IDB4QjMsCisgIEZXTF9WS0VZX01FRElBX0xBVU5DSF9NYWlsID0gMHhCNCwKKyAgRldMX1ZLRVlfTUVESUFfTEFVTkNIX01FRElBX1NlbGVjdCA9IDB4QjUsCisgIEZXTF9WS0VZX01FRElBX0xBVU5DSF9BUFAxID0gMHhCNiwKKyAgRldMX1ZLRVlfTUVESUFfTEFVTkNIX0FQUDIgPSAweEI3LAorICBGV0xfVktFWV9PRU1fMSA9IDB4QkEsCisgIEZXTF9WS0VZX09FTV9QbHVzID0gMHhCQiwKKyAgRldMX1ZLRVlfT0VNX0NvbW1hID0gMHhCQywKKyAgRldMX1ZLRVlfT0VNX01pbnVzID0gMHhCRCwKKyAgRldMX1ZLRVlfT0VNX1BlcmlvZCA9IDB4QkUsCisgIEZXTF9WS0VZX09FTV8yID0gMHhCRiwKKyAgRldMX1ZLRVlfT0VNXzMgPSAweEMwLAorICBGV0xfVktFWV9PRU1fNCA9IDB4REIsCisgIEZXTF9WS0VZX09FTV81ID0gMHhEQywKKyAgRldMX1ZLRVlfT0VNXzYgPSAweERELAorICBGV0xfVktFWV9PRU1fNyA9IDB4REUsCisgIEZXTF9WS0VZX09FTV84ID0gMHhERiwKKyAgRldMX1ZLRVlfT0VNXzEwMiA9IDB4RTIsCisgIEZXTF9WS0VZX1Byb2Nlc3NLZXkgPSAweEU1LAorICBGV0xfVktFWV9QYWNrZXQgPSAweEU3LAorICBGV0xfVktFWV9BdHRuID0gMHhGNiwKKyAgRldMX1ZLRVlfQ3JzZWwgPSAweEY3LAorICBGV0xfVktFWV9FeHNlbCA9IDB4RjgsCisgIEZXTF9WS0VZX0VyZW9mID0gMHhGOSwKKyAgRldMX1ZLRVlfUGxheSA9IDB4RkEsCisgIEZXTF9WS0VZX1pvb20gPSAweEZCLAorICBGV0xfVktFWV9Ob05hbWUgPSAweEZDLAorICBGV0xfVktFWV9QQTEgPSAweEZELAorICBGV0xfVktFWV9PRU1fQ2xlYXIgPSAweEZFLAorICBGV0xfVktFWV9Vbmtub3duID0gMCwKK30gRldMX1ZLRVlDT0RFOworCisvL2tleSBldmVudCBjb21tYW5kCit0eXBlZGVmIGVudW0KK3sKKwlGV0xfRVZFTlRLRVlDTURfS2V5RG93biA9IDEJLAorCUZXTF9FVkVOVEtFWUNNRF9LZXlVcAkJLAorCUZXTF9FVkVOVEtFWUNNRF9DaGFyCQksCit9IEZXTF9FVkVOVEtFWUNNRDsKKworLy9rZXkgZXZlbnQKK3N0cnVjdCBGV0xfRVZFTlRfS0VZCit7CisJRlBERl9VSU5UMzIgY29tbWFuZDsKKwlGUERGX0RXT1JEIGZsYWc7CisJdW5pb24KKwl7CisJCS8vVmlydHVhbCBrZXkgY29kZS4KKwkJRlBERl9VSU5UMzIgdmtjb2RlOworCQkvL0NoYXJhY3RlciBjb2RlLgorCQlGUERGX0RXT1JEIGNoYXJjb2RlOworCX1jb2RlOworfTsKKworLy9ldmVudCB0eXBlCitzdHJ1Y3QgRldMX0VWRU5UIAoreworCS8vc3RydWN0dXJlIHNpemUuCisJRlBERl9VSU5UMzIgc2l6ZTsKKwkvL0ZXTF9FVkVOVFRZUEUuCisgICAgRlBERl9VSU5UMzIgdHlwZTsKKwl1bmlvbgorCXsKKwkJc3RydWN0IEZXTF9FVkVOVF9NT1VTRSBtb3VzZTsKKwkJc3RydWN0IEZXTF9FVkVOVF9NT1VTRVdIRUVMIHdoZWVsOworCQlzdHJ1Y3QgRldMX0VWRU5UX0tFWSBrZXk7CisJfXM7Cit9OyAgCisKKyNlbmRpZiAvL19GV0xfRVZFTlRfSAorCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9mcGRmX3Byb2dyZXNzaXZlLmggYi9mcGRmc2RrL2luY2x1ZGUvZnBkZl9wcm9ncmVzc2l2ZS5oCmluZGV4IGQ1OTBmNzguLjAyOTI2NGUgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9mcGRmX3Byb2dyZXNzaXZlLmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2ZwZGZfcHJvZ3Jlc3NpdmUuaApAQCAtMSw5NCArMSw5NCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlBERl9QUk9HUkVTU0lWRV9IXw0KLSNkZWZpbmUgX0ZQREZfUFJPR1JFU1NJVkVfSF8NCi0NCi0jaW5jbHVkZSAiZnBkZnZpZXcuaCINCi0NCi0vL0ZsYWdzIGZvciBwcm9ncmVzc2l2ZSBwcm9jZXNzIHN0YXR1cy4NCi0jZGVmaW5lIEZQREZfUkVOREVSX1JFQURFUgkJCTANCi0jZGVmaW5lIEZQREZfUkVOREVSX1RPQkVDT1VOVElOVUVECTENCi0jZGVmaW5lIEZQREZfUkVOREVSX0RPTkUJCQkyDQotI2RlZmluZSBGUERGX1JFTkRFUl9GQUlMRUQJCQkzDQotDQotDQotI2lmZGVmIF9fY3BsdXNwbHVzDQotZXh0ZXJuICJDIiB7DQotI2VuZGlmDQotDQotDQotLy9JRlBERl9SRU5ERVJJTkZPIGludGVyZmFjZS4NCi10eXBlZGVmIHN0cnVjdCBfSUZTREtfUEFVU0UNCi17DQotCS8qKg0KLQkqIFZlcnNpb24gbnVtYmVyIG9mIHRoZSBpbnRlcmZhY2UuIEN1cnJlbnRseSBtdXN0IGJlIDEuDQotCSoqLw0KLQlpbnQgdmVyc2lvbjsNCi0NCi0JLyoNCi0JKiBNZXRob2Q6IE5lZWRUb1BhdXNlTm93DQotCSoJCQlDaGVjayBpZiB3ZSBuZWVkIHRvIHBhdXNlIGEgcHJvZ3Jlc3NpdmUgcHJvY2VzcyBub3cuDQotCSogSW50ZXJmYWNlIFZlcnNpb246DQotCSoJCQkxDQotCSogSW1wbGVtZW50YXRpb24gUmVxdWlyZWQ6DQotCSoJCQl5ZXMNCi0JKiBQYXJhbWV0ZXJzOg0KLQkqCQkJcFRoaXMJCS0JUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBpdHNlbGYNCi0JKiBSZXR1cm4gVmFsdWU6DQotCSoJCQkgTm9uLXplcm8gZm9yIHBhdXNlIG5vdywgMCBmb3IgY29udGludWUuDQotCSoNCi0JKi8NCi0JRlBERl9CT09MICgqTmVlZFRvUGF1c2VOb3cpIChzdHJ1Y3QgX0lGU0RLX1BBVVNFKiBwVGhpcyk7DQotCQ0KLQkvL0EgdXNlciBkZWZpbmVkIGRhdGEgcG9pbnRlciwgdXNlZCBieSB1c2VyJ3MgYXBwbGljYXRpb24uIENhbiBiZSBOVUxMLg0KLQl2b2lkKgkJdXNlcjsNCi19IElGU0RLX1BBVVNFOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGX1JlbmRlclBhZ2VCaXRtYXBfU3RhcnQNCi0vLwkJCVN0YXJ0IHRvIHJlbmRlciBwYWdlIGNvbnRlbnRzIHRvIGEgZGV2aWNlIGluZGVwZW5kZW50IGJpdG1hcCBwcm9ncmVzc2l2ZWx5Lg0KLS8vIFBhcmFtZXRlcnM6IA0KLS8vCQkJYml0bWFwCQktCUhhbmRsZSB0byB0aGUgZGV2aWNlIGluZGVwZW5kZW50IGJpdG1hcCAoYXMgdGhlIG91dHB1dCBidWZmZXIpLg0KLS8vCQkJCQkJCUJpdG1hcCBoYW5kbGUgY2FuIGJlIGNyZWF0ZWQgYnkgRlBERkJpdG1hcF9DcmVhdGUgZnVuY3Rpb24uDQotLy8JCQlwYWdlCQktCUhhbmRsZSB0byB0aGUgcGFnZS4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkUGFnZSBmdW5jdGlvbi4NCi0vLwkJCXN0YXJ0X3gJCS0JTGVmdCBwaXhlbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBhcmVhIGluIHRoZSBiaXRtYXAgY29vcmRpbmF0ZS4NCi0vLwkJCXN0YXJ0X3kJCS0JVG9wIHBpeGVsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IGFyZWEgaW4gdGhlIGJpdG1hcCBjb29yZGluYXRlLg0KLS8vCQkJc2l6ZV94CQktCUhvcml6b250YWwgc2l6ZSAoaW4gcGl4ZWxzKSBmb3IgZGlzcGxheWluZyB0aGUgcGFnZS4NCi0vLwkJCXNpemVfeQkJLQlWZXJ0aWNhbCBzaXplIChpbiBwaXhlbHMpIGZvciBkaXNwbGF5aW5nIHRoZSBwYWdlLg0KLS8vCQkJcm90YXRlCQktCVBhZ2Ugb3JpZW50YXRpb246IDAgKG5vcm1hbCksIDEgKHJvdGF0ZWQgOTAgZGVncmVlcyBjbG9ja3dpc2UpLA0KLS8vCQkJCQkJCQkyIChyb3RhdGVkIDE4MCBkZWdyZWVzKSwgMyAocm90YXRlZCA5MCBkZWdyZWVzIGNvdW50ZXItY2xvY2t3aXNlKS4NCi0vLwkJCWZsYWdzCQktCTAgZm9yIG5vcm1hbCBkaXNwbGF5LCBvciBjb21iaW5hdGlvbiBvZiBmbGFncyBkZWZpbmVkIGFib3ZlLg0KLS8vCQkJcGF1c2UJCS0JVGhlIElGU0RLX1BBVVNFIGludGVyZmFjZS5BIGNhbGxiYWNrIG1lY2hhbmlzbSBhbGxvd2luZyB0aGUgcGFnZSByZW5kZXJpbmcgcHJvY2Vzcw0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCVJlbmRlcmluZyBTdGF0dXMuIFNlZSBmbGFncyBmb3IgcHJvZ3Jlc3NpdmUgcHJvY2VzcyBzdGF0dXMgZm9yIHRoZSBkZXRhaWxzLg0KLS8vDQotRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZfUmVuZGVyUGFnZUJpdG1hcF9TdGFydChGUERGX0JJVE1BUCBiaXRtYXAsIEZQREZfUEFHRSBwYWdlLCBpbnQgc3RhcnRfeCwgaW50IHN0YXJ0X3ksIGludCBzaXplX3gsDQotCQkJCQkJCQkJCQkJICAgaW50IHNpemVfeSwgaW50IHJvdGF0ZSwgaW50IGZsYWdzLElGU0RLX1BBVVNFICogcGF1c2UpOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGX1JlbmRlclBhZ2VfQ29udGludWUNCi0vLwkJCUNvbnRpbnVlIHJlbmRlcmluZyBhIFBERiBwYWdlLg0KLS8vIFBhcmFtZXRlcnM6IA0KLS8vCQkJcGFnZQkJLQlIYW5kbGUgdG8gdGhlIHBhZ2UuIFJldHVybmVkIGJ5IEZQREZfTG9hZFBhZ2UgZnVuY3Rpb24uDQotLy8JCQlwYXVzZQkJLQlUaGUgSUZTREtfUEFVU0UgaW50ZXJmYWNlLkEgY2FsbGJhY2sgbWVjaGFuaXNtIGFsbG93aW5nIHRoZSBwYWdlIHJlbmRlcmluZyBwcm9jZXNzDQotLy8JCQkJCQkJdG8gYmUgcGF1c2VkIGJlZm9yZSBpdCdzIGZpbmlzaGVkLiBUaGlzIGNhbiBiZSBOVUxMIGlmIHlvdSBkb24ndCB3YW50IHRvIHBhdXNlLg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCVRoZSByZW5kZXJpbmcgc3RhdHVzLiBTZWUgZmxhZ3MgZm9yIHByb2dyZXNzaXZlIHByb2Nlc3Mgc3RhdHVzIGZvciB0aGUgZGV0YWlscy4NCi1ETExFWFBPUlQgaW50IFNURENBTEwgRlBERl9SZW5kZXJQYWdlX0NvbnRpbnVlKEZQREZfUEFHRSBwYWdlLElGU0RLX1BBVVNFICogcGF1c2UpOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGX1JlbmRlclBhZ2VfQ2xvc2UNCi0vLwkJCVJlbGVhc2UgdGhlIHJlc291cmNlIGFsbG9jYXRlIGR1cmluZyBwYWdlIHJlbmRlcmluZy4gTmVlZCB0byBiZSBjYWxsZWQgYWZ0ZXIgZmluaXNoaW5nIHJlbmRlcmluZyBvcg0KLS8vCQkJY2FuY2VsIHRoZSByZW5kZXJpbmcuDQotLy8gUGFyYW1ldGVyczogDQotLy8JCQlwYWdlCQktCUhhbmRsZSB0byB0aGUgcGFnZS4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkUGFnZSBmdW5jdGlvbi4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlOVUxMDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX1JlbmRlclBhZ2VfQ2xvc2UoRlBERl9QQUdFIHBhZ2UpOw0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX0NCi0jZW5kaWYNCi0NCi0jZW5kaWYJLy9fRlBERl9QUk9HUkVTU0lWRV9IXw0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZQREZfUFJPR1JFU1NJVkVfSF8KKyNkZWZpbmUgX0ZQREZfUFJPR1JFU1NJVkVfSF8KKworI2luY2x1ZGUgImZwZGZ2aWV3LmgiCisKKy8vRmxhZ3MgZm9yIHByb2dyZXNzaXZlIHByb2Nlc3Mgc3RhdHVzLgorI2RlZmluZSBGUERGX1JFTkRFUl9SRUFERVIJCQkwCisjZGVmaW5lIEZQREZfUkVOREVSX1RPQkVDT1VOVElOVUVECTEKKyNkZWZpbmUgRlBERl9SRU5ERVJfRE9ORQkJCTIKKyNkZWZpbmUgRlBERl9SRU5ERVJfRkFJTEVECQkJMworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisvL0lGUERGX1JFTkRFUklORk8gaW50ZXJmYWNlLgordHlwZWRlZiBzdHJ1Y3QgX0lGU0RLX1BBVVNFCit7CisJLyoqCisJKiBWZXJzaW9uIG51bWJlciBvZiB0aGUgaW50ZXJmYWNlLiBDdXJyZW50bHkgbXVzdCBiZSAxLgorCSoqLworCWludCB2ZXJzaW9uOworCisJLyoKKwkqIE1ldGhvZDogTmVlZFRvUGF1c2VOb3cKKwkqCQkJQ2hlY2sgaWYgd2UgbmVlZCB0byBwYXVzZSBhIHByb2dyZXNzaXZlIHByb2Nlc3Mgbm93LgorCSogSW50ZXJmYWNlIFZlcnNpb246CisJKgkJCTEKKwkqIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOgorCSoJCQl5ZXMKKwkqIFBhcmFtZXRlcnM6CisJKgkJCXBUaGlzCQktCVBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgaXRzZWxmCisJKiBSZXR1cm4gVmFsdWU6CisJKgkJCSBOb24temVybyBmb3IgcGF1c2Ugbm93LCAwIGZvciBjb250aW51ZS4KKwkqCisJKi8KKwlGUERGX0JPT0wgKCpOZWVkVG9QYXVzZU5vdykgKHN0cnVjdCBfSUZTREtfUEFVU0UqIHBUaGlzKTsKKwkKKwkvL0EgdXNlciBkZWZpbmVkIGRhdGEgcG9pbnRlciwgdXNlZCBieSB1c2VyJ3MgYXBwbGljYXRpb24uIENhbiBiZSBOVUxMLgorCXZvaWQqCQl1c2VyOworfSBJRlNES19QQVVTRTsKKworLy8gRnVuY3Rpb246IEZQREZfUmVuZGVyUGFnZUJpdG1hcF9TdGFydAorLy8JCQlTdGFydCB0byByZW5kZXIgcGFnZSBjb250ZW50cyB0byBhIGRldmljZSBpbmRlcGVuZGVudCBiaXRtYXAgcHJvZ3Jlc3NpdmVseS4KKy8vIFBhcmFtZXRlcnM6IAorLy8JCQliaXRtYXAJCS0JSGFuZGxlIHRvIHRoZSBkZXZpY2UgaW5kZXBlbmRlbnQgYml0bWFwIChhcyB0aGUgb3V0cHV0IGJ1ZmZlcikuCisvLwkJCQkJCQlCaXRtYXAgaGFuZGxlIGNhbiBiZSBjcmVhdGVkIGJ5IEZQREZCaXRtYXBfQ3JlYXRlIGZ1bmN0aW9uLgorLy8JCQlwYWdlCQktCUhhbmRsZSB0byB0aGUgcGFnZS4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkUGFnZSBmdW5jdGlvbi4KKy8vCQkJc3RhcnRfeAkJLQlMZWZ0IHBpeGVsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IGFyZWEgaW4gdGhlIGJpdG1hcCBjb29yZGluYXRlLgorLy8JCQlzdGFydF95CQktCVRvcCBwaXhlbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBhcmVhIGluIHRoZSBiaXRtYXAgY29vcmRpbmF0ZS4KKy8vCQkJc2l6ZV94CQktCUhvcml6b250YWwgc2l6ZSAoaW4gcGl4ZWxzKSBmb3IgZGlzcGxheWluZyB0aGUgcGFnZS4KKy8vCQkJc2l6ZV95CQktCVZlcnRpY2FsIHNpemUgKGluIHBpeGVscykgZm9yIGRpc3BsYXlpbmcgdGhlIHBhZ2UuCisvLwkJCXJvdGF0ZQkJLQlQYWdlIG9yaWVudGF0aW9uOiAwIChub3JtYWwpLCAxIChyb3RhdGVkIDkwIGRlZ3JlZXMgY2xvY2t3aXNlKSwKKy8vCQkJCQkJCQkyIChyb3RhdGVkIDE4MCBkZWdyZWVzKSwgMyAocm90YXRlZCA5MCBkZWdyZWVzIGNvdW50ZXItY2xvY2t3aXNlKS4KKy8vCQkJZmxhZ3MJCS0JMCBmb3Igbm9ybWFsIGRpc3BsYXksIG9yIGNvbWJpbmF0aW9uIG9mIGZsYWdzIGRlZmluZWQgYWJvdmUuCisvLwkJCXBhdXNlCQktCVRoZSBJRlNES19QQVVTRSBpbnRlcmZhY2UuQSBjYWxsYmFjayBtZWNoYW5pc20gYWxsb3dpbmcgdGhlIHBhZ2UgcmVuZGVyaW5nIHByb2Nlc3MKKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJUmVuZGVyaW5nIFN0YXR1cy4gU2VlIGZsYWdzIGZvciBwcm9ncmVzc2l2ZSBwcm9jZXNzIHN0YXR1cyBmb3IgdGhlIGRldGFpbHMuCisvLworRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZfUmVuZGVyUGFnZUJpdG1hcF9TdGFydChGUERGX0JJVE1BUCBiaXRtYXAsIEZQREZfUEFHRSBwYWdlLCBpbnQgc3RhcnRfeCwgaW50IHN0YXJ0X3ksIGludCBzaXplX3gsCisJCQkJCQkJCQkJCQkgICBpbnQgc2l6ZV95LCBpbnQgcm90YXRlLCBpbnQgZmxhZ3MsSUZTREtfUEFVU0UgKiBwYXVzZSk7CisKKy8vIEZ1bmN0aW9uOiBGUERGX1JlbmRlclBhZ2VfQ29udGludWUKKy8vCQkJQ29udGludWUgcmVuZGVyaW5nIGEgUERGIHBhZ2UuCisvLyBQYXJhbWV0ZXJzOiAKKy8vCQkJcGFnZQkJLQlIYW5kbGUgdG8gdGhlIHBhZ2UuIFJldHVybmVkIGJ5IEZQREZfTG9hZFBhZ2UgZnVuY3Rpb24uCisvLwkJCXBhdXNlCQktCVRoZSBJRlNES19QQVVTRSBpbnRlcmZhY2UuQSBjYWxsYmFjayBtZWNoYW5pc20gYWxsb3dpbmcgdGhlIHBhZ2UgcmVuZGVyaW5nIHByb2Nlc3MKKy8vCQkJCQkJCXRvIGJlIHBhdXNlZCBiZWZvcmUgaXQncyBmaW5pc2hlZC4gVGhpcyBjYW4gYmUgTlVMTCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBwYXVzZS4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJVGhlIHJlbmRlcmluZyBzdGF0dXMuIFNlZSBmbGFncyBmb3IgcHJvZ3Jlc3NpdmUgcHJvY2VzcyBzdGF0dXMgZm9yIHRoZSBkZXRhaWxzLgorRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZfUmVuZGVyUGFnZV9Db250aW51ZShGUERGX1BBR0UgcGFnZSxJRlNES19QQVVTRSAqIHBhdXNlKTsKKworLy8gRnVuY3Rpb246IEZQREZfUmVuZGVyUGFnZV9DbG9zZQorLy8JCQlSZWxlYXNlIHRoZSByZXNvdXJjZSBhbGxvY2F0ZSBkdXJpbmcgcGFnZSByZW5kZXJpbmcuIE5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGZpbmlzaGluZyByZW5kZXJpbmcgb3IKKy8vCQkJY2FuY2VsIHRoZSByZW5kZXJpbmcuCisvLyBQYXJhbWV0ZXJzOiAKKy8vCQkJcGFnZQkJLQlIYW5kbGUgdG8gdGhlIHBhZ2UuIFJldHVybmVkIGJ5IEZQREZfTG9hZFBhZ2UgZnVuY3Rpb24uCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCU5VTEwKK0RMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERl9SZW5kZXJQYWdlX0Nsb3NlKEZQREZfUEFHRSBwYWdlKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCS8vX0ZQREZfUFJPR1JFU1NJVkVfSF8KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9mcGRmX3NlYXJjaGV4LmggYi9mcGRmc2RrL2luY2x1ZGUvZnBkZl9zZWFyY2hleC5oCmluZGV4IGMyOTFjMGMuLmQ3MGRkZGMgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9mcGRmX3NlYXJjaGV4LmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2ZwZGZfc2VhcmNoZXguaApAQCAtMSwzMyArMSwzMyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlBERl9TRUFSQ0hfRVhfSA0KLSNkZWZpbmUgX0ZQREZfU0VBUkNIX0VYX0gNCi0JDQotI2lmbmRlZiBfRlBERlZJRVdfSF8NCi0jaW5jbHVkZSAiZnBkZnZpZXcuaCINCi0jZW5kaWYNCi0NCi0jaWZkZWYgX19jcGx1c3BsdXMNCi1leHRlcm4gIkMiIHsNCi0jZW5kaWYNCi0NCi0vLyBGdW5jdGlvbjogRlBERlRleHRfR2V0Q2hhckluZGV4RnJvbVRleHRJbmRleA0KLS8vCQlHZXQgdGhlIGFjdHVhbGx5IGNoYXIgaW5kZXggaW4gdGV4dF9wYWdlJ3MgaW50ZXJuYWwgY2hhciBsaXN0Lg0KLS8vIFBhcmFtZXRlcnM6DQotLy8JCQl0ZXh0X3BhZ2UJLSAJSGFuZGxlIHRvIGEgdGV4dCBwYWdlIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gUmV0dXJuZWQgYnkgRlBERlRleHRfTG9hZFBhZ2UgZnVuY3Rpb24uDQotLy8JCQluVGV4dEluZGV4CS0JVGhlIGluZGV4IG9mIHRoZSB0ZXh0IGluIHRoZSBzdHJpbmcgZ2V0IGZyb20gRlBERlRleHRfR2V0VGV4dC4NCi0vLwlSZXR1cm4gdmFsdWU6DQotLy8JCQlUaGUgaW5kZXggb2YgdGhlIGNoYXJhY3RlciBpbiBpbnRlcm5hbCBjaGFybGlzdC4gLTEgZm9yIGVycm9yLg0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCAgRlBERlRleHRfR2V0Q2hhckluZGV4RnJvbVRleHRJbmRleChGUERGX1RFWFRQQUdFIHRleHRfcGFnZSwgaW50IG5UZXh0SW5kZXgpOw0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX07DQotI2VuZGlmDQotDQotDQotI2VuZGlmDQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlBERl9TRUFSQ0hfRVhfSAorI2RlZmluZSBfRlBERl9TRUFSQ0hfRVhfSAorCQorI2lmbmRlZiBfRlBERlZJRVdfSF8KKyNpbmNsdWRlICJmcGRmdmlldy5oIgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLy8gRnVuY3Rpb246IEZQREZUZXh0X0dldENoYXJJbmRleEZyb21UZXh0SW5kZXgKKy8vCQlHZXQgdGhlIGFjdHVhbGx5IGNoYXIgaW5kZXggaW4gdGV4dF9wYWdlJ3MgaW50ZXJuYWwgY2hhciBsaXN0LgorLy8gUGFyYW1ldGVyczoKKy8vCQkJdGV4dF9wYWdlCS0gCUhhbmRsZSB0byBhIHRleHQgcGFnZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuIFJldHVybmVkIGJ5IEZQREZUZXh0X0xvYWRQYWdlIGZ1bmN0aW9uLgorLy8JCQluVGV4dEluZGV4CS0JVGhlIGluZGV4IG9mIHRoZSB0ZXh0IGluIHRoZSBzdHJpbmcgZ2V0IGZyb20gRlBERlRleHRfR2V0VGV4dC4KKy8vCVJldHVybiB2YWx1ZToKKy8vCQkJVGhlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgaW4gaW50ZXJuYWwgY2hhcmxpc3QuIC0xIGZvciBlcnJvci4KK0RMTEVYUE9SVCBpbnQgU1REQ0FMTCAgRlBERlRleHRfR2V0Q2hhckluZGV4RnJvbVRleHRJbmRleChGUERGX1RFWFRQQUdFIHRleHRfcGFnZSwgaW50IG5UZXh0SW5kZXgpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK307CisjZW5kaWYKKworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9pbmNsdWRlL2ZwZGZfdHJhbnNmb3JtcGFnZS5oIGIvZnBkZnNkay9pbmNsdWRlL2ZwZGZfdHJhbnNmb3JtcGFnZS5oCmluZGV4IGNhYWZlZGEuLjY5ZmZlMjQgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9mcGRmX3RyYW5zZm9ybXBhZ2UuaAorKysgYi9mcGRmc2RrL2luY2x1ZGUvZnBkZl90cmFuc2Zvcm1wYWdlLmgKQEAgLTEsMTEzICsxLDExMyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfVFJBTlNGT1JNUEFHRV9IXw0KLSNkZWZpbmUgX1RSQU5TRk9STVBBR0VfSF8NCi0NCi0jaWZuZGVmIF9GUERGVklFV19IXw0KLSNpbmNsdWRlICJmcGRmdmlldy5oIg0KLSNlbmRpZg0KLQ0KLXR5cGVkZWYgdm9pZCogRlBERl9QQUdFQVJDU0FWRVI7DQotdHlwZWRlZiB2b2lkKiBGUERGX1BBR0VBUkNMT0FERVI7DQotLyoqDQotKiAgU2V0ICJNZWRpYUJveCIgZW50cnkgdG8gdGhlIHBhZ2UgZGljdGlvbmFyeS4JCQkJCQkgICANCi0qIEBwYXJhbVtpbl0gcGFnZQktIEhhbmRsZSB0byBhIHBhZ2UuDQotKiBAcGFyYW1baW5dIGxlZnQJLSBUaGUgbGVmdCBvZiB0aGUgcmVjdGFuZ2xlLg0KLSogQHBhcmFtW2luXSBib3R0b20JLSBUaGUgYm90dG9tIG9mIHRoZSByZWN0YW5nbGUuDQotKiBAcGFyYW1baW5dIHJpZ2h0CS0gVGhlIHJpZ2h0IG9mIHRoZSByZWN0YW5nbGUuDQotKiBAcGFyYW1baW5dIHRvcAktIFRoZSB0b3Agb2YgdGhlIHJlY3RhbmdsZS4NCi0qIEByZXR2YWwgTm9uZS4NCi0qLw0KLURMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERlBhZ2VfU2V0TWVkaWFCb3goRlBERl9QQUdFIHBhZ2UsIGZsb2F0IGxlZnQsIGZsb2F0IGJvdHRvbSwgZmxvYXQgcmlnaHQsIGZsb2F0IHRvcCk7DQotDQotLyoqDQotKiAgU2V0ICJDcm9wQm94IiBlbnRyeSB0byB0aGUgcGFnZSBkaWN0aW9uYXJ5LgkJCQkJCSAgIA0KLSogQHBhcmFtW2luXSBwYWdlCS0gSGFuZGxlIHRvIGEgcGFnZS4NCi0qIEBwYXJhbVtpbl0gbGVmdAktIFRoZSBsZWZ0IG9mIHRoZSByZWN0YW5nbGUuDQotKiBAcGFyYW1baW5dIGJvdHRvbQktIFRoZSBib3R0b20gb2YgdGhlIHJlY3RhbmdsZS4NCi0qIEBwYXJhbVtpbl0gcmlnaHQJLSBUaGUgcmlnaHQgb2YgdGhlIHJlY3RhbmdsZS4NCi0qIEBwYXJhbVtpbl0gdG9wCS0gVGhlIHRvcCBvZiB0aGUgcmVjdGFuZ2xlLg0KLSogQHJldHZhbCBOb25lLg0KLSovDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGUGFnZV9TZXRDcm9wQm94KEZQREZfUEFHRSBwYWdlLCBmbG9hdCBsZWZ0LCBmbG9hdCBib3R0b20sIGZsb2F0IHJpZ2h0LCBmbG9hdCB0b3ApOw0KLQ0KLQ0KLS8qKiAgR2V0ICJNZWRpYUJveCIgZW50cnkgZnJvbSB0aGUgcGFnZSBkaWN0aW9uYXJ5LgkJCQkJCSAgIA0KLSogQHBhcmFtW2luXSBwYWdlCS0gSGFuZGxlIHRvIGEgcGFnZS4NCi0qIEBwYXJhbVtpbl0gbGVmdAktIFBvaW50ZXIgdG8gYSBkb3VibGUgdmFsdWUgcmVjZWl2aW5nIHRoZSBsZWZ0IG9mIHRoZSByZWN0YW5nbGUuDQotKiBAcGFyYW1baW5dIGJvdHRvbQktIFBvaW50ZXIgdG8gYSBkb3VibGUgdmFsdWUgcmVjZWl2aW5nIHRoZSBib3R0b20gb2YgdGhlIHJlY3RhbmdsZS4NCi0qIEBwYXJhbVtpbl0gcmlnaHQJLSBQb2ludGVyIHRvIGEgZG91YmxlIHZhbHVlIHJlY2VpdmluZyB0aGUgcmlnaHQgb2YgdGhlIHJlY3RhbmdsZS4NCi0qIEBwYXJhbVtpbl0gdG9wCS0gUG9pbnRlciB0byBhIGRvdWJsZSB2YWx1ZSByZWNlaXZpbmcgdGhlIHRvcCBvZiB0aGUgcmVjdGFuZ2xlLg0KLSogQHJldHZhbCBUcnVlIGlmIHN1Y2Nlc3MsZWxzZSBmYWlsLg0KLSovDQotRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZQYWdlX0dldE1lZGlhQm94KEZQREZfUEFHRSBwYWdlLCBmbG9hdCogbGVmdCwgZmxvYXQqIGJvdHRvbSwgZmxvYXQqIHJpZ2h0LCBmbG9hdCogdG9wKTsNCi0NCi0vKiogIEdldCAiQ3JvcEJveCIgZW50cnkgZnJvbSB0aGUgcGFnZSBkaWN0aW9uYXJ5LgkJCQkJCSAgIA0KLSogQHBhcmFtW2luXSBwYWdlCS0gSGFuZGxlIHRvIGEgcGFnZS4NCi0qIEBwYXJhbVtpbl0gbGVmdAktIFBvaW50ZXIgdG8gYSBkb3VibGUgdmFsdWUgcmVjZWl2aW5nIHRoZSBsZWZ0IG9mIHRoZSByZWN0YW5nbGUuDQotKiBAcGFyYW1baW5dIGJvdHRvbQktIFBvaW50ZXIgdG8gYSBkb3VibGUgdmFsdWUgcmVjZWl2aW5nIHRoZSBib3R0b20gb2YgdGhlIHJlY3RhbmdsZS4NCi0qIEBwYXJhbVtpbl0gcmlnaHQJLSBQb2ludGVyIHRvIGEgZG91YmxlIHZhbHVlIHJlY2VpdmluZyB0aGUgcmlnaHQgb2YgdGhlIHJlY3RhbmdsZS4NCi0qIEBwYXJhbVtpbl0gdG9wCS0gUG9pbnRlciB0byBhIGRvdWJsZSB2YWx1ZSByZWNlaXZpbmcgdGhlIHRvcCBvZiB0aGUgcmVjdGFuZ2xlLg0KLSogQHJldHZhbCBUcnVlIGlmIHN1Y2Nlc3MsZWxzZSBmYWlsLg0KLSovDQotRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZQYWdlX0dldENyb3BCb3goRlBERl9QQUdFIHBhZ2UsIGZsb2F0KiBsZWZ0LCBmbG9hdCogYm90dG9tLCBmbG9hdCogcmlnaHQsIGZsb2F0KiB0b3ApOw0KLQ0KLS8qKg0KLSogVHJhbnNmb3JtIHRoZSB3aG9sZSBwYWdlIHdpdGggYSBzcGVjaWZpZWQgbWF0cml4LCB0aGVuIGNsaXAgdGhlIHBhZ2UgY29udGVudCByZWdpb24uDQotKg0KLSogQHBhcmFtW2luXSBwYWdlCQkgLSBBIHBhZ2UgaGFuZGxlLg0KLSogQHBhcmFtW2luXSBtYXRyaXgJCSAtIFRoZSB0cmFuc2Zvcm0gbWF0cml4Lg0KLSogQHBhcmFtW2luXSBjbGlwUmVjdAkgLSBBIHJlY3RhbmdsZSBwYWdlIGFyZWEgdG8gYmUgY2xpcHBlZC4NCi0qIEBOb3RlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgdHJhbnNmb3JtIHRoZSB3aG9sZSBwYWdlLCBhbmQgd291bGQgdGFrZSBlZmZlY3QgdG8gYWxsIHRoZSBvYmplY3RzIGluIHRoZSBwYWdlLg0KLSovDQotRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZQYWdlX1RyYW5zRm9ybVdpdGhDbGlwKEZQREZfUEFHRSBwYWdlLCBGU19NQVRSSVgqIG1hdHJpeCwgRlNfUkVDVEYqIGNsaXBSZWN0KTsNCi0NCi0vKioNCi0qIFRyYW5zZm9ybSAoc2NhbGUsIHJvdGF0ZSwgc2hlYXIsIG1vdmUpIHRoZSBjbGlwIHBhdGggb2YgcGFnZSBvYmplY3QuDQotKiBAcGFyYW1baW5dIHBhZ2Vfb2JqZWN0IC0gSGFuZGxlIHRvIGEgcGFnZSBvYmplY3QuIFJldHVybmVkIGJ5IEZQREZQYWdlT2JqX05ld0ltYWdlT2JqLg0KLSogQHBhcmFtW2luXSBhCS0gVGhlIGNvZWZmaWNpZW50ICJhIiBvZiB0aGUgbWF0cml4Lg0KLSogQHBhcmFtW2luXSBiCS0gVGhlIGNvZWZmaWNpZW50ICJiIiBvZiB0aGUgbWF0cml4Lg0KLSogQHBhcmFtW2luXSBjCS0gVGhlIGNvZWZmaWNpZW50ICJjIiBvZiB0aGUgbWF0cml4Lg0KLSogQHBhcmFtW2luXSBkCS0gVGhlIGNvZWZmaWNpZW50ICJkIiBvZiB0aGUgbWF0cml4Lg0KLSogQHBhcmFtW2luXSBlCS0gVGhlIGNvZWZmaWNpZW50ICJlIiBvZiB0aGUgbWF0cml4Lg0KLSogQHBhcmFtW2luXSBmCS0gVGhlIGNvZWZmaWNpZW50ICJmIiBvZiB0aGUgbWF0cml4Lg0KLSogQHJldHZhbCBOb25lLg0KLSovDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGUGFnZU9ial9UcmFuc2Zvcm1DbGlwUGF0aChGUERGX1BBR0VPQkpFQ1QgcGFnZV9vYmplY3QsZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZik7DQotDQotLyoqDQotKiBDcmVhdGUgYSBuZXcgY2xpcCBwYXRoLCB3aXRoIGEgcmVjdGFuZ2xlIGluc2VydGVkLg0KLSogDQotKiBAcGFyYW1baW5dIGxlZnQJLSBUaGUgbGVmdCBvZiB0aGUgY2xpcCBib3guDQotKiBAcGFyYW1baW5dIGJvdHRvbSAtIFRoZSBib3R0b20gb2YgdGhlIGNsaXAgYm94Lg0KLSogQHBhcmFtW2luXSByaWdodAktIFRoZSByaWdodCBvZiB0aGUgY2xpcCBib3guDQotKiBAcGFyYW1baW5dIHRvcAktIFRoZSB0b3Agb2YgdGhlIGNsaXAgYm94Lg0KLSogQHJldHZhbCBhIGhhbmRsZSB0byB0aGUgY2xpcCBwYXRoLg0KLSovDQotRExMRVhQT1JUIEZQREZfQ0xJUFBBVEggU1REQ0FMTCBGUERGX0NyZWF0ZUNsaXBQYXRoKGZsb2F0IGxlZnQsIGZsb2F0IGJvdHRvbSwgZmxvYXQgcmlnaHQsIGZsb2F0IHRvcCk7DQotDQotLyoqDQotKiBEZXN0cm95IHRoZSBjbGlwIHBhdGguDQotKg0KLSogQHBhcmFtW2luXSBjbGlwUGF0aCAtIEEgaGFuZGxlIHRvIHRoZSBjbGlwIHBhdGguDQotKiBEZXN0cm95IHRoZSBjbGlwIHBhdGguDQotKiBAcmV0dmFsIE5vbmUuDQotKi8NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZfRGVzdHJveUNsaXBQYXRoKEZQREZfQ0xJUFBBVEggY2xpcFBhdGgpOw0KLQ0KLS8qKg0KLSogQ2xpcCB0aGUgcGFnZSBjb250ZW50LCB0aGUgcGFnZSBjb250ZW50IHRoYXQgb3V0c2lkZSB0aGUgY2xpcHBpbmcgcmVnaW9uIGJlY29tZSBpbnZpc2libGUuDQotKg0KLSogQHBhcmFtW2luXSBwYWdlCQkgLSBBIHBhZ2UgaGFuZGxlLg0KLSogQHBhcmFtW2luXSBjbGlwUGF0aAkgLSBBIGhhbmRsZSB0byB0aGUgY2xpcCBwYXRoLg0KLSogQE5vdGUuIEEgY2xpcCBwYXRoIHdpbGwgYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBwYWdlIGNvbnRlbnQgc3RyZWFtIG9yIGNvbnRlbnQgYXJyYXkuIEluIHRoaXMgd2F5LCB0aGUgcGFnZSBjb250ZW50IHdpbGwgYmUgY2xpcHBlZA0KLSogYnkgdGhpcyBjbGlwIHBhdGguIA0KLSovDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGUGFnZV9JbnNlcnRDbGlwUGF0aChGUERGX1BBR0UgcGFnZSxGUERGX0NMSVBQQVRIIGNsaXBQYXRoKTsNCi0NCi0jZW5kaWYNCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9UUkFOU0ZPUk1QQUdFX0hfCisjZGVmaW5lIF9UUkFOU0ZPUk1QQUdFX0hfCisKKyNpZm5kZWYgX0ZQREZWSUVXX0hfCisjaW5jbHVkZSAiZnBkZnZpZXcuaCIKKyNlbmRpZgorCit0eXBlZGVmIHZvaWQqIEZQREZfUEFHRUFSQ1NBVkVSOwordHlwZWRlZiB2b2lkKiBGUERGX1BBR0VBUkNMT0FERVI7CisvKioKKyogIFNldCAiTWVkaWFCb3giIGVudHJ5IHRvIHRoZSBwYWdlIGRpY3Rpb25hcnkuCQkJCQkJICAgCisqIEBwYXJhbVtpbl0gcGFnZQktIEhhbmRsZSB0byBhIHBhZ2UuCisqIEBwYXJhbVtpbl0gbGVmdAktIFRoZSBsZWZ0IG9mIHRoZSByZWN0YW5nbGUuCisqIEBwYXJhbVtpbl0gYm90dG9tCS0gVGhlIGJvdHRvbSBvZiB0aGUgcmVjdGFuZ2xlLgorKiBAcGFyYW1baW5dIHJpZ2h0CS0gVGhlIHJpZ2h0IG9mIHRoZSByZWN0YW5nbGUuCisqIEBwYXJhbVtpbl0gdG9wCS0gVGhlIHRvcCBvZiB0aGUgcmVjdGFuZ2xlLgorKiBAcmV0dmFsIE5vbmUuCisqLworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGUGFnZV9TZXRNZWRpYUJveChGUERGX1BBR0UgcGFnZSwgZmxvYXQgbGVmdCwgZmxvYXQgYm90dG9tLCBmbG9hdCByaWdodCwgZmxvYXQgdG9wKTsKKworLyoqCisqICBTZXQgIkNyb3BCb3giIGVudHJ5IHRvIHRoZSBwYWdlIGRpY3Rpb25hcnkuCQkJCQkJICAgCisqIEBwYXJhbVtpbl0gcGFnZQktIEhhbmRsZSB0byBhIHBhZ2UuCisqIEBwYXJhbVtpbl0gbGVmdAktIFRoZSBsZWZ0IG9mIHRoZSByZWN0YW5nbGUuCisqIEBwYXJhbVtpbl0gYm90dG9tCS0gVGhlIGJvdHRvbSBvZiB0aGUgcmVjdGFuZ2xlLgorKiBAcGFyYW1baW5dIHJpZ2h0CS0gVGhlIHJpZ2h0IG9mIHRoZSByZWN0YW5nbGUuCisqIEBwYXJhbVtpbl0gdG9wCS0gVGhlIHRvcCBvZiB0aGUgcmVjdGFuZ2xlLgorKiBAcmV0dmFsIE5vbmUuCisqLworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGUGFnZV9TZXRDcm9wQm94KEZQREZfUEFHRSBwYWdlLCBmbG9hdCBsZWZ0LCBmbG9hdCBib3R0b20sIGZsb2F0IHJpZ2h0LCBmbG9hdCB0b3ApOworCisKKy8qKiAgR2V0ICJNZWRpYUJveCIgZW50cnkgZnJvbSB0aGUgcGFnZSBkaWN0aW9uYXJ5LgkJCQkJCSAgIAorKiBAcGFyYW1baW5dIHBhZ2UJLSBIYW5kbGUgdG8gYSBwYWdlLgorKiBAcGFyYW1baW5dIGxlZnQJLSBQb2ludGVyIHRvIGEgZG91YmxlIHZhbHVlIHJlY2VpdmluZyB0aGUgbGVmdCBvZiB0aGUgcmVjdGFuZ2xlLgorKiBAcGFyYW1baW5dIGJvdHRvbQktIFBvaW50ZXIgdG8gYSBkb3VibGUgdmFsdWUgcmVjZWl2aW5nIHRoZSBib3R0b20gb2YgdGhlIHJlY3RhbmdsZS4KKyogQHBhcmFtW2luXSByaWdodAktIFBvaW50ZXIgdG8gYSBkb3VibGUgdmFsdWUgcmVjZWl2aW5nIHRoZSByaWdodCBvZiB0aGUgcmVjdGFuZ2xlLgorKiBAcGFyYW1baW5dIHRvcAktIFBvaW50ZXIgdG8gYSBkb3VibGUgdmFsdWUgcmVjZWl2aW5nIHRoZSB0b3Agb2YgdGhlIHJlY3RhbmdsZS4KKyogQHJldHZhbCBUcnVlIGlmIHN1Y2Nlc3MsZWxzZSBmYWlsLgorKi8KK0RMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGUGFnZV9HZXRNZWRpYUJveChGUERGX1BBR0UgcGFnZSwgZmxvYXQqIGxlZnQsIGZsb2F0KiBib3R0b20sIGZsb2F0KiByaWdodCwgZmxvYXQqIHRvcCk7CisKKy8qKiAgR2V0ICJDcm9wQm94IiBlbnRyeSBmcm9tIHRoZSBwYWdlIGRpY3Rpb25hcnkuCQkJCQkJICAgCisqIEBwYXJhbVtpbl0gcGFnZQktIEhhbmRsZSB0byBhIHBhZ2UuCisqIEBwYXJhbVtpbl0gbGVmdAktIFBvaW50ZXIgdG8gYSBkb3VibGUgdmFsdWUgcmVjZWl2aW5nIHRoZSBsZWZ0IG9mIHRoZSByZWN0YW5nbGUuCisqIEBwYXJhbVtpbl0gYm90dG9tCS0gUG9pbnRlciB0byBhIGRvdWJsZSB2YWx1ZSByZWNlaXZpbmcgdGhlIGJvdHRvbSBvZiB0aGUgcmVjdGFuZ2xlLgorKiBAcGFyYW1baW5dIHJpZ2h0CS0gUG9pbnRlciB0byBhIGRvdWJsZSB2YWx1ZSByZWNlaXZpbmcgdGhlIHJpZ2h0IG9mIHRoZSByZWN0YW5nbGUuCisqIEBwYXJhbVtpbl0gdG9wCS0gUG9pbnRlciB0byBhIGRvdWJsZSB2YWx1ZSByZWNlaXZpbmcgdGhlIHRvcCBvZiB0aGUgcmVjdGFuZ2xlLgorKiBAcmV0dmFsIFRydWUgaWYgc3VjY2VzcyxlbHNlIGZhaWwuCisqLworRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZQYWdlX0dldENyb3BCb3goRlBERl9QQUdFIHBhZ2UsIGZsb2F0KiBsZWZ0LCBmbG9hdCogYm90dG9tLCBmbG9hdCogcmlnaHQsIGZsb2F0KiB0b3ApOworCisvKioKKyogVHJhbnNmb3JtIHRoZSB3aG9sZSBwYWdlIHdpdGggYSBzcGVjaWZpZWQgbWF0cml4LCB0aGVuIGNsaXAgdGhlIHBhZ2UgY29udGVudCByZWdpb24uCisqCisqIEBwYXJhbVtpbl0gcGFnZQkJIC0gQSBwYWdlIGhhbmRsZS4KKyogQHBhcmFtW2luXSBtYXRyaXgJCSAtIFRoZSB0cmFuc2Zvcm0gbWF0cml4LgorKiBAcGFyYW1baW5dIGNsaXBSZWN0CSAtIEEgcmVjdGFuZ2xlIHBhZ2UgYXJlYSB0byBiZSBjbGlwcGVkLgorKiBATm90ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIHRyYW5zZm9ybSB0aGUgd2hvbGUgcGFnZSwgYW5kIHdvdWxkIHRha2UgZWZmZWN0IHRvIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgcGFnZS4KKyovCitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERlBhZ2VfVHJhbnNGb3JtV2l0aENsaXAoRlBERl9QQUdFIHBhZ2UsIEZTX01BVFJJWCogbWF0cml4LCBGU19SRUNURiogY2xpcFJlY3QpOworCisvKioKKyogVHJhbnNmb3JtIChzY2FsZSwgcm90YXRlLCBzaGVhciwgbW92ZSkgdGhlIGNsaXAgcGF0aCBvZiBwYWdlIG9iamVjdC4KKyogQHBhcmFtW2luXSBwYWdlX29iamVjdCAtIEhhbmRsZSB0byBhIHBhZ2Ugb2JqZWN0LiBSZXR1cm5lZCBieSBGUERGUGFnZU9ial9OZXdJbWFnZU9iai4KKyogQHBhcmFtW2luXSBhCS0gVGhlIGNvZWZmaWNpZW50ICJhIiBvZiB0aGUgbWF0cml4LgorKiBAcGFyYW1baW5dIGIJLSBUaGUgY29lZmZpY2llbnQgImIiIG9mIHRoZSBtYXRyaXguCisqIEBwYXJhbVtpbl0gYwktIFRoZSBjb2VmZmljaWVudCAiYyIgb2YgdGhlIG1hdHJpeC4KKyogQHBhcmFtW2luXSBkCS0gVGhlIGNvZWZmaWNpZW50ICJkIiBvZiB0aGUgbWF0cml4LgorKiBAcGFyYW1baW5dIGUJLSBUaGUgY29lZmZpY2llbnQgImUiIG9mIHRoZSBtYXRyaXguCisqIEBwYXJhbVtpbl0gZgktIFRoZSBjb2VmZmljaWVudCAiZiIgb2YgdGhlIG1hdHJpeC4KKyogQHJldHZhbCBOb25lLgorKi8KK0RMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERlBhZ2VPYmpfVHJhbnNmb3JtQ2xpcFBhdGgoRlBERl9QQUdFT0JKRUNUIHBhZ2Vfb2JqZWN0LGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpOworCisvKioKKyogQ3JlYXRlIGEgbmV3IGNsaXAgcGF0aCwgd2l0aCBhIHJlY3RhbmdsZSBpbnNlcnRlZC4KKyogCisqIEBwYXJhbVtpbl0gbGVmdAktIFRoZSBsZWZ0IG9mIHRoZSBjbGlwIGJveC4KKyogQHBhcmFtW2luXSBib3R0b20gLSBUaGUgYm90dG9tIG9mIHRoZSBjbGlwIGJveC4KKyogQHBhcmFtW2luXSByaWdodAktIFRoZSByaWdodCBvZiB0aGUgY2xpcCBib3guCisqIEBwYXJhbVtpbl0gdG9wCS0gVGhlIHRvcCBvZiB0aGUgY2xpcCBib3guCisqIEByZXR2YWwgYSBoYW5kbGUgdG8gdGhlIGNsaXAgcGF0aC4KKyovCitETExFWFBPUlQgRlBERl9DTElQUEFUSCBTVERDQUxMIEZQREZfQ3JlYXRlQ2xpcFBhdGgoZmxvYXQgbGVmdCwgZmxvYXQgYm90dG9tLCBmbG9hdCByaWdodCwgZmxvYXQgdG9wKTsKKworLyoqCisqIERlc3Ryb3kgdGhlIGNsaXAgcGF0aC4KKyoKKyogQHBhcmFtW2luXSBjbGlwUGF0aCAtIEEgaGFuZGxlIHRvIHRoZSBjbGlwIHBhdGguCisqIERlc3Ryb3kgdGhlIGNsaXAgcGF0aC4KKyogQHJldHZhbCBOb25lLgorKi8KK0RMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERl9EZXN0cm95Q2xpcFBhdGgoRlBERl9DTElQUEFUSCBjbGlwUGF0aCk7CisKKy8qKgorKiBDbGlwIHRoZSBwYWdlIGNvbnRlbnQsIHRoZSBwYWdlIGNvbnRlbnQgdGhhdCBvdXRzaWRlIHRoZSBjbGlwcGluZyByZWdpb24gYmVjb21lIGludmlzaWJsZS4KKyoKKyogQHBhcmFtW2luXSBwYWdlCQkgLSBBIHBhZ2UgaGFuZGxlLgorKiBAcGFyYW1baW5dIGNsaXBQYXRoCSAtIEEgaGFuZGxlIHRvIHRoZSBjbGlwIHBhdGguCisqIEBOb3RlLiBBIGNsaXAgcGF0aCB3aWxsIGJlIGluc2VydGVkIGJlZm9yZSB0aGUgcGFnZSBjb250ZW50IHN0cmVhbSBvciBjb250ZW50IGFycmF5LiBJbiB0aGlzIHdheSwgdGhlIHBhZ2UgY29udGVudCB3aWxsIGJlIGNsaXBwZWQKKyogYnkgdGhpcyBjbGlwIHBhdGguIAorKi8KK0RMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERlBhZ2VfSW5zZXJ0Q2xpcFBhdGgoRlBERl9QQUdFIHBhZ2UsRlBERl9DTElQUEFUSCBjbGlwUGF0aCk7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvZnBkZmRvYy5oIGIvZnBkZnNkay9pbmNsdWRlL2ZwZGZkb2MuaAppbmRleCAzNWMyYzk2Li41NGVkZTQwIDEwMDY0NAotLS0gYS9mcGRmc2RrL2luY2x1ZGUvZnBkZmRvYy5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9mcGRmZG9jLmgKQEAgLTEsMjMwICsxLDIzMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlBERkRPQ19IXw0KLSNkZWZpbmUgX0ZQREZET0NfSF8NCi0NCi0jaW5jbHVkZSAiZnBkZnZpZXcuaCINCi0NCi0vLyBFeHBvcnRlZCBGdW5jdGlvbnMNCi0jaWZkZWYgX19jcGx1c3BsdXMNCi1leHRlcm4gIkMiIHsNCi0jZW5kaWYNCi0NCi0vLyBGdW5jdGlvbjogRlBERkJvb2ttYXJrX0ZpbmQNCi0vLwkJCUZpbmQgYSBib29rbWFyayBpbiB0aGUgZG9jdW1lbnQsIHVzaW5nIHRoZSBib29rbWFyayB0aXRsZS4NCi0vLyBQYXJhbWV0ZXJzOiANCi0vLwkJCWRvY3VtZW50CS0JSGFuZGxlIHRvIHRoZSBkb2N1bWVudC4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkRG9jdW1lbnQgb3IgRlBERl9Mb2FkTWVtRG9jdW1lbnQuDQotLy8JCQl0aXRsZQkJLQlUaGUgVVRGLTE2TEUgZW5jb2RlZCBVbmljb2RlIHN0cmluZyBmb3IgdGhlIGJvb2ttYXJrIHRpdGxlIHRvIGJlIHNlYXJjaGVkLiBDYW4ndCBiZSBOVUxMLg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCUhhbmRsZSB0byB0aGUgZm91bmQgYm9va21hcmsgaXRlbS4gTlVMTCBpZiB0aGUgdGl0bGUgY2FuJ3QgYmUgZm91bmQuDQotLy8gQ29tbWVudHM6DQotLy8JCQlJdCBhbHdheXMgcmV0dXJucyB0aGUgZmlyc3QgZm91bmQgYm9va21hcmsgaWYgbW9yZSB0aGFuIG9uZSBib29rbWFya3MgaGF2ZSB0aGUgc2FtZSB0aXRsZS4NCi0vLw0KLURMTEVYUE9SVCBGUERGX0JPT0tNQVJLIFNURENBTEwgRlBERkJvb2ttYXJrX0ZpbmQoRlBERl9ET0NVTUVOVCBkb2N1bWVudCwgRlBERl9XSURFU1RSSU5HIHRpdGxlKTsNCi0NCi0vLyBGdW5jdGlvbjogRlBERkJvb2ttYXJrX0dldERlc3QNCi0vLwkJCUdldCB0aGUgZGVzdGluYXRpb24gYXNzb2NpYXRlZCB3aXRoIGEgYm9va21hcmsgaXRlbS4NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vCQkJZG9jdW1lbnQJLQlIYW5kbGUgdG8gdGhlIGRvY3VtZW50Lg0KLS8vCQkJYm9va21hcmsJLQlIYW5kbGUgdG8gdGhlIGJvb2ttYXJrLg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCUhhbmRsZSB0byB0aGUgZGVzdGluYXRpb24gZGF0YS4gTlVMTCBpZiBubyBkZXN0aW5hdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBib29rbWFyay4NCi0vLw0KLURMTEVYUE9SVCBGUERGX0RFU1QgU1REQ0FMTCBGUERGQm9va21hcmtfR2V0RGVzdChGUERGX0RPQ1VNRU5UIGRvY3VtZW50LCBGUERGX0JPT0tNQVJLIGJvb2ttYXJrKTsNCi0NCi0vLyBGdW5jdGlvbjogRlBERkJvb2ttYXJrX0dldEFjdGlvbg0KLS8vCQkJR2V0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB3aXRoIGEgYm9va21hcmsgaXRlbS4NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vCQkJYm9va21hcmsJLQlIYW5kbGUgdG8gdGhlIGJvb2ttYXJrLg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCUhhbmRsZSB0byB0aGUgYWN0aW9uIGRhdGEuIE5VTEwgaWYgbm8gYWN0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGJvb2ttYXJrLiBJbiB0aGlzIGNhc2UsIHRoZSANCi0vLwkJCWFwcGxpY2F0aW9uIHNob3VsZCB0cnkgRlBERkJvb2ttYXJrX0dldERlc3QuDQotLy8NCi1ETExFWFBPUlQgRlBERl9BQ1RJT04gU1REQ0FMTCBGUERGQm9va21hcmtfR2V0QWN0aW9uKEZQREZfQk9PS01BUksgYm9va21hcmspOw0KLQ0KLSNkZWZpbmUgUERGQUNUSU9OX1VOU1VQUE9SVEVECQkwCQkvLyBVbnN1cHBvcnRlZCBhY3Rpb24gdHlwZS4NCi0jZGVmaW5lIFBERkFDVElPTl9HT1RPCQkJCTEJCS8vIEdvIHRvIGEgZGVzdGluYXRpb24gd2l0aGluIGN1cnJlbnQgZG9jdW1lbnQuDQotI2RlZmluZSBQREZBQ1RJT05fUkVNT1RFR09UTwkJMgkJLy8gR28gdG8gYSBkZXN0aW5hdGlvbiB3aXRoaW4gYW5vdGhlciBkb2N1bWVudC4NCi0jZGVmaW5lIFBERkFDVElPTl9VUkkJCQkJMwkJLy8gVW5pdmVyc2FsIFJlc291cmNlIElkZW50aWZpZXIsIGluY2x1ZGluZyB3ZWIgcGFnZXMgYW5kIA0KLQkJCQkJCQkJCQkJLy8gb3RoZXIgSW50ZXJuZXQgYmFzZWQgcmVzb3VyY2VzLg0KLSNkZWZpbmUgUERGQUNUSU9OX0xBVU5DSAkJCTQJCS8vIExhdW5jaCBhbiBhcHBsaWNhdGlvbiBvciBvcGVuIGEgZmlsZS4NCi0NCi0vLyBGdW5jdGlvbjogRlBERkFjdGlvbl9HZXRUeXBlDQotLy8JCQlHZXQgdHlwZSBvZiBhbiBhY3Rpb24uDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCWFjdGlvbgkJLQlIYW5kbGUgdG8gdGhlIGFjdGlvbi4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlBIHR5cGUgbnVtYmVyIGFzIGRlZmluZWQgYWJvdmUuDQotLy8NCi1ETExFWFBPUlQgdW5zaWduZWQgbG9uZyBTVERDQUxMIEZQREZBY3Rpb25fR2V0VHlwZShGUERGX0FDVElPTiBhY3Rpb24pOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGQWN0aW9uX0dldERlc3QNCi0vLwkJCUdldCBkZXN0aW5hdGlvbiBvZiBhbiBhY3Rpb24uDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCWRvY3VtZW50CS0JSGFuZGxlIHRvIHRoZSBkb2N1bWVudC4NCi0vLwkJCWFjdGlvbgkJLQlIYW5kbGUgdG8gdGhlIGFjdGlvbi4gSXQgbXVzdCBiZSBhIEdPVE8gb3IgUkVNT1RFR09UTyBhY3Rpb24uDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJSGFuZGxlIHRvIHRoZSBkZXN0aW5hdGlvbiBkYXRhLg0KLS8vIENvbW1lbnRzOg0KLS8vCQkJSW4gY2FzZSBvZiByZW1vdGUgZ290byBhY3Rpb24sIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgZmlyc3QgdXNlIEZQREZBY3Rpb25fR2V0RmlsZVBhdGggdG8NCi0vLwkJCWdldCBmaWxlIHBhdGgsIHRoZW4gbG9hZCB0aGF0IHBhcnRpY3VsYXIgZG9jdW1lbnQsIGFuZCB1c2UgaXRzIGRvY3VtZW50IGhhbmRsZSB0byBjYWxsIHRoaXMNCi0vLwkJCWZ1bmN0aW9uLg0KLS8vDQotRExMRVhQT1JUIEZQREZfREVTVCBTVERDQUxMIEZQREZBY3Rpb25fR2V0RGVzdChGUERGX0RPQ1VNRU5UIGRvY3VtZW50LCBGUERGX0FDVElPTiBhY3Rpb24pOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGQWN0aW9uX0dldFVSSVBhdGgNCi0vLwkJCUdldCBVUkkgcGF0aCBvZiBhIFVSSSBhY3Rpb24uDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCWRvY3VtZW50CS0JSGFuZGxlIHRvIHRoZSBkb2N1bWVudC4NCi0vLwkJCWFjdGlvbgkJLQlIYW5kbGUgdG8gdGhlIGFjdGlvbi4gTXVzdCBiZSBhIFVSSSBhY3Rpb24uDQotLy8JCQlidWZmZXIJCS0JQSBidWZmZXIgZm9yIG91dHB1dCB0aGUgcGF0aCBzdHJpbmcuIENhbiBiZSBOVUxMLg0KLS8vCQkJYnVmbGVuCQktCVRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlciwgbnVtYmVyIG9mIGJ5dGVzLiBDYW4gYmUgMC4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlOdW1iZXIgb2YgYnl0ZXMgdGhlIFVSSSBwYXRoIGNvbnN1bWVzLCBpbmNsdWRpbmcgdHJhaWxpbmcgemVyb3MuDQotLy8gQ29tbWVudHM6DQotLy8JCQlUaGUgVVJJIHBhdGggaXMgYWx3YXlzIGVuY29kZWQgaW4gNy1iaXQgQVNDSUkuDQotLy8gDQotLy8JCQlUaGUgcmV0dXJuIHZhbHVlIGFsd2F5cyBpbmRpY2F0ZWQgbnVtYmVyIG9mIGJ5dGVzIHJlcXVpcmVkIGZvciB0aGUgYnVmZmVyLCBldmVuIHdoZW4gdGhlcmUgaXMNCi0vLwkJCW5vIGJ1ZmZlciBzcGVjaWZpZWQsIG9yIHRoZSBidWZmZXIgc2l6ZSBpcyBsZXNzIHRoZW4gcmVxdWlyZWQuIEluIHRoaXMgY2FzZSwgdGhlIGJ1ZmZlciB3aWxsIG5vdA0KLS8vCQkJYmUgbW9kaWZpZWQuDQotLy8NCi1ETExFWFBPUlQgdW5zaWduZWQgbG9uZyBTVERDQUxMIEZQREZBY3Rpb25fR2V0VVJJUGF0aChGUERGX0RPQ1VNRU5UIGRvY3VtZW50LCBGUERGX0FDVElPTiBhY3Rpb24sIA0KLQkJCQkJCQkJCQkJCQkgIHZvaWQqIGJ1ZmZlciwgdW5zaWduZWQgbG9uZyBidWZsZW4pOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGRGVzdF9HZXRQYWdlSW5kZXgNCi0vLwkJCUdldCBwYWdlIGluZGV4IG9mIGEgZGVzdGluYXRpb24uDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCWRvY3VtZW50CS0JSGFuZGxlIHRvIHRoZSBkb2N1bWVudC4NCi0vLwkJCWRlc3QJCS0JSGFuZGxlIHRvIHRoZSBkZXN0aW5hdGlvbi4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlUaGUgcGFnZSBpbmRleC4gU3RhcnRpbmcgZnJvbSAwIGZvciB0aGUgZmlyc3QgcGFnZS4NCi0vLw0KLURMTEVYUE9SVCB1bnNpZ25lZCBsb25nIFNURENBTEwgRlBERkRlc3RfR2V0UGFnZUluZGV4KEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsIEZQREZfREVTVCBkZXN0KTsNCi0NCi0vLyBGdW5jdGlvbjogRlBERkxpbmtfR2V0TGlua0F0UG9pbnQNCi0vLwkJCUZpbmQgYSBsaW5rIGF0IHNwZWNpZmllZCBwb2ludCBvbiBhIGRvY3VtZW50IHBhZ2UuDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCXBhZ2UJCS0JSGFuZGxlIHRvIHRoZSBkb2N1bWVudCBwYWdlLg0KLS8vCQkJeAkJCS0JVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQsIHNwZWNpZmllZCBpbiBwYWdlIGNvb3JkaW5hdGUgc3lzdGVtLg0KLS8vCQkJeQkJCS0JVGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQsIHNwZWNpZmllZCBpbiBwYWdlIGNvb3JkaW5hdGUgc3lzdGVtLg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCUhhbmRsZSB0byB0aGUgbGluay4gTlVMTCBpZiBubyBsaW5rIGZvdW5kIGF0IHRoYXQgcG9pbnQuDQotLy8gQ29tbWVudHM6DQotLy8JCQlUaGUgcG9pbnQgY29vcmRpbmF0ZXMgYXJlIHNwZWNpZmllZCBpbiBwYWdlIGNvb3JkaW5hdGUgc3lzdGVtLiBZb3UgY2FuIGNvbnZlcnQgY29vcmRpbmF0ZXMgDQotLy8JCQlmcm9tIHNjcmVlbiBzeXN0ZW0gdG8gcGFnZSBzeXN0ZW0gdXNpbmcgRlBERl9EZXZpY2VUb1BhZ2UgZnVuY3Rpb25zLg0KLS8vDQotRExMRVhQT1JUIEZQREZfTElOSyBTVERDQUxMIEZQREZMaW5rX0dldExpbmtBdFBvaW50KEZQREZfUEFHRSBwYWdlLCBkb3VibGUgeCwgZG91YmxlIHkpOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGTGlua19HZXREZXN0DQotLy8JCQlHZXQgZGVzdGluYXRpb24gaW5mbyBvZiBhIGxpbmsuDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCWRvY3VtZW50CS0JSGFuZGxlIHRvIHRoZSBkb2N1bWVudC4NCi0vLwkJCWxpbmsJCS0JSGFuZGxlIHRvIHRoZSBsaW5rLiBSZXR1cm5lZCBieSBGUERGTGlua19HZXRMaW5rQXRQb2ludC4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlIYW5kbGUgdG8gdGhlIGRlc3RpbmF0aW9uLiBOVUxMIGlmIHRoZXJlIGlzIG5vIGRlc3RpbmF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluaywgaW4gdGhpcyBjYXNlDQotLy8JCQl0aGUgYXBwbGljYXRpb24gc2hvdWxkIHRyeSBGUERGTGlua19HZXRBY3Rpb24uDQotLy8NCi1ETExFWFBPUlQgRlBERl9ERVNUIFNURENBTEwgRlBERkxpbmtfR2V0RGVzdChGUERGX0RPQ1VNRU5UIGRvY3VtZW50LCBGUERGX0xJTksgbGluayk7DQotDQotLy8gRnVuY3Rpb246IEZQREZMaW5rX0dldEFjdGlvbg0KLS8vCQkJR2V0IGFjdGlvbiBpbmZvIG9mIGEgbGluay4NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vCQkJbGluawkJLQlIYW5kbGUgdG8gdGhlIGxpbmsuDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJSGFuZGxlIHRvIHRoZSBhY3Rpb24uIE5VTEwgaWYgdGhlcmUgaXMgbm8gYWN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluay4NCi0vLw0KLURMTEVYUE9SVCBGUERGX0FDVElPTiBTVERDQUxMIEZQREZMaW5rX0dldEFjdGlvbihGUERGX0xJTksgbGluayk7DQotDQotLy8gRnVuY3Rpb246IEZQREZMaW5rX0VudW1lcmF0ZQ0KLS8vCQkJVGhpcyBmdW5jdGlvbiB3b3VsZCBlbnVtZXJhdGUgYWxsIHRoZSBsaW5rIGFubm90YXRpb25zIGluIGEgc2luZ2xlIFBERiBwYWdlLg0KLS8vIFBhcmFtZXRlcnM6DQotLy8JCQlwYWdlW2luXQkJCS0JSGFuZGxlIHRvIHRoZSBwYWdlLg0KLS8vCQkJc3RhcnRQb3NbaW4sb3V0XQktCVRoZSBzdGFydCBwb3NpdGlvbiB0byBlbnVtZXJhdGUgdGhlIGxpbmsgYW5ub3RhdGlvbnMsIHdoaWNoIHNob3VsZCBiZSBzcGVjaWZpZWQgdG8gc3RhcnQgZnJvbSANCi0vLwkJCQkJCQkJLQkwIGZvciB0aGUgZmlyc3QgY2FsbCwgYW5kIHdvdWxkIHJlY2VpdmUgdGhlIG5leHQgcG9zaXRpb24gZm9yIGVudW1lcmF0aW5nIHRvIHN0YXJ0IGZyb20uDQotLy8JCQlsaW5rQW5ub3Rbb3V0XQkJLQlSZWNlaXZlIHRoZSBsaW5rIGhhbmRsZS4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlUUlVFIGlmIHN1Y2NjZWVkLCBlbHNlIEZhbHNlOw0KLS8vDQotRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZMaW5rX0VudW1lcmF0ZShGUERGX1BBR0UgcGFnZSwgaW50KiBzdGFydFBvcywgRlBERl9MSU5LKiBsaW5rQW5ub3QpOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGTGlua19HZXRBbm5vdFJlY3QNCi0vLwkJCUdldCB0aGUgYW5ub3RhdGlvbiByZWN0YW5nbGUuIChTcGVjaWZpZWQgYnkgdGhlIKGwUmVjdKGxIGVudHJ5IG9mIGFubm90YXRpb24gZGljdGlvbmFyeSkuDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCWxpbmtBbm5vdFtpbl0JCS0JSGFuZGxlIHRvIHRoZSBsaW5rIGFubm90YXRpb24uDQotLy8JCQlyZWN0W291dF0JCQktCVRoZSBhbm5vdGF0aW9uIHJlY3QuDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJVFJVRSBpZiBzdWNjY2VlZCwgZWxzZSBGYWxzZTsNCi0vLw0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGTGlua19HZXRBbm5vdFJlY3QoRlBERl9MSU5LIGxpbmtBbm5vdCwgRlNfUkVDVEYqIHJlY3QpOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGTGlua19Db3VudFF1YWRQb2ludHMNCi0vLwkJCUdldCB0aGUgY291bnQgb2YgcXVhZHJpbGF0ZXJhbCBwb2ludHMgdG8gdGhlIGxpbmsgYW5ub3RhdGlvbi4NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vCQkJbGlua0Fubm90W2luXQkJLQlIYW5kbGUgdG8gdGhlIGxpbmsgYW5ub3RhdGlvbi4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlUaGUgY291bnQgb2YgcXVhZHJpbGF0ZXJhbCBwb2ludHMuDQotLy8NCi1ETExFWFBPUlQgaW50IFNURENBTEwgRlBERkxpbmtfQ291bnRRdWFkUG9pbnRzKEZQREZfTElOSyBsaW5rQW5ub3QpOw0KLQ0KLS8qIF9GU19ERUZfU1RSVUNUVVJFX1FVQURQT0lOVFNGXyAqLw0KLSNpZm5kZWYgX0ZTX0RFRl9TVFJVQ1RVUkVfUVVBRFBPSU5UU0ZfDQotI2RlZmluZSBfRlNfREVGX1NUUlVDVFVSRV9RVUFEUE9JTlRTRl8NCi10eXBlZGVmIHN0cnVjdCBfRlNfUVVBRFBPSU5UU0YNCi17DQotCUZTX0ZMT0FUICB4MTsNCi0JRlNfRkxPQVQgIHkxOw0KLQlGU19GTE9BVCAgeDI7DQotCUZTX0ZMT0FUICB5MjsNCi0JRlNfRkxPQVQgIHgzOw0KLQlGU19GTE9BVCAgeTM7DQotCUZTX0ZMT0FUICB4NDsNCi0JRlNfRkxPQVQgIHk0Ow0KLX0gRlNfUVVBRFBPSU5UU0Y7DQotI2VuZGlmIC8qIF9GU19ERUZfU1RSVUNUVVJFX1FVQURQT0lOVFNGXyAqLw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGTGlua19HZXRRdWFkUG9pbnRzDQotLy8JCQlHZXQgdGhlIHF1YWRyaWxhdGVyYWwgcG9pbnRzIGZvciB0aGUgc3BlY2lmaWVkIGluZGV4IGluIHRoZSBsaW5rIGFubm90YXRpb24uDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCWxpbmtBbm5vdFtpbl0JCS0JSGFuZGxlIHRvIHRoZSBsaW5rIGFubm90YXRpb24uDQotLy8JCQlxdWFkSW5kZXhbaW5dCQktCVRoZSBzcGVjaWZpZWQgcXVhZCBwb2ludHMgaW5kZXguDQotLy8JCQlxdWFkUG9pbnRzW291dF0JCS0JUmVjZWl2ZSB0aGUgcXVhZHJpbGF0ZXJhbCBwb2ludHMuDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJVHJ1ZSBpZiBzdWNjZWVkLCBlbHNlIEZhbHNlLg0KLS8vDQotRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZMaW5rX0dldFF1YWRQb2ludHMoRlBERl9MSU5LIGxpbmtBbm5vdCwgaW50IHF1YWRJbmRleCwgRlNfUVVBRFBPSU5UU0YqIHF1YWRQb2ludHMpOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGX0dldE1ldGFUZXh0DQotLy8JCQlHZXQgYSB0ZXh0IGZyb20gbWV0YSBkYXRhIG9mIHRoZSBkb2N1bWVudC4gUmVzdWx0IGlzIGVuY29kZWQgaW4gVVRGLTE2TEUuDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCWRvYwkJCS0JSGFuZGxlIHRvIGEgZG9jdW1lbnQNCi0vLwkJCXRhZwkJCS0JVGhlIHRhZyBmb3IgdGhlIG1ldGEgZGF0YS4gQ3VycmVudGx5LCBJdCBjYW4gYmUgIlRpdGxlIiwgIkF1dGhvciIsIA0KLS8vCQkJCQkJCSJTdWJqZWN0IiwgIktleXdvcmRzIiwgIkNyZWF0b3IiLCAiUHJvZHVjZXIiLCAiQ3JlYXRpb25EYXRlIiwgb3IgIk1vZERhdGUiLg0KLS8vCQkJCQkJCUZvciBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiB0aGVzZSB0YWdzIGFuZCB0aGVpciByZXNwZWN0aXZlIHZhbHVlcywNCi0vLwkJCQkJCQlwbGVhc2UgcmVmZXIgdG8gUERGIFJlZmVyZW5jZSAxLjYsIHNlY3Rpb24gMTAuMi4xLCAiRG9jdW1lbnQgSW5mb3JtYXRpb24gRGljdGlvbmFyeSIuDQotLy8JCQlidWZmZXIJCS0JQSBidWZmZXIgZm9yIG91dHB1dCB0aGUgdGl0bGUuIENhbiBiZSBOVUxMLg0KLS8vCQkJYnVmbGVuCQktCVRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlciwgbnVtYmVyIG9mIGJ5dGVzLiBDYW4gYmUgMC4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlOdW1iZXIgb2YgYnl0ZXMgdGhlIHRpdGxlIGNvbnN1bWVzLCBpbmNsdWRpbmcgdHJhaWxpbmcgemVyb3MuDQotLy8gQ29tbWVudHM6DQotLy8JCQlObyBtYXR0ZXIgb24gd2hhdCBwbGF0Zm9ybSwgdGhlIHRpdGxlIGlzIGFsd2F5cyBvdXRwdXQgaW4gVVRGLTE2TEUgZW5jb2RpbmcsIHdoaWNoIG1lYW5zIHRoZSBidWZmZXIgDQotLy8JCQljYW4gYmUgcmVnYXJkZWQgYXMgYW4gYXJyYXkgb2YgV09SRCAob24gSW50ZWwgYW5kIGNvbXBhdGlibGUgQ1BVcyksIGVhY2ggV09SRCByZXByZXNlbnQgdGhlIFVuaWNvZGUgb2YgDQotLy8JCQlhIGNoYXJhY3RlciAoc29tZSBzcGVjaWFsIFVuaWNvZGUgbWF5IHRha2UgMiBXT1JEcykuIFRoZSBzdHJpbmcgaXMgZm9sbG93ZWQgYnkgdHdvIGJ5dGVzIG9mIHplcm8gDQotLy8JCQlpbmRpY2F0aW5nIGVuZCBvZiB0aGUgc3RyaW5nLg0KLS8vDQotLy8JCQlUaGUgcmV0dXJuIHZhbHVlIGFsd2F5cyBpbmRpY2F0ZWQgbnVtYmVyIG9mIGJ5dGVzIHJlcXVpcmVkIGZvciB0aGUgYnVmZmVyLCBldmVuIHdoZW4gdGhlcmUgaXMNCi0vLwkJCW5vIGJ1ZmZlciBzcGVjaWZpZWQsIG9yIHRoZSBidWZmZXIgc2l6ZSBpcyBsZXNzIHRoZW4gcmVxdWlyZWQuIEluIHRoaXMgY2FzZSwgdGhlIGJ1ZmZlciB3aWxsIG5vdA0KLS8vCQkJYmUgbW9kaWZpZWQuDQotLy8NCi1ETExFWFBPUlQgdW5zaWduZWQgbG9uZyBTVERDQUxMIEZQREZfR2V0TWV0YVRleHQoRlBERl9ET0NVTUVOVCBkb2MsIEZQREZfQllURVNUUklORyB0YWcsDQotCQkJCQkJCQkJCQkJIHZvaWQqIGJ1ZmZlciwgdW5zaWduZWQgbG9uZyBidWZsZW4pOw0KLQ0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX07DQotI2VuZGlmDQotDQotI2VuZGlmCS8vIF9GUERGRE9DX0hfDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlBERkRPQ19IXworI2RlZmluZSBfRlBERkRPQ19IXworCisjaW5jbHVkZSAiZnBkZnZpZXcuaCIKKworLy8gRXhwb3J0ZWQgRnVuY3Rpb25zCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8vIEZ1bmN0aW9uOiBGUERGQm9va21hcmtfRmluZAorLy8JCQlGaW5kIGEgYm9va21hcmsgaW4gdGhlIGRvY3VtZW50LCB1c2luZyB0aGUgYm9va21hcmsgdGl0bGUuCisvLyBQYXJhbWV0ZXJzOiAKKy8vCQkJZG9jdW1lbnQJLQlIYW5kbGUgdG8gdGhlIGRvY3VtZW50LiBSZXR1cm5lZCBieSBGUERGX0xvYWREb2N1bWVudCBvciBGUERGX0xvYWRNZW1Eb2N1bWVudC4KKy8vCQkJdGl0bGUJCS0JVGhlIFVURi0xNkxFIGVuY29kZWQgVW5pY29kZSBzdHJpbmcgZm9yIHRoZSBib29rbWFyayB0aXRsZSB0byBiZSBzZWFyY2hlZC4gQ2FuJ3QgYmUgTlVMTC4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJSGFuZGxlIHRvIHRoZSBmb3VuZCBib29rbWFyayBpdGVtLiBOVUxMIGlmIHRoZSB0aXRsZSBjYW4ndCBiZSBmb3VuZC4KKy8vIENvbW1lbnRzOgorLy8JCQlJdCBhbHdheXMgcmV0dXJucyB0aGUgZmlyc3QgZm91bmQgYm9va21hcmsgaWYgbW9yZSB0aGFuIG9uZSBib29rbWFya3MgaGF2ZSB0aGUgc2FtZSB0aXRsZS4KKy8vCitETExFWFBPUlQgRlBERl9CT09LTUFSSyBTVERDQUxMIEZQREZCb29rbWFya19GaW5kKEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsIEZQREZfV0lERVNUUklORyB0aXRsZSk7CisKKy8vIEZ1bmN0aW9uOiBGUERGQm9va21hcmtfR2V0RGVzdAorLy8JCQlHZXQgdGhlIGRlc3RpbmF0aW9uIGFzc29jaWF0ZWQgd2l0aCBhIGJvb2ttYXJrIGl0ZW0uCisvLyBQYXJhbWV0ZXJzOgorLy8JCQlkb2N1bWVudAktCUhhbmRsZSB0byB0aGUgZG9jdW1lbnQuCisvLwkJCWJvb2ttYXJrCS0JSGFuZGxlIHRvIHRoZSBib29rbWFyay4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJSGFuZGxlIHRvIHRoZSBkZXN0aW5hdGlvbiBkYXRhLiBOVUxMIGlmIG5vIGRlc3RpbmF0aW9uIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGJvb2ttYXJrLgorLy8KK0RMTEVYUE9SVCBGUERGX0RFU1QgU1REQ0FMTCBGUERGQm9va21hcmtfR2V0RGVzdChGUERGX0RPQ1VNRU5UIGRvY3VtZW50LCBGUERGX0JPT0tNQVJLIGJvb2ttYXJrKTsKKworLy8gRnVuY3Rpb246IEZQREZCb29rbWFya19HZXRBY3Rpb24KKy8vCQkJR2V0IHRoZSBhY3Rpb24gYXNzb2NpYXRlZCB3aXRoIGEgYm9va21hcmsgaXRlbS4KKy8vIFBhcmFtZXRlcnM6CisvLwkJCWJvb2ttYXJrCS0JSGFuZGxlIHRvIHRoZSBib29rbWFyay4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJSGFuZGxlIHRvIHRoZSBhY3Rpb24gZGF0YS4gTlVMTCBpZiBubyBhY3Rpb24gaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYm9va21hcmsuIEluIHRoaXMgY2FzZSwgdGhlIAorLy8JCQlhcHBsaWNhdGlvbiBzaG91bGQgdHJ5IEZQREZCb29rbWFya19HZXREZXN0LgorLy8KK0RMTEVYUE9SVCBGUERGX0FDVElPTiBTVERDQUxMIEZQREZCb29rbWFya19HZXRBY3Rpb24oRlBERl9CT09LTUFSSyBib29rbWFyayk7CisKKyNkZWZpbmUgUERGQUNUSU9OX1VOU1VQUE9SVEVECQkwCQkvLyBVbnN1cHBvcnRlZCBhY3Rpb24gdHlwZS4KKyNkZWZpbmUgUERGQUNUSU9OX0dPVE8JCQkJMQkJLy8gR28gdG8gYSBkZXN0aW5hdGlvbiB3aXRoaW4gY3VycmVudCBkb2N1bWVudC4KKyNkZWZpbmUgUERGQUNUSU9OX1JFTU9URUdPVE8JCTIJCS8vIEdvIHRvIGEgZGVzdGluYXRpb24gd2l0aGluIGFub3RoZXIgZG9jdW1lbnQuCisjZGVmaW5lIFBERkFDVElPTl9VUkkJCQkJMwkJLy8gVW5pdmVyc2FsIFJlc291cmNlIElkZW50aWZpZXIsIGluY2x1ZGluZyB3ZWIgcGFnZXMgYW5kIAorCQkJCQkJCQkJCQkvLyBvdGhlciBJbnRlcm5ldCBiYXNlZCByZXNvdXJjZXMuCisjZGVmaW5lIFBERkFDVElPTl9MQVVOQ0gJCQk0CQkvLyBMYXVuY2ggYW4gYXBwbGljYXRpb24gb3Igb3BlbiBhIGZpbGUuCisKKy8vIEZ1bmN0aW9uOiBGUERGQWN0aW9uX0dldFR5cGUKKy8vCQkJR2V0IHR5cGUgb2YgYW4gYWN0aW9uLgorLy8gUGFyYW1ldGVyczoKKy8vCQkJYWN0aW9uCQktCUhhbmRsZSB0byB0aGUgYWN0aW9uLgorLy8gUmV0dXJuIHZhbHVlOgorLy8JCQlBIHR5cGUgbnVtYmVyIGFzIGRlZmluZWQgYWJvdmUuCisvLworRExMRVhQT1JUIHVuc2lnbmVkIGxvbmcgU1REQ0FMTCBGUERGQWN0aW9uX0dldFR5cGUoRlBERl9BQ1RJT04gYWN0aW9uKTsKKworLy8gRnVuY3Rpb246IEZQREZBY3Rpb25fR2V0RGVzdAorLy8JCQlHZXQgZGVzdGluYXRpb24gb2YgYW4gYWN0aW9uLgorLy8gUGFyYW1ldGVyczoKKy8vCQkJZG9jdW1lbnQJLQlIYW5kbGUgdG8gdGhlIGRvY3VtZW50LgorLy8JCQlhY3Rpb24JCS0JSGFuZGxlIHRvIHRoZSBhY3Rpb24uIEl0IG11c3QgYmUgYSBHT1RPIG9yIFJFTU9URUdPVE8gYWN0aW9uLgorLy8gUmV0dXJuIHZhbHVlOgorLy8JCQlIYW5kbGUgdG8gdGhlIGRlc3RpbmF0aW9uIGRhdGEuCisvLyBDb21tZW50czoKKy8vCQkJSW4gY2FzZSBvZiByZW1vdGUgZ290byBhY3Rpb24sIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgZmlyc3QgdXNlIEZQREZBY3Rpb25fR2V0RmlsZVBhdGggdG8KKy8vCQkJZ2V0IGZpbGUgcGF0aCwgdGhlbiBsb2FkIHRoYXQgcGFydGljdWxhciBkb2N1bWVudCwgYW5kIHVzZSBpdHMgZG9jdW1lbnQgaGFuZGxlIHRvIGNhbGwgdGhpcworLy8JCQlmdW5jdGlvbi4KKy8vCitETExFWFBPUlQgRlBERl9ERVNUIFNURENBTEwgRlBERkFjdGlvbl9HZXREZXN0KEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsIEZQREZfQUNUSU9OIGFjdGlvbik7CisKKy8vIEZ1bmN0aW9uOiBGUERGQWN0aW9uX0dldFVSSVBhdGgKKy8vCQkJR2V0IFVSSSBwYXRoIG9mIGEgVVJJIGFjdGlvbi4KKy8vIFBhcmFtZXRlcnM6CisvLwkJCWRvY3VtZW50CS0JSGFuZGxlIHRvIHRoZSBkb2N1bWVudC4KKy8vCQkJYWN0aW9uCQktCUhhbmRsZSB0byB0aGUgYWN0aW9uLiBNdXN0IGJlIGEgVVJJIGFjdGlvbi4KKy8vCQkJYnVmZmVyCQktCUEgYnVmZmVyIGZvciBvdXRwdXQgdGhlIHBhdGggc3RyaW5nLiBDYW4gYmUgTlVMTC4KKy8vCQkJYnVmbGVuCQktCVRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlciwgbnVtYmVyIG9mIGJ5dGVzLiBDYW4gYmUgMC4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJTnVtYmVyIG9mIGJ5dGVzIHRoZSBVUkkgcGF0aCBjb25zdW1lcywgaW5jbHVkaW5nIHRyYWlsaW5nIHplcm9zLgorLy8gQ29tbWVudHM6CisvLwkJCVRoZSBVUkkgcGF0aCBpcyBhbHdheXMgZW5jb2RlZCBpbiA3LWJpdCBBU0NJSS4KKy8vIAorLy8JCQlUaGUgcmV0dXJuIHZhbHVlIGFsd2F5cyBpbmRpY2F0ZWQgbnVtYmVyIG9mIGJ5dGVzIHJlcXVpcmVkIGZvciB0aGUgYnVmZmVyLCBldmVuIHdoZW4gdGhlcmUgaXMKKy8vCQkJbm8gYnVmZmVyIHNwZWNpZmllZCwgb3IgdGhlIGJ1ZmZlciBzaXplIGlzIGxlc3MgdGhlbiByZXF1aXJlZC4gSW4gdGhpcyBjYXNlLCB0aGUgYnVmZmVyIHdpbGwgbm90CisvLwkJCWJlIG1vZGlmaWVkLgorLy8KK0RMTEVYUE9SVCB1bnNpZ25lZCBsb25nIFNURENBTEwgRlBERkFjdGlvbl9HZXRVUklQYXRoKEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsIEZQREZfQUNUSU9OIGFjdGlvbiwgCisJCQkJCQkJCQkJCQkJICB2b2lkKiBidWZmZXIsIHVuc2lnbmVkIGxvbmcgYnVmbGVuKTsKKworLy8gRnVuY3Rpb246IEZQREZEZXN0X0dldFBhZ2VJbmRleAorLy8JCQlHZXQgcGFnZSBpbmRleCBvZiBhIGRlc3RpbmF0aW9uLgorLy8gUGFyYW1ldGVyczoKKy8vCQkJZG9jdW1lbnQJLQlIYW5kbGUgdG8gdGhlIGRvY3VtZW50LgorLy8JCQlkZXN0CQktCUhhbmRsZSB0byB0aGUgZGVzdGluYXRpb24uCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCVRoZSBwYWdlIGluZGV4LiBTdGFydGluZyBmcm9tIDAgZm9yIHRoZSBmaXJzdCBwYWdlLgorLy8KK0RMTEVYUE9SVCB1bnNpZ25lZCBsb25nIFNURENBTEwgRlBERkRlc3RfR2V0UGFnZUluZGV4KEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsIEZQREZfREVTVCBkZXN0KTsKKworLy8gRnVuY3Rpb246IEZQREZMaW5rX0dldExpbmtBdFBvaW50CisvLwkJCUZpbmQgYSBsaW5rIGF0IHNwZWNpZmllZCBwb2ludCBvbiBhIGRvY3VtZW50IHBhZ2UuCisvLyBQYXJhbWV0ZXJzOgorLy8JCQlwYWdlCQktCUhhbmRsZSB0byB0aGUgZG9jdW1lbnQgcGFnZS4KKy8vCQkJeAkJCS0JVGhlIHggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQsIHNwZWNpZmllZCBpbiBwYWdlIGNvb3JkaW5hdGUgc3lzdGVtLgorLy8JCQl5CQkJLQlUaGUgeSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCwgc3BlY2lmaWVkIGluIHBhZ2UgY29vcmRpbmF0ZSBzeXN0ZW0uCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCUhhbmRsZSB0byB0aGUgbGluay4gTlVMTCBpZiBubyBsaW5rIGZvdW5kIGF0IHRoYXQgcG9pbnQuCisvLyBDb21tZW50czoKKy8vCQkJVGhlIHBvaW50IGNvb3JkaW5hdGVzIGFyZSBzcGVjaWZpZWQgaW4gcGFnZSBjb29yZGluYXRlIHN5c3RlbS4gWW91IGNhbiBjb252ZXJ0IGNvb3JkaW5hdGVzIAorLy8JCQlmcm9tIHNjcmVlbiBzeXN0ZW0gdG8gcGFnZSBzeXN0ZW0gdXNpbmcgRlBERl9EZXZpY2VUb1BhZ2UgZnVuY3Rpb25zLgorLy8KK0RMTEVYUE9SVCBGUERGX0xJTksgU1REQ0FMTCBGUERGTGlua19HZXRMaW5rQXRQb2ludChGUERGX1BBR0UgcGFnZSwgZG91YmxlIHgsIGRvdWJsZSB5KTsKKworLy8gRnVuY3Rpb246IEZQREZMaW5rX0dldERlc3QKKy8vCQkJR2V0IGRlc3RpbmF0aW9uIGluZm8gb2YgYSBsaW5rLgorLy8gUGFyYW1ldGVyczoKKy8vCQkJZG9jdW1lbnQJLQlIYW5kbGUgdG8gdGhlIGRvY3VtZW50LgorLy8JCQlsaW5rCQktCUhhbmRsZSB0byB0aGUgbGluay4gUmV0dXJuZWQgYnkgRlBERkxpbmtfR2V0TGlua0F0UG9pbnQuCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCUhhbmRsZSB0byB0aGUgZGVzdGluYXRpb24uIE5VTEwgaWYgdGhlcmUgaXMgbm8gZGVzdGluYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBsaW5rLCBpbiB0aGlzIGNhc2UKKy8vCQkJdGhlIGFwcGxpY2F0aW9uIHNob3VsZCB0cnkgRlBERkxpbmtfR2V0QWN0aW9uLgorLy8KK0RMTEVYUE9SVCBGUERGX0RFU1QgU1REQ0FMTCBGUERGTGlua19HZXREZXN0KEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsIEZQREZfTElOSyBsaW5rKTsKKworLy8gRnVuY3Rpb246IEZQREZMaW5rX0dldEFjdGlvbgorLy8JCQlHZXQgYWN0aW9uIGluZm8gb2YgYSBsaW5rLgorLy8gUGFyYW1ldGVyczoKKy8vCQkJbGluawkJLQlIYW5kbGUgdG8gdGhlIGxpbmsuCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCUhhbmRsZSB0byB0aGUgYWN0aW9uLiBOVUxMIGlmIHRoZXJlIGlzIG5vIGFjdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGxpbmsuCisvLworRExMRVhQT1JUIEZQREZfQUNUSU9OIFNURENBTEwgRlBERkxpbmtfR2V0QWN0aW9uKEZQREZfTElOSyBsaW5rKTsKKworLy8gRnVuY3Rpb246IEZQREZMaW5rX0VudW1lcmF0ZQorLy8JCQlUaGlzIGZ1bmN0aW9uIHdvdWxkIGVudW1lcmF0ZSBhbGwgdGhlIGxpbmsgYW5ub3RhdGlvbnMgaW4gYSBzaW5nbGUgUERGIHBhZ2UuCisvLyBQYXJhbWV0ZXJzOgorLy8JCQlwYWdlW2luXQkJCS0JSGFuZGxlIHRvIHRoZSBwYWdlLgorLy8JCQlzdGFydFBvc1tpbixvdXRdCS0JVGhlIHN0YXJ0IHBvc2l0aW9uIHRvIGVudW1lcmF0ZSB0aGUgbGluayBhbm5vdGF0aW9ucywgd2hpY2ggc2hvdWxkIGJlIHNwZWNpZmllZCB0byBzdGFydCBmcm9tIAorLy8JCQkJCQkJCS0JMCBmb3IgdGhlIGZpcnN0IGNhbGwsIGFuZCB3b3VsZCByZWNlaXZlIHRoZSBuZXh0IHBvc2l0aW9uIGZvciBlbnVtZXJhdGluZyB0byBzdGFydCBmcm9tLgorLy8JCQlsaW5rQW5ub3Rbb3V0XQkJLQlSZWNlaXZlIHRoZSBsaW5rIGhhbmRsZS4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJVFJVRSBpZiBzdWNjY2VlZCwgZWxzZSBGYWxzZTsKKy8vCitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERkxpbmtfRW51bWVyYXRlKEZQREZfUEFHRSBwYWdlLCBpbnQqIHN0YXJ0UG9zLCBGUERGX0xJTksqIGxpbmtBbm5vdCk7CisKKy8vIEZ1bmN0aW9uOiBGUERGTGlua19HZXRBbm5vdFJlY3QKKy8vCQkJR2V0IHRoZSBhbm5vdGF0aW9uIHJlY3RhbmdsZS4gKFNwZWNpZmllZCBieSB0aGUgobBSZWN0obEgZW50cnkgb2YgYW5ub3RhdGlvbiBkaWN0aW9uYXJ5KS4KKy8vIFBhcmFtZXRlcnM6CisvLwkJCWxpbmtBbm5vdFtpbl0JCS0JSGFuZGxlIHRvIHRoZSBsaW5rIGFubm90YXRpb24uCisvLwkJCXJlY3Rbb3V0XQkJCS0JVGhlIGFubm90YXRpb24gcmVjdC4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJVFJVRSBpZiBzdWNjY2VlZCwgZWxzZSBGYWxzZTsKKy8vCitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERkxpbmtfR2V0QW5ub3RSZWN0KEZQREZfTElOSyBsaW5rQW5ub3QsIEZTX1JFQ1RGKiByZWN0KTsKKworLy8gRnVuY3Rpb246IEZQREZMaW5rX0NvdW50UXVhZFBvaW50cworLy8JCQlHZXQgdGhlIGNvdW50IG9mIHF1YWRyaWxhdGVyYWwgcG9pbnRzIHRvIHRoZSBsaW5rIGFubm90YXRpb24uCisvLyBQYXJhbWV0ZXJzOgorLy8JCQlsaW5rQW5ub3RbaW5dCQktCUhhbmRsZSB0byB0aGUgbGluayBhbm5vdGF0aW9uLgorLy8gUmV0dXJuIHZhbHVlOgorLy8JCQlUaGUgY291bnQgb2YgcXVhZHJpbGF0ZXJhbCBwb2ludHMuCisvLworRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZMaW5rX0NvdW50UXVhZFBvaW50cyhGUERGX0xJTksgbGlua0Fubm90KTsKKworLyogX0ZTX0RFRl9TVFJVQ1RVUkVfUVVBRFBPSU5UU0ZfICovCisjaWZuZGVmIF9GU19ERUZfU1RSVUNUVVJFX1FVQURQT0lOVFNGXworI2RlZmluZSBfRlNfREVGX1NUUlVDVFVSRV9RVUFEUE9JTlRTRl8KK3R5cGVkZWYgc3RydWN0IF9GU19RVUFEUE9JTlRTRgoreworCUZTX0ZMT0FUICB4MTsKKwlGU19GTE9BVCAgeTE7CisJRlNfRkxPQVQgIHgyOworCUZTX0ZMT0FUICB5MjsKKwlGU19GTE9BVCAgeDM7CisJRlNfRkxPQVQgIHkzOworCUZTX0ZMT0FUICB4NDsKKwlGU19GTE9BVCAgeTQ7Cit9IEZTX1FVQURQT0lOVFNGOworI2VuZGlmIC8qIF9GU19ERUZfU1RSVUNUVVJFX1FVQURQT0lOVFNGXyAqLworCisvLyBGdW5jdGlvbjogRlBERkxpbmtfR2V0UXVhZFBvaW50cworLy8JCQlHZXQgdGhlIHF1YWRyaWxhdGVyYWwgcG9pbnRzIGZvciB0aGUgc3BlY2lmaWVkIGluZGV4IGluIHRoZSBsaW5rIGFubm90YXRpb24uCisvLyBQYXJhbWV0ZXJzOgorLy8JCQlsaW5rQW5ub3RbaW5dCQktCUhhbmRsZSB0byB0aGUgbGluayBhbm5vdGF0aW9uLgorLy8JCQlxdWFkSW5kZXhbaW5dCQktCVRoZSBzcGVjaWZpZWQgcXVhZCBwb2ludHMgaW5kZXguCisvLwkJCXF1YWRQb2ludHNbb3V0XQkJLQlSZWNlaXZlIHRoZSBxdWFkcmlsYXRlcmFsIHBvaW50cy4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJVHJ1ZSBpZiBzdWNjZWVkLCBlbHNlIEZhbHNlLgorLy8KK0RMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGTGlua19HZXRRdWFkUG9pbnRzKEZQREZfTElOSyBsaW5rQW5ub3QsIGludCBxdWFkSW5kZXgsIEZTX1FVQURQT0lOVFNGKiBxdWFkUG9pbnRzKTsKKworLy8gRnVuY3Rpb246IEZQREZfR2V0TWV0YVRleHQKKy8vCQkJR2V0IGEgdGV4dCBmcm9tIG1ldGEgZGF0YSBvZiB0aGUgZG9jdW1lbnQuIFJlc3VsdCBpcyBlbmNvZGVkIGluIFVURi0xNkxFLgorLy8gUGFyYW1ldGVyczoKKy8vCQkJZG9jCQkJLQlIYW5kbGUgdG8gYSBkb2N1bWVudAorLy8JCQl0YWcJCQktCVRoZSB0YWcgZm9yIHRoZSBtZXRhIGRhdGEuIEN1cnJlbnRseSwgSXQgY2FuIGJlICJUaXRsZSIsICJBdXRob3IiLCAKKy8vCQkJCQkJCSJTdWJqZWN0IiwgIktleXdvcmRzIiwgIkNyZWF0b3IiLCAiUHJvZHVjZXIiLCAiQ3JlYXRpb25EYXRlIiwgb3IgIk1vZERhdGUiLgorLy8JCQkJCQkJRm9yIGRldGFpbGVkIGV4cGxhbmF0aW9uIG9mIHRoZXNlIHRhZ3MgYW5kIHRoZWlyIHJlc3BlY3RpdmUgdmFsdWVzLAorLy8JCQkJCQkJcGxlYXNlIHJlZmVyIHRvIFBERiBSZWZlcmVuY2UgMS42LCBzZWN0aW9uIDEwLjIuMSwgIkRvY3VtZW50IEluZm9ybWF0aW9uIERpY3Rpb25hcnkiLgorLy8JCQlidWZmZXIJCS0JQSBidWZmZXIgZm9yIG91dHB1dCB0aGUgdGl0bGUuIENhbiBiZSBOVUxMLgorLy8JCQlidWZsZW4JCS0JVGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyLCBudW1iZXIgb2YgYnl0ZXMuIENhbiBiZSAwLgorLy8gUmV0dXJuIHZhbHVlOgorLy8JCQlOdW1iZXIgb2YgYnl0ZXMgdGhlIHRpdGxlIGNvbnN1bWVzLCBpbmNsdWRpbmcgdHJhaWxpbmcgemVyb3MuCisvLyBDb21tZW50czoKKy8vCQkJTm8gbWF0dGVyIG9uIHdoYXQgcGxhdGZvcm0sIHRoZSB0aXRsZSBpcyBhbHdheXMgb3V0cHV0IGluIFVURi0xNkxFIGVuY29kaW5nLCB3aGljaCBtZWFucyB0aGUgYnVmZmVyIAorLy8JCQljYW4gYmUgcmVnYXJkZWQgYXMgYW4gYXJyYXkgb2YgV09SRCAob24gSW50ZWwgYW5kIGNvbXBhdGlibGUgQ1BVcyksIGVhY2ggV09SRCByZXByZXNlbnQgdGhlIFVuaWNvZGUgb2YgCisvLwkJCWEgY2hhcmFjdGVyIChzb21lIHNwZWNpYWwgVW5pY29kZSBtYXkgdGFrZSAyIFdPUkRzKS4gVGhlIHN0cmluZyBpcyBmb2xsb3dlZCBieSB0d28gYnl0ZXMgb2YgemVybyAKKy8vCQkJaW5kaWNhdGluZyBlbmQgb2YgdGhlIHN0cmluZy4KKy8vCisvLwkJCVRoZSByZXR1cm4gdmFsdWUgYWx3YXlzIGluZGljYXRlZCBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgZm9yIHRoZSBidWZmZXIsIGV2ZW4gd2hlbiB0aGVyZSBpcworLy8JCQlubyBidWZmZXIgc3BlY2lmaWVkLCBvciB0aGUgYnVmZmVyIHNpemUgaXMgbGVzcyB0aGVuIHJlcXVpcmVkLiBJbiB0aGlzIGNhc2UsIHRoZSBidWZmZXIgd2lsbCBub3QKKy8vCQkJYmUgbW9kaWZpZWQuCisvLworRExMRVhQT1JUIHVuc2lnbmVkIGxvbmcgU1REQ0FMTCBGUERGX0dldE1ldGFUZXh0KEZQREZfRE9DVU1FTlQgZG9jLCBGUERGX0JZVEVTVFJJTkcgdGFnLAorCQkJCQkJCQkJCQkJIHZvaWQqIGJ1ZmZlciwgdW5zaWduZWQgbG9uZyBidWZsZW4pOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfTsKKyNlbmRpZgorCisjZW5kaWYJLy8gX0ZQREZET0NfSF8KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9mcGRmZWRpdC5oIGIvZnBkZnNkay9pbmNsdWRlL2ZwZGZlZGl0LmgKaW5kZXggNTJmYjE0OC4uYzdkOGIwMSAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2ZwZGZlZGl0LmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2ZwZGZlZGl0LmgKQEAgLTEsMjM1ICsxLDIzNSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZglfRlBERkVESVRfSF8NCi0jZGVmaW5lCV9GUERGRURJVF9IXw0KLQ0KLSNpbmNsdWRlICJmcGRmdmlldy5oIg0KLQ0KLS8vIERlZmluZSBhbGwgdHlwZXMgdXNlZCBpbiB0aGUgU0RLLiBOb3RlIHRoZXkgY2FuIGJlIHNpbXBseSByZWdhcmRlZCBhcyBvcGFxdWUgcG9pbnRlcnMNCi0vLyBvciBsb25nIGludGVnZXIgbnVtYmVycy4NCi0NCi0jZGVmaW5lIEZQREZfQVJHQihhLHIsZyxiKQkJKCgoKEZYX0RXT1JEKSgoKEZYX0JZVEUpKGIpfCgoRlhfV09SRCkoKEZYX0JZVEUpKGcpKTw8OCkpfCgoKEZYX0RXT1JEKShGWF9CWVRFKShyKSk8PDE2KSkpKSB8ICgoKEZYX0RXT1JEKShGWF9CWVRFKShhKSk8PDI0KSkNCi0jZGVmaW5lIEZQREZfR2V0QlZhbHVlKGFyZ2IpICAgICgoRlhfQllURSkoYXJnYikpDQotI2RlZmluZSBGUERGX0dldEdWYWx1ZShhcmdiKSAgICAoKEZYX0JZVEUpKCgoRlhfV09SRCkoYXJnYikpID4+IDgpKQ0KLSNkZWZpbmUgRlBERl9HZXRSVmFsdWUoYXJnYikgICAgKChGWF9CWVRFKSgoYXJnYik+PjE2KSkNCi0jZGVmaW5lIEZQREZfR2V0QVZhbHVlKGFyZ2IpICAgICgoRlhfQllURSkoKGFyZ2IpPj4yNCkpDQotDQotI2lmZGVmIF9fY3BsdXNwbHVzDQotZXh0ZXJuICJDIiB7DQotI2VuZGlmDQotDQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLS8vDQotLy8gRG9jdW1lbnQgZnVuY3Rpb25zDQotLy8NCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotDQotLy8gRnVuY3Rpb246IEZQREZfQ3JlYXRlTmV3RG9jdW1lbnQNCi0vLwkJCUNyZWF0ZSBhIG5ldyBQREYgZG9jdW1lbnQuDQotLy8gUGFyYW1ldGVyczoJDQotLy8JCQlOb25lLg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCUEgaGFuZGxlIHRvIGEgZG9jdW1lbnQuIElmIGZhaWxlZCwgTlVMTCBpcyByZXR1cm5lZC4NCi1ETExFWFBPUlQgRlBERl9ET0NVTUVOVCBTVERDQUxMIEZQREZfQ3JlYXRlTmV3RG9jdW1lbnQoKTsNCi0NCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotLy8NCi0vLyBQYWdlIGZ1bmN0aW9ucw0KLS8vDQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGUGFnZV9OZXcNCi0vLwkJCUNvbnN0cnVjdCBhbiBlbXB0eSBwYWdlLg0KLS8vIFBhcmFtZXRlcnM6CQ0KLS8vCQkJZG9jdW1lbnQJLQlIYW5kbGUgdG8gZG9jdW1lbnQuIFJldHVybmVkIGJ5IEZQREZfTG9hZERvY3VtZW50IGFuZCBGUERGX0NyZWF0ZU5ld0RvY3VtZW50Lg0KLS8vCQkJcGFnZV9pbmRleAktCVRoZSBpbmRleCBvZiBhIHBhZ2UuDQotLy8JCQl3aWR0aAkJLQlUaGUgcGFnZSB3aWR0aC4NCi0vLwkJCWhlaWdodAkJLQlUaGUgcGFnZSBoZWlnaHQuDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJVGhlIGhhbmRsZSB0byB0aGUgcGFnZS4NCi0vLyBDb21tZW50czoNCi0vLwkJCUxvYWRlZCBwYWdlIGNhbiBiZSBkZWxldGVkIGJ5IEZQREZQYWdlX0RlbGV0ZS4NCi1ETExFWFBPUlQgRlBERl9QQUdFIFNURENBTEwgRlBERlBhZ2VfTmV3KEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsIGludCBwYWdlX2luZGV4LCBkb3VibGUgd2lkdGgsIGRvdWJsZSBoZWlnaHQpOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGUGFnZV9EZWxldGUNCi0vLwkJCURlbGV0ZSBhIFBERiBwYWdlLg0KLS8vIFBhcmFtZXRlcnM6CQ0KLS8vCQkJZG9jdW1lbnQJLQlIYW5kbGUgdG8gZG9jdW1lbnQuIFJldHVybmVkIGJ5IEZQREZfTG9hZERvY3VtZW50IGFuZCBGUERGX0NyZWF0ZU5ld0RvY3VtZW50Lg0KLS8vCQkJcGFnZV9pbmRleAktCVRoZSBpbmRleCBvZiBhIHBhZ2UuDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJTm9uZS4NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZQYWdlX0RlbGV0ZShGUERGX0RPQ1VNRU5UIGRvY3VtZW50LCBpbnQgcGFnZV9pbmRleCk7DQotDQotLy8gRnVuY3Rpb246IEZQREZQYWdlX0dldFJvdGF0aW9uDQotLy8JCQlHZXQgdGhlIHBhZ2Ugcm90YXRpb24uIE9uZSBvZiBmb2xsb3dpbmcgdmFsdWVzIHdpbGwgYmUgcmV0dXJuZWQ6IDAoMCksIDEoOTApLCAyKDE4MCksIDMoMjcwKS4NCi0vLyBQYXJhbWV0ZXJzOgkNCi0vLwkJCXBhZ2UJCS0JSGFuZGxlIHRvIGEgcGFnZS4gUmV0dXJuZWQgYnkgRlBERlBhZ2VfTmV3Lg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCVRoZSBQREYgcGFnZSByb3RhdGlvbi4NCi0vLyBDb21tZW50Og0KLS8vCQkJVGhlIFBERiBwYWdlIHJvdGF0aW9uIGlzIHJvdGF0ZWQgY2xvY2t3aXNlLg0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGUGFnZV9HZXRSb3RhdGlvbihGUERGX1BBR0UgcGFnZSk7DQotDQotLy8gRnVuY3Rpb246IEZQREZQYWdlX0luc2VydE9iamVjdA0KLS8vCQkJSW5zZXJ0IGFuIG9iamVjdCB0byB0aGUgcGFnZS4gVGhlIHBhZ2Ugb2JqZWN0IGlzIGF1dG9tYXRpY2FsbHkgZnJlZWQuDQotLy8gUGFyYW1ldGVyczoJDQotLy8JCQlwYWdlCQktCUhhbmRsZSB0byBhIHBhZ2UuIFJldHVybmVkIGJ5IEZQREZQYWdlX05ldy4NCi0vLwkJCXBhZ2Vfb2JqCS0JSGFuZGxlIHRvIGEgcGFnZSBvYmplY3QuIFJldHVybmVkIGJ5IEZQREZQYWdlT2JqX05ld1RleHRPYmosRlBERlBhZ2VPYmpfTmV3VGV4dE9iakV4IGFuZA0KLS8vCQkJCQkJCUZQREZQYWdlT2JqX05ld1BhdGhPYmouDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJTm9uZS4NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZQYWdlX0luc2VydE9iamVjdChGUERGX1BBR0UgcGFnZSwgRlBERl9QQUdFT0JKRUNUIHBhZ2Vfb2JqKTsNCi0NCi0vLyBGdW5jdGlvbjogRlBERlBhZ2VfQ291bnRPYmplY3QNCi0vLwkJCUdldCBudW1iZXIgb2YgcGFnZSBvYmplY3RzIGluc2lkZSB0aGUgcGFnZS4NCi0vLyBQYXJhbWV0ZXJzOgkNCi0vLwkJCXBhZ2UJCS0JSGFuZGxlIHRvIGEgcGFnZS4gUmV0dXJuZWQgYnkgRlBERlBhZ2VfTmV3Lg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCVRoZSBudW1iZXIgb2YgdGhlIHBhZ2Ugb2JqZWN0Lg0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGUGFnZV9Db3VudE9iamVjdChGUERGX1BBR0UgcGFnZSk7DQotDQotLy8gRnVuY3Rpb246IEZQREZQYWdlX0dldE9iamVjdA0KLS8vCQkJR2V0IHBhZ2Ugb2JqZWN0IGJ5IGluZGV4Lg0KLS8vIFBhcmFtZXRlcnM6CQ0KLS8vCQkJcGFnZQkJLQlIYW5kbGUgdG8gYSBwYWdlLiBSZXR1cm5lZCBieSBGUERGUGFnZV9OZXcuDQotLy8JCQlpbmRleAkJLQlUaGUgaW5kZXggb2YgYSBwYWdlIG9iamVjdC4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlUaGUgaGFuZGxlIG9mIHRoZSBwYWdlIG9iamVjdC4gTnVsbCBmb3IgZmFpbGVkLg0KLURMTEVYUE9SVCBGUERGX1BBR0VPQkpFQ1QgU1REQ0FMTCBGUERGUGFnZV9HZXRPYmplY3QoRlBERl9QQUdFIHBhZ2UsIGludCBpbmRleCk7DQotDQotLy8gRnVuY3Rpb246IEZQREZQYWdlX0hhc1RyYW5zcGFyZW5jeQ0KLS8vCQkJQ2hlY2sgdGhhdCB3aGV0aGVyIHRoZSBjb250ZW50IG9mIHNwZWNpZmllZCBQREYgcGFnZSBjb250YWlucyB0cmFuc3BhcmVuY3kuDQotLy8gUGFyYW1ldGVyczoJDQotLy8JCQlwYWdlCQktCUhhbmRsZSB0byBhIHBhZ2UuIFJldHVybmVkIGJ5IEZQREZQYWdlX05ldyBvciBGUERGX0xvYWRQYWdlLg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCVRSVUUgbWVhbnMgdGhhdCB0aGUgUERGIHBhZ2UgZG9lcyBjb250YWlucyB0cmFuc3BhcmVuY3kuDQotLy8JCQlPdGhlcndpc2UsIHJldHVybnMgRkFMU0UuDQotRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZQYWdlX0hhc1RyYW5zcGFyZW5jeShGUERGX1BBR0UgcGFnZSk7DQotDQotLy8gRnVuY3Rpb246IEZQREZQYWdlX0dlbmVyYXRlQ29udGVudA0KLS8vCQkJR2VuZXJhdGUgUERGIFBhZ2UgY29udGVudC4NCi0vLyBQYXJhbWV0ZXJzOgkNCi0vLwkJCXBhZ2UJCS0JSGFuZGxlIHRvIGEgcGFnZS4gUmV0dXJuZWQgYnkgRlBERlBhZ2VfTmV3Lg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCVRydWUgaWYgc3VjY2Vzc2Z1bCwgZmFsc2Ugb3RoZXJ3aXNlLg0KLS8vIENvbW1lbnQ6DQotLy8JCQlCZWZvcmUgeW91IHNhdmUgdGhlIHBhZ2UgdG8gYSBmaWxlLCBvciByZWxvYWQgdGhlIHBhZ2UsIHlvdSBtdXN0IGNhbGwgdGhlIEZQREZQYWdlX0dlbmVyYXRlQ29udGVudCBmdW5jdGlvbi4NCi0vLwkJCU9yIHRoZSBjaGFuZ2VkIGluZm9ybWF0aW9uIHdpbGwgYmUgbG9zdC4NCi1ETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERlBhZ2VfR2VuZXJhdGVDb250ZW50KEZQREZfUEFHRSBwYWdlKTsNCi0NCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotLy8NCi0vLyBQYWdlIE9iamVjdCBmdW5jdGlvbnMNCi0vLw0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi0NCi0vLyBGdW5jdGlvbjogRlBERlBhZ2VPYmpfSGFzVHJhbnNwYXJlbmN5DQotLy8JCQlDaGVjayB0aGF0IHdoZXRoZXIgdGhlIHNwZWNpZmllZCBQREYgcGFnZSBvYmplY3QgY29udGFpbnMgdHJhbnNwYXJlbmN5Lg0KLS8vIFBhcmFtZXRlcnM6CQ0KLS8vCQkJcGFnZU9iamVjdAktCUhhbmRsZSB0byBhIHBhZ2Ugb2JqZWN0Lg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCVRSVUUgbWVhbnMgdGhhdCB0aGUgUERGIHBhZ2Ugb2JqZWN0IGRvZXMgY29udGFpbnMgdHJhbnNwYXJlbmN5Lg0KLS8vCQkJT3RoZXJ3aXNlLCByZXR1cm5zIEZBTFNFLg0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGUGFnZU9ial9IYXNUcmFuc3BhcmVuY3koRlBERl9QQUdFT0JKRUNUIHBhZ2VPYmplY3QpOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGUGFnZU9ial9UcmFuc2Zvcm0NCi0vLwkJCVRyYW5zZm9ybSAoc2NhbGUsIHJvdGF0ZSwgc2hlYXIsIG1vdmUpIHBhZ2Ugb2JqZWN0Lg0KLS8vIFBhcmFtZXRlcnM6CQ0KLS8vCQkJcGFnZV9vYmplY3QJLQlIYW5kbGUgdG8gYSBwYWdlIG9iamVjdC4gUmV0dXJuZWQgYnkgRlBERlBhZ2VPYmpfTmV3SW1hZ2VPYmouDQotLy8JCQlhCQkJLQlUaGUgY29lZmZpY2llbnQgImEiIG9mIHRoZSBtYXRyaXguDQotLy8JCQliCQkJLQlUaGUJY29lZmZpY2llbnQgImIiIG9mIHRoZSBtYXRyaXguDQotLy8JCQljCQkJLQlUaGUgY29lZmZpY2llbnQgImMiIG9mIHRoZSBtYXRyaXguDQotLy8JCQlkCQkJLQlUaGUgY29lZmZpY2llbnQgImQiIG9mIHRoZSBtYXRyaXguDQotLy8JCQllCQkJLQlUaGUgY29lZmZpY2llbnQgImUiIG9mIHRoZSBtYXRyaXguDQotLy8JCQlmCQkJLQlUaGUgY29lZmZpY2llbnQgImYiIG9mIHRoZSBtYXRyaXguDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJTm9uZS4NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZQYWdlT2JqX1RyYW5zZm9ybShGUERGX1BBR0VPQkpFQ1QgcGFnZV9vYmplY3QsDQotCQkJCQkJCWRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGUGFnZV9UcmFuc2Zvcm1Bbm5vdHMNCi0vLwkJCVRyYW5zZm9ybSAoc2NhbGUsIHJvdGF0ZSwgc2hlYXIsIG1vdmUpIGFsbCBhbm5vdHMgaW4gYSBwYWdlLg0KLS8vIFBhcmFtZXRlcnM6CQ0KLS8vCQkJcGFnZQkJLQlIYW5kbGUgdG8gYSBwYWdlLg0KLS8vCQkJYQkJCS0JVGhlIGNvZWZmaWNpZW50ICJhIiBvZiB0aGUgbWF0cml4Lg0KLS8vCQkJYgkJCS0JVGhlCWNvZWZmaWNpZW50ICJiIiBvZiB0aGUgbWF0cml4Lg0KLS8vCQkJYwkJCS0JVGhlIGNvZWZmaWNpZW50ICJjIiBvZiB0aGUgbWF0cml4Lg0KLS8vCQkJZAkJCS0JVGhlIGNvZWZmaWNpZW50ICJkIiBvZiB0aGUgbWF0cml4Lg0KLS8vCQkJZQkJCS0JVGhlIGNvZWZmaWNpZW50ICJlIiBvZiB0aGUgbWF0cml4Lg0KLS8vCQkJZgkJCS0JVGhlIGNvZWZmaWNpZW50ICJmIiBvZiB0aGUgbWF0cml4Lg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCU5vbmUuDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGUGFnZV9UcmFuc2Zvcm1Bbm5vdHMoRlBERl9QQUdFIHBhZ2UsDQotCQkJCQkJCQkJCQkgZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZik7DQotDQotLy8gVGhlIHBhZ2Ugb2JqZWN0IGNvbnN0YW50cy4NCi0jZGVmaW5lIEZQREZfUEFHRU9CSl9URVhUCQkxDQotI2RlZmluZSBGUERGX1BBR0VPQkpfUEFUSAkJMg0KLSNkZWZpbmUgRlBERl9QQUdFT0JKX0lNQUdFCQkzDQotI2RlZmluZSBGUERGX1BBR0VPQkpfU0hBRElORwk0DQotI2RlZmluZSBGUERGX1BBR0VPQkpfRk9STQkJNQ0KLQ0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi0vLw0KLS8vIEltYWdlIGZ1bmN0aW9ucw0KLS8vDQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGUGFnZU9ial9OZXdJbWdlT2JqDQotLy8JCQlDcmVhdGUgYSBuZXcgSW1hZ2UgT2JqZWN0Lg0KLS8vIFBhcmFtZXRlcnM6DQotLy8JCQlkb2N1bWVudAkJLQlIYW5kbGUgdG8gZG9jdW1lbnQuIFJldHVybmVkIGJ5IEZQREZfTG9hZERvY3VtZW50IG9yIEZQREZfQ3JlYXRlTmV3RG9jdW1lbnQgZnVuY3Rpb24uDQotLy8gUmV0dXJuIFZhbHVlOg0KLS8vCQkJSGFuZGxlIG9mIGltYWdlIG9iamVjdC4NCi1ETExFWFBPUlQgRlBERl9QQUdFT0JKRUNUIFNURENBTEwgRlBERlBhZ2VPYmpfTmV3SW1nZU9iaihGUERGX0RPQ1VNRU5UIGRvY3VtZW50KTsNCi0NCi0NCi0vLyBGdW5jdGlvbjogRlBERkltYWdlT2JqX0xvYWRKcGVnRmlsZQ0KLS8vCQkJTG9hZCBJbWFnZSBmcm9tIGEgSlBFRyBpbWFnZSBmaWxlIGFuZCB0aGVuIHNldCBpdCB0byBhbiBpbWFnZSBvYmplY3QuDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCXBhZ2VzCQkJLQlQb2ludGVycyB0byB0aGUgc3RhcnQgb2YgYWxsIGxvYWRlZCBwYWdlcywgY291bGQgYmUgTlVMTC4NCi0vLwkJCW5Db3VudAkJCS0JTnVtYmVyIG9mIHBhZ2VzLCBjb3VsZCBiZSAwLg0KLS8vCQkJaW1hZ2Vfb2JqZWN0CS0JSGFuZGxlIG9mIGltYWdlIG9iamVjdCByZXR1cm5lZCBieSBGUERGUGFnZU9ial9OZXdJbWdlT2JqLg0KLS8vCQkJZmlsZUFjY2VzcwkJLQlUaGUgY3VzdG9tIGZpbGUgYWNjZXNzIGhhbmRsZXIsIHdoaWNoIHNwZWNpZmllcyB0aGUgSlBFRyBpbWFnZSBmaWxlLg0KLS8vCVJldHVybiBWYWx1ZToNCi0vLwkJCVRSVUUgaWYgc3VjY2Vzc2Z1bCwgRkFMU0Ugb3RoZXJ3aXNlLg0KLS8vICBOb3RlOiANCi0vLwkJCVRoZSBpbWFnZSBvYmplY3QgbWlnaHQgYWxyZWFkeSBoYXMgYW4gYXNzb2NpYXRlZCBpbWFnZSwgd2hpY2ggaXMgc2hhcmVkIGFuZCBjYWNoZWQgYnkgdGhlIGxvYWRlZCBwYWdlcywgSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBjYWNoZSBvZiBpbWFnZSBmb3IgYWxsIHRoZSBsb2FkZWQgcGFnZXMuDQotLy8JCQlQYXNzIHBhZ2VzIGFuZCBjb3VudCB0byB0aGlzIEFQSSB0byBjbGVhciB0aGUgaW1hZ2UgY2FjaGUuIA0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGSW1hZ2VPYmpfTG9hZEpwZWdGaWxlKEZQREZfUEFHRSogcGFnZXMsIGludCBuQ291bnQsRlBERl9QQUdFT0JKRUNUIGltYWdlX29iamVjdCwgRlBERl9GSUxFQUNDRVNTKiBmaWxlQWNjZXNzKTsNCi0NCi0NCi0vLyBGdW5jdGlvbjogRlBERkltYWdlT2JqX1NldE1hdHJpeA0KLS8vCQkJU2V0IHRoZSBtYXRyaXggb2YgYW4gaW1hZ2Ugb2JqZWN0Lg0KLS8vIFBhcmFtZXRlcnM6DQotLy8JCQlpbWFnZV9vYmplY3QJLQlIYW5kbGUgb2YgaW1hZ2Ugb2JqZWN0IHJldHVybmVkIGJ5IEZQREZQYWdlT2JqX05ld0ltZ2VPYmouDQotLy8JCQlhCQkJCS0JVGhlIGNvZWZmaWNpZW50ICJhIiBvZiB0aGUgbWF0cml4Lg0KLS8vCQkJYgkJCQktCVRoZSBjb2VmZmljaWVudCAiYiIgb2YgdGhlIG1hdHJpeC4NCi0vLwkJCWMJCQkJLQlUaGUgY29lZmZpY2llbnQgImMiIG9mIHRoZSBtYXRyaXguDQotLy8JCQlkCQkJCS0JVGhlIGNvZWZmaWNpZW50ICJkIiBvZiB0aGUgbWF0cml4Lg0KLS8vCQkJZQkJCQktCVRoZSBjb2VmZmljaWVudCAiZSIgb2YgdGhlIG1hdHJpeC4NCi0vLwkJCWYJCQkJLQlUaGUgY29lZmZpY2llbnQgImYiIG9mIHRoZSBtYXRyaXguDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJVFJVRSBpZiBzdWNjZXNzZnVsLCBGQUxTRSBvdGhlcndpc2UuIA0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGSW1hZ2VPYmpfU2V0TWF0cml4KEZQREZfUEFHRU9CSkVDVCBpbWFnZV9vYmplY3QsDQotCQkJCQkJCQkJCQkgZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZik7DQotDQotLy8gRnVuY3Rpb246IEZQREZJbWFnZU9ial9TZXRCaXRtYXANCi0vLwkJCVNldCB0aGUgYml0bWFwIHRvIGFuIGltYWdlIG9iamVjdC4NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vCQkJcGFnZXMJCQktCVBvaW50ZXIncyB0byB0aGUgc3RhcnQgb2YgYWxsIGxvYWRlZCBwYWdlcy4NCi0vLwkJCW5Db3VudAkJCS0JTnVtYmVyIG9mIHBhZ2VzLg0KLS8vCQkJaW1hZ2Vfb2JqZWN0CS0JSGFuZGxlIG9mIGltYWdlIG9iamVjdCByZXR1cm5lZCBieSBGUERGUGFnZU9ial9OZXdJbWdlT2JqLg0KLS8vCQkJYml0bWFwCQkJLQlUaGUgaGFuZGxlIG9mIHRoZSBiaXRtYXAgd2hpY2ggeW91IHdhbnQgdG8gc2V0IGl0IHRvIHRoZSBpbWFnZSBvYmplY3QuDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJVFJVRSBpZiBzdWNjZXNzZnVsLCBGQUxTRSBvdGhlcndpc2UuIA0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGSW1hZ2VPYmpfU2V0Qml0bWFwKEZQREZfUEFHRSogcGFnZXMsaW50IG5Db3VudCxGUERGX1BBR0VPQkpFQ1QgaW1hZ2Vfb2JqZWN0LCBGUERGX0JJVE1BUCBiaXRtYXApOw0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX0NCi0jZW5kaWYNCi0jZW5kaWYgLy8gX0ZQREZFRElUX0hfDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZglfRlBERkVESVRfSF8KKyNkZWZpbmUJX0ZQREZFRElUX0hfCisKKyNpbmNsdWRlICJmcGRmdmlldy5oIgorCisvLyBEZWZpbmUgYWxsIHR5cGVzIHVzZWQgaW4gdGhlIFNESy4gTm90ZSB0aGV5IGNhbiBiZSBzaW1wbHkgcmVnYXJkZWQgYXMgb3BhcXVlIHBvaW50ZXJzCisvLyBvciBsb25nIGludGVnZXIgbnVtYmVycy4KKworI2RlZmluZSBGUERGX0FSR0IoYSxyLGcsYikJCSgoKChGWF9EV09SRCkoKChGWF9CWVRFKShiKXwoKEZYX1dPUkQpKChGWF9CWVRFKShnKSk8PDgpKXwoKChGWF9EV09SRCkoRlhfQllURSkocikpPDwxNikpKSkgfCAoKChGWF9EV09SRCkoRlhfQllURSkoYSkpPDwyNCkpCisjZGVmaW5lIEZQREZfR2V0QlZhbHVlKGFyZ2IpICAgICgoRlhfQllURSkoYXJnYikpCisjZGVmaW5lIEZQREZfR2V0R1ZhbHVlKGFyZ2IpICAgICgoRlhfQllURSkoKChGWF9XT1JEKShhcmdiKSkgPj4gOCkpCisjZGVmaW5lIEZQREZfR2V0UlZhbHVlKGFyZ2IpICAgICgoRlhfQllURSkoKGFyZ2IpPj4xNikpCisjZGVmaW5lIEZQREZfR2V0QVZhbHVlKGFyZ2IpICAgICgoRlhfQllURSkoKGFyZ2IpPj4yNCkpCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIERvY3VtZW50IGZ1bmN0aW9ucworLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gRnVuY3Rpb246IEZQREZfQ3JlYXRlTmV3RG9jdW1lbnQKKy8vCQkJQ3JlYXRlIGEgbmV3IFBERiBkb2N1bWVudC4KKy8vIFBhcmFtZXRlcnM6CQorLy8JCQlOb25lLgorLy8gUmV0dXJuIHZhbHVlOgorLy8JCQlBIGhhbmRsZSB0byBhIGRvY3VtZW50LiBJZiBmYWlsZWQsIE5VTEwgaXMgcmV0dXJuZWQuCitETExFWFBPUlQgRlBERl9ET0NVTUVOVCBTVERDQUxMIEZQREZfQ3JlYXRlTmV3RG9jdW1lbnQoKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFBhZ2UgZnVuY3Rpb25zCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyBGdW5jdGlvbjogRlBERlBhZ2VfTmV3CisvLwkJCUNvbnN0cnVjdCBhbiBlbXB0eSBwYWdlLgorLy8gUGFyYW1ldGVyczoJCisvLwkJCWRvY3VtZW50CS0JSGFuZGxlIHRvIGRvY3VtZW50LiBSZXR1cm5lZCBieSBGUERGX0xvYWREb2N1bWVudCBhbmQgRlBERl9DcmVhdGVOZXdEb2N1bWVudC4KKy8vCQkJcGFnZV9pbmRleAktCVRoZSBpbmRleCBvZiBhIHBhZ2UuCisvLwkJCXdpZHRoCQktCVRoZSBwYWdlIHdpZHRoLgorLy8JCQloZWlnaHQJCS0JVGhlIHBhZ2UgaGVpZ2h0LgorLy8gUmV0dXJuIHZhbHVlOgorLy8JCQlUaGUgaGFuZGxlIHRvIHRoZSBwYWdlLgorLy8gQ29tbWVudHM6CisvLwkJCUxvYWRlZCBwYWdlIGNhbiBiZSBkZWxldGVkIGJ5IEZQREZQYWdlX0RlbGV0ZS4KK0RMTEVYUE9SVCBGUERGX1BBR0UgU1REQ0FMTCBGUERGUGFnZV9OZXcoRlBERl9ET0NVTUVOVCBkb2N1bWVudCwgaW50IHBhZ2VfaW5kZXgsIGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCk7CisKKy8vIEZ1bmN0aW9uOiBGUERGUGFnZV9EZWxldGUKKy8vCQkJRGVsZXRlIGEgUERGIHBhZ2UuCisvLyBQYXJhbWV0ZXJzOgkKKy8vCQkJZG9jdW1lbnQJLQlIYW5kbGUgdG8gZG9jdW1lbnQuIFJldHVybmVkIGJ5IEZQREZfTG9hZERvY3VtZW50IGFuZCBGUERGX0NyZWF0ZU5ld0RvY3VtZW50LgorLy8JCQlwYWdlX2luZGV4CS0JVGhlIGluZGV4IG9mIGEgcGFnZS4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJTm9uZS4KK0RMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERlBhZ2VfRGVsZXRlKEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsIGludCBwYWdlX2luZGV4KTsKKworLy8gRnVuY3Rpb246IEZQREZQYWdlX0dldFJvdGF0aW9uCisvLwkJCUdldCB0aGUgcGFnZSByb3RhdGlvbi4gT25lIG9mIGZvbGxvd2luZyB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZDogMCgwKSwgMSg5MCksIDIoMTgwKSwgMygyNzApLgorLy8gUGFyYW1ldGVyczoJCisvLwkJCXBhZ2UJCS0JSGFuZGxlIHRvIGEgcGFnZS4gUmV0dXJuZWQgYnkgRlBERlBhZ2VfTmV3LgorLy8gUmV0dXJuIHZhbHVlOgorLy8JCQlUaGUgUERGIHBhZ2Ugcm90YXRpb24uCisvLyBDb21tZW50OgorLy8JCQlUaGUgUERGIHBhZ2Ugcm90YXRpb24gaXMgcm90YXRlZCBjbG9ja3dpc2UuCitETExFWFBPUlQgaW50IFNURENBTEwgRlBERlBhZ2VfR2V0Um90YXRpb24oRlBERl9QQUdFIHBhZ2UpOworCisvLyBGdW5jdGlvbjogRlBERlBhZ2VfSW5zZXJ0T2JqZWN0CisvLwkJCUluc2VydCBhbiBvYmplY3QgdG8gdGhlIHBhZ2UuIFRoZSBwYWdlIG9iamVjdCBpcyBhdXRvbWF0aWNhbGx5IGZyZWVkLgorLy8gUGFyYW1ldGVyczoJCisvLwkJCXBhZ2UJCS0JSGFuZGxlIHRvIGEgcGFnZS4gUmV0dXJuZWQgYnkgRlBERlBhZ2VfTmV3LgorLy8JCQlwYWdlX29iagktCUhhbmRsZSB0byBhIHBhZ2Ugb2JqZWN0LiBSZXR1cm5lZCBieSBGUERGUGFnZU9ial9OZXdUZXh0T2JqLEZQREZQYWdlT2JqX05ld1RleHRPYmpFeCBhbmQKKy8vCQkJCQkJCUZQREZQYWdlT2JqX05ld1BhdGhPYmouCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCU5vbmUuCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZQYWdlX0luc2VydE9iamVjdChGUERGX1BBR0UgcGFnZSwgRlBERl9QQUdFT0JKRUNUIHBhZ2Vfb2JqKTsKKworLy8gRnVuY3Rpb246IEZQREZQYWdlX0NvdW50T2JqZWN0CisvLwkJCUdldCBudW1iZXIgb2YgcGFnZSBvYmplY3RzIGluc2lkZSB0aGUgcGFnZS4KKy8vIFBhcmFtZXRlcnM6CQorLy8JCQlwYWdlCQktCUhhbmRsZSB0byBhIHBhZ2UuIFJldHVybmVkIGJ5IEZQREZQYWdlX05ldy4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJVGhlIG51bWJlciBvZiB0aGUgcGFnZSBvYmplY3QuCitETExFWFBPUlQgaW50IFNURENBTEwgRlBERlBhZ2VfQ291bnRPYmplY3QoRlBERl9QQUdFIHBhZ2UpOworCisvLyBGdW5jdGlvbjogRlBERlBhZ2VfR2V0T2JqZWN0CisvLwkJCUdldCBwYWdlIG9iamVjdCBieSBpbmRleC4KKy8vIFBhcmFtZXRlcnM6CQorLy8JCQlwYWdlCQktCUhhbmRsZSB0byBhIHBhZ2UuIFJldHVybmVkIGJ5IEZQREZQYWdlX05ldy4KKy8vCQkJaW5kZXgJCS0JVGhlIGluZGV4IG9mIGEgcGFnZSBvYmplY3QuCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCVRoZSBoYW5kbGUgb2YgdGhlIHBhZ2Ugb2JqZWN0LiBOdWxsIGZvciBmYWlsZWQuCitETExFWFBPUlQgRlBERl9QQUdFT0JKRUNUIFNURENBTEwgRlBERlBhZ2VfR2V0T2JqZWN0KEZQREZfUEFHRSBwYWdlLCBpbnQgaW5kZXgpOworCisvLyBGdW5jdGlvbjogRlBERlBhZ2VfSGFzVHJhbnNwYXJlbmN5CisvLwkJCUNoZWNrIHRoYXQgd2hldGhlciB0aGUgY29udGVudCBvZiBzcGVjaWZpZWQgUERGIHBhZ2UgY29udGFpbnMgdHJhbnNwYXJlbmN5LgorLy8gUGFyYW1ldGVyczoJCisvLwkJCXBhZ2UJCS0JSGFuZGxlIHRvIGEgcGFnZS4gUmV0dXJuZWQgYnkgRlBERlBhZ2VfTmV3IG9yIEZQREZfTG9hZFBhZ2UuCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCVRSVUUgbWVhbnMgdGhhdCB0aGUgUERGIHBhZ2UgZG9lcyBjb250YWlucyB0cmFuc3BhcmVuY3kuCisvLwkJCU90aGVyd2lzZSwgcmV0dXJucyBGQUxTRS4KK0RMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGUGFnZV9IYXNUcmFuc3BhcmVuY3koRlBERl9QQUdFIHBhZ2UpOworCisvLyBGdW5jdGlvbjogRlBERlBhZ2VfR2VuZXJhdGVDb250ZW50CisvLwkJCUdlbmVyYXRlIFBERiBQYWdlIGNvbnRlbnQuCisvLyBQYXJhbWV0ZXJzOgkKKy8vCQkJcGFnZQkJLQlIYW5kbGUgdG8gYSBwYWdlLiBSZXR1cm5lZCBieSBGUERGUGFnZV9OZXcuCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCVRydWUgaWYgc3VjY2Vzc2Z1bCwgZmFsc2Ugb3RoZXJ3aXNlLgorLy8gQ29tbWVudDoKKy8vCQkJQmVmb3JlIHlvdSBzYXZlIHRoZSBwYWdlIHRvIGEgZmlsZSwgb3IgcmVsb2FkIHRoZSBwYWdlLCB5b3UgbXVzdCBjYWxsIHRoZSBGUERGUGFnZV9HZW5lcmF0ZUNvbnRlbnQgZnVuY3Rpb24uCisvLwkJCU9yIHRoZSBjaGFuZ2VkIGluZm9ybWF0aW9uIHdpbGwgYmUgbG9zdC4KK0RMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGUGFnZV9HZW5lcmF0ZUNvbnRlbnQoRlBERl9QQUdFIHBhZ2UpOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gUGFnZSBPYmplY3QgZnVuY3Rpb25zCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyBGdW5jdGlvbjogRlBERlBhZ2VPYmpfSGFzVHJhbnNwYXJlbmN5CisvLwkJCUNoZWNrIHRoYXQgd2hldGhlciB0aGUgc3BlY2lmaWVkIFBERiBwYWdlIG9iamVjdCBjb250YWlucyB0cmFuc3BhcmVuY3kuCisvLyBQYXJhbWV0ZXJzOgkKKy8vCQkJcGFnZU9iamVjdAktCUhhbmRsZSB0byBhIHBhZ2Ugb2JqZWN0LgorLy8gUmV0dXJuIHZhbHVlOgorLy8JCQlUUlVFIG1lYW5zIHRoYXQgdGhlIFBERiBwYWdlIG9iamVjdCBkb2VzIGNvbnRhaW5zIHRyYW5zcGFyZW5jeS4KKy8vCQkJT3RoZXJ3aXNlLCByZXR1cm5zIEZBTFNFLgorRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZQYWdlT2JqX0hhc1RyYW5zcGFyZW5jeShGUERGX1BBR0VPQkpFQ1QgcGFnZU9iamVjdCk7CisKKy8vIEZ1bmN0aW9uOiBGUERGUGFnZU9ial9UcmFuc2Zvcm0KKy8vCQkJVHJhbnNmb3JtIChzY2FsZSwgcm90YXRlLCBzaGVhciwgbW92ZSkgcGFnZSBvYmplY3QuCisvLyBQYXJhbWV0ZXJzOgkKKy8vCQkJcGFnZV9vYmplY3QJLQlIYW5kbGUgdG8gYSBwYWdlIG9iamVjdC4gUmV0dXJuZWQgYnkgRlBERlBhZ2VPYmpfTmV3SW1hZ2VPYmouCisvLwkJCWEJCQktCVRoZSBjb2VmZmljaWVudCAiYSIgb2YgdGhlIG1hdHJpeC4KKy8vCQkJYgkJCS0JVGhlCWNvZWZmaWNpZW50ICJiIiBvZiB0aGUgbWF0cml4LgorLy8JCQljCQkJLQlUaGUgY29lZmZpY2llbnQgImMiIG9mIHRoZSBtYXRyaXguCisvLwkJCWQJCQktCVRoZSBjb2VmZmljaWVudCAiZCIgb2YgdGhlIG1hdHJpeC4KKy8vCQkJZQkJCS0JVGhlIGNvZWZmaWNpZW50ICJlIiBvZiB0aGUgbWF0cml4LgorLy8JCQlmCQkJLQlUaGUgY29lZmZpY2llbnQgImYiIG9mIHRoZSBtYXRyaXguCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCU5vbmUuCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZQYWdlT2JqX1RyYW5zZm9ybShGUERGX1BBR0VPQkpFQ1QgcGFnZV9vYmplY3QsCisJCQkJCQkJZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZik7CisKKy8vIEZ1bmN0aW9uOiBGUERGUGFnZV9UcmFuc2Zvcm1Bbm5vdHMKKy8vCQkJVHJhbnNmb3JtIChzY2FsZSwgcm90YXRlLCBzaGVhciwgbW92ZSkgYWxsIGFubm90cyBpbiBhIHBhZ2UuCisvLyBQYXJhbWV0ZXJzOgkKKy8vCQkJcGFnZQkJLQlIYW5kbGUgdG8gYSBwYWdlLgorLy8JCQlhCQkJLQlUaGUgY29lZmZpY2llbnQgImEiIG9mIHRoZSBtYXRyaXguCisvLwkJCWIJCQktCVRoZQljb2VmZmljaWVudCAiYiIgb2YgdGhlIG1hdHJpeC4KKy8vCQkJYwkJCS0JVGhlIGNvZWZmaWNpZW50ICJjIiBvZiB0aGUgbWF0cml4LgorLy8JCQlkCQkJLQlUaGUgY29lZmZpY2llbnQgImQiIG9mIHRoZSBtYXRyaXguCisvLwkJCWUJCQktCVRoZSBjb2VmZmljaWVudCAiZSIgb2YgdGhlIG1hdHJpeC4KKy8vCQkJZgkJCS0JVGhlIGNvZWZmaWNpZW50ICJmIiBvZiB0aGUgbWF0cml4LgorLy8gUmV0dXJuIHZhbHVlOgorLy8JCQlOb25lLgorRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGUGFnZV9UcmFuc2Zvcm1Bbm5vdHMoRlBERl9QQUdFIHBhZ2UsCisJCQkJCQkJCQkJCSBkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIGUsIGRvdWJsZSBmKTsKKworLy8gVGhlIHBhZ2Ugb2JqZWN0IGNvbnN0YW50cy4KKyNkZWZpbmUgRlBERl9QQUdFT0JKX1RFWFQJCTEKKyNkZWZpbmUgRlBERl9QQUdFT0JKX1BBVEgJCTIKKyNkZWZpbmUgRlBERl9QQUdFT0JKX0lNQUdFCQkzCisjZGVmaW5lIEZQREZfUEFHRU9CSl9TSEFESU5HCTQKKyNkZWZpbmUgRlBERl9QQUdFT0JKX0ZPUk0JCTUKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEltYWdlIGZ1bmN0aW9ucworLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gRnVuY3Rpb246IEZQREZQYWdlT2JqX05ld0ltZ2VPYmoKKy8vCQkJQ3JlYXRlIGEgbmV3IEltYWdlIE9iamVjdC4KKy8vIFBhcmFtZXRlcnM6CisvLwkJCWRvY3VtZW50CQktCUhhbmRsZSB0byBkb2N1bWVudC4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkRG9jdW1lbnQgb3IgRlBERl9DcmVhdGVOZXdEb2N1bWVudCBmdW5jdGlvbi4KKy8vIFJldHVybiBWYWx1ZToKKy8vCQkJSGFuZGxlIG9mIGltYWdlIG9iamVjdC4KK0RMTEVYUE9SVCBGUERGX1BBR0VPQkpFQ1QgU1REQ0FMTCBGUERGUGFnZU9ial9OZXdJbWdlT2JqKEZQREZfRE9DVU1FTlQgZG9jdW1lbnQpOworCisKKy8vIEZ1bmN0aW9uOiBGUERGSW1hZ2VPYmpfTG9hZEpwZWdGaWxlCisvLwkJCUxvYWQgSW1hZ2UgZnJvbSBhIEpQRUcgaW1hZ2UgZmlsZSBhbmQgdGhlbiBzZXQgaXQgdG8gYW4gaW1hZ2Ugb2JqZWN0LgorLy8gUGFyYW1ldGVyczoKKy8vCQkJcGFnZXMJCQktCVBvaW50ZXJzIHRvIHRoZSBzdGFydCBvZiBhbGwgbG9hZGVkIHBhZ2VzLCBjb3VsZCBiZSBOVUxMLgorLy8JCQluQ291bnQJCQktCU51bWJlciBvZiBwYWdlcywgY291bGQgYmUgMC4KKy8vCQkJaW1hZ2Vfb2JqZWN0CS0JSGFuZGxlIG9mIGltYWdlIG9iamVjdCByZXR1cm5lZCBieSBGUERGUGFnZU9ial9OZXdJbWdlT2JqLgorLy8JCQlmaWxlQWNjZXNzCQktCVRoZSBjdXN0b20gZmlsZSBhY2Nlc3MgaGFuZGxlciwgd2hpY2ggc3BlY2lmaWVzIHRoZSBKUEVHIGltYWdlIGZpbGUuCisvLwlSZXR1cm4gVmFsdWU6CisvLwkJCVRSVUUgaWYgc3VjY2Vzc2Z1bCwgRkFMU0Ugb3RoZXJ3aXNlLgorLy8gIE5vdGU6IAorLy8JCQlUaGUgaW1hZ2Ugb2JqZWN0IG1pZ2h0IGFscmVhZHkgaGFzIGFuIGFzc29jaWF0ZWQgaW1hZ2UsIHdoaWNoIGlzIHNoYXJlZCBhbmQgY2FjaGVkIGJ5IHRoZSBsb2FkZWQgcGFnZXMsIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byBjbGVhciB0aGUgY2FjaGUgb2YgaW1hZ2UgZm9yIGFsbCB0aGUgbG9hZGVkIHBhZ2VzLgorLy8JCQlQYXNzIHBhZ2VzIGFuZCBjb3VudCB0byB0aGlzIEFQSSB0byBjbGVhciB0aGUgaW1hZ2UgY2FjaGUuIAorRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZJbWFnZU9ial9Mb2FkSnBlZ0ZpbGUoRlBERl9QQUdFKiBwYWdlcywgaW50IG5Db3VudCxGUERGX1BBR0VPQkpFQ1QgaW1hZ2Vfb2JqZWN0LCBGUERGX0ZJTEVBQ0NFU1MqIGZpbGVBY2Nlc3MpOworCisKKy8vIEZ1bmN0aW9uOiBGUERGSW1hZ2VPYmpfU2V0TWF0cml4CisvLwkJCVNldCB0aGUgbWF0cml4IG9mIGFuIGltYWdlIG9iamVjdC4KKy8vIFBhcmFtZXRlcnM6CisvLwkJCWltYWdlX29iamVjdAktCUhhbmRsZSBvZiBpbWFnZSBvYmplY3QgcmV0dXJuZWQgYnkgRlBERlBhZ2VPYmpfTmV3SW1nZU9iai4KKy8vCQkJYQkJCQktCVRoZSBjb2VmZmljaWVudCAiYSIgb2YgdGhlIG1hdHJpeC4KKy8vCQkJYgkJCQktCVRoZSBjb2VmZmljaWVudCAiYiIgb2YgdGhlIG1hdHJpeC4KKy8vCQkJYwkJCQktCVRoZSBjb2VmZmljaWVudCAiYyIgb2YgdGhlIG1hdHJpeC4KKy8vCQkJZAkJCQktCVRoZSBjb2VmZmljaWVudCAiZCIgb2YgdGhlIG1hdHJpeC4KKy8vCQkJZQkJCQktCVRoZSBjb2VmZmljaWVudCAiZSIgb2YgdGhlIG1hdHJpeC4KKy8vCQkJZgkJCQktCVRoZSBjb2VmZmljaWVudCAiZiIgb2YgdGhlIG1hdHJpeC4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJVFJVRSBpZiBzdWNjZXNzZnVsLCBGQUxTRSBvdGhlcndpc2UuIAorRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZJbWFnZU9ial9TZXRNYXRyaXgoRlBERl9QQUdFT0JKRUNUIGltYWdlX29iamVjdCwKKwkJCQkJCQkJCQkJIGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpOworCisvLyBGdW5jdGlvbjogRlBERkltYWdlT2JqX1NldEJpdG1hcAorLy8JCQlTZXQgdGhlIGJpdG1hcCB0byBhbiBpbWFnZSBvYmplY3QuCisvLyBQYXJhbWV0ZXJzOgorLy8JCQlwYWdlcwkJCS0JUG9pbnRlcidzIHRvIHRoZSBzdGFydCBvZiBhbGwgbG9hZGVkIHBhZ2VzLgorLy8JCQluQ291bnQJCQktCU51bWJlciBvZiBwYWdlcy4KKy8vCQkJaW1hZ2Vfb2JqZWN0CS0JSGFuZGxlIG9mIGltYWdlIG9iamVjdCByZXR1cm5lZCBieSBGUERGUGFnZU9ial9OZXdJbWdlT2JqLgorLy8JCQliaXRtYXAJCQktCVRoZSBoYW5kbGUgb2YgdGhlIGJpdG1hcCB3aGljaCB5b3Ugd2FudCB0byBzZXQgaXQgdG8gdGhlIGltYWdlIG9iamVjdC4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJVFJVRSBpZiBzdWNjZXNzZnVsLCBGQUxTRSBvdGhlcndpc2UuIAorRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZJbWFnZU9ial9TZXRCaXRtYXAoRlBERl9QQUdFKiBwYWdlcyxpbnQgbkNvdW50LEZQREZfUEFHRU9CSkVDVCBpbWFnZV9vYmplY3QsIEZQREZfQklUTUFQIGJpdG1hcCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLy8gX0ZQREZFRElUX0hfCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvZnBkZmZvcm1maWxsLmggYi9mcGRmc2RrL2luY2x1ZGUvZnBkZmZvcm1maWxsLmgKaW5kZXggMGU3NTU2ZS4uNTBhMmRmZiAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2ZwZGZmb3JtZmlsbC5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9mcGRmZm9ybWZpbGwuaApAQCAtMSw4NDEgKzEsODQxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0NCi0jaWZuZGVmIF9GUERGT1JNRklMTF9IDQotI2RlZmluZSBfRlBERk9STUZJTExfSA0KLSNpbmNsdWRlICJmcGRmdmlldy5oIg0KLQ0KLXR5cGVkZWYgdm9pZCogRlBERl9GT1JNSEFORExFOw0KLQ0KLS8vIEV4cG9ydGVkIEZ1bmN0aW9ucw0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLWV4dGVybiAiQyIgew0KLSNlbmRpZg0KLQ0KLXR5cGVkZWYgc3RydWN0IF9JUERGX0pzUGxhdGZvcm0NCi17DQotLyoqDQotKiBWZXJzaW9uIG51bWJlciBvZiB0aGUgaW50ZXJmYWNlLiBDdXJyZW50bHkgbXVzdCBiZSAxLg0KLQkqKi8NCi0JaW50IHZlcnNpb247DQotCQ0KLQkvKiogDQotCSogTWV0aG9kOiBhcHBfYWxlcnQNCi0JKgkJCXBvcCB1cCBhIGRpYWxvZyB0byBzaG93IHdhcm5pbmcgb3IgaGludC4NCi0JKiBJbnRlcmZhY2UgVmVyc2lvbjoNCi0JKgkJCTENCi0JKiBJbXBsZW1lbnRhdGlvbiBSZXF1aXJlZDoNCi0JKgkJCXllcw0KLQkqIFBhcmFtZXRlcnM6DQotCSoJCQlwVGhpcwkJLQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZg0KLQkqCQkJTXNnCQkJLQlBIHN0cmluZyBjb250YWluaW5nIHRoZSBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZC4NCi0JKgkJCVRpdGxlCQktICAgVGhlIHRpdGxlIG9mIHRoZSBkaWFsb2cuDQotCSoJCQlUeXBlCQktCVRoZSBzdHlwZSBvZiBidXR0b24gZ3JvdXAuIA0KLQkqCQkJCQkJCTAtT0soZGVmYXVsdCk7DQotCSoJCQkJCQkJMS1PSyxDYW5jZWw7DQotCSoJCQkJCQkJMi1ZZXMsTk87IA0KLQkqCQkJCQkJCTMtWWVzLCBOTywgQ2FuY2VsLg0KLQkqICAgICAgICAgICBuSWNvbgkJLSAgIFRoZSBJY29uIHR5cGUuIA0KLQkqCQkJCQkJCTAtRXJyb3IoZGVmYXVsdCk7DQotCSoJCQkJCQkJMS1XYXJuaW5nOw0KLQkqCQkJCQkJCTItUXVlc3Rpb247DQotCSoJCQkJCQkJMy1TdGF0dXMuDQotCSogUmV0dXJuIFZhbHVlOg0KLQkqCQkJVGhlIHJldHVybiB2YWx1ZSBjb3VsZCBiZSB0aGUgZm9sb3dpbmcgdHlwZToNCi0JKgkJCQkJCQkxLU9LOw0KLQkqCQkJCQkJCTItQ2FuY2VsOyANCi0JKgkJCQkJCQkzLU5POw0KLQkqCQkJCQkJCTQtWWVzOw0KLQkqLw0KLQlpbnQgKCphcHBfYWxlcnQpKHN0cnVjdCBfSVBERl9Kc1BsYXRmb3JtKiBwVGhpcywgRlBERl9XSURFU1RSSU5HIE1zZywgRlBERl9XSURFU1RSSU5HIFRpdGxlLCBpbnQgVHlwZSwgaW50IEljb24pOw0KLQkNCi0JLyoqIA0KLQkqIE1ldGhvZDogYXBwX2JlZXANCi0JKgkJCUNhdXNlcyB0aGUgc3lzdGVtIHRvIHBsYXkgYSBzb3VuZC4gDQotCSogSW50ZXJmYWNlIFZlcnNpb246DQotCSoJCQkxDQotCSogSW1wbGVtZW50YXRpb24gUmVxdWlyZWQ6DQotCSoJCQl5ZXMNCi0JKiBQYXJhbWV0ZXJzOg0KLQkqCQkJcFRoaXMJCS0JUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBpdHNlbGYNCi0JKgkJCW5UeXBlCQktCVRoZSBzb3VuZCB0eXBlLg0KLQkqCQkJCQkJCTAgLSBFcnJvcg0KLQkqCQkJCQkJCTEgLSBXYXJuaW5nDQotCSoJCQkJCQkJMiAtIFF1ZXN0aW9uDQotCSoJCQkJCQkJMyAtIFN0YXR1cw0KLQkqCQkJCQkJCTQgLSBEZWZhdWx0IChkZWZhdWx0IHZhbHVlKQ0KLQkqIFJldHVybiBWYWx1ZToNCi0JKgkJCU5vbmUNCi0JKi8NCi0Jdm9pZCAoKmFwcF9iZWVwKShzdHJ1Y3QgX0lQREZfSnNQbGF0Zm9ybSogcFRoaXMsICBpbnQgblR5cGUpOw0KLQkNCi0JDQotCS8qKiANCi0JKiBNZXRob2Q6IGFwcF9yZXNwb25zZQ0KLQkqCQkJRGlzcGxheXMgYSBkaWFsb2cgYm94IGNvbnRhaW5pbmcgYSBxdWVzdGlvbiBhbmQgYW4gZW50cnkgZmllbGQgZm9yIHRoZSB1c2VyIHRvIHJlcGx5IHRvIHRoZSBxdWVzdGlvbi4gIA0KLQkqIEludGVyZmFjZSBWZXJzaW9uOg0KLQkqCQkJMQ0KLQkqIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOg0KLQkqCQkJeWVzDQotCSogUGFyYW1ldGVyczoNCi0JKgkJCXBUaGlzCQktCVBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgaXRzZWxmDQotCSoJCQlRdWVzdGlvbgktCVRoZSBxdWVzdGlvbiB0byBiZSBwb3NlZCB0byB0aGUgdXNlci4NCi0JKgkJCVRpdGxlCQktCVRoZSB0aXRsZSBvZiB0aGUgZGlhbG9nIGJveC4NCi0JKgkJCURlZmF1bHQJCS0JQSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgYW5zd2VyIHRvIHRoZSBxdWVzdGlvbi4gSWYgbm90IHNwZWNpZmllZCwgbm8gZGVmYXVsdCB2YWx1ZSBpcyBwcmVzZW50ZWQuDQotCSoJCQljTGFiZWwJCS0JQSBzaG9ydCBzdHJpbmcgdG8gYXBwZWFyIGluIGZyb250IG9mIGFuZCBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBlZGl0IHRleHQgZmllbGQuIA0KLQkqCQkJYlBhc3N3b3JkCS0JSWYgdHJ1ZSwgaW5kaWNhdGVzIHRoYXQgdGhlIHVzZXIncyByZXNwb25zZSBzaG91bGQgc2hvdyBhcyBhc3Rlcmlza3MgKCopIG9yIGJ1bGxldHMgKD8pIHRvIG1hc2sgdGhlIHJlc3BvbnNlLCB3aGljaCBtaWdodCBiZSBzZW5zaXRpdmUgaW5mb3JtYXRpb24uIFRoZSBkZWZhdWx0IGlzIGZhbHNlLgkJDQotCSoJCQlyZXNwb25zZQktCUEgc3RyaW5nIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgU0RLLCB0byByZWNlaXZlIHRoZSB1c2VyJ3MgcmVzcG9uc2UuIA0KLQkqCQkJbGVuZ3RoCQktICAgVGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyLCBudW1iZXIgb2YgYnl0ZXMuIEN1cnJlbnRseSwgSXQncyBhbHdheXMgYmUgMjA0OC4NCi0JKiBSZXR1cm4gVmFsdWU6DQotCSoJCQlOdW1iZXIgb2YgYnl0ZXMgdGhlIHVzZXIgaW5wdXQgdGV4dCBjb25zdW1lcywgbm90IGluY2x1ZGluZyB0cmFpbGluZyB6ZXJvcy4gSWYgdGhlIHRleHQgZXhjZWVkIDIwNDggYnl0ZXMsDQotCSoJCQl0aGUgZXhjZWVkZWQgcGFydCB3aWxsIGJlIGlnbm9yZWQuDQotCSogQ29tbWVudHM6DQotCSoJCQlObyBtYXR0ZXIgb24gd2hhdCBwbGF0Zm9ybSwgdGhlIHJlc3BvbnNlIHNob3VsZCBiZSBhbHdheXMgaW5wdXQgaW4gVVRGLTE2TEUgZW5jb2RpbmcuDQotCSoJCQlUaGUgcmV0dXJuIHZhbHVlIGFsd2F5cyBpbmRpY2F0ZWQgbnVtYmVyIG9mIGJ5dGVzIHJlcXVpcmVkIGZvciB0aGUgYnVmZmVyLCBldmVuIHdoZW4gdGhlcmUgaXMNCi0JKgkJCW5vIGJ1ZmZlciBzcGVjaWZpZWQsIG9yIHRoZSBidWZmZXIgc2l6ZSBpcyBsZXNzIHRoZW4gcmVxdWlyZWQuIEluIHRoaXMgY2FzZSwgdGhlIGJ1ZmZlciB3aWxsIG5vdA0KLQkqCQkJYmUgbW9kaWZpZWQuDQotCSovDQotCWludCAoKmFwcF9yZXNwb25zZSkoc3RydWN0IF9JUERGX0pzUGxhdGZvcm0qIHBUaGlzLCBGUERGX1dJREVTVFJJTkcgUXVlc3Rpb24sIEZQREZfV0lERVNUUklORyBUaXRsZSwgRlBERl9XSURFU1RSSU5HIERlZmF1bHQsIEZQREZfV0lERVNUUklORyBjTGFiZWwsIEZQREZfQk9PTCBiUGFzc3dvcmQsIHZvaWQqIHJlc3BvbnNlLCBpbnQgbGVuZ3RoKTsNCi0JDQotCQ0KLQkNCi0JLyoNCi0JKiBNZXRob2Q6IERvY19nZXRGaWxlUGF0aA0KLQkqCQkJR2V0IHRoZSBmaWxlIHBhdGggb2YgdGhlIGN1cnJlbnQgZG9jdW1lbnQuIA0KLQkqIEludGVyZmFjZSBWZXJzaW9uOg0KLQkqCQkJMQ0KLQkqIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOg0KLQkqCQkJeWVzDQotCSogUGFyYW1ldGVyczoNCi0JKgkJCXBUaGlzCQktCVBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgaXRzZWxmDQotCSoJCQlmaWxlUGF0aAktCVRoZSBzdHJpbmcgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGZpbGUgcGF0aC4gQ2FuIGJlIE5VTEwuDQotCSoJCQlsZW5ndGgJCS0gICBUaGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIsIG51bWJlciBvZiBieXRlcy4gQ2FuIGJlIDAuDQotCSogUmV0dXJuIFZhbHVlOg0KLQkqCQlOdW1iZXIgb2YgYnl0ZXMgdGhlIGZpbGVQYXRoIGNvbnN1bWVzLCBpbmNsdWRpbmcgdHJhaWxpbmcgemVyb3MuDQotCSogQ29tbWVudHM6DQotCSoJCVRoZSBmaWxlUGF0aCBzaG91bGQgYmUgYWx3YXlzIGlucHV0IGluIGxvY2FsIGVuY29kaW5nLg0KLQkqDQotCSoJCVRoZSByZXR1cm4gdmFsdWUgYWx3YXlzIGluZGljYXRlZCBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgZm9yIHRoZSBidWZmZXIsIGV2ZW4gd2hlbiB0aGVyZSBpcw0KLQkqCQlubyBidWZmZXIgc3BlY2lmaWVkLCBvciB0aGUgYnVmZmVyIHNpemUgaXMgbGVzcyB0aGVuIHJlcXVpcmVkLiBJbiB0aGlzIGNhc2UsIHRoZSBidWZmZXIgd2lsbCBub3QNCi0JKgkJYmUgbW9kaWZpZWQuDQotCSovDQotCWludCAoKkRvY19nZXRGaWxlUGF0aCkoc3RydWN0IF9JUERGX0pzUGxhdGZvcm0qIHBUaGlzLCB2b2lkKiBmaWxlUGF0aCwgaW50IGxlbmd0aCk7DQotCQ0KLQkNCi0JLyoNCi0JKiBNZXRob2Q6IERvY19tYWlsDQotCSoJCQlNYWlscyB0aGUgZGF0YSBidWZmZXIgYXMgYW4gYXR0YWNobWVudCB0byBhbGwgcmVjaXBpZW50cywgd2l0aCBvciB3aXRob3V0IHVzZXIgaW50ZXJhY3Rpb24uIA0KLQkqIEludGVyZmFjZSBWZXJzaW9uOg0KLQkqCQkJMQ0KLQkqIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOg0KLQkqCQkJeWVzDQotCSogUGFyYW1ldGVyczoNCi0JKgkJCXBUaGlzCQktCVBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgaXRzZWxmDQotCSoJCQltYWlsRGF0YQktCVBvaW50ZXIgdG8gdGhlIGRhdGEgYnVmZmVyIHRvIGJlIHNlbnQuQ2FuIGJlIE5VTEwuDQotCSoJCQlsZW5ndGgJCS0JVGhlIHNpemUsaW4gYnl0ZXMsIG9mIHRoZSBidWZmZXIgcG9pbnRlZCBieSBtYWlsRGF0YSBwYXJhbWV0ZXIuQ2FuIGJlIDAuDQotCSoJCQliVUkJCQktICAgSWYgdHJ1ZSwgdGhlIHJlc3Qgb2YgdGhlIHBhcmFtZXRlcnMgYXJlIHVzZWQgaW4gYSBjb21wb3NlLW5ldy1tZXNzYWdlIHdpbmRvdyB0aGF0IGlzIGRpc3BsYXllZCB0byB0aGUgdXNlci4gSWYgZmFsc2UsIHRoZSBjVG8gcGFyYW1ldGVyIGlzIHJlcXVpcmVkIGFuZCBhbGwgb3RoZXJzIGFyZSBvcHRpb25hbC4NCi0JKgkJCVRvCQkJLQlBIHNlbWljb2xvbi1kZWxpbWl0ZWQgbGlzdCBvZiByZWNpcGllbnRzIGZvciB0aGUgbWVzc2FnZS4NCi0JKgkJCVN1YmplY3QJCS0gICBUaGUgc3ViamVjdCBvZiB0aGUgbWVzc2FnZS4gVGhlIGxlbmd0aCBsaW1pdCBpcyA2NCBLQi4NCi0JKgkJCUNDCQkJLQlBIHNlbWljb2xvbi1kZWxpbWl0ZWQgbGlzdCBvZiBDQyByZWNpcGllbnRzIGZvciB0aGUgbWVzc2FnZS4gDQotCSoJCQlCQ0MJCQktICAgQSBzZW1pY29sb24tZGVsaW1pdGVkIGxpc3Qgb2YgQkNDIHJlY2lwaWVudHMgZm9yIHRoZSBtZXNzYWdlLiANCi0JKgkJCU1zZwkJCS0gICBUaGUgY29udGVudCBvZiB0aGUgbWVzc2FnZS4gVGhlIGxlbmd0aCBsaW1pdCBpcyA2NCBLQi4NCi0JKiBSZXR1cm4gVmFsdWU6DQotCSoJCQlOb25lLg0KLQkqIENvbW1lbnRzOg0KLQkqCQkJSWYgdGhlIHBhcmFtZXRlciBtYWlsRGF0YSBpcyBOVUxMIG9yIGxlbmd0aCBpcyAwLCB0aGUgY3VycmVudCBkb2N1bWVudCB3aWxsIGJlIG1haWxlZCBhcyBhbiBhdHRhY2htZW50IHRvIGFsbCByZWNpcGllbnRzLg0KLQkqLw0KLQl2b2lkICgqRG9jX21haWwpKHN0cnVjdCBfSVBERl9Kc1BsYXRmb3JtKiBwVGhpcyx2b2lkKiBtYWlsRGF0YSwgaW50IGxlbmd0aCxGUERGX0JPT0wgYlVJLCBGUERGX1dJREVTVFJJTkcgVG8sIEZQREZfV0lERVNUUklORyBTdWJqZWN0LCBGUERGX1dJREVTVFJJTkcgQ0MsIEZQREZfV0lERVNUUklORyBCQ0MsIEZQREZfV0lERVNUUklORyBNc2cpOyANCi0JDQotDQotCS8qDQotCSogTWV0aG9kOiBEb2NfcHJpbnQNCi0JKgkJCVByaW50cyBhbGwgb3IgYSBzcGVjaWZpYyBudW1iZXIgb2YgcGFnZXMgb2YgdGhlIGRvY3VtZW50Lg0KLQkqIEludGVyZmFjZSBWZXJzaW9uOg0KLQkqCQkJMQ0KLQkqIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOg0KLQkqCQkJeWVzDQotCSogUGFyYW1ldGVyczoNCi0JKgkJCXBUaGlzCQktCVBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgaXRzZWxmLg0KLQkqCQkJYlVJCQkJLQlJZiB0cnVlLCB3aWxsIGNhdXNlIGEgVUkgdG8gYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIHRvIG9idGFpbiBwcmludGluZyBpbmZvcm1hdGlvbiBhbmQgY29uZmlybSB0aGUgYWN0aW9uLg0KLQkqCQkJblN0YXJ0CQktCUEgMC1iYXNlZCBpbmRleCB0aGF0IGRlZmluZXMgdGhlIHN0YXJ0IG9mIGFuIGluY2x1c2l2ZSByYW5nZSBvZiBwYWdlcy4NCi0JKgkJCW5FbmQJCS0gICBBIDAtYmFzZWQgaW5kZXggdGhhdCBkZWZpbmVzIHRoZSBlbmQgb2YgYW4gaW5jbHVzaXZlIHBhZ2UgcmFuZ2UuDQotCSoJCQliU2lsZW50CQktICAgSWYgdHJ1ZSwgc3VwcHJlc3NlcyB0aGUgY2FuY2VsIGRpYWxvZyBib3ggd2hpbGUgdGhlIGRvY3VtZW50IGlzIHByaW50aW5nLiBUaGUgZGVmYXVsdCBpcyBmYWxzZS4NCi0JKgkJCWJTaHJpbmtUb0ZpdAktCUlmIHRydWUsIHRoZSBwYWdlIGlzIHNocnVuayAoaWYgbmVjZXNzYXJ5KSB0byBmaXQgd2l0aGluIHRoZSBpbWFnZWFibGUgYXJlYSBvZiB0aGUgcHJpbnRlZCBwYWdlLg0KLQkqCQkJYlByaW50QXNJbWFnZQktCUlmIHRydWUsIHByaW50IHBhZ2VzIGFzIGFuIGltYWdlLg0KLQkqCQkJYlJldmVyc2UJLQlJZiB0cnVlLCBwcmludCBmcm9tIG5FbmQgdG8gblN0YXJ0Lg0KLQkqCQkJYkFubm90YXRpb25zCS0JSWYgdHJ1ZSAodGhlIGRlZmF1bHQpLCBhbm5vdGF0aW9ucyBhcmUgcHJpbnRlZC4NCi0JKi8NCi0Jdm9pZCAoKkRvY19wcmludCkoc3RydWN0IF9JUERGX0pzUGxhdGZvcm0qIHBUaGlzLCBGUERGX0JPT0wgYlVJLCBpbnQgblN0YXJ0LCBpbnQgbkVuZCwgRlBERl9CT09MIGJTaWxlbnQgLEZQREZfQk9PTCBiU2hyaW5rVG9GaXQsRlBERl9CT09MIGJQcmludEFzSW1hZ2UgLEZQREZfQk9PTCBiUmV2ZXJzZSAsRlBERl9CT09MIGJBbm5vdGF0aW9ucyk7DQotDQotCS8qDQotCSogTWV0aG9kOiBEb2Nfc3VibWl0Rm9ybQ0KLQkqCQkJU2VuZCB0aGUgZm9ybSBkYXRhIHRvIGEgc3BlY2lmaWVkIFVSTC4NCi0JKiBJbnRlcmZhY2UgVmVyc2lvbjoNCi0JKgkJCTENCi0JKiBJbXBsZW1lbnRhdGlvbiBSZXF1aXJlZDoNCi0JKgkJCXllcw0KLQkqIFBhcmFtZXRlcnM6DQotCSoJCQlwVGhpcwkJLQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZg0KLQkqCQkJZm9ybURhdGEJLQlQb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlciB0byBiZSBzZW50Lg0KLQkqCQkJbGVuZ3RoCQktCVRoZSBzaXplLGluIGJ5dGVzLCBvZiB0aGUgYnVmZmVyIHBvaW50ZWQgYnkgZm9ybURhdGEgcGFyYW1ldGVyLg0KLQkqCQkJVVJMCQkJLQlUaGUgVVJMIHRvIHNlbmQgdG8uDQotCSogUmV0dXJuIFZhbHVlOg0KLQkqCQkJTm9uZS4NCi0JKg0KLQkqLw0KLQl2b2lkICgqRG9jX3N1Ym1pdEZvcm0pKHN0cnVjdCBfSVBERl9Kc1BsYXRmb3JtKiBwVGhpcyx2b2lkKiBmb3JtRGF0YSwgaW50IGxlbmd0aCwgRlBERl9XSURFU1RSSU5HIFVSTCk7DQotCQ0KLQkvKg0KLQkqIE1ldGhvZDogRG9jX2dvdG9QYWdlDQotCSoJCQlKdW1wIHRvIGEgc3BlY2lmaWVkIHBhZ2UuDQotCSogSW50ZXJmYWNlIFZlcnNpb246DQotCSoJCQkxDQotCSogSW1wbGVtZW50YXRpb24gUmVxdWlyZWQ6DQotCSoJCQl5ZXMNCi0JKiBQYXJhbWV0ZXJzOg0KLQkqCQkJcFRoaXMJCS0JUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBpdHNlbGYNCi0JKgkJCW5QYWdlTnVtCS0JVGhlIHNwZWNpZmllZCBwYWdlIG51bWJlciwgemVybyBmb3IgdGhlIGZpcnN0IHBhZ2UuDQotCSogUmV0dXJuIFZhbHVlOg0KLQkqCQkJTm9uZS4NCi0JKg0KLQkqLw0KLQl2b2lkICgqRG9jX2dvdG9QYWdlKShzdHJ1Y3QgX0lQREZfSnNQbGF0Zm9ybSogcFRoaXMsIGludCBuUGFnZU51bSk7DQotCS8qDQotCSogTWV0aG9kOiBGaWVsZF9icm93c2UNCi0JKgkJCVNob3cgYSBmaWxlIHNlbGVjdGlvbiBkaWFsb2csIGFuZCByZXR1cm4gdGhlIHNlbGVjdGVkIGZpbGUgcGF0aC4NCi0JKiBJbnRlcmZhY2UgVmVyc2lvbjoNCi0JKgkJCTENCi0JKiBJbXBsZW1lbnRhdGlvbiBSZXF1aXJlZDoNCi0JKgkJCXllcw0KLQkqIFBhcmFtZXRlcnM6DQotCSoJCQlwVGhpcwkJLQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZi4NCi0JKgkJCWZpbGVQYXRoCS0JUG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgZmlsZSBwYXRoLkNhbiBiZSBOVUxMLg0KLQkqCQkJbGVuZ3RoCQktICAgVGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyLCBudW1iZXIgb2YgYnl0ZXMuIENhbiBiZSAwLg0KLQkqIFJldHVybiBWYWx1ZToNCi0JKgkJTnVtYmVyIG9mIGJ5dGVzIHRoZSBmaWxlUGF0aCBjb25zdW1lcywgaW5jbHVkaW5nIHRyYWlsaW5nIHplcm9zLg0KLQkqIENvbW1lbnRzOg0KLQkqCQlUaGUgZmlsZVBhdGggc2hvdWxlIGJlIGFsd2F5cyBpbnB1dCBpbiBsb2NhbCBlbmNvZGluZy4NCi0JKi8NCi0JaW50ICAoKkZpZWxkX2Jyb3dzZSkoc3RydWN0IF9JUERGX0pzUGxhdGZvcm0qIHBUaGlzLHZvaWQqIGZpbGVQYXRoLCBpbnQgbGVuZ3RoKTsNCi0NCi0JLyoqDQotCSoJcG9pbnRlciB0byBGUERGX0ZPUk1GSUxMSU5GTyBpbnRlcmZhY2UuDQotCSoqLw0KLQl2b2lkKgltX3BGb3JtZmlsbGluZm87DQotfSBJUERGX0pTUExBVEZPUk07DQotDQotLy8gRmxhZ3MgZm9yIEN1cnNvciB0eXBlDQotI2RlZmluZSBGWENUX0FSUk9XCTANCi0jZGVmaW5lIEZYQ1RfTkVTVwkxCQkNCi0jZGVmaW5lIEZYQ1RfTldTRQkyCQkNCi0jZGVmaW5lIEZYQ1RfVkJFQU0JMwkJDQotI2RlZmluZSBGWENUX0hCRUFNCTQJDQotI2RlZmluZSBGWENUX0hBTkQJNQ0KLQ0KLS8qKg0KLSAqIERlY2xhcmVzIG9mIGEgcG9pbnRlciB0eXBlIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIEZGSV9TZXRUaW1lciBtZXRob2QuDQotICogUGFyYW1ldGVyczoNCi0gKgkJCWlkRXZlbnQJCS0JSWRlbnRpZmllciBvZiB0aGUgdGltZXIuIA0KLSAqIFJldHVybiB2YWx1ZToNCi0gKgkJCU5vbmUuIA0KLSAqKi8JDQotdHlwZWRlZiB2b2lkCSgqVGltZXJDYWxsYmFjaykoaW50IGlkRXZlbnQpOw0KLQ0KLS8qKg0KLSAqIERlY2xhcmVzIG9mIGEgc3RydWN0IHR5cGUgdG8gdGhlIGxvY2FsIHN5c3RlbSB0aW1lLg0KLSoqLw0KLXR5cGVkZWYgc3RydWN0IF9GUERGX1NZU1RFTVRJTUUgDQotew0KLSAgICB1bnNpZ25lZCBzaG9ydCB3WWVhcjsJCQkvKiB5ZWFycyBzaW5jZSAxOTAwICovDQotICAgIHVuc2lnbmVkIHNob3J0IHdNb250aDsJCQkvKiBtb250aHMgc2luY2UgSmFudWFyeSAtIFswLDExXSAqLw0KLSAgICB1bnNpZ25lZCBzaG9ydCB3RGF5T2ZXZWVrOwkJLyogZGF5cyBzaW5jZSBTdW5kYXkgLSBbMCw2XSAqLw0KLSAgICB1bnNpZ25lZCBzaG9ydCB3RGF5OwkJCS8qIGRheSBvZiB0aGUgbW9udGggLSBbMSwzMV0gKi8NCi0gICAgdW5zaWduZWQgc2hvcnQgd0hvdXI7CQkJLyogaG91cnMgc2luY2UgbWlkbmlnaHQgLSBbMCwyM10gKi8NCi0gICAgdW5zaWduZWQgc2hvcnQgd01pbnV0ZTsJCQkvKiBtaW51dGVzIGFmdGVyIHRoZSBob3VyIC0gWzAsNTldICovDQotICAgIHVuc2lnbmVkIHNob3J0IHdTZWNvbmQ7CQkJLyogc2Vjb25kcyBhZnRlciB0aGUgbWludXRlIC0gWzAsNTldICovDQotICAgIHVuc2lnbmVkIHNob3J0IHdNaWxsaXNlY29uZHM7CS8qIG1pbGxpc2Vjb25kcyBhZnRlciB0aGUgc2Vjb25kIC0gWzAsOTk5XSAqLw0KLX1GUERGX1NZU1RFTVRJTUU7DQotDQotDQotdHlwZWRlZiBzdHJ1Y3QgIF9GUERGX0ZPUk1GSUxMSU5GTw0KLXsNCi0JLyoqDQotCSAqIFZlcnNpb24gbnVtYmVyIG9mIHRoZSBpbnRlcmZhY2UuIEN1cnJlbnRseSBtdXN0IGJlIDEuDQotCSAqKi8NCi0JaW50CXZlcnNpb247DQotDQotCQkvKiogDQotCSAqIE1ldGhvZDogUmVsZWFzZQ0KLQkgKgkJCUdpdmUgaW1wbGVtZW50YXRpb24gYSBjaGFuY2UgdG8gcmVsZWFzZSBhbnkgZGF0YSBhZnRlciB0aGUgaW50ZXJmYWNlIGlzIG5vIGxvbmdlciB1c2VkDQotCSAqIEludGVyZmFjZSBWZXJzaW9uOg0KLQkgKgkJCTENCi0JICogSW1wbGVtZW50YXRpb24gUmVxdWlyZWQ6DQotCSAqCQkJTm8NCi0JICogQ29tbWVudHM6DQotCSAqCQkJQ2FsbGVkIGJ5IEZveGl0IFNESyBkdXJpbmcgdGhlIGZpbmFsIGNsZWFudXAgcHJvY2Vzcy4NCi0JICogUGFyYW1ldGVyczoNCi0JICoJCQlwVGhpcwkJLQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZg0KLQkgKiBSZXR1cm4gVmFsdWU6DQotCSAqCQkJTm9uZQ0KLQkgKi8NCi0NCi0Jdm9pZCAoKlJlbGVhc2UpKHN0cnVjdCBfRlBERl9GT1JNRklMTElORk8qIHBUaGlzKTsNCi0NCi0JLyoqIA0KLQkgKiBNZXRob2Q6IEZGSV9JbnZhbGlkYXRlDQotCSAqCQkJSW52YWxpZGF0ZSB0aGUgY2xpZW50IGFyZWEgd2l0aGluIHRoZSBzcGVjaWZpZWQgcmVjdGFuZ2xlLg0KLQkgKiBJbnRlcmZhY2UgVmVyc2lvbjoNCi0JICoJCQkxDQotCSAqIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOg0KLQkJKgkJCXllcw0KLQkgKiBQYXJhbWV0ZXJzOg0KLQkgKgkJCXBUaGlzCQktCVBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgaXRzZWxmLg0KLQkgKgkJCXBhZ2UJCS0JSGFuZGxlIHRvIHRoZSBwYWdlLiBSZXR1cm5lZCBieSBGUERGX0xvYWRQYWdlIGZ1bmN0aW9uLg0KLQkgKgkJCWxlZnQJCS0JTGVmdCBwb3NpdGlvbiBvZiB0aGUgY2xpZW50IGFyZWEgaW4gUERGIHBhZ2UgY29vcmRpbmF0ZS4NCi0JICoJCQl0b3AJCQktCVRvcCAgcG9zaXRpb24gb2YgdGhlIGNsaWVudCBhcmVhIGluIFBERiBwYWdlIGNvb3JkaW5hdGUuDQotCSAqCQkJcmlnaHQJCS0JUmlnaHQgcG9zaXRpb24gb2YgdGhlIGNsaWVudCBhcmVhIGluIFBERiBwYWdlICBjb29yZGluYXRlLg0KLQkgKgkJCWJvdHRvbQkJLQlCb3R0b20gcG9zaXRpb24gb2YgdGhlIGNsaWVudCBhcmVhIGluIFBERiBwYWdlIGNvb3JkaW5hdGUuDQotCSAqIFJldHVybiBWYWx1ZToNCi0JICoJCQlOb25lLg0KLQkgKg0KLQkgKmNvbW1lbnRzOg0KLQkgKgkJCUFsbCBwb3NpdGlvbnMgYXJlIG1lYXN1cmVkIGluIFBERiAidXNlciBzcGFjZSIuDQotCSAqCQkJSW1wbGVtZW50YXRpb24gc2hvdWxkIGNhbGwgRlBERl9SZW5kZXJQYWdlQml0bWFwKCkgZnVuY3Rpb24gZm9yIHJlcGFpbnRpbmcgYSBzcGVjaWZpZWQgcGFnZSBhcmVhLg0KLQkqLw0KLQl2b2lkICgqRkZJX0ludmFsaWRhdGUpKHN0cnVjdCBfRlBERl9GT1JNRklMTElORk8qIHBUaGlzLEZQREZfUEFHRSBwYWdlLCBkb3VibGUgbGVmdCwgZG91YmxlIHRvcCwgZG91YmxlIHJpZ2h0LCBkb3VibGUgYm90dG9tKTsNCi0JDQotCS8qKiANCi0JICogTWV0aG9kOiBGRklfT3V0cHV0U2VsZWN0ZWRSZWN0DQotCSAqCQkJV2hlbiB1c2VyIGlzIHRha2luZyB0aGUgbW91c2UgdG8gc2VsZWN0IHRleHRzIG9uIGEgZm9ybSBmaWVsZCwgdGhpcyBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGtlZXAgDQotCSAqCQkJcmV0dXJuaW5nIHRoZSBzZWxlY3RlZCBhcmVhcyB0byB0aGUgaW1wbGVtZW50YXRpb24uDQotCSAqDQotCSAqIEludGVyZmFjZSBWZXJzaW9uOg0KLQkgKgkJCTENCi0JICogSW1wbGVtZW50YXRpb24gUmVxdWlyZWQ6DQotCSAqCQkJTm8NCi0JICogUGFyYW1ldGVyczoNCi0JICoJCQlwVGhpcwkJLQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZi4NCi0JICoJCQlwYWdlCQktCUhhbmRsZSB0byB0aGUgcGFnZS4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkUGFnZSBmdW5jdGlvbi4NCi0JICoJCQlsZWZ0CQktCUxlZnQgcG9zaXRpb24gb2YgdGhlIGNsaWVudCBhcmVhIGluIFBERiBwYWdlIGNvb3JkaW5hdGUuDQotCSAqCQkJdG9wCQkJLQlUb3AgIHBvc2l0aW9uIG9mIHRoZSBjbGllbnQgYXJlYSBpbiBQREYgcGFnZSBjb29yZGluYXRlLg0KLQkgKgkJCXJpZ2h0CQktCVJpZ2h0IHBvc2l0aW9uIG9mIHRoZSBjbGllbnQgYXJlYSBpbiBQREYgcGFnZSAgY29vcmRpbmF0ZS4NCi0JICoJCQlib3R0b20JCS0JQm90dG9tIHBvc2l0aW9uIG9mIHRoZSBjbGllbnQgYXJlYSBpbiBQREYgcGFnZSBjb29yZGluYXRlLg0KLQkgKiBSZXR1cm4gVmFsdWU6DQotCSAqCQkJTm9uZS4NCi0JICoNCi0JICogY29tbWVudHM6DQotCSAqCQkJVGhpcyBDQUxMQkFDSyBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIGltcGxlbWVudGluZyBzcGVjaWFsIHRleHQgc2VsZWN0aW9uIGVmZmVjdC4gSW1wbGVtZW50YXRpb24gc2hvdWxkDQotCSAqCQkJZmlyc3QgcmVjb3JkcyB0aGUgcmV0dXJuZWQgcmVjdGFuZ2xlcywgdGhlbiBkcmF3IHRoZW0gb25lIGJ5IG9uZSBhdCB0aGUgcGFpbnRpbmcgcGVyaW9kLCBsYXN0LHJlbW92ZSBhbGwgDQotCSAqCQkJdGhlIHJlY29yZGVkIHJlY3RhbmdsZXMgd2hlbiBmaW5pc2ggcGFpbnRpbmcuDQotCSovDQotCXZvaWQgKCpGRklfT3V0cHV0U2VsZWN0ZWRSZWN0KShzdHJ1Y3QgX0ZQREZfRk9STUZJTExJTkZPKiBwVGhpcyxGUERGX1BBR0UgcGFnZSwgZG91YmxlIGxlZnQsIGRvdWJsZSB0b3AsIGRvdWJsZSByaWdodCwgZG91YmxlIGJvdHRvbSk7DQotDQotCS8qKiANCi0JKiBNZXRob2Q6IEZGSV9TZXRDdXJzb3INCi0JKgkJCVNldCB0aGUgQ3Vyc29yIHNoYXBlLg0KLQkqIEludGVyZmFjZSBWZXJzaW9uOg0KLQkqCQkJMQ0KLQkqIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOg0KLQkqCQkJeWVzDQotCSogUGFyYW1ldGVyczoNCi0JKgkJcFRoaXMJCS0JUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBpdHNlbGYuDQotCSogCQluQ3Vyc29yVHlwZQktCUN1cnNvciB0eXBlLiBzZWUgRmxhZ3MgZm9yIEN1cnNvciB0eXBlIGZvciB0aGUgZGV0YWlscy4NCi0JKiAJUmV0dXJuIHZhbHVlOg0KLQkqIAkJTm9uZS4NCi0JKiAqLw0KLQl2b2lkICgqRkZJX1NldEN1cnNvcikoc3RydWN0IF9GUERGX0ZPUk1GSUxMSU5GTyogcFRoaXMsIGludCBuQ3Vyc29yVHlwZSk7DQotDQotCS8qKiANCi0JKiBNZXRob2Q6IEZGSV9TZXRUaW1lcg0KLQkqCQkJVGhpcyBtZXRob2QgaW5zdGFsbHMgYSBzeXN0ZW0gdGltZXIuIEEgdGltZS1vdXQgdmFsdWUgaXMgc3BlY2lmaWVkLCANCi0JKgkJCWFuZCBldmVyeSB0aW1lIGEgdGltZS1vdXQgb2NjdXJzLCB0aGUgc3lzdGVtIHBhc3NlcyBhIG1lc3NhZ2UgdG8NCi0JKgkJCXRoZSBUaW1lclByb2MgY2FsbGJhY2sgZnVuY3Rpb24uIA0KLQkqIEludGVyZmFjZSBWZXJzaW9uOg0KLQkqCQkJMQ0KLQkqIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOg0KLQkqCQkJeWVzDQotCSogUGFyYW1ldGVyczoNCi0JKgkJcFRoaXMJCS0JUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBpdHNlbGYuDQotCSogCQl1RWxhcHNlCQktCVNwZWNpZmllcyB0aGUgdGltZS1vdXQgdmFsdWUsIGluIG1pbGxpc2Vjb25kcy4NCi0JKiAJCWxwVGltZXJGdW5jCS0JQSBwb2ludGVyIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi1UaW1lckNhbGxiYWNrLg0KLQkqIAlSZXR1cm4gdmFsdWU6DQotCSogCQlUaGUgdGltZXIgaWRlbnRpZmllciBvZiB0aGUgbmV3IHRpbWVyIGlmIHRoZSBmdW5jdGlvbiBpcyBzdWNjZXNzZnVsLg0KLQkqCQlBbiBhcHBsaWNhdGlvbiBwYXNzZXMgdGhpcyB2YWx1ZSB0byB0aGUgRkZJX0tpbGxUaW1lciBtZXRob2QgdG8ga2lsbCANCi0JKgkJdGhlIHRpbWVyLiBOb256ZXJvIGlmIGl0IGlzIHN1Y2Nlc3NmdWw7IG90aGVyd2lzZSwgaXQgaXMgemVyby4NCi0JKiAqLw0KLQlpbnQgICgqRkZJX1NldFRpbWVyKShzdHJ1Y3QgX0ZQREZfRk9STUZJTExJTkZPKiBwVGhpcywgaW50IHVFbGFwc2UsIFRpbWVyQ2FsbGJhY2sgbHBUaW1lckZ1bmMpOw0KLQ0KLQkvKiogDQotCSogTWV0aG9kOiBGRklfS2lsbFRpbWVyDQotCSoJCQlUaGlzIG1ldGhvZCBraWxscyB0aGUgdGltZXIgZXZlbnQgaWRlbnRpZmllZCBieSBuSURFdmVudCwgc2V0IGJ5IGFuIGVhcmxpZXIgY2FsbCB0byBGRklfU2V0VGltZXIuIA0KLQkqIEludGVyZmFjZSBWZXJzaW9uOg0KLQkqCQkJMQ0KLQkqIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOg0KLQkqCQkJeWVzDQotCSogUGFyYW1ldGVyczoNCi0JKgkJcFRoaXMJCS0JUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBpdHNlbGYuDQotCSogCQluVGltZXJJRAktCVRoZSB0aW1lciBJRCByZXR1cm4gYnkgRkZJX1NldFRpbWVyIGZ1bmN0aW9uLg0KLQkqIAlSZXR1cm4gdmFsdWU6DQotCSogCQlOb25lLg0KLQkqICovDQotCXZvaWQgKCpGRklfS2lsbFRpbWVyKShzdHJ1Y3QgX0ZQREZfRk9STUZJTExJTkZPKiBwVGhpcywgaW50IG5UaW1lcklEKTsNCi0NCi0NCi0JLyoqIA0KLQkqIE1ldGhvZDogRkZJX0dldExvY2FsVGltZQ0KLQkqCQkJVGhpcyBtZXRob2QgcmVjZWl2ZXMgdGhlIGN1cnJlbnQgbG9jYWwgdGltZSBvbiB0aGUgc3lzdGVtLiANCi0JKiBJbnRlcmZhY2UgVmVyc2lvbjoNCi0JKgkJCTENCi0JKiBJbXBsZW1lbnRhdGlvbiBSZXF1aXJlZDoNCi0JKgkJCXllcw0KLQkqIFBhcmFtZXRlcnM6DQotCSoJCXBUaGlzCQktCVBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgaXRzZWxmLg0KLQkqIAlSZXR1cm4gdmFsdWU6DQotCSogCQlOb25lLg0KLQkqICovDQotCUZQREZfU1lTVEVNVElNRSAoKkZGSV9HZXRMb2NhbFRpbWUpKHN0cnVjdCBfRlBERl9GT1JNRklMTElORk8qIHBUaGlzKTsNCi0NCi0JLyoqIA0KLQkqIE1ldGhvZDogRkZJX09uQ2hhbmdlDQotCSoJCQlUaGlzIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgdG8gbm90aWZ5IGltcGxlbWVudGF0aW9uIHdoZW4gdGhlIHZhbHVlIG9mIGFueSBGb3JtRmllbGQgb24gdGhlIGRvY3VtZW50IGhhZCBiZWVuIGNoYW5nZWQuDQotCSogSW50ZXJmYWNlIFZlcnNpb246DQotCSoJCQkxDQotCSogSW1wbGVtZW50YXRpb24gUmVxdWlyZWQ6DQotCSoJCQlubw0KLQkqIFBhcmFtZXRlcnM6DQotCSoJCXBUaGlzCQktCVBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgaXRzZWxmLg0KLQkqIAlSZXR1cm4gdmFsdWU6DQotCSogCQlOb25lLg0KLQkqICovDQotCXZvaWQgKCpGRklfT25DaGFuZ2UpKHN0cnVjdCBfRlBERl9GT1JNRklMTElORk8qIHBUaGlzKTsNCi0NCi0JLyoqIA0KLQkqIE1ldGhvZDogRkZJX0dldFBhZ2UNCi0JKgkJCVRoaXMgbWV0aG9kIHJlY2VpdmVzIHRoZSBwYWdlIHBvaW50ZXIgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWVkIHBhZ2UgaW5kZXguDQotCSogSW50ZXJmYWNlIFZlcnNpb246DQotCSoJCQkxDQotCSogSW1wbGVtZW50YXRpb24gUmVxdWlyZWQ6DQotCSoJCQl5ZXMNCi0JKiBQYXJhbWV0ZXJzOg0KLQkqCQlwVGhpcwkJLQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZi4NCi0JKgkJZG9jdW1lbnQJLQlIYW5kbGUgdG8gZG9jdW1lbnQuIFJldHVybmVkIGJ5IEZQREZfTG9hZERvY3VtZW50IGZ1bmN0aW9uLg0KLQkqCQluUGFnZUluZGV4ICAtCUluZGV4IG51bWJlciBvZiB0aGUgcGFnZS4gMCBmb3IgdGhlIGZpcnN0IHBhZ2UuDQotCSogUmV0dXJuIHZhbHVlOg0KLQkqIAkJSGFuZGxlIHRvIHRoZSBwYWdlLiBSZXR1cm5lZCBieSBGUERGX0xvYWRQYWdlIGZ1bmN0aW9uLg0KLQkqIENvbW1lbnRzOg0KLQkqCQlJbiBzb21lIGNhc2VzLCB0aGUgZG9jdW1lbnQtbGV2ZWwgSmF2YVNjcmlwdCBhY3Rpb24gbWF5IHJlZmVyIHRvIGEgcGFnZSB3aGljaCBoYWRuJ3QgYmVlbiBsb2FkZWQgeWV0Lg0KLQkqCQlUbyBzdWNjZXNzZnVsbHkgcnVuIHRoZSBqYXZhc2NyaXB0IGFjdGlvbiwgaW1wbGVtZW50YXRpb24gbmVlZCB0byBsb2FkIHRoZSBwYWdlIGZvciBTREsuDQotCSogKi8NCi0JRlBERl9QQUdFCSgqRkZJX0dldFBhZ2UpKHN0cnVjdCBfRlBERl9GT1JNRklMTElORk8qIHBUaGlzLCBGUERGX0RPQ1VNRU5UIGRvY3VtZW50LCBpbnQgblBhZ2VJbmRleCk7DQotDQotCS8qKiANCi0JKiBNZXRob2Q6IEZGSV9HZXRDdXJyZW50UGFnZQ0KLQkqCQlUaGlzIG1ldGhvZCByZWNlaXZlcyB0aGUgY3VycmVudCBwYWdlIHBvaW50ZXIuDQotCSogSW50ZXJmYWNlIFZlcnNpb246DQotCSoJCQkxDQotCSogSW1wbGVtZW50YXRpb24gUmVxdWlyZWQ6DQotCSoJCQl5ZXMNCi0JKiBQYXJhbWV0ZXJzOg0KLQkqCQlwVGhpcwkJLQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZi4NCi0JKgkJZG9jdW1lbnQJLQlIYW5kbGUgdG8gZG9jdW1lbnQuIFJldHVybmVkIGJ5IEZQREZfTG9hZERvY3VtZW50IGZ1bmN0aW9uLg0KLQkqIFJldHVybiB2YWx1ZToNCi0JKiAJCUhhbmRsZSB0byB0aGUgcGFnZS4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkUGFnZSBmdW5jdGlvbi4NCi0JKiAqLw0KLQlGUERGX1BBR0UJKCpGRklfR2V0Q3VycmVudFBhZ2UpKHN0cnVjdCBfRlBERl9GT1JNRklMTElORk8qIHBUaGlzLCBGUERGX0RPQ1VNRU5UIGRvY3VtZW50KTsNCi0NCi0JLyoqIA0KLQkqIE1ldGhvZDogRkZJX0dldFJvdGF0aW9uDQotCSoJCQlUaGlzIG1ldGhvZCByZWNlaXZlcyBjdXJyZW50bHkgcm90YXRpb24gb2YgdGhlIHBhZ2Ugdmlldy4NCi0JKiBJbnRlcmZhY2UgVmVyc2lvbjoNCi0JKgkJCTENCi0JKiBJbXBsZW1lbnRhdGlvbiBSZXF1aXJlZDoNCi0JKgkJCXllcw0KLQkqIFBhcmFtZXRlcnM6DQotCSoJCXBUaGlzCQktCVBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgaXRzZWxmLg0KLQkqCQlwYWdlCQktCUhhbmRsZSB0byBwYWdlLiBSZXR1cm5lZCBieSBGUERGX0xvYWRQYWdlIGZ1bmN0aW9uLg0KLQkqIFJldHVybiB2YWx1ZToNCi0JKiAJCVRoZSBwYWdlIHJvdGF0aW9uLiBTaG91bGQgYmUgMCgwIGRlZ3JlZSksMSg5MCBkZWdyZWUpLDIoMTgwIGRlZ3JlZSksMygyNzAgZGVncmVlKSwgaW4gYSBjbG9ja3dpc2UgZGlyZWN0aW9uLg0KLQkqICovDQotCWludCAJKCpGRklfR2V0Um90YXRpb24pKHN0cnVjdCBfRlBERl9GT1JNRklMTElORk8qIHBUaGlzLCBGUERGX1BBR0UgcGFnZSk7DQotDQotCS8qKiANCi0JKiBNZXRob2Q6IEZGSV9FeGVjdXRlTmFtZWRBY3Rpb24NCi0JKgkJCVRoaXMgbWV0aG9kIHdpbGwgZXhlY3V0ZSBhbiBuYW1lZCBhY3Rpb24uDQotCSogSW50ZXJmYWNlIFZlcnNpb246DQotCSoJCQkxDQotCSogSW1wbGVtZW50YXRpb24gUmVxdWlyZWQ6DQotCSoJCQl5ZXMNCi0JKiBQYXJhbWV0ZXJzOg0KLQkqCQlwVGhpcwkJCS0JUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBpdHNlbGYuDQotCSoJCW5hbWVkQWN0aW9uCQktCUEgYnl0ZSBzdHJpbmcgd2hpY2ggaW5kaWNhdGVzIHRoZSBuYW1lZCBhY3Rpb24sIHRlcm1pbmF0ZWQgYnkgMC4NCi0JKiBSZXR1cm4gdmFsdWU6DQotCSogCQlOb25lLg0KLQkqIENvbW1lbnRzOg0KLQkqCQlTZWUgdGhlIG5hbWVkIGFjdGlvbnMgZGVzY3JpcHRpb24gb2YgPDxQREYgUmVmZXJlbmNlLCB2ZXJzaW9uIDEuNz4+IGZvciBtb3JlIGRldGFpbHMuICANCi0JKiAqLw0KLQl2b2lkIAkoKkZGSV9FeGVjdXRlTmFtZWRBY3Rpb24pKHN0cnVjdCBfRlBERl9GT1JNRklMTElORk8qIHBUaGlzLCBGUERGX0JZVEVTVFJJTkcgbmFtZWRBY3Rpb24pOw0KLQkvKiogDQotCSogQGJyaWVmIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIHdoZW4gYSB0ZXh0IGZpZWxkIGlzIGdldHRpbmcgb3IgbG9zaW5nIGEgZm9jdXMuDQotCSoNCi0JKiBAcGFyYW1baW5dIHBUaGlzCQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZi4NCi0JKiBAcGFyYW1baW5dIHZhbHVlCQlUaGUgc3RyaW5nIHZhbHVlIG9mIHRoZSBmb3JtIGZpZWxkLCBpbiBVVEYtMTZMRSBmb3JtYXQuDQotCSogQHBhcmFtW2luXSB2YWx1ZUxlbglUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgdmFsdWUsIG51bWJlciBvZiBjaGFyYWN0ZXJzIChub3QgYnl0ZXMpLg0KLQkqIEBwYXJhbVtpbl0gaXNfZm9jdXMJVHJ1ZSBpZiB0aGUgZm9ybSBmaWVsZCBpcyBnZXR0aW5nIGEgZm9jdXMsIEZhbHNlIGZvciBsb3NpbmcgYSBmb2N1cy4NCi0JKg0KLQkqIEByZXR1cm4gTm9uZS4NCi0JKg0KLQkqIEBub3RlIEN1cnJlbnRseSxvbmx5IHN1cHBvcnQgdGV4dCBmaWVsZCBhbmQgY29tYm9ib3ggZmllbGQuDQotCSogKi8NCi0Jdm9pZAkoKkZGSV9TZXRUZXh0RmllbGRGb2N1cykoc3RydWN0IF9GUERGX0ZPUk1GSUxMSU5GTyogcFRoaXMsIEZQREZfV0lERVNUUklORyB2YWx1ZSwgRlBERl9EV09SRCB2YWx1ZUxlbiwgRlBERl9CT09MIGlzX2ZvY3VzKTsNCi0NCi0JDQotCS8qKiANCi0JKiBNZXRob2Q6IEZGSV9Eb1VSSUFjdGlvbg0KLQkqCQkJVGhpcyBhY3Rpb24gcmVzb2x2ZXMgdG8gYSB1bmlmb3JtIHJlc291cmNlIGlkZW50aWZpZXIuIA0KLQkqIEludGVyZmFjZSBWZXJzaW9uOg0KLQkqCQkJMQ0KLQkqIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOg0KLQkqCQkJTm8NCi0JKiBQYXJhbWV0ZXJzOg0KLQkqCQlwVGhpcwkJCS0JUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBpdHNlbGYuDQotCSoJCWJzVVJJCQkJLQlBIGJ5dGUgc3RyaW5nIHdoaWNoIGluZGljYXRlcyB0aGUgdW5pZm9ybSByZXNvdXJjZSBpZGVudGlmaWVyLCB0ZXJtaW5hdGVkIGJ5IDAuDQotCSogUmV0dXJuIHZhbHVlOg0KLQkqIAkJTm9uZS4NCi0JKiBDb21tZW50czoNCi0JKgkJU2VlIHRoZSBVUkkgYWN0aW9ucyBkZXNjcmlwdGlvbiBvZiA8PFBERiBSZWZlcmVuY2UsIHZlcnNpb24gMS43Pj4gZm9yIG1vcmUgZGV0YWlscy4gIA0KLQkqICovDQotCXZvaWQJKCpGRklfRG9VUklBY3Rpb24pKHN0cnVjdCBfRlBERl9GT1JNRklMTElORk8qIHBUaGlzLCBGUERGX0JZVEVTVFJJTkcgYnNVUkkpOw0KLQkNCi0JLyoqIA0KLQkqIE1ldGhvZDogRkZJX0RvR29Ub0FjdGlvbg0KLQkqCQkJVGhpcyBhY3Rpb24gY2hhbmdlcyB0aGUgdmlldyB0byBhIHNwZWNpZmllZCBkZXN0aW5hdGlvbi4NCi0JKiBJbnRlcmZhY2UgVmVyc2lvbjoNCi0JKgkJCTENCi0JKiBJbXBsZW1lbnRhdGlvbiBSZXF1aXJlZDoNCi0JKgkJCU5vDQotCSogUGFyYW1ldGVyczoNCi0JKgkJcFRoaXMJCQktCVBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgaXRzZWxmLg0KLQkqCQluUGFnZUluZGV4CQktCVRoZSBpbmRleCBvZiB0aGUgUERGIHBhZ2UuDQotCSoJCXpvb21Nb2RlCQktCVRoZSB6b29tIG1vZGUgZm9yIHZpZXdpbmcgcGFnZS5TZWUgTWFjcm9zICJQREZaT09NX1hYWCIgZGVmaW5lZCBpbiAiZnBkZmRvYy5oIi4gDQotCSoJCWZQb3NBcnJheQkJLQlUaGUgZmxvYXQgYXJyYXkgd2hpY2ggY2FycmllcyB0aGUgcG9zaXRpb24gaW5mby4NCi0JKgkJc2l6ZW9mQXJyYXkJCS0JVGhlIHNpemUgb2YgZmxvYXQgYXJyYXkuDQotCSogUmV0dXJuIHZhbHVlOg0KLQkqIAkJTm9uZS4NCi0JKiBDb21tZW50czoNCi0JKgkJU2VlIHRoZSBEZXN0aW5hdGlvbnMgZGVzY3JpcHRpb24gb2YgPDxQREYgUmVmZXJlbmNlLCB2ZXJzaW9uIDEuNz4+IGluIDguMi4xIGZvciBtb3JlIGRldGFpbHMuICANCi0JKiovDQotCXZvaWQJKCpGRklfRG9Hb1RvQWN0aW9uKShzdHJ1Y3QgX0ZQREZfRk9STUZJTExJTkZPKiBwVGhpcywgaW50IG5QYWdlSW5kZXgsIGludCB6b29tTW9kZSwgZmxvYXQqIGZQb3NBcnJheSwgaW50IHNpemVvZkFycmF5KTsNCi0JLyoqDQotCSoJcG9pbnRlciB0byBJUERGX0pTUExBVEZPUk0gaW50ZXJmYWNlDQotCSoqLw0KLQlJUERGX0pTUExBVEZPUk0qCW1fcEpzUGxhdGZvcm07DQotDQotfSBGUERGX0ZPUk1GSUxMSU5GTzsNCi0NCi0NCi0NCi0vKioNCi0gKiBGdW5jdGlvbjogRlBERkRPQ19Jbml0Rm9ybUZpbGxFbnZpcm91bWVudA0KLSAqCQkJSW5pdCBmb3JtIGZpbGwgZW52aXJvbm1lbnQuIA0KLSAqIENvbW1lbnRzOg0KLSAqCQkJVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBhbnkgZm9ybSBmaWxsIG9wZXJhdGlvbi4NCi0gKiBQYXJhbWV0ZXJzOg0KLSAqCQkJZG9jdW1lbnQJCS0JSGFuZGxlIHRvIGRvY3VtZW50LiBSZXR1cm5lZCBieSBGUERGX0xvYWREb2N1bWVudCBmdW5jdGlvbi4NCi0gKgkJCXBGb3JtRmlsbEluZm8JLQlQb2ludGVyIHRvIGEgRlBERl9GT1JNRklMTElORk8gc3RydWN0dXJlLg0KLSAqIFJldHVybiBWYWx1ZToNCi0gKgkJCVJldHVybiBoYW5kbGVyIHRvIHRoZSBmb3JtIGZpbGwgbW9kdWxlLiBOVUxMIG1lYW5zIGZhaWxzLiANCi0gKiovDQotRExMRVhQT1JUIEZQREZfRk9STUhBTkRMRSBTVERDQUxMIEZQREZET0NfSW5pdEZvcm1GaWxsRW52aXJvdW1lbnQoRlBERl9ET0NVTUVOVCBkb2N1bWVudCwgRlBERl9GT1JNRklMTElORk8qIGZvcm1JbmZvKTsNCi0NCi0vKioNCi0gKiBGdW5jdGlvbjogRlBERkRPQ19FeGl0Rm9ybUZpbGxFbnZpcm91bWVudA0KLSAqCQkJRXhpdCBmb3JtIGZpbGwgZW52aXJvbm1lbnQuIA0KLSAqIFBhcmFtZXRlcnM6DQotICoJCQloSGFuZGxlCQktCUhhbmRsZSB0byB0aGUgZm9ybSBmaWxsIG1vZHVsZS4gUmV0dXJuZWQgYnkgRlBERkRPQ19Jbml0Rm9ybUZpbGxFbnZpcm91bWVudC4NCi0gKiBSZXR1cm4gVmFsdWU6DQotICoJCQlOVUxMLg0KLSAqKi8NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZET0NfRXhpdEZvcm1GaWxsRW52aXJvdW1lbnQoRlBERl9GT1JNSEFORExFIGhIYW5kbGUpOw0KLQ0KLS8qKg0KLSAqIEZ1bmN0aW9uOiBGT1JNX09uQWZ0ZXJMb2FkUGFnZQ0KLSAqCQkJVGhpcyBtZXRob2QgaXMgcmVxdWlyZWQgZm9yIGltcGxlbWVudGluZyBhbGwgdGhlIGZvcm0gcmVsYXRlZCBmdW5jdGlvbnMuIFNob3VsZCBiZSBpbnZva2VkIGFmdGVyIHVzZXIgDQotICoJCQlzdWNjZXNzZnVsbHkgbG9hZGVkIGEgUERGIHBhZ2UsIGFuZCBtZXRob2QgRlBERkRPQ19Jbml0Rm9ybUZpbGxFbnZpcm91bWVudCBoYWQgYmVlbiBpbnZva2VkLg0KLSAqIFBhcmFtZXRlcnM6DQotICoJCQloSGFuZGxlCQktCUhhbmRsZSB0byB0aGUgZm9ybSBmaWxsIG1vZHVsZS4gUmV0dXJuZWQgYnkgRlBERkRPQ19Jbml0Rm9ybUZpbGxFbnZpcm91bWVudC4NCi0gKiBSZXR1cm4gVmFsdWU6DQotICoJCQlOT05FLg0KLSAqKi8NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZPUk1fT25BZnRlckxvYWRQYWdlKEZQREZfUEFHRSBwYWdlLCBGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSk7DQotDQotLyoqDQotICogRnVuY3Rpb246IEZPUk1fT25CZWZvcmVDbG9zZVBhZ2UNCi0gKgkJCVRoaXMgbWV0aG9kIGlzIHJlcXVpcmVkIGZvciBpbXBsZW1lbnRpbmcgYWxsIHRoZSBmb3JtIHJlbGF0ZWQgZnVuY3Rpb25zLiBTaG91bGQgYmUgaW52b2tlZCBiZWZvcmUgdXNlciANCi0gKgkJCWNsb3NlIHRoZSBQREYgcGFnZS4NCi0gKiBQYXJhbWV0ZXJzOg0KLSAqCQkJcGFnZQkJLQlIYW5kbGUgdG8gdGhlIHBhZ2UuIFJldHVybmVkIGJ5IEZQREZfTG9hZFBhZ2UgZnVuY3Rpb24uDQotICoJCQloSGFuZGxlCQktCUhhbmRsZSB0byB0aGUgZm9ybSBmaWxsIG1vZHVsZS4gUmV0dXJuZWQgYnkgRlBERkRPQ19Jbml0Rm9ybUZpbGxFbnZpcm91bWVudC4NCi0gKiBSZXR1cm4gVmFsdWU6DQotICoJCQlOT05FLg0KLSAqKi8NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZPUk1fT25CZWZvcmVDbG9zZVBhZ2UoRlBERl9QQUdFIHBhZ2UsIEZQREZfRk9STUhBTkRMRSBoSGFuZGxlKTsNCi0NCi0vKioNCi0qIEZ1bmN0aW9uOiBGT1JNX0RvRG9jdW1lbnRKU0FjdGlvbg0KLSoJCQlUaGlzIG1ldGhvZCBpcyByZXF1aXJlZCBmb3IgcGVyZm9ybWluZyBEb2N1bWVudC1sZXZlbCBKYXZhU2NyaXB0IGFjdGlvbi4gSXQgc2hvdWxkIGJlIGludm9rZWQgYWZ0ZXIgdGhlIFBERiBkb2N1bWVudA0KLSoJCQloYWQgYmVlbiBsb2FkZWQuDQotKiBQYXJhbWV0ZXJzOg0KLSoJCQloSGFuZGxlCQktCUhhbmRsZSB0byB0aGUgZm9ybSBmaWxsIG1vZHVsZS4gUmV0dXJuZWQgYnkgRlBERkRPQ19Jbml0Rm9ybUZpbGxFbnZpcm91bWVudC4NCi0qIFJldHVybiBWYWx1ZToNCi0qCQkJTk9ORQ0KLSogQ29tbWVudHM6DQotKgkJCUlmIHRoZXJlIGlzIERvY3VtZW50LWxldmVsIEphdmFTY3JpcHQgYWN0aW9uIGVtYmVkZGVkIGluIHRoZSBkb2N1bWVudCwgdGhpcyBtZXRob2Qgd2lsbCBleGVjdXRlIHRoZSBqYXZhc2NyaXB0IGFjdGlvbjsNCi0qCQkJb3RoZXJ3aXNlLCB0aGUgbWV0aG9kIHdpbGwgZG8gbm90aGluZy4NCi0qKi8NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZPUk1fRG9Eb2N1bWVudEpTQWN0aW9uKEZQREZfRk9STUhBTkRMRSBoSGFuZGxlKTsNCi0NCi0NCi0vKioNCi0qIEZ1bmN0aW9uOiBGT1JNX0RvRG9jdW1lbnRPcGVuQWN0aW9uDQotKgkJCVRoaXMgbWV0aG9kIGlzIHJlcXVpcmVkIGZvciBwZXJmb3JtaW5nIG9wZW4tYWN0aW9uIHdoZW4gdGhlIGRvY3VtZW50IGlzIG9wZW5lZC4NCi0qIFBhcmFtZXRlcnM6DQotKgkJCWhIYW5kbGUJCS0JSGFuZGxlIHRvIHRoZSBmb3JtIGZpbGwgbW9kdWxlLiBSZXR1cm5lZCBieSBGUERGRE9DX0luaXRGb3JtRmlsbEVudmlyb3VtZW50Lg0KLSogUmV0dXJuIFZhbHVlOg0KLSoJCQlOT05FDQotKiBDb21tZW50czoNCi0qCQkJVGhpcyBtZXRob2Qgd2lsbCBkbyBub3RoaW5nIGlmIHRoZXJlIGlzIG5vIG9wZW4tYWN0aW9ucyBlbWJlZGRlZCBpbiB0aGUgZG9jdW1lbnQuIA0KLSoqLw0KLURMTEVYUE9SVCB2b2lkIFNURENBTEwgRk9STV9Eb0RvY3VtZW50T3BlbkFjdGlvbihGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSk7DQotDQotDQotLy8gYWRkaXRpb25hbCBhY3Rpb25zIHR5cGUgb2YgZG9jdW1lbnQuDQotI2RlZmluZSBGUERGRE9DX0FBQ1RJT05fV0MJCTB4MTAJCS8vV0MsIGJlZm9yZSBjbG9zaW5nIGRvY3VtZW50LCBKYXZhU2NyaXB0IGFjdGlvbi4NCi0jZGVmaW5lIEZQREZET0NfQUFDVElPTl9XUwkJMHgxMQkJLy9XUywgYmVmb3JlIHNhdmluZyBkb2N1bWVudCwgSmF2YVNjcmlwdCBhY3Rpb24uDQotI2RlZmluZSBGUERGRE9DX0FBQ1RJT05fRFMJCTB4MTIJCS8vRFMsIGFmdGVyIHNhdmluZyBkb2N1bWVudCwgSmF2YVNjcmlwdCBhY3Rpb24uDQotI2RlZmluZSBGUERGRE9DX0FBQ1RJT05fV1AJCTB4MTMJCS8vV1AsIGJlZm9yZSBwcmludGluZyBkb2N1bWVudCwgSmF2YVNjcmlwdCBhY3Rpb24uDQotI2RlZmluZSBGUERGRE9DX0FBQ1RJT05fRFAJCTB4MTQJCS8vRFAsIGFmdGVyIHByaW50aW5nIGRvY3VtZW50LCBKYXZhU2NyaXB0IGFjdGlvbi4gDQotLyoqDQotKiBGdW5jdGlvbjogRk9STV9Eb0RvY3VtZW50QUFjdGlvbg0KLSoJCQlUaGlzIG1ldGhvZCBpcyByZXF1aXJlZCBmb3IgcGVyZm9ybWluZyB0aGUgZG9jdW1lbnQncyBhZGRpdGlvbmFsLWFjdGlvbi4NCi0qIFBhcmFtZXRlcnM6DQotKgkJCWhIYW5kbGUJCS0JSGFuZGxlIHRvIHRoZSBmb3JtIGZpbGwgbW9kdWxlLiBSZXR1cm5lZCBieSBGUERGRE9DX0luaXRGb3JtRmlsbEVudmlyb3VtZW50Lg0KLSoJCQlhYVR5cGUJICAgIC0gICBUaGUgdHlwZSBvZiB0aGUgYWRkaXRpb25hbC1hY3Rpb25zIHdoaWNoIGRlZmluZWQgYWJvdmUuDQotKiBSZXR1cm4gVmFsdWU6DQotKgkJCU5PTkUNCi0qIENvbW1lbnRzOg0KLSoJCQlUaGlzIG1ldGhvZCB3aWxsIGRvIG5vdGhpbmcgaWYgdGhlcmUgaXMgbm8gZG9jdW1lbnQgYWRkaXRpb25hbC1hY3Rpb24gY29ycmVzcG9uZGluZyB0byB0aGUgc3BlY2lmaWVkIGFhVHlwZS4NCi0qKi8NCi0NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZPUk1fRG9Eb2N1bWVudEFBY3Rpb24oRlBERl9GT1JNSEFORExFIGhIYW5kbGUsIGludCBhYVR5cGUpOw0KLQ0KLS8vIEFkZGl0aW9uYWwtYWN0aW9uIHR5cGVzIG9mIHBhZ2Ugb2JqZWN0DQotI2RlZmluZSBGUERGUEFHRV9BQUNUSU9OX09QRU4JCTAJCS8vIC9PIC0tIEFuIGFjdGlvbiB0byBiZSBwZXJmb3JtZWQgd2hlbiB0aGUgcGFnZSBpcyBvcGVuZWQNCi0jZGVmaW5lIEZQREZQQUdFX0FBQ1RJT05fQ0xPU0UJCTEJCS8vIC9DIC0tIEFuIGFjdGlvbiB0byBiZSBwZXJmb3JtZWQgd2hlbiB0aGUgcGFnZSBpcyBjbG9zZWQNCi0NCi0vKioNCi0qIEZ1bmN0aW9uOiBGT1JNX0RvUGFnZUFBY3Rpb24NCi0qCQkJVGhpcyBtZXRob2QgaXMgcmVxdWlyZWQgZm9yIHBlcmZvcm1pbmcgdGhlIHBhZ2Ugb2JqZWN0J3MgYWRkaXRpb25hbC1hY3Rpb24gd2hlbiBvcGVuZWQgb3IgY2xvc2VkLg0KLSogUGFyYW1ldGVyczoNCi0qCQkJcGFnZQkJLQlIYW5kbGUgdG8gdGhlIHBhZ2UuIFJldHVybmVkIGJ5IEZQREZfTG9hZFBhZ2UgZnVuY3Rpb24uDQotKgkJCWhIYW5kbGUJCS0JSGFuZGxlIHRvIHRoZSBmb3JtIGZpbGwgbW9kdWxlLiBSZXR1cm5lZCBieSBGUERGRE9DX0luaXRGb3JtRmlsbEVudmlyb3VtZW50Lg0KLSoJCQlhYVR5cGUJICAgIC0gICBUaGUgdHlwZSBvZiB0aGUgcGFnZSBvYmplY3QncyBhZGRpdGlvbmFsLWFjdGlvbnMgd2hpY2ggZGVmaW5lZCBhYm92ZS4NCi0qIFJldHVybiBWYWx1ZToNCi0qCQkJTk9ORQ0KLSogQ29tbWVudHM6DQotKgkJCVRoaXMgbWV0aG9kIHdpbGwgZG8gbm90aGluZyBpZiBubyBhZGRpdGlvbmFsLWFjdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpZWQgYWFUeXBlIGV4aXN0cy4NCi0qKi8NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZPUk1fRG9QYWdlQUFjdGlvbihGUERGX1BBR0UgcGFnZSwgRlBERl9GT1JNSEFORExFIGhIYW5kbGUsIGludCBhYVR5cGUpOw0KLQ0KLS8qKg0KLSAqIEZ1bmN0aW9uOiBGT1JNX09uTW91c2VNb3ZlDQotICoJCQlZb3UgY2FuIGNhbGwgdGhpcyBtZW1iZXIgZnVuY3Rpb24gd2hlbiB0aGUgbW91c2UgY3Vyc29yIG1vdmVzLiANCi0gKiBQYXJhbWV0ZXJzOg0KLSAqCQkJaEhhbmRsZQkJLQlIYW5kbGUgdG8gdGhlIGZvcm0gZmlsbCBtb2R1bGUuIFJldHVybmVkIGJ5IEZQREZET0NfSW5pdEZvcm1GaWxsRW52aXJvdW1lbnQuDQotICoJCQlwYWdlCQktCUhhbmRsZSB0byB0aGUgcGFnZS4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkUGFnZSBmdW5jdGlvbi4NCi0gKgkJCW1vZGlmaWVyCQktCUluZGljYXRlcyB3aGV0aGVyIHZhcmlvdXMgdmlydHVhbCBrZXlzIGFyZSBkb3duLiANCi0gKgkJCXBhZ2VfeAkJLQlTcGVjaWZpZXMgdGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY3Vyc29yIGluIFBERiB1c2VyIHNwYWNlLiANCi0gKgkJCXBhZ2VfeQkJLQlTcGVjaWZpZXMgdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgY3Vyc29yIGluIFBERiB1c2VyIHNwYWNlLg0KLSAqIFJldHVybiBWYWx1ZToNCi0gKgkJCVRSVUUgaW5kaWNhdGVzIHN1Y2Nlc3M7IG90aGVyd2lzZSBmYWxzZS4NCi0gKiovDQotRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZPUk1fT25Nb3VzZU1vdmUoRlBERl9GT1JNSEFORExFIGhIYW5kbGUsRlBERl9QQUdFIHBhZ2UsIGludCBtb2RpZmllciwgZG91YmxlIHBhZ2VfeCwgZG91YmxlIHBhZ2VfeSk7DQotDQotLyoqDQotICogRnVuY3Rpb246IEZPUk1fT25MQnV0dG9uRG93bg0KLSAqCQkJWW91IGNhbiBjYWxsIHRoaXMgbWVtYmVyIGZ1bmN0aW9uIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgbGVmdCBtb3VzZSBidXR0b24uDQotICogUGFyYW1ldGVyczoNCi0gKgkJCWhIYW5kbGUJCS0JSGFuZGxlIHRvIHRoZSBmb3JtIGZpbGwgbW9kdWxlLiBSZXR1cm5lZCBieSBGUERGRE9DX0luaXRGb3JtRmlsbEVudmlyb3VtZW50Lg0KLSAqCQkJcGFnZQkJLQlIYW5kbGUgdG8gdGhlIHBhZ2UuIFJldHVybmVkIGJ5IEZQREZfTG9hZFBhZ2UgZnVuY3Rpb24uDQotICoJCQltb2RpZmllcgkJLQlJbmRpY2F0ZXMgd2hldGhlciB2YXJpb3VzIHZpcnR1YWwga2V5cyBhcmUgZG93bi4gDQotICoJCQlwYWdlX3gJCS0JU3BlY2lmaWVzIHRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGN1cnNvciBpbiBQREYgdXNlciBzcGFjZS4gDQotICoJCQlwYWdlX3kJCS0JU3BlY2lmaWVzIHRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIGN1cnNvciBpbiBQREYgdXNlciBzcGFjZS4NCi0gKiBSZXR1cm4gVmFsdWU6DQotICoJCQlUUlVFIGluZGljYXRlcyBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UuDQotICoqLw0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGT1JNX09uTEJ1dHRvbkRvd24oRlBERl9GT1JNSEFORExFIGhIYW5kbGUsRlBERl9QQUdFIHBhZ2UsIGludCBtb2RpZmllciwgZG91YmxlIHBhZ2VfeCwgZG91YmxlIHBhZ2VfeSk7DQotDQotLyoqDQotICogRnVuY3Rpb246IEZPUk1fT25MQnV0dG9uVXANCi0gKgkJCVlvdSBjYW4gY2FsbCB0aGlzIG1lbWJlciBmdW5jdGlvbiB3aGVuIHRoZSB1c2VyIHJlbGVhc2VzIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbi4NCi0gKiBQYXJhbWV0ZXJzOg0KLSAqCQkJaEhhbmRsZQkJLQlIYW5kbGUgdG8gdGhlIGZvcm0gZmlsbCBtb2R1bGUuIFJldHVybmVkIGJ5IEZQREZET0NfSW5pdEZvcm1GaWxsRW52aXJvdW1lbnQuDQotICoJCQlwYWdlCQktCUhhbmRsZSB0byB0aGUgcGFnZS4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkUGFnZSBmdW5jdGlvbi4NCi0gKgkJCW1vZGlmaWVyCS0JSW5kaWNhdGVzIHdoZXRoZXIgdmFyaW91cyB2aXJ0dWFsIGtleXMgYXJlIGRvd24uIA0KLSAqCQkJcGFnZV94CQktCVNwZWNpZmllcyB0aGUgeC1jb29yZGluYXRlIG9mIHRoZSBjdXJzb3IgaW4gZGV2aWNlLiANCi0gKgkJCXBhZ2VfeQkJLQlTcGVjaWZpZXMgdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgY3Vyc29yIGluIGRldmljZS4NCi0gKiBSZXR1cm4gVmFsdWU6DQotICoJCQlUUlVFIGluZGljYXRlcyBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UuDQotICoqLw0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGT1JNX09uTEJ1dHRvblVwKEZQREZfRk9STUhBTkRMRSBoSGFuZGxlLEZQREZfUEFHRSBwYWdlLCBpbnQgbW9kaWZpZXIsIGRvdWJsZSBwYWdlX3gsIGRvdWJsZSBwYWdlX3kpOw0KLQ0KLS8qKg0KLSAqIEZ1bmN0aW9uOiBGT1JNX09uS2V5RG93bg0KLSAqCQkJWW91IGNhbiBjYWxsIHRoaXMgbWVtYmVyIGZ1bmN0aW9uIHdoZW4gYSBub25zeXN0ZW0ga2V5IGlzIHByZXNzZWQuIA0KLSAqIFBhcmFtZXRlcnM6DQotICoJCQloSGFuZGxlCQktCUhhbmRsZSB0byB0aGUgZm9ybSBmaWxsIG1vZHVsZS4gUmV0dXJuZWQgYnkgRlBERkRPQ19Jbml0Rm9ybUZpbGxFbnZpcm91bWVudC4NCi0gKgkJCXBhZ2UJCS0JSGFuZGxlIHRvIHRoZSBwYWdlLiBSZXR1cm5lZCBieSBGUERGX0xvYWRQYWdlIGZ1bmN0aW9uLg0KLSAqCQkJbktleUNvZGUJLQlJbmRpY2F0ZXMgd2hldGhlciB2YXJpb3VzIHZpcnR1YWwga2V5cyBhcmUgZG93bi4gDQotICoJCQltb2RpZmllcgktCUNvbnRhaW5zIHRoZSBzY2FuIGNvZGUsIGtleS10cmFuc2l0aW9uIGNvZGUsIHByZXZpb3VzIGtleSBzdGF0ZSwgYW5kIGNvbnRleHQgY29kZS4NCi0gKiBSZXR1cm4gVmFsdWU6DQotICoJCQlUUlVFIGluZGljYXRlcyBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UuDQotICoqLw0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGT1JNX09uS2V5RG93bihGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSxGUERGX1BBR0UgcGFnZSwgaW50IG5LZXlDb2RlLCBpbnQgbW9kaWZpZXIpOw0KLQ0KLS8qKg0KLSAqIEZ1bmN0aW9uOiBGT1JNX09uS2V5VXANCi0gKgkJCVlvdSBjYW4gY2FsbCB0aGlzIG1lbWJlciBmdW5jdGlvbiB3aGVuIGEgbm9uc3lzdGVtIGtleSBpcyByZWxlYXNlZC4gDQotICogUGFyYW1ldGVyczoNCi0gKgkJCWhIYW5kbGUJCS0JSGFuZGxlIHRvIHRoZSBmb3JtIGZpbGwgbW9kdWxlLiBSZXR1cm5lZCBieSBGUERGRE9DX0luaXRGb3JtRmlsbEVudmlyb3VtZW50Lg0KLSAqCQkJcGFnZQkJLQlIYW5kbGUgdG8gdGhlIHBhZ2UuIFJldHVybmVkIGJ5IEZQREZfTG9hZFBhZ2UgZnVuY3Rpb24uDQotICoJCQluS2V5Q29kZQktCVRoZSB2aXJ0dWFsLWtleSBjb2RlIG9mIHRoZSBnaXZlbiBrZXkuDQotICoJCQltb2RpZmllcgktCUNvbnRhaW5zIHRoZSBzY2FuIGNvZGUsIGtleS10cmFuc2l0aW9uIGNvZGUsIHByZXZpb3VzIGtleSBzdGF0ZSwgYW5kIGNvbnRleHQgY29kZS4NCi0gKiBSZXR1cm4gVmFsdWU6DQotICoJCQlUUlVFIGluZGljYXRlcyBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UuDQotICoqLw0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGT1JNX09uS2V5VXAoRlBERl9GT1JNSEFORExFIGhIYW5kbGUsRlBERl9QQUdFIHBhZ2UsIGludCBuS2V5Q29kZSwgaW50IG1vZGlmaWVyKTsNCi0NCi0vKioNCi0gKiBGdW5jdGlvbjogRk9STV9PbkNoYXINCi0gKgkJCVlvdSBjYW4gY2FsbCB0aGlzIG1lbWJlciBmdW5jdGlvbiB3aGVuIGEga2V5c3Ryb2tlIHRyYW5zbGF0ZXMgdG8gYSBub25zeXN0ZW0gY2hhcmFjdGVyLg0KLSAqIFBhcmFtZXRlcnM6DQotICoJCQloSGFuZGxlCQktCUhhbmRsZSB0byB0aGUgZm9ybSBmaWxsIG1vZHVsZS4gUmV0dXJuZWQgYnkgRlBERkRPQ19Jbml0Rm9ybUZpbGxFbnZpcm91bWVudC4NCi0gKgkJCXBhZ2UJCS0JSGFuZGxlIHRvIHRoZSBwYWdlLiBSZXR1cm5lZCBieSBGUERGX0xvYWRQYWdlIGZ1bmN0aW9uLg0KLSAqCQkJbkNoYXIJCS0JVGhlIGNoYXJhY3RlciBjb2RlIHZhbHVlIG9mIHRoZSBrZXkuICANCi0gKgkJCW1vZGlmaWVyCS0JQ29udGFpbnMgdGhlIHNjYW4gY29kZSwga2V5LXRyYW5zaXRpb24gY29kZSwgcHJldmlvdXMga2V5IHN0YXRlLCBhbmQgY29udGV4dCBjb2RlLg0KLSAqIFJldHVybiBWYWx1ZToNCi0gKgkJCVRSVUUgaW5kaWNhdGVzIHN1Y2Nlc3M7IG90aGVyd2lzZSBmYWxzZS4NCi0gKiovDQotRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZPUk1fT25DaGFyKEZQREZfRk9STUhBTkRMRSBoSGFuZGxlLEZQREZfUEFHRSBwYWdlLCBpbnQgbkNoYXIsIGludCBtb2RpZmllcik7DQotDQotLyoqDQotICogRnVuY3Rpb246IEZPUk1fRm9yY2VUb0tpbGxGb2N1cy4NCi0gKgkJCVlvdSBjYW4gY2FsbCB0aGlzIG1lbWJlciBmdW5jdGlvbiB0byBmb3JjZSB0byBraWxsIHRoZSBmb2N1cyBvZiB0aGUgZm9ybSBmaWVsZCB3aGljaCBnb3QgZm9jdXMuDQotICoJCQlJdCB3b3VsZCBraWxsIHRoZSBmb2N1cyBvbiB0aGUgZm9ybSBmaWVsZCwgc2F2ZSB0aGUgdmFsdWUgb2YgZm9ybSBmaWVsZCBpZiBpdCdzIGNoYW5nZWQgYnkgdXNlci4NCi0gKiBQYXJhbWV0ZXJzOg0KLSAqCQkJaEhhbmRsZQkJLQlIYW5kbGUgdG8gdGhlIGZvcm0gZmlsbCBtb2R1bGUuIFJldHVybmVkIGJ5IEZQREZET0NfSW5pdEZvcm1GaWxsRW52aXJvdW1lbnQuDQotICogUmV0dXJuIFZhbHVlOg0KLSAqCQkJVFJVRSBpbmRpY2F0ZXMgc3VjY2Vzczsgb3RoZXJ3aXNlIGZhbHNlLg0KLSAqKi8NCi1ETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRk9STV9Gb3JjZVRvS2lsbEZvY3VzKEZQREZfRk9STUhBTkRMRSBoSGFuZGxlKTsNCi0NCi0vLyBGaWVsZCBUeXBlcw0KLSNkZWZpbmUgRlBERl9GT1JNRklFTERfVU5LTk9XTgkJMAkJLy8gVW5rbm93bi4NCi0jZGVmaW5lIEZQREZfRk9STUZJRUxEX1BVU0hCVVRUT04JMQkJLy8gcHVzaCBidXR0b24gdHlwZS4NCi0jZGVmaW5lIEZQREZfRk9STUZJRUxEX0NIRUNLQk9YCQkyCQkvLyBjaGVjayBib3ggdHlwZS4NCi0jZGVmaW5lIEZQREZfRk9STUZJRUxEX1JBRElPQlVUVE9OCTMJCS8vIHJhZGlvIGJ1dHRvbiB0eXBlLg0KLSNkZWZpbmUgRlBERl9GT1JNRklFTERfQ09NQk9CT1gJCTQJCS8vIGNvbWJvIGJveCB0eXBlLg0KLSNkZWZpbmUgRlBERl9GT1JNRklFTERfTElTVEJPWAkJNQkJLy8gbGlzdCBib3ggdHlwZS4NCi0jZGVmaW5lIEZQREZfRk9STUZJRUxEX1RFWFRGSUVMRAk2CQkvLyB0ZXh0IGZpZWxkIHR5cGUuDQotDQotLyoqDQotICogRnVuY3Rpb246IEZQRFBhZ2VfSGFzRm9ybUZpZWxkQXRQb2ludA0KLSAqCQkJQ2hlY2sgdGhlIGZvcm0gZmlsZWQgcG9zaXRpb24gYnkgcG9pbnQuDQotICogUGFyYW1ldGVyczoNCi0gKgkJCWhIYW5kbGUJCS0JSGFuZGxlIHRvIHRoZSBmb3JtIGZpbGwgbW9kdWxlLiBSZXR1cm5lZCBieSBGUERGRE9DX0luaXRGb3JtRmlsbEVudmlyb3VtZW50Lg0KLSAqCQkJcGFnZQkJLQlIYW5kbGUgdG8gdGhlIHBhZ2UuIFJldHVybmVkIGJ5IEZQREZfTG9hZFBhZ2UgZnVuY3Rpb24uDQotICoJCQlwYWdlX3gJCS0JWCBwb3NpdGlvbiBpbiBQREYgInVzZXIgc3BhY2UiLg0KLSAqCQkJcGFnZV95CQktCVkgcG9zaXRpb24gaW4gUERGICJ1c2VyIHNwYWNlIi4NCi0gKiBSZXR1cm4gVmFsdWU6DQotICoJCQlSZXR1cm4gdGhlIHR5cGUgb2YgdGhlIGZvcm1maWxlZDsgLTEgaW5kaWNhdGVzIG5vIGZpZWxkcy4NCi0gKiovDQotRExMRVhQT1JUIGludCBTVERDQUxMIEZQRFBhZ2VfSGFzRm9ybUZpZWxkQXRQb2ludChGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSxGUERGX1BBR0UgcGFnZSxkb3VibGUgcGFnZV94LCBkb3VibGUgcGFnZV95KTsNCi0NCi0vKioNCi0gKiBGdW5jdGlvbjogRlBERl9TZXRGb3JtRmllbGRIaWdobGlnaHRDb2xvcg0KLSAqCQkJU2V0IHRoZSBoaWdobGlnaHQgY29sb3Igb2Ygc3BlY2lmaWVkIG9yIGFsbCB0aGUgZm9ybSBmaWVsZHMgaW4gdGhlIGRvY3VtZW50Lg0KLSAqIFBhcmFtZXRlcnM6DQotICoJCQloSGFuZGxlCQktCUhhbmRsZSB0byB0aGUgZm9ybSBmaWxsIG1vZHVsZS4gUmV0dXJuZWQgYnkgRlBERkRPQ19Jbml0Rm9ybUZpbGxFbnZpcm91bWVudC4NCi0gKgkJCWRvYwkJCS0JSGFuZGxlIHRvIHRoZSBkb2N1bWVudC4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkRG9jdW1lbnQgZnVuY3Rpb24uDQotICoJCQlmaWVsZFR5cGUJLQlBIDMyLWJpdCBpbnRlZ2VyIGluZGljYXRpbmcgdGhlIHR5cGUgb2YgYSBmb3JtIGZpZWxkKGRlZmluZWQgYWJvdmUpLg0KLSAqCQkJY29sb3IJCS0JVGhlIGhpZ2hsaWdodCBjb2xvciBvZiB0aGUgZm9ybSBmaWVsZC5Db25zdHJ1Y3RlZCBieSAweHh4cnJnZ2JiLg0KLSAqIFJldHVybiBWYWx1ZToNCi0gKgkJCU5PTkUuDQotICogQ29tbWVudHM6DQotICoJCQlXaGVuIHRoZSBwYXJhbWV0ZXIgZmllbGRUeXBlIGlzIHNldCB0byB6ZXJvLCB0aGUgaGlnaGxpZ2h0IGNvbG9yIHdpbGwgYmUgYXBwbGllZCB0byBhbGwgdGhlIGZvcm0gZmllbGRzIGluIHRoZSANCi0gKgkJCWRvY3VtZW50Lg0KLSAqCQkJUGxlYXNlIHJlZnJlc2ggdGhlIGNsaWVudCB3aW5kb3cgdG8gc2hvdyB0aGUgaGlnaGxpZ2h0IGltbWVkaWF0ZWx5IGlmIG5lY2Vzc2FyeS4NCi0gKiovDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX1NldEZvcm1GaWVsZEhpZ2hsaWdodENvbG9yKEZQREZfRk9STUhBTkRMRSBoSGFuZGxlLCBpbnQgZmllbGRUeXBlLCB1bnNpZ25lZCBsb25nIGNvbG9yKTsNCi0NCi0vKioNCi0gKiBGdW5jdGlvbjogRlBERl9TZXRGb3JtRmllbGRIaWdobGlnaHRBbHBoYQ0KLSAqCQkJU2V0IHRoZSB0cmFuc3BhcmVuY3kgb2YgdGhlIGZvcm0gZmllbGQgaGlnaGxpZ2h0IGNvbG9yIGluIHRoZSBkb2N1bWVudC4NCi0gKiBQYXJhbWV0ZXJzOg0KLSAqCQkJaEhhbmRsZQkJLQlIYW5kbGUgdG8gdGhlIGZvcm0gZmlsbCBtb2R1bGUuIFJldHVybmVkIGJ5IEZQREZET0NfSW5pdEZvcm1GaWxsRW52aXJvdW1lbnQuDQotICoJCQlkb2MJCQktCUhhbmRsZSB0byB0aGUgZG9jdW1lbnQuIFJldHVybmVkIGJ5IEZQREZfTG9hZERvY3VtZW50IGZ1bmN0aW9uLg0KLSAqCQkJYWxwaGEJCS0JVGhlIHRyYW5zcGFyZW5jeSBvZiB0aGUgZm9ybSBmaWVsZCBoaWdobGlnaHQgY29sb3IuIGJldHdlZW4gMC0yNTUuDQotICogUmV0dXJuIFZhbHVlOg0KLSAqCQkJTk9ORS4NCi0gKiovDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX1NldEZvcm1GaWVsZEhpZ2hsaWdodEFscGhhKEZQREZfRk9STUhBTkRMRSBoSGFuZGxlLCB1bnNpZ25lZCBjaGFyIGFscGhhKTsNCi0NCi0NCi0vKioNCi0gKiBGdW5jdGlvbjogRlBERl9SZW1vdmVGb3JtRmllbGRIaWdobGlnaHQNCi0gKgkJCVJlbW92ZSB0aGUgZm9ybSBmaWVsZCBoaWdobGlnaHQgY29sb3IgaW4gdGhlIGRvY3VtZW50Lg0KLSAqIFBhcmFtZXRlcnM6DQotICoJCQloSGFuZGxlCQktCUhhbmRsZSB0byB0aGUgZm9ybSBmaWxsIG1vZHVsZS4gUmV0dXJuZWQgYnkgRlBERkRPQ19Jbml0Rm9ybUZpbGxFbnZpcm91bWVudC4NCi0gKiBSZXR1cm4gVmFsdWU6DQotICoJCQlOT05FLg0KLSAqIENvbW1lbnRzOg0KLSAqCQkJUGxlYXNlIHJlZnJlc2ggdGhlIGNsaWVudCB3aW5kb3cgdG8gcmVtb3ZlIHRoZSBoaWdobGlnaHQgaW1tZWRpYXRlbHkgaWYgbmVjZXNzYXJ5Lg0KLSAqKi8NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZfUmVtb3ZlRm9ybUZpZWxkSGlnaGxpZ2h0KEZQREZfRk9STUhBTkRMRSBoSGFuZGxlKTsNCi0NCi0vKioNCi0qIEZ1bmN0aW9uOiBGUERGX0ZGTERyYXcNCi0qCQkJUmVuZGVyIEZvcm1GZWlsZHMgb24gYSBwYWdlIHRvIGEgZGV2aWNlIGluZGVwZW5kZW50IGJpdG1hcC4gCQkJDQotKiBQYXJhbWV0ZXJzOg0KLSoJCQloSGFuZGxlCQktCUhhbmRsZSB0byB0aGUgZm9ybSBmaWxsIG1vZHVsZS4gUmV0dXJuZWQgYnkgRlBERkRPQ19Jbml0Rm9ybUZpbGxFbnZpcm91bWVudC4NCi0qCQkJYml0bWFwCQktCUhhbmRsZSB0byB0aGUgZGV2aWNlIGluZGVwZW5kZW50IGJpdG1hcCAoYXMgdGhlIG91dHB1dCBidWZmZXIpLg0KLSoJCQkJCQkJQml0bWFwIGhhbmRsZSBjYW4gYmUgY3JlYXRlZCBieSBGUERGQml0bWFwX0NyZWF0ZSBmdW5jdGlvbi4NCi0qCQkJcGFnZQkJLQlIYW5kbGUgdG8gdGhlIHBhZ2UuIFJldHVybmVkIGJ5IEZQREZfTG9hZFBhZ2UgZnVuY3Rpb24uDQotKgkJCXN0YXJ0X3gJCS0JTGVmdCBwaXhlbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBhcmVhIGluIHRoZSBkZXZpY2UgY29vcmRpbmF0ZS4NCi0qCQkJc3RhcnRfeQkJLQlUb3AgcGl4ZWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgYXJlYSBpbiB0aGUgZGV2aWNlIGNvb3JkaW5hdGUuDQotKgkJCXNpemVfeAkJLQlIb3Jpem9udGFsIHNpemUgKGluIHBpeGVscykgZm9yIGRpc3BsYXlpbmcgdGhlIHBhZ2UuDQotKgkJCXNpemVfeQkJLQlWZXJ0aWNhbCBzaXplIChpbiBwaXhlbHMpIGZvciBkaXNwbGF5aW5nIHRoZSBwYWdlLg0KLSoJCQlyb3RhdGUJCS0JUGFnZSBvcmllbnRhdGlvbjogMCAobm9ybWFsKSwgMSAocm90YXRlZCA5MCBkZWdyZWVzIGNsb2Nrd2lzZSksDQotKgkJCQkJCQkJMiAocm90YXRlZCAxODAgZGVncmVlcyksIDMgKHJvdGF0ZWQgOTAgZGVncmVlcyBjb3VudGVyLWNsb2Nrd2lzZSkuDQotKgkJCWZsYWdzCQktCTAgZm9yIG5vcm1hbCBkaXNwbGF5LCBvciBjb21iaW5hdGlvbiBvZiBmbGFncyBkZWZpbmVkIGFib3ZlLiANCi0qIFJldHVybiBWYWx1ZToNCi0qCQkJTm9uZS4NCi0qIENvbW1lbnRzOiANCi0qCQkJVGhpcyBtZXRob2QgaXMgZGVzaWduZWQgdG8gb25seSByZW5kZXIgYW5ub3RhdGlvbnMgYW5kIEZvcm1GaWVsZHMgb24gdGhlIHBhZ2UuIA0KLSoJCQlXaXRob3V0IEZQREZfQU5OT1Qgc3BlY2lmaWVkIGZvciBmbGFncywgUmVuZGVyaW5nIGZ1bmN0aW9ucyBzdWNoIGFzIEZQREZfUmVuZGVyUGFnZUJpdG1hcCBvciBGUERGX1JlbmRlclBhZ2VCaXRtYXBfU3RhcnQgd2lsbCBvbmx5IHJlbmRlciBwYWdlIGNvbnRlbnRzKHdpdGhvdXQgYW5ub3RhdGlvbnMpIHRvIGEgYml0bWFwLg0KLSoJCQlJbiBvcmRlciB0byBpbXBsZW1lbnQgdGhlIEZvcm1GaWxsIGZ1bmN0aW9ucyxJbXBsZW1lbnRhdGlvbiBzaG91bGQgY2FsbCB0aGlzIG1ldGhvZCBhZnRlciByZW5kZXJpbmcgZnVuY3Rpb25zIGZpbmlzaCByZW5kZXJpbmcgdGhlIHBhZ2UgY29udGVudHMuDQotKiovDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX0ZGTERyYXcoRlBERl9GT1JNSEFORExFIGhIYW5kbGUsRlBERl9CSVRNQVAgYml0bWFwLCBGUERGX1BBR0UgcGFnZSwgaW50IHN0YXJ0X3gsIGludCBzdGFydF95LCANCi0JCQkJCQlpbnQgc2l6ZV94LCBpbnQgc2l6ZV95LCBpbnQgcm90YXRlLCBpbnQgZmxhZ3MpOw0KLQ0KLQ0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX07DQotI2VuZGlmDQotDQotI2VuZGlmIC8vX0ZQREZPUk1GSUxMX0gNCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisKKyNpZm5kZWYgX0ZQREZPUk1GSUxMX0gKKyNkZWZpbmUgX0ZQREZPUk1GSUxMX0gKKyNpbmNsdWRlICJmcGRmdmlldy5oIgorCit0eXBlZGVmIHZvaWQqIEZQREZfRk9STUhBTkRMRTsKKworLy8gRXhwb3J0ZWQgRnVuY3Rpb25zCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IF9JUERGX0pzUGxhdGZvcm0KK3sKKy8qKgorKiBWZXJzaW9uIG51bWJlciBvZiB0aGUgaW50ZXJmYWNlLiBDdXJyZW50bHkgbXVzdCBiZSAxLgorCSoqLworCWludCB2ZXJzaW9uOworCQorCS8qKiAKKwkqIE1ldGhvZDogYXBwX2FsZXJ0CisJKgkJCXBvcCB1cCBhIGRpYWxvZyB0byBzaG93IHdhcm5pbmcgb3IgaGludC4KKwkqIEludGVyZmFjZSBWZXJzaW9uOgorCSoJCQkxCisJKiBJbXBsZW1lbnRhdGlvbiBSZXF1aXJlZDoKKwkqCQkJeWVzCisJKiBQYXJhbWV0ZXJzOgorCSoJCQlwVGhpcwkJLQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZgorCSoJCQlNc2cJCQktCUEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG1lc3NhZ2UgdG8gYmUgZGlzcGxheWVkLgorCSoJCQlUaXRsZQkJLSAgIFRoZSB0aXRsZSBvZiB0aGUgZGlhbG9nLgorCSoJCQlUeXBlCQktCVRoZSBzdHlwZSBvZiBidXR0b24gZ3JvdXAuIAorCSoJCQkJCQkJMC1PSyhkZWZhdWx0KTsKKwkqCQkJCQkJCTEtT0ssQ2FuY2VsOworCSoJCQkJCQkJMi1ZZXMsTk87IAorCSoJCQkJCQkJMy1ZZXMsIE5PLCBDYW5jZWwuCisJKiAgICAgICAgICAgbkljb24JCS0gICBUaGUgSWNvbiB0eXBlLiAKKwkqCQkJCQkJCTAtRXJyb3IoZGVmYXVsdCk7CisJKgkJCQkJCQkxLVdhcm5pbmc7CisJKgkJCQkJCQkyLVF1ZXN0aW9uOworCSoJCQkJCQkJMy1TdGF0dXMuCisJKiBSZXR1cm4gVmFsdWU6CisJKgkJCVRoZSByZXR1cm4gdmFsdWUgY291bGQgYmUgdGhlIGZvbG93aW5nIHR5cGU6CisJKgkJCQkJCQkxLU9LOworCSoJCQkJCQkJMi1DYW5jZWw7IAorCSoJCQkJCQkJMy1OTzsKKwkqCQkJCQkJCTQtWWVzOworCSovCisJaW50ICgqYXBwX2FsZXJ0KShzdHJ1Y3QgX0lQREZfSnNQbGF0Zm9ybSogcFRoaXMsIEZQREZfV0lERVNUUklORyBNc2csIEZQREZfV0lERVNUUklORyBUaXRsZSwgaW50IFR5cGUsIGludCBJY29uKTsKKwkKKwkvKiogCisJKiBNZXRob2Q6IGFwcF9iZWVwCisJKgkJCUNhdXNlcyB0aGUgc3lzdGVtIHRvIHBsYXkgYSBzb3VuZC4gCisJKiBJbnRlcmZhY2UgVmVyc2lvbjoKKwkqCQkJMQorCSogSW1wbGVtZW50YXRpb24gUmVxdWlyZWQ6CisJKgkJCXllcworCSogUGFyYW1ldGVyczoKKwkqCQkJcFRoaXMJCS0JUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBpdHNlbGYKKwkqCQkJblR5cGUJCS0JVGhlIHNvdW5kIHR5cGUuCisJKgkJCQkJCQkwIC0gRXJyb3IKKwkqCQkJCQkJCTEgLSBXYXJuaW5nCisJKgkJCQkJCQkyIC0gUXVlc3Rpb24KKwkqCQkJCQkJCTMgLSBTdGF0dXMKKwkqCQkJCQkJCTQgLSBEZWZhdWx0IChkZWZhdWx0IHZhbHVlKQorCSogUmV0dXJuIFZhbHVlOgorCSoJCQlOb25lCisJKi8KKwl2b2lkICgqYXBwX2JlZXApKHN0cnVjdCBfSVBERl9Kc1BsYXRmb3JtKiBwVGhpcywgIGludCBuVHlwZSk7CisJCisJCisJLyoqIAorCSogTWV0aG9kOiBhcHBfcmVzcG9uc2UKKwkqCQkJRGlzcGxheXMgYSBkaWFsb2cgYm94IGNvbnRhaW5pbmcgYSBxdWVzdGlvbiBhbmQgYW4gZW50cnkgZmllbGQgZm9yIHRoZSB1c2VyIHRvIHJlcGx5IHRvIHRoZSBxdWVzdGlvbi4gIAorCSogSW50ZXJmYWNlIFZlcnNpb246CisJKgkJCTEKKwkqIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOgorCSoJCQl5ZXMKKwkqIFBhcmFtZXRlcnM6CisJKgkJCXBUaGlzCQktCVBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgaXRzZWxmCisJKgkJCVF1ZXN0aW9uCS0JVGhlIHF1ZXN0aW9uIHRvIGJlIHBvc2VkIHRvIHRoZSB1c2VyLgorCSoJCQlUaXRsZQkJLQlUaGUgdGl0bGUgb2YgdGhlIGRpYWxvZyBib3guCisJKgkJCURlZmF1bHQJCS0JQSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgYW5zd2VyIHRvIHRoZSBxdWVzdGlvbi4gSWYgbm90IHNwZWNpZmllZCwgbm8gZGVmYXVsdCB2YWx1ZSBpcyBwcmVzZW50ZWQuCisJKgkJCWNMYWJlbAkJLQlBIHNob3J0IHN0cmluZyB0byBhcHBlYXIgaW4gZnJvbnQgb2YgYW5kIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGVkaXQgdGV4dCBmaWVsZC4gCisJKgkJCWJQYXNzd29yZAktCUlmIHRydWUsIGluZGljYXRlcyB0aGF0IHRoZSB1c2VyJ3MgcmVzcG9uc2Ugc2hvdWxkIHNob3cgYXMgYXN0ZXJpc2tzICgqKSBvciBidWxsZXRzICg/KSB0byBtYXNrIHRoZSByZXNwb25zZSwgd2hpY2ggbWlnaHQgYmUgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLiBUaGUgZGVmYXVsdCBpcyBmYWxzZS4JCQorCSoJCQlyZXNwb25zZQktCUEgc3RyaW5nIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgU0RLLCB0byByZWNlaXZlIHRoZSB1c2VyJ3MgcmVzcG9uc2UuIAorCSoJCQlsZW5ndGgJCS0gICBUaGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIsIG51bWJlciBvZiBieXRlcy4gQ3VycmVudGx5LCBJdCdzIGFsd2F5cyBiZSAyMDQ4LgorCSogUmV0dXJuIFZhbHVlOgorCSoJCQlOdW1iZXIgb2YgYnl0ZXMgdGhlIHVzZXIgaW5wdXQgdGV4dCBjb25zdW1lcywgbm90IGluY2x1ZGluZyB0cmFpbGluZyB6ZXJvcy4gSWYgdGhlIHRleHQgZXhjZWVkIDIwNDggYnl0ZXMsCisJKgkJCXRoZSBleGNlZWRlZCBwYXJ0IHdpbGwgYmUgaWdub3JlZC4KKwkqIENvbW1lbnRzOgorCSoJCQlObyBtYXR0ZXIgb24gd2hhdCBwbGF0Zm9ybSwgdGhlIHJlc3BvbnNlIHNob3VsZCBiZSBhbHdheXMgaW5wdXQgaW4gVVRGLTE2TEUgZW5jb2RpbmcuCisJKgkJCVRoZSByZXR1cm4gdmFsdWUgYWx3YXlzIGluZGljYXRlZCBudW1iZXIgb2YgYnl0ZXMgcmVxdWlyZWQgZm9yIHRoZSBidWZmZXIsIGV2ZW4gd2hlbiB0aGVyZSBpcworCSoJCQlubyBidWZmZXIgc3BlY2lmaWVkLCBvciB0aGUgYnVmZmVyIHNpemUgaXMgbGVzcyB0aGVuIHJlcXVpcmVkLiBJbiB0aGlzIGNhc2UsIHRoZSBidWZmZXIgd2lsbCBub3QKKwkqCQkJYmUgbW9kaWZpZWQuCisJKi8KKwlpbnQgKCphcHBfcmVzcG9uc2UpKHN0cnVjdCBfSVBERl9Kc1BsYXRmb3JtKiBwVGhpcywgRlBERl9XSURFU1RSSU5HIFF1ZXN0aW9uLCBGUERGX1dJREVTVFJJTkcgVGl0bGUsIEZQREZfV0lERVNUUklORyBEZWZhdWx0LCBGUERGX1dJREVTVFJJTkcgY0xhYmVsLCBGUERGX0JPT0wgYlBhc3N3b3JkLCB2b2lkKiByZXNwb25zZSwgaW50IGxlbmd0aCk7CisJCisJCisJCisJLyoKKwkqIE1ldGhvZDogRG9jX2dldEZpbGVQYXRoCisJKgkJCUdldCB0aGUgZmlsZSBwYXRoIG9mIHRoZSBjdXJyZW50IGRvY3VtZW50LiAKKwkqIEludGVyZmFjZSBWZXJzaW9uOgorCSoJCQkxCisJKiBJbXBsZW1lbnRhdGlvbiBSZXF1aXJlZDoKKwkqCQkJeWVzCisJKiBQYXJhbWV0ZXJzOgorCSoJCQlwVGhpcwkJLQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZgorCSoJCQlmaWxlUGF0aAktCVRoZSBzdHJpbmcgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGZpbGUgcGF0aC4gQ2FuIGJlIE5VTEwuCisJKgkJCWxlbmd0aAkJLSAgIFRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlciwgbnVtYmVyIG9mIGJ5dGVzLiBDYW4gYmUgMC4KKwkqIFJldHVybiBWYWx1ZToKKwkqCQlOdW1iZXIgb2YgYnl0ZXMgdGhlIGZpbGVQYXRoIGNvbnN1bWVzLCBpbmNsdWRpbmcgdHJhaWxpbmcgemVyb3MuCisJKiBDb21tZW50czoKKwkqCQlUaGUgZmlsZVBhdGggc2hvdWxkIGJlIGFsd2F5cyBpbnB1dCBpbiBsb2NhbCBlbmNvZGluZy4KKwkqCisJKgkJVGhlIHJldHVybiB2YWx1ZSBhbHdheXMgaW5kaWNhdGVkIG51bWJlciBvZiBieXRlcyByZXF1aXJlZCBmb3IgdGhlIGJ1ZmZlciwgZXZlbiB3aGVuIHRoZXJlIGlzCisJKgkJbm8gYnVmZmVyIHNwZWNpZmllZCwgb3IgdGhlIGJ1ZmZlciBzaXplIGlzIGxlc3MgdGhlbiByZXF1aXJlZC4gSW4gdGhpcyBjYXNlLCB0aGUgYnVmZmVyIHdpbGwgbm90CisJKgkJYmUgbW9kaWZpZWQuCisJKi8KKwlpbnQgKCpEb2NfZ2V0RmlsZVBhdGgpKHN0cnVjdCBfSVBERl9Kc1BsYXRmb3JtKiBwVGhpcywgdm9pZCogZmlsZVBhdGgsIGludCBsZW5ndGgpOworCQorCQorCS8qCisJKiBNZXRob2Q6IERvY19tYWlsCisJKgkJCU1haWxzIHRoZSBkYXRhIGJ1ZmZlciBhcyBhbiBhdHRhY2htZW50IHRvIGFsbCByZWNpcGllbnRzLCB3aXRoIG9yIHdpdGhvdXQgdXNlciBpbnRlcmFjdGlvbi4gCisJKiBJbnRlcmZhY2UgVmVyc2lvbjoKKwkqCQkJMQorCSogSW1wbGVtZW50YXRpb24gUmVxdWlyZWQ6CisJKgkJCXllcworCSogUGFyYW1ldGVyczoKKwkqCQkJcFRoaXMJCS0JUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBpdHNlbGYKKwkqCQkJbWFpbERhdGEJLQlQb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlciB0byBiZSBzZW50LkNhbiBiZSBOVUxMLgorCSoJCQlsZW5ndGgJCS0JVGhlIHNpemUsaW4gYnl0ZXMsIG9mIHRoZSBidWZmZXIgcG9pbnRlZCBieSBtYWlsRGF0YSBwYXJhbWV0ZXIuQ2FuIGJlIDAuCisJKgkJCWJVSQkJCS0gICBJZiB0cnVlLCB0aGUgcmVzdCBvZiB0aGUgcGFyYW1ldGVycyBhcmUgdXNlZCBpbiBhIGNvbXBvc2UtbmV3LW1lc3NhZ2Ugd2luZG93IHRoYXQgaXMgZGlzcGxheWVkIHRvIHRoZSB1c2VyLiBJZiBmYWxzZSwgdGhlIGNUbyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgYW5kIGFsbCBvdGhlcnMgYXJlIG9wdGlvbmFsLgorCSoJCQlUbwkJCS0JQSBzZW1pY29sb24tZGVsaW1pdGVkIGxpc3Qgb2YgcmVjaXBpZW50cyBmb3IgdGhlIG1lc3NhZ2UuCisJKgkJCVN1YmplY3QJCS0gICBUaGUgc3ViamVjdCBvZiB0aGUgbWVzc2FnZS4gVGhlIGxlbmd0aCBsaW1pdCBpcyA2NCBLQi4KKwkqCQkJQ0MJCQktCUEgc2VtaWNvbG9uLWRlbGltaXRlZCBsaXN0IG9mIENDIHJlY2lwaWVudHMgZm9yIHRoZSBtZXNzYWdlLiAKKwkqCQkJQkNDCQkJLSAgIEEgc2VtaWNvbG9uLWRlbGltaXRlZCBsaXN0IG9mIEJDQyByZWNpcGllbnRzIGZvciB0aGUgbWVzc2FnZS4gCisJKgkJCU1zZwkJCS0gICBUaGUgY29udGVudCBvZiB0aGUgbWVzc2FnZS4gVGhlIGxlbmd0aCBsaW1pdCBpcyA2NCBLQi4KKwkqIFJldHVybiBWYWx1ZToKKwkqCQkJTm9uZS4KKwkqIENvbW1lbnRzOgorCSoJCQlJZiB0aGUgcGFyYW1ldGVyIG1haWxEYXRhIGlzIE5VTEwgb3IgbGVuZ3RoIGlzIDAsIHRoZSBjdXJyZW50IGRvY3VtZW50IHdpbGwgYmUgbWFpbGVkIGFzIGFuIGF0dGFjaG1lbnQgdG8gYWxsIHJlY2lwaWVudHMuCisJKi8KKwl2b2lkICgqRG9jX21haWwpKHN0cnVjdCBfSVBERl9Kc1BsYXRmb3JtKiBwVGhpcyx2b2lkKiBtYWlsRGF0YSwgaW50IGxlbmd0aCxGUERGX0JPT0wgYlVJLCBGUERGX1dJREVTVFJJTkcgVG8sIEZQREZfV0lERVNUUklORyBTdWJqZWN0LCBGUERGX1dJREVTVFJJTkcgQ0MsIEZQREZfV0lERVNUUklORyBCQ0MsIEZQREZfV0lERVNUUklORyBNc2cpOyAKKwkKKworCS8qCisJKiBNZXRob2Q6IERvY19wcmludAorCSoJCQlQcmludHMgYWxsIG9yIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHBhZ2VzIG9mIHRoZSBkb2N1bWVudC4KKwkqIEludGVyZmFjZSBWZXJzaW9uOgorCSoJCQkxCisJKiBJbXBsZW1lbnRhdGlvbiBSZXF1aXJlZDoKKwkqCQkJeWVzCisJKiBQYXJhbWV0ZXJzOgorCSoJCQlwVGhpcwkJLQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZi4KKwkqCQkJYlVJCQkJLQlJZiB0cnVlLCB3aWxsIGNhdXNlIGEgVUkgdG8gYmUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIHRvIG9idGFpbiBwcmludGluZyBpbmZvcm1hdGlvbiBhbmQgY29uZmlybSB0aGUgYWN0aW9uLgorCSoJCQluU3RhcnQJCS0JQSAwLWJhc2VkIGluZGV4IHRoYXQgZGVmaW5lcyB0aGUgc3RhcnQgb2YgYW4gaW5jbHVzaXZlIHJhbmdlIG9mIHBhZ2VzLgorCSoJCQluRW5kCQktICAgQSAwLWJhc2VkIGluZGV4IHRoYXQgZGVmaW5lcyB0aGUgZW5kIG9mIGFuIGluY2x1c2l2ZSBwYWdlIHJhbmdlLgorCSoJCQliU2lsZW50CQktICAgSWYgdHJ1ZSwgc3VwcHJlc3NlcyB0aGUgY2FuY2VsIGRpYWxvZyBib3ggd2hpbGUgdGhlIGRvY3VtZW50IGlzIHByaW50aW5nLiBUaGUgZGVmYXVsdCBpcyBmYWxzZS4KKwkqCQkJYlNocmlua1RvRml0CS0JSWYgdHJ1ZSwgdGhlIHBhZ2UgaXMgc2hydW5rIChpZiBuZWNlc3NhcnkpIHRvIGZpdCB3aXRoaW4gdGhlIGltYWdlYWJsZSBhcmVhIG9mIHRoZSBwcmludGVkIHBhZ2UuCisJKgkJCWJQcmludEFzSW1hZ2UJLQlJZiB0cnVlLCBwcmludCBwYWdlcyBhcyBhbiBpbWFnZS4KKwkqCQkJYlJldmVyc2UJLQlJZiB0cnVlLCBwcmludCBmcm9tIG5FbmQgdG8gblN0YXJ0LgorCSoJCQliQW5ub3RhdGlvbnMJLQlJZiB0cnVlICh0aGUgZGVmYXVsdCksIGFubm90YXRpb25zIGFyZSBwcmludGVkLgorCSovCisJdm9pZCAoKkRvY19wcmludCkoc3RydWN0IF9JUERGX0pzUGxhdGZvcm0qIHBUaGlzLCBGUERGX0JPT0wgYlVJLCBpbnQgblN0YXJ0LCBpbnQgbkVuZCwgRlBERl9CT09MIGJTaWxlbnQgLEZQREZfQk9PTCBiU2hyaW5rVG9GaXQsRlBERl9CT09MIGJQcmludEFzSW1hZ2UgLEZQREZfQk9PTCBiUmV2ZXJzZSAsRlBERl9CT09MIGJBbm5vdGF0aW9ucyk7CisKKwkvKgorCSogTWV0aG9kOiBEb2Nfc3VibWl0Rm9ybQorCSoJCQlTZW5kIHRoZSBmb3JtIGRhdGEgdG8gYSBzcGVjaWZpZWQgVVJMLgorCSogSW50ZXJmYWNlIFZlcnNpb246CisJKgkJCTEKKwkqIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOgorCSoJCQl5ZXMKKwkqIFBhcmFtZXRlcnM6CisJKgkJCXBUaGlzCQktCVBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgaXRzZWxmCisJKgkJCWZvcm1EYXRhCS0JUG9pbnRlciB0byB0aGUgZGF0YSBidWZmZXIgdG8gYmUgc2VudC4KKwkqCQkJbGVuZ3RoCQktCVRoZSBzaXplLGluIGJ5dGVzLCBvZiB0aGUgYnVmZmVyIHBvaW50ZWQgYnkgZm9ybURhdGEgcGFyYW1ldGVyLgorCSoJCQlVUkwJCQktCVRoZSBVUkwgdG8gc2VuZCB0by4KKwkqIFJldHVybiBWYWx1ZToKKwkqCQkJTm9uZS4KKwkqCisJKi8KKwl2b2lkICgqRG9jX3N1Ym1pdEZvcm0pKHN0cnVjdCBfSVBERl9Kc1BsYXRmb3JtKiBwVGhpcyx2b2lkKiBmb3JtRGF0YSwgaW50IGxlbmd0aCwgRlBERl9XSURFU1RSSU5HIFVSTCk7CisJCisJLyoKKwkqIE1ldGhvZDogRG9jX2dvdG9QYWdlCisJKgkJCUp1bXAgdG8gYSBzcGVjaWZpZWQgcGFnZS4KKwkqIEludGVyZmFjZSBWZXJzaW9uOgorCSoJCQkxCisJKiBJbXBsZW1lbnRhdGlvbiBSZXF1aXJlZDoKKwkqCQkJeWVzCisJKiBQYXJhbWV0ZXJzOgorCSoJCQlwVGhpcwkJLQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZgorCSoJCQluUGFnZU51bQktCVRoZSBzcGVjaWZpZWQgcGFnZSBudW1iZXIsIHplcm8gZm9yIHRoZSBmaXJzdCBwYWdlLgorCSogUmV0dXJuIFZhbHVlOgorCSoJCQlOb25lLgorCSoKKwkqLworCXZvaWQgKCpEb2NfZ290b1BhZ2UpKHN0cnVjdCBfSVBERl9Kc1BsYXRmb3JtKiBwVGhpcywgaW50IG5QYWdlTnVtKTsKKwkvKgorCSogTWV0aG9kOiBGaWVsZF9icm93c2UKKwkqCQkJU2hvdyBhIGZpbGUgc2VsZWN0aW9uIGRpYWxvZywgYW5kIHJldHVybiB0aGUgc2VsZWN0ZWQgZmlsZSBwYXRoLgorCSogSW50ZXJmYWNlIFZlcnNpb246CisJKgkJCTEKKwkqIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOgorCSoJCQl5ZXMKKwkqIFBhcmFtZXRlcnM6CisJKgkJCXBUaGlzCQktCVBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgaXRzZWxmLgorCSoJCQlmaWxlUGF0aAktCVBvaW50ZXIgdG8gdGhlIGRhdGEgYnVmZmVyIHRvIHJlY2VpdmUgdGhlIGZpbGUgcGF0aC5DYW4gYmUgTlVMTC4KKwkqCQkJbGVuZ3RoCQktICAgVGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyLCBudW1iZXIgb2YgYnl0ZXMuIENhbiBiZSAwLgorCSogUmV0dXJuIFZhbHVlOgorCSoJCU51bWJlciBvZiBieXRlcyB0aGUgZmlsZVBhdGggY29uc3VtZXMsIGluY2x1ZGluZyB0cmFpbGluZyB6ZXJvcy4KKwkqIENvbW1lbnRzOgorCSoJCVRoZSBmaWxlUGF0aCBzaG91bGUgYmUgYWx3YXlzIGlucHV0IGluIGxvY2FsIGVuY29kaW5nLgorCSovCisJaW50ICAoKkZpZWxkX2Jyb3dzZSkoc3RydWN0IF9JUERGX0pzUGxhdGZvcm0qIHBUaGlzLHZvaWQqIGZpbGVQYXRoLCBpbnQgbGVuZ3RoKTsKKworCS8qKgorCSoJcG9pbnRlciB0byBGUERGX0ZPUk1GSUxMSU5GTyBpbnRlcmZhY2UuCisJKiovCisJdm9pZCoJbV9wRm9ybWZpbGxpbmZvOworfSBJUERGX0pTUExBVEZPUk07CisKKy8vIEZsYWdzIGZvciBDdXJzb3IgdHlwZQorI2RlZmluZSBGWENUX0FSUk9XCTAKKyNkZWZpbmUgRlhDVF9ORVNXCTEJCQorI2RlZmluZSBGWENUX05XU0UJMgkJCisjZGVmaW5lIEZYQ1RfVkJFQU0JMwkJCisjZGVmaW5lIEZYQ1RfSEJFQU0JNAkKKyNkZWZpbmUgRlhDVF9IQU5ECTUKKworLyoqCisgKiBEZWNsYXJlcyBvZiBhIHBvaW50ZXIgdHlwZSB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBGRklfU2V0VGltZXIgbWV0aG9kLgorICogUGFyYW1ldGVyczoKKyAqCQkJaWRFdmVudAkJLQlJZGVudGlmaWVyIG9mIHRoZSB0aW1lci4gCisgKiBSZXR1cm4gdmFsdWU6CisgKgkJCU5vbmUuIAorICoqLwkKK3R5cGVkZWYgdm9pZAkoKlRpbWVyQ2FsbGJhY2spKGludCBpZEV2ZW50KTsKKworLyoqCisgKiBEZWNsYXJlcyBvZiBhIHN0cnVjdCB0eXBlIHRvIHRoZSBsb2NhbCBzeXN0ZW0gdGltZS4KKyoqLwordHlwZWRlZiBzdHJ1Y3QgX0ZQREZfU1lTVEVNVElNRSAKK3sKKyAgICB1bnNpZ25lZCBzaG9ydCB3WWVhcjsJCQkvKiB5ZWFycyBzaW5jZSAxOTAwICovCisgICAgdW5zaWduZWQgc2hvcnQgd01vbnRoOwkJCS8qIG1vbnRocyBzaW5jZSBKYW51YXJ5IC0gWzAsMTFdICovCisgICAgdW5zaWduZWQgc2hvcnQgd0RheU9mV2VlazsJCS8qIGRheXMgc2luY2UgU3VuZGF5IC0gWzAsNl0gKi8KKyAgICB1bnNpZ25lZCBzaG9ydCB3RGF5OwkJCS8qIGRheSBvZiB0aGUgbW9udGggLSBbMSwzMV0gKi8KKyAgICB1bnNpZ25lZCBzaG9ydCB3SG91cjsJCQkvKiBob3VycyBzaW5jZSBtaWRuaWdodCAtIFswLDIzXSAqLworICAgIHVuc2lnbmVkIHNob3J0IHdNaW51dGU7CQkJLyogbWludXRlcyBhZnRlciB0aGUgaG91ciAtIFswLDU5XSAqLworICAgIHVuc2lnbmVkIHNob3J0IHdTZWNvbmQ7CQkJLyogc2Vjb25kcyBhZnRlciB0aGUgbWludXRlIC0gWzAsNTldICovCisgICAgdW5zaWduZWQgc2hvcnQgd01pbGxpc2Vjb25kczsJLyogbWlsbGlzZWNvbmRzIGFmdGVyIHRoZSBzZWNvbmQgLSBbMCw5OTldICovCit9RlBERl9TWVNURU1USU1FOworCisKK3R5cGVkZWYgc3RydWN0ICBfRlBERl9GT1JNRklMTElORk8KK3sKKwkvKioKKwkgKiBWZXJzaW9uIG51bWJlciBvZiB0aGUgaW50ZXJmYWNlLiBDdXJyZW50bHkgbXVzdCBiZSAxLgorCSAqKi8KKwlpbnQJdmVyc2lvbjsKKworCQkvKiogCisJICogTWV0aG9kOiBSZWxlYXNlCisJICoJCQlHaXZlIGltcGxlbWVudGF0aW9uIGEgY2hhbmNlIHRvIHJlbGVhc2UgYW55IGRhdGEgYWZ0ZXIgdGhlIGludGVyZmFjZSBpcyBubyBsb25nZXIgdXNlZAorCSAqIEludGVyZmFjZSBWZXJzaW9uOgorCSAqCQkJMQorCSAqIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOgorCSAqCQkJTm8KKwkgKiBDb21tZW50czoKKwkgKgkJCUNhbGxlZCBieSBGb3hpdCBTREsgZHVyaW5nIHRoZSBmaW5hbCBjbGVhbnVwIHByb2Nlc3MuCisJICogUGFyYW1ldGVyczoKKwkgKgkJCXBUaGlzCQktCVBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgaXRzZWxmCisJICogUmV0dXJuIFZhbHVlOgorCSAqCQkJTm9uZQorCSAqLworCisJdm9pZCAoKlJlbGVhc2UpKHN0cnVjdCBfRlBERl9GT1JNRklMTElORk8qIHBUaGlzKTsKKworCS8qKiAKKwkgKiBNZXRob2Q6IEZGSV9JbnZhbGlkYXRlCisJICoJCQlJbnZhbGlkYXRlIHRoZSBjbGllbnQgYXJlYSB3aXRoaW4gdGhlIHNwZWNpZmllZCByZWN0YW5nbGUuCisJICogSW50ZXJmYWNlIFZlcnNpb246CisJICoJCQkxCisJICogSW1wbGVtZW50YXRpb24gUmVxdWlyZWQ6CisJCSoJCQl5ZXMKKwkgKiBQYXJhbWV0ZXJzOgorCSAqCQkJcFRoaXMJCS0JUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBpdHNlbGYuCisJICoJCQlwYWdlCQktCUhhbmRsZSB0byB0aGUgcGFnZS4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkUGFnZSBmdW5jdGlvbi4KKwkgKgkJCWxlZnQJCS0JTGVmdCBwb3NpdGlvbiBvZiB0aGUgY2xpZW50IGFyZWEgaW4gUERGIHBhZ2UgY29vcmRpbmF0ZS4KKwkgKgkJCXRvcAkJCS0JVG9wICBwb3NpdGlvbiBvZiB0aGUgY2xpZW50IGFyZWEgaW4gUERGIHBhZ2UgY29vcmRpbmF0ZS4KKwkgKgkJCXJpZ2h0CQktCVJpZ2h0IHBvc2l0aW9uIG9mIHRoZSBjbGllbnQgYXJlYSBpbiBQREYgcGFnZSAgY29vcmRpbmF0ZS4KKwkgKgkJCWJvdHRvbQkJLQlCb3R0b20gcG9zaXRpb24gb2YgdGhlIGNsaWVudCBhcmVhIGluIFBERiBwYWdlIGNvb3JkaW5hdGUuCisJICogUmV0dXJuIFZhbHVlOgorCSAqCQkJTm9uZS4KKwkgKgorCSAqY29tbWVudHM6CisJICoJCQlBbGwgcG9zaXRpb25zIGFyZSBtZWFzdXJlZCBpbiBQREYgInVzZXIgc3BhY2UiLgorCSAqCQkJSW1wbGVtZW50YXRpb24gc2hvdWxkIGNhbGwgRlBERl9SZW5kZXJQYWdlQml0bWFwKCkgZnVuY3Rpb24gZm9yIHJlcGFpbnRpbmcgYSBzcGVjaWZpZWQgcGFnZSBhcmVhLgorCSovCisJdm9pZCAoKkZGSV9JbnZhbGlkYXRlKShzdHJ1Y3QgX0ZQREZfRk9STUZJTExJTkZPKiBwVGhpcyxGUERGX1BBR0UgcGFnZSwgZG91YmxlIGxlZnQsIGRvdWJsZSB0b3AsIGRvdWJsZSByaWdodCwgZG91YmxlIGJvdHRvbSk7CisJCisJLyoqIAorCSAqIE1ldGhvZDogRkZJX091dHB1dFNlbGVjdGVkUmVjdAorCSAqCQkJV2hlbiB1c2VyIGlzIHRha2luZyB0aGUgbW91c2UgdG8gc2VsZWN0IHRleHRzIG9uIGEgZm9ybSBmaWVsZCwgdGhpcyBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGtlZXAgCisJICoJCQlyZXR1cm5pbmcgdGhlIHNlbGVjdGVkIGFyZWFzIHRvIHRoZSBpbXBsZW1lbnRhdGlvbi4KKwkgKgorCSAqIEludGVyZmFjZSBWZXJzaW9uOgorCSAqCQkJMQorCSAqIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOgorCSAqCQkJTm8KKwkgKiBQYXJhbWV0ZXJzOgorCSAqCQkJcFRoaXMJCS0JUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBpdHNlbGYuCisJICoJCQlwYWdlCQktCUhhbmRsZSB0byB0aGUgcGFnZS4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkUGFnZSBmdW5jdGlvbi4KKwkgKgkJCWxlZnQJCS0JTGVmdCBwb3NpdGlvbiBvZiB0aGUgY2xpZW50IGFyZWEgaW4gUERGIHBhZ2UgY29vcmRpbmF0ZS4KKwkgKgkJCXRvcAkJCS0JVG9wICBwb3NpdGlvbiBvZiB0aGUgY2xpZW50IGFyZWEgaW4gUERGIHBhZ2UgY29vcmRpbmF0ZS4KKwkgKgkJCXJpZ2h0CQktCVJpZ2h0IHBvc2l0aW9uIG9mIHRoZSBjbGllbnQgYXJlYSBpbiBQREYgcGFnZSAgY29vcmRpbmF0ZS4KKwkgKgkJCWJvdHRvbQkJLQlCb3R0b20gcG9zaXRpb24gb2YgdGhlIGNsaWVudCBhcmVhIGluIFBERiBwYWdlIGNvb3JkaW5hdGUuCisJICogUmV0dXJuIFZhbHVlOgorCSAqCQkJTm9uZS4KKwkgKgorCSAqIGNvbW1lbnRzOgorCSAqCQkJVGhpcyBDQUxMQkFDSyBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIGltcGxlbWVudGluZyBzcGVjaWFsIHRleHQgc2VsZWN0aW9uIGVmZmVjdC4gSW1wbGVtZW50YXRpb24gc2hvdWxkCisJICoJCQlmaXJzdCByZWNvcmRzIHRoZSByZXR1cm5lZCByZWN0YW5nbGVzLCB0aGVuIGRyYXcgdGhlbSBvbmUgYnkgb25lIGF0IHRoZSBwYWludGluZyBwZXJpb2QsIGxhc3QscmVtb3ZlIGFsbCAKKwkgKgkJCXRoZSByZWNvcmRlZCByZWN0YW5nbGVzIHdoZW4gZmluaXNoIHBhaW50aW5nLgorCSovCisJdm9pZCAoKkZGSV9PdXRwdXRTZWxlY3RlZFJlY3QpKHN0cnVjdCBfRlBERl9GT1JNRklMTElORk8qIHBUaGlzLEZQREZfUEFHRSBwYWdlLCBkb3VibGUgbGVmdCwgZG91YmxlIHRvcCwgZG91YmxlIHJpZ2h0LCBkb3VibGUgYm90dG9tKTsKKworCS8qKiAKKwkqIE1ldGhvZDogRkZJX1NldEN1cnNvcgorCSoJCQlTZXQgdGhlIEN1cnNvciBzaGFwZS4KKwkqIEludGVyZmFjZSBWZXJzaW9uOgorCSoJCQkxCisJKiBJbXBsZW1lbnRhdGlvbiBSZXF1aXJlZDoKKwkqCQkJeWVzCisJKiBQYXJhbWV0ZXJzOgorCSoJCXBUaGlzCQktCVBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgaXRzZWxmLgorCSogCQluQ3Vyc29yVHlwZQktCUN1cnNvciB0eXBlLiBzZWUgRmxhZ3MgZm9yIEN1cnNvciB0eXBlIGZvciB0aGUgZGV0YWlscy4KKwkqIAlSZXR1cm4gdmFsdWU6CisJKiAJCU5vbmUuCisJKiAqLworCXZvaWQgKCpGRklfU2V0Q3Vyc29yKShzdHJ1Y3QgX0ZQREZfRk9STUZJTExJTkZPKiBwVGhpcywgaW50IG5DdXJzb3JUeXBlKTsKKworCS8qKiAKKwkqIE1ldGhvZDogRkZJX1NldFRpbWVyCisJKgkJCVRoaXMgbWV0aG9kIGluc3RhbGxzIGEgc3lzdGVtIHRpbWVyLiBBIHRpbWUtb3V0IHZhbHVlIGlzIHNwZWNpZmllZCwgCisJKgkJCWFuZCBldmVyeSB0aW1lIGEgdGltZS1vdXQgb2NjdXJzLCB0aGUgc3lzdGVtIHBhc3NlcyBhIG1lc3NhZ2UgdG8KKwkqCQkJdGhlIFRpbWVyUHJvYyBjYWxsYmFjayBmdW5jdGlvbi4gCisJKiBJbnRlcmZhY2UgVmVyc2lvbjoKKwkqCQkJMQorCSogSW1wbGVtZW50YXRpb24gUmVxdWlyZWQ6CisJKgkJCXllcworCSogUGFyYW1ldGVyczoKKwkqCQlwVGhpcwkJLQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZi4KKwkqIAkJdUVsYXBzZQkJLQlTcGVjaWZpZXMgdGhlIHRpbWUtb3V0IHZhbHVlLCBpbiBtaWxsaXNlY29uZHMuCisJKiAJCWxwVGltZXJGdW5jCS0JQSBwb2ludGVyIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi1UaW1lckNhbGxiYWNrLgorCSogCVJldHVybiB2YWx1ZToKKwkqIAkJVGhlIHRpbWVyIGlkZW50aWZpZXIgb2YgdGhlIG5ldyB0aW1lciBpZiB0aGUgZnVuY3Rpb24gaXMgc3VjY2Vzc2Z1bC4KKwkqCQlBbiBhcHBsaWNhdGlvbiBwYXNzZXMgdGhpcyB2YWx1ZSB0byB0aGUgRkZJX0tpbGxUaW1lciBtZXRob2QgdG8ga2lsbCAKKwkqCQl0aGUgdGltZXIuIE5vbnplcm8gaWYgaXQgaXMgc3VjY2Vzc2Z1bDsgb3RoZXJ3aXNlLCBpdCBpcyB6ZXJvLgorCSogKi8KKwlpbnQgICgqRkZJX1NldFRpbWVyKShzdHJ1Y3QgX0ZQREZfRk9STUZJTExJTkZPKiBwVGhpcywgaW50IHVFbGFwc2UsIFRpbWVyQ2FsbGJhY2sgbHBUaW1lckZ1bmMpOworCisJLyoqIAorCSogTWV0aG9kOiBGRklfS2lsbFRpbWVyCisJKgkJCVRoaXMgbWV0aG9kIGtpbGxzIHRoZSB0aW1lciBldmVudCBpZGVudGlmaWVkIGJ5IG5JREV2ZW50LCBzZXQgYnkgYW4gZWFybGllciBjYWxsIHRvIEZGSV9TZXRUaW1lci4gCisJKiBJbnRlcmZhY2UgVmVyc2lvbjoKKwkqCQkJMQorCSogSW1wbGVtZW50YXRpb24gUmVxdWlyZWQ6CisJKgkJCXllcworCSogUGFyYW1ldGVyczoKKwkqCQlwVGhpcwkJLQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZi4KKwkqIAkJblRpbWVySUQJLQlUaGUgdGltZXIgSUQgcmV0dXJuIGJ5IEZGSV9TZXRUaW1lciBmdW5jdGlvbi4KKwkqIAlSZXR1cm4gdmFsdWU6CisJKiAJCU5vbmUuCisJKiAqLworCXZvaWQgKCpGRklfS2lsbFRpbWVyKShzdHJ1Y3QgX0ZQREZfRk9STUZJTExJTkZPKiBwVGhpcywgaW50IG5UaW1lcklEKTsKKworCisJLyoqIAorCSogTWV0aG9kOiBGRklfR2V0TG9jYWxUaW1lCisJKgkJCVRoaXMgbWV0aG9kIHJlY2VpdmVzIHRoZSBjdXJyZW50IGxvY2FsIHRpbWUgb24gdGhlIHN5c3RlbS4gCisJKiBJbnRlcmZhY2UgVmVyc2lvbjoKKwkqCQkJMQorCSogSW1wbGVtZW50YXRpb24gUmVxdWlyZWQ6CisJKgkJCXllcworCSogUGFyYW1ldGVyczoKKwkqCQlwVGhpcwkJLQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZi4KKwkqIAlSZXR1cm4gdmFsdWU6CisJKiAJCU5vbmUuCisJKiAqLworCUZQREZfU1lTVEVNVElNRSAoKkZGSV9HZXRMb2NhbFRpbWUpKHN0cnVjdCBfRlBERl9GT1JNRklMTElORk8qIHBUaGlzKTsKKworCS8qKiAKKwkqIE1ldGhvZDogRkZJX09uQ2hhbmdlCisJKgkJCVRoaXMgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCB0byBub3RpZnkgaW1wbGVtZW50YXRpb24gd2hlbiB0aGUgdmFsdWUgb2YgYW55IEZvcm1GaWVsZCBvbiB0aGUgZG9jdW1lbnQgaGFkIGJlZW4gY2hhbmdlZC4KKwkqIEludGVyZmFjZSBWZXJzaW9uOgorCSoJCQkxCisJKiBJbXBsZW1lbnRhdGlvbiBSZXF1aXJlZDoKKwkqCQkJbm8KKwkqIFBhcmFtZXRlcnM6CisJKgkJcFRoaXMJCS0JUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBpdHNlbGYuCisJKiAJUmV0dXJuIHZhbHVlOgorCSogCQlOb25lLgorCSogKi8KKwl2b2lkICgqRkZJX09uQ2hhbmdlKShzdHJ1Y3QgX0ZQREZfRk9STUZJTExJTkZPKiBwVGhpcyk7CisKKwkvKiogCisJKiBNZXRob2Q6IEZGSV9HZXRQYWdlCisJKgkJCVRoaXMgbWV0aG9kIHJlY2VpdmVzIHRoZSBwYWdlIHBvaW50ZXIgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWVkIHBhZ2UgaW5kZXguCisJKiBJbnRlcmZhY2UgVmVyc2lvbjoKKwkqCQkJMQorCSogSW1wbGVtZW50YXRpb24gUmVxdWlyZWQ6CisJKgkJCXllcworCSogUGFyYW1ldGVyczoKKwkqCQlwVGhpcwkJLQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZi4KKwkqCQlkb2N1bWVudAktCUhhbmRsZSB0byBkb2N1bWVudC4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkRG9jdW1lbnQgZnVuY3Rpb24uCisJKgkJblBhZ2VJbmRleCAgLQlJbmRleCBudW1iZXIgb2YgdGhlIHBhZ2UuIDAgZm9yIHRoZSBmaXJzdCBwYWdlLgorCSogUmV0dXJuIHZhbHVlOgorCSogCQlIYW5kbGUgdG8gdGhlIHBhZ2UuIFJldHVybmVkIGJ5IEZQREZfTG9hZFBhZ2UgZnVuY3Rpb24uCisJKiBDb21tZW50czoKKwkqCQlJbiBzb21lIGNhc2VzLCB0aGUgZG9jdW1lbnQtbGV2ZWwgSmF2YVNjcmlwdCBhY3Rpb24gbWF5IHJlZmVyIHRvIGEgcGFnZSB3aGljaCBoYWRuJ3QgYmVlbiBsb2FkZWQgeWV0LgorCSoJCVRvIHN1Y2Nlc3NmdWxseSBydW4gdGhlIGphdmFzY3JpcHQgYWN0aW9uLCBpbXBsZW1lbnRhdGlvbiBuZWVkIHRvIGxvYWQgdGhlIHBhZ2UgZm9yIFNESy4KKwkqICovCisJRlBERl9QQUdFCSgqRkZJX0dldFBhZ2UpKHN0cnVjdCBfRlBERl9GT1JNRklMTElORk8qIHBUaGlzLCBGUERGX0RPQ1VNRU5UIGRvY3VtZW50LCBpbnQgblBhZ2VJbmRleCk7CisKKwkvKiogCisJKiBNZXRob2Q6IEZGSV9HZXRDdXJyZW50UGFnZQorCSoJCVRoaXMgbWV0aG9kIHJlY2VpdmVzIHRoZSBjdXJyZW50IHBhZ2UgcG9pbnRlci4KKwkqIEludGVyZmFjZSBWZXJzaW9uOgorCSoJCQkxCisJKiBJbXBsZW1lbnRhdGlvbiBSZXF1aXJlZDoKKwkqCQkJeWVzCisJKiBQYXJhbWV0ZXJzOgorCSoJCXBUaGlzCQktCVBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgaXRzZWxmLgorCSoJCWRvY3VtZW50CS0JSGFuZGxlIHRvIGRvY3VtZW50LiBSZXR1cm5lZCBieSBGUERGX0xvYWREb2N1bWVudCBmdW5jdGlvbi4KKwkqIFJldHVybiB2YWx1ZToKKwkqIAkJSGFuZGxlIHRvIHRoZSBwYWdlLiBSZXR1cm5lZCBieSBGUERGX0xvYWRQYWdlIGZ1bmN0aW9uLgorCSogKi8KKwlGUERGX1BBR0UJKCpGRklfR2V0Q3VycmVudFBhZ2UpKHN0cnVjdCBfRlBERl9GT1JNRklMTElORk8qIHBUaGlzLCBGUERGX0RPQ1VNRU5UIGRvY3VtZW50KTsKKworCS8qKiAKKwkqIE1ldGhvZDogRkZJX0dldFJvdGF0aW9uCisJKgkJCVRoaXMgbWV0aG9kIHJlY2VpdmVzIGN1cnJlbnRseSByb3RhdGlvbiBvZiB0aGUgcGFnZSB2aWV3LgorCSogSW50ZXJmYWNlIFZlcnNpb246CisJKgkJCTEKKwkqIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOgorCSoJCQl5ZXMKKwkqIFBhcmFtZXRlcnM6CisJKgkJcFRoaXMJCS0JUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBpdHNlbGYuCisJKgkJcGFnZQkJLQlIYW5kbGUgdG8gcGFnZS4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkUGFnZSBmdW5jdGlvbi4KKwkqIFJldHVybiB2YWx1ZToKKwkqIAkJVGhlIHBhZ2Ugcm90YXRpb24uIFNob3VsZCBiZSAwKDAgZGVncmVlKSwxKDkwIGRlZ3JlZSksMigxODAgZGVncmVlKSwzKDI3MCBkZWdyZWUpLCBpbiBhIGNsb2Nrd2lzZSBkaXJlY3Rpb24uCisJKiAqLworCWludCAJKCpGRklfR2V0Um90YXRpb24pKHN0cnVjdCBfRlBERl9GT1JNRklMTElORk8qIHBUaGlzLCBGUERGX1BBR0UgcGFnZSk7CisKKwkvKiogCisJKiBNZXRob2Q6IEZGSV9FeGVjdXRlTmFtZWRBY3Rpb24KKwkqCQkJVGhpcyBtZXRob2Qgd2lsbCBleGVjdXRlIGFuIG5hbWVkIGFjdGlvbi4KKwkqIEludGVyZmFjZSBWZXJzaW9uOgorCSoJCQkxCisJKiBJbXBsZW1lbnRhdGlvbiBSZXF1aXJlZDoKKwkqCQkJeWVzCisJKiBQYXJhbWV0ZXJzOgorCSoJCXBUaGlzCQkJLQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZi4KKwkqCQluYW1lZEFjdGlvbgkJLQlBIGJ5dGUgc3RyaW5nIHdoaWNoIGluZGljYXRlcyB0aGUgbmFtZWQgYWN0aW9uLCB0ZXJtaW5hdGVkIGJ5IDAuCisJKiBSZXR1cm4gdmFsdWU6CisJKiAJCU5vbmUuCisJKiBDb21tZW50czoKKwkqCQlTZWUgdGhlIG5hbWVkIGFjdGlvbnMgZGVzY3JpcHRpb24gb2YgPDxQREYgUmVmZXJlbmNlLCB2ZXJzaW9uIDEuNz4+IGZvciBtb3JlIGRldGFpbHMuICAKKwkqICovCisJdm9pZCAJKCpGRklfRXhlY3V0ZU5hbWVkQWN0aW9uKShzdHJ1Y3QgX0ZQREZfRk9STUZJTExJTkZPKiBwVGhpcywgRlBERl9CWVRFU1RSSU5HIG5hbWVkQWN0aW9uKTsKKwkvKiogCisJKiBAYnJpZWYgVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgd2hlbiBhIHRleHQgZmllbGQgaXMgZ2V0dGluZyBvciBsb3NpbmcgYSBmb2N1cy4KKwkqCisJKiBAcGFyYW1baW5dIHBUaGlzCQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZi4KKwkqIEBwYXJhbVtpbl0gdmFsdWUJCVRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIGZvcm0gZmllbGQsIGluIFVURi0xNkxFIGZvcm1hdC4KKwkqIEBwYXJhbVtpbl0gdmFsdWVMZW4JVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHZhbHVlLCBudW1iZXIgb2YgY2hhcmFjdGVycyAobm90IGJ5dGVzKS4KKwkqIEBwYXJhbVtpbl0gaXNfZm9jdXMJVHJ1ZSBpZiB0aGUgZm9ybSBmaWVsZCBpcyBnZXR0aW5nIGEgZm9jdXMsIEZhbHNlIGZvciBsb3NpbmcgYSBmb2N1cy4KKwkqCisJKiBAcmV0dXJuIE5vbmUuCisJKgorCSogQG5vdGUgQ3VycmVudGx5LG9ubHkgc3VwcG9ydCB0ZXh0IGZpZWxkIGFuZCBjb21ib2JveCBmaWVsZC4KKwkqICovCisJdm9pZAkoKkZGSV9TZXRUZXh0RmllbGRGb2N1cykoc3RydWN0IF9GUERGX0ZPUk1GSUxMSU5GTyogcFRoaXMsIEZQREZfV0lERVNUUklORyB2YWx1ZSwgRlBERl9EV09SRCB2YWx1ZUxlbiwgRlBERl9CT09MIGlzX2ZvY3VzKTsKKworCQorCS8qKiAKKwkqIE1ldGhvZDogRkZJX0RvVVJJQWN0aW9uCisJKgkJCVRoaXMgYWN0aW9uIHJlc29sdmVzIHRvIGEgdW5pZm9ybSByZXNvdXJjZSBpZGVudGlmaWVyLiAKKwkqIEludGVyZmFjZSBWZXJzaW9uOgorCSoJCQkxCisJKiBJbXBsZW1lbnRhdGlvbiBSZXF1aXJlZDoKKwkqCQkJTm8KKwkqIFBhcmFtZXRlcnM6CisJKgkJcFRoaXMJCQktCVBvaW50ZXIgdG8gdGhlIGludGVyZmFjZSBzdHJ1Y3R1cmUgaXRzZWxmLgorCSoJCWJzVVJJCQkJLQlBIGJ5dGUgc3RyaW5nIHdoaWNoIGluZGljYXRlcyB0aGUgdW5pZm9ybSByZXNvdXJjZSBpZGVudGlmaWVyLCB0ZXJtaW5hdGVkIGJ5IDAuCisJKiBSZXR1cm4gdmFsdWU6CisJKiAJCU5vbmUuCisJKiBDb21tZW50czoKKwkqCQlTZWUgdGhlIFVSSSBhY3Rpb25zIGRlc2NyaXB0aW9uIG9mIDw8UERGIFJlZmVyZW5jZSwgdmVyc2lvbiAxLjc+PiBmb3IgbW9yZSBkZXRhaWxzLiAgCisJKiAqLworCXZvaWQJKCpGRklfRG9VUklBY3Rpb24pKHN0cnVjdCBfRlBERl9GT1JNRklMTElORk8qIHBUaGlzLCBGUERGX0JZVEVTVFJJTkcgYnNVUkkpOworCQorCS8qKiAKKwkqIE1ldGhvZDogRkZJX0RvR29Ub0FjdGlvbgorCSoJCQlUaGlzIGFjdGlvbiBjaGFuZ2VzIHRoZSB2aWV3IHRvIGEgc3BlY2lmaWVkIGRlc3RpbmF0aW9uLgorCSogSW50ZXJmYWNlIFZlcnNpb246CisJKgkJCTEKKwkqIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOgorCSoJCQlObworCSogUGFyYW1ldGVyczoKKwkqCQlwVGhpcwkJCS0JUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBpdHNlbGYuCisJKgkJblBhZ2VJbmRleAkJLQlUaGUgaW5kZXggb2YgdGhlIFBERiBwYWdlLgorCSoJCXpvb21Nb2RlCQktCVRoZSB6b29tIG1vZGUgZm9yIHZpZXdpbmcgcGFnZS5TZWUgTWFjcm9zICJQREZaT09NX1hYWCIgZGVmaW5lZCBpbiAiZnBkZmRvYy5oIi4gCisJKgkJZlBvc0FycmF5CQktCVRoZSBmbG9hdCBhcnJheSB3aGljaCBjYXJyaWVzIHRoZSBwb3NpdGlvbiBpbmZvLgorCSoJCXNpemVvZkFycmF5CQktCVRoZSBzaXplIG9mIGZsb2F0IGFycmF5LgorCSogUmV0dXJuIHZhbHVlOgorCSogCQlOb25lLgorCSogQ29tbWVudHM6CisJKgkJU2VlIHRoZSBEZXN0aW5hdGlvbnMgZGVzY3JpcHRpb24gb2YgPDxQREYgUmVmZXJlbmNlLCB2ZXJzaW9uIDEuNz4+IGluIDguMi4xIGZvciBtb3JlIGRldGFpbHMuICAKKwkqKi8KKwl2b2lkCSgqRkZJX0RvR29Ub0FjdGlvbikoc3RydWN0IF9GUERGX0ZPUk1GSUxMSU5GTyogcFRoaXMsIGludCBuUGFnZUluZGV4LCBpbnQgem9vbU1vZGUsIGZsb2F0KiBmUG9zQXJyYXksIGludCBzaXplb2ZBcnJheSk7CisJLyoqCisJKglwb2ludGVyIHRvIElQREZfSlNQTEFURk9STSBpbnRlcmZhY2UKKwkqKi8KKwlJUERGX0pTUExBVEZPUk0qCW1fcEpzUGxhdGZvcm07CisKK30gRlBERl9GT1JNRklMTElORk87CisKKworCisvKioKKyAqIEZ1bmN0aW9uOiBGUERGRE9DX0luaXRGb3JtRmlsbEVudmlyb3VtZW50CisgKgkJCUluaXQgZm9ybSBmaWxsIGVudmlyb25tZW50LiAKKyAqIENvbW1lbnRzOgorICoJCQlUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGFueSBmb3JtIGZpbGwgb3BlcmF0aW9uLgorICogUGFyYW1ldGVyczoKKyAqCQkJZG9jdW1lbnQJCS0JSGFuZGxlIHRvIGRvY3VtZW50LiBSZXR1cm5lZCBieSBGUERGX0xvYWREb2N1bWVudCBmdW5jdGlvbi4KKyAqCQkJcEZvcm1GaWxsSW5mbwktCVBvaW50ZXIgdG8gYSBGUERGX0ZPUk1GSUxMSU5GTyBzdHJ1Y3R1cmUuCisgKiBSZXR1cm4gVmFsdWU6CisgKgkJCVJldHVybiBoYW5kbGVyIHRvIHRoZSBmb3JtIGZpbGwgbW9kdWxlLiBOVUxMIG1lYW5zIGZhaWxzLiAKKyAqKi8KK0RMTEVYUE9SVCBGUERGX0ZPUk1IQU5ETEUgU1REQ0FMTCBGUERGRE9DX0luaXRGb3JtRmlsbEVudmlyb3VtZW50KEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsIEZQREZfRk9STUZJTExJTkZPKiBmb3JtSW5mbyk7CisKKy8qKgorICogRnVuY3Rpb246IEZQREZET0NfRXhpdEZvcm1GaWxsRW52aXJvdW1lbnQKKyAqCQkJRXhpdCBmb3JtIGZpbGwgZW52aXJvbm1lbnQuIAorICogUGFyYW1ldGVyczoKKyAqCQkJaEhhbmRsZQkJLQlIYW5kbGUgdG8gdGhlIGZvcm0gZmlsbCBtb2R1bGUuIFJldHVybmVkIGJ5IEZQREZET0NfSW5pdEZvcm1GaWxsRW52aXJvdW1lbnQuCisgKiBSZXR1cm4gVmFsdWU6CisgKgkJCU5VTEwuCisgKiovCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZET0NfRXhpdEZvcm1GaWxsRW52aXJvdW1lbnQoRlBERl9GT1JNSEFORExFIGhIYW5kbGUpOworCisvKioKKyAqIEZ1bmN0aW9uOiBGT1JNX09uQWZ0ZXJMb2FkUGFnZQorICoJCQlUaGlzIG1ldGhvZCBpcyByZXF1aXJlZCBmb3IgaW1wbGVtZW50aW5nIGFsbCB0aGUgZm9ybSByZWxhdGVkIGZ1bmN0aW9ucy4gU2hvdWxkIGJlIGludm9rZWQgYWZ0ZXIgdXNlciAKKyAqCQkJc3VjY2Vzc2Z1bGx5IGxvYWRlZCBhIFBERiBwYWdlLCBhbmQgbWV0aG9kIEZQREZET0NfSW5pdEZvcm1GaWxsRW52aXJvdW1lbnQgaGFkIGJlZW4gaW52b2tlZC4KKyAqIFBhcmFtZXRlcnM6CisgKgkJCWhIYW5kbGUJCS0JSGFuZGxlIHRvIHRoZSBmb3JtIGZpbGwgbW9kdWxlLiBSZXR1cm5lZCBieSBGUERGRE9DX0luaXRGb3JtRmlsbEVudmlyb3VtZW50LgorICogUmV0dXJuIFZhbHVlOgorICoJCQlOT05FLgorICoqLworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGT1JNX09uQWZ0ZXJMb2FkUGFnZShGUERGX1BBR0UgcGFnZSwgRlBERl9GT1JNSEFORExFIGhIYW5kbGUpOworCisvKioKKyAqIEZ1bmN0aW9uOiBGT1JNX09uQmVmb3JlQ2xvc2VQYWdlCisgKgkJCVRoaXMgbWV0aG9kIGlzIHJlcXVpcmVkIGZvciBpbXBsZW1lbnRpbmcgYWxsIHRoZSBmb3JtIHJlbGF0ZWQgZnVuY3Rpb25zLiBTaG91bGQgYmUgaW52b2tlZCBiZWZvcmUgdXNlciAKKyAqCQkJY2xvc2UgdGhlIFBERiBwYWdlLgorICogUGFyYW1ldGVyczoKKyAqCQkJcGFnZQkJLQlIYW5kbGUgdG8gdGhlIHBhZ2UuIFJldHVybmVkIGJ5IEZQREZfTG9hZFBhZ2UgZnVuY3Rpb24uCisgKgkJCWhIYW5kbGUJCS0JSGFuZGxlIHRvIHRoZSBmb3JtIGZpbGwgbW9kdWxlLiBSZXR1cm5lZCBieSBGUERGRE9DX0luaXRGb3JtRmlsbEVudmlyb3VtZW50LgorICogUmV0dXJuIFZhbHVlOgorICoJCQlOT05FLgorICoqLworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGT1JNX09uQmVmb3JlQ2xvc2VQYWdlKEZQREZfUEFHRSBwYWdlLCBGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSk7CisKKy8qKgorKiBGdW5jdGlvbjogRk9STV9Eb0RvY3VtZW50SlNBY3Rpb24KKyoJCQlUaGlzIG1ldGhvZCBpcyByZXF1aXJlZCBmb3IgcGVyZm9ybWluZyBEb2N1bWVudC1sZXZlbCBKYXZhU2NyaXB0IGFjdGlvbi4gSXQgc2hvdWxkIGJlIGludm9rZWQgYWZ0ZXIgdGhlIFBERiBkb2N1bWVudAorKgkJCWhhZCBiZWVuIGxvYWRlZC4KKyogUGFyYW1ldGVyczoKKyoJCQloSGFuZGxlCQktCUhhbmRsZSB0byB0aGUgZm9ybSBmaWxsIG1vZHVsZS4gUmV0dXJuZWQgYnkgRlBERkRPQ19Jbml0Rm9ybUZpbGxFbnZpcm91bWVudC4KKyogUmV0dXJuIFZhbHVlOgorKgkJCU5PTkUKKyogQ29tbWVudHM6CisqCQkJSWYgdGhlcmUgaXMgRG9jdW1lbnQtbGV2ZWwgSmF2YVNjcmlwdCBhY3Rpb24gZW1iZWRkZWQgaW4gdGhlIGRvY3VtZW50LCB0aGlzIG1ldGhvZCB3aWxsIGV4ZWN1dGUgdGhlIGphdmFzY3JpcHQgYWN0aW9uOworKgkJCW90aGVyd2lzZSwgdGhlIG1ldGhvZCB3aWxsIGRvIG5vdGhpbmcuCisqKi8KK0RMTEVYUE9SVCB2b2lkIFNURENBTEwgRk9STV9Eb0RvY3VtZW50SlNBY3Rpb24oRlBERl9GT1JNSEFORExFIGhIYW5kbGUpOworCisKKy8qKgorKiBGdW5jdGlvbjogRk9STV9Eb0RvY3VtZW50T3BlbkFjdGlvbgorKgkJCVRoaXMgbWV0aG9kIGlzIHJlcXVpcmVkIGZvciBwZXJmb3JtaW5nIG9wZW4tYWN0aW9uIHdoZW4gdGhlIGRvY3VtZW50IGlzIG9wZW5lZC4KKyogUGFyYW1ldGVyczoKKyoJCQloSGFuZGxlCQktCUhhbmRsZSB0byB0aGUgZm9ybSBmaWxsIG1vZHVsZS4gUmV0dXJuZWQgYnkgRlBERkRPQ19Jbml0Rm9ybUZpbGxFbnZpcm91bWVudC4KKyogUmV0dXJuIFZhbHVlOgorKgkJCU5PTkUKKyogQ29tbWVudHM6CisqCQkJVGhpcyBtZXRob2Qgd2lsbCBkbyBub3RoaW5nIGlmIHRoZXJlIGlzIG5vIG9wZW4tYWN0aW9ucyBlbWJlZGRlZCBpbiB0aGUgZG9jdW1lbnQuIAorKiovCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZPUk1fRG9Eb2N1bWVudE9wZW5BY3Rpb24oRlBERl9GT1JNSEFORExFIGhIYW5kbGUpOworCisKKy8vIGFkZGl0aW9uYWwgYWN0aW9ucyB0eXBlIG9mIGRvY3VtZW50LgorI2RlZmluZSBGUERGRE9DX0FBQ1RJT05fV0MJCTB4MTAJCS8vV0MsIGJlZm9yZSBjbG9zaW5nIGRvY3VtZW50LCBKYXZhU2NyaXB0IGFjdGlvbi4KKyNkZWZpbmUgRlBERkRPQ19BQUNUSU9OX1dTCQkweDExCQkvL1dTLCBiZWZvcmUgc2F2aW5nIGRvY3VtZW50LCBKYXZhU2NyaXB0IGFjdGlvbi4KKyNkZWZpbmUgRlBERkRPQ19BQUNUSU9OX0RTCQkweDEyCQkvL0RTLCBhZnRlciBzYXZpbmcgZG9jdW1lbnQsIEphdmFTY3JpcHQgYWN0aW9uLgorI2RlZmluZSBGUERGRE9DX0FBQ1RJT05fV1AJCTB4MTMJCS8vV1AsIGJlZm9yZSBwcmludGluZyBkb2N1bWVudCwgSmF2YVNjcmlwdCBhY3Rpb24uCisjZGVmaW5lIEZQREZET0NfQUFDVElPTl9EUAkJMHgxNAkJLy9EUCwgYWZ0ZXIgcHJpbnRpbmcgZG9jdW1lbnQsIEphdmFTY3JpcHQgYWN0aW9uLiAKKy8qKgorKiBGdW5jdGlvbjogRk9STV9Eb0RvY3VtZW50QUFjdGlvbgorKgkJCVRoaXMgbWV0aG9kIGlzIHJlcXVpcmVkIGZvciBwZXJmb3JtaW5nIHRoZSBkb2N1bWVudCdzIGFkZGl0aW9uYWwtYWN0aW9uLgorKiBQYXJhbWV0ZXJzOgorKgkJCWhIYW5kbGUJCS0JSGFuZGxlIHRvIHRoZSBmb3JtIGZpbGwgbW9kdWxlLiBSZXR1cm5lZCBieSBGUERGRE9DX0luaXRGb3JtRmlsbEVudmlyb3VtZW50LgorKgkJCWFhVHlwZQkgICAgLSAgIFRoZSB0eXBlIG9mIHRoZSBhZGRpdGlvbmFsLWFjdGlvbnMgd2hpY2ggZGVmaW5lZCBhYm92ZS4KKyogUmV0dXJuIFZhbHVlOgorKgkJCU5PTkUKKyogQ29tbWVudHM6CisqCQkJVGhpcyBtZXRob2Qgd2lsbCBkbyBub3RoaW5nIGlmIHRoZXJlIGlzIG5vIGRvY3VtZW50IGFkZGl0aW9uYWwtYWN0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmllZCBhYVR5cGUuCisqKi8KKworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGT1JNX0RvRG9jdW1lbnRBQWN0aW9uKEZQREZfRk9STUhBTkRMRSBoSGFuZGxlLCBpbnQgYWFUeXBlKTsKKworLy8gQWRkaXRpb25hbC1hY3Rpb24gdHlwZXMgb2YgcGFnZSBvYmplY3QKKyNkZWZpbmUgRlBERlBBR0VfQUFDVElPTl9PUEVOCQkwCQkvLyAvTyAtLSBBbiBhY3Rpb24gdG8gYmUgcGVyZm9ybWVkIHdoZW4gdGhlIHBhZ2UgaXMgb3BlbmVkCisjZGVmaW5lIEZQREZQQUdFX0FBQ1RJT05fQ0xPU0UJCTEJCS8vIC9DIC0tIEFuIGFjdGlvbiB0byBiZSBwZXJmb3JtZWQgd2hlbiB0aGUgcGFnZSBpcyBjbG9zZWQKKworLyoqCisqIEZ1bmN0aW9uOiBGT1JNX0RvUGFnZUFBY3Rpb24KKyoJCQlUaGlzIG1ldGhvZCBpcyByZXF1aXJlZCBmb3IgcGVyZm9ybWluZyB0aGUgcGFnZSBvYmplY3QncyBhZGRpdGlvbmFsLWFjdGlvbiB3aGVuIG9wZW5lZCBvciBjbG9zZWQuCisqIFBhcmFtZXRlcnM6CisqCQkJcGFnZQkJLQlIYW5kbGUgdG8gdGhlIHBhZ2UuIFJldHVybmVkIGJ5IEZQREZfTG9hZFBhZ2UgZnVuY3Rpb24uCisqCQkJaEhhbmRsZQkJLQlIYW5kbGUgdG8gdGhlIGZvcm0gZmlsbCBtb2R1bGUuIFJldHVybmVkIGJ5IEZQREZET0NfSW5pdEZvcm1GaWxsRW52aXJvdW1lbnQuCisqCQkJYWFUeXBlCSAgICAtICAgVGhlIHR5cGUgb2YgdGhlIHBhZ2Ugb2JqZWN0J3MgYWRkaXRpb25hbC1hY3Rpb25zIHdoaWNoIGRlZmluZWQgYWJvdmUuCisqIFJldHVybiBWYWx1ZToKKyoJCQlOT05FCisqIENvbW1lbnRzOgorKgkJCVRoaXMgbWV0aG9kIHdpbGwgZG8gbm90aGluZyBpZiBubyBhZGRpdGlvbmFsLWFjdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpZWQgYWFUeXBlIGV4aXN0cy4KKyoqLworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGT1JNX0RvUGFnZUFBY3Rpb24oRlBERl9QQUdFIHBhZ2UsIEZQREZfRk9STUhBTkRMRSBoSGFuZGxlLCBpbnQgYWFUeXBlKTsKKworLyoqCisgKiBGdW5jdGlvbjogRk9STV9Pbk1vdXNlTW92ZQorICoJCQlZb3UgY2FuIGNhbGwgdGhpcyBtZW1iZXIgZnVuY3Rpb24gd2hlbiB0aGUgbW91c2UgY3Vyc29yIG1vdmVzLiAKKyAqIFBhcmFtZXRlcnM6CisgKgkJCWhIYW5kbGUJCS0JSGFuZGxlIHRvIHRoZSBmb3JtIGZpbGwgbW9kdWxlLiBSZXR1cm5lZCBieSBGUERGRE9DX0luaXRGb3JtRmlsbEVudmlyb3VtZW50LgorICoJCQlwYWdlCQktCUhhbmRsZSB0byB0aGUgcGFnZS4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkUGFnZSBmdW5jdGlvbi4KKyAqCQkJbW9kaWZpZXIJCS0JSW5kaWNhdGVzIHdoZXRoZXIgdmFyaW91cyB2aXJ0dWFsIGtleXMgYXJlIGRvd24uIAorICoJCQlwYWdlX3gJCS0JU3BlY2lmaWVzIHRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGN1cnNvciBpbiBQREYgdXNlciBzcGFjZS4gCisgKgkJCXBhZ2VfeQkJLQlTcGVjaWZpZXMgdGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgY3Vyc29yIGluIFBERiB1c2VyIHNwYWNlLgorICogUmV0dXJuIFZhbHVlOgorICoJCQlUUlVFIGluZGljYXRlcyBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UuCisgKiovCitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRk9STV9Pbk1vdXNlTW92ZShGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSxGUERGX1BBR0UgcGFnZSwgaW50IG1vZGlmaWVyLCBkb3VibGUgcGFnZV94LCBkb3VibGUgcGFnZV95KTsKKworLyoqCisgKiBGdW5jdGlvbjogRk9STV9PbkxCdXR0b25Eb3duCisgKgkJCVlvdSBjYW4gY2FsbCB0aGlzIG1lbWJlciBmdW5jdGlvbiB3aGVuIHRoZSB1c2VyIHByZXNzZXMgdGhlIGxlZnQgbW91c2UgYnV0dG9uLgorICogUGFyYW1ldGVyczoKKyAqCQkJaEhhbmRsZQkJLQlIYW5kbGUgdG8gdGhlIGZvcm0gZmlsbCBtb2R1bGUuIFJldHVybmVkIGJ5IEZQREZET0NfSW5pdEZvcm1GaWxsRW52aXJvdW1lbnQuCisgKgkJCXBhZ2UJCS0JSGFuZGxlIHRvIHRoZSBwYWdlLiBSZXR1cm5lZCBieSBGUERGX0xvYWRQYWdlIGZ1bmN0aW9uLgorICoJCQltb2RpZmllcgkJLQlJbmRpY2F0ZXMgd2hldGhlciB2YXJpb3VzIHZpcnR1YWwga2V5cyBhcmUgZG93bi4gCisgKgkJCXBhZ2VfeAkJLQlTcGVjaWZpZXMgdGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgY3Vyc29yIGluIFBERiB1c2VyIHNwYWNlLiAKKyAqCQkJcGFnZV95CQktCVNwZWNpZmllcyB0aGUgeS1jb29yZGluYXRlIG9mIHRoZSBjdXJzb3IgaW4gUERGIHVzZXIgc3BhY2UuCisgKiBSZXR1cm4gVmFsdWU6CisgKgkJCVRSVUUgaW5kaWNhdGVzIHN1Y2Nlc3M7IG90aGVyd2lzZSBmYWxzZS4KKyAqKi8KK0RMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGT1JNX09uTEJ1dHRvbkRvd24oRlBERl9GT1JNSEFORExFIGhIYW5kbGUsRlBERl9QQUdFIHBhZ2UsIGludCBtb2RpZmllciwgZG91YmxlIHBhZ2VfeCwgZG91YmxlIHBhZ2VfeSk7CisKKy8qKgorICogRnVuY3Rpb246IEZPUk1fT25MQnV0dG9uVXAKKyAqCQkJWW91IGNhbiBjYWxsIHRoaXMgbWVtYmVyIGZ1bmN0aW9uIHdoZW4gdGhlIHVzZXIgcmVsZWFzZXMgdGhlIGxlZnQgbW91c2UgYnV0dG9uLgorICogUGFyYW1ldGVyczoKKyAqCQkJaEhhbmRsZQkJLQlIYW5kbGUgdG8gdGhlIGZvcm0gZmlsbCBtb2R1bGUuIFJldHVybmVkIGJ5IEZQREZET0NfSW5pdEZvcm1GaWxsRW52aXJvdW1lbnQuCisgKgkJCXBhZ2UJCS0JSGFuZGxlIHRvIHRoZSBwYWdlLiBSZXR1cm5lZCBieSBGUERGX0xvYWRQYWdlIGZ1bmN0aW9uLgorICoJCQltb2RpZmllcgktCUluZGljYXRlcyB3aGV0aGVyIHZhcmlvdXMgdmlydHVhbCBrZXlzIGFyZSBkb3duLiAKKyAqCQkJcGFnZV94CQktCVNwZWNpZmllcyB0aGUgeC1jb29yZGluYXRlIG9mIHRoZSBjdXJzb3IgaW4gZGV2aWNlLiAKKyAqCQkJcGFnZV95CQktCVNwZWNpZmllcyB0aGUgeS1jb29yZGluYXRlIG9mIHRoZSBjdXJzb3IgaW4gZGV2aWNlLgorICogUmV0dXJuIFZhbHVlOgorICoJCQlUUlVFIGluZGljYXRlcyBzdWNjZXNzOyBvdGhlcndpc2UgZmFsc2UuCisgKiovCitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRk9STV9PbkxCdXR0b25VcChGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSxGUERGX1BBR0UgcGFnZSwgaW50IG1vZGlmaWVyLCBkb3VibGUgcGFnZV94LCBkb3VibGUgcGFnZV95KTsKKworLyoqCisgKiBGdW5jdGlvbjogRk9STV9PbktleURvd24KKyAqCQkJWW91IGNhbiBjYWxsIHRoaXMgbWVtYmVyIGZ1bmN0aW9uIHdoZW4gYSBub25zeXN0ZW0ga2V5IGlzIHByZXNzZWQuIAorICogUGFyYW1ldGVyczoKKyAqCQkJaEhhbmRsZQkJLQlIYW5kbGUgdG8gdGhlIGZvcm0gZmlsbCBtb2R1bGUuIFJldHVybmVkIGJ5IEZQREZET0NfSW5pdEZvcm1GaWxsRW52aXJvdW1lbnQuCisgKgkJCXBhZ2UJCS0JSGFuZGxlIHRvIHRoZSBwYWdlLiBSZXR1cm5lZCBieSBGUERGX0xvYWRQYWdlIGZ1bmN0aW9uLgorICoJCQluS2V5Q29kZQktCUluZGljYXRlcyB3aGV0aGVyIHZhcmlvdXMgdmlydHVhbCBrZXlzIGFyZSBkb3duLiAKKyAqCQkJbW9kaWZpZXIJLQlDb250YWlucyB0aGUgc2NhbiBjb2RlLCBrZXktdHJhbnNpdGlvbiBjb2RlLCBwcmV2aW91cyBrZXkgc3RhdGUsIGFuZCBjb250ZXh0IGNvZGUuCisgKiBSZXR1cm4gVmFsdWU6CisgKgkJCVRSVUUgaW5kaWNhdGVzIHN1Y2Nlc3M7IG90aGVyd2lzZSBmYWxzZS4KKyAqKi8KK0RMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGT1JNX09uS2V5RG93bihGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSxGUERGX1BBR0UgcGFnZSwgaW50IG5LZXlDb2RlLCBpbnQgbW9kaWZpZXIpOworCisvKioKKyAqIEZ1bmN0aW9uOiBGT1JNX09uS2V5VXAKKyAqCQkJWW91IGNhbiBjYWxsIHRoaXMgbWVtYmVyIGZ1bmN0aW9uIHdoZW4gYSBub25zeXN0ZW0ga2V5IGlzIHJlbGVhc2VkLiAKKyAqIFBhcmFtZXRlcnM6CisgKgkJCWhIYW5kbGUJCS0JSGFuZGxlIHRvIHRoZSBmb3JtIGZpbGwgbW9kdWxlLiBSZXR1cm5lZCBieSBGUERGRE9DX0luaXRGb3JtRmlsbEVudmlyb3VtZW50LgorICoJCQlwYWdlCQktCUhhbmRsZSB0byB0aGUgcGFnZS4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkUGFnZSBmdW5jdGlvbi4KKyAqCQkJbktleUNvZGUJLQlUaGUgdmlydHVhbC1rZXkgY29kZSBvZiB0aGUgZ2l2ZW4ga2V5LgorICoJCQltb2RpZmllcgktCUNvbnRhaW5zIHRoZSBzY2FuIGNvZGUsIGtleS10cmFuc2l0aW9uIGNvZGUsIHByZXZpb3VzIGtleSBzdGF0ZSwgYW5kIGNvbnRleHQgY29kZS4KKyAqIFJldHVybiBWYWx1ZToKKyAqCQkJVFJVRSBpbmRpY2F0ZXMgc3VjY2Vzczsgb3RoZXJ3aXNlIGZhbHNlLgorICoqLworRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZPUk1fT25LZXlVcChGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSxGUERGX1BBR0UgcGFnZSwgaW50IG5LZXlDb2RlLCBpbnQgbW9kaWZpZXIpOworCisvKioKKyAqIEZ1bmN0aW9uOiBGT1JNX09uQ2hhcgorICoJCQlZb3UgY2FuIGNhbGwgdGhpcyBtZW1iZXIgZnVuY3Rpb24gd2hlbiBhIGtleXN0cm9rZSB0cmFuc2xhdGVzIHRvIGEgbm9uc3lzdGVtIGNoYXJhY3Rlci4KKyAqIFBhcmFtZXRlcnM6CisgKgkJCWhIYW5kbGUJCS0JSGFuZGxlIHRvIHRoZSBmb3JtIGZpbGwgbW9kdWxlLiBSZXR1cm5lZCBieSBGUERGRE9DX0luaXRGb3JtRmlsbEVudmlyb3VtZW50LgorICoJCQlwYWdlCQktCUhhbmRsZSB0byB0aGUgcGFnZS4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkUGFnZSBmdW5jdGlvbi4KKyAqCQkJbkNoYXIJCS0JVGhlIGNoYXJhY3RlciBjb2RlIHZhbHVlIG9mIHRoZSBrZXkuICAKKyAqCQkJbW9kaWZpZXIJLQlDb250YWlucyB0aGUgc2NhbiBjb2RlLCBrZXktdHJhbnNpdGlvbiBjb2RlLCBwcmV2aW91cyBrZXkgc3RhdGUsIGFuZCBjb250ZXh0IGNvZGUuCisgKiBSZXR1cm4gVmFsdWU6CisgKgkJCVRSVUUgaW5kaWNhdGVzIHN1Y2Nlc3M7IG90aGVyd2lzZSBmYWxzZS4KKyAqKi8KK0RMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGT1JNX09uQ2hhcihGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSxGUERGX1BBR0UgcGFnZSwgaW50IG5DaGFyLCBpbnQgbW9kaWZpZXIpOworCisvKioKKyAqIEZ1bmN0aW9uOiBGT1JNX0ZvcmNlVG9LaWxsRm9jdXMuCisgKgkJCVlvdSBjYW4gY2FsbCB0aGlzIG1lbWJlciBmdW5jdGlvbiB0byBmb3JjZSB0byBraWxsIHRoZSBmb2N1cyBvZiB0aGUgZm9ybSBmaWVsZCB3aGljaCBnb3QgZm9jdXMuCisgKgkJCUl0IHdvdWxkIGtpbGwgdGhlIGZvY3VzIG9uIHRoZSBmb3JtIGZpZWxkLCBzYXZlIHRoZSB2YWx1ZSBvZiBmb3JtIGZpZWxkIGlmIGl0J3MgY2hhbmdlZCBieSB1c2VyLgorICogUGFyYW1ldGVyczoKKyAqCQkJaEhhbmRsZQkJLQlIYW5kbGUgdG8gdGhlIGZvcm0gZmlsbCBtb2R1bGUuIFJldHVybmVkIGJ5IEZQREZET0NfSW5pdEZvcm1GaWxsRW52aXJvdW1lbnQuCisgKiBSZXR1cm4gVmFsdWU6CisgKgkJCVRSVUUgaW5kaWNhdGVzIHN1Y2Nlc3M7IG90aGVyd2lzZSBmYWxzZS4KKyAqKi8KK0RMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGT1JNX0ZvcmNlVG9LaWxsRm9jdXMoRlBERl9GT1JNSEFORExFIGhIYW5kbGUpOworCisvLyBGaWVsZCBUeXBlcworI2RlZmluZSBGUERGX0ZPUk1GSUVMRF9VTktOT1dOCQkwCQkvLyBVbmtub3duLgorI2RlZmluZSBGUERGX0ZPUk1GSUVMRF9QVVNIQlVUVE9OCTEJCS8vIHB1c2ggYnV0dG9uIHR5cGUuCisjZGVmaW5lIEZQREZfRk9STUZJRUxEX0NIRUNLQk9YCQkyCQkvLyBjaGVjayBib3ggdHlwZS4KKyNkZWZpbmUgRlBERl9GT1JNRklFTERfUkFESU9CVVRUT04JMwkJLy8gcmFkaW8gYnV0dG9uIHR5cGUuCisjZGVmaW5lIEZQREZfRk9STUZJRUxEX0NPTUJPQk9YCQk0CQkvLyBjb21ibyBib3ggdHlwZS4KKyNkZWZpbmUgRlBERl9GT1JNRklFTERfTElTVEJPWAkJNQkJLy8gbGlzdCBib3ggdHlwZS4KKyNkZWZpbmUgRlBERl9GT1JNRklFTERfVEVYVEZJRUxECTYJCS8vIHRleHQgZmllbGQgdHlwZS4KKworLyoqCisgKiBGdW5jdGlvbjogRlBEUGFnZV9IYXNGb3JtRmllbGRBdFBvaW50CisgKgkJCUNoZWNrIHRoZSBmb3JtIGZpbGVkIHBvc2l0aW9uIGJ5IHBvaW50LgorICogUGFyYW1ldGVyczoKKyAqCQkJaEhhbmRsZQkJLQlIYW5kbGUgdG8gdGhlIGZvcm0gZmlsbCBtb2R1bGUuIFJldHVybmVkIGJ5IEZQREZET0NfSW5pdEZvcm1GaWxsRW52aXJvdW1lbnQuCisgKgkJCXBhZ2UJCS0JSGFuZGxlIHRvIHRoZSBwYWdlLiBSZXR1cm5lZCBieSBGUERGX0xvYWRQYWdlIGZ1bmN0aW9uLgorICoJCQlwYWdlX3gJCS0JWCBwb3NpdGlvbiBpbiBQREYgInVzZXIgc3BhY2UiLgorICoJCQlwYWdlX3kJCS0JWSBwb3NpdGlvbiBpbiBQREYgInVzZXIgc3BhY2UiLgorICogUmV0dXJuIFZhbHVlOgorICoJCQlSZXR1cm4gdGhlIHR5cGUgb2YgdGhlIGZvcm1maWxlZDsgLTEgaW5kaWNhdGVzIG5vIGZpZWxkcy4KKyAqKi8KK0RMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERQYWdlX0hhc0Zvcm1GaWVsZEF0UG9pbnQoRlBERl9GT1JNSEFORExFIGhIYW5kbGUsRlBERl9QQUdFIHBhZ2UsZG91YmxlIHBhZ2VfeCwgZG91YmxlIHBhZ2VfeSk7CisKKy8qKgorICogRnVuY3Rpb246IEZQREZfU2V0Rm9ybUZpZWxkSGlnaGxpZ2h0Q29sb3IKKyAqCQkJU2V0IHRoZSBoaWdobGlnaHQgY29sb3Igb2Ygc3BlY2lmaWVkIG9yIGFsbCB0aGUgZm9ybSBmaWVsZHMgaW4gdGhlIGRvY3VtZW50LgorICogUGFyYW1ldGVyczoKKyAqCQkJaEhhbmRsZQkJLQlIYW5kbGUgdG8gdGhlIGZvcm0gZmlsbCBtb2R1bGUuIFJldHVybmVkIGJ5IEZQREZET0NfSW5pdEZvcm1GaWxsRW52aXJvdW1lbnQuCisgKgkJCWRvYwkJCS0JSGFuZGxlIHRvIHRoZSBkb2N1bWVudC4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkRG9jdW1lbnQgZnVuY3Rpb24uCisgKgkJCWZpZWxkVHlwZQktCUEgMzItYml0IGludGVnZXIgaW5kaWNhdGluZyB0aGUgdHlwZSBvZiBhIGZvcm0gZmllbGQoZGVmaW5lZCBhYm92ZSkuCisgKgkJCWNvbG9yCQktCVRoZSBoaWdobGlnaHQgY29sb3Igb2YgdGhlIGZvcm0gZmllbGQuQ29uc3RydWN0ZWQgYnkgMHh4eHJyZ2diYi4KKyAqIFJldHVybiBWYWx1ZToKKyAqCQkJTk9ORS4KKyAqIENvbW1lbnRzOgorICoJCQlXaGVuIHRoZSBwYXJhbWV0ZXIgZmllbGRUeXBlIGlzIHNldCB0byB6ZXJvLCB0aGUgaGlnaGxpZ2h0IGNvbG9yIHdpbGwgYmUgYXBwbGllZCB0byBhbGwgdGhlIGZvcm0gZmllbGRzIGluIHRoZSAKKyAqCQkJZG9jdW1lbnQuCisgKgkJCVBsZWFzZSByZWZyZXNoIHRoZSBjbGllbnQgd2luZG93IHRvIHNob3cgdGhlIGhpZ2hsaWdodCBpbW1lZGlhdGVseSBpZiBuZWNlc3NhcnkuCisgKiovCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZfU2V0Rm9ybUZpZWxkSGlnaGxpZ2h0Q29sb3IoRlBERl9GT1JNSEFORExFIGhIYW5kbGUsIGludCBmaWVsZFR5cGUsIHVuc2lnbmVkIGxvbmcgY29sb3IpOworCisvKioKKyAqIEZ1bmN0aW9uOiBGUERGX1NldEZvcm1GaWVsZEhpZ2hsaWdodEFscGhhCisgKgkJCVNldCB0aGUgdHJhbnNwYXJlbmN5IG9mIHRoZSBmb3JtIGZpZWxkIGhpZ2hsaWdodCBjb2xvciBpbiB0aGUgZG9jdW1lbnQuCisgKiBQYXJhbWV0ZXJzOgorICoJCQloSGFuZGxlCQktCUhhbmRsZSB0byB0aGUgZm9ybSBmaWxsIG1vZHVsZS4gUmV0dXJuZWQgYnkgRlBERkRPQ19Jbml0Rm9ybUZpbGxFbnZpcm91bWVudC4KKyAqCQkJZG9jCQkJLQlIYW5kbGUgdG8gdGhlIGRvY3VtZW50LiBSZXR1cm5lZCBieSBGUERGX0xvYWREb2N1bWVudCBmdW5jdGlvbi4KKyAqCQkJYWxwaGEJCS0JVGhlIHRyYW5zcGFyZW5jeSBvZiB0aGUgZm9ybSBmaWVsZCBoaWdobGlnaHQgY29sb3IuIGJldHdlZW4gMC0yNTUuCisgKiBSZXR1cm4gVmFsdWU6CisgKgkJCU5PTkUuCisgKiovCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZfU2V0Rm9ybUZpZWxkSGlnaGxpZ2h0QWxwaGEoRlBERl9GT1JNSEFORExFIGhIYW5kbGUsIHVuc2lnbmVkIGNoYXIgYWxwaGEpOworCisKKy8qKgorICogRnVuY3Rpb246IEZQREZfUmVtb3ZlRm9ybUZpZWxkSGlnaGxpZ2h0CisgKgkJCVJlbW92ZSB0aGUgZm9ybSBmaWVsZCBoaWdobGlnaHQgY29sb3IgaW4gdGhlIGRvY3VtZW50LgorICogUGFyYW1ldGVyczoKKyAqCQkJaEhhbmRsZQkJLQlIYW5kbGUgdG8gdGhlIGZvcm0gZmlsbCBtb2R1bGUuIFJldHVybmVkIGJ5IEZQREZET0NfSW5pdEZvcm1GaWxsRW52aXJvdW1lbnQuCisgKiBSZXR1cm4gVmFsdWU6CisgKgkJCU5PTkUuCisgKiBDb21tZW50czoKKyAqCQkJUGxlYXNlIHJlZnJlc2ggdGhlIGNsaWVudCB3aW5kb3cgdG8gcmVtb3ZlIHRoZSBoaWdobGlnaHQgaW1tZWRpYXRlbHkgaWYgbmVjZXNzYXJ5LgorICoqLworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX1JlbW92ZUZvcm1GaWVsZEhpZ2hsaWdodChGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSk7CisKKy8qKgorKiBGdW5jdGlvbjogRlBERl9GRkxEcmF3CisqCQkJUmVuZGVyIEZvcm1GZWlsZHMgb24gYSBwYWdlIHRvIGEgZGV2aWNlIGluZGVwZW5kZW50IGJpdG1hcC4gCQkJCisqIFBhcmFtZXRlcnM6CisqCQkJaEhhbmRsZQkJLQlIYW5kbGUgdG8gdGhlIGZvcm0gZmlsbCBtb2R1bGUuIFJldHVybmVkIGJ5IEZQREZET0NfSW5pdEZvcm1GaWxsRW52aXJvdW1lbnQuCisqCQkJYml0bWFwCQktCUhhbmRsZSB0byB0aGUgZGV2aWNlIGluZGVwZW5kZW50IGJpdG1hcCAoYXMgdGhlIG91dHB1dCBidWZmZXIpLgorKgkJCQkJCQlCaXRtYXAgaGFuZGxlIGNhbiBiZSBjcmVhdGVkIGJ5IEZQREZCaXRtYXBfQ3JlYXRlIGZ1bmN0aW9uLgorKgkJCXBhZ2UJCS0JSGFuZGxlIHRvIHRoZSBwYWdlLiBSZXR1cm5lZCBieSBGUERGX0xvYWRQYWdlIGZ1bmN0aW9uLgorKgkJCXN0YXJ0X3gJCS0JTGVmdCBwaXhlbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBhcmVhIGluIHRoZSBkZXZpY2UgY29vcmRpbmF0ZS4KKyoJCQlzdGFydF95CQktCVRvcCBwaXhlbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBhcmVhIGluIHRoZSBkZXZpY2UgY29vcmRpbmF0ZS4KKyoJCQlzaXplX3gJCS0JSG9yaXpvbnRhbCBzaXplIChpbiBwaXhlbHMpIGZvciBkaXNwbGF5aW5nIHRoZSBwYWdlLgorKgkJCXNpemVfeQkJLQlWZXJ0aWNhbCBzaXplIChpbiBwaXhlbHMpIGZvciBkaXNwbGF5aW5nIHRoZSBwYWdlLgorKgkJCXJvdGF0ZQkJLQlQYWdlIG9yaWVudGF0aW9uOiAwIChub3JtYWwpLCAxIChyb3RhdGVkIDkwIGRlZ3JlZXMgY2xvY2t3aXNlKSwKKyoJCQkJCQkJCTIgKHJvdGF0ZWQgMTgwIGRlZ3JlZXMpLCAzIChyb3RhdGVkIDkwIGRlZ3JlZXMgY291bnRlci1jbG9ja3dpc2UpLgorKgkJCWZsYWdzCQktCTAgZm9yIG5vcm1hbCBkaXNwbGF5LCBvciBjb21iaW5hdGlvbiBvZiBmbGFncyBkZWZpbmVkIGFib3ZlLiAKKyogUmV0dXJuIFZhbHVlOgorKgkJCU5vbmUuCisqIENvbW1lbnRzOiAKKyoJCQlUaGlzIG1ldGhvZCBpcyBkZXNpZ25lZCB0byBvbmx5IHJlbmRlciBhbm5vdGF0aW9ucyBhbmQgRm9ybUZpZWxkcyBvbiB0aGUgcGFnZS4gCisqCQkJV2l0aG91dCBGUERGX0FOTk9UIHNwZWNpZmllZCBmb3IgZmxhZ3MsIFJlbmRlcmluZyBmdW5jdGlvbnMgc3VjaCBhcyBGUERGX1JlbmRlclBhZ2VCaXRtYXAgb3IgRlBERl9SZW5kZXJQYWdlQml0bWFwX1N0YXJ0IHdpbGwgb25seSByZW5kZXIgcGFnZSBjb250ZW50cyh3aXRob3V0IGFubm90YXRpb25zKSB0byBhIGJpdG1hcC4KKyoJCQlJbiBvcmRlciB0byBpbXBsZW1lbnQgdGhlIEZvcm1GaWxsIGZ1bmN0aW9ucyxJbXBsZW1lbnRhdGlvbiBzaG91bGQgY2FsbCB0aGlzIG1ldGhvZCBhZnRlciByZW5kZXJpbmcgZnVuY3Rpb25zIGZpbmlzaCByZW5kZXJpbmcgdGhlIHBhZ2UgY29udGVudHMuCisqKi8KK0RMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERl9GRkxEcmF3KEZQREZfRk9STUhBTkRMRSBoSGFuZGxlLEZQREZfQklUTUFQIGJpdG1hcCwgRlBERl9QQUdFIHBhZ2UsIGludCBzdGFydF94LCBpbnQgc3RhcnRfeSwgCisJCQkJCQlpbnQgc2l6ZV94LCBpbnQgc2l6ZV95LCBpbnQgcm90YXRlLCBpbnQgZmxhZ3MpOworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9OworI2VuZGlmCisKKyNlbmRpZiAvL19GUERGT1JNRklMTF9ICisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9mcGRmb29tLmggYi9mcGRmc2RrL2luY2x1ZGUvZnBkZm9vbS5oCmluZGV4IDYzOGIwMTIuLmRkMTRiNzQgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9mcGRmb29tLmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2ZwZGZvb20uaApAQCAtMSw2MSArMSw2MSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlBERk9PTV9IXw0KLSNkZWZpbmUgX0ZQREZPT01fSF8NCi0NCi0jaWZuZGVmIF9GUERGVklFV19IXw0KLSNpbmNsdWRlICJmcGRmdmlldy5oIg0KLSNlbmRpZg0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLWV4dGVybiAiQyIgew0KLSNlbmRpZg0KLQ0KLXR5cGVkZWYJc3RydWN0IF9PT01fSU5GTw0KLXsNCi0JLyoqDQotCSogVmVyc2lvbiBudW1iZXIgb2YgdGhlIGludGVyZmFjZS4gQ3VycmVudGx5IG11c3QgYmUgMS4NCi0JKiovDQotCWludCB2ZXJzaW9uOw0KLQkNCi0JLyoqIA0KLQkqIE1ldGhvZDogRlNES19PT01fSGFuZGxlcg0KLQkqCQkJIE91dC1PZi1NZW1vcnkgaGFuZGxpbmcgZnVuY3Rpb24uDQotCSogSW50ZXJmYWNlIFZlcnNpb246DQotCSoJCQkxDQotCSogSW1wbGVtZW50YXRpb24gUmVxdWlyZWQ6DQotCSoJCQlZZXMNCi0JKiBQYXJhbWV0ZXJzOg0KLQkqCQlwVGhpcwkJLQlQb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0dXJlIGl0c2VsZi4NCi0JKiAJUmV0dXJuIHZhbHVlOg0KLQkqIAkJTm9uZS4NCi0JKiAqLw0KLQ0KLQl2b2lkKCpGU0RLX09PTV9IYW5kbGVyKShfT09NX0lORk8qIHBUaGlzKTsNCi19T09NX0lORk87DQotDQotDQotLyoqDQotICogRnVuY3Rpb246IEZTREtfU2V0T09NSGFuZGxlcg0KLSAqCQkJIFNldHVwIEEgT3V0LU9mLU1lbW9yeSBoYW5kbGVyIGZvciBmb3hpdCBzZGsuIA0KLSAqIFBhcmFtZXRlcnM6DQotICoJCQlvb21JbmZvCQktCVBvaW50ZXIgdG8gYSBPT01fSU5GTyBzdHJ1Y3R1cmUuDQotICogUmV0dXJuIFZhbHVlOg0KLSAqCQkJVFJVRSBtZWFucyBzdWNjZXNzZnVsLiBGQUxTRSBtZWFucyBmYWlscy4gDQotICoqLw0KLQ0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGU0RLX1NldE9PTUhhbmRsZXIoT09NX0lORk8qIG9vbUluZm8pOw0KLQ0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX07DQotI2VuZGlmDQotDQotDQotDQotDQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlBERk9PTV9IXworI2RlZmluZSBfRlBERk9PTV9IXworCisjaWZuZGVmIF9GUERGVklFV19IXworI2luY2x1ZGUgImZwZGZ2aWV3LmgiCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit0eXBlZGVmCXN0cnVjdCBfT09NX0lORk8KK3sKKwkvKioKKwkqIFZlcnNpb24gbnVtYmVyIG9mIHRoZSBpbnRlcmZhY2UuIEN1cnJlbnRseSBtdXN0IGJlIDEuCisJKiovCisJaW50IHZlcnNpb247CisJCisJLyoqIAorCSogTWV0aG9kOiBGU0RLX09PTV9IYW5kbGVyCisJKgkJCSBPdXQtT2YtTWVtb3J5IGhhbmRsaW5nIGZ1bmN0aW9uLgorCSogSW50ZXJmYWNlIFZlcnNpb246CisJKgkJCTEKKwkqIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOgorCSoJCQlZZXMKKwkqIFBhcmFtZXRlcnM6CisJKgkJcFRoaXMJCS0JUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHN0cnVjdHVyZSBpdHNlbGYuCisJKiAJUmV0dXJuIHZhbHVlOgorCSogCQlOb25lLgorCSogKi8KKworCXZvaWQoKkZTREtfT09NX0hhbmRsZXIpKF9PT01fSU5GTyogcFRoaXMpOworfU9PTV9JTkZPOworCisKKy8qKgorICogRnVuY3Rpb246IEZTREtfU2V0T09NSGFuZGxlcgorICoJCQkgU2V0dXAgQSBPdXQtT2YtTWVtb3J5IGhhbmRsZXIgZm9yIGZveGl0IHNkay4gCisgKiBQYXJhbWV0ZXJzOgorICoJCQlvb21JbmZvCQktCVBvaW50ZXIgdG8gYSBPT01fSU5GTyBzdHJ1Y3R1cmUuCisgKiBSZXR1cm4gVmFsdWU6CisgKgkJCVRSVUUgbWVhbnMgc3VjY2Vzc2Z1bC4gRkFMU0UgbWVhbnMgZmFpbHMuIAorICoqLworCitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlNES19TZXRPT01IYW5kbGVyKE9PTV9JTkZPKiBvb21JbmZvKTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK307CisjZW5kaWYKKworCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvZnBkZnBwby5oIGIvZnBkZnNkay9pbmNsdWRlL2ZwZGZwcG8uaAppbmRleCA1Zjc3YjViLi41N2ZkNjM4IDEwMDY0NAotLS0gYS9mcGRmc2RrL2luY2x1ZGUvZnBkZnBwby5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9mcGRmcHBvLmgKQEAgLTEsMzQgKzEsMzQgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0ZQREZQUE9fSF8NCi0jZGVmaW5lIF9GUERGUFBPX0hfDQotDQotI2luY2x1ZGUgImZwZGZ2aWV3LmgiDQotDQotLy8gRnVuY3Rpb246IEZQREZfSW1wb3J0UGFnZXMNCi0vLwkJCUltcG9ydCBzb21lIHBhZ2VzIHRvIGEgUERGIGRvY3VtZW50Lg0KLS8vIFBhcmFtZXRlcnM6CQ0KLS8vCQkJZGVzdF9kb2MJLQlUaGUgZGVzdGluYXRpb24gZG9jdW1lbnQgd2hpY2ggYWRkIHRoZSBwYWdlcy4NCi0vLwkJCXNyY19kb2MJCS0JQSBkb2N1bWVudCB0byBiZSBpbXBvcnRlZC4NCi0vLwkJCXBhZ2VyYW5nZQktCUEgcGFnZSByYW5nZSBzdHJpbmcsIFN1Y2ggYXMgIjEsMyw1LTciLiANCi0vLwkJCQkJCQlJZiB0aGlzIHBhcmFtZXRlciBpcyBOVUxMLCBpdCB3b3VsZCBpbXBvcnQgYWxsIHBhZ2VzIGluIHNyY19kb2MuDQotLy8JCQlpbmRleAkJLQlUaGUgcGFnZSBpbmRleCB3YW50ZWQgdG8gaW5zZXJ0IGZyb20uCQ0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCVRSVUUgZm9yIHN1Y2NlZWQsIEZBTFNFIGZvciBGYWlsZWQuCQ0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGX0ltcG9ydFBhZ2VzKEZQREZfRE9DVU1FTlQgZGVzdF9kb2MsRlBERl9ET0NVTUVOVCBzcmNfZG9jLCBGUERGX0JZVEVTVFJJTkcgcGFnZXJhbmdlLCBpbnQgaW5kZXgpOw0KLQ0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGX0NvcHlWaWV3ZXJQcmVmZXJlbmNlcw0KLS8vCQkJQ29weSB0aGUgdmlld2VyIHByZWZlcmVuY2VzIGZyb20gb25lIFBERiBkb2N1bWVudCB0byBhbm90aGVyLiNlbmRpZg0KLS8vIFBhcmFtZXRlcnM6CQ0KLS8vCQkJZGVzdF9kb2MJLQlIYW5kbGUgdG8gZG9jdW1lbnQgdG8gd3JpdGUgdGhlIHZpZXdlciBwcmVmZXJlbmNlcyB0by4NCi0vLwkJCXNyY19kb2MJCS0JSGFuZGxlIHRvIGRvY3VtZW50IHdpdGggdGhlIHZpZXdlciBwcmVmZXJlbmNlcy4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlUUlVFIGZvciBzdWNjZXNzLCBGQUxTRSBmb3IgZmFpbHVyZS4NCi1ETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERl9Db3B5Vmlld2VyUHJlZmVyZW5jZXMoRlBERl9ET0NVTUVOVCBkZXN0X2RvYywgRlBERl9ET0NVTUVOVCBzcmNfZG9jKTsNCi0jZW5kaWYNCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9GUERGUFBPX0hfCisjZGVmaW5lIF9GUERGUFBPX0hfCisKKyNpbmNsdWRlICJmcGRmdmlldy5oIgorCisvLyBGdW5jdGlvbjogRlBERl9JbXBvcnRQYWdlcworLy8JCQlJbXBvcnQgc29tZSBwYWdlcyB0byBhIFBERiBkb2N1bWVudC4KKy8vIFBhcmFtZXRlcnM6CQorLy8JCQlkZXN0X2RvYwktCVRoZSBkZXN0aW5hdGlvbiBkb2N1bWVudCB3aGljaCBhZGQgdGhlIHBhZ2VzLgorLy8JCQlzcmNfZG9jCQktCUEgZG9jdW1lbnQgdG8gYmUgaW1wb3J0ZWQuCisvLwkJCXBhZ2VyYW5nZQktCUEgcGFnZSByYW5nZSBzdHJpbmcsIFN1Y2ggYXMgIjEsMyw1LTciLiAKKy8vCQkJCQkJCUlmIHRoaXMgcGFyYW1ldGVyIGlzIE5VTEwsIGl0IHdvdWxkIGltcG9ydCBhbGwgcGFnZXMgaW4gc3JjX2RvYy4KKy8vCQkJaW5kZXgJCS0JVGhlIHBhZ2UgaW5kZXggd2FudGVkIHRvIGluc2VydCBmcm9tLgkKKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJVFJVRSBmb3Igc3VjY2VlZCwgRkFMU0UgZm9yIEZhaWxlZC4JCitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERl9JbXBvcnRQYWdlcyhGUERGX0RPQ1VNRU5UIGRlc3RfZG9jLEZQREZfRE9DVU1FTlQgc3JjX2RvYywgRlBERl9CWVRFU1RSSU5HIHBhZ2VyYW5nZSwgaW50IGluZGV4KTsKKworCisvLyBGdW5jdGlvbjogRlBERl9Db3B5Vmlld2VyUHJlZmVyZW5jZXMKKy8vCQkJQ29weSB0aGUgdmlld2VyIHByZWZlcmVuY2VzIGZyb20gb25lIFBERiBkb2N1bWVudCB0byBhbm90aGVyLiNlbmRpZgorLy8gUGFyYW1ldGVyczoJCisvLwkJCWRlc3RfZG9jCS0JSGFuZGxlIHRvIGRvY3VtZW50IHRvIHdyaXRlIHRoZSB2aWV3ZXIgcHJlZmVyZW5jZXMgdG8uCisvLwkJCXNyY19kb2MJCS0JSGFuZGxlIHRvIGRvY3VtZW50IHdpdGggdGhlIHZpZXdlciBwcmVmZXJlbmNlcy4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJVFJVRSBmb3Igc3VjY2VzcywgRkFMU0UgZm9yIGZhaWx1cmUuCitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERl9Db3B5Vmlld2VyUHJlZmVyZW5jZXMoRlBERl9ET0NVTUVOVCBkZXN0X2RvYywgRlBERl9ET0NVTUVOVCBzcmNfZG9jKTsKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvZnBkZnNhdmUuaCBiL2ZwZGZzZGsvaW5jbHVkZS9mcGRmc2F2ZS5oCmluZGV4IGJlMzQwZjQuLmE2OTQ1NjAgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9mcGRmc2F2ZS5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9mcGRmc2F2ZS5oCkBAIC0xLDgxICsxLDgxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GUERGU0FWRV9IXw0KLSNkZWZpbmUgX0ZQREZTQVZFX0hfDQotDQotI2luY2x1ZGUgImZwZGZ2aWV3LmgiDQotDQotI2lmZGVmIF9fY3BsdXNwbHVzDQotZXh0ZXJuICJDIiB7DQotI2VuZGlmDQotDQotDQotLy8gU3RydWN0dXJlIGZvciBjdXN0b20gZmlsZSB3cml0ZQ0KLXN0cnVjdCBGUERGX0ZJTEVXUklURXsNCi0NCi0JLy8NCi0JLy9WZXJzaW9uIG51bWJlciBvZiB0aGUgaW50ZXJmYWNlLiBDdXJyZW50bHkgbXVzdCBiZSAxLg0KLQkvLw0KLQlpbnQgdmVyc2lvbjsNCi0NCi0JLy8gDQotCS8vIE1ldGhvZDogV3JpdGVCbG9jaw0KLQkvLwkJCU91dHB1dCBhIGJsb2NrIG9mIGRhdGEgaW4geW91ciBjdXN0b20gd2F5Lg0KLQkvLyBJbnRlcmZhY2UgVmVyc2lvbjoNCi0JLy8JCQkxDQotCS8vIEltcGxlbWVudGF0aW9uIFJlcXVpcmVkOg0KLQkvLwkJCVllcw0KLQkvLyBDb21tZW50czoNCi0JLy8JCQlDYWxsZWQgYnkgZnVuY3Rpb24gRlBERl9TYXZlRG9jdW1lbnQNCi0JLy8gUGFyYW1ldGVyczoNCi0JLy8JCQlwVGhpcwkJLQlQb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmDQotCS8vCQkJcERhdGEJCS0JUG9pbnRlciB0byBhIGJ1ZmZlciB0byBvdXRwdXQNCi0JLy8JCQlzaXplCQktCVRoZSBzaXplIG9mIHRoZSBidWZmZXIuDQotCS8vIFJldHVybiB2YWx1ZToNCi0JLy8JCQlTaG91bGQgYmUgbm9uLXplcm8gaWYgc3VjY2Vzc2Z1bCwgemVybyBmb3IgZXJyb3IuDQotCS8vDQotCWludAkJKCpXcml0ZUJsb2NrKSggRlBERl9GSUxFV1JJVEUqIHBUaGlzLCBjb25zdCB2b2lkKiBwRGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKTsNCi0NCi19Ow0KLQ0KLQ0KLS8qKiBAYnJpZWYgSW5jcmVtZW50YWwuICovDQotI2RlZmluZSBGUERGX0lOQ1JFTUVOVEFMCQkxDQotLyoqIEBicmllZiBObyBJbmNyZW1lbnRhbC4gKi8NCi0jZGVmaW5lIEZQREZfTk9fSU5DUkVNRU5UQUwJCTINCi0NCi0NCi0vLyBGdW5jdGlvbjogRlBERl9TYXZlQXNDb3B5DQotLy8JCQlTYXZlcyB0aGUgY29weSBvZiBzcGVjaWZpZWQgZG9jdW1lbnQgaW4gY3VzdG9tIHdheS4NCi0vLyBQYXJhbWV0ZXJzOgkNCi0vLwkJCWRvY3VtZW50CQktCUhhbmRsZSB0byBkb2N1bWVudC4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkRG9jdW1lbnQgYW5kIEZQREZfQ3JlYXRlTmV3RG9jdW1lbnQuDQotLy8JCQlwRmlsZVdyaXRlCQktCUEgcG9pbnRlciB0byBhIGN1c3RvbSBmaWxlIHdyaXRlIHN0cnVjdHVyZS4NCi0vLwkJCWZsYWdzCQkJLQlUaGUgY3JlYXRpbmcgZmxhZ3MuDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJVFJVRSBmb3Igc3VjY2VlZCwgRkFMU0UgZm9yIGZhaWxlZC4NCi0vLw0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGX1NhdmVBc0NvcHkoCUZQREZfRE9DVU1FTlQgZG9jdW1lbnQsRlBERl9GSUxFV1JJVEUgKiBwRmlsZVdyaXRlLA0KLQkJCQkJCQkJCQkJCUZQREZfRFdPUkQgZmxhZ3MgKTsNCi0NCi0vLyBGdW5jdGlvbjogRlBERl9TYXZlV2l0aFZlcnNpb24NCi0vLwkJCVNhbWUgYXMgZnVuY3Rpb24gOjpGUERGX1NhdmVBc0NvcHksIGV4Y2VwdCB0aGUgZmlsZSB2ZXJzaW9uIG9mIHRoZSBzYXZlZCBkb2N1bWVudCBjb3VsZCBiZSBzcGVjaWZpZWQgYnkgdXNlci4NCi0vLyBQYXJhbWV0ZXJzOgkNCi0vLwkJCWRvY3VtZW50CQktCUhhbmRsZSB0byBkb2N1bWVudC4NCi0vLwkJCXBGaWxlV3JpdGUJCS0JQSBwb2ludGVyIHRvIGEgY3VzdG9tIGZpbGUgd3JpdGUgc3RydWN0dXJlLg0KLS8vCQkJZmxhZ3MJCQktCVRoZSBjcmVhdGluZyBmbGFncy4NCi0vLwkJCWZpbGVWZXJzaW9uCQktCVRoZSBQREYgZmlsZSB2ZXJzaW9uLiBGaWxlIHZlcnNpb246IDE0IGZvciAxLjQsIDE1IGZvciAxLjUsIC4uLg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCVRSVUUgaWYgc3VjY2VlZCwgRkFMU0UgaWYgZmFpbGVkLg0KLS8vDQotRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZfU2F2ZVdpdGhWZXJzaW9uKEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsRlBERl9GSUxFV1JJVEUgKiBwRmlsZVdyaXRlLA0KLQlGUERGX0RXT1JEIGZsYWdzLCBpbnQgZmlsZVZlcnNpb24pOw0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX07DQotI2VuZGlmDQotDQotI2VuZGlmIC8vX0ZQREZTQVZFX0hfDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlBERlNBVkVfSF8KKyNkZWZpbmUgX0ZQREZTQVZFX0hfCisKKyNpbmNsdWRlICJmcGRmdmlldy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworLy8gU3RydWN0dXJlIGZvciBjdXN0b20gZmlsZSB3cml0ZQorc3RydWN0IEZQREZfRklMRVdSSVRFeworCisJLy8KKwkvL1ZlcnNpb24gbnVtYmVyIG9mIHRoZSBpbnRlcmZhY2UuIEN1cnJlbnRseSBtdXN0IGJlIDEuCisJLy8KKwlpbnQgdmVyc2lvbjsKKworCS8vIAorCS8vIE1ldGhvZDogV3JpdGVCbG9jaworCS8vCQkJT3V0cHV0IGEgYmxvY2sgb2YgZGF0YSBpbiB5b3VyIGN1c3RvbSB3YXkuCisJLy8gSW50ZXJmYWNlIFZlcnNpb246CisJLy8JCQkxCisJLy8gSW1wbGVtZW50YXRpb24gUmVxdWlyZWQ6CisJLy8JCQlZZXMKKwkvLyBDb21tZW50czoKKwkvLwkJCUNhbGxlZCBieSBmdW5jdGlvbiBGUERGX1NhdmVEb2N1bWVudAorCS8vIFBhcmFtZXRlcnM6CisJLy8JCQlwVGhpcwkJLQlQb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgaXRzZWxmCisJLy8JCQlwRGF0YQkJLQlQb2ludGVyIHRvIGEgYnVmZmVyIHRvIG91dHB1dAorCS8vCQkJc2l6ZQkJLQlUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyLgorCS8vIFJldHVybiB2YWx1ZToKKwkvLwkJCVNob3VsZCBiZSBub24temVybyBpZiBzdWNjZXNzZnVsLCB6ZXJvIGZvciBlcnJvci4KKwkvLworCWludAkJKCpXcml0ZUJsb2NrKSggRlBERl9GSUxFV1JJVEUqIHBUaGlzLCBjb25zdCB2b2lkKiBwRGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworfTsKKworCisvKiogQGJyaWVmIEluY3JlbWVudGFsLiAqLworI2RlZmluZSBGUERGX0lOQ1JFTUVOVEFMCQkxCisvKiogQGJyaWVmIE5vIEluY3JlbWVudGFsLiAqLworI2RlZmluZSBGUERGX05PX0lOQ1JFTUVOVEFMCQkyCisKKworLy8gRnVuY3Rpb246IEZQREZfU2F2ZUFzQ29weQorLy8JCQlTYXZlcyB0aGUgY29weSBvZiBzcGVjaWZpZWQgZG9jdW1lbnQgaW4gY3VzdG9tIHdheS4KKy8vIFBhcmFtZXRlcnM6CQorLy8JCQlkb2N1bWVudAkJLQlIYW5kbGUgdG8gZG9jdW1lbnQuIFJldHVybmVkIGJ5IEZQREZfTG9hZERvY3VtZW50IGFuZCBGUERGX0NyZWF0ZU5ld0RvY3VtZW50LgorLy8JCQlwRmlsZVdyaXRlCQktCUEgcG9pbnRlciB0byBhIGN1c3RvbSBmaWxlIHdyaXRlIHN0cnVjdHVyZS4KKy8vCQkJZmxhZ3MJCQktCVRoZSBjcmVhdGluZyBmbGFncy4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJVFJVRSBmb3Igc3VjY2VlZCwgRkFMU0UgZm9yIGZhaWxlZC4KKy8vCitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERl9TYXZlQXNDb3B5KAlGUERGX0RPQ1VNRU5UIGRvY3VtZW50LEZQREZfRklMRVdSSVRFICogcEZpbGVXcml0ZSwKKwkJCQkJCQkJCQkJCUZQREZfRFdPUkQgZmxhZ3MgKTsKKworLy8gRnVuY3Rpb246IEZQREZfU2F2ZVdpdGhWZXJzaW9uCisvLwkJCVNhbWUgYXMgZnVuY3Rpb24gOjpGUERGX1NhdmVBc0NvcHksIGV4Y2VwdCB0aGUgZmlsZSB2ZXJzaW9uIG9mIHRoZSBzYXZlZCBkb2N1bWVudCBjb3VsZCBiZSBzcGVjaWZpZWQgYnkgdXNlci4KKy8vIFBhcmFtZXRlcnM6CQorLy8JCQlkb2N1bWVudAkJLQlIYW5kbGUgdG8gZG9jdW1lbnQuCisvLwkJCXBGaWxlV3JpdGUJCS0JQSBwb2ludGVyIHRvIGEgY3VzdG9tIGZpbGUgd3JpdGUgc3RydWN0dXJlLgorLy8JCQlmbGFncwkJCS0JVGhlIGNyZWF0aW5nIGZsYWdzLgorLy8JCQlmaWxlVmVyc2lvbgkJLQlUaGUgUERGIGZpbGUgdmVyc2lvbi4gRmlsZSB2ZXJzaW9uOiAxNCBmb3IgMS40LCAxNSBmb3IgMS41LCAuLi4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJVFJVRSBpZiBzdWNjZWVkLCBGQUxTRSBpZiBmYWlsZWQuCisvLworRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZfU2F2ZVdpdGhWZXJzaW9uKEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsRlBERl9GSUxFV1JJVEUgKiBwRmlsZVdyaXRlLAorCUZQREZfRFdPUkQgZmxhZ3MsIGludCBmaWxlVmVyc2lvbik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfTsKKyNlbmRpZgorCisjZW5kaWYgLy9fRlBERlNBVkVfSF8KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9mcGRmdGV4dC5oIGIvZnBkZnNkay9pbmNsdWRlL2ZwZGZ0ZXh0LmgKaW5kZXggZjg2MmRiNC4uOGI4OTc3OSAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2ZwZGZ0ZXh0LmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2ZwZGZ0ZXh0LmgKQEAgLTEsMzE2ICsxLDMxNiBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlBERlRFWFRfSF8NCi0jZGVmaW5lIF9GUERGVEVYVF9IXw0KLQ0KLSNpbmNsdWRlICJmcGRmdmlldy5oIg0KLQ0KLS8vIEV4cG9ydGVkIEZ1bmN0aW9ucw0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLWV4dGVybiAiQyIgew0KLSNlbmRpZg0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGVGV4dF9Mb2FkUGFnZQ0KLS8vCQkJUHJlcGFyZSBpbmZvcm1hdGlvbiBhYm91dCBhbGwgY2hhcmFjdGVycyBpbiBhIHBhZ2UuDQotLy8gUGFyYW1ldGVyczogDQotLy8JCQlwYWdlCS0JSGFuZGxlIHRvIHRoZSBwYWdlLiBSZXR1cm5lZCBieSBGUERGX0xvYWRQYWdlIGZ1bmN0aW9uIChpbiBGUERGVklFVyBtb2R1bGUpLgkNCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlBIGhhbmRsZSB0byB0aGUgdGV4dCBwYWdlIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4NCi0vLwkJCU5VTEwgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuDQotLy8gQ29tbWVudHM6DQotLy8JCQlBcHBsaWNhdGlvbiBtdXN0IGNhbGwgRlBERlRleHRfQ2xvc2VQYWdlIHRvIHJlbGVhc2UgdGhlIHRleHQgcGFnZSBpbmZvcm1hdGlvbi4NCi0vLwkJCUlmIHlvdSBkb24ndCBwdXJjaGFzZSBUZXh0IE1vZHVsZSAsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gTlVMTC4NCi0vLwkNCi1ETExFWFBPUlQgRlBERl9URVhUUEFHRQlTVERDQUxMIEZQREZUZXh0X0xvYWRQYWdlKEZQREZfUEFHRSBwYWdlKTsNCi0NCi0vLyBGdW5jdGlvbjogRlBERlRleHRfQ2xvc2VQYWdlDQotLy8JCQlSZWxlYXNlIGFsbCByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciBhIHRleHQgcGFnZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuDQotLy8gUGFyYW1ldGVyczogDQotLy8JCQl0ZXh0X3BhZ2UJLQlIYW5kbGUgdG8gYSB0ZXh0IHBhZ2UgaW5mb3JtYXRpb24gc3RydWN0dXJlLiBSZXR1cm5lZCBieSBGUERGVGV4dF9Mb2FkUGFnZSBmdW5jdGlvbi4NCi0vLyBSZXR1cm4gVmFsdWU6DQotLy8JCQlOb25lLg0KLS8vDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGVGV4dF9DbG9zZVBhZ2UoRlBERl9URVhUUEFHRSB0ZXh0X3BhZ2UpOw0KLQkNCi0vLyBGdW5jdGlvbjogRlBERlRleHRfQ291bnRDaGFycw0KLS8vCQkJR2V0IG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGEgcGFnZS4NCi0vLyBQYXJhbWV0ZXJzOiANCi0vLwkJCXRleHRfcGFnZQktCUhhbmRsZSB0byBhIHRleHQgcGFnZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuIFJldHVybmVkIGJ5IEZQREZUZXh0X0xvYWRQYWdlIGZ1bmN0aW9uLg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCU51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBwYWdlLiBSZXR1cm4gLTEgZm9yIGVycm9yLiANCi0vLwkJCUdlbmVyYXRlZCBjaGFyYWN0ZXJzLCBsaWtlIGFkZGl0aW9uYWwgc3BhY2UgY2hhcmFjdGVycywgbmV3IGxpbmUgY2hhcmFjdGVycywgYXJlIGFsc28gY291bnRlZC4NCi0vLyBDb21tZW50czoNCi0vLwkJCUNoYXJhY3RlcnMgaW4gYSBwYWdlIGZvcm0gYSAic3RyZWFtIiwgaW5zaWRlIHRoZSBzdHJlYW0sIGVhY2ggY2hhcmFjdGVyIGhhcyBhbiBpbmRleC4NCi0vLwkJCVdlIHdpbGwgdXNlIHRoZSBpbmRleCBwYXJhbWV0ZXJzIGluIG1hbnkgb2YgRlBERlRFWFQgZnVuY3Rpb25zLiBUaGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBwYWdlDQotLy8JCQloYXMgYW4gaW5kZXggdmFsdWUgb2YgemVyby4NCi0vLw0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGVGV4dF9Db3VudENoYXJzKEZQREZfVEVYVFBBR0UgdGV4dF9wYWdlKTsNCi0NCi0vLyBGdW5jdGlvbjogRlBERlRleHRfR2V0VW5pY29kZQ0KLS8vCQkJR2V0IFVuaWNvZGUgb2YgYSBjaGFyYWN0ZXIgaW4gYSBwYWdlLg0KLS8vIFBhcmFtZXRlcnM6IA0KLS8vCQkJdGV4dF9wYWdlCS0JSGFuZGxlIHRvIGEgdGV4dCBwYWdlIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gUmV0dXJuZWQgYnkgRlBERlRleHRfTG9hZFBhZ2UgZnVuY3Rpb24uDQotLy8JCQlpbmRleAkJLQlaZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIuDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJVGhlIFVuaWNvZGUgb2YgdGhlIHBhcnRpY3VsYXIgY2hhcmFjdGVyLg0KLS8vCQkJSWYgYSBjaGFyYWN0ZXIgaXMgbm90IGVuY29kZWQgaW4gVW5pY29kZSBhbmQgRm94aXQgZW5naW5lIGNhbid0IGNvbnZlcnQgdG8gVW5pY29kZSwNCi0vLwkJCXRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB6ZXJvLg0KLS8vDQotRExMRVhQT1JUIHVuc2lnbmVkIGludCBTVERDQUxMIEZQREZUZXh0X0dldFVuaWNvZGUoRlBERl9URVhUUEFHRSB0ZXh0X3BhZ2UsIGludCBpbmRleCk7DQotDQotLy8gRnVuY3Rpb246IEZQREZUZXh0X0dldEZvbnRTaXplDQotLy8JCQlHZXQgdGhlIGZvbnQgc2l6ZSBvZiBhIHBhcnRpY3VsYXIgY2hhcmFjdGVyLg0KLS8vIFBhcmFtZXRlcnM6IA0KLS8vCQkJdGV4dF9wYWdlCS0JSGFuZGxlIHRvIGEgdGV4dCBwYWdlIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gUmV0dXJuZWQgYnkgRlBERlRleHRfTG9hZFBhZ2UgZnVuY3Rpb24uDQotLy8JCQlpbmRleAkJLQlaZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIuDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJVGhlIGZvbnQgc2l6ZSBvZiB0aGUgcGFydGljdWxhciBjaGFyYWN0ZXIsIG1lYXN1cmVkIGluIHBvaW50cyAoYWJvdXQgMS83MiBpbmNoKS4NCi0vLwkJCVRoaXMgaXMgdGhlIHR5cG9ncmFwaGljIHNpemUgb2YgdGhlIGZvbnQgKHNvIGNhbGxlZCAiZW0gc2l6ZSIpLg0KLS8vDQotRExMRVhQT1JUIGRvdWJsZSBTVERDQUxMIEZQREZUZXh0X0dldEZvbnRTaXplKEZQREZfVEVYVFBBR0UgdGV4dF9wYWdlLCBpbnQgaW5kZXgpOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGVGV4dF9HZXRDaGFyQm94DQotLy8JCQlHZXQgYm91bmRpbmcgYm94IG9mIGEgcGFydGljdWxhciBjaGFyYWN0ZXIuDQotLy8gUGFyYW1ldGVyczogDQotLy8JCQl0ZXh0X3BhZ2UJLQlIYW5kbGUgdG8gYSB0ZXh0IHBhZ2UgaW5mb3JtYXRpb24gc3RydWN0dXJlLiBSZXR1cm5lZCBieSBGUERGVGV4dF9Mb2FkUGFnZSBmdW5jdGlvbi4NCi0vLwkJCWluZGV4CQktCVplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGNoYXJhY3Rlci4NCi0vLwkJCWxlZnQJCS0JUG9pbnRlciB0byBhIGRvdWJsZSBudW1iZXIgcmVjZWl2aW5nIGxlZnQgcG9zaXRpb24gb2YgdGhlIGNoYXJhY3RlciBib3guDQotLy8JCQlyaWdodAkJLQlQb2ludGVyIHRvIGEgZG91YmxlIG51bWJlciByZWNlaXZpbmcgcmlnaHQgcG9zaXRpb24gb2YgdGhlIGNoYXJhY3RlciBib3guDQotLy8JCQlib3R0b20JCS0JUG9pbnRlciB0byBhIGRvdWJsZSBudW1iZXIgcmVjZWl2aW5nIGJvdHRvbSBwb3NpdGlvbiBvZiB0aGUgY2hhcmFjdGVyIGJveC4NCi0vLwkJCXRvcAkJCS0JUG9pbnRlciB0byBhIGRvdWJsZSBudW1iZXIgcmVjZWl2aW5nIHRvcCBwb3NpdGlvbiBvZiB0aGUgY2hhcmFjdGVyIGJveC4NCi0vLyBSZXR1cm4gVmFsdWU6DQotLy8JCQlOb25lLg0KLS8vIENvbW1lbnRzOg0KLS8vCQkJQWxsIHBvc2l0aW9ucyBhcmUgbWVhc3VyZWQgaW4gUERGICJ1c2VyIHNwYWNlIi4NCi0vLw0KLURMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERlRleHRfR2V0Q2hhckJveChGUERGX1RFWFRQQUdFIHRleHRfcGFnZSwgaW50IGluZGV4LCBkb3VibGUqIGxlZnQsDQotCQkJCQkJCQkJCQkJCWRvdWJsZSogcmlnaHQsIGRvdWJsZSogYm90dG9tLCBkb3VibGUqIHRvcCk7DQotDQotLy8gRnVuY3Rpb246IEZQREZUZXh0X0dldENoYXJJbmRleEF0UG9zDQotLy8JCQlHZXQgdGhlIGluZGV4IG9mIGEgY2hhcmFjdGVyIGF0IG9yIG5lYXJieSBhIGNlcnRhaW4gcG9zaXRpb24gb24gdGhlIHBhZ2UuDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCXRleHRfcGFnZQktCUhhbmRsZSB0byBhIHRleHQgcGFnZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuIFJldHVybmVkIGJ5IEZQREZUZXh0X0xvYWRQYWdlIGZ1bmN0aW9uLg0KLS8vCQkJeAkJCS0JWCBwb3NpdGlvbiBpbiBQREYgInVzZXIgc3BhY2UiLg0KLS8vCQkJeQkJCS0JWSBwb3NpdGlvbiBpbiBQREYgInVzZXIgc3BhY2UiLg0KLS8vCQkJeFRvbGVyYW5jZQktCUFuIHgtYXhpcyB0b2xlcmFuY2UgdmFsdWUgZm9yIGNoYXJhY3RlciBoaXQgZGV0ZWN0aW9uLCBpbiBwb2ludCB1bml0Lg0KLS8vCQkJeVRvbGVyYW5jZQktCUEgeS1heGlzIHRvbGVyYW5jZSB2YWx1ZSBmb3IgY2hhcmFjdGVyIGhpdCBkZXRlY3Rpb24sIGluIHBvaW50IHVuaXQuDQotLy8gUmV0dXJuIFZhbHVlOg0KLS8vCQkJVGhlIHplcm8tYmFzZWQgaW5kZXggb2YgdGhlIGNoYXJhY3RlciBhdCwgb3IgbmVhcmJ5IHRoZSBwb2ludCAoeCx5KS4NCi0vLwkJCUlmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhdCBvciBuZWFyYnkgdGhlIHBvaW50LCByZXR1cm4gdmFsdWUgd2lsbCBiZSAtMS4NCi0vLwkJCUlmIGFuIGVycm9yIG9jY3VycywgLTMgd2lsbCBiZSByZXR1cm5lZC4NCi0vLw0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGVGV4dF9HZXRDaGFySW5kZXhBdFBvcyhGUERGX1RFWFRQQUdFIHRleHRfcGFnZSwNCi0JCQkJCQkJCQkJCQkgZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeFRvcmVsYW5jZSwgZG91YmxlIHlUb2xlcmFuY2UpOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGVGV4dF9HZXRUZXh0DQotLy8JCQlFeHRyYWN0IHVuaWNvZGUgdGV4dCBzdHJpbmcgZnJvbSB0aGUgcGFnZS4NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vCQkJdGV4dF9wYWdlCS0JSGFuZGxlIHRvIGEgdGV4dCBwYWdlIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gUmV0dXJuZWQgYnkgRlBERlRleHRfTG9hZFBhZ2UgZnVuY3Rpb24uDQotLy8JCQlzdGFydF9pbmRleAktCUluZGV4IGZvciB0aGUgc3RhcnQgY2hhcmFjdGVycy4NCi0vLwkJCWNvdW50CQktCU51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGJlIGV4dHJhY3RlZC4NCi0vLwkJCXJlc3VsdAkJLQlBIGJ1ZmZlciAoYWxsb2NhdGVkIGJ5IGFwcGxpY2F0aW9uKSByZWNlaXZpbmcgdGhlIGV4dHJhY3RlZCB1bmljb2Rlcy4NCi0vLwkJCQkJCQlUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIG11c3QgYmUgYWJsZSB0byBob2xkIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwbHVzIGEgdGVybWluYXRvci4NCi0vLyBSZXR1cm4gVmFsdWU6DQotLy8JCQlOdW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIGludG8gdGhlIHJlc3VsdCBidWZmZXIsIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgdGVybWluYXRvci4NCi0vLyBDb21tZW50czoNCi0vLwkJCVRoaXMgZnVuY3Rpb24gaWdub3JlcyBjaGFyYWN0ZXJzIHdpdGhvdXQgdW5pY29kZSBpbmZvcm1hdGlvbi4NCi0vLwkJCQ0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGVGV4dF9HZXRUZXh0KEZQREZfVEVYVFBBR0UgdGV4dF9wYWdlLCBpbnQgc3RhcnRfaW5kZXgsIGludCBjb3VudCwgdW5zaWduZWQgc2hvcnQqIHJlc3VsdCk7DQotDQotLy8gRnVuY3Rpb246IEZQREZUZXh0X0NvdW50UmVjdHMNCi0vLwkJCUNvdW50IG51bWJlciBvZiByZWN0YW5ndWxhciBhcmVhcyBvY2N1cGllZCBieSBhIHNlZ21lbnQgb2YgdGV4dHMuDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCXRleHRfcGFnZQktCUhhbmRsZSB0byBhIHRleHQgcGFnZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuIFJldHVybmVkIGJ5IEZQREZUZXh0X0xvYWRQYWdlIGZ1bmN0aW9uLg0KLS8vCQkJc3RhcnRfaW5kZXgJLQlJbmRleCBmb3IgdGhlIHN0YXJ0IGNoYXJhY3RlcnMuDQotLy8JCQljb3VudAkJLQlOdW1iZXIgb2YgY2hhcmFjdGVycy4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlOdW1iZXIgb2YgcmVjdGFuZ2xlcy4gWmVybyBmb3IgZXJyb3IuDQotLy8gQ29tbWVudHM6DQotLy8JCQlUaGlzIGZ1bmN0aW9uLCBhbG9uZyB3aXRoIEZQREZUZXh0X0dldFJlY3QgY2FuIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zIHRvIGRldGVjdCB0aGUgcG9zaXRpb24NCi0vLwkJCW9uIHRoZSBwYWdlIGZvciBhIHRleHQgc2VnbWVudCwgc28gcHJvcGVyIGFyZWFzIGNhbiBiZSBoaWdobGlnaHRlZCBvciBzb21ldGhpbmcuDQotLy8JCQlGUERGVEVYVCB3aWxsIGF1dG9tYXRpY2FsbHkgbWVyZ2Ugc21hbGwgY2hhcmFjdGVyIGJveGVzIGludG8gYmlnZ2VyIG9uZSBpZiB0aG9zZSBjaGFyYWN0ZXJzDQotLy8JCQlhcmUgb24gdGhlIHNhbWUgbGluZSBhbmQgdXNlIHNhbWUgZm9udCBzZXR0aW5ncy4NCi0vLw0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGVGV4dF9Db3VudFJlY3RzKEZQREZfVEVYVFBBR0UgdGV4dF9wYWdlLCBpbnQgc3RhcnRfaW5kZXgsIGludCBjb3VudCk7DQotDQotLy8gRnVuY3Rpb246IEZQREZUZXh0X0dldFJlY3QNCi0vLwkJCUdldCBhIHJlY3Rhbmd1bGFyIGFyZWEgZnJvbSB0aGUgcmVzdWx0IGdlbmVyYXRlZCBieSBGUERGVGV4dF9Db3VudFJlY3RzLg0KLS8vIFBhcmFtZXRlcnM6DQotLy8JCQl0ZXh0X3BhZ2UJLQlIYW5kbGUgdG8gYSB0ZXh0IHBhZ2UgaW5mb3JtYXRpb24gc3RydWN0dXJlLiBSZXR1cm5lZCBieSBGUERGVGV4dF9Mb2FkUGFnZSBmdW5jdGlvbi4NCi0vLwkJCXJlY3RfaW5kZXgJLQlaZXJvLWJhc2VkIGluZGV4IGZvciB0aGUgcmVjdGFuZ2xlLg0KLS8vCQkJbGVmdAkJLQlQb2ludGVyIHRvIGEgZG91YmxlIHZhbHVlIHJlY2VpdmluZyB0aGUgcmVjdGFuZ2xlIGxlZnQgYm91bmRhcnkuDQotLy8JCQl0b3AJCQktCVBvaW50ZXIgdG8gYSBkb3VibGUgdmFsdWUgcmVjZWl2aW5nIHRoZSByZWN0YW5nbGUgdG9wIGJvdW5kYXJ5Lg0KLS8vCQkJcmlnaHQJCS0JUG9pbnRlciB0byBhIGRvdWJsZSB2YWx1ZSByZWNlaXZpbmcgdGhlIHJlY3RhbmdsZSByaWdodCBib3VuZGFyeS4NCi0vLwkJCWJvdHRvbQkJLQlQb2ludGVyIHRvIGEgZG91YmxlIHZhbHVlIHJlY2VpdmluZyB0aGUgcmVjdGFuZ2xlIGJvdHRvbSBib3VuZGFyeS4NCi0vLyBSZXR1cm4gVmFsdWU6DQotLy8JCQlOb25lLg0KLS8vDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGVGV4dF9HZXRSZWN0KEZQREZfVEVYVFBBR0UgdGV4dF9wYWdlLCBpbnQgcmVjdF9pbmRleCwgZG91YmxlKiBsZWZ0LCBkb3VibGUqIHRvcCwNCi0JCQkJCQkJCQkJCWRvdWJsZSogcmlnaHQsIGRvdWJsZSogYm90dG9tKTsNCi0NCi0vLyBGdW5jdGlvbjogRlBERlRleHRfR2V0Qm91bmRlZFRleHQNCi0vLwkJCUV4dHJhY3QgdW5pY29kZSB0ZXh0IHdpdGhpbiBhIHJlY3Rhbmd1bGFyIGJvdW5kYXJ5IG9uIHRoZSBwYWdlLg0KLS8vIFBhcmFtZXRlcnM6DQotLy8JCQl0ZXh0X3BhZ2UJLQlIYW5kbGUgdG8gYSB0ZXh0IHBhZ2UgaW5mb3JtYXRpb24gc3RydWN0dXJlLiBSZXR1cm5lZCBieSBGUERGVGV4dF9Mb2FkUGFnZSBmdW5jdGlvbi4NCi0vLwkJCWxlZnQJCS0JTGVmdCBib3VuZGFyeS4NCi0vLwkJCXRvcAkJCS0JVG9wIGJvdW5kYXJ5Lg0KLS8vCQkJcmlnaHQJCS0JUmlnaHQgYm91bmRhcnkuDQotLy8JCQlib3R0b20JCS0JQm90dG9tIGJvdW5kYXJ5Lg0KLS8vCQkJYnVmZmVyCQktCUEgdW5pY29kZSBidWZmZXIuDQotLy8JCQlidWZsZW4JCS0JTnVtYmVyIG9mIGNoYXJhY3RlcnMgKG5vdCBieXRlcykgZm9yIHRoZSBidWZmZXIsIGV4Y2x1ZGluZyBhbiBhZGRpdGlvbmFsIHRlcm1pbmF0b3IuDQotLy8gUmV0dXJuIFZhbHVlOg0KLS8vCQkJSWYgYnVmZmVyIGlzIE5VTEwgb3IgYnVmbGVuIGlzIHplcm8sIHJldHVybiBudW1iZXIgb2YgY2hhcmFjdGVycyAobm90IGJ5dGVzKSBuZWVkZWQsDQotLy8JCQlvdGhlcndpc2UsIHJldHVybiBudW1iZXIgb2YgY2hhcmFjdGVycyBjb3BpZWQgaW50byB0aGUgYnVmZmVyLg0KLS8vDQotRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZUZXh0X0dldEJvdW5kZWRUZXh0KEZQREZfVEVYVFBBR0UgdGV4dF9wYWdlLGRvdWJsZSBsZWZ0LCBkb3VibGUgdG9wLCANCi0JCQkJCQkJCQkJCSAgZG91YmxlIHJpZ2h0LCBkb3VibGUgYm90dG9tLHVuc2lnbmVkIHNob3J0KiBidWZmZXIsaW50IGJ1Zmxlbik7DQotDQotDQotLy8gRmxhZ3MgdXNlZCBieSBGUERGVGV4dF9GaW5kU3RhcnQgZnVuY3Rpb24uDQotI2RlZmluZSBGUERGX01BVENIQ0FTRSAgICAgIDB4MDAwMDAwMDEJCS8vSWYgbm90IHNldCwgaXQgd2lsbCBub3QgbWF0Y2ggY2FzZSBieSBkZWZhdWx0Lg0KLSNkZWZpbmUgRlBERl9NQVRDSFdIT0xFV09SRCAweDAwMDAwMDAyCQkvL0lmIG5vdCBzZXQsIGl0IHdpbGwgbm90IG1hdGNoIHRoZSB3aG9sZSB3b3JkIGJ5IGRlZmF1bHQuDQotDQotLy8gRnVuY3Rpb246IEZQREZUZXh0X0ZpbmRTdGFydA0KLS8vCQkJU3RhcnQgYSBzZWFyY2guDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCXRleHRfcGFnZQktCUhhbmRsZSB0byBhIHRleHQgcGFnZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuIFJldHVybmVkIGJ5IEZQREZUZXh0X0xvYWRQYWdlIGZ1bmN0aW9uLg0KLS8vCQkJZmluZHdoYXQJLQlBIHVuaWNvZGUgbWF0Y2ggcGF0dGVybi4NCi0vLwkJCWZsYWdzCQktCU9wdGlvbiBmbGFncy4NCi0vLwkJCXN0YXJ0X2luZGV4CS0JU3RhcnQgZnJvbSB0aGlzIGNoYXJhY3Rlci4gLTEgZm9yIGVuZCBvZiB0aGUgcGFnZS4NCi0vLyBSZXR1cm4gVmFsdWU6DQotLy8JCQlBIGhhbmRsZSBmb3IgdGhlIHNlYXJjaCBjb250ZXh0LiBGUERGVGV4dF9GaW5kQ2xvc2UgbXVzdCBiZSBjYWxsZWQgdG8gcmVsZWFzZSB0aGlzIGhhbmRsZS4NCi0vLw0KLURMTEVYUE9SVCBGUERGX1NDSEhBTkRMRSBTVERDQUxMIEZQREZUZXh0X0ZpbmRTdGFydChGUERGX1RFWFRQQUdFIHRleHRfcGFnZSwgRlBERl9XSURFU1RSSU5HIGZpbmR3aGF0LA0KLQkJCQkJCQkJCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgc3RhcnRfaW5kZXgpOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGVGV4dF9GaW5kTmV4dA0KLS8vCQkJU2VhcmNoIGluIHRoZSBkaXJlY3Rpb24gZnJvbSBwYWdlIHN0YXJ0IHRvIGVuZC4NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vCQkJaGFuZGxlCQktCUEgc2VhcmNoIGNvbnRleHQgaGFuZGxlIHJldHVybmVkIGJ5IEZQREZUZXh0X0ZpbmRTdGFydC4NCi0vLyBSZXR1cm4gVmFsdWU6DQotLy8JCQlXaGV0aGVyIGEgbWF0Y2ggaXMgZm91bmQuDQotLy8NCi1ETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERlRleHRfRmluZE5leHQoRlBERl9TQ0hIQU5ETEUgaGFuZGxlKTsNCi0NCi0vLyBGdW5jdGlvbjogRlBERlRleHRfRmluZFByZXYNCi0vLwkJCVNlYXJjaCBpbiB0aGUgZGlyZWN0aW9uIGZyb20gcGFnZSBlbmQgdG8gc3RhcnQuDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCWhhbmRsZQkJLQlBIHNlYXJjaCBjb250ZXh0IGhhbmRsZSByZXR1cm5lZCBieSBGUERGVGV4dF9GaW5kU3RhcnQuDQotLy8gUmV0dXJuIFZhbHVlOg0KLS8vCQkJV2hldGhlciBhIG1hdGNoIGlzIGZvdW5kLg0KLS8vDQotRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZUZXh0X0ZpbmRQcmV2KEZQREZfU0NISEFORExFIGhhbmRsZSk7DQotDQotLy8gRnVuY3Rpb246IEZQREZUZXh0X0dldFNjaFJlc3VsdEluZGV4DQotLy8JCQlHZXQgdGhlIHN0YXJ0aW5nIGNoYXJhY3RlciBpbmRleCBvZiB0aGUgc2VhcmNoIHJlc3VsdC4NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vCQkJaGFuZGxlCQktCUEgc2VhcmNoIGNvbnRleHQgaGFuZGxlIHJldHVybmVkIGJ5IEZQREZUZXh0X0ZpbmRTdGFydC4NCi0vLyBSZXR1cm4gVmFsdWU6DQotLy8JCQlJbmRleCBmb3IgdGhlIHN0YXJ0aW5nIGNoYXJhY3Rlci4NCi0vLw0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGVGV4dF9HZXRTY2hSZXN1bHRJbmRleChGUERGX1NDSEhBTkRMRSBoYW5kbGUpOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGVGV4dF9HZXRTY2hDb3VudA0KLS8vCQkJR2V0IHRoZSBudW1iZXIgb2YgbWF0Y2hlZCBjaGFyYWN0ZXJzIGluIHRoZSBzZWFyY2ggcmVzdWx0Lg0KLS8vIFBhcmFtZXRlcnM6DQotLy8JCQloYW5kbGUJCS0JQSBzZWFyY2ggY29udGV4dCBoYW5kbGUgcmV0dXJuZWQgYnkgRlBERlRleHRfRmluZFN0YXJ0Lg0KLS8vIFJldHVybiBWYWx1ZToNCi0vLwkJCU51bWJlciBvZiBtYXRjaGVkIGNoYXJhY3RlcnMuDQotLy8NCi1ETExFWFBPUlQgaW50IFNURENBTEwgRlBERlRleHRfR2V0U2NoQ291bnQoRlBERl9TQ0hIQU5ETEUgaGFuZGxlKTsNCi0NCi0vLyBGdW5jdGlvbjogRlBERlRleHRfRmluZENsb3NlDQotLy8JCQlSZWxlYXNlIGEgc2VhcmNoIGNvbnRleHQuDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCWhhbmRsZQkJLQlBIHNlYXJjaCBjb250ZXh0IGhhbmRsZSByZXR1cm5lZCBieSBGUERGVGV4dF9GaW5kU3RhcnQuDQotLy8gUmV0dXJuIFZhbHVlOg0KLS8vCQkJTm9uZS4NCi0vLw0KLURMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERlRleHRfRmluZENsb3NlKEZQREZfU0NISEFORExFIGhhbmRsZSk7DQotDQotLy8gRnVuY3Rpb246IEZQREZMaW5rX0xvYWRXZWJMaW5rcw0KLS8vCQkJUHJlcGFyZSBpbmZvcm1hdGlvbiBhYm91dCB3ZWJsaW5rcyBpbiBhIHBhZ2UuDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCXRleHRfcGFnZQktCUhhbmRsZSB0byBhIHRleHQgcGFnZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuIFJldHVybmVkIGJ5IEZQREZUZXh0X0xvYWRQYWdlIGZ1bmN0aW9uLg0KLS8vIFJldHVybiBWYWx1ZToJDQotLy8JCQlBIGhhbmRsZSB0byB0aGUgcGFnZSdzIGxpbmtzIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4NCi0vLwkJCU5VTEwgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuDQotLy8gQ29tbWVudHM6DQotLy8JCQlXZWJsaW5rcyBhcmUgdGhvc2UgbGlua3MgaW1wbGljaXRseSBlbWJlZGRlZCBpbiBQREYgcGFnZXMuIFBERiBhbHNvIGhhcyBhIHR5cGUgb2YNCi0vLwkJCWFubm90YXRpb24gY2FsbGVkICJsaW5rIiwgRlBERlRFWFQgZG9lc24ndCBkZWFsIHdpdGggdGhhdCBraW5kIG9mIGxpbmsuDQotLy8JCQlGUERGVEVYVCB3ZWJsaW5rIGZlYXR1cmUgaXMgdXNlZnVsIGZvciBhdXRvbWF0aWNhbGx5IGRldGVjdGluZyBsaW5rcyBpbiB0aGUgcGFnZQ0KLS8vCQkJY29udGVudHMuIEZvciBleGFtcGxlLCB0aGluZ3MgbGlrZSAiaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbSIgd2lsbCBiZSBkZXRlY3RlZCwNCi0vLwkJCXNvIGFwcGxpY2F0aW9ucyBjYW4gYWxsb3cgdXNlciB0byBjbGljayBvbiB0aG9zZSBjaGFyYWN0ZXJzIHRvIGFjdGl2YXRlIHRoZSBsaW5rLA0KLS8vCQkJZXZlbiB0aGUgUERGIGRvZXNuJ3QgY29tZSB3aXRoIGxpbmsgYW5ub3RhdGlvbnMuDQotLy8NCi0vLwkJCUZQREZMaW5rX0Nsb3NlV2ViTGlua3MgbXVzdCBiZSBjYWxsZWQgdG8gcmVsZWFzZSByZXNvdXJjZXMuDQotLy8NCi1ETExFWFBPUlQgRlBERl9QQUdFTElOSyBTVERDQUxMIEZQREZMaW5rX0xvYWRXZWJMaW5rcyhGUERGX1RFWFRQQUdFIHRleHRfcGFnZSk7DQotDQotLy8gRnVuY3Rpb246IEZQREZMaW5rX0NvdW50V2ViTGlua3MNCi0vLwkJCUNvdW50IG51bWJlciBvZiBkZXRlY3RlZCB3ZWIgbGlua3MuDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCWxpbmtfcGFnZQktCUhhbmRsZSByZXR1cm5lZCBieSBGUERGTGlua19Mb2FkV2ViTGlua3MuDQotLy8gUmV0dXJuIFZhbHVlOg0KLS8vCQkJTnVtYmVyIG9mIGRldGVjdGVkIHdlYiBsaW5rcy4NCi0vLw0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGTGlua19Db3VudFdlYkxpbmtzKEZQREZfUEFHRUxJTksgbGlua19wYWdlKTsNCi0NCi0vLyBGdW5jdGlvbjogRlBERkxpbmtfR2V0VVJMDQotLy8JCQlGZXRjaCB0aGUgVVJMIGluZm9ybWF0aW9uIGZvciBhIGRldGVjdGVkIHdlYiBsaW5rLg0KLS8vIFBhcmFtZXRlcnM6DQotLy8JCQlsaW5rX3BhZ2UJLQlIYW5kbGUgcmV0dXJuZWQgYnkgRlBERkxpbmtfTG9hZFdlYkxpbmtzLg0KLS8vCQkJbGlua19pbmRleAktCVplcm8tYmFzZWQgaW5kZXggZm9yIHRoZSBsaW5rLg0KLS8vCQkJYnVmZmVyCQktCUEgdW5pY29kZSBidWZmZXIuDQotLy8JCQlidWZsZW4JCS0JTnVtYmVyIG9mIGNoYXJhY3RlcnMgKG5vdCBieXRlcykgZm9yIHRoZSBidWZmZXIsIGluY2x1ZGluZyBhbiBhZGRpdGlvbmFsIHRlcm1pbmF0b3IuDQotLy8gUmV0dXJuIFZhbHVlOg0KLS8vCQkJSWYgYnVmZmVyIGlzIE5VTEwgb3IgYnVmbGVuIGlzIHplcm8sIHJldHVybiBudW1iZXIgb2YgY2hhcmFjdGVycyAobm90IGJ5dGVzIGFuZCBhbiBhZGRpdGlvbmFsIHRlcm1pbmF0b3IgaXMgYWxzbyBjb3VudGVkKSBuZWVkZWQsDQotLy8JCQlvdGhlcndpc2UsIHJldHVybiBudW1iZXIgb2YgY2hhcmFjdGVycyBjb3BpZWQgaW50byB0aGUgYnVmZmVyLg0KLS8vDQotRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZMaW5rX0dldFVSTChGUERGX1BBR0VMSU5LIGxpbmtfcGFnZSwgaW50IGxpbmtfaW5kZXgsIHVuc2lnbmVkIHNob3J0KiBidWZmZXIsaW50IGJ1Zmxlbik7DQotDQotLy8gRnVuY3Rpb246IEZQREZMaW5rX0NvdW50UmVjdHMNCi0vLwkJCUNvdW50IG51bWJlciBvZiByZWN0YW5ndWxhciBhcmVhcyBmb3IgdGhlIGxpbmsuDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCWxpbmtfcGFnZQktCUhhbmRsZSByZXR1cm5lZCBieSBGUERGTGlua19Mb2FkV2ViTGlua3MuDQotLy8JCQlsaW5rX2luZGV4CS0JWmVyby1iYXNlZCBpbmRleCBmb3IgdGhlIGxpbmsuDQotLy8gUmV0dXJuIFZhbHVlOg0KLS8vCQkJTnVtYmVyIG9mIHJlY3Rhbmd1bGFyIGFyZWFzIGZvciB0aGUgbGluay4NCi0vLw0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGTGlua19Db3VudFJlY3RzKEZQREZfUEFHRUxJTksgbGlua19wYWdlLCBpbnQgbGlua19pbmRleCk7DQotDQotLy8gRnVuY3Rpb246IEZQREZMaW5rX0dldFJlY3QNCi0vLwkJCUZldGNoIHRoZSBib3VuZGFyaWVzIG9mIGEgcmVjdGFuZ2xlIGZvciBhIGxpbmsuDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCWxpbmtfcGFnZQktCUhhbmRsZSByZXR1cm5lZCBieSBGUERGTGlua19Mb2FkV2ViTGlua3MuDQotLy8JCQlsaW5rX2luZGV4CS0JWmVyby1iYXNlZCBpbmRleCBmb3IgdGhlIGxpbmsuDQotLy8JCQlyZWN0X2luZGV4CS0JWmVyby1iYXNlZCBpbmRleCBmb3IgYSByZWN0YW5nbGUuDQotLy8JCQlsZWZ0CQktCVBvaW50ZXIgdG8gYSBkb3VibGUgdmFsdWUgcmVjZWl2aW5nIHRoZSByZWN0YW5nbGUgbGVmdCBib3VuZGFyeS4NCi0vLwkJCXRvcAkJCS0JUG9pbnRlciB0byBhIGRvdWJsZSB2YWx1ZSByZWNlaXZpbmcgdGhlIHJlY3RhbmdsZSB0b3AgYm91bmRhcnkuDQotLy8JCQlyaWdodAkJLQlQb2ludGVyIHRvIGEgZG91YmxlIHZhbHVlIHJlY2VpdmluZyB0aGUgcmVjdGFuZ2xlIHJpZ2h0IGJvdW5kYXJ5Lg0KLS8vCQkJYm90dG9tCQktCVBvaW50ZXIgdG8gYSBkb3VibGUgdmFsdWUgcmVjZWl2aW5nIHRoZSByZWN0YW5nbGUgYm90dG9tIGJvdW5kYXJ5Lg0KLS8vIFJldHVybiBWYWx1ZToNCi0vLwkJCU5vbmUuDQotLy8NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZMaW5rX0dldFJlY3QoRlBERl9QQUdFTElOSyBsaW5rX3BhZ2UsIGludCBsaW5rX2luZGV4LCBpbnQgcmVjdF9pbmRleCwgDQotCQkJCQkJCQkJCWRvdWJsZSogbGVmdCwgZG91YmxlKiB0b3AsZG91YmxlKiByaWdodCwgZG91YmxlKiBib3R0b20pOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGTGlua19DbG9zZVdlYkxpbmtzDQotLy8JCQlSZWxlYXNlIHJlc291cmNlcyB1c2VkIGJ5IHdlYmxpbmsgZmVhdHVyZS4NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vCQkJbGlua19wYWdlCS0JSGFuZGxlIHJldHVybmVkIGJ5IEZQREZMaW5rX0xvYWRXZWJMaW5rcy4NCi0vLyBSZXR1cm4gVmFsdWU6DQotLy8JCQlOb25lLg0KLS8vDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGTGlua19DbG9zZVdlYkxpbmtzKEZQREZfUEFHRUxJTksgbGlua19wYWdlKTsNCi0NCi0NCi0jaWZkZWYgX19jcGx1c3BsdXMNCi19Ow0KLSNlbmRpZg0KLQ0KLSNlbmRpZi8vX0ZQREZURVhUX0hfDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlBERlRFWFRfSF8KKyNkZWZpbmUgX0ZQREZURVhUX0hfCisKKyNpbmNsdWRlICJmcGRmdmlldy5oIgorCisvLyBFeHBvcnRlZCBGdW5jdGlvbnMKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLy8gRnVuY3Rpb246IEZQREZUZXh0X0xvYWRQYWdlCisvLwkJCVByZXBhcmUgaW5mb3JtYXRpb24gYWJvdXQgYWxsIGNoYXJhY3RlcnMgaW4gYSBwYWdlLgorLy8gUGFyYW1ldGVyczogCisvLwkJCXBhZ2UJLQlIYW5kbGUgdG8gdGhlIHBhZ2UuIFJldHVybmVkIGJ5IEZQREZfTG9hZFBhZ2UgZnVuY3Rpb24gKGluIEZQREZWSUVXIG1vZHVsZSkuCQorLy8gUmV0dXJuIHZhbHVlOgorLy8JCQlBIGhhbmRsZSB0byB0aGUgdGV4dCBwYWdlIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4KKy8vCQkJTlVMTCBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZy4KKy8vIENvbW1lbnRzOgorLy8JCQlBcHBsaWNhdGlvbiBtdXN0IGNhbGwgRlBERlRleHRfQ2xvc2VQYWdlIHRvIHJlbGVhc2UgdGhlIHRleHQgcGFnZSBpbmZvcm1hdGlvbi4KKy8vCQkJSWYgeW91IGRvbid0IHB1cmNoYXNlIFRleHQgTW9kdWxlICwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBOVUxMLgorLy8JCitETExFWFBPUlQgRlBERl9URVhUUEFHRQlTVERDQUxMIEZQREZUZXh0X0xvYWRQYWdlKEZQREZfUEFHRSBwYWdlKTsKKworLy8gRnVuY3Rpb246IEZQREZUZXh0X0Nsb3NlUGFnZQorLy8JCQlSZWxlYXNlIGFsbCByZXNvdXJjZXMgYWxsb2NhdGVkIGZvciBhIHRleHQgcGFnZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuCisvLyBQYXJhbWV0ZXJzOiAKKy8vCQkJdGV4dF9wYWdlCS0JSGFuZGxlIHRvIGEgdGV4dCBwYWdlIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gUmV0dXJuZWQgYnkgRlBERlRleHRfTG9hZFBhZ2UgZnVuY3Rpb24uCisvLyBSZXR1cm4gVmFsdWU6CisvLwkJCU5vbmUuCisvLworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGVGV4dF9DbG9zZVBhZ2UoRlBERl9URVhUUEFHRSB0ZXh0X3BhZ2UpOworCQorLy8gRnVuY3Rpb246IEZQREZUZXh0X0NvdW50Q2hhcnMKKy8vCQkJR2V0IG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGEgcGFnZS4KKy8vIFBhcmFtZXRlcnM6IAorLy8JCQl0ZXh0X3BhZ2UJLQlIYW5kbGUgdG8gYSB0ZXh0IHBhZ2UgaW5mb3JtYXRpb24gc3RydWN0dXJlLiBSZXR1cm5lZCBieSBGUERGVGV4dF9Mb2FkUGFnZSBmdW5jdGlvbi4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJTnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIHBhZ2UuIFJldHVybiAtMSBmb3IgZXJyb3IuIAorLy8JCQlHZW5lcmF0ZWQgY2hhcmFjdGVycywgbGlrZSBhZGRpdGlvbmFsIHNwYWNlIGNoYXJhY3RlcnMsIG5ldyBsaW5lIGNoYXJhY3RlcnMsIGFyZSBhbHNvIGNvdW50ZWQuCisvLyBDb21tZW50czoKKy8vCQkJQ2hhcmFjdGVycyBpbiBhIHBhZ2UgZm9ybSBhICJzdHJlYW0iLCBpbnNpZGUgdGhlIHN0cmVhbSwgZWFjaCBjaGFyYWN0ZXIgaGFzIGFuIGluZGV4LgorLy8JCQlXZSB3aWxsIHVzZSB0aGUgaW5kZXggcGFyYW1ldGVycyBpbiBtYW55IG9mIEZQREZURVhUIGZ1bmN0aW9ucy4gVGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUgcGFnZQorLy8JCQloYXMgYW4gaW5kZXggdmFsdWUgb2YgemVyby4KKy8vCitETExFWFBPUlQgaW50IFNURENBTEwgRlBERlRleHRfQ291bnRDaGFycyhGUERGX1RFWFRQQUdFIHRleHRfcGFnZSk7CisKKy8vIEZ1bmN0aW9uOiBGUERGVGV4dF9HZXRVbmljb2RlCisvLwkJCUdldCBVbmljb2RlIG9mIGEgY2hhcmFjdGVyIGluIGEgcGFnZS4KKy8vIFBhcmFtZXRlcnM6IAorLy8JCQl0ZXh0X3BhZ2UJLQlIYW5kbGUgdG8gYSB0ZXh0IHBhZ2UgaW5mb3JtYXRpb24gc3RydWN0dXJlLiBSZXR1cm5lZCBieSBGUERGVGV4dF9Mb2FkUGFnZSBmdW5jdGlvbi4KKy8vCQkJaW5kZXgJCS0JWmVyby1iYXNlZCBpbmRleCBvZiB0aGUgY2hhcmFjdGVyLgorLy8gUmV0dXJuIHZhbHVlOgorLy8JCQlUaGUgVW5pY29kZSBvZiB0aGUgcGFydGljdWxhciBjaGFyYWN0ZXIuCisvLwkJCUlmIGEgY2hhcmFjdGVyIGlzIG5vdCBlbmNvZGVkIGluIFVuaWNvZGUgYW5kIEZveGl0IGVuZ2luZSBjYW4ndCBjb252ZXJ0IHRvIFVuaWNvZGUsCisvLwkJCXRoZSByZXR1cm4gdmFsdWUgd2lsbCBiZSB6ZXJvLgorLy8KK0RMTEVYUE9SVCB1bnNpZ25lZCBpbnQgU1REQ0FMTCBGUERGVGV4dF9HZXRVbmljb2RlKEZQREZfVEVYVFBBR0UgdGV4dF9wYWdlLCBpbnQgaW5kZXgpOworCisvLyBGdW5jdGlvbjogRlBERlRleHRfR2V0Rm9udFNpemUKKy8vCQkJR2V0IHRoZSBmb250IHNpemUgb2YgYSBwYXJ0aWN1bGFyIGNoYXJhY3Rlci4KKy8vIFBhcmFtZXRlcnM6IAorLy8JCQl0ZXh0X3BhZ2UJLQlIYW5kbGUgdG8gYSB0ZXh0IHBhZ2UgaW5mb3JtYXRpb24gc3RydWN0dXJlLiBSZXR1cm5lZCBieSBGUERGVGV4dF9Mb2FkUGFnZSBmdW5jdGlvbi4KKy8vCQkJaW5kZXgJCS0JWmVyby1iYXNlZCBpbmRleCBvZiB0aGUgY2hhcmFjdGVyLgorLy8gUmV0dXJuIHZhbHVlOgorLy8JCQlUaGUgZm9udCBzaXplIG9mIHRoZSBwYXJ0aWN1bGFyIGNoYXJhY3RlciwgbWVhc3VyZWQgaW4gcG9pbnRzIChhYm91dCAxLzcyIGluY2gpLgorLy8JCQlUaGlzIGlzIHRoZSB0eXBvZ3JhcGhpYyBzaXplIG9mIHRoZSBmb250IChzbyBjYWxsZWQgImVtIHNpemUiKS4KKy8vCitETExFWFBPUlQgZG91YmxlIFNURENBTEwgRlBERlRleHRfR2V0Rm9udFNpemUoRlBERl9URVhUUEFHRSB0ZXh0X3BhZ2UsIGludCBpbmRleCk7CisKKy8vIEZ1bmN0aW9uOiBGUERGVGV4dF9HZXRDaGFyQm94CisvLwkJCUdldCBib3VuZGluZyBib3ggb2YgYSBwYXJ0aWN1bGFyIGNoYXJhY3Rlci4KKy8vIFBhcmFtZXRlcnM6IAorLy8JCQl0ZXh0X3BhZ2UJLQlIYW5kbGUgdG8gYSB0ZXh0IHBhZ2UgaW5mb3JtYXRpb24gc3RydWN0dXJlLiBSZXR1cm5lZCBieSBGUERGVGV4dF9Mb2FkUGFnZSBmdW5jdGlvbi4KKy8vCQkJaW5kZXgJCS0JWmVyby1iYXNlZCBpbmRleCBvZiB0aGUgY2hhcmFjdGVyLgorLy8JCQlsZWZ0CQktCVBvaW50ZXIgdG8gYSBkb3VibGUgbnVtYmVyIHJlY2VpdmluZyBsZWZ0IHBvc2l0aW9uIG9mIHRoZSBjaGFyYWN0ZXIgYm94LgorLy8JCQlyaWdodAkJLQlQb2ludGVyIHRvIGEgZG91YmxlIG51bWJlciByZWNlaXZpbmcgcmlnaHQgcG9zaXRpb24gb2YgdGhlIGNoYXJhY3RlciBib3guCisvLwkJCWJvdHRvbQkJLQlQb2ludGVyIHRvIGEgZG91YmxlIG51bWJlciByZWNlaXZpbmcgYm90dG9tIHBvc2l0aW9uIG9mIHRoZSBjaGFyYWN0ZXIgYm94LgorLy8JCQl0b3AJCQktCVBvaW50ZXIgdG8gYSBkb3VibGUgbnVtYmVyIHJlY2VpdmluZyB0b3AgcG9zaXRpb24gb2YgdGhlIGNoYXJhY3RlciBib3guCisvLyBSZXR1cm4gVmFsdWU6CisvLwkJCU5vbmUuCisvLyBDb21tZW50czoKKy8vCQkJQWxsIHBvc2l0aW9ucyBhcmUgbWVhc3VyZWQgaW4gUERGICJ1c2VyIHNwYWNlIi4KKy8vCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZUZXh0X0dldENoYXJCb3goRlBERl9URVhUUEFHRSB0ZXh0X3BhZ2UsIGludCBpbmRleCwgZG91YmxlKiBsZWZ0LAorCQkJCQkJCQkJCQkJCWRvdWJsZSogcmlnaHQsIGRvdWJsZSogYm90dG9tLCBkb3VibGUqIHRvcCk7CisKKy8vIEZ1bmN0aW9uOiBGUERGVGV4dF9HZXRDaGFySW5kZXhBdFBvcworLy8JCQlHZXQgdGhlIGluZGV4IG9mIGEgY2hhcmFjdGVyIGF0IG9yIG5lYXJieSBhIGNlcnRhaW4gcG9zaXRpb24gb24gdGhlIHBhZ2UuCisvLyBQYXJhbWV0ZXJzOgorLy8JCQl0ZXh0X3BhZ2UJLQlIYW5kbGUgdG8gYSB0ZXh0IHBhZ2UgaW5mb3JtYXRpb24gc3RydWN0dXJlLiBSZXR1cm5lZCBieSBGUERGVGV4dF9Mb2FkUGFnZSBmdW5jdGlvbi4KKy8vCQkJeAkJCS0JWCBwb3NpdGlvbiBpbiBQREYgInVzZXIgc3BhY2UiLgorLy8JCQl5CQkJLQlZIHBvc2l0aW9uIGluIFBERiAidXNlciBzcGFjZSIuCisvLwkJCXhUb2xlcmFuY2UJLQlBbiB4LWF4aXMgdG9sZXJhbmNlIHZhbHVlIGZvciBjaGFyYWN0ZXIgaGl0IGRldGVjdGlvbiwgaW4gcG9pbnQgdW5pdC4KKy8vCQkJeVRvbGVyYW5jZQktCUEgeS1heGlzIHRvbGVyYW5jZSB2YWx1ZSBmb3IgY2hhcmFjdGVyIGhpdCBkZXRlY3Rpb24sIGluIHBvaW50IHVuaXQuCisvLyBSZXR1cm4gVmFsdWU6CisvLwkJCVRoZSB6ZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgYXQsIG9yIG5lYXJieSB0aGUgcG9pbnQgKHgseSkuCisvLwkJCUlmIHRoZXJlIGlzIG5vIGNoYXJhY3RlciBhdCBvciBuZWFyYnkgdGhlIHBvaW50LCByZXR1cm4gdmFsdWUgd2lsbCBiZSAtMS4KKy8vCQkJSWYgYW4gZXJyb3Igb2NjdXJzLCAtMyB3aWxsIGJlIHJldHVybmVkLgorLy8KK0RMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGVGV4dF9HZXRDaGFySW5kZXhBdFBvcyhGUERGX1RFWFRQQUdFIHRleHRfcGFnZSwKKwkJCQkJCQkJCQkJCSBkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB4VG9yZWxhbmNlLCBkb3VibGUgeVRvbGVyYW5jZSk7CisKKy8vIEZ1bmN0aW9uOiBGUERGVGV4dF9HZXRUZXh0CisvLwkJCUV4dHJhY3QgdW5pY29kZSB0ZXh0IHN0cmluZyBmcm9tIHRoZSBwYWdlLgorLy8gUGFyYW1ldGVyczoKKy8vCQkJdGV4dF9wYWdlCS0JSGFuZGxlIHRvIGEgdGV4dCBwYWdlIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4gUmV0dXJuZWQgYnkgRlBERlRleHRfTG9hZFBhZ2UgZnVuY3Rpb24uCisvLwkJCXN0YXJ0X2luZGV4CS0JSW5kZXggZm9yIHRoZSBzdGFydCBjaGFyYWN0ZXJzLgorLy8JCQljb3VudAkJLQlOdW1iZXIgb2YgY2hhcmFjdGVycyB0byBiZSBleHRyYWN0ZWQuCisvLwkJCXJlc3VsdAkJLQlBIGJ1ZmZlciAoYWxsb2NhdGVkIGJ5IGFwcGxpY2F0aW9uKSByZWNlaXZpbmcgdGhlIGV4dHJhY3RlZCB1bmljb2Rlcy4KKy8vCQkJCQkJCVRoZSBzaXplIG9mIHRoZSBidWZmZXIgbXVzdCBiZSBhYmxlIHRvIGhvbGQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHBsdXMgYSB0ZXJtaW5hdG9yLgorLy8gUmV0dXJuIFZhbHVlOgorLy8JCQlOdW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIGludG8gdGhlIHJlc3VsdCBidWZmZXIsIGluY2x1ZGluZyB0aGUgdHJhaWxpbmcgdGVybWluYXRvci4KKy8vIENvbW1lbnRzOgorLy8JCQlUaGlzIGZ1bmN0aW9uIGlnbm9yZXMgY2hhcmFjdGVycyB3aXRob3V0IHVuaWNvZGUgaW5mb3JtYXRpb24uCisvLwkJCQorRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZUZXh0X0dldFRleHQoRlBERl9URVhUUEFHRSB0ZXh0X3BhZ2UsIGludCBzdGFydF9pbmRleCwgaW50IGNvdW50LCB1bnNpZ25lZCBzaG9ydCogcmVzdWx0KTsKKworLy8gRnVuY3Rpb246IEZQREZUZXh0X0NvdW50UmVjdHMKKy8vCQkJQ291bnQgbnVtYmVyIG9mIHJlY3Rhbmd1bGFyIGFyZWFzIG9jY3VwaWVkIGJ5IGEgc2VnbWVudCBvZiB0ZXh0cy4KKy8vIFBhcmFtZXRlcnM6CisvLwkJCXRleHRfcGFnZQktCUhhbmRsZSB0byBhIHRleHQgcGFnZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuIFJldHVybmVkIGJ5IEZQREZUZXh0X0xvYWRQYWdlIGZ1bmN0aW9uLgorLy8JCQlzdGFydF9pbmRleAktCUluZGV4IGZvciB0aGUgc3RhcnQgY2hhcmFjdGVycy4KKy8vCQkJY291bnQJCS0JTnVtYmVyIG9mIGNoYXJhY3RlcnMuCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCU51bWJlciBvZiByZWN0YW5nbGVzLiBaZXJvIGZvciBlcnJvci4KKy8vIENvbW1lbnRzOgorLy8JCQlUaGlzIGZ1bmN0aW9uLCBhbG9uZyB3aXRoIEZQREZUZXh0X0dldFJlY3QgY2FuIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zIHRvIGRldGVjdCB0aGUgcG9zaXRpb24KKy8vCQkJb24gdGhlIHBhZ2UgZm9yIGEgdGV4dCBzZWdtZW50LCBzbyBwcm9wZXIgYXJlYXMgY2FuIGJlIGhpZ2hsaWdodGVkIG9yIHNvbWV0aGluZy4KKy8vCQkJRlBERlRFWFQgd2lsbCBhdXRvbWF0aWNhbGx5IG1lcmdlIHNtYWxsIGNoYXJhY3RlciBib3hlcyBpbnRvIGJpZ2dlciBvbmUgaWYgdGhvc2UgY2hhcmFjdGVycworLy8JCQlhcmUgb24gdGhlIHNhbWUgbGluZSBhbmQgdXNlIHNhbWUgZm9udCBzZXR0aW5ncy4KKy8vCitETExFWFBPUlQgaW50IFNURENBTEwgRlBERlRleHRfQ291bnRSZWN0cyhGUERGX1RFWFRQQUdFIHRleHRfcGFnZSwgaW50IHN0YXJ0X2luZGV4LCBpbnQgY291bnQpOworCisvLyBGdW5jdGlvbjogRlBERlRleHRfR2V0UmVjdAorLy8JCQlHZXQgYSByZWN0YW5ndWxhciBhcmVhIGZyb20gdGhlIHJlc3VsdCBnZW5lcmF0ZWQgYnkgRlBERlRleHRfQ291bnRSZWN0cy4KKy8vIFBhcmFtZXRlcnM6CisvLwkJCXRleHRfcGFnZQktCUhhbmRsZSB0byBhIHRleHQgcGFnZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuIFJldHVybmVkIGJ5IEZQREZUZXh0X0xvYWRQYWdlIGZ1bmN0aW9uLgorLy8JCQlyZWN0X2luZGV4CS0JWmVyby1iYXNlZCBpbmRleCBmb3IgdGhlIHJlY3RhbmdsZS4KKy8vCQkJbGVmdAkJLQlQb2ludGVyIHRvIGEgZG91YmxlIHZhbHVlIHJlY2VpdmluZyB0aGUgcmVjdGFuZ2xlIGxlZnQgYm91bmRhcnkuCisvLwkJCXRvcAkJCS0JUG9pbnRlciB0byBhIGRvdWJsZSB2YWx1ZSByZWNlaXZpbmcgdGhlIHJlY3RhbmdsZSB0b3AgYm91bmRhcnkuCisvLwkJCXJpZ2h0CQktCVBvaW50ZXIgdG8gYSBkb3VibGUgdmFsdWUgcmVjZWl2aW5nIHRoZSByZWN0YW5nbGUgcmlnaHQgYm91bmRhcnkuCisvLwkJCWJvdHRvbQkJLQlQb2ludGVyIHRvIGEgZG91YmxlIHZhbHVlIHJlY2VpdmluZyB0aGUgcmVjdGFuZ2xlIGJvdHRvbSBib3VuZGFyeS4KKy8vIFJldHVybiBWYWx1ZToKKy8vCQkJTm9uZS4KKy8vCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZUZXh0X0dldFJlY3QoRlBERl9URVhUUEFHRSB0ZXh0X3BhZ2UsIGludCByZWN0X2luZGV4LCBkb3VibGUqIGxlZnQsIGRvdWJsZSogdG9wLAorCQkJCQkJCQkJCQlkb3VibGUqIHJpZ2h0LCBkb3VibGUqIGJvdHRvbSk7CisKKy8vIEZ1bmN0aW9uOiBGUERGVGV4dF9HZXRCb3VuZGVkVGV4dAorLy8JCQlFeHRyYWN0IHVuaWNvZGUgdGV4dCB3aXRoaW4gYSByZWN0YW5ndWxhciBib3VuZGFyeSBvbiB0aGUgcGFnZS4KKy8vIFBhcmFtZXRlcnM6CisvLwkJCXRleHRfcGFnZQktCUhhbmRsZSB0byBhIHRleHQgcGFnZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuIFJldHVybmVkIGJ5IEZQREZUZXh0X0xvYWRQYWdlIGZ1bmN0aW9uLgorLy8JCQlsZWZ0CQktCUxlZnQgYm91bmRhcnkuCisvLwkJCXRvcAkJCS0JVG9wIGJvdW5kYXJ5LgorLy8JCQlyaWdodAkJLQlSaWdodCBib3VuZGFyeS4KKy8vCQkJYm90dG9tCQktCUJvdHRvbSBib3VuZGFyeS4KKy8vCQkJYnVmZmVyCQktCUEgdW5pY29kZSBidWZmZXIuCisvLwkJCWJ1ZmxlbgkJLQlOdW1iZXIgb2YgY2hhcmFjdGVycyAobm90IGJ5dGVzKSBmb3IgdGhlIGJ1ZmZlciwgZXhjbHVkaW5nIGFuIGFkZGl0aW9uYWwgdGVybWluYXRvci4KKy8vIFJldHVybiBWYWx1ZToKKy8vCQkJSWYgYnVmZmVyIGlzIE5VTEwgb3IgYnVmbGVuIGlzIHplcm8sIHJldHVybiBudW1iZXIgb2YgY2hhcmFjdGVycyAobm90IGJ5dGVzKSBuZWVkZWQsCisvLwkJCW90aGVyd2lzZSwgcmV0dXJuIG51bWJlciBvZiBjaGFyYWN0ZXJzIGNvcGllZCBpbnRvIHRoZSBidWZmZXIuCisvLworRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZUZXh0X0dldEJvdW5kZWRUZXh0KEZQREZfVEVYVFBBR0UgdGV4dF9wYWdlLGRvdWJsZSBsZWZ0LCBkb3VibGUgdG9wLCAKKwkJCQkJCQkJCQkJICBkb3VibGUgcmlnaHQsIGRvdWJsZSBib3R0b20sdW5zaWduZWQgc2hvcnQqIGJ1ZmZlcixpbnQgYnVmbGVuKTsKKworCisvLyBGbGFncyB1c2VkIGJ5IEZQREZUZXh0X0ZpbmRTdGFydCBmdW5jdGlvbi4KKyNkZWZpbmUgRlBERl9NQVRDSENBU0UgICAgICAweDAwMDAwMDAxCQkvL0lmIG5vdCBzZXQsIGl0IHdpbGwgbm90IG1hdGNoIGNhc2UgYnkgZGVmYXVsdC4KKyNkZWZpbmUgRlBERl9NQVRDSFdIT0xFV09SRCAweDAwMDAwMDAyCQkvL0lmIG5vdCBzZXQsIGl0IHdpbGwgbm90IG1hdGNoIHRoZSB3aG9sZSB3b3JkIGJ5IGRlZmF1bHQuCisKKy8vIEZ1bmN0aW9uOiBGUERGVGV4dF9GaW5kU3RhcnQKKy8vCQkJU3RhcnQgYSBzZWFyY2guCisvLyBQYXJhbWV0ZXJzOgorLy8JCQl0ZXh0X3BhZ2UJLQlIYW5kbGUgdG8gYSB0ZXh0IHBhZ2UgaW5mb3JtYXRpb24gc3RydWN0dXJlLiBSZXR1cm5lZCBieSBGUERGVGV4dF9Mb2FkUGFnZSBmdW5jdGlvbi4KKy8vCQkJZmluZHdoYXQJLQlBIHVuaWNvZGUgbWF0Y2ggcGF0dGVybi4KKy8vCQkJZmxhZ3MJCS0JT3B0aW9uIGZsYWdzLgorLy8JCQlzdGFydF9pbmRleAktCVN0YXJ0IGZyb20gdGhpcyBjaGFyYWN0ZXIuIC0xIGZvciBlbmQgb2YgdGhlIHBhZ2UuCisvLyBSZXR1cm4gVmFsdWU6CisvLwkJCUEgaGFuZGxlIGZvciB0aGUgc2VhcmNoIGNvbnRleHQuIEZQREZUZXh0X0ZpbmRDbG9zZSBtdXN0IGJlIGNhbGxlZCB0byByZWxlYXNlIHRoaXMgaGFuZGxlLgorLy8KK0RMTEVYUE9SVCBGUERGX1NDSEhBTkRMRSBTVERDQUxMIEZQREZUZXh0X0ZpbmRTdGFydChGUERGX1RFWFRQQUdFIHRleHRfcGFnZSwgRlBERl9XSURFU1RSSU5HIGZpbmR3aGF0LAorCQkJCQkJCQkJCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGludCBzdGFydF9pbmRleCk7CisKKy8vIEZ1bmN0aW9uOiBGUERGVGV4dF9GaW5kTmV4dAorLy8JCQlTZWFyY2ggaW4gdGhlIGRpcmVjdGlvbiBmcm9tIHBhZ2Ugc3RhcnQgdG8gZW5kLgorLy8gUGFyYW1ldGVyczoKKy8vCQkJaGFuZGxlCQktCUEgc2VhcmNoIGNvbnRleHQgaGFuZGxlIHJldHVybmVkIGJ5IEZQREZUZXh0X0ZpbmRTdGFydC4KKy8vIFJldHVybiBWYWx1ZToKKy8vCQkJV2hldGhlciBhIG1hdGNoIGlzIGZvdW5kLgorLy8KK0RMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGVGV4dF9GaW5kTmV4dChGUERGX1NDSEhBTkRMRSBoYW5kbGUpOworCisvLyBGdW5jdGlvbjogRlBERlRleHRfRmluZFByZXYKKy8vCQkJU2VhcmNoIGluIHRoZSBkaXJlY3Rpb24gZnJvbSBwYWdlIGVuZCB0byBzdGFydC4KKy8vIFBhcmFtZXRlcnM6CisvLwkJCWhhbmRsZQkJLQlBIHNlYXJjaCBjb250ZXh0IGhhbmRsZSByZXR1cm5lZCBieSBGUERGVGV4dF9GaW5kU3RhcnQuCisvLyBSZXR1cm4gVmFsdWU6CisvLwkJCVdoZXRoZXIgYSBtYXRjaCBpcyBmb3VuZC4KKy8vCitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERlRleHRfRmluZFByZXYoRlBERl9TQ0hIQU5ETEUgaGFuZGxlKTsKKworLy8gRnVuY3Rpb246IEZQREZUZXh0X0dldFNjaFJlc3VsdEluZGV4CisvLwkJCUdldCB0aGUgc3RhcnRpbmcgY2hhcmFjdGVyIGluZGV4IG9mIHRoZSBzZWFyY2ggcmVzdWx0LgorLy8gUGFyYW1ldGVyczoKKy8vCQkJaGFuZGxlCQktCUEgc2VhcmNoIGNvbnRleHQgaGFuZGxlIHJldHVybmVkIGJ5IEZQREZUZXh0X0ZpbmRTdGFydC4KKy8vIFJldHVybiBWYWx1ZToKKy8vCQkJSW5kZXggZm9yIHRoZSBzdGFydGluZyBjaGFyYWN0ZXIuCisvLworRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZUZXh0X0dldFNjaFJlc3VsdEluZGV4KEZQREZfU0NISEFORExFIGhhbmRsZSk7CisKKy8vIEZ1bmN0aW9uOiBGUERGVGV4dF9HZXRTY2hDb3VudAorLy8JCQlHZXQgdGhlIG51bWJlciBvZiBtYXRjaGVkIGNoYXJhY3RlcnMgaW4gdGhlIHNlYXJjaCByZXN1bHQuCisvLyBQYXJhbWV0ZXJzOgorLy8JCQloYW5kbGUJCS0JQSBzZWFyY2ggY29udGV4dCBoYW5kbGUgcmV0dXJuZWQgYnkgRlBERlRleHRfRmluZFN0YXJ0LgorLy8gUmV0dXJuIFZhbHVlOgorLy8JCQlOdW1iZXIgb2YgbWF0Y2hlZCBjaGFyYWN0ZXJzLgorLy8KK0RMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGVGV4dF9HZXRTY2hDb3VudChGUERGX1NDSEhBTkRMRSBoYW5kbGUpOworCisvLyBGdW5jdGlvbjogRlBERlRleHRfRmluZENsb3NlCisvLwkJCVJlbGVhc2UgYSBzZWFyY2ggY29udGV4dC4KKy8vIFBhcmFtZXRlcnM6CisvLwkJCWhhbmRsZQkJLQlBIHNlYXJjaCBjb250ZXh0IGhhbmRsZSByZXR1cm5lZCBieSBGUERGVGV4dF9GaW5kU3RhcnQuCisvLyBSZXR1cm4gVmFsdWU6CisvLwkJCU5vbmUuCisvLworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGVGV4dF9GaW5kQ2xvc2UoRlBERl9TQ0hIQU5ETEUgaGFuZGxlKTsKKworLy8gRnVuY3Rpb246IEZQREZMaW5rX0xvYWRXZWJMaW5rcworLy8JCQlQcmVwYXJlIGluZm9ybWF0aW9uIGFib3V0IHdlYmxpbmtzIGluIGEgcGFnZS4KKy8vIFBhcmFtZXRlcnM6CisvLwkJCXRleHRfcGFnZQktCUhhbmRsZSB0byBhIHRleHQgcGFnZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuIFJldHVybmVkIGJ5IEZQREZUZXh0X0xvYWRQYWdlIGZ1bmN0aW9uLgorLy8gUmV0dXJuIFZhbHVlOgkKKy8vCQkJQSBoYW5kbGUgdG8gdGhlIHBhZ2UncyBsaW5rcyBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuCisvLwkJCU5VTEwgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuCisvLyBDb21tZW50czoKKy8vCQkJV2VibGlua3MgYXJlIHRob3NlIGxpbmtzIGltcGxpY2l0bHkgZW1iZWRkZWQgaW4gUERGIHBhZ2VzLiBQREYgYWxzbyBoYXMgYSB0eXBlIG9mCisvLwkJCWFubm90YXRpb24gY2FsbGVkICJsaW5rIiwgRlBERlRFWFQgZG9lc24ndCBkZWFsIHdpdGggdGhhdCBraW5kIG9mIGxpbmsuCisvLwkJCUZQREZURVhUIHdlYmxpbmsgZmVhdHVyZSBpcyB1c2VmdWwgZm9yIGF1dG9tYXRpY2FsbHkgZGV0ZWN0aW5nIGxpbmtzIGluIHRoZSBwYWdlCisvLwkJCWNvbnRlbnRzLiBGb3IgZXhhbXBsZSwgdGhpbmdzIGxpa2UgImh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20iIHdpbGwgYmUgZGV0ZWN0ZWQsCisvLwkJCXNvIGFwcGxpY2F0aW9ucyBjYW4gYWxsb3cgdXNlciB0byBjbGljayBvbiB0aG9zZSBjaGFyYWN0ZXJzIHRvIGFjdGl2YXRlIHRoZSBsaW5rLAorLy8JCQlldmVuIHRoZSBQREYgZG9lc24ndCBjb21lIHdpdGggbGluayBhbm5vdGF0aW9ucy4KKy8vCisvLwkJCUZQREZMaW5rX0Nsb3NlV2ViTGlua3MgbXVzdCBiZSBjYWxsZWQgdG8gcmVsZWFzZSByZXNvdXJjZXMuCisvLworRExMRVhQT1JUIEZQREZfUEFHRUxJTksgU1REQ0FMTCBGUERGTGlua19Mb2FkV2ViTGlua3MoRlBERl9URVhUUEFHRSB0ZXh0X3BhZ2UpOworCisvLyBGdW5jdGlvbjogRlBERkxpbmtfQ291bnRXZWJMaW5rcworLy8JCQlDb3VudCBudW1iZXIgb2YgZGV0ZWN0ZWQgd2ViIGxpbmtzLgorLy8gUGFyYW1ldGVyczoKKy8vCQkJbGlua19wYWdlCS0JSGFuZGxlIHJldHVybmVkIGJ5IEZQREZMaW5rX0xvYWRXZWJMaW5rcy4KKy8vIFJldHVybiBWYWx1ZToKKy8vCQkJTnVtYmVyIG9mIGRldGVjdGVkIHdlYiBsaW5rcy4KKy8vCitETExFWFBPUlQgaW50IFNURENBTEwgRlBERkxpbmtfQ291bnRXZWJMaW5rcyhGUERGX1BBR0VMSU5LIGxpbmtfcGFnZSk7CisKKy8vIEZ1bmN0aW9uOiBGUERGTGlua19HZXRVUkwKKy8vCQkJRmV0Y2ggdGhlIFVSTCBpbmZvcm1hdGlvbiBmb3IgYSBkZXRlY3RlZCB3ZWIgbGluay4KKy8vIFBhcmFtZXRlcnM6CisvLwkJCWxpbmtfcGFnZQktCUhhbmRsZSByZXR1cm5lZCBieSBGUERGTGlua19Mb2FkV2ViTGlua3MuCisvLwkJCWxpbmtfaW5kZXgJLQlaZXJvLWJhc2VkIGluZGV4IGZvciB0aGUgbGluay4KKy8vCQkJYnVmZmVyCQktCUEgdW5pY29kZSBidWZmZXIuCisvLwkJCWJ1ZmxlbgkJLQlOdW1iZXIgb2YgY2hhcmFjdGVycyAobm90IGJ5dGVzKSBmb3IgdGhlIGJ1ZmZlciwgaW5jbHVkaW5nIGFuIGFkZGl0aW9uYWwgdGVybWluYXRvci4KKy8vIFJldHVybiBWYWx1ZToKKy8vCQkJSWYgYnVmZmVyIGlzIE5VTEwgb3IgYnVmbGVuIGlzIHplcm8sIHJldHVybiBudW1iZXIgb2YgY2hhcmFjdGVycyAobm90IGJ5dGVzIGFuZCBhbiBhZGRpdGlvbmFsIHRlcm1pbmF0b3IgaXMgYWxzbyBjb3VudGVkKSBuZWVkZWQsCisvLwkJCW90aGVyd2lzZSwgcmV0dXJuIG51bWJlciBvZiBjaGFyYWN0ZXJzIGNvcGllZCBpbnRvIHRoZSBidWZmZXIuCisvLworRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZMaW5rX0dldFVSTChGUERGX1BBR0VMSU5LIGxpbmtfcGFnZSwgaW50IGxpbmtfaW5kZXgsIHVuc2lnbmVkIHNob3J0KiBidWZmZXIsaW50IGJ1Zmxlbik7CisKKy8vIEZ1bmN0aW9uOiBGUERGTGlua19Db3VudFJlY3RzCisvLwkJCUNvdW50IG51bWJlciBvZiByZWN0YW5ndWxhciBhcmVhcyBmb3IgdGhlIGxpbmsuCisvLyBQYXJhbWV0ZXJzOgorLy8JCQlsaW5rX3BhZ2UJLQlIYW5kbGUgcmV0dXJuZWQgYnkgRlBERkxpbmtfTG9hZFdlYkxpbmtzLgorLy8JCQlsaW5rX2luZGV4CS0JWmVyby1iYXNlZCBpbmRleCBmb3IgdGhlIGxpbmsuCisvLyBSZXR1cm4gVmFsdWU6CisvLwkJCU51bWJlciBvZiByZWN0YW5ndWxhciBhcmVhcyBmb3IgdGhlIGxpbmsuCisvLworRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZMaW5rX0NvdW50UmVjdHMoRlBERl9QQUdFTElOSyBsaW5rX3BhZ2UsIGludCBsaW5rX2luZGV4KTsKKworLy8gRnVuY3Rpb246IEZQREZMaW5rX0dldFJlY3QKKy8vCQkJRmV0Y2ggdGhlIGJvdW5kYXJpZXMgb2YgYSByZWN0YW5nbGUgZm9yIGEgbGluay4KKy8vIFBhcmFtZXRlcnM6CisvLwkJCWxpbmtfcGFnZQktCUhhbmRsZSByZXR1cm5lZCBieSBGUERGTGlua19Mb2FkV2ViTGlua3MuCisvLwkJCWxpbmtfaW5kZXgJLQlaZXJvLWJhc2VkIGluZGV4IGZvciB0aGUgbGluay4KKy8vCQkJcmVjdF9pbmRleAktCVplcm8tYmFzZWQgaW5kZXggZm9yIGEgcmVjdGFuZ2xlLgorLy8JCQlsZWZ0CQktCVBvaW50ZXIgdG8gYSBkb3VibGUgdmFsdWUgcmVjZWl2aW5nIHRoZSByZWN0YW5nbGUgbGVmdCBib3VuZGFyeS4KKy8vCQkJdG9wCQkJLQlQb2ludGVyIHRvIGEgZG91YmxlIHZhbHVlIHJlY2VpdmluZyB0aGUgcmVjdGFuZ2xlIHRvcCBib3VuZGFyeS4KKy8vCQkJcmlnaHQJCS0JUG9pbnRlciB0byBhIGRvdWJsZSB2YWx1ZSByZWNlaXZpbmcgdGhlIHJlY3RhbmdsZSByaWdodCBib3VuZGFyeS4KKy8vCQkJYm90dG9tCQktCVBvaW50ZXIgdG8gYSBkb3VibGUgdmFsdWUgcmVjZWl2aW5nIHRoZSByZWN0YW5nbGUgYm90dG9tIGJvdW5kYXJ5LgorLy8gUmV0dXJuIFZhbHVlOgorLy8JCQlOb25lLgorLy8KK0RMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERkxpbmtfR2V0UmVjdChGUERGX1BBR0VMSU5LIGxpbmtfcGFnZSwgaW50IGxpbmtfaW5kZXgsIGludCByZWN0X2luZGV4LCAKKwkJCQkJCQkJCQlkb3VibGUqIGxlZnQsIGRvdWJsZSogdG9wLGRvdWJsZSogcmlnaHQsIGRvdWJsZSogYm90dG9tKTsKKworLy8gRnVuY3Rpb246IEZQREZMaW5rX0Nsb3NlV2ViTGlua3MKKy8vCQkJUmVsZWFzZSByZXNvdXJjZXMgdXNlZCBieSB3ZWJsaW5rIGZlYXR1cmUuCisvLyBQYXJhbWV0ZXJzOgorLy8JCQlsaW5rX3BhZ2UJLQlIYW5kbGUgcmV0dXJuZWQgYnkgRlBERkxpbmtfTG9hZFdlYkxpbmtzLgorLy8gUmV0dXJuIFZhbHVlOgorLy8JCQlOb25lLgorLy8KK0RMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERkxpbmtfQ2xvc2VXZWJMaW5rcyhGUERGX1BBR0VMSU5LIGxpbmtfcGFnZSk7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9OworI2VuZGlmCisKKyNlbmRpZi8vX0ZQREZURVhUX0hfCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvZnBkZnZpZXcuaCBiL2ZwZGZzZGsvaW5jbHVkZS9mcGRmdmlldy5oCmluZGV4IDE4MmQzY2YuLmE1NjM3NjIgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9mcGRmdmlldy5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9mcGRmdmlldy5oCkBAIC0xLDU3OCArMSw1NzggQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLQ0KLSNpZm5kZWYgX0ZQREZWSUVXX0hfDQotI2RlZmluZSBfRlBERlZJRVdfSF8NCi0NCi0jaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fV0lORE9XU19fKQ0KLSNpbmNsdWRlIDx3aW5kb3dzLmg+DQotI2VuZGlmDQotDQotLy8gRGF0YSB0eXBlcw0KLXR5cGVkZWYgdm9pZCoJRlBERl9NT0RVTEVNR1I7DQotDQotLy8gUERGIHR5cGVzDQotdHlwZWRlZiB2b2lkKglGUERGX0RPQ1VNRU5UOwkJDQotdHlwZWRlZiB2b2lkKglGUERGX1BBR0U7CQkJDQotdHlwZWRlZiB2b2lkKglGUERGX1BBR0VPQkpFQ1Q7CS8vIFBhZ2Ugb2JqZWN0KHRleHQsIHBhdGgsIGV0YykNCi10eXBlZGVmIHZvaWQqCUZQREZfUEFUSDsNCi10eXBlZGVmIHZvaWQqCUZQREZfQ0xJUFBBVEg7CQ0KLXR5cGVkZWYgdm9pZCoJRlBERl9CSVRNQVA7CQ0KLXR5cGVkZWYgdm9pZCoJRlBERl9GT05UOwkJCQ0KLQ0KLXR5cGVkZWYgdm9pZCoJRlBERl9URVhUUEFHRTsNCi10eXBlZGVmIHZvaWQqCUZQREZfU0NISEFORExFOw0KLXR5cGVkZWYgdm9pZCoJRlBERl9QQUdFTElOSzsNCi10eXBlZGVmIHZvaWQqCUZQREZfSE1PRFVMRTsNCi10eXBlZGVmIHZvaWQqCUZQREZfRE9DU0NISEFORExFOw0KLQ0KLXR5cGVkZWYgdm9pZCoJRlBERl9CT09LTUFSSzsNCi10eXBlZGVmIHZvaWQqCUZQREZfREVTVDsNCi10eXBlZGVmIHZvaWQqCUZQREZfQUNUSU9OOw0KLXR5cGVkZWYgdm9pZCoJRlBERl9MSU5LOw0KLQ0KLS8vIEJhc2ljIGRhdGEgdHlwZXMNCi10eXBlZGVmIGludAkJCQlGUERGX0JPT0w7DQotdHlwZWRlZiBpbnQJCQkJRlBERl9FUlJPUjsJDQotdHlwZWRlZiB1bnNpZ25lZCBsb25nCUZQREZfRFdPUkQ7DQotDQotdHlwZWRlZglmbG9hdAkJCUZTX0ZMT0FUOw0KLQ0KLS8vIFN0cmluZyB0eXBlcw0KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQJCQlGUERGX1dDSEFSOw0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciBjb25zdCoJRlBERl9MUENCWVRFOw0KLQ0KLS8vIEZQREZTREsgbWF5IHVzZSB0aHJlZSB0eXBlcyBvZiBzdHJpbmdzOiBieXRlIHN0cmluZywgd2lkZSBzdHJpbmcgKFVURi0xNkxFIGVuY29kZWQpLCBhbmQgcGxhdGZvcm0gZGVwZW5kZW50IHN0cmluZw0KLXR5cGVkZWYgY29uc3QgY2hhcioJCQkJRlBERl9CWVRFU1RSSU5HOw0KLQ0KLXR5cGVkZWYgY29uc3QgdW5zaWduZWQgc2hvcnQqCUZQREZfV0lERVNUUklORzsJCS8vIEZveGl0IFBERiBTREsgYWx3YXlzIHVzZSBVVEYtMTZMRSBlbmNvZGluZyB3aWRlIHN0cmluZywNCi0JCQkJCQkJCQkJCQkJCS8vIGVhY2ggY2hhcmFjdGVyIHVzZSAyIGJ5dGVzIChleGNlcHQgc3Vycm9nYXRpb24pLCB3aXRoIGxvdyBieXRlIGZpcnN0Lg0KLQ0KLS8vIEZvciBXaW5kb3dzIHByb2dyYW1tZXJzOiBmb3IgbW9zdCBjYXNlIGl0J3MgT0sgdG8gdHJlYXQgRlBERl9XSURFU1RSSU5HIGFzIFdpbmRvd3MgdW5pY29kZSBzdHJpbmcsDQotLy8JCSBob3dldmVyLCBzcGVjaWFsIGNhcmUgbmVlZHMgdG8gYmUgdGFrZW4gaWYgeW91IGV4cGVjdCB0byBwcm9jZXNzIFVuaWNvZGUgbGFyZ2VyIHRoYW4gMHhmZmZmLg0KLS8vIEZvciBMaW51eC9Vbml4IHByb2dyYW1tZXJzOiBtb3N0IGNvbXBpbGVyL2xpYnJhcnkgZW52aXJvbm1lbnQgdXNlcyA0IGJ5dGVzIGZvciBhIFVuaWNvZGUgY2hhcmFjdGVyLA0KLS8vCQl5b3UgaGF2ZSB0byBjb252ZXJ0IGJldHdlZW4gRlBERl9XSURFU1RSSU5HIGFuZCBzeXN0ZW0gd2lkZSBzdHJpbmcgYnkgeW91cnNlbGYuDQotDQotI2lmZGVmIF9XSU4zMl9XQ0UNCi10eXBlZGVmIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBGUERGX1NUUklORzsNCi0jZWxzZQ0KLXR5cGVkZWYgY29uc3QgY2hhciogRlBERl9TVFJJTkc7DQotI2VuZGlmDQotDQotI2lmbmRlZiBfRlNfREVGX01BVFJJWF8NCi0jZGVmaW5lIF9GU19ERUZfTUFUUklYXw0KLS8qKiBAYnJpZWYgTWF0cml4IGZvciB0cmFuc2Zvcm1hdGlvbi4gKi8NCi10eXBlZGVmIHN0cnVjdCBfRlNfTUFUUklYXw0KLXsNCi0JZmxvYXQJYTsJLyoqPCBAYnJpZWYgQ29lZmZpY2llbnQgYS4qLw0KLQlmbG9hdAliOwkvKio8IEBicmllZiBDb2VmZmljaWVudCBiLiovDQotCWZsb2F0CWM7CS8qKjwgQGJyaWVmIENvZWZmaWNpZW50IGMuKi8NCi0JZmxvYXQJZDsJLyoqPCBAYnJpZWYgQ29lZmZpY2llbnQgZC4qLw0KLQlmbG9hdAllOwkvKio8IEBicmllZiBDb2VmZmljaWVudCBlLiovDQotCWZsb2F0CWY7CS8qKjwgQGJyaWVmIENvZWZmaWNpZW50IGYuKi8NCi19IEZTX01BVFJJWDsNCi0jZW5kaWYNCi0NCi0jaWZuZGVmIF9GU19ERUZfUkVDVEZfDQotI2RlZmluZSBfRlNfREVGX1JFQ1RGXw0KLS8qKiBAYnJpZWYgUmVjdGFuZ2xlIGFyZWEoZmxvYXQpIGluIGRldmljZSBvciBwYWdlIGNvb3JkaW5hdGlvbiBzeXN0ZW0uICovDQotdHlwZWRlZiBzdHJ1Y3QgX0ZTX1JFQ1RGXw0KLXsNCi0JLyoqQHsqLw0KLQkvKiogQGJyaWVmIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIGxlZnQtdG9wIGNvcm5lci4gKi8NCi0JZmxvYXQJbGVmdDsNCi0JLyoqIEBicmllZiBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBsZWZ0LXRvcCBjb3JuZXIuICovDQotCWZsb2F0CXRvcDsNCi0JLyoqIEBicmllZiBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSByaWdodC1ib3R0b20gY29ybmVyLiAqLw0KLQlmbG9hdAlyaWdodDsNCi0JLyoqIEBicmllZiBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSByaWdodC1ib3R0b20gY29ybmVyLiAqLw0KLQlmbG9hdAlib3R0b207DQotCS8qKkB9Ki8NCi19KiBGU19MUFJFQ1RGLCBGU19SRUNURjsNCi0vKiogQGJyaWVmIENvbnN0IFBvaW50ZXIgdG8gOjpGU19SRUNURiBzdHJ1Y3R1cmUuKi8NCi10eXBlZGVmIGNvbnN0IEZTX1JFQ1RGKglGU19MUENSRUNURjsNCi0jZW5kaWYNCi0NCi0jaWYgZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoRlBERlNES19FWFBPUlRTKQ0KLS8vIE9uIFdpbmRvd3Mgc3lzdGVtLCBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGluIGEgRExMDQotI2RlZmluZSBETExFWFBPUlQgX19kZWNsc3BlYyggZGxsZXhwb3J0ICkNCi0jZGVmaW5lIFNURENBTEwgX19zdGRjYWxsDQotI2Vsc2UNCi0jZGVmaW5lIERMTEVYUE9SVA0KLSNkZWZpbmUgU1REQ0FMTA0KLSNlbmRpZg0KLQ0KLWV4dGVybiBjb25zdCBjaGFyIGdfRXhwaXJlRGF0ZVtdOw0KLWV4dGVybiBjb25zdCBjaGFyIGdfTW9kdWxlQ29kZXNbXTsNCi0NCi0vLyBFeHBvcnRlZCBGdW5jdGlvbnMNCi0jaWZkZWYgX19jcGx1c3BsdXMNCi1leHRlcm4gIkMiIHsNCi0jZW5kaWYNCi0NCi0vLyBGdW5jdGlvbjogRlBERl9Jbml0TGlicmFyeQ0KLS8vCQkJSW5pdGlhbGl6ZSB0aGUgRlBERlNESyBsaWJyYXJ5IA0KLS8vIFBhcmFtZXRlcnM6DQotLy8JCQloSW5zdGFuY2UJLQlGb3IgV0lOMzIgc3lzdGVtIG9ubHk6IHRoZSBpbnN0YW5jZSBvZiB0aGUgZXhlY3V0YWJsZSBvciBETEwgbW9kdWxlLg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCU5vbmUuDQotLy8gQ29tbWVudHM6DQotLy8JCQlZb3UgaGF2ZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIHlvdSBjYW4gY2FsbCBhbnkgUERGIHByb2Nlc3NpbmcgZnVuY3Rpb25zLg0KLQ0KLURMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERl9Jbml0TGlicmFyeSh2b2lkKiBoSW5zdGFuY2UpOw0KLQ0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGX0Rlc3Ryb3lMaWJhcnkNCi0vLwkJCVJlbGVhc2UgYWxsIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgdGhlIEZQREZTREsgbGlicmFyeS4NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vCQkJTm9uZS4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlOb25lLg0KLS8vIENvbW1lbnRzOg0KLS8vCQkJWW91IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gcmVsZWFzZSBhbGwgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgdGhlIGxpYnJhcnkuIA0KLS8vCQkJQWZ0ZXIgdGhpcyBmdW5jdGlvbiBjYWxsZWQsIHlvdSBzaG91bGQgbm90IGNhbGwgYW55IFBERiBwcm9jZXNzaW5nIGZ1bmN0aW9ucy4NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZfRGVzdHJveUxpYnJhcnkoKTsNCi0NCi0vL1BvbGljeSBmb3IgYWNjZXNzaW5nIHRoZSBsb2NhbCBtYWNoaW5lIHRpbWUuDQotI2RlZmluZSBGUERGX1BPTElDWV9NQUNISU5FVElNRV9BQ0NFU1MJMA0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGX1NldFNhbmRCb3hQb2xpY3kNCi0vLwkJCVNldCB0aGUgcG9saWN5IGZvciB0aGUgc2FuZGJveCBlbnZpcm9ubWVudC4NCi0vLyBQYXJhbWV0ZXJzOgkNCi0vLwkJCXBvbGljeQkJLQlUaGUgc3BlY2lmaWVkIHBvbGljeSBmb3Igc2V0dGluZywgZm9yIGV4YW1wbGU6RlBERl9QT0xJQ1lfTUFDSElORVRJTUVfQUNDRVNTLg0KLS8vCQkJZW5hYmxlCQktCVRydWUgZm9yIGVuYWJsZSwgRmFsc2UgZm9yIGRpc2FibGUgdGhlIHBvbGljeS4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlOb25lLg0KLURMTEVYUE9SVCB2b2lkCVNURENBTEwgRlBERl9TZXRTYW5kQm94UG9saWN5KEZQREZfRFdPUkQgcG9saWN5LCBGUERGX0JPT0wgZW5hYmxlKTsNCi0NCi0vKioNCi0qIE9wZW4gYW5kIGxvYWQgYSBQREYgZG9jdW1lbnQuDQotKiBAcGFyYW1baW5dIGZpbGVfcGF0aAktCVBhdGggdG8gdGhlIFBERiBmaWxlIChpbmNsdWRpbmcgZXh0ZW5zaW9uKS4NCi0qIEBwYXJhbVtpbl0gcGFzc3dvcmQJLQlBIHN0cmluZyB1c2VkIGFzIHRoZSBwYXNzd29yZCBmb3IgUERGIGZpbGUuIA0KLSoJCQkJCQkJSWYgbm8gcGFzc3dvcmQgbmVlZGVkLCBlbXB0eSBvciBOVUxMIGNhbiBiZSB1c2VkLg0KLSogQG5vdGUJCUxvYWRlZCBkb2N1bWVudCBjYW4gYmUgY2xvc2VkIGJ5IEZQREZfQ2xvc2VEb2N1bWVudC4NCi0qCQkJSWYgdGhpcyBmdW5jdGlvbiBmYWlscywgeW91IGNhbiB1c2UgRlBERl9HZXRMYXN0RXJyb3IoKSB0byByZXRyaWV2ZQ0KLSoJCQl0aGUgcmVhc29uIHdoeSBpdCBmYWlscy4NCi0qIEByZXR2YWwJQSBoYW5kbGUgdG8gdGhlIGxvYWRlZCBkb2N1bWVudC4gSWYgZmFpbGVkLCBOVUxMIGlzIHJldHVybmVkLg0KLSovDQotRExMRVhQT1JUIEZQREZfRE9DVU1FTlQJU1REQ0FMTCBGUERGX0xvYWREb2N1bWVudChGUERGX1NUUklORyBmaWxlX3BhdGgsIA0KLQlGUERGX0JZVEVTVFJJTkcgcGFzc3dvcmQpOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGX0xvYWRNZW1Eb2N1bWVudA0KLS8vCQkJT3BlbiBhbmQgbG9hZCBhIFBERiBkb2N1bWVudCBmcm9tIG1lbW9yeS4NCi0vLyBQYXJhbWV0ZXJzOiANCi0vLwkJCWRhdGFfYnVmCS0JUG9pbnRlciB0byBhIGJ1ZmZlciBjb250YWluaW5nIHRoZSBQREYgZG9jdW1lbnQuDQotLy8JCQlzaXplCQktCU51bWJlciBvZiBieXRlcyBpbiB0aGUgUERGIGRvY3VtZW50Lg0KLS8vCQkJcGFzc3dvcmQJLQlBIHN0cmluZyB1c2VkIGFzIHRoZSBwYXNzd29yZCBmb3IgUERGIGZpbGUuIA0KLS8vCQkJCQkJCUlmIG5vIHBhc3N3b3JkIG5lZWRlZCwgZW1wdHkgb3IgTlVMTCBjYW4gYmUgdXNlZC4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlBIGhhbmRsZSB0byB0aGUgbG9hZGVkIGRvY3VtZW50LiBJZiBmYWlsZWQsIE5VTEwgaXMgcmV0dXJuZWQuDQotLy8gQ29tbWVudHM6DQotLy8JCQlUaGUgbWVtb3J5IGJ1ZmZlciBtdXN0IHJlbWFpbiB2YWxpZCB3aGVuIHRoZSBkb2N1bWVudCBpcyBvcGVuLg0KLS8vCQkJTG9hZGVkIGRvY3VtZW50IGNhbiBiZSBjbG9zZWQgYnkgRlBERl9DbG9zZURvY3VtZW50Lg0KLS8vCQkJSWYgdGhpcyBmdW5jdGlvbiBmYWlscywgeW91IGNhbiB1c2UgRlBERl9HZXRMYXN0RXJyb3IoKSB0byByZXRyaWV2ZQ0KLS8vCQkJdGhlIHJlYXNvbiB3aHkgaXQgZmFpbHMuDQotLy8NCi1ETExFWFBPUlQgRlBERl9ET0NVTUVOVAlTVERDQUxMIEZQREZfTG9hZE1lbURvY3VtZW50KGNvbnN0IHZvaWQqIGRhdGFfYnVmLCANCi0JCQkJCQkJCQkJCWludCBzaXplLCBGUERGX0JZVEVTVFJJTkcgcGFzc3dvcmQpOw0KLQ0KLS8vIFN0cnVjdHVyZSBmb3IgY3VzdG9tIGZpbGUgYWNjZXNzLg0KLXR5cGVkZWYgc3RydWN0IHsNCi0JLy8gRmlsZSBsZW5ndGgsIGluIGJ5dGVzLg0KLQl1bnNpZ25lZCBsb25nCW1fRmlsZUxlbjsNCi0NCi0JLy8gQSBmdW5jdGlvbiBwb2ludGVyIGZvciBnZXR0aW5nIGEgYmxvY2sgb2YgZGF0YSBmcm9tIHNwZWNpZmljIHBvc2l0aW9uLg0KLQkvLyBQb3NpdGlvbiBpcyBzcGVjaWZpZWQgYnkgYnl0ZSBvZmZzZXQgZnJvbSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuDQotCS8vIFRoZSBwb3NpdGlvbiBhbmQgc2l6ZSB3aWxsIG5ldmVyIGdvIG91dCByYW5nZSBvZiBmaWxlIGxlbmd0aC4NCi0JLy8gSXQgbWF5IGJlIHBvc3NpYmxlIGZvciBGUERGU0RLIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcyBmb3Igc2FtZSBwb3NpdGlvbi4NCi0JLy8gUmV0dXJuIHZhbHVlOiBzaG91bGQgYmUgbm9uLXplcm8gaWYgc3VjY2Vzc2Z1bCwgemVybyBmb3IgZXJyb3IuDQotCWludAkJCQkoKm1fR2V0QmxvY2spKHZvaWQqIHBhcmFtLCB1bnNpZ25lZCBsb25nIHBvc2l0aW9uLCB1bnNpZ25lZCBjaGFyKiBwQnVmLCB1bnNpZ25lZCBsb25nIHNpemUpOw0KLQ0KLQkvLyBBIGN1c3RvbSBwb2ludGVyIGZvciBhbGwgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgZGF0YS4NCi0JLy8gVGhpcyBwb2ludGVyIHdpbGwgYmUgdXNlZCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIG1fR2V0QmxvY2sgY2FsbGJhY2suDQotCXZvaWQqCQkJbV9QYXJhbTsNCi19IEZQREZfRklMRUFDQ0VTUzsNCi0NCi0vLyBGdW5jdGlvbjogRlBERl9Mb2FkQ3VzdG9tRG9jdW1lbnQNCi0vLwkJCUxvYWQgUERGIGRvY3VtZW50IGZyb20gYSBjdXN0b20gYWNjZXNzIGRlc2NyaXB0b3IuDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCXBGaWxlQWNjZXNzCS0JQSBzdHJ1Y3R1cmUgZm9yIGFjY2VzcyB0aGUgZmlsZS4NCi0vLwkJCXBhc3N3b3JkCS0JT3B0aW9uYWwgcGFzc3dvcmQgZm9yIGRlY3J5cHRpbmcgdGhlIFBERiBmaWxlLg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCUEgaGFuZGxlIHRvIHRoZSBsb2FkZWQgZG9jdW1lbnQuIElmIGZhaWxlZCwgTlVMTCBpcyByZXR1cm5lZC4NCi0vLyBDb21tZW50czoNCi0vLwkJCVRoZSBhcHBsaWNhdGlvbiBzaG91bGQgbWFpbnRhaW4gdGhlIGZpbGUgcmVzb3VyY2VzIGJlaW5nIHZhbGlkIHVudGlsIHRoZSBQREYgZG9jdW1lbnQgY2xvc2UuDQotLy8JCQlMb2FkZWQgZG9jdW1lbnQgY2FuIGJlIGNsb3NlZCBieSBGUERGX0Nsb3NlRG9jdW1lbnQuDQotRExMRVhQT1JUIEZQREZfRE9DVU1FTlQgU1REQ0FMTCBGUERGX0xvYWRDdXN0b21Eb2N1bWVudChGUERGX0ZJTEVBQ0NFU1MqIHBGaWxlQWNjZXNzLCANCi0JCQkJCQkJCQkJCQkJCUZQREZfQllURVNUUklORyBwYXNzd29yZCk7DQotDQotLy8gRnVuY3Rpb246IEZQREZfR2V0RmlsZVZlcnNpb24NCi0vLwkJCUdldCB0aGUgZmlsZSB2ZXJzaW9uIG9mIHRoZSBzcGVjaWZpYyBQREYgZG9jdW1lbnQuDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCWRvYwkJCS0JSGFuZGxlIHRvIGRvY3VtZW50Lg0KLS8vCQkJZmlsZVZlcnNpb24JLQlUaGUgUERGIGZpbGUgdmVyc2lvbi4gRmlsZSB2ZXJzaW9uOiAxNCBmb3IgMS40LCAxNSBmb3IgMS41LCAuLi4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlUUlVFIGlmIHRoaXMgY2FsbCBzdWNjZWVkLCBJZiBmYWlsZWQsIEZBTFNFIGlzIHJldHVybmVkLg0KLS8vIENvbW1lbnRzOg0KLS8vCQkJSWYgdGhlIGRvY3VtZW50IGlzIGNyZWF0ZWQgYnkgZnVuY3Rpb24gOjpGUERGX0NyZWF0ZU5ld0RvY3VtZW50LCB0aGVuIHRoaXMgZnVuY3Rpb24gd291bGQgYWx3YXlzIGZhaWwuDQotRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZfR2V0RmlsZVZlcnNpb24oRlBERl9ET0NVTUVOVCBkb2MsIGludCogZmlsZVZlcnNpb24pOw0KLQ0KLSNkZWZpbmUgRlBERl9FUlJfU1VDQ0VTUwkJMAkJLy8gTm8gZXJyb3IuDQotI2RlZmluZSBGUERGX0VSUl9VTktOT1dOCQkxCQkvLyBVbmtub3duIGVycm9yLg0KLSNkZWZpbmUgRlBERl9FUlJfRklMRQkJCTIJCS8vIEZpbGUgbm90IGZvdW5kIG9yIGNvdWxkIG5vdCBiZSBvcGVuZWQuDQotI2RlZmluZSBGUERGX0VSUl9GT1JNQVQJCQkzCQkvLyBGaWxlIG5vdCBpbiBQREYgZm9ybWF0IG9yIGNvcnJ1cHRlZC4NCi0jZGVmaW5lIEZQREZfRVJSX1BBU1NXT1JECQk0CQkvLyBQYXNzd29yZCByZXF1aXJlZCBvciBpbmNvcnJlY3QgcGFzc3dvcmQuDQotI2RlZmluZSBGUERGX0VSUl9TRUNVUklUWQkJNQkJLy8gVW5zdXBwb3J0ZWQgc2VjdXJpdHkgc2NoZW1lLg0KLSNkZWZpbmUgRlBERl9FUlJfUEFHRQkJCTYJCS8vIFBhZ2Ugbm90IGZvdW5kIG9yIGNvbnRlbnQgZXJyb3IuDQotDQotLy8gRnVuY3Rpb246IEZQREZfR2V0TGFzdEVycm9yDQotLy8JCQlHZXQgbGFzdCBlcnJvciBjb2RlIHdoZW4gYW4gU0RLIGZ1bmN0aW9uIGZhaWxlZC4NCi0vLyBQYXJhbWV0ZXJzOiANCi0vLwkJCU5vbmUuDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJQSAzMi1iaXQgaW50ZWdlciBpbmRpY2F0aW5nIGVycm9yIGNvZGVzIChkZWZpbmVkIGFib3ZlKS4NCi0vLyBDb21tZW50czoNCi0vLwkJCUlmIHRoZSBwcmV2aW91cyBTREsgY2FsbCBzdWNjZWVkZWQsIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBmdW5jdGlvbg0KLS8vCQkJaXMgbm90IGRlZmluZWQuDQotLy8NCi1ETExFWFBPUlQgdW5zaWduZWQgbG9uZwlTVERDQUxMIEZQREZfR2V0TGFzdEVycm9yKCk7DQotDQotLy8gRnVuY3Rpb246IEZQREZfR2V0RG9jUGVybWlzc2lvbg0KLS8vCQkJR2V0IGZpbGUgcGVybWlzc2lvbiBmbGFncyBvZiB0aGUgZG9jdW1lbnQuDQotLy8gUGFyYW1ldGVyczogDQotLy8JCQlkb2N1bWVudAktCUhhbmRsZSB0byBkb2N1bWVudC4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkRG9jdW1lbnQgZnVuY3Rpb24uDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJQSAzMi1iaXQgaW50ZWdlciBpbmRpY2F0aW5nIHBlcm1pc3Npb24gZmxhZ3MuIFBsZWFzZSByZWZlciB0byBQREYgUmVmZXJlbmNlIGZvcg0KLS8vCQkJZGV0YWlsZWQgZGVzY3JpcHRpb24uIElmIHRoZSBkb2N1bWVudCBpcyBub3QgcHJvdGVjdGVkLCAweGZmZmZmZmZmIHdpbGwgYmUgcmV0dXJuZWQuDQotLy8NCi1ETExFWFBPUlQgdW5zaWduZWQgbG9uZwlTVERDQUxMIEZQREZfR2V0RG9jUGVybWlzc2lvbnMoRlBERl9ET0NVTUVOVCBkb2N1bWVudCk7DQotDQotLy8gRnVuY3Rpb246IEZQREZfR2V0UGFnZUNvdW50DQotLy8JCQlHZXQgdG90YWwgbnVtYmVyIG9mIHBhZ2VzIGluIGEgZG9jdW1lbnQuDQotLy8gUGFyYW1ldGVyczogDQotLy8JCQlkb2N1bWVudAktCUhhbmRsZSB0byBkb2N1bWVudC4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkRG9jdW1lbnQgZnVuY3Rpb24uDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJVG90YWwgbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBkb2N1bWVudC4NCi0vLw0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGX0dldFBhZ2VDb3VudChGUERGX0RPQ1VNRU5UIGRvY3VtZW50KTsNCi0NCi0vLyBGdW5jdGlvbjogRlBERl9Mb2FkUGFnZQ0KLS8vCQkJTG9hZCBhIHBhZ2UgaW5zaWRlIGEgZG9jdW1lbnQuDQotLy8gUGFyYW1ldGVyczogDQotLy8JCQlkb2N1bWVudAktCUhhbmRsZSB0byBkb2N1bWVudC4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkRG9jdW1lbnQgZnVuY3Rpb24uDQotLy8JCQlwYWdlX2luZGV4CS0JSW5kZXggbnVtYmVyIG9mIHRoZSBwYWdlLiAwIGZvciB0aGUgZmlyc3QgcGFnZS4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlBIGhhbmRsZSB0byB0aGUgbG9hZGVkIHBhZ2UuIElmIGZhaWxlZCwgTlVMTCBpcyByZXR1cm5lZC4NCi0vLyBDb21tZW50czoNCi0vLwkJCUxvYWRlZCBwYWdlIGNhbiBiZSByZW5kZXJlZCB0byBkZXZpY2VzIHVzaW5nIEZQREZfUmVuZGVyUGFnZSBmdW5jdGlvbi4NCi0vLwkJCUxvYWRlZCBwYWdlIGNhbiBiZSBjbG9zZWQgYnkgRlBERl9DbG9zZVBhZ2UuDQotLy8NCi1ETExFWFBPUlQgRlBERl9QQUdFCVNURENBTEwgRlBERl9Mb2FkUGFnZShGUERGX0RPQ1VNRU5UIGRvY3VtZW50LCBpbnQgcGFnZV9pbmRleCk7DQotDQotLy8gRnVuY3Rpb246IEZQREZfR2V0UGFnZVdpZHRoDQotLy8JCQlHZXQgcGFnZSB3aWR0aC4NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vCQkJcGFnZQkJLQlIYW5kbGUgdG8gdGhlIHBhZ2UuIFJldHVybmVkIGJ5IEZQREZfTG9hZFBhZ2UgZnVuY3Rpb24uDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJUGFnZSB3aWR0aCAoZXhjbHVkaW5nIG5vbi1kaXNwbGF5YWJsZSBhcmVhKSBtZWFzdXJlZCBpbiBwb2ludHMuDQotLy8JCQlPbmUgcG9pbnQgaXMgMS83MiBpbmNoIChhcm91bmQgMC4zNTI4IG1tKS4NCi0vLw0KLURMTEVYUE9SVCBkb3VibGUgU1REQ0FMTCBGUERGX0dldFBhZ2VXaWR0aChGUERGX1BBR0UgcGFnZSk7DQotDQotLy8gRnVuY3Rpb246IEZQREZfR2V0UGFnZUhlaWdodA0KLS8vCQkJR2V0IHBhZ2UgaGVpZ2h0Lg0KLS8vIFBhcmFtZXRlcnM6DQotLy8JCQlwYWdlCQktCUhhbmRsZSB0byB0aGUgcGFnZS4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkUGFnZSBmdW5jdGlvbi4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlQYWdlIGhlaWdodCAoZXhjbHVkaW5nIG5vbi1kaXNwbGF5YWJsZSBhcmVhKSBtZWFzdXJlZCBpbiBwb2ludHMuDQotLy8JCQlPbmUgcG9pbnQgaXMgMS83MiBpbmNoIChhcm91bmQgMC4zNTI4IG1tKQ0KLS8vDQotRExMRVhQT1JUIGRvdWJsZSBTVERDQUxMIEZQREZfR2V0UGFnZUhlaWdodChGUERGX1BBR0UgcGFnZSk7DQotDQotLy8gRnVuY3Rpb246IEZQREZfR2V0UGFnZVNpemVCeUluZGV4DQotLy8JCQlHZXQgdGhlIHNpemUgb2YgYSBwYWdlIGJ5IGluZGV4Lg0KLS8vIFBhcmFtZXRlcnM6DQotLy8JCQlkb2N1bWVudAktCUhhbmRsZSB0byBkb2N1bWVudC4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkRG9jdW1lbnQgZnVuY3Rpb24uDQotLy8JCQlwYWdlX2luZGV4CS0JUGFnZSBpbmRleCwgemVybyBmb3IgdGhlIGZpcnN0IHBhZ2UuDQotLy8JCQl3aWR0aAkJLQlQb2ludGVyIHRvIGEgZG91YmxlIHZhbHVlIHJlY2VpdmluZyB0aGUgcGFnZSB3aWR0aCAoaW4gcG9pbnRzKS4NCi0vLwkJCWhlaWdodAkJLQlQb2ludGVyIHRvIGEgZG91YmxlIHZhbHVlIHJlY2VpdmluZyB0aGUgcGFnZSBoZWlnaHQgKGluIHBvaW50cykuDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJTm9uLXplcm8gZm9yIHN1Y2Nlc3MuIDAgZm9yIGVycm9yIChkb2N1bWVudCBvciBwYWdlIG5vdCBmb3VuZCkuDQotLy8NCi1ETExFWFBPUlQgaW50IFNURENBTEwgRlBERl9HZXRQYWdlU2l6ZUJ5SW5kZXgoRlBERl9ET0NVTUVOVCBkb2N1bWVudCwgaW50IHBhZ2VfaW5kZXgsIGRvdWJsZSogd2lkdGgsIGRvdWJsZSogaGVpZ2h0KTsNCi0NCi0NCi0vLyBQYWdlIHJlbmRlcmluZyBmbGFncy4gVGhleSBjYW4gYmUgY29tYmluZWQgd2l0aCBiaXQgT1IuDQotI2RlZmluZSBGUERGX0FOTk9UCQkJMHgwMQkJLy8gU2V0IGlmIGFubm90YXRpb25zIGFyZSB0byBiZSByZW5kZXJlZC4NCi0jZGVmaW5lIEZQREZfTENEX1RFWFQJCTB4MDIJCS8vIFNldCBpZiB1c2luZyB0ZXh0IHJlbmRlcmluZyBvcHRpbWl6ZWQgZm9yIExDRCBkaXNwbGF5Lg0KLSNkZWZpbmUgRlBERl9OT19OQVRJVkVURVhUCTB4MDQJCS8vIERvbid0IHVzZSB0aGUgbmF0aXZlIHRleHQgb3V0cHV0IGF2YWlsYWJsZSBvbiBzb21lIHBsYXRmb3Jtcw0KLSNkZWZpbmUgRlBERl9HUkFZU0NBTEUJCTB4MDgJCS8vIEdyYXlzY2FsZSBvdXRwdXQuDQotI2RlZmluZSBGUERGX0RFQlVHX0lORk8JCTB4ODAJCS8vIFNldCBpZiB5b3Ugd2FudCB0byBnZXQgc29tZSBkZWJ1ZyBpbmZvLiANCi0JCQkJCQkJCQkJLy8gUGxlYXNlIGRpc2N1c3Mgd2l0aCBGb3hpdCBmaXJzdCBpZiB5b3UgbmVlZCB0byBjb2xsZWN0IGRlYnVnIGluZm8uDQotI2RlZmluZSBGUERGX05PX0NBVENICQkweDEwMAkJLy8gU2V0IGlmIHlvdSBkb24ndCB3YW50IHRvIGNhdGNoIGV4Y2VwdGlvbi4NCi0jZGVmaW5lIEZQREZfUkVOREVSX0xJTUlURURJTUFHRUNBQ0hFCTB4MjAwCS8vIExpbWl0IGltYWdlIGNhY2hlIHNpemUuIA0KLSNkZWZpbmUgRlBERl9SRU5ERVJfRk9SQ0VIQUxGVE9ORQkJMHg0MDAJLy8gQWx3YXlzIHVzZSBoYWxmdG9uZSBmb3IgaW1hZ2Ugc3RyZXRjaGluZy4NCi0jZGVmaW5lIEZQREZfUFJJTlRJTkcJCTB4ODAwCS8vIFJlbmRlciBmb3IgcHJpbnRpbmcuDQotI2RlZmluZSBGUERGX1JFVkVSU0VfQllURV9PUkRFUgkJMHgxMAkJLy9zZXQgd2hldGhlciByZW5kZXIgaW4gYSByZXZlcnNlIEJ5dGUgb3JkZXIsIHRoaXMgZmxhZyBvbmx5IA0KLQkJCQkJCQkJCQkJCS8vZW5hYmxlIHdoZW4gcmVuZGVyIHRvIGEgYml0bWFwLg0KLSNpZmRlZiBfV0lOMzINCi0vLyBGdW5jdGlvbjogRlBERl9SZW5kZXJQYWdlDQotLy8JCQlSZW5kZXIgY29udGVudHMgaW4gYSBwYWdlIHRvIGEgZGV2aWNlIChzY3JlZW4sIGJpdG1hcCwgb3IgcHJpbnRlcikuDQotLy8JCQlUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIG9uIFdpbmRvd3Mgc3lzdGVtLg0KLS8vIFBhcmFtZXRlcnM6IA0KLS8vCQkJZGMJCQktCUhhbmRsZSB0byBkZXZpY2UgY29udGV4dC4NCi0vLwkJCXBhZ2UJCS0JSGFuZGxlIHRvIHRoZSBwYWdlLiBSZXR1cm5lZCBieSBGUERGX0xvYWRQYWdlIGZ1bmN0aW9uLg0KLS8vCQkJc3RhcnRfeAkJLQlMZWZ0IHBpeGVsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IGFyZWEgaW4gdGhlIGRldmljZSBjb29yZGluYXRlLg0KLS8vCQkJc3RhcnRfeQkJLQlUb3AgcGl4ZWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgYXJlYSBpbiB0aGUgZGV2aWNlIGNvb3JkaW5hdGUuDQotLy8JCQlzaXplX3gJCS0JSG9yaXpvbnRhbCBzaXplIChpbiBwaXhlbHMpIGZvciBkaXNwbGF5aW5nIHRoZSBwYWdlLg0KLS8vCQkJc2l6ZV95CQktCVZlcnRpY2FsIHNpemUgKGluIHBpeGVscykgZm9yIGRpc3BsYXlpbmcgdGhlIHBhZ2UuDQotLy8JCQlyb3RhdGUJCS0JUGFnZSBvcmllbnRhdGlvbjogMCAobm9ybWFsKSwgMSAocm90YXRlZCA5MCBkZWdyZWVzIGNsb2Nrd2lzZSksDQotLy8JCQkJCQkJCTIgKHJvdGF0ZWQgMTgwIGRlZ3JlZXMpLCAzIChyb3RhdGVkIDkwIGRlZ3JlZXMgY291bnRlci1jbG9ja3dpc2UpLg0KLS8vCQkJZmxhZ3MJCS0JMCBmb3Igbm9ybWFsIGRpc3BsYXksIG9yIGNvbWJpbmF0aW9uIG9mIGZsYWdzIGRlZmluZWQgYWJvdmUuDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJTm9uZS4NCi0vLw0KLURMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERl9SZW5kZXJQYWdlKEhEQyBkYywgRlBERl9QQUdFIHBhZ2UsIGludCBzdGFydF94LCBpbnQgc3RhcnRfeSwgaW50IHNpemVfeCwgaW50IHNpemVfeSwNCi0JCQkJCQlpbnQgcm90YXRlLCBpbnQgZmxhZ3MpOw0KLSNlbmRpZg0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGX1JlbmRlclBhZ2VCaXRtYXANCi0vLwkJCVJlbmRlciBjb250ZW50cyBpbiBhIHBhZ2UgdG8gYSBkZXZpY2UgaW5kZXBlbmRlbnQgYml0bWFwDQotLy8gUGFyYW1ldGVyczogDQotLy8JCQliaXRtYXAJCS0JSGFuZGxlIHRvIHRoZSBkZXZpY2UgaW5kZXBlbmRlbnQgYml0bWFwIChhcyB0aGUgb3V0cHV0IGJ1ZmZlcikuDQotLy8JCQkJCQkJQml0bWFwIGhhbmRsZSBjYW4gYmUgY3JlYXRlZCBieSBGUERGQml0bWFwX0NyZWF0ZSBmdW5jdGlvbi4NCi0vLwkJCXBhZ2UJCS0JSGFuZGxlIHRvIHRoZSBwYWdlLiBSZXR1cm5lZCBieSBGUERGX0xvYWRQYWdlIGZ1bmN0aW9uLg0KLS8vCQkJc3RhcnRfeAkJLQlMZWZ0IHBpeGVsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IGFyZWEgaW4gdGhlIGJpdG1hcCBjb29yZGluYXRlLg0KLS8vCQkJc3RhcnRfeQkJLQlUb3AgcGl4ZWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgYXJlYSBpbiB0aGUgYml0bWFwIGNvb3JkaW5hdGUuDQotLy8JCQlzaXplX3gJCS0JSG9yaXpvbnRhbCBzaXplIChpbiBwaXhlbHMpIGZvciBkaXNwbGF5aW5nIHRoZSBwYWdlLg0KLS8vCQkJc2l6ZV95CQktCVZlcnRpY2FsIHNpemUgKGluIHBpeGVscykgZm9yIGRpc3BsYXlpbmcgdGhlIHBhZ2UuDQotLy8JCQlyb3RhdGUJCS0JUGFnZSBvcmllbnRhdGlvbjogMCAobm9ybWFsKSwgMSAocm90YXRlZCA5MCBkZWdyZWVzIGNsb2Nrd2lzZSksDQotLy8JCQkJCQkJCTIgKHJvdGF0ZWQgMTgwIGRlZ3JlZXMpLCAzIChyb3RhdGVkIDkwIGRlZ3JlZXMgY291bnRlci1jbG9ja3dpc2UpLg0KLS8vCQkJZmxhZ3MJCS0JMCBmb3Igbm9ybWFsIGRpc3BsYXksIG9yIGNvbWJpbmF0aW9uIG9mIGZsYWdzIGRlZmluZWQgYWJvdmUuDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJTm9uZS4NCi0vLw0KLURMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERl9SZW5kZXJQYWdlQml0bWFwKEZQREZfQklUTUFQIGJpdG1hcCwgRlBERl9QQUdFIHBhZ2UsIGludCBzdGFydF94LCBpbnQgc3RhcnRfeSwgDQotCQkJCQkJaW50IHNpemVfeCwgaW50IHNpemVfeSwgaW50IHJvdGF0ZSwgaW50IGZsYWdzKTsNCi0NCi0vLyBGdW5jdGlvbjogRlBERl9DbG9zZVBhZ2UNCi0vLwkJCUNsb3NlIGEgbG9hZGVkIFBERiBwYWdlLg0KLS8vIFBhcmFtZXRlcnM6IA0KLS8vCQkJcGFnZQkJLQlIYW5kbGUgdG8gdGhlIGxvYWRlZCBwYWdlLg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCU5vbmUuDQotLy8NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZfQ2xvc2VQYWdlKEZQREZfUEFHRSBwYWdlKTsNCi0NCi0vLyBGdW5jdGlvbjogRlBERl9DbG9zZURvY3VtZW50DQotLy8JCQlDbG9zZSBhIGxvYWRlZCBQREYgZG9jdW1lbnQuDQotLy8gUGFyYW1ldGVyczogDQotLy8JCQlkb2N1bWVudAktCUhhbmRsZSB0byB0aGUgbG9hZGVkIGRvY3VtZW50Lg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCU5vbmUuDQotLy8NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZfQ2xvc2VEb2N1bWVudChGUERGX0RPQ1VNRU5UIGRvY3VtZW50KTsNCi0NCi0vLyBGdW5jdGlvbjogRlBERl9EZXZpY2VUb1BhZ2UNCi0vLwkJCUNvbnZlcnQgdGhlIHNjcmVlbiBjb29yZGluYXRlIG9mIGEgcG9pbnQgdG8gcGFnZSBjb29yZGluYXRlLg0KLS8vIFBhcmFtZXRlcnM6DQotLy8JCQlwYWdlCQktCUhhbmRsZSB0byB0aGUgcGFnZS4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkUGFnZSBmdW5jdGlvbi4NCi0vLwkJCXN0YXJ0X3gJCS0JTGVmdCBwaXhlbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBhcmVhIGluIHRoZSBkZXZpY2UgY29vcmRpbmF0ZS4NCi0vLwkJCXN0YXJ0X3kJCS0JVG9wIHBpeGVsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IGFyZWEgaW4gdGhlIGRldmljZSBjb29yZGluYXRlLg0KLS8vCQkJc2l6ZV94CQktCUhvcml6b250YWwgc2l6ZSAoaW4gcGl4ZWxzKSBmb3IgZGlzcGxheWluZyB0aGUgcGFnZS4NCi0vLwkJCXNpemVfeQkJLQlWZXJ0aWNhbCBzaXplIChpbiBwaXhlbHMpIGZvciBkaXNwbGF5aW5nIHRoZSBwYWdlLg0KLS8vCQkJcm90YXRlCQktCVBhZ2Ugb3JpZW50YXRpb246IDAgKG5vcm1hbCksIDEgKHJvdGF0ZWQgOTAgZGVncmVlcyBjbG9ja3dpc2UpLA0KLS8vCQkJCQkJCQkyIChyb3RhdGVkIDE4MCBkZWdyZWVzKSwgMyAocm90YXRlZCA5MCBkZWdyZWVzIGNvdW50ZXItY2xvY2t3aXNlKS4NCi0vLwkJCWRldmljZV94CS0JWCB2YWx1ZSBpbiBkZXZpY2UgY29vcmRpbmF0ZSwgZm9yIHRoZSBwb2ludCB0byBiZSBjb252ZXJ0ZWQuDQotLy8JCQlkZXZpY2VfeQktCVkgdmFsdWUgaW4gZGV2aWNlIGNvb3JkaW5hdGUsIGZvciB0aGUgcG9pbnQgdG8gYmUgY29udmVydGVkLg0KLS8vCQkJcGFnZV94CQktCUEgUG9pbnRlciB0byBhIGRvdWJsZSByZWNlaXZpbmcgdGhlIGNvbnZlcnRlZCBYIHZhbHVlIGluIHBhZ2UgY29vcmRpbmF0ZS4NCi0vLwkJCXBhZ2VfeQkJLQlBIFBvaW50ZXIgdG8gYSBkb3VibGUgcmVjZWl2aW5nIHRoZSBjb252ZXJ0ZWQgWSB2YWx1ZSBpbiBwYWdlIGNvb3JkaW5hdGUuDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJTm9uZS4NCi0vLyBDb21tZW50czoNCi0vLwkJCVRoZSBwYWdlIGNvb3JkaW5hdGUgc3lzdGVtIGhhcyBpdHMgb3JpZ2luIGF0IGxlZnQtYm90dG9tIGNvcm5lciBvZiB0aGUgcGFnZSwgd2l0aCBYIGF4aXMgZ29lcyBhbG9uZw0KLS8vCQkJdGhlIGJvdHRvbSBzaWRlIHRvIHRoZSByaWdodCwgYW5kIFkgYXhpcyBnb2VzIGFsb25nIHRoZSBsZWZ0IHNpZGUgdXB3YXJkLiBOT1RFOiB0aGlzIGNvb3JkaW5hdGUgc3lzdGVtIA0KLS8vCQkJY2FuIGJlIGFsdGVyZWQgd2hlbiB5b3Ugem9vbSwgc2Nyb2xsLCBvciByb3RhdGUgYSBwYWdlLCBob3dldmVyLCBhIHBvaW50IG9uIHRoZSBwYWdlIHNob3VsZCBhbHdheXMgaGF2ZSANCi0vLwkJCXRoZSBzYW1lIGNvb3JkaW5hdGUgdmFsdWVzIGluIHRoZSBwYWdlIGNvb3JkaW5hdGUgc3lzdGVtLiANCi0vLw0KLS8vCQkJVGhlIGRldmljZSBjb29yZGluYXRlIHN5c3RlbSBpcyBkZXZpY2UgZGVwZW5kZW50LiBGb3Igc2NyZWVuIGRldmljZSwgaXRzIG9yaWdpbiBpcyBhdCBsZWZ0LXRvcA0KLS8vCQkJY29ybmVyIG9mIHRoZSB3aW5kb3cuIEhvd2V2ZXIgdGhpcyBvcmlnaW4gY2FuIGJlIGFsdGVyZWQgYnkgV2luZG93cyBjb29yZGluYXRlIHRyYW5zZm9ybWF0aW9uDQotLy8JCQl1dGlsaXRpZXMuIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgc3RhcnRfeCwgc3RhcnRfeSwgc2l6ZV94LCBzaXplX3kgYW5kIHJvdGF0ZSBwYXJhbWV0ZXJzIGhhdmUgZXhhY3RseQ0KLS8vCQkJc2FtZSB2YWx1ZXMgYXMgeW91IHVzZWQgaW4gRlBERl9SZW5kZXJQYWdlKCkgZnVuY3Rpb24gY2FsbC4NCi0vLw0KLURMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERl9EZXZpY2VUb1BhZ2UoRlBERl9QQUdFIHBhZ2UsIGludCBzdGFydF94LCBpbnQgc3RhcnRfeSwgaW50IHNpemVfeCwgaW50IHNpemVfeSwNCi0JCQkJCQlpbnQgcm90YXRlLCBpbnQgZGV2aWNlX3gsIGludCBkZXZpY2VfeSwgZG91YmxlKiBwYWdlX3gsIGRvdWJsZSogcGFnZV95KTsNCi0NCi0vLyBGdW5jdGlvbjogRlBERl9QYWdlVG9EZXZpY2UNCi0vLwkJCUNvbnZlcnQgdGhlIHBhZ2UgY29vcmRpbmF0ZSBvZiBhIHBvaW50IHRvIHNjcmVlbiBjb29yZGluYXRlLg0KLS8vIFBhcmFtZXRlcnM6DQotLy8JCQlwYWdlCQktCUhhbmRsZSB0byB0aGUgcGFnZS4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkUGFnZSBmdW5jdGlvbi4NCi0vLwkJCXN0YXJ0X3gJCS0JTGVmdCBwaXhlbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBhcmVhIGluIHRoZSBkZXZpY2UgY29vcmRpbmF0ZS4NCi0vLwkJCXN0YXJ0X3kJCS0JVG9wIHBpeGVsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IGFyZWEgaW4gdGhlIGRldmljZSBjb29yZGluYXRlLg0KLS8vCQkJc2l6ZV94CQktCUhvcml6b250YWwgc2l6ZSAoaW4gcGl4ZWxzKSBmb3IgZGlzcGxheWluZyB0aGUgcGFnZS4NCi0vLwkJCXNpemVfeQkJLQlWZXJ0aWNhbCBzaXplIChpbiBwaXhlbHMpIGZvciBkaXNwbGF5aW5nIHRoZSBwYWdlLg0KLS8vCQkJcm90YXRlCQktCVBhZ2Ugb3JpZW50YXRpb246IDAgKG5vcm1hbCksIDEgKHJvdGF0ZWQgOTAgZGVncmVlcyBjbG9ja3dpc2UpLA0KLS8vCQkJCQkJCQkyIChyb3RhdGVkIDE4MCBkZWdyZWVzKSwgMyAocm90YXRlZCA5MCBkZWdyZWVzIGNvdW50ZXItY2xvY2t3aXNlKS4NCi0vLwkJCXBhZ2VfeAkJLQlYIHZhbHVlIGluIHBhZ2UgY29vcmRpbmF0ZSwgZm9yIHRoZSBwb2ludCB0byBiZSBjb252ZXJ0ZWQuDQotLy8JCQlwYWdlX3kJCS0JWSB2YWx1ZSBpbiBwYWdlIGNvb3JkaW5hdGUsIGZvciB0aGUgcG9pbnQgdG8gYmUgY29udmVydGVkLg0KLS8vCQkJZGV2aWNlX3gJLQlBIHBvaW50ZXIgdG8gYW4gaW50ZWdlciByZWNlaXZpbmcgdGhlIHJlc3VsdCBYIHZhbHVlIGluIGRldmljZSBjb29yZGluYXRlLg0KLS8vCQkJZGV2aWNlX3kJLQlBIHBvaW50ZXIgdG8gYW4gaW50ZWdlciByZWNlaXZpbmcgdGhlIHJlc3VsdCBZIHZhbHVlIGluIGRldmljZSBjb29yZGluYXRlLg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCU5vbmUuDQotLy8gQ29tbWVudHM6DQotLy8JCQlTZWUgY29tbWVudHMgb2YgRlBERl9EZXZpY2VUb1BhZ2UoKSBmdW5jdGlvbi4NCi0vLw0KLURMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERl9QYWdlVG9EZXZpY2UoRlBERl9QQUdFIHBhZ2UsIGludCBzdGFydF94LCBpbnQgc3RhcnRfeSwgaW50IHNpemVfeCwgaW50IHNpemVfeSwNCi0JCQkJCQlpbnQgcm90YXRlLCBkb3VibGUgcGFnZV94LCBkb3VibGUgcGFnZV95LCBpbnQqIGRldmljZV94LCBpbnQqIGRldmljZV95KTsNCi0NCi0vLyBGdW5jdGlvbjogRlBERkJpdG1hcF9DcmVhdGUNCi0vLwkJCUNyZWF0ZSBhIEZveGl0IERldmljZSBJbmRlcGVuZGVudCBCaXRtYXAgKEZYRElCKS4NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vCQkJd2lkdGgJCS0JTnVtYmVyIG9mIHBpeGVscyBpbiBhIGhvcml6b250YWwgbGluZSBvZiB0aGUgYml0bWFwLiBNdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLg0KLS8vCQkJaGVpZ2h0CQktCU51bWJlciBvZiBwaXhlbHMgaW4gYSB2ZXJ0aWNhbCBsaW5lIG9mIHRoZSBiaXRtYXAuIE11c3QgYmUgZ3JlYXRlciB0aGFuIDAuDQotLy8JCQlhbHBoYQkJLQlBIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIGFscGhhIGNoYW5uZWwgaXMgdXNlZC4gTm9uLXplcm8gZm9yIHVzaW5nIGFscGhhLCB6ZXJvIGZvciBub3QgdXNpbmcuDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJVGhlIGNyZWF0ZWQgYml0bWFwIGhhbmRsZSwgb3IgTlVMTCBpZiBwYXJhbWV0ZXIgZXJyb3Igb3Igb3V0IG9mIG1lbW9yeS4NCi0vLyBDb21tZW50czoNCi0vLwkJCUFuIEZYRElCIGFsd2F5cyB1c2UgNCBieXRlIHBlciBwaXhlbC4gVGhlIGZpcnN0IGJ5dGUgb2YgYSBwaXhlbCBpcyBhbHdheXMgZG91YmxlIHdvcmQgYWxpZ25lZC4NCi0vLwkJCUVhY2ggcGl4ZWwgY29udGFpbnMgcmVkIChSKSwgZ3JlZW4gKEcpLCBibHVlIChCKSBhbmQgb3B0aW9uYWxseSBhbHBoYSAoQSkgdmFsdWVzLg0KLS8vCQkJVGhlIGJ5dGUgb3JkZXIgaXMgQkdSeCAodGhlIGxhc3QgYnl0ZSB1bnVzZWQgaWYgbm8gYWxwaGEgY2hhbm5lbCkgb3IgQkdSQS4NCi0vLwkJCQ0KLS8vCQkJVGhlIHBpeGVscyBpbiBhIGhvcml6b250YWwgbGluZSAoYWxzbyBjYWxsZWQgc2NhbiBsaW5lKSBhcmUgc3RvcmVkIHNpZGUgYnkgc2lkZSwgd2l0aCBsZWZ0IG1vc3QNCi0vLwkJCXBpeGVsIHN0b3JlZCBmaXJzdCAod2l0aCBsb3dlciBtZW1vcnkgYWRkcmVzcykuIEVhY2ggc2NhbiBsaW5lIHVzZXMgd2lkdGgqNCBieXRlcy4NCi0vLw0KLS8vCQkJU2NhbiBsaW5lcyBhcmUgc3RvcmVkIG9uZSBhZnRlciBhbm90aGVyLCB3aXRoIHRvcCBtb3N0IHNjYW4gbGluZSBzdG9yZWQgZmlyc3QuIFRoZXJlIGlzIG5vIGdhcA0KLS8vCQkJYmV0d2VlbiBhZGphY2VudCBzY2FuIGxpbmVzLg0KLS8vDQotLy8JCQlUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBlbm91Z2ggbWVtb3J5IGZvciBob2xkaW5nIGFsbCBwaXhlbHMgaW4gdGhlIGJpdG1hcCwgYnV0IGl0IGRvZXNuJ3QgDQotLy8JCQlpbml0aWFsaXplIHRoZSBidWZmZXIuIEFwcGxpY2F0aW9ucyBjYW4gdXNlIEZQREZCaXRtYXBfRmlsbFJlY3QgdG8gZmlsbCB0aGUgYml0bWFwIHVzaW5nIGFueSBjb2xvci4NCi1ETExFWFBPUlQgRlBERl9CSVRNQVAgU1REQ0FMTCBGUERGQml0bWFwX0NyZWF0ZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBhbHBoYSk7DQotDQotLy8gTW9yZSBESUIgZm9ybWF0cw0KLSNkZWZpbmUgRlBERkJpdG1hcF9HcmF5CQkxCQkvLyBHcmF5IHNjYWxlIGJpdG1hcCwgb25lIGJ5dGUgcGVyIHBpeGVsLg0KLSNkZWZpbmUgRlBERkJpdG1hcF9CR1IJCTIJCS8vIDMgYnl0ZXMgcGVyIHBpeGVsLCBieXRlIG9yZGVyOiBibHVlLCBncmVlbiwgcmVkLg0KLSNkZWZpbmUgRlBERkJpdG1hcF9CR1J4CQkzCQkvLyA0IGJ5dGVzIHBlciBwaXhlbCwgYnl0ZSBvcmRlcjogYmx1ZSwgZ3JlZW4sIHJlZCwgdW51c2VkLg0KLSNkZWZpbmUgRlBERkJpdG1hcF9CR1JBCQk0CQkvLyA0IGJ5dGVzIHBlciBwaXhlbCwgYnl0ZSBvcmRlcjogYmx1ZSwgZ3JlZW4sIHJlZCwgYWxwaGEuDQotDQotLy8gRnVuY3Rpb246IEZQREZCaXRtYXBfQ3JlYXRlRXgNCi0vLwkJCUNyZWF0ZSBhIEZveGl0IERldmljZSBJbmRlcGVuZGVudCBCaXRtYXAgKEZYRElCKQ0KLS8vIFBhcmFtZXRlcnM6DQotLy8JCQl3aWR0aAkJLQlOdW1iZXIgb2YgcGl4ZWxzIGluIGEgaG9yaXpvbnRhbCBsaW5lIG9mIHRoZSBiaXRtYXAuIE11c3QgYmUgZ3JlYXRlciB0aGFuIDAuDQotLy8JCQloZWlnaHQJCS0JTnVtYmVyIG9mIHBpeGVscyBpbiBhIHZlcnRpY2FsIGxpbmUgb2YgdGhlIGJpdG1hcC4gTXVzdCBiZSBncmVhdGVyIHRoYW4gMC4NCi0vLwkJCWZvcm1hdAkJLQlBIG51bWJlciBpbmRpY2F0aW5nIGZvciBiaXRtYXAgZm9ybWF0LCBhcyBkZWZpbmVkIGFib3ZlLg0KLS8vCQkJZmlyc3Rfc2NhbgktCUEgcG9pbnRlciB0byB0aGUgZmlyc3QgYnl0ZSBvZiBmaXJzdCBzY2FuIGxpbmUsIGZvciBleHRlcm5hbCBidWZmZXINCi0vLwkJCQkJCQlvbmx5LiBJZiB0aGlzIHBhcmFtZXRlciBpcyBOVUxMLCB0aGVuIHRoZSBTREsgd2lsbCBjcmVhdGUgaXRzIG93biBidWZmZXIuDQotLy8JCQlzdHJpZGUJCS0JTnVtYmVyIG9mIGJ5dGVzIGZvciBlYWNoIHNjYW4gbGluZSwgZm9yIGV4dGVybmFsIGJ1ZmZlciBvbmx5Li4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlUaGUgY3JlYXRlZCBiaXRtYXAgaGFuZGxlLCBvciBOVUxMIGlmIHBhcmFtZXRlciBlcnJvciBvciBvdXQgb2YgbWVtb3J5Lg0KLS8vIENvbW1lbnRzOg0KLS8vCQkJU2ltaWxhciB0byBGUERGQml0bWFwX0NyZWF0ZSBmdW5jdGlvbiwgd2l0aCBtb3JlIGZvcm1hdHMgYW5kIGV4dGVybmFsIGJ1ZmZlciBzdXBwb3J0ZWQuIA0KLS8vCQkJQml0bWFwIGNyZWF0ZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBpbiBhbnkgcGxhY2UgdGhhdCBhIEZQREZfQklUTUFQIGhhbmRsZSBpcyANCi0vLwkJCXJlcXVpcmVkLiANCi0vLw0KLS8vCQkJSWYgZXh0ZXJuYWwgc2NhbmxpbmUgYnVmZmVyIGlzIHVzZWQsIHRoZW4gdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBkZXN0cm95IHRoZSBidWZmZXINCi0vLwkJCWJ5IGl0c2VsZi4gRlBERkJpdG1hcF9EZXN0cm95IGZ1bmN0aW9uIHdpbGwgbm90IGRlc3Ryb3kgdGhlIGJ1ZmZlci4NCi0vLw0KLURMTEVYUE9SVCBGUERGX0JJVE1BUCBTVERDQUxMIEZQREZCaXRtYXBfQ3JlYXRlRXgoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZm9ybWF0LCB2b2lkKiBmaXJzdF9zY2FuLCBpbnQgc3RyaWRlKTsNCi0NCi0vLyBGdW5jdGlvbjogRlBERkJpdG1hcF9GaWxsUmVjdA0KLS8vCQkJRmlsbCBhIHJlY3RhbmdsZSBhcmVhIGluIGFuIEZYRElCLg0KLS8vIFBhcmFtZXRlcnM6DQotLy8JCQliaXRtYXAJCS0JVGhlIGhhbmRsZSB0byB0aGUgYml0bWFwLiBSZXR1cm5lZCBieSBGUERGQml0bWFwX0NyZWF0ZSBmdW5jdGlvbi4NCi0vLwkJCWxlZnQJCS0JVGhlIGxlZnQgc2lkZSBwb3NpdGlvbi4gU3RhcnRpbmcgZnJvbSAwIGF0IHRoZSBsZWZ0LW1vc3QgcGl4ZWwuDQotLy8JCQl0b3AJCQktCVRoZSB0b3Agc2lkZSBwb3NpdGlvbi4gU3RhcnRpbmcgZnJvbSAwIGF0IHRoZSB0b3AtbW9zdCBzY2FuIGxpbmUuDQotLy8JCQl3aWR0aAkJLQlOdW1iZXIgb2YgcGl4ZWxzIHRvIGJlIGZpbGxlZCBpbiBlYWNoIHNjYW4gbGluZS4NCi0vLwkJCWhlaWdodAkJLQlOdW1iZXIgb2Ygc2NhbiBsaW5lcyB0byBiZSBmaWxsZWQuDQotLy8JCQlyZWQJCQktCUEgbnVtYmVyIGZyb20gMCB0byAyNTUsIGlkZW50aWZ5aW5nIHRoZSByZWQgaW50ZW5zaXR5Lg0KLS8vCQkJZ3JlZW4JCS0JQSBudW1iZXIgZnJvbSAwIHRvIDI1NSwgaWRlbnRpZnlpbmcgdGhlIGdyZWVuIGludGVuc2l0eS4NCi0vLwkJCWJsdWUJCS0JQSBudW1iZXIgZnJvbSAwIHRvIDI1NSwgaWRlbnRpZnlpbmcgdGhlIGJsdWUgaW50ZW5zaXR5Lg0KLS8vCQkJYWxwaGEJCS0JKE9ubHkgaWYgdGhlIGFscGhhIGNoYW5uZWxlZCBpcyB1c2VkIHdoZW4gYml0bWFwIGNyZWF0ZWQpIEEgbnVtYmVyIGZyb20gMCB0byAyNTUsDQotLy8JCQkJCQkJaWRlbnRpZnlpbmcgdGhlIGFscGhhIHZhbHVlLg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCU5vbmUuDQotLy8gQ29tbWVudHM6DQotLy8JCQlUaGlzIGZ1bmN0aW9uIHNldCB0aGUgY29sb3IgYW5kIChvcHRpb25hbGx5KSBhbHBoYSB2YWx1ZSBpbiBzcGVjaWZpZWQgcmVnaW9uIG9mIHRoZSBiaXRtYXAuDQotLy8JCQlOT1RFOiBJZiBhbHBoYSBjaGFubmVsIGlzIHVzZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBOT1QgY29tcG9zaXRlIHRoZSBiYWNrZ3JvdW5kIHdpdGggdGhlIHNvdXJjZSBjb2xvciwNCi0vLwkJCWluc3RlYWQgdGhlIGJhY2tncm91bmQgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgc291cmNlIGNvbG9yIGFuZCBhbHBoYS4NCi0vLwkJCUlmIGFscGhhIGNoYW5uZWwgaXMgbm90IHVzZWQsIHRoZSAiYWxwaGEiIHBhcmFtZXRlciBpcyBpZ25vcmVkLg0KLS8vDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGQml0bWFwX0ZpbGxSZWN0KEZQREZfQklUTUFQIGJpdG1hcCwgaW50IGxlZnQsIGludCB0b3AsIGludCB3aWR0aCwgaW50IGhlaWdodCwgDQotCQkJCQkJCQkJaW50IHJlZCwgaW50IGdyZWVuLCBpbnQgYmx1ZSwgaW50IGFscGhhKTsNCi0NCi0vLyBGdW5jdGlvbjogRlBERkJpdG1hcF9HZXRCdWZmZXINCi0vLwkJCUdldCBkYXRhIGJ1ZmZlciBvZiBhbiBGWERJQg0KLS8vIFBhcmFtZXRlcnM6DQotLy8JCQliaXRtYXAJCS0JSGFuZGxlIHRvIHRoZSBiaXRtYXAuIFJldHVybmVkIGJ5IEZQREZCaXRtYXBfQ3JlYXRlIGZ1bmN0aW9uLg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCVRoZSBwb2ludGVyIHRvIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBiaXRtYXAgYnVmZmVyLg0KLS8vIENvbW1lbnRzOg0KLS8vCQkJVGhlIHN0cmlkZSBtYXkgYmUgbW9yZSB0aGFuIHdpZHRoICogbnVtYmVyIG9mIGJ5dGVzIHBlciBwaXhlbA0KLS8vCQkJQXBwbGljYXRpb25zIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBnZXQgdGhlIGJpdG1hcCBidWZmZXIgcG9pbnRlciwgdGhlbiBtYW5pcHVsYXRlIGFueSBjb2xvcg0KLS8vCQkJYW5kL29yIGFscGhhIHZhbHVlcyBmb3IgYW55IHBpeGVscyBpbiB0aGUgYml0bWFwLg0KLURMTEVYUE9SVCB2b2lkKiBTVERDQUxMIEZQREZCaXRtYXBfR2V0QnVmZmVyKEZQREZfQklUTUFQIGJpdG1hcCk7DQotDQotLy8gRnVuY3Rpb246IEZQREZCaXRtYXBfR2V0V2lkdGgNCi0vLwkJCUdldCB3aWR0aCBvZiBhbiBGWERJQi4NCi0vLyBQYXJhbWV0ZXJzOg0KLS8vCQkJYml0bWFwCQktCUhhbmRsZSB0byB0aGUgYml0bWFwLiBSZXR1cm5lZCBieSBGUERGQml0bWFwX0NyZWF0ZSBmdW5jdGlvbi4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlUaGUgbnVtYmVyIG9mIHBpeGVscyBpbiBhIGhvcml6b250YWwgbGluZSBvZiB0aGUgYml0bWFwLg0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGQml0bWFwX0dldFdpZHRoKEZQREZfQklUTUFQIGJpdG1hcCk7DQotDQotLy8gRnVuY3Rpb246IEZQREZCaXRtYXBfR2V0SGVpZ2h0DQotLy8JCQlHZXQgaGVpZ2h0IG9mIGFuIEZYRElCLg0KLS8vIFBhcmFtZXRlcnM6DQotLy8JCQliaXRtYXAJCS0JSGFuZGxlIHRvIHRoZSBiaXRtYXAuIFJldHVybmVkIGJ5IEZQREZCaXRtYXBfQ3JlYXRlIGZ1bmN0aW9uLg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCVRoZSBudW1iZXIgb2YgcGl4ZWxzIGluIGEgdmVydGljYWwgbGluZSBvZiB0aGUgYml0bWFwLg0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGQml0bWFwX0dldEhlaWdodChGUERGX0JJVE1BUCBiaXRtYXApOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGQml0bWFwX0dldFN0cmlkZQ0KLS8vCQkJR2V0IG51bWJlciBvZiBieXRlcyBmb3IgZWFjaCBzY2FuIGxpbmUgaW4gdGhlIGJpdG1hcCBidWZmZXIuDQotLy8gUGFyYW1ldGVyczoNCi0vLwkJCWJpdG1hcAkJLQlIYW5kbGUgdG8gdGhlIGJpdG1hcC4gUmV0dXJuZWQgYnkgRlBERkJpdG1hcF9DcmVhdGUgZnVuY3Rpb24uDQotLy8gUmV0dXJuIHZhbHVlOg0KLS8vCQkJVGhlIG51bWJlciBvZiBieXRlcyBmb3IgZWFjaCBzY2FuIGxpbmUgaW4gdGhlIGJpdG1hcCBidWZmZXIuDQotLy8gQ29tbWVudHM6DQotLy8JCQlUaGUgc3RyaWRlIG1heSBiZSBtb3JlIHRoYW4gd2lkdGggKiBudW1iZXIgb2YgYnl0ZXMgcGVyIHBpeGVsDQotRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZCaXRtYXBfR2V0U3RyaWRlKEZQREZfQklUTUFQIGJpdG1hcCk7DQotDQotLy8gRnVuY3Rpb246IEZQREZCaXRtYXBfRGVzdHJveQ0KLS8vCQkJRGVzdHJveSBhbiBGWERJQiBhbmQgcmVsZWFzZSBhbGwgcmVsYXRlZCBidWZmZXJzLiANCi0vLyBQYXJhbWV0ZXJzOg0KLS8vCQkJYml0bWFwCQktCUhhbmRsZSB0byB0aGUgYml0bWFwLiBSZXR1cm5lZCBieSBGUERGQml0bWFwX0NyZWF0ZSBmdW5jdGlvbi4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlOb25lLg0KLS8vIENvbW1lbnRzOg0KLS8vCQkJVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBkZXN0cm95IGFueSBleHRlcm5hbCBidWZmZXIuDQotLy8NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZCaXRtYXBfRGVzdHJveShGUERGX0JJVE1BUCBiaXRtYXApOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGX1ZJRVdFUlJFRl9HZXRQcmludFNjYWxpbmcNCi0vLwkJCVdoZXRoZXIgdGhlIFBERiBkb2N1bWVudCBwcmVmZXJzIHRvIGJlIHNjYWxlZCBvciBub3QuDQotLy8gUGFyYW1ldGVyczogDQotLy8JCQlkb2N1bWVudAktCUhhbmRsZSB0byB0aGUgbG9hZGVkIGRvY3VtZW50Lg0KLS8vIFJldHVybiB2YWx1ZToNCi0vLwkJCU5vbmUuDQotLy8NCi1ETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERl9WSUVXRVJSRUZfR2V0UHJpbnRTY2FsaW5nKEZQREZfRE9DVU1FTlQgZG9jdW1lbnQpOw0KLQ0KLS8vIEZ1bmN0aW9uOiBGUERGX0dldE5hbWVkRGVzdEJ5TmFtZQ0KLS8vCQkJZ2V0IGEgc3BlY2lhbCBkZXN0IGhhbmRsZSBieSB0aGUgaW5kZXguDQotLy8gUGFyYW1ldGVyczogDQotLy8JCQlkb2N1bWVudAktCUhhbmRsZSB0byB0aGUgbG9hZGVkIGRvY3VtZW50Lg0KLS8vCQkJbmFtZQkJLQlUaGUgbmFtZSBvZiBhIHNwZWNpYWwgbmFtZWQgZGVzdC4NCi0vLyBSZXR1cm4gdmFsdWU6DQotLy8JCQlUaGUgaGFuZGxlIG9mIHRoZSBkZXN0Lg0KLS8vDQotRExMRVhQT1JUIEZQREZfREVTVCBTVERDQUxMIEZQREZfR2V0TmFtZWREZXN0QnlOYW1lKEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsRlBERl9CWVRFU1RSSU5HIG5hbWUpOw0KLQ0KLSNpZmRlZiBfX2NwbHVzcGx1cw0KLX07DQotI2VuZGlmDQotDQotI2VuZGlmIC8vIF9GUERGVklFV19IXw0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKworI2lmbmRlZiBfRlBERlZJRVdfSF8KKyNkZWZpbmUgX0ZQREZWSUVXX0hfCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19XSU5ET1dTX18pCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisKKy8vIERhdGEgdHlwZXMKK3R5cGVkZWYgdm9pZCoJRlBERl9NT0RVTEVNR1I7CisKKy8vIFBERiB0eXBlcwordHlwZWRlZiB2b2lkKglGUERGX0RPQ1VNRU5UOwkJCit0eXBlZGVmIHZvaWQqCUZQREZfUEFHRTsJCQkKK3R5cGVkZWYgdm9pZCoJRlBERl9QQUdFT0JKRUNUOwkvLyBQYWdlIG9iamVjdCh0ZXh0LCBwYXRoLCBldGMpCit0eXBlZGVmIHZvaWQqCUZQREZfUEFUSDsKK3R5cGVkZWYgdm9pZCoJRlBERl9DTElQUEFUSDsJCit0eXBlZGVmIHZvaWQqCUZQREZfQklUTUFQOwkKK3R5cGVkZWYgdm9pZCoJRlBERl9GT05UOwkJCQorCit0eXBlZGVmIHZvaWQqCUZQREZfVEVYVFBBR0U7Cit0eXBlZGVmIHZvaWQqCUZQREZfU0NISEFORExFOwordHlwZWRlZiB2b2lkKglGUERGX1BBR0VMSU5LOwordHlwZWRlZiB2b2lkKglGUERGX0hNT0RVTEU7Cit0eXBlZGVmIHZvaWQqCUZQREZfRE9DU0NISEFORExFOworCit0eXBlZGVmIHZvaWQqCUZQREZfQk9PS01BUks7Cit0eXBlZGVmIHZvaWQqCUZQREZfREVTVDsKK3R5cGVkZWYgdm9pZCoJRlBERl9BQ1RJT047Cit0eXBlZGVmIHZvaWQqCUZQREZfTElOSzsKKworLy8gQmFzaWMgZGF0YSB0eXBlcwordHlwZWRlZiBpbnQJCQkJRlBERl9CT09MOwordHlwZWRlZiBpbnQJCQkJRlBERl9FUlJPUjsJCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJRlBERl9EV09SRDsKKwordHlwZWRlZglmbG9hdAkJCUZTX0ZMT0FUOworCisvLyBTdHJpbmcgdHlwZXMKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJCQlGUERGX1dDSEFSOwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIGNvbnN0KglGUERGX0xQQ0JZVEU7CisKKy8vIEZQREZTREsgbWF5IHVzZSB0aHJlZSB0eXBlcyBvZiBzdHJpbmdzOiBieXRlIHN0cmluZywgd2lkZSBzdHJpbmcgKFVURi0xNkxFIGVuY29kZWQpLCBhbmQgcGxhdGZvcm0gZGVwZW5kZW50IHN0cmluZwordHlwZWRlZiBjb25zdCBjaGFyKgkJCQlGUERGX0JZVEVTVFJJTkc7CisKK3R5cGVkZWYgY29uc3QgdW5zaWduZWQgc2hvcnQqCUZQREZfV0lERVNUUklORzsJCS8vIEZveGl0IFBERiBTREsgYWx3YXlzIHVzZSBVVEYtMTZMRSBlbmNvZGluZyB3aWRlIHN0cmluZywKKwkJCQkJCQkJCQkJCQkJLy8gZWFjaCBjaGFyYWN0ZXIgdXNlIDIgYnl0ZXMgKGV4Y2VwdCBzdXJyb2dhdGlvbiksIHdpdGggbG93IGJ5dGUgZmlyc3QuCisKKy8vIEZvciBXaW5kb3dzIHByb2dyYW1tZXJzOiBmb3IgbW9zdCBjYXNlIGl0J3MgT0sgdG8gdHJlYXQgRlBERl9XSURFU1RSSU5HIGFzIFdpbmRvd3MgdW5pY29kZSBzdHJpbmcsCisvLwkJIGhvd2V2ZXIsIHNwZWNpYWwgY2FyZSBuZWVkcyB0byBiZSB0YWtlbiBpZiB5b3UgZXhwZWN0IHRvIHByb2Nlc3MgVW5pY29kZSBsYXJnZXIgdGhhbiAweGZmZmYuCisvLyBGb3IgTGludXgvVW5peCBwcm9ncmFtbWVyczogbW9zdCBjb21waWxlci9saWJyYXJ5IGVudmlyb25tZW50IHVzZXMgNCBieXRlcyBmb3IgYSBVbmljb2RlIGNoYXJhY3RlciwKKy8vCQl5b3UgaGF2ZSB0byBjb252ZXJ0IGJldHdlZW4gRlBERl9XSURFU1RSSU5HIGFuZCBzeXN0ZW0gd2lkZSBzdHJpbmcgYnkgeW91cnNlbGYuCisKKyNpZmRlZiBfV0lOMzJfV0NFCit0eXBlZGVmIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBGUERGX1NUUklORzsKKyNlbHNlCit0eXBlZGVmIGNvbnN0IGNoYXIqIEZQREZfU1RSSU5HOworI2VuZGlmCisKKyNpZm5kZWYgX0ZTX0RFRl9NQVRSSVhfCisjZGVmaW5lIF9GU19ERUZfTUFUUklYXworLyoqIEBicmllZiBNYXRyaXggZm9yIHRyYW5zZm9ybWF0aW9uLiAqLwordHlwZWRlZiBzdHJ1Y3QgX0ZTX01BVFJJWF8KK3sKKwlmbG9hdAlhOwkvKio8IEBicmllZiBDb2VmZmljaWVudCBhLiovCisJZmxvYXQJYjsJLyoqPCBAYnJpZWYgQ29lZmZpY2llbnQgYi4qLworCWZsb2F0CWM7CS8qKjwgQGJyaWVmIENvZWZmaWNpZW50IGMuKi8KKwlmbG9hdAlkOwkvKio8IEBicmllZiBDb2VmZmljaWVudCBkLiovCisJZmxvYXQJZTsJLyoqPCBAYnJpZWYgQ29lZmZpY2llbnQgZS4qLworCWZsb2F0CWY7CS8qKjwgQGJyaWVmIENvZWZmaWNpZW50IGYuKi8KK30gRlNfTUFUUklYOworI2VuZGlmCisKKyNpZm5kZWYgX0ZTX0RFRl9SRUNURl8KKyNkZWZpbmUgX0ZTX0RFRl9SRUNURl8KKy8qKiBAYnJpZWYgUmVjdGFuZ2xlIGFyZWEoZmxvYXQpIGluIGRldmljZSBvciBwYWdlIGNvb3JkaW5hdGlvbiBzeXN0ZW0uICovCit0eXBlZGVmIHN0cnVjdCBfRlNfUkVDVEZfCit7CisJLyoqQHsqLworCS8qKiBAYnJpZWYgVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgbGVmdC10b3AgY29ybmVyLiAqLworCWZsb2F0CWxlZnQ7CisJLyoqIEBicmllZiBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBsZWZ0LXRvcCBjb3JuZXIuICovCisJZmxvYXQJdG9wOworCS8qKiBAYnJpZWYgVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgcmlnaHQtYm90dG9tIGNvcm5lci4gKi8KKwlmbG9hdAlyaWdodDsKKwkvKiogQGJyaWVmIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHJpZ2h0LWJvdHRvbSBjb3JuZXIuICovCisJZmxvYXQJYm90dG9tOworCS8qKkB9Ki8KK30qIEZTX0xQUkVDVEYsIEZTX1JFQ1RGOworLyoqIEBicmllZiBDb25zdCBQb2ludGVyIHRvIDo6RlNfUkVDVEYgc3RydWN0dXJlLiovCit0eXBlZGVmIGNvbnN0IEZTX1JFQ1RGKglGU19MUENSRUNURjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoRlBERlNES19FWFBPUlRTKQorLy8gT24gV2luZG93cyBzeXN0ZW0sIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgaW4gYSBETEwKKyNkZWZpbmUgRExMRVhQT1JUIF9fZGVjbHNwZWMoIGRsbGV4cG9ydCApCisjZGVmaW5lIFNURENBTEwgX19zdGRjYWxsCisjZWxzZQorI2RlZmluZSBETExFWFBPUlQKKyNkZWZpbmUgU1REQ0FMTAorI2VuZGlmCisKK2V4dGVybiBjb25zdCBjaGFyIGdfRXhwaXJlRGF0ZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgZ19Nb2R1bGVDb2Rlc1tdOworCisvLyBFeHBvcnRlZCBGdW5jdGlvbnMKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLy8gRnVuY3Rpb246IEZQREZfSW5pdExpYnJhcnkKKy8vCQkJSW5pdGlhbGl6ZSB0aGUgRlBERlNESyBsaWJyYXJ5IAorLy8gUGFyYW1ldGVyczoKKy8vCQkJaEluc3RhbmNlCS0JRm9yIFdJTjMyIHN5c3RlbSBvbmx5OiB0aGUgaW5zdGFuY2Ugb2YgdGhlIGV4ZWN1dGFibGUgb3IgRExMIG1vZHVsZS4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJTm9uZS4KKy8vIENvbW1lbnRzOgorLy8JCQlZb3UgaGF2ZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIHlvdSBjYW4gY2FsbCBhbnkgUERGIHByb2Nlc3NpbmcgZnVuY3Rpb25zLgorCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZfSW5pdExpYnJhcnkodm9pZCogaEluc3RhbmNlKTsKKworCisvLyBGdW5jdGlvbjogRlBERl9EZXN0cm95TGliYXJ5CisvLwkJCVJlbGVhc2UgYWxsIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgdGhlIEZQREZTREsgbGlicmFyeS4KKy8vIFBhcmFtZXRlcnM6CisvLwkJCU5vbmUuCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCU5vbmUuCisvLyBDb21tZW50czoKKy8vCQkJWW91IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gcmVsZWFzZSBhbGwgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgdGhlIGxpYnJhcnkuIAorLy8JCQlBZnRlciB0aGlzIGZ1bmN0aW9uIGNhbGxlZCwgeW91IHNob3VsZCBub3QgY2FsbCBhbnkgUERGIHByb2Nlc3NpbmcgZnVuY3Rpb25zLgorRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX0Rlc3Ryb3lMaWJyYXJ5KCk7CisKKy8vUG9saWN5IGZvciBhY2Nlc3NpbmcgdGhlIGxvY2FsIG1hY2hpbmUgdGltZS4KKyNkZWZpbmUgRlBERl9QT0xJQ1lfTUFDSElORVRJTUVfQUNDRVNTCTAKKworLy8gRnVuY3Rpb246IEZQREZfU2V0U2FuZEJveFBvbGljeQorLy8JCQlTZXQgdGhlIHBvbGljeSBmb3IgdGhlIHNhbmRib3ggZW52aXJvbm1lbnQuCisvLyBQYXJhbWV0ZXJzOgkKKy8vCQkJcG9saWN5CQktCVRoZSBzcGVjaWZpZWQgcG9saWN5IGZvciBzZXR0aW5nLCBmb3IgZXhhbXBsZTpGUERGX1BPTElDWV9NQUNISU5FVElNRV9BQ0NFU1MuCisvLwkJCWVuYWJsZQkJLQlUcnVlIGZvciBlbmFibGUsIEZhbHNlIGZvciBkaXNhYmxlIHRoZSBwb2xpY3kuCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCU5vbmUuCitETExFWFBPUlQgdm9pZAlTVERDQUxMIEZQREZfU2V0U2FuZEJveFBvbGljeShGUERGX0RXT1JEIHBvbGljeSwgRlBERl9CT09MIGVuYWJsZSk7CisKKy8qKgorKiBPcGVuIGFuZCBsb2FkIGEgUERGIGRvY3VtZW50LgorKiBAcGFyYW1baW5dIGZpbGVfcGF0aAktCVBhdGggdG8gdGhlIFBERiBmaWxlIChpbmNsdWRpbmcgZXh0ZW5zaW9uKS4KKyogQHBhcmFtW2luXSBwYXNzd29yZAktCUEgc3RyaW5nIHVzZWQgYXMgdGhlIHBhc3N3b3JkIGZvciBQREYgZmlsZS4gCisqCQkJCQkJCUlmIG5vIHBhc3N3b3JkIG5lZWRlZCwgZW1wdHkgb3IgTlVMTCBjYW4gYmUgdXNlZC4KKyogQG5vdGUJCUxvYWRlZCBkb2N1bWVudCBjYW4gYmUgY2xvc2VkIGJ5IEZQREZfQ2xvc2VEb2N1bWVudC4KKyoJCQlJZiB0aGlzIGZ1bmN0aW9uIGZhaWxzLCB5b3UgY2FuIHVzZSBGUERGX0dldExhc3RFcnJvcigpIHRvIHJldHJpZXZlCisqCQkJdGhlIHJlYXNvbiB3aHkgaXQgZmFpbHMuCisqIEByZXR2YWwJQSBoYW5kbGUgdG8gdGhlIGxvYWRlZCBkb2N1bWVudC4gSWYgZmFpbGVkLCBOVUxMIGlzIHJldHVybmVkLgorKi8KK0RMTEVYUE9SVCBGUERGX0RPQ1VNRU5UCVNURENBTEwgRlBERl9Mb2FkRG9jdW1lbnQoRlBERl9TVFJJTkcgZmlsZV9wYXRoLCAKKwlGUERGX0JZVEVTVFJJTkcgcGFzc3dvcmQpOworCisvLyBGdW5jdGlvbjogRlBERl9Mb2FkTWVtRG9jdW1lbnQKKy8vCQkJT3BlbiBhbmQgbG9hZCBhIFBERiBkb2N1bWVudCBmcm9tIG1lbW9yeS4KKy8vIFBhcmFtZXRlcnM6IAorLy8JCQlkYXRhX2J1ZgktCVBvaW50ZXIgdG8gYSBidWZmZXIgY29udGFpbmluZyB0aGUgUERGIGRvY3VtZW50LgorLy8JCQlzaXplCQktCU51bWJlciBvZiBieXRlcyBpbiB0aGUgUERGIGRvY3VtZW50LgorLy8JCQlwYXNzd29yZAktCUEgc3RyaW5nIHVzZWQgYXMgdGhlIHBhc3N3b3JkIGZvciBQREYgZmlsZS4gCisvLwkJCQkJCQlJZiBubyBwYXNzd29yZCBuZWVkZWQsIGVtcHR5IG9yIE5VTEwgY2FuIGJlIHVzZWQuCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCUEgaGFuZGxlIHRvIHRoZSBsb2FkZWQgZG9jdW1lbnQuIElmIGZhaWxlZCwgTlVMTCBpcyByZXR1cm5lZC4KKy8vIENvbW1lbnRzOgorLy8JCQlUaGUgbWVtb3J5IGJ1ZmZlciBtdXN0IHJlbWFpbiB2YWxpZCB3aGVuIHRoZSBkb2N1bWVudCBpcyBvcGVuLgorLy8JCQlMb2FkZWQgZG9jdW1lbnQgY2FuIGJlIGNsb3NlZCBieSBGUERGX0Nsb3NlRG9jdW1lbnQuCisvLwkJCUlmIHRoaXMgZnVuY3Rpb24gZmFpbHMsIHlvdSBjYW4gdXNlIEZQREZfR2V0TGFzdEVycm9yKCkgdG8gcmV0cmlldmUKKy8vCQkJdGhlIHJlYXNvbiB3aHkgaXQgZmFpbHMuCisvLworRExMRVhQT1JUIEZQREZfRE9DVU1FTlQJU1REQ0FMTCBGUERGX0xvYWRNZW1Eb2N1bWVudChjb25zdCB2b2lkKiBkYXRhX2J1ZiwgCisJCQkJCQkJCQkJCWludCBzaXplLCBGUERGX0JZVEVTVFJJTkcgcGFzc3dvcmQpOworCisvLyBTdHJ1Y3R1cmUgZm9yIGN1c3RvbSBmaWxlIGFjY2Vzcy4KK3R5cGVkZWYgc3RydWN0IHsKKwkvLyBGaWxlIGxlbmd0aCwgaW4gYnl0ZXMuCisJdW5zaWduZWQgbG9uZwltX0ZpbGVMZW47CisKKwkvLyBBIGZ1bmN0aW9uIHBvaW50ZXIgZm9yIGdldHRpbmcgYSBibG9jayBvZiBkYXRhIGZyb20gc3BlY2lmaWMgcG9zaXRpb24uCisJLy8gUG9zaXRpb24gaXMgc3BlY2lmaWVkIGJ5IGJ5dGUgb2Zmc2V0IGZyb20gYmVnaW5uaW5nIG9mIHRoZSBmaWxlLgorCS8vIFRoZSBwb3NpdGlvbiBhbmQgc2l6ZSB3aWxsIG5ldmVyIGdvIG91dCByYW5nZSBvZiBmaWxlIGxlbmd0aC4KKwkvLyBJdCBtYXkgYmUgcG9zc2libGUgZm9yIEZQREZTREsgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIG11bHRpcGxlIHRpbWVzIGZvciBzYW1lIHBvc2l0aW9uLgorCS8vIFJldHVybiB2YWx1ZTogc2hvdWxkIGJlIG5vbi16ZXJvIGlmIHN1Y2Nlc3NmdWwsIHplcm8gZm9yIGVycm9yLgorCWludAkJCQkoKm1fR2V0QmxvY2spKHZvaWQqIHBhcmFtLCB1bnNpZ25lZCBsb25nIHBvc2l0aW9uLCB1bnNpZ25lZCBjaGFyKiBwQnVmLCB1bnNpZ25lZCBsb25nIHNpemUpOworCisJLy8gQSBjdXN0b20gcG9pbnRlciBmb3IgYWxsIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGRhdGEuCisJLy8gVGhpcyBwb2ludGVyIHdpbGwgYmUgdXNlZCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIG1fR2V0QmxvY2sgY2FsbGJhY2suCisJdm9pZCoJCQltX1BhcmFtOworfSBGUERGX0ZJTEVBQ0NFU1M7CisKKy8vIEZ1bmN0aW9uOiBGUERGX0xvYWRDdXN0b21Eb2N1bWVudAorLy8JCQlMb2FkIFBERiBkb2N1bWVudCBmcm9tIGEgY3VzdG9tIGFjY2VzcyBkZXNjcmlwdG9yLgorLy8gUGFyYW1ldGVyczoKKy8vCQkJcEZpbGVBY2Nlc3MJLQlBIHN0cnVjdHVyZSBmb3IgYWNjZXNzIHRoZSBmaWxlLgorLy8JCQlwYXNzd29yZAktCU9wdGlvbmFsIHBhc3N3b3JkIGZvciBkZWNyeXB0aW5nIHRoZSBQREYgZmlsZS4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJQSBoYW5kbGUgdG8gdGhlIGxvYWRlZCBkb2N1bWVudC4gSWYgZmFpbGVkLCBOVUxMIGlzIHJldHVybmVkLgorLy8gQ29tbWVudHM6CisvLwkJCVRoZSBhcHBsaWNhdGlvbiBzaG91bGQgbWFpbnRhaW4gdGhlIGZpbGUgcmVzb3VyY2VzIGJlaW5nIHZhbGlkIHVudGlsIHRoZSBQREYgZG9jdW1lbnQgY2xvc2UuCisvLwkJCUxvYWRlZCBkb2N1bWVudCBjYW4gYmUgY2xvc2VkIGJ5IEZQREZfQ2xvc2VEb2N1bWVudC4KK0RMTEVYUE9SVCBGUERGX0RPQ1VNRU5UIFNURENBTEwgRlBERl9Mb2FkQ3VzdG9tRG9jdW1lbnQoRlBERl9GSUxFQUNDRVNTKiBwRmlsZUFjY2VzcywgCisJCQkJCQkJCQkJCQkJCUZQREZfQllURVNUUklORyBwYXNzd29yZCk7CisKKy8vIEZ1bmN0aW9uOiBGUERGX0dldEZpbGVWZXJzaW9uCisvLwkJCUdldCB0aGUgZmlsZSB2ZXJzaW9uIG9mIHRoZSBzcGVjaWZpYyBQREYgZG9jdW1lbnQuCisvLyBQYXJhbWV0ZXJzOgorLy8JCQlkb2MJCQktCUhhbmRsZSB0byBkb2N1bWVudC4KKy8vCQkJZmlsZVZlcnNpb24JLQlUaGUgUERGIGZpbGUgdmVyc2lvbi4gRmlsZSB2ZXJzaW9uOiAxNCBmb3IgMS40LCAxNSBmb3IgMS41LCAuLi4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJVFJVRSBpZiB0aGlzIGNhbGwgc3VjY2VlZCwgSWYgZmFpbGVkLCBGQUxTRSBpcyByZXR1cm5lZC4KKy8vIENvbW1lbnRzOgorLy8JCQlJZiB0aGUgZG9jdW1lbnQgaXMgY3JlYXRlZCBieSBmdW5jdGlvbiA6OkZQREZfQ3JlYXRlTmV3RG9jdW1lbnQsIHRoZW4gdGhpcyBmdW5jdGlvbiB3b3VsZCBhbHdheXMgZmFpbC4KK0RMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGX0dldEZpbGVWZXJzaW9uKEZQREZfRE9DVU1FTlQgZG9jLCBpbnQqIGZpbGVWZXJzaW9uKTsKKworI2RlZmluZSBGUERGX0VSUl9TVUNDRVNTCQkwCQkvLyBObyBlcnJvci4KKyNkZWZpbmUgRlBERl9FUlJfVU5LTk9XTgkJMQkJLy8gVW5rbm93biBlcnJvci4KKyNkZWZpbmUgRlBERl9FUlJfRklMRQkJCTIJCS8vIEZpbGUgbm90IGZvdW5kIG9yIGNvdWxkIG5vdCBiZSBvcGVuZWQuCisjZGVmaW5lIEZQREZfRVJSX0ZPUk1BVAkJCTMJCS8vIEZpbGUgbm90IGluIFBERiBmb3JtYXQgb3IgY29ycnVwdGVkLgorI2RlZmluZSBGUERGX0VSUl9QQVNTV09SRAkJNAkJLy8gUGFzc3dvcmQgcmVxdWlyZWQgb3IgaW5jb3JyZWN0IHBhc3N3b3JkLgorI2RlZmluZSBGUERGX0VSUl9TRUNVUklUWQkJNQkJLy8gVW5zdXBwb3J0ZWQgc2VjdXJpdHkgc2NoZW1lLgorI2RlZmluZSBGUERGX0VSUl9QQUdFCQkJNgkJLy8gUGFnZSBub3QgZm91bmQgb3IgY29udGVudCBlcnJvci4KKworLy8gRnVuY3Rpb246IEZQREZfR2V0TGFzdEVycm9yCisvLwkJCUdldCBsYXN0IGVycm9yIGNvZGUgd2hlbiBhbiBTREsgZnVuY3Rpb24gZmFpbGVkLgorLy8gUGFyYW1ldGVyczogCisvLwkJCU5vbmUuCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCUEgMzItYml0IGludGVnZXIgaW5kaWNhdGluZyBlcnJvciBjb2RlcyAoZGVmaW5lZCBhYm92ZSkuCisvLyBDb21tZW50czoKKy8vCQkJSWYgdGhlIHByZXZpb3VzIFNESyBjYWxsIHN1Y2NlZWRlZCwgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uCisvLwkJCWlzIG5vdCBkZWZpbmVkLgorLy8KK0RMTEVYUE9SVCB1bnNpZ25lZCBsb25nCVNURENBTEwgRlBERl9HZXRMYXN0RXJyb3IoKTsKKworLy8gRnVuY3Rpb246IEZQREZfR2V0RG9jUGVybWlzc2lvbgorLy8JCQlHZXQgZmlsZSBwZXJtaXNzaW9uIGZsYWdzIG9mIHRoZSBkb2N1bWVudC4KKy8vIFBhcmFtZXRlcnM6IAorLy8JCQlkb2N1bWVudAktCUhhbmRsZSB0byBkb2N1bWVudC4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkRG9jdW1lbnQgZnVuY3Rpb24uCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCUEgMzItYml0IGludGVnZXIgaW5kaWNhdGluZyBwZXJtaXNzaW9uIGZsYWdzLiBQbGVhc2UgcmVmZXIgdG8gUERGIFJlZmVyZW5jZSBmb3IKKy8vCQkJZGV0YWlsZWQgZGVzY3JpcHRpb24uIElmIHRoZSBkb2N1bWVudCBpcyBub3QgcHJvdGVjdGVkLCAweGZmZmZmZmZmIHdpbGwgYmUgcmV0dXJuZWQuCisvLworRExMRVhQT1JUIHVuc2lnbmVkIGxvbmcJU1REQ0FMTCBGUERGX0dldERvY1Blcm1pc3Npb25zKEZQREZfRE9DVU1FTlQgZG9jdW1lbnQpOworCisvLyBGdW5jdGlvbjogRlBERl9HZXRQYWdlQ291bnQKKy8vCQkJR2V0IHRvdGFsIG51bWJlciBvZiBwYWdlcyBpbiBhIGRvY3VtZW50LgorLy8gUGFyYW1ldGVyczogCisvLwkJCWRvY3VtZW50CS0JSGFuZGxlIHRvIGRvY3VtZW50LiBSZXR1cm5lZCBieSBGUERGX0xvYWREb2N1bWVudCBmdW5jdGlvbi4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJVG90YWwgbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBkb2N1bWVudC4KKy8vCitETExFWFBPUlQgaW50IFNURENBTEwgRlBERl9HZXRQYWdlQ291bnQoRlBERl9ET0NVTUVOVCBkb2N1bWVudCk7CisKKy8vIEZ1bmN0aW9uOiBGUERGX0xvYWRQYWdlCisvLwkJCUxvYWQgYSBwYWdlIGluc2lkZSBhIGRvY3VtZW50LgorLy8gUGFyYW1ldGVyczogCisvLwkJCWRvY3VtZW50CS0JSGFuZGxlIHRvIGRvY3VtZW50LiBSZXR1cm5lZCBieSBGUERGX0xvYWREb2N1bWVudCBmdW5jdGlvbi4KKy8vCQkJcGFnZV9pbmRleAktCUluZGV4IG51bWJlciBvZiB0aGUgcGFnZS4gMCBmb3IgdGhlIGZpcnN0IHBhZ2UuCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCUEgaGFuZGxlIHRvIHRoZSBsb2FkZWQgcGFnZS4gSWYgZmFpbGVkLCBOVUxMIGlzIHJldHVybmVkLgorLy8gQ29tbWVudHM6CisvLwkJCUxvYWRlZCBwYWdlIGNhbiBiZSByZW5kZXJlZCB0byBkZXZpY2VzIHVzaW5nIEZQREZfUmVuZGVyUGFnZSBmdW5jdGlvbi4KKy8vCQkJTG9hZGVkIHBhZ2UgY2FuIGJlIGNsb3NlZCBieSBGUERGX0Nsb3NlUGFnZS4KKy8vCitETExFWFBPUlQgRlBERl9QQUdFCVNURENBTEwgRlBERl9Mb2FkUGFnZShGUERGX0RPQ1VNRU5UIGRvY3VtZW50LCBpbnQgcGFnZV9pbmRleCk7CisKKy8vIEZ1bmN0aW9uOiBGUERGX0dldFBhZ2VXaWR0aAorLy8JCQlHZXQgcGFnZSB3aWR0aC4KKy8vIFBhcmFtZXRlcnM6CisvLwkJCXBhZ2UJCS0JSGFuZGxlIHRvIHRoZSBwYWdlLiBSZXR1cm5lZCBieSBGUERGX0xvYWRQYWdlIGZ1bmN0aW9uLgorLy8gUmV0dXJuIHZhbHVlOgorLy8JCQlQYWdlIHdpZHRoIChleGNsdWRpbmcgbm9uLWRpc3BsYXlhYmxlIGFyZWEpIG1lYXN1cmVkIGluIHBvaW50cy4KKy8vCQkJT25lIHBvaW50IGlzIDEvNzIgaW5jaCAoYXJvdW5kIDAuMzUyOCBtbSkuCisvLworRExMRVhQT1JUIGRvdWJsZSBTVERDQUxMIEZQREZfR2V0UGFnZVdpZHRoKEZQREZfUEFHRSBwYWdlKTsKKworLy8gRnVuY3Rpb246IEZQREZfR2V0UGFnZUhlaWdodAorLy8JCQlHZXQgcGFnZSBoZWlnaHQuCisvLyBQYXJhbWV0ZXJzOgorLy8JCQlwYWdlCQktCUhhbmRsZSB0byB0aGUgcGFnZS4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkUGFnZSBmdW5jdGlvbi4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJUGFnZSBoZWlnaHQgKGV4Y2x1ZGluZyBub24tZGlzcGxheWFibGUgYXJlYSkgbWVhc3VyZWQgaW4gcG9pbnRzLgorLy8JCQlPbmUgcG9pbnQgaXMgMS83MiBpbmNoIChhcm91bmQgMC4zNTI4IG1tKQorLy8KK0RMTEVYUE9SVCBkb3VibGUgU1REQ0FMTCBGUERGX0dldFBhZ2VIZWlnaHQoRlBERl9QQUdFIHBhZ2UpOworCisvLyBGdW5jdGlvbjogRlBERl9HZXRQYWdlU2l6ZUJ5SW5kZXgKKy8vCQkJR2V0IHRoZSBzaXplIG9mIGEgcGFnZSBieSBpbmRleC4KKy8vIFBhcmFtZXRlcnM6CisvLwkJCWRvY3VtZW50CS0JSGFuZGxlIHRvIGRvY3VtZW50LiBSZXR1cm5lZCBieSBGUERGX0xvYWREb2N1bWVudCBmdW5jdGlvbi4KKy8vCQkJcGFnZV9pbmRleAktCVBhZ2UgaW5kZXgsIHplcm8gZm9yIHRoZSBmaXJzdCBwYWdlLgorLy8JCQl3aWR0aAkJLQlQb2ludGVyIHRvIGEgZG91YmxlIHZhbHVlIHJlY2VpdmluZyB0aGUgcGFnZSB3aWR0aCAoaW4gcG9pbnRzKS4KKy8vCQkJaGVpZ2h0CQktCVBvaW50ZXIgdG8gYSBkb3VibGUgdmFsdWUgcmVjZWl2aW5nIHRoZSBwYWdlIGhlaWdodCAoaW4gcG9pbnRzKS4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJTm9uLXplcm8gZm9yIHN1Y2Nlc3MuIDAgZm9yIGVycm9yIChkb2N1bWVudCBvciBwYWdlIG5vdCBmb3VuZCkuCisvLworRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZfR2V0UGFnZVNpemVCeUluZGV4KEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsIGludCBwYWdlX2luZGV4LCBkb3VibGUqIHdpZHRoLCBkb3VibGUqIGhlaWdodCk7CisKKworLy8gUGFnZSByZW5kZXJpbmcgZmxhZ3MuIFRoZXkgY2FuIGJlIGNvbWJpbmVkIHdpdGggYml0IE9SLgorI2RlZmluZSBGUERGX0FOTk9UCQkJMHgwMQkJLy8gU2V0IGlmIGFubm90YXRpb25zIGFyZSB0byBiZSByZW5kZXJlZC4KKyNkZWZpbmUgRlBERl9MQ0RfVEVYVAkJMHgwMgkJLy8gU2V0IGlmIHVzaW5nIHRleHQgcmVuZGVyaW5nIG9wdGltaXplZCBmb3IgTENEIGRpc3BsYXkuCisjZGVmaW5lIEZQREZfTk9fTkFUSVZFVEVYVAkweDA0CQkvLyBEb24ndCB1c2UgdGhlIG5hdGl2ZSB0ZXh0IG91dHB1dCBhdmFpbGFibGUgb24gc29tZSBwbGF0Zm9ybXMKKyNkZWZpbmUgRlBERl9HUkFZU0NBTEUJCTB4MDgJCS8vIEdyYXlzY2FsZSBvdXRwdXQuCisjZGVmaW5lIEZQREZfREVCVUdfSU5GTwkJMHg4MAkJLy8gU2V0IGlmIHlvdSB3YW50IHRvIGdldCBzb21lIGRlYnVnIGluZm8uIAorCQkJCQkJCQkJCS8vIFBsZWFzZSBkaXNjdXNzIHdpdGggRm94aXQgZmlyc3QgaWYgeW91IG5lZWQgdG8gY29sbGVjdCBkZWJ1ZyBpbmZvLgorI2RlZmluZSBGUERGX05PX0NBVENICQkweDEwMAkJLy8gU2V0IGlmIHlvdSBkb24ndCB3YW50IHRvIGNhdGNoIGV4Y2VwdGlvbi4KKyNkZWZpbmUgRlBERl9SRU5ERVJfTElNSVRFRElNQUdFQ0FDSEUJMHgyMDAJLy8gTGltaXQgaW1hZ2UgY2FjaGUgc2l6ZS4gCisjZGVmaW5lIEZQREZfUkVOREVSX0ZPUkNFSEFMRlRPTkUJCTB4NDAwCS8vIEFsd2F5cyB1c2UgaGFsZnRvbmUgZm9yIGltYWdlIHN0cmV0Y2hpbmcuCisjZGVmaW5lIEZQREZfUFJJTlRJTkcJCTB4ODAwCS8vIFJlbmRlciBmb3IgcHJpbnRpbmcuCisjZGVmaW5lIEZQREZfUkVWRVJTRV9CWVRFX09SREVSCQkweDEwCQkvL3NldCB3aGV0aGVyIHJlbmRlciBpbiBhIHJldmVyc2UgQnl0ZSBvcmRlciwgdGhpcyBmbGFnIG9ubHkgCisJCQkJCQkJCQkJCQkvL2VuYWJsZSB3aGVuIHJlbmRlciB0byBhIGJpdG1hcC4KKyNpZmRlZiBfV0lOMzIKKy8vIEZ1bmN0aW9uOiBGUERGX1JlbmRlclBhZ2UKKy8vCQkJUmVuZGVyIGNvbnRlbnRzIGluIGEgcGFnZSB0byBhIGRldmljZSAoc2NyZWVuLCBiaXRtYXAsIG9yIHByaW50ZXIpLgorLy8JCQlUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgc3VwcG9ydGVkIG9uIFdpbmRvd3Mgc3lzdGVtLgorLy8gUGFyYW1ldGVyczogCisvLwkJCWRjCQkJLQlIYW5kbGUgdG8gZGV2aWNlIGNvbnRleHQuCisvLwkJCXBhZ2UJCS0JSGFuZGxlIHRvIHRoZSBwYWdlLiBSZXR1cm5lZCBieSBGUERGX0xvYWRQYWdlIGZ1bmN0aW9uLgorLy8JCQlzdGFydF94CQktCUxlZnQgcGl4ZWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgYXJlYSBpbiB0aGUgZGV2aWNlIGNvb3JkaW5hdGUuCisvLwkJCXN0YXJ0X3kJCS0JVG9wIHBpeGVsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IGFyZWEgaW4gdGhlIGRldmljZSBjb29yZGluYXRlLgorLy8JCQlzaXplX3gJCS0JSG9yaXpvbnRhbCBzaXplIChpbiBwaXhlbHMpIGZvciBkaXNwbGF5aW5nIHRoZSBwYWdlLgorLy8JCQlzaXplX3kJCS0JVmVydGljYWwgc2l6ZSAoaW4gcGl4ZWxzKSBmb3IgZGlzcGxheWluZyB0aGUgcGFnZS4KKy8vCQkJcm90YXRlCQktCVBhZ2Ugb3JpZW50YXRpb246IDAgKG5vcm1hbCksIDEgKHJvdGF0ZWQgOTAgZGVncmVlcyBjbG9ja3dpc2UpLAorLy8JCQkJCQkJCTIgKHJvdGF0ZWQgMTgwIGRlZ3JlZXMpLCAzIChyb3RhdGVkIDkwIGRlZ3JlZXMgY291bnRlci1jbG9ja3dpc2UpLgorLy8JCQlmbGFncwkJLQkwIGZvciBub3JtYWwgZGlzcGxheSwgb3IgY29tYmluYXRpb24gb2YgZmxhZ3MgZGVmaW5lZCBhYm92ZS4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJTm9uZS4KKy8vCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZfUmVuZGVyUGFnZShIREMgZGMsIEZQREZfUEFHRSBwYWdlLCBpbnQgc3RhcnRfeCwgaW50IHN0YXJ0X3ksIGludCBzaXplX3gsIGludCBzaXplX3ksCisJCQkJCQlpbnQgcm90YXRlLCBpbnQgZmxhZ3MpOworI2VuZGlmCisKKy8vIEZ1bmN0aW9uOiBGUERGX1JlbmRlclBhZ2VCaXRtYXAKKy8vCQkJUmVuZGVyIGNvbnRlbnRzIGluIGEgcGFnZSB0byBhIGRldmljZSBpbmRlcGVuZGVudCBiaXRtYXAKKy8vIFBhcmFtZXRlcnM6IAorLy8JCQliaXRtYXAJCS0JSGFuZGxlIHRvIHRoZSBkZXZpY2UgaW5kZXBlbmRlbnQgYml0bWFwIChhcyB0aGUgb3V0cHV0IGJ1ZmZlcikuCisvLwkJCQkJCQlCaXRtYXAgaGFuZGxlIGNhbiBiZSBjcmVhdGVkIGJ5IEZQREZCaXRtYXBfQ3JlYXRlIGZ1bmN0aW9uLgorLy8JCQlwYWdlCQktCUhhbmRsZSB0byB0aGUgcGFnZS4gUmV0dXJuZWQgYnkgRlBERl9Mb2FkUGFnZSBmdW5jdGlvbi4KKy8vCQkJc3RhcnRfeAkJLQlMZWZ0IHBpeGVsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IGFyZWEgaW4gdGhlIGJpdG1hcCBjb29yZGluYXRlLgorLy8JCQlzdGFydF95CQktCVRvcCBwaXhlbCBwb3NpdGlvbiBvZiB0aGUgZGlzcGxheSBhcmVhIGluIHRoZSBiaXRtYXAgY29vcmRpbmF0ZS4KKy8vCQkJc2l6ZV94CQktCUhvcml6b250YWwgc2l6ZSAoaW4gcGl4ZWxzKSBmb3IgZGlzcGxheWluZyB0aGUgcGFnZS4KKy8vCQkJc2l6ZV95CQktCVZlcnRpY2FsIHNpemUgKGluIHBpeGVscykgZm9yIGRpc3BsYXlpbmcgdGhlIHBhZ2UuCisvLwkJCXJvdGF0ZQkJLQlQYWdlIG9yaWVudGF0aW9uOiAwIChub3JtYWwpLCAxIChyb3RhdGVkIDkwIGRlZ3JlZXMgY2xvY2t3aXNlKSwKKy8vCQkJCQkJCQkyIChyb3RhdGVkIDE4MCBkZWdyZWVzKSwgMyAocm90YXRlZCA5MCBkZWdyZWVzIGNvdW50ZXItY2xvY2t3aXNlKS4KKy8vCQkJZmxhZ3MJCS0JMCBmb3Igbm9ybWFsIGRpc3BsYXksIG9yIGNvbWJpbmF0aW9uIG9mIGZsYWdzIGRlZmluZWQgYWJvdmUuCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCU5vbmUuCisvLworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX1JlbmRlclBhZ2VCaXRtYXAoRlBERl9CSVRNQVAgYml0bWFwLCBGUERGX1BBR0UgcGFnZSwgaW50IHN0YXJ0X3gsIGludCBzdGFydF95LCAKKwkJCQkJCWludCBzaXplX3gsIGludCBzaXplX3ksIGludCByb3RhdGUsIGludCBmbGFncyk7CisKKy8vIEZ1bmN0aW9uOiBGUERGX0Nsb3NlUGFnZQorLy8JCQlDbG9zZSBhIGxvYWRlZCBQREYgcGFnZS4KKy8vIFBhcmFtZXRlcnM6IAorLy8JCQlwYWdlCQktCUhhbmRsZSB0byB0aGUgbG9hZGVkIHBhZ2UuCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCU5vbmUuCisvLworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX0Nsb3NlUGFnZShGUERGX1BBR0UgcGFnZSk7CisKKy8vIEZ1bmN0aW9uOiBGUERGX0Nsb3NlRG9jdW1lbnQKKy8vCQkJQ2xvc2UgYSBsb2FkZWQgUERGIGRvY3VtZW50LgorLy8gUGFyYW1ldGVyczogCisvLwkJCWRvY3VtZW50CS0JSGFuZGxlIHRvIHRoZSBsb2FkZWQgZG9jdW1lbnQuCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCU5vbmUuCisvLworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX0Nsb3NlRG9jdW1lbnQoRlBERl9ET0NVTUVOVCBkb2N1bWVudCk7CisKKy8vIEZ1bmN0aW9uOiBGUERGX0RldmljZVRvUGFnZQorLy8JCQlDb252ZXJ0IHRoZSBzY3JlZW4gY29vcmRpbmF0ZSBvZiBhIHBvaW50IHRvIHBhZ2UgY29vcmRpbmF0ZS4KKy8vIFBhcmFtZXRlcnM6CisvLwkJCXBhZ2UJCS0JSGFuZGxlIHRvIHRoZSBwYWdlLiBSZXR1cm5lZCBieSBGUERGX0xvYWRQYWdlIGZ1bmN0aW9uLgorLy8JCQlzdGFydF94CQktCUxlZnQgcGl4ZWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgYXJlYSBpbiB0aGUgZGV2aWNlIGNvb3JkaW5hdGUuCisvLwkJCXN0YXJ0X3kJCS0JVG9wIHBpeGVsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IGFyZWEgaW4gdGhlIGRldmljZSBjb29yZGluYXRlLgorLy8JCQlzaXplX3gJCS0JSG9yaXpvbnRhbCBzaXplIChpbiBwaXhlbHMpIGZvciBkaXNwbGF5aW5nIHRoZSBwYWdlLgorLy8JCQlzaXplX3kJCS0JVmVydGljYWwgc2l6ZSAoaW4gcGl4ZWxzKSBmb3IgZGlzcGxheWluZyB0aGUgcGFnZS4KKy8vCQkJcm90YXRlCQktCVBhZ2Ugb3JpZW50YXRpb246IDAgKG5vcm1hbCksIDEgKHJvdGF0ZWQgOTAgZGVncmVlcyBjbG9ja3dpc2UpLAorLy8JCQkJCQkJCTIgKHJvdGF0ZWQgMTgwIGRlZ3JlZXMpLCAzIChyb3RhdGVkIDkwIGRlZ3JlZXMgY291bnRlci1jbG9ja3dpc2UpLgorLy8JCQlkZXZpY2VfeAktCVggdmFsdWUgaW4gZGV2aWNlIGNvb3JkaW5hdGUsIGZvciB0aGUgcG9pbnQgdG8gYmUgY29udmVydGVkLgorLy8JCQlkZXZpY2VfeQktCVkgdmFsdWUgaW4gZGV2aWNlIGNvb3JkaW5hdGUsIGZvciB0aGUgcG9pbnQgdG8gYmUgY29udmVydGVkLgorLy8JCQlwYWdlX3gJCS0JQSBQb2ludGVyIHRvIGEgZG91YmxlIHJlY2VpdmluZyB0aGUgY29udmVydGVkIFggdmFsdWUgaW4gcGFnZSBjb29yZGluYXRlLgorLy8JCQlwYWdlX3kJCS0JQSBQb2ludGVyIHRvIGEgZG91YmxlIHJlY2VpdmluZyB0aGUgY29udmVydGVkIFkgdmFsdWUgaW4gcGFnZSBjb29yZGluYXRlLgorLy8gUmV0dXJuIHZhbHVlOgorLy8JCQlOb25lLgorLy8gQ29tbWVudHM6CisvLwkJCVRoZSBwYWdlIGNvb3JkaW5hdGUgc3lzdGVtIGhhcyBpdHMgb3JpZ2luIGF0IGxlZnQtYm90dG9tIGNvcm5lciBvZiB0aGUgcGFnZSwgd2l0aCBYIGF4aXMgZ29lcyBhbG9uZworLy8JCQl0aGUgYm90dG9tIHNpZGUgdG8gdGhlIHJpZ2h0LCBhbmQgWSBheGlzIGdvZXMgYWxvbmcgdGhlIGxlZnQgc2lkZSB1cHdhcmQuIE5PVEU6IHRoaXMgY29vcmRpbmF0ZSBzeXN0ZW0gCisvLwkJCWNhbiBiZSBhbHRlcmVkIHdoZW4geW91IHpvb20sIHNjcm9sbCwgb3Igcm90YXRlIGEgcGFnZSwgaG93ZXZlciwgYSBwb2ludCBvbiB0aGUgcGFnZSBzaG91bGQgYWx3YXlzIGhhdmUgCisvLwkJCXRoZSBzYW1lIGNvb3JkaW5hdGUgdmFsdWVzIGluIHRoZSBwYWdlIGNvb3JkaW5hdGUgc3lzdGVtLiAKKy8vCisvLwkJCVRoZSBkZXZpY2UgY29vcmRpbmF0ZSBzeXN0ZW0gaXMgZGV2aWNlIGRlcGVuZGVudC4gRm9yIHNjcmVlbiBkZXZpY2UsIGl0cyBvcmlnaW4gaXMgYXQgbGVmdC10b3AKKy8vCQkJY29ybmVyIG9mIHRoZSB3aW5kb3cuIEhvd2V2ZXIgdGhpcyBvcmlnaW4gY2FuIGJlIGFsdGVyZWQgYnkgV2luZG93cyBjb29yZGluYXRlIHRyYW5zZm9ybWF0aW9uCisvLwkJCXV0aWxpdGllcy4gWW91IG11c3QgbWFrZSBzdXJlIHRoZSBzdGFydF94LCBzdGFydF95LCBzaXplX3gsIHNpemVfeSBhbmQgcm90YXRlIHBhcmFtZXRlcnMgaGF2ZSBleGFjdGx5CisvLwkJCXNhbWUgdmFsdWVzIGFzIHlvdSB1c2VkIGluIEZQREZfUmVuZGVyUGFnZSgpIGZ1bmN0aW9uIGNhbGwuCisvLworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX0RldmljZVRvUGFnZShGUERGX1BBR0UgcGFnZSwgaW50IHN0YXJ0X3gsIGludCBzdGFydF95LCBpbnQgc2l6ZV94LCBpbnQgc2l6ZV95LAorCQkJCQkJaW50IHJvdGF0ZSwgaW50IGRldmljZV94LCBpbnQgZGV2aWNlX3ksIGRvdWJsZSogcGFnZV94LCBkb3VibGUqIHBhZ2VfeSk7CisKKy8vIEZ1bmN0aW9uOiBGUERGX1BhZ2VUb0RldmljZQorLy8JCQlDb252ZXJ0IHRoZSBwYWdlIGNvb3JkaW5hdGUgb2YgYSBwb2ludCB0byBzY3JlZW4gY29vcmRpbmF0ZS4KKy8vIFBhcmFtZXRlcnM6CisvLwkJCXBhZ2UJCS0JSGFuZGxlIHRvIHRoZSBwYWdlLiBSZXR1cm5lZCBieSBGUERGX0xvYWRQYWdlIGZ1bmN0aW9uLgorLy8JCQlzdGFydF94CQktCUxlZnQgcGl4ZWwgcG9zaXRpb24gb2YgdGhlIGRpc3BsYXkgYXJlYSBpbiB0aGUgZGV2aWNlIGNvb3JkaW5hdGUuCisvLwkJCXN0YXJ0X3kJCS0JVG9wIHBpeGVsIHBvc2l0aW9uIG9mIHRoZSBkaXNwbGF5IGFyZWEgaW4gdGhlIGRldmljZSBjb29yZGluYXRlLgorLy8JCQlzaXplX3gJCS0JSG9yaXpvbnRhbCBzaXplIChpbiBwaXhlbHMpIGZvciBkaXNwbGF5aW5nIHRoZSBwYWdlLgorLy8JCQlzaXplX3kJCS0JVmVydGljYWwgc2l6ZSAoaW4gcGl4ZWxzKSBmb3IgZGlzcGxheWluZyB0aGUgcGFnZS4KKy8vCQkJcm90YXRlCQktCVBhZ2Ugb3JpZW50YXRpb246IDAgKG5vcm1hbCksIDEgKHJvdGF0ZWQgOTAgZGVncmVlcyBjbG9ja3dpc2UpLAorLy8JCQkJCQkJCTIgKHJvdGF0ZWQgMTgwIGRlZ3JlZXMpLCAzIChyb3RhdGVkIDkwIGRlZ3JlZXMgY291bnRlci1jbG9ja3dpc2UpLgorLy8JCQlwYWdlX3gJCS0JWCB2YWx1ZSBpbiBwYWdlIGNvb3JkaW5hdGUsIGZvciB0aGUgcG9pbnQgdG8gYmUgY29udmVydGVkLgorLy8JCQlwYWdlX3kJCS0JWSB2YWx1ZSBpbiBwYWdlIGNvb3JkaW5hdGUsIGZvciB0aGUgcG9pbnQgdG8gYmUgY29udmVydGVkLgorLy8JCQlkZXZpY2VfeAktCUEgcG9pbnRlciB0byBhbiBpbnRlZ2VyIHJlY2VpdmluZyB0aGUgcmVzdWx0IFggdmFsdWUgaW4gZGV2aWNlIGNvb3JkaW5hdGUuCisvLwkJCWRldmljZV95CS0JQSBwb2ludGVyIHRvIGFuIGludGVnZXIgcmVjZWl2aW5nIHRoZSByZXN1bHQgWSB2YWx1ZSBpbiBkZXZpY2UgY29vcmRpbmF0ZS4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJTm9uZS4KKy8vIENvbW1lbnRzOgorLy8JCQlTZWUgY29tbWVudHMgb2YgRlBERl9EZXZpY2VUb1BhZ2UoKSBmdW5jdGlvbi4KKy8vCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZfUGFnZVRvRGV2aWNlKEZQREZfUEFHRSBwYWdlLCBpbnQgc3RhcnRfeCwgaW50IHN0YXJ0X3ksIGludCBzaXplX3gsIGludCBzaXplX3ksCisJCQkJCQlpbnQgcm90YXRlLCBkb3VibGUgcGFnZV94LCBkb3VibGUgcGFnZV95LCBpbnQqIGRldmljZV94LCBpbnQqIGRldmljZV95KTsKKworLy8gRnVuY3Rpb246IEZQREZCaXRtYXBfQ3JlYXRlCisvLwkJCUNyZWF0ZSBhIEZveGl0IERldmljZSBJbmRlcGVuZGVudCBCaXRtYXAgKEZYRElCKS4KKy8vIFBhcmFtZXRlcnM6CisvLwkJCXdpZHRoCQktCU51bWJlciBvZiBwaXhlbHMgaW4gYSBob3Jpem9udGFsIGxpbmUgb2YgdGhlIGJpdG1hcC4gTXVzdCBiZSBncmVhdGVyIHRoYW4gMC4KKy8vCQkJaGVpZ2h0CQktCU51bWJlciBvZiBwaXhlbHMgaW4gYSB2ZXJ0aWNhbCBsaW5lIG9mIHRoZSBiaXRtYXAuIE11c3QgYmUgZ3JlYXRlciB0aGFuIDAuCisvLwkJCWFscGhhCQktCUEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgYWxwaGEgY2hhbm5lbCBpcyB1c2VkLiBOb24temVybyBmb3IgdXNpbmcgYWxwaGEsIHplcm8gZm9yIG5vdCB1c2luZy4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJVGhlIGNyZWF0ZWQgYml0bWFwIGhhbmRsZSwgb3IgTlVMTCBpZiBwYXJhbWV0ZXIgZXJyb3Igb3Igb3V0IG9mIG1lbW9yeS4KKy8vIENvbW1lbnRzOgorLy8JCQlBbiBGWERJQiBhbHdheXMgdXNlIDQgYnl0ZSBwZXIgcGl4ZWwuIFRoZSBmaXJzdCBieXRlIG9mIGEgcGl4ZWwgaXMgYWx3YXlzIGRvdWJsZSB3b3JkIGFsaWduZWQuCisvLwkJCUVhY2ggcGl4ZWwgY29udGFpbnMgcmVkIChSKSwgZ3JlZW4gKEcpLCBibHVlIChCKSBhbmQgb3B0aW9uYWxseSBhbHBoYSAoQSkgdmFsdWVzLgorLy8JCQlUaGUgYnl0ZSBvcmRlciBpcyBCR1J4ICh0aGUgbGFzdCBieXRlIHVudXNlZCBpZiBubyBhbHBoYSBjaGFubmVsKSBvciBCR1JBLgorLy8JCQkKKy8vCQkJVGhlIHBpeGVscyBpbiBhIGhvcml6b250YWwgbGluZSAoYWxzbyBjYWxsZWQgc2NhbiBsaW5lKSBhcmUgc3RvcmVkIHNpZGUgYnkgc2lkZSwgd2l0aCBsZWZ0IG1vc3QKKy8vCQkJcGl4ZWwgc3RvcmVkIGZpcnN0ICh3aXRoIGxvd2VyIG1lbW9yeSBhZGRyZXNzKS4gRWFjaCBzY2FuIGxpbmUgdXNlcyB3aWR0aCo0IGJ5dGVzLgorLy8KKy8vCQkJU2NhbiBsaW5lcyBhcmUgc3RvcmVkIG9uZSBhZnRlciBhbm90aGVyLCB3aXRoIHRvcCBtb3N0IHNjYW4gbGluZSBzdG9yZWQgZmlyc3QuIFRoZXJlIGlzIG5vIGdhcAorLy8JCQliZXR3ZWVuIGFkamFjZW50IHNjYW4gbGluZXMuCisvLworLy8JCQlUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBlbm91Z2ggbWVtb3J5IGZvciBob2xkaW5nIGFsbCBwaXhlbHMgaW4gdGhlIGJpdG1hcCwgYnV0IGl0IGRvZXNuJ3QgCisvLwkJCWluaXRpYWxpemUgdGhlIGJ1ZmZlci4gQXBwbGljYXRpb25zIGNhbiB1c2UgRlBERkJpdG1hcF9GaWxsUmVjdCB0byBmaWxsIHRoZSBiaXRtYXAgdXNpbmcgYW55IGNvbG9yLgorRExMRVhQT1JUIEZQREZfQklUTUFQIFNURENBTEwgRlBERkJpdG1hcF9DcmVhdGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgYWxwaGEpOworCisvLyBNb3JlIERJQiBmb3JtYXRzCisjZGVmaW5lIEZQREZCaXRtYXBfR3JheQkJMQkJLy8gR3JheSBzY2FsZSBiaXRtYXAsIG9uZSBieXRlIHBlciBwaXhlbC4KKyNkZWZpbmUgRlBERkJpdG1hcF9CR1IJCTIJCS8vIDMgYnl0ZXMgcGVyIHBpeGVsLCBieXRlIG9yZGVyOiBibHVlLCBncmVlbiwgcmVkLgorI2RlZmluZSBGUERGQml0bWFwX0JHUngJCTMJCS8vIDQgYnl0ZXMgcGVyIHBpeGVsLCBieXRlIG9yZGVyOiBibHVlLCBncmVlbiwgcmVkLCB1bnVzZWQuCisjZGVmaW5lIEZQREZCaXRtYXBfQkdSQQkJNAkJLy8gNCBieXRlcyBwZXIgcGl4ZWwsIGJ5dGUgb3JkZXI6IGJsdWUsIGdyZWVuLCByZWQsIGFscGhhLgorCisvLyBGdW5jdGlvbjogRlBERkJpdG1hcF9DcmVhdGVFeAorLy8JCQlDcmVhdGUgYSBGb3hpdCBEZXZpY2UgSW5kZXBlbmRlbnQgQml0bWFwIChGWERJQikKKy8vIFBhcmFtZXRlcnM6CisvLwkJCXdpZHRoCQktCU51bWJlciBvZiBwaXhlbHMgaW4gYSBob3Jpem9udGFsIGxpbmUgb2YgdGhlIGJpdG1hcC4gTXVzdCBiZSBncmVhdGVyIHRoYW4gMC4KKy8vCQkJaGVpZ2h0CQktCU51bWJlciBvZiBwaXhlbHMgaW4gYSB2ZXJ0aWNhbCBsaW5lIG9mIHRoZSBiaXRtYXAuIE11c3QgYmUgZ3JlYXRlciB0aGFuIDAuCisvLwkJCWZvcm1hdAkJLQlBIG51bWJlciBpbmRpY2F0aW5nIGZvciBiaXRtYXAgZm9ybWF0LCBhcyBkZWZpbmVkIGFib3ZlLgorLy8JCQlmaXJzdF9zY2FuCS0JQSBwb2ludGVyIHRvIHRoZSBmaXJzdCBieXRlIG9mIGZpcnN0IHNjYW4gbGluZSwgZm9yIGV4dGVybmFsIGJ1ZmZlcgorLy8JCQkJCQkJb25seS4gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgTlVMTCwgdGhlbiB0aGUgU0RLIHdpbGwgY3JlYXRlIGl0cyBvd24gYnVmZmVyLgorLy8JCQlzdHJpZGUJCS0JTnVtYmVyIG9mIGJ5dGVzIGZvciBlYWNoIHNjYW4gbGluZSwgZm9yIGV4dGVybmFsIGJ1ZmZlciBvbmx5Li4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJVGhlIGNyZWF0ZWQgYml0bWFwIGhhbmRsZSwgb3IgTlVMTCBpZiBwYXJhbWV0ZXIgZXJyb3Igb3Igb3V0IG9mIG1lbW9yeS4KKy8vIENvbW1lbnRzOgorLy8JCQlTaW1pbGFyIHRvIEZQREZCaXRtYXBfQ3JlYXRlIGZ1bmN0aW9uLCB3aXRoIG1vcmUgZm9ybWF0cyBhbmQgZXh0ZXJuYWwgYnVmZmVyIHN1cHBvcnRlZC4gCisvLwkJCUJpdG1hcCBjcmVhdGVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgaW4gYW55IHBsYWNlIHRoYXQgYSBGUERGX0JJVE1BUCBoYW5kbGUgaXMgCisvLwkJCXJlcXVpcmVkLiAKKy8vCisvLwkJCUlmIGV4dGVybmFsIHNjYW5saW5lIGJ1ZmZlciBpcyB1c2VkLCB0aGVuIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgZGVzdHJveSB0aGUgYnVmZmVyCisvLwkJCWJ5IGl0c2VsZi4gRlBERkJpdG1hcF9EZXN0cm95IGZ1bmN0aW9uIHdpbGwgbm90IGRlc3Ryb3kgdGhlIGJ1ZmZlci4KKy8vCitETExFWFBPUlQgRlBERl9CSVRNQVAgU1REQ0FMTCBGUERGQml0bWFwX0NyZWF0ZUV4KGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZvcm1hdCwgdm9pZCogZmlyc3Rfc2NhbiwgaW50IHN0cmlkZSk7CisKKy8vIEZ1bmN0aW9uOiBGUERGQml0bWFwX0ZpbGxSZWN0CisvLwkJCUZpbGwgYSByZWN0YW5nbGUgYXJlYSBpbiBhbiBGWERJQi4KKy8vIFBhcmFtZXRlcnM6CisvLwkJCWJpdG1hcAkJLQlUaGUgaGFuZGxlIHRvIHRoZSBiaXRtYXAuIFJldHVybmVkIGJ5IEZQREZCaXRtYXBfQ3JlYXRlIGZ1bmN0aW9uLgorLy8JCQlsZWZ0CQktCVRoZSBsZWZ0IHNpZGUgcG9zaXRpb24uIFN0YXJ0aW5nIGZyb20gMCBhdCB0aGUgbGVmdC1tb3N0IHBpeGVsLgorLy8JCQl0b3AJCQktCVRoZSB0b3Agc2lkZSBwb3NpdGlvbi4gU3RhcnRpbmcgZnJvbSAwIGF0IHRoZSB0b3AtbW9zdCBzY2FuIGxpbmUuCisvLwkJCXdpZHRoCQktCU51bWJlciBvZiBwaXhlbHMgdG8gYmUgZmlsbGVkIGluIGVhY2ggc2NhbiBsaW5lLgorLy8JCQloZWlnaHQJCS0JTnVtYmVyIG9mIHNjYW4gbGluZXMgdG8gYmUgZmlsbGVkLgorLy8JCQlyZWQJCQktCUEgbnVtYmVyIGZyb20gMCB0byAyNTUsIGlkZW50aWZ5aW5nIHRoZSByZWQgaW50ZW5zaXR5LgorLy8JCQlncmVlbgkJLQlBIG51bWJlciBmcm9tIDAgdG8gMjU1LCBpZGVudGlmeWluZyB0aGUgZ3JlZW4gaW50ZW5zaXR5LgorLy8JCQlibHVlCQktCUEgbnVtYmVyIGZyb20gMCB0byAyNTUsIGlkZW50aWZ5aW5nIHRoZSBibHVlIGludGVuc2l0eS4KKy8vCQkJYWxwaGEJCS0JKE9ubHkgaWYgdGhlIGFscGhhIGNoYW5uZWxlZCBpcyB1c2VkIHdoZW4gYml0bWFwIGNyZWF0ZWQpIEEgbnVtYmVyIGZyb20gMCB0byAyNTUsCisvLwkJCQkJCQlpZGVudGlmeWluZyB0aGUgYWxwaGEgdmFsdWUuCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCU5vbmUuCisvLyBDb21tZW50czoKKy8vCQkJVGhpcyBmdW5jdGlvbiBzZXQgdGhlIGNvbG9yIGFuZCAob3B0aW9uYWxseSkgYWxwaGEgdmFsdWUgaW4gc3BlY2lmaWVkIHJlZ2lvbiBvZiB0aGUgYml0bWFwLgorLy8JCQlOT1RFOiBJZiBhbHBoYSBjaGFubmVsIGlzIHVzZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBOT1QgY29tcG9zaXRlIHRoZSBiYWNrZ3JvdW5kIHdpdGggdGhlIHNvdXJjZSBjb2xvciwKKy8vCQkJaW5zdGVhZCB0aGUgYmFja2dyb3VuZCB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBzb3VyY2UgY29sb3IgYW5kIGFscGhhLgorLy8JCQlJZiBhbHBoYSBjaGFubmVsIGlzIG5vdCB1c2VkLCB0aGUgImFscGhhIiBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KKy8vCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZCaXRtYXBfRmlsbFJlY3QoRlBERl9CSVRNQVAgYml0bWFwLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCAKKwkJCQkJCQkJCWludCByZWQsIGludCBncmVlbiwgaW50IGJsdWUsIGludCBhbHBoYSk7CisKKy8vIEZ1bmN0aW9uOiBGUERGQml0bWFwX0dldEJ1ZmZlcgorLy8JCQlHZXQgZGF0YSBidWZmZXIgb2YgYW4gRlhESUIKKy8vIFBhcmFtZXRlcnM6CisvLwkJCWJpdG1hcAkJLQlIYW5kbGUgdG8gdGhlIGJpdG1hcC4gUmV0dXJuZWQgYnkgRlBERkJpdG1hcF9DcmVhdGUgZnVuY3Rpb24uCisvLyBSZXR1cm4gdmFsdWU6CisvLwkJCVRoZSBwb2ludGVyIHRvIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBiaXRtYXAgYnVmZmVyLgorLy8gQ29tbWVudHM6CisvLwkJCVRoZSBzdHJpZGUgbWF5IGJlIG1vcmUgdGhhbiB3aWR0aCAqIG51bWJlciBvZiBieXRlcyBwZXIgcGl4ZWwKKy8vCQkJQXBwbGljYXRpb25zIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBnZXQgdGhlIGJpdG1hcCBidWZmZXIgcG9pbnRlciwgdGhlbiBtYW5pcHVsYXRlIGFueSBjb2xvcgorLy8JCQlhbmQvb3IgYWxwaGEgdmFsdWVzIGZvciBhbnkgcGl4ZWxzIGluIHRoZSBiaXRtYXAuCitETExFWFBPUlQgdm9pZCogU1REQ0FMTCBGUERGQml0bWFwX0dldEJ1ZmZlcihGUERGX0JJVE1BUCBiaXRtYXApOworCisvLyBGdW5jdGlvbjogRlBERkJpdG1hcF9HZXRXaWR0aAorLy8JCQlHZXQgd2lkdGggb2YgYW4gRlhESUIuCisvLyBQYXJhbWV0ZXJzOgorLy8JCQliaXRtYXAJCS0JSGFuZGxlIHRvIHRoZSBiaXRtYXAuIFJldHVybmVkIGJ5IEZQREZCaXRtYXBfQ3JlYXRlIGZ1bmN0aW9uLgorLy8gUmV0dXJuIHZhbHVlOgorLy8JCQlUaGUgbnVtYmVyIG9mIHBpeGVscyBpbiBhIGhvcml6b250YWwgbGluZSBvZiB0aGUgYml0bWFwLgorRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZCaXRtYXBfR2V0V2lkdGgoRlBERl9CSVRNQVAgYml0bWFwKTsKKworLy8gRnVuY3Rpb246IEZQREZCaXRtYXBfR2V0SGVpZ2h0CisvLwkJCUdldCBoZWlnaHQgb2YgYW4gRlhESUIuCisvLyBQYXJhbWV0ZXJzOgorLy8JCQliaXRtYXAJCS0JSGFuZGxlIHRvIHRoZSBiaXRtYXAuIFJldHVybmVkIGJ5IEZQREZCaXRtYXBfQ3JlYXRlIGZ1bmN0aW9uLgorLy8gUmV0dXJuIHZhbHVlOgorLy8JCQlUaGUgbnVtYmVyIG9mIHBpeGVscyBpbiBhIHZlcnRpY2FsIGxpbmUgb2YgdGhlIGJpdG1hcC4KK0RMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGQml0bWFwX0dldEhlaWdodChGUERGX0JJVE1BUCBiaXRtYXApOworCisvLyBGdW5jdGlvbjogRlBERkJpdG1hcF9HZXRTdHJpZGUKKy8vCQkJR2V0IG51bWJlciBvZiBieXRlcyBmb3IgZWFjaCBzY2FuIGxpbmUgaW4gdGhlIGJpdG1hcCBidWZmZXIuCisvLyBQYXJhbWV0ZXJzOgorLy8JCQliaXRtYXAJCS0JSGFuZGxlIHRvIHRoZSBiaXRtYXAuIFJldHVybmVkIGJ5IEZQREZCaXRtYXBfQ3JlYXRlIGZ1bmN0aW9uLgorLy8gUmV0dXJuIHZhbHVlOgorLy8JCQlUaGUgbnVtYmVyIG9mIGJ5dGVzIGZvciBlYWNoIHNjYW4gbGluZSBpbiB0aGUgYml0bWFwIGJ1ZmZlci4KKy8vIENvbW1lbnRzOgorLy8JCQlUaGUgc3RyaWRlIG1heSBiZSBtb3JlIHRoYW4gd2lkdGggKiBudW1iZXIgb2YgYnl0ZXMgcGVyIHBpeGVsCitETExFWFBPUlQgaW50IFNURENBTEwgRlBERkJpdG1hcF9HZXRTdHJpZGUoRlBERl9CSVRNQVAgYml0bWFwKTsKKworLy8gRnVuY3Rpb246IEZQREZCaXRtYXBfRGVzdHJveQorLy8JCQlEZXN0cm95IGFuIEZYRElCIGFuZCByZWxlYXNlIGFsbCByZWxhdGVkIGJ1ZmZlcnMuIAorLy8gUGFyYW1ldGVyczoKKy8vCQkJYml0bWFwCQktCUhhbmRsZSB0byB0aGUgYml0bWFwLiBSZXR1cm5lZCBieSBGUERGQml0bWFwX0NyZWF0ZSBmdW5jdGlvbi4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJTm9uZS4KKy8vIENvbW1lbnRzOgorLy8JCQlUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IGRlc3Ryb3kgYW55IGV4dGVybmFsIGJ1ZmZlci4KKy8vCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZCaXRtYXBfRGVzdHJveShGUERGX0JJVE1BUCBiaXRtYXApOworCisvLyBGdW5jdGlvbjogRlBERl9WSUVXRVJSRUZfR2V0UHJpbnRTY2FsaW5nCisvLwkJCVdoZXRoZXIgdGhlIFBERiBkb2N1bWVudCBwcmVmZXJzIHRvIGJlIHNjYWxlZCBvciBub3QuCisvLyBQYXJhbWV0ZXJzOiAKKy8vCQkJZG9jdW1lbnQJLQlIYW5kbGUgdG8gdGhlIGxvYWRlZCBkb2N1bWVudC4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJTm9uZS4KKy8vCitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERl9WSUVXRVJSRUZfR2V0UHJpbnRTY2FsaW5nKEZQREZfRE9DVU1FTlQgZG9jdW1lbnQpOworCisvLyBGdW5jdGlvbjogRlBERl9HZXROYW1lZERlc3RCeU5hbWUKKy8vCQkJZ2V0IGEgc3BlY2lhbCBkZXN0IGhhbmRsZSBieSB0aGUgaW5kZXguCisvLyBQYXJhbWV0ZXJzOiAKKy8vCQkJZG9jdW1lbnQJLQlIYW5kbGUgdG8gdGhlIGxvYWRlZCBkb2N1bWVudC4KKy8vCQkJbmFtZQkJLQlUaGUgbmFtZSBvZiBhIHNwZWNpYWwgbmFtZWQgZGVzdC4KKy8vIFJldHVybiB2YWx1ZToKKy8vCQkJVGhlIGhhbmRsZSBvZiB0aGUgZGVzdC4KKy8vCitETExFWFBPUlQgRlBERl9ERVNUIFNURENBTEwgRlBERl9HZXROYW1lZERlc3RCeU5hbWUoRlBERl9ET0NVTUVOVCBkb2N1bWVudCxGUERGX0JZVEVTVFJJTkcgbmFtZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfTsKKyNlbmRpZgorCisjZW5kaWYgLy8gX0ZQREZWSUVXX0hfCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvZnNka19hY3Rpb25oYW5kbGVyLmggYi9mcGRmc2RrL2luY2x1ZGUvZnNka19hY3Rpb25oYW5kbGVyLmgKaW5kZXggYzkzZTY3OS4uMGZmYmRkYiAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2ZzZGtfYWN0aW9uaGFuZGxlci5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9mc2RrX2FjdGlvbmhhbmRsZXIuaApAQCAtMSw4MiArMSw4MiBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlNES19BQ1RJT05IQU5ETEVSX0hfDQotI2RlZmluZSBfRlNES19BQ1RJT05IQU5ETEVSX0hfDQotDQotDQotY2xhc3MgQ1BERkRvY19FbnZpcm9ubWVudDsNCi1jbGFzcyBJRlhKU19SdW50aW1lOw0KLQ0KLWNsYXNzIENQREZTREtfRm9ybUFjdGlvbkhhbmRsZXINCi17DQotcHVibGljOg0KLQlGWF9CT09MCURvQWN0aW9uX0hpZGUoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsNCi0JRlhfQk9PTAlEb0FjdGlvbl9TdWJtaXRGb3JtKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7DQotCUZYX0JPT0wJRG9BY3Rpb25fUmVzZXRGb3JtKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7DQotCUZYX0JPT0wJRG9BY3Rpb25fSW1wb3J0RGF0YShjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOw0KLX07DQotDQotY2xhc3MgQ1BERlNES19NZWRpYUFjdGlvbkhhbmRsZXINCi17DQotcHVibGljOg0KLQlGWF9CT09MCURvQWN0aW9uX1JlbmRpdGlvbihjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOw0KLQlGWF9CT09MCURvQWN0aW9uX1NvdW5kKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7DQotCUZYX0JPT0wJRG9BY3Rpb25fTW92aWUoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsNCi19Ow0KLQ0KLWNsYXNzICBDUERGU0RLX0FjdGlvbkhhbmRsZXIgLyo6IHB1YmxpYyBDUmVhZGVyX0FjdGlvbkhhbmRsZXIqLw0KLXsNCi1wdWJsaWM6DQotCUNQREZTREtfQWN0aW9uSGFuZGxlcihDUERGRG9jX0Vudmlyb25tZW50KiBwRXZpKTsNCi0JdmlydHVhbCB+Q1BERlNES19BY3Rpb25IYW5kbGVyKCk7DQotCQ0KLQl2aXJ0dWFsIHZvaWQJCURlc3Ryb3koKTsNCi0JdmlydHVhbCBGWF9CT09MCQlEb0FjdGlvbl9Eb2NPcGVuKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudC8qLCBDUERGU0RLX0RvY1ZpZXcgKnBEb2NWaWV3Ki8pOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCURvQWN0aW9uX0phdmFTY3JpcHQoY29uc3QgQ1BERl9BY3Rpb24mIEpzQWN0aW9uLENGWF9XaWRlU3RyaW5nIGNzSlNOYW1lLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQvKiwgQ1JlYWRlcl9Eb2NWaWV3ICpwRG9jVmlldyovKTsNCi0JdmlydHVhbCBGWF9CT09MCQlEb0FjdGlvbl9QYWdlKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIGVudW0gQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSBlVHlwZSwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LyosIENSZWFkZXJfRG9jVmlldyAqcERvY1ZpZXcqLyk7DQotCXZpcnR1YWwgRlhfQk9PTAkJRG9BY3Rpb25fRG9jdW1lbnQoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgZW51bSBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIGVUeXBlLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQvKiwgQ1JlYWRlcl9Eb2NWaWV3ICpwRG9jVmlldyovKTsNCi0JdmlydHVhbCBGWF9CT09MCQlEb0FjdGlvbl9Cb29rTWFyayhDUERGX0Jvb2ttYXJrICpwQm9va01hcmssIGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LyosIENSZWFkZXJfRG9jVmlldyAqcERvY1ZpZXcqLyk7CQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCURvQWN0aW9uX1NjcmVlbihjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwvKiBDUmVhZGVyX0RvY1ZpZXcgKnBEb2NWaWV3LCovIENQREZTREtfQW5ub3QqIHBTY3JlZW4pOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCURvQWN0aW9uX0xpbmsoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LyosIENSZWFkZXJfRG9jVmlldyAqcERvY1ZpZXcqLyk7DQotCXZpcnR1YWwgRlhfQk9PTAkJRG9BY3Rpb25fRmllbGQoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIC8qQ1JlYWRlcl9Eb2NWaWV3ICpwRG9jVmlldywqLyBDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCwgUERGU0RLX0ZpZWxkQWN0aW9uJiBkYXRhKTsNCi0JdmlydHVhbCBGWF9CT09MCQlEb0FjdGlvbl9GaWVsZEphdmFTY3JpcHQoY29uc3QgQ1BERl9BY3Rpb24mIEpzQWN0aW9uLCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQsIFBERlNES19GaWVsZEFjdGlvbiYgZGF0YSk7DQotcHVibGljOg0KLQl2b2lkCQkJCVNldEZvcm1BY3Rpb25IYW5kbGVyKENQREZTREtfRm9ybUFjdGlvbkhhbmRsZXIqIHBIYW5kbGVyKTsNCi0Jdm9pZAkJCQlTZXRNZWRpYUFjdGlvbkhhbmRsZXIoQ1BERlNES19NZWRpYUFjdGlvbkhhbmRsZXIqIHBIYW5kbGVyKTsNCi0JDQotcHJpdmF0ZToNCi0JRlhfQk9PTAkJCQlFeGVjdXRlRG9jdW1lbnRPcGVuQWN0aW9uKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgLypDUmVhZGVyX0RvY1ZpZXcgKnBEb2NWaWV3LCovIENGWF9QdHJMaXN0JiBsaXN0KTsNCi0JRlhfQk9PTAkJCQlFeGVjdXRlRG9jdW1lbnRQYWdlQWN0aW9uKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCAvKkNSZWFkZXJfRG9jVmlldyAqcERvY1ZpZXcsKi8gQ0ZYX1B0ckxpc3QmIGxpc3QpOw0KLQlGWF9CT09MCQkJCUV4ZWN1dGVGaWVsZEFjdGlvbihjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgLypDUmVhZGVyX0RvY1ZpZXcqIHBEb2NWaWV3LCovIENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkLCBQREZTREtfRmllbGRBY3Rpb24mIGRhdGEsIENGWF9QdHJMaXN0JiBsaXN0KTsNCi0JRlhfQk9PTAkJCQlFeGVjdXRlU2NyZWVuQWN0aW9uKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCAvKkNSZWFkZXJfRG9jVmlldyogcERvY1ZpZXcsKi8gQ1BERlNES19Bbm5vdCogcFNjcmVlbiwgQ0ZYX1B0ckxpc3QmIGxpc3QpOw0KLQlGWF9CT09MCQkJCUV4ZWN1dGVCb29rTWFyayhjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIC8qQ1JlYWRlcl9Eb2NWaWV3KiBwRG9jVmlldywqLyBDUERGX0Jvb2ttYXJrKiBwQm9va21hcmssIENGWF9QdHJMaXN0JiBsaXN0KTsNCi0JRlhfQk9PTAkJCQlFeGVjdXRlTGlua0FjdGlvbihjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIC8qQ1JlYWRlcl9Eb2NWaWV3KiBwRG9jVmlldywqLyBDRlhfUHRyTGlzdCYgbGlzdCk7DQotCQ0KLQl2b2lkCQkJCURvQWN0aW9uX05vSnMoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LyosIENSZWFkZXJfRG9jVmlldyogcERvY1ZpZXcqLyk7DQotCXZvaWQJCQkJUnVuRG9jdW1lbnRQYWdlSmF2YVNjcmlwdChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNjcmlwdCk7DQotCXZvaWQJCQkJUnVuRG9jdW1lbnRPcGVuSmF2YVNjcmlwdChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzU2NyaXB0TmFtZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNjcmlwdCk7DQotCXZvaWQJCQkJUnVuRmllbGRKYXZhU2NyaXB0KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQsIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgUERGU0RLX0ZpZWxkQWN0aW9uJiBkYXRhLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc2NyaXB0KTsNCi0JDQotcHJpdmF0ZToNCi0JRlhfQk9PTAkJCQlJc1ZhbGlkRmllbGQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBDUERGX0RpY3Rpb25hcnkqIHBGaWVsZERpY3QpOw0KLQlGWF9CT09MCQkJCUlzVmFsaWREb2NWaWV3KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudC8qLCBDUmVhZGVyX0RvY1ZpZXcqIHBEb2NWaWV3Ki8pOw0KLQkNCi0Jdm9pZAkJCQlEb0FjdGlvbl9Hb1RvKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgLypDUmVhZGVyX0RvY1ZpZXcgKnBEb2NWaWV3LCovIGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24pOw0KLQl2b2lkCQkJCURvQWN0aW9uX0dvVG9SKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbik7DQotCXZvaWQJCQkJRG9BY3Rpb25fTGF1bmNoKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbik7DQotCXZvaWQJCQkJRG9BY3Rpb25fVVJJKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbik7DQotCXZvaWQJCQkJRG9BY3Rpb25fTmFtZWQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uKTsNCi0Jdm9pZAkJCQlEb0FjdGlvbl9TZXRPQ0dTdGF0ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIC8qQ1JlYWRlcl9Eb2NWaWV3KiBwRG9jVmlldywqLyBjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uKTsNCi0JDQotcHJpdmF0ZToNCi0JQ1BERkRvY19FbnZpcm9ubWVudCoJCQltX3BFdmk7DQotCUNQREZTREtfRm9ybUFjdGlvbkhhbmRsZXIqCQltX3BGb3JtQWN0aW9uSGFuZGxlcjsNCi0JQ1BERlNES19NZWRpYUFjdGlvbkhhbmRsZXIqCQltX3BNZWRpYUFjdGlvbkhhbmRsZXI7DQotfTsNCi0NCi0jZW5kaWYgLy9fQkFfQUNUSU9OSEFORExFUl9IXw0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZTREtfQUNUSU9OSEFORExFUl9IXworI2RlZmluZSBfRlNES19BQ1RJT05IQU5ETEVSX0hfCisKKworY2xhc3MgQ1BERkRvY19FbnZpcm9ubWVudDsKK2NsYXNzIElGWEpTX1J1bnRpbWU7CisKK2NsYXNzIENQREZTREtfRm9ybUFjdGlvbkhhbmRsZXIKK3sKK3B1YmxpYzoKKwlGWF9CT09MCURvQWN0aW9uX0hpZGUoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsKKwlGWF9CT09MCURvQWN0aW9uX1N1Ym1pdEZvcm0oY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsKKwlGWF9CT09MCURvQWN0aW9uX1Jlc2V0Rm9ybShjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOworCUZYX0JPT0wJRG9BY3Rpb25fSW1wb3J0RGF0YShjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOworfTsKKworY2xhc3MgQ1BERlNES19NZWRpYUFjdGlvbkhhbmRsZXIKK3sKK3B1YmxpYzoKKwlGWF9CT09MCURvQWN0aW9uX1JlbmRpdGlvbihjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpOworCUZYX0JPT0wJRG9BY3Rpb25fU291bmQoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsKKwlGWF9CT09MCURvQWN0aW9uX01vdmllKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCk7Cit9OworCitjbGFzcyAgQ1BERlNES19BY3Rpb25IYW5kbGVyIC8qOiBwdWJsaWMgQ1JlYWRlcl9BY3Rpb25IYW5kbGVyKi8KK3sKK3B1YmxpYzoKKwlDUERGU0RLX0FjdGlvbkhhbmRsZXIoQ1BERkRvY19FbnZpcm9ubWVudCogcEV2aSk7CisJdmlydHVhbCB+Q1BERlNES19BY3Rpb25IYW5kbGVyKCk7CisJCisJdmlydHVhbCB2b2lkCQlEZXN0cm95KCk7CisJdmlydHVhbCBGWF9CT09MCQlEb0FjdGlvbl9Eb2NPcGVuKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudC8qLCBDUERGU0RLX0RvY1ZpZXcgKnBEb2NWaWV3Ki8pOworCXZpcnR1YWwgRlhfQk9PTAkJRG9BY3Rpb25fSmF2YVNjcmlwdChjb25zdCBDUERGX0FjdGlvbiYgSnNBY3Rpb24sQ0ZYX1dpZGVTdHJpbmcgY3NKU05hbWUsIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudC8qLCBDUmVhZGVyX0RvY1ZpZXcgKnBEb2NWaWV3Ki8pOworCXZpcnR1YWwgRlhfQk9PTAkJRG9BY3Rpb25fUGFnZShjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBlbnVtIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgZVR5cGUsIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudC8qLCBDUmVhZGVyX0RvY1ZpZXcgKnBEb2NWaWV3Ki8pOworCXZpcnR1YWwgRlhfQk9PTAkJRG9BY3Rpb25fRG9jdW1lbnQoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgZW51bSBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIGVUeXBlLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQvKiwgQ1JlYWRlcl9Eb2NWaWV3ICpwRG9jVmlldyovKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCURvQWN0aW9uX0Jvb2tNYXJrKENQREZfQm9va21hcmsgKnBCb29rTWFyaywgY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQvKiwgQ1JlYWRlcl9Eb2NWaWV3ICpwRG9jVmlldyovKTsJCisJdmlydHVhbCBGWF9CT09MCQlEb0FjdGlvbl9TY3JlZW4oY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsLyogQ1JlYWRlcl9Eb2NWaWV3ICpwRG9jVmlldywqLyBDUERGU0RLX0Fubm90KiBwU2NyZWVuKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCURvQWN0aW9uX0xpbmsoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LyosIENSZWFkZXJfRG9jVmlldyAqcERvY1ZpZXcqLyk7CisJdmlydHVhbCBGWF9CT09MCQlEb0FjdGlvbl9GaWVsZChjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgLypDUmVhZGVyX0RvY1ZpZXcgKnBEb2NWaWV3LCovIENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkLCBQREZTREtfRmllbGRBY3Rpb24mIGRhdGEpOworCXZpcnR1YWwgRlhfQk9PTAkJRG9BY3Rpb25fRmllbGRKYXZhU2NyaXB0KGNvbnN0IENQREZfQWN0aW9uJiBKc0FjdGlvbiwgQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkLCBQREZTREtfRmllbGRBY3Rpb24mIGRhdGEpOworcHVibGljOgorCXZvaWQJCQkJU2V0Rm9ybUFjdGlvbkhhbmRsZXIoQ1BERlNES19Gb3JtQWN0aW9uSGFuZGxlciogcEhhbmRsZXIpOworCXZvaWQJCQkJU2V0TWVkaWFBY3Rpb25IYW5kbGVyKENQREZTREtfTWVkaWFBY3Rpb25IYW5kbGVyKiBwSGFuZGxlcik7CisJCitwcml2YXRlOgorCUZYX0JPT0wJCQkJRXhlY3V0ZURvY3VtZW50T3BlbkFjdGlvbihjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIC8qQ1JlYWRlcl9Eb2NWaWV3ICpwRG9jVmlldywqLyBDRlhfUHRyTGlzdCYgbGlzdCk7CisJRlhfQk9PTAkJCQlFeGVjdXRlRG9jdW1lbnRQYWdlQWN0aW9uKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCAvKkNSZWFkZXJfRG9jVmlldyAqcERvY1ZpZXcsKi8gQ0ZYX1B0ckxpc3QmIGxpc3QpOworCUZYX0JPT0wJCQkJRXhlY3V0ZUZpZWxkQWN0aW9uKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCAvKkNSZWFkZXJfRG9jVmlldyogcERvY1ZpZXcsKi8gQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQsIFBERlNES19GaWVsZEFjdGlvbiYgZGF0YSwgQ0ZYX1B0ckxpc3QmIGxpc3QpOworCUZYX0JPT0wJCQkJRXhlY3V0ZVNjcmVlbkFjdGlvbihjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgLypDUmVhZGVyX0RvY1ZpZXcqIHBEb2NWaWV3LCovIENQREZTREtfQW5ub3QqIHBTY3JlZW4sIENGWF9QdHJMaXN0JiBsaXN0KTsKKwlGWF9CT09MCQkJCUV4ZWN1dGVCb29rTWFyayhjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIC8qQ1JlYWRlcl9Eb2NWaWV3KiBwRG9jVmlldywqLyBDUERGX0Jvb2ttYXJrKiBwQm9va21hcmssIENGWF9QdHJMaXN0JiBsaXN0KTsKKwlGWF9CT09MCQkJCUV4ZWN1dGVMaW5rQWN0aW9uKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgLypDUmVhZGVyX0RvY1ZpZXcqIHBEb2NWaWV3LCovIENGWF9QdHJMaXN0JiBsaXN0KTsKKwkKKwl2b2lkCQkJCURvQWN0aW9uX05vSnMoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LyosIENSZWFkZXJfRG9jVmlldyogcERvY1ZpZXcqLyk7CisJdm9pZAkJCQlSdW5Eb2N1bWVudFBhZ2VKYXZhU2NyaXB0KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc2NyaXB0KTsKKwl2b2lkCQkJCVJ1bkRvY3VtZW50T3BlbkphdmFTY3JpcHQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc1NjcmlwdE5hbWUsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzY3JpcHQpOworCXZvaWQJCQkJUnVuRmllbGRKYXZhU2NyaXB0KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQsIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgUERGU0RLX0ZpZWxkQWN0aW9uJiBkYXRhLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc2NyaXB0KTsKKwkKK3ByaXZhdGU6CisJRlhfQk9PTAkJCQlJc1ZhbGlkRmllbGQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBDUERGX0RpY3Rpb25hcnkqIHBGaWVsZERpY3QpOworCUZYX0JPT0wJCQkJSXNWYWxpZERvY1ZpZXcoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LyosIENSZWFkZXJfRG9jVmlldyogcERvY1ZpZXcqLyk7CisJCisJdm9pZAkJCQlEb0FjdGlvbl9Hb1RvKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgLypDUmVhZGVyX0RvY1ZpZXcgKnBEb2NWaWV3LCovIGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24pOworCXZvaWQJCQkJRG9BY3Rpb25fR29Ub1IoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uKTsKKwl2b2lkCQkJCURvQWN0aW9uX0xhdW5jaChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24pOworCXZvaWQJCQkJRG9BY3Rpb25fVVJJKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbik7CisJdm9pZAkJCQlEb0FjdGlvbl9OYW1lZChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24pOworCXZvaWQJCQkJRG9BY3Rpb25fU2V0T0NHU3RhdGUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCAvKkNSZWFkZXJfRG9jVmlldyogcERvY1ZpZXcsKi8gY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbik7CisJCitwcml2YXRlOgorCUNQREZEb2NfRW52aXJvbm1lbnQqCQkJbV9wRXZpOworCUNQREZTREtfRm9ybUFjdGlvbkhhbmRsZXIqCQltX3BGb3JtQWN0aW9uSGFuZGxlcjsKKwlDUERGU0RLX01lZGlhQWN0aW9uSGFuZGxlcioJCW1fcE1lZGlhQWN0aW9uSGFuZGxlcjsKK307CisKKyNlbmRpZiAvL19CQV9BQ1RJT05IQU5ETEVSX0hfCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9mc2RrX2Fubm90aGFuZGxlci5oIGIvZnBkZnNkay9pbmNsdWRlL2ZzZGtfYW5ub3RoYW5kbGVyLmgKaW5kZXggZGMyZTQwYS4uZmVjM2Q5MiAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2ZzZGtfYW5ub3RoYW5kbGVyLmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2ZzZGtfYW5ub3RoYW5kbGVyLmgKQEAgLTEsMjQ4ICsxLDI0OCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlNES19BTk5PVEhBTkRMRVJfSF8NCi0jZGVmaW5lIF9GU0RLX0FOTk9USEFORExFUl9IXw0KLQ0KLQ0KLWNsYXNzIENQREZEb2NfRW52aXJvbm1lbnQ7DQotY2xhc3MgQ0ZGTF9JRm9ybUZpbGxlcjsNCi1jbGFzcyBDUERGU0RLX1BhZ2VWaWV3Ow0KLWNsYXNzIElQREZTREtfQW5ub3RIYW5kbGVyDQotew0KLQ0KLXB1YmxpYzoNCi0JdmlydHVhbCB+SVBERlNES19Bbm5vdEhhbmRsZXIoKSB7fTsNCi0NCi0JdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJR2V0VHlwZSgpID0gMDsNCi0NCi0JdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJR2V0TmFtZSgpID0gMDsNCi0NCi0JdmlydHVhbCBGWF9CT09MCQkJCUNhbkFuc3dlcihDUERGU0RLX0Fubm90KiBwQW5ub3QpID0gMDsNCi0JDQotDQotCXZpcnR1YWwgQ1BERlNES19Bbm5vdCoJCU5ld0Fubm90KENQREZfQW5ub3QqIHBBbm5vdCwgQ1BERlNES19QYWdlVmlldyogcFBhZ2UpID0gMDsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCVJlbGVhc2VBbm5vdChDUERGU0RLX0Fubm90KiBwQW5ub3QpID0gMDsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCURlbGV0ZUFubm90KENQREZTREtfQW5ub3QqIHBBbm5vdCkgPSAwOw0KLQkNCi0NCi0JdmlydHVhbCBDUERGX1JlY3QJCQkJR2V0Vmlld0JCb3goQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QpID0gMDsNCi0JDQotCXZpcnR1YWwgRlhfQk9PTAkJCQlIaXRUZXN0KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkgPSAwOw0KLQkNCi0NCi0JdmlydHVhbCB2b2lkCQkJCU9uRHJhdyhDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgDQotCQlDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLA0KLQkJRlhfRFdPUkQgZHdGbGFncykgPSAwOw0KLQkNCi0JdmlydHVhbCB2b2lkCQkJCU9uRHJhd1NsZWVwKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCANCi0JCUNGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsDQotCQljb25zdCBDUERGX1JlY3QmIHJjV2luZG93LCBGWF9EV09SRCBkd0ZsYWdzKSA9IDA7DQotCQ0KLQ0KLQkNCi0NCi0JdmlydHVhbCB2b2lkCQkJCU9uQ3JlYXRlKENQREZTREtfQW5ub3QqIHBBbm5vdCkgPSAwOw0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJT25Mb2FkKENQREZTREtfQW5ub3QqIHBBbm5vdCkgPSAwOw0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJT25EZWxldGUoQ1BERlNES19Bbm5vdCogcEFubm90KSA9IDA7DQotDQotCXZpcnR1YWwgdm9pZAkJCQlPblJlbGVhc2UoQ1BERlNES19Bbm5vdCogcEFubm90KSA9IDA7DQotCQ0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJT25Nb3VzZUVudGVyKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZykgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25Nb3VzZUV4aXQoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFnKSA9IDA7DQotCQ0KLQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25MQnV0dG9uRG93bihDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkgPSAwOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25MQnV0dG9uVXAoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpID0gMDsNCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uTEJ1dHRvbkRibENsayhDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkgPSAwOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25Nb3VzZU1vdmUoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpID0gMDsNCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uTW91c2VXaGVlbChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBzaG9ydCB6RGVsdGEsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KSA9IDA7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPblJCdXR0b25Eb3duKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KSA9IDA7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPblJCdXR0b25VcChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkgPSAwOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25SQnV0dG9uRGJsQ2xrKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KSA9IDA7DQotLy9ieSB3am0uDQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkNoYXIoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuQ2hhciwgRlhfRFdPUkQgbkZsYWdzKSA9IDA7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbktleURvd24oQ1BERlNES19Bbm5vdCogcEFubm90LCBpbnQgbktleUNvZGUsIGludCBuRmxhZykgPSAwOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25LZXlVcChDUERGU0RLX0Fubm90KiBwQW5ub3QsIGludCBuS2V5Q29kZSwgaW50IG5GbGFnKSA9MCA7DQotDQotCXZpcnR1YWwJdm9pZAkJCQlPbkRlU2VsZWN0ZWQoQ1BERlNES19Bbm5vdCogcEFubm90KSA9IDA7DQotCXZpcnR1YWwJdm9pZAkJCQlPblNlbGVjdGVkKENQREZTREtfQW5ub3QqIHBBbm5vdCkgPSAwOw0KLQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25TZXRGb2N1cyhDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFnKSA9IDA7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbktpbGxGb2N1cyhDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFnKSA9IDA7DQotDQotfTsNCi0NCi0NCi1jbGFzcyBDUERGU0RLX0JGQW5ub3RIYW5kbGVyOnB1YmxpYyBJUERGU0RLX0Fubm90SGFuZGxlcg0KLXsNCi1wdWJsaWM6DQotCUNQREZTREtfQkZBbm5vdEhhbmRsZXIoQ1BERkRvY19FbnZpcm9ubWVudCoJcEFwcCk6bV9wRm9ybUZpbGxlcihOVUxMKSxtX3BBcHAocEFwcCkge30NCi0JdmlydHVhbAl+Q1BERlNES19CRkFubm90SGFuZGxlcigpIHt9DQotcHVibGljOg0KLQ0KLQl2aXJ0dWFsIENGWF9CeXRlU3RyaW5nCQlHZXRUeXBlKCkgIHtyZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoIldpZGdldCIpO30NCi0NCi0JdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJR2V0TmFtZSgpICB7cmV0dXJuIENGWF9CeXRlU3RyaW5nKCJXaWRnZXRIYW5kbGVyIik7fQ0KLQkNCi0JdmlydHVhbCBGWF9CT09MCQkJCUNhbkFuc3dlcihDUERGU0RLX0Fubm90KiBwQW5ub3QpOw0KLQ0KLQl2aXJ0dWFsIENQREZTREtfQW5ub3QqCQlOZXdBbm5vdChDUERGX0Fubm90KiBwQW5ub3QsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlKTsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCVJlbGVhc2VBbm5vdChDUERGU0RLX0Fubm90KiBwQW5ub3QpICA7DQotDQotCXZpcnR1YWwgdm9pZAkJCQlEZWxldGVBbm5vdChDUERGU0RLX0Fubm90KiBwQW5ub3QpIHt9DQotCQ0KLQ0KLQl2aXJ0dWFsIENQREZfUmVjdAkJCQlHZXRWaWV3QkJveChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCkgOw0KLQkNCi0JdmlydHVhbCBGWF9CT09MCQkJCUhpdFRlc3QoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsNCi0JDQotDQotCXZpcnR1YWwgdm9pZAkJCQlPbkRyYXcoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIA0KLQkJQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwNCi0JCSBGWF9EV09SRCBkd0ZsYWdzKSA7DQotCQ0KLQl2aXJ0dWFsIHZvaWQJCQkJT25EcmF3U2xlZXAoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIA0KLQkJQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwNCi0JCWNvbnN0IENQREZfUmVjdCYgcmNXaW5kb3csIEZYX0RXT1JEIGR3RmxhZ3MpIHt9DQotCQ0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJT25DcmVhdGUoQ1BERlNES19Bbm5vdCogcEFubm90KSA7DQotDQotCXZpcnR1YWwgdm9pZAkJCQlPbkxvYWQoQ1BERlNES19Bbm5vdCogcEFubm90KSA7DQotDQotCXZpcnR1YWwgdm9pZAkJCQlPbkRlbGV0ZShDUERGU0RLX0Fubm90KiBwQW5ub3QpIHt9DQotDQotCXZpcnR1YWwgdm9pZAkJCQlPblJlbGVhc2UoQ1BERlNES19Bbm5vdCogcEFubm90KSB7fQ0KLQkNCi0NCi0JdmlydHVhbCB2b2lkCQkJCU9uTW91c2VFbnRlcihDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWcpIDsNCi0JdmlydHVhbCB2b2lkCQkJCU9uTW91c2VFeGl0KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZykgOw0KLQkNCi0NCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uTEJ1dHRvbkRvd24oQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpIDsNCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uTEJ1dHRvblVwKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KSA7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkxCdXR0b25EYmxDbGsoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpIDsNCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uTW91c2VNb3ZlKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KSA7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbk1vdXNlV2hlZWwoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgc2hvcnQgekRlbHRhLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkgOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25SQnV0dG9uRG93bihDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkgOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25SQnV0dG9uVXAoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpIDsNCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uUkJ1dHRvbkRibENsayhDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkge3JldHVybiBGQUxTRTt9DQotCQ0KLS8vYnkgd2ptLg0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25DaGFyKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkNoYXIsIEZYX0RXT1JEIG5GbGFncyk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbktleURvd24oQ1BERlNES19Bbm5vdCogcEFubm90LCBpbnQgbktleUNvZGUsIGludCBuRmxhZyk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbktleVVwKENQREZTREtfQW5ub3QqIHBBbm5vdCwgaW50IG5LZXlDb2RlLCBpbnQgbkZsYWcpOw0KLQ0KLQl2aXJ0dWFsCXZvaWQJCQkJT25EZVNlbGVjdGVkKENQREZTREtfQW5ub3QqIHBBbm5vdCkge30NCi0JdmlydHVhbAl2b2lkCQkJCU9uU2VsZWN0ZWQoQ1BERlNES19Bbm5vdCogcEFubm90KSB7fQ0KLQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25TZXRGb2N1cyhDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFnKTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uS2lsbEZvY3VzKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWcpOw0KLQ0KLQl2b2lkCQkJCQkJU2V0Rm9ybUZpbGxlcihDRkZMX0lGb3JtRmlsbGVyKiBwRmlsbGVyKXttX3BGb3JtRmlsbGVyID0gcEZpbGxlcjt9DQotCUNGRkxfSUZvcm1GaWxsZXIqCQkJR2V0Rm9ybUZpbGxlcigpIHtyZXR1cm4gbV9wRm9ybUZpbGxlcjt9DQotcHJpdmF0ZToNCi0NCi0JQ1BERkRvY19FbnZpcm9ubWVudCoJCW1fcEFwcDsNCi0JQ0ZGTF9JRm9ybUZpbGxlcioJCQltX3BGb3JtRmlsbGVyOw0KLX07DQotDQotI2RlZmluZSBDQkFfQW5ub3RIYW5kbGVyQXJyYXkgQ0ZYX0FycmF5VGVtcGxhdGU8SVBERlNES19Bbm5vdEhhbmRsZXIqPg0KLWNsYXNzIENQREZTREtfQW5ub3RIYW5kbGVyTWdyDQotew0KLXB1YmxpYzoNCi0JLy8gRGVzdHJveSB0aGUgaGFuZGxlcg0KLQlDUERGU0RLX0Fubm90SGFuZGxlck1ncihDUERGRG9jX0Vudmlyb25tZW50KiBwQXBwKTsNCi0JdmlydHVhbCB+Q1BERlNES19Bbm5vdEhhbmRsZXJNZ3IoKSA7DQotDQotcHVibGljOg0KLQl2b2lkCQkJCQkJUmVnaXN0ZXJBbm5vdEhhbmRsZXIoSVBERlNES19Bbm5vdEhhbmRsZXIqIHBBbm5vdEhhbmRsZXIpOw0KLQl2b2lkCQkJCQkJVW5SZWdpc3RlckFubm90SGFuZGxlcihJUERGU0RLX0Fubm90SGFuZGxlciogcEFubm90SGFuZGxlcik7DQotDQotCXZpcnR1YWwgQ1BERlNES19Bbm5vdCoJCU5ld0Fubm90KENQREZfQW5ub3QgKiBwQW5ub3QsIENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldyk7DQotCXZpcnR1YWwgdm9pZAkJCQlSZWxlYXNlQW5ub3QoQ1BERlNES19Bbm5vdCAqIHBBbm5vdCk7DQotCQ0KLQl2aXJ0dWFsIHZvaWQJCQkJQW5ub3RfT25DcmVhdGUoQ1BERlNES19Bbm5vdCogcEFubm90KTsNCi0JdmlydHVhbCB2b2lkCQkJCUFubm90X09uTG9hZChDUERGU0RLX0Fubm90KiBwQW5ub3QpOw0KLXB1YmxpYzoNCi0JSVBERlNES19Bbm5vdEhhbmRsZXIqCQlHZXRBbm5vdEhhbmRsZXIoQ1BERlNES19Bbm5vdCogcEFubm90KSBjb25zdDsNCi0JdmlydHVhbCB2b2lkCQkJCUFubm90X09uRHJhdyhDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwNCi0JCUNGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsRlhfRFdPUkQgZHdGbGFncyk7DQotDQotCXZpcnR1YWwgdm9pZAkJCQlBbm5vdF9Pbk1vdXNlRW50ZXIoQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJQW5ub3RfT25Nb3VzZUV4aXQoQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MpOw0KLQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJQW5ub3RfT25MQnV0dG9uRG93bihDUERGU0RLX1BhZ2VWaWV3ICogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJQW5ub3RfT25MQnV0dG9uVXAoQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCUFubm90X09uTEJ1dHRvbkRibENsayhDUERGU0RLX1BhZ2VWaWV3ICogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOw0KLQkNCi0JdmlydHVhbCBGWF9CT09MCQkJCUFubm90X09uTW91c2VNb3ZlKENQREZTREtfUGFnZVZpZXcgKiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlBbm5vdF9Pbk1vdXNlV2hlZWwoQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIHNob3J0IHpEZWx0YSwgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJQW5ub3RfT25SQnV0dG9uRG93bihDUERGU0RLX1BhZ2VWaWV3ICogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJQW5ub3RfT25SQnV0dG9uVXAoQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsNCi0NCi0NCi0JdmlydHVhbCBGWF9CT09MCQkJCUFubm90X09uQ2hhcihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5DaGFyLCBGWF9EV09SRCBuRmxhZ3MpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJQW5ub3RfT25LZXlEb3duKENQREZTREtfQW5ub3QqIHBBbm5vdCwgaW50IG5LZXlDb2RlLCBpbnQgbkZsYWcpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJQW5ub3RfT25LZXlVcChDUERGU0RLX0Fubm90KiBwQW5ub3QsIGludCBuS2V5Q29kZSwgaW50IG5GbGFnKTsNCi0NCi0JdmlydHVhbCBGWF9CT09MCQkJCUFubm90X09uU2V0Rm9jdXMoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZyk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlBbm5vdF9PbktpbGxGb2N1cyhDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFnKTsNCi0NCi0JdmlydHVhbCBDUERGX1JlY3QJCQlBbm5vdF9PbkdldFZpZXdCQm94KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90KTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCUFubm90X09uSGl0VGVzdChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOw0KLQ0KLXByaXZhdGU6DQotCUlQREZTREtfQW5ub3RIYW5kbGVyKgkJCUdldEFubm90SGFuZGxlcihjb25zdCBDRlhfQnl0ZVN0cmluZyYgc1R5cGUpIGNvbnN0Ow0KLQlDUERGU0RLX0Fubm90KgkJCQlHZXROZXh0QW5ub3QoQ1BERlNES19Bbm5vdCogcFNES0Fubm90LEZYX0JPT0wgYk5leHQpOw0KLXByaXZhdGU6DQotCUNCQV9Bbm5vdEhhbmRsZXJBcnJheQkJbV9IYW5kbGVyczsNCi0JQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0cgkJbV9tYXBUeXBlMkhhbmRsZXI7DQotCUNQREZEb2NfRW52aXJvbm1lbnQqCQltX3BBcHA7DQotfTsNCi0NCi0vLyNkZWZpbmUgQ0JGX1BhZ2UyQWNjZXNzaWJsZQkgQ0ZYX01hcFB0clRlbXBsYXRlPENQREZTREtfUGFnZVZpZXcqLCBJQWNjZXNzaWJsZSo+DQotDQotdHlwZWRlZiBpbnQgKCpBSV9DT01QQVJFKSAoQ1BERlNES19Bbm5vdCogcDEsIENQREZTREtfQW5ub3QqIHAyKTsNCi0NCi1jbGFzcyBDUERGU0RLX0Fubm90SXRlcmF0b3INCi17DQotcHJvdGVjdGVkOg0KLQlDUERGU0RLX0Fubm90KglOZXh0QW5ub3QgKGNvbnN0IENQREZTREtfQW5ub3QqIHBDdXJyZW50KSA7DQotCUNQREZTREtfQW5ub3QqCVByZXZBbm5vdCAoY29uc3QgQ1BERlNES19Bbm5vdCogcEN1cnJlbnQpIDsJDQotCUNQREZTREtfQW5ub3QqCU5leHRBbm5vdChpbnQmIGluZGV4ICkgOw0KLQlDUERGU0RLX0Fubm90KglQcmV2QW5ub3QoaW50JiBpbmRleCApIDsNCi1wdWJsaWM6DQotICAgIENQREZTREtfQW5ub3RJdGVyYXRvcihDUERGU0RLX1BhZ2VWaWV3ICogcFBhZ2VWaWV3LCBGWF9CT09MIGJSZXZlcnNlLA0KLQkJRlhfQk9PTCBiSWdub3JlVG9wbW9zdD1GQUxTRSxGWF9CT09MIGJDaXJjbGU9RkFMU0UsQ0ZYX1B0ckFycmF5KiBwTGlzdD1OVUxMKTsJDQotCXZpcnR1YWwgQ1BERlNES19Bbm5vdCoJTmV4dCAoY29uc3QgQ1BERlNES19Bbm5vdCogcEN1cnJlbnQpIDsNCi0JdmlydHVhbCBDUERGU0RLX0Fubm90KglQcmV2IChjb25zdCBDUERGU0RLX0Fubm90KiBwQ3VycmVudCkgOwkNCi0JdmlydHVhbCBDUERGU0RLX0Fubm90KglOZXh0KGludCYgaW5kZXggKSA7DQotCXZpcnR1YWwgQ1BERlNES19Bbm5vdCoJUHJldihpbnQmIGluZGV4ICkgOw0KLQl2aXJ0dWFsIGludCAgICAgICAgICAgICBDb3VudCgpe3JldHVybiBtX3BJdGVyYXRvckFubm90TGlzdC5HZXRTaXplKCk7fQ0KLQkNCi0JdmlydHVhbCBGWF9CT09MICAgICAgICAgSW5pdEl0ZXJhdG9yQW5ub3RMaXN0KENQREZTREtfUGFnZVZpZXcgKiBwUGFnZVZpZXcsQ0ZYX1B0ckFycmF5KiBwTGlzdD1OVUxMKTsNCi0JDQotCXZvaWQJCQkJCUluc2VydFNvcnQoQ0ZYX1B0ckFycmF5ICZhcnJheUxpc3QsIEFJX0NPTVBBUkUgcENvbXBhcmUpOw0KLXByb3RlY3RlZDoNCi0JLy8JQ0ZYX1B0ckxpc3QJCQkgbV9wSXRlcmF0b3JBbm5vdExpc3Q7IA0KLQlDRlhfUHRyQXJyYXkJICAgICBtX3BJdGVyYXRvckFubm90TGlzdDsJDQotCUZYX0JPT0wJCQkgICAgIG1fYlJldmVyc2U7DQotCUZYX0JPT0wgICAgICAgICAgICAgIG1fYklnbm9yZVRvcG1vc3Q7DQotCUZYX0JPT0wgICAgICAgICAgICAgIG1fYkNpcmNsZTsNCi19Ow0KLQ0KLQ0KLQ0KLSNlbmRpZg0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZTREtfQU5OT1RIQU5ETEVSX0hfCisjZGVmaW5lIF9GU0RLX0FOTk9USEFORExFUl9IXworCisKK2NsYXNzIENQREZEb2NfRW52aXJvbm1lbnQ7CitjbGFzcyBDRkZMX0lGb3JtRmlsbGVyOworY2xhc3MgQ1BERlNES19QYWdlVmlldzsKK2NsYXNzIElQREZTREtfQW5ub3RIYW5kbGVyCit7CisKK3B1YmxpYzoKKwl2aXJ0dWFsIH5JUERGU0RLX0Fubm90SGFuZGxlcigpIHt9OworCisJdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJR2V0VHlwZSgpID0gMDsKKworCXZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCUdldE5hbWUoKSA9IDA7CisKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJQ2FuQW5zd2VyKENQREZTREtfQW5ub3QqIHBBbm5vdCkgPSAwOworCQorCisJdmlydHVhbCBDUERGU0RLX0Fubm90KgkJTmV3QW5ub3QoQ1BERl9Bbm5vdCogcEFubm90LCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZSkgPSAwOworCisJdmlydHVhbCB2b2lkCQkJCVJlbGVhc2VBbm5vdChDUERGU0RLX0Fubm90KiBwQW5ub3QpID0gMDsKKworCXZpcnR1YWwgdm9pZAkJCQlEZWxldGVBbm5vdChDUERGU0RLX0Fubm90KiBwQW5ub3QpID0gMDsKKwkKKworCXZpcnR1YWwgQ1BERl9SZWN0CQkJCUdldFZpZXdCQm94KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90KSA9IDA7CisJCisJdmlydHVhbCBGWF9CT09MCQkJCUhpdFRlc3QoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KSA9IDA7CisJCisKKwl2aXJ0dWFsIHZvaWQJCQkJT25EcmF3KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCAKKwkJQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwKKwkJRlhfRFdPUkQgZHdGbGFncykgPSAwOworCQorCXZpcnR1YWwgdm9pZAkJCQlPbkRyYXdTbGVlcChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgCisJCUNGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsCisJCWNvbnN0IENQREZfUmVjdCYgcmNXaW5kb3csIEZYX0RXT1JEIGR3RmxhZ3MpID0gMDsKKwkKKworCQorCisJdmlydHVhbCB2b2lkCQkJCU9uQ3JlYXRlKENQREZTREtfQW5ub3QqIHBBbm5vdCkgPSAwOworCisJdmlydHVhbCB2b2lkCQkJCU9uTG9hZChDUERGU0RLX0Fubm90KiBwQW5ub3QpID0gMDsKKworCXZpcnR1YWwgdm9pZAkJCQlPbkRlbGV0ZShDUERGU0RLX0Fubm90KiBwQW5ub3QpID0gMDsKKworCXZpcnR1YWwgdm9pZAkJCQlPblJlbGVhc2UoQ1BERlNES19Bbm5vdCogcEFubm90KSA9IDA7CisJCisKKwl2aXJ0dWFsIHZvaWQJCQkJT25Nb3VzZUVudGVyKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZykgPSAwOworCXZpcnR1YWwgdm9pZAkJCQlPbk1vdXNlRXhpdChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWcpID0gMDsKKwkKKworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkxCdXR0b25Eb3duKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KSA9IDA7CisJdmlydHVhbCBGWF9CT09MCQkJCU9uTEJ1dHRvblVwKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KSA9IDA7CisJdmlydHVhbCBGWF9CT09MCQkJCU9uTEJ1dHRvbkRibENsayhDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkgPSAwOworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbk1vdXNlTW92ZShDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkgPSAwOworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbk1vdXNlV2hlZWwoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgc2hvcnQgekRlbHRhLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkgPSAwOworCXZpcnR1YWwgRlhfQk9PTAkJCQlPblJCdXR0b25Eb3duKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KSA9IDA7CisJdmlydHVhbCBGWF9CT09MCQkJCU9uUkJ1dHRvblVwKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KSA9IDA7CisJdmlydHVhbCBGWF9CT09MCQkJCU9uUkJ1dHRvbkRibENsayhDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkgPSAwOworLy9ieSB3am0uCisJdmlydHVhbCBGWF9CT09MCQkJCU9uQ2hhcihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5DaGFyLCBGWF9EV09SRCBuRmxhZ3MpID0gMDsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25LZXlEb3duKENQREZTREtfQW5ub3QqIHBBbm5vdCwgaW50IG5LZXlDb2RlLCBpbnQgbkZsYWcpID0gMDsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25LZXlVcChDUERGU0RLX0Fubm90KiBwQW5ub3QsIGludCBuS2V5Q29kZSwgaW50IG5GbGFnKSA9MCA7CisKKwl2aXJ0dWFsCXZvaWQJCQkJT25EZVNlbGVjdGVkKENQREZTREtfQW5ub3QqIHBBbm5vdCkgPSAwOworCXZpcnR1YWwJdm9pZAkJCQlPblNlbGVjdGVkKENQREZTREtfQW5ub3QqIHBBbm5vdCkgPSAwOworCisJdmlydHVhbCBGWF9CT09MCQkJCU9uU2V0Rm9jdXMoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZykgPSAwOworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbktpbGxGb2N1cyhDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFnKSA9IDA7CisKK307CisKKworY2xhc3MgQ1BERlNES19CRkFubm90SGFuZGxlcjpwdWJsaWMgSVBERlNES19Bbm5vdEhhbmRsZXIKK3sKK3B1YmxpYzoKKwlDUERGU0RLX0JGQW5ub3RIYW5kbGVyKENQREZEb2NfRW52aXJvbm1lbnQqCXBBcHApOm1fcEZvcm1GaWxsZXIoTlVMTCksbV9wQXBwKHBBcHApIHt9CisJdmlydHVhbAl+Q1BERlNES19CRkFubm90SGFuZGxlcigpIHt9CitwdWJsaWM6CisKKwl2aXJ0dWFsIENGWF9CeXRlU3RyaW5nCQlHZXRUeXBlKCkgIHtyZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoIldpZGdldCIpO30KKworCXZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCUdldE5hbWUoKSAge3JldHVybiBDRlhfQnl0ZVN0cmluZygiV2lkZ2V0SGFuZGxlciIpO30KKwkKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJQ2FuQW5zd2VyKENQREZTREtfQW5ub3QqIHBBbm5vdCk7CisKKwl2aXJ0dWFsIENQREZTREtfQW5ub3QqCQlOZXdBbm5vdChDUERGX0Fubm90KiBwQW5ub3QsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlKTsKKworCXZpcnR1YWwgdm9pZAkJCQlSZWxlYXNlQW5ub3QoQ1BERlNES19Bbm5vdCogcEFubm90KSAgOworCisJdmlydHVhbCB2b2lkCQkJCURlbGV0ZUFubm90KENQREZTREtfQW5ub3QqIHBBbm5vdCkge30KKwkKKworCXZpcnR1YWwgQ1BERl9SZWN0CQkJCUdldFZpZXdCQm94KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90KSA7CisJCisJdmlydHVhbCBGWF9CT09MCQkJCUhpdFRlc3QoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsKKwkKKworCXZpcnR1YWwgdm9pZAkJCQlPbkRyYXcoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIAorCQlDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLAorCQkgRlhfRFdPUkQgZHdGbGFncykgOworCQorCXZpcnR1YWwgdm9pZAkJCQlPbkRyYXdTbGVlcChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgCisJCUNGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsCisJCWNvbnN0IENQREZfUmVjdCYgcmNXaW5kb3csIEZYX0RXT1JEIGR3RmxhZ3MpIHt9CisJCisKKwl2aXJ0dWFsIHZvaWQJCQkJT25DcmVhdGUoQ1BERlNES19Bbm5vdCogcEFubm90KSA7CisKKwl2aXJ0dWFsIHZvaWQJCQkJT25Mb2FkKENQREZTREtfQW5ub3QqIHBBbm5vdCkgOworCisJdmlydHVhbCB2b2lkCQkJCU9uRGVsZXRlKENQREZTREtfQW5ub3QqIHBBbm5vdCkge30KKworCXZpcnR1YWwgdm9pZAkJCQlPblJlbGVhc2UoQ1BERlNES19Bbm5vdCogcEFubm90KSB7fQorCQorCisJdmlydHVhbCB2b2lkCQkJCU9uTW91c2VFbnRlcihDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWcpIDsKKwl2aXJ0dWFsIHZvaWQJCQkJT25Nb3VzZUV4aXQoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFnKSA7CisJCisKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25MQnV0dG9uRG93bihDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkgOworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkxCdXR0b25VcChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkgOworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkxCdXR0b25EYmxDbGsoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpIDsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25Nb3VzZU1vdmUoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpIDsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25Nb3VzZVdoZWVsKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIHNob3J0IHpEZWx0YSwgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpIDsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25SQnV0dG9uRG93bihDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkgOworCXZpcnR1YWwgRlhfQk9PTAkJCQlPblJCdXR0b25VcChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkgOworCXZpcnR1YWwgRlhfQk9PTAkJCQlPblJCdXR0b25EYmxDbGsoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpIHtyZXR1cm4gRkFMU0U7fQorCQorLy9ieSB3am0uCisJdmlydHVhbCBGWF9CT09MCQkJCU9uQ2hhcihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5DaGFyLCBGWF9EV09SRCBuRmxhZ3MpOworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbktleURvd24oQ1BERlNES19Bbm5vdCogcEFubm90LCBpbnQgbktleUNvZGUsIGludCBuRmxhZyk7CisJdmlydHVhbCBGWF9CT09MCQkJCU9uS2V5VXAoQ1BERlNES19Bbm5vdCogcEFubm90LCBpbnQgbktleUNvZGUsIGludCBuRmxhZyk7CisKKwl2aXJ0dWFsCXZvaWQJCQkJT25EZVNlbGVjdGVkKENQREZTREtfQW5ub3QqIHBBbm5vdCkge30KKwl2aXJ0dWFsCXZvaWQJCQkJT25TZWxlY3RlZChDUERGU0RLX0Fubm90KiBwQW5ub3QpIHt9CisKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25TZXRGb2N1cyhDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFnKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25LaWxsRm9jdXMoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZyk7CisKKwl2b2lkCQkJCQkJU2V0Rm9ybUZpbGxlcihDRkZMX0lGb3JtRmlsbGVyKiBwRmlsbGVyKXttX3BGb3JtRmlsbGVyID0gcEZpbGxlcjt9CisJQ0ZGTF9JRm9ybUZpbGxlcioJCQlHZXRGb3JtRmlsbGVyKCkge3JldHVybiBtX3BGb3JtRmlsbGVyO30KK3ByaXZhdGU6CisKKwlDUERGRG9jX0Vudmlyb25tZW50KgkJbV9wQXBwOworCUNGRkxfSUZvcm1GaWxsZXIqCQkJbV9wRm9ybUZpbGxlcjsKK307CisKKyNkZWZpbmUgQ0JBX0Fubm90SGFuZGxlckFycmF5IENGWF9BcnJheVRlbXBsYXRlPElQREZTREtfQW5ub3RIYW5kbGVyKj4KK2NsYXNzIENQREZTREtfQW5ub3RIYW5kbGVyTWdyCit7CitwdWJsaWM6CisJLy8gRGVzdHJveSB0aGUgaGFuZGxlcgorCUNQREZTREtfQW5ub3RIYW5kbGVyTWdyKENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHApOworCXZpcnR1YWwgfkNQREZTREtfQW5ub3RIYW5kbGVyTWdyKCkgOworCitwdWJsaWM6CisJdm9pZAkJCQkJCVJlZ2lzdGVyQW5ub3RIYW5kbGVyKElQREZTREtfQW5ub3RIYW5kbGVyKiBwQW5ub3RIYW5kbGVyKTsKKwl2b2lkCQkJCQkJVW5SZWdpc3RlckFubm90SGFuZGxlcihJUERGU0RLX0Fubm90SGFuZGxlciogcEFubm90SGFuZGxlcik7CisKKwl2aXJ0dWFsIENQREZTREtfQW5ub3QqCQlOZXdBbm5vdChDUERGX0Fubm90ICogcEFubm90LCBDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcpOworCXZpcnR1YWwgdm9pZAkJCQlSZWxlYXNlQW5ub3QoQ1BERlNES19Bbm5vdCAqIHBBbm5vdCk7CisJCisJdmlydHVhbCB2b2lkCQkJCUFubm90X09uQ3JlYXRlKENQREZTREtfQW5ub3QqIHBBbm5vdCk7CisJdmlydHVhbCB2b2lkCQkJCUFubm90X09uTG9hZChDUERGU0RLX0Fubm90KiBwQW5ub3QpOworcHVibGljOgorCUlQREZTREtfQW5ub3RIYW5kbGVyKgkJR2V0QW5ub3RIYW5kbGVyKENQREZTREtfQW5ub3QqIHBBbm5vdCkgY29uc3Q7CisJdmlydHVhbCB2b2lkCQkJCUFubm90X09uRHJhdyhDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwKKwkJQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSxGWF9EV09SRCBkd0ZsYWdzKTsKKworCXZpcnR1YWwgdm9pZAkJCQlBbm5vdF9Pbk1vdXNlRW50ZXIoQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MpOworCXZpcnR1YWwgdm9pZAkJCQlBbm5vdF9Pbk1vdXNlRXhpdChDUERGU0RLX1BhZ2VWaWV3ICogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncyk7CisKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJQW5ub3RfT25MQnV0dG9uRG93bihDUERGU0RLX1BhZ2VWaWV3ICogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOworCXZpcnR1YWwgRlhfQk9PTAkJCQlBbm5vdF9PbkxCdXR0b25VcChDUERGU0RLX1BhZ2VWaWV3ICogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOworCXZpcnR1YWwgRlhfQk9PTAkJCQlBbm5vdF9PbkxCdXR0b25EYmxDbGsoQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsKKwkKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJQW5ub3RfT25Nb3VzZU1vdmUoQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJQW5ub3RfT25Nb3VzZVdoZWVsKENQREZTREtfUGFnZVZpZXcgKiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBzaG9ydCB6RGVsdGEsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJQW5ub3RfT25SQnV0dG9uRG93bihDUERGU0RLX1BhZ2VWaWV3ICogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOworCXZpcnR1YWwgRlhfQk9PTAkJCQlBbm5vdF9PblJCdXR0b25VcChDUERGU0RLX1BhZ2VWaWV3ICogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOworCisKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJQW5ub3RfT25DaGFyKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkNoYXIsIEZYX0RXT1JEIG5GbGFncyk7CisJdmlydHVhbCBGWF9CT09MCQkJCUFubm90X09uS2V5RG93bihDUERGU0RLX0Fubm90KiBwQW5ub3QsIGludCBuS2V5Q29kZSwgaW50IG5GbGFnKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJQW5ub3RfT25LZXlVcChDUERGU0RLX0Fubm90KiBwQW5ub3QsIGludCBuS2V5Q29kZSwgaW50IG5GbGFnKTsKKworCXZpcnR1YWwgRlhfQk9PTAkJCQlBbm5vdF9PblNldEZvY3VzKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWcpOworCXZpcnR1YWwgRlhfQk9PTAkJCQlBbm5vdF9PbktpbGxGb2N1cyhDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFnKTsKKworCXZpcnR1YWwgQ1BERl9SZWN0CQkJQW5ub3RfT25HZXRWaWV3QkJveChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCk7CisJdmlydHVhbCBGWF9CT09MCQkJCUFubm90X09uSGl0VGVzdChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOworCitwcml2YXRlOgorCUlQREZTREtfQW5ub3RIYW5kbGVyKgkJCUdldEFubm90SGFuZGxlcihjb25zdCBDRlhfQnl0ZVN0cmluZyYgc1R5cGUpIGNvbnN0OworCUNQREZTREtfQW5ub3QqCQkJCUdldE5leHRBbm5vdChDUERGU0RLX0Fubm90KiBwU0RLQW5ub3QsRlhfQk9PTCBiTmV4dCk7Citwcml2YXRlOgorCUNCQV9Bbm5vdEhhbmRsZXJBcnJheQkJbV9IYW5kbGVyczsKKwlDRlhfTWFwQnl0ZVN0cmluZ1RvUHRyCQltX21hcFR5cGUySGFuZGxlcjsKKwlDUERGRG9jX0Vudmlyb25tZW50KgkJbV9wQXBwOworfTsKKworLy8jZGVmaW5lIENCRl9QYWdlMkFjY2Vzc2libGUJIENGWF9NYXBQdHJUZW1wbGF0ZTxDUERGU0RLX1BhZ2VWaWV3KiwgSUFjY2Vzc2libGUqPgorCit0eXBlZGVmIGludCAoKkFJX0NPTVBBUkUpIChDUERGU0RLX0Fubm90KiBwMSwgQ1BERlNES19Bbm5vdCogcDIpOworCitjbGFzcyBDUERGU0RLX0Fubm90SXRlcmF0b3IKK3sKK3Byb3RlY3RlZDoKKwlDUERGU0RLX0Fubm90KglOZXh0QW5ub3QgKGNvbnN0IENQREZTREtfQW5ub3QqIHBDdXJyZW50KSA7CisJQ1BERlNES19Bbm5vdCoJUHJldkFubm90IChjb25zdCBDUERGU0RLX0Fubm90KiBwQ3VycmVudCkgOwkKKwlDUERGU0RLX0Fubm90KglOZXh0QW5ub3QoaW50JiBpbmRleCApIDsKKwlDUERGU0RLX0Fubm90KglQcmV2QW5ub3QoaW50JiBpbmRleCApIDsKK3B1YmxpYzoKKyAgICBDUERGU0RLX0Fubm90SXRlcmF0b3IoQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldywgRlhfQk9PTCBiUmV2ZXJzZSwKKwkJRlhfQk9PTCBiSWdub3JlVG9wbW9zdD1GQUxTRSxGWF9CT09MIGJDaXJjbGU9RkFMU0UsQ0ZYX1B0ckFycmF5KiBwTGlzdD1OVUxMKTsJCisJdmlydHVhbCBDUERGU0RLX0Fubm90KglOZXh0IChjb25zdCBDUERGU0RLX0Fubm90KiBwQ3VycmVudCkgOworCXZpcnR1YWwgQ1BERlNES19Bbm5vdCoJUHJldiAoY29uc3QgQ1BERlNES19Bbm5vdCogcEN1cnJlbnQpIDsJCisJdmlydHVhbCBDUERGU0RLX0Fubm90KglOZXh0KGludCYgaW5kZXggKSA7CisJdmlydHVhbCBDUERGU0RLX0Fubm90KglQcmV2KGludCYgaW5kZXggKSA7CisJdmlydHVhbCBpbnQgICAgICAgICAgICAgQ291bnQoKXtyZXR1cm4gbV9wSXRlcmF0b3JBbm5vdExpc3QuR2V0U2l6ZSgpO30KKwkKKwl2aXJ0dWFsIEZYX0JPT0wgICAgICAgICBJbml0SXRlcmF0b3JBbm5vdExpc3QoQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldyxDRlhfUHRyQXJyYXkqIHBMaXN0PU5VTEwpOworCQorCXZvaWQJCQkJCUluc2VydFNvcnQoQ0ZYX1B0ckFycmF5ICZhcnJheUxpc3QsIEFJX0NPTVBBUkUgcENvbXBhcmUpOworcHJvdGVjdGVkOgorCS8vCUNGWF9QdHJMaXN0CQkJIG1fcEl0ZXJhdG9yQW5ub3RMaXN0OyAKKwlDRlhfUHRyQXJyYXkJICAgICBtX3BJdGVyYXRvckFubm90TGlzdDsJCisJRlhfQk9PTAkJCSAgICAgbV9iUmV2ZXJzZTsKKwlGWF9CT09MICAgICAgICAgICAgICBtX2JJZ25vcmVUb3Btb3N0OworCUZYX0JPT0wgICAgICAgICAgICAgIG1fYkNpcmNsZTsKK307CisKKworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9pbmNsdWRlL2ZzZGtfYmFzZWFubm90LmggYi9mcGRmc2RrL2luY2x1ZGUvZnNka19iYXNlYW5ub3QuaAppbmRleCBiNmNhZGI3Li40NjQyNTA4IDEwMDY0NAotLS0gYS9mcGRmc2RrL2luY2x1ZGUvZnNka19iYXNlYW5ub3QuaAorKysgYi9mcGRmc2RrL2luY2x1ZGUvZnNka19iYXNlYW5ub3QuaApAQCAtMSwxODYgKzEsMTg2IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GU0RLX0JBU0VBTk5PVF9IXw0KLSNkZWZpbmUgX0ZTREtfQkFTRUFOTk9UX0hfDQotDQotI2lmIF9GWF9PU18gPT0gX0ZYX0FORFJPSURfDQotI2luY2x1ZGUgInRpbWUuaCINCi0jZWxzZQ0KLSNpbmNsdWRlIDxjdGltZT4NCi0jZW5kaWYNCi0NCi1jbGFzcyBDUERGU0RLX1BhZ2VWaWV3Ow0KLSNkZWZpbmUgQ0ZYX0ludEFycmF5CQkJCUNGWF9BcnJheVRlbXBsYXRlPGludD4NCi0NCi1jbGFzcyAgQ1BERlNES19EYXRlVGltZSA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0JQ1BERlNES19EYXRlVGltZSgpOw0KLQlDUERGU0RLX0RhdGVUaW1lKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBkdFN0cik7DQotCUNQREZTREtfRGF0ZVRpbWUoY29uc3QgQ1BERlNES19EYXRlVGltZSYgZGF0ZXRpbWUpOw0KLQlDUERGU0RLX0RhdGVUaW1lKGNvbnN0IEZYX1NZU1RFTVRJTUUmIHN0KTsNCi0JDQotCQ0KLQlDUERGU0RLX0RhdGVUaW1lJglvcGVyYXRvciA9IChjb25zdCBDUERGU0RLX0RhdGVUaW1lJiBkYXRldGltZSk7DQotCUNQREZTREtfRGF0ZVRpbWUmCW9wZXJhdG9yID0gKGNvbnN0IEZYX1NZU1RFTVRJTUUmIHN0KTsNCi0JRlhfQk9PTAkJCQlvcGVyYXRvciA9PSAoQ1BERlNES19EYXRlVGltZSYgZGF0ZXRpbWUpOw0KLQlGWF9CT09MCQkJCW9wZXJhdG9yICE9IChDUERGU0RLX0RhdGVUaW1lJiBkYXRldGltZSk7DQotCUZYX0JPT0wJCQkJb3BlcmF0b3IgPiAoQ1BERlNES19EYXRlVGltZSYgZGF0ZXRpbWUpOw0KLQlGWF9CT09MCQkJCW9wZXJhdG9yID49IChDUERGU0RLX0RhdGVUaW1lJiBkYXRldGltZSk7DQotCUZYX0JPT0wJCQkJb3BlcmF0b3IgPCAoQ1BERlNES19EYXRlVGltZSYgZGF0ZXRpbWUpOw0KLQlGWF9CT09MCQkJCW9wZXJhdG9yIDw9IChDUERGU0RLX0RhdGVUaW1lJiBkYXRldGltZSk7CQ0KLQkJCQkJCW9wZXJhdG9yIHRpbWVfdCgpOw0KLQkNCi0JQ1BERlNES19EYXRlVGltZSYJRnJvbVBERkRhdGVUaW1lU3RyaW5nKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBkdFN0cik7DQotCUNGWF9CeXRlU3RyaW5nCQlUb0NvbW1vbkRhdGVUaW1lU3RyaW5nKCk7DQotCUNGWF9CeXRlU3RyaW5nCQlUb1BERkRhdGVUaW1lU3RyaW5nKCk7DQotCXZvaWQJCQkJVG9TeXN0ZW1UaW1lKEZYX1NZU1RFTVRJTUUmIHN0KTsNCi0JQ1BERlNES19EYXRlVGltZQlUb0dNVCgpOw0KLQlDUERGU0RLX0RhdGVUaW1lJglBZGREYXlzKHNob3J0IGRheXMpOw0KLQlDUERGU0RLX0RhdGVUaW1lJglBZGRTZWNvbmRzKGludCBzZWNvbmRzKTsNCi0JDQotCXZvaWQJCQkJUmVzZXREYXRlVGltZSgpOw0KLQkNCi0Jc3RydWN0IEZYX0RBVEVUSU1FDQotCXsNCi0JCUZYX1NIT1JUCXllYXI7DQotCQlGWF9CWVRFCQltb250aDsNCi0JCUZYX0JZVEUJCWRheTsNCi0JCUZYX0JZVEUJCWhvdXI7DQotCQlGWF9CWVRFCQltaW51dGU7DQotCQlGWF9CWVRFCQlzZWNvbmQ7DQotCQlGWF9DSEFSCQl0ekhvdXI7DQotCQlGWF9CWVRFCQl0ek1pbnV0ZTsNCi0JfWR0Ow0KLX07DQotDQotY2xhc3MgQ1BERlNES19Bbm5vdA0KLXsNCi1wdWJsaWM6DQotCUNQREZTREtfQW5ub3QoQ1BERl9Bbm5vdCogcEFubm90LCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOw0KLQl2aXJ0dWFsIH5DUERGU0RLX0Fubm90KCk7DQotcHVibGljOg0KLQl2aXJ0dWFsIEZYX0ZMT0FUCQkJR2V0TWluV2lkdGgoKSBjb25zdDsNCi0JdmlydHVhbCBGWF9GTE9BVAkJCUdldE1pbkhlaWdodCgpIGNvbnN0Ow0KLQkvL2RlZmluZSBsYXlvdXQgb3JkZXIgdG8gNS4NCi0JdmlydHVhbCBpbnQJCQkJCUdldExheW91dE9yZGVyKCkgY29uc3QgeyByZXR1cm4gNTsgfQ0KLQ0KLXB1YmxpYzoNCi0JQ1BERl9Bbm5vdCoJCQkJCUdldFBERkFubm90KCk7DQotCQ0KLQl2b2lkCQkJCQkJU2V0UGFnZShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOw0KLQlDUERGU0RLX1BhZ2VWaWV3KgkJCUdldFBhZ2VWaWV3KCk7CQ0KLQlGWF9EV09SRAkJCQkJR2V0RmxhZ3MoKTsNCi0JDQotCS8vIFRhYiBPcmRlcgkNCi0JaW50CQkJCQkJCUdldFRhYk9yZGVyKCk7DQotCXZvaWQJCQkJCQlTZXRUYWJPcmRlcihpbnQgaVRhYk9yZGVyKTsNCi0JDQotCS8vIFNlbGVjdGlvbg0KLQlGWF9CT09MCQkJCQkJSXNTZWxlY3RlZCgpOw0KLQl2b2lkCQkJCQkJU2V0U2VsZWN0ZWQoRlhfQk9PTCBiU2VsZWN0ZWQpOw0KLQkNCi0JQ0ZYX0J5dGVTdHJpbmcJCQkJR2V0VHlwZSgpIGNvbnN0Ow0KLQl2aXJ0dWFsIENGWF9CeXRlU3RyaW5nCQlHZXRTdWJUeXBlKCkgY29uc3Q7DQotDQotCUNQREZfUGFnZSoJCQkJCUdldFBERlBhZ2UoKTsNCi0NCi1wdWJsaWM6DQotCUNQREZfRGljdGlvbmFyeSoJCQlHZXRBbm5vdERpY3QoKSBjb25zdDsNCi0JDQotCXZvaWQJCQkJCQlTZXRSZWN0KGNvbnN0IENQREZfUmVjdCYgcmVjdCk7DQotCUNQREZfUmVjdAkJCQkJR2V0UmVjdCgpIGNvbnN0Ow0KLQkNCi0Jdm9pZAkJCQkJCVNldENvbnRlbnRzKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzQ29udGVudHMpOw0KLQlDRlhfV2lkZVN0cmluZwkJCQlHZXRDb250ZW50cygpIGNvbnN0Ow0KLQkNCi0Jdm9pZAkJCQkJCVNldEFubm90TmFtZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc05hbWUpOw0KLQlDRlhfV2lkZVN0cmluZwkJCQlHZXRBbm5vdE5hbWUoKSBjb25zdDsNCi0JDQotCXZvaWQJCQkJCQlTZXRNb2RpZmllZERhdGUoY29uc3QgRlhfU1lTVEVNVElNRSYgc3QpOw0KLQlGWF9TWVNURU1USU1FCQkJCUdldE1vZGlmaWVkRGF0ZSgpIGNvbnN0Ow0KLQ0KLQl2b2lkCQkJCQkJU2V0RmxhZ3MoaW50IG5GbGFncyk7DQotCWludAkJCQkJCQlHZXRGbGFncygpIGNvbnN0Ow0KLQ0KLQl2b2lkCQkJCQkJU2V0QXBwU3RhdGUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cik7DQotCUNGWF9CeXRlU3RyaW5nCQkJCUdldEFwcFN0YXRlKCkgY29uc3Q7DQotCQ0KLQl2b2lkCQkJCQkJU2V0U3RydWN0UGFyZW50KGludCBrZXkpOw0KLQlpbnQJCQkJCQkJR2V0U3RydWN0UGFyZW50KCkgY29uc3Q7DQotCQ0KLQkvL2JvcmRlcg0KLQl2b2lkCQkJCQkJU2V0Qm9yZGVyV2lkdGgoaW50IG5XaWR0aCk7DQotCWludAkJCQkJCQlHZXRCb3JkZXJXaWR0aCgpIGNvbnN0Ow0KLQkNCi0JLy9CQlNfU09MSUQNCi0JLy9CQlNfREFTSA0KLQkvL0JCU19CRVZFTEVEDQotCS8vQkJTX0lOU0VUDQotCS8vQkJTX1VOREVSTElORQ0KLQkNCi0Jdm9pZAkJCQkJCVNldEJvcmRlclN0eWxlKGludCBuU3R5bGUpOw0KLQlpbnQJCQkJCQkJR2V0Qm9yZGVyU3R5bGUoKSBjb25zdDsNCi0JDQotCXZvaWQJCQkJCQlTZXRCb3JkZXJEYXNoKGNvbnN0IENGWF9JbnRBcnJheSYgYXJyYXkpOw0KLQl2b2lkCQkJCQkJR2V0Qm9yZGVyRGFzaChDRlhfSW50QXJyYXkmIGFycmF5KSBjb25zdDsNCi0JDQotCS8vVGhlIGJhY2tncm91bmQgb2YgdGhlIGFubm90YXRpb24ncyBpY29uIHdoZW4gY2xvc2VkDQotCS8vVGhlIHRpdGxlIGJhciBvZiB0aGUgYW5ub3RhdGlvbidzIHBvcC11cCB3aW5kb3cNCi0JLy9UaGUgYm9yZGVyIG9mIGEgbGluayBhbm5vdGF0aW9uDQotCQ0KLQl2b2lkCQkJCQkJU2V0Q29sb3IoRlhfQ09MT1JSRUYgY29sb3IpOw0KLQl2b2lkCQkJCQkJUmVtb3ZlQ29sb3IoKTsNCi0JRlhfQk9PTAkJCQkJCUdldENvbG9yKEZYX0NPTE9SUkVGJiBjb2xvcikgY29uc3Q7DQotCQ0KLQlGWF9CT09MCQkJCQkJSXNWaXNpYmxlKCkgY29uc3Q7DQotCS8vYWN0aW9uDQotDQotCUNQREZfQWN0aW9uCQkJCQlHZXRBY3Rpb24oKSBjb25zdDsNCi0Jdm9pZAkJCQkJCVNldEFjdGlvbihjb25zdCBDUERGX0FjdGlvbiYgYSk7DQotCXZvaWQJCQkJCQlSZW1vdmVBY3Rpb24oKTsNCi0JDQotCUNQREZfQUFjdGlvbgkJCQlHZXRBQWN0aW9uKCkgY29uc3Q7DQotCXZvaWQJCQkJCQlTZXRBQWN0aW9uKGNvbnN0IENQREZfQUFjdGlvbiYgYWEpOw0KLQl2b2lkCQkJCQkJUmVtb3ZlQUFjdGlvbigpOw0KLQkNCi0JdmlydHVhbCBDUERGX0FjdGlvbgkJCUdldEFBY3Rpb24oQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSBlQUFUKTsNCi0JDQotcHVibGljOg0KLQlGWF9CT09MCQkJCQkJSXNBcHBlYXJhbmNlVmFsaWQoKTsNCi0JRlhfQk9PTAkJCQkJCUlzQXBwZWFyYW5jZVZhbGlkKENQREZfQW5ub3Q6OkFwcGVhcmFuY2VNb2RlIG1vZGUpOw0KLQl2b2lkCQkJCQkJRHJhd0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgY29uc3QgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwNCi0JCUNQREZfQW5ub3Q6OkFwcGVhcmFuY2VNb2RlIG1vZGUsIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMpOw0KLQl2b2lkCQkJCQkJRHJhd0JvcmRlcihDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBjb25zdCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLA0KLQkJY29uc3QgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucyk7DQotCQ0KLQl2b2lkCQkJCQkJQ2xlYXJDYWNoZWRBUCgpOw0KLQkNCi0JdmlydHVhbCB2b2lkCQkJCVJlc2V0QXBwZWFyYW5jZSgpOw0KLQl2b2lkCQkJCQkJV3JpdGVBcHBlYXJhbmNlKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzQVBUeXBlLCBjb25zdCBDUERGX1JlY3QmIHJjQkJveCwgDQotCQljb25zdCBDUERGX01hdHJpeCYgbWF0cml4LCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc0NvbnRlbnRzLA0KLQkJY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNBUFN0YXRlID0gIiIpOw0KLQ0KLXB1YmxpYzoNCi0JdmlydHVhbCB2b2lkCQkJQW5ub3RfT25EcmF3KENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucyk7DQotcHVibGljOg0KLQ0KLQ0KLXByaXZhdGU6DQotCUZYX0JPT0wgQ3JlYXRlRm9ybUZpbGxlcigpOw0KLXByb3RlY3RlZDoNCi0JQ1BERl9Bbm5vdCoJCQltX3BBbm5vdDsNCi0JQ1BERlNES19QYWdlVmlldyoJbV9wUGFnZVZpZXc7DQotCUZYX0JPT0wJCQkJbV9iU2VsZWN0ZWQ7DQotCWludAkJCQkJbV9uVGFiT3JkZXI7DQotCQ0KLX07DQotDQotDQotDQotI2VuZGlmDQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlNES19CQVNFQU5OT1RfSF8KKyNkZWZpbmUgX0ZTREtfQkFTRUFOTk9UX0hfCisKKyNpZiBfRlhfT1NfID09IF9GWF9BTkRST0lEXworI2luY2x1ZGUgInRpbWUuaCIKKyNlbHNlCisjaW5jbHVkZSA8Y3RpbWU+CisjZW5kaWYKKworY2xhc3MgQ1BERlNES19QYWdlVmlldzsKKyNkZWZpbmUgQ0ZYX0ludEFycmF5CQkJCUNGWF9BcnJheVRlbXBsYXRlPGludD4KKworY2xhc3MgIENQREZTREtfRGF0ZVRpbWUgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCUNQREZTREtfRGF0ZVRpbWUoKTsKKwlDUERGU0RLX0RhdGVUaW1lKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBkdFN0cik7CisJQ1BERlNES19EYXRlVGltZShjb25zdCBDUERGU0RLX0RhdGVUaW1lJiBkYXRldGltZSk7CisJQ1BERlNES19EYXRlVGltZShjb25zdCBGWF9TWVNURU1USU1FJiBzdCk7CisJCisJCisJQ1BERlNES19EYXRlVGltZSYJb3BlcmF0b3IgPSAoY29uc3QgQ1BERlNES19EYXRlVGltZSYgZGF0ZXRpbWUpOworCUNQREZTREtfRGF0ZVRpbWUmCW9wZXJhdG9yID0gKGNvbnN0IEZYX1NZU1RFTVRJTUUmIHN0KTsKKwlGWF9CT09MCQkJCW9wZXJhdG9yID09IChDUERGU0RLX0RhdGVUaW1lJiBkYXRldGltZSk7CisJRlhfQk9PTAkJCQlvcGVyYXRvciAhPSAoQ1BERlNES19EYXRlVGltZSYgZGF0ZXRpbWUpOworCUZYX0JPT0wJCQkJb3BlcmF0b3IgPiAoQ1BERlNES19EYXRlVGltZSYgZGF0ZXRpbWUpOworCUZYX0JPT0wJCQkJb3BlcmF0b3IgPj0gKENQREZTREtfRGF0ZVRpbWUmIGRhdGV0aW1lKTsKKwlGWF9CT09MCQkJCW9wZXJhdG9yIDwgKENQREZTREtfRGF0ZVRpbWUmIGRhdGV0aW1lKTsKKwlGWF9CT09MCQkJCW9wZXJhdG9yIDw9IChDUERGU0RLX0RhdGVUaW1lJiBkYXRldGltZSk7CQorCQkJCQkJb3BlcmF0b3IgdGltZV90KCk7CisJCisJQ1BERlNES19EYXRlVGltZSYJRnJvbVBERkRhdGVUaW1lU3RyaW5nKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBkdFN0cik7CisJQ0ZYX0J5dGVTdHJpbmcJCVRvQ29tbW9uRGF0ZVRpbWVTdHJpbmcoKTsKKwlDRlhfQnl0ZVN0cmluZwkJVG9QREZEYXRlVGltZVN0cmluZygpOworCXZvaWQJCQkJVG9TeXN0ZW1UaW1lKEZYX1NZU1RFTVRJTUUmIHN0KTsKKwlDUERGU0RLX0RhdGVUaW1lCVRvR01UKCk7CisJQ1BERlNES19EYXRlVGltZSYJQWRkRGF5cyhzaG9ydCBkYXlzKTsKKwlDUERGU0RLX0RhdGVUaW1lJglBZGRTZWNvbmRzKGludCBzZWNvbmRzKTsKKwkKKwl2b2lkCQkJCVJlc2V0RGF0ZVRpbWUoKTsKKwkKKwlzdHJ1Y3QgRlhfREFURVRJTUUKKwl7CisJCUZYX1NIT1JUCXllYXI7CisJCUZYX0JZVEUJCW1vbnRoOworCQlGWF9CWVRFCQlkYXk7CisJCUZYX0JZVEUJCWhvdXI7CisJCUZYX0JZVEUJCW1pbnV0ZTsKKwkJRlhfQllURQkJc2Vjb25kOworCQlGWF9DSEFSCQl0ekhvdXI7CisJCUZYX0JZVEUJCXR6TWludXRlOworCX1kdDsKK307CisKK2NsYXNzIENQREZTREtfQW5ub3QKK3sKK3B1YmxpYzoKKwlDUERGU0RLX0Fubm90KENQREZfQW5ub3QqIHBBbm5vdCwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsKKwl2aXJ0dWFsIH5DUERGU0RLX0Fubm90KCk7CitwdWJsaWM6CisJdmlydHVhbCBGWF9GTE9BVAkJCUdldE1pbldpZHRoKCkgY29uc3Q7CisJdmlydHVhbCBGWF9GTE9BVAkJCUdldE1pbkhlaWdodCgpIGNvbnN0OworCS8vZGVmaW5lIGxheW91dCBvcmRlciB0byA1LgorCXZpcnR1YWwgaW50CQkJCQlHZXRMYXlvdXRPcmRlcigpIGNvbnN0IHsgcmV0dXJuIDU7IH0KKworcHVibGljOgorCUNQREZfQW5ub3QqCQkJCQlHZXRQREZBbm5vdCgpOworCQorCXZvaWQJCQkJCQlTZXRQYWdlKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyk7CisJQ1BERlNES19QYWdlVmlldyoJCQlHZXRQYWdlVmlldygpOwkKKwlGWF9EV09SRAkJCQkJR2V0RmxhZ3MoKTsKKwkKKwkvLyBUYWIgT3JkZXIJCisJaW50CQkJCQkJCUdldFRhYk9yZGVyKCk7CisJdm9pZAkJCQkJCVNldFRhYk9yZGVyKGludCBpVGFiT3JkZXIpOworCQorCS8vIFNlbGVjdGlvbgorCUZYX0JPT0wJCQkJCQlJc1NlbGVjdGVkKCk7CisJdm9pZAkJCQkJCVNldFNlbGVjdGVkKEZYX0JPT0wgYlNlbGVjdGVkKTsKKwkKKwlDRlhfQnl0ZVN0cmluZwkJCQlHZXRUeXBlKCkgY29uc3Q7CisJdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJR2V0U3ViVHlwZSgpIGNvbnN0OworCisJQ1BERl9QYWdlKgkJCQkJR2V0UERGUGFnZSgpOworCitwdWJsaWM6CisJQ1BERl9EaWN0aW9uYXJ5KgkJCUdldEFubm90RGljdCgpIGNvbnN0OworCQorCXZvaWQJCQkJCQlTZXRSZWN0KGNvbnN0IENQREZfUmVjdCYgcmVjdCk7CisJQ1BERl9SZWN0CQkJCQlHZXRSZWN0KCkgY29uc3Q7CisJCisJdm9pZAkJCQkJCVNldENvbnRlbnRzKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzQ29udGVudHMpOworCUNGWF9XaWRlU3RyaW5nCQkJCUdldENvbnRlbnRzKCkgY29uc3Q7CisJCisJdm9pZAkJCQkJCVNldEFubm90TmFtZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc05hbWUpOworCUNGWF9XaWRlU3RyaW5nCQkJCUdldEFubm90TmFtZSgpIGNvbnN0OworCQorCXZvaWQJCQkJCQlTZXRNb2RpZmllZERhdGUoY29uc3QgRlhfU1lTVEVNVElNRSYgc3QpOworCUZYX1NZU1RFTVRJTUUJCQkJR2V0TW9kaWZpZWREYXRlKCkgY29uc3Q7CisKKwl2b2lkCQkJCQkJU2V0RmxhZ3MoaW50IG5GbGFncyk7CisJaW50CQkJCQkJCUdldEZsYWdzKCkgY29uc3Q7CisKKwl2b2lkCQkJCQkJU2V0QXBwU3RhdGUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cik7CisJQ0ZYX0J5dGVTdHJpbmcJCQkJR2V0QXBwU3RhdGUoKSBjb25zdDsKKwkKKwl2b2lkCQkJCQkJU2V0U3RydWN0UGFyZW50KGludCBrZXkpOworCWludAkJCQkJCQlHZXRTdHJ1Y3RQYXJlbnQoKSBjb25zdDsKKwkKKwkvL2JvcmRlcgorCXZvaWQJCQkJCQlTZXRCb3JkZXJXaWR0aChpbnQgbldpZHRoKTsKKwlpbnQJCQkJCQkJR2V0Qm9yZGVyV2lkdGgoKSBjb25zdDsKKwkKKwkvL0JCU19TT0xJRAorCS8vQkJTX0RBU0gKKwkvL0JCU19CRVZFTEVECisJLy9CQlNfSU5TRVQKKwkvL0JCU19VTkRFUkxJTkUKKwkKKwl2b2lkCQkJCQkJU2V0Qm9yZGVyU3R5bGUoaW50IG5TdHlsZSk7CisJaW50CQkJCQkJCUdldEJvcmRlclN0eWxlKCkgY29uc3Q7CisJCisJdm9pZAkJCQkJCVNldEJvcmRlckRhc2goY29uc3QgQ0ZYX0ludEFycmF5JiBhcnJheSk7CisJdm9pZAkJCQkJCUdldEJvcmRlckRhc2goQ0ZYX0ludEFycmF5JiBhcnJheSkgY29uc3Q7CisJCisJLy9UaGUgYmFja2dyb3VuZCBvZiB0aGUgYW5ub3RhdGlvbidzIGljb24gd2hlbiBjbG9zZWQKKwkvL1RoZSB0aXRsZSBiYXIgb2YgdGhlIGFubm90YXRpb24ncyBwb3AtdXAgd2luZG93CisJLy9UaGUgYm9yZGVyIG9mIGEgbGluayBhbm5vdGF0aW9uCisJCisJdm9pZAkJCQkJCVNldENvbG9yKEZYX0NPTE9SUkVGIGNvbG9yKTsKKwl2b2lkCQkJCQkJUmVtb3ZlQ29sb3IoKTsKKwlGWF9CT09MCQkJCQkJR2V0Q29sb3IoRlhfQ09MT1JSRUYmIGNvbG9yKSBjb25zdDsKKwkKKwlGWF9CT09MCQkJCQkJSXNWaXNpYmxlKCkgY29uc3Q7CisJLy9hY3Rpb24KKworCUNQREZfQWN0aW9uCQkJCQlHZXRBY3Rpb24oKSBjb25zdDsKKwl2b2lkCQkJCQkJU2V0QWN0aW9uKGNvbnN0IENQREZfQWN0aW9uJiBhKTsKKwl2b2lkCQkJCQkJUmVtb3ZlQWN0aW9uKCk7CisJCisJQ1BERl9BQWN0aW9uCQkJCUdldEFBY3Rpb24oKSBjb25zdDsKKwl2b2lkCQkJCQkJU2V0QUFjdGlvbihjb25zdCBDUERGX0FBY3Rpb24mIGFhKTsKKwl2b2lkCQkJCQkJUmVtb3ZlQUFjdGlvbigpOworCQorCXZpcnR1YWwgQ1BERl9BY3Rpb24JCQlHZXRBQWN0aW9uKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgZUFBVCk7CisJCitwdWJsaWM6CisJRlhfQk9PTAkJCQkJCUlzQXBwZWFyYW5jZVZhbGlkKCk7CisJRlhfQk9PTAkJCQkJCUlzQXBwZWFyYW5jZVZhbGlkKENQREZfQW5ub3Q6OkFwcGVhcmFuY2VNb2RlIG1vZGUpOworCXZvaWQJCQkJCQlEcmF3QXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBjb25zdCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLAorCQlDUERGX0Fubm90OjpBcHBlYXJhbmNlTW9kZSBtb2RlLCBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zKTsKKwl2b2lkCQkJCQkJRHJhd0JvcmRlcihDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBjb25zdCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLAorCQljb25zdCBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zKTsKKwkKKwl2b2lkCQkJCQkJQ2xlYXJDYWNoZWRBUCgpOworCQorCXZpcnR1YWwgdm9pZAkJCQlSZXNldEFwcGVhcmFuY2UoKTsKKwl2b2lkCQkJCQkJV3JpdGVBcHBlYXJhbmNlKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzQVBUeXBlLCBjb25zdCBDUERGX1JlY3QmIHJjQkJveCwgCisJCWNvbnN0IENQREZfTWF0cml4JiBtYXRyaXgsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzQ29udGVudHMsCisJCWNvbnN0IENGWF9CeXRlU3RyaW5nJiBzQVBTdGF0ZSA9ICIiKTsKKworcHVibGljOgorCXZpcnR1YWwgdm9pZAkJCUFubm90X09uRHJhdyhDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMpOworcHVibGljOgorCisKK3ByaXZhdGU6CisJRlhfQk9PTCBDcmVhdGVGb3JtRmlsbGVyKCk7Citwcm90ZWN0ZWQ6CisJQ1BERl9Bbm5vdCoJCQltX3BBbm5vdDsKKwlDUERGU0RLX1BhZ2VWaWV3KgltX3BQYWdlVmlldzsKKwlGWF9CT09MCQkJCW1fYlNlbGVjdGVkOworCWludAkJCQkJbV9uVGFiT3JkZXI7CisJCit9OworCisKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9mc2RrX2Jhc2Vmb3JtLmggYi9mcGRmc2RrL2luY2x1ZGUvZnNka19iYXNlZm9ybS5oCmluZGV4IGJhYTFjMjguLmI5M2NiYmQgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9mc2RrX2Jhc2Vmb3JtLmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2ZzZGtfYmFzZWZvcm0uaApAQCAtMSwyOTIgKzEsMjkyIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GU0RLX0JBU0VGT1JNX0hfDQotI2RlZmluZSBfRlNES19CQVNFRk9STV9IXw0KLQ0KLSNpZiBfRlhfT1NfID09IF9GWF9BTkRST0lEXw0KLSNpbmNsdWRlICJ0aW1lLmgiDQotI2Vsc2UNCi0jaW5jbHVkZSA8Y3RpbWU+DQotI2VuZGlmDQotDQotY2xhc3MgQ1BERlNES19Eb2N1bWVudDsNCi1jbGFzcyAgQ1BERlNES19EYXRlVGltZTsNCi1zdHJ1Y3QgQ1BXTF9Db2xvcjsNCi1jbGFzcyBDRkZMX0Zvcm1GaWxsZXI7DQotY2xhc3MgQ1BERlNES19QYWdlVmlldzsNCi1jbGFzcyBDUERGU0RLX0ludGVyRm9ybTsNCi0NCi0NCi10eXBlZGVmIHN0cnVjdCBfUERGU0RLX0ZpZWxkQWN0aW9uDQotew0KLQlfUERGU0RLX0ZpZWxkQWN0aW9uKCkNCi0Jew0KLQkJYk1vZGlmaWVyID0gRkFMU0U7DQotCQliU2hpZnQgPSBGQUxTRTsNCi0JCW5Db21taXRLZXkgPSAwOw0KLQkJYktleURvd24gPSBGQUxTRTsNCi0JCW5TZWxFbmQgPSBuU2VsU3RhcnQgPSAwOw0KLQkJYldpbGxDb21taXQgPSBGQUxTRTsNCi0JCWJGaWVsZEZ1bGwgPSBGQUxTRTsNCi0JCWJSQyA9IFRSVUU7DQotCX0NCi0JDQotCUZYX0JPT0wJCQkJCWJNb2RpZmllcjsJCS8vaW4NCi0JRlhfQk9PTAkJCQkJYlNoaWZ0OwkJCS8vaW4NCi0JaW50CQkJCQkJbkNvbW1pdEtleTsJCS8vaW4NCi0JQ0ZYX1dpZGVTdHJpbmcJCQlzQ2hhbmdlOwkJLy9pbltvdXRdDQotCUNGWF9XaWRlU3RyaW5nCQkJc0NoYW5nZUV4OwkJLy9pbg0KLQlGWF9CT09MCQkJCQliS2V5RG93bjsJCS8vaW4NCi0JaW50CQkJCQkJblNlbEVuZDsJCS8vaW5bb3V0XQ0KLQlpbnQJCQkJCQluU2VsU3RhcnQ7CQkvL2luW291dF0NCi0JQ0ZYX1dpZGVTdHJpbmcJCQlzVmFsdWU7CQkJLy9pbltvdXRdDQotCUZYX0JPT0wJCQkJCWJXaWxsQ29tbWl0OwkvL2luDQotCUZYX0JPT0wJCQkJCWJGaWVsZEZ1bGw7CQkvL2luDQotCUZYX0JPT0wJCQkJCWJSQzsJCQkvL2luW291dF0NCi19UERGU0RLX0ZpZWxkQWN0aW9uOw0KLWNsYXNzIENQREZTREtfV2lkZ2V0OnB1YmxpYyBDUERGU0RLX0Fubm90DQotew0KLXB1YmxpYzoNCi0JQ1BERlNES19XaWRnZXQoQ1BERl9Bbm5vdCogcEFubm90LCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtKTsNCi0JdmlydHVhbCB+Q1BERlNES19XaWRnZXQoKTsNCi0NCi0JdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJCUdldFN1YlR5cGUoKSBjb25zdDsNCi0JDQotCXZpcnR1YWwgQ1BERl9BY3Rpb24JCQkJR2V0QUFjdGlvbihDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIGVBQVQpOw0KLQ0KLQlpbnQJCQkJCQkJCUdldEZpZWxkVHlwZSgpIGNvbnN0Ow0KLQkvL2RlZmluZSBsYXlvdXQgb3JkZXIgdG8gMi4NCi0JdmlydHVhbCBpbnQJCQkJCQlHZXRMYXlvdXRPcmRlcigpIHtyZXR1cm4gMjt9DQotCS8qDQotCUZJRUxERkxBR19SRUFET05MWQ0KLQlGSUVMREZMQUdfUkVRVUlSRUQNCi0JRklFTERGTEFHX05PRVhQT1JUDQotCSovDQotCQ0KLQlpbnQJCQkJCQkJCUdldEZpZWxkRmxhZ3MoKSBjb25zdDsNCi0JaW50CQkJCQkJCQlHZXRSb3RhdGUoKSBjb25zdDsNCi0NCi0JRlhfQk9PTAkJCQkJCQlHZXRGaWxsQ29sb3IoRlhfQ09MT1JSRUYmIGNvbG9yKSBjb25zdDsNCi0JRlhfQk9PTAkJCQkJCQlHZXRCb3JkZXJDb2xvcihGWF9DT0xPUlJFRiYgY29sb3IpIGNvbnN0Ow0KLQlGWF9CT09MCQkJCQkJCUdldFRleHRDb2xvcihGWF9DT0xPUlJFRiYgY29sb3IpIGNvbnN0Ow0KLQlGWF9GTE9BVAkJCQkJCUdldEZvbnRTaXplKCkgY29uc3Q7DQotDQotCWludAkJCQkJCQkJR2V0U2VsZWN0ZWRJbmRleChpbnQgbkluZGV4KSBjb25zdDsNCi0JQ0ZYX1dpZGVTdHJpbmcJCQkJCUdldFZhbHVlKCkgY29uc3Q7DQotCUNGWF9XaWRlU3RyaW5nCQkJCQlHZXREZWZhdWx0VmFsdWUoKSBjb25zdDsNCi0JQ0ZYX1dpZGVTdHJpbmcJCQkJCUdldE9wdGlvbkxhYmVsKGludCBuSW5kZXgpIGNvbnN0Ow0KLQlpbnQJCQkJCQkJCUNvdW50T3B0aW9ucygpIGNvbnN0Ow0KLQlGWF9CT09MCQkJCQkJCUlzT3B0aW9uU2VsZWN0ZWQoaW50IG5JbmRleCkgY29uc3Q7DQotCWludAkJCQkJCQkJR2V0VG9wVmlzaWJsZUluZGV4KCkgY29uc3Q7DQotCUZYX0JPT0wJCQkJCQkJSXNDaGVja2VkKCkgY29uc3Q7DQotCS8qDQotCUJGX0FMSUdOX0xFRlQNCi0JQkZfQUxJR05fTUlEREwNCi0JQkZfQUxJR05fUklHSFQNCi0JKi8NCi0JaW50CQkJCQkJCQlHZXRBbGlnbm1lbnQoKSBjb25zdDsNCi0JaW50CQkJCQkJCQlHZXRNYXhMZW4oKSBjb25zdDsNCi0JQ0ZYX1dpZGVTdHJpbmcJCQkJCUdldEFsdGVybmF0ZU5hbWUoKSBjb25zdDsNCi0NCi0vL1NldCBQcm9wZXJ0aWVzLg0KLQl2b2lkCQkJCQkJCVNldENoZWNrKEZYX0JPT0wgYkNoZWNrZWQsIEZYX0JPT0wgYk5vdGlmeSk7DQotCXZvaWQJCQkJCQkJU2V0VmFsdWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNWYWx1ZSwgRlhfQk9PTCBiTm90aWZ5KTsNCi0Jdm9pZAkJCQkJCQlTZXREZWZhdWx0VmFsdWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNWYWx1ZSk7DQotCXZvaWQJCQkJCQkJU2V0T3B0aW9uU2VsZWN0aW9uKGludCBpbmRleCwgRlhfQk9PTCBiU2VsZWN0ZWQsIEZYX0JPT0wgYk5vdGlmeSk7DQotCXZvaWQJCQkJCQkJQ2xlYXJTZWxlY3Rpb24oRlhfQk9PTCBiTm90aWZ5KTsNCi0Jdm9pZAkJCQkJCQlTZXRUb3BWaXNpYmxlSW5kZXgoaW50IGluZGV4KTsNCi0NCi0Jdm9pZAkJCQkJCQlSZXNldEFwcGVhcmFuY2UoRlhfTFBDV1NUUiBzVmFsdWUsIEZYX0JPT0wgYlZhbHVlQ2hhbmdlZCk7DQotCXZvaWQJCQkJCQkJUmVzZXRGaWVsZEFwcGVhcmFuY2UoRlhfQk9PTCBiVmFsdWVDaGFuZ2VkKTsNCi0Jdm9pZAkJCQkJCQlVcGRhdGVGaWVsZCgpOw0KLQlDRlhfV2lkZVN0cmluZwkJCQkJT25Gb3JtYXQoaW50IG5Db21taXRLZXksIEZYX0JPT0wmIGJGb3JtYXRlZCk7DQotCQ0KLS8vTWVzc2FnZS4NCi0gCUZYX0JPT0wJCQkJCQkJT25BQWN0aW9uKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgUERGU0RLX0ZpZWxkQWN0aW9uJiBkYXRhLCANCi0JCQkJCQkJCQkJCQlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOw0KLQ0KLQlDUERGU0RLX0ludGVyRm9ybSoJCQkJR2V0SW50ZXJGb3JtKCkgY29uc3Qge3JldHVybiBtX3BJbnRlckZvcm07fQ0KLQlDUERGX0Zvcm1GaWVsZCoJCQkJCUdldEZvcm1GaWVsZCgpIGNvbnN0Ow0KLQlDUERGX0Zvcm1Db250cm9sKgkJCQlHZXRGb3JtQ29udHJvbCgpIGNvbnN0Ow0KLQlzdGF0aWMgQ1BERl9Gb3JtQ29udHJvbCoJCUdldEZvcm1Db250cm9sKENQREZfSW50ZXJGb3JtKiBwSW50ZXJGb3JtLCBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpY3QpOw0KLQ0KLQl2b2lkCQkJCQkJCURyYXdTaGFkb3coQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsNCi0JDQotCXZvaWQJCQkJCQkJU2V0QXBwTW9kaWZpZWQoKTsNCi0Jdm9pZAkJCQkJCQlDbGVhckFwcE1vZGlmaWVkKCk7DQotCUZYX0JPT0wJCQkJCQkJSXNBcHBNb2RpZmllZCgpIGNvbnN0Ow0KLQkNCi0JRlhfSU5UMzIJCQkJCQlHZXRBcHBlYXJhbmNlQWdlKCkgY29uc3Q7DQotCUZYX0lOVDMyCQkJCQkJR2V0VmFsdWVBZ2UoKSBjb25zdDsNCi0JDQotcHJpdmF0ZToNCi0Jdm9pZAkJCQkJCQlSZXNldEFwcGVhcmFuY2VfUHVzaEJ1dHRvbigpOw0KLQl2b2lkCQkJCQkJCVJlc2V0QXBwZWFyYW5jZV9DaGVja0JveCgpOw0KLQl2b2lkCQkJCQkJCVJlc2V0QXBwZWFyYW5jZV9SYWRpb0J1dHRvbigpOw0KLQl2b2lkCQkJCQkJCVJlc2V0QXBwZWFyYW5jZV9Db21ib0JveChGWF9MUENXU1RSIHNWYWx1ZSk7DQotCXZvaWQJCQkJCQkJUmVzZXRBcHBlYXJhbmNlX0xpc3RCb3goKTsNCi0Jdm9pZAkJCQkJCQlSZXNldEFwcGVhcmFuY2VfVGV4dEZpZWxkKEZYX0xQQ1dTVFIgc1ZhbHVlKTsNCi0JDQotCUNQREZfUmVjdAkJCQkJCUdldENsaWVudFJlY3QoKSBjb25zdDsNCi0JQ1BERl9SZWN0CQkJCQkJR2V0Um90YXRlZFJlY3QoKSBjb25zdDsNCi0JDQotCUNGWF9CeXRlU3RyaW5nCQkJCQlHZXRCYWNrZ3JvdW5kQXBwU3RyZWFtKCkgY29uc3Q7DQotCUNGWF9CeXRlU3RyaW5nCQkJCQlHZXRCb3JkZXJBcHBTdHJlYW0oKSBjb25zdDsNCi0JQ1BERl9NYXRyaXgJCQkJCQlHZXRNYXRyaXgoKSBjb25zdDsNCi0JDQotCUNQV0xfQ29sb3IJCQkJCQlHZXRUZXh0UFdMQ29sb3IoKSBjb25zdDsNCi0JQ1BXTF9Db2xvcgkJCQkJCUdldEJvcmRlclBXTENvbG9yKCkgY29uc3Q7DQotCUNQV0xfQ29sb3IJCQkJCQlHZXRGaWxsUFdMQ29sb3IoKSBjb25zdDsNCi0JDQotCXZvaWQJCQkJCQkJQWRkSW1hZ2VUb0FwcGVhcmFuY2UoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNBUFR5cGUsIENQREZfU3RyZWFtKiBwSW1hZ2UpOw0KLQl2b2lkCQkJCQkJCVJlbW92ZUFwcGVhcmFuY2UoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNBUFR5cGUpOw0KLXB1YmxpYzoNCi0JRlhfQk9PTAkJCQkJCQlJc1dpZGdldEFwcGVhcmFuY2VWYWxpZChDUERGX0Fubm90OjpBcHBlYXJhbmNlTW9kZSBtb2RlKTsNCi0Jdm9pZAkJCQkJCQlEcmF3QXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBjb25zdCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLA0KLQkJQ1BERl9Bbm5vdDo6QXBwZWFyYW5jZU1vZGUgbW9kZSwgY29uc3QgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucyk7DQotcHVibGljOg0KLQlGWF9CT09MCQkJCQkJCUhpdFRlc3QoRlhfRkxPQVQgcGFnZVgsIEZYX0ZMT0FUIHBhZ2VZKTsNCi1wcml2YXRlOg0KLQlDUERGU0RLX0ludGVyRm9ybSoJCQkJbV9wSW50ZXJGb3JtOw0KLQlGWF9CT09MCQkJCQkJCW1fYkFwcE1vZGlmaWVkOw0KLQlGWF9JTlQzMgkJCQkJCW1fbkFwcEFnZTsNCi0JRlhfSU5UMzIJCQkJCQltX25WYWx1ZUFnZTsNCi19Ow0KLQ0KLSNkZWZpbmUgQ1BERlNES19XaWRnZXRNYXAJCQkJQ0ZYX01hcFB0clRlbXBsYXRlPENQREZfRm9ybUNvbnRyb2wqLCBDUERGU0RLX1dpZGdldCo+DQotDQotY2xhc3MgQ1BERlNES19JbnRlckZvcm0gOiBwdWJsaWMgQ1BERl9Gb3JtTm90aWZ5DQotew0KLXB1YmxpYzoNCi0JQ1BERlNES19JbnRlckZvcm0oQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsNCi0JdmlydHVhbCB+Q1BERlNES19JbnRlckZvcm0oKTsNCi0JDQotcHVibGljOg0KLQl2aXJ0dWFsIHZvaWQJCQkJCURlc3Ryb3koKTsNCi0JdmlydHVhbCBDUERGX0ludGVyRm9ybSoJCQlHZXRJbnRlckZvcm0oKTsNCi0JDQotCUNQREZTREtfRG9jdW1lbnQqCQkJCUdldERvY3VtZW50KCk7DQotCUZYX0JPT0wJCQkJCQkJSGlnaGxpZ2h0V2lkZ2V0cygpOw0KLQkNCi0JQ1BERlNES19XaWRnZXQqCQkJCQlHZXRTaWJsaW5nKENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0LCBGWF9CT09MIGJOZXh0KSBjb25zdDsNCi0JQ1BERlNES19XaWRnZXQqCQkJCQlHZXRXaWRnZXQoQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2wpIGNvbnN0Ow0KLQl2b2lkCQkJCQkJCUdldFdpZGdldHMoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNGaWVsZE5hbWUsIENGWF9QdHJBcnJheSYgd2lkZ2V0cyk7DQotCXZvaWQJCQkJCQkJR2V0V2lkZ2V0cyhDUERGX0Zvcm1GaWVsZCogcEZpZWxkLCBDRlhfUHRyQXJyYXkmIHdpZGdldHMpOw0KLQkNCi0Jdm9pZAkJCQkJCQlBZGRNYXAoQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2wsIENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0KTsNCi0Jdm9pZAkJCQkJCQlSZW1vdmVNYXAoQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2wpOw0KLQkNCi0Jdm9pZAkJCQkJCQlFbmFibGVDYWxjdWxhdGUoRlhfQk9PTCBiRW5hYmxlZCk7DQotCUZYX0JPT0wJCQkJCQkJSXNDYWxjdWxhdGVFbmFibGVkKCkgY29uc3Q7DQotDQotI2lmZGVmIF9XSU4zMg0KLQlDUERGX1N0cmVhbSoJCQkJCUxvYWRJbWFnZUZyb21GaWxlKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzRmlsZSk7DQotI2VuZGlmDQotDQotCXZvaWQJCQkJCQkJT25LZXlTdHJva2VDb21taXQoQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQsIENGWF9XaWRlU3RyaW5nJiBjc1ZhbHVlLCBGWF9CT09MJiBiUkMpOw0KLQl2b2lkCQkJCQkJCU9uVmFsaWRhdGUoQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQsIENGWF9XaWRlU3RyaW5nJiBjc1ZhbHVlLCBGWF9CT09MJiBiUkMpOw0KLQl2b2lkCQkJCQkJCU9uQ2FsY3VsYXRlKENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gTlVMTCk7DQotCUNGWF9XaWRlU3RyaW5nCQkJCQlPbkZvcm1hdChDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCwgaW50IG5Db21taXRLZXksIEZYX0JPT0wmIGJGb3JtYXRlZCk7DQotCQ0KLQl2b2lkCQkJCQkJCVJlc2V0RmllbGRBcHBlYXJhbmNlKENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkLCBGWF9MUENXU1RSIHNWYWx1ZSwgRlhfQk9PTCBiVmFsdWVDaGFuZ2VkKTsNCi0Jdm9pZAkJCQkJCQlVcGRhdGVGaWVsZChDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCk7DQotCQ0KLXB1YmxpYzoNCi0JRlhfQk9PTAkJCQkJCQlEb0FjdGlvbl9IaWRlKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24pOw0KLQlGWF9CT09MCQkJCQkJCURvQWN0aW9uX1N1Ym1pdEZvcm0oY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbik7DQotCUZYX0JPT0wJCQkJCQkJRG9BY3Rpb25fUmVzZXRGb3JtKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24pOw0KLQlGWF9CT09MCQkJCQkJCURvQWN0aW9uX0ltcG9ydERhdGEoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbik7DQotCQ0KLQl2b2lkCQkJCQkJCUdldEZpZWxkRnJvbU9iamVjdHMoY29uc3QgQ0ZYX1B0ckFycmF5JiBvYmplY3RzLCBDRlhfUHRyQXJyYXkmIGZpZWxkcyk7DQotCUZYX0JPT0wJCQkJCQkJSXNWYWxpZEZpZWxkKENQREZfRGljdGlvbmFyeSogcEZpZWxkRGljdCk7DQotCUZYX0JPT0wJCQkJCQkJU3VibWl0RmllbGRzKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBjc0Rlc3RpbmF0aW9uLCBjb25zdCBDRlhfUHRyQXJyYXkmIGZpZWxkcywgDQotCQlGWF9CT09MIGJJbmNsdWRlT3JFeGNsdWRlLCBGWF9CT09MIGJVcmxFbmNvZGVkKTsNCi0JRlhfQk9PTAkJCQkJCQlTdWJtaXRGb3JtKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzRGVzdGluYXRpb24sIEZYX0JPT0wgYlVybEVuY29kZWQpOw0KLQlGWF9CT09MCQkJCQkJCUltcG9ydEZvcm1Gcm9tRkRGRmlsZShjb25zdCBDRlhfV2lkZVN0cmluZyYgY3NGREZGaWxlTmFtZSwgRlhfQk9PTCBiTm90aWZ5KTsNCi0JRlhfQk9PTAkJCQkJCQlFeHBvcnRGb3JtVG9GREZGaWxlKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzRkRGRmlsZU5hbWUpOw0KLQlGWF9CT09MCQkJCQkJCUV4cG9ydEZvcm1Ub0ZERlRleHRCdWYoQ0ZYX0J5dGVUZXh0QnVmJiB0ZXh0QnVmKTsNCi0JRlhfQk9PTAkJCQkJCQlFeHBvcnRGaWVsZHNUb0ZERkZpbGUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNGREZGaWxlTmFtZSwgY29uc3QgQ0ZYX1B0ckFycmF5JiBmaWVsZHMsDQotCQlGWF9CT09MIGJJbmNsdWRlT3JFeGNsdWRlKTsNCi0JRlhfQk9PTAkJCQkJCQlFeHBvcnRGaWVsZHNUb0ZERlRleHRCdWYoY29uc3QgQ0ZYX1B0ckFycmF5JiBmaWVsZHMsRlhfQk9PTCBiSW5jbHVkZU9yRXhjbHVkZSwgQ0ZYX0J5dGVUZXh0QnVmJiB0ZXh0QnVmKTsNCi0JRlhfQk9PTAkJCQkJCQlFeHBvcnRGb3JtVG9UeHRGaWxlKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzVHh0RmlsZU5hbWUpOw0KLQlGWF9CT09MCQkJCQkJCUltcG9ydEZvcm1Gcm9tVHh0RmlsZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc1R4dEZpbGVOYW1lKTsNCi0JQ0ZYX1dpZGVTdHJpbmcJCQkJCUdldFRlbXBvcmFyeUZpbGVOYW1lKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzRmlsZUV4dCk7DQotCQ0KLXByaXZhdGU6DQotCXZpcnR1YWwgaW50CQkJCQkJQmVmb3JlVmFsdWVDaGFuZ2UoY29uc3QgQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCwgQ0ZYX1dpZGVTdHJpbmcmIGNzVmFsdWUpOw0KLQl2aXJ0dWFsIGludAkJCQkJCUFmdGVyVmFsdWVDaGFuZ2UoY29uc3QgQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCk7DQotCXZpcnR1YWwgaW50CQkJCQkJQmVmb3JlU2VsZWN0aW9uQ2hhbmdlKGNvbnN0IENQREZfRm9ybUZpZWxkKiBwRmllbGQsIENGWF9XaWRlU3RyaW5nJiBjc1ZhbHVlKTsNCi0JdmlydHVhbCBpbnQJCQkJCQlBZnRlclNlbGVjdGlvbkNoYW5nZShjb25zdCBDUERGX0Zvcm1GaWVsZCogcEZpZWxkKTsNCi0JdmlydHVhbCBpbnQJCQkJCQlBZnRlckNoZWNrZWRTdGF0dXNDaGFuZ2UoY29uc3QgQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCwgY29uc3QgQ0ZYX0J5dGVBcnJheSYgc3RhdHVzQXJyYXkpOw0KLQl2aXJ0dWFsIGludAkJCQkJCUJlZm9yZUZvcm1SZXNldChjb25zdCBDUERGX0ludGVyRm9ybSogcEZvcm0pOw0KLQl2aXJ0dWFsIGludAkJCQkJCUFmdGVyRm9ybVJlc2V0KGNvbnN0IENQREZfSW50ZXJGb3JtKiBwRm9ybSk7DQotCXZpcnR1YWwgaW50CQkJCQkJQmVmb3JlRm9ybUltcG9ydERhdGEoY29uc3QgQ1BERl9JbnRlckZvcm0qIHBGb3JtKTsNCi0JdmlydHVhbCBpbnQJCQkJCQlBZnRlckZvcm1JbXBvcnREYXRhKGNvbnN0IENQREZfSW50ZXJGb3JtKiBwRm9ybSk7DQotCQ0KLXByaXZhdGU6DQotCUZYX0JPT0wJCQkJCQkJRkRGVG9VUkxFbmNvZGVkRGF0YShDRlhfV2lkZVN0cmluZyBjc0ZERkZpbGUsIENGWF9XaWRlU3RyaW5nIGNzVHh0RmlsZSk7DQotCUZYX0JPT0wJCQkJCQkJRkRGVG9VUkxFbmNvZGVkRGF0YShGWF9MUEJZVEUmIHBCdWYsIEZYX1NUUlNJWkUmIG5CdWZTaXplKTsNCi0JaW50CQkJCQkJCQlHZXRQYWdlSW5kZXhCeUFubm90RGljdChDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIENQREZfRGljdGlvbmFyeSogcEFubm90RGljdCkgY29uc3Q7DQotCXZvaWQJCQkJCQkJRG9GREZCdWZmZXIoQ0ZYX0J5dGVTdHJpbmcgc0J1ZmZlcik7DQotCQ0KLXByaXZhdGU6DQotCUNQREZTREtfRG9jdW1lbnQqCQkJCW1fcERvY3VtZW50Ow0KLQlDUERGX0ludGVyRm9ybSoJCQkJCW1fcEludGVyRm9ybTsNCi0JQ1BERlNES19XaWRnZXRNYXAJCQkJbV9NYXA7DQotCUZYX0JPT0wJCQkJCQkJbV9iQ2FsY3VsYXRlOw0KLQlGWF9CT09MCQkJCQkJCW1fYkJ1c3k7DQotDQotcHVibGljOg0KLQlGWF9CT09MIElzTmVlZEhpZ2hMaWdodChpbnQgbkZpZWxkVHlwZSk7DQotCXZvaWQgICAgUmVtb3ZlQWxsSGlnaExpZ2h0KCk7DQotCXZvaWQgICAgU2V0SGlnaGxpZ2h0QWxwaGEoRlhfQllURSBhbHBoYSkge21faUhpZ2hsaWdodEFscGhhID0gYWxwaGE7fQ0KLQlGWF9CWVRFIEdldEhpZ2hsaWdodEFscGhhKCkge3JldHVybiBtX2lIaWdobGlnaHRBbHBoYTt9DQotCXZvaWQgICAgU2V0SGlnaGxpZ2h0Q29sb3IoRlhfQ09MT1JSRUYgY2xyLCBpbnQgbkZpZWxkVHlwZSk7DQotCUZYX0NPTE9SUkVGIEdldEhpZ2hsaWdodENvbG9yKGludCBuRmllbGRUeXBlKTsNCi1wcml2YXRlOg0KLQlGWF9DT0xPUlJFRiBtX2FIaWdobGlnaHRDb2xvcls2XTsNCi0JRlhfQllURSBtX2lIaWdobGlnaHRBbHBoYTsNCi0JRlhfQk9PTAltX2JOZWVkSGlnaHRsaWdodFs2XTsNCi19Ow0KLQ0KLSNkZWZpbmUgQkFJX1NUUlVDVFVSRQkJMA0KLSNkZWZpbmUgQkFJX1JPVwkJCQkxDQotI2RlZmluZSBCQUlfQ09MVU1OCQkJMg0KLQ0KLSNkZWZpbmUgQ1BERlNES19Bbm5vdHMJCQkJQ0ZYX0FycmF5VGVtcGxhdGU8Q1BERlNES19Bbm5vdCo+DQotI2RlZmluZSBDUERGU0RLX1NvcnRBbm5vdHMJCQlDR1dfQXJyYXlUZW1wbGF0ZTxDUERGU0RLX0Fubm90Kj4NCi1jbGFzcyBDQkFfQW5ub3RJdGVyYXRvciANCi17DQotcHVibGljOg0KLQlDQkFfQW5ub3RJdGVyYXRvcihDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzVHlwZSwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNTdWJUeXBlKTsNCi0JdmlydHVhbCB+Q0JBX0Fubm90SXRlcmF0b3IoKTsNCi0JDQotCXZpcnR1YWwgQ1BERlNES19Bbm5vdCoJCQkJR2V0Rmlyc3RBbm5vdCgpOw0KLQl2aXJ0dWFsIENQREZTREtfQW5ub3QqCQkJCUdldExhc3RBbm5vdCgpOw0KLQl2aXJ0dWFsIENQREZTREtfQW5ub3QqCQkJCUdldE5leHRBbm5vdChDUERGU0RLX0Fubm90KiBwQW5ub3QpOw0KLQl2aXJ0dWFsIENQREZTREtfQW5ub3QqCQkJCUdldFByZXZBbm5vdChDUERGU0RLX0Fubm90KiBwQW5ub3QpOw0KLQkNCi0JdmlydHVhbCB2b2lkCQkJCQkJUmVsZWFzZSgpe2RlbGV0ZSB0aGlzO30NCi0JDQotcHJpdmF0ZToNCi0Jdm9pZAkJCQkJCQkJR2VuZXJhdGVSZXN1bHRzKCk7DQotCXN0YXRpYyBpbnQJCQkJCQkJQ29tcGFyZUJ5TGVmdChDUERGU0RLX0Fubm90KiBwMSwgQ1BERlNES19Bbm5vdCogcDIpOw0KLQlzdGF0aWMgaW50CQkJCQkJCUNvbXBhcmVCeVRvcChDUERGU0RLX0Fubm90KiBwMSwgQ1BERlNES19Bbm5vdCogcDIpOw0KLQkNCi0Jc3RhdGljIENQREZfUmVjdAkJCQkJR2V0QW5ub3RSZWN0KENQREZTREtfQW5ub3QqIHBBbm5vdCk7DQotCQ0KLXByaXZhdGU6DQotCUNQREZTREtfUGFnZVZpZXcqCQkJCQltX3BQYWdlVmlldzsNCi0JQ0ZYX0J5dGVTdHJpbmcJCQkJCQltX3NUeXBlOw0KLQlDRlhfQnl0ZVN0cmluZwkJCQkJCW1fc1N1YlR5cGU7DQotCWludAkJCQkJCQkJCW1fblRhYnM7DQotCQ0KLQlDUERGU0RLX0Fubm90cwkJCQkJCW1fQW5ub3RzOw0KLX07DQotDQotI2VuZGlmIC8vI2RlZmluZSBfRlNES19CQVNFRk9STV9IXw0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZTREtfQkFTRUZPUk1fSF8KKyNkZWZpbmUgX0ZTREtfQkFTRUZPUk1fSF8KKworI2lmIF9GWF9PU18gPT0gX0ZYX0FORFJPSURfCisjaW5jbHVkZSAidGltZS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxjdGltZT4KKyNlbmRpZgorCitjbGFzcyBDUERGU0RLX0RvY3VtZW50OworY2xhc3MgIENQREZTREtfRGF0ZVRpbWU7CitzdHJ1Y3QgQ1BXTF9Db2xvcjsKK2NsYXNzIENGRkxfRm9ybUZpbGxlcjsKK2NsYXNzIENQREZTREtfUGFnZVZpZXc7CitjbGFzcyBDUERGU0RLX0ludGVyRm9ybTsKKworCit0eXBlZGVmIHN0cnVjdCBfUERGU0RLX0ZpZWxkQWN0aW9uCit7CisJX1BERlNES19GaWVsZEFjdGlvbigpCisJeworCQliTW9kaWZpZXIgPSBGQUxTRTsKKwkJYlNoaWZ0ID0gRkFMU0U7CisJCW5Db21taXRLZXkgPSAwOworCQliS2V5RG93biA9IEZBTFNFOworCQluU2VsRW5kID0gblNlbFN0YXJ0ID0gMDsKKwkJYldpbGxDb21taXQgPSBGQUxTRTsKKwkJYkZpZWxkRnVsbCA9IEZBTFNFOworCQliUkMgPSBUUlVFOworCX0KKwkKKwlGWF9CT09MCQkJCQliTW9kaWZpZXI7CQkvL2luCisJRlhfQk9PTAkJCQkJYlNoaWZ0OwkJCS8vaW4KKwlpbnQJCQkJCQluQ29tbWl0S2V5OwkJLy9pbgorCUNGWF9XaWRlU3RyaW5nCQkJc0NoYW5nZTsJCS8vaW5bb3V0XQorCUNGWF9XaWRlU3RyaW5nCQkJc0NoYW5nZUV4OwkJLy9pbgorCUZYX0JPT0wJCQkJCWJLZXlEb3duOwkJLy9pbgorCWludAkJCQkJCW5TZWxFbmQ7CQkvL2luW291dF0KKwlpbnQJCQkJCQluU2VsU3RhcnQ7CQkvL2luW291dF0KKwlDRlhfV2lkZVN0cmluZwkJCXNWYWx1ZTsJCQkvL2luW291dF0KKwlGWF9CT09MCQkJCQliV2lsbENvbW1pdDsJLy9pbgorCUZYX0JPT0wJCQkJCWJGaWVsZEZ1bGw7CQkvL2luCisJRlhfQk9PTAkJCQkJYlJDOwkJCS8vaW5bb3V0XQorfVBERlNES19GaWVsZEFjdGlvbjsKK2NsYXNzIENQREZTREtfV2lkZ2V0OnB1YmxpYyBDUERGU0RLX0Fubm90Cit7CitwdWJsaWM6CisJQ1BERlNES19XaWRnZXQoQ1BERl9Bbm5vdCogcEFubm90LCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtKTsKKwl2aXJ0dWFsIH5DUERGU0RLX1dpZGdldCgpOworCisJdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJCUdldFN1YlR5cGUoKSBjb25zdDsKKwkKKwl2aXJ0dWFsIENQREZfQWN0aW9uCQkJCUdldEFBY3Rpb24oQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSBlQUFUKTsKKworCWludAkJCQkJCQkJR2V0RmllbGRUeXBlKCkgY29uc3Q7CisJLy9kZWZpbmUgbGF5b3V0IG9yZGVyIHRvIDIuCisJdmlydHVhbCBpbnQJCQkJCQlHZXRMYXlvdXRPcmRlcigpIHtyZXR1cm4gMjt9CisJLyoKKwlGSUVMREZMQUdfUkVBRE9OTFkKKwlGSUVMREZMQUdfUkVRVUlSRUQKKwlGSUVMREZMQUdfTk9FWFBPUlQKKwkqLworCQorCWludAkJCQkJCQkJR2V0RmllbGRGbGFncygpIGNvbnN0OworCWludAkJCQkJCQkJR2V0Um90YXRlKCkgY29uc3Q7CisKKwlGWF9CT09MCQkJCQkJCUdldEZpbGxDb2xvcihGWF9DT0xPUlJFRiYgY29sb3IpIGNvbnN0OworCUZYX0JPT0wJCQkJCQkJR2V0Qm9yZGVyQ29sb3IoRlhfQ09MT1JSRUYmIGNvbG9yKSBjb25zdDsKKwlGWF9CT09MCQkJCQkJCUdldFRleHRDb2xvcihGWF9DT0xPUlJFRiYgY29sb3IpIGNvbnN0OworCUZYX0ZMT0FUCQkJCQkJR2V0Rm9udFNpemUoKSBjb25zdDsKKworCWludAkJCQkJCQkJR2V0U2VsZWN0ZWRJbmRleChpbnQgbkluZGV4KSBjb25zdDsKKwlDRlhfV2lkZVN0cmluZwkJCQkJR2V0VmFsdWUoKSBjb25zdDsKKwlDRlhfV2lkZVN0cmluZwkJCQkJR2V0RGVmYXVsdFZhbHVlKCkgY29uc3Q7CisJQ0ZYX1dpZGVTdHJpbmcJCQkJCUdldE9wdGlvbkxhYmVsKGludCBuSW5kZXgpIGNvbnN0OworCWludAkJCQkJCQkJQ291bnRPcHRpb25zKCkgY29uc3Q7CisJRlhfQk9PTAkJCQkJCQlJc09wdGlvblNlbGVjdGVkKGludCBuSW5kZXgpIGNvbnN0OworCWludAkJCQkJCQkJR2V0VG9wVmlzaWJsZUluZGV4KCkgY29uc3Q7CisJRlhfQk9PTAkJCQkJCQlJc0NoZWNrZWQoKSBjb25zdDsKKwkvKgorCUJGX0FMSUdOX0xFRlQKKwlCRl9BTElHTl9NSURETAorCUJGX0FMSUdOX1JJR0hUCisJKi8KKwlpbnQJCQkJCQkJCUdldEFsaWdubWVudCgpIGNvbnN0OworCWludAkJCQkJCQkJR2V0TWF4TGVuKCkgY29uc3Q7CisJQ0ZYX1dpZGVTdHJpbmcJCQkJCUdldEFsdGVybmF0ZU5hbWUoKSBjb25zdDsKKworLy9TZXQgUHJvcGVydGllcy4KKwl2b2lkCQkJCQkJCVNldENoZWNrKEZYX0JPT0wgYkNoZWNrZWQsIEZYX0JPT0wgYk5vdGlmeSk7CisJdm9pZAkJCQkJCQlTZXRWYWx1ZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc1ZhbHVlLCBGWF9CT09MIGJOb3RpZnkpOworCXZvaWQJCQkJCQkJU2V0RGVmYXVsdFZhbHVlKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzVmFsdWUpOworCXZvaWQJCQkJCQkJU2V0T3B0aW9uU2VsZWN0aW9uKGludCBpbmRleCwgRlhfQk9PTCBiU2VsZWN0ZWQsIEZYX0JPT0wgYk5vdGlmeSk7CisJdm9pZAkJCQkJCQlDbGVhclNlbGVjdGlvbihGWF9CT09MIGJOb3RpZnkpOworCXZvaWQJCQkJCQkJU2V0VG9wVmlzaWJsZUluZGV4KGludCBpbmRleCk7CisKKwl2b2lkCQkJCQkJCVJlc2V0QXBwZWFyYW5jZShGWF9MUENXU1RSIHNWYWx1ZSwgRlhfQk9PTCBiVmFsdWVDaGFuZ2VkKTsKKwl2b2lkCQkJCQkJCVJlc2V0RmllbGRBcHBlYXJhbmNlKEZYX0JPT0wgYlZhbHVlQ2hhbmdlZCk7CisJdm9pZAkJCQkJCQlVcGRhdGVGaWVsZCgpOworCUNGWF9XaWRlU3RyaW5nCQkJCQlPbkZvcm1hdChpbnQgbkNvbW1pdEtleSwgRlhfQk9PTCYgYkZvcm1hdGVkKTsKKwkKKy8vTWVzc2FnZS4KKyAJRlhfQk9PTAkJCQkJCQlPbkFBY3Rpb24oQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLCBQREZTREtfRmllbGRBY3Rpb24mIGRhdGEsIAorCQkJCQkJCQkJCQkJQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsKKworCUNQREZTREtfSW50ZXJGb3JtKgkJCQlHZXRJbnRlckZvcm0oKSBjb25zdCB7cmV0dXJuIG1fcEludGVyRm9ybTt9CisJQ1BERl9Gb3JtRmllbGQqCQkJCQlHZXRGb3JtRmllbGQoKSBjb25zdDsKKwlDUERGX0Zvcm1Db250cm9sKgkJCQlHZXRGb3JtQ29udHJvbCgpIGNvbnN0OworCXN0YXRpYyBDUERGX0Zvcm1Db250cm9sKgkJR2V0Rm9ybUNvbnRyb2woQ1BERl9JbnRlckZvcm0qIHBJbnRlckZvcm0sIENQREZfRGljdGlvbmFyeSogcEFubm90RGljdCk7CisKKwl2b2lkCQkJCQkJCURyYXdTaGFkb3coQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsKKwkKKwl2b2lkCQkJCQkJCVNldEFwcE1vZGlmaWVkKCk7CisJdm9pZAkJCQkJCQlDbGVhckFwcE1vZGlmaWVkKCk7CisJRlhfQk9PTAkJCQkJCQlJc0FwcE1vZGlmaWVkKCkgY29uc3Q7CisJCisJRlhfSU5UMzIJCQkJCQlHZXRBcHBlYXJhbmNlQWdlKCkgY29uc3Q7CisJRlhfSU5UMzIJCQkJCQlHZXRWYWx1ZUFnZSgpIGNvbnN0OworCQorcHJpdmF0ZToKKwl2b2lkCQkJCQkJCVJlc2V0QXBwZWFyYW5jZV9QdXNoQnV0dG9uKCk7CisJdm9pZAkJCQkJCQlSZXNldEFwcGVhcmFuY2VfQ2hlY2tCb3goKTsKKwl2b2lkCQkJCQkJCVJlc2V0QXBwZWFyYW5jZV9SYWRpb0J1dHRvbigpOworCXZvaWQJCQkJCQkJUmVzZXRBcHBlYXJhbmNlX0NvbWJvQm94KEZYX0xQQ1dTVFIgc1ZhbHVlKTsKKwl2b2lkCQkJCQkJCVJlc2V0QXBwZWFyYW5jZV9MaXN0Qm94KCk7CisJdm9pZAkJCQkJCQlSZXNldEFwcGVhcmFuY2VfVGV4dEZpZWxkKEZYX0xQQ1dTVFIgc1ZhbHVlKTsKKwkKKwlDUERGX1JlY3QJCQkJCQlHZXRDbGllbnRSZWN0KCkgY29uc3Q7CisJQ1BERl9SZWN0CQkJCQkJR2V0Um90YXRlZFJlY3QoKSBjb25zdDsKKwkKKwlDRlhfQnl0ZVN0cmluZwkJCQkJR2V0QmFja2dyb3VuZEFwcFN0cmVhbSgpIGNvbnN0OworCUNGWF9CeXRlU3RyaW5nCQkJCQlHZXRCb3JkZXJBcHBTdHJlYW0oKSBjb25zdDsKKwlDUERGX01hdHJpeAkJCQkJCUdldE1hdHJpeCgpIGNvbnN0OworCQorCUNQV0xfQ29sb3IJCQkJCQlHZXRUZXh0UFdMQ29sb3IoKSBjb25zdDsKKwlDUFdMX0NvbG9yCQkJCQkJR2V0Qm9yZGVyUFdMQ29sb3IoKSBjb25zdDsKKwlDUFdMX0NvbG9yCQkJCQkJR2V0RmlsbFBXTENvbG9yKCkgY29uc3Q7CisJCisJdm9pZAkJCQkJCQlBZGRJbWFnZVRvQXBwZWFyYW5jZShjb25zdCBDRlhfQnl0ZVN0cmluZyYgc0FQVHlwZSwgQ1BERl9TdHJlYW0qIHBJbWFnZSk7CisJdm9pZAkJCQkJCQlSZW1vdmVBcHBlYXJhbmNlKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzQVBUeXBlKTsKK3B1YmxpYzoKKwlGWF9CT09MCQkJCQkJCUlzV2lkZ2V0QXBwZWFyYW5jZVZhbGlkKENQREZfQW5ub3Q6OkFwcGVhcmFuY2VNb2RlIG1vZGUpOworCXZvaWQJCQkJCQkJRHJhd0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgY29uc3QgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwKKwkJQ1BERl9Bbm5vdDo6QXBwZWFyYW5jZU1vZGUgbW9kZSwgY29uc3QgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucyk7CitwdWJsaWM6CisJRlhfQk9PTAkJCQkJCQlIaXRUZXN0KEZYX0ZMT0FUIHBhZ2VYLCBGWF9GTE9BVCBwYWdlWSk7Citwcml2YXRlOgorCUNQREZTREtfSW50ZXJGb3JtKgkJCQltX3BJbnRlckZvcm07CisJRlhfQk9PTAkJCQkJCQltX2JBcHBNb2RpZmllZDsKKwlGWF9JTlQzMgkJCQkJCW1fbkFwcEFnZTsKKwlGWF9JTlQzMgkJCQkJCW1fblZhbHVlQWdlOworfTsKKworI2RlZmluZSBDUERGU0RLX1dpZGdldE1hcAkJCQlDRlhfTWFwUHRyVGVtcGxhdGU8Q1BERl9Gb3JtQ29udHJvbCosIENQREZTREtfV2lkZ2V0Kj4KKworY2xhc3MgQ1BERlNES19JbnRlckZvcm0gOiBwdWJsaWMgQ1BERl9Gb3JtTm90aWZ5Cit7CitwdWJsaWM6CisJQ1BERlNES19JbnRlckZvcm0oQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KTsKKwl2aXJ0dWFsIH5DUERGU0RLX0ludGVyRm9ybSgpOworCQorcHVibGljOgorCXZpcnR1YWwgdm9pZAkJCQkJRGVzdHJveSgpOworCXZpcnR1YWwgQ1BERl9JbnRlckZvcm0qCQkJR2V0SW50ZXJGb3JtKCk7CisJCisJQ1BERlNES19Eb2N1bWVudCoJCQkJR2V0RG9jdW1lbnQoKTsKKwlGWF9CT09MCQkJCQkJCUhpZ2hsaWdodFdpZGdldHMoKTsKKwkKKwlDUERGU0RLX1dpZGdldCoJCQkJCUdldFNpYmxpbmcoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQsIEZYX0JPT0wgYk5leHQpIGNvbnN0OworCUNQREZTREtfV2lkZ2V0KgkJCQkJR2V0V2lkZ2V0KENQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sKSBjb25zdDsKKwl2b2lkCQkJCQkJCUdldFdpZGdldHMoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNGaWVsZE5hbWUsIENGWF9QdHJBcnJheSYgd2lkZ2V0cyk7CisJdm9pZAkJCQkJCQlHZXRXaWRnZXRzKENQREZfRm9ybUZpZWxkKiBwRmllbGQsIENGWF9QdHJBcnJheSYgd2lkZ2V0cyk7CisJCisJdm9pZAkJCQkJCQlBZGRNYXAoQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2wsIENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0KTsKKwl2b2lkCQkJCQkJCVJlbW92ZU1hcChDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCk7CisJCisJdm9pZAkJCQkJCQlFbmFibGVDYWxjdWxhdGUoRlhfQk9PTCBiRW5hYmxlZCk7CisJRlhfQk9PTAkJCQkJCQlJc0NhbGN1bGF0ZUVuYWJsZWQoKSBjb25zdDsKKworI2lmZGVmIF9XSU4zMgorCUNQREZfU3RyZWFtKgkJCQkJTG9hZEltYWdlRnJvbUZpbGUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNGaWxlKTsKKyNlbmRpZgorCisJdm9pZAkJCQkJCQlPbktleVN0cm9rZUNvbW1pdChDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCwgQ0ZYX1dpZGVTdHJpbmcmIGNzVmFsdWUsIEZYX0JPT0wmIGJSQyk7CisJdm9pZAkJCQkJCQlPblZhbGlkYXRlKENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkLCBDRlhfV2lkZVN0cmluZyYgY3NWYWx1ZSwgRlhfQk9PTCYgYlJDKTsKKwl2b2lkCQkJCQkJCU9uQ2FsY3VsYXRlKENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gTlVMTCk7CisJQ0ZYX1dpZGVTdHJpbmcJCQkJCU9uRm9ybWF0KENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkLCBpbnQgbkNvbW1pdEtleSwgRlhfQk9PTCYgYkZvcm1hdGVkKTsKKwkKKwl2b2lkCQkJCQkJCVJlc2V0RmllbGRBcHBlYXJhbmNlKENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkLCBGWF9MUENXU1RSIHNWYWx1ZSwgRlhfQk9PTCBiVmFsdWVDaGFuZ2VkKTsKKwl2b2lkCQkJCQkJCVVwZGF0ZUZpZWxkKENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkKTsKKwkKK3B1YmxpYzoKKwlGWF9CT09MCQkJCQkJCURvQWN0aW9uX0hpZGUoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbik7CisJRlhfQk9PTAkJCQkJCQlEb0FjdGlvbl9TdWJtaXRGb3JtKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24pOworCUZYX0JPT0wJCQkJCQkJRG9BY3Rpb25fUmVzZXRGb3JtKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24pOworCUZYX0JPT0wJCQkJCQkJRG9BY3Rpb25fSW1wb3J0RGF0YShjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uKTsKKwkKKwl2b2lkCQkJCQkJCUdldEZpZWxkRnJvbU9iamVjdHMoY29uc3QgQ0ZYX1B0ckFycmF5JiBvYmplY3RzLCBDRlhfUHRyQXJyYXkmIGZpZWxkcyk7CisJRlhfQk9PTAkJCQkJCQlJc1ZhbGlkRmllbGQoQ1BERl9EaWN0aW9uYXJ5KiBwRmllbGREaWN0KTsKKwlGWF9CT09MCQkJCQkJCVN1Ym1pdEZpZWxkcyhjb25zdCBDRlhfV2lkZVN0cmluZyYgY3NEZXN0aW5hdGlvbiwgY29uc3QgQ0ZYX1B0ckFycmF5JiBmaWVsZHMsIAorCQlGWF9CT09MIGJJbmNsdWRlT3JFeGNsdWRlLCBGWF9CT09MIGJVcmxFbmNvZGVkKTsKKwlGWF9CT09MCQkJCQkJCVN1Ym1pdEZvcm0oY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNEZXN0aW5hdGlvbiwgRlhfQk9PTCBiVXJsRW5jb2RlZCk7CisJRlhfQk9PTAkJCQkJCQlJbXBvcnRGb3JtRnJvbUZERkZpbGUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIGNzRkRGRmlsZU5hbWUsIEZYX0JPT0wgYk5vdGlmeSk7CisJRlhfQk9PTAkJCQkJCQlFeHBvcnRGb3JtVG9GREZGaWxlKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzRkRGRmlsZU5hbWUpOworCUZYX0JPT0wJCQkJCQkJRXhwb3J0Rm9ybVRvRkRGVGV4dEJ1ZihDRlhfQnl0ZVRleHRCdWYmIHRleHRCdWYpOworCUZYX0JPT0wJCQkJCQkJRXhwb3J0RmllbGRzVG9GREZGaWxlKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzRkRGRmlsZU5hbWUsIGNvbnN0IENGWF9QdHJBcnJheSYgZmllbGRzLAorCQlGWF9CT09MIGJJbmNsdWRlT3JFeGNsdWRlKTsKKwlGWF9CT09MCQkJCQkJCUV4cG9ydEZpZWxkc1RvRkRGVGV4dEJ1Zihjb25zdCBDRlhfUHRyQXJyYXkmIGZpZWxkcyxGWF9CT09MIGJJbmNsdWRlT3JFeGNsdWRlLCBDRlhfQnl0ZVRleHRCdWYmIHRleHRCdWYpOworCUZYX0JPT0wJCQkJCQkJRXhwb3J0Rm9ybVRvVHh0RmlsZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc1R4dEZpbGVOYW1lKTsKKwlGWF9CT09MCQkJCQkJCUltcG9ydEZvcm1Gcm9tVHh0RmlsZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc1R4dEZpbGVOYW1lKTsKKwlDRlhfV2lkZVN0cmluZwkJCQkJR2V0VGVtcG9yYXJ5RmlsZU5hbWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNGaWxlRXh0KTsKKwkKK3ByaXZhdGU6CisJdmlydHVhbCBpbnQJCQkJCQlCZWZvcmVWYWx1ZUNoYW5nZShjb25zdCBDUERGX0Zvcm1GaWVsZCogcEZpZWxkLCBDRlhfV2lkZVN0cmluZyYgY3NWYWx1ZSk7CisJdmlydHVhbCBpbnQJCQkJCQlBZnRlclZhbHVlQ2hhbmdlKGNvbnN0IENQREZfRm9ybUZpZWxkKiBwRmllbGQpOworCXZpcnR1YWwgaW50CQkJCQkJQmVmb3JlU2VsZWN0aW9uQ2hhbmdlKGNvbnN0IENQREZfRm9ybUZpZWxkKiBwRmllbGQsIENGWF9XaWRlU3RyaW5nJiBjc1ZhbHVlKTsKKwl2aXJ0dWFsIGludAkJCQkJCUFmdGVyU2VsZWN0aW9uQ2hhbmdlKGNvbnN0IENQREZfRm9ybUZpZWxkKiBwRmllbGQpOworCXZpcnR1YWwgaW50CQkJCQkJQWZ0ZXJDaGVja2VkU3RhdHVzQ2hhbmdlKGNvbnN0IENQREZfRm9ybUZpZWxkKiBwRmllbGQsIGNvbnN0IENGWF9CeXRlQXJyYXkmIHN0YXR1c0FycmF5KTsKKwl2aXJ0dWFsIGludAkJCQkJCUJlZm9yZUZvcm1SZXNldChjb25zdCBDUERGX0ludGVyRm9ybSogcEZvcm0pOworCXZpcnR1YWwgaW50CQkJCQkJQWZ0ZXJGb3JtUmVzZXQoY29uc3QgQ1BERl9JbnRlckZvcm0qIHBGb3JtKTsKKwl2aXJ0dWFsIGludAkJCQkJCUJlZm9yZUZvcm1JbXBvcnREYXRhKGNvbnN0IENQREZfSW50ZXJGb3JtKiBwRm9ybSk7CisJdmlydHVhbCBpbnQJCQkJCQlBZnRlckZvcm1JbXBvcnREYXRhKGNvbnN0IENQREZfSW50ZXJGb3JtKiBwRm9ybSk7CisJCitwcml2YXRlOgorCUZYX0JPT0wJCQkJCQkJRkRGVG9VUkxFbmNvZGVkRGF0YShDRlhfV2lkZVN0cmluZyBjc0ZERkZpbGUsIENGWF9XaWRlU3RyaW5nIGNzVHh0RmlsZSk7CisJRlhfQk9PTAkJCQkJCQlGREZUb1VSTEVuY29kZWREYXRhKEZYX0xQQllURSYgcEJ1ZiwgRlhfU1RSU0laRSYgbkJ1ZlNpemUpOworCWludAkJCQkJCQkJR2V0UGFnZUluZGV4QnlBbm5vdERpY3QoQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpY3QpIGNvbnN0OworCXZvaWQJCQkJCQkJRG9GREZCdWZmZXIoQ0ZYX0J5dGVTdHJpbmcgc0J1ZmZlcik7CisJCitwcml2YXRlOgorCUNQREZTREtfRG9jdW1lbnQqCQkJCW1fcERvY3VtZW50OworCUNQREZfSW50ZXJGb3JtKgkJCQkJbV9wSW50ZXJGb3JtOworCUNQREZTREtfV2lkZ2V0TWFwCQkJCW1fTWFwOworCUZYX0JPT0wJCQkJCQkJbV9iQ2FsY3VsYXRlOworCUZYX0JPT0wJCQkJCQkJbV9iQnVzeTsKKworcHVibGljOgorCUZYX0JPT0wgSXNOZWVkSGlnaExpZ2h0KGludCBuRmllbGRUeXBlKTsKKwl2b2lkICAgIFJlbW92ZUFsbEhpZ2hMaWdodCgpOworCXZvaWQgICAgU2V0SGlnaGxpZ2h0QWxwaGEoRlhfQllURSBhbHBoYSkge21faUhpZ2hsaWdodEFscGhhID0gYWxwaGE7fQorCUZYX0JZVEUgR2V0SGlnaGxpZ2h0QWxwaGEoKSB7cmV0dXJuIG1faUhpZ2hsaWdodEFscGhhO30KKwl2b2lkICAgIFNldEhpZ2hsaWdodENvbG9yKEZYX0NPTE9SUkVGIGNsciwgaW50IG5GaWVsZFR5cGUpOworCUZYX0NPTE9SUkVGIEdldEhpZ2hsaWdodENvbG9yKGludCBuRmllbGRUeXBlKTsKK3ByaXZhdGU6CisJRlhfQ09MT1JSRUYgbV9hSGlnaGxpZ2h0Q29sb3JbNl07CisJRlhfQllURSBtX2lIaWdobGlnaHRBbHBoYTsKKwlGWF9CT09MCW1fYk5lZWRIaWdodGxpZ2h0WzZdOworfTsKKworI2RlZmluZSBCQUlfU1RSVUNUVVJFCQkwCisjZGVmaW5lIEJBSV9ST1cJCQkJMQorI2RlZmluZSBCQUlfQ09MVU1OCQkJMgorCisjZGVmaW5lIENQREZTREtfQW5ub3RzCQkJCUNGWF9BcnJheVRlbXBsYXRlPENQREZTREtfQW5ub3QqPgorI2RlZmluZSBDUERGU0RLX1NvcnRBbm5vdHMJCQlDR1dfQXJyYXlUZW1wbGF0ZTxDUERGU0RLX0Fubm90Kj4KK2NsYXNzIENCQV9Bbm5vdEl0ZXJhdG9yIAoreworcHVibGljOgorCUNCQV9Bbm5vdEl0ZXJhdG9yKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNUeXBlLCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc1N1YlR5cGUpOworCXZpcnR1YWwgfkNCQV9Bbm5vdEl0ZXJhdG9yKCk7CisJCisJdmlydHVhbCBDUERGU0RLX0Fubm90KgkJCQlHZXRGaXJzdEFubm90KCk7CisJdmlydHVhbCBDUERGU0RLX0Fubm90KgkJCQlHZXRMYXN0QW5ub3QoKTsKKwl2aXJ0dWFsIENQREZTREtfQW5ub3QqCQkJCUdldE5leHRBbm5vdChDUERGU0RLX0Fubm90KiBwQW5ub3QpOworCXZpcnR1YWwgQ1BERlNES19Bbm5vdCoJCQkJR2V0UHJldkFubm90KENQREZTREtfQW5ub3QqIHBBbm5vdCk7CisJCisJdmlydHVhbCB2b2lkCQkJCQkJUmVsZWFzZSgpe2RlbGV0ZSB0aGlzO30KKwkKK3ByaXZhdGU6CisJdm9pZAkJCQkJCQkJR2VuZXJhdGVSZXN1bHRzKCk7CisJc3RhdGljIGludAkJCQkJCQlDb21wYXJlQnlMZWZ0KENQREZTREtfQW5ub3QqIHAxLCBDUERGU0RLX0Fubm90KiBwMik7CisJc3RhdGljIGludAkJCQkJCQlDb21wYXJlQnlUb3AoQ1BERlNES19Bbm5vdCogcDEsIENQREZTREtfQW5ub3QqIHAyKTsKKwkKKwlzdGF0aWMgQ1BERl9SZWN0CQkJCQlHZXRBbm5vdFJlY3QoQ1BERlNES19Bbm5vdCogcEFubm90KTsKKwkKK3ByaXZhdGU6CisJQ1BERlNES19QYWdlVmlldyoJCQkJCW1fcFBhZ2VWaWV3OworCUNGWF9CeXRlU3RyaW5nCQkJCQkJbV9zVHlwZTsKKwlDRlhfQnl0ZVN0cmluZwkJCQkJCW1fc1N1YlR5cGU7CisJaW50CQkJCQkJCQkJbV9uVGFiczsKKwkKKwlDUERGU0RLX0Fubm90cwkJCQkJCW1fQW5ub3RzOworfTsKKworI2VuZGlmIC8vI2RlZmluZSBfRlNES19CQVNFRk9STV9IXworCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvZnNka19jb21tb24uaCBiL2ZwZGZzZGsvaW5jbHVkZS9mc2RrX2NvbW1vbi5oCmluZGV4IGI0OWMxZDEuLjE5NzkxN2MgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9mc2RrX2NvbW1vbi5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9mc2RrX2NvbW1vbi5oCkBAIC0xLDQ2ICsxLDQ2IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GU0RLX0NPTU1PTl9IXw0KLSNkZWZpbmUgX0ZTREtfQ09NTU9OX0hfDQotDQotI2RlZmluZSBCRkZUX1NJR05BVFVSRQkJCQkiU2lnbmF0dXJlIg0KLQ0KLS8vZm9yIGFsbCBmaWVsZHMNCi0jZGVmaW5lIEZJRUxERkxBR19SRUFET05MWQkJCQkJMQ0KLSNkZWZpbmUgRklFTERGTEFHX1JFUVVJUkVECQkJCQkyDQotI2RlZmluZSBGSUVMREZMQUdfTk9FWFBPUlQJCQkJCTQNCi0vL2ZvciB0ZXh0IGZpZWxkcw0KLSNkZWZpbmUgRklFTERGTEFHX01VTFRJTElORQkJCQkJKDE8PDEyKQ0KLSNkZWZpbmUgRklFTERGTEFHX1BBU1NXT1JECQkJCQkoMTw8MTMpDQotI2RlZmluZSBGSUVMREZMQUdfRklMRVNFTEVDVAkJCQkoMTw8MjApDQotI2RlZmluZSBGSUVMREZMQUdfRE9OT1RTUEVMTENIRUNLCQkJKDE8PDIyKQ0KLSNkZWZpbmUgRklFTERGTEFHX0RPTk9UU0NST0xMCQkJCSgxPDwyMykNCi0jZGVmaW5lIEZJRUxERkxBR19DT01CCQkJCQkJKDE8PDI0KQ0KLSNkZWZpbmUgRklFTERGTEFHX1JJQ0hURVhUCQkJCQkoMTw8MjUpDQotLy9mb3IgYnV0dG9uIGZpbGVkcw0KLSNkZWZpbmUgRklFTERGTEFHX05PVE9HR0xFVE9PRkYJCQkJKDE8PDE0KQ0KLSNkZWZpbmUgRklFTERGTEFHX1JBRElPCQkJCQkJKDE8PDE1KQ0KLSNkZWZpbmUgRklFTERGTEFHX1BVU0hCVVRUT04JCQkJKDE8PDE2KQ0KLSNkZWZpbmUgRklFTERGTEFHX1JBRElPU0lOVU5JU09OCQkJKDE8PDI1KQ0KLS8vZm9yIGNob2ljZSBmaWVsZHMNCi0jZGVmaW5lIEZJRUxERkxBR19DT01CTwkJCQkJCSgxPDwxNykNCi0jZGVmaW5lIEZJRUxERkxBR19FRElUCQkJCQkJKDE8PDE4KQ0KLSNkZWZpbmUgRklFTERGTEFHX1NPUlQJCQkJCQkoMTw8MTkpDQotI2RlZmluZSBGSUVMREZMQUdfTVVMVElTRUxFQ1QJCQkJKDE8PDIxKQ0KLSNpZm5kZWYgRklFTERGTEFHX0RPTk9UU1BFTExDSEVDSw0KLSNkZWZpbmUgRklFTERGTEFHX0RPTk9UU1BFTExDSEVDSwkJKDE8PDIyKQ0KLSNlbmRpZg0KLSNkZWZpbmUgRklFTERGTEFHX0NPTU1JVE9OU0VMQ0hBTkdFCQkJKDE8PDI2KQ0KLQ0KLSNkZWZpbmUgQkJTX1NPTElECQkJCQkwDQotI2RlZmluZSBCQlNfREFTSAkJCQkJMQ0KLSNkZWZpbmUgQkJTX0JFVkVMRUQJCQkJCTINCi0jZGVmaW5lIEJCU19JTlNFVAkJCQkJMw0KLSNkZWZpbmUgQkJTX1VOREVSTElORQkJCQk0DQotDQotDQotI2VuZGlmDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlNES19DT01NT05fSF8KKyNkZWZpbmUgX0ZTREtfQ09NTU9OX0hfCisKKyNkZWZpbmUgQkZGVF9TSUdOQVRVUkUJCQkJIlNpZ25hdHVyZSIKKworLy9mb3IgYWxsIGZpZWxkcworI2RlZmluZSBGSUVMREZMQUdfUkVBRE9OTFkJCQkJCTEKKyNkZWZpbmUgRklFTERGTEFHX1JFUVVJUkVECQkJCQkyCisjZGVmaW5lIEZJRUxERkxBR19OT0VYUE9SVAkJCQkJNAorLy9mb3IgdGV4dCBmaWVsZHMKKyNkZWZpbmUgRklFTERGTEFHX01VTFRJTElORQkJCQkJKDE8PDEyKQorI2RlZmluZSBGSUVMREZMQUdfUEFTU1dPUkQJCQkJCSgxPDwxMykKKyNkZWZpbmUgRklFTERGTEFHX0ZJTEVTRUxFQ1QJCQkJKDE8PDIwKQorI2RlZmluZSBGSUVMREZMQUdfRE9OT1RTUEVMTENIRUNLCQkJKDE8PDIyKQorI2RlZmluZSBGSUVMREZMQUdfRE9OT1RTQ1JPTEwJCQkJKDE8PDIzKQorI2RlZmluZSBGSUVMREZMQUdfQ09NQgkJCQkJCSgxPDwyNCkKKyNkZWZpbmUgRklFTERGTEFHX1JJQ0hURVhUCQkJCQkoMTw8MjUpCisvL2ZvciBidXR0b24gZmlsZWRzCisjZGVmaW5lIEZJRUxERkxBR19OT1RPR0dMRVRPT0ZGCQkJCSgxPDwxNCkKKyNkZWZpbmUgRklFTERGTEFHX1JBRElPCQkJCQkJKDE8PDE1KQorI2RlZmluZSBGSUVMREZMQUdfUFVTSEJVVFRPTgkJCQkoMTw8MTYpCisjZGVmaW5lIEZJRUxERkxBR19SQURJT1NJTlVOSVNPTgkJCSgxPDwyNSkKKy8vZm9yIGNob2ljZSBmaWVsZHMKKyNkZWZpbmUgRklFTERGTEFHX0NPTUJPCQkJCQkJKDE8PDE3KQorI2RlZmluZSBGSUVMREZMQUdfRURJVAkJCQkJCSgxPDwxOCkKKyNkZWZpbmUgRklFTERGTEFHX1NPUlQJCQkJCQkoMTw8MTkpCisjZGVmaW5lIEZJRUxERkxBR19NVUxUSVNFTEVDVAkJCQkoMTw8MjEpCisjaWZuZGVmIEZJRUxERkxBR19ET05PVFNQRUxMQ0hFQ0sKKyNkZWZpbmUgRklFTERGTEFHX0RPTk9UU1BFTExDSEVDSwkJKDE8PDIyKQorI2VuZGlmCisjZGVmaW5lIEZJRUxERkxBR19DT01NSVRPTlNFTENIQU5HRQkJCSgxPDwyNikKKworI2RlZmluZSBCQlNfU09MSUQJCQkJCTAKKyNkZWZpbmUgQkJTX0RBU0gJCQkJCTEKKyNkZWZpbmUgQkJTX0JFVkVMRUQJCQkJCTIKKyNkZWZpbmUgQkJTX0lOU0VUCQkJCQkzCisjZGVmaW5lIEJCU19VTkRFUkxJTkUJCQkJNAorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZnBkZnNkay9pbmNsdWRlL2ZzZGtfZGVmaW5lLmggYi9mcGRmc2RrL2luY2x1ZGUvZnNka19kZWZpbmUuaAppbmRleCA1ZjljZGUzLi4yYmY0NzIxIDEwMDY0NAotLS0gYS9mcGRmc2RrL2luY2x1ZGUvZnNka19kZWZpbmUuaAorKysgYi9mcGRmc2RrL2luY2x1ZGUvZnNka19kZWZpbmUuaApAQCAtMSwxMjggKzEsMTI4IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GUERGU0RLX0RFRklORV9IDQotI2RlZmluZSBfRlBERlNES19ERUZJTkVfSA0KLQ0KLSNpZmRlZiBfV0lOMzINCi0jaW5jbHVkZSA8dGNoYXIuaD4NCi0jaW5jbHVkZSA8bWF0aC5oPg0KLSNlbmRpZg0KLQ0KLS8vI2RlZmluZSBBUEk1DQotI2RlZmluZSBBUEk2DQotI2RlZmluZSAgX0ZQREZBUElfQVNZTkNfUEFSU0lOR18NCi0jZGVmaW5lIF9GWFNES19PUEVOU09VUkNFXw0KLQ0KLSNpZmRlZiBfRlBERkVNQl9XQ0VfDQotCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmYXBpLmgiIA0KLQkjaW5jbHVkZSAiLi4vLi4vY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYXJzZXIuaCIgDQotCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX21vZHVsZS5oIiANCi0JI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcmVuZGVyLmgiIA0KLQkjaW5jbHVkZSAiLi4vLi4vY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlb2JqLmgiIA0KLQkjaW5jbHVkZSAiLi4vLi4vY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9zZXJpYWwuaCIgDQotDQotCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnBkZnRleHQvZnBkZl90ZXh0LmgiDQotDQotCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnhnZS9meF9nZV93aW4zMi5oIg0KLQkjaW5jbHVkZSAiLi4vLi4vY29yZS9pbmNsdWRlL2Z4Z2UvZnhfZ2UuaCINCi0NCi0JI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgiDQotDQotCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmRvYy9mcGRmX2RvYy5oIiANCi0JI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmZG9jL2ZwZGZfdnQuaCIgDQotDQotCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnhjcnQvZnhfeG1sLmgiIA0KLQkjaW5jbHVkZSAiLi4vLi4vY29yZS9pbmNsdWRlL2Z4Y3J0L2Z4X2NyeXB0LmgiDQotDQotI2Vsc2UNCi0JI2lmZGVmIEFQSTYNCi0JCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhcnNlci5oIiANCi0JCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmYXBpLmgiIA0KLQkJI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFyc2VyLmgiIA0KLQkJI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfbW9kdWxlLmgiIA0KLQkJI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcmVuZGVyLmgiIA0KLQkJI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZW9iai5oIiANCi0JCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3NlcmlhbC5oIiANCi0NCi0JCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnBkZnRleHQvZnBkZl90ZXh0LmgiDQotDQotCQkjaW5jbHVkZSAiLi4vLi4vY29yZS9pbmNsdWRlL2Z4Z2UvZnhfZ2Vfd2luMzIuaCINCi0JCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnhnZS9meF9nZS5oIg0KLQ0KLQkJI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgiDQotDQotCQkjaW5jbHVkZSAiLi4vLi4vY29yZS9pbmNsdWRlL2ZwZGZkb2MvZnBkZl9kb2MuaCIgDQotCQkjaW5jbHVkZSAiLi4vLi4vY29yZS9pbmNsdWRlL2ZwZGZkb2MvZnBkZl92dC5oIiANCi0NCi0JCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnhjcnQvZnhfeG1sLmgiIA0KLQkvLwkjaW5jbHVkZSAiLi4vLi4vY29yZS9pbmNsdWRlL2Zkcm0vZnhfY3J5cHQuaCINCi0JCSNpZmRlZiBfTElDRU5TRURfQlVJTERfDQotCQkJI2luY2x1ZGUgIi4uLy4uL2NyeXB0b3BwL0NyeXB0bGliLmgiDQotCQkjZW5kaWYNCi0JI2VuZGlmDQotI2VuZGlmDQotDQotDQotI2lmbmRlZiBGWF9HZXRBVmFsdWUNCi0vKiogQGJyaWVmIEl0IHJldHJpZXZlcyBhbiBpbnRlbnNpdHkgdmFsdWUgZm9yIHRoZSBhbHBoYSBjb21wb25lbnQgb2YgYSAjRlhfQVJHQiB2YWx1ZS4gKi8NCi0jZGVmaW5lIEZYX0dldEFWYWx1ZShhcmdiKQkJCSgoYXJnYiAmIDB4RkYwMDAwMDApID4+IDI0KQ0KLSNlbmRpZg0KLQ0KLSNpZm5kZWYgRlhfR2V0UlZhbHVlDQotLyoqIEBicmllZiBJdCByZXRyaWV2ZXMgYW4gaW50ZW5zaXR5IHZhbHVlIGZvciB0aGUgcmVkIGNvbXBvbmVudCBvZiBhICNGWF9BUkdCIHZhbHVlLiAqLw0KLSNkZWZpbmUgRlhfR2V0UlZhbHVlKGFyZ2IpCQkJKChhcmdiICYgMHgwMEZGMDAwMCkgPj4gMTYpDQotI2VuZGlmDQotDQotI2lmbmRlZiBGWF9HZXRHVmFsdWUNCi0vKiogQGJyaWVmIEl0IHJldHJpZXZlcyBhbiBpbnRlbnNpdHkgdmFsdWUgZm9yIHRoZSBncmVlbiBjb21wb25lbnQgb2YgYSAjRlhfQVJHQiB2YWx1ZS4gKi8NCi0jZGVmaW5lIEZYX0dldEdWYWx1ZShhcmdiKQkJCSgoYXJnYiAmIDB4MDAwMEZGMDApID4+IDgpDQotI2VuZGlmDQotDQotI2lmbmRlZiBGWF9HZXRCVmFsdWUNCi0vKiogQGJyaWVmIEl0IHJldHJpZXZlcyBhbiBpbnRlbnNpdHkgdmFsdWUgZm9yIHRoZSBibHVlIGNvbXBvbmVudCBvZiBhICNGWF9BUkdCIHZhbHVlLiAqLw0KLSNkZWZpbmUgRlhfR2V0QlZhbHVlKGFyZ2IpCQkJKGFyZ2IgJiAweDAwMDAwMEZGKQ0KLSNlbmRpZg0KLQ0KLSNpZm5kZWYgRlhfQVJHQlRPQ09MT1JSRUYNCi0vKiogQGJyaWVmIENvbnZlcnQgYSAjRlhfQVJHQiB0byBhICNGWF9DT0xPUlJFRi4gKi8NCi0jZGVmaW5lIEZYX0FSR0JUT0NPTE9SUkVGKGFyZ2IpCQkoKCgoRlhfRFdPUkQpYXJnYiAmIDB4MDBGRjAwMDApID4+IDE2KXwoKEZYX0RXT1JEKWFyZ2IgJiAweDAwMDBGRjAwKXwoKChGWF9EV09SRClhcmdiICYgMHgwMDAwMDBGRikgPDwgMTYpKQ0KLSNlbmRpZg0KLQ0KLSNpZm5kZWYgRlhfQ09MT1JSRUZUT0FSR0INCi0vKiogQGJyaWVmIENvbnZlcnQgYSAjRlhfQ09MT1JSRUYgdG8gYSAjRlhfQVJHQi4gKi8NCi0jZGVmaW5lIEZYX0NPTE9SUkVGVE9BUkdCKHJnYikJCSgoRlhfRFdPUkQpMHhGRjAwMDAwMHwoKChGWF9EV09SRClyZ2IgJiAweDAwMDAwMEZGKSA8PCAxNil8KChGWF9EV09SRClyZ2IgJiAweDAwMDBGRjAwKXwoKChGWF9EV09SRClyZ2IgJiAweDAwRkYwMDAwKSA+PiAxNikpDQotI2VuZGlmDQotDQotdHlwZWRlZiB1bnNpZ25lZCBpbnQgRlhfVUlOVDsJDQotDQotI2luY2x1ZGUgImZwZGZ2aWV3LmgiDQotDQotY2xhc3MgQ1BERl9DdXN0b21BY2Nlc3MgOiBwdWJsaWMgSUZYX0ZpbGVSZWFkLCBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotCUNQREZfQ3VzdG9tQWNjZXNzKEZQREZfRklMRUFDQ0VTUyogcEZpbGVBY2Nlc3MpOw0KLQl+Q1BERl9DdXN0b21BY2Nlc3MoKSB7fQ0KLQ0KLQl2aXJ0dWFsIENGWF9CeXRlU3RyaW5nIEdldEZ1bGxQYXRoKCkgeyByZXR1cm4gIiI7IH0NCi0JdmlydHVhbCBGWF9GSUxFU0laRQlHZXRTaXplKCkgeyByZXR1cm4gbV9GaWxlQWNjZXNzLm1fRmlsZUxlbjsgfQ0KLQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCUdldEJ5dGUoRlhfRFdPUkQgcG9zLCBGWF9CWVRFJiBjaCk7DQotCXZpcnR1YWwgRlhfQk9PTAkJR2V0QmxvY2soRlhfRFdPUkQgcG9zLCBGWF9MUEJZVEUgcEJ1ZiwgRlhfRFdPUkQgc2l6ZSk7DQotCXZpcnR1YWwgdm9pZAkJUmVsZWFzZSgpIHsgZGVsZXRlIHRoaXM7IH0NCi0NCi0JdmlydHVhbCBGWF9CT09MCQlSZWFkQmxvY2sodm9pZCogYnVmZmVyLCBGWF9GSUxFU0laRSBvZmZzZXQsIHNpemVfdCBzaXplKTsNCi0NCi0JRlBERl9GSUxFQUNDRVNTCQltX0ZpbGVBY2Nlc3M7DQotCUZYX0JZVEUJCQkJbV9CdWZmZXJbNTEyXTsNCi0JRlhfRFdPUkQJCQltX0J1ZmZlck9mZnNldDsNCi19Ow0KLQ0KLXZvaWQJCUZTREtfU2V0U2FuZEJveFBvbGljeShGUERGX0RXT1JEIHBvbGljeSwgRlBERl9CT09MIGVuYWJsZSk7DQotRlBERl9CT09MCUZTREtfSXNTYW5kQm94UG9saWN5RW5hYmxlZChGUERGX0RXT1JEIHBvbGljeSk7DQotDQotDQotI2VuZGlmLy9fRlBERlNES19ERUZJTkVfSA0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZQREZTREtfREVGSU5FX0gKKyNkZWZpbmUgX0ZQREZTREtfREVGSU5FX0gKKworI2lmZGVmIF9XSU4zMgorI2luY2x1ZGUgPHRjaGFyLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2VuZGlmCisKKy8vI2RlZmluZSBBUEk1CisjZGVmaW5lIEFQSTYKKyNkZWZpbmUgIF9GUERGQVBJX0FTWU5DX1BBUlNJTkdfCisjZGVmaW5lIF9GWFNES19PUEVOU09VUkNFXworCisjaWZkZWYgX0ZQREZFTUJfV0NFXworCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmYXBpLmgiIAorCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhcnNlci5oIiAKKwkjaW5jbHVkZSAiLi4vLi4vY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCIgCisJI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcmVuZGVyLmgiIAorCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2VvYmouaCIgCisJI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfc2VyaWFsLmgiIAorCisJI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmdGV4dC9mcGRmX3RleHQuaCIKKworCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnhnZS9meF9nZV93aW4zMi5oIgorCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnhnZS9meF9nZS5oIgorCisJI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9meGNvZGVjL2Z4X2NvZGVjLmgiCisKKwkjaW5jbHVkZSAiLi4vLi4vY29yZS9pbmNsdWRlL2ZwZGZkb2MvZnBkZl9kb2MuaCIgCisJI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmZG9jL2ZwZGZfdnQuaCIgCisKKwkjaW5jbHVkZSAiLi4vLi4vY29yZS9pbmNsdWRlL2Z4Y3J0L2Z4X3htbC5oIiAKKwkjaW5jbHVkZSAiLi4vLi4vY29yZS9pbmNsdWRlL2Z4Y3J0L2Z4X2NyeXB0LmgiCisKKyNlbHNlCisJI2lmZGVmIEFQSTYKKwkJI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFyc2VyLmgiIAorCQkjaW5jbHVkZSAiLi4vLi4vY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZmFwaS5oIiAKKwkJI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFyc2VyLmgiIAorCQkjaW5jbHVkZSAiLi4vLi4vY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCIgCisJCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3JlbmRlci5oIiAKKwkJI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcGFnZW9iai5oIiAKKwkJI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfc2VyaWFsLmgiIAorCisJCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnBkZnRleHQvZnBkZl90ZXh0LmgiCisKKwkJI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9meGdlL2Z4X2dlX3dpbjMyLmgiCisJCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnhnZS9meF9nZS5oIgorCisJCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnhjb2RlYy9meF9jb2RlYy5oIgorCisJCSNpbmNsdWRlICIuLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmRvYy9mcGRmX2RvYy5oIiAKKwkJI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmZG9jL2ZwZGZfdnQuaCIgCisKKwkJI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9meGNydC9meF94bWwuaCIgCisJLy8JI2luY2x1ZGUgIi4uLy4uL2NvcmUvaW5jbHVkZS9mZHJtL2Z4X2NyeXB0LmgiCisJCSNpZmRlZiBfTElDRU5TRURfQlVJTERfCisJCQkjaW5jbHVkZSAiLi4vLi4vY3J5cHRvcHAvQ3J5cHRsaWIuaCIKKwkJI2VuZGlmCisJI2VuZGlmCisjZW5kaWYKKworCisjaWZuZGVmIEZYX0dldEFWYWx1ZQorLyoqIEBicmllZiBJdCByZXRyaWV2ZXMgYW4gaW50ZW5zaXR5IHZhbHVlIGZvciB0aGUgYWxwaGEgY29tcG9uZW50IG9mIGEgI0ZYX0FSR0IgdmFsdWUuICovCisjZGVmaW5lIEZYX0dldEFWYWx1ZShhcmdiKQkJCSgoYXJnYiAmIDB4RkYwMDAwMDApID4+IDI0KQorI2VuZGlmCisKKyNpZm5kZWYgRlhfR2V0UlZhbHVlCisvKiogQGJyaWVmIEl0IHJldHJpZXZlcyBhbiBpbnRlbnNpdHkgdmFsdWUgZm9yIHRoZSByZWQgY29tcG9uZW50IG9mIGEgI0ZYX0FSR0IgdmFsdWUuICovCisjZGVmaW5lIEZYX0dldFJWYWx1ZShhcmdiKQkJCSgoYXJnYiAmIDB4MDBGRjAwMDApID4+IDE2KQorI2VuZGlmCisKKyNpZm5kZWYgRlhfR2V0R1ZhbHVlCisvKiogQGJyaWVmIEl0IHJldHJpZXZlcyBhbiBpbnRlbnNpdHkgdmFsdWUgZm9yIHRoZSBncmVlbiBjb21wb25lbnQgb2YgYSAjRlhfQVJHQiB2YWx1ZS4gKi8KKyNkZWZpbmUgRlhfR2V0R1ZhbHVlKGFyZ2IpCQkJKChhcmdiICYgMHgwMDAwRkYwMCkgPj4gOCkKKyNlbmRpZgorCisjaWZuZGVmIEZYX0dldEJWYWx1ZQorLyoqIEBicmllZiBJdCByZXRyaWV2ZXMgYW4gaW50ZW5zaXR5IHZhbHVlIGZvciB0aGUgYmx1ZSBjb21wb25lbnQgb2YgYSAjRlhfQVJHQiB2YWx1ZS4gKi8KKyNkZWZpbmUgRlhfR2V0QlZhbHVlKGFyZ2IpCQkJKGFyZ2IgJiAweDAwMDAwMEZGKQorI2VuZGlmCisKKyNpZm5kZWYgRlhfQVJHQlRPQ09MT1JSRUYKKy8qKiBAYnJpZWYgQ29udmVydCBhICNGWF9BUkdCIHRvIGEgI0ZYX0NPTE9SUkVGLiAqLworI2RlZmluZSBGWF9BUkdCVE9DT0xPUlJFRihhcmdiKQkJKCgoKEZYX0RXT1JEKWFyZ2IgJiAweDAwRkYwMDAwKSA+PiAxNil8KChGWF9EV09SRClhcmdiICYgMHgwMDAwRkYwMCl8KCgoRlhfRFdPUkQpYXJnYiAmIDB4MDAwMDAwRkYpIDw8IDE2KSkKKyNlbmRpZgorCisjaWZuZGVmIEZYX0NPTE9SUkVGVE9BUkdCCisvKiogQGJyaWVmIENvbnZlcnQgYSAjRlhfQ09MT1JSRUYgdG8gYSAjRlhfQVJHQi4gKi8KKyNkZWZpbmUgRlhfQ09MT1JSRUZUT0FSR0IocmdiKQkJKChGWF9EV09SRCkweEZGMDAwMDAwfCgoKEZYX0RXT1JEKXJnYiAmIDB4MDAwMDAwRkYpIDw8IDE2KXwoKEZYX0RXT1JEKXJnYiAmIDB4MDAwMEZGMDApfCgoKEZYX0RXT1JEKXJnYiAmIDB4MDBGRjAwMDApID4+IDE2KSkKKyNlbmRpZgorCit0eXBlZGVmIHVuc2lnbmVkIGludCBGWF9VSU5UOwkKKworI2luY2x1ZGUgImZwZGZ2aWV3LmgiCisKK2NsYXNzIENQREZfQ3VzdG9tQWNjZXNzIDogcHVibGljIElGWF9GaWxlUmVhZCwgcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKwlDUERGX0N1c3RvbUFjY2VzcyhGUERGX0ZJTEVBQ0NFU1MqIHBGaWxlQWNjZXNzKTsKKwl+Q1BERl9DdXN0b21BY2Nlc3MoKSB7fQorCisJdmlydHVhbCBDRlhfQnl0ZVN0cmluZyBHZXRGdWxsUGF0aCgpIHsgcmV0dXJuICIiOyB9CisJdmlydHVhbCBGWF9GSUxFU0laRQlHZXRTaXplKCkgeyByZXR1cm4gbV9GaWxlQWNjZXNzLm1fRmlsZUxlbjsgfQorCisJdmlydHVhbCBGWF9CT09MCQlHZXRCeXRlKEZYX0RXT1JEIHBvcywgRlhfQllURSYgY2gpOworCXZpcnR1YWwgRlhfQk9PTAkJR2V0QmxvY2soRlhfRFdPUkQgcG9zLCBGWF9MUEJZVEUgcEJ1ZiwgRlhfRFdPUkQgc2l6ZSk7CisJdmlydHVhbCB2b2lkCQlSZWxlYXNlKCkgeyBkZWxldGUgdGhpczsgfQorCisJdmlydHVhbCBGWF9CT09MCQlSZWFkQmxvY2sodm9pZCogYnVmZmVyLCBGWF9GSUxFU0laRSBvZmZzZXQsIHNpemVfdCBzaXplKTsKKworCUZQREZfRklMRUFDQ0VTUwkJbV9GaWxlQWNjZXNzOworCUZYX0JZVEUJCQkJbV9CdWZmZXJbNTEyXTsKKwlGWF9EV09SRAkJCW1fQnVmZmVyT2Zmc2V0OworfTsKKwordm9pZAkJRlNES19TZXRTYW5kQm94UG9saWN5KEZQREZfRFdPUkQgcG9saWN5LCBGUERGX0JPT0wgZW5hYmxlKTsKK0ZQREZfQk9PTAlGU0RLX0lzU2FuZEJveFBvbGljeUVuYWJsZWQoRlBERl9EV09SRCBwb2xpY3kpOworCisKKyNlbmRpZi8vX0ZQREZTREtfREVGSU5FX0gKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9mc2RrX21nci5oIGIvZnBkZnNkay9pbmNsdWRlL2ZzZGtfbWdyLmgKaW5kZXggOTkzM2M0MS4uYmIyNWIzNSAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2ZzZGtfbWdyLmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2ZzZGtfbWdyLmgKQEAgLTEsNjE1ICsxLDYxNSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlBERlNES19NR1JfSA0KLSNkZWZpbmUgX0ZQREZTREtfTUdSX0gNCi0NCi0jaW5jbHVkZSAiZnNka19jb21tb24uaCINCi0jaW5jbHVkZSAiZnNka19kZWZpbmUuaCINCi0jaW5jbHVkZSAiZnhfc3lzdGVtaGFuZGxlci5oIg0KLSNpbmNsdWRlICJmc2RrX2Jhc2Vhbm5vdC5oIg0KLSNpbmNsdWRlICJmc2RrX2Jhc2Vmb3JtLmgiDQotI2luY2x1ZGUgImZwZGZmb3JtZmlsbC5oIg0KLSNpbmNsdWRlICJmc2RrX2Fubm90aGFuZGxlci5oIg0KLSNpbmNsdWRlICJmc2RrX2FjdGlvbmhhbmRsZXIuaCINCi0NCi0vL2Nyb3NzIHBsYXRmb3JtIGtleWNvZGUgYW5kIGV2ZW50cyBkZWZpbmUuDQotI2luY2x1ZGUgImZwZGZfZndsZXZlbnQuaCINCi0NCi0NCi1jbGFzcyBDUERGU0RLX0RvY3VtZW50Ow0KLWNsYXNzIENQREZTREtfUGFnZVZpZXc7DQotY2xhc3MgQ1BERlNES19Bbm5vdDsNCi1jbGFzcyBDRkZMX0lGb3JtRmlsbGVyOw0KLWNsYXNzIENQREZTREtfV2lkZ2V0Ow0KLWNsYXNzIElGWF9TeXN0ZW1IYW5kbGVyOw0KLWNsYXNzIENQREZTREtfQWN0aW9uSGFuZGxlcjsNCi1jbGFzcyBDSlNfUnVudGltZUZhY3Rvcnk7DQotDQotI2luY2x1ZGUgImphdmFzY3JpcHQvSUphdmFTY3JpcHQuaCINCi0NCi1jbGFzcyBDUERGRG9jX0Vudmlyb25tZW50DQotew0KLXB1YmxpYzoNCi0JQ1BERkRvY19FbnZpcm9ubWVudChDUERGX0RvY3VtZW50ICogcERvYyk7DQotCX5DUERGRG9jX0Vudmlyb25tZW50KCk7DQotDQotCWludCBSZWdBcHBIYW5kbGUoRlBERl9GT1JNRklMTElORk8qIHBGRmluZm8pOy8veyBtX3BJbmZvICA9IHBGRmluZm87IHJldHVybiBUUlVFO30NCi0NCi0JdmlydHVhbCB2b2lkCQlSZWxlYXNlKCkNCi0Jew0KLQkJaWYgKG1fcEluZm8gJiYgbV9wSW5mby0+UmVsZWFzZSkNCi0JCQltX3BJbmZvLT5SZWxlYXNlKG1fcEluZm8pOw0KLQkJZGVsZXRlIHRoaXM7DQotCX0NCi0NCi0JdmlydHVhbCB2b2lkIEZGSV9JbnZhbGlkYXRlKEZQREZfUEFHRSBwYWdlLCBkb3VibGUgbGVmdCwgZG91YmxlIHRvcCwgZG91YmxlIHJpZ2h0LCBkb3VibGUgYm90dG9tKQ0KLQl7DQotCQlpZiAobV9wSW5mbyAmJiBtX3BJbmZvLT5GRklfSW52YWxpZGF0ZSkgDQotCQl7DQotCQkJbV9wSW5mby0+RkZJX0ludmFsaWRhdGUobV9wSW5mbywgcGFnZSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsNCi0JCX0NCi0JfQ0KLQl2aXJ0dWFsIHZvaWQgRkZJX091dHB1dFNlbGVjdGVkUmVjdChGUERGX1BBR0UgcGFnZSwgZG91YmxlIGxlZnQsIGRvdWJsZSB0b3AsIGRvdWJsZSByaWdodCwgZG91YmxlIGJvdHRvbSkNCi0Jew0KLQkJaWYgKG1fcEluZm8gJiYgbV9wSW5mby0+RkZJX091dHB1dFNlbGVjdGVkUmVjdCkgDQotCQl7DQotCQkJbV9wSW5mby0+RkZJX091dHB1dFNlbGVjdGVkUmVjdChtX3BJbmZvLCBwYWdlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOw0KLQkJfQ0KLQl9DQotDQotCXZpcnR1YWwgdm9pZCBGRklfU2V0Q3Vyc29yKGludCBuQ3Vyc29yVHlwZSkNCi0Jew0KLQkJaWYgKG1fcEluZm8gJiYgbV9wSW5mby0+RkZJX1NldEN1cnNvcikgDQotCQl7DQotCQkJbV9wSW5mby0+RkZJX1NldEN1cnNvcihtX3BJbmZvLCBuQ3Vyc29yVHlwZSk7DQotCQl9DQotCX0NCi0NCi0JdmlydHVhbAlpbnQgIEZGSV9TZXRUaW1lcihpbnQgdUVsYXBzZSwgVGltZXJDYWxsYmFjayBscFRpbWVyRnVuYykNCi0Jew0KLQkJaWYgKG1fcEluZm8gJiYgbV9wSW5mby0+RkZJX1NldFRpbWVyKSANCi0JCXsNCi0JCQlyZXR1cm4gbV9wSW5mby0+RkZJX1NldFRpbWVyKG1fcEluZm8sIHVFbGFwc2UsIGxwVGltZXJGdW5jKTsNCi0JCX0NCi0JCXJldHVybiAtMTsNCi0JfQ0KLQkJDQotCXZpcnR1YWwgdm9pZCBGRklfS2lsbFRpbWVyKGludCBuVGltZXJJRCkNCi0Jew0KLQkJaWYgKG1fcEluZm8gJiYgbV9wSW5mby0+RkZJX0tpbGxUaW1lcikgDQotCQl7DQotCQkJbV9wSW5mby0+RkZJX0tpbGxUaW1lcihtX3BJbmZvLCBuVGltZXJJRCk7DQotCQl9DQotCX0NCi0JRlhfU1lTVEVNVElNRSBGRklfR2V0TG9jYWxUaW1lKCkNCi0Jew0KLQkJRlhfU1lTVEVNVElNRSBmeHRpbWU7DQotCQlpZihtX3BJbmZvICYmIG1fcEluZm8tPkZGSV9HZXRMb2NhbFRpbWUpDQotCQl7DQotCQkJRlBERl9TWVNURU1USU1FIHN5c3RpbWUgPSBtX3BJbmZvLT5GRklfR2V0TG9jYWxUaW1lKG1fcEluZm8pOw0KLQkJCWZ4dGltZS53RGF5ID0gc3lzdGltZS53RGF5Ow0KLQkJCWZ4dGltZS53RGF5T2ZXZWVrID0gc3lzdGltZS53RGF5T2ZXZWVrOw0KLQkJCWZ4dGltZS53SG91ciA9IHN5c3RpbWUud0hvdXI7DQotCQkJZnh0aW1lLndNaWxsaXNlY29uZHMgPSBzeXN0aW1lLndNaWxsaXNlY29uZHM7DQotCQkJZnh0aW1lLndNaW51dGUgPSBzeXN0aW1lLndNaW51dGU7DQotCQkJZnh0aW1lLndNb250aCA9IHN5c3RpbWUud01vbnRoOw0KLQkJCWZ4dGltZS53U2Vjb25kID0gc3lzdGltZS53U2Vjb25kOw0KLQkJCWZ4dGltZS53WWVhciA9IHN5c3RpbWUud1llYXI7DQotCQl9DQotCQlyZXR1cm4gZnh0aW1lOw0KLQl9DQotDQotCXZpcnR1YWwgdm9pZCBGRklfT25DaGFuZ2UoKQ0KLQl7DQotCQlpZihtX3BJbmZvICYmIG1fcEluZm8tPkZGSV9PbkNoYW5nZSkNCi0JCXsNCi0JCQltX3BJbmZvLT5GRklfT25DaGFuZ2UobV9wSW5mbyk7DQotCQl9DQotCX0NCi0NCi0JdmlydHVhbAlGWF9CT09MCUZGSV9Jc1NISUZUS2V5RG93bihGWF9EV09SRCBuRmxhZykNCi0Jew0KLQkJDQotCQlyZXR1cm4gKG5GbGFnICYgRldMX0VWRU5URkxBR19TaGlmdEtleSkgIT0gMDsNCi0JfQ0KLQl2aXJ0dWFsCUZYX0JPT0wJRkZJX0lzQ1RSTEtleURvd24oRlhfRFdPUkQgbkZsYWcpDQotCXsNCi0NCi0JCXJldHVybiAobkZsYWcgJiBGV0xfRVZFTlRGTEFHX0NvbnRyb2xLZXkpICE9IDA7DQotCX0NCi0JdmlydHVhbAlGWF9CT09MCUZGSV9Jc0FMVEtleURvd24oRlhfRFdPUkQgbkZsYWcpDQotCXsNCi0NCi0JCXJldHVybiAobkZsYWcgJiBGV0xfRVZFTlRGTEFHX0FsdEtleSkgIT0gMDsNCi0JfQ0KLQl2aXJ0dWFsCUZYX0JPT0wJRkZJX0lzSU5TRVJUS2V5RG93bihGWF9EV09SRCBuRmxhZykNCi0Jew0KLQkJcmV0dXJuIEZBTFNFOw0KLQl9DQotDQotCXZpcnR1YWwgaW50IEpTX2FwcEFsZXJ0KEZYX0xQQ1dTVFIgTXNnLCBGWF9MUENXU1RSIFRpdGxlLCBGWF9VSU5UIFR5cGUsIEZYX1VJTlQgSWNvbikNCi0Jew0KLQkJaWYobV9wSW5mbyAmJiBtX3BJbmZvLT5tX3BKc1BsYXRmb3JtICYmIG1fcEluZm8tPm1fcEpzUGxhdGZvcm0tPmFwcF9hbGVydCkNCi0JCXsNCi0JCQlDRlhfQnl0ZVN0cmluZyBic01zZyA9IENGWF9XaWRlU3RyaW5nKE1zZykuVVRGMTZMRV9FbmNvZGUoKTsNCi0JCQlDRlhfQnl0ZVN0cmluZyBic1RpdGxlID0gQ0ZYX1dpZGVTdHJpbmcoVGl0bGUpLlVURjE2TEVfRW5jb2RlKCk7DQotCQkJRlBERl9XSURFU1RSSU5HIHBNc2cgPSAoRlBERl9XSURFU1RSSU5HKWJzTXNnLkdldEJ1ZmZlcihic01zZy5HZXRMZW5ndGgoKSk7DQotCQkJRlBERl9XSURFU1RSSU5HIHBUaXRsZSA9IChGUERGX1dJREVTVFJJTkcpYnNUaXRsZS5HZXRCdWZmZXIoYnNUaXRsZS5HZXRMZW5ndGgoKSk7DQotCQkJaW50IHJldCA9IG1fcEluZm8tPm1fcEpzUGxhdGZvcm0tPmFwcF9hbGVydChtX3BJbmZvLT5tX3BKc1BsYXRmb3JtLCBwTXNnLCBwVGl0bGUsIFR5cGUsIEljb24pOw0KLQkJCWJzTXNnLlJlbGVhc2VCdWZmZXIoKTsNCi0JCQlic1RpdGxlLlJlbGVhc2VCdWZmZXIoKTsNCi0JCQlyZXR1cm4gcmV0Ow0KLQkJfQ0KLQkJcmV0dXJuIC0xOw0KLQl9DQotDQotCXZpcnR1YWwgaW50IEpTX2FwcFJlc3BvbnNlKEZYX0xQQ1dTVFIgUXVlc3Rpb24sIEZYX0xQQ1dTVFIgVGl0bGUsIEZYX0xQQ1dTVFIgRGVmYXVsdCwgRlhfTFBDV1NUUiBjTGFiZWwsIEZQREZfQk9PTCBiUGFzc3dvcmQsIHZvaWQqIHJlc3BvbnNlLCBpbnQgbGVuZ3RoKQ0KLQl7DQotCQlpZiAobV9wSW5mbyAmJiBtX3BJbmZvLT5tX3BKc1BsYXRmb3JtICYmIG1fcEluZm8tPm1fcEpzUGxhdGZvcm0tPmFwcF9yZXNwb25zZSkNCi0JCXsNCi0JCQlDRlhfQnl0ZVN0cmluZyBic1F1ZXN0aW9uID0gQ0ZYX1dpZGVTdHJpbmcoUXVlc3Rpb24pLlVURjE2TEVfRW5jb2RlKCk7DQotCQkJQ0ZYX0J5dGVTdHJpbmcgYnNUaXRsZSA9IENGWF9XaWRlU3RyaW5nKFRpdGxlKS5VVEYxNkxFX0VuY29kZSgpOw0KLQkJCUNGWF9CeXRlU3RyaW5nIGJzRGVmYXVsdCA9IENGWF9XaWRlU3RyaW5nKERlZmF1bHQpLlVURjE2TEVfRW5jb2RlKCk7DQotCQkJQ0ZYX0J5dGVTdHJpbmcgYnNMYWJlbCA9IENGWF9XaWRlU3RyaW5nKGNMYWJlbCkuVVRGMTZMRV9FbmNvZGUoKTsNCi0JCQlGUERGX1dJREVTVFJJTkcgcFF1ZXN0aW9uID0gKEZQREZfV0lERVNUUklORylic1F1ZXN0aW9uLkdldEJ1ZmZlcihic1F1ZXN0aW9uLkdldExlbmd0aCgpKTsNCi0JCQlGUERGX1dJREVTVFJJTkcgcFRpdGxlID0gKEZQREZfV0lERVNUUklORylic1RpdGxlLkdldEJ1ZmZlcihic1RpdGxlLkdldExlbmd0aCgpKTsNCi0JCQlGUERGX1dJREVTVFJJTkcgcERlZmF1bHQgPSAoRlBERl9XSURFU1RSSU5HKWJzRGVmYXVsdC5HZXRCdWZmZXIoYnNEZWZhdWx0LkdldExlbmd0aCgpKTsNCi0JCQlGUERGX1dJREVTVFJJTkcgcExhYmVsID0gKEZQREZfV0lERVNUUklORylic0xhYmVsLkdldEJ1ZmZlcihic0xhYmVsLkdldExlbmd0aCgpKTsNCi0JCQlpbnQgcmV0ID0gbV9wSW5mby0+bV9wSnNQbGF0Zm9ybS0+YXBwX3Jlc3BvbnNlKG1fcEluZm8tPm1fcEpzUGxhdGZvcm0sIHBRdWVzdGlvbiwgcFRpdGxlLCANCi0JCQkJcERlZmF1bHQsIHBMYWJlbCwgYlBhc3N3b3JkLCByZXNwb25zZSwgbGVuZ3RoKTsNCi0JCQlic1F1ZXN0aW9uLlJlbGVhc2VCdWZmZXIoKTsNCi0JCQlic1RpdGxlLlJlbGVhc2VCdWZmZXIoKTsNCi0JCQlic0RlZmF1bHQuUmVsZWFzZUJ1ZmZlcigpOw0KLQkJCWJzTGFiZWwuUmVsZWFzZUJ1ZmZlcigpOw0KLQkJCXJldHVybiByZXQ7DQotCQl9DQotCQlyZXR1cm4gLTE7DQotCX0NCi0NCi0JdmlydHVhbCB2b2lkIEpTX2FwcEJlZXAoaW50IG5UeXBlKQ0KLQl7DQotCQlpZihtX3BJbmZvICYmIG1fcEluZm8tPm1fcEpzUGxhdGZvcm0gJiYgbV9wSW5mby0+bV9wSnNQbGF0Zm9ybS0+YXBwX2JlZXApDQotCQl7DQotCQkJbV9wSW5mby0+bV9wSnNQbGF0Zm9ybS0+YXBwX2JlZXAobV9wSW5mby0+bV9wSnNQbGF0Zm9ybSwgblR5cGUpOw0KLQkJfQ0KLQl9DQotDQotCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcgSlNfZmllbGRCcm93c2UoKQ0KLQl7DQotCQlpZihtX3BJbmZvICYmIG1fcEluZm8tPm1fcEpzUGxhdGZvcm0gJiYgbV9wSW5mby0+bV9wSnNQbGF0Zm9ybS0+RmllbGRfYnJvd3NlKQ0KLQkJew0KLQkJCWludCBuTGVuID0gbV9wSW5mby0+bV9wSnNQbGF0Zm9ybS0+RmllbGRfYnJvd3NlKG1fcEluZm8tPm1fcEpzUGxhdGZvcm0sIE5VTEwsIDApOw0KLQkJCWlmKG5MZW4gPD0gMCkNCi0JCQkJcmV0dXJuIEwiIjsNCi0JCQljaGFyKiBwYnVmZiA9IG5ldyBjaGFyW25MZW5dOw0KLQkJCWlmKHBidWZmKQ0KLQkJCQltZW1zZXQocGJ1ZmYsIDAsIG5MZW4pOw0KLQkJCWVsc2UJDQotCQkJCXJldHVybiBMIiI7DQotCQkJbkxlbiA9IG1fcEluZm8tPm1fcEpzUGxhdGZvcm0tPkZpZWxkX2Jyb3dzZShtX3BJbmZvLT5tX3BKc1BsYXRmb3JtLCBwYnVmZiwgbkxlbik7DQotCQkJQ0ZYX0J5dGVTdHJpbmcgYnNSZXQgPSBDRlhfQnl0ZVN0cmluZyhwYnVmZiwgbkxlbik7DQotCQkJQ0ZYX1dpZGVTdHJpbmcgd3NSZXQgPSBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKGJzUmV0KTsNCi0JCQlkZWxldGVbXSBwYnVmZjsNCi0JCQlyZXR1cm4gd3NSZXQ7DQotCQl9DQotCQlyZXR1cm4gTCIiOw0KLQl9DQotDQotCUNGWF9XaWRlU3RyaW5nIEpTX2RvY0dldEZpbGVQYXRoKCkNCi0JewkJDQotCQlpZihtX3BJbmZvICYmIG1fcEluZm8tPm1fcEpzUGxhdGZvcm0gJiYgbV9wSW5mby0+bV9wSnNQbGF0Zm9ybS0+RG9jX2dldEZpbGVQYXRoKQ0KLQkJew0KLQkJCWludCBuTGVuID0gbV9wSW5mby0+bV9wSnNQbGF0Zm9ybS0+RG9jX2dldEZpbGVQYXRoKG1fcEluZm8tPm1fcEpzUGxhdGZvcm0sIE5VTEwsIDApOw0KLQkJCWlmKG5MZW4gPD0gMCkNCi0JCQkJcmV0dXJuIEwiIjsNCi0JCQljaGFyKiBwYnVmZiA9IG5ldyBjaGFyW25MZW5dOw0KLQkJCWlmKHBidWZmKQ0KLQkJCQltZW1zZXQocGJ1ZmYsIDAsIG5MZW4pOw0KLQkJCWVsc2UNCi0JCQkJcmV0dXJuIEwiIjsNCi0JCQluTGVuID0gbV9wSW5mby0+bV9wSnNQbGF0Zm9ybS0+RG9jX2dldEZpbGVQYXRoKG1fcEluZm8tPm1fcEpzUGxhdGZvcm0sIHBidWZmLCBuTGVuKTsNCi0JCQlDRlhfQnl0ZVN0cmluZyBic1JldCA9IENGWF9CeXRlU3RyaW5nKHBidWZmLCBuTGVuKTsNCi0JCQlDRlhfV2lkZVN0cmluZyB3c1JldCA9IENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoYnNSZXQpOw0KLQkJCWRlbGV0ZVtdIHBidWZmOw0KLQkJCXJldHVybiB3c1JldDsNCi0JCX0NCi0JCXJldHVybiBMIiI7DQotCX0NCi0NCi0Jdm9pZCBKU19kb2NTdWJtaXRGb3JtKHZvaWQqIGZvcm1EYXRhLCBpbnQgbGVuZ3RoLCBGWF9MUENXU1RSIFVSTCkNCi0Jew0KLQkJaWYobV9wSW5mbyAmJiBtX3BJbmZvLT5tX3BKc1BsYXRmb3JtICYmIG1fcEluZm8tPm1fcEpzUGxhdGZvcm0tPkRvY19zdWJtaXRGb3JtKQ0KLQkJew0KLQkJCUNGWF9CeXRlU3RyaW5nIGJzRGVzdGluYXRpb24gPSBDRlhfV2lkZVN0cmluZyhVUkwpLlVURjE2TEVfRW5jb2RlKCk7DQotCQkJRlBERl9XSURFU1RSSU5HIHBEZXN0aW5hdGlvbiA9IChGUERGX1dJREVTVFJJTkcpYnNEZXN0aW5hdGlvbi5HZXRCdWZmZXIoYnNEZXN0aW5hdGlvbi5HZXRMZW5ndGgoKSk7DQotCQkJbV9wSW5mby0+bV9wSnNQbGF0Zm9ybS0+RG9jX3N1Ym1pdEZvcm0obV9wSW5mby0+bV9wSnNQbGF0Zm9ybSwgZm9ybURhdGEsIGxlbmd0aCwgcERlc3RpbmF0aW9uKTsNCi0JCQlic0Rlc3RpbmF0aW9uLlJlbGVhc2VCdWZmZXIoKTsNCi0JCX0NCi0JfQ0KLQ0KLQl2b2lkIEpTX2RvY21haWxGb3JtKHZvaWQqIG1haWxEYXRhLCBpbnQgbGVuZ3RoLCBGUERGX0JPT0wgYlVJLEZYX0xQQ1dTVFIgVG8sIEZYX0xQQ1dTVFIgU3ViamVjdCwgRlhfTFBDV1NUUiBDQywgRlhfTFBDV1NUUiBCQ0MsIEZYX0xQQ1dTVFIgTXNnKQ0KLQl7DQotCQlpZihtX3BJbmZvICYmIG1fcEluZm8tPm1fcEpzUGxhdGZvcm0gJiYgbV9wSW5mby0+bV9wSnNQbGF0Zm9ybS0+RG9jX21haWwpDQotCQl7DQotCQkJQ0ZYX0J5dGVTdHJpbmcgYnNUbyA9IENGWF9XaWRlU3RyaW5nKFRvKS5VVEYxNkxFX0VuY29kZSgpOw0KLQkJCUNGWF9CeXRlU3RyaW5nIGJzQ0MgPSBDRlhfV2lkZVN0cmluZyhTdWJqZWN0KS5VVEYxNkxFX0VuY29kZSgpOw0KLQkJCUNGWF9CeXRlU3RyaW5nIGJzQmNjID0gQ0ZYX1dpZGVTdHJpbmcoQkNDKS5VVEYxNkxFX0VuY29kZSgpOw0KLQkJCUNGWF9CeXRlU3RyaW5nIGJzU3ViamVjdCA9IENGWF9XaWRlU3RyaW5nKFN1YmplY3QpLlVURjE2TEVfRW5jb2RlKCk7DQotCQkJQ0ZYX0J5dGVTdHJpbmcgYnNNc2cgPSBDRlhfV2lkZVN0cmluZyhNc2cpLlVURjE2TEVfRW5jb2RlKCk7DQotCQkJRlBERl9XSURFU1RSSU5HIHBUbyA9IChGUERGX1dJREVTVFJJTkcpYnNUby5HZXRCdWZmZXIoYnNUby5HZXRMZW5ndGgoKSk7DQotCQkJRlBERl9XSURFU1RSSU5HIHBDQyA9IChGUERGX1dJREVTVFJJTkcpYnNDQy5HZXRCdWZmZXIoYnNDQy5HZXRMZW5ndGgoKSk7DQotCQkJRlBERl9XSURFU1RSSU5HIHBCY2MgPSAoRlBERl9XSURFU1RSSU5HKWJzQmNjLkdldEJ1ZmZlcihic0JjYy5HZXRMZW5ndGgoKSk7DQotCQkJRlBERl9XSURFU1RSSU5HIHBTdWJqZWN0ID0gKEZQREZfV0lERVNUUklORylic1N1YmplY3QuR2V0QnVmZmVyKGJzU3ViamVjdC5HZXRMZW5ndGgoKSk7DQotCQkJRlBERl9XSURFU1RSSU5HIHBNc2cgPSAoRlBERl9XSURFU1RSSU5HKWJzTXNnLkdldEJ1ZmZlcihic01zZy5HZXRMZW5ndGgoKSk7DQotCQkJbV9wSW5mby0+bV9wSnNQbGF0Zm9ybS0+RG9jX21haWwobV9wSW5mby0+bV9wSnNQbGF0Zm9ybSwgbWFpbERhdGEsIGxlbmd0aCwgYlVJLCBwVG8sIHBTdWJqZWN0LA0KLQkJCQlwQ0MsIHBCY2MsIHBNc2cpOw0KLQkJCWJzVG8uUmVsZWFzZUJ1ZmZlcigpOw0KLQkJCWJzQ0MuUmVsZWFzZUJ1ZmZlcigpOw0KLQkJCWJzQmNjLlJlbGVhc2VCdWZmZXIoKTsNCi0JCQlic1N1YmplY3QuUmVsZWFzZUJ1ZmZlcigpOw0KLQkJCWJzTXNnLlJlbGVhc2VCdWZmZXIoKTsNCi0JCX0NCi0JfQ0KLQlDRlhfV2lkZVN0cmluZyBKU19hcHBicm93c2VGb3JEb2MoRlBERl9CT09MIGJTYXZlLCBGWF9MUENXU1RSIGNGaWxlbmFtZUluaXQpDQotCXsNCi0JCS8vdG8gZG8uLi4uDQotCQlyZXR1cm4gTCIiOw0KLS8vIAkJaWYobV9wSW5mbyAmJiBtX3BJbmZvLT5tX3BKc1BsYXRmb3JtICYmIG1fcEluZm8tPm1fcEpzUGxhdGZvcm0tPmFwcF9icm93c2VGb3JEb2MpDQotLy8gCQl7DQotLy8gCQkJQ0ZYX0J5dGVTdHJpbmcgYnNGaWxlbmFtZUluaXQgPSBDRlhfV2lkZVN0cmluZyhjRmlsZW5hbWVJbml0KS5VVEYxNkxFX0VuY29kZSgpOw0KLS8vIAkJCUZQREZfV0lERVNUUklORyBwRmlsZU5hbWVJbml0ID0gKEZQREZfV0lERVNUUklORylic0ZpbGVuYW1lSW5pdC5HZXRCdWZmZXIoYnNGaWxlbmFtZUluaXQuR2V0TGVuZ3RoKCkpOw0KLS8vIA0KLS8vIAkJCW1fcEluZm8tPm1fcEpzUGxhdGZvcm0tPmFwcF9icm93c2VGb3JEb2MobV9wSW5mby0+bV9wSnNQbGF0Zm9ybSwgcEZpbGVOYW1lSW5pdCk7DQotLy8gCQkJYnNGaWxlbmFtZUluaXQuUmVsZWFzZUJ1ZmZlcigpOw0KLS8vIAkJfQ0KLQl9DQotDQotCXZvaWQgSlNfZG9jcHJpbnQoRlBERl9CT09MIGJVSSAsIGludCBuU3RhcnQsIGludCBuRW5kLCBGUERGX0JPT0wgYlNpbGVudCAsRlBERl9CT09MIGJTaHJpbmtUb0ZpdCxGUERGX0JPT0wgYlByaW50QXNJbWFnZSAsRlBERl9CT09MIGJSZXZlcnNlICxGUERGX0JPT0wgYkFubm90YXRpb25zKQ0KLQl7DQotCQlpZihtX3BJbmZvICYmIG1fcEluZm8tPm1fcEpzUGxhdGZvcm0gJiYgbV9wSW5mby0+bV9wSnNQbGF0Zm9ybS0+RG9jX3ByaW50KQ0KLQkJew0KLQkJCW1fcEluZm8tPm1fcEpzUGxhdGZvcm0tPkRvY19wcmludChtX3BJbmZvLT5tX3BKc1BsYXRmb3JtLCBiVUksIG5TdGFydCwgbkVuZCwgYlNpbGVudCwgYlNocmlua1RvRml0LCBiUHJpbnRBc0ltYWdlLCBiUmV2ZXJzZSwgYkFubm90YXRpb25zKTsNCi0JCX0NCi0JfQ0KLQl2b2lkIEpTX2RvY2dvdG9QYWdlKGludCBuUGFnZU51bSkNCi0Jew0KLQkJaWYobV9wSW5mbyAmJiBtX3BJbmZvLT5tX3BKc1BsYXRmb3JtICYmIG1fcEluZm8tPm1fcEpzUGxhdGZvcm0tPkRvY19nb3RvUGFnZSkNCi0JCXsNCi0JCQltX3BJbmZvLT5tX3BKc1BsYXRmb3JtLT5Eb2NfZ290b1BhZ2UobV9wSW5mby0+bV9wSnNQbGF0Zm9ybSwgblBhZ2VOdW0pOw0KLQkJfQ0KLQl9DQotDQotCXZpcnR1YWwgRlBERl9QQUdFCUZGSV9HZXRQYWdlKEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsaW50IG5QYWdlSW5kZXgpDQotCXsNCi0JCWlmKG1fcEluZm8gJiYgbV9wSW5mby0+RkZJX0dldFBhZ2UpDQotCQl7DQotCQkJcmV0dXJuIG1fcEluZm8tPkZGSV9HZXRQYWdlKG1fcEluZm8sIGRvY3VtZW50LCBuUGFnZUluZGV4KTsNCi0JCX0NCi0JCXJldHVybiBOVUxMOw0KLQl9DQotDQotCXZpcnR1YWwgRlBERl9QQUdFIEZGSV9HZXRDdXJyZW50UGFnZShGUERGX0RPQ1VNRU5UIGRvY3VtZW50KQ0KLQl7DQotCQlpZihtX3BJbmZvICYmIG1fcEluZm8tPkZGSV9HZXRDdXJyZW50UGFnZSkNCi0JCXsNCi0JCQlyZXR1cm4gbV9wSW5mby0+RkZJX0dldEN1cnJlbnRQYWdlKG1fcEluZm8sIGRvY3VtZW50KTsNCi0JCX0NCi0JCXJldHVybiBOVUxMOw0KLQl9DQotDQotCWludCAJRkZJX0dldFJvdGF0aW9uKEZQREZfUEFHRSBwYWdlKQ0KLQl7DQotCQlpZihtX3BJbmZvICYmIG1fcEluZm8tPkZGSV9HZXRSb3RhdGlvbikNCi0JCXsNCi0JCQlyZXR1cm4gbV9wSW5mby0+RkZJX0dldFJvdGF0aW9uKG1fcEluZm8sIHBhZ2UpOw0KLQkJfQ0KLQkJcmV0dXJuIDA7DQotCX0NCi0Jdm9pZAlGRklfRXhlY3V0ZU5hbWVkQWN0aW9uKEZYX0xQQ1NUUiBuYW1lZEFjdGlvbikNCi0Jew0KLQkJaWYobV9wSW5mbyAmJiBtX3BJbmZvLT5GRklfRXhlY3V0ZU5hbWVkQWN0aW9uKQ0KLQkJew0KLQkJCW1fcEluZm8tPkZGSV9FeGVjdXRlTmFtZWRBY3Rpb24obV9wSW5mbywgbmFtZWRBY3Rpb24pOw0KLQkJfQ0KLQl9DQotCXZvaWQJRkZJX09uU2V0RmllbGRJbnB1dEZvY3VzKHZvaWQqIGZpZWxkLEZQREZfV0lERVNUUklORyBmb2N1c1RleHQsIEZQREZfRFdPUkQgblRleHRMZW4sIEZYX0JPT0wgYkZvY3VzKQ0KLQl7DQotCQlpZihtX3BJbmZvICYmIG1fcEluZm8tPkZGSV9TZXRUZXh0RmllbGRGb2N1cykNCi0JCXsNCi0JCQltX3BJbmZvLT5GRklfU2V0VGV4dEZpZWxkRm9jdXMobV9wSW5mbywgZm9jdXNUZXh0LCBuVGV4dExlbiwgYkZvY3VzKTsNCi0JCX0NCi0JfQ0KLQ0KLQl2b2lkCUZGSV9Eb1VSSUFjdGlvbihGWF9MUENTVFIgYnNVUkkpDQotCXsNCi0JCWlmKG1fcEluZm8gJiYgbV9wSW5mby0+RkZJX0RvVVJJQWN0aW9uKQ0KLQkJew0KLQkJCW1fcEluZm8tPkZGSV9Eb1VSSUFjdGlvbihtX3BJbmZvLCBic1VSSSk7DQotCQl9DQotCX0NCi0NCi0Jdm9pZAlGRklfRG9Hb1RvQWN0aW9uKGludCBuUGFnZUluZGV4LCBpbnQgem9vbU1vZGUsIGZsb2F0KiBmUG9zQXJyYXksIGludCBzaXplT2ZBcnJheSkNCi0Jew0KLQkJaWYobV9wSW5mbyAmJiBtX3BJbmZvLT5GRklfRG9Hb1RvQWN0aW9uKQ0KLQkJew0KLQkJCW1fcEluZm8tPkZGSV9Eb0dvVG9BY3Rpb24obV9wSW5mbywgblBhZ2VJbmRleCwgem9vbU1vZGUsIGZQb3NBcnJheSwgc2l6ZU9mQXJyYXkpOw0KLQkJfQ0KLQl9DQotDQotcHVibGljOg0KLQlGWF9CT09MCQkJCUlzSlNJbml0aWF0ZWQoKTsNCi0NCi1wdWJsaWM6CQ0KLQl2b2lkCQkJCVNldEN1cnJlbnREb2MoQ1BERlNES19Eb2N1bWVudCogcEZYRG9jKSB7bV9wU0RLRG9jID0gcEZYRG9jO30NCi0JQ1BERlNES19Eb2N1bWVudCoJR2V0Q3VycmVudERvYygpOw0KLQlDUERGX0RvY3VtZW50KgkJR2V0UERGRG9jdW1lbnQoKSB7cmV0dXJuIG1fcFBERkRvYzt9DQotLy8gCUNQREZTREtfRG9jdW1lbnQqICAgR2V0RG9jdW1lbnQoaW50IG5JbmRleCk7DQotLy8gCWludAkJCQkJQ291bnREb2N1bWVudHMoKSB7cmV0dXJuIG1fZG9jTWFwLkdldENvdW50KCk7fQ0KLQ0KLQlDUERGU0RLX0RvY3VtZW50KgkJT3BlbkRvY3VtZW50KENGWF9XaWRlU3RyaW5nICZmaWxlTmFtZSk7DQotCUNQREZTREtfRG9jdW1lbnQqCQlPcGVuTWVtUERGRG9jKENQREZfRG9jdW1lbnQqIHBOZXdEb2MsIENGWF9XaWRlU3RyaW5nICZmaWxlTmFtZSk7DQotCUZYX0JPT0wJCQkJCU9wZW5VUkwoQ0ZYX1dpZGVTdHJpbmcgJmZpbGVQYXRoKTsNCi0JDQotDQotCUNGWF9CeXRlU3RyaW5nCQlHZXRBcHBOYW1lKCkge3JldHVybiAiIjt9DQotDQotCUNGRkxfSUZvcm1GaWxsZXIqCUdldElGb3JtRmlsbGVyKCk7DQotCUlGWF9TeXN0ZW1IYW5kbGVyKglHZXRTeXNIYW5kbGVyKCkge3JldHVybiBtX3BTeXNIYW5kbGVyO30NCi0NCi1wdWJsaWM6DQotCUNQREZTREtfQW5ub3RIYW5kbGVyTWdyKiBHZXRBbm5vdEhhbmRsZXJNZ3IoKTsNCi0JSUZYSlNfUnVudGltZSoJR2V0SlNSdW50aW1lKCk7DQotCUNQREZTREtfQWN0aW9uSGFuZGxlciogR2V0QWN0aW9uSGFuZGVyKCk7DQotcHJpdmF0ZToNCi0JQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3IqIG1fcEFubm90SGFuZGxlck1ncjsNCi0JQ1BERlNES19BY3Rpb25IYW5kbGVyKgltX3BBY3Rpb25IYW5kbGVyOw0KLQlJRlhKU19SdW50aW1lKgltX3BKU1J1bnRpbWU7DQotcHVibGljOg0KLQlGUERGX0ZPUk1GSUxMSU5GTyogR2V0Rm9ybUZpbGxJbmZvKCkge3JldHVybiBtX3BJbmZvO30NCi1wcml2YXRlOg0KLQlGUERGX0ZPUk1GSUxMSU5GTyoJbV9wSW5mbzsNCi0vLwlDRlhfTWFwUHRyVGVtcGxhdGU8Q1BERl9Eb2N1bWVudCosIENQREZTREtfRG9jdW1lbnQqPiBtX2RvY01hcDsNCi0JQ1BERlNES19Eb2N1bWVudCogbV9wU0RLRG9jOw0KLQlDUERGX0RvY3VtZW50KiBtX3BQREZEb2M7DQotDQotCUNGRkxfSUZvcm1GaWxsZXIqIG1fcElGb3JtRmlsbGVyOw0KLQlJRlhfU3lzdGVtSGFuZGxlciogbV9wU3lzSGFuZGxlcjsNCi0NCi1wdWJsaWM6DQotCUNKU19SdW50aW1lRmFjdG9yeSogIG1fcEpTUnVudGltZUZhY3Rvcnk7DQotfTsNCi0NCi0NCi0NCi0vLyBjbGFzcyBDRlhfQXBwDQotLy8gew0KLS8vIHB1YmxpYzoNCi0vLyAJQ0ZYX0FwcCgpOm1fcEN1ckRvYyhOVUxMKSB7fQ0KLS8vIAl2b2lkIFNldEF0KENQREZfRG9jdW1lbnQqIHBQREZEb2MsIENQREZTREtfRG9jdW1lbnQqIHBGWERvYyk7DQotLy8gCUNQREZTREtfRG9jdW1lbnQqIEdldEF0KENQREZfRG9jdW1lbnQqIHBQREZEb2MpOw0KLS8vIHB1YmxpYzoNCi0vLyAJdm9pZCBTZXRDdXJyZW50RG9jdW1lbnQoQ1BERlNES19Eb2N1bWVudCogcEZYRG9jKSB7bV9wQ3VyRG9jID0gcEZYRG9jO30NCi0vLyAJQ1BERlNES19Eb2N1bWVudCogR2V0Q3VycmVudERvY3VtZW50KCkge3JldHVybiBtX3BDdXJEb2M7fQ0KLS8vIHByaXZhdGU6DQotLy8gCUNGWF9NYXBQdHJUZW1wbGF0ZTxDUERGX0RvY3VtZW50KiwgQ1BERlNES19Eb2N1bWVudCo+IG1fZG9jQXJyYXk7DQotLy8gCUNQREZTREtfRG9jdW1lbnQqIG1fcEN1ckRvYzsNCi0vLyB9Ow0KLWNsYXNzIENQREZTREtfSW50ZXJGb3JtOw0KLWNsYXNzIENQREZTREtfRG9jdW1lbnQNCi17DQotcHVibGljOg0KLQlDUERGU0RLX0RvY3VtZW50KENQREZfRG9jdW1lbnQqIHBEb2MsIENQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYpOw0KLQl+Q1BERlNES19Eb2N1bWVudCgpOw0KLXB1YmxpYzoNCi0JQ1BERlNES19JbnRlckZvcm0qCQlHZXRJbnRlckZvcm0oKSA7DQotCUNQREZfRG9jdW1lbnQqCQkJR2V0RG9jdW1lbnQoKSB7cmV0dXJuIG1fcERvYzt9DQotDQotcHVibGljOg0KLQl2b2lkCQkJCQlJbml0UGFnZVZpZXcoKTsNCi0Jdm9pZAkJCQkJQWRkUGFnZVZpZXcoQ1BERl9QYWdlKiBwUERGUGFnZSwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KTsNCi0JQ1BERlNES19QYWdlVmlldyoJCUdldFBhZ2VWaWV3KENQREZfUGFnZSogcFBERlBhZ2UsIEZYX0JPT0wgUmVOZXcgPSBUUlVFKTsNCi0JQ1BERlNES19QYWdlVmlldyoJCUdldFBhZ2VWaWV3KGludCBuSW5kZXgpOw0KLQlDUERGU0RLX1BhZ2VWaWV3KgkJR2V0Q3VycmVudFZpZXcoKTsNCi0Jdm9pZAkJCQkJUmVNb3ZlUGFnZVZpZXcoQ1BERl9QYWdlKiBwUERGUGFnZSk7DQotCXZvaWQJCQkJCVVwZGF0ZUFsbFZpZXdzKENQREZTREtfUGFnZVZpZXcqIHBTZW5kZXIsIENQREZTREtfQW5ub3QqIHBBbm5vdCk7DQotDQotCUNQREZTREtfQW5ub3QqCQkJR2V0Rm9jdXNBbm5vdCgpOy8ve3JldHVybiBOVUxMO30NCi0NCi0JSUZYSlNfUnVudGltZSAqCQkJR2V0SnNSdW50aW1lKCk7DQotCQ0KLQlGWF9CT09MCQkJCQlTZXRGb2N1c0Fubm90KENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZyA9IDApOy8ve3JldHVybiBGQUxTRTt9DQotCUZYX0JPT0wJCQkJCUtpbGxGb2N1c0Fubm90KEZYX1VJTlQgbkZsYWcgPSAwKTsNCi0NCi0JRlhfQk9PTAkJCQkJRXh0cmFjdFBhZ2VzKGNvbnN0IENGWF9Xb3JkQXJyYXkgJmFyckV4dHJhUGFnZXMsIENQREZfRG9jdW1lbnQqIHBEc3REb2MpOw0KLQlGWF9CT09MCQkJCQlJbnNlcnRQYWdlcyhpbnQgbkluc2VydEF0LCBjb25zdCBDUERGX0RvY3VtZW50KiBwU3JjRG9jLCBjb25zdCBDRlhfV29yZEFycmF5ICZhcnJTcmNQYWdlcyk7DQotCUZYX0JPT0wJCQkJCURlbGV0ZVBhZ2VzKGludCBuU3RhcnQsIGludCBuQ291bnQpOw0KLQlGWF9CT09MCQkJCQlSZXBsYWNlUGFnZXMoaW50IG5QYWdlLCBjb25zdCBDUERGX0RvY3VtZW50KiBwU3JjRG9jLCBjb25zdCBDRlhfV29yZEFycmF5ICZhcnJTcmNQYWdlcyk7DQotDQotCXZvaWQJCQkJCU9uQ2xvc2VEb2N1bWVudCgpOw0KLQ0KLQlpbnQJCQkJCQlHZXRQYWdlQ291bnQoKSB7cmV0dXJuIG1fcERvYy0+R2V0UGFnZUNvdW50KCk7fQ0KLQlGWF9CT09MCQkJCQlHZXRQZXJtaXNzaW9ucyhpbnQgbkZsYWcpOw0KLQlGWF9CT09MCQkJCQlHZXRDaGFuZ2VNYXJrKCkge3JldHVybiBtX2JDaGFuZ2VNYXNrO30NCi0Jdm9pZAkJCQkJU2V0Q2hhbmdlTWFyaygpIHttX2JDaGFuZ2VNYXNrID0gVFJVRTt9DQotCXZvaWQJCQkJCUNsZWFyQ2hhbmdlTWFyaygpIHttX2JDaGFuZ2VNYXNrPSBGQUxTRTt9DQotLy8JRlhfQk9PTAkJCQkJR2V0Q2hhbmdlTWFyaygpe3JldHVybiBGQUxTRTt9Ly9Jc0Fubm90TW9kaWZpZWQoKXx8SXNGb3JtTW9kaWZpZWQoKSB8fCBJc1dpZGdldE1vZGlmaWVkKCl8fCBtX25DaGFuZ2VNYXJrPjAgO30JDQotLy8Jdm9pZCAgICAgICAgICAgICAgICAgICAgQ2xlYXJDaGFuZ2VNYXJrKCl7fQ0KLQlDRlhfV2lkZVN0cmluZwkJCUdldFBhdGgoKSA7DQotCUNQREZfUGFnZSoJCQkJR2V0UGFnZShpbnQgbkluZGV4KTsNCi0JQ1BERkRvY19FbnZpcm9ubWVudCAqCUdldEVudigpIHtyZXR1cm4gbV9wRW52OyB9DQotCXZvaWQJCQkJICAgIFByb2NKYXZhc2NyaXB0RnVuKCk7DQotCUZYX0JPT0wJCQkJCVByb2NPcGVuQWN0aW9uKCk7DQotCUNQREZfT0NDb250ZXh0KgkJCUdldE9DQ29udGV4dCgpOw0KLXByaXZhdGU6DQotCS8vQ0ZYX0FycmF5VGVtcGxhdGU8Q1BERlNES19QYWdlVmlldyo+IG1fcGFnZUFycmF5Ow0KLQlDRlhfTWFwUHRyVGVtcGxhdGU8Q1BERl9QYWdlKiwgQ1BERlNES19QYWdlVmlldyo+IG1fcGFnZU1hcDsNCi0JQ1BERl9Eb2N1bWVudCoJCQltX3BEb2M7DQotDQotCUNQREZTREtfSW50ZXJGb3JtKgkJbV9wSW50ZXJGb3JtOw0KLQlDUERGU0RLX0Fubm90KgkJCW1fcEZvY3VzQW5ub3Q7DQotCUNQREZEb2NfRW52aXJvbm1lbnQgKgltX3BFbnY7DQotCUNQREZfT0NDb250ZXh0ICoJCW1fcE9jY29udGVudDsNCi0JRlhfQk9PTAkJCQkJbV9iQ2hhbmdlTWFzazsNCi19Ow0KLQ0KLWNsYXNzIENQREZTREtfUGFnZVZpZXcNCi17DQotcHVibGljOg0KLQlDUERGU0RLX1BhZ2VWaWV3KENQREZTREtfRG9jdW1lbnQqIHBTREtEb2MsQ1BERl9QYWdlKiBwYWdlKTsNCi0JfkNQREZTREtfUGFnZVZpZXcoKTsNCi1wdWJsaWM6DQotCXZpcnR1YWwJdm9pZCBQYWdlVmlld19PbkRyYXcoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSxDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zKSA7DQotcHVibGljOg0KLQlDUERGX0Fubm90KgkJCQkJCUdldFBERkFubm90QXRQb2ludChGWF9GTE9BVCBwYWdlWCwgRlhfRkxPQVQgcGFnZVkpOw0KLQlDUERGU0RLX0Fubm90KgkJCQkJR2V0RlhBbm5vdEF0UG9pbnQoRlhfRkxPQVQgcGFnZVgsIEZYX0ZMT0FUIHBhZ2VZKTsNCi0JQ1BERl9Bbm5vdCoJCQkJCQlHZXRQREZXaWRnZXRBdFBvaW50KEZYX0ZMT0FUIHBhZ2VYLCBGWF9GTE9BVCBwYWdlWSk7DQotCUNQREZTREtfQW5ub3QqCQkJCQlHZXRGWFdpZGdldEF0UG9pbnQoRlhfRkxPQVQgcGFnZVgsIEZYX0ZMT0FUIHBhZ2VZKTsNCi0JQ1BERlNES19Bbm5vdCoJCQkJCUdldEZvY3VzQW5ub3QoKSA7DQotCXZvaWQJCQkJCQkJU2V0Rm9jdXNBbm5vdChDUERGU0RLX0Fubm90KiBwU0RLQW5ub3QsRlhfVUlOVCBuRmxhZyA9IDApIHttX3BTREtEb2MtPlNldEZvY3VzQW5ub3QocFNES0Fubm90LCBuRmxhZyk7fQ0KLQlGWF9CT09MCQkJCQkJCUtpbGxGb2N1c0Fubm90KEZYX1VJTlQgbkZsYWcgPSAwKSB7cmV0dXJuIG1fcFNES0RvYy0+S2lsbEZvY3VzQW5ub3QobkZsYWcpO30NCi0JRlhfQk9PTAkJCQkJCQlBbm5vdF9IYXNBcHBlYXJhbmNlKENQREZfQW5ub3QqIHBBbm5vdCk7DQotDQotCUNQREZTREtfQW5ub3QqCQkJCQlBZGRBbm5vdChDUERGX0RpY3Rpb25hcnkgKiBwRGljdCk7DQotCUNQREZTREtfQW5ub3QqCQkJCQlBZGRBbm5vdChGWF9MUENTVFIgbHBTdWJUeXBlLENQREZfRGljdGlvbmFyeSAqIHBEaWN0KTsNCi0JQ1BERlNES19Bbm5vdCoJCQkJCUFkZEFubm90KENQREZfQW5ub3QgKiBwUERGQW5ub3QpOw0KLQlGWF9CT09MCQkJCQkJCURlbGV0ZUFubm90KENQREZTREtfQW5ub3QqIHBBbm5vdCk7CQkJCQkJCQ0KLQkNCi0JaW50CQkJCQkJCQlDb3VudEFubm90cygpOw0KLQlDUERGU0RLX0Fubm90KgkJCQkJR2V0QW5ub3QoaW50IG5JbmRleCk7DQotCUNQREZTREtfQW5ub3QqCQkJCSAgICBHZXRBbm5vdEJ5RGljdChDUERGX0RpY3Rpb25hcnkgKiBwRGljdCk7DQotCUNQREZfUGFnZSoJCQkJCQlHZXRQREZQYWdlKCl7cmV0dXJuIG1fcGFnZTt9DQotCUNQREZfRG9jdW1lbnQqCQkJCQlHZXRQREZEb2N1bWVudCgpOw0KLQlDUERGU0RLX0RvY3VtZW50KgkJCQlHZXRTREtEb2N1bWVudCgpIHtyZXR1cm4gbV9wU0RLRG9jO30JDQotcHVibGljOg0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uTEJ1dHRvbkRvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9VSU5UIG5GbGFnKTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCQlPbkxCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX1VJTlQgbkZsYWcpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uQ2hhcihpbnQgbkNoYXIsIEZYX1VJTlQgbkZsYWcpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uS2V5RG93bihpbnQgbktleUNvZGUsIGludCBuRmxhZyk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25LZXlVcChpbnQgbktleUNvZGUsIGludCBuRmxhZyk7DQotDQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25Nb3VzZU1vdmUoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBpbnQgbkZsYWcpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uTW91c2VXaGVlbChkb3VibGUgZGVsdGFYLCBkb3VibGUgZGVsdGFZLGNvbnN0IENQREZfUG9pbnQmIHBvaW50LCBpbnQgbkZsYWcpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCUlzVmFsaWRBbm5vdChGWF9MUFZPSUQgcCk7DQotcHVibGljOg0KLQl2aXJ0dWFsIHZvaWQJCQkJCUdldEN1cnJlbnRNYXRyaXgoQ1BERl9NYXRyaXgmIG1hdHJpeCkge21hdHJpeCA9IG1fY3VyTWF0cml4O30NCi0JdmlydHVhbCB2b2lkCQkJCQlVcGRhdGVSZWN0cyhDRlhfUmVjdEFycmF5JiByZWN0cyk7DQotCXZvaWQJCQkJCQkJVXBkYXRlVmlldyhDUERGU0RLX0Fubm90KiBwQW5ub3QpOw0KLQlDRlhfUHRyQXJyYXkqCQkJCQlHZXRBbm5vdExpc3QoKXsgcmV0dXJuICZtX2Z4QW5ub3RBcnJheTsgfQ0KLQ0KLXB1YmxpYzoNCi0JdmlydHVhbCBpbnQJCQkJCQlHZXRQYWdlSW5kZXgoKTsNCi0Jdm9pZAkJCQkJCQlMb2FkRlhBbm5vdHMoKTsNCi1wcml2YXRlOg0KLQlDUERGX01hdHJpeCBtX2N1ck1hdHJpeDsNCi0NCi1wcml2YXRlOg0KLQl2b2lkIFBhZ2VWaWV3X09uSGlnaGxpZ2h0Rm9ybUZpZWxkcyhDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGU0RLX1dpZGdldCogcFdpZGdldCk7DQotDQotcHJpdmF0ZToNCi0JQ1BERl9QYWdlKiBtX3BhZ2U7DQotCUNQREZfQW5ub3RMaXN0KiBtX3BBbm5vdExpc3Q7DQotDQotCS8vQ1BERlNES19Bbm5vdCogbV9wRm9jdXNBbm5vdDsNCi0JQ0ZYX1B0ckFycmF5ICBtX2Z4QW5ub3RBcnJheTsNCi0NCi0JQ1BERlNES19Eb2N1bWVudCogbV9wU0RLRG9jOw0KLXByaXZhdGU6DQotCUNQREZTREtfV2lkZ2V0KiBtX0NhcHR1cmVXaWRnZXQ7DQotCUZYX0JPT0wgbV9iRW50ZXJXaWRnZXQ7DQotCUZYX0JPT0wgbV9iRXhpdFdpZGdldDsNCi0JRlhfQk9PTCBtX2JPbldpZGdldDsNCi1wdWJsaWM6DQotCXZvaWQgU2V0VmFsaWQoRlhfQk9PTCBiVmFsaWQpIHttX2JWYWxpZCA9IGJWYWxpZDt9DQotCUZYX0JPT0wgSXNWYWxpZCgpIHtyZXR1cm4gbV9iVmFsaWQ7fQ0KLXByaXZhdGU6DQotCUZYX0JPT0wgbV9iVmFsaWQ7DQotfTsNCi0NCi0NCi10ZW1wbGF0ZTxjbGFzcyBUWVBFPg0KLWNsYXNzIENHV19BcnJheVRlbXBsYXRlIDogcHVibGljIENGWF9BcnJheVRlbXBsYXRlPFRZUEU+DQotew0KLXB1YmxpYzogDQotCUNHV19BcnJheVRlbXBsYXRlKCl7fQ0KLQl2aXJ0dWFsIH5DR1dfQXJyYXlUZW1wbGF0ZSgpe30NCi0JDQotCXR5cGVkZWYgaW50ICgqTFBfQ09NUEFSRSkoVFlQRSBwMSwgVFlQRSBwMik7DQotCQ0KLQl2b2lkIFNvcnQoTFBfQ09NUEFSRSBwQ29tcGFyZSwgRlhfQk9PTCBiQXNjZW50ID0gVFJVRSkNCi0Jew0KLQkJaW50IG5TaXplID0gdGhpcy0+R2V0U2l6ZSgpOw0KLQkJUXVpY2tTb3J0KDAsIG5TaXplIC0xLCBiQXNjZW50LCBwQ29tcGFyZSk7DQotCX0NCi0JDQotcHJpdmF0ZToNCi0Jdm9pZCBRdWlja1NvcnQoRlhfVUlOVCBuU3RhcnRQb3MsIEZYX1VJTlQgblN0b3BQb3MsIEZYX0JPT0wgYkFzY2VuZCwgTFBfQ09NUEFSRSBwQ29tcGFyZSkNCi0Jew0KLQkJaWYgKG5TdGFydFBvcyA+PSBuU3RvcFBvcykgcmV0dXJuOw0KLQkJDQotCQlpZiAoKG5TdG9wUG9zIC0gblN0YXJ0UG9zKSA9PSAxKQ0KLQkJew0KLQkJCVRZUEUgVmFsdWUxID0gdGhpcy0+R2V0QXQoblN0YXJ0UG9zKTsNCi0JCQlUWVBFIFZhbHVlMiA9IHRoaXMtPkdldEF0KG5TdG9wUG9zKTsNCi0JCQkNCi0JCQlpbnQgaUdyZWF0ZSA9ICgqcENvbXBhcmUpKFZhbHVlMSwgVmFsdWUyKTsNCi0JCQlpZiAoKGJBc2NlbmQgJiYgaUdyZWF0ZSA+IDApIHx8ICghYkFzY2VuZCAmJiBpR3JlYXRlIDwgMCkpDQotCQkJew0KLQkJCQl0aGlzLT5TZXRBdChuU3RhcnRQb3MsIFZhbHVlMik7DQotCQkJCXRoaXMtPlNldEF0KG5TdG9wUG9zLCBWYWx1ZTEpOw0KLQkJCX0NCi0JCQlyZXR1cm47DQotCQl9DQotCQkNCi0JCUZYX1VJTlQgbSA9IChuU3RhcnRQb3MgKyBuU3RvcFBvcykgLyAyOw0KLQkJRlhfVUlOVCBpID0gblN0YXJ0UG9zOw0KLQkJDQotCQlUWVBFIFZhbHVlID0gdGhpcy0+R2V0QXQobSk7DQotCQkNCi0JCXdoaWxlIChpIDwgbSkNCi0JCXsNCi0JCQlUWVBFIHRlbXAgPSB0aGlzLT5HZXRBdChpKTsNCi0JCQkNCi0JCQlpbnQgaUdyZWF0ZSA9ICgqcENvbXBhcmUpKHRlbXAsIFZhbHVlKTsNCi0JCQlpZiAoKGJBc2NlbmQgJiYgaUdyZWF0ZSA+IDApIHx8ICghYkFzY2VuZCAmJiBpR3JlYXRlIDwgMCkpDQotCQkJew0KLQkJCQl0aGlzLT5JbnNlcnRBdChtKzEsIHRlbXApOw0KLQkJCQl0aGlzLT5SZW1vdmVBdChpKTsNCi0JCQkJbS0tOw0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQlpKys7DQotCQkJfQ0KLQkJfQ0KLQkJDQotCQlGWF9VSU5UIGogPSBuU3RvcFBvczsNCi0JCQ0KLQkJd2hpbGUgKGogPiBtKQ0KLQkJew0KLQkJCVRZUEUgdGVtcCA9IHRoaXMtPkdldEF0KGopOw0KLQkJCQ0KLQkJCWludCBpR3JlYXRlID0gKCpwQ29tcGFyZSkodGVtcCwgVmFsdWUpOw0KLQkJCWlmICgoYkFzY2VuZCAmJiBpR3JlYXRlIDwgMCkgfHwgKCFiQXNjZW5kICYmIGlHcmVhdGUgPiAwKSkNCi0JCQl7DQotCQkJCXRoaXMtPlJlbW92ZUF0KGopOw0KLQkJCQl0aGlzLT5JbnNlcnRBdChtLCB0ZW1wKTsNCi0JCQkJbSsrOw0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQlqLS07DQotCQkJfQ0KLQkJfQ0KLQkJDQotCQlpZiAoblN0YXJ0UG9zIDwgbSkgUXVpY2tTb3J0KG5TdGFydFBvcywgbSwgYkFzY2VuZCwgcENvbXBhcmUpOw0KLQkJaWYgKG5TdG9wUG9zID4gbSkgUXVpY2tTb3J0KG0sIG5TdG9wUG9zLCBiQXNjZW5kLCBwQ29tcGFyZSk7DQotCX0NCi19Ow0KLQ0KLQ0KLSNlbmRpZiAvL19GUERGU0RLX01HUl9IDQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlBERlNES19NR1JfSAorI2RlZmluZSBfRlBERlNES19NR1JfSAorCisjaW5jbHVkZSAiZnNka19jb21tb24uaCIKKyNpbmNsdWRlICJmc2RrX2RlZmluZS5oIgorI2luY2x1ZGUgImZ4X3N5c3RlbWhhbmRsZXIuaCIKKyNpbmNsdWRlICJmc2RrX2Jhc2Vhbm5vdC5oIgorI2luY2x1ZGUgImZzZGtfYmFzZWZvcm0uaCIKKyNpbmNsdWRlICJmcGRmZm9ybWZpbGwuaCIKKyNpbmNsdWRlICJmc2RrX2Fubm90aGFuZGxlci5oIgorI2luY2x1ZGUgImZzZGtfYWN0aW9uaGFuZGxlci5oIgorCisvL2Nyb3NzIHBsYXRmb3JtIGtleWNvZGUgYW5kIGV2ZW50cyBkZWZpbmUuCisjaW5jbHVkZSAiZnBkZl9md2xldmVudC5oIgorCisKK2NsYXNzIENQREZTREtfRG9jdW1lbnQ7CitjbGFzcyBDUERGU0RLX1BhZ2VWaWV3OworY2xhc3MgQ1BERlNES19Bbm5vdDsKK2NsYXNzIENGRkxfSUZvcm1GaWxsZXI7CitjbGFzcyBDUERGU0RLX1dpZGdldDsKK2NsYXNzIElGWF9TeXN0ZW1IYW5kbGVyOworY2xhc3MgQ1BERlNES19BY3Rpb25IYW5kbGVyOworY2xhc3MgQ0pTX1J1bnRpbWVGYWN0b3J5OworCisjaW5jbHVkZSAiamF2YXNjcmlwdC9JSmF2YVNjcmlwdC5oIgorCitjbGFzcyBDUERGRG9jX0Vudmlyb25tZW50Cit7CitwdWJsaWM6CisJQ1BERkRvY19FbnZpcm9ubWVudChDUERGX0RvY3VtZW50ICogcERvYyk7CisJfkNQREZEb2NfRW52aXJvbm1lbnQoKTsKKworCWludCBSZWdBcHBIYW5kbGUoRlBERl9GT1JNRklMTElORk8qIHBGRmluZm8pOy8veyBtX3BJbmZvICA9IHBGRmluZm87IHJldHVybiBUUlVFO30KKworCXZpcnR1YWwgdm9pZAkJUmVsZWFzZSgpCisJeworCQlpZiAobV9wSW5mbyAmJiBtX3BJbmZvLT5SZWxlYXNlKQorCQkJbV9wSW5mby0+UmVsZWFzZShtX3BJbmZvKTsKKwkJZGVsZXRlIHRoaXM7CisJfQorCisJdmlydHVhbCB2b2lkIEZGSV9JbnZhbGlkYXRlKEZQREZfUEFHRSBwYWdlLCBkb3VibGUgbGVmdCwgZG91YmxlIHRvcCwgZG91YmxlIHJpZ2h0LCBkb3VibGUgYm90dG9tKQorCXsKKwkJaWYgKG1fcEluZm8gJiYgbV9wSW5mby0+RkZJX0ludmFsaWRhdGUpIAorCQl7CisJCQltX3BJbmZvLT5GRklfSW52YWxpZGF0ZShtX3BJbmZvLCBwYWdlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOworCQl9CisJfQorCXZpcnR1YWwgdm9pZCBGRklfT3V0cHV0U2VsZWN0ZWRSZWN0KEZQREZfUEFHRSBwYWdlLCBkb3VibGUgbGVmdCwgZG91YmxlIHRvcCwgZG91YmxlIHJpZ2h0LCBkb3VibGUgYm90dG9tKQorCXsKKwkJaWYgKG1fcEluZm8gJiYgbV9wSW5mby0+RkZJX091dHB1dFNlbGVjdGVkUmVjdCkgCisJCXsKKwkJCW1fcEluZm8tPkZGSV9PdXRwdXRTZWxlY3RlZFJlY3QobV9wSW5mbywgcGFnZSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKKwkJfQorCX0KKworCXZpcnR1YWwgdm9pZCBGRklfU2V0Q3Vyc29yKGludCBuQ3Vyc29yVHlwZSkKKwl7CisJCWlmIChtX3BJbmZvICYmIG1fcEluZm8tPkZGSV9TZXRDdXJzb3IpIAorCQl7CisJCQltX3BJbmZvLT5GRklfU2V0Q3Vyc29yKG1fcEluZm8sIG5DdXJzb3JUeXBlKTsKKwkJfQorCX0KKworCXZpcnR1YWwJaW50ICBGRklfU2V0VGltZXIoaW50IHVFbGFwc2UsIFRpbWVyQ2FsbGJhY2sgbHBUaW1lckZ1bmMpCisJeworCQlpZiAobV9wSW5mbyAmJiBtX3BJbmZvLT5GRklfU2V0VGltZXIpIAorCQl7CisJCQlyZXR1cm4gbV9wSW5mby0+RkZJX1NldFRpbWVyKG1fcEluZm8sIHVFbGFwc2UsIGxwVGltZXJGdW5jKTsKKwkJfQorCQlyZXR1cm4gLTE7CisJfQorCQkKKwl2aXJ0dWFsIHZvaWQgRkZJX0tpbGxUaW1lcihpbnQgblRpbWVySUQpCisJeworCQlpZiAobV9wSW5mbyAmJiBtX3BJbmZvLT5GRklfS2lsbFRpbWVyKSAKKwkJeworCQkJbV9wSW5mby0+RkZJX0tpbGxUaW1lcihtX3BJbmZvLCBuVGltZXJJRCk7CisJCX0KKwl9CisJRlhfU1lTVEVNVElNRSBGRklfR2V0TG9jYWxUaW1lKCkKKwl7CisJCUZYX1NZU1RFTVRJTUUgZnh0aW1lOworCQlpZihtX3BJbmZvICYmIG1fcEluZm8tPkZGSV9HZXRMb2NhbFRpbWUpCisJCXsKKwkJCUZQREZfU1lTVEVNVElNRSBzeXN0aW1lID0gbV9wSW5mby0+RkZJX0dldExvY2FsVGltZShtX3BJbmZvKTsKKwkJCWZ4dGltZS53RGF5ID0gc3lzdGltZS53RGF5OworCQkJZnh0aW1lLndEYXlPZldlZWsgPSBzeXN0aW1lLndEYXlPZldlZWs7CisJCQlmeHRpbWUud0hvdXIgPSBzeXN0aW1lLndIb3VyOworCQkJZnh0aW1lLndNaWxsaXNlY29uZHMgPSBzeXN0aW1lLndNaWxsaXNlY29uZHM7CisJCQlmeHRpbWUud01pbnV0ZSA9IHN5c3RpbWUud01pbnV0ZTsKKwkJCWZ4dGltZS53TW9udGggPSBzeXN0aW1lLndNb250aDsKKwkJCWZ4dGltZS53U2Vjb25kID0gc3lzdGltZS53U2Vjb25kOworCQkJZnh0aW1lLndZZWFyID0gc3lzdGltZS53WWVhcjsKKwkJfQorCQlyZXR1cm4gZnh0aW1lOworCX0KKworCXZpcnR1YWwgdm9pZCBGRklfT25DaGFuZ2UoKQorCXsKKwkJaWYobV9wSW5mbyAmJiBtX3BJbmZvLT5GRklfT25DaGFuZ2UpCisJCXsKKwkJCW1fcEluZm8tPkZGSV9PbkNoYW5nZShtX3BJbmZvKTsKKwkJfQorCX0KKworCXZpcnR1YWwJRlhfQk9PTAlGRklfSXNTSElGVEtleURvd24oRlhfRFdPUkQgbkZsYWcpCisJeworCQkKKwkJcmV0dXJuIChuRmxhZyAmIEZXTF9FVkVOVEZMQUdfU2hpZnRLZXkpICE9IDA7CisJfQorCXZpcnR1YWwJRlhfQk9PTAlGRklfSXNDVFJMS2V5RG93bihGWF9EV09SRCBuRmxhZykKKwl7CisKKwkJcmV0dXJuIChuRmxhZyAmIEZXTF9FVkVOVEZMQUdfQ29udHJvbEtleSkgIT0gMDsKKwl9CisJdmlydHVhbAlGWF9CT09MCUZGSV9Jc0FMVEtleURvd24oRlhfRFdPUkQgbkZsYWcpCisJeworCisJCXJldHVybiAobkZsYWcgJiBGV0xfRVZFTlRGTEFHX0FsdEtleSkgIT0gMDsKKwl9CisJdmlydHVhbAlGWF9CT09MCUZGSV9Jc0lOU0VSVEtleURvd24oRlhfRFdPUkQgbkZsYWcpCisJeworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJdmlydHVhbCBpbnQgSlNfYXBwQWxlcnQoRlhfTFBDV1NUUiBNc2csIEZYX0xQQ1dTVFIgVGl0bGUsIEZYX1VJTlQgVHlwZSwgRlhfVUlOVCBJY29uKQorCXsKKwkJaWYobV9wSW5mbyAmJiBtX3BJbmZvLT5tX3BKc1BsYXRmb3JtICYmIG1fcEluZm8tPm1fcEpzUGxhdGZvcm0tPmFwcF9hbGVydCkKKwkJeworCQkJQ0ZYX0J5dGVTdHJpbmcgYnNNc2cgPSBDRlhfV2lkZVN0cmluZyhNc2cpLlVURjE2TEVfRW5jb2RlKCk7CisJCQlDRlhfQnl0ZVN0cmluZyBic1RpdGxlID0gQ0ZYX1dpZGVTdHJpbmcoVGl0bGUpLlVURjE2TEVfRW5jb2RlKCk7CisJCQlGUERGX1dJREVTVFJJTkcgcE1zZyA9IChGUERGX1dJREVTVFJJTkcpYnNNc2cuR2V0QnVmZmVyKGJzTXNnLkdldExlbmd0aCgpKTsKKwkJCUZQREZfV0lERVNUUklORyBwVGl0bGUgPSAoRlBERl9XSURFU1RSSU5HKWJzVGl0bGUuR2V0QnVmZmVyKGJzVGl0bGUuR2V0TGVuZ3RoKCkpOworCQkJaW50IHJldCA9IG1fcEluZm8tPm1fcEpzUGxhdGZvcm0tPmFwcF9hbGVydChtX3BJbmZvLT5tX3BKc1BsYXRmb3JtLCBwTXNnLCBwVGl0bGUsIFR5cGUsIEljb24pOworCQkJYnNNc2cuUmVsZWFzZUJ1ZmZlcigpOworCQkJYnNUaXRsZS5SZWxlYXNlQnVmZmVyKCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCXJldHVybiAtMTsKKwl9CisKKwl2aXJ0dWFsIGludCBKU19hcHBSZXNwb25zZShGWF9MUENXU1RSIFF1ZXN0aW9uLCBGWF9MUENXU1RSIFRpdGxlLCBGWF9MUENXU1RSIERlZmF1bHQsIEZYX0xQQ1dTVFIgY0xhYmVsLCBGUERGX0JPT0wgYlBhc3N3b3JkLCB2b2lkKiByZXNwb25zZSwgaW50IGxlbmd0aCkKKwl7CisJCWlmIChtX3BJbmZvICYmIG1fcEluZm8tPm1fcEpzUGxhdGZvcm0gJiYgbV9wSW5mby0+bV9wSnNQbGF0Zm9ybS0+YXBwX3Jlc3BvbnNlKQorCQl7CisJCQlDRlhfQnl0ZVN0cmluZyBic1F1ZXN0aW9uID0gQ0ZYX1dpZGVTdHJpbmcoUXVlc3Rpb24pLlVURjE2TEVfRW5jb2RlKCk7CisJCQlDRlhfQnl0ZVN0cmluZyBic1RpdGxlID0gQ0ZYX1dpZGVTdHJpbmcoVGl0bGUpLlVURjE2TEVfRW5jb2RlKCk7CisJCQlDRlhfQnl0ZVN0cmluZyBic0RlZmF1bHQgPSBDRlhfV2lkZVN0cmluZyhEZWZhdWx0KS5VVEYxNkxFX0VuY29kZSgpOworCQkJQ0ZYX0J5dGVTdHJpbmcgYnNMYWJlbCA9IENGWF9XaWRlU3RyaW5nKGNMYWJlbCkuVVRGMTZMRV9FbmNvZGUoKTsKKwkJCUZQREZfV0lERVNUUklORyBwUXVlc3Rpb24gPSAoRlBERl9XSURFU1RSSU5HKWJzUXVlc3Rpb24uR2V0QnVmZmVyKGJzUXVlc3Rpb24uR2V0TGVuZ3RoKCkpOworCQkJRlBERl9XSURFU1RSSU5HIHBUaXRsZSA9IChGUERGX1dJREVTVFJJTkcpYnNUaXRsZS5HZXRCdWZmZXIoYnNUaXRsZS5HZXRMZW5ndGgoKSk7CisJCQlGUERGX1dJREVTVFJJTkcgcERlZmF1bHQgPSAoRlBERl9XSURFU1RSSU5HKWJzRGVmYXVsdC5HZXRCdWZmZXIoYnNEZWZhdWx0LkdldExlbmd0aCgpKTsKKwkJCUZQREZfV0lERVNUUklORyBwTGFiZWwgPSAoRlBERl9XSURFU1RSSU5HKWJzTGFiZWwuR2V0QnVmZmVyKGJzTGFiZWwuR2V0TGVuZ3RoKCkpOworCQkJaW50IHJldCA9IG1fcEluZm8tPm1fcEpzUGxhdGZvcm0tPmFwcF9yZXNwb25zZShtX3BJbmZvLT5tX3BKc1BsYXRmb3JtLCBwUXVlc3Rpb24sIHBUaXRsZSwgCisJCQkJcERlZmF1bHQsIHBMYWJlbCwgYlBhc3N3b3JkLCByZXNwb25zZSwgbGVuZ3RoKTsKKwkJCWJzUXVlc3Rpb24uUmVsZWFzZUJ1ZmZlcigpOworCQkJYnNUaXRsZS5SZWxlYXNlQnVmZmVyKCk7CisJCQlic0RlZmF1bHQuUmVsZWFzZUJ1ZmZlcigpOworCQkJYnNMYWJlbC5SZWxlYXNlQnVmZmVyKCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCXJldHVybiAtMTsKKwl9CisKKwl2aXJ0dWFsIHZvaWQgSlNfYXBwQmVlcChpbnQgblR5cGUpCisJeworCQlpZihtX3BJbmZvICYmIG1fcEluZm8tPm1fcEpzUGxhdGZvcm0gJiYgbV9wSW5mby0+bV9wSnNQbGF0Zm9ybS0+YXBwX2JlZXApCisJCXsKKwkJCW1fcEluZm8tPm1fcEpzUGxhdGZvcm0tPmFwcF9iZWVwKG1fcEluZm8tPm1fcEpzUGxhdGZvcm0sIG5UeXBlKTsKKwkJfQorCX0KKworCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcgSlNfZmllbGRCcm93c2UoKQorCXsKKwkJaWYobV9wSW5mbyAmJiBtX3BJbmZvLT5tX3BKc1BsYXRmb3JtICYmIG1fcEluZm8tPm1fcEpzUGxhdGZvcm0tPkZpZWxkX2Jyb3dzZSkKKwkJeworCQkJaW50IG5MZW4gPSBtX3BJbmZvLT5tX3BKc1BsYXRmb3JtLT5GaWVsZF9icm93c2UobV9wSW5mby0+bV9wSnNQbGF0Zm9ybSwgTlVMTCwgMCk7CisJCQlpZihuTGVuIDw9IDApCisJCQkJcmV0dXJuIEwiIjsKKwkJCWNoYXIqIHBidWZmID0gbmV3IGNoYXJbbkxlbl07CisJCQlpZihwYnVmZikKKwkJCQltZW1zZXQocGJ1ZmYsIDAsIG5MZW4pOworCQkJZWxzZQkKKwkJCQlyZXR1cm4gTCIiOworCQkJbkxlbiA9IG1fcEluZm8tPm1fcEpzUGxhdGZvcm0tPkZpZWxkX2Jyb3dzZShtX3BJbmZvLT5tX3BKc1BsYXRmb3JtLCBwYnVmZiwgbkxlbik7CisJCQlDRlhfQnl0ZVN0cmluZyBic1JldCA9IENGWF9CeXRlU3RyaW5nKHBidWZmLCBuTGVuKTsKKwkJCUNGWF9XaWRlU3RyaW5nIHdzUmV0ID0gQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChic1JldCk7CisJCQlkZWxldGVbXSBwYnVmZjsKKwkJCXJldHVybiB3c1JldDsKKwkJfQorCQlyZXR1cm4gTCIiOworCX0KKworCUNGWF9XaWRlU3RyaW5nIEpTX2RvY0dldEZpbGVQYXRoKCkKKwl7CQkKKwkJaWYobV9wSW5mbyAmJiBtX3BJbmZvLT5tX3BKc1BsYXRmb3JtICYmIG1fcEluZm8tPm1fcEpzUGxhdGZvcm0tPkRvY19nZXRGaWxlUGF0aCkKKwkJeworCQkJaW50IG5MZW4gPSBtX3BJbmZvLT5tX3BKc1BsYXRmb3JtLT5Eb2NfZ2V0RmlsZVBhdGgobV9wSW5mby0+bV9wSnNQbGF0Zm9ybSwgTlVMTCwgMCk7CisJCQlpZihuTGVuIDw9IDApCisJCQkJcmV0dXJuIEwiIjsKKwkJCWNoYXIqIHBidWZmID0gbmV3IGNoYXJbbkxlbl07CisJCQlpZihwYnVmZikKKwkJCQltZW1zZXQocGJ1ZmYsIDAsIG5MZW4pOworCQkJZWxzZQorCQkJCXJldHVybiBMIiI7CisJCQluTGVuID0gbV9wSW5mby0+bV9wSnNQbGF0Zm9ybS0+RG9jX2dldEZpbGVQYXRoKG1fcEluZm8tPm1fcEpzUGxhdGZvcm0sIHBidWZmLCBuTGVuKTsKKwkJCUNGWF9CeXRlU3RyaW5nIGJzUmV0ID0gQ0ZYX0J5dGVTdHJpbmcocGJ1ZmYsIG5MZW4pOworCQkJQ0ZYX1dpZGVTdHJpbmcgd3NSZXQgPSBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKGJzUmV0KTsKKwkJCWRlbGV0ZVtdIHBidWZmOworCQkJcmV0dXJuIHdzUmV0OworCQl9CisJCXJldHVybiBMIiI7CisJfQorCisJdm9pZCBKU19kb2NTdWJtaXRGb3JtKHZvaWQqIGZvcm1EYXRhLCBpbnQgbGVuZ3RoLCBGWF9MUENXU1RSIFVSTCkKKwl7CisJCWlmKG1fcEluZm8gJiYgbV9wSW5mby0+bV9wSnNQbGF0Zm9ybSAmJiBtX3BJbmZvLT5tX3BKc1BsYXRmb3JtLT5Eb2Nfc3VibWl0Rm9ybSkKKwkJeworCQkJQ0ZYX0J5dGVTdHJpbmcgYnNEZXN0aW5hdGlvbiA9IENGWF9XaWRlU3RyaW5nKFVSTCkuVVRGMTZMRV9FbmNvZGUoKTsKKwkJCUZQREZfV0lERVNUUklORyBwRGVzdGluYXRpb24gPSAoRlBERl9XSURFU1RSSU5HKWJzRGVzdGluYXRpb24uR2V0QnVmZmVyKGJzRGVzdGluYXRpb24uR2V0TGVuZ3RoKCkpOworCQkJbV9wSW5mby0+bV9wSnNQbGF0Zm9ybS0+RG9jX3N1Ym1pdEZvcm0obV9wSW5mby0+bV9wSnNQbGF0Zm9ybSwgZm9ybURhdGEsIGxlbmd0aCwgcERlc3RpbmF0aW9uKTsKKwkJCWJzRGVzdGluYXRpb24uUmVsZWFzZUJ1ZmZlcigpOworCQl9CisJfQorCisJdm9pZCBKU19kb2NtYWlsRm9ybSh2b2lkKiBtYWlsRGF0YSwgaW50IGxlbmd0aCwgRlBERl9CT09MIGJVSSxGWF9MUENXU1RSIFRvLCBGWF9MUENXU1RSIFN1YmplY3QsIEZYX0xQQ1dTVFIgQ0MsIEZYX0xQQ1dTVFIgQkNDLCBGWF9MUENXU1RSIE1zZykKKwl7CisJCWlmKG1fcEluZm8gJiYgbV9wSW5mby0+bV9wSnNQbGF0Zm9ybSAmJiBtX3BJbmZvLT5tX3BKc1BsYXRmb3JtLT5Eb2NfbWFpbCkKKwkJeworCQkJQ0ZYX0J5dGVTdHJpbmcgYnNUbyA9IENGWF9XaWRlU3RyaW5nKFRvKS5VVEYxNkxFX0VuY29kZSgpOworCQkJQ0ZYX0J5dGVTdHJpbmcgYnNDQyA9IENGWF9XaWRlU3RyaW5nKFN1YmplY3QpLlVURjE2TEVfRW5jb2RlKCk7CisJCQlDRlhfQnl0ZVN0cmluZyBic0JjYyA9IENGWF9XaWRlU3RyaW5nKEJDQykuVVRGMTZMRV9FbmNvZGUoKTsKKwkJCUNGWF9CeXRlU3RyaW5nIGJzU3ViamVjdCA9IENGWF9XaWRlU3RyaW5nKFN1YmplY3QpLlVURjE2TEVfRW5jb2RlKCk7CisJCQlDRlhfQnl0ZVN0cmluZyBic01zZyA9IENGWF9XaWRlU3RyaW5nKE1zZykuVVRGMTZMRV9FbmNvZGUoKTsKKwkJCUZQREZfV0lERVNUUklORyBwVG8gPSAoRlBERl9XSURFU1RSSU5HKWJzVG8uR2V0QnVmZmVyKGJzVG8uR2V0TGVuZ3RoKCkpOworCQkJRlBERl9XSURFU1RSSU5HIHBDQyA9IChGUERGX1dJREVTVFJJTkcpYnNDQy5HZXRCdWZmZXIoYnNDQy5HZXRMZW5ndGgoKSk7CisJCQlGUERGX1dJREVTVFJJTkcgcEJjYyA9IChGUERGX1dJREVTVFJJTkcpYnNCY2MuR2V0QnVmZmVyKGJzQmNjLkdldExlbmd0aCgpKTsKKwkJCUZQREZfV0lERVNUUklORyBwU3ViamVjdCA9IChGUERGX1dJREVTVFJJTkcpYnNTdWJqZWN0LkdldEJ1ZmZlcihic1N1YmplY3QuR2V0TGVuZ3RoKCkpOworCQkJRlBERl9XSURFU1RSSU5HIHBNc2cgPSAoRlBERl9XSURFU1RSSU5HKWJzTXNnLkdldEJ1ZmZlcihic01zZy5HZXRMZW5ndGgoKSk7CisJCQltX3BJbmZvLT5tX3BKc1BsYXRmb3JtLT5Eb2NfbWFpbChtX3BJbmZvLT5tX3BKc1BsYXRmb3JtLCBtYWlsRGF0YSwgbGVuZ3RoLCBiVUksIHBUbywgcFN1YmplY3QsCisJCQkJcENDLCBwQmNjLCBwTXNnKTsKKwkJCWJzVG8uUmVsZWFzZUJ1ZmZlcigpOworCQkJYnNDQy5SZWxlYXNlQnVmZmVyKCk7CisJCQlic0JjYy5SZWxlYXNlQnVmZmVyKCk7CisJCQlic1N1YmplY3QuUmVsZWFzZUJ1ZmZlcigpOworCQkJYnNNc2cuUmVsZWFzZUJ1ZmZlcigpOworCQl9CisJfQorCUNGWF9XaWRlU3RyaW5nIEpTX2FwcGJyb3dzZUZvckRvYyhGUERGX0JPT0wgYlNhdmUsIEZYX0xQQ1dTVFIgY0ZpbGVuYW1lSW5pdCkKKwl7CisJCS8vdG8gZG8uLi4uCisJCXJldHVybiBMIiI7CisvLyAJCWlmKG1fcEluZm8gJiYgbV9wSW5mby0+bV9wSnNQbGF0Zm9ybSAmJiBtX3BJbmZvLT5tX3BKc1BsYXRmb3JtLT5hcHBfYnJvd3NlRm9yRG9jKQorLy8gCQl7CisvLyAJCQlDRlhfQnl0ZVN0cmluZyBic0ZpbGVuYW1lSW5pdCA9IENGWF9XaWRlU3RyaW5nKGNGaWxlbmFtZUluaXQpLlVURjE2TEVfRW5jb2RlKCk7CisvLyAJCQlGUERGX1dJREVTVFJJTkcgcEZpbGVOYW1lSW5pdCA9IChGUERGX1dJREVTVFJJTkcpYnNGaWxlbmFtZUluaXQuR2V0QnVmZmVyKGJzRmlsZW5hbWVJbml0LkdldExlbmd0aCgpKTsKKy8vIAorLy8gCQkJbV9wSW5mby0+bV9wSnNQbGF0Zm9ybS0+YXBwX2Jyb3dzZUZvckRvYyhtX3BJbmZvLT5tX3BKc1BsYXRmb3JtLCBwRmlsZU5hbWVJbml0KTsKKy8vIAkJCWJzRmlsZW5hbWVJbml0LlJlbGVhc2VCdWZmZXIoKTsKKy8vIAkJfQorCX0KKworCXZvaWQgSlNfZG9jcHJpbnQoRlBERl9CT09MIGJVSSAsIGludCBuU3RhcnQsIGludCBuRW5kLCBGUERGX0JPT0wgYlNpbGVudCAsRlBERl9CT09MIGJTaHJpbmtUb0ZpdCxGUERGX0JPT0wgYlByaW50QXNJbWFnZSAsRlBERl9CT09MIGJSZXZlcnNlICxGUERGX0JPT0wgYkFubm90YXRpb25zKQorCXsKKwkJaWYobV9wSW5mbyAmJiBtX3BJbmZvLT5tX3BKc1BsYXRmb3JtICYmIG1fcEluZm8tPm1fcEpzUGxhdGZvcm0tPkRvY19wcmludCkKKwkJeworCQkJbV9wSW5mby0+bV9wSnNQbGF0Zm9ybS0+RG9jX3ByaW50KG1fcEluZm8tPm1fcEpzUGxhdGZvcm0sIGJVSSwgblN0YXJ0LCBuRW5kLCBiU2lsZW50LCBiU2hyaW5rVG9GaXQsIGJQcmludEFzSW1hZ2UsIGJSZXZlcnNlLCBiQW5ub3RhdGlvbnMpOworCQl9CisJfQorCXZvaWQgSlNfZG9jZ290b1BhZ2UoaW50IG5QYWdlTnVtKQorCXsKKwkJaWYobV9wSW5mbyAmJiBtX3BJbmZvLT5tX3BKc1BsYXRmb3JtICYmIG1fcEluZm8tPm1fcEpzUGxhdGZvcm0tPkRvY19nb3RvUGFnZSkKKwkJeworCQkJbV9wSW5mby0+bV9wSnNQbGF0Zm9ybS0+RG9jX2dvdG9QYWdlKG1fcEluZm8tPm1fcEpzUGxhdGZvcm0sIG5QYWdlTnVtKTsKKwkJfQorCX0KKworCXZpcnR1YWwgRlBERl9QQUdFCUZGSV9HZXRQYWdlKEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsaW50IG5QYWdlSW5kZXgpCisJeworCQlpZihtX3BJbmZvICYmIG1fcEluZm8tPkZGSV9HZXRQYWdlKQorCQl7CisJCQlyZXR1cm4gbV9wSW5mby0+RkZJX0dldFBhZ2UobV9wSW5mbywgZG9jdW1lbnQsIG5QYWdlSW5kZXgpOworCQl9CisJCXJldHVybiBOVUxMOworCX0KKworCXZpcnR1YWwgRlBERl9QQUdFIEZGSV9HZXRDdXJyZW50UGFnZShGUERGX0RPQ1VNRU5UIGRvY3VtZW50KQorCXsKKwkJaWYobV9wSW5mbyAmJiBtX3BJbmZvLT5GRklfR2V0Q3VycmVudFBhZ2UpCisJCXsKKwkJCXJldHVybiBtX3BJbmZvLT5GRklfR2V0Q3VycmVudFBhZ2UobV9wSW5mbywgZG9jdW1lbnQpOworCQl9CisJCXJldHVybiBOVUxMOworCX0KKworCWludCAJRkZJX0dldFJvdGF0aW9uKEZQREZfUEFHRSBwYWdlKQorCXsKKwkJaWYobV9wSW5mbyAmJiBtX3BJbmZvLT5GRklfR2V0Um90YXRpb24pCisJCXsKKwkJCXJldHVybiBtX3BJbmZvLT5GRklfR2V0Um90YXRpb24obV9wSW5mbywgcGFnZSk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCXZvaWQJRkZJX0V4ZWN1dGVOYW1lZEFjdGlvbihGWF9MUENTVFIgbmFtZWRBY3Rpb24pCisJeworCQlpZihtX3BJbmZvICYmIG1fcEluZm8tPkZGSV9FeGVjdXRlTmFtZWRBY3Rpb24pCisJCXsKKwkJCW1fcEluZm8tPkZGSV9FeGVjdXRlTmFtZWRBY3Rpb24obV9wSW5mbywgbmFtZWRBY3Rpb24pOworCQl9CisJfQorCXZvaWQJRkZJX09uU2V0RmllbGRJbnB1dEZvY3VzKHZvaWQqIGZpZWxkLEZQREZfV0lERVNUUklORyBmb2N1c1RleHQsIEZQREZfRFdPUkQgblRleHRMZW4sIEZYX0JPT0wgYkZvY3VzKQorCXsKKwkJaWYobV9wSW5mbyAmJiBtX3BJbmZvLT5GRklfU2V0VGV4dEZpZWxkRm9jdXMpCisJCXsKKwkJCW1fcEluZm8tPkZGSV9TZXRUZXh0RmllbGRGb2N1cyhtX3BJbmZvLCBmb2N1c1RleHQsIG5UZXh0TGVuLCBiRm9jdXMpOworCQl9CisJfQorCisJdm9pZAlGRklfRG9VUklBY3Rpb24oRlhfTFBDU1RSIGJzVVJJKQorCXsKKwkJaWYobV9wSW5mbyAmJiBtX3BJbmZvLT5GRklfRG9VUklBY3Rpb24pCisJCXsKKwkJCW1fcEluZm8tPkZGSV9Eb1VSSUFjdGlvbihtX3BJbmZvLCBic1VSSSk7CisJCX0KKwl9CisKKwl2b2lkCUZGSV9Eb0dvVG9BY3Rpb24oaW50IG5QYWdlSW5kZXgsIGludCB6b29tTW9kZSwgZmxvYXQqIGZQb3NBcnJheSwgaW50IHNpemVPZkFycmF5KQorCXsKKwkJaWYobV9wSW5mbyAmJiBtX3BJbmZvLT5GRklfRG9Hb1RvQWN0aW9uKQorCQl7CisJCQltX3BJbmZvLT5GRklfRG9Hb1RvQWN0aW9uKG1fcEluZm8sIG5QYWdlSW5kZXgsIHpvb21Nb2RlLCBmUG9zQXJyYXksIHNpemVPZkFycmF5KTsKKwkJfQorCX0KKworcHVibGljOgorCUZYX0JPT0wJCQkJSXNKU0luaXRpYXRlZCgpOworCitwdWJsaWM6CQorCXZvaWQJCQkJU2V0Q3VycmVudERvYyhDUERGU0RLX0RvY3VtZW50KiBwRlhEb2MpIHttX3BTREtEb2MgPSBwRlhEb2M7fQorCUNQREZTREtfRG9jdW1lbnQqCUdldEN1cnJlbnREb2MoKTsKKwlDUERGX0RvY3VtZW50KgkJR2V0UERGRG9jdW1lbnQoKSB7cmV0dXJuIG1fcFBERkRvYzt9CisvLyAJQ1BERlNES19Eb2N1bWVudCogICBHZXREb2N1bWVudChpbnQgbkluZGV4KTsKKy8vIAlpbnQJCQkJCUNvdW50RG9jdW1lbnRzKCkge3JldHVybiBtX2RvY01hcC5HZXRDb3VudCgpO30KKworCUNQREZTREtfRG9jdW1lbnQqCQlPcGVuRG9jdW1lbnQoQ0ZYX1dpZGVTdHJpbmcgJmZpbGVOYW1lKTsKKwlDUERGU0RLX0RvY3VtZW50KgkJT3Blbk1lbVBERkRvYyhDUERGX0RvY3VtZW50KiBwTmV3RG9jLCBDRlhfV2lkZVN0cmluZyAmZmlsZU5hbWUpOworCUZYX0JPT0wJCQkJCU9wZW5VUkwoQ0ZYX1dpZGVTdHJpbmcgJmZpbGVQYXRoKTsKKwkKKworCUNGWF9CeXRlU3RyaW5nCQlHZXRBcHBOYW1lKCkge3JldHVybiAiIjt9CisKKwlDRkZMX0lGb3JtRmlsbGVyKglHZXRJRm9ybUZpbGxlcigpOworCUlGWF9TeXN0ZW1IYW5kbGVyKglHZXRTeXNIYW5kbGVyKCkge3JldHVybiBtX3BTeXNIYW5kbGVyO30KKworcHVibGljOgorCUNQREZTREtfQW5ub3RIYW5kbGVyTWdyKiBHZXRBbm5vdEhhbmRsZXJNZ3IoKTsKKwlJRlhKU19SdW50aW1lKglHZXRKU1J1bnRpbWUoKTsKKwlDUERGU0RLX0FjdGlvbkhhbmRsZXIqIEdldEFjdGlvbkhhbmRlcigpOworcHJpdmF0ZToKKwlDUERGU0RLX0Fubm90SGFuZGxlck1nciogbV9wQW5ub3RIYW5kbGVyTWdyOworCUNQREZTREtfQWN0aW9uSGFuZGxlcioJbV9wQWN0aW9uSGFuZGxlcjsKKwlJRlhKU19SdW50aW1lKgltX3BKU1J1bnRpbWU7CitwdWJsaWM6CisJRlBERl9GT1JNRklMTElORk8qIEdldEZvcm1GaWxsSW5mbygpIHtyZXR1cm4gbV9wSW5mbzt9Citwcml2YXRlOgorCUZQREZfRk9STUZJTExJTkZPKgltX3BJbmZvOworLy8JQ0ZYX01hcFB0clRlbXBsYXRlPENQREZfRG9jdW1lbnQqLCBDUERGU0RLX0RvY3VtZW50Kj4gbV9kb2NNYXA7CisJQ1BERlNES19Eb2N1bWVudCogbV9wU0RLRG9jOworCUNQREZfRG9jdW1lbnQqIG1fcFBERkRvYzsKKworCUNGRkxfSUZvcm1GaWxsZXIqIG1fcElGb3JtRmlsbGVyOworCUlGWF9TeXN0ZW1IYW5kbGVyKiBtX3BTeXNIYW5kbGVyOworCitwdWJsaWM6CisJQ0pTX1J1bnRpbWVGYWN0b3J5KiAgbV9wSlNSdW50aW1lRmFjdG9yeTsKK307CisKKworCisvLyBjbGFzcyBDRlhfQXBwCisvLyB7CisvLyBwdWJsaWM6CisvLyAJQ0ZYX0FwcCgpOm1fcEN1ckRvYyhOVUxMKSB7fQorLy8gCXZvaWQgU2V0QXQoQ1BERl9Eb2N1bWVudCogcFBERkRvYywgQ1BERlNES19Eb2N1bWVudCogcEZYRG9jKTsKKy8vIAlDUERGU0RLX0RvY3VtZW50KiBHZXRBdChDUERGX0RvY3VtZW50KiBwUERGRG9jKTsKKy8vIHB1YmxpYzoKKy8vIAl2b2lkIFNldEN1cnJlbnREb2N1bWVudChDUERGU0RLX0RvY3VtZW50KiBwRlhEb2MpIHttX3BDdXJEb2MgPSBwRlhEb2M7fQorLy8gCUNQREZTREtfRG9jdW1lbnQqIEdldEN1cnJlbnREb2N1bWVudCgpIHtyZXR1cm4gbV9wQ3VyRG9jO30KKy8vIHByaXZhdGU6CisvLyAJQ0ZYX01hcFB0clRlbXBsYXRlPENQREZfRG9jdW1lbnQqLCBDUERGU0RLX0RvY3VtZW50Kj4gbV9kb2NBcnJheTsKKy8vIAlDUERGU0RLX0RvY3VtZW50KiBtX3BDdXJEb2M7CisvLyB9OworY2xhc3MgQ1BERlNES19JbnRlckZvcm07CitjbGFzcyBDUERGU0RLX0RvY3VtZW50Cit7CitwdWJsaWM6CisJQ1BERlNES19Eb2N1bWVudChDUERGX0RvY3VtZW50KiBwRG9jLCBDUERGRG9jX0Vudmlyb25tZW50KiBwRW52KTsKKwl+Q1BERlNES19Eb2N1bWVudCgpOworcHVibGljOgorCUNQREZTREtfSW50ZXJGb3JtKgkJR2V0SW50ZXJGb3JtKCkgOworCUNQREZfRG9jdW1lbnQqCQkJR2V0RG9jdW1lbnQoKSB7cmV0dXJuIG1fcERvYzt9CisKK3B1YmxpYzoKKwl2b2lkCQkJCQlJbml0UGFnZVZpZXcoKTsKKwl2b2lkCQkJCQlBZGRQYWdlVmlldyhDUERGX1BhZ2UqIHBQREZQYWdlLCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpOworCUNQREZTREtfUGFnZVZpZXcqCQlHZXRQYWdlVmlldyhDUERGX1BhZ2UqIHBQREZQYWdlLCBGWF9CT09MIFJlTmV3ID0gVFJVRSk7CisJQ1BERlNES19QYWdlVmlldyoJCUdldFBhZ2VWaWV3KGludCBuSW5kZXgpOworCUNQREZTREtfUGFnZVZpZXcqCQlHZXRDdXJyZW50VmlldygpOworCXZvaWQJCQkJCVJlTW92ZVBhZ2VWaWV3KENQREZfUGFnZSogcFBERlBhZ2UpOworCXZvaWQJCQkJCVVwZGF0ZUFsbFZpZXdzKENQREZTREtfUGFnZVZpZXcqIHBTZW5kZXIsIENQREZTREtfQW5ub3QqIHBBbm5vdCk7CisKKwlDUERGU0RLX0Fubm90KgkJCUdldEZvY3VzQW5ub3QoKTsvL3tyZXR1cm4gTlVMTDt9CisKKwlJRlhKU19SdW50aW1lICoJCQlHZXRKc1J1bnRpbWUoKTsKKwkKKwlGWF9CT09MCQkJCQlTZXRGb2N1c0Fubm90KENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZyA9IDApOy8ve3JldHVybiBGQUxTRTt9CisJRlhfQk9PTAkJCQkJS2lsbEZvY3VzQW5ub3QoRlhfVUlOVCBuRmxhZyA9IDApOworCisJRlhfQk9PTAkJCQkJRXh0cmFjdFBhZ2VzKGNvbnN0IENGWF9Xb3JkQXJyYXkgJmFyckV4dHJhUGFnZXMsIENQREZfRG9jdW1lbnQqIHBEc3REb2MpOworCUZYX0JPT0wJCQkJCUluc2VydFBhZ2VzKGludCBuSW5zZXJ0QXQsIGNvbnN0IENQREZfRG9jdW1lbnQqIHBTcmNEb2MsIGNvbnN0IENGWF9Xb3JkQXJyYXkgJmFyclNyY1BhZ2VzKTsKKwlGWF9CT09MCQkJCQlEZWxldGVQYWdlcyhpbnQgblN0YXJ0LCBpbnQgbkNvdW50KTsKKwlGWF9CT09MCQkJCQlSZXBsYWNlUGFnZXMoaW50IG5QYWdlLCBjb25zdCBDUERGX0RvY3VtZW50KiBwU3JjRG9jLCBjb25zdCBDRlhfV29yZEFycmF5ICZhcnJTcmNQYWdlcyk7CisKKwl2b2lkCQkJCQlPbkNsb3NlRG9jdW1lbnQoKTsKKworCWludAkJCQkJCUdldFBhZ2VDb3VudCgpIHtyZXR1cm4gbV9wRG9jLT5HZXRQYWdlQ291bnQoKTt9CisJRlhfQk9PTAkJCQkJR2V0UGVybWlzc2lvbnMoaW50IG5GbGFnKTsKKwlGWF9CT09MCQkJCQlHZXRDaGFuZ2VNYXJrKCkge3JldHVybiBtX2JDaGFuZ2VNYXNrO30KKwl2b2lkCQkJCQlTZXRDaGFuZ2VNYXJrKCkge21fYkNoYW5nZU1hc2sgPSBUUlVFO30KKwl2b2lkCQkJCQlDbGVhckNoYW5nZU1hcmsoKSB7bV9iQ2hhbmdlTWFzaz0gRkFMU0U7fQorLy8JRlhfQk9PTAkJCQkJR2V0Q2hhbmdlTWFyaygpe3JldHVybiBGQUxTRTt9Ly9Jc0Fubm90TW9kaWZpZWQoKXx8SXNGb3JtTW9kaWZpZWQoKSB8fCBJc1dpZGdldE1vZGlmaWVkKCl8fCBtX25DaGFuZ2VNYXJrPjAgO30JCisvLwl2b2lkICAgICAgICAgICAgICAgICAgICBDbGVhckNoYW5nZU1hcmsoKXt9CisJQ0ZYX1dpZGVTdHJpbmcJCQlHZXRQYXRoKCkgOworCUNQREZfUGFnZSoJCQkJR2V0UGFnZShpbnQgbkluZGV4KTsKKwlDUERGRG9jX0Vudmlyb25tZW50ICoJR2V0RW52KCkge3JldHVybiBtX3BFbnY7IH0KKwl2b2lkCQkJCSAgICBQcm9jSmF2YXNjcmlwdEZ1bigpOworCUZYX0JPT0wJCQkJCVByb2NPcGVuQWN0aW9uKCk7CisJQ1BERl9PQ0NvbnRleHQqCQkJR2V0T0NDb250ZXh0KCk7Citwcml2YXRlOgorCS8vQ0ZYX0FycmF5VGVtcGxhdGU8Q1BERlNES19QYWdlVmlldyo+IG1fcGFnZUFycmF5OworCUNGWF9NYXBQdHJUZW1wbGF0ZTxDUERGX1BhZ2UqLCBDUERGU0RLX1BhZ2VWaWV3Kj4gbV9wYWdlTWFwOworCUNQREZfRG9jdW1lbnQqCQkJbV9wRG9jOworCisJQ1BERlNES19JbnRlckZvcm0qCQltX3BJbnRlckZvcm07CisJQ1BERlNES19Bbm5vdCoJCQltX3BGb2N1c0Fubm90OworCUNQREZEb2NfRW52aXJvbm1lbnQgKgltX3BFbnY7CisJQ1BERl9PQ0NvbnRleHQgKgkJbV9wT2Njb250ZW50OworCUZYX0JPT0wJCQkJCW1fYkNoYW5nZU1hc2s7Cit9OworCitjbGFzcyBDUERGU0RLX1BhZ2VWaWV3Cit7CitwdWJsaWM6CisJQ1BERlNES19QYWdlVmlldyhDUERGU0RLX0RvY3VtZW50KiBwU0RLRG9jLENQREZfUGFnZSogcGFnZSk7CisJfkNQREZTREtfUGFnZVZpZXcoKTsKK3B1YmxpYzoKKwl2aXJ0dWFsCXZvaWQgUGFnZVZpZXdfT25EcmF3KENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucykgOworcHVibGljOgorCUNQREZfQW5ub3QqCQkJCQkJR2V0UERGQW5ub3RBdFBvaW50KEZYX0ZMT0FUIHBhZ2VYLCBGWF9GTE9BVCBwYWdlWSk7CisJQ1BERlNES19Bbm5vdCoJCQkJCUdldEZYQW5ub3RBdFBvaW50KEZYX0ZMT0FUIHBhZ2VYLCBGWF9GTE9BVCBwYWdlWSk7CisJQ1BERl9Bbm5vdCoJCQkJCQlHZXRQREZXaWRnZXRBdFBvaW50KEZYX0ZMT0FUIHBhZ2VYLCBGWF9GTE9BVCBwYWdlWSk7CisJQ1BERlNES19Bbm5vdCoJCQkJCUdldEZYV2lkZ2V0QXRQb2ludChGWF9GTE9BVCBwYWdlWCwgRlhfRkxPQVQgcGFnZVkpOworCUNQREZTREtfQW5ub3QqCQkJCQlHZXRGb2N1c0Fubm90KCkgOworCXZvaWQJCQkJCQkJU2V0Rm9jdXNBbm5vdChDUERGU0RLX0Fubm90KiBwU0RLQW5ub3QsRlhfVUlOVCBuRmxhZyA9IDApIHttX3BTREtEb2MtPlNldEZvY3VzQW5ub3QocFNES0Fubm90LCBuRmxhZyk7fQorCUZYX0JPT0wJCQkJCQkJS2lsbEZvY3VzQW5ub3QoRlhfVUlOVCBuRmxhZyA9IDApIHtyZXR1cm4gbV9wU0RLRG9jLT5LaWxsRm9jdXNBbm5vdChuRmxhZyk7fQorCUZYX0JPT0wJCQkJCQkJQW5ub3RfSGFzQXBwZWFyYW5jZShDUERGX0Fubm90KiBwQW5ub3QpOworCisJQ1BERlNES19Bbm5vdCoJCQkJCUFkZEFubm90KENQREZfRGljdGlvbmFyeSAqIHBEaWN0KTsKKwlDUERGU0RLX0Fubm90KgkJCQkJQWRkQW5ub3QoRlhfTFBDU1RSIGxwU3ViVHlwZSxDUERGX0RpY3Rpb25hcnkgKiBwRGljdCk7CisJQ1BERlNES19Bbm5vdCoJCQkJCUFkZEFubm90KENQREZfQW5ub3QgKiBwUERGQW5ub3QpOworCUZYX0JPT0wJCQkJCQkJRGVsZXRlQW5ub3QoQ1BERlNES19Bbm5vdCogcEFubm90KTsJCQkJCQkJCisJCisJaW50CQkJCQkJCQlDb3VudEFubm90cygpOworCUNQREZTREtfQW5ub3QqCQkJCQlHZXRBbm5vdChpbnQgbkluZGV4KTsKKwlDUERGU0RLX0Fubm90KgkJCQkgICAgR2V0QW5ub3RCeURpY3QoQ1BERl9EaWN0aW9uYXJ5ICogcERpY3QpOworCUNQREZfUGFnZSoJCQkJCQlHZXRQREZQYWdlKCl7cmV0dXJuIG1fcGFnZTt9CisJQ1BERl9Eb2N1bWVudCoJCQkJCUdldFBERkRvY3VtZW50KCk7CisJQ1BERlNES19Eb2N1bWVudCoJCQkJR2V0U0RLRG9jdW1lbnQoKSB7cmV0dXJuIG1fcFNES0RvYzt9CQorcHVibGljOgorCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25MQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX1VJTlQgbkZsYWcpOworCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25MQnV0dG9uVXAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9VSU5UIG5GbGFnKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uQ2hhcihpbnQgbkNoYXIsIEZYX1VJTlQgbkZsYWcpOworCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25LZXlEb3duKGludCBuS2V5Q29kZSwgaW50IG5GbGFnKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uS2V5VXAoaW50IG5LZXlDb2RlLCBpbnQgbkZsYWcpOworCisJdmlydHVhbCBGWF9CT09MCQkJCQlPbk1vdXNlTW92ZShjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIGludCBuRmxhZyk7CisJdmlydHVhbCBGWF9CT09MCQkJCQlPbk1vdXNlV2hlZWwoZG91YmxlIGRlbHRhWCwgZG91YmxlIGRlbHRhWSxjb25zdCBDUERGX1BvaW50JiBwb2ludCwgaW50IG5GbGFnKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCUlzVmFsaWRBbm5vdChGWF9MUFZPSUQgcCk7CitwdWJsaWM6CisJdmlydHVhbCB2b2lkCQkJCQlHZXRDdXJyZW50TWF0cml4KENQREZfTWF0cml4JiBtYXRyaXgpIHttYXRyaXggPSBtX2N1ck1hdHJpeDt9CisJdmlydHVhbCB2b2lkCQkJCQlVcGRhdGVSZWN0cyhDRlhfUmVjdEFycmF5JiByZWN0cyk7CisJdm9pZAkJCQkJCQlVcGRhdGVWaWV3KENQREZTREtfQW5ub3QqIHBBbm5vdCk7CisJQ0ZYX1B0ckFycmF5KgkJCQkJR2V0QW5ub3RMaXN0KCl7IHJldHVybiAmbV9meEFubm90QXJyYXk7IH0KKworcHVibGljOgorCXZpcnR1YWwgaW50CQkJCQkJR2V0UGFnZUluZGV4KCk7CisJdm9pZAkJCQkJCQlMb2FkRlhBbm5vdHMoKTsKK3ByaXZhdGU6CisJQ1BERl9NYXRyaXggbV9jdXJNYXRyaXg7CisKK3ByaXZhdGU6CisJdm9pZCBQYWdlVmlld19PbkhpZ2hsaWdodEZvcm1GaWVsZHMoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERlNES19XaWRnZXQqIHBXaWRnZXQpOworCitwcml2YXRlOgorCUNQREZfUGFnZSogbV9wYWdlOworCUNQREZfQW5ub3RMaXN0KiBtX3BBbm5vdExpc3Q7CisKKwkvL0NQREZTREtfQW5ub3QqIG1fcEZvY3VzQW5ub3Q7CisJQ0ZYX1B0ckFycmF5ICBtX2Z4QW5ub3RBcnJheTsKKworCUNQREZTREtfRG9jdW1lbnQqIG1fcFNES0RvYzsKK3ByaXZhdGU6CisJQ1BERlNES19XaWRnZXQqIG1fQ2FwdHVyZVdpZGdldDsKKwlGWF9CT09MIG1fYkVudGVyV2lkZ2V0OworCUZYX0JPT0wgbV9iRXhpdFdpZGdldDsKKwlGWF9CT09MIG1fYk9uV2lkZ2V0OworcHVibGljOgorCXZvaWQgU2V0VmFsaWQoRlhfQk9PTCBiVmFsaWQpIHttX2JWYWxpZCA9IGJWYWxpZDt9CisJRlhfQk9PTCBJc1ZhbGlkKCkge3JldHVybiBtX2JWYWxpZDt9Citwcml2YXRlOgorCUZYX0JPT0wgbV9iVmFsaWQ7Cit9OworCisKK3RlbXBsYXRlPGNsYXNzIFRZUEU+CitjbGFzcyBDR1dfQXJyYXlUZW1wbGF0ZSA6IHB1YmxpYyBDRlhfQXJyYXlUZW1wbGF0ZTxUWVBFPgoreworcHVibGljOiAKKwlDR1dfQXJyYXlUZW1wbGF0ZSgpe30KKwl2aXJ0dWFsIH5DR1dfQXJyYXlUZW1wbGF0ZSgpe30KKwkKKwl0eXBlZGVmIGludCAoKkxQX0NPTVBBUkUpKFRZUEUgcDEsIFRZUEUgcDIpOworCQorCXZvaWQgU29ydChMUF9DT01QQVJFIHBDb21wYXJlLCBGWF9CT09MIGJBc2NlbnQgPSBUUlVFKQorCXsKKwkJaW50IG5TaXplID0gdGhpcy0+R2V0U2l6ZSgpOworCQlRdWlja1NvcnQoMCwgblNpemUgLTEsIGJBc2NlbnQsIHBDb21wYXJlKTsKKwl9CisJCitwcml2YXRlOgorCXZvaWQgUXVpY2tTb3J0KEZYX1VJTlQgblN0YXJ0UG9zLCBGWF9VSU5UIG5TdG9wUG9zLCBGWF9CT09MIGJBc2NlbmQsIExQX0NPTVBBUkUgcENvbXBhcmUpCisJeworCQlpZiAoblN0YXJ0UG9zID49IG5TdG9wUG9zKSByZXR1cm47CisJCQorCQlpZiAoKG5TdG9wUG9zIC0gblN0YXJ0UG9zKSA9PSAxKQorCQl7CisJCQlUWVBFIFZhbHVlMSA9IHRoaXMtPkdldEF0KG5TdGFydFBvcyk7CisJCQlUWVBFIFZhbHVlMiA9IHRoaXMtPkdldEF0KG5TdG9wUG9zKTsKKwkJCQorCQkJaW50IGlHcmVhdGUgPSAoKnBDb21wYXJlKShWYWx1ZTEsIFZhbHVlMik7CisJCQlpZiAoKGJBc2NlbmQgJiYgaUdyZWF0ZSA+IDApIHx8ICghYkFzY2VuZCAmJiBpR3JlYXRlIDwgMCkpCisJCQl7CisJCQkJdGhpcy0+U2V0QXQoblN0YXJ0UG9zLCBWYWx1ZTIpOworCQkJCXRoaXMtPlNldEF0KG5TdG9wUG9zLCBWYWx1ZTEpOworCQkJfQorCQkJcmV0dXJuOworCQl9CisJCQorCQlGWF9VSU5UIG0gPSAoblN0YXJ0UG9zICsgblN0b3BQb3MpIC8gMjsKKwkJRlhfVUlOVCBpID0gblN0YXJ0UG9zOworCQkKKwkJVFlQRSBWYWx1ZSA9IHRoaXMtPkdldEF0KG0pOworCQkKKwkJd2hpbGUgKGkgPCBtKQorCQl7CisJCQlUWVBFIHRlbXAgPSB0aGlzLT5HZXRBdChpKTsKKwkJCQorCQkJaW50IGlHcmVhdGUgPSAoKnBDb21wYXJlKSh0ZW1wLCBWYWx1ZSk7CisJCQlpZiAoKGJBc2NlbmQgJiYgaUdyZWF0ZSA+IDApIHx8ICghYkFzY2VuZCAmJiBpR3JlYXRlIDwgMCkpCisJCQl7CisJCQkJdGhpcy0+SW5zZXJ0QXQobSsxLCB0ZW1wKTsKKwkJCQl0aGlzLT5SZW1vdmVBdChpKTsKKwkJCQltLS07CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaSsrOworCQkJfQorCQl9CisJCQorCQlGWF9VSU5UIGogPSBuU3RvcFBvczsKKwkJCisJCXdoaWxlIChqID4gbSkKKwkJeworCQkJVFlQRSB0ZW1wID0gdGhpcy0+R2V0QXQoaik7CisJCQkKKwkJCWludCBpR3JlYXRlID0gKCpwQ29tcGFyZSkodGVtcCwgVmFsdWUpOworCQkJaWYgKChiQXNjZW5kICYmIGlHcmVhdGUgPCAwKSB8fCAoIWJBc2NlbmQgJiYgaUdyZWF0ZSA+IDApKQorCQkJeworCQkJCXRoaXMtPlJlbW92ZUF0KGopOworCQkJCXRoaXMtPkluc2VydEF0KG0sIHRlbXApOworCQkJCW0rKzsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlqLS07CisJCQl9CisJCX0KKwkJCisJCWlmIChuU3RhcnRQb3MgPCBtKSBRdWlja1NvcnQoblN0YXJ0UG9zLCBtLCBiQXNjZW5kLCBwQ29tcGFyZSk7CisJCWlmIChuU3RvcFBvcyA+IG0pIFF1aWNrU29ydChtLCBuU3RvcFBvcywgYkFzY2VuZCwgcENvbXBhcmUpOworCX0KK307CisKKworI2VuZGlmIC8vX0ZQREZTREtfTUdSX0gKKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9pbmNsdWRlL2ZzZGtfcmVuZGVyY29udGV4dC5oIGIvZnBkZnNkay9pbmNsdWRlL2ZzZGtfcmVuZGVyY29udGV4dC5oCmluZGV4IGMzM2RmZGQuLjUxYzM3YjMgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9mc2RrX3JlbmRlcmNvbnRleHQuaAorKysgYi9mcGRmc2RrL2luY2x1ZGUvZnNka19yZW5kZXJjb250ZXh0LmgKQEAgLTEsNDEgKzEsNDEgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX1JFTkRFUkNPTlRFTlRfSF8NCi0jZGVmaW5lIF9SRU5ERVJDT05URU5UX0hfDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19kZWZpbmUuaCINCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mcGRmX3Byb2dyZXNzaXZlLmgiDQotDQotLy8gRXZlcnl0aGluZyBhYm91dCByZW5kZXJpbmcgaXMgcHV0IGhlcmU6IGZvciBPT00gcmVjb3ZlcnkNCi1jbGFzcyBDUmVuZGVyQ29udGV4dCA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0JQ1JlbmRlckNvbnRleHQoKSB7IENsZWFyKCk7IH0NCi0JfkNSZW5kZXJDb250ZXh0KCk7DQotCQ0KLQl2b2lkIENsZWFyKCk7DQotCQ0KLQlDRlhfUmVuZGVyRGV2aWNlKgkJbV9wRGV2aWNlOw0KLQlDUERGX1JlbmRlckNvbnRleHQqCQltX3BDb250ZXh0Ow0KLQlDUERGX1Byb2dyZXNzaXZlUmVuZGVyZXIqCW1fcFJlbmRlcmVyOw0KLQlDUERGX0Fubm90TGlzdCoJCQltX3BBbm5vdHM7DQotCUNQREZfUmVuZGVyT3B0aW9ucyoJCW1fcE9wdGlvbnM7DQotI2lmZGVmIF9XSU4zMl9XQ0UNCi0JQ0ZYX0RJQml0bWFwKgltX3BCaXRtYXA7DQotCUhCSVRNQVAJCQltX2hCaXRtYXA7DQotI2VuZGlmDQotfTsNCi0NCi1jbGFzcyBJRlNES19QQVVTRV9BZGFwdGVyIDogcHVibGljIElGWF9QYXVzZQ0KLXsNCi1wdWJsaWM6DQotCUlGU0RLX1BBVVNFX0FkYXB0ZXIoSUZTREtfUEFVU0UqIElQYXVzZSApOw0KLQlGWF9CT09MIE5lZWRUb1BhdXNlTm93KCk7DQotCQ0KLXByaXZhdGU6DQotCUlGU0RLX1BBVVNFKiBtX0lQYXVzZTsNCi19Ow0KLSNlbmRpZg0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX1JFTkRFUkNPTlRFTlRfSF8KKyNkZWZpbmUgX1JFTkRFUkNPTlRFTlRfSF8KKyNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfZGVmaW5lLmgiCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9mcGRmX3Byb2dyZXNzaXZlLmgiCisKKy8vIEV2ZXJ5dGhpbmcgYWJvdXQgcmVuZGVyaW5nIGlzIHB1dCBoZXJlOiBmb3IgT09NIHJlY292ZXJ5CitjbGFzcyBDUmVuZGVyQ29udGV4dCA6IHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisJQ1JlbmRlckNvbnRleHQoKSB7IENsZWFyKCk7IH0KKwl+Q1JlbmRlckNvbnRleHQoKTsKKwkKKwl2b2lkIENsZWFyKCk7CisJCisJQ0ZYX1JlbmRlckRldmljZSoJCW1fcERldmljZTsKKwlDUERGX1JlbmRlckNvbnRleHQqCQltX3BDb250ZXh0OworCUNQREZfUHJvZ3Jlc3NpdmVSZW5kZXJlcioJbV9wUmVuZGVyZXI7CisJQ1BERl9Bbm5vdExpc3QqCQkJbV9wQW5ub3RzOworCUNQREZfUmVuZGVyT3B0aW9ucyoJCW1fcE9wdGlvbnM7CisjaWZkZWYgX1dJTjMyX1dDRQorCUNGWF9ESUJpdG1hcCoJbV9wQml0bWFwOworCUhCSVRNQVAJCQltX2hCaXRtYXA7CisjZW5kaWYKK307CisKK2NsYXNzIElGU0RLX1BBVVNFX0FkYXB0ZXIgOiBwdWJsaWMgSUZYX1BhdXNlCit7CitwdWJsaWM6CisJSUZTREtfUEFVU0VfQWRhcHRlcihJRlNES19QQVVTRSogSVBhdXNlICk7CisJRlhfQk9PTCBOZWVkVG9QYXVzZU5vdygpOworCQorcHJpdmF0ZToKKwlJRlNES19QQVVTRSogbV9JUGF1c2U7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvZnhfc3lzdGVtaGFuZGxlci5oIGIvZnBkZnNkay9pbmNsdWRlL2Z4X3N5c3RlbWhhbmRsZXIuaAppbmRleCBjNzYwMzc3Li5iOWFjNDEzIDEwMDY0NAotLS0gYS9mcGRmc2RrL2luY2x1ZGUvZnhfc3lzdGVtaGFuZGxlci5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9meF9zeXN0ZW1oYW5kbGVyLmgKQEAgLTEsODUgKzEsODUgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0ZYX1NZU1RFTUhBTkRMRVJfSF8NCi0jZGVmaW5lIF9GWF9TWVNURU1IQU5ETEVSX0hfDQotDQotdHlwZWRlZiBGWF9MUFZPSUQJCQkJRlhfSFdORDsNCi10eXBlZGVmIEZYX0xQVk9JRAkJCQlGWF9ITUVOVTsNCi10eXBlZGVmIHZvaWQJCQkJCSgqVGltZXJDYWxsYmFjaykoRlhfSU5UMzIgaWRFdmVudCk7DQotDQotdHlwZWRlZiBzdHJ1Y3QgX0ZYX1NZU1RFTVRJTUUgDQotew0KLSAgICBGWF9XT1JEIHdZZWFyOw0KLSAgICBGWF9XT1JEIHdNb250aDsNCi0gICAgRlhfV09SRCB3RGF5T2ZXZWVrOw0KLSAgICBGWF9XT1JEIHdEYXk7DQotICAgIEZYX1dPUkQgd0hvdXI7DQotICAgIEZYX1dPUkQgd01pbnV0ZTsNCi0gICAgRlhfV09SRCB3U2Vjb25kOw0KLSAgICBGWF9XT1JEIHdNaWxsaXNlY29uZHM7DQotfUZYX1NZU1RFTVRJTUU7DQotDQotLy9jdXJzb3Igc3R5bGUNCi0jZGVmaW5lIEZYQ1RfQVJST1cJCQkJMA0KLSNkZWZpbmUgRlhDVF9ORVNXCQkJCTENCi0jZGVmaW5lIEZYQ1RfTldTRQkJCQkyDQotI2RlZmluZSBGWENUX1ZCRUFNCQkJCTMNCi0jZGVmaW5lIEZYQ1RfSEJFQU0JCQkJNA0KLSNkZWZpbmUgRlhDVF9IQU5ECQkJCTUNCi0NCi1jbGFzcyBJRlhfU3lzdGVtSGFuZGxlcg0KLXsNCi1wdWJsaWM6DQotCXZpcnR1YWwgfklGWF9TeXN0ZW1IYW5kbGVyKCkge30NCi0JdmlydHVhbCB2b2lkCQkJCUludmFsaWRhdGVSZWN0KEZYX0hXTkQgaFduZCwgRlhfUkVDVCByZWN0KSA9IDA7DQotICAgIHZpcnR1YWwgdm9pZAkJCQlPdXRwdXRTZWxlY3RlZFJlY3Qodm9pZCogcEZvcm1GaWxsZXIsIENQREZfUmVjdCZyZWN0KSA9IDA7DQotDQotCXZpcnR1YWwgRlhfQk9PTAkJCQlJc1NlbGVjdGlvbkltcGxlbWVudGVkKCkgPSAwOw0KLQ0KLQl2aXJ0dWFsIENGWF9XaWRlU3RyaW5nCQlHZXRDbGlwYm9hcmRUZXh0KEZYX0hXTkQgaFduZCkgPSAwOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJU2V0Q2xpcGJvYXJkVGV4dChGWF9IV05EIGhXbmQsIENGWF9XaWRlU3RyaW5nIHN0cmluZykgPSAwOw0KLQkNCi0JdmlydHVhbCB2b2lkCQkJCUNsaWVudFRvU2NyZWVuKEZYX0hXTkQgaFduZCwgRlhfSU5UMzImIHgsIEZYX0lOVDMyJiB5KSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQlTY3JlZW5Ub0NsaWVudChGWF9IV05EIGhXbmQsIEZYX0lOVDMyJiB4LCBGWF9JTlQzMiYgeSkgPSAwOw0KLQ0KLQkvKmN1cnNvciBzdHlsZQ0KLQlGWENUX0FSUk9XCQ0KLQlGWENUX05FU1cJCQ0KLQlGWENUX05XU0UJCQ0KLQlGWENUX1ZCRUFNCQkNCi0JRlhDVF9IQkVBTQkJDQotCUZYQ1RfSEFORA0KLQkqLw0KLQl2aXJ0dWFsIHZvaWQJCQkJU2V0Q3Vyc29yKEZYX0lOVDMyIG5DdXJzb3JUeXBlKSA9IDA7DQotDQotCXZpcnR1YWwgRlhfSE1FTlUJCQlDcmVhdGVQb3B1cE1lbnUoKSA9IDA7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlBcHBlbmRNZW51SXRlbShGWF9ITUVOVSBoTWVudSwgRlhfSU5UMzIgbklETmV3SXRlbSwgQ0ZYX1dpZGVTdHJpbmcgc3RyaW5nKSA9IDA7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlFbmFibGVNZW51SXRlbShGWF9ITUVOVSBoTWVudSwgRlhfSU5UMzIgbklESXRlbSwgRlhfQk9PTCBiRW5hYmxlZCkgPSAwOw0KLQl2aXJ0dWFsIEZYX0lOVDMyCQkJVHJhY2tQb3B1cE1lbnUoRlhfSE1FTlUgaE1lbnUsIEZYX0lOVDMyIHgsIEZYX0lOVDMyIHksIEZYX0hXTkQgaFBhcmVudCkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJRGVzdHJveU1lbnUoRlhfSE1FTlUgaE1lbnUpID0gMDsNCi0NCi0JdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJR2V0TmF0aXZlVHJ1ZVR5cGVGb250KEZYX0lOVDMyIG5DaGFyc2V0KSA9IDA7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlGaW5kTmF0aXZlVHJ1ZVR5cGVGb250KEZYX0lOVDMyIG5DaGFyc2V0LCBDRlhfQnl0ZVN0cmluZyBzRm9udEZhY2VOYW1lKSA9IDA7DQotCXZpcnR1YWwgQ1BERl9Gb250KgkJCUFkZE5hdGl2ZVRydWVUeXBlRm9udFRvUERGKENQREZfRG9jdW1lbnQqIHBEb2MsIENGWF9CeXRlU3RyaW5nIHNGb250RmFjZU5hbWUsIEZYX0JZVEUgbkNoYXJzZXQpID0gMDsNCi0NCi0JdmlydHVhbCBGWF9JTlQzMgkJCVNldFRpbWVyKEZYX0lOVDMyIHVFbGFwc2UsIFRpbWVyQ2FsbGJhY2sgbHBUaW1lckZ1bmMpID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCUtpbGxUaW1lcihGWF9JTlQzMiBuSUQpID0gMDsNCi0NCi0NCi0JdmlydHVhbCBGWF9CT09MCQkJCUlzU0hJRlRLZXlEb3duKEZYX0RXT1JEIG5GbGFnKSA9IDA7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlJc0NUUkxLZXlEb3duKEZYX0RXT1JEIG5GbGFnKSA9IDA7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlJc0FMVEtleURvd24oRlhfRFdPUkQgbkZsYWcpID0gMDsNCi0JdmlydHVhbCBGWF9CT09MCQkJCUlzSU5TRVJUS2V5RG93bihGWF9EV09SRCBuRmxhZykgPSAwOw0KLQ0KLQl2aXJ0dWFsCUZYX1NZU1RFTVRJTUUJCUdldExvY2FsVGltZSgpID0gMDsNCi0NCi0JdmlydHVhbCBGWF9JTlQzMgkJCUdldENoYXJTZXQoKSA9IDA7CQ0KLQl2aXJ0dWFsIHZvaWQgCQkJCVNldENoYXJTZXQoRlhfSU5UMzIgbkNoYXJTZXQpID0gMDsNCi19Ow0KLQ0KLSNlbmRpZiAvL19GWF9TWVNURU1IQU5ETEVSX0hfDQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfRlhfU1lTVEVNSEFORExFUl9IXworI2RlZmluZSBfRlhfU1lTVEVNSEFORExFUl9IXworCit0eXBlZGVmIEZYX0xQVk9JRAkJCQlGWF9IV05EOwordHlwZWRlZiBGWF9MUFZPSUQJCQkJRlhfSE1FTlU7Cit0eXBlZGVmIHZvaWQJCQkJCSgqVGltZXJDYWxsYmFjaykoRlhfSU5UMzIgaWRFdmVudCk7CisKK3R5cGVkZWYgc3RydWN0IF9GWF9TWVNURU1USU1FIAoreworICAgIEZYX1dPUkQgd1llYXI7CisgICAgRlhfV09SRCB3TW9udGg7CisgICAgRlhfV09SRCB3RGF5T2ZXZWVrOworICAgIEZYX1dPUkQgd0RheTsKKyAgICBGWF9XT1JEIHdIb3VyOworICAgIEZYX1dPUkQgd01pbnV0ZTsKKyAgICBGWF9XT1JEIHdTZWNvbmQ7CisgICAgRlhfV09SRCB3TWlsbGlzZWNvbmRzOworfUZYX1NZU1RFTVRJTUU7CisKKy8vY3Vyc29yIHN0eWxlCisjZGVmaW5lIEZYQ1RfQVJST1cJCQkJMAorI2RlZmluZSBGWENUX05FU1cJCQkJMQorI2RlZmluZSBGWENUX05XU0UJCQkJMgorI2RlZmluZSBGWENUX1ZCRUFNCQkJCTMKKyNkZWZpbmUgRlhDVF9IQkVBTQkJCQk0CisjZGVmaW5lIEZYQ1RfSEFORAkJCQk1CisKK2NsYXNzIElGWF9TeXN0ZW1IYW5kbGVyCit7CitwdWJsaWM6CisJdmlydHVhbCB+SUZYX1N5c3RlbUhhbmRsZXIoKSB7fQorCXZpcnR1YWwgdm9pZAkJCQlJbnZhbGlkYXRlUmVjdChGWF9IV05EIGhXbmQsIEZYX1JFQ1QgcmVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZAkJCQlPdXRwdXRTZWxlY3RlZFJlY3Qodm9pZCogcEZvcm1GaWxsZXIsIENQREZfUmVjdCZyZWN0KSA9IDA7CisKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJSXNTZWxlY3Rpb25JbXBsZW1lbnRlZCgpID0gMDsKKworCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCUdldENsaXBib2FyZFRleHQoRlhfSFdORCBoV25kKSA9IDA7CisJdmlydHVhbCBGWF9CT09MCQkJCVNldENsaXBib2FyZFRleHQoRlhfSFdORCBoV25kLCBDRlhfV2lkZVN0cmluZyBzdHJpbmcpID0gMDsKKwkKKwl2aXJ0dWFsIHZvaWQJCQkJQ2xpZW50VG9TY3JlZW4oRlhfSFdORCBoV25kLCBGWF9JTlQzMiYgeCwgRlhfSU5UMzImIHkpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJU2NyZWVuVG9DbGllbnQoRlhfSFdORCBoV25kLCBGWF9JTlQzMiYgeCwgRlhfSU5UMzImIHkpID0gMDsKKworCS8qY3Vyc29yIHN0eWxlCisJRlhDVF9BUlJPVwkKKwlGWENUX05FU1cJCQorCUZYQ1RfTldTRQkJCisJRlhDVF9WQkVBTQkJCisJRlhDVF9IQkVBTQkJCisJRlhDVF9IQU5ECisJKi8KKwl2aXJ0dWFsIHZvaWQJCQkJU2V0Q3Vyc29yKEZYX0lOVDMyIG5DdXJzb3JUeXBlKSA9IDA7CisKKwl2aXJ0dWFsIEZYX0hNRU5VCQkJQ3JlYXRlUG9wdXBNZW51KCkgPSAwOworCXZpcnR1YWwgRlhfQk9PTAkJCQlBcHBlbmRNZW51SXRlbShGWF9ITUVOVSBoTWVudSwgRlhfSU5UMzIgbklETmV3SXRlbSwgQ0ZYX1dpZGVTdHJpbmcgc3RyaW5nKSA9IDA7CisJdmlydHVhbCBGWF9CT09MCQkJCUVuYWJsZU1lbnVJdGVtKEZYX0hNRU5VIGhNZW51LCBGWF9JTlQzMiBuSURJdGVtLCBGWF9CT09MIGJFbmFibGVkKSA9IDA7CisJdmlydHVhbCBGWF9JTlQzMgkJCVRyYWNrUG9wdXBNZW51KEZYX0hNRU5VIGhNZW51LCBGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBGWF9IV05EIGhQYXJlbnQpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJRGVzdHJveU1lbnUoRlhfSE1FTlUgaE1lbnUpID0gMDsKKworCXZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCUdldE5hdGl2ZVRydWVUeXBlRm9udChGWF9JTlQzMiBuQ2hhcnNldCkgPSAwOworCXZpcnR1YWwgRlhfQk9PTAkJCQlGaW5kTmF0aXZlVHJ1ZVR5cGVGb250KEZYX0lOVDMyIG5DaGFyc2V0LCBDRlhfQnl0ZVN0cmluZyBzRm9udEZhY2VOYW1lKSA9IDA7CisJdmlydHVhbCBDUERGX0ZvbnQqCQkJQWRkTmF0aXZlVHJ1ZVR5cGVGb250VG9QREYoQ1BERl9Eb2N1bWVudCogcERvYywgQ0ZYX0J5dGVTdHJpbmcgc0ZvbnRGYWNlTmFtZSwgRlhfQllURSBuQ2hhcnNldCkgPSAwOworCisJdmlydHVhbCBGWF9JTlQzMgkJCVNldFRpbWVyKEZYX0lOVDMyIHVFbGFwc2UsIFRpbWVyQ2FsbGJhY2sgbHBUaW1lckZ1bmMpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJS2lsbFRpbWVyKEZYX0lOVDMyIG5JRCkgPSAwOworCisKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJSXNTSElGVEtleURvd24oRlhfRFdPUkQgbkZsYWcpID0gMDsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJSXNDVFJMS2V5RG93bihGWF9EV09SRCBuRmxhZykgPSAwOworCXZpcnR1YWwgRlhfQk9PTAkJCQlJc0FMVEtleURvd24oRlhfRFdPUkQgbkZsYWcpID0gMDsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJSXNJTlNFUlRLZXlEb3duKEZYX0RXT1JEIG5GbGFnKSA9IDA7CisKKwl2aXJ0dWFsCUZYX1NZU1RFTVRJTUUJCUdldExvY2FsVGltZSgpID0gMDsKKworCXZpcnR1YWwgRlhfSU5UMzIJCQlHZXRDaGFyU2V0KCkgPSAwOwkKKwl2aXJ0dWFsIHZvaWQgCQkJCVNldENoYXJTZXQoRlhfSU5UMzIgbkNoYXJTZXQpID0gMDsKK307CisKKyNlbmRpZiAvL19GWF9TWVNURU1IQU5ETEVSX0hfCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9meGVkaXQvZnhfZWRpdC5oIGIvZnBkZnNkay9pbmNsdWRlL2Z4ZWRpdC9meF9lZGl0LmgKaW5kZXggMmI3M2U2MS4uOTViOTA5NiAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2Z4ZWRpdC9meF9lZGl0LmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2Z4ZWRpdC9meF9lZGl0LmgKQEAgLTEsNDcxICsxLDQ3MSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlhfRURJVF9IXw0KLSNkZWZpbmUgX0ZYX0VESVRfSF8NCi0NCi0jZGVmaW5lIFBWVFdPUkRfU1RZTEVfTk9STUFMCQkJCTB4MDAwMEwNCi0jZGVmaW5lIFBWVFdPUkRfU1RZTEVfSElHSExJR0hUCQkJCTB4MDAwMUwNCi0jZGVmaW5lIFBWVFdPUkRfU1RZTEVfVU5ERVJMSU5FCQkJCTB4MDAwMkwNCi0jZGVmaW5lIFBWVFdPUkRfU1RZTEVfQ1JPU1NPVVQJCQkJMHgwMDA0TA0KLSNkZWZpbmUgUFZUV09SRF9TVFlMRV9TUVVJR0dMWQkJCQkweDAwMDhMDQotI2RlZmluZSBQVlRXT1JEX1NUWUxFX0RVQUxDUk9TU09VVAkJCTB4MDAxMEwNCi0jZGVmaW5lIFBWVFdPUkRfU1RZTEVfQk9MRAkJCQkJMHgwMDIwTA0KLSNkZWZpbmUgUFZUV09SRF9TVFlMRV9JVEFMSUMJCQkJMHgwMDQwTA0KLQ0KLSNkZWZpbmUgRlhfRURJVF9JU0xBVElOV09SRCh1KQkodSA9PSAweDJEIHx8ICh1IDw9IDB4MDA1QSAmJiB1ID49IDB4MDA0MSkgfHwgKHUgPD0gMHgwMDdBICYmIHUgPj0gMHgwMDYxKSB8fCAodSA8PSAweDAyQUYgJiYgdSA+PSAweDAwQzApKQ0KLQ0KLSNpZmRlZiBGWF9SRUFERVJfRExMDQotCSNpZmRlZiBGWEVUX0VYUE9SVA0KLQkJI2RlZmluZSBGWEVUX0NMQVNTIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQ0KLQkjZWxzZQ0KLQkJI2RlZmluZSBGWEVUX0NMQVNTDQotCSNlbmRpZg0KLSNlbHNlDQotCSNkZWZpbmUgRlhFVF9DTEFTUw0KLSNlbmRpZg0KLQ0KLSNpZm5kZWYgREVGQVVMVF9DSEFSU0VUDQotI2RlZmluZSBERUZBVUxUX0NIQVJTRVQgICAgICAgICAxDQotI2VuZGlmIA0KLQ0KLWNsYXNzIElGWF9FZGl0X0ZvbnRNYXA7DQotY2xhc3MgSUZYX0VkaXRfTm90aWZ5Ow0KLWNsYXNzIElGWF9FZGl0X0l0ZXJhdG9yOw0KLWNsYXNzIElGWF9FZGl0X1VuZG9JdGVtOw0KLWNsYXNzIElGWF9FZGl0Ow0KLWNsYXNzIElGWF9MaXN0X05vdGlmeTsNCi1jbGFzcyBJRlhfTGlzdDsNCi1jbGFzcyBJRlhfU3lzdGVtSGFuZGxlcjsNCi0NCi1jbGFzcyBJRlhfRWRpdF9Gb250TWFwDQotew0KLXB1YmxpYzoNCi0JLy9tYXAgYSBmb250aW5kZXggdG8gcGRmIGZvbnQuDQotCXZpcnR1YWwgQ1BERl9Gb250ICoJCQkJCQlHZXRQREZGb250KEZYX0lOVDMyIG5Gb250SW5kZXgpID0gMDsNCi0JLy9nZXQgdGhlIGFsaWFzIG9mIGEgcGRmIGZvbnQuDQotCXZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldFBERkZvbnRBbGlhcyhGWF9JTlQzMiBuRm9udEluZGV4KSA9IDA7DQotCS8vZ2V0IHRoZSBpbmRleCBvZiBhIGZvbnQgdGhhdCBjYW4gc2hvdyBhIHdvcmQuDQotCXZpcnR1YWwgRlhfSU5UMzIJCQkJCQlHZXRXb3JkRm9udEluZGV4KEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCwgRlhfSU5UMzIgbkZvbnRJbmRleCkgPSAwOw0KLQkvL2dldCB0aGUgY2hhcmNvZGUgb2Ygd29yZCBmcm9tIHVuaWNvZGUNCi0JdmlydHVhbCBGWF9JTlQzMgkJCQkJCUNoYXJDb2RlRnJvbVVuaWNvZGUoRlhfSU5UMzIgbkZvbnRJbmRleCwgRlhfV09SRCB3b3JkKSA9IDA7DQotCS8vZ2V0IHRoZSBjaGFyc2V0IG9mIHVuaWNvZGUNCi0JdmlydHVhbCBGWF9JTlQzMgkJCQkJCUNoYXJTZXRGcm9tVW5pY29kZShGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIG5PbGRDaGFyc2V0KSA9IDA7DQotfTsNCi0NCi1jbGFzcyBJRlhfRWRpdF9Ob3RpZnkNCi17DQotCS8vdGhpcyBjbGFzcyBpcyBpbXBsZW1lbnRlZCBieSB1c2VyDQotcHVibGljOg0KLQkvL3NldCB0aGUgaG9yaXpvbnRhbCBzY3JvbGxiYXIgaW5mb3JtYXRpb24uDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlJT25TZXRTY3JvbGxJbmZvWChGWF9GTE9BVCBmUGxhdGVNaW4sIEZYX0ZMT0FUIGZQbGF0ZU1heCwgDQotCQkJCQkJCQkJCQkJRlhfRkxPQVQgZkNvbnRlbnRNaW4sIEZYX0ZMT0FUIGZDb250ZW50TWF4LCANCi0JCQkJCQkJCQkJCQlGWF9GTE9BVCBmU21hbGxTdGVwLCBGWF9GTE9BVCBmQmlnU3RlcCkgPSAwOw0KLQkvL3NldCB0aGUgdmVydGljYWwgc2Nyb2xsYmFyIGluZm9ybWF0aW9uLg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJSU9uU2V0U2Nyb2xsSW5mb1koRlhfRkxPQVQgZlBsYXRlTWluLCBGWF9GTE9BVCBmUGxhdGVNYXgsIA0KLQkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZDb250ZW50TWluLCBGWF9GTE9BVCBmQ29udGVudE1heCwgDQotCQkJCQkJCQkJCQkJRlhfRkxPQVQgZlNtYWxsU3RlcCwgRlhfRkxPQVQgZkJpZ1N0ZXApID0gMDsNCi0JLy9zZXQgdGhlIHBvc2l0aW9uIG9mIGhvcml6b250YWwgc2Nyb2xsYmFyLg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJSU9uU2V0U2Nyb2xsUG9zWChGWF9GTE9BVCBmeCkgPSAwOw0KLQkvL3NldCB0aGUgcG9zaXRpb24gb2YgdmVydGljYWwgc2Nyb2xsYmFyLg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJSU9uU2V0U2Nyb2xsUG9zWShGWF9GTE9BVCBmeSkgPSAwOw0KLQkvL3NldCB0aGUgY2FyZXQgaW5mb3JtYXRpb24uDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlJT25TZXRDYXJldChGWF9CT09MIGJWaXNpYmxlLGNvbnN0IENQREZfUG9pbnQgJiBwdEhlYWQsY29uc3QgQ1BERl9Qb2ludCAmIHB0Rm9vdCwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlKSA9IDA7DQotCS8vaWYgdGhlIGNhcmV0IHBvc2l0aW9uIGlzIGNoYW5nZWQgLHNlbmQgdGhlIGluZm9ybWF0aW9uIG9mIGN1cnJlbnQgcG9zdGlvbiB0byB1c2VyLg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJSU9uQ2FyZXRDaGFuZ2UoY29uc3QgQ1BWVF9TZWNQcm9wcyAmIHNlY1Byb3BzLCBjb25zdCBDUFZUX1dvcmRQcm9wcyAmIHdvcmRQcm9wcykgPSAwOw0KLQkvL2lmIHRoZSB0ZXh0IGFyZWEgaXMgY2hhbmdlZCwgc2VuZCB0aGUgaW5mb3JtYXRpb24gdG8gdXNlci4NCi0JdmlydHVhbCB2b2lkCQkJCQkJCUlPbkNvbnRlbnRDaGFuZ2UoY29uc3QgQ1BERl9SZWN0JiByY0NvbnRlbnQpID0gMDsNCi0JLy9JbnZhbGlkYXRlIHRoZSByZWN0YW5nbGUgcmVsYXRpdmUgdG8gdGhlIGJvdW5kaW5nIGJveCBvZiBlZGl0Lg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJSU9uSW52YWxpZGF0ZVJlY3QoQ1BERl9SZWN0ICogcFJlY3QpID0gMDsNCi19Ow0KLQ0KLWNsYXNzIElGWF9FZGl0X09wck5vdGlmeQ0KLXsNCi0JLy90aGlzIGNsYXNzIGlzIGltcGxlbWVudGVkIGJ5IHVzZXINCi1wdWJsaWM6DQotCS8vT3ByVHlwZTogMA0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJT25JbnNlcnRXb3JkKGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIG9sZHBsYWNlKSA9IDA7DQotCS8vT3ByVHlwZTogMQ0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJT25JbnNlcnRSZXR1cm4oY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgb2xkcGxhY2UpID0gMDsNCi0JLy9PcHJUeXBlOiAyDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlPbkJhY2tTcGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlJiBvbGRwbGFjZSkgPSAwOw0KLQkvL09wclR5cGU6IDMNCi0JdmlydHVhbCB2b2lkCQkJCQkJCU9uRGVsZXRlKGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIG9sZHBsYWNlKSA9IDA7DQotCS8vT3ByVHlwZTogNA0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJT25DbGVhcihjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlJiBvbGRwbGFjZSkgPSAwOw0KLQkvL09wclR5cGU6IDUNCi0JdmlydHVhbCB2b2lkCQkJCQkJCU9uSW5zZXJ0VGV4dChjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlJiBvbGRwbGFjZSkgPSAwOw0KLQkvL09wclR5cGU6IDYNCi0JdmlydHVhbCB2b2lkCQkJCQkJCU9uU2V0VGV4dChjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlJiBvbGRwbGFjZSkgPSAwOw0KLQkvLw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJT25BZGRVbmRvKElGWF9FZGl0X1VuZG9JdGVtKiBwVW5kb0l0ZW0pID0gMDsNCi19Ow0KLQ0KLWNsYXNzIElGWF9FZGl0X0l0ZXJhdG9yDQotew0KLXB1YmxpYzoNCi0JdmlydHVhbCB+SUZYX0VkaXRfSXRlcmF0b3IoKSAge30NCi1wdWJsaWM6DQotCS8vbW92ZSB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgbmV4dCB3b3JkLg0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJTmV4dFdvcmQoKSA9IDA7DQotCS8vbW92ZSB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgbmV4dCBsaW5lLg0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJTmV4dExpbmUoKSA9IDA7DQotCS8vbW92ZSB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgbmV4dCBzZWN0aW9uLiANCi0JdmlydHVhbCBGWF9CT09MCQkJCQkJCU5leHRTZWN0aW9uKCkgPSAwOw0KLQ0KLQkvL21vdmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIHByZXZpb3VzIHdvcmQuDQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlQcmV2V29yZCgpID0gMDsNCi0JLy9tb3ZlIHRoZSBjdXJyZW50IHBvc2l0aW9uIHRvIHRoZSBwcmV2aW91cyBsaW5lLg0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJUHJldkxpbmUoKSA9IDA7DQotCS8vbW92ZSB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgcHJldmlvdXMgc2VjdGlvbi4gDQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlQcmV2U2VjdGlvbigpID0gMDsNCi0NCi0JLy9nZXQgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSBjdXJyZW50IHdvcmQuDQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlHZXRXb3JkKENQVlRfV29yZCAmIHdvcmQpIGNvbnN0ID0gMDsNCi0JLy9nZXQgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSBjdXJyZW50IGxpbmUuDQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlHZXRMaW5lKENQVlRfTGluZSAmIGxpbmUpIGNvbnN0ID0gMDsNCi0JLy9nZXQgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSBjdXJyZW50IHNlY3Rpb24uDQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlHZXRTZWN0aW9uKENQVlRfU2VjdGlvbiAmIHNlY3Rpb24pIGNvbnN0ID0gMDsNCi0JLy9zZXQgdGhlIGN1cnJlbnQgcG9zaXRpb24uDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXRBdChGWF9JTlQzMiBuV29yZEluZGV4KSA9IDA7DQotCS8vc2V0IHRoZSBjdXJyZW50IHBvc2l0aW9uLg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0QXQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgPSAwOw0KLQkvL2dldCB0aGUgY3VycmVudCBwb3NpdGlvbi4NCi0JdmlydHVhbCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmCQkJR2V0QXQoKSBjb25zdCA9IDA7DQotDQotCS8vZ2V0IHRoZSBlZGl0IHdoaWNoIHRoaXMgaXRlcmF0b3IgYmVsb25ncyB0bw0KLQl2aXJ0dWFsIElGWF9FZGl0KgkJCQkJCUdldEVkaXQoKSBjb25zdCA9IDA7DQotfTsNCi0NCi1jbGFzcyBJRlhfRWRpdF9VbmRvSXRlbQ0KLXsNCi1wdWJsaWM6DQotCXZpcnR1YWwgdm9pZAkJCQkJCQlVbmRvKCkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJUmVkbygpID0gMDsNCi0JdmlydHVhbCBDRlhfV2lkZVN0cmluZwkJCQkJR2V0VW5kb1RpdGxlKCkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJUmVsZWFzZSgpID0gMDsNCi19Ow0KLQ0KLWNsYXNzIEZYRVRfQ0xBU1MgSUZYX0VkaXQNCi17DQotcHVibGljOg0KLQlzdGF0aWMgSUZYX0VkaXQqCQkJCQkJTmV3RWRpdCgpOw0KLQlzdGF0aWMJdm9pZAkJCQkJCQlEZWxFZGl0KElGWF9FZGl0KiBwRWRpdCk7DQotDQotcHVibGljOg0KLQkvL3NldCBhIElGWF9FZGl0X0ZvbnRNYXAgcG9pbnRlciBpbXBsZW1lbnRlZCBieSB1c2VyLg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0Rm9udE1hcChJRlhfRWRpdF9Gb250TWFwKiBwRm9udE1hcCkgPSAwOw0KLQkvL2lmIHVzZXIgZG9uJ3QgbGlrZSB0byB1c2UgRm9udE1hcCwgaW1wbGVtZW50IFZUUHJvdmlkZXIgYW5kIHNldCBpdCBkaXJlY3RseS4NCi0JdmlydHVhbCB2b2lkCQkJCQkJCVNldFZUUHJvdmlkZXIoSVBERl9WYXJpYWJsZVRleHRfUHJvdmlkZXIqIHBQcm92aWRlcikgPSAwOw0KLQkvL3NldCBhIElGWF9FZGl0X05vdGlmeSBwb2ludGVyIGltcGxlbWVudGVkIGJ5IHVzZXIuDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXROb3RpZnkoSUZYX0VkaXRfTm90aWZ5ICogcE5vdGlmeSkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0T3ByTm90aWZ5KElGWF9FZGl0X09wck5vdGlmeSogcE9wck5vdGlmeSkgPSAwOw0KLQkvL2dldCBhIHBvaW50ZXIgYWxsb2NhdGVkIGJ5IENQREZfRWRpdCwgYnkgdGhpcyBwb2ludGVyLCB1c2VyIGNhbiBpdGVyYXRlIHRoZSBjb250ZW50cyBvZiBlZGl0LCBidXQgZG9uJ3QgbmVlZCB0byByZWxlYXNlLg0KLQl2aXJ0dWFsIElGWF9FZGl0X0l0ZXJhdG9yKgkJCQlHZXRJdGVyYXRvcigpID0gMDsNCi0JLy9nZXQgYSBWVCBwb2ludGVyIHJlbGF0aXZlIHRvIHRoaXMgZWRpdC4NCi0JdmlydHVhbCBJUERGX1ZhcmlhYmxlVGV4dCoJCQkJR2V0VmFyaWFibGVUZXh0KCkgPSAwOw0KLQkvL2dldCB0aGUgSUZYX0VkaXRfRm9udE1hcCBwb2ludGVyIHNldCBieSB1c2VyLg0KLQl2aXJ0dWFsIElGWF9FZGl0X0ZvbnRNYXAqCQkJCUdldEZvbnRNYXAoKSA9IDA7DQotDQotCS8vaW5pdGlhbGl6ZSB0aGUgZWRpdC4NCi0JdmlydHVhbCB2b2lkCQkJCQkJCUluaXRpYWxpemUoKSA9IDA7DQotDQotCS8vc2V0IHRoZSBib3VuZGluZyBib3ggb2YgdGhlIHRleHQgYXJlYS4NCi0JdmlydHVhbCB2b2lkCQkJCQkJCVNldFBsYXRlUmVjdChjb25zdCBDUERGX1JlY3QgJiByZWN0LCBGWF9CT09MIGJQYWludCA9IFRSVUUpID0gMDsNCi0JLy9zZXQgdGhlIHNjcm9sbCBvcmlnaW4NCi0JdmlydHVhbCB2b2lkCQkJCQkJCVNldFNjcm9sbFBvcyhjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpID0gMDsNCi0NCi0JLy9zZXQgdGhlIGhvcml6b250YWwgdGV4dCBhbGlnbm1lbnQgaW4gdGV4dCBib3gsIG5Gb3JtYXQgKDA6bGVmdCAxOm1pZGRsZSAyOnJpZ2h0KS4NCi0JdmlydHVhbCB2b2lkCQkJCQkJCVNldEFsaWdubWVudEgoRlhfSU5UMzIgbkZvcm1hdCA9IDAsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSkgPSAwOw0KLQkvL3NldCB0aGUgdmVydGljYWwgdGV4dCBhbGlnbm1lbnQgaW4gdGV4dCBib3gsIG5Gb3JtYXQgKDA6dG9wIDE6Y2VudGVyIDI6Ym90dG9tKS4NCi0JdmlydHVhbCB2b2lkCQkJCQkJCVNldEFsaWdubWVudFYoRlhfSU5UMzIgbkZvcm1hdCA9IDAsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSkgPSAwOw0KLQkvL2lmIHRoZSB0ZXh0IGlzIHNob3duIGluIHNlY3JldCAsIHNldCBhIGNoYXJhY3RlciBmb3Igc3Vic3RpdHV0ZS4NCi0JdmlydHVhbCB2b2lkCQkJCQkJCVNldFBhc3N3b3JkQ2hhcihGWF9XT1JEIHdTdWJXb3JkID0gJyonLCBGWF9CT09MIGJQYWludCA9IFRSVUUpID0gMDsNCi0JLy9zZXQgdGhlIG1heGltYWwgY291bnQgb2Ygd29yZHMgb2YgdGhlIHRleHQuDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXRMaW1pdENoYXIoRlhfSU5UMzIgbkxpbWl0Q2hhciA9IDAsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSkgPSAwOw0KLQkvL2lmIHNldCB0aGUgY291bnQgb2YgY2hhckFycmF5ICwgdGhlbiBhbGwgd29yZHMgaXMgc2hvd24gaW4gZXF1YWwgc3BhY2UuDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXRDaGFyQXJyYXkoRlhfSU5UMzIgbkNoYXJBcnJheSA9IDAsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSkgPSAwOw0KLQkvL3NldCB0aGUgc3BhY2Ugb2YgdHdvIGNoYXJhY3RlcnMuDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXRDaGFyU3BhY2UoRlhfRkxPQVQgZkNoYXJTcGFjZSA9IDAuMGYsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSkgPSAwOw0KLQkvL3NldCB0aGUgaG9yaXpvbnRhbCBzY2FsZSBvZiBhbGwgY2hhcmFjdGVycy4NCi0JdmlydHVhbCB2b2lkCQkJCQkJCVNldEhvcnpTY2FsZShGWF9JTlQzMiBuSG9yelNjYWxlID0gMTAwLCBGWF9CT09MIGJQYWludCA9IFRSVUUpID0gMDsNCi0JLy9zZXQgdGhlIGxlYWRpbmcgb2YgYWxsIGxpbmVzDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXRMaW5lTGVhZGluZyhGWF9GTE9BVCBmTGluZUxlYWRpbmcsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSkgPSAwOw0KLQkvL2lmIHNldCwgQ1JMRiBpcyBhbGxvd2VkLg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0TXVsdGlMaW5lKEZYX0JPT0wgYk11bHRpTGluZSA9IFRSVUUsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSkgPSAwOw0KLQkvL2lmIHNldCwgYWxsIHdvcmRzIGF1dG8gZml0IHRoZSB3aWR0aCBvZiB0aGUgYm91bmRpbmcgYm94LgkNCi0JdmlydHVhbCB2b2lkCQkJCQkJCVNldEF1dG9SZXR1cm4oRlhfQk9PTCBiQXV0byA9IFRSVUUsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSkgPSAwOw0KLQkvL2lmIHNldCwgYSBmb250IHNpemUgaXMgY2FsY3VsYXRlZCB0byBmdWxsIGZpdCB0aGUgYm91bmRpbmcgYm94Lg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0QXV0b0ZvbnRTaXplKEZYX0JPT0wgYkF1dG8gPSBUUlVFLCBGWF9CT09MIGJQYWludCA9IFRSVUUpID0gMDsNCi0JLy9pcyBzZXQsIHRoZSB0ZXh0IGlzIGFsbG93ZWQgdG8gc2Nyb2xsLg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0QXV0b1Njcm9sbChGWF9CT09MIGJBdXRvID0gVFJVRSwgRlhfQk9PTCBiUGFpbnQgPSBUUlVFKSA9IDA7DQotCS8vc2V0IHRoZSBmb250IHNpemUgb2YgYWxsIHdvcmRzLg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0Rm9udFNpemUoRlhfRkxPQVQgZkZvbnRTaXplLCBGWF9CT09MIGJQYWludCA9IFRSVUUpID0gMDsNCi0JLy90aGUgdGV4dCBpcyBhbGxvd2VkIHRvIGF1dG8tc2Nyb2xsLCBhbGxvdyB0aGUgdGV4dCBvdmVyZmxvdz8NCi0JdmlydHVhbCB2b2lkCQkJCQkJCVNldFRleHRPdmVyZmxvdyhGWF9CT09MIGJBbGxvd2VkID0gRkFMU0UsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSkgPSAwOw0KLQ0KLQkvL3F1ZXJ5IGlmIHRoZSBlZGl0IGlzIHJpY2hlZGl0Lg0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJSXNSaWNoVGV4dCgpIGNvbnN0ID0gMDsNCi0JLy9zZXQgdGhlIGVkaXQgaXMgcmljaGVkaXQuDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXRSaWNoVGV4dChGWF9CT09MIGJSaWNoVGV4dCA9IFRSVUUsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSkgPSAwOw0KLQkvL3NldCB0aGUgZm9udHNpemUgb2Ygc2VsZWN0ZWQgdGV4dC4NCi0JdmlydHVhbCBGWF9CT09MCQkJCQkJCVNldFJpY2hGb250U2l6ZShGWF9GTE9BVCBmRm9udFNpemUpID0gMDsJDQotCS8vc2V0IHRoZSBmb250aW5kZXggb2Ygc2VsZWN0ZWQgdGV4dCwgdXNlciBjYW4gY2hhbmdlIHRoZSBmb250IG9mIHNlbGVjdGVkIHRleHQuDQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlTZXRSaWNoRm9udEluZGV4KEZYX0lOVDMyIG5Gb250SW5kZXgpID0gMDsNCi0JLy9zZXQgdGhlIHRleHRjb2xvciBvZiBzZWxlY3RlZCB0ZXh0Lg0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJU2V0UmljaFRleHRDb2xvcihGWF9DT0xPUlJFRiBkd0NvbG9yKSA9IDA7DQotCS8vc2V0IHRoZSB0ZXh0IHNjcmlwdCB0eXBlIG9mIHNlbGVjdGVkIHRleHQuICgwOm5vcm1hbCAxOnN1cGVyc2NyaXB0IDI6c3Vic2NyaXB0KQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJU2V0UmljaFRleHRTY3JpcHQoRlhfSU5UMzIgblNjcmlwdFR5cGUpID0gMDsJDQotCS8vc2V0IHRoZSBib2xkIGZvbnQgc3R5bGUgb2Ygc2VsZWN0ZWQgdGV4dC4NCi0JdmlydHVhbCBGWF9CT09MCQkJCQkJCVNldFJpY2hUZXh0Qm9sZChGWF9CT09MIGJCb2xkID0gVFJVRSkgPSAwOw0KLQkvL3NldCB0aGUgaXRhbGljIGZvbnQgc3R5bGUgb2Ygc2VsZWN0ZWQgdGV4dC4NCi0JdmlydHVhbCBGWF9CT09MCQkJCQkJCVNldFJpY2hUZXh0SXRhbGljKEZYX0JPT0wgYkl0YWxpYyA9IFRSVUUpID0gMDsNCi0JLy9zZXQgdGhlIHVuZGVybGluZSBzdHlsZSBvZiBzZWxlY3RlZCB0ZXh0Lg0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJU2V0UmljaFRleHRVbmRlcmxpbmUoRlhfQk9PTCBiVW5kZXJsaW5lID0gVFJVRSkgPSAwOw0KLQkvL3NldCB0aGUgY3Jvc3NvdXQgc3R5bGUgb2Ygc2VsZWN0ZWQgdGV4dC4NCi0JdmlydHVhbCBGWF9CT09MCQkJCQkJCVNldFJpY2hUZXh0Q3Jvc3NvdXQoRlhfQk9PTCBiQ3Jvc3NvdXQgPSBUUlVFKSA9IDA7DQotCS8vc2V0IHRoZSBjaGFyc3BhY2Ugb2Ygc2VsZWN0ZWQgdGV4dCwgaW4gdXNlciBjb29yZGluYXRlLg0KLQl2aXJ0dWFsCUZYX0JPT0wJCQkJCQkJU2V0UmljaFRleHRDaGFyU3BhY2UoRlhfRkxPQVQgZkNoYXJTcGFjZSkgPSAwOw0KLQkvL3NldCB0aGUgaG9yaXpvbnRhbCBzY2FsZSBvZiBzZWxlY3RlZCB0ZXh0LCBkZWZhdWx0IHZhbHVlIGlzIDEwMC4NCi0JdmlydHVhbCBGWF9CT09MCQkJCQkJCVNldFJpY2hUZXh0SG9yelNjYWxlKEZYX0lOVDMyIG5Ib3J6U2NhbGUgPSAxMDApID0gMDsNCi0JLy9zZXQgdGhlIGxlYWRpbmcgb2Ygc2VsZWN0ZWQgc2VjdGlvbiwgaW4gdXNlciBjb29yZGluYXRlLg0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJU2V0UmljaFRleHRMaW5lTGVhZGluZyhGWF9GTE9BVCBmTGluZUxlYWRpbmcpID0gMDsNCi0JLy9zZXQgdGhlIGluZGVudCBvZiBzZWxlY3RlZCBzZWN0aW9uLCBpbiB1c2VyIGNvb3JkaW5hdGUuDQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlTZXRSaWNoVGV4dExpbmVJbmRlbnQoRlhfRkxPQVQgZkxpbmVJbmRlbnQpID0gMDsNCi0JLy9zZXQgdGhlIGFsaWdubWVudCBvZiBzZWxlY3RlZCBzZWN0aW9uLCBuQWxpZ25tZW50KDA6bGVmdCAxOm1pZGRsZSAyOnJpZ2h0KQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJU2V0UmljaFRleHRBbGlnbm1lbnQoRlhfSU5UMzIgbkFsaWdubWVudCkgPSAwOw0KLQ0KLQkvL3NldCB0aGUgc2VsZWN0ZWQgcmFuZ2Ugb2YgdGV4dC4NCi0JLy9pZiBuU3RhcnRDaGFyID09IDAgYW5kIG5FbmRDaGFyID09IC0xLCBzZWxlY3QgYWxsIHRoZSB0ZXh0Lg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0U2VsKEZYX0lOVDMyIG5TdGFydENoYXIsRlhfSU5UMzIgbkVuZENoYXIpID0gMDsNCi0JLy9nZXQgdGhlIHNlbGVjdGVkIHJhbmdlIG9mIHRleHQuDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlHZXRTZWwoRlhfSU5UMzIgJiBuU3RhcnRDaGFyLCBGWF9JTlQzMiAmIG5FbmRDaGFyKSBjb25zdCA9IDA7DQotCS8vc2VsZWN0IGFsbCB0aGUgdGV4dC4NCi0JdmlydHVhbAl2b2lkCQkJCQkJCVNlbGVjdEFsbCgpID0gMDsNCi0JLy9zZXQgdGV4dCBpcyBub3Qgc2VsZWN0ZWQuDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlTZWxlY3ROb25lKCkgPSAwOwkJDQotCS8vZ2V0IHRoZSBjYXJldCBwb3NpdGlvbi4NCi0JdmlydHVhbCBGWF9JTlQzMgkJCQkJCUdldENhcmV0KCkgY29uc3QgPSAwOw0KLQl2aXJ0dWFsIENQVlRfV29yZFBsYWNlCQkJCQlHZXRDYXJldFdvcmRQbGFjZSgpIGNvbnN0ID0gMDsNCi0JLy9nZXQgdGhlIHN0cmluZyBvZiBzZWxlY3RlZCB0ZXh0Lg0KLQl2aXJ0dWFsIENGWF9XaWRlU3RyaW5nCQkJCQlHZXRTZWxUZXh0KCkgY29uc3QgPSAwOw0KLQkvL2dldCB0aGUgdGV4dCBjb25lbnQNCi0JdmlydHVhbCBDRlhfV2lkZVN0cmluZwkJCQkJR2V0VGV4dCgpIGNvbnN0ID0gMDsNCi0JLy9xdWVyeSBpZiBhbnkgdGV4dCBpcyBzZWxlY3RlZC4NCi0JdmlydHVhbCBGWF9CT09MCQkJCQkJCUlzU2VsZWN0ZWQoKSBjb25zdCA9IDA7CQ0KLQkvL2dldCB0aGUgc2Nyb2xsIG9yaWdpbg0KLQl2aXJ0dWFsIENQREZfUG9pbnQJCQkJCQlHZXRTY3JvbGxQb3MoKSBjb25zdCA9IDA7DQotCS8vZ2V0IHRoZSBib3VuZGluZyBib3ggb2YgdGhlIHRleHQgYXJlYS4NCi0JdmlydHVhbCBDUERGX1JlY3QJCQkJCQlHZXRQbGF0ZVJlY3QoKSBjb25zdCA9IDA7DQotCS8vZ2V0IHRoZSBmYWN0IGFyZWEgb2YgdGhlIHRleHQuDQotCXZpcnR1YWwgQ1BERl9SZWN0CQkJCQkJR2V0Q29udGVudFJlY3QoKSBjb25zdCA9IDA7DQotCS8vZ2V0IHRoZSB2aXNpYmxlIHdvcmQgcmFuZ2UNCi0JdmlydHVhbCBDUFZUX1dvcmRSYW5nZQkJCQkJR2V0VmlzaWJsZVdvcmRSYW5nZSgpIGNvbnN0ID0gMDsNCi0JLy9nZXQgdGhlIHdob2xlIHdvcmQgcmFuZ2UNCi0JdmlydHVhbCBDUFZUX1dvcmRSYW5nZQkJCQkJR2V0V2hvbGVXb3JkUmFuZ2UoKSBjb25zdCA9IDA7DQotCS8vZ2V0IHRoZSB3b3JkIHJhbmdlIG9mIHNlbGVjdCB0ZXh0DQotCXZpcnR1YWwgQ1BWVF9Xb3JkUmFuZ2UJCQkJCUdldFNlbGVjdFdvcmRSYW5nZSgpIGNvbnN0ID0gMDsNCi0NCi0JLy9zZW5kIHRoZSBtb3VzZWRvd24gbWVzc2FnZSB0byBlZGl0IGZvciByZXNwb25zZS4NCi0JLy9pZiBTaGlmdCBrZXkgaXMgaG9sZCwgYlNoaWZ0IGlzIFRSVUUsIGlzIEN0cmwga2V5IGlzIGhvbGQsIGJDdHJsIGlzIFRSVUUuDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlPbk1vdXNlRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkgPSAwOw0KLQkvL3NlbmQgdGhlIG1vdXNlbW92ZSBtZXNzYWdlIHRvIGVkaXQgd2hlbiBtb3VzZSBkb3duIGlzIFRSVUUuDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlPbk1vdXNlTW92ZShjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkgPSAwOw0KLQkvL3NlbmQgdGhlIFVQIGtleSBtZXNzYWdlIHRvIGVkaXQuDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlPblZLX1VQKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpID0gMDsNCi0JLy9zZW5kIHRoZSBET1dOIGtleSBtZXNzYWdlIHRvIGVkaXQuDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlPblZLX0RPV04oRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkgPSAwOw0KLQkvL3NlbmQgdGhlIExFRlQga2V5IG1lc3NhZ2UgdG8gZWRpdC4NCi0JdmlydHVhbCB2b2lkCQkJCQkJCU9uVktfTEVGVChGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKSA9IDA7DQotCS8vc2VuZCB0aGUgUklHSFQga2V5IG1lc3NhZ2UgdG8gZWRpdC4NCi0JdmlydHVhbCB2b2lkCQkJCQkJCU9uVktfUklHSFQoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkgPSAwOw0KLQkvL3NlbmQgdGhlIEhPTUUga2V5IG1lc3NhZ2UgdG8gZWRpdC4NCi0JdmlydHVhbCB2b2lkCQkJCQkJCU9uVktfSE9NRShGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKSA9IDA7DQotCS8vc2VuZCB0aGUgRU5EIGtleSBtZXNzYWdlIHRvIGVkaXQuDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlPblZLX0VORChGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKSA9IDA7DQotDQotCS8vcHV0IHRleHQgaW50byBlZGl0Lg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0VGV4dChGWF9MUENXU1RSIHRleHQsRlhfSU5UMzIgY2hhcnNldCA9IERFRkFVTFRfQ0hBUlNFVCwNCi0JCQkJCQkJCQkJCQkJY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcyA9IE5VTEwsY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzID0gTlVMTCkgPSAwOwkNCi0JLy9pbnNlcnQgYSB3b3JkIGludG8gdGhlIGVkaXQuDQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlJbnNlcnRXb3JkKEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCA9IERFRkFVTFRfQ0hBUlNFVCwgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzID0gTlVMTCkgPSAwOw0KLQkvL2luc2VydCBhIHJldHVybiBpbnRvIHRoZSBlZGl0Lg0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJSW5zZXJ0UmV0dXJuKGNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMgPSBOVUxMLGNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcyA9IE5VTEwpID0gMDsJDQotCS8vaW5zZXJ0IHRleHQgaW50byB0aGUgZWRpdC4NCi0JdmlydHVhbCBGWF9CT09MCQkJCQkJCUluc2VydFRleHQoRlhfTFBDV1NUUiB0ZXh0LCBGWF9JTlQzMiBjaGFyc2V0ID0gREVGQVVMVF9DSEFSU0VULA0KLQkJCQkJCQkJCQkJCQljb25zdCBDUFZUX1NlY1Byb3BzICogcFNlY1Byb3BzID0gTlVMTCxjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMgPSBOVUxMKSA9IDA7DQotCS8vZG8gYmFja3NwYWNlIG9wZXJhdGlvbi4NCi0JdmlydHVhbCBGWF9CT09MCQkJCQkJCUJhY2tzcGFjZSgpID0gMDsNCi0JLy9kbyBkZWxldGUgb3BlcmF0aW9uLg0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJRGVsZXRlKCkgPSAwOwkNCi0JLy9kZWxldGUgdGhlIHNlbGVjdGVkIHRleHQuDQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlDbGVhcigpID0gMDsNCi0NCi0JLy9kbyBSZWRvIG9wZXJhdGlvbi4NCi0JdmlydHVhbCBGWF9CT09MCQkJCQkJCVJlZG8oKSA9IDA7DQotCS8vZG8gVW5kbyBvcGVyYXRpb24uDQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlVbmRvKCkgPSAwOw0KLQkvL21vdmUgY2FyZXQNCi0JdmlydHVhbCB2b2lkCQkJCQkJCVNldENhcmV0KEZYX0lOVDMyIG5Qb3MpID0gMDsNCi0NCi0JLy9hcnJhbmdlIGFsbCB3b3JkcyBvdmVyIGFnYWluDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlQYWludCgpID0gMDsNCi0JDQotCS8vYWxsb3cgdG8gcmVmcmVzaCBzY3JlZW4/DQotCXZpcnR1YWwgdm9pZAkJCQkJCQlFbmFibGVSZWZyZXNoKEZYX0JPT0wgYlJlZnJlc2gpID0gMDsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCQkJCVJlZnJlc2hXb3JkUmFuZ2UoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UmIHdyKSA9IDA7DQotDQotCS8vYWxsb3cgdW5kby9yZWRvPw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJRW5hYmxlVW5kbyhGWF9CT09MIGJVbmRvKSA9IDA7DQotDQotCS8vYWxsb3cgbm90aWZ5Pw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJRW5hYmxlTm90aWZ5KEZYX0JPT0wgYk5vdGlmeSkgPSAwOw0KLQ0KLQkvL2FsbG93IG9wciBub3RpZnk/DQotCXZpcnR1YWwgdm9pZAkJCQkJCQlFbmFibGVPcHJOb3RpZnkoRlhfQk9PTCBiTm90aWZ5KSA9IDA7DQotDQotCS8vbWFwIHdvcmQgcGxhY2UgdG8gd29yZCBpbmRleC4NCi0JdmlydHVhbCBGWF9JTlQzMgkJCQkJCVdvcmRQbGFjZVRvV29yZEluZGV4KGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0ID0gMDsNCi0JLy9tYXAgd29yZCBpbmRleCB0byB3b3JkIHBsYWNlLg0KLQl2aXJ0dWFsIENQVlRfV29yZFBsYWNlCQkJCQlXb3JkSW5kZXhUb1dvcmRQbGFjZShGWF9JTlQzMiBpbmRleCkgY29uc3QgPSAwOw0KLQ0KLQkvL2dldCB0aGUgYmVnaW5uaW5nIHBvc2l0aW9uIG9mIGEgbGluZQ0KLQl2aXJ0dWFsIENQVlRfV29yZFBsYWNlCQkJCQlHZXRMaW5lQmVnaW5QbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdCA9IDA7DQotDQotCS8vZ2V0IHRoZSBlbmRpbmcgcG9zaXRpb24gb2YgYSBsaW5lDQotCXZpcnR1YWwgQ1BWVF9Xb3JkUGxhY2UJCQkJCUdldExpbmVFbmRQbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdCA9IDA7DQotDQotCS8vZ2V0IHRoZSBiZWdpbm5pbmcgcG9zaXRpb24gb2YgYSBzZWN0aW9uDQotCXZpcnR1YWwgQ1BWVF9Xb3JkUGxhY2UJCQkJCUdldFNlY3Rpb25CZWdpblBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0ID0gMDsNCi0NCi0JLy9nZXQgdGhlIGVuZGluZyBwb3NpdGlvbiBvZiBhIHNlY3Rpb24NCi0JdmlydHVhbCBDUFZUX1dvcmRQbGFjZQkJCQkJR2V0U2VjdGlvbkVuZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0ID0gMDsNCi0NCi0JLy9zZWFyY2ggYSB3b3JkcGxhY2UgZm9ybSBwb2ludA0KLQl2aXJ0dWFsIENQVlRfV29yZFBsYWNlCQkJCQlTZWFyY2hXb3JkUGxhY2UoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpIGNvbnN0ID0gMDsNCi0NCi0JLy9nZXQgdGhlIGZvbnQgc2l6ZSBvZiBub25fcmljaCB0ZXh0IG9yIGRlZmF1bHQgZm9udCBzaXplIG9mIHJpY2h0ZXh0Lg0KLQl2aXJ0dWFsIEZYX0ZMT0FUCQkJCQkJR2V0Rm9udFNpemUoKSBjb25zdCA9IDA7DQotCS8vZ2V0IHRoZSBtYXNrIGNoYXJhY3Rlci4NCi0JdmlydHVhbCBGWF9XT1JECQkJCQkJCUdldFBhc3N3b3JkQ2hhcigpIGNvbnN0ID0gMDsNCi0JLy9nZXQgdGhlIGNvdW50IG9mIGNoYXJBcnJheQ0KLQl2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJR2V0Q2hhckFycmF5KCkgY29uc3QgPSAwOw0KLQkvL2dldCB0aGUgaG9yaXpvbnRhbCBzY2FsZSBvZiBhbGwgY2hhcmFjdGVycw0KLQl2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJR2V0SG9yelNjYWxlKCkgY29uc3QgPSAwOw0KLQkvL2dldCB0aGUgc3BhY2Ugb2YgdHdvIGNoYXJhY3RlcnMNCi0JdmlydHVhbCBGWF9GTE9BVAkJCQkJCUdldENoYXJTcGFjZSgpIGNvbnN0ID0gMDsNCi0JLy9nZXQgdGhlIGxhdGluIHdvcmRzIG9mIHNwZWNpZmllZCByYW5nZQ0KLQl2aXJ0dWFsIENGWF9XaWRlU3RyaW5nCQkJCQlHZXRSYW5nZVRleHQoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiByYW5nZSkgY29uc3QgPSAwOw0KLQkvL2lzIHRoZSB0ZXh0IGZ1bGwgaW4gYm91bmRpbmcgYm94DQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlJc1RleHRGdWxsKCkgY29uc3QgPSAwOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJQ2FuVW5kbygpIGNvbnN0ID0gMDsNCi0JdmlydHVhbCBGWF9CT09MCQkJCQkJCUNhblJlZG8oKSBjb25zdCA9IDA7DQotCS8vaWYgdGhlIGNvbnRlbnQgaXMgY2hhbmdlZCBhZnRlciBzZXR0ZXh0Pw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJSXNNb2RpZmllZCgpIGNvbnN0ID0gMDsNCi0JLy9nZXQgdGhlIHRvdGFsIHdvcmRzIGluIGVkaXQNCi0JdmlydHVhbCBGWF9JTlQzMgkJCQkJCUdldFRvdGFsV29yZHMoKSBjb25zdCA9IDA7DQotDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlBZGRVbmRvSXRlbShJRlhfRWRpdF9VbmRvSXRlbSogcFVuZG9JdGVtKSA9IDA7DQotDQotcHVibGljOg0KLQlzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldEVkaXRBcHBlYXJhbmNlU3RyZWFtKElGWF9FZGl0KiBwRWRpdCwgY29uc3QgQ1BERl9Qb2ludCAmIHB0T2Zmc2V0LCANCi0JCQkJCQkJCQkJCQkJY29uc3QgQ1BWVF9Xb3JkUmFuZ2UqIHBSYW5nZSA9IE5VTEwsIA0KLQkJCQkJCQkJCQkJCQlGWF9CT09MIGJDb250aW51b3VzID0gVFJVRSwgRlhfV09SRCBTdWJXb3JkID0gMCk7DQotCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0U2VsZWN0QXBwZWFyYW5jZVN0cmVhbShJRlhfRWRpdCogcEVkaXQsIGNvbnN0IENQREZfUG9pbnQgJiBwdE9mZnNldCwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UqIHBSYW5nZSA9IE5VTEwpOw0KLQlzdGF0aWMgdm9pZAkJCQkJCQkJRHJhd0VkaXQoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwgSUZYX0VkaXQqIHBFZGl0LCBGWF9DT0xPUlJFRiBjclRleHRGaWxsLCBGWF9DT0xPUlJFRiBjclRleHRTdHJva2UsDQotCQkJCQkJCQkJCQkJCWNvbnN0IENQREZfUmVjdCYgcmNDbGlwLCBjb25zdCBDUERGX1BvaW50JiBwdE9mZnNldCwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UqIHBSYW5nZSwgSUZYX1N5c3RlbUhhbmRsZXIqIHBTeXN0ZW1IYW5kbGVyLCB2b2lkKiBwRkZMRGF0YSk7DQotCXN0YXRpYyB2b2lkCQkJCQkJCQlEcmF3VW5kZXJsaW5lKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsIElGWF9FZGl0KiBwRWRpdCwgRlhfQ09MT1JSRUYgY29sb3IsDQotCQkJCQkJCQkJCQkJCWNvbnN0IENQREZfUmVjdCYgcmNDbGlwLCBjb25zdCBDUERGX1BvaW50JiBwdE9mZnNldCwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UqIHBSYW5nZSk7DQotCXN0YXRpYyB2b2lkCQkJCQkJCQlEcmF3UmljaEVkaXQoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwgSUZYX0VkaXQqIHBFZGl0LCAgDQotCQkJCQkJCQkJCQkJCWNvbnN0IENQREZfUmVjdCYgcmNDbGlwLCBjb25zdCBDUERGX1BvaW50JiBwdE9mZnNldCwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UqIHBSYW5nZSk7DQotCXN0YXRpYyB2b2lkCQkJCQkJCQlHZW5lcmF0ZVBhZ2VPYmplY3RzKENQREZfUGFnZU9iamVjdHMqIHBQYWdlT2JqZWN0cywgSUZYX0VkaXQqIHBFZGl0LA0KLQkJCQkJCQkJCQkJCQljb25zdCBDUERGX1BvaW50JiBwdE9mZnNldCwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UqIHBSYW5nZSwgRlhfQ09MT1JSRUYgY3JUZXh0LCBDRlhfQXJyYXlUZW1wbGF0ZTxDUERGX1RleHRPYmplY3QqPiYgT2JqQXJyYXkpOw0KLQlzdGF0aWMgdm9pZAkJCQkJCQkJR2VuZXJhdGVSaWNoUGFnZU9iamVjdHMoQ1BERl9QYWdlT2JqZWN0cyogcFBhZ2VPYmplY3RzLCBJRlhfRWRpdCogcEVkaXQsDQotCQkJCQkJCQkJCQkJCWNvbnN0IENQREZfUG9pbnQmIHB0T2Zmc2V0LCBjb25zdCBDUFZUX1dvcmRSYW5nZSogcFJhbmdlLCBDRlhfQXJyYXlUZW1wbGF0ZTxDUERGX1RleHRPYmplY3QqPiYgT2JqQXJyYXkpOw0KLQlzdGF0aWMgdm9pZAkJCQkJCQkJR2VuZXJhdGVVbmRlcmxpbmVPYmplY3RzKENQREZfUGFnZU9iamVjdHMqIHBQYWdlT2JqZWN0cywgSUZYX0VkaXQqIHBFZGl0LA0KLQkJCQkJCQkJCQkJCQljb25zdCBDUERGX1BvaW50JiBwdE9mZnNldCwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UqIHBSYW5nZSwgRlhfQ09MT1JSRUYgY29sb3IpOw0KLX07DQotDQotY2xhc3MgSUZYX0xpc3RfTm90aWZ5DQotew0KLQkvL3RoaXMgY2xhc3MgaXMgaW1wbGVtZW50ZWQgYnkgdXNlcg0KLXB1YmxpYzoNCi0JLy9zZXQgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyIGluZm9ybWF0aW9uLg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJSU9uU2V0U2Nyb2xsSW5mb1goRlhfRkxPQVQgZlBsYXRlTWluLCBGWF9GTE9BVCBmUGxhdGVNYXgsIA0KLQkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZDb250ZW50TWluLCBGWF9GTE9BVCBmQ29udGVudE1heCwgDQotCQkJCQkJCQkJCQkJRlhfRkxPQVQgZlNtYWxsU3RlcCwgRlhfRkxPQVQgZkJpZ1N0ZXApID0gMDsNCi0JLy9zZXQgdGhlIHZlcnRpY2FsIHNjcm9sbGJhciBpbmZvcm1hdGlvbi4NCi0JdmlydHVhbCB2b2lkCQkJCQkJCUlPblNldFNjcm9sbEluZm9ZKEZYX0ZMT0FUIGZQbGF0ZU1pbiwgRlhfRkxPQVQgZlBsYXRlTWF4LCANCi0JCQkJCQkJCQkJCQlGWF9GTE9BVCBmQ29udGVudE1pbiwgRlhfRkxPQVQgZkNvbnRlbnRNYXgsIA0KLQkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZTbWFsbFN0ZXAsIEZYX0ZMT0FUIGZCaWdTdGVwKSA9IDA7DQotCS8vc2V0IHRoZSBwb3NpdGlvbiBvZiBob3Jpem9udGFsIHNjcm9sbGJhci4NCi0JdmlydHVhbCB2b2lkCQkJCQkJCUlPblNldFNjcm9sbFBvc1goRlhfRkxPQVQgZngpID0gMDsNCi0JLy9zZXQgdGhlIHBvc2l0aW9uIG9mIHZlcnRpY2FsIHNjcm9sbGJhci4NCi0JdmlydHVhbCB2b2lkCQkJCQkJCUlPblNldFNjcm9sbFBvc1koRlhfRkxPQVQgZnkpID0gMDsNCi0JLy9JbnZhbGlkYXRlIHRoZSByZWN0YW5nbGUgcmVsYXRpdmUgdG8gdGhlIGJvdW5kaW5nIGJveCBvZiBlZGl0Lg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJSU9uSW52YWxpZGF0ZVJlY3QoQ1BERl9SZWN0ICogcFJlY3QpID0gMDsNCi19Ow0KLQ0KLWNsYXNzIEZYRVRfQ0xBU1MgSUZYX0xpc3QNCi17DQotcHVibGljOg0KLQlzdGF0aWMgSUZYX0xpc3QqCQkJCQkJTmV3TGlzdCgpOw0KLQlzdGF0aWMgdm9pZAkJCQkJCQkJRGVsTGlzdChJRlhfTGlzdCogcExpc3QpOw0KLQ0KLXB1YmxpYzoNCi0JdmlydHVhbCB2b2lkCQkJCQkJCVNldEZvbnRNYXAoSUZYX0VkaXRfRm9udE1hcCAqIHBGb250TWFwKSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXROb3RpZnkoSUZYX0xpc3RfTm90aWZ5ICogcE5vdGlmeSkgPSAwOw0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0UGxhdGVSZWN0KGNvbnN0IENQREZfUmVjdCAmIHJlY3QpID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCQkJCVNldEZvbnRTaXplKEZYX0ZMT0FUIGZGb250U2l6ZSkgPSAwOw0KLQ0KLQl2aXJ0dWFsIENQREZfUmVjdAkJCQkJCUdldFBsYXRlUmVjdCgpIGNvbnN0ID0gMDsNCi0JdmlydHVhbCBDUERGX1JlY3QJCQkJCQlHZXRDb250ZW50UmVjdCgpIGNvbnN0ID0gMDsNCi0NCi0JdmlydHVhbCBGWF9GTE9BVAkJCQkJCUdldEZvbnRTaXplKCkgY29uc3QgPSAwOw0KLQl2aXJ0dWFsIElGWF9FZGl0KgkJCQkJCUdldEl0ZW1FZGl0KEZYX0lOVDMyIG5JbmRleCkgY29uc3QgPSAwOw0KLQl2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJR2V0Q291bnQoKSBjb25zdCA9IDA7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlJc0l0ZW1TZWxlY3RlZChGWF9JTlQzMiBuSW5kZXgpIGNvbnN0ID0gMDsNCi0JdmlydHVhbCBGWF9GTE9BVAkJCQkJCUdldEZpcnN0SGVpZ2h0KCkgY29uc3QgPSAwOw0KLQkNCi0JdmlydHVhbCB2b2lkCQkJCQkJCVNldE11bHRpcGxlU2VsKEZYX0JPT0wgYk11bHRpcGxlKSA9IDA7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlJc011bHRpcGxlU2VsKCkgY29uc3QgPSAwOwkNCi0JdmlydHVhbCBGWF9CT09MCQkJCQkJCUlzVmFsaWQoRlhfSU5UMzIgbkl0ZW1JbmRleCkgY29uc3QgPSAwOw0KLQl2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJRmluZE5leHQoRlhfSU5UMzIgbkluZGV4LEZYX1dDSEFSIG5DaGFyKSBjb25zdCA9IDA7CQ0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0U2Nyb2xsUG9zKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJU2Nyb2xsVG9MaXN0SXRlbShGWF9JTlQzMiBuSXRlbUluZGV4KSA9IDA7DQotCXZpcnR1YWwgQ1BERl9SZWN0CQkJCQkJR2V0SXRlbVJlY3QoRlhfSU5UMzIgbkluZGV4KSBjb25zdCA9IDA7DQotCXZpcnR1YWwgRlhfSU5UMzIJCQkJCQlHZXRDYXJldCgpIGNvbnN0ID0gMDsNCi0JdmlydHVhbCBGWF9JTlQzMgkJCQkJCUdldFNlbGVjdCgpIGNvbnN0ID0gMDsJDQotCXZpcnR1YWwgRlhfSU5UMzIJCQkJCQlHZXRUb3BJdGVtKCkgY29uc3QgPSAwOw0KLQl2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJR2V0SXRlbUluZGV4KGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3QgPSAwOw0KLQl2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJR2V0Rmlyc3RTZWxlY3RlZCgpIGNvbnN0ID0gMDsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCQkJCUFkZFN0cmluZyhGWF9MUENXU1RSIHN0cmluZykgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0VG9wSXRlbShGWF9JTlQzMiBuSW5kZXgpID0gMDsJDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlTZWxlY3QoRlhfSU5UMzIgbkl0ZW1JbmRleCkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0Q2FyZXQoRlhfSU5UMzIgbkl0ZW1JbmRleCkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJRW1wdHkoKSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQkJCQlDYW5jZWwoKSA9IDA7DQotCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCQkJCUdldFRleHQoKSBjb25zdCA9IDA7DQotDQotDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlPbk1vdXNlRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJT25Nb3VzZU1vdmUoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCQkJCU9uVktfVVAoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJT25WS19ET1dOKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCQkJCU9uVktfTEVGVChGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQkJCQlPblZLX1JJR0hUKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCQkJCU9uVktfSE9NRShGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQkJCQlPblZLX0VORChGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQkJCQlPblZLKEZYX0lOVDMyIG5JdGVtSW5kZXgsRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkgPSAwOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJT25DaGFyKEZYX1dPUkQgbkNoYXIsRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkgPSAwOw0KLX07DQotDQotI2VuZGlmIA0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZYX0VESVRfSF8KKyNkZWZpbmUgX0ZYX0VESVRfSF8KKworI2RlZmluZSBQVlRXT1JEX1NUWUxFX05PUk1BTAkJCQkweDAwMDBMCisjZGVmaW5lIFBWVFdPUkRfU1RZTEVfSElHSExJR0hUCQkJCTB4MDAwMUwKKyNkZWZpbmUgUFZUV09SRF9TVFlMRV9VTkRFUkxJTkUJCQkJMHgwMDAyTAorI2RlZmluZSBQVlRXT1JEX1NUWUxFX0NST1NTT1VUCQkJCTB4MDAwNEwKKyNkZWZpbmUgUFZUV09SRF9TVFlMRV9TUVVJR0dMWQkJCQkweDAwMDhMCisjZGVmaW5lIFBWVFdPUkRfU1RZTEVfRFVBTENST1NTT1VUCQkJMHgwMDEwTAorI2RlZmluZSBQVlRXT1JEX1NUWUxFX0JPTEQJCQkJCTB4MDAyMEwKKyNkZWZpbmUgUFZUV09SRF9TVFlMRV9JVEFMSUMJCQkJMHgwMDQwTAorCisjZGVmaW5lIEZYX0VESVRfSVNMQVRJTldPUkQodSkJKHUgPT0gMHgyRCB8fCAodSA8PSAweDAwNUEgJiYgdSA+PSAweDAwNDEpIHx8ICh1IDw9IDB4MDA3QSAmJiB1ID49IDB4MDA2MSkgfHwgKHUgPD0gMHgwMkFGICYmIHUgPj0gMHgwMEMwKSkKKworI2lmZGVmIEZYX1JFQURFUl9ETEwKKwkjaWZkZWYgRlhFVF9FWFBPUlQKKwkJI2RlZmluZSBGWEVUX0NMQVNTIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorCSNlbHNlCisJCSNkZWZpbmUgRlhFVF9DTEFTUworCSNlbmRpZgorI2Vsc2UKKwkjZGVmaW5lIEZYRVRfQ0xBU1MKKyNlbmRpZgorCisjaWZuZGVmIERFRkFVTFRfQ0hBUlNFVAorI2RlZmluZSBERUZBVUxUX0NIQVJTRVQgICAgICAgICAxCisjZW5kaWYgCisKK2NsYXNzIElGWF9FZGl0X0ZvbnRNYXA7CitjbGFzcyBJRlhfRWRpdF9Ob3RpZnk7CitjbGFzcyBJRlhfRWRpdF9JdGVyYXRvcjsKK2NsYXNzIElGWF9FZGl0X1VuZG9JdGVtOworY2xhc3MgSUZYX0VkaXQ7CitjbGFzcyBJRlhfTGlzdF9Ob3RpZnk7CitjbGFzcyBJRlhfTGlzdDsKK2NsYXNzIElGWF9TeXN0ZW1IYW5kbGVyOworCitjbGFzcyBJRlhfRWRpdF9Gb250TWFwCit7CitwdWJsaWM6CisJLy9tYXAgYSBmb250aW5kZXggdG8gcGRmIGZvbnQuCisJdmlydHVhbCBDUERGX0ZvbnQgKgkJCQkJCUdldFBERkZvbnQoRlhfSU5UMzIgbkZvbnRJbmRleCkgPSAwOworCS8vZ2V0IHRoZSBhbGlhcyBvZiBhIHBkZiBmb250LgorCXZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldFBERkZvbnRBbGlhcyhGWF9JTlQzMiBuRm9udEluZGV4KSA9IDA7CisJLy9nZXQgdGhlIGluZGV4IG9mIGEgZm9udCB0aGF0IGNhbiBzaG93IGEgd29yZC4KKwl2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJR2V0V29yZEZvbnRJbmRleChGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIGNoYXJzZXQsIEZYX0lOVDMyIG5Gb250SW5kZXgpID0gMDsKKwkvL2dldCB0aGUgY2hhcmNvZGUgb2Ygd29yZCBmcm9tIHVuaWNvZGUKKwl2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJQ2hhckNvZGVGcm9tVW5pY29kZShGWF9JTlQzMiBuRm9udEluZGV4LCBGWF9XT1JEIHdvcmQpID0gMDsKKwkvL2dldCB0aGUgY2hhcnNldCBvZiB1bmljb2RlCisJdmlydHVhbCBGWF9JTlQzMgkJCQkJCUNoYXJTZXRGcm9tVW5pY29kZShGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIG5PbGRDaGFyc2V0KSA9IDA7Cit9OworCitjbGFzcyBJRlhfRWRpdF9Ob3RpZnkKK3sKKwkvL3RoaXMgY2xhc3MgaXMgaW1wbGVtZW50ZWQgYnkgdXNlcgorcHVibGljOgorCS8vc2V0IHRoZSBob3Jpem9udGFsIHNjcm9sbGJhciBpbmZvcm1hdGlvbi4KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJSU9uU2V0U2Nyb2xsSW5mb1goRlhfRkxPQVQgZlBsYXRlTWluLCBGWF9GTE9BVCBmUGxhdGVNYXgsIAorCQkJCQkJCQkJCQkJRlhfRkxPQVQgZkNvbnRlbnRNaW4sIEZYX0ZMT0FUIGZDb250ZW50TWF4LCAKKwkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZTbWFsbFN0ZXAsIEZYX0ZMT0FUIGZCaWdTdGVwKSA9IDA7CisJLy9zZXQgdGhlIHZlcnRpY2FsIHNjcm9sbGJhciBpbmZvcm1hdGlvbi4KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJSU9uU2V0U2Nyb2xsSW5mb1koRlhfRkxPQVQgZlBsYXRlTWluLCBGWF9GTE9BVCBmUGxhdGVNYXgsIAorCQkJCQkJCQkJCQkJRlhfRkxPQVQgZkNvbnRlbnRNaW4sIEZYX0ZMT0FUIGZDb250ZW50TWF4LCAKKwkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZTbWFsbFN0ZXAsIEZYX0ZMT0FUIGZCaWdTdGVwKSA9IDA7CisJLy9zZXQgdGhlIHBvc2l0aW9uIG9mIGhvcml6b250YWwgc2Nyb2xsYmFyLgorCXZpcnR1YWwgdm9pZAkJCQkJCQlJT25TZXRTY3JvbGxQb3NYKEZYX0ZMT0FUIGZ4KSA9IDA7CisJLy9zZXQgdGhlIHBvc2l0aW9uIG9mIHZlcnRpY2FsIHNjcm9sbGJhci4KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJSU9uU2V0U2Nyb2xsUG9zWShGWF9GTE9BVCBmeSkgPSAwOworCS8vc2V0IHRoZSBjYXJldCBpbmZvcm1hdGlvbi4KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJSU9uU2V0Q2FyZXQoRlhfQk9PTCBiVmlzaWJsZSxjb25zdCBDUERGX1BvaW50ICYgcHRIZWFkLGNvbnN0IENQREZfUG9pbnQgJiBwdEZvb3QsIGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSkgPSAwOworCS8vaWYgdGhlIGNhcmV0IHBvc2l0aW9uIGlzIGNoYW5nZWQgLHNlbmQgdGhlIGluZm9ybWF0aW9uIG9mIGN1cnJlbnQgcG9zdGlvbiB0byB1c2VyLgorCXZpcnR1YWwgdm9pZAkJCQkJCQlJT25DYXJldENoYW5nZShjb25zdCBDUFZUX1NlY1Byb3BzICYgc2VjUHJvcHMsIGNvbnN0IENQVlRfV29yZFByb3BzICYgd29yZFByb3BzKSA9IDA7CisJLy9pZiB0aGUgdGV4dCBhcmVhIGlzIGNoYW5nZWQsIHNlbmQgdGhlIGluZm9ybWF0aW9uIHRvIHVzZXIuCisJdmlydHVhbCB2b2lkCQkJCQkJCUlPbkNvbnRlbnRDaGFuZ2UoY29uc3QgQ1BERl9SZWN0JiByY0NvbnRlbnQpID0gMDsKKwkvL0ludmFsaWRhdGUgdGhlIHJlY3RhbmdsZSByZWxhdGl2ZSB0byB0aGUgYm91bmRpbmcgYm94IG9mIGVkaXQuCisJdmlydHVhbCB2b2lkCQkJCQkJCUlPbkludmFsaWRhdGVSZWN0KENQREZfUmVjdCAqIHBSZWN0KSA9IDA7Cit9OworCitjbGFzcyBJRlhfRWRpdF9PcHJOb3RpZnkKK3sKKwkvL3RoaXMgY2xhc3MgaXMgaW1wbGVtZW50ZWQgYnkgdXNlcgorcHVibGljOgorCS8vT3ByVHlwZTogMAorCXZpcnR1YWwgdm9pZAkJCQkJCQlPbkluc2VydFdvcmQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgb2xkcGxhY2UpID0gMDsKKwkvL09wclR5cGU6IDEKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJT25JbnNlcnRSZXR1cm4oY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgb2xkcGxhY2UpID0gMDsKKwkvL09wclR5cGU6IDIKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJT25CYWNrU3BhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgb2xkcGxhY2UpID0gMDsKKwkvL09wclR5cGU6IDMKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJT25EZWxldGUoY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgb2xkcGxhY2UpID0gMDsKKwkvL09wclR5cGU6IDQKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJT25DbGVhcihjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlJiBvbGRwbGFjZSkgPSAwOworCS8vT3ByVHlwZTogNQorCXZpcnR1YWwgdm9pZAkJCQkJCQlPbkluc2VydFRleHQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgb2xkcGxhY2UpID0gMDsKKwkvL09wclR5cGU6IDYKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJT25TZXRUZXh0KGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIG9sZHBsYWNlKSA9IDA7CisJLy8KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJT25BZGRVbmRvKElGWF9FZGl0X1VuZG9JdGVtKiBwVW5kb0l0ZW0pID0gMDsKK307CisKK2NsYXNzIElGWF9FZGl0X0l0ZXJhdG9yCit7CitwdWJsaWM6CisJdmlydHVhbCB+SUZYX0VkaXRfSXRlcmF0b3IoKSAge30KK3B1YmxpYzoKKwkvL21vdmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIG5leHQgd29yZC4KKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJTmV4dFdvcmQoKSA9IDA7CisJLy9tb3ZlIHRoZSBjdXJyZW50IHBvc2l0aW9uIHRvIHRoZSBuZXh0IGxpbmUuCisJdmlydHVhbCBGWF9CT09MCQkJCQkJCU5leHRMaW5lKCkgPSAwOworCS8vbW92ZSB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgbmV4dCBzZWN0aW9uLiAKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJTmV4dFNlY3Rpb24oKSA9IDA7CisKKwkvL21vdmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gdG8gdGhlIHByZXZpb3VzIHdvcmQuCisJdmlydHVhbCBGWF9CT09MCQkJCQkJCVByZXZXb3JkKCkgPSAwOworCS8vbW92ZSB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUgcHJldmlvdXMgbGluZS4KKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJUHJldkxpbmUoKSA9IDA7CisJLy9tb3ZlIHRoZSBjdXJyZW50IHBvc2l0aW9uIHRvIHRoZSBwcmV2aW91cyBzZWN0aW9uLiAKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJUHJldlNlY3Rpb24oKSA9IDA7CisKKwkvL2dldCB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIGN1cnJlbnQgd29yZC4KKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJR2V0V29yZChDUFZUX1dvcmQgJiB3b3JkKSBjb25zdCA9IDA7CisJLy9nZXQgdGhlIGluZm9ybWF0aW9uIG9mIHRoZSBjdXJyZW50IGxpbmUuCisJdmlydHVhbCBGWF9CT09MCQkJCQkJCUdldExpbmUoQ1BWVF9MaW5lICYgbGluZSkgY29uc3QgPSAwOworCS8vZ2V0IHRoZSBpbmZvcm1hdGlvbiBvZiB0aGUgY3VycmVudCBzZWN0aW9uLgorCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlHZXRTZWN0aW9uKENQVlRfU2VjdGlvbiAmIHNlY3Rpb24pIGNvbnN0ID0gMDsKKwkvL3NldCB0aGUgY3VycmVudCBwb3NpdGlvbi4KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0QXQoRlhfSU5UMzIgbldvcmRJbmRleCkgPSAwOworCS8vc2V0IHRoZSBjdXJyZW50IHBvc2l0aW9uLgorCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXRBdChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSA9IDA7CisJLy9nZXQgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisJdmlydHVhbCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmCQkJR2V0QXQoKSBjb25zdCA9IDA7CisKKwkvL2dldCB0aGUgZWRpdCB3aGljaCB0aGlzIGl0ZXJhdG9yIGJlbG9uZ3MgdG8KKwl2aXJ0dWFsIElGWF9FZGl0KgkJCQkJCUdldEVkaXQoKSBjb25zdCA9IDA7Cit9OworCitjbGFzcyBJRlhfRWRpdF9VbmRvSXRlbQoreworcHVibGljOgorCXZpcnR1YWwgdm9pZAkJCQkJCQlVbmRvKCkgPSAwOworCXZpcnR1YWwgdm9pZAkJCQkJCQlSZWRvKCkgPSAwOworCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCQkJCUdldFVuZG9UaXRsZSgpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJUmVsZWFzZSgpID0gMDsKK307CisKK2NsYXNzIEZYRVRfQ0xBU1MgSUZYX0VkaXQKK3sKK3B1YmxpYzoKKwlzdGF0aWMgSUZYX0VkaXQqCQkJCQkJTmV3RWRpdCgpOworCXN0YXRpYwl2b2lkCQkJCQkJCURlbEVkaXQoSUZYX0VkaXQqIHBFZGl0KTsKKworcHVibGljOgorCS8vc2V0IGEgSUZYX0VkaXRfRm9udE1hcCBwb2ludGVyIGltcGxlbWVudGVkIGJ5IHVzZXIuCisJdmlydHVhbCB2b2lkCQkJCQkJCVNldEZvbnRNYXAoSUZYX0VkaXRfRm9udE1hcCogcEZvbnRNYXApID0gMDsKKwkvL2lmIHVzZXIgZG9uJ3QgbGlrZSB0byB1c2UgRm9udE1hcCwgaW1wbGVtZW50IFZUUHJvdmlkZXIgYW5kIHNldCBpdCBkaXJlY3RseS4KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0VlRQcm92aWRlcihJUERGX1ZhcmlhYmxlVGV4dF9Qcm92aWRlciogcFByb3ZpZGVyKSA9IDA7CisJLy9zZXQgYSBJRlhfRWRpdF9Ob3RpZnkgcG9pbnRlciBpbXBsZW1lbnRlZCBieSB1c2VyLgorCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXROb3RpZnkoSUZYX0VkaXRfTm90aWZ5ICogcE5vdGlmeSkgPSAwOworCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXRPcHJOb3RpZnkoSUZYX0VkaXRfT3ByTm90aWZ5KiBwT3ByTm90aWZ5KSA9IDA7CisJLy9nZXQgYSBwb2ludGVyIGFsbG9jYXRlZCBieSBDUERGX0VkaXQsIGJ5IHRoaXMgcG9pbnRlciwgdXNlciBjYW4gaXRlcmF0ZSB0aGUgY29udGVudHMgb2YgZWRpdCwgYnV0IGRvbid0IG5lZWQgdG8gcmVsZWFzZS4KKwl2aXJ0dWFsIElGWF9FZGl0X0l0ZXJhdG9yKgkJCQlHZXRJdGVyYXRvcigpID0gMDsKKwkvL2dldCBhIFZUIHBvaW50ZXIgcmVsYXRpdmUgdG8gdGhpcyBlZGl0LgorCXZpcnR1YWwgSVBERl9WYXJpYWJsZVRleHQqCQkJCUdldFZhcmlhYmxlVGV4dCgpID0gMDsKKwkvL2dldCB0aGUgSUZYX0VkaXRfRm9udE1hcCBwb2ludGVyIHNldCBieSB1c2VyLgorCXZpcnR1YWwgSUZYX0VkaXRfRm9udE1hcCoJCQkJR2V0Rm9udE1hcCgpID0gMDsKKworCS8vaW5pdGlhbGl6ZSB0aGUgZWRpdC4KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJSW5pdGlhbGl6ZSgpID0gMDsKKworCS8vc2V0IHRoZSBib3VuZGluZyBib3ggb2YgdGhlIHRleHQgYXJlYS4KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0UGxhdGVSZWN0KGNvbnN0IENQREZfUmVjdCAmIHJlY3QsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSkgPSAwOworCS8vc2V0IHRoZSBzY3JvbGwgb3JpZ2luCisJdmlydHVhbCB2b2lkCQkJCQkJCVNldFNjcm9sbFBvcyhjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpID0gMDsKKworCS8vc2V0IHRoZSBob3Jpem9udGFsIHRleHQgYWxpZ25tZW50IGluIHRleHQgYm94LCBuRm9ybWF0ICgwOmxlZnQgMTptaWRkbGUgMjpyaWdodCkuCisJdmlydHVhbCB2b2lkCQkJCQkJCVNldEFsaWdubWVudEgoRlhfSU5UMzIgbkZvcm1hdCA9IDAsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSkgPSAwOworCS8vc2V0IHRoZSB2ZXJ0aWNhbCB0ZXh0IGFsaWdubWVudCBpbiB0ZXh0IGJveCwgbkZvcm1hdCAoMDp0b3AgMTpjZW50ZXIgMjpib3R0b20pLgorCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXRBbGlnbm1lbnRWKEZYX0lOVDMyIG5Gb3JtYXQgPSAwLCBGWF9CT09MIGJQYWludCA9IFRSVUUpID0gMDsKKwkvL2lmIHRoZSB0ZXh0IGlzIHNob3duIGluIHNlY3JldCAsIHNldCBhIGNoYXJhY3RlciBmb3Igc3Vic3RpdHV0ZS4KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0UGFzc3dvcmRDaGFyKEZYX1dPUkQgd1N1YldvcmQgPSAnKicsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSkgPSAwOworCS8vc2V0IHRoZSBtYXhpbWFsIGNvdW50IG9mIHdvcmRzIG9mIHRoZSB0ZXh0LgorCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXRMaW1pdENoYXIoRlhfSU5UMzIgbkxpbWl0Q2hhciA9IDAsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSkgPSAwOworCS8vaWYgc2V0IHRoZSBjb3VudCBvZiBjaGFyQXJyYXkgLCB0aGVuIGFsbCB3b3JkcyBpcyBzaG93biBpbiBlcXVhbCBzcGFjZS4KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0Q2hhckFycmF5KEZYX0lOVDMyIG5DaGFyQXJyYXkgPSAwLCBGWF9CT09MIGJQYWludCA9IFRSVUUpID0gMDsKKwkvL3NldCB0aGUgc3BhY2Ugb2YgdHdvIGNoYXJhY3RlcnMuCisJdmlydHVhbCB2b2lkCQkJCQkJCVNldENoYXJTcGFjZShGWF9GTE9BVCBmQ2hhclNwYWNlID0gMC4wZiwgRlhfQk9PTCBiUGFpbnQgPSBUUlVFKSA9IDA7CisJLy9zZXQgdGhlIGhvcml6b250YWwgc2NhbGUgb2YgYWxsIGNoYXJhY3RlcnMuCisJdmlydHVhbCB2b2lkCQkJCQkJCVNldEhvcnpTY2FsZShGWF9JTlQzMiBuSG9yelNjYWxlID0gMTAwLCBGWF9CT09MIGJQYWludCA9IFRSVUUpID0gMDsKKwkvL3NldCB0aGUgbGVhZGluZyBvZiBhbGwgbGluZXMKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0TGluZUxlYWRpbmcoRlhfRkxPQVQgZkxpbmVMZWFkaW5nLCBGWF9CT09MIGJQYWludCA9IFRSVUUpID0gMDsKKwkvL2lmIHNldCwgQ1JMRiBpcyBhbGxvd2VkLgorCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXRNdWx0aUxpbmUoRlhfQk9PTCBiTXVsdGlMaW5lID0gVFJVRSwgRlhfQk9PTCBiUGFpbnQgPSBUUlVFKSA9IDA7CisJLy9pZiBzZXQsIGFsbCB3b3JkcyBhdXRvIGZpdCB0aGUgd2lkdGggb2YgdGhlIGJvdW5kaW5nIGJveC4JCisJdmlydHVhbCB2b2lkCQkJCQkJCVNldEF1dG9SZXR1cm4oRlhfQk9PTCBiQXV0byA9IFRSVUUsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSkgPSAwOworCS8vaWYgc2V0LCBhIGZvbnQgc2l6ZSBpcyBjYWxjdWxhdGVkIHRvIGZ1bGwgZml0IHRoZSBib3VuZGluZyBib3guCisJdmlydHVhbCB2b2lkCQkJCQkJCVNldEF1dG9Gb250U2l6ZShGWF9CT09MIGJBdXRvID0gVFJVRSwgRlhfQk9PTCBiUGFpbnQgPSBUUlVFKSA9IDA7CisJLy9pcyBzZXQsIHRoZSB0ZXh0IGlzIGFsbG93ZWQgdG8gc2Nyb2xsLgorCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXRBdXRvU2Nyb2xsKEZYX0JPT0wgYkF1dG8gPSBUUlVFLCBGWF9CT09MIGJQYWludCA9IFRSVUUpID0gMDsKKwkvL3NldCB0aGUgZm9udCBzaXplIG9mIGFsbCB3b3Jkcy4KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0Rm9udFNpemUoRlhfRkxPQVQgZkZvbnRTaXplLCBGWF9CT09MIGJQYWludCA9IFRSVUUpID0gMDsKKwkvL3RoZSB0ZXh0IGlzIGFsbG93ZWQgdG8gYXV0by1zY3JvbGwsIGFsbG93IHRoZSB0ZXh0IG92ZXJmbG93PworCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXRUZXh0T3ZlcmZsb3coRlhfQk9PTCBiQWxsb3dlZCA9IEZBTFNFLCBGWF9CT09MIGJQYWludCA9IFRSVUUpID0gMDsKKworCS8vcXVlcnkgaWYgdGhlIGVkaXQgaXMgcmljaGVkaXQuCisJdmlydHVhbCBGWF9CT09MCQkJCQkJCUlzUmljaFRleHQoKSBjb25zdCA9IDA7CisJLy9zZXQgdGhlIGVkaXQgaXMgcmljaGVkaXQuCisJdmlydHVhbCB2b2lkCQkJCQkJCVNldFJpY2hUZXh0KEZYX0JPT0wgYlJpY2hUZXh0ID0gVFJVRSwgRlhfQk9PTCBiUGFpbnQgPSBUUlVFKSA9IDA7CisJLy9zZXQgdGhlIGZvbnRzaXplIG9mIHNlbGVjdGVkIHRleHQuCisJdmlydHVhbCBGWF9CT09MCQkJCQkJCVNldFJpY2hGb250U2l6ZShGWF9GTE9BVCBmRm9udFNpemUpID0gMDsJCisJLy9zZXQgdGhlIGZvbnRpbmRleCBvZiBzZWxlY3RlZCB0ZXh0LCB1c2VyIGNhbiBjaGFuZ2UgdGhlIGZvbnQgb2Ygc2VsZWN0ZWQgdGV4dC4KKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJU2V0UmljaEZvbnRJbmRleChGWF9JTlQzMiBuRm9udEluZGV4KSA9IDA7CisJLy9zZXQgdGhlIHRleHRjb2xvciBvZiBzZWxlY3RlZCB0ZXh0LgorCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlTZXRSaWNoVGV4dENvbG9yKEZYX0NPTE9SUkVGIGR3Q29sb3IpID0gMDsKKwkvL3NldCB0aGUgdGV4dCBzY3JpcHQgdHlwZSBvZiBzZWxlY3RlZCB0ZXh0LiAoMDpub3JtYWwgMTpzdXBlcnNjcmlwdCAyOnN1YnNjcmlwdCkKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJU2V0UmljaFRleHRTY3JpcHQoRlhfSU5UMzIgblNjcmlwdFR5cGUpID0gMDsJCisJLy9zZXQgdGhlIGJvbGQgZm9udCBzdHlsZSBvZiBzZWxlY3RlZCB0ZXh0LgorCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlTZXRSaWNoVGV4dEJvbGQoRlhfQk9PTCBiQm9sZCA9IFRSVUUpID0gMDsKKwkvL3NldCB0aGUgaXRhbGljIGZvbnQgc3R5bGUgb2Ygc2VsZWN0ZWQgdGV4dC4KKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJU2V0UmljaFRleHRJdGFsaWMoRlhfQk9PTCBiSXRhbGljID0gVFJVRSkgPSAwOworCS8vc2V0IHRoZSB1bmRlcmxpbmUgc3R5bGUgb2Ygc2VsZWN0ZWQgdGV4dC4KKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJU2V0UmljaFRleHRVbmRlcmxpbmUoRlhfQk9PTCBiVW5kZXJsaW5lID0gVFJVRSkgPSAwOworCS8vc2V0IHRoZSBjcm9zc291dCBzdHlsZSBvZiBzZWxlY3RlZCB0ZXh0LgorCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlTZXRSaWNoVGV4dENyb3Nzb3V0KEZYX0JPT0wgYkNyb3Nzb3V0ID0gVFJVRSkgPSAwOworCS8vc2V0IHRoZSBjaGFyc3BhY2Ugb2Ygc2VsZWN0ZWQgdGV4dCwgaW4gdXNlciBjb29yZGluYXRlLgorCXZpcnR1YWwJRlhfQk9PTAkJCQkJCQlTZXRSaWNoVGV4dENoYXJTcGFjZShGWF9GTE9BVCBmQ2hhclNwYWNlKSA9IDA7CisJLy9zZXQgdGhlIGhvcml6b250YWwgc2NhbGUgb2Ygc2VsZWN0ZWQgdGV4dCwgZGVmYXVsdCB2YWx1ZSBpcyAxMDAuCisJdmlydHVhbCBGWF9CT09MCQkJCQkJCVNldFJpY2hUZXh0SG9yelNjYWxlKEZYX0lOVDMyIG5Ib3J6U2NhbGUgPSAxMDApID0gMDsKKwkvL3NldCB0aGUgbGVhZGluZyBvZiBzZWxlY3RlZCBzZWN0aW9uLCBpbiB1c2VyIGNvb3JkaW5hdGUuCisJdmlydHVhbCBGWF9CT09MCQkJCQkJCVNldFJpY2hUZXh0TGluZUxlYWRpbmcoRlhfRkxPQVQgZkxpbmVMZWFkaW5nKSA9IDA7CisJLy9zZXQgdGhlIGluZGVudCBvZiBzZWxlY3RlZCBzZWN0aW9uLCBpbiB1c2VyIGNvb3JkaW5hdGUuCisJdmlydHVhbCBGWF9CT09MCQkJCQkJCVNldFJpY2hUZXh0TGluZUluZGVudChGWF9GTE9BVCBmTGluZUluZGVudCkgPSAwOworCS8vc2V0IHRoZSBhbGlnbm1lbnQgb2Ygc2VsZWN0ZWQgc2VjdGlvbiwgbkFsaWdubWVudCgwOmxlZnQgMTptaWRkbGUgMjpyaWdodCkKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJU2V0UmljaFRleHRBbGlnbm1lbnQoRlhfSU5UMzIgbkFsaWdubWVudCkgPSAwOworCisJLy9zZXQgdGhlIHNlbGVjdGVkIHJhbmdlIG9mIHRleHQuCisJLy9pZiBuU3RhcnRDaGFyID09IDAgYW5kIG5FbmRDaGFyID09IC0xLCBzZWxlY3QgYWxsIHRoZSB0ZXh0LgorCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXRTZWwoRlhfSU5UMzIgblN0YXJ0Q2hhcixGWF9JTlQzMiBuRW5kQ2hhcikgPSAwOworCS8vZ2V0IHRoZSBzZWxlY3RlZCByYW5nZSBvZiB0ZXh0LgorCXZpcnR1YWwgdm9pZAkJCQkJCQlHZXRTZWwoRlhfSU5UMzIgJiBuU3RhcnRDaGFyLCBGWF9JTlQzMiAmIG5FbmRDaGFyKSBjb25zdCA9IDA7CisJLy9zZWxlY3QgYWxsIHRoZSB0ZXh0LgorCXZpcnR1YWwJdm9pZAkJCQkJCQlTZWxlY3RBbGwoKSA9IDA7CisJLy9zZXQgdGV4dCBpcyBub3Qgc2VsZWN0ZWQuCisJdmlydHVhbCB2b2lkCQkJCQkJCVNlbGVjdE5vbmUoKSA9IDA7CQkKKwkvL2dldCB0aGUgY2FyZXQgcG9zaXRpb24uCisJdmlydHVhbCBGWF9JTlQzMgkJCQkJCUdldENhcmV0KCkgY29uc3QgPSAwOworCXZpcnR1YWwgQ1BWVF9Xb3JkUGxhY2UJCQkJCUdldENhcmV0V29yZFBsYWNlKCkgY29uc3QgPSAwOworCS8vZ2V0IHRoZSBzdHJpbmcgb2Ygc2VsZWN0ZWQgdGV4dC4KKwl2aXJ0dWFsIENGWF9XaWRlU3RyaW5nCQkJCQlHZXRTZWxUZXh0KCkgY29uc3QgPSAwOworCS8vZ2V0IHRoZSB0ZXh0IGNvbmVudAorCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCQkJCUdldFRleHQoKSBjb25zdCA9IDA7CisJLy9xdWVyeSBpZiBhbnkgdGV4dCBpcyBzZWxlY3RlZC4KKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJSXNTZWxlY3RlZCgpIGNvbnN0ID0gMDsJCisJLy9nZXQgdGhlIHNjcm9sbCBvcmlnaW4KKwl2aXJ0dWFsIENQREZfUG9pbnQJCQkJCQlHZXRTY3JvbGxQb3MoKSBjb25zdCA9IDA7CisJLy9nZXQgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgdGV4dCBhcmVhLgorCXZpcnR1YWwgQ1BERl9SZWN0CQkJCQkJR2V0UGxhdGVSZWN0KCkgY29uc3QgPSAwOworCS8vZ2V0IHRoZSBmYWN0IGFyZWEgb2YgdGhlIHRleHQuCisJdmlydHVhbCBDUERGX1JlY3QJCQkJCQlHZXRDb250ZW50UmVjdCgpIGNvbnN0ID0gMDsKKwkvL2dldCB0aGUgdmlzaWJsZSB3b3JkIHJhbmdlCisJdmlydHVhbCBDUFZUX1dvcmRSYW5nZQkJCQkJR2V0VmlzaWJsZVdvcmRSYW5nZSgpIGNvbnN0ID0gMDsKKwkvL2dldCB0aGUgd2hvbGUgd29yZCByYW5nZQorCXZpcnR1YWwgQ1BWVF9Xb3JkUmFuZ2UJCQkJCUdldFdob2xlV29yZFJhbmdlKCkgY29uc3QgPSAwOworCS8vZ2V0IHRoZSB3b3JkIHJhbmdlIG9mIHNlbGVjdCB0ZXh0CisJdmlydHVhbCBDUFZUX1dvcmRSYW5nZQkJCQkJR2V0U2VsZWN0V29yZFJhbmdlKCkgY29uc3QgPSAwOworCisJLy9zZW5kIHRoZSBtb3VzZWRvd24gbWVzc2FnZSB0byBlZGl0IGZvciByZXNwb25zZS4KKwkvL2lmIFNoaWZ0IGtleSBpcyBob2xkLCBiU2hpZnQgaXMgVFJVRSwgaXMgQ3RybCBrZXkgaXMgaG9sZCwgYkN0cmwgaXMgVFJVRS4KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJT25Nb3VzZURvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpID0gMDsKKwkvL3NlbmQgdGhlIG1vdXNlbW92ZSBtZXNzYWdlIHRvIGVkaXQgd2hlbiBtb3VzZSBkb3duIGlzIFRSVUUuCisJdmlydHVhbCB2b2lkCQkJCQkJCU9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCxGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKSA9IDA7CisJLy9zZW5kIHRoZSBVUCBrZXkgbWVzc2FnZSB0byBlZGl0LgorCXZpcnR1YWwgdm9pZAkJCQkJCQlPblZLX1VQKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpID0gMDsKKwkvL3NlbmQgdGhlIERPV04ga2V5IG1lc3NhZ2UgdG8gZWRpdC4KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJT25WS19ET1dOKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpID0gMDsKKwkvL3NlbmQgdGhlIExFRlQga2V5IG1lc3NhZ2UgdG8gZWRpdC4KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJT25WS19MRUZUKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpID0gMDsKKwkvL3NlbmQgdGhlIFJJR0hUIGtleSBtZXNzYWdlIHRvIGVkaXQuCisJdmlydHVhbCB2b2lkCQkJCQkJCU9uVktfUklHSFQoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkgPSAwOworCS8vc2VuZCB0aGUgSE9NRSBrZXkgbWVzc2FnZSB0byBlZGl0LgorCXZpcnR1YWwgdm9pZAkJCQkJCQlPblZLX0hPTUUoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkgPSAwOworCS8vc2VuZCB0aGUgRU5EIGtleSBtZXNzYWdlIHRvIGVkaXQuCisJdmlydHVhbCB2b2lkCQkJCQkJCU9uVktfRU5EKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpID0gMDsKKworCS8vcHV0IHRleHQgaW50byBlZGl0LgorCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXRUZXh0KEZYX0xQQ1dTVFIgdGV4dCxGWF9JTlQzMiBjaGFyc2V0ID0gREVGQVVMVF9DSEFSU0VULAorCQkJCQkJCQkJCQkJCWNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMgPSBOVUxMLGNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcyA9IE5VTEwpID0gMDsJCisJLy9pbnNlcnQgYSB3b3JkIGludG8gdGhlIGVkaXQuCisJdmlydHVhbCBGWF9CT09MCQkJCQkJCUluc2VydFdvcmQoRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBjaGFyc2V0ID0gREVGQVVMVF9DSEFSU0VULCBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMgPSBOVUxMKSA9IDA7CisJLy9pbnNlcnQgYSByZXR1cm4gaW50byB0aGUgZWRpdC4KKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJSW5zZXJ0UmV0dXJuKGNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMgPSBOVUxMLGNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcyA9IE5VTEwpID0gMDsJCisJLy9pbnNlcnQgdGV4dCBpbnRvIHRoZSBlZGl0LgorCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlJbnNlcnRUZXh0KEZYX0xQQ1dTVFIgdGV4dCwgRlhfSU5UMzIgY2hhcnNldCA9IERFRkFVTFRfQ0hBUlNFVCwKKwkJCQkJCQkJCQkJCQljb25zdCBDUFZUX1NlY1Byb3BzICogcFNlY1Byb3BzID0gTlVMTCxjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMgPSBOVUxMKSA9IDA7CisJLy9kbyBiYWNrc3BhY2Ugb3BlcmF0aW9uLgorCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlCYWNrc3BhY2UoKSA9IDA7CisJLy9kbyBkZWxldGUgb3BlcmF0aW9uLgorCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlEZWxldGUoKSA9IDA7CQorCS8vZGVsZXRlIHRoZSBzZWxlY3RlZCB0ZXh0LgorCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlDbGVhcigpID0gMDsKKworCS8vZG8gUmVkbyBvcGVyYXRpb24uCisJdmlydHVhbCBGWF9CT09MCQkJCQkJCVJlZG8oKSA9IDA7CisJLy9kbyBVbmRvIG9wZXJhdGlvbi4KKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJVW5kbygpID0gMDsKKwkvL21vdmUgY2FyZXQKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0Q2FyZXQoRlhfSU5UMzIgblBvcykgPSAwOworCisJLy9hcnJhbmdlIGFsbCB3b3JkcyBvdmVyIGFnYWluCisJdmlydHVhbCB2b2lkCQkJCQkJCVBhaW50KCkgPSAwOworCQorCS8vYWxsb3cgdG8gcmVmcmVzaCBzY3JlZW4/CisJdmlydHVhbCB2b2lkCQkJCQkJCUVuYWJsZVJlZnJlc2goRlhfQk9PTCBiUmVmcmVzaCkgPSAwOworCisJdmlydHVhbCB2b2lkCQkJCQkJCVJlZnJlc2hXb3JkUmFuZ2UoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UmIHdyKSA9IDA7CisKKwkvL2FsbG93IHVuZG8vcmVkbz8KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJRW5hYmxlVW5kbyhGWF9CT09MIGJVbmRvKSA9IDA7CisKKwkvL2FsbG93IG5vdGlmeT8KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJRW5hYmxlTm90aWZ5KEZYX0JPT0wgYk5vdGlmeSkgPSAwOworCisJLy9hbGxvdyBvcHIgbm90aWZ5PworCXZpcnR1YWwgdm9pZAkJCQkJCQlFbmFibGVPcHJOb3RpZnkoRlhfQk9PTCBiTm90aWZ5KSA9IDA7CisKKwkvL21hcCB3b3JkIHBsYWNlIHRvIHdvcmQgaW5kZXguCisJdmlydHVhbCBGWF9JTlQzMgkJCQkJCVdvcmRQbGFjZVRvV29yZEluZGV4KGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0ID0gMDsKKwkvL21hcCB3b3JkIGluZGV4IHRvIHdvcmQgcGxhY2UuCisJdmlydHVhbCBDUFZUX1dvcmRQbGFjZQkJCQkJV29yZEluZGV4VG9Xb3JkUGxhY2UoRlhfSU5UMzIgaW5kZXgpIGNvbnN0ID0gMDsKKworCS8vZ2V0IHRoZSBiZWdpbm5pbmcgcG9zaXRpb24gb2YgYSBsaW5lCisJdmlydHVhbCBDUFZUX1dvcmRQbGFjZQkJCQkJR2V0TGluZUJlZ2luUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3QgPSAwOworCisJLy9nZXQgdGhlIGVuZGluZyBwb3NpdGlvbiBvZiBhIGxpbmUKKwl2aXJ0dWFsIENQVlRfV29yZFBsYWNlCQkJCQlHZXRMaW5lRW5kUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3QgPSAwOworCisJLy9nZXQgdGhlIGJlZ2lubmluZyBwb3NpdGlvbiBvZiBhIHNlY3Rpb24KKwl2aXJ0dWFsIENQVlRfV29yZFBsYWNlCQkJCQlHZXRTZWN0aW9uQmVnaW5QbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdCA9IDA7CisKKwkvL2dldCB0aGUgZW5kaW5nIHBvc2l0aW9uIG9mIGEgc2VjdGlvbgorCXZpcnR1YWwgQ1BWVF9Xb3JkUGxhY2UJCQkJCUdldFNlY3Rpb25FbmRQbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdCA9IDA7CisKKwkvL3NlYXJjaCBhIHdvcmRwbGFjZSBmb3JtIHBvaW50CisJdmlydHVhbCBDUFZUX1dvcmRQbGFjZQkJCQkJU2VhcmNoV29yZFBsYWNlKGNvbnN0IENQREZfUG9pbnQmIHBvaW50KSBjb25zdCA9IDA7CisKKwkvL2dldCB0aGUgZm9udCBzaXplIG9mIG5vbl9yaWNoIHRleHQgb3IgZGVmYXVsdCBmb250IHNpemUgb2YgcmljaHRleHQuCisJdmlydHVhbCBGWF9GTE9BVAkJCQkJCUdldEZvbnRTaXplKCkgY29uc3QgPSAwOworCS8vZ2V0IHRoZSBtYXNrIGNoYXJhY3Rlci4KKwl2aXJ0dWFsIEZYX1dPUkQJCQkJCQkJR2V0UGFzc3dvcmRDaGFyKCkgY29uc3QgPSAwOworCS8vZ2V0IHRoZSBjb3VudCBvZiBjaGFyQXJyYXkKKwl2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJR2V0Q2hhckFycmF5KCkgY29uc3QgPSAwOworCS8vZ2V0IHRoZSBob3Jpem9udGFsIHNjYWxlIG9mIGFsbCBjaGFyYWN0ZXJzCisJdmlydHVhbCBGWF9JTlQzMgkJCQkJCUdldEhvcnpTY2FsZSgpIGNvbnN0ID0gMDsKKwkvL2dldCB0aGUgc3BhY2Ugb2YgdHdvIGNoYXJhY3RlcnMKKwl2aXJ0dWFsIEZYX0ZMT0FUCQkJCQkJR2V0Q2hhclNwYWNlKCkgY29uc3QgPSAwOworCS8vZ2V0IHRoZSBsYXRpbiB3b3JkcyBvZiBzcGVjaWZpZWQgcmFuZ2UKKwl2aXJ0dWFsIENGWF9XaWRlU3RyaW5nCQkJCQlHZXRSYW5nZVRleHQoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiByYW5nZSkgY29uc3QgPSAwOworCS8vaXMgdGhlIHRleHQgZnVsbCBpbiBib3VuZGluZyBib3gKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJSXNUZXh0RnVsbCgpIGNvbnN0ID0gMDsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJQ2FuVW5kbygpIGNvbnN0ID0gMDsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJQ2FuUmVkbygpIGNvbnN0ID0gMDsKKwkvL2lmIHRoZSBjb250ZW50IGlzIGNoYW5nZWQgYWZ0ZXIgc2V0dGV4dD8KKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJSXNNb2RpZmllZCgpIGNvbnN0ID0gMDsKKwkvL2dldCB0aGUgdG90YWwgd29yZHMgaW4gZWRpdAorCXZpcnR1YWwgRlhfSU5UMzIJCQkJCQlHZXRUb3RhbFdvcmRzKCkgY29uc3QgPSAwOworCisJdmlydHVhbCB2b2lkCQkJCQkJCUFkZFVuZG9JdGVtKElGWF9FZGl0X1VuZG9JdGVtKiBwVW5kb0l0ZW0pID0gMDsKKworcHVibGljOgorCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0RWRpdEFwcGVhcmFuY2VTdHJlYW0oSUZYX0VkaXQqIHBFZGl0LCBjb25zdCBDUERGX1BvaW50ICYgcHRPZmZzZXQsIAorCQkJCQkJCQkJCQkJCWNvbnN0IENQVlRfV29yZFJhbmdlKiBwUmFuZ2UgPSBOVUxMLCAKKwkJCQkJCQkJCQkJCQlGWF9CT09MIGJDb250aW51b3VzID0gVFJVRSwgRlhfV09SRCBTdWJXb3JkID0gMCk7CisJc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZXRTZWxlY3RBcHBlYXJhbmNlU3RyZWFtKElGWF9FZGl0KiBwRWRpdCwgY29uc3QgQ1BERl9Qb2ludCAmIHB0T2Zmc2V0LCBjb25zdCBDUFZUX1dvcmRSYW5nZSogcFJhbmdlID0gTlVMTCk7CisJc3RhdGljIHZvaWQJCQkJCQkJCURyYXdFZGl0KENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsIElGWF9FZGl0KiBwRWRpdCwgRlhfQ09MT1JSRUYgY3JUZXh0RmlsbCwgRlhfQ09MT1JSRUYgY3JUZXh0U3Ryb2tlLAorCQkJCQkJCQkJCQkJCWNvbnN0IENQREZfUmVjdCYgcmNDbGlwLCBjb25zdCBDUERGX1BvaW50JiBwdE9mZnNldCwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UqIHBSYW5nZSwgSUZYX1N5c3RlbUhhbmRsZXIqIHBTeXN0ZW1IYW5kbGVyLCB2b2lkKiBwRkZMRGF0YSk7CisJc3RhdGljIHZvaWQJCQkJCQkJCURyYXdVbmRlcmxpbmUoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwgSUZYX0VkaXQqIHBFZGl0LCBGWF9DT0xPUlJFRiBjb2xvciwKKwkJCQkJCQkJCQkJCQljb25zdCBDUERGX1JlY3QmIHJjQ2xpcCwgY29uc3QgQ1BERl9Qb2ludCYgcHRPZmZzZXQsIGNvbnN0IENQVlRfV29yZFJhbmdlKiBwUmFuZ2UpOworCXN0YXRpYyB2b2lkCQkJCQkJCQlEcmF3UmljaEVkaXQoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwgSUZYX0VkaXQqIHBFZGl0LCAgCisJCQkJCQkJCQkJCQkJY29uc3QgQ1BERl9SZWN0JiByY0NsaXAsIGNvbnN0IENQREZfUG9pbnQmIHB0T2Zmc2V0LCBjb25zdCBDUFZUX1dvcmRSYW5nZSogcFJhbmdlKTsKKwlzdGF0aWMgdm9pZAkJCQkJCQkJR2VuZXJhdGVQYWdlT2JqZWN0cyhDUERGX1BhZ2VPYmplY3RzKiBwUGFnZU9iamVjdHMsIElGWF9FZGl0KiBwRWRpdCwKKwkJCQkJCQkJCQkJCQljb25zdCBDUERGX1BvaW50JiBwdE9mZnNldCwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UqIHBSYW5nZSwgRlhfQ09MT1JSRUYgY3JUZXh0LCBDRlhfQXJyYXlUZW1wbGF0ZTxDUERGX1RleHRPYmplY3QqPiYgT2JqQXJyYXkpOworCXN0YXRpYyB2b2lkCQkJCQkJCQlHZW5lcmF0ZVJpY2hQYWdlT2JqZWN0cyhDUERGX1BhZ2VPYmplY3RzKiBwUGFnZU9iamVjdHMsIElGWF9FZGl0KiBwRWRpdCwKKwkJCQkJCQkJCQkJCQljb25zdCBDUERGX1BvaW50JiBwdE9mZnNldCwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UqIHBSYW5nZSwgQ0ZYX0FycmF5VGVtcGxhdGU8Q1BERl9UZXh0T2JqZWN0Kj4mIE9iakFycmF5KTsKKwlzdGF0aWMgdm9pZAkJCQkJCQkJR2VuZXJhdGVVbmRlcmxpbmVPYmplY3RzKENQREZfUGFnZU9iamVjdHMqIHBQYWdlT2JqZWN0cywgSUZYX0VkaXQqIHBFZGl0LAorCQkJCQkJCQkJCQkJCWNvbnN0IENQREZfUG9pbnQmIHB0T2Zmc2V0LCBjb25zdCBDUFZUX1dvcmRSYW5nZSogcFJhbmdlLCBGWF9DT0xPUlJFRiBjb2xvcik7Cit9OworCitjbGFzcyBJRlhfTGlzdF9Ob3RpZnkKK3sKKwkvL3RoaXMgY2xhc3MgaXMgaW1wbGVtZW50ZWQgYnkgdXNlcgorcHVibGljOgorCS8vc2V0IHRoZSBob3Jpem9udGFsIHNjcm9sbGJhciBpbmZvcm1hdGlvbi4KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJSU9uU2V0U2Nyb2xsSW5mb1goRlhfRkxPQVQgZlBsYXRlTWluLCBGWF9GTE9BVCBmUGxhdGVNYXgsIAorCQkJCQkJCQkJCQkJRlhfRkxPQVQgZkNvbnRlbnRNaW4sIEZYX0ZMT0FUIGZDb250ZW50TWF4LCAKKwkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZTbWFsbFN0ZXAsIEZYX0ZMT0FUIGZCaWdTdGVwKSA9IDA7CisJLy9zZXQgdGhlIHZlcnRpY2FsIHNjcm9sbGJhciBpbmZvcm1hdGlvbi4KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJSU9uU2V0U2Nyb2xsSW5mb1koRlhfRkxPQVQgZlBsYXRlTWluLCBGWF9GTE9BVCBmUGxhdGVNYXgsIAorCQkJCQkJCQkJCQkJRlhfRkxPQVQgZkNvbnRlbnRNaW4sIEZYX0ZMT0FUIGZDb250ZW50TWF4LCAKKwkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZTbWFsbFN0ZXAsIEZYX0ZMT0FUIGZCaWdTdGVwKSA9IDA7CisJLy9zZXQgdGhlIHBvc2l0aW9uIG9mIGhvcml6b250YWwgc2Nyb2xsYmFyLgorCXZpcnR1YWwgdm9pZAkJCQkJCQlJT25TZXRTY3JvbGxQb3NYKEZYX0ZMT0FUIGZ4KSA9IDA7CisJLy9zZXQgdGhlIHBvc2l0aW9uIG9mIHZlcnRpY2FsIHNjcm9sbGJhci4KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJSU9uU2V0U2Nyb2xsUG9zWShGWF9GTE9BVCBmeSkgPSAwOworCS8vSW52YWxpZGF0ZSB0aGUgcmVjdGFuZ2xlIHJlbGF0aXZlIHRvIHRoZSBib3VuZGluZyBib3ggb2YgZWRpdC4KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJSU9uSW52YWxpZGF0ZVJlY3QoQ1BERl9SZWN0ICogcFJlY3QpID0gMDsKK307CisKK2NsYXNzIEZYRVRfQ0xBU1MgSUZYX0xpc3QKK3sKK3B1YmxpYzoKKwlzdGF0aWMgSUZYX0xpc3QqCQkJCQkJTmV3TGlzdCgpOworCXN0YXRpYyB2b2lkCQkJCQkJCQlEZWxMaXN0KElGWF9MaXN0KiBwTGlzdCk7CisKK3B1YmxpYzoKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0Rm9udE1hcChJRlhfRWRpdF9Gb250TWFwICogcEZvbnRNYXApID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0Tm90aWZ5KElGWF9MaXN0X05vdGlmeSAqIHBOb3RpZnkpID0gMDsKKworCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXRQbGF0ZVJlY3QoY29uc3QgQ1BERl9SZWN0ICYgcmVjdCkgPSAwOworCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXRGb250U2l6ZShGWF9GTE9BVCBmRm9udFNpemUpID0gMDsKKworCXZpcnR1YWwgQ1BERl9SZWN0CQkJCQkJR2V0UGxhdGVSZWN0KCkgY29uc3QgPSAwOworCXZpcnR1YWwgQ1BERl9SZWN0CQkJCQkJR2V0Q29udGVudFJlY3QoKSBjb25zdCA9IDA7CisKKwl2aXJ0dWFsIEZYX0ZMT0FUCQkJCQkJR2V0Rm9udFNpemUoKSBjb25zdCA9IDA7CisJdmlydHVhbCBJRlhfRWRpdCoJCQkJCQlHZXRJdGVtRWRpdChGWF9JTlQzMiBuSW5kZXgpIGNvbnN0ID0gMDsKKwl2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJR2V0Q291bnQoKSBjb25zdCA9IDA7CisJdmlydHVhbCBGWF9CT09MCQkJCQkJCUlzSXRlbVNlbGVjdGVkKEZYX0lOVDMyIG5JbmRleCkgY29uc3QgPSAwOworCXZpcnR1YWwgRlhfRkxPQVQJCQkJCQlHZXRGaXJzdEhlaWdodCgpIGNvbnN0ID0gMDsKKwkKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0TXVsdGlwbGVTZWwoRlhfQk9PTCBiTXVsdGlwbGUpID0gMDsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJSXNNdWx0aXBsZVNlbCgpIGNvbnN0ID0gMDsJCisJdmlydHVhbCBGWF9CT09MCQkJCQkJCUlzVmFsaWQoRlhfSU5UMzIgbkl0ZW1JbmRleCkgY29uc3QgPSAwOworCXZpcnR1YWwgRlhfSU5UMzIJCQkJCQlGaW5kTmV4dChGWF9JTlQzMiBuSW5kZXgsRlhfV0NIQVIgbkNoYXIpIGNvbnN0ID0gMDsJCisKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0U2Nyb2xsUG9zKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgPSAwOworCXZpcnR1YWwgdm9pZAkJCQkJCQlTY3JvbGxUb0xpc3RJdGVtKEZYX0lOVDMyIG5JdGVtSW5kZXgpID0gMDsKKwl2aXJ0dWFsIENQREZfUmVjdAkJCQkJCUdldEl0ZW1SZWN0KEZYX0lOVDMyIG5JbmRleCkgY29uc3QgPSAwOworCXZpcnR1YWwgRlhfSU5UMzIJCQkJCQlHZXRDYXJldCgpIGNvbnN0ID0gMDsKKwl2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJR2V0U2VsZWN0KCkgY29uc3QgPSAwOwkKKwl2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJR2V0VG9wSXRlbSgpIGNvbnN0ID0gMDsKKwl2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJR2V0SXRlbUluZGV4KGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3QgPSAwOworCXZpcnR1YWwgRlhfSU5UMzIJCQkJCQlHZXRGaXJzdFNlbGVjdGVkKCkgY29uc3QgPSAwOworCisJdmlydHVhbCB2b2lkCQkJCQkJCUFkZFN0cmluZyhGWF9MUENXU1RSIHN0cmluZykgPSAwOworCXZpcnR1YWwgdm9pZAkJCQkJCQlTZXRUb3BJdGVtKEZYX0lOVDMyIG5JbmRleCkgPSAwOwkKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJU2VsZWN0KEZYX0lOVDMyIG5JdGVtSW5kZXgpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJU2V0Q2FyZXQoRlhfSU5UMzIgbkl0ZW1JbmRleCkgPSAwOworCXZpcnR1YWwgdm9pZAkJCQkJCQlFbXB0eSgpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJQ2FuY2VsKCkgPSAwOworCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCQkJCUdldFRleHQoKSBjb25zdCA9IDA7CisKKworCXZpcnR1YWwgdm9pZAkJCQkJCQlPbk1vdXNlRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkgPSAwOworCXZpcnR1YWwgdm9pZAkJCQkJCQlPbk1vdXNlTW92ZShjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkgPSAwOworCXZpcnR1YWwgdm9pZAkJCQkJCQlPblZLX1VQKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJT25WS19ET1dOKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJT25WS19MRUZUKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJT25WS19SSUdIVChGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCQkJCU9uVktfSE9NRShGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCQkJCU9uVktfRU5EKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJT25WSyhGWF9JTlQzMiBuSXRlbUluZGV4LEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpID0gMDsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJT25DaGFyKEZYX1dPUkQgbkNoYXIsRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkgPSAwOworfTsKKworI2VuZGlmIAorCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvZnhlZGl0L2Z4ZXRfZWRpdC5oIGIvZnBkZnNkay9pbmNsdWRlL2Z4ZWRpdC9meGV0X2VkaXQuaAppbmRleCA3MmI3ODA5Li5mNjU3MTViIDEwMDY0NAotLS0gYS9mcGRmc2RrL2luY2x1ZGUvZnhlZGl0L2Z4ZXRfZWRpdC5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9meGVkaXQvZnhldF9lZGl0LmgKQEAgLTEsODIzICsxLDgyMyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfRlhFVF9FRElUX0hfDQotI2RlZmluZSBfRlhFVF9FRElUX0hfDQotDQotI2luY2x1ZGUgImZ4X2VkaXQuaCINCi0NCi1jbGFzcyBDRlhfRWRpdF9QYWdlOw0KLXN0cnVjdCBDRlhfRWRpdF9MaW5lUmVjdDsNCi1jbGFzcyBDRlhfRWRpdF9MaW5lUmVjdEFycmF5Ow0KLWNsYXNzIENGWF9FZGl0X1JlY3RBcnJheTsNCi1jbGFzcyBDRlhfRWRpdF9SZWZyZXNoOw0KLWNsYXNzIENGWF9FZGl0X1NlbGVjdDsNCi1jbGFzcyBDRlhfRWRpdDsNCi1jbGFzcyBDRlhfRWRpdF9JdGVyYXRvcjsNCi1jbGFzcyBDRlhfRWRpdF9SZWZyZXNoOw0KLWNsYXNzIENGWF9FZGl0X1VuZG9JdGVtOw0KLWNsYXNzIENGWF9FZGl0X1VuZG87DQotY2xhc3MgQ0ZYX0VkaXRfUHJvdmlkZXI7DQotDQotI2RlZmluZSBGWF9FRElUX0lzRmxvYXRaZXJvKGYpCQkJCQkJKGYgPCAwLjAwMDEgJiYgZiA+IC0wLjAwMDEpDQotI2RlZmluZSBGWF9FRElUX0lzRmxvYXRFcXVhbChmYSxmYikJCQkJCUZYX0VESVRfSXNGbG9hdFplcm8oZmEgLSBmYikNCi0jZGVmaW5lIEZYX0VESVRfSXNGbG9hdEJpZ2dlcihmYSxmYikJCQkJKGZhID4gZmIgJiYgIUZYX0VESVRfSXNGbG9hdEVxdWFsKGZhLGZiKSkNCi0jZGVmaW5lIEZYX0VESVRfSXNGbG9hdFNtYWxsZXIoZmEsZmIpCQkJCShmYSA8IGZiICYmICFGWF9FRElUX0lzRmxvYXRFcXVhbChmYSxmYikpDQotDQotdGVtcGxhdGU8Y2xhc3MgVD4gVCBGWF9FRElUX01JTiAoY29uc3QgVCAmIGksIGNvbnN0IFQgJiBqKSB7IHJldHVybiAoKGkgPCBqKSA/IGkgOiBqKTsgfQ0KLXRlbXBsYXRlPGNsYXNzIFQ+IFQgRlhfRURJVF9NQVggKGNvbnN0IFQgJiBpLCBjb25zdCBUICYgaikgeyByZXR1cm4gKChpID4gaikgPyBpIDogaik7IH0NCi0NCi0jZGVmaW5lCUZYX0VESVRfUEkJCQkJCQkJCQkzLjE0MTU5MjY1MzU4OTc5Zg0KLSNkZWZpbmUgRlhfRURJVF9JVEFMSUNfQU5HRUwJCQkJCQkxMCAqIEZYX0VESVRfUEkgLyAxODAuMGYNCi0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENGWF9FZGl0X1JlZnJlc2ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLWVudW0gUkVGUkVTSF9QTEFOX0UNCi17DQotCVJQX0FOQUxZU0UsDQotCVJQX05PQU5BTFlTRSwNCi0JUlBfT1BUSU9OQUwNCi19Ow0KLQ0KLWVudW0gRURJVF9QUk9QU19FDQotew0KLQlFUF9MSU5FTEVBRElORywNCi0JRVBfTElORUlOREVOVCwNCi0JRVBfQUxJR05NRU5ULA0KLQlFUF9GT05USU5ERVgsDQotCUVQX0ZPTlRTSVpFLA0KLQlFUF9XT1JEQ09MT1IsDQotCUVQX1NDUklQVFRZUEUsDQotCUVQX1VOREVSTElORSwNCi0JRVBfQ1JPU1NPVVQsDQotCUVQX0NIQVJTUEFDRSwNCi0JRVBfSE9SWlNDQUxFLA0KLQlFUF9CT0xELA0KLQlFUF9JVEFMSUMNCi19Ow0KLQ0KLXN0cnVjdCBDRlhfRWRpdF9MaW5lUmVjdA0KLXsNCi0JQ0ZYX0VkaXRfTGluZVJlY3QoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiB3ckxpbmUsY29uc3QgQ1BERl9SZWN0ICYgcmNMaW5lKSA6DQotCQltX3dyTGluZSh3ckxpbmUpLCBtX3JjTGluZShyY0xpbmUpDQotCXsNCi0JfQ0KLQ0KLQlGWF9CT09MIG9wZXJhdG9yICE9IChjb25zdCBDRlhfRWRpdF9MaW5lUmVjdCAmIGxpbmVyZWN0KSBjb25zdA0KLQl7DQotCQlyZXR1cm4gRlhTWVNfbWVtY21wKHRoaXMsICZsaW5lcmVjdCwgc2l6ZW9mKENGWF9FZGl0X0xpbmVSZWN0KSkgIT0gMDsNCi0JfQ0KLQ0KLQlGWF9CT09MIElzU2FtZUhlaWdodChjb25zdCBDRlhfRWRpdF9MaW5lUmVjdCAmIGxpbmVyZWN0KSBjb25zdA0KLQl7DQotCQlyZXR1cm4gRlhfRURJVF9Jc0Zsb2F0WmVybygobV9yY0xpbmUudG9wIC0gbV9yY0xpbmUuYm90dG9tKSAtIChsaW5lcmVjdC5tX3JjTGluZS50b3AgLWxpbmVyZWN0Lm1fcmNMaW5lLmJvdHRvbSkpOw0KLQl9DQotDQotCUZYX0JPT0wgSXNTYW1lVG9wKGNvbnN0IENGWF9FZGl0X0xpbmVSZWN0ICYgbGluZXJlY3QpIGNvbnN0DQotCXsNCi0JCXJldHVybiBGWF9FRElUX0lzRmxvYXRaZXJvKG1fcmNMaW5lLnRvcCAtIGxpbmVyZWN0Lm1fcmNMaW5lLnRvcCk7DQotCX0NCi0NCi0JRlhfQk9PTCBJc1NhbWVMZWZ0KGNvbnN0IENGWF9FZGl0X0xpbmVSZWN0ICYgbGluZXJlY3QpIGNvbnN0DQotCXsNCi0JCXJldHVybiBGWF9FRElUX0lzRmxvYXRaZXJvKG1fcmNMaW5lLmxlZnQgLSBsaW5lcmVjdC5tX3JjTGluZS5sZWZ0KTsNCi0JfQ0KLQ0KLQlGWF9CT09MIElzU2FtZVJpZ2h0KGNvbnN0IENGWF9FZGl0X0xpbmVSZWN0ICYgbGluZXJlY3QpIGNvbnN0DQotCXsNCi0JCXJldHVybiBGWF9FRElUX0lzRmxvYXRaZXJvKG1fcmNMaW5lLnJpZ2h0IC0gbGluZXJlY3QubV9yY0xpbmUucmlnaHQpOw0KLQl9DQotDQotCUNQVlRfV29yZFJhbmdlCQkJCQkJCW1fd3JMaW5lOw0KLQlDUERGX1JlY3QJCQkJCQkJCW1fcmNMaW5lOw0KLX07DQotDQotY2xhc3MgQ0ZYX0VkaXRfTGluZVJlY3RBcnJheQ0KLXsNCi1wdWJsaWM6DQotCUNGWF9FZGl0X0xpbmVSZWN0QXJyYXkoKQ0KLQl7DQotCX0NCi0NCi0JdmlydHVhbCB+Q0ZYX0VkaXRfTGluZVJlY3RBcnJheSgpDQotCXsNCi0JCUVtcHR5KCk7DQotCX0NCi0NCi0Jdm9pZCBFbXB0eSgpDQotCXsNCi0JCWZvciAoRlhfSU5UMzIgaSA9IDAsIHN6ID0gbV9MaW5lUmVjdHMuR2V0U2l6ZSgpOyBpIDwgc3o7IGkrKykNCi0JCQlkZWxldGUgbV9MaW5lUmVjdHMuR2V0QXQoaSk7DQotDQotCQltX0xpbmVSZWN0cy5SZW1vdmVBbGwoKTsNCi0JfQ0KLQ0KLQl2b2lkIFJlbW92ZUFsbCgpDQotCXsNCi0JCW1fTGluZVJlY3RzLlJlbW92ZUFsbCgpOw0KLQl9DQotDQotCXZvaWQgb3BlcmF0b3IgPSAoQ0ZYX0VkaXRfTGluZVJlY3RBcnJheSAmIHJlY3RzKQ0KLQl7DQotCQlFbXB0eSgpOw0KLQkJZm9yIChGWF9JTlQzMiBpID0gMCwgc3ogPSByZWN0cy5HZXRTaXplKCk7IGkgPCBzejsgaSsrKQ0KLQkJCW1fTGluZVJlY3RzLkFkZChyZWN0cy5HZXRBdChpKSk7DQotDQotCQlyZWN0cy5SZW1vdmVBbGwoKTsNCi0JfQ0KLQ0KLQl2b2lkIEFkZChjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHdyTGluZSxjb25zdCBDUERGX1JlY3QgJiByY0xpbmUpDQotCXsNCi0JCWlmIChDRlhfRWRpdF9MaW5lUmVjdCAqIHBSZWN0ID0gbmV3IENGWF9FZGl0X0xpbmVSZWN0KHdyTGluZSxyY0xpbmUpKQ0KLQkJCW1fTGluZVJlY3RzLkFkZChwUmVjdCk7DQotCX0NCi0NCi0JRlhfSU5UMzIgR2V0U2l6ZSgpIGNvbnN0DQotCXsNCi0JCXJldHVybiBtX0xpbmVSZWN0cy5HZXRTaXplKCk7DQotCX0NCi0NCi0JQ0ZYX0VkaXRfTGluZVJlY3QgKiBHZXRBdChGWF9JTlQzMiBuSW5kZXgpIGNvbnN0DQotCXsNCi0JCWlmIChuSW5kZXggPCAwIHx8IG5JbmRleCA+PSBtX0xpbmVSZWN0cy5HZXRTaXplKCkpDQotCQkJcmV0dXJuIE5VTEw7DQotDQotCQlyZXR1cm4gbV9MaW5lUmVjdHMuR2V0QXQobkluZGV4KTsNCi0JfQ0KLQ0KLQlDRlhfQXJyYXlUZW1wbGF0ZTxDRlhfRWRpdF9MaW5lUmVjdCo+CQltX0xpbmVSZWN0czsNCi19Ow0KLQ0KLWNsYXNzIENGWF9FZGl0X1JlY3RBcnJheQ0KLXsNCi1wdWJsaWM6DQotCUNGWF9FZGl0X1JlY3RBcnJheSgpDQotCXsNCi0JfQ0KLQ0KLQl2aXJ0dWFsIH5DRlhfRWRpdF9SZWN0QXJyYXkoKQ0KLQl7DQotCQl0aGlzLT5FbXB0eSgpOw0KLQl9DQotDQotCXZvaWQgRW1wdHkoKQ0KLQl7DQotCQlmb3IgKEZYX0lOVDMyIGkgPSAwLCBzeiA9IG1fUmVjdHMuR2V0U2l6ZSgpOyBpIDwgc3o7IGkrKykNCi0JCQlkZWxldGUgbV9SZWN0cy5HZXRBdChpKTsNCi0NCi0JCXRoaXMtPm1fUmVjdHMuUmVtb3ZlQWxsKCk7DQotCX0NCi0NCi0Jdm9pZCBBZGQoY29uc3QgQ1BERl9SZWN0ICYgcmVjdCkNCi0Jew0KLQkJLy9jaGVjayBmb3Igb3ZlcmxhcGVkIGFyZWENCi0JCWZvciAoRlhfSU5UMzIgaSA9IDAsIHN6ID0gbV9SZWN0cy5HZXRTaXplKCk7IGkgPCBzejsgaSsrKQ0KLQkJCWlmIChDUERGX1JlY3QgKiBwUmVjdCA9IG1fUmVjdHMuR2V0QXQoaSkpDQotCQkJCWlmIChwUmVjdC0+Q29udGFpbnMocmVjdCkpcmV0dXJuOw0KLQ0KLQkJaWYgKENQREZfUmVjdCAqIHBOZXdSZWN0ID0gbmV3IENQREZfUmVjdChyZWN0KSkNCi0JCQltX1JlY3RzLkFkZChwTmV3UmVjdCk7DQotCX0NCi0NCi0JRlhfSU5UMzIgR2V0U2l6ZSgpIGNvbnN0DQotCXsNCi0JCXJldHVybiBtX1JlY3RzLkdldFNpemUoKTsNCi0JfQ0KLQ0KLQlDUERGX1JlY3QgKiBHZXRBdChGWF9JTlQzMiBuSW5kZXgpIGNvbnN0DQotCXsNCi0JCWlmIChuSW5kZXggPCAwIHx8IG5JbmRleCA+PSBtX1JlY3RzLkdldFNpemUoKSkNCi0JCQlyZXR1cm4gTlVMTDsNCi0NCi0JCXJldHVybiBtX1JlY3RzLkdldEF0KG5JbmRleCk7DQotCX0NCi0NCi0JQ0ZYX0FycmF5VGVtcGxhdGU8Q1BERl9SZWN0Kj4JCQltX1JlY3RzOw0KLX07DQotDQotY2xhc3MgQ0ZYX0VkaXRfUmVmcmVzaA0KLXsNCi1wdWJsaWM6DQotCUNGWF9FZGl0X1JlZnJlc2goKTsNCi0JdmlydHVhbCB+Q0ZYX0VkaXRfUmVmcmVzaCgpOw0KLQ0KLQl2b2lkCQkJCQkJCQkJQmVnaW5SZWZyZXNoKCk7DQotCXZvaWQJCQkJCQkJCQlQdXNoKGNvbnN0IENQVlRfV29yZFJhbmdlICYgbGluZXJhbmdlLGNvbnN0IENQREZfUmVjdCAmIHJlY3QpOw0KLQl2b2lkCQkJCQkJCQkJTm9BbmFseXNlKCk7DQotCXZvaWQJCQkJCQkJCQlBbmFseXNlKEZYX0lOVDMyIG5BbGlnbm1lbnQpOw0KLQl2b2lkCQkJCQkJCQkJQWRkUmVmcmVzaChjb25zdCBDUERGX1JlY3QgJiByZWN0KTsNCi0JY29uc3QgQ0ZYX0VkaXRfUmVjdEFycmF5ICoJCQkJR2V0UmVmcmVzaFJlY3RzKCkgY29uc3Q7DQotCXZvaWQJCQkJCQkJCQlFbmRSZWZyZXNoKCk7DQotDQotcHJpdmF0ZToNCi0JQ0ZYX0VkaXRfTGluZVJlY3RBcnJheQkJCQkJbV9OZXdMaW5lUmVjdHM7DQotCUNGWF9FZGl0X0xpbmVSZWN0QXJyYXkJCQkJCW1fT2xkTGluZVJlY3RzOw0KLQlDRlhfRWRpdF9SZWN0QXJyYXkJCQkJCQltX1JlZnJlc2hSZWN0czsNCi19Ow0KLQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZYX0VkaXRfU2VsZWN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1jbGFzcyBDRlhfRWRpdF9TZWxlY3QNCi17DQotcHVibGljOg0KLQlDRlhfRWRpdF9TZWxlY3QoKQ0KLQl7DQotCX0NCi0NCi0JQ0ZYX0VkaXRfU2VsZWN0KGNvbnN0IENQVlRfV29yZFBsYWNlICYgYmVnaW4sY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBlbmQpDQotCXsNCi0JCVNldChiZWdpbixlbmQpOw0KLQl9DQotDQotCUNGWF9FZGl0X1NlbGVjdChjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHJhbmdlKQ0KLQl7DQotCQlTZXQocmFuZ2UuQmVnaW5Qb3MscmFuZ2UuRW5kUG9zKTsNCi0JfQ0KLQ0KLQlDUFZUX1dvcmRSYW5nZSBDb252ZXJ0VG9Xb3JkUmFuZ2UoKSBjb25zdA0KLQl7DQotCQlyZXR1cm4gQ1BWVF9Xb3JkUmFuZ2UodGhpcy0+QmVnaW5Qb3MsdGhpcy0+RW5kUG9zKTsNCi0JfQ0KLQ0KLQl2b2lkIERlZmF1bHQoKQ0KLQl7DQotCQlCZWdpblBvcy5EZWZhdWx0KCk7DQotCQlFbmRQb3MuRGVmYXVsdCgpOw0KLQl9DQotDQotCXZvaWQgU2V0KGNvbnN0IENQVlRfV29yZFBsYWNlICYgYmVnaW4sY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBlbmQpDQotCXsNCi0JCXRoaXMtPkJlZ2luUG9zID0gYmVnaW47DQotCQl0aGlzLT5FbmRQb3MgPSBlbmQ7DQotCX0NCi0NCi0Jdm9pZCBTZXRCZWdpblBvcyhjb25zdCBDUFZUX1dvcmRQbGFjZSAmIGJlZ2luKQ0KLQl7DQotCQl0aGlzLT5CZWdpblBvcyA9IGJlZ2luOw0KLQl9DQotDQotCXZvaWQgU2V0RW5kUG9zKGNvbnN0IENQVlRfV29yZFBsYWNlICYgZW5kKQ0KLQl7DQotCQl0aGlzLT5FbmRQb3MgPSBlbmQ7DQotCX0NCi0NCi0JRlhfQk9PTCBJc0V4aXN0KCkgY29uc3QNCi0Jew0KLQkJcmV0dXJuIHRoaXMtPkJlZ2luUG9zICE9IHRoaXMtPkVuZFBvczsNCi0JfQ0KLQ0KLQlGWF9CT09MIG9wZXJhdG9yICE9IChjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHdyKSBjb25zdA0KLQl7DQotCQlyZXR1cm4gd3IuQmVnaW5Qb3MgIT0gdGhpcy0+QmVnaW5Qb3MgfHwgd3IuRW5kUG9zICE9IHRoaXMtPkVuZFBvczsNCi0JfQ0KLQ0KLQlDUFZUX1dvcmRQbGFjZSBCZWdpblBvcyxFbmRQb3M7DQotfTsNCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENGWF9FZGl0X1VuZG8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLWNsYXNzIENGWF9FZGl0X1VuZG8NCi17DQotcHVibGljOg0KLQlDRlhfRWRpdF9VbmRvKEZYX0lOVDMyIG5CdWZzaXplID0gMTAwMDApOw0KLQl2aXJ0dWFsIH5DRlhfRWRpdF9VbmRvKCk7DQotDQotCXZvaWQJCQkJCQkJCQlVbmRvKCk7DQotCXZvaWQJCQkJCQkJCQlSZWRvKCk7DQotDQotCXZvaWQJCQkJCQkJCQlBZGRJdGVtKElGWF9FZGl0X1VuZG9JdGVtKiBwSXRlbSk7DQotDQotCUZYX0JPT0wJCQkJCQkJCQlDYW5VbmRvKCkgY29uc3Q7DQotCUZYX0JPT0wJCQkJCQkJCQlDYW5SZWRvKCkgY29uc3Q7DQotCUZYX0JPT0wJCQkJCQkJCQlJc01vZGlmaWVkKCkgY29uc3Q7DQotCUZYX0JPT0wJCQkJCQkJCQlJc1dvcmtpbmcoKSBjb25zdDsNCi0NCi0Jdm9pZAkJCQkJCQkJCVJlc2V0KCk7DQotDQotCUlGWF9FZGl0X1VuZG9JdGVtKgkJCQkJCUdldEl0ZW0oRlhfSU5UMzIgbkluZGV4KTsNCi0JRlhfSU5UMzIJCQkJCQkJCUdldEl0ZW1Db3VudCgpe3JldHVybiBtX1VuZG9JdGVtU3RhY2suR2V0U2l6ZSgpO30NCi0JRlhfSU5UMzIJCQkJCQkJCUdldEN1clVuZG9Qb3MoKXtyZXR1cm4gbV9uQ3VyVW5kb1Bvczt9DQotDQotcHJpdmF0ZToNCi0Jdm9pZAkJCQkJCQkJCVNldEJ1ZlNpemUoRlhfSU5UMzIgblNpemUpe21fbkJ1ZlNpemUgPSBuU2l6ZTt9DQotCUZYX0lOVDMyCQkJCQkJCQlHZXRCdWZTaXplKCl7cmV0dXJuIG1fbkJ1ZlNpemU7fQ0KLQ0KLQl2b2lkCQkJCQkJCQkJUmVtb3ZlSGVhZHMoKTsNCi0Jdm9pZAkJCQkJCQkJCVJlbW92ZVRhaWxzKCk7DQotDQotcHJpdmF0ZToNCi0JQ0ZYX0FycmF5VGVtcGxhdGU8SUZYX0VkaXRfVW5kb0l0ZW0qPgltX1VuZG9JdGVtU3RhY2s7DQotCQ0KLQlGWF9JTlQzMgkJCQkJCQkJbV9uQ3VyVW5kb1BvczsNCi0JRlhfSU5UMzIJCQkJCQkJCW1fbkJ1ZlNpemU7DQotCUZYX0JPT0wJCQkJCQkJCQltX2JNb2RpZmllZDsgDQotCUZYX0JPT0wJCQkJCQkJCQltX2JWaXJnaW47DQotCUZYX0JPT0wJCQkJCQkJCQltX2JXb3JraW5nOw0KLX07DQotDQotY2xhc3MgQ0ZYX0VkaXRfVW5kb0l0ZW0gOiBwdWJsaWMgSUZYX0VkaXRfVW5kb0l0ZW0NCi17DQotcHVibGljOg0KLQlDRlhfRWRpdF9VbmRvSXRlbSgpIDogbV9iRmlyc3QoVFJVRSksIG1fYkxhc3QoVFJVRSkge30NCi0JdmlydHVhbCB+Q0ZYX0VkaXRfVW5kb0l0ZW0oKXt9DQotDQotCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCQkJCUdldFVuZG9UaXRsZSgpIHtyZXR1cm4gTCIiO30NCi0JdmlydHVhbCB2b2lkCQkJCQkJCVJlbGVhc2UoKXtkZWxldGUgdGhpczt9DQotDQotcHVibGljOg0KLQl2b2lkCQkJCQkJCQkJU2V0Rmlyc3QoRlhfQk9PTCBiRmlyc3Qpe21fYkZpcnN0ID0gYkZpcnN0O30NCi0JRlhfQk9PTAkJCQkJCQkJCUlzRmlyc3QoKXtyZXR1cm4gbV9iRmlyc3Q7fQ0KLQl2b2lkCQkJCQkJCQkJU2V0TGFzdChGWF9CT09MIGJMYXN0KXttX2JMYXN0ID0gYkxhc3Q7fQ0KLQlGWF9CT09MCQkJCQkJCQkJSXNMYXN0KCl7cmV0dXJuIG1fYkxhc3Q7fQ0KLQ0KLXByaXZhdGU6DQotCUZYX0JPT0wJCQkJCQkJCQltX2JGaXJzdDsNCi0JRlhfQk9PTAkJCQkJCQkJCW1fYkxhc3Q7DQotfTsNCi0NCi1jbGFzcyBDRlhfRWRpdF9Hcm91cFVuZG9JdGVtIDogcHVibGljIElGWF9FZGl0X1VuZG9JdGVtDQotew0KLXB1YmxpYzoNCi0JQ0ZYX0VkaXRfR3JvdXBVbmRvSXRlbShjb25zdCBDRlhfV2lkZVN0cmluZyYgc1RpdGxlKTsNCi0JdmlydHVhbCB+Q0ZYX0VkaXRfR3JvdXBVbmRvSXRlbSgpOw0KLQ0KLQl2b2lkCQkJCQkJCQkJQWRkVW5kb0l0ZW0oQ0ZYX0VkaXRfVW5kb0l0ZW0qIHBVbmRvSXRlbSk7DQotCXZvaWQJCQkJCQkJCQlVcGRhdGVJdGVtcygpOw0KLQ0KLXB1YmxpYzoNCi0JdmlydHVhbCB2b2lkCQkJCQkJCVVuZG8oKTsNCi0JdmlydHVhbCB2b2lkCQkJCQkJCVJlZG8oKTsNCi0JdmlydHVhbCBDRlhfV2lkZVN0cmluZwkJCQkJR2V0VW5kb1RpdGxlKCk7DQotCXZpcnR1YWwgdm9pZAkJCQkJCQlSZWxlYXNlKCk7DQotDQotcHJpdmF0ZToNCi0JQ0ZYX1dpZGVTdHJpbmcJCQkJCQkJbV9zVGl0bGU7DQotCUNGWF9BcnJheVRlbXBsYXRlPENGWF9FZGl0X1VuZG9JdGVtKj4JbV9JdGVtczsNCi19Ow0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZYX0VkaXRfVW5kb0l0ZW0gZGVyaXZlZCBjbGFzc2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1jbGFzcyBDRlhFVV9JbnNlcnRXb3JkIDogcHVibGljIENGWF9FZGl0X1VuZG9JdGVtDQotew0KLXB1YmxpYzoNCi0JQ0ZYRVVfSW5zZXJ0V29yZChDRlhfRWRpdCAqIHBFZGl0LCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwT2xkUGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3BOZXdQbGFjZSwNCi0JCUZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCwgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzKTsNCi0JdmlydHVhbCB+Q0ZYRVVfSW5zZXJ0V29yZCgpOw0KLQ0KLQl2b2lkCQkJCQkJUmVkbygpOw0KLQl2b2lkCQkJCQkJVW5kbygpOw0KLQ0KLXByaXZhdGU6DQotCUNGWF9FZGl0KgkJCQkJbV9wRWRpdDsNCi0NCi0JQ1BWVF9Xb3JkUGxhY2UJCQkJbV93cE9sZDsNCi0JQ1BWVF9Xb3JkUGxhY2UJCQkJbV93cE5ldzsNCi0JRlhfV09SRAkJCQkJCW1fV29yZDsNCi0JRlhfSU5UMzIJCQkJCW1fbkNoYXJzZXQ7DQotCUNQVlRfV29yZFByb3BzCQkJCW1fV29yZFByb3BzOw0KLX07DQotDQotY2xhc3MgQ0ZYRVVfSW5zZXJ0UmV0dXJuIDogcHVibGljIENGWF9FZGl0X1VuZG9JdGVtDQotew0KLXB1YmxpYzoNCi0JQ0ZYRVVfSW5zZXJ0UmV0dXJuKENGWF9FZGl0ICogcEVkaXQsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3BPbGRQbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cE5ld1BsYWNlLA0KLQkJCQkJCQkgY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzKTsNCi0JdmlydHVhbCB+Q0ZYRVVfSW5zZXJ0UmV0dXJuKCk7DQotDQotCXZvaWQJCQkJCQlSZWRvKCk7DQotCXZvaWQJCQkJCQlVbmRvKCk7DQotDQotcHJpdmF0ZToNCi0JQ0ZYX0VkaXQgKgkJCQkJbV9wRWRpdDsNCi0NCi0JQ1BWVF9Xb3JkUGxhY2UJCQkJbV93cE9sZDsNCi0JQ1BWVF9Xb3JkUGxhY2UJCQkJbV93cE5ldzsNCi0JQ1BWVF9TZWNQcm9wcwkJCQltX1NlY1Byb3BzOw0KLQlDUFZUX1dvcmRQcm9wcwkJCQltX1dvcmRQcm9wczsNCi19Ow0KLQ0KLWNsYXNzIENGWEVVX0JhY2tzcGFjZSA6IHB1YmxpYyBDRlhfRWRpdF9VbmRvSXRlbQ0KLXsNCi1wdWJsaWM6DQotCUNGWEVVX0JhY2tzcGFjZShDRlhfRWRpdCAqIHBFZGl0LCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwT2xkUGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3BOZXdQbGFjZSwNCi0JCQkJCQlGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIGNoYXJzZXQsDQotCQkJCQkJY29uc3QgQ1BWVF9TZWNQcm9wcyAmIFNlY1Byb3BzLCBjb25zdCBDUFZUX1dvcmRQcm9wcyAmIFdvcmRQcm9wcyk7DQotCXZpcnR1YWwgfkNGWEVVX0JhY2tzcGFjZSgpOw0KLQ0KLQl2b2lkCQkJCQkJUmVkbygpOw0KLQl2b2lkCQkJCQkJVW5kbygpOw0KLQ0KLXByaXZhdGU6DQotCUNGWF9FZGl0ICoJCQkJCW1fcEVkaXQ7DQotDQotCUNQVlRfV29yZFBsYWNlCQkJCW1fd3BPbGQ7DQotCUNQVlRfV29yZFBsYWNlCQkJCW1fd3BOZXc7DQotCUZYX1dPUkQJCQkJCQltX1dvcmQ7DQotCUZYX0lOVDMyCQkJCQltX25DaGFyc2V0Ow0KLQlDUFZUX1NlY1Byb3BzCQkJCW1fU2VjUHJvcHM7DQotCUNQVlRfV29yZFByb3BzCQkJCW1fV29yZFByb3BzOw0KLX07DQotDQotY2xhc3MgQ0ZYRVVfRGVsZXRlIDogcHVibGljIENGWF9FZGl0X1VuZG9JdGVtDQotew0KLXB1YmxpYzoNCi0JQ0ZYRVVfRGVsZXRlKENGWF9FZGl0ICogcEVkaXQsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3BPbGRQbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cE5ld1BsYWNlLA0KLQkJCQkJCUZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCwNCi0JCQkJCQljb25zdCBDUFZUX1NlY1Byb3BzICYgU2VjUHJvcHMsIGNvbnN0IENQVlRfV29yZFByb3BzICYgV29yZFByb3BzLCBGWF9CT09MIGJTZWNFbmQpOw0KLQl2aXJ0dWFsIH5DRlhFVV9EZWxldGUoKTsNCi0NCi0Jdm9pZAkJCQkJCVJlZG8oKTsNCi0Jdm9pZAkJCQkJCVVuZG8oKTsNCi0NCi1wcml2YXRlOg0KLQlDRlhfRWRpdCAqCQkJCQltX3BFZGl0Ow0KLQ0KLQlDUFZUX1dvcmRQbGFjZQkJCQltX3dwT2xkOw0KLQlDUFZUX1dvcmRQbGFjZQkJCQltX3dwTmV3Ow0KLQlGWF9XT1JECQkJCQkJbV9Xb3JkOw0KLQlGWF9JTlQzMgkJCQkJbV9uQ2hhcnNldDsNCi0JQ1BWVF9TZWNQcm9wcwkJCQltX1NlY1Byb3BzOw0KLQlDUFZUX1dvcmRQcm9wcwkJCQltX1dvcmRQcm9wczsNCi0JRlhfQk9PTAkJCQkJCW1fYlNlY0VuZDsNCi19Ow0KLQ0KLWNsYXNzIENGWEVVX0NsZWFyIDogcHVibGljIENGWF9FZGl0X1VuZG9JdGVtDQotew0KLXB1YmxpYzoNCi0JQ0ZYRVVfQ2xlYXIoQ0ZYX0VkaXQgKiBwRWRpdCwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiB3clNlbCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJiBzd1RleHQpOw0KLQl2aXJ0dWFsIH5DRlhFVV9DbGVhcigpOw0KLQ0KLQl2b2lkCQkJCQkJUmVkbygpOw0KLQl2b2lkCQkJCQkJVW5kbygpOw0KLQ0KLXByaXZhdGU6DQotCUNGWF9FZGl0KgkJCQkJbV9wRWRpdDsNCi0NCi0JQ1BWVF9Xb3JkUmFuZ2UJCQkJbV93clNlbDsNCi0JQ0ZYX1dpZGVTdHJpbmcJCQkJbV9zd1RleHQ7DQotfTsNCi0NCi1jbGFzcyBDRlhFVV9DbGVhclJpY2ggOiBwdWJsaWMgQ0ZYX0VkaXRfVW5kb0l0ZW0NCi17DQotcHVibGljOg0KLQlDRlhFVV9DbGVhclJpY2goQ0ZYX0VkaXQgKiBwRWRpdCwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cE9sZFBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwTmV3UGxhY2UsDQotCQkJCQkJY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiB3clNlbCwNCi0JCQkJCSAgIEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCwNCi0JCQkJCSAgIGNvbnN0IENQVlRfU2VjUHJvcHMgJiBTZWNQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgJiBXb3JkUHJvcHMpOw0KLQl2aXJ0dWFsIH5DRlhFVV9DbGVhclJpY2goKTsNCi0NCi0Jdm9pZAkJCQkJCVJlZG8oKTsNCi0Jdm9pZAkJCQkJCVVuZG8oKTsNCi0NCi1wcml2YXRlOg0KLQlDRlhfRWRpdCAqCQkJCQltX3BFZGl0Ow0KLQ0KLQlDUFZUX1dvcmRQbGFjZQkJCQltX3dwT2xkOw0KLQlDUFZUX1dvcmRQbGFjZQkJCQltX3dwTmV3Ow0KLQlDUFZUX1dvcmRSYW5nZQkJCQltX3dyU2VsOw0KLQlGWF9XT1JECQkJCQkJbV9Xb3JkOw0KLQlGWF9JTlQzMgkJCQkJbV9uQ2hhcnNldDsNCi0JQ1BWVF9TZWNQcm9wcwkJCQltX1NlY1Byb3BzOw0KLQlDUFZUX1dvcmRQcm9wcwkJCQltX1dvcmRQcm9wczsNCi19Ow0KLQ0KLWNsYXNzIENGWEVVX0luc2VydFRleHQgOiBwdWJsaWMgQ0ZYX0VkaXRfVW5kb0l0ZW0NCi17DQotcHVibGljOg0KLQlDRlhFVV9JbnNlcnRUZXh0KENGWF9FZGl0ICogcEVkaXQsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3BPbGRQbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cE5ld1BsYWNlLA0KLQkJCQkJCSAgIGNvbnN0IENGWF9XaWRlU3RyaW5nICYgc3dUZXh0LCBGWF9JTlQzMiBjaGFyc2V0LA0KLQkJCQkJCSAgIGNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMsIGNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcyk7DQotCXZpcnR1YWwgfkNGWEVVX0luc2VydFRleHQoKTsNCi0NCi0Jdm9pZAkJCQkJCVJlZG8oKTsNCi0Jdm9pZAkJCQkJCVVuZG8oKTsNCi0NCi1wcml2YXRlOg0KLQlDRlhfRWRpdCAqCQkJCQltX3BFZGl0Ow0KLQ0KLQlDUFZUX1dvcmRQbGFjZQkJCQltX3dwT2xkOw0KLQlDUFZUX1dvcmRQbGFjZQkJCQltX3dwTmV3Ow0KLQlDRlhfV2lkZVN0cmluZwkJCQltX3N3VGV4dDsNCi0JRlhfSU5UMzIJCQkJCW1fbkNoYXJzZXQ7DQotCUNQVlRfU2VjUHJvcHMJCQkJbV9TZWNQcm9wczsNCi0JQ1BWVF9Xb3JkUHJvcHMJCQkJbV9Xb3JkUHJvcHM7DQotfTsNCi0NCi1jbGFzcyBDRlhFVV9TZXRTZWNQcm9wcyA6IHB1YmxpYyBDRlhfRWRpdF9VbmRvSXRlbQ0KLXsNCi1wdWJsaWM6DQotCUNGWEVVX1NldFNlY1Byb3BzKENGWF9FZGl0ICogcEVkaXQsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIEVESVRfUFJPUFNfRSBlcCwgDQotCQljb25zdCBDUFZUX1NlY1Byb3BzICYgb2xkc2VjcHJvcHMsIGNvbnN0IENQVlRfV29yZFByb3BzICYgb2xkd29yZHByb3BzLCANCi0JCWNvbnN0IENQVlRfU2VjUHJvcHMgJiBuZXdzZWNwcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgJiBuZXd3b3JkcHJvcHMsIGNvbnN0IENQVlRfV29yZFJhbmdlICYgcmFuZ2UpOw0KLQl2aXJ0dWFsIH5DRlhFVV9TZXRTZWNQcm9wcygpOw0KLQ0KLQl2b2lkCQkJCQkJUmVkbygpOw0KLQl2b2lkCQkJCQkJVW5kbygpOw0KLQ0KLXByaXZhdGU6DQotCUNGWF9FZGl0ICoJCQkJCW1fcEVkaXQ7DQotCUNQVlRfV29yZFBsYWNlCQkJCW1fd3BQbGFjZTsNCi0JQ1BWVF9Xb3JkUmFuZ2UJCQkJbV93clBsYWNlOw0KLQlFRElUX1BST1BTX0UJCQkJbV9lUHJvcHM7DQotDQotCUNQVlRfU2VjUHJvcHMJCQkJbV9PbGRTZWNQcm9wczsNCi0JQ1BWVF9TZWNQcm9wcwkJCQltX05ld1NlY1Byb3BzOw0KLQlDUFZUX1dvcmRQcm9wcwkJCQltX09sZFdvcmRQcm9wczsNCi0JQ1BWVF9Xb3JkUHJvcHMJCQkJbV9OZXdXb3JkUHJvcHM7CQ0KLX07DQotDQotY2xhc3MgQ0ZYRVVfU2V0V29yZFByb3BzIDogcHVibGljIENGWF9FZGl0X1VuZG9JdGVtDQotew0KLXB1YmxpYzoNCi0JQ0ZYRVVfU2V0V29yZFByb3BzKENGWF9FZGl0ICogcEVkaXQsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIEVESVRfUFJPUFNfRSBlcCwgDQotCQljb25zdCBDUFZUX1dvcmRQcm9wcyAmIG9sZHByb3BzLCBjb25zdCBDUFZUX1dvcmRQcm9wcyAmIG5ld3Byb3BzLCBjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHJhbmdlKTsNCi0JdmlydHVhbCB+Q0ZYRVVfU2V0V29yZFByb3BzKCk7DQotDQotCXZvaWQJCQkJCQlSZWRvKCk7DQotCXZvaWQJCQkJCQlVbmRvKCk7DQotDQotcHJpdmF0ZToNCi0JQ0ZYX0VkaXQgKgkJCQkJbV9wRWRpdDsNCi0JQ1BWVF9Xb3JkUGxhY2UJCQkJbV93cFBsYWNlOw0KLQlDUFZUX1dvcmRSYW5nZQkJCQltX3dyUGxhY2U7DQotCUVESVRfUFJPUFNfRQkJCQltX2VQcm9wczsNCi0JDQotCUNQVlRfV29yZFByb3BzCQkJCW1fT2xkV29yZFByb3BzOw0KLQlDUFZUX1dvcmRQcm9wcwkJCQltX05ld1dvcmRQcm9wczsJDQotfTsNCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENGWF9FZGl0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1jbGFzcyBDRlhfRWRpdCA6IHB1YmxpYyBJRlhfRWRpdA0KLXsNCi0JZnJpZW5kIGNsYXNzIENGWF9FZGl0X0l0ZXJhdG9yOw0KLQlmcmllbmQgY2xhc3MgQ0ZYRVVfSW5zZXJ0V29yZDsNCi0JZnJpZW5kIGNsYXNzIENGWEVVX0luc2VydFJldHVybjsNCi0JZnJpZW5kIGNsYXNzIENGWEVVX0JhY2tzcGFjZTsNCi0JZnJpZW5kIGNsYXNzIENGWEVVX0RlbGV0ZTsNCi0JZnJpZW5kIGNsYXNzIENGWEVVX0NsZWFyOw0KLQlmcmllbmQgY2xhc3MgQ0ZYRVVfQ2xlYXJSaWNoOw0KLQlmcmllbmQgY2xhc3MgQ0ZYRVVfU2V0U2VjUHJvcHM7DQotCWZyaWVuZCBjbGFzcyBDRlhFVV9TZXRXb3JkUHJvcHM7CQ0KLQlmcmllbmQgY2xhc3MgQ0ZYRVVfSW5zZXJ0VGV4dDsNCi0NCi1wdWJsaWM6DQotCUNGWF9FZGl0KElQREZfVmFyaWFibGVUZXh0ICogcFZUKTsNCi0JdmlydHVhbCB+Q0ZYX0VkaXQoKTsNCi0NCi0Jdm9pZAkJCQkJCQkJCVNldEZvbnRNYXAoSUZYX0VkaXRfRm9udE1hcCAqIHBGb250TWFwKTsJDQotCXZvaWQJCQkJCQkJCQlTZXRWVFByb3ZpZGVyKElQREZfVmFyaWFibGVUZXh0X1Byb3ZpZGVyKiBwUHJvdmlkZXIpOw0KLQl2b2lkCQkJCQkJCQkJU2V0Tm90aWZ5KElGWF9FZGl0X05vdGlmeSAqIHBOb3RpZnkpOw0KLQl2b2lkCQkJCQkJCQkJU2V0T3ByTm90aWZ5KElGWF9FZGl0X09wck5vdGlmeSogcE9wck5vdGlmeSk7DQotCUlGWF9FZGl0X0l0ZXJhdG9yKgkJCQkJCUdldEl0ZXJhdG9yKCk7DQotCUlQREZfVmFyaWFibGVUZXh0ICoJCQkJCQlHZXRWYXJpYWJsZVRleHQoKTsNCi0JSUZYX0VkaXRfRm9udE1hcCoJCQkJCQlHZXRGb250TWFwKCk7DQotDQotCXZvaWQJCQkJCQkJCQlJbml0aWFsaXplKCk7DQotCXZvaWQJCQkJCQkJCQlTZXRQbGF0ZVJlY3QoY29uc3QgQ1BERl9SZWN0ICYgcmVjdCwgRlhfQk9PTCBiUGFpbnQgPSBUUlVFKTsNCi0Jdm9pZAkJCQkJCQkJCVNldFNjcm9sbFBvcyhjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpOw0KLQ0KLQl2b2lkCQkJCQkJCQkJU2V0QWxpZ25tZW50SChGWF9JTlQzMiBuRm9ybWF0ID0gMCwgRlhfQk9PTCBiUGFpbnQgPSBUUlVFKTsNCi0Jdm9pZAkJCQkJCQkJCVNldEFsaWdubWVudFYoRlhfSU5UMzIgbkZvcm1hdCA9IDAsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSk7DQotCXZvaWQJCQkJCQkJCQlTZXRQYXNzd29yZENoYXIoRlhfV09SRCB3U3ViV29yZCA9ICcqJywgRlhfQk9PTCBiUGFpbnQgPSBUUlVFKTsNCi0Jdm9pZAkJCQkJCQkJCVNldExpbWl0Q2hhcihGWF9JTlQzMiBuTGltaXRDaGFyID0gMCwgRlhfQk9PTCBiUGFpbnQgPSBUUlVFKTsNCi0Jdm9pZAkJCQkJCQkJCVNldENoYXJBcnJheShGWF9JTlQzMiBuQ2hhckFycmF5ID0gMCwgRlhfQk9PTCBiUGFpbnQgPSBUUlVFKTsNCi0Jdm9pZAkJCQkJCQkJCVNldENoYXJTcGFjZShGWF9GTE9BVCBmQ2hhclNwYWNlID0gMC4wZiwgRlhfQk9PTCBiUGFpbnQgPSBUUlVFKTsNCi0Jdm9pZAkJCQkJCQkJCVNldEhvcnpTY2FsZShGWF9JTlQzMiBuSG9yelNjYWxlID0gMTAwLCBGWF9CT09MIGJQYWludCA9IFRSVUUpOw0KLQl2b2lkCQkJCQkJCQkJU2V0TGluZUxlYWRpbmcoRlhfRkxPQVQgZkxpbmVMZWFkaW5nLCBGWF9CT09MIGJQYWludCA9IFRSVUUpOw0KLQl2b2lkCQkJCQkJCQkJU2V0TXVsdGlMaW5lKEZYX0JPT0wgYk11bHRpTGluZSA9IFRSVUUsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSk7DQotCXZvaWQJCQkJCQkJCQlTZXRBdXRvUmV0dXJuKEZYX0JPT0wgYkF1dG8gPSBUUlVFLCBGWF9CT09MIGJQYWludCA9IFRSVUUpOw0KLQl2b2lkCQkJCQkJCQkJU2V0QXV0b0ZvbnRTaXplKEZYX0JPT0wgYkF1dG8gPSBUUlVFLCBGWF9CT09MIGJQYWludCA9IFRSVUUpOwkNCi0Jdm9pZAkJCQkJCQkJCVNldEF1dG9TY3JvbGwoRlhfQk9PTCBiQXV0byA9IFRSVUUsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSk7CQ0KLQl2b2lkCQkJCQkJCQkJU2V0Rm9udFNpemUoRlhfRkxPQVQgZkZvbnRTaXplLCBGWF9CT09MIGJQYWludCA9IFRSVUUpOw0KLQl2b2lkCQkJCQkJCQkJU2V0VGV4dE92ZXJmbG93KEZYX0JPT0wgYkFsbG93ZWQgPSBGQUxTRSwgRlhfQk9PTCBiUGFpbnQgPSBUUlVFKTsNCi0NCi0JRlhfQk9PTAkJCQkJCQkJCUlzUmljaFRleHQoKSBjb25zdDsNCi0Jdm9pZAkJCQkJCQkJCVNldFJpY2hUZXh0KEZYX0JPT0wgYlJpY2hUZXh0ID0gVFJVRSwgRlhfQk9PTCBiUGFpbnQgPSBUUlVFKTsNCi0JRlhfQk9PTAkJCQkJCQkJCVNldFJpY2hGb250U2l6ZShGWF9GTE9BVCBmRm9udFNpemUpOwkNCi0JRlhfQk9PTAkJCQkJCQkJCVNldFJpY2hGb250SW5kZXgoRlhfSU5UMzIgbkZvbnRJbmRleCk7DQotCUZYX0JPT0wJCQkJCQkJCQlTZXRSaWNoVGV4dENvbG9yKEZYX0NPTE9SUkVGIGR3Q29sb3IpOw0KLQlGWF9CT09MCQkJCQkJCQkJU2V0UmljaFRleHRTY3JpcHQoRlhfSU5UMzIgblNjcmlwdFR5cGUpOw0KLQlGWF9CT09MCQkJCQkJCQkJU2V0UmljaFRleHRCb2xkKEZYX0JPT0wgYkJvbGQgPSBUUlVFKTsJDQotCUZYX0JPT0wJCQkJCQkJCQlTZXRSaWNoVGV4dEl0YWxpYyhGWF9CT09MIGJJdGFsaWMgPSBUUlVFKTsNCi0JRlhfQk9PTAkJCQkJCQkJCVNldFJpY2hUZXh0VW5kZXJsaW5lKEZYX0JPT0wgYlVuZGVybGluZSA9IFRSVUUpOw0KLQlGWF9CT09MCQkJCQkJCQkJU2V0UmljaFRleHRDcm9zc291dChGWF9CT09MIGJDcm9zc291dCA9IFRSVUUpOw0KLQlGWF9CT09MCQkJCQkJCQkJU2V0UmljaFRleHRDaGFyU3BhY2UoRlhfRkxPQVQgZkNoYXJTcGFjZSk7DQotCUZYX0JPT0wJCQkJCQkJCQlTZXRSaWNoVGV4dEhvcnpTY2FsZShGWF9JTlQzMiBuSG9yelNjYWxlID0gMTAwKTsNCi0JRlhfQk9PTAkJCQkJCQkJCVNldFJpY2hUZXh0TGluZUxlYWRpbmcoRlhfRkxPQVQgZkxpbmVMZWFkaW5nKTsNCi0JRlhfQk9PTAkJCQkJCQkJCVNldFJpY2hUZXh0TGluZUluZGVudChGWF9GTE9BVCBmTGluZUluZGVudCk7DQotCUZYX0JPT0wJCQkJCQkJCQlTZXRSaWNoVGV4dEFsaWdubWVudChGWF9JTlQzMiBuQWxpZ25tZW50KTsNCi0NCi0Jdm9pZAkJCQkJCQkJCU9uTW91c2VEb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCxGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKTsNCi0Jdm9pZAkJCQkJCQkJCU9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCxGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKTsNCi0Jdm9pZAkJCQkJCQkJCU9uVktfVVAoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCk7DQotCXZvaWQJCQkJCQkJCQlPblZLX0RPV04oRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCk7DQotCXZvaWQJCQkJCQkJCQlPblZLX0xFRlQoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCk7DQotCXZvaWQJCQkJCQkJCQlPblZLX1JJR0hUKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpOw0KLQl2b2lkCQkJCQkJCQkJT25WS19IT01FKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpOw0KLQl2b2lkCQkJCQkJCQkJT25WS19FTkQoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCk7DQotDQotCXZvaWQJCQkJCQkJCQlTZXRUZXh0KEZYX0xQQ1dTVFIgdGV4dCxGWF9JTlQzMiBjaGFyc2V0ID0gREVGQVVMVF9DSEFSU0VULA0KLQkJCQkJCQkJCQkJCQljb25zdCBDUFZUX1NlY1Byb3BzICogcFNlY1Byb3BzID0gTlVMTCxjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMgPSBOVUxMKTsJDQotCUZYX0JPT0wJCQkJCQkJCQlJbnNlcnRXb3JkKEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCA9IERFRkFVTFRfQ0hBUlNFVCwgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzID0gTlVMTCk7DQotCUZYX0JPT0wJCQkJCQkJCQlJbnNlcnRSZXR1cm4oY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcyA9IE5VTEwsY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzID0gTlVMTCk7DQotCUZYX0JPT0wJCQkJCQkJCQlCYWNrc3BhY2UoKTsNCi0JRlhfQk9PTAkJCQkJCQkJCURlbGV0ZSgpOwkJDQotCUZYX0JPT0wJCQkJCQkJCQlDbGVhcigpOw0KLQlGWF9CT09MCQkJCQkJCQkJRW1wdHkoKTsNCi0JRlhfQk9PTAkJCQkJCQkJCUluc2VydFRleHQoRlhfTFBDV1NUUiB0ZXh0LCBGWF9JTlQzMiBjaGFyc2V0ID0gREVGQVVMVF9DSEFSU0VULA0KLQkJCQkJCQkJCQkJCQljb25zdCBDUFZUX1NlY1Byb3BzICogcFNlY1Byb3BzID0gTlVMTCxjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMgPSBOVUxMKTsNCi0JRlhfQk9PTAkJCQkJCQkJCVJlZG8oKTsNCi0JRlhfQk9PTAkJCQkJCQkJCVVuZG8oKTsJDQotCUNQVlRfV29yZFBsYWNlCQkJCQkJCURvSW5zZXJ0VGV4dChjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIEZYX0xQQ1dTVFIgdGV4dCwgRlhfSU5UMzIgY2hhcnNldCwgDQotCQkJCQkJCQkJCQkJY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzKTsNCi0JRlhfSU5UMzIJCQkJCQkJCUdldENoYXJTZXRGcm9tVW5pY29kZShGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIG5PbGRDaGFyc2V0KTsNCi0NCi0JRlhfSU5UMzIJCQkJCQkJCVdvcmRQbGFjZVRvV29yZEluZGV4KGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0Ow0KLQlDUFZUX1dvcmRQbGFjZQkJCQkJCQlXb3JkSW5kZXhUb1dvcmRQbGFjZShGWF9JTlQzMiBpbmRleCkgY29uc3Q7CQ0KLQ0KLQlDUFZUX1dvcmRQbGFjZQkJCQkJCQlHZXRMaW5lQmVnaW5QbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdDsNCi0JQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJR2V0TGluZUVuZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0Ow0KLQlDUFZUX1dvcmRQbGFjZQkJCQkJCQlHZXRTZWN0aW9uQmVnaW5QbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdDsNCi0JQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJR2V0U2VjdGlvbkVuZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0Ow0KLQlDUFZUX1dvcmRQbGFjZQkJCQkJCQlTZWFyY2hXb3JkUGxhY2UoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpIGNvbnN0Ow0KLQ0KLQlGWF9JTlQzMgkJCQkJCQkJR2V0Q2FyZXQoKSBjb25zdDsNCi0JQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJR2V0Q2FyZXRXb3JkUGxhY2UoKSBjb25zdDsNCi0JQ0ZYX1dpZGVTdHJpbmcJCQkJCQkJR2V0U2VsVGV4dCgpIGNvbnN0Ow0KLQlDRlhfV2lkZVN0cmluZwkJCQkJCQlHZXRUZXh0KCkgY29uc3Q7DQotCUZYX0ZMT0FUCQkJCQkJCQlHZXRGb250U2l6ZSgpIGNvbnN0Ow0KLQlGWF9XT1JECQkJCQkJCQkJR2V0UGFzc3dvcmRDaGFyKCkgY29uc3Q7DQotCUNQREZfUG9pbnQJCQkJCQkJCUdldFNjcm9sbFBvcygpIGNvbnN0Ow0KLQlGWF9JTlQzMgkJCQkJCQkJR2V0Q2hhckFycmF5KCkgY29uc3Q7DQotCUNQREZfUmVjdAkJCQkJCQkJR2V0UGxhdGVSZWN0KCkgY29uc3Q7DQotCUNQREZfUmVjdAkJCQkJCQkJR2V0Q29udGVudFJlY3QoKSBjb25zdDsNCi0JQ0ZYX1dpZGVTdHJpbmcJCQkJCQkJR2V0UmFuZ2VUZXh0KGNvbnN0IENQVlRfV29yZFJhbmdlICYgcmFuZ2UpIGNvbnN0Ow0KLQlGWF9JTlQzMgkJCQkJCQkJR2V0SG9yelNjYWxlKCkgY29uc3Q7DQotCUZYX0ZMT0FUCQkJCQkJCQlHZXRDaGFyU3BhY2UoKSBjb25zdDsNCi0JRlhfSU5UMzIJCQkJCQkJCUdldFRvdGFsV29yZHMoKSBjb25zdDsNCi0JRlhfSU5UMzIJCQkJCQkJCUdldFRvdGFsTGluZXMoKSBjb25zdDsNCi0NCi0Jdm9pZAkJCQkJCQkJCVNldFNlbChGWF9JTlQzMiBuU3RhcnRDaGFyLEZYX0lOVDMyIG5FbmRDaGFyKTsNCi0Jdm9pZAkJCQkJCQkJCUdldFNlbChGWF9JTlQzMiAmIG5TdGFydENoYXIsIEZYX0lOVDMyICYgbkVuZENoYXIpIGNvbnN0Ow0KLQ0KLXByaXZhdGU6DQotCXZvaWQJCQkJCQkJCQlTZWxlY3RBbGwoKTsNCi0Jdm9pZAkJCQkJCQkJCVNlbGVjdE5vbmUoKTsNCi0Jdm9pZAkJCQkJCQkJCVNldFNlbChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIGJlZ2luLGNvbnN0IENQVlRfV29yZFBsYWNlICYgZW5kKTsNCi0JRlhfQk9PTAkJCQkJCQkJCUlzU2VsZWN0ZWQoKSBjb25zdDsNCi0NCi0Jdm9pZAkJCQkJCQkJCVJlYXJyYW5nZUFsbCgpOw0KLQl2b2lkCQkJCQkJCQkJUmVhcnJhbmdlUGFydChjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHJhbmdlKTsNCi0Jdm9pZAkJCQkJCQkJCVBhaW50KCk7DQotCXZvaWQJCQkJCQkJCQlTY3JvbGxUb0NhcmV0KCk7DQotCXZvaWQJCQkJCQkJCQlTZXRTY3JvbGxJbmZvKCk7DQotCXZvaWQJCQkJCQkJCQlTZXRTY3JvbGxQb3NYKEZYX0ZMT0FUIGZ4KTsNCi0Jdm9pZAkJCQkJCQkJCVNldFNjcm9sbFBvc1koRlhfRkxPQVQgZnkpOw0KLQl2b2lkCQkJCQkJCQkJU2V0U2Nyb2xsTGltaXQoKTsNCi0Jdm9pZAkJCQkJCQkJCVNldENvbnRlbnRDaGFuZ2VkKCk7DQotCXZvaWQJCQkJCQkJCQlFbmFibGVOb3RpZnkoRlhfQk9PTCBiTm90aWZ5KTsNCi0NCi0Jdm9pZAkJCQkJCQkJCVNldFRleHQoRlhfTFBDV1NUUiB0ZXh0LEZYX0lOVDMyIGNoYXJzZXQsDQotCQkJCQkJCQkJCQkJCWNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMsY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzLEZYX0JPT0wgYkFkZFVuZG8sIEZYX0JPT0wgYlBhaW50KTsJDQotCUZYX0JPT0wJCQkJCQkJCQlJbnNlcnRXb3JkKEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCwgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzLEZYX0JPT0wgYkFkZFVuZG8sIEZYX0JPT0wgYlBhaW50KTsNCi0JRlhfQk9PTAkJCQkJCQkJCUluc2VydFJldHVybihjb25zdCBDUFZUX1NlY1Byb3BzICogcFNlY1Byb3BzLGNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcyxGWF9CT09MIGJBZGRVbmRvLCBGWF9CT09MIGJQYWludCk7DQotCUZYX0JPT0wJCQkJCQkJCQlCYWNrc3BhY2UoRlhfQk9PTCBiQWRkVW5kbywgRlhfQk9PTCBiUGFpbnQpOw0KLQlGWF9CT09MCQkJCQkJCQkJRGVsZXRlKEZYX0JPT0wgYkFkZFVuZG8sIEZYX0JPT0wgYlBhaW50KTsJCQ0KLQlGWF9CT09MCQkJCQkJCQkJQ2xlYXIoRlhfQk9PTCBiQWRkVW5kbywgRlhfQk9PTCBiUGFpbnQpOw0KLQlGWF9CT09MCQkJCQkJCQkJSW5zZXJ0VGV4dChGWF9MUENXU1RSIHRleHQsIEZYX0lOVDMyIGNoYXJzZXQsDQotCQkJCQkJCQkJCQkJY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcyxjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMsRlhfQk9PTCBiQWRkVW5kbywgRlhfQk9PTCBiUGFpbnQpOw0KLQlGWF9CT09MCQkJCQkJCQkJU2V0UmljaFRleHRQcm9wcyhFRElUX1BST1BTX0UgZVByb3BzLA0KLQkJCQkJCQkJCQkJCWNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMsIGNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcyk7DQotCUZYX0JPT0wJCQkJCQkJCQlTZXRTZWNQcm9wcyhFRElUX1BST1BTX0UgZVByb3BzLCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCANCi0JCQkJCQkJCQkJCQljb25zdCBDUFZUX1NlY1Byb3BzICogcFNlY1Byb3BzLCBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMsIGNvbnN0IENQVlRfV29yZFJhbmdlICYgd3IsIEZYX0JPT0wgYkFkZFVuZG8pOw0KLQlGWF9CT09MCQkJCQkJCQkJU2V0V29yZFByb3BzKEVESVRfUFJPUFNfRSBlUHJvcHMsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIA0KLQkJCQkJCQkJCQkJCWNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiB3ciwgRlhfQk9PTCBiQWRkVW5kbyk7DQotCXZvaWQJCQkJCQkJCQlQYWludFNldFByb3BzKEVESVRfUFJPUFNfRSBlUHJvcHMsIGNvbnN0IENQVlRfV29yZFJhbmdlICYgd3IpOw0KLQl2b2lkCQkJCQkJCQkJUGFpbnRJbnNlcnRUZXh0KGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3BPbGQsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3BOZXcpOw0KLQ0KLQlpbmxpbmUgQ1BERl9Qb2ludAkJCQkJCVZUVG9FZGl0KGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3Q7DQotCWlubGluZSBDUERGX1BvaW50CQkJCQkJRWRpdFRvVlQoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdDsNCi0JaW5saW5lIENQREZfUmVjdAkJCQkJCVZUVG9FZGl0KGNvbnN0IENQREZfUmVjdCAmIHJlY3QpIGNvbnN0Ow0KLQlpbmxpbmUgQ1BERl9SZWN0CQkJCQkJRWRpdFRvVlQoY29uc3QgQ1BERl9SZWN0ICYgcmVjdCkgY29uc3Q7DQotDQotCXZvaWQJCQkJCQkJCQlFbmFibGVSZWZyZXNoKEZYX0JPT0wgYlJlZnJlc2gpOw0KLQl2b2lkCQkJCQkJCQkJUmVmcmVzaChSRUZSRVNIX1BMQU5fRSBlUGxhbixjb25zdCBDUFZUX1dvcmRSYW5nZSAqIHBSYW5nZTEgPSBOVUxMLGNvbnN0IENQVlRfV29yZFJhbmdlICogcFJhbmdlMiA9IE5VTEwpOw0KLQl2b2lkCQkJCQkJCQkJUmVmcmVzaFB1c2hMaW5lUmVjdHMoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiB3cik7DQotCXZvaWQJCQkJCQkJCQlSZWZyZXNoUHVzaFJhbmRvbVJlY3RzKGNvbnN0IENQVlRfV29yZFJhbmdlICYgd3IpOw0KLQl2b2lkCQkJCQkJCQkJUmVmcmVzaFdvcmRSYW5nZShjb25zdCBDUFZUX1dvcmRSYW5nZSYgd3IpOw0KLQ0KLQl2b2lkCQkJCQkJCQkJU2V0Q2FyZXQoRlhfSU5UMzIgblBvcyk7DQotCXZvaWQJCQkJCQkJCQlTZXRDYXJldChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKTsNCi0Jdm9pZAkJCQkJCQkJCVNldENhcmV0SW5mbygpOw0KLQl2b2lkCQkJCQkJCQkJU2V0Q2FyZXRPcmlnaW4oKTsNCi0Jdm9pZAkJCQkJCQkJCVNldENhcmV0Q2hhbmdlKCk7DQotDQotCUNQVlRfV29yZFJhbmdlCQkJCQkJCUdldFdob2xlV29yZFJhbmdlKCkgY29uc3Q7DQotCUNQVlRfV29yZFJhbmdlCQkJCQkJCUdldFZpc2libGVXb3JkUmFuZ2UoKSBjb25zdDsNCi0JQ1BWVF9Xb3JkUmFuZ2UJCQkJCQkJR2V0TGF0aW5Xb3Jkc1JhbmdlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0Ow0KLQlDUFZUX1dvcmRSYW5nZQkJCQkJCQlDb21iaW5lV29yZFJhbmdlKGNvbnN0IENQVlRfV29yZFJhbmdlICYgd3IxLCBjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHdyMik7DQotCUNQVlRfV29yZFJhbmdlCQkJCQkJCUdldFNlbGVjdFdvcmRSYW5nZSgpIGNvbnN0Ow0KLQ0KLQl2b2lkCQkJCQkJCQkJRW5hYmxlVW5kbyhGWF9CT09MIGJVbmRvKTsNCi0Jdm9pZAkJCQkJCQkJCUVuYWJsZU9wck5vdGlmeShGWF9CT09MIGJOb3RpZnkpOw0KLQ0KLQlGWF9CT09MCQkJCQkJCQkJSXNUZXh0RnVsbCgpIGNvbnN0Ow0KLQlGWF9CT09MCQkJCQkJCQkJSXNUZXh0T3ZlcmZsb3coKSBjb25zdDsNCi0JRlhfQk9PTAkJCQkJCQkJCUNhblVuZG8oKSBjb25zdDsNCi0JRlhfQk9PTAkJCQkJCQkJCUNhblJlZG8oKSBjb25zdDsNCi0JRlhfQk9PTAkJCQkJCQkJCUlzTW9kaWZpZWQoKSBjb25zdDsNCi0NCi0Jdm9pZAkJCQkJCQkJCUJlZ2luR3JvdXBVbmRvKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzVGl0bGUpOw0KLQl2b2lkCQkJCQkJCQkJRW5kR3JvdXBVbmRvKCk7DQotCXZvaWQJCQkJCQkJCQlBZGRFZGl0VW5kb0l0ZW0oQ0ZYX0VkaXRfVW5kb0l0ZW0qIHBFZGl0VW5kb0l0ZW0pOw0KLQl2b2lkCQkJCQkJCQkJQWRkVW5kb0l0ZW0oSUZYX0VkaXRfVW5kb0l0ZW0qIHBVbmRvSXRlbSk7DQotDQotCXZvaWQJCQkJCQkJCQlTZXRQYWdlSW5mbyhjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UpOw0KLQlDUFZUX1dvcmRQbGFjZQkJCQkJCQlTZWFyY2hQYWdlRW5kUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHdwUGFnZUJlZ2luLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkgY29uc3Q7DQotCUZYX0ZMT0FUCQkJCQkJCQlHZXRMaW5lVG9wKGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSkgY29uc3Q7DQotCUZYX0ZMT0FUCQkJCQkJCQlHZXRMaW5lQm90dG9tKGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSkgY29uc3Q7DQotDQotcHJpdmF0ZToJDQotCUlQREZfVmFyaWFibGVUZXh0KgkJCQkJCW1fcFZUOw0KLQlJRlhfRWRpdF9Ob3RpZnkqCQkJCQkJbV9wTm90aWZ5Ow0KLQlJRlhfRWRpdF9PcHJOb3RpZnkqCQkJCQkJbV9wT3ByTm90aWZ5Ow0KLQlDRlhfRWRpdF9Qcm92aWRlcioJCQkJCQltX3BWVFByb3ZpZGU7DQotDQotCUNQVlRfV29yZFBsYWNlCQkJCQkJCW1fd3BDYXJldDsNCi0JQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJbV93cE9sZENhcmV0Ow0KLQlDRlhfRWRpdF9TZWxlY3QJCQkJCQkJbV9TZWxTdGF0ZTsNCi0NCi0JQ1BERl9Qb2ludAkJCQkJCQkJbV9wdFNjcm9sbFBvczsNCi0JQ1BERl9Qb2ludAkJCQkJCQkJbV9wdFJlZnJlc2hTY3JvbGxQb3M7DQotCUZYX0JPT0wJCQkJCQkJCQltX2JFbmFibGVTY3JvbGw7CQ0KLQlJRlhfRWRpdF9JdGVyYXRvciAqCQkJCQkJbV9wSXRlcmF0b3I7CQ0KLQlDRlhfRWRpdF9SZWZyZXNoCQkJCQkJbV9SZWZyZXNoOw0KLQlDUERGX1BvaW50CQkJCQkJCQltX3B0Q2FyZXQ7DQotCUNGWF9FZGl0X1VuZG8JCQkJCQkJbV9VbmRvOw0KLQlGWF9JTlQzMgkJCQkJCQkJbV9uQWxpZ25tZW50Ow0KLQlGWF9CT09MCQkJCQkJCQkJbV9iTm90aWZ5RmxhZzsNCi0JRlhfQk9PTAkJCQkJCQkJCW1fYlRleHRGdWxsRmxhZzsNCi0JRlhfQk9PTAkJCQkJCQkJCW1fYkVuYWJsZU92ZXJmbG93Ow0KLQlGWF9CT09MCQkJCQkJCQkJbV9iRW5hYmxlUmVmcmVzaDsNCi0JQ1BERl9SZWN0CQkJCQkJCQltX3JjT2xkQ29udGVudDsNCi0JRlhfQk9PTAkJCQkJCQkJCW1fYkVuYWJsZVVuZG87DQotCUZYX0JPT0wJCQkJCQkJCQltX2JOb3RpZnk7DQotCUZYX0JPT0wJCQkJCQkJCQltX2JPcHJOb3RpZnk7DQotCUNGWF9FZGl0X0dyb3VwVW5kb0l0ZW0qCQkJCQltX3BHcm91cFVuZG9JdGVtOw0KLX07DQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDRlhfRWRpdF9JdGVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotY2xhc3MgQ0ZYX0VkaXRfSXRlcmF0b3IgOiBwdWJsaWMgSUZYX0VkaXRfSXRlcmF0b3INCi17DQotcHVibGljOg0KLQlDRlhfRWRpdF9JdGVyYXRvcihDRlhfRWRpdCAqIHBFZGl0LElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yICogcFZUSXRlcmF0b3IpOw0KLQl2aXJ0dWFsIH5DRlhfRWRpdF9JdGVyYXRvcigpOw0KLQ0KLQlGWF9CT09MCQkJCQkJCQkJTmV4dFdvcmQoKTsNCi0JRlhfQk9PTAkJCQkJCQkJCU5leHRMaW5lKCk7DQotCUZYX0JPT0wJCQkJCQkJCQlOZXh0U2VjdGlvbigpOw0KLQlGWF9CT09MCQkJCQkJCQkJUHJldldvcmQoKTsNCi0JRlhfQk9PTAkJCQkJCQkJCVByZXZMaW5lKCk7DQotCUZYX0JPT0wJCQkJCQkJCQlQcmV2U2VjdGlvbigpOw0KLQ0KLQlGWF9CT09MCQkJCQkJCQkJR2V0V29yZChDUFZUX1dvcmQgJiB3b3JkKSBjb25zdDsNCi0JRlhfQk9PTAkJCQkJCQkJCUdldExpbmUoQ1BWVF9MaW5lICYgbGluZSkgY29uc3Q7DQotCUZYX0JPT0wJCQkJCQkJCQlHZXRTZWN0aW9uKENQVlRfU2VjdGlvbiAmIHNlY3Rpb24pIGNvbnN0Ow0KLQl2b2lkCQkJCQkJCQkJU2V0QXQoRlhfSU5UMzIgbldvcmRJbmRleCk7DQotCXZvaWQJCQkJCQkJCQlTZXRBdChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKTsNCi0JY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJgkJCQkJR2V0QXQoKSBjb25zdDsNCi0JSUZYX0VkaXQqCQkJCQkJCQlHZXRFZGl0KCkgY29uc3Q7DQotDQotcHJpdmF0ZToNCi0JQ0ZYX0VkaXQgKgkJCQkJCQkJbV9wRWRpdDsNCi0JSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IqCQkJCW1fcFZUSXRlcmF0b3I7DQotfTsNCi0NCi1jbGFzcyBDRlhfRWRpdF9Qcm92aWRlciA6IHB1YmxpYyBJUERGX1ZhcmlhYmxlVGV4dF9Qcm92aWRlcg0KLXsNCi1wdWJsaWM6DQotCUNGWF9FZGl0X1Byb3ZpZGVyKElGWF9FZGl0X0ZvbnRNYXAqIHBGb250TWFwKTsNCi0JdmlydHVhbCB+Q0ZYX0VkaXRfUHJvdmlkZXIoKTsNCi0NCi0JSUZYX0VkaXRfRm9udE1hcCoJCQlHZXRGb250TWFwKCk7DQotDQotCUZYX0lOVDMyCQkJCQlHZXRDaGFyV2lkdGgoRlhfSU5UMzIgbkZvbnRJbmRleCwgRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBuV29yZFN0eWxlKTsNCi0JRlhfSU5UMzIJCQkJCUdldFR5cGVBc2NlbnQoRlhfSU5UMzIgbkZvbnRJbmRleCk7DQotCUZYX0lOVDMyCQkJCQlHZXRUeXBlRGVzY2VudChGWF9JTlQzMiBuRm9udEluZGV4KTsNCi0JRlhfSU5UMzIJCQkJCUdldFdvcmRGb250SW5kZXgoRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBjaGFyc2V0LCBGWF9JTlQzMiBuRm9udEluZGV4KTsNCi0JRlhfSU5UMzIJCQkJCUdldERlZmF1bHRGb250SW5kZXgoKTsNCi0JRlhfQk9PTAkJCQkJCUlzTGF0aW5Xb3JkKEZYX1dPUkQgd29yZCk7DQotDQotcHJpdmF0ZToNCi0JSUZYX0VkaXRfRm9udE1hcCoJCQltX3BGb250TWFwOw0KLX07DQotDQotI2VuZGlmIC8vX0ZYRVRfRURJVF9IXw0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZYRVRfRURJVF9IXworI2RlZmluZSBfRlhFVF9FRElUX0hfCisKKyNpbmNsdWRlICJmeF9lZGl0LmgiCisKK2NsYXNzIENGWF9FZGl0X1BhZ2U7CitzdHJ1Y3QgQ0ZYX0VkaXRfTGluZVJlY3Q7CitjbGFzcyBDRlhfRWRpdF9MaW5lUmVjdEFycmF5OworY2xhc3MgQ0ZYX0VkaXRfUmVjdEFycmF5OworY2xhc3MgQ0ZYX0VkaXRfUmVmcmVzaDsKK2NsYXNzIENGWF9FZGl0X1NlbGVjdDsKK2NsYXNzIENGWF9FZGl0OworY2xhc3MgQ0ZYX0VkaXRfSXRlcmF0b3I7CitjbGFzcyBDRlhfRWRpdF9SZWZyZXNoOworY2xhc3MgQ0ZYX0VkaXRfVW5kb0l0ZW07CitjbGFzcyBDRlhfRWRpdF9VbmRvOworY2xhc3MgQ0ZYX0VkaXRfUHJvdmlkZXI7CisKKyNkZWZpbmUgRlhfRURJVF9Jc0Zsb2F0WmVybyhmKQkJCQkJCShmIDwgMC4wMDAxICYmIGYgPiAtMC4wMDAxKQorI2RlZmluZSBGWF9FRElUX0lzRmxvYXRFcXVhbChmYSxmYikJCQkJCUZYX0VESVRfSXNGbG9hdFplcm8oZmEgLSBmYikKKyNkZWZpbmUgRlhfRURJVF9Jc0Zsb2F0QmlnZ2VyKGZhLGZiKQkJCQkoZmEgPiBmYiAmJiAhRlhfRURJVF9Jc0Zsb2F0RXF1YWwoZmEsZmIpKQorI2RlZmluZSBGWF9FRElUX0lzRmxvYXRTbWFsbGVyKGZhLGZiKQkJCQkoZmEgPCBmYiAmJiAhRlhfRURJVF9Jc0Zsb2F0RXF1YWwoZmEsZmIpKQorCit0ZW1wbGF0ZTxjbGFzcyBUPiBUIEZYX0VESVRfTUlOIChjb25zdCBUICYgaSwgY29uc3QgVCAmIGopIHsgcmV0dXJuICgoaSA8IGopID8gaSA6IGopOyB9Cit0ZW1wbGF0ZTxjbGFzcyBUPiBUIEZYX0VESVRfTUFYIChjb25zdCBUICYgaSwgY29uc3QgVCAmIGopIHsgcmV0dXJuICgoaSA+IGopID8gaSA6IGopOyB9CisKKyNkZWZpbmUJRlhfRURJVF9QSQkJCQkJCQkJCTMuMTQxNTkyNjUzNTg5NzlmCisjZGVmaW5lIEZYX0VESVRfSVRBTElDX0FOR0VMCQkJCQkJMTAgKiBGWF9FRElUX1BJIC8gMTgwLjBmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDRlhfRWRpdF9SZWZyZXNoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworZW51bSBSRUZSRVNIX1BMQU5fRQoreworCVJQX0FOQUxZU0UsCisJUlBfTk9BTkFMWVNFLAorCVJQX09QVElPTkFMCit9OworCitlbnVtIEVESVRfUFJPUFNfRQoreworCUVQX0xJTkVMRUFESU5HLAorCUVQX0xJTkVJTkRFTlQsCisJRVBfQUxJR05NRU5ULAorCUVQX0ZPTlRJTkRFWCwKKwlFUF9GT05UU0laRSwKKwlFUF9XT1JEQ09MT1IsCisJRVBfU0NSSVBUVFlQRSwKKwlFUF9VTkRFUkxJTkUsCisJRVBfQ1JPU1NPVVQsCisJRVBfQ0hBUlNQQUNFLAorCUVQX0hPUlpTQ0FMRSwKKwlFUF9CT0xELAorCUVQX0lUQUxJQworfTsKKworc3RydWN0IENGWF9FZGl0X0xpbmVSZWN0Cit7CisJQ0ZYX0VkaXRfTGluZVJlY3QoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiB3ckxpbmUsY29uc3QgQ1BERl9SZWN0ICYgcmNMaW5lKSA6CisJCW1fd3JMaW5lKHdyTGluZSksIG1fcmNMaW5lKHJjTGluZSkKKwl7CisJfQorCisJRlhfQk9PTCBvcGVyYXRvciAhPSAoY29uc3QgQ0ZYX0VkaXRfTGluZVJlY3QgJiBsaW5lcmVjdCkgY29uc3QKKwl7CisJCXJldHVybiBGWFNZU19tZW1jbXAodGhpcywgJmxpbmVyZWN0LCBzaXplb2YoQ0ZYX0VkaXRfTGluZVJlY3QpKSAhPSAwOworCX0KKworCUZYX0JPT0wgSXNTYW1lSGVpZ2h0KGNvbnN0IENGWF9FZGl0X0xpbmVSZWN0ICYgbGluZXJlY3QpIGNvbnN0CisJeworCQlyZXR1cm4gRlhfRURJVF9Jc0Zsb2F0WmVybygobV9yY0xpbmUudG9wIC0gbV9yY0xpbmUuYm90dG9tKSAtIChsaW5lcmVjdC5tX3JjTGluZS50b3AgLWxpbmVyZWN0Lm1fcmNMaW5lLmJvdHRvbSkpOworCX0KKworCUZYX0JPT0wgSXNTYW1lVG9wKGNvbnN0IENGWF9FZGl0X0xpbmVSZWN0ICYgbGluZXJlY3QpIGNvbnN0CisJeworCQlyZXR1cm4gRlhfRURJVF9Jc0Zsb2F0WmVybyhtX3JjTGluZS50b3AgLSBsaW5lcmVjdC5tX3JjTGluZS50b3ApOworCX0KKworCUZYX0JPT0wgSXNTYW1lTGVmdChjb25zdCBDRlhfRWRpdF9MaW5lUmVjdCAmIGxpbmVyZWN0KSBjb25zdAorCXsKKwkJcmV0dXJuIEZYX0VESVRfSXNGbG9hdFplcm8obV9yY0xpbmUubGVmdCAtIGxpbmVyZWN0Lm1fcmNMaW5lLmxlZnQpOworCX0KKworCUZYX0JPT0wgSXNTYW1lUmlnaHQoY29uc3QgQ0ZYX0VkaXRfTGluZVJlY3QgJiBsaW5lcmVjdCkgY29uc3QKKwl7CisJCXJldHVybiBGWF9FRElUX0lzRmxvYXRaZXJvKG1fcmNMaW5lLnJpZ2h0IC0gbGluZXJlY3QubV9yY0xpbmUucmlnaHQpOworCX0KKworCUNQVlRfV29yZFJhbmdlCQkJCQkJCW1fd3JMaW5lOworCUNQREZfUmVjdAkJCQkJCQkJbV9yY0xpbmU7Cit9OworCitjbGFzcyBDRlhfRWRpdF9MaW5lUmVjdEFycmF5Cit7CitwdWJsaWM6CisJQ0ZYX0VkaXRfTGluZVJlY3RBcnJheSgpCisJeworCX0KKworCXZpcnR1YWwgfkNGWF9FZGl0X0xpbmVSZWN0QXJyYXkoKQorCXsKKwkJRW1wdHkoKTsKKwl9CisKKwl2b2lkIEVtcHR5KCkKKwl7CisJCWZvciAoRlhfSU5UMzIgaSA9IDAsIHN6ID0gbV9MaW5lUmVjdHMuR2V0U2l6ZSgpOyBpIDwgc3o7IGkrKykKKwkJCWRlbGV0ZSBtX0xpbmVSZWN0cy5HZXRBdChpKTsKKworCQltX0xpbmVSZWN0cy5SZW1vdmVBbGwoKTsKKwl9CisKKwl2b2lkIFJlbW92ZUFsbCgpCisJeworCQltX0xpbmVSZWN0cy5SZW1vdmVBbGwoKTsKKwl9CisKKwl2b2lkIG9wZXJhdG9yID0gKENGWF9FZGl0X0xpbmVSZWN0QXJyYXkgJiByZWN0cykKKwl7CisJCUVtcHR5KCk7CisJCWZvciAoRlhfSU5UMzIgaSA9IDAsIHN6ID0gcmVjdHMuR2V0U2l6ZSgpOyBpIDwgc3o7IGkrKykKKwkJCW1fTGluZVJlY3RzLkFkZChyZWN0cy5HZXRBdChpKSk7CisKKwkJcmVjdHMuUmVtb3ZlQWxsKCk7CisJfQorCisJdm9pZCBBZGQoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiB3ckxpbmUsY29uc3QgQ1BERl9SZWN0ICYgcmNMaW5lKQorCXsKKwkJaWYgKENGWF9FZGl0X0xpbmVSZWN0ICogcFJlY3QgPSBuZXcgQ0ZYX0VkaXRfTGluZVJlY3Qod3JMaW5lLHJjTGluZSkpCisJCQltX0xpbmVSZWN0cy5BZGQocFJlY3QpOworCX0KKworCUZYX0lOVDMyIEdldFNpemUoKSBjb25zdAorCXsKKwkJcmV0dXJuIG1fTGluZVJlY3RzLkdldFNpemUoKTsKKwl9CisKKwlDRlhfRWRpdF9MaW5lUmVjdCAqIEdldEF0KEZYX0lOVDMyIG5JbmRleCkgY29uc3QKKwl7CisJCWlmIChuSW5kZXggPCAwIHx8IG5JbmRleCA+PSBtX0xpbmVSZWN0cy5HZXRTaXplKCkpCisJCQlyZXR1cm4gTlVMTDsKKworCQlyZXR1cm4gbV9MaW5lUmVjdHMuR2V0QXQobkluZGV4KTsKKwl9CisKKwlDRlhfQXJyYXlUZW1wbGF0ZTxDRlhfRWRpdF9MaW5lUmVjdCo+CQltX0xpbmVSZWN0czsKK307CisKK2NsYXNzIENGWF9FZGl0X1JlY3RBcnJheQoreworcHVibGljOgorCUNGWF9FZGl0X1JlY3RBcnJheSgpCisJeworCX0KKworCXZpcnR1YWwgfkNGWF9FZGl0X1JlY3RBcnJheSgpCisJeworCQl0aGlzLT5FbXB0eSgpOworCX0KKworCXZvaWQgRW1wdHkoKQorCXsKKwkJZm9yIChGWF9JTlQzMiBpID0gMCwgc3ogPSBtX1JlY3RzLkdldFNpemUoKTsgaSA8IHN6OyBpKyspCisJCQlkZWxldGUgbV9SZWN0cy5HZXRBdChpKTsKKworCQl0aGlzLT5tX1JlY3RzLlJlbW92ZUFsbCgpOworCX0KKworCXZvaWQgQWRkKGNvbnN0IENQREZfUmVjdCAmIHJlY3QpCisJeworCQkvL2NoZWNrIGZvciBvdmVybGFwZWQgYXJlYQorCQlmb3IgKEZYX0lOVDMyIGkgPSAwLCBzeiA9IG1fUmVjdHMuR2V0U2l6ZSgpOyBpIDwgc3o7IGkrKykKKwkJCWlmIChDUERGX1JlY3QgKiBwUmVjdCA9IG1fUmVjdHMuR2V0QXQoaSkpCisJCQkJaWYgKHBSZWN0LT5Db250YWlucyhyZWN0KSlyZXR1cm47CisKKwkJaWYgKENQREZfUmVjdCAqIHBOZXdSZWN0ID0gbmV3IENQREZfUmVjdChyZWN0KSkKKwkJCW1fUmVjdHMuQWRkKHBOZXdSZWN0KTsKKwl9CisKKwlGWF9JTlQzMiBHZXRTaXplKCkgY29uc3QKKwl7CisJCXJldHVybiBtX1JlY3RzLkdldFNpemUoKTsKKwl9CisKKwlDUERGX1JlY3QgKiBHZXRBdChGWF9JTlQzMiBuSW5kZXgpIGNvbnN0CisJeworCQlpZiAobkluZGV4IDwgMCB8fCBuSW5kZXggPj0gbV9SZWN0cy5HZXRTaXplKCkpCisJCQlyZXR1cm4gTlVMTDsKKworCQlyZXR1cm4gbV9SZWN0cy5HZXRBdChuSW5kZXgpOworCX0KKworCUNGWF9BcnJheVRlbXBsYXRlPENQREZfUmVjdCo+CQkJbV9SZWN0czsKK307CisKK2NsYXNzIENGWF9FZGl0X1JlZnJlc2gKK3sKK3B1YmxpYzoKKwlDRlhfRWRpdF9SZWZyZXNoKCk7CisJdmlydHVhbCB+Q0ZYX0VkaXRfUmVmcmVzaCgpOworCisJdm9pZAkJCQkJCQkJCUJlZ2luUmVmcmVzaCgpOworCXZvaWQJCQkJCQkJCQlQdXNoKGNvbnN0IENQVlRfV29yZFJhbmdlICYgbGluZXJhbmdlLGNvbnN0IENQREZfUmVjdCAmIHJlY3QpOworCXZvaWQJCQkJCQkJCQlOb0FuYWx5c2UoKTsKKwl2b2lkCQkJCQkJCQkJQW5hbHlzZShGWF9JTlQzMiBuQWxpZ25tZW50KTsKKwl2b2lkCQkJCQkJCQkJQWRkUmVmcmVzaChjb25zdCBDUERGX1JlY3QgJiByZWN0KTsKKwljb25zdCBDRlhfRWRpdF9SZWN0QXJyYXkgKgkJCQlHZXRSZWZyZXNoUmVjdHMoKSBjb25zdDsKKwl2b2lkCQkJCQkJCQkJRW5kUmVmcmVzaCgpOworCitwcml2YXRlOgorCUNGWF9FZGl0X0xpbmVSZWN0QXJyYXkJCQkJCW1fTmV3TGluZVJlY3RzOworCUNGWF9FZGl0X0xpbmVSZWN0QXJyYXkJCQkJCW1fT2xkTGluZVJlY3RzOworCUNGWF9FZGl0X1JlY3RBcnJheQkJCQkJCW1fUmVmcmVzaFJlY3RzOworfTsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENGWF9FZGl0X1NlbGVjdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2NsYXNzIENGWF9FZGl0X1NlbGVjdAoreworcHVibGljOgorCUNGWF9FZGl0X1NlbGVjdCgpCisJeworCX0KKworCUNGWF9FZGl0X1NlbGVjdChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIGJlZ2luLGNvbnN0IENQVlRfV29yZFBsYWNlICYgZW5kKQorCXsKKwkJU2V0KGJlZ2luLGVuZCk7CisJfQorCisJQ0ZYX0VkaXRfU2VsZWN0KGNvbnN0IENQVlRfV29yZFJhbmdlICYgcmFuZ2UpCisJeworCQlTZXQocmFuZ2UuQmVnaW5Qb3MscmFuZ2UuRW5kUG9zKTsKKwl9CisKKwlDUFZUX1dvcmRSYW5nZSBDb252ZXJ0VG9Xb3JkUmFuZ2UoKSBjb25zdAorCXsKKwkJcmV0dXJuIENQVlRfV29yZFJhbmdlKHRoaXMtPkJlZ2luUG9zLHRoaXMtPkVuZFBvcyk7CisJfQorCisJdm9pZCBEZWZhdWx0KCkKKwl7CisJCUJlZ2luUG9zLkRlZmF1bHQoKTsKKwkJRW5kUG9zLkRlZmF1bHQoKTsKKwl9CisKKwl2b2lkIFNldChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIGJlZ2luLGNvbnN0IENQVlRfV29yZFBsYWNlICYgZW5kKQorCXsKKwkJdGhpcy0+QmVnaW5Qb3MgPSBiZWdpbjsKKwkJdGhpcy0+RW5kUG9zID0gZW5kOworCX0KKworCXZvaWQgU2V0QmVnaW5Qb3MoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBiZWdpbikKKwl7CisJCXRoaXMtPkJlZ2luUG9zID0gYmVnaW47CisJfQorCisJdm9pZCBTZXRFbmRQb3MoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBlbmQpCisJeworCQl0aGlzLT5FbmRQb3MgPSBlbmQ7CisJfQorCisJRlhfQk9PTCBJc0V4aXN0KCkgY29uc3QKKwl7CisJCXJldHVybiB0aGlzLT5CZWdpblBvcyAhPSB0aGlzLT5FbmRQb3M7CisJfQorCisJRlhfQk9PTCBvcGVyYXRvciAhPSAoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiB3cikgY29uc3QKKwl7CisJCXJldHVybiB3ci5CZWdpblBvcyAhPSB0aGlzLT5CZWdpblBvcyB8fCB3ci5FbmRQb3MgIT0gdGhpcy0+RW5kUG9zOworCX0KKworCUNQVlRfV29yZFBsYWNlIEJlZ2luUG9zLEVuZFBvczsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZYX0VkaXRfVW5kbyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2NsYXNzIENGWF9FZGl0X1VuZG8KK3sKK3B1YmxpYzoKKwlDRlhfRWRpdF9VbmRvKEZYX0lOVDMyIG5CdWZzaXplID0gMTAwMDApOworCXZpcnR1YWwgfkNGWF9FZGl0X1VuZG8oKTsKKworCXZvaWQJCQkJCQkJCQlVbmRvKCk7CisJdm9pZAkJCQkJCQkJCVJlZG8oKTsKKworCXZvaWQJCQkJCQkJCQlBZGRJdGVtKElGWF9FZGl0X1VuZG9JdGVtKiBwSXRlbSk7CisKKwlGWF9CT09MCQkJCQkJCQkJQ2FuVW5kbygpIGNvbnN0OworCUZYX0JPT0wJCQkJCQkJCQlDYW5SZWRvKCkgY29uc3Q7CisJRlhfQk9PTAkJCQkJCQkJCUlzTW9kaWZpZWQoKSBjb25zdDsKKwlGWF9CT09MCQkJCQkJCQkJSXNXb3JraW5nKCkgY29uc3Q7CisKKwl2b2lkCQkJCQkJCQkJUmVzZXQoKTsKKworCUlGWF9FZGl0X1VuZG9JdGVtKgkJCQkJCUdldEl0ZW0oRlhfSU5UMzIgbkluZGV4KTsKKwlGWF9JTlQzMgkJCQkJCQkJR2V0SXRlbUNvdW50KCl7cmV0dXJuIG1fVW5kb0l0ZW1TdGFjay5HZXRTaXplKCk7fQorCUZYX0lOVDMyCQkJCQkJCQlHZXRDdXJVbmRvUG9zKCl7cmV0dXJuIG1fbkN1clVuZG9Qb3M7fQorCitwcml2YXRlOgorCXZvaWQJCQkJCQkJCQlTZXRCdWZTaXplKEZYX0lOVDMyIG5TaXplKXttX25CdWZTaXplID0gblNpemU7fQorCUZYX0lOVDMyCQkJCQkJCQlHZXRCdWZTaXplKCl7cmV0dXJuIG1fbkJ1ZlNpemU7fQorCisJdm9pZAkJCQkJCQkJCVJlbW92ZUhlYWRzKCk7CisJdm9pZAkJCQkJCQkJCVJlbW92ZVRhaWxzKCk7CisKK3ByaXZhdGU6CisJQ0ZYX0FycmF5VGVtcGxhdGU8SUZYX0VkaXRfVW5kb0l0ZW0qPgltX1VuZG9JdGVtU3RhY2s7CisJCisJRlhfSU5UMzIJCQkJCQkJCW1fbkN1clVuZG9Qb3M7CisJRlhfSU5UMzIJCQkJCQkJCW1fbkJ1ZlNpemU7CisJRlhfQk9PTAkJCQkJCQkJCW1fYk1vZGlmaWVkOyAKKwlGWF9CT09MCQkJCQkJCQkJbV9iVmlyZ2luOworCUZYX0JPT0wJCQkJCQkJCQltX2JXb3JraW5nOworfTsKKworY2xhc3MgQ0ZYX0VkaXRfVW5kb0l0ZW0gOiBwdWJsaWMgSUZYX0VkaXRfVW5kb0l0ZW0KK3sKK3B1YmxpYzoKKwlDRlhfRWRpdF9VbmRvSXRlbSgpIDogbV9iRmlyc3QoVFJVRSksIG1fYkxhc3QoVFJVRSkge30KKwl2aXJ0dWFsIH5DRlhfRWRpdF9VbmRvSXRlbSgpe30KKworCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCQkJCUdldFVuZG9UaXRsZSgpIHtyZXR1cm4gTCIiO30KKwl2aXJ0dWFsIHZvaWQJCQkJCQkJUmVsZWFzZSgpe2RlbGV0ZSB0aGlzO30KKworcHVibGljOgorCXZvaWQJCQkJCQkJCQlTZXRGaXJzdChGWF9CT09MIGJGaXJzdCl7bV9iRmlyc3QgPSBiRmlyc3Q7fQorCUZYX0JPT0wJCQkJCQkJCQlJc0ZpcnN0KCl7cmV0dXJuIG1fYkZpcnN0O30KKwl2b2lkCQkJCQkJCQkJU2V0TGFzdChGWF9CT09MIGJMYXN0KXttX2JMYXN0ID0gYkxhc3Q7fQorCUZYX0JPT0wJCQkJCQkJCQlJc0xhc3QoKXtyZXR1cm4gbV9iTGFzdDt9CisKK3ByaXZhdGU6CisJRlhfQk9PTAkJCQkJCQkJCW1fYkZpcnN0OworCUZYX0JPT0wJCQkJCQkJCQltX2JMYXN0OworfTsKKworY2xhc3MgQ0ZYX0VkaXRfR3JvdXBVbmRvSXRlbSA6IHB1YmxpYyBJRlhfRWRpdF9VbmRvSXRlbQoreworcHVibGljOgorCUNGWF9FZGl0X0dyb3VwVW5kb0l0ZW0oY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNUaXRsZSk7CisJdmlydHVhbCB+Q0ZYX0VkaXRfR3JvdXBVbmRvSXRlbSgpOworCisJdm9pZAkJCQkJCQkJCUFkZFVuZG9JdGVtKENGWF9FZGl0X1VuZG9JdGVtKiBwVW5kb0l0ZW0pOworCXZvaWQJCQkJCQkJCQlVcGRhdGVJdGVtcygpOworCitwdWJsaWM6CisJdmlydHVhbCB2b2lkCQkJCQkJCVVuZG8oKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJUmVkbygpOworCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCQkJCUdldFVuZG9UaXRsZSgpOworCXZpcnR1YWwgdm9pZAkJCQkJCQlSZWxlYXNlKCk7CisKK3ByaXZhdGU6CisJQ0ZYX1dpZGVTdHJpbmcJCQkJCQkJbV9zVGl0bGU7CisJQ0ZYX0FycmF5VGVtcGxhdGU8Q0ZYX0VkaXRfVW5kb0l0ZW0qPgltX0l0ZW1zOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDRlhfRWRpdF9VbmRvSXRlbSBkZXJpdmVkIGNsYXNzZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitjbGFzcyBDRlhFVV9JbnNlcnRXb3JkIDogcHVibGljIENGWF9FZGl0X1VuZG9JdGVtCit7CitwdWJsaWM6CisJQ0ZYRVVfSW5zZXJ0V29yZChDRlhfRWRpdCAqIHBFZGl0LCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwT2xkUGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3BOZXdQbGFjZSwKKwkJRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBjaGFyc2V0LCBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMpOworCXZpcnR1YWwgfkNGWEVVX0luc2VydFdvcmQoKTsKKworCXZvaWQJCQkJCQlSZWRvKCk7CisJdm9pZAkJCQkJCVVuZG8oKTsKKworcHJpdmF0ZToKKwlDRlhfRWRpdCoJCQkJCW1fcEVkaXQ7CisKKwlDUFZUX1dvcmRQbGFjZQkJCQltX3dwT2xkOworCUNQVlRfV29yZFBsYWNlCQkJCW1fd3BOZXc7CisJRlhfV09SRAkJCQkJCW1fV29yZDsKKwlGWF9JTlQzMgkJCQkJbV9uQ2hhcnNldDsKKwlDUFZUX1dvcmRQcm9wcwkJCQltX1dvcmRQcm9wczsKK307CisKK2NsYXNzIENGWEVVX0luc2VydFJldHVybiA6IHB1YmxpYyBDRlhfRWRpdF9VbmRvSXRlbQoreworcHVibGljOgorCUNGWEVVX0luc2VydFJldHVybihDRlhfRWRpdCAqIHBFZGl0LCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwT2xkUGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3BOZXdQbGFjZSwKKwkJCQkJCQkgY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzKTsKKwl2aXJ0dWFsIH5DRlhFVV9JbnNlcnRSZXR1cm4oKTsKKworCXZvaWQJCQkJCQlSZWRvKCk7CisJdm9pZAkJCQkJCVVuZG8oKTsKKworcHJpdmF0ZToKKwlDRlhfRWRpdCAqCQkJCQltX3BFZGl0OworCisJQ1BWVF9Xb3JkUGxhY2UJCQkJbV93cE9sZDsKKwlDUFZUX1dvcmRQbGFjZQkJCQltX3dwTmV3OworCUNQVlRfU2VjUHJvcHMJCQkJbV9TZWNQcm9wczsKKwlDUFZUX1dvcmRQcm9wcwkJCQltX1dvcmRQcm9wczsKK307CisKK2NsYXNzIENGWEVVX0JhY2tzcGFjZSA6IHB1YmxpYyBDRlhfRWRpdF9VbmRvSXRlbQoreworcHVibGljOgorCUNGWEVVX0JhY2tzcGFjZShDRlhfRWRpdCAqIHBFZGl0LCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwT2xkUGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3BOZXdQbGFjZSwKKwkJCQkJCUZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCwKKwkJCQkJCWNvbnN0IENQVlRfU2VjUHJvcHMgJiBTZWNQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgJiBXb3JkUHJvcHMpOworCXZpcnR1YWwgfkNGWEVVX0JhY2tzcGFjZSgpOworCisJdm9pZAkJCQkJCVJlZG8oKTsKKwl2b2lkCQkJCQkJVW5kbygpOworCitwcml2YXRlOgorCUNGWF9FZGl0ICoJCQkJCW1fcEVkaXQ7CisKKwlDUFZUX1dvcmRQbGFjZQkJCQltX3dwT2xkOworCUNQVlRfV29yZFBsYWNlCQkJCW1fd3BOZXc7CisJRlhfV09SRAkJCQkJCW1fV29yZDsKKwlGWF9JTlQzMgkJCQkJbV9uQ2hhcnNldDsKKwlDUFZUX1NlY1Byb3BzCQkJCW1fU2VjUHJvcHM7CisJQ1BWVF9Xb3JkUHJvcHMJCQkJbV9Xb3JkUHJvcHM7Cit9OworCitjbGFzcyBDRlhFVV9EZWxldGUgOiBwdWJsaWMgQ0ZYX0VkaXRfVW5kb0l0ZW0KK3sKK3B1YmxpYzoKKwlDRlhFVV9EZWxldGUoQ0ZYX0VkaXQgKiBwRWRpdCwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cE9sZFBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwTmV3UGxhY2UsCisJCQkJCQlGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIGNoYXJzZXQsCisJCQkJCQljb25zdCBDUFZUX1NlY1Byb3BzICYgU2VjUHJvcHMsIGNvbnN0IENQVlRfV29yZFByb3BzICYgV29yZFByb3BzLCBGWF9CT09MIGJTZWNFbmQpOworCXZpcnR1YWwgfkNGWEVVX0RlbGV0ZSgpOworCisJdm9pZAkJCQkJCVJlZG8oKTsKKwl2b2lkCQkJCQkJVW5kbygpOworCitwcml2YXRlOgorCUNGWF9FZGl0ICoJCQkJCW1fcEVkaXQ7CisKKwlDUFZUX1dvcmRQbGFjZQkJCQltX3dwT2xkOworCUNQVlRfV29yZFBsYWNlCQkJCW1fd3BOZXc7CisJRlhfV09SRAkJCQkJCW1fV29yZDsKKwlGWF9JTlQzMgkJCQkJbV9uQ2hhcnNldDsKKwlDUFZUX1NlY1Byb3BzCQkJCW1fU2VjUHJvcHM7CisJQ1BWVF9Xb3JkUHJvcHMJCQkJbV9Xb3JkUHJvcHM7CisJRlhfQk9PTAkJCQkJCW1fYlNlY0VuZDsKK307CisKK2NsYXNzIENGWEVVX0NsZWFyIDogcHVibGljIENGWF9FZGl0X1VuZG9JdGVtCit7CitwdWJsaWM6CisJQ0ZYRVVfQ2xlYXIoQ0ZYX0VkaXQgKiBwRWRpdCwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiB3clNlbCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJiBzd1RleHQpOworCXZpcnR1YWwgfkNGWEVVX0NsZWFyKCk7CisKKwl2b2lkCQkJCQkJUmVkbygpOworCXZvaWQJCQkJCQlVbmRvKCk7CisKK3ByaXZhdGU6CisJQ0ZYX0VkaXQqCQkJCQltX3BFZGl0OworCisJQ1BWVF9Xb3JkUmFuZ2UJCQkJbV93clNlbDsKKwlDRlhfV2lkZVN0cmluZwkJCQltX3N3VGV4dDsKK307CisKK2NsYXNzIENGWEVVX0NsZWFyUmljaCA6IHB1YmxpYyBDRlhfRWRpdF9VbmRvSXRlbQoreworcHVibGljOgorCUNGWEVVX0NsZWFyUmljaChDRlhfRWRpdCAqIHBFZGl0LCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwT2xkUGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3BOZXdQbGFjZSwKKwkJCQkJCWNvbnN0IENQVlRfV29yZFJhbmdlICYgd3JTZWwsCisJCQkJCSAgIEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCwKKwkJCQkJICAgY29uc3QgQ1BWVF9TZWNQcm9wcyAmIFNlY1Byb3BzLCBjb25zdCBDUFZUX1dvcmRQcm9wcyAmIFdvcmRQcm9wcyk7CisJdmlydHVhbCB+Q0ZYRVVfQ2xlYXJSaWNoKCk7CisKKwl2b2lkCQkJCQkJUmVkbygpOworCXZvaWQJCQkJCQlVbmRvKCk7CisKK3ByaXZhdGU6CisJQ0ZYX0VkaXQgKgkJCQkJbV9wRWRpdDsKKworCUNQVlRfV29yZFBsYWNlCQkJCW1fd3BPbGQ7CisJQ1BWVF9Xb3JkUGxhY2UJCQkJbV93cE5ldzsKKwlDUFZUX1dvcmRSYW5nZQkJCQltX3dyU2VsOworCUZYX1dPUkQJCQkJCQltX1dvcmQ7CisJRlhfSU5UMzIJCQkJCW1fbkNoYXJzZXQ7CisJQ1BWVF9TZWNQcm9wcwkJCQltX1NlY1Byb3BzOworCUNQVlRfV29yZFByb3BzCQkJCW1fV29yZFByb3BzOworfTsKKworY2xhc3MgQ0ZYRVVfSW5zZXJ0VGV4dCA6IHB1YmxpYyBDRlhfRWRpdF9VbmRvSXRlbQoreworcHVibGljOgorCUNGWEVVX0luc2VydFRleHQoQ0ZYX0VkaXQgKiBwRWRpdCwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cE9sZFBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwTmV3UGxhY2UsCisJCQkJCQkgICBjb25zdCBDRlhfV2lkZVN0cmluZyAmIHN3VGV4dCwgRlhfSU5UMzIgY2hhcnNldCwKKwkJCQkJCSAgIGNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMsIGNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcyk7CisJdmlydHVhbCB+Q0ZYRVVfSW5zZXJ0VGV4dCgpOworCisJdm9pZAkJCQkJCVJlZG8oKTsKKwl2b2lkCQkJCQkJVW5kbygpOworCitwcml2YXRlOgorCUNGWF9FZGl0ICoJCQkJCW1fcEVkaXQ7CisKKwlDUFZUX1dvcmRQbGFjZQkJCQltX3dwT2xkOworCUNQVlRfV29yZFBsYWNlCQkJCW1fd3BOZXc7CisJQ0ZYX1dpZGVTdHJpbmcJCQkJbV9zd1RleHQ7CisJRlhfSU5UMzIJCQkJCW1fbkNoYXJzZXQ7CisJQ1BWVF9TZWNQcm9wcwkJCQltX1NlY1Byb3BzOworCUNQVlRfV29yZFByb3BzCQkJCW1fV29yZFByb3BzOworfTsKKworY2xhc3MgQ0ZYRVVfU2V0U2VjUHJvcHMgOiBwdWJsaWMgQ0ZYX0VkaXRfVW5kb0l0ZW0KK3sKK3B1YmxpYzoKKwlDRlhFVV9TZXRTZWNQcm9wcyhDRlhfRWRpdCAqIHBFZGl0LCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBFRElUX1BST1BTX0UgZXAsIAorCQljb25zdCBDUFZUX1NlY1Byb3BzICYgb2xkc2VjcHJvcHMsIGNvbnN0IENQVlRfV29yZFByb3BzICYgb2xkd29yZHByb3BzLCAKKwkJY29uc3QgQ1BWVF9TZWNQcm9wcyAmIG5ld3NlY3Byb3BzLCBjb25zdCBDUFZUX1dvcmRQcm9wcyAmIG5ld3dvcmRwcm9wcywgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiByYW5nZSk7CisJdmlydHVhbCB+Q0ZYRVVfU2V0U2VjUHJvcHMoKTsKKworCXZvaWQJCQkJCQlSZWRvKCk7CisJdm9pZAkJCQkJCVVuZG8oKTsKKworcHJpdmF0ZToKKwlDRlhfRWRpdCAqCQkJCQltX3BFZGl0OworCUNQVlRfV29yZFBsYWNlCQkJCW1fd3BQbGFjZTsKKwlDUFZUX1dvcmRSYW5nZQkJCQltX3dyUGxhY2U7CisJRURJVF9QUk9QU19FCQkJCW1fZVByb3BzOworCisJQ1BWVF9TZWNQcm9wcwkJCQltX09sZFNlY1Byb3BzOworCUNQVlRfU2VjUHJvcHMJCQkJbV9OZXdTZWNQcm9wczsKKwlDUFZUX1dvcmRQcm9wcwkJCQltX09sZFdvcmRQcm9wczsKKwlDUFZUX1dvcmRQcm9wcwkJCQltX05ld1dvcmRQcm9wczsJCit9OworCitjbGFzcyBDRlhFVV9TZXRXb3JkUHJvcHMgOiBwdWJsaWMgQ0ZYX0VkaXRfVW5kb0l0ZW0KK3sKK3B1YmxpYzoKKwlDRlhFVV9TZXRXb3JkUHJvcHMoQ0ZYX0VkaXQgKiBwRWRpdCwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSwgRURJVF9QUk9QU19FIGVwLCAKKwkJY29uc3QgQ1BWVF9Xb3JkUHJvcHMgJiBvbGRwcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgJiBuZXdwcm9wcywgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiByYW5nZSk7CisJdmlydHVhbCB+Q0ZYRVVfU2V0V29yZFByb3BzKCk7CisKKwl2b2lkCQkJCQkJUmVkbygpOworCXZvaWQJCQkJCQlVbmRvKCk7CisKK3ByaXZhdGU6CisJQ0ZYX0VkaXQgKgkJCQkJbV9wRWRpdDsKKwlDUFZUX1dvcmRQbGFjZQkJCQltX3dwUGxhY2U7CisJQ1BWVF9Xb3JkUmFuZ2UJCQkJbV93clBsYWNlOworCUVESVRfUFJPUFNfRQkJCQltX2VQcm9wczsKKwkKKwlDUFZUX1dvcmRQcm9wcwkJCQltX09sZFdvcmRQcm9wczsKKwlDUFZUX1dvcmRQcm9wcwkJCQltX05ld1dvcmRQcm9wczsJCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENGWF9FZGl0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworY2xhc3MgQ0ZYX0VkaXQgOiBwdWJsaWMgSUZYX0VkaXQKK3sKKwlmcmllbmQgY2xhc3MgQ0ZYX0VkaXRfSXRlcmF0b3I7CisJZnJpZW5kIGNsYXNzIENGWEVVX0luc2VydFdvcmQ7CisJZnJpZW5kIGNsYXNzIENGWEVVX0luc2VydFJldHVybjsKKwlmcmllbmQgY2xhc3MgQ0ZYRVVfQmFja3NwYWNlOworCWZyaWVuZCBjbGFzcyBDRlhFVV9EZWxldGU7CisJZnJpZW5kIGNsYXNzIENGWEVVX0NsZWFyOworCWZyaWVuZCBjbGFzcyBDRlhFVV9DbGVhclJpY2g7CisJZnJpZW5kIGNsYXNzIENGWEVVX1NldFNlY1Byb3BzOworCWZyaWVuZCBjbGFzcyBDRlhFVV9TZXRXb3JkUHJvcHM7CQorCWZyaWVuZCBjbGFzcyBDRlhFVV9JbnNlcnRUZXh0OworCitwdWJsaWM6CisJQ0ZYX0VkaXQoSVBERl9WYXJpYWJsZVRleHQgKiBwVlQpOworCXZpcnR1YWwgfkNGWF9FZGl0KCk7CisKKwl2b2lkCQkJCQkJCQkJU2V0Rm9udE1hcChJRlhfRWRpdF9Gb250TWFwICogcEZvbnRNYXApOwkKKwl2b2lkCQkJCQkJCQkJU2V0VlRQcm92aWRlcihJUERGX1ZhcmlhYmxlVGV4dF9Qcm92aWRlciogcFByb3ZpZGVyKTsKKwl2b2lkCQkJCQkJCQkJU2V0Tm90aWZ5KElGWF9FZGl0X05vdGlmeSAqIHBOb3RpZnkpOworCXZvaWQJCQkJCQkJCQlTZXRPcHJOb3RpZnkoSUZYX0VkaXRfT3ByTm90aWZ5KiBwT3ByTm90aWZ5KTsKKwlJRlhfRWRpdF9JdGVyYXRvcioJCQkJCQlHZXRJdGVyYXRvcigpOworCUlQREZfVmFyaWFibGVUZXh0ICoJCQkJCQlHZXRWYXJpYWJsZVRleHQoKTsKKwlJRlhfRWRpdF9Gb250TWFwKgkJCQkJCUdldEZvbnRNYXAoKTsKKworCXZvaWQJCQkJCQkJCQlJbml0aWFsaXplKCk7CisJdm9pZAkJCQkJCQkJCVNldFBsYXRlUmVjdChjb25zdCBDUERGX1JlY3QgJiByZWN0LCBGWF9CT09MIGJQYWludCA9IFRSVUUpOworCXZvaWQJCQkJCQkJCQlTZXRTY3JvbGxQb3MoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KTsKKworCXZvaWQJCQkJCQkJCQlTZXRBbGlnbm1lbnRIKEZYX0lOVDMyIG5Gb3JtYXQgPSAwLCBGWF9CT09MIGJQYWludCA9IFRSVUUpOworCXZvaWQJCQkJCQkJCQlTZXRBbGlnbm1lbnRWKEZYX0lOVDMyIG5Gb3JtYXQgPSAwLCBGWF9CT09MIGJQYWludCA9IFRSVUUpOworCXZvaWQJCQkJCQkJCQlTZXRQYXNzd29yZENoYXIoRlhfV09SRCB3U3ViV29yZCA9ICcqJywgRlhfQk9PTCBiUGFpbnQgPSBUUlVFKTsKKwl2b2lkCQkJCQkJCQkJU2V0TGltaXRDaGFyKEZYX0lOVDMyIG5MaW1pdENoYXIgPSAwLCBGWF9CT09MIGJQYWludCA9IFRSVUUpOworCXZvaWQJCQkJCQkJCQlTZXRDaGFyQXJyYXkoRlhfSU5UMzIgbkNoYXJBcnJheSA9IDAsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSk7CisJdm9pZAkJCQkJCQkJCVNldENoYXJTcGFjZShGWF9GTE9BVCBmQ2hhclNwYWNlID0gMC4wZiwgRlhfQk9PTCBiUGFpbnQgPSBUUlVFKTsKKwl2b2lkCQkJCQkJCQkJU2V0SG9yelNjYWxlKEZYX0lOVDMyIG5Ib3J6U2NhbGUgPSAxMDAsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSk7CisJdm9pZAkJCQkJCQkJCVNldExpbmVMZWFkaW5nKEZYX0ZMT0FUIGZMaW5lTGVhZGluZywgRlhfQk9PTCBiUGFpbnQgPSBUUlVFKTsKKwl2b2lkCQkJCQkJCQkJU2V0TXVsdGlMaW5lKEZYX0JPT0wgYk11bHRpTGluZSA9IFRSVUUsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSk7CisJdm9pZAkJCQkJCQkJCVNldEF1dG9SZXR1cm4oRlhfQk9PTCBiQXV0byA9IFRSVUUsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSk7CisJdm9pZAkJCQkJCQkJCVNldEF1dG9Gb250U2l6ZShGWF9CT09MIGJBdXRvID0gVFJVRSwgRlhfQk9PTCBiUGFpbnQgPSBUUlVFKTsJCisJdm9pZAkJCQkJCQkJCVNldEF1dG9TY3JvbGwoRlhfQk9PTCBiQXV0byA9IFRSVUUsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSk7CQorCXZvaWQJCQkJCQkJCQlTZXRGb250U2l6ZShGWF9GTE9BVCBmRm9udFNpemUsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSk7CisJdm9pZAkJCQkJCQkJCVNldFRleHRPdmVyZmxvdyhGWF9CT09MIGJBbGxvd2VkID0gRkFMU0UsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSk7CisKKwlGWF9CT09MCQkJCQkJCQkJSXNSaWNoVGV4dCgpIGNvbnN0OworCXZvaWQJCQkJCQkJCQlTZXRSaWNoVGV4dChGWF9CT09MIGJSaWNoVGV4dCA9IFRSVUUsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSk7CisJRlhfQk9PTAkJCQkJCQkJCVNldFJpY2hGb250U2l6ZShGWF9GTE9BVCBmRm9udFNpemUpOwkKKwlGWF9CT09MCQkJCQkJCQkJU2V0UmljaEZvbnRJbmRleChGWF9JTlQzMiBuRm9udEluZGV4KTsKKwlGWF9CT09MCQkJCQkJCQkJU2V0UmljaFRleHRDb2xvcihGWF9DT0xPUlJFRiBkd0NvbG9yKTsKKwlGWF9CT09MCQkJCQkJCQkJU2V0UmljaFRleHRTY3JpcHQoRlhfSU5UMzIgblNjcmlwdFR5cGUpOworCUZYX0JPT0wJCQkJCQkJCQlTZXRSaWNoVGV4dEJvbGQoRlhfQk9PTCBiQm9sZCA9IFRSVUUpOwkKKwlGWF9CT09MCQkJCQkJCQkJU2V0UmljaFRleHRJdGFsaWMoRlhfQk9PTCBiSXRhbGljID0gVFJVRSk7CisJRlhfQk9PTAkJCQkJCQkJCVNldFJpY2hUZXh0VW5kZXJsaW5lKEZYX0JPT0wgYlVuZGVybGluZSA9IFRSVUUpOworCUZYX0JPT0wJCQkJCQkJCQlTZXRSaWNoVGV4dENyb3Nzb3V0KEZYX0JPT0wgYkNyb3Nzb3V0ID0gVFJVRSk7CisJRlhfQk9PTAkJCQkJCQkJCVNldFJpY2hUZXh0Q2hhclNwYWNlKEZYX0ZMT0FUIGZDaGFyU3BhY2UpOworCUZYX0JPT0wJCQkJCQkJCQlTZXRSaWNoVGV4dEhvcnpTY2FsZShGWF9JTlQzMiBuSG9yelNjYWxlID0gMTAwKTsKKwlGWF9CT09MCQkJCQkJCQkJU2V0UmljaFRleHRMaW5lTGVhZGluZyhGWF9GTE9BVCBmTGluZUxlYWRpbmcpOworCUZYX0JPT0wJCQkJCQkJCQlTZXRSaWNoVGV4dExpbmVJbmRlbnQoRlhfRkxPQVQgZkxpbmVJbmRlbnQpOworCUZYX0JPT0wJCQkJCQkJCQlTZXRSaWNoVGV4dEFsaWdubWVudChGWF9JTlQzMiBuQWxpZ25tZW50KTsKKworCXZvaWQJCQkJCQkJCQlPbk1vdXNlRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCk7CisJdm9pZAkJCQkJCQkJCU9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCxGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKTsKKwl2b2lkCQkJCQkJCQkJT25WS19VUChGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKTsKKwl2b2lkCQkJCQkJCQkJT25WS19ET1dOKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpOworCXZvaWQJCQkJCQkJCQlPblZLX0xFRlQoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCk7CisJdm9pZAkJCQkJCQkJCU9uVktfUklHSFQoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCk7CisJdm9pZAkJCQkJCQkJCU9uVktfSE9NRShGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKTsKKwl2b2lkCQkJCQkJCQkJT25WS19FTkQoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCk7CisKKwl2b2lkCQkJCQkJCQkJU2V0VGV4dChGWF9MUENXU1RSIHRleHQsRlhfSU5UMzIgY2hhcnNldCA9IERFRkFVTFRfQ0hBUlNFVCwKKwkJCQkJCQkJCQkJCQljb25zdCBDUFZUX1NlY1Byb3BzICogcFNlY1Byb3BzID0gTlVMTCxjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMgPSBOVUxMKTsJCisJRlhfQk9PTAkJCQkJCQkJCUluc2VydFdvcmQoRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBjaGFyc2V0ID0gREVGQVVMVF9DSEFSU0VULCBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMgPSBOVUxMKTsKKwlGWF9CT09MCQkJCQkJCQkJSW5zZXJ0UmV0dXJuKGNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMgPSBOVUxMLGNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcyA9IE5VTEwpOworCUZYX0JPT0wJCQkJCQkJCQlCYWNrc3BhY2UoKTsKKwlGWF9CT09MCQkJCQkJCQkJRGVsZXRlKCk7CQkKKwlGWF9CT09MCQkJCQkJCQkJQ2xlYXIoKTsKKwlGWF9CT09MCQkJCQkJCQkJRW1wdHkoKTsKKwlGWF9CT09MCQkJCQkJCQkJSW5zZXJ0VGV4dChGWF9MUENXU1RSIHRleHQsIEZYX0lOVDMyIGNoYXJzZXQgPSBERUZBVUxUX0NIQVJTRVQsCisJCQkJCQkJCQkJCQkJY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcyA9IE5VTEwsY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzID0gTlVMTCk7CisJRlhfQk9PTAkJCQkJCQkJCVJlZG8oKTsKKwlGWF9CT09MCQkJCQkJCQkJVW5kbygpOwkKKwlDUFZUX1dvcmRQbGFjZQkJCQkJCQlEb0luc2VydFRleHQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlLCBGWF9MUENXU1RSIHRleHQsIEZYX0lOVDMyIGNoYXJzZXQsIAorCQkJCQkJCQkJCQkJY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzKTsKKwlGWF9JTlQzMgkJCQkJCQkJR2V0Q2hhclNldEZyb21Vbmljb2RlKEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgbk9sZENoYXJzZXQpOworCisJRlhfSU5UMzIJCQkJCQkJCVdvcmRQbGFjZVRvV29yZEluZGV4KGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0OworCUNQVlRfV29yZFBsYWNlCQkJCQkJCVdvcmRJbmRleFRvV29yZFBsYWNlKEZYX0lOVDMyIGluZGV4KSBjb25zdDsJCisKKwlDUFZUX1dvcmRQbGFjZQkJCQkJCQlHZXRMaW5lQmVnaW5QbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdDsKKwlDUFZUX1dvcmRQbGFjZQkJCQkJCQlHZXRMaW5lRW5kUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3Q7CisJQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJR2V0U2VjdGlvbkJlZ2luUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3Q7CisJQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJR2V0U2VjdGlvbkVuZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0OworCUNQVlRfV29yZFBsYWNlCQkJCQkJCVNlYXJjaFdvcmRQbGFjZShjb25zdCBDUERGX1BvaW50JiBwb2ludCkgY29uc3Q7CisKKwlGWF9JTlQzMgkJCQkJCQkJR2V0Q2FyZXQoKSBjb25zdDsKKwlDUFZUX1dvcmRQbGFjZQkJCQkJCQlHZXRDYXJldFdvcmRQbGFjZSgpIGNvbnN0OworCUNGWF9XaWRlU3RyaW5nCQkJCQkJCUdldFNlbFRleHQoKSBjb25zdDsKKwlDRlhfV2lkZVN0cmluZwkJCQkJCQlHZXRUZXh0KCkgY29uc3Q7CisJRlhfRkxPQVQJCQkJCQkJCUdldEZvbnRTaXplKCkgY29uc3Q7CisJRlhfV09SRAkJCQkJCQkJCUdldFBhc3N3b3JkQ2hhcigpIGNvbnN0OworCUNQREZfUG9pbnQJCQkJCQkJCUdldFNjcm9sbFBvcygpIGNvbnN0OworCUZYX0lOVDMyCQkJCQkJCQlHZXRDaGFyQXJyYXkoKSBjb25zdDsKKwlDUERGX1JlY3QJCQkJCQkJCUdldFBsYXRlUmVjdCgpIGNvbnN0OworCUNQREZfUmVjdAkJCQkJCQkJR2V0Q29udGVudFJlY3QoKSBjb25zdDsKKwlDRlhfV2lkZVN0cmluZwkJCQkJCQlHZXRSYW5nZVRleHQoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiByYW5nZSkgY29uc3Q7CisJRlhfSU5UMzIJCQkJCQkJCUdldEhvcnpTY2FsZSgpIGNvbnN0OworCUZYX0ZMT0FUCQkJCQkJCQlHZXRDaGFyU3BhY2UoKSBjb25zdDsKKwlGWF9JTlQzMgkJCQkJCQkJR2V0VG90YWxXb3JkcygpIGNvbnN0OworCUZYX0lOVDMyCQkJCQkJCQlHZXRUb3RhbExpbmVzKCkgY29uc3Q7CisKKwl2b2lkCQkJCQkJCQkJU2V0U2VsKEZYX0lOVDMyIG5TdGFydENoYXIsRlhfSU5UMzIgbkVuZENoYXIpOworCXZvaWQJCQkJCQkJCQlHZXRTZWwoRlhfSU5UMzIgJiBuU3RhcnRDaGFyLCBGWF9JTlQzMiAmIG5FbmRDaGFyKSBjb25zdDsKKworcHJpdmF0ZToKKwl2b2lkCQkJCQkJCQkJU2VsZWN0QWxsKCk7CisJdm9pZAkJCQkJCQkJCVNlbGVjdE5vbmUoKTsKKwl2b2lkCQkJCQkJCQkJU2V0U2VsKGNvbnN0IENQVlRfV29yZFBsYWNlICYgYmVnaW4sY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBlbmQpOworCUZYX0JPT0wJCQkJCQkJCQlJc1NlbGVjdGVkKCkgY29uc3Q7CisKKwl2b2lkCQkJCQkJCQkJUmVhcnJhbmdlQWxsKCk7CisJdm9pZAkJCQkJCQkJCVJlYXJyYW5nZVBhcnQoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiByYW5nZSk7CisJdm9pZAkJCQkJCQkJCVBhaW50KCk7CisJdm9pZAkJCQkJCQkJCVNjcm9sbFRvQ2FyZXQoKTsKKwl2b2lkCQkJCQkJCQkJU2V0U2Nyb2xsSW5mbygpOworCXZvaWQJCQkJCQkJCQlTZXRTY3JvbGxQb3NYKEZYX0ZMT0FUIGZ4KTsKKwl2b2lkCQkJCQkJCQkJU2V0U2Nyb2xsUG9zWShGWF9GTE9BVCBmeSk7CisJdm9pZAkJCQkJCQkJCVNldFNjcm9sbExpbWl0KCk7CisJdm9pZAkJCQkJCQkJCVNldENvbnRlbnRDaGFuZ2VkKCk7CisJdm9pZAkJCQkJCQkJCUVuYWJsZU5vdGlmeShGWF9CT09MIGJOb3RpZnkpOworCisJdm9pZAkJCQkJCQkJCVNldFRleHQoRlhfTFBDV1NUUiB0ZXh0LEZYX0lOVDMyIGNoYXJzZXQsCisJCQkJCQkJCQkJCQkJY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcyxjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMsRlhfQk9PTCBiQWRkVW5kbywgRlhfQk9PTCBiUGFpbnQpOwkKKwlGWF9CT09MCQkJCQkJCQkJSW5zZXJ0V29yZChGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIGNoYXJzZXQsIGNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcyxGWF9CT09MIGJBZGRVbmRvLCBGWF9CT09MIGJQYWludCk7CisJRlhfQk9PTAkJCQkJCQkJCUluc2VydFJldHVybihjb25zdCBDUFZUX1NlY1Byb3BzICogcFNlY1Byb3BzLGNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcyxGWF9CT09MIGJBZGRVbmRvLCBGWF9CT09MIGJQYWludCk7CisJRlhfQk9PTAkJCQkJCQkJCUJhY2tzcGFjZShGWF9CT09MIGJBZGRVbmRvLCBGWF9CT09MIGJQYWludCk7CisJRlhfQk9PTAkJCQkJCQkJCURlbGV0ZShGWF9CT09MIGJBZGRVbmRvLCBGWF9CT09MIGJQYWludCk7CQkKKwlGWF9CT09MCQkJCQkJCQkJQ2xlYXIoRlhfQk9PTCBiQWRkVW5kbywgRlhfQk9PTCBiUGFpbnQpOworCUZYX0JPT0wJCQkJCQkJCQlJbnNlcnRUZXh0KEZYX0xQQ1dTVFIgdGV4dCwgRlhfSU5UMzIgY2hhcnNldCwKKwkJCQkJCQkJCQkJCWNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMsY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzLEZYX0JPT0wgYkFkZFVuZG8sIEZYX0JPT0wgYlBhaW50KTsKKwlGWF9CT09MCQkJCQkJCQkJU2V0UmljaFRleHRQcm9wcyhFRElUX1BST1BTX0UgZVByb3BzLAorCQkJCQkJCQkJCQkJY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzKTsKKwlGWF9CT09MCQkJCQkJCQkJU2V0U2VjUHJvcHMoRURJVF9QUk9QU19FIGVQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSwgCisJCQkJCQkJCQkJCQljb25zdCBDUFZUX1NlY1Byb3BzICogcFNlY1Byb3BzLCBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMsIGNvbnN0IENQVlRfV29yZFJhbmdlICYgd3IsIEZYX0JPT0wgYkFkZFVuZG8pOworCUZYX0JPT0wJCQkJCQkJCQlTZXRXb3JkUHJvcHMoRURJVF9QUk9QU19FIGVQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSwgCisJCQkJCQkJCQkJCQljb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMsIGNvbnN0IENQVlRfV29yZFJhbmdlICYgd3IsIEZYX0JPT0wgYkFkZFVuZG8pOworCXZvaWQJCQkJCQkJCQlQYWludFNldFByb3BzKEVESVRfUFJPUFNfRSBlUHJvcHMsIGNvbnN0IENQVlRfV29yZFJhbmdlICYgd3IpOworCXZvaWQJCQkJCQkJCQlQYWludEluc2VydFRleHQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cE9sZCwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cE5ldyk7CisKKwlpbmxpbmUgQ1BERl9Qb2ludAkJCQkJCVZUVG9FZGl0KGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3Q7CisJaW5saW5lIENQREZfUG9pbnQJCQkJCQlFZGl0VG9WVChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpIGNvbnN0OworCWlubGluZSBDUERGX1JlY3QJCQkJCQlWVFRvRWRpdChjb25zdCBDUERGX1JlY3QgJiByZWN0KSBjb25zdDsKKwlpbmxpbmUgQ1BERl9SZWN0CQkJCQkJRWRpdFRvVlQoY29uc3QgQ1BERl9SZWN0ICYgcmVjdCkgY29uc3Q7CisKKwl2b2lkCQkJCQkJCQkJRW5hYmxlUmVmcmVzaChGWF9CT09MIGJSZWZyZXNoKTsKKwl2b2lkCQkJCQkJCQkJUmVmcmVzaChSRUZSRVNIX1BMQU5fRSBlUGxhbixjb25zdCBDUFZUX1dvcmRSYW5nZSAqIHBSYW5nZTEgPSBOVUxMLGNvbnN0IENQVlRfV29yZFJhbmdlICogcFJhbmdlMiA9IE5VTEwpOworCXZvaWQJCQkJCQkJCQlSZWZyZXNoUHVzaExpbmVSZWN0cyhjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHdyKTsKKwl2b2lkCQkJCQkJCQkJUmVmcmVzaFB1c2hSYW5kb21SZWN0cyhjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHdyKTsKKwl2b2lkCQkJCQkJCQkJUmVmcmVzaFdvcmRSYW5nZShjb25zdCBDUFZUX1dvcmRSYW5nZSYgd3IpOworCisJdm9pZAkJCQkJCQkJCVNldENhcmV0KEZYX0lOVDMyIG5Qb3MpOworCXZvaWQJCQkJCQkJCQlTZXRDYXJldChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKTsKKwl2b2lkCQkJCQkJCQkJU2V0Q2FyZXRJbmZvKCk7CisJdm9pZAkJCQkJCQkJCVNldENhcmV0T3JpZ2luKCk7CisJdm9pZAkJCQkJCQkJCVNldENhcmV0Q2hhbmdlKCk7CisKKwlDUFZUX1dvcmRSYW5nZQkJCQkJCQlHZXRXaG9sZVdvcmRSYW5nZSgpIGNvbnN0OworCUNQVlRfV29yZFJhbmdlCQkJCQkJCUdldFZpc2libGVXb3JkUmFuZ2UoKSBjb25zdDsKKwlDUFZUX1dvcmRSYW5nZQkJCQkJCQlHZXRMYXRpbldvcmRzUmFuZ2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3Q7CisJQ1BWVF9Xb3JkUmFuZ2UJCQkJCQkJQ29tYmluZVdvcmRSYW5nZShjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHdyMSwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiB3cjIpOworCUNQVlRfV29yZFJhbmdlCQkJCQkJCUdldFNlbGVjdFdvcmRSYW5nZSgpIGNvbnN0OworCisJdm9pZAkJCQkJCQkJCUVuYWJsZVVuZG8oRlhfQk9PTCBiVW5kbyk7CisJdm9pZAkJCQkJCQkJCUVuYWJsZU9wck5vdGlmeShGWF9CT09MIGJOb3RpZnkpOworCisJRlhfQk9PTAkJCQkJCQkJCUlzVGV4dEZ1bGwoKSBjb25zdDsKKwlGWF9CT09MCQkJCQkJCQkJSXNUZXh0T3ZlcmZsb3coKSBjb25zdDsKKwlGWF9CT09MCQkJCQkJCQkJQ2FuVW5kbygpIGNvbnN0OworCUZYX0JPT0wJCQkJCQkJCQlDYW5SZWRvKCkgY29uc3Q7CisJRlhfQk9PTAkJCQkJCQkJCUlzTW9kaWZpZWQoKSBjb25zdDsKKworCXZvaWQJCQkJCQkJCQlCZWdpbkdyb3VwVW5kbyhjb25zdCBDRlhfV2lkZVN0cmluZyYgc1RpdGxlKTsKKwl2b2lkCQkJCQkJCQkJRW5kR3JvdXBVbmRvKCk7CisJdm9pZAkJCQkJCQkJCUFkZEVkaXRVbmRvSXRlbShDRlhfRWRpdF9VbmRvSXRlbSogcEVkaXRVbmRvSXRlbSk7CisJdm9pZAkJCQkJCQkJCUFkZFVuZG9JdGVtKElGWF9FZGl0X1VuZG9JdGVtKiBwVW5kb0l0ZW0pOworCisJdm9pZAkJCQkJCQkJCVNldFBhZ2VJbmZvKGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSk7CisJQ1BWVF9Xb3JkUGxhY2UJCQkJCQkJU2VhcmNoUGFnZUVuZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlJiB3cFBhZ2VCZWdpbiwgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpIGNvbnN0OworCUZYX0ZMT0FUCQkJCQkJCQlHZXRMaW5lVG9wKGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSkgY29uc3Q7CisJRlhfRkxPQVQJCQkJCQkJCUdldExpbmVCb3R0b20oY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlKSBjb25zdDsKKworcHJpdmF0ZToJCisJSVBERl9WYXJpYWJsZVRleHQqCQkJCQkJbV9wVlQ7CisJSUZYX0VkaXRfTm90aWZ5KgkJCQkJCW1fcE5vdGlmeTsKKwlJRlhfRWRpdF9PcHJOb3RpZnkqCQkJCQkJbV9wT3ByTm90aWZ5OworCUNGWF9FZGl0X1Byb3ZpZGVyKgkJCQkJCW1fcFZUUHJvdmlkZTsKKworCUNQVlRfV29yZFBsYWNlCQkJCQkJCW1fd3BDYXJldDsKKwlDUFZUX1dvcmRQbGFjZQkJCQkJCQltX3dwT2xkQ2FyZXQ7CisJQ0ZYX0VkaXRfU2VsZWN0CQkJCQkJCW1fU2VsU3RhdGU7CisKKwlDUERGX1BvaW50CQkJCQkJCQltX3B0U2Nyb2xsUG9zOworCUNQREZfUG9pbnQJCQkJCQkJCW1fcHRSZWZyZXNoU2Nyb2xsUG9zOworCUZYX0JPT0wJCQkJCQkJCQltX2JFbmFibGVTY3JvbGw7CQorCUlGWF9FZGl0X0l0ZXJhdG9yICoJCQkJCQltX3BJdGVyYXRvcjsJCisJQ0ZYX0VkaXRfUmVmcmVzaAkJCQkJCW1fUmVmcmVzaDsKKwlDUERGX1BvaW50CQkJCQkJCQltX3B0Q2FyZXQ7CisJQ0ZYX0VkaXRfVW5kbwkJCQkJCQltX1VuZG87CisJRlhfSU5UMzIJCQkJCQkJCW1fbkFsaWdubWVudDsKKwlGWF9CT09MCQkJCQkJCQkJbV9iTm90aWZ5RmxhZzsKKwlGWF9CT09MCQkJCQkJCQkJbV9iVGV4dEZ1bGxGbGFnOworCUZYX0JPT0wJCQkJCQkJCQltX2JFbmFibGVPdmVyZmxvdzsKKwlGWF9CT09MCQkJCQkJCQkJbV9iRW5hYmxlUmVmcmVzaDsKKwlDUERGX1JlY3QJCQkJCQkJCW1fcmNPbGRDb250ZW50OworCUZYX0JPT0wJCQkJCQkJCQltX2JFbmFibGVVbmRvOworCUZYX0JPT0wJCQkJCQkJCQltX2JOb3RpZnk7CisJRlhfQk9PTAkJCQkJCQkJCW1fYk9wck5vdGlmeTsKKwlDRlhfRWRpdF9Hcm91cFVuZG9JdGVtKgkJCQkJbV9wR3JvdXBVbmRvSXRlbTsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZYX0VkaXRfSXRlcmF0b3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitjbGFzcyBDRlhfRWRpdF9JdGVyYXRvciA6IHB1YmxpYyBJRlhfRWRpdF9JdGVyYXRvcgoreworcHVibGljOgorCUNGWF9FZGl0X0l0ZXJhdG9yKENGWF9FZGl0ICogcEVkaXQsSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IgKiBwVlRJdGVyYXRvcik7CisJdmlydHVhbCB+Q0ZYX0VkaXRfSXRlcmF0b3IoKTsKKworCUZYX0JPT0wJCQkJCQkJCQlOZXh0V29yZCgpOworCUZYX0JPT0wJCQkJCQkJCQlOZXh0TGluZSgpOworCUZYX0JPT0wJCQkJCQkJCQlOZXh0U2VjdGlvbigpOworCUZYX0JPT0wJCQkJCQkJCQlQcmV2V29yZCgpOworCUZYX0JPT0wJCQkJCQkJCQlQcmV2TGluZSgpOworCUZYX0JPT0wJCQkJCQkJCQlQcmV2U2VjdGlvbigpOworCisJRlhfQk9PTAkJCQkJCQkJCUdldFdvcmQoQ1BWVF9Xb3JkICYgd29yZCkgY29uc3Q7CisJRlhfQk9PTAkJCQkJCQkJCUdldExpbmUoQ1BWVF9MaW5lICYgbGluZSkgY29uc3Q7CisJRlhfQk9PTAkJCQkJCQkJCUdldFNlY3Rpb24oQ1BWVF9TZWN0aW9uICYgc2VjdGlvbikgY29uc3Q7CisJdm9pZAkJCQkJCQkJCVNldEF0KEZYX0lOVDMyIG5Xb3JkSW5kZXgpOworCXZvaWQJCQkJCQkJCQlTZXRBdChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKTsKKwljb25zdCBDUFZUX1dvcmRQbGFjZSAmCQkJCQlHZXRBdCgpIGNvbnN0OworCUlGWF9FZGl0KgkJCQkJCQkJR2V0RWRpdCgpIGNvbnN0OworCitwcml2YXRlOgorCUNGWF9FZGl0ICoJCQkJCQkJCW1fcEVkaXQ7CisJSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IqCQkJCW1fcFZUSXRlcmF0b3I7Cit9OworCitjbGFzcyBDRlhfRWRpdF9Qcm92aWRlciA6IHB1YmxpYyBJUERGX1ZhcmlhYmxlVGV4dF9Qcm92aWRlcgoreworcHVibGljOgorCUNGWF9FZGl0X1Byb3ZpZGVyKElGWF9FZGl0X0ZvbnRNYXAqIHBGb250TWFwKTsKKwl2aXJ0dWFsIH5DRlhfRWRpdF9Qcm92aWRlcigpOworCisJSUZYX0VkaXRfRm9udE1hcCoJCQlHZXRGb250TWFwKCk7CisKKwlGWF9JTlQzMgkJCQkJR2V0Q2hhcldpZHRoKEZYX0lOVDMyIG5Gb250SW5kZXgsIEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgbldvcmRTdHlsZSk7CisJRlhfSU5UMzIJCQkJCUdldFR5cGVBc2NlbnQoRlhfSU5UMzIgbkZvbnRJbmRleCk7CisJRlhfSU5UMzIJCQkJCUdldFR5cGVEZXNjZW50KEZYX0lOVDMyIG5Gb250SW5kZXgpOworCUZYX0lOVDMyCQkJCQlHZXRXb3JkRm9udEluZGV4KEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCwgRlhfSU5UMzIgbkZvbnRJbmRleCk7CisJRlhfSU5UMzIJCQkJCUdldERlZmF1bHRGb250SW5kZXgoKTsKKwlGWF9CT09MCQkJCQkJSXNMYXRpbldvcmQoRlhfV09SRCB3b3JkKTsKKworcHJpdmF0ZToKKwlJRlhfRWRpdF9Gb250TWFwKgkJCW1fcEZvbnRNYXA7Cit9OworCisjZW5kaWYgLy9fRlhFVF9FRElUX0hfCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9meGVkaXQvZnhldF9saXN0LmggYi9mcGRmc2RrL2luY2x1ZGUvZnhlZGl0L2Z4ZXRfbGlzdC5oCmluZGV4IGQ3N2JlODYuLjExNTdiYmUgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9meGVkaXQvZnhldF9saXN0LmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2Z4ZWRpdC9meGV0X2xpc3QuaApAQCAtMSwzNjMgKzEsMzYzIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GWEVUX0xJU1RfSF8NCi0jZGVmaW5lIF9GWEVUX0xJU1RfSF8NCi0NCi0jaW5jbHVkZSAiZnhfZWRpdC5oIg0KLQ0KLWNsYXNzIElGWF9FZGl0Ow0KLQ0KLWNsYXNzIENMU1RfU2l6ZQ0KLXsNCi1wdWJsaWM6DQotCUNMU1RfU2l6ZSgpIDogeCgwLjBmKSwgeSgwLjBmKQ0KLQl7CQkNCi0JfQ0KLQ0KLQlDTFNUX1NpemUoRlhfRkxPQVQgeCxGWF9GTE9BVCB5KQ0KLQl7IA0KLQkJdGhpcy0+eCA9IHg7DQotCQl0aGlzLT55ID0geTsNCi0JfQ0KLQ0KLQl2b2lkIERlZmF1bHQoKQ0KLQl7DQotCQl4ID0gMC4wZjsNCi0JCXkgPSAwLjBmOw0KLQl9DQotDQotCUZYX0JPT0wgb3BlcmF0b3IgIT0gKGNvbnN0IENMU1RfU2l6ZSAmIHNpemUpIGNvbnN0DQotCXsNCi0JCXJldHVybiBGWFNZU19tZW1jbXAodGhpcywgJnNpemUsIHNpemVvZihDTFNUX1NpemUpKSAhPSAwOw0KLQl9DQotDQotCUZYX0ZMT0FUIHgseTsNCi19Ow0KLQ0KLWNsYXNzIENMU1RfUmVjdCA6IHB1YmxpYyBDUERGX1JlY3QNCi17DQotcHVibGljOg0KLQlDTFNUX1JlY3QoKQ0KLQl7CQ0KLQkJbGVmdCA9IHRvcCA9IHJpZ2h0ID0gYm90dG9tID0gMC4wZjsNCi0JfQ0KLQ0KLQlDTFNUX1JlY3QoRlhfRkxPQVQgbGVmdCxGWF9GTE9BVCB0b3AsDQotCQkJCQkJRlhfRkxPQVQgcmlnaHQsRlhfRkxPQVQgYm90dG9tKQ0KLQl7IA0KLQkJdGhpcy0+bGVmdCA9IGxlZnQ7IA0KLQkJdGhpcy0+dG9wID0gdG9wOyANCi0JCXRoaXMtPnJpZ2h0ID0gcmlnaHQ7IA0KLQkJdGhpcy0+Ym90dG9tID0gYm90dG9tOyANCi0JfQ0KLQ0KLQlDTFNUX1JlY3QoY29uc3QgQ1BERl9SZWN0ICYgcmVjdCkNCi0JeyANCi0JCXRoaXMtPmxlZnQgPSByZWN0LmxlZnQ7IA0KLQkJdGhpcy0+dG9wID0gcmVjdC50b3A7IA0KLQkJdGhpcy0+cmlnaHQgPSByZWN0LnJpZ2h0OyANCi0JCXRoaXMtPmJvdHRvbSA9IHJlY3QuYm90dG9tOyANCi0JfQ0KLQ0KLQl2b2lkIERlZmF1bHQoKQ0KLQl7DQotCQlsZWZ0ID0gdG9wID0gcmlnaHQgPSBib3R0b20gPSAwLjBmOw0KLQl9DQotDQotCWNvbnN0IENMU1RfUmVjdCBvcGVyYXRvciA9IChjb25zdCBDUERGX1JlY3QgJiByZWN0KQ0KLQl7DQotCQl0aGlzLT5sZWZ0ID0gcmVjdC5sZWZ0Ow0KLQkJdGhpcy0+dG9wID0gcmVjdC50b3A7DQotCQl0aGlzLT5yaWdodCA9IHJlY3QucmlnaHQ7DQotCQl0aGlzLT5ib3R0b20gPSByZWN0LmJvdHRvbTsNCi0NCi0JCXJldHVybiAqdGhpczsNCi0JfQ0KLQ0KLQlGWF9CT09MIG9wZXJhdG9yID09IChjb25zdCBDTFNUX1JlY3QgJiByZWN0KSBjb25zdA0KLQl7DQotCQlyZXR1cm4gRlhTWVNfbWVtY21wKHRoaXMsICZyZWN0LCBzaXplb2YoQ0xTVF9SZWN0KSkgPT0gMDsNCi0JfQ0KLQ0KLQlGWF9CT09MIG9wZXJhdG9yICE9IChjb25zdCBDTFNUX1JlY3QgJiByZWN0KSBjb25zdA0KLQl7DQotCQlyZXR1cm4gRlhTWVNfbWVtY21wKHRoaXMsICZyZWN0LCBzaXplb2YoQ0xTVF9SZWN0KSkgIT0gMDsNCi0JfQ0KLQ0KLQlGWF9GTE9BVCBXaWR0aCgpIGNvbnN0DQotCXsNCi0JCXJldHVybiB0aGlzLT5yaWdodCAtIHRoaXMtPmxlZnQ7DQotCX0NCi0NCi0JRlhfRkxPQVQgSGVpZ2h0KCkgY29uc3QNCi0Jew0KLQkJaWYgKHRoaXMtPnRvcCA+IHRoaXMtPmJvdHRvbSkNCi0JCQlyZXR1cm4gdGhpcy0+dG9wIC0gdGhpcy0+Ym90dG9tOw0KLQkJZWxzZQ0KLQkJCXJldHVybiB0aGlzLT5ib3R0b20gLSB0aGlzLT50b3A7DQotCX0NCi0NCi0JQ1BERl9Qb2ludCBMZWZ0VG9wKCkgY29uc3QNCi0Jew0KLQkJcmV0dXJuIENQREZfUG9pbnQobGVmdCx0b3ApOw0KLQl9DQotDQotCUNQREZfUG9pbnQgUmlnaHRCb3R0b20oKSBjb25zdA0KLQl7DQotCQlyZXR1cm4gQ1BERl9Qb2ludChyaWdodCxib3R0b20pOw0KLQl9DQotDQotCWNvbnN0IENMU1RfUmVjdCBvcGVyYXRvciArPSAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSANCi0Jew0KLQkJdGhpcy0+bGVmdCArPSBwb2ludC54Ow0KLQkJdGhpcy0+cmlnaHQgKz0gcG9pbnQueDsNCi0JCXRoaXMtPnRvcCArPSBwb2ludC55Ow0KLQkJdGhpcy0+Ym90dG9tICs9IHBvaW50Lnk7DQotDQotCQlyZXR1cm4gKnRoaXM7DQotCX0NCi0NCi0JY29uc3QgQ0xTVF9SZWN0IG9wZXJhdG9yIC09IChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpIA0KLQl7DQotCQl0aGlzLT5sZWZ0IC09IHBvaW50Lng7DQotCQl0aGlzLT5yaWdodCAtPSBwb2ludC54Ow0KLQkJdGhpcy0+dG9wIC09IHBvaW50Lnk7DQotCQl0aGlzLT5ib3R0b20gLT0gcG9pbnQueTsNCi0NCi0JCXJldHVybiAqdGhpczsNCi0JfQ0KLQ0KLQlDTFNUX1JlY3Qgb3BlcmF0b3IgKyAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdA0KLQl7DQotCQlyZXR1cm4gQ0xTVF9SZWN0KGxlZnQgKyBwb2ludC54LA0KLQkJCQkJdG9wICsgcG9pbnQueSwNCi0JCQkJCXJpZ2h0ICsgcG9pbnQueCwNCi0JCQkJCWJvdHRvbSArIHBvaW50LnkpOw0KLQl9DQotDQotCUNMU1RfUmVjdCBvcGVyYXRvciAtIChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpIGNvbnN0DQotCXsNCi0JCXJldHVybiBDTFNUX1JlY3QobGVmdCAtIHBvaW50LngsDQotCQkJCQl0b3AgLSBwb2ludC55LA0KLQkJCQkJcmlnaHQgLSBwb2ludC54LA0KLQkJCQkJYm90dG9tIC0gcG9pbnQueSk7DQotCX0NCi19Ow0KLQ0KLWNsYXNzIENGWF9MaXN0SXRlbQ0KLXsNCi1wdWJsaWM6DQotCUNGWF9MaXN0SXRlbSgpOw0KLQl2aXJ0dWFsIH5DRlhfTGlzdEl0ZW0oKTsNCi0NCi0Jdm9pZAkJCQkJCQlTZXRGb250TWFwKElGWF9FZGl0X0ZvbnRNYXAgKiBwRm9udE1hcCk7DQotCUlGWF9FZGl0X0l0ZXJhdG9yKgkJCQlHZXRJdGVyYXRvcigpIGNvbnN0Ow0KLQlJRlhfRWRpdCoJCQkJCQlHZXRFZGl0KCkgY29uc3Q7DQotDQotcHVibGljOg0KLQl2b2lkCQkJCQkJCVNldFJlY3QoY29uc3QgQ0xTVF9SZWN0ICYgcmVjdCk7CQkNCi0Jdm9pZAkJCQkJCQlTZXRTZWxlY3QoRlhfQk9PTCBiU2VsZWN0ZWQpOwkNCi0Jdm9pZAkJCQkJCQlTZXRDYXJldChGWF9CT09MIGJDYXJldCk7DQotCXZvaWQJCQkJCQkJU2V0VGV4dChGWF9MUENXU1RSIHRleHQpOw0KLQl2b2lkCQkJCQkJCVNldEZvbnRTaXplKEZYX0ZMT0FUIGZGb250U2l6ZSk7DQotCUNGWF9XaWRlU3RyaW5nCQkJCQlHZXRUZXh0KCkgY29uc3Q7DQotDQotCUNMU1RfUmVjdAkJCQkJCUdldFJlY3QoKSBjb25zdDsNCi0JRlhfQk9PTAkJCQkJCQlJc1NlbGVjdGVkKCkgY29uc3Q7DQotCUZYX0JPT0wJCQkJCQkJSXNDYXJldCgpIGNvbnN0Ow0KLQlGWF9GTE9BVAkJCQkJCUdldEl0ZW1IZWlnaHQoKSBjb25zdDsJDQotCUZYX1dPUkQJCQkJCQkJR2V0Rmlyc3RDaGFyKCkgY29uc3Q7DQotDQotcHJpdmF0ZToNCi0JSUZYX0VkaXQqCQkJCQkJbV9wRWRpdDsNCi0JRlhfQk9PTAkJCQkJCQltX2JTZWxlY3RlZDsJCS8vyse38dGh1tANCi0JRlhfQk9PTAkJCQkJCQltX2JDYXJldDsJCS8vyse38c6qvbm146OstuDRocqx08MNCi0JQ0xTVF9SZWN0CQkJCQkJbV9yY0xpc3RJdGVtOwkvL8Tasr/X+LHqDQotfTsNCi0NCi1jbGFzcyBDRlhfTGlzdENvbnRhaW5lcg0KLXsNCi1wdWJsaWM6DQotCUNGWF9MaXN0Q29udGFpbmVyKCkgOiBtX3JjUGxhdGUoMC4wZiwwLjBmLDAuMGYsMC4wZiksIG1fcmNDb250ZW50KDAuMGYsMC4wZiwwLjBmLDAuMGYpe30NCi0JdmlydHVhbCB+Q0ZYX0xpc3RDb250YWluZXIoKXt9DQotCXZpcnR1YWwgdm9pZAkJCQkJU2V0UGxhdGVSZWN0KGNvbnN0IENQREZfUmVjdCAmIHJlY3Qpe21fcmNQbGF0ZSA9IHJlY3Q7fQ0KLQlDUERGX1JlY3QJCQkJCQlHZXRQbGF0ZVJlY3QoKSBjb25zdHtyZXR1cm4gbV9yY1BsYXRlO30NCi0Jdm9pZAkJCQkJCQlTZXRDb250ZW50UmVjdChjb25zdCBDTFNUX1JlY3QgJiByZWN0KXttX3JjQ29udGVudCA9IHJlY3Q7fQ0KLQlDTFNUX1JlY3QJCQkJCQlHZXRDb250ZW50UmVjdCgpIGNvbnN0e3JldHVybiBtX3JjQ29udGVudDt9DQotCUNQREZfUG9pbnQJCQkJCQlHZXRCVFBvaW50KCkgY29uc3R7cmV0dXJuIENQREZfUG9pbnQobV9yY1BsYXRlLmxlZnQsbV9yY1BsYXRlLnRvcCk7fQ0KLQlDUERGX1BvaW50CQkJCQkJR2V0RVRQb2ludCgpIGNvbnN0e3JldHVybiBDUERGX1BvaW50KG1fcmNQbGF0ZS5yaWdodCxtX3JjUGxhdGUuYm90dG9tKTt9DQotcHVibGljOg0KLQlDUERGX1BvaW50CQkJCQkJSW5uZXJUb091dGVyKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3R7cmV0dXJuIENQREZfUG9pbnQocG9pbnQueCArIEdldEJUUG9pbnQoKS54LEdldEJUUG9pbnQoKS55IC0gcG9pbnQueSk7fQ0KLQlDUERGX1BvaW50CQkJCQkJT3V0ZXJUb0lubmVyKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3R7cmV0dXJuIENQREZfUG9pbnQocG9pbnQueCAtIEdldEJUUG9pbnQoKS54LEdldEJUUG9pbnQoKS55IC0gcG9pbnQueSk7fQ0KLQlDUERGX1JlY3QJCQkJCQlJbm5lclRvT3V0ZXIoY29uc3QgQ0xTVF9SZWN0ICYgcmVjdCkgY29uc3R7Q1BERl9Qb2ludCBwdExlZnRUb3AgPSBJbm5lclRvT3V0ZXIoQ1BERl9Qb2ludChyZWN0LmxlZnQscmVjdC50b3ApKTsNCi0JCQkJCQkJCQkJCQkJCQkJCQkJQ1BERl9Qb2ludCBwdFJpZ2h0Qm90dG9tID0gSW5uZXJUb091dGVyKENQREZfUG9pbnQocmVjdC5yaWdodCxyZWN0LmJvdHRvbSkpOw0KLQkJCQkJCQkJCQkJCQkJCQkJCQlyZXR1cm4gQ1BERl9SZWN0KHB0TGVmdFRvcC54LHB0UmlnaHRCb3R0b20ueSxwdFJpZ2h0Qm90dG9tLngscHRMZWZ0VG9wLnkpO30NCi0JQ0xTVF9SZWN0CQkJCQkJT3V0ZXJUb0lubmVyKGNvbnN0IENQREZfUmVjdCAmIHJlY3QpIGNvbnN0e0NQREZfUG9pbnQgcHRMZWZ0VG9wID0gT3V0ZXJUb0lubmVyKENQREZfUG9pbnQocmVjdC5sZWZ0LHJlY3QudG9wKSk7DQotCQkJCQkJCQkJCQkJCQkJCQkJCUNQREZfUG9pbnQgcHRSaWdodEJvdHRvbSA9IE91dGVyVG9Jbm5lcihDUERGX1BvaW50KHJlY3QucmlnaHQscmVjdC5ib3R0b20pKTsNCi0JCQkJCQkJCQkJCQkJCQkJCQkJcmV0dXJuIENMU1RfUmVjdChwdExlZnRUb3AueCxwdExlZnRUb3AueSxwdFJpZ2h0Qm90dG9tLngscHRSaWdodEJvdHRvbS55KTt9DQotcHJpdmF0ZToNCi0JQ1BERl9SZWN0CQkJCQkJbV9yY1BsYXRlOyAJDQotCUNMU1RfUmVjdAkJCQkJCW1fcmNDb250ZW50OwkJLy9wb3NpdGl2ZSBmb3JldmVyIQ0KLX07DQotDQotdGVtcGxhdGU8Y2xhc3MgVFlQRT4gY2xhc3MgQ0xTVF9BcnJheVRlbXBsYXRlIDogcHVibGljIENGWF9BcnJheVRlbXBsYXRlPFRZUEU+DQotew0KLXB1YmxpYzoJDQotCUZYX0JPT0wgSXNFbXB0eSgpIHsgcmV0dXJuIENGWF9BcnJheVRlbXBsYXRlPFRZUEU+OjpHZXRTaXplKCkgPD0gMDsgfQ0KLQlUWVBFIEdldEF0KEZYX0lOVDMyIG5JbmRleCkgY29uc3QgeyBpZiAobkluZGV4ID49IDAgJiYgbkluZGV4IDwgQ0ZYX0FycmF5VGVtcGxhdGU8VFlQRT46OkdldFNpemUoKSkgcmV0dXJuIENGWF9BcnJheVRlbXBsYXRlPFRZUEU+OjpHZXRBdChuSW5kZXgpOyByZXR1cm4gTlVMTDt9DQotCXZvaWQgUmVtb3ZlQXQoRlhfSU5UMzIgbkluZGV4KXtpZiAobkluZGV4ID49IDAgJiYgbkluZGV4IDwgQ0ZYX0FycmF5VGVtcGxhdGU8VFlQRT46OkdldFNpemUoKSkgQ0ZYX0FycmF5VGVtcGxhdGU8VFlQRT46OlJlbW92ZUF0KG5JbmRleCk7fQ0KLX07DQotDQotY2xhc3MgQ0ZYX0xpc3QgOiBwcm90ZWN0ZWQgQ0ZYX0xpc3RDb250YWluZXIgLCBwdWJsaWMgSUZYX0xpc3QNCi17DQotcHVibGljOg0KLQlDRlhfTGlzdCgpOw0KLQl2aXJ0dWFsIH5DRlhfTGlzdCgpOw0KLQ0KLXB1YmxpYzoNCi0JdmlydHVhbCB2b2lkCQkJCQlTZXRGb250TWFwKElGWF9FZGl0X0ZvbnRNYXAgKiBwRm9udE1hcCk7DQotCXZpcnR1YWwgdm9pZAkJCQkJU2V0Rm9udFNpemUoRlhfRkxPQVQgZkZvbnRTaXplKTsNCi0NCi0JdmlydHVhbCBDUERGX1JlY3QJCQkJR2V0UGxhdGVSZWN0KCkgY29uc3Q7DQotCXZpcnR1YWwgQ1BERl9SZWN0CQkJCUdldENvbnRlbnRSZWN0KCkgY29uc3Q7DQotDQotCXZpcnR1YWwgRlhfRkxPQVQJCQkJR2V0Rm9udFNpemUoKSBjb25zdDsNCi0JdmlydHVhbCBJRlhfRWRpdCoJCQkJR2V0SXRlbUVkaXQoRlhfSU5UMzIgbkluZGV4KSBjb25zdDsNCi0JdmlydHVhbCBGWF9JTlQzMgkJCQlHZXRDb3VudCgpIGNvbnN0Ow0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCUlzSXRlbVNlbGVjdGVkKEZYX0lOVDMyIG5JbmRleCkgY29uc3Q7DQotCXZpcnR1YWwgRlhfRkxPQVQJCQkJR2V0Rmlyc3RIZWlnaHQoKSBjb25zdDsNCi0JDQotCXZpcnR1YWwgdm9pZAkJCQkJU2V0TXVsdGlwbGVTZWwoRlhfQk9PTCBiTXVsdGlwbGUpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCUlzTXVsdGlwbGVTZWwoKSBjb25zdDsJDQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJSXNWYWxpZChGWF9JTlQzMiBuSXRlbUluZGV4KSBjb25zdDsNCi0JdmlydHVhbCBGWF9JTlQzMgkJCQlGaW5kTmV4dChGWF9JTlQzMiBuSW5kZXgsRlhfV0NIQVIgbkNoYXIpIGNvbnN0OwkNCi0NCi1wcm90ZWN0ZWQ6DQotCXZpcnR1YWwgdm9pZAkJCQkJRW1wdHkoKTsNCi0NCi0Jdm9pZAkJCQkJCQlBZGRJdGVtKEZYX0xQQ1dTVFIgc3RyKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlSZUFycmFuZ2UoRlhfSU5UMzIgbkl0ZW1JbmRleCk7CQ0KLQ0KLQl2aXJ0dWFsIENQREZfUmVjdAkJCQlHZXRJdGVtUmVjdChGWF9JTlQzMiBuSW5kZXgpIGNvbnN0OwkNCi0JQ0ZYX1dpZGVTdHJpbmcJCQkJCUdldEl0ZW1UZXh0KEZYX0lOVDMyIG5JbmRleCkgY29uc3Q7DQotDQotCXZvaWQJCQkJCQkJU2V0SXRlbVNlbGVjdChGWF9JTlQzMiBuSXRlbUluZGV4LCBGWF9CT09MIGJTZWxlY3RlZCk7DQotCXZvaWQJCQkJCQkJU2V0SXRlbUNhcmV0KEZYX0lOVDMyIG5JdGVtSW5kZXgsIEZYX0JPT0wgYkNhcmV0KTsNCi0NCi0JdmlydHVhbCBGWF9JTlQzMgkJCQlHZXRJdGVtSW5kZXgoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdDsJCQ0KLQlGWF9JTlQzMgkJCQkJCUdldEZpcnN0U2VsZWN0ZWQoKSBjb25zdDsNCi0JRlhfSU5UMzIJCQkJCQlHZXRMYXN0U2VsZWN0ZWQoKSBjb25zdDsNCi0JRlhfV0NIQVIJCQkJCQlUb3VwcGVyKEZYX1dDSEFSIGMpIGNvbnN0Ow0KLQkJDQotcHJpdmF0ZToNCi0JQ0xTVF9BcnJheVRlbXBsYXRlPENGWF9MaXN0SXRlbSo+CW1fYUxpc3RJdGVtczsNCi0JRlhfRkxPQVQJCQkJCQkJbV9mRm9udFNpemU7DQotCUlGWF9FZGl0X0ZvbnRNYXAqCQkJCQltX3BGb250TWFwOw0KLQlGWF9CT09MCQkJCQkJCQltX2JNdWx0aXBsZTsJDQotfTsNCi0NCi1zdHJ1Y3QgQ1BMU1RfU2VsZWN0X0l0ZW0NCi17DQotCUNQTFNUX1NlbGVjdF9JdGVtKEZYX0lOVDMyIG5JdGVtSW5kZXgsRlhfSU5UMzIgblN0YXRlKQ0KLQl7DQotCQl0aGlzLT5uSXRlbUluZGV4ID0gbkl0ZW1JbmRleDsNCi0JCXRoaXMtPm5TdGF0ZSA9IG5TdGF0ZTsNCi0JfQ0KLQ0KLQlGWF9JTlQzMgkJbkl0ZW1JbmRleDsNCi0JRlhfSU5UMzIJCW5TdGF0ZTsgLy8wOm5vcm1hbCBzZWxlY3QgLTE6dG8gZGVzZWxlY3QgMTogdG8gc2VsZWN0DQotfTsNCi0NCi1jbGFzcyBDUExTVF9TZWxlY3QNCi17DQotcHVibGljOg0KLQlDUExTVF9TZWxlY3QoKTsNCi0JdmlydHVhbCB+Q1BMU1RfU2VsZWN0KCk7DQotDQotcHVibGljOg0KLQl2b2lkCQkJCQkJCUFkZChGWF9JTlQzMiBuSXRlbUluZGV4KTsNCi0Jdm9pZAkJCQkJCQlBZGQoRlhfSU5UMzIgbkJlZ2luSW5kZXgsIEZYX0lOVDMyIG5FbmRJbmRleCk7DQotCXZvaWQJCQkJCQkJU3ViKEZYX0lOVDMyIG5JdGVtSW5kZXgpOw0KLQl2b2lkCQkJCQkJCVN1YihGWF9JTlQzMiBuQmVnaW5JbmRleCwgRlhfSU5UMzIgbkVuZEluZGV4KTsNCi0JRlhfQk9PTAkJCQkJCQlJc0V4aXN0KEZYX0lOVDMyIG5JdGVtSW5kZXgpIGNvbnN0Ow0KLQlGWF9JTlQzMgkJCQkJCUZpbmQoRlhfSU5UMzIgbkl0ZW1JbmRleCkgY29uc3Q7DQotCUZYX0lOVDMyCQkJCQkJR2V0Q291bnQoKSBjb25zdDsNCi0JRlhfSU5UMzIJCQkJCQlHZXRJdGVtSW5kZXgoRlhfSU5UMzIgbkluZGV4KSBjb25zdDsNCi0JRlhfSU5UMzIJCQkJCQlHZXRTdGF0ZShGWF9JTlQzMiBuSW5kZXgpIGNvbnN0Ow0KLQl2b2lkCQkJCQkJCURvbmUoKTsNCi0Jdm9pZAkJCQkJCQlEZXNlbGVjdEFsbCgpOw0KLQ0KLXByaXZhdGU6DQotCUNGWF9BcnJheVRlbXBsYXRlPENQTFNUX1NlbGVjdF9JdGVtKj4JbV9hSXRlbXM7DQotfTsNCi0NCi1jbGFzcyBDRlhfTGlzdEN0cmwgOiBwdWJsaWMgQ0ZYX0xpc3QNCi17DQotcHVibGljOg0KLQlDRlhfTGlzdEN0cmwoKTsNCi0JdmlydHVhbCB+Q0ZYX0xpc3RDdHJsKCk7DQotDQotcHVibGljOg0KLQl2b2lkCQkJCQkJCVNldE5vdGlmeShJRlhfTGlzdF9Ob3RpZnkgKiBwTm90aWZ5KTsNCi0NCi0Jdm9pZAkJCQkJCQlPbk1vdXNlRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCk7DQotCXZvaWQJCQkJCQkJT25Nb3VzZU1vdmUoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpOw0KLQl2b2lkCQkJCQkJCU9uVktfVVAoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCk7DQotCXZvaWQJCQkJCQkJT25WS19ET1dOKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpOw0KLQl2b2lkCQkJCQkJCU9uVktfTEVGVChGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKTsNCi0Jdm9pZAkJCQkJCQlPblZLX1JJR0hUKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpOw0KLQl2b2lkCQkJCQkJCU9uVktfSE9NRShGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKTsNCi0Jdm9pZAkJCQkJCQlPblZLX0VORChGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKTsNCi0Jdm9pZAkJCQkJCQlPblZLKEZYX0lOVDMyIG5JdGVtSW5kZXgsRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCk7DQotCUZYX0JPT0wJCQkJCQkJT25DaGFyKEZYX1dPUkQgbkNoYXIsRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCk7DQotDQotCXZpcnR1YWwgQ1BERl9Qb2ludAkJCQlJblRvT3V0KGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3Q7DQotCXZpcnR1YWwgQ1BERl9Qb2ludAkJCQlPdXRUb0luKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3Q7DQotCXZpcnR1YWwgQ1BERl9SZWN0CQkJCUluVG9PdXQoY29uc3QgQ1BERl9SZWN0ICYgcmVjdCkgY29uc3Q7DQotCXZpcnR1YWwgQ1BERl9SZWN0CQkJCU91dFRvSW4oY29uc3QgQ1BERl9SZWN0ICYgcmVjdCkgY29uc3Q7DQotDQotCXZpcnR1YWwgdm9pZAkJCQkJU2V0UGxhdGVSZWN0KGNvbnN0IENQREZfUmVjdCAmIHJlY3QpOw0KLQl2b2lkCQkJCQkJCVNldFNjcm9sbFBvcyhjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpOw0KLQl2b2lkCQkJCQkJCVNjcm9sbFRvTGlzdEl0ZW0oRlhfSU5UMzIgbkl0ZW1JbmRleCk7DQotCXZpcnR1YWwgQ1BERl9SZWN0CQkJCUdldEl0ZW1SZWN0KEZYX0lOVDMyIG5JbmRleCkgY29uc3Q7DQotCUZYX0lOVDMyCQkJCQkJR2V0Q2FyZXQoKSBjb25zdCB7cmV0dXJuIG1fbkNhcmV0SW5kZXg7fQ0KLQlGWF9JTlQzMgkJCQkJCUdldFNlbGVjdCgpIGNvbnN0IHtyZXR1cm4gbV9uU2VsSXRlbTt9CQ0KLQlGWF9JTlQzMgkJCQkJCUdldFRvcEl0ZW0oKSBjb25zdDsNCi0JdmlydHVhbCBDUERGX1JlY3QJCQkJR2V0Q29udGVudFJlY3QoKSBjb25zdDsNCi0JdmlydHVhbCBGWF9JTlQzMgkJCQlHZXRJdGVtSW5kZXgoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdDsNCi0NCi0Jdm9pZAkJCQkJCQlBZGRTdHJpbmcoRlhfTFBDV1NUUiBzdHJpbmcpOw0KLQl2b2lkCQkJCQkJCVNldFRvcEl0ZW0oRlhfSU5UMzIgbkluZGV4KTsJDQotCXZvaWQJCQkJCQkJU2VsZWN0KEZYX0lOVDMyIG5JdGVtSW5kZXgpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCVNldENhcmV0KEZYX0lOVDMyIG5JdGVtSW5kZXgpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCUVtcHR5KCk7DQotCXZpcnR1YWwgdm9pZAkJCQkJQ2FuY2VsKCk7DQotCUNGWF9XaWRlU3RyaW5nCQkJCQlHZXRUZXh0KCkgY29uc3Q7DQotDQotcHJpdmF0ZToNCi0Jdm9pZAkJCQkJCQlTZXRNdWx0aXBsZVNlbGVjdChGWF9JTlQzMiBuSXRlbUluZGV4LCBGWF9CT09MIGJTZWxlY3RlZCk7DQotCXZvaWQJCQkJCQkJU2V0U2luZ2xlU2VsZWN0KEZYX0lOVDMyIG5JdGVtSW5kZXgpOw0KLQl2b2lkCQkJCQkJCUludmFsaWRhdGVJdGVtKEZYX0lOVDMyIG5JdGVtSW5kZXgpOw0KLQl2b2lkCQkJCQkJCVNlbGVjdEl0ZW1zKCk7DQotCUZYX0JPT0wJCQkJCQkJSXNJdGVtVmlzaWJsZShGWF9JTlQzMiBuSXRlbUluZGV4KSBjb25zdDsJCQ0KLQl2b2lkCQkJCQkJCVNldFNjcm9sbEluZm8oKTsNCi0Jdm9pZAkJCQkJCQlTZXRTY3JvbGxQb3NZKEZYX0ZMT0FUIGZ5KTsNCi0JdmlydHVhbCB2b2lkCQkJCQlSZUFycmFuZ2UoRlhfSU5UMzIgbkl0ZW1JbmRleCk7CQ0KLQ0KLXByaXZhdGU6DQotCUlGWF9MaXN0X05vdGlmeSoJCQkJbV9wTm90aWZ5Ow0KLQlGWF9CT09MCQkJCQkJCW1fYk5vdGlmeUZsYWc7DQotCUNQREZfUG9pbnQJCQkJCQltX3B0U2Nyb2xsUG9zOw0KLQlDUExTVF9TZWxlY3QJCQkJCW1fYVNlbEl0ZW1zOwkvL2ZvciBtdWx0aXBsZQ0KLQlGWF9JTlQzMgkJCQkJCW1fblNlbEl0ZW07CQkvL2ZvciBzaW5nbGUNCi0JRlhfSU5UMzIJCQkJCQltX25Gb290SW5kZXg7CS8vZm9yIG11bHRpcGxlDQotCUZYX0JPT0wJCQkJCQkJbV9iQ3RybFNlbDsJCS8vZm9yIG11bHRpcGxlDQotCUZYX0lOVDMyCQkJCQkJbV9uQ2FyZXRJbmRleDsJLy9mb3IgbXVsdGlwbGUNCi19Ow0KLQ0KLSNlbmRpZg0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0ZYRVRfTElTVF9IXworI2RlZmluZSBfRlhFVF9MSVNUX0hfCisKKyNpbmNsdWRlICJmeF9lZGl0LmgiCisKK2NsYXNzIElGWF9FZGl0OworCitjbGFzcyBDTFNUX1NpemUKK3sKK3B1YmxpYzoKKwlDTFNUX1NpemUoKSA6IHgoMC4wZiksIHkoMC4wZikKKwl7CQkKKwl9CisKKwlDTFNUX1NpemUoRlhfRkxPQVQgeCxGWF9GTE9BVCB5KQorCXsgCisJCXRoaXMtPnggPSB4OworCQl0aGlzLT55ID0geTsKKwl9CisKKwl2b2lkIERlZmF1bHQoKQorCXsKKwkJeCA9IDAuMGY7CisJCXkgPSAwLjBmOworCX0KKworCUZYX0JPT0wgb3BlcmF0b3IgIT0gKGNvbnN0IENMU1RfU2l6ZSAmIHNpemUpIGNvbnN0CisJeworCQlyZXR1cm4gRlhTWVNfbWVtY21wKHRoaXMsICZzaXplLCBzaXplb2YoQ0xTVF9TaXplKSkgIT0gMDsKKwl9CisKKwlGWF9GTE9BVCB4LHk7Cit9OworCitjbGFzcyBDTFNUX1JlY3QgOiBwdWJsaWMgQ1BERl9SZWN0Cit7CitwdWJsaWM6CisJQ0xTVF9SZWN0KCkKKwl7CQorCQlsZWZ0ID0gdG9wID0gcmlnaHQgPSBib3R0b20gPSAwLjBmOworCX0KKworCUNMU1RfUmVjdChGWF9GTE9BVCBsZWZ0LEZYX0ZMT0FUIHRvcCwKKwkJCQkJCUZYX0ZMT0FUIHJpZ2h0LEZYX0ZMT0FUIGJvdHRvbSkKKwl7IAorCQl0aGlzLT5sZWZ0ID0gbGVmdDsgCisJCXRoaXMtPnRvcCA9IHRvcDsgCisJCXRoaXMtPnJpZ2h0ID0gcmlnaHQ7IAorCQl0aGlzLT5ib3R0b20gPSBib3R0b207IAorCX0KKworCUNMU1RfUmVjdChjb25zdCBDUERGX1JlY3QgJiByZWN0KQorCXsgCisJCXRoaXMtPmxlZnQgPSByZWN0LmxlZnQ7IAorCQl0aGlzLT50b3AgPSByZWN0LnRvcDsgCisJCXRoaXMtPnJpZ2h0ID0gcmVjdC5yaWdodDsgCisJCXRoaXMtPmJvdHRvbSA9IHJlY3QuYm90dG9tOyAKKwl9CisKKwl2b2lkIERlZmF1bHQoKQorCXsKKwkJbGVmdCA9IHRvcCA9IHJpZ2h0ID0gYm90dG9tID0gMC4wZjsKKwl9CisKKwljb25zdCBDTFNUX1JlY3Qgb3BlcmF0b3IgPSAoY29uc3QgQ1BERl9SZWN0ICYgcmVjdCkKKwl7CisJCXRoaXMtPmxlZnQgPSByZWN0LmxlZnQ7CisJCXRoaXMtPnRvcCA9IHJlY3QudG9wOworCQl0aGlzLT5yaWdodCA9IHJlY3QucmlnaHQ7CisJCXRoaXMtPmJvdHRvbSA9IHJlY3QuYm90dG9tOworCisJCXJldHVybiAqdGhpczsKKwl9CisKKwlGWF9CT09MIG9wZXJhdG9yID09IChjb25zdCBDTFNUX1JlY3QgJiByZWN0KSBjb25zdAorCXsKKwkJcmV0dXJuIEZYU1lTX21lbWNtcCh0aGlzLCAmcmVjdCwgc2l6ZW9mKENMU1RfUmVjdCkpID09IDA7CisJfQorCisJRlhfQk9PTCBvcGVyYXRvciAhPSAoY29uc3QgQ0xTVF9SZWN0ICYgcmVjdCkgY29uc3QKKwl7CisJCXJldHVybiBGWFNZU19tZW1jbXAodGhpcywgJnJlY3QsIHNpemVvZihDTFNUX1JlY3QpKSAhPSAwOworCX0KKworCUZYX0ZMT0FUIFdpZHRoKCkgY29uc3QKKwl7CisJCXJldHVybiB0aGlzLT5yaWdodCAtIHRoaXMtPmxlZnQ7CisJfQorCisJRlhfRkxPQVQgSGVpZ2h0KCkgY29uc3QKKwl7CisJCWlmICh0aGlzLT50b3AgPiB0aGlzLT5ib3R0b20pCisJCQlyZXR1cm4gdGhpcy0+dG9wIC0gdGhpcy0+Ym90dG9tOworCQllbHNlCisJCQlyZXR1cm4gdGhpcy0+Ym90dG9tIC0gdGhpcy0+dG9wOworCX0KKworCUNQREZfUG9pbnQgTGVmdFRvcCgpIGNvbnN0CisJeworCQlyZXR1cm4gQ1BERl9Qb2ludChsZWZ0LHRvcCk7CisJfQorCisJQ1BERl9Qb2ludCBSaWdodEJvdHRvbSgpIGNvbnN0CisJeworCQlyZXR1cm4gQ1BERl9Qb2ludChyaWdodCxib3R0b20pOworCX0KKworCWNvbnN0IENMU1RfUmVjdCBvcGVyYXRvciArPSAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSAKKwl7CisJCXRoaXMtPmxlZnQgKz0gcG9pbnQueDsKKwkJdGhpcy0+cmlnaHQgKz0gcG9pbnQueDsKKwkJdGhpcy0+dG9wICs9IHBvaW50Lnk7CisJCXRoaXMtPmJvdHRvbSArPSBwb2ludC55OworCisJCXJldHVybiAqdGhpczsKKwl9CisKKwljb25zdCBDTFNUX1JlY3Qgb3BlcmF0b3IgLT0gKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgCisJeworCQl0aGlzLT5sZWZ0IC09IHBvaW50Lng7CisJCXRoaXMtPnJpZ2h0IC09IHBvaW50Lng7CisJCXRoaXMtPnRvcCAtPSBwb2ludC55OworCQl0aGlzLT5ib3R0b20gLT0gcG9pbnQueTsKKworCQlyZXR1cm4gKnRoaXM7CisJfQorCisJQ0xTVF9SZWN0IG9wZXJhdG9yICsgKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3QKKwl7CisJCXJldHVybiBDTFNUX1JlY3QobGVmdCArIHBvaW50LngsCisJCQkJCXRvcCArIHBvaW50LnksCisJCQkJCXJpZ2h0ICsgcG9pbnQueCwKKwkJCQkJYm90dG9tICsgcG9pbnQueSk7CisJfQorCisJQ0xTVF9SZWN0IG9wZXJhdG9yIC0gKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3QKKwl7CisJCXJldHVybiBDTFNUX1JlY3QobGVmdCAtIHBvaW50LngsCisJCQkJCXRvcCAtIHBvaW50LnksCisJCQkJCXJpZ2h0IC0gcG9pbnQueCwKKwkJCQkJYm90dG9tIC0gcG9pbnQueSk7CisJfQorfTsKKworY2xhc3MgQ0ZYX0xpc3RJdGVtCit7CitwdWJsaWM6CisJQ0ZYX0xpc3RJdGVtKCk7CisJdmlydHVhbCB+Q0ZYX0xpc3RJdGVtKCk7CisKKwl2b2lkCQkJCQkJCVNldEZvbnRNYXAoSUZYX0VkaXRfRm9udE1hcCAqIHBGb250TWFwKTsKKwlJRlhfRWRpdF9JdGVyYXRvcioJCQkJR2V0SXRlcmF0b3IoKSBjb25zdDsKKwlJRlhfRWRpdCoJCQkJCQlHZXRFZGl0KCkgY29uc3Q7CisKK3B1YmxpYzoKKwl2b2lkCQkJCQkJCVNldFJlY3QoY29uc3QgQ0xTVF9SZWN0ICYgcmVjdCk7CQkKKwl2b2lkCQkJCQkJCVNldFNlbGVjdChGWF9CT09MIGJTZWxlY3RlZCk7CQorCXZvaWQJCQkJCQkJU2V0Q2FyZXQoRlhfQk9PTCBiQ2FyZXQpOworCXZvaWQJCQkJCQkJU2V0VGV4dChGWF9MUENXU1RSIHRleHQpOworCXZvaWQJCQkJCQkJU2V0Rm9udFNpemUoRlhfRkxPQVQgZkZvbnRTaXplKTsKKwlDRlhfV2lkZVN0cmluZwkJCQkJR2V0VGV4dCgpIGNvbnN0OworCisJQ0xTVF9SZWN0CQkJCQkJR2V0UmVjdCgpIGNvbnN0OworCUZYX0JPT0wJCQkJCQkJSXNTZWxlY3RlZCgpIGNvbnN0OworCUZYX0JPT0wJCQkJCQkJSXNDYXJldCgpIGNvbnN0OworCUZYX0ZMT0FUCQkJCQkJR2V0SXRlbUhlaWdodCgpIGNvbnN0OwkKKwlGWF9XT1JECQkJCQkJCUdldEZpcnN0Q2hhcigpIGNvbnN0OworCitwcml2YXRlOgorCUlGWF9FZGl0KgkJCQkJCW1fcEVkaXQ7CisJRlhfQk9PTAkJCQkJCQltX2JTZWxlY3RlZDsJCS8vyse38dGh1tAKKwlGWF9CT09MCQkJCQkJCW1fYkNhcmV0OwkJLy/Kx7fxzqq9ubXjo6y24NGhyrHTwworCUNMU1RfUmVjdAkJCQkJCW1fcmNMaXN0SXRlbTsJLy/E2rK/1/ix6gorfTsKKworY2xhc3MgQ0ZYX0xpc3RDb250YWluZXIKK3sKK3B1YmxpYzoKKwlDRlhfTGlzdENvbnRhaW5lcigpIDogbV9yY1BsYXRlKDAuMGYsMC4wZiwwLjBmLDAuMGYpLCBtX3JjQ29udGVudCgwLjBmLDAuMGYsMC4wZiwwLjBmKXt9CisJdmlydHVhbCB+Q0ZYX0xpc3RDb250YWluZXIoKXt9CisJdmlydHVhbCB2b2lkCQkJCQlTZXRQbGF0ZVJlY3QoY29uc3QgQ1BERl9SZWN0ICYgcmVjdCl7bV9yY1BsYXRlID0gcmVjdDt9CisJQ1BERl9SZWN0CQkJCQkJR2V0UGxhdGVSZWN0KCkgY29uc3R7cmV0dXJuIG1fcmNQbGF0ZTt9CisJdm9pZAkJCQkJCQlTZXRDb250ZW50UmVjdChjb25zdCBDTFNUX1JlY3QgJiByZWN0KXttX3JjQ29udGVudCA9IHJlY3Q7fQorCUNMU1RfUmVjdAkJCQkJCUdldENvbnRlbnRSZWN0KCkgY29uc3R7cmV0dXJuIG1fcmNDb250ZW50O30KKwlDUERGX1BvaW50CQkJCQkJR2V0QlRQb2ludCgpIGNvbnN0e3JldHVybiBDUERGX1BvaW50KG1fcmNQbGF0ZS5sZWZ0LG1fcmNQbGF0ZS50b3ApO30KKwlDUERGX1BvaW50CQkJCQkJR2V0RVRQb2ludCgpIGNvbnN0e3JldHVybiBDUERGX1BvaW50KG1fcmNQbGF0ZS5yaWdodCxtX3JjUGxhdGUuYm90dG9tKTt9CitwdWJsaWM6CisJQ1BERl9Qb2ludAkJCQkJCUlubmVyVG9PdXRlcihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpIGNvbnN0e3JldHVybiBDUERGX1BvaW50KHBvaW50LnggKyBHZXRCVFBvaW50KCkueCxHZXRCVFBvaW50KCkueSAtIHBvaW50LnkpO30KKwlDUERGX1BvaW50CQkJCQkJT3V0ZXJUb0lubmVyKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3R7cmV0dXJuIENQREZfUG9pbnQocG9pbnQueCAtIEdldEJUUG9pbnQoKS54LEdldEJUUG9pbnQoKS55IC0gcG9pbnQueSk7fQorCUNQREZfUmVjdAkJCQkJCUlubmVyVG9PdXRlcihjb25zdCBDTFNUX1JlY3QgJiByZWN0KSBjb25zdHtDUERGX1BvaW50IHB0TGVmdFRvcCA9IElubmVyVG9PdXRlcihDUERGX1BvaW50KHJlY3QubGVmdCxyZWN0LnRvcCkpOworCQkJCQkJCQkJCQkJCQkJCQkJCUNQREZfUG9pbnQgcHRSaWdodEJvdHRvbSA9IElubmVyVG9PdXRlcihDUERGX1BvaW50KHJlY3QucmlnaHQscmVjdC5ib3R0b20pKTsKKwkJCQkJCQkJCQkJCQkJCQkJCQlyZXR1cm4gQ1BERl9SZWN0KHB0TGVmdFRvcC54LHB0UmlnaHRCb3R0b20ueSxwdFJpZ2h0Qm90dG9tLngscHRMZWZ0VG9wLnkpO30KKwlDTFNUX1JlY3QJCQkJCQlPdXRlclRvSW5uZXIoY29uc3QgQ1BERl9SZWN0ICYgcmVjdCkgY29uc3R7Q1BERl9Qb2ludCBwdExlZnRUb3AgPSBPdXRlclRvSW5uZXIoQ1BERl9Qb2ludChyZWN0LmxlZnQscmVjdC50b3ApKTsKKwkJCQkJCQkJCQkJCQkJCQkJCQlDUERGX1BvaW50IHB0UmlnaHRCb3R0b20gPSBPdXRlclRvSW5uZXIoQ1BERl9Qb2ludChyZWN0LnJpZ2h0LHJlY3QuYm90dG9tKSk7CisJCQkJCQkJCQkJCQkJCQkJCQkJcmV0dXJuIENMU1RfUmVjdChwdExlZnRUb3AueCxwdExlZnRUb3AueSxwdFJpZ2h0Qm90dG9tLngscHRSaWdodEJvdHRvbS55KTt9Citwcml2YXRlOgorCUNQREZfUmVjdAkJCQkJCW1fcmNQbGF0ZTsgCQorCUNMU1RfUmVjdAkJCQkJCW1fcmNDb250ZW50OwkJLy9wb3NpdGl2ZSBmb3JldmVyIQorfTsKKwordGVtcGxhdGU8Y2xhc3MgVFlQRT4gY2xhc3MgQ0xTVF9BcnJheVRlbXBsYXRlIDogcHVibGljIENGWF9BcnJheVRlbXBsYXRlPFRZUEU+Cit7CitwdWJsaWM6CQorCUZYX0JPT0wgSXNFbXB0eSgpIHsgcmV0dXJuIENGWF9BcnJheVRlbXBsYXRlPFRZUEU+OjpHZXRTaXplKCkgPD0gMDsgfQorCVRZUEUgR2V0QXQoRlhfSU5UMzIgbkluZGV4KSBjb25zdCB7IGlmIChuSW5kZXggPj0gMCAmJiBuSW5kZXggPCBDRlhfQXJyYXlUZW1wbGF0ZTxUWVBFPjo6R2V0U2l6ZSgpKSByZXR1cm4gQ0ZYX0FycmF5VGVtcGxhdGU8VFlQRT46OkdldEF0KG5JbmRleCk7IHJldHVybiBOVUxMO30KKwl2b2lkIFJlbW92ZUF0KEZYX0lOVDMyIG5JbmRleCl7aWYgKG5JbmRleCA+PSAwICYmIG5JbmRleCA8IENGWF9BcnJheVRlbXBsYXRlPFRZUEU+OjpHZXRTaXplKCkpIENGWF9BcnJheVRlbXBsYXRlPFRZUEU+OjpSZW1vdmVBdChuSW5kZXgpO30KK307CisKK2NsYXNzIENGWF9MaXN0IDogcHJvdGVjdGVkIENGWF9MaXN0Q29udGFpbmVyICwgcHVibGljIElGWF9MaXN0Cit7CitwdWJsaWM6CisJQ0ZYX0xpc3QoKTsKKwl2aXJ0dWFsIH5DRlhfTGlzdCgpOworCitwdWJsaWM6CisJdmlydHVhbCB2b2lkCQkJCQlTZXRGb250TWFwKElGWF9FZGl0X0ZvbnRNYXAgKiBwRm9udE1hcCk7CisJdmlydHVhbCB2b2lkCQkJCQlTZXRGb250U2l6ZShGWF9GTE9BVCBmRm9udFNpemUpOworCisJdmlydHVhbCBDUERGX1JlY3QJCQkJR2V0UGxhdGVSZWN0KCkgY29uc3Q7CisJdmlydHVhbCBDUERGX1JlY3QJCQkJR2V0Q29udGVudFJlY3QoKSBjb25zdDsKKworCXZpcnR1YWwgRlhfRkxPQVQJCQkJR2V0Rm9udFNpemUoKSBjb25zdDsKKwl2aXJ0dWFsIElGWF9FZGl0KgkJCQlHZXRJdGVtRWRpdChGWF9JTlQzMiBuSW5kZXgpIGNvbnN0OworCXZpcnR1YWwgRlhfSU5UMzIJCQkJR2V0Q291bnQoKSBjb25zdDsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCUlzSXRlbVNlbGVjdGVkKEZYX0lOVDMyIG5JbmRleCkgY29uc3Q7CisJdmlydHVhbCBGWF9GTE9BVAkJCQlHZXRGaXJzdEhlaWdodCgpIGNvbnN0OworCQorCXZpcnR1YWwgdm9pZAkJCQkJU2V0TXVsdGlwbGVTZWwoRlhfQk9PTCBiTXVsdGlwbGUpOworCXZpcnR1YWwgRlhfQk9PTAkJCQkJSXNNdWx0aXBsZVNlbCgpIGNvbnN0OwkKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCUlzVmFsaWQoRlhfSU5UMzIgbkl0ZW1JbmRleCkgY29uc3Q7CisJdmlydHVhbCBGWF9JTlQzMgkJCQlGaW5kTmV4dChGWF9JTlQzMiBuSW5kZXgsRlhfV0NIQVIgbkNoYXIpIGNvbnN0OwkKKworcHJvdGVjdGVkOgorCXZpcnR1YWwgdm9pZAkJCQkJRW1wdHkoKTsKKworCXZvaWQJCQkJCQkJQWRkSXRlbShGWF9MUENXU1RSIHN0cik7CisJdmlydHVhbCB2b2lkCQkJCQlSZUFycmFuZ2UoRlhfSU5UMzIgbkl0ZW1JbmRleCk7CQorCisJdmlydHVhbCBDUERGX1JlY3QJCQkJR2V0SXRlbVJlY3QoRlhfSU5UMzIgbkluZGV4KSBjb25zdDsJCisJQ0ZYX1dpZGVTdHJpbmcJCQkJCUdldEl0ZW1UZXh0KEZYX0lOVDMyIG5JbmRleCkgY29uc3Q7CisKKwl2b2lkCQkJCQkJCVNldEl0ZW1TZWxlY3QoRlhfSU5UMzIgbkl0ZW1JbmRleCwgRlhfQk9PTCBiU2VsZWN0ZWQpOworCXZvaWQJCQkJCQkJU2V0SXRlbUNhcmV0KEZYX0lOVDMyIG5JdGVtSW5kZXgsIEZYX0JPT0wgYkNhcmV0KTsKKworCXZpcnR1YWwgRlhfSU5UMzIJCQkJR2V0SXRlbUluZGV4KGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3Q7CQkKKwlGWF9JTlQzMgkJCQkJCUdldEZpcnN0U2VsZWN0ZWQoKSBjb25zdDsKKwlGWF9JTlQzMgkJCQkJCUdldExhc3RTZWxlY3RlZCgpIGNvbnN0OworCUZYX1dDSEFSCQkJCQkJVG91cHBlcihGWF9XQ0hBUiBjKSBjb25zdDsKKwkJCitwcml2YXRlOgorCUNMU1RfQXJyYXlUZW1wbGF0ZTxDRlhfTGlzdEl0ZW0qPgltX2FMaXN0SXRlbXM7CisJRlhfRkxPQVQJCQkJCQkJbV9mRm9udFNpemU7CisJSUZYX0VkaXRfRm9udE1hcCoJCQkJCW1fcEZvbnRNYXA7CisJRlhfQk9PTAkJCQkJCQkJbV9iTXVsdGlwbGU7CQorfTsKKworc3RydWN0IENQTFNUX1NlbGVjdF9JdGVtCit7CisJQ1BMU1RfU2VsZWN0X0l0ZW0oRlhfSU5UMzIgbkl0ZW1JbmRleCxGWF9JTlQzMiBuU3RhdGUpCisJeworCQl0aGlzLT5uSXRlbUluZGV4ID0gbkl0ZW1JbmRleDsKKwkJdGhpcy0+blN0YXRlID0gblN0YXRlOworCX0KKworCUZYX0lOVDMyCQluSXRlbUluZGV4OworCUZYX0lOVDMyCQluU3RhdGU7IC8vMDpub3JtYWwgc2VsZWN0IC0xOnRvIGRlc2VsZWN0IDE6IHRvIHNlbGVjdAorfTsKKworY2xhc3MgQ1BMU1RfU2VsZWN0Cit7CitwdWJsaWM6CisJQ1BMU1RfU2VsZWN0KCk7CisJdmlydHVhbCB+Q1BMU1RfU2VsZWN0KCk7CisKK3B1YmxpYzoKKwl2b2lkCQkJCQkJCUFkZChGWF9JTlQzMiBuSXRlbUluZGV4KTsKKwl2b2lkCQkJCQkJCUFkZChGWF9JTlQzMiBuQmVnaW5JbmRleCwgRlhfSU5UMzIgbkVuZEluZGV4KTsKKwl2b2lkCQkJCQkJCVN1YihGWF9JTlQzMiBuSXRlbUluZGV4KTsKKwl2b2lkCQkJCQkJCVN1YihGWF9JTlQzMiBuQmVnaW5JbmRleCwgRlhfSU5UMzIgbkVuZEluZGV4KTsKKwlGWF9CT09MCQkJCQkJCUlzRXhpc3QoRlhfSU5UMzIgbkl0ZW1JbmRleCkgY29uc3Q7CisJRlhfSU5UMzIJCQkJCQlGaW5kKEZYX0lOVDMyIG5JdGVtSW5kZXgpIGNvbnN0OworCUZYX0lOVDMyCQkJCQkJR2V0Q291bnQoKSBjb25zdDsKKwlGWF9JTlQzMgkJCQkJCUdldEl0ZW1JbmRleChGWF9JTlQzMiBuSW5kZXgpIGNvbnN0OworCUZYX0lOVDMyCQkJCQkJR2V0U3RhdGUoRlhfSU5UMzIgbkluZGV4KSBjb25zdDsKKwl2b2lkCQkJCQkJCURvbmUoKTsKKwl2b2lkCQkJCQkJCURlc2VsZWN0QWxsKCk7CisKK3ByaXZhdGU6CisJQ0ZYX0FycmF5VGVtcGxhdGU8Q1BMU1RfU2VsZWN0X0l0ZW0qPgltX2FJdGVtczsKK307CisKK2NsYXNzIENGWF9MaXN0Q3RybCA6IHB1YmxpYyBDRlhfTGlzdAoreworcHVibGljOgorCUNGWF9MaXN0Q3RybCgpOworCXZpcnR1YWwgfkNGWF9MaXN0Q3RybCgpOworCitwdWJsaWM6CisJdm9pZAkJCQkJCQlTZXROb3RpZnkoSUZYX0xpc3RfTm90aWZ5ICogcE5vdGlmeSk7CisKKwl2b2lkCQkJCQkJCU9uTW91c2VEb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCxGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKTsKKwl2b2lkCQkJCQkJCU9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCxGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKTsKKwl2b2lkCQkJCQkJCU9uVktfVVAoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCk7CisJdm9pZAkJCQkJCQlPblZLX0RPV04oRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCk7CisJdm9pZAkJCQkJCQlPblZLX0xFRlQoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCk7CisJdm9pZAkJCQkJCQlPblZLX1JJR0hUKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpOworCXZvaWQJCQkJCQkJT25WS19IT01FKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpOworCXZvaWQJCQkJCQkJT25WS19FTkQoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCk7CisJdm9pZAkJCQkJCQlPblZLKEZYX0lOVDMyIG5JdGVtSW5kZXgsRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCk7CisJRlhfQk9PTAkJCQkJCQlPbkNoYXIoRlhfV09SRCBuQ2hhcixGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKTsKKworCXZpcnR1YWwgQ1BERl9Qb2ludAkJCQlJblRvT3V0KGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3Q7CisJdmlydHVhbCBDUERGX1BvaW50CQkJCU91dFRvSW4oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdDsKKwl2aXJ0dWFsIENQREZfUmVjdAkJCQlJblRvT3V0KGNvbnN0IENQREZfUmVjdCAmIHJlY3QpIGNvbnN0OworCXZpcnR1YWwgQ1BERl9SZWN0CQkJCU91dFRvSW4oY29uc3QgQ1BERl9SZWN0ICYgcmVjdCkgY29uc3Q7CisKKwl2aXJ0dWFsIHZvaWQJCQkJCVNldFBsYXRlUmVjdChjb25zdCBDUERGX1JlY3QgJiByZWN0KTsKKwl2b2lkCQkJCQkJCVNldFNjcm9sbFBvcyhjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpOworCXZvaWQJCQkJCQkJU2Nyb2xsVG9MaXN0SXRlbShGWF9JTlQzMiBuSXRlbUluZGV4KTsKKwl2aXJ0dWFsIENQREZfUmVjdAkJCQlHZXRJdGVtUmVjdChGWF9JTlQzMiBuSW5kZXgpIGNvbnN0OworCUZYX0lOVDMyCQkJCQkJR2V0Q2FyZXQoKSBjb25zdCB7cmV0dXJuIG1fbkNhcmV0SW5kZXg7fQorCUZYX0lOVDMyCQkJCQkJR2V0U2VsZWN0KCkgY29uc3Qge3JldHVybiBtX25TZWxJdGVtO30JCisJRlhfSU5UMzIJCQkJCQlHZXRUb3BJdGVtKCkgY29uc3Q7CisJdmlydHVhbCBDUERGX1JlY3QJCQkJR2V0Q29udGVudFJlY3QoKSBjb25zdDsKKwl2aXJ0dWFsIEZYX0lOVDMyCQkJCUdldEl0ZW1JbmRleChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpIGNvbnN0OworCisJdm9pZAkJCQkJCQlBZGRTdHJpbmcoRlhfTFBDV1NUUiBzdHJpbmcpOworCXZvaWQJCQkJCQkJU2V0VG9wSXRlbShGWF9JTlQzMiBuSW5kZXgpOwkKKwl2b2lkCQkJCQkJCVNlbGVjdChGWF9JTlQzMiBuSXRlbUluZGV4KTsKKwl2aXJ0dWFsIHZvaWQJCQkJCVNldENhcmV0KEZYX0lOVDMyIG5JdGVtSW5kZXgpOworCXZpcnR1YWwgdm9pZAkJCQkJRW1wdHkoKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCUNhbmNlbCgpOworCUNGWF9XaWRlU3RyaW5nCQkJCQlHZXRUZXh0KCkgY29uc3Q7CisKK3ByaXZhdGU6CisJdm9pZAkJCQkJCQlTZXRNdWx0aXBsZVNlbGVjdChGWF9JTlQzMiBuSXRlbUluZGV4LCBGWF9CT09MIGJTZWxlY3RlZCk7CisJdm9pZAkJCQkJCQlTZXRTaW5nbGVTZWxlY3QoRlhfSU5UMzIgbkl0ZW1JbmRleCk7CisJdm9pZAkJCQkJCQlJbnZhbGlkYXRlSXRlbShGWF9JTlQzMiBuSXRlbUluZGV4KTsKKwl2b2lkCQkJCQkJCVNlbGVjdEl0ZW1zKCk7CisJRlhfQk9PTAkJCQkJCQlJc0l0ZW1WaXNpYmxlKEZYX0lOVDMyIG5JdGVtSW5kZXgpIGNvbnN0OwkJCisJdm9pZAkJCQkJCQlTZXRTY3JvbGxJbmZvKCk7CisJdm9pZAkJCQkJCQlTZXRTY3JvbGxQb3NZKEZYX0ZMT0FUIGZ5KTsKKwl2aXJ0dWFsIHZvaWQJCQkJCVJlQXJyYW5nZShGWF9JTlQzMiBuSXRlbUluZGV4KTsJCisKK3ByaXZhdGU6CisJSUZYX0xpc3RfTm90aWZ5KgkJCQltX3BOb3RpZnk7CisJRlhfQk9PTAkJCQkJCQltX2JOb3RpZnlGbGFnOworCUNQREZfUG9pbnQJCQkJCQltX3B0U2Nyb2xsUG9zOworCUNQTFNUX1NlbGVjdAkJCQkJbV9hU2VsSXRlbXM7CS8vZm9yIG11bHRpcGxlCisJRlhfSU5UMzIJCQkJCQltX25TZWxJdGVtOwkJLy9mb3Igc2luZ2xlCisJRlhfSU5UMzIJCQkJCQltX25Gb290SW5kZXg7CS8vZm9yIG11bHRpcGxlCisJRlhfQk9PTAkJCQkJCQltX2JDdHJsU2VsOwkJLy9mb3IgbXVsdGlwbGUKKwlGWF9JTlQzMgkJCQkJCW1fbkNhcmV0SW5kZXg7CS8vZm9yIG11bHRpcGxlCit9OworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9pbmNsdWRlL2Z4ZWRpdC9meGV0X3N0dWIuaCBiL2ZwZGZzZGsvaW5jbHVkZS9meGVkaXQvZnhldF9zdHViLmgKaW5kZXggYWE1MGNkNS4uYTFhYTJlMiAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2Z4ZWRpdC9meGV0X3N0dWIuaAorKysgYi9mcGRmc2RrL2luY2x1ZGUvZnhlZGl0L2Z4ZXRfc3R1Yi5oCkBAIC0xLDI2ICsxLDI2IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GWEVUX1NUVUJfSF8NCi0jZGVmaW5lIF9GWEVUX1NUVUJfSF8NCi0NCi0jaW5jbHVkZSAiLi4vLi4vLi4vY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCIgDQotI2luY2x1ZGUgIi4uLy4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfcmVuZGVyLmgiIA0KLSNpbmNsdWRlICIuLi8uLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2VvYmouaCIgDQotI2luY2x1ZGUgIi4uLy4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmZG9jL2ZwZGZfdnQuaCIgDQotI2luY2x1ZGUgIi4uL2Z4X3N5c3RlbWhhbmRsZXIuaCINCi0jaWZkZWYgRlhfUkVBREVSX0RMTA0KLQkjaWZkZWYgX0RFQlVHDQotCQkjcHJhZ21hIGNvbW1lbnQobGliLCAiWDovcGRmL2Z4Y29yZS9MaWIvZGJnX3czMl92YzYvZnhjb3JlZGxsW2RiZyx3MzIsdmM2XS5saWIiKQ0KLQkJI3ByYWdtYSBjb21tZW50KGxpYiwgIlg6L3BkZi9meGNvcmUvTGliL2RiZ193MzJfdmM2L2ZwZGZkb2NkbGxbZGJnLHczMix2YzZdLmxpYiIpDQotCSNlbHNlDQotCQkjcHJhZ21hIGNvbW1lbnQobGliLCAiWDovcGRmL2Z4Y29yZS9MaWIvcmVsX3czMl92YzYvZnhjb3JlZGxsW3JlbCx3MzIsdmM2XS5saWIiKQ0KLQkJI3ByYWdtYSBjb21tZW50KGxpYiwgIlg6L3BkZi9meGNvcmUvTGliL3JlbF93MzJfdmM2L2ZwZGZkb2NkbGxbcmVsLHczMix2YzZdLmxpYiIpDQotCSNlbmRpZg0KLSNlbmRpZg0KLQ0KLSNlbmRpZiANCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9GWEVUX1NUVUJfSF8KKyNkZWZpbmUgX0ZYRVRfU1RVQl9IXworCisjaW5jbHVkZSAiLi4vLi4vLi4vY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCIgCisjaW5jbHVkZSAiLi4vLi4vLi4vY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9yZW5kZXIuaCIgCisjaW5jbHVkZSAiLi4vLi4vLi4vY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9wYWdlb2JqLmgiIAorI2luY2x1ZGUgIi4uLy4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmZG9jL2ZwZGZfdnQuaCIgCisjaW5jbHVkZSAiLi4vZnhfc3lzdGVtaGFuZGxlci5oIgorI2lmZGVmIEZYX1JFQURFUl9ETEwKKwkjaWZkZWYgX0RFQlVHCisJCSNwcmFnbWEgY29tbWVudChsaWIsICJYOi9wZGYvZnhjb3JlL0xpYi9kYmdfdzMyX3ZjNi9meGNvcmVkbGxbZGJnLHczMix2YzZdLmxpYiIpCisJCSNwcmFnbWEgY29tbWVudChsaWIsICJYOi9wZGYvZnhjb3JlL0xpYi9kYmdfdzMyX3ZjNi9mcGRmZG9jZGxsW2RiZyx3MzIsdmM2XS5saWIiKQorCSNlbHNlCisJCSNwcmFnbWEgY29tbWVudChsaWIsICJYOi9wZGYvZnhjb3JlL0xpYi9yZWxfdzMyX3ZjNi9meGNvcmVkbGxbcmVsLHczMix2YzZdLmxpYiIpCisJCSNwcmFnbWEgY29tbWVudChsaWIsICJYOi9wZGYvZnhjb3JlL0xpYi9yZWxfdzMyX3ZjNi9mcGRmZG9jZGxsW3JlbCx3MzIsdmM2XS5saWIiKQorCSNlbmRpZgorI2VuZGlmCisKKyNlbmRpZiAKKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvQ29uc3RzLmggYi9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9Db25zdHMuaAppbmRleCAzMmIwMjE3Li5jM2E5NTRlIDEwMDY0NAotLS0gYS9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9Db25zdHMuaAorKysgYi9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9Db25zdHMuaApAQCAtMSwxMjYgKzEsMTI2IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9DT05TVFNfSF8NCi0jZGVmaW5lIF9DT05TVFNfSF8NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYm9yZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLWNsYXNzIENKU19Cb3JkZXIgOiBwdWJsaWMgQ0pTX09iamVjdA0KLXsNCi1wdWJsaWM6DQotCUNKU19Cb3JkZXIoSlNGWE9iamVjdCAgcE9iamVjdCkgOiBDSlNfT2JqZWN0KHBPYmplY3QpIHt9Ow0KLQl2aXJ0dWFsIH5DSlNfQm9yZGVyKHZvaWQpe307DQotDQotCURFQ0xBUkVfSlNfQ0xBU1NfQ09OU1QoKTsNCi19Ow0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBkaXNwbGF5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLWNsYXNzIENKU19EaXNwbGF5IDogcHVibGljIENKU19PYmplY3QNCi17DQotcHVibGljOg0KLQlDSlNfRGlzcGxheShKU0ZYT2JqZWN0ICBwT2JqZWN0KSA6IENKU19PYmplY3QocE9iamVjdCkge307DQotCXZpcnR1YWwgfkNKU19EaXNwbGF5KHZvaWQpe307DQotDQotCURFQ0xBUkVfSlNfQ0xBU1NfQ09OU1QoKTsNCi19Ow0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBmb250IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLWNsYXNzIENKU19Gb250IDogcHVibGljIENKU19PYmplY3QNCi17DQotcHVibGljOg0KLQlDSlNfRm9udChKU0ZYT2JqZWN0ICBwT2JqZWN0KSA6IENKU19PYmplY3QocE9iamVjdCkge307DQotCXZpcnR1YWwgfkNKU19Gb250KHZvaWQpe307DQotDQotCURFQ0xBUkVfSlNfQ0xBU1NfQ09OU1QoKTsNCi19Ow0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBoaWdobGlnaHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotY2xhc3MgQ0pTX0hpZ2hsaWdodCA6IHB1YmxpYyBDSlNfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0JQ0pTX0hpZ2hsaWdodChKU0ZYT2JqZWN0ICBwT2JqZWN0KSA6IENKU19PYmplY3QocE9iamVjdCkge307DQotCXZpcnR1YWwgfkNKU19IaWdobGlnaHQodm9pZCl7fTsNCi0NCi0JREVDTEFSRV9KU19DTEFTU19DT05TVCgpOw0KLX07DQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHBvc2l0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLWNsYXNzIENKU19Qb3NpdGlvbiA6IHB1YmxpYyBDSlNfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0JQ0pTX1Bvc2l0aW9uKEpTRlhPYmplY3QgIHBPYmplY3QpIDogQ0pTX09iamVjdChwT2JqZWN0KSB7fTsNCi0JdmlydHVhbCB+Q0pTX1Bvc2l0aW9uKHZvaWQpe307DQotDQotCURFQ0xBUkVfSlNfQ0xBU1NfQ09OU1QoKTsNCi19Ow0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzY2FsZUhvdyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1jbGFzcyBDSlNfU2NhbGVIb3cgOiBwdWJsaWMgQ0pTX09iamVjdA0KLXsNCi1wdWJsaWM6DQotCUNKU19TY2FsZUhvdyhKU0ZYT2JqZWN0ICBwT2JqZWN0KSA6IENKU19PYmplY3QocE9iamVjdCkge307DQotCXZpcnR1YWwgfkNKU19TY2FsZUhvdyh2b2lkKXt9Ow0KLQ0KLQlERUNMQVJFX0pTX0NMQVNTX0NPTlNUKCk7DQotfTsNCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2NhbGVXaGVuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLWNsYXNzIENKU19TY2FsZVdoZW4gOiBwdWJsaWMgQ0pTX09iamVjdA0KLXsNCi1wdWJsaWM6DQotCUNKU19TY2FsZVdoZW4oSlNGWE9iamVjdCAgcE9iamVjdCkgOiBDSlNfT2JqZWN0KHBPYmplY3QpIHt9Ow0KLQl2aXJ0dWFsIH5DSlNfU2NhbGVXaGVuKHZvaWQpe307DQotDQotCURFQ0xBUkVfSlNfQ0xBU1NfQ09OU1QoKTsNCi19Ow0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdHlsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1jbGFzcyBDSlNfU3R5bGUgOiBwdWJsaWMgQ0pTX09iamVjdA0KLXsNCi1wdWJsaWM6DQotCUNKU19TdHlsZShKU0ZYT2JqZWN0ICBwT2JqZWN0KSA6IENKU19PYmplY3QocE9iamVjdCkge307DQotCXZpcnR1YWwgfkNKU19TdHlsZSh2b2lkKXt9Ow0KLQ0KLQlERUNMQVJFX0pTX0NMQVNTX0NPTlNUKCk7DQotfTsNCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gem9vbXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotY2xhc3MgQ0pTX1pvb210eXBlIDogcHVibGljIENKU19PYmplY3QNCi17DQotcHVibGljOg0KLQlDSlNfWm9vbXR5cGUoSlNGWE9iamVjdCAgcE9iamVjdCkgOiBDSlNfT2JqZWN0KHBPYmplY3QpIHt9Ow0KLQl2aXJ0dWFsIH5DSlNfWm9vbXR5cGUodm9pZCl7fTsNCi0NCi0JREVDTEFSRV9KU19DTEFTU19DT05TVCgpOw0KLX07DQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENKU19HbG9iYWxDb25zdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotY2xhc3MgQ0pTX0dsb2JhbENvbnN0cyA6IHB1YmxpYyBDSlNfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0Jc3RhdGljIGludAkJCQlJbml0KElKU19SdW50aW1lKiBwUnVudGltZSk7DQotfTsNCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0pTX0dsb2JhbEFycmF5cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1jbGFzcyBDSlNfR2xvYmFsQXJyYXlzIDogcHVibGljIENKU19PYmplY3QNCi17DQotcHVibGljOg0KLQlzdGF0aWMgaW50CQkJCUluaXQoSUpTX1J1bnRpbWUqIHBSdW50aW1lKTsNCi19Ow0KLQ0KLSNlbmRpZiAvL19DT05TVFNfSF8NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9DT05TVFNfSF8KKyNkZWZpbmUgX0NPTlNUU19IXworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYm9yZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitjbGFzcyBDSlNfQm9yZGVyIDogcHVibGljIENKU19PYmplY3QKK3sKK3B1YmxpYzoKKwlDSlNfQm9yZGVyKEpTRlhPYmplY3QgIHBPYmplY3QpIDogQ0pTX09iamVjdChwT2JqZWN0KSB7fTsKKwl2aXJ0dWFsIH5DSlNfQm9yZGVyKHZvaWQpe307CisKKwlERUNMQVJFX0pTX0NMQVNTX0NPTlNUKCk7Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZGlzcGxheSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworY2xhc3MgQ0pTX0Rpc3BsYXkgOiBwdWJsaWMgQ0pTX09iamVjdAoreworcHVibGljOgorCUNKU19EaXNwbGF5KEpTRlhPYmplY3QgIHBPYmplY3QpIDogQ0pTX09iamVjdChwT2JqZWN0KSB7fTsKKwl2aXJ0dWFsIH5DSlNfRGlzcGxheSh2b2lkKXt9OworCisJREVDTEFSRV9KU19DTEFTU19DT05TVCgpOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGZvbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2NsYXNzIENKU19Gb250IDogcHVibGljIENKU19PYmplY3QKK3sKK3B1YmxpYzoKKwlDSlNfRm9udChKU0ZYT2JqZWN0ICBwT2JqZWN0KSA6IENKU19PYmplY3QocE9iamVjdCkge307CisJdmlydHVhbCB+Q0pTX0ZvbnQodm9pZCl7fTsKKworCURFQ0xBUkVfSlNfQ0xBU1NfQ09OU1QoKTsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBoaWdobGlnaHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2NsYXNzIENKU19IaWdobGlnaHQgOiBwdWJsaWMgQ0pTX09iamVjdAoreworcHVibGljOgorCUNKU19IaWdobGlnaHQoSlNGWE9iamVjdCAgcE9iamVjdCkgOiBDSlNfT2JqZWN0KHBPYmplY3QpIHt9OworCXZpcnR1YWwgfkNKU19IaWdobGlnaHQodm9pZCl7fTsKKworCURFQ0xBUkVfSlNfQ0xBU1NfQ09OU1QoKTsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwb3NpdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworY2xhc3MgQ0pTX1Bvc2l0aW9uIDogcHVibGljIENKU19PYmplY3QKK3sKK3B1YmxpYzoKKwlDSlNfUG9zaXRpb24oSlNGWE9iamVjdCAgcE9iamVjdCkgOiBDSlNfT2JqZWN0KHBPYmplY3QpIHt9OworCXZpcnR1YWwgfkNKU19Qb3NpdGlvbih2b2lkKXt9OworCisJREVDTEFSRV9KU19DTEFTU19DT05TVCgpOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNjYWxlSG93IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitjbGFzcyBDSlNfU2NhbGVIb3cgOiBwdWJsaWMgQ0pTX09iamVjdAoreworcHVibGljOgorCUNKU19TY2FsZUhvdyhKU0ZYT2JqZWN0ICBwT2JqZWN0KSA6IENKU19PYmplY3QocE9iamVjdCkge307CisJdmlydHVhbCB+Q0pTX1NjYWxlSG93KHZvaWQpe307CisKKwlERUNMQVJFX0pTX0NMQVNTX0NPTlNUKCk7Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2NhbGVXaGVuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitjbGFzcyBDSlNfU2NhbGVXaGVuIDogcHVibGljIENKU19PYmplY3QKK3sKK3B1YmxpYzoKKwlDSlNfU2NhbGVXaGVuKEpTRlhPYmplY3QgIHBPYmplY3QpIDogQ0pTX09iamVjdChwT2JqZWN0KSB7fTsKKwl2aXJ0dWFsIH5DSlNfU2NhbGVXaGVuKHZvaWQpe307CisKKwlERUNMQVJFX0pTX0NMQVNTX0NPTlNUKCk7Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3R5bGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2NsYXNzIENKU19TdHlsZSA6IHB1YmxpYyBDSlNfT2JqZWN0Cit7CitwdWJsaWM6CisJQ0pTX1N0eWxlKEpTRlhPYmplY3QgIHBPYmplY3QpIDogQ0pTX09iamVjdChwT2JqZWN0KSB7fTsKKwl2aXJ0dWFsIH5DSlNfU3R5bGUodm9pZCl7fTsKKworCURFQ0xBUkVfSlNfQ0xBU1NfQ09OU1QoKTsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB6b29tdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworY2xhc3MgQ0pTX1pvb210eXBlIDogcHVibGljIENKU19PYmplY3QKK3sKK3B1YmxpYzoKKwlDSlNfWm9vbXR5cGUoSlNGWE9iamVjdCAgcE9iamVjdCkgOiBDSlNfT2JqZWN0KHBPYmplY3QpIHt9OworCXZpcnR1YWwgfkNKU19ab29tdHlwZSh2b2lkKXt9OworCisJREVDTEFSRV9KU19DTEFTU19DT05TVCgpOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENKU19HbG9iYWxDb25zdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2NsYXNzIENKU19HbG9iYWxDb25zdHMgOiBwdWJsaWMgQ0pTX09iamVjdAoreworcHVibGljOgorCXN0YXRpYyBpbnQJCQkJSW5pdChJSlNfUnVudGltZSogcFJ1bnRpbWUpOworfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENKU19HbG9iYWxBcnJheXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2NsYXNzIENKU19HbG9iYWxBcnJheXMgOiBwdWJsaWMgQ0pTX09iamVjdAoreworcHVibGljOgorCXN0YXRpYyBpbnQJCQkJSW5pdChJSlNfUnVudGltZSogcFJ1bnRpbWUpOworfTsKKworI2VuZGlmIC8vX0NPTlNUU19IXworCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9Eb2N1bWVudC5oIGIvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvRG9jdW1lbnQuaAppbmRleCAzZTk2NjliOC4uY2E4YjUxYiAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvRG9jdW1lbnQuaAorKysgYi9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9Eb2N1bWVudC5oCkBAIC0xLDI4MiArMSwyODIgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0RPQ1VNRU5UX0hfDQotI2RlZmluZSBfRE9DVU1FTlRfSF8NCi0NCi0NCi0NCi1jbGFzcyBQcmludFBhcmFtc09iaiA6IHB1YmxpYyBDSlNfRW1iZWRPYmoNCi17DQotcHVibGljOg0KLQlQcmludFBhcmFtc09iaihDSlNfT2JqZWN0KiBwSlNPYmplY3QpOw0KLQl2aXJ0dWFsIH5QcmludFBhcmFtc09iaigpe30NCi0JDQotcHVibGljOg0KLQlGWF9CT09MIGJVSTsNCi0JaW50IG5TdGFydDsNCi0JaW50IG5FbmQ7DQotCUZYX0JPT0wgYlNpbGVudDsNCi0JRlhfQk9PTCBiU2hyaW5rVG9GaXQ7DQotCUZYX0JPT0wgYlByaW50QXNJbWFnZTsNCi0JRlhfQk9PTCBiUmV2ZXJzZTsNCi0JRlhfQk9PTCBiQW5ub3RhdGlvbnM7DQotfTsNCi0NCi1jbGFzcyBDSlNfUHJpbnRQYXJhbXNPYmogOiBwdWJsaWMgQ0pTX09iamVjdA0KLXsNCi1wdWJsaWM6DQotCUNKU19QcmludFBhcmFtc09iaihKU0ZYT2JqZWN0IHBPYmplY3QpIDogQ0pTX09iamVjdChwT2JqZWN0KSB7fQ0KLQl2aXJ0dWFsIH5DSlNfUHJpbnRQYXJhbXNPYmooKXt9DQotCQ0KLQlERUNMQVJFX0pTX0NMQVNTKENKU19QcmludFBhcmFtc09iaik7DQotfTsNCi0NCi0NCi1jbGFzcyBJY29uOw0KLWNsYXNzIEZpZWxkOw0KLQ0KLXN0cnVjdCBJY29uRWxlbWVudA0KLXsNCi0JSWNvbkVsZW1lbnQoKSA6IEljb25OYW1lKEwiIiksIEljb25TdHJlYW0oTlVMTCksIE5leHRJY29uKE5VTEwpe30NCi0JdmlydHVhbCB+SWNvbkVsZW1lbnQoKQ0KLQl7DQotCX0NCi0JQ0ZYX1dpZGVTdHJpbmcJSWNvbk5hbWU7DQotCUljb25FbGVtZW50KglOZXh0SWNvbjsNCi0JSWNvbioJCQlJY29uU3RyZWFtOw0KLX07DQotDQotY2xhc3MgSWNvblRyZWUNCi17DQotcHVibGljOg0KLQlJY29uVHJlZSgpOm1fcEhlYWQoTlVMTCksIG1fcEVuZChOVUxMKSwgbV9pTGVuZ3RoKDApDQotCXsNCi0NCi0JfQ0KLQ0KLQl2aXJ0dWFsIH5JY29uVHJlZSgpDQotCXsNCi0JfQ0KLQ0KLXB1YmxpYzoNCi0Jdm9pZAkJCUluc2VydEljb25FbGVtZW50KEljb25FbGVtZW50KiBwTmV3SWNvbik7DQotCXZvaWQJCQlEZWxldGVJY29uRWxlbWVudChDRlhfV2lkZVN0cmluZyBzd0ljb25OYW1lKTsNCi0Jdm9pZAkJCURlbGV0ZUljb25UcmVlKCk7DQotCWludAkJCQlHZXRMZW5ndGgoKTsNCi0JSWNvbkVsZW1lbnQqCW9wZXJhdG9yW10oaW50IGlJbmRleCk7DQotDQotcHJpdmF0ZToNCi0JSWNvbkVsZW1lbnQqCW1fcEhlYWQ7DQotCUljb25FbGVtZW50KgltX3BFbmQ7DQotCWludAkJCQltX2lMZW5ndGg7DQotfTsNCi0NCi1zdHJ1Y3QgQ0pTX0RlbGF5RGF0YTsNCi1zdHJ1Y3QgQ0pTX0RlbGF5QW5ub3Q7DQotc3RydWN0IENKU19Bbm5vdE9iajsNCi0NCi1jbGFzcyBEb2N1bWVudCA6IHB1YmxpYyBDSlNfRW1iZWRPYmoNCi17DQotcHVibGljOg0KLQlEb2N1bWVudChDSlNfT2JqZWN0KiBwSlNPYmplY3QpOw0KLQl2aXJ0dWFsIH5Eb2N1bWVudCgpOw0KLQ0KLXB1YmxpYzoNCi0JRlhfQk9PTAlBREJFKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wJYXV0aG9yKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wJYmFzZVVSTChPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCWJvb2ttYXJrUm9vdChPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCWNhbGN1bGF0ZShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCUNvbGxhYihPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCWNyZWF0aW9uRGF0ZShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCWNyZWF0b3IoT0JKX1BST1BfUEFSQU1TKTsNCi0JRlhfQk9PTAlkZWxheShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCWRpcnR5KE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wJZG9jdW1lbnRGaWxlTmFtZShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIGV4dGVybmFsKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wJZmlsZXNpemUoT0JKX1BST1BfUEFSQU1TKTsNCi0JRlhfQk9PTAlpY29ucyhPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCWluZm8oT0JKX1BST1BfUEFSQU1TKTsNCi0JRlhfQk9PTAlrZXl3b3JkcyhPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCWxheW91dChPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCW1lZGlhKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wJbW9kRGF0ZShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCW1vdXNlWChPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCW1vdXNlWShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCW51bUZpZWxkcyhPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCW51bVBhZ2VzKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wJcGFnZU51bShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCXBhZ2VXaW5kb3dSZWN0KE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wJcGF0aChPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCXByb2R1Y2VyKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wJc3ViamVjdChPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCXRpdGxlKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wJem9vbShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCXpvb21UeXBlKE9CSl9QUk9QX1BBUkFNUyk7DQotDQotCUZYX0JPT0wgYWRkQW5ub3QoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MCWFkZEZpZWxkKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTAlhZGRMaW5rKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTAlhZGRJY29uKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTAljYWxjdWxhdGVOb3coT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MCWNsb3NlRG9jKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTAljcmVhdGVEYXRhT2JqZWN0KE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTCBkZWxldGVQYWdlcyhPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJZXhwb3J0QXNUZXh0KE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTAlleHBvcnRBc0ZERihPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJZXhwb3J0QXNYRkRGKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTCBleHRyYWN0UGFnZXMoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MCWdldEFubm90KE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTAlnZXRBbm5vdHMoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MCWdldEFubm90M0QoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MCWdldEFubm90czNEKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTAlnZXRGaWVsZChPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJZ2V0SWNvbihPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJZ2V0TGlua3MoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MCWdldE50aEZpZWxkTmFtZShPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJZ2V0T0NHcyhPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJZ2V0UGFnZUJveChPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJZ2V0UGFnZU50aFdvcmQoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MCWdldFBhZ2VOdGhXb3JkUXVhZHMoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MCWdldFBhZ2VOdW1Xb3JkcyhPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wgZ2V0UHJpbnRQYXJhbXMoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MIGdldFVSTChPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJaW1wb3J0QW5GREYoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MCWltcG9ydEFuWEZERihPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJaW1wb3J0VGV4dERhdGEoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MIGluc2VydFBhZ2VzKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTAltYWlsRm9ybShPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJcHJpbnQoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MCXJlbW92ZUZpZWxkKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTCByZXBsYWNlUGFnZXMoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MCXJlc2V0Rm9ybShPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJc2F2ZUFzKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTAlzdWJtaXRGb3JtKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTAltYWlsRG9jKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTAlyZW1vdmVJY29uKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JDQotcHVibGljOg0KLQl2b2lkIEF0dGFjaERvYyhDUERGU0RLX0RvY3VtZW50KiBwRG9jKTsNCi0JQ1BERlNES19Eb2N1bWVudCogR2V0UmVhZGVyRG9jKCk7DQotDQotCXN0YXRpYyBGWF9CT09MCQkJCUV4dHJhY3RGaWxlTmFtZShDUERGU0RLX0RvY3VtZW50KiBwRG9jLCBDRlhfQnl0ZVN0cmluZyYgc3RyRmlsZU5hbWUpOw0KLQlzdGF0aWMgRlhfQk9PTAkJCQlFeHRyYWN0Rm9sZGVyTmFtZShDUERGU0RLX0RvY3VtZW50KiBwRG9jLCBDRlhfQnl0ZVN0cmluZyYgc3RyRm9sZGVyTmFtZSk7DQotDQotcHVibGljOg0KLQl2b2lkCQkJCQkJQWRkRGVsYXlEYXRhKENKU19EZWxheURhdGEqIHBEYXRhKTsNCi0Jdm9pZAkJCQkJCURvRmllbGREZWxheShjb25zdCBDRlhfV2lkZVN0cmluZyYgc0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgpOw0KLQ0KLQl2b2lkCQkJCQkJQWRkRGVsYXlBbm5vdERhdGEoQ0pTX0Fubm90T2JqICpwRGF0YSk7DQotCXZvaWQJCQkJCQlEb0Fubm90RGVsYXkoKTsNCi0Jdm9pZAkJCQkJCVNldElzb2xhdGUodjg6Oklzb2xhdGUqIGlzb2xhdGUpIHttX2lzb2xhdGUgPSBpc29sYXRlO30NCi0NCi1wcml2YXRlOg0KLQlDRlhfV2lkZVN0cmluZwkJCQlSZXZlcnNhbFN0cihDRlhfV2lkZVN0cmluZyBjYkZyb20pOw0KLQlDRlhfV2lkZVN0cmluZwkJCQlDdXRTdHJpbmcoQ0ZYX1dpZGVTdHJpbmcgY2JGcm9tKTsNCi0JYm9vbAkJCQkJCUlzRW5jbG9zZWRJblJlY3QoQ0ZYX0Zsb2F0UmVjdCByZWN0LCBDRlhfRmxvYXRSZWN0IExpbmtSZWN0KTsNCi0JaW50CQkJCQkJCUNvdW50V29yZHMoQ1BERl9UZXh0T2JqZWN0KiBwVGV4dE9iaik7DQotCUNGWF9XaWRlU3RyaW5nCQkJCUdldE9ialdvcmRTdHIoQ1BERl9UZXh0T2JqZWN0KiBwVGV4dE9iaiwgaW50IG5Xb3JkSW5kZXgpOw0KLQ0KLQlGWF9CT09MCQkJCQkJUGFyc2VyUGFyYW1zKEpTT2JqZWN0ICpwT2JqLENKU19Bbm5vdE9iaiYgYW5ub3RvYmopOw0KLQ0KLXByaXZhdGU6DQotCXY4OjpJc29sYXRlKgkJCQkJbV9pc29sYXRlOw0KLQlJY29uVHJlZSoJCQkJCW1fcEljb25UcmVlOw0KLQlDUERGU0RLX0RvY3VtZW50KgkJCW1fcERvY3VtZW50Ow0KLQlDRlhfV2lkZVN0cmluZwkJCQltX2N3QmFzZVVSTDsNCi0NCi0JRlhfQk9PTAkJCQkJCQkJbV9iRGVsYXk7DQotCUNGWF9BcnJheVRlbXBsYXRlPENKU19EZWxheURhdGEqPgltX0RlbGF5RGF0YTsNCi0JQ0ZYX0FycmF5VGVtcGxhdGU8Q0pTX0Fubm90T2JqKj4JbV9EZWxheUFubm90RGF0YTsNCi19Ow0KLQ0KLWNsYXNzIENKU19Eb2N1bWVudCA6IHB1YmxpYyBDSlNfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0JQ0pTX0RvY3VtZW50KEpTRlhPYmplY3QgcE9iamVjdCkgOiBDSlNfT2JqZWN0KHBPYmplY3QpIHt9Ow0KLQl2aXJ0dWFsIH5DSlNfRG9jdW1lbnQoKXt9Ow0KLQ0KLQl2aXJ0dWFsIEZYX0JPT0wJSW5pdEluc3RhbmNlKElGWEpTX0NvbnRleHQqIGNjKTsJDQotDQotCURFQ0xBUkVfSlNfQ0xBU1MoQ0pTX0RvY3VtZW50KTsNCi0NCi0JSlNfU1RBVElDX1BST1AoQURCRSwgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfUFJPUChhdXRob3IsIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX1BST1AoYmFzZVVSTCwgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfUFJPUChib29rbWFya1Jvb3QsIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX1BST1AoY2FsY3VsYXRlLCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19QUk9QKENvbGxhYiwgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfUFJPUChjcmVhdGlvbkRhdGUsIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX1BST1AoY3JlYXRvciwgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfUFJPUChkZWxheSwgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfUFJPUChkaXJ0eSwgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfUFJPUChkb2N1bWVudEZpbGVOYW1lLCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19QUk9QKGV4dGVybmFsLCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19QUk9QKGZpbGVzaXplLCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19QUk9QKGljb25zLCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19QUk9QKGluZm8sIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX1BST1Aoa2V5d29yZHMsIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX1BST1AobGF5b3V0LCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19QUk9QKG1lZGlhLCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19QUk9QKG1vZERhdGUsIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX1BST1AobW91c2VYLCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19QUk9QKG1vdXNlWSwgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfUFJPUChudW1GaWVsZHMsIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX1BST1AobnVtUGFnZXMsIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX1BST1AocGFnZU51bSwgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfUFJPUChwYWdlV2luZG93UmVjdCwgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfUFJPUChwYXRoLCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19QUk9QKHByb2R1Y2VyLCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19QUk9QKHN1YmplY3QsIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX1BST1AodGl0bGUsIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX1BST1Aoem9vbSwgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfUFJPUCh6b29tVHlwZSwgRG9jdW1lbnQpOw0KLQ0KLQlKU19TVEFUSUNfTUVUSE9EKGFkZEFubm90LERvY3VtZW50KTsNCi0JSlNfU1RBVElDX01FVEhPRChhZGRGaWVsZCwgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKGFkZExpbmssIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX01FVEhPRChhZGRJY29uLCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoY2FsY3VsYXRlTm93LCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoY2xvc2VEb2MsIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX01FVEhPRChjcmVhdGVEYXRhT2JqZWN0LCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoZGVsZXRlUGFnZXMsIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX01FVEhPRChleHBvcnRBc1RleHQsIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX01FVEhPRChleHBvcnRBc0ZERiwgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKGV4cG9ydEFzWEZERiwgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKGV4dHJhY3RQYWdlcywgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKGdldEFubm90LCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoZ2V0QW5ub3RzLCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoZ2V0QW5ub3QzRCwgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKGdldEFubm90czNELCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoZ2V0RmllbGQsIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX01FVEhPRChnZXRJY29uLCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoZ2V0TGlua3MsIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX01FVEhPRChnZXROdGhGaWVsZE5hbWUsIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX01FVEhPRChnZXRPQ0dzLCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoZ2V0UGFnZUJveCwgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKGdldFBhZ2VOdGhXb3JkLCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoZ2V0UGFnZU50aFdvcmRRdWFkcywgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKGdldFBhZ2VOdW1Xb3JkcywgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKGdldFByaW50UGFyYW1zLCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoZ2V0VVJMLCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoaW1wb3J0QW5GREYsIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX01FVEhPRChpbXBvcnRBblhGREYsIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX01FVEhPRChpbXBvcnRUZXh0RGF0YSwgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKGluc2VydFBhZ2VzLCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19NRVRIT0QobWFpbEZvcm0sIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX01FVEhPRChwcmludCwgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKHJlbW92ZUZpZWxkLCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19NRVRIT0QocmVwbGFjZVBhZ2VzLCBEb2N1bWVudCk7DQotCUpTX1NUQVRJQ19NRVRIT0QocmVtb3ZlSWNvbiwgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKHJlc2V0Rm9ybSwgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKHNhdmVBcywgRG9jdW1lbnQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKHN1Ym1pdEZvcm0sIERvY3VtZW50KTsNCi0JSlNfU1RBVElDX01FVEhPRChtYWlsRG9jLCBEb2N1bWVudCk7DQotfTsNCi0NCi0jZW5kaWYvL19ET0NVTUVOVF9IXw0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0RPQ1VNRU5UX0hfCisjZGVmaW5lIF9ET0NVTUVOVF9IXworCisKKworY2xhc3MgUHJpbnRQYXJhbXNPYmogOiBwdWJsaWMgQ0pTX0VtYmVkT2JqCit7CitwdWJsaWM6CisJUHJpbnRQYXJhbXNPYmooQ0pTX09iamVjdCogcEpTT2JqZWN0KTsKKwl2aXJ0dWFsIH5QcmludFBhcmFtc09iaigpe30KKwkKK3B1YmxpYzoKKwlGWF9CT09MIGJVSTsKKwlpbnQgblN0YXJ0OworCWludCBuRW5kOworCUZYX0JPT0wgYlNpbGVudDsKKwlGWF9CT09MIGJTaHJpbmtUb0ZpdDsKKwlGWF9CT09MIGJQcmludEFzSW1hZ2U7CisJRlhfQk9PTCBiUmV2ZXJzZTsKKwlGWF9CT09MIGJBbm5vdGF0aW9uczsKK307CisKK2NsYXNzIENKU19QcmludFBhcmFtc09iaiA6IHB1YmxpYyBDSlNfT2JqZWN0Cit7CitwdWJsaWM6CisJQ0pTX1ByaW50UGFyYW1zT2JqKEpTRlhPYmplY3QgcE9iamVjdCkgOiBDSlNfT2JqZWN0KHBPYmplY3QpIHt9CisJdmlydHVhbCB+Q0pTX1ByaW50UGFyYW1zT2JqKCl7fQorCQorCURFQ0xBUkVfSlNfQ0xBU1MoQ0pTX1ByaW50UGFyYW1zT2JqKTsKK307CisKKworY2xhc3MgSWNvbjsKK2NsYXNzIEZpZWxkOworCitzdHJ1Y3QgSWNvbkVsZW1lbnQKK3sKKwlJY29uRWxlbWVudCgpIDogSWNvbk5hbWUoTCIiKSwgSWNvblN0cmVhbShOVUxMKSwgTmV4dEljb24oTlVMTCl7fQorCXZpcnR1YWwgfkljb25FbGVtZW50KCkKKwl7CisJfQorCUNGWF9XaWRlU3RyaW5nCUljb25OYW1lOworCUljb25FbGVtZW50KglOZXh0SWNvbjsKKwlJY29uKgkJCUljb25TdHJlYW07Cit9OworCitjbGFzcyBJY29uVHJlZQoreworcHVibGljOgorCUljb25UcmVlKCk6bV9wSGVhZChOVUxMKSwgbV9wRW5kKE5VTEwpLCBtX2lMZW5ndGgoMCkKKwl7CisKKwl9CisKKwl2aXJ0dWFsIH5JY29uVHJlZSgpCisJeworCX0KKworcHVibGljOgorCXZvaWQJCQlJbnNlcnRJY29uRWxlbWVudChJY29uRWxlbWVudCogcE5ld0ljb24pOworCXZvaWQJCQlEZWxldGVJY29uRWxlbWVudChDRlhfV2lkZVN0cmluZyBzd0ljb25OYW1lKTsKKwl2b2lkCQkJRGVsZXRlSWNvblRyZWUoKTsKKwlpbnQJCQkJR2V0TGVuZ3RoKCk7CisJSWNvbkVsZW1lbnQqCW9wZXJhdG9yW10oaW50IGlJbmRleCk7CisKK3ByaXZhdGU6CisJSWNvbkVsZW1lbnQqCW1fcEhlYWQ7CisJSWNvbkVsZW1lbnQqCW1fcEVuZDsKKwlpbnQJCQkJbV9pTGVuZ3RoOworfTsKKworc3RydWN0IENKU19EZWxheURhdGE7CitzdHJ1Y3QgQ0pTX0RlbGF5QW5ub3Q7CitzdHJ1Y3QgQ0pTX0Fubm90T2JqOworCitjbGFzcyBEb2N1bWVudCA6IHB1YmxpYyBDSlNfRW1iZWRPYmoKK3sKK3B1YmxpYzoKKwlEb2N1bWVudChDSlNfT2JqZWN0KiBwSlNPYmplY3QpOworCXZpcnR1YWwgfkRvY3VtZW50KCk7CisKK3B1YmxpYzoKKwlGWF9CT09MCUFEQkUoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MCWF1dGhvcihPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wJYmFzZVVSTChPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wJYm9va21hcmtSb290KE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTAljYWxjdWxhdGUoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MCUNvbGxhYihPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wJY3JlYXRpb25EYXRlKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTAljcmVhdG9yKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTAlkZWxheShPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wJZGlydHkoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MCWRvY3VtZW50RmlsZU5hbWUoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIGV4dGVybmFsKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTAlmaWxlc2l6ZShPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wJaWNvbnMoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MCWluZm8oT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MCWtleXdvcmRzKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTAlsYXlvdXQoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MCW1lZGlhKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTAltb2REYXRlKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTAltb3VzZVgoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MCW1vdXNlWShPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wJbnVtRmllbGRzKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTAludW1QYWdlcyhPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wJcGFnZU51bShPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wJcGFnZVdpbmRvd1JlY3QoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MCXBhdGgoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MCXByb2R1Y2VyKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTAlzdWJqZWN0KE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTAl0aXRsZShPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wJem9vbShPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wJem9vbVR5cGUoT0JKX1BST1BfUEFSQU1TKTsKKworCUZYX0JPT0wgYWRkQW5ub3QoT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wJYWRkRmllbGQoT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wJYWRkTGluayhPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTAlhZGRJY29uKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MCWNhbGN1bGF0ZU5vdyhPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTAljbG9zZURvYyhPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTAljcmVhdGVEYXRhT2JqZWN0KE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MIGRlbGV0ZVBhZ2VzKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MCWV4cG9ydEFzVGV4dChPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTAlleHBvcnRBc0ZERihPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTAlleHBvcnRBc1hGREYoT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wgZXh0cmFjdFBhZ2VzKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MCWdldEFubm90KE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MCWdldEFubm90cyhPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTAlnZXRBbm5vdDNEKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MCWdldEFubm90czNEKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MCWdldEZpZWxkKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MCWdldEljb24oT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wJZ2V0TGlua3MoT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wJZ2V0TnRoRmllbGROYW1lKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MCWdldE9DR3MoT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wJZ2V0UGFnZUJveChPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTAlnZXRQYWdlTnRoV29yZChPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTAlnZXRQYWdlTnRoV29yZFF1YWRzKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MCWdldFBhZ2VOdW1Xb3JkcyhPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTCBnZXRQcmludFBhcmFtcyhPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTCBnZXRVUkwoT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wJaW1wb3J0QW5GREYoT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wJaW1wb3J0QW5YRkRGKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MCWltcG9ydFRleHREYXRhKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MIGluc2VydFBhZ2VzKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MCW1haWxGb3JtKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MCXByaW50KE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MCXJlbW92ZUZpZWxkKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MIHJlcGxhY2VQYWdlcyhPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTAlyZXNldEZvcm0oT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wJc2F2ZUFzKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MCXN1Ym1pdEZvcm0oT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wJbWFpbERvYyhPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTAlyZW1vdmVJY29uKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwkKK3B1YmxpYzoKKwl2b2lkIEF0dGFjaERvYyhDUERGU0RLX0RvY3VtZW50KiBwRG9jKTsKKwlDUERGU0RLX0RvY3VtZW50KiBHZXRSZWFkZXJEb2MoKTsKKworCXN0YXRpYyBGWF9CT09MCQkJCUV4dHJhY3RGaWxlTmFtZShDUERGU0RLX0RvY3VtZW50KiBwRG9jLCBDRlhfQnl0ZVN0cmluZyYgc3RyRmlsZU5hbWUpOworCXN0YXRpYyBGWF9CT09MCQkJCUV4dHJhY3RGb2xkZXJOYW1lKENQREZTREtfRG9jdW1lbnQqIHBEb2MsIENGWF9CeXRlU3RyaW5nJiBzdHJGb2xkZXJOYW1lKTsKKworcHVibGljOgorCXZvaWQJCQkJCQlBZGREZWxheURhdGEoQ0pTX0RlbGF5RGF0YSogcERhdGEpOworCXZvaWQJCQkJCQlEb0ZpZWxkRGVsYXkoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4KTsKKworCXZvaWQJCQkJCQlBZGREZWxheUFubm90RGF0YShDSlNfQW5ub3RPYmogKnBEYXRhKTsKKwl2b2lkCQkJCQkJRG9Bbm5vdERlbGF5KCk7CisJdm9pZAkJCQkJCVNldElzb2xhdGUodjg6Oklzb2xhdGUqIGlzb2xhdGUpIHttX2lzb2xhdGUgPSBpc29sYXRlO30KKworcHJpdmF0ZToKKwlDRlhfV2lkZVN0cmluZwkJCQlSZXZlcnNhbFN0cihDRlhfV2lkZVN0cmluZyBjYkZyb20pOworCUNGWF9XaWRlU3RyaW5nCQkJCUN1dFN0cmluZyhDRlhfV2lkZVN0cmluZyBjYkZyb20pOworCWJvb2wJCQkJCQlJc0VuY2xvc2VkSW5SZWN0KENGWF9GbG9hdFJlY3QgcmVjdCwgQ0ZYX0Zsb2F0UmVjdCBMaW5rUmVjdCk7CisJaW50CQkJCQkJCUNvdW50V29yZHMoQ1BERl9UZXh0T2JqZWN0KiBwVGV4dE9iaik7CisJQ0ZYX1dpZGVTdHJpbmcJCQkJR2V0T2JqV29yZFN0cihDUERGX1RleHRPYmplY3QqIHBUZXh0T2JqLCBpbnQgbldvcmRJbmRleCk7CisKKwlGWF9CT09MCQkJCQkJUGFyc2VyUGFyYW1zKEpTT2JqZWN0ICpwT2JqLENKU19Bbm5vdE9iaiYgYW5ub3RvYmopOworCitwcml2YXRlOgorCXY4OjpJc29sYXRlKgkJCQkJbV9pc29sYXRlOworCUljb25UcmVlKgkJCQkJbV9wSWNvblRyZWU7CisJQ1BERlNES19Eb2N1bWVudCoJCQltX3BEb2N1bWVudDsKKwlDRlhfV2lkZVN0cmluZwkJCQltX2N3QmFzZVVSTDsKKworCUZYX0JPT0wJCQkJCQkJCW1fYkRlbGF5OworCUNGWF9BcnJheVRlbXBsYXRlPENKU19EZWxheURhdGEqPgltX0RlbGF5RGF0YTsKKwlDRlhfQXJyYXlUZW1wbGF0ZTxDSlNfQW5ub3RPYmoqPgltX0RlbGF5QW5ub3REYXRhOworfTsKKworY2xhc3MgQ0pTX0RvY3VtZW50IDogcHVibGljIENKU19PYmplY3QKK3sKK3B1YmxpYzoKKwlDSlNfRG9jdW1lbnQoSlNGWE9iamVjdCBwT2JqZWN0KSA6IENKU19PYmplY3QocE9iamVjdCkge307CisJdmlydHVhbCB+Q0pTX0RvY3VtZW50KCl7fTsKKworCXZpcnR1YWwgRlhfQk9PTAlJbml0SW5zdGFuY2UoSUZYSlNfQ29udGV4dCogY2MpOwkKKworCURFQ0xBUkVfSlNfQ0xBU1MoQ0pTX0RvY3VtZW50KTsKKworCUpTX1NUQVRJQ19QUk9QKEFEQkUsIERvY3VtZW50KTsKKwlKU19TVEFUSUNfUFJPUChhdXRob3IsIERvY3VtZW50KTsKKwlKU19TVEFUSUNfUFJPUChiYXNlVVJMLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX1BST1AoYm9va21hcmtSb290LCBEb2N1bWVudCk7CisJSlNfU1RBVElDX1BST1AoY2FsY3VsYXRlLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX1BST1AoQ29sbGFiLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX1BST1AoY3JlYXRpb25EYXRlLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX1BST1AoY3JlYXRvciwgRG9jdW1lbnQpOworCUpTX1NUQVRJQ19QUk9QKGRlbGF5LCBEb2N1bWVudCk7CisJSlNfU1RBVElDX1BST1AoZGlydHksIERvY3VtZW50KTsKKwlKU19TVEFUSUNfUFJPUChkb2N1bWVudEZpbGVOYW1lLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX1BST1AoZXh0ZXJuYWwsIERvY3VtZW50KTsKKwlKU19TVEFUSUNfUFJPUChmaWxlc2l6ZSwgRG9jdW1lbnQpOworCUpTX1NUQVRJQ19QUk9QKGljb25zLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX1BST1AoaW5mbywgRG9jdW1lbnQpOworCUpTX1NUQVRJQ19QUk9QKGtleXdvcmRzLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX1BST1AobGF5b3V0LCBEb2N1bWVudCk7CisJSlNfU1RBVElDX1BST1AobWVkaWEsIERvY3VtZW50KTsKKwlKU19TVEFUSUNfUFJPUChtb2REYXRlLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX1BST1AobW91c2VYLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX1BST1AobW91c2VZLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX1BST1AobnVtRmllbGRzLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX1BST1AobnVtUGFnZXMsIERvY3VtZW50KTsKKwlKU19TVEFUSUNfUFJPUChwYWdlTnVtLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX1BST1AocGFnZVdpbmRvd1JlY3QsIERvY3VtZW50KTsKKwlKU19TVEFUSUNfUFJPUChwYXRoLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX1BST1AocHJvZHVjZXIsIERvY3VtZW50KTsKKwlKU19TVEFUSUNfUFJPUChzdWJqZWN0LCBEb2N1bWVudCk7CisJSlNfU1RBVElDX1BST1AodGl0bGUsIERvY3VtZW50KTsKKwlKU19TVEFUSUNfUFJPUCh6b29tLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX1BST1Aoem9vbVR5cGUsIERvY3VtZW50KTsKKworCUpTX1NUQVRJQ19NRVRIT0QoYWRkQW5ub3QsRG9jdW1lbnQpOworCUpTX1NUQVRJQ19NRVRIT0QoYWRkRmllbGQsIERvY3VtZW50KTsKKwlKU19TVEFUSUNfTUVUSE9EKGFkZExpbmssIERvY3VtZW50KTsKKwlKU19TVEFUSUNfTUVUSE9EKGFkZEljb24sIERvY3VtZW50KTsKKwlKU19TVEFUSUNfTUVUSE9EKGNhbGN1bGF0ZU5vdywgRG9jdW1lbnQpOworCUpTX1NUQVRJQ19NRVRIT0QoY2xvc2VEb2MsIERvY3VtZW50KTsKKwlKU19TVEFUSUNfTUVUSE9EKGNyZWF0ZURhdGFPYmplY3QsIERvY3VtZW50KTsKKwlKU19TVEFUSUNfTUVUSE9EKGRlbGV0ZVBhZ2VzLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX01FVEhPRChleHBvcnRBc1RleHQsIERvY3VtZW50KTsKKwlKU19TVEFUSUNfTUVUSE9EKGV4cG9ydEFzRkRGLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX01FVEhPRChleHBvcnRBc1hGREYsIERvY3VtZW50KTsKKwlKU19TVEFUSUNfTUVUSE9EKGV4dHJhY3RQYWdlcywgRG9jdW1lbnQpOworCUpTX1NUQVRJQ19NRVRIT0QoZ2V0QW5ub3QsIERvY3VtZW50KTsKKwlKU19TVEFUSUNfTUVUSE9EKGdldEFubm90cywgRG9jdW1lbnQpOworCUpTX1NUQVRJQ19NRVRIT0QoZ2V0QW5ub3QzRCwgRG9jdW1lbnQpOworCUpTX1NUQVRJQ19NRVRIT0QoZ2V0QW5ub3RzM0QsIERvY3VtZW50KTsKKwlKU19TVEFUSUNfTUVUSE9EKGdldEZpZWxkLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX01FVEhPRChnZXRJY29uLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX01FVEhPRChnZXRMaW5rcywgRG9jdW1lbnQpOworCUpTX1NUQVRJQ19NRVRIT0QoZ2V0TnRoRmllbGROYW1lLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX01FVEhPRChnZXRPQ0dzLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX01FVEhPRChnZXRQYWdlQm94LCBEb2N1bWVudCk7CisJSlNfU1RBVElDX01FVEhPRChnZXRQYWdlTnRoV29yZCwgRG9jdW1lbnQpOworCUpTX1NUQVRJQ19NRVRIT0QoZ2V0UGFnZU50aFdvcmRRdWFkcywgRG9jdW1lbnQpOworCUpTX1NUQVRJQ19NRVRIT0QoZ2V0UGFnZU51bVdvcmRzLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX01FVEhPRChnZXRQcmludFBhcmFtcywgRG9jdW1lbnQpOworCUpTX1NUQVRJQ19NRVRIT0QoZ2V0VVJMLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX01FVEhPRChpbXBvcnRBbkZERiwgRG9jdW1lbnQpOworCUpTX1NUQVRJQ19NRVRIT0QoaW1wb3J0QW5YRkRGLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX01FVEhPRChpbXBvcnRUZXh0RGF0YSwgRG9jdW1lbnQpOworCUpTX1NUQVRJQ19NRVRIT0QoaW5zZXJ0UGFnZXMsIERvY3VtZW50KTsKKwlKU19TVEFUSUNfTUVUSE9EKG1haWxGb3JtLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX01FVEhPRChwcmludCwgRG9jdW1lbnQpOworCUpTX1NUQVRJQ19NRVRIT0QocmVtb3ZlRmllbGQsIERvY3VtZW50KTsKKwlKU19TVEFUSUNfTUVUSE9EKHJlcGxhY2VQYWdlcywgRG9jdW1lbnQpOworCUpTX1NUQVRJQ19NRVRIT0QocmVtb3ZlSWNvbiwgRG9jdW1lbnQpOworCUpTX1NUQVRJQ19NRVRIT0QocmVzZXRGb3JtLCBEb2N1bWVudCk7CisJSlNfU1RBVElDX01FVEhPRChzYXZlQXMsIERvY3VtZW50KTsKKwlKU19TVEFUSUNfTUVUSE9EKHN1Ym1pdEZvcm0sIERvY3VtZW50KTsKKwlKU19TVEFUSUNfTUVUSE9EKG1haWxEb2MsIERvY3VtZW50KTsKK307CisKKyNlbmRpZi8vX0RPQ1VNRU5UX0hfCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L0ZpZWxkLmggYi9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9GaWVsZC5oCmluZGV4IDFiMGJiMDUuLjJhZWE4NWEgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L0ZpZWxkLmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvRmllbGQuaApAQCAtMSwzNTUgKzEsMzU1IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9GSUVMRF9IXw0KLSNkZWZpbmUgX0ZJRUxEX0hfDQotDQotY2xhc3MgRG9jdW1lbnQ7DQotDQotZW51bSBGSUVMRF9QUk9QDQotew0KLQlGUF9BTElHTk1FTlQsDQotCUZQX0JPUkRFUlNUWUxFLA0KLQlGUF9CVVRUT05BTElHTlgsDQotCUZQX0JVVFRPTkFMSUdOWSwNCi0JRlBfQlVUVE9ORklUQk9VTkRTLA0KLQlGUF9CVVRUT05QT1NJVElPTiwNCi0JRlBfQlVUVE9OU0NBTEVIT1csDQotCUZQX0JVVFRPTlNDQUxFV0hFTiwNCi0JRlBfQ0FMQ09SREVSSU5ERVgsDQotCUZQX0NIQVJMSU1JVCwNCi0JRlBfQ09NQiwNCi0JRlBfQ09NTUlUT05TRUxDSEFOR0UsDQotCUZQX0NVUlJFTlRWQUxVRUlORElDRVMsDQotCUZQX0RFRkFVTFRWQUxVRSwNCi0JRlBfRE9OT1RTQ1JPTEwsDQotCUZQX0RJU1BMQVksDQotCUZQX0ZJTExDT0xPUiwNCi0JRlBfSElEREVOLA0KLQlGUF9ISUdITElHSFQsDQotCUZQX0xJTkVXSURUSCwNCi0JRlBfTVVMVElMSU5FLA0KLQlGUF9NVUxUSVBMRVNFTEVDVElPTiwNCi0JRlBfUEFTU1dPUkQsDQotCUZQX1JFQ1QsDQotCUZQX1JJQ0hURVhULA0KLQlGUF9SSUNIVkFMVUUsDQotCUZQX1JPVEFUSU9OLA0KLQlGUF9TVFJPS0VDT0xPUiwNCi0JRlBfU1RZTEUsDQotCUZQX1RFWFRDT0xPUiwNCi0JRlBfVEVYVEZPTlQsDQotCUZQX1RFWFRTSVpFLA0KLQlGUF9VU0VSTkFNRSwNCi0JRlBfVkFMVUUNCi19Ow0KLQ0KLWNsYXNzIENKU19XaWRlU3RyaW5nQXJyYXkNCi17DQotcHVibGljOg0KLQlDSlNfV2lkZVN0cmluZ0FycmF5KCl7fQ0KLQl2aXJ0dWFsIH5DSlNfV2lkZVN0cmluZ0FycmF5KCkNCi0Jew0KLQkJZm9yIChpbnQgaT0wLHN6PW1fRGF0YS5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0JCQlkZWxldGUgbV9EYXRhLkdldEF0KGkpOw0KLQkJbV9EYXRhLlJlbW92ZUFsbCgpOw0KLQl9DQotDQotCXZvaWQgQWRkKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJpbmcpDQotCXsNCi0JCW1fRGF0YS5BZGQobmV3IENGWF9XaWRlU3RyaW5nKHN0cmluZykpOw0KLQl9DQotDQotCWludCBHZXRTaXplKCkgY29uc3QNCi0Jew0KLQkJcmV0dXJuIG1fRGF0YS5HZXRTaXplKCk7DQotCX0NCi0NCi0JQ0ZYX1dpZGVTdHJpbmcgR2V0QXQoaW50IGkpIGNvbnN0DQotCXsNCi0JCXJldHVybiAqbV9EYXRhLkdldEF0KGkpOw0KLQl9DQotDQotcHJpdmF0ZToNCi0JQ0ZYX0FycmF5VGVtcGxhdGU8Q0ZYX1dpZGVTdHJpbmcqPgltX0RhdGE7DQotfTsNCi0NCi1zdHJ1Y3QgQ0pTX0RlbGF5RGF0YQ0KLXsNCi0JQ0ZYX1dpZGVTdHJpbmcJCQlzRmllbGROYW1lOw0KLQlpbnQJCQkJCQluQ29udHJvbEluZGV4Ow0KLQllbnVtIEZJRUxEX1BST1AJCQllUHJvcDsNCi0JRlhfSU5UMzIJCQkJbnVtOw0KLQlib29sCQkJCQliOw0KLQlDRlhfQnl0ZVN0cmluZwkJCXN0cmluZzsNCi0JQ0ZYX1dpZGVTdHJpbmcJCQl3aWRlc3RyaW5nOw0KLQlDUERGX1JlY3QJCQkJcmVjdDsNCi0JQ1BXTF9Db2xvcgkJCQljb2xvcjsNCi0JQ0ZYX0RXb3JkQXJyYXkJCQl3b3JkYXJyYXk7DQotCUNKU19XaWRlU3RyaW5nQXJyYXkJCXdpZGVzdHJpbmdhcnJheTsNCi19Ow0KLQ0KLWNsYXNzIEZpZWxkIDogcHVibGljIENKU19FbWJlZE9iag0KLXsNCi1wdWJsaWM6DQotCUZpZWxkKENKU19PYmplY3QqIHBKU09iamVjdCk7CQ0KLQl2aXJ0dWFsIH5GaWVsZCh2b2lkKTsNCi0NCi0gICAgRlhfQk9PTCBhbGlnbm1lbnQoT0JKX1BST1BfUEFSQU1TKTsNCi0gICAgRlhfQk9PTCBib3JkZXJTdHlsZShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIGJ1dHRvbkFsaWduWChPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIGJ1dHRvbkFsaWduWShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIGJ1dHRvbkZpdEJvdW5kcyhPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIGJ1dHRvblBvc2l0aW9uKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgYnV0dG9uU2NhbGVIb3coT0JKX1BST1BfUEFSQU1TKTsNCi0gICAgRlhfQk9PTCBidXR0b25TY2FsZVdoZW4oT0JKX1BST1BfUEFSQU1TKTsNCi0JRlhfQk9PTCBjYWxjT3JkZXJJbmRleChPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIGNoYXJMaW1pdChPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIGNvbWIoT0JKX1BST1BfUEFSQU1TKTsNCi0JRlhfQk9PTCBjb21taXRPblNlbENoYW5nZShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIGN1cnJlbnRWYWx1ZUluZGljZXMoT0JKX1BST1BfUEFSQU1TKTsNCi0gICAgRlhfQk9PTCBkZWZhdWx0U3R5bGUoT0JKX1BST1BfUEFSQU1TKTsNCi0JRlhfQk9PTCBkZWZhdWx0VmFsdWUoT0JKX1BST1BfUEFSQU1TKTsNCi0JRlhfQk9PTCBkb05vdFNjcm9sbChPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIGRvTm90U3BlbGxDaGVjayhPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIGRlbGF5KE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgZGlzcGxheShPQkpfUFJPUF9QQVJBTVMpOw0KLSAgICBGWF9CT09MIGRvYyhPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIGVkaXRhYmxlKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgZXhwb3J0VmFsdWVzKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgZmlsZVNlbGVjdChPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIGZpbGxDb2xvcihPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIGhpZGRlbihPQkpfUFJPUF9QQVJBTVMpOw0KLSAgICBGWF9CT09MIGhpZ2hsaWdodChPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIGxpbmVXaWR0aChPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIG11bHRpbGluZShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIG11bHRpcGxlU2VsZWN0aW9uKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgbmFtZShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIG51bUl0ZW1zKE9CSl9QUk9QX1BBUkFNUyk7DQotICAgIEZYX0JPT0wgcGFnZShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIHBhc3N3b3JkKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgcHJpbnQoT0JKX1BST1BfUEFSQU1TKTsNCi0JRlhfQk9PTCByYWRpb3NJblVuaXNvbihPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIHJlYWRvbmx5KE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgcmVjdChPQkpfUFJPUF9QQVJBTVMpOw0KLSAgICBGWF9CT09MIHJlcXVpcmVkKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgcmljaFRleHQoT0JKX1BST1BfUEFSQU1TKTsNCi0JRlhfQk9PTCByaWNoVmFsdWUoT0JKX1BST1BfUEFSQU1TKTsNCi0JRlhfQk9PTCByb3RhdGlvbihPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIHN0cm9rZUNvbG9yKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgc3R5bGUoT0JKX1BST1BfUEFSQU1TKTsNCi0JRlhfQk9PTCBzdWJtaXROYW1lKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgdGV4dENvbG9yKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgdGV4dEZvbnQoT0JKX1BST1BfUEFSQU1TKTsNCi0JRlhfQk9PTCB0ZXh0U2l6ZShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIHR5cGUoT0JKX1BST1BfUEFSQU1TKTsNCi0JRlhfQk9PTCB1c2VyTmFtZShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIHZhbHVlKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgdmFsdWVBc1N0cmluZyhPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIHNvdXJjZShPQkpfUFJPUF9QQVJBTVMpOw0KLQ0KLQlGWF9CT09MIGJyb3dzZUZvckZpbGVUb1N1Ym1pdChPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wgYnV0dG9uR2V0Q2FwdGlvbihPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wgYnV0dG9uR2V0SWNvbihPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wgYnV0dG9uSW1wb3J0SWNvbihPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wgYnV0dG9uU2V0Q2FwdGlvbihPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wgYnV0dG9uU2V0SWNvbihPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wgY2hlY2tUaGlzQm94KE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTCBjbGVhckl0ZW1zKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTCBkZWZhdWx0SXNDaGVja2VkKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTCBkZWxldGVJdGVtQXQoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MIGdldEFycmF5KE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTCBnZXRJdGVtQXQoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MIGdldExvY2soT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MIGluc2VydEl0ZW1BdChPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wgaXNCb3hDaGVja2VkKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTCBpc0RlZmF1bHRDaGVja2VkKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTCBzZXRBY3Rpb24oT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MIHNldEZvY3VzKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTCBzZXRJdGVtcyhPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wgc2V0TG9jayhPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wgc2lnbmF0dXJlR2V0TW9kaWZpY2F0aW9ucyhPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wgc2lnbmF0dXJlR2V0U2VlZFZhbHVlKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTCBzaWduYXR1cmVJbmZvKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTCBzaWduYXR1cmVTZXRTZWVkVmFsdWUoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MIHNpZ25hdHVyZVNpZ24oT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MIHNpZ25hdHVyZVZhbGlkYXRlKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0NCi1wdWJsaWM6DQotCXN0YXRpYyB2b2lkIFNldEFsaWdubWVudChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHJpbmcpOw0KLSAgICBzdGF0aWMgdm9pZCBTZXRCb3JkZXJTdHlsZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHJpbmcpOw0KLQlzdGF0aWMgdm9pZCBTZXRCdXR0b25BbGlnblgoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBpbnQgbnVtYmVyKTsNCi0Jc3RhdGljIHZvaWQgU2V0QnV0dG9uQWxpZ25ZKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgaW50IG51bWJlcik7DQotCXN0YXRpYyB2b2lkIFNldEJ1dHRvbkZpdEJvdW5kcyhDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGJvb2wgYik7DQotCXN0YXRpYyB2b2lkIFNldEJ1dHRvblBvc2l0aW9uKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgaW50IG51bWJlcik7DQotCXN0YXRpYyB2b2lkIFNldEJ1dHRvblNjYWxlSG93KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgaW50IG51bWJlcik7DQotICAgIHN0YXRpYyB2b2lkIFNldEJ1dHRvblNjYWxlV2hlbihDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGludCBudW1iZXIpOw0KLQlzdGF0aWMgdm9pZCBTZXRDYWxjT3JkZXJJbmRleChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGludCBudW1iZXIpOw0KLQlzdGF0aWMgdm9pZCBTZXRDaGFyTGltaXQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBpbnQgbnVtYmVyKTsNCi0Jc3RhdGljIHZvaWQgU2V0Q29tYihDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGJvb2wgYik7DQotCXN0YXRpYyB2b2lkIFNldENvbW1pdE9uU2VsQ2hhbmdlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgYm9vbCBiKTsNCi0Jc3RhdGljIHZvaWQgU2V0Q3VycmVudFZhbHVlSW5kaWNlcyhDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGNvbnN0IENGWF9EV29yZEFycmF5JiBhcnJheSk7DQotICAgIHN0YXRpYyB2b2lkIFNldERlZmF1bHRTdHlsZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgpOw0KLQlzdGF0aWMgdm9pZCBTZXREZWZhdWx0VmFsdWUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyaW5nKTsNCi0Jc3RhdGljIHZvaWQgU2V0RG9Ob3RTY3JvbGwoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBib29sIGIpOw0KLQlzdGF0aWMgdm9pZCBTZXREaXNwbGF5KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgaW50IG51bWJlcik7DQotCXN0YXRpYyB2b2lkIFNldEZpbGxDb2xvcihDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yKTsNCi0Jc3RhdGljIHZvaWQgU2V0SGlkZGVuKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgYm9vbCBiKTsNCi0gICAgc3RhdGljIHZvaWQgU2V0SGlnaGxpZ2h0KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cmluZyk7DQotCXN0YXRpYyB2b2lkIFNldExpbmVXaWR0aChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGludCBudW1iZXIpOw0KLQlzdGF0aWMgdm9pZCBTZXRNdWx0aWxpbmUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBib29sIGIpOw0KLQlzdGF0aWMgdm9pZCBTZXRNdWx0aXBsZVNlbGVjdGlvbihDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGJvb2wgYik7DQotCXN0YXRpYyB2b2lkIFNldFBhc3N3b3JkKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgYm9vbCBiKTsNCi0Jc3RhdGljIHZvaWQgU2V0UmVjdChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGNvbnN0IENQREZfUmVjdCYgcmVjdCk7DQotCXN0YXRpYyB2b2lkIFNldFJpY2hUZXh0KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgYm9vbCBiKTsNCi0Jc3RhdGljIHZvaWQgU2V0UmljaFZhbHVlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCk7DQotCXN0YXRpYyB2b2lkIFNldFJvdGF0aW9uKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgaW50IG51bWJlcik7DQotCXN0YXRpYyB2b2lkIFNldFN0cm9rZUNvbG9yKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgY29uc3QgQ1BXTF9Db2xvciYgY29sb3IpOw0KLQlzdGF0aWMgdm9pZCBTZXRTdHlsZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHJpbmcpOw0KLQlzdGF0aWMgdm9pZCBTZXRUZXh0Q29sb3IoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBjb25zdCBDUFdMX0NvbG9yJiBjb2xvcik7DQotCXN0YXRpYyB2b2lkIFNldFRleHRGb250KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cmluZyk7DQotCXN0YXRpYyB2b2lkIFNldFRleHRTaXplKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgaW50IG51bWJlcik7DQotCXN0YXRpYyB2b2lkIFNldFVzZXJOYW1lKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cmluZyk7DQotCXN0YXRpYyB2b2lkIFNldFZhbHVlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgY29uc3QgQ0pTX1dpZGVTdHJpbmdBcnJheSYgc3RyQXJyYXkpOw0KLQ0KLXB1YmxpYzoNCi0Jc3RhdGljIHZvaWQJCQkJCQkJQWRkRmllbGQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBpbnQgblBhZ2VJbmRleCwgaW50IG5GaWVsZFR5cGUsIA0KLQkJCQkJCQkJCQkJY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNOYW1lLCBjb25zdCBDUERGX1JlY3QmIHJjQ29vcmRzKTsNCi1wdWJsaWM6DQotCXN0YXRpYyB2b2lkCQkJCQkJCVVwZGF0ZUZvcm1GaWVsZChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkLCANCi0JCQkJCQkJCQkJCUZYX0JPT0wgYkNoYW5nZU1hcmssIEZYX0JPT0wgYlJlc2V0QVAsIEZYX0JPT0wgYlJlZnJlc2gpOw0KLQlzdGF0aWMgdm9pZAkJCQkJCQlVcGRhdGVGb3JtQ29udHJvbChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIENQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCwgDQotCQkJCQkJCQkJCQlGWF9CT09MIGJDaGFuZ2VNYXJrLCBGWF9CT09MIGJSZXNldEFQLCBGWF9CT09MIGJSZWZyZXNoKTsNCi0NCi0Jc3RhdGljIENQREZTREtfV2lkZ2V0KgkJCQkJR2V0V2lkZ2V0KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sKTsNCi0Jc3RhdGljIHZvaWQJCQkJCQkJR2V0Rm9ybUZpZWxkcyhDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBjc0ZpZWxkTmFtZSwgQ0ZYX1B0ckFycmF5JiBGaWVsZHNBcnJheSk7DQotDQotCXN0YXRpYyB2b2lkCQkJCQkJCURvRGVsYXkoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBDSlNfRGVsYXlEYXRhKiBwRGF0YSk7DQotDQotcHVibGljOg0KLQlGWF9CT09MCQkJCQkJCQlBdHRhY2hGaWVsZChEb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgY3NGaWVsZE5hbWUpOw0KLQl2b2lkCQkJCQkJCQlTZXREZWxheShGWF9CT09MIGJEZWxheSk7DQotCXZvaWQJCQkJCQkJCVNldElzb2xhdGUodjg6Oklzb2xhdGUqIGlzb2xhdGUpIHttX2lzb2xhdGUgPSBpc29sYXRlO30NCi1wcm90ZWN0ZWQ6DQotCXZvaWQJCQkJCQkJCVBhcnNlRmllbGROYW1lKGNvbnN0IHN0ZDo6d3N0cmluZyAmc3RyRmllbGROYW1lUGFyc2VkLHN0ZDo6d3N0cmluZyAmc3RyRmllbGROYW1lLGludCAmIGlDb250cm9sTm8pOw0KLQl2b2lkCQkJCQkJCQlHZXRGb3JtRmllbGRzKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBjc0ZpZWxkTmFtZSwgQ0ZYX1B0ckFycmF5JiBGaWVsZHNBcnJheSk7DQotCUNQREZfRm9ybUNvbnRyb2wqIAkJCQkJR2V0U21hcnRGaWVsZENvbnRyb2woQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQpOw0KLQlGWF9CT09MCQkJCQkJCQlWYWx1ZUlzT2NjdXIoQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQsIENGWF9XaWRlU3RyaW5nIGNzT3B0TGFiZWwpOw0KLQ0KLQl2b2lkCQkJCQkJCQlBZGREZWxheV9JbnQoZW51bSBGSUVMRF9QUk9QIHByb3AsIEZYX0lOVDMyIG4pOw0KLQl2b2lkCQkJCQkJCQlBZGREZWxheV9Cb29sKGVudW0gRklFTERfUFJPUCBwcm9wLGJvb2wgYik7DQotCXZvaWQJCQkJCQkJCUFkZERlbGF5X1N0cmluZyhlbnVtIEZJRUxEX1BST1AgcHJvcCwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cmluZyk7DQotCXZvaWQJCQkJCQkJCUFkZERlbGF5X1dpZGVTdHJpbmcoZW51bSBGSUVMRF9QUk9QIHByb3AsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJpbmcpOw0KLQl2b2lkCQkJCQkJCQlBZGREZWxheV9SZWN0KGVudW0gRklFTERfUFJPUCBwcm9wLCBjb25zdCBDUERGX1JlY3QmIHJlY3QpOw0KLQl2b2lkCQkJCQkJCQlBZGREZWxheV9Db2xvcihlbnVtIEZJRUxEX1BST1AgcHJvcCwgY29uc3QgQ1BXTF9Db2xvciYgY29sb3IpOw0KLQl2b2lkCQkJCQkJCQlBZGREZWxheV9Xb3JkQXJyYXkoZW51bSBGSUVMRF9QUk9QIHByb3AsIGNvbnN0IENGWF9EV29yZEFycmF5JiBhcnJheSk7DQotCXZvaWQJCQkJCQkJCUFkZERlbGF5X1dpZGVTdHJpbmdBcnJheShlbnVtIEZJRUxEX1BST1AgcHJvcCwgY29uc3QgQ0pTX1dpZGVTdHJpbmdBcnJheSYgYXJyYXkpOw0KLQ0KLQl2b2lkCQkJCQkJCQlEb0RlbGF5KCk7DQotcHVibGljOg0KLQlEb2N1bWVudCoJCQkJCQkJbV9wSlNEb2M7DQotCUNQREZTREtfRG9jdW1lbnQqCQkJCQltX3BEb2N1bWVudDsNCi0JQ0ZYX1dpZGVTdHJpbmcJCQkJCQltX0ZpZWxkTmFtZTsNCi0JaW50CQkJCQkJCQkJbV9uRm9ybUNvbnRyb2xJbmRleDsNCi0JRlhfQk9PTAkJCQkJCQkJbV9iQ2FuU2V0Ow0KLQ0KLQlGWF9CT09MCQkJCQkJCQltX2JEZWxheTsNCi0Jdjg6Oklzb2xhdGUqCQkJCQkJCW1faXNvbGF0ZTsNCi19Ow0KLQ0KLWNsYXNzIENKU19GaWVsZCA6IHB1YmxpYyBDSlNfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0JQ0pTX0ZpZWxkKEpTRlhPYmplY3QgcE9iamVjdCkgOiBDSlNfT2JqZWN0KHBPYmplY3QpIHt9Ow0KLQl2aXJ0dWFsIH5DSlNfRmllbGQodm9pZCl7fTsNCi0NCi0JdmlydHVhbCBGWF9CT09MCUluaXRJbnN0YW5jZShJRlhKU19Db250ZXh0KiBjYyk7DQotDQotCURFQ0xBUkVfSlNfQ0xBU1MoQ0pTX0ZpZWxkKTsNCi0NCi0gICAgSlNfU1RBVElDX1BST1AoYWxpZ25tZW50LCBGaWVsZCk7DQotICAgIEpTX1NUQVRJQ19QUk9QKGJvcmRlclN0eWxlLCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKGJ1dHRvbkFsaWduWCwgRmllbGQpOw0KLQlKU19TVEFUSUNfUFJPUChidXR0b25BbGlnblksIEZpZWxkKTsNCi0JSlNfU1RBVElDX1BST1AoYnV0dG9uRml0Qm91bmRzLCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKGJ1dHRvblBvc2l0aW9uLCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKGJ1dHRvblNjYWxlSG93LCBGaWVsZCk7DQotICAgIEpTX1NUQVRJQ19QUk9QKGJ1dHRvblNjYWxlV2hlbiwgRmllbGQpOw0KLQlKU19TVEFUSUNfUFJPUChjYWxjT3JkZXJJbmRleCwgRmllbGQpOw0KLQlKU19TVEFUSUNfUFJPUChjaGFyTGltaXQsIEZpZWxkKTsNCi0JSlNfU1RBVElDX1BST1AoY29tYiwgRmllbGQpOw0KLQlKU19TVEFUSUNfUFJPUChjb21taXRPblNlbENoYW5nZSwgRmllbGQpOw0KLQlKU19TVEFUSUNfUFJPUChjdXJyZW50VmFsdWVJbmRpY2VzLCBGaWVsZCk7DQotICAgIEpTX1NUQVRJQ19QUk9QKGRlZmF1bHRTdHlsZSwgRmllbGQpOw0KLQlKU19TVEFUSUNfUFJPUChkZWZhdWx0VmFsdWUsIEZpZWxkKTsNCi0JSlNfU1RBVElDX1BST1AoZG9Ob3RTY3JvbGwsIEZpZWxkKTsNCi0JSlNfU1RBVElDX1BST1AoZG9Ob3RTcGVsbENoZWNrLCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKGRlbGF5LCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKGRpc3BsYXksIEZpZWxkKTsNCi0gICAgSlNfU1RBVElDX1BST1AoZG9jLCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKGVkaXRhYmxlLCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKGV4cG9ydFZhbHVlcywgRmllbGQpOw0KLQlKU19TVEFUSUNfUFJPUChmaWxlU2VsZWN0LCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKGZpbGxDb2xvciwgRmllbGQpOw0KLQlKU19TVEFUSUNfUFJPUChoaWRkZW4sIEZpZWxkKTsNCi0gICAgSlNfU1RBVElDX1BST1AoaGlnaGxpZ2h0LCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKGxpbmVXaWR0aCwgRmllbGQpOw0KLQlKU19TVEFUSUNfUFJPUChtdWx0aWxpbmUsIEZpZWxkKTsNCi0JSlNfU1RBVElDX1BST1AobXVsdGlwbGVTZWxlY3Rpb24sIEZpZWxkKTsNCi0JSlNfU1RBVElDX1BST1AobmFtZSwgRmllbGQpOw0KLQlKU19TVEFUSUNfUFJPUChudW1JdGVtcywgRmllbGQpOw0KLSAgICBKU19TVEFUSUNfUFJPUChwYWdlLCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKHBhc3N3b3JkLCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKHByaW50LCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKHJhZGlvc0luVW5pc29uLCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKHJlYWRvbmx5LCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKHJlY3QsIEZpZWxkKTsNCi0gICAgSlNfU1RBVElDX1BST1AocmVxdWlyZWQsIEZpZWxkKTsNCi0JSlNfU1RBVElDX1BST1AocmljaFRleHQsIEZpZWxkKTsNCi0JSlNfU1RBVElDX1BST1AocmljaFZhbHVlLCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKHJvdGF0aW9uLCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKHN0cm9rZUNvbG9yLCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKHN0eWxlLCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKHN1Ym1pdE5hbWUsIEZpZWxkKTsNCi0JSlNfU1RBVElDX1BST1AodGV4dENvbG9yLCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKHRleHRGb250LCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKHRleHRTaXplLCBGaWVsZCk7DQotCUpTX1NUQVRJQ19QUk9QKHR5cGUsIEZpZWxkKTsNCi0JSlNfU1RBVElDX1BST1AodXNlck5hbWUsIEZpZWxkKTsNCi0JSlNfU1RBVElDX1BST1AodmFsdWUsIEZpZWxkKTsNCi0JSlNfU1RBVElDX1BST1AodmFsdWVBc1N0cmluZywgRmllbGQpOw0KLQlKU19TVEFUSUNfUFJPUChzb3VyY2UsIEZpZWxkKTsNCi0NCi0JSlNfU1RBVElDX01FVEhPRChicm93c2VGb3JGaWxlVG9TdWJtaXQsIEZpZWxkKTsNCi0JSlNfU1RBVElDX01FVEhPRChidXR0b25HZXRDYXB0aW9uLCBGaWVsZCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoYnV0dG9uR2V0SWNvbiwgRmllbGQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKGJ1dHRvbkltcG9ydEljb24sIEZpZWxkKTsNCi0JSlNfU1RBVElDX01FVEhPRChidXR0b25TZXRDYXB0aW9uLCBGaWVsZCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoYnV0dG9uU2V0SWNvbiwgRmllbGQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKGNoZWNrVGhpc0JveCwgRmllbGQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKGNsZWFySXRlbXMsIEZpZWxkKTsNCi0gCUpTX1NUQVRJQ19NRVRIT0QoZGVmYXVsdElzQ2hlY2tlZCwgRmllbGQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKGRlbGV0ZUl0ZW1BdCwgRmllbGQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKGdldEFycmF5LCBGaWVsZCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoZ2V0SXRlbUF0LCBGaWVsZCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoZ2V0TG9jaywgRmllbGQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKGluc2VydEl0ZW1BdCwgRmllbGQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKGlzQm94Q2hlY2tlZCwgRmllbGQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKGlzRGVmYXVsdENoZWNrZWQsIEZpZWxkKTsNCi0JSlNfU1RBVElDX01FVEhPRChzZXRBY3Rpb24sIEZpZWxkKTsNCi0JSlNfU1RBVElDX01FVEhPRChzZXRGb2N1cywgRmllbGQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKHNldEl0ZW1zLCBGaWVsZCk7DQotCUpTX1NUQVRJQ19NRVRIT0Qoc2V0TG9jaywgRmllbGQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKHNpZ25hdHVyZUdldE1vZGlmaWNhdGlvbnMsIEZpZWxkKTsNCi0JSlNfU1RBVElDX01FVEhPRChzaWduYXR1cmVHZXRTZWVkVmFsdWUsIEZpZWxkKTsNCi0JSlNfU1RBVElDX01FVEhPRChzaWduYXR1cmVJbmZvLCBGaWVsZCk7DQotCUpTX1NUQVRJQ19NRVRIT0Qoc2lnbmF0dXJlU2V0U2VlZFZhbHVlLCBGaWVsZCk7DQotCUpTX1NUQVRJQ19NRVRIT0Qoc2lnbmF0dXJlU2lnbiwgRmllbGQpOw0KLQlKU19TVEFUSUNfTUVUSE9EKHNpZ25hdHVyZVZhbGlkYXRlLCBGaWVsZCk7DQotfTsNCi0NCi0jZW5kaWYgLy9fRklFTERfSF8NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9GSUVMRF9IXworI2RlZmluZSBfRklFTERfSF8KKworY2xhc3MgRG9jdW1lbnQ7CisKK2VudW0gRklFTERfUFJPUAoreworCUZQX0FMSUdOTUVOVCwKKwlGUF9CT1JERVJTVFlMRSwKKwlGUF9CVVRUT05BTElHTlgsCisJRlBfQlVUVE9OQUxJR05ZLAorCUZQX0JVVFRPTkZJVEJPVU5EUywKKwlGUF9CVVRUT05QT1NJVElPTiwKKwlGUF9CVVRUT05TQ0FMRUhPVywKKwlGUF9CVVRUT05TQ0FMRVdIRU4sCisJRlBfQ0FMQ09SREVSSU5ERVgsCisJRlBfQ0hBUkxJTUlULAorCUZQX0NPTUIsCisJRlBfQ09NTUlUT05TRUxDSEFOR0UsCisJRlBfQ1VSUkVOVFZBTFVFSU5ESUNFUywKKwlGUF9ERUZBVUxUVkFMVUUsCisJRlBfRE9OT1RTQ1JPTEwsCisJRlBfRElTUExBWSwKKwlGUF9GSUxMQ09MT1IsCisJRlBfSElEREVOLAorCUZQX0hJR0hMSUdIVCwKKwlGUF9MSU5FV0lEVEgsCisJRlBfTVVMVElMSU5FLAorCUZQX01VTFRJUExFU0VMRUNUSU9OLAorCUZQX1BBU1NXT1JELAorCUZQX1JFQ1QsCisJRlBfUklDSFRFWFQsCisJRlBfUklDSFZBTFVFLAorCUZQX1JPVEFUSU9OLAorCUZQX1NUUk9LRUNPTE9SLAorCUZQX1NUWUxFLAorCUZQX1RFWFRDT0xPUiwKKwlGUF9URVhURk9OVCwKKwlGUF9URVhUU0laRSwKKwlGUF9VU0VSTkFNRSwKKwlGUF9WQUxVRQorfTsKKworY2xhc3MgQ0pTX1dpZGVTdHJpbmdBcnJheQoreworcHVibGljOgorCUNKU19XaWRlU3RyaW5nQXJyYXkoKXt9CisJdmlydHVhbCB+Q0pTX1dpZGVTdHJpbmdBcnJheSgpCisJeworCQlmb3IgKGludCBpPTAsc3o9bV9EYXRhLkdldFNpemUoKTsgaTxzejsgaSsrKQorCQkJZGVsZXRlIG1fRGF0YS5HZXRBdChpKTsKKwkJbV9EYXRhLlJlbW92ZUFsbCgpOworCX0KKworCXZvaWQgQWRkKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJpbmcpCisJeworCQltX0RhdGEuQWRkKG5ldyBDRlhfV2lkZVN0cmluZyhzdHJpbmcpKTsKKwl9CisKKwlpbnQgR2V0U2l6ZSgpIGNvbnN0CisJeworCQlyZXR1cm4gbV9EYXRhLkdldFNpemUoKTsKKwl9CisKKwlDRlhfV2lkZVN0cmluZyBHZXRBdChpbnQgaSkgY29uc3QKKwl7CisJCXJldHVybiAqbV9EYXRhLkdldEF0KGkpOworCX0KKworcHJpdmF0ZToKKwlDRlhfQXJyYXlUZW1wbGF0ZTxDRlhfV2lkZVN0cmluZyo+CW1fRGF0YTsKK307CisKK3N0cnVjdCBDSlNfRGVsYXlEYXRhCit7CisJQ0ZYX1dpZGVTdHJpbmcJCQlzRmllbGROYW1lOworCWludAkJCQkJCW5Db250cm9sSW5kZXg7CisJZW51bSBGSUVMRF9QUk9QCQkJZVByb3A7CisJRlhfSU5UMzIJCQkJbnVtOworCWJvb2wJCQkJCWI7CisJQ0ZYX0J5dGVTdHJpbmcJCQlzdHJpbmc7CisJQ0ZYX1dpZGVTdHJpbmcJCQl3aWRlc3RyaW5nOworCUNQREZfUmVjdAkJCQlyZWN0OworCUNQV0xfQ29sb3IJCQkJY29sb3I7CisJQ0ZYX0RXb3JkQXJyYXkJCQl3b3JkYXJyYXk7CisJQ0pTX1dpZGVTdHJpbmdBcnJheQkJd2lkZXN0cmluZ2FycmF5OworfTsKKworY2xhc3MgRmllbGQgOiBwdWJsaWMgQ0pTX0VtYmVkT2JqCit7CitwdWJsaWM6CisJRmllbGQoQ0pTX09iamVjdCogcEpTT2JqZWN0KTsJCisJdmlydHVhbCB+RmllbGQodm9pZCk7CisKKyAgICBGWF9CT09MIGFsaWdubWVudChPQkpfUFJPUF9QQVJBTVMpOworICAgIEZYX0JPT0wgYm9yZGVyU3R5bGUoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIGJ1dHRvbkFsaWduWChPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgYnV0dG9uQWxpZ25ZKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBidXR0b25GaXRCb3VuZHMoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIGJ1dHRvblBvc2l0aW9uKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBidXR0b25TY2FsZUhvdyhPQkpfUFJPUF9QQVJBTVMpOworICAgIEZYX0JPT0wgYnV0dG9uU2NhbGVXaGVuKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBjYWxjT3JkZXJJbmRleChPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgY2hhckxpbWl0KE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBjb21iKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBjb21taXRPblNlbENoYW5nZShPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgY3VycmVudFZhbHVlSW5kaWNlcyhPQkpfUFJPUF9QQVJBTVMpOworICAgIEZYX0JPT0wgZGVmYXVsdFN0eWxlKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBkZWZhdWx0VmFsdWUoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIGRvTm90U2Nyb2xsKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBkb05vdFNwZWxsQ2hlY2soT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIGRlbGF5KE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBkaXNwbGF5KE9CSl9QUk9QX1BBUkFNUyk7CisgICAgRlhfQk9PTCBkb2MoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIGVkaXRhYmxlKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBleHBvcnRWYWx1ZXMoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIGZpbGVTZWxlY3QoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIGZpbGxDb2xvcihPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgaGlkZGVuKE9CSl9QUk9QX1BBUkFNUyk7CisgICAgRlhfQk9PTCBoaWdobGlnaHQoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIGxpbmVXaWR0aChPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgbXVsdGlsaW5lKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBtdWx0aXBsZVNlbGVjdGlvbihPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgbmFtZShPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgbnVtSXRlbXMoT0JKX1BST1BfUEFSQU1TKTsKKyAgICBGWF9CT09MIHBhZ2UoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIHBhc3N3b3JkKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBwcmludChPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgcmFkaW9zSW5Vbmlzb24oT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIHJlYWRvbmx5KE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCByZWN0KE9CSl9QUk9QX1BBUkFNUyk7CisgICAgRlhfQk9PTCByZXF1aXJlZChPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgcmljaFRleHQoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIHJpY2hWYWx1ZShPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgcm90YXRpb24oT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIHN0cm9rZUNvbG9yKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBzdHlsZShPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgc3VibWl0TmFtZShPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgdGV4dENvbG9yKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCB0ZXh0Rm9udChPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgdGV4dFNpemUoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIHR5cGUoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIHVzZXJOYW1lKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCB2YWx1ZShPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgdmFsdWVBc1N0cmluZyhPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgc291cmNlKE9CSl9QUk9QX1BBUkFNUyk7CisKKwlGWF9CT09MIGJyb3dzZUZvckZpbGVUb1N1Ym1pdChPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTCBidXR0b25HZXRDYXB0aW9uKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MIGJ1dHRvbkdldEljb24oT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wgYnV0dG9uSW1wb3J0SWNvbihPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTCBidXR0b25TZXRDYXB0aW9uKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MIGJ1dHRvblNldEljb24oT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wgY2hlY2tUaGlzQm94KE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MIGNsZWFySXRlbXMoT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wgZGVmYXVsdElzQ2hlY2tlZChPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTCBkZWxldGVJdGVtQXQoT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wgZ2V0QXJyYXkoT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wgZ2V0SXRlbUF0KE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MIGdldExvY2soT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wgaW5zZXJ0SXRlbUF0KE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MIGlzQm94Q2hlY2tlZChPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTCBpc0RlZmF1bHRDaGVja2VkKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MIHNldEFjdGlvbihPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTCBzZXRGb2N1cyhPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTCBzZXRJdGVtcyhPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTCBzZXRMb2NrKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MIHNpZ25hdHVyZUdldE1vZGlmaWNhdGlvbnMoT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wgc2lnbmF0dXJlR2V0U2VlZFZhbHVlKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MIHNpZ25hdHVyZUluZm8oT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wgc2lnbmF0dXJlU2V0U2VlZFZhbHVlKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MIHNpZ25hdHVyZVNpZ24oT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wgc2lnbmF0dXJlVmFsaWRhdGUoT0JKX01FVEhPRF9QQVJBTVMpOworCitwdWJsaWM6CisJc3RhdGljIHZvaWQgU2V0QWxpZ25tZW50KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cmluZyk7CisgICAgc3RhdGljIHZvaWQgU2V0Qm9yZGVyU3R5bGUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyaW5nKTsKKwlzdGF0aWMgdm9pZCBTZXRCdXR0b25BbGlnblgoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBpbnQgbnVtYmVyKTsKKwlzdGF0aWMgdm9pZCBTZXRCdXR0b25BbGlnblkoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBpbnQgbnVtYmVyKTsKKwlzdGF0aWMgdm9pZCBTZXRCdXR0b25GaXRCb3VuZHMoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBib29sIGIpOworCXN0YXRpYyB2b2lkIFNldEJ1dHRvblBvc2l0aW9uKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgaW50IG51bWJlcik7CisJc3RhdGljIHZvaWQgU2V0QnV0dG9uU2NhbGVIb3coQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBpbnQgbnVtYmVyKTsKKyAgICBzdGF0aWMgdm9pZCBTZXRCdXR0b25TY2FsZVdoZW4oQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBpbnQgbnVtYmVyKTsKKwlzdGF0aWMgdm9pZCBTZXRDYWxjT3JkZXJJbmRleChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGludCBudW1iZXIpOworCXN0YXRpYyB2b2lkIFNldENoYXJMaW1pdChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGludCBudW1iZXIpOworCXN0YXRpYyB2b2lkIFNldENvbWIoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBib29sIGIpOworCXN0YXRpYyB2b2lkIFNldENvbW1pdE9uU2VsQ2hhbmdlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgYm9vbCBiKTsKKwlzdGF0aWMgdm9pZCBTZXRDdXJyZW50VmFsdWVJbmRpY2VzKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgY29uc3QgQ0ZYX0RXb3JkQXJyYXkmIGFycmF5KTsKKyAgICBzdGF0aWMgdm9pZCBTZXREZWZhdWx0U3R5bGUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4KTsKKwlzdGF0aWMgdm9pZCBTZXREZWZhdWx0VmFsdWUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyaW5nKTsKKwlzdGF0aWMgdm9pZCBTZXREb05vdFNjcm9sbChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGJvb2wgYik7CisJc3RhdGljIHZvaWQgU2V0RGlzcGxheShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGludCBudW1iZXIpOworCXN0YXRpYyB2b2lkIFNldEZpbGxDb2xvcihDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yKTsKKwlzdGF0aWMgdm9pZCBTZXRIaWRkZW4oQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBib29sIGIpOworICAgIHN0YXRpYyB2b2lkIFNldEhpZ2hsaWdodChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHJpbmcpOworCXN0YXRpYyB2b2lkIFNldExpbmVXaWR0aChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGludCBudW1iZXIpOworCXN0YXRpYyB2b2lkIFNldE11bHRpbGluZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGJvb2wgYik7CisJc3RhdGljIHZvaWQgU2V0TXVsdGlwbGVTZWxlY3Rpb24oQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBib29sIGIpOworCXN0YXRpYyB2b2lkIFNldFBhc3N3b3JkKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgYm9vbCBiKTsKKwlzdGF0aWMgdm9pZCBTZXRSZWN0KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgY29uc3QgQ1BERl9SZWN0JiByZWN0KTsKKwlzdGF0aWMgdm9pZCBTZXRSaWNoVGV4dChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGJvb2wgYik7CisJc3RhdGljIHZvaWQgU2V0UmljaFZhbHVlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCk7CisJc3RhdGljIHZvaWQgU2V0Um90YXRpb24oQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBpbnQgbnVtYmVyKTsKKwlzdGF0aWMgdm9pZCBTZXRTdHJva2VDb2xvcihDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yKTsKKwlzdGF0aWMgdm9pZCBTZXRTdHlsZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHJpbmcpOworCXN0YXRpYyB2b2lkIFNldFRleHRDb2xvcihDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yKTsKKwlzdGF0aWMgdm9pZCBTZXRUZXh0Rm9udChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHJpbmcpOworCXN0YXRpYyB2b2lkIFNldFRleHRTaXplKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgaW50IG51bWJlcik7CisJc3RhdGljIHZvaWQgU2V0VXNlck5hbWUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyaW5nKTsKKwlzdGF0aWMgdm9pZCBTZXRWYWx1ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGNvbnN0IENKU19XaWRlU3RyaW5nQXJyYXkmIHN0ckFycmF5KTsKKworcHVibGljOgorCXN0YXRpYyB2b2lkCQkJCQkJCUFkZEZpZWxkKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgaW50IG5QYWdlSW5kZXgsIGludCBuRmllbGRUeXBlLCAKKwkJCQkJCQkJCQkJY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNOYW1lLCBjb25zdCBDUERGX1JlY3QmIHJjQ29vcmRzKTsKK3B1YmxpYzoKKwlzdGF0aWMgdm9pZAkJCQkJCQlVcGRhdGVGb3JtRmllbGQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCwgCisJCQkJCQkJCQkJCUZYX0JPT0wgYkNoYW5nZU1hcmssIEZYX0JPT0wgYlJlc2V0QVAsIEZYX0JPT0wgYlJlZnJlc2gpOworCXN0YXRpYyB2b2lkCQkJCQkJCVVwZGF0ZUZvcm1Db250cm9sKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sLCAKKwkJCQkJCQkJCQkJRlhfQk9PTCBiQ2hhbmdlTWFyaywgRlhfQk9PTCBiUmVzZXRBUCwgRlhfQk9PTCBiUmVmcmVzaCk7CisKKwlzdGF0aWMgQ1BERlNES19XaWRnZXQqCQkJCQlHZXRXaWRnZXQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wpOworCXN0YXRpYyB2b2lkCQkJCQkJCUdldEZvcm1GaWVsZHMoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgY3NGaWVsZE5hbWUsIENGWF9QdHJBcnJheSYgRmllbGRzQXJyYXkpOworCisJc3RhdGljIHZvaWQJCQkJCQkJRG9EZWxheShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIENKU19EZWxheURhdGEqIHBEYXRhKTsKKworcHVibGljOgorCUZYX0JPT0wJCQkJCQkJCUF0dGFjaEZpZWxkKERvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBjc0ZpZWxkTmFtZSk7CisJdm9pZAkJCQkJCQkJU2V0RGVsYXkoRlhfQk9PTCBiRGVsYXkpOworCXZvaWQJCQkJCQkJCVNldElzb2xhdGUodjg6Oklzb2xhdGUqIGlzb2xhdGUpIHttX2lzb2xhdGUgPSBpc29sYXRlO30KK3Byb3RlY3RlZDoKKwl2b2lkCQkJCQkJCQlQYXJzZUZpZWxkTmFtZShjb25zdCBzdGQ6OndzdHJpbmcgJnN0ckZpZWxkTmFtZVBhcnNlZCxzdGQ6OndzdHJpbmcgJnN0ckZpZWxkTmFtZSxpbnQgJiBpQ29udHJvbE5vKTsKKwl2b2lkCQkJCQkJCQlHZXRGb3JtRmllbGRzKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBjc0ZpZWxkTmFtZSwgQ0ZYX1B0ckFycmF5JiBGaWVsZHNBcnJheSk7CisJQ1BERl9Gb3JtQ29udHJvbCogCQkJCQlHZXRTbWFydEZpZWxkQ29udHJvbChDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCk7CisJRlhfQk9PTAkJCQkJCQkJVmFsdWVJc09jY3VyKENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkLCBDRlhfV2lkZVN0cmluZyBjc09wdExhYmVsKTsKKworCXZvaWQJCQkJCQkJCUFkZERlbGF5X0ludChlbnVtIEZJRUxEX1BST1AgcHJvcCwgRlhfSU5UMzIgbik7CisJdm9pZAkJCQkJCQkJQWRkRGVsYXlfQm9vbChlbnVtIEZJRUxEX1BST1AgcHJvcCxib29sIGIpOworCXZvaWQJCQkJCQkJCUFkZERlbGF5X1N0cmluZyhlbnVtIEZJRUxEX1BST1AgcHJvcCwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cmluZyk7CisJdm9pZAkJCQkJCQkJQWRkRGVsYXlfV2lkZVN0cmluZyhlbnVtIEZJRUxEX1BST1AgcHJvcCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cmluZyk7CisJdm9pZAkJCQkJCQkJQWRkRGVsYXlfUmVjdChlbnVtIEZJRUxEX1BST1AgcHJvcCwgY29uc3QgQ1BERl9SZWN0JiByZWN0KTsKKwl2b2lkCQkJCQkJCQlBZGREZWxheV9Db2xvcihlbnVtIEZJRUxEX1BST1AgcHJvcCwgY29uc3QgQ1BXTF9Db2xvciYgY29sb3IpOworCXZvaWQJCQkJCQkJCUFkZERlbGF5X1dvcmRBcnJheShlbnVtIEZJRUxEX1BST1AgcHJvcCwgY29uc3QgQ0ZYX0RXb3JkQXJyYXkmIGFycmF5KTsKKwl2b2lkCQkJCQkJCQlBZGREZWxheV9XaWRlU3RyaW5nQXJyYXkoZW51bSBGSUVMRF9QUk9QIHByb3AsIGNvbnN0IENKU19XaWRlU3RyaW5nQXJyYXkmIGFycmF5KTsKKworCXZvaWQJCQkJCQkJCURvRGVsYXkoKTsKK3B1YmxpYzoKKwlEb2N1bWVudCoJCQkJCQkJbV9wSlNEb2M7CisJQ1BERlNES19Eb2N1bWVudCoJCQkJCW1fcERvY3VtZW50OworCUNGWF9XaWRlU3RyaW5nCQkJCQkJbV9GaWVsZE5hbWU7CisJaW50CQkJCQkJCQkJbV9uRm9ybUNvbnRyb2xJbmRleDsKKwlGWF9CT09MCQkJCQkJCQltX2JDYW5TZXQ7CisKKwlGWF9CT09MCQkJCQkJCQltX2JEZWxheTsKKwl2ODo6SXNvbGF0ZSoJCQkJCQkJbV9pc29sYXRlOworfTsKKworY2xhc3MgQ0pTX0ZpZWxkIDogcHVibGljIENKU19PYmplY3QKK3sKK3B1YmxpYzoKKwlDSlNfRmllbGQoSlNGWE9iamVjdCBwT2JqZWN0KSA6IENKU19PYmplY3QocE9iamVjdCkge307CisJdmlydHVhbCB+Q0pTX0ZpZWxkKHZvaWQpe307CisKKwl2aXJ0dWFsIEZYX0JPT0wJSW5pdEluc3RhbmNlKElGWEpTX0NvbnRleHQqIGNjKTsKKworCURFQ0xBUkVfSlNfQ0xBU1MoQ0pTX0ZpZWxkKTsKKworICAgIEpTX1NUQVRJQ19QUk9QKGFsaWdubWVudCwgRmllbGQpOworICAgIEpTX1NUQVRJQ19QUk9QKGJvcmRlclN0eWxlLCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1AoYnV0dG9uQWxpZ25YLCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1AoYnV0dG9uQWxpZ25ZLCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1AoYnV0dG9uRml0Qm91bmRzLCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1AoYnV0dG9uUG9zaXRpb24sIEZpZWxkKTsKKwlKU19TVEFUSUNfUFJPUChidXR0b25TY2FsZUhvdywgRmllbGQpOworICAgIEpTX1NUQVRJQ19QUk9QKGJ1dHRvblNjYWxlV2hlbiwgRmllbGQpOworCUpTX1NUQVRJQ19QUk9QKGNhbGNPcmRlckluZGV4LCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1AoY2hhckxpbWl0LCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1AoY29tYiwgRmllbGQpOworCUpTX1NUQVRJQ19QUk9QKGNvbW1pdE9uU2VsQ2hhbmdlLCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1AoY3VycmVudFZhbHVlSW5kaWNlcywgRmllbGQpOworICAgIEpTX1NUQVRJQ19QUk9QKGRlZmF1bHRTdHlsZSwgRmllbGQpOworCUpTX1NUQVRJQ19QUk9QKGRlZmF1bHRWYWx1ZSwgRmllbGQpOworCUpTX1NUQVRJQ19QUk9QKGRvTm90U2Nyb2xsLCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1AoZG9Ob3RTcGVsbENoZWNrLCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1AoZGVsYXksIEZpZWxkKTsKKwlKU19TVEFUSUNfUFJPUChkaXNwbGF5LCBGaWVsZCk7CisgICAgSlNfU1RBVElDX1BST1AoZG9jLCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1AoZWRpdGFibGUsIEZpZWxkKTsKKwlKU19TVEFUSUNfUFJPUChleHBvcnRWYWx1ZXMsIEZpZWxkKTsKKwlKU19TVEFUSUNfUFJPUChmaWxlU2VsZWN0LCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1AoZmlsbENvbG9yLCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1AoaGlkZGVuLCBGaWVsZCk7CisgICAgSlNfU1RBVElDX1BST1AoaGlnaGxpZ2h0LCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1AobGluZVdpZHRoLCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1AobXVsdGlsaW5lLCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1AobXVsdGlwbGVTZWxlY3Rpb24sIEZpZWxkKTsKKwlKU19TVEFUSUNfUFJPUChuYW1lLCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1AobnVtSXRlbXMsIEZpZWxkKTsKKyAgICBKU19TVEFUSUNfUFJPUChwYWdlLCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1AocGFzc3dvcmQsIEZpZWxkKTsKKwlKU19TVEFUSUNfUFJPUChwcmludCwgRmllbGQpOworCUpTX1NUQVRJQ19QUk9QKHJhZGlvc0luVW5pc29uLCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1AocmVhZG9ubHksIEZpZWxkKTsKKwlKU19TVEFUSUNfUFJPUChyZWN0LCBGaWVsZCk7CisgICAgSlNfU1RBVElDX1BST1AocmVxdWlyZWQsIEZpZWxkKTsKKwlKU19TVEFUSUNfUFJPUChyaWNoVGV4dCwgRmllbGQpOworCUpTX1NUQVRJQ19QUk9QKHJpY2hWYWx1ZSwgRmllbGQpOworCUpTX1NUQVRJQ19QUk9QKHJvdGF0aW9uLCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1Aoc3Ryb2tlQ29sb3IsIEZpZWxkKTsKKwlKU19TVEFUSUNfUFJPUChzdHlsZSwgRmllbGQpOworCUpTX1NUQVRJQ19QUk9QKHN1Ym1pdE5hbWUsIEZpZWxkKTsKKwlKU19TVEFUSUNfUFJPUCh0ZXh0Q29sb3IsIEZpZWxkKTsKKwlKU19TVEFUSUNfUFJPUCh0ZXh0Rm9udCwgRmllbGQpOworCUpTX1NUQVRJQ19QUk9QKHRleHRTaXplLCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1AodHlwZSwgRmllbGQpOworCUpTX1NUQVRJQ19QUk9QKHVzZXJOYW1lLCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1AodmFsdWUsIEZpZWxkKTsKKwlKU19TVEFUSUNfUFJPUCh2YWx1ZUFzU3RyaW5nLCBGaWVsZCk7CisJSlNfU1RBVElDX1BST1Aoc291cmNlLCBGaWVsZCk7CisKKwlKU19TVEFUSUNfTUVUSE9EKGJyb3dzZUZvckZpbGVUb1N1Ym1pdCwgRmllbGQpOworCUpTX1NUQVRJQ19NRVRIT0QoYnV0dG9uR2V0Q2FwdGlvbiwgRmllbGQpOworCUpTX1NUQVRJQ19NRVRIT0QoYnV0dG9uR2V0SWNvbiwgRmllbGQpOworCUpTX1NUQVRJQ19NRVRIT0QoYnV0dG9uSW1wb3J0SWNvbiwgRmllbGQpOworCUpTX1NUQVRJQ19NRVRIT0QoYnV0dG9uU2V0Q2FwdGlvbiwgRmllbGQpOworCUpTX1NUQVRJQ19NRVRIT0QoYnV0dG9uU2V0SWNvbiwgRmllbGQpOworCUpTX1NUQVRJQ19NRVRIT0QoY2hlY2tUaGlzQm94LCBGaWVsZCk7CisJSlNfU1RBVElDX01FVEhPRChjbGVhckl0ZW1zLCBGaWVsZCk7CisgCUpTX1NUQVRJQ19NRVRIT0QoZGVmYXVsdElzQ2hlY2tlZCwgRmllbGQpOworCUpTX1NUQVRJQ19NRVRIT0QoZGVsZXRlSXRlbUF0LCBGaWVsZCk7CisJSlNfU1RBVElDX01FVEhPRChnZXRBcnJheSwgRmllbGQpOworCUpTX1NUQVRJQ19NRVRIT0QoZ2V0SXRlbUF0LCBGaWVsZCk7CisJSlNfU1RBVElDX01FVEhPRChnZXRMb2NrLCBGaWVsZCk7CisJSlNfU1RBVElDX01FVEhPRChpbnNlcnRJdGVtQXQsIEZpZWxkKTsKKwlKU19TVEFUSUNfTUVUSE9EKGlzQm94Q2hlY2tlZCwgRmllbGQpOworCUpTX1NUQVRJQ19NRVRIT0QoaXNEZWZhdWx0Q2hlY2tlZCwgRmllbGQpOworCUpTX1NUQVRJQ19NRVRIT0Qoc2V0QWN0aW9uLCBGaWVsZCk7CisJSlNfU1RBVElDX01FVEhPRChzZXRGb2N1cywgRmllbGQpOworCUpTX1NUQVRJQ19NRVRIT0Qoc2V0SXRlbXMsIEZpZWxkKTsKKwlKU19TVEFUSUNfTUVUSE9EKHNldExvY2ssIEZpZWxkKTsKKwlKU19TVEFUSUNfTUVUSE9EKHNpZ25hdHVyZUdldE1vZGlmaWNhdGlvbnMsIEZpZWxkKTsKKwlKU19TVEFUSUNfTUVUSE9EKHNpZ25hdHVyZUdldFNlZWRWYWx1ZSwgRmllbGQpOworCUpTX1NUQVRJQ19NRVRIT0Qoc2lnbmF0dXJlSW5mbywgRmllbGQpOworCUpTX1NUQVRJQ19NRVRIT0Qoc2lnbmF0dXJlU2V0U2VlZFZhbHVlLCBGaWVsZCk7CisJSlNfU1RBVElDX01FVEhPRChzaWduYXR1cmVTaWduLCBGaWVsZCk7CisJSlNfU1RBVElDX01FVEhPRChzaWduYXR1cmVWYWxpZGF0ZSwgRmllbGQpOworfTsKKworI2VuZGlmIC8vX0ZJRUxEX0hfCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L0lKYXZhU2NyaXB0LmggYi9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9JSmF2YVNjcmlwdC5oCmluZGV4IDU2N2VlODIuLjMwODdiNmEgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L0lKYXZhU2NyaXB0LmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvSUphdmFTY3JpcHQuaApAQCAtMSwxMTIgKzEsMTEyIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9JSkFWQVNDUklQVF9IXw0KLSNkZWZpbmUgX0lKQVZBU0NSSVBUX0hfDQotDQotY2xhc3MgSUZYSlNfQ29udGV4dCAgDQotew0KLXB1YmxpYzoNCi0JdmlydHVhbCBGWF9CT09MCQkJCUNvbXBpbGUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNjcmlwdCwgQ0ZYX1dpZGVTdHJpbmcmIGluZm8pID0gMDsNCi0JdmlydHVhbCBGWF9CT09MCQkJCVJ1blNjcmlwdChjb25zdCBDRlhfV2lkZVN0cmluZyYgc2NyaXB0LCBDRlhfV2lkZVN0cmluZyYgaW5mbykgPSAwOw0KLQ0KLXB1YmxpYzoNCi0JdmlydHVhbCB2b2lkCQkJCU9uQXBwX0luaXQoKSA9IDA7DQotDQotCXZpcnR1YWwgdm9pZAkJCQlPbkRvY19PcGVuKENQREZTREtfRG9jdW1lbnQqIHBEb2MsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJUYXJnZXROYW1lKSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQlPbkRvY19XaWxsUHJpbnQoQ1BERlNES19Eb2N1bWVudCogcERvYykgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25Eb2NfRGlkUHJpbnQoQ1BERlNES19Eb2N1bWVudCogcERvYykgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25Eb2NfV2lsbFNhdmUoQ1BERlNES19Eb2N1bWVudCogcERvYykgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25Eb2NfRGlkU2F2ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jKSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQlPbkRvY19XaWxsQ2xvc2UoQ1BERlNES19Eb2N1bWVudCogcERvYykgPSAwOw0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJT25QYWdlX09wZW4oQ1BERlNES19Eb2N1bWVudCogcFRhcmdldCkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25QYWdlX0Nsb3NlKENQREZTREtfRG9jdW1lbnQqIHBUYXJnZXQpID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCU9uUGFnZV9JblZpZXcoQ1BERlNES19Eb2N1bWVudCogcFRhcmdldCkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25QYWdlX091dFZpZXcoQ1BERlNES19Eb2N1bWVudCogcFRhcmdldCkgPSAwOw0KLQkNCi0JdmlydHVhbCB2b2lkCQkJCU9uRmllbGRfTW91c2VEb3duKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQpID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCU9uRmllbGRfTW91c2VFbnRlcihGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkKiBwVGFyZ2V0KSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQlPbkZpZWxkX01vdXNlRXhpdChGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkKiBwVGFyZ2V0KSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQlPbkZpZWxkX01vdXNlVXAoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25GaWVsZF9Gb2N1cyhGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkKiBwVGFyZ2V0LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgVmFsdWUpID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCU9uRmllbGRfQmx1cihGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkKiBwVGFyZ2V0LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgVmFsdWUpID0gMDsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCU9uRmllbGRfQ2FsY3VsYXRlKENQREZfRm9ybUZpZWxkKiBwU291cmNlLCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCwgQ0ZYX1dpZGVTdHJpbmcmIFZhbHVlLCBGWF9CT09MJiBiUmMpID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCU9uRmllbGRfRm9ybWF0KGludCBuQ29tbWl0S2V5LCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCwgQ0ZYX1dpZGVTdHJpbmcmIFZhbHVlLCBGWF9CT09MIGJXaWxsQ29tbWl0KSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQlPbkZpZWxkX0tleXN0cm9rZShpbnQgbkNvbW1pdEtleSwgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZUV4LA0KLQkJCQkJCQkJCUZYX0JPT0wgS2V5RG93biwgRlhfQk9PTCBiTW9kaWZpZXIsIGludCAmblNlbEVuZCxpbnQgJm5TZWxTdGFydCwgRlhfQk9PTCBiU2hpZnQsDQotCQkJCQkJCQkJQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIENGWF9XaWRlU3RyaW5nJiBWYWx1ZSwgRlhfQk9PTCBiV2lsbENvbW1pdCwgDQotCQkJCQkJCQkJRlhfQk9PTCBiRmllbGRGdWxsLCBGWF9CT09MICZiUmMpID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCU9uRmllbGRfVmFsaWRhdGUoQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZUV4LCBGWF9CT09MIGJLZXlEb3duLA0KLQkJCQkJCQkJCUZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIENGWF9XaWRlU3RyaW5nJiBWYWx1ZSwgRlhfQk9PTCYgYlJjKSA9IDA7DQotDQotCXZpcnR1YWwgdm9pZAkJCQlPblNjcmVlbl9Gb2N1cyhGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCU9uU2NyZWVuX0JsdXIoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQlPblNjcmVlbl9PcGVuKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25TY3JlZW5fQ2xvc2UoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQlPblNjcmVlbl9Nb3VzZURvd24oRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQlPblNjcmVlbl9Nb3VzZVVwKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25TY3JlZW5fTW91c2VFbnRlcihGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCU9uU2NyZWVuX01vdXNlRXhpdChGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCU9uU2NyZWVuX0luVmlldyhGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCU9uU2NyZWVuX091dFZpZXcoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKSA9IDA7DQotDQotCXZpcnR1YWwgdm9pZAkJCQlPbkJvb2ttYXJrX01vdXNlVXAoQ1BERl9Cb29rbWFyayogcEJvb2tNYXJrKSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQlPbkxpbmtfTW91c2VVcChDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KSA9IDA7DQotDQotCXZpcnR1YWwgdm9pZAkJCQlPbk1lbnVfRXhlYyhDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0LCBjb25zdCBDRlhfV2lkZVN0cmluZyAmKSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQlPbkJhdGNoRXhlYyhDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQlPbkNvbnNvbGVfRXhlYygpID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCU9uRXh0ZXJuYWxfRXhlYygpID0gMDsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCUVuYWJsZU1lc3NhZ2VCb3goRlhfQk9PTCBiRW5hYmxlKSA9IDA7DQotfTsNCi0NCi1jbGFzcyBJRlhKU19SdW50aW1lDQotew0KLXB1YmxpYzoNCi0JdmlydHVhbCBJRlhKU19Db250ZXh0KgkJTmV3Q29udGV4dCgpID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCVJlbGVhc2VDb250ZXh0KElGWEpTX0NvbnRleHQgKiBwQ29udGV4dCkgPSAwOw0KLQl2aXJ0dWFsIElGWEpTX0NvbnRleHQqCQlHZXRDdXJyZW50Q29udGV4dCgpID0gMDsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCVNldFJlYWRlckRvY3VtZW50KENQREZTREtfRG9jdW1lbnQqIHBSZWFkZXJEb2MpID0gMDsNCi0JdmlydHVhbAlDUERGU0RLX0RvY3VtZW50KglHZXRSZWFkZXJEb2N1bWVudCgpID0gMDsJDQotDQotCXZpcnR1YWwgdm9pZAkJCQlHZXRPYmplY3ROYW1lcyhDRlhfV2lkZVN0cmluZ0FycmF5JiBhcnJheSkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJR2V0T2JqZWN0Q29uc3RzKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd09iak5hbWUsIENGWF9XaWRlU3RyaW5nQXJyYXkmIGFycmF5KSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQlHZXRPYmplY3RQcm9wcyhjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dPYmpOYW1lLCBDRlhfV2lkZVN0cmluZ0FycmF5JiBhcnJheSkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJR2V0T2JqZWN0TWV0aG9kcyhjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dPYmpOYW1lLCBDRlhfV2lkZVN0cmluZ0FycmF5JiBhcnJheSkgPSAwOw0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJRXhpdCgpID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCUVudGVyKCkgPSAwOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJSXNFbnRlcmVkKCkgPSAwOw0KLX07DQotDQotY2xhc3MgQ1BERkRvY19FbnZpcm9ubWVudDsNCi1jbGFzcyBDSlNfR2xvYmFsRGF0YTsNCi0NCi1jbGFzcyBDSlNfUnVudGltZUZhY3RvcnkNCi17DQotcHVibGljOg0KLQlDSlNfUnVudGltZUZhY3RvcnkoKTptX2JJbml0KEZBTFNFKSxtX25SZWYoMCksbV9wR2xvYmFsRGF0YShOVUxMKSxtX25HbG9iYWxEYXRhQ291bnQoMCkge30NCi0JfkNKU19SdW50aW1lRmFjdG9yeSgpOw0KLQlJRlhKU19SdW50aW1lKgkJCQkJTmV3SlNSdW50aW1lKENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHApOw0KLQl2b2lkCQkJCQkJCURlbGV0ZUpTUnVudGltZShJRlhKU19SdW50aW1lKiBwUnVudGltZSk7DQotCXZvaWQJCQkJCQkJQWRkUmVmKCk7DQotCXZvaWQJCQkJCQkJUmVsZWFzZSgpOw0KLQ0KLQlDSlNfR2xvYmFsRGF0YSoJCQkJCU5ld0dsb2JhbERhdGEoQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCk7DQotCXZvaWQJCQkJCQkJUmVsZWFzZUdsb2JhbERhdGEoKTsNCi1wcml2YXRlOg0KLQlGWF9CT09MIG1fYkluaXQ7DQotCWludCBtX25SZWY7DQotCUNKU19HbG9iYWxEYXRhKgkJCQkJbV9wR2xvYmFsRGF0YTsNCi0JRlhfSU5UMzIJCQkJCQltX25HbG9iYWxEYXRhQ291bnQ7DQotfTsNCi0NCi0jZW5kaWYgLy9fSUpBVkFTQ1JJUFRfSF8NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9JSkFWQVNDUklQVF9IXworI2RlZmluZSBfSUpBVkFTQ1JJUFRfSF8KKworY2xhc3MgSUZYSlNfQ29udGV4dCAgCit7CitwdWJsaWM6CisJdmlydHVhbCBGWF9CT09MCQkJCUNvbXBpbGUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNjcmlwdCwgQ0ZYX1dpZGVTdHJpbmcmIGluZm8pID0gMDsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJUnVuU2NyaXB0KGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzY3JpcHQsIENGWF9XaWRlU3RyaW5nJiBpbmZvKSA9IDA7CisKK3B1YmxpYzoKKwl2aXJ0dWFsIHZvaWQJCQkJT25BcHBfSW5pdCgpID0gMDsKKworCXZpcnR1YWwgdm9pZAkJCQlPbkRvY19PcGVuKENQREZTREtfRG9jdW1lbnQqIHBEb2MsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJUYXJnZXROYW1lKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCU9uRG9jX1dpbGxQcmludChDUERGU0RLX0RvY3VtZW50KiBwRG9jKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCU9uRG9jX0RpZFByaW50KENQREZTREtfRG9jdW1lbnQqIHBEb2MpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJT25Eb2NfV2lsbFNhdmUoQ1BERlNES19Eb2N1bWVudCogcERvYykgPSAwOworCXZpcnR1YWwgdm9pZAkJCQlPbkRvY19EaWRTYXZlKENQREZTREtfRG9jdW1lbnQqIHBEb2MpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJT25Eb2NfV2lsbENsb3NlKENQREZTREtfRG9jdW1lbnQqIHBEb2MpID0gMDsKKworCXZpcnR1YWwgdm9pZAkJCQlPblBhZ2VfT3BlbihDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCU9uUGFnZV9DbG9zZShDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCU9uUGFnZV9JblZpZXcoQ1BERlNES19Eb2N1bWVudCogcFRhcmdldCkgPSAwOworCXZpcnR1YWwgdm9pZAkJCQlPblBhZ2VfT3V0VmlldyhDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KSA9IDA7CisJCisJdmlydHVhbCB2b2lkCQkJCU9uRmllbGRfTW91c2VEb3duKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJT25GaWVsZF9Nb3VzZUVudGVyKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJT25GaWVsZF9Nb3VzZUV4aXQoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCkgPSAwOworCXZpcnR1YWwgdm9pZAkJCQlPbkZpZWxkX01vdXNlVXAoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCkgPSAwOworCXZpcnR1YWwgdm9pZAkJCQlPbkZpZWxkX0ZvY3VzKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBWYWx1ZSkgPSAwOworCXZpcnR1YWwgdm9pZAkJCQlPbkZpZWxkX0JsdXIoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIFZhbHVlKSA9IDA7CisKKwl2aXJ0dWFsIHZvaWQJCQkJT25GaWVsZF9DYWxjdWxhdGUoQ1BERl9Gb3JtRmllbGQqIHBTb3VyY2UsIENQREZfRm9ybUZpZWxkKiBwVGFyZ2V0LCBDRlhfV2lkZVN0cmluZyYgVmFsdWUsIEZYX0JPT0wmIGJSYykgPSAwOworCXZpcnR1YWwgdm9pZAkJCQlPbkZpZWxkX0Zvcm1hdChpbnQgbkNvbW1pdEtleSwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIENGWF9XaWRlU3RyaW5nJiBWYWx1ZSwgRlhfQk9PTCBiV2lsbENvbW1pdCkgPSAwOworCXZpcnR1YWwgdm9pZAkJCQlPbkZpZWxkX0tleXN0cm9rZShpbnQgbkNvbW1pdEtleSwgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZUV4LAorCQkJCQkJCQkJRlhfQk9PTCBLZXlEb3duLCBGWF9CT09MIGJNb2RpZmllciwgaW50ICZuU2VsRW5kLGludCAmblNlbFN0YXJ0LCBGWF9CT09MIGJTaGlmdCwKKwkJCQkJCQkJCUNQREZfRm9ybUZpZWxkKiBwVGFyZ2V0LCBDRlhfV2lkZVN0cmluZyYgVmFsdWUsIEZYX0JPT0wgYldpbGxDb21taXQsIAorCQkJCQkJCQkJRlhfQk9PTCBiRmllbGRGdWxsLCBGWF9CT09MICZiUmMpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJT25GaWVsZF9WYWxpZGF0ZShDRlhfV2lkZVN0cmluZyYgc3RyQ2hhbmdlLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyQ2hhbmdlRXgsIEZYX0JPT0wgYktleURvd24sCisJCQkJCQkJCQlGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkKiBwVGFyZ2V0LCBDRlhfV2lkZVN0cmluZyYgVmFsdWUsIEZYX0JPT0wmIGJSYykgPSAwOworCisJdmlydHVhbCB2b2lkCQkJCU9uU2NyZWVuX0ZvY3VzKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikgPSAwOworCXZpcnR1YWwgdm9pZAkJCQlPblNjcmVlbl9CbHVyKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikgPSAwOworCXZpcnR1YWwgdm9pZAkJCQlPblNjcmVlbl9PcGVuKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikgPSAwOworCXZpcnR1YWwgdm9pZAkJCQlPblNjcmVlbl9DbG9zZShGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJT25TY3JlZW5fTW91c2VEb3duKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikgPSAwOworCXZpcnR1YWwgdm9pZAkJCQlPblNjcmVlbl9Nb3VzZVVwKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikgPSAwOworCXZpcnR1YWwgdm9pZAkJCQlPblNjcmVlbl9Nb3VzZUVudGVyKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikgPSAwOworCXZpcnR1YWwgdm9pZAkJCQlPblNjcmVlbl9Nb3VzZUV4aXQoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCU9uU2NyZWVuX0luVmlldyhGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJT25TY3JlZW5fT3V0VmlldyhGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pID0gMDsKKworCXZpcnR1YWwgdm9pZAkJCQlPbkJvb2ttYXJrX01vdXNlVXAoQ1BERl9Cb29rbWFyayogcEJvb2tNYXJrKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCU9uTGlua19Nb3VzZVVwKENQREZTREtfRG9jdW1lbnQqIHBUYXJnZXQpID0gMDsKKworCXZpcnR1YWwgdm9pZAkJCQlPbk1lbnVfRXhlYyhDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0LCBjb25zdCBDRlhfV2lkZVN0cmluZyAmKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCU9uQmF0Y2hFeGVjKENQREZTREtfRG9jdW1lbnQqIHBUYXJnZXQpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJT25Db25zb2xlX0V4ZWMoKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCU9uRXh0ZXJuYWxfRXhlYygpID0gMDsKKworCXZpcnR1YWwgdm9pZAkJCQlFbmFibGVNZXNzYWdlQm94KEZYX0JPT0wgYkVuYWJsZSkgPSAwOworfTsKKworY2xhc3MgSUZYSlNfUnVudGltZQoreworcHVibGljOgorCXZpcnR1YWwgSUZYSlNfQ29udGV4dCoJCU5ld0NvbnRleHQoKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCVJlbGVhc2VDb250ZXh0KElGWEpTX0NvbnRleHQgKiBwQ29udGV4dCkgPSAwOworCXZpcnR1YWwgSUZYSlNfQ29udGV4dCoJCUdldEN1cnJlbnRDb250ZXh0KCkgPSAwOworCisJdmlydHVhbCB2b2lkCQkJCVNldFJlYWRlckRvY3VtZW50KENQREZTREtfRG9jdW1lbnQqIHBSZWFkZXJEb2MpID0gMDsKKwl2aXJ0dWFsCUNQREZTREtfRG9jdW1lbnQqCUdldFJlYWRlckRvY3VtZW50KCkgPSAwOwkKKworCXZpcnR1YWwgdm9pZAkJCQlHZXRPYmplY3ROYW1lcyhDRlhfV2lkZVN0cmluZ0FycmF5JiBhcnJheSkgPSAwOworCXZpcnR1YWwgdm9pZAkJCQlHZXRPYmplY3RDb25zdHMoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3T2JqTmFtZSwgQ0ZYX1dpZGVTdHJpbmdBcnJheSYgYXJyYXkpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJR2V0T2JqZWN0UHJvcHMoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3T2JqTmFtZSwgQ0ZYX1dpZGVTdHJpbmdBcnJheSYgYXJyYXkpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJR2V0T2JqZWN0TWV0aG9kcyhjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dPYmpOYW1lLCBDRlhfV2lkZVN0cmluZ0FycmF5JiBhcnJheSkgPSAwOworCisJdmlydHVhbCB2b2lkCQkJCUV4aXQoKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCUVudGVyKCkgPSAwOworCXZpcnR1YWwgRlhfQk9PTAkJCQlJc0VudGVyZWQoKSA9IDA7Cit9OworCitjbGFzcyBDUERGRG9jX0Vudmlyb25tZW50OworY2xhc3MgQ0pTX0dsb2JhbERhdGE7CisKK2NsYXNzIENKU19SdW50aW1lRmFjdG9yeQoreworcHVibGljOgorCUNKU19SdW50aW1lRmFjdG9yeSgpOm1fYkluaXQoRkFMU0UpLG1fblJlZigwKSxtX3BHbG9iYWxEYXRhKE5VTEwpLG1fbkdsb2JhbERhdGFDb3VudCgwKSB7fQorCX5DSlNfUnVudGltZUZhY3RvcnkoKTsKKwlJRlhKU19SdW50aW1lKgkJCQkJTmV3SlNSdW50aW1lKENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHApOworCXZvaWQJCQkJCQkJRGVsZXRlSlNSdW50aW1lKElGWEpTX1J1bnRpbWUqIHBSdW50aW1lKTsKKwl2b2lkCQkJCQkJCUFkZFJlZigpOworCXZvaWQJCQkJCQkJUmVsZWFzZSgpOworCisJQ0pTX0dsb2JhbERhdGEqCQkJCQlOZXdHbG9iYWxEYXRhKENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHApOworCXZvaWQJCQkJCQkJUmVsZWFzZUdsb2JhbERhdGEoKTsKK3ByaXZhdGU6CisJRlhfQk9PTCBtX2JJbml0OworCWludCBtX25SZWY7CisJQ0pTX0dsb2JhbERhdGEqCQkJCQltX3BHbG9iYWxEYXRhOworCUZYX0lOVDMyCQkJCQkJbV9uR2xvYmFsRGF0YUNvdW50OworfTsKKworI2VuZGlmIC8vX0lKQVZBU0NSSVBUX0hfCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L0ljb24uaCBiL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L0ljb24uaAppbmRleCAyNmZlYzJkLi45NDI2ZDMyIDEwMDY0NAotLS0gYS9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9JY29uLmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvSWNvbi5oCkBAIC0xLDQyICsxLDQyIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9JQ09OX0hfDQotI2RlZmluZSBfSUNPTl9IXw0KLQ0KLWNsYXNzIEljb24gOiBwdWJsaWMgQ0pTX0VtYmVkT2JqDQotew0KLXB1YmxpYzoNCi0JSWNvbihDSlNfT2JqZWN0KiBwSlNPYmplY3QpOw0KLQl2aXJ0dWFsIH5JY29uKCk7DQotDQotcHVibGljOg0KLQlGWF9CT09MIG5hbWUoT0JKX1BST1BfUEFSQU1TKTsNCi0JDQotcHVibGljOg0KLQl2b2lkCQkJCVNldFN0cmVhbShDUERGX1N0cmVhbSogcEljb25TdHJlYW0pOw0KLQlDUERGX1N0cmVhbSoJCUdldFN0cmVhbSgpOw0KLQl2b2lkCQkJCVNldEljb25OYW1lKENGWF9XaWRlU3RyaW5nIG5hbWUpOw0KLQlDRlhfV2lkZVN0cmluZwkJR2V0SWNvbk5hbWUoKTsNCi1wcml2YXRlOg0KLQlDUERGX1N0cmVhbSoJCW1fcEljb25TdHJlYW07DQotCUNGWF9XaWRlU3RyaW5nCQltX3N3SWNvbk5hbWU7DQotfTsNCi0NCi1jbGFzcyBDSlNfSWNvbiA6IHB1YmxpYyBDSlNfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0JQ0pTX0ljb24oSlNGWE9iamVjdCBwT2JqZWN0KSA6IENKU19PYmplY3QocE9iamVjdCl7fTsNCi0JdmlydHVhbCB+Q0pTX0ljb24oKXt9Ow0KLQ0KLXB1YmxpYzoNCi0JREVDTEFSRV9KU19DTEFTUyhDSlNfSWNvbik7DQotDQotCUpTX1NUQVRJQ19QUk9QKG5hbWUsIEljb24pOw0KLX07DQotDQotI2VuZGlmIC8vX0lDT05fSF8NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9JQ09OX0hfCisjZGVmaW5lIF9JQ09OX0hfCisKK2NsYXNzIEljb24gOiBwdWJsaWMgQ0pTX0VtYmVkT2JqCit7CitwdWJsaWM6CisJSWNvbihDSlNfT2JqZWN0KiBwSlNPYmplY3QpOworCXZpcnR1YWwgfkljb24oKTsKKworcHVibGljOgorCUZYX0JPT0wgbmFtZShPQkpfUFJPUF9QQVJBTVMpOworCQorcHVibGljOgorCXZvaWQJCQkJU2V0U3RyZWFtKENQREZfU3RyZWFtKiBwSWNvblN0cmVhbSk7CisJQ1BERl9TdHJlYW0qCQlHZXRTdHJlYW0oKTsKKwl2b2lkCQkJCVNldEljb25OYW1lKENGWF9XaWRlU3RyaW5nIG5hbWUpOworCUNGWF9XaWRlU3RyaW5nCQlHZXRJY29uTmFtZSgpOworcHJpdmF0ZToKKwlDUERGX1N0cmVhbSoJCW1fcEljb25TdHJlYW07CisJQ0ZYX1dpZGVTdHJpbmcJCW1fc3dJY29uTmFtZTsKK307CisKK2NsYXNzIENKU19JY29uIDogcHVibGljIENKU19PYmplY3QKK3sKK3B1YmxpYzoKKwlDSlNfSWNvbihKU0ZYT2JqZWN0IHBPYmplY3QpIDogQ0pTX09iamVjdChwT2JqZWN0KXt9OworCXZpcnR1YWwgfkNKU19JY29uKCl7fTsKKworcHVibGljOgorCURFQ0xBUkVfSlNfQ0xBU1MoQ0pTX0ljb24pOworCisJSlNfU1RBVElDX1BST1AobmFtZSwgSWNvbik7Cit9OworCisjZW5kaWYgLy9fSUNPTl9IXworCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9KU19Db25zb2xlLmggYi9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9KU19Db25zb2xlLmgKaW5kZXggZGE4NDJiZC4uZjQzNTEzNSAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvSlNfQ29uc29sZS5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0NvbnNvbGUuaApAQCAtMSwyMzkgKzEsMjM5IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9KU19DT05TT0xFX0hfDQotI2RlZmluZSBfSlNfQ09OU09MRV9IXw0KLQ0KLSNpbmNsdWRlICIuLi9yZXMvcmVzb3VyY2UuaCINCi0NCi0jZGVmaW5lIFdTVF9OT05FCQkweDAwCQkJCQkvLyBObyBzaXplIGNoYW5nZWQNCi0jZGVmaW5lIFdTVF9MRUZUCQkweDAxCQkJCQkvLyBzaXplIHRvIGxlZnQNCi0jZGVmaW5lIFdTVF9UT1AJCQkweDAyCQkJCQkvLyBzaXplIHRvIHRvcA0KLSNkZWZpbmUgV1NUX1JJR0hUCQkweDA0CQkJCQkvLyBzaXplIHRvIHJpZ2h0DQotI2RlZmluZSBXU1RfQk9UVE9NCQkweDA4CQkJCQkvLyBzaXplIHRvIGJvdHRvbQ0KLSNkZWZpbmUgV1NUX1RPUExFRlQJCShXU1RfVE9QfFdTVF9MRUZUKQkJLy8gc2l6ZSB0byB0b3AgJiBsZWZ0DQotI2RlZmluZSBXU1RfVE9QUklHSFQJKFdTVF9UT1B8V1NUX1JJR0hUKQkJLy8gc2l6ZSB0byB0b3AgJiByaWdodA0KLSNkZWZpbmUgV1NUX0JPVFRPTVJJR0hUCShXU1RfQk9UVE9NfFdTVF9SSUdIVCkJLy8gc2l6ZSB0byBib3R0b20gJiByaWdodA0KLSNkZWZpbmUgV1NUX0JPVFRPTUxFRlQJKFdTVF9CT1RUT018V1NUX0xFRlQpCS8vIHNpemUgdG8gYm90dG9tICYgcmlnaHQNCi0NCi0jaWZuZGVmIElEQ19ETEdTSVpFQk9YDQotI2RlZmluZSBJRENfRExHU0laRUJPWCAgNTANCi0jZW5kaWYJLyogSURDX0RMR1NJWkVCT1ggKi8NCi0NCi1lbnVtIHsgbV9pZFNpemVJY29uID0gSURDX0RMR1NJWkVCT1ggfTsNCi1lbnVtIHsJCQkJLy8gcG9zc2libGUgQ29udHJvbCByZVNpemUgVHlwZQ0KLQlDU1RfTk9ORSA9IDAsDQotCUNTVF9SRVNJWkUsCQkvLyBOT01PVkUgKyBTSVpFLCBhZGQgYWxsIGRlbHRhLXNpemUgb2YgZGxnIHRvIGNvbnRyb2wNCi0JQ1NUX1JFUE9TLAkJLy8gTU9WRShhYnNvbHV0ZWx5KSArIE5PU0laRSwgbW92ZSBjb250cm9sJ3MgcG9zIGJ5IGRlbHRhLXNpemUNCi0JQ1NUX1JFTEFUSVZFLAkvLyBNT1ZFKHByb3BvcnRpb25hbCkgICsgTk9TSVpFLCBrZWVwIGNvbnRyb2wgYWx3YXlzIGF0IGEgcmVsYXRpdmUgcG9zDQotCUNTVF9aT09NLAkJLy8gTU9WRSArIFNJWkUgKGJvdGggYXJlIGF1dG9tYXRpY2FsbHkgcHJvcG9ydGlvbmFsKQ0KLQlDU1RfREVMVEFfWk9PTQkvLyBNT1ZFKHByb3BvcnRpb25hbCwgc2V0IG1hbnVhbGx5KSArIFNJWkUocHJvcG9ydGlvbmFsLCBzZXQgbWFudWFsbCkNCi19Ow0KLQ0KLS8vIGNvbnRhaW5lZCBjbGFzcyB0byBob2xkIGl0ZW0gc3RhdGUNCi0vLw0KLWNsYXNzIENKU19JdGVtQ3RybA0KLXsNCi1wdWJsaWM6DQotCVVJTlQJbV9uSUQ7DQotCVVJTlQJbV9zdHhMZWZ0ICAJICAgOiA0OwkJCS8vIHdoZW4gbGVmdCByZXNpemluZyAuLi4NCi0JVUlOVAltX3N0eFJpZ2h0ICAgICA6IDQ7CQkJLy8gd2hlbiByaWdodCByZXNpemluZyAuLi4NCi0JVUlOVAltX3N0eVRvcCAgIAkgICA6IDQ7CQkJLy8gd2hlbiB0b3AgcmVzaXppbmcgLi4uDQotCVVJTlQJbV9zdHlCb3R0b20gICAgOiA0OwkJCS8vIHdoZW4gYm90dG9tIHJlc2l6aW5nIC4uLg0KLQlVSU5UCW1fYkZsaWNrZXJGcmVlIDogMTsNCi0JVUlOVAltX2JJbnZhbGlkYXRlICA6IDE7CQkJLy8gSW52YWxpZGF0ZSBjdHJsJ3MgcmVjdChlZy4gbm8tYXV0b21hdGljYWwgdXBkYXRlIGZvciBzdGF0aWMgd2hlbiByZXNpemUrbW92ZSkNCi0JVUlOVAltX3IwCQkgICA6IDE0Ow0KLQlDUmVjdAltX3dSZWN0Ow0KLQlkb3VibGUJbV94UmF0aW8sIG1fY3hSYXRpbzsNCi0JZG91YmxlCW1feVJhdGlvLCBtX2N5UmF0aW87DQotDQotcHJvdGVjdGVkOg0KLQl2b2lkIEFzc2lnbihjb25zdCBDSlNfSXRlbUN0cmwmIHNyYyk7DQotDQotcHVibGljOg0KLQlDSlNfSXRlbUN0cmwoKTsNCi0JQ0pTX0l0ZW1DdHJsKGNvbnN0IENKU19JdGVtQ3RybCYgc3JjKTsNCi0NCi0JSERXUCBPblNpemUoSERXUCBoZHdwLCBpbnQgc2l6ZVR5cGUsIENSZWN0ICpwbkNsdFJlY3QsIENSZWN0ICpwb0NsdFJlY3QsIENSZWN0ICpwUjAsIENXbmQgKnBEbGcpOw0KLQ0KLQlDSlNfSXRlbUN0cmwmIG9wZXJhdG9yPShjb25zdCBDSlNfSXRlbUN0cmwmIHNyYyk7DQotfTsNCi0NCi1jbGFzcyBDSlNfUmVzaXplRGxnIDogcHVibGljIENEaWFsb2cNCi17DQotLy8JREVDTEFSRV9EWU5BTUlDKENKU19SZXNpemVEbGcpDQotcHVibGljOg0KLQlDSlNfUmVzaXplRGxnKFVJTlQgbklELENXbmQgKnBQYXJlbnRXbmQgPSBOVUxMKTsNCi0JdmlydHVhbCB+Q0pTX1Jlc2l6ZURsZygpOw0KLQ0KLQ0KLXB1YmxpYzoNCi0Jc3RkOjp2ZWN0b3I8Q0pTX0l0ZW1DdHJsPgltX0l0ZW1zOyAgICAgICAgICAgLy8gYXJyYXkgb2YgY29udHJvbGxlZCBpdGVtcw0KLQlDUmVjdAkJCQkJbV9jbHRSZWN0LCBtX2NsdFIwOw0KLQlpbnQJCQkJCQltX3hNaW4sIG1feU1pbjsNCi0JaW50CQkJCQkJbV94U3QsICBtX3lTdDsJCS8vc3RlcD8NCi0JVUlOVAkJCQkJbV9uRGVsYXlTaWRlOwkJLy9kcmFnIHNpZGUgb2Ygd2luZG93DQotCUNTdGF0aWMJCQkJCW1fd25kU2l6ZUljb247ICAgICAvLyBzaXplIGljb24gd2luZG93DQotDQotcHJvdGVjdGVkOg0KLQl2b2lkIAkJCQkJQWRkQ29udHJvbCggVUlOVCBuSUQsIGludCB4bCwgaW50IHhyLCBpbnQgeXQsIGludCB5YiwgaW50IGJGbGlja2VyRnJlZSA9IDAsIA0KLQkJCQkJCQkJCSAgICBkb3VibGUgeFJhdGlvID0gLTEuMCwgZG91YmxlIGN4UmF0aW8gPSAtMS4wLA0KLQkJCQkJCQkJCSAgICBkb3VibGUgeVJhdGlvID0gLTEuMCwgZG91YmxlIGN5UmF0aW8gPSAtMS4wICk7DQotCXZvaWQgCQkJCQlBbGxvd1NpemluZyhpbnQgeHN0LCBpbnQgeXN0KTsNCi0Jdm9pZCAJCQkJCUhpZGVTaXplSWNvbih2b2lkKTsJDQotCXZpcnR1YWwgQk9PTAkJCU9uSW5pdERpYWxvZygpOw0KLQ0KLQl2b2lkCQkJCQlPblNpemluZyhVSU5UIG5TaWRlLCBMUFJFQ1QgbHBSZWN0KTsNCi0Jdm9pZAkJCQkJT25TaXplKFVJTlQgblR5cGUsIGludCBjeCwgaW50IGN5KTsNCi0Jdm9pZAkJCQkJT25HZXRNaW5NYXhJbmZvKE1JTk1BWElORk8gKnBtbWkpOw0KLQlCT09MCQkJCQlPbkVyYXNlQmtnbmQoQ0RDKiBwREMpOw0KLQ0KLXB1YmxpYzoNCi0JaW50CQkJCQkJVXBkYXRlQ29udHJvbFJlY3QoVUlOVCBuSUQsIENSZWN0ICpwbnIpOw0KLX07DQotDQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1DSWNvbkxpc3RCb3ggZm9yIENXbmRFbGVtZW50TGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi1jbGFzcyBDSWNvbkxpc3RCb3ggOiBwdWJsaWMgQ0xpc3RCb3gNCi17DQotcHVibGljOg0KLQlDSWNvbkxpc3RCb3goKTsNCi0JdmlydHVhbCB+Q0ljb25MaXN0Qm94KCk7DQotDQotcHVibGljOg0KLQlpbnQJCQkJSW5zZXJ0U3RyaW5nKGludCBuSW5kZXgsIExQQ1dTVFIgbHBzekl0ZW0gLCBpbnQgbkltYWdlKTsNCi0JdmlydHVhbAl2b2lkCVJlc2V0Q29udGVudCgpOw0KLQl2aXJ0dWFsIHZvaWQJR2V0VGV4dChpbnQgbkluZGV4LCBDU3RyaW5nJiByU3RyaW5nKTsNCi0NCi0JdmlydHVhbCB2b2lkCURyYXdJdGVtKExQRFJBV0lURU1TVFJVQ1QgbHBEcmF3SXRlbVN0cnVjdCk7DQotCXZvaWQJCQlNZWFzdXJlSXRlbShMUE1FQVNVUkVJVEVNU1RSVUNUIGxwTWVhc3VyZUl0ZW1TdHJ1Y3QpOw0KLQlpbnQJCQkJQ29tcGFyZUl0ZW0oTFBDT01QQVJFSVRFTVNUUlVDVCBscENvbXBhcmVJdGVtU3RydWN0KTsNCi0NCi1wcm90ZWN0ZWQ6DQotCS8vIEdlbmVyYXRlZCBtZXNzYWdlIG1hcCBmdW5jdGlvbnMNCi0JLy97e0FGWF9NU0coQ0ljb25MaXN0Qm94KQ0KLQlhZnhfbXNnIHZvaWQgT25Nb3VzZU1vdmUoVUlOVCBuRmxhZ3MsIENQb2ludCBwb2ludCk7DQotCS8vfX1BRlhfTVNHCQ0KLQlERUNMQVJFX01FU1NBR0VfTUFQKCkNCi0NCi1wcm90ZWN0ZWQ6DQotCXN0cnVjdCBJdGVtRGF0YXMgDQotCXsNCi0JCUNTdHJpbmcJY3NUZXh0Ow0KLQkJaW50CQluSW1hZ2U7DQotCX07DQotfTsNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1DV25kRWxlbWVudExpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSNkZWZpbmUgSURDX0xJU1RfSlNfRUxFTUVOVCAxMDA3MA0KLQ0KLSNkZWZpbmUgRUxFTUVOVF9MSVNUX1dJRFRIIDE0MA0KLSNkZWZpbmUgRUxFTUVOVF9MSVNUX0hFSUdIVCAxODANCi0jZGVmaW5lIEVMRU1FTlRfTElTVF9UT1BfT0ZGU0VUIDEzDQotDQotI2RlZmluZSBFTEVNRU5UX1RZUEVfTkFNRQkwDQotI2RlZmluZSBFTEVNRU5UX1RZUEVfQ09OU1QJMQ0KLSNkZWZpbmUgRUxFTUVOVF9UWVBFX0ZVTgkyDQotI2RlZmluZSBFTEVNRU5UX1RZUEVfUFJPCTMNCi0NCi1jbGFzcyBDV25kRWxlbWVudExpc3QgOiBwdWJsaWMgQ1duZA0KLXsNCi1wdWJsaWM6DQotCUNXbmRFbGVtZW50TGlzdCgpOw0KLQl2aXJ0dWFsIH5DV25kRWxlbWVudExpc3QoKTsNCi0JDQotcHVibGljOg0KLQl2aXJ0dWFsIHZvaWQJT25TaXplKFVJTlQgblR5cGUsIGludCBjeCwgaW50IGN5KTsNCi0JdmlydHVhbCBCT09MCUNyZWF0ZShDV25kKiBwUGFyZW50V25kKTsNCi0JdmlydHVhbCBCT09MCVNob3dXaW5kb3coaW50IG5DbWRTaG93KTsNCi0Jdm9pZAkJCVJlbW92ZUFsbEVsZW1lbnQoKTsNCi0Jdm9pZAkJCVNldEVsZW1lbnRMaXN0KExQQ1dTVFIqIHBFbGVtZW50LCBpbnQqIHBUeXBlICwgIGludCBpQ291bnQpOw0KLQl2b2lkCQkJQWRkRWxlbWVudChDRlhfV2lkZVN0cmluZyBjc1ZhbHVlICwgaW50IG5UeXBlKTsNCi0JQk9PTAkJCUdldEVsZW1lbnRTZWwoQ1N0cmluZyAmY3NFbGVtZW50KTsNCi0JQk9PTAkJCVNlbGVjdE5leHQoKTsNCi0JQk9PTAkJCVNlbGVjdFByZXZpb3VzKCk7DQotCUJPT0wJCQlTZWxlY3RGaXJzdCgpOw0KLQlCT09MCQkJU2VsZWN0TGFzdCgpOw0KLQlCT09MCQkJU2VsZWN0TmV4dFBhZ2UoKTsNCi0JQk9PTAkJCVNlbGVjdFByZXZpb3VzUGFnZSgpOw0KLQlpbnQJCQkJR2V0TGlzdEhlaWdodCgpOw0KLQkNCi1wcm90ZWN0ZWQ6DQotCS8vIEdlbmVyYXRlZCBtZXNzYWdlIG1hcCBmdW5jdGlvbnMNCi0JLy97e0FGWF9NU0coQ1duZEVsZW1lbnRMaXN0KQ0KLQlhZnhfbXNnIHZvaWQgT25QYWludCgpOw0KLQlhZnhfbXNnIEJPT0wgT25OY0FjdGl2YXRlKEJPT0wgYkFjdGl2ZSk7DQotCWFmeF9tc2cgdm9pZCBPblNlbEpTRWxlbWVudCgpOw0KLQlhZnhfbXNnIHZvaWQgT25EYmxjbGtKU0VsZW1lbnQoKTsNCi0JYWZ4X21zZyB2b2lkIE9uRGVzdHJveSgpOw0KLQkvL319QUZYX01TRwkNCi0JREVDTEFSRV9NRVNTQUdFX01BUCgpDQotcHJvdGVjdGVkOg0KLQlDSWNvbkxpc3RCb3gJbV9MaXN0Qm94Ow0KLQlCT09MCQkJbV9iQmxvY2s7DQotfTsNCi0NCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLS8vIENKU19Db25zb2xlRGxnILbUu7C/8g0KLWNsYXNzIENKU19Db25zb2xlRGxnIDogcHVibGljIENKU19SZXNpemVEbGcNCi17DQotCURFQ0xBUkVfRFlOQU1JQyhDSlNfQ29uc29sZURsZykNCi0NCi1wdWJsaWM6DQotCUNKU19Db25zb2xlRGxnKENSZWFkZXJfQXBwKiBwQXBwLCBDV25kKiBwUGFyZW50KTsJDQotCXZpcnR1YWwgfkNKU19Db25zb2xlRGxnKCk7DQotDQotCWVudW0geyBJREQgPSBJRERfSlNfQ09OU09MRSB9Ow0KLQ0KLQl2b2lkCQkJCUNyZWF0ZSgpOw0KLQ0KLQl2b2lkCQkJCUFwcGVuZENvbnNvbGVUZXh0KGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd1RleHQpOw0KLQl2b2lkCQkJCVNldENvbnNvbGVUZXh0KGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd1RleHQpOw0KLQlDRlhfV2lkZVN0cmluZwkJR2V0Q29uc29sZVRleHQoKSBjb25zdDsNCi0JQ0ZYX1dpZGVTdHJpbmcJCUdldFNjcmlwdFRleHQoKSBjb25zdDsNCi0NCi0JQk9PTAkJCQlSZXNldEVsZW1lbnRMaXN0KExQQ1dTVFIgbHBzdHJSZWYpOw0KLQlJRlhKU19SdW50aW1lKgkJR2V0SlNSdW50aW1lKCk7DQotDQotcHJvdGVjdGVkOg0KLQl2aXJ0dWFsIHZvaWQJCURvRGF0YUV4Y2hhbmdlKENEYXRhRXhjaGFuZ2UqIHBEWCk7CS8vIEREWC9ERFYg1qez1g0KLQ0KLXByb3RlY3RlZDoNCi0JdmlydHVhbCBCT09MCQlPbkluaXREaWFsb2coKTsJDQotCXZpcnR1YWwgdm9pZAkJT25DYW5jZWwoKTsNCi0NCi0JdmlydHVhbCBCT09MCQlQcmVUcmFuc2xhdGVNZXNzYWdlKE1TRyogcE1zZyk7DQotDQotcHJvdGVjdGVkOg0KLQkvLyBHZW5lcmF0ZWQgbWVzc2FnZSBtYXAgZnVuY3Rpb25zDQotCS8ve3tBRlhfTVNHKENKU19Db25zb2xlRGxnKQ0KLQlhZnhfbXNnIHZvaWQgT25CbkNsaWNrZWRDbGVhcigpOw0KLQlhZnhfbXNnIHZvaWQgT25CbkNsaWNrZWRPaygpOw0KLQlhZnhfbXNnIHZvaWQgT25CbkNsaWNrVGlwcygpOw0KLQlhZnhfbXNnIHZvaWQgT25TaXppbmcoVUlOVCBuU2lkZSwgTFBSRUNUIGxwUmVjdCk7DQotCWFmeF9tc2cgdm9pZCBPblNpemUoVUlOVCBuVHlwZSwgaW50IGN4LCBpbnQgY3kpOw0KLQlhZnhfbXNnIHZvaWQgT25HZXRNaW5NYXhJbmZvKE1JTk1BWElORk8gKnBtbWkpOw0KLQlhZnhfbXNnIEJPT0wgT25FcmFzZUJrZ25kKENEQyogcERDKTsNCi0JYWZ4X21zZyB2b2lkIE9uU2hvd1dpbmRvdyhCT09MIGJTaG93LCBVSU5UIG5TdGF0dXMpOw0KLQ0KLQlhZnhfbXNnIHZvaWQgT25MQnV0dG9uRG93bihVSU5UIG5GbGFncywgQ1BvaW50IHBvaW50KTsNCi0JYWZ4X21zZyB2b2lkIE9uQ2hhbmdlU2NyaXB0RWRpdChXUEFSQU0gd1BhcmFtICwgTFBBUkFNIGxQYXJhbSk7DQotCWFmeF9tc2cgdm9pZCBPbk1vdmUoaW50IHggLCBpbnQgeSk7DQotCXB1YmxpYzoNCi0JdmlydHVhbCBpbnQJRG9Nb2RhbCgpOwkNCi0JLy99fUFGWF9NU0cNCi0JREVDTEFSRV9NRVNTQUdFX01BUCgpDQotDQotcHVibGljOg0KLQlDR1dfTGluZU51bWJlckVkaXQJCQltX2VkdFNDOw0KLQlCT09MCQkJCQkJbV9iVGlwczsNCi0JY29uc3QgVUlOVAkJCQkJbV91VGV4dGxpbWl0ZWQ7DQotCUZYX0hHTE9CQUwJCQkJCW1faEdsb2JhbDsNCi0JQ1JlYWRlcl9BcHAgKgkJCQltX3BBcHA7DQotCUNXbmRFbGVtZW50TGlzdAkJCQltX1duZEVsZW1lbnRMaXN0Ow0KLX07DQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfSlNfQ09OU09MRV9IXworI2RlZmluZSBfSlNfQ09OU09MRV9IXworCisjaW5jbHVkZSAiLi4vcmVzL3Jlc291cmNlLmgiCisKKyNkZWZpbmUgV1NUX05PTkUJCTB4MDAJCQkJCS8vIE5vIHNpemUgY2hhbmdlZAorI2RlZmluZSBXU1RfTEVGVAkJMHgwMQkJCQkJLy8gc2l6ZSB0byBsZWZ0CisjZGVmaW5lIFdTVF9UT1AJCQkweDAyCQkJCQkvLyBzaXplIHRvIHRvcAorI2RlZmluZSBXU1RfUklHSFQJCTB4MDQJCQkJCS8vIHNpemUgdG8gcmlnaHQKKyNkZWZpbmUgV1NUX0JPVFRPTQkJMHgwOAkJCQkJLy8gc2l6ZSB0byBib3R0b20KKyNkZWZpbmUgV1NUX1RPUExFRlQJCShXU1RfVE9QfFdTVF9MRUZUKQkJLy8gc2l6ZSB0byB0b3AgJiBsZWZ0CisjZGVmaW5lIFdTVF9UT1BSSUdIVAkoV1NUX1RPUHxXU1RfUklHSFQpCQkvLyBzaXplIHRvIHRvcCAmIHJpZ2h0CisjZGVmaW5lIFdTVF9CT1RUT01SSUdIVAkoV1NUX0JPVFRPTXxXU1RfUklHSFQpCS8vIHNpemUgdG8gYm90dG9tICYgcmlnaHQKKyNkZWZpbmUgV1NUX0JPVFRPTUxFRlQJKFdTVF9CT1RUT018V1NUX0xFRlQpCS8vIHNpemUgdG8gYm90dG9tICYgcmlnaHQKKworI2lmbmRlZiBJRENfRExHU0laRUJPWAorI2RlZmluZSBJRENfRExHU0laRUJPWCAgNTAKKyNlbmRpZgkvKiBJRENfRExHU0laRUJPWCAqLworCitlbnVtIHsgbV9pZFNpemVJY29uID0gSURDX0RMR1NJWkVCT1ggfTsKK2VudW0gewkJCQkvLyBwb3NzaWJsZSBDb250cm9sIHJlU2l6ZSBUeXBlCisJQ1NUX05PTkUgPSAwLAorCUNTVF9SRVNJWkUsCQkvLyBOT01PVkUgKyBTSVpFLCBhZGQgYWxsIGRlbHRhLXNpemUgb2YgZGxnIHRvIGNvbnRyb2wKKwlDU1RfUkVQT1MsCQkvLyBNT1ZFKGFic29sdXRlbHkpICsgTk9TSVpFLCBtb3ZlIGNvbnRyb2wncyBwb3MgYnkgZGVsdGEtc2l6ZQorCUNTVF9SRUxBVElWRSwJLy8gTU9WRShwcm9wb3J0aW9uYWwpICArIE5PU0laRSwga2VlcCBjb250cm9sIGFsd2F5cyBhdCBhIHJlbGF0aXZlIHBvcworCUNTVF9aT09NLAkJLy8gTU9WRSArIFNJWkUgKGJvdGggYXJlIGF1dG9tYXRpY2FsbHkgcHJvcG9ydGlvbmFsKQorCUNTVF9ERUxUQV9aT09NCS8vIE1PVkUocHJvcG9ydGlvbmFsLCBzZXQgbWFudWFsbHkpICsgU0laRShwcm9wb3J0aW9uYWwsIHNldCBtYW51YWxsKQorfTsKKworLy8gY29udGFpbmVkIGNsYXNzIHRvIGhvbGQgaXRlbSBzdGF0ZQorLy8KK2NsYXNzIENKU19JdGVtQ3RybAoreworcHVibGljOgorCVVJTlQJbV9uSUQ7CisJVUlOVAltX3N0eExlZnQgIAkgICA6IDQ7CQkJLy8gd2hlbiBsZWZ0IHJlc2l6aW5nIC4uLgorCVVJTlQJbV9zdHhSaWdodCAgICAgOiA0OwkJCS8vIHdoZW4gcmlnaHQgcmVzaXppbmcgLi4uCisJVUlOVAltX3N0eVRvcCAgIAkgICA6IDQ7CQkJLy8gd2hlbiB0b3AgcmVzaXppbmcgLi4uCisJVUlOVAltX3N0eUJvdHRvbSAgICA6IDQ7CQkJLy8gd2hlbiBib3R0b20gcmVzaXppbmcgLi4uCisJVUlOVAltX2JGbGlja2VyRnJlZSA6IDE7CisJVUlOVAltX2JJbnZhbGlkYXRlICA6IDE7CQkJLy8gSW52YWxpZGF0ZSBjdHJsJ3MgcmVjdChlZy4gbm8tYXV0b21hdGljYWwgdXBkYXRlIGZvciBzdGF0aWMgd2hlbiByZXNpemUrbW92ZSkKKwlVSU5UCW1fcjAJCSAgIDogMTQ7CisJQ1JlY3QJbV93UmVjdDsKKwlkb3VibGUJbV94UmF0aW8sIG1fY3hSYXRpbzsKKwlkb3VibGUJbV95UmF0aW8sIG1fY3lSYXRpbzsKKworcHJvdGVjdGVkOgorCXZvaWQgQXNzaWduKGNvbnN0IENKU19JdGVtQ3RybCYgc3JjKTsKKworcHVibGljOgorCUNKU19JdGVtQ3RybCgpOworCUNKU19JdGVtQ3RybChjb25zdCBDSlNfSXRlbUN0cmwmIHNyYyk7CisKKwlIRFdQIE9uU2l6ZShIRFdQIGhkd3AsIGludCBzaXplVHlwZSwgQ1JlY3QgKnBuQ2x0UmVjdCwgQ1JlY3QgKnBvQ2x0UmVjdCwgQ1JlY3QgKnBSMCwgQ1duZCAqcERsZyk7CisKKwlDSlNfSXRlbUN0cmwmIG9wZXJhdG9yPShjb25zdCBDSlNfSXRlbUN0cmwmIHNyYyk7Cit9OworCitjbGFzcyBDSlNfUmVzaXplRGxnIDogcHVibGljIENEaWFsb2cKK3sKKy8vCURFQ0xBUkVfRFlOQU1JQyhDSlNfUmVzaXplRGxnKQorcHVibGljOgorCUNKU19SZXNpemVEbGcoVUlOVCBuSUQsQ1duZCAqcFBhcmVudFduZCA9IE5VTEwpOworCXZpcnR1YWwgfkNKU19SZXNpemVEbGcoKTsKKworCitwdWJsaWM6CisJc3RkOjp2ZWN0b3I8Q0pTX0l0ZW1DdHJsPgltX0l0ZW1zOyAgICAgICAgICAgLy8gYXJyYXkgb2YgY29udHJvbGxlZCBpdGVtcworCUNSZWN0CQkJCQltX2NsdFJlY3QsIG1fY2x0UjA7CisJaW50CQkJCQkJbV94TWluLCBtX3lNaW47CisJaW50CQkJCQkJbV94U3QsICBtX3lTdDsJCS8vc3RlcD8KKwlVSU5UCQkJCQltX25EZWxheVNpZGU7CQkvL2RyYWcgc2lkZSBvZiB3aW5kb3cKKwlDU3RhdGljCQkJCQltX3duZFNpemVJY29uOyAgICAgLy8gc2l6ZSBpY29uIHdpbmRvdworCitwcm90ZWN0ZWQ6CisJdm9pZCAJCQkJCUFkZENvbnRyb2woIFVJTlQgbklELCBpbnQgeGwsIGludCB4ciwgaW50IHl0LCBpbnQgeWIsIGludCBiRmxpY2tlckZyZWUgPSAwLCAKKwkJCQkJCQkJCSAgICBkb3VibGUgeFJhdGlvID0gLTEuMCwgZG91YmxlIGN4UmF0aW8gPSAtMS4wLAorCQkJCQkJCQkJICAgIGRvdWJsZSB5UmF0aW8gPSAtMS4wLCBkb3VibGUgY3lSYXRpbyA9IC0xLjAgKTsKKwl2b2lkIAkJCQkJQWxsb3dTaXppbmcoaW50IHhzdCwgaW50IHlzdCk7CisJdm9pZCAJCQkJCUhpZGVTaXplSWNvbih2b2lkKTsJCisJdmlydHVhbCBCT09MCQkJT25Jbml0RGlhbG9nKCk7CisKKwl2b2lkCQkJCQlPblNpemluZyhVSU5UIG5TaWRlLCBMUFJFQ1QgbHBSZWN0KTsKKwl2b2lkCQkJCQlPblNpemUoVUlOVCBuVHlwZSwgaW50IGN4LCBpbnQgY3kpOworCXZvaWQJCQkJCU9uR2V0TWluTWF4SW5mbyhNSU5NQVhJTkZPICpwbW1pKTsKKwlCT09MCQkJCQlPbkVyYXNlQmtnbmQoQ0RDKiBwREMpOworCitwdWJsaWM6CisJaW50CQkJCQkJVXBkYXRlQ29udHJvbFJlY3QoVUlOVCBuSUQsIENSZWN0ICpwbnIpOworfTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLUNJY29uTGlzdEJveCBmb3IgQ1duZEVsZW1lbnRMaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitjbGFzcyBDSWNvbkxpc3RCb3ggOiBwdWJsaWMgQ0xpc3RCb3gKK3sKK3B1YmxpYzoKKwlDSWNvbkxpc3RCb3goKTsKKwl2aXJ0dWFsIH5DSWNvbkxpc3RCb3goKTsKKworcHVibGljOgorCWludAkJCQlJbnNlcnRTdHJpbmcoaW50IG5JbmRleCwgTFBDV1NUUiBscHN6SXRlbSAsIGludCBuSW1hZ2UpOworCXZpcnR1YWwJdm9pZAlSZXNldENvbnRlbnQoKTsKKwl2aXJ0dWFsIHZvaWQJR2V0VGV4dChpbnQgbkluZGV4LCBDU3RyaW5nJiByU3RyaW5nKTsKKworCXZpcnR1YWwgdm9pZAlEcmF3SXRlbShMUERSQVdJVEVNU1RSVUNUIGxwRHJhd0l0ZW1TdHJ1Y3QpOworCXZvaWQJCQlNZWFzdXJlSXRlbShMUE1FQVNVUkVJVEVNU1RSVUNUIGxwTWVhc3VyZUl0ZW1TdHJ1Y3QpOworCWludAkJCQlDb21wYXJlSXRlbShMUENPTVBBUkVJVEVNU1RSVUNUIGxwQ29tcGFyZUl0ZW1TdHJ1Y3QpOworCitwcm90ZWN0ZWQ6CisJLy8gR2VuZXJhdGVkIG1lc3NhZ2UgbWFwIGZ1bmN0aW9ucworCS8ve3tBRlhfTVNHKENJY29uTGlzdEJveCkKKwlhZnhfbXNnIHZvaWQgT25Nb3VzZU1vdmUoVUlOVCBuRmxhZ3MsIENQb2ludCBwb2ludCk7CisJLy99fUFGWF9NU0cJCisJREVDTEFSRV9NRVNTQUdFX01BUCgpCisKK3Byb3RlY3RlZDoKKwlzdHJ1Y3QgSXRlbURhdGFzIAorCXsKKwkJQ1N0cmluZwljc1RleHQ7CisJCWludAkJbkltYWdlOworCX07Cit9OworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tQ1duZEVsZW1lbnRMaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNkZWZpbmUgSURDX0xJU1RfSlNfRUxFTUVOVCAxMDA3MAorCisjZGVmaW5lIEVMRU1FTlRfTElTVF9XSURUSCAxNDAKKyNkZWZpbmUgRUxFTUVOVF9MSVNUX0hFSUdIVCAxODAKKyNkZWZpbmUgRUxFTUVOVF9MSVNUX1RPUF9PRkZTRVQgMTMKKworI2RlZmluZSBFTEVNRU5UX1RZUEVfTkFNRQkwCisjZGVmaW5lIEVMRU1FTlRfVFlQRV9DT05TVAkxCisjZGVmaW5lIEVMRU1FTlRfVFlQRV9GVU4JMgorI2RlZmluZSBFTEVNRU5UX1RZUEVfUFJPCTMKKworY2xhc3MgQ1duZEVsZW1lbnRMaXN0IDogcHVibGljIENXbmQKK3sKK3B1YmxpYzoKKwlDV25kRWxlbWVudExpc3QoKTsKKwl2aXJ0dWFsIH5DV25kRWxlbWVudExpc3QoKTsKKwkKK3B1YmxpYzoKKwl2aXJ0dWFsIHZvaWQJT25TaXplKFVJTlQgblR5cGUsIGludCBjeCwgaW50IGN5KTsKKwl2aXJ0dWFsIEJPT0wJQ3JlYXRlKENXbmQqIHBQYXJlbnRXbmQpOworCXZpcnR1YWwgQk9PTAlTaG93V2luZG93KGludCBuQ21kU2hvdyk7CisJdm9pZAkJCVJlbW92ZUFsbEVsZW1lbnQoKTsKKwl2b2lkCQkJU2V0RWxlbWVudExpc3QoTFBDV1NUUiogcEVsZW1lbnQsIGludCogcFR5cGUgLCAgaW50IGlDb3VudCk7CisJdm9pZAkJCUFkZEVsZW1lbnQoQ0ZYX1dpZGVTdHJpbmcgY3NWYWx1ZSAsIGludCBuVHlwZSk7CisJQk9PTAkJCUdldEVsZW1lbnRTZWwoQ1N0cmluZyAmY3NFbGVtZW50KTsKKwlCT09MCQkJU2VsZWN0TmV4dCgpOworCUJPT0wJCQlTZWxlY3RQcmV2aW91cygpOworCUJPT0wJCQlTZWxlY3RGaXJzdCgpOworCUJPT0wJCQlTZWxlY3RMYXN0KCk7CisJQk9PTAkJCVNlbGVjdE5leHRQYWdlKCk7CisJQk9PTAkJCVNlbGVjdFByZXZpb3VzUGFnZSgpOworCWludAkJCQlHZXRMaXN0SGVpZ2h0KCk7CisJCitwcm90ZWN0ZWQ6CisJLy8gR2VuZXJhdGVkIG1lc3NhZ2UgbWFwIGZ1bmN0aW9ucworCS8ve3tBRlhfTVNHKENXbmRFbGVtZW50TGlzdCkKKwlhZnhfbXNnIHZvaWQgT25QYWludCgpOworCWFmeF9tc2cgQk9PTCBPbk5jQWN0aXZhdGUoQk9PTCBiQWN0aXZlKTsKKwlhZnhfbXNnIHZvaWQgT25TZWxKU0VsZW1lbnQoKTsKKwlhZnhfbXNnIHZvaWQgT25EYmxjbGtKU0VsZW1lbnQoKTsKKwlhZnhfbXNnIHZvaWQgT25EZXN0cm95KCk7CisJLy99fUFGWF9NU0cJCisJREVDTEFSRV9NRVNTQUdFX01BUCgpCitwcm90ZWN0ZWQ6CisJQ0ljb25MaXN0Qm94CW1fTGlzdEJveDsKKwlCT09MCQkJbV9iQmxvY2s7Cit9OworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gQ0pTX0NvbnNvbGVEbGcgttS7sL/yCitjbGFzcyBDSlNfQ29uc29sZURsZyA6IHB1YmxpYyBDSlNfUmVzaXplRGxnCit7CisJREVDTEFSRV9EWU5BTUlDKENKU19Db25zb2xlRGxnKQorCitwdWJsaWM6CisJQ0pTX0NvbnNvbGVEbGcoQ1JlYWRlcl9BcHAqIHBBcHAsIENXbmQqIHBQYXJlbnQpOwkKKwl2aXJ0dWFsIH5DSlNfQ29uc29sZURsZygpOworCisJZW51bSB7IElERCA9IElERF9KU19DT05TT0xFIH07CisKKwl2b2lkCQkJCUNyZWF0ZSgpOworCisJdm9pZAkJCQlBcHBlbmRDb25zb2xlVGV4dChjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dUZXh0KTsKKwl2b2lkCQkJCVNldENvbnNvbGVUZXh0KGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd1RleHQpOworCUNGWF9XaWRlU3RyaW5nCQlHZXRDb25zb2xlVGV4dCgpIGNvbnN0OworCUNGWF9XaWRlU3RyaW5nCQlHZXRTY3JpcHRUZXh0KCkgY29uc3Q7CisKKwlCT09MCQkJCVJlc2V0RWxlbWVudExpc3QoTFBDV1NUUiBscHN0clJlZik7CisJSUZYSlNfUnVudGltZSoJCUdldEpTUnVudGltZSgpOworCitwcm90ZWN0ZWQ6CisJdmlydHVhbCB2b2lkCQlEb0RhdGFFeGNoYW5nZShDRGF0YUV4Y2hhbmdlKiBwRFgpOwkvLyBERFgvRERWINans9YKKworcHJvdGVjdGVkOgorCXZpcnR1YWwgQk9PTAkJT25Jbml0RGlhbG9nKCk7CQorCXZpcnR1YWwgdm9pZAkJT25DYW5jZWwoKTsKKworCXZpcnR1YWwgQk9PTAkJUHJlVHJhbnNsYXRlTWVzc2FnZShNU0cqIHBNc2cpOworCitwcm90ZWN0ZWQ6CisJLy8gR2VuZXJhdGVkIG1lc3NhZ2UgbWFwIGZ1bmN0aW9ucworCS8ve3tBRlhfTVNHKENKU19Db25zb2xlRGxnKQorCWFmeF9tc2cgdm9pZCBPbkJuQ2xpY2tlZENsZWFyKCk7CisJYWZ4X21zZyB2b2lkIE9uQm5DbGlja2VkT2soKTsKKwlhZnhfbXNnIHZvaWQgT25CbkNsaWNrVGlwcygpOworCWFmeF9tc2cgdm9pZCBPblNpemluZyhVSU5UIG5TaWRlLCBMUFJFQ1QgbHBSZWN0KTsKKwlhZnhfbXNnIHZvaWQgT25TaXplKFVJTlQgblR5cGUsIGludCBjeCwgaW50IGN5KTsKKwlhZnhfbXNnIHZvaWQgT25HZXRNaW5NYXhJbmZvKE1JTk1BWElORk8gKnBtbWkpOworCWFmeF9tc2cgQk9PTCBPbkVyYXNlQmtnbmQoQ0RDKiBwREMpOworCWFmeF9tc2cgdm9pZCBPblNob3dXaW5kb3coQk9PTCBiU2hvdywgVUlOVCBuU3RhdHVzKTsKKworCWFmeF9tc2cgdm9pZCBPbkxCdXR0b25Eb3duKFVJTlQgbkZsYWdzLCBDUG9pbnQgcG9pbnQpOworCWFmeF9tc2cgdm9pZCBPbkNoYW5nZVNjcmlwdEVkaXQoV1BBUkFNIHdQYXJhbSAsIExQQVJBTSBsUGFyYW0pOworCWFmeF9tc2cgdm9pZCBPbk1vdmUoaW50IHggLCBpbnQgeSk7CisJcHVibGljOgorCXZpcnR1YWwgaW50CURvTW9kYWwoKTsJCisJLy99fUFGWF9NU0cKKwlERUNMQVJFX01FU1NBR0VfTUFQKCkKKworcHVibGljOgorCUNHV19MaW5lTnVtYmVyRWRpdAkJCW1fZWR0U0M7CisJQk9PTAkJCQkJCW1fYlRpcHM7CisJY29uc3QgVUlOVAkJCQkJbV91VGV4dGxpbWl0ZWQ7CisJRlhfSEdMT0JBTAkJCQkJbV9oR2xvYmFsOworCUNSZWFkZXJfQXBwICoJCQkJbV9wQXBwOworCUNXbmRFbGVtZW50TGlzdAkJCQltX1duZEVsZW1lbnRMaXN0OworfTsKKwogI2VuZGlmIC8vX0pTX0NPTlNPTEVfSF8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9KU19Db250ZXh0LmggYi9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9KU19Db250ZXh0LmgKaW5kZXggMGU3OTE2OS4uODA2ODA4NiAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvSlNfQ29udGV4dC5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0NvbnRleHQuaApAQCAtMSwxMDEgKzEsMTAxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9KU19DT05URVhUX0hfDQotI2RlZmluZSBfSlNfQ09OVEVYVF9IXw0KLQ0KLWNsYXNzIENKU19FdmVudEhhbmRsZXI7DQotY2xhc3MgQ0pTX1J1bnRpbWU7DQotDQotY2xhc3MgQ0pTX0NvbnRleHQgOiBwdWJsaWMgSUZYSlNfQ29udGV4dA0KLXsNCi1wdWJsaWM6DQotCUNKU19Db250ZXh0KENKU19SdW50aW1lKiBwUnVudGltZSk7DQotCXZpcnR1YWwgfkNKU19Db250ZXh0KCk7DQotDQotcHVibGljOg0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJQ29tcGlsZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc2NyaXB0LCBDRlhfV2lkZVN0cmluZyYgaW5mbyk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlSdW5TY3JpcHQoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNjcmlwdCwgQ0ZYX1dpZGVTdHJpbmcmIGluZm8pOw0KLQ0KLXB1YmxpYzoNCi0JdmlydHVhbCB2b2lkCQkJCU9uQXBwX0luaXQoKTsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCU9uRG9jX09wZW4oQ1BERlNES19Eb2N1bWVudCogcERvYywgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0clRhcmdldE5hbWUpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25Eb2NfV2lsbFByaW50KENQREZTREtfRG9jdW1lbnQqIHBEb2MpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25Eb2NfRGlkUHJpbnQoQ1BERlNES19Eb2N1bWVudCogcERvYyk7DQotCXZpcnR1YWwgdm9pZAkJCQlPbkRvY19XaWxsU2F2ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jKTsNCi0JdmlydHVhbCB2b2lkCQkJCU9uRG9jX0RpZFNhdmUoQ1BERlNES19Eb2N1bWVudCogcERvYyk7DQotCXZpcnR1YWwgdm9pZAkJCQlPbkRvY19XaWxsQ2xvc2UoQ1BERlNES19Eb2N1bWVudCogcERvYyk7DQotDQotCXZpcnR1YWwgdm9pZAkJCQlPblBhZ2VfT3BlbihDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KTsNCi0JdmlydHVhbCB2b2lkCQkJCU9uUGFnZV9DbG9zZShDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KTsNCi0JdmlydHVhbCB2b2lkCQkJCU9uUGFnZV9JblZpZXcoQ1BERlNES19Eb2N1bWVudCogcFRhcmdldCk7DQotCXZpcnR1YWwgdm9pZAkJCQlPblBhZ2VfT3V0VmlldyhDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KTsNCi0JDQotCXZpcnR1YWwgdm9pZAkJCQlPbkZpZWxkX01vdXNlRG93bihGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkICpwVGFyZ2V0KTsNCi0JdmlydHVhbCB2b2lkCQkJCU9uRmllbGRfTW91c2VFbnRlcihGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkICpwVGFyZ2V0KTsNCi0JdmlydHVhbCB2b2lkCQkJCU9uRmllbGRfTW91c2VFeGl0KEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQgKnBUYXJnZXQpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25GaWVsZF9Nb3VzZVVwKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQgKnBUYXJnZXQpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25GaWVsZF9Gb2N1cyhGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkKiBwVGFyZ2V0LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgVmFsdWUpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25GaWVsZF9CbHVyKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBWYWx1ZSk7DQotDQotCXZpcnR1YWwgdm9pZAkJCQlPbkZpZWxkX0NhbGN1bGF0ZShDUERGX0Zvcm1GaWVsZCogcFNvdXJjZSwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIENGWF9XaWRlU3RyaW5nJiBWYWx1ZSwgRlhfQk9PTCYgYlJjKTsNCi0JdmlydHVhbCB2b2lkCQkJCU9uRmllbGRfRm9ybWF0KGludCBuQ29tbWl0S2V5LCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCwgQ0ZYX1dpZGVTdHJpbmcmIFZhbHVlLCBGWF9CT09MIGJXaWxsQ29tbWl0KTsNCi0JdmlydHVhbCB2b2lkCQkJCU9uRmllbGRfS2V5c3Ryb2tlKGludCBuQ29tbWl0S2V5LCBDRlhfV2lkZVN0cmluZyYgc3RyQ2hhbmdlLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyQ2hhbmdlRXgsDQotCQkJCQkJCQkJRlhfQk9PTCBiS2V5RG93biwgRlhfQk9PTCBiTW9kaWZpZXIsIGludCAmblNlbEVuZCxpbnQgJm5TZWxTdGFydCwgRlhfQk9PTCBiU2hpZnQsDQotCQkJCQkJCQkJQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIENGWF9XaWRlU3RyaW5nJiBWYWx1ZSwgRlhfQk9PTCBiV2lsbENvbW1pdCwgDQotCQkJCQkJCQkJRlhfQk9PTCBiRmllbGRGdWxsLCBGWF9CT09MICZiUmMpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25GaWVsZF9WYWxpZGF0ZShDRlhfV2lkZVN0cmluZyYgc3RyQ2hhbmdlLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyQ2hhbmdlRXgsIEZYX0JPT0wgYktleURvd24sDQotCQkJCQkJCQkJRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCwgQ0ZYX1dpZGVTdHJpbmcmIFZhbHVlLCBGWF9CT09MJiBiUmMpOw0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJT25TY3JlZW5fRm9jdXMoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKTsNCi0JdmlydHVhbCB2b2lkCQkJCU9uU2NyZWVuX0JsdXIoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKTsNCi0JdmlydHVhbCB2b2lkCQkJCU9uU2NyZWVuX09wZW4oRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKTsNCi0JdmlydHVhbCB2b2lkCQkJCU9uU2NyZWVuX0Nsb3NlKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbik7DQotCXZpcnR1YWwgdm9pZAkJCQlPblNjcmVlbl9Nb3VzZURvd24oRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKTsNCi0JdmlydHVhbCB2b2lkCQkJCU9uU2NyZWVuX01vdXNlVXAoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKTsNCi0JdmlydHVhbCB2b2lkCQkJCU9uU2NyZWVuX01vdXNlRW50ZXIoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKTsNCi0JdmlydHVhbCB2b2lkCQkJCU9uU2NyZWVuX01vdXNlRXhpdChGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25TY3JlZW5fSW5WaWV3KEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbik7DQotCXZpcnR1YWwgdm9pZAkJCQlPblNjcmVlbl9PdXRWaWV3KEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbik7DQotDQotCXZpcnR1YWwgdm9pZAkJCQlPbkJvb2ttYXJrX01vdXNlVXAoQ1BERl9Cb29rbWFyayogcEJvb2tNYXJrKTsNCi0JdmlydHVhbCB2b2lkCQkJCU9uTGlua19Nb3VzZVVwKENQREZTREtfRG9jdW1lbnQqIHBUYXJnZXQpOw0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJT25NZW51X0V4ZWMoQ1BERlNES19Eb2N1bWVudCogcFRhcmdldCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0clRhcmdldE5hbWUpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25CYXRjaEV4ZWMoQ1BERlNES19Eb2N1bWVudCogcFRhcmdldCk7DQotCXZpcnR1YWwgdm9pZAkJCQlPbkNvbnNvbGVfRXhlYygpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT25FeHRlcm5hbF9FeGVjKCk7DQotDQotCXZpcnR1YWwgdm9pZAkJCQlFbmFibGVNZXNzYWdlQm94KEZYX0JPT0wgYkVuYWJsZSkge21fYk1zZ0JveEVuYWJsZSA9IGJFbmFibGU7fQ0KLQlGWF9CT09MCQkJCQkJSXNNc2dCb3hFbmFibGVkKCkgY29uc3Qge3JldHVybiBtX2JNc2dCb3hFbmFibGU7fQ0KLQ0KLXB1YmxpYzoNCi0JQ1BERkRvY19FbnZpcm9ubWVudCoJCQlHZXRSZWFkZXJBcHAoKTsNCi0JQ0pTX1J1bnRpbWUqCQkJCUdldEpTUnVudGltZSgpe3JldHVybiBtX3BSdW50aW1lO30NCi0NCi0JRlhfQk9PTAkJCQkJCURvSm9iKGludCBuTW9kZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNjcmlwdCwgQ0ZYX1dpZGVTdHJpbmcmIGluZm8pOw0KLQ0KLQlDSlNfRXZlbnRIYW5kbGVyKgkJCUdldEV2ZW50SGFuZGxlcigpe3JldHVybiBtX3BFdmVudEhhbmRsZXI7fTsJDQotCUNQREZTREtfRG9jdW1lbnQqCQkJR2V0UmVhZGVyRG9jdW1lbnQoKTsNCi0NCi1wcml2YXRlOg0KLQlDSlNfUnVudGltZSoJCQkJbV9wUnVudGltZTsJDQotCUNKU19FdmVudEhhbmRsZXIqCQkJbV9wRXZlbnRIYW5kbGVyOwkNCi0NCi0JRlhfQk9PTAkJCQkJCW1fYkJ1c3k7CQ0KLQlGWF9CT09MCQkJCQkJbV9iTXNnQm94RW5hYmxlOw0KLX07DQotDQotLy8gc3RhdGljIENGWF9XaWRlU3RyaW5nIEpTR2V0U3RyaW5nRnJvbUlEKENKU19Db250ZXh0KiBwQ29udGV4dCwgVUlOVCBJRCkNCi0vLyB7DQotLy8gCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0vLyANCi0vLyAJcmV0dXJuIEpTX0xvYWRTdHJpbmcocENvbnRleHQtPkdldFJlYWRlckFwcCgpLCBJRCk7DQotLy8gfQ0KLQ0KLSNlbmRpZiAvL19KU19DT05URVhUX0hfDQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfSlNfQ09OVEVYVF9IXworI2RlZmluZSBfSlNfQ09OVEVYVF9IXworCitjbGFzcyBDSlNfRXZlbnRIYW5kbGVyOworY2xhc3MgQ0pTX1J1bnRpbWU7CisKK2NsYXNzIENKU19Db250ZXh0IDogcHVibGljIElGWEpTX0NvbnRleHQKK3sKK3B1YmxpYzoKKwlDSlNfQ29udGV4dChDSlNfUnVudGltZSogcFJ1bnRpbWUpOworCXZpcnR1YWwgfkNKU19Db250ZXh0KCk7CisKK3B1YmxpYzoKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJQ29tcGlsZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc2NyaXB0LCBDRlhfV2lkZVN0cmluZyYgaW5mbyk7CisJdmlydHVhbCBGWF9CT09MCQkJCVJ1blNjcmlwdChjb25zdCBDRlhfV2lkZVN0cmluZyYgc2NyaXB0LCBDRlhfV2lkZVN0cmluZyYgaW5mbyk7CisKK3B1YmxpYzoKKwl2aXJ0dWFsIHZvaWQJCQkJT25BcHBfSW5pdCgpOworCisJdmlydHVhbCB2b2lkCQkJCU9uRG9jX09wZW4oQ1BERlNES19Eb2N1bWVudCogcERvYywgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0clRhcmdldE5hbWUpOworCXZpcnR1YWwgdm9pZAkJCQlPbkRvY19XaWxsUHJpbnQoQ1BERlNES19Eb2N1bWVudCogcERvYyk7CisJdmlydHVhbCB2b2lkCQkJCU9uRG9jX0RpZFByaW50KENQREZTREtfRG9jdW1lbnQqIHBEb2MpOworCXZpcnR1YWwgdm9pZAkJCQlPbkRvY19XaWxsU2F2ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jKTsKKwl2aXJ0dWFsIHZvaWQJCQkJT25Eb2NfRGlkU2F2ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jKTsKKwl2aXJ0dWFsIHZvaWQJCQkJT25Eb2NfV2lsbENsb3NlKENQREZTREtfRG9jdW1lbnQqIHBEb2MpOworCisJdmlydHVhbCB2b2lkCQkJCU9uUGFnZV9PcGVuKENQREZTREtfRG9jdW1lbnQqIHBUYXJnZXQpOworCXZpcnR1YWwgdm9pZAkJCQlPblBhZ2VfQ2xvc2UoQ1BERlNES19Eb2N1bWVudCogcFRhcmdldCk7CisJdmlydHVhbCB2b2lkCQkJCU9uUGFnZV9JblZpZXcoQ1BERlNES19Eb2N1bWVudCogcFRhcmdldCk7CisJdmlydHVhbCB2b2lkCQkJCU9uUGFnZV9PdXRWaWV3KENQREZTREtfRG9jdW1lbnQqIHBUYXJnZXQpOworCQorCXZpcnR1YWwgdm9pZAkJCQlPbkZpZWxkX01vdXNlRG93bihGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkICpwVGFyZ2V0KTsKKwl2aXJ0dWFsIHZvaWQJCQkJT25GaWVsZF9Nb3VzZUVudGVyKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQgKnBUYXJnZXQpOworCXZpcnR1YWwgdm9pZAkJCQlPbkZpZWxkX01vdXNlRXhpdChGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkICpwVGFyZ2V0KTsKKwl2aXJ0dWFsIHZvaWQJCQkJT25GaWVsZF9Nb3VzZVVwKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQgKnBUYXJnZXQpOworCXZpcnR1YWwgdm9pZAkJCQlPbkZpZWxkX0ZvY3VzKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBWYWx1ZSk7CisJdmlydHVhbCB2b2lkCQkJCU9uRmllbGRfQmx1cihGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkKiBwVGFyZ2V0LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgVmFsdWUpOworCisJdmlydHVhbCB2b2lkCQkJCU9uRmllbGRfQ2FsY3VsYXRlKENQREZfRm9ybUZpZWxkKiBwU291cmNlLCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCwgQ0ZYX1dpZGVTdHJpbmcmIFZhbHVlLCBGWF9CT09MJiBiUmMpOworCXZpcnR1YWwgdm9pZAkJCQlPbkZpZWxkX0Zvcm1hdChpbnQgbkNvbW1pdEtleSwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIENGWF9XaWRlU3RyaW5nJiBWYWx1ZSwgRlhfQk9PTCBiV2lsbENvbW1pdCk7CisJdmlydHVhbCB2b2lkCQkJCU9uRmllbGRfS2V5c3Ryb2tlKGludCBuQ29tbWl0S2V5LCBDRlhfV2lkZVN0cmluZyYgc3RyQ2hhbmdlLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyQ2hhbmdlRXgsCisJCQkJCQkJCQlGWF9CT09MIGJLZXlEb3duLCBGWF9CT09MIGJNb2RpZmllciwgaW50ICZuU2VsRW5kLGludCAmblNlbFN0YXJ0LCBGWF9CT09MIGJTaGlmdCwKKwkJCQkJCQkJCUNQREZfRm9ybUZpZWxkKiBwVGFyZ2V0LCBDRlhfV2lkZVN0cmluZyYgVmFsdWUsIEZYX0JPT0wgYldpbGxDb21taXQsIAorCQkJCQkJCQkJRlhfQk9PTCBiRmllbGRGdWxsLCBGWF9CT09MICZiUmMpOworCXZpcnR1YWwgdm9pZAkJCQlPbkZpZWxkX1ZhbGlkYXRlKENGWF9XaWRlU3RyaW5nJiBzdHJDaGFuZ2UsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJDaGFuZ2VFeCwgRlhfQk9PTCBiS2V5RG93biwKKwkJCQkJCQkJCUZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIENGWF9XaWRlU3RyaW5nJiBWYWx1ZSwgRlhfQk9PTCYgYlJjKTsKKworCXZpcnR1YWwgdm9pZAkJCQlPblNjcmVlbl9Gb2N1cyhGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pOworCXZpcnR1YWwgdm9pZAkJCQlPblNjcmVlbl9CbHVyKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbik7CisJdmlydHVhbCB2b2lkCQkJCU9uU2NyZWVuX09wZW4oRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKTsKKwl2aXJ0dWFsIHZvaWQJCQkJT25TY3JlZW5fQ2xvc2UoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKTsKKwl2aXJ0dWFsIHZvaWQJCQkJT25TY3JlZW5fTW91c2VEb3duKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbik7CisJdmlydHVhbCB2b2lkCQkJCU9uU2NyZWVuX01vdXNlVXAoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKTsKKwl2aXJ0dWFsIHZvaWQJCQkJT25TY3JlZW5fTW91c2VFbnRlcihGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pOworCXZpcnR1YWwgdm9pZAkJCQlPblNjcmVlbl9Nb3VzZUV4aXQoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKTsKKwl2aXJ0dWFsIHZvaWQJCQkJT25TY3JlZW5fSW5WaWV3KEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbik7CisJdmlydHVhbCB2b2lkCQkJCU9uU2NyZWVuX091dFZpZXcoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKTsKKworCXZpcnR1YWwgdm9pZAkJCQlPbkJvb2ttYXJrX01vdXNlVXAoQ1BERl9Cb29rbWFyayogcEJvb2tNYXJrKTsKKwl2aXJ0dWFsIHZvaWQJCQkJT25MaW5rX01vdXNlVXAoQ1BERlNES19Eb2N1bWVudCogcFRhcmdldCk7CisKKwl2aXJ0dWFsIHZvaWQJCQkJT25NZW51X0V4ZWMoQ1BERlNES19Eb2N1bWVudCogcFRhcmdldCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0clRhcmdldE5hbWUpOworCXZpcnR1YWwgdm9pZAkJCQlPbkJhdGNoRXhlYyhDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KTsKKwl2aXJ0dWFsIHZvaWQJCQkJT25Db25zb2xlX0V4ZWMoKTsKKwl2aXJ0dWFsIHZvaWQJCQkJT25FeHRlcm5hbF9FeGVjKCk7CisKKwl2aXJ0dWFsIHZvaWQJCQkJRW5hYmxlTWVzc2FnZUJveChGWF9CT09MIGJFbmFibGUpIHttX2JNc2dCb3hFbmFibGUgPSBiRW5hYmxlO30KKwlGWF9CT09MCQkJCQkJSXNNc2dCb3hFbmFibGVkKCkgY29uc3Qge3JldHVybiBtX2JNc2dCb3hFbmFibGU7fQorCitwdWJsaWM6CisJQ1BERkRvY19FbnZpcm9ubWVudCoJCQlHZXRSZWFkZXJBcHAoKTsKKwlDSlNfUnVudGltZSoJCQkJR2V0SlNSdW50aW1lKCl7cmV0dXJuIG1fcFJ1bnRpbWU7fQorCisJRlhfQk9PTAkJCQkJCURvSm9iKGludCBuTW9kZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNjcmlwdCwgQ0ZYX1dpZGVTdHJpbmcmIGluZm8pOworCisJQ0pTX0V2ZW50SGFuZGxlcioJCQlHZXRFdmVudEhhbmRsZXIoKXtyZXR1cm4gbV9wRXZlbnRIYW5kbGVyO307CQorCUNQREZTREtfRG9jdW1lbnQqCQkJR2V0UmVhZGVyRG9jdW1lbnQoKTsKKworcHJpdmF0ZToKKwlDSlNfUnVudGltZSoJCQkJbV9wUnVudGltZTsJCisJQ0pTX0V2ZW50SGFuZGxlcioJCQltX3BFdmVudEhhbmRsZXI7CQorCisJRlhfQk9PTAkJCQkJCW1fYkJ1c3k7CQorCUZYX0JPT0wJCQkJCQltX2JNc2dCb3hFbmFibGU7Cit9OworCisvLyBzdGF0aWMgQ0ZYX1dpZGVTdHJpbmcgSlNHZXRTdHJpbmdGcm9tSUQoQ0pTX0NvbnRleHQqIHBDb250ZXh0LCBVSU5UIElEKQorLy8geworLy8gCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKy8vIAorLy8gCXJldHVybiBKU19Mb2FkU3RyaW5nKHBDb250ZXh0LT5HZXRSZWFkZXJBcHAoKSwgSUQpOworLy8gfQorCisjZW5kaWYgLy9fSlNfQ09OVEVYVF9IXworCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9KU19EZWZpbmUuaCBiL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0RlZmluZS5oCmluZGV4IDgxZDQ0NTUuLmNjMjAzMzMgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0RlZmluZS5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0RlZmluZS5oCkBAIC0xLDc4NSArMSw3ODUgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0pTX0RFRklORV9IXw0KLSNkZWZpbmUgX0pTX0RFRklORV9IXw0KLQ0KLXR5cGVkZWYgdjg6OlZhbHVlCQkJSlNWYWx1ZTsNCi10eXBlZGVmIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4JSlNPYmplY3Q7DQotdHlwZWRlZiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+CUpTRlhPYmplY3Q7DQotdHlwZWRlZiB1bnNpZ25lZAkJSlNCb29sOw0KLQ0KLXN0cnVjdCBKU0NvbnN0U3BlYw0KLXsNCi0JY29uc3Qgd2NoYXJfdCogcE5hbWU7DQotCWRvdWJsZSBudW1iZXI7DQotCWNvbnN0IHdjaGFyX3QqIHN0cmluZzsNCi0JRlhfQllURSB0OyAvLzA6ZG91YmxlIDE6c3RyDQotfTsNCi0NCi1zdHJ1Y3QgSlNQcm9wZXJ0eVNwZWMNCi17DQotCWNvbnN0IHdjaGFyX3QqIHBOYW1lOw0KLQl2ODo6QWNjZXNzb3JHZXR0ZXJDYWxsYmFjayBwUHJvcEdldDsNCi0Jdjg6OkFjY2Vzc29yU2V0dGVyQ2FsbGJhY2sgcFByb3BQdXQ7DQotfTsNCi0NCi1zdHJ1Y3QgSlNNZXRob2RTcGVjDQotew0KLQljb25zdCB3Y2hhcl90KiBwTmFtZTsNCi0Jdjg6OkZ1bmN0aW9uQ2FsbGJhY2sgcE1ldGhvZENhbGw7DQotCXVuc2lnbmVkIG5QYXJhbU51bTsNCi19Ow0KLQ0KLXR5cGVkZWYgQ0ZYX1dpZGVTdHJpbmcJSlNfRXJyb3JTdHJpbmc7DQotDQotI2RlZmluZSBKU19UUlVFCQkJKHVuc2lnbmVkKTENCi0jZGVmaW5lIEpTX0ZBTFNFCQkodW5zaWduZWQpMA0KLQ0KLQ0KLSNkZWZpbmUgQ0pTX1BvaW50c0FycmF5CQlDRlhfQXJyYXlUZW1wbGF0ZTxmbG9hdD4NCi0jZGVmaW5lIENKU19JbnRBcnJheQkJQ0ZYX0FycmF5VGVtcGxhdGU8aW50Pg0KLQ0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFBVQkxJQyBERUZJTkUgU1BFQyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQotI2lmbmRlZiBfX0dOVUNfXw0KLSNkZWZpbmUgSlNfV0lERVNUUklORyh3aWRlc3RyaW5nKSBMI3dpZGVzdHJpbmcNCi0jZWxzZQ0KLSNkZWZpbmUgSlNfV0lERVNUUklORyh3aWRlc3RyaW5nKSBMIiIjd2lkZXN0cmluZw0KLSNlbmRpZg0KLQ0KLSNkZWZpbmUgT0JKX1BST1BfUEFSQU1TCQkJSUZYSlNfQ29udGV4dCogY2MsIENKU19Qcm9wVmFsdWUmIHZwLCBKU19FcnJvclN0cmluZyYgc0Vycm9yDQotI2RlZmluZSBPQkpfTUVUSE9EX1BBUkFNUwkJSUZYSlNfQ29udGV4dCogY2MsIGNvbnN0IENKU19QYXJhbWV0ZXJzJiBwYXJhbXMsIENKU19WYWx1ZSYgdlJldCwgSlNfRXJyb3JTdHJpbmcmIHNFcnJvcg0KLSNkZWZpbmUgQkVHSU5fSlNfU1RBVElDX0NPTlNUKGpzX2NsYXNzX25hbWUpIEpTQ29uc3RTcGVjIGpzX2NsYXNzX25hbWU6OkpTX0NsYXNzX0NvbnN0c1tdID0gew0KLSNkZWZpbmUgSlNfU1RBVElDX0NPTlNUX0VOVFJZX05VTUJFUihjb25zdF9uYW1lLCBwVmFsdWUpIHtKU19XSURFU1RSSU5HKGNvbnN0X25hbWUpLCBwVmFsdWUsIEwiIiwgMH0sDQotI2RlZmluZSBKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKGNvbnN0X25hbWUsIHBWYWx1ZSkge0pTX1dJREVTVFJJTkcoY29uc3RfbmFtZSksIDAsIEpTX1dJREVTVFJJTkcocFZhbHVlKSwgMX0sDQotI2RlZmluZSBFTkRfSlNfU1RBVElDX0NPTlNUKCkgezAsIDAsIDAsIDB9fTsNCi0NCi0jZGVmaW5lIEJFR0lOX0pTX1NUQVRJQ19QUk9QKGpzX2NsYXNzX25hbWUpIEpTUHJvcGVydHlTcGVjIGpzX2NsYXNzX25hbWU6OkpTX0NsYXNzX1Byb3BlcnRpZXNbXSA9IHsNCi0jZGVmaW5lIEpTX1NUQVRJQ19QUk9QX0VOVFJZKHByb3BfbmFtZSkge0pTX1dJREVTVFJJTkcocHJvcF9uYW1lKSwgZ2V0XyMjcHJvcF9uYW1lIyNfc3RhdGljLCBzZXRfIyNwcm9wX25hbWUjI19zdGF0aWN9LA0KLSNkZWZpbmUgRU5EX0pTX1NUQVRJQ19QUk9QKCkgezAsIDAsIDB9fTsNCi0NCi0jZGVmaW5lIEJFR0lOX0pTX1NUQVRJQ19NRVRIT0QoanNfY2xhc3NfbmFtZSkgSlNNZXRob2RTcGVjIGpzX2NsYXNzX25hbWU6OkpTX0NsYXNzX01ldGhvZHNbXSA9IHsNCi0jZGVmaW5lIEpTX1NUQVRJQ19NRVRIT0RfRU5UUlkobWV0aG9kX25hbWUsIG5hcmdzKSB7SlNfV0lERVNUUklORyhtZXRob2RfbmFtZSksIG1ldGhvZF9uYW1lIyNfc3RhdGljLCBuYXJnc30sDQotI2RlZmluZSBFTkRfSlNfU1RBVElDX01FVEhPRCgpIHswLCAwLCAwfX07DQotI2RlZmluZSBNRU1MRUFLQ0hFQ0tfMSgpICgodm9pZCkwKQ0KLSNkZWZpbmUgTUVNTEVBS0NIRUNLXzIobWFpbl9uYW1lLCBzdWJfbmFtZSkgKCh2b2lkKTApDQotDQotDQotLyoNCi0jaWZkZWYgX0RFQlVHDQotI2RlZmluZSBNRU1MRUFLQ0hFQ0tfMSgpIFwNCi0JX0NydE1lbVN0YXRlIHN0YXRlMTtcDQotCV9DcnRNZW1DaGVja3BvaW50KCZzdGF0ZTEpOw0KLQ0KLSNkZWZpbmUgTUVNTEVBS0NIRUNLXzIobWFpbl9uYW1lLHN1Yl9uYW1lKSBcDQotCV9DcnRNZW1TdGF0ZSBzdGF0ZTI7XA0KLQlfQ3J0TWVtQ2hlY2twb2ludCgmc3RhdGUyKTtcDQotCV9DcnRNZW1TdGF0ZSBkaWZmO1wNCi0JX0NydE1lbURpZmZlcmVuY2UoJmRpZmYsJnN0YXRlMSwmc3RhdGUyKTtcDQotCWlmIChkaWZmLmxTaXplc1tfTk9STUFMX0JMT0NLXSA+IDApXA0KLQl7XA0KLQkJVFJBQ0UoIkRldGVjdGVkIG5vcm1hbCBibG9jayBtZW1vcnkgbGVha3MgaW4gSlMgTW9kdWxlISBbJXMuJXNdXG4iLCNtYWluX25hbWUsI3N1Yl9uYW1lKTtcDQotCQlfQ3J0TWVtRHVtcFN0YXRpc3RpY3MoJmRpZmYpO1wNCi0JfQ0KLSNlbHNlDQotCSNkZWZpbmUgTUVNTEVBS0NIRUNLXzEoKSAoKHZvaWQpMCkNCi0JI2RlZmluZSBNRU1MRUFLQ0hFQ0tfMihtYWluX25hbWUsc3ViX25hbWUpICgodm9pZCkwKQ0KLSNlbmRpZg0KLSovDQotDQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBQUk9QIENBTExCQUNLID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQotDQotI2RlZmluZSBKU19TVEFUSUNfUFJPUF9HRVQocHJvcF9uYW1lLCBjbGFzc19uYW1lKVwNCi0Jc3RhdGljIHZvaWQgZ2V0XyMjcHJvcF9uYW1lIyNfc3RhdGljKEpTX1BST1BHRVRfQVJHUylcDQote1wNCi0Jdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBpbmZvLkdldElzb2xhdGUoKTtcDQotCXY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IGlzb2xhdGUtPkdldEN1cnJlbnRDb250ZXh0KCk7XA0KLQl2ODo6TG9jYWw8djg6OlZhbHVlPiB2ID0gY29udGV4dC0+R2V0RW1iZWRkZXJEYXRhKDEpO1wNCi0JQVNTRVJUKCF2LklzRW1wdHkoKSk7XA0KLQlpZih2LklzRW1wdHkoKSkgcmV0dXJuO1wNCi0Jdjg6OkhhbmRsZTx2ODo6RXh0ZXJuYWw+IGZpZWxkID0gdjg6OkhhbmRsZTx2ODo6RXh0ZXJuYWw+OjpDYXN0KHYpO1wNCi0JSUZYSlNfUnVudGltZSogcFJ1bnRpbWUgPSAoSUZYSlNfUnVudGltZSopZmllbGQtPlZhbHVlKCk7XA0KLQlJRlhKU19Db250ZXh0KiBjYyA9IHBSdW50aW1lLT5HZXRDdXJyZW50Q29udGV4dCgpO1wNCi0JQ0pTX1Byb3BWYWx1ZSB2YWx1ZShpc29sYXRlKTtcDQotCXZhbHVlLlN0YXJ0R2V0dGluZygpO1wNCi0JQ0pTX09iamVjdCogcEpTT2JqID0gKENKU19PYmplY3QqKUpTX0dldFByaXZhdGUoaXNvbGF0ZSxpbmZvLkhvbGRlcigpKTtcDQotCUFTU0VSVChwSlNPYmogIT0gTlVMTCk7XA0KLQljbGFzc19uYW1lKiBwT2JqID0gKGNsYXNzX25hbWUqKXBKU09iai0+R2V0RW1iZWRPYmplY3QoKTtcDQotCUFTU0VSVChwT2JqICE9IE5VTEwpO1wNCi0JSlNfRXJyb3JTdHJpbmcgc0Vycm9yO1wNCi0JRlhfQk9PTCBiUmV0ID0gRkFMU0U7XA0KLQl0cnlcDQotCXtcDQotCQlNRU1MRUFLQ0hFQ0tfMSgpO1wNCi0JCWJSZXQgPSBwT2JqLT5wcm9wX25hbWUoY2MsIHZhbHVlLCBzRXJyb3IpO1wNCi0JCU1FTUxFQUtDSEVDS18yKGNsYXNzX25hbWUsIHByb3BfbmFtZSk7XA0KLQl9XA0KLQljYXRjaCAoLi4uKVwNCi0Je1wNCi0JCUNGWF9CeXRlU3RyaW5nIGNiTmFtZTtcDQotCQljYk5hbWUuRm9ybWF0KCIlcy4lcyIsICNjbGFzc19uYW1lLCAjcHJvcF9uYW1lKTtcDQotCQlKU19FcnJvcihOVUxMLENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoY2JOYW1lKSwgTCJVbmtub3duIGVycm9yIGlzIGNhdGNoZWQhIik7XA0KLQkJcmV0dXJuIDtcDQotCX1cDQotCWlmIChiUmV0KVwNCi0Je1wNCi0JCWluZm8uR2V0UmV0dXJuVmFsdWUoKS5TZXQoKHY4OjpIYW5kbGU8djg6OlZhbHVlPil2YWx1ZSk7XA0KLQkJcmV0dXJuIDtcDQotCX1cDQotCWVsc2VcDQotCXtcDQotCUNGWF9CeXRlU3RyaW5nIGNiTmFtZTtcDQotCQljYk5hbWUuRm9ybWF0KCIlcy4lcyIsICNjbGFzc19uYW1lLCAjcHJvcF9uYW1lKTtcDQotCQlKU19FcnJvcihOVUxMLENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoY2JOYW1lKSwgc0Vycm9yKTtcDQotCQlyZXR1cm4gO1wNCi0JfVwNCi19DQotDQotI2RlZmluZSBKU19TVEFUSUNfUFJPUF9TRVQocHJvcF9uYW1lLCBjbGFzc19uYW1lKVwNCi0Jc3RhdGljIHZvaWQgc2V0XyMjcHJvcF9uYW1lIyNfc3RhdGljKEpTX1BST1BQVVRfQVJHUylcDQote1wNCi0Jdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBpbmZvLkdldElzb2xhdGUoKTtcDQotCXY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IGlzb2xhdGUtPkdldEN1cnJlbnRDb250ZXh0KCk7XA0KLQl2ODo6TG9jYWw8djg6OlZhbHVlPiB2ID0gY29udGV4dC0+R2V0RW1iZWRkZXJEYXRhKDEpO1wNCi0JQVNTRVJUKCF2LklzRW1wdHkoKSk7XA0KLQlpZih2LklzRW1wdHkoKSkgcmV0dXJuO1wNCi0Jdjg6OkhhbmRsZTx2ODo6RXh0ZXJuYWw+IGZpZWxkID0gdjg6OkhhbmRsZTx2ODo6RXh0ZXJuYWw+OjpDYXN0KHYpO1wNCi0JSUZYSlNfUnVudGltZSogcFJ1bnRpbWUgPSAoSUZYSlNfUnVudGltZSopZmllbGQtPlZhbHVlKCk7XA0KLQlJRlhKU19Db250ZXh0KiBjYyA9IHBSdW50aW1lLT5HZXRDdXJyZW50Q29udGV4dCgpO1wNCi0JQ0pTX1Byb3BWYWx1ZSBwcm9wVmFsdWUoQ0pTX1ZhbHVlKGlzb2xhdGUsdmFsdWUsVlRfdW5rbm93bikpO1wNCi0JcHJvcFZhbHVlLlN0YXJ0U2V0dGluZygpO1wNCi0JQ0pTX09iamVjdCogcEpTT2JqID0gKENKU19PYmplY3QqKUpTX0dldFByaXZhdGUoaXNvbGF0ZSxpbmZvLkhvbGRlcigpKTtcDQotCUFTU0VSVChwSlNPYmogIT0gTlVMTCk7XA0KLQljbGFzc19uYW1lKiBwT2JqID0gKGNsYXNzX25hbWUqKXBKU09iai0+R2V0RW1iZWRPYmplY3QoKTtcDQotCUFTU0VSVChwT2JqICE9IE5VTEwpO1wNCi0JSlNfRXJyb3JTdHJpbmcgc0Vycm9yO1wNCi0JRlhfQk9PTCBiUmV0ID0gRkFMU0U7XA0KLQl0cnlcDQotCXtcDQotCQlNRU1MRUFLQ0hFQ0tfMSgpO1wNCi0JCWJSZXQgPSBwT2JqLT5wcm9wX25hbWUoY2MsIHByb3BWYWx1ZSwgc0Vycm9yKTtcDQotCQlNRU1MRUFLQ0hFQ0tfMihjbGFzc19uYW1lLCBwcm9wX25hbWUpO1wNCi0JfVwNCi0JY2F0Y2ggKC4uLilcDQotCXtcDQotCQlDRlhfQnl0ZVN0cmluZyBjYk5hbWU7XA0KLQkJY2JOYW1lLkZvcm1hdCgiJXMuJXMiLCAjY2xhc3NfbmFtZSwgI3Byb3BfbmFtZSk7XA0KLQkJSlNfRXJyb3IoTlVMTCxDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKGNiTmFtZSksIEwiVW5rbm93biBlcnJvciBpcyBjYXRjaGVkISIpO1wNCi0JCXJldHVybiA7XA0KLQl9XA0KLQlpZiAoYlJldClcDQotCXtcDQotCQlyZXR1cm4gO1wNCi0JfVwNCi0JZWxzZVwNCi0Je1wNCi0JCUNGWF9CeXRlU3RyaW5nIGNiTmFtZTtcDQotCQljYk5hbWUuRm9ybWF0KCIlcy4lcyIsICNjbGFzc19uYW1lLCAjcHJvcF9uYW1lKTtcDQotCQlKU19FcnJvcihOVUxMLENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoY2JOYW1lKSwgc0Vycm9yKTtcDQotCQlyZXR1cm4gO1wNCi0JfVwNCi19DQotDQotI2RlZmluZSBKU19TVEFUSUNfUFJPUChwcm9wX25hbWUsIGNsYXNzX25hbWUpXA0KLUpTX1NUQVRJQ19QUk9QX0dFVChwcm9wX25hbWUsIGNsYXNzX25hbWUpO1wNCi1KU19TVEFUSUNfUFJPUF9TRVQocHJvcF9uYW1lLCBjbGFzc19uYW1lKQ0KLQ0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IE1FVEhPRCBDQUxMQkFDSyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQotDQotI2RlZmluZSBKU19TVEFUSUNfTUVUSE9EKG1ldGhvZF9uYW1lLCBjbGFzc19uYW1lKVwNCi0Jc3RhdGljIHZvaWQgbWV0aG9kX25hbWUjI19zdGF0aWMoSlNfTUVUSE9EX0FSR1MpXA0KLXtcDQotCXY4OjpJc29sYXRlKiBpc29sYXRlID0gaW5mby5HZXRJc29sYXRlKCk7XA0KLQl2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBpc29sYXRlLT5HZXRDdXJyZW50Q29udGV4dCgpO1wNCi0Jdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdiA9IGNvbnRleHQtPkdldEVtYmVkZGVyRGF0YSgxKTtcDQotCUFTU0VSVCghdi5Jc0VtcHR5KCkpO1wNCi0JaWYodi5Jc0VtcHR5KCkpIHJldHVybjtcDQotCXY4OjpIYW5kbGU8djg6OkV4dGVybmFsPiBmaWVsZCA9IHY4OjpIYW5kbGU8djg6OkV4dGVybmFsPjo6Q2FzdCh2KTtcDQotCUlGWEpTX1J1bnRpbWUqIHBSdW50aW1lID0gKElGWEpTX1J1bnRpbWUqKWZpZWxkLT5WYWx1ZSgpO1wNCi0JSUZYSlNfQ29udGV4dCogY2MgPSBwUnVudGltZS0+R2V0Q3VycmVudENvbnRleHQoKTtcDQotCUNKU19QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7XA0KLQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaTwodW5zaWduZWQgaW50KWluZm8uTGVuZ3RoKCk7IGkrKylcDQotICAgIHtcDQotCQlwYXJhbWV0ZXJzLnB1c2hfYmFjayhDSlNfVmFsdWUoaXNvbGF0ZSwgaW5mb1tpXSwgVlRfdW5rbm93bikpO1wNCi0JfVwNCi0JQ0pTX1ZhbHVlIHZhbHVlUmVzKGlzb2xhdGUpO1wNCi0JQ0pTX09iamVjdCogcEpTT2JqID0gKENKU19PYmplY3QgKilKU19HZXRQcml2YXRlKGlzb2xhdGUsaW5mby5Ib2xkZXIoKSk7XA0KLQlBU1NFUlQocEpTT2JqICE9IE5VTEwpO1wNCi0JY2xhc3NfbmFtZSogcE9iaiA9IChjbGFzc19uYW1lKilwSlNPYmotPkdldEVtYmVkT2JqZWN0KCk7XA0KLQlBU1NFUlQocE9iaiAhPSBOVUxMKTtcDQotCUpTX0Vycm9yU3RyaW5nIHNFcnJvcjtcDQotCUZYX0JPT0wgYlJldCA9IEZBTFNFO1wNCi0JdHJ5XA0KLQl7XA0KLQkJTUVNTEVBS0NIRUNLXzEoKTtcDQotCQliUmV0ID0gcE9iai0+bWV0aG9kX25hbWUoY2MsIHBhcmFtZXRlcnMsIHZhbHVlUmVzLCBzRXJyb3IpO1wNCi0JCU1FTUxFQUtDSEVDS18yKGNsYXNzX25hbWUsIG1ldGhvZF9uYW1lKTtcDQotCX1cDQotCWNhdGNoICguLi4pXA0KLQl7XA0KLQkJQ0ZYX0J5dGVTdHJpbmcgY2JOYW1lO1wNCi0JCWNiTmFtZS5Gb3JtYXQoIiVzLiVzIiwgI2NsYXNzX25hbWUsICNtZXRob2RfbmFtZSk7XA0KLQkJSlNfRXJyb3IoTlVMTCwgQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChjYk5hbWUpLCBMIlVua25vd24gZXJyb3IgaXMgY2F0Y2hlZCEiKTtcDQotCQlyZXR1cm4gO1wNCi0JfVwNCi0JaWYgKGJSZXQpXA0KLQl7XA0KLQkJaW5mby5HZXRSZXR1cm5WYWx1ZSgpLlNldCh2YWx1ZVJlcy5Ub0pTVmFsdWUoKSk7XA0KLQkJcmV0dXJuIDtcDQotCX1cDQotCWVsc2VcDQotCXtcDQotCQlDRlhfQnl0ZVN0cmluZyBjYk5hbWU7XA0KLQkJY2JOYW1lLkZvcm1hdCgiJXMuJXMiLCAjY2xhc3NfbmFtZSwgI21ldGhvZF9uYW1lKTtcDQotCQlKU19FcnJvcihOVUxMLCBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKGNiTmFtZSksIHNFcnJvcik7XA0KLQkJcmV0dXJuIDtcDQotCX1cDQotfQ0KLQ0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gSlMgQ0xBU1MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCi0NCi0jZGVmaW5lIERFQ0xBUkVfSlNfQ0xBU1MoanNfY2xhc3NfbmFtZSkgXA0KLQlzdGF0aWMgSlNCb29sIEpTQ29uc3RydWN0b3IoSUZYSlNfQ29udGV4dCogY2MsIEpTRlhPYmplY3Qgb2JqLEpTRlhPYmplY3QgZ2xvYmFsKTtcDQotCXN0YXRpYyBKU0Jvb2wgSlNEZXN0cnVjdG9yKEpTRlhPYmplY3Qgb2JqKTtcDQotCXN0YXRpYyBpbnQgSW5pdChJSlNfUnVudGltZSogcFJ1bnRpbWUsIEZYSlNPQkpUWVBFIGVPYmpUeXBlKTtcDQotCXN0YXRpYyB2b2lkIEdldENvbnN0cyhKU0NvbnN0U3BlYyomIHBDb25zdHMsIGludCYgblNpemUpO1wNCi0Jc3RhdGljIHZvaWQgR2V0UHJvcGVydGllcyhKU1Byb3BlcnR5U3BlYyomIHBQcm9wZXJ0aWVzLCBpbnQmIG5TaXplKTtcDQotCXN0YXRpYyB2b2lkIEdldE1ldGhvZHMoSlNNZXRob2RTcGVjKiYgcE1ldGhvZHMsIGludCYgblNpemUpO1wNCi0Jc3RhdGljIEpTQ29uc3RTcGVjIEpTX0NsYXNzX0NvbnN0c1tdO1wNCi0Jc3RhdGljIEpTUHJvcGVydHlTcGVjIEpTX0NsYXNzX1Byb3BlcnRpZXNbXTtcDQotCXN0YXRpYyBKU01ldGhvZFNwZWMJSlNfQ2xhc3NfTWV0aG9kc1tdO1wNCi0Jc3RhdGljIGNvbnN0IHdjaGFyX3QqIG1fcENsYXNzTmFtZQ0KLQ0KLSNkZWZpbmUgSU1QTEVNRU5UX0pTX0NMQVNTX1JJQ0goanNfY2xhc3NfbmFtZSwgY2xhc3NfYWx0ZXJuYXRlLCBjbGFzc19uYW1lKSBcDQotY29uc3Qgd2NoYXJfdCoganNfY2xhc3NfbmFtZTo6bV9wQ2xhc3NOYW1lID0gSlNfV0lERVNUUklORyhjbGFzc19uYW1lKTtcDQotSlNCb29sIGpzX2NsYXNzX25hbWU6OkpTQ29uc3RydWN0b3IoSUZYSlNfQ29udGV4dCogY2MsIEpTRlhPYmplY3Qgb2JqLCBKU0ZYT2JqZWN0IGdsb2JhbClcDQote1wNCi0JQ0pTX09iamVjdCogcE9iaiA9IEZYX05FVyBqc19jbGFzc19uYW1lKG9iaik7XA0KLQlwT2JqLT5TZXRFbWJlZE9iamVjdChGWF9ORVcgY2xhc3NfYWx0ZXJuYXRlKHBPYmopKTtcDQotCUpTX1NldFByaXZhdGUoTlVMTCxvYmosKHZvaWQqKXBPYmopOyBcDQotCXBPYmotPkluaXRJbnN0YW5jZShjYyk7XA0KLQlyZXR1cm4gSlNfVFJVRTtcDQotfVwNCi1cDQotSlNCb29sIGpzX2NsYXNzX25hbWU6OkpTRGVzdHJ1Y3RvcihKU0ZYT2JqZWN0IG9iaikgXA0KLXtcDQotCWpzX2NsYXNzX25hbWUqIHBPYmogPSAoanNfY2xhc3NfbmFtZSopSlNfR2V0UHJpdmF0ZShOVUxMLG9iaik7XA0KLQlBU1NFUlQocE9iaiAhPSBOVUxMKTtcDQotCXBPYmotPkV4aXRJbnN0YW5jZSgpO1wNCi0JZGVsZXRlIHBPYmo7XA0KLQlyZXR1cm4gSlNfVFJVRTtcDQotfVwNCi1cDQotaW50IGpzX2NsYXNzX25hbWU6OkluaXQoSUpTX1J1bnRpbWUqIHBSdW50aW1lLCBGWEpTT0JKVFlQRSBlT2JqVHlwZSlcDQote1wNCi0JaW50IG5PYmpEZWZuSUQgPSBKU19EZWZpbmVPYmoocFJ1bnRpbWUsIGpzX2NsYXNzX25hbWU6Om1fcENsYXNzTmFtZSwgZU9ialR5cGUsIEpTQ29uc3RydWN0b3IsIEpTRGVzdHJ1Y3RvciwgMCk7XA0KLQlpZiAobk9iakRlZm5JRCA+PSAwKVwNCi0Je1wNCi0JCWZvciAoaW50IGo9MCwgc3pqPXNpemVvZihKU19DbGFzc19Qcm9wZXJ0aWVzKS9zaXplb2YoSlNQcm9wZXJ0eVNwZWMpLTE7IGo8c3pqOyBqKyspXA0KLQkJe1wNCi0JCQlpZiAoSlNfRGVmaW5lT2JqUHJvcGVydHkocFJ1bnRpbWUsIG5PYmpEZWZuSUQsIEpTX0NsYXNzX1Byb3BlcnRpZXNbal0ucE5hbWUsIEpTX0NsYXNzX1Byb3BlcnRpZXNbal0ucFByb3BHZXQsIEpTX0NsYXNzX1Byb3BlcnRpZXNbal0ucFByb3BQdXQpIDwgMCkgcmV0dXJuIC0xO1wNCi0JCX1cDQotCQlmb3IgKGludCBrPTAsIHN6az1zaXplb2YoSlNfQ2xhc3NfTWV0aG9kcykvc2l6ZW9mKEpTTWV0aG9kU3BlYyktMTsgazxzems7IGsrKylcDQotCQl7XA0KLQkJCWlmIChKU19EZWZpbmVPYmpNZXRob2QocFJ1bnRpbWUsIG5PYmpEZWZuSUQsSlNfQ2xhc3NfTWV0aG9kc1trXS5wTmFtZSwgSlNfQ2xhc3NfTWV0aG9kc1trXS5wTWV0aG9kQ2FsbCwgSlNfQ2xhc3NfTWV0aG9kc1trXS5uUGFyYW1OdW0pIDwgMCkgcmV0dXJuIC0xO1wNCi0JCX1cDQotCQlyZXR1cm4gbk9iakRlZm5JRDtcDQotCX1cDQotCXJldHVybiAtMTtcDQotfVwNCi12b2lkIGpzX2NsYXNzX25hbWU6OkdldENvbnN0cyhKU0NvbnN0U3BlYyomIHBDb25zdHMsIGludCYgblNpemUpXA0KLXtcDQotCXBDb25zdHMgPSBKU19DbGFzc19Db25zdHM7XA0KLQluU2l6ZSA9IHNpemVvZihKU19DbGFzc19Db25zdHMpIC8gc2l6ZW9mKEpTQ29uc3RTcGVjKSAtIDE7XA0KLX1cDQotdm9pZCBqc19jbGFzc19uYW1lOjpHZXRQcm9wZXJ0aWVzKEpTUHJvcGVydHlTcGVjKiYgcFByb3BlcnRpZXMsIGludCYgblNpemUpXA0KLXtcDQotCXBQcm9wZXJ0aWVzID0gSlNfQ2xhc3NfUHJvcGVydGllcztcDQotCW5TaXplID0gc2l6ZW9mKEpTX0NsYXNzX1Byb3BlcnRpZXMpIC8gc2l6ZW9mKEpTUHJvcGVydHlTcGVjKSAtIDE7XA0KLX1cDQotdm9pZCBqc19jbGFzc19uYW1lOjpHZXRNZXRob2RzKEpTTWV0aG9kU3BlYyomIHBNZXRob2RzLCBpbnQmIG5TaXplKVwNCi17XA0KLQlwTWV0aG9kcyA9IEpTX0NsYXNzX01ldGhvZHM7XA0KLQluU2l6ZSA9IHNpemVvZihKU19DbGFzc19NZXRob2RzKSAvIHNpemVvZihKU01ldGhvZFNwZWMpIC0gMTtcDQotfQ0KLQ0KLSNkZWZpbmUgSU1QTEVNRU5UX0pTX0NMQVNTKGpzX2NsYXNzX25hbWUsIGNsYXNzX25hbWUpIElNUExFTUVOVF9KU19DTEFTU19SSUNIKGpzX2NsYXNzX25hbWUsIGNsYXNzX25hbWUsIGNsYXNzX25hbWUpDQotDQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDT05TVCBDTEFTUyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KLQ0KLSNkZWZpbmUgREVDTEFSRV9KU19DTEFTU19DT05TVCgpIFwNCi0Jc3RhdGljIGludCBJbml0KElKU19SdW50aW1lKiBwUnVudGltZSwgRlhKU09CSlRZUEUgZU9ialR5cGUpO1wNCi0Jc3RhdGljIHZvaWQgR2V0Q29uc3RzKEpTQ29uc3RTcGVjKiYgcENvbnN0cywgaW50JiBuU2l6ZSk7XA0KLQlzdGF0aWMgSlNDb25zdFNwZWMgSlNfQ2xhc3NfQ29uc3RzW107XA0KLQlzdGF0aWMgY29uc3Qgd2NoYXJfdCogbV9wQ2xhc3NOYW1lDQotDQotI2RlZmluZSBJTVBMRU1FTlRfSlNfQ0xBU1NfQ09OU1QoanNfY2xhc3NfbmFtZSwgY2xhc3NfbmFtZSkgXA0KLWNvbnN0IHdjaGFyX3QqIGpzX2NsYXNzX25hbWU6Om1fcENsYXNzTmFtZSA9IEpTX1dJREVTVFJJTkcoY2xhc3NfbmFtZSk7XA0KLWludCBqc19jbGFzc19uYW1lOjpJbml0KElKU19SdW50aW1lKiBwUnVudGltZSwgRlhKU09CSlRZUEUgZU9ialR5cGUpXA0KLXtcDQotCWludCBuT2JqRGVmbklEID0gSlNfRGVmaW5lT2JqKHBSdW50aW1lLCBqc19jbGFzc19uYW1lOjptX3BDbGFzc05hbWUsIGVPYmpUeXBlLCBOVUxMLCBOVUxMLCAwKTtcDQotCWlmIChuT2JqRGVmbklEID49MClcDQotCXtcDQotCQlmb3IgKGludCBpPTAsIHN6PXNpemVvZihKU19DbGFzc19Db25zdHMpL3NpemVvZihKU0NvbnN0U3BlYyktMTsgaTxzejsgaSsrKVwNCi0JCXtcDQotCQkJaWYgKEpTX0NsYXNzX0NvbnN0c1tpXS50ID09IDApXA0KLQkJCXtcDQotCQkJCWlmIChKU19EZWZpbmVPYmpDb25zdChwUnVudGltZSwgbk9iakRlZm5JRCwgSlNfQ2xhc3NfQ29uc3RzW2ldLnBOYW1lLCBKU19OZXdOdW1iZXIocFJ1bnRpbWUsSlNfQ2xhc3NfQ29uc3RzW2ldLm51bWJlcikpIDwgMCkgcmV0dXJuIC0xO1wNCi0JCQl9XA0KLQkJCWVsc2VcDQotCQkJe1wNCi0JCQlpZiAoSlNfRGVmaW5lT2JqQ29uc3QocFJ1bnRpbWUsIG5PYmpEZWZuSUQsIEpTX0NsYXNzX0NvbnN0c1tpXS5wTmFtZSwgSlNfTmV3U3RyaW5nKHBSdW50aW1lLEpTX0NsYXNzX0NvbnN0c1tpXS5zdHJpbmcpKSA8IDApIHJldHVybiAtMTtcDQotCQkJfVwNCi0JCX1cDQotCQlyZXR1cm4gbk9iakRlZm5JRDtcDQotCX1cDQotCXJldHVybiAtMTtcDQotfVwNCi12b2lkIGpzX2NsYXNzX25hbWU6OkdldENvbnN0cyhKU0NvbnN0U3BlYyomIHBDb25zdHMsIGludCYgblNpemUpXA0KLXtcDQotCXBDb25zdHMgPSBKU19DbGFzc19Db25zdHM7XA0KLQluU2l6ZSA9IHNpemVvZihKU19DbGFzc19Db25zdHMpL3NpemVvZihKU0NvbnN0U3BlYyktMTtcDQotfQ0KLQ0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU1BFQ0lBTCBKUyBDTEFTUyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KLQ0KLSNkZWZpbmUgREVDTEFSRV9TUEVDSUFMX0pTX0NMQVNTKGpzX2NsYXNzX25hbWUpIFwNCi0Jc3RhdGljIEpTQm9vbCBKU0NvbnN0cnVjdG9yKElGWEpTX0NvbnRleHQqIGNjLCBKU0ZYT2JqZWN0IG9iaiwgSlNGWE9iamVjdCBnbG9iYWwpO1wNCi0Jc3RhdGljIEpTQm9vbCBKU0Rlc3RydWN0b3IoSlNGWE9iamVjdCBvYmopO1wNCi0Jc3RhdGljIHZvaWQgR2V0Q29uc3RzKEpTQ29uc3RTcGVjKiYgcENvbnN0cywgaW50JiBuU2l6ZSk7XA0KLQlzdGF0aWMgdm9pZCBHZXRQcm9wZXJ0aWVzKEpTUHJvcGVydHlTcGVjKiYgcFByb3BlcnRpZXMsIGludCYgblNpemUpO1wNCi0Jc3RhdGljIHZvaWQgR2V0TWV0aG9kcyhKU01ldGhvZFNwZWMqJiBwTWV0aG9kcywgaW50JiBuU2l6ZSk7XA0KLQlzdGF0aWMgSlNDb25zdFNwZWMgSlNfQ2xhc3NfQ29uc3RzW107XA0KLQlzdGF0aWMgSlNQcm9wZXJ0eVNwZWMgSlNfQ2xhc3NfUHJvcGVydGllc1tdO1wNCi0Jc3RhdGljIEpTTWV0aG9kU3BlYwlKU19DbGFzc19NZXRob2RzW107XA0KLQlzdGF0aWMgaW50IEluaXQoSUpTX1J1bnRpbWUqIHBSdW50aW1lLCBGWEpTT0JKVFlQRSBlT2JqVHlwZSk7XA0KLQlzdGF0aWMgY29uc3Qgd2NoYXJfdCogbV9wQ2xhc3NOYW1lO1wNCi0Jc3RhdGljIHZvaWQgcXVlcnlwcm9wXyMjanNfY2xhc3NfbmFtZSMjX3N0YXRpYyhKU19QUk9QUVVFUllfQVJHUyk7XA0KLQlzdGF0aWMgdm9pZCBnZXRwcm9wXyMjanNfY2xhc3NfbmFtZSMjX3N0YXRpYyhKU19OQU1FRF9QUk9QR0VUX0FSR1MpO1wNCi0Jc3RhdGljIHZvaWQgcHV0cHJvcF8jI2pzX2NsYXNzX25hbWUjI19zdGF0aWMoSlNfTkFNRURfUFJPUFBVVF9BUkdTKTtcDQotCXN0YXRpYyB2b2lkIGRlbHByb3BfIyNqc19jbGFzc19uYW1lIyNfc3RhdGljKEpTX1BST1BERUxfQVJHUykNCi0NCi0jZGVmaW5lIElNUExFTUVOVF9TUEVDSUFMX0pTX0NMQVNTKGpzX2NsYXNzX25hbWUsIGNsYXNzX2FsdGVybmF0ZSwgY2xhc3NfbmFtZSkgXA0KLWNvbnN0IHdjaGFyX3QgKiBqc19jbGFzc19uYW1lOjptX3BDbGFzc05hbWUgPSBKU19XSURFU1RSSU5HKGNsYXNzX25hbWUpO1wNCi0Jdm9pZCBqc19jbGFzc19uYW1lOjpxdWVyeXByb3BfIyNqc19jbGFzc19uYW1lIyNfc3RhdGljKEpTX1BST1BRVUVSWV9BUkdTKVwNCi17XA0KLQl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IGluZm8uR2V0SXNvbGF0ZSgpO1wNCi0Jdjg6OlN0cmluZzo6VXRmOFZhbHVlIHV0ZjhfdmFsdWUocHJvcGVydHkpO1wNCi0JQ0ZYX1dpZGVTdHJpbmcgcHJvcG5hbWUgPSBDRlhfV2lkZVN0cmluZzo6RnJvbVVURjgoKnV0ZjhfdmFsdWUsIHV0ZjhfdmFsdWUubGVuZ3RoKCkpO1wNCi0JQ0pTX09iamVjdCogcEpTT2JqID0gKENKU19PYmplY3QqKUpTX0dldFByaXZhdGUoaXNvbGF0ZSxpbmZvLkhvbGRlcigpKTtcDQotCUFTU0VSVChwSlNPYmogIT0gTlVMTCk7XA0KLQljbGFzc19hbHRlcm5hdGUqIHBPYmogPSAoY2xhc3NfYWx0ZXJuYXRlKilwSlNPYmotPkdldEVtYmVkT2JqZWN0KCk7XA0KLQlBU1NFUlQocE9iaiAhPSBOVUxMKTtcDQotCUZYX0JPT0wgYlJldCA9IEZBTFNFO1wNCi0JdHJ5XA0KLQl7XA0KLQkJTUVNTEVBS0NIRUNLXzEoKTtcDQotCQliUmV0ID0gcE9iai0+UXVlcnlQcm9wZXJ0eSgoRlhfTFBDV1NUUilwcm9wbmFtZSk7XA0KLQkJTUVNTEVBS0NIRUNLXzIoY2xhc3NfbmFtZSwgKEZYX0xQQ1dTVFIpcHJvcF9uYW1lKTtcDQotCX1cDQotCWNhdGNoICguLi4pXA0KLQl7XA0KLQkJcmV0dXJuIDtcDQotCX1cDQotCWlmIChiUmV0KVwNCi0Je1wNCi0JCWluZm8uR2V0UmV0dXJuVmFsdWUoKS5TZXQoMHgwMDQpO1wNCi0JCXJldHVybiA7XA0KLQl9XA0KLQllbHNlXA0KLQl7XA0KLQkJaW5mby5HZXRSZXR1cm5WYWx1ZSgpLlNldCgwKTtcDQotCQlyZXR1cm4gO1wNCi0JfVwNCi0JcmV0dXJuIDtcDQotfVwNCi0Jdm9pZCBqc19jbGFzc19uYW1lOjpnZXRwcm9wXyMjanNfY2xhc3NfbmFtZSMjX3N0YXRpYyhKU19OQU1FRF9QUk9QR0VUX0FSR1MpXA0KLXtcDQotCXY4OjpJc29sYXRlKiBpc29sYXRlID0gaW5mby5HZXRJc29sYXRlKCk7XA0KLQl2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBpc29sYXRlLT5HZXRDdXJyZW50Q29udGV4dCgpO1wNCi0Jdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdiA9IGNvbnRleHQtPkdldEVtYmVkZGVyRGF0YSgxKTtcDQotCUFTU0VSVCghdi5Jc0VtcHR5KCkpO1wNCi0JaWYodi5Jc0VtcHR5KCkpIHJldHVybjtcDQotCXY4OjpIYW5kbGU8djg6OkV4dGVybmFsPiBmaWVsZCA9IHY4OjpIYW5kbGU8djg6OkV4dGVybmFsPjo6Q2FzdCh2KTtcDQotCUlGWEpTX1J1bnRpbWUqIHBSdW50aW1lID0gKElGWEpTX1J1bnRpbWUqKWZpZWxkLT5WYWx1ZSgpO1wNCi0JSUZYSlNfQ29udGV4dCogY2MgPSBwUnVudGltZS0+R2V0Q3VycmVudENvbnRleHQoKTtcDQotCXY4OjpTdHJpbmc6OlV0ZjhWYWx1ZSB1dGY4X3ZhbHVlKHByb3BlcnR5KTtcDQotCUNGWF9XaWRlU3RyaW5nIHByb3BuYW1lID0gQ0ZYX1dpZGVTdHJpbmc6OkZyb21VVEY4KCp1dGY4X3ZhbHVlLCB1dGY4X3ZhbHVlLmxlbmd0aCgpKTtcDQotCUNKU19Qcm9wVmFsdWUgdmFsdWUoaXNvbGF0ZSk7XA0KLQl2YWx1ZS5TdGFydEdldHRpbmcoKTtcDQotCUNKU19PYmplY3QqIHBKU09iaiA9IChDSlNfT2JqZWN0KilKU19HZXRQcml2YXRlKGlzb2xhdGUsaW5mby5Ib2xkZXIoKSk7XA0KLQlBU1NFUlQocEpTT2JqICE9IE5VTEwpO1wNCi0JY2xhc3NfYWx0ZXJuYXRlKiBwT2JqID0gKGNsYXNzX2FsdGVybmF0ZSopcEpTT2JqLT5HZXRFbWJlZE9iamVjdCgpO1wNCi0JQVNTRVJUKHBPYmogIT0gTlVMTCk7XA0KLQlKU19FcnJvclN0cmluZyBzRXJyb3I7XA0KLQlGWF9CT09MIGJSZXQgPSBGQUxTRTtcDQotCXRyeVwNCi0Je1wNCi0JCU1FTUxFQUtDSEVDS18xKCk7XA0KLQkJYlJldCA9IHBPYmotPkRvUHJvcGVydHkoY2MsIChGWF9MUENXU1RSKXByb3BuYW1lLCB2YWx1ZSwgc0Vycm9yKTtcDQotCQlNRU1MRUFLQ0hFQ0tfMihjbGFzc19uYW1lLCBMIkdldFByb3BlcnR5Iik7XA0KLQl9XA0KLQljYXRjaCAoLi4uKVwNCi0Je1wNCi0JCUNGWF9CeXRlU3RyaW5nIGNiTmFtZTtcDQotCQljYk5hbWUuRm9ybWF0KCIlcy4lcyIsICNjbGFzc19uYW1lLCBMIkdldFByb3BlcnR5Iik7XA0KLQkJSlNfRXJyb3IoTlVMTCxDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKGNiTmFtZSksIEwiVW5rbm93biBlcnJvciBpcyBjYXRjaGVkISIpO1wNCi0JCXJldHVybiA7XA0KLQl9XA0KLQlpZiAoYlJldClcDQotCXtcDQotCQlpbmZvLkdldFJldHVyblZhbHVlKCkuU2V0KCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pdmFsdWUpO1wNCi0JCXJldHVybiA7XA0KLQl9XA0KLQllbHNlXA0KLQl7XA0KLQkJQ0ZYX0J5dGVTdHJpbmcgY2JOYW1lO1wNCi0JCWNiTmFtZS5Gb3JtYXQoIiVzLiVzIiwgI2NsYXNzX25hbWUsIEwiR2V0UHJvcGVydHkiKTtcDQotCQlKU19FcnJvcihOVUxMLENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoY2JOYW1lKSwgc0Vycm9yKTtcDQotCQlyZXR1cm4gO1wNCi0JfVwNCi0JSlNfRXJyb3IoTlVMTCxMIkdldFByb3BlcnR5IiwgTCJFbWJlZGVkIG9iamVjdCBub3QgZm91bmQhIik7XA0KLQlyZXR1cm4gO1wNCi19XA0KLQl2b2lkIGpzX2NsYXNzX25hbWU6OnB1dHByb3BfIyNqc19jbGFzc19uYW1lIyNfc3RhdGljKEpTX05BTUVEX1BST1BQVVRfQVJHUylcDQote1wNCi0Jdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBpbmZvLkdldElzb2xhdGUoKTtcDQotCXY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IGlzb2xhdGUtPkdldEN1cnJlbnRDb250ZXh0KCk7XA0KLQl2ODo6TG9jYWw8djg6OlZhbHVlPiB2ID0gY29udGV4dC0+R2V0RW1iZWRkZXJEYXRhKDEpO1wNCi0JQVNTRVJUKCF2LklzRW1wdHkoKSk7XA0KLQlpZih2LklzRW1wdHkoKSkgcmV0dXJuO1wNCi0Jdjg6OkhhbmRsZTx2ODo6RXh0ZXJuYWw+IGZpZWxkID0gdjg6OkhhbmRsZTx2ODo6RXh0ZXJuYWw+OjpDYXN0KHYpO1wNCi0JSUZYSlNfUnVudGltZSogcFJ1bnRpbWUgPSAoSUZYSlNfUnVudGltZSopZmllbGQtPlZhbHVlKCk7XA0KLQlJRlhKU19Db250ZXh0KiBjYyA9IHBSdW50aW1lLT5HZXRDdXJyZW50Q29udGV4dCgpO1wNCi0Jdjg6OlN0cmluZzo6VXRmOFZhbHVlIHV0ZjhfdmFsdWUocHJvcGVydHkpO1wNCi0JQ0ZYX1dpZGVTdHJpbmcgcHJvcG5hbWUgPSBDRlhfV2lkZVN0cmluZzo6RnJvbVVURjgoKnV0ZjhfdmFsdWUsIHV0ZjhfdmFsdWUubGVuZ3RoKCkpO1wNCi0JQ0pTX1Byb3BWYWx1ZSBQcm9wVmFsdWUoQ0pTX1ZhbHVlKGlzb2xhdGUsdmFsdWUsVlRfdW5rbm93bikpO1wNCi0JUHJvcFZhbHVlLlN0YXJ0U2V0dGluZygpO1wNCi0JQ0pTX09iamVjdCogcEpTT2JqID0gKENKU19PYmplY3QqKUpTX0dldFByaXZhdGUoaXNvbGF0ZSxpbmZvLkhvbGRlcigpKTtcDQotCWlmKCFwSlNPYmopIHJldHVybjtcDQotCWNsYXNzX2FsdGVybmF0ZSogcE9iaiA9IChjbGFzc19hbHRlcm5hdGUqKXBKU09iai0+R2V0RW1iZWRPYmplY3QoKTtcDQotCUFTU0VSVChwT2JqICE9IE5VTEwpO1wNCi0JSlNfRXJyb3JTdHJpbmcgc0Vycm9yO1wNCi0JRlhfQk9PTCBiUmV0ID0gRkFMU0U7XA0KLQl0cnlcDQotCXtcDQotCQlNRU1MRUFLQ0hFQ0tfMSgpO1wNCi0JCWJSZXQgPSBwT2JqLT5Eb1Byb3BlcnR5KGNjLCAoRlhfTFBDV1NUUilwcm9wbmFtZSwgUHJvcFZhbHVlLCBzRXJyb3IpO1wNCi0JCU1FTUxFQUtDSEVDS18yKGNsYXNzX25hbWUsTCJQdXRQcm9wZXJ0eSIpO1wNCi0JfVwNCi0JY2F0Y2ggKC4uLilcDQotCXtcDQotCQlDRlhfQnl0ZVN0cmluZyBjYk5hbWU7XA0KLQkJY2JOYW1lLkZvcm1hdCgiJXMuJXMiLCAjY2xhc3NfbmFtZSwgIlB1dFByb3BlcnR5Iik7XA0KLQkJSlNfRXJyb3IoTlVMTCxDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKGNiTmFtZSksIEwiVW5rbm93biBlcnJvciBpcyBjYXRjaGVkISIpO1wNCi0JCXJldHVybiA7XA0KLQl9XA0KLQlpZiAoYlJldClcDQotCXtcDQotCQlyZXR1cm4gO1wNCi0JfVwNCi0JZWxzZVwNCi0Je1wNCi0JCUNGWF9CeXRlU3RyaW5nIGNiTmFtZTtcDQotCQljYk5hbWUuRm9ybWF0KCIlcy4lcyIsICNjbGFzc19uYW1lLCAiUHV0UHJvcGVydHkiKTtcDQotCQlKU19FcnJvcihOVUxMLENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoY2JOYW1lKSwgc0Vycm9yKTtcDQotCQlyZXR1cm4gO1wNCi0JfVwNCi0JSlNfRXJyb3IoTlVMTCxMIlB1dFByb3BlcnR5IiwgTCJFbWJlZGVkIG9iamVjdCBub3QgZm91bmQhIik7XA0KLQlyZXR1cm4gO1wNCi19XA0KLQl2b2lkIGpzX2NsYXNzX25hbWU6OmRlbHByb3BfIyNqc19jbGFzc19uYW1lIyNfc3RhdGljKEpTX1BST1BERUxfQVJHUylcDQote1wNCi0Jdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBpbmZvLkdldElzb2xhdGUoKTtcDQotCXY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IGlzb2xhdGUtPkdldEN1cnJlbnRDb250ZXh0KCk7XA0KLQl2ODo6TG9jYWw8djg6OlZhbHVlPiB2ID0gY29udGV4dC0+R2V0RW1iZWRkZXJEYXRhKDEpO1wNCi0JQVNTRVJUKCF2LklzRW1wdHkoKSk7XA0KLQlpZih2LklzRW1wdHkoKSkgcmV0dXJuO1wNCi0Jdjg6OkhhbmRsZTx2ODo6RXh0ZXJuYWw+IGZpZWxkID0gdjg6OkhhbmRsZTx2ODo6RXh0ZXJuYWw+OjpDYXN0KHYpO1wNCi0JSUZYSlNfUnVudGltZSogcFJ1bnRpbWUgPSAoSUZYSlNfUnVudGltZSopZmllbGQtPlZhbHVlKCk7XA0KLQlJRlhKU19Db250ZXh0KiBjYyA9IHBSdW50aW1lLT5HZXRDdXJyZW50Q29udGV4dCgpO1wNCi0Jdjg6OlN0cmluZzo6VXRmOFZhbHVlIHV0ZjhfdmFsdWUocHJvcGVydHkpO1wNCi0JQ0ZYX1dpZGVTdHJpbmcgcHJvcG5hbWUgPSBDRlhfV2lkZVN0cmluZzo6RnJvbVVURjgoKnV0ZjhfdmFsdWUsIHV0ZjhfdmFsdWUubGVuZ3RoKCkpO1wNCi0JQ0pTX09iamVjdCogcEpTT2JqID0gKENKU19PYmplY3QqKUpTX0dldFByaXZhdGUoaXNvbGF0ZSxpbmZvLkhvbGRlcigpKTtcDQotCUFTU0VSVChwSlNPYmogIT0gTlVMTCk7XA0KLQljbGFzc19hbHRlcm5hdGUqIHBPYmogPSAoY2xhc3NfYWx0ZXJuYXRlKilwSlNPYmotPkdldEVtYmVkT2JqZWN0KCk7XA0KLQlBU1NFUlQocE9iaiAhPSBOVUxMKTtcDQotCUpTX0Vycm9yU3RyaW5nIHNFcnJvcjtcDQotCUZYX0JPT0wgYlJldCA9IEZBTFNFO1wNCi0JdHJ5XA0KLQl7XA0KLQkJTUVNTEVBS0NIRUNLXzEoKTtcDQotCQliUmV0ID0gcE9iai0+RGVsUHJvcGVydHkoY2MsIChGWF9MUENXU1RSKXByb3BuYW1lLCBzRXJyb3IpO1wNCi0JCU1FTUxFQUtDSEVDS18yKGNsYXNzX25hbWUsTCJEZWxQcm9wZXJ0eSIpO1wNCi0JfVwNCi0JY2F0Y2ggKC4uLilcDQotCXtcDQotCQlDRlhfQnl0ZVN0cmluZyBjYk5hbWU7XA0KLQkJY2JOYW1lLkZvcm1hdCgiJXMuJXMiLCAjY2xhc3NfbmFtZSwgIkRlbFByb3BlcnR5Iik7XA0KLQkJcmV0dXJuIDtcDQotCX1cDQotCWlmIChiUmV0KVwNCi0Je1wNCi0JCXJldHVybiA7XA0KLQl9XA0KLQllbHNlXA0KLQl7XA0KLQkJQ0ZYX0J5dGVTdHJpbmcgY2JOYW1lO1wNCi0JCWNiTmFtZS5Gb3JtYXQoIiVzLiVzIiwgI2NsYXNzX25hbWUsICJEZWxQcm9wZXJ0eSIpO1wNCi0JCXJldHVybiA7XA0KLQl9XA0KLQlyZXR1cm4gO1wNCi19XA0KLUpTQm9vbCBqc19jbGFzc19uYW1lOjpKU0NvbnN0cnVjdG9yKElGWEpTX0NvbnRleHQqIGNjLCBKU0ZYT2JqZWN0ICBvYmosSlNGWE9iamVjdCAgZ2xvYmFsKVwNCi17XA0KLQlDSlNfT2JqZWN0KiBwT2JqID0gRlhfTkVXIGpzX2NsYXNzX25hbWUob2JqKTtcDQotCXBPYmotPlNldEVtYmVkT2JqZWN0KEZYX05FVyBjbGFzc19hbHRlcm5hdGUocE9iaikpO1wNCi0JSlNfU2V0UHJpdmF0ZShOVUxMLG9iaiwgKHZvaWQqKXBPYmopOyBcDQotCXBPYmotPkluaXRJbnN0YW5jZShjYyk7XA0KLQlyZXR1cm4gSlNfVFJVRTtcDQotfVwNCi1cDQotSlNCb29sIGpzX2NsYXNzX25hbWU6OkpTRGVzdHJ1Y3RvcihKU0ZYT2JqZWN0IG9iaikgXA0KLXtcDQotCWpzX2NsYXNzX25hbWUqIHBPYmogPSAoanNfY2xhc3NfbmFtZSopSlNfR2V0UHJpdmF0ZShOVUxMLG9iaik7XA0KLQlBU1NFUlQocE9iaiAhPSBOVUxMKTtcDQotCXBPYmotPkV4aXRJbnN0YW5jZSgpO1wNCi0JZGVsZXRlIHBPYmo7XA0KLQlyZXR1cm4gSlNfVFJVRTtcDQotfVwNCi1cDQotaW50IGpzX2NsYXNzX25hbWU6OkluaXQoSUpTX1J1bnRpbWUqIHBSdW50aW1lLCBGWEpTT0JKVFlQRSBlT2JqVHlwZSlcDQote1wNCi1cDQotCWludCBuT2JqRGVmbklEID0gSlNfRGVmaW5lT2JqKHBSdW50aW1lLCBqc19jbGFzc19uYW1lOjptX3BDbGFzc05hbWUsIGVPYmpUeXBlLCBKU0NvbnN0cnVjdG9yLCBKU0Rlc3RydWN0b3IsIDApO1wNCi1cDQotCWlmIChuT2JqRGVmbklEID49IDApXA0KLQl7XA0KLQkJZm9yIChpbnQgaj0wLCBzemo9c2l6ZW9mKEpTX0NsYXNzX1Byb3BlcnRpZXMpL3NpemVvZihKU1Byb3BlcnR5U3BlYyktMTsgajxzemo7IGorKylcDQotCQl7XA0KLQkJCWlmIChKU19EZWZpbmVPYmpQcm9wZXJ0eShwUnVudGltZSwgbk9iakRlZm5JRCwgSlNfQ2xhc3NfUHJvcGVydGllc1tqXS5wTmFtZSwgSlNfQ2xhc3NfUHJvcGVydGllc1tqXS5wUHJvcEdldCxKU19DbGFzc19Qcm9wZXJ0aWVzW2pdLnBQcm9wUHV0KTwwKXJldHVybiAtMTtcDQotCQl9XA0KLVwNCi0JCWZvciAoaW50IGs9MCwgc3prPXNpemVvZihKU19DbGFzc19NZXRob2RzKS9zaXplb2YoSlNNZXRob2RTcGVjKS0xOyBrPHN6azsgaysrKVwNCi0JCXtcDQotCQkJaWYgKEpTX0RlZmluZU9iak1ldGhvZChwUnVudGltZSwgbk9iakRlZm5JRCxKU19DbGFzc19NZXRob2RzW2tdLnBOYW1lLEpTX0NsYXNzX01ldGhvZHNba10ucE1ldGhvZENhbGwsSlNfQ2xhc3NfTWV0aG9kc1trXS5uUGFyYW1OdW0pPDApcmV0dXJuIC0xO1wNCi0JCX1cDQotCQlpZiAoSlNfRGVmaW5lT2JqQWxsUHJvcGVydGllcyhwUnVudGltZSwgbk9iakRlZm5JRCwganNfY2xhc3NfbmFtZTo6cXVlcnlwcm9wXyMjanNfY2xhc3NfbmFtZSMjX3N0YXRpYywganNfY2xhc3NfbmFtZTo6Z2V0cHJvcF8jI2pzX2NsYXNzX25hbWUjI19zdGF0aWMsanNfY2xhc3NfbmFtZTo6cHV0cHJvcF8jI2pzX2NsYXNzX25hbWUjI19zdGF0aWMsanNfY2xhc3NfbmFtZTo6ZGVscHJvcF8jI2pzX2NsYXNzX25hbWUjI19zdGF0aWMpPDApIHJldHVybiAtMTtcDQotXA0KLQkJcmV0dXJuIG5PYmpEZWZuSUQ7XA0KLQl9XA0KLVwNCi0JcmV0dXJuIC0xO1wNCi19XA0KLXZvaWQganNfY2xhc3NfbmFtZTo6R2V0Q29uc3RzKEpTQ29uc3RTcGVjKiYgcENvbnN0cywgaW50JiBuU2l6ZSlcDQote1wNCi0JcENvbnN0cyA9IEpTX0NsYXNzX0NvbnN0cztcDQotCW5TaXplID0gc2l6ZW9mKEpTX0NsYXNzX0NvbnN0cykvc2l6ZW9mKEpTQ29uc3RTcGVjKS0xO1wNCi19XA0KLXZvaWQganNfY2xhc3NfbmFtZTo6R2V0UHJvcGVydGllcyhKU1Byb3BlcnR5U3BlYyomIHBQcm9wZXJ0aWVzLCBpbnQmIG5TaXplKVwNCi17XA0KLQlwUHJvcGVydGllcyA9IEpTX0NsYXNzX1Byb3BlcnRpZXM7XA0KLQluU2l6ZSA9IHNpemVvZihKU19DbGFzc19Qcm9wZXJ0aWVzKS9zaXplb2YoSlNQcm9wZXJ0eVNwZWMpLTE7XA0KLX1cDQotdm9pZCBqc19jbGFzc19uYW1lOjpHZXRNZXRob2RzKEpTTWV0aG9kU3BlYyomIHBNZXRob2RzLCBpbnQmIG5TaXplKVwNCi17XA0KLQlwTWV0aG9kcyA9IEpTX0NsYXNzX01ldGhvZHM7XA0KLQluU2l6ZSA9IHNpemVvZihKU19DbGFzc19NZXRob2RzKS9zaXplb2YoSlNNZXRob2RTcGVjKS0xO1wNCi19DQotDQotI2RlZmluZSBKU19TUEVDSUFMX1NUQVRJQ19NRVRIT0QobWV0aG9kX25hbWUsIGNsYXNzX2FsdGVybmF0ZSwgY2xhc3NfbmFtZSlcDQotCXN0YXRpYyB2b2lkIG1ldGhvZF9uYW1lIyNfc3RhdGljKEpTX01FVEhPRF9BUkdTKVwNCi17XA0KLQl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IGluZm8uR2V0SXNvbGF0ZSgpO1wNCi0Jdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gaXNvbGF0ZS0+R2V0Q3VycmVudENvbnRleHQoKTtcDQotCXY4OjpMb2NhbDx2ODo6VmFsdWU+IHYgPSBjb250ZXh0LT5HZXRFbWJlZGRlckRhdGEoMSk7XA0KLQlBU1NFUlQoIXYuSXNFbXB0eSgpKTtcDQotCWlmKHYuSXNFbXB0eSgpKSByZXR1cm47XA0KLQl2ODo6SGFuZGxlPHY4OjpFeHRlcm5hbD4gZmllbGQgPSB2ODo6SGFuZGxlPHY4OjpFeHRlcm5hbD46OkNhc3Qodik7XA0KLQlJRlhKU19SdW50aW1lKiBwUnVudGltZSA9IChJRlhKU19SdW50aW1lKilmaWVsZC0+VmFsdWUoKTtcDQotCUlGWEpTX0NvbnRleHQqIGNjID0gcFJ1bnRpbWUtPkdldEN1cnJlbnRDb250ZXh0KCk7XA0KLQlDSlNfUGFyYW1ldGVycyBwYXJhbWV0ZXJzO1wNCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGk8KHVuc2lnbmVkIGludClpbmZvLkxlbmd0aCgpOyBpKyspXA0KLQl7XA0KLQlwYXJhbWV0ZXJzLnB1c2hfYmFjayhDSlNfVmFsdWUoaXNvbGF0ZSwgaW5mb1tpXSwgVlRfdW5rbm93bikpO1wNCi0JfVwNCi0JQ0pTX1ZhbHVlIHZhbHVlUmVzKGlzb2xhdGUpO1wNCi0JQ0pTX09iamVjdCogcEpTT2JqID0gKENKU19PYmplY3QgKilKU19HZXRQcml2YXRlKGlzb2xhdGUsIGluZm8uSG9sZGVyKCkpO1wNCi0JQVNTRVJUKHBKU09iaiAhPSBOVUxMKTtcDQotCWNsYXNzX2FsdGVybmF0ZSogcE9iaiA9IChjbGFzc19hbHRlcm5hdGUqKXBKU09iai0+R2V0RW1iZWRPYmplY3QoKTtcDQotCUFTU0VSVChwT2JqICE9IE5VTEwpO1wNCi0JSlNfRXJyb3JTdHJpbmcgc0Vycm9yO1wNCi0JRlhfQk9PTCBiUmV0ID0gRkFMU0U7XA0KLQl0cnlcDQotCXtcDQotCQlNRU1MRUFLQ0hFQ0tfMSgpO1wNCi0JCWJSZXQgPSBwT2JqLT5tZXRob2RfbmFtZShjYywgcGFyYW1ldGVycywgdmFsdWVSZXMsIHNFcnJvcik7XA0KLQkJTUVNTEVBS0NIRUNLXzIoY2xhc3NfbmFtZSwgbWV0aG9kX25hbWUpO1wNCi0JfVwNCi0JY2F0Y2ggKC4uLilcDQotCXtcDQotCQlDRlhfQnl0ZVN0cmluZyBjYk5hbWU7XA0KLQkJY2JOYW1lLkZvcm1hdCgiJXMuJXMiLCAjY2xhc3NfbmFtZSwgI21ldGhvZF9uYW1lKTtcDQotCQlKU19FcnJvcihOVUxMLCBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKGNiTmFtZSksIEwiVW5rbm93biBlcnJvciBpcyBjYXRjaGVkISIpO1wNCi0JCXJldHVybiA7XA0KLQl9XA0KLQlpZiAoYlJldClcDQotCXtcDQotCQlpbmZvLkdldFJldHVyblZhbHVlKCkuU2V0KHZhbHVlUmVzLlRvSlNWYWx1ZSgpKTtcDQotCQlyZXR1cm4gO1wNCi0JfVwNCi0JZWxzZVwNCi0Je1wNCi0JCUNGWF9CeXRlU3RyaW5nIGNiTmFtZTtcDQotCQljYk5hbWUuRm9ybWF0KCIlcy4lcyIsICNjbGFzc19uYW1lLCAjbWV0aG9kX25hbWUpO1wNCi0JCUpTX0Vycm9yKE5VTEwsIENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoY2JOYW1lKSwgc0Vycm9yKTtcDQotCQlyZXR1cm4gO1wNCi0JfVwNCi0JSlNfRXJyb3IoTlVMTCwgIEpTX1dJREVTVFJJTkcobWV0aG9kX25hbWUpLCBMIkVtYmVkZWQgb2JqZWN0IG5vdCBmb3VuZCEiKTtcDQotICAgIHJldHVybiA7XA0KLX0NCi0NCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEdMT0JBTCBNRVRIT0RTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQotI2RlZmluZSBKU19TVEFUSUNfR0xPQkFMX0ZVTihmdW5fbmFtZSkgXA0KLXN0YXRpYyB2b2lkIGZ1bl9uYW1lIyNfc3RhdGljKEpTX01FVEhPRF9BUkdTKVwNCi17XA0KLQl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IGluZm8uR2V0SXNvbGF0ZSgpO1wNCi0Jdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gaXNvbGF0ZS0+R2V0Q3VycmVudENvbnRleHQoKTtcDQotCXY4OjpMb2NhbDx2ODo6VmFsdWU+IHYgPSBjb250ZXh0LT5HZXRFbWJlZGRlckRhdGEoMSk7XA0KLQlBU1NFUlQoIXYuSXNFbXB0eSgpKTtcDQotCWlmKHYuSXNFbXB0eSgpKSByZXR1cm47XA0KLQl2ODo6SGFuZGxlPHY4OjpFeHRlcm5hbD4gZmllbGQgPSB2ODo6SGFuZGxlPHY4OjpFeHRlcm5hbD46OkNhc3Qodik7XA0KLQlJRlhKU19SdW50aW1lKiBwUnVudGltZSA9IChJRlhKU19SdW50aW1lKilmaWVsZC0+VmFsdWUoKTtcDQotCUlGWEpTX0NvbnRleHQqIGNjID0gcFJ1bnRpbWUtPkdldEN1cnJlbnRDb250ZXh0KCk7XA0KLQlDSlNfUGFyYW1ldGVycyBwYXJhbWV0ZXJzO1wNCi0JZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGk8KHVuc2lnbmVkIGludClpbmZvLkxlbmd0aCgpOyBpKyspXA0KLQl7XA0KLQlwYXJhbWV0ZXJzLnB1c2hfYmFjayhDSlNfVmFsdWUoaXNvbGF0ZSwgaW5mb1tpXSwgVlRfdW5rbm93bikpO1wNCi0JfVwNCi0JQ0pTX1ZhbHVlIHZhbHVlUmVzKGlzb2xhdGUpO1wNCi0JSlNfRXJyb3JTdHJpbmcgc0Vycm9yO1wNCi0JaWYgKCFmdW5fbmFtZShjYywgcGFyYW1ldGVycywgdmFsdWVSZXMsIHNFcnJvcikpXA0KLQl7XA0KLQkJSlNfRXJyb3IoTlVMTCwgSlNfV0lERVNUUklORyhmdW5fbmFtZSksIHNFcnJvcik7XA0KLQkJcmV0dXJuIDtcDQotCX1cDQotCWluZm8uR2V0UmV0dXJuVmFsdWUoKS5TZXQodmFsdWVSZXMuVG9KU1ZhbHVlKCkpO1wNCi0JcmV0dXJuIDtcDQotfQ0KLQ0KLSNkZWZpbmUgSlNfU1RBVElDX0RFQ0xBUkVfR0xPQkFMX0ZVTigpIFwNCi1zdGF0aWMgSlNNZXRob2RTcGVjCWdsb2JhbF9tZXRob2RzW107IFwNCi1zdGF0aWMgaW50IEluaXQoSUpTX1J1bnRpbWUqIHBSdW50aW1lKQ0KLQ0KLSNkZWZpbmUgQkVHSU5fSlNfU1RBVElDX0dMT0JBTF9GVU4oanNfY2xhc3NfbmFtZSkgXA0KLUpTTWV0aG9kU3BlYyBqc19jbGFzc19uYW1lOjpnbG9iYWxfbWV0aG9kc1tdID0gew0KLQ0KLSNkZWZpbmUgSlNfU1RBVElDX0dMT0JBTF9GVU5fRU5UUlkobWV0aG9kX25hbWUsbmFyZ3MpIEpTX1NUQVRJQ19NRVRIT0RfRU5UUlkobWV0aG9kX25hbWUsbmFyZ3MpDQotDQotI2RlZmluZSBFTkRfSlNfU1RBVElDX0dMT0JBTF9GVU4oKSBFTkRfSlNfU1RBVElDX01FVEhPRCgpDQotDQotI2RlZmluZSBJTVBMRU1FTlRfSlNfU1RBVElDX0dMT0JBTF9GVU4oanNfY2xhc3NfbmFtZSkgXA0KLWludCBqc19jbGFzc19uYW1lOjpJbml0KElKU19SdW50aW1lKiBwUnVudGltZSlcDQote1wNCi0JZm9yIChpbnQgaT0wLCBzej1zaXplb2YoanNfY2xhc3NfbmFtZTo6Z2xvYmFsX21ldGhvZHMpL3NpemVvZihKU01ldGhvZFNwZWMpLTE7IGk8c3o7IGkrKylcDQotCXtcDQotCQlpZiAoSlNfRGVmaW5lR2xvYmFsTWV0aG9kKHBSdW50aW1lLFwNCi0JCQkJanNfY2xhc3NfbmFtZTo6Z2xvYmFsX21ldGhvZHNbaV0ucE5hbWUsXA0KLQkJCQlqc19jbGFzc19uYW1lOjpnbG9iYWxfbWV0aG9kc1tpXS5wTWV0aG9kQ2FsbCxcDQotCQkJCWpzX2NsYXNzX25hbWU6Omdsb2JhbF9tZXRob2RzW2ldLm5QYXJhbU51bVwNCi0JCQkJKSA8IDBcDQotCQkJKXJldHVybiAtMTtcDQotCX1cDQotCXJldHVybiAwO1wNCi19DQotDQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBHTE9CQUwgQ09OU1RTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQotI2RlZmluZSBERUZJTkVfR0xPQkFMX0NPTlNUKHBSdW50aW1lLCBjb25zdF9uYW1lICwgY29uc3RfdmFsdWUpXA0KLWlmIChKU19EZWZpbmVHbG9iYWxDb25zdChwUnVudGltZSxKU19XSURFU1RSSU5HKGNvbnN0X25hbWUpLEpTX05ld1N0cmluZyhwUnVudGltZSxKU19XSURFU1RSSU5HKGNvbnN0X3ZhbHVlKSkpKSByZXR1cm4gLTENCi0NCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEdMT0JBTCBBUlJBWVMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCi0NCi0jZGVmaW5lIERFRklORV9HTE9CQUxfQVJSQVkocFJ1bnRpbWUpXA0KLWludCBzaXplID0gc2l6ZW9mKEFycmF5Q29udGVudCkgLyBzaXplb2YoRlhfTFBDV1NUUik7XA0KLVwNCi1DSlNfQXJyYXkgYXJyYXkocFJ1bnRpbWUpO1wNCi1mb3IgKGludCBpPTA7IGk8c2l6ZTsgaSsrKSBhcnJheS5TZXRFbGVtZW50KGksQ0pTX1ZhbHVlKHBSdW50aW1lLChGWF9MUENXU1RSKUFycmF5Q29udGVudFtpXSkpO1wNCi1cDQotQ0pTX1Byb3BWYWx1ZSBwcm9wKHBSdW50aW1lKTtcDQotcHJvcCA8PCBhcnJheTtcDQotaWYgKEpTX0RlZmluZUdsb2JhbENvbnN0KHBSdW50aW1lLCAoY29uc3Qgd2NoYXJfdCopQXJyYXlOYW1lLCBwcm9wLlRvSlNWYWx1ZSgpKSA8IDApXA0KLQlyZXR1cm4gLTENCi0NCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCi0NCi0jZGVmaW5lIFZBTFVFX05BTUVfU1RSSU5HCQlMInN0cmluZyINCi0jZGVmaW5lIFZBTFVFX05BTUVfTlVNQkVSCQlMIm51bWJlciINCi0jZGVmaW5lIFZBTFVFX05BTUVfQk9PTEVBTgkJTCJib29sZWFuIg0KLSNkZWZpbmUgVkFMVUVfTkFNRV9EQVRFCQkJTCJkYXRlIg0KLSNkZWZpbmUgVkFMVUVfTkFNRV9PQkpFQ1QJCUwib2JqZWN0Ig0KLSNkZWZpbmUgVkFMVUVfTkFNRV9GWE9CSgkJTCJmeG9iaiINCi0jZGVmaW5lIFZBTFVFX05BTUVfTlVMTAkJCUwibnVsbCINCi0jZGVmaW5lIFZBTFVFX05BTUVfVU5ERUZJTkVECUwidW5kZWZpbmVkIg0KLQ0KLSNkZWZpbmUgQ0xBU1NOQU1FX0FSUkFZCQkJTCJBcnJheSINCi0jZGVmaW5lIENMQVNTTkFNRV9EQVRFCQkJTCJEYXRlIg0KLSNkZWZpbmUgQ0xBU1NOQU1FX1NUUklORwkJTCJ2ODo6U3RyaW5nIg0KLQ0KLWNvbnN0IHVuc2lnbmVkIGludCBKU0NPTlNUX25TdHJpbmdIYXNoID0gSlNfQ2FsY0hhc2goVkFMVUVfTkFNRV9TVFJJTkcsd2NzbGVuKFZBTFVFX05BTUVfU1RSSU5HKSk7DQotY29uc3QgdW5zaWduZWQgaW50IEpTQ09OU1Rfbk51bWJlckhhc2ggPSBKU19DYWxjSGFzaChWQUxVRV9OQU1FX05VTUJFUix3Y3NsZW4oVkFMVUVfTkFNRV9OVU1CRVIpKTsNCi1jb25zdCB1bnNpZ25lZCBpbnQgSlNDT05TVF9uQm9vbEhhc2ggPSBKU19DYWxjSGFzaChWQUxVRV9OQU1FX0JPT0xFQU4sd2NzbGVuKFZBTFVFX05BTUVfQk9PTEVBTikpOw0KLWNvbnN0IHVuc2lnbmVkIGludCBKU0NPTlNUX25EYXRlSGFzaCA9IEpTX0NhbGNIYXNoKFZBTFVFX05BTUVfREFURSx3Y3NsZW4oVkFMVUVfTkFNRV9EQVRFKSk7DQotY29uc3QgdW5zaWduZWQgaW50IEpTQ09OU1Rfbk9iamVjdEhhc2ggPSBKU19DYWxjSGFzaChWQUxVRV9OQU1FX09CSkVDVCx3Y3NsZW4oVkFMVUVfTkFNRV9PQkpFQ1QpKTsNCi1jb25zdCB1bnNpZ25lZCBpbnQgSlNDT05TVF9uRlhvYmpIYXNoID0gSlNfQ2FsY0hhc2goVkFMVUVfTkFNRV9GWE9CSix3Y3NsZW4oVkFMVUVfTkFNRV9GWE9CSikpOw0KLWNvbnN0IHVuc2lnbmVkIGludCBKU0NPTlNUX25OdWxsSGFzaCA9IEpTX0NhbGNIYXNoKFZBTFVFX05BTUVfTlVMTCx3Y3NsZW4oVkFMVUVfTkFNRV9OVUxMKSk7DQotY29uc3QgdW5zaWduZWQgaW50IEpTQ09OU1RfblVuZGVmSGFzaCA9IEpTX0NhbGNIYXNoKFZBTFVFX05BTUVfVU5ERUZJTkVELHdjc2xlbihWQUxVRV9OQU1FX1VOREVGSU5FRCkpOw0KLQ0KLXN0YXRpYyBGWEpTVkFMVUVUWVBFIEdFVF9WQUxVRV9UWVBFKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwKQ0KLXsNCi0NCi0JCWNvbnN0IHVuc2lnbmVkIGludCBuSGFzaCA9IEpTX0NhbGNIYXNoKEpTX0dldFR5cGVvZihwKSk7DQotDQotCQlpZiAobkhhc2ggPT0gSlNDT05TVF9uVW5kZWZIYXNoKQ0KLQkJCXJldHVybiBWVF91bmRlZmluZWQ7DQotCQllbHNlIGlmIChuSGFzaCA9PSBKU0NPTlNUX25OdWxsSGFzaCkNCi0JCQlyZXR1cm4gVlRfbnVsbDsNCi0JCWVsc2UgaWYgKG5IYXNoID09IEpTQ09OU1RfblN0cmluZ0hhc2gpDQotCQkJcmV0dXJuIFZUX3N0cmluZzsNCi0JCWVsc2UgaWYgKG5IYXNoID09IEpTQ09OU1Rfbk51bWJlckhhc2gpDQotCQkJcmV0dXJuIFZUX251bWJlcjsNCi0JCWVsc2UgaWYgKG5IYXNoID09IEpTQ09OU1RfbkJvb2xIYXNoKQ0KLQkJCXJldHVybiBWVF9ib29sZWFuOw0KLQkJZWxzZSBpZiAobkhhc2ggPT0gSlNDT05TVF9uRGF0ZUhhc2gpDQotCQkJcmV0dXJuIFZUX2RhdGU7DQotCQllbHNlIGlmIChuSGFzaCA9PSBKU0NPTlNUX25PYmplY3RIYXNoKQ0KLQkJCXJldHVybiBWVF9vYmplY3Q7CQkNCi0JCWVsc2UgaWYgKG5IYXNoID09IEpTQ09OU1RfbkZYb2JqSGFzaCkNCi0JCQlyZXR1cm4gVlRfZnhvYmplY3Q7DQotDQotCQkvKg0KLQkJY29uc3QgY2hhciAqIHNUeXBlID0gcC0+Z2V0VHlwZW9mKCktPnRvRGNoYXJzKCk7DQotCQlpZiAoc3RyY21wKHNUeXBlLFZBTFVFX05BTUVfU1RSSU5HKSA9PSAwKQ0KLQkJCXJldHVybiBWVF9zdHJpbmc7DQotCQllbHNlIGlmIChzdHJjbXAoc1R5cGUsVkFMVUVfTkFNRV9OVU1CRVIpID09IDApDQotCQkJcmV0dXJuIFZUX251bWJlcjsNCi0JCWVsc2UgaWYgKHN0cmNtcChzVHlwZSxWQUxVRV9OQU1FX0JPT0xFQU4pID09IDApDQotCQkJcmV0dXJuIFZUX2Jvb2xlYW47DQotCQllbHNlIGlmIChzdHJjbXAoc1R5cGUsVkFMVUVfTkFNRV9EQVRFKSA9PSAwKQ0KLQkJCXJldHVybiBWVF9kYXRlOw0KLQkJZWxzZSBpZiAoc3RyY21wKHNUeXBlLFZBTFVFX05BTUVfT0JKRUNUKSA9PSAwKQ0KLQkJCXJldHVybiBWVF9vYmplY3Q7DQotCQllbHNlIGlmIChzdHJjbXAoc1R5cGUsVkFMVUVfTkFNRV9GWE9CSikgPT0gMCkNCi0JCQlyZXR1cm4gVlRfb2JqZWN0Ow0KLQkJZWxzZSBpZiAoc3RyY21wKHNUeXBlLFZBTFVFX05BTUVfTlVMTCkgPT0gMCkNCi0JCQlyZXR1cm4gVlRfbnVsbDsNCi0JCWVsc2UgaWYgKHN0cmNtcChzVHlwZSxWQUxVRV9OQU1FX1VOREVGSU5FRCkgPT0gMCkNCi0JCQlyZXR1cm4gVlRfdW5kZWZpbmVkOw0KLQkJCSovDQotDQotCXJldHVybiBWVF91bmtub3duOw0KLX0NCi0NCi0jZW5kaWYgLy9fSlNfREVGSU5FX0hfDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfSlNfREVGSU5FX0hfCisjZGVmaW5lIF9KU19ERUZJTkVfSF8KKwordHlwZWRlZiB2ODo6VmFsdWUJCQlKU1ZhbHVlOwordHlwZWRlZiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+CUpTT2JqZWN0OwordHlwZWRlZiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+CUpTRlhPYmplY3Q7Cit0eXBlZGVmIHVuc2lnbmVkCQlKU0Jvb2w7CisKK3N0cnVjdCBKU0NvbnN0U3BlYworeworCWNvbnN0IHdjaGFyX3QqIHBOYW1lOworCWRvdWJsZSBudW1iZXI7CisJY29uc3Qgd2NoYXJfdCogc3RyaW5nOworCUZYX0JZVEUgdDsgLy8wOmRvdWJsZSAxOnN0cgorfTsKKworc3RydWN0IEpTUHJvcGVydHlTcGVjCit7CisJY29uc3Qgd2NoYXJfdCogcE5hbWU7CisJdjg6OkFjY2Vzc29yR2V0dGVyQ2FsbGJhY2sgcFByb3BHZXQ7CisJdjg6OkFjY2Vzc29yU2V0dGVyQ2FsbGJhY2sgcFByb3BQdXQ7Cit9OworCitzdHJ1Y3QgSlNNZXRob2RTcGVjCit7CisJY29uc3Qgd2NoYXJfdCogcE5hbWU7CisJdjg6OkZ1bmN0aW9uQ2FsbGJhY2sgcE1ldGhvZENhbGw7CisJdW5zaWduZWQgblBhcmFtTnVtOworfTsKKwordHlwZWRlZiBDRlhfV2lkZVN0cmluZwlKU19FcnJvclN0cmluZzsKKworI2RlZmluZSBKU19UUlVFCQkJKHVuc2lnbmVkKTEKKyNkZWZpbmUgSlNfRkFMU0UJCSh1bnNpZ25lZCkwCisKKworI2RlZmluZSBDSlNfUG9pbnRzQXJyYXkJCUNGWF9BcnJheVRlbXBsYXRlPGZsb2F0PgorI2RlZmluZSBDSlNfSW50QXJyYXkJCUNGWF9BcnJheVRlbXBsYXRlPGludD4KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUFVCTElDIERFRklORSBTUEVDID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyNpZm5kZWYgX19HTlVDX18KKyNkZWZpbmUgSlNfV0lERVNUUklORyh3aWRlc3RyaW5nKSBMI3dpZGVzdHJpbmcKKyNlbHNlCisjZGVmaW5lIEpTX1dJREVTVFJJTkcod2lkZXN0cmluZykgTCIiI3dpZGVzdHJpbmcKKyNlbmRpZgorCisjZGVmaW5lIE9CSl9QUk9QX1BBUkFNUwkJCUlGWEpTX0NvbnRleHQqIGNjLCBDSlNfUHJvcFZhbHVlJiB2cCwgSlNfRXJyb3JTdHJpbmcmIHNFcnJvcgorI2RlZmluZSBPQkpfTUVUSE9EX1BBUkFNUwkJSUZYSlNfQ29udGV4dCogY2MsIGNvbnN0IENKU19QYXJhbWV0ZXJzJiBwYXJhbXMsIENKU19WYWx1ZSYgdlJldCwgSlNfRXJyb3JTdHJpbmcmIHNFcnJvcgorI2RlZmluZSBCRUdJTl9KU19TVEFUSUNfQ09OU1QoanNfY2xhc3NfbmFtZSkgSlNDb25zdFNwZWMganNfY2xhc3NfbmFtZTo6SlNfQ2xhc3NfQ29uc3RzW10gPSB7CisjZGVmaW5lIEpTX1NUQVRJQ19DT05TVF9FTlRSWV9OVU1CRVIoY29uc3RfbmFtZSwgcFZhbHVlKSB7SlNfV0lERVNUUklORyhjb25zdF9uYW1lKSwgcFZhbHVlLCBMIiIsIDB9LAorI2RlZmluZSBKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKGNvbnN0X25hbWUsIHBWYWx1ZSkge0pTX1dJREVTVFJJTkcoY29uc3RfbmFtZSksIDAsIEpTX1dJREVTVFJJTkcocFZhbHVlKSwgMX0sCisjZGVmaW5lIEVORF9KU19TVEFUSUNfQ09OU1QoKSB7MCwgMCwgMCwgMH19OworCisjZGVmaW5lIEJFR0lOX0pTX1NUQVRJQ19QUk9QKGpzX2NsYXNzX25hbWUpIEpTUHJvcGVydHlTcGVjIGpzX2NsYXNzX25hbWU6OkpTX0NsYXNzX1Byb3BlcnRpZXNbXSA9IHsKKyNkZWZpbmUgSlNfU1RBVElDX1BST1BfRU5UUlkocHJvcF9uYW1lKSB7SlNfV0lERVNUUklORyhwcm9wX25hbWUpLCBnZXRfIyNwcm9wX25hbWUjI19zdGF0aWMsIHNldF8jI3Byb3BfbmFtZSMjX3N0YXRpY30sCisjZGVmaW5lIEVORF9KU19TVEFUSUNfUFJPUCgpIHswLCAwLCAwfX07CisKKyNkZWZpbmUgQkVHSU5fSlNfU1RBVElDX01FVEhPRChqc19jbGFzc19uYW1lKSBKU01ldGhvZFNwZWMganNfY2xhc3NfbmFtZTo6SlNfQ2xhc3NfTWV0aG9kc1tdID0geworI2RlZmluZSBKU19TVEFUSUNfTUVUSE9EX0VOVFJZKG1ldGhvZF9uYW1lLCBuYXJncykge0pTX1dJREVTVFJJTkcobWV0aG9kX25hbWUpLCBtZXRob2RfbmFtZSMjX3N0YXRpYywgbmFyZ3N9LAorI2RlZmluZSBFTkRfSlNfU1RBVElDX01FVEhPRCgpIHswLCAwLCAwfX07CisjZGVmaW5lIE1FTUxFQUtDSEVDS18xKCkgKCh2b2lkKTApCisjZGVmaW5lIE1FTUxFQUtDSEVDS18yKG1haW5fbmFtZSwgc3ViX25hbWUpICgodm9pZCkwKQorCisKKy8qCisjaWZkZWYgX0RFQlVHCisjZGVmaW5lIE1FTUxFQUtDSEVDS18xKCkgXAorCV9DcnRNZW1TdGF0ZSBzdGF0ZTE7XAorCV9DcnRNZW1DaGVja3BvaW50KCZzdGF0ZTEpOworCisjZGVmaW5lIE1FTUxFQUtDSEVDS18yKG1haW5fbmFtZSxzdWJfbmFtZSkgXAorCV9DcnRNZW1TdGF0ZSBzdGF0ZTI7XAorCV9DcnRNZW1DaGVja3BvaW50KCZzdGF0ZTIpO1wKKwlfQ3J0TWVtU3RhdGUgZGlmZjtcCisJX0NydE1lbURpZmZlcmVuY2UoJmRpZmYsJnN0YXRlMSwmc3RhdGUyKTtcCisJaWYgKGRpZmYubFNpemVzW19OT1JNQUxfQkxPQ0tdID4gMClcCisJe1wKKwkJVFJBQ0UoIkRldGVjdGVkIG5vcm1hbCBibG9jayBtZW1vcnkgbGVha3MgaW4gSlMgTW9kdWxlISBbJXMuJXNdXG4iLCNtYWluX25hbWUsI3N1Yl9uYW1lKTtcCisJCV9DcnRNZW1EdW1wU3RhdGlzdGljcygmZGlmZik7XAorCX0KKyNlbHNlCisJI2RlZmluZSBNRU1MRUFLQ0hFQ0tfMSgpICgodm9pZCkwKQorCSNkZWZpbmUgTUVNTEVBS0NIRUNLXzIobWFpbl9uYW1lLHN1Yl9uYW1lKSAoKHZvaWQpMCkKKyNlbmRpZgorKi8KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBQUk9QIENBTExCQUNLID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNkZWZpbmUgSlNfU1RBVElDX1BST1BfR0VUKHByb3BfbmFtZSwgY2xhc3NfbmFtZSlcCisJc3RhdGljIHZvaWQgZ2V0XyMjcHJvcF9uYW1lIyNfc3RhdGljKEpTX1BST1BHRVRfQVJHUylcCit7XAorCXY4OjpJc29sYXRlKiBpc29sYXRlID0gaW5mby5HZXRJc29sYXRlKCk7XAorCXY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IGlzb2xhdGUtPkdldEN1cnJlbnRDb250ZXh0KCk7XAorCXY4OjpMb2NhbDx2ODo6VmFsdWU+IHYgPSBjb250ZXh0LT5HZXRFbWJlZGRlckRhdGEoMSk7XAorCUFTU0VSVCghdi5Jc0VtcHR5KCkpO1wKKwlpZih2LklzRW1wdHkoKSkgcmV0dXJuO1wKKwl2ODo6SGFuZGxlPHY4OjpFeHRlcm5hbD4gZmllbGQgPSB2ODo6SGFuZGxlPHY4OjpFeHRlcm5hbD46OkNhc3Qodik7XAorCUlGWEpTX1J1bnRpbWUqIHBSdW50aW1lID0gKElGWEpTX1J1bnRpbWUqKWZpZWxkLT5WYWx1ZSgpO1wKKwlJRlhKU19Db250ZXh0KiBjYyA9IHBSdW50aW1lLT5HZXRDdXJyZW50Q29udGV4dCgpO1wKKwlDSlNfUHJvcFZhbHVlIHZhbHVlKGlzb2xhdGUpO1wKKwl2YWx1ZS5TdGFydEdldHRpbmcoKTtcCisJQ0pTX09iamVjdCogcEpTT2JqID0gKENKU19PYmplY3QqKUpTX0dldFByaXZhdGUoaXNvbGF0ZSxpbmZvLkhvbGRlcigpKTtcCisJQVNTRVJUKHBKU09iaiAhPSBOVUxMKTtcCisJY2xhc3NfbmFtZSogcE9iaiA9IChjbGFzc19uYW1lKilwSlNPYmotPkdldEVtYmVkT2JqZWN0KCk7XAorCUFTU0VSVChwT2JqICE9IE5VTEwpO1wKKwlKU19FcnJvclN0cmluZyBzRXJyb3I7XAorCUZYX0JPT0wgYlJldCA9IEZBTFNFO1wKKwl0cnlcCisJe1wKKwkJTUVNTEVBS0NIRUNLXzEoKTtcCisJCWJSZXQgPSBwT2JqLT5wcm9wX25hbWUoY2MsIHZhbHVlLCBzRXJyb3IpO1wKKwkJTUVNTEVBS0NIRUNLXzIoY2xhc3NfbmFtZSwgcHJvcF9uYW1lKTtcCisJfVwKKwljYXRjaCAoLi4uKVwKKwl7XAorCQlDRlhfQnl0ZVN0cmluZyBjYk5hbWU7XAorCQljYk5hbWUuRm9ybWF0KCIlcy4lcyIsICNjbGFzc19uYW1lLCAjcHJvcF9uYW1lKTtcCisJCUpTX0Vycm9yKE5VTEwsQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChjYk5hbWUpLCBMIlVua25vd24gZXJyb3IgaXMgY2F0Y2hlZCEiKTtcCisJCXJldHVybiA7XAorCX1cCisJaWYgKGJSZXQpXAorCXtcCisJCWluZm8uR2V0UmV0dXJuVmFsdWUoKS5TZXQoKHY4OjpIYW5kbGU8djg6OlZhbHVlPil2YWx1ZSk7XAorCQlyZXR1cm4gO1wKKwl9XAorCWVsc2VcCisJe1wKKwlDRlhfQnl0ZVN0cmluZyBjYk5hbWU7XAorCQljYk5hbWUuRm9ybWF0KCIlcy4lcyIsICNjbGFzc19uYW1lLCAjcHJvcF9uYW1lKTtcCisJCUpTX0Vycm9yKE5VTEwsQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChjYk5hbWUpLCBzRXJyb3IpO1wKKwkJcmV0dXJuIDtcCisJfVwKK30KKworI2RlZmluZSBKU19TVEFUSUNfUFJPUF9TRVQocHJvcF9uYW1lLCBjbGFzc19uYW1lKVwKKwlzdGF0aWMgdm9pZCBzZXRfIyNwcm9wX25hbWUjI19zdGF0aWMoSlNfUFJPUFBVVF9BUkdTKVwKK3tcCisJdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBpbmZvLkdldElzb2xhdGUoKTtcCisJdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gaXNvbGF0ZS0+R2V0Q3VycmVudENvbnRleHQoKTtcCisJdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdiA9IGNvbnRleHQtPkdldEVtYmVkZGVyRGF0YSgxKTtcCisJQVNTRVJUKCF2LklzRW1wdHkoKSk7XAorCWlmKHYuSXNFbXB0eSgpKSByZXR1cm47XAorCXY4OjpIYW5kbGU8djg6OkV4dGVybmFsPiBmaWVsZCA9IHY4OjpIYW5kbGU8djg6OkV4dGVybmFsPjo6Q2FzdCh2KTtcCisJSUZYSlNfUnVudGltZSogcFJ1bnRpbWUgPSAoSUZYSlNfUnVudGltZSopZmllbGQtPlZhbHVlKCk7XAorCUlGWEpTX0NvbnRleHQqIGNjID0gcFJ1bnRpbWUtPkdldEN1cnJlbnRDb250ZXh0KCk7XAorCUNKU19Qcm9wVmFsdWUgcHJvcFZhbHVlKENKU19WYWx1ZShpc29sYXRlLHZhbHVlLFZUX3Vua25vd24pKTtcCisJcHJvcFZhbHVlLlN0YXJ0U2V0dGluZygpO1wKKwlDSlNfT2JqZWN0KiBwSlNPYmogPSAoQ0pTX09iamVjdCopSlNfR2V0UHJpdmF0ZShpc29sYXRlLGluZm8uSG9sZGVyKCkpO1wKKwlBU1NFUlQocEpTT2JqICE9IE5VTEwpO1wKKwljbGFzc19uYW1lKiBwT2JqID0gKGNsYXNzX25hbWUqKXBKU09iai0+R2V0RW1iZWRPYmplY3QoKTtcCisJQVNTRVJUKHBPYmogIT0gTlVMTCk7XAorCUpTX0Vycm9yU3RyaW5nIHNFcnJvcjtcCisJRlhfQk9PTCBiUmV0ID0gRkFMU0U7XAorCXRyeVwKKwl7XAorCQlNRU1MRUFLQ0hFQ0tfMSgpO1wKKwkJYlJldCA9IHBPYmotPnByb3BfbmFtZShjYywgcHJvcFZhbHVlLCBzRXJyb3IpO1wKKwkJTUVNTEVBS0NIRUNLXzIoY2xhc3NfbmFtZSwgcHJvcF9uYW1lKTtcCisJfVwKKwljYXRjaCAoLi4uKVwKKwl7XAorCQlDRlhfQnl0ZVN0cmluZyBjYk5hbWU7XAorCQljYk5hbWUuRm9ybWF0KCIlcy4lcyIsICNjbGFzc19uYW1lLCAjcHJvcF9uYW1lKTtcCisJCUpTX0Vycm9yKE5VTEwsQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChjYk5hbWUpLCBMIlVua25vd24gZXJyb3IgaXMgY2F0Y2hlZCEiKTtcCisJCXJldHVybiA7XAorCX1cCisJaWYgKGJSZXQpXAorCXtcCisJCXJldHVybiA7XAorCX1cCisJZWxzZVwKKwl7XAorCQlDRlhfQnl0ZVN0cmluZyBjYk5hbWU7XAorCQljYk5hbWUuRm9ybWF0KCIlcy4lcyIsICNjbGFzc19uYW1lLCAjcHJvcF9uYW1lKTtcCisJCUpTX0Vycm9yKE5VTEwsQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChjYk5hbWUpLCBzRXJyb3IpO1wKKwkJcmV0dXJuIDtcCisJfVwKK30KKworI2RlZmluZSBKU19TVEFUSUNfUFJPUChwcm9wX25hbWUsIGNsYXNzX25hbWUpXAorSlNfU1RBVElDX1BST1BfR0VUKHByb3BfbmFtZSwgY2xhc3NfbmFtZSk7XAorSlNfU1RBVElDX1BST1BfU0VUKHByb3BfbmFtZSwgY2xhc3NfbmFtZSkKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gTUVUSE9EIENBTExCQUNLID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworI2RlZmluZSBKU19TVEFUSUNfTUVUSE9EKG1ldGhvZF9uYW1lLCBjbGFzc19uYW1lKVwKKwlzdGF0aWMgdm9pZCBtZXRob2RfbmFtZSMjX3N0YXRpYyhKU19NRVRIT0RfQVJHUylcCit7XAorCXY4OjpJc29sYXRlKiBpc29sYXRlID0gaW5mby5HZXRJc29sYXRlKCk7XAorCXY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IGlzb2xhdGUtPkdldEN1cnJlbnRDb250ZXh0KCk7XAorCXY4OjpMb2NhbDx2ODo6VmFsdWU+IHYgPSBjb250ZXh0LT5HZXRFbWJlZGRlckRhdGEoMSk7XAorCUFTU0VSVCghdi5Jc0VtcHR5KCkpO1wKKwlpZih2LklzRW1wdHkoKSkgcmV0dXJuO1wKKwl2ODo6SGFuZGxlPHY4OjpFeHRlcm5hbD4gZmllbGQgPSB2ODo6SGFuZGxlPHY4OjpFeHRlcm5hbD46OkNhc3Qodik7XAorCUlGWEpTX1J1bnRpbWUqIHBSdW50aW1lID0gKElGWEpTX1J1bnRpbWUqKWZpZWxkLT5WYWx1ZSgpO1wKKwlJRlhKU19Db250ZXh0KiBjYyA9IHBSdW50aW1lLT5HZXRDdXJyZW50Q29udGV4dCgpO1wKKwlDSlNfUGFyYW1ldGVycyBwYXJhbWV0ZXJzO1wKKwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaTwodW5zaWduZWQgaW50KWluZm8uTGVuZ3RoKCk7IGkrKylcCisgICAge1wKKwkJcGFyYW1ldGVycy5wdXNoX2JhY2soQ0pTX1ZhbHVlKGlzb2xhdGUsIGluZm9baV0sIFZUX3Vua25vd24pKTtcCisJfVwKKwlDSlNfVmFsdWUgdmFsdWVSZXMoaXNvbGF0ZSk7XAorCUNKU19PYmplY3QqIHBKU09iaiA9IChDSlNfT2JqZWN0ICopSlNfR2V0UHJpdmF0ZShpc29sYXRlLGluZm8uSG9sZGVyKCkpO1wKKwlBU1NFUlQocEpTT2JqICE9IE5VTEwpO1wKKwljbGFzc19uYW1lKiBwT2JqID0gKGNsYXNzX25hbWUqKXBKU09iai0+R2V0RW1iZWRPYmplY3QoKTtcCisJQVNTRVJUKHBPYmogIT0gTlVMTCk7XAorCUpTX0Vycm9yU3RyaW5nIHNFcnJvcjtcCisJRlhfQk9PTCBiUmV0ID0gRkFMU0U7XAorCXRyeVwKKwl7XAorCQlNRU1MRUFLQ0hFQ0tfMSgpO1wKKwkJYlJldCA9IHBPYmotPm1ldGhvZF9uYW1lKGNjLCBwYXJhbWV0ZXJzLCB2YWx1ZVJlcywgc0Vycm9yKTtcCisJCU1FTUxFQUtDSEVDS18yKGNsYXNzX25hbWUsIG1ldGhvZF9uYW1lKTtcCisJfVwKKwljYXRjaCAoLi4uKVwKKwl7XAorCQlDRlhfQnl0ZVN0cmluZyBjYk5hbWU7XAorCQljYk5hbWUuRm9ybWF0KCIlcy4lcyIsICNjbGFzc19uYW1lLCAjbWV0aG9kX25hbWUpO1wKKwkJSlNfRXJyb3IoTlVMTCwgQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChjYk5hbWUpLCBMIlVua25vd24gZXJyb3IgaXMgY2F0Y2hlZCEiKTtcCisJCXJldHVybiA7XAorCX1cCisJaWYgKGJSZXQpXAorCXtcCisJCWluZm8uR2V0UmV0dXJuVmFsdWUoKS5TZXQodmFsdWVSZXMuVG9KU1ZhbHVlKCkpO1wKKwkJcmV0dXJuIDtcCisJfVwKKwllbHNlXAorCXtcCisJCUNGWF9CeXRlU3RyaW5nIGNiTmFtZTtcCisJCWNiTmFtZS5Gb3JtYXQoIiVzLiVzIiwgI2NsYXNzX25hbWUsICNtZXRob2RfbmFtZSk7XAorCQlKU19FcnJvcihOVUxMLCBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKGNiTmFtZSksIHNFcnJvcik7XAorCQlyZXR1cm4gO1wKKwl9XAorfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEpTIENMQVNTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNkZWZpbmUgREVDTEFSRV9KU19DTEFTUyhqc19jbGFzc19uYW1lKSBcCisJc3RhdGljIEpTQm9vbCBKU0NvbnN0cnVjdG9yKElGWEpTX0NvbnRleHQqIGNjLCBKU0ZYT2JqZWN0IG9iaixKU0ZYT2JqZWN0IGdsb2JhbCk7XAorCXN0YXRpYyBKU0Jvb2wgSlNEZXN0cnVjdG9yKEpTRlhPYmplY3Qgb2JqKTtcCisJc3RhdGljIGludCBJbml0KElKU19SdW50aW1lKiBwUnVudGltZSwgRlhKU09CSlRZUEUgZU9ialR5cGUpO1wKKwlzdGF0aWMgdm9pZCBHZXRDb25zdHMoSlNDb25zdFNwZWMqJiBwQ29uc3RzLCBpbnQmIG5TaXplKTtcCisJc3RhdGljIHZvaWQgR2V0UHJvcGVydGllcyhKU1Byb3BlcnR5U3BlYyomIHBQcm9wZXJ0aWVzLCBpbnQmIG5TaXplKTtcCisJc3RhdGljIHZvaWQgR2V0TWV0aG9kcyhKU01ldGhvZFNwZWMqJiBwTWV0aG9kcywgaW50JiBuU2l6ZSk7XAorCXN0YXRpYyBKU0NvbnN0U3BlYyBKU19DbGFzc19Db25zdHNbXTtcCisJc3RhdGljIEpTUHJvcGVydHlTcGVjIEpTX0NsYXNzX1Byb3BlcnRpZXNbXTtcCisJc3RhdGljIEpTTWV0aG9kU3BlYwlKU19DbGFzc19NZXRob2RzW107XAorCXN0YXRpYyBjb25zdCB3Y2hhcl90KiBtX3BDbGFzc05hbWUKKworI2RlZmluZSBJTVBMRU1FTlRfSlNfQ0xBU1NfUklDSChqc19jbGFzc19uYW1lLCBjbGFzc19hbHRlcm5hdGUsIGNsYXNzX25hbWUpIFwKK2NvbnN0IHdjaGFyX3QqIGpzX2NsYXNzX25hbWU6Om1fcENsYXNzTmFtZSA9IEpTX1dJREVTVFJJTkcoY2xhc3NfbmFtZSk7XAorSlNCb29sIGpzX2NsYXNzX25hbWU6OkpTQ29uc3RydWN0b3IoSUZYSlNfQ29udGV4dCogY2MsIEpTRlhPYmplY3Qgb2JqLCBKU0ZYT2JqZWN0IGdsb2JhbClcCit7XAorCUNKU19PYmplY3QqIHBPYmogPSBGWF9ORVcganNfY2xhc3NfbmFtZShvYmopO1wKKwlwT2JqLT5TZXRFbWJlZE9iamVjdChGWF9ORVcgY2xhc3NfYWx0ZXJuYXRlKHBPYmopKTtcCisJSlNfU2V0UHJpdmF0ZShOVUxMLG9iaiwodm9pZCopcE9iaik7IFwKKwlwT2JqLT5Jbml0SW5zdGFuY2UoY2MpO1wKKwlyZXR1cm4gSlNfVFJVRTtcCit9XAorXAorSlNCb29sIGpzX2NsYXNzX25hbWU6OkpTRGVzdHJ1Y3RvcihKU0ZYT2JqZWN0IG9iaikgXAore1wKKwlqc19jbGFzc19uYW1lKiBwT2JqID0gKGpzX2NsYXNzX25hbWUqKUpTX0dldFByaXZhdGUoTlVMTCxvYmopO1wKKwlBU1NFUlQocE9iaiAhPSBOVUxMKTtcCisJcE9iai0+RXhpdEluc3RhbmNlKCk7XAorCWRlbGV0ZSBwT2JqO1wKKwlyZXR1cm4gSlNfVFJVRTtcCit9XAorXAoraW50IGpzX2NsYXNzX25hbWU6OkluaXQoSUpTX1J1bnRpbWUqIHBSdW50aW1lLCBGWEpTT0JKVFlQRSBlT2JqVHlwZSlcCit7XAorCWludCBuT2JqRGVmbklEID0gSlNfRGVmaW5lT2JqKHBSdW50aW1lLCBqc19jbGFzc19uYW1lOjptX3BDbGFzc05hbWUsIGVPYmpUeXBlLCBKU0NvbnN0cnVjdG9yLCBKU0Rlc3RydWN0b3IsIDApO1wKKwlpZiAobk9iakRlZm5JRCA+PSAwKVwKKwl7XAorCQlmb3IgKGludCBqPTAsIHN6aj1zaXplb2YoSlNfQ2xhc3NfUHJvcGVydGllcykvc2l6ZW9mKEpTUHJvcGVydHlTcGVjKS0xOyBqPHN6ajsgaisrKVwKKwkJe1wKKwkJCWlmIChKU19EZWZpbmVPYmpQcm9wZXJ0eShwUnVudGltZSwgbk9iakRlZm5JRCwgSlNfQ2xhc3NfUHJvcGVydGllc1tqXS5wTmFtZSwgSlNfQ2xhc3NfUHJvcGVydGllc1tqXS5wUHJvcEdldCwgSlNfQ2xhc3NfUHJvcGVydGllc1tqXS5wUHJvcFB1dCkgPCAwKSByZXR1cm4gLTE7XAorCQl9XAorCQlmb3IgKGludCBrPTAsIHN6az1zaXplb2YoSlNfQ2xhc3NfTWV0aG9kcykvc2l6ZW9mKEpTTWV0aG9kU3BlYyktMTsgazxzems7IGsrKylcCisJCXtcCisJCQlpZiAoSlNfRGVmaW5lT2JqTWV0aG9kKHBSdW50aW1lLCBuT2JqRGVmbklELEpTX0NsYXNzX01ldGhvZHNba10ucE5hbWUsIEpTX0NsYXNzX01ldGhvZHNba10ucE1ldGhvZENhbGwsIEpTX0NsYXNzX01ldGhvZHNba10ublBhcmFtTnVtKSA8IDApIHJldHVybiAtMTtcCisJCX1cCisJCXJldHVybiBuT2JqRGVmbklEO1wKKwl9XAorCXJldHVybiAtMTtcCit9XAordm9pZCBqc19jbGFzc19uYW1lOjpHZXRDb25zdHMoSlNDb25zdFNwZWMqJiBwQ29uc3RzLCBpbnQmIG5TaXplKVwKK3tcCisJcENvbnN0cyA9IEpTX0NsYXNzX0NvbnN0cztcCisJblNpemUgPSBzaXplb2YoSlNfQ2xhc3NfQ29uc3RzKSAvIHNpemVvZihKU0NvbnN0U3BlYykgLSAxO1wKK31cCit2b2lkIGpzX2NsYXNzX25hbWU6OkdldFByb3BlcnRpZXMoSlNQcm9wZXJ0eVNwZWMqJiBwUHJvcGVydGllcywgaW50JiBuU2l6ZSlcCit7XAorCXBQcm9wZXJ0aWVzID0gSlNfQ2xhc3NfUHJvcGVydGllcztcCisJblNpemUgPSBzaXplb2YoSlNfQ2xhc3NfUHJvcGVydGllcykgLyBzaXplb2YoSlNQcm9wZXJ0eVNwZWMpIC0gMTtcCit9XAordm9pZCBqc19jbGFzc19uYW1lOjpHZXRNZXRob2RzKEpTTWV0aG9kU3BlYyomIHBNZXRob2RzLCBpbnQmIG5TaXplKVwKK3tcCisJcE1ldGhvZHMgPSBKU19DbGFzc19NZXRob2RzO1wKKwluU2l6ZSA9IHNpemVvZihKU19DbGFzc19NZXRob2RzKSAvIHNpemVvZihKU01ldGhvZFNwZWMpIC0gMTtcCit9CisKKyNkZWZpbmUgSU1QTEVNRU5UX0pTX0NMQVNTKGpzX2NsYXNzX25hbWUsIGNsYXNzX25hbWUpIElNUExFTUVOVF9KU19DTEFTU19SSUNIKGpzX2NsYXNzX25hbWUsIGNsYXNzX25hbWUsIGNsYXNzX25hbWUpCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ09OU1QgQ0xBU1MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworI2RlZmluZSBERUNMQVJFX0pTX0NMQVNTX0NPTlNUKCkgXAorCXN0YXRpYyBpbnQgSW5pdChJSlNfUnVudGltZSogcFJ1bnRpbWUsIEZYSlNPQkpUWVBFIGVPYmpUeXBlKTtcCisJc3RhdGljIHZvaWQgR2V0Q29uc3RzKEpTQ29uc3RTcGVjKiYgcENvbnN0cywgaW50JiBuU2l6ZSk7XAorCXN0YXRpYyBKU0NvbnN0U3BlYyBKU19DbGFzc19Db25zdHNbXTtcCisJc3RhdGljIGNvbnN0IHdjaGFyX3QqIG1fcENsYXNzTmFtZQorCisjZGVmaW5lIElNUExFTUVOVF9KU19DTEFTU19DT05TVChqc19jbGFzc19uYW1lLCBjbGFzc19uYW1lKSBcCitjb25zdCB3Y2hhcl90KiBqc19jbGFzc19uYW1lOjptX3BDbGFzc05hbWUgPSBKU19XSURFU1RSSU5HKGNsYXNzX25hbWUpO1wKK2ludCBqc19jbGFzc19uYW1lOjpJbml0KElKU19SdW50aW1lKiBwUnVudGltZSwgRlhKU09CSlRZUEUgZU9ialR5cGUpXAore1wKKwlpbnQgbk9iakRlZm5JRCA9IEpTX0RlZmluZU9iaihwUnVudGltZSwganNfY2xhc3NfbmFtZTo6bV9wQ2xhc3NOYW1lLCBlT2JqVHlwZSwgTlVMTCwgTlVMTCwgMCk7XAorCWlmIChuT2JqRGVmbklEID49MClcCisJe1wKKwkJZm9yIChpbnQgaT0wLCBzej1zaXplb2YoSlNfQ2xhc3NfQ29uc3RzKS9zaXplb2YoSlNDb25zdFNwZWMpLTE7IGk8c3o7IGkrKylcCisJCXtcCisJCQlpZiAoSlNfQ2xhc3NfQ29uc3RzW2ldLnQgPT0gMClcCisJCQl7XAorCQkJCWlmIChKU19EZWZpbmVPYmpDb25zdChwUnVudGltZSwgbk9iakRlZm5JRCwgSlNfQ2xhc3NfQ29uc3RzW2ldLnBOYW1lLCBKU19OZXdOdW1iZXIocFJ1bnRpbWUsSlNfQ2xhc3NfQ29uc3RzW2ldLm51bWJlcikpIDwgMCkgcmV0dXJuIC0xO1wKKwkJCX1cCisJCQllbHNlXAorCQkJe1wKKwkJCWlmIChKU19EZWZpbmVPYmpDb25zdChwUnVudGltZSwgbk9iakRlZm5JRCwgSlNfQ2xhc3NfQ29uc3RzW2ldLnBOYW1lLCBKU19OZXdTdHJpbmcocFJ1bnRpbWUsSlNfQ2xhc3NfQ29uc3RzW2ldLnN0cmluZykpIDwgMCkgcmV0dXJuIC0xO1wKKwkJCX1cCisJCX1cCisJCXJldHVybiBuT2JqRGVmbklEO1wKKwl9XAorCXJldHVybiAtMTtcCit9XAordm9pZCBqc19jbGFzc19uYW1lOjpHZXRDb25zdHMoSlNDb25zdFNwZWMqJiBwQ29uc3RzLCBpbnQmIG5TaXplKVwKK3tcCisJcENvbnN0cyA9IEpTX0NsYXNzX0NvbnN0cztcCisJblNpemUgPSBzaXplb2YoSlNfQ2xhc3NfQ29uc3RzKS9zaXplb2YoSlNDb25zdFNwZWMpLTE7XAorfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFNQRUNJQUwgSlMgQ0xBU1MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworI2RlZmluZSBERUNMQVJFX1NQRUNJQUxfSlNfQ0xBU1MoanNfY2xhc3NfbmFtZSkgXAorCXN0YXRpYyBKU0Jvb2wgSlNDb25zdHJ1Y3RvcihJRlhKU19Db250ZXh0KiBjYywgSlNGWE9iamVjdCBvYmosIEpTRlhPYmplY3QgZ2xvYmFsKTtcCisJc3RhdGljIEpTQm9vbCBKU0Rlc3RydWN0b3IoSlNGWE9iamVjdCBvYmopO1wKKwlzdGF0aWMgdm9pZCBHZXRDb25zdHMoSlNDb25zdFNwZWMqJiBwQ29uc3RzLCBpbnQmIG5TaXplKTtcCisJc3RhdGljIHZvaWQgR2V0UHJvcGVydGllcyhKU1Byb3BlcnR5U3BlYyomIHBQcm9wZXJ0aWVzLCBpbnQmIG5TaXplKTtcCisJc3RhdGljIHZvaWQgR2V0TWV0aG9kcyhKU01ldGhvZFNwZWMqJiBwTWV0aG9kcywgaW50JiBuU2l6ZSk7XAorCXN0YXRpYyBKU0NvbnN0U3BlYyBKU19DbGFzc19Db25zdHNbXTtcCisJc3RhdGljIEpTUHJvcGVydHlTcGVjIEpTX0NsYXNzX1Byb3BlcnRpZXNbXTtcCisJc3RhdGljIEpTTWV0aG9kU3BlYwlKU19DbGFzc19NZXRob2RzW107XAorCXN0YXRpYyBpbnQgSW5pdChJSlNfUnVudGltZSogcFJ1bnRpbWUsIEZYSlNPQkpUWVBFIGVPYmpUeXBlKTtcCisJc3RhdGljIGNvbnN0IHdjaGFyX3QqIG1fcENsYXNzTmFtZTtcCisJc3RhdGljIHZvaWQgcXVlcnlwcm9wXyMjanNfY2xhc3NfbmFtZSMjX3N0YXRpYyhKU19QUk9QUVVFUllfQVJHUyk7XAorCXN0YXRpYyB2b2lkIGdldHByb3BfIyNqc19jbGFzc19uYW1lIyNfc3RhdGljKEpTX05BTUVEX1BST1BHRVRfQVJHUyk7XAorCXN0YXRpYyB2b2lkIHB1dHByb3BfIyNqc19jbGFzc19uYW1lIyNfc3RhdGljKEpTX05BTUVEX1BST1BQVVRfQVJHUyk7XAorCXN0YXRpYyB2b2lkIGRlbHByb3BfIyNqc19jbGFzc19uYW1lIyNfc3RhdGljKEpTX1BST1BERUxfQVJHUykKKworI2RlZmluZSBJTVBMRU1FTlRfU1BFQ0lBTF9KU19DTEFTUyhqc19jbGFzc19uYW1lLCBjbGFzc19hbHRlcm5hdGUsIGNsYXNzX25hbWUpIFwKK2NvbnN0IHdjaGFyX3QgKiBqc19jbGFzc19uYW1lOjptX3BDbGFzc05hbWUgPSBKU19XSURFU1RSSU5HKGNsYXNzX25hbWUpO1wKKwl2b2lkIGpzX2NsYXNzX25hbWU6OnF1ZXJ5cHJvcF8jI2pzX2NsYXNzX25hbWUjI19zdGF0aWMoSlNfUFJPUFFVRVJZX0FSR1MpXAore1wKKwl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IGluZm8uR2V0SXNvbGF0ZSgpO1wKKwl2ODo6U3RyaW5nOjpVdGY4VmFsdWUgdXRmOF92YWx1ZShwcm9wZXJ0eSk7XAorCUNGWF9XaWRlU3RyaW5nIHByb3BuYW1lID0gQ0ZYX1dpZGVTdHJpbmc6OkZyb21VVEY4KCp1dGY4X3ZhbHVlLCB1dGY4X3ZhbHVlLmxlbmd0aCgpKTtcCisJQ0pTX09iamVjdCogcEpTT2JqID0gKENKU19PYmplY3QqKUpTX0dldFByaXZhdGUoaXNvbGF0ZSxpbmZvLkhvbGRlcigpKTtcCisJQVNTRVJUKHBKU09iaiAhPSBOVUxMKTtcCisJY2xhc3NfYWx0ZXJuYXRlKiBwT2JqID0gKGNsYXNzX2FsdGVybmF0ZSopcEpTT2JqLT5HZXRFbWJlZE9iamVjdCgpO1wKKwlBU1NFUlQocE9iaiAhPSBOVUxMKTtcCisJRlhfQk9PTCBiUmV0ID0gRkFMU0U7XAorCXRyeVwKKwl7XAorCQlNRU1MRUFLQ0hFQ0tfMSgpO1wKKwkJYlJldCA9IHBPYmotPlF1ZXJ5UHJvcGVydHkoKEZYX0xQQ1dTVFIpcHJvcG5hbWUpO1wKKwkJTUVNTEVBS0NIRUNLXzIoY2xhc3NfbmFtZSwgKEZYX0xQQ1dTVFIpcHJvcF9uYW1lKTtcCisJfVwKKwljYXRjaCAoLi4uKVwKKwl7XAorCQlyZXR1cm4gO1wKKwl9XAorCWlmIChiUmV0KVwKKwl7XAorCQlpbmZvLkdldFJldHVyblZhbHVlKCkuU2V0KDB4MDA0KTtcCisJCXJldHVybiA7XAorCX1cCisJZWxzZVwKKwl7XAorCQlpbmZvLkdldFJldHVyblZhbHVlKCkuU2V0KDApO1wKKwkJcmV0dXJuIDtcCisJfVwKKwlyZXR1cm4gO1wKK31cCisJdm9pZCBqc19jbGFzc19uYW1lOjpnZXRwcm9wXyMjanNfY2xhc3NfbmFtZSMjX3N0YXRpYyhKU19OQU1FRF9QUk9QR0VUX0FSR1MpXAore1wKKwl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IGluZm8uR2V0SXNvbGF0ZSgpO1wKKwl2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBpc29sYXRlLT5HZXRDdXJyZW50Q29udGV4dCgpO1wKKwl2ODo6TG9jYWw8djg6OlZhbHVlPiB2ID0gY29udGV4dC0+R2V0RW1iZWRkZXJEYXRhKDEpO1wKKwlBU1NFUlQoIXYuSXNFbXB0eSgpKTtcCisJaWYodi5Jc0VtcHR5KCkpIHJldHVybjtcCisJdjg6OkhhbmRsZTx2ODo6RXh0ZXJuYWw+IGZpZWxkID0gdjg6OkhhbmRsZTx2ODo6RXh0ZXJuYWw+OjpDYXN0KHYpO1wKKwlJRlhKU19SdW50aW1lKiBwUnVudGltZSA9IChJRlhKU19SdW50aW1lKilmaWVsZC0+VmFsdWUoKTtcCisJSUZYSlNfQ29udGV4dCogY2MgPSBwUnVudGltZS0+R2V0Q3VycmVudENvbnRleHQoKTtcCisJdjg6OlN0cmluZzo6VXRmOFZhbHVlIHV0ZjhfdmFsdWUocHJvcGVydHkpO1wKKwlDRlhfV2lkZVN0cmluZyBwcm9wbmFtZSA9IENGWF9XaWRlU3RyaW5nOjpGcm9tVVRGOCgqdXRmOF92YWx1ZSwgdXRmOF92YWx1ZS5sZW5ndGgoKSk7XAorCUNKU19Qcm9wVmFsdWUgdmFsdWUoaXNvbGF0ZSk7XAorCXZhbHVlLlN0YXJ0R2V0dGluZygpO1wKKwlDSlNfT2JqZWN0KiBwSlNPYmogPSAoQ0pTX09iamVjdCopSlNfR2V0UHJpdmF0ZShpc29sYXRlLGluZm8uSG9sZGVyKCkpO1wKKwlBU1NFUlQocEpTT2JqICE9IE5VTEwpO1wKKwljbGFzc19hbHRlcm5hdGUqIHBPYmogPSAoY2xhc3NfYWx0ZXJuYXRlKilwSlNPYmotPkdldEVtYmVkT2JqZWN0KCk7XAorCUFTU0VSVChwT2JqICE9IE5VTEwpO1wKKwlKU19FcnJvclN0cmluZyBzRXJyb3I7XAorCUZYX0JPT0wgYlJldCA9IEZBTFNFO1wKKwl0cnlcCisJe1wKKwkJTUVNTEVBS0NIRUNLXzEoKTtcCisJCWJSZXQgPSBwT2JqLT5Eb1Byb3BlcnR5KGNjLCAoRlhfTFBDV1NUUilwcm9wbmFtZSwgdmFsdWUsIHNFcnJvcik7XAorCQlNRU1MRUFLQ0hFQ0tfMihjbGFzc19uYW1lLCBMIkdldFByb3BlcnR5Iik7XAorCX1cCisJY2F0Y2ggKC4uLilcCisJe1wKKwkJQ0ZYX0J5dGVTdHJpbmcgY2JOYW1lO1wKKwkJY2JOYW1lLkZvcm1hdCgiJXMuJXMiLCAjY2xhc3NfbmFtZSwgTCJHZXRQcm9wZXJ0eSIpO1wKKwkJSlNfRXJyb3IoTlVMTCxDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKGNiTmFtZSksIEwiVW5rbm93biBlcnJvciBpcyBjYXRjaGVkISIpO1wKKwkJcmV0dXJuIDtcCisJfVwKKwlpZiAoYlJldClcCisJe1wKKwkJaW5mby5HZXRSZXR1cm5WYWx1ZSgpLlNldCgodjg6OkhhbmRsZTx2ODo6VmFsdWU+KXZhbHVlKTtcCisJCXJldHVybiA7XAorCX1cCisJZWxzZVwKKwl7XAorCQlDRlhfQnl0ZVN0cmluZyBjYk5hbWU7XAorCQljYk5hbWUuRm9ybWF0KCIlcy4lcyIsICNjbGFzc19uYW1lLCBMIkdldFByb3BlcnR5Iik7XAorCQlKU19FcnJvcihOVUxMLENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoY2JOYW1lKSwgc0Vycm9yKTtcCisJCXJldHVybiA7XAorCX1cCisJSlNfRXJyb3IoTlVMTCxMIkdldFByb3BlcnR5IiwgTCJFbWJlZGVkIG9iamVjdCBub3QgZm91bmQhIik7XAorCXJldHVybiA7XAorfVwKKwl2b2lkIGpzX2NsYXNzX25hbWU6OnB1dHByb3BfIyNqc19jbGFzc19uYW1lIyNfc3RhdGljKEpTX05BTUVEX1BST1BQVVRfQVJHUylcCit7XAorCXY4OjpJc29sYXRlKiBpc29sYXRlID0gaW5mby5HZXRJc29sYXRlKCk7XAorCXY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IGlzb2xhdGUtPkdldEN1cnJlbnRDb250ZXh0KCk7XAorCXY4OjpMb2NhbDx2ODo6VmFsdWU+IHYgPSBjb250ZXh0LT5HZXRFbWJlZGRlckRhdGEoMSk7XAorCUFTU0VSVCghdi5Jc0VtcHR5KCkpO1wKKwlpZih2LklzRW1wdHkoKSkgcmV0dXJuO1wKKwl2ODo6SGFuZGxlPHY4OjpFeHRlcm5hbD4gZmllbGQgPSB2ODo6SGFuZGxlPHY4OjpFeHRlcm5hbD46OkNhc3Qodik7XAorCUlGWEpTX1J1bnRpbWUqIHBSdW50aW1lID0gKElGWEpTX1J1bnRpbWUqKWZpZWxkLT5WYWx1ZSgpO1wKKwlJRlhKU19Db250ZXh0KiBjYyA9IHBSdW50aW1lLT5HZXRDdXJyZW50Q29udGV4dCgpO1wKKwl2ODo6U3RyaW5nOjpVdGY4VmFsdWUgdXRmOF92YWx1ZShwcm9wZXJ0eSk7XAorCUNGWF9XaWRlU3RyaW5nIHByb3BuYW1lID0gQ0ZYX1dpZGVTdHJpbmc6OkZyb21VVEY4KCp1dGY4X3ZhbHVlLCB1dGY4X3ZhbHVlLmxlbmd0aCgpKTtcCisJQ0pTX1Byb3BWYWx1ZSBQcm9wVmFsdWUoQ0pTX1ZhbHVlKGlzb2xhdGUsdmFsdWUsVlRfdW5rbm93bikpO1wKKwlQcm9wVmFsdWUuU3RhcnRTZXR0aW5nKCk7XAorCUNKU19PYmplY3QqIHBKU09iaiA9IChDSlNfT2JqZWN0KilKU19HZXRQcml2YXRlKGlzb2xhdGUsaW5mby5Ib2xkZXIoKSk7XAorCWlmKCFwSlNPYmopIHJldHVybjtcCisJY2xhc3NfYWx0ZXJuYXRlKiBwT2JqID0gKGNsYXNzX2FsdGVybmF0ZSopcEpTT2JqLT5HZXRFbWJlZE9iamVjdCgpO1wKKwlBU1NFUlQocE9iaiAhPSBOVUxMKTtcCisJSlNfRXJyb3JTdHJpbmcgc0Vycm9yO1wKKwlGWF9CT09MIGJSZXQgPSBGQUxTRTtcCisJdHJ5XAorCXtcCisJCU1FTUxFQUtDSEVDS18xKCk7XAorCQliUmV0ID0gcE9iai0+RG9Qcm9wZXJ0eShjYywgKEZYX0xQQ1dTVFIpcHJvcG5hbWUsIFByb3BWYWx1ZSwgc0Vycm9yKTtcCisJCU1FTUxFQUtDSEVDS18yKGNsYXNzX25hbWUsTCJQdXRQcm9wZXJ0eSIpO1wKKwl9XAorCWNhdGNoICguLi4pXAorCXtcCisJCUNGWF9CeXRlU3RyaW5nIGNiTmFtZTtcCisJCWNiTmFtZS5Gb3JtYXQoIiVzLiVzIiwgI2NsYXNzX25hbWUsICJQdXRQcm9wZXJ0eSIpO1wKKwkJSlNfRXJyb3IoTlVMTCxDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKGNiTmFtZSksIEwiVW5rbm93biBlcnJvciBpcyBjYXRjaGVkISIpO1wKKwkJcmV0dXJuIDtcCisJfVwKKwlpZiAoYlJldClcCisJe1wKKwkJcmV0dXJuIDtcCisJfVwKKwllbHNlXAorCXtcCisJCUNGWF9CeXRlU3RyaW5nIGNiTmFtZTtcCisJCWNiTmFtZS5Gb3JtYXQoIiVzLiVzIiwgI2NsYXNzX25hbWUsICJQdXRQcm9wZXJ0eSIpO1wKKwkJSlNfRXJyb3IoTlVMTCxDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKGNiTmFtZSksIHNFcnJvcik7XAorCQlyZXR1cm4gO1wKKwl9XAorCUpTX0Vycm9yKE5VTEwsTCJQdXRQcm9wZXJ0eSIsIEwiRW1iZWRlZCBvYmplY3Qgbm90IGZvdW5kISIpO1wKKwlyZXR1cm4gO1wKK31cCisJdm9pZCBqc19jbGFzc19uYW1lOjpkZWxwcm9wXyMjanNfY2xhc3NfbmFtZSMjX3N0YXRpYyhKU19QUk9QREVMX0FSR1MpXAore1wKKwl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IGluZm8uR2V0SXNvbGF0ZSgpO1wKKwl2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBpc29sYXRlLT5HZXRDdXJyZW50Q29udGV4dCgpO1wKKwl2ODo6TG9jYWw8djg6OlZhbHVlPiB2ID0gY29udGV4dC0+R2V0RW1iZWRkZXJEYXRhKDEpO1wKKwlBU1NFUlQoIXYuSXNFbXB0eSgpKTtcCisJaWYodi5Jc0VtcHR5KCkpIHJldHVybjtcCisJdjg6OkhhbmRsZTx2ODo6RXh0ZXJuYWw+IGZpZWxkID0gdjg6OkhhbmRsZTx2ODo6RXh0ZXJuYWw+OjpDYXN0KHYpO1wKKwlJRlhKU19SdW50aW1lKiBwUnVudGltZSA9IChJRlhKU19SdW50aW1lKilmaWVsZC0+VmFsdWUoKTtcCisJSUZYSlNfQ29udGV4dCogY2MgPSBwUnVudGltZS0+R2V0Q3VycmVudENvbnRleHQoKTtcCisJdjg6OlN0cmluZzo6VXRmOFZhbHVlIHV0ZjhfdmFsdWUocHJvcGVydHkpO1wKKwlDRlhfV2lkZVN0cmluZyBwcm9wbmFtZSA9IENGWF9XaWRlU3RyaW5nOjpGcm9tVVRGOCgqdXRmOF92YWx1ZSwgdXRmOF92YWx1ZS5sZW5ndGgoKSk7XAorCUNKU19PYmplY3QqIHBKU09iaiA9IChDSlNfT2JqZWN0KilKU19HZXRQcml2YXRlKGlzb2xhdGUsaW5mby5Ib2xkZXIoKSk7XAorCUFTU0VSVChwSlNPYmogIT0gTlVMTCk7XAorCWNsYXNzX2FsdGVybmF0ZSogcE9iaiA9IChjbGFzc19hbHRlcm5hdGUqKXBKU09iai0+R2V0RW1iZWRPYmplY3QoKTtcCisJQVNTRVJUKHBPYmogIT0gTlVMTCk7XAorCUpTX0Vycm9yU3RyaW5nIHNFcnJvcjtcCisJRlhfQk9PTCBiUmV0ID0gRkFMU0U7XAorCXRyeVwKKwl7XAorCQlNRU1MRUFLQ0hFQ0tfMSgpO1wKKwkJYlJldCA9IHBPYmotPkRlbFByb3BlcnR5KGNjLCAoRlhfTFBDV1NUUilwcm9wbmFtZSwgc0Vycm9yKTtcCisJCU1FTUxFQUtDSEVDS18yKGNsYXNzX25hbWUsTCJEZWxQcm9wZXJ0eSIpO1wKKwl9XAorCWNhdGNoICguLi4pXAorCXtcCisJCUNGWF9CeXRlU3RyaW5nIGNiTmFtZTtcCisJCWNiTmFtZS5Gb3JtYXQoIiVzLiVzIiwgI2NsYXNzX25hbWUsICJEZWxQcm9wZXJ0eSIpO1wKKwkJcmV0dXJuIDtcCisJfVwKKwlpZiAoYlJldClcCisJe1wKKwkJcmV0dXJuIDtcCisJfVwKKwllbHNlXAorCXtcCisJCUNGWF9CeXRlU3RyaW5nIGNiTmFtZTtcCisJCWNiTmFtZS5Gb3JtYXQoIiVzLiVzIiwgI2NsYXNzX25hbWUsICJEZWxQcm9wZXJ0eSIpO1wKKwkJcmV0dXJuIDtcCisJfVwKKwlyZXR1cm4gO1wKK31cCitKU0Jvb2wganNfY2xhc3NfbmFtZTo6SlNDb25zdHJ1Y3RvcihJRlhKU19Db250ZXh0KiBjYywgSlNGWE9iamVjdCAgb2JqLEpTRlhPYmplY3QgIGdsb2JhbClcCit7XAorCUNKU19PYmplY3QqIHBPYmogPSBGWF9ORVcganNfY2xhc3NfbmFtZShvYmopO1wKKwlwT2JqLT5TZXRFbWJlZE9iamVjdChGWF9ORVcgY2xhc3NfYWx0ZXJuYXRlKHBPYmopKTtcCisJSlNfU2V0UHJpdmF0ZShOVUxMLG9iaiwgKHZvaWQqKXBPYmopOyBcCisJcE9iai0+SW5pdEluc3RhbmNlKGNjKTtcCisJcmV0dXJuIEpTX1RSVUU7XAorfVwKK1wKK0pTQm9vbCBqc19jbGFzc19uYW1lOjpKU0Rlc3RydWN0b3IoSlNGWE9iamVjdCBvYmopIFwKK3tcCisJanNfY2xhc3NfbmFtZSogcE9iaiA9IChqc19jbGFzc19uYW1lKilKU19HZXRQcml2YXRlKE5VTEwsb2JqKTtcCisJQVNTRVJUKHBPYmogIT0gTlVMTCk7XAorCXBPYmotPkV4aXRJbnN0YW5jZSgpO1wKKwlkZWxldGUgcE9iajtcCisJcmV0dXJuIEpTX1RSVUU7XAorfVwKK1wKK2ludCBqc19jbGFzc19uYW1lOjpJbml0KElKU19SdW50aW1lKiBwUnVudGltZSwgRlhKU09CSlRZUEUgZU9ialR5cGUpXAore1wKK1wKKwlpbnQgbk9iakRlZm5JRCA9IEpTX0RlZmluZU9iaihwUnVudGltZSwganNfY2xhc3NfbmFtZTo6bV9wQ2xhc3NOYW1lLCBlT2JqVHlwZSwgSlNDb25zdHJ1Y3RvciwgSlNEZXN0cnVjdG9yLCAwKTtcCitcCisJaWYgKG5PYmpEZWZuSUQgPj0gMClcCisJe1wKKwkJZm9yIChpbnQgaj0wLCBzemo9c2l6ZW9mKEpTX0NsYXNzX1Byb3BlcnRpZXMpL3NpemVvZihKU1Byb3BlcnR5U3BlYyktMTsgajxzemo7IGorKylcCisJCXtcCisJCQlpZiAoSlNfRGVmaW5lT2JqUHJvcGVydHkocFJ1bnRpbWUsIG5PYmpEZWZuSUQsIEpTX0NsYXNzX1Byb3BlcnRpZXNbal0ucE5hbWUsIEpTX0NsYXNzX1Byb3BlcnRpZXNbal0ucFByb3BHZXQsSlNfQ2xhc3NfUHJvcGVydGllc1tqXS5wUHJvcFB1dCk8MClyZXR1cm4gLTE7XAorCQl9XAorXAorCQlmb3IgKGludCBrPTAsIHN6az1zaXplb2YoSlNfQ2xhc3NfTWV0aG9kcykvc2l6ZW9mKEpTTWV0aG9kU3BlYyktMTsgazxzems7IGsrKylcCisJCXtcCisJCQlpZiAoSlNfRGVmaW5lT2JqTWV0aG9kKHBSdW50aW1lLCBuT2JqRGVmbklELEpTX0NsYXNzX01ldGhvZHNba10ucE5hbWUsSlNfQ2xhc3NfTWV0aG9kc1trXS5wTWV0aG9kQ2FsbCxKU19DbGFzc19NZXRob2RzW2tdLm5QYXJhbU51bSk8MClyZXR1cm4gLTE7XAorCQl9XAorCQlpZiAoSlNfRGVmaW5lT2JqQWxsUHJvcGVydGllcyhwUnVudGltZSwgbk9iakRlZm5JRCwganNfY2xhc3NfbmFtZTo6cXVlcnlwcm9wXyMjanNfY2xhc3NfbmFtZSMjX3N0YXRpYywganNfY2xhc3NfbmFtZTo6Z2V0cHJvcF8jI2pzX2NsYXNzX25hbWUjI19zdGF0aWMsanNfY2xhc3NfbmFtZTo6cHV0cHJvcF8jI2pzX2NsYXNzX25hbWUjI19zdGF0aWMsanNfY2xhc3NfbmFtZTo6ZGVscHJvcF8jI2pzX2NsYXNzX25hbWUjI19zdGF0aWMpPDApIHJldHVybiAtMTtcCitcCisJCXJldHVybiBuT2JqRGVmbklEO1wKKwl9XAorXAorCXJldHVybiAtMTtcCit9XAordm9pZCBqc19jbGFzc19uYW1lOjpHZXRDb25zdHMoSlNDb25zdFNwZWMqJiBwQ29uc3RzLCBpbnQmIG5TaXplKVwKK3tcCisJcENvbnN0cyA9IEpTX0NsYXNzX0NvbnN0cztcCisJblNpemUgPSBzaXplb2YoSlNfQ2xhc3NfQ29uc3RzKS9zaXplb2YoSlNDb25zdFNwZWMpLTE7XAorfVwKK3ZvaWQganNfY2xhc3NfbmFtZTo6R2V0UHJvcGVydGllcyhKU1Byb3BlcnR5U3BlYyomIHBQcm9wZXJ0aWVzLCBpbnQmIG5TaXplKVwKK3tcCisJcFByb3BlcnRpZXMgPSBKU19DbGFzc19Qcm9wZXJ0aWVzO1wKKwluU2l6ZSA9IHNpemVvZihKU19DbGFzc19Qcm9wZXJ0aWVzKS9zaXplb2YoSlNQcm9wZXJ0eVNwZWMpLTE7XAorfVwKK3ZvaWQganNfY2xhc3NfbmFtZTo6R2V0TWV0aG9kcyhKU01ldGhvZFNwZWMqJiBwTWV0aG9kcywgaW50JiBuU2l6ZSlcCit7XAorCXBNZXRob2RzID0gSlNfQ2xhc3NfTWV0aG9kcztcCisJblNpemUgPSBzaXplb2YoSlNfQ2xhc3NfTWV0aG9kcykvc2l6ZW9mKEpTTWV0aG9kU3BlYyktMTtcCit9CisKKyNkZWZpbmUgSlNfU1BFQ0lBTF9TVEFUSUNfTUVUSE9EKG1ldGhvZF9uYW1lLCBjbGFzc19hbHRlcm5hdGUsIGNsYXNzX25hbWUpXAorCXN0YXRpYyB2b2lkIG1ldGhvZF9uYW1lIyNfc3RhdGljKEpTX01FVEhPRF9BUkdTKVwKK3tcCisJdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBpbmZvLkdldElzb2xhdGUoKTtcCisJdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gaXNvbGF0ZS0+R2V0Q3VycmVudENvbnRleHQoKTtcCisJdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdiA9IGNvbnRleHQtPkdldEVtYmVkZGVyRGF0YSgxKTtcCisJQVNTRVJUKCF2LklzRW1wdHkoKSk7XAorCWlmKHYuSXNFbXB0eSgpKSByZXR1cm47XAorCXY4OjpIYW5kbGU8djg6OkV4dGVybmFsPiBmaWVsZCA9IHY4OjpIYW5kbGU8djg6OkV4dGVybmFsPjo6Q2FzdCh2KTtcCisJSUZYSlNfUnVudGltZSogcFJ1bnRpbWUgPSAoSUZYSlNfUnVudGltZSopZmllbGQtPlZhbHVlKCk7XAorCUlGWEpTX0NvbnRleHQqIGNjID0gcFJ1bnRpbWUtPkdldEN1cnJlbnRDb250ZXh0KCk7XAorCUNKU19QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7XAorCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpPCh1bnNpZ25lZCBpbnQpaW5mby5MZW5ndGgoKTsgaSsrKVwKKwl7XAorCXBhcmFtZXRlcnMucHVzaF9iYWNrKENKU19WYWx1ZShpc29sYXRlLCBpbmZvW2ldLCBWVF91bmtub3duKSk7XAorCX1cCisJQ0pTX1ZhbHVlIHZhbHVlUmVzKGlzb2xhdGUpO1wKKwlDSlNfT2JqZWN0KiBwSlNPYmogPSAoQ0pTX09iamVjdCAqKUpTX0dldFByaXZhdGUoaXNvbGF0ZSwgaW5mby5Ib2xkZXIoKSk7XAorCUFTU0VSVChwSlNPYmogIT0gTlVMTCk7XAorCWNsYXNzX2FsdGVybmF0ZSogcE9iaiA9IChjbGFzc19hbHRlcm5hdGUqKXBKU09iai0+R2V0RW1iZWRPYmplY3QoKTtcCisJQVNTRVJUKHBPYmogIT0gTlVMTCk7XAorCUpTX0Vycm9yU3RyaW5nIHNFcnJvcjtcCisJRlhfQk9PTCBiUmV0ID0gRkFMU0U7XAorCXRyeVwKKwl7XAorCQlNRU1MRUFLQ0hFQ0tfMSgpO1wKKwkJYlJldCA9IHBPYmotPm1ldGhvZF9uYW1lKGNjLCBwYXJhbWV0ZXJzLCB2YWx1ZVJlcywgc0Vycm9yKTtcCisJCU1FTUxFQUtDSEVDS18yKGNsYXNzX25hbWUsIG1ldGhvZF9uYW1lKTtcCisJfVwKKwljYXRjaCAoLi4uKVwKKwl7XAorCQlDRlhfQnl0ZVN0cmluZyBjYk5hbWU7XAorCQljYk5hbWUuRm9ybWF0KCIlcy4lcyIsICNjbGFzc19uYW1lLCAjbWV0aG9kX25hbWUpO1wKKwkJSlNfRXJyb3IoTlVMTCwgQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChjYk5hbWUpLCBMIlVua25vd24gZXJyb3IgaXMgY2F0Y2hlZCEiKTtcCisJCXJldHVybiA7XAorCX1cCisJaWYgKGJSZXQpXAorCXtcCisJCWluZm8uR2V0UmV0dXJuVmFsdWUoKS5TZXQodmFsdWVSZXMuVG9KU1ZhbHVlKCkpO1wKKwkJcmV0dXJuIDtcCisJfVwKKwllbHNlXAorCXtcCisJCUNGWF9CeXRlU3RyaW5nIGNiTmFtZTtcCisJCWNiTmFtZS5Gb3JtYXQoIiVzLiVzIiwgI2NsYXNzX25hbWUsICNtZXRob2RfbmFtZSk7XAorCQlKU19FcnJvcihOVUxMLCBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKGNiTmFtZSksIHNFcnJvcik7XAorCQlyZXR1cm4gO1wKKwl9XAorCUpTX0Vycm9yKE5VTEwsICBKU19XSURFU1RSSU5HKG1ldGhvZF9uYW1lKSwgTCJFbWJlZGVkIG9iamVjdCBub3QgZm91bmQhIik7XAorICAgIHJldHVybiA7XAorfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IEdMT0JBTCBNRVRIT0RTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIEpTX1NUQVRJQ19HTE9CQUxfRlVOKGZ1bl9uYW1lKSBcCitzdGF0aWMgdm9pZCBmdW5fbmFtZSMjX3N0YXRpYyhKU19NRVRIT0RfQVJHUylcCit7XAorCXY4OjpJc29sYXRlKiBpc29sYXRlID0gaW5mby5HZXRJc29sYXRlKCk7XAorCXY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IGlzb2xhdGUtPkdldEN1cnJlbnRDb250ZXh0KCk7XAorCXY4OjpMb2NhbDx2ODo6VmFsdWU+IHYgPSBjb250ZXh0LT5HZXRFbWJlZGRlckRhdGEoMSk7XAorCUFTU0VSVCghdi5Jc0VtcHR5KCkpO1wKKwlpZih2LklzRW1wdHkoKSkgcmV0dXJuO1wKKwl2ODo6SGFuZGxlPHY4OjpFeHRlcm5hbD4gZmllbGQgPSB2ODo6SGFuZGxlPHY4OjpFeHRlcm5hbD46OkNhc3Qodik7XAorCUlGWEpTX1J1bnRpbWUqIHBSdW50aW1lID0gKElGWEpTX1J1bnRpbWUqKWZpZWxkLT5WYWx1ZSgpO1wKKwlJRlhKU19Db250ZXh0KiBjYyA9IHBSdW50aW1lLT5HZXRDdXJyZW50Q29udGV4dCgpO1wKKwlDSlNfUGFyYW1ldGVycyBwYXJhbWV0ZXJzO1wKKwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaTwodW5zaWduZWQgaW50KWluZm8uTGVuZ3RoKCk7IGkrKylcCisJe1wKKwlwYXJhbWV0ZXJzLnB1c2hfYmFjayhDSlNfVmFsdWUoaXNvbGF0ZSwgaW5mb1tpXSwgVlRfdW5rbm93bikpO1wKKwl9XAorCUNKU19WYWx1ZSB2YWx1ZVJlcyhpc29sYXRlKTtcCisJSlNfRXJyb3JTdHJpbmcgc0Vycm9yO1wKKwlpZiAoIWZ1bl9uYW1lKGNjLCBwYXJhbWV0ZXJzLCB2YWx1ZVJlcywgc0Vycm9yKSlcCisJe1wKKwkJSlNfRXJyb3IoTlVMTCwgSlNfV0lERVNUUklORyhmdW5fbmFtZSksIHNFcnJvcik7XAorCQlyZXR1cm4gO1wKKwl9XAorCWluZm8uR2V0UmV0dXJuVmFsdWUoKS5TZXQodmFsdWVSZXMuVG9KU1ZhbHVlKCkpO1wKKwlyZXR1cm4gO1wKK30KKworI2RlZmluZSBKU19TVEFUSUNfREVDTEFSRV9HTE9CQUxfRlVOKCkgXAorc3RhdGljIEpTTWV0aG9kU3BlYwlnbG9iYWxfbWV0aG9kc1tdOyBcCitzdGF0aWMgaW50IEluaXQoSUpTX1J1bnRpbWUqIHBSdW50aW1lKQorCisjZGVmaW5lIEJFR0lOX0pTX1NUQVRJQ19HTE9CQUxfRlVOKGpzX2NsYXNzX25hbWUpIFwKK0pTTWV0aG9kU3BlYyBqc19jbGFzc19uYW1lOjpnbG9iYWxfbWV0aG9kc1tdID0geworCisjZGVmaW5lIEpTX1NUQVRJQ19HTE9CQUxfRlVOX0VOVFJZKG1ldGhvZF9uYW1lLG5hcmdzKSBKU19TVEFUSUNfTUVUSE9EX0VOVFJZKG1ldGhvZF9uYW1lLG5hcmdzKQorCisjZGVmaW5lIEVORF9KU19TVEFUSUNfR0xPQkFMX0ZVTigpIEVORF9KU19TVEFUSUNfTUVUSE9EKCkKKworI2RlZmluZSBJTVBMRU1FTlRfSlNfU1RBVElDX0dMT0JBTF9GVU4oanNfY2xhc3NfbmFtZSkgXAoraW50IGpzX2NsYXNzX25hbWU6OkluaXQoSUpTX1J1bnRpbWUqIHBSdW50aW1lKVwKK3tcCisJZm9yIChpbnQgaT0wLCBzej1zaXplb2YoanNfY2xhc3NfbmFtZTo6Z2xvYmFsX21ldGhvZHMpL3NpemVvZihKU01ldGhvZFNwZWMpLTE7IGk8c3o7IGkrKylcCisJe1wKKwkJaWYgKEpTX0RlZmluZUdsb2JhbE1ldGhvZChwUnVudGltZSxcCisJCQkJanNfY2xhc3NfbmFtZTo6Z2xvYmFsX21ldGhvZHNbaV0ucE5hbWUsXAorCQkJCWpzX2NsYXNzX25hbWU6Omdsb2JhbF9tZXRob2RzW2ldLnBNZXRob2RDYWxsLFwKKwkJCQlqc19jbGFzc19uYW1lOjpnbG9iYWxfbWV0aG9kc1tpXS5uUGFyYW1OdW1cCisJCQkJKSA8IDBcCisJCQkpcmV0dXJuIC0xO1wKKwl9XAorCXJldHVybiAwO1wKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBHTE9CQUwgQ09OU1RTID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIERFRklORV9HTE9CQUxfQ09OU1QocFJ1bnRpbWUsIGNvbnN0X25hbWUgLCBjb25zdF92YWx1ZSlcCitpZiAoSlNfRGVmaW5lR2xvYmFsQ29uc3QocFJ1bnRpbWUsSlNfV0lERVNUUklORyhjb25zdF9uYW1lKSxKU19OZXdTdHJpbmcocFJ1bnRpbWUsSlNfV0lERVNUUklORyhjb25zdF92YWx1ZSkpKSkgcmV0dXJuIC0xCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gR0xPQkFMIEFSUkFZUyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisjZGVmaW5lIERFRklORV9HTE9CQUxfQVJSQVkocFJ1bnRpbWUpXAoraW50IHNpemUgPSBzaXplb2YoQXJyYXlDb250ZW50KSAvIHNpemVvZihGWF9MUENXU1RSKTtcCitcCitDSlNfQXJyYXkgYXJyYXkocFJ1bnRpbWUpO1wKK2ZvciAoaW50IGk9MDsgaTxzaXplOyBpKyspIGFycmF5LlNldEVsZW1lbnQoaSxDSlNfVmFsdWUocFJ1bnRpbWUsKEZYX0xQQ1dTVFIpQXJyYXlDb250ZW50W2ldKSk7XAorXAorQ0pTX1Byb3BWYWx1ZSBwcm9wKHBSdW50aW1lKTtcCitwcm9wIDw8IGFycmF5O1wKK2lmIChKU19EZWZpbmVHbG9iYWxDb25zdChwUnVudGltZSwgKGNvbnN0IHdjaGFyX3QqKUFycmF5TmFtZSwgcHJvcC5Ub0pTVmFsdWUoKSkgPCAwKVwKKwlyZXR1cm4gLTEKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyNkZWZpbmUgVkFMVUVfTkFNRV9TVFJJTkcJCUwic3RyaW5nIgorI2RlZmluZSBWQUxVRV9OQU1FX05VTUJFUgkJTCJudW1iZXIiCisjZGVmaW5lIFZBTFVFX05BTUVfQk9PTEVBTgkJTCJib29sZWFuIgorI2RlZmluZSBWQUxVRV9OQU1FX0RBVEUJCQlMImRhdGUiCisjZGVmaW5lIFZBTFVFX05BTUVfT0JKRUNUCQlMIm9iamVjdCIKKyNkZWZpbmUgVkFMVUVfTkFNRV9GWE9CSgkJTCJmeG9iaiIKKyNkZWZpbmUgVkFMVUVfTkFNRV9OVUxMCQkJTCJudWxsIgorI2RlZmluZSBWQUxVRV9OQU1FX1VOREVGSU5FRAlMInVuZGVmaW5lZCIKKworI2RlZmluZSBDTEFTU05BTUVfQVJSQVkJCQlMIkFycmF5IgorI2RlZmluZSBDTEFTU05BTUVfREFURQkJCUwiRGF0ZSIKKyNkZWZpbmUgQ0xBU1NOQU1FX1NUUklORwkJTCJ2ODo6U3RyaW5nIgorCitjb25zdCB1bnNpZ25lZCBpbnQgSlNDT05TVF9uU3RyaW5nSGFzaCA9IEpTX0NhbGNIYXNoKFZBTFVFX05BTUVfU1RSSU5HLHdjc2xlbihWQUxVRV9OQU1FX1NUUklORykpOworY29uc3QgdW5zaWduZWQgaW50IEpTQ09OU1Rfbk51bWJlckhhc2ggPSBKU19DYWxjSGFzaChWQUxVRV9OQU1FX05VTUJFUix3Y3NsZW4oVkFMVUVfTkFNRV9OVU1CRVIpKTsKK2NvbnN0IHVuc2lnbmVkIGludCBKU0NPTlNUX25Cb29sSGFzaCA9IEpTX0NhbGNIYXNoKFZBTFVFX05BTUVfQk9PTEVBTix3Y3NsZW4oVkFMVUVfTkFNRV9CT09MRUFOKSk7Citjb25zdCB1bnNpZ25lZCBpbnQgSlNDT05TVF9uRGF0ZUhhc2ggPSBKU19DYWxjSGFzaChWQUxVRV9OQU1FX0RBVEUsd2NzbGVuKFZBTFVFX05BTUVfREFURSkpOworY29uc3QgdW5zaWduZWQgaW50IEpTQ09OU1Rfbk9iamVjdEhhc2ggPSBKU19DYWxjSGFzaChWQUxVRV9OQU1FX09CSkVDVCx3Y3NsZW4oVkFMVUVfTkFNRV9PQkpFQ1QpKTsKK2NvbnN0IHVuc2lnbmVkIGludCBKU0NPTlNUX25GWG9iakhhc2ggPSBKU19DYWxjSGFzaChWQUxVRV9OQU1FX0ZYT0JKLHdjc2xlbihWQUxVRV9OQU1FX0ZYT0JKKSk7Citjb25zdCB1bnNpZ25lZCBpbnQgSlNDT05TVF9uTnVsbEhhc2ggPSBKU19DYWxjSGFzaChWQUxVRV9OQU1FX05VTEwsd2NzbGVuKFZBTFVFX05BTUVfTlVMTCkpOworY29uc3QgdW5zaWduZWQgaW50IEpTQ09OU1RfblVuZGVmSGFzaCA9IEpTX0NhbGNIYXNoKFZBTFVFX05BTUVfVU5ERUZJTkVELHdjc2xlbihWQUxVRV9OQU1FX1VOREVGSU5FRCkpOworCitzdGF0aWMgRlhKU1ZBTFVFVFlQRSBHRVRfVkFMVUVfVFlQRSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcCkKK3sKKworCQljb25zdCB1bnNpZ25lZCBpbnQgbkhhc2ggPSBKU19DYWxjSGFzaChKU19HZXRUeXBlb2YocCkpOworCisJCWlmIChuSGFzaCA9PSBKU0NPTlNUX25VbmRlZkhhc2gpCisJCQlyZXR1cm4gVlRfdW5kZWZpbmVkOworCQllbHNlIGlmIChuSGFzaCA9PSBKU0NPTlNUX25OdWxsSGFzaCkKKwkJCXJldHVybiBWVF9udWxsOworCQllbHNlIGlmIChuSGFzaCA9PSBKU0NPTlNUX25TdHJpbmdIYXNoKQorCQkJcmV0dXJuIFZUX3N0cmluZzsKKwkJZWxzZSBpZiAobkhhc2ggPT0gSlNDT05TVF9uTnVtYmVySGFzaCkKKwkJCXJldHVybiBWVF9udW1iZXI7CisJCWVsc2UgaWYgKG5IYXNoID09IEpTQ09OU1RfbkJvb2xIYXNoKQorCQkJcmV0dXJuIFZUX2Jvb2xlYW47CisJCWVsc2UgaWYgKG5IYXNoID09IEpTQ09OU1RfbkRhdGVIYXNoKQorCQkJcmV0dXJuIFZUX2RhdGU7CisJCWVsc2UgaWYgKG5IYXNoID09IEpTQ09OU1Rfbk9iamVjdEhhc2gpCisJCQlyZXR1cm4gVlRfb2JqZWN0OwkJCisJCWVsc2UgaWYgKG5IYXNoID09IEpTQ09OU1RfbkZYb2JqSGFzaCkKKwkJCXJldHVybiBWVF9meG9iamVjdDsKKworCQkvKgorCQljb25zdCBjaGFyICogc1R5cGUgPSBwLT5nZXRUeXBlb2YoKS0+dG9EY2hhcnMoKTsKKwkJaWYgKHN0cmNtcChzVHlwZSxWQUxVRV9OQU1FX1NUUklORykgPT0gMCkKKwkJCXJldHVybiBWVF9zdHJpbmc7CisJCWVsc2UgaWYgKHN0cmNtcChzVHlwZSxWQUxVRV9OQU1FX05VTUJFUikgPT0gMCkKKwkJCXJldHVybiBWVF9udW1iZXI7CisJCWVsc2UgaWYgKHN0cmNtcChzVHlwZSxWQUxVRV9OQU1FX0JPT0xFQU4pID09IDApCisJCQlyZXR1cm4gVlRfYm9vbGVhbjsKKwkJZWxzZSBpZiAoc3RyY21wKHNUeXBlLFZBTFVFX05BTUVfREFURSkgPT0gMCkKKwkJCXJldHVybiBWVF9kYXRlOworCQllbHNlIGlmIChzdHJjbXAoc1R5cGUsVkFMVUVfTkFNRV9PQkpFQ1QpID09IDApCisJCQlyZXR1cm4gVlRfb2JqZWN0OworCQllbHNlIGlmIChzdHJjbXAoc1R5cGUsVkFMVUVfTkFNRV9GWE9CSikgPT0gMCkKKwkJCXJldHVybiBWVF9vYmplY3Q7CisJCWVsc2UgaWYgKHN0cmNtcChzVHlwZSxWQUxVRV9OQU1FX05VTEwpID09IDApCisJCQlyZXR1cm4gVlRfbnVsbDsKKwkJZWxzZSBpZiAoc3RyY21wKHNUeXBlLFZBTFVFX05BTUVfVU5ERUZJTkVEKSA9PSAwKQorCQkJcmV0dXJuIFZUX3VuZGVmaW5lZDsKKwkJCSovCisKKwlyZXR1cm4gVlRfdW5rbm93bjsKK30KKworI2VuZGlmIC8vX0pTX0RFRklORV9IXwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRXZlbnRIYW5kbGVyLmggYi9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9KU19FdmVudEhhbmRsZXIuaAppbmRleCBkODhjNTBjLi5kMTY5MzNhIDEwMDY0NAotLS0gYS9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9KU19FdmVudEhhbmRsZXIuaAorKysgYi9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9KU19FdmVudEhhbmRsZXIuaApAQCAtMSwxNjcgKzEsMTY3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9KU19FVkVOVEhBTkRMRVJfSF8NCi0jZGVmaW5lIF9KU19FVkVOVEhBTkRMRVJfSF8NCi0NCi1jbGFzcyBDSlNfQ29udGV4dDsNCi1jbGFzcyBGaWVsZDsNCi0NCi1lbnVtIEpTX0VWRU5UX1QNCi17DQotCUpFVF9VTktOT1dOLA0KLQlKRVRfQVBQX0lOSVQsDQotCUpFVF9ET0NfT1BFTiwNCi0JSkVUX0RPQ19XSUxMUFJJTlQsDQotCUpFVF9ET0NfRElEUFJJTlQsDQotCUpFVF9ET0NfV0lMTFNBVkUsDQotCUpFVF9ET0NfRElEU0FWRSwNCi0JSkVUX0RPQ19XSUxMQ0xPU0UsDQotCUpFVF9QQUdFX09QRU4sDQotCUpFVF9QQUdFX0NMT1NFLA0KLQlKRVRfUEFHRV9JTlZJRVcsDQotCUpFVF9QQUdFX09VVFZJRVcsDQotCUpFVF9GSUVMRF9NT1VTRURPV04sDQotCUpFVF9GSUVMRF9NT1VTRVVQLA0KLQlKRVRfRklFTERfTU9VU0VFTlRFUiwNCi0JSkVUX0ZJRUxEX01PVVNFRVhJVCwNCi0JSkVUX0ZJRUxEX0ZPQ1VTLA0KLQlKRVRfRklFTERfQkxVUiwNCi0JSkVUX0ZJRUxEX0tFWVNUUk9LRSwNCi0JSkVUX0ZJRUxEX1ZBTElEQVRFLA0KLQlKRVRfRklFTERfQ0FMQ1VMQVRFLA0KLQlKRVRfRklFTERfRk9STUFULA0KLQlKRVRfU0NSRUVOX0ZPQ1VTLA0KLQlKRVRfU0NSRUVOX0JMVVIsDQotCUpFVF9TQ1JFRU5fT1BFTiwNCi0JSkVUX1NDUkVFTl9DTE9TRSwNCi0JSkVUX1NDUkVFTl9NT1VTRURPV04sDQotCUpFVF9TQ1JFRU5fTU9VU0VVUCwNCi0JSkVUX1NDUkVFTl9NT1VTRUVOVEVSLA0KLQlKRVRfU0NSRUVOX01PVVNFRVhJVCwNCi0JSkVUX1NDUkVFTl9JTlZJRVcsDQotCUpFVF9TQ1JFRU5fT1VUVklFVywNCi0JSkVUX0JBVENIX0VYRUMsDQotCUpFVF9NRU5VX0VYRUMsDQotCUpFVF9DT05TT0xFX0VYRUMsDQotCUpFVF9FWFRFUk5BTF9FWEVDLA0KLQlKRVRfQk9PS01BUktfTU9VU0VVUCwNCi0JSkVUX0xJTktfTU9VU0VVUA0KLX07DQotDQotY2xhc3MgQ0pTX0V2ZW50SGFuZGxlcg0KLXsNCi1wdWJsaWM6DQotCUNKU19FdmVudEhhbmRsZXIoQ0pTX0NvbnRleHQgKiBwQ29udGV4dCk7DQotCXZpcnR1YWwgfkNKU19FdmVudEhhbmRsZXIoKTsNCi0NCi0Jdm9pZAkJCQkJT25BcHBfSW5pdCgpOw0KLQ0KLQl2b2lkCQkJCQlPbkRvY19PcGVuKENQREZTREtfRG9jdW1lbnQqIHBEb2MsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJUYXJnZXROYW1lKTsNCi0Jdm9pZAkJCQkJT25Eb2NfV2lsbFByaW50KENQREZTREtfRG9jdW1lbnQqIHBEb2MpOw0KLQl2b2lkCQkJCQlPbkRvY19EaWRQcmludChDUERGU0RLX0RvY3VtZW50KiBwRG9jKTsNCi0Jdm9pZAkJCQkJT25Eb2NfV2lsbFNhdmUoQ1BERlNES19Eb2N1bWVudCogcERvYyk7DQotCXZvaWQJCQkJCU9uRG9jX0RpZFNhdmUoQ1BERlNES19Eb2N1bWVudCogcERvYyk7DQotCXZvaWQJCQkJCU9uRG9jX1dpbGxDbG9zZShDUERGU0RLX0RvY3VtZW50KiBwRG9jKTsNCi0NCi0Jdm9pZAkJCQkJT25QYWdlX09wZW4oQ1BERlNES19Eb2N1bWVudCogcERvYyk7DQotCXZvaWQJCQkJCU9uUGFnZV9DbG9zZShDUERGU0RLX0RvY3VtZW50KiBwRG9jKTsNCi0Jdm9pZAkJCQkJT25QYWdlX0luVmlldyhDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KTsNCi0Jdm9pZAkJCQkJT25QYWdlX091dFZpZXcoQ1BERlNES19Eb2N1bWVudCogcFRhcmdldCk7DQotCQ0KLQl2b2lkCQkJCQlPbkZpZWxkX0NhbGN1bGF0ZShDUERGX0Zvcm1GaWVsZCogcFNvdXJjZSwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIENGWF9XaWRlU3RyaW5nJiBWYWx1ZSwgRlhfQk9PTCYgYlJjKTsNCi0Jdm9pZAkJCQkJT25GaWVsZF9Gb3JtYXQoaW50IG5Db21taXRLZXksIENQREZfRm9ybUZpZWxkKiBwVGFyZ2V0LCBDRlhfV2lkZVN0cmluZyYgVmFsdWUsIEZYX0JPT0wgYldpbGxDb21taXQpOw0KLQl2b2lkCQkJCQlPbkZpZWxkX0tleXN0cm9rZShpbnQgbkNvbW1pdEtleSwgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZUV4LA0KLQkJCQkJCQkJRlhfQk9PTCBLZXlEb3duLCBGWF9CT09MIGJNb2RpZmllciwgaW50ICZuU2VsRW5kLGludCAmblNlbFN0YXJ0LCBGWF9CT09MIGJTaGlmdCwNCi0JCQkJCQkJCUNQREZfRm9ybUZpZWxkKiBwVGFyZ2V0LCBDRlhfV2lkZVN0cmluZyYgVmFsdWUsIEZYX0JPT0wgYldpbGxDb21taXQsIA0KLQkJCQkJCQkJRlhfQk9PTCBiRmllbGRGdWxsLCBGWF9CT09MICZiUmMpOw0KLQl2b2lkCQkJCQlPbkZpZWxkX1ZhbGlkYXRlKENGWF9XaWRlU3RyaW5nJiBzdHJDaGFuZ2UsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJDaGFuZ2VFeCwgRlhfQk9PTCBiS2V5RG93biwNCi0JCQkJCQkJCUZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIENGWF9XaWRlU3RyaW5nJiBWYWx1ZSwgRlhfQk9PTCYgYlJjKTsNCi0NCi0Jdm9pZAkJCQkJT25GaWVsZF9Nb3VzZURvd24oRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCAqcFRhcmdldCk7DQotCXZvaWQJCQkJCU9uRmllbGRfTW91c2VFbnRlcihGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkICpwVGFyZ2V0KTsNCi0Jdm9pZAkJCQkJT25GaWVsZF9Nb3VzZUV4aXQoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCAqcFRhcmdldCk7DQotCXZvaWQJCQkJCU9uRmllbGRfTW91c2VVcChGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkICpwVGFyZ2V0KTsNCi0Jdm9pZAkJCQkJT25GaWVsZF9CbHVyKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBWYWx1ZSk7DQotCXZvaWQJCQkJCU9uRmllbGRfRm9jdXMoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIFZhbHVlKTsNCi0NCi0Jdm9pZAkJCQkJT25TY3JlZW5fRm9jdXMoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKTsNCi0Jdm9pZAkJCQkJT25TY3JlZW5fQmx1cihGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pOw0KLQl2b2lkCQkJCQlPblNjcmVlbl9PcGVuKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbik7DQotCXZvaWQJCQkJCU9uU2NyZWVuX0Nsb3NlKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbik7DQotCXZvaWQJCQkJCU9uU2NyZWVuX01vdXNlRG93bihGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pOw0KLQl2b2lkCQkJCQlPblNjcmVlbl9Nb3VzZVVwKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbik7DQotCXZvaWQJCQkJCU9uU2NyZWVuX01vdXNlRW50ZXIoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKTsNCi0Jdm9pZAkJCQkJT25TY3JlZW5fTW91c2VFeGl0KEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbik7DQotCXZvaWQJCQkJCU9uU2NyZWVuX0luVmlldyhGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pOw0KLQl2b2lkCQkJCQlPblNjcmVlbl9PdXRWaWV3KEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbik7DQotDQotCXZvaWQJCQkJCU9uQm9va21hcmtfTW91c2VVcChDUERGX0Jvb2ttYXJrKiBwQm9va01hcmspOw0KLQl2b2lkCQkJCQlPbkxpbmtfTW91c2VVcChDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KTsNCi0NCi0Jdm9pZAkJCQkJT25NZW51X0V4ZWMoQ1BERlNES19Eb2N1bWVudCogcFRhcmdldCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0clRhcmdldE5hbWUpOw0KLQl2b2lkCQkJCQlPbkJhdGNoRXhlYyhDUERGU0RLX0RvY3VtZW50ICpwVGFyZ2V0KTsNCi0Jdm9pZAkJCQkJT25Db25zb2xlX0V4ZWMoKTsNCi0Jdm9pZAkJCQkJT25FeHRlcm5hbF9FeGVjKCk7DQotDQotcHVibGljOg0KLSAgICB2b2lkCQkJCQlJbml0aWFsKEpTX0VWRU5UX1QgdHlwZSk7DQotCXZvaWQJCQkJCURlc3Ryb3koKTsNCi0JRlhfQk9PTAkJCQkJSXNWYWxpZCgpOw0KLQ0KLQkNCi0JQ0ZYX1dpZGVTdHJpbmcmCQkJQ2hhbmdlKCk7DQotCUNGWF9XaWRlU3RyaW5nCQkJQ2hhbmdlRXgoKTsNCi0JaW50CQkJCQkJQ29tbWl0S2V5KCk7DQotCUZYX0JPT0wJCQkJCUZpZWxkRnVsbCgpOw0KLQlGWF9CT09MCQkJCQlLZXlEb3duKCk7DQotCUZYX0JPT0wJCQkJCU1vZGlmaWVyKCk7DQotCUZYX0xQQ1dTVFIJCQkJTmFtZSgpOw0KLQlGWF9MUENXU1RSCQkJCVR5cGUoKTsNCi0JRlhfQk9PTCYJCQkJUmMoKTsNCi0JaW50JgkJCQkJU2VsRW5kKCk7DQotCWludCYJCQkJCVNlbFN0YXJ0KCk7DQotCUZYX0JPT0wJCQkJCVNoaWZ0KCk7DQotCUZpZWxkKgkJCQkJU291cmNlKCk7DQotCUZpZWxkKgkJCQkJVGFyZ2V0X0ZpZWxkKCk7DQotCUNGWF9XaWRlU3RyaW5nJgkJCVZhbHVlKCk7DQotCUZYX0JPT0wJCQkJCVdpbGxDb21taXQoKTsNCi0JQ0ZYX1dpZGVTdHJpbmcJCQlUYXJnZXROYW1lKCk7DQotDQotCUpTX0VWRU5UX1QJCQkJRXZlbnRUeXBlKCkge3JldHVybiBtX2VFdmVudFR5cGU7fTsJDQotDQotcHVibGljOg0KLQlDSlNfQ29udGV4dCoJCQltX3BKU0NvbnRleHQ7DQotCUpTX0VWRU5UX1QJCQkJbV9lRXZlbnRUeXBlOw0KLQlGWF9CT09MCQkJCQltX2JWYWxpZDsNCi0NCi0JQ0ZYX1dpZGVTdHJpbmcJCQltX3N0clRhcmdldE5hbWU7DQotCUNGWF9XaWRlU3RyaW5nCQkJbV9zdHJTb3VyY2VOYW1lOw0KLQlDRlhfV2lkZVN0cmluZyoJCQltX3BXaWRlU3RyQ2hhbmdlOw0KLQlDRlhfV2lkZVN0cmluZwkJCW1fV2lkZVN0ckNoYW5nZUR1Ow0KLQlDRlhfV2lkZVN0cmluZwkJCW1fV2lkZVN0ckNoYW5nZUV4Ow0KLQlpbnQJCQkJCQltX25Db21taXRLZXk7DQotCUZYX0JPT0wJCQkJCW1fYktleURvd247DQotCUZYX0JPT0wJCQkJCW1fYk1vZGlmaWVyOw0KLQlGWF9CT09MCQkJCQltX2JTaGlmdDsNCi0JaW50KgkJCQkJbV9wSVNlbEVuZDsNCi0JaW50CQkJCQkJbV9uU2VsRW5kRHU7DQotCWludCoJCQkJCW1fcElTZWxTdGFydDsNCi0JaW50CQkJCQkJbV9uU2VsU3RhcnREdTsNCi0JRlhfQk9PTAkJCQkJbV9iV2lsbENvbW1pdDsNCi0JQ0ZYX1dpZGVTdHJpbmcqCQkJbV9wVmFsdWU7DQotCUZYX0JPT0wJCQkJCW1fYkZpZWxkRnVsbDsNCi0JRlhfQk9PTCoJCQkJbV9wYlJjOw0KLQlGWF9CT09MCQkJCQltX2JSY0R1Ow0KLQ0KLQlDUERGU0RLX0RvY3VtZW50KgkJbV9wU291cmNlRG9jOw0KLQlDUERGX0Jvb2ttYXJrKgkJCW1fcFRhcmdldEJvb2tNYXJrOw0KLQlDUERGU0RLX0RvY3VtZW50KgkJbV9wVGFyZ2V0RG9jOw0KLQlDUERGU0RLX0Fubm90KgkJCW1fcFRhcmdldEFubm90Ow0KLX07DQotDQotI2VuZGlmIC8vX0pTX0VWRU5USEFORExFUl9IXw0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0pTX0VWRU5USEFORExFUl9IXworI2RlZmluZSBfSlNfRVZFTlRIQU5ETEVSX0hfCisKK2NsYXNzIENKU19Db250ZXh0OworY2xhc3MgRmllbGQ7CisKK2VudW0gSlNfRVZFTlRfVAoreworCUpFVF9VTktOT1dOLAorCUpFVF9BUFBfSU5JVCwKKwlKRVRfRE9DX09QRU4sCisJSkVUX0RPQ19XSUxMUFJJTlQsCisJSkVUX0RPQ19ESURQUklOVCwKKwlKRVRfRE9DX1dJTExTQVZFLAorCUpFVF9ET0NfRElEU0FWRSwKKwlKRVRfRE9DX1dJTExDTE9TRSwKKwlKRVRfUEFHRV9PUEVOLAorCUpFVF9QQUdFX0NMT1NFLAorCUpFVF9QQUdFX0lOVklFVywKKwlKRVRfUEFHRV9PVVRWSUVXLAorCUpFVF9GSUVMRF9NT1VTRURPV04sCisJSkVUX0ZJRUxEX01PVVNFVVAsCisJSkVUX0ZJRUxEX01PVVNFRU5URVIsCisJSkVUX0ZJRUxEX01PVVNFRVhJVCwKKwlKRVRfRklFTERfRk9DVVMsCisJSkVUX0ZJRUxEX0JMVVIsCisJSkVUX0ZJRUxEX0tFWVNUUk9LRSwKKwlKRVRfRklFTERfVkFMSURBVEUsCisJSkVUX0ZJRUxEX0NBTENVTEFURSwKKwlKRVRfRklFTERfRk9STUFULAorCUpFVF9TQ1JFRU5fRk9DVVMsCisJSkVUX1NDUkVFTl9CTFVSLAorCUpFVF9TQ1JFRU5fT1BFTiwKKwlKRVRfU0NSRUVOX0NMT1NFLAorCUpFVF9TQ1JFRU5fTU9VU0VET1dOLAorCUpFVF9TQ1JFRU5fTU9VU0VVUCwKKwlKRVRfU0NSRUVOX01PVVNFRU5URVIsCisJSkVUX1NDUkVFTl9NT1VTRUVYSVQsCisJSkVUX1NDUkVFTl9JTlZJRVcsCisJSkVUX1NDUkVFTl9PVVRWSUVXLAorCUpFVF9CQVRDSF9FWEVDLAorCUpFVF9NRU5VX0VYRUMsCisJSkVUX0NPTlNPTEVfRVhFQywKKwlKRVRfRVhURVJOQUxfRVhFQywKKwlKRVRfQk9PS01BUktfTU9VU0VVUCwKKwlKRVRfTElOS19NT1VTRVVQCit9OworCitjbGFzcyBDSlNfRXZlbnRIYW5kbGVyCit7CitwdWJsaWM6CisJQ0pTX0V2ZW50SGFuZGxlcihDSlNfQ29udGV4dCAqIHBDb250ZXh0KTsKKwl2aXJ0dWFsIH5DSlNfRXZlbnRIYW5kbGVyKCk7CisKKwl2b2lkCQkJCQlPbkFwcF9Jbml0KCk7CisKKwl2b2lkCQkJCQlPbkRvY19PcGVuKENQREZTREtfRG9jdW1lbnQqIHBEb2MsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJUYXJnZXROYW1lKTsKKwl2b2lkCQkJCQlPbkRvY19XaWxsUHJpbnQoQ1BERlNES19Eb2N1bWVudCogcERvYyk7CisJdm9pZAkJCQkJT25Eb2NfRGlkUHJpbnQoQ1BERlNES19Eb2N1bWVudCogcERvYyk7CisJdm9pZAkJCQkJT25Eb2NfV2lsbFNhdmUoQ1BERlNES19Eb2N1bWVudCogcERvYyk7CisJdm9pZAkJCQkJT25Eb2NfRGlkU2F2ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jKTsKKwl2b2lkCQkJCQlPbkRvY19XaWxsQ2xvc2UoQ1BERlNES19Eb2N1bWVudCogcERvYyk7CisKKwl2b2lkCQkJCQlPblBhZ2VfT3BlbihDUERGU0RLX0RvY3VtZW50KiBwRG9jKTsKKwl2b2lkCQkJCQlPblBhZ2VfQ2xvc2UoQ1BERlNES19Eb2N1bWVudCogcERvYyk7CisJdm9pZAkJCQkJT25QYWdlX0luVmlldyhDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KTsKKwl2b2lkCQkJCQlPblBhZ2VfT3V0VmlldyhDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KTsKKwkKKwl2b2lkCQkJCQlPbkZpZWxkX0NhbGN1bGF0ZShDUERGX0Zvcm1GaWVsZCogcFNvdXJjZSwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIENGWF9XaWRlU3RyaW5nJiBWYWx1ZSwgRlhfQk9PTCYgYlJjKTsKKwl2b2lkCQkJCQlPbkZpZWxkX0Zvcm1hdChpbnQgbkNvbW1pdEtleSwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIENGWF9XaWRlU3RyaW5nJiBWYWx1ZSwgRlhfQk9PTCBiV2lsbENvbW1pdCk7CisJdm9pZAkJCQkJT25GaWVsZF9LZXlzdHJva2UoaW50IG5Db21taXRLZXksIENGWF9XaWRlU3RyaW5nJiBzdHJDaGFuZ2UsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJDaGFuZ2VFeCwKKwkJCQkJCQkJRlhfQk9PTCBLZXlEb3duLCBGWF9CT09MIGJNb2RpZmllciwgaW50ICZuU2VsRW5kLGludCAmblNlbFN0YXJ0LCBGWF9CT09MIGJTaGlmdCwKKwkJCQkJCQkJQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIENGWF9XaWRlU3RyaW5nJiBWYWx1ZSwgRlhfQk9PTCBiV2lsbENvbW1pdCwgCisJCQkJCQkJCUZYX0JPT0wgYkZpZWxkRnVsbCwgRlhfQk9PTCAmYlJjKTsKKwl2b2lkCQkJCQlPbkZpZWxkX1ZhbGlkYXRlKENGWF9XaWRlU3RyaW5nJiBzdHJDaGFuZ2UsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJDaGFuZ2VFeCwgRlhfQk9PTCBiS2V5RG93biwKKwkJCQkJCQkJRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCwgQ0ZYX1dpZGVTdHJpbmcmIFZhbHVlLCBGWF9CT09MJiBiUmMpOworCisJdm9pZAkJCQkJT25GaWVsZF9Nb3VzZURvd24oRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCAqcFRhcmdldCk7CisJdm9pZAkJCQkJT25GaWVsZF9Nb3VzZUVudGVyKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQgKnBUYXJnZXQpOworCXZvaWQJCQkJCU9uRmllbGRfTW91c2VFeGl0KEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQgKnBUYXJnZXQpOworCXZvaWQJCQkJCU9uRmllbGRfTW91c2VVcChGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkICpwVGFyZ2V0KTsKKwl2b2lkCQkJCQlPbkZpZWxkX0JsdXIoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIFZhbHVlKTsKKwl2b2lkCQkJCQlPbkZpZWxkX0ZvY3VzKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBWYWx1ZSk7CisKKwl2b2lkCQkJCQlPblNjcmVlbl9Gb2N1cyhGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pOworCXZvaWQJCQkJCU9uU2NyZWVuX0JsdXIoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKTsKKwl2b2lkCQkJCQlPblNjcmVlbl9PcGVuKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbik7CisJdm9pZAkJCQkJT25TY3JlZW5fQ2xvc2UoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKTsKKwl2b2lkCQkJCQlPblNjcmVlbl9Nb3VzZURvd24oRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKTsKKwl2b2lkCQkJCQlPblNjcmVlbl9Nb3VzZVVwKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbik7CisJdm9pZAkJCQkJT25TY3JlZW5fTW91c2VFbnRlcihGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pOworCXZvaWQJCQkJCU9uU2NyZWVuX01vdXNlRXhpdChGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pOworCXZvaWQJCQkJCU9uU2NyZWVuX0luVmlldyhGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pOworCXZvaWQJCQkJCU9uU2NyZWVuX091dFZpZXcoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKTsKKworCXZvaWQJCQkJCU9uQm9va21hcmtfTW91c2VVcChDUERGX0Jvb2ttYXJrKiBwQm9va01hcmspOworCXZvaWQJCQkJCU9uTGlua19Nb3VzZVVwKENQREZTREtfRG9jdW1lbnQqIHBUYXJnZXQpOworCisJdm9pZAkJCQkJT25NZW51X0V4ZWMoQ1BERlNES19Eb2N1bWVudCogcFRhcmdldCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0clRhcmdldE5hbWUpOworCXZvaWQJCQkJCU9uQmF0Y2hFeGVjKENQREZTREtfRG9jdW1lbnQgKnBUYXJnZXQpOworCXZvaWQJCQkJCU9uQ29uc29sZV9FeGVjKCk7CisJdm9pZAkJCQkJT25FeHRlcm5hbF9FeGVjKCk7CisKK3B1YmxpYzoKKyAgICB2b2lkCQkJCQlJbml0aWFsKEpTX0VWRU5UX1QgdHlwZSk7CisJdm9pZAkJCQkJRGVzdHJveSgpOworCUZYX0JPT0wJCQkJCUlzVmFsaWQoKTsKKworCQorCUNGWF9XaWRlU3RyaW5nJgkJCUNoYW5nZSgpOworCUNGWF9XaWRlU3RyaW5nCQkJQ2hhbmdlRXgoKTsKKwlpbnQJCQkJCQlDb21taXRLZXkoKTsKKwlGWF9CT09MCQkJCQlGaWVsZEZ1bGwoKTsKKwlGWF9CT09MCQkJCQlLZXlEb3duKCk7CisJRlhfQk9PTAkJCQkJTW9kaWZpZXIoKTsKKwlGWF9MUENXU1RSCQkJCU5hbWUoKTsKKwlGWF9MUENXU1RSCQkJCVR5cGUoKTsKKwlGWF9CT09MJgkJCQlSYygpOworCWludCYJCQkJCVNlbEVuZCgpOworCWludCYJCQkJCVNlbFN0YXJ0KCk7CisJRlhfQk9PTAkJCQkJU2hpZnQoKTsKKwlGaWVsZCoJCQkJCVNvdXJjZSgpOworCUZpZWxkKgkJCQkJVGFyZ2V0X0ZpZWxkKCk7CisJQ0ZYX1dpZGVTdHJpbmcmCQkJVmFsdWUoKTsKKwlGWF9CT09MCQkJCQlXaWxsQ29tbWl0KCk7CisJQ0ZYX1dpZGVTdHJpbmcJCQlUYXJnZXROYW1lKCk7CisKKwlKU19FVkVOVF9UCQkJCUV2ZW50VHlwZSgpIHtyZXR1cm4gbV9lRXZlbnRUeXBlO307CQorCitwdWJsaWM6CisJQ0pTX0NvbnRleHQqCQkJbV9wSlNDb250ZXh0OworCUpTX0VWRU5UX1QJCQkJbV9lRXZlbnRUeXBlOworCUZYX0JPT0wJCQkJCW1fYlZhbGlkOworCisJQ0ZYX1dpZGVTdHJpbmcJCQltX3N0clRhcmdldE5hbWU7CisJQ0ZYX1dpZGVTdHJpbmcJCQltX3N0clNvdXJjZU5hbWU7CisJQ0ZYX1dpZGVTdHJpbmcqCQkJbV9wV2lkZVN0ckNoYW5nZTsKKwlDRlhfV2lkZVN0cmluZwkJCW1fV2lkZVN0ckNoYW5nZUR1OworCUNGWF9XaWRlU3RyaW5nCQkJbV9XaWRlU3RyQ2hhbmdlRXg7CisJaW50CQkJCQkJbV9uQ29tbWl0S2V5OworCUZYX0JPT0wJCQkJCW1fYktleURvd247CisJRlhfQk9PTAkJCQkJbV9iTW9kaWZpZXI7CisJRlhfQk9PTAkJCQkJbV9iU2hpZnQ7CisJaW50KgkJCQkJbV9wSVNlbEVuZDsKKwlpbnQJCQkJCQltX25TZWxFbmREdTsKKwlpbnQqCQkJCQltX3BJU2VsU3RhcnQ7CisJaW50CQkJCQkJbV9uU2VsU3RhcnREdTsKKwlGWF9CT09MCQkJCQltX2JXaWxsQ29tbWl0OworCUNGWF9XaWRlU3RyaW5nKgkJCW1fcFZhbHVlOworCUZYX0JPT0wJCQkJCW1fYkZpZWxkRnVsbDsKKwlGWF9CT09MKgkJCQltX3BiUmM7CisJRlhfQk9PTAkJCQkJbV9iUmNEdTsKKworCUNQREZTREtfRG9jdW1lbnQqCQltX3BTb3VyY2VEb2M7CisJQ1BERl9Cb29rbWFyayoJCQltX3BUYXJnZXRCb29rTWFyazsKKwlDUERGU0RLX0RvY3VtZW50KgkJbV9wVGFyZ2V0RG9jOworCUNQREZTREtfQW5ub3QqCQkJbV9wVGFyZ2V0QW5ub3Q7Cit9OworCisjZW5kaWYgLy9fSlNfRVZFTlRIQU5ETEVSX0hfCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0dsb2JhbERhdGEuaCBiL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0dsb2JhbERhdGEuaAppbmRleCA5N2E1NDAyLi4xMDAxZmY2IDEwMDY0NAotLS0gYS9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9KU19HbG9iYWxEYXRhLmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvSlNfR2xvYmFsRGF0YS5oCkBAIC0xLDk3ICsxLDk3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9KU19HTE9CQUxEQVRBX0hfDQotI2RlZmluZSBfSlNfR0xPQkFMREFUQV9IXw0KLQ0KLSNkZWZpbmUgSlNfR0xPQkFMREFUQV9UWVBFX05VTUJFUgkJMA0KLSNkZWZpbmUgSlNfR0xPQkFMREFUQV9UWVBFX0JPT0xFQU4JCTENCi0jZGVmaW5lIEpTX0dMT0JBTERBVEFfVFlQRV9TVFJJTkcJCTINCi0jZGVmaW5lIEpTX0dMT0JBTERBVEFfVFlQRV9PQkpFQ1QJCTMNCi0jZGVmaW5lIEpTX0dMT0JBTERBVEFfVFlQRV9OVUxMCQkJNA0KLQ0KLWNsYXNzIENKU19LZXlWYWx1ZTsNCi1jbGFzcyBDSlNfR2xvYmFsVmFyaWFibGVBcnJheTsNCi1jbGFzcyBDSlNfR2xvYmFsRGF0YV9FbGVtZW50Ow0KLQ0KLWNsYXNzIENKU19HbG9iYWxWYXJpYWJsZUFycmF5DQotew0KLXB1YmxpYzoNCi0JQ0pTX0dsb2JhbFZhcmlhYmxlQXJyYXkoKTsNCi0JdmlydHVhbCB+Q0pTX0dsb2JhbFZhcmlhYmxlQXJyYXkoKTsNCi0NCi0Jdm9pZAkJCUFkZChDSlNfS2V5VmFsdWUqIHApOw0KLQlpbnQJCQkJQ291bnQoKSBjb25zdDsNCi0JQ0pTX0tleVZhbHVlKglHZXRBdChpbnQgaW5kZXgpIGNvbnN0Ow0KLQl2b2lkCQkJQ29weShjb25zdCBDSlNfR2xvYmFsVmFyaWFibGVBcnJheSYgYXJyYXkpOw0KLQ0KLQl2b2lkCQkJRW1wdHkoKTsNCi0NCi1wcml2YXRlOg0KLQlDRlhfQXJyYXlUZW1wbGF0ZTxDSlNfS2V5VmFsdWUqPiBhcnJheTsNCi19Ow0KLQ0KLWNsYXNzIENKU19LZXlWYWx1ZQ0KLXsNCi1wdWJsaWM6DQotCUNKU19LZXlWYWx1ZSgpe30NCi0JdmlydHVhbCB+Q0pTX0tleVZhbHVlKCl7fQ0KLQ0KLQlDRlhfQnl0ZVN0cmluZwkJCQkJc0tleTsNCi0JaW50CQkJCQkJCQluVHlwZTsgLy8wOmludCAxOmJvb2wgMjpzdHJpbmcgMzpvYmoNCi0JZG91YmxlCQkJCQkJCWREYXRhOw0KLQlib29sCQkJCQkJCWJEYXRhOw0KLQlDRlhfQnl0ZVN0cmluZwkJCQkJc0RhdGE7DQotCUNKU19HbG9iYWxWYXJpYWJsZUFycmF5CQkJb2JqRGF0YTsNCi19Ow0KLQ0KLWNsYXNzIENKU19HbG9iYWxEYXRhX0VsZW1lbnQNCi17DQotcHVibGljOg0KLQlDSlNfR2xvYmFsRGF0YV9FbGVtZW50KCl7fQ0KLQl2aXJ0dWFsIH5DSlNfR2xvYmFsRGF0YV9FbGVtZW50KCl7fQ0KLQ0KLQlDSlNfS2V5VmFsdWUJCQlkYXRhOw0KLQlGWF9CT09MCQkJCQliUGVyc2lzdGVudDsNCi19Ow0KLQ0KLWNsYXNzIENKU19HbG9iYWxEYXRhDQotew0KLXB1YmxpYzoNCi0JQ0pTX0dsb2JhbERhdGEoQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCk7DQotCXZpcnR1YWwgfkNKU19HbG9iYWxEYXRhKCk7DQotDQotcHVibGljOg0KLQl2b2lkCQkJCQkJCQlTZXRHbG9iYWxWYXJpYWJsZU51bWJlcihGWF9MUENTVFIgcHJvcG5hbWUsIGRvdWJsZSBkRGF0YSk7DQotCXZvaWQJCQkJCQkJCVNldEdsb2JhbFZhcmlhYmxlQm9vbGVhbihGWF9MUENTVFIgcHJvcG5hbWUsIGJvb2wgYkRhdGEpOw0KLQl2b2lkCQkJCQkJCQlTZXRHbG9iYWxWYXJpYWJsZVN0cmluZyhGWF9MUENTVFIgcHJvcG5hbWUsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzRGF0YSk7DQotCXZvaWQJCQkJCQkJCVNldEdsb2JhbFZhcmlhYmxlT2JqZWN0KEZYX0xQQ1NUUiBwcm9wbmFtZSwgY29uc3QgQ0pTX0dsb2JhbFZhcmlhYmxlQXJyYXkmIGFycmF5KTsNCi0Jdm9pZAkJCQkJCQkJU2V0R2xvYmFsVmFyaWFibGVOdWxsKEZYX0xQQ1NUUiBwcm9wbmFtZSk7DQotDQotCUZYX0JPT0wJCQkJCQkJCVNldEdsb2JhbFZhcmlhYmxlUGVyc2lzdGVudChGWF9MUENTVFIgcHJvcG5hbWUsIEZYX0JPT0wgYlBlcnNpc3RlbnQpOw0KLQlGWF9CT09MCQkJCQkJCQlEZWxldGVHbG9iYWxWYXJpYWJsZShGWF9MUENTVFIgcHJvcG5hbWUpOw0KLQkNCi0JRlhfSU5UMzIJCQkJCQkJR2V0U2l6ZSgpIGNvbnN0Ow0KLQlDSlNfR2xvYmFsRGF0YV9FbGVtZW50KgkJCQlHZXRBdChpbnQgaW5kZXgpIGNvbnN0Ow0KLQ0KLXByaXZhdGU6DQotCXZvaWQJCQkJCQkJCUxvYWRHbG9iYWxQZXJzaXN0ZW50VmFyaWFibGVzKCk7DQotCXZvaWQJCQkJCQkJCVNhdmVHbG9iYWxQZXJzaXNpdGVudFZhcmlhYmxlcygpOw0KLQkNCi0JQ0pTX0dsb2JhbERhdGFfRWxlbWVudCoJCQkJR2V0R2xvYmFsVmFyaWFibGUoRlhfTFBDU1RSIHByb3BuYW1lKTsJDQotCWludAkJCQkJCQkJCUZpbmRHbG9iYWxWYXJpYWJsZShGWF9MUENTVFIgcHJvcG5hbWUpOw0KLQ0KLQl2b2lkCQkJCQkJCQlMb2FkRmlsZUJ1ZmZlcihGWF9MUENXU1RSIHNGaWxlUGF0aCwgRlhfTFBCWVRFJiBwQnVmZmVyLCBGWF9JTlQzMiYgbkxlbmd0aCk7DQotCXZvaWQJCQkJCQkJCVdyaXRlRmlsZUJ1ZmZlcihGWF9MUENXU1RSIHNGaWxlUGF0aCwgRlhfTFBDU1RSIHBCdWZmZXIsIEZYX0lOVDMyIG5MZW5ndGgpOw0KLQl2b2lkCQkJCQkJCQlNYWtlQnl0ZVN0cmluZyhjb25zdCBDRlhfQnl0ZVN0cmluZyYgbmFtZSwgQ0pTX0tleVZhbHVlKiBwRGF0YSwgQ0ZYX0JpbmFyeUJ1ZiYgc0RhdGEpOw0KLQ0KLXByaXZhdGU6DQotCUNGWF9BcnJheVRlbXBsYXRlPENKU19HbG9iYWxEYXRhX0VsZW1lbnQqPgltX2FycmF5R2xvYmFsRGF0YTsNCi0JQ0ZYX1dpZGVTdHJpbmcJCQkJCQkJCW1fc0ZpbGVQYXRoOw0KLQlDUERGRG9jX0Vudmlyb25tZW50KgkJCQkJCQkJbV9wQXBwOw0KLX07DQotDQotI2VuZGlmIC8vX0pTX0dMT0JBTERBVEFfSF8NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9KU19HTE9CQUxEQVRBX0hfCisjZGVmaW5lIF9KU19HTE9CQUxEQVRBX0hfCisKKyNkZWZpbmUgSlNfR0xPQkFMREFUQV9UWVBFX05VTUJFUgkJMAorI2RlZmluZSBKU19HTE9CQUxEQVRBX1RZUEVfQk9PTEVBTgkJMQorI2RlZmluZSBKU19HTE9CQUxEQVRBX1RZUEVfU1RSSU5HCQkyCisjZGVmaW5lIEpTX0dMT0JBTERBVEFfVFlQRV9PQkpFQ1QJCTMKKyNkZWZpbmUgSlNfR0xPQkFMREFUQV9UWVBFX05VTEwJCQk0CisKK2NsYXNzIENKU19LZXlWYWx1ZTsKK2NsYXNzIENKU19HbG9iYWxWYXJpYWJsZUFycmF5OworY2xhc3MgQ0pTX0dsb2JhbERhdGFfRWxlbWVudDsKKworY2xhc3MgQ0pTX0dsb2JhbFZhcmlhYmxlQXJyYXkKK3sKK3B1YmxpYzoKKwlDSlNfR2xvYmFsVmFyaWFibGVBcnJheSgpOworCXZpcnR1YWwgfkNKU19HbG9iYWxWYXJpYWJsZUFycmF5KCk7CisKKwl2b2lkCQkJQWRkKENKU19LZXlWYWx1ZSogcCk7CisJaW50CQkJCUNvdW50KCkgY29uc3Q7CisJQ0pTX0tleVZhbHVlKglHZXRBdChpbnQgaW5kZXgpIGNvbnN0OworCXZvaWQJCQlDb3B5KGNvbnN0IENKU19HbG9iYWxWYXJpYWJsZUFycmF5JiBhcnJheSk7CisKKwl2b2lkCQkJRW1wdHkoKTsKKworcHJpdmF0ZToKKwlDRlhfQXJyYXlUZW1wbGF0ZTxDSlNfS2V5VmFsdWUqPiBhcnJheTsKK307CisKK2NsYXNzIENKU19LZXlWYWx1ZQoreworcHVibGljOgorCUNKU19LZXlWYWx1ZSgpe30KKwl2aXJ0dWFsIH5DSlNfS2V5VmFsdWUoKXt9CisKKwlDRlhfQnl0ZVN0cmluZwkJCQkJc0tleTsKKwlpbnQJCQkJCQkJCW5UeXBlOyAvLzA6aW50IDE6Ym9vbCAyOnN0cmluZyAzOm9iagorCWRvdWJsZQkJCQkJCQlkRGF0YTsKKwlib29sCQkJCQkJCWJEYXRhOworCUNGWF9CeXRlU3RyaW5nCQkJCQlzRGF0YTsKKwlDSlNfR2xvYmFsVmFyaWFibGVBcnJheQkJCW9iakRhdGE7Cit9OworCitjbGFzcyBDSlNfR2xvYmFsRGF0YV9FbGVtZW50Cit7CitwdWJsaWM6CisJQ0pTX0dsb2JhbERhdGFfRWxlbWVudCgpe30KKwl2aXJ0dWFsIH5DSlNfR2xvYmFsRGF0YV9FbGVtZW50KCl7fQorCisJQ0pTX0tleVZhbHVlCQkJZGF0YTsKKwlGWF9CT09MCQkJCQliUGVyc2lzdGVudDsKK307CisKK2NsYXNzIENKU19HbG9iYWxEYXRhCit7CitwdWJsaWM6CisJQ0pTX0dsb2JhbERhdGEoQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCk7CisJdmlydHVhbCB+Q0pTX0dsb2JhbERhdGEoKTsKKworcHVibGljOgorCXZvaWQJCQkJCQkJCVNldEdsb2JhbFZhcmlhYmxlTnVtYmVyKEZYX0xQQ1NUUiBwcm9wbmFtZSwgZG91YmxlIGREYXRhKTsKKwl2b2lkCQkJCQkJCQlTZXRHbG9iYWxWYXJpYWJsZUJvb2xlYW4oRlhfTFBDU1RSIHByb3BuYW1lLCBib29sIGJEYXRhKTsKKwl2b2lkCQkJCQkJCQlTZXRHbG9iYWxWYXJpYWJsZVN0cmluZyhGWF9MUENTVFIgcHJvcG5hbWUsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzRGF0YSk7CisJdm9pZAkJCQkJCQkJU2V0R2xvYmFsVmFyaWFibGVPYmplY3QoRlhfTFBDU1RSIHByb3BuYW1lLCBjb25zdCBDSlNfR2xvYmFsVmFyaWFibGVBcnJheSYgYXJyYXkpOworCXZvaWQJCQkJCQkJCVNldEdsb2JhbFZhcmlhYmxlTnVsbChGWF9MUENTVFIgcHJvcG5hbWUpOworCisJRlhfQk9PTAkJCQkJCQkJU2V0R2xvYmFsVmFyaWFibGVQZXJzaXN0ZW50KEZYX0xQQ1NUUiBwcm9wbmFtZSwgRlhfQk9PTCBiUGVyc2lzdGVudCk7CisJRlhfQk9PTAkJCQkJCQkJRGVsZXRlR2xvYmFsVmFyaWFibGUoRlhfTFBDU1RSIHByb3BuYW1lKTsKKwkKKwlGWF9JTlQzMgkJCQkJCQlHZXRTaXplKCkgY29uc3Q7CisJQ0pTX0dsb2JhbERhdGFfRWxlbWVudCoJCQkJR2V0QXQoaW50IGluZGV4KSBjb25zdDsKKworcHJpdmF0ZToKKwl2b2lkCQkJCQkJCQlMb2FkR2xvYmFsUGVyc2lzdGVudFZhcmlhYmxlcygpOworCXZvaWQJCQkJCQkJCVNhdmVHbG9iYWxQZXJzaXNpdGVudFZhcmlhYmxlcygpOworCQorCUNKU19HbG9iYWxEYXRhX0VsZW1lbnQqCQkJCUdldEdsb2JhbFZhcmlhYmxlKEZYX0xQQ1NUUiBwcm9wbmFtZSk7CQorCWludAkJCQkJCQkJCUZpbmRHbG9iYWxWYXJpYWJsZShGWF9MUENTVFIgcHJvcG5hbWUpOworCisJdm9pZAkJCQkJCQkJTG9hZEZpbGVCdWZmZXIoRlhfTFBDV1NUUiBzRmlsZVBhdGgsIEZYX0xQQllURSYgcEJ1ZmZlciwgRlhfSU5UMzImIG5MZW5ndGgpOworCXZvaWQJCQkJCQkJCVdyaXRlRmlsZUJ1ZmZlcihGWF9MUENXU1RSIHNGaWxlUGF0aCwgRlhfTFBDU1RSIHBCdWZmZXIsIEZYX0lOVDMyIG5MZW5ndGgpOworCXZvaWQJCQkJCQkJCU1ha2VCeXRlU3RyaW5nKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lLCBDSlNfS2V5VmFsdWUqIHBEYXRhLCBDRlhfQmluYXJ5QnVmJiBzRGF0YSk7CisKK3ByaXZhdGU6CisJQ0ZYX0FycmF5VGVtcGxhdGU8Q0pTX0dsb2JhbERhdGFfRWxlbWVudCo+CW1fYXJyYXlHbG9iYWxEYXRhOworCUNGWF9XaWRlU3RyaW5nCQkJCQkJCQltX3NGaWxlUGF0aDsKKwlDUERGRG9jX0Vudmlyb25tZW50KgkJCQkJCQkJbV9wQXBwOworfTsKKworI2VuZGlmIC8vX0pTX0dMT0JBTERBVEFfSF8KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L0pTX01vZHVsZS5oIGIvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvSlNfTW9kdWxlLmgKaW5kZXggZDcyNWY2Yi4uMWZjYjU4MyAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvSlNfTW9kdWxlLmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvSlNfTW9kdWxlLmgKQEAgLTEsNDcgKzEsNDcgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0pTX01PRFVMRV9IXw0KLSNkZWZpbmUgX0pTX01PRFVMRV9IXw0KLQ0KLWNsYXNzIENKU19HbG9iYWxEYXRhOw0KLWNsYXNzIENKU19Db25zb2xlRGxnOw0KLQ0KLWNsYXNzIENKU19Nb2R1bGUgOiBwdWJsaWMgSVJlYWRlcl9Nb2R1bGUNCi17DQotcHVibGljOg0KLQlDSlNfTW9kdWxlKEhNT0RVTEUgaE1vZHVsZSwgQ1JlYWRlcl9BcHAqIHBBcHApOw0KLQl2aXJ0dWFsIH5DSlNfTW9kdWxlKCk7DQotDQotCXZpcnR1YWwgdm9pZAkJCQkJRGVzdHJveSgpe2RlbGV0ZSB0aGlzO30NCi0JdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJCUdldE1vZHVsZU5hbWUoKTsNCi0NCi1wdWJsaWM6DQotCXN0YXRpYyBDSlNfTW9kdWxlKgkJCQlHZXRNb2R1bGUoQ1JlYWRlcl9BcHAqIHBBcHApOw0KLQ0KLQlJRlhKU19SdW50aW1lKgkJCQkJTmV3SlNSdW50aW1lKCk7DQotCUNKU19HbG9iYWxEYXRhKgkJCQkJTmV3R2xvYmFsRGF0YSgpOw0KLQl2b2lkCQkJCQkJCVJlbGVhc2VHbG9iYWxEYXRhKCk7DQotDQotcHVibGljOg0KLQkvL2NvbnNvbGUNCi0Jdm9pZAkJCQkJCQlTaG93Q29uc29sZSgpOw0KLQl2b2lkCQkJCQkJCUhpZGVDb25zb2xlKCk7DQotCXZvaWQJCQkJCQkJQ2xlYXJDb25zb2xlKCk7DQotCXZvaWQJCQkJCQkJUHJpbnRMaW5lQ29uc29sZShGWF9MUENXU1RSIHN0cmluZyk7DQotDQotcHJpdmF0ZToNCi0JSE1PRFVMRQkJCQkJCQltX2hNb2R1bGU7DQotCUNSZWFkZXJfQXBwKgkJCQkJbV9wQXBwOw0KLQ0KLQlGWF9CT09MCQkJCQkJCW1fYkluaXRpYWw7DQotCUNKU19HbG9iYWxEYXRhKgkJCQkJbV9wR2xvYmFsRGF0YTsNCi0JRlhfSU5UMzIJCQkJCQltX25HbG9iYWxEYXRhQ291bnQ7DQotDQotCUNKU19Db25zb2xlRGxnKgkJCQkJbV9wQ29uc29sZTsNCi19Ow0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0pTX01PRFVMRV9IXworI2RlZmluZSBfSlNfTU9EVUxFX0hfCisKK2NsYXNzIENKU19HbG9iYWxEYXRhOworY2xhc3MgQ0pTX0NvbnNvbGVEbGc7CisKK2NsYXNzIENKU19Nb2R1bGUgOiBwdWJsaWMgSVJlYWRlcl9Nb2R1bGUKK3sKK3B1YmxpYzoKKwlDSlNfTW9kdWxlKEhNT0RVTEUgaE1vZHVsZSwgQ1JlYWRlcl9BcHAqIHBBcHApOworCXZpcnR1YWwgfkNKU19Nb2R1bGUoKTsKKworCXZpcnR1YWwgdm9pZAkJCQkJRGVzdHJveSgpe2RlbGV0ZSB0aGlzO30KKwl2aXJ0dWFsIENGWF9CeXRlU3RyaW5nCQkJR2V0TW9kdWxlTmFtZSgpOworCitwdWJsaWM6CisJc3RhdGljIENKU19Nb2R1bGUqCQkJCUdldE1vZHVsZShDUmVhZGVyX0FwcCogcEFwcCk7CisKKwlJRlhKU19SdW50aW1lKgkJCQkJTmV3SlNSdW50aW1lKCk7CisJQ0pTX0dsb2JhbERhdGEqCQkJCQlOZXdHbG9iYWxEYXRhKCk7CisJdm9pZAkJCQkJCQlSZWxlYXNlR2xvYmFsRGF0YSgpOworCitwdWJsaWM6CisJLy9jb25zb2xlCisJdm9pZAkJCQkJCQlTaG93Q29uc29sZSgpOworCXZvaWQJCQkJCQkJSGlkZUNvbnNvbGUoKTsKKwl2b2lkCQkJCQkJCUNsZWFyQ29uc29sZSgpOworCXZvaWQJCQkJCQkJUHJpbnRMaW5lQ29uc29sZShGWF9MUENXU1RSIHN0cmluZyk7CisKK3ByaXZhdGU6CisJSE1PRFVMRQkJCQkJCQltX2hNb2R1bGU7CisJQ1JlYWRlcl9BcHAqCQkJCQltX3BBcHA7CisKKwlGWF9CT09MCQkJCQkJCW1fYkluaXRpYWw7CisJQ0pTX0dsb2JhbERhdGEqCQkJCQltX3BHbG9iYWxEYXRhOworCUZYX0lOVDMyCQkJCQkJbV9uR2xvYmFsRGF0YUNvdW50OworCisJQ0pTX0NvbnNvbGVEbGcqCQkJCQltX3BDb25zb2xlOworfTsKKwogI2VuZGlmIC8vX0pTX01PRFVMRV9IXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L0pTX09iamVjdC5oIGIvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvSlNfT2JqZWN0LmgKaW5kZXggOGI5MWY4Yy4uZjIyZGE3NiAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvSlNfT2JqZWN0LmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvSlNfT2JqZWN0LmgKQEAgLTEsMjg4ICsxLDI4OCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfSlNfT0JKRUNUX0hfDQotI2RlZmluZSBfSlNfT0JKRUNUX0hfDQotDQotY2xhc3MgQ0pTX09iamVjdDsNCi1jbGFzcyBDSlNfVGltZXI7DQotY2xhc3MgQ0pTX0NvbnRleHQ7DQotDQotY2xhc3MgQ0pTX0VtYmVkT2JqIDogcHVibGljIENGWF9PYmplY3QNCi17DQotcHVibGljOg0KLQlDSlNfRW1iZWRPYmooQ0pTX09iamVjdCogcEpTT2JqZWN0KTsNCi0JdmlydHVhbCB+Q0pTX0VtYmVkT2JqKCk7DQotDQotCXZpcnR1YWwgdm9pZAkJCQlUaW1lclByb2MoQ0pTX1RpbWVyKiBwVGltZXIpe307DQotDQotCUNKU19UaW1lcioJCQkJCUJlZ2luVGltZXIoQ1BERkRvY19FbnZpcm9ubWVudCAqIHBBcHAsIEZYX1VJTlQgbkVsYXBzZSk7DQotCXZvaWQJCQkJCQlFbmRUaW1lcihDSlNfVGltZXIqIHBUaW1lcik7DQotDQotCUNKU19PYmplY3QqCQkJCQlHZXRKU09iamVjdCgpe3JldHVybiBtX3BKU09iamVjdDt9Ow0KLQlvcGVyYXRvcgkJCQkJQ0pTX09iamVjdCogKCl7cmV0dXJuIG1fcEpTT2JqZWN0O307DQotDQotCUNQREZTREtfUGFnZVZpZXcgKgkJCUpTR2V0UGFnZVZpZXcoSUZYSlNfQ29udGV4dCogY2MpOw0KLQlpbnQJCQkJCQkJTXNnQm94KENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfTFBDV1NUUiBzd01zZywgRlhfTFBDV1NUUiBzd1RpdGxlID0gTlVMTCwgRlhfVUlOVCBuVHlwZSA9IDAsIEZYX1VJTlQgbkljb24gPSAwKTsNCi0Jdm9pZAkJCQkJCUFsZXJ0KENKU19Db250ZXh0KiBwQ29udGV4dCwgRlhfTFBDV1NUUiBzd01zZyk7DQotCUZYX0JPT0wJCQkJCQlJc1NhZmVNb2RlKElGWEpTX0NvbnRleHQqIGNjKTsNCi0NCi1wcm90ZWN0ZWQ6DQotDQotCUNKU19PYmplY3QqCQkJCQltX3BKU09iamVjdDsNCi19Ow0KLQ0KLWNsYXNzIENKU19PYmplY3QgOiBwdWJsaWMgQ0ZYX09iamVjdA0KLXsNCi1wdWJsaWM6DQotCUNKU19PYmplY3QoSlNGWE9iamVjdCBwT2JqZWN0KTsNCi0JdmlydHVhbCB+Q0pTX09iamVjdCh2b2lkKTsNCi0JDQotCXZvaWQJCQkJCQlNYWtlV2VhaygpOw0KLQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJSXNUeXBlKEZYX0xQQ1NUUiBzQ2xhc3NOYW1lKXtyZXR1cm4gVFJVRTt9Ow0KLQl2aXJ0dWFsIENGWF9CeXRlU3RyaW5nCQlHZXRDbGFzc05hbWUoKXtyZXR1cm4gIiI7fTsNCi0NCi0JdmlydHVhbCBGWF9CT09MCQkJCUluaXRJbnN0YW5jZShJRlhKU19Db250ZXh0KiBjYyl7cmV0dXJuIFRSVUU7fTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCUV4aXRJbnN0YW5jZSgpe3JldHVybiBUUlVFO307DQotDQotCW9wZXJhdG9yCQkJCQlKU0ZYT2JqZWN0ICgpIHtyZXR1cm4gdjg6OkxvY2FsPHY4OjpPYmplY3Q+OjpOZXcobV9wSXNvbGF0ZSwgbV9wT2JqZWN0KTt9DQotCW9wZXJhdG9yCQkJCQlDSlNfRW1iZWRPYmoqICgpe3JldHVybiBtX3BFbWJlZE9iajt9Ow0KLQ0KLQl2b2lkCQkJCQkJU2V0RW1iZWRPYmplY3QoQ0pTX0VtYmVkT2JqKiBwT2JqKXttX3BFbWJlZE9iaiA9IHBPYmo7fTsNCi0JQ0pTX0VtYmVkT2JqICoJCQkJR2V0RW1iZWRPYmplY3QoKXtyZXR1cm4gbV9wRW1iZWRPYmo7fTsNCi0NCi0Jc3RhdGljIENQREZTREtfUGFnZVZpZXcgKglKU0dldFBhZ2VWaWV3KElGWEpTX0NvbnRleHQqIGNjKTsNCi0Jc3RhdGljIGludAkJCQkJTXNnQm94KENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfTFBDV1NUUiBzd01zZywgRlhfTFBDV1NUUiBzd1RpdGxlID0gTlVMTCwgRlhfVUlOVCBuVHlwZSA9IDAsRlhfVUlOVCBuSWNvbiA9IDApOw0KLQlzdGF0aWMgdm9pZAkJCQkJQWxlcnQoQ0pTX0NvbnRleHQqIHBDb250ZXh0LCBGWF9MUENXU1RSIHN3TXNnKTsNCi0NCi0Jdjg6Oklzb2xhdGUqCQkJCQlHZXRJc29sYXRlKCkge3JldHVybiBtX3BJc29sYXRlO30NCi1wcm90ZWN0ZWQ6DQotCUNKU19FbWJlZE9iaiAqCQkJCW1fcEVtYmVkT2JqOw0KLQl2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PgkJCW1fcE9iamVjdDsNCi0Jdjg6Oklzb2xhdGUqCQkJCQltX3BJc29sYXRlOw0KLX07DQotDQotc3RydWN0IEpTX1RJTUVSX01BUA0KLXsNCi0JRlhfVUlOVCBuSUQ7DQotCUNKU19UaW1lciAqIHBUaW1lcjsNCi19Ow0KLQ0KLXR5cGVkZWYgQ0ZYX0FycmF5VGVtcGxhdGU8SlNfVElNRVJfTUFQKj4JQ1RpbWVyTWFwQXJyYXk7DQotDQotc3RydWN0IEpTX1RJTUVSX01BUEFSUkFZDQotew0KLXB1YmxpYzoNCi0JSlNfVElNRVJfTUFQQVJSQVkoKQ0KLQl7DQotCX0NCi0NCi0JfkpTX1RJTUVSX01BUEFSUkFZKCkNCi0Jew0KLQkJUmVzZXQoKTsNCi0JfQ0KLQ0KLQl2b2lkIFJlc2V0KCkNCi0Jew0KLQkJZm9yIChpbnQgaT0wLHN6PW1fQXJyYXkuR2V0U2l6ZSgpOyBpPHN6OyBpKyspDQotCQkJZGVsZXRlIG1fQXJyYXkuR2V0QXQoaSk7DQotDQotCQltX0FycmF5LlJlbW92ZUFsbCgpOw0KLQl9DQotDQotCXZvaWQgU2V0QXQoRlhfVUlOVCBuSW5kZXgsQ0pTX1RpbWVyICogcFRpbWVyKQ0KLQl7DQotCQlpbnQgaSA9IEZpbmQobkluZGV4KTsNCi0NCi0JCWlmIChpPj0wKQ0KLQkJew0KLQkJCWlmIChKU19USU1FUl9NQVAgKiBwTWFwID0gbV9BcnJheS5HZXRBdChpKSkNCi0JCQkJcE1hcC0+cFRpbWVyID0gcFRpbWVyOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCWlmIChKU19USU1FUl9NQVAgKiBwTWFwID0gbmV3IEpTX1RJTUVSX01BUCkNCi0JCQl7DQotCQkJCXBNYXAtPm5JRCA9IG5JbmRleDsNCi0JCQkJcE1hcC0+cFRpbWVyID0gcFRpbWVyOw0KLQkJCQltX0FycmF5LkFkZChwTWFwKTsNCi0JCQl9DQotCQl9DQotCX0NCi0NCi0JQ0pTX1RpbWVyICogR2V0QXQoRlhfVUlOVCBuSW5kZXgpDQotCXsNCi0JCWludCBpID0gRmluZChuSW5kZXgpOw0KLQ0KLQkJaWYgKGk+PTApDQotCQl7DQotCQkJaWYgKEpTX1RJTUVSX01BUCAqIHBNYXAgPSBtX0FycmF5LkdldEF0KGkpKQ0KLQkJCQlyZXR1cm4gcE1hcC0+cFRpbWVyOw0KLQkJfQ0KLQkJcmV0dXJuIE5VTEw7DQotCX0NCi0NCi0Jdm9pZCBSZW1vdmVBdChGWF9VSU5UIG5JbmRleCkNCi0Jew0KLQkJaW50IGkgPSBGaW5kKG5JbmRleCk7DQotDQotCQlpZiAoaT49MCkNCi0JCXsNCi0JCQlkZWxldGUgbV9BcnJheS5HZXRBdChpKTsNCi0JCQltX0FycmF5LlJlbW92ZUF0KGkpOw0KLQkJfQ0KLQkJLy9UbyBwcmV2ZW50IHBvdGVudGlhbCBmYWtlIG1lbW9yeSBsZWFrIHJlcG9ydGVkIGJ5IHZjNi4NCi0JCWlmKG1fQXJyYXkuR2V0U2l6ZSgpID09IDApDQotCQkJbV9BcnJheS5SZW1vdmVBbGwoKTsNCi0JfQ0KLQ0KLQlpbnQgRmluZChGWF9VSU5UIG5JbmRleCkNCi0JewkJDQotCQlmb3IgKGludCBpPTAsc3o9bV9BcnJheS5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0JCXsJCQkNCi0JCQlpZiAoSlNfVElNRVJfTUFQICogcE1hcCA9IG1fQXJyYXkuR2V0QXQoaSkpDQotCQkJew0KLQkJCQlpZiAocE1hcC0+bklEID09IG5JbmRleCkNCi0JCQkJCXJldHVybiBpOw0KLQkJCX0NCi0JCX0NCi0NCi0JCXJldHVybiAtMTsNCi0JfQ0KLQ0KLQlDVGltZXJNYXBBcnJheQkJbV9BcnJheTsNCi19Ow0KLQ0KLXN0YXRpYyBKU19USU1FUl9NQVBBUlJBWQltX3NUaW1lTWFwOw0KLQ0KLWNsYXNzIENKU19SdW50aW1lOw0KLQ0KLWNsYXNzIENKU19UaW1lcg0KLXsNCi1wdWJsaWM6DQotCUNKU19UaW1lcihDSlNfRW1iZWRPYmogKiBwT2JqLENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHApOiBtX3BFbWJlZE9iaihwT2JqKSwgDQotCQltX25UaW1lcklEKDApLCANCi0JCW1fYlByb2Nlc3NpbmcoRkFMU0UpLA0KLQkJbV9kd1N0YXJ0VGltZSgwKSwNCi0JCW1fZHdUaW1lT3V0KDApLA0KLQkJbV9kd0VsYXBzZSgwKSwNCi0JCW1fcFJ1bnRpbWUoTlVMTCksDQotCQltX25UeXBlKDApLA0KLQkJbV9wQXBwKHBBcHApDQotCXsNCi0JfQ0KLQkNCi0JdmlydHVhbCB+Q0pTX1RpbWVyKCkNCi0Jew0KLQkJS2lsbEpTVGltZXIoKTsNCi0JfQ0KLQ0KLXB1YmxpYzoNCi0JRlhfVUlOVCBTZXRKU1RpbWVyKEZYX1VJTlQgbkVsYXBzZSkNCi0JewkNCi0JCWlmIChtX25UaW1lcklEKUtpbGxKU1RpbWVyKCk7DQotCQlJRlhfU3lzdGVtSGFuZGxlciogcEhhbmRsZXIgPSBtX3BBcHAtPkdldFN5c0hhbmRsZXIoKTsNCi0JCW1fblRpbWVySUQgPSBwSGFuZGxlci0+U2V0VGltZXIobkVsYXBzZSxUaW1lclByb2MpOw0KLQkJbV9zVGltZU1hcC5TZXRBdChtX25UaW1lcklELHRoaXMpOw0KLQkJbV9kd0VsYXBzZSA9IG5FbGFwc2U7DQotCQlyZXR1cm4gbV9uVGltZXJJRDsNCi0JfTsNCi0NCi0Jdm9pZCBLaWxsSlNUaW1lcigpDQotCXsNCi0JCWlmIChtX25UaW1lcklEKQ0KLQkJew0KLQkJCUlGWF9TeXN0ZW1IYW5kbGVyKiBwSGFuZGxlciA9IG1fcEFwcC0+R2V0U3lzSGFuZGxlcigpOw0KLQkJCXBIYW5kbGVyLT5LaWxsVGltZXIobV9uVGltZXJJRCk7DQotCQkJbV9zVGltZU1hcC5SZW1vdmVBdChtX25UaW1lcklEKTsNCi0JCQltX25UaW1lcklEID0gMDsNCi0JCX0NCi0JfTsNCi0NCi0Jdm9pZCBTZXRUeXBlKGludCBuVHlwZSkNCi0Jew0KLQkJbV9uVHlwZSA9IG5UeXBlOw0KLQl9DQotDQotCWludCBHZXRUeXBlKCkgY29uc3QNCi0Jew0KLQkJcmV0dXJuIG1fblR5cGU7DQotCX0NCi0NCi0Jdm9pZCBTZXRTdGFydFRpbWUoRlhfRFdPUkQgZHdTdGFydFRpbWUpDQotCXsNCi0JCW1fZHdTdGFydFRpbWUgPSBkd1N0YXJ0VGltZTsNCi0JfQ0KLQ0KLQlGWF9EV09SRCBHZXRTdGFydFRpbWUoKSBjb25zdA0KLQl7DQotCQlyZXR1cm4gbV9kd1N0YXJ0VGltZTsNCi0JfQ0KLQ0KLQl2b2lkIFNldFRpbWVPdXQoRlhfRFdPUkQgZHdUaW1lT3V0KQ0KLQl7DQotCQltX2R3VGltZU91dCA9IGR3VGltZU91dDsNCi0JfQ0KLQ0KLQlGWF9EV09SRCBHZXRUaW1lT3V0KCkgY29uc3QNCi0Jew0KLQkJcmV0dXJuIG1fZHdUaW1lT3V0Ow0KLQl9DQotDQotCXZvaWQgU2V0UnVudGltZShDSlNfUnVudGltZSogcFJ1bnRpbWUpDQotCXsNCi0JCW1fcFJ1bnRpbWUgPSBwUnVudGltZTsNCi0JfQ0KLQkNCi0JQ0pTX1J1bnRpbWUqIEdldFJ1bnRpbWUoKSBjb25zdA0KLQl7DQotCQlyZXR1cm4gbV9wUnVudGltZTsNCi0JfQ0KLQ0KLQl2b2lkIFNldEpTY3JpcHQoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNjcmlwdCkNCi0Jew0KLQkJbV9zd0pTY3JpcHQgPSBzY3JpcHQ7DQotCX0NCi0NCi0JQ0ZYX1dpZGVTdHJpbmcgR2V0SlNjcmlwdCgpIGNvbnN0DQotCXsNCi0JCXJldHVybiBtX3N3SlNjcmlwdDsNCi0JfQ0KLQ0KLQlzdGF0aWMgdm9pZCBUaW1lclByb2MoaW50IGlkRXZlbnQpDQotCXsNCi0JCWlmIChDSlNfVGltZXIgKiBwVGltZXIgPSBtX3NUaW1lTWFwLkdldEF0KGlkRXZlbnQpKQ0KLQkJew0KLQkJCWlmICghcFRpbWVyLT5tX2JQcm9jZXNzaW5nKQ0KLQkJCXsNCi0JCQkJcFRpbWVyLT5tX2JQcm9jZXNzaW5nID0gVFJVRTsNCi0JCQkJaWYgKHBUaW1lci0+bV9wRW1iZWRPYmopIHBUaW1lci0+bV9wRW1iZWRPYmotPlRpbWVyUHJvYyhwVGltZXIpOw0KLQkJCQlwVGltZXItPm1fYlByb2Nlc3NpbmcgPSBGQUxTRTsNCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkvLwlUUkFDRShMIkJVU1khXG4iKTsNCi0JCQl9DQotCQl9DQotCX07DQotDQotcHJpdmF0ZToNCi0JRlhfVUlOVAkJCQkJCQltX25UaW1lcklEOwkNCi0JQ0pTX0VtYmVkT2JqKgkJCQkJbV9wRW1iZWRPYmo7DQotCUZYX0JPT0wJCQkJCQkJbV9iUHJvY2Vzc2luZzsNCi0NCi0JLy9kYXRhDQotCUZYX0RXT1JECQkJCQkJCW1fZHdTdGFydFRpbWU7DQotCUZYX0RXT1JECQkJCQkJCW1fZHdUaW1lT3V0Ow0KLQlGWF9EV09SRAkJCQkJCW1fZHdFbGFwc2U7DQotCUNKU19SdW50aW1lKgkJCQkJbV9wUnVudGltZTsNCi0JQ0ZYX1dpZGVTdHJpbmcJCQkJCW1fc3dKU2NyaXB0Ow0KLQlpbnQJCQkJCQkJCW1fblR5cGU7IC8vMDpJbnRlcnZhbDsgMTpUaW1lT3V0DQotDQotCUNQREZEb2NfRW52aXJvbm1lbnQqCQkJbV9wQXBwOw0KLX07DQotI2VuZGlmIC8vX0pTX09CSkVDVF9IXw0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0pTX09CSkVDVF9IXworI2RlZmluZSBfSlNfT0JKRUNUX0hfCisKK2NsYXNzIENKU19PYmplY3Q7CitjbGFzcyBDSlNfVGltZXI7CitjbGFzcyBDSlNfQ29udGV4dDsKKworY2xhc3MgQ0pTX0VtYmVkT2JqIDogcHVibGljIENGWF9PYmplY3QKK3sKK3B1YmxpYzoKKwlDSlNfRW1iZWRPYmooQ0pTX09iamVjdCogcEpTT2JqZWN0KTsKKwl2aXJ0dWFsIH5DSlNfRW1iZWRPYmooKTsKKworCXZpcnR1YWwgdm9pZAkJCQlUaW1lclByb2MoQ0pTX1RpbWVyKiBwVGltZXIpe307CisKKwlDSlNfVGltZXIqCQkJCQlCZWdpblRpbWVyKENQREZEb2NfRW52aXJvbm1lbnQgKiBwQXBwLCBGWF9VSU5UIG5FbGFwc2UpOworCXZvaWQJCQkJCQlFbmRUaW1lcihDSlNfVGltZXIqIHBUaW1lcik7CisKKwlDSlNfT2JqZWN0KgkJCQkJR2V0SlNPYmplY3QoKXtyZXR1cm4gbV9wSlNPYmplY3Q7fTsKKwlvcGVyYXRvcgkJCQkJQ0pTX09iamVjdCogKCl7cmV0dXJuIG1fcEpTT2JqZWN0O307CisKKwlDUERGU0RLX1BhZ2VWaWV3ICoJCQlKU0dldFBhZ2VWaWV3KElGWEpTX0NvbnRleHQqIGNjKTsKKwlpbnQJCQkJCQkJTXNnQm94KENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfTFBDV1NUUiBzd01zZywgRlhfTFBDV1NUUiBzd1RpdGxlID0gTlVMTCwgRlhfVUlOVCBuVHlwZSA9IDAsIEZYX1VJTlQgbkljb24gPSAwKTsKKwl2b2lkCQkJCQkJQWxlcnQoQ0pTX0NvbnRleHQqIHBDb250ZXh0LCBGWF9MUENXU1RSIHN3TXNnKTsKKwlGWF9CT09MCQkJCQkJSXNTYWZlTW9kZShJRlhKU19Db250ZXh0KiBjYyk7CisKK3Byb3RlY3RlZDoKKworCUNKU19PYmplY3QqCQkJCQltX3BKU09iamVjdDsKK307CisKK2NsYXNzIENKU19PYmplY3QgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCUNKU19PYmplY3QoSlNGWE9iamVjdCBwT2JqZWN0KTsKKwl2aXJ0dWFsIH5DSlNfT2JqZWN0KHZvaWQpOworCQorCXZvaWQJCQkJCQlNYWtlV2VhaygpOworCisJdmlydHVhbCBGWF9CT09MCQkJCUlzVHlwZShGWF9MUENTVFIgc0NsYXNzTmFtZSl7cmV0dXJuIFRSVUU7fTsKKwl2aXJ0dWFsIENGWF9CeXRlU3RyaW5nCQlHZXRDbGFzc05hbWUoKXtyZXR1cm4gIiI7fTsKKworCXZpcnR1YWwgRlhfQk9PTAkJCQlJbml0SW5zdGFuY2UoSUZYSlNfQ29udGV4dCogY2Mpe3JldHVybiBUUlVFO307CisJdmlydHVhbCBGWF9CT09MCQkJCUV4aXRJbnN0YW5jZSgpe3JldHVybiBUUlVFO307CisKKwlvcGVyYXRvcgkJCQkJSlNGWE9iamVjdCAoKSB7cmV0dXJuIHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6TmV3KG1fcElzb2xhdGUsIG1fcE9iamVjdCk7fQorCW9wZXJhdG9yCQkJCQlDSlNfRW1iZWRPYmoqICgpe3JldHVybiBtX3BFbWJlZE9iajt9OworCisJdm9pZAkJCQkJCVNldEVtYmVkT2JqZWN0KENKU19FbWJlZE9iaiogcE9iail7bV9wRW1iZWRPYmogPSBwT2JqO307CisJQ0pTX0VtYmVkT2JqICoJCQkJR2V0RW1iZWRPYmplY3QoKXtyZXR1cm4gbV9wRW1iZWRPYmo7fTsKKworCXN0YXRpYyBDUERGU0RLX1BhZ2VWaWV3ICoJSlNHZXRQYWdlVmlldyhJRlhKU19Db250ZXh0KiBjYyk7CisJc3RhdGljIGludAkJCQkJTXNnQm94KENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfTFBDV1NUUiBzd01zZywgRlhfTFBDV1NUUiBzd1RpdGxlID0gTlVMTCwgRlhfVUlOVCBuVHlwZSA9IDAsRlhfVUlOVCBuSWNvbiA9IDApOworCXN0YXRpYyB2b2lkCQkJCQlBbGVydChDSlNfQ29udGV4dCogcENvbnRleHQsIEZYX0xQQ1dTVFIgc3dNc2cpOworCisJdjg6Oklzb2xhdGUqCQkJCQlHZXRJc29sYXRlKCkge3JldHVybiBtX3BJc29sYXRlO30KK3Byb3RlY3RlZDoKKwlDSlNfRW1iZWRPYmogKgkJCQltX3BFbWJlZE9iajsKKwl2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PgkJCW1fcE9iamVjdDsKKwl2ODo6SXNvbGF0ZSoJCQkJCW1fcElzb2xhdGU7Cit9OworCitzdHJ1Y3QgSlNfVElNRVJfTUFQCit7CisJRlhfVUlOVCBuSUQ7CisJQ0pTX1RpbWVyICogcFRpbWVyOworfTsKKwordHlwZWRlZiBDRlhfQXJyYXlUZW1wbGF0ZTxKU19USU1FUl9NQVAqPglDVGltZXJNYXBBcnJheTsKKworc3RydWN0IEpTX1RJTUVSX01BUEFSUkFZCit7CitwdWJsaWM6CisJSlNfVElNRVJfTUFQQVJSQVkoKQorCXsKKwl9CisKKwl+SlNfVElNRVJfTUFQQVJSQVkoKQorCXsKKwkJUmVzZXQoKTsKKwl9CisKKwl2b2lkIFJlc2V0KCkKKwl7CisJCWZvciAoaW50IGk9MCxzej1tX0FycmF5LkdldFNpemUoKTsgaTxzejsgaSsrKQorCQkJZGVsZXRlIG1fQXJyYXkuR2V0QXQoaSk7CisKKwkJbV9BcnJheS5SZW1vdmVBbGwoKTsKKwl9CisKKwl2b2lkIFNldEF0KEZYX1VJTlQgbkluZGV4LENKU19UaW1lciAqIHBUaW1lcikKKwl7CisJCWludCBpID0gRmluZChuSW5kZXgpOworCisJCWlmIChpPj0wKQorCQl7CisJCQlpZiAoSlNfVElNRVJfTUFQICogcE1hcCA9IG1fQXJyYXkuR2V0QXQoaSkpCisJCQkJcE1hcC0+cFRpbWVyID0gcFRpbWVyOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKEpTX1RJTUVSX01BUCAqIHBNYXAgPSBuZXcgSlNfVElNRVJfTUFQKQorCQkJeworCQkJCXBNYXAtPm5JRCA9IG5JbmRleDsKKwkJCQlwTWFwLT5wVGltZXIgPSBwVGltZXI7CisJCQkJbV9BcnJheS5BZGQocE1hcCk7CisJCQl9CisJCX0KKwl9CisKKwlDSlNfVGltZXIgKiBHZXRBdChGWF9VSU5UIG5JbmRleCkKKwl7CisJCWludCBpID0gRmluZChuSW5kZXgpOworCisJCWlmIChpPj0wKQorCQl7CisJCQlpZiAoSlNfVElNRVJfTUFQICogcE1hcCA9IG1fQXJyYXkuR2V0QXQoaSkpCisJCQkJcmV0dXJuIHBNYXAtPnBUaW1lcjsKKwkJfQorCQlyZXR1cm4gTlVMTDsKKwl9CisKKwl2b2lkIFJlbW92ZUF0KEZYX1VJTlQgbkluZGV4KQorCXsKKwkJaW50IGkgPSBGaW5kKG5JbmRleCk7CisKKwkJaWYgKGk+PTApCisJCXsKKwkJCWRlbGV0ZSBtX0FycmF5LkdldEF0KGkpOworCQkJbV9BcnJheS5SZW1vdmVBdChpKTsKKwkJfQorCQkvL1RvIHByZXZlbnQgcG90ZW50aWFsIGZha2UgbWVtb3J5IGxlYWsgcmVwb3J0ZWQgYnkgdmM2LgorCQlpZihtX0FycmF5LkdldFNpemUoKSA9PSAwKQorCQkJbV9BcnJheS5SZW1vdmVBbGwoKTsKKwl9CisKKwlpbnQgRmluZChGWF9VSU5UIG5JbmRleCkKKwl7CQkKKwkJZm9yIChpbnQgaT0wLHN6PW1fQXJyYXkuR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJCXsJCQkKKwkJCWlmIChKU19USU1FUl9NQVAgKiBwTWFwID0gbV9BcnJheS5HZXRBdChpKSkKKwkJCXsKKwkJCQlpZiAocE1hcC0+bklEID09IG5JbmRleCkKKwkJCQkJcmV0dXJuIGk7CisJCQl9CisJCX0KKworCQlyZXR1cm4gLTE7CisJfQorCisJQ1RpbWVyTWFwQXJyYXkJCW1fQXJyYXk7Cit9OworCitzdGF0aWMgSlNfVElNRVJfTUFQQVJSQVkJbV9zVGltZU1hcDsKKworY2xhc3MgQ0pTX1J1bnRpbWU7CisKK2NsYXNzIENKU19UaW1lcgoreworcHVibGljOgorCUNKU19UaW1lcihDSlNfRW1iZWRPYmogKiBwT2JqLENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHApOiBtX3BFbWJlZE9iaihwT2JqKSwgCisJCW1fblRpbWVySUQoMCksIAorCQltX2JQcm9jZXNzaW5nKEZBTFNFKSwKKwkJbV9kd1N0YXJ0VGltZSgwKSwKKwkJbV9kd1RpbWVPdXQoMCksCisJCW1fZHdFbGFwc2UoMCksCisJCW1fcFJ1bnRpbWUoTlVMTCksCisJCW1fblR5cGUoMCksCisJCW1fcEFwcChwQXBwKQorCXsKKwl9CisJCisJdmlydHVhbCB+Q0pTX1RpbWVyKCkKKwl7CisJCUtpbGxKU1RpbWVyKCk7CisJfQorCitwdWJsaWM6CisJRlhfVUlOVCBTZXRKU1RpbWVyKEZYX1VJTlQgbkVsYXBzZSkKKwl7CQorCQlpZiAobV9uVGltZXJJRClLaWxsSlNUaW1lcigpOworCQlJRlhfU3lzdGVtSGFuZGxlciogcEhhbmRsZXIgPSBtX3BBcHAtPkdldFN5c0hhbmRsZXIoKTsKKwkJbV9uVGltZXJJRCA9IHBIYW5kbGVyLT5TZXRUaW1lcihuRWxhcHNlLFRpbWVyUHJvYyk7CisJCW1fc1RpbWVNYXAuU2V0QXQobV9uVGltZXJJRCx0aGlzKTsKKwkJbV9kd0VsYXBzZSA9IG5FbGFwc2U7CisJCXJldHVybiBtX25UaW1lcklEOworCX07CisKKwl2b2lkIEtpbGxKU1RpbWVyKCkKKwl7CisJCWlmIChtX25UaW1lcklEKQorCQl7CisJCQlJRlhfU3lzdGVtSGFuZGxlciogcEhhbmRsZXIgPSBtX3BBcHAtPkdldFN5c0hhbmRsZXIoKTsKKwkJCXBIYW5kbGVyLT5LaWxsVGltZXIobV9uVGltZXJJRCk7CisJCQltX3NUaW1lTWFwLlJlbW92ZUF0KG1fblRpbWVySUQpOworCQkJbV9uVGltZXJJRCA9IDA7CisJCX0KKwl9OworCisJdm9pZCBTZXRUeXBlKGludCBuVHlwZSkKKwl7CisJCW1fblR5cGUgPSBuVHlwZTsKKwl9CisKKwlpbnQgR2V0VHlwZSgpIGNvbnN0CisJeworCQlyZXR1cm4gbV9uVHlwZTsKKwl9CisKKwl2b2lkIFNldFN0YXJ0VGltZShGWF9EV09SRCBkd1N0YXJ0VGltZSkKKwl7CisJCW1fZHdTdGFydFRpbWUgPSBkd1N0YXJ0VGltZTsKKwl9CisKKwlGWF9EV09SRCBHZXRTdGFydFRpbWUoKSBjb25zdAorCXsKKwkJcmV0dXJuIG1fZHdTdGFydFRpbWU7CisJfQorCisJdm9pZCBTZXRUaW1lT3V0KEZYX0RXT1JEIGR3VGltZU91dCkKKwl7CisJCW1fZHdUaW1lT3V0ID0gZHdUaW1lT3V0OworCX0KKworCUZYX0RXT1JEIEdldFRpbWVPdXQoKSBjb25zdAorCXsKKwkJcmV0dXJuIG1fZHdUaW1lT3V0OworCX0KKworCXZvaWQgU2V0UnVudGltZShDSlNfUnVudGltZSogcFJ1bnRpbWUpCisJeworCQltX3BSdW50aW1lID0gcFJ1bnRpbWU7CisJfQorCQorCUNKU19SdW50aW1lKiBHZXRSdW50aW1lKCkgY29uc3QKKwl7CisJCXJldHVybiBtX3BSdW50aW1lOworCX0KKworCXZvaWQgU2V0SlNjcmlwdChjb25zdCBDRlhfV2lkZVN0cmluZyYgc2NyaXB0KQorCXsKKwkJbV9zd0pTY3JpcHQgPSBzY3JpcHQ7CisJfQorCisJQ0ZYX1dpZGVTdHJpbmcgR2V0SlNjcmlwdCgpIGNvbnN0CisJeworCQlyZXR1cm4gbV9zd0pTY3JpcHQ7CisJfQorCisJc3RhdGljIHZvaWQgVGltZXJQcm9jKGludCBpZEV2ZW50KQorCXsKKwkJaWYgKENKU19UaW1lciAqIHBUaW1lciA9IG1fc1RpbWVNYXAuR2V0QXQoaWRFdmVudCkpCisJCXsKKwkJCWlmICghcFRpbWVyLT5tX2JQcm9jZXNzaW5nKQorCQkJeworCQkJCXBUaW1lci0+bV9iUHJvY2Vzc2luZyA9IFRSVUU7CisJCQkJaWYgKHBUaW1lci0+bV9wRW1iZWRPYmopIHBUaW1lci0+bV9wRW1iZWRPYmotPlRpbWVyUHJvYyhwVGltZXIpOworCQkJCXBUaW1lci0+bV9iUHJvY2Vzc2luZyA9IEZBTFNFOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJLy8JVFJBQ0UoTCJCVVNZIVxuIik7CisJCQl9CisJCX0KKwl9OworCitwcml2YXRlOgorCUZYX1VJTlQJCQkJCQkJbV9uVGltZXJJRDsJCisJQ0pTX0VtYmVkT2JqKgkJCQkJbV9wRW1iZWRPYmo7CisJRlhfQk9PTAkJCQkJCQltX2JQcm9jZXNzaW5nOworCisJLy9kYXRhCisJRlhfRFdPUkQJCQkJCQkJbV9kd1N0YXJ0VGltZTsKKwlGWF9EV09SRAkJCQkJCQltX2R3VGltZU91dDsKKwlGWF9EV09SRAkJCQkJCW1fZHdFbGFwc2U7CisJQ0pTX1J1bnRpbWUqCQkJCQltX3BSdW50aW1lOworCUNGWF9XaWRlU3RyaW5nCQkJCQltX3N3SlNjcmlwdDsKKwlpbnQJCQkJCQkJCW1fblR5cGU7IC8vMDpJbnRlcnZhbDsgMTpUaW1lT3V0CisKKwlDUERGRG9jX0Vudmlyb25tZW50KgkJCW1fcEFwcDsKK307CisjZW5kaWYgLy9fSlNfT0JKRUNUX0hfCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9KU19SdW50aW1lLmggYi9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9KU19SdW50aW1lLmgKaW5kZXggMzJmODQ1Ny4uMGExOTVmMSAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvSlNfUnVudGltZS5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1J1bnRpbWUuaApAQCAtMSw3MCArMSw3MCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfSlNfUlVOVElNRV9IXw0KLSNkZWZpbmUgX0pTX1JVTlRJTUVfSF8NCi0NCi1jbGFzcyBDSlNfRmllbGRFdmVudA0KLXsNCi1wdWJsaWM6DQotCUNGWF9XaWRlU3RyaW5nCQlzVGFyZ2V0TmFtZTsNCi0JSlNfRVZFTlRfVAkJCWVFdmVudFR5cGU7DQotCUNKU19GaWVsZEV2ZW50KgkJcE5leHQ7DQotfTsNCi0NCi1jbGFzcyBDSlNfUnVudGltZSA6IHB1YmxpYyBJRlhKU19SdW50aW1lDQotew0KLXB1YmxpYzoNCi0JQ0pTX1J1bnRpbWUoQ1BERkRvY19FbnZpcm9ubWVudCAqIHBBcHApOw0KLQl2aXJ0dWFsIH5DSlNfUnVudGltZSgpOw0KLQ0KLQl2aXJ0dWFsIElGWEpTX0NvbnRleHQgKgkJCQkJTmV3Q29udGV4dCgpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJUmVsZWFzZUNvbnRleHQoSUZYSlNfQ29udGV4dCAqIHBDb250ZXh0KTsNCi0JdmlydHVhbCBJRlhKU19Db250ZXh0KgkJCQkJR2V0Q3VycmVudENvbnRleHQoKTsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCQkJCVNldFJlYWRlckRvY3VtZW50KENQREZTREtfRG9jdW1lbnQgKnBSZWFkZXJEb2MpOw0KLQl2aXJ0dWFsIENQREZTREtfRG9jdW1lbnQgKgkJCQlHZXRSZWFkZXJEb2N1bWVudCgpe3JldHVybiBtX3BEb2N1bWVudDt9DQotDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlHZXRPYmplY3ROYW1lcyhDRlhfV2lkZVN0cmluZ0FycmF5JiBhcnJheSk7DQotCXZpcnR1YWwgdm9pZAkJCQkJCQlHZXRPYmplY3RDb25zdHMoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3T2JqTmFtZSwgQ0ZYX1dpZGVTdHJpbmdBcnJheSYgYXJyYXkpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJR2V0T2JqZWN0UHJvcHMoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3T2JqTmFtZSwgQ0ZYX1dpZGVTdHJpbmdBcnJheSYgYXJyYXkpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJR2V0T2JqZWN0TWV0aG9kcyhjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dPYmpOYW1lLCBDRlhfV2lkZVN0cmluZ0FycmF5JiBhcnJheSk7DQotDQotCXZpcnR1YWwgdm9pZAkJCQkJCQlFeGl0KCk7DQotCXZpcnR1YWwgdm9pZAkJCQkJCQlFbnRlcigpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJSXNFbnRlcmVkKCk7DQotDQotCUNQREZEb2NfRW52aXJvbm1lbnQgKgkJCQkJCQlHZXRSZWFkZXJBcHAoKXtyZXR1cm4gbV9wQXBwO30NCi0NCi0JRlhfQk9PTAkJCQkJCQkJCUluaXRKU09iamVjdHMoKTsNCi0NCi0JRlhfQk9PTAkJCQkJCQkJCUFkZEV2ZW50VG9Mb29wKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzVGFyZ2V0TmFtZSwgSlNfRVZFTlRfVCBlRXZlbnRUeXBlKTsNCi0Jdm9pZAkJCQkJCQkJCVJlbW92ZUV2ZW50SW5Mb29wKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzVGFyZ2V0TmFtZSwgSlNfRVZFTlRfVCBlRXZlbnRUeXBlKTsNCi0Jdm9pZAkJCQkJCQkJCVJlbW92ZUV2ZW50c0luTG9vcChDSlNfRmllbGRFdmVudCogcFN0YXJ0KTsNCi0NCi0Jdm9pZAkJCQkJCQkJCUJlZ2luQmxvY2soKXttX2JCbG9ja2luZyA9IFRSVUU7fQ0KLQl2b2lkCQkJCQkJCQkJRW5kQmxvY2soKXttX2JCbG9ja2luZyA9IEZBTFNFO30NCi0JRlhfQk9PTAkJCQkJCQkJCUlzQmxvY2tpbmcoKXtyZXR1cm4gbV9iQmxvY2tpbmc7fQ0KLQ0KLQlvcGVyYXRvcgkJCQkJCQkJSUpTX1J1bnRpbWUqKCkge3JldHVybiAoSUpTX1J1bnRpbWUqKW1faXNvbGF0ZTt9DQotCXY4OjpJc29sYXRlKgkJCQkJCQkJR2V0SXNvbGF0ZSgpe3JldHVybiBtX2lzb2xhdGU7fTsNCi0Jdm9pZAkJCQkJCQkJCVNldElzb2xhdGUodjg6Oklzb2xhdGUqIGlzb2xhdGUpe21faXNvbGF0ZSA9IGlzb2xhdGU7fQ0KLQ0KLQl2ODo6SGFuZGxlPHY4OjpDb250ZXh0PgkJCQkJCQlOZXdKU0NvbnRleHQoKTsNCi1wcm90ZWN0ZWQ6DQotCUNGWF9BcnJheVRlbXBsYXRlPENKU19Db250ZXh0ICo+CQltX0NvbnRleHRBcnJheTsNCi0JQ1BERkRvY19FbnZpcm9ubWVudCAqCQkJCQkJCW1fcEFwcDsNCi0JQ1BERlNES19Eb2N1bWVudCAqCQkJCQkJbV9wRG9jdW1lbnQ7DQotCUZYX0JPT0wJCQkJCQkJCQltX2JCbG9ja2luZzsNCi0JQ0pTX0ZpZWxkRXZlbnQqCQkJCQkJCW1fcEZpZWxkRXZlbnRQYXRoOw0KLQ0KLQl2ODo6SXNvbGF0ZSoJCQkJCQkJCW1faXNvbGF0ZTsNCi0Jdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+CQkJCQkJbV9jb250ZXh0Ow0KLQlGWF9CT09MCQkJCQkJCQkJbV9iUmVnaXN0ZXJlZDsNCi19Ow0KLQ0KLSNlbmRpZiAvL19KU19SVU5USU1FX0hfDQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfSlNfUlVOVElNRV9IXworI2RlZmluZSBfSlNfUlVOVElNRV9IXworCitjbGFzcyBDSlNfRmllbGRFdmVudAoreworcHVibGljOgorCUNGWF9XaWRlU3RyaW5nCQlzVGFyZ2V0TmFtZTsKKwlKU19FVkVOVF9UCQkJZUV2ZW50VHlwZTsKKwlDSlNfRmllbGRFdmVudCoJCXBOZXh0OworfTsKKworY2xhc3MgQ0pTX1J1bnRpbWUgOiBwdWJsaWMgSUZYSlNfUnVudGltZQoreworcHVibGljOgorCUNKU19SdW50aW1lKENQREZEb2NfRW52aXJvbm1lbnQgKiBwQXBwKTsKKwl2aXJ0dWFsIH5DSlNfUnVudGltZSgpOworCisJdmlydHVhbCBJRlhKU19Db250ZXh0ICoJCQkJCU5ld0NvbnRleHQoKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJUmVsZWFzZUNvbnRleHQoSUZYSlNfQ29udGV4dCAqIHBDb250ZXh0KTsKKwl2aXJ0dWFsIElGWEpTX0NvbnRleHQqCQkJCQlHZXRDdXJyZW50Q29udGV4dCgpOworCisJdmlydHVhbCB2b2lkCQkJCQkJCVNldFJlYWRlckRvY3VtZW50KENQREZTREtfRG9jdW1lbnQgKnBSZWFkZXJEb2MpOworCXZpcnR1YWwgQ1BERlNES19Eb2N1bWVudCAqCQkJCUdldFJlYWRlckRvY3VtZW50KCl7cmV0dXJuIG1fcERvY3VtZW50O30KKworCXZpcnR1YWwgdm9pZAkJCQkJCQlHZXRPYmplY3ROYW1lcyhDRlhfV2lkZVN0cmluZ0FycmF5JiBhcnJheSk7CisJdmlydHVhbCB2b2lkCQkJCQkJCUdldE9iamVjdENvbnN0cyhjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dPYmpOYW1lLCBDRlhfV2lkZVN0cmluZ0FycmF5JiBhcnJheSk7CisJdmlydHVhbCB2b2lkCQkJCQkJCUdldE9iamVjdFByb3BzKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd09iak5hbWUsIENGWF9XaWRlU3RyaW5nQXJyYXkmIGFycmF5KTsKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJR2V0T2JqZWN0TWV0aG9kcyhjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dPYmpOYW1lLCBDRlhfV2lkZVN0cmluZ0FycmF5JiBhcnJheSk7CisKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJRXhpdCgpOworCXZpcnR1YWwgdm9pZAkJCQkJCQlFbnRlcigpOworCXZpcnR1YWwgRlhfQk9PTAkJCQkJCQlJc0VudGVyZWQoKTsKKworCUNQREZEb2NfRW52aXJvbm1lbnQgKgkJCQkJCQlHZXRSZWFkZXJBcHAoKXtyZXR1cm4gbV9wQXBwO30KKworCUZYX0JPT0wJCQkJCQkJCQlJbml0SlNPYmplY3RzKCk7CisKKwlGWF9CT09MCQkJCQkJCQkJQWRkRXZlbnRUb0xvb3AoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNUYXJnZXROYW1lLCBKU19FVkVOVF9UIGVFdmVudFR5cGUpOworCXZvaWQJCQkJCQkJCQlSZW1vdmVFdmVudEluTG9vcChjb25zdCBDRlhfV2lkZVN0cmluZyYgc1RhcmdldE5hbWUsIEpTX0VWRU5UX1QgZUV2ZW50VHlwZSk7CisJdm9pZAkJCQkJCQkJCVJlbW92ZUV2ZW50c0luTG9vcChDSlNfRmllbGRFdmVudCogcFN0YXJ0KTsKKworCXZvaWQJCQkJCQkJCQlCZWdpbkJsb2NrKCl7bV9iQmxvY2tpbmcgPSBUUlVFO30KKwl2b2lkCQkJCQkJCQkJRW5kQmxvY2soKXttX2JCbG9ja2luZyA9IEZBTFNFO30KKwlGWF9CT09MCQkJCQkJCQkJSXNCbG9ja2luZygpe3JldHVybiBtX2JCbG9ja2luZzt9CisKKwlvcGVyYXRvcgkJCQkJCQkJSUpTX1J1bnRpbWUqKCkge3JldHVybiAoSUpTX1J1bnRpbWUqKW1faXNvbGF0ZTt9CisJdjg6Oklzb2xhdGUqCQkJCQkJCQlHZXRJc29sYXRlKCl7cmV0dXJuIG1faXNvbGF0ZTt9OworCXZvaWQJCQkJCQkJCQlTZXRJc29sYXRlKHY4OjpJc29sYXRlKiBpc29sYXRlKXttX2lzb2xhdGUgPSBpc29sYXRlO30KKworCXY4OjpIYW5kbGU8djg6OkNvbnRleHQ+CQkJCQkJCU5ld0pTQ29udGV4dCgpOworcHJvdGVjdGVkOgorCUNGWF9BcnJheVRlbXBsYXRlPENKU19Db250ZXh0ICo+CQltX0NvbnRleHRBcnJheTsKKwlDUERGRG9jX0Vudmlyb25tZW50ICoJCQkJCQkJbV9wQXBwOworCUNQREZTREtfRG9jdW1lbnQgKgkJCQkJCW1fcERvY3VtZW50OworCUZYX0JPT0wJCQkJCQkJCQltX2JCbG9ja2luZzsKKwlDSlNfRmllbGRFdmVudCoJCQkJCQkJbV9wRmllbGRFdmVudFBhdGg7CisKKwl2ODo6SXNvbGF0ZSoJCQkJCQkJCW1faXNvbGF0ZTsKKwl2ODo6UGVyc2lzdGVudDx2ODo6Q29udGV4dD4JCQkJCQltX2NvbnRleHQ7CisJRlhfQk9PTAkJCQkJCQkJCW1fYlJlZ2lzdGVyZWQ7Cit9OworCisjZW5kaWYgLy9fSlNfUlVOVElNRV9IXworCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9KU19WYWx1ZS5oIGIvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvSlNfVmFsdWUuaAppbmRleCBmODdmOWUxLi4wMzBjZGQ1IDEwMDY0NAotLS0gYS9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9KU19WYWx1ZS5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1ZhbHVlLmgKQEAgLTEsMTg2ICsxLDE4NiBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfSlNfVkFMVUVfSF8NCi0jZGVmaW5lIF9KU19WQUxVRV9IXw0KLQ0KLWNsYXNzIENKU19BcnJheTsNCi1jbGFzcyBDSlNfRGF0ZTsNCi0NCi1jbGFzcyBDSlNfVmFsdWUNCi17DQotcHVibGljOg0KLQlDSlNfVmFsdWUodjg6Oklzb2xhdGUqIGlzb2xhdGUpOw0KLQlDSlNfVmFsdWUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwVmFsdWUsRlhKU1ZBTFVFVFlQRSB0KTsNCi0JQ0pTX1ZhbHVlKHY4OjpJc29sYXRlKiBpc29sYXRlLCBjb25zdCBpbnQgJmlWYWx1ZSk7DQotCUNKU19WYWx1ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgY29uc3QgZG91YmxlICZkVmFsdWUpOw0KLQlDSlNfVmFsdWUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIGNvbnN0IGZsb2F0ICZmVmFsdWUpOwkNCi0JQ0pTX1ZhbHVlKHY4OjpJc29sYXRlKiBpc29sYXRlLCBjb25zdCBib29sICZiVmFsdWUpOw0KLQlDSlNfVmFsdWUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIEpTRlhPYmplY3QpOw0KLQlDSlNfVmFsdWUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIENKU19PYmplY3QgKik7DQotCUNKU19WYWx1ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgRlhfTFBDU1RSIHBTdHIpOw0KLQlDSlNfVmFsdWUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIEZYX0xQQ1dTVFIgcFdzdHIpOw0KLQlDSlNfVmFsdWUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIENKU19BcnJheSYgYXJyYXkpOw0KLQkNCi0JfkNKU19WYWx1ZSgpOw0KLQ0KLQl2b2lkIFNldE51bGwoKTsNCi0gICAgdm9pZCBBdHRhY2godjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBWYWx1ZSxGWEpTVkFMVUVUWVBFIHQpOw0KLQl2b2lkIEF0dGFjaChDSlNfVmFsdWUgKnBWYWx1ZSk7DQotCXZvaWQgRGV0YWNoKCk7DQotDQotDQotCW9wZXJhdG9yIGludCgpIGNvbnN0Ow0KLQlvcGVyYXRvciBib29sKCkgY29uc3Q7DQotCW9wZXJhdG9yIGRvdWJsZSgpIGNvbnN0Ow0KLQlvcGVyYXRvciBmbG9hdCgpIGNvbnN0Ow0KLQlvcGVyYXRvciBDSlNfT2JqZWN0ICooKSBjb25zdDsNCi0JLy9vcGVyYXRvciBKU0ZYT2JqZWN0ICooKSBjb25zdDsNCi0Jb3BlcmF0b3Igdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpIGNvbnN0Ow0KLQlvcGVyYXRvciB2ODo6SGFuZGxlPHY4OjpBcnJheT4oKSBjb25zdDsNCi0Jb3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKSBjb25zdDsNCi0JLy9vcGVyYXRvciBGWF9XQ0hBUiAqKCkgY29uc3Q7DQotCW9wZXJhdG9yIENGWF9CeXRlU3RyaW5nKCkgY29uc3Q7DQotCXY4OjpIYW5kbGU8djg6OlZhbHVlPiBUb0pTVmFsdWUoKTsNCi0NCi0Jdm9pZCBvcGVyYXRvciA9IChpbnQgaVZhbHVlKTsNCi0Jdm9pZCBvcGVyYXRvciA9IChib29sIGJWYWx1ZSk7CQ0KLQl2b2lkIG9wZXJhdG9yID0gKGRvdWJsZSk7CQ0KLQl2b2lkIG9wZXJhdG9yID0gKGZsb2F0KTsJDQotCXZvaWQgb3BlcmF0b3IgPSAoQ0pTX09iamVjdCAqKTsJDQotCXZvaWQgb3BlcmF0b3IgPSAodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7DQotLy8Jdm9pZCBvcGVyYXRvciA9IChKU09iamVjdCAqKTsNCi0Jdm9pZCBvcGVyYXRvciA9IChDSlNfQXJyYXkgJik7DQotCXZvaWQgb3BlcmF0b3IgPSAoQ0pTX0RhdGUgJik7DQotCXZvaWQgb3BlcmF0b3IgPSAoRlhfTFBDV1NUUiBwV3N0cik7CQ0KLQl2b2lkIG9wZXJhdG9yID0gKEZYX0xQQ1NUUiBwU3RyKTsJDQotCXZvaWQgb3BlcmF0b3IgPSAoQ0pTX1ZhbHVlIHZhbHVlKTsNCi0JDQotCUZYX0JPT0wgSXNBcnJheU9iamVjdCgpIGNvbnN0Ow0KLQlGWF9CT09MCUlzRGF0ZU9iamVjdCgpIGNvbnN0Ow0KLQlGWEpTVkFMVUVUWVBFIEdldFR5cGUoKSBjb25zdDsNCi0NCi0JRlhfQk9PTCBDb252ZXJ0VG9BcnJheShDSlNfQXJyYXkgJikgY29uc3Q7DQotCUZYX0JPT0wgQ29udmVydFRvRGF0ZShDSlNfRGF0ZSAmKSBjb25zdDsNCi0NCi0Jdjg6Oklzb2xhdGUqIEdldElzb2xhdGUoKSB7cmV0dXJuIG1faXNvbGF0ZTt9DQotcHJvdGVjdGVkOgkNCi0Jdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1fcFZhbHVlOw0KLQlGWEpTVkFMVUVUWVBFIG1fZVR5cGU7DQotCXY4OjpJc29sYXRlKiBtX2lzb2xhdGU7DQotfTsNCi0NCi10ZW1wbGF0ZTxjbGFzcyBUWVBFPiBjbGFzcyBDSlNfUGFyYW1ldGVyc1RtcGwgOiBwdWJsaWMgQ0ZYX0FycmF5VGVtcGxhdGU8VFlQRT4NCi17DQotcHVibGljOg0KLQl2b2lkIHB1c2hfYmFjayhUWVBFIG5ld0VsZW1lbnQpe0NGWF9BcnJheVRlbXBsYXRlPFRZUEU+OjpBZGQobmV3RWxlbWVudCk7fQ0KLQlpbnQgc2l6ZSgpIGNvbnN0e3JldHVybiBDRlhfQXJyYXlUZW1wbGF0ZTxUWVBFPjo6R2V0U2l6ZSgpO30NCi19Ow0KLXR5cGVkZWYgQ0pTX1BhcmFtZXRlcnNUbXBsPENKU19WYWx1ZT4gQ0pTX1BhcmFtZXRlcnM7DQotDQotY2xhc3MgQ0pTX1Byb3BWYWx1ZTogcHVibGljIENKU19WYWx1ZQ0KLXsNCi1wdWJsaWM6DQotCUNKU19Qcm9wVmFsdWUoY29uc3QgQ0pTX1ZhbHVlICYpOw0KLQlDSlNfUHJvcFZhbHVlKHY4OjpJc29sYXRlKiBpc29sYXRlKTsNCi0JfkNKU19Qcm9wVmFsdWUoKTsNCi1wdWJsaWM6DQotCUZYX0JPT0wgSXNTZXR0aW5nKCk7DQotCUZYX0JPT0wgSXNHZXR0aW5nKCk7DQotCXZvaWQgb3BlcmF0b3I8PChpbnQgKTsNCi0Jdm9pZCBvcGVyYXRvcj4+KGludCAmKSBjb25zdDsNCi0Jdm9pZCBvcGVyYXRvcjw8KGJvb2wpOw0KLQl2b2lkIG9wZXJhdG9yPj4oYm9vbCAmKSBjb25zdDsNCi0Jdm9pZCBvcGVyYXRvcjw8KGRvdWJsZSApOw0KLQl2b2lkIG9wZXJhdG9yPj4oZG91YmxlICYpIGNvbnN0Ow0KLQl2b2lkIG9wZXJhdG9yPDwoQ0pTX09iamVjdCAqcE9iaik7DQotCXZvaWQgb3BlcmF0b3I+PihDSlNfT2JqZWN0IComcHBPYmopIGNvbnN0Ow0KLQl2b2lkIG9wZXJhdG9yPDwoQ0ZYX0J5dGVTdHJpbmcpOw0KLQl2b2lkIG9wZXJhdG9yPj4oQ0ZYX0J5dGVTdHJpbmcgJikgY29uc3Q7DQotCXZvaWQgb3BlcmF0b3I8PChDRlhfV2lkZVN0cmluZyk7DQotCXZvaWQgb3BlcmF0b3I+PihDRlhfV2lkZVN0cmluZyAmKSBjb25zdDsNCi0Jdm9pZCBvcGVyYXRvcjw8KEZYX0xQQ1dTVFIgY19zdHJpbmcpOw0KLQ0KLQl2b2lkIG9wZXJhdG9yPDwoSlNGWE9iamVjdCk7DQotCXZvaWQgb3BlcmF0b3I+PihKU0ZYT2JqZWN0ICYpIGNvbnN0Ow0KLQ0KLQl2b2lkIG9wZXJhdG9yPj4oQ0pTX0FycmF5ICZhcnJheSkgY29uc3Q7DQotCXZvaWQgb3BlcmF0b3I8PChDSlNfQXJyYXkgJmFycmF5KTsNCi0NCi0Jdm9pZCBvcGVyYXRvcjw8KENKU19EYXRlICZkYXRlKTsNCi0Jdm9pZCBvcGVyYXRvcj4+KENKU19EYXRlICZkYXRlKSBjb25zdDsNCi0NCi0Jb3BlcmF0b3Igdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCkgY29uc3Q7DQotDQotCXZvaWQgU3RhcnRTZXR0aW5nKCk7DQotCXZvaWQgU3RhcnRHZXR0aW5nKCk7DQotcHJpdmF0ZToNCi0JRlhfQk9PTCBtX2JJc1NldHRpbmc7DQotfTsNCi0NCi1jbGFzcyBDSlNfQXJyYXkNCi17DQotcHVibGljOg0KLQlDSlNfQXJyYXkodjg6Oklzb2xhdGUqIGlzb2xhdGUpOw0KLQl2aXJ0dWFsIH5DSlNfQXJyYXkoKTsNCi0NCi0Jdm9pZCBBdHRhY2godjg6OkhhbmRsZTx2ODo6QXJyYXk+IHBBcnJheSk7DQotCXZvaWQgR2V0RWxlbWVudCh1bnNpZ25lZCBpbmRleCxDSlNfVmFsdWUgJnZhbHVlKTsNCi0Jdm9pZCBTZXRFbGVtZW50KHVuc2lnbmVkIGluZGV4LENKU19WYWx1ZSB2YWx1ZSk7DQotICAgIGludCBHZXRMZW5ndGgoKTsNCi0JRlhfQk9PTCBJc0F0dGFjaGVkKCk7DQotCW9wZXJhdG9yIHY4OjpIYW5kbGU8djg6OkFycmF5PigpOw0KLQ0KLQl2ODo6SXNvbGF0ZSogR2V0SXNvbGF0ZSgpIHtyZXR1cm4gbV9pc29sYXRlO30NCi1wcml2YXRlOg0KLQl2ODo6SGFuZGxlPHY4OjpBcnJheT4gbV9wQXJyYXk7DQotCXY4OjpJc29sYXRlKiBtX2lzb2xhdGU7DQotfTsNCi0NCi1jbGFzcyBDSlNfRGF0ZQ0KLXsNCi1mcmllbmQgY2xhc3MgQ0pTX1ZhbHVlOw0KLXB1YmxpYzoNCi0JQ0pTX0RhdGUodjg6Oklzb2xhdGUqIGlzb2xhdGUpOw0KLQlDSlNfRGF0ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSxkb3VibGUgZE1zZWNfdGltZSk7DQotCUNKU19EYXRlKHY4OjpJc29sYXRlKiBpc29sYXRlLGludCB5ZWFyLCBpbnQgbW9uLCBpbnQgZGF5LGludCBob3VyLCBpbnQgbWluLCBpbnQgc2VjKTsNCi0JdmlydHVhbCB+Q0pTX0RhdGUoKTsNCi0Jdm9pZCBBdHRhY2godjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBEYXRlKTsNCi0NCi0JaW50ICAgICBHZXRZZWFyKCk7DQotCXZvaWQgICAgU2V0WWVhcihpbnQgaVllYXIpOw0KLQ0KLQlpbnQgICAgIEdldE1vbnRoKCk7DQotCXZvaWQgICAgU2V0TW9udGgoaW50IGlNb250aCk7DQotDQotCWludCAgICAgR2V0RGF5KCk7DQotCXZvaWQgICAgU2V0RGF5KGludCBpRGF5KTsNCi0NCi0JaW50ICAgICBHZXRIb3VycygpOw0KLQl2b2lkICAgIFNldEhvdXJzKGludCBpSG91cnMpOw0KLQ0KLQlpbnQgICAgIEdldE1pbnV0ZXMoKTsNCi0Jdm9pZCAgICBTZXRNaW51dGVzKGludCBtaW51dGVzKTsNCi0NCi0JaW50ICAgICBHZXRTZWNvbmRzKCk7DQotCXZvaWQgICAgU2V0U2Vjb25kcyhpbnQgc2Vjb25kcyk7DQotDQotCW9wZXJhdG9yIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOw0KLQlvcGVyYXRvciBkb3VibGUoKSBjb25zdDsNCi0NCi0JQ0ZYX1dpZGVTdHJpbmcJVG9TdHJpbmcoKSBjb25zdDsNCi0NCi0Jc3RhdGljIGRvdWJsZQlNYWtlRGF0ZShpbnQgeWVhciwgaW50IG1vbiwgaW50IG1kYXksaW50IGhvdXIsIGludCBtaW4sIGludCBzZWMsaW50IG1zKTsNCi0NCi0JRlhfQk9PTAlJc1ZhbGlkRGF0ZSgpOw0KLQ0KLXByb3RlY3RlZDoNCi0Jdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1fcERhdGU7DQotCXY4OjpJc29sYXRlKiBtX2lzb2xhdGU7DQotfTsNCi0NCi0jZW5kaWYgLy9fSlNfVkFMVUVfSF8NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9KU19WQUxVRV9IXworI2RlZmluZSBfSlNfVkFMVUVfSF8KKworY2xhc3MgQ0pTX0FycmF5OworY2xhc3MgQ0pTX0RhdGU7CisKK2NsYXNzIENKU19WYWx1ZQoreworcHVibGljOgorCUNKU19WYWx1ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSk7CisJQ0pTX1ZhbHVlKHY4OjpJc29sYXRlKiBpc29sYXRlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcFZhbHVlLEZYSlNWQUxVRVRZUEUgdCk7CisJQ0pTX1ZhbHVlKHY4OjpJc29sYXRlKiBpc29sYXRlLCBjb25zdCBpbnQgJmlWYWx1ZSk7CisJQ0pTX1ZhbHVlKHY4OjpJc29sYXRlKiBpc29sYXRlLCBjb25zdCBkb3VibGUgJmRWYWx1ZSk7CisJQ0pTX1ZhbHVlKHY4OjpJc29sYXRlKiBpc29sYXRlLCBjb25zdCBmbG9hdCAmZlZhbHVlKTsJCisJQ0pTX1ZhbHVlKHY4OjpJc29sYXRlKiBpc29sYXRlLCBjb25zdCBib29sICZiVmFsdWUpOworCUNKU19WYWx1ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgSlNGWE9iamVjdCk7CisJQ0pTX1ZhbHVlKHY4OjpJc29sYXRlKiBpc29sYXRlLCBDSlNfT2JqZWN0ICopOworCUNKU19WYWx1ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgRlhfTFBDU1RSIHBTdHIpOworCUNKU19WYWx1ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgRlhfTFBDV1NUUiBwV3N0cik7CisJQ0pTX1ZhbHVlKHY4OjpJc29sYXRlKiBpc29sYXRlLCBDSlNfQXJyYXkmIGFycmF5KTsKKwkKKwl+Q0pTX1ZhbHVlKCk7CisKKwl2b2lkIFNldE51bGwoKTsKKyAgICB2b2lkIEF0dGFjaCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcFZhbHVlLEZYSlNWQUxVRVRZUEUgdCk7CisJdm9pZCBBdHRhY2goQ0pTX1ZhbHVlICpwVmFsdWUpOworCXZvaWQgRGV0YWNoKCk7CisKKworCW9wZXJhdG9yIGludCgpIGNvbnN0OworCW9wZXJhdG9yIGJvb2woKSBjb25zdDsKKwlvcGVyYXRvciBkb3VibGUoKSBjb25zdDsKKwlvcGVyYXRvciBmbG9hdCgpIGNvbnN0OworCW9wZXJhdG9yIENKU19PYmplY3QgKigpIGNvbnN0OworCS8vb3BlcmF0b3IgSlNGWE9iamVjdCAqKCkgY29uc3Q7CisJb3BlcmF0b3Igdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpIGNvbnN0OworCW9wZXJhdG9yIHY4OjpIYW5kbGU8djg6OkFycmF5PigpIGNvbnN0OworCW9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCkgY29uc3Q7CisJLy9vcGVyYXRvciBGWF9XQ0hBUiAqKCkgY29uc3Q7CisJb3BlcmF0b3IgQ0ZYX0J5dGVTdHJpbmcoKSBjb25zdDsKKwl2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVG9KU1ZhbHVlKCk7CisKKwl2b2lkIG9wZXJhdG9yID0gKGludCBpVmFsdWUpOworCXZvaWQgb3BlcmF0b3IgPSAoYm9vbCBiVmFsdWUpOwkKKwl2b2lkIG9wZXJhdG9yID0gKGRvdWJsZSk7CQorCXZvaWQgb3BlcmF0b3IgPSAoZmxvYXQpOwkKKwl2b2lkIG9wZXJhdG9yID0gKENKU19PYmplY3QgKik7CQorCXZvaWQgb3BlcmF0b3IgPSAodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisvLwl2b2lkIG9wZXJhdG9yID0gKEpTT2JqZWN0ICopOworCXZvaWQgb3BlcmF0b3IgPSAoQ0pTX0FycmF5ICYpOworCXZvaWQgb3BlcmF0b3IgPSAoQ0pTX0RhdGUgJik7CisJdm9pZCBvcGVyYXRvciA9IChGWF9MUENXU1RSIHBXc3RyKTsJCisJdm9pZCBvcGVyYXRvciA9IChGWF9MUENTVFIgcFN0cik7CQorCXZvaWQgb3BlcmF0b3IgPSAoQ0pTX1ZhbHVlIHZhbHVlKTsKKwkKKwlGWF9CT09MIElzQXJyYXlPYmplY3QoKSBjb25zdDsKKwlGWF9CT09MCUlzRGF0ZU9iamVjdCgpIGNvbnN0OworCUZYSlNWQUxVRVRZUEUgR2V0VHlwZSgpIGNvbnN0OworCisJRlhfQk9PTCBDb252ZXJ0VG9BcnJheShDSlNfQXJyYXkgJikgY29uc3Q7CisJRlhfQk9PTCBDb252ZXJ0VG9EYXRlKENKU19EYXRlICYpIGNvbnN0OworCisJdjg6Oklzb2xhdGUqIEdldElzb2xhdGUoKSB7cmV0dXJuIG1faXNvbGF0ZTt9Citwcm90ZWN0ZWQ6CQorCXY4OjpIYW5kbGU8djg6OlZhbHVlPiBtX3BWYWx1ZTsKKwlGWEpTVkFMVUVUWVBFIG1fZVR5cGU7CisJdjg6Oklzb2xhdGUqIG1faXNvbGF0ZTsKK307CisKK3RlbXBsYXRlPGNsYXNzIFRZUEU+IGNsYXNzIENKU19QYXJhbWV0ZXJzVG1wbCA6IHB1YmxpYyBDRlhfQXJyYXlUZW1wbGF0ZTxUWVBFPgoreworcHVibGljOgorCXZvaWQgcHVzaF9iYWNrKFRZUEUgbmV3RWxlbWVudCl7Q0ZYX0FycmF5VGVtcGxhdGU8VFlQRT46OkFkZChuZXdFbGVtZW50KTt9CisJaW50IHNpemUoKSBjb25zdHtyZXR1cm4gQ0ZYX0FycmF5VGVtcGxhdGU8VFlQRT46OkdldFNpemUoKTt9Cit9OwordHlwZWRlZiBDSlNfUGFyYW1ldGVyc1RtcGw8Q0pTX1ZhbHVlPiBDSlNfUGFyYW1ldGVyczsKKworY2xhc3MgQ0pTX1Byb3BWYWx1ZTogcHVibGljIENKU19WYWx1ZQoreworcHVibGljOgorCUNKU19Qcm9wVmFsdWUoY29uc3QgQ0pTX1ZhbHVlICYpOworCUNKU19Qcm9wVmFsdWUodjg6Oklzb2xhdGUqIGlzb2xhdGUpOworCX5DSlNfUHJvcFZhbHVlKCk7CitwdWJsaWM6CisJRlhfQk9PTCBJc1NldHRpbmcoKTsKKwlGWF9CT09MIElzR2V0dGluZygpOworCXZvaWQgb3BlcmF0b3I8PChpbnQgKTsKKwl2b2lkIG9wZXJhdG9yPj4oaW50ICYpIGNvbnN0OworCXZvaWQgb3BlcmF0b3I8PChib29sKTsKKwl2b2lkIG9wZXJhdG9yPj4oYm9vbCAmKSBjb25zdDsKKwl2b2lkIG9wZXJhdG9yPDwoZG91YmxlICk7CisJdm9pZCBvcGVyYXRvcj4+KGRvdWJsZSAmKSBjb25zdDsKKwl2b2lkIG9wZXJhdG9yPDwoQ0pTX09iamVjdCAqcE9iaik7CisJdm9pZCBvcGVyYXRvcj4+KENKU19PYmplY3QgKiZwcE9iaikgY29uc3Q7CisJdm9pZCBvcGVyYXRvcjw8KENGWF9CeXRlU3RyaW5nKTsKKwl2b2lkIG9wZXJhdG9yPj4oQ0ZYX0J5dGVTdHJpbmcgJikgY29uc3Q7CisJdm9pZCBvcGVyYXRvcjw8KENGWF9XaWRlU3RyaW5nKTsKKwl2b2lkIG9wZXJhdG9yPj4oQ0ZYX1dpZGVTdHJpbmcgJikgY29uc3Q7CisJdm9pZCBvcGVyYXRvcjw8KEZYX0xQQ1dTVFIgY19zdHJpbmcpOworCisJdm9pZCBvcGVyYXRvcjw8KEpTRlhPYmplY3QpOworCXZvaWQgb3BlcmF0b3I+PihKU0ZYT2JqZWN0ICYpIGNvbnN0OworCisJdm9pZCBvcGVyYXRvcj4+KENKU19BcnJheSAmYXJyYXkpIGNvbnN0OworCXZvaWQgb3BlcmF0b3I8PChDSlNfQXJyYXkgJmFycmF5KTsKKworCXZvaWQgb3BlcmF0b3I8PChDSlNfRGF0ZSAmZGF0ZSk7CisJdm9pZCBvcGVyYXRvcj4+KENKU19EYXRlICZkYXRlKSBjb25zdDsKKworCW9wZXJhdG9yIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpIGNvbnN0OworCisJdm9pZCBTdGFydFNldHRpbmcoKTsKKwl2b2lkIFN0YXJ0R2V0dGluZygpOworcHJpdmF0ZToKKwlGWF9CT09MIG1fYklzU2V0dGluZzsKK307CisKK2NsYXNzIENKU19BcnJheQoreworcHVibGljOgorCUNKU19BcnJheSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSk7CisJdmlydHVhbCB+Q0pTX0FycmF5KCk7CisKKwl2b2lkIEF0dGFjaCh2ODo6SGFuZGxlPHY4OjpBcnJheT4gcEFycmF5KTsKKwl2b2lkIEdldEVsZW1lbnQodW5zaWduZWQgaW5kZXgsQ0pTX1ZhbHVlICZ2YWx1ZSk7CisJdm9pZCBTZXRFbGVtZW50KHVuc2lnbmVkIGluZGV4LENKU19WYWx1ZSB2YWx1ZSk7CisgICAgaW50IEdldExlbmd0aCgpOworCUZYX0JPT0wgSXNBdHRhY2hlZCgpOworCW9wZXJhdG9yIHY4OjpIYW5kbGU8djg6OkFycmF5PigpOworCisJdjg6Oklzb2xhdGUqIEdldElzb2xhdGUoKSB7cmV0dXJuIG1faXNvbGF0ZTt9Citwcml2YXRlOgorCXY4OjpIYW5kbGU8djg6OkFycmF5PiBtX3BBcnJheTsKKwl2ODo6SXNvbGF0ZSogbV9pc29sYXRlOworfTsKKworY2xhc3MgQ0pTX0RhdGUKK3sKK2ZyaWVuZCBjbGFzcyBDSlNfVmFsdWU7CitwdWJsaWM6CisJQ0pTX0RhdGUodjg6Oklzb2xhdGUqIGlzb2xhdGUpOworCUNKU19EYXRlKHY4OjpJc29sYXRlKiBpc29sYXRlLGRvdWJsZSBkTXNlY190aW1lKTsKKwlDSlNfRGF0ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSxpbnQgeWVhciwgaW50IG1vbiwgaW50IGRheSxpbnQgaG91ciwgaW50IG1pbiwgaW50IHNlYyk7CisJdmlydHVhbCB+Q0pTX0RhdGUoKTsKKwl2b2lkIEF0dGFjaCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcERhdGUpOworCisJaW50ICAgICBHZXRZZWFyKCk7CisJdm9pZCAgICBTZXRZZWFyKGludCBpWWVhcik7CisKKwlpbnQgICAgIEdldE1vbnRoKCk7CisJdm9pZCAgICBTZXRNb250aChpbnQgaU1vbnRoKTsKKworCWludCAgICAgR2V0RGF5KCk7CisJdm9pZCAgICBTZXREYXkoaW50IGlEYXkpOworCisJaW50ICAgICBHZXRIb3VycygpOworCXZvaWQgICAgU2V0SG91cnMoaW50IGlIb3Vycyk7CisKKwlpbnQgICAgIEdldE1pbnV0ZXMoKTsKKwl2b2lkICAgIFNldE1pbnV0ZXMoaW50IG1pbnV0ZXMpOworCisJaW50ICAgICBHZXRTZWNvbmRzKCk7CisJdm9pZCAgICBTZXRTZWNvbmRzKGludCBzZWNvbmRzKTsKKworCW9wZXJhdG9yIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworCW9wZXJhdG9yIGRvdWJsZSgpIGNvbnN0OworCisJQ0ZYX1dpZGVTdHJpbmcJVG9TdHJpbmcoKSBjb25zdDsKKworCXN0YXRpYyBkb3VibGUJTWFrZURhdGUoaW50IHllYXIsIGludCBtb24sIGludCBtZGF5LGludCBob3VyLCBpbnQgbWluLCBpbnQgc2VjLGludCBtcyk7CisKKwlGWF9CT09MCUlzVmFsaWREYXRlKCk7CisKK3Byb3RlY3RlZDoKKwl2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbV9wRGF0ZTsKKwl2ODo6SXNvbGF0ZSogbV9pc29sYXRlOworfTsKKworI2VuZGlmIC8vX0pTX1ZBTFVFX0hfCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L0phdmFTY3JpcHQuaCBiL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L0phdmFTY3JpcHQuaAppbmRleCBkMTM3NWNjLi4xNjY0NzJiIDEwMDY0NAotLS0gYS9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9KYXZhU2NyaXB0LmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvSmF2YVNjcmlwdC5oCkBAIC0xLDM5ICsxLDM5IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9KQVZBU0NSSVBUX0hfDQotI2RlZmluZSBfSkFWQVNDUklQVF9IXw0KLQ0KLQ0KLSNpZm5kZWYgX0lOQ19QREZBUEkNCi0JI2RlZmluZSBfSU5DX1BERkFQSQ0KLQ0KLQkjaW5jbHVkZSAiLi4vLi4vLi4vY29yZS9pbmNsdWRlL2ZwZGZhcGkvZnBkZl9tb2R1bGUuaCIgDQotCSNpbmNsdWRlICIuLi8uLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmRvYy9mcGRmX2RvYy5oIiANCi0JI2luY2x1ZGUgIi4uLy4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmZG9jL2ZwZGZfdnQuaCIgDQotCSNpbmNsdWRlICIuLi8uLi8uLi9jb3JlL2luY2x1ZGUvZnhjcnQvZnhfeG1sLmgiIA0KLQkjaW5jbHVkZSAiLi4vLi4vLi4vY29yZS9pbmNsdWRlL2Zkcm0vZnhfY3J5cHQuaCIgDQotCSNpbmNsdWRlICIuLi8uLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2VvYmouaCIgDQotCSNpbmNsdWRlICIuLi8uLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3NlcmlhbC5oIg0KLQ0KLQ0KLQkjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meF9zeXN0ZW1oYW5kbGVyLmgiCQ0KLSNlbmRpZg0KLQ0KLQ0KLSNpbmNsdWRlICIuLi9qc2FwaS9meGpzX3Y4LmgiDQotI2luY2x1ZGUgIi4uL2Z4ZWRpdC9meF9lZGl0LmgiDQotI2luY2x1ZGUgIi4uL3BkZndpbmRvdy9JUERGV2luZG93LmgiDQotI2luY2x1ZGUgIi4uL2ZzZGtfbWdyLmgiDQotDQotDQotI2luY2x1ZGUgPHN0cmluZz4NCi0vLyNwcmFnbWEgd2FybmluZyggZGlzYWJsZSA6IDQ3ODYpIA0KLSNpbmNsdWRlIDx2ZWN0b3I+DQotDQotDQotI2VuZGlmIC8vX0pBVkFTQ1JJUFRfSF8NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9KQVZBU0NSSVBUX0hfCisjZGVmaW5lIF9KQVZBU0NSSVBUX0hfCisKKworI2lmbmRlZiBfSU5DX1BERkFQSQorCSNkZWZpbmUgX0lOQ19QREZBUEkKKworCSNpbmNsdWRlICIuLi8uLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX21vZHVsZS5oIiAKKwkjaW5jbHVkZSAiLi4vLi4vLi4vY29yZS9pbmNsdWRlL2ZwZGZkb2MvZnBkZl9kb2MuaCIgCisJI2luY2x1ZGUgIi4uLy4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmZG9jL2ZwZGZfdnQuaCIgCisJI2luY2x1ZGUgIi4uLy4uLy4uL2NvcmUvaW5jbHVkZS9meGNydC9meF94bWwuaCIgCisJI2luY2x1ZGUgIi4uLy4uLy4uL2NvcmUvaW5jbHVkZS9mZHJtL2Z4X2NyeXB0LmgiIAorCSNpbmNsdWRlICIuLi8uLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX3BhZ2VvYmouaCIgCisJI2luY2x1ZGUgIi4uLy4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfc2VyaWFsLmgiCisKKworCSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4X3N5c3RlbWhhbmRsZXIuaCIJCisjZW5kaWYKKworCisjaW5jbHVkZSAiLi4vanNhcGkvZnhqc192OC5oIgorI2luY2x1ZGUgIi4uL2Z4ZWRpdC9meF9lZGl0LmgiCisjaW5jbHVkZSAiLi4vcGRmd2luZG93L0lQREZXaW5kb3cuaCIKKyNpbmNsdWRlICIuLi9mc2RrX21nci5oIgorCisKKyNpbmNsdWRlIDxzdHJpbmc+CisvLyNwcmFnbWEgd2FybmluZyggZGlzYWJsZSA6IDQ3ODYpIAorI2luY2x1ZGUgPHZlY3Rvcj4KKworCisjZW5kaWYgLy9fSkFWQVNDUklQVF9IXworCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9QdWJsaWNNZXRob2RzLmggYi9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9QdWJsaWNNZXRob2RzLmgKaW5kZXggYTQ4NWE5YS4uOGQ0ZTY4MyAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvUHVibGljTWV0aG9kcy5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L1B1YmxpY01ldGhvZHMuaApAQCAtMSwxMDEgKzEsMTAxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9QVUJMSUNNRVRIT0RTX0hfDQotI2RlZmluZSBfUFVCTElDTUVUSE9EU19IXw0KLQ0KLWNsYXNzIENKU19QdWJsaWNNZXRob2RzIDogcHVibGljIENKU19PYmplY3QNCi17DQotcHVibGljOg0KLQlDSlNfUHVibGljTWV0aG9kcyhKU0ZYT2JqZWN0ICBwT2JqZWN0KSA6IENKU19PYmplY3QocE9iamVjdCkge307DQotCXZpcnR1YWwgfkNKU19QdWJsaWNNZXRob2RzKHZvaWQpe307DQotDQotcHVibGljOg0KLQlzdGF0aWMgRlhfQk9PTCBBRk51bWJlcl9Gb3JtYXQoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlzdGF0aWMgRlhfQk9PTCBBRk51bWJlcl9LZXlzdHJva2UoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlzdGF0aWMgRlhfQk9PTCBBRlBlcmNlbnRfRm9ybWF0KE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0Jc3RhdGljIEZYX0JPT0wgQUZQZXJjZW50X0tleXN0cm9rZShPQkpfTUVUSE9EX1BBUkFNUyk7DQotCXN0YXRpYyBGWF9CT09MIEFGRGF0ZV9Gb3JtYXRFeChPQkpfTUVUSE9EX1BBUkFNUyk7DQotCXN0YXRpYyBGWF9CT09MIEFGRGF0ZV9LZXlzdHJva2VFeChPQkpfTUVUSE9EX1BBUkFNUyk7DQotCXN0YXRpYyBGWF9CT09MIEFGRGF0ZV9Gb3JtYXQoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlzdGF0aWMgRlhfQk9PTCBBRkRhdGVfS2V5c3Ryb2tlKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0Jc3RhdGljIEZYX0JPT0wgQUZUaW1lX0Zvcm1hdEV4KE9CSl9NRVRIT0RfUEFSQU1TKTsgLy8NCi0Jc3RhdGljIEZYX0JPT0wgQUZUaW1lX0tleXN0cm9rZUV4KE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0Jc3RhdGljIEZYX0JPT0wgQUZUaW1lX0Zvcm1hdChPQkpfTUVUSE9EX1BBUkFNUyk7DQotCXN0YXRpYyBGWF9CT09MIEFGVGltZV9LZXlzdHJva2UoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlzdGF0aWMgRlhfQk9PTCBBRlNwZWNpYWxfRm9ybWF0KE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0Jc3RhdGljIEZYX0JPT0wgQUZTcGVjaWFsX0tleXN0cm9rZShPQkpfTUVUSE9EX1BBUkFNUyk7DQotCXN0YXRpYyBGWF9CT09MIEFGU3BlY2lhbF9LZXlzdHJva2VFeChPQkpfTUVUSE9EX1BBUkFNUyk7Ly8NCi0Jc3RhdGljIEZYX0JPT0wgQUZTaW1wbGUoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlzdGF0aWMgRlhfQk9PTCBBRk1ha2VOdW1iZXIoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlzdGF0aWMgRlhfQk9PTCBBRlNpbXBsZV9DYWxjdWxhdGUoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlzdGF0aWMgRlhfQk9PTCBBRlJhbmdlX1ZhbGlkYXRlKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0Jc3RhdGljIEZYX0JPT0wgQUZNZXJnZUNoYW5nZShPQkpfTUVUSE9EX1BBUkFNUyk7IA0KLQlzdGF0aWMgRlhfQk9PTCBBRlBhcnNlRGF0ZUV4KE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0Jc3RhdGljIEZYX0JPT0wgQUZFeHRyYWN0TnVtcyhPQkpfTUVUSE9EX1BBUkFNUyk7DQotDQotcHVibGljOg0KLQlKU19TVEFUSUNfR0xPQkFMX0ZVTihBRk51bWJlcl9Gb3JtYXQpOw0KLQlKU19TVEFUSUNfR0xPQkFMX0ZVTihBRk51bWJlcl9LZXlzdHJva2UpOw0KLQlKU19TVEFUSUNfR0xPQkFMX0ZVTihBRlBlcmNlbnRfRm9ybWF0KTsNCi0JSlNfU1RBVElDX0dMT0JBTF9GVU4oQUZQZXJjZW50X0tleXN0cm9rZSk7DQotCUpTX1NUQVRJQ19HTE9CQUxfRlVOKEFGRGF0ZV9Gb3JtYXRFeCk7DQotCUpTX1NUQVRJQ19HTE9CQUxfRlVOKEFGRGF0ZV9LZXlzdHJva2VFeCk7DQotCUpTX1NUQVRJQ19HTE9CQUxfRlVOKEFGRGF0ZV9Gb3JtYXQpOw0KLQlKU19TVEFUSUNfR0xPQkFMX0ZVTihBRkRhdGVfS2V5c3Ryb2tlKTsNCi0JSlNfU1RBVElDX0dMT0JBTF9GVU4oQUZUaW1lX0Zvcm1hdEV4KTsNCi0JSlNfU1RBVElDX0dMT0JBTF9GVU4oQUZUaW1lX0tleXN0cm9rZUV4KTsNCi0JSlNfU1RBVElDX0dMT0JBTF9GVU4oQUZUaW1lX0Zvcm1hdCk7DQotCUpTX1NUQVRJQ19HTE9CQUxfRlVOKEFGVGltZV9LZXlzdHJva2UpOw0KLQlKU19TVEFUSUNfR0xPQkFMX0ZVTihBRlNwZWNpYWxfRm9ybWF0KTsNCi0JSlNfU1RBVElDX0dMT0JBTF9GVU4oQUZTcGVjaWFsX0tleXN0cm9rZSk7DQotCUpTX1NUQVRJQ19HTE9CQUxfRlVOKEFGU3BlY2lhbF9LZXlzdHJva2VFeCk7DQotCUpTX1NUQVRJQ19HTE9CQUxfRlVOKEFGU2ltcGxlKTsNCi0JSlNfU1RBVElDX0dMT0JBTF9GVU4oQUZNYWtlTnVtYmVyKTsJDQotCUpTX1NUQVRJQ19HTE9CQUxfRlVOKEFGU2ltcGxlX0NhbGN1bGF0ZSk7DQotCUpTX1NUQVRJQ19HTE9CQUxfRlVOKEFGUmFuZ2VfVmFsaWRhdGUpOw0KLQlKU19TVEFUSUNfR0xPQkFMX0ZVTihBRk1lcmdlQ2hhbmdlKTsNCi0JSlNfU1RBVElDX0dMT0JBTF9GVU4oQUZQYXJzZURhdGVFeCk7DQotCUpTX1NUQVRJQ19HTE9CQUxfRlVOKEFGRXh0cmFjdE51bXMpOw0KLQ0KLQlKU19TVEFUSUNfREVDTEFSRV9HTE9CQUxfRlVOKCk7DQotCQ0KLXB1YmxpYzoNCi0Jc3RhdGljIGludAkJCQlQYXJzZVN0cmluZ0ludGVnZXIoY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJiBzdHJpbmcsaW50IG5TdGFydCxpbnQgJiBuU2tpcCwgaW50IG5NYXhTdGVwKTsNCi0Jc3RhdGljIENGWF9XaWRlU3RyaW5nCVBhcnNlU3RyaW5nU3RyaW5nKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJpbmcsIGludCBuU3RhcnQsIGludCYgblNraXApOw0KLQlzdGF0aWMgZG91YmxlCQkJTWFrZVJlZ3VsYXJEYXRlKGNvbnN0IENGWF9XaWRlU3RyaW5nICYgdmFsdWUsY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJiBmb3JtYXQsIEZYX0JPT0wmIGJXcm9uZ0Zvcm1hdCk7DQotCXN0YXRpYyBDRlhfV2lkZVN0cmluZwlNYWtlRm9ybWF0RGF0ZShkb3VibGUgZERhdGUsY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJiBmb3JtYXQpOw0KLQlzdGF0aWMgRlhfQk9PTAkJCUNvbnZlcnRTdHJpbmdUb051bWJlcihGWF9MUENXU1RSIHN3U291cmNlLCBkb3VibGUgJiBkUmV0LCBGWF9CT09MICYgYkRvdCk7DQotCXN0YXRpYyBkb3VibGUJCQlQYXJzZVN0cmluZ1RvTnVtYmVyKEZYX0xQQ1dTVFIgc3dTb3VyY2UpOw0KLQlzdGF0aWMgZG91YmxlCQkJUGFyc2VOb3JtYWxEYXRlKGNvbnN0IENGWF9XaWRlU3RyaW5nICYgdmFsdWUsIEZYX0JPT0wmIGJXcm9uZ0Zvcm1hdCk7DQotCXN0YXRpYyBkb3VibGUgICAgICAgICAgIE1ha2VJbnRlckRhdGUoQ0ZYX1dpZGVTdHJpbmcgc3RyVmFsdWUpOw0KLQlzdGF0aWMgZG91YmxlCQkJUGFyc2VOdW1iZXIoRlhfTFBDV1NUUiBzd1NvdXJjZSwgRlhfQk9PTCYgYkFsbERpZ2l0cywgRlhfQk9PTCYgYkRvdCwgRlhfQk9PTCYgYlNpZ24sIEZYX0JPT0wmIGJLWEpTKTsNCi0NCi1wdWJsaWM6DQotCXN0YXRpYyBDRlhfV2lkZVN0cmluZwlTdHJMVHJpbShGWF9MUENXU1RSIHBTdHIpOw0KLQlzdGF0aWMgQ0ZYX1dpZGVTdHJpbmcJU3RyUlRyaW0oRlhfTFBDV1NUUiBwU3RyKTsNCi0Jc3RhdGljIENGWF9XaWRlU3RyaW5nCVN0clRyaW0oRlhfTFBDV1NUUiBwU3RyKTsNCi0NCi0Jc3RhdGljIENGWF9CeXRlU3RyaW5nCVN0ckxUcmltKEZYX0xQQ1NUUiBwU3RyKTsNCi0Jc3RhdGljIENGWF9CeXRlU3RyaW5nCVN0clJUcmltKEZYX0xQQ1NUUiBwU3RyKTsNCi0Jc3RhdGljIENGWF9CeXRlU3RyaW5nCVN0clRyaW0oRlhfTFBDU1RSIHBTdHIpOw0KLQ0KLQlzdGF0aWMgRlhfQk9PTAkJCUlzTnVtYmVyKEZYX0xQQ1NUUiBzdHJpbmcpOw0KLQlzdGF0aWMgRlhfQk9PTAkJCUlzTnVtYmVyKEZYX0xQQ1dTVFIgc3RyaW5nKTsNCi0NCi0Jc3RhdGljIEZYX0JPT0wJCQlJc0RpZ2l0KGNoYXIgY2gpOw0KLQlzdGF0aWMgRlhfQk9PTAkJCUlzRGlnaXQod2NoYXJfdCBjaCk7DQotCXN0YXRpYyBGWF9CT09MCQkJSXNBbHBoYWJldGljKHdjaGFyX3QgY2gpOw0KLQlzdGF0aWMgRlhfQk9PTAkJCUlzQWxwaGFOdW1lcmljKHdjaGFyX3QgY2gpOw0KLQ0KLQlzdGF0aWMgRlhfQk9PTAkJCW1hc2tTYXRpc2ZpZWQod2NoYXJfdCBjX0NoYW5nZSx3Y2hhcl90IGNfTWFzayk7DQotCXN0YXRpYyBGWF9CT09MCQkJaXNSZXNlcnZlZE1hc2tDaGFyKHdjaGFyX3QgY2gpOw0KLQ0KLQlzdGF0aWMgZG91YmxlCQkJQUZfU2ltcGxlKEZYX0xQQ1dTVFIgc0Z1Y3Rpb24sIGRvdWJsZSBkVmFsdWUxLCBkb3VibGUgZFZhbHVlMik7DQotCXN0YXRpYyBDSlNfQXJyYXkJCUFGX01ha2VBcnJheUZyb21MaXN0KHY4OjpJc29sYXRlKiBpc29sYXRlLCBDSlNfVmFsdWUgdmFsKTsNCi19Ow0KLQ0KLSNlbmRpZiAvL19QVUJMSUNNRVRIT0RTX0hfDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfUFVCTElDTUVUSE9EU19IXworI2RlZmluZSBfUFVCTElDTUVUSE9EU19IXworCitjbGFzcyBDSlNfUHVibGljTWV0aG9kcyA6IHB1YmxpYyBDSlNfT2JqZWN0Cit7CitwdWJsaWM6CisJQ0pTX1B1YmxpY01ldGhvZHMoSlNGWE9iamVjdCAgcE9iamVjdCkgOiBDSlNfT2JqZWN0KHBPYmplY3QpIHt9OworCXZpcnR1YWwgfkNKU19QdWJsaWNNZXRob2RzKHZvaWQpe307CisKK3B1YmxpYzoKKwlzdGF0aWMgRlhfQk9PTCBBRk51bWJlcl9Gb3JtYXQoT0JKX01FVEhPRF9QQVJBTVMpOworCXN0YXRpYyBGWF9CT09MIEFGTnVtYmVyX0tleXN0cm9rZShPQkpfTUVUSE9EX1BBUkFNUyk7CisJc3RhdGljIEZYX0JPT0wgQUZQZXJjZW50X0Zvcm1hdChPQkpfTUVUSE9EX1BBUkFNUyk7CisJc3RhdGljIEZYX0JPT0wgQUZQZXJjZW50X0tleXN0cm9rZShPQkpfTUVUSE9EX1BBUkFNUyk7CisJc3RhdGljIEZYX0JPT0wgQUZEYXRlX0Zvcm1hdEV4KE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlzdGF0aWMgRlhfQk9PTCBBRkRhdGVfS2V5c3Ryb2tlRXgoT0JKX01FVEhPRF9QQVJBTVMpOworCXN0YXRpYyBGWF9CT09MIEFGRGF0ZV9Gb3JtYXQoT0JKX01FVEhPRF9QQVJBTVMpOworCXN0YXRpYyBGWF9CT09MIEFGRGF0ZV9LZXlzdHJva2UoT0JKX01FVEhPRF9QQVJBTVMpOworCXN0YXRpYyBGWF9CT09MIEFGVGltZV9Gb3JtYXRFeChPQkpfTUVUSE9EX1BBUkFNUyk7IC8vCisJc3RhdGljIEZYX0JPT0wgQUZUaW1lX0tleXN0cm9rZUV4KE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlzdGF0aWMgRlhfQk9PTCBBRlRpbWVfRm9ybWF0KE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlzdGF0aWMgRlhfQk9PTCBBRlRpbWVfS2V5c3Ryb2tlKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlzdGF0aWMgRlhfQk9PTCBBRlNwZWNpYWxfRm9ybWF0KE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlzdGF0aWMgRlhfQk9PTCBBRlNwZWNpYWxfS2V5c3Ryb2tlKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlzdGF0aWMgRlhfQk9PTCBBRlNwZWNpYWxfS2V5c3Ryb2tlRXgoT0JKX01FVEhPRF9QQVJBTVMpOy8vCisJc3RhdGljIEZYX0JPT0wgQUZTaW1wbGUoT0JKX01FVEhPRF9QQVJBTVMpOworCXN0YXRpYyBGWF9CT09MIEFGTWFrZU51bWJlcihPQkpfTUVUSE9EX1BBUkFNUyk7CisJc3RhdGljIEZYX0JPT0wgQUZTaW1wbGVfQ2FsY3VsYXRlKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlzdGF0aWMgRlhfQk9PTCBBRlJhbmdlX1ZhbGlkYXRlKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlzdGF0aWMgRlhfQk9PTCBBRk1lcmdlQ2hhbmdlKE9CSl9NRVRIT0RfUEFSQU1TKTsgCisJc3RhdGljIEZYX0JPT0wgQUZQYXJzZURhdGVFeChPQkpfTUVUSE9EX1BBUkFNUyk7CisJc3RhdGljIEZYX0JPT0wgQUZFeHRyYWN0TnVtcyhPQkpfTUVUSE9EX1BBUkFNUyk7CisKK3B1YmxpYzoKKwlKU19TVEFUSUNfR0xPQkFMX0ZVTihBRk51bWJlcl9Gb3JtYXQpOworCUpTX1NUQVRJQ19HTE9CQUxfRlVOKEFGTnVtYmVyX0tleXN0cm9rZSk7CisJSlNfU1RBVElDX0dMT0JBTF9GVU4oQUZQZXJjZW50X0Zvcm1hdCk7CisJSlNfU1RBVElDX0dMT0JBTF9GVU4oQUZQZXJjZW50X0tleXN0cm9rZSk7CisJSlNfU1RBVElDX0dMT0JBTF9GVU4oQUZEYXRlX0Zvcm1hdEV4KTsKKwlKU19TVEFUSUNfR0xPQkFMX0ZVTihBRkRhdGVfS2V5c3Ryb2tlRXgpOworCUpTX1NUQVRJQ19HTE9CQUxfRlVOKEFGRGF0ZV9Gb3JtYXQpOworCUpTX1NUQVRJQ19HTE9CQUxfRlVOKEFGRGF0ZV9LZXlzdHJva2UpOworCUpTX1NUQVRJQ19HTE9CQUxfRlVOKEFGVGltZV9Gb3JtYXRFeCk7CisJSlNfU1RBVElDX0dMT0JBTF9GVU4oQUZUaW1lX0tleXN0cm9rZUV4KTsKKwlKU19TVEFUSUNfR0xPQkFMX0ZVTihBRlRpbWVfRm9ybWF0KTsKKwlKU19TVEFUSUNfR0xPQkFMX0ZVTihBRlRpbWVfS2V5c3Ryb2tlKTsKKwlKU19TVEFUSUNfR0xPQkFMX0ZVTihBRlNwZWNpYWxfRm9ybWF0KTsKKwlKU19TVEFUSUNfR0xPQkFMX0ZVTihBRlNwZWNpYWxfS2V5c3Ryb2tlKTsKKwlKU19TVEFUSUNfR0xPQkFMX0ZVTihBRlNwZWNpYWxfS2V5c3Ryb2tlRXgpOworCUpTX1NUQVRJQ19HTE9CQUxfRlVOKEFGU2ltcGxlKTsKKwlKU19TVEFUSUNfR0xPQkFMX0ZVTihBRk1ha2VOdW1iZXIpOwkKKwlKU19TVEFUSUNfR0xPQkFMX0ZVTihBRlNpbXBsZV9DYWxjdWxhdGUpOworCUpTX1NUQVRJQ19HTE9CQUxfRlVOKEFGUmFuZ2VfVmFsaWRhdGUpOworCUpTX1NUQVRJQ19HTE9CQUxfRlVOKEFGTWVyZ2VDaGFuZ2UpOworCUpTX1NUQVRJQ19HTE9CQUxfRlVOKEFGUGFyc2VEYXRlRXgpOworCUpTX1NUQVRJQ19HTE9CQUxfRlVOKEFGRXh0cmFjdE51bXMpOworCisJSlNfU1RBVElDX0RFQ0xBUkVfR0xPQkFMX0ZVTigpOworCQorcHVibGljOgorCXN0YXRpYyBpbnQJCQkJUGFyc2VTdHJpbmdJbnRlZ2VyKGNvbnN0IENGWF9XaWRlU3RyaW5nICYgc3RyaW5nLGludCBuU3RhcnQsaW50ICYgblNraXAsIGludCBuTWF4U3RlcCk7CisJc3RhdGljIENGWF9XaWRlU3RyaW5nCVBhcnNlU3RyaW5nU3RyaW5nKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJpbmcsIGludCBuU3RhcnQsIGludCYgblNraXApOworCXN0YXRpYyBkb3VibGUJCQlNYWtlUmVndWxhckRhdGUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJiB2YWx1ZSxjb25zdCBDRlhfV2lkZVN0cmluZyAmIGZvcm1hdCwgRlhfQk9PTCYgYldyb25nRm9ybWF0KTsKKwlzdGF0aWMgQ0ZYX1dpZGVTdHJpbmcJTWFrZUZvcm1hdERhdGUoZG91YmxlIGREYXRlLGNvbnN0IENGWF9XaWRlU3RyaW5nICYgZm9ybWF0KTsKKwlzdGF0aWMgRlhfQk9PTAkJCUNvbnZlcnRTdHJpbmdUb051bWJlcihGWF9MUENXU1RSIHN3U291cmNlLCBkb3VibGUgJiBkUmV0LCBGWF9CT09MICYgYkRvdCk7CisJc3RhdGljIGRvdWJsZQkJCVBhcnNlU3RyaW5nVG9OdW1iZXIoRlhfTFBDV1NUUiBzd1NvdXJjZSk7CisJc3RhdGljIGRvdWJsZQkJCVBhcnNlTm9ybWFsRGF0ZShjb25zdCBDRlhfV2lkZVN0cmluZyAmIHZhbHVlLCBGWF9CT09MJiBiV3JvbmdGb3JtYXQpOworCXN0YXRpYyBkb3VibGUgICAgICAgICAgIE1ha2VJbnRlckRhdGUoQ0ZYX1dpZGVTdHJpbmcgc3RyVmFsdWUpOworCXN0YXRpYyBkb3VibGUJCQlQYXJzZU51bWJlcihGWF9MUENXU1RSIHN3U291cmNlLCBGWF9CT09MJiBiQWxsRGlnaXRzLCBGWF9CT09MJiBiRG90LCBGWF9CT09MJiBiU2lnbiwgRlhfQk9PTCYgYktYSlMpOworCitwdWJsaWM6CisJc3RhdGljIENGWF9XaWRlU3RyaW5nCVN0ckxUcmltKEZYX0xQQ1dTVFIgcFN0cik7CisJc3RhdGljIENGWF9XaWRlU3RyaW5nCVN0clJUcmltKEZYX0xQQ1dTVFIgcFN0cik7CisJc3RhdGljIENGWF9XaWRlU3RyaW5nCVN0clRyaW0oRlhfTFBDV1NUUiBwU3RyKTsKKworCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwlTdHJMVHJpbShGWF9MUENTVFIgcFN0cik7CisJc3RhdGljIENGWF9CeXRlU3RyaW5nCVN0clJUcmltKEZYX0xQQ1NUUiBwU3RyKTsKKwlzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJU3RyVHJpbShGWF9MUENTVFIgcFN0cik7CisKKwlzdGF0aWMgRlhfQk9PTAkJCUlzTnVtYmVyKEZYX0xQQ1NUUiBzdHJpbmcpOworCXN0YXRpYyBGWF9CT09MCQkJSXNOdW1iZXIoRlhfTFBDV1NUUiBzdHJpbmcpOworCisJc3RhdGljIEZYX0JPT0wJCQlJc0RpZ2l0KGNoYXIgY2gpOworCXN0YXRpYyBGWF9CT09MCQkJSXNEaWdpdCh3Y2hhcl90IGNoKTsKKwlzdGF0aWMgRlhfQk9PTAkJCUlzQWxwaGFiZXRpYyh3Y2hhcl90IGNoKTsKKwlzdGF0aWMgRlhfQk9PTAkJCUlzQWxwaGFOdW1lcmljKHdjaGFyX3QgY2gpOworCisJc3RhdGljIEZYX0JPT0wJCQltYXNrU2F0aXNmaWVkKHdjaGFyX3QgY19DaGFuZ2Usd2NoYXJfdCBjX01hc2spOworCXN0YXRpYyBGWF9CT09MCQkJaXNSZXNlcnZlZE1hc2tDaGFyKHdjaGFyX3QgY2gpOworCisJc3RhdGljIGRvdWJsZQkJCUFGX1NpbXBsZShGWF9MUENXU1RSIHNGdWN0aW9uLCBkb3VibGUgZFZhbHVlMSwgZG91YmxlIGRWYWx1ZTIpOworCXN0YXRpYyBDSlNfQXJyYXkJCUFGX01ha2VBcnJheUZyb21MaXN0KHY4OjpJc29sYXRlKiBpc29sYXRlLCBDSlNfVmFsdWUgdmFsKTsKK307CisKKyNlbmRpZiAvL19QVUJMSUNNRVRIT0RTX0hfCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9hcHAuaCBiL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L2FwcC5oCmluZGV4IDM1ZWU0MDEuLjYyNzNhN2QgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L2FwcC5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L2FwcC5oCkBAIC0xLDIyNSArMSwyMjUgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0FQUF9IXw0KLSNkZWZpbmUgX0FQUF9IXw0KLQ0KLWNsYXNzIENKU19SdW50aW1lOw0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGltZXJPYmogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLWNsYXNzIENKU19UaW1lcjsNCi0NCi1jbGFzcyBUaW1lck9iaiA6IHB1YmxpYyBDSlNfRW1iZWRPYmoNCi17DQotcHVibGljOg0KLQlUaW1lck9iaihDSlNfT2JqZWN0KiBwSlNPYmplY3QpOw0KLQl2aXJ0dWFsIH5UaW1lck9iaigpOw0KLQkNCi1wdWJsaWM6DQotCXZvaWQJCQlTZXRUaW1lcihDSlNfVGltZXIqIHBUaW1lcik7DQotCUNKU19UaW1lcioJCUdldFRpbWVyKCkgY29uc3Q7DQotCQ0KLXByaXZhdGU6DQotCUNKU19UaW1lcioJCW1fcFRpbWVyOw0KLX07DQotDQotY2xhc3MgQ0pTX1RpbWVyT2JqIDogcHVibGljIENKU19PYmplY3QNCi17DQotcHVibGljOg0KLQlDSlNfVGltZXJPYmooSlNGWE9iamVjdCBwT2JqZWN0KSA6IENKU19PYmplY3QocE9iamVjdCkge30NCi0JdmlydHVhbCB+Q0pTX1RpbWVyT2JqKCl7fQ0KLQkNCi0JREVDTEFSRV9KU19DTEFTUyhDSlNfVGltZXJPYmopOw0KLX07DQotDQotDQotLy8gc3RydWN0IEFQUF9NRU5VSVRFTV9BUlJBWTsNCi0vLyANCi0vLyBzdHJ1Y3QgQVBQX01FTlVJVEVNDQotLy8gew0KLS8vIAlBUFBfTUVOVUlURU0oKSA6IG9TdWJNZW51KE5VTEwpLCBjTmFtZShMIiIpLCBjUmV0dXJuKEwiIiksIGJNYXJrZWQoZmFsc2UpLCBiRW5hYmxlZCh0cnVlKQ0KLS8vIAl7DQotLy8gCX0NCi0vLyAJQ0ZYX1dpZGVTdHJpbmcgY05hbWU7DQotLy8gCUNGWF9XaWRlU3RyaW5nIGNSZXR1cm47DQotLy8gCUFQUF9NRU5VSVRFTV9BUlJBWSogb1N1Yk1lbnU7DQotLy8gCWJvb2wgYk1hcmtlZDsNCi0vLyAJYm9vbCBiRW5hYmxlZDsNCi0vLyB9Ow0KLQ0KLS8vIHN0cnVjdCBBUFBfTUVOVUlURU1fQVJSQVkNCi0vLyB7DQotLy8gCUFQUF9NRU5VSVRFTV9BUlJBWSgpIDogbV9oTWVudShOVUxMKSwgcENvbnRlbnRzKE5VTEwpLCBuU2l6ZSgwKQ0KLS8vIAl7DQotLy8gDQotLy8gCX0NCi0vLyAJQVBQX01FTlVJVEVNICogcENvbnRlbnRzOw0KLS8vIAlITUVOVSBtX2hNZW51Ow0KLS8vIAlpbnQJblNpemU7DQotLy8gfTsNCi0NCi0vLyBzdHJ1Y3QgQVBQX01FTlU7DQotLy8gc3RydWN0IEFQUF9NRU5VX0FSUkFZDQotLy8gew0KLS8vIAlBUFBfTUVOVV9BUlJBWSgpOg0KLS8vICAgICBwQ29udGVudChOVUxMKQ0KLS8vIAl7DQotLy8gCX0NCi0vLyANCi0vLyAJQVBQX01FTlUqIHBDb250ZW50Ow0KLS8vIH07DQotDQotLy8gc3RydWN0IEFQUF9NRU5VDQotLy8gew0KLS8vIAlBUFBfTUVOVSgpOmJTdWJNZW51KGZhbHNlKSwgDQotLy8gCVN1Yk1lbnVJdGVtcyhOVUxMKSwNCi0vLyAJY3dNZW51SXRlbU5hbWUoTCIiKSwNCi0vLyAJaE1lbnUoTlVMTCksDQotLy8gCWlTaXplKDApDQotLy8gCXsNCi0vLyANCi0vLyAJfQ0KLS8vIA0KLS8vIAlBUFBfTUVOVShDRlhfV2lkZVN0cmluZyAmY3dOYW1lKToNCi0vLyAJY3dNZW51SXRlbU5hbWUoY3dOYW1lKSwNCi0vLyAJYlN1Yk1lbnUoZmFsc2UpLA0KLS8vIAlTdWJNZW51SXRlbXMoTlVMTCksDQotLy8gCWhNZW51KE5VTEwpLA0KLS8vIAlpU2l6ZSgwKQ0KLS8vIAl7DQotLy8gDQotLy8gCX0NCi0vLyAJDQotLy8gCUNGWF9XaWRlU3RyaW5nIGN3TWVudUl0ZW1OYW1lOw0KLS8vIAlib29sIGJTdWJNZW51OwkNCi0vLyAJQVBQX01FTlVfQVJSQVkqIFN1Yk1lbnVJdGVtczsNCi0vLyAJaW50IGlTaXplOw0KLS8vIAlITUVOVSBoTWVudTsNCi0vLyB9Ow0KLQ0KLWNsYXNzIGFwcCA6IHB1YmxpYyBDSlNfRW1iZWRPYmoNCi17DQotcHVibGljOg0KLQlhcHAoQ0pTX09iamVjdCAqIHBKU09iamVjdCk7DQotCXZpcnR1YWwgfmFwcCgpOw0KLQ0KLXB1YmxpYzoNCi0JRlhfQk9PTAkJCQkJCWFjdGl2ZURvY3MoT0JKX1BST1BfUEFSQU1TKTsNCi0JRlhfQk9PTAkJCQkJCWNhbGN1bGF0ZShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCQkJCQkJZm9ybXNWZXJzaW9uKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wJCQkJCQlmcyhPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCQkJCQkJZnVsbHNjcmVlbihPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCQkJCQkJbGFuZ3VhZ2UoT0JKX1BST1BfUEFSQU1TKTsNCi0JRlhfQk9PTAkJCQkJCW1lZGlhKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wJCQkJCQlwbGF0Zm9ybShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCQkJCQkJcnVudGltZUhpZ2hsaWdodChPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCQkJCQkJdmlld2VyVHlwZShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MCQkJCQkJdmlld2VyVmFyaWF0aW9uKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wJCQkJCQl2aWV3ZXJWZXJzaW9uKE9CSl9QUk9QX1BBUkFNUyk7CQ0KLQ0KLQ0KLQlGWF9CT09MCQkJCQkJYWxlcnQoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MCQkJCQkJYmVlcChPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJCQkJCQlicm93c2VGb3JEb2MoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MCQkJCQkJY2xlYXJJbnRlcnZhbChPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJCQkJCQljbGVhclRpbWVPdXQoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MCQkJCQkJZXhlY0RpYWxvZyhPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJCQkJCQlleGVjTWVudUl0ZW0oT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MCQkJCQkJZmluZENvbXBvbmVudChPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJCQkJCQlnb0JhY2soT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MCQkJCQkJZ29Gb3J3YXJkKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTAkJCQkJCWxhdW5jaFVSTChPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJCQkJCQltYWlsTXNnKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTAkJCQkJCW5ld0ZERihPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJCQkJCQluZXdEb2MoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MCQkJCQkJb3BlbkRvYyhPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJCQkJCQlvcGVuRkRGKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTAkJCQkJCXBvcFVwTWVudUV4KE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTAkJCQkJCXBvcFVwTWVudShPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJCQkJCQlyZXNwb25zZShPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJCQkJCQlzZXRJbnRlcnZhbChPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wJCQkJCQlzZXRUaW1lT3V0KE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0NCi1wcml2YXRlOg0KLS8vCUZYX0RXT1JECQkJCQlBcHBHZXRUaWNrQ291bnQoKTsgDQotCXZvaWQJCQkJCQlUaW1lclByb2MoQ0pTX1RpbWVyKiBwVGltZXIpOw0KLQl2b2lkCQkJCQkJUnVuSnNTY3JpcHQoQ0pTX1J1bnRpbWUgKiBwUnVudGltZSxjb25zdCBDRlhfV2lkZVN0cmluZyAmIHdzU2NyaXB0KTsNCi0vLwl2b2lkCQkJCQkJUGFyc2VQb3B1cE1lbnVPYmooQVBQX01FTlVJVEVNICogcHBNZW51SXRlbSxKU09iamVjdCAqIHBPYmopOw0KLS8vCXZvaWQJCQkJCQlEZWxldGVNZW51SXRlbXMoQVBQX01FTlVJVEVNX0FSUkFZICogcE1lbnVJdGVtcyk7DQotLy8gCXZvaWQJCQkJCQlBZGRNZW51SXRlbShBUFBfTUVOVUlURU1fQVJSQVkgKiBwTWVudUl0ZW1zLCBITUVOVSBoTWVudSwgTUVOVUlURU1JTkZPIE1lbnVJdGVtSW5mbyk7DQotLy8gCXZvaWQJCQkJCQlJbml0TWVudUl0ZW1JbmZvKE1FTlVJVEVNSU5GTyYgTWVudUl0ZW1JbmZvKTsNCi0vLyAJdm9pZAkJCQkJCURlc3Ryb3lQb3BVcE1lbnUoKTsNCi0NCi0vLyAJdm9pZAkJCQkJCVBhcnNlck1lbnVJdGVtKEFQUF9NRU5VKiBwSGVhZCwgY29uc3QgQ0pTX1BhcmFtZXRlcnMmcGFyYW1zKTsNCi0vLyAJdm9pZAkJCQkJCUFkZEl0ZW1Ub01lbnUoQVBQX01FTlUqIHBIZWFkLCBITUVOVSBoTWVudSwgTUVOVUlURU1JTkZPIE1lbnVJdGVtSW5mbyk7DQotLy8gCXZvaWQJCQkJCQlEZXN0cm95TWVudUl0ZW1zKEFQUF9NRU5VKiBwSGVhZCk7DQotDQotcHVibGljOg0KLQlzdGF0aWMgQ0ZYX1dpZGVTdHJpbmcJCVN5c1BhdGhUb1BERlBhdGgoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNPbGRQYXRoKTsNCi0Jc3RhdGljIENGWF9XaWRlU3RyaW5nCQlQREZQYXRoVG9TeXNQYXRoKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzT2xkUGF0aCk7DQotCXN0YXRpYyBDRlhfV2lkZVN0cmluZwkJUmVsYXRpdmVQYXRoVG9TeXNQYXRoKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzT2xkUGF0aCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNGaWxlUGF0aCk7DQotDQotDQotcHJpdmF0ZToNCi0NCi0JYm9vbAkJCQkJCW1fYkNhbGN1bGF0ZTsJDQotCUNKU19SdW50aW1lKgkJCQltX3BSdW50aW1lOw0KLQlib29sCQkJCQkJbV9iUnVudGltZUhpZ2hMaWdodDsNCi0NCi0JQ0ZYX0FycmF5VGVtcGxhdGU8Q0pTX1RpbWVyKj4JbV9hVGltZXI7DQotLy8JQVBQX01FTlUqCQkJCQltX3BNZW51SGVhZDsNCi0JDQotcHVibGljOg0KLS8vCXN0YXRpYyBDUmVhZGVyX0FwcCogc19BcHA7DQotfTsNCi0NCi1jbGFzcyBDSlNfQXBwIDogcHVibGljIENKU19PYmplY3QNCi17DQotcHVibGljOg0KLQlDSlNfQXBwKEpTRlhPYmplY3QgIHBPYmplY3QpIDogQ0pTX09iamVjdChwT2JqZWN0KSB7fTsNCi0JdmlydHVhbCB+Q0pTX0FwcCh2b2lkKXt9Ow0KLQ0KLQlERUNMQVJFX0pTX0NMQVNTKENKU19BcHApOw0KLQ0KLQlKU19TVEFUSUNfUFJPUChhY3RpdmVEb2NzLCBhcHApOw0KLQlKU19TVEFUSUNfUFJPUChjYWxjdWxhdGUsIGFwcCk7DQotCUpTX1NUQVRJQ19QUk9QKGZvcm1zVmVyc2lvbiwgYXBwKTsNCi0JSlNfU1RBVElDX1BST1AoZnMsIGFwcCk7DQotCUpTX1NUQVRJQ19QUk9QKGZ1bGxzY3JlZW4sIGFwcCk7DQotCUpTX1NUQVRJQ19QUk9QKGxhbmd1YWdlLCBhcHApOw0KLQlKU19TVEFUSUNfUFJPUChtZWRpYSwgYXBwKTsNCi0JSlNfU1RBVElDX1BST1AocGxhdGZvcm0sIGFwcCk7DQotCUpTX1NUQVRJQ19QUk9QKHJ1bnRpbWVIaWdobGlnaHQsIGFwcCk7DQotCUpTX1NUQVRJQ19QUk9QKHZpZXdlclR5cGUsIGFwcCk7DQotCUpTX1NUQVRJQ19QUk9QKHZpZXdlclZhcmlhdGlvbiwgYXBwKTsNCi0JSlNfU1RBVElDX1BST1Aodmlld2VyVmVyc2lvbiwgYXBwKTsJDQotDQotCUpTX1NUQVRJQ19NRVRIT0QoYWxlcnQsIGFwcCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoYmVlcCwgYXBwKTsNCi0JSlNfU1RBVElDX01FVEhPRChicm93c2VGb3JEb2MsIGFwcCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoY2xlYXJJbnRlcnZhbCwgYXBwKTsNCi0JSlNfU1RBVElDX01FVEhPRChjbGVhclRpbWVPdXQsIGFwcCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoZXhlY0RpYWxvZywgYXBwKTsNCi0JSlNfU1RBVElDX01FVEhPRChleGVjTWVudUl0ZW0sIGFwcCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoZmluZENvbXBvbmVudCwgYXBwKTsNCi0JSlNfU1RBVElDX01FVEhPRChnb0JhY2ssIGFwcCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoZ29Gb3J3YXJkLCBhcHApOw0KLQlKU19TVEFUSUNfTUVUSE9EKGxhdW5jaFVSTCwgYXBwKTsNCi0JSlNfU1RBVElDX01FVEhPRChtYWlsTXNnLCBhcHApOw0KLQlKU19TVEFUSUNfTUVUSE9EKG5ld0ZERiwgYXBwKTsNCi0JSlNfU1RBVElDX01FVEhPRChuZXdEb2MsIGFwcCk7DQotCUpTX1NUQVRJQ19NRVRIT0Qob3BlbkRvYywgYXBwKTsNCi0JSlNfU1RBVElDX01FVEhPRChvcGVuRkRGLCBhcHApOw0KLQlKU19TVEFUSUNfTUVUSE9EKHBvcFVwTWVudUV4LCBhcHApOw0KLQlKU19TVEFUSUNfTUVUSE9EKHBvcFVwTWVudSwgYXBwKTsNCi0JSlNfU1RBVElDX01FVEhPRChyZXNwb25zZSwgYXBwKTsNCi0JSlNfU1RBVElDX01FVEhPRChzZXRJbnRlcnZhbCwgYXBwKTsNCi0JSlNfU1RBVElDX01FVEhPRChzZXRUaW1lT3V0LCBhcHApOw0KLQ0KLX07DQotDQotI2VuZGlmIC8vX0FQUF9IXw0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0FQUF9IXworI2RlZmluZSBfQVBQX0hfCisKK2NsYXNzIENKU19SdW50aW1lOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRpbWVyT2JqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworY2xhc3MgQ0pTX1RpbWVyOworCitjbGFzcyBUaW1lck9iaiA6IHB1YmxpYyBDSlNfRW1iZWRPYmoKK3sKK3B1YmxpYzoKKwlUaW1lck9iaihDSlNfT2JqZWN0KiBwSlNPYmplY3QpOworCXZpcnR1YWwgflRpbWVyT2JqKCk7CisJCitwdWJsaWM6CisJdm9pZAkJCVNldFRpbWVyKENKU19UaW1lciogcFRpbWVyKTsKKwlDSlNfVGltZXIqCQlHZXRUaW1lcigpIGNvbnN0OworCQorcHJpdmF0ZToKKwlDSlNfVGltZXIqCQltX3BUaW1lcjsKK307CisKK2NsYXNzIENKU19UaW1lck9iaiA6IHB1YmxpYyBDSlNfT2JqZWN0Cit7CitwdWJsaWM6CisJQ0pTX1RpbWVyT2JqKEpTRlhPYmplY3QgcE9iamVjdCkgOiBDSlNfT2JqZWN0KHBPYmplY3QpIHt9CisJdmlydHVhbCB+Q0pTX1RpbWVyT2JqKCl7fQorCQorCURFQ0xBUkVfSlNfQ0xBU1MoQ0pTX1RpbWVyT2JqKTsKK307CisKKworLy8gc3RydWN0IEFQUF9NRU5VSVRFTV9BUlJBWTsKKy8vIAorLy8gc3RydWN0IEFQUF9NRU5VSVRFTQorLy8geworLy8gCUFQUF9NRU5VSVRFTSgpIDogb1N1Yk1lbnUoTlVMTCksIGNOYW1lKEwiIiksIGNSZXR1cm4oTCIiKSwgYk1hcmtlZChmYWxzZSksIGJFbmFibGVkKHRydWUpCisvLyAJeworLy8gCX0KKy8vIAlDRlhfV2lkZVN0cmluZyBjTmFtZTsKKy8vIAlDRlhfV2lkZVN0cmluZyBjUmV0dXJuOworLy8gCUFQUF9NRU5VSVRFTV9BUlJBWSogb1N1Yk1lbnU7CisvLyAJYm9vbCBiTWFya2VkOworLy8gCWJvb2wgYkVuYWJsZWQ7CisvLyB9OworCisvLyBzdHJ1Y3QgQVBQX01FTlVJVEVNX0FSUkFZCisvLyB7CisvLyAJQVBQX01FTlVJVEVNX0FSUkFZKCkgOiBtX2hNZW51KE5VTEwpLCBwQ29udGVudHMoTlVMTCksIG5TaXplKDApCisvLyAJeworLy8gCisvLyAJfQorLy8gCUFQUF9NRU5VSVRFTSAqIHBDb250ZW50czsKKy8vIAlITUVOVSBtX2hNZW51OworLy8gCWludAluU2l6ZTsKKy8vIH07CisKKy8vIHN0cnVjdCBBUFBfTUVOVTsKKy8vIHN0cnVjdCBBUFBfTUVOVV9BUlJBWQorLy8geworLy8gCUFQUF9NRU5VX0FSUkFZKCk6CisvLyAgICAgcENvbnRlbnQoTlVMTCkKKy8vIAl7CisvLyAJfQorLy8gCisvLyAJQVBQX01FTlUqIHBDb250ZW50OworLy8gfTsKKworLy8gc3RydWN0IEFQUF9NRU5VCisvLyB7CisvLyAJQVBQX01FTlUoKTpiU3ViTWVudShmYWxzZSksIAorLy8gCVN1Yk1lbnVJdGVtcyhOVUxMKSwKKy8vIAljd01lbnVJdGVtTmFtZShMIiIpLAorLy8gCWhNZW51KE5VTEwpLAorLy8gCWlTaXplKDApCisvLyAJeworLy8gCisvLyAJfQorLy8gCisvLyAJQVBQX01FTlUoQ0ZYX1dpZGVTdHJpbmcgJmN3TmFtZSk6CisvLyAJY3dNZW51SXRlbU5hbWUoY3dOYW1lKSwKKy8vIAliU3ViTWVudShmYWxzZSksCisvLyAJU3ViTWVudUl0ZW1zKE5VTEwpLAorLy8gCWhNZW51KE5VTEwpLAorLy8gCWlTaXplKDApCisvLyAJeworLy8gCisvLyAJfQorLy8gCQorLy8gCUNGWF9XaWRlU3RyaW5nIGN3TWVudUl0ZW1OYW1lOworLy8gCWJvb2wgYlN1Yk1lbnU7CQorLy8gCUFQUF9NRU5VX0FSUkFZKiBTdWJNZW51SXRlbXM7CisvLyAJaW50IGlTaXplOworLy8gCUhNRU5VIGhNZW51OworLy8gfTsKKworY2xhc3MgYXBwIDogcHVibGljIENKU19FbWJlZE9iagoreworcHVibGljOgorCWFwcChDSlNfT2JqZWN0ICogcEpTT2JqZWN0KTsKKwl2aXJ0dWFsIH5hcHAoKTsKKworcHVibGljOgorCUZYX0JPT0wJCQkJCQlhY3RpdmVEb2NzKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTAkJCQkJCWNhbGN1bGF0ZShPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wJCQkJCQlmb3Jtc1ZlcnNpb24oT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MCQkJCQkJZnMoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MCQkJCQkJZnVsbHNjcmVlbihPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wJCQkJCQlsYW5ndWFnZShPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wJCQkJCQltZWRpYShPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wJCQkJCQlwbGF0Zm9ybShPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wJCQkJCQlydW50aW1lSGlnaGxpZ2h0KE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTAkJCQkJCXZpZXdlclR5cGUoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MCQkJCQkJdmlld2VyVmFyaWF0aW9uKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTAkJCQkJCXZpZXdlclZlcnNpb24oT0JKX1BST1BfUEFSQU1TKTsJCisKKworCUZYX0JPT0wJCQkJCQlhbGVydChPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTAkJCQkJCWJlZXAoT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wJCQkJCQlicm93c2VGb3JEb2MoT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wJCQkJCQljbGVhckludGVydmFsKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MCQkJCQkJY2xlYXJUaW1lT3V0KE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MCQkJCQkJZXhlY0RpYWxvZyhPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTAkJCQkJCWV4ZWNNZW51SXRlbShPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTAkJCQkJCWZpbmRDb21wb25lbnQoT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wJCQkJCQlnb0JhY2soT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wJCQkJCQlnb0ZvcndhcmQoT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wJCQkJCQlsYXVuY2hVUkwoT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wJCQkJCQltYWlsTXNnKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MCQkJCQkJbmV3RkRGKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MCQkJCQkJbmV3RG9jKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MCQkJCQkJb3BlbkRvYyhPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTAkJCQkJCW9wZW5GREYoT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wJCQkJCQlwb3BVcE1lbnVFeChPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTAkJCQkJCXBvcFVwTWVudShPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTAkJCQkJCXJlc3BvbnNlKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MCQkJCQkJc2V0SW50ZXJ2YWwoT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wJCQkJCQlzZXRUaW1lT3V0KE9CSl9NRVRIT0RfUEFSQU1TKTsKKworcHJpdmF0ZToKKy8vCUZYX0RXT1JECQkJCQlBcHBHZXRUaWNrQ291bnQoKTsgCisJdm9pZAkJCQkJCVRpbWVyUHJvYyhDSlNfVGltZXIqIHBUaW1lcik7CisJdm9pZAkJCQkJCVJ1bkpzU2NyaXB0KENKU19SdW50aW1lICogcFJ1bnRpbWUsY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJiB3c1NjcmlwdCk7CisvLwl2b2lkCQkJCQkJUGFyc2VQb3B1cE1lbnVPYmooQVBQX01FTlVJVEVNICogcHBNZW51SXRlbSxKU09iamVjdCAqIHBPYmopOworLy8Jdm9pZAkJCQkJCURlbGV0ZU1lbnVJdGVtcyhBUFBfTUVOVUlURU1fQVJSQVkgKiBwTWVudUl0ZW1zKTsKKy8vIAl2b2lkCQkJCQkJQWRkTWVudUl0ZW0oQVBQX01FTlVJVEVNX0FSUkFZICogcE1lbnVJdGVtcywgSE1FTlUgaE1lbnUsIE1FTlVJVEVNSU5GTyBNZW51SXRlbUluZm8pOworLy8gCXZvaWQJCQkJCQlJbml0TWVudUl0ZW1JbmZvKE1FTlVJVEVNSU5GTyYgTWVudUl0ZW1JbmZvKTsKKy8vIAl2b2lkCQkJCQkJRGVzdHJveVBvcFVwTWVudSgpOworCisvLyAJdm9pZAkJCQkJCVBhcnNlck1lbnVJdGVtKEFQUF9NRU5VKiBwSGVhZCwgY29uc3QgQ0pTX1BhcmFtZXRlcnMmcGFyYW1zKTsKKy8vIAl2b2lkCQkJCQkJQWRkSXRlbVRvTWVudShBUFBfTUVOVSogcEhlYWQsIEhNRU5VIGhNZW51LCBNRU5VSVRFTUlORk8gTWVudUl0ZW1JbmZvKTsKKy8vIAl2b2lkCQkJCQkJRGVzdHJveU1lbnVJdGVtcyhBUFBfTUVOVSogcEhlYWQpOworCitwdWJsaWM6CisJc3RhdGljIENGWF9XaWRlU3RyaW5nCQlTeXNQYXRoVG9QREZQYXRoKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzT2xkUGF0aCk7CisJc3RhdGljIENGWF9XaWRlU3RyaW5nCQlQREZQYXRoVG9TeXNQYXRoKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzT2xkUGF0aCk7CisJc3RhdGljIENGWF9XaWRlU3RyaW5nCQlSZWxhdGl2ZVBhdGhUb1N5c1BhdGgoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNPbGRQYXRoLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc0ZpbGVQYXRoKTsKKworCitwcml2YXRlOgorCisJYm9vbAkJCQkJCW1fYkNhbGN1bGF0ZTsJCisJQ0pTX1J1bnRpbWUqCQkJCW1fcFJ1bnRpbWU7CisJYm9vbAkJCQkJCW1fYlJ1bnRpbWVIaWdoTGlnaHQ7CisKKwlDRlhfQXJyYXlUZW1wbGF0ZTxDSlNfVGltZXIqPgltX2FUaW1lcjsKKy8vCUFQUF9NRU5VKgkJCQkJbV9wTWVudUhlYWQ7CisJCitwdWJsaWM6CisvLwlzdGF0aWMgQ1JlYWRlcl9BcHAqIHNfQXBwOworfTsKKworY2xhc3MgQ0pTX0FwcCA6IHB1YmxpYyBDSlNfT2JqZWN0Cit7CitwdWJsaWM6CisJQ0pTX0FwcChKU0ZYT2JqZWN0ICBwT2JqZWN0KSA6IENKU19PYmplY3QocE9iamVjdCkge307CisJdmlydHVhbCB+Q0pTX0FwcCh2b2lkKXt9OworCisJREVDTEFSRV9KU19DTEFTUyhDSlNfQXBwKTsKKworCUpTX1NUQVRJQ19QUk9QKGFjdGl2ZURvY3MsIGFwcCk7CisJSlNfU1RBVElDX1BST1AoY2FsY3VsYXRlLCBhcHApOworCUpTX1NUQVRJQ19QUk9QKGZvcm1zVmVyc2lvbiwgYXBwKTsKKwlKU19TVEFUSUNfUFJPUChmcywgYXBwKTsKKwlKU19TVEFUSUNfUFJPUChmdWxsc2NyZWVuLCBhcHApOworCUpTX1NUQVRJQ19QUk9QKGxhbmd1YWdlLCBhcHApOworCUpTX1NUQVRJQ19QUk9QKG1lZGlhLCBhcHApOworCUpTX1NUQVRJQ19QUk9QKHBsYXRmb3JtLCBhcHApOworCUpTX1NUQVRJQ19QUk9QKHJ1bnRpbWVIaWdobGlnaHQsIGFwcCk7CisJSlNfU1RBVElDX1BST1Aodmlld2VyVHlwZSwgYXBwKTsKKwlKU19TVEFUSUNfUFJPUCh2aWV3ZXJWYXJpYXRpb24sIGFwcCk7CisJSlNfU1RBVElDX1BST1Aodmlld2VyVmVyc2lvbiwgYXBwKTsJCisKKwlKU19TVEFUSUNfTUVUSE9EKGFsZXJ0LCBhcHApOworCUpTX1NUQVRJQ19NRVRIT0QoYmVlcCwgYXBwKTsKKwlKU19TVEFUSUNfTUVUSE9EKGJyb3dzZUZvckRvYywgYXBwKTsKKwlKU19TVEFUSUNfTUVUSE9EKGNsZWFySW50ZXJ2YWwsIGFwcCk7CisJSlNfU1RBVElDX01FVEhPRChjbGVhclRpbWVPdXQsIGFwcCk7CisJSlNfU1RBVElDX01FVEhPRChleGVjRGlhbG9nLCBhcHApOworCUpTX1NUQVRJQ19NRVRIT0QoZXhlY01lbnVJdGVtLCBhcHApOworCUpTX1NUQVRJQ19NRVRIT0QoZmluZENvbXBvbmVudCwgYXBwKTsKKwlKU19TVEFUSUNfTUVUSE9EKGdvQmFjaywgYXBwKTsKKwlKU19TVEFUSUNfTUVUSE9EKGdvRm9yd2FyZCwgYXBwKTsKKwlKU19TVEFUSUNfTUVUSE9EKGxhdW5jaFVSTCwgYXBwKTsKKwlKU19TVEFUSUNfTUVUSE9EKG1haWxNc2csIGFwcCk7CisJSlNfU1RBVElDX01FVEhPRChuZXdGREYsIGFwcCk7CisJSlNfU1RBVElDX01FVEhPRChuZXdEb2MsIGFwcCk7CisJSlNfU1RBVElDX01FVEhPRChvcGVuRG9jLCBhcHApOworCUpTX1NUQVRJQ19NRVRIT0Qob3BlbkZERiwgYXBwKTsKKwlKU19TVEFUSUNfTUVUSE9EKHBvcFVwTWVudUV4LCBhcHApOworCUpTX1NUQVRJQ19NRVRIT0QocG9wVXBNZW51LCBhcHApOworCUpTX1NUQVRJQ19NRVRIT0QocmVzcG9uc2UsIGFwcCk7CisJSlNfU1RBVElDX01FVEhPRChzZXRJbnRlcnZhbCwgYXBwKTsKKwlKU19TVEFUSUNfTUVUSE9EKHNldFRpbWVPdXQsIGFwcCk7CisKK307CisKKyNlbmRpZiAvL19BUFBfSF8KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L2NvbG9yLmggYi9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9jb2xvci5oCmluZGV4IDE5MTBlMTYuLmQwYWE3MmYgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L2NvbG9yLmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvY29sb3IuaApAQCAtMSw3OCArMSw3OCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfQ09MT1JfSF8NCi0jZGVmaW5lIF9DT0xPUl9IXw0KLQ0KLWNsYXNzIGNvbG9yIDogcHVibGljIENKU19FbWJlZE9iag0KLXsNCi1wdWJsaWM6DQotCWNvbG9yKENKU19PYmplY3QqIHBKU09iamVjdCk7DQotCXZpcnR1YWwgfmNvbG9yKHZvaWQpOw0KLQ0KLQlGWF9CT09MIGJsYWNrKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgYmx1ZShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIGN5YW4oT0JKX1BST1BfUEFSQU1TKTsJDQotCUZYX0JPT0wgZGtHcmF5KE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgZ3JheShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIGdyZWVuKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgbHRHcmF5KE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgbWFnZW50YShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIHJlZChPQkpfUFJPUF9QQVJBTVMpOwkNCi0JRlhfQk9PTCB0cmFuc3BhcmVudChPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIHdoaXRlKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgeWVsbG93KE9CSl9QUk9QX1BBUkFNUyk7DQotDQotCUZYX0JPT0wgY29udmVydChPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wgZXF1YWwoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQ0KLXB1YmxpYzogIA0KLQlzdGF0aWMgdm9pZAkJQ29udmVydFBXTENvbG9yVG9BcnJheShjb25zdCBDUFdMX0NvbG9yJiBjb2xvciwgQ0pTX0FycmF5JiBhcnJheSk7DQotCXN0YXRpYyB2b2lkCQlDb252ZXJ0QXJyYXlUb1BXTENvbG9yKENKU19BcnJheSYgYXJyYXksIENQV0xfQ29sb3ImIGNvbG9yKTsNCi0NCi1wcml2YXRlOg0KLQlDUFdMX0NvbG9yCQltX2NyVHJhbnNwYXJlbnQ7DQotCUNQV0xfQ29sb3IJCW1fY3JCbGFjazsNCi0JQ1BXTF9Db2xvcgkJbV9jcldoaXRlOw0KLQlDUFdMX0NvbG9yCQltX2NyUmVkOw0KLQlDUFdMX0NvbG9yCQltX2NyR3JlZW47DQotCUNQV0xfQ29sb3IJCW1fY3JCbHVlOw0KLQlDUFdMX0NvbG9yCQltX2NyQ3lhbjsNCi0JQ1BXTF9Db2xvcgkJbV9jck1hZ2VudGE7DQotCUNQV0xfQ29sb3IJCW1fY3JZZWxsb3c7DQotCUNQV0xfQ29sb3IJCW1fY3JES0dyYXk7DQotCUNQV0xfQ29sb3IJCW1fY3JHcmF5Ow0KLQlDUFdMX0NvbG9yCQltX2NyTFRHcmF5Ow0KLX07DQotDQotY2xhc3MgQ0pTX0NvbG9yIDogcHVibGljIENKU19PYmplY3QNCi17DQotcHVibGljOg0KLQlDSlNfQ29sb3IoSlNGWE9iamVjdCAgcE9iamVjdCkgOiBDSlNfT2JqZWN0KHBPYmplY3QpIHt9Ow0KLQl2aXJ0dWFsIH5DSlNfQ29sb3Iodm9pZCl7fTsNCi0NCi0JREVDTEFSRV9KU19DTEFTUyhDSlNfQ29sb3IpOw0KLQ0KLQlKU19TVEFUSUNfUFJPUChibGFjaywgY29sb3IpOw0KLQlKU19TVEFUSUNfUFJPUChibHVlLCBjb2xvcik7DQotCUpTX1NUQVRJQ19QUk9QKGN5YW4sIGNvbG9yKTsJDQotCUpTX1NUQVRJQ19QUk9QKGRrR3JheSwgY29sb3IpOw0KLQlKU19TVEFUSUNfUFJPUChncmF5LCBjb2xvcik7DQotCUpTX1NUQVRJQ19QUk9QKGdyZWVuLCBjb2xvcik7DQotCUpTX1NUQVRJQ19QUk9QKGx0R3JheSwgY29sb3IpOw0KLQlKU19TVEFUSUNfUFJPUChtYWdlbnRhLCBjb2xvcik7DQotCUpTX1NUQVRJQ19QUk9QKHJlZCwgY29sb3IpOwkNCi0JSlNfU1RBVElDX1BST1AodHJhbnNwYXJlbnQsIGNvbG9yKTsNCi0JSlNfU1RBVElDX1BST1Aod2hpdGUsIGNvbG9yKTsNCi0JSlNfU1RBVElDX1BST1AoeWVsbG93LCBjb2xvcik7DQotDQotCUpTX1NUQVRJQ19NRVRIT0QoY29udmVydCxjb2xvcik7DQotCUpTX1NUQVRJQ19NRVRIT0QoZXF1YWwsY29sb3IpOw0KLQ0KLX07DQotDQotI2VuZGlmIC8vX0NPTE9SX0hfDQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfQ09MT1JfSF8KKyNkZWZpbmUgX0NPTE9SX0hfCisKK2NsYXNzIGNvbG9yIDogcHVibGljIENKU19FbWJlZE9iagoreworcHVibGljOgorCWNvbG9yKENKU19PYmplY3QqIHBKU09iamVjdCk7CisJdmlydHVhbCB+Y29sb3Iodm9pZCk7CisKKwlGWF9CT09MIGJsYWNrKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBibHVlKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBjeWFuKE9CSl9QUk9QX1BBUkFNUyk7CQorCUZYX0JPT0wgZGtHcmF5KE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBncmF5KE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBncmVlbihPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgbHRHcmF5KE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBtYWdlbnRhKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCByZWQoT0JKX1BST1BfUEFSQU1TKTsJCisJRlhfQk9PTCB0cmFuc3BhcmVudChPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgd2hpdGUoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIHllbGxvdyhPQkpfUFJPUF9QQVJBTVMpOworCisJRlhfQk9PTCBjb252ZXJ0KE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MIGVxdWFsKE9CSl9NRVRIT0RfUEFSQU1TKTsKKworcHVibGljOiAgCisJc3RhdGljIHZvaWQJCUNvbnZlcnRQV0xDb2xvclRvQXJyYXkoY29uc3QgQ1BXTF9Db2xvciYgY29sb3IsIENKU19BcnJheSYgYXJyYXkpOworCXN0YXRpYyB2b2lkCQlDb252ZXJ0QXJyYXlUb1BXTENvbG9yKENKU19BcnJheSYgYXJyYXksIENQV0xfQ29sb3ImIGNvbG9yKTsKKworcHJpdmF0ZToKKwlDUFdMX0NvbG9yCQltX2NyVHJhbnNwYXJlbnQ7CisJQ1BXTF9Db2xvcgkJbV9jckJsYWNrOworCUNQV0xfQ29sb3IJCW1fY3JXaGl0ZTsKKwlDUFdMX0NvbG9yCQltX2NyUmVkOworCUNQV0xfQ29sb3IJCW1fY3JHcmVlbjsKKwlDUFdMX0NvbG9yCQltX2NyQmx1ZTsKKwlDUFdMX0NvbG9yCQltX2NyQ3lhbjsKKwlDUFdMX0NvbG9yCQltX2NyTWFnZW50YTsKKwlDUFdMX0NvbG9yCQltX2NyWWVsbG93OworCUNQV0xfQ29sb3IJCW1fY3JES0dyYXk7CisJQ1BXTF9Db2xvcgkJbV9jckdyYXk7CisJQ1BXTF9Db2xvcgkJbV9jckxUR3JheTsKK307CisKK2NsYXNzIENKU19Db2xvciA6IHB1YmxpYyBDSlNfT2JqZWN0Cit7CitwdWJsaWM6CisJQ0pTX0NvbG9yKEpTRlhPYmplY3QgIHBPYmplY3QpIDogQ0pTX09iamVjdChwT2JqZWN0KSB7fTsKKwl2aXJ0dWFsIH5DSlNfQ29sb3Iodm9pZCl7fTsKKworCURFQ0xBUkVfSlNfQ0xBU1MoQ0pTX0NvbG9yKTsKKworCUpTX1NUQVRJQ19QUk9QKGJsYWNrLCBjb2xvcik7CisJSlNfU1RBVElDX1BST1AoYmx1ZSwgY29sb3IpOworCUpTX1NUQVRJQ19QUk9QKGN5YW4sIGNvbG9yKTsJCisJSlNfU1RBVElDX1BST1AoZGtHcmF5LCBjb2xvcik7CisJSlNfU1RBVElDX1BST1AoZ3JheSwgY29sb3IpOworCUpTX1NUQVRJQ19QUk9QKGdyZWVuLCBjb2xvcik7CisJSlNfU1RBVElDX1BST1AobHRHcmF5LCBjb2xvcik7CisJSlNfU1RBVElDX1BST1AobWFnZW50YSwgY29sb3IpOworCUpTX1NUQVRJQ19QUk9QKHJlZCwgY29sb3IpOwkKKwlKU19TVEFUSUNfUFJPUCh0cmFuc3BhcmVudCwgY29sb3IpOworCUpTX1NUQVRJQ19QUk9QKHdoaXRlLCBjb2xvcik7CisJSlNfU1RBVElDX1BST1AoeWVsbG93LCBjb2xvcik7CisKKwlKU19TVEFUSUNfTUVUSE9EKGNvbnZlcnQsY29sb3IpOworCUpTX1NUQVRJQ19NRVRIT0QoZXF1YWwsY29sb3IpOworCit9OworCisjZW5kaWYgLy9fQ09MT1JfSF8KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvY29uc29sZS5oIGIvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvY29uc29sZS5oCmluZGV4IDk4YTMyOTMuLjcwZDk5M2IgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L2NvbnNvbGUuaAorKysgYi9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9jb25zb2xlLmgKQEAgLTEsMzggKzEsMzggQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0NPTlNPTEVfSF8NCi0jZGVmaW5lIF9DT05TT0xFX0hfDQotDQotY2xhc3MgY29uc29sZSA6IHB1YmxpYyBDSlNfRW1iZWRPYmoNCi17DQotcHVibGljOg0KLQljb25zb2xlKENKU19PYmplY3QqIHBKU09iamVjdCk7DQotCXZpcnR1YWwgfmNvbnNvbGUodm9pZCk7DQotDQotcHVibGljOg0KLQlGWF9CT09MIGNsZWFyKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTCBoaWRlKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTCBwcmludGxuKE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTCBzaG93KE9CSl9NRVRIT0RfUEFSQU1TKTsNCi19Ow0KLQ0KLWNsYXNzIENKU19Db25zb2xlIDogcHVibGljIENKU19PYmplY3QgIA0KLXsNCi1wdWJsaWM6DQotCUNKU19Db25zb2xlKEpTRlhPYmplY3QgcE9iamVjdCkgOiBDSlNfT2JqZWN0KHBPYmplY3QpIHt9Ow0KLQl2aXJ0dWFsIH5DSlNfQ29uc29sZSh2b2lkKXt9Ow0KLQ0KLQlERUNMQVJFX0pTX0NMQVNTKENKU19Db25zb2xlKTsNCi0NCi0JSlNfU1RBVElDX01FVEhPRChjbGVhciwgY29uc29sZSk7DQotCUpTX1NUQVRJQ19NRVRIT0QoaGlkZSwgY29uc29sZSk7DQotCUpTX1NUQVRJQ19NRVRIT0QocHJpbnRsbiwgY29uc29sZSk7DQotCUpTX1NUQVRJQ19NRVRIT0Qoc2hvdywgY29uc29sZSk7DQotfTsNCi0NCi0jZW5kaWYgLy9fQ09OU09MRV9IXw0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0NPTlNPTEVfSF8KKyNkZWZpbmUgX0NPTlNPTEVfSF8KKworY2xhc3MgY29uc29sZSA6IHB1YmxpYyBDSlNfRW1iZWRPYmoKK3sKK3B1YmxpYzoKKwljb25zb2xlKENKU19PYmplY3QqIHBKU09iamVjdCk7CisJdmlydHVhbCB+Y29uc29sZSh2b2lkKTsKKworcHVibGljOgorCUZYX0JPT0wgY2xlYXIoT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wgaGlkZShPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTCBwcmludGxuKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MIHNob3coT0JKX01FVEhPRF9QQVJBTVMpOworfTsKKworY2xhc3MgQ0pTX0NvbnNvbGUgOiBwdWJsaWMgQ0pTX09iamVjdCAgCit7CitwdWJsaWM6CisJQ0pTX0NvbnNvbGUoSlNGWE9iamVjdCBwT2JqZWN0KSA6IENKU19PYmplY3QocE9iamVjdCkge307CisJdmlydHVhbCB+Q0pTX0NvbnNvbGUodm9pZCl7fTsKKworCURFQ0xBUkVfSlNfQ0xBU1MoQ0pTX0NvbnNvbGUpOworCisJSlNfU1RBVElDX01FVEhPRChjbGVhciwgY29uc29sZSk7CisJSlNfU1RBVElDX01FVEhPRChoaWRlLCBjb25zb2xlKTsKKwlKU19TVEFUSUNfTUVUSE9EKHByaW50bG4sIGNvbnNvbGUpOworCUpTX1NUQVRJQ19NRVRIT0Qoc2hvdywgY29uc29sZSk7Cit9OworCisjZW5kaWYgLy9fQ09OU09MRV9IXworCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9ldmVudC5oIGIvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvZXZlbnQuaAppbmRleCA5MWYyYzY1Li4wNDBhOTMzIDEwMDY0NAotLS0gYS9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9ldmVudC5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L2V2ZW50LmgKQEAgLTEsNzAgKzEsNzAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX0VWRU5UX0hfDQotI2RlZmluZSBfRVZFTlRfSF8NCi0NCi1jbGFzcyBldmVudCA6IHB1YmxpYyBDSlNfRW1iZWRPYmoNCi17DQotcHVibGljOg0KLQlldmVudChDSlNfT2JqZWN0ICogcEpTT2JqZWN0KTsNCi0JdmlydHVhbCB+ZXZlbnQodm9pZCk7DQotDQotcHVibGljOg0KLQlGWF9CT09MIGNoYW5nZShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIGNoYW5nZUV4KE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgY29tbWl0S2V5KE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgZmllbGRGdWxsKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wga2V5RG93bihPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIG1vZGlmaWVyKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgbmFtZShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIHJjKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgcmljaENoYW5nZShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIHJpY2hDaGFuZ2VFeChPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIHJpY2hWYWx1ZShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIHNlbEVuZChPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIHNlbFN0YXJ0KE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgc2hpZnQoT0JKX1BST1BfUEFSQU1TKTsNCi0JRlhfQk9PTCBzb3VyY2UoT0JKX1BST1BfUEFSQU1TKTsNCi0JRlhfQk9PTCB0YXJnZXQoT0JKX1BST1BfUEFSQU1TKTsNCi0JRlhfQk9PTCB0YXJnZXROYW1lKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgdHlwZShPQkpfUFJPUF9QQVJBTVMpOw0KLQlGWF9CT09MIHZhbHVlKE9CSl9QUk9QX1BBUkFNUyk7DQotCUZYX0JPT0wgd2lsbENvbW1pdChPQkpfUFJPUF9QQVJBTVMpOw0KLQ0KLX07DQotDQotY2xhc3MgQ0pTX0V2ZW50IDogcHVibGljIENKU19PYmplY3QNCi17DQotcHVibGljOg0KLQlDSlNfRXZlbnQoSlNGWE9iamVjdCAgcE9iamVjdCkgOiBDSlNfT2JqZWN0KHBPYmplY3QpIHt9Ow0KLQl2aXJ0dWFsIH5DSlNfRXZlbnQodm9pZCl7fTsNCi0NCi0JREVDTEFSRV9KU19DTEFTUyhDSlNfRXZlbnQpOw0KLQ0KLQlKU19TVEFUSUNfUFJPUChjaGFuZ2UsIGV2ZW50KTsNCi0JSlNfU1RBVElDX1BST1AoY2hhbmdlRXgsIGV2ZW50KTsNCi0JSlNfU1RBVElDX1BST1AoY29tbWl0S2V5LCBldmVudCk7DQotCUpTX1NUQVRJQ19QUk9QKGZpZWxkRnVsbCwgZXZlbnQpOw0KLQlKU19TVEFUSUNfUFJPUChrZXlEb3duLCBldmVudCk7DQotCUpTX1NUQVRJQ19QUk9QKG1vZGlmaWVyLCBldmVudCk7DQotCUpTX1NUQVRJQ19QUk9QKG5hbWUsIGV2ZW50KTsNCi0JSlNfU1RBVElDX1BST1AocmMsIGV2ZW50KTsNCi0JSlNfU1RBVElDX1BST1AocmljaENoYW5nZSwgZXZlbnQpOw0KLQlKU19TVEFUSUNfUFJPUChyaWNoQ2hhbmdlRXgsIGV2ZW50KTsNCi0JSlNfU1RBVElDX1BST1AocmljaFZhbHVlLCBldmVudCk7DQotCUpTX1NUQVRJQ19QUk9QKHNlbEVuZCwgZXZlbnQpOw0KLQlKU19TVEFUSUNfUFJPUChzZWxTdGFydCwgZXZlbnQpOw0KLQlKU19TVEFUSUNfUFJPUChzaGlmdCwgZXZlbnQpOw0KLQlKU19TVEFUSUNfUFJPUChzb3VyY2UsIGV2ZW50KTsNCi0JSlNfU1RBVElDX1BST1AodGFyZ2V0LCBldmVudCk7DQotCUpTX1NUQVRJQ19QUk9QKHRhcmdldE5hbWUsIGV2ZW50KTsNCi0JSlNfU1RBVElDX1BST1AodHlwZSwgZXZlbnQpOw0KLQlKU19TVEFUSUNfUFJPUCh2YWx1ZSwgZXZlbnQpOw0KLQlKU19TVEFUSUNfUFJPUCh3aWxsQ29tbWl0LCBldmVudCk7DQotfTsNCi0NCi0jZW5kaWYgLy9fRVZFTlRfSF8NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9FVkVOVF9IXworI2RlZmluZSBfRVZFTlRfSF8KKworY2xhc3MgZXZlbnQgOiBwdWJsaWMgQ0pTX0VtYmVkT2JqCit7CitwdWJsaWM6CisJZXZlbnQoQ0pTX09iamVjdCAqIHBKU09iamVjdCk7CisJdmlydHVhbCB+ZXZlbnQodm9pZCk7CisKK3B1YmxpYzoKKwlGWF9CT09MIGNoYW5nZShPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgY2hhbmdlRXgoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIGNvbW1pdEtleShPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgZmllbGRGdWxsKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBrZXlEb3duKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBtb2RpZmllcihPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgbmFtZShPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgcmMoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIHJpY2hDaGFuZ2UoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIHJpY2hDaGFuZ2VFeChPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgcmljaFZhbHVlKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBzZWxFbmQoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIHNlbFN0YXJ0KE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCBzaGlmdChPQkpfUFJPUF9QQVJBTVMpOworCUZYX0JPT0wgc291cmNlKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCB0YXJnZXQoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIHRhcmdldE5hbWUoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIHR5cGUoT0JKX1BST1BfUEFSQU1TKTsKKwlGWF9CT09MIHZhbHVlKE9CSl9QUk9QX1BBUkFNUyk7CisJRlhfQk9PTCB3aWxsQ29tbWl0KE9CSl9QUk9QX1BBUkFNUyk7CisKK307CisKK2NsYXNzIENKU19FdmVudCA6IHB1YmxpYyBDSlNfT2JqZWN0Cit7CitwdWJsaWM6CisJQ0pTX0V2ZW50KEpTRlhPYmplY3QgIHBPYmplY3QpIDogQ0pTX09iamVjdChwT2JqZWN0KSB7fTsKKwl2aXJ0dWFsIH5DSlNfRXZlbnQodm9pZCl7fTsKKworCURFQ0xBUkVfSlNfQ0xBU1MoQ0pTX0V2ZW50KTsKKworCUpTX1NUQVRJQ19QUk9QKGNoYW5nZSwgZXZlbnQpOworCUpTX1NUQVRJQ19QUk9QKGNoYW5nZUV4LCBldmVudCk7CisJSlNfU1RBVElDX1BST1AoY29tbWl0S2V5LCBldmVudCk7CisJSlNfU1RBVElDX1BST1AoZmllbGRGdWxsLCBldmVudCk7CisJSlNfU1RBVElDX1BST1Aoa2V5RG93biwgZXZlbnQpOworCUpTX1NUQVRJQ19QUk9QKG1vZGlmaWVyLCBldmVudCk7CisJSlNfU1RBVElDX1BST1AobmFtZSwgZXZlbnQpOworCUpTX1NUQVRJQ19QUk9QKHJjLCBldmVudCk7CisJSlNfU1RBVElDX1BST1AocmljaENoYW5nZSwgZXZlbnQpOworCUpTX1NUQVRJQ19QUk9QKHJpY2hDaGFuZ2VFeCwgZXZlbnQpOworCUpTX1NUQVRJQ19QUk9QKHJpY2hWYWx1ZSwgZXZlbnQpOworCUpTX1NUQVRJQ19QUk9QKHNlbEVuZCwgZXZlbnQpOworCUpTX1NUQVRJQ19QUk9QKHNlbFN0YXJ0LCBldmVudCk7CisJSlNfU1RBVElDX1BST1Aoc2hpZnQsIGV2ZW50KTsKKwlKU19TVEFUSUNfUFJPUChzb3VyY2UsIGV2ZW50KTsKKwlKU19TVEFUSUNfUFJPUCh0YXJnZXQsIGV2ZW50KTsKKwlKU19TVEFUSUNfUFJPUCh0YXJnZXROYW1lLCBldmVudCk7CisJSlNfU1RBVElDX1BST1AodHlwZSwgZXZlbnQpOworCUpTX1NUQVRJQ19QUk9QKHZhbHVlLCBldmVudCk7CisJSlNfU1RBVElDX1BST1Aod2lsbENvbW1pdCwgZXZlbnQpOworfTsKKworI2VuZGlmIC8vX0VWRU5UX0hfCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9nbG9iYWwuaCBiL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L2dsb2JhbC5oCmluZGV4IDdlZmZkNTcuLmY1ODY3YzUgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L2dsb2JhbC5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L2dsb2JhbC5oCkBAIC0xLDg1ICsxLDg1IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9HTE9CQUxfSF8NCi0jZGVmaW5lIF9HTE9CQUxfSF8NCi0NCi1jbGFzcyBDSlNfR2xvYmFsRGF0YTsNCi0NCi1zdHJ1Y3QganNfZ2xvYmFsX2RhdGENCi17DQotCWpzX2dsb2JhbF9kYXRhKCkNCi0Jew0KLQkJblR5cGUgPSAwOw0KLQkJZERhdGEgPSAwOw0KLQkJYkRhdGEgPSBGQUxTRTsNCi0JCXNEYXRhID0gIiI7DQotCQliUGVyc2lzdGVudCA9IEZBTFNFOw0KLQkJYkRlbGV0ZWQgPSBGQUxTRTsNCi0JfQ0KLQ0KLQl+anNfZ2xvYmFsX2RhdGEoKQ0KLQl7DQotCQlwRGF0YS5SZXNldCgpOw0KLQl9DQotCWludAkJCQkJblR5cGU7IC8vMDppbnQgMTpib29sIDI6c3RyaW5nIDM6b2JqDQotCWRvdWJsZQkJCQlkRGF0YTsNCi0JYm9vbAkJCQliRGF0YTsNCi0JQ0ZYX0J5dGVTdHJpbmcJCXNEYXRhOw0KLQl2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiAgcERhdGE7DQotCWJvb2wJCQkJYlBlcnNpc3RlbnQ7DQotCWJvb2wJCQkJYkRlbGV0ZWQ7DQotfTsNCi0NCi1jbGFzcyBnbG9iYWxfYWx0ZXJuYXRlIDogcHVibGljIENKU19FbWJlZE9iag0KLXsNCi1wdWJsaWM6DQotCWdsb2JhbF9hbHRlcm5hdGUoQ0pTX09iamVjdCogcEpTT2JqZWN0KTsNCi0JdmlydHVhbCB+Z2xvYmFsX2FsdGVybmF0ZSgpOw0KLQ0KLXB1YmxpYzoNCi0JRlhfQk9PTAkJCQkJCXNldFBlcnNpc3RlbnQoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQ0KLXB1YmxpYzoNCi0JRlhfQk9PTAkJCQkJCVF1ZXJ5UHJvcGVydHkoRlhfTFBDV1NUUiBwcm9wbmFtZSk7DQotCUZYX0JPT0wJCQkJCQlEb1Byb3BlcnR5KElGWEpTX0NvbnRleHQqIGNjLCBGWF9MUENXU1RSIHByb3BuYW1lLCBDSlNfUHJvcFZhbHVlICYgdnAsIEpTX0Vycm9yU3RyaW5nICYgc0Vycm9yKTsNCi0JRlhfQk9PTAkJCQkJCURlbFByb3BlcnR5KElGWEpTX0NvbnRleHQqIGNjLCBGWF9MUENXU1RSIHByb3BuYW1lLCBKU19FcnJvclN0cmluZyAmIHNFcnJvcik7DQotDQotCXZvaWQJCQkJCQlJbml0aWFsKENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHApOw0KLQ0KLXByaXZhdGU6DQotCXZvaWQJCQkJCQlVcGRhdGVHbG9iYWxQZXJzaXN0ZW50VmFyaWFibGVzKCk7DQotCXZvaWQJCQkJCQlDb21taXRHbG9iYWxQZXJzaXNpdGVudFZhcmlhYmxlcygpOw0KLQl2b2lkCQkJCQkJRGVzdHJveUdsb2JhbFBlcnNpc2l0ZW50VmFyaWFibGVzKCk7DQotCUZYX0JPT0wJCQkJCQlTZXRHbG9iYWxWYXJpYWJsZXMoRlhfTFBDU1RSIHByb3BuYW1lLCBpbnQgblR5cGUsIA0KLQkJCQkJCQkJCWRvdWJsZSBkRGF0YSwgYm9vbCBiRGF0YSwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNEYXRhLCBKU09iamVjdCBwRGF0YSwgYm9vbCBiRGVmYXVsdFBlcnNpc3RlbnQpOw0KLQ0KLQl2b2lkCQkJCQkJT2JqZWN0VG9BcnJheSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHBPYmosIENKU19HbG9iYWxWYXJpYWJsZUFycmF5JiBhcnJheSk7DQotCXZvaWQJCQkJCQlQdXRPYmplY3RQcm9wZXJ0eSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iaiwgQ0pTX0tleVZhbHVlKiBwRGF0YSk7DQotDQotcHJpdmF0ZToNCi0JQ0ZYX01hcEJ5dGVTdHJpbmdUb1B0cgkJbV9tYXBHbG9iYWw7DQotCUNGWF9XaWRlU3RyaW5nCQkJCW1fc0ZpbGVQYXRoOw0KLQlDSlNfR2xvYmFsRGF0YSoJCQkJbV9wR2xvYmFsRGF0YTsNCi0JQ1BERkRvY19FbnZpcm9ubWVudCoJCQkJbV9wQXBwOw0KLX07DQotDQotDQotY2xhc3MgQ0pTX0dsb2JhbCA6IHB1YmxpYyBDSlNfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0JQ0pTX0dsb2JhbChKU0ZYT2JqZWN0IHBPYmplY3QpIDogQ0pTX09iamVjdChwT2JqZWN0KSB7fTsNCi0JdmlydHVhbCB+Q0pTX0dsb2JhbCh2b2lkKXt9Ow0KLQ0KLQl2aXJ0dWFsIEZYX0JPT0wJSW5pdEluc3RhbmNlKElGWEpTX0NvbnRleHQqIGNjKTsJDQotDQotCURFQ0xBUkVfU1BFQ0lBTF9KU19DTEFTUyhDSlNfR2xvYmFsKTsNCi0NCi0JSlNfU1BFQ0lBTF9TVEFUSUNfTUVUSE9EKHNldFBlcnNpc3RlbnQsIGdsb2JhbF9hbHRlcm5hdGUsIGdsb2JhbCk7DQotDQotfTsNCi0NCi0jZW5kaWYgLy9fR0xPQkFMX0hfDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfR0xPQkFMX0hfCisjZGVmaW5lIF9HTE9CQUxfSF8KKworY2xhc3MgQ0pTX0dsb2JhbERhdGE7CisKK3N0cnVjdCBqc19nbG9iYWxfZGF0YQoreworCWpzX2dsb2JhbF9kYXRhKCkKKwl7CisJCW5UeXBlID0gMDsKKwkJZERhdGEgPSAwOworCQliRGF0YSA9IEZBTFNFOworCQlzRGF0YSA9ICIiOworCQliUGVyc2lzdGVudCA9IEZBTFNFOworCQliRGVsZXRlZCA9IEZBTFNFOworCX0KKworCX5qc19nbG9iYWxfZGF0YSgpCisJeworCQlwRGF0YS5SZXNldCgpOworCX0KKwlpbnQJCQkJCW5UeXBlOyAvLzA6aW50IDE6Ym9vbCAyOnN0cmluZyAzOm9iagorCWRvdWJsZQkJCQlkRGF0YTsKKwlib29sCQkJCWJEYXRhOworCUNGWF9CeXRlU3RyaW5nCQlzRGF0YTsKKwl2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiAgcERhdGE7CisJYm9vbAkJCQliUGVyc2lzdGVudDsKKwlib29sCQkJCWJEZWxldGVkOworfTsKKworY2xhc3MgZ2xvYmFsX2FsdGVybmF0ZSA6IHB1YmxpYyBDSlNfRW1iZWRPYmoKK3sKK3B1YmxpYzoKKwlnbG9iYWxfYWx0ZXJuYXRlKENKU19PYmplY3QqIHBKU09iamVjdCk7CisJdmlydHVhbCB+Z2xvYmFsX2FsdGVybmF0ZSgpOworCitwdWJsaWM6CisJRlhfQk9PTAkJCQkJCXNldFBlcnNpc3RlbnQoT0JKX01FVEhPRF9QQVJBTVMpOworCitwdWJsaWM6CisJRlhfQk9PTAkJCQkJCVF1ZXJ5UHJvcGVydHkoRlhfTFBDV1NUUiBwcm9wbmFtZSk7CisJRlhfQk9PTAkJCQkJCURvUHJvcGVydHkoSUZYSlNfQ29udGV4dCogY2MsIEZYX0xQQ1dTVFIgcHJvcG5hbWUsIENKU19Qcm9wVmFsdWUgJiB2cCwgSlNfRXJyb3JTdHJpbmcgJiBzRXJyb3IpOworCUZYX0JPT0wJCQkJCQlEZWxQcm9wZXJ0eShJRlhKU19Db250ZXh0KiBjYywgRlhfTFBDV1NUUiBwcm9wbmFtZSwgSlNfRXJyb3JTdHJpbmcgJiBzRXJyb3IpOworCisJdm9pZAkJCQkJCUluaXRpYWwoQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCk7CisKK3ByaXZhdGU6CisJdm9pZAkJCQkJCVVwZGF0ZUdsb2JhbFBlcnNpc3RlbnRWYXJpYWJsZXMoKTsKKwl2b2lkCQkJCQkJQ29tbWl0R2xvYmFsUGVyc2lzaXRlbnRWYXJpYWJsZXMoKTsKKwl2b2lkCQkJCQkJRGVzdHJveUdsb2JhbFBlcnNpc2l0ZW50VmFyaWFibGVzKCk7CisJRlhfQk9PTAkJCQkJCVNldEdsb2JhbFZhcmlhYmxlcyhGWF9MUENTVFIgcHJvcG5hbWUsIGludCBuVHlwZSwgCisJCQkJCQkJCQlkb3VibGUgZERhdGEsIGJvb2wgYkRhdGEsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzRGF0YSwgSlNPYmplY3QgcERhdGEsIGJvb2wgYkRlZmF1bHRQZXJzaXN0ZW50KTsKKworCXZvaWQJCQkJCQlPYmplY3RUb0FycmF5KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gcE9iaiwgQ0pTX0dsb2JhbFZhcmlhYmxlQXJyYXkmIGFycmF5KTsKKwl2b2lkCQkJCQkJUHV0T2JqZWN0UHJvcGVydHkodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmosIENKU19LZXlWYWx1ZSogcERhdGEpOworCitwcml2YXRlOgorCUNGWF9NYXBCeXRlU3RyaW5nVG9QdHIJCW1fbWFwR2xvYmFsOworCUNGWF9XaWRlU3RyaW5nCQkJCW1fc0ZpbGVQYXRoOworCUNKU19HbG9iYWxEYXRhKgkJCQltX3BHbG9iYWxEYXRhOworCUNQREZEb2NfRW52aXJvbm1lbnQqCQkJCW1fcEFwcDsKK307CisKKworY2xhc3MgQ0pTX0dsb2JhbCA6IHB1YmxpYyBDSlNfT2JqZWN0Cit7CitwdWJsaWM6CisJQ0pTX0dsb2JhbChKU0ZYT2JqZWN0IHBPYmplY3QpIDogQ0pTX09iamVjdChwT2JqZWN0KSB7fTsKKwl2aXJ0dWFsIH5DSlNfR2xvYmFsKHZvaWQpe307CisKKwl2aXJ0dWFsIEZYX0JPT0wJSW5pdEluc3RhbmNlKElGWEpTX0NvbnRleHQqIGNjKTsJCisKKwlERUNMQVJFX1NQRUNJQUxfSlNfQ0xBU1MoQ0pTX0dsb2JhbCk7CisKKwlKU19TUEVDSUFMX1NUQVRJQ19NRVRIT0Qoc2V0UGVyc2lzdGVudCwgZ2xvYmFsX2FsdGVybmF0ZSwgZ2xvYmFsKTsKKworfTsKKworI2VuZGlmIC8vX0dMT0JBTF9IXwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvcmVwb3J0LmggYi9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9yZXBvcnQuaAppbmRleCA4YTQwODRkLi5mYjVhZGYzIDEwMDY0NAotLS0gYS9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9yZXBvcnQuaAorKysgYi9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9yZXBvcnQuaApAQCAtMSwzNSArMSwzNSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfUkVQT1JUX0hfDQotI2RlZmluZSBfUkVQT1JUX0hfDQotDQotY2xhc3MgUmVwb3J0IDogcHVibGljIENKU19FbWJlZE9iag0KLXsNCi1wdWJsaWM6DQotCVJlcG9ydChDSlNfT2JqZWN0ICogcEpTT2JqZWN0KTsNCi0JdmlydHVhbCB+UmVwb3J0KCk7DQotDQotcHVibGljOg0KLQlGWF9CT09MIHNhdmUoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MIHdyaXRlVGV4dChPQkpfTUVUSE9EX1BBUkFNUyk7DQotfTsNCi0NCi1jbGFzcyBDSlNfUmVwb3J0IDogcHVibGljIENKU19PYmplY3QNCi17DQotcHVibGljOg0KLQlDSlNfUmVwb3J0KEpTRlhPYmplY3QgIHBPYmplY3QpIDogQ0pTX09iamVjdChwT2JqZWN0KXt9Ow0KLQl2aXJ0dWFsIH5DSlNfUmVwb3J0KCl7fTsNCi0NCi1wdWJsaWM6DQotCURFQ0xBUkVfSlNfQ0xBU1MoQ0pTX1JlcG9ydCk7DQotDQotCUpTX1NUQVRJQ19NRVRIT0Qoc2F2ZSwgUmVwb3J0KQ0KLQlKU19TVEFUSUNfTUVUSE9EKHdyaXRlVGV4dCwgUmVwb3J0KTsNCi19Ow0KLQ0KLSNlbmRpZiAvL19SRVBPUlRfSF8NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9SRVBPUlRfSF8KKyNkZWZpbmUgX1JFUE9SVF9IXworCitjbGFzcyBSZXBvcnQgOiBwdWJsaWMgQ0pTX0VtYmVkT2JqCit7CitwdWJsaWM6CisJUmVwb3J0KENKU19PYmplY3QgKiBwSlNPYmplY3QpOworCXZpcnR1YWwgflJlcG9ydCgpOworCitwdWJsaWM6CisJRlhfQk9PTCBzYXZlKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MIHdyaXRlVGV4dChPQkpfTUVUSE9EX1BBUkFNUyk7Cit9OworCitjbGFzcyBDSlNfUmVwb3J0IDogcHVibGljIENKU19PYmplY3QKK3sKK3B1YmxpYzoKKwlDSlNfUmVwb3J0KEpTRlhPYmplY3QgIHBPYmplY3QpIDogQ0pTX09iamVjdChwT2JqZWN0KXt9OworCXZpcnR1YWwgfkNKU19SZXBvcnQoKXt9OworCitwdWJsaWM6CisJREVDTEFSRV9KU19DTEFTUyhDSlNfUmVwb3J0KTsKKworCUpTX1NUQVRJQ19NRVRIT0Qoc2F2ZSwgUmVwb3J0KQorCUpTX1NUQVRJQ19NRVRIT0Qod3JpdGVUZXh0LCBSZXBvcnQpOworfTsKKworI2VuZGlmIC8vX1JFUE9SVF9IXworCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9yZXNvdXJjZS5oIGIvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvcmVzb3VyY2UuaAppbmRleCAwYjc2NjhlLi43MTBjYzUwIDEwMDY0NAotLS0gYS9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC9yZXNvdXJjZS5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L3Jlc291cmNlLmgKQEAgLTEsMTEwICsxLDExMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2RlZmluZSBJRERfSlNfTVNHQk9YICAgICAgICAgICAgICAgICAgIDI1NjAwDQotI2RlZmluZSBJRERfUkVTUE9OU0UgICAgICAgICAgICAgICAgICAgIDI1NjAxDQotI2RlZmluZSBJRENfSlNfTVNHX1RFWFQgICAgICAgICAgICAgICAgIDI1NjAyDQotI2RlZmluZSBJRF9KU19NU0dfT0sgICAgICAgICAgICAgICAgICAgIDI1NjAzDQotI2RlZmluZSBJRF9KU19NU0dfQ0FOQ0VMICAgICAgICAgICAgICAgIDI1NjA0DQotI2RlZmluZSBJRENfSlNfTVNHX0lDT04gICAgICAgICAgICAgICAgIDI1NjA1DQotI2RlZmluZSBJRF9KU19NU0dfWUVTICAgICAgICAgICAgICAgICAgIDI1NjA2DQotI2RlZmluZSBJRF9KU19NU0dfTk8gICAgICAgICAgICAgICAgICAgIDI1NjA3DQotI2RlZmluZSBJRENfSlNfUVVFU1RJT04gICAgICAgICAgICAgICAgIDI1NjA4DQotI2RlZmluZSBJRF9KU19PSyAgICAgICAgICAgICAgICAgICAgICAgIDI1NjA5DQotI2RlZmluZSBJRF9KU19DQU5DRUwgICAgICAgICAgICAgICAgICAgIDI1NjEwDQotI2RlZmluZSBJRENfSlNfQU5TV0VSICAgICAgICAgICAgICAgICAgIDI1NjExDQotI2RlZmluZSBJRENfSlNfRURJVCAgICAgICAgICAgICAgICAgICAgIDI1NjEyDQotI2RlZmluZSBJRFNfU1RSSU5HX0pTQUxFUlQgICAgICAgICAgICAgIDI1NjEzDQotI2RlZmluZSBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUiAgICAgICAgIDI1NjE0DQotI2RlZmluZSBJRFNfU1RSSU5HX0pTQUZOVU1CRVJfS0VZU1RST0tFIDI1NjE1DQotI2RlZmluZSBJRFNfU1RSSU5HX0pTSU5QVVRFUlJPUiAgICAgICAgIDI1NjE2DQotI2RlZmluZSBJRFNfU1RSSU5HX0pTUEFSQU1fVE9PTE9ORyAgICAgIDI1NjE3DQotI2RlZmluZSBJRFNfU1RSSU5HX0pTUEFSU0VEQVRFICAgICAgICAgIDI1NjE4DQotI2RlZmluZSBJRFNfU1RSSU5HX0pTUkFOR0UxICAgICAgICAgICAgIDI1NjE5DQotI2RlZmluZSBJRFNfU1RSSU5HX0pTUkFOR0UyICAgICAgICAgICAgIDI1NjIwDQotI2RlZmluZSBJRFNfU1RSSU5HX0pTUkFOR0UzICAgICAgICAgICAgIDI1NjIxDQotI2RlZmluZSBJRFNfU1RSSU5HX0pTUkFOR0U0ICAgICAgICAgICAgIDI1NjIyDQotI2RlZmluZSBJRFNfU1RSSU5HX0ZJTEVPUEVORkFJTCAgICAgICAgIDI1NjIzDQotI2RlZmluZSBJRFNfU1RSSU5HX0pTQVRURU5USU9OICAgICAgICAgIDI1NjI0DQotI2RlZmluZSBJRFNfU1RSSU5HX0pTU1VCTUlUUyAgICAgICAgICAgIDI1NjI1DQotI2RlZmluZSBJRFNfU1RSSU5HX0pTU1VCTUlURiAgICAgICAgICAgIDI1NjI2DQotI2RlZmluZSBJRFNfU1RSSU5HX05PVFNVUFBPUlQgICAgICAgICAgIDI1NjI3DQotI2RlZmluZSBJRFNfU1RSSU5HX0pTQlVTWSAgICAgICAgICAgICAgIDI1NjI4DQotI2RlZmluZSBJRFNfU1RSSU5HX0pTRVZFTlQgICAgICAgICAgICAgIDI1NjI5DQotI2RlZmluZSBJRFNfU1RSSU5HX1JVTiAgICAgICAgICAgICAgICAgIDI1NjMwDQotI2RlZmluZSBJRFNfU1RSSU5HX1VOSEFORExFRCAgICAgICAgICAgIDI1NjMxDQotI2RlZmluZSBJRFNfU1RSSU5HX0pTUFJJTlQxICAgICAgICAgICAgIDI1NjMyDQotI2RlZmluZSBJRFNfU1RSSU5HX0pTUFJJTlQyICAgICAgICAgICAgIDI1NjMzDQotI2RlZmluZSBJRFNfU1RSSU5HX0xBVU5DSFVSTCAgICAgICAgICAgIDI1NjM0DQotI2RlZmluZSBJRFNfSlNQQVJBTV9JTkNPUlJFQ1QgICAgICAgICAgIDI1NjM1DQotI2RlZmluZSBJRERfSlNfQ09OU09MRSAgICAgICAgICAgICAgICAgIDI1NjM2DQotI2RlZmluZSBJRFNfU1RSSU5HX1NBRkVNT0RFTCAgICAgICAgICAgIDI1NjM2DQotI2RlZmluZSBJRENfRURUU0NSSVBUICAgICAgICAgICAgICAgICAgIDI1NjM3DQotI2RlZmluZSBJRENfQlROQ0xFQVIgICAgICAgICAgICAgICAgICAgIDI1NjM4DQotI2RlZmluZSBJRENfRURUT1VUUFVUICAgICAgICAgICAgICAgICAgIDI1NjM5DQotI2RlZmluZSBJRENfQ0hFQ0tfVElQUyAgICAgICAgICAgICAgICAgIDI1NjQwDQotI2RlZmluZSBJRENfQlROUlVOICAgICAgICAgICAgICAgICAgICAgIDI1NjQxDQotDQotDQotDQotc3RhdGljIENGWF9XaWRlU3RyaW5nIEpTR2V0U3RyaW5nRnJvbUlEKENKU19Db250ZXh0KiBwQ29udGV4dCwgRlhfVUlOVCBJRCkNCi17DQotCXN3aXRjaChJRCkNCi0JeyAgICAgICAgICAgICAgICAgIA0KLQljYXNlIElEU19TVFJJTkdfSlNBTEVSVDoNCi0JCXJldHVybiBMIkFsZXJ0IjsNCi0JY2FzZSBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUjoNCi0gICAgICAgIHJldHVybiBMIlRoZSBhbW91bnQgb2YgcGFyYW1ldGVycyBpcyBub3QgY29ycmVjdCAhIjsJDQotCWNhc2UgSURTX1NUUklOR19KU0FGTlVNQkVSX0tFWVNUUk9LRToNCi0JCXJldHVybiBMIlRoZSBpbnB1dCB2YWx1ZSBpcyBpbnZhbGlkLiI7DQotCWNhc2UJSURTX1NUUklOR19KU0lOUFVURVJST1I6DQotICAgICAgICByZXR1cm4gTCJJbnB1dCBlcnJvciAhIjsNCi0JY2FzZQlJRFNfU1RSSU5HX0pTUEFSQU1fVE9PTE9ORzoNCi0JCXJldHVybiBMIlRoZSB2YWx1ZSB5b3UgYXJlIGdvaW5nIHRvIGlucHV0IGlzIHRvbyBsb25nLiI7DQotCWNhc2UJSURTX1NUUklOR19KU1BBUlNFREFURToNCi0JCXJldHVybiBMIlRoZSBpbnB1dCBzdHJpbmcgY2FuJ3QgYmUgcGFyc2VkIHRvIGEgdmFsaWQgZGF0ZSB0aW1lICglcykuIjsNCi0JY2FzZQlJRFNfU1RSSU5HX0pTUkFOR0UxOg0KLQkJcmV0dXJuIEwiSW52YWxpZCB2YWx1ZTogbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMuIjsJDQotCWNhc2UJSURTX1NUUklOR19KU1JBTkdFMjoNCi0JCXJldHVybiBMIkludmFsaWQgdmFsdWU6IG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbCB0byAlcy4iOw0KLQljYXNlCUlEU19TVFJJTkdfSlNSQU5HRTM6DQotCQlyZXR1cm4gTCJJbnZhbGlkIHZhbHVlOiBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcy4iOw0KLQljYXNlCUlEU19TVFJJTkdfSlNSQU5HRTQ6DQotCQlyZXR1cm4gTCJSYW5nZSBFcnJvciI7CQ0KLQljYXNlCUlEU19TVFJJTkdfRklMRU9QRU5GQUlMOg0KLSAgICAgICAgcmV0dXJuIEwiT3BlbmluZyBmaWxlIGZhaWxlZC4iOw0KLQljYXNlCUlEU19TVFJJTkdfSlNBVFRFTlRJT046DQotCQlyZXR1cm4gTCJBdHRlbnRpb24iOwkNCi0JY2FzZQlJRFNfU1RSSU5HX0pTU1VCTUlUUzoNCi0JCXJldHVybiBMIlN1Ym1pdCBmb3JtIHN1Y2Nlc3NmdWxseSEiOw0KLQljYXNlCUlEU19TVFJJTkdfSlNTVUJNSVRGOg0KLQkJcmV0dXJuIEwiU3VibWl0IGZvcm0gZmFpbGVkISI7CQ0KLQljYXNlCUlEU19TVFJJTkdfTk9UU1VQUE9SVDoNCi0JCXJldHVybiBMIk5vdCBzdXBwb3J0ZWQuIjsNCi0JY2FzZQlJRFNfU1RSSU5HX0pTQlVTWToNCi0JCXJldHVybiBMIlN5c3RlbSBpcyBidXN5ISI7CQ0KLQljYXNlCUlEU19TVFJJTkdfSlNFVkVOVDoNCi0JCXJldHVybiBMIlRoZSBldmVudCBvZiB0aGUgZm9ybWZpZWxkIGV4aXN0cyEiOwkNCi0JY2FzZQlJRFNfU1RSSU5HX1JVTjoNCi0JCXJldHVybiBMIkl0IHJ1bnMgc3VjY2Vzc2Z1bGx5LiI7DQotCWNhc2UJSURTX1NUUklOR19VTkhBTkRMRUQ6DQotCQlyZXR1cm4gTCJBbiB1bmhhbmRsZWQgZXJyb3IhIjsNCi0JY2FzZQlJRFNfU1RSSU5HX0pTUFJJTlQxOg0KLQkJcmV0dXJuIEwiVGhlIHNlY29uZCBwYXJhbWV0ZXIgY2FuJ3QgY29udmVydCB0byBEYXRlISI7DQotCWNhc2UJSURTX1NUUklOR19KU1BSSU5UMjoNCi0JCXJldHVybiBMIlRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzbid0IGEgdmFsaWQgRGF0ZSEiOw0KLQljYXNlCUlEU19TVFJJTkdfTEFVTkNIVVJMOg0KLQkJcmV0dXJuIEwiVGhlIERvY3VtZW50IGlzIHRyeWluZyB0byBjb25uZWN0IHRvIFxyXG4lc1xyXG5JZiB5b3UgdHJ1c3QgdGhlIHNpdGUsIGNob29zZSBPSy4gSWYgeW91IGRvbid0IHRydXN0IHRoZSBzaXRlLCBjaG9vc2UgQ2FuY2VsLiI7CQ0KLQljYXNlCUlEU19KU1BBUkFNX0lOQ09SUkVDVDoNCi0JCXJldHVybiBMIlRoZSBwYXJhbWV0ZXIgeW91IGlucHV0dGVkIGlzIGluY29ycmVjdCEiOw0KLQljYXNlCUlEU19TVFJJTkdfU0FGRU1PREVMOg0KLQkJcmV0dXJuIEwiU2VjdXJlIHJlYWRpbmcgbW9kZSI7DQotCWRlZmF1bHQ6DQotCQlyZXR1cm4gTCIiOw0KLQ0KLQl9DQotfQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNkZWZpbmUgSUREX0pTX01TR0JPWCAgICAgICAgICAgICAgICAgICAyNTYwMAorI2RlZmluZSBJRERfUkVTUE9OU0UgICAgICAgICAgICAgICAgICAgIDI1NjAxCisjZGVmaW5lIElEQ19KU19NU0dfVEVYVCAgICAgICAgICAgICAgICAgMjU2MDIKKyNkZWZpbmUgSURfSlNfTVNHX09LICAgICAgICAgICAgICAgICAgICAyNTYwMworI2RlZmluZSBJRF9KU19NU0dfQ0FOQ0VMICAgICAgICAgICAgICAgIDI1NjA0CisjZGVmaW5lIElEQ19KU19NU0dfSUNPTiAgICAgICAgICAgICAgICAgMjU2MDUKKyNkZWZpbmUgSURfSlNfTVNHX1lFUyAgICAgICAgICAgICAgICAgICAyNTYwNgorI2RlZmluZSBJRF9KU19NU0dfTk8gICAgICAgICAgICAgICAgICAgIDI1NjA3CisjZGVmaW5lIElEQ19KU19RVUVTVElPTiAgICAgICAgICAgICAgICAgMjU2MDgKKyNkZWZpbmUgSURfSlNfT0sgICAgICAgICAgICAgICAgICAgICAgICAyNTYwOQorI2RlZmluZSBJRF9KU19DQU5DRUwgICAgICAgICAgICAgICAgICAgIDI1NjEwCisjZGVmaW5lIElEQ19KU19BTlNXRVIgICAgICAgICAgICAgICAgICAgMjU2MTEKKyNkZWZpbmUgSURDX0pTX0VESVQgICAgICAgICAgICAgICAgICAgICAyNTYxMgorI2RlZmluZSBJRFNfU1RSSU5HX0pTQUxFUlQgICAgICAgICAgICAgIDI1NjEzCisjZGVmaW5lIElEU19TVFJJTkdfSlNQQVJBTUVSUk9SICAgICAgICAgMjU2MTQKKyNkZWZpbmUgSURTX1NUUklOR19KU0FGTlVNQkVSX0tFWVNUUk9LRSAyNTYxNQorI2RlZmluZSBJRFNfU1RSSU5HX0pTSU5QVVRFUlJPUiAgICAgICAgIDI1NjE2CisjZGVmaW5lIElEU19TVFJJTkdfSlNQQVJBTV9UT09MT05HICAgICAgMjU2MTcKKyNkZWZpbmUgSURTX1NUUklOR19KU1BBUlNFREFURSAgICAgICAgICAyNTYxOAorI2RlZmluZSBJRFNfU1RSSU5HX0pTUkFOR0UxICAgICAgICAgICAgIDI1NjE5CisjZGVmaW5lIElEU19TVFJJTkdfSlNSQU5HRTIgICAgICAgICAgICAgMjU2MjAKKyNkZWZpbmUgSURTX1NUUklOR19KU1JBTkdFMyAgICAgICAgICAgICAyNTYyMQorI2RlZmluZSBJRFNfU1RSSU5HX0pTUkFOR0U0ICAgICAgICAgICAgIDI1NjIyCisjZGVmaW5lIElEU19TVFJJTkdfRklMRU9QRU5GQUlMICAgICAgICAgMjU2MjMKKyNkZWZpbmUgSURTX1NUUklOR19KU0FUVEVOVElPTiAgICAgICAgICAyNTYyNAorI2RlZmluZSBJRFNfU1RSSU5HX0pTU1VCTUlUUyAgICAgICAgICAgIDI1NjI1CisjZGVmaW5lIElEU19TVFJJTkdfSlNTVUJNSVRGICAgICAgICAgICAgMjU2MjYKKyNkZWZpbmUgSURTX1NUUklOR19OT1RTVVBQT1JUICAgICAgICAgICAyNTYyNworI2RlZmluZSBJRFNfU1RSSU5HX0pTQlVTWSAgICAgICAgICAgICAgIDI1NjI4CisjZGVmaW5lIElEU19TVFJJTkdfSlNFVkVOVCAgICAgICAgICAgICAgMjU2MjkKKyNkZWZpbmUgSURTX1NUUklOR19SVU4gICAgICAgICAgICAgICAgICAyNTYzMAorI2RlZmluZSBJRFNfU1RSSU5HX1VOSEFORExFRCAgICAgICAgICAgIDI1NjMxCisjZGVmaW5lIElEU19TVFJJTkdfSlNQUklOVDEgICAgICAgICAgICAgMjU2MzIKKyNkZWZpbmUgSURTX1NUUklOR19KU1BSSU5UMiAgICAgICAgICAgICAyNTYzMworI2RlZmluZSBJRFNfU1RSSU5HX0xBVU5DSFVSTCAgICAgICAgICAgIDI1NjM0CisjZGVmaW5lIElEU19KU1BBUkFNX0lOQ09SUkVDVCAgICAgICAgICAgMjU2MzUKKyNkZWZpbmUgSUREX0pTX0NPTlNPTEUgICAgICAgICAgICAgICAgICAyNTYzNgorI2RlZmluZSBJRFNfU1RSSU5HX1NBRkVNT0RFTCAgICAgICAgICAgIDI1NjM2CisjZGVmaW5lIElEQ19FRFRTQ1JJUFQgICAgICAgICAgICAgICAgICAgMjU2MzcKKyNkZWZpbmUgSURDX0JUTkNMRUFSICAgICAgICAgICAgICAgICAgICAyNTYzOAorI2RlZmluZSBJRENfRURUT1VUUFVUICAgICAgICAgICAgICAgICAgIDI1NjM5CisjZGVmaW5lIElEQ19DSEVDS19USVBTICAgICAgICAgICAgICAgICAgMjU2NDAKKyNkZWZpbmUgSURDX0JUTlJVTiAgICAgICAgICAgICAgICAgICAgICAyNTY0MQorCisKKworc3RhdGljIENGWF9XaWRlU3RyaW5nIEpTR2V0U3RyaW5nRnJvbUlEKENKU19Db250ZXh0KiBwQ29udGV4dCwgRlhfVUlOVCBJRCkKK3sKKwlzd2l0Y2goSUQpCisJeyAgICAgICAgICAgICAgICAgIAorCWNhc2UgSURTX1NUUklOR19KU0FMRVJUOgorCQlyZXR1cm4gTCJBbGVydCI7CisJY2FzZSBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUjoKKyAgICAgICAgcmV0dXJuIEwiVGhlIGFtb3VudCBvZiBwYXJhbWV0ZXJzIGlzIG5vdCBjb3JyZWN0ICEiOwkKKwljYXNlIElEU19TVFJJTkdfSlNBRk5VTUJFUl9LRVlTVFJPS0U6CisJCXJldHVybiBMIlRoZSBpbnB1dCB2YWx1ZSBpcyBpbnZhbGlkLiI7CisJY2FzZQlJRFNfU1RSSU5HX0pTSU5QVVRFUlJPUjoKKyAgICAgICAgcmV0dXJuIEwiSW5wdXQgZXJyb3IgISI7CisJY2FzZQlJRFNfU1RSSU5HX0pTUEFSQU1fVE9PTE9ORzoKKwkJcmV0dXJuIEwiVGhlIHZhbHVlIHlvdSBhcmUgZ29pbmcgdG8gaW5wdXQgaXMgdG9vIGxvbmcuIjsKKwljYXNlCUlEU19TVFJJTkdfSlNQQVJTRURBVEU6CisJCXJldHVybiBMIlRoZSBpbnB1dCBzdHJpbmcgY2FuJ3QgYmUgcGFyc2VkIHRvIGEgdmFsaWQgZGF0ZSB0aW1lICglcykuIjsKKwljYXNlCUlEU19TVFJJTkdfSlNSQU5HRTE6CisJCXJldHVybiBMIkludmFsaWQgdmFsdWU6IG11c3QgYmUgZ3JlYXRlciBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzLiI7CQorCWNhc2UJSURTX1NUUklOR19KU1JBTkdFMjoKKwkJcmV0dXJuIEwiSW52YWxpZCB2YWx1ZTogbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsIHRvICVzLiI7CisJY2FzZQlJRFNfU1RSSU5HX0pTUkFOR0UzOgorCQlyZXR1cm4gTCJJbnZhbGlkIHZhbHVlOiBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcy4iOworCWNhc2UJSURTX1NUUklOR19KU1JBTkdFNDoKKwkJcmV0dXJuIEwiUmFuZ2UgRXJyb3IiOwkKKwljYXNlCUlEU19TVFJJTkdfRklMRU9QRU5GQUlMOgorICAgICAgICByZXR1cm4gTCJPcGVuaW5nIGZpbGUgZmFpbGVkLiI7CisJY2FzZQlJRFNfU1RSSU5HX0pTQVRURU5USU9OOgorCQlyZXR1cm4gTCJBdHRlbnRpb24iOwkKKwljYXNlCUlEU19TVFJJTkdfSlNTVUJNSVRTOgorCQlyZXR1cm4gTCJTdWJtaXQgZm9ybSBzdWNjZXNzZnVsbHkhIjsKKwljYXNlCUlEU19TVFJJTkdfSlNTVUJNSVRGOgorCQlyZXR1cm4gTCJTdWJtaXQgZm9ybSBmYWlsZWQhIjsJCisJY2FzZQlJRFNfU1RSSU5HX05PVFNVUFBPUlQ6CisJCXJldHVybiBMIk5vdCBzdXBwb3J0ZWQuIjsKKwljYXNlCUlEU19TVFJJTkdfSlNCVVNZOgorCQlyZXR1cm4gTCJTeXN0ZW0gaXMgYnVzeSEiOwkKKwljYXNlCUlEU19TVFJJTkdfSlNFVkVOVDoKKwkJcmV0dXJuIEwiVGhlIGV2ZW50IG9mIHRoZSBmb3JtZmllbGQgZXhpc3RzISI7CQorCWNhc2UJSURTX1NUUklOR19SVU46CisJCXJldHVybiBMIkl0IHJ1bnMgc3VjY2Vzc2Z1bGx5LiI7CisJY2FzZQlJRFNfU1RSSU5HX1VOSEFORExFRDoKKwkJcmV0dXJuIEwiQW4gdW5oYW5kbGVkIGVycm9yISI7CisJY2FzZQlJRFNfU1RSSU5HX0pTUFJJTlQxOgorCQlyZXR1cm4gTCJUaGUgc2Vjb25kIHBhcmFtZXRlciBjYW4ndCBjb252ZXJ0IHRvIERhdGUhIjsKKwljYXNlCUlEU19TVFJJTkdfSlNQUklOVDI6CisJCXJldHVybiBMIlRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzbid0IGEgdmFsaWQgRGF0ZSEiOworCWNhc2UJSURTX1NUUklOR19MQVVOQ0hVUkw6CisJCXJldHVybiBMIlRoZSBEb2N1bWVudCBpcyB0cnlpbmcgdG8gY29ubmVjdCB0byBcclxuJXNcclxuSWYgeW91IHRydXN0IHRoZSBzaXRlLCBjaG9vc2UgT0suIElmIHlvdSBkb24ndCB0cnVzdCB0aGUgc2l0ZSwgY2hvb3NlIENhbmNlbC4iOwkKKwljYXNlCUlEU19KU1BBUkFNX0lOQ09SUkVDVDoKKwkJcmV0dXJuIEwiVGhlIHBhcmFtZXRlciB5b3UgaW5wdXR0ZWQgaXMgaW5jb3JyZWN0ISI7CisJY2FzZQlJRFNfU1RSSU5HX1NBRkVNT0RFTDoKKwkJcmV0dXJuIEwiU2VjdXJlIHJlYWRpbmcgbW9kZSI7CisJZGVmYXVsdDoKKwkJcmV0dXJuIEwiIjsKKworCX0KK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvdXRpbC5oIGIvZnBkZnNkay9pbmNsdWRlL2phdmFzY3JpcHQvdXRpbC5oCmluZGV4IDlmNGVmYzMuLjE0ODU3YzkgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9qYXZhc2NyaXB0L3V0aWwuaAorKysgYi9mcGRmc2RrL2luY2x1ZGUvamF2YXNjcmlwdC91dGlsLmgKQEAgLTEsNDUgKzEsNDUgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX1VUSUxfSF8NCi0jZGVmaW5lIF9VVElMX0hfDQotDQotY2xhc3MgdXRpbCA6IHB1YmxpYyBDSlNfRW1iZWRPYmoNCi17DQotcHVibGljOg0KLQl1dGlsKENKU19PYmplY3QgKiBwSlNPYmplY3QpOw0KLQl2aXJ0dWFsIH51dGlsKHZvaWQpOw0KLQ0KLXB1YmxpYzoNCi0JRlhfQk9PTCBwcmludGQoT0JKX01FVEhPRF9QQVJBTVMpOw0KLQlGWF9CT09MIHByaW50ZihPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wgcHJpbnR4KE9CSl9NRVRIT0RfUEFSQU1TKTsNCi0JRlhfQk9PTCBzY2FuZChPQkpfTUVUSE9EX1BBUkFNUyk7DQotCUZYX0JPT0wgYnl0ZVRvQ2hhcihPQkpfTUVUSE9EX1BBUkFNUyk7DQotDQotcHVibGljOg0KLQlzdGF0aWMgdm9pZAkJcHJpbnRkKGNvbnN0IHN0ZDo6d3N0cmluZyAmY0Zvcm1hdCxDSlNfRGF0ZSBEYXRlLGJvb2wgYlhGQVBpY3R1cmUsIHN0ZDo6d3N0cmluZyAmY1B1cnBvc2UpOw0KLQlzdGF0aWMgdm9pZAkJcHJpbnR4KGNvbnN0IHN0ZDo6c3RyaW5nICZjRm9ybWF0LGNvbnN0IHN0ZDo6c3RyaW5nICZjU291cmNlLCBzdGQ6OnN0cmluZyAmY1B1cnBvc2UpOw0KLQlzdGF0aWMgaW50CQlQYXJzdERhdGFUeXBlKHN0ZDo6d3N0cmluZyogc0Zvcm1hdCk7DQotfTsNCi0NCi1jbGFzcyBDSlNfVXRpbCA6IHB1YmxpYyBDSlNfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0JQ0pTX1V0aWwoSlNGWE9iamVjdCAgcE9iamVjdCkgOiBDSlNfT2JqZWN0KHBPYmplY3QpIHt9Ow0KLQl2aXJ0dWFsIH5DSlNfVXRpbCh2b2lkKXt9Ow0KLQ0KLQlERUNMQVJFX0pTX0NMQVNTKENKU19VdGlsKTsNCi0NCi0JSlNfU1RBVElDX01FVEhPRChwcmludGQsIHV0aWwpOw0KLQlKU19TVEFUSUNfTUVUSE9EKHByaW50ZiwgdXRpbCk7DQotCUpTX1NUQVRJQ19NRVRIT0QocHJpbnR4LCB1dGlsKTsNCi0JSlNfU1RBVElDX01FVEhPRChzY2FuZCwgdXRpbCk7DQotCUpTX1NUQVRJQ19NRVRIT0QoYnl0ZVRvQ2hhciwgdXRpbCk7DQotfTsNCi0NCi1GWF9JTlQ2NCBGWF9hdG9pNjQoY29uc3QgY2hhciAqbnB0cik7DQotI2VuZGlmIC8vX1VUSUxfSF8NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9VVElMX0hfCisjZGVmaW5lIF9VVElMX0hfCisKK2NsYXNzIHV0aWwgOiBwdWJsaWMgQ0pTX0VtYmVkT2JqCit7CitwdWJsaWM6CisJdXRpbChDSlNfT2JqZWN0ICogcEpTT2JqZWN0KTsKKwl2aXJ0dWFsIH51dGlsKHZvaWQpOworCitwdWJsaWM6CisJRlhfQk9PTCBwcmludGQoT0JKX01FVEhPRF9QQVJBTVMpOworCUZYX0JPT0wgcHJpbnRmKE9CSl9NRVRIT0RfUEFSQU1TKTsKKwlGWF9CT09MIHByaW50eChPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTCBzY2FuZChPQkpfTUVUSE9EX1BBUkFNUyk7CisJRlhfQk9PTCBieXRlVG9DaGFyKE9CSl9NRVRIT0RfUEFSQU1TKTsKKworcHVibGljOgorCXN0YXRpYyB2b2lkCQlwcmludGQoY29uc3Qgc3RkOjp3c3RyaW5nICZjRm9ybWF0LENKU19EYXRlIERhdGUsYm9vbCBiWEZBUGljdHVyZSwgc3RkOjp3c3RyaW5nICZjUHVycG9zZSk7CisJc3RhdGljIHZvaWQJCXByaW50eChjb25zdCBzdGQ6OnN0cmluZyAmY0Zvcm1hdCxjb25zdCBzdGQ6OnN0cmluZyAmY1NvdXJjZSwgc3RkOjpzdHJpbmcgJmNQdXJwb3NlKTsKKwlzdGF0aWMgaW50CQlQYXJzdERhdGFUeXBlKHN0ZDo6d3N0cmluZyogc0Zvcm1hdCk7Cit9OworCitjbGFzcyBDSlNfVXRpbCA6IHB1YmxpYyBDSlNfT2JqZWN0Cit7CitwdWJsaWM6CisJQ0pTX1V0aWwoSlNGWE9iamVjdCAgcE9iamVjdCkgOiBDSlNfT2JqZWN0KHBPYmplY3QpIHt9OworCXZpcnR1YWwgfkNKU19VdGlsKHZvaWQpe307CisKKwlERUNMQVJFX0pTX0NMQVNTKENKU19VdGlsKTsKKworCUpTX1NUQVRJQ19NRVRIT0QocHJpbnRkLCB1dGlsKTsKKwlKU19TVEFUSUNfTUVUSE9EKHByaW50ZiwgdXRpbCk7CisJSlNfU1RBVElDX01FVEhPRChwcmludHgsIHV0aWwpOworCUpTX1NUQVRJQ19NRVRIT0Qoc2NhbmQsIHV0aWwpOworCUpTX1NUQVRJQ19NRVRIT0QoYnl0ZVRvQ2hhciwgdXRpbCk7Cit9OworCitGWF9JTlQ2NCBGWF9hdG9pNjQoY29uc3QgY2hhciAqbnB0cik7CisjZW5kaWYgLy9fVVRJTF9IXwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9JUERGV2luZG93LmggYi9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L0lQREZXaW5kb3cuaAppbmRleCA1M2I5NmE2Li4yMmYwMjNkIDEwMDY0NAotLS0gYS9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L0lQREZXaW5kb3cuaAorKysgYi9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L0lQREZXaW5kb3cuaApAQCAtMSwyOCArMSwyOCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfSVBERldJTkRPV19IXw0KLSNkZWZpbmUgX0lQREZXSU5ET1dfSF8NCi0NCi0jaW5jbHVkZSAiUFdMX1duZC5oIg0KLSNpbmNsdWRlICJQV0xfRWRpdEN0cmwuaCINCi0jaW5jbHVkZSAiUFdMX0VkaXQuaCINCi0jaW5jbHVkZSAiUFdMX0xpc3RCb3guaCINCi0jaW5jbHVkZSAiUFdMX0NvbWJvQm94LmgiDQotI2luY2x1ZGUgIlBXTF9CdXR0b24uaCINCi0jaW5jbHVkZSAiUFdMX1NwZWNpYWxCdXR0b24uaCINCi0jaW5jbHVkZSAiUFdMX0ljb24uaCINCi0jaW5jbHVkZSAiUFdMX0xhYmVsLmgiDQotI2luY2x1ZGUgIlBXTF9MaXN0Q3RybC5oIg0KLSNpbmNsdWRlICJQV0xfQ2FyZXQuaCINCi0jaW5jbHVkZSAiUFdMX1Njcm9sbEJhci5oIg0KLSNpbmNsdWRlICJQV0xfTm90ZS5oIg0KLSNpbmNsdWRlICJQV0xfSWNvbkxpc3QuaCINCi0jaW5jbHVkZSAiUFdMX0ZvbnRNYXAuaCINCi0jaW5jbHVkZSAiUFdMX1NpZ25hdHVyZS5oIg0KLSNpbmNsdWRlICJQV0xfVXRpbHMuaCINCi0NCi0jZW5kaWYgLy9fSVBERldJTkRPV19IXw0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX0lQREZXSU5ET1dfSF8KKyNkZWZpbmUgX0lQREZXSU5ET1dfSF8KKworI2luY2x1ZGUgIlBXTF9XbmQuaCIKKyNpbmNsdWRlICJQV0xfRWRpdEN0cmwuaCIKKyNpbmNsdWRlICJQV0xfRWRpdC5oIgorI2luY2x1ZGUgIlBXTF9MaXN0Qm94LmgiCisjaW5jbHVkZSAiUFdMX0NvbWJvQm94LmgiCisjaW5jbHVkZSAiUFdMX0J1dHRvbi5oIgorI2luY2x1ZGUgIlBXTF9TcGVjaWFsQnV0dG9uLmgiCisjaW5jbHVkZSAiUFdMX0ljb24uaCIKKyNpbmNsdWRlICJQV0xfTGFiZWwuaCIKKyNpbmNsdWRlICJQV0xfTGlzdEN0cmwuaCIKKyNpbmNsdWRlICJQV0xfQ2FyZXQuaCIKKyNpbmNsdWRlICJQV0xfU2Nyb2xsQmFyLmgiCisjaW5jbHVkZSAiUFdMX05vdGUuaCIKKyNpbmNsdWRlICJQV0xfSWNvbkxpc3QuaCIKKyNpbmNsdWRlICJQV0xfRm9udE1hcC5oIgorI2luY2x1ZGUgIlBXTF9TaWduYXR1cmUuaCIKKyNpbmNsdWRlICJQV0xfVXRpbHMuaCIKKworI2VuZGlmIC8vX0lQREZXSU5ET1dfSF8KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUERGV2luZG93LmggYi9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BERldpbmRvdy5oCmluZGV4IDIyNzAzZTEuLmE4M2JlNDEgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUERGV2luZG93LmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QREZXaW5kb3cuaApAQCAtMSwyOCArMSwyOCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfUERGV0lORE9XX0hfDQotI2RlZmluZSBfUERGV0lORE9XX0hfDQotDQotLy8gI2RlZmluZSBWQ19FWFRSQUxFQU4NCi0vLyAjaW5jbHVkZSA8YWZ4ZXh0Lmg+DQotLy8gI2luY2x1ZGUgPGFmeGNtbi5oPg0KLQ0KLSNpZm5kZWYgX0lOQ19QREZBUEkNCi0JI2RlZmluZSBfSU5DX1BERkFQSQ0KLSANCi0JI2luY2x1ZGUgIi4uLy4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmYXBpL2ZwZGZfbW9kdWxlLmgiIA0KLQkjaW5jbHVkZSAiLi4vLi4vLi4vY29yZS9pbmNsdWRlL2ZwZGZkb2MvZnBkZl9kb2MuaCIgDQotCSNpbmNsdWRlICIuLi8uLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmRvYy9mcGRmX3Z0LmgiIA0KLQkjaW5jbHVkZSAiLi4vLi4vLi4vY29yZS9pbmNsdWRlL2Z4Y3J0L2Z4X3htbC5oIiANCi0NCi0JI2luY2x1ZGUgIi4uL2ZwZGZfZndsZXZlbnQuaCINCi0JI2luY2x1ZGUgIi4uL2Z4X3N5c3RlbWhhbmRsZXIuaCINCi0jZW5kaWYNCi0NCi0jaW5jbHVkZSAiLi4vZnhlZGl0L2Z4X2VkaXQuaCINCi0jZW5kaWYNCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9QREZXSU5ET1dfSF8KKyNkZWZpbmUgX1BERldJTkRPV19IXworCisvLyAjZGVmaW5lIFZDX0VYVFJBTEVBTgorLy8gI2luY2x1ZGUgPGFmeGV4dC5oPgorLy8gI2luY2x1ZGUgPGFmeGNtbi5oPgorCisjaWZuZGVmIF9JTkNfUERGQVBJCisJI2RlZmluZSBfSU5DX1BERkFQSQorIAorCSNpbmNsdWRlICIuLi8uLi8uLi9jb3JlL2luY2x1ZGUvZnBkZmFwaS9mcGRmX21vZHVsZS5oIiAKKwkjaW5jbHVkZSAiLi4vLi4vLi4vY29yZS9pbmNsdWRlL2ZwZGZkb2MvZnBkZl9kb2MuaCIgCisJI2luY2x1ZGUgIi4uLy4uLy4uL2NvcmUvaW5jbHVkZS9mcGRmZG9jL2ZwZGZfdnQuaCIgCisJI2luY2x1ZGUgIi4uLy4uLy4uL2NvcmUvaW5jbHVkZS9meGNydC9meF94bWwuaCIgCisKKwkjaW5jbHVkZSAiLi4vZnBkZl9md2xldmVudC5oIgorCSNpbmNsdWRlICIuLi9meF9zeXN0ZW1oYW5kbGVyLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIi4uL2Z4ZWRpdC9meF9lZGl0LmgiCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfQnV0dG9uLmggYi9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BXTF9CdXR0b24uaAppbmRleCAyMDJhMGQxLi44NDE2YzRkIDEwMDY0NAotLS0gYS9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BXTF9CdXR0b24uaAorKysgYi9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BXTF9CdXR0b24uaApAQCAtMSwyOCArMSwyOCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfUFdMX0JVVFRPTl9IXw0KLSNkZWZpbmUgX1BXTF9CVVRUT05fSF8NCi0NCi1jbGFzcyBQV0xfQ0xBU1MgQ1BXTF9CdXR0b24gOiBwdWJsaWMgQ1BXTF9XbmQgIA0KLXsNCi1wdWJsaWM6DQotCUNQV0xfQnV0dG9uKCk7DQotCXZpcnR1YWwgfkNQV0xfQnV0dG9uKCk7DQotDQotcHVibGljOg0KLQl2aXJ0dWFsIENGWF9CeXRlU3RyaW5nCQlHZXRDbGFzc05hbWUoKSBjb25zdDsNCi0JdmlydHVhbCB2b2lkCQkJCU9uQ3JlYXRlKFBXTF9DUkVBVEVQQVJBTSAmIGNwKTsNCi0NCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uTEJ1dHRvbkRvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZyk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkxCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsNCi0NCi1wcm90ZWN0ZWQ6DQotCUZYX0JPT0wJCQkJCQltX2JNb3VzZURvd247CQ0KLX07DQotDQotI2VuZGlmIC8vICFkZWZpbmVkKEFGWF9QV0xfQlVUVE9OX0hfXzVBNjA4MEFBXzMzQzVfNEZDOV85MUZDX0Q5NjQ0QzQxMTIwQV9fSU5DTFVERURfKQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX1BXTF9CVVRUT05fSF8KKyNkZWZpbmUgX1BXTF9CVVRUT05fSF8KKworY2xhc3MgUFdMX0NMQVNTIENQV0xfQnV0dG9uIDogcHVibGljIENQV0xfV25kICAKK3sKK3B1YmxpYzoKKwlDUFdMX0J1dHRvbigpOworCXZpcnR1YWwgfkNQV0xfQnV0dG9uKCk7CisKK3B1YmxpYzoKKwl2aXJ0dWFsIENGWF9CeXRlU3RyaW5nCQlHZXRDbGFzc05hbWUoKSBjb25zdDsKKwl2aXJ0dWFsIHZvaWQJCQkJT25DcmVhdGUoUFdMX0NSRUFURVBBUkFNICYgY3ApOworCisJdmlydHVhbCBGWF9CT09MCQkJCU9uTEJ1dHRvbkRvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZyk7CisJdmlydHVhbCBGWF9CT09MCQkJCU9uTEJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOworCitwcm90ZWN0ZWQ6CisJRlhfQk9PTAkJCQkJCW1fYk1vdXNlRG93bjsJCit9OworCisjZW5kaWYgLy8gIWRlZmluZWQoQUZYX1BXTF9CVVRUT05fSF9fNUE2MDgwQUFfMzNDNV80RkM5XzkxRkNfRDk2NDRDNDExMjBBX19JTkNMVURFRF8pCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0NhcmV0LmggYi9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BXTF9DYXJldC5oCmluZGV4IDQ1ODZkNDcuLjYwMGU1MDkgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0NhcmV0LmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfQ2FyZXQuaApAQCAtMSw1OCArMSw1OCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfUFdMX0NBUkVUX0hfDQotI2RlZmluZSBfUFdMX0NBUkVUX0hfDQotDQotc3RydWN0IFBXTF9DQVJFVF9JTkZPDQotew0KLXB1YmxpYzoNCi0JUFdMX0NBUkVUX0lORk8oKSA6IGJWaXNpYmxlKEZBTFNFKSwgcHRIZWFkKDAsMCksIHB0Rm9vdCgwLDApDQotCXsJCQ0KLQl9DQotDQotCUZYX0JPT0wJCQkJCQliVmlzaWJsZTsNCi0JQ1BERl9Qb2ludAkJCQkJcHRIZWFkOw0KLQlDUERGX1BvaW50CQkJCQlwdEZvb3Q7DQotfTsNCi0NCi0NCi1jbGFzcyBDUFdMX0NhcmV0IDogcHVibGljIENQV0xfV25kICANCi17DQotcHVibGljOg0KLQlDUFdMX0NhcmV0KCk7DQotCXZpcnR1YWwgfkNQV0xfQ2FyZXQoKTsNCi1wdWJsaWM6DQotCXZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCUdldENsYXNzTmFtZSgpIGNvbnN0Ow0KLQl2aXJ0dWFsIHZvaWQJCQkJR2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oQ0ZYX0J5dGVUZXh0QnVmICYgc0FwcFN0cmVhbSk7DQotCXZpcnR1YWwgdm9pZAkJCQlEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSk7DQotCXZpcnR1YWwgdm9pZAkJCQlJbnZhbGlkYXRlUmVjdChDUERGX1JlY3QgKiBwUmVjdCA9IE5VTEwpOw0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJU2V0VmlzaWJsZShGWF9CT09MIGJWaXNpYmxlKSB7fQ0KLQ0KLQl2aXJ0dWFsCXZvaWQJCQkJVGltZXJQcm9jKCk7DQotDQotCXZvaWQJCQkJCQlTZXRDYXJldChGWF9CT09MIGJWaXNpYmxlLCBjb25zdCBDUERGX1BvaW50ICYgcHRIZWFkLCBjb25zdCBDUERGX1BvaW50ICYgcHRGb290KTsJDQotCUNGWF9CeXRlU3RyaW5nCQkJCUdldENhcmV0QXBwZWFyYW5jZVN0cmVhbShjb25zdCBDUERGX1BvaW50ICYgcHRPZmZzZXQpOw0KLQ0KLXByaXZhdGU6DQotCXZvaWQJCQkJCQlHZXRDYXJldEFwcChDRlhfQnl0ZVRleHRCdWYgJiBzQXBwU3RyZWFtLGNvbnN0IENQREZfUG9pbnQgJiBwdE9mZnNldCk7DQotCUNQREZfUmVjdAkJCQkJR2V0Q2FyZXRSZWN0KCkgY29uc3Q7DQotDQotCUZYX0JPT0wJCQkJCQltX2JGbGFzaDsNCi0JQ1BERl9Qb2ludAkJCQkJbV9wdEhlYWQ7DQotCUNQREZfUG9pbnQJCQkJCW1fcHRGb290Ow0KLQlGWF9GTE9BVAkJCQkJbV9mV2lkdGg7DQotCUZYX0lOVDMyCQkJCQkJbV9uRGVsYXk7DQotDQotcHVibGljOg0KLQl2b2lkCQkJCQkJU2V0SW52YWxpZFJlY3QoQ1BERl9SZWN0IHJjKSB7bV9yY0ludmFsaWQgPSByYzt9DQotcHJpdmF0ZToNCi0JQ1BERl9SZWN0CQkJCQltX3JjSW52YWxpZDsNCi19Ow0KLQ0KLSNlbmRpZiAvLyAhZGVmaW5lZChBRlhfUFdMX0NBUkVUX0hfXzZBNzI5NjEyXzQxNzNfNEI2NV9CQ0FCXzdDNkM4NTBFQ0E0N19fSU5DTFVERURfKQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX1BXTF9DQVJFVF9IXworI2RlZmluZSBfUFdMX0NBUkVUX0hfCisKK3N0cnVjdCBQV0xfQ0FSRVRfSU5GTworeworcHVibGljOgorCVBXTF9DQVJFVF9JTkZPKCkgOiBiVmlzaWJsZShGQUxTRSksIHB0SGVhZCgwLDApLCBwdEZvb3QoMCwwKQorCXsJCQorCX0KKworCUZYX0JPT0wJCQkJCQliVmlzaWJsZTsKKwlDUERGX1BvaW50CQkJCQlwdEhlYWQ7CisJQ1BERl9Qb2ludAkJCQkJcHRGb290OworfTsKKworCitjbGFzcyBDUFdMX0NhcmV0IDogcHVibGljIENQV0xfV25kICAKK3sKK3B1YmxpYzoKKwlDUFdMX0NhcmV0KCk7CisJdmlydHVhbCB+Q1BXTF9DYXJldCgpOworcHVibGljOgorCXZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCUdldENsYXNzTmFtZSgpIGNvbnN0OworCXZpcnR1YWwgdm9pZAkJCQlHZXRUaGlzQXBwZWFyYW5jZVN0cmVhbShDRlhfQnl0ZVRleHRCdWYgJiBzQXBwU3RyZWFtKTsKKwl2aXJ0dWFsIHZvaWQJCQkJRHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpOworCXZpcnR1YWwgdm9pZAkJCQlJbnZhbGlkYXRlUmVjdChDUERGX1JlY3QgKiBwUmVjdCA9IE5VTEwpOworCisJdmlydHVhbCB2b2lkCQkJCVNldFZpc2libGUoRlhfQk9PTCBiVmlzaWJsZSkge30KKworCXZpcnR1YWwJdm9pZAkJCQlUaW1lclByb2MoKTsKKworCXZvaWQJCQkJCQlTZXRDYXJldChGWF9CT09MIGJWaXNpYmxlLCBjb25zdCBDUERGX1BvaW50ICYgcHRIZWFkLCBjb25zdCBDUERGX1BvaW50ICYgcHRGb290KTsJCisJQ0ZYX0J5dGVTdHJpbmcJCQkJR2V0Q2FyZXRBcHBlYXJhbmNlU3RyZWFtKGNvbnN0IENQREZfUG9pbnQgJiBwdE9mZnNldCk7CisKK3ByaXZhdGU6CisJdm9pZAkJCQkJCUdldENhcmV0QXBwKENGWF9CeXRlVGV4dEJ1ZiAmIHNBcHBTdHJlYW0sY29uc3QgQ1BERl9Qb2ludCAmIHB0T2Zmc2V0KTsKKwlDUERGX1JlY3QJCQkJCUdldENhcmV0UmVjdCgpIGNvbnN0OworCisJRlhfQk9PTAkJCQkJCW1fYkZsYXNoOworCUNQREZfUG9pbnQJCQkJCW1fcHRIZWFkOworCUNQREZfUG9pbnQJCQkJCW1fcHRGb290OworCUZYX0ZMT0FUCQkJCQltX2ZXaWR0aDsKKwlGWF9JTlQzMgkJCQkJCW1fbkRlbGF5OworCitwdWJsaWM6CisJdm9pZAkJCQkJCVNldEludmFsaWRSZWN0KENQREZfUmVjdCByYykge21fcmNJbnZhbGlkID0gcmM7fQorcHJpdmF0ZToKKwlDUERGX1JlY3QJCQkJCW1fcmNJbnZhbGlkOworfTsKKworI2VuZGlmIC8vICFkZWZpbmVkKEFGWF9QV0xfQ0FSRVRfSF9fNkE3Mjk2MTJfNDE3M180QjY1X0JDQUJfN0M2Qzg1MEVDQTQ3X19JTkNMVURFRF8pCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0NvbWJvQm94LmggYi9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BXTF9Db21ib0JveC5oCmluZGV4IGY2NGI2MzYuLjViOTFmZTQgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0NvbWJvQm94LmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfQ29tYm9Cb3guaApAQCAtMSwxMTUgKzEsMTE1IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9QV0xfQ09NQk9CT1hfSF8NCi0jZGVmaW5lIF9QV0xfQ09NQk9CT1hfSF8NCi0NCi1jbGFzcyBDUFdMX0NCRWRpdCA6IHB1YmxpYyBDUFdMX0VkaXQNCi17DQotcHVibGljOg0KLQlDUFdMX0NCRWRpdCgpe307DQotCXZpcnR1YWwgfkNQV0xfQ0JFZGl0KCl7fTsNCi19Ow0KLQ0KLWNsYXNzIFBXTF9DTEFTUyBDUFdMX0NCTGlzdEJveCA6IHB1YmxpYyBDUFdMX0xpc3RCb3gNCi17DQotcHVibGljOg0KLQlDUFdMX0NCTGlzdEJveCgpe307DQotCXZpcnR1YWwgfkNQV0xfQ0JMaXN0Qm94KCl7fTsNCi0NCi1wdWJsaWM6DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkxCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsNCi0NCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uS2V5RG93bihGWF9XT1JEIG5DaGFyLCBGWF9CT09MICYgYkV4aXQsIEZYX0RXT1JEIG5GbGFnKTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uQ2hhcihGWF9XT1JEIG5DaGFyLCBGWF9CT09MICYgYkV4aXQsIEZYX0RXT1JEIG5GbGFnKTsNCi19Ow0KLQ0KLSNkZWZpbmUgUFdMX0NPTUJPQk9YX0JVVFRPTl9XSURUSAkJMTMNCi0NCi1jbGFzcyBDUFdMX0NCQnV0dG9uIDogcHVibGljIENQV0xfV25kDQotew0KLXB1YmxpYzoNCi0JQ1BXTF9DQkJ1dHRvbigpe307DQotCXZpcnR1YWwgfkNQV0xfQ0JCdXR0b24oKXt9Ow0KLQ0KLXB1YmxpYzoNCi0JdmlydHVhbCB2b2lkCQkJCUdldFRoaXNBcHBlYXJhbmNlU3RyZWFtKENGWF9CeXRlVGV4dEJ1ZiAmIHNBcHBTdHJlYW0pOw0KLQl2aXJ0dWFsIHZvaWQJCQkJRHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpOw0KLQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25MQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uTEJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOw0KLQ0KLX07DQotDQotY2xhc3MgUFdMX0NMQVNTIENQV0xfQ29tYm9Cb3ggOiBwdWJsaWMgQ1BXTF9XbmQgIA0KLXsNCi1wdWJsaWM6DQotCUNQV0xfQ29tYm9Cb3goKTsNCi0Jb3BlcmF0b3IgQ1BXTF9FZGl0KiAoKQkJe3JldHVybiBtX3BFZGl0O30NCi0NCi1wdWJsaWM6DQotCXZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCUdldENsYXNzTmFtZSgpIGNvbnN0Ow0KLQl2aXJ0dWFsIHZvaWQJCQkJT25DcmVhdGUoUFdMX0NSRUFURVBBUkFNICYgY3ApOw0KLQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25LZXlEb3duKEZYX1dPUkQgbkNoYXIsIEZYX0RXT1JEIG5GbGFnKTsJDQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkNoYXIoRlhfV09SRCBuQ2hhciwgRlhfRFdPUkQgbkZsYWcpOw0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJT25Ob3RpZnkoQ1BXTF9XbmQqIHBXbmQsIEZYX0RXT1JEIG1zZywgRlhfSU5UUFRSIHdQYXJhbSA9IDAsIEZYX0lOVFBUUiBsUGFyYW0gPSAwKTsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCUNyZWF0ZUNoaWxkV25kKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKTsNCi0JdmlydHVhbCB2b2lkCQkJCVJlUG9zQ2hpbGRXbmQoKTsNCi0NCi0JdmlydHVhbCBDUERGX1JlY3QJCQlHZXRGb2N1c1JlY3QoKSBjb25zdDsNCi0JDQotCXZpcnR1YWwgdm9pZAkJCQlTZXRGb2N1cygpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJS2lsbEZvY3VzKCk7DQotDQotCUZYX0JPT0wJCQkJCQlJc01vZGlmaWVkKCkgY29uc3Q7DQotDQotcHVibGljOgkNCi0Jdm9pZAkJCQkJCVNldEZpbGxlck5vdGlmeShJUFdMX0ZpbGxlcl9Ob3RpZnkqIHBOb3RpZnkpOw0KLQ0KLQlDRlhfV2lkZVN0cmluZwkJCQlHZXRUZXh0KCkgY29uc3Q7DQotCXZvaWQJCQkJCQlTZXRUZXh0KEZYX0xQQ1dTVFIgdGV4dCk7DQotDQotCXZvaWQJCQkJCQlBZGRTdHJpbmcoRlhfTFBDV1NUUiBzdHJpbmcpOw0KLQlGWF9JTlQzMgkJCQkJR2V0U2VsZWN0KCkgY29uc3Q7DQotCXZvaWQJCQkJCQlTZXRTZWxlY3QoRlhfSU5UMzIgbkl0ZW1JbmRleCk7DQotDQotCXZvaWQJCQkJCQlTZXRFZGl0U2VsKEZYX0lOVDMyIG5TdGFydENoYXIsRlhfSU5UMzIgbkVuZENoYXIpOw0KLQl2b2lkCQkJCQkJR2V0RWRpdFNlbChGWF9JTlQzMiAmIG5TdGFydENoYXIsIEZYX0lOVDMyICYgbkVuZENoYXIgKSBjb25zdDsNCi0Jdm9pZAkJCQkJCUNsZWFyKCk7DQotCXZvaWQJCQkJCQlTZWxlY3RBbGwoKTsNCi0JRlhfQk9PTAkJCQkJCUlzUG9wdXAoKSBjb25zdDsNCi0NCi0Jdm9pZAkJCQkJCVNldFNlbGVjdFRleHQoKTsNCi0NCi1wcml2YXRlOgkNCi0Jdm9pZAkJCQkJCUNyZWF0ZUVkaXQoY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApOw0KLQl2b2lkCQkJCQkJQ3JlYXRlQnV0dG9uKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKTsNCi0Jdm9pZAkJCQkJCUNyZWF0ZUxpc3RCb3goY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApOw0KLQ0KLQl2b2lkCQkJCQkJU2V0UG9wdXAoRlhfQk9PTCBiUG9wdXApOw0KLQkNCi1wcml2YXRlOg0KLQlDUFdMX0NCRWRpdCoJCQkJbV9wRWRpdDsNCi0JQ1BXTF9DQkJ1dHRvbioJCQkJbV9wQnV0dG9uOw0KLQlDUFdMX0NCTGlzdEJveCoJCQkJbV9wTGlzdDsNCi0NCi0JRlhfQk9PTAkJCQkJCW1fYlBvcHVwOw0KLQlDUERGX1JlY3QJCQkJCW1fcmNPbGRXaW5kb3c7DQotCUZYX0lOVDMyCQkJCQltX25Qb3B1cFdoZXJlOw0KLQlGWF9JTlQzMgkJCQkJbV9uU2VsZWN0SXRlbTsNCi0JSVBXTF9GaWxsZXJfTm90aWZ5KgkJCW1fcEZpbGxlck5vdGlmeTsNCi0NCi1wdWJsaWM6DQotCXZvaWQJCQkJCQkJQXR0YWNoRkZMRGF0YSh2b2lkKiBwRGF0YSkge21fcEZvcm1GaWxsZXIgPSBwRGF0YTt9DQotcHJpdmF0ZToNCi0Jdm9pZCoJCQkJCQkJbV9wRm9ybUZpbGxlcjsNCi19Ow0KLQ0KLSNlbmRpZiAvLyAhZGVmaW5lZChBRlhfUFdMX0NPTUJPQk9YX0hfXzlENjY0NUY4XzY0QUFfNDgwNl85NEU4Xzk1RkRFREQzOUMxN19fSU5DTFVERURfKQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX1BXTF9DT01CT0JPWF9IXworI2RlZmluZSBfUFdMX0NPTUJPQk9YX0hfCisKK2NsYXNzIENQV0xfQ0JFZGl0IDogcHVibGljIENQV0xfRWRpdAoreworcHVibGljOgorCUNQV0xfQ0JFZGl0KCl7fTsKKwl2aXJ0dWFsIH5DUFdMX0NCRWRpdCgpe307Cit9OworCitjbGFzcyBQV0xfQ0xBU1MgQ1BXTF9DQkxpc3RCb3ggOiBwdWJsaWMgQ1BXTF9MaXN0Qm94Cit7CitwdWJsaWM6CisJQ1BXTF9DQkxpc3RCb3goKXt9OworCXZpcnR1YWwgfkNQV0xfQ0JMaXN0Qm94KCl7fTsKKworcHVibGljOgorCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkxCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsKKworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbktleURvd24oRlhfV09SRCBuQ2hhciwgRlhfQk9PTCAmIGJFeGl0LCBGWF9EV09SRCBuRmxhZyk7CisJdmlydHVhbCBGWF9CT09MCQkJCU9uQ2hhcihGWF9XT1JEIG5DaGFyLCBGWF9CT09MICYgYkV4aXQsIEZYX0RXT1JEIG5GbGFnKTsKK307CisKKyNkZWZpbmUgUFdMX0NPTUJPQk9YX0JVVFRPTl9XSURUSAkJMTMKKworY2xhc3MgQ1BXTF9DQkJ1dHRvbiA6IHB1YmxpYyBDUFdMX1duZAoreworcHVibGljOgorCUNQV0xfQ0JCdXR0b24oKXt9OworCXZpcnR1YWwgfkNQV0xfQ0JCdXR0b24oKXt9OworCitwdWJsaWM6CisJdmlydHVhbCB2b2lkCQkJCUdldFRoaXNBcHBlYXJhbmNlU3RyZWFtKENGWF9CeXRlVGV4dEJ1ZiAmIHNBcHBTdHJlYW0pOworCXZpcnR1YWwgdm9pZAkJCQlEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSk7CisKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25MQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25MQnV0dG9uVXAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZyk7CisKK307CisKK2NsYXNzIFBXTF9DTEFTUyBDUFdMX0NvbWJvQm94IDogcHVibGljIENQV0xfV25kICAKK3sKK3B1YmxpYzoKKwlDUFdMX0NvbWJvQm94KCk7CisJb3BlcmF0b3IgQ1BXTF9FZGl0KiAoKQkJe3JldHVybiBtX3BFZGl0O30KKworcHVibGljOgorCXZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCUdldENsYXNzTmFtZSgpIGNvbnN0OworCXZpcnR1YWwgdm9pZAkJCQlPbkNyZWF0ZShQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7CisKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJT25LZXlEb3duKEZYX1dPUkQgbkNoYXIsIEZYX0RXT1JEIG5GbGFnKTsJCisJdmlydHVhbCBGWF9CT09MCQkJCU9uQ2hhcihGWF9XT1JEIG5DaGFyLCBGWF9EV09SRCBuRmxhZyk7CisKKwl2aXJ0dWFsIHZvaWQJCQkJT25Ob3RpZnkoQ1BXTF9XbmQqIHBXbmQsIEZYX0RXT1JEIG1zZywgRlhfSU5UUFRSIHdQYXJhbSA9IDAsIEZYX0lOVFBUUiBsUGFyYW0gPSAwKTsKKworCXZpcnR1YWwgdm9pZAkJCQlDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7CisJdmlydHVhbCB2b2lkCQkJCVJlUG9zQ2hpbGRXbmQoKTsKKworCXZpcnR1YWwgQ1BERl9SZWN0CQkJR2V0Rm9jdXNSZWN0KCkgY29uc3Q7CisJCisJdmlydHVhbCB2b2lkCQkJCVNldEZvY3VzKCk7CisJdmlydHVhbCB2b2lkCQkJCUtpbGxGb2N1cygpOworCisJRlhfQk9PTAkJCQkJCUlzTW9kaWZpZWQoKSBjb25zdDsKKworcHVibGljOgkKKwl2b2lkCQkJCQkJU2V0RmlsbGVyTm90aWZ5KElQV0xfRmlsbGVyX05vdGlmeSogcE5vdGlmeSk7CisKKwlDRlhfV2lkZVN0cmluZwkJCQlHZXRUZXh0KCkgY29uc3Q7CisJdm9pZAkJCQkJCVNldFRleHQoRlhfTFBDV1NUUiB0ZXh0KTsKKworCXZvaWQJCQkJCQlBZGRTdHJpbmcoRlhfTFBDV1NUUiBzdHJpbmcpOworCUZYX0lOVDMyCQkJCQlHZXRTZWxlY3QoKSBjb25zdDsKKwl2b2lkCQkJCQkJU2V0U2VsZWN0KEZYX0lOVDMyIG5JdGVtSW5kZXgpOworCisJdm9pZAkJCQkJCVNldEVkaXRTZWwoRlhfSU5UMzIgblN0YXJ0Q2hhcixGWF9JTlQzMiBuRW5kQ2hhcik7CisJdm9pZAkJCQkJCUdldEVkaXRTZWwoRlhfSU5UMzIgJiBuU3RhcnRDaGFyLCBGWF9JTlQzMiAmIG5FbmRDaGFyICkgY29uc3Q7CisJdm9pZAkJCQkJCUNsZWFyKCk7CisJdm9pZAkJCQkJCVNlbGVjdEFsbCgpOworCUZYX0JPT0wJCQkJCQlJc1BvcHVwKCkgY29uc3Q7CisKKwl2b2lkCQkJCQkJU2V0U2VsZWN0VGV4dCgpOworCitwcml2YXRlOgkKKwl2b2lkCQkJCQkJQ3JlYXRlRWRpdChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7CisJdm9pZAkJCQkJCUNyZWF0ZUJ1dHRvbihjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7CisJdm9pZAkJCQkJCUNyZWF0ZUxpc3RCb3goY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApOworCisJdm9pZAkJCQkJCVNldFBvcHVwKEZYX0JPT0wgYlBvcHVwKTsKKwkKK3ByaXZhdGU6CisJQ1BXTF9DQkVkaXQqCQkJCW1fcEVkaXQ7CisJQ1BXTF9DQkJ1dHRvbioJCQkJbV9wQnV0dG9uOworCUNQV0xfQ0JMaXN0Qm94KgkJCQltX3BMaXN0OworCisJRlhfQk9PTAkJCQkJCW1fYlBvcHVwOworCUNQREZfUmVjdAkJCQkJbV9yY09sZFdpbmRvdzsKKwlGWF9JTlQzMgkJCQkJbV9uUG9wdXBXaGVyZTsKKwlGWF9JTlQzMgkJCQkJbV9uU2VsZWN0SXRlbTsKKwlJUFdMX0ZpbGxlcl9Ob3RpZnkqCQkJbV9wRmlsbGVyTm90aWZ5OworCitwdWJsaWM6CisJdm9pZAkJCQkJCQlBdHRhY2hGRkxEYXRhKHZvaWQqIHBEYXRhKSB7bV9wRm9ybUZpbGxlciA9IHBEYXRhO30KK3ByaXZhdGU6CisJdm9pZCoJCQkJCQkJbV9wRm9ybUZpbGxlcjsKK307CisKKyNlbmRpZiAvLyAhZGVmaW5lZChBRlhfUFdMX0NPTUJPQk9YX0hfXzlENjY0NUY4XzY0QUFfNDgwNl85NEU4Xzk1RkRFREQzOUMxN19fSU5DTFVERURfKQorCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BXTF9FZGl0LmggYi9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BXTF9FZGl0LmgKaW5kZXggNzFmNjc1Ni4uZDg2Y2I3NyAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfRWRpdC5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0VkaXQuaApAQCAtMSwxMzggKzEsMTM4IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9QV0xfRURJVF9IXw0KLSNkZWZpbmUgX1BXTF9FRElUX0hfDQotDQotY2xhc3MgSVBXTF9GaWxsZXJfTm90aWZ5Ow0KLWNsYXNzIENQV0xfRWRpdDsNCi1jbGFzcyBJUFdMX1NwZWxsQ2hlY2s7DQotDQotY2xhc3MgSVBXTF9GaWxsZXJfTm90aWZ5DQotew0KLXB1YmxpYzoNCi0JdmlydHVhbCB2b2lkCQkJCQlRdWVyeVdoZXJlUG9wdXAodm9pZCogcFByaXZhdGVEYXRhLCBGWF9GTE9BVCBmUG9wdXBNaW4sRlhfRkxPQVQgZlBvcHVwTWF4LCANCi0JCQkJCQkJCQkJRlhfSU5UMzIgJiBuUmV0LCBGWF9GTE9BVCAmIGZQb3B1cFJldCkgPSAwOyAvL25SZXQ6ICgwOmJvdHRvbSAxOnRvcCkNCi0JdmlydHVhbCB2b2lkCQkJCQlPbkJlZm9yZUtleVN0cm9rZShGWF9CT09MIGJFZGl0T3JMaXN0LCB2b2lkKiBwUHJpdmF0ZURhdGEsIEZYX0lOVDMyIG5LZXlDb2RlLA0KLQkJCQkJCQkJCQlDRlhfV2lkZVN0cmluZyAmIHN0ckNoYW5nZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZUV4LCANCi0JCQkJCQkJCQkJaW50IG5TZWxTdGFydCwgaW50IG5TZWxFbmQsDQotCQkJCQkJCQkJCUZYX0JPT0wgYktleURvd24sIEZYX0JPT0wgJiBiUkMsIEZYX0JPT0wgJiBiRXhpdCwgRlhfRFdPUkQgbkZsYWcpID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCQlPbkFmdGVyS2V5U3Ryb2tlKEZYX0JPT0wgYkVkaXRPckxpc3QsIHZvaWQqIHBQcml2YXRlRGF0YSwgRlhfQk9PTCAmIGJFeGl0LCBGWF9EV09SRCBuRmxhZykgPSAwOw0KLX07DQotDQotY2xhc3MgUFdMX0NMQVNTIENQV0xfRWRpdCA6IHB1YmxpYyBDUFdMX0VkaXRDdHJsLCBwdWJsaWMgSUZYX0VkaXRfT3ByTm90aWZ5DQotew0KLXB1YmxpYzoNCi0JQ1BXTF9FZGl0KCk7DQotCXZpcnR1YWwgfkNQV0xfRWRpdCgpOw0KLQ0KLXB1YmxpYzoNCi0JdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJCUdldENsYXNzTmFtZSgpIGNvbnN0Ow0KLQl2aXJ0dWFsIHZvaWQJCQkJCU9uRGVzdHJveSgpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCU9uQ3JlYXRlZCgpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCVJlUG9zQ2hpbGRXbmQoKTsNCi0JdmlydHVhbCBDUERGX1JlY3QJCQkJR2V0Q2xpZW50UmVjdCgpIGNvbnN0Ow0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJCUdldFRoaXNBcHBlYXJhbmNlU3RyZWFtKENGWF9CeXRlVGV4dEJ1ZiAmIHNBcHBTdHJlYW0pOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCURyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKTsNCi0NCi0JdmlydHVhbCBGWF9CT09MCQkJCQlPbkxCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uTEJ1dHRvbkRibENsayhjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCQlPblJCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCQlPbk1vdXNlV2hlZWwoc2hvcnQgekRlbHRhLCBjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsNCi0NCi0JdmlydHVhbCBGWF9CT09MCQkJCQlPbktleURvd24oRlhfV09SRCBuQ2hhciwgRlhfRFdPUkQgbkZsYWcpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uQ2hhcihGWF9XT1JEIG5DaGFyLCBGWF9EV09SRCBuRmxhZyk7DQotDQotCXZpcnR1YWwgQ1BERl9SZWN0CQkJCUdldEZvY3VzUmVjdCgpIGNvbnN0Ow0KLQ0KLXB1YmxpYzoJCQ0KLQl2b2lkCQkJCQkJCVNldEFsaWduRm9ybWF0SChQV0xfRURJVF9BTElHTkZPUk1BVF9IIG5Gb3JtYXQgPSBQRUFIX0xFRlQsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSk7CS8vMDpsZWZ0IDE6cmlnaHQgMjptaWRkbGUgDQotCXZvaWQJCQkJCQkJU2V0QWxpZ25Gb3JtYXRWKFBXTF9FRElUX0FMSUdORk9STUFUX1YgbkZvcm1hdCA9IFBFQVZfVE9QLCBGWF9CT09MIGJQYWludCA9IFRSVUUpOwkvLzA6dG9wIDE6Ym90dG9tIDI6Y2VudGVyDQotDQotCXZvaWQJCQkJCQkJU2V0Q2hhckFycmF5KEZYX0lOVDMyIG5DaGFyQXJyYXkpOw0KLQl2b2lkCQkJCQkJCVNldExpbWl0Q2hhcihGWF9JTlQzMiBuTGltaXRDaGFyKTsNCi0NCi0Jdm9pZAkJCQkJCQlTZXRIb3J6U2NhbGUoRlhfSU5UMzIgbkhvcnpTY2FsZSwgRlhfQk9PTCBiUGFpbnQgPSBUUlVFKTsNCi0Jdm9pZAkJCQkJCQlTZXRDaGFyU3BhY2UoRlhfRkxPQVQgZkNoYXJTcGFjZSwgRlhfQk9PTCBiUGFpbnQgPSBUUlVFKTsNCi0NCi0Jdm9pZAkJCQkJCQlTZXRMaW5lTGVhZGluZyhGWF9GTE9BVCBmTGluZUxlYWRpbmcsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSk7DQotDQotCXZvaWQJCQkJCQkJRW5hYmxlU3BlbGxDaGVjayhGWF9CT09MIGJFbmFibGVkKTsNCi0NCi0JRlhfQk9PTAkJCQkJCQlDYW5TZWxlY3RBbGwoKSBjb25zdDsNCi0JRlhfQk9PTAkJCQkJCQlDYW5DbGVhcigpIGNvbnN0Ow0KLQlGWF9CT09MCQkJCQkJCUNhbkNvcHkoKSBjb25zdDsNCi0JRlhfQk9PTAkJCQkJCQlDYW5DdXQoKSBjb25zdDsNCi0JRlhfQk9PTAkJCQkJCQlDYW5QYXN0ZSgpIGNvbnN0Ow0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJCUNvcHlUZXh0KCk7DQotCXZpcnR1YWwgdm9pZAkJCQkJUGFzdGVUZXh0KCk7DQotCXZpcnR1YWwgdm9pZCAJCQkJCUN1dFRleHQoKTsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCQlTZXRUZXh0KEZYX0xQQ1dTVFIgY3NUZXh0KTsNCi0Jdm9pZAkJCQkJCQlSZXBsYWNlU2VsKEZYX0xQQ1dTVFIgY3NUZXh0KTsNCi0NCi0JQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldFRleHRBcHBlYXJhbmNlU3RyZWFtKGNvbnN0IENQREZfUG9pbnQgJiBwdE9mZnNldCkgY29uc3Q7DQotCUNGWF9CeXRlU3RyaW5nCQkJCQlHZXRDYXJldEFwcGVhcmFuY2VTdHJlYW0oY29uc3QgQ1BERl9Qb2ludCAmIHB0T2Zmc2V0KSBjb25zdDsJDQotCUNGWF9CeXRlU3RyaW5nCQkJCQlHZXRTZWxlY3RBcHBlYXJhbmNlU3RyZWFtKGNvbnN0IENQREZfUG9pbnQgJiBwdE9mZnNldCkgY29uc3Q7DQotDQotCUZYX0JPT0wJCQkJCQkJSXNUZXh0RnVsbCgpIGNvbnN0OwkNCi0NCi0Jc3RhdGljIEZYX0ZMT0FUCQkJCQlHZXRDaGFyQXJyYXlBdXRvRm9udFNpemUoQ1BERl9Gb250KiBwRm9udCwgY29uc3QgQ1BERl9SZWN0JiByY1BsYXRlLCBGWF9JTlQzMiBuQ2hhckFycmF5KTsNCi0NCi0Jdm9pZAkJCQkJCQlTZXRGaWxsZXJOb3RpZnkoSVBXTF9GaWxsZXJfTm90aWZ5KiBwTm90aWZ5KSB7bV9wRmlsbGVyTm90aWZ5ID0gcE5vdGlmeTt9DQotDQotCXZvaWQJCQkJCQkJR2VuZXJhdGVQYWdlT2JqZWN0cyhDUERGX1BhZ2VPYmplY3RzKiBwUGFnZU9iamVjdHMsIA0KLQkJCQkJCQkJCQljb25zdCBDUERGX1BvaW50JiBwdE9mZnNldCwgQ0ZYX0FycmF5VGVtcGxhdGU8Q1BERl9UZXh0T2JqZWN0Kj4mIE9iakFycmF5KTsNCi0Jdm9pZAkJCQkJCQlHZW5lcmF0ZVBhZ2VPYmplY3RzKENQREZfUGFnZU9iamVjdHMqIHBQYWdlT2JqZWN0cywgDQotCQkJCQkJCQkJCWNvbnN0IENQREZfUG9pbnQmIHB0T2Zmc2V0KTsNCi0NCi1wcm90ZWN0ZWQ6DQotCXZpcnR1YWwgdm9pZAkJCQkJT25TZXRGb2N1cygpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCU9uS2lsbEZvY3VzKCk7DQotDQotcHJvdGVjdGVkOg0KLQl2aXJ0dWFsIHZvaWQJCQkJCU9uSW5zZXJ0V29yZChjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlJiBvbGRwbGFjZSk7DQotCXZpcnR1YWwgdm9pZAkJCQkJT25JbnNlcnRSZXR1cm4oY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgb2xkcGxhY2UpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCU9uQmFja1NwYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIG9sZHBsYWNlKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlPbkRlbGV0ZShjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlJiBvbGRwbGFjZSk7DQotCXZpcnR1YWwgdm9pZAkJCQkJT25DbGVhcihjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlJiBvbGRwbGFjZSk7DQotCXZpcnR1YWwgdm9pZAkJCQkJT25TZXRUZXh0KGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIG9sZHBsYWNlKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlPbkluc2VydFRleHQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgb2xkcGxhY2UpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCU9uQWRkVW5kbyhJRlhfRWRpdF9VbmRvSXRlbSogcFVuZG9JdGVtKTsNCi0NCi1wcml2YXRlOgkNCi0JQ1BWVF9Xb3JkUmFuZ2UJCQkJCUdldFNlbGVjdFdvcmRSYW5nZSgpIGNvbnN0Ow0KLQl2aXJ0dWFsIHZvaWQJCQkJCVNob3dWU2Nyb2xsQmFyKEZYX0JPT0wgYlNob3cpOw0KLQlGWF9CT09MCQkJCQkJCUlzVlNjcm9sbEJhclZpc2libGUoKSBjb25zdDsNCi0Jdm9pZAkJCQkJCQlTZXRQYXJhbUJ5RmxhZygpOw0KLQ0KLQlGWF9GTE9BVAkJCQkJCUdldENoYXJBcnJheUF1dG9Gb250U2l6ZShGWF9JTlQzMiBuQ2hhckFycmF5KTsNCi0JQ1BERl9Qb2ludAkJCQkJCUdldFdvcmRSaWdodEJvdHRvbVBvaW50KGNvbnN0IENQVlRfV29yZFBsYWNlJiB3cFdvcmQpOw0KLQ0KLQlDUFZUX1dvcmRSYW5nZQkJCQkJQ29tYmluZVdvcmRSYW5nZShjb25zdCBDUFZUX1dvcmRSYW5nZSYgd3IxLCBjb25zdCBDUFZUX1dvcmRSYW5nZSYgd3IyKTsNCi0JQ1BWVF9Xb3JkUmFuZ2UJCQkJCUdldExhdGluV29yZHNSYW5nZShjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpIGNvbnN0Ow0KLQlDUFZUX1dvcmRSYW5nZQkJCQkJR2V0TGF0aW5Xb3Jkc1JhbmdlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0Ow0KLQlDUFZUX1dvcmRSYW5nZQkJCQkJR2V0QXJhYmljV29yZHNSYW5nZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdDsNCi0JQ1BWVF9Xb3JkUmFuZ2UJCQkJCUdldFNhbWVXb3Jkc1JhbmdlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIEZYX0JPT0wgYkxhdGluLCBGWF9CT09MIGJBcmFiaWMpIGNvbnN0Ow0KLQ0KLQl2b2lkCQkJCQkJCUFqdXN0QXJhYmljV29yZHMoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UmIHdyKTsNCi1wdWJsaWM6DQotCUZYX0JPT0wJCQkJCQkJSXNQcm9jZWVkdG9PbkNoYXIoRlhfV09SRCBuS2V5Q29kZSwgRlhfRFdPUkQgbkZsYWcpOw0KLXByaXZhdGU6DQotCUlQV0xfRmlsbGVyX05vdGlmeSoJCQkJbV9wRmlsbGVyTm90aWZ5Ow0KLQlJUFdMX1NwZWxsQ2hlY2sqCQkJCW1fcFNwZWxsQ2hlY2s7DQotCUZYX0JPT0wJCQkJCQkJbV9iRm9jdXM7DQotCUNQREZfUmVjdAkJCQkJCW1fcmNPbGRXaW5kb3c7DQotcHVibGljOg0KLQl2b2lkCQkJCQkJCUF0dGFjaEZGTERhdGEodm9pZCogcERhdGEpIHttX3BGb3JtRmlsbGVyID0gcERhdGE7fQ0KLXByaXZhdGU6DQotCXZvaWQqCQkJCQkJCW1fcEZvcm1GaWxsZXI7DQotfTsNCi0NCi0jZW5kaWYgDQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfUFdMX0VESVRfSF8KKyNkZWZpbmUgX1BXTF9FRElUX0hfCisKK2NsYXNzIElQV0xfRmlsbGVyX05vdGlmeTsKK2NsYXNzIENQV0xfRWRpdDsKK2NsYXNzIElQV0xfU3BlbGxDaGVjazsKKworY2xhc3MgSVBXTF9GaWxsZXJfTm90aWZ5Cit7CitwdWJsaWM6CisJdmlydHVhbCB2b2lkCQkJCQlRdWVyeVdoZXJlUG9wdXAodm9pZCogcFByaXZhdGVEYXRhLCBGWF9GTE9BVCBmUG9wdXBNaW4sRlhfRkxPQVQgZlBvcHVwTWF4LCAKKwkJCQkJCQkJCQlGWF9JTlQzMiAmIG5SZXQsIEZYX0ZMT0FUICYgZlBvcHVwUmV0KSA9IDA7IC8vblJldDogKDA6Ym90dG9tIDE6dG9wKQorCXZpcnR1YWwgdm9pZAkJCQkJT25CZWZvcmVLZXlTdHJva2UoRlhfQk9PTCBiRWRpdE9yTGlzdCwgdm9pZCogcFByaXZhdGVEYXRhLCBGWF9JTlQzMiBuS2V5Q29kZSwKKwkJCQkJCQkJCQlDRlhfV2lkZVN0cmluZyAmIHN0ckNoYW5nZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZUV4LCAKKwkJCQkJCQkJCQlpbnQgblNlbFN0YXJ0LCBpbnQgblNlbEVuZCwKKwkJCQkJCQkJCQlGWF9CT09MIGJLZXlEb3duLCBGWF9CT09MICYgYlJDLCBGWF9CT09MICYgYkV4aXQsIEZYX0RXT1JEIG5GbGFnKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCQlPbkFmdGVyS2V5U3Ryb2tlKEZYX0JPT0wgYkVkaXRPckxpc3QsIHZvaWQqIHBQcml2YXRlRGF0YSwgRlhfQk9PTCAmIGJFeGl0LCBGWF9EV09SRCBuRmxhZykgPSAwOworfTsKKworY2xhc3MgUFdMX0NMQVNTIENQV0xfRWRpdCA6IHB1YmxpYyBDUFdMX0VkaXRDdHJsLCBwdWJsaWMgSUZYX0VkaXRfT3ByTm90aWZ5Cit7CitwdWJsaWM6CisJQ1BXTF9FZGl0KCk7CisJdmlydHVhbCB+Q1BXTF9FZGl0KCk7CisKK3B1YmxpYzoKKwl2aXJ0dWFsIENGWF9CeXRlU3RyaW5nCQkJR2V0Q2xhc3NOYW1lKCkgY29uc3Q7CisJdmlydHVhbCB2b2lkCQkJCQlPbkRlc3Ryb3koKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCU9uQ3JlYXRlZCgpOworCXZpcnR1YWwgdm9pZAkJCQkJUmVQb3NDaGlsZFduZCgpOworCXZpcnR1YWwgQ1BERl9SZWN0CQkJCUdldENsaWVudFJlY3QoKSBjb25zdDsKKworCXZpcnR1YWwgdm9pZAkJCQkJR2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oQ0ZYX0J5dGVUZXh0QnVmICYgc0FwcFN0cmVhbSk7CisJdmlydHVhbCB2b2lkCQkJCQlEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSk7CisKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uTEJ1dHRvbkRvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZyk7CisJdmlydHVhbCBGWF9CT09MCQkJCQlPbkxCdXR0b25EYmxDbGsoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZyk7CisJdmlydHVhbCBGWF9CT09MCQkJCQlPblJCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uTW91c2VXaGVlbChzaG9ydCB6RGVsdGEsIGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOworCisJdmlydHVhbCBGWF9CT09MCQkJCQlPbktleURvd24oRlhfV09SRCBuQ2hhciwgRlhfRFdPUkQgbkZsYWcpOworCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25DaGFyKEZYX1dPUkQgbkNoYXIsIEZYX0RXT1JEIG5GbGFnKTsKKworCXZpcnR1YWwgQ1BERl9SZWN0CQkJCUdldEZvY3VzUmVjdCgpIGNvbnN0OworCitwdWJsaWM6CQkKKwl2b2lkCQkJCQkJCVNldEFsaWduRm9ybWF0SChQV0xfRURJVF9BTElHTkZPUk1BVF9IIG5Gb3JtYXQgPSBQRUFIX0xFRlQsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSk7CS8vMDpsZWZ0IDE6cmlnaHQgMjptaWRkbGUgCisJdm9pZAkJCQkJCQlTZXRBbGlnbkZvcm1hdFYoUFdMX0VESVRfQUxJR05GT1JNQVRfViBuRm9ybWF0ID0gUEVBVl9UT1AsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSk7CS8vMDp0b3AgMTpib3R0b20gMjpjZW50ZXIKKworCXZvaWQJCQkJCQkJU2V0Q2hhckFycmF5KEZYX0lOVDMyIG5DaGFyQXJyYXkpOworCXZvaWQJCQkJCQkJU2V0TGltaXRDaGFyKEZYX0lOVDMyIG5MaW1pdENoYXIpOworCisJdm9pZAkJCQkJCQlTZXRIb3J6U2NhbGUoRlhfSU5UMzIgbkhvcnpTY2FsZSwgRlhfQk9PTCBiUGFpbnQgPSBUUlVFKTsKKwl2b2lkCQkJCQkJCVNldENoYXJTcGFjZShGWF9GTE9BVCBmQ2hhclNwYWNlLCBGWF9CT09MIGJQYWludCA9IFRSVUUpOworCisJdm9pZAkJCQkJCQlTZXRMaW5lTGVhZGluZyhGWF9GTE9BVCBmTGluZUxlYWRpbmcsIEZYX0JPT0wgYlBhaW50ID0gVFJVRSk7CisKKwl2b2lkCQkJCQkJCUVuYWJsZVNwZWxsQ2hlY2soRlhfQk9PTCBiRW5hYmxlZCk7CisKKwlGWF9CT09MCQkJCQkJCUNhblNlbGVjdEFsbCgpIGNvbnN0OworCUZYX0JPT0wJCQkJCQkJQ2FuQ2xlYXIoKSBjb25zdDsKKwlGWF9CT09MCQkJCQkJCUNhbkNvcHkoKSBjb25zdDsKKwlGWF9CT09MCQkJCQkJCUNhbkN1dCgpIGNvbnN0OworCUZYX0JPT0wJCQkJCQkJQ2FuUGFzdGUoKSBjb25zdDsKKworCXZpcnR1YWwgdm9pZAkJCQkJQ29weVRleHQoKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCVBhc3RlVGV4dCgpOworCXZpcnR1YWwgdm9pZCAJCQkJCUN1dFRleHQoKTsKKworCXZpcnR1YWwgdm9pZAkJCQkJU2V0VGV4dChGWF9MUENXU1RSIGNzVGV4dCk7CisJdm9pZAkJCQkJCQlSZXBsYWNlU2VsKEZYX0xQQ1dTVFIgY3NUZXh0KTsKKworCUNGWF9CeXRlU3RyaW5nCQkJCQlHZXRUZXh0QXBwZWFyYW5jZVN0cmVhbShjb25zdCBDUERGX1BvaW50ICYgcHRPZmZzZXQpIGNvbnN0OworCUNGWF9CeXRlU3RyaW5nCQkJCQlHZXRDYXJldEFwcGVhcmFuY2VTdHJlYW0oY29uc3QgQ1BERl9Qb2ludCAmIHB0T2Zmc2V0KSBjb25zdDsJCisJQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldFNlbGVjdEFwcGVhcmFuY2VTdHJlYW0oY29uc3QgQ1BERl9Qb2ludCAmIHB0T2Zmc2V0KSBjb25zdDsKKworCUZYX0JPT0wJCQkJCQkJSXNUZXh0RnVsbCgpIGNvbnN0OwkKKworCXN0YXRpYyBGWF9GTE9BVAkJCQkJR2V0Q2hhckFycmF5QXV0b0ZvbnRTaXplKENQREZfRm9udCogcEZvbnQsIGNvbnN0IENQREZfUmVjdCYgcmNQbGF0ZSwgRlhfSU5UMzIgbkNoYXJBcnJheSk7CisKKwl2b2lkCQkJCQkJCVNldEZpbGxlck5vdGlmeShJUFdMX0ZpbGxlcl9Ob3RpZnkqIHBOb3RpZnkpIHttX3BGaWxsZXJOb3RpZnkgPSBwTm90aWZ5O30KKworCXZvaWQJCQkJCQkJR2VuZXJhdGVQYWdlT2JqZWN0cyhDUERGX1BhZ2VPYmplY3RzKiBwUGFnZU9iamVjdHMsIAorCQkJCQkJCQkJCWNvbnN0IENQREZfUG9pbnQmIHB0T2Zmc2V0LCBDRlhfQXJyYXlUZW1wbGF0ZTxDUERGX1RleHRPYmplY3QqPiYgT2JqQXJyYXkpOworCXZvaWQJCQkJCQkJR2VuZXJhdGVQYWdlT2JqZWN0cyhDUERGX1BhZ2VPYmplY3RzKiBwUGFnZU9iamVjdHMsIAorCQkJCQkJCQkJCWNvbnN0IENQREZfUG9pbnQmIHB0T2Zmc2V0KTsKKworcHJvdGVjdGVkOgorCXZpcnR1YWwgdm9pZAkJCQkJT25TZXRGb2N1cygpOworCXZpcnR1YWwgdm9pZAkJCQkJT25LaWxsRm9jdXMoKTsKKworcHJvdGVjdGVkOgorCXZpcnR1YWwgdm9pZAkJCQkJT25JbnNlcnRXb3JkKGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIG9sZHBsYWNlKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCU9uSW5zZXJ0UmV0dXJuKGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIG9sZHBsYWNlKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCU9uQmFja1NwYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIG9sZHBsYWNlKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCU9uRGVsZXRlKGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIG9sZHBsYWNlKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCU9uQ2xlYXIoY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgb2xkcGxhY2UpOworCXZpcnR1YWwgdm9pZAkJCQkJT25TZXRUZXh0KGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIG9sZHBsYWNlKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCU9uSW5zZXJ0VGV4dChjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlJiBvbGRwbGFjZSk7CisJdmlydHVhbCB2b2lkCQkJCQlPbkFkZFVuZG8oSUZYX0VkaXRfVW5kb0l0ZW0qIHBVbmRvSXRlbSk7CisKK3ByaXZhdGU6CQorCUNQVlRfV29yZFJhbmdlCQkJCQlHZXRTZWxlY3RXb3JkUmFuZ2UoKSBjb25zdDsKKwl2aXJ0dWFsIHZvaWQJCQkJCVNob3dWU2Nyb2xsQmFyKEZYX0JPT0wgYlNob3cpOworCUZYX0JPT0wJCQkJCQkJSXNWU2Nyb2xsQmFyVmlzaWJsZSgpIGNvbnN0OworCXZvaWQJCQkJCQkJU2V0UGFyYW1CeUZsYWcoKTsKKworCUZYX0ZMT0FUCQkJCQkJR2V0Q2hhckFycmF5QXV0b0ZvbnRTaXplKEZYX0lOVDMyIG5DaGFyQXJyYXkpOworCUNQREZfUG9pbnQJCQkJCQlHZXRXb3JkUmlnaHRCb3R0b21Qb2ludChjb25zdCBDUFZUX1dvcmRQbGFjZSYgd3BXb3JkKTsKKworCUNQVlRfV29yZFJhbmdlCQkJCQlDb21iaW5lV29yZFJhbmdlKGNvbnN0IENQVlRfV29yZFJhbmdlJiB3cjEsIGNvbnN0IENQVlRfV29yZFJhbmdlJiB3cjIpOworCUNQVlRfV29yZFJhbmdlCQkJCQlHZXRMYXRpbldvcmRzUmFuZ2UoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdDsKKwlDUFZUX1dvcmRSYW5nZQkJCQkJR2V0TGF0aW5Xb3Jkc1JhbmdlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0OworCUNQVlRfV29yZFJhbmdlCQkJCQlHZXRBcmFiaWNXb3Jkc1JhbmdlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0OworCUNQVlRfV29yZFJhbmdlCQkJCQlHZXRTYW1lV29yZHNSYW5nZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBGWF9CT09MIGJMYXRpbiwgRlhfQk9PTCBiQXJhYmljKSBjb25zdDsKKworCXZvaWQJCQkJCQkJQWp1c3RBcmFiaWNXb3Jkcyhjb25zdCBDUFZUX1dvcmRSYW5nZSYgd3IpOworcHVibGljOgorCUZYX0JPT0wJCQkJCQkJSXNQcm9jZWVkdG9PbkNoYXIoRlhfV09SRCBuS2V5Q29kZSwgRlhfRFdPUkQgbkZsYWcpOworcHJpdmF0ZToKKwlJUFdMX0ZpbGxlcl9Ob3RpZnkqCQkJCW1fcEZpbGxlck5vdGlmeTsKKwlJUFdMX1NwZWxsQ2hlY2sqCQkJCW1fcFNwZWxsQ2hlY2s7CisJRlhfQk9PTAkJCQkJCQltX2JGb2N1czsKKwlDUERGX1JlY3QJCQkJCQltX3JjT2xkV2luZG93OworcHVibGljOgorCXZvaWQJCQkJCQkJQXR0YWNoRkZMRGF0YSh2b2lkKiBwRGF0YSkge21fcEZvcm1GaWxsZXIgPSBwRGF0YTt9Citwcml2YXRlOgorCXZvaWQqCQkJCQkJCW1fcEZvcm1GaWxsZXI7Cit9OworCisjZW5kaWYgCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0VkaXRDdHJsLmggYi9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BXTF9FZGl0Q3RybC5oCmluZGV4IDNkZjBmNGMuLmIxM2Q1ZTEgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0VkaXRDdHJsLmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfRWRpdEN0cmwuaApAQCAtMSwxNzEgKzEsMTcxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9QV0xfRURJVENUUkxfSF8NCi0jZGVmaW5lIF9QV0xfRURJVENUUkxfSF8NCi0NCi1lbnVtIFBXTF9FRElUX0FMSUdORk9STUFUX0gNCi17DQotCVBFQUhfTEVGVCA9IDAsDQotCVBFQUhfTUlERExFLA0KLQlQRUFIX1JJR0hUDQotfTsNCi0NCi1lbnVtIFBXTF9FRElUX0FMSUdORk9STUFUX1YNCi17DQotCVBFQVZfVE9QID0gMCwJDQotCVBFQVZfQ0VOVEVSLA0KLQlQRUFWX0JPVFRPTQ0KLX07DQotDQotY2xhc3MgSVBXTF9FZGl0X05vdGlmeTsNCi1jbGFzcyBDUFdMX0VkaXRDdHJsOw0KLWNsYXNzIENQV0xfQ2FyZXQ7DQotY2xhc3MgSUZYX0VkaXQ7DQotY2xhc3MgQ1BXTF9FZGl0Ow0KLQ0KLWNsYXNzIElQV0xfRWRpdF9Ob3RpZnkNCi17DQotcHVibGljOg0KLQkvL3doZW4gdGhlIHBvc2l0aW9uIG9mIGNhcmV0IGlzIGNoYW5nZWQgaW4gZWRpdA0KLQl2aXJ0dWFsIHZvaWQJCQkJCU9uQ2FyZXRNb3ZlKEZYX0lOVDMyIHgxLCBGWF9JTlQzMiB5MSwgRlhfSU5UMzIgeDIsIEZYX0lOVDMyIHkyKSB7fQ0KLQl2aXJ0dWFsIHZvaWQJCQkJCU9uQ29udGVudENoYW5nZShjb25zdCBDUERGX1JlY3QmIHJjQ29udGVudCl7fQ0KLQkvL09wclR5cGU6IDAgSW5zZXJ0V29yZA0KLQkvLzEgSW5zZXJ0UmV0dXJuDQotCS8vMiBCYWNrU3BhY2UNCi0JLy8zIERlbGV0ZQ0KLQkvLzQgQ2xlYXINCi0JLy81IEluc2VydFRleHQNCi0JLy82IFNldFRleHQNCi0JdmlydHVhbCB2b2lkCQkJCQlPbkluc2VydFdvcmQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgb2xkcGxhY2Upe30NCi0JdmlydHVhbCB2b2lkCQkJCQlPbkluc2VydFJldHVybihjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlJiBvbGRwbGFjZSl7fQ0KLQl2aXJ0dWFsIHZvaWQJCQkJCU9uQmFja1NwYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIG9sZHBsYWNlKXt9DQotCXZpcnR1YWwgdm9pZAkJCQkJT25EZWxldGUoY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgb2xkcGxhY2Upe30NCi0JdmlydHVhbCB2b2lkCQkJCQlPbkNsZWFyKGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIG9sZHBsYWNlKXt9DQotCXZpcnR1YWwgdm9pZAkJCQkJT25JbnNlcnRUZXh0KGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIG9sZHBsYWNlKXt9DQotCXZpcnR1YWwgdm9pZAkJCQkJT25TZXRUZXh0KGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIG9sZHBsYWNlKXt9DQotCXZpcnR1YWwgdm9pZAkJCQkJT25BZGRVbmRvKENQV0xfRWRpdCogcEVkaXQpIHt9DQotfTsNCi0NCi1jbGFzcyBQV0xfQ0xBU1MgQ1BXTF9FZGl0Q3RybCA6IHB1YmxpYyBDUFdMX1duZCwgcHVibGljIElGWF9FZGl0X05vdGlmeQ0KLXsNCi0JZnJpZW5kIGNsYXNzIENQV0xfRWRpdF9Ob3RpZnk7DQotDQotcHVibGljOg0KLQlDUFdMX0VkaXRDdHJsKCk7DQotCXZpcnR1YWwgfkNQV0xfRWRpdEN0cmwoKTsNCi0NCi1wdWJsaWM6DQotCXZpcnR1YWwgdm9pZAkJCQkJT25DcmVhdGUoUFdMX0NSRUFURVBBUkFNICYgY3ApOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCU9uQ3JlYXRlZCgpOw0KLQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uS2V5RG93bihGWF9XT1JEIG5DaGFyLCBGWF9EV09SRCBuRmxhZyk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25DaGFyKEZYX1dPUkQgbkNoYXIsIEZYX0RXT1JEIG5GbGFnKTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCQlPbkxCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOwkNCi0JdmlydHVhbCBGWF9CT09MCQkJCQlPbkxCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsJDQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25Nb3VzZU1vdmUoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZyk7DQotCXZpcnR1YWwgdm9pZAkJCQkJT25Ob3RpZnkoQ1BXTF9XbmQqIHBXbmQsIEZYX0RXT1JEIG1zZywgRlhfSU5UUFRSIHdQYXJhbSA9IDAsIEZYX0lOVFBUUiBsUGFyYW0gPSAwKTsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCQlDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7DQotCXZpcnR1YWwgdm9pZAkJCQkJUmVQb3NDaGlsZFduZCgpOwkNCi0JdmlydHVhbCB2b2lkCQkJCQlTZXRGb250U2l6ZShGWF9GTE9BVCBmRm9udFNpemUpOw0KLQl2aXJ0dWFsIEZYX0ZMT0FUCQkJCUdldEZvbnRTaXplKCkgY29uc3Q7DQotCQ0KLXB1YmxpYzoNCi0JdmlydHVhbCB2b2lkCQkJCQlTZXRUZXh0KEZYX0xQQ1dTVFIgY3NUZXh0KTsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCQlDb3B5VGV4dCgpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCVBhc3RlVGV4dCgpOw0KLQl2aXJ0dWFsIHZvaWQgCQkJCQlDdXRUZXh0KCk7DQotDQotCUNQREZfUmVjdAkJCQkJCUdldENvbnRlbnRSZWN0KCkgY29uc3Q7DQotCXZvaWQJCQkJCQkJR2V0Q2FyZXRQb3MoRlhfSU5UMzImIHgsIEZYX0lOVDMyJiB5KSBjb25zdDsNCi0JRlhfQk9PTAkJCQkJCQlJc01vZGlmaWVkKCkgY29uc3Q7DQotDQotCUNGWF9XaWRlU3RyaW5nCQkJCQlHZXRUZXh0KCkgY29uc3Q7DQotCXZvaWQJCQkJCQkJU2V0U2VsKEZYX0lOVDMyIG5TdGFydENoYXIsRlhfSU5UMzIgbkVuZENoYXIpOw0KLQl2b2lkCQkJCQkJCUdldFNlbChGWF9JTlQzMiAmIG5TdGFydENoYXIsIEZYX0lOVDMyICYgbkVuZENoYXIgKSBjb25zdDsNCi0Jdm9pZAkJCQkJCQlHZXRUZXh0UmFuZ2UoY29uc3QgQ1BERl9SZWN0JiByZWN0LCBGWF9JTlQzMiAmIG5TdGFydENoYXIsIEZYX0lOVDMyICYgbkVuZENoYXIpIGNvbnN0Ow0KLQlDRlhfV2lkZVN0cmluZwkJCQkJR2V0VGV4dChGWF9JTlQzMiAmIG5TdGFydENoYXIsIEZYX0lOVDMyICYgbkVuZENoYXIpIGNvbnN0Ow0KLQl2b2lkCQkJCQkJCUNsZWFyKCk7DQotCXZvaWQJCQkJCQkJU2VsZWN0QWxsKCk7DQotDQotCUZYX0lOVDMyCQkJCQkJR2V0Q2FyZXQoKSBjb25zdDsNCi0Jdm9pZAkJCQkJCQlTZXRDYXJldChGWF9JTlQzMiBuUG9zKTsNCi0JRlhfSU5UMzIJCQkJCQlHZXRUb3RhbFdvcmRzKCkgY29uc3Q7DQotDQotCXZvaWQJCQkJCQkJUGFpbnQoKTsNCi0NCi0Jdm9pZAkJCQkJCQlFbmFibGVSZWZyZXNoKEZYX0JPT0wgYlJlZnJlc2gpOwkNCi0JQ1BERl9Qb2ludAkJCQkJCUdldFNjcm9sbFBvcygpIGNvbnN0Ow0KLQl2b2lkCQkJCQkJCVNldFNjcm9sbFBvcyhjb25zdCBDUERGX1BvaW50JiBwb2ludCk7DQotDQotCXZvaWQJCQkJCQkJU2V0RWRpdE5vdGlmeShJUFdMX0VkaXRfTm90aWZ5KiBwTm90aWZ5KSB7bV9wRWRpdE5vdGlmeSA9IHBOb3RpZnk7fQkNCi0NCi0Jdm9pZAkJCQkJCQlTZXRDaGFyU2V0KEZYX0JZVEUgbkNoYXJTZXQpe21fbkNoYXJTZXQgPSBuQ2hhclNldDt9DQotCUZYX0lOVDMyCQkJCQkJR2V0Q2hhclNldCgpIGNvbnN0Ow0KLQ0KLQl2b2lkCQkJCQkJCVNldENvZGVQYWdlKEZYX0lOVDMyIG5Db2RlUGFnZSl7bV9uQ29kZVBhZ2UgPSBuQ29kZVBhZ2U7fQ0KLQlGWF9JTlQzMgkJCQkJCUdldENvZGVQYWdlKCkgY29uc3Qge3JldHVybiBtX25Db2RlUGFnZTt9DQotDQotCUNQREZfRm9udCAqCQkJCQkJR2V0Q2FyZXRGb250KCkgY29uc3Q7DQotCUZYX0ZMT0FUCQkJCQkJR2V0Q2FyZXRGb250U2l6ZSgpIGNvbnN0Ow0KLQ0KLQlGWF9CT09MCQkJCQkJCUNhblVuZG8oKSBjb25zdDsNCi0JRlhfQk9PTAkJCQkJCQlDYW5SZWRvKCkgY29uc3Q7DQotCXZvaWQJCQkJCQkJUmVkbygpOw0KLQl2b2lkCQkJCQkJCVVuZG8oKTsNCi0NCi0Jdm9pZAkJCQkJCQlTZXRSZWFkeVRvSW5wdXQoKTsNCi1wcm90ZWN0ZWQ6DQotCXZpcnR1YWwgdm9pZAkJCQkJU2hvd1ZTY3JvbGxCYXIoRlhfQk9PTCBiU2hvdyk7DQotDQotCXZpcnR1YWwgdm9pZAkJCQkJSW5zZXJ0V29yZChGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIG5DaGFyc2V0KTsNCi0JdmlydHVhbCB2b2lkCQkJCQlJbnNlcnRSZXR1cm4oKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlJbnNlcnRUZXh0KEZYX0xQQ1dTVFIgY3NUZXh0KTsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCQlTZXRDdXJzb3IoKTsNCi0JRlhfQk9PTAkJCQkJCQlJc1duZEhvclYoKTsNCi0NCi0Jdm9pZAkJCQkJCQlEZWxldGUoKTsNCi0Jdm9pZAkJCQkJCQlCYWNrc3BhY2UoKTsNCi0NCi1wcm90ZWN0ZWQ6DQotCXZvaWQJCQkJCQkJR2V0Q2FyZXRJbmZvKENQREZfUG9pbnQgJiBwdEhlYWQsIENQREZfUG9pbnQgJiBwdEZvb3QpIGNvbnN0Ow0KLQl2b2lkCQkJCQkJCVNldENhcmV0KEZYX0JPT0wgYlZpc2libGUsIGNvbnN0IENQREZfUG9pbnQgJiBwdEhlYWQsIGNvbnN0IENQREZfUG9pbnQgJiBwdEZvb3QpOw0KLQkNCi0Jdm9pZAkJCQkJCQlTZXRFZGl0Q2FyZXQoRlhfQk9PTCBiVmlzaWJsZSk7DQotDQotcHJvdGVjdGVkOg0KLQl2aXJ0dWFsIHZvaWQJCQkJCUlPblNldFNjcm9sbEluZm9YKEZYX0ZMT0FUIGZQbGF0ZU1pbiwgRlhfRkxPQVQgZlBsYXRlTWF4LCANCi0JCQkJCQkJCQkJCQlGWF9GTE9BVCBmQ29udGVudE1pbiwgRlhfRkxPQVQgZkNvbnRlbnRNYXgsIA0KLQkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZTbWFsbFN0ZXAsIEZYX0ZMT0FUIGZCaWdTdGVwKXt9DQotCXZpcnR1YWwgdm9pZAkJCQkJSU9uU2V0U2Nyb2xsSW5mb1koRlhfRkxPQVQgZlBsYXRlTWluLCBGWF9GTE9BVCBmUGxhdGVNYXgsIA0KLQkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZDb250ZW50TWluLCBGWF9GTE9BVCBmQ29udGVudE1heCwgDQotCQkJCQkJCQkJCQkJRlhfRkxPQVQgZlNtYWxsU3RlcCwgRlhfRkxPQVQgZkJpZ1N0ZXApOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCUlPblNldFNjcm9sbFBvc1goRlhfRkxPQVQgZngpe30NCi0JdmlydHVhbCB2b2lkCQkJCQlJT25TZXRTY3JvbGxQb3NZKEZYX0ZMT0FUIGZ5KTsNCi0JdmlydHVhbCB2b2lkCQkJCQlJT25TZXRDYXJldChGWF9CT09MIGJWaXNpYmxlLGNvbnN0IENQREZfUG9pbnQgJiBwdEhlYWQsY29uc3QgQ1BERl9Qb2ludCAmIHB0Rm9vdCwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlJT25DYXJldENoYW5nZShjb25zdCBDUFZUX1NlY1Byb3BzICYgc2VjUHJvcHMsIGNvbnN0IENQVlRfV29yZFByb3BzICYgd29yZFByb3BzKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlJT25Db250ZW50Q2hhbmdlKGNvbnN0IENQREZfUmVjdCYgcmNDb250ZW50KTsNCi0JdmlydHVhbCB2b2lkCQkJCQlJT25JbnZhbGlkYXRlUmVjdChDUERGX1JlY3QgKiBwUmVjdCk7DQotDQotcHJpdmF0ZToNCi0Jdm9pZAkJCQkJCQlDcmVhdGVFZGl0Q2FyZXQoY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApOw0KLQ0KLXByb3RlY3RlZDoNCi0JSUZYX0VkaXQqCQkJCQkJbV9wRWRpdDsNCi0JQ1BXTF9DYXJldCoJCQkJCQltX3BFZGl0Q2FyZXQ7DQotCUZYX0JPT0wJCQkJCQkJbV9iTW91c2VEb3duOw0KLQlJUFdMX0VkaXRfTm90aWZ5KgkJCQltX3BFZGl0Tm90aWZ5OwkNCi0NCi1wcml2YXRlOg0KLQlGWF9JTlQzMgkJCQkJCW1fbkNoYXJTZXQ7DQotCUZYX0lOVDMyCQkJCQkJbV9uQ29kZVBhZ2U7DQotfTsNCi0NCi0jZW5kaWYNCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9QV0xfRURJVENUUkxfSF8KKyNkZWZpbmUgX1BXTF9FRElUQ1RSTF9IXworCitlbnVtIFBXTF9FRElUX0FMSUdORk9STUFUX0gKK3sKKwlQRUFIX0xFRlQgPSAwLAorCVBFQUhfTUlERExFLAorCVBFQUhfUklHSFQKK307CisKK2VudW0gUFdMX0VESVRfQUxJR05GT1JNQVRfVgoreworCVBFQVZfVE9QID0gMCwJCisJUEVBVl9DRU5URVIsCisJUEVBVl9CT1RUT00KK307CisKK2NsYXNzIElQV0xfRWRpdF9Ob3RpZnk7CitjbGFzcyBDUFdMX0VkaXRDdHJsOworY2xhc3MgQ1BXTF9DYXJldDsKK2NsYXNzIElGWF9FZGl0OworY2xhc3MgQ1BXTF9FZGl0OworCitjbGFzcyBJUFdMX0VkaXRfTm90aWZ5Cit7CitwdWJsaWM6CisJLy93aGVuIHRoZSBwb3NpdGlvbiBvZiBjYXJldCBpcyBjaGFuZ2VkIGluIGVkaXQKKwl2aXJ0dWFsIHZvaWQJCQkJCU9uQ2FyZXRNb3ZlKEZYX0lOVDMyIHgxLCBGWF9JTlQzMiB5MSwgRlhfSU5UMzIgeDIsIEZYX0lOVDMyIHkyKSB7fQorCXZpcnR1YWwgdm9pZAkJCQkJT25Db250ZW50Q2hhbmdlKGNvbnN0IENQREZfUmVjdCYgcmNDb250ZW50KXt9CisJLy9PcHJUeXBlOiAwIEluc2VydFdvcmQKKwkvLzEgSW5zZXJ0UmV0dXJuCisJLy8yIEJhY2tTcGFjZQorCS8vMyBEZWxldGUKKwkvLzQgQ2xlYXIKKwkvLzUgSW5zZXJ0VGV4dAorCS8vNiBTZXRUZXh0CisJdmlydHVhbCB2b2lkCQkJCQlPbkluc2VydFdvcmQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgb2xkcGxhY2Upe30KKwl2aXJ0dWFsIHZvaWQJCQkJCU9uSW5zZXJ0UmV0dXJuKGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIG9sZHBsYWNlKXt9CisJdmlydHVhbCB2b2lkCQkJCQlPbkJhY2tTcGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlJiBvbGRwbGFjZSl7fQorCXZpcnR1YWwgdm9pZAkJCQkJT25EZWxldGUoY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgb2xkcGxhY2Upe30KKwl2aXJ0dWFsIHZvaWQJCQkJCU9uQ2xlYXIoY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgb2xkcGxhY2Upe30KKwl2aXJ0dWFsIHZvaWQJCQkJCU9uSW5zZXJ0VGV4dChjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlJiBvbGRwbGFjZSl7fQorCXZpcnR1YWwgdm9pZAkJCQkJT25TZXRUZXh0KGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIG9sZHBsYWNlKXt9CisJdmlydHVhbCB2b2lkCQkJCQlPbkFkZFVuZG8oQ1BXTF9FZGl0KiBwRWRpdCkge30KK307CisKK2NsYXNzIFBXTF9DTEFTUyBDUFdMX0VkaXRDdHJsIDogcHVibGljIENQV0xfV25kLCBwdWJsaWMgSUZYX0VkaXRfTm90aWZ5Cit7CisJZnJpZW5kIGNsYXNzIENQV0xfRWRpdF9Ob3RpZnk7CisKK3B1YmxpYzoKKwlDUFdMX0VkaXRDdHJsKCk7CisJdmlydHVhbCB+Q1BXTF9FZGl0Q3RybCgpOworCitwdWJsaWM6CisJdmlydHVhbCB2b2lkCQkJCQlPbkNyZWF0ZShQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7CisJdmlydHVhbCB2b2lkCQkJCQlPbkNyZWF0ZWQoKTsKKworCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25LZXlEb3duKEZYX1dPUkQgbkNoYXIsIEZYX0RXT1JEIG5GbGFnKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uQ2hhcihGWF9XT1JEIG5DaGFyLCBGWF9EV09SRCBuRmxhZyk7CisJdmlydHVhbCBGWF9CT09MCQkJCQlPbkxCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOwkKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uTEJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOwkKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOworCXZpcnR1YWwgdm9pZAkJCQkJT25Ob3RpZnkoQ1BXTF9XbmQqIHBXbmQsIEZYX0RXT1JEIG1zZywgRlhfSU5UUFRSIHdQYXJhbSA9IDAsIEZYX0lOVFBUUiBsUGFyYW0gPSAwKTsKKworCXZpcnR1YWwgdm9pZAkJCQkJQ3JlYXRlQ2hpbGRXbmQoY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApOworCXZpcnR1YWwgdm9pZAkJCQkJUmVQb3NDaGlsZFduZCgpOwkKKwl2aXJ0dWFsIHZvaWQJCQkJCVNldEZvbnRTaXplKEZYX0ZMT0FUIGZGb250U2l6ZSk7CisJdmlydHVhbCBGWF9GTE9BVAkJCQlHZXRGb250U2l6ZSgpIGNvbnN0OworCQorcHVibGljOgorCXZpcnR1YWwgdm9pZAkJCQkJU2V0VGV4dChGWF9MUENXU1RSIGNzVGV4dCk7CisKKwl2aXJ0dWFsIHZvaWQJCQkJCUNvcHlUZXh0KCk7CisJdmlydHVhbCB2b2lkCQkJCQlQYXN0ZVRleHQoKTsKKwl2aXJ0dWFsIHZvaWQgCQkJCQlDdXRUZXh0KCk7CisKKwlDUERGX1JlY3QJCQkJCQlHZXRDb250ZW50UmVjdCgpIGNvbnN0OworCXZvaWQJCQkJCQkJR2V0Q2FyZXRQb3MoRlhfSU5UMzImIHgsIEZYX0lOVDMyJiB5KSBjb25zdDsKKwlGWF9CT09MCQkJCQkJCUlzTW9kaWZpZWQoKSBjb25zdDsKKworCUNGWF9XaWRlU3RyaW5nCQkJCQlHZXRUZXh0KCkgY29uc3Q7CisJdm9pZAkJCQkJCQlTZXRTZWwoRlhfSU5UMzIgblN0YXJ0Q2hhcixGWF9JTlQzMiBuRW5kQ2hhcik7CisJdm9pZAkJCQkJCQlHZXRTZWwoRlhfSU5UMzIgJiBuU3RhcnRDaGFyLCBGWF9JTlQzMiAmIG5FbmRDaGFyICkgY29uc3Q7CisJdm9pZAkJCQkJCQlHZXRUZXh0UmFuZ2UoY29uc3QgQ1BERl9SZWN0JiByZWN0LCBGWF9JTlQzMiAmIG5TdGFydENoYXIsIEZYX0lOVDMyICYgbkVuZENoYXIpIGNvbnN0OworCUNGWF9XaWRlU3RyaW5nCQkJCQlHZXRUZXh0KEZYX0lOVDMyICYgblN0YXJ0Q2hhciwgRlhfSU5UMzIgJiBuRW5kQ2hhcikgY29uc3Q7CisJdm9pZAkJCQkJCQlDbGVhcigpOworCXZvaWQJCQkJCQkJU2VsZWN0QWxsKCk7CisKKwlGWF9JTlQzMgkJCQkJCUdldENhcmV0KCkgY29uc3Q7CisJdm9pZAkJCQkJCQlTZXRDYXJldChGWF9JTlQzMiBuUG9zKTsKKwlGWF9JTlQzMgkJCQkJCUdldFRvdGFsV29yZHMoKSBjb25zdDsKKworCXZvaWQJCQkJCQkJUGFpbnQoKTsKKworCXZvaWQJCQkJCQkJRW5hYmxlUmVmcmVzaChGWF9CT09MIGJSZWZyZXNoKTsJCisJQ1BERl9Qb2ludAkJCQkJCUdldFNjcm9sbFBvcygpIGNvbnN0OworCXZvaWQJCQkJCQkJU2V0U2Nyb2xsUG9zKGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsKKworCXZvaWQJCQkJCQkJU2V0RWRpdE5vdGlmeShJUFdMX0VkaXRfTm90aWZ5KiBwTm90aWZ5KSB7bV9wRWRpdE5vdGlmeSA9IHBOb3RpZnk7fQkKKworCXZvaWQJCQkJCQkJU2V0Q2hhclNldChGWF9CWVRFIG5DaGFyU2V0KXttX25DaGFyU2V0ID0gbkNoYXJTZXQ7fQorCUZYX0lOVDMyCQkJCQkJR2V0Q2hhclNldCgpIGNvbnN0OworCisJdm9pZAkJCQkJCQlTZXRDb2RlUGFnZShGWF9JTlQzMiBuQ29kZVBhZ2Upe21fbkNvZGVQYWdlID0gbkNvZGVQYWdlO30KKwlGWF9JTlQzMgkJCQkJCUdldENvZGVQYWdlKCkgY29uc3Qge3JldHVybiBtX25Db2RlUGFnZTt9CisKKwlDUERGX0ZvbnQgKgkJCQkJCUdldENhcmV0Rm9udCgpIGNvbnN0OworCUZYX0ZMT0FUCQkJCQkJR2V0Q2FyZXRGb250U2l6ZSgpIGNvbnN0OworCisJRlhfQk9PTAkJCQkJCQlDYW5VbmRvKCkgY29uc3Q7CisJRlhfQk9PTAkJCQkJCQlDYW5SZWRvKCkgY29uc3Q7CisJdm9pZAkJCQkJCQlSZWRvKCk7CisJdm9pZAkJCQkJCQlVbmRvKCk7CisKKwl2b2lkCQkJCQkJCVNldFJlYWR5VG9JbnB1dCgpOworcHJvdGVjdGVkOgorCXZpcnR1YWwgdm9pZAkJCQkJU2hvd1ZTY3JvbGxCYXIoRlhfQk9PTCBiU2hvdyk7CisKKwl2aXJ0dWFsIHZvaWQJCQkJCUluc2VydFdvcmQoRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBuQ2hhcnNldCk7CisJdmlydHVhbCB2b2lkCQkJCQlJbnNlcnRSZXR1cm4oKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCUluc2VydFRleHQoRlhfTFBDV1NUUiBjc1RleHQpOworCisJdmlydHVhbCB2b2lkCQkJCQlTZXRDdXJzb3IoKTsKKwlGWF9CT09MCQkJCQkJCUlzV25kSG9yVigpOworCisJdm9pZAkJCQkJCQlEZWxldGUoKTsKKwl2b2lkCQkJCQkJCUJhY2tzcGFjZSgpOworCitwcm90ZWN0ZWQ6CisJdm9pZAkJCQkJCQlHZXRDYXJldEluZm8oQ1BERl9Qb2ludCAmIHB0SGVhZCwgQ1BERl9Qb2ludCAmIHB0Rm9vdCkgY29uc3Q7CisJdm9pZAkJCQkJCQlTZXRDYXJldChGWF9CT09MIGJWaXNpYmxlLCBjb25zdCBDUERGX1BvaW50ICYgcHRIZWFkLCBjb25zdCBDUERGX1BvaW50ICYgcHRGb290KTsKKwkKKwl2b2lkCQkJCQkJCVNldEVkaXRDYXJldChGWF9CT09MIGJWaXNpYmxlKTsKKworcHJvdGVjdGVkOgorCXZpcnR1YWwgdm9pZAkJCQkJSU9uU2V0U2Nyb2xsSW5mb1goRlhfRkxPQVQgZlBsYXRlTWluLCBGWF9GTE9BVCBmUGxhdGVNYXgsIAorCQkJCQkJCQkJCQkJRlhfRkxPQVQgZkNvbnRlbnRNaW4sIEZYX0ZMT0FUIGZDb250ZW50TWF4LCAKKwkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZTbWFsbFN0ZXAsIEZYX0ZMT0FUIGZCaWdTdGVwKXt9CisJdmlydHVhbCB2b2lkCQkJCQlJT25TZXRTY3JvbGxJbmZvWShGWF9GTE9BVCBmUGxhdGVNaW4sIEZYX0ZMT0FUIGZQbGF0ZU1heCwgCisJCQkJCQkJCQkJCQlGWF9GTE9BVCBmQ29udGVudE1pbiwgRlhfRkxPQVQgZkNvbnRlbnRNYXgsIAorCQkJCQkJCQkJCQkJRlhfRkxPQVQgZlNtYWxsU3RlcCwgRlhfRkxPQVQgZkJpZ1N0ZXApOworCXZpcnR1YWwgdm9pZAkJCQkJSU9uU2V0U2Nyb2xsUG9zWChGWF9GTE9BVCBmeCl7fQorCXZpcnR1YWwgdm9pZAkJCQkJSU9uU2V0U2Nyb2xsUG9zWShGWF9GTE9BVCBmeSk7CisJdmlydHVhbCB2b2lkCQkJCQlJT25TZXRDYXJldChGWF9CT09MIGJWaXNpYmxlLGNvbnN0IENQREZfUG9pbnQgJiBwdEhlYWQsY29uc3QgQ1BERl9Qb2ludCAmIHB0Rm9vdCwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCUlPbkNhcmV0Q2hhbmdlKGNvbnN0IENQVlRfU2VjUHJvcHMgJiBzZWNQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgJiB3b3JkUHJvcHMpOworCXZpcnR1YWwgdm9pZAkJCQkJSU9uQ29udGVudENoYW5nZShjb25zdCBDUERGX1JlY3QmIHJjQ29udGVudCk7CisJdmlydHVhbCB2b2lkCQkJCQlJT25JbnZhbGlkYXRlUmVjdChDUERGX1JlY3QgKiBwUmVjdCk7CisKK3ByaXZhdGU6CisJdm9pZAkJCQkJCQlDcmVhdGVFZGl0Q2FyZXQoY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApOworCitwcm90ZWN0ZWQ6CisJSUZYX0VkaXQqCQkJCQkJbV9wRWRpdDsKKwlDUFdMX0NhcmV0KgkJCQkJCW1fcEVkaXRDYXJldDsKKwlGWF9CT09MCQkJCQkJCW1fYk1vdXNlRG93bjsKKwlJUFdMX0VkaXRfTm90aWZ5KgkJCQltX3BFZGl0Tm90aWZ5OwkKKworcHJpdmF0ZToKKwlGWF9JTlQzMgkJCQkJCW1fbkNoYXJTZXQ7CisJRlhfSU5UMzIJCQkJCQltX25Db2RlUGFnZTsKK307CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BXTF9Gb250TWFwLmggYi9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BXTF9Gb250TWFwLmgKaW5kZXggODU4YmIyYS4uYjNkYTUzMyAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfRm9udE1hcC5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0ZvbnRNYXAuaApAQCAtMSwxMzcgKzEsMTM3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9QV0xfRk9OVE1BUF9IXw0KLSNkZWZpbmUgX1BXTF9GT05UTUFQX0hfDQotDQotc3RydWN0IENQV0xfRm9udE1hcF9EYXRhDQotew0KLQlDUERGX0ZvbnQqCQkJcEZvbnQ7DQotCUZYX0lOVDMyCQkJbkNoYXJzZXQ7DQotCUNGWF9CeXRlU3RyaW5nCQlzRm9udE5hbWU7DQotfTsNCi0NCi1zdHJ1Y3QgQ1BXTF9Gb250TWFwX05hdGl2ZQ0KLXsNCi0JRlhfSU5UMzIJCQluQ2hhcnNldDsNCi0JQ0ZYX0J5dGVTdHJpbmcJCXNGb250TmFtZTsNCi19Ow0KLQ0KLSNpZm5kZWYgQU5TSV9DSEFSU0VUDQotDQotI2RlZmluZSBBTlNJX0NIQVJTRVQgICAgICAgICAgICAwDQotI2RlZmluZSBERUZBVUxUX0NIQVJTRVQgICAgICAgICAxDQotI2RlZmluZSBTWU1CT0xfQ0hBUlNFVCAgICAgICAgICAyDQotI2RlZmluZSBTSElGVEpJU19DSEFSU0VUICAgICAgICAxMjgNCi0jZGVmaW5lIEhBTkdFVUxfQ0hBUlNFVCAgICAgICAgIDEyOQ0KLSNkZWZpbmUgSEFOR1VMX0NIQVJTRVQgICAgICAgICAgMTI5DQotI2RlZmluZSBHQjIzMTJfQ0hBUlNFVCAgICAgICAgICAxMzQNCi0jZGVmaW5lIENISU5FU0VCSUc1X0NIQVJTRVQgICAgIDEzNg0KLSNkZWZpbmUgT0VNX0NIQVJTRVQgICAgICAgICAgICAgMjU1DQotI2RlZmluZSBKT0hBQl9DSEFSU0VUICAgICAgICAgICAxMzANCi0jZGVmaW5lIEhFQlJFV19DSEFSU0VUICAgICAgICAgIDE3Nw0KLSNkZWZpbmUgQVJBQklDX0NIQVJTRVQgICAgICAgICAgMTc4DQotI2RlZmluZSBHUkVFS19DSEFSU0VUICAgICAgICAgICAxNjENCi0jZGVmaW5lIFRVUktJU0hfQ0hBUlNFVCAgICAgICAgIDE2Mg0KLSNkZWZpbmUgVklFVE5BTUVTRV9DSEFSU0VUICAgICAgMTYzDQotI2RlZmluZSBUSEFJX0NIQVJTRVQgICAgICAgICAgICAyMjINCi0jZGVmaW5lIEVBU1RFVVJPUEVfQ0hBUlNFVCAgICAgIDIzOA0KLSNkZWZpbmUgUlVTU0lBTl9DSEFSU0VUICAgICAgICAgMjA0DQotI2RlZmluZSBCQUxUSUNfQ0hBUlNFVCAgICAgICAgICAxODYNCi0NCi0jZW5kaWYNCi0NCi0jaWZuZGVmIFBXTF9DTEFTUw0KLQ0KLQkjaWZkZWYgRlhfUkVBREVSX0RMTA0KLQkJI2RlZmluZSBQV0xfQ0xBU1MJCV9fZGVjbHNwZWMoZGxsZXhwb3J0KQ0KLQkjZWxzZQ0KLQkJI2RlZmluZSBQV0xfQ0xBU1MNCi0JI2VuZGlmDQotI2VuZGlmDQotDQotY2xhc3MgSUZYX1N5c3RlbUhhbmRsZXI7DQotY2xhc3MgUFdMX0NMQVNTIENQV0xfRm9udE1hcCA6IHB1YmxpYyBJRlhfRWRpdF9Gb250TWFwDQotew0KLXB1YmxpYzoNCi0JQ1BXTF9Gb250TWFwKElGWF9TeXN0ZW1IYW5kbGVyKiBwU3lzdGVtSGFuZGxlcik7DQotCXZpcnR1YWwgfkNQV0xfRm9udE1hcCgpOw0KLQ0KLQl2aXJ0dWFsIENQREZfRm9udCoJCQkJCQkJR2V0UERGRm9udChGWF9JTlQzMiBuRm9udEluZGV4KTsNCi0JdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJCQkJCUdldFBERkZvbnRBbGlhcyhGWF9JTlQzMiBuRm9udEluZGV4KTsNCi0JdmlydHVhbCBGWF9JTlQzMgkJCQkJCQlHZXRXb3JkRm9udEluZGV4KEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgbkNoYXJzZXQsIEZYX0lOVDMyIG5Gb250SW5kZXgpOw0KLQl2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJCUNoYXJDb2RlRnJvbVVuaWNvZGUoRlhfSU5UMzIgbkZvbnRJbmRleCwgRlhfV09SRCB3b3JkKTsNCi0JdmlydHVhbCBGWF9JTlQzMgkJCQkJCQlDaGFyU2V0RnJvbVVuaWNvZGUoRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBuT2xkQ2hhcnNldCk7DQotDQotcHVibGljOg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJCUluaXRpYWwoRlhfTFBDU1RSIGZvbnRuYW1lID0gTlVMTCk7DQotCXZvaWQJCQkJCQkJCQkJU2V0U3lzdGVtSGFuZGxlcihJRlhfU3lzdGVtSGFuZGxlciogcFN5c3RlbUhhbmRsZXIpOw0KLQ0KLQlGWF9JTlQzMgkJCQkJCQkJCUdldEZvbnRNYXBDb3VudCgpIGNvbnN0Ow0KLQljb25zdCBDUFdMX0ZvbnRNYXBfRGF0YSoJCQkJCUdldEZvbnRNYXBEYXRhKEZYX0lOVDMyIG5JbmRleCkgY29uc3Q7DQotDQotcHVibGljOg0KLQlzdGF0aWMgRlhfSU5UMzIJCQkJCQkJCUdldE5hdGl2ZUNoYXJzZXQoKTsNCi0JQ0ZYX0J5dGVTdHJpbmcJCQkJCQkJCUdldE5hdGl2ZUZvbnROYW1lKEZYX0lOVDMyIG5DaGFyc2V0KTsNCi0NCi0Jc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQkJR2V0RGVmYXVsdEZvbnRCeUNoYXJzZXQoRlhfSU5UMzIgbkNoYXJzZXQpOw0KLQ0KLQlDUERGX0ZvbnQqCQkJCQkJCQkJQWRkRm9udFRvRG9jdW1lbnQoQ1BERl9Eb2N1bWVudCogcERvYywgQ0ZYX0J5dGVTdHJpbmcmIHNGb250TmFtZSwgRlhfQllURSBuQ2hhcnNldCk7DQotCXN0YXRpYyBGWF9CT09MCQkJCQkJCQlJc1N0YW5kYXJkRm9udChjb25zdCBDRlhfQnl0ZVN0cmluZyYgc0ZvbnROYW1lKTsJCQkJCQkJDQotCUNQREZfRm9udCoJCQkJCQkJCQlBZGRTdGFuZGFyZEZvbnQoQ1BERl9Eb2N1bWVudCogcERvYywgQ0ZYX0J5dGVTdHJpbmcmIHNGb250TmFtZSk7DQotCUNQREZfRm9udCoJCQkJCQkJCQlBZGRTeXN0ZW1Gb250KENQREZfRG9jdW1lbnQqIHBEb2MsIENGWF9CeXRlU3RyaW5nJiBzRm9udE5hbWUsIA0KLQkJCQkJCQkJCQkJCQlGWF9CWVRFIG5DaGFyc2V0KTsNCi0NCi1wcm90ZWN0ZWQ6DQotCXZpcnR1YWwgQ1BERl9Gb250KgkJCQkJCQlGaW5kRm9udFNhbWVDaGFyc2V0KENGWF9CeXRlU3RyaW5nJiBzRm9udEFsaWFzLCBGWF9JTlQzMiBuQ2hhcnNldCk7DQotCXZpcnR1YWwgdm9pZAkJCQkJCQkJQWRkZWRGb250KENQREZfRm9udCogcEZvbnQsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzRm9udEFsaWFzKTsNCi0JRlhfQk9PTAkJCQkJCQkJCQlLbm93V29yZChGWF9JTlQzMiBuRm9udEluZGV4LCBGWF9XT1JEIHdvcmQpOw0KLQ0KLQl2aXJ0dWFsIENQREZfRG9jdW1lbnQqCQkJCQkJR2V0RG9jdW1lbnQoKTsNCi0NCi0Jdm9pZAkJCQkJCQkJCQlFbXB0eSgpOw0KLQlGWF9JTlQzMgkJCQkJCQkJCUdldEZvbnRJbmRleChjb25zdCBDRlhfQnl0ZVN0cmluZyYgc0ZvbnROYW1lLCBGWF9JTlQzMiBuQ2hhcnNldCwgRlhfQk9PTCBiRmluZCk7DQotCUZYX0lOVDMyCQkJCQkJCQkJR2V0UFdMRm9udEluZGV4KEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgbkNoYXJzZXQpOw0KLQlGWF9JTlQzMgkJCQkJCQkJCUFkZEZvbnREYXRhKENQREZfRm9udCogcEZvbnQsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzRm9udEFsaWFzLCBGWF9JTlQzMiBuQ2hhcnNldCA9IERFRkFVTFRfQ0hBUlNFVCk7DQotDQotCUNGWF9CeXRlU3RyaW5nCQkJCQkJCQlFbmNvZGVGb250QWxpYXMoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNGb250TmFtZSwgRlhfSU5UMzIgbkNoYXJzZXQpOw0KLQlDRlhfQnl0ZVN0cmluZwkJCQkJCQkJRW5jb2RlRm9udEFsaWFzKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzRm9udE5hbWUpOw0KLQ0KLXByaXZhdGU6DQotCUNGWF9CeXRlU3RyaW5nCQkJCQkJCQlHZXRGb250TmFtZShGWF9JTlQzMiBuRm9udEluZGV4KTsNCi0JRlhfSU5UMzIJCQkJCQkJCQlGaW5kRm9udChjb25zdCBDRlhfQnl0ZVN0cmluZyYgc0ZvbnROYW1lLCBGWF9JTlQzMiBuQ2hhcnNldCA9IERFRkFVTFRfQ0hBUlNFVCk7DQotDQotCUNGWF9CeXRlU3RyaW5nCQkJCQkJCQlHZXROYXRpdmVGb250KEZYX0lOVDMyIG5DaGFyc2V0KTsNCi0NCi1wdWJsaWM6DQotCXN0cnVjdCBDaGFyc2V0Rm9udE1hcCB7DQotCQlGWF9JTlQzMgkJCQkJCQkJY2hhcnNldDsNCi0JCWNvbnN0IGNoYXIqCQkJCQkJCQlmb250bmFtZTsNCi0JfTsNCi0Jc3RhdGljIGNvbnN0IENoYXJzZXRGb250TWFwCQkJCQlkZWZhdWx0VFRGTWFwW107DQotDQotcHJvdGVjdGVkOg0KLQlDRlhfQXJyYXlUZW1wbGF0ZTxDUFdMX0ZvbnRNYXBfRGF0YSo+CQltX2FEYXRhOw0KLQlDRlhfQXJyYXlUZW1wbGF0ZTxDUFdMX0ZvbnRNYXBfTmF0aXZlKj4JCW1fYU5hdGl2ZUZvbnQ7DQotDQotcHJpdmF0ZToNCi0JQ1BERl9Eb2N1bWVudCoJCQkJCQkJCW1fcFBERkRvYzsNCi0JSUZYX1N5c3RlbUhhbmRsZXIqCQkJCQkJCW1fcFN5c3RlbUhhbmRsZXI7DQotfTsNCi0NCi1jbGFzcyBQV0xfQ0xBU1MgQ1BXTF9Eb2NGb250TWFwIDogcHVibGljIENQV0xfRm9udE1hcA0KLXsNCi1wdWJsaWM6DQotCUNQV0xfRG9jRm9udE1hcChJRlhfU3lzdGVtSGFuZGxlciogcFN5c3RlbUhhbmRsZXIsIENQREZfRG9jdW1lbnQqIHBBdHRhY2hlZERvYyk7DQotCXZpcnR1YWwgfkNQV0xfRG9jRm9udE1hcCgpOw0KLQ0KLQl2aXJ0dWFsIENQREZfRG9jdW1lbnQqCQkJCQkJR2V0RG9jdW1lbnQoKTsNCi0NCi1wcml2YXRlOg0KLQlDUERGX0RvY3VtZW50KgkJCQkJCQkJbV9wQXR0YWNoZWREb2M7DQotfTsNCi0NCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9QV0xfRk9OVE1BUF9IXworI2RlZmluZSBfUFdMX0ZPTlRNQVBfSF8KKworc3RydWN0IENQV0xfRm9udE1hcF9EYXRhCit7CisJQ1BERl9Gb250KgkJCXBGb250OworCUZYX0lOVDMyCQkJbkNoYXJzZXQ7CisJQ0ZYX0J5dGVTdHJpbmcJCXNGb250TmFtZTsKK307CisKK3N0cnVjdCBDUFdMX0ZvbnRNYXBfTmF0aXZlCit7CisJRlhfSU5UMzIJCQluQ2hhcnNldDsKKwlDRlhfQnl0ZVN0cmluZwkJc0ZvbnROYW1lOworfTsKKworI2lmbmRlZiBBTlNJX0NIQVJTRVQKKworI2RlZmluZSBBTlNJX0NIQVJTRVQgICAgICAgICAgICAwCisjZGVmaW5lIERFRkFVTFRfQ0hBUlNFVCAgICAgICAgIDEKKyNkZWZpbmUgU1lNQk9MX0NIQVJTRVQgICAgICAgICAgMgorI2RlZmluZSBTSElGVEpJU19DSEFSU0VUICAgICAgICAxMjgKKyNkZWZpbmUgSEFOR0VVTF9DSEFSU0VUICAgICAgICAgMTI5CisjZGVmaW5lIEhBTkdVTF9DSEFSU0VUICAgICAgICAgIDEyOQorI2RlZmluZSBHQjIzMTJfQ0hBUlNFVCAgICAgICAgICAxMzQKKyNkZWZpbmUgQ0hJTkVTRUJJRzVfQ0hBUlNFVCAgICAgMTM2CisjZGVmaW5lIE9FTV9DSEFSU0VUICAgICAgICAgICAgIDI1NQorI2RlZmluZSBKT0hBQl9DSEFSU0VUICAgICAgICAgICAxMzAKKyNkZWZpbmUgSEVCUkVXX0NIQVJTRVQgICAgICAgICAgMTc3CisjZGVmaW5lIEFSQUJJQ19DSEFSU0VUICAgICAgICAgIDE3OAorI2RlZmluZSBHUkVFS19DSEFSU0VUICAgICAgICAgICAxNjEKKyNkZWZpbmUgVFVSS0lTSF9DSEFSU0VUICAgICAgICAgMTYyCisjZGVmaW5lIFZJRVROQU1FU0VfQ0hBUlNFVCAgICAgIDE2MworI2RlZmluZSBUSEFJX0NIQVJTRVQgICAgICAgICAgICAyMjIKKyNkZWZpbmUgRUFTVEVVUk9QRV9DSEFSU0VUICAgICAgMjM4CisjZGVmaW5lIFJVU1NJQU5fQ0hBUlNFVCAgICAgICAgIDIwNAorI2RlZmluZSBCQUxUSUNfQ0hBUlNFVCAgICAgICAgICAxODYKKworI2VuZGlmCisKKyNpZm5kZWYgUFdMX0NMQVNTCisKKwkjaWZkZWYgRlhfUkVBREVSX0RMTAorCQkjZGVmaW5lIFBXTF9DTEFTUwkJX19kZWNsc3BlYyhkbGxleHBvcnQpCisJI2Vsc2UKKwkJI2RlZmluZSBQV0xfQ0xBU1MKKwkjZW5kaWYKKyNlbmRpZgorCitjbGFzcyBJRlhfU3lzdGVtSGFuZGxlcjsKK2NsYXNzIFBXTF9DTEFTUyBDUFdMX0ZvbnRNYXAgOiBwdWJsaWMgSUZYX0VkaXRfRm9udE1hcAoreworcHVibGljOgorCUNQV0xfRm9udE1hcChJRlhfU3lzdGVtSGFuZGxlciogcFN5c3RlbUhhbmRsZXIpOworCXZpcnR1YWwgfkNQV0xfRm9udE1hcCgpOworCisJdmlydHVhbCBDUERGX0ZvbnQqCQkJCQkJCUdldFBERkZvbnQoRlhfSU5UMzIgbkZvbnRJbmRleCk7CisJdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJCQkJCUdldFBERkZvbnRBbGlhcyhGWF9JTlQzMiBuRm9udEluZGV4KTsKKwl2aXJ0dWFsIEZYX0lOVDMyCQkJCQkJCUdldFdvcmRGb250SW5kZXgoRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBuQ2hhcnNldCwgRlhfSU5UMzIgbkZvbnRJbmRleCk7CisJdmlydHVhbCBGWF9JTlQzMgkJCQkJCQlDaGFyQ29kZUZyb21Vbmljb2RlKEZYX0lOVDMyIG5Gb250SW5kZXgsIEZYX1dPUkQgd29yZCk7CisJdmlydHVhbCBGWF9JTlQzMgkJCQkJCQlDaGFyU2V0RnJvbVVuaWNvZGUoRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBuT2xkQ2hhcnNldCk7CisKK3B1YmxpYzoKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJCUluaXRpYWwoRlhfTFBDU1RSIGZvbnRuYW1lID0gTlVMTCk7CisJdm9pZAkJCQkJCQkJCQlTZXRTeXN0ZW1IYW5kbGVyKElGWF9TeXN0ZW1IYW5kbGVyKiBwU3lzdGVtSGFuZGxlcik7CisKKwlGWF9JTlQzMgkJCQkJCQkJCUdldEZvbnRNYXBDb3VudCgpIGNvbnN0OworCWNvbnN0IENQV0xfRm9udE1hcF9EYXRhKgkJCQkJR2V0Rm9udE1hcERhdGEoRlhfSU5UMzIgbkluZGV4KSBjb25zdDsKKworcHVibGljOgorCXN0YXRpYyBGWF9JTlQzMgkJCQkJCQkJR2V0TmF0aXZlQ2hhcnNldCgpOworCUNGWF9CeXRlU3RyaW5nCQkJCQkJCQlHZXROYXRpdmVGb250TmFtZShGWF9JTlQzMiBuQ2hhcnNldCk7CisKKwlzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCQlHZXREZWZhdWx0Rm9udEJ5Q2hhcnNldChGWF9JTlQzMiBuQ2hhcnNldCk7CisKKwlDUERGX0ZvbnQqCQkJCQkJCQkJQWRkRm9udFRvRG9jdW1lbnQoQ1BERl9Eb2N1bWVudCogcERvYywgQ0ZYX0J5dGVTdHJpbmcmIHNGb250TmFtZSwgRlhfQllURSBuQ2hhcnNldCk7CisJc3RhdGljIEZYX0JPT0wJCQkJCQkJCUlzU3RhbmRhcmRGb250KGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzRm9udE5hbWUpOwkJCQkJCQkKKwlDUERGX0ZvbnQqCQkJCQkJCQkJQWRkU3RhbmRhcmRGb250KENQREZfRG9jdW1lbnQqIHBEb2MsIENGWF9CeXRlU3RyaW5nJiBzRm9udE5hbWUpOworCUNQREZfRm9udCoJCQkJCQkJCQlBZGRTeXN0ZW1Gb250KENQREZfRG9jdW1lbnQqIHBEb2MsIENGWF9CeXRlU3RyaW5nJiBzRm9udE5hbWUsIAorCQkJCQkJCQkJCQkJCUZYX0JZVEUgbkNoYXJzZXQpOworCitwcm90ZWN0ZWQ6CisJdmlydHVhbCBDUERGX0ZvbnQqCQkJCQkJCUZpbmRGb250U2FtZUNoYXJzZXQoQ0ZYX0J5dGVTdHJpbmcmIHNGb250QWxpYXMsIEZYX0lOVDMyIG5DaGFyc2V0KTsKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJCUFkZGVkRm9udChDUERGX0ZvbnQqIHBGb250LCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc0ZvbnRBbGlhcyk7CisJRlhfQk9PTAkJCQkJCQkJCQlLbm93V29yZChGWF9JTlQzMiBuRm9udEluZGV4LCBGWF9XT1JEIHdvcmQpOworCisJdmlydHVhbCBDUERGX0RvY3VtZW50KgkJCQkJCUdldERvY3VtZW50KCk7CisKKwl2b2lkCQkJCQkJCQkJCUVtcHR5KCk7CisJRlhfSU5UMzIJCQkJCQkJCQlHZXRGb250SW5kZXgoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNGb250TmFtZSwgRlhfSU5UMzIgbkNoYXJzZXQsIEZYX0JPT0wgYkZpbmQpOworCUZYX0lOVDMyCQkJCQkJCQkJR2V0UFdMRm9udEluZGV4KEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgbkNoYXJzZXQpOworCUZYX0lOVDMyCQkJCQkJCQkJQWRkRm9udERhdGEoQ1BERl9Gb250KiBwRm9udCwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNGb250QWxpYXMsIEZYX0lOVDMyIG5DaGFyc2V0ID0gREVGQVVMVF9DSEFSU0VUKTsKKworCUNGWF9CeXRlU3RyaW5nCQkJCQkJCQlFbmNvZGVGb250QWxpYXMoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNGb250TmFtZSwgRlhfSU5UMzIgbkNoYXJzZXQpOworCUNGWF9CeXRlU3RyaW5nCQkJCQkJCQlFbmNvZGVGb250QWxpYXMoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNGb250TmFtZSk7CisKK3ByaXZhdGU6CisJQ0ZYX0J5dGVTdHJpbmcJCQkJCQkJCUdldEZvbnROYW1lKEZYX0lOVDMyIG5Gb250SW5kZXgpOworCUZYX0lOVDMyCQkJCQkJCQkJRmluZEZvbnQoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNGb250TmFtZSwgRlhfSU5UMzIgbkNoYXJzZXQgPSBERUZBVUxUX0NIQVJTRVQpOworCisJQ0ZYX0J5dGVTdHJpbmcJCQkJCQkJCUdldE5hdGl2ZUZvbnQoRlhfSU5UMzIgbkNoYXJzZXQpOworCitwdWJsaWM6CisJc3RydWN0IENoYXJzZXRGb250TWFwIHsKKwkJRlhfSU5UMzIJCQkJCQkJCWNoYXJzZXQ7CisJCWNvbnN0IGNoYXIqCQkJCQkJCQlmb250bmFtZTsKKwl9OworCXN0YXRpYyBjb25zdCBDaGFyc2V0Rm9udE1hcAkJCQkJZGVmYXVsdFRURk1hcFtdOworCitwcm90ZWN0ZWQ6CisJQ0ZYX0FycmF5VGVtcGxhdGU8Q1BXTF9Gb250TWFwX0RhdGEqPgkJbV9hRGF0YTsKKwlDRlhfQXJyYXlUZW1wbGF0ZTxDUFdMX0ZvbnRNYXBfTmF0aXZlKj4JCW1fYU5hdGl2ZUZvbnQ7CisKK3ByaXZhdGU6CisJQ1BERl9Eb2N1bWVudCoJCQkJCQkJCW1fcFBERkRvYzsKKwlJRlhfU3lzdGVtSGFuZGxlcioJCQkJCQkJbV9wU3lzdGVtSGFuZGxlcjsKK307CisKK2NsYXNzIFBXTF9DTEFTUyBDUFdMX0RvY0ZvbnRNYXAgOiBwdWJsaWMgQ1BXTF9Gb250TWFwCit7CitwdWJsaWM6CisJQ1BXTF9Eb2NGb250TWFwKElGWF9TeXN0ZW1IYW5kbGVyKiBwU3lzdGVtSGFuZGxlciwgQ1BERl9Eb2N1bWVudCogcEF0dGFjaGVkRG9jKTsKKwl2aXJ0dWFsIH5DUFdMX0RvY0ZvbnRNYXAoKTsKKworCXZpcnR1YWwgQ1BERl9Eb2N1bWVudCoJCQkJCQlHZXREb2N1bWVudCgpOworCitwcml2YXRlOgorCUNQREZfRG9jdW1lbnQqCQkJCQkJCQltX3BBdHRhY2hlZERvYzsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfSWNvbi5oIGIvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfSWNvbi5oCmluZGV4IGQ2YjEyMWUuLjRhMDg0ZmQgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0ljb24uaAorKysgYi9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BXTF9JY29uLmgKQEAgLTEsNTkgKzEsNTkgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX1BXTF9JQ09OX0hfDQotI2RlZmluZSBfUFdMX0lDT05fSF8NCi0NCi1jbGFzcyBQV0xfQ0xBU1MgQ1BXTF9JbWFnZSA6IHB1YmxpYyBDUFdMX1duZA0KLXsNCi1wdWJsaWM6DQotCUNQV0xfSW1hZ2UoKTsNCi0JdmlydHVhbCB+Q1BXTF9JbWFnZSgpOw0KLQ0KLQl2aXJ0dWFsIENGWF9CeXRlU3RyaW5nCQkJR2V0SW1hZ2VBcHBTdHJlYW0oKTsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCQlHZXRTY2FsZShGWF9GTE9BVCAmIGZIU2NhbGUsRlhfRkxPQVQgJiBmVlNjYWxlKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlHZXRJbWFnZU9mZnNldChGWF9GTE9BVCAmIHgsRlhfRkxPQVQgJiB5KTsNCi0JdmlydHVhbCBDUERGX1N0cmVhbSAqCQkJR2V0UERGU3RyZWFtKCk7DQotDQotcHVibGljOg0KLQl2b2lkCQkJCQkJCVNldFBERlN0cmVhbShDUERGX1N0cmVhbSogcFN0cmVhbSk7CQ0KLQl2b2lkCQkJCQkJCUdldEltYWdlU2l6ZShGWF9GTE9BVCAmIGZXaWR0aCxGWF9GTE9BVCAmIGZIZWlnaHQpOw0KLQlDUERGX01hdHJpeAkJCQkJCUdldEltYWdlTWF0cml4KCk7DQotCUNGWF9CeXRlU3RyaW5nCQkJCQlHZXRJbWFnZUFsaWFzKCk7DQotCXZvaWQJCQkJCQkJU2V0SW1hZ2VBbGlhcyhGWF9MUENTVFIgc0ltYWdlQWxpYXMpOw0KLQ0KLXByb3RlY3RlZDoNCi0JQ1BERl9TdHJlYW0qCQkJCQltX3BQREZTdHJlYW07DQotCUNGWF9CeXRlU3RyaW5nCQkJCQltX3NJbWFnZUFsaWFzOw0KLX07DQotDQotY2xhc3MgUFdMX0NMQVNTIENQV0xfSWNvbiA6IHB1YmxpYyBDUFdMX0ltYWdlIA0KLXsNCi1wdWJsaWM6DQotCUNQV0xfSWNvbigpOw0KLQl2aXJ0dWFsIH5DUFdMX0ljb24oKTsNCi0NCi0JdmlydHVhbCBDUERGX0ljb25GaXQgKgkJCUdldEljb25GaXQoKXtyZXR1cm4gbV9wSWNvbkZpdDt9Ow0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJCUdldFNjYWxlKEZYX0ZMT0FUICYgZkhTY2FsZSxGWF9GTE9BVCAmIGZWU2NhbGUpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCUdldEltYWdlT2Zmc2V0KEZYX0ZMT0FUICYgeCxGWF9GTE9BVCAmIHkpOw0KLQ0KLQlGWF9JTlQzMgkJCQkJCUdldFNjYWxlTWV0aG9kKCk7DQotCUZYX0JPT0wJCQkJCQkJSXNQcm9wb3J0aW9uYWxTY2FsZSgpOw0KLQl2b2lkCQkJCQkJCUdldEljb25Qb3NpdGlvbihGWF9GTE9BVCAmIGZMZWZ0LCBGWF9GTE9BVCAmIGZCb3R0b20pOw0KLQlGWF9CT09MCQkJCQkJCUdldEZpdHRpbmdCb3VuZHMoKTsNCi0NCi0Jdm9pZAkJCQkJCQlTZXRJY29uRml0KENQREZfSWNvbkZpdCAqIHBJY29uRml0KXttX3BJY29uRml0ID0gcEljb25GaXQ7fTsNCi0NCi1wcml2YXRlOg0KLQlDUERGX0ljb25GaXQgKgkJCQkJbV9wSWNvbkZpdDsNCi19Ow0KLQ0KLQ0KLSNlbmRpZiAvLyAhZGVmaW5lZChBRlhfUFdMX0JVVFRPTl9IX181QTYwODBBQV8zM0M1XzRGQzlfOTFGQ19EOTY0NEM0MTEyMEFfX0lOQ0xVREVEXykNCi0NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9QV0xfSUNPTl9IXworI2RlZmluZSBfUFdMX0lDT05fSF8KKworY2xhc3MgUFdMX0NMQVNTIENQV0xfSW1hZ2UgOiBwdWJsaWMgQ1BXTF9XbmQKK3sKK3B1YmxpYzoKKwlDUFdMX0ltYWdlKCk7CisJdmlydHVhbCB+Q1BXTF9JbWFnZSgpOworCisJdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJCUdldEltYWdlQXBwU3RyZWFtKCk7CisKKwl2aXJ0dWFsIHZvaWQJCQkJCUdldFNjYWxlKEZYX0ZMT0FUICYgZkhTY2FsZSxGWF9GTE9BVCAmIGZWU2NhbGUpOworCXZpcnR1YWwgdm9pZAkJCQkJR2V0SW1hZ2VPZmZzZXQoRlhfRkxPQVQgJiB4LEZYX0ZMT0FUICYgeSk7CisJdmlydHVhbCBDUERGX1N0cmVhbSAqCQkJR2V0UERGU3RyZWFtKCk7CisKK3B1YmxpYzoKKwl2b2lkCQkJCQkJCVNldFBERlN0cmVhbShDUERGX1N0cmVhbSogcFN0cmVhbSk7CQorCXZvaWQJCQkJCQkJR2V0SW1hZ2VTaXplKEZYX0ZMT0FUICYgZldpZHRoLEZYX0ZMT0FUICYgZkhlaWdodCk7CisJQ1BERl9NYXRyaXgJCQkJCQlHZXRJbWFnZU1hdHJpeCgpOworCUNGWF9CeXRlU3RyaW5nCQkJCQlHZXRJbWFnZUFsaWFzKCk7CisJdm9pZAkJCQkJCQlTZXRJbWFnZUFsaWFzKEZYX0xQQ1NUUiBzSW1hZ2VBbGlhcyk7CisKK3Byb3RlY3RlZDoKKwlDUERGX1N0cmVhbSoJCQkJCW1fcFBERlN0cmVhbTsKKwlDRlhfQnl0ZVN0cmluZwkJCQkJbV9zSW1hZ2VBbGlhczsKK307CisKK2NsYXNzIFBXTF9DTEFTUyBDUFdMX0ljb24gOiBwdWJsaWMgQ1BXTF9JbWFnZSAKK3sKK3B1YmxpYzoKKwlDUFdMX0ljb24oKTsKKwl2aXJ0dWFsIH5DUFdMX0ljb24oKTsKKworCXZpcnR1YWwgQ1BERl9JY29uRml0ICoJCQlHZXRJY29uRml0KCl7cmV0dXJuIG1fcEljb25GaXQ7fTsKKworCXZpcnR1YWwgdm9pZAkJCQkJR2V0U2NhbGUoRlhfRkxPQVQgJiBmSFNjYWxlLEZYX0ZMT0FUICYgZlZTY2FsZSk7CisJdmlydHVhbCB2b2lkCQkJCQlHZXRJbWFnZU9mZnNldChGWF9GTE9BVCAmIHgsRlhfRkxPQVQgJiB5KTsKKworCUZYX0lOVDMyCQkJCQkJR2V0U2NhbGVNZXRob2QoKTsKKwlGWF9CT09MCQkJCQkJCUlzUHJvcG9ydGlvbmFsU2NhbGUoKTsKKwl2b2lkCQkJCQkJCUdldEljb25Qb3NpdGlvbihGWF9GTE9BVCAmIGZMZWZ0LCBGWF9GTE9BVCAmIGZCb3R0b20pOworCUZYX0JPT0wJCQkJCQkJR2V0Rml0dGluZ0JvdW5kcygpOworCisJdm9pZAkJCQkJCQlTZXRJY29uRml0KENQREZfSWNvbkZpdCAqIHBJY29uRml0KXttX3BJY29uRml0ID0gcEljb25GaXQ7fTsKKworcHJpdmF0ZToKKwlDUERGX0ljb25GaXQgKgkJCQkJbV9wSWNvbkZpdDsKK307CisKKworI2VuZGlmIC8vICFkZWZpbmVkKEFGWF9QV0xfQlVUVE9OX0hfXzVBNjA4MEFBXzMzQzVfNEZDOV85MUZDX0Q5NjQ0QzQxMTIwQV9fSU5DTFVERURfKQorCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0ljb25MaXN0LmggYi9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BXTF9JY29uTGlzdC5oCmluZGV4IGU1MTkyOTAuLmYwODQ0NDggMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0ljb25MaXN0LmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfSWNvbkxpc3QuaApAQCAtMSwxMjUgKzEsMTI1IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9QV0xfSWNvbkxpc3RfSF8NCi0jZGVmaW5lIF9QV0xfSWNvbkxpc3RfSF8NCi0NCi1jbGFzcyBJUFdMX0ljb25MaXN0X05vdGlmeTsNCi1jbGFzcyBDUFdMX0ljb25MaXN0X0l0ZW07DQotY2xhc3MgQ1BXTF9JY29uTGlzdF9Db250ZW50Ow0KLWNsYXNzIENQV0xfSWNvbkxpc3Q7DQotY2xhc3MgQ1BXTF9MYWJlbDsNCi0NCi1jbGFzcyBJUFdMX0ljb25MaXN0X05vdGlmeQ0KLXsNCi1wdWJsaWM6DQotCXZpcnR1YWwgdm9pZAkJCQkJCU9uTm90ZUxpc3RTZWxDaGFuZ2VkKEZYX0lOVDMyIG5JdGVtSW5kZXgpID0gMDsNCi19Ow0KLQ0KLWNsYXNzIENQV0xfSWNvbkxpc3RfSXRlbSA6IHB1YmxpYyBDUFdMX1duZA0KLXsNCi1wdWJsaWM6DQotCUNQV0xfSWNvbkxpc3RfSXRlbSgpOw0KLQl2aXJ0dWFsIH5DUFdMX0ljb25MaXN0X0l0ZW0oKTsNCi0NCi0JdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJCQlHZXRDbGFzc05hbWUoKSBjb25zdDsNCi0JdmlydHVhbCB2b2lkCQkJCQkJQ3JlYXRlQ2hpbGRXbmQoY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlSZVBvc0NoaWxkV25kKCk7DQotDQotCXZvaWQJCQkJCQkJCVNldFNlbGVjdChGWF9CT09MIGJTZWxlY3RlZCk7DQotCUZYX0JPT0wJCQkJCQkJCUlzU2VsZWN0ZWQoKSBjb25zdDsNCi0Jdm9pZAkJCQkJCQkJU2V0RGF0YSh2b2lkKiBwRGF0YSk7DQotCXZvaWQJCQkJCQkJCVNldEljb24oRlhfSU5UMzIgbkljb25JbmRleCk7DQotCXZvaWQJCQkJCQkJCVNldFRleHQoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cik7DQotCXZvaWQJCQkJCQkJCVNldEljb25GaWxsQ29sb3IoY29uc3QgQ1BXTF9Db2xvciYgY29sb3IpOw0KLQlDRlhfV2lkZVN0cmluZwkJCQkJCUdldFRleHQoKSBjb25zdDsNCi0NCi1wcm90ZWN0ZWQ6DQotCXZpcnR1YWwgRlhfRkxPQVQJCQkJCUdldEl0ZW1IZWlnaHQoRlhfRkxPQVQgZkxpbWl0V2lkdGgpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSk7DQotDQotCXZpcnR1YWwgdm9pZAkJCQkJCU9uRW5hYmxlZCgpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlPbkRpc2FibGVkKCk7DQotDQotcHJpdmF0ZToNCi0JRlhfSU5UMzIJCQkJCQkJbV9uSWNvbkluZGV4Ow0KLQl2b2lkKgkJCQkJCQkJbV9wRGF0YTsNCi0JRlhfQk9PTAkJCQkJCQkJbV9iU2VsZWN0ZWQ7DQotCUNQV0xfTGFiZWwqCQkJCQkJCW1fcFRleHQ7DQotCUNQV0xfQ29sb3IJCQkJCQkJbV9jckljb247DQotfTsNCi0NCi1jbGFzcyBDUFdMX0ljb25MaXN0X0NvbnRlbnQgOiBwdWJsaWMgQ1BXTF9MaXN0Q3RybA0KLXsNCi1wdWJsaWM6DQotCUNQV0xfSWNvbkxpc3RfQ29udGVudChGWF9JTlQzMiBuTGlzdENvdW50KTsNCi0JdmlydHVhbCB+Q1BXTF9JY29uTGlzdF9Db250ZW50KCk7DQotDQotCXZvaWQJCQkJCQkJCVNldFNlbGVjdChGWF9JTlQzMiBuSW5kZXgpOw0KLQlGWF9JTlQzMgkJCQkJCQlHZXRTZWxlY3QoKSBjb25zdDsNCi0Jdm9pZAkJCQkJCQkJU2V0Tm90aWZ5KElQV0xfSWNvbkxpc3RfTm90aWZ5KiBwTm90aWZ5KTsNCi0Jdm9pZAkJCQkJCQkJRW5hYmxlTm90aWZ5KEZYX0JPT0wgYk5vdGlmeSk7DQotCXZvaWQJCQkJCQkJCVNldExpc3REYXRhKEZYX0lOVDMyIG5JdGVtSW5kZXgsIHZvaWQqIHBEYXRhKTsNCi0Jdm9pZAkJCQkJCQkJU2V0TGlzdEljb24oRlhfSU5UMzIgbkl0ZW1JbmRleCwgRlhfSU5UMzIgbkljb25JbmRleCk7DQotCXZvaWQJCQkJCQkJCVNldExpc3RTdHJpbmcoRlhfSU5UMzIgbkl0ZW1JbmRleCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cik7DQotCXZvaWQJCQkJCQkJCVNldEljb25GaWxsQ29sb3IoY29uc3QgQ1BXTF9Db2xvciYgY29sb3IpOw0KLQlDRlhfV2lkZVN0cmluZwkJCQkJCUdldExpc3RTdHJpbmcoRlhfSU5UMzIgbkl0ZW1JbmRleCkgY29uc3Q7DQotCUlQV0xfSWNvbkxpc3RfTm90aWZ5KgkJCQlHZXROb3RpZnkoKSBjb25zdDsNCi0Jdm9pZAkJCQkJCQkJU2Nyb2xsVG9JdGVtKEZYX0lOVDMyIG5JdGVtSW5kZXgpOw0KLQ0KLXByb3RlY3RlZDoNCi0JdmlydHVhbCB2b2lkCQkJCQkJQ3JlYXRlQ2hpbGRXbmQoY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCQlPbkxCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCU9uTEJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCU9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCU9uS2V5RG93bihGWF9XT1JEIG5DaGFyKTsNCi0NCi1wcml2YXRlOg0KLQlDUFdMX0ljb25MaXN0X0l0ZW0qCQkJCQlHZXRMaXN0SXRlbShGWF9JTlQzMiBuSXRlbUluZGV4KSBjb25zdDsNCi0Jdm9pZAkJCQkJCQkJU2VsZWN0SXRlbShGWF9JTlQzMiBuSXRlbUluZGV4LCBGWF9CT09MIGJTZWxlY3QpOw0KLQlGWF9JTlQzMgkJCQkJCQlGaW5kSXRlbUluZGV4KGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsNCi0JDQotCUZYX0JPT0wJCQkJCQkJCW1fblNlbGVjdEluZGV4Ow0KLQlJUFdMX0ljb25MaXN0X05vdGlmeSoJCQkJbV9wTm90aWZ5Ow0KLQlGWF9CT09MCQkJCQkJCQltX2JFbmFibGVOb3RpZnk7DQotCUZYX0JPT0wJCQkJCQkJCW1fYk1vdXNlRG93bjsNCi0JRlhfSU5UMzIJCQkJCQkJbV9uTGlzdENvdW50Ow0KLX07DQotDQotY2xhc3MgUFdMX0NMQVNTIENQV0xfSWNvbkxpc3QgOiBwdWJsaWMgQ1BXTF9XbmQNCi17DQotcHVibGljOg0KLQlDUFdMX0ljb25MaXN0KEZYX0lOVDMyIG5MaXN0Q291bnQpOw0KLQl2aXJ0dWFsIH5DUFdMX0ljb25MaXN0KCk7DQotDQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCU9uTW91c2VXaGVlbChzaG9ydCB6RGVsdGEsIGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCk7DQotDQotCXZvaWQJCQkJCQkJCVNldFNlbGVjdChGWF9JTlQzMiBuSW5kZXgpOw0KLQl2b2lkCQkJCQkJCQlTZXRUb3BJdGVtKEZYX0lOVDMyIG5JbmRleCk7DQotCUZYX0lOVDMyCQkJCQkJCUdldFNlbGVjdCgpIGNvbnN0Ow0KLQl2b2lkCQkJCQkJCQlTZXROb3RpZnkoSVBXTF9JY29uTGlzdF9Ob3RpZnkqIHBOb3RpZnkpOw0KLQl2b2lkCQkJCQkJCQlFbmFibGVOb3RpZnkoRlhfQk9PTCBiTm90aWZ5KTsNCi0Jdm9pZAkJCQkJCQkJU2V0TGlzdERhdGEoRlhfSU5UMzIgbkl0ZW1JbmRleCwgdm9pZCogcERhdGEpOw0KLQl2b2lkCQkJCQkJCQlTZXRMaXN0SWNvbihGWF9JTlQzMiBuSXRlbUluZGV4LCBGWF9JTlQzMiBuSWNvbkluZGV4KTsNCi0Jdm9pZAkJCQkJCQkJU2V0TGlzdFN0cmluZyhGWF9JTlQzMiBuSXRlbUluZGV4LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyKTsNCi0Jdm9pZAkJCQkJCQkJU2V0SWNvbkZpbGxDb2xvcihjb25zdCBDUFdMX0NvbG9yJiBjb2xvcik7DQotCUNGWF9XaWRlU3RyaW5nCQkJCQkJR2V0TGlzdFN0cmluZyhGWF9JTlQzMiBuSXRlbUluZGV4KSBjb25zdDsNCi0NCi1wcm90ZWN0ZWQ6DQotCXZpcnR1YWwgdm9pZAkJCQkJCU9uQ3JlYXRlZCgpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlSZVBvc0NoaWxkV25kKCk7DQotCXZpcnR1YWwgdm9pZAkJCQkJCUNyZWF0ZUNoaWxkV25kKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKTsNCi0JDQotCXZpcnR1YWwgdm9pZAkJCQkJCU9uTm90aWZ5KENQV0xfV25kKiBwV25kLCBGWF9EV09SRCBtc2csIEZYX0lOVFBUUiB3UGFyYW0gPSAwLCBGWF9JTlRQVFIgbFBhcmFtID0gMCk7DQotDQotcHJpdmF0ZToNCi0JQ1BXTF9JY29uTGlzdF9Db250ZW50KgkJCQltX3BMaXN0Q29udGVudDsNCi0JRlhfSU5UMzIJCQkJCQkJbV9uTGlzdENvdW50Ow0KLX07DQotIA0KLSNlbmRpZiAvL19QV0xfSWNvbkxpc3RfSF8NCi0NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9QV0xfSWNvbkxpc3RfSF8KKyNkZWZpbmUgX1BXTF9JY29uTGlzdF9IXworCitjbGFzcyBJUFdMX0ljb25MaXN0X05vdGlmeTsKK2NsYXNzIENQV0xfSWNvbkxpc3RfSXRlbTsKK2NsYXNzIENQV0xfSWNvbkxpc3RfQ29udGVudDsKK2NsYXNzIENQV0xfSWNvbkxpc3Q7CitjbGFzcyBDUFdMX0xhYmVsOworCitjbGFzcyBJUFdMX0ljb25MaXN0X05vdGlmeQoreworcHVibGljOgorCXZpcnR1YWwgdm9pZAkJCQkJCU9uTm90ZUxpc3RTZWxDaGFuZ2VkKEZYX0lOVDMyIG5JdGVtSW5kZXgpID0gMDsKK307CisKK2NsYXNzIENQV0xfSWNvbkxpc3RfSXRlbSA6IHB1YmxpYyBDUFdMX1duZAoreworcHVibGljOgorCUNQV0xfSWNvbkxpc3RfSXRlbSgpOworCXZpcnR1YWwgfkNQV0xfSWNvbkxpc3RfSXRlbSgpOworCisJdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJCQlHZXRDbGFzc05hbWUoKSBjb25zdDsKKwl2aXJ0dWFsIHZvaWQJCQkJCQlDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7CisJdmlydHVhbCB2b2lkCQkJCQkJUmVQb3NDaGlsZFduZCgpOworCisJdm9pZAkJCQkJCQkJU2V0U2VsZWN0KEZYX0JPT0wgYlNlbGVjdGVkKTsKKwlGWF9CT09MCQkJCQkJCQlJc1NlbGVjdGVkKCkgY29uc3Q7CisJdm9pZAkJCQkJCQkJU2V0RGF0YSh2b2lkKiBwRGF0YSk7CisJdm9pZAkJCQkJCQkJU2V0SWNvbihGWF9JTlQzMiBuSWNvbkluZGV4KTsKKwl2b2lkCQkJCQkJCQlTZXRUZXh0KGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHIpOworCXZvaWQJCQkJCQkJCVNldEljb25GaWxsQ29sb3IoY29uc3QgQ1BXTF9Db2xvciYgY29sb3IpOworCUNGWF9XaWRlU3RyaW5nCQkJCQkJR2V0VGV4dCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisJdmlydHVhbCBGWF9GTE9BVAkJCQkJR2V0SXRlbUhlaWdodChGWF9GTE9BVCBmTGltaXRXaWR0aCk7CisJdmlydHVhbCB2b2lkCQkJCQkJRHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpOworCisJdmlydHVhbCB2b2lkCQkJCQkJT25FbmFibGVkKCk7CisJdmlydHVhbCB2b2lkCQkJCQkJT25EaXNhYmxlZCgpOworCitwcml2YXRlOgorCUZYX0lOVDMyCQkJCQkJCW1fbkljb25JbmRleDsKKwl2b2lkKgkJCQkJCQkJbV9wRGF0YTsKKwlGWF9CT09MCQkJCQkJCQltX2JTZWxlY3RlZDsKKwlDUFdMX0xhYmVsKgkJCQkJCQltX3BUZXh0OworCUNQV0xfQ29sb3IJCQkJCQkJbV9jckljb247Cit9OworCitjbGFzcyBDUFdMX0ljb25MaXN0X0NvbnRlbnQgOiBwdWJsaWMgQ1BXTF9MaXN0Q3RybAoreworcHVibGljOgorCUNQV0xfSWNvbkxpc3RfQ29udGVudChGWF9JTlQzMiBuTGlzdENvdW50KTsKKwl2aXJ0dWFsIH5DUFdMX0ljb25MaXN0X0NvbnRlbnQoKTsKKworCXZvaWQJCQkJCQkJCVNldFNlbGVjdChGWF9JTlQzMiBuSW5kZXgpOworCUZYX0lOVDMyCQkJCQkJCUdldFNlbGVjdCgpIGNvbnN0OworCXZvaWQJCQkJCQkJCVNldE5vdGlmeShJUFdMX0ljb25MaXN0X05vdGlmeSogcE5vdGlmeSk7CisJdm9pZAkJCQkJCQkJRW5hYmxlTm90aWZ5KEZYX0JPT0wgYk5vdGlmeSk7CisJdm9pZAkJCQkJCQkJU2V0TGlzdERhdGEoRlhfSU5UMzIgbkl0ZW1JbmRleCwgdm9pZCogcERhdGEpOworCXZvaWQJCQkJCQkJCVNldExpc3RJY29uKEZYX0lOVDMyIG5JdGVtSW5kZXgsIEZYX0lOVDMyIG5JY29uSW5kZXgpOworCXZvaWQJCQkJCQkJCVNldExpc3RTdHJpbmcoRlhfSU5UMzIgbkl0ZW1JbmRleCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cik7CisJdm9pZAkJCQkJCQkJU2V0SWNvbkZpbGxDb2xvcihjb25zdCBDUFdMX0NvbG9yJiBjb2xvcik7CisJQ0ZYX1dpZGVTdHJpbmcJCQkJCQlHZXRMaXN0U3RyaW5nKEZYX0lOVDMyIG5JdGVtSW5kZXgpIGNvbnN0OworCUlQV0xfSWNvbkxpc3RfTm90aWZ5KgkJCQlHZXROb3RpZnkoKSBjb25zdDsKKwl2b2lkCQkJCQkJCQlTY3JvbGxUb0l0ZW0oRlhfSU5UMzIgbkl0ZW1JbmRleCk7CisKK3Byb3RlY3RlZDoKKwl2aXJ0dWFsIHZvaWQJCQkJCQlDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7CisJdmlydHVhbCBGWF9CT09MCQkJCQkJT25MQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpOworCXZpcnR1YWwgRlhfQk9PTAkJCQkJCU9uTEJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCk7CisJdmlydHVhbCBGWF9CT09MCQkJCQkJT25Nb3VzZU1vdmUoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQlPbktleURvd24oRlhfV09SRCBuQ2hhcik7CisKK3ByaXZhdGU6CisJQ1BXTF9JY29uTGlzdF9JdGVtKgkJCQkJR2V0TGlzdEl0ZW0oRlhfSU5UMzIgbkl0ZW1JbmRleCkgY29uc3Q7CisJdm9pZAkJCQkJCQkJU2VsZWN0SXRlbShGWF9JTlQzMiBuSXRlbUluZGV4LCBGWF9CT09MIGJTZWxlY3QpOworCUZYX0lOVDMyCQkJCQkJCUZpbmRJdGVtSW5kZXgoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOworCQorCUZYX0JPT0wJCQkJCQkJCW1fblNlbGVjdEluZGV4OworCUlQV0xfSWNvbkxpc3RfTm90aWZ5KgkJCQltX3BOb3RpZnk7CisJRlhfQk9PTAkJCQkJCQkJbV9iRW5hYmxlTm90aWZ5OworCUZYX0JPT0wJCQkJCQkJCW1fYk1vdXNlRG93bjsKKwlGWF9JTlQzMgkJCQkJCQltX25MaXN0Q291bnQ7Cit9OworCitjbGFzcyBQV0xfQ0xBU1MgQ1BXTF9JY29uTGlzdCA6IHB1YmxpYyBDUFdMX1duZAoreworcHVibGljOgorCUNQV0xfSWNvbkxpc3QoRlhfSU5UMzIgbkxpc3RDb3VudCk7CisJdmlydHVhbCB+Q1BXTF9JY29uTGlzdCgpOworCisJdmlydHVhbCBGWF9CT09MCQkJCQkJT25Nb3VzZVdoZWVsKHNob3J0IHpEZWx0YSwgY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KTsKKworCXZvaWQJCQkJCQkJCVNldFNlbGVjdChGWF9JTlQzMiBuSW5kZXgpOworCXZvaWQJCQkJCQkJCVNldFRvcEl0ZW0oRlhfSU5UMzIgbkluZGV4KTsKKwlGWF9JTlQzMgkJCQkJCQlHZXRTZWxlY3QoKSBjb25zdDsKKwl2b2lkCQkJCQkJCQlTZXROb3RpZnkoSVBXTF9JY29uTGlzdF9Ob3RpZnkqIHBOb3RpZnkpOworCXZvaWQJCQkJCQkJCUVuYWJsZU5vdGlmeShGWF9CT09MIGJOb3RpZnkpOworCXZvaWQJCQkJCQkJCVNldExpc3REYXRhKEZYX0lOVDMyIG5JdGVtSW5kZXgsIHZvaWQqIHBEYXRhKTsKKwl2b2lkCQkJCQkJCQlTZXRMaXN0SWNvbihGWF9JTlQzMiBuSXRlbUluZGV4LCBGWF9JTlQzMiBuSWNvbkluZGV4KTsKKwl2b2lkCQkJCQkJCQlTZXRMaXN0U3RyaW5nKEZYX0lOVDMyIG5JdGVtSW5kZXgsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHIpOworCXZvaWQJCQkJCQkJCVNldEljb25GaWxsQ29sb3IoY29uc3QgQ1BXTF9Db2xvciYgY29sb3IpOworCUNGWF9XaWRlU3RyaW5nCQkJCQkJR2V0TGlzdFN0cmluZyhGWF9JTlQzMiBuSXRlbUluZGV4KSBjb25zdDsKKworcHJvdGVjdGVkOgorCXZpcnR1YWwgdm9pZAkJCQkJCU9uQ3JlYXRlZCgpOworCXZpcnR1YWwgdm9pZAkJCQkJCVJlUG9zQ2hpbGRXbmQoKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCQlDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7CisJCisJdmlydHVhbCB2b2lkCQkJCQkJT25Ob3RpZnkoQ1BXTF9XbmQqIHBXbmQsIEZYX0RXT1JEIG1zZywgRlhfSU5UUFRSIHdQYXJhbSA9IDAsIEZYX0lOVFBUUiBsUGFyYW0gPSAwKTsKKworcHJpdmF0ZToKKwlDUFdMX0ljb25MaXN0X0NvbnRlbnQqCQkJCW1fcExpc3RDb250ZW50OworCUZYX0lOVDMyCQkJCQkJCW1fbkxpc3RDb3VudDsKK307CisgCisjZW5kaWYgLy9fUFdMX0ljb25MaXN0X0hfCisKKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfTGFiZWwuaCBiL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0xhYmVsLmgKaW5kZXggMTZiZDFhZS4uMjllYTUxMyAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfTGFiZWwuaAorKysgYi9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BXTF9MYWJlbC5oCkBAIC0xLDUxICsxLDUxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9QV0xfTEFCRUxfSF8NCi0jZGVmaW5lIF9QV0xfTEFCRUxfSF8NCi0NCi1jbGFzcyBJRlhfRWRpdDsNCi0NCi1jbGFzcyBQV0xfQ0xBU1MgQ1BXTF9MYWJlbCA6IHB1YmxpYyBDUFdMX1duZA0KLXsNCi1wdWJsaWM6DQotCUNQV0xfTGFiZWwoKTsNCi0JdmlydHVhbCB+Q1BXTF9MYWJlbCgpOw0KLQ0KLXB1YmxpYzoNCi0JdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJCUdldENsYXNzTmFtZSgpIGNvbnN0OwkNCi0JdmlydHVhbCB2b2lkCQkJCQlTZXRGb250U2l6ZShGWF9GTE9BVCBmRm9udFNpemUpOw0KLQl2aXJ0dWFsIEZYX0ZMT0FUCQkJCUdldEZvbnRTaXplKCkgY29uc3Q7DQotDQotcHVibGljOgkJDQotCXZvaWQJCQkJCQkJU2V0VGV4dChGWF9MUENXU1RSIGNzVGV4dCk7DQotCUNGWF9XaWRlU3RyaW5nCQkJCQlHZXRUZXh0KCkgY29uc3Q7DQotDQotCXZvaWQJCQkJCQkJU2V0TGltaXRDaGFyKEZYX0lOVDMyIG5MaW1pdENoYXIpOw0KLQl2b2lkCQkJCQkJCVNldEhvcnpTY2FsZShGWF9JTlQzMiBuSG9yelNjYWxlKTsNCi0Jdm9pZAkJCQkJCQlTZXRDaGFyU3BhY2UoRlhfRkxPQVQgZkNoYXJTcGFjZSk7DQotDQotCUNQREZfUmVjdAkJCQkJCUdldENvbnRlbnRSZWN0KCkgY29uc3Q7CQ0KLQlGWF9JTlQzMgkJCQkJCUdldFRvdGFsV29yZHMoKTsNCi0NCi0JQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldFRleHRBcHBlYXJhbmNlU3RyZWFtKGNvbnN0IENQREZfUG9pbnQgJiBwdE9mZnNldCkgY29uc3Q7DQotDQotcHJvdGVjdGVkOg0KLQl2aXJ0dWFsIHZvaWQJCQkJCU9uQ3JlYXRlZCgpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCURyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlHZXRUaGlzQXBwZWFyYW5jZVN0cmVhbShDRlhfQnl0ZVRleHRCdWYgJiBzQXBwU3RyZWFtKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlSZVBvc0NoaWxkV25kKCk7CQ0KLQ0KLXByaXZhdGU6DQotCXZvaWQJCQkJCQkJU2V0UGFyYW1CeUZsYWcoKTsNCi0NCi1wcml2YXRlOg0KLQlJRlhfRWRpdCoJCQkJCQltX3BFZGl0Ow0KLX07DQotDQotI2VuZGlmDQotDQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfUFdMX0xBQkVMX0hfCisjZGVmaW5lIF9QV0xfTEFCRUxfSF8KKworY2xhc3MgSUZYX0VkaXQ7CisKK2NsYXNzIFBXTF9DTEFTUyBDUFdMX0xhYmVsIDogcHVibGljIENQV0xfV25kCit7CitwdWJsaWM6CisJQ1BXTF9MYWJlbCgpOworCXZpcnR1YWwgfkNQV0xfTGFiZWwoKTsKKworcHVibGljOgorCXZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCQlHZXRDbGFzc05hbWUoKSBjb25zdDsJCisJdmlydHVhbCB2b2lkCQkJCQlTZXRGb250U2l6ZShGWF9GTE9BVCBmRm9udFNpemUpOworCXZpcnR1YWwgRlhfRkxPQVQJCQkJR2V0Rm9udFNpemUoKSBjb25zdDsKKworcHVibGljOgkJCisJdm9pZAkJCQkJCQlTZXRUZXh0KEZYX0xQQ1dTVFIgY3NUZXh0KTsKKwlDRlhfV2lkZVN0cmluZwkJCQkJR2V0VGV4dCgpIGNvbnN0OworCisJdm9pZAkJCQkJCQlTZXRMaW1pdENoYXIoRlhfSU5UMzIgbkxpbWl0Q2hhcik7CisJdm9pZAkJCQkJCQlTZXRIb3J6U2NhbGUoRlhfSU5UMzIgbkhvcnpTY2FsZSk7CisJdm9pZAkJCQkJCQlTZXRDaGFyU3BhY2UoRlhfRkxPQVQgZkNoYXJTcGFjZSk7CisKKwlDUERGX1JlY3QJCQkJCQlHZXRDb250ZW50UmVjdCgpIGNvbnN0OwkKKwlGWF9JTlQzMgkJCQkJCUdldFRvdGFsV29yZHMoKTsKKworCUNGWF9CeXRlU3RyaW5nCQkJCQlHZXRUZXh0QXBwZWFyYW5jZVN0cmVhbShjb25zdCBDUERGX1BvaW50ICYgcHRPZmZzZXQpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisJdmlydHVhbCB2b2lkCQkJCQlPbkNyZWF0ZWQoKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCURyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCUdldFRoaXNBcHBlYXJhbmNlU3RyZWFtKENGWF9CeXRlVGV4dEJ1ZiAmIHNBcHBTdHJlYW0pOworCXZpcnR1YWwgdm9pZAkJCQkJUmVQb3NDaGlsZFduZCgpOwkKKworcHJpdmF0ZToKKwl2b2lkCQkJCQkJCVNldFBhcmFtQnlGbGFnKCk7CisKK3ByaXZhdGU6CisJSUZYX0VkaXQqCQkJCQkJbV9wRWRpdDsKK307CisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0xpc3RCb3guaCBiL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0xpc3RCb3guaAppbmRleCA2ZWY4MmM4Li43OTYxNTc5IDEwMDY0NAotLS0gYS9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BXTF9MaXN0Qm94LmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfTGlzdEJveC5oCkBAIC0xLDEwMyArMSwxMDMgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX1BXTF9MSVNUQk9YX0hfDQotI2RlZmluZSBfUFdMX0xJU1RCT1hfSF8NCi0NCi1jbGFzcyBDUERGX0xpc3RDdHJsOw0KLWNsYXNzIENQV0xfTGlzdF9Ob3RpZnk7DQotY2xhc3MgQ1BXTF9MaXN0Qm94Ow0KLWNsYXNzIElQV0xfRmlsbGVyX05vdGlmeTsNCi0NCi1jbGFzcyBDUFdMX0xpc3RfTm90aWZ5IDogcHVibGljIElGWF9MaXN0X05vdGlmeQ0KLXsNCi1wdWJsaWM6DQotCUNQV0xfTGlzdF9Ob3RpZnkoQ1BXTF9MaXN0Qm94ICogcExpc3QpOw0KLQl2aXJ0dWFsIH5DUFdMX0xpc3RfTm90aWZ5KCk7DQotDQotCXZvaWQJCQkJCQkJSU9uU2V0U2Nyb2xsSW5mb1goRlhfRkxPQVQgZlBsYXRlTWluLCBGWF9GTE9BVCBmUGxhdGVNYXgsIA0KLQkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZDb250ZW50TWluLCBGWF9GTE9BVCBmQ29udGVudE1heCwgDQotCQkJCQkJCQkJCQkJRlhfRkxPQVQgZlNtYWxsU3RlcCwgRlhfRkxPQVQgZkJpZ1N0ZXApe30NCi0Jdm9pZAkJCQkJCQlJT25TZXRTY3JvbGxJbmZvWShGWF9GTE9BVCBmUGxhdGVNaW4sIEZYX0ZMT0FUIGZQbGF0ZU1heCwgDQotCQkJCQkJCQkJCQkJRlhfRkxPQVQgZkNvbnRlbnRNaW4sIEZYX0ZMT0FUIGZDb250ZW50TWF4LCANCi0JCQkJCQkJCQkJCQlGWF9GTE9BVCBmU21hbGxTdGVwLCBGWF9GTE9BVCBmQmlnU3RlcCk7DQotCXZvaWQJCQkJCQkJSU9uU2V0U2Nyb2xsUG9zWChGWF9GTE9BVCBmeCl7fQ0KLQl2b2lkCQkJCQkJCUlPblNldFNjcm9sbFBvc1koRlhfRkxPQVQgZnkpOw0KLQl2b2lkCQkJCQkJCUlPblNldENhcmV0KEZYX0JPT0wgYlZpc2libGUsY29uc3QgQ1BERl9Qb2ludCAmIHB0SGVhZCxjb25zdCBDUERGX1BvaW50ICYgcHRGb290LCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UpOw0KLQl2b2lkCQkJCQkJCUlPbkNhcmV0Q2hhbmdlKGNvbnN0IENQVlRfU2VjUHJvcHMgJiBzZWNQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgJiB3b3JkUHJvcHMpOw0KLQl2b2lkCQkJCQkJCUlPbkludmFsaWRhdGVSZWN0KENQREZfUmVjdCAqIHBSZWN0KTsNCi0NCi1wcml2YXRlOg0KLQlDUFdMX0xpc3RCb3gqCQkJCQltX3BMaXN0OwkNCi19Ow0KLQ0KLWNsYXNzIFBXTF9DTEFTUyBDUFdMX0xpc3RCb3ggOiBwdWJsaWMgQ1BXTF9XbmQNCi17DQotcHVibGljOg0KLQlDUFdMX0xpc3RCb3goKTsNCi0JdmlydHVhbCB+Q1BXTF9MaXN0Qm94KCk7DQotDQotCXZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCQlHZXRDbGFzc05hbWUoKSBjb25zdDsNCi0JdmlydHVhbCB2b2lkCQkJCQlPbkNyZWF0ZWQoKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlPbkRlc3Ryb3koKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlHZXRUaGlzQXBwZWFyYW5jZVN0cmVhbShDRlhfQnl0ZVRleHRCdWYgJiBzQXBwU3RyZWFtKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSk7DQotDQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25LZXlEb3duKEZYX1dPUkQgbkNoYXIsIEZYX0RXT1JEIG5GbGFnKTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCQlPbkNoYXIoRlhfV09SRCBuQ2hhciwgRlhfRFdPUkQgbkZsYWcpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uTEJ1dHRvbkRvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZyk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25MQnV0dG9uVXAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZyk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25Nb3VzZU1vdmUoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZyk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25Nb3VzZVdoZWVsKHNob3J0IHpEZWx0YSwgY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZyk7DQotCXZpcnR1YWwgdm9pZAkJCQkJS2lsbEZvY3VzKCk7DQotDQotCXZpcnR1YWwgdm9pZAkJCQkJT25Ob3RpZnkoQ1BXTF9XbmQqIHBXbmQsIEZYX0RXT1JEIG1zZywgRlhfSU5UUFRSIHdQYXJhbSA9IDAsIEZYX0lOVFBUUiBsUGFyYW0gPSAwKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlSZVBvc0NoaWxkV25kKCk7DQotCXZpcnR1YWwgdm9pZAkJCQkJU2V0VGV4dChGWF9MUENXU1RSIGNzVGV4dCxGWF9CT09MIGJSZWZyZXNoID0gVFJVRSk7DQotCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCQlHZXRUZXh0KCkgY29uc3Q7CQ0KLQl2aXJ0dWFsIENQREZfUmVjdAkJCQlHZXRGb2N1c1JlY3QoKSBjb25zdDsNCi0JdmlydHVhbCB2b2lkCQkJCQlTZXRGb250U2l6ZShGWF9GTE9BVCBmRm9udFNpemUpOw0KLQl2aXJ0dWFsIEZYX0ZMT0FUCQkJCUdldEZvbnRTaXplKCkgY29uc3Q7DQotDQotCXZvaWQJCQkJCQkJT25Ob3RpZnlTZWxDaGFuZ2VkKEZYX0JPT0wgYktleURvd24sIEZYX0JPT0wgJiBiRXhpdCAsIEZYX0RXT1JEIG5GbGFnKTsNCi0NCi0Jdm9pZAkJCQkJCQlBZGRTdHJpbmcoRlhfTFBDV1NUUiBzdHJpbmcpOwkNCi0Jdm9pZAkJCQkJCQlTZXRUb3BWaXNpYmxlSW5kZXgoRlhfSU5UMzIgbkl0ZW1JbmRleCk7DQotCXZvaWQJCQkJCQkJU2Nyb2xsVG9MaXN0SXRlbShGWF9JTlQzMiBuSXRlbUluZGV4KTsNCi0Jdm9pZAkJCQkJCQlSZXNldENvbnRlbnQoKTsNCi0Jdm9pZAkJCQkJCQlSZXNldCgpOw0KLQl2b2lkCQkJCQkJCVNlbGVjdChGWF9JTlQzMiBuSXRlbUluZGV4KTsNCi0Jdm9pZAkJCQkJCQlTZXRDYXJldChGWF9JTlQzMiBuSXRlbUluZGV4KTsNCi0Jdm9pZAkJCQkJCQlTZXRIb3ZlclNlbChGWF9CT09MIGJIb3ZlclNlbCk7DQotCQ0KLQlGWF9JTlQzMgkJCQkJCUdldENvdW50KCkgY29uc3Q7DQotCUZYX0JPT0wJCQkJCQkJSXNNdWx0aXBsZVNlbCgpIGNvbnN0Ow0KLQlGWF9JTlQzMgkJCQkJCUdldENhcmV0SW5kZXgoKSBjb25zdDsNCi0JRlhfSU5UMzIJCQkJCQlHZXRDdXJTZWwoKSBjb25zdDsNCi0JRlhfQk9PTAkJCQkJCQlJc0l0ZW1TZWxlY3RlZChGWF9JTlQzMiBuSXRlbUluZGV4KSBjb25zdDsNCi0JRlhfSU5UMzIJCQkJCQlHZXRUb3BWaXNpYmxlSW5kZXgoKSBjb25zdDsNCi0JRlhfSU5UMzIJCQkJCQlGaW5kTmV4dChGWF9JTlQzMiBuSW5kZXgsRlhfV0NIQVIgbkNoYXIpIGNvbnN0Ow0KLQlDUERGX1JlY3QJCQkJCQlHZXRDb250ZW50UmVjdCgpIGNvbnN0OwkNCi0JRlhfRkxPQVQJCQkJCQlHZXRGaXJzdEhlaWdodCgpIGNvbnN0Ow0KLQlDUERGX1JlY3QJCQkJCQlHZXRMaXN0UmVjdCgpIGNvbnN0Ow0KLQ0KLQl2b2lkCQkJCQkJCVNldEZpbGxlck5vdGlmeShJUFdMX0ZpbGxlcl9Ob3RpZnkqIHBOb3RpZnkpIHttX3BGaWxsZXJOb3RpZnkgPSBwTm90aWZ5O30NCi0NCi1wcm90ZWN0ZWQ6DQotCUlGWF9MaXN0KgkJCQkJCW1fcExpc3Q7DQotCUNQV0xfTGlzdF9Ob3RpZnkqCQkJCW1fcExpc3ROb3RpZnk7DQotCUZYX0JPT0wJCQkJCQkJbV9iTW91c2VEb3duOw0KLQlGWF9CT09MCQkJCQkJCW1fYkhvdmVyU2VsOw0KLQlJUFdMX0ZpbGxlcl9Ob3RpZnkqCQkJCW1fcEZpbGxlck5vdGlmeTsNCi1wdWJsaWM6DQotCXZvaWQJCQkJCQkJQXR0YWNoRkZMRGF0YSh2b2lkKiBwRGF0YSkge21fcEZvcm1GaWxsZXIgPSBwRGF0YTt9DQotcHJpdmF0ZToNCi0Jdm9pZCoJCQkJCQkJbV9wRm9ybUZpbGxlcjsNCi19Ow0KLQ0KLSNlbmRpZiAvLyAhZGVmaW5lZChBRlhfUFdMX0xJU1RCT1hfSF9fRjhDMERENzJfQ0MzQ180ODA2Xzg2RkJfRTlEMDJCMDRBMzRCX19JTkNMVURFRF8pDQotDQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfUFdMX0xJU1RCT1hfSF8KKyNkZWZpbmUgX1BXTF9MSVNUQk9YX0hfCisKK2NsYXNzIENQREZfTGlzdEN0cmw7CitjbGFzcyBDUFdMX0xpc3RfTm90aWZ5OworY2xhc3MgQ1BXTF9MaXN0Qm94OworY2xhc3MgSVBXTF9GaWxsZXJfTm90aWZ5OworCitjbGFzcyBDUFdMX0xpc3RfTm90aWZ5IDogcHVibGljIElGWF9MaXN0X05vdGlmeQoreworcHVibGljOgorCUNQV0xfTGlzdF9Ob3RpZnkoQ1BXTF9MaXN0Qm94ICogcExpc3QpOworCXZpcnR1YWwgfkNQV0xfTGlzdF9Ob3RpZnkoKTsKKworCXZvaWQJCQkJCQkJSU9uU2V0U2Nyb2xsSW5mb1goRlhfRkxPQVQgZlBsYXRlTWluLCBGWF9GTE9BVCBmUGxhdGVNYXgsIAorCQkJCQkJCQkJCQkJRlhfRkxPQVQgZkNvbnRlbnRNaW4sIEZYX0ZMT0FUIGZDb250ZW50TWF4LCAKKwkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZTbWFsbFN0ZXAsIEZYX0ZMT0FUIGZCaWdTdGVwKXt9CisJdm9pZAkJCQkJCQlJT25TZXRTY3JvbGxJbmZvWShGWF9GTE9BVCBmUGxhdGVNaW4sIEZYX0ZMT0FUIGZQbGF0ZU1heCwgCisJCQkJCQkJCQkJCQlGWF9GTE9BVCBmQ29udGVudE1pbiwgRlhfRkxPQVQgZkNvbnRlbnRNYXgsIAorCQkJCQkJCQkJCQkJRlhfRkxPQVQgZlNtYWxsU3RlcCwgRlhfRkxPQVQgZkJpZ1N0ZXApOworCXZvaWQJCQkJCQkJSU9uU2V0U2Nyb2xsUG9zWChGWF9GTE9BVCBmeCl7fQorCXZvaWQJCQkJCQkJSU9uU2V0U2Nyb2xsUG9zWShGWF9GTE9BVCBmeSk7CisJdm9pZAkJCQkJCQlJT25TZXRDYXJldChGWF9CT09MIGJWaXNpYmxlLGNvbnN0IENQREZfUG9pbnQgJiBwdEhlYWQsY29uc3QgQ1BERl9Qb2ludCAmIHB0Rm9vdCwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlKTsKKwl2b2lkCQkJCQkJCUlPbkNhcmV0Q2hhbmdlKGNvbnN0IENQVlRfU2VjUHJvcHMgJiBzZWNQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgJiB3b3JkUHJvcHMpOworCXZvaWQJCQkJCQkJSU9uSW52YWxpZGF0ZVJlY3QoQ1BERl9SZWN0ICogcFJlY3QpOworCitwcml2YXRlOgorCUNQV0xfTGlzdEJveCoJCQkJCW1fcExpc3Q7CQorfTsKKworY2xhc3MgUFdMX0NMQVNTIENQV0xfTGlzdEJveCA6IHB1YmxpYyBDUFdMX1duZAoreworcHVibGljOgorCUNQV0xfTGlzdEJveCgpOworCXZpcnR1YWwgfkNQV0xfTGlzdEJveCgpOworCisJdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJCUdldENsYXNzTmFtZSgpIGNvbnN0OworCXZpcnR1YWwgdm9pZAkJCQkJT25DcmVhdGVkKCk7CisJdmlydHVhbCB2b2lkCQkJCQlPbkRlc3Ryb3koKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCUdldFRoaXNBcHBlYXJhbmNlU3RyZWFtKENGWF9CeXRlVGV4dEJ1ZiAmIHNBcHBTdHJlYW0pOworCXZpcnR1YWwgdm9pZAkJCQkJRHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpOworCisJdmlydHVhbCBGWF9CT09MCQkJCQlPbktleURvd24oRlhfV09SRCBuQ2hhciwgRlhfRFdPUkQgbkZsYWcpOworCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25DaGFyKEZYX1dPUkQgbkNoYXIsIEZYX0RXT1JEIG5GbGFnKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uTEJ1dHRvbkRvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZyk7CisJdmlydHVhbCBGWF9CT09MCQkJCQlPbkxCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOworCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25Nb3VzZVdoZWVsKHNob3J0IHpEZWx0YSwgY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZyk7CisJdmlydHVhbCB2b2lkCQkJCQlLaWxsRm9jdXMoKTsKKworCXZpcnR1YWwgdm9pZAkJCQkJT25Ob3RpZnkoQ1BXTF9XbmQqIHBXbmQsIEZYX0RXT1JEIG1zZywgRlhfSU5UUFRSIHdQYXJhbSA9IDAsIEZYX0lOVFBUUiBsUGFyYW0gPSAwKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCVJlUG9zQ2hpbGRXbmQoKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCVNldFRleHQoRlhfTFBDV1NUUiBjc1RleHQsRlhfQk9PTCBiUmVmcmVzaCA9IFRSVUUpOworCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCQlHZXRUZXh0KCkgY29uc3Q7CQorCXZpcnR1YWwgQ1BERl9SZWN0CQkJCUdldEZvY3VzUmVjdCgpIGNvbnN0OworCXZpcnR1YWwgdm9pZAkJCQkJU2V0Rm9udFNpemUoRlhfRkxPQVQgZkZvbnRTaXplKTsKKwl2aXJ0dWFsIEZYX0ZMT0FUCQkJCUdldEZvbnRTaXplKCkgY29uc3Q7CisKKwl2b2lkCQkJCQkJCU9uTm90aWZ5U2VsQ2hhbmdlZChGWF9CT09MIGJLZXlEb3duLCBGWF9CT09MICYgYkV4aXQgLCBGWF9EV09SRCBuRmxhZyk7CisKKwl2b2lkCQkJCQkJCUFkZFN0cmluZyhGWF9MUENXU1RSIHN0cmluZyk7CQorCXZvaWQJCQkJCQkJU2V0VG9wVmlzaWJsZUluZGV4KEZYX0lOVDMyIG5JdGVtSW5kZXgpOworCXZvaWQJCQkJCQkJU2Nyb2xsVG9MaXN0SXRlbShGWF9JTlQzMiBuSXRlbUluZGV4KTsKKwl2b2lkCQkJCQkJCVJlc2V0Q29udGVudCgpOworCXZvaWQJCQkJCQkJUmVzZXQoKTsKKwl2b2lkCQkJCQkJCVNlbGVjdChGWF9JTlQzMiBuSXRlbUluZGV4KTsKKwl2b2lkCQkJCQkJCVNldENhcmV0KEZYX0lOVDMyIG5JdGVtSW5kZXgpOworCXZvaWQJCQkJCQkJU2V0SG92ZXJTZWwoRlhfQk9PTCBiSG92ZXJTZWwpOworCQorCUZYX0lOVDMyCQkJCQkJR2V0Q291bnQoKSBjb25zdDsKKwlGWF9CT09MCQkJCQkJCUlzTXVsdGlwbGVTZWwoKSBjb25zdDsKKwlGWF9JTlQzMgkJCQkJCUdldENhcmV0SW5kZXgoKSBjb25zdDsKKwlGWF9JTlQzMgkJCQkJCUdldEN1clNlbCgpIGNvbnN0OworCUZYX0JPT0wJCQkJCQkJSXNJdGVtU2VsZWN0ZWQoRlhfSU5UMzIgbkl0ZW1JbmRleCkgY29uc3Q7CisJRlhfSU5UMzIJCQkJCQlHZXRUb3BWaXNpYmxlSW5kZXgoKSBjb25zdDsKKwlGWF9JTlQzMgkJCQkJCUZpbmROZXh0KEZYX0lOVDMyIG5JbmRleCxGWF9XQ0hBUiBuQ2hhcikgY29uc3Q7CisJQ1BERl9SZWN0CQkJCQkJR2V0Q29udGVudFJlY3QoKSBjb25zdDsJCisJRlhfRkxPQVQJCQkJCQlHZXRGaXJzdEhlaWdodCgpIGNvbnN0OworCUNQREZfUmVjdAkJCQkJCUdldExpc3RSZWN0KCkgY29uc3Q7CisKKwl2b2lkCQkJCQkJCVNldEZpbGxlck5vdGlmeShJUFdMX0ZpbGxlcl9Ob3RpZnkqIHBOb3RpZnkpIHttX3BGaWxsZXJOb3RpZnkgPSBwTm90aWZ5O30KKworcHJvdGVjdGVkOgorCUlGWF9MaXN0KgkJCQkJCW1fcExpc3Q7CisJQ1BXTF9MaXN0X05vdGlmeSoJCQkJbV9wTGlzdE5vdGlmeTsKKwlGWF9CT09MCQkJCQkJCW1fYk1vdXNlRG93bjsKKwlGWF9CT09MCQkJCQkJCW1fYkhvdmVyU2VsOworCUlQV0xfRmlsbGVyX05vdGlmeSoJCQkJbV9wRmlsbGVyTm90aWZ5OworcHVibGljOgorCXZvaWQJCQkJCQkJQXR0YWNoRkZMRGF0YSh2b2lkKiBwRGF0YSkge21fcEZvcm1GaWxsZXIgPSBwRGF0YTt9Citwcml2YXRlOgorCXZvaWQqCQkJCQkJCW1fcEZvcm1GaWxsZXI7Cit9OworCisjZW5kaWYgLy8gIWRlZmluZWQoQUZYX1BXTF9MSVNUQk9YX0hfX0Y4QzBERDcyX0NDM0NfNDgwNl84NkZCX0U5RDAyQjA0QTM0Ql9fSU5DTFVERURfKQorCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0xpc3RDdHJsLmggYi9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BXTF9MaXN0Q3RybC5oCmluZGV4IDNhM2I5MjIuLjg5OTcyOTYgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0xpc3RDdHJsLmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfTGlzdEN0cmwuaApAQCAtMSw1MyArMSw1MyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfUFdMX0xJU1RDVFJMX0hfDQotI2RlZmluZSBfUFdMX0xJU1RDVFJMX0hfDQotDQotY2xhc3MgQ1BXTF9MaXN0Q3RybDsNCi0NCi1jbGFzcyBDUFdMX0xpc3RDdHJsIDogcHVibGljIENQV0xfV25kDQotew0KLXB1YmxpYzoNCi0JQ1BXTF9MaXN0Q3RybCgpOw0KLQl2aXJ0dWFsIH5DUFdMX0xpc3RDdHJsKCk7DQotDQotcHVibGljOg0KLQl2b2lkCQkJCQkJCQlTZXRTY3JvbGxQb3MoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOw0KLQlDUERGX1BvaW50CQkJCQkJCUdldFNjcm9sbFBvcygpIGNvbnN0Ow0KLQlDUERGX1JlY3QJCQkJCQkJR2V0U2Nyb2xsQXJlYSgpIGNvbnN0Ow0KLQkNCi0Jdm9pZAkJCQkJCQkJU2V0SXRlbVNwYWNlKEZYX0ZMT0FUIGZTcGFjZSk7DQotCXZvaWQJCQkJCQkJCVNldFRvcFNwYWNlKEZYX0ZMT0FUIGZTcGFjZSk7DQotCXZvaWQJCQkJCQkJCVNldEJvdHRvbVNwYWNlKEZYX0ZMT0FUIGZTcGFjZSk7DQotCXZvaWQJCQkJCQkJCVJlc2V0RmFjZSgpOw0KLQl2b2lkCQkJCQkJCQlSZXNldENvbnRlbnQoRlhfSU5UMzIgblN0YXJ0KTsNCi0JRlhfSU5UMzIJCQkJCQkJR2V0SXRlbUluZGV4KENQV0xfV25kKiBwSXRlbSk7DQotCUZYX0ZMT0FUCQkJCQkJCUdldENvbnRlbnRzSGVpZ2h0KEZYX0ZMT0FUIGZMaW1pdFdpZHRoKTsNCi0NCi1wcm90ZWN0ZWQ6DQotCXZpcnR1YWwgdm9pZAkJCQkJCVJlUG9zQ2hpbGRXbmQoKTsNCi0JdmlydHVhbCB2b2lkCQkJCQkJRHJhd0NoaWxkQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKTsNCi0NCi1wdWJsaWM6DQotCUNQREZfUG9pbnQJCQkJCQkJSW5Ub091dChjb25zdCBDUERGX1BvaW50JiBwb2ludCkgY29uc3Q7DQotCUNQREZfUG9pbnQJCQkJCQkJT3V0VG9Jbihjb25zdCBDUERGX1BvaW50JiBwb2ludCkgY29uc3Q7DQotCUNQREZfUmVjdAkJCQkJCQlJblRvT3V0KGNvbnN0IENQREZfUmVjdCYgcmVjdCkgY29uc3Q7DQotCUNQREZfUmVjdAkJCQkJCQlPdXRUb0luKGNvbnN0IENQREZfUmVjdCYgcmVjdCkgY29uc3Q7DQotDQotcHJpdmF0ZToNCi0Jdm9pZAkJCQkJCQkJUmVzZXRBbGwoRlhfQk9PTCBiTW92ZSxGWF9JTlQzMiBuU3RhcnQpOw0KLQ0KLXByaXZhdGU6DQotCUNQREZfUmVjdAkJCQkJCQltX3JjQ29udGVudDsNCi0JQ1BERl9Qb2ludAkJCQkJCQltX3B0U2Nyb2xsOw0KLQlGWF9GTE9BVAkJCQkJCQltX2ZJdGVtU3BhY2U7DQotCUZYX0ZMT0FUCQkJCQkJCW1fZlRvcFNwYWNlOw0KLQlGWF9GTE9BVAkJCQkJCQltX2ZCb3R0b21TcGFjZTsNCi19Ow0KLQ0KLSNlbmRpZg0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpZm5kZWYgX1BXTF9MSVNUQ1RSTF9IXworI2RlZmluZSBfUFdMX0xJU1RDVFJMX0hfCisKK2NsYXNzIENQV0xfTGlzdEN0cmw7CisKK2NsYXNzIENQV0xfTGlzdEN0cmwgOiBwdWJsaWMgQ1BXTF9XbmQKK3sKK3B1YmxpYzoKKwlDUFdMX0xpc3RDdHJsKCk7CisJdmlydHVhbCB+Q1BXTF9MaXN0Q3RybCgpOworCitwdWJsaWM6CisJdm9pZAkJCQkJCQkJU2V0U2Nyb2xsUG9zKGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsKKwlDUERGX1BvaW50CQkJCQkJCUdldFNjcm9sbFBvcygpIGNvbnN0OworCUNQREZfUmVjdAkJCQkJCQlHZXRTY3JvbGxBcmVhKCkgY29uc3Q7CisJCisJdm9pZAkJCQkJCQkJU2V0SXRlbVNwYWNlKEZYX0ZMT0FUIGZTcGFjZSk7CisJdm9pZAkJCQkJCQkJU2V0VG9wU3BhY2UoRlhfRkxPQVQgZlNwYWNlKTsKKwl2b2lkCQkJCQkJCQlTZXRCb3R0b21TcGFjZShGWF9GTE9BVCBmU3BhY2UpOworCXZvaWQJCQkJCQkJCVJlc2V0RmFjZSgpOworCXZvaWQJCQkJCQkJCVJlc2V0Q29udGVudChGWF9JTlQzMiBuU3RhcnQpOworCUZYX0lOVDMyCQkJCQkJCUdldEl0ZW1JbmRleChDUFdMX1duZCogcEl0ZW0pOworCUZYX0ZMT0FUCQkJCQkJCUdldENvbnRlbnRzSGVpZ2h0KEZYX0ZMT0FUIGZMaW1pdFdpZHRoKTsKKworcHJvdGVjdGVkOgorCXZpcnR1YWwgdm9pZAkJCQkJCVJlUG9zQ2hpbGRXbmQoKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCQlEcmF3Q2hpbGRBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpOworCitwdWJsaWM6CisJQ1BERl9Qb2ludAkJCQkJCQlJblRvT3V0KGNvbnN0IENQREZfUG9pbnQmIHBvaW50KSBjb25zdDsKKwlDUERGX1BvaW50CQkJCQkJCU91dFRvSW4oY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpIGNvbnN0OworCUNQREZfUmVjdAkJCQkJCQlJblRvT3V0KGNvbnN0IENQREZfUmVjdCYgcmVjdCkgY29uc3Q7CisJQ1BERl9SZWN0CQkJCQkJCU91dFRvSW4oY29uc3QgQ1BERl9SZWN0JiByZWN0KSBjb25zdDsKKworcHJpdmF0ZToKKwl2b2lkCQkJCQkJCQlSZXNldEFsbChGWF9CT09MIGJNb3ZlLEZYX0lOVDMyIG5TdGFydCk7CisKK3ByaXZhdGU6CisJQ1BERl9SZWN0CQkJCQkJCW1fcmNDb250ZW50OworCUNQREZfUG9pbnQJCQkJCQkJbV9wdFNjcm9sbDsKKwlGWF9GTE9BVAkJCQkJCQltX2ZJdGVtU3BhY2U7CisJRlhfRkxPQVQJCQkJCQkJbV9mVG9wU3BhY2U7CisJRlhfRkxPQVQJCQkJCQkJbV9mQm90dG9tU3BhY2U7Cit9OworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfTm90ZS5oIGIvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfTm90ZS5oCmluZGV4IDg5MzA4ZTYuLjdjYzllMDQgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX05vdGUuaAorKysgYi9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BXTF9Ob3RlLmgKQEAgLTEsMzU1ICsxLDM1NSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfUFdMX05PVEVfSF8NCi0jZGVmaW5lIF9QV0xfTk9URV9IXw0KLQ0KLWNsYXNzIElQV0xfTm90ZU5vdGlmeTsNCi1jbGFzcyBJUFdMX05vdGVIYW5kbGVyOw0KLWNsYXNzIElQV0xfTm90ZUl0ZW07DQotY2xhc3MgQ1BXTF9Ob3RlSXRlbTsNCi1jbGFzcyBDUFdMX05vdGU7DQotY2xhc3MgQ1BXTF9MYWJlbDsNCi1jbGFzcyBDUFdMX0VkaXQ7DQotY2xhc3MgQ1BXTF9Ob3RlX0ljb247DQotY2xhc3MgQ1BXTF9Ob3RlX0Nsb3NlQm94Ow0KLWNsYXNzIENQV0xfTm90ZV9MQkJveDsNCi1jbGFzcyBDUFdMX05vdGVfUkJCb3g7DQotY2xhc3MgQ1BXTF9Ob3RlX0VkaXQ7DQotY2xhc3MgQ1BXTF9Ob3RlX09wdGlvbnM7DQotY2xhc3MgQ1BXTF9Ob3RlX0NvbnRlbnRzOw0KLWNsYXNzIElQb3B1cF9Ob3RlOw0KLQ0KLQ0KLWNsYXNzIElQV0xfTm90ZU5vdGlmeQ0KLXsNCi1wdWJsaWM6DQotCXZpcnR1YWwgdm9pZAkJCQkJCU9uTm90ZU1vdmUoY29uc3QgRlhfUkVDVCYgcnRXaW4pID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCQkJT25Ob3RlU2hvdyhGWF9CT09MIGJTaG93KSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQkJCU9uTm90ZUFjdGl2YXRlKEZYX0JPT0wgYkFjdGl2ZSkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlPbk5vdGVDbG9zZSgpID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCQkJT25JdGVtQ3JlYXRlKElQV0xfTm90ZUl0ZW0qIHBJdGVtKSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQkJCU9uSXRlbURlbGV0ZShJUFdMX05vdGVJdGVtKiBwSXRlbSkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlPblNldEF1dGhvck5hbWUoSVBXTF9Ob3RlSXRlbSogcEl0ZW0pID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCQkJT25TZXRCa0NvbG9yKElQV0xfTm90ZUl0ZW0qIHBJdGVtKSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQkJCU9uU2V0Q29udGVudHMoSVBXTF9Ob3RlSXRlbSogcEl0ZW0pID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCQkJT25TZXREYXRlVGltZShJUFdMX05vdGVJdGVtKiBwSXRlbSkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlPblNldFN1YmplY3ROYW1lKElQV0xfTm90ZUl0ZW0qIHBJdGVtKSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQkJCU9uUG9wdXBNZW51KEZYX0lOVDMyIHgsIEZYX0lOVDMyIHkpID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCQkJT25Qb3B1cE1lbnUoSVBXTF9Ob3RlSXRlbSogcEl0ZW0sIEZYX0lOVDMyIHgsIEZYX0lOVDMyIHkpID0gMDsNCi19Ow0KLQ0KLWNsYXNzIElQV0xfTm90ZUhhbmRsZXINCi17DQotcHVibGljOg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlPbk5vdGVDb2xvckNoYW5nZWQoY29uc3QgQ1BXTF9Db2xvciYgY29sb3IpID0gMDsNCi19Ow0KLQ0KLWNsYXNzIElQV0xfTm90ZUl0ZW0NCi17DQotcHVibGljOg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlTZXRQcml2YXRlRGF0YSh2b2lkKiBwRGF0YSkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlTZXRCa0NvbG9yKGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yKSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQkJCVNldFN1YmplY3ROYW1lKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzTmFtZSkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlTZXRBdXRob3JOYW1lKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzTmFtZSkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlTZXREYXRlVGltZShGWF9TWVNURU1USU1FIHRpbWUpID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCQkJU2V0Q29udGVudHMoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNDb250ZW50cykgPSAwOw0KLQ0KLQl2aXJ0dWFsIElQV0xfTm90ZUl0ZW0qCQkJCUNyZWF0ZVN1Ykl0ZW0oKSA9IDA7DQotCXZpcnR1YWwgRlhfSU5UMzIJCQkJCUNvdW50U3ViSXRlbXMoKSBjb25zdCA9IDA7DQotCXZpcnR1YWwgSVBXTF9Ob3RlSXRlbSoJCQkJR2V0U3ViSXRlbXMoRlhfSU5UMzIgaW5kZXgpIGNvbnN0ID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCQkJRGVsZXRlU3ViSXRlbShJUFdMX05vdGVJdGVtKiBwTm90ZUl0ZW0pID0gMDsNCi0JdmlydHVhbCB2b2lkCQkJCQkJU2V0Rm9jdXMoKSA9IDA7DQotCQ0KLQl2aXJ0dWFsIElQV0xfTm90ZUl0ZW0qCQkJCUdldFBhcmVudEl0ZW0oKSBjb25zdCA9IDA7DQotCXZpcnR1YWwgdm9pZCoJCQkJCQlHZXRQcml2YXRlRGF0YSgpIGNvbnN0ID0gMDsNCi0JdmlydHVhbCBDRlhfV2lkZVN0cmluZwkJCQlHZXRBdXRob3JOYW1lKCkgY29uc3QgPSAwOw0KLQl2aXJ0dWFsIENQV0xfQ29sb3IJCQkJCUdldEJrQ29sb3IoKSBjb25zdCA9IDA7DQotCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCQkJR2V0Q29udGVudHMoKSBjb25zdCA9IDA7DQotCXZpcnR1YWwgRlhfU1lTVEVNVElNRQkJCQlHZXREYXRlVGltZSgpIGNvbnN0ID0gMDsNCi0JdmlydHVhbCBDRlhfV2lkZVN0cmluZwkJCQlHZXRTdWJqZWN0TmFtZSgpIGNvbnN0ID0gMDsNCi0NCi0JdmlydHVhbCBDUFdMX0VkaXQqCQkJCQlHZXRFZGl0KCkgY29uc3QgPSAwOw0KLX07DQotDQotY2xhc3MgUFdMX0NMQVNTIENQV0xfTm90ZV9JY29uIDogcHVibGljIENQV0xfV25kDQotew0KLXB1YmxpYzoNCi0JQ1BXTF9Ob3RlX0ljb24oKTsNCi0JdmlydHVhbCB+Q1BXTF9Ob3RlX0ljb24oKTsNCi0NCi0Jdm9pZAkJCQkJCQkJU2V0SWNvblR5cGUoRlhfSU5UMzIgblR5cGUpOw0KLQ0KLXB1YmxpYzoNCi0NCi1wcm90ZWN0ZWQ6DQotCXZpcnR1YWwgdm9pZAkJCQkJCURyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKTsNCi0NCi1wcml2YXRlOg0KLQlGWF9JTlQzMgkJCQkJCQltX25UeXBlOw0KLX07DQotDQotY2xhc3MgQ1BXTF9Ob3RlX0Nsb3NlQm94IDogcHVibGljIENQV0xfQnV0dG9uDQotew0KLXB1YmxpYzoNCi0JQ1BXTF9Ob3RlX0Nsb3NlQm94KCk7DQotCXZpcnR1YWwgfkNQV0xfTm90ZV9DbG9zZUJveCgpOw0KLQ0KLXByb3RlY3RlZDoNCi0JdmlydHVhbCB2b2lkCQkJCQkJRHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCQlPbkxCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCQlPbkxCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsNCi0NCi1wcml2YXRlOg0KLQlGWF9CT09MCQkJCQkJCQltX2JNb3VzZURvd247DQotfTsNCi0NCi1jbGFzcyBDUFdMX05vdGVfTEJCb3ggOiBwdWJsaWMgQ1BXTF9XbmQNCi17DQotcHVibGljOg0KLQlDUFdMX05vdGVfTEJCb3goKTsNCi0JdmlydHVhbCB+Q1BXTF9Ob3RlX0xCQm94KCk7DQotDQotcHJvdGVjdGVkOg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSk7DQotfTsNCi0NCi1jbGFzcyBDUFdMX05vdGVfUkJCb3ggOiBwdWJsaWMgQ1BXTF9XbmQNCi17DQotcHVibGljOg0KLQlDUFdMX05vdGVfUkJCb3goKTsNCi0JdmlydHVhbCB+Q1BXTF9Ob3RlX1JCQm94KCk7DQotDQotcHJvdGVjdGVkOg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSk7DQotfTsNCi0NCi1jbGFzcyBDUFdMX05vdGVfRWRpdCA6IHB1YmxpYyBDUFdMX0VkaXQNCi17DQotcHVibGljOg0KLQlDUFdMX05vdGVfRWRpdCgpOw0KLQl2aXJ0dWFsIH5DUFdMX05vdGVfRWRpdCgpOw0KLQ0KLQl2b2lkCQkJCQkJCQlFbmFibGVOb3RpZnkoRlhfQk9PTCBiRW5hYmxlKSB7bV9iRW5hYmxlTm90aWZ5ID0gYkVuYWJsZTt9DQotCXZpcnR1YWwgRlhfRkxPQVQJCQkJCUdldEl0ZW1IZWlnaHQoRlhfRkxPQVQgZkxpbWl0V2lkdGgpOw0KLQlGWF9GTE9BVAkJCQkJCQlHZXRJdGVtTGVmdE1hcmdpbigpOw0KLQlGWF9GTE9BVAkJCQkJCQlHZXRJdGVtUmlnaHRNYXJnaW4oKTsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCQkJU2V0VGV4dChGWF9MUENXU1RSIGNzVGV4dCk7DQotDQotcHJvdGVjdGVkOg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlPbk5vdGlmeShDUFdMX1duZCogcFduZCwgRlhfRFdPUkQgbXNnLCBGWF9JTlRQVFIgd1BhcmFtID0gMCwgRlhfSU5UUFRSIGxQYXJhbSA9IDApOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlSZVBvc0NoaWxkV25kKCk7DQotCXZpcnR1YWwgdm9pZAkJCQkJCU9uU2V0Rm9jdXMoKTsNCi0JdmlydHVhbCB2b2lkCQkJCQkJT25LaWxsRm9jdXMoKTsJDQotDQotcHJpdmF0ZToNCi0JRlhfQk9PTAkJCQkJCQkJbV9iRW5hYmxlTm90aWZ5Ow0KLQlGWF9GTE9BVAkJCQkJCQltX2ZPbGRJdGVtSGVpZ2h0Ow0KLQlGWF9CT09MCQkJCQkJCQltX2JTaXplQ2hhbmdlZDsNCi0JRlhfRkxPQVQJCQkJCQkJbV9mT2xkTWluOw0KLQlGWF9GTE9BVAkJCQkJCQltX2ZPbGRNYXg7DQotfTsNCi0NCi1jbGFzcyBDUFdMX05vdGVfT3B0aW9ucyA6IHB1YmxpYyBDUFdMX1duZA0KLXsNCi1wdWJsaWM6DQotCUNQV0xfTm90ZV9PcHRpb25zKCk7DQotCXZpcnR1YWwgfkNQV0xfTm90ZV9PcHRpb25zKCk7DQotDQotCUNQREZfUmVjdAkJCQkJCQlHZXRDb250ZW50UmVjdCgpIGNvbnN0Ow0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlTZXRUZXh0Q29sb3IoY29uc3QgQ1BXTF9Db2xvciAmIGNvbG9yKTsNCi0Jdm9pZAkJCQkJCQkJU2V0VGV4dChjb25zdCBDRlhfV2lkZVN0cmluZyYgc1RleHQpOw0KLQ0KLXByb3RlY3RlZDoNCi0JdmlydHVhbCB2b2lkCQkJCQkJUmVQb3NDaGlsZFduZCgpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7DQotCXZpcnR1YWwgdm9pZAkJCQkJCURyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKTsNCi0NCi1wcml2YXRlOg0KLQlDUFdMX0xhYmVsKgkJCQkJCQltX3BUZXh0Ow0KLX07DQotDQotY2xhc3MgQ1BXTF9Ob3RlX0NvbnRlbnRzIDogcHVibGljIENQV0xfTGlzdEN0cmwNCi17DQotcHVibGljOg0KLQlDUFdMX05vdGVfQ29udGVudHMoKTsNCi0JdmlydHVhbCB+Q1BXTF9Ob3RlX0NvbnRlbnRzKCk7DQotDQotCXZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCQkJR2V0Q2xhc3NOYW1lKCkgY29uc3Q7DQotCXZpcnR1YWwgdm9pZAkJCQkJCU9uTm90aWZ5KENQV0xfV25kKiBwV25kLCBGWF9EV09SRCBtc2csIEZYX0lOVFBUUiB3UGFyYW0gPSAwLCBGWF9JTlRQVFIgbFBhcmFtID0gMCk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCU9uTEJ1dHRvbkRvd24oY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsNCi0NCi0Jdm9pZAkJCQkJCQkJU2V0RWRpdEZvY3VzKEZYX0JPT0wgYkxhc3QpOw0KLQlDUFdMX0VkaXQqCQkJCQkJCUdldEVkaXQoKSBjb25zdDsNCi0NCi1wdWJsaWM6DQotCXZvaWQJCQkJCQkJCVNldFRleHQoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNUZXh0KTsNCi0JQ0ZYX1dpZGVTdHJpbmcJCQkJCQlHZXRUZXh0KCkgY29uc3Q7DQotDQotCUNQV0xfTm90ZUl0ZW0qCQkJCQkJQ3JlYXRlU3ViSXRlbSgpOw0KLQl2b2lkCQkJCQkJCQlEZWxldGVTdWJJdGVtKElQV0xfTm90ZUl0ZW0qIHBOb3RlSXRlbSk7DQotCUZYX0lOVDMyCQkJCQkJCUNvdW50U3ViSXRlbXMoKSBjb25zdDsNCi0JSVBXTF9Ob3RlSXRlbSoJCQkJCQlHZXRTdWJJdGVtcyhGWF9JTlQzMiBpbmRleCkgY29uc3Q7DQotDQotCXZpcnR1YWwgSVBXTF9Ob3RlSXRlbSoJCQkJR2V0SGl0Tm90ZUl0ZW0oY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOw0KLQl2b2lkCQkJCQkJCQlFbmFibGVSZWFkKEZYX0JPT0wgYkVuYWJsZWQpOw0KLQl2b2lkCQkJCQkJCQlFbmFibGVNb2RpZnkoRlhfQk9PTCBiRW5hYmxlZCk7DQotDQotcHJvdGVjdGVkOg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7DQotDQotcHJpdmF0ZToNCi0JQ1BXTF9Ob3RlX0VkaXQqCQkJCQkJbV9wRWRpdDsNCi19Ow0KLQ0KLWNsYXNzIFBXTF9DTEFTUyBDUFdMX05vdGVJdGVtIDogcHVibGljIENQV0xfV25kLCBwdWJsaWMgSVBXTF9Ob3RlSXRlbSANCi17DQotcHVibGljOg0KLQlDUFdMX05vdGVJdGVtKCk7DQotCXZpcnR1YWwgfkNQV0xfTm90ZUl0ZW0oKTsNCi0NCi1wdWJsaWM6DQotCXZpcnR1YWwgdm9pZAkJCQkJCVNldFByaXZhdGVEYXRhKHZvaWQqIHBEYXRhKTsNCi0JdmlydHVhbCB2b2lkCQkJCQkJU2V0QmtDb2xvcihjb25zdCBDUFdMX0NvbG9yJiBjb2xvcik7DQotCXZpcnR1YWwgdm9pZAkJCQkJCVNldFN1YmplY3ROYW1lKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzTmFtZSk7DQotCXZpcnR1YWwgdm9pZAkJCQkJCVNldEF1dGhvck5hbWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNOYW1lKTsNCi0JdmlydHVhbCB2b2lkCQkJCQkJU2V0RGF0ZVRpbWUoRlhfU1lTVEVNVElNRSB0aW1lKTsNCi0JdmlydHVhbCB2b2lkCQkJCQkJU2V0Q29udGVudHMoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNDb250ZW50cyk7DQotDQotCXZpcnR1YWwgSVBXTF9Ob3RlSXRlbSoJCQkJQ3JlYXRlU3ViSXRlbSgpOw0KLQl2aXJ0dWFsIEZYX0lOVDMyCQkJCQlDb3VudFN1Ykl0ZW1zKCkgY29uc3Q7DQotCXZpcnR1YWwgSVBXTF9Ob3RlSXRlbSoJCQkJR2V0U3ViSXRlbXMoRlhfSU5UMzIgaW5kZXgpIGNvbnN0Ow0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlEZWxldGVTdWJJdGVtKElQV0xfTm90ZUl0ZW0qIHBOb3RlSXRlbSk7DQotCXZpcnR1YWwgdm9pZAkJCQkJCVNldEZvY3VzKCl7U2V0Tm90ZUZvY3VzKEZBTFNFKTt9DQotDQotCXZpcnR1YWwgSVBXTF9Ob3RlSXRlbSoJCQkJR2V0UGFyZW50SXRlbSgpIGNvbnN0Ow0KLQl2aXJ0dWFsIHZvaWQqCQkJCQkJR2V0UHJpdmF0ZURhdGEoKSBjb25zdDsNCi0JdmlydHVhbCBDRlhfV2lkZVN0cmluZwkJCQlHZXRBdXRob3JOYW1lKCkgY29uc3Q7DQotCXZpcnR1YWwgQ1BXTF9Db2xvcgkJCQkJR2V0QmtDb2xvcigpIGNvbnN0Ow0KLQl2aXJ0dWFsIENGWF9XaWRlU3RyaW5nCQkJCUdldENvbnRlbnRzKCkgY29uc3Q7DQotCXZpcnR1YWwgRlhfU1lTVEVNVElNRQkJCQlHZXREYXRlVGltZSgpIGNvbnN0Ow0KLQl2aXJ0dWFsIENGWF9XaWRlU3RyaW5nCQkJCUdldFN1YmplY3ROYW1lKCkgY29uc3Q7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCUlzVG9wSXRlbSgpIGNvbnN0IHsgcmV0dXJuIEZBTFNFO30NCi0JdmlydHVhbCBDUFdMX0VkaXQqCQkJCQlHZXRFZGl0KCkgY29uc3Q7DQotDQotcHVibGljOg0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCQlPbkxCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQmIHBvaW50LCBGWF9EV09SRCBuRmxhZyk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCU9uUkJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOw0KLQl2aXJ0dWFsIENGWF9CeXRlU3RyaW5nCQkJCUdldENsYXNzTmFtZSgpIGNvbnN0Ow0KLQl2aXJ0dWFsIElQV0xfTm90ZUl0ZW0qCQkJCUdldEhpdE5vdGVJdGVtKGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsNCi0JdmlydHVhbCBJUFdMX05vdGVJdGVtKgkJCQlHZXRGb2N1c2VkTm90ZUl0ZW0oKSBjb25zdDsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCQkJUmVzZXRTdWJqZWN0TmFtZShGWF9JTlQzMiBuSXRlbUluZGV4KTsNCi0Jdm9pZAkJCQkJCQkJRW5hYmxlUmVhZChGWF9CT09MIGJFbmFibGVkKTsNCi0Jdm9pZAkJCQkJCQkJRW5hYmxlTW9kaWZ5KEZYX0JPT0wgYkVuYWJsZWQpOw0KLQ0KLXByb3RlY3RlZDoNCi0JdmlydHVhbCB2b2lkCQkJCQkJUmVQb3NDaGlsZFduZCgpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7DQotDQotCXZpcnR1YWwgdm9pZAkJCQkJCU9uTm90aWZ5KENQV0xfV25kKiBwV25kLCBGWF9EV09SRCBtc2csIEZYX0lOVFBUUiB3UGFyYW0gPSAwLCBGWF9JTlRQVFIgbFBhcmFtID0gMCk7DQotDQotcHVibGljOg0KLQl2aXJ0dWFsIEZYX0ZMT0FUCQkJCQlHZXRJdGVtSGVpZ2h0KEZYX0ZMT0FUIGZMaW1pdFdpZHRoKTsNCi0JdmlydHVhbCBGWF9GTE9BVAkJCQkJR2V0SXRlbUxlZnRNYXJnaW4oKTsNCi0JdmlydHVhbCBGWF9GTE9BVAkJCQkJR2V0SXRlbVJpZ2h0TWFyZ2luKCk7DQotCUNQV0xfTm90ZUl0ZW0qCQkJCQkJQ3JlYXRlTm90ZUl0ZW0oKTsNCi0JQ1BXTF9Ob3RlSXRlbSoJCQkJCQlHZXRQYXJlbnROb3RlSXRlbSgpIGNvbnN0Ow0KLQ0KLQl2b2lkCQkJCQkJCQlTZXROb3RlRm9jdXMoRlhfQk9PTCBiTGFzdCk7DQotCXZvaWQJCQkJCQkJCU9uQ29udGVudHNWYWxpZGF0ZSgpOw0KLQkNCi0Jdm9pZAkJCQkJCQkJT25DcmVhdGVOb3RlSXRlbSgpOw0KLQ0KLXByb3RlY3RlZDoNCi0Jdm9pZAkJCQkJCQkJUG9wdXBOb3RlSXRlbU1lbnUoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpOw0KLQ0KLQl2aXJ0dWFsIGNvbnN0IENQV0xfTm90ZSoJCQlHZXROb3RlKCkgY29uc3Q7DQotCXZpcnR1YWwgSVBXTF9Ob3RlTm90aWZ5KgkJCUdldE5vdGVOb3RpZnkoKSBjb25zdDsNCi0NCi1wcm90ZWN0ZWQ6DQotCUNQV0xfTGFiZWwqCQkJCQkJCW1fcFN1YmplY3Q7DQotCUNQV0xfTGFiZWwqCQkJCQkJCW1fcERhdGVUaW1lOw0KLQlDUFdMX05vdGVfQ29udGVudHMqCQkJCQltX3BDb250ZW50czsNCi0NCi1wcml2YXRlOg0KLQl2b2lkKgkJCQkJCQkJbV9wUHJpdmF0ZURhdGE7DQotCUZYX1NZU1RFTVRJTUUJCQkJCQltX2R0Tm90ZTsNCi0JQ0ZYX1dpZGVTdHJpbmcJCQkJCQltX3NBdXRob3I7DQotDQotCUZYX0ZMT0FUCQkJCQkJCW1fZk9sZEl0ZW1IZWlnaHQ7DQotCUZYX0JPT0wJCQkJCQkJCW1fYlNpemVDaGFuZ2VkOw0KLQlGWF9CT09MCQkJCQkJCQltX2JBbGxvd01vZGlmeTsNCi19Ow0KLQ0KLWNsYXNzIFBXTF9DTEFTUyBDUFdMX05vdGUgOiBwdWJsaWMgQ1BXTF9Ob3RlSXRlbQ0KLXsNCi1wdWJsaWM6DQotCUNQV0xfTm90ZShJUG9wdXBfTm90ZSogcFBvcHVwTm90ZSwgSVBXTF9Ob3RlTm90aWZ5KiBwTm90ZU5vdGlmeSwgSVBXTF9Ob3RlSGFuZGxlciogcE5vdGVIYW5kbGVyKTsNCi0JdmlydHVhbCB+Q1BXTF9Ob3RlKCk7DQotDQotcHVibGljOg0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlTZXRTdWJqZWN0TmFtZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc05hbWUpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlTZXRBdXRob3JOYW1lKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzTmFtZSk7DQotCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCQkJR2V0QXV0aG9yTmFtZSgpIGNvbnN0Ow0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlTZXRCa0NvbG9yKGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yKTsNCi0JdmlydHVhbCB2b2lkCQkJCQkJUmVzZXRTdWJqZWN0TmFtZShGWF9JTlQzMiBuSXRlbUluZGV4KXt9DQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCUlzVG9wSXRlbSgpIGNvbnN0IHtyZXR1cm4gVFJVRTt9DQotCXZpcnR1YWwgY29uc3QgQ1BXTF9Ob3RlKgkJCUdldE5vdGUoKSBjb25zdDsNCi0JdmlydHVhbCBJUFdMX05vdGVOb3RpZnkqCQkJR2V0Tm90ZU5vdGlmeSgpIGNvbnN0Ow0KLQ0KLXB1YmxpYzoNCi0JSVBXTF9Ob3RlSXRlbSoJCQkJCQlSZXBseSgpOw0KLQl2b2lkCQkJCQkJCQlFbmFibGVOb3RpZnkoRlhfQk9PTCBiRW5hYmxlZCk7DQotCXZvaWQJCQkJCQkJCVNldEljb25UeXBlKEZYX0lOVDMyIG5UeXBlKTsNCi0Jdm9pZAkJCQkJCQkJU2V0T3B0aW9uc1RleHQoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNUZXh0KTsNCi0Jdm9pZAkJCQkJCQkJRW5hYmxlUmVhZChGWF9CT09MIGJFbmFibGVkKTsNCi0Jdm9pZAkJCQkJCQkJRW5hYmxlTW9kaWZ5KEZYX0JPT0wgYkVuYWJsZWQpOw0KLQ0KLQlDRlhfV2lkZVN0cmluZwkJCQkJCUdldFJlcGx5U3RyaW5nKCkgY29uc3Q7DQotCXZvaWQJCQkJCQkJCVNldFJlcGx5U3RyaW5nKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJpbmcpOw0KLQ0KLQkvLzAtbm9ybWFsIC8gMS1jYXB0aW9uIC8gMi1sZWZ0Ym90dG9tIGNvcm5lciAvIDMtcmlnaHRib3R0b20gY29ybmVyIC8gNC1jbG9zZSAvIDUtb3B0aW9ucyANCi0JRlhfSU5UMzIJCQkJCQkJTm90ZUhpdFRlc3QoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpIGNvbnN0Ow0KLQlDUERGX1JlY3QJCQkJCQkJR2V0Q2FwdGlvblJlY3QoKSBjb25zdCB7cmV0dXJuIG1fcmNDYXB0aW9uO30NCi0JSVBvcHVwX05vdGUqCQkJCQkJR2V0UG9wdXBOb3RlKCkgY29uc3Qge3JldHVybiBtX3BQb3B1cE5vdGU7fQ0KLQ0KLXB1YmxpYzoNCi0JdmlydHVhbCBGWF9CT09MCQkJCQkJT25MQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCQkJT25SQnV0dG9uVXAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZyk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJCU9uTW91c2VXaGVlbChzaG9ydCB6RGVsdGEsIGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOw0KLQ0KLXByb3RlY3RlZDoNCi0JdmlydHVhbCB2b2lkCQkJCQkJUmVQb3NDaGlsZFduZCgpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7DQotDQotCXZpcnR1YWwgdm9pZAkJCQkJCU9uTm90aWZ5KENQV0xfV25kKiBwV25kLCBGWF9EV09SRCBtc2csIEZYX0lOVFBUUiB3UGFyYW0gPSAwLCBGWF9JTlRQVFIgbFBhcmFtID0gMCk7DQotDQotCUZYX0JPT0wJCQkJCQkJCVJlc2V0U2Nyb2xsQmFyKCk7DQotCXZvaWQJCQkJCQkJCVJlUG9zTm90ZUNoaWxkcmVuKCk7DQotCUZYX0JPT0wJCQkJCQkJCVNjcm9sbEJhclNob3VsZFZpc2libGUoKTsNCi0NCi1wcml2YXRlOg0KLQlDUFdMX0xhYmVsKgkJCQkJCQltX3BBdXRob3I7DQotCUNQV0xfTm90ZV9JY29uKgkJCQkJCW1fcEljb247DQotCUNQV0xfTm90ZV9DbG9zZUJveCoJCQkJCW1fcENsb3NlQm94Ow0KLQlDUFdMX05vdGVfTEJCb3gqCQkJCQltX3BMQkJveDsNCi0JQ1BXTF9Ob3RlX1JCQm94KgkJCQkJbV9wUkJCb3g7DQotCUNQV0xfU2Nyb2xsQmFyKgkJCQkJCW1fcENvbnRlbnRzQmFyOwkNCi0JQ1BXTF9Ob3RlX09wdGlvbnMqCQkJCQltX3BPcHRpb25zOw0KLQlJUFdMX05vdGVOb3RpZnkqCQkJCQltX3BOb3RlTm90aWZ5Ow0KLQlGWF9CT09MCQkJCQkJCQltX2JSZXNpemluZzsNCi0JUFdMX1NDUk9MTF9JTkZPCQkJCQkJbV9PbGRTY3JvbGxJbmZvOw0KLQlDUERGX1JlY3QJCQkJCQkJbV9yY0NhcHRpb247DQotCUZYX0JPT0wJCQkJCQkJCW1fYkVuYWxibGVOb3RpZnk7DQotCUlQb3B1cF9Ob3RlKgkJCQkJCW1fcFBvcHVwTm90ZTsNCi0JSVBXTF9Ob3RlSGFuZGxlcioJCQkJCW1fcE5vdGVIYW5kbGVyOw0KLQlDRlhfV2lkZVN0cmluZwkJCQkJCW1fc1JlcGx5U3RyaW5nOw0KLX07DQotDQotI2VuZGlmDQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfUFdMX05PVEVfSF8KKyNkZWZpbmUgX1BXTF9OT1RFX0hfCisKK2NsYXNzIElQV0xfTm90ZU5vdGlmeTsKK2NsYXNzIElQV0xfTm90ZUhhbmRsZXI7CitjbGFzcyBJUFdMX05vdGVJdGVtOworY2xhc3MgQ1BXTF9Ob3RlSXRlbTsKK2NsYXNzIENQV0xfTm90ZTsKK2NsYXNzIENQV0xfTGFiZWw7CitjbGFzcyBDUFdMX0VkaXQ7CitjbGFzcyBDUFdMX05vdGVfSWNvbjsKK2NsYXNzIENQV0xfTm90ZV9DbG9zZUJveDsKK2NsYXNzIENQV0xfTm90ZV9MQkJveDsKK2NsYXNzIENQV0xfTm90ZV9SQkJveDsKK2NsYXNzIENQV0xfTm90ZV9FZGl0OworY2xhc3MgQ1BXTF9Ob3RlX09wdGlvbnM7CitjbGFzcyBDUFdMX05vdGVfQ29udGVudHM7CitjbGFzcyBJUG9wdXBfTm90ZTsKKworCitjbGFzcyBJUFdMX05vdGVOb3RpZnkKK3sKK3B1YmxpYzoKKwl2aXJ0dWFsIHZvaWQJCQkJCQlPbk5vdGVNb3ZlKGNvbnN0IEZYX1JFQ1QmIHJ0V2luKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCQkJT25Ob3RlU2hvdyhGWF9CT09MIGJTaG93KSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCQkJT25Ob3RlQWN0aXZhdGUoRlhfQk9PTCBiQWN0aXZlKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCQkJT25Ob3RlQ2xvc2UoKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCQkJT25JdGVtQ3JlYXRlKElQV0xfTm90ZUl0ZW0qIHBJdGVtKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCQkJT25JdGVtRGVsZXRlKElQV0xfTm90ZUl0ZW0qIHBJdGVtKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCQkJT25TZXRBdXRob3JOYW1lKElQV0xfTm90ZUl0ZW0qIHBJdGVtKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCQkJT25TZXRCa0NvbG9yKElQV0xfTm90ZUl0ZW0qIHBJdGVtKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCQkJT25TZXRDb250ZW50cyhJUFdMX05vdGVJdGVtKiBwSXRlbSkgPSAwOworCXZpcnR1YWwgdm9pZAkJCQkJCU9uU2V0RGF0ZVRpbWUoSVBXTF9Ob3RlSXRlbSogcEl0ZW0pID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJCQlPblNldFN1YmplY3ROYW1lKElQV0xfTm90ZUl0ZW0qIHBJdGVtKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCQkJT25Qb3B1cE1lbnUoRlhfSU5UMzIgeCwgRlhfSU5UMzIgeSkgPSAwOworCXZpcnR1YWwgdm9pZAkJCQkJCU9uUG9wdXBNZW51KElQV0xfTm90ZUl0ZW0qIHBJdGVtLCBGWF9JTlQzMiB4LCBGWF9JTlQzMiB5KSA9IDA7Cit9OworCitjbGFzcyBJUFdMX05vdGVIYW5kbGVyCit7CitwdWJsaWM6CisJdmlydHVhbCB2b2lkCQkJCQkJT25Ob3RlQ29sb3JDaGFuZ2VkKGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yKSA9IDA7Cit9OworCitjbGFzcyBJUFdMX05vdGVJdGVtCit7CitwdWJsaWM6CisJdmlydHVhbCB2b2lkCQkJCQkJU2V0UHJpdmF0ZURhdGEodm9pZCogcERhdGEpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJCQlTZXRCa0NvbG9yKGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCQkJU2V0U3ViamVjdE5hbWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNOYW1lKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCQkJU2V0QXV0aG9yTmFtZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc05hbWUpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJCQlTZXREYXRlVGltZShGWF9TWVNURU1USU1FIHRpbWUpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJCQlTZXRDb250ZW50cyhjb25zdCBDRlhfV2lkZVN0cmluZyYgc0NvbnRlbnRzKSA9IDA7CisKKwl2aXJ0dWFsIElQV0xfTm90ZUl0ZW0qCQkJCUNyZWF0ZVN1Ykl0ZW0oKSA9IDA7CisJdmlydHVhbCBGWF9JTlQzMgkJCQkJQ291bnRTdWJJdGVtcygpIGNvbnN0ID0gMDsKKwl2aXJ0dWFsIElQV0xfTm90ZUl0ZW0qCQkJCUdldFN1Ykl0ZW1zKEZYX0lOVDMyIGluZGV4KSBjb25zdCA9IDA7CisJdmlydHVhbCB2b2lkCQkJCQkJRGVsZXRlU3ViSXRlbShJUFdMX05vdGVJdGVtKiBwTm90ZUl0ZW0pID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJCQlTZXRGb2N1cygpID0gMDsKKwkKKwl2aXJ0dWFsIElQV0xfTm90ZUl0ZW0qCQkJCUdldFBhcmVudEl0ZW0oKSBjb25zdCA9IDA7CisJdmlydHVhbCB2b2lkKgkJCQkJCUdldFByaXZhdGVEYXRhKCkgY29uc3QgPSAwOworCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCQkJR2V0QXV0aG9yTmFtZSgpIGNvbnN0ID0gMDsKKwl2aXJ0dWFsIENQV0xfQ29sb3IJCQkJCUdldEJrQ29sb3IoKSBjb25zdCA9IDA7CisJdmlydHVhbCBDRlhfV2lkZVN0cmluZwkJCQlHZXRDb250ZW50cygpIGNvbnN0ID0gMDsKKwl2aXJ0dWFsIEZYX1NZU1RFTVRJTUUJCQkJR2V0RGF0ZVRpbWUoKSBjb25zdCA9IDA7CisJdmlydHVhbCBDRlhfV2lkZVN0cmluZwkJCQlHZXRTdWJqZWN0TmFtZSgpIGNvbnN0ID0gMDsKKworCXZpcnR1YWwgQ1BXTF9FZGl0KgkJCQkJR2V0RWRpdCgpIGNvbnN0ID0gMDsKK307CisKK2NsYXNzIFBXTF9DTEFTUyBDUFdMX05vdGVfSWNvbiA6IHB1YmxpYyBDUFdMX1duZAoreworcHVibGljOgorCUNQV0xfTm90ZV9JY29uKCk7CisJdmlydHVhbCB+Q1BXTF9Ob3RlX0ljb24oKTsKKworCXZvaWQJCQkJCQkJCVNldEljb25UeXBlKEZYX0lOVDMyIG5UeXBlKTsKKworcHVibGljOgorCitwcm90ZWN0ZWQ6CisJdmlydHVhbCB2b2lkCQkJCQkJRHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpOworCitwcml2YXRlOgorCUZYX0lOVDMyCQkJCQkJCW1fblR5cGU7Cit9OworCitjbGFzcyBDUFdMX05vdGVfQ2xvc2VCb3ggOiBwdWJsaWMgQ1BXTF9CdXR0b24KK3sKK3B1YmxpYzoKKwlDUFdMX05vdGVfQ2xvc2VCb3goKTsKKwl2aXJ0dWFsIH5DUFdMX05vdGVfQ2xvc2VCb3goKTsKKworcHJvdGVjdGVkOgorCXZpcnR1YWwgdm9pZAkJCQkJCURyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQlPbkxCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOworCXZpcnR1YWwgRlhfQk9PTAkJCQkJCU9uTEJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOworCitwcml2YXRlOgorCUZYX0JPT0wJCQkJCQkJCW1fYk1vdXNlRG93bjsKK307CisKK2NsYXNzIENQV0xfTm90ZV9MQkJveCA6IHB1YmxpYyBDUFdMX1duZAoreworcHVibGljOgorCUNQV0xfTm90ZV9MQkJveCgpOworCXZpcnR1YWwgfkNQV0xfTm90ZV9MQkJveCgpOworCitwcm90ZWN0ZWQ6CisJdmlydHVhbCB2b2lkCQkJCQkJRHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpOworfTsKKworY2xhc3MgQ1BXTF9Ob3RlX1JCQm94IDogcHVibGljIENQV0xfV25kCit7CitwdWJsaWM6CisJQ1BXTF9Ob3RlX1JCQm94KCk7CisJdmlydHVhbCB+Q1BXTF9Ob3RlX1JCQm94KCk7CisKK3Byb3RlY3RlZDoKKwl2aXJ0dWFsIHZvaWQJCQkJCQlEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSk7Cit9OworCitjbGFzcyBDUFdMX05vdGVfRWRpdCA6IHB1YmxpYyBDUFdMX0VkaXQKK3sKK3B1YmxpYzoKKwlDUFdMX05vdGVfRWRpdCgpOworCXZpcnR1YWwgfkNQV0xfTm90ZV9FZGl0KCk7CisKKwl2b2lkCQkJCQkJCQlFbmFibGVOb3RpZnkoRlhfQk9PTCBiRW5hYmxlKSB7bV9iRW5hYmxlTm90aWZ5ID0gYkVuYWJsZTt9CisJdmlydHVhbCBGWF9GTE9BVAkJCQkJR2V0SXRlbUhlaWdodChGWF9GTE9BVCBmTGltaXRXaWR0aCk7CisJRlhfRkxPQVQJCQkJCQkJR2V0SXRlbUxlZnRNYXJnaW4oKTsKKwlGWF9GTE9BVAkJCQkJCQlHZXRJdGVtUmlnaHRNYXJnaW4oKTsKKworCXZpcnR1YWwgdm9pZAkJCQkJCVNldFRleHQoRlhfTFBDV1NUUiBjc1RleHQpOworCitwcm90ZWN0ZWQ6CisJdmlydHVhbCB2b2lkCQkJCQkJT25Ob3RpZnkoQ1BXTF9XbmQqIHBXbmQsIEZYX0RXT1JEIG1zZywgRlhfSU5UUFRSIHdQYXJhbSA9IDAsIEZYX0lOVFBUUiBsUGFyYW0gPSAwKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCQlSZVBvc0NoaWxkV25kKCk7CisJdmlydHVhbCB2b2lkCQkJCQkJT25TZXRGb2N1cygpOworCXZpcnR1YWwgdm9pZAkJCQkJCU9uS2lsbEZvY3VzKCk7CQorCitwcml2YXRlOgorCUZYX0JPT0wJCQkJCQkJCW1fYkVuYWJsZU5vdGlmeTsKKwlGWF9GTE9BVAkJCQkJCQltX2ZPbGRJdGVtSGVpZ2h0OworCUZYX0JPT0wJCQkJCQkJCW1fYlNpemVDaGFuZ2VkOworCUZYX0ZMT0FUCQkJCQkJCW1fZk9sZE1pbjsKKwlGWF9GTE9BVAkJCQkJCQltX2ZPbGRNYXg7Cit9OworCitjbGFzcyBDUFdMX05vdGVfT3B0aW9ucyA6IHB1YmxpYyBDUFdMX1duZAoreworcHVibGljOgorCUNQV0xfTm90ZV9PcHRpb25zKCk7CisJdmlydHVhbCB+Q1BXTF9Ob3RlX09wdGlvbnMoKTsKKworCUNQREZfUmVjdAkJCQkJCQlHZXRDb250ZW50UmVjdCgpIGNvbnN0OworCXZpcnR1YWwgdm9pZAkJCQkJCVNldFRleHRDb2xvcihjb25zdCBDUFdMX0NvbG9yICYgY29sb3IpOworCXZvaWQJCQkJCQkJCVNldFRleHQoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNUZXh0KTsKKworcHJvdGVjdGVkOgorCXZpcnR1YWwgdm9pZAkJCQkJCVJlUG9zQ2hpbGRXbmQoKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCQlDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7CisJdmlydHVhbCB2b2lkCQkJCQkJRHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpOworCitwcml2YXRlOgorCUNQV0xfTGFiZWwqCQkJCQkJCW1fcFRleHQ7Cit9OworCitjbGFzcyBDUFdMX05vdGVfQ29udGVudHMgOiBwdWJsaWMgQ1BXTF9MaXN0Q3RybAoreworcHVibGljOgorCUNQV0xfTm90ZV9Db250ZW50cygpOworCXZpcnR1YWwgfkNQV0xfTm90ZV9Db250ZW50cygpOworCisJdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJCQlHZXRDbGFzc05hbWUoKSBjb25zdDsKKwl2aXJ0dWFsIHZvaWQJCQkJCQlPbk5vdGlmeShDUFdMX1duZCogcFduZCwgRlhfRFdPUkQgbXNnLCBGWF9JTlRQVFIgd1BhcmFtID0gMCwgRlhfSU5UUFRSIGxQYXJhbSA9IDApOworCXZpcnR1YWwgRlhfQk9PTAkJCQkJCU9uTEJ1dHRvbkRvd24oY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsKKworCXZvaWQJCQkJCQkJCVNldEVkaXRGb2N1cyhGWF9CT09MIGJMYXN0KTsKKwlDUFdMX0VkaXQqCQkJCQkJCUdldEVkaXQoKSBjb25zdDsKKworcHVibGljOgorCXZvaWQJCQkJCQkJCVNldFRleHQoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNUZXh0KTsKKwlDRlhfV2lkZVN0cmluZwkJCQkJCUdldFRleHQoKSBjb25zdDsKKworCUNQV0xfTm90ZUl0ZW0qCQkJCQkJQ3JlYXRlU3ViSXRlbSgpOworCXZvaWQJCQkJCQkJCURlbGV0ZVN1Ykl0ZW0oSVBXTF9Ob3RlSXRlbSogcE5vdGVJdGVtKTsKKwlGWF9JTlQzMgkJCQkJCQlDb3VudFN1Ykl0ZW1zKCkgY29uc3Q7CisJSVBXTF9Ob3RlSXRlbSoJCQkJCQlHZXRTdWJJdGVtcyhGWF9JTlQzMiBpbmRleCkgY29uc3Q7CisKKwl2aXJ0dWFsIElQV0xfTm90ZUl0ZW0qCQkJCUdldEhpdE5vdGVJdGVtKGNvbnN0IENQREZfUG9pbnQmIHBvaW50KTsKKwl2b2lkCQkJCQkJCQlFbmFibGVSZWFkKEZYX0JPT0wgYkVuYWJsZWQpOworCXZvaWQJCQkJCQkJCUVuYWJsZU1vZGlmeShGWF9CT09MIGJFbmFibGVkKTsKKworcHJvdGVjdGVkOgorCXZpcnR1YWwgdm9pZAkJCQkJCUNyZWF0ZUNoaWxkV25kKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKTsKKworcHJpdmF0ZToKKwlDUFdMX05vdGVfRWRpdCoJCQkJCQltX3BFZGl0OworfTsKKworY2xhc3MgUFdMX0NMQVNTIENQV0xfTm90ZUl0ZW0gOiBwdWJsaWMgQ1BXTF9XbmQsIHB1YmxpYyBJUFdMX05vdGVJdGVtIAoreworcHVibGljOgorCUNQV0xfTm90ZUl0ZW0oKTsKKwl2aXJ0dWFsIH5DUFdMX05vdGVJdGVtKCk7CisKK3B1YmxpYzoKKwl2aXJ0dWFsIHZvaWQJCQkJCQlTZXRQcml2YXRlRGF0YSh2b2lkKiBwRGF0YSk7CisJdmlydHVhbCB2b2lkCQkJCQkJU2V0QmtDb2xvcihjb25zdCBDUFdMX0NvbG9yJiBjb2xvcik7CisJdmlydHVhbCB2b2lkCQkJCQkJU2V0U3ViamVjdE5hbWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNOYW1lKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCQlTZXRBdXRob3JOYW1lKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzTmFtZSk7CisJdmlydHVhbCB2b2lkCQkJCQkJU2V0RGF0ZVRpbWUoRlhfU1lTVEVNVElNRSB0aW1lKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCQlTZXRDb250ZW50cyhjb25zdCBDRlhfV2lkZVN0cmluZyYgc0NvbnRlbnRzKTsKKworCXZpcnR1YWwgSVBXTF9Ob3RlSXRlbSoJCQkJQ3JlYXRlU3ViSXRlbSgpOworCXZpcnR1YWwgRlhfSU5UMzIJCQkJCUNvdW50U3ViSXRlbXMoKSBjb25zdDsKKwl2aXJ0dWFsIElQV0xfTm90ZUl0ZW0qCQkJCUdldFN1Ykl0ZW1zKEZYX0lOVDMyIGluZGV4KSBjb25zdDsKKwl2aXJ0dWFsIHZvaWQJCQkJCQlEZWxldGVTdWJJdGVtKElQV0xfTm90ZUl0ZW0qIHBOb3RlSXRlbSk7CisJdmlydHVhbCB2b2lkCQkJCQkJU2V0Rm9jdXMoKXtTZXROb3RlRm9jdXMoRkFMU0UpO30KKworCXZpcnR1YWwgSVBXTF9Ob3RlSXRlbSoJCQkJR2V0UGFyZW50SXRlbSgpIGNvbnN0OworCXZpcnR1YWwgdm9pZCoJCQkJCQlHZXRQcml2YXRlRGF0YSgpIGNvbnN0OworCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCQkJR2V0QXV0aG9yTmFtZSgpIGNvbnN0OworCXZpcnR1YWwgQ1BXTF9Db2xvcgkJCQkJR2V0QmtDb2xvcigpIGNvbnN0OworCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCQkJR2V0Q29udGVudHMoKSBjb25zdDsKKwl2aXJ0dWFsIEZYX1NZU1RFTVRJTUUJCQkJR2V0RGF0ZVRpbWUoKSBjb25zdDsKKwl2aXJ0dWFsIENGWF9XaWRlU3RyaW5nCQkJCUdldFN1YmplY3ROYW1lKCkgY29uc3Q7CisJdmlydHVhbCBGWF9CT09MCQkJCQkJSXNUb3BJdGVtKCkgY29uc3QgeyByZXR1cm4gRkFMU0U7fQorCXZpcnR1YWwgQ1BXTF9FZGl0KgkJCQkJR2V0RWRpdCgpIGNvbnN0OworCitwdWJsaWM6CisJdmlydHVhbCBGWF9CT09MCQkJCQkJT25MQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50JiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOworCXZpcnR1YWwgRlhfQk9PTAkJCQkJCU9uUkJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOworCXZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCQkJR2V0Q2xhc3NOYW1lKCkgY29uc3Q7CisJdmlydHVhbCBJUFdMX05vdGVJdGVtKgkJCQlHZXRIaXROb3RlSXRlbShjb25zdCBDUERGX1BvaW50JiBwb2ludCk7CisJdmlydHVhbCBJUFdMX05vdGVJdGVtKgkJCQlHZXRGb2N1c2VkTm90ZUl0ZW0oKSBjb25zdDsKKworCXZpcnR1YWwgdm9pZAkJCQkJCVJlc2V0U3ViamVjdE5hbWUoRlhfSU5UMzIgbkl0ZW1JbmRleCk7CisJdm9pZAkJCQkJCQkJRW5hYmxlUmVhZChGWF9CT09MIGJFbmFibGVkKTsKKwl2b2lkCQkJCQkJCQlFbmFibGVNb2RpZnkoRlhfQk9PTCBiRW5hYmxlZCk7CisKK3Byb3RlY3RlZDoKKwl2aXJ0dWFsIHZvaWQJCQkJCQlSZVBvc0NoaWxkV25kKCk7CisJdmlydHVhbCB2b2lkCQkJCQkJQ3JlYXRlQ2hpbGRXbmQoY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApOworCisJdmlydHVhbCB2b2lkCQkJCQkJT25Ob3RpZnkoQ1BXTF9XbmQqIHBXbmQsIEZYX0RXT1JEIG1zZywgRlhfSU5UUFRSIHdQYXJhbSA9IDAsIEZYX0lOVFBUUiBsUGFyYW0gPSAwKTsKKworcHVibGljOgorCXZpcnR1YWwgRlhfRkxPQVQJCQkJCUdldEl0ZW1IZWlnaHQoRlhfRkxPQVQgZkxpbWl0V2lkdGgpOworCXZpcnR1YWwgRlhfRkxPQVQJCQkJCUdldEl0ZW1MZWZ0TWFyZ2luKCk7CisJdmlydHVhbCBGWF9GTE9BVAkJCQkJR2V0SXRlbVJpZ2h0TWFyZ2luKCk7CisJQ1BXTF9Ob3RlSXRlbSoJCQkJCQlDcmVhdGVOb3RlSXRlbSgpOworCUNQV0xfTm90ZUl0ZW0qCQkJCQkJR2V0UGFyZW50Tm90ZUl0ZW0oKSBjb25zdDsKKworCXZvaWQJCQkJCQkJCVNldE5vdGVGb2N1cyhGWF9CT09MIGJMYXN0KTsKKwl2b2lkCQkJCQkJCQlPbkNvbnRlbnRzVmFsaWRhdGUoKTsKKwkKKwl2b2lkCQkJCQkJCQlPbkNyZWF0ZU5vdGVJdGVtKCk7CisKK3Byb3RlY3RlZDoKKwl2b2lkCQkJCQkJCQlQb3B1cE5vdGVJdGVtTWVudShjb25zdCBDUERGX1BvaW50JiBwb2ludCk7CisKKwl2aXJ0dWFsIGNvbnN0IENQV0xfTm90ZSoJCQlHZXROb3RlKCkgY29uc3Q7CisJdmlydHVhbCBJUFdMX05vdGVOb3RpZnkqCQkJR2V0Tm90ZU5vdGlmeSgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisJQ1BXTF9MYWJlbCoJCQkJCQkJbV9wU3ViamVjdDsKKwlDUFdMX0xhYmVsKgkJCQkJCQltX3BEYXRlVGltZTsKKwlDUFdMX05vdGVfQ29udGVudHMqCQkJCQltX3BDb250ZW50czsKKworcHJpdmF0ZToKKwl2b2lkKgkJCQkJCQkJbV9wUHJpdmF0ZURhdGE7CisJRlhfU1lTVEVNVElNRQkJCQkJCW1fZHROb3RlOworCUNGWF9XaWRlU3RyaW5nCQkJCQkJbV9zQXV0aG9yOworCisJRlhfRkxPQVQJCQkJCQkJbV9mT2xkSXRlbUhlaWdodDsKKwlGWF9CT09MCQkJCQkJCQltX2JTaXplQ2hhbmdlZDsKKwlGWF9CT09MCQkJCQkJCQltX2JBbGxvd01vZGlmeTsKK307CisKK2NsYXNzIFBXTF9DTEFTUyBDUFdMX05vdGUgOiBwdWJsaWMgQ1BXTF9Ob3RlSXRlbQoreworcHVibGljOgorCUNQV0xfTm90ZShJUG9wdXBfTm90ZSogcFBvcHVwTm90ZSwgSVBXTF9Ob3RlTm90aWZ5KiBwTm90ZU5vdGlmeSwgSVBXTF9Ob3RlSGFuZGxlciogcE5vdGVIYW5kbGVyKTsKKwl2aXJ0dWFsIH5DUFdMX05vdGUoKTsKKworcHVibGljOgorCXZpcnR1YWwgdm9pZAkJCQkJCVNldFN1YmplY3ROYW1lKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzTmFtZSk7CisJdmlydHVhbCB2b2lkCQkJCQkJU2V0QXV0aG9yTmFtZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc05hbWUpOworCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCQkJR2V0QXV0aG9yTmFtZSgpIGNvbnN0OworCXZpcnR1YWwgdm9pZAkJCQkJCVNldEJrQ29sb3IoY29uc3QgQ1BXTF9Db2xvciYgY29sb3IpOworCXZpcnR1YWwgdm9pZAkJCQkJCVJlc2V0U3ViamVjdE5hbWUoRlhfSU5UMzIgbkl0ZW1JbmRleCl7fQorCXZpcnR1YWwgRlhfQk9PTAkJCQkJCUlzVG9wSXRlbSgpIGNvbnN0IHtyZXR1cm4gVFJVRTt9CisJdmlydHVhbCBjb25zdCBDUFdMX05vdGUqCQkJR2V0Tm90ZSgpIGNvbnN0OworCXZpcnR1YWwgSVBXTF9Ob3RlTm90aWZ5KgkJCUdldE5vdGVOb3RpZnkoKSBjb25zdDsKKworcHVibGljOgorCUlQV0xfTm90ZUl0ZW0qCQkJCQkJUmVwbHkoKTsKKwl2b2lkCQkJCQkJCQlFbmFibGVOb3RpZnkoRlhfQk9PTCBiRW5hYmxlZCk7CisJdm9pZAkJCQkJCQkJU2V0SWNvblR5cGUoRlhfSU5UMzIgblR5cGUpOworCXZvaWQJCQkJCQkJCVNldE9wdGlvbnNUZXh0KGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzVGV4dCk7CisJdm9pZAkJCQkJCQkJRW5hYmxlUmVhZChGWF9CT09MIGJFbmFibGVkKTsKKwl2b2lkCQkJCQkJCQlFbmFibGVNb2RpZnkoRlhfQk9PTCBiRW5hYmxlZCk7CisKKwlDRlhfV2lkZVN0cmluZwkJCQkJCUdldFJlcGx5U3RyaW5nKCkgY29uc3Q7CisJdm9pZAkJCQkJCQkJU2V0UmVwbHlTdHJpbmcoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cmluZyk7CisKKwkvLzAtbm9ybWFsIC8gMS1jYXB0aW9uIC8gMi1sZWZ0Ym90dG9tIGNvcm5lciAvIDMtcmlnaHRib3R0b20gY29ybmVyIC8gNC1jbG9zZSAvIDUtb3B0aW9ucyAKKwlGWF9JTlQzMgkJCQkJCQlOb3RlSGl0VGVzdChjb25zdCBDUERGX1BvaW50JiBwb2ludCkgY29uc3Q7CisJQ1BERl9SZWN0CQkJCQkJCUdldENhcHRpb25SZWN0KCkgY29uc3Qge3JldHVybiBtX3JjQ2FwdGlvbjt9CisJSVBvcHVwX05vdGUqCQkJCQkJR2V0UG9wdXBOb3RlKCkgY29uc3Qge3JldHVybiBtX3BQb3B1cE5vdGU7fQorCitwdWJsaWM6CisJdmlydHVhbCBGWF9CT09MCQkJCQkJT25MQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQlPblJCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCQlPbk1vdXNlV2hlZWwoc2hvcnQgekRlbHRhLCBjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsKKworcHJvdGVjdGVkOgorCXZpcnR1YWwgdm9pZAkJCQkJCVJlUG9zQ2hpbGRXbmQoKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCQlDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7CisKKwl2aXJ0dWFsIHZvaWQJCQkJCQlPbk5vdGlmeShDUFdMX1duZCogcFduZCwgRlhfRFdPUkQgbXNnLCBGWF9JTlRQVFIgd1BhcmFtID0gMCwgRlhfSU5UUFRSIGxQYXJhbSA9IDApOworCisJRlhfQk9PTAkJCQkJCQkJUmVzZXRTY3JvbGxCYXIoKTsKKwl2b2lkCQkJCQkJCQlSZVBvc05vdGVDaGlsZHJlbigpOworCUZYX0JPT0wJCQkJCQkJCVNjcm9sbEJhclNob3VsZFZpc2libGUoKTsKKworcHJpdmF0ZToKKwlDUFdMX0xhYmVsKgkJCQkJCQltX3BBdXRob3I7CisJQ1BXTF9Ob3RlX0ljb24qCQkJCQkJbV9wSWNvbjsKKwlDUFdMX05vdGVfQ2xvc2VCb3gqCQkJCQltX3BDbG9zZUJveDsKKwlDUFdMX05vdGVfTEJCb3gqCQkJCQltX3BMQkJveDsKKwlDUFdMX05vdGVfUkJCb3gqCQkJCQltX3BSQkJveDsKKwlDUFdMX1Njcm9sbEJhcioJCQkJCQltX3BDb250ZW50c0JhcjsJCisJQ1BXTF9Ob3RlX09wdGlvbnMqCQkJCQltX3BPcHRpb25zOworCUlQV0xfTm90ZU5vdGlmeSoJCQkJCW1fcE5vdGVOb3RpZnk7CisJRlhfQk9PTAkJCQkJCQkJbV9iUmVzaXppbmc7CisJUFdMX1NDUk9MTF9JTkZPCQkJCQkJbV9PbGRTY3JvbGxJbmZvOworCUNQREZfUmVjdAkJCQkJCQltX3JjQ2FwdGlvbjsKKwlGWF9CT09MCQkJCQkJCQltX2JFbmFsYmxlTm90aWZ5OworCUlQb3B1cF9Ob3RlKgkJCQkJCW1fcFBvcHVwTm90ZTsKKwlJUFdMX05vdGVIYW5kbGVyKgkJCQkJbV9wTm90ZUhhbmRsZXI7CisJQ0ZYX1dpZGVTdHJpbmcJCQkJCQltX3NSZXBseVN0cmluZzsKK307CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BXTF9TY3JvbGxCYXIuaCBiL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1Njcm9sbEJhci5oCmluZGV4IDMxOTZiMjIuLmQyNTY1NDIgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1Njcm9sbEJhci5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1Njcm9sbEJhci5oCkBAIC0xLDE2NiArMSwxNjYgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX1BXTF9TQ1JPTExCQVJfSF8NCi0jZGVmaW5lIF9QV0xfU0NST0xMQkFSX0hfDQotDQotY2xhc3MgQ1BXTF9TQkJ1dHRvbjsNCi1jbGFzcyBDUFdMX1Njcm9sbEJhcjsNCi0NCi1zdHJ1Y3QgUFdMX1NDUk9MTF9JTkZPDQotew0KLXB1YmxpYzoNCi0JUFdMX1NDUk9MTF9JTkZPKCkgOiBmQ29udGVudE1pbigwLjBmKSwgZkNvbnRlbnRNYXgoMC4wZiksIGZQbGF0ZVdpZHRoKDAuMGYpLCBmQmlnU3RlcCgwLjBmKSwgZlNtYWxsU3RlcCgwLjBmKQ0KLQl7DQotCX0NCi0JRlhfRkxPQVQJCQkJCWZDb250ZW50TWluOw0KLQlGWF9GTE9BVAkJCQkJZkNvbnRlbnRNYXg7CQ0KLQlGWF9GTE9BVAkJCQkJZlBsYXRlV2lkdGg7CQ0KLQlGWF9GTE9BVAkJCQkJZkJpZ1N0ZXA7DQotCUZYX0ZMT0FUCQkJCQlmU21hbGxTdGVwOw0KLX07DQotDQotZW51bSBQV0xfU0NST0xMQkFSX1RZUEUNCi17DQotCVNCVF9IU0NST0xMLA0KLQlTQlRfVlNDUk9MTA0KLX07DQotDQotZW51bSBQV0xfU0JCVVRUT05fVFlQRQ0KLXsNCi0JUFNCVF9NSU4sDQotCVBTQlRfTUFYLA0KLQlQU0JUX1BPUw0KLX07DQotDQotY2xhc3MgQ1BXTF9TQkJ1dHRvbiA6IHB1YmxpYyBDUFdMX1duZCAgDQotew0KLXB1YmxpYzoNCi0JQ1BXTF9TQkJ1dHRvbihQV0xfU0NST0xMQkFSX1RZUEUgZVNjcm9sbEJhclR5cGUsUFdMX1NCQlVUVE9OX1RZUEUgZUJ1dHRvblR5cGUpOw0KLQl2aXJ0dWFsIH5DUFdMX1NCQnV0dG9uKCk7DQotDQotcHVibGljOg0KLQl2aXJ0dWFsIENGWF9CeXRlU3RyaW5nCQlHZXRDbGFzc05hbWUoKSBjb25zdDsNCi0JdmlydHVhbCB2b2lkCQkJCU9uQ3JlYXRlKFBXTF9DUkVBVEVQQVJBTSAmIGNwKTsNCi0JdmlydHVhbCB2b2lkCQkJCUdldFRoaXNBcHBlYXJhbmNlU3RyZWFtKENGWF9CeXRlVGV4dEJ1ZiAmIHNBcHBTdHJlYW0pOw0KLQl2aXJ0dWFsIHZvaWQJCQkJRHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25MQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCU9uTEJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25Nb3VzZU1vdmUoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZyk7DQotDQotcHJvdGVjdGVkOg0KLQlQV0xfU0NST0xMQkFSX1RZUEUJCQltX2VTY3JvbGxCYXJUeXBlOw0KLQlQV0xfU0JCVVRUT05fVFlQRQkJCW1fZVNCQnV0dG9uVHlwZTsNCi0NCi0JRlhfQk9PTAkJCQkJCW1fYk1vdXNlRG93bjsNCi19Ow0KLQ0KLXN0cnVjdCBQV0xfRkxPQVRSQU5HRQ0KLXsNCi1wdWJsaWM6DQotCVBXTF9GTE9BVFJBTkdFKCk7DQotCVBXTF9GTE9BVFJBTkdFKEZYX0ZMT0FUIG1pbixGWF9GTE9BVCBtYXgpOw0KLQl2b2lkIERlZmF1bHQoKTsNCi0Jdm9pZCBTZXQoRlhfRkxPQVQgbWluLEZYX0ZMT0FUIG1heCk7DQotCUZYX0JPT0wJSW4oRlhfRkxPQVQgeCkgY29uc3Q7DQotCUZYX0ZMT0FUIEdldFdpZHRoKCkgY29uc3Q7DQotDQotCUZYX0ZMT0FUIGZNaW4sZk1heDsNCi19Ow0KLQ0KLXN0cnVjdCBQV0xfU0NST0xMX1BSSVZBVEVEQVRBDQotew0KLXB1YmxpYzoNCi0JUFdMX1NDUk9MTF9QUklWQVRFREFUQSgpOw0KLQ0KLQl2b2lkIERlZmF1bHQoKTsNCi0Jdm9pZCBTZXRTY3JvbGxSYW5nZShGWF9GTE9BVCBtaW4sRlhfRkxPQVQgbWF4KTsNCi0Jdm9pZCBTZXRDbGllbnRXaWR0aChGWF9GTE9BVCB3aWR0aCk7DQotCXZvaWQgU2V0U21hbGxTdGVwKEZYX0ZMT0FUIHN0ZXApOw0KLQl2b2lkIFNldEJpZ1N0ZXAoRlhfRkxPQVQgc3RlcCk7DQotCUZYX0JPT0wgU2V0UG9zKEZYX0ZMT0FUIHBvcyk7DQotDQotCXZvaWQgQWRkU21hbGwoKTsNCi0Jdm9pZCBTdWJTbWFsbCgpOw0KLQl2b2lkIEFkZEJpZygpOw0KLQl2b2lkIFN1YkJpZygpOw0KLQ0KLQlQV0xfRkxPQVRSQU5HRQkJCQlTY3JvbGxSYW5nZTsNCi0JRlhfRkxPQVQJCQkJCWZDbGllbnRXaWR0aDsNCi0JRlhfRkxPQVQJCQkJCWZTY3JvbGxQb3M7DQotCUZYX0ZMT0FUCQkJCQlmQmlnU3RlcDsNCi0JRlhfRkxPQVQJCQkJCWZTbWFsbFN0ZXA7DQotfTsNCi0NCi1jbGFzcyBDUFdMX1Njcm9sbEJhciA6IHB1YmxpYyBDUFdMX1duZCAgDQotew0KLXB1YmxpYzoNCi0JQ1BXTF9TY3JvbGxCYXIoUFdMX1NDUk9MTEJBUl9UWVBFIHNiVHlwZSA9IFNCVF9IU0NST0xMKTsNCi0JdmlydHVhbCB+Q1BXTF9TY3JvbGxCYXIoKTsNCi0NCi1wdWJsaWM6DQotCXZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCUdldENsYXNzTmFtZSgpIGNvbnN0Ow0KLQl2aXJ0dWFsIHZvaWQJCQkJT25DcmVhdGUoUFdMX0NSRUFURVBBUkFNICYgY3ApOw0KLQl2aXJ0dWFsIHZvaWQJCQkJUmVQb3NDaGlsZFduZCgpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJR2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oQ0ZYX0J5dGVUZXh0QnVmICYgc0FwcFN0cmVhbSk7DQotCXZpcnR1YWwgdm9pZAkJCQlEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSk7DQotDQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkxCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25MQnV0dG9uVXAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZyk7DQotCXZpcnR1YWwgdm9pZAkJCQlPbk5vdGlmeShDUFdMX1duZCogcFduZCwgRlhfRFdPUkQgbXNnLCBGWF9JTlRQVFIgd1BhcmFtID0gMCwgRlhfSU5UUFRSIGxQYXJhbSA9IDApOw0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJQ3JlYXRlQ2hpbGRXbmQoY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApOw0KLQkNCi0JRlhfRkxPQVQJCQkJCUdldFNjcm9sbEJhcldpZHRoKCkgY29uc3Q7CQ0KLQlQV0xfU0NST0xMQkFSX1RZUEUJCQlHZXRTY3JvbGxCYXJUeXBlKCkgY29uc3Qge3JldHVybiBtX3NiVHlwZTt9Ow0KLQ0KLQl2b2lkCQkJCQkJU2V0Tm90aWZ5Rm9yZXZlcihGWF9CT09MIGJGb3JldmVyKSB7bV9iTm90aWZ5Rm9yZXZlciA9IGJGb3JldmVyO30NCi0NCi1wcm90ZWN0ZWQ6CQkJDQotCXZvaWQJCQkJCQlTZXRTY3JvbGxSYW5nZShGWF9GTE9BVCBmTWluLEZYX0ZMT0FUIGZNYXgsRlhfRkxPQVQgZkNsaWVudFdpZHRoKTsNCi0Jdm9pZAkJCQkJCVNldFNjcm9sbFBvcyhGWF9GTE9BVCBmUG9zKTsNCi0Jdm9pZAkJCQkJCU1vdmVQb3NCdXR0b24oRlhfQk9PTCBiUmVmcmVzaCk7DQotCXZvaWQJCQkJCQlTZXRTY3JvbGxTdGVwKEZYX0ZMT0FUIGZCaWdTdGVwLEZYX0ZMT0FUIGZTbWFsbFN0ZXApOw0KLQl2b2lkCQkJCQkJTm90aWZ5U2Nyb2xsV2luZG93KCk7DQotCUNQREZfUmVjdAkJCQkJR2V0U2Nyb2xsQXJlYSgpIGNvbnN0Ow0KLQ0KLXByaXZhdGU6DQotCXZvaWQJCQkJCQlDcmVhdGVCdXR0b25zKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKTsNCi0NCi0Jdm9pZAkJCQkJCU9uTWluQnV0dG9uTEJEb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCk7DQotCXZvaWQJCQkJCQlPbk1pbkJ1dHRvbkxCVXAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KTsNCi0Jdm9pZAkJCQkJCU9uTWluQnV0dG9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCk7DQotDQotCXZvaWQJCQkJCQlPbk1heEJ1dHRvbkxCRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpOw0KLQl2b2lkCQkJCQkJT25NYXhCdXR0b25MQlVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCk7DQotCXZvaWQJCQkJCQlPbk1heEJ1dHRvbk1vdXNlTW92ZShjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpOw0KLQ0KLQl2b2lkCQkJCQkJT25Qb3NCdXR0b25MQkRvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KTsNCi0Jdm9pZAkJCQkJCU9uUG9zQnV0dG9uTEJVcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpOw0KLQl2b2lkCQkJCQkJT25Qb3NCdXR0b25Nb3VzZU1vdmUoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KTsNCi0NCi0JRlhfRkxPQVQJCQkJCVRydWVUb0ZhY2UoRlhfRkxPQVQpOw0KLQlGWF9GTE9BVAkJCQkJRmFjZVRvVHJ1ZShGWF9GTE9BVCk7DQotDQotCXZpcnR1YWwJdm9pZAkJCQlUaW1lclByb2MoKTsNCi0NCi1wcml2YXRlOg0KLQlQV0xfU0NST0xMQkFSX1RZUEUJCQltX3NiVHlwZTsNCi0JUFdMX1NDUk9MTF9JTkZPCQkJCW1fT3JpZ2luSW5mbzsNCi0JQ1BXTF9TQkJ1dHRvbioJCQkJbV9wTWluQnV0dG9uOw0KLQlDUFdMX1NCQnV0dG9uKgkJCQltX3BNYXhCdXR0b247DQotCUNQV0xfU0JCdXR0b24qCQkJCW1fcFBvc0J1dHRvbjsNCi0JUFdMX1NDUk9MTF9QUklWQVRFREFUQQkJbV9zRGF0YTsNCi0JRlhfQk9PTAkJCQkJCW1fYk1vdXNlRG93bjsJDQotCUZYX0JPT0wJCQkJCQltX2JNaW5Pck1heDsNCi0JRlhfQk9PTAkJCQkJCW1fYk5vdGlmeUZvcmV2ZXI7DQotCUZYX0ZMT0FUCQkJCQltX25PbGRQb3M7DQotCUZYX0ZMT0FUCQkJCQltX2ZPbGRQb3NCdXR0b247DQotfTsNCi0NCi0jZW5kaWYgLy8gIWRlZmluZWQoQUZYX1BXTF9TQ1JPTExCQVJfSF9fRENGRUMwODJfMjY1MV80OEE0X0I4RjNfNjNGMUIzQ0M1RTEwX19JTkNMVURFRF8pDQotDQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfUFdMX1NDUk9MTEJBUl9IXworI2RlZmluZSBfUFdMX1NDUk9MTEJBUl9IXworCitjbGFzcyBDUFdMX1NCQnV0dG9uOworY2xhc3MgQ1BXTF9TY3JvbGxCYXI7CisKK3N0cnVjdCBQV0xfU0NST0xMX0lORk8KK3sKK3B1YmxpYzoKKwlQV0xfU0NST0xMX0lORk8oKSA6IGZDb250ZW50TWluKDAuMGYpLCBmQ29udGVudE1heCgwLjBmKSwgZlBsYXRlV2lkdGgoMC4wZiksIGZCaWdTdGVwKDAuMGYpLCBmU21hbGxTdGVwKDAuMGYpCisJeworCX0KKwlGWF9GTE9BVAkJCQkJZkNvbnRlbnRNaW47CisJRlhfRkxPQVQJCQkJCWZDb250ZW50TWF4OwkKKwlGWF9GTE9BVAkJCQkJZlBsYXRlV2lkdGg7CQorCUZYX0ZMT0FUCQkJCQlmQmlnU3RlcDsKKwlGWF9GTE9BVAkJCQkJZlNtYWxsU3RlcDsKK307CisKK2VudW0gUFdMX1NDUk9MTEJBUl9UWVBFCit7CisJU0JUX0hTQ1JPTEwsCisJU0JUX1ZTQ1JPTEwKK307CisKK2VudW0gUFdMX1NCQlVUVE9OX1RZUEUKK3sKKwlQU0JUX01JTiwKKwlQU0JUX01BWCwKKwlQU0JUX1BPUworfTsKKworY2xhc3MgQ1BXTF9TQkJ1dHRvbiA6IHB1YmxpYyBDUFdMX1duZCAgCit7CitwdWJsaWM6CisJQ1BXTF9TQkJ1dHRvbihQV0xfU0NST0xMQkFSX1RZUEUgZVNjcm9sbEJhclR5cGUsUFdMX1NCQlVUVE9OX1RZUEUgZUJ1dHRvblR5cGUpOworCXZpcnR1YWwgfkNQV0xfU0JCdXR0b24oKTsKKworcHVibGljOgorCXZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCUdldENsYXNzTmFtZSgpIGNvbnN0OworCXZpcnR1YWwgdm9pZAkJCQlPbkNyZWF0ZShQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7CisJdmlydHVhbCB2b2lkCQkJCUdldFRoaXNBcHBlYXJhbmNlU3RyZWFtKENGWF9CeXRlVGV4dEJ1ZiAmIHNBcHBTdHJlYW0pOworCXZpcnR1YWwgdm9pZAkJCQlEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSk7CisJdmlydHVhbCBGWF9CT09MCQkJCU9uTEJ1dHRvbkRvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZyk7CisJdmlydHVhbCBGWF9CT09MCQkJCU9uTEJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbk1vdXNlTW92ZShjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsKKworcHJvdGVjdGVkOgorCVBXTF9TQ1JPTExCQVJfVFlQRQkJCW1fZVNjcm9sbEJhclR5cGU7CisJUFdMX1NCQlVUVE9OX1RZUEUJCQltX2VTQkJ1dHRvblR5cGU7CisKKwlGWF9CT09MCQkJCQkJbV9iTW91c2VEb3duOworfTsKKworc3RydWN0IFBXTF9GTE9BVFJBTkdFCit7CitwdWJsaWM6CisJUFdMX0ZMT0FUUkFOR0UoKTsKKwlQV0xfRkxPQVRSQU5HRShGWF9GTE9BVCBtaW4sRlhfRkxPQVQgbWF4KTsKKwl2b2lkIERlZmF1bHQoKTsKKwl2b2lkIFNldChGWF9GTE9BVCBtaW4sRlhfRkxPQVQgbWF4KTsKKwlGWF9CT09MCUluKEZYX0ZMT0FUIHgpIGNvbnN0OworCUZYX0ZMT0FUIEdldFdpZHRoKCkgY29uc3Q7CisKKwlGWF9GTE9BVCBmTWluLGZNYXg7Cit9OworCitzdHJ1Y3QgUFdMX1NDUk9MTF9QUklWQVRFREFUQQoreworcHVibGljOgorCVBXTF9TQ1JPTExfUFJJVkFURURBVEEoKTsKKworCXZvaWQgRGVmYXVsdCgpOworCXZvaWQgU2V0U2Nyb2xsUmFuZ2UoRlhfRkxPQVQgbWluLEZYX0ZMT0FUIG1heCk7CisJdm9pZCBTZXRDbGllbnRXaWR0aChGWF9GTE9BVCB3aWR0aCk7CisJdm9pZCBTZXRTbWFsbFN0ZXAoRlhfRkxPQVQgc3RlcCk7CisJdm9pZCBTZXRCaWdTdGVwKEZYX0ZMT0FUIHN0ZXApOworCUZYX0JPT0wgU2V0UG9zKEZYX0ZMT0FUIHBvcyk7CisKKwl2b2lkIEFkZFNtYWxsKCk7CisJdm9pZCBTdWJTbWFsbCgpOworCXZvaWQgQWRkQmlnKCk7CisJdm9pZCBTdWJCaWcoKTsKKworCVBXTF9GTE9BVFJBTkdFCQkJCVNjcm9sbFJhbmdlOworCUZYX0ZMT0FUCQkJCQlmQ2xpZW50V2lkdGg7CisJRlhfRkxPQVQJCQkJCWZTY3JvbGxQb3M7CisJRlhfRkxPQVQJCQkJCWZCaWdTdGVwOworCUZYX0ZMT0FUCQkJCQlmU21hbGxTdGVwOworfTsKKworY2xhc3MgQ1BXTF9TY3JvbGxCYXIgOiBwdWJsaWMgQ1BXTF9XbmQgIAoreworcHVibGljOgorCUNQV0xfU2Nyb2xsQmFyKFBXTF9TQ1JPTExCQVJfVFlQRSBzYlR5cGUgPSBTQlRfSFNDUk9MTCk7CisJdmlydHVhbCB+Q1BXTF9TY3JvbGxCYXIoKTsKKworcHVibGljOgorCXZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCUdldENsYXNzTmFtZSgpIGNvbnN0OworCXZpcnR1YWwgdm9pZAkJCQlPbkNyZWF0ZShQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7CisJdmlydHVhbCB2b2lkCQkJCVJlUG9zQ2hpbGRXbmQoKTsKKwl2aXJ0dWFsIHZvaWQJCQkJR2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oQ0ZYX0J5dGVUZXh0QnVmICYgc0FwcFN0cmVhbSk7CisJdmlydHVhbCB2b2lkCQkJCURyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKTsKKworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkxCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkxCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsKKwl2aXJ0dWFsIHZvaWQJCQkJT25Ob3RpZnkoQ1BXTF9XbmQqIHBXbmQsIEZYX0RXT1JEIG1zZywgRlhfSU5UUFRSIHdQYXJhbSA9IDAsIEZYX0lOVFBUUiBsUGFyYW0gPSAwKTsKKworCXZpcnR1YWwgdm9pZAkJCQlDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7CisJCisJRlhfRkxPQVQJCQkJCUdldFNjcm9sbEJhcldpZHRoKCkgY29uc3Q7CQorCVBXTF9TQ1JPTExCQVJfVFlQRQkJCUdldFNjcm9sbEJhclR5cGUoKSBjb25zdCB7cmV0dXJuIG1fc2JUeXBlO307CisKKwl2b2lkCQkJCQkJU2V0Tm90aWZ5Rm9yZXZlcihGWF9CT09MIGJGb3JldmVyKSB7bV9iTm90aWZ5Rm9yZXZlciA9IGJGb3JldmVyO30KKworcHJvdGVjdGVkOgkJCQorCXZvaWQJCQkJCQlTZXRTY3JvbGxSYW5nZShGWF9GTE9BVCBmTWluLEZYX0ZMT0FUIGZNYXgsRlhfRkxPQVQgZkNsaWVudFdpZHRoKTsKKwl2b2lkCQkJCQkJU2V0U2Nyb2xsUG9zKEZYX0ZMT0FUIGZQb3MpOworCXZvaWQJCQkJCQlNb3ZlUG9zQnV0dG9uKEZYX0JPT0wgYlJlZnJlc2gpOworCXZvaWQJCQkJCQlTZXRTY3JvbGxTdGVwKEZYX0ZMT0FUIGZCaWdTdGVwLEZYX0ZMT0FUIGZTbWFsbFN0ZXApOworCXZvaWQJCQkJCQlOb3RpZnlTY3JvbGxXaW5kb3coKTsKKwlDUERGX1JlY3QJCQkJCUdldFNjcm9sbEFyZWEoKSBjb25zdDsKKworcHJpdmF0ZToKKwl2b2lkCQkJCQkJQ3JlYXRlQnV0dG9ucyhjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7CisKKwl2b2lkCQkJCQkJT25NaW5CdXR0b25MQkRvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KTsKKwl2b2lkCQkJCQkJT25NaW5CdXR0b25MQlVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCk7CisJdm9pZAkJCQkJCU9uTWluQnV0dG9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCk7CisKKwl2b2lkCQkJCQkJT25NYXhCdXR0b25MQkRvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KTsKKwl2b2lkCQkJCQkJT25NYXhCdXR0b25MQlVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCk7CisJdm9pZAkJCQkJCU9uTWF4QnV0dG9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCk7CisKKwl2b2lkCQkJCQkJT25Qb3NCdXR0b25MQkRvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KTsKKwl2b2lkCQkJCQkJT25Qb3NCdXR0b25MQlVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCk7CisJdm9pZAkJCQkJCU9uUG9zQnV0dG9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCk7CisKKwlGWF9GTE9BVAkJCQkJVHJ1ZVRvRmFjZShGWF9GTE9BVCk7CisJRlhfRkxPQVQJCQkJCUZhY2VUb1RydWUoRlhfRkxPQVQpOworCisJdmlydHVhbAl2b2lkCQkJCVRpbWVyUHJvYygpOworCitwcml2YXRlOgorCVBXTF9TQ1JPTExCQVJfVFlQRQkJCW1fc2JUeXBlOworCVBXTF9TQ1JPTExfSU5GTwkJCQltX09yaWdpbkluZm87CisJQ1BXTF9TQkJ1dHRvbioJCQkJbV9wTWluQnV0dG9uOworCUNQV0xfU0JCdXR0b24qCQkJCW1fcE1heEJ1dHRvbjsKKwlDUFdMX1NCQnV0dG9uKgkJCQltX3BQb3NCdXR0b247CisJUFdMX1NDUk9MTF9QUklWQVRFREFUQQkJbV9zRGF0YTsKKwlGWF9CT09MCQkJCQkJbV9iTW91c2VEb3duOwkKKwlGWF9CT09MCQkJCQkJbV9iTWluT3JNYXg7CisJRlhfQk9PTAkJCQkJCW1fYk5vdGlmeUZvcmV2ZXI7CisJRlhfRkxPQVQJCQkJCW1fbk9sZFBvczsKKwlGWF9GTE9BVAkJCQkJbV9mT2xkUG9zQnV0dG9uOworfTsKKworI2VuZGlmIC8vICFkZWZpbmVkKEFGWF9QV0xfU0NST0xMQkFSX0hfX0RDRkVDMDgyXzI2NTFfNDhBNF9COEYzXzYzRjFCM0NDNUUxMF9fSU5DTFVERURfKQorCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1NpZ25hdHVyZS5oIGIvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfU2lnbmF0dXJlLmgKaW5kZXggNzEyZjc0MC4uZWM0NDc5YiAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfU2lnbmF0dXJlLmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfU2lnbmF0dXJlLmgKQEAgLTEsNjcgKzEsNjcgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpZm5kZWYgX1BXTF9TSUdOQVRVUkVfSF8NCi0jZGVmaW5lIF9QV0xfU0lHTkFUVVJFX0hfDQotDQotY2xhc3MgQ1BXTF9TaWduYXR1cmU7DQotY2xhc3MgQ1BXTF9MYWJlbDsNCi1jbGFzcyBDUFdMX1NpZ25hdHVyZV9JbWFnZTsNCi0NCi1jbGFzcyBDUFdMX1NpZ25hdHVyZV9JbWFnZSA6IHB1YmxpYyBDUFdMX0ltYWdlDQotew0KLXB1YmxpYzoNCi0JQ1BXTF9TaWduYXR1cmVfSW1hZ2UoKTsNCi0JdmlydHVhbCB+Q1BXTF9TaWduYXR1cmVfSW1hZ2UoKTsNCi0NCi0Jdm9pZAkJCQkJCQkJU2V0SW1hZ2UoQ0ZYX0RJQlNvdXJjZSogcEltYWdlKTsNCi0JQ0ZYX0RJQlNvdXJjZSoJCQkJCQlHZXRJbWFnZSgpOw0KLQ0KLXByb3RlY3RlZDoNCi0JdmlydHVhbCB2b2lkCQkJCQkJRHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlHZXRUaGlzQXBwZWFyYW5jZVN0cmVhbShDRlhfQnl0ZVRleHRCdWYgJiBzQXBwU3RyZWFtKTsNCi0NCi0JdmlydHVhbCB2b2lkCQkJCQkJR2V0U2NhbGUoRlhfRkxPQVQgJiBmSFNjYWxlLEZYX0ZMT0FUICYgZlZTY2FsZSk7DQotDQotcHJpdmF0ZToNCi0JQ0ZYX0RJQlNvdXJjZSoJCQkJCQltX3BJbWFnZTsNCi19Ow0KLQ0KLWNsYXNzIFBXTF9DTEFTUyBDUFdMX1NpZ25hdHVyZSA6IHB1YmxpYyBDUFdMX1duZA0KLXsNCi1wdWJsaWM6DQotCUNQV0xfU2lnbmF0dXJlKCk7DQotCXZpcnR1YWwgfkNQV0xfU2lnbmF0dXJlKCk7DQotDQotCXZvaWQJCQkJCQkJCVNldFRleHQoRlhfTFBDV1NUUiBzVGV4dCk7DQotCXZvaWQJCQkJCQkJCVNldERlc2NyaXB0aW9uKEZYX0xQQ1dTVFIgc3RyaW5nKTsNCi0Jdm9pZAkJCQkJCQkJU2V0SW1hZ2UoQ0ZYX0RJQlNvdXJjZSogcEltYWdlKTsNCi0Jdm9pZAkJCQkJCQkJU2V0SW1hZ2VTdHJlYW0oQ1BERl9TdHJlYW0gKiBwU3RyZWFtLCBGWF9MUENTVFIgc0ltYWdlQWxpYXMpOw0KLQ0KLQl2b2lkCQkJCQkJCQlTZXRUZXh0RmxhZyhGWF9CT09MIGJUZXh0RXhpc3QpOw0KLQl2b2lkCQkJCQkJCQlTZXRJbWFnZUZsYWcoRlhfQk9PTCBiSW1hZ2VFeGlzdCk7DQotCXZvaWQJCQkJCQkJCVNldEZveGl0RmxhZyhGWF9CT09MIGJGbGFnRXhpc3QpOw0KLQ0KLXByb3RlY3RlZDoNCi0JdmlydHVhbCB2b2lkCQkJCQkJUmVQb3NDaGlsZFduZCgpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7DQotDQotCXZpcnR1YWwgdm9pZAkJCQkJCURyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKTsNCi0JdmlydHVhbCB2b2lkCQkJCQkJR2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oQ0ZYX0J5dGVUZXh0QnVmICYgc0FwcFN0cmVhbSk7DQotDQotcHJpdmF0ZToNCi0JQ1BXTF9MYWJlbCoJCQkJCQkJbV9wVGV4dDsNCi0JQ1BXTF9MYWJlbCoJCQkJCQkJbV9wRGVzY3JpcHRpb247DQotCUNQV0xfU2lnbmF0dXJlX0ltYWdlKgkJCQltX3BJbWFnZTsNCi0NCi0JRlhfQk9PTAkJCQkJCQkJbV9iVGV4dEV4aXN0Ow0KLQlGWF9CT09MCQkJCQkJCQltX2JJbWFnZUV4aXN0Ow0KLQlGWF9CT09MCQkJCQkJCQltX2JGbGFnRXhpc3Q7DQotfTsNCi0NCi0jZW5kaWYgLy8gX1BXTF9TSUdOQVRVUkVfSF8NCi0NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9QV0xfU0lHTkFUVVJFX0hfCisjZGVmaW5lIF9QV0xfU0lHTkFUVVJFX0hfCisKK2NsYXNzIENQV0xfU2lnbmF0dXJlOworY2xhc3MgQ1BXTF9MYWJlbDsKK2NsYXNzIENQV0xfU2lnbmF0dXJlX0ltYWdlOworCitjbGFzcyBDUFdMX1NpZ25hdHVyZV9JbWFnZSA6IHB1YmxpYyBDUFdMX0ltYWdlCit7CitwdWJsaWM6CisJQ1BXTF9TaWduYXR1cmVfSW1hZ2UoKTsKKwl2aXJ0dWFsIH5DUFdMX1NpZ25hdHVyZV9JbWFnZSgpOworCisJdm9pZAkJCQkJCQkJU2V0SW1hZ2UoQ0ZYX0RJQlNvdXJjZSogcEltYWdlKTsKKwlDRlhfRElCU291cmNlKgkJCQkJCUdldEltYWdlKCk7CisKK3Byb3RlY3RlZDoKKwl2aXJ0dWFsIHZvaWQJCQkJCQlEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSk7CisJdmlydHVhbCB2b2lkCQkJCQkJR2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oQ0ZYX0J5dGVUZXh0QnVmICYgc0FwcFN0cmVhbSk7CisKKwl2aXJ0dWFsIHZvaWQJCQkJCQlHZXRTY2FsZShGWF9GTE9BVCAmIGZIU2NhbGUsRlhfRkxPQVQgJiBmVlNjYWxlKTsKKworcHJpdmF0ZToKKwlDRlhfRElCU291cmNlKgkJCQkJCW1fcEltYWdlOworfTsKKworY2xhc3MgUFdMX0NMQVNTIENQV0xfU2lnbmF0dXJlIDogcHVibGljIENQV0xfV25kCit7CitwdWJsaWM6CisJQ1BXTF9TaWduYXR1cmUoKTsKKwl2aXJ0dWFsIH5DUFdMX1NpZ25hdHVyZSgpOworCisJdm9pZAkJCQkJCQkJU2V0VGV4dChGWF9MUENXU1RSIHNUZXh0KTsKKwl2b2lkCQkJCQkJCQlTZXREZXNjcmlwdGlvbihGWF9MUENXU1RSIHN0cmluZyk7CisJdm9pZAkJCQkJCQkJU2V0SW1hZ2UoQ0ZYX0RJQlNvdXJjZSogcEltYWdlKTsKKwl2b2lkCQkJCQkJCQlTZXRJbWFnZVN0cmVhbShDUERGX1N0cmVhbSAqIHBTdHJlYW0sIEZYX0xQQ1NUUiBzSW1hZ2VBbGlhcyk7CisKKwl2b2lkCQkJCQkJCQlTZXRUZXh0RmxhZyhGWF9CT09MIGJUZXh0RXhpc3QpOworCXZvaWQJCQkJCQkJCVNldEltYWdlRmxhZyhGWF9CT09MIGJJbWFnZUV4aXN0KTsKKwl2b2lkCQkJCQkJCQlTZXRGb3hpdEZsYWcoRlhfQk9PTCBiRmxhZ0V4aXN0KTsKKworcHJvdGVjdGVkOgorCXZpcnR1YWwgdm9pZAkJCQkJCVJlUG9zQ2hpbGRXbmQoKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCQlDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7CisKKwl2aXJ0dWFsIHZvaWQJCQkJCQlEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSk7CisJdmlydHVhbCB2b2lkCQkJCQkJR2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oQ0ZYX0J5dGVUZXh0QnVmICYgc0FwcFN0cmVhbSk7CisKK3ByaXZhdGU6CisJQ1BXTF9MYWJlbCoJCQkJCQkJbV9wVGV4dDsKKwlDUFdMX0xhYmVsKgkJCQkJCQltX3BEZXNjcmlwdGlvbjsKKwlDUFdMX1NpZ25hdHVyZV9JbWFnZSoJCQkJbV9wSW1hZ2U7CisKKwlGWF9CT09MCQkJCQkJCQltX2JUZXh0RXhpc3Q7CisJRlhfQk9PTAkJCQkJCQkJbV9iSW1hZ2VFeGlzdDsKKwlGWF9CT09MCQkJCQkJCQltX2JGbGFnRXhpc3Q7Cit9OworCisjZW5kaWYgLy8gX1BXTF9TSUdOQVRVUkVfSF8KKworCmRpZmYgLS1naXQgYS9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BXTF9TcGVjaWFsQnV0dG9uLmggYi9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BXTF9TcGVjaWFsQnV0dG9uLmgKaW5kZXggNTU2MTMwMS4uYWU4ODJlYSAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfU3BlY2lhbEJ1dHRvbi5oCisrKyBiL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1NwZWNpYWxCdXR0b24uaApAQCAtMSw2MyArMSw2MyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfUFdMX1NQRUNJQUxCVVRUT05fSF8NCi0jZGVmaW5lIF9QV0xfU1BFQ0lBTEJVVFRPTl9IXw0KLQ0KLSNpZiBfTVNDX1ZFUiA+IDEwMDANCi0jcHJhZ21hIG9uY2UNCi0jZW5kaWYgLy8gX01TQ19WRVIgPiAxMDAwDQotDQotY2xhc3MgUFdMX0NMQVNTIENQV0xfUHVzaEJ1dHRvbiA6IHB1YmxpYyBDUFdMX0J1dHRvbiAgDQotew0KLXB1YmxpYzoNCi0JQ1BXTF9QdXNoQnV0dG9uKCk7DQotCXZpcnR1YWwgfkNQV0xfUHVzaEJ1dHRvbigpOw0KLQ0KLXB1YmxpYzoNCi0JdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJR2V0Q2xhc3NOYW1lKCkgY29uc3Q7DQotCXZpcnR1YWwgQ1BERl9SZWN0CQkJR2V0Rm9jdXNSZWN0KCkgY29uc3Q7DQotfTsNCi0NCi1jbGFzcyBQV0xfQ0xBU1MgQ1BXTF9DaGVja0JveCA6IHB1YmxpYyBDUFdMX0J1dHRvbg0KLXsNCi1wdWJsaWM6DQotCUNQV0xfQ2hlY2tCb3goKTsNCi0JdmlydHVhbCB+Q1BXTF9DaGVja0JveCgpOw0KLQ0KLXB1YmxpYzoNCi0JdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJR2V0Q2xhc3NOYW1lKCkgY29uc3Q7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkxCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25DaGFyKEZYX1dPUkQgbkNoYXIpOw0KLQ0KLQl2b2lkCQkJCQkJU2V0Q2hlY2soRlhfQk9PTCBiQ2hlY2spOw0KLQlGWF9CT09MCQkJCQkJSXNDaGVja2VkKCkgY29uc3Q7DQotDQotcHJpdmF0ZToNCi0JRlhfQk9PTAkJCQkJCW1fYkNoZWNrZWQ7DQotfTsNCi0NCi1jbGFzcyBQV0xfQ0xBU1MgQ1BXTF9SYWRpb0J1dHRvbiA6IHB1YmxpYyBDUFdMX0J1dHRvbg0KLXsNCi1wdWJsaWM6DQotCUNQV0xfUmFkaW9CdXR0b24oKTsNCi0JdmlydHVhbCB+Q1BXTF9SYWRpb0J1dHRvbigpOw0KLQ0KLXB1YmxpYzoNCi0JdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJR2V0Q2xhc3NOYW1lKCkgY29uc3Q7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkxCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJT25DaGFyKEZYX1dPUkQgbkNoYXIpOw0KLQ0KLQl2b2lkCQkJCQkJU2V0Q2hlY2soRlhfQk9PTCBiQ2hlY2spOw0KLQlGWF9CT09MCQkJCQkJSXNDaGVja2VkKCkgY29uc3Q7DQotDQotcHJpdmF0ZToNCi0JRlhfQk9PTAkJCQkJCW1fYkNoZWNrZWQ7DQotfTsNCi0NCi0jZW5kaWYNCi0NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaWZuZGVmIF9QV0xfU1BFQ0lBTEJVVFRPTl9IXworI2RlZmluZSBfUFdMX1NQRUNJQUxCVVRUT05fSF8KKworI2lmIF9NU0NfVkVSID4gMTAwMAorI3ByYWdtYSBvbmNlCisjZW5kaWYgLy8gX01TQ19WRVIgPiAxMDAwCisKK2NsYXNzIFBXTF9DTEFTUyBDUFdMX1B1c2hCdXR0b24gOiBwdWJsaWMgQ1BXTF9CdXR0b24gIAoreworcHVibGljOgorCUNQV0xfUHVzaEJ1dHRvbigpOworCXZpcnR1YWwgfkNQV0xfUHVzaEJ1dHRvbigpOworCitwdWJsaWM6CisJdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJR2V0Q2xhc3NOYW1lKCkgY29uc3Q7CisJdmlydHVhbCBDUERGX1JlY3QJCQlHZXRGb2N1c1JlY3QoKSBjb25zdDsKK307CisKK2NsYXNzIFBXTF9DTEFTUyBDUFdMX0NoZWNrQm94IDogcHVibGljIENQV0xfQnV0dG9uCit7CitwdWJsaWM6CisJQ1BXTF9DaGVja0JveCgpOworCXZpcnR1YWwgfkNQV0xfQ2hlY2tCb3goKTsKKworcHVibGljOgorCXZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCUdldENsYXNzTmFtZSgpIGNvbnN0OworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkxCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpOworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkNoYXIoRlhfV09SRCBuQ2hhcik7CisKKwl2b2lkCQkJCQkJU2V0Q2hlY2soRlhfQk9PTCBiQ2hlY2spOworCUZYX0JPT0wJCQkJCQlJc0NoZWNrZWQoKSBjb25zdDsKKworcHJpdmF0ZToKKwlGWF9CT09MCQkJCQkJbV9iQ2hlY2tlZDsKK307CisKK2NsYXNzIFBXTF9DTEFTUyBDUFdMX1JhZGlvQnV0dG9uIDogcHVibGljIENQV0xfQnV0dG9uCit7CitwdWJsaWM6CisJQ1BXTF9SYWRpb0J1dHRvbigpOworCXZpcnR1YWwgfkNQV0xfUmFkaW9CdXR0b24oKTsKKworcHVibGljOgorCXZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCUdldENsYXNzTmFtZSgpIGNvbnN0OworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkxCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpOworCXZpcnR1YWwgRlhfQk9PTAkJCQlPbkNoYXIoRlhfV09SRCBuQ2hhcik7CisKKwl2b2lkCQkJCQkJU2V0Q2hlY2soRlhfQk9PTCBiQ2hlY2spOworCUZYX0JPT0wJCQkJCQlJc0NoZWNrZWQoKSBjb25zdDsKKworcHJpdmF0ZToKKwlGWF9CT09MCQkJCQkJbV9iQ2hlY2tlZDsKK307CisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1V0aWxzLmggYi9mcGRmc2RrL2luY2x1ZGUvcGRmd2luZG93L1BXTF9VdGlscy5oCmluZGV4IDJlY2NjMzYuLjQ4OWViNGEgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1V0aWxzLmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfVXRpbHMuaApAQCAtMSwyMzcgKzEsMjM3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaWZuZGVmIF9QV0xfVVRJTFNfSF8NCi0jZGVmaW5lIF9QV0xfVVRJTFNfSF8NCi0NCi10ZW1wbGF0ZTxjbGFzcyBUPiBUIFBXTF9NSU4gKGNvbnN0IFQgJiBpLCBjb25zdCBUICYgaikgeyByZXR1cm4gKChpIDwgaikgPyBpIDogaik7IH0NCi10ZW1wbGF0ZTxjbGFzcyBUPiBUIFBXTF9NQVggKGNvbnN0IFQgJiBpLCBjb25zdCBUICYgaikgeyByZXR1cm4gKChpID4gaikgPyBpIDogaik7IH0NCi0NCi0jZGVmaW5lIFBXTF9QREYyV0lOKGNvbG9yKQkJCQkJKEZYX0JZVEUoY29sb3IqMjU1KSkNCi0jZGVmaW5lIFBXTF9XSU4yUERGKGNvbG9yKQkJCQkJKChGWF9GTE9BVCkoKEZYX0ZMT0FUKWNvbG9yLzI1NS4wZikpDQotDQotI2RlZmluZSBQV0xfTUFLRURXT1JEKGxvdyxoaWdoKQkJCQkoKEZYX0RXT1JEKSgoRlhfV09SRCkobG93KSB8IChGWF9EV09SRCkoKChGWF9XT1JEKShoaWdoKSk8PDE2KSkpIA0KLSNkZWZpbmUgUFdMX0dFVExPV1dPUkQoZHdvcmQpCQkJCSgoRlhfV09SRCkoZHdvcmQpKQ0KLSNkZWZpbmUgUFdMX0dFVEhJR0hXT1JEKGR3b3JkKQkJCQkoKEZYX1dPUkQpKGR3b3JkPj4xNikpDQotDQotI2RlZmluZSBQV0xfSUNPTlRZUEVfQ0hFQ0tNQVJLCQkJCTANCi0jZGVmaW5lIFBXTF9JQ09OVFlQRV9DSVJDTEUJCQkJCTENCi0jZGVmaW5lIFBXTF9JQ09OVFlQRV9DT01NRU5UCQkJCTINCi0jZGVmaW5lIFBXTF9JQ09OVFlQRV9DUk9TUwkJCQkJMw0KLSNkZWZpbmUgUFdMX0lDT05UWVBFX0hFTFAJCQkJCTQNCi0jZGVmaW5lIFBXTF9JQ09OVFlQRV9JTlNFUlRURVhUCQkJCTUNCi0jZGVmaW5lIFBXTF9JQ09OVFlQRV9LRVkJCQkJCTYNCi0jZGVmaW5lIFBXTF9JQ09OVFlQRV9ORVdQQVJBR1JBUEgJCQk3DQotI2RlZmluZSBQV0xfSUNPTlRZUEVfVEVYVE5PVEUJCQkJOA0KLSNkZWZpbmUgUFdMX0lDT05UWVBFX1BBUkFHUkFQSAkJCQk5DQotI2RlZmluZSBQV0xfSUNPTlRZUEVfUklHSFRBUlJPVwkJCQkxMA0KLSNkZWZpbmUgUFdMX0lDT05UWVBFX1JJR0hUUE9JTlRFUgkJCTExDQotI2RlZmluZSBQV0xfSUNPTlRZUEVfU1RBUgkJCQkJMTINCi0jZGVmaW5lIFBXTF9JQ09OVFlQRV9VUEFSUk9XCQkJCTEzDQotI2RlZmluZSBQV0xfSUNPTlRZUEVfVVBMRUZUQVJST1cJCQkxNA0KLQ0KLSNkZWZpbmUgUFdMX0lDT05UWVBFX0dSQVBICQkJCQkxNQ0KLSNkZWZpbmUgUFdMX0lDT05UWVBFX1BBUEVSQ0xJUAkJCQkxNg0KLSNkZWZpbmUgUFdMX0lDT05UWVBFX0FUVEFDSE1FTlQJCQkJMTcNCi0jZGVmaW5lIFBXTF9JQ09OVFlQRV9UQUcJCQkJCTE4DQotDQotI2RlZmluZSBQV0xfSUNPTlRZUEVfRk9YSVQJCQkJCTE5DQotDQotI2RlZmluZSBQV0xfSUNPTlRZUEVfVU5LTk9XTgkJCQktMQ0KLQ0KLS8vY2hlY2tib3ggJiByYWRpb2J1dHRvbiBzdHlsZQ0KLSNkZWZpbmUgUENTX0NIRUNLCQkJCQkJCTANCi0jZGVmaW5lIFBDU19DSVJDTEUJCQkJCQkJMQ0KLSNkZWZpbmUgUENTX0NST1NTCQkJCQkJCTINCi0jZGVmaW5lIFBDU19ESUFNT05ECQkJCQkJCTMNCi0jZGVmaW5lIFBDU19TUVVBUkUJCQkJCQkJNA0KLSNkZWZpbmUgUENTX1NUQVIJCQkJCQkJNQ0KLQ0KLSNkZWZpbmUJUFdMX1BJCQkJCQkJCQkzLjE0MTU5MjY1MzU4OTc5Zg0KLSNkZWZpbmUgUFdMX0JFWklFUgkJCQkJCQkwLjU1MjI4NDc0OTgzMDhmDQotDQotLy9wdXNoYnV0dG9uIGxheW91dCBzdHlsZQ0KLSNkZWZpbmUgUFBCTF9MQUJFTAkJCQkJCQkwDQotI2RlZmluZSBQUEJMX0lDT04JCQkJCQkJMQ0KLSNkZWZpbmUgUFBCTF9JQ09OVE9QTEFCRUxCT1RUT00JCQkJMg0KLSNkZWZpbmUJUFBCTF9MQUJFTFRPUElDT05CT1RUT00JCQkJMw0KLSNkZWZpbmUJUFBCTF9JQ09OTEVGVExBQkVMUklHSFQJCQkJNA0KLSNkZWZpbmUgUFBCTF9MQUJFTExFRlRJQ09OUklHSFQJCQkJNQ0KLSNkZWZpbmUgUFBCTF9MQUJFTE9WRVJJQ09OCQkJCQk2DQotDQotY2xhc3MgQ1BXTF9Qb2ludCA6IHB1YmxpYyBDUERGX1BvaW50DQotew0KLXB1YmxpYzoNCi0JQ1BXTF9Qb2ludCgpIDogQ1BERl9Qb2ludCgwLjBmLDAuMGYpe30NCi0JQ1BXTF9Qb2ludChGWF9GTE9BVCBmeCwgRlhfRkxPQVQgZnkpIDogQ1BERl9Qb2ludChmeCxmeSkge30NCi0JQ1BXTF9Qb2ludChjb25zdCBDUFdMX1BvaW50JiBwb2ludCkgOiBDUERGX1BvaW50KHBvaW50LngsIHBvaW50LnkpIHt9DQotfTsNCi0NCi1lbnVtIFBXTF9QQVRIREFUQV9UWVBFDQotew0KLQlQV0xQVF9NT1ZFVE8sDQotCVBXTFBUX0xJTkVUTywNCi0JUFdMUFRfQkVaSUVSVE8sDQotCVBXTFBUX1VOS05PV04NCi19Ow0KLQ0KLWVudW0gUFdMX1BBVEhfVFlQRQ0KLXsNCi0JUFdMUFRfUEFUSERBVEEsDQotCVBXTFBUX1NUUkVBTQ0KLX07DQotDQotY2xhc3MgQ1BXTF9QYXRoRGF0YQ0KLXsNCi1wdWJsaWM6DQotCUNQV0xfUGF0aERhdGEoKSA6IHBvaW50KCksIHR5cGUoUFdMUFRfVU5LTk9XTil7fQ0KLQlDUFdMX1BhdGhEYXRhKGNvbnN0IENQV0xfUG9pbnQmIHB0LCBQV0xfUEFUSERBVEFfVFlQRSB0cCkgOiBwb2ludChwdCksIHR5cGUodHApIHt9DQotDQotCUNQV0xfUG9pbnQJCQkJCQkJCXBvaW50Ow0KLQlQV0xfUEFUSERBVEFfVFlQRQkJCQkJCXR5cGU7DQotfTsNCi0NCi1jbGFzcyBJUFdMX1NwZWxsQ2hlY2s7DQotDQotY2xhc3MgUFdMX0NMQVNTIENQV0xfVXRpbHMNCi17DQotcHVibGljOg0KLQlzdGF0aWMgQ1BERl9SZWN0CQkJCQkJSW5mbGF0ZVJlY3QoY29uc3QgQ1BERl9SZWN0JiByY1JlY3QsIEZYX0ZMT0FUIGZTaXplKTsNCi0Jc3RhdGljIENQREZfUmVjdAkJCQkJCURlZmxhdGVSZWN0KGNvbnN0IENQREZfUmVjdCYgcmNSZWN0LCBGWF9GTE9BVCBmU2l6ZSk7DQotCXN0YXRpYyBGWF9CT09MCQkJCQkJCUludGVyc2VjdFJlY3QoY29uc3QgQ1BERl9SZWN0JiByZWN0MSwgY29uc3QgQ1BERl9SZWN0JiByZWN0Mik7DQotCXN0YXRpYyBGWF9CT09MCQkJCQkJCUNvbnRhaW5zUmVjdChjb25zdCBDUERGX1JlY3QmIHJjUGFyZW50LCBjb25zdCBDUERGX1JlY3QmIHJjQ2hpbGQpOw0KLQlzdGF0aWMgQ1BERl9SZWN0CQkJCQkJU2NhbGVSZWN0KGNvbnN0IENQREZfUmVjdCYgcmNSZWN0LEZYX0ZMT0FUIGZTY2FsZSk7DQotCXN0YXRpYyBDUFZUX1dvcmRSYW5nZQkJCQkJT3ZlcmxhcFdvcmRSYW5nZShjb25zdCBDUFZUX1dvcmRSYW5nZSYgd3IxLCBjb25zdCBDUFZUX1dvcmRSYW5nZSYgd3IyKTsNCi0Jc3RhdGljIENQREZfUmVjdAkJCQkJCUdldENlbnRlclNxdWFyZShjb25zdCBDUERGX1JlY3QgJiByZWN0KTsNCi0Jc3RhdGljIENQV0xfQ29sb3IJCQkJCQlTdWJzdHJhY3RDb2xvcihjb25zdCBDUFdMX0NvbG9yICYgc0NvbG9yLEZYX0ZMT0FUIGZDb2xvclN1Yik7DQotCXN0YXRpYyBDUFdMX0NvbG9yCQkJCQkJRGV2aWRlQ29sb3IoY29uc3QgQ1BXTF9Db2xvciAmIHNDb2xvcixGWF9GTE9BVCBmQ29sb3JEZXZpZGUpOw0KLQlzdGF0aWMgQ1BERl9SZWN0CQkJCQkJTWF4UmVjdChjb25zdCBDUERGX1JlY3QgJiByZWN0MSxjb25zdCBDUERGX1JlY3QgJiByZWN0Mik7DQotCXN0YXRpYyBDUERGX1JlY3QJCQkJCQlPZmZzZXRSZWN0KGNvbnN0IENQREZfUmVjdCAmIHJlY3QsRlhfRkxPQVQgeCxGWF9GTE9BVCB5KTsNCi0Jc3RhdGljIENQREZfUG9pbnQJCQkJCQlPZmZzZXRQb2ludChjb25zdCAgQ1BERl9Qb2ludCAmIHBvaW50LEZYX0ZMT0FUIHgsRlhfRkxPQVQgeSk7DQotCXN0YXRpYyBGWF9DT0xPUlJFRgkJCQkJCVBXTENvbG9yVG9GWENvbG9yKGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yLCBGWF9JTlQzMiBuVHJhbnNwYXJhbmN5ID0gMjU1KTsNCi0Jc3RhdGljIEZYX0JPT0wJCQkJCQkJSXNCbGFja09yV2hpdGUoY29uc3QgQ1BXTF9Db2xvciYgY29sb3IpOw0KLQlzdGF0aWMgQ1BXTF9Db2xvcgkJCQkJCUdldFJldmVyc2VDb2xvcihjb25zdCBDUFdMX0NvbG9yJiBjb2xvcik7DQotDQotCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0Q29sb3JBcHBTdHJlYW0oY29uc3QgQ1BXTF9Db2xvciAmIGNvbG9yLGNvbnN0IEZYX0JPT0wgJiBiRmlsbE9yU3Ryb2tlID0gVFJVRSk7DQotCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0Qm9yZGVyQXBwU3RyZWFtKGNvbnN0IENQREZfUmVjdCAmIHJlY3QsIEZYX0ZMT0FUIGZXaWR0aCwNCi0JCQkJCQkJCQkJCQljb25zdCBDUFdMX0NvbG9yICYgY29sb3IsIGNvbnN0IENQV0xfQ29sb3IgJiBjckxlZnRUb3AsIGNvbnN0IENQV0xfQ29sb3IgJiBjclJpZ2h0Qm90dG9tLA0KLQkJCQkJCQkJCQkJCUZYX0lOVDMyIG5TdHlsZSwgY29uc3QgQ1BXTF9EYXNoICYgZGFzaCk7DQotCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0Q2lyY2xlQm9yZGVyQXBwU3RyZWFtKGNvbnN0IENQREZfUmVjdCAmIHJlY3QsIEZYX0ZMT0FUIGZXaWR0aCwNCi0JCQkJCQkJCQkJCQljb25zdCBDUFdMX0NvbG9yICYgY29sb3IsIGNvbnN0IENQV0xfQ29sb3IgJiBjckxlZnRUb3AsIGNvbnN0IENQV0xfQ29sb3IgJiBjclJpZ2h0Qm90dG9tLA0KLQkJCQkJCQkJCQkJCUZYX0lOVDMyIG5TdHlsZSwgY29uc3QgQ1BXTF9EYXNoICYgZGFzaCk7DQotCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0UmVjdEZpbGxBcHBTdHJlYW0oY29uc3QgQ1BERl9SZWN0ICYgcmVjdCxjb25zdCBDUFdMX0NvbG9yICYgY29sb3IpOw0KLQlzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldENpcmNsZUZpbGxBcHBTdHJlYW0oY29uc3QgQ1BERl9SZWN0ICYgcmVjdCxjb25zdCBDUFdMX0NvbG9yICYgY29sb3IpOw0KLQ0KLQlzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldFB1c2hCdXR0b25BcHBTdHJlYW0oY29uc3QgQ1BERl9SZWN0ICYgcmNCQm94LA0KLQkJCQkJCQkJCQkJCQkJSUZYX0VkaXRfRm9udE1hcCAqIHBGb250TWFwLA0KLQkJCQkJCQkJCQkJCQkJQ1BERl9TdHJlYW0gKiBwSWNvblN0cmVhbSwNCi0JCQkJCQkJCQkJCQkJCUNQREZfSWNvbkZpdCAmIEljb25GaXQsDQotCQkJCQkJCQkJCQkJCQljb25zdCBDRlhfV2lkZVN0cmluZyAmIHNMYWJlbCwJCQkJCQkJCQkJCQkJCQ0KLQkJCQkJCQkJCQkJCQkJY29uc3QgQ1BXTF9Db2xvciAmIGNyVGV4dCwNCi0JCQkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZGb250U2l6ZSwNCi0JCQkJCQkJCQkJCQkJCUZYX0lOVDMyIG5MYXlPdXQpOw0KLQlzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldENoZWNrQm94QXBwU3RyZWFtKGNvbnN0IENQREZfUmVjdCAmIHJjQkJveCwNCi0JCQkJCQkJCQkJCQkJCUZYX0lOVDMyIG5TdHlsZSwNCi0JCQkJCQkJCQkJCQkJCWNvbnN0IENQV0xfQ29sb3IgJiBjclRleHQpOw0KLQlzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldFJhZGlvQnV0dG9uQXBwU3RyZWFtKGNvbnN0IENQREZfUmVjdCAmIHJjQkJveCwNCi0JCQkJCQkJCQkJCQkJCUZYX0lOVDMyIG5TdHlsZSwNCi0JCQkJCQkJCQkJCQkJCWNvbnN0IENQV0xfQ29sb3IgJiBjclRleHQpOw0KLQ0KLQlzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldEVkaXRBcHBTdHJlYW0oSUZYX0VkaXQqIHBFZGl0LCBjb25zdCBDUERGX1BvaW50ICYgcHRPZmZzZXQsIGNvbnN0IENQVlRfV29yZFJhbmdlICogcFJhbmdlID0gTlVMTCwgDQotCQkJCQkJCQkJCQkJCQlGWF9CT09MIGJDb250aW51b3VzID0gVFJVRSwgRlhfV09SRCBTdWJXb3JkID0gMCk7DQotCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0RWRpdFNlbEFwcFN0cmVhbShJRlhfRWRpdCogcEVkaXQsIGNvbnN0IENQREZfUG9pbnQgJiBwdE9mZnNldCwNCi0JCQkJCQkJCQkJCQkJCWNvbnN0IENQVlRfV29yZFJhbmdlICogcFJhbmdlID0gTlVMTCk7DQotCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0U3BlbGxDaGVja0FwcFN0cmVhbShJRlhfRWRpdCogcEVkaXQsIElQV0xfU3BlbGxDaGVjayogcFNwZWxsQ2hlY2ssDQotCQkJCQkJCQkJCQkJCQljb25zdCBDUERGX1BvaW50ICYgcHRPZmZzZXQsDQotCQkJCQkJCQkJCQkJCQljb25zdCBDUFZUX1dvcmRSYW5nZSAqIHBSYW5nZSA9IE5VTEwpOw0KLQlzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldFRleHRBcHBTdHJlYW0oY29uc3QgQ1BERl9SZWN0ICYgcmNCQm94LElGWF9FZGl0X0ZvbnRNYXAgKiBwRm9udE1hcCwNCi0JCQkJCQkJCQkJCQkJCWNvbnN0IENGWF9XaWRlU3RyaW5nICYgc1RleHQsIEZYX0lOVDMyIG5BbGlnbm1lbnRILCBGWF9JTlQzMiBuQWxpZ25tZW50ViwNCi0JCQkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZGb250U2l6ZSwgRlhfQk9PTCBiTXVsdGlMaW5lLCBGWF9CT09MIGJBdXRvUmV0dXJuLCBjb25zdCBDUFdMX0NvbG9yICYgY3JUZXh0KTsNCi0Jc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZXREcm9wQnV0dG9uQXBwU3RyZWFtKGNvbnN0IENQREZfUmVjdCAmIHJjQkJveCk7DQotDQotCXN0YXRpYyB2b2lkCQkJCQkJCQlEcmF3RmlsbFJlY3QoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSxjb25zdCBDUERGX1JlY3QgJiByZWN0LA0KLQkJCQkJCQkJCQkJCQkJY29uc3QgQ1BXTF9Db2xvciAmIGNvbG9yLCBGWF9JTlQzMiBuVHJhbnNwYXJhbmN5KTsNCi0Jc3RhdGljIHZvaWQJCQkJCQkJCURyYXdGaWxsUmVjdChDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLA0KLQkJCQkJCQkJCQkJCQkJY29uc3QgQ1BERl9SZWN0ICYgcmVjdCxjb25zdCBGWF9DT0xPUlJFRiAmIGNvbG9yKTsNCi0Jc3RhdGljIHZvaWQJCQkJCQkJCURyYXdTdHJva2VSZWN0KENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsY29uc3QgQ1BERl9SZWN0ICYgcmVjdCwNCi0JCQkJCQkJCQkJCQkJCWNvbnN0IEZYX0NPTE9SUkVGICYgY29sb3IsIEZYX0ZMT0FUIGZXaWR0aCk7DQotCXN0YXRpYyB2b2lkCQkJCQkJCQlEcmF3U3Ryb2tlTGluZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLA0KLQkJCQkJCQkJCQkJCQkJY29uc3QgQ1BERl9Qb2ludCAmIHB0TW92ZVRvLCBjb25zdCBDUERGX1BvaW50ICYgcHRMaW5lVG8sIGNvbnN0IEZYX0NPTE9SUkVGICYgY29sb3IsIEZYX0ZMT0FUIGZXaWR0aCk7DQotCXN0YXRpYyB2b2lkCQkJCQkJCQlEcmF3Qm9yZGVyKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsDQotCQkJCQkJCQkJCQkJY29uc3QgQ1BERl9SZWN0ICYgcmVjdCwgRlhfRkxPQVQgZldpZHRoLA0KLQkJCQkJCQkJCQkJCWNvbnN0IENQV0xfQ29sb3IgJiBjb2xvciwgY29uc3QgQ1BXTF9Db2xvciAmIGNyTGVmdFRvcCwgY29uc3QgQ1BXTF9Db2xvciAmIGNyUmlnaHRCb3R0b20sDQotCQkJCQkJCQkJCQkJRlhfSU5UMzIgblN0eWxlLCBjb25zdCBDUFdMX0Rhc2ggJiBkYXNoLCBGWF9JTlQzMiBuVHJhbnNwYXJhbmN5KTsNCi0Jc3RhdGljIHZvaWQJCQkJCQkJCURyYXdGaWxsQXJlYShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLA0KLQkJCQkJCQkJCQkJCQkJY29uc3QgQ1BERl9Qb2ludCogcFB0cywgRlhfSU5UMzIgbkNvdW50LCBjb25zdCBGWF9DT0xPUlJFRiYgY29sb3IpOw0KLQlzdGF0aWMgdm9pZAkJCQkJCQkJRHJhd1NoYWRvdyhDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLA0KLQkJCQkJCQkJCQkJCQkJRlhfQk9PTCBiVmVydGljYWwsIEZYX0JPT0wgYkhvcml6b250YWwsIENQREZfUmVjdCByZWN0LA0KLQkJCQkJCQkJCQkJCQkJRlhfSU5UMzIgblRyYW5zcGFyYW5jeSwgRlhfSU5UMzIgblN0YXJ0R3JheSwgRlhfSU5UMzIgbkVuZEdyYXkpOw0KLQlzdGF0aWMgdm9pZAkJCQkJCQkJRHJhd0VkaXRTcGVsbENoZWNrKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsIElGWF9FZGl0KiBwRWRpdCwgDQotCQkJCQkJCQkJCQkJCQljb25zdCBDUERGX1JlY3QmIHJjQ2xpcCwgY29uc3QgQ1BERl9Qb2ludCYgcHRPZmZzZXQsIGNvbnN0IENQVlRfV29yZFJhbmdlKiBwUmFuZ2UsIA0KLQkJCQkJCQkJCQkJCQkJSVBXTF9TcGVsbENoZWNrKiBwU3BlbGxDaGVjayk7DQotcHVibGljOg0KLQlzdGF0aWMgdm9pZAkJCQkJCQkJQ29udmVydENNWUsyUkdCKEZYX0ZMT0FUIGRDLEZYX0ZMT0FUIGRNLEZYX0ZMT0FUIGRZLEZYX0ZMT0FUIGRLLEZYX0ZMT0FUICZkUixGWF9GTE9BVCAmZEcsRlhfRkxPQVQgJmRCKTsNCi0Jc3RhdGljIHZvaWQJCQkJCQkJCUNvbnZlcnRSR0IyQ01ZSyhGWF9GTE9BVCBkUixGWF9GTE9BVCBkRyxGWF9GTE9BVCBkQixGWF9GTE9BVCAmZEMsRlhfRkxPQVQgJmRNLEZYX0ZMT0FUICZkWSxGWF9GTE9BVCAmZEspOw0KLQkNCi0Jc3RhdGljIHZvaWQJCQkJCQkJCUNvbnZlcnRSR0IyR1JBWShGWF9GTE9BVCBkUixGWF9GTE9BVCBkRyxGWF9GTE9BVCBkQixGWF9GTE9BVCAmZEdyYXkpOw0KLQlzdGF0aWMgdm9pZAkJCQkJCQkJQ29udmVydEdSQVkyUkdCKEZYX0ZMT0FUIGRHcmF5LEZYX0ZMT0FUICZkUixGWF9GTE9BVCAmZEcsRlhfRkxPQVQgJmRCKTsNCi0NCi0Jc3RhdGljIHZvaWQJCQkJCQkJCUNvbnZlcnRDTVlLMkdSQVkoRlhfRkxPQVQgZEMsRlhfRkxPQVQgZE0sRlhfRkxPQVQgZFksRlhfRkxPQVQgZEssRlhfRkxPQVQgJmRHcmF5KTsNCi0Jc3RhdGljIHZvaWQJCQkJCQkJCUNvbnZlcnRHUkFZMkNNWUsoRlhfRkxPQVQgZEdyYXksRlhfRkxPQVQgJmRDLEZYX0ZMT0FUICZkTSxGWF9GTE9BVCAmZFksRlhfRkxPQVQgJmRLKTsNCi0NCi0Jc3RhdGljIHZvaWQJCQkJCQkJCVBXTENvbG9yVG9BUkdCKGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yLCBGWF9JTlQzMiYgYWxwaGEsIEZYX0ZMT0FUJiByZWQsIEZYX0ZMT0FUJiBncmVlbiwgRlhfRkxPQVQmIGJsdWUpOw0KLQ0KLXB1YmxpYzoNCi0Jc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZXRJY29uQXBwU3RyZWFtKEZYX0lOVDMyIG5UeXBlLCBjb25zdCBDUERGX1JlY3QmIHJlY3QsIGNvbnN0IENQV0xfQ29sb3ImIGNyRmlsbCwgDQotCQkJCQkJCQkJCQkJY29uc3QgQ1BXTF9Db2xvciYgY3JTdHJva2UgPSBQV0xfREVGQVVMVF9CTEFDS0NPTE9SKTsNCi0Jc3RhdGljIHZvaWQJCQkJCQkJCURyYXdJY29uQXBwU3RyZWFtKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsDQotCQkJCQkJCQkJCQkJRlhfSU5UMzIgblR5cGUsIGNvbnN0IENQREZfUmVjdCAmIHJlY3QsIGNvbnN0IENQV0xfQ29sb3ImIGNyRmlsbCwgDQotCQkJCQkJCQkJCQkJY29uc3QgQ1BXTF9Db2xvciYgY3JTdHJva2UsIGNvbnN0IEZYX0lOVDMyIG5UcmFuc3BhcmFuY3kpOw0KLQ0KLXByaXZhdGU6DQotCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0QXBwU3RyZWFtRnJvbUFycmF5KGNvbnN0IENQV0xfUGF0aERhdGEqIHBQYXRoRGF0YSwgRlhfSU5UMzIgbkNvdW50KTsNCi0Jc3RhdGljIHZvaWQJCQkJCQkJCUdldFBhdGhEYXRhRnJvbUFycmF5KENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BXTF9QYXRoRGF0YSogcFBhdGhEYXRhLCBGWF9JTlQzMiBuQ291bnQpOw0KLQ0KLQlzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldEFwcFN0cmVhbV9DaGVjayhjb25zdCBDUERGX1JlY3QgJiByY0JCb3gsIGNvbnN0IENQV0xfQ29sb3IgJiBjclRleHQpOw0KLQlzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldEFwcFN0cmVhbV9DaXJjbGUoY29uc3QgQ1BERl9SZWN0ICYgcmNCQm94LCBjb25zdCBDUFdMX0NvbG9yICYgY3JUZXh0KTsNCi0Jc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZXRBcHBTdHJlYW1fQ3Jvc3MoY29uc3QgQ1BERl9SZWN0ICYgcmNCQm94LCBjb25zdCBDUFdMX0NvbG9yICYgY3JUZXh0KTsNCi0Jc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZXRBcHBTdHJlYW1fRGlhbW9uZChjb25zdCBDUERGX1JlY3QgJiByY0JCb3gsIGNvbnN0IENQV0xfQ29sb3IgJiBjclRleHQpOw0KLQlzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldEFwcFN0cmVhbV9TcXVhcmUoY29uc3QgQ1BERl9SZWN0ICYgcmNCQm94LCBjb25zdCBDUFdMX0NvbG9yICYgY3JUZXh0KTsNCi0Jc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZXRBcHBTdHJlYW1fU3Rhcihjb25zdCBDUERGX1JlY3QgJiByY0JCb3gsIGNvbnN0IENQV0xfQ29sb3IgJiBjclRleHQpOw0KLQ0KLQlzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldEFQX0NoZWNrKGNvbnN0IENQREZfUmVjdCAmIGNyQkJveCk7DQotCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0QVBfQ2lyY2xlKGNvbnN0IENQREZfUmVjdCAmIGNyQkJveCk7DQotCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0QVBfQ3Jvc3MoY29uc3QgQ1BERl9SZWN0ICYgY3JCQm94KTsNCi0Jc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZXRBUF9EaWFtb25kKGNvbnN0IENQREZfUmVjdCAmIGNyQkJveCk7DQotCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0QVBfU3F1YXJlKGNvbnN0IENQREZfUmVjdCAmIGNyQkJveCk7DQotCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0QVBfU3Rhcihjb25zdCBDUERGX1JlY3QgJiBjckJCb3gpOw0KLQlzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldEFQX0hhbGZDaXJjbGUoY29uc3QgQ1BERl9SZWN0ICYgY3JCQm94LEZYX0ZMT0FUIGZSb3RhdGUpOw0KLQ0KLQlzdGF0aWMgdm9pZAkJCQkJCQkJR2V0R3JhcGhpY3NfQ2hlY2ttYXJrKENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSk7DQotCXN0YXRpYyB2b2lkCQkJCQkJCQlHZXRHcmFwaGljc19DaXJjbGUoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKTsNCi0Jc3RhdGljIHZvaWQJCQkJCQkJCUdldEdyYXBoaWNzX0NvbW1lbnQoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKTsNCi0Jc3RhdGljIHZvaWQJCQkJCQkJCUdldEdyYXBoaWNzX0Nyb3NzKENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSk7DQotCXN0YXRpYyB2b2lkCQkJCQkJCQlHZXRHcmFwaGljc19IZWxwKENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSk7DQotCXN0YXRpYyB2b2lkCQkJCQkJCQlHZXRHcmFwaGljc19JbnNlcnRUZXh0KENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSk7DQotCXN0YXRpYyB2b2lkCQkJCQkJCQlHZXRHcmFwaGljc19LZXkoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKTsNCi0Jc3RhdGljIHZvaWQJCQkJCQkJCUdldEdyYXBoaWNzX05ld1BhcmFncmFwaChDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpOw0KLQlzdGF0aWMgdm9pZAkJCQkJCQkJR2V0R3JhcGhpY3NfVGV4dE5vdGUoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKTsNCi0Jc3RhdGljIHZvaWQJCQkJCQkJCUdldEdyYXBoaWNzX1BhcmFncmFwaChDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpOw0KLQlzdGF0aWMgdm9pZAkJCQkJCQkJR2V0R3JhcGhpY3NfUmlnaHRBcnJvdyhDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpOw0KLQlzdGF0aWMgdm9pZAkJCQkJCQkJR2V0R3JhcGhpY3NfUmlnaHRQb2ludGVyKENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSk7DQotCXN0YXRpYyB2b2lkCQkJCQkJCQlHZXRHcmFwaGljc19TdGFyKENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSk7DQotCXN0YXRpYyB2b2lkCQkJCQkJCQlHZXRHcmFwaGljc19VcEFycm93KENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSk7DQotCXN0YXRpYyB2b2lkCQkJCQkJCQlHZXRHcmFwaGljc19VcExlZnRBcnJvdyhDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpOw0KLQlzdGF0aWMgdm9pZAkJCQkJCQkJR2V0R3JhcGhpY3NfR3JhcGgoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKTsNCi0Jc3RhdGljIHZvaWQJCQkJCQkJCUdldEdyYXBoaWNzX1BhcGVyY2xpcChDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpOw0KLQlzdGF0aWMgdm9pZAkJCQkJCQkJR2V0R3JhcGhpY3NfQXR0YWNobWVudChDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpOw0KLQlzdGF0aWMgdm9pZAkJCQkJCQkJR2V0R3JhcGhpY3NfVGFnKENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSk7DQotCXN0YXRpYyB2b2lkCQkJCQkJCQlHZXRHcmFwaGljc19Gb3hpdChDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpOw0KLX07DQotDQotI2VuZGlmIC8vICFkZWZpbmVkKEFGWF9QV0xfVVRJTFNfSF9fRDMyODEyQURfQTg3NV80RTA4XzlEM0NfMEE1NzAyMDk4N0M2X19JTkNMVURFRF8pDQotDQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfUFdMX1VUSUxTX0hfCisjZGVmaW5lIF9QV0xfVVRJTFNfSF8KKwordGVtcGxhdGU8Y2xhc3MgVD4gVCBQV0xfTUlOIChjb25zdCBUICYgaSwgY29uc3QgVCAmIGopIHsgcmV0dXJuICgoaSA8IGopID8gaSA6IGopOyB9Cit0ZW1wbGF0ZTxjbGFzcyBUPiBUIFBXTF9NQVggKGNvbnN0IFQgJiBpLCBjb25zdCBUICYgaikgeyByZXR1cm4gKChpID4gaikgPyBpIDogaik7IH0KKworI2RlZmluZSBQV0xfUERGMldJTihjb2xvcikJCQkJCShGWF9CWVRFKGNvbG9yKjI1NSkpCisjZGVmaW5lIFBXTF9XSU4yUERGKGNvbG9yKQkJCQkJKChGWF9GTE9BVCkoKEZYX0ZMT0FUKWNvbG9yLzI1NS4wZikpCisKKyNkZWZpbmUgUFdMX01BS0VEV09SRChsb3csaGlnaCkJCQkJKChGWF9EV09SRCkoKEZYX1dPUkQpKGxvdykgfCAoRlhfRFdPUkQpKCgoRlhfV09SRCkoaGlnaCkpPDwxNikpKSAKKyNkZWZpbmUgUFdMX0dFVExPV1dPUkQoZHdvcmQpCQkJCSgoRlhfV09SRCkoZHdvcmQpKQorI2RlZmluZSBQV0xfR0VUSElHSFdPUkQoZHdvcmQpCQkJCSgoRlhfV09SRCkoZHdvcmQ+PjE2KSkKKworI2RlZmluZSBQV0xfSUNPTlRZUEVfQ0hFQ0tNQVJLCQkJCTAKKyNkZWZpbmUgUFdMX0lDT05UWVBFX0NJUkNMRQkJCQkJMQorI2RlZmluZSBQV0xfSUNPTlRZUEVfQ09NTUVOVAkJCQkyCisjZGVmaW5lIFBXTF9JQ09OVFlQRV9DUk9TUwkJCQkJMworI2RlZmluZSBQV0xfSUNPTlRZUEVfSEVMUAkJCQkJNAorI2RlZmluZSBQV0xfSUNPTlRZUEVfSU5TRVJUVEVYVAkJCQk1CisjZGVmaW5lIFBXTF9JQ09OVFlQRV9LRVkJCQkJCTYKKyNkZWZpbmUgUFdMX0lDT05UWVBFX05FV1BBUkFHUkFQSAkJCTcKKyNkZWZpbmUgUFdMX0lDT05UWVBFX1RFWFROT1RFCQkJCTgKKyNkZWZpbmUgUFdMX0lDT05UWVBFX1BBUkFHUkFQSAkJCQk5CisjZGVmaW5lIFBXTF9JQ09OVFlQRV9SSUdIVEFSUk9XCQkJCTEwCisjZGVmaW5lIFBXTF9JQ09OVFlQRV9SSUdIVFBPSU5URVIJCQkxMQorI2RlZmluZSBQV0xfSUNPTlRZUEVfU1RBUgkJCQkJMTIKKyNkZWZpbmUgUFdMX0lDT05UWVBFX1VQQVJST1cJCQkJMTMKKyNkZWZpbmUgUFdMX0lDT05UWVBFX1VQTEVGVEFSUk9XCQkJMTQKKworI2RlZmluZSBQV0xfSUNPTlRZUEVfR1JBUEgJCQkJCTE1CisjZGVmaW5lIFBXTF9JQ09OVFlQRV9QQVBFUkNMSVAJCQkJMTYKKyNkZWZpbmUgUFdMX0lDT05UWVBFX0FUVEFDSE1FTlQJCQkJMTcKKyNkZWZpbmUgUFdMX0lDT05UWVBFX1RBRwkJCQkJMTgKKworI2RlZmluZSBQV0xfSUNPTlRZUEVfRk9YSVQJCQkJCTE5CisKKyNkZWZpbmUgUFdMX0lDT05UWVBFX1VOS05PV04JCQkJLTEKKworLy9jaGVja2JveCAmIHJhZGlvYnV0dG9uIHN0eWxlCisjZGVmaW5lIFBDU19DSEVDSwkJCQkJCQkwCisjZGVmaW5lIFBDU19DSVJDTEUJCQkJCQkJMQorI2RlZmluZSBQQ1NfQ1JPU1MJCQkJCQkJMgorI2RlZmluZSBQQ1NfRElBTU9ORAkJCQkJCQkzCisjZGVmaW5lIFBDU19TUVVBUkUJCQkJCQkJNAorI2RlZmluZSBQQ1NfU1RBUgkJCQkJCQk1CisKKyNkZWZpbmUJUFdMX1BJCQkJCQkJCQkzLjE0MTU5MjY1MzU4OTc5ZgorI2RlZmluZSBQV0xfQkVaSUVSCQkJCQkJCTAuNTUyMjg0NzQ5ODMwOGYKKworLy9wdXNoYnV0dG9uIGxheW91dCBzdHlsZQorI2RlZmluZSBQUEJMX0xBQkVMCQkJCQkJCTAKKyNkZWZpbmUgUFBCTF9JQ09OCQkJCQkJCTEKKyNkZWZpbmUgUFBCTF9JQ09OVE9QTEFCRUxCT1RUT00JCQkJMgorI2RlZmluZQlQUEJMX0xBQkVMVE9QSUNPTkJPVFRPTQkJCQkzCisjZGVmaW5lCVBQQkxfSUNPTkxFRlRMQUJFTFJJR0hUCQkJCTQKKyNkZWZpbmUgUFBCTF9MQUJFTExFRlRJQ09OUklHSFQJCQkJNQorI2RlZmluZSBQUEJMX0xBQkVMT1ZFUklDT04JCQkJCTYKKworY2xhc3MgQ1BXTF9Qb2ludCA6IHB1YmxpYyBDUERGX1BvaW50Cit7CitwdWJsaWM6CisJQ1BXTF9Qb2ludCgpIDogQ1BERl9Qb2ludCgwLjBmLDAuMGYpe30KKwlDUFdMX1BvaW50KEZYX0ZMT0FUIGZ4LCBGWF9GTE9BVCBmeSkgOiBDUERGX1BvaW50KGZ4LGZ5KSB7fQorCUNQV0xfUG9pbnQoY29uc3QgQ1BXTF9Qb2ludCYgcG9pbnQpIDogQ1BERl9Qb2ludChwb2ludC54LCBwb2ludC55KSB7fQorfTsKKworZW51bSBQV0xfUEFUSERBVEFfVFlQRQoreworCVBXTFBUX01PVkVUTywKKwlQV0xQVF9MSU5FVE8sCisJUFdMUFRfQkVaSUVSVE8sCisJUFdMUFRfVU5LTk9XTgorfTsKKworZW51bSBQV0xfUEFUSF9UWVBFCit7CisJUFdMUFRfUEFUSERBVEEsCisJUFdMUFRfU1RSRUFNCit9OworCitjbGFzcyBDUFdMX1BhdGhEYXRhCit7CitwdWJsaWM6CisJQ1BXTF9QYXRoRGF0YSgpIDogcG9pbnQoKSwgdHlwZShQV0xQVF9VTktOT1dOKXt9CisJQ1BXTF9QYXRoRGF0YShjb25zdCBDUFdMX1BvaW50JiBwdCwgUFdMX1BBVEhEQVRBX1RZUEUgdHApIDogcG9pbnQocHQpLCB0eXBlKHRwKSB7fQorCisJQ1BXTF9Qb2ludAkJCQkJCQkJcG9pbnQ7CisJUFdMX1BBVEhEQVRBX1RZUEUJCQkJCQl0eXBlOworfTsKKworY2xhc3MgSVBXTF9TcGVsbENoZWNrOworCitjbGFzcyBQV0xfQ0xBU1MgQ1BXTF9VdGlscworeworcHVibGljOgorCXN0YXRpYyBDUERGX1JlY3QJCQkJCQlJbmZsYXRlUmVjdChjb25zdCBDUERGX1JlY3QmIHJjUmVjdCwgRlhfRkxPQVQgZlNpemUpOworCXN0YXRpYyBDUERGX1JlY3QJCQkJCQlEZWZsYXRlUmVjdChjb25zdCBDUERGX1JlY3QmIHJjUmVjdCwgRlhfRkxPQVQgZlNpemUpOworCXN0YXRpYyBGWF9CT09MCQkJCQkJCUludGVyc2VjdFJlY3QoY29uc3QgQ1BERl9SZWN0JiByZWN0MSwgY29uc3QgQ1BERl9SZWN0JiByZWN0Mik7CisJc3RhdGljIEZYX0JPT0wJCQkJCQkJQ29udGFpbnNSZWN0KGNvbnN0IENQREZfUmVjdCYgcmNQYXJlbnQsIGNvbnN0IENQREZfUmVjdCYgcmNDaGlsZCk7CisJc3RhdGljIENQREZfUmVjdAkJCQkJCVNjYWxlUmVjdChjb25zdCBDUERGX1JlY3QmIHJjUmVjdCxGWF9GTE9BVCBmU2NhbGUpOworCXN0YXRpYyBDUFZUX1dvcmRSYW5nZQkJCQkJT3ZlcmxhcFdvcmRSYW5nZShjb25zdCBDUFZUX1dvcmRSYW5nZSYgd3IxLCBjb25zdCBDUFZUX1dvcmRSYW5nZSYgd3IyKTsKKwlzdGF0aWMgQ1BERl9SZWN0CQkJCQkJR2V0Q2VudGVyU3F1YXJlKGNvbnN0IENQREZfUmVjdCAmIHJlY3QpOworCXN0YXRpYyBDUFdMX0NvbG9yCQkJCQkJU3Vic3RyYWN0Q29sb3IoY29uc3QgQ1BXTF9Db2xvciAmIHNDb2xvcixGWF9GTE9BVCBmQ29sb3JTdWIpOworCXN0YXRpYyBDUFdMX0NvbG9yCQkJCQkJRGV2aWRlQ29sb3IoY29uc3QgQ1BXTF9Db2xvciAmIHNDb2xvcixGWF9GTE9BVCBmQ29sb3JEZXZpZGUpOworCXN0YXRpYyBDUERGX1JlY3QJCQkJCQlNYXhSZWN0KGNvbnN0IENQREZfUmVjdCAmIHJlY3QxLGNvbnN0IENQREZfUmVjdCAmIHJlY3QyKTsKKwlzdGF0aWMgQ1BERl9SZWN0CQkJCQkJT2Zmc2V0UmVjdChjb25zdCBDUERGX1JlY3QgJiByZWN0LEZYX0ZMT0FUIHgsRlhfRkxPQVQgeSk7CisJc3RhdGljIENQREZfUG9pbnQJCQkJCQlPZmZzZXRQb2ludChjb25zdCAgQ1BERl9Qb2ludCAmIHBvaW50LEZYX0ZMT0FUIHgsRlhfRkxPQVQgeSk7CisJc3RhdGljIEZYX0NPTE9SUkVGCQkJCQkJUFdMQ29sb3JUb0ZYQ29sb3IoY29uc3QgQ1BXTF9Db2xvciYgY29sb3IsIEZYX0lOVDMyIG5UcmFuc3BhcmFuY3kgPSAyNTUpOworCXN0YXRpYyBGWF9CT09MCQkJCQkJCUlzQmxhY2tPcldoaXRlKGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yKTsKKwlzdGF0aWMgQ1BXTF9Db2xvcgkJCQkJCUdldFJldmVyc2VDb2xvcihjb25zdCBDUFdMX0NvbG9yJiBjb2xvcik7CisKKwlzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldENvbG9yQXBwU3RyZWFtKGNvbnN0IENQV0xfQ29sb3IgJiBjb2xvcixjb25zdCBGWF9CT09MICYgYkZpbGxPclN0cm9rZSA9IFRSVUUpOworCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0Qm9yZGVyQXBwU3RyZWFtKGNvbnN0IENQREZfUmVjdCAmIHJlY3QsIEZYX0ZMT0FUIGZXaWR0aCwKKwkJCQkJCQkJCQkJCWNvbnN0IENQV0xfQ29sb3IgJiBjb2xvciwgY29uc3QgQ1BXTF9Db2xvciAmIGNyTGVmdFRvcCwgY29uc3QgQ1BXTF9Db2xvciAmIGNyUmlnaHRCb3R0b20sCisJCQkJCQkJCQkJCQlGWF9JTlQzMiBuU3R5bGUsIGNvbnN0IENQV0xfRGFzaCAmIGRhc2gpOworCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0Q2lyY2xlQm9yZGVyQXBwU3RyZWFtKGNvbnN0IENQREZfUmVjdCAmIHJlY3QsIEZYX0ZMT0FUIGZXaWR0aCwKKwkJCQkJCQkJCQkJCWNvbnN0IENQV0xfQ29sb3IgJiBjb2xvciwgY29uc3QgQ1BXTF9Db2xvciAmIGNyTGVmdFRvcCwgY29uc3QgQ1BXTF9Db2xvciAmIGNyUmlnaHRCb3R0b20sCisJCQkJCQkJCQkJCQlGWF9JTlQzMiBuU3R5bGUsIGNvbnN0IENQV0xfRGFzaCAmIGRhc2gpOworCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0UmVjdEZpbGxBcHBTdHJlYW0oY29uc3QgQ1BERl9SZWN0ICYgcmVjdCxjb25zdCBDUFdMX0NvbG9yICYgY29sb3IpOworCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0Q2lyY2xlRmlsbEFwcFN0cmVhbShjb25zdCBDUERGX1JlY3QgJiByZWN0LGNvbnN0IENQV0xfQ29sb3IgJiBjb2xvcik7CisKKwlzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldFB1c2hCdXR0b25BcHBTdHJlYW0oY29uc3QgQ1BERl9SZWN0ICYgcmNCQm94LAorCQkJCQkJCQkJCQkJCQlJRlhfRWRpdF9Gb250TWFwICogcEZvbnRNYXAsCisJCQkJCQkJCQkJCQkJCUNQREZfU3RyZWFtICogcEljb25TdHJlYW0sCisJCQkJCQkJCQkJCQkJCUNQREZfSWNvbkZpdCAmIEljb25GaXQsCisJCQkJCQkJCQkJCQkJCWNvbnN0IENGWF9XaWRlU3RyaW5nICYgc0xhYmVsLAkJCQkJCQkJCQkJCQkJCisJCQkJCQkJCQkJCQkJCWNvbnN0IENQV0xfQ29sb3IgJiBjclRleHQsCisJCQkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZGb250U2l6ZSwKKwkJCQkJCQkJCQkJCQkJRlhfSU5UMzIgbkxheU91dCk7CisJc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZXRDaGVja0JveEFwcFN0cmVhbShjb25zdCBDUERGX1JlY3QgJiByY0JCb3gsCisJCQkJCQkJCQkJCQkJCUZYX0lOVDMyIG5TdHlsZSwKKwkJCQkJCQkJCQkJCQkJY29uc3QgQ1BXTF9Db2xvciAmIGNyVGV4dCk7CisJc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZXRSYWRpb0J1dHRvbkFwcFN0cmVhbShjb25zdCBDUERGX1JlY3QgJiByY0JCb3gsCisJCQkJCQkJCQkJCQkJCUZYX0lOVDMyIG5TdHlsZSwKKwkJCQkJCQkJCQkJCQkJY29uc3QgQ1BXTF9Db2xvciAmIGNyVGV4dCk7CisKKwlzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldEVkaXRBcHBTdHJlYW0oSUZYX0VkaXQqIHBFZGl0LCBjb25zdCBDUERGX1BvaW50ICYgcHRPZmZzZXQsIGNvbnN0IENQVlRfV29yZFJhbmdlICogcFJhbmdlID0gTlVMTCwgCisJCQkJCQkJCQkJCQkJCUZYX0JPT0wgYkNvbnRpbnVvdXMgPSBUUlVFLCBGWF9XT1JEIFN1YldvcmQgPSAwKTsKKwlzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldEVkaXRTZWxBcHBTdHJlYW0oSUZYX0VkaXQqIHBFZGl0LCBjb25zdCBDUERGX1BvaW50ICYgcHRPZmZzZXQsCisJCQkJCQkJCQkJCQkJCWNvbnN0IENQVlRfV29yZFJhbmdlICogcFJhbmdlID0gTlVMTCk7CisJc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZXRTcGVsbENoZWNrQXBwU3RyZWFtKElGWF9FZGl0KiBwRWRpdCwgSVBXTF9TcGVsbENoZWNrKiBwU3BlbGxDaGVjaywKKwkJCQkJCQkJCQkJCQkJY29uc3QgQ1BERl9Qb2ludCAmIHB0T2Zmc2V0LAorCQkJCQkJCQkJCQkJCQljb25zdCBDUFZUX1dvcmRSYW5nZSAqIHBSYW5nZSA9IE5VTEwpOworCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0VGV4dEFwcFN0cmVhbShjb25zdCBDUERGX1JlY3QgJiByY0JCb3gsSUZYX0VkaXRfRm9udE1hcCAqIHBGb250TWFwLAorCQkJCQkJCQkJCQkJCQljb25zdCBDRlhfV2lkZVN0cmluZyAmIHNUZXh0LCBGWF9JTlQzMiBuQWxpZ25tZW50SCwgRlhfSU5UMzIgbkFsaWdubWVudFYsCisJCQkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZGb250U2l6ZSwgRlhfQk9PTCBiTXVsdGlMaW5lLCBGWF9CT09MIGJBdXRvUmV0dXJuLCBjb25zdCBDUFdMX0NvbG9yICYgY3JUZXh0KTsKKwlzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldERyb3BCdXR0b25BcHBTdHJlYW0oY29uc3QgQ1BERl9SZWN0ICYgcmNCQm94KTsKKworCXN0YXRpYyB2b2lkCQkJCQkJCQlEcmF3RmlsbFJlY3QoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSxjb25zdCBDUERGX1JlY3QgJiByZWN0LAorCQkJCQkJCQkJCQkJCQljb25zdCBDUFdMX0NvbG9yICYgY29sb3IsIEZYX0lOVDMyIG5UcmFuc3BhcmFuY3kpOworCXN0YXRpYyB2b2lkCQkJCQkJCQlEcmF3RmlsbFJlY3QoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwKKwkJCQkJCQkJCQkJCQkJY29uc3QgQ1BERl9SZWN0ICYgcmVjdCxjb25zdCBGWF9DT0xPUlJFRiAmIGNvbG9yKTsKKwlzdGF0aWMgdm9pZAkJCQkJCQkJRHJhd1N0cm9rZVJlY3QoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSxjb25zdCBDUERGX1JlY3QgJiByZWN0LAorCQkJCQkJCQkJCQkJCQljb25zdCBGWF9DT0xPUlJFRiAmIGNvbG9yLCBGWF9GTE9BVCBmV2lkdGgpOworCXN0YXRpYyB2b2lkCQkJCQkJCQlEcmF3U3Ryb2tlTGluZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLAorCQkJCQkJCQkJCQkJCQljb25zdCBDUERGX1BvaW50ICYgcHRNb3ZlVG8sIGNvbnN0IENQREZfUG9pbnQgJiBwdExpbmVUbywgY29uc3QgRlhfQ09MT1JSRUYgJiBjb2xvciwgRlhfRkxPQVQgZldpZHRoKTsKKwlzdGF0aWMgdm9pZAkJCQkJCQkJRHJhd0JvcmRlcihDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLAorCQkJCQkJCQkJCQkJY29uc3QgQ1BERl9SZWN0ICYgcmVjdCwgRlhfRkxPQVQgZldpZHRoLAorCQkJCQkJCQkJCQkJY29uc3QgQ1BXTF9Db2xvciAmIGNvbG9yLCBjb25zdCBDUFdMX0NvbG9yICYgY3JMZWZ0VG9wLCBjb25zdCBDUFdMX0NvbG9yICYgY3JSaWdodEJvdHRvbSwKKwkJCQkJCQkJCQkJCUZYX0lOVDMyIG5TdHlsZSwgY29uc3QgQ1BXTF9EYXNoICYgZGFzaCwgRlhfSU5UMzIgblRyYW5zcGFyYW5jeSk7CisJc3RhdGljIHZvaWQJCQkJCQkJCURyYXdGaWxsQXJlYShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLAorCQkJCQkJCQkJCQkJCQljb25zdCBDUERGX1BvaW50KiBwUHRzLCBGWF9JTlQzMiBuQ291bnQsIGNvbnN0IEZYX0NPTE9SUkVGJiBjb2xvcik7CisJc3RhdGljIHZvaWQJCQkJCQkJCURyYXdTaGFkb3coQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwKKwkJCQkJCQkJCQkJCQkJRlhfQk9PTCBiVmVydGljYWwsIEZYX0JPT0wgYkhvcml6b250YWwsIENQREZfUmVjdCByZWN0LAorCQkJCQkJCQkJCQkJCQlGWF9JTlQzMiBuVHJhbnNwYXJhbmN5LCBGWF9JTlQzMiBuU3RhcnRHcmF5LCBGWF9JTlQzMiBuRW5kR3JheSk7CisJc3RhdGljIHZvaWQJCQkJCQkJCURyYXdFZGl0U3BlbGxDaGVjayhDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLCBJRlhfRWRpdCogcEVkaXQsIAorCQkJCQkJCQkJCQkJCQljb25zdCBDUERGX1JlY3QmIHJjQ2xpcCwgY29uc3QgQ1BERl9Qb2ludCYgcHRPZmZzZXQsIGNvbnN0IENQVlRfV29yZFJhbmdlKiBwUmFuZ2UsIAorCQkJCQkJCQkJCQkJCQlJUFdMX1NwZWxsQ2hlY2sqIHBTcGVsbENoZWNrKTsKK3B1YmxpYzoKKwlzdGF0aWMgdm9pZAkJCQkJCQkJQ29udmVydENNWUsyUkdCKEZYX0ZMT0FUIGRDLEZYX0ZMT0FUIGRNLEZYX0ZMT0FUIGRZLEZYX0ZMT0FUIGRLLEZYX0ZMT0FUICZkUixGWF9GTE9BVCAmZEcsRlhfRkxPQVQgJmRCKTsKKwlzdGF0aWMgdm9pZAkJCQkJCQkJQ29udmVydFJHQjJDTVlLKEZYX0ZMT0FUIGRSLEZYX0ZMT0FUIGRHLEZYX0ZMT0FUIGRCLEZYX0ZMT0FUICZkQyxGWF9GTE9BVCAmZE0sRlhfRkxPQVQgJmRZLEZYX0ZMT0FUICZkSyk7CisJCisJc3RhdGljIHZvaWQJCQkJCQkJCUNvbnZlcnRSR0IyR1JBWShGWF9GTE9BVCBkUixGWF9GTE9BVCBkRyxGWF9GTE9BVCBkQixGWF9GTE9BVCAmZEdyYXkpOworCXN0YXRpYyB2b2lkCQkJCQkJCQlDb252ZXJ0R1JBWTJSR0IoRlhfRkxPQVQgZEdyYXksRlhfRkxPQVQgJmRSLEZYX0ZMT0FUICZkRyxGWF9GTE9BVCAmZEIpOworCisJc3RhdGljIHZvaWQJCQkJCQkJCUNvbnZlcnRDTVlLMkdSQVkoRlhfRkxPQVQgZEMsRlhfRkxPQVQgZE0sRlhfRkxPQVQgZFksRlhfRkxPQVQgZEssRlhfRkxPQVQgJmRHcmF5KTsKKwlzdGF0aWMgdm9pZAkJCQkJCQkJQ29udmVydEdSQVkyQ01ZSyhGWF9GTE9BVCBkR3JheSxGWF9GTE9BVCAmZEMsRlhfRkxPQVQgJmRNLEZYX0ZMT0FUICZkWSxGWF9GTE9BVCAmZEspOworCisJc3RhdGljIHZvaWQJCQkJCQkJCVBXTENvbG9yVG9BUkdCKGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yLCBGWF9JTlQzMiYgYWxwaGEsIEZYX0ZMT0FUJiByZWQsIEZYX0ZMT0FUJiBncmVlbiwgRlhfRkxPQVQmIGJsdWUpOworCitwdWJsaWM6CisJc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZXRJY29uQXBwU3RyZWFtKEZYX0lOVDMyIG5UeXBlLCBjb25zdCBDUERGX1JlY3QmIHJlY3QsIGNvbnN0IENQV0xfQ29sb3ImIGNyRmlsbCwgCisJCQkJCQkJCQkJCQljb25zdCBDUFdMX0NvbG9yJiBjclN0cm9rZSA9IFBXTF9ERUZBVUxUX0JMQUNLQ09MT1IpOworCXN0YXRpYyB2b2lkCQkJCQkJCQlEcmF3SWNvbkFwcFN0cmVhbShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLAorCQkJCQkJCQkJCQkJRlhfSU5UMzIgblR5cGUsIGNvbnN0IENQREZfUmVjdCAmIHJlY3QsIGNvbnN0IENQV0xfQ29sb3ImIGNyRmlsbCwgCisJCQkJCQkJCQkJCQljb25zdCBDUFdMX0NvbG9yJiBjclN0cm9rZSwgY29uc3QgRlhfSU5UMzIgblRyYW5zcGFyYW5jeSk7CisKK3ByaXZhdGU6CisJc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZXRBcHBTdHJlYW1Gcm9tQXJyYXkoY29uc3QgQ1BXTF9QYXRoRGF0YSogcFBhdGhEYXRhLCBGWF9JTlQzMiBuQ291bnQpOworCXN0YXRpYyB2b2lkCQkJCQkJCQlHZXRQYXRoRGF0YUZyb21BcnJheShDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQV0xfUGF0aERhdGEqIHBQYXRoRGF0YSwgRlhfSU5UMzIgbkNvdW50KTsKKworCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0QXBwU3RyZWFtX0NoZWNrKGNvbnN0IENQREZfUmVjdCAmIHJjQkJveCwgY29uc3QgQ1BXTF9Db2xvciAmIGNyVGV4dCk7CisJc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZXRBcHBTdHJlYW1fQ2lyY2xlKGNvbnN0IENQREZfUmVjdCAmIHJjQkJveCwgY29uc3QgQ1BXTF9Db2xvciAmIGNyVGV4dCk7CisJc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZXRBcHBTdHJlYW1fQ3Jvc3MoY29uc3QgQ1BERl9SZWN0ICYgcmNCQm94LCBjb25zdCBDUFdMX0NvbG9yICYgY3JUZXh0KTsKKwlzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcJCQkJCUdldEFwcFN0cmVhbV9EaWFtb25kKGNvbnN0IENQREZfUmVjdCAmIHJjQkJveCwgY29uc3QgQ1BXTF9Db2xvciAmIGNyVGV4dCk7CisJc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZXRBcHBTdHJlYW1fU3F1YXJlKGNvbnN0IENQREZfUmVjdCAmIHJjQkJveCwgY29uc3QgQ1BXTF9Db2xvciAmIGNyVGV4dCk7CisJc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZXRBcHBTdHJlYW1fU3Rhcihjb25zdCBDUERGX1JlY3QgJiByY0JCb3gsIGNvbnN0IENQV0xfQ29sb3IgJiBjclRleHQpOworCisJc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZXRBUF9DaGVjayhjb25zdCBDUERGX1JlY3QgJiBjckJCb3gpOworCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0QVBfQ2lyY2xlKGNvbnN0IENQREZfUmVjdCAmIGNyQkJveCk7CisJc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZXRBUF9Dcm9zcyhjb25zdCBDUERGX1JlY3QgJiBjckJCb3gpOworCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0QVBfRGlhbW9uZChjb25zdCBDUERGX1JlY3QgJiBjckJCb3gpOworCXN0YXRpYyBDRlhfQnl0ZVN0cmluZwkJCQkJR2V0QVBfU3F1YXJlKGNvbnN0IENQREZfUmVjdCAmIGNyQkJveCk7CisJc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZXRBUF9TdGFyKGNvbnN0IENQREZfUmVjdCAmIGNyQkJveCk7CisJc3RhdGljIENGWF9CeXRlU3RyaW5nCQkJCQlHZXRBUF9IYWxmQ2lyY2xlKGNvbnN0IENQREZfUmVjdCAmIGNyQkJveCxGWF9GTE9BVCBmUm90YXRlKTsKKworCXN0YXRpYyB2b2lkCQkJCQkJCQlHZXRHcmFwaGljc19DaGVja21hcmsoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKTsKKwlzdGF0aWMgdm9pZAkJCQkJCQkJR2V0R3JhcGhpY3NfQ2lyY2xlKENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSk7CisJc3RhdGljIHZvaWQJCQkJCQkJCUdldEdyYXBoaWNzX0NvbW1lbnQoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKTsKKwlzdGF0aWMgdm9pZAkJCQkJCQkJR2V0R3JhcGhpY3NfQ3Jvc3MoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKTsKKwlzdGF0aWMgdm9pZAkJCQkJCQkJR2V0R3JhcGhpY3NfSGVscChDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpOworCXN0YXRpYyB2b2lkCQkJCQkJCQlHZXRHcmFwaGljc19JbnNlcnRUZXh0KENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSk7CisJc3RhdGljIHZvaWQJCQkJCQkJCUdldEdyYXBoaWNzX0tleShDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpOworCXN0YXRpYyB2b2lkCQkJCQkJCQlHZXRHcmFwaGljc19OZXdQYXJhZ3JhcGgoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKTsKKwlzdGF0aWMgdm9pZAkJCQkJCQkJR2V0R3JhcGhpY3NfVGV4dE5vdGUoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKTsKKwlzdGF0aWMgdm9pZAkJCQkJCQkJR2V0R3JhcGhpY3NfUGFyYWdyYXBoKENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSk7CisJc3RhdGljIHZvaWQJCQkJCQkJCUdldEdyYXBoaWNzX1JpZ2h0QXJyb3coQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKTsKKwlzdGF0aWMgdm9pZAkJCQkJCQkJR2V0R3JhcGhpY3NfUmlnaHRQb2ludGVyKENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSk7CisJc3RhdGljIHZvaWQJCQkJCQkJCUdldEdyYXBoaWNzX1N0YXIoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKTsKKwlzdGF0aWMgdm9pZAkJCQkJCQkJR2V0R3JhcGhpY3NfVXBBcnJvdyhDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpOworCXN0YXRpYyB2b2lkCQkJCQkJCQlHZXRHcmFwaGljc19VcExlZnRBcnJvdyhDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpOworCXN0YXRpYyB2b2lkCQkJCQkJCQlHZXRHcmFwaGljc19HcmFwaChDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpOworCXN0YXRpYyB2b2lkCQkJCQkJCQlHZXRHcmFwaGljc19QYXBlcmNsaXAoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKTsKKwlzdGF0aWMgdm9pZAkJCQkJCQkJR2V0R3JhcGhpY3NfQXR0YWNobWVudChDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpOworCXN0YXRpYyB2b2lkCQkJCQkJCQlHZXRHcmFwaGljc19UYWcoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKTsKKwlzdGF0aWMgdm9pZAkJCQkJCQkJR2V0R3JhcGhpY3NfRm94aXQoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKTsKK307CisKKyNlbmRpZiAvLyAhZGVmaW5lZChBRlhfUFdMX1VUSUxTX0hfX0QzMjgxMkFEX0E4NzVfNEUwOF85RDNDXzBBNTcwMjA5ODdDNl9fSU5DTFVERURfKQorCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1duZC5oIGIvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfV25kLmgKaW5kZXggN2U5ZTI1ZC4uYzNkZDliNyAxMDA2NDQKLS0tIGEvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfV25kLmgKKysrIGIvZnBkZnNkay9pbmNsdWRlL3BkZndpbmRvdy9QV0xfV25kLmgKQEAgLTEsNDkzICsxLDQ5MyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2lmbmRlZiBfUFdMX1dORF9IXw0KLSNkZWZpbmUgX1BXTF9XTkRfSF8NCi0NCi1jbGFzcyBJUFdMX1Byb3ZpZGVyOw0KLWNsYXNzIENQV0xfV25kOw0KLWNsYXNzIENQV0xfTXNnQ29udHJvbDsNCi1jbGFzcyBDUFdMX1duZDsNCi1jbGFzcyBDUFdMX1Njcm9sbEJhcjsNCi1jbGFzcyBDUFdMX1RpbWVyOw0KLWNsYXNzIENQV0xfVGltZXJIYW5kbGVyOw0KLWNsYXNzIElQV0xfU3BlbGxDaGVjazsNCi1jbGFzcyBJRlhfU3lzdGVtSGFuZGxlcjsNCi0NCi0jaWZkZWYgRlhfUkVBREVSX0RMTA0KLQkjaWZkZWYgUFdMX0VYUE9SVA0KLQkJCSNkZWZpbmUgUFdMX0NMQVNTCQlfX2RlY2xzcGVjKGRsbGV4cG9ydCkNCi0JCQkjZGVmaW5lIFBXTF9GVU5DVElPTglQV0xfQ0xBU1MJDQotCQkjZWxzZQ0KLQkJCSNkZWZpbmUgUFdMX0NMQVNTDQotCQkJI2RlZmluZSBQV0xfRlVOQ1RJT04NCi0JI2VuZGlmDQotI2Vsc2UNCi0JI2RlZmluZSBQV0xfQ0xBU1MNCi0JI2RlZmluZSBQV0xfRlVOQ1RJT04NCi0jZW5kaWYNCi0NCi0vL3dpbmRvdyBzdHlsZXMNCi0jZGVmaW5lIFBXU19DSElMRAkJCQkJCQkweDgwMDAwMDAwTA0KLSNkZWZpbmUgUFdTX0JPUkRFUgkJCQkJCQkweDQwMDAwMDAwTA0KLSNkZWZpbmUgUFdTX0JBQ0tHUk9VTkQJCQkJCQkweDIwMDAwMDAwTA0KLSNkZWZpbmUgUFdTX0hTQ1JPTEwJCQkJCQkJMHgxMDAwMDAwMEwNCi0jZGVmaW5lIFBXU19WU0NST0xMCQkJCQkJCTB4MDgwMDAwMDBMDQotI2RlZmluZSBQV1NfVklTSUJMRQkJCQkJCQkweDA0MDAwMDAwTA0KLSNkZWZpbmUgUFdTX0RJU0FCTEUJCQkJCQkJMHgwMjAwMDAwMEwNCi0jZGVmaW5lIFBXU19SRUFET05MWQkJCQkJCTB4MDEwMDAwMDBMDQotI2RlZmluZSBQV1NfQVVUT0ZPTlRTSVpFCQkJCQkweDAwODAwMDAwTA0KLSNkZWZpbmUgUFdTX0FVVE9UUkFOU1BBUkVOVAkJCQkJMHgwMDQwMDAwMEwNCi0jZGVmaW5lIFBXU19OT1JFRlJFU0hDTElQCQkJCQkweDAwMjAwMDAwTA0KLQ0KLS8vZWRpdCBhbmQgbGFiZWwgc3R5bGVzDQotI2RlZmluZSBQRVNfTVVMVElMSU5FCQkJCQkJMHgwMDAxTA0KLSNkZWZpbmUgUEVTX1BBU1NXT1JECQkJCQkJMHgwMDAyTA0KLSNkZWZpbmUgUEVTX0xFRlQJCQkJCQkJMHgwMDA0TA0KLSNkZWZpbmUgUEVTX1JJR0hUCQkJCQkJCTB4MDAwOEwNCi0jZGVmaW5lIFBFU19NSURETEUJCQkJCQkJMHgwMDEwTA0KLSNkZWZpbmUgUEVTX1RPUAkJCQkJCQkJMHgwMDIwTA0KLSNkZWZpbmUgUEVTX0JPVFRPTQkJCQkJCQkweDAwNDBMDQotI2RlZmluZSBQRVNfQ0VOVEVSCQkJCQkJCTB4MDA4MEwNCi0jZGVmaW5lIFBFU19DSEFSQVJSQVkJCQkJCQkweDAxMDBMDQotI2RlZmluZSBQRVNfQVVUT1NDUk9MTAkJCQkJCTB4MDIwMEwNCi0jZGVmaW5lIFBFU19BVVRPUkVUVVJOCQkJCQkJMHgwNDAwTA0KLSNkZWZpbmUgUEVTX1VORE8JCQkJCQkJMHgwODAwTA0KLSNkZWZpbmUgUEVTX1JJQ0gJCQkJCQkJMHgxMDAwTA0KLSNkZWZpbmUgUEVTX1NQRUxMQ0hFQ0sJCQkJCQkweDIwMDBMDQotI2RlZmluZSBQRVNfVEVYVE9WRVJGTE9XCQkJCQkweDQwMDBMDQotI2RlZmluZSBQRVNfTk9SRUFECQkJCQkJCTB4ODAwMEwNCi0NCi0vL2xpc3Rib3ggc3R5bGVzDQotI2RlZmluZSBQTEJTX01VTFRJUExFU0VMCQkJCQkweDAwMDFMDQotI2RlZmluZSBQTEJTX0hPVkVSU0VMCQkJCQkJMHgwMDA4TA0KLQ0KLS8vY29tYm9ib3ggc3R5bGVzDQotI2RlZmluZSBQQ0JTX0FMTE9XQ1VTVE9NVEVYVAkJCQkweDAwMDFMDQotDQotLy9yaWNoZWRpdCBzdHlsZXMNCi0jZGVmaW5lIFBSRVNfTVVMVElMSU5FCQkJCQkJMHgwMDAxTA0KLSNkZWZpbmUgUFJFU19BVVRPUkVUVVJOCQkJCQkJMHgwMDAyTA0KLSNkZWZpbmUgUFJFU19BVVRPU0NST0xMCQkJCQkJMHgwMDA0TA0KLSNkZWZpbmUgUFJFU19TUEVMTENIRUNLCQkJCQkJMHgwMDA4TA0KLSNkZWZpbmUgUFJFU19VTkRPCQkJCQkJCTB4MDEwMEwNCi0jZGVmaW5lIFBSRVNfTVVMVElQQUdFUwkJCQkJCTB4MDIwMEwNCi0jZGVmaW5lIFBSRVNfVEVYVE9WRVJGTE9XCQkJCQkweDA0MDBMDQotDQotLy9ib3JkZXIgc3R5bGUNCi0jZGVmaW5lIFBCU19TT0xJRAkJCQkJCQkwDQotI2RlZmluZSBQQlNfREFTSAkJCQkJCQkxDQotI2RlZmluZSBQQlNfQkVWRUxFRAkJCQkJCQkyDQotI2RlZmluZSBQQlNfSU5TRVQJCQkJCQkJMw0KLSNkZWZpbmUgUEJTX1VOREVSTElORUQJCQkJCQk0DQotI2RlZmluZSBQQlNfU0hBRE9XCQkJCQkJCTUNCi0NCi0vL25vdGlmaWNhdGlvbiBtZXNzYWdlcw0KLSNkZWZpbmUgUE5NX0FERENISUxECQkJCQkJMHgwMDAwMDAwMEwNCi0jZGVmaW5lIFBOTV9SRU1PVkVDSElMRAkJCQkJCTB4MDAwMDAwMDFMDQotI2RlZmluZSBQTk1fU0VUU0NST0xMSU5GTwkJCQkJMHgwMDAwMDAwMkwNCi0jZGVmaW5lIFBOTV9TRVRTQ1JPTExQT1MJCQkJCTB4MDAwMDAwMDNMDQotI2RlZmluZSBQTk1fU0NST0xMV0lORE9XCQkJCQkweDAwMDAwMDA0TA0KLSNkZWZpbmUgUE5NX0xCVVRUT05ET1dOCQkJCQkJMHgwMDAwMDAwNUwNCi0jZGVmaW5lIFBOTV9MQlVUVE9OVVAJCQkJCQkweDAwMDAwMDA2TA0KLSNkZWZpbmUgUE5NX01PVVNFTU9WRQkJCQkJCTB4MDAwMDAwMDdMDQotI2RlZmluZQlQTk1fTk9URVJFU0VUCQkJCQkJMHgwMDAwMDAwOEwNCi0jZGVmaW5lIFBOTV9TRVRDQVJFVElORk8JCQkJCTB4MDAwMDAwMDlMDQotI2RlZmluZSBQTk1fU0VMQ0hBTkdFRAkJCQkJCTB4MDAwMDAwMEFMDQotI2RlZmluZQlQTk1fTk9URUVESVRDSEFOR0VECQkJCQkweDAwMDAwMDBCTA0KLQ0KLSNkZWZpbmUgUFdMX0NMQVNTTkFNRV9FRElUCQkJCQkiQ1BXTF9FZGl0Ig0KLQ0KLXN0cnVjdCBDUFdMX0Rhc2gNCi17DQotCUNQV0xfRGFzaChGWF9JTlQzMiBkYXNoLCBGWF9JTlQzMiBnYXAsIEZYX0lOVDMyIHBoYXNlKSA6IG5EYXNoKGRhc2gpLCBuR2FwKGdhcCksIG5QaGFzZShwaGFzZSkNCi0Je30NCi0NCi0JRlhfSU5UMzIJCQluRGFzaDsNCi0JRlhfSU5UMzIJCQluR2FwOw0KLQlGWF9JTlQzMgkJCW5QaGFzZTsNCi19Ow0KLQ0KLXN0cnVjdCBQV0xfQ0xBU1MgQ1BXTF9Db2xvcg0KLXsNCi0JQ1BXTF9Db2xvcihGWF9JTlQzMiB0eXBlID0gQ09MT1JUWVBFX1RSQU5TUEFSRU5ULCBGWF9GTE9BVCBjb2xvcjEgPSAwLjBmLCBGWF9GTE9BVCBjb2xvcjIgPSAwLjBmLCBGWF9GTE9BVCBjb2xvcjMgPSAwLjBmLCBGWF9GTE9BVCBjb2xvcjQgPSAwLjBmKQ0KLQkJOiBuQ29sb3JUeXBlKHR5cGUpLCBmQ29sb3IxKGNvbG9yMSksIGZDb2xvcjIoY29sb3IyKSwgZkNvbG9yMyhjb2xvcjMpLCBmQ29sb3I0KGNvbG9yNCkNCi0Je30NCi0NCi0JQ1BXTF9Db2xvcihGWF9JTlQzMiByLCBGWF9JTlQzMiBnLCBGWF9JTlQzMiBiKSA6DQotCQluQ29sb3JUeXBlKENPTE9SVFlQRV9SR0IpLCBmQ29sb3IxKHIvMjU1LjBmKSwgZkNvbG9yMihnLzI1NS4wZiksIGZDb2xvcjMoYi8yNTUuMGYpLCBmQ29sb3I0KDApDQotCXt9DQotCQ0KLQl2b2lkIENvbnZlcnRDb2xvclR5cGUoRlhfSU5UMzIgbkNvbG9yVHlwZSk7DQotDQotCS8qDQotCUNPTE9SVFlQRV9UUkFOU1BBUkVOVA0KLQlDT0xPUlRZUEVfUkdCDQotCUNPTE9SVFlQRV9DTVlLDQotCUNPTE9SVFlQRV9HUkFZDQotCSovDQotCUZYX0lOVDMyCQkJCQluQ29sb3JUeXBlOyANCi0JRlhfRkxPQVQJCQkJCWZDb2xvcjEsZkNvbG9yMixmQ29sb3IzLGZDb2xvcjQ7DQotfTsNCi0NCi1pbmxpbmUgRlhfQk9PTCBvcGVyYXRvciA9PSAoY29uc3QgQ1BXTF9Db2xvciAmYzEsIGNvbnN0IENQV0xfQ29sb3IgJmMyKQ0KLXsNCi0JcmV0dXJuIGMxLm5Db2xvclR5cGUgPT0gYzIubkNvbG9yVHlwZSAmJiANCi0JCWMxLmZDb2xvcjEgLSBjMi5mQ29sb3IxIDwgMC4wMDAxICYmIGMxLmZDb2xvcjEgLSBjMi5mQ29sb3IxID4gLTAuMDAwMSAmJg0KLQkJYzEuZkNvbG9yMiAtIGMyLmZDb2xvcjIgPCAwLjAwMDEgJiYgYzEuZkNvbG9yMiAtIGMyLmZDb2xvcjIgPiAtMC4wMDAxICYmDQotCQljMS5mQ29sb3IzIC0gYzIuZkNvbG9yMyA8IDAuMDAwMSAmJiBjMS5mQ29sb3IzIC0gYzIuZkNvbG9yMyA+IC0wLjAwMDEgJiYNCi0JCWMxLmZDb2xvcjQgLSBjMi5mQ29sb3I0IDwgMC4wMDAxICYmIGMxLmZDb2xvcjQgLSBjMi5mQ29sb3I0ID4gLTAuMDAwMTsNCi19DQotDQotaW5saW5lIEZYX0JPT0wgb3BlcmF0b3IgIT0gKGNvbnN0IENQV0xfQ29sb3IgJmMxLCBjb25zdCBDUFdMX0NvbG9yICZjMikNCi17DQotCXJldHVybiAhb3BlcmF0b3IgPT0gKGMxLCBjMik7DQotfQ0KLQ0KLSNkZWZpbmUgUFdMX1NDUk9MTEJBUl9XSURUSAkJCQkJMTIuMGYNCi0jZGVmaW5lIFBXTF9TQ1JPTExCQVJfQlVUVE9OX1dJRFRICQkJOS4wZg0KLSNkZWZpbmUgUFdMX1NDUk9MTEJBUl9QT1NCVVRUT05fTUlOV0lEVEgJMi4wZg0KLSNkZWZpbmUgUFdMX1NDUk9MTEJBUl9UUkFOU1BBUkFOQ1kJCQkxNTANCi0jZGVmaW5lIFBXTF9TQ1JPTExCQVJfQktDT0xPUgkJCQlDUFdMX0NvbG9yKENPTE9SVFlQRV9SR0IsMjIwLjBmLzI1NS4wZiwyMjAuMGYvMjU1LjBmLDIyMC4wZi8yNTUuMGYpDQotI2RlZmluZSBQV0xfREVGQVVMVF9TRUxURVhUQ09MT1IJCQlDUFdMX0NvbG9yKENPTE9SVFlQRV9SR0IsMSwxLDEpDQotI2RlZmluZSBQV0xfREVGQVVMVF9TRUxCQUNLQ09MT1IJCQlDUFdMX0NvbG9yKENPTE9SVFlQRV9SR0IsMCw1MS4wZi8yNTUuMGYsMTEzLjBmLzI1NS4wZikNCi0jZGVmaW5lIFBXTF9ERUZBVUxUX0JBQ0tDT0xPUgkJCQlQV0xfREVGQVVMVF9TRUxURVhUQ09MT1INCi0jZGVmaW5lIFBXTF9ERUZBVUxUX1RFWFRDT0xPUgkJCQlDUFdMX0NvbG9yKENPTE9SVFlQRV9SR0IsMCwwLDApDQotI2RlZmluZSBQV0xfREVGQVVMVF9GT05UU0laRQkJCQk5LjBmDQotI2RlZmluZSBQV0xfREVGQVVMVF9CTEFDS0NPTE9SCQkJCUNQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMCkNCi0jZGVmaW5lIFBXTF9ERUZBVUxUX1dISVRFQ09MT1IJCQkJQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwxKQ0KLSNkZWZpbmUgUFdMX0RFRkFVTFRfSEVBVllHUkFZQ09MT1IJCQlDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLDAuNTApDQotI2RlZmluZSBQV0xfREVGQVVMVF9MSUdIVEdSQVlDT0xPUgkJCUNQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMC43NSkNCi0jZGVmaW5lIFBXTF9UUklBTkdMRV9IQUxGTEVOCQkJCTIuMGYNCi0jZGVmaW5lCVBXTF9DQkJVVFRPTl9UUklBTkdMRV9IQUxGTEVOCQkzLjBmDQotI2RlZmluZSBQV0xfSU5WQUxJREFURV9JTkZMQVRFCQkJCTINCi0NCi1jbGFzcyBJUFdMX1NwZWxsQ2hlY2sNCi17DQotcHVibGljOg0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCQkJQ2hlY2tXb3JkKEZYX0xQQ1NUUiBzV29yZCkgPSAwOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQkJU3VnZ2VzdFdvcmRzKEZYX0xQQ1NUUiBzV29yZCwgQ0ZYX0J5dGVTdHJpbmdBcnJheSAmIHNTdWdnZXN0KSA9IDA7CQ0KLX07DQotDQotY2xhc3MgSVBXTF9Qcm92aWRlcg0KLXsNCi1wdWJsaWM6DQotCS8vZ2V0IGEgbWF0cml4IHdoaWNoIG1hcCB1c2VyIHNwYWNlIHRvIENXbmQgY2xpZW50IHNwYWNlDQotCXZpcnR1YWwgQ1BERl9NYXRyaXgJCQkJCQlHZXRXaW5kb3dNYXRyaXgodm9pZCogcEF0dGFjaGVkRGF0YSkgPSAwOw0KLQ0KLQkvKg0KLQkwIEwiJlVuZG9cdEN0cmwrWiINCi0JMSBMIiZSZWRvXHRDdHJsK1NoaWZ0K1oiDQotCTIgTCJDdSZ0XHRDdHJsK1giDQotCTMgTCImQ29weVx0Q3RybCtDIg0KLQk0IEwiJlBhc3RlXHRDdHJsK1YiDQotCTUgTCImRGVsZXRlIg0KLQk2ICBMIiZTZWxlY3QgQWxsXHRDdHJsK0EiDQotCSovDQotCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCQkJCUxvYWRQb3B1cE1lbnVTdHJpbmcoRlhfSU5UMzIgbkluZGV4KSA9IDA7DQotfTsNCi0NCi1jbGFzcyBJUFdMX0ZvY3VzSGFuZGxlcg0KLXsNCi1wdWJsaWM6DQotCXZpcnR1YWwgdm9pZAkJCQkJCQlPblNldEZvY3VzKENQV0xfV25kKiBwV25kKSA9IDA7DQotCXZpcnR1YWwgdm9pZAkJCQkJCQlPbktpbGxGb2N1cyhDUFdMX1duZCogcFduZCkgPSAwOw0KLX07DQotDQotc3RydWN0IFBXTF9DUkVBVEVQQVJBTQ0KLXsNCi1wdWJsaWM6DQotCVBXTF9DUkVBVEVQQVJBTSgpIDogcmNSZWN0V25kKDAsMCwwLDApLA0KLQkJcFN5c3RlbUhhbmRsZXIoTlVMTCksDQotCQlwRm9udE1hcChOVUxMKSwNCi0JCXBQcm92aWRlcihOVUxMKSwNCi0JCXBGb2N1c0hhbmRsZXIoTlVMTCksDQotCQlkd0ZsYWdzKDApLA0KLQkJc0JhY2tncm91bmRDb2xvcigpLA0KLQkJaEF0dGFjaGVkV25kKE5VTEwpLA0KLQkJcFNwZWxsQ2hlY2soTlVMTCksDQotCQluQm9yZGVyU3R5bGUoUEJTX1NPTElEKSwNCi0JCWR3Qm9yZGVyV2lkdGgoMSksDQotCQlzQm9yZGVyQ29sb3IoKSwNCi0JCXNUZXh0Q29sb3IoKSwNCi0JCXNUZXh0U3Ryb2tlQ29sb3IoKSwNCi0JCW5UcmFuc3BhcmVuY3koMjU1KSwNCi0JCWZGb250U2l6ZShQV0xfREVGQVVMVF9GT05UU0laRSksDQotCQlzRGFzaCgzLDAsMCksCQ0KLQkJcEF0dGFjaGVkRGF0YShOVUxMKSwNCi0JCXBQYXJlbnRXbmQoTlVMTCksDQotCQlwTXNnQ29udHJvbChOVUxMKSwNCi0JCWVDdXJzb3JUeXBlKEZYQ1RfQVJST1cpLA0KLQkJbXRDaGlsZCgxLDAsMCwxLDAsMCkNCi0Jew0KLQl9DQotDQotCUNQREZfUmVjdAkJCQlyY1JlY3RXbmQ7CQkJCS8vcmVxdWlyZWQJDQotCUlGWF9TeXN0ZW1IYW5kbGVyKgkJcFN5c3RlbUhhbmRsZXI7CQkJLy9yZXF1aXJlZA0KLQlJRlhfRWRpdF9Gb250TWFwKgkJcEZvbnRNYXA7CQkJCS8vcmVxdWlyZWQgZm9yIHRleHQgd2luZG93DQotCUlQV0xfUHJvdmlkZXIqCQkJcFByb3ZpZGVyOwkJCQkvL3JlcXVpcmVkIGZvciBzZWxmIGNvb3JkaW5hdGUNCi0JSVBXTF9Gb2N1c0hhbmRsZXIqCQlwRm9jdXNIYW5kbGVyOwkJCS8vb3B0aW9uYWwNCi0JRlhfRFdPUkQJCQkJZHdGbGFnczsJCQkJLy9vcHRpb25hbA0KLQlDUFdMX0NvbG9yCQkJCXNCYWNrZ3JvdW5kQ29sb3I7CQkvL29wdGlvbmFsDQotCUZYX0hXTkQJCQkJCWhBdHRhY2hlZFduZDsJCQkvL3JlcXVpcmVkIGZvciBuby1yZWFkZXIgZnJhbWV3b3JrDQotCUlQV0xfU3BlbGxDaGVjayoJCXBTcGVsbENoZWNrOwkJCS8vcmVxdWlyZWQgZm9yIHNwZWxsY2hlY2tpbmcNCi0JRlhfSU5UMzIJCQkJbkJvcmRlclN0eWxlOwkJCS8vb3B0aW9uYWwNCi0JRlhfSU5UMzIJCQkJZHdCb3JkZXJXaWR0aDsJCQkvL29wdGlvbmFsDQotCUNQV0xfQ29sb3IJCQkJc0JvcmRlckNvbG9yOwkJCS8vb3B0aW9uYWwNCi0JQ1BXTF9Db2xvcgkJCQlzVGV4dENvbG9yOwkJCQkvL29wdGlvbmFsDQotCUNQV0xfQ29sb3IJCQkJc1RleHRTdHJva2VDb2xvcjsJCS8vb3B0aW9uYWwNCi0JRlhfSU5UMzIJCQkJblRyYW5zcGFyZW5jeTsJCQkvL29wdGlvbmFsDQotCUZYX0ZMT0FUCQkJCWZGb250U2l6ZTsJCQkJLy9vcHRpb25hbA0KLQlDUFdMX0Rhc2gJCQkJc0Rhc2g7CQkJCQkvL29wdGlvbmFsDQotCXZvaWQqCQkJCQlwQXR0YWNoZWREYXRhOwkJCS8vb3B0aW9uYWwNCi0JQ1BXTF9XbmQqCQkJCXBQYXJlbnRXbmQ7CQkJCS8vaWdub3JlDQotCUNQV0xfTXNnQ29udHJvbCoJCXBNc2dDb250cm9sOwkJCS8vaWdub3JlDQotCUZYX0lOVDMyCQkJCWVDdXJzb3JUeXBlOwkJCS8vaWdub3JlDQotCUNQREZfTWF0cml4CQkJCW10Q2hpbGQ7CQkJCS8vaWdub3JlDQotfTsNCi0NCi1jbGFzcyBDUFdMX1RpbWVyDQotew0KLXB1YmxpYzoNCi0JQ1BXTF9UaW1lcihDUFdMX1RpbWVySGFuZGxlciogcEF0dGFjaGVkLCBJRlhfU3lzdGVtSGFuZGxlciogcFN5c3RlbUhhbmRsZXIpOw0KLQl2aXJ0dWFsIH5DUFdMX1RpbWVyKCk7DQotDQotCUZYX0lOVDMyCQkJCQkJCVNldFBXTFRpbWVyKEZYX0lOVDMyIG5FbGFwc2UpOw0KLQl2b2lkCQkJCQkJCQlLaWxsUFdMVGltZXIoKTsNCi0Jc3RhdGljIHZvaWQgCQkJCQkJVGltZXJQcm9jKEZYX0lOVDMyIGlkRXZlbnQpOw0KLQ0KLXByaXZhdGU6DQotCUZYX0lOVDMyCQkJCQkJCW1fblRpbWVySUQ7CQ0KLQlDUFdMX1RpbWVySGFuZGxlcioJCQkJCW1fcEF0dGFjaGVkOw0KLQlJRlhfU3lzdGVtSGFuZGxlcioJCQkJCW1fcFN5c3RlbUhhbmRsZXI7DQotfTsNCi0NCi1jbGFzcyBQV0xfQ0xBU1MgQ1BXTF9UaW1lckhhbmRsZXINCi17DQotcHVibGljOg0KLQlDUFdMX1RpbWVySGFuZGxlcigpOw0KLQl2aXJ0dWFsIH5DUFdMX1RpbWVySGFuZGxlcigpOw0KLQ0KLQl2b2lkCQkJCQkJCQlCZWdpblRpbWVyKEZYX0lOVDMyIG5FbGFwc2UpOw0KLQl2b2lkCQkJCQkJCQlFbmRUaW1lcigpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCQlUaW1lclByb2MoKTsNCi0JdmlydHVhbCBJRlhfU3lzdGVtSGFuZGxlcioJCQlHZXRTeXN0ZW1IYW5kbGVyKCkgY29uc3QgPSAwOw0KLQ0KLXByaXZhdGU6DQotCUNQV0xfVGltZXIqCQkJCQkJCW1fcFRpbWVyOw0KLX07DQotDQotY2xhc3MgUFdMX0NMQVNTIENQV0xfV25kIDogcHVibGljIENQV0xfVGltZXJIYW5kbGVyDQotew0KLQlmcmllbmQgY2xhc3MgQ1BXTF9Nc2dDb250cm9sOw0KLXB1YmxpYzoNCi0JQ1BXTF9XbmQoKTsNCi0JdmlydHVhbCB+Q1BXTF9XbmQoKTsNCi0NCi0Jdm9pZAkJCQkJCQlDcmVhdGUoY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApOw0KLQl2aXJ0dWFsIENGWF9CeXRlU3RyaW5nCQkJR2V0Q2xhc3NOYW1lKCkgY29uc3Q7CQ0KLQl2b2lkCQkJCQkJCURlc3Ryb3koKTsNCi0Jdm9pZAkJCQkJCQlNb3ZlKGNvbnN0IENQREZfUmVjdCAmIHJjTmV3LEZYX0JPT0wgYlJlc2V0LEZYX0JPT0wgYlJlZnJlc2gpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCUludmFsaWRhdGVSZWN0KENQREZfUmVjdCogcFJlY3QgPSBOVUxMKTsNCi0NCi0Jdm9pZAkJCQkJCQlHZXRBcHBlYXJhbmNlU3RyZWFtKENGWF9CeXRlU3RyaW5nICYgc0FwcFN0cmVhbSk7DQotCXZvaWQJCQkJCQkJRHJhd0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSk7DQotDQotCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25LZXlEb3duKEZYX1dPUkQgbkNoYXIsIEZYX0RXT1JEIG5GbGFnKTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCQlPbktleVVwKEZYX1dPUkQgbkNoYXIsIEZYX0RXT1JEIG5GbGFnKTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCQlPbkNoYXIoRlhfV09SRCBuQ2hhciwgRlhfRFdPUkQgbkZsYWcpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uTEJ1dHRvbkRibENsayhjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCQlPbkxCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uTEJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uTUJ1dHRvbkRibENsayhjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCQlPbk1CdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uTUJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uUkJ1dHRvbkRibENsayhjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsNCi0JdmlydHVhbCBGWF9CT09MCQkJCQlPblJCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uUkJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOw0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uTW91c2VXaGVlbChzaG9ydCB6RGVsdGEsIGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOw0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJCVNldEZvY3VzKCk7DQotCXZpcnR1YWwgdm9pZAkJCQkJS2lsbEZvY3VzKCk7DQotCXZvaWQJCQkJCQkJU2V0Q2FwdHVyZSgpOw0KLQl2b2lkCQkJCQkJCVJlbGVhc2VDYXB0dXJlKCk7DQotDQotCXZpcnR1YWwgdm9pZAkJCQkJT25Ob3RpZnkoQ1BXTF9XbmQqIHBXbmQsIEZYX0RXT1JEIG1zZywgRlhfSU5UUFRSIHdQYXJhbSA9IDAsIEZYX0lOVFBUUiBsUGFyYW0gPSAwKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlTZXRUZXh0Q29sb3IoY29uc3QgQ1BXTF9Db2xvciAmIGNvbG9yKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlTZXRUZXh0U3Ryb2tlQ29sb3IoY29uc3QgQ1BXTF9Db2xvciAmIGNvbG9yKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlTZXRWaXNpYmxlKEZYX0JPT0wgYlZpc2libGUpOw0KLQ0KLQl2aXJ0dWFsIENQREZfUmVjdAkJCQlHZXRGb2N1c1JlY3QoKSBjb25zdDsNCi0JdmlydHVhbCBDUFdMX0NvbG9yCQkJCUdldEJhY2tncm91bmRDb2xvcigpIGNvbnN0Ow0KLQl2aXJ0dWFsIENQV0xfQ29sb3IJCQkJR2V0Qm9yZGVyQ29sb3IoKSBjb25zdDsNCi0JdmlydHVhbCBDUFdMX0NvbG9yCQkJCUdldFRleHRDb2xvcigpIGNvbnN0Ow0KLQl2aXJ0dWFsIENQV0xfQ29sb3IJCQkJR2V0VGV4dFN0cm9rZUNvbG9yKCkgY29uc3Q7DQotCXZpcnR1YWwgRlhfRkxPQVQJCQkJR2V0Rm9udFNpemUoKSBjb25zdDsNCi0JdmlydHVhbCBGWF9JTlQzMgkJCQlHZXRJbm5lckJvcmRlcldpZHRoKCkgY29uc3Q7DQotCXZpcnR1YWwgQ1BXTF9Db2xvcgkJCQlHZXRCb3JkZXJMZWZ0VG9wQ29sb3IoRlhfSU5UMzIgbkJvcmRlclN0eWxlKSBjb25zdDsNCi0JdmlydHVhbCBDUFdMX0NvbG9yCQkJCUdldEJvcmRlclJpZ2h0Qm90dG9tQ29sb3IoRlhfSU5UMzIgbkJvcmRlclN0eWxlKSBjb25zdDsNCi0NCi0JdmlydHVhbCBGWF9CT09MCQkJCQlJc01vZGlmaWVkKCkgY29uc3Qge3JldHVybiBGQUxTRTt9DQotDQotCXZpcnR1YWwgdm9pZAkJCQkJU2V0Rm9udFNpemUoRlhfRkxPQVQgZkZvbnRTaXplKTsJDQotDQotCXZvaWQJCQkJCQkJU2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENQV0xfQ29sb3IgJiBjb2xvcik7CQkNCi0Jdm9pZAkJCQkJCQlTZXRCb3JkZXJDb2xvcihjb25zdCBDUFdMX0NvbG9yICYgY29sb3IpOw0KLQl2b2lkCQkJCQkJCVNldEJvcmRlcldpZHRoKEZYX0lOVDMyIG5Cb3JkZXJXaWR0aCk7DQotCXZvaWQJCQkJCQkJU2V0Q2xpcFJlY3QoY29uc3QgQ1BERl9SZWN0ICYgcmVjdCk7DQotCXZvaWQJCQkJCQkJU2V0Qm9yZGVyU3R5bGUoRlhfSU5UMzIgZUJvcmRlclN0eWxlKTsJDQotCXZvaWQJCQkJCQkJU2V0Qm9yZGVyRGFzaChjb25zdCBDUFdMX0Rhc2ggJiBzRGFzaCk7DQotDQotCUNQREZfUmVjdAkJCQkJCUdldE9yaWdpbldpbmRvd1JlY3QoKSBjb25zdDsNCi0JdmlydHVhbCBDUERGX1JlY3QJCQkJR2V0V2luZG93UmVjdCgpIGNvbnN0Ow0KLQl2aXJ0dWFsIENQREZfUmVjdAkJCQlHZXRDbGllbnRSZWN0KCkgY29uc3Q7DQotCUNQREZfUG9pbnQJCQkJCQlHZXRDZW50ZXJQb2ludCgpIGNvbnN0Ow0KLQlDUERGX1JlY3QJCQkJCQlHZXRDbGllbnRDZW50ZXJTcXVhcmUoKSBjb25zdDsNCi0JQ1BERl9SZWN0CQkJCQkJR2V0V2luZG93Q2VudGVyU3F1YXJlKCkgY29uc3Q7CQkNCi0JRlhfSU5UMzIJCQkJCQlHZXRCb3JkZXJXaWR0aCgpIGNvbnN0OwkJDQotCUZYX0JPT0wJCQkJCQkJSXNWaXNpYmxlKCkgY29uc3Qge3JldHVybiBtX2JWaXNpYmxlO30JDQotCUZYX0JPT0wJCQkJCQkJSGFzRmxhZyhGWF9EV09SRCBkd0ZsYWdzKSBjb25zdDsNCi0Jdm9pZAkJCQkJCQlBZGRGbGFnKEZYX0RXT1JEIGR3RmxhZ3MpOw0KLQl2b2lkCQkJCQkJCVJlbW92ZUZsYWcoRlhfRFdPUkQgZHdGbGFncyk7DQotCUNQREZfUmVjdAkJCQkJCUdldENsaXBSZWN0KCkgY29uc3Q7CQkNCi0JQ1BXTF9XbmQqCQkJCQkJR2V0UGFyZW50V2luZG93KCkgY29uc3Q7CQkNCi0JRlhfSU5UMzIJCQkJCQlHZXRCb3JkZXJTdHlsZSgpIGNvbnN0OwkNCi0JQ1BXTF9EYXNoCQkJCQkJR2V0Qm9yZGVyRGFzaCgpIGNvbnN0Ow0KLQl2b2lkKgkJCQkJCQlHZXRBdHRhY2hlZERhdGEoKSBjb25zdDsNCi0JDQotCUZYX0JPT0wJCQkJCQkJV25kSGl0VGVzdChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpIGNvbnN0Ow0KLQlGWF9CT09MCQkJCQkJCUNsaWVudEhpdFRlc3QoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdDsNCi0JRlhfQk9PTAkJCQkJCQlJc0NhcHR1cmVNb3VzZSgpIGNvbnN0Ow0KLQ0KLQljb25zdCBDUFdMX1duZCoJCQkJCUdldEZvY3VzZWQoKSBjb25zdDsNCi0JRlhfQk9PTAkJCQkJCQlJc0ZvY3VzZWQoKSBjb25zdDsNCi0JRlhfQk9PTAkJCQkJCQlJc1JlYWRPbmx5KCkgY29uc3Q7DQotCUNQV0xfU2Nyb2xsQmFyKgkJCQkJR2V0VlNjcm9sbEJhcigpIGNvbnN0Ow0KLQ0KLQlJRlhfRWRpdF9Gb250TWFwKgkJCQlHZXRGb250TWFwKCkgY29uc3Q7DQotCUlQV0xfUHJvdmlkZXIqCQkJCQlHZXRQcm92aWRlcigpIGNvbnN0Ow0KLQl2aXJ0dWFsIElGWF9TeXN0ZW1IYW5kbGVyKgkJR2V0U3lzdGVtSGFuZGxlcigpIGNvbnN0Ow0KLQlJUFdMX0ZvY3VzSGFuZGxlcioJCQkJR2V0Rm9jdXNIYW5kbGVyKCkgY29uc3Q7DQotCQ0KLQlGWF9JTlQzMgkJCQkJCUdldFRyYW5zcGFyZW5jeSgpOw0KLQl2b2lkCQkJCQkJCVNldFRyYW5zcGFyZW5jeShGWF9JTlQzMiBuVHJhbnNwYXJlbmN5KTsNCi0NCi0JQ1BERl9NYXRyaXgJCQkJCQlHZXRDaGlsZFRvUm9vdCgpIGNvbnN0Ow0KLQlDUERGX01hdHJpeAkJCQkJCUdldENoaWxkTWF0cml4KCkgY29uc3Q7DQotCXZvaWQJCQkJCQkJU2V0Q2hpbGRNYXRyaXgoY29uc3QgQ1BERl9NYXRyaXgmIG10KTsNCi0JQ1BERl9NYXRyaXgJCQkJCQlHZXRXaW5kb3dNYXRyaXgoKSBjb25zdDsNCi0NCi0JdmlydHVhbCBDUERGX1BvaW50CQkJCUNoaWxkVG9QYXJlbnQoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpIGNvbnN0Ow0KLQl2aXJ0dWFsIENQREZfUmVjdAkJCQlDaGlsZFRvUGFyZW50KGNvbnN0IENQREZfUmVjdCYgcmVjdCkgY29uc3Q7DQotCXZpcnR1YWwgQ1BERl9Qb2ludAkJCQlQYXJlbnRUb0NoaWxkKGNvbnN0IENQREZfUG9pbnQmIHBvaW50KSBjb25zdDsNCi0JdmlydHVhbCBDUERGX1JlY3QJCQkJUGFyZW50VG9DaGlsZChjb25zdCBDUERGX1JlY3QmIHJlY3QpIGNvbnN0Ow0KLQ0KLQkvL3Rob3NlIG1ldGhvZHMgb25seSBpbXBsZW1lbnRlZCBieSBsaXN0Y3RybCBpdGVtDQotCXZpcnR1YWwgRlhfRkxPQVQJCQkJR2V0SXRlbUhlaWdodChGWF9GTE9BVCBmTGltaXRXaWR0aCkge3JldHVybiAwO30gDQotCXZpcnR1YWwgRlhfRkxPQVQJCQkJR2V0SXRlbUxlZnRNYXJnaW4oKSB7cmV0dXJuIDA7fSANCi0JdmlydHVhbCBGWF9GTE9BVAkJCQlHZXRJdGVtUmlnaHRNYXJnaW4oKSB7cmV0dXJuIDA7fSANCi0NCi0Jdm9pZAkJCQkJCQlFbmFibGVXaW5kb3coRlhfQk9PTCBiRW5hYmxlKTsNCi0JRlhfQk9PTAkJCQkJCQlJc0VuYWJsZWQoKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlTZXRDdXJzb3IoKTsNCi0NCi1wcm90ZWN0ZWQ6CQ0KLQl2aXJ0dWFsIHZvaWQJCQkJCUNyZWF0ZUNoaWxkV25kKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlSZVBvc0NoaWxkV25kKCk7DQotCXZvaWQJCQkJCQkJR2V0QXBwZWFyYW5jZVN0cmVhbShDRlhfQnl0ZVRleHRCdWYgJiBzQXBwU3RyZWFtKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlHZXRUaGlzQXBwZWFyYW5jZVN0cmVhbShDRlhfQnl0ZVRleHRCdWYgJiBzQXBwU3RyZWFtKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlHZXRDaGlsZEFwcGVhcmFuY2VTdHJlYW0oQ0ZYX0J5dGVUZXh0QnVmICYgc0FwcFN0cmVhbSk7DQotDQotCXZpcnR1YWwgdm9pZAkJCQkJRHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCURyYXdDaGlsZEFwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSk7DQotDQotCXZpcnR1YWwgdm9pZAkJCQkJT25DcmVhdGUoUFdMX0NSRUFURVBBUkFNICYgY3ApOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCU9uQ3JlYXRlZCgpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCU9uRGVzdHJveSgpOw0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJCU9uU2V0Rm9jdXMoKTsNCi0JdmlydHVhbCB2b2lkCQkJCQlPbktpbGxGb2N1cygpOw0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQkJCU9uRW5hYmxlZCgpOw0KLQl2aXJ0dWFsIHZvaWQJCQkJCU9uRGlzYWJsZWQoKTsNCi0NCi0Jdm9pZAkJCQkJCQlTZXROb3RpZnlGbGFnKEZYX0JPT0wgYk5vdGlmeWluZyA9IFRSVUUpe21fYk5vdGlmeWluZyA9IGJOb3RpZnlpbmc7fTsNCi0gDQotCUZYX0JPT0wJCQkJCQkJSXNWYWxpZCgpIGNvbnN0Ow0KLQlQV0xfQ1JFQVRFUEFSQU0JCQkJCUdldENyZWF0aW9uUGFyYW0oKSBjb25zdDsJCQ0KLQlGWF9CT09MCQkJCQkJCUlzTm90aWZ5aW5nKCkgY29uc3Qge3JldHVybiBtX2JOb3RpZnlpbmc7fQkNCi0JDQotCXZvaWQJCQkJCQkJSW52YWxpZGF0ZVJlY3RNb3ZlKGNvbnN0IENQREZfUmVjdCAmIHJjT2xkLCBjb25zdCBDUERGX1JlY3QgJiByY05ldyk7DQotDQotCXZvaWQJCQkJCQkJUFdMdG9XbmQoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9JTlQzMiYgeCwgRlhfSU5UMzImIHkpIGNvbnN0Ow0KLQlGWF9SRUNUCQkJCQkJCVBXTHRvV25kKGNvbnN0IENQREZfUmVjdCAmIHJlY3QpIGNvbnN0OwkNCi0JRlhfSFdORAkJCQkJCQlHZXRBdHRhY2hlZEhXbmQoKSBjb25zdDsNCi0JDQotCUZYX0JPT0wJCQkJCQkJSXNXbmRDYXB0dXJlTW91c2UoY29uc3QgQ1BXTF9XbmQgKiBwV25kKSBjb25zdDsNCi0JRlhfQk9PTAkJCQkJCQlJc1duZENhcHR1cmVLZXlib2FyZChjb25zdCBDUFdMX1duZCAqIHBXbmQpIGNvbnN0OwkNCi0JY29uc3QgQ1BXTF9XbmQqCQkJCQlHZXRSb290V25kKCkgY29uc3Q7CQ0KLQ0KLQlGWF9CT09MCQkJCQkJCUlzQ1RSTHByZXNzZWQoRlhfRFdPUkQgbkZsYWcpIGNvbnN0Ow0KLQlGWF9CT09MCQkJCQkJCUlzU0hJRlRwcmVzc2VkKEZYX0RXT1JEIG5GbGFnKSBjb25zdDsNCi0JRlhfQk9PTAkJCQkJCQlJc0FMVHByZXNzZWQoRlhfRFdPUkQgbkZsYWcpIGNvbnN0Ow0KLQlGWF9CT09MCQkJCQkJCUlzSU5TRVJUcHJlc3NlZChGWF9EV09SRCBuRmxhZykgY29uc3Q7DQotDQotcHJpdmF0ZToNCi0Jdm9pZAkJCQkJCQlBZGRDaGlsZChDUFdMX1duZCAqIHBXbmQpOw0KLQl2b2lkCQkJCQkJCVJlbW92ZUNoaWxkKENQV0xfV25kICogcFduZCk7DQotDQotCXZvaWQJCQkJCQkJQ3JlYXRlU2Nyb2xsQmFyKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKTsNCi0Jdm9pZAkJCQkJCQlDcmVhdGVWU2Nyb2xsQmFyKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKTsJDQotDQotCXZvaWQJCQkJCQkJQWp1c3RTdHlsZSgpOwkNCi0Jdm9pZAkJCQkJCQlDcmVhdGVNc2dDb250cm9sKCk7DQotCXZvaWQJCQkJCQkJRGVzdHJveU1zZ0NvbnRyb2woKTsNCi0JDQotCUNQV0xfTXNnQ29udHJvbCoJCQkJR2V0TXNnQ29udHJvbCgpIGNvbnN0OwkNCi0JDQotcHJvdGVjdGVkOg0KLQlDRlhfQXJyYXlUZW1wbGF0ZTxDUFdMX1duZCo+CW1fYUNoaWxkcmVuOw0KLQ0KLXByaXZhdGU6DQotCVBXTF9DUkVBVEVQQVJBTQkJCQkJbV9zUHJpdmF0ZVBhcmFtOw0KLQkNCi0JQ1BXTF9TY3JvbGxCYXIqCQkJCQltX3BWU2Nyb2xsQmFyOw0KLQ0KLQlDUERGX1JlY3QJCQkJCQltX3JjV2luZG93Ow0KLQlDUERGX1JlY3QJCQkJCQltX3JjQ2xpcDsNCi0NCi0JRlhfQk9PTAkJCQkJCQltX2JDcmVhdGVkOwkJCQ0KLQlGWF9CT09MCQkJCQkJCW1fYlZpc2libGU7DQotCUZYX0JPT0wJCQkJCQkJbV9iTm90aWZ5aW5nOwkNCi0JRlhfQk9PTAkJCQkJCQltX2JFbmFibGVkOw0KLX07DQotDQotLy8gI2lmbmRlZiBWS19FTkQNCi0vLyANCi0vLyAjZGVmaW5lIFZLX0VORCAgICAgICAgICAgIDB4MjMNCi0vLyAjZGVmaW5lIFZLX0hPTUUgICAgICAgICAgIDB4MjQNCi0vLyAjZGVmaW5lIFZLX0xFRlQgICAgICAgICAgIDB4MjUNCi0vLyAjZGVmaW5lIFZLX1VQICAgICAgICAgICAgIDB4MjYNCi0vLyAjZGVmaW5lIFZLX1JJR0hUICAgICAgICAgIDB4MjcNCi0vLyAjZGVmaW5lIFZLX0RPV04gICAgICAgICAgIDB4MjgNCi0vLyAjZGVmaW5lIFZLX0lOU0VSVCAgICAgICAgIDB4MkQNCi0vLyAjZGVmaW5lIFZLX0RFTEVURSAgICAgICAgIDB4MkUNCi0vLyANCi0vLyAjZGVmaW5lIFZLX0JBQ0sgICAgICAgICAgIDB4MDgNCi0vLyAjZGVmaW5lIFZLX1RBQiAgICAgICAgICAgIDB4MDkNCi0vLyANCi0vLyAjZGVmaW5lIFZLX0NMRUFSICAgICAgICAgIDB4MEMNCi0vLyAjZGVmaW5lIFZLX1JFVFVSTiAgICAgICAgIDB4MEQNCi0vLyAjZGVmaW5lIFZLX0VTQ0FQRSAgICAgICAgIDB4MUINCi0vLyAjZGVmaW5lIFZLX1NQQUNFICAgICAgICAgIDB4MjANCi0vLyAjZW5kaWYNCi0vLyANCi0vLyAjZGVmaW5lIFZLX05PTkUJCQkgIDANCi0NCi0jZW5kaWYgLy8gIWRlZmluZWQoQUZYX1BXTF9XTkRfSF9fRDMyODEyQURfQTg3NV80RTA4XzlEM0NfMEE1NzAyMDk4N0M2X19JTkNMVURFRF8pDQotDQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2lmbmRlZiBfUFdMX1dORF9IXworI2RlZmluZSBfUFdMX1dORF9IXworCitjbGFzcyBJUFdMX1Byb3ZpZGVyOworY2xhc3MgQ1BXTF9XbmQ7CitjbGFzcyBDUFdMX01zZ0NvbnRyb2w7CitjbGFzcyBDUFdMX1duZDsKK2NsYXNzIENQV0xfU2Nyb2xsQmFyOworY2xhc3MgQ1BXTF9UaW1lcjsKK2NsYXNzIENQV0xfVGltZXJIYW5kbGVyOworY2xhc3MgSVBXTF9TcGVsbENoZWNrOworY2xhc3MgSUZYX1N5c3RlbUhhbmRsZXI7CisKKyNpZmRlZiBGWF9SRUFERVJfRExMCisJI2lmZGVmIFBXTF9FWFBPUlQKKwkJCSNkZWZpbmUgUFdMX0NMQVNTCQlfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKwkJCSNkZWZpbmUgUFdMX0ZVTkNUSU9OCVBXTF9DTEFTUwkKKwkJI2Vsc2UKKwkJCSNkZWZpbmUgUFdMX0NMQVNTCisJCQkjZGVmaW5lIFBXTF9GVU5DVElPTgorCSNlbmRpZgorI2Vsc2UKKwkjZGVmaW5lIFBXTF9DTEFTUworCSNkZWZpbmUgUFdMX0ZVTkNUSU9OCisjZW5kaWYKKworLy93aW5kb3cgc3R5bGVzCisjZGVmaW5lIFBXU19DSElMRAkJCQkJCQkweDgwMDAwMDAwTAorI2RlZmluZSBQV1NfQk9SREVSCQkJCQkJCTB4NDAwMDAwMDBMCisjZGVmaW5lIFBXU19CQUNLR1JPVU5ECQkJCQkJMHgyMDAwMDAwMEwKKyNkZWZpbmUgUFdTX0hTQ1JPTEwJCQkJCQkJMHgxMDAwMDAwMEwKKyNkZWZpbmUgUFdTX1ZTQ1JPTEwJCQkJCQkJMHgwODAwMDAwMEwKKyNkZWZpbmUgUFdTX1ZJU0lCTEUJCQkJCQkJMHgwNDAwMDAwMEwKKyNkZWZpbmUgUFdTX0RJU0FCTEUJCQkJCQkJMHgwMjAwMDAwMEwKKyNkZWZpbmUgUFdTX1JFQURPTkxZCQkJCQkJMHgwMTAwMDAwMEwKKyNkZWZpbmUgUFdTX0FVVE9GT05UU0laRQkJCQkJMHgwMDgwMDAwMEwKKyNkZWZpbmUgUFdTX0FVVE9UUkFOU1BBUkVOVAkJCQkJMHgwMDQwMDAwMEwKKyNkZWZpbmUgUFdTX05PUkVGUkVTSENMSVAJCQkJCTB4MDAyMDAwMDBMCisKKy8vZWRpdCBhbmQgbGFiZWwgc3R5bGVzCisjZGVmaW5lIFBFU19NVUxUSUxJTkUJCQkJCQkweDAwMDFMCisjZGVmaW5lIFBFU19QQVNTV09SRAkJCQkJCTB4MDAwMkwKKyNkZWZpbmUgUEVTX0xFRlQJCQkJCQkJMHgwMDA0TAorI2RlZmluZSBQRVNfUklHSFQJCQkJCQkJMHgwMDA4TAorI2RlZmluZSBQRVNfTUlERExFCQkJCQkJCTB4MDAxMEwKKyNkZWZpbmUgUEVTX1RPUAkJCQkJCQkJMHgwMDIwTAorI2RlZmluZSBQRVNfQk9UVE9NCQkJCQkJCTB4MDA0MEwKKyNkZWZpbmUgUEVTX0NFTlRFUgkJCQkJCQkweDAwODBMCisjZGVmaW5lIFBFU19DSEFSQVJSQVkJCQkJCQkweDAxMDBMCisjZGVmaW5lIFBFU19BVVRPU0NST0xMCQkJCQkJMHgwMjAwTAorI2RlZmluZSBQRVNfQVVUT1JFVFVSTgkJCQkJCTB4MDQwMEwKKyNkZWZpbmUgUEVTX1VORE8JCQkJCQkJMHgwODAwTAorI2RlZmluZSBQRVNfUklDSAkJCQkJCQkweDEwMDBMCisjZGVmaW5lIFBFU19TUEVMTENIRUNLCQkJCQkJMHgyMDAwTAorI2RlZmluZSBQRVNfVEVYVE9WRVJGTE9XCQkJCQkweDQwMDBMCisjZGVmaW5lIFBFU19OT1JFQUQJCQkJCQkJMHg4MDAwTAorCisvL2xpc3Rib3ggc3R5bGVzCisjZGVmaW5lIFBMQlNfTVVMVElQTEVTRUwJCQkJCTB4MDAwMUwKKyNkZWZpbmUgUExCU19IT1ZFUlNFTAkJCQkJCTB4MDAwOEwKKworLy9jb21ib2JveCBzdHlsZXMKKyNkZWZpbmUgUENCU19BTExPV0NVU1RPTVRFWFQJCQkJMHgwMDAxTAorCisvL3JpY2hlZGl0IHN0eWxlcworI2RlZmluZSBQUkVTX01VTFRJTElORQkJCQkJCTB4MDAwMUwKKyNkZWZpbmUgUFJFU19BVVRPUkVUVVJOCQkJCQkJMHgwMDAyTAorI2RlZmluZSBQUkVTX0FVVE9TQ1JPTEwJCQkJCQkweDAwMDRMCisjZGVmaW5lIFBSRVNfU1BFTExDSEVDSwkJCQkJCTB4MDAwOEwKKyNkZWZpbmUgUFJFU19VTkRPCQkJCQkJCTB4MDEwMEwKKyNkZWZpbmUgUFJFU19NVUxUSVBBR0VTCQkJCQkJMHgwMjAwTAorI2RlZmluZSBQUkVTX1RFWFRPVkVSRkxPVwkJCQkJMHgwNDAwTAorCisvL2JvcmRlciBzdHlsZQorI2RlZmluZSBQQlNfU09MSUQJCQkJCQkJMAorI2RlZmluZSBQQlNfREFTSAkJCQkJCQkxCisjZGVmaW5lIFBCU19CRVZFTEVECQkJCQkJCTIKKyNkZWZpbmUgUEJTX0lOU0VUCQkJCQkJCTMKKyNkZWZpbmUgUEJTX1VOREVSTElORUQJCQkJCQk0CisjZGVmaW5lIFBCU19TSEFET1cJCQkJCQkJNQorCisvL25vdGlmaWNhdGlvbiBtZXNzYWdlcworI2RlZmluZSBQTk1fQUREQ0hJTEQJCQkJCQkweDAwMDAwMDAwTAorI2RlZmluZSBQTk1fUkVNT1ZFQ0hJTEQJCQkJCQkweDAwMDAwMDAxTAorI2RlZmluZSBQTk1fU0VUU0NST0xMSU5GTwkJCQkJMHgwMDAwMDAwMkwKKyNkZWZpbmUgUE5NX1NFVFNDUk9MTFBPUwkJCQkJMHgwMDAwMDAwM0wKKyNkZWZpbmUgUE5NX1NDUk9MTFdJTkRPVwkJCQkJMHgwMDAwMDAwNEwKKyNkZWZpbmUgUE5NX0xCVVRUT05ET1dOCQkJCQkJMHgwMDAwMDAwNUwKKyNkZWZpbmUgUE5NX0xCVVRUT05VUAkJCQkJCTB4MDAwMDAwMDZMCisjZGVmaW5lIFBOTV9NT1VTRU1PVkUJCQkJCQkweDAwMDAwMDA3TAorI2RlZmluZQlQTk1fTk9URVJFU0VUCQkJCQkJMHgwMDAwMDAwOEwKKyNkZWZpbmUgUE5NX1NFVENBUkVUSU5GTwkJCQkJMHgwMDAwMDAwOUwKKyNkZWZpbmUgUE5NX1NFTENIQU5HRUQJCQkJCQkweDAwMDAwMDBBTAorI2RlZmluZQlQTk1fTk9URUVESVRDSEFOR0VECQkJCQkweDAwMDAwMDBCTAorCisjZGVmaW5lIFBXTF9DTEFTU05BTUVfRURJVAkJCQkJIkNQV0xfRWRpdCIKKworc3RydWN0IENQV0xfRGFzaAoreworCUNQV0xfRGFzaChGWF9JTlQzMiBkYXNoLCBGWF9JTlQzMiBnYXAsIEZYX0lOVDMyIHBoYXNlKSA6IG5EYXNoKGRhc2gpLCBuR2FwKGdhcCksIG5QaGFzZShwaGFzZSkKKwl7fQorCisJRlhfSU5UMzIJCQluRGFzaDsKKwlGWF9JTlQzMgkJCW5HYXA7CisJRlhfSU5UMzIJCQluUGhhc2U7Cit9OworCitzdHJ1Y3QgUFdMX0NMQVNTIENQV0xfQ29sb3IKK3sKKwlDUFdMX0NvbG9yKEZYX0lOVDMyIHR5cGUgPSBDT0xPUlRZUEVfVFJBTlNQQVJFTlQsIEZYX0ZMT0FUIGNvbG9yMSA9IDAuMGYsIEZYX0ZMT0FUIGNvbG9yMiA9IDAuMGYsIEZYX0ZMT0FUIGNvbG9yMyA9IDAuMGYsIEZYX0ZMT0FUIGNvbG9yNCA9IDAuMGYpCisJCTogbkNvbG9yVHlwZSh0eXBlKSwgZkNvbG9yMShjb2xvcjEpLCBmQ29sb3IyKGNvbG9yMiksIGZDb2xvcjMoY29sb3IzKSwgZkNvbG9yNChjb2xvcjQpCisJe30KKworCUNQV0xfQ29sb3IoRlhfSU5UMzIgciwgRlhfSU5UMzIgZywgRlhfSU5UMzIgYikgOgorCQluQ29sb3JUeXBlKENPTE9SVFlQRV9SR0IpLCBmQ29sb3IxKHIvMjU1LjBmKSwgZkNvbG9yMihnLzI1NS4wZiksIGZDb2xvcjMoYi8yNTUuMGYpLCBmQ29sb3I0KDApCisJe30KKwkKKwl2b2lkIENvbnZlcnRDb2xvclR5cGUoRlhfSU5UMzIgbkNvbG9yVHlwZSk7CisKKwkvKgorCUNPTE9SVFlQRV9UUkFOU1BBUkVOVAorCUNPTE9SVFlQRV9SR0IKKwlDT0xPUlRZUEVfQ01ZSworCUNPTE9SVFlQRV9HUkFZCisJKi8KKwlGWF9JTlQzMgkJCQkJbkNvbG9yVHlwZTsgCisJRlhfRkxPQVQJCQkJCWZDb2xvcjEsZkNvbG9yMixmQ29sb3IzLGZDb2xvcjQ7Cit9OworCitpbmxpbmUgRlhfQk9PTCBvcGVyYXRvciA9PSAoY29uc3QgQ1BXTF9Db2xvciAmYzEsIGNvbnN0IENQV0xfQ29sb3IgJmMyKQoreworCXJldHVybiBjMS5uQ29sb3JUeXBlID09IGMyLm5Db2xvclR5cGUgJiYgCisJCWMxLmZDb2xvcjEgLSBjMi5mQ29sb3IxIDwgMC4wMDAxICYmIGMxLmZDb2xvcjEgLSBjMi5mQ29sb3IxID4gLTAuMDAwMSAmJgorCQljMS5mQ29sb3IyIC0gYzIuZkNvbG9yMiA8IDAuMDAwMSAmJiBjMS5mQ29sb3IyIC0gYzIuZkNvbG9yMiA+IC0wLjAwMDEgJiYKKwkJYzEuZkNvbG9yMyAtIGMyLmZDb2xvcjMgPCAwLjAwMDEgJiYgYzEuZkNvbG9yMyAtIGMyLmZDb2xvcjMgPiAtMC4wMDAxICYmCisJCWMxLmZDb2xvcjQgLSBjMi5mQ29sb3I0IDwgMC4wMDAxICYmIGMxLmZDb2xvcjQgLSBjMi5mQ29sb3I0ID4gLTAuMDAwMTsKK30KKworaW5saW5lIEZYX0JPT0wgb3BlcmF0b3IgIT0gKGNvbnN0IENQV0xfQ29sb3IgJmMxLCBjb25zdCBDUFdMX0NvbG9yICZjMikKK3sKKwlyZXR1cm4gIW9wZXJhdG9yID09IChjMSwgYzIpOworfQorCisjZGVmaW5lIFBXTF9TQ1JPTExCQVJfV0lEVEgJCQkJCTEyLjBmCisjZGVmaW5lIFBXTF9TQ1JPTExCQVJfQlVUVE9OX1dJRFRICQkJOS4wZgorI2RlZmluZSBQV0xfU0NST0xMQkFSX1BPU0JVVFRPTl9NSU5XSURUSAkyLjBmCisjZGVmaW5lIFBXTF9TQ1JPTExCQVJfVFJBTlNQQVJBTkNZCQkJMTUwCisjZGVmaW5lIFBXTF9TQ1JPTExCQVJfQktDT0xPUgkJCQlDUFdMX0NvbG9yKENPTE9SVFlQRV9SR0IsMjIwLjBmLzI1NS4wZiwyMjAuMGYvMjU1LjBmLDIyMC4wZi8yNTUuMGYpCisjZGVmaW5lIFBXTF9ERUZBVUxUX1NFTFRFWFRDT0xPUgkJCUNQV0xfQ29sb3IoQ09MT1JUWVBFX1JHQiwxLDEsMSkKKyNkZWZpbmUgUFdMX0RFRkFVTFRfU0VMQkFDS0NPTE9SCQkJQ1BXTF9Db2xvcihDT0xPUlRZUEVfUkdCLDAsNTEuMGYvMjU1LjBmLDExMy4wZi8yNTUuMGYpCisjZGVmaW5lIFBXTF9ERUZBVUxUX0JBQ0tDT0xPUgkJCQlQV0xfREVGQVVMVF9TRUxURVhUQ09MT1IKKyNkZWZpbmUgUFdMX0RFRkFVTFRfVEVYVENPTE9SCQkJCUNQV0xfQ29sb3IoQ09MT1JUWVBFX1JHQiwwLDAsMCkKKyNkZWZpbmUgUFdMX0RFRkFVTFRfRk9OVFNJWkUJCQkJOS4wZgorI2RlZmluZSBQV0xfREVGQVVMVF9CTEFDS0NPTE9SCQkJCUNQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMCkKKyNkZWZpbmUgUFdMX0RFRkFVTFRfV0hJVEVDT0xPUgkJCQlDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLDEpCisjZGVmaW5lIFBXTF9ERUZBVUxUX0hFQVZZR1JBWUNPTE9SCQkJQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwwLjUwKQorI2RlZmluZSBQV0xfREVGQVVMVF9MSUdIVEdSQVlDT0xPUgkJCUNQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMC43NSkKKyNkZWZpbmUgUFdMX1RSSUFOR0xFX0hBTEZMRU4JCQkJMi4wZgorI2RlZmluZQlQV0xfQ0JCVVRUT05fVFJJQU5HTEVfSEFMRkxFTgkJMy4wZgorI2RlZmluZSBQV0xfSU5WQUxJREFURV9JTkZMQVRFCQkJCTIKKworY2xhc3MgSVBXTF9TcGVsbENoZWNrCit7CitwdWJsaWM6CisJdmlydHVhbCBGWF9CT09MCQkJCQkJCUNoZWNrV29yZChGWF9MUENTVFIgc1dvcmQpID0gMDsKKwl2aXJ0dWFsIHZvaWQJCQkJCQkJU3VnZ2VzdFdvcmRzKEZYX0xQQ1NUUiBzV29yZCwgQ0ZYX0J5dGVTdHJpbmdBcnJheSAmIHNTdWdnZXN0KSA9IDA7CQorfTsKKworY2xhc3MgSVBXTF9Qcm92aWRlcgoreworcHVibGljOgorCS8vZ2V0IGEgbWF0cml4IHdoaWNoIG1hcCB1c2VyIHNwYWNlIHRvIENXbmQgY2xpZW50IHNwYWNlCisJdmlydHVhbCBDUERGX01hdHJpeAkJCQkJCUdldFdpbmRvd01hdHJpeCh2b2lkKiBwQXR0YWNoZWREYXRhKSA9IDA7CisKKwkvKgorCTAgTCImVW5kb1x0Q3RybCtaIgorCTEgTCImUmVkb1x0Q3RybCtTaGlmdCtaIgorCTIgTCJDdSZ0XHRDdHJsK1giCisJMyBMIiZDb3B5XHRDdHJsK0MiCisJNCBMIiZQYXN0ZVx0Q3RybCtWIgorCTUgTCImRGVsZXRlIgorCTYgIEwiJlNlbGVjdCBBbGxcdEN0cmwrQSIKKwkqLworCXZpcnR1YWwgQ0ZYX1dpZGVTdHJpbmcJCQkJCUxvYWRQb3B1cE1lbnVTdHJpbmcoRlhfSU5UMzIgbkluZGV4KSA9IDA7Cit9OworCitjbGFzcyBJUFdMX0ZvY3VzSGFuZGxlcgoreworcHVibGljOgorCXZpcnR1YWwgdm9pZAkJCQkJCQlPblNldEZvY3VzKENQV0xfV25kKiBwV25kKSA9IDA7CisJdmlydHVhbCB2b2lkCQkJCQkJCU9uS2lsbEZvY3VzKENQV0xfV25kKiBwV25kKSA9IDA7Cit9OworCitzdHJ1Y3QgUFdMX0NSRUFURVBBUkFNCit7CitwdWJsaWM6CisJUFdMX0NSRUFURVBBUkFNKCkgOiByY1JlY3RXbmQoMCwwLDAsMCksCisJCXBTeXN0ZW1IYW5kbGVyKE5VTEwpLAorCQlwRm9udE1hcChOVUxMKSwKKwkJcFByb3ZpZGVyKE5VTEwpLAorCQlwRm9jdXNIYW5kbGVyKE5VTEwpLAorCQlkd0ZsYWdzKDApLAorCQlzQmFja2dyb3VuZENvbG9yKCksCisJCWhBdHRhY2hlZFduZChOVUxMKSwKKwkJcFNwZWxsQ2hlY2soTlVMTCksCisJCW5Cb3JkZXJTdHlsZShQQlNfU09MSUQpLAorCQlkd0JvcmRlcldpZHRoKDEpLAorCQlzQm9yZGVyQ29sb3IoKSwKKwkJc1RleHRDb2xvcigpLAorCQlzVGV4dFN0cm9rZUNvbG9yKCksCisJCW5UcmFuc3BhcmVuY3koMjU1KSwKKwkJZkZvbnRTaXplKFBXTF9ERUZBVUxUX0ZPTlRTSVpFKSwKKwkJc0Rhc2goMywwLDApLAkKKwkJcEF0dGFjaGVkRGF0YShOVUxMKSwKKwkJcFBhcmVudFduZChOVUxMKSwKKwkJcE1zZ0NvbnRyb2woTlVMTCksCisJCWVDdXJzb3JUeXBlKEZYQ1RfQVJST1cpLAorCQltdENoaWxkKDEsMCwwLDEsMCwwKQorCXsKKwl9CisKKwlDUERGX1JlY3QJCQkJcmNSZWN0V25kOwkJCQkvL3JlcXVpcmVkCQorCUlGWF9TeXN0ZW1IYW5kbGVyKgkJcFN5c3RlbUhhbmRsZXI7CQkJLy9yZXF1aXJlZAorCUlGWF9FZGl0X0ZvbnRNYXAqCQlwRm9udE1hcDsJCQkJLy9yZXF1aXJlZCBmb3IgdGV4dCB3aW5kb3cKKwlJUFdMX1Byb3ZpZGVyKgkJCXBQcm92aWRlcjsJCQkJLy9yZXF1aXJlZCBmb3Igc2VsZiBjb29yZGluYXRlCisJSVBXTF9Gb2N1c0hhbmRsZXIqCQlwRm9jdXNIYW5kbGVyOwkJCS8vb3B0aW9uYWwKKwlGWF9EV09SRAkJCQlkd0ZsYWdzOwkJCQkvL29wdGlvbmFsCisJQ1BXTF9Db2xvcgkJCQlzQmFja2dyb3VuZENvbG9yOwkJLy9vcHRpb25hbAorCUZYX0hXTkQJCQkJCWhBdHRhY2hlZFduZDsJCQkvL3JlcXVpcmVkIGZvciBuby1yZWFkZXIgZnJhbWV3b3JrCisJSVBXTF9TcGVsbENoZWNrKgkJcFNwZWxsQ2hlY2s7CQkJLy9yZXF1aXJlZCBmb3Igc3BlbGxjaGVja2luZworCUZYX0lOVDMyCQkJCW5Cb3JkZXJTdHlsZTsJCQkvL29wdGlvbmFsCisJRlhfSU5UMzIJCQkJZHdCb3JkZXJXaWR0aDsJCQkvL29wdGlvbmFsCisJQ1BXTF9Db2xvcgkJCQlzQm9yZGVyQ29sb3I7CQkJLy9vcHRpb25hbAorCUNQV0xfQ29sb3IJCQkJc1RleHRDb2xvcjsJCQkJLy9vcHRpb25hbAorCUNQV0xfQ29sb3IJCQkJc1RleHRTdHJva2VDb2xvcjsJCS8vb3B0aW9uYWwKKwlGWF9JTlQzMgkJCQluVHJhbnNwYXJlbmN5OwkJCS8vb3B0aW9uYWwKKwlGWF9GTE9BVAkJCQlmRm9udFNpemU7CQkJCS8vb3B0aW9uYWwKKwlDUFdMX0Rhc2gJCQkJc0Rhc2g7CQkJCQkvL29wdGlvbmFsCisJdm9pZCoJCQkJCXBBdHRhY2hlZERhdGE7CQkJLy9vcHRpb25hbAorCUNQV0xfV25kKgkJCQlwUGFyZW50V25kOwkJCQkvL2lnbm9yZQorCUNQV0xfTXNnQ29udHJvbCoJCXBNc2dDb250cm9sOwkJCS8vaWdub3JlCisJRlhfSU5UMzIJCQkJZUN1cnNvclR5cGU7CQkJLy9pZ25vcmUKKwlDUERGX01hdHJpeAkJCQltdENoaWxkOwkJCQkvL2lnbm9yZQorfTsKKworY2xhc3MgQ1BXTF9UaW1lcgoreworcHVibGljOgorCUNQV0xfVGltZXIoQ1BXTF9UaW1lckhhbmRsZXIqIHBBdHRhY2hlZCwgSUZYX1N5c3RlbUhhbmRsZXIqIHBTeXN0ZW1IYW5kbGVyKTsKKwl2aXJ0dWFsIH5DUFdMX1RpbWVyKCk7CisKKwlGWF9JTlQzMgkJCQkJCQlTZXRQV0xUaW1lcihGWF9JTlQzMiBuRWxhcHNlKTsKKwl2b2lkCQkJCQkJCQlLaWxsUFdMVGltZXIoKTsKKwlzdGF0aWMgdm9pZCAJCQkJCQlUaW1lclByb2MoRlhfSU5UMzIgaWRFdmVudCk7CisKK3ByaXZhdGU6CisJRlhfSU5UMzIJCQkJCQkJbV9uVGltZXJJRDsJCisJQ1BXTF9UaW1lckhhbmRsZXIqCQkJCQltX3BBdHRhY2hlZDsKKwlJRlhfU3lzdGVtSGFuZGxlcioJCQkJCW1fcFN5c3RlbUhhbmRsZXI7Cit9OworCitjbGFzcyBQV0xfQ0xBU1MgQ1BXTF9UaW1lckhhbmRsZXIKK3sKK3B1YmxpYzoKKwlDUFdMX1RpbWVySGFuZGxlcigpOworCXZpcnR1YWwgfkNQV0xfVGltZXJIYW5kbGVyKCk7CisKKwl2b2lkCQkJCQkJCQlCZWdpblRpbWVyKEZYX0lOVDMyIG5FbGFwc2UpOworCXZvaWQJCQkJCQkJCUVuZFRpbWVyKCk7CisJdmlydHVhbCB2b2lkCQkJCQkJVGltZXJQcm9jKCk7CisJdmlydHVhbCBJRlhfU3lzdGVtSGFuZGxlcioJCQlHZXRTeXN0ZW1IYW5kbGVyKCkgY29uc3QgPSAwOworCitwcml2YXRlOgorCUNQV0xfVGltZXIqCQkJCQkJCW1fcFRpbWVyOworfTsKKworY2xhc3MgUFdMX0NMQVNTIENQV0xfV25kIDogcHVibGljIENQV0xfVGltZXJIYW5kbGVyCit7CisJZnJpZW5kIGNsYXNzIENQV0xfTXNnQ29udHJvbDsKK3B1YmxpYzoKKwlDUFdMX1duZCgpOworCXZpcnR1YWwgfkNQV0xfV25kKCk7CisKKwl2b2lkCQkJCQkJCUNyZWF0ZShjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7CisJdmlydHVhbCBDRlhfQnl0ZVN0cmluZwkJCUdldENsYXNzTmFtZSgpIGNvbnN0OwkKKwl2b2lkCQkJCQkJCURlc3Ryb3koKTsKKwl2b2lkCQkJCQkJCU1vdmUoY29uc3QgQ1BERl9SZWN0ICYgcmNOZXcsRlhfQk9PTCBiUmVzZXQsRlhfQk9PTCBiUmVmcmVzaCk7CisJdmlydHVhbCB2b2lkCQkJCQlJbnZhbGlkYXRlUmVjdChDUERGX1JlY3QqIHBSZWN0ID0gTlVMTCk7CisKKwl2b2lkCQkJCQkJCUdldEFwcGVhcmFuY2VTdHJlYW0oQ0ZYX0J5dGVTdHJpbmcgJiBzQXBwU3RyZWFtKTsKKwl2b2lkCQkJCQkJCURyYXdBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpOworCisJdmlydHVhbCBGWF9CT09MCQkJCQlPbktleURvd24oRlhfV09SRCBuQ2hhciwgRlhfRFdPUkQgbkZsYWcpOworCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25LZXlVcChGWF9XT1JEIG5DaGFyLCBGWF9EV09SRCBuRmxhZyk7CisJdmlydHVhbCBGWF9CT09MCQkJCQlPbkNoYXIoRlhfV09SRCBuQ2hhciwgRlhfRFdPUkQgbkZsYWcpOworCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25MQnV0dG9uRGJsQ2xrKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOworCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25MQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uTEJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOworCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25NQnV0dG9uRGJsQ2xrKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOworCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25NQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uTUJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOworCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25SQnV0dG9uRGJsQ2xrKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOworCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25SQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJCU9uUkJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpOworCXZpcnR1YWwgRlhfQk9PTAkJCQkJT25Nb3VzZU1vdmUoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZyk7CisJdmlydHVhbCBGWF9CT09MCQkJCQlPbk1vdXNlV2hlZWwoc2hvcnQgekRlbHRhLCBjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKTsKKworCXZpcnR1YWwgdm9pZAkJCQkJU2V0Rm9jdXMoKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCUtpbGxGb2N1cygpOworCXZvaWQJCQkJCQkJU2V0Q2FwdHVyZSgpOworCXZvaWQJCQkJCQkJUmVsZWFzZUNhcHR1cmUoKTsKKworCXZpcnR1YWwgdm9pZAkJCQkJT25Ob3RpZnkoQ1BXTF9XbmQqIHBXbmQsIEZYX0RXT1JEIG1zZywgRlhfSU5UUFRSIHdQYXJhbSA9IDAsIEZYX0lOVFBUUiBsUGFyYW0gPSAwKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCVNldFRleHRDb2xvcihjb25zdCBDUFdMX0NvbG9yICYgY29sb3IpOworCXZpcnR1YWwgdm9pZAkJCQkJU2V0VGV4dFN0cm9rZUNvbG9yKGNvbnN0IENQV0xfQ29sb3IgJiBjb2xvcik7CisJdmlydHVhbCB2b2lkCQkJCQlTZXRWaXNpYmxlKEZYX0JPT0wgYlZpc2libGUpOworCisJdmlydHVhbCBDUERGX1JlY3QJCQkJR2V0Rm9jdXNSZWN0KCkgY29uc3Q7CisJdmlydHVhbCBDUFdMX0NvbG9yCQkJCUdldEJhY2tncm91bmRDb2xvcigpIGNvbnN0OworCXZpcnR1YWwgQ1BXTF9Db2xvcgkJCQlHZXRCb3JkZXJDb2xvcigpIGNvbnN0OworCXZpcnR1YWwgQ1BXTF9Db2xvcgkJCQlHZXRUZXh0Q29sb3IoKSBjb25zdDsKKwl2aXJ0dWFsIENQV0xfQ29sb3IJCQkJR2V0VGV4dFN0cm9rZUNvbG9yKCkgY29uc3Q7CisJdmlydHVhbCBGWF9GTE9BVAkJCQlHZXRGb250U2l6ZSgpIGNvbnN0OworCXZpcnR1YWwgRlhfSU5UMzIJCQkJR2V0SW5uZXJCb3JkZXJXaWR0aCgpIGNvbnN0OworCXZpcnR1YWwgQ1BXTF9Db2xvcgkJCQlHZXRCb3JkZXJMZWZ0VG9wQ29sb3IoRlhfSU5UMzIgbkJvcmRlclN0eWxlKSBjb25zdDsKKwl2aXJ0dWFsIENQV0xfQ29sb3IJCQkJR2V0Qm9yZGVyUmlnaHRCb3R0b21Db2xvcihGWF9JTlQzMiBuQm9yZGVyU3R5bGUpIGNvbnN0OworCisJdmlydHVhbCBGWF9CT09MCQkJCQlJc01vZGlmaWVkKCkgY29uc3Qge3JldHVybiBGQUxTRTt9CisKKwl2aXJ0dWFsIHZvaWQJCQkJCVNldEZvbnRTaXplKEZYX0ZMT0FUIGZGb250U2l6ZSk7CQorCisJdm9pZAkJCQkJCQlTZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ1BXTF9Db2xvciAmIGNvbG9yKTsJCQorCXZvaWQJCQkJCQkJU2V0Qm9yZGVyQ29sb3IoY29uc3QgQ1BXTF9Db2xvciAmIGNvbG9yKTsKKwl2b2lkCQkJCQkJCVNldEJvcmRlcldpZHRoKEZYX0lOVDMyIG5Cb3JkZXJXaWR0aCk7CisJdm9pZAkJCQkJCQlTZXRDbGlwUmVjdChjb25zdCBDUERGX1JlY3QgJiByZWN0KTsKKwl2b2lkCQkJCQkJCVNldEJvcmRlclN0eWxlKEZYX0lOVDMyIGVCb3JkZXJTdHlsZSk7CQorCXZvaWQJCQkJCQkJU2V0Qm9yZGVyRGFzaChjb25zdCBDUFdMX0Rhc2ggJiBzRGFzaCk7CisKKwlDUERGX1JlY3QJCQkJCQlHZXRPcmlnaW5XaW5kb3dSZWN0KCkgY29uc3Q7CisJdmlydHVhbCBDUERGX1JlY3QJCQkJR2V0V2luZG93UmVjdCgpIGNvbnN0OworCXZpcnR1YWwgQ1BERl9SZWN0CQkJCUdldENsaWVudFJlY3QoKSBjb25zdDsKKwlDUERGX1BvaW50CQkJCQkJR2V0Q2VudGVyUG9pbnQoKSBjb25zdDsKKwlDUERGX1JlY3QJCQkJCQlHZXRDbGllbnRDZW50ZXJTcXVhcmUoKSBjb25zdDsKKwlDUERGX1JlY3QJCQkJCQlHZXRXaW5kb3dDZW50ZXJTcXVhcmUoKSBjb25zdDsJCQorCUZYX0lOVDMyCQkJCQkJR2V0Qm9yZGVyV2lkdGgoKSBjb25zdDsJCQorCUZYX0JPT0wJCQkJCQkJSXNWaXNpYmxlKCkgY29uc3Qge3JldHVybiBtX2JWaXNpYmxlO30JCisJRlhfQk9PTAkJCQkJCQlIYXNGbGFnKEZYX0RXT1JEIGR3RmxhZ3MpIGNvbnN0OworCXZvaWQJCQkJCQkJQWRkRmxhZyhGWF9EV09SRCBkd0ZsYWdzKTsKKwl2b2lkCQkJCQkJCVJlbW92ZUZsYWcoRlhfRFdPUkQgZHdGbGFncyk7CisJQ1BERl9SZWN0CQkJCQkJR2V0Q2xpcFJlY3QoKSBjb25zdDsJCQorCUNQV0xfV25kKgkJCQkJCUdldFBhcmVudFdpbmRvdygpIGNvbnN0OwkJCisJRlhfSU5UMzIJCQkJCQlHZXRCb3JkZXJTdHlsZSgpIGNvbnN0OwkKKwlDUFdMX0Rhc2gJCQkJCQlHZXRCb3JkZXJEYXNoKCkgY29uc3Q7CisJdm9pZCoJCQkJCQkJR2V0QXR0YWNoZWREYXRhKCkgY29uc3Q7CisJCisJRlhfQk9PTAkJCQkJCQlXbmRIaXRUZXN0KGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3Q7CisJRlhfQk9PTAkJCQkJCQlDbGllbnRIaXRUZXN0KGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3Q7CisJRlhfQk9PTAkJCQkJCQlJc0NhcHR1cmVNb3VzZSgpIGNvbnN0OworCisJY29uc3QgQ1BXTF9XbmQqCQkJCQlHZXRGb2N1c2VkKCkgY29uc3Q7CisJRlhfQk9PTAkJCQkJCQlJc0ZvY3VzZWQoKSBjb25zdDsKKwlGWF9CT09MCQkJCQkJCUlzUmVhZE9ubHkoKSBjb25zdDsKKwlDUFdMX1Njcm9sbEJhcioJCQkJCUdldFZTY3JvbGxCYXIoKSBjb25zdDsKKworCUlGWF9FZGl0X0ZvbnRNYXAqCQkJCUdldEZvbnRNYXAoKSBjb25zdDsKKwlJUFdMX1Byb3ZpZGVyKgkJCQkJR2V0UHJvdmlkZXIoKSBjb25zdDsKKwl2aXJ0dWFsIElGWF9TeXN0ZW1IYW5kbGVyKgkJR2V0U3lzdGVtSGFuZGxlcigpIGNvbnN0OworCUlQV0xfRm9jdXNIYW5kbGVyKgkJCQlHZXRGb2N1c0hhbmRsZXIoKSBjb25zdDsKKwkKKwlGWF9JTlQzMgkJCQkJCUdldFRyYW5zcGFyZW5jeSgpOworCXZvaWQJCQkJCQkJU2V0VHJhbnNwYXJlbmN5KEZYX0lOVDMyIG5UcmFuc3BhcmVuY3kpOworCisJQ1BERl9NYXRyaXgJCQkJCQlHZXRDaGlsZFRvUm9vdCgpIGNvbnN0OworCUNQREZfTWF0cml4CQkJCQkJR2V0Q2hpbGRNYXRyaXgoKSBjb25zdDsKKwl2b2lkCQkJCQkJCVNldENoaWxkTWF0cml4KGNvbnN0IENQREZfTWF0cml4JiBtdCk7CisJQ1BERl9NYXRyaXgJCQkJCQlHZXRXaW5kb3dNYXRyaXgoKSBjb25zdDsKKworCXZpcnR1YWwgQ1BERl9Qb2ludAkJCQlDaGlsZFRvUGFyZW50KGNvbnN0IENQREZfUG9pbnQmIHBvaW50KSBjb25zdDsKKwl2aXJ0dWFsIENQREZfUmVjdAkJCQlDaGlsZFRvUGFyZW50KGNvbnN0IENQREZfUmVjdCYgcmVjdCkgY29uc3Q7CisJdmlydHVhbCBDUERGX1BvaW50CQkJCVBhcmVudFRvQ2hpbGQoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpIGNvbnN0OworCXZpcnR1YWwgQ1BERl9SZWN0CQkJCVBhcmVudFRvQ2hpbGQoY29uc3QgQ1BERl9SZWN0JiByZWN0KSBjb25zdDsKKworCS8vdGhvc2UgbWV0aG9kcyBvbmx5IGltcGxlbWVudGVkIGJ5IGxpc3RjdHJsIGl0ZW0KKwl2aXJ0dWFsIEZYX0ZMT0FUCQkJCUdldEl0ZW1IZWlnaHQoRlhfRkxPQVQgZkxpbWl0V2lkdGgpIHtyZXR1cm4gMDt9IAorCXZpcnR1YWwgRlhfRkxPQVQJCQkJR2V0SXRlbUxlZnRNYXJnaW4oKSB7cmV0dXJuIDA7fSAKKwl2aXJ0dWFsIEZYX0ZMT0FUCQkJCUdldEl0ZW1SaWdodE1hcmdpbigpIHtyZXR1cm4gMDt9IAorCisJdm9pZAkJCQkJCQlFbmFibGVXaW5kb3coRlhfQk9PTCBiRW5hYmxlKTsKKwlGWF9CT09MCQkJCQkJCUlzRW5hYmxlZCgpOworCXZpcnR1YWwgdm9pZAkJCQkJU2V0Q3Vyc29yKCk7CisKK3Byb3RlY3RlZDoJCisJdmlydHVhbCB2b2lkCQkJCQlDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7CisJdmlydHVhbCB2b2lkCQkJCQlSZVBvc0NoaWxkV25kKCk7CisJdm9pZAkJCQkJCQlHZXRBcHBlYXJhbmNlU3RyZWFtKENGWF9CeXRlVGV4dEJ1ZiAmIHNBcHBTdHJlYW0pOworCXZpcnR1YWwgdm9pZAkJCQkJR2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oQ0ZYX0J5dGVUZXh0QnVmICYgc0FwcFN0cmVhbSk7CisJdmlydHVhbCB2b2lkCQkJCQlHZXRDaGlsZEFwcGVhcmFuY2VTdHJlYW0oQ0ZYX0J5dGVUZXh0QnVmICYgc0FwcFN0cmVhbSk7CisKKwl2aXJ0dWFsIHZvaWQJCQkJCURyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCURyYXdDaGlsZEFwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSk7CisKKwl2aXJ0dWFsIHZvaWQJCQkJCU9uQ3JlYXRlKFBXTF9DUkVBVEVQQVJBTSAmIGNwKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCU9uQ3JlYXRlZCgpOworCXZpcnR1YWwgdm9pZAkJCQkJT25EZXN0cm95KCk7CisKKwl2aXJ0dWFsIHZvaWQJCQkJCU9uU2V0Rm9jdXMoKTsKKwl2aXJ0dWFsIHZvaWQJCQkJCU9uS2lsbEZvY3VzKCk7CisKKwl2aXJ0dWFsIHZvaWQJCQkJCU9uRW5hYmxlZCgpOworCXZpcnR1YWwgdm9pZAkJCQkJT25EaXNhYmxlZCgpOworCisJdm9pZAkJCQkJCQlTZXROb3RpZnlGbGFnKEZYX0JPT0wgYk5vdGlmeWluZyA9IFRSVUUpe21fYk5vdGlmeWluZyA9IGJOb3RpZnlpbmc7fTsKKyAKKwlGWF9CT09MCQkJCQkJCUlzVmFsaWQoKSBjb25zdDsKKwlQV0xfQ1JFQVRFUEFSQU0JCQkJCUdldENyZWF0aW9uUGFyYW0oKSBjb25zdDsJCQorCUZYX0JPT0wJCQkJCQkJSXNOb3RpZnlpbmcoKSBjb25zdCB7cmV0dXJuIG1fYk5vdGlmeWluZzt9CQorCQorCXZvaWQJCQkJCQkJSW52YWxpZGF0ZVJlY3RNb3ZlKGNvbnN0IENQREZfUmVjdCAmIHJjT2xkLCBjb25zdCBDUERGX1JlY3QgJiByY05ldyk7CisKKwl2b2lkCQkJCQkJCVBXTHRvV25kKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfSU5UMzImIHgsIEZYX0lOVDMyJiB5KSBjb25zdDsKKwlGWF9SRUNUCQkJCQkJCVBXTHRvV25kKGNvbnN0IENQREZfUmVjdCAmIHJlY3QpIGNvbnN0OwkKKwlGWF9IV05ECQkJCQkJCUdldEF0dGFjaGVkSFduZCgpIGNvbnN0OworCQorCUZYX0JPT0wJCQkJCQkJSXNXbmRDYXB0dXJlTW91c2UoY29uc3QgQ1BXTF9XbmQgKiBwV25kKSBjb25zdDsKKwlGWF9CT09MCQkJCQkJCUlzV25kQ2FwdHVyZUtleWJvYXJkKGNvbnN0IENQV0xfV25kICogcFduZCkgY29uc3Q7CQorCWNvbnN0IENQV0xfV25kKgkJCQkJR2V0Um9vdFduZCgpIGNvbnN0OwkKKworCUZYX0JPT0wJCQkJCQkJSXNDVFJMcHJlc3NlZChGWF9EV09SRCBuRmxhZykgY29uc3Q7CisJRlhfQk9PTAkJCQkJCQlJc1NISUZUcHJlc3NlZChGWF9EV09SRCBuRmxhZykgY29uc3Q7CisJRlhfQk9PTAkJCQkJCQlJc0FMVHByZXNzZWQoRlhfRFdPUkQgbkZsYWcpIGNvbnN0OworCUZYX0JPT0wJCQkJCQkJSXNJTlNFUlRwcmVzc2VkKEZYX0RXT1JEIG5GbGFnKSBjb25zdDsKKworcHJpdmF0ZToKKwl2b2lkCQkJCQkJCUFkZENoaWxkKENQV0xfV25kICogcFduZCk7CisJdm9pZAkJCQkJCQlSZW1vdmVDaGlsZChDUFdMX1duZCAqIHBXbmQpOworCisJdm9pZAkJCQkJCQlDcmVhdGVTY3JvbGxCYXIoY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApOworCXZvaWQJCQkJCQkJQ3JlYXRlVlNjcm9sbEJhcihjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCk7CQorCisJdm9pZAkJCQkJCQlBanVzdFN0eWxlKCk7CQorCXZvaWQJCQkJCQkJQ3JlYXRlTXNnQ29udHJvbCgpOworCXZvaWQJCQkJCQkJRGVzdHJveU1zZ0NvbnRyb2woKTsKKwkKKwlDUFdMX01zZ0NvbnRyb2wqCQkJCUdldE1zZ0NvbnRyb2woKSBjb25zdDsJCisJCitwcm90ZWN0ZWQ6CisJQ0ZYX0FycmF5VGVtcGxhdGU8Q1BXTF9XbmQqPgltX2FDaGlsZHJlbjsKKworcHJpdmF0ZToKKwlQV0xfQ1JFQVRFUEFSQU0JCQkJCW1fc1ByaXZhdGVQYXJhbTsKKwkKKwlDUFdMX1Njcm9sbEJhcioJCQkJCW1fcFZTY3JvbGxCYXI7CisKKwlDUERGX1JlY3QJCQkJCQltX3JjV2luZG93OworCUNQREZfUmVjdAkJCQkJCW1fcmNDbGlwOworCisJRlhfQk9PTAkJCQkJCQltX2JDcmVhdGVkOwkJCQorCUZYX0JPT0wJCQkJCQkJbV9iVmlzaWJsZTsKKwlGWF9CT09MCQkJCQkJCW1fYk5vdGlmeWluZzsJCisJRlhfQk9PTAkJCQkJCQltX2JFbmFibGVkOworfTsKKworLy8gI2lmbmRlZiBWS19FTkQKKy8vIAorLy8gI2RlZmluZSBWS19FTkQgICAgICAgICAgICAweDIzCisvLyAjZGVmaW5lIFZLX0hPTUUgICAgICAgICAgIDB4MjQKKy8vICNkZWZpbmUgVktfTEVGVCAgICAgICAgICAgMHgyNQorLy8gI2RlZmluZSBWS19VUCAgICAgICAgICAgICAweDI2CisvLyAjZGVmaW5lIFZLX1JJR0hUICAgICAgICAgIDB4MjcKKy8vICNkZWZpbmUgVktfRE9XTiAgICAgICAgICAgMHgyOAorLy8gI2RlZmluZSBWS19JTlNFUlQgICAgICAgICAweDJECisvLyAjZGVmaW5lIFZLX0RFTEVURSAgICAgICAgIDB4MkUKKy8vIAorLy8gI2RlZmluZSBWS19CQUNLICAgICAgICAgICAweDA4CisvLyAjZGVmaW5lIFZLX1RBQiAgICAgICAgICAgIDB4MDkKKy8vIAorLy8gI2RlZmluZSBWS19DTEVBUiAgICAgICAgICAweDBDCisvLyAjZGVmaW5lIFZLX1JFVFVSTiAgICAgICAgIDB4MEQKKy8vICNkZWZpbmUgVktfRVNDQVBFICAgICAgICAgMHgxQgorLy8gI2RlZmluZSBWS19TUEFDRSAgICAgICAgICAweDIwCisvLyAjZW5kaWYKKy8vIAorLy8gI2RlZmluZSBWS19OT05FCQkJICAwCisKKyNlbmRpZiAvLyAhZGVmaW5lZChBRlhfUFdMX1dORF9IX19EMzI4MTJBRF9BODc1XzRFMDhfOUQzQ18wQTU3MDIwOTg3QzZfX0lOQ0xVREVEXykKKworCmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9mb3JtZmlsbGVyL0ZGTF9DQkFfRm9udG1hcC5jcHAgYi9mcGRmc2RrL3NyYy9mb3JtZmlsbGVyL0ZGTF9DQkFfRm9udG1hcC5jcHAKaW5kZXggNTk2MTdhYy4uMGM3Y2Q0OCAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvZm9ybWZpbGxlci9GRkxfQ0JBX0ZvbnRtYXAuY3BwCisrKyBiL2ZwZGZzZGsvc3JjL2Zvcm1maWxsZXIvRkZMX0NCQV9Gb250bWFwLmNwcApAQCAtMSwzMDAgKzEsMzAwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0Zvcm1GaWxsZXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9DQkFfRm9udG1hcC5oIg0KLQ0KLUNCQV9Gb250TWFwOjpDQkFfRm9udE1hcChDUERGU0RLX0Fubm90KiBwQW5ub3QsIElGWF9TeXN0ZW1IYW5kbGVyKiBwU3lzdGVtSGFuZGxlcikgOg0KLQlDUFdMX0ZvbnRNYXAocFN5c3RlbUhhbmRsZXIpLA0KLQltX3BEb2N1bWVudChOVUxMKSwNCi0JbV9wQW5ub3REaWN0KE5VTEwpLA0KLQltX3BEZWZhdWx0Rm9udChOVUxMKSwNCi0JbV9zQVBUeXBlKCJOIikNCi17DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotDQotCUNQREZfUGFnZSogcFBhZ2UgPSBwQW5ub3QtPkdldFBERlBhZ2UoKTsNCi0NCi0JbV9wRG9jdW1lbnQgPSBwUGFnZS0+bV9wRG9jdW1lbnQ7DQotCW1fcEFubm90RGljdCA9IHBBbm5vdC0+R2V0UERGQW5ub3QoKS0+bV9wQW5ub3REaWN0Ow0KLX0NCi0NCi1DQkFfRm9udE1hcDo6Q0JBX0ZvbnRNYXAoQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpY3QsIA0KLQkJCQkJCSBJRlhfU3lzdGVtSGFuZGxlciogcFN5c3RlbUhhbmRsZXIpIDoNCi0JQ1BXTF9Gb250TWFwKHBTeXN0ZW1IYW5kbGVyKSwNCi0JbV9wRG9jdW1lbnQocERvY3VtZW50KSwNCi0JbV9wQW5ub3REaWN0KHBBbm5vdERpY3QpLA0KLQltX3BEZWZhdWx0Rm9udChOVUxMKSwNCi0JbV9zQVBUeXBlKCJOIikNCi17DQotfQ0KLQ0KLUNCQV9Gb250TWFwOjp+Q0JBX0ZvbnRNYXAoKQ0KLXsNCi19DQotDQotdm9pZCBDQkFfRm9udE1hcDo6UmVzZXQoKQ0KLXsNCi0JRW1wdHkoKTsNCi0JbV9wRGVmYXVsdEZvbnQgPSBOVUxMOw0KLQltX3NEZWZhdWx0Rm9udE5hbWUgPSAiIjsNCi19DQotDQotdm9pZCBDQkFfRm9udE1hcDo6SW5pdGlhbChGWF9MUENTVFIgZm9udG5hbWUpDQotew0KLQlGWF9JTlQzMiBuQ2hhcnNldCA9IERFRkFVTFRfQ0hBUlNFVDsNCi0NCi0JaWYgKCFtX3BEZWZhdWx0Rm9udCkNCi0Jew0KLQkJbV9wRGVmYXVsdEZvbnQgPSBHZXRBbm5vdERlZmF1bHRGb250KG1fc0RlZmF1bHRGb250TmFtZSk7CQ0KLQkJaWYgKG1fcERlZmF1bHRGb250KQ0KLQkJew0KLQkJCWlmIChjb25zdCBDRlhfU3Vic3RGb250KiBwU3Vic3RGb250ID0gbV9wRGVmYXVsdEZvbnQtPkdldFN1YnN0Rm9udCgpKQ0KLQkJCQluQ2hhcnNldCA9IHBTdWJzdEZvbnQtPm1fQ2hhcnNldDsNCi0JCQllbHNlDQotCQkJew0KLQkJCQlpZiAobV9zRGVmYXVsdEZvbnROYW1lID09ICJXaW5nZGluZ3MiIHx8IG1fc0RlZmF1bHRGb250TmFtZSA9PSAiV2luZ2RpbmdzMiIgfHwNCi0JCQkJCW1fc0RlZmF1bHRGb250TmFtZSA9PSAiV2luZ2RpbmdzMyIgfHwgbV9zRGVmYXVsdEZvbnROYW1lID09ICJXZWJkaW5ncyIpDQotCQkJCQkJbkNoYXJzZXQgPSBTWU1CT0xfQ0hBUlNFVDsNCi0JCQkJZWxzZQ0KLQkJCQkJbkNoYXJzZXQgPSBBTlNJX0NIQVJTRVQ7DQotCQkJfQ0KLQkJCUFkZEZvbnREYXRhKG1fcERlZmF1bHRGb250LCBtX3NEZWZhdWx0Rm9udE5hbWUsIG5DaGFyc2V0KTsNCi0JCQlBZGRGb250VG9Bbm5vdERpY3QobV9wRGVmYXVsdEZvbnQsIG1fc0RlZmF1bHRGb250TmFtZSk7DQotCQl9DQotCX0NCi0NCi0JaWYgKG5DaGFyc2V0ICE9IEFOU0lfQ0hBUlNFVCkNCi0JCUNQV0xfRm9udE1hcDo6SW5pdGlhbChmb250bmFtZSk7DQotfQ0KLQ0KLXZvaWQgQ0JBX0ZvbnRNYXA6OlNldERlZmF1bHRGb250KENQREZfRm9udCAqIHBGb250LCBjb25zdCBDRlhfQnl0ZVN0cmluZyAmIHNGb250TmFtZSkNCi17DQotCUFTU0VSVChwRm9udCAhPSBOVUxMKTsNCi0NCi0JaWYgKG1fcERlZmF1bHRGb250KSByZXR1cm47DQotDQotCW1fcERlZmF1bHRGb250ID0gcEZvbnQ7DQotCW1fc0RlZmF1bHRGb250TmFtZSA9IHNGb250TmFtZTsNCi0NCi0vLwlpZiAobV9zRGVmYXVsdEZvbnROYW1lLklzRW1wdHkoKSkNCi0vLwkJbV9zRGVmYXVsdEZvbnROYW1lID0gcEZvbnQtPkdldEZvbnRUeXBlTmFtZSgpOw0KLQ0KLQlGWF9JTlQzMiBuQ2hhcnNldCA9IERFRkFVTFRfQ0hBUlNFVDsNCi0JaWYgKGNvbnN0IENGWF9TdWJzdEZvbnQqIHBTdWJzdEZvbnQgPSBtX3BEZWZhdWx0Rm9udC0+R2V0U3Vic3RGb250KCkpDQotCQluQ2hhcnNldCA9IHBTdWJzdEZvbnQtPm1fQ2hhcnNldDsNCi0JQWRkRm9udERhdGEobV9wRGVmYXVsdEZvbnQsIG1fc0RlZmF1bHRGb250TmFtZSwgbkNoYXJzZXQpOw0KLX0NCi0NCi1DUERGX0ZvbnQqIENCQV9Gb250TWFwOjpGaW5kRm9udFNhbWVDaGFyc2V0KENGWF9CeXRlU3RyaW5nJiBzRm9udEFsaWFzLCBGWF9JTlQzMiBuQ2hhcnNldCkNCi17DQotCUFTU0VSVChtX3BBbm5vdERpY3QgIT0gTlVMTCk7DQotDQotCWlmIChtX3BBbm5vdERpY3QtPkdldFN0cmluZygiU3VidHlwZSIpID09ICJXaWRnZXQiKQ0KLQl7DQotCQlDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQgPSBHZXREb2N1bWVudCgpOw0KLQkJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JCUNQREZfRGljdGlvbmFyeSAqIHBSb290RGljdCA9IHBEb2N1bWVudC0+R2V0Um9vdCgpOw0KLQkJaWYgKCFwUm9vdERpY3QpIHJldHVybiBOVUxMOw0KLQ0KLQkJQ1BERl9EaWN0aW9uYXJ5KiBwQWNyb0Zvcm1EaWN0ID0gcFJvb3REaWN0LT5HZXREaWN0KCJBY3JvRm9ybSIpOw0KLQkJaWYgKCFwQWNyb0Zvcm1EaWN0KSByZXR1cm4gTlVMTDsNCi0NCi0JCUNQREZfRGljdGlvbmFyeSAqIHBEUkRpY3QgPSBwQWNyb0Zvcm1EaWN0LT5HZXREaWN0KCJEUiIpOw0KLQkJaWYgKCFwRFJEaWN0KSByZXR1cm4gTlVMTDsNCi0NCi0JCXJldHVybiBGaW5kUmVzRm9udFNhbWVDaGFyc2V0KHBEUkRpY3QsIHNGb250QWxpYXMsIG5DaGFyc2V0KTsNCi0JfQ0KLQ0KLQlyZXR1cm4gTlVMTDsNCi19DQotDQotQ1BERl9Eb2N1bWVudCogQ0JBX0ZvbnRNYXA6OkdldERvY3VtZW50KCkNCi17DQotCXJldHVybiBtX3BEb2N1bWVudDsNCi19DQotDQotQ1BERl9Gb250KiBDQkFfRm9udE1hcDo6RmluZFJlc0ZvbnRTYW1lQ2hhcnNldChDUERGX0RpY3Rpb25hcnkqIHBSZXNEaWN0LCBDRlhfQnl0ZVN0cmluZyYgc0ZvbnRBbGlhcywgDQotCQkJCQkJCQkJCQkJCUZYX0lOVDMyIG5DaGFyc2V0KQ0KLXsNCi0JaWYgKCFwUmVzRGljdCkgcmV0dXJuIE5VTEw7DQotDQotCUNQREZfRG9jdW1lbnQqIHBEb2N1bWVudCA9IEdldERvY3VtZW50KCk7DQotCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCUNQREZfRGljdGlvbmFyeSogcEZvbnRzID0gcFJlc0RpY3QtPkdldERpY3QoIkZvbnQiKTsNCi0JaWYgKHBGb250cyA9PSBOVUxMKSByZXR1cm4gTlVMTDsNCi0NCi0JQ1BERl9Gb250KiBwRmluZCA9IE5VTEw7DQotDQotCUZYX1BPU0lUSU9OIHBvcyA9IHBGb250cy0+R2V0U3RhcnRQb3MoKTsNCi0Jd2hpbGUgKHBvcykNCi0Jew0KLQkJQ1BERl9PYmplY3QqIHBPYmogPSBOVUxMOw0KLQkJQ0ZYX0J5dGVTdHJpbmcgY3NLZXk7DQotCQlwT2JqID0gcEZvbnRzLT5HZXROZXh0RWxlbWVudChwb3MsIGNzS2V5KTsNCi0JCWlmIChwT2JqID09IE5VTEwpIGNvbnRpbnVlOw0KLQ0KLQkJQ1BERl9PYmplY3QqIHBEaXJlY3QgPSBwT2JqLT5HZXREaXJlY3QoKTsNCi0JCWlmIChwRGlyZWN0ID09IE5VTEwgfHwgcERpcmVjdC0+R2V0VHlwZSgpICE9IFBERk9CSl9ESUNUSU9OQVJZKSBjb250aW51ZTsNCi0NCi0JCUNQREZfRGljdGlvbmFyeSogcEVsZW1lbnQgPSAoQ1BERl9EaWN0aW9uYXJ5KilwRGlyZWN0Ow0KLQkJaWYgKHBFbGVtZW50LT5HZXRTdHJpbmcoIlR5cGUiKSAhPSAiRm9udCIpIGNvbnRpbnVlOw0KLQ0KLQkJQ1BERl9Gb250KiBwRm9udCA9IHBEb2N1bWVudC0+TG9hZEZvbnQocEVsZW1lbnQpOw0KLQkJaWYgKHBGb250ID09IE5VTEwpIGNvbnRpbnVlOw0KLQkJY29uc3QgQ0ZYX1N1YnN0Rm9udCogcFN1YnN0ID0gcEZvbnQtPkdldFN1YnN0Rm9udCgpOw0KLQkJaWYgKHBTdWJzdCA9PSBOVUxMKSBjb250aW51ZTsNCi0JCWlmIChwU3Vic3QtPm1fQ2hhcnNldCA9PSBuQ2hhcnNldCkNCi0JCXsNCi0JCQlzRm9udEFsaWFzID0gY3NLZXk7DQotCQkJcEZpbmQgPSBwRm9udDsNCi0JCX0NCi0JfQ0KLQlyZXR1cm4gcEZpbmQ7DQotfQ0KLQ0KLXZvaWQgQ0JBX0ZvbnRNYXA6OkFkZGVkRm9udChDUERGX0ZvbnQqIHBGb250LCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc0ZvbnRBbGlhcykNCi17DQotCUFkZEZvbnRUb0Fubm90RGljdChwRm9udCwgc0ZvbnRBbGlhcyk7DQotfQ0KLQ0KLXZvaWQgQ0JBX0ZvbnRNYXA6OkFkZEZvbnRUb0Fubm90RGljdChDUERGX0ZvbnQqIHBGb250LCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc0FsaWFzKQ0KLXsNCi0JaWYgKCFwRm9udCkJcmV0dXJuOw0KLQ0KLQlBU1NFUlQobV9wQW5ub3REaWN0ICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCUNQREZfRGljdGlvbmFyeSogcEFQRGljdCA9IG1fcEFubm90RGljdC0+R2V0RGljdCgiQVAiKTsNCi0NCi0JaWYgKHBBUERpY3QgPT0gTlVMTCkgDQotCXsNCi0JCXBBUERpY3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5Ow0KLQkJbV9wQW5ub3REaWN0LT5TZXRBdCgiQVAiLCBwQVBEaWN0KTsNCi0JfQ0KLQ0KLQkvL3RvIGF2b2lkIGNoZWNrYm94IGFuZCByYWRpb2J1dHRvbg0KLQlDUERGX09iamVjdCogcE9iamVjdCA9IHBBUERpY3QtPkdldEVsZW1lbnQobV9zQVBUeXBlKTsNCi0JaWYgKHBPYmplY3QgJiYgcE9iamVjdC0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKQ0KLQkJcmV0dXJuOw0KLQ0KLQlDUERGX1N0cmVhbSogcFN0cmVhbSA9IHBBUERpY3QtPkdldFN0cmVhbShtX3NBUFR5cGUpOw0KLQlpZiAocFN0cmVhbSA9PSBOVUxMKSANCi0Jew0KLQkJcFN0cmVhbSA9IEZYX05FVyBDUERGX1N0cmVhbShOVUxMLCAwLCBOVUxMKTsNCi0JCUZYX0lOVDMyIG9iam51bSA9IG1fcERvY3VtZW50LT5BZGRJbmRpcmVjdE9iamVjdChwU3RyZWFtKTsNCi0JCXBBUERpY3QtPlNldEF0UmVmZXJlbmNlKG1fc0FQVHlwZSwgbV9wRG9jdW1lbnQsIG9iam51bSk7DQotCX0NCi0NCi0JQ1BERl9EaWN0aW9uYXJ5ICogcFN0cmVhbURpY3QgPSBwU3RyZWFtLT5HZXREaWN0KCk7DQotDQotCWlmICghcFN0cmVhbURpY3QpDQotCXsNCi0JCXBTdHJlYW1EaWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsNCi0JCXBTdHJlYW0tPkluaXRTdHJlYW0oTlVMTCwgMCwgcFN0cmVhbURpY3QpOw0KLQl9DQotDQotCWlmIChwU3RyZWFtRGljdCkNCi0Jew0KLQkJQ1BERl9EaWN0aW9uYXJ5KiBwU3RyZWFtUmVzTGlzdCA9IHBTdHJlYW1EaWN0LT5HZXREaWN0KCJSZXNvdXJjZXMiKTsNCi0JCWlmICghcFN0cmVhbVJlc0xpc3QpDQotCQl7DQotCQkJcFN0cmVhbVJlc0xpc3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5KCk7DQotCQkJcFN0cmVhbURpY3QtPlNldEF0KCJSZXNvdXJjZXMiLCBwU3RyZWFtUmVzTGlzdCk7DQotCQl9DQotDQotCQlpZiAocFN0cmVhbVJlc0xpc3QpIA0KLQkJew0KLQkJCUNQREZfRGljdGlvbmFyeSogcFN0cmVhbVJlc0ZvbnRMaXN0ID0gcFN0cmVhbVJlc0xpc3QtPkdldERpY3QoIkZvbnQiKTsNCi0JCQlpZiAoIXBTdHJlYW1SZXNGb250TGlzdCkgDQotCQkJew0KLQkJCQlwU3RyZWFtUmVzRm9udExpc3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5Ow0KLQkJCQlGWF9JTlQzMiBvYmpudW0gPSBtX3BEb2N1bWVudC0+QWRkSW5kaXJlY3RPYmplY3QocFN0cmVhbVJlc0ZvbnRMaXN0KTsNCi0JCQkJcFN0cmVhbVJlc0xpc3QtPlNldEF0UmVmZXJlbmNlKCJGb250IiwgbV9wRG9jdW1lbnQsIG9iam51bSk7DQotCQkJfQ0KLQkJCWlmICghcFN0cmVhbVJlc0ZvbnRMaXN0LT5LZXlFeGlzdChzQWxpYXMpKQ0KLQkJCQlwU3RyZWFtUmVzRm9udExpc3QtPlNldEF0UmVmZXJlbmNlKHNBbGlhcywgbV9wRG9jdW1lbnQsIHBGb250LT5HZXRGb250RGljdCgpKTsNCi0JCX0NCi0JfQ0KLX0NCi0NCi1DUERGX0ZvbnQqIENCQV9Gb250TWFwOjpHZXRBbm5vdERlZmF1bHRGb250KENGWF9CeXRlU3RyaW5nICZzQWxpYXMpDQotew0KLQlBU1NFUlQobV9wQW5ub3REaWN0ICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCUNQREZfRGljdGlvbmFyeSogcEFjcm9Gb3JtRGljdCA9IE5VTEw7DQotDQotCUZYX0JPT0wgYldpZGdldCA9IChtX3BBbm5vdERpY3QtPkdldFN0cmluZygiU3VidHlwZSIpID09ICJXaWRnZXQiKTsNCi0NCi0JaWYgKGJXaWRnZXQpDQotCXsNCi0JCWlmIChDUERGX0RpY3Rpb25hcnkgKiBwUm9vdERpY3QgPSBtX3BEb2N1bWVudC0+R2V0Um9vdCgpKQ0KLQkJCXBBY3JvRm9ybURpY3QgPSBwUm9vdERpY3QtPkdldERpY3QoIkFjcm9Gb3JtIik7DQotCX0NCi0JDQotCUNGWF9CeXRlU3RyaW5nIHNEQTsNCi0JDQotCXNEQSA9IEZQREZfR2V0RmllbGRBdHRyKG1fcEFubm90RGljdCwgIkRBIiktPkdldFN0cmluZygpOw0KLQ0KLQlpZiAoYldpZGdldCkNCi0Jew0KLQkJaWYgKHNEQS5Jc0VtcHR5KCkpDQotCQl7DQotCQkJc0RBID0gRlBERl9HZXRGaWVsZEF0dHIocEFjcm9Gb3JtRGljdCwgIkRBIiktPkdldFN0cmluZygpOwkNCi0JCX0NCi0JfQ0KLQkNCi0JQ1BERl9EaWN0aW9uYXJ5ICogcEZvbnREaWN0ID0gTlVMTDsJDQotDQotCWlmICghc0RBLklzRW1wdHkoKSkNCi0Jew0KLQkJQ1BERl9TaW1wbGVQYXJzZXIgc3ludGF4KHNEQSk7DQotCQlzeW50YXguRmluZFRhZ1BhcmFtKCJUZiIsIDIpOw0KLQkJQ0ZYX0J5dGVTdHJpbmcgc0ZvbnROYW1lID0gc3ludGF4LkdldFdvcmQoKTsNCi0JCXNBbGlhcyA9IFBERl9OYW1lRGVjb2RlKHNGb250TmFtZSkuTWlkKDEpOw0KLQ0KLQkJaWYgKENQREZfRGljdGlvbmFyeSAqIHBEUkRpY3QgPSBtX3BBbm5vdERpY3QtPkdldERpY3QoIkRSIikpDQotCQkJaWYgKENQREZfRGljdGlvbmFyeSogcERSRm9udERpY3QgPSBwRFJEaWN0LT5HZXREaWN0KCJGb250IikpDQotCQkJCXBGb250RGljdCA9IHBEUkZvbnREaWN0LT5HZXREaWN0KHNBbGlhcyk7DQotDQotCQlpZiAoIXBGb250RGljdCkNCi0JCQlpZiAoQ1BERl9EaWN0aW9uYXJ5KiBwQVBEaWN0ID0gbV9wQW5ub3REaWN0LT5HZXREaWN0KCJBUCIpKQ0KLQkJCQlpZiAoQ1BERl9EaWN0aW9uYXJ5KiBwTm9ybWFsRGljdCA9IHBBUERpY3QtPkdldERpY3QoIk4iKSkNCi0JCQkJCWlmIChDUERGX0RpY3Rpb25hcnkqIHBOb3JtYWxSZXNEaWN0ID0gcE5vcm1hbERpY3QtPkdldERpY3QoIlJlc291cmNlcyIpKQ0KLQkJCQkJCWlmIChDUERGX0RpY3Rpb25hcnkqIHBSZXNGb250RGljdCA9IHBOb3JtYWxSZXNEaWN0LT5HZXREaWN0KCJGb250IikpDQotCQkJCQkJCXBGb250RGljdCA9IHBSZXNGb250RGljdC0+R2V0RGljdChzQWxpYXMpOw0KLQ0KLQkJaWYgKGJXaWRnZXQpDQotCQl7CQkJDQotCQkJaWYgKCFwRm9udERpY3QpDQotCQkJew0KLQkJCQlpZiAocEFjcm9Gb3JtRGljdCkNCi0JCQkJew0KLQkJCQkJaWYgKENQREZfRGljdGlvbmFyeSAqIHBEUkRpY3QgPSBwQWNyb0Zvcm1EaWN0LT5HZXREaWN0KCJEUiIpKQ0KLQkJCQkJCWlmIChDUERGX0RpY3Rpb25hcnkqIHBEUkZvbnREaWN0ID0gcERSRGljdC0+R2V0RGljdCgiRm9udCIpKQ0KLQkJCQkJCQlwRm9udERpY3QgPSBwRFJGb250RGljdC0+R2V0RGljdChzQWxpYXMpOw0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQl9DQotDQotCWlmIChwRm9udERpY3QpDQotCQlyZXR1cm4gbV9wRG9jdW1lbnQtPkxvYWRGb250KHBGb250RGljdCk7DQotCWVsc2UNCi0JCXJldHVybiBOVUxMOw0KLX0NCi0NCi12b2lkIENCQV9Gb250TWFwOjpTZXRBUFR5cGUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNBUFR5cGUpDQotew0KLQltX3NBUFR5cGUgPSBzQVBUeXBlOw0KLQ0KLQlSZXNldCgpOw0KLQlJbml0aWFsKCk7DQotfQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRm9ybUZpbGxlci5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfQ0JBX0ZvbnRtYXAuaCIKKworQ0JBX0ZvbnRNYXA6OkNCQV9Gb250TWFwKENQREZTREtfQW5ub3QqIHBBbm5vdCwgSUZYX1N5c3RlbUhhbmRsZXIqIHBTeXN0ZW1IYW5kbGVyKSA6CisJQ1BXTF9Gb250TWFwKHBTeXN0ZW1IYW5kbGVyKSwKKwltX3BEb2N1bWVudChOVUxMKSwKKwltX3BBbm5vdERpY3QoTlVMTCksCisJbV9wRGVmYXVsdEZvbnQoTlVMTCksCisJbV9zQVBUeXBlKCJOIikKK3sKKwlBU1NFUlQocEFubm90ICE9IE5VTEwpOworCisJQ1BERl9QYWdlKiBwUGFnZSA9IHBBbm5vdC0+R2V0UERGUGFnZSgpOworCisJbV9wRG9jdW1lbnQgPSBwUGFnZS0+bV9wRG9jdW1lbnQ7CisJbV9wQW5ub3REaWN0ID0gcEFubm90LT5HZXRQREZBbm5vdCgpLT5tX3BBbm5vdERpY3Q7Cit9CisKK0NCQV9Gb250TWFwOjpDQkFfRm9udE1hcChDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQsIENQREZfRGljdGlvbmFyeSogcEFubm90RGljdCwgCisJCQkJCQkgSUZYX1N5c3RlbUhhbmRsZXIqIHBTeXN0ZW1IYW5kbGVyKSA6CisJQ1BXTF9Gb250TWFwKHBTeXN0ZW1IYW5kbGVyKSwKKwltX3BEb2N1bWVudChwRG9jdW1lbnQpLAorCW1fcEFubm90RGljdChwQW5ub3REaWN0KSwKKwltX3BEZWZhdWx0Rm9udChOVUxMKSwKKwltX3NBUFR5cGUoIk4iKQoreworfQorCitDQkFfRm9udE1hcDo6fkNCQV9Gb250TWFwKCkKK3sKK30KKwordm9pZCBDQkFfRm9udE1hcDo6UmVzZXQoKQoreworCUVtcHR5KCk7CisJbV9wRGVmYXVsdEZvbnQgPSBOVUxMOworCW1fc0RlZmF1bHRGb250TmFtZSA9ICIiOworfQorCit2b2lkIENCQV9Gb250TWFwOjpJbml0aWFsKEZYX0xQQ1NUUiBmb250bmFtZSkKK3sKKwlGWF9JTlQzMiBuQ2hhcnNldCA9IERFRkFVTFRfQ0hBUlNFVDsKKworCWlmICghbV9wRGVmYXVsdEZvbnQpCisJeworCQltX3BEZWZhdWx0Rm9udCA9IEdldEFubm90RGVmYXVsdEZvbnQobV9zRGVmYXVsdEZvbnROYW1lKTsJCisJCWlmIChtX3BEZWZhdWx0Rm9udCkKKwkJeworCQkJaWYgKGNvbnN0IENGWF9TdWJzdEZvbnQqIHBTdWJzdEZvbnQgPSBtX3BEZWZhdWx0Rm9udC0+R2V0U3Vic3RGb250KCkpCisJCQkJbkNoYXJzZXQgPSBwU3Vic3RGb250LT5tX0NoYXJzZXQ7CisJCQllbHNlCisJCQl7CisJCQkJaWYgKG1fc0RlZmF1bHRGb250TmFtZSA9PSAiV2luZ2RpbmdzIiB8fCBtX3NEZWZhdWx0Rm9udE5hbWUgPT0gIldpbmdkaW5nczIiIHx8CisJCQkJCW1fc0RlZmF1bHRGb250TmFtZSA9PSAiV2luZ2RpbmdzMyIgfHwgbV9zRGVmYXVsdEZvbnROYW1lID09ICJXZWJkaW5ncyIpCisJCQkJCQluQ2hhcnNldCA9IFNZTUJPTF9DSEFSU0VUOworCQkJCWVsc2UKKwkJCQkJbkNoYXJzZXQgPSBBTlNJX0NIQVJTRVQ7CisJCQl9CisJCQlBZGRGb250RGF0YShtX3BEZWZhdWx0Rm9udCwgbV9zRGVmYXVsdEZvbnROYW1lLCBuQ2hhcnNldCk7CisJCQlBZGRGb250VG9Bbm5vdERpY3QobV9wRGVmYXVsdEZvbnQsIG1fc0RlZmF1bHRGb250TmFtZSk7CisJCX0KKwl9CisKKwlpZiAobkNoYXJzZXQgIT0gQU5TSV9DSEFSU0VUKQorCQlDUFdMX0ZvbnRNYXA6OkluaXRpYWwoZm9udG5hbWUpOworfQorCit2b2lkIENCQV9Gb250TWFwOjpTZXREZWZhdWx0Rm9udChDUERGX0ZvbnQgKiBwRm9udCwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcgJiBzRm9udE5hbWUpCit7CisJQVNTRVJUKHBGb250ICE9IE5VTEwpOworCisJaWYgKG1fcERlZmF1bHRGb250KSByZXR1cm47CisKKwltX3BEZWZhdWx0Rm9udCA9IHBGb250OworCW1fc0RlZmF1bHRGb250TmFtZSA9IHNGb250TmFtZTsKKworLy8JaWYgKG1fc0RlZmF1bHRGb250TmFtZS5Jc0VtcHR5KCkpCisvLwkJbV9zRGVmYXVsdEZvbnROYW1lID0gcEZvbnQtPkdldEZvbnRUeXBlTmFtZSgpOworCisJRlhfSU5UMzIgbkNoYXJzZXQgPSBERUZBVUxUX0NIQVJTRVQ7CisJaWYgKGNvbnN0IENGWF9TdWJzdEZvbnQqIHBTdWJzdEZvbnQgPSBtX3BEZWZhdWx0Rm9udC0+R2V0U3Vic3RGb250KCkpCisJCW5DaGFyc2V0ID0gcFN1YnN0Rm9udC0+bV9DaGFyc2V0OworCUFkZEZvbnREYXRhKG1fcERlZmF1bHRGb250LCBtX3NEZWZhdWx0Rm9udE5hbWUsIG5DaGFyc2V0KTsKK30KKworQ1BERl9Gb250KiBDQkFfRm9udE1hcDo6RmluZEZvbnRTYW1lQ2hhcnNldChDRlhfQnl0ZVN0cmluZyYgc0ZvbnRBbGlhcywgRlhfSU5UMzIgbkNoYXJzZXQpCit7CisJQVNTRVJUKG1fcEFubm90RGljdCAhPSBOVUxMKTsKKworCWlmIChtX3BBbm5vdERpY3QtPkdldFN0cmluZygiU3VidHlwZSIpID09ICJXaWRnZXQiKQorCXsKKwkJQ1BERl9Eb2N1bWVudCogcERvY3VtZW50ID0gR2V0RG9jdW1lbnQoKTsKKwkJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsKKworCQlDUERGX0RpY3Rpb25hcnkgKiBwUm9vdERpY3QgPSBwRG9jdW1lbnQtPkdldFJvb3QoKTsKKwkJaWYgKCFwUm9vdERpY3QpIHJldHVybiBOVUxMOworCisJCUNQREZfRGljdGlvbmFyeSogcEFjcm9Gb3JtRGljdCA9IHBSb290RGljdC0+R2V0RGljdCgiQWNyb0Zvcm0iKTsKKwkJaWYgKCFwQWNyb0Zvcm1EaWN0KSByZXR1cm4gTlVMTDsKKworCQlDUERGX0RpY3Rpb25hcnkgKiBwRFJEaWN0ID0gcEFjcm9Gb3JtRGljdC0+R2V0RGljdCgiRFIiKTsKKwkJaWYgKCFwRFJEaWN0KSByZXR1cm4gTlVMTDsKKworCQlyZXR1cm4gRmluZFJlc0ZvbnRTYW1lQ2hhcnNldChwRFJEaWN0LCBzRm9udEFsaWFzLCBuQ2hhcnNldCk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK0NQREZfRG9jdW1lbnQqIENCQV9Gb250TWFwOjpHZXREb2N1bWVudCgpCit7CisJcmV0dXJuIG1fcERvY3VtZW50OworfQorCitDUERGX0ZvbnQqIENCQV9Gb250TWFwOjpGaW5kUmVzRm9udFNhbWVDaGFyc2V0KENQREZfRGljdGlvbmFyeSogcFJlc0RpY3QsIENGWF9CeXRlU3RyaW5nJiBzRm9udEFsaWFzLCAKKwkJCQkJCQkJCQkJCQlGWF9JTlQzMiBuQ2hhcnNldCkKK3sKKwlpZiAoIXBSZXNEaWN0KSByZXR1cm4gTlVMTDsKKworCUNQREZfRG9jdW1lbnQqIHBEb2N1bWVudCA9IEdldERvY3VtZW50KCk7CisJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsKKworCUNQREZfRGljdGlvbmFyeSogcEZvbnRzID0gcFJlc0RpY3QtPkdldERpY3QoIkZvbnQiKTsKKwlpZiAocEZvbnRzID09IE5VTEwpIHJldHVybiBOVUxMOworCisJQ1BERl9Gb250KiBwRmluZCA9IE5VTEw7CisKKwlGWF9QT1NJVElPTiBwb3MgPSBwRm9udHMtPkdldFN0YXJ0UG9zKCk7CisJd2hpbGUgKHBvcykKKwl7CisJCUNQREZfT2JqZWN0KiBwT2JqID0gTlVMTDsKKwkJQ0ZYX0J5dGVTdHJpbmcgY3NLZXk7CisJCXBPYmogPSBwRm9udHMtPkdldE5leHRFbGVtZW50KHBvcywgY3NLZXkpOworCQlpZiAocE9iaiA9PSBOVUxMKSBjb250aW51ZTsKKworCQlDUERGX09iamVjdCogcERpcmVjdCA9IHBPYmotPkdldERpcmVjdCgpOworCQlpZiAocERpcmVjdCA9PSBOVUxMIHx8IHBEaXJlY3QtPkdldFR5cGUoKSAhPSBQREZPQkpfRElDVElPTkFSWSkgY29udGludWU7CisKKwkJQ1BERl9EaWN0aW9uYXJ5KiBwRWxlbWVudCA9IChDUERGX0RpY3Rpb25hcnkqKXBEaXJlY3Q7CisJCWlmIChwRWxlbWVudC0+R2V0U3RyaW5nKCJUeXBlIikgIT0gIkZvbnQiKSBjb250aW51ZTsKKworCQlDUERGX0ZvbnQqIHBGb250ID0gcERvY3VtZW50LT5Mb2FkRm9udChwRWxlbWVudCk7CisJCWlmIChwRm9udCA9PSBOVUxMKSBjb250aW51ZTsKKwkJY29uc3QgQ0ZYX1N1YnN0Rm9udCogcFN1YnN0ID0gcEZvbnQtPkdldFN1YnN0Rm9udCgpOworCQlpZiAocFN1YnN0ID09IE5VTEwpIGNvbnRpbnVlOworCQlpZiAocFN1YnN0LT5tX0NoYXJzZXQgPT0gbkNoYXJzZXQpCisJCXsKKwkJCXNGb250QWxpYXMgPSBjc0tleTsKKwkJCXBGaW5kID0gcEZvbnQ7CisJCX0KKwl9CisJcmV0dXJuIHBGaW5kOworfQorCit2b2lkIENCQV9Gb250TWFwOjpBZGRlZEZvbnQoQ1BERl9Gb250KiBwRm9udCwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNGb250QWxpYXMpCit7CisJQWRkRm9udFRvQW5ub3REaWN0KHBGb250LCBzRm9udEFsaWFzKTsKK30KKwordm9pZCBDQkFfRm9udE1hcDo6QWRkRm9udFRvQW5ub3REaWN0KENQREZfRm9udCogcEZvbnQsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzQWxpYXMpCit7CisJaWYgKCFwRm9udCkJcmV0dXJuOworCisJQVNTRVJUKG1fcEFubm90RGljdCAhPSBOVUxMKTsKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlDUERGX0RpY3Rpb25hcnkqIHBBUERpY3QgPSBtX3BBbm5vdERpY3QtPkdldERpY3QoIkFQIik7CisKKwlpZiAocEFQRGljdCA9PSBOVUxMKSAKKwl7CisJCXBBUERpY3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5OworCQltX3BBbm5vdERpY3QtPlNldEF0KCJBUCIsIHBBUERpY3QpOworCX0KKworCS8vdG8gYXZvaWQgY2hlY2tib3ggYW5kIHJhZGlvYnV0dG9uCisJQ1BERl9PYmplY3QqIHBPYmplY3QgPSBwQVBEaWN0LT5HZXRFbGVtZW50KG1fc0FQVHlwZSk7CisJaWYgKHBPYmplY3QgJiYgcE9iamVjdC0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKQorCQlyZXR1cm47CisKKwlDUERGX1N0cmVhbSogcFN0cmVhbSA9IHBBUERpY3QtPkdldFN0cmVhbShtX3NBUFR5cGUpOworCWlmIChwU3RyZWFtID09IE5VTEwpIAorCXsKKwkJcFN0cmVhbSA9IEZYX05FVyBDUERGX1N0cmVhbShOVUxMLCAwLCBOVUxMKTsKKwkJRlhfSU5UMzIgb2JqbnVtID0gbV9wRG9jdW1lbnQtPkFkZEluZGlyZWN0T2JqZWN0KHBTdHJlYW0pOworCQlwQVBEaWN0LT5TZXRBdFJlZmVyZW5jZShtX3NBUFR5cGUsIG1fcERvY3VtZW50LCBvYmpudW0pOworCX0KKworCUNQREZfRGljdGlvbmFyeSAqIHBTdHJlYW1EaWN0ID0gcFN0cmVhbS0+R2V0RGljdCgpOworCisJaWYgKCFwU3RyZWFtRGljdCkKKwl7CisJCXBTdHJlYW1EaWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsKKwkJcFN0cmVhbS0+SW5pdFN0cmVhbShOVUxMLCAwLCBwU3RyZWFtRGljdCk7CisJfQorCisJaWYgKHBTdHJlYW1EaWN0KQorCXsKKwkJQ1BERl9EaWN0aW9uYXJ5KiBwU3RyZWFtUmVzTGlzdCA9IHBTdHJlYW1EaWN0LT5HZXREaWN0KCJSZXNvdXJjZXMiKTsKKwkJaWYgKCFwU3RyZWFtUmVzTGlzdCkKKwkJeworCQkJcFN0cmVhbVJlc0xpc3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5KCk7CisJCQlwU3RyZWFtRGljdC0+U2V0QXQoIlJlc291cmNlcyIsIHBTdHJlYW1SZXNMaXN0KTsKKwkJfQorCisJCWlmIChwU3RyZWFtUmVzTGlzdCkgCisJCXsKKwkJCUNQREZfRGljdGlvbmFyeSogcFN0cmVhbVJlc0ZvbnRMaXN0ID0gcFN0cmVhbVJlc0xpc3QtPkdldERpY3QoIkZvbnQiKTsKKwkJCWlmICghcFN0cmVhbVJlc0ZvbnRMaXN0KSAKKwkJCXsKKwkJCQlwU3RyZWFtUmVzRm9udExpc3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5OworCQkJCUZYX0lOVDMyIG9iam51bSA9IG1fcERvY3VtZW50LT5BZGRJbmRpcmVjdE9iamVjdChwU3RyZWFtUmVzRm9udExpc3QpOworCQkJCXBTdHJlYW1SZXNMaXN0LT5TZXRBdFJlZmVyZW5jZSgiRm9udCIsIG1fcERvY3VtZW50LCBvYmpudW0pOworCQkJfQorCQkJaWYgKCFwU3RyZWFtUmVzRm9udExpc3QtPktleUV4aXN0KHNBbGlhcykpCisJCQkJcFN0cmVhbVJlc0ZvbnRMaXN0LT5TZXRBdFJlZmVyZW5jZShzQWxpYXMsIG1fcERvY3VtZW50LCBwRm9udC0+R2V0Rm9udERpY3QoKSk7CisJCX0KKwl9Cit9CisKK0NQREZfRm9udCogQ0JBX0ZvbnRNYXA6OkdldEFubm90RGVmYXVsdEZvbnQoQ0ZYX0J5dGVTdHJpbmcgJnNBbGlhcykKK3sKKwlBU1NFUlQobV9wQW5ub3REaWN0ICE9IE5VTEwpOworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCUNQREZfRGljdGlvbmFyeSogcEFjcm9Gb3JtRGljdCA9IE5VTEw7CisKKwlGWF9CT09MIGJXaWRnZXQgPSAobV9wQW5ub3REaWN0LT5HZXRTdHJpbmcoIlN1YnR5cGUiKSA9PSAiV2lkZ2V0Iik7CisKKwlpZiAoYldpZGdldCkKKwl7CisJCWlmIChDUERGX0RpY3Rpb25hcnkgKiBwUm9vdERpY3QgPSBtX3BEb2N1bWVudC0+R2V0Um9vdCgpKQorCQkJcEFjcm9Gb3JtRGljdCA9IHBSb290RGljdC0+R2V0RGljdCgiQWNyb0Zvcm0iKTsKKwl9CisJCisJQ0ZYX0J5dGVTdHJpbmcgc0RBOworCQorCXNEQSA9IEZQREZfR2V0RmllbGRBdHRyKG1fcEFubm90RGljdCwgIkRBIiktPkdldFN0cmluZygpOworCisJaWYgKGJXaWRnZXQpCisJeworCQlpZiAoc0RBLklzRW1wdHkoKSkKKwkJeworCQkJc0RBID0gRlBERl9HZXRGaWVsZEF0dHIocEFjcm9Gb3JtRGljdCwgIkRBIiktPkdldFN0cmluZygpOwkKKwkJfQorCX0KKwkKKwlDUERGX0RpY3Rpb25hcnkgKiBwRm9udERpY3QgPSBOVUxMOwkKKworCWlmICghc0RBLklzRW1wdHkoKSkKKwl7CisJCUNQREZfU2ltcGxlUGFyc2VyIHN5bnRheChzREEpOworCQlzeW50YXguRmluZFRhZ1BhcmFtKCJUZiIsIDIpOworCQlDRlhfQnl0ZVN0cmluZyBzRm9udE5hbWUgPSBzeW50YXguR2V0V29yZCgpOworCQlzQWxpYXMgPSBQREZfTmFtZURlY29kZShzRm9udE5hbWUpLk1pZCgxKTsKKworCQlpZiAoQ1BERl9EaWN0aW9uYXJ5ICogcERSRGljdCA9IG1fcEFubm90RGljdC0+R2V0RGljdCgiRFIiKSkKKwkJCWlmIChDUERGX0RpY3Rpb25hcnkqIHBEUkZvbnREaWN0ID0gcERSRGljdC0+R2V0RGljdCgiRm9udCIpKQorCQkJCXBGb250RGljdCA9IHBEUkZvbnREaWN0LT5HZXREaWN0KHNBbGlhcyk7CisKKwkJaWYgKCFwRm9udERpY3QpCisJCQlpZiAoQ1BERl9EaWN0aW9uYXJ5KiBwQVBEaWN0ID0gbV9wQW5ub3REaWN0LT5HZXREaWN0KCJBUCIpKQorCQkJCWlmIChDUERGX0RpY3Rpb25hcnkqIHBOb3JtYWxEaWN0ID0gcEFQRGljdC0+R2V0RGljdCgiTiIpKQorCQkJCQlpZiAoQ1BERl9EaWN0aW9uYXJ5KiBwTm9ybWFsUmVzRGljdCA9IHBOb3JtYWxEaWN0LT5HZXREaWN0KCJSZXNvdXJjZXMiKSkKKwkJCQkJCWlmIChDUERGX0RpY3Rpb25hcnkqIHBSZXNGb250RGljdCA9IHBOb3JtYWxSZXNEaWN0LT5HZXREaWN0KCJGb250IikpCisJCQkJCQkJcEZvbnREaWN0ID0gcFJlc0ZvbnREaWN0LT5HZXREaWN0KHNBbGlhcyk7CisKKwkJaWYgKGJXaWRnZXQpCisJCXsJCQkKKwkJCWlmICghcEZvbnREaWN0KQorCQkJeworCQkJCWlmIChwQWNyb0Zvcm1EaWN0KQorCQkJCXsKKwkJCQkJaWYgKENQREZfRGljdGlvbmFyeSAqIHBEUkRpY3QgPSBwQWNyb0Zvcm1EaWN0LT5HZXREaWN0KCJEUiIpKQorCQkJCQkJaWYgKENQREZfRGljdGlvbmFyeSogcERSRm9udERpY3QgPSBwRFJEaWN0LT5HZXREaWN0KCJGb250IikpCisJCQkJCQkJcEZvbnREaWN0ID0gcERSRm9udERpY3QtPkdldERpY3Qoc0FsaWFzKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZiAocEZvbnREaWN0KQorCQlyZXR1cm4gbV9wRG9jdW1lbnQtPkxvYWRGb250KHBGb250RGljdCk7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBDQkFfRm9udE1hcDo6U2V0QVBUeXBlKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzQVBUeXBlKQoreworCW1fc0FQVHlwZSA9IHNBUFR5cGU7CisKKwlSZXNldCgpOworCUluaXRpYWwoKTsKK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvZm9ybWZpbGxlci9GRkxfQ2hlY2tCb3guY3BwIGIvZnBkZnNkay9zcmMvZm9ybWZpbGxlci9GRkxfQ2hlY2tCb3guY3BwCmluZGV4IGRiNzk5MjYuLmY4MDM1YzcgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2Zvcm1maWxsZXIvRkZMX0NoZWNrQm94LmNwcAorKysgYi9mcGRmc2RrL3NyYy9mb3JtZmlsbGVyL0ZGTF9DaGVja0JveC5jcHAKQEAgLTEsMTQ0ICsxLDE0NCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9Gb3JtRmlsbGVyLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfRm9ybUZpbGxlci5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0NoZWNrQm94LmgiDQotDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDRkZMX0NoZWNrQm94IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DRkZMX0NoZWNrQm94OjpDRkZMX0NoZWNrQm94KENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAsIENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0KSA6DQotCUNGRkxfQnV0dG9uKHBBcHAsIHBXaWRnZXQpDQotew0KLX0NCi0NCi1DRkZMX0NoZWNrQm94Ojp+Q0ZGTF9DaGVja0JveCgpDQotew0KLX0NCi0NCi1DUFdMX1duZCogQ0ZGTF9DaGVja0JveDo6TmV3UERGV2luZG93KGNvbnN0IFBXTF9DUkVBVEVQQVJBTSYgY3AsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykNCi17DQotCUNQV0xfQ2hlY2tCb3gqIHBXbmQgPSBuZXcgQ1BXTF9DaGVja0JveCgpOw0KLQlwV25kLT5DcmVhdGUoY3ApOw0KLQ0KLQlBU1NFUlQobV9wV2lkZ2V0ICE9IE5VTEwpOw0KLQlwV25kLT5TZXRDaGVjayhtX3BXaWRnZXQtPklzQ2hlY2tlZCgpKTsNCi0JDQotCXJldHVybiBwV25kOw0KLX0NCi0NCi1GWF9CT09MCUNGRkxfQ2hlY2tCb3g6Ok9uS2V5RG93bihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbktleUNvZGUsIEZYX1VJTlQgbkZsYWdzKQ0KLXsNCi0Jc3dpdGNoIChuS2V5Q29kZSkNCi0Jew0KLQljYXNlIEZXTF9WS0VZX1JldHVybjoNCi0JY2FzZSBGV0xfVktFWV9TcGFjZToNCi0JCXJldHVybiBUUlVFOw0KLQlkZWZhdWx0Og0KLQkJcmV0dXJuIENGRkxfRm9ybUZpbGxlcjo6T25LZXlEb3duKHBBbm5vdCwgbktleUNvZGUsIG5GbGFncyk7DQotCX0NCi19DQotRlhfQk9PTAlDRkZMX0NoZWNrQm94OjpPbkNoYXIoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5DaGFyLCBGWF9VSU5UIG5GbGFncykNCi17DQotCXN3aXRjaCAobkNoYXIpDQotCXsNCi0JY2FzZSBGV0xfVktFWV9SZXR1cm46CQ0KLQljYXNlIEZXTF9WS0VZX1NwYWNlOg0KLQkJew0KLQkJCUNGRkxfSUZvcm1GaWxsZXIqIHBJRm9ybUZpbGxlciA9IG1fcEFwcC0+R2V0SUZvcm1GaWxsZXIoKTsNCi0JCQlBU1NFUlQocElGb3JtRmlsbGVyICE9IE5VTEwpOw0KLQ0KLQkJCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyA9IHBBbm5vdC0+R2V0UGFnZVZpZXcoKTsNCi0JCQlBU1NFUlQocFBhZ2VWaWV3ICE9IE5VTEwpOw0KLQ0KLQkJCUZYX0JPT0wgYlJlc2V0ID0gRkFMU0U7DQotCQkJRlhfQk9PTCBiRXhpdCA9IEZBTFNFOw0KLQ0KLQkJCXBJRm9ybUZpbGxlci0+T25CdXR0b25VcChtX3BXaWRnZXQsIHBQYWdlVmlldywgYlJlc2V0LCBiRXhpdCxuRmxhZ3MpOw0KLQ0KLQkJCWlmIChiUmVzZXQpIHJldHVybiBUUlVFOw0KLQkJCWlmIChiRXhpdCkgcmV0dXJuIFRSVUU7DQotDQotCQkJQ0ZGTF9Gb3JtRmlsbGVyOjpPbkNoYXIocEFubm90LCBuQ2hhciwgbkZsYWdzKTsNCi0NCi0JCQlpZiAoQ1BXTF9DaGVja0JveCAqIHBXbmQgPSAoQ1BXTF9DaGVja0JveCopR2V0UERGV2luZG93KHBQYWdlVmlldywgVFJVRSkpDQotCQkJCXBXbmQtPlNldENoZWNrKCFwV25kLT5Jc0NoZWNrZWQoKSk7DQotDQotCQkJQ29tbWl0RGF0YShwUGFnZVZpZXcsbkZsYWdzKTsNCi0JCQlyZXR1cm4gVFJVRTsNCi0JCX0NCi0JZGVmYXVsdDoNCi0JCXJldHVybiBDRkZMX0Zvcm1GaWxsZXI6Ok9uQ2hhcihwQW5ub3QsIG5DaGFyLCBuRmxhZ3MpOw0KLQl9DQotfQ0KLQ0KLUZYX0JPT0wgQ0ZGTF9DaGVja0JveDo6T25MQnV0dG9uVXAoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkNCi17DQotCUNGRkxfQnV0dG9uOjpPbkxCdXR0b25VcChwUGFnZVZpZXcsIHBBbm5vdCwgbkZsYWdzLCBwb2ludCk7DQotDQotCWlmIChJc1ZhbGlkKCkpDQotCXsNCi0JCWlmIChDUFdMX0NoZWNrQm94ICogcFduZCA9IChDUFdMX0NoZWNrQm94KilHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBUUlVFKSkNCi0JCXsNCi0JCQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IChDUERGU0RLX1dpZGdldCopcEFubm90Ow0KLQkJCXBXbmQtPlNldENoZWNrKCFwV2lkZ2V0LT5Jc0NoZWNrZWQoKSk7DQotCQkvLwlwV25kLT5TZXRDaGVjayghcFduZC0+SXNDaGVja2VkKCkpOw0KLQkJfQ0KLQ0KLQkJaWYgKCFDb21taXREYXRhKHBQYWdlVmlldywgbkZsYWdzKSkgcmV0dXJuIEZBTFNFOw0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MCUNGRkxfQ2hlY2tCb3g6OklzRGF0YUNoYW5nZWQoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQ0KLXsNCi0NCi0JQVNTRVJUKG1fcFdpZGdldCAhPSBOVUxMKTsNCi0NCi0JaWYgKENQV0xfQ2hlY2tCb3gqIHBXbmQgPSAoQ1BXTF9DaGVja0JveCopR2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpKQ0KLQl7DQotCQlyZXR1cm4gcFduZC0+SXNDaGVja2VkKCkgIT0gbV9wV2lkZ2V0LT5Jc0NoZWNrZWQoKTsNCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9DaGVja0JveDo6U2F2ZURhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQ0KLXsNCi0NCi0JQVNTRVJUKG1fcFdpZGdldCAhPSBOVUxMKTsNCi0NCi0JaWYgKENQV0xfQ2hlY2tCb3gqIHBXbmQgPSAoQ1BXTF9DaGVja0JveCopR2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpKQ0KLQl7DQotCQkNCi0JCUZYX0JPT0wgYk5ld0NoZWNrZWQgPSBwV25kLT5Jc0NoZWNrZWQoKTsNCi0JCQ0KLQ0KLQkJaWYgKGJOZXdDaGVja2VkKQ0KLQkJew0KLQkJCUNQREZfRm9ybUZpZWxkKiBwRmllbGQgPSBtX3BXaWRnZXQtPkdldEZvcm1GaWVsZCgpOw0KLQkJCUFTU0VSVChwRmllbGQgIT0gTlVMTCk7DQotDQotCQkJZm9yIChGWF9JTlQzMiBpPTAsc3o9cEZpZWxkLT5Db3VudENvbnRyb2xzKCk7IGk8c3o7IGkrKykNCi0JCQl7DQotCQkJCWlmIChDUERGX0Zvcm1Db250cm9sKiBwQ3RybCA9IHBGaWVsZC0+R2V0Q29udHJvbChpKSkNCi0JCQkJew0KLQkJCQkJaWYgKHBDdHJsLT5Jc0NoZWNrZWQoKSkNCi0JCQkJCXsNCi0JCQkJCQlicmVhazsNCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCX0NCi0JCX0NCi0NCi0JCW1fcFdpZGdldC0+U2V0Q2hlY2soYk5ld0NoZWNrZWQsIEZBTFNFKTsNCi0JCW1fcFdpZGdldC0+VXBkYXRlRmllbGQoKTsNCi0JCVNldENoYW5nZU1hcmsoKTsNCi0JfQ0KLQ0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0Zvcm1GaWxsZXIuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0Zvcm1GaWxsZXIuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0NoZWNrQm94LmgiCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDRkZMX0NoZWNrQm94IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ0ZGTF9DaGVja0JveDo6Q0ZGTF9DaGVja0JveChDUERGRG9jX0Vudmlyb25tZW50KiBwQXBwLCBDUERGU0RLX1dpZGdldCogcFdpZGdldCkgOgorCUNGRkxfQnV0dG9uKHBBcHAsIHBXaWRnZXQpCit7Cit9CisKK0NGRkxfQ2hlY2tCb3g6On5DRkZMX0NoZWNrQm94KCkKK3sKK30KKworQ1BXTF9XbmQqIENGRkxfQ2hlY2tCb3g6Ok5ld1BERldpbmRvdyhjb25zdCBQV0xfQ1JFQVRFUEFSQU0mIGNwLCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpCit7CisJQ1BXTF9DaGVja0JveCogcFduZCA9IG5ldyBDUFdMX0NoZWNrQm94KCk7CisJcFduZC0+Q3JlYXRlKGNwKTsKKworCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7CisJcFduZC0+U2V0Q2hlY2sobV9wV2lkZ2V0LT5Jc0NoZWNrZWQoKSk7CisJCisJcmV0dXJuIHBXbmQ7Cit9CisKK0ZYX0JPT0wJQ0ZGTF9DaGVja0JveDo6T25LZXlEb3duKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuS2V5Q29kZSwgRlhfVUlOVCBuRmxhZ3MpCit7CisJc3dpdGNoIChuS2V5Q29kZSkKKwl7CisJY2FzZSBGV0xfVktFWV9SZXR1cm46CisJY2FzZSBGV0xfVktFWV9TcGFjZToKKwkJcmV0dXJuIFRSVUU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIENGRkxfRm9ybUZpbGxlcjo6T25LZXlEb3duKHBBbm5vdCwgbktleUNvZGUsIG5GbGFncyk7CisJfQorfQorRlhfQk9PTAlDRkZMX0NoZWNrQm94OjpPbkNoYXIoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5DaGFyLCBGWF9VSU5UIG5GbGFncykKK3sKKwlzd2l0Y2ggKG5DaGFyKQorCXsKKwljYXNlIEZXTF9WS0VZX1JldHVybjoJCisJY2FzZSBGV0xfVktFWV9TcGFjZToKKwkJeworCQkJQ0ZGTF9JRm9ybUZpbGxlciogcElGb3JtRmlsbGVyID0gbV9wQXBwLT5HZXRJRm9ybUZpbGxlcigpOworCQkJQVNTRVJUKHBJRm9ybUZpbGxlciAhPSBOVUxMKTsKKworCQkJQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gcEFubm90LT5HZXRQYWdlVmlldygpOworCQkJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsKKworCQkJRlhfQk9PTCBiUmVzZXQgPSBGQUxTRTsKKwkJCUZYX0JPT0wgYkV4aXQgPSBGQUxTRTsKKworCQkJcElGb3JtRmlsbGVyLT5PbkJ1dHRvblVwKG1fcFdpZGdldCwgcFBhZ2VWaWV3LCBiUmVzZXQsIGJFeGl0LG5GbGFncyk7CisKKwkJCWlmIChiUmVzZXQpIHJldHVybiBUUlVFOworCQkJaWYgKGJFeGl0KSByZXR1cm4gVFJVRTsKKworCQkJQ0ZGTF9Gb3JtRmlsbGVyOjpPbkNoYXIocEFubm90LCBuQ2hhciwgbkZsYWdzKTsKKworCQkJaWYgKENQV0xfQ2hlY2tCb3ggKiBwV25kID0gKENQV0xfQ2hlY2tCb3gqKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIFRSVUUpKQorCQkJCXBXbmQtPlNldENoZWNrKCFwV25kLT5Jc0NoZWNrZWQoKSk7CisKKwkJCUNvbW1pdERhdGEocFBhZ2VWaWV3LG5GbGFncyk7CisJCQlyZXR1cm4gVFJVRTsKKwkJfQorCWRlZmF1bHQ6CisJCXJldHVybiBDRkZMX0Zvcm1GaWxsZXI6Ok9uQ2hhcihwQW5ub3QsIG5DaGFyLCBuRmxhZ3MpOworCX0KK30KKworRlhfQk9PTCBDRkZMX0NoZWNrQm94OjpPbkxCdXR0b25VcChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQoreworCUNGRkxfQnV0dG9uOjpPbkxCdXR0b25VcChwUGFnZVZpZXcsIHBBbm5vdCwgbkZsYWdzLCBwb2ludCk7CisKKwlpZiAoSXNWYWxpZCgpKQorCXsKKwkJaWYgKENQV0xfQ2hlY2tCb3ggKiBwV25kID0gKENQV0xfQ2hlY2tCb3gqKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIFRSVUUpKQorCQl7CisJCQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IChDUERGU0RLX1dpZGdldCopcEFubm90OworCQkJcFduZC0+U2V0Q2hlY2soIXBXaWRnZXQtPklzQ2hlY2tlZCgpKTsKKwkJLy8JcFduZC0+U2V0Q2hlY2soIXBXbmQtPklzQ2hlY2tlZCgpKTsKKwkJfQorCisJCWlmICghQ29tbWl0RGF0YShwUGFnZVZpZXcsIG5GbGFncykpIHJldHVybiBGQUxTRTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTAlDRkZMX0NoZWNrQm94OjpJc0RhdGFDaGFuZ2VkKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykKK3sKKworCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7CisKKwlpZiAoQ1BXTF9DaGVja0JveCogcFduZCA9IChDUFdMX0NoZWNrQm94KilHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpCisJeworCQlyZXR1cm4gcFduZC0+SXNDaGVja2VkKCkgIT0gbV9wV2lkZ2V0LT5Jc0NoZWNrZWQoKTsKKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgQ0ZGTF9DaGVja0JveDo6U2F2ZURhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQoreworCisJQVNTRVJUKG1fcFdpZGdldCAhPSBOVUxMKTsKKworCWlmIChDUFdMX0NoZWNrQm94KiBwV25kID0gKENQV0xfQ2hlY2tCb3gqKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkKKwl7CisJCQorCQlGWF9CT09MIGJOZXdDaGVja2VkID0gcFduZC0+SXNDaGVja2VkKCk7CisJCQorCisJCWlmIChiTmV3Q2hlY2tlZCkKKwkJeworCQkJQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCA9IG1fcFdpZGdldC0+R2V0Rm9ybUZpZWxkKCk7CisJCQlBU1NFUlQocEZpZWxkICE9IE5VTEwpOworCisJCQlmb3IgKEZYX0lOVDMyIGk9MCxzej1wRmllbGQtPkNvdW50Q29udHJvbHMoKTsgaTxzejsgaSsrKQorCQkJeworCQkJCWlmIChDUERGX0Zvcm1Db250cm9sKiBwQ3RybCA9IHBGaWVsZC0+R2V0Q29udHJvbChpKSkKKwkJCQl7CisJCQkJCWlmIChwQ3RybC0+SXNDaGVja2VkKCkpCisJCQkJCXsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJbV9wV2lkZ2V0LT5TZXRDaGVjayhiTmV3Q2hlY2tlZCwgRkFMU0UpOworCQltX3BXaWRnZXQtPlVwZGF0ZUZpZWxkKCk7CisJCVNldENoYW5nZU1hcmsoKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2Zvcm1maWxsZXIvRkZMX0NvbWJvQm94LmNwcCBiL2ZwZGZzZGsvc3JjL2Zvcm1maWxsZXIvRkZMX0NvbWJvQm94LmNwcAppbmRleCAzZjJjNDUzLi5lZTZiN2JkIDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9mb3JtZmlsbGVyL0ZGTF9Db21ib0JveC5jcHAKKysrIGIvZnBkZnNkay9zcmMvZm9ybWZpbGxlci9GRkxfQ29tYm9Cb3guY3BwCkBAIC0xLDQ0MiArMSw0NDIgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRm9ybUZpbGxlci5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0Zvcm1GaWxsZXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9JRm9ybUZpbGxlci5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0NCQV9Gb250bWFwLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfQ29tYm9Cb3guaCINCi0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENGRkxfQ29tYm9Cb3ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUNGRkxfQ29tYm9Cb3g6OkNGRkxfQ29tYm9Cb3goQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCwgQ1BERlNES19Bbm5vdCogcEFubm90KSA6DQotCUNGRkxfRm9ybUZpbGxlcihwQXBwLCBwQW5ub3QpLCBtX3BGb250TWFwKCBOVUxMICkNCi17DQotCS8vbV9wRm9udE1hcCA9IG5ldyBDQkFfRm9udE1hcCggcEFubm90LCBHZXRTeXN0ZW1IYW5kbGVyKCkgKTsNCi0gICAgICAgIG1fU3RhdGUubkluZGV4ID0gMDsNCi0gICAgICAgIG1fU3RhdGUublN0YXJ0ID0gMDsNCi0gICAgICAgIG1fU3RhdGUubkVuZCAgID0gMDsNCi19DQotDQotQ0ZGTF9Db21ib0JveDo6fkNGRkxfQ29tYm9Cb3goKQ0KLXsNCi0JaWYgKG1fcEZvbnRNYXApDQotCXsNCi0JCWRlbGV0ZSBtX3BGb250TWFwOw0KLQkJbV9wRm9udE1hcCA9IE5VTEw7DQotCX0NCi0NCi0vLyAJZm9yIChpbnQgaT0wLHN6PW1fSU1Cb3guR2V0U2l6ZSgpOyBpPHN6OyBpKyspDQotLy8gCXsNCi0vLyAJCWRlbGV0ZSBtX0lNQm94LkdldEF0KGkpOw0KLS8vIAl9DQotLy8gDQotLy8gCW1fSU1Cb3guUmVtb3ZlQWxsKCk7DQotfQ0KLQ0KLVBXTF9DUkVBVEVQQVJBTSBDRkZMX0NvbWJvQm94OjpHZXRDcmVhdGVQYXJhbSgpDQotew0KLQlQV0xfQ1JFQVRFUEFSQU0gY3AgPSBDRkZMX0Zvcm1GaWxsZXI6OkdldENyZWF0ZVBhcmFtKCk7DQotDQotCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7DQotDQotCWludCBuRmxhZ3MgPSBtX3BXaWRnZXQtPkdldEZpZWxkRmxhZ3MoKTsNCi0JDQotCWlmIChuRmxhZ3MgJiBGSUVMREZMQUdfRURJVCkNCi0JewkJDQotCQljcC5kd0ZsYWdzIHw9IFBDQlNfQUxMT1dDVVNUT01URVhUOw0KLQl9DQotDQotCS8qDQotCWlmIChuRmxhZ3MgJiBGSUVMREZMQUdfQ09NTUlUT05TRUxDSEFOR0UpDQotCXsJCQ0KLQkJbV9iQ29tbWl0T25TZWxlY3RDaGFuZ2UgPSBUUlVFOw0KLQl9DQotCSovDQotDQotCWlmICghbV9wRm9udE1hcCkNCi0Jew0KLQkJQVNTRVJUKHRoaXMtPm1fcEFwcCAhPSBOVUxMKTsNCi0JCW1fcEZvbnRNYXAgPSBuZXcgQ0JBX0ZvbnRNYXAobV9wV2lkZ2V0LCBHZXRTeXN0ZW1IYW5kbGVyKCkpOw0KLQkJbV9wRm9udE1hcC0+SW5pdGlhbCgpOw0KLQl9DQotDQotCWNwLnBGb250TWFwID0gbV9wRm9udE1hcDsNCi0JY3AucEZvY3VzSGFuZGxlciA9IHRoaXM7DQotDQotCXJldHVybiBjcDsNCi19DQotDQotQ1BXTF9XbmQqIENGRkxfQ29tYm9Cb3g6Ok5ld1BERldpbmRvdyhjb25zdCBQV0xfQ1JFQVRFUEFSQU0mIGNwLCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpDQotew0KLQlDUFdMX0NvbWJvQm94ICogcFduZCA9IG5ldyBDUFdMX0NvbWJvQm94KCk7DQotCXBXbmQtPkF0dGFjaEZGTERhdGEodGhpcyk7DQotCXBXbmQtPkNyZWF0ZShjcCk7DQotDQotCUFTU0VSVChtX3BBcHAgIT0gTlVMTCk7DQotCUNGRkxfSUZvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gbV9wQXBwLT5HZXRJRm9ybUZpbGxlcigpOw0KLQlwV25kLT5TZXRGaWxsZXJOb3RpZnkocEZvcm1GaWxsZXIpOw0KLQ0KLQlBU1NFUlQobV9wV2lkZ2V0ICE9IE5VTEwpOw0KLQlGWF9JTlQzMiBuQ3VyU2VsID0gbV9wV2lkZ2V0LT5HZXRTZWxlY3RlZEluZGV4KDApOw0KLQkNCi0JQ0ZYX1dpZGVTdHJpbmcgc3dUZXh0Ow0KLQkNCi0JaWYgKG5DdXJTZWwgPCAwKQ0KLQkJc3dUZXh0ID0gbV9wV2lkZ2V0LT5HZXRWYWx1ZSgpOw0KLQllbHNlDQotCQlzd1RleHQgPSBtX3BXaWRnZXQtPkdldE9wdGlvbkxhYmVsKG5DdXJTZWwpOw0KLQkNCi0JZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9wV2lkZ2V0LT5Db3VudE9wdGlvbnMoKTsgaTxzejsgaSsrKQ0KLQl7DQotCQlwV25kLT5BZGRTdHJpbmcobV9wV2lkZ2V0LT5HZXRPcHRpb25MYWJlbChpKSk7CQkJDQotCX0NCi0JDQotCXBXbmQtPlNldFNlbGVjdChuQ3VyU2VsKTsNCi0JcFduZC0+U2V0VGV4dChzd1RleHQpOw0KLQkNCi0JcmV0dXJuIHBXbmQ7DQotfQ0KLQ0KLQ0KLUZYX0JPT0wJQ0ZGTF9Db21ib0JveDo6T25DaGFyKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuQ2hhciwgRlhfVUlOVCBuRmxhZ3MpDQotew0KLQlyZXR1cm4gQ0ZGTF9Gb3JtRmlsbGVyOjpPbkNoYXIocEFubm90LCBuQ2hhciwgbkZsYWdzKTsNCi19DQotDQotRlhfQk9PTAlDRkZMX0NvbWJvQm94OjpJc0RhdGFDaGFuZ2VkKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykNCi17DQotCWlmIChDUFdMX0NvbWJvQm94ICogcFduZCA9IChDUFdMX0NvbWJvQm94KilHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpDQotCXsNCi0JCUZYX0lOVDMyIG5DdXJTZWwgPSBwV25kLT5HZXRTZWxlY3QoKTsNCi0NCi0JCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7DQotDQotCQlpZiAobV9wV2lkZ2V0LT5HZXRGaWVsZEZsYWdzKCkgJiBGSUVMREZMQUdfRURJVCkNCi0JCXsNCi0JCQlpZiAobkN1clNlbCA+PSAwKQ0KLQkJCXsNCi0JCQkJcmV0dXJuIG5DdXJTZWwgIT0gbV9wV2lkZ2V0LT5HZXRTZWxlY3RlZEluZGV4KDApOw0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQlyZXR1cm4gcFduZC0+R2V0VGV4dCgpICE9IG1fcFdpZGdldC0+R2V0VmFsdWUoKTsNCi0JCQl9DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJcmV0dXJuIG5DdXJTZWwgIT0gbV9wV2lkZ2V0LT5HZXRTZWxlY3RlZEluZGV4KDApOw0KLQkJfQ0KLQl9DQotCQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9Db21ib0JveDo6U2F2ZURhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQ0KLXsNCi0JQVNTRVJUKG1fcFdpZGdldCAhPSBOVUxMKTsNCi0NCi0JaWYgKENQV0xfQ29tYm9Cb3gqIHBXbmQgPSAoQ1BXTF9Db21ib0JveCopR2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpKQ0KLQl7DQotCQlDRlhfV2lkZVN0cmluZyBzd1RleHQgPSBwV25kLT5HZXRUZXh0KCk7DQotCQlGWF9JTlQzMiBuQ3VyU2VsID0gcFduZC0+R2V0U2VsZWN0KCk7DQotDQotCQkvL21hbnRpczowMDA0MTU3DQotCQlGWF9CT09MIGJTZXRWYWx1ZSA9IFRSVUU7DQotDQotCQlpZiAobV9wV2lkZ2V0LT5HZXRGaWVsZEZsYWdzKCkgJiBGSUVMREZMQUdfRURJVCkNCi0JCXsNCi0JCQlpZiAobkN1clNlbCA+PSAwKQ0KLQkJCXsNCi0JCQkJaWYgKHN3VGV4dCAhPSBtX3BXaWRnZXQtPkdldE9wdGlvbkxhYmVsKG5DdXJTZWwpKQ0KLQkJCQkJYlNldFZhbHVlID0gVFJVRTsNCi0JCQkJZWxzZQ0KLQkJCQkJYlNldFZhbHVlID0gRkFMU0U7DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQkJYlNldFZhbHVlID0gVFJVRTsNCi0JCX0NCi0JCWVsc2UNCi0JCQliU2V0VmFsdWUgPSBGQUxTRTsNCi0NCi0JCUNGWF9XaWRlU3RyaW5nIHNPbGRWYWx1ZTsNCi0JCQ0KLQ0KLQkJaWYgKGJTZXRWYWx1ZSkNCi0JCXsNCi0JCQlzT2xkVmFsdWUgPSBtX3BXaWRnZXQtPkdldFZhbHVlKCk7DQotCQkJbV9wV2lkZ2V0LT5TZXRWYWx1ZShzd1RleHQsIEZBTFNFKTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQltX3BXaWRnZXQtPkdldFNlbGVjdGVkSW5kZXgoMCk7DQotCQkJbV9wV2lkZ2V0LT5TZXRPcHRpb25TZWxlY3Rpb24obkN1clNlbCwgVFJVRSwgRkFMU0UpOw0KLQkJfQ0KLQ0KLQkJbV9wV2lkZ2V0LT5SZXNldEZpZWxkQXBwZWFyYW5jZShUUlVFKTsNCi0JCW1fcFdpZGdldC0+VXBkYXRlRmllbGQoKTsNCi0JCVNldENoYW5nZU1hcmsoKTsNCi0NCi0JCW1fcFdpZGdldC0+R2V0UERGUGFnZSgpOw0KLQkJDQotDQotCX0NCi19DQotDQotIHZvaWQgQ0ZGTF9Db21ib0JveDo6R2V0QWN0aW9uRGF0YSggQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIFBERlNES19GaWVsZEFjdGlvbiYgZmEpDQotew0KLQlzd2l0Y2ggKHR5cGUpDQotCXsNCi0JY2FzZSBDUERGX0FBY3Rpb246OktleVN0cm9rZToNCi0JCWlmIChDUFdMX0NvbWJvQm94KiBwQ29tYm9Cb3ggPSAoQ1BXTF9Db21ib0JveCopR2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpKQ0KLQkJew0KLQkJCWlmIChDUFdMX0VkaXQqIHBFZGl0ID0gKENQV0xfRWRpdCopKnBDb21ib0JveCkNCi0JCQl7DQotCQkJCWZhLmJGaWVsZEZ1bGwgPSBwRWRpdC0+SXNUZXh0RnVsbCgpOwkNCi0JCQkJaW50IG5TZWxTdGFydCA9IDA7DQotCQkJCWludCBuU2VsRW5kID0gMDsNCi0JCQkJcEVkaXQtPkdldFNlbChuU2VsU3RhcnQsIG5TZWxFbmQpOw0KLQkJCQlmYS5uU2VsRW5kID0gblNlbEVuZDsNCi0JCQkJZmEublNlbFN0YXJ0ID0gblNlbFN0YXJ0Ow0KLQkJCQlmYS5zVmFsdWUgPSBwRWRpdC0+R2V0VGV4dCgpOw0KLQkJCQlmYS5zQ2hhbmdlRXggPSBHZXRTZWxlY3RFeHBvcnRUZXh0KCk7DQotDQotCQkJCWlmIChmYS5iRmllbGRGdWxsKQ0KLQkJCQl7DQotCQkJCQlmYS5zQ2hhbmdlID0gTCIiOw0KLQkJCQkJZmEuc0NoYW5nZUV4ID0gTCIiOw0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgQ1BERl9BQWN0aW9uOjpWYWxpZGF0ZToNCi0JCWlmIChDUFdMX0NvbWJvQm94KiBwQ29tYm9Cb3ggPSAoQ1BXTF9Db21ib0JveCopR2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpKQ0KLQkJew0KLQkJCWlmIChDUFdMX0VkaXQqIHBFZGl0ID0gKENQV0xfRWRpdCopKnBDb21ib0JveCkNCi0JCQl7DQotCQkJCWZhLnNWYWx1ZSA9IHBFZGl0LT5HZXRUZXh0KCk7DQotCQkJfQ0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgQ1BERl9BQWN0aW9uOjpMb3NlRm9jdXM6DQotCWNhc2UgQ1BERl9BQWN0aW9uOjpHZXRGb2N1czoNCi0JCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7DQotCQlmYS5zVmFsdWUgPSBtX3BXaWRnZXQtPkdldFZhbHVlKCk7DQotCQlicmVhazsNCi0JZGVmYXVsdDoNCi0JCWJyZWFrOw0KLQl9DQotfQ0KLQ0KLQ0KLQ0KLXZvaWQgQ0ZGTF9Db21ib0JveDo6U2V0QWN0aW9uRGF0YShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgDQotCQkJCQkJCQkJY29uc3QgUERGU0RLX0ZpZWxkQWN0aW9uJiBmYSkNCi17DQotCXN3aXRjaCAodHlwZSkNCi0Jew0KLQljYXNlIENQREZfQUFjdGlvbjo6S2V5U3Ryb2tlOg0KLQkJaWYgKENQV0xfQ29tYm9Cb3gqIHBDb21ib0JveCA9IChDUFdMX0NvbWJvQm94KilHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpDQotCQl7DQotCQkJaWYgKENQV0xfRWRpdCogcEVkaXQgPSAoQ1BXTF9FZGl0KikqcENvbWJvQm94KQ0KLQkJCXsNCi0JCQkJcEVkaXQtPlNldFNlbChmYS5uU2VsU3RhcnQsIGZhLm5TZWxFbmQpOw0KLQkJCQlwRWRpdC0+UmVwbGFjZVNlbChmYS5zQ2hhbmdlKTsNCi0JCQl9DQotCQl9DQotCQlicmVhazsNCi0JZGVmYXVsdDoNCi0JCWJyZWFrOw0KLQl9DQotfQ0KLQ0KLUZYX0JPT0wJQ0ZGTF9Db21ib0JveDo6SXNBY3Rpb25EYXRhQ2hhbmdlZChDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIGNvbnN0IFBERlNES19GaWVsZEFjdGlvbiYgZmFPbGQsIA0KLQkJCQkJCQkJCWNvbnN0IFBERlNES19GaWVsZEFjdGlvbiYgZmFOZXcpDQotew0KLQlzd2l0Y2ggKHR5cGUpDQotCXsNCi0JY2FzZSBDUERGX0FBY3Rpb246OktleVN0cm9rZToNCi0JCXJldHVybiAoIWZhT2xkLmJGaWVsZEZ1bGwgJiYgZmFPbGQublNlbEVuZCAhPSBmYU5ldy5uU2VsRW5kKSB8fCBmYU9sZC5uU2VsU3RhcnQgIT0gZmFOZXcublNlbFN0YXJ0IHx8DQotCQkJZmFPbGQuc0NoYW5nZSAhPSBmYU5ldy5zQ2hhbmdlOw0KLQlkZWZhdWx0Og0KLQkJYnJlYWs7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi12b2lkIENGRkxfQ29tYm9Cb3g6OlNhdmVTdGF0ZShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpDQotew0KLQlBU1NFUlQocFBhZ2VWaWV3ICE9IE5VTEwpOw0KLQ0KLQlpZiAoQ1BXTF9Db21ib0JveCogcENvbWJvQm94ID0gKENQV0xfQ29tYm9Cb3gqKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkNCi0Jew0KLQkJbV9TdGF0ZS5uSW5kZXggPSBwQ29tYm9Cb3gtPkdldFNlbGVjdCgpOw0KLQ0KLQkJaWYgKENQV0xfRWRpdCogcEVkaXQgPSAoQ1BXTF9FZGl0KikqcENvbWJvQm94KQ0KLQkJew0KLQkJCXBFZGl0LT5HZXRTZWwobV9TdGF0ZS5uU3RhcnQsIG1fU3RhdGUubkVuZCk7DQotCQkJbV9TdGF0ZS5zVmFsdWUgPSBwRWRpdC0+R2V0VGV4dCgpOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9Db21ib0JveDo6UmVzdG9yZVN0YXRlKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykNCi17DQotCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7DQotDQotCWlmIChDUFdMX0NvbWJvQm94KiBwQ29tYm9Cb3ggPSAoQ1BXTF9Db21ib0JveCopR2V0UERGV2luZG93KHBQYWdlVmlldywgVFJVRSkpDQotCXsNCi0JCWlmIChtX1N0YXRlLm5JbmRleCA+PSAwKQ0KLQkJCXBDb21ib0JveC0+U2V0U2VsZWN0KG1fU3RhdGUubkluZGV4KTsNCi0JCWVsc2UNCi0JCXsNCi0JCQlpZiAoQ1BXTF9FZGl0KiBwRWRpdCA9IChDUFdMX0VkaXQqKSpwQ29tYm9Cb3gpDQotCQkJew0KLQkJCQlwRWRpdC0+U2V0VGV4dChtX1N0YXRlLnNWYWx1ZSk7DQotCQkJCXBFZGl0LT5TZXRTZWwobV9TdGF0ZS5uU3RhcnQsIG1fU3RhdGUubkVuZCk7DQotCQkJfQ0KLQkJfQ0KLQl9DQotfQ0KLQ0KLUNQV0xfV25kKiBDRkZMX0NvbWJvQm94OjpSZXNldFBERldpbmRvdyhDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0JPT0wgYlJlc3RvcmVWYWx1ZSkNCi17DQotCWlmIChiUmVzdG9yZVZhbHVlKQ0KLQkJU2F2ZVN0YXRlKHBQYWdlVmlldyk7DQotCQ0KLQlEZXN0cm95UERGV2luZG93KHBQYWdlVmlldyk7DQotCQ0KLQlDUFdMX1duZCogcFJldCA9IE5VTEw7DQotCQ0KLQlpZiAoYlJlc3RvcmVWYWx1ZSkNCi0Jew0KLQkJUmVzdG9yZVN0YXRlKHBQYWdlVmlldyk7DQotCQlwUmV0ID0gdGhpcy0+R2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpOw0KLQl9DQotCWVsc2UNCi0JCXBSZXQgPSB0aGlzLT5HZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBUUlVFKTsNCi0JDQotCW1fcFdpZGdldC0+VXBkYXRlRmllbGQoKTsNCi0JDQotCXJldHVybiBwUmV0Ow0KLX0NCi0NCi12b2lkIENGRkxfQ29tYm9Cb3g6Ok9uS2V5U3Ryb2tlKEZYX0JPT0wgYktleURvd24sIEZYX1VJTlQgbkZsYWcpDQotew0KLQlBU1NFUlQobV9wV2lkZ2V0ICE9IE5VTEwpOw0KLQkNCi0JaW50IG5GbGFncyA9IG1fcFdpZGdldC0+R2V0RmllbGRGbGFncygpOw0KLQkNCi0JaWYgKG5GbGFncyAmIEZJRUxERkxBR19DT01NSVRPTlNFTENIQU5HRSkNCi0Jew0KLQkJaWYgKG1fYlZhbGlkKQ0KLQkJew0KLQkJCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyA9IHRoaXMtPkdldEN1clBhZ2VWaWV3KCk7DQotCQkJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsNCi0NCi0JCQlpZiAoQ29tbWl0RGF0YShwUGFnZVZpZXcsIG5GbGFnKSkNCi0JCQl7DQotCQkJCURlc3Ryb3lQREZXaW5kb3cocFBhZ2VWaWV3KTsNCi0JCQkJbV9iVmFsaWQgPSBGQUxTRTsNCi0JCQl9DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBDRkZMX0NvbWJvQm94OjpPblNldEZvY3VzKENQV0xfV25kKiBwV25kKQ0KLXsNCi0JQVNTRVJUKG1fcEFwcCAhPSBOVUxMKTsNCi0NCi0JQVNTRVJUKHBXbmQgIT0gTlVMTCk7DQotDQotCWlmIChwV25kLT5HZXRDbGFzc05hbWUoKSA9PSBQV0xfQ0xBU1NOQU1FX0VESVQpDQotCXsNCi0JCUNQV0xfRWRpdCogcEVkaXQgPSAoQ1BXTF9FZGl0KilwV25kOw0KLQkJcEVkaXQtPlNldENoYXJTZXQoMTM0KTsNCi0JCXBFZGl0LT5TZXRDb2RlUGFnZSg5MzYpOw0KLQ0KLQkJcEVkaXQtPlNldFJlYWR5VG9JbnB1dCgpOw0KLQkJQ0ZYX1dpZGVTdHJpbmcgd3NUZXh0ID0gcEVkaXQtPkdldFRleHQoKTsNCi0JCWludCBuQ2hhcmFjdGVycyA9IHdzVGV4dC5HZXRMZW5ndGgoKTsNCi0JCUNGWF9CeXRlU3RyaW5nIGJzVVRGVGV4dCA9IHdzVGV4dC5VVEYxNkxFX0VuY29kZSgpOw0KLQkJdW5zaWduZWQgc2hvcnQqIHBCdWZmZXIgPSAodW5zaWduZWQgc2hvcnQqKShGWF9MUENTVFIpYnNVVEZUZXh0Ow0KLQkJbV9wQXBwLT5GRklfT25TZXRGaWVsZElucHV0Rm9jdXMobV9wV2lkZ2V0LT5HZXRGb3JtRmllbGQoKSwgcEJ1ZmZlciwgbkNoYXJhY3RlcnMsIFRSVUUpOw0KLQ0KLSAJCXBFZGl0LT5TZXRFZGl0Tm90aWZ5KHRoaXMpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9Db21ib0JveDo6T25LaWxsRm9jdXMoQ1BXTF9XbmQqIHBXbmQpDQotew0KLQlBU1NFUlQobV9wQXBwICE9IE5VTEwpOw0KLX0NCi0NCi1GWF9CT09MCUNGRkxfQ29tYm9Cb3g6OkNhbkNvcHkoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQ0KLXsNCi0JQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MIENGRkxfQ29tYm9Cb3g6OkNhbkN1dChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpDQotew0KLQlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wJQ0ZGTF9Db21ib0JveDo6Q2FuUGFzdGUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQ0KLXsNCi0JQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi12b2lkIENGRkxfQ29tYm9Cb3g6OkRvQ29weShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpDQotew0KLQlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOw0KLX0NCi0NCi12b2lkIENGRkxfQ29tYm9Cb3g6OkRvQ3V0KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkNCi17DQotCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9Db21ib0JveDo6RG9QYXN0ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpDQotew0KLQlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOw0KLX0NCi0NCi12b2lkIENGRkxfQ29tYm9Cb3g6Ok9uQWRkVW5kbyhDUFdMX0VkaXQqIHBFZGl0KQ0KLXsNCi0JQVNTRVJUKHBFZGl0ICE9IE5VTEwpOw0KLX0NCi0NCi1DRlhfV2lkZVN0cmluZyBDRkZMX0NvbWJvQm94OjpHZXRTZWxlY3RFeHBvcnRUZXh0KCkNCi17DQotCUNGWF9XaWRlU3RyaW5nIHN3UmV0Ow0KLQkNCi0JaW50IG5FeHBvcnQgPSAtMTsNCi0JQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3ID0gR2V0Q3VyUGFnZVZpZXcoKTsNCi0JaWYgKENQV0xfQ29tYm9Cb3ggKiBwQ29tYm9Cb3ggPSAoQ1BXTF9Db21ib0JveCopR2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpKQ0KLQl7DQotCQluRXhwb3J0ID0gcENvbWJvQm94LT5HZXRTZWxlY3QoKTsNCi0JfQ0KLQkNCi0JaWYgKG5FeHBvcnQgPj0gMCkNCi0Jew0KLQkJaWYgKENQREZfRm9ybUZpZWxkICogcEZvcm1GaWVsZCA9IG1fcFdpZGdldC0+R2V0Rm9ybUZpZWxkKCkpDQotCQl7DQotCQkJc3dSZXQgPSBwRm9ybUZpZWxkLT5HZXRPcHRpb25WYWx1ZShuRXhwb3J0KTsNCi0JCQlpZiAoc3dSZXQuSXNFbXB0eSgpKQ0KLQkJCQlzd1JldCA9IHBGb3JtRmllbGQtPkdldE9wdGlvbkxhYmVsKG5FeHBvcnQpOw0KLQkJfQ0KLQl9DQotCQ0KLQlyZXR1cm4gc3dSZXQ7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRm9ybUZpbGxlci5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfRm9ybUZpbGxlci5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfSUZvcm1GaWxsZXIuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0NCQV9Gb250bWFwLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9Db21ib0JveC5oIgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZGTF9Db21ib0JveCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0NGRkxfQ29tYm9Cb3g6OkNGRkxfQ29tYm9Cb3goQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCwgQ1BERlNES19Bbm5vdCogcEFubm90KSA6CisJQ0ZGTF9Gb3JtRmlsbGVyKHBBcHAsIHBBbm5vdCksIG1fcEZvbnRNYXAoIE5VTEwgKQoreworCS8vbV9wRm9udE1hcCA9IG5ldyBDQkFfRm9udE1hcCggcEFubm90LCBHZXRTeXN0ZW1IYW5kbGVyKCkgKTsKKyAgICAgICAgbV9TdGF0ZS5uSW5kZXggPSAwOworICAgICAgICBtX1N0YXRlLm5TdGFydCA9IDA7CisgICAgICAgIG1fU3RhdGUubkVuZCAgID0gMDsKK30KKworQ0ZGTF9Db21ib0JveDo6fkNGRkxfQ29tYm9Cb3goKQoreworCWlmIChtX3BGb250TWFwKQorCXsKKwkJZGVsZXRlIG1fcEZvbnRNYXA7CisJCW1fcEZvbnRNYXAgPSBOVUxMOworCX0KKworLy8gCWZvciAoaW50IGk9MCxzej1tX0lNQm94LkdldFNpemUoKTsgaTxzejsgaSsrKQorLy8gCXsKKy8vIAkJZGVsZXRlIG1fSU1Cb3guR2V0QXQoaSk7CisvLyAJfQorLy8gCisvLyAJbV9JTUJveC5SZW1vdmVBbGwoKTsKK30KKworUFdMX0NSRUFURVBBUkFNIENGRkxfQ29tYm9Cb3g6OkdldENyZWF0ZVBhcmFtKCkKK3sKKwlQV0xfQ1JFQVRFUEFSQU0gY3AgPSBDRkZMX0Zvcm1GaWxsZXI6OkdldENyZWF0ZVBhcmFtKCk7CisKKwlBU1NFUlQobV9wV2lkZ2V0ICE9IE5VTEwpOworCisJaW50IG5GbGFncyA9IG1fcFdpZGdldC0+R2V0RmllbGRGbGFncygpOworCQorCWlmIChuRmxhZ3MgJiBGSUVMREZMQUdfRURJVCkKKwl7CQkKKwkJY3AuZHdGbGFncyB8PSBQQ0JTX0FMTE9XQ1VTVE9NVEVYVDsKKwl9CisKKwkvKgorCWlmIChuRmxhZ3MgJiBGSUVMREZMQUdfQ09NTUlUT05TRUxDSEFOR0UpCisJewkJCisJCW1fYkNvbW1pdE9uU2VsZWN0Q2hhbmdlID0gVFJVRTsKKwl9CisJKi8KKworCWlmICghbV9wRm9udE1hcCkKKwl7CisJCUFTU0VSVCh0aGlzLT5tX3BBcHAgIT0gTlVMTCk7CisJCW1fcEZvbnRNYXAgPSBuZXcgQ0JBX0ZvbnRNYXAobV9wV2lkZ2V0LCBHZXRTeXN0ZW1IYW5kbGVyKCkpOworCQltX3BGb250TWFwLT5Jbml0aWFsKCk7CisJfQorCisJY3AucEZvbnRNYXAgPSBtX3BGb250TWFwOworCWNwLnBGb2N1c0hhbmRsZXIgPSB0aGlzOworCisJcmV0dXJuIGNwOworfQorCitDUFdMX1duZCogQ0ZGTF9Db21ib0JveDo6TmV3UERGV2luZG93KGNvbnN0IFBXTF9DUkVBVEVQQVJBTSYgY3AsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykKK3sKKwlDUFdMX0NvbWJvQm94ICogcFduZCA9IG5ldyBDUFdMX0NvbWJvQm94KCk7CisJcFduZC0+QXR0YWNoRkZMRGF0YSh0aGlzKTsKKwlwV25kLT5DcmVhdGUoY3ApOworCisJQVNTRVJUKG1fcEFwcCAhPSBOVUxMKTsKKwlDRkZMX0lGb3JtRmlsbGVyKiBwRm9ybUZpbGxlciA9IG1fcEFwcC0+R2V0SUZvcm1GaWxsZXIoKTsKKwlwV25kLT5TZXRGaWxsZXJOb3RpZnkocEZvcm1GaWxsZXIpOworCisJQVNTRVJUKG1fcFdpZGdldCAhPSBOVUxMKTsKKwlGWF9JTlQzMiBuQ3VyU2VsID0gbV9wV2lkZ2V0LT5HZXRTZWxlY3RlZEluZGV4KDApOworCQorCUNGWF9XaWRlU3RyaW5nIHN3VGV4dDsKKwkKKwlpZiAobkN1clNlbCA8IDApCisJCXN3VGV4dCA9IG1fcFdpZGdldC0+R2V0VmFsdWUoKTsKKwllbHNlCisJCXN3VGV4dCA9IG1fcFdpZGdldC0+R2V0T3B0aW9uTGFiZWwobkN1clNlbCk7CisJCisJZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9wV2lkZ2V0LT5Db3VudE9wdGlvbnMoKTsgaTxzejsgaSsrKQorCXsKKwkJcFduZC0+QWRkU3RyaW5nKG1fcFdpZGdldC0+R2V0T3B0aW9uTGFiZWwoaSkpOwkJCQorCX0KKwkKKwlwV25kLT5TZXRTZWxlY3QobkN1clNlbCk7CisJcFduZC0+U2V0VGV4dChzd1RleHQpOworCQorCXJldHVybiBwV25kOworfQorCisKK0ZYX0JPT0wJQ0ZGTF9Db21ib0JveDo6T25DaGFyKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuQ2hhciwgRlhfVUlOVCBuRmxhZ3MpCit7CisJcmV0dXJuIENGRkxfRm9ybUZpbGxlcjo6T25DaGFyKHBBbm5vdCwgbkNoYXIsIG5GbGFncyk7Cit9CisKK0ZYX0JPT0wJQ0ZGTF9Db21ib0JveDo6SXNEYXRhQ2hhbmdlZChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpCit7CisJaWYgKENQV0xfQ29tYm9Cb3ggKiBwV25kID0gKENQV0xfQ29tYm9Cb3gqKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkKKwl7CisJCUZYX0lOVDMyIG5DdXJTZWwgPSBwV25kLT5HZXRTZWxlY3QoKTsKKworCQlBU1NFUlQobV9wV2lkZ2V0ICE9IE5VTEwpOworCisJCWlmIChtX3BXaWRnZXQtPkdldEZpZWxkRmxhZ3MoKSAmIEZJRUxERkxBR19FRElUKQorCQl7CisJCQlpZiAobkN1clNlbCA+PSAwKQorCQkJeworCQkJCXJldHVybiBuQ3VyU2VsICE9IG1fcFdpZGdldC0+R2V0U2VsZWN0ZWRJbmRleCgwKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlyZXR1cm4gcFduZC0+R2V0VGV4dCgpICE9IG1fcFdpZGdldC0+R2V0VmFsdWUoKTsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCXJldHVybiBuQ3VyU2VsICE9IG1fcFdpZGdldC0+R2V0U2VsZWN0ZWRJbmRleCgwKTsKKwkJfQorCX0KKwkKKwlyZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgQ0ZGTF9Db21ib0JveDo6U2F2ZURhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQoreworCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7CisKKwlpZiAoQ1BXTF9Db21ib0JveCogcFduZCA9IChDUFdMX0NvbWJvQm94KilHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpCisJeworCQlDRlhfV2lkZVN0cmluZyBzd1RleHQgPSBwV25kLT5HZXRUZXh0KCk7CisJCUZYX0lOVDMyIG5DdXJTZWwgPSBwV25kLT5HZXRTZWxlY3QoKTsKKworCQkvL21hbnRpczowMDA0MTU3CisJCUZYX0JPT0wgYlNldFZhbHVlID0gVFJVRTsKKworCQlpZiAobV9wV2lkZ2V0LT5HZXRGaWVsZEZsYWdzKCkgJiBGSUVMREZMQUdfRURJVCkKKwkJeworCQkJaWYgKG5DdXJTZWwgPj0gMCkKKwkJCXsKKwkJCQlpZiAoc3dUZXh0ICE9IG1fcFdpZGdldC0+R2V0T3B0aW9uTGFiZWwobkN1clNlbCkpCisJCQkJCWJTZXRWYWx1ZSA9IFRSVUU7CisJCQkJZWxzZQorCQkJCQliU2V0VmFsdWUgPSBGQUxTRTsKKwkJCX0KKwkJCWVsc2UKKwkJCQliU2V0VmFsdWUgPSBUUlVFOworCQl9CisJCWVsc2UKKwkJCWJTZXRWYWx1ZSA9IEZBTFNFOworCisJCUNGWF9XaWRlU3RyaW5nIHNPbGRWYWx1ZTsKKwkJCisKKwkJaWYgKGJTZXRWYWx1ZSkKKwkJeworCQkJc09sZFZhbHVlID0gbV9wV2lkZ2V0LT5HZXRWYWx1ZSgpOworCQkJbV9wV2lkZ2V0LT5TZXRWYWx1ZShzd1RleHQsIEZBTFNFKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCW1fcFdpZGdldC0+R2V0U2VsZWN0ZWRJbmRleCgwKTsKKwkJCW1fcFdpZGdldC0+U2V0T3B0aW9uU2VsZWN0aW9uKG5DdXJTZWwsIFRSVUUsIEZBTFNFKTsKKwkJfQorCisJCW1fcFdpZGdldC0+UmVzZXRGaWVsZEFwcGVhcmFuY2UoVFJVRSk7CisJCW1fcFdpZGdldC0+VXBkYXRlRmllbGQoKTsKKwkJU2V0Q2hhbmdlTWFyaygpOworCisJCW1fcFdpZGdldC0+R2V0UERGUGFnZSgpOworCQkKKworCX0KK30KKworIHZvaWQgQ0ZGTF9Db21ib0JveDo6R2V0QWN0aW9uRGF0YSggQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIFBERlNES19GaWVsZEFjdGlvbiYgZmEpCit7CisJc3dpdGNoICh0eXBlKQorCXsKKwljYXNlIENQREZfQUFjdGlvbjo6S2V5U3Ryb2tlOgorCQlpZiAoQ1BXTF9Db21ib0JveCogcENvbWJvQm94ID0gKENQV0xfQ29tYm9Cb3gqKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkKKwkJeworCQkJaWYgKENQV0xfRWRpdCogcEVkaXQgPSAoQ1BXTF9FZGl0KikqcENvbWJvQm94KQorCQkJeworCQkJCWZhLmJGaWVsZEZ1bGwgPSBwRWRpdC0+SXNUZXh0RnVsbCgpOwkKKwkJCQlpbnQgblNlbFN0YXJ0ID0gMDsKKwkJCQlpbnQgblNlbEVuZCA9IDA7CisJCQkJcEVkaXQtPkdldFNlbChuU2VsU3RhcnQsIG5TZWxFbmQpOworCQkJCWZhLm5TZWxFbmQgPSBuU2VsRW5kOworCQkJCWZhLm5TZWxTdGFydCA9IG5TZWxTdGFydDsKKwkJCQlmYS5zVmFsdWUgPSBwRWRpdC0+R2V0VGV4dCgpOworCQkJCWZhLnNDaGFuZ2VFeCA9IEdldFNlbGVjdEV4cG9ydFRleHQoKTsKKworCQkJCWlmIChmYS5iRmllbGRGdWxsKQorCQkJCXsKKwkJCQkJZmEuc0NoYW5nZSA9IEwiIjsKKwkJCQkJZmEuc0NoYW5nZUV4ID0gTCIiOworCQkJCX0KKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIENQREZfQUFjdGlvbjo6VmFsaWRhdGU6CisJCWlmIChDUFdMX0NvbWJvQm94KiBwQ29tYm9Cb3ggPSAoQ1BXTF9Db21ib0JveCopR2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpKQorCQl7CisJCQlpZiAoQ1BXTF9FZGl0KiBwRWRpdCA9IChDUFdMX0VkaXQqKSpwQ29tYm9Cb3gpCisJCQl7CisJCQkJZmEuc1ZhbHVlID0gcEVkaXQtPkdldFRleHQoKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIENQREZfQUFjdGlvbjo6TG9zZUZvY3VzOgorCWNhc2UgQ1BERl9BQWN0aW9uOjpHZXRGb2N1czoKKwkJQVNTRVJUKG1fcFdpZGdldCAhPSBOVUxMKTsKKwkJZmEuc1ZhbHVlID0gbV9wV2lkZ2V0LT5HZXRWYWx1ZSgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKworCit2b2lkIENGRkxfQ29tYm9Cb3g6OlNldEFjdGlvbkRhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIAorCQkJCQkJCQkJY29uc3QgUERGU0RLX0ZpZWxkQWN0aW9uJiBmYSkKK3sKKwlzd2l0Y2ggKHR5cGUpCisJeworCWNhc2UgQ1BERl9BQWN0aW9uOjpLZXlTdHJva2U6CisJCWlmIChDUFdMX0NvbWJvQm94KiBwQ29tYm9Cb3ggPSAoQ1BXTF9Db21ib0JveCopR2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpKQorCQl7CisJCQlpZiAoQ1BXTF9FZGl0KiBwRWRpdCA9IChDUFdMX0VkaXQqKSpwQ29tYm9Cb3gpCisJCQl7CisJCQkJcEVkaXQtPlNldFNlbChmYS5uU2VsU3RhcnQsIGZhLm5TZWxFbmQpOworCQkJCXBFZGl0LT5SZXBsYWNlU2VsKGZhLnNDaGFuZ2UpOworCQkJfQorCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworRlhfQk9PTAlDRkZMX0NvbWJvQm94OjpJc0FjdGlvbkRhdGFDaGFuZ2VkKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgY29uc3QgUERGU0RLX0ZpZWxkQWN0aW9uJiBmYU9sZCwgCisJCQkJCQkJCQljb25zdCBQREZTREtfRmllbGRBY3Rpb24mIGZhTmV3KQoreworCXN3aXRjaCAodHlwZSkKKwl7CisJY2FzZSBDUERGX0FBY3Rpb246OktleVN0cm9rZToKKwkJcmV0dXJuICghZmFPbGQuYkZpZWxkRnVsbCAmJiBmYU9sZC5uU2VsRW5kICE9IGZhTmV3Lm5TZWxFbmQpIHx8IGZhT2xkLm5TZWxTdGFydCAhPSBmYU5ldy5uU2VsU3RhcnQgfHwKKwkJCWZhT2xkLnNDaGFuZ2UgIT0gZmFOZXcuc0NoYW5nZTsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgQ0ZGTF9Db21ib0JveDo6U2F2ZVN0YXRlKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykKK3sKKwlBU1NFUlQocFBhZ2VWaWV3ICE9IE5VTEwpOworCisJaWYgKENQV0xfQ29tYm9Cb3gqIHBDb21ib0JveCA9IChDUFdMX0NvbWJvQm94KilHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpCisJeworCQltX1N0YXRlLm5JbmRleCA9IHBDb21ib0JveC0+R2V0U2VsZWN0KCk7CisKKwkJaWYgKENQV0xfRWRpdCogcEVkaXQgPSAoQ1BXTF9FZGl0KikqcENvbWJvQm94KQorCQl7CisJCQlwRWRpdC0+R2V0U2VsKG1fU3RhdGUublN0YXJ0LCBtX1N0YXRlLm5FbmQpOworCQkJbV9TdGF0ZS5zVmFsdWUgPSBwRWRpdC0+R2V0VGV4dCgpOworCQl9CisJfQorfQorCit2b2lkIENGRkxfQ29tYm9Cb3g6OlJlc3RvcmVTdGF0ZShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpCit7CisJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsKKworCWlmIChDUFdMX0NvbWJvQm94KiBwQ29tYm9Cb3ggPSAoQ1BXTF9Db21ib0JveCopR2V0UERGV2luZG93KHBQYWdlVmlldywgVFJVRSkpCisJeworCQlpZiAobV9TdGF0ZS5uSW5kZXggPj0gMCkKKwkJCXBDb21ib0JveC0+U2V0U2VsZWN0KG1fU3RhdGUubkluZGV4KTsKKwkJZWxzZQorCQl7CisJCQlpZiAoQ1BXTF9FZGl0KiBwRWRpdCA9IChDUFdMX0VkaXQqKSpwQ29tYm9Cb3gpCisJCQl7CisJCQkJcEVkaXQtPlNldFRleHQobV9TdGF0ZS5zVmFsdWUpOworCQkJCXBFZGl0LT5TZXRTZWwobV9TdGF0ZS5uU3RhcnQsIG1fU3RhdGUubkVuZCk7CisJCQl9CisJCX0KKwl9Cit9CisKK0NQV0xfV25kKiBDRkZMX0NvbWJvQm94OjpSZXNldFBERldpbmRvdyhDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0JPT0wgYlJlc3RvcmVWYWx1ZSkKK3sKKwlpZiAoYlJlc3RvcmVWYWx1ZSkKKwkJU2F2ZVN0YXRlKHBQYWdlVmlldyk7CisJCisJRGVzdHJveVBERldpbmRvdyhwUGFnZVZpZXcpOworCQorCUNQV0xfV25kKiBwUmV0ID0gTlVMTDsKKwkKKwlpZiAoYlJlc3RvcmVWYWx1ZSkKKwl7CisJCVJlc3RvcmVTdGF0ZShwUGFnZVZpZXcpOworCQlwUmV0ID0gdGhpcy0+R2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpOworCX0KKwllbHNlCisJCXBSZXQgPSB0aGlzLT5HZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBUUlVFKTsKKwkKKwltX3BXaWRnZXQtPlVwZGF0ZUZpZWxkKCk7CisJCisJcmV0dXJuIHBSZXQ7Cit9CisKK3ZvaWQgQ0ZGTF9Db21ib0JveDo6T25LZXlTdHJva2UoRlhfQk9PTCBiS2V5RG93biwgRlhfVUlOVCBuRmxhZykKK3sKKwlBU1NFUlQobV9wV2lkZ2V0ICE9IE5VTEwpOworCQorCWludCBuRmxhZ3MgPSBtX3BXaWRnZXQtPkdldEZpZWxkRmxhZ3MoKTsKKwkKKwlpZiAobkZsYWdzICYgRklFTERGTEFHX0NPTU1JVE9OU0VMQ0hBTkdFKQorCXsKKwkJaWYgKG1fYlZhbGlkKQorCQl7CisJCQlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcgPSB0aGlzLT5HZXRDdXJQYWdlVmlldygpOworCQkJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsKKworCQkJaWYgKENvbW1pdERhdGEocFBhZ2VWaWV3LCBuRmxhZykpCisJCQl7CisJCQkJRGVzdHJveVBERldpbmRvdyhwUGFnZVZpZXcpOworCQkJCW1fYlZhbGlkID0gRkFMU0U7CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQgQ0ZGTF9Db21ib0JveDo6T25TZXRGb2N1cyhDUFdMX1duZCogcFduZCkKK3sKKwlBU1NFUlQobV9wQXBwICE9IE5VTEwpOworCisJQVNTRVJUKHBXbmQgIT0gTlVMTCk7CisKKwlpZiAocFduZC0+R2V0Q2xhc3NOYW1lKCkgPT0gUFdMX0NMQVNTTkFNRV9FRElUKQorCXsKKwkJQ1BXTF9FZGl0KiBwRWRpdCA9IChDUFdMX0VkaXQqKXBXbmQ7CisJCXBFZGl0LT5TZXRDaGFyU2V0KDEzNCk7CisJCXBFZGl0LT5TZXRDb2RlUGFnZSg5MzYpOworCisJCXBFZGl0LT5TZXRSZWFkeVRvSW5wdXQoKTsKKwkJQ0ZYX1dpZGVTdHJpbmcgd3NUZXh0ID0gcEVkaXQtPkdldFRleHQoKTsKKwkJaW50IG5DaGFyYWN0ZXJzID0gd3NUZXh0LkdldExlbmd0aCgpOworCQlDRlhfQnl0ZVN0cmluZyBic1VURlRleHQgPSB3c1RleHQuVVRGMTZMRV9FbmNvZGUoKTsKKwkJdW5zaWduZWQgc2hvcnQqIHBCdWZmZXIgPSAodW5zaWduZWQgc2hvcnQqKShGWF9MUENTVFIpYnNVVEZUZXh0OworCQltX3BBcHAtPkZGSV9PblNldEZpZWxkSW5wdXRGb2N1cyhtX3BXaWRnZXQtPkdldEZvcm1GaWVsZCgpLCBwQnVmZmVyLCBuQ2hhcmFjdGVycywgVFJVRSk7CisKKyAJCXBFZGl0LT5TZXRFZGl0Tm90aWZ5KHRoaXMpOworCX0KK30KKwordm9pZCBDRkZMX0NvbWJvQm94OjpPbktpbGxGb2N1cyhDUFdMX1duZCogcFduZCkKK3sKKwlBU1NFUlQobV9wQXBwICE9IE5VTEwpOworfQorCitGWF9CT09MCUNGRkxfQ29tYm9Cb3g6OkNhbkNvcHkoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQoreworCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wgQ0ZGTF9Db21ib0JveDo6Q2FuQ3V0KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkKK3sKKwlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOworCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MCUNGRkxfQ29tYm9Cb3g6OkNhblBhc3RlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkKK3sKKwlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOworCisJcmV0dXJuIEZBTFNFOworfQorCit2b2lkIENGRkxfQ29tYm9Cb3g6OkRvQ29weShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpCit7CisJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsKK30KKwordm9pZCBDRkZMX0NvbWJvQm94OjpEb0N1dChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpCit7CisJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsKK30KKwordm9pZCBDRkZMX0NvbWJvQm94OjpEb1Bhc3RlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkKK3sKKwlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOworfQorCit2b2lkIENGRkxfQ29tYm9Cb3g6Ok9uQWRkVW5kbyhDUFdMX0VkaXQqIHBFZGl0KQoreworCUFTU0VSVChwRWRpdCAhPSBOVUxMKTsKK30KKworQ0ZYX1dpZGVTdHJpbmcgQ0ZGTF9Db21ib0JveDo6R2V0U2VsZWN0RXhwb3J0VGV4dCgpCit7CisJQ0ZYX1dpZGVTdHJpbmcgc3dSZXQ7CisJCisJaW50IG5FeHBvcnQgPSAtMTsKKwlDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcgPSBHZXRDdXJQYWdlVmlldygpOworCWlmIChDUFdMX0NvbWJvQm94ICogcENvbWJvQm94ID0gKENQV0xfQ29tYm9Cb3gqKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkKKwl7CisJCW5FeHBvcnQgPSBwQ29tYm9Cb3gtPkdldFNlbGVjdCgpOworCX0KKwkKKwlpZiAobkV4cG9ydCA+PSAwKQorCXsKKwkJaWYgKENQREZfRm9ybUZpZWxkICogcEZvcm1GaWVsZCA9IG1fcFdpZGdldC0+R2V0Rm9ybUZpZWxkKCkpCisJCXsKKwkJCXN3UmV0ID0gcEZvcm1GaWVsZC0+R2V0T3B0aW9uVmFsdWUobkV4cG9ydCk7CisJCQlpZiAoc3dSZXQuSXNFbXB0eSgpKQorCQkJCXN3UmV0ID0gcEZvcm1GaWVsZC0+R2V0T3B0aW9uTGFiZWwobkV4cG9ydCk7CisJCX0KKwl9CisJCisJcmV0dXJuIHN3UmV0OworfQpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvZm9ybWZpbGxlci9GRkxfRm9ybUZpbGxlci5jcHAgYi9mcGRmc2RrL3NyYy9mb3JtZmlsbGVyL0ZGTF9Gb3JtRmlsbGVyLmNwcAppbmRleCBmNTE0YmYyLi41MzBiODBjIDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9mb3JtZmlsbGVyL0ZGTF9Gb3JtRmlsbGVyLmNwcAorKysgYi9mcGRmc2RrL3NyYy9mb3JtZmlsbGVyL0ZGTF9Gb3JtRmlsbGVyLmNwcApAQCAtMSw5MjUgKzEsOTI1IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9Gb3JtRmlsbGVyLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfTm90aWZ5LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfQ0JBX0ZvbnRtYXAuaCINCi0NCi0jZGVmaW5lIEdldFJlZChyZ2IpCQkJKChGWF9CWVRFKShyZ2IpKQ0KLSNkZWZpbmUgR2V0R3JlZW4ocmdiKQkJKChGWF9CWVRFKSgoKEZYX1dPUkQpKHJnYikpID4+IDgpKQ0KLSNkZWZpbmUgR2V0Qmx1ZShyZ2IpCQkoKEZYX0JZVEUpKChyZ2IpPj4xNikpDQotDQotI2RlZmluZSBGRkxfSElOVF9FTEFQU0UJCTgwMA0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZGTF9Gb3JtRmlsbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DRkZMX0Zvcm1GaWxsZXI6OkNGRkxfRm9ybUZpbGxlcihDUERGRG9jX0Vudmlyb25tZW50KiBwQXBwLCBDUERGU0RLX0Fubm90KiBwQW5ub3QpDQotCTptX3BBcHAocEFwcCksDQotCW1fcEFubm90KHBBbm5vdCksDQotCW1fYlZhbGlkKEZBTFNFKSwNCi0JbV9wdE9sZFBvcygwLDApDQoteyANCi0JbV9wV2lkZ2V0ID0gKENQREZTREtfV2lkZ2V0KikgcEFubm90Ow0KLX0NCi0NCi1DRkZMX0Zvcm1GaWxsZXI6On5DRkZMX0Zvcm1GaWxsZXIoKQ0KLXsNCi0JRlhfUE9TSVRJT04gcG9zID0gbV9NYXBzLkdldFN0YXJ0UG9zaXRpb24oKTsNCi0Jd2hpbGUgKHBvcykNCi0Jew0KLQkJQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldyA9IE5VTEw7DQotCQlDUFdMX1duZCogcFduZCA9IE5VTEw7DQotCQltX01hcHMuR2V0TmV4dEFzc29jKHBvcywgcFBhZ2VWaWV3LCBwV25kKTsNCi0NCi0JCWlmIChwV25kKQ0KLQkJew0KLQkJCUNGRkxfUHJpdmF0ZURhdGEqIHBEYXRhID0gKENGRkxfUHJpdmF0ZURhdGEqKXBXbmQtPkdldEF0dGFjaGVkRGF0YSgpOw0KLQkJCXBXbmQtPkRlc3Ryb3koKTsNCi0JCQlkZWxldGUgcFduZDsNCi0JCQlkZWxldGUgcERhdGE7DQotCQl9DQotCX0NCi0JbV9NYXBzLlJlbW92ZUFsbCgpOw0KLQ0KLX0NCi0NCi12b2lkIENGRkxfRm9ybUZpbGxlcjo6U2V0V2luZG93UmVjdChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIGNvbnN0IENQREZfUmVjdCYgcmNXaW5kb3cpDQotew0KLQlpZiAoQ1BXTF9XbmQqIHBXbmQgPSB0aGlzLT5HZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpDQotCXsNCi0JCXBXbmQtPk1vdmUoQ1BERl9SZWN0KHJjV2luZG93KSwgVFJVRSwgRkFMU0UpOw0KLQl9DQotfQ0KLQ0KLUNQREZfUmVjdCBDRkZMX0Zvcm1GaWxsZXI6OkdldFdpbmRvd1JlY3QoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQ0KLXsNCi0JaWYgKENQV0xfV25kKiBwV25kID0gdGhpcy0+R2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpKQ0KLQl7DQotCQlyZXR1cm4gcFduZC0+R2V0V2luZG93UmVjdCgpOw0KLQl9DQotDQotCXJldHVybiBDUERGX1JlY3QoMCwwLDAsMCk7DQotfQ0KLQ0KLUZYX1JFQ1QgQ0ZGTF9Gb3JtRmlsbGVyOjpHZXRWaWV3QkJveChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCkNCi17DQotCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotDQotCUNQREZfUmVjdCByY0Fubm90ID0gbV9wV2lkZ2V0LT5HZXRSZWN0KCk7DQotDQotCWlmIChDUFdMX1duZCogcFduZCA9IHRoaXMtPkdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkNCi0Jew0KLQkJQ1BERl9SZWN0IHJjV2luZG93ID0gcFduZC0+R2V0V2luZG93UmVjdCgpOw0KLQkJcmNBbm5vdCA9IFBXTHRvRkZMKHJjV2luZG93KTsNCi0JfQ0KLQ0KLQlDUERGX1JlY3QgcmNXaW4gPSByY0Fubm90Ow0KLS8vCXBQYWdlVmlldy0+RG9jVG9XaW5kb3cocmNBbm5vdCwgcmNXaW4pOw0KLQ0KLQlDUERGX1JlY3QgcmNGb2N1cyA9IHRoaXMtPkdldEZvY3VzQm94KHBQYWdlVmlldyk7DQotCWlmICghcmNGb2N1cy5Jc0VtcHR5KCkpDQotCQlyY1dpbi5VbmlvbihyY0ZvY3VzKTsNCi0NCi0JQ1BERl9SZWN0IHJlY3QgPSBDUFdMX1V0aWxzOjpJbmZsYXRlUmVjdChyY1dpbiwxKTsNCi0NCi0JcmV0dXJuIHJlY3QuR2V0T3V0dGVyUmVjdCgpOw0KLX0NCi0NCi12b2lkIENGRkxfRm9ybUZpbGxlcjo6T25EcmF3KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgLypIREMgaERDLCovIENQREZTREtfQW5ub3QqIHBBbm5vdCwgDQotCQkJCQkJQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwNCi0JCQkJCQkvKmNvbnN0IENSZWN0JiByY1dpbmRvdywqLyBGWF9EV09SRCBkd0ZsYWdzKQ0KLXsNCi0JQVNTRVJUKHBBbm5vdC0+R2V0UERGQW5ub3QoKS0+R2V0U3ViVHlwZSgpID09ICJXaWRnZXQiKTsNCi0NCi0JaWYgKENQV0xfV25kICogcFduZCA9IEdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkNCi0Jew0KLQkJQ1BERl9NYXRyaXggbXQgPSB0aGlzLT5HZXRDdXJNYXRyaXgoKTsNCi0JCW10LkNvbmNhdCgqcFVzZXIyRGV2aWNlKTsNCi0JCXBXbmQtPkRyYXdBcHBlYXJhbmNlKHBEZXZpY2UsJm10KTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gKENQREZTREtfV2lkZ2V0KilwQW5ub3Q7DQotCQlpZiAoQ0ZGTF9JRm9ybUZpbGxlcjo6SXNWaXNpYmxlKHBXaWRnZXQpKQ0KLQkJCXBXaWRnZXQtPkRyYXdBcHBlYXJhbmNlKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgQ1BERl9Bbm5vdDo6Tm9ybWFsLCBOVUxMKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENGRkxfRm9ybUZpbGxlcjo6T25EcmF3RGVhY3RpdmUoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCAvKkhEQyBoREMsKi8gQ1BERlNES19Bbm5vdCogcEFubm90LCANCi0JCQkJCQlDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLA0KLQkJCQkJCS8qY29uc3QgQ1JlY3QmIHJjV2luZG93LCovIEZYX0RXT1JEIGR3RmxhZ3MpDQotew0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQkNCi0JQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSAoQ1BERlNES19XaWRnZXQqKXBBbm5vdDsNCi0JDQotCXBXaWRnZXQtPkRyYXdBcHBlYXJhbmNlKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgQ1BERl9Bbm5vdDo6Tm9ybWFsLCBOVUxMKTsNCi19DQotDQotDQotdm9pZCBDRkZMX0Zvcm1GaWxsZXI6Ok9uQ3JlYXRlKENQREZTREtfQW5ub3QqIHBBbm5vdCkNCi17DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9Gb3JtRmlsbGVyOjpPbkxvYWQoQ1BERlNES19Bbm5vdCogcEFubm90KQ0KLXsNCi19DQotDQotdm9pZCBDRkZMX0Zvcm1GaWxsZXI6Ok9uRGVsZXRlKENQREZTREtfQW5ub3QqIHBBbm5vdCkNCi17DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9Gb3JtRmlsbGVyOjpPbk1vdXNlRW50ZXIoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QpDQotew0KLX0NCi0NCi12b2lkIENGRkxfRm9ybUZpbGxlcjo6T25Nb3VzZUV4aXQoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QpDQotew0KLQlFbmRUaW1lcigpOw0KLQlBU1NFUlQobV9wV2lkZ2V0ICE9IE5VTEwpOw0KLX0NCi0NCi1GWF9CT09MIENGRkxfRm9ybUZpbGxlcjo6T25MQnV0dG9uRG93bihDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQ0KLXsNCi0JaWYgKENQV0xfV25kICogcFduZCA9IEdldFBERldpbmRvdyhwUGFnZVZpZXcsIFRSVUUpKQ0KLQl7CQkNCi0JCW1fYlZhbGlkID0gVFJVRTsNCi0JCUZYX1JFQ1QgcmVjdCA9IHRoaXMtPkdldFZpZXdCQm94KHBQYWdlVmlldyxwQW5ub3QpOw0KLQkJdGhpcy0+SW52YWxpZGF0ZVJlY3QocmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCwgcmVjdC5ib3R0b20pOw0KLQ0KLSAJCWlmKCFyZWN0LkNvbnRhaW5zKChpbnQpcG9pbnQueCwgKGludClwb2ludC55KSkNCi0gIAkJCXJldHVybiBGQUxTRTsNCi0NCi0JCXJldHVybiBwV25kLT5PbkxCdXR0b25Eb3duKFduZHRvUFdMKHBQYWdlVmlldywgcG9pbnQpLG5GbGFncyk7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MCUNGRkxfRm9ybUZpbGxlcjo6T25MQnV0dG9uVXAoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkNCi17DQotCWlmIChDUFdMX1duZCAqIHBXbmQgPSBHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpDQotCXsJDQotCQlGWF9SRUNUIHJjRkZMID0gIHRoaXMtPkdldFZpZXdCQm94KHBQYWdlVmlldywgcEFubm90KTsNCi0JCXRoaXMtPkludmFsaWRhdGVSZWN0KHJjRkZMLmxlZnQsIHJjRkZMLnRvcCwgcmNGRkwucmlnaHQsIHJjRkZMLmJvdHRvbSk7DQotCQlwV25kLT5PbkxCdXR0b25VcChXbmR0b1BXTChwUGFnZVZpZXcsIHBvaW50KSxuRmxhZ3MpOw0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MCUNGRkxfRm9ybUZpbGxlcjo6T25MQnV0dG9uRGJsQ2xrKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpDQotew0KLQlpZiAoQ1BXTF9XbmQgKiBwV25kID0gR2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpKQ0KLQl7CQkJCQ0KLQkJcFduZC0+T25MQnV0dG9uRGJsQ2xrKFduZHRvUFdMKHBQYWdlVmlldywgcG9pbnQpLG5GbGFncyk7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgQ0ZGTF9Gb3JtRmlsbGVyOjpPbk1vdXNlTW92ZShDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQ0KLXsNCi0JaWYgKChtX3B0T2xkUG9zLnggIT0gcG9pbnQueCkgfHwgKG1fcHRPbGRQb3MueSAhPSBwb2ludC55KSkNCi0Jew0KLQkJbV9wdE9sZFBvcyA9IHBvaW50Ow0KLQl9DQotDQotCWlmIChDUFdMX1duZCAqIHBXbmQgPSBHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpDQotCXsJCQkJDQotCQlwV25kLT5Pbk1vdXNlTW92ZShXbmR0b1BXTChwUGFnZVZpZXcsIHBvaW50KSxuRmxhZ3MpOw0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MIENGRkxfRm9ybUZpbGxlcjo6T25Nb3VzZVdoZWVsKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgc2hvcnQgekRlbHRhLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkNCi17DQotCWlmICghSXNWYWxpZCgpKSByZXR1cm4gRkFMU0U7DQotDQotCWlmIChDUFdMX1duZCAqIHBXbmQgPSBHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBUUlVFKSkNCi0JewkJCQkNCi0JCXJldHVybiBwV25kLT5Pbk1vdXNlV2hlZWwoekRlbHRhLCBXbmR0b1BXTChwUGFnZVZpZXcsIHBvaW50KSxuRmxhZ3MpOw0KLQl9DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBDRkZMX0Zvcm1GaWxsZXI6Ok9uUkJ1dHRvbkRvd24oQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkNCi17DQotCWlmIChDUFdMX1duZCAqIHBXbmQgPSBHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBUUlVFKSkNCi0JewkJCQkNCi0JCXBXbmQtPk9uUkJ1dHRvbkRvd24oV25kdG9QV0wocFBhZ2VWaWV3LCBwb2ludCksbkZsYWdzKTsNCi0JCXJldHVybiBUUlVFOw0KLQl9DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTAlDRkZMX0Zvcm1GaWxsZXI6Ok9uUkJ1dHRvblVwKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpDQotew0KLQlpZiAoQ1BXTF9XbmQgKiBwV25kID0gR2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpKQ0KLQl7CQkJCQ0KLQkJcFduZC0+T25SQnV0dG9uVXAoV25kdG9QV0wocFBhZ2VWaWV3LCBwb2ludCksbkZsYWdzKTsNCi0JCXJldHVybiBUUlVFOw0KLQl9DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTAlDRkZMX0Zvcm1GaWxsZXI6Ok9uUkJ1dHRvbkRibENsayhDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQ0KLXsNCi0JaWYgKENQV0xfV25kICogcFduZCA9IEdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkNCi0JewkJCQkNCi0JCXBXbmQtPk9uUkJ1dHRvbkRibENsayhXbmR0b1BXTChwUGFnZVZpZXcsIHBvaW50KSxuRmxhZ3MpOw0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MIENGRkxfRm9ybUZpbGxlcjo6T25LZXlEb3duKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuS2V5Q29kZSwgRlhfVUlOVCBuRmxhZ3MpDQotew0KLQlpZiAoSXNWYWxpZCgpKQ0KLQl7DQotCQlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcgPSB0aGlzLT5HZXRDdXJQYWdlVmlldygpOw0KLQkJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsNCi0NCi0JCWlmIChDUFdMX1duZCAqIHBXbmQgPSBHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpDQotCQl7CQkJCQ0KLQkJCXJldHVybiBwV25kLT5PbktleURvd24obktleUNvZGUsbkZsYWdzKTsNCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wJQ0ZGTF9Gb3JtRmlsbGVyOjpPbkNoYXIoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5DaGFyLCBGWF9VSU5UIG5GbGFncykNCi17DQotCWlmIChJc1ZhbGlkKCkpDQotCXsNCi0JCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyA9IHRoaXMtPkdldEN1clBhZ2VWaWV3KCk7DQotCQlBU1NFUlQocFBhZ2VWaWV3ICE9IE5VTEwpOw0KLQ0KLQkJaWYgKENQV0xfV25kICogcFduZCA9IEdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkNCi0JCXsJCQkJDQotCQkJcmV0dXJuIHBXbmQtPk9uQ2hhcihuQ2hhcixuRmxhZ3MpOw0KLQkJfQ0KLQl9DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotdm9pZCBDRkZMX0Zvcm1GaWxsZXI6Ok9uRGVTZWxlY3RlZChDUERGU0RLX0Fubm90KiBwQW5ub3QpDQotew0KLQlBU1NFUlQoRkFMU0UpOw0KLX0NCi0NCi12b2lkIENGRkxfRm9ybUZpbGxlcjo6T25TZWxlY3RlZChDUERGU0RLX0Fubm90KiBwQW5ub3QpDQotew0KLQlBU1NFUlQoRkFMU0UpOw0KLX0NCi0NCi1GWF9CT09MCUNGRkxfRm9ybUZpbGxlcjo6T25TZXRGb2N1cyhDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWcpDQotew0KLQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IChDUERGU0RLX1dpZGdldCopcEFubm90Ow0KLQ0KLQlDUERGX1BhZ2UgKiBwUGFnZSA9IHBXaWRnZXQtPkdldFBERlBhZ2UoKTsNCi0gCUNQREZTREtfRG9jdW1lbnQgKiBwRG9jID0gbV9wQXBwLT5HZXRDdXJyZW50RG9jKCk7DQotCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyA9IHBEb2MtPkdldFBhZ2VWaWV3KHBQYWdlKTsNCi0gCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7DQotDQotIAkNCi0NCi0JQ1BXTF9XbmQgKiBwV25kID0gTlVMTDsNCi0JaWYgKCAocFduZCA9IEdldFBERldpbmRvdyhwUGFnZVZpZXcsIFRSVUUpKSkNCi0JewkJCQkNCi0JCXBXbmQtPlNldEZvY3VzKCk7DQotCX0NCi0NCi0JbV9iVmFsaWQgPSBUUlVFOw0KLQkNCi0JDQotCQ0KLQ0KLQltX2JWYWxpZCA9IFRSVUU7DQotCUZYX1JFQ1QgcmNSZWN0ID0gdGhpcy0+R2V0Vmlld0JCb3gocFBhZ2VWaWV3LHBBbm5vdCk7DQotCXRoaXMtPkludmFsaWRhdGVSZWN0KHJjUmVjdC5sZWZ0LCByY1JlY3QudG9wLCByY1JlY3QucmlnaHQsIHJjUmVjdC5ib3R0b20pOw0KLQkNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wJQ0ZGTF9Gb3JtRmlsbGVyOjpPbktpbGxGb2N1cyhDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWcpDQotew0KLQlpZiAoSXNWYWxpZCgpKQ0KLQl7DQotCQlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcgPSB0aGlzLT5HZXRDdXJQYWdlVmlldygpOw0KLQkJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsNCi0NCi0JCUNvbW1pdERhdGEocFBhZ2VWaWV3LCBuRmxhZyk7DQotDQotCQlpZiAoQ1BXTF9XbmQqIHBXbmQgPSBHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpDQotCQl7CQkJCQ0KLQkJCXBXbmQtPktpbGxGb2N1cygpOw0KLQkJfQ0KLQkJDQotCQlzd2l0Y2ggKG1fcFdpZGdldC0+R2V0RmllbGRUeXBlKCkpDQotCQl7DQotCQljYXNlIEZJRUxEVFlQRV9QVVNIQlVUVE9OOg0KLQkJY2FzZSBGSUVMRFRZUEVfQ0hFQ0tCT1g6DQotCQljYXNlIEZJRUxEVFlQRV9SQURJT0JVVFRPTjoNCi0JCQlFc2NhcGVGaWxsZXIocFBhZ2VWaWV3LCBUUlVFKTsNCi0JCQlicmVhazsNCi0JCWRlZmF1bHQ6DQotCQkJRXNjYXBlRmlsbGVyKHBQYWdlVmlldywgRkFMU0UpOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MCUNGRkxfRm9ybUZpbGxlcjo6SXNWYWxpZCgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9iVmFsaWQ7DQotfQ0KLQ0KLVBXTF9DUkVBVEVQQVJBTQlDRkZMX0Zvcm1GaWxsZXI6OkdldENyZWF0ZVBhcmFtKCkNCi17DQotCUFTU0VSVChtX3BBcHAgIT0gTlVMTCk7DQotDQotCVBXTF9DUkVBVEVQQVJBTSBjcDsNCi0NCi0JY3AucFBhcmVudFduZCA9IE5VTEw7CQ0KLQljcC5wUHJvdmlkZXIgPSB0aGlzOw0KLQljcC5yY1JlY3RXbmQgPSBHZXRQREZXaW5kb3dSZWN0KCk7DQotCQ0KLQlGWF9EV09SRCBkd0NyZWF0ZUZsYWdzID0gUFdTX0JPUkRFUiB8IFBXU19CQUNLR1JPVU5EIHwgUFdTX1ZJU0lCTEU7DQotDQotCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7DQotDQotDQotCUZYX0RXT1JEIGR3RmllbGRGbGFnID0gbV9wV2lkZ2V0LT5HZXRGaWVsZEZsYWdzKCk7DQotDQotCWlmIChkd0ZpZWxkRmxhZyAmIEZJRUxERkxBR19SRUFET05MWSkNCi0JewkJDQotCQlkd0NyZWF0ZUZsYWdzIHw9IFBXU19SRUFET05MWTsNCi0JfQ0KLQ0KLQlGWF9DT0xPUlJFRiBjb2xvcjsNCi0JaWYgKG1fcFdpZGdldC0+R2V0RmlsbENvbG9yKGNvbG9yKSkNCi0Jew0KLQkJY3Auc0JhY2tncm91bmRDb2xvciA9IENQV0xfQ29sb3IoR2V0UmVkKGNvbG9yKSwgR2V0R3JlZW4oY29sb3IpLCBHZXRCbHVlKGNvbG9yKSk7DQotCX0NCi0NCi0JaWYgKG1fcFdpZGdldC0+R2V0Qm9yZGVyQ29sb3IoY29sb3IpKQ0KLQl7DQotCQljcC5zQm9yZGVyQ29sb3IgPSBDUFdMX0NvbG9yKEdldFJlZChjb2xvciksIEdldEdyZWVuKGNvbG9yKSwgR2V0Qmx1ZShjb2xvcikpOw0KLQl9DQotDQotCWNwLnNUZXh0Q29sb3IgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLDApOw0KLQ0KLQlpZiAobV9wV2lkZ2V0LT5HZXRUZXh0Q29sb3IoY29sb3IpKQ0KLQl7DQotCQljcC5zVGV4dENvbG9yID0gQ1BXTF9Db2xvcihHZXRSZWQoY29sb3IpLCBHZXRHcmVlbihjb2xvciksIEdldEJsdWUoY29sb3IpKTsNCi0JfQ0KLQ0KLQljcC5mRm9udFNpemUgPSBtX3BXaWRnZXQtPkdldEZvbnRTaXplKCk7DQotCWNwLmR3Qm9yZGVyV2lkdGggPSBtX3BXaWRnZXQtPkdldEJvcmRlcldpZHRoKCk7DQotCQ0KLQlpbnQgbkJvcmRlclN0eWxlID0gbV9wV2lkZ2V0LT5HZXRCb3JkZXJTdHlsZSgpOw0KLQ0KLQlzd2l0Y2ggKG5Cb3JkZXJTdHlsZSkNCi0Jew0KLQljYXNlIEJCU19TT0xJRDoNCi0JCWNwLm5Cb3JkZXJTdHlsZSA9IFBCU19TT0xJRDsNCi0JCWJyZWFrOw0KLQljYXNlIEJCU19EQVNIOg0KLQkJY3AubkJvcmRlclN0eWxlID0gUEJTX0RBU0g7DQotCQljcC5zRGFzaCA9IENQV0xfRGFzaCgzLDMsMCk7CQkJDQotCQlicmVhazsNCi0JY2FzZSBCQlNfQkVWRUxFRDoNCi0JCWNwLm5Cb3JkZXJTdHlsZSA9IFBCU19CRVZFTEVEOw0KLQkJY3AuZHdCb3JkZXJXaWR0aCAqPSAyOw0KLQkJYnJlYWs7DQotCWNhc2UgQkJTX0lOU0VUOg0KLQkJY3AubkJvcmRlclN0eWxlID0gUEJTX0lOU0VUOw0KLQkJY3AuZHdCb3JkZXJXaWR0aCAqPSAyOw0KLQkJYnJlYWs7DQotCWNhc2UgQkJTX1VOREVSTElORToNCi0JCWNwLm5Cb3JkZXJTdHlsZSA9IFBCU19VTkRFUkxJTkVEOw0KLQkJYnJlYWs7DQotCX0NCi0NCi0JaWYgKGNwLmZGb250U2l6ZSA8PSAwKQ0KLQl7DQotCQlkd0NyZWF0ZUZsYWdzIHw9IFBXU19BVVRPRk9OVFNJWkU7DQotCX0NCi0NCi0JY3AuZHdGbGFncyA9IGR3Q3JlYXRlRmxhZ3M7DQotCWNwLnBTeXN0ZW1IYW5kbGVyID0gbV9wQXBwLT5HZXRTeXNIYW5kbGVyKCk7DQotCXJldHVybiBjcDsNCi19DQotDQotQ1BXTF9XbmQqIENGRkxfRm9ybUZpbGxlcjo6R2V0UERGV2luZG93KENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfQk9PTCBiTmV3KQ0KLXsNCi0JQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsNCi0JQVNTRVJUKG1fcFdpZGdldCAhPSBOVUxMKTsNCi0NCi0JQ1BXTF9XbmQqIHBXbmQgPSBOVUxMOw0KLQltX01hcHMuTG9va3VwKHBQYWdlVmlldywgcFduZCk7DQotDQotCWlmIChiTmV3KQ0KLQl7DQotCQlpZiAocFduZCkNCi0JCXsNCi0JCQlDRkZMX1ByaXZhdGVEYXRhKiBwUHJpdmF0ZURhdGEgPSAoQ0ZGTF9Qcml2YXRlRGF0YSopcFduZC0+R2V0QXR0YWNoZWREYXRhKCk7DQotCQkJQVNTRVJUKHBQcml2YXRlRGF0YSAhPSBOVUxMKTsNCi0NCi0JCQlpZiAocFByaXZhdGVEYXRhLT5uV2lkZ2V0QWdlICE9IG1fcFdpZGdldC0+R2V0QXBwZWFyYW5jZUFnZSgpKQ0KLQkJCXsNCi0JCQkJcmV0dXJuIHRoaXMtPlJlc2V0UERGV2luZG93KHBQYWdlVmlldywgbV9wV2lkZ2V0LT5HZXRWYWx1ZUFnZSgpID09IHBQcml2YXRlRGF0YS0+blZhbHVlQWdlKTsNCi0JCQl9DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJUFdMX0NSRUFURVBBUkFNIGNwID0gR2V0Q3JlYXRlUGFyYW0oKTsNCi0JCQljcC5oQXR0YWNoZWRXbmQgPSAoRlhfSFdORCltX3BXaWRnZXQ7DQotDQotCQkJQ0ZGTF9Qcml2YXRlRGF0YSogcFByaXZhdGVEYXRhID0gbmV3IENGRkxfUHJpdmF0ZURhdGE7DQotCQkJcFByaXZhdGVEYXRhLT5wV2lkZ2V0ID0gbV9wV2lkZ2V0Ow0KLQkJCXBQcml2YXRlRGF0YS0+cFBhZ2VWaWV3ID0gcFBhZ2VWaWV3Ow0KLQkJCXBQcml2YXRlRGF0YS0+bldpZGdldEFnZSA9IG1fcFdpZGdldC0+R2V0QXBwZWFyYW5jZUFnZSgpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIHBQcml2YXRlRGF0YS0+blZhbHVlQWdlID0gMDsNCi0NCi0JCQljcC5wQXR0YWNoZWREYXRhID0gcFByaXZhdGVEYXRhOw0KLQ0KLQkJCXBXbmQgPSBOZXdQREZXaW5kb3coY3AsIHBQYWdlVmlldyk7DQotDQotCQkJaWYgKHBXbmQpDQotCQkJew0KLQkJCQltX01hcHMuU2V0QXQocFBhZ2VWaWV3LCBwV25kKTsNCi0JCQl9DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIHBXbmQ7DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9Gb3JtRmlsbGVyOjpEZXN0cm95UERGV2luZG93KENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykNCi17DQotCUNQV0xfV25kKiBwV25kID0gTlVMTDsNCi0JbV9NYXBzLkxvb2t1cChwUGFnZVZpZXcsIHBXbmQpOw0KLQ0KLQlpZiAocFduZCkNCi0Jew0KLQkJQ0ZGTF9Qcml2YXRlRGF0YSogcERhdGEgPSAoQ0ZGTF9Qcml2YXRlRGF0YSopcFduZC0+R2V0QXR0YWNoZWREYXRhKCk7DQotCQlwRGF0YS0+cFBhZ2VWaWV3ID0gTlVMTDsNCi0JCXBXbmQtPkRlc3Ryb3koKTsNCi0JCWRlbGV0ZSBwV25kOw0KLQkJZGVsZXRlIHBEYXRhOw0KLQl9DQotDQotCW1fTWFwcy5SZW1vdmVLZXkocFBhZ2VWaWV3KTsNCi19DQotDQotQ1BERl9NYXRyaXgJQ0ZGTF9Gb3JtRmlsbGVyOjpHZXRXaW5kb3dNYXRyaXgodm9pZCogcEF0dGFjaGVkRGF0YSkNCi17DQotCWlmIChDRkZMX1ByaXZhdGVEYXRhKiBwUHJpdmF0ZURhdGEgPSAoQ0ZGTF9Qcml2YXRlRGF0YSopcEF0dGFjaGVkRGF0YSkNCi0Jew0KLQkJaWYgKHBQcml2YXRlRGF0YS0+cFBhZ2VWaWV3KQ0KLQkJew0KLQkJCUNQREZfTWF0cml4IG10UGFnZVZpZXc7DQotCQkJcFByaXZhdGVEYXRhLT5wUGFnZVZpZXctPkdldEN1cnJlbnRNYXRyaXgobXRQYWdlVmlldyk7DQotCQkJQ1BERl9NYXRyaXggbXQgPSBHZXRDdXJNYXRyaXgoKTsNCi0JCQltdC5Db25jYXQobXRQYWdlVmlldyk7DQotCQkJDQotCQkJcmV0dXJuIG10Ow0KLQkJfQ0KLQl9DQotCXJldHVybiBDUERGX01hdHJpeCgxLDAsMCwxLDAsMCk7DQotfQ0KLQ0KLUNQREZfTWF0cml4CUNGRkxfRm9ybUZpbGxlcjo6R2V0Q3VyTWF0cml4KCkNCi17DQotCUNQREZfTWF0cml4IG10Ow0KLQ0KLQlBU1NFUlQobV9wV2lkZ2V0ICE9IE5VTEwpOw0KLQ0KLQlDUERGX1JlY3QgcmNEQSA7DQotCW1fcFdpZGdldC0+R2V0UERGQW5ub3QoKS0+R2V0UmVjdChyY0RBKTsNCi0NCi0NCi0Jc3dpdGNoIChtX3BXaWRnZXQtPkdldFJvdGF0ZSgpKQ0KLQl7DQotCWRlZmF1bHQ6DQotCWNhc2UgMDoJCQ0KLQkJbXQgPSBDUERGX01hdHJpeCgxLDAsMCwxLDAsMCk7DQotCQlicmVhazsNCi0JY2FzZSA5MDoNCi0JCW10ID0gQ1BERl9NYXRyaXgoMCwxLC0xLDAscmNEQS5yaWdodCAtIHJjREEubGVmdCwwKTsNCi0JCWJyZWFrOw0KLQljYXNlIDE4MDoNCi0JCW10ID0gQ1BERl9NYXRyaXgoLTEsMCwwLC0xLHJjREEucmlnaHQgLSByY0RBLmxlZnQscmNEQS50b3AgLSByY0RBLmJvdHRvbSk7DQotCQlicmVhazsNCi0JY2FzZSAyNzA6DQotCQltdCA9IENQREZfTWF0cml4KDAsLTEsMSwwLDAscmNEQS50b3AgLSByY0RBLmJvdHRvbSk7DQotCQlicmVhazsNCi0JfQ0KLQltdC5lICs9IHJjREEubGVmdDsNCi0JbXQuZiArPSByY0RBLmJvdHRvbTsNCi0NCi0JcmV0dXJuIG10Ow0KLX0NCi0NCi1DRlhfV2lkZVN0cmluZyBDRkZMX0Zvcm1GaWxsZXI6OkxvYWRQb3B1cE1lbnVTdHJpbmcoaW50IG5JbmRleCkNCi17DQotCUFTU0VSVChtX3BBcHAgIT0gTlVMTCk7DQotDQotCXJldHVybiBMIiI7DQotfQ0KLQ0KLUNQREZfUmVjdCBDRkZMX0Zvcm1GaWxsZXI6OkdldFBERldpbmRvd1JlY3QoKSBjb25zdA0KLXsNCi0JQVNTRVJUKG1fcFdpZGdldCAhPSBOVUxMKTsNCi0NCi0JQ1BERl9SZWN0IHJlY3RBbm5vdDsNCi0JbV9wV2lkZ2V0LT5HZXRQREZBbm5vdCgpLT5HZXRSZWN0KHJlY3RBbm5vdCk7DQotDQotCUZYX0ZMT0FUIGZXaWR0aCA9IHJlY3RBbm5vdC5yaWdodCAtIHJlY3RBbm5vdC5sZWZ0Ow0KLQlGWF9GTE9BVCBmSGVpZ2h0ID0gcmVjdEFubm90LnRvcCAtIHJlY3RBbm5vdC5ib3R0b207DQotDQotDQotCWlmICgobV9wV2lkZ2V0LT5HZXRSb3RhdGUoKSAvIDkwKSAmIDB4MDEpDQotCQlyZXR1cm4gQ1BERl9SZWN0KDAsMCxmSGVpZ2h0LGZXaWR0aCk7DQotCWVsc2UNCi0JCXJldHVybiBDUERGX1JlY3QoMCwwLGZXaWR0aCxmSGVpZ2h0KTsNCi19DQotDQotQ1BERlNES19QYWdlVmlldyogQ0ZGTF9Gb3JtRmlsbGVyOjpHZXRDdXJQYWdlVmlldygpDQotew0KLQ0KLQlDUERGX1BhZ2UqIHBQYWdlID0gbV9wQW5ub3QtPkdldFBERlBhZ2UoKTsNCi0JQ1BERlNES19Eb2N1bWVudCogcFNES0RvYyA9IG1fcEFwcC0+R2V0Q3VycmVudERvYygpOw0KLQlpZihwU0RLRG9jKQ0KLQl7DQotCQlyZXR1cm4gcFNES0RvYy0+R2V0UGFnZVZpZXcocFBhZ2UpOw0KLQl9DQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi1DUERGX1JlY3QgQ0ZGTF9Gb3JtRmlsbGVyOjpHZXRGb2N1c0JveChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpDQotew0KLQlpZiAoQ1BXTF9XbmQgKiBwV25kID0gR2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpKQ0KLQl7CQkJDQotCQlDUERGX1JlY3QgcmNGb2N1cyA9ICBGRkx0b1duZChwUGFnZVZpZXcsIFBXTHRvRkZMKHBXbmQtPkdldEZvY3VzUmVjdCgpKSk7DQotCQlBU1NFUlQocFBhZ2VWaWV3KTsNCi0JCUNQREZfUmVjdCByY1BhZ2UgPSBwUGFnZVZpZXctPkdldFBERlBhZ2UoKS0+R2V0UGFnZUJCb3goKTsNCi0JCWlmKHJjUGFnZS5Db250YWlucyhyY0ZvY3VzKSkNCi0JCQlyZXR1cm4gcmNGb2N1czsNCi0JCWVsc2UNCi0JCQlyZXR1cm4gQ1BERl9SZWN0KDAsMCwwLDApOw0KLQl9DQotCXJldHVybiBDUERGX1JlY3QoMCwwLDAsMCk7DQotfQ0KLQ0KLUNQREZfUmVjdCBDRkZMX0Zvcm1GaWxsZXI6OkZGTHRvUFdMKGNvbnN0IENQREZfUmVjdCYgcmVjdCkNCi17DQotCUNQREZfTWF0cml4IG10Ow0KLQltdC5TZXRSZXZlcnNlKEdldEN1ck1hdHJpeCgpKTsNCi0JDQotCUNQREZfUmVjdCB0ZW1wID0gcmVjdDsNCi0JbXQuVHJhbnNmb3JtUmVjdCh0ZW1wKTsNCi0NCi0JcmV0dXJuIHRlbXA7DQotfQ0KLQ0KLUNQREZfUmVjdCBDRkZMX0Zvcm1GaWxsZXI6OlBXTHRvRkZMKGNvbnN0IENQREZfUmVjdCYgcmVjdCkNCi17DQotCUNQREZfTWF0cml4IG10ID0gR2V0Q3VyTWF0cml4KCk7DQotCQ0KLQlDUERGX1JlY3QgdGVtcCA9IHJlY3Q7DQotCW10LlRyYW5zZm9ybVJlY3QodGVtcCk7DQotDQotCXJldHVybiB0ZW1wOw0KLX0NCi0NCi1DUERGX1BvaW50IENGRkxfRm9ybUZpbGxlcjo6RkZMdG9QV0woY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpDQotew0KLQlDUERGX01hdHJpeCBtdDsNCi0JbXQuU2V0UmV2ZXJzZShHZXRDdXJNYXRyaXgoKSk7DQotDQotCUNQREZfUG9pbnQgcHQgPSBwb2ludDsNCi0JbXQuVHJhbnNmb3JtKHB0LngscHQueSk7DQotDQotCXJldHVybiBwdDsNCi19DQotDQotQ1BERl9Qb2ludCBDRkZMX0Zvcm1GaWxsZXI6OlBXTHRvRkZMKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkNCi17DQotCUNQREZfTWF0cml4IG10ID0gR2V0Q3VyTWF0cml4KCk7DQotDQotCUNQREZfUG9pbnQgcHQgPSBwb2ludDsNCi0JbXQuVHJhbnNmb3JtKHB0LngscHQueSk7DQotDQotCXJldHVybiBwdDsNCi19DQotDQotQ1BERl9Qb2ludCBDRkZMX0Zvcm1GaWxsZXI6OlduZHRvUFdMKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgY29uc3QgQ1BERl9Qb2ludCYgcHQpDQotew0KLS8vIAlBU1NFUlQocFBhZ2VWaWV3ICE9IE5VTEwpOw0KLS8vIA0KLS8vIAlDUERGX1BvaW50IHBvaW50KDAuMGYsIDAuMGYpOw0KLS8vIAlwUGFnZVZpZXctPldpbmRvd1RvRG9jKHB0LngsIHB0LnksIHBvaW50LngsIHBvaW50LnkpOw0KLS8vIA0KLSAJcmV0dXJuIEZGTHRvUFdMKHB0KTsNCi0vLwlyZXR1cm4gQ1BERl9Qb2ludCgwLCAwKTsNCi19DQotDQotQ1BERl9SZWN0IENGRkxfRm9ybUZpbGxlcjo6RkZMdG9XbmQoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBjb25zdCBDUERGX1JlY3QgJiByZWN0KQ0KLXsNCi0vLyAJRlhfUkVDVCByY1JldCgwLDAsMCwwKTsNCi0vLyANCi0vLyAJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsJDQotLy8gCXBQYWdlVmlldy0+RG9jVG9XaW5kb3cocmVjdCwgcmNSZXQpOw0KLS8vIAkNCi0gCXJldHVybiByZWN0Ow0KLQ0KLX0NCi0NCi12b2lkIENGRkxfRm9ybUZpbGxlcjo6RkZMX0ZyZWVEYXRhKHZvaWQqIHBEYXRhKQ0KLXsNCi0JQVNTRVJUKHBEYXRhICE9IE5VTEwpOw0KLQ0KLQlkZWxldGUgKENGRkxfUHJpdmF0ZURhdGEqKXBEYXRhOw0KLX0NCi0NCi1GWF9CT09MIENGRkxfRm9ybUZpbGxlcjo6Q29tbWl0RGF0YShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX1VJTlQgbkZsYWcpDQotew0KLQlpZiAoSXNEYXRhQ2hhbmdlZChwUGFnZVZpZXcpKQ0KLQl7DQotCQkvL0NGRkxfSUZvcm1GaWxsZXIqIHBJRm9ybUZpbGxlciA9IENGRkxfTW9kdWxlOjpHZXRGb3JtRmlsbGVyKG1fcEFwcCk7DQotCQlDRkZMX0lGb3JtRmlsbGVyKiBwSUZvcm1GaWxsZXIgPSBtX3BBcHAtPkdldElGb3JtRmlsbGVyKCk7Ly9OVUxMOw0KLQkJQVNTRVJUKHBJRm9ybUZpbGxlciAhPSBOVUxMKTsNCi0NCi0JCUZYX0JPT0wgYlJDID0gVFJVRTsNCi0JCUZYX0JPT0wgYkV4aXQgPSBGQUxTRTsNCi0NCi0JCXBJRm9ybUZpbGxlci0+T25LZXlTdHJva2VDb21taXQobV9wV2lkZ2V0LCBwUGFnZVZpZXcsIGJSQywgYkV4aXQsIG5GbGFnKTsNCi0JCWlmIChiRXhpdCkgcmV0dXJuIFRSVUU7DQotCQlpZiAoIWJSQykNCi0JCXsNCi0JCQl0aGlzLT5SZXNldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKTsNCi0JCQlyZXR1cm4gVFJVRTsNCi0JCX0NCi0NCi0JCXBJRm9ybUZpbGxlci0+T25WYWxpZGF0ZShtX3BXaWRnZXQsIHBQYWdlVmlldywgYlJDLCBiRXhpdCwgbkZsYWcpOw0KLQkJaWYgKGJFeGl0KSByZXR1cm4gVFJVRTsNCi0JCWlmICghYlJDKQ0KLQkJew0KLQkJCXRoaXMtPlJlc2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpOw0KLQkJCXJldHVybiBUUlVFOw0KLQkJfQ0KLQ0KLQkJU2F2ZURhdGEocFBhZ2VWaWV3KTsNCi0NCi0JCXBJRm9ybUZpbGxlci0+T25DYWxjdWxhdGUobV9wV2lkZ2V0LCBwUGFnZVZpZXcsIGJFeGl0LG5GbGFnKTsNCi0JCWlmIChiRXhpdCkgcmV0dXJuIFRSVUU7DQotDQotCQlwSUZvcm1GaWxsZXItPk9uRm9ybWF0KG1fcFdpZGdldCwgcFBhZ2VWaWV3LCBiRXhpdCxuRmxhZyk7DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wJQ0ZGTF9Gb3JtRmlsbGVyOjpJc0RhdGFDaGFuZ2VkKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykNCi17DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotdm9pZCBDRkZMX0Zvcm1GaWxsZXI6OlNhdmVEYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykNCi17DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9Gb3JtRmlsbGVyOjpHZXRLZXlTdHJva2VEYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRkZMX0tleVN0cm9rZURhdGEmIGRhdGEpDQotew0KLX0NCi0NCi12b2lkIENGRkxfRm9ybUZpbGxlcjo6U2V0Q2hhbmdlTWFyaygpDQotew0KLQltX3BBcHAtPkZGSV9PbkNoYW5nZSgpOw0KLX0NCi0NCi12b2lkIENGRkxfRm9ybUZpbGxlcjo6R2V0QWN0aW9uRGF0YShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwNCi0JCQkJCQkJUERGU0RLX0ZpZWxkQWN0aW9uJiBmYSkNCi17DQotCWZhLnNWYWx1ZSA9IG1fcFdpZGdldC0+R2V0VmFsdWUoKTsNCi19DQotDQotdm9pZCBDRkZMX0Zvcm1GaWxsZXI6OlNldEFjdGlvbkRhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIA0KLQkJCQkJCQkJCWNvbnN0IFBERlNES19GaWVsZEFjdGlvbiYgZmEpDQotew0KLX0NCi0NCi1GWF9CT09MCUNGRkxfRm9ybUZpbGxlcjo6SXNBY3Rpb25EYXRhQ2hhbmdlZChDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIGNvbnN0IFBERlNES19GaWVsZEFjdGlvbiYgZmFPbGQsIA0KLQkJCQkJCQkJCWNvbnN0IFBERlNES19GaWVsZEFjdGlvbiYgZmFOZXcpDQotew0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9Gb3JtRmlsbGVyOjpTYXZlU3RhdGUoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQ0KLXsNCi19DQotDQotdm9pZCBDRkZMX0Zvcm1GaWxsZXI6OlJlc3RvcmVTdGF0ZShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpDQotew0KLX0NCi0NCi1DUFdMX1duZCogIENGRkxfRm9ybUZpbGxlcjo6UmVzZXRQREZXaW5kb3coQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBGWF9CT09MIGJSZXN0b3JlVmFsdWUpDQotew0KLQlyZXR1cm4gR2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpOyANCi19DQotDQotdm9pZCBDRkZMX0Zvcm1GaWxsZXI6OlRpbWVyUHJvYygpDQotew0KLQ0KLX0NCi0NCi1JRlhfU3lzdGVtSGFuZGxlciogQ0ZGTF9Gb3JtRmlsbGVyOjpHZXRTeXN0ZW1IYW5kbGVyKCkgY29uc3QNCi17DQotCXJldHVybiBtX3BBcHAtPkdldFN5c0hhbmRsZXIoKTsNCi0vLwlyZXR1cm4gTlVMTDsNCi19DQotDQotdm9pZCBDRkZMX0Zvcm1GaWxsZXI6Ok9uS2V5U3Ryb2tlKEZYX0JPT0wgYktleURvd24pDQotew0KLX0NCi0NCi12b2lkIENGRkxfRm9ybUZpbGxlcjo6RXNjYXBlRmlsbGVyKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfQk9PTCBiRGVzdHJveVBERldpbmRvdykNCi17DQotCW1fYlZhbGlkID0gRkFMU0U7DQotCQ0KLQlGWF9SRUNUIHJjUmVjdCA9IHRoaXMtPkdldFZpZXdCQm94KHBQYWdlVmlldywgbV9wV2lkZ2V0KTsNCi0JdGhpcy0+SW52YWxpZGF0ZVJlY3QocmNSZWN0LmxlZnQsIHJjUmVjdC50b3AsIHJjUmVjdC5yaWdodCwgcmNSZWN0LmJvdHRvbSk7DQotDQotCWlmKGJEZXN0cm95UERGV2luZG93KQ0KLSAJCURlc3Ryb3lQREZXaW5kb3cocFBhZ2VWaWV3KTsNCi19DQotDQotRlhfQk9PTCBDRkZMX0Zvcm1GaWxsZXI6OkNhbkNvcHkoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQ0KLXsNCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MIENGRkxfRm9ybUZpbGxlcjo6Q2FuQ3V0KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkNCi17DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTAlDRkZMX0Zvcm1GaWxsZXI6OkNhblBhc3RlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkNCi17DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotdm9pZCBDRkZMX0Zvcm1GaWxsZXI6OkRvQ29weShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpDQotew0KLX0NCi0NCi12b2lkIENGRkxfRm9ybUZpbGxlcjo6RG9DdXQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQ0KLXsNCi19DQotDQotdm9pZCBDRkZMX0Zvcm1GaWxsZXI6OkRvUGFzdGUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQ0KLXsNCi19DQotDQotdm9pZCBDRkZMX0Zvcm1GaWxsZXI6OkludmFsaWRhdGVSZWN0KGRvdWJsZSBsZWZ0LCBkb3VibGUgdG9wLCBkb3VibGUgcmlnaHQsIGRvdWJsZSBib3R0b20pDQotew0KLQlDUERGX1BhZ2UgKiBwUGFnZSA9IG1fcFdpZGdldC0+R2V0UERGUGFnZSgpOw0KLQltX3BBcHAtPkZGSV9JbnZhbGlkYXRlKHBQYWdlLCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENGRkxfQnV0dG9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DRkZMX0J1dHRvbjo6Q0ZGTF9CdXR0b24oQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCwgQ1BERlNES19Bbm5vdCogcFdpZGdldCkgOg0KLQlDRkZMX0Zvcm1GaWxsZXIocEFwcCwgcFdpZGdldCksDQotCW1fYk1vdXNlSW4oRkFMU0UpLA0KLQltX2JNb3VzZURvd24oRkFMU0UpDQotew0KLX0NCi0NCi1DRkZMX0J1dHRvbjo6fkNGRkxfQnV0dG9uKCkNCi17DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9CdXR0b246Ok9uTW91c2VFbnRlcihDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCkNCi17DQotCW1fYk1vdXNlSW4gPSBUUlVFOw0KLQlGWF9SRUNUIHJlY3QgPSB0aGlzLT5HZXRWaWV3QkJveChwUGFnZVZpZXcscEFubm90KTsNCi0JdGhpcy0+SW52YWxpZGF0ZVJlY3QocmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCwgcmVjdC5ib3R0b20pOw0KLS8vCTo6SW52YWxpZGF0ZVJlY3QocFBhZ2VWaWV3LT5HZXRQYWdlVmlld1duZCgpLCAmdGhpcy0+R2V0Vmlld0JCb3gocFBhZ2VWaWV3LCBwQW5ub3QpLCBUUlVFKTsNCi19DQotDQotdm9pZCBDRkZMX0J1dHRvbjo6T25Nb3VzZUV4aXQoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QpDQotew0KLQltX2JNb3VzZUluID0gRkFMU0U7DQotDQotCUZYX1JFQ1QgcmVjdCA9IHRoaXMtPkdldFZpZXdCQm94KHBQYWdlVmlldyxwQW5ub3QpOw0KLQl0aGlzLT5JbnZhbGlkYXRlUmVjdChyZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSk7DQotLy8JOjpJbnZhbGlkYXRlUmVjdChwUGFnZVZpZXctPkdldFBhZ2VWaWV3V25kKCksICZ0aGlzLT5HZXRWaWV3QkJveChwUGFnZVZpZXcsIHBBbm5vdCksIFRSVUUpOw0KLQlFbmRUaW1lcigpOw0KLQlBU1NFUlQobV9wV2lkZ2V0ICE9IE5VTEwpOw0KLS8vCW1fcFdpZGdldC0+SGlkZUhpbnQoKTsNCi19DQotDQotRlhfQk9PTCBDRkZMX0J1dHRvbjo6T25MQnV0dG9uRG93bihDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQ0KLXsNCi0JQ1BERl9SZWN0IHJjQW5ub3QgPSBwQW5ub3QtPkdldFJlY3QoKTsNCi0JaWYoIXJjQW5ub3QuQ29udGFpbnMocG9pbnQueCwgcG9pbnQueSkpDQotCQlyZXR1cm4gRkFMU0U7DQotDQotCW1fYk1vdXNlRG93biA9IFRSVUU7DQotCW1fYlZhbGlkID0gVFJVRTsNCi0JRlhfUkVDVCByZWN0ID0gdGhpcy0+R2V0Vmlld0JCb3gocFBhZ2VWaWV3LCBwQW5ub3QpOw0KLQl0aGlzLT5JbnZhbGlkYXRlUmVjdChyZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSk7DQotLy8JOjpJbnZhbGlkYXRlUmVjdChwUGFnZVZpZXctPkdldFBhZ2VWaWV3V25kKCksICZ0aGlzLT5HZXRWaWV3QkJveChwUGFnZVZpZXcsIHBBbm5vdCksIFRSVUUpOw0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTAlDRkZMX0J1dHRvbjo6T25MQnV0dG9uVXAoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkNCi17DQotCUNQREZfUmVjdCByY0Fubm90ID0gcEFubm90LT5HZXRSZWN0KCk7DQotCWlmKCFyY0Fubm90LkNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQ0KLQltX2JNb3VzZURvd24gPSBGQUxTRTsNCi0JbV9wV2lkZ2V0LT5HZXRQREZQYWdlKCk7DQotCQ0KLQ0KLQlGWF9SRUNUIHJlY3QgPSB0aGlzLT5HZXRWaWV3QkJveChwUGFnZVZpZXcsIHBBbm5vdCk7DQotCXRoaXMtPkludmFsaWRhdGVSZWN0KHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQsIHJlY3QuYm90dG9tKTsNCi0vLyAJOjpJbnZhbGlkYXRlUmVjdChwUGFnZVZpZXctPkdldFBhZ2VWaWV3V25kKCksICZ0aGlzLT5HZXRWaWV3QkJveChwUGFnZVZpZXcsIHBBbm5vdCksIFRSVUUpOw0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTAlDRkZMX0J1dHRvbjo6T25Nb3VzZU1vdmUoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkNCi17DQotCUFTU0VSVChtX3BBcHAgIT0gTlVMTCk7DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi12b2lkIENGRkxfQnV0dG9uOjpPbkRyYXcoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCAvKkhEQyBoREMsKi8gQ1BERlNES19Bbm5vdCogcEFubm90LCANCi0JCQkJCQkJQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwNCi0JCQkJCQkJLypjb25zdCBDUmVjdCYgcmNXaW5kb3csKi8gRlhfRFdPUkQgZHdGbGFncykNCi17DQotCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotDQotCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gKENQREZTREtfV2lkZ2V0KilwQW5ub3Q7DQotDQotCUNQREZfRm9ybUNvbnRyb2wqIHBDdHJsID0gcFdpZGdldC0+R2V0Rm9ybUNvbnRyb2woKTsNCi0JQVNTRVJUKHBDdHJsICE9IE5VTEwpOw0KLQ0KLQlDUERGX0Zvcm1Db250cm9sOjpIaWdobGlnaHRpbmdNb2RlIGVITSA9IHBDdHJsLT5HZXRIaWdobGlnaHRpbmdNb2RlKCk7DQotDQotCWlmIChlSE0gPT0gQ1BERl9Gb3JtQ29udHJvbDo6UHVzaCkNCi0Jew0KLQkJaWYgKG1fYk1vdXNlRG93bikNCi0JCXsNCi0JCQlpZiAocFdpZGdldC0+SXNXaWRnZXRBcHBlYXJhbmNlVmFsaWQoQ1BERl9Bbm5vdDo6RG93bikpDQotCQkJCXBXaWRnZXQtPkRyYXdBcHBlYXJhbmNlKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgQ1BERl9Bbm5vdDo6RG93biwgTlVMTCk7DQotCQkJZWxzZQ0KLQkJCQlwV2lkZ2V0LT5EcmF3QXBwZWFyYW5jZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIENQREZfQW5ub3Q6Ok5vcm1hbCwgTlVMTCk7DQotCQl9DQotCQllbHNlIGlmIChtX2JNb3VzZUluKQ0KLQkJew0KLQkJCWlmIChwV2lkZ2V0LT5Jc1dpZGdldEFwcGVhcmFuY2VWYWxpZChDUERGX0Fubm90OjpSb2xsb3ZlcikpDQotCQkJCXBXaWRnZXQtPkRyYXdBcHBlYXJhbmNlKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgQ1BERl9Bbm5vdDo6Um9sbG92ZXIsIE5VTEwpOw0KLQkJCWVsc2UNCi0JCQkJcFdpZGdldC0+RHJhd0FwcGVhcmFuY2UocERldmljZSwgcFVzZXIyRGV2aWNlLCBDUERGX0Fubm90OjpOb3JtYWwsIE5VTEwpOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCXBXaWRnZXQtPkRyYXdBcHBlYXJhbmNlKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgQ1BERl9Bbm5vdDo6Tm9ybWFsLCBOVUxMKTsNCi0JCX0NCi0JfQ0KLQllbHNlDQotCQlwV2lkZ2V0LT5EcmF3QXBwZWFyYW5jZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIENQREZfQW5ub3Q6Ok5vcm1hbCwgTlVMTCk7DQotfQ0KLQ0KLQ0KLXZvaWQgQ0ZGTF9CdXR0b246Ok9uRHJhd0RlYWN0aXZlKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgLypIREMgaERDLCovIENQREZTREtfQW5ub3QqIHBBbm5vdCwgDQotCQkJCQkJCQkgQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwNCi0JCQkJCQkJCSAvKmNvbnN0IENSZWN0JiByY1dpbmRvdywgKi9GWF9EV09SRCBkd0ZsYWdzKQ0KLXsNCi0JT25EcmF3KHBQYWdlVmlldywgcEFubm90LCBwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIGR3RmxhZ3MpOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0Zvcm1GaWxsZXIuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX05vdGlmeS5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfQ0JBX0ZvbnRtYXAuaCIKKworI2RlZmluZSBHZXRSZWQocmdiKQkJCSgoRlhfQllURSkocmdiKSkKKyNkZWZpbmUgR2V0R3JlZW4ocmdiKQkJKChGWF9CWVRFKSgoKEZYX1dPUkQpKHJnYikpID4+IDgpKQorI2RlZmluZSBHZXRCbHVlKHJnYikJCSgoRlhfQllURSkoKHJnYik+PjE2KSkKKworI2RlZmluZSBGRkxfSElOVF9FTEFQU0UJCTgwMAorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENGRkxfRm9ybUZpbGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0NGRkxfRm9ybUZpbGxlcjo6Q0ZGTF9Gb3JtRmlsbGVyKENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAsIENQREZTREtfQW5ub3QqIHBBbm5vdCkKKwk6bV9wQXBwKHBBcHApLAorCW1fcEFubm90KHBBbm5vdCksCisJbV9iVmFsaWQoRkFMU0UpLAorCW1fcHRPbGRQb3MoMCwwKQoreyAKKwltX3BXaWRnZXQgPSAoQ1BERlNES19XaWRnZXQqKSBwQW5ub3Q7Cit9CisKK0NGRkxfRm9ybUZpbGxlcjo6fkNGRkxfRm9ybUZpbGxlcigpCit7CisJRlhfUE9TSVRJT04gcG9zID0gbV9NYXBzLkdldFN0YXJ0UG9zaXRpb24oKTsKKwl3aGlsZSAocG9zKQorCXsKKwkJQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldyA9IE5VTEw7CisJCUNQV0xfV25kKiBwV25kID0gTlVMTDsKKwkJbV9NYXBzLkdldE5leHRBc3NvYyhwb3MsIHBQYWdlVmlldywgcFduZCk7CisKKwkJaWYgKHBXbmQpCisJCXsKKwkJCUNGRkxfUHJpdmF0ZURhdGEqIHBEYXRhID0gKENGRkxfUHJpdmF0ZURhdGEqKXBXbmQtPkdldEF0dGFjaGVkRGF0YSgpOworCQkJcFduZC0+RGVzdHJveSgpOworCQkJZGVsZXRlIHBXbmQ7CisJCQlkZWxldGUgcERhdGE7CisJCX0KKwl9CisJbV9NYXBzLlJlbW92ZUFsbCgpOworCit9CisKK3ZvaWQgQ0ZGTF9Gb3JtRmlsbGVyOjpTZXRXaW5kb3dSZWN0KENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgY29uc3QgQ1BERl9SZWN0JiByY1dpbmRvdykKK3sKKwlpZiAoQ1BXTF9XbmQqIHBXbmQgPSB0aGlzLT5HZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpCisJeworCQlwV25kLT5Nb3ZlKENQREZfUmVjdChyY1dpbmRvdyksIFRSVUUsIEZBTFNFKTsKKwl9Cit9CisKK0NQREZfUmVjdCBDRkZMX0Zvcm1GaWxsZXI6OkdldFdpbmRvd1JlY3QoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQoreworCWlmIChDUFdMX1duZCogcFduZCA9IHRoaXMtPkdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkKKwl7CisJCXJldHVybiBwV25kLT5HZXRXaW5kb3dSZWN0KCk7CisJfQorCisJcmV0dXJuIENQREZfUmVjdCgwLDAsMCwwKTsKK30KKworRlhfUkVDVCBDRkZMX0Zvcm1GaWxsZXI6OkdldFZpZXdCQm94KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90KQoreworCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKworCUNQREZfUmVjdCByY0Fubm90ID0gbV9wV2lkZ2V0LT5HZXRSZWN0KCk7CisKKwlpZiAoQ1BXTF9XbmQqIHBXbmQgPSB0aGlzLT5HZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpCisJeworCQlDUERGX1JlY3QgcmNXaW5kb3cgPSBwV25kLT5HZXRXaW5kb3dSZWN0KCk7CisJCXJjQW5ub3QgPSBQV0x0b0ZGTChyY1dpbmRvdyk7CisJfQorCisJQ1BERl9SZWN0IHJjV2luID0gcmNBbm5vdDsKKy8vCXBQYWdlVmlldy0+RG9jVG9XaW5kb3cocmNBbm5vdCwgcmNXaW4pOworCisJQ1BERl9SZWN0IHJjRm9jdXMgPSB0aGlzLT5HZXRGb2N1c0JveChwUGFnZVZpZXcpOworCWlmICghcmNGb2N1cy5Jc0VtcHR5KCkpCisJCXJjV2luLlVuaW9uKHJjRm9jdXMpOworCisJQ1BERl9SZWN0IHJlY3QgPSBDUFdMX1V0aWxzOjpJbmZsYXRlUmVjdChyY1dpbiwxKTsKKworCXJldHVybiByZWN0LkdldE91dHRlclJlY3QoKTsKK30KKwordm9pZCBDRkZMX0Zvcm1GaWxsZXI6Ok9uRHJhdyhDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIC8qSERDIGhEQywqLyBDUERGU0RLX0Fubm90KiBwQW5ub3QsIAorCQkJCQkJQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwKKwkJCQkJCS8qY29uc3QgQ1JlY3QmIHJjV2luZG93LCovIEZYX0RXT1JEIGR3RmxhZ3MpCit7CisJQVNTRVJUKHBBbm5vdC0+R2V0UERGQW5ub3QoKS0+R2V0U3ViVHlwZSgpID09ICJXaWRnZXQiKTsKKworCWlmIChDUFdMX1duZCAqIHBXbmQgPSBHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpCisJeworCQlDUERGX01hdHJpeCBtdCA9IHRoaXMtPkdldEN1ck1hdHJpeCgpOworCQltdC5Db25jYXQoKnBVc2VyMkRldmljZSk7CisJCXBXbmQtPkRyYXdBcHBlYXJhbmNlKHBEZXZpY2UsJm10KTsKKwl9CisJZWxzZQorCXsKKwkJQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSAoQ1BERlNES19XaWRnZXQqKXBBbm5vdDsKKwkJaWYgKENGRkxfSUZvcm1GaWxsZXI6OklzVmlzaWJsZShwV2lkZ2V0KSkKKwkJCXBXaWRnZXQtPkRyYXdBcHBlYXJhbmNlKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgQ1BERl9Bbm5vdDo6Tm9ybWFsLCBOVUxMKTsKKwl9Cit9CisKK3ZvaWQgQ0ZGTF9Gb3JtRmlsbGVyOjpPbkRyYXdEZWFjdGl2ZShDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIC8qSERDIGhEQywqLyBDUERGU0RLX0Fubm90KiBwQW5ub3QsIAorCQkJCQkJQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwKKwkJCQkJCS8qY29uc3QgQ1JlY3QmIHJjV2luZG93LCovIEZYX0RXT1JEIGR3RmxhZ3MpCit7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKwkKKwlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IChDUERGU0RLX1dpZGdldCopcEFubm90OworCQorCXBXaWRnZXQtPkRyYXdBcHBlYXJhbmNlKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgQ1BERl9Bbm5vdDo6Tm9ybWFsLCBOVUxMKTsKK30KKworCit2b2lkIENGRkxfRm9ybUZpbGxlcjo6T25DcmVhdGUoQ1BERlNES19Bbm5vdCogcEFubm90KQoreworfQorCit2b2lkIENGRkxfRm9ybUZpbGxlcjo6T25Mb2FkKENQREZTREtfQW5ub3QqIHBBbm5vdCkKK3sKK30KKwordm9pZCBDRkZMX0Zvcm1GaWxsZXI6Ok9uRGVsZXRlKENQREZTREtfQW5ub3QqIHBBbm5vdCkKK3sKK30KKwordm9pZCBDRkZMX0Zvcm1GaWxsZXI6Ok9uTW91c2VFbnRlcihDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCkKK3sKK30KKwordm9pZCBDRkZMX0Zvcm1GaWxsZXI6Ok9uTW91c2VFeGl0KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90KQoreworCUVuZFRpbWVyKCk7CisJQVNTRVJUKG1fcFdpZGdldCAhPSBOVUxMKTsKK30KKworRlhfQk9PTCBDRkZMX0Zvcm1GaWxsZXI6Ok9uTEJ1dHRvbkRvd24oQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkKK3sKKwlpZiAoQ1BXTF9XbmQgKiBwV25kID0gR2V0UERGV2luZG93KHBQYWdlVmlldywgVFJVRSkpCisJewkJCisJCW1fYlZhbGlkID0gVFJVRTsKKwkJRlhfUkVDVCByZWN0ID0gdGhpcy0+R2V0Vmlld0JCb3gocFBhZ2VWaWV3LHBBbm5vdCk7CisJCXRoaXMtPkludmFsaWRhdGVSZWN0KHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQsIHJlY3QuYm90dG9tKTsKKworIAkJaWYoIXJlY3QuQ29udGFpbnMoKGludClwb2ludC54LCAoaW50KXBvaW50LnkpKQorICAJCQlyZXR1cm4gRkFMU0U7CisKKwkJcmV0dXJuIHBXbmQtPk9uTEJ1dHRvbkRvd24oV25kdG9QV0wocFBhZ2VWaWV3LCBwb2ludCksbkZsYWdzKTsKKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wJQ0ZGTF9Gb3JtRmlsbGVyOjpPbkxCdXR0b25VcChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQoreworCWlmIChDUFdMX1duZCAqIHBXbmQgPSBHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpCisJewkKKwkJRlhfUkVDVCByY0ZGTCA9ICB0aGlzLT5HZXRWaWV3QkJveChwUGFnZVZpZXcsIHBBbm5vdCk7CisJCXRoaXMtPkludmFsaWRhdGVSZWN0KHJjRkZMLmxlZnQsIHJjRkZMLnRvcCwgcmNGRkwucmlnaHQsIHJjRkZMLmJvdHRvbSk7CisJCXBXbmQtPk9uTEJ1dHRvblVwKFduZHRvUFdMKHBQYWdlVmlldywgcG9pbnQpLG5GbGFncyk7CisJCXJldHVybiBUUlVFOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTAlDRkZMX0Zvcm1GaWxsZXI6Ok9uTEJ1dHRvbkRibENsayhDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQoreworCWlmIChDUFdMX1duZCAqIHBXbmQgPSBHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpCisJewkJCQkKKwkJcFduZC0+T25MQnV0dG9uRGJsQ2xrKFduZHRvUFdMKHBQYWdlVmlldywgcG9pbnQpLG5GbGFncyk7CisJCXJldHVybiBUUlVFOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBDRkZMX0Zvcm1GaWxsZXI6Ok9uTW91c2VNb3ZlKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpCit7CisJaWYgKChtX3B0T2xkUG9zLnggIT0gcG9pbnQueCkgfHwgKG1fcHRPbGRQb3MueSAhPSBwb2ludC55KSkKKwl7CisJCW1fcHRPbGRQb3MgPSBwb2ludDsKKwl9CisKKwlpZiAoQ1BXTF9XbmQgKiBwV25kID0gR2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpKQorCXsJCQkJCisJCXBXbmQtPk9uTW91c2VNb3ZlKFduZHRvUFdMKHBQYWdlVmlldywgcG9pbnQpLG5GbGFncyk7CisJCXJldHVybiBUUlVFOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBDRkZMX0Zvcm1GaWxsZXI6Ok9uTW91c2VXaGVlbChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIHNob3J0IHpEZWx0YSwgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpCit7CisJaWYgKCFJc1ZhbGlkKCkpIHJldHVybiBGQUxTRTsKKworCWlmIChDUFdMX1duZCAqIHBXbmQgPSBHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBUUlVFKSkKKwl7CQkJCQorCQlyZXR1cm4gcFduZC0+T25Nb3VzZVdoZWVsKHpEZWx0YSwgV25kdG9QV0wocFBhZ2VWaWV3LCBwb2ludCksbkZsYWdzKTsKKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wgQ0ZGTF9Gb3JtRmlsbGVyOjpPblJCdXR0b25Eb3duKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpCit7CisJaWYgKENQV0xfV25kICogcFduZCA9IEdldFBERldpbmRvdyhwUGFnZVZpZXcsIFRSVUUpKQorCXsJCQkJCisJCXBXbmQtPk9uUkJ1dHRvbkRvd24oV25kdG9QV0wocFBhZ2VWaWV3LCBwb2ludCksbkZsYWdzKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MCUNGRkxfRm9ybUZpbGxlcjo6T25SQnV0dG9uVXAoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkKK3sKKwlpZiAoQ1BXTF9XbmQgKiBwV25kID0gR2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpKQorCXsJCQkJCisJCXBXbmQtPk9uUkJ1dHRvblVwKFduZHRvUFdMKHBQYWdlVmlldywgcG9pbnQpLG5GbGFncyk7CisJCXJldHVybiBUUlVFOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTAlDRkZMX0Zvcm1GaWxsZXI6Ok9uUkJ1dHRvbkRibENsayhDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQoreworCWlmIChDUFdMX1duZCAqIHBXbmQgPSBHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpCisJewkJCQkKKwkJcFduZC0+T25SQnV0dG9uRGJsQ2xrKFduZHRvUFdMKHBQYWdlVmlldywgcG9pbnQpLG5GbGFncyk7CisJCXJldHVybiBUUlVFOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBDRkZMX0Zvcm1GaWxsZXI6Ok9uS2V5RG93bihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbktleUNvZGUsIEZYX1VJTlQgbkZsYWdzKQoreworCWlmIChJc1ZhbGlkKCkpCisJeworCQlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcgPSB0aGlzLT5HZXRDdXJQYWdlVmlldygpOworCQlBU1NFUlQocFBhZ2VWaWV3ICE9IE5VTEwpOworCisJCWlmIChDUFdMX1duZCAqIHBXbmQgPSBHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpCisJCXsJCQkJCisJCQlyZXR1cm4gcFduZC0+T25LZXlEb3duKG5LZXlDb2RlLG5GbGFncyk7CisJCX0KKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wJQ0ZGTF9Gb3JtRmlsbGVyOjpPbkNoYXIoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5DaGFyLCBGWF9VSU5UIG5GbGFncykKK3sKKwlpZiAoSXNWYWxpZCgpKQorCXsKKwkJQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gdGhpcy0+R2V0Q3VyUGFnZVZpZXcoKTsKKwkJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsKKworCQlpZiAoQ1BXTF9XbmQgKiBwV25kID0gR2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpKQorCQl7CQkJCQorCQkJcmV0dXJuIHBXbmQtPk9uQ2hhcihuQ2hhcixuRmxhZ3MpOworCQl9CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCit2b2lkIENGRkxfRm9ybUZpbGxlcjo6T25EZVNlbGVjdGVkKENQREZTREtfQW5ub3QqIHBBbm5vdCkKK3sKKwlBU1NFUlQoRkFMU0UpOworfQorCit2b2lkIENGRkxfRm9ybUZpbGxlcjo6T25TZWxlY3RlZChDUERGU0RLX0Fubm90KiBwQW5ub3QpCit7CisJQVNTRVJUKEZBTFNFKTsKK30KKworRlhfQk9PTAlDRkZMX0Zvcm1GaWxsZXI6Ok9uU2V0Rm9jdXMoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFnKQoreworCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gKENQREZTREtfV2lkZ2V0KilwQW5ub3Q7CisKKwlDUERGX1BhZ2UgKiBwUGFnZSA9IHBXaWRnZXQtPkdldFBERlBhZ2UoKTsKKyAJQ1BERlNES19Eb2N1bWVudCAqIHBEb2MgPSBtX3BBcHAtPkdldEN1cnJlbnREb2MoKTsKKwlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcgPSBwRG9jLT5HZXRQYWdlVmlldyhwUGFnZSk7CisgCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7CisKKyAJCisKKwlDUFdMX1duZCAqIHBXbmQgPSBOVUxMOworCWlmICggKHBXbmQgPSBHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBUUlVFKSkpCisJewkJCQkKKwkJcFduZC0+U2V0Rm9jdXMoKTsKKwl9CisKKwltX2JWYWxpZCA9IFRSVUU7CisJCisJCisJCisKKwltX2JWYWxpZCA9IFRSVUU7CisJRlhfUkVDVCByY1JlY3QgPSB0aGlzLT5HZXRWaWV3QkJveChwUGFnZVZpZXcscEFubm90KTsKKwl0aGlzLT5JbnZhbGlkYXRlUmVjdChyY1JlY3QubGVmdCwgcmNSZWN0LnRvcCwgcmNSZWN0LnJpZ2h0LCByY1JlY3QuYm90dG9tKTsKKwkKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTAlDRkZMX0Zvcm1GaWxsZXI6Ok9uS2lsbEZvY3VzKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZykKK3sKKwlpZiAoSXNWYWxpZCgpKQorCXsKKwkJQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gdGhpcy0+R2V0Q3VyUGFnZVZpZXcoKTsKKwkJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsKKworCQlDb21taXREYXRhKHBQYWdlVmlldywgbkZsYWcpOworCisJCWlmIChDUFdMX1duZCogcFduZCA9IEdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkKKwkJewkJCQkKKwkJCXBXbmQtPktpbGxGb2N1cygpOworCQl9CisJCQorCQlzd2l0Y2ggKG1fcFdpZGdldC0+R2V0RmllbGRUeXBlKCkpCisJCXsKKwkJY2FzZSBGSUVMRFRZUEVfUFVTSEJVVFRPTjoKKwkJY2FzZSBGSUVMRFRZUEVfQ0hFQ0tCT1g6CisJCWNhc2UgRklFTERUWVBFX1JBRElPQlVUVE9OOgorCQkJRXNjYXBlRmlsbGVyKHBQYWdlVmlldywgVFJVRSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUVzY2FwZUZpbGxlcihwUGFnZVZpZXcsIEZBTFNFKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wJQ0ZGTF9Gb3JtRmlsbGVyOjpJc1ZhbGlkKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9iVmFsaWQ7Cit9CisKK1BXTF9DUkVBVEVQQVJBTQlDRkZMX0Zvcm1GaWxsZXI6OkdldENyZWF0ZVBhcmFtKCkKK3sKKwlBU1NFUlQobV9wQXBwICE9IE5VTEwpOworCisJUFdMX0NSRUFURVBBUkFNIGNwOworCisJY3AucFBhcmVudFduZCA9IE5VTEw7CQorCWNwLnBQcm92aWRlciA9IHRoaXM7CisJY3AucmNSZWN0V25kID0gR2V0UERGV2luZG93UmVjdCgpOworCQorCUZYX0RXT1JEIGR3Q3JlYXRlRmxhZ3MgPSBQV1NfQk9SREVSIHwgUFdTX0JBQ0tHUk9VTkQgfCBQV1NfVklTSUJMRTsKKworCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7CisKKworCUZYX0RXT1JEIGR3RmllbGRGbGFnID0gbV9wV2lkZ2V0LT5HZXRGaWVsZEZsYWdzKCk7CisKKwlpZiAoZHdGaWVsZEZsYWcgJiBGSUVMREZMQUdfUkVBRE9OTFkpCisJewkJCisJCWR3Q3JlYXRlRmxhZ3MgfD0gUFdTX1JFQURPTkxZOworCX0KKworCUZYX0NPTE9SUkVGIGNvbG9yOworCWlmIChtX3BXaWRnZXQtPkdldEZpbGxDb2xvcihjb2xvcikpCisJeworCQljcC5zQmFja2dyb3VuZENvbG9yID0gQ1BXTF9Db2xvcihHZXRSZWQoY29sb3IpLCBHZXRHcmVlbihjb2xvciksIEdldEJsdWUoY29sb3IpKTsKKwl9CisKKwlpZiAobV9wV2lkZ2V0LT5HZXRCb3JkZXJDb2xvcihjb2xvcikpCisJeworCQljcC5zQm9yZGVyQ29sb3IgPSBDUFdMX0NvbG9yKEdldFJlZChjb2xvciksIEdldEdyZWVuKGNvbG9yKSwgR2V0Qmx1ZShjb2xvcikpOworCX0KKworCWNwLnNUZXh0Q29sb3IgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLDApOworCisJaWYgKG1fcFdpZGdldC0+R2V0VGV4dENvbG9yKGNvbG9yKSkKKwl7CisJCWNwLnNUZXh0Q29sb3IgPSBDUFdMX0NvbG9yKEdldFJlZChjb2xvciksIEdldEdyZWVuKGNvbG9yKSwgR2V0Qmx1ZShjb2xvcikpOworCX0KKworCWNwLmZGb250U2l6ZSA9IG1fcFdpZGdldC0+R2V0Rm9udFNpemUoKTsKKwljcC5kd0JvcmRlcldpZHRoID0gbV9wV2lkZ2V0LT5HZXRCb3JkZXJXaWR0aCgpOworCQorCWludCBuQm9yZGVyU3R5bGUgPSBtX3BXaWRnZXQtPkdldEJvcmRlclN0eWxlKCk7CisKKwlzd2l0Y2ggKG5Cb3JkZXJTdHlsZSkKKwl7CisJY2FzZSBCQlNfU09MSUQ6CisJCWNwLm5Cb3JkZXJTdHlsZSA9IFBCU19TT0xJRDsKKwkJYnJlYWs7CisJY2FzZSBCQlNfREFTSDoKKwkJY3AubkJvcmRlclN0eWxlID0gUEJTX0RBU0g7CisJCWNwLnNEYXNoID0gQ1BXTF9EYXNoKDMsMywwKTsJCQkKKwkJYnJlYWs7CisJY2FzZSBCQlNfQkVWRUxFRDoKKwkJY3AubkJvcmRlclN0eWxlID0gUEJTX0JFVkVMRUQ7CisJCWNwLmR3Qm9yZGVyV2lkdGggKj0gMjsKKwkJYnJlYWs7CisJY2FzZSBCQlNfSU5TRVQ6CisJCWNwLm5Cb3JkZXJTdHlsZSA9IFBCU19JTlNFVDsKKwkJY3AuZHdCb3JkZXJXaWR0aCAqPSAyOworCQlicmVhazsKKwljYXNlIEJCU19VTkRFUkxJTkU6CisJCWNwLm5Cb3JkZXJTdHlsZSA9IFBCU19VTkRFUkxJTkVEOworCQlicmVhazsKKwl9CisKKwlpZiAoY3AuZkZvbnRTaXplIDw9IDApCisJeworCQlkd0NyZWF0ZUZsYWdzIHw9IFBXU19BVVRPRk9OVFNJWkU7CisJfQorCisJY3AuZHdGbGFncyA9IGR3Q3JlYXRlRmxhZ3M7CisJY3AucFN5c3RlbUhhbmRsZXIgPSBtX3BBcHAtPkdldFN5c0hhbmRsZXIoKTsKKwlyZXR1cm4gY3A7Cit9CisKK0NQV0xfV25kKiBDRkZMX0Zvcm1GaWxsZXI6OkdldFBERldpbmRvdyhDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0JPT0wgYk5ldykKK3sKKwlBU1NFUlQocFBhZ2VWaWV3ICE9IE5VTEwpOworCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7CisKKwlDUFdMX1duZCogcFduZCA9IE5VTEw7CisJbV9NYXBzLkxvb2t1cChwUGFnZVZpZXcsIHBXbmQpOworCisJaWYgKGJOZXcpCisJeworCQlpZiAocFduZCkKKwkJeworCQkJQ0ZGTF9Qcml2YXRlRGF0YSogcFByaXZhdGVEYXRhID0gKENGRkxfUHJpdmF0ZURhdGEqKXBXbmQtPkdldEF0dGFjaGVkRGF0YSgpOworCQkJQVNTRVJUKHBQcml2YXRlRGF0YSAhPSBOVUxMKTsKKworCQkJaWYgKHBQcml2YXRlRGF0YS0+bldpZGdldEFnZSAhPSBtX3BXaWRnZXQtPkdldEFwcGVhcmFuY2VBZ2UoKSkKKwkJCXsKKwkJCQlyZXR1cm4gdGhpcy0+UmVzZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBtX3BXaWRnZXQtPkdldFZhbHVlQWdlKCkgPT0gcFByaXZhdGVEYXRhLT5uVmFsdWVBZ2UpOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJUFdMX0NSRUFURVBBUkFNIGNwID0gR2V0Q3JlYXRlUGFyYW0oKTsKKwkJCWNwLmhBdHRhY2hlZFduZCA9IChGWF9IV05EKW1fcFdpZGdldDsKKworCQkJQ0ZGTF9Qcml2YXRlRGF0YSogcFByaXZhdGVEYXRhID0gbmV3IENGRkxfUHJpdmF0ZURhdGE7CisJCQlwUHJpdmF0ZURhdGEtPnBXaWRnZXQgPSBtX3BXaWRnZXQ7CisJCQlwUHJpdmF0ZURhdGEtPnBQYWdlVmlldyA9IHBQYWdlVmlldzsKKwkJCXBQcml2YXRlRGF0YS0+bldpZGdldEFnZSA9IG1fcFdpZGdldC0+R2V0QXBwZWFyYW5jZUFnZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcFByaXZhdGVEYXRhLT5uVmFsdWVBZ2UgPSAwOworCisJCQljcC5wQXR0YWNoZWREYXRhID0gcFByaXZhdGVEYXRhOworCisJCQlwV25kID0gTmV3UERGV2luZG93KGNwLCBwUGFnZVZpZXcpOworCisJCQlpZiAocFduZCkKKwkJCXsKKwkJCQltX01hcHMuU2V0QXQocFBhZ2VWaWV3LCBwV25kKTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBwV25kOworfQorCit2b2lkIENGRkxfRm9ybUZpbGxlcjo6RGVzdHJveVBERldpbmRvdyhDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpCit7CisJQ1BXTF9XbmQqIHBXbmQgPSBOVUxMOworCW1fTWFwcy5Mb29rdXAocFBhZ2VWaWV3LCBwV25kKTsKKworCWlmIChwV25kKQorCXsKKwkJQ0ZGTF9Qcml2YXRlRGF0YSogcERhdGEgPSAoQ0ZGTF9Qcml2YXRlRGF0YSopcFduZC0+R2V0QXR0YWNoZWREYXRhKCk7CisJCXBEYXRhLT5wUGFnZVZpZXcgPSBOVUxMOworCQlwV25kLT5EZXN0cm95KCk7CisJCWRlbGV0ZSBwV25kOworCQlkZWxldGUgcERhdGE7CisJfQorCisJbV9NYXBzLlJlbW92ZUtleShwUGFnZVZpZXcpOworfQorCitDUERGX01hdHJpeAlDRkZMX0Zvcm1GaWxsZXI6OkdldFdpbmRvd01hdHJpeCh2b2lkKiBwQXR0YWNoZWREYXRhKQoreworCWlmIChDRkZMX1ByaXZhdGVEYXRhKiBwUHJpdmF0ZURhdGEgPSAoQ0ZGTF9Qcml2YXRlRGF0YSopcEF0dGFjaGVkRGF0YSkKKwl7CisJCWlmIChwUHJpdmF0ZURhdGEtPnBQYWdlVmlldykKKwkJeworCQkJQ1BERl9NYXRyaXggbXRQYWdlVmlldzsKKwkJCXBQcml2YXRlRGF0YS0+cFBhZ2VWaWV3LT5HZXRDdXJyZW50TWF0cml4KG10UGFnZVZpZXcpOworCQkJQ1BERl9NYXRyaXggbXQgPSBHZXRDdXJNYXRyaXgoKTsKKwkJCW10LkNvbmNhdChtdFBhZ2VWaWV3KTsKKwkJCQorCQkJcmV0dXJuIG10OworCQl9CisJfQorCXJldHVybiBDUERGX01hdHJpeCgxLDAsMCwxLDAsMCk7Cit9CisKK0NQREZfTWF0cml4CUNGRkxfRm9ybUZpbGxlcjo6R2V0Q3VyTWF0cml4KCkKK3sKKwlDUERGX01hdHJpeCBtdDsKKworCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7CisKKwlDUERGX1JlY3QgcmNEQSA7CisJbV9wV2lkZ2V0LT5HZXRQREZBbm5vdCgpLT5HZXRSZWN0KHJjREEpOworCisKKwlzd2l0Y2ggKG1fcFdpZGdldC0+R2V0Um90YXRlKCkpCisJeworCWRlZmF1bHQ6CisJY2FzZSAwOgkJCisJCW10ID0gQ1BERl9NYXRyaXgoMSwwLDAsMSwwLDApOworCQlicmVhazsKKwljYXNlIDkwOgorCQltdCA9IENQREZfTWF0cml4KDAsMSwtMSwwLHJjREEucmlnaHQgLSByY0RBLmxlZnQsMCk7CisJCWJyZWFrOworCWNhc2UgMTgwOgorCQltdCA9IENQREZfTWF0cml4KC0xLDAsMCwtMSxyY0RBLnJpZ2h0IC0gcmNEQS5sZWZ0LHJjREEudG9wIC0gcmNEQS5ib3R0b20pOworCQlicmVhazsKKwljYXNlIDI3MDoKKwkJbXQgPSBDUERGX01hdHJpeCgwLC0xLDEsMCwwLHJjREEudG9wIC0gcmNEQS5ib3R0b20pOworCQlicmVhazsKKwl9CisJbXQuZSArPSByY0RBLmxlZnQ7CisJbXQuZiArPSByY0RBLmJvdHRvbTsKKworCXJldHVybiBtdDsKK30KKworQ0ZYX1dpZGVTdHJpbmcgQ0ZGTF9Gb3JtRmlsbGVyOjpMb2FkUG9wdXBNZW51U3RyaW5nKGludCBuSW5kZXgpCit7CisJQVNTRVJUKG1fcEFwcCAhPSBOVUxMKTsKKworCXJldHVybiBMIiI7Cit9CisKK0NQREZfUmVjdCBDRkZMX0Zvcm1GaWxsZXI6OkdldFBERldpbmRvd1JlY3QoKSBjb25zdAoreworCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7CisKKwlDUERGX1JlY3QgcmVjdEFubm90OworCW1fcFdpZGdldC0+R2V0UERGQW5ub3QoKS0+R2V0UmVjdChyZWN0QW5ub3QpOworCisJRlhfRkxPQVQgZldpZHRoID0gcmVjdEFubm90LnJpZ2h0IC0gcmVjdEFubm90LmxlZnQ7CisJRlhfRkxPQVQgZkhlaWdodCA9IHJlY3RBbm5vdC50b3AgLSByZWN0QW5ub3QuYm90dG9tOworCisKKwlpZiAoKG1fcFdpZGdldC0+R2V0Um90YXRlKCkgLyA5MCkgJiAweDAxKQorCQlyZXR1cm4gQ1BERl9SZWN0KDAsMCxmSGVpZ2h0LGZXaWR0aCk7CisJZWxzZQorCQlyZXR1cm4gQ1BERl9SZWN0KDAsMCxmV2lkdGgsZkhlaWdodCk7Cit9CisKK0NQREZTREtfUGFnZVZpZXcqIENGRkxfRm9ybUZpbGxlcjo6R2V0Q3VyUGFnZVZpZXcoKQoreworCisJQ1BERl9QYWdlKiBwUGFnZSA9IG1fcEFubm90LT5HZXRQREZQYWdlKCk7CisJQ1BERlNES19Eb2N1bWVudCogcFNES0RvYyA9IG1fcEFwcC0+R2V0Q3VycmVudERvYygpOworCWlmKHBTREtEb2MpCisJeworCQlyZXR1cm4gcFNES0RvYy0+R2V0UGFnZVZpZXcocFBhZ2UpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworQ1BERl9SZWN0IENGRkxfRm9ybUZpbGxlcjo6R2V0Rm9jdXNCb3goQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQoreworCWlmIChDUFdMX1duZCAqIHBXbmQgPSBHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpCisJewkJCQorCQlDUERGX1JlY3QgcmNGb2N1cyA9ICBGRkx0b1duZChwUGFnZVZpZXcsIFBXTHRvRkZMKHBXbmQtPkdldEZvY3VzUmVjdCgpKSk7CisJCUFTU0VSVChwUGFnZVZpZXcpOworCQlDUERGX1JlY3QgcmNQYWdlID0gcFBhZ2VWaWV3LT5HZXRQREZQYWdlKCktPkdldFBhZ2VCQm94KCk7CisJCWlmKHJjUGFnZS5Db250YWlucyhyY0ZvY3VzKSkKKwkJCXJldHVybiByY0ZvY3VzOworCQllbHNlCisJCQlyZXR1cm4gQ1BERl9SZWN0KDAsMCwwLDApOworCX0KKwlyZXR1cm4gQ1BERl9SZWN0KDAsMCwwLDApOworfQorCitDUERGX1JlY3QgQ0ZGTF9Gb3JtRmlsbGVyOjpGRkx0b1BXTChjb25zdCBDUERGX1JlY3QmIHJlY3QpCit7CisJQ1BERl9NYXRyaXggbXQ7CisJbXQuU2V0UmV2ZXJzZShHZXRDdXJNYXRyaXgoKSk7CisJCisJQ1BERl9SZWN0IHRlbXAgPSByZWN0OworCW10LlRyYW5zZm9ybVJlY3QodGVtcCk7CisKKwlyZXR1cm4gdGVtcDsKK30KKworQ1BERl9SZWN0IENGRkxfRm9ybUZpbGxlcjo6UFdMdG9GRkwoY29uc3QgQ1BERl9SZWN0JiByZWN0KQoreworCUNQREZfTWF0cml4IG10ID0gR2V0Q3VyTWF0cml4KCk7CisJCisJQ1BERl9SZWN0IHRlbXAgPSByZWN0OworCW10LlRyYW5zZm9ybVJlY3QodGVtcCk7CisKKwlyZXR1cm4gdGVtcDsKK30KKworQ1BERl9Qb2ludCBDRkZMX0Zvcm1GaWxsZXI6OkZGTHRvUFdMKGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQoreworCUNQREZfTWF0cml4IG10OworCW10LlNldFJldmVyc2UoR2V0Q3VyTWF0cml4KCkpOworCisJQ1BERl9Qb2ludCBwdCA9IHBvaW50OworCW10LlRyYW5zZm9ybShwdC54LHB0LnkpOworCisJcmV0dXJuIHB0OworfQorCitDUERGX1BvaW50IENGRkxfRm9ybUZpbGxlcjo6UFdMdG9GRkwoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KQoreworCUNQREZfTWF0cml4IG10ID0gR2V0Q3VyTWF0cml4KCk7CisKKwlDUERGX1BvaW50IHB0ID0gcG9pbnQ7CisJbXQuVHJhbnNmb3JtKHB0LngscHQueSk7CisKKwlyZXR1cm4gcHQ7Cit9CisKK0NQREZfUG9pbnQgQ0ZGTF9Gb3JtRmlsbGVyOjpXbmR0b1BXTChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIGNvbnN0IENQREZfUG9pbnQmIHB0KQoreworLy8gCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7CisvLyAKKy8vIAlDUERGX1BvaW50IHBvaW50KDAuMGYsIDAuMGYpOworLy8gCXBQYWdlVmlldy0+V2luZG93VG9Eb2MocHQueCwgcHQueSwgcG9pbnQueCwgcG9pbnQueSk7CisvLyAKKyAJcmV0dXJuIEZGTHRvUFdMKHB0KTsKKy8vCXJldHVybiBDUERGX1BvaW50KDAsIDApOworfQorCitDUERGX1JlY3QgQ0ZGTF9Gb3JtRmlsbGVyOjpGRkx0b1duZChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIGNvbnN0IENQREZfUmVjdCAmIHJlY3QpCit7CisvLyAJRlhfUkVDVCByY1JldCgwLDAsMCwwKTsKKy8vIAorLy8gCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7CQorLy8gCXBQYWdlVmlldy0+RG9jVG9XaW5kb3cocmVjdCwgcmNSZXQpOworLy8gCQorIAlyZXR1cm4gcmVjdDsKKworfQorCit2b2lkIENGRkxfRm9ybUZpbGxlcjo6RkZMX0ZyZWVEYXRhKHZvaWQqIHBEYXRhKQoreworCUFTU0VSVChwRGF0YSAhPSBOVUxMKTsKKworCWRlbGV0ZSAoQ0ZGTF9Qcml2YXRlRGF0YSopcERhdGE7Cit9CisKK0ZYX0JPT0wgQ0ZGTF9Gb3JtRmlsbGVyOjpDb21taXREYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfVUlOVCBuRmxhZykKK3sKKwlpZiAoSXNEYXRhQ2hhbmdlZChwUGFnZVZpZXcpKQorCXsKKwkJLy9DRkZMX0lGb3JtRmlsbGVyKiBwSUZvcm1GaWxsZXIgPSBDRkZMX01vZHVsZTo6R2V0Rm9ybUZpbGxlcihtX3BBcHApOworCQlDRkZMX0lGb3JtRmlsbGVyKiBwSUZvcm1GaWxsZXIgPSBtX3BBcHAtPkdldElGb3JtRmlsbGVyKCk7Ly9OVUxMOworCQlBU1NFUlQocElGb3JtRmlsbGVyICE9IE5VTEwpOworCisJCUZYX0JPT0wgYlJDID0gVFJVRTsKKwkJRlhfQk9PTCBiRXhpdCA9IEZBTFNFOworCisJCXBJRm9ybUZpbGxlci0+T25LZXlTdHJva2VDb21taXQobV9wV2lkZ2V0LCBwUGFnZVZpZXcsIGJSQywgYkV4aXQsIG5GbGFnKTsKKwkJaWYgKGJFeGl0KSByZXR1cm4gVFJVRTsKKwkJaWYgKCFiUkMpCisJCXsKKwkJCXRoaXMtPlJlc2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpOworCQkJcmV0dXJuIFRSVUU7CisJCX0KKworCQlwSUZvcm1GaWxsZXItPk9uVmFsaWRhdGUobV9wV2lkZ2V0LCBwUGFnZVZpZXcsIGJSQywgYkV4aXQsIG5GbGFnKTsKKwkJaWYgKGJFeGl0KSByZXR1cm4gVFJVRTsKKwkJaWYgKCFiUkMpCisJCXsKKwkJCXRoaXMtPlJlc2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpOworCQkJcmV0dXJuIFRSVUU7CisJCX0KKworCQlTYXZlRGF0YShwUGFnZVZpZXcpOworCisJCXBJRm9ybUZpbGxlci0+T25DYWxjdWxhdGUobV9wV2lkZ2V0LCBwUGFnZVZpZXcsIGJFeGl0LG5GbGFnKTsKKwkJaWYgKGJFeGl0KSByZXR1cm4gVFJVRTsKKworCQlwSUZvcm1GaWxsZXItPk9uRm9ybWF0KG1fcFdpZGdldCwgcFBhZ2VWaWV3LCBiRXhpdCxuRmxhZyk7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wJQ0ZGTF9Gb3JtRmlsbGVyOjpJc0RhdGFDaGFuZ2VkKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykKK3sKKwlyZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgQ0ZGTF9Gb3JtRmlsbGVyOjpTYXZlRGF0YShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpCit7Cit9CisKK3ZvaWQgQ0ZGTF9Gb3JtRmlsbGVyOjpHZXRLZXlTdHJva2VEYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRkZMX0tleVN0cm9rZURhdGEmIGRhdGEpCit7Cit9CisKK3ZvaWQgQ0ZGTF9Gb3JtRmlsbGVyOjpTZXRDaGFuZ2VNYXJrKCkKK3sKKwltX3BBcHAtPkZGSV9PbkNoYW5nZSgpOworfQorCit2b2lkIENGRkxfRm9ybUZpbGxlcjo6R2V0QWN0aW9uRGF0YShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwKKwkJCQkJCQlQREZTREtfRmllbGRBY3Rpb24mIGZhKQoreworCWZhLnNWYWx1ZSA9IG1fcFdpZGdldC0+R2V0VmFsdWUoKTsKK30KKwordm9pZCBDRkZMX0Zvcm1GaWxsZXI6OlNldEFjdGlvbkRhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIAorCQkJCQkJCQkJY29uc3QgUERGU0RLX0ZpZWxkQWN0aW9uJiBmYSkKK3sKK30KKworRlhfQk9PTAlDRkZMX0Zvcm1GaWxsZXI6OklzQWN0aW9uRGF0YUNoYW5nZWQoQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLCBjb25zdCBQREZTREtfRmllbGRBY3Rpb24mIGZhT2xkLCAKKwkJCQkJCQkJCWNvbnN0IFBERlNES19GaWVsZEFjdGlvbiYgZmFOZXcpCit7CisJcmV0dXJuIEZBTFNFOworfQorCit2b2lkIENGRkxfRm9ybUZpbGxlcjo6U2F2ZVN0YXRlKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykKK3sKK30KKwordm9pZCBDRkZMX0Zvcm1GaWxsZXI6OlJlc3RvcmVTdGF0ZShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpCit7Cit9CisKK0NQV0xfV25kKiAgQ0ZGTF9Gb3JtRmlsbGVyOjpSZXNldFBERldpbmRvdyhDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0JPT0wgYlJlc3RvcmVWYWx1ZSkKK3sKKwlyZXR1cm4gR2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpOyAKK30KKwordm9pZCBDRkZMX0Zvcm1GaWxsZXI6OlRpbWVyUHJvYygpCit7CisKK30KKworSUZYX1N5c3RlbUhhbmRsZXIqIENGRkxfRm9ybUZpbGxlcjo6R2V0U3lzdGVtSGFuZGxlcigpIGNvbnN0Cit7CisJcmV0dXJuIG1fcEFwcC0+R2V0U3lzSGFuZGxlcigpOworLy8JcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgQ0ZGTF9Gb3JtRmlsbGVyOjpPbktleVN0cm9rZShGWF9CT09MIGJLZXlEb3duKQoreworfQorCit2b2lkIENGRkxfRm9ybUZpbGxlcjo6RXNjYXBlRmlsbGVyKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfQk9PTCBiRGVzdHJveVBERldpbmRvdykKK3sKKwltX2JWYWxpZCA9IEZBTFNFOworCQorCUZYX1JFQ1QgcmNSZWN0ID0gdGhpcy0+R2V0Vmlld0JCb3gocFBhZ2VWaWV3LCBtX3BXaWRnZXQpOworCXRoaXMtPkludmFsaWRhdGVSZWN0KHJjUmVjdC5sZWZ0LCByY1JlY3QudG9wLCByY1JlY3QucmlnaHQsIHJjUmVjdC5ib3R0b20pOworCisJaWYoYkRlc3Ryb3lQREZXaW5kb3cpCisgCQlEZXN0cm95UERGV2luZG93KHBQYWdlVmlldyk7Cit9CisKK0ZYX0JPT0wgQ0ZGTF9Gb3JtRmlsbGVyOjpDYW5Db3B5KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkKK3sKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wgQ0ZGTF9Gb3JtRmlsbGVyOjpDYW5DdXQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQoreworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTAlDRkZMX0Zvcm1GaWxsZXI6OkNhblBhc3RlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkKK3sKKwlyZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgQ0ZGTF9Gb3JtRmlsbGVyOjpEb0NvcHkoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQoreworfQorCit2b2lkIENGRkxfRm9ybUZpbGxlcjo6RG9DdXQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQoreworfQorCit2b2lkIENGRkxfRm9ybUZpbGxlcjo6RG9QYXN0ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpCit7Cit9CisKK3ZvaWQgQ0ZGTF9Gb3JtRmlsbGVyOjpJbnZhbGlkYXRlUmVjdChkb3VibGUgbGVmdCwgZG91YmxlIHRvcCwgZG91YmxlIHJpZ2h0LCBkb3VibGUgYm90dG9tKQoreworCUNQREZfUGFnZSAqIHBQYWdlID0gbV9wV2lkZ2V0LT5HZXRQREZQYWdlKCk7CisJbV9wQXBwLT5GRklfSW52YWxpZGF0ZShwUGFnZSwgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDRkZMX0J1dHRvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0NGRkxfQnV0dG9uOjpDRkZMX0J1dHRvbihDUERGRG9jX0Vudmlyb25tZW50KiBwQXBwLCBDUERGU0RLX0Fubm90KiBwV2lkZ2V0KSA6CisJQ0ZGTF9Gb3JtRmlsbGVyKHBBcHAsIHBXaWRnZXQpLAorCW1fYk1vdXNlSW4oRkFMU0UpLAorCW1fYk1vdXNlRG93bihGQUxTRSkKK3sKK30KKworQ0ZGTF9CdXR0b246On5DRkZMX0J1dHRvbigpCit7Cit9CisKK3ZvaWQgQ0ZGTF9CdXR0b246Ok9uTW91c2VFbnRlcihDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCkKK3sKKwltX2JNb3VzZUluID0gVFJVRTsKKwlGWF9SRUNUIHJlY3QgPSB0aGlzLT5HZXRWaWV3QkJveChwUGFnZVZpZXcscEFubm90KTsKKwl0aGlzLT5JbnZhbGlkYXRlUmVjdChyZWN0LmxlZnQsIHJlY3QudG9wLCByZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSk7CisvLwk6OkludmFsaWRhdGVSZWN0KHBQYWdlVmlldy0+R2V0UGFnZVZpZXdXbmQoKSwgJnRoaXMtPkdldFZpZXdCQm94KHBQYWdlVmlldywgcEFubm90KSwgVFJVRSk7Cit9CisKK3ZvaWQgQ0ZGTF9CdXR0b246Ok9uTW91c2VFeGl0KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90KQoreworCW1fYk1vdXNlSW4gPSBGQUxTRTsKKworCUZYX1JFQ1QgcmVjdCA9IHRoaXMtPkdldFZpZXdCQm94KHBQYWdlVmlldyxwQW5ub3QpOworCXRoaXMtPkludmFsaWRhdGVSZWN0KHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQsIHJlY3QuYm90dG9tKTsKKy8vCTo6SW52YWxpZGF0ZVJlY3QocFBhZ2VWaWV3LT5HZXRQYWdlVmlld1duZCgpLCAmdGhpcy0+R2V0Vmlld0JCb3gocFBhZ2VWaWV3LCBwQW5ub3QpLCBUUlVFKTsKKwlFbmRUaW1lcigpOworCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7CisvLwltX3BXaWRnZXQtPkhpZGVIaW50KCk7Cit9CisKK0ZYX0JPT0wgQ0ZGTF9CdXR0b246Ok9uTEJ1dHRvbkRvd24oQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkKK3sKKwlDUERGX1JlY3QgcmNBbm5vdCA9IHBBbm5vdC0+R2V0UmVjdCgpOworCWlmKCFyY0Fubm90LkNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpKQorCQlyZXR1cm4gRkFMU0U7CisKKwltX2JNb3VzZURvd24gPSBUUlVFOworCW1fYlZhbGlkID0gVFJVRTsKKwlGWF9SRUNUIHJlY3QgPSB0aGlzLT5HZXRWaWV3QkJveChwUGFnZVZpZXcsIHBBbm5vdCk7CisJdGhpcy0+SW52YWxpZGF0ZVJlY3QocmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC5yaWdodCwgcmVjdC5ib3R0b20pOworLy8JOjpJbnZhbGlkYXRlUmVjdChwUGFnZVZpZXctPkdldFBhZ2VWaWV3V25kKCksICZ0aGlzLT5HZXRWaWV3QkJveChwUGFnZVZpZXcsIHBBbm5vdCksIFRSVUUpOworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MCUNGRkxfQnV0dG9uOjpPbkxCdXR0b25VcChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQoreworCUNQREZfUmVjdCByY0Fubm90ID0gcEFubm90LT5HZXRSZWN0KCk7CisJaWYoIXJjQW5ub3QuQ29udGFpbnMocG9pbnQueCwgcG9pbnQueSkpCisJCXJldHVybiBGQUxTRTsKKworCW1fYk1vdXNlRG93biA9IEZBTFNFOworCW1fcFdpZGdldC0+R2V0UERGUGFnZSgpOworCQorCisJRlhfUkVDVCByZWN0ID0gdGhpcy0+R2V0Vmlld0JCb3gocFBhZ2VWaWV3LCBwQW5ub3QpOworCXRoaXMtPkludmFsaWRhdGVSZWN0KHJlY3QubGVmdCwgcmVjdC50b3AsIHJlY3QucmlnaHQsIHJlY3QuYm90dG9tKTsKKy8vIAk6OkludmFsaWRhdGVSZWN0KHBQYWdlVmlldy0+R2V0UGFnZVZpZXdXbmQoKSwgJnRoaXMtPkdldFZpZXdCQm94KHBQYWdlVmlldywgcEFubm90KSwgVFJVRSk7CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wJQ0ZGTF9CdXR0b246Ok9uTW91c2VNb3ZlKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpCit7CisJQVNTRVJUKG1fcEFwcCAhPSBOVUxMKTsKKworCXJldHVybiBUUlVFOworfQorCit2b2lkIENGRkxfQnV0dG9uOjpPbkRyYXcoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCAvKkhEQyBoREMsKi8gQ1BERlNES19Bbm5vdCogcEFubm90LCAKKwkJCQkJCQlDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLAorCQkJCQkJCS8qY29uc3QgQ1JlY3QmIHJjV2luZG93LCovIEZYX0RXT1JEIGR3RmxhZ3MpCit7CisJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsKKwlBU1NFUlQocEFubm90ICE9IE5VTEwpOworCisJQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSAoQ1BERlNES19XaWRnZXQqKXBBbm5vdDsKKworCUNQREZfRm9ybUNvbnRyb2wqIHBDdHJsID0gcFdpZGdldC0+R2V0Rm9ybUNvbnRyb2woKTsKKwlBU1NFUlQocEN0cmwgIT0gTlVMTCk7CisKKwlDUERGX0Zvcm1Db250cm9sOjpIaWdobGlnaHRpbmdNb2RlIGVITSA9IHBDdHJsLT5HZXRIaWdobGlnaHRpbmdNb2RlKCk7CisKKwlpZiAoZUhNID09IENQREZfRm9ybUNvbnRyb2w6OlB1c2gpCisJeworCQlpZiAobV9iTW91c2VEb3duKQorCQl7CisJCQlpZiAocFdpZGdldC0+SXNXaWRnZXRBcHBlYXJhbmNlVmFsaWQoQ1BERl9Bbm5vdDo6RG93bikpCisJCQkJcFdpZGdldC0+RHJhd0FwcGVhcmFuY2UocERldmljZSwgcFVzZXIyRGV2aWNlLCBDUERGX0Fubm90OjpEb3duLCBOVUxMKTsKKwkJCWVsc2UKKwkJCQlwV2lkZ2V0LT5EcmF3QXBwZWFyYW5jZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIENQREZfQW5ub3Q6Ok5vcm1hbCwgTlVMTCk7CisJCX0KKwkJZWxzZSBpZiAobV9iTW91c2VJbikKKwkJeworCQkJaWYgKHBXaWRnZXQtPklzV2lkZ2V0QXBwZWFyYW5jZVZhbGlkKENQREZfQW5ub3Q6OlJvbGxvdmVyKSkKKwkJCQlwV2lkZ2V0LT5EcmF3QXBwZWFyYW5jZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIENQREZfQW5ub3Q6OlJvbGxvdmVyLCBOVUxMKTsKKwkJCWVsc2UKKwkJCQlwV2lkZ2V0LT5EcmF3QXBwZWFyYW5jZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIENQREZfQW5ub3Q6Ok5vcm1hbCwgTlVMTCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwV2lkZ2V0LT5EcmF3QXBwZWFyYW5jZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIENQREZfQW5ub3Q6Ok5vcm1hbCwgTlVMTCk7CisJCX0KKwl9CisJZWxzZQorCQlwV2lkZ2V0LT5EcmF3QXBwZWFyYW5jZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIENQREZfQW5ub3Q6Ok5vcm1hbCwgTlVMTCk7Cit9CisKKwordm9pZCBDRkZMX0J1dHRvbjo6T25EcmF3RGVhY3RpdmUoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCAvKkhEQyBoREMsKi8gQ1BERlNES19Bbm5vdCogcEFubm90LCAKKwkJCQkJCQkJIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsCisJCQkJCQkJCSAvKmNvbnN0IENSZWN0JiByY1dpbmRvdywgKi9GWF9EV09SRCBkd0ZsYWdzKQoreworCU9uRHJhdyhwUGFnZVZpZXcsIHBBbm5vdCwgcERldmljZSwgcFVzZXIyRGV2aWNlLCBkd0ZsYWdzKTsKK30KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2Zvcm1maWxsZXIvRkZMX0lGb3JtRmlsbGVyLmNwcCBiL2ZwZGZzZGsvc3JjL2Zvcm1maWxsZXIvRkZMX0lGb3JtRmlsbGVyLmNwcAppbmRleCA2ODZiMzhjLi4yYjIxZTEzIDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9mb3JtZmlsbGVyL0ZGTF9JRm9ybUZpbGxlci5jcHAKKysrIGIvZnBkZnNkay9zcmMvZm9ybWZpbGxlci9GRkxfSUZvcm1GaWxsZXIuY3BwCkBAIC0xLDExOTcgKzEsMTE5NyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfRm9ybUZpbGxlci5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0lGb3JtRmlsbGVyLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfQ2hlY2tCb3guaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9Db21ib0JveC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0xpc3RCb3guaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9QdXNoQnV0dG9uLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfUmFkaW9CdXR0b24uaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9UZXh0RmllbGQuaCINCi0NCi0jZGVmaW5lIEZGTF9NQVhMSVNUQk9YSEVJR0hUCQkxNDAuMGYNCi0NCi0vLyBISE9PSyBDRkZMX0lGb3JtRmlsbGVyOjptX2hvb2tTaGVldCA9IE5VTEw7DQotLy8gTVNHIENGRkxfSUZvcm1GaWxsZXI6OmdfTXNnOw0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENGRkxfSUZvcm1GaWxsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DRkZMX0lGb3JtRmlsbGVyOjpDRkZMX0lGb3JtRmlsbGVyKENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHApIDogDQotCW1fcEFwcChwQXBwKSwNCi0JbV9iTm90aWZ5aW5nKEZBTFNFKQ0KLXsNCi19DQotDQotQ0ZGTF9JRm9ybUZpbGxlcjo6fkNGRkxfSUZvcm1GaWxsZXIoKQ0KLXsNCi0JRlhfUE9TSVRJT04gcG9zID0gbV9NYXBzLkdldFN0YXJ0UG9zaXRpb24oKTsNCi0Jd2hpbGUgKHBvcykNCi0Jew0KLQkJQ1BERlNES19Bbm5vdCAqIHBBbm5vdCA9IE5VTEw7DQotCQlDRkZMX0Zvcm1GaWxsZXIgKiBwRm9ybUZpbGxlciA9IE5VTEw7DQotCQltX01hcHMuR2V0TmV4dEFzc29jKHBvcyxwQW5ub3QscEZvcm1GaWxsZXIpOw0KLQkJZGVsZXRlIHBGb3JtRmlsbGVyOw0KLQl9DQotCW1fTWFwcy5SZW1vdmVBbGwoKTsNCi19DQotDQotRlhfQk9PTAlDRkZMX0lGb3JtRmlsbGVyOjpBbm5vdF9IaXRUZXN0KENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyxDUERGU0RLX0Fubm90KiBwQW5ub3QsIENQREZfUG9pbnQgcG9pbnQpDQotew0KLQlDUERGX1JlY3QgcmMgPSBwQW5ub3QtPkdldFJlY3QoKTsNCi0JaWYocmMuQ29udGFpbnMocG9pbnQueCwgcG9pbnQueSkpDQotCQlyZXR1cm4gVFJVRTsNCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9SRUNUIENGRkxfSUZvcm1GaWxsZXI6OkdldFZpZXdCQm94KENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90KQ0KLXsNCi0JaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBBbm5vdCwgRkFMU0UpKQ0KLQl7DQotCQlyZXR1cm4gcEZvcm1GaWxsZXItPkdldFZpZXdCQm94KHBQYWdlVmlldywgcEFubm90KTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7DQotCQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQ0KLQkJQ1BERl9Bbm5vdCogcFBERkFubm90ID0gcEFubm90LT5HZXRQREZBbm5vdCgpOw0KLQkJQVNTRVJUKHBQREZBbm5vdCAhPSBOVUxMKTsNCi0NCi0JCUNQREZfUmVjdCByY0Fubm90Ow0KLQkJcFBERkFubm90LT5HZXRSZWN0KHJjQW5ub3QpOw0KLQ0KLS8vIAkJQ1JlY3QgcmNXaW47DQotLy8gCQlwUGFnZVZpZXctPkRvY1RvV2luZG93KHJjQW5ub3QsIHJjV2luKTsNCi0JCUNQREZfUmVjdCByY1dpbiA9IENQV0xfVXRpbHM6OkluZmxhdGVSZWN0KHJjQW5ub3QsMSk7DQotLy8JCXJjV2luLkluZmxhdGVSZWN0KDEsIDEpOw0KLQ0KLQkJcmV0dXJuIHJjV2luLkdldE91dHRlclJlY3QoKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENGRkxfSUZvcm1GaWxsZXI6Ok9uRHJhdyhDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIC8qSERDIGhEQywqLyBDUERGU0RLX0Fubm90KiBwQW5ub3QsIA0KLQkJCQkJCUNGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsDQotCQkJCQkJLypjb25zdCBDUmVjdCYgcmNXaW5kb3csKi8gRlhfRFdPUkQgZHdGbGFncykNCi17DQotCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7DQotCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gKENQREZTREtfV2lkZ2V0KilwQW5ub3Q7DQotDQotCWlmIChJc1Zpc2libGUocFdpZGdldCkpDQotCXsNCi0JCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwQW5ub3QsIEZBTFNFKSkNCi0JCXsNCi0gCQkJaWYgKHBGb3JtRmlsbGVyLT5Jc1ZhbGlkKCkpDQotIAkJCXsNCi0JCQkJcEZvcm1GaWxsZXItPk9uRHJhdyhwUGFnZVZpZXcsIHBBbm5vdCwgcERldmljZSwgcFVzZXIyRGV2aWNlLCBkd0ZsYWdzKTsNCi0JCQkJDQotCQkJCXBBbm5vdC0+R2V0UERGUGFnZSgpOw0KLQkJCQkNCi0NCi0JCQkJQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50ID0gbV9wQXBwLT5HZXRDdXJyZW50RG9jKCk7DQotCQkJCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCQkJCWlmIChwRG9jdW1lbnQtPkdldEZvY3VzQW5ub3QoKSA9PSBwQW5ub3QpDQotCQkJCXsNCi0JCQkJCUNQREZfUmVjdCByY0ZvY3VzID0gcEZvcm1GaWxsZXItPkdldEZvY3VzQm94KHBQYWdlVmlldyk7DQotCQkJCQlpZiAoIXJjRm9jdXMuSXNFbXB0eSgpKQ0KLQkJCQkJew0KLQkJCQkJCUNGWF9QYXRoRGF0YSBwYXRoOw0KLQkJCQkJCQ0KLQkJCQkJCXBhdGguU2V0UG9pbnRDb3VudCg1KTsNCi0JCQkJCQlwYXRoLlNldFBvaW50KDAsIHJjRm9jdXMubGVmdCwgIHJjRm9jdXMudG9wLCBGWFBUX01PVkVUTyk7DQotCQkJCQkJcGF0aC5TZXRQb2ludCgxLCByY0ZvY3VzLmxlZnQsICByY0ZvY3VzLmJvdHRvbSwgRlhQVF9MSU5FVE8pOw0KLQkJCQkJCXBhdGguU2V0UG9pbnQoMiwgcmNGb2N1cy5yaWdodCwgIHJjRm9jdXMuYm90dG9tLCBGWFBUX0xJTkVUTyk7DQotCQkJCQkJcGF0aC5TZXRQb2ludCgzLCByY0ZvY3VzLnJpZ2h0LCAgcmNGb2N1cy50b3AsIEZYUFRfTElORVRPKTsNCi0JCQkJCQlwYXRoLlNldFBvaW50KDQsIHJjRm9jdXMubGVmdCwgIHJjRm9jdXMudG9wLCBGWFBUX0xJTkVUTyk7DQotCQkJCQkJDQotCQkJCQkJQ0ZYX0dyYXBoU3RhdGVEYXRhIGdzZDsNCi0JCQkJCQlnc2QuU2V0RGFzaENvdW50KDEpOwkJCQkNCi0JCQkJCQlnc2QubV9EYXNoQXJyYXlbMF0gPSAxLjBmOw0KLQkJCQkJCWdzZC5tX0Rhc2hQaGFzZSA9IDA7CQ0KLQkJCQkJCQ0KLQkJCQkJCWdzZC5tX0xpbmVXaWR0aCA9IDEuMGY7DQotCQkJCQkJcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgJmdzZCwgMCwgQXJnYkVuY29kZSgyNTUsMCwwLDApLCBGWEZJTExfQUxURVJOQVRFKTsNCi0NCi0JCQkJCS8vCTo6RHJhd0ZvY3VzUmVjdChoREMsICZyY0ZvY3VzKTsJDQotCQkJCQl9DQotCQkJCX0NCi0NCi0JCQkJcmV0dXJuOw0KLQkJCX0NCi0JCX0NCi0NCi0JCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwQW5ub3QsIEZBTFNFKSkNCi0JCQlwRm9ybUZpbGxlci0+T25EcmF3RGVhY3RpdmUocFBhZ2VWaWV3LCBwQW5ub3QsIHBEZXZpY2UsIHBVc2VyMkRldmljZSwgZHdGbGFncyk7DQotCQllbHNlDQotCQkJcFdpZGdldC0+RHJhd0FwcGVhcmFuY2UocERldmljZSwgcFVzZXIyRGV2aWNlLCBDUERGX0Fubm90OjpOb3JtYWwsIE5VTEwpOw0KLQ0KLQkJaWYgKCFJc1JlYWRPbmx5KHBXaWRnZXQpICYmIElzRmlsbGluZ0FsbG93ZWQocFdpZGdldCkpDQotCQl7DQotCQkJcFdpZGdldC0+RHJhd1NoYWRvdyhwRGV2aWNlLCBwUGFnZVZpZXcpOw0KLQkJfQ0KLQkNCi0JfQ0KLX0NCi0NCi12b2lkIENGRkxfSUZvcm1GaWxsZXI6Ok9uQ3JlYXRlKENQREZTREtfQW5ub3QqIHBBbm5vdCkNCi17DQotCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwQW5ub3QsIEZBTFNFKSkNCi0Jew0KLQkJcEZvcm1GaWxsZXItPk9uQ3JlYXRlKHBBbm5vdCk7DQotCX0NCi19DQotDQotdm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpPbkxvYWQoQ1BERlNES19Bbm5vdCogcEFubm90KQ0KLXsNCi0JaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBBbm5vdCwgRkFMU0UpKQ0KLQl7DQotCQlwRm9ybUZpbGxlci0+T25Mb2FkKHBBbm5vdCk7DQotCX0NCi19DQotDQotdm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpPbkRlbGV0ZShDUERGU0RLX0Fubm90KiBwQW5ub3QpDQotew0KLQlpZiAoQ0ZGTF9Gb3JtRmlsbGVyKiBwRm9ybUZpbGxlciA9IEdldEZvcm1GaWxsZXIocEFubm90LCBGQUxTRSkpDQotCXsNCi0JCXBGb3JtRmlsbGVyLT5PbkRlbGV0ZShwQW5ub3QpOw0KLQl9DQotDQotCVVuUmVnaXN0ZXJGb3JtRmlsbGVyKHBBbm5vdCk7DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9JRm9ybUZpbGxlcjo6T25Nb3VzZUVudGVyKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFnKQ0KLXsNCi0JQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsNCi0JQVNTRVJUKHBBbm5vdC0+R2V0UERGQW5ub3QoKS0+R2V0U3ViVHlwZSgpID09ICJXaWRnZXQiKTsNCi0JDQotCWlmICghbV9iTm90aWZ5aW5nKQ0KLQl7DQotCQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IChDUERGU0RLX1dpZGdldCopcEFubm90Ow0KLQkJaWYgKHBXaWRnZXQtPkdldEFBY3Rpb24oQ1BERl9BQWN0aW9uOjpDdXJzb3JFbnRlcikpDQotCQl7DQotCQkJbV9iTm90aWZ5aW5nID0gVFJVRTsNCi0JCQkNCi0JCQlpbnQgblZhbHVlQWdlID0gcFdpZGdldC0+R2V0VmFsdWVBZ2UoKTsNCi0NCi0JCQlwV2lkZ2V0LT5DbGVhckFwcE1vZGlmaWVkKCk7DQotCQkJDQotCQkJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsNCi0JCQkNCi0JCQkNCi0JCQkNCi0JCQlQREZTREtfRmllbGRBY3Rpb24gZmE7DQotCQkJZmEuYk1vZGlmaWVyID0gbV9wQXBwLT5GRklfSXNDVFJMS2V5RG93bihuRmxhZyk7DQotIAkJCWZhLmJTaGlmdCA9IG1fcEFwcC0+RkZJX0lzU0hJRlRLZXlEb3duKG5GbGFnKTsNCi0JCQlwV2lkZ2V0LT5PbkFBY3Rpb24oQ1BERl9BQWN0aW9uOjpDdXJzb3JFbnRlciwgZmEsIHBQYWdlVmlldyApOw0KLQkJCW1fYk5vdGlmeWluZyA9IEZBTFNFOw0KLQkJCQ0KLQkJCS8vaWYgKCAhSXNWYWxpZEFubm90KHBQYWdlVmlldywgcEFubm90KSApIHJldHVybjsNCi0JCQkNCi0JCQlpZiAocFdpZGdldC0+SXNBcHBNb2RpZmllZCgpKQ0KLQkJCXsNCi0JCQkJaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBXaWRnZXQsIEZBTFNFKSkNCi0JCQkJew0KLQkJCQkJcEZvcm1GaWxsZXItPlJlc2V0UERGV2luZG93KHBQYWdlVmlldywgcFdpZGdldC0+R2V0VmFsdWVBZ2UoKSA9PSBuVmFsdWVBZ2UpOw0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQl9DQotCQ0KLQlpZiAoQ0ZGTF9Gb3JtRmlsbGVyKiBwRm9ybUZpbGxlciA9IEdldEZvcm1GaWxsZXIocEFubm90LCBUUlVFKSkNCi0Jew0KLQkJcEZvcm1GaWxsZXItPk9uTW91c2VFbnRlcihwUGFnZVZpZXcsIHBBbm5vdCk7DQotCX0NCi19DQotDQotdm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpPbk1vdXNlRXhpdChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZykNCi17DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotCUFTU0VSVChwQW5ub3QtPkdldFBERkFubm90KCktPkdldFN1YlR5cGUoKSA9PSAiV2lkZ2V0Iik7DQotCQ0KLQlpZiAoIW1fYk5vdGlmeWluZykNCi0Jew0KLQkJQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSAoQ1BERlNES19XaWRnZXQqKXBBbm5vdDsNCi0JCWlmIChwV2lkZ2V0LT5HZXRBQWN0aW9uKENQREZfQUFjdGlvbjo6Q3Vyc29yRXhpdCkpDQotCQl7DQotCQkJbV9iTm90aWZ5aW5nID0gVFJVRTsNCi0JCQlwV2lkZ2V0LT5HZXRBcHBlYXJhbmNlQWdlKCk7DQotCQkJaW50IG5WYWx1ZUFnZSA9IHBXaWRnZXQtPkdldFZhbHVlQWdlKCk7DQotCQkJcFdpZGdldC0+Q2xlYXJBcHBNb2RpZmllZCgpOw0KLQkJCQ0KLQkJCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7DQotCQkJDQotCQkJDQotCQkJDQotCQkJUERGU0RLX0ZpZWxkQWN0aW9uIGZhOw0KLQkJCWZhLmJNb2RpZmllciA9IG1fcEFwcC0+RkZJX0lzQ1RSTEtleURvd24obkZsYWcpOw0KLSAJCQlmYS5iU2hpZnQgPSBtX3BBcHAtPkZGSV9Jc1NISUZUS2V5RG93bihuRmxhZyk7DQotCQkJDQotCQkJcFdpZGdldC0+T25BQWN0aW9uKENQREZfQUFjdGlvbjo6Q3Vyc29yRXhpdCwgZmEsIHBQYWdlVmlldyk7DQotCQkJbV9iTm90aWZ5aW5nID0gRkFMU0U7DQotCQkJDQotCQkJLy9pZiAoIUlzVmFsaWRBbm5vdChwUGFnZVZpZXcsIHBBbm5vdCkpIHJldHVybjsNCi0JCQkNCi0JCQlpZiAocFdpZGdldC0+SXNBcHBNb2RpZmllZCgpKQ0KLQkJCXsNCi0JCQkJaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBXaWRnZXQsIEZBTFNFKSkNCi0JCQkJew0KLQkJCQkJcEZvcm1GaWxsZXItPlJlc2V0UERGV2luZG93KHBQYWdlVmlldywgblZhbHVlQWdlID09IHBXaWRnZXQtPkdldFZhbHVlQWdlKCkpOw0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQl9DQotCQ0KLQlpZiAoQ0ZGTF9Gb3JtRmlsbGVyKiBwRm9ybUZpbGxlciA9IEdldEZvcm1GaWxsZXIocEFubm90LCBGQUxTRSkpDQotCXsNCi0JCXBGb3JtRmlsbGVyLT5Pbk1vdXNlRXhpdChwUGFnZVZpZXcsIHBBbm5vdCk7DQotCX0NCi19DQotDQotRlhfQk9PTAlDRkZMX0lGb3JtRmlsbGVyOjpPbkxCdXR0b25Eb3duKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpDQotew0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQlBU1NFUlQocEFubm90LT5HZXRQREZBbm5vdCgpLT5HZXRTdWJUeXBlKCkgPT0gIldpZGdldCIpOw0KLQkNCi0JaWYgKCFtX2JOb3RpZnlpbmcpDQotCXsNCi0JCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gKENQREZTREtfV2lkZ2V0KilwQW5ub3Q7DQotCQlpZiAoQW5ub3RfSGl0VGVzdChwUGFnZVZpZXcsIHBBbm5vdCwgcG9pbnQpICYmIHBXaWRnZXQtPkdldEFBY3Rpb24oQ1BERl9BQWN0aW9uOjpCdXR0b25Eb3duKSkNCi0JCXsNCi0JCQltX2JOb3RpZnlpbmcgPSBUUlVFOw0KLQkJCXBXaWRnZXQtPkdldEFwcGVhcmFuY2VBZ2UoKTsNCi0JCQlpbnQgblZhbHVlQWdlID0gcFdpZGdldC0+R2V0VmFsdWVBZ2UoKTsNCi0JCQlwV2lkZ2V0LT5DbGVhckFwcE1vZGlmaWVkKCk7DQotCQkJDQotCQkJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsNCi0JCQkNCi0JCQkNCi0JCQkNCi0JCQlQREZTREtfRmllbGRBY3Rpb24gZmE7DQotCQkJZmEuYk1vZGlmaWVyID0gbV9wQXBwLT5GRklfSXNDVFJMS2V5RG93bihuRmxhZ3MpOw0KLSAJCQlmYS5iU2hpZnQgPSBtX3BBcHAtPkZGSV9Jc1NISUZUS2V5RG93bihuRmxhZ3MpOw0KLQkJCXBXaWRnZXQtPk9uQUFjdGlvbihDUERGX0FBY3Rpb246OkJ1dHRvbkRvd24sIGZhLCBwUGFnZVZpZXcpOw0KLQkJCW1fYk5vdGlmeWluZyA9IEZBTFNFOw0KLQkJCQ0KLQkJCWlmICghSXNWYWxpZEFubm90KHBQYWdlVmlldywgcEFubm90KSkgcmV0dXJuIFRSVUU7DQotCQkJDQotCQkJaWYgKHBXaWRnZXQtPklzQXBwTW9kaWZpZWQoKSkNCi0JCQl7DQotCQkJCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwV2lkZ2V0LCBGQUxTRSkpDQotCQkJCXsNCi0JCQkJCXBGb3JtRmlsbGVyLT5SZXNldFBERldpbmRvdyhwUGFnZVZpZXcsIG5WYWx1ZUFnZSA9PSBwV2lkZ2V0LT5HZXRWYWx1ZUFnZSgpKTsNCi0JCQkJfQ0KLQkJCX0NCi0JCX0NCi0JfQ0KLQkNCi0JaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBBbm5vdCwgRkFMU0UpKQ0KLQl7DQotCQlyZXR1cm4gcEZvcm1GaWxsZXItPk9uTEJ1dHRvbkRvd24ocFBhZ2VWaWV3LCBwQW5ub3QsIG5GbGFncywgcG9pbnQpOw0KLQl9DQotCQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wJQ0ZGTF9JRm9ybUZpbGxlcjo6T25MQnV0dG9uVXAoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkNCi17DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotCUFTU0VSVChwQW5ub3QtPkdldFBERkFubm90KCktPkdldFN1YlR5cGUoKSA9PSAiV2lkZ2V0Iik7DQotCQ0KLQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IChDUERGU0RLX1dpZGdldCopcEFubm90Ow0KLQkvLyAJQ1JlYWRlcl9QYWdlKiBwUGFnZSA9IHBBbm5vdC0+R2V0UGFnZSgpOw0KLQkvLyAJQVNTRVJUKHBQYWdlICE9IE5VTEwpOw0KLQlDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQgPSBtX3BBcHAtPkdldEN1cnJlbnREb2MoKTsNCi0JQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsJCQ0KLQkNCi0Jc3dpdGNoIChwV2lkZ2V0LT5HZXRGaWVsZFR5cGUoKSkNCi0Jew0KLQljYXNlIEZJRUxEVFlQRV9QVVNIQlVUVE9OOg0KLQljYXNlIEZJRUxEVFlQRV9DSEVDS0JPWDoNCi0JY2FzZSBGSUVMRFRZUEVfUkFESU9CVVRUT046DQotCQlpZiAoR2V0Vmlld0JCb3gocFBhZ2VWaWV3LCBwQW5ub3QpLkNvbnRhaW5zKChpbnQpcG9pbnQueCwgKGludClwb2ludC55KSkNCi0JCXsNCi0JCQlwRG9jdW1lbnQtPlNldEZvY3VzQW5ub3QocEFubm90KTsNCi0JCX0NCi0JCWJyZWFrOw0KLQlkZWZhdWx0Og0KLQkJcERvY3VtZW50LT5TZXRGb2N1c0Fubm90KHBBbm5vdCk7DQotCQlicmVhazsNCi0JfQ0KLQkNCi0JRlhfQk9PTCBiUmV0ID0gRkFMU0U7DQotCQ0KLQlpZiAoQ0ZGTF9Gb3JtRmlsbGVyKiBwRm9ybUZpbGxlciA9IEdldEZvcm1GaWxsZXIocEFubm90LCBGQUxTRSkpDQotCXsNCi0JCWJSZXQgPSBwRm9ybUZpbGxlci0+T25MQnV0dG9uVXAocFBhZ2VWaWV3LCBwQW5ub3QsIG5GbGFncywgcG9pbnQpOw0KLQl9DQotDQotCWlmIChwRG9jdW1lbnQtPkdldEZvY3VzQW5ub3QoKSA9PSBwQW5ub3QpDQotCXsNCi0JCUZYX0JPT0wgYkV4aXQgPSBGQUxTRTsNCi0JCUZYX0JPT0wgYlJlc2V0ID0gRkFMU0U7DQotCQlPbkJ1dHRvblVwKHBXaWRnZXQsIHBQYWdlVmlldywgYlJlc2V0LCBiRXhpdCxuRmxhZ3MpOw0KLQkJaWYgKGJFeGl0KSByZXR1cm4gVFJVRTsNCi0JfQ0KLQlyZXR1cm4gYlJldDsNCi19DQotDQotdm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpPbkJ1dHRvblVwKENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0LCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0JPT0wmIGJSZXNldCwgRlhfQk9PTCYgYkV4aXQsRlhfVUlOVCBuRmxhZykNCi17DQotCUFTU0VSVChwV2lkZ2V0ICE9IE5VTEwpOw0KLQkNCi0JaWYgKCFtX2JOb3RpZnlpbmcpDQotCXsNCi0JCWlmIChwV2lkZ2V0LT5HZXRBQWN0aW9uKENQREZfQUFjdGlvbjo6QnV0dG9uVXApKQ0KLQkJew0KLQkJCW1fYk5vdGlmeWluZyA9IFRSVUU7DQotCQkJaW50IG5BZ2UgPSBwV2lkZ2V0LT5HZXRBcHBlYXJhbmNlQWdlKCk7DQotCQkJaW50IG5WYWx1ZUFnZSA9IHBXaWRnZXQtPkdldFZhbHVlQWdlKCk7DQotCQkJDQotCQkJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsNCi0vLyAJCQlDUmVhZGVyX0RvY1ZpZXcqIHBEb2NWaWV3ID0gcFBhZ2VWaWV3LT5HZXREb2NWaWV3KCk7DQotLy8gCQkJQVNTRVJUKHBEb2NWaWV3ICE9IE5VTEwpOw0KLQkJCQ0KLQkJCQ0KLQkJCQ0KLQkJCVBERlNES19GaWVsZEFjdGlvbiBmYTsNCi0JCQlmYS5iTW9kaWZpZXIgPSBtX3BBcHAtPkZGSV9Jc0NUUkxLZXlEb3duKG5GbGFnKTsNCi0gCQkJZmEuYlNoaWZ0ID0gbV9wQXBwLT5GRklfSXNTSElGVEtleURvd24obkZsYWcpOw0KLQ0KLQkJCXBXaWRnZXQtPk9uQUFjdGlvbihDUERGX0FBY3Rpb246OkJ1dHRvblVwLCBmYSwgcFBhZ2VWaWV3KTsNCi0JCQltX2JOb3RpZnlpbmcgPSBGQUxTRTsNCi0JCQkNCi0JCQlpZiAoIUlzVmFsaWRBbm5vdChwUGFnZVZpZXcsIHBXaWRnZXQpKQ0KLQkJCXsNCi0JCQkJYkV4aXQgPSBUUlVFOw0KLQkJCQlyZXR1cm47DQotCQkJfQ0KLQkJCQ0KLQkJCWlmIChuQWdlICE9IHBXaWRnZXQtPkdldEFwcGVhcmFuY2VBZ2UoKSkNCi0JCQl7DQotCQkJCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwV2lkZ2V0LCBGQUxTRSkpDQotCQkJCXsNCi0JCQkJCXBGb3JtRmlsbGVyLT5SZXNldFBERldpbmRvdyhwUGFnZVZpZXcsIG5WYWx1ZUFnZSA9PSBwV2lkZ2V0LT5HZXRWYWx1ZUFnZSgpKTsNCi0JCQkJfQ0KLQkJCQkNCi0JCQkJYlJlc2V0ID0gVFJVRTsNCi0JCQl9DQotCQl9DQotCX0NCi19DQotDQotRlhfQk9PTAlDRkZMX0lGb3JtRmlsbGVyOjpPbkxCdXR0b25EYmxDbGsoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkNCi17DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotCUFTU0VSVChwQW5ub3QtPkdldFBERkFubm90KCktPkdldFN1YlR5cGUoKSA9PSAiV2lkZ2V0Iik7DQotDQotCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwQW5ub3QsIEZBTFNFKSkNCi0Jew0KLQkJcmV0dXJuIHBGb3JtRmlsbGVyLT5PbkxCdXR0b25EYmxDbGsocFBhZ2VWaWV3LCBwQW5ub3QsIG5GbGFncywgcG9pbnQpOw0KLQl9DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTAlDRkZMX0lGb3JtRmlsbGVyOjpPbk1vdXNlTW92ZShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQ0KLXsNCi0JQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsNCi0JQVNTRVJUKHBBbm5vdC0+R2V0UERGQW5ub3QoKS0+R2V0U3ViVHlwZSgpID09ICJXaWRnZXQiKTsNCi0NCi0JLy9jaGFuZ2UgY3Vyc29yDQotCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwQW5ub3QsIFRSVUUpKQ0KLQl7DQotCQlyZXR1cm4gcEZvcm1GaWxsZXItPk9uTW91c2VNb3ZlKHBQYWdlVmlldywgcEFubm90LCBuRmxhZ3MsIHBvaW50KTsNCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wJQ0ZGTF9JRm9ybUZpbGxlcjo6T25Nb3VzZVdoZWVsKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgc2hvcnQgekRlbHRhLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkNCi17DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotCUFTU0VSVChwQW5ub3QtPkdldFBERkFubm90KCktPkdldFN1YlR5cGUoKSA9PSAiV2lkZ2V0Iik7DQotDQotCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwQW5ub3QsIEZBTFNFKSkNCi0Jew0KLQkJcmV0dXJuIHBGb3JtRmlsbGVyLT5Pbk1vdXNlV2hlZWwocFBhZ2VWaWV3LCBwQW5ub3QsIG5GbGFncywgekRlbHRhLCBwb2ludCk7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MCUNGRkxfSUZvcm1GaWxsZXI6Ok9uUkJ1dHRvbkRvd24oQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkNCi17DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotCUFTU0VSVChwQW5ub3QtPkdldFBERkFubm90KCktPkdldFN1YlR5cGUoKSA9PSAiV2lkZ2V0Iik7DQotDQotCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwQW5ub3QsIEZBTFNFKSkNCi0Jew0KLQkJcmV0dXJuIHBGb3JtRmlsbGVyLT5PblJCdXR0b25Eb3duKHBQYWdlVmlldywgcEFubm90LCBuRmxhZ3MsIHBvaW50KTsNCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wJQ0ZGTF9JRm9ybUZpbGxlcjo6T25SQnV0dG9uVXAoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkNCi17DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotCUFTU0VSVChwQW5ub3QtPkdldFBERkFubm90KCktPkdldFN1YlR5cGUoKSA9PSAiV2lkZ2V0Iik7DQotDQotCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwQW5ub3QsIEZBTFNFKSkNCi0Jew0KLQkJcmV0dXJuIHBGb3JtRmlsbGVyLT5PblJCdXR0b25VcChwUGFnZVZpZXcsIHBBbm5vdCwgbkZsYWdzLCBwb2ludCk7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MCUNGRkxfSUZvcm1GaWxsZXI6Ok9uUkJ1dHRvbkRibENsayhDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQ0KLXsNCi0JQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsNCi0JQVNTRVJUKHBBbm5vdC0+R2V0UERGQW5ub3QoKS0+R2V0U3ViVHlwZSgpID09ICJXaWRnZXQiKTsNCi0NCi0JaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBBbm5vdCwgRkFMU0UpKQ0KLQl7DQotCQlyZXR1cm4gcEZvcm1GaWxsZXItPk9uUkJ1dHRvbkRibENsayhwUGFnZVZpZXcsIHBBbm5vdCwgbkZsYWdzLCBwb2ludCk7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MCUNGRkxfSUZvcm1GaWxsZXI6Ok9uS2V5RG93bihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbktleUNvZGUsIEZYX1VJTlQgbkZsYWdzKQ0KLXsNCi0JQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsNCi0JQVNTRVJUKHBBbm5vdC0+R2V0UERGQW5ub3QoKS0+R2V0U3ViVHlwZSgpID09ICJXaWRnZXQiKTsNCi0NCi0JaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBBbm5vdCwgRkFMU0UpKQ0KLQl7DQotCQlyZXR1cm4gcEZvcm1GaWxsZXItPk9uS2V5RG93bihwQW5ub3QsIG5LZXlDb2RlLCBuRmxhZ3MpOwkNCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wJQ0ZGTF9JRm9ybUZpbGxlcjo6T25DaGFyKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuQ2hhciwgRlhfVUlOVCBuRmxhZ3MpDQotew0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQlBU1NFUlQocEFubm90LT5HZXRQREZBbm5vdCgpLT5HZXRTdWJUeXBlKCkgPT0gIldpZGdldCIpOw0KLQ0KLQlpZiAobkNoYXIgPT0gRldMX1ZLRVlfVGFiKSByZXR1cm4gVFJVRTsNCi0NCi0JaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBBbm5vdCwgRkFMU0UpKQ0KLQl7DQotCQlyZXR1cm4gcEZvcm1GaWxsZXItPk9uQ2hhcihwQW5ub3QsIG5DaGFyLCBuRmxhZ3MpOw0KLQl9DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotdm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpPbkRlU2VsZWN0ZWQoQ1BERlNES19Bbm5vdCogcEFubm90KQ0KLXsNCi0JQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsNCi0JQVNTRVJUKHBBbm5vdC0+R2V0UERGQW5ub3QoKS0+R2V0U3ViVHlwZSgpID09ICJXaWRnZXQiKTsNCi0NCi0JaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBBbm5vdCwgRkFMU0UpKQ0KLQl7DQotCQlwRm9ybUZpbGxlci0+T25EZVNlbGVjdGVkKHBBbm5vdCk7DQotCX0NCi19DQotDQotdm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpPblNlbGVjdGVkKENQREZTREtfQW5ub3QqIHBBbm5vdCkNCi17DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotCUFTU0VSVChwQW5ub3QtPkdldFBERkFubm90KCktPkdldFN1YlR5cGUoKSA9PSAiV2lkZ2V0Iik7DQotDQotCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwQW5ub3QsIEZBTFNFKSkNCi0Jew0KLQkJcEZvcm1GaWxsZXItPk9uU2VsZWN0ZWQocEFubm90KTsNCi0JfQ0KLX0NCi0NCi1GWF9CT09MIENGRkxfSUZvcm1GaWxsZXI6Ok9uU2V0Rm9jdXMoQ1BERlNES19Bbm5vdCogcEFubm90LEZYX1VJTlQgbkZsYWcpDQotew0KLQlpZighcEFubm90KSByZXR1cm4gRkFMU0U7DQotCUFTU0VSVChwQW5ub3QtPkdldFBERkFubm90KCktPkdldFN1YlR5cGUoKSA9PSAiV2lkZ2V0Iik7DQotDQotCWlmICghbV9iTm90aWZ5aW5nKQ0KLQl7DQotCQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IChDUERGU0RLX1dpZGdldCopcEFubm90Ow0KLSAJCWlmIChwV2lkZ2V0LT5HZXRBQWN0aW9uKENQREZfQUFjdGlvbjo6R2V0Rm9jdXMpKQ0KLSAJCXsNCi0gIAkJCW1fYk5vdGlmeWluZyA9IFRSVUU7DQotCQkJcFdpZGdldC0+R2V0QXBwZWFyYW5jZUFnZSgpOw0KLQkJCWludCBuVmFsdWVBZ2UgPSBwV2lkZ2V0LT5HZXRWYWx1ZUFnZSgpOw0KLSAJCQlwV2lkZ2V0LT5DbGVhckFwcE1vZGlmaWVkKCk7DQotIA0KLSANCi0gCQkJQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gcEFubm90LT5HZXRQYWdlVmlldygpOw0KLSAJCQlBU1NFUlQocFBhZ2VWaWV3ICE9IE5VTEwpOw0KLSAJCQkNCi0gCQkJUERGU0RLX0ZpZWxkQWN0aW9uIGZhOw0KLQkJCWZhLmJNb2RpZmllciA9IG1fcEFwcC0+RkZJX0lzQ1RSTEtleURvd24obkZsYWcpOw0KLSAJCQlmYS5iU2hpZnQgPSBtX3BBcHAtPkZGSV9Jc1NISUZUS2V5RG93bihuRmxhZyk7DQotDQotIA0KLSAJCQlDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwV2lkZ2V0LCBUUlVFKTsNCi0gCQkJaWYoIXBGb3JtRmlsbGVyKSByZXR1cm4gRkFMU0U7DQotIAkJCXBGb3JtRmlsbGVyLT5HZXRBY3Rpb25EYXRhKHBQYWdlVmlldywgQ1BERl9BQWN0aW9uOjpHZXRGb2N1cywgZmEpOw0KLSANCi0gCQkJcFdpZGdldC0+T25BQWN0aW9uKENQREZfQUFjdGlvbjo6R2V0Rm9jdXMsIGZhLCBwUGFnZVZpZXcpOw0KLSAJCQltX2JOb3RpZnlpbmcgPSBGQUxTRTsNCi0gCQkJDQotIC8vCQkJaWYgKCFJc1ZhbGlkQW5ub3QobV9wQXBwLCBwRG9jdW1lbnQsIHBEb2NWaWV3LCBwUGFnZVZpZXcsIHBBbm5vdCkpIHJldHVybiBGQUxTRTsNCi0gDQotIAkJCWlmIChwV2lkZ2V0LT5Jc0FwcE1vZGlmaWVkKCkpDQotIAkJCXsNCi0gCQkJCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwV2lkZ2V0LCBGQUxTRSkpDQotIAkJCQl7DQotIAkJCQkJcEZvcm1GaWxsZXItPlJlc2V0UERGV2luZG93KHBQYWdlVmlldywgblZhbHVlQWdlID09IHBXaWRnZXQtPkdldFZhbHVlQWdlKCkpOw0KLSAJCQkJfQ0KLSAJCQl9DQotCQl9DQotCX0NCi0JDQotCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwQW5ub3QsIFRSVUUpKQ0KLQl7DQotCQlpZiAocEZvcm1GaWxsZXItPk9uU2V0Rm9jdXMocEFubm90LCBuRmxhZykpDQotCQl7DQotCQkJcmV0dXJuIFRSVUU7DQotCQl9DQotCQllbHNlDQotCQkJcmV0dXJuIEZBTFNFOw0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MCUNGRkxfSUZvcm1GaWxsZXI6Ok9uS2lsbEZvY3VzKENQREZTREtfQW5ub3QqIHBBbm5vdCxGWF9VSU5UIG5GbGFnKQ0KLXsNCi0JaWYoIXBBbm5vdCkgcmV0dXJuIEZBTFNFOw0KLQlBU1NFUlQocEFubm90LT5HZXRQREZBbm5vdCgpLT5HZXRTdWJUeXBlKCkgPT0gIldpZGdldCIpOw0KLQ0KLQlpZiAoQ0ZGTF9Gb3JtRmlsbGVyKiBwRm9ybUZpbGxlciA9IEdldEZvcm1GaWxsZXIocEFubm90LCBGQUxTRSkpDQotCXsNCi0JCWlmIChwRm9ybUZpbGxlci0+T25LaWxsRm9jdXMocEFubm90LCBuRmxhZykpDQotCQl7DQotIAkJCWlmICghbV9iTm90aWZ5aW5nKQ0KLSAJCQl7DQotIAkJCQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IChDUERGU0RLX1dpZGdldCopcEFubm90Ow0KLSAJCQkJaWYgKHBXaWRnZXQtPkdldEFBY3Rpb24oQ1BERl9BQWN0aW9uOjpMb3NlRm9jdXMpKQ0KLSAJCQkJew0KLSAJCQkJCW1fYk5vdGlmeWluZyA9IFRSVUU7DQotIAkJCQkJcFdpZGdldC0+Q2xlYXJBcHBNb2RpZmllZCgpOw0KLSANCi0gCQkJCQlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcgPSBwV2lkZ2V0LT5HZXRQYWdlVmlldygpOw0KLSAJCQkJCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7DQotIA0KLSAJCQkJCVBERlNES19GaWVsZEFjdGlvbiBmYTsNCi0JCQkJCWZhLmJNb2RpZmllciA9IG1fcEFwcC0+RkZJX0lzQ1RSTEtleURvd24obkZsYWcpOw0KLSAJCQkJCWZhLmJTaGlmdCA9IG1fcEFwcC0+RkZJX0lzU0hJRlRLZXlEb3duKG5GbGFnKTsNCi0gDQotIAkJCQkJcEZvcm1GaWxsZXItPkdldEFjdGlvbkRhdGEocFBhZ2VWaWV3LCBDUERGX0FBY3Rpb246Okxvc2VGb2N1cywgZmEpOw0KLSANCi0gCQkJCQlwV2lkZ2V0LT5PbkFBY3Rpb24oQ1BERl9BQWN0aW9uOjpMb3NlRm9jdXMsIGZhLCBwUGFnZVZpZXcpOw0KLSAJCQkJCW1fYk5vdGlmeWluZyA9IEZBTFNFOw0KLSANCi0gCQkJCX0NCi0gCQkJfQ0KLQkJfQ0KLQkJZWxzZQ0KLQkJCXJldHVybiBGQUxTRTsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTAlDRkZMX0lGb3JtRmlsbGVyOjpJc1Zpc2libGUoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQpDQotew0KLQlyZXR1cm4gcFdpZGdldC0+SXNWaXNpYmxlKCk7DQotfQ0KLQ0KLUZYX0JPT0wJQ0ZGTF9JRm9ybUZpbGxlcjo6SXNSZWFkT25seShDUERGU0RLX1dpZGdldCogcFdpZGdldCkNCi17DQotCUFTU0VSVChwV2lkZ2V0ICE9IE5VTEwpOw0KLQ0KLQlpbnQgbkZpZWxkRmxhZ3MgPSBwV2lkZ2V0LT5HZXRGaWVsZEZsYWdzKCk7DQotDQotCXJldHVybiAobkZpZWxkRmxhZ3MgJiBGSUVMREZMQUdfUkVBRE9OTFkpID09IEZJRUxERkxBR19SRUFET05MWTsNCi19DQotDQotRlhfQk9PTAlDRkZMX0lGb3JtRmlsbGVyOjpJc0ZpbGxpbmdBbGxvd2VkKENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0KQ0KLXsNCi0JQVNTRVJUKHBXaWRnZXQgIT0gTlVMTCk7DQotDQotCWlmIChwV2lkZ2V0LT5HZXRGaWVsZFR5cGUoKSA9PSBGSUVMRFRZUEVfUFVTSEJVVFRPTikNCi0JCXJldHVybiBUUlVFOw0KLSAJZWxzZQ0KLSAJew0KLSAJCUNQREZfUGFnZSogcFBhZ2UgPSBwV2lkZ2V0LT5HZXRQREZQYWdlKCk7DQotIAkJQVNTRVJUKHBQYWdlICE9IE5VTEwpOw0KLSANCi0gCQlDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQgPSBwUGFnZS0+bV9wRG9jdW1lbnQ7DQotIAkJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsNCi0gDQotCQlGWF9EV09SRCBkd1Blcm1pc3Npb25zID0gcERvY3VtZW50LT5HZXRVc2VyUGVybWlzc2lvbnMoKTsNCi0gCQlyZXR1cm4gKGR3UGVybWlzc2lvbnMmRlBERlBFUk1fRklMTF9GT1JNKSB8fCANCi0gCQkJCShkd1Blcm1pc3Npb25zJkZQREZQRVJNX0FOTk9UX0ZPUk0pIHx8IA0KLSAJCQkoZHdQZXJtaXNzaW9ucyZGUERGUEVSTV9NT0RJRlkpOw0KLSAJfQ0KLQlyZXR1cm4gVFJVRTsJDQotfQ0KLQ0KLUNGRkxfRm9ybUZpbGxlciogQ0ZGTF9JRm9ybUZpbGxlcjo6R2V0Rm9ybUZpbGxlcihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0JPT0wgYlJlZ2lzdGVyKQ0KLXsNCi0vLyAJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsNCi0vLyAJQVNTRVJUKHBBbm5vdC0+R2V0UERGQW5ub3QoKS0+R2V0U3ViVHlwZSgpID09ICJXaWRnZXQiKTsNCi0NCi0JQ0ZGTF9Gb3JtRmlsbGVyICogcEZvcm1GaWxsZXIgPSBOVUxMOw0KLQltX01hcHMuTG9va3VwKHBBbm5vdCwgcEZvcm1GaWxsZXIpOw0KLQ0KLQlpZiAocEZvcm1GaWxsZXIpDQotCQlyZXR1cm4gcEZvcm1GaWxsZXI7DQotDQotCWlmIChiUmVnaXN0ZXIpDQotCXsNCi0JCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gKENQREZTREtfV2lkZ2V0KilwQW5ub3Q7CQkNCi0NCi0JCWludCBuRmllbGRUeXBlID0gcFdpZGdldC0+R2V0RmllbGRUeXBlKCk7DQotCQlzd2l0Y2gobkZpZWxkVHlwZSkNCi0JCXsNCi0gCQljYXNlIEZJRUxEVFlQRV9QVVNIQlVUVE9OOg0KLSAJCQlwRm9ybUZpbGxlciA9IG5ldyBDRkZMX1B1c2hCdXR0b24obV9wQXBwLCBwV2lkZ2V0KTsNCi0gCQkJYnJlYWs7DQotCQljYXNlIEZJRUxEVFlQRV9DSEVDS0JPWDoNCi0JCQlwRm9ybUZpbGxlciA9IG5ldyBDRkZMX0NoZWNrQm94KG1fcEFwcCwgcFdpZGdldCk7DQotCQkJYnJlYWs7DQotIAkJY2FzZSBGSUVMRFRZUEVfUkFESU9CVVRUT046DQotIAkJCXBGb3JtRmlsbGVyID0gbmV3IENGRkxfUmFkaW9CdXR0b24obV9wQXBwLCBwV2lkZ2V0KTsNCi0gCQkJYnJlYWs7DQotIAkJY2FzZSBGSUVMRFRZUEVfVEVYVEZJRUxEOg0KLQkJCXBGb3JtRmlsbGVyID0gbmV3IENGRkxfVGV4dEZpZWxkKG1fcEFwcCwgcFdpZGdldCk7DQotCQkJYnJlYWs7DQotCQljYXNlIEZJRUxEVFlQRV9MSVNUQk9YOg0KLQkJCXBGb3JtRmlsbGVyID0gbmV3IENGRkxfTGlzdEJveChtX3BBcHAsIHBXaWRnZXQpOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSBGSUVMRFRZUEVfQ09NQk9CT1g6DQotCQkJcEZvcm1GaWxsZXIgPSBuZXcgQ0ZGTF9Db21ib0JveChtX3BBcHAsIHBXaWRnZXQpOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSBGSUVMRFRZUEVfVU5LTk9XTjoNCi0JCWRlZmF1bHQ6DQotCQkJcEZvcm1GaWxsZXIgPSBOVUxMOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQ0KLQkJaWYgKHBGb3JtRmlsbGVyKQ0KLQkJew0KLQkJCW1fTWFwcy5TZXRBdChwQW5ub3QsIHBGb3JtRmlsbGVyKTsNCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gcEZvcm1GaWxsZXI7DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9JRm9ybUZpbGxlcjo6UmVtb3ZlRm9ybUZpbGxlcihDUERGU0RLX0Fubm90KiBwQW5ub3QpDQotew0KLQlpZiAoIHBBbm5vdCAhPSBOVUxMICkNCi0Jew0KLQkJVW5SZWdpc3RlckZvcm1GaWxsZXIoIHBBbm5vdCApOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9JRm9ybUZpbGxlcjo6VW5SZWdpc3RlckZvcm1GaWxsZXIoQ1BERlNES19Bbm5vdCogcEFubm90KQ0KLXsNCi0JQ0ZGTF9Gb3JtRmlsbGVyICogcEZvcm1GaWxsZXIgPSBOVUxMOw0KLQ0KLQlpZiAobV9NYXBzLkxvb2t1cChwQW5ub3QscEZvcm1GaWxsZXIpKQ0KLQl7DQotCQlpZiAocEZvcm1GaWxsZXIpDQotCQkJZGVsZXRlIHBGb3JtRmlsbGVyOw0KLQkJbV9NYXBzLlJlbW92ZUtleShwQW5ub3QpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9JRm9ybUZpbGxlcjo6U2V0Rm9jdXNBbm5vdFRhYihDUERGU0RLX0Fubm90KiBwV2lkZ2V0LCBGWF9CT09MIGJTYW1lRmllbGQsIEZYX0JPT0wgYk5leHQpDQotew0KLQ0KLX0NCi0NCi12b2lkIENGRkxfSUZvcm1GaWxsZXI6OlF1ZXJ5V2hlcmVQb3B1cCh2b2lkKiBwUHJpdmF0ZURhdGEsIEZYX0ZMT0FUIGZQb3B1cE1pbixGWF9GTE9BVCBmUG9wdXBNYXgsIEZYX0lOVDMyICYgblJldCwgRlhfRkxPQVQgJiBmUG9wdXBSZXQpDQotew0KLQlBU1NFUlQocFByaXZhdGVEYXRhICE9IE5VTEwpOw0KLQ0KLQlDRkZMX1ByaXZhdGVEYXRhKiBwRGF0YSA9IChDRkZMX1ByaXZhdGVEYXRhKilwUHJpdmF0ZURhdGE7DQotDQotCQ0KLQ0KLQ0KLQlDUERGX1JlY3QgcmNQYWdlVmlldygwLDAsMCwwKTsNCi0JcmNQYWdlVmlldy5yaWdodCA9IHBEYXRhLT5wV2lkZ2V0LT5HZXRQREZQYWdlKCktPkdldFBhZ2VXaWR0aCgpOw0KLQlyY1BhZ2VWaWV3LmJvdHRvbSA9IHBEYXRhLT5wV2lkZ2V0LT5HZXRQREZQYWdlKCktPkdldFBhZ2VIZWlnaHQoKTsNCi0JcmNQYWdlVmlldy5Ob3JtYWxpemUoKTsNCi0NCi0NCi0JQVNTRVJUKHBEYXRhLT5wV2lkZ2V0ICE9IE5VTEwpOw0KLQlDUERGX1JlY3QgcmNBbm5vdCA9IHBEYXRhLT5wV2lkZ2V0LT5HZXRSZWN0KCk7DQotDQotCUZYX0ZMT0FUIGZUb3AgPSAwLjBmOw0KLQlGWF9GTE9BVCBmQm90dG9tID0gMC4wZjsNCi0NCi0JQ1BERlNES19XaWRnZXQgKiBwV2lkZ2V0ID0gKENQREZTREtfV2lkZ2V0KilwRGF0YS0+cFdpZGdldDsNCi0Jc3dpdGNoIChwV2lkZ2V0LT5HZXRSb3RhdGUoKSAvIDkwKQ0KLQl7DQotCWRlZmF1bHQ6DQotCWNhc2UgMDoNCi0JCWZUb3AgPSByY1BhZ2VWaWV3LnRvcCAtIHJjQW5ub3QudG9wOw0KLQkJZkJvdHRvbSA9IHJjQW5ub3QuYm90dG9tIC0gcmNQYWdlVmlldy5ib3R0b207DQotCQlicmVhazsNCi0JY2FzZSAxOg0KLQkJZlRvcCA9IHJjQW5ub3QubGVmdCAtIHJjUGFnZVZpZXcubGVmdDsNCi0JCWZCb3R0b20gPSByY1BhZ2VWaWV3LnJpZ2h0IC0gcmNBbm5vdC5yaWdodDsNCi0JCWJyZWFrOw0KLQljYXNlIDI6DQotCQlmVG9wID0gcmNBbm5vdC5ib3R0b20gLSByY1BhZ2VWaWV3LmJvdHRvbTsNCi0JCWZCb3R0b20gPSByY1BhZ2VWaWV3LnRvcCAtIHJjQW5ub3QudG9wOw0KLQkJYnJlYWs7DQotCWNhc2UgMzoNCi0JCWZUb3AgPSByY1BhZ2VWaWV3LnJpZ2h0IC0gcmNBbm5vdC5yaWdodDsNCi0JCWZCb3R0b20gPSByY0Fubm90LmxlZnQgLSByY1BhZ2VWaWV3LmxlZnQ7DQotCQlicmVhazsNCi0JfQ0KLQ0KLQlGWF9GTE9BVCBmRmFjdEhlaWdodCA9IDA7DQotCUZYX0JPT0wgYkJvdHRvbSA9IFRSVUU7DQotCUZYX0ZMT0FUIGZNYXhMaXN0Qm94SGVpZ2h0ID0gMDsNCi0JaWYgKGZQb3B1cE1heCA+IEZGTF9NQVhMSVNUQk9YSEVJR0hUKQ0KLQl7DQotCQlpZiAoZlBvcHVwTWluID4gRkZMX01BWExJU1RCT1hIRUlHSFQpDQotCQl7DQotCQkJZk1heExpc3RCb3hIZWlnaHQgPSBmUG9wdXBNaW47DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJZk1heExpc3RCb3hIZWlnaHQgPSBGRkxfTUFYTElTVEJPWEhFSUdIVDsNCi0JCX0NCi0JfQ0KLQllbHNlDQotCQlmTWF4TGlzdEJveEhlaWdodCA9IGZQb3B1cE1heDsNCi0NCi0JaWYgKGZCb3R0b20gPiBmTWF4TGlzdEJveEhlaWdodCkNCi0Jew0KLQkJZkZhY3RIZWlnaHQgPSBmTWF4TGlzdEJveEhlaWdodDsNCi0JCWJCb3R0b20gPSBUUlVFOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJaWYgKGZUb3AgPiBmTWF4TGlzdEJveEhlaWdodCkNCi0JCXsNCi0JCQlmRmFjdEhlaWdodCA9IGZNYXhMaXN0Qm94SGVpZ2h0Ow0KLQkJCWJCb3R0b20gPSBGQUxTRTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlpZiAoZlRvcCA+IGZCb3R0b20pDQotCQkJew0KLQkJCQlmRmFjdEhlaWdodCA9IGZUb3A7DQotCQkJCWJCb3R0b20gPSBGQUxTRTsNCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJZkZhY3RIZWlnaHQgPSBmQm90dG9tOw0KLQkJCQliQm90dG9tID0gVFJVRTsNCi0JCQl9DQotCQl9DQotCX0NCi0NCi0JblJldCA9IGJCb3R0b20gPyAwIDogMTsNCi0JZlBvcHVwUmV0ID0gZkZhY3RIZWlnaHQ7DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9JRm9ybUZpbGxlcjo6T25TZXRXaW5kb3dSZWN0KHZvaWQqIHBQcml2YXRlRGF0YSwgY29uc3QgQ1BERl9SZWN0ICYgcmNXaW5kb3cpDQotew0KLQlBU1NFUlQocFByaXZhdGVEYXRhICE9IE5VTEwpOw0KLQ0KLQlDRkZMX1ByaXZhdGVEYXRhKiBwRGF0YSA9IChDRkZMX1ByaXZhdGVEYXRhKilwUHJpdmF0ZURhdGE7DQotDQotCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwRGF0YS0+cFdpZGdldCwgVFJVRSkpDQotCXsNCi0NCi0JCUNQREZfUmVjdCByY09sZCA9IHBGb3JtRmlsbGVyLT5QV0x0b0ZGTChwRm9ybUZpbGxlci0+R2V0V2luZG93UmVjdChwRGF0YS0+cFBhZ2VWaWV3KSk7DQotCQlDUERGX1JlY3QgcmNOZXcgPSBwRm9ybUZpbGxlci0+UFdMdG9GRkwocmNXaW5kb3cpOw0KLQkJcEZvcm1GaWxsZXItPlNldFdpbmRvd1JlY3QocERhdGEtPnBQYWdlVmlldywgcmNXaW5kb3cpOw0KLQ0KLQkJQ1BERl9SZWN0IHVuUmVjdCA9IHJjT2xkOw0KLQkJdW5SZWN0LlVuaW9uKHJjTmV3KTsNCi0JCS8vRlhfUkVDVCByY1JlY3QgPSB1blJlY3QuR2V0T3V0dGVyUmVjdCgpOw0KLQkJdW5SZWN0LmxlZnQgPSAoRlhfRkxPQVQpKHVuUmVjdC5sZWZ0IC0gMC41KTsNCi0JCXVuUmVjdC5yaWdodCA9IChGWF9GTE9BVCkodW5SZWN0LnJpZ2h0ICsgMC41KTsNCi0JCXVuUmVjdC50b3AgPSAoRlhfRkxPQVQpKHVuUmVjdC50b3AgKyAwLjUpOw0KLQkJdW5SZWN0LmJvdHRvbSA9IChGWF9GTE9BVCkodW5SZWN0LmJvdHRvbSAtMC41KTsNCi0JCW1fcEFwcC0+RkZJX0ludmFsaWRhdGUocERhdGEtPnBXaWRnZXQtPkdldFBERlBhZ2UoKSwgdW5SZWN0LmxlZnQsIHVuUmVjdC50b3AsIHVuUmVjdC5yaWdodCwgdW5SZWN0LmJvdHRvbSk7DQotCX0NCi19DQotDQotdm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpPbktleVN0cm9rZShGWF9CT09MIGJFZGl0T3JMaXN0LCB2b2lkKiBwUHJpdmF0ZURhdGEsIEZYX0lOVDMyIG5LZXlDb2RlLCBDRlhfV2lkZVN0cmluZyYgc3RyQ2hhbmdlLCANCi0JCQkJCQkJCSAgIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJDaGFuZ2VFeCwgRlhfQk9PTCBiS2V5RG93biwgDQotCQkJCQkJCQkgICBGWF9CT09MICYgYlJDLCBGWF9CT09MICYgYkV4aXQpDQotew0KLQlBU1NFUlQocFByaXZhdGVEYXRhICE9IE5VTEwpOw0KLQlDRkZMX1ByaXZhdGVEYXRhKiBwRGF0YSA9IChDRkZMX1ByaXZhdGVEYXRhKilwUHJpdmF0ZURhdGE7DQotCUFTU0VSVChwRGF0YS0+cFdpZGdldCAhPSBOVUxMKTsNCi0NCi0JQ0ZGTF9Gb3JtRmlsbGVyKiBwRm9ybUZpbGxlciA9IEdldEZvcm1GaWxsZXIocERhdGEtPnBXaWRnZXQsIEZBTFNFKTsNCi0JQVNTRVJUKHBGb3JtRmlsbGVyICE9IE5VTEwpOw0KLQ0KLQlwRm9ybUZpbGxlci0+T25LZXlTdHJva2UoYktleURvd24pOw0KLX0NCi0NCi12b2lkIENGRkxfSUZvcm1GaWxsZXI6Ok9uS2V5U3Ryb2tlQ29tbWl0KENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0LCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0JPT0wmIGJSQywgRlhfQk9PTCYgYkV4aXQsIEZYX0RXT1JEIG5GbGFnKQ0KLXsNCi0JaWYgKCFtX2JOb3RpZnlpbmcpDQotCXsNCi0JCUFTU0VSVChwV2lkZ2V0ICE9IE5VTEwpOw0KLQkJaWYgKHBXaWRnZXQtPkdldEFBY3Rpb24oQ1BERl9BQWN0aW9uOjpLZXlTdHJva2UpKQ0KLQkJew0KLQkJCW1fYk5vdGlmeWluZyA9IFRSVUU7DQotCQkJcFdpZGdldC0+Q2xlYXJBcHBNb2RpZmllZCgpOw0KLQ0KLQkJCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7DQotLy8gCQkJQ1JlYWRlcl9Eb2NWaWV3KiBwRG9jVmlldyA9IHBQYWdlVmlldy0+R2V0RG9jVmlldygpOw0KLS8vIAkJCUFTU0VSVChwRG9jVmlldyAhPSBOVUxMKTsNCi0JCQkNCi0JCQ0KLQ0KLQkJCVBERlNES19GaWVsZEFjdGlvbiBmYTsNCi0JCQlmYS5iTW9kaWZpZXIgPSBtX3BBcHAtPkZGSV9Jc0NUUkxLZXlEb3duKG5GbGFnKTsNCi0gCQkJZmEuYlNoaWZ0ID0gbV9wQXBwLT5GRklfSXNTSElGVEtleURvd24obkZsYWcpOw0KLQkJCWZhLmJXaWxsQ29tbWl0ID0gVFJVRTsNCi0JCQlmYS5uQ29tbWl0S2V5ID0gR2V0Q29tbWl0S2V5KCk7DQotCQkJZmEuYktleURvd24gPSBHZXRLZXlEb3duKCk7DQotCQkJZmEuYlJDID0gVFJVRTsNCi0NCi0JCQlDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwV2lkZ2V0LCBGQUxTRSk7DQotCQkJQVNTRVJUKHBGb3JtRmlsbGVyICE9IE5VTEwpOw0KLQ0KLQkJCXBGb3JtRmlsbGVyLT5HZXRBY3Rpb25EYXRhKHBQYWdlVmlldywgQ1BERl9BQWN0aW9uOjpLZXlTdHJva2UsIGZhKTsNCi0JCQlwRm9ybUZpbGxlci0+U2F2ZVN0YXRlKHBQYWdlVmlldyk7DQotDQotCQkJUERGU0RLX0ZpZWxkQWN0aW9uIGZhT2xkID0gZmE7DQotCQkJcFdpZGdldC0+T25BQWN0aW9uKENQREZfQUFjdGlvbjo6S2V5U3Ryb2tlLCBmYSwgcFBhZ2VWaWV3KTsNCi0NCi0JCQliUkMgPSBmYS5iUkM7DQotLy8JCQliRXhpdCA9ICFJc1ZhbGlkQW5ub3QobV9wQXBwLCBwRG9jdW1lbnQsIHBEb2NWaWV3LCBwUGFnZVZpZXcsIHBXaWRnZXQpOw0KLQ0KLQkJCW1fYk5vdGlmeWluZyA9IEZBTFNFOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9JRm9ybUZpbGxlcjo6T25WYWxpZGF0ZShDUERGU0RLX1dpZGdldCogcFdpZGdldCwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBGWF9CT09MJiBiUkMsIEZYX0JPT0wmIGJFeGl0LCBGWF9EV09SRCBuRmxhZykNCi17DQotCWlmICghbV9iTm90aWZ5aW5nKQ0KLQl7DQotCQlBU1NFUlQocFdpZGdldCAhPSBOVUxMKTsNCi0JCWlmIChwV2lkZ2V0LT5HZXRBQWN0aW9uKENQREZfQUFjdGlvbjo6VmFsaWRhdGUpKQ0KLQkJew0KLQkJCW1fYk5vdGlmeWluZyA9IFRSVUU7DQotCQkJcFdpZGdldC0+Q2xlYXJBcHBNb2RpZmllZCgpOw0KLQ0KLQkJCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7DQotLy8gCQkJQ1JlYWRlcl9Eb2NWaWV3KiBwRG9jVmlldyA9IHBQYWdlVmlldy0+R2V0RG9jVmlldygpOw0KLS8vIAkJCUFTU0VSVChwRG9jVmlldyAhPSBOVUxMKTsNCi0JCQkNCi0JCQkNCi0NCi0JCQlQREZTREtfRmllbGRBY3Rpb24gZmE7DQotCQkJZmEuYk1vZGlmaWVyID0gbV9wQXBwLT5GRklfSXNDVFJMS2V5RG93bihuRmxhZyk7DQotIAkJCWZhLmJTaGlmdCA9IG1fcEFwcC0+RkZJX0lzU0hJRlRLZXlEb3duKG5GbGFnKTsNCi0JCQlmYS5iS2V5RG93biA9IEdldEtleURvd24oKTsNCi0JCQlmYS5iUkMgPSBUUlVFOw0KLQ0KLQkJCUNGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBXaWRnZXQsIEZBTFNFKTsNCi0JCQlBU1NFUlQocEZvcm1GaWxsZXIgIT0gTlVMTCk7DQotDQotCQkJcEZvcm1GaWxsZXItPkdldEFjdGlvbkRhdGEocFBhZ2VWaWV3LCBDUERGX0FBY3Rpb246OlZhbGlkYXRlLCBmYSk7DQotCQkJcEZvcm1GaWxsZXItPlNhdmVTdGF0ZShwUGFnZVZpZXcpOw0KLQ0KLQkJCVBERlNES19GaWVsZEFjdGlvbiBmYU9sZCA9IGZhOw0KLQkJCXBXaWRnZXQtPk9uQUFjdGlvbihDUERGX0FBY3Rpb246OlZhbGlkYXRlLCBmYSwgcFBhZ2VWaWV3KTsNCi0NCi0JCQliUkMgPSBmYS5iUkM7DQotLy8JCQliRXhpdCA9ICFJc1ZhbGlkQW5ub3QobV9wQXBwLCBwRG9jdW1lbnQsIHBEb2NWaWV3LCBwUGFnZVZpZXcsIHBXaWRnZXQpOw0KLQ0KLQkJCW1fYk5vdGlmeWluZyA9IEZBTFNFOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9JRm9ybUZpbGxlcjo6T25DYWxjdWxhdGUoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfQk9PTCYgYkV4aXQsIEZYX0RXT1JEIG5GbGFnKQ0KLXsNCi0JaWYgKCFtX2JOb3RpZnlpbmcpDQotCXsNCi0JCUFTU0VSVChwV2lkZ2V0ICE9IE5VTEwpOw0KLQkJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsNCi0vLyAJCUNSZWFkZXJfRG9jVmlldyogcERvY1ZpZXcgPSBwUGFnZVZpZXctPkdldERvY1ZpZXcoKTsNCi0vLyAJCUFTU0VSVChwRG9jVmlldyAhPSBOVUxMKTsNCi0JCUNQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCA9IHBQYWdlVmlldy0+R2V0U0RLRG9jdW1lbnQoKTsNCi0JCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCQlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsNCi0JCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOw0KLQ0KLQkJcEludGVyRm9ybS0+T25DYWxjdWxhdGUocFdpZGdldC0+R2V0Rm9ybUZpZWxkKCkpOw0KLQ0KLS8vCQliRXhpdCA9ICFJc1ZhbGlkQW5ub3QobV9wQXBwLCBwRG9jdW1lbnQsIHBEb2NWaWV3LCBwUGFnZVZpZXcsIHBXaWRnZXQpOw0KLQ0KLQkJbV9iTm90aWZ5aW5nID0gRkFMU0U7DQotCX0NCi19DQotDQotdm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpPbkZvcm1hdChDUERGU0RLX1dpZGdldCogcFdpZGdldCwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBGWF9CT09MJiBiRXhpdCwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlpZiAoIW1fYk5vdGlmeWluZykNCi0Jew0KLQkJQVNTRVJUKHBXaWRnZXQgIT0gTlVMTCk7DQotCQlBU1NFUlQocFBhZ2VWaWV3ICE9IE5VTEwpOw0KLS8vIAkJQ1JlYWRlcl9Eb2NWaWV3KiBwRG9jVmlldyA9IHBQYWdlVmlldy0+R2V0RG9jVmlldygpOw0KLS8vIAkJQVNTRVJUKHBEb2NWaWV3ICE9IE5VTEwpOw0KLQkJQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50ID0gcFBhZ2VWaWV3LT5HZXRTREtEb2N1bWVudCgpOw0KLQkJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gKENQREZTREtfSW50ZXJGb3JtKilwRG9jdW1lbnQtPkdldEludGVyRm9ybSgpOw0KLQkJQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7DQotDQotCQlGWF9CT09MIGJGb3JtYXRlZCA9IEZBTFNFOw0KLQkJQ0ZYX1dpZGVTdHJpbmcgc1ZhbHVlID0gcEludGVyRm9ybS0+T25Gb3JtYXQocFdpZGdldC0+R2V0Rm9ybUZpZWxkKCksIEdldENvbW1pdEtleSgpLCBiRm9ybWF0ZWQpOw0KLQ0KLS8vCQliRXhpdCA9ICFJc1ZhbGlkQW5ub3QobV9wQXBwLCBwRG9jdW1lbnQsIHBEb2NWaWV3LCBwUGFnZVZpZXcsIHBXaWRnZXQpOw0KLQ0KLQkJaWYgKGJFeGl0KSByZXR1cm47DQotDQotCQlpZiAoYkZvcm1hdGVkKQ0KLQkJew0KLQkJCXBJbnRlckZvcm0tPlJlc2V0RmllbGRBcHBlYXJhbmNlKHBXaWRnZXQtPkdldEZvcm1GaWVsZCgpLCBzVmFsdWUsIFRSVUUpOw0KLQkJCXBJbnRlckZvcm0tPlVwZGF0ZUZpZWxkKHBXaWRnZXQtPkdldEZvcm1GaWVsZCgpKTsNCi0JCX0NCi0NCi0JCW1fYk5vdGlmeWluZyA9IEZBTFNFOw0KLQl9DQotfQ0KLQ0KLS8vIExSRVNVTFQgQ0FMTEJBQ0sgQ0ZGTF9JRm9ybUZpbGxlcjo6RkZMX1duZFByb2MoDQotLy8gCQkJCQkJCQkJICBpbnQgY29kZSwgICAgICAgLy8gaG9vayBjb2RlDQotLy8gCQkJCQkJCQkJICBXUEFSQU0gd1BhcmFtLCAgLy8gdmlydHVhbC1rZXkgY29kZQ0KLS8vIAkJCQkJCQkJCSAgTFBBUkFNIGxQYXJhbSAgIC8vIGtleXN0cm9rZS1tZXNzYWdlIGluZm9ybWF0aW9uDQotLy8gCQkJCQkJCQkJCSkNCi0vLyB7DQotLy8gCWlmIChjb2RlICE9IEhDX0FDVElPTikNCi0vLyAJew0KLS8vIAkJcmV0dXJuIENhbGxOZXh0SG9va0V4IChtX2hvb2tTaGVldCwgY29kZSwgd1BhcmFtLCBsUGFyYW0pOw0KLS8vIAl9DQotLy8gDQotLy8gCUZYU1lTX21lbWNweSgmZ19Nc2csICh2b2lkKilsUGFyYW0sIHNpemVvZihNU0cpKTsJDQotLy8gDQotLy8gCXJldHVybiAwOw0KLS8vIH0NCi0NCi0vLyBNU0cJQ0ZGTF9JRm9ybUZpbGxlcjo6R2V0TGFzdE1lc3NhZ2UoKQ0KLS8vIHsNCi0vLyAJcmV0dXJuIGdfTXNnOw0KLS8vIH0NCi0NCi1pbnQgQ0ZGTF9JRm9ybUZpbGxlcjo6R2V0Q29tbWl0S2V5KCkNCi17DQotLy8JTVNHIG1zZyA9IENGRkxfSUZvcm1GaWxsZXI6OkdldExhc3RNZXNzYWdlKCk7DQotDQotCWludCBuQ29tbWl0S2V5ID0gMDsNCi0vLyAJc3dpdGNoIChtc2cubWVzc2FnZSkNCi0vLyAJew0KLS8vIAljYXNlIFdNX0xCVVRUT05ET1dOOg0KLS8vIAljYXNlIFdNX0xCVVRUT05VUDoNCi0vLyAJCW5Db21taXRLZXkgPSAxOw0KLS8vIAkJYnJlYWs7DQotLy8gCWNhc2UgV01fS0VZRE9XTjoNCi0vLyAJCXN3aXRjaCAobXNnLndQYXJhbSkNCi0vLyAJCXsNCi0vLyAJCWNhc2UgVktfUkVUVVJOOg0KLS8vIAkJCW5Db21taXRLZXkgPSAyOw0KLS8vIAkJCWJyZWFrOw0KLS8vIAkJY2FzZSBWS19UQUI6DQotLy8gCQkJbkNvbW1pdEtleSA9IDM7DQotLy8gCQkJYnJlYWs7DQotLy8gCQl9DQotLy8gCQlicmVhazsNCi0vLyAJfQ0KLQ0KLQlyZXR1cm4gbkNvbW1pdEtleTsNCi19DQotDQotRlhfQk9PTCBDRkZMX0lGb3JtRmlsbGVyOjpHZXRLZXlEb3duKCkNCi17DQotCXJldHVybiBUUlVFOw0KLS8vIAlNU0cgbXNnID0gQ0ZGTF9JRm9ybUZpbGxlcjo6R2V0TGFzdE1lc3NhZ2UoKTsNCi0vLyANCi0vLyAJcmV0dXJuIG1zZy5tZXNzYWdlID09IFdNX0tFWURPV04gfHwgbXNnLm1lc3NhZ2UgPT0gV01fQ0hBUjsNCi19DQotDQotRlhfQk9PTAlDRkZMX0lGb3JtRmlsbGVyOjpJc1ZhbGlkQW5ub3QoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QpDQotew0KLQ0KLQlBU1NFUlQocFBhZ2VWaWV3ICE9IE5VTEwpOw0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQ0KLQlpZihwUGFnZVZpZXcpDQotCQlyZXR1cm4gcFBhZ2VWaWV3LT5Jc1ZhbGlkQW5ub3QocEFubm90LT5HZXRQREZBbm5vdCgpKTsNCi0JZWxzZQ0KLQkJcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi12b2lkIENGRkxfSUZvcm1GaWxsZXI6OkJlZm9yZVVuZG8oQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQ0KLXsNCi0NCi19DQotDQotdm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpCZWZvcmVSZWRvKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkNCi17DQotCUJlZm9yZVVuZG8ocERvY3VtZW50KTsNCi19DQotDQotdm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpBZnRlclVuZG8oQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQ0KLXsNCi19DQotDQotdm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpBZnRlclJlZG8oQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQ0KLXsNCi19DQotDQotRlhfQk9PTAlDRkZMX0lGb3JtRmlsbGVyOjpDYW5Db3B5KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkNCi17DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTAlDRkZMX0lGb3JtRmlsbGVyOjpDYW5DdXQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQ0KLXsNCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MCUNGRkxfSUZvcm1GaWxsZXI6OkNhblBhc3RlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkNCi17DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotdm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpEb0NvcHkoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQ0KLXsNCi19DQotDQotdm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpEb0N1dChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpDQotew0KLX0NCi0NCi12b2lkIENGRkxfSUZvcm1GaWxsZXI6OkRvUGFzdGUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQ0KLXsNCi0NCi19DQotdm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpPbkJlZm9yZUtleVN0cm9rZShGWF9CT09MIGJFZGl0T3JMaXN0LCB2b2lkKiBwUHJpdmF0ZURhdGEsIEZYX0lOVDMyIG5LZXlDb2RlLA0KLQkJCQkJCQkJCQkJICBDRlhfV2lkZVN0cmluZyAmIHN0ckNoYW5nZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZUV4LCANCi0JCQkJCQkJCQkJCSAgaW50IG5TZWxTdGFydCwgaW50IG5TZWxFbmQsDQotCQkJCQkJCQkJCUZYX0JPT0wgYktleURvd24sIEZYX0JPT0wgJiBiUkMsIEZYX0JPT0wgJiBiRXhpdCwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlBU1NFUlQocFByaXZhdGVEYXRhICE9IE5VTEwpOw0KLQlDRkZMX1ByaXZhdGVEYXRhKiBwRGF0YSA9IChDRkZMX1ByaXZhdGVEYXRhKilwUHJpdmF0ZURhdGE7DQotCUFTU0VSVChwRGF0YS0+cFdpZGdldCAhPSBOVUxMKTsNCi0JDQotCUNGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBEYXRhLT5wV2lkZ2V0LCBGQUxTRSk7DQotCUFTU0VSVChwRm9ybUZpbGxlciAhPSBOVUxMKTsNCi0JDQotCWlmICghbV9iTm90aWZ5aW5nKQ0KLQl7DQotCQlpZiAocERhdGEtPnBXaWRnZXQtPkdldEFBY3Rpb24oQ1BERl9BQWN0aW9uOjpLZXlTdHJva2UpKQ0KLQkJew0KLQkJCW1fYk5vdGlmeWluZyA9IFRSVUU7DQotCQkJaW50IG5BZ2UgPSBwRGF0YS0+cFdpZGdldC0+R2V0QXBwZWFyYW5jZUFnZSgpOw0KLQkJCWludCBuVmFsdWVBZ2UgPSBwRGF0YS0+cFdpZGdldC0+R2V0VmFsdWVBZ2UoKTsNCi0NCi0JCQlBU1NFUlQocERhdGEtPnBQYWdlVmlldyAhPSBOVUxMKTsNCi0JCQlDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQgID0gcERhdGEtPnBQYWdlVmlldy0+R2V0U0RLRG9jdW1lbnQoKTsNCi0JCQkNCi0JCQlQREZTREtfRmllbGRBY3Rpb24gZmE7DQotIAkJCWZhLmJNb2RpZmllciA9IG1fcEFwcC0+RkZJX0lzQ1RSTEtleURvd24obkZsYWcpOw0KLSAJCQlmYS5iU2hpZnQgPSBtX3BBcHAtPkZGSV9Jc1NISUZUS2V5RG93bihuRmxhZyk7DQotCQkJZmEuc0NoYW5nZSA9IHN0ckNoYW5nZTsNCi0JCQlmYS5zQ2hhbmdlRXggPSBzdHJDaGFuZ2VFeDsNCi0JCQlmYS5iS2V5RG93biA9IGJLZXlEb3duOw0KLQkJCWZhLmJXaWxsQ29tbWl0ID0gRkFMU0U7DQotCQkJZmEuYlJDID0gVFJVRTsNCi0JCQlmYS5uU2VsU3RhcnQgPSBuU2VsU3RhcnQ7DQotCQkJZmEublNlbEVuZCA9IG5TZWxFbmQ7DQotDQotDQotCQkJcEZvcm1GaWxsZXItPkdldEFjdGlvbkRhdGEocERhdGEtPnBQYWdlVmlldywgQ1BERl9BQWN0aW9uOjpLZXlTdHJva2UsIGZhKTsNCi0JCQlwRm9ybUZpbGxlci0+U2F2ZVN0YXRlKHBEYXRhLT5wUGFnZVZpZXcpOw0KLQkJCQ0KLQkJCWlmIChwRGF0YS0+cFdpZGdldC0+T25BQWN0aW9uKENQREZfQUFjdGlvbjo6S2V5U3Ryb2tlLCBmYSwgcERhdGEtPnBQYWdlVmlldykpDQotCQkJew0KLQkJCQlpZiAoIUlzVmFsaWRBbm5vdChwRGF0YS0+cFBhZ2VWaWV3LCBwRGF0YS0+cFdpZGdldCkpDQotCQkJCXsNCi0JCQkJCWJFeGl0ID0gVFJVRTsNCi0JCQkJCW1fYk5vdGlmeWluZyA9IEZBTFNFOw0KLQkJCQkJcmV0dXJuOw0KLQkJCQl9DQotCQkJCQ0KLQkJCQlpZiAobkFnZSAhPSBwRGF0YS0+cFdpZGdldC0+R2V0QXBwZWFyYW5jZUFnZSgpKQ0KLQkJCQl7DQotCQkJCQlDUFdMX1duZCogcFduZCA9IHBGb3JtRmlsbGVyLT5SZXNldFBERldpbmRvdyhwRGF0YS0+cFBhZ2VWaWV3LCBuVmFsdWVBZ2UgPT0gcERhdGEtPnBXaWRnZXQtPkdldFZhbHVlQWdlKCkpOw0KLQkJCQkJcERhdGEgPSAoQ0ZGTF9Qcml2YXRlRGF0YSopcFduZC0+R2V0QXR0YWNoZWREYXRhKCk7DQotCQkJCQliRXhpdCA9IFRSVUU7DQotCQkJCX0NCi0JCQkJDQotCQkJCWlmIChmYS5iUkMpDQotCQkJCXsNCi0JCQkJCXBGb3JtRmlsbGVyLT5TZXRBY3Rpb25EYXRhKHBEYXRhLT5wUGFnZVZpZXcsIENQREZfQUFjdGlvbjo6S2V5U3Ryb2tlLCBmYSk7DQotCQkJCQliUkMgPSBGQUxTRTsNCi0JCQkJfQ0KLQkJCQllbHNlDQotCQkJCXsNCi0JCQkJCXBGb3JtRmlsbGVyLT5SZXN0b3JlU3RhdGUocERhdGEtPnBQYWdlVmlldyk7DQotCQkJCQliUkMgPSBGQUxTRTsNCi0JCQkJfQ0KLQkJCQkNCi0JCQkJaWYgKHBEb2N1bWVudC0+R2V0Rm9jdXNBbm5vdCgpICE9IHBEYXRhLT5wV2lkZ2V0KQ0KLQkJCQl7DQotCQkJCQlwRm9ybUZpbGxlci0+Q29tbWl0RGF0YShwRGF0YS0+cFBhZ2VWaWV3LG5GbGFnKTsNCi0JCQkJCWJFeGl0ID0gVFJVRTsNCi0JCQkJfQ0KLQkJCX0NCi0JCQllbHNlDQotCQkJewkJCQ0KLQkJCQlpZiAoIUlzVmFsaWRBbm5vdChwRGF0YS0+cFBhZ2VWaWV3LCBwRGF0YS0+cFdpZGdldCkpDQotCQkJCXsNCi0JCQkJCWJFeGl0ID0gVFJVRTsNCi0JCQkJCW1fYk5vdGlmeWluZyA9IEZBTFNFOw0KLQkJCQkJcmV0dXJuOw0KLQkJCQl9DQotCQkJfQ0KLQkJCQ0KLQkJCW1fYk5vdGlmeWluZyA9IEZBTFNFOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQJQ0ZGTF9JRm9ybUZpbGxlcjo6T25BZnRlcktleVN0cm9rZShGWF9CT09MIGJFZGl0T3JMaXN0LCB2b2lkKiBwUHJpdmF0ZURhdGEsIEZYX0JPT0wgJiBiRXhpdCxGWF9EV09SRCBuRmxhZykgDQotew0KLQlBU1NFUlQocFByaXZhdGVEYXRhICE9IE5VTEwpOw0KLQlDRkZMX1ByaXZhdGVEYXRhKiBwRGF0YSA9IChDRkZMX1ByaXZhdGVEYXRhKilwUHJpdmF0ZURhdGE7DQotCUFTU0VSVChwRGF0YS0+cFdpZGdldCAhPSBOVUxMKTsNCi0JDQotCUNGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBEYXRhLT5wV2lkZ2V0LCBGQUxTRSk7DQotCUFTU0VSVChwRm9ybUZpbGxlciAhPSBOVUxMKTsNCi0JDQotCWlmICghYkVkaXRPckxpc3QpDQotCQlwRm9ybUZpbGxlci0+T25LZXlTdHJva2UoYkV4aXQpOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9Gb3JtRmlsbGVyLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9JRm9ybUZpbGxlci5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfQ2hlY2tCb3guaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0NvbWJvQm94LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9MaXN0Qm94LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9QdXNoQnV0dG9uLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9SYWRpb0J1dHRvbi5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfVGV4dEZpZWxkLmgiCisKKyNkZWZpbmUgRkZMX01BWExJU1RCT1hIRUlHSFQJCTE0MC4wZgorCisvLyBISE9PSyBDRkZMX0lGb3JtRmlsbGVyOjptX2hvb2tTaGVldCA9IE5VTEw7CisvLyBNU0cgQ0ZGTF9JRm9ybUZpbGxlcjo6Z19Nc2c7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENGRkxfSUZvcm1GaWxsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ0ZGTF9JRm9ybUZpbGxlcjo6Q0ZGTF9JRm9ybUZpbGxlcihDUERGRG9jX0Vudmlyb25tZW50KiBwQXBwKSA6IAorCW1fcEFwcChwQXBwKSwKKwltX2JOb3RpZnlpbmcoRkFMU0UpCit7Cit9CisKK0NGRkxfSUZvcm1GaWxsZXI6On5DRkZMX0lGb3JtRmlsbGVyKCkKK3sKKwlGWF9QT1NJVElPTiBwb3MgPSBtX01hcHMuR2V0U3RhcnRQb3NpdGlvbigpOworCXdoaWxlIChwb3MpCisJeworCQlDUERGU0RLX0Fubm90ICogcEFubm90ID0gTlVMTDsKKwkJQ0ZGTF9Gb3JtRmlsbGVyICogcEZvcm1GaWxsZXIgPSBOVUxMOworCQltX01hcHMuR2V0TmV4dEFzc29jKHBvcyxwQW5ub3QscEZvcm1GaWxsZXIpOworCQlkZWxldGUgcEZvcm1GaWxsZXI7CisJfQorCW1fTWFwcy5SZW1vdmVBbGwoKTsKK30KKworRlhfQk9PTAlDRkZMX0lGb3JtRmlsbGVyOjpBbm5vdF9IaXRUZXN0KENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyxDUERGU0RLX0Fubm90KiBwQW5ub3QsIENQREZfUG9pbnQgcG9pbnQpCit7CisJQ1BERl9SZWN0IHJjID0gcEFubm90LT5HZXRSZWN0KCk7CisJaWYocmMuQ29udGFpbnMocG9pbnQueCwgcG9pbnQueSkpCisJCXJldHVybiBUUlVFOworCXJldHVybiBGQUxTRTsKK30KKworRlhfUkVDVCBDRkZMX0lGb3JtRmlsbGVyOjpHZXRWaWV3QkJveChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCkKK3sKKwlpZiAoQ0ZGTF9Gb3JtRmlsbGVyKiBwRm9ybUZpbGxlciA9IEdldEZvcm1GaWxsZXIocEFubm90LCBGQUxTRSkpCisJeworCQlyZXR1cm4gcEZvcm1GaWxsZXItPkdldFZpZXdCQm94KHBQYWdlVmlldywgcEFubm90KTsKKwl9CisJZWxzZQorCXsKKwkJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsKKwkJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKworCQlDUERGX0Fubm90KiBwUERGQW5ub3QgPSBwQW5ub3QtPkdldFBERkFubm90KCk7CisJCUFTU0VSVChwUERGQW5ub3QgIT0gTlVMTCk7CisKKwkJQ1BERl9SZWN0IHJjQW5ub3Q7CisJCXBQREZBbm5vdC0+R2V0UmVjdChyY0Fubm90KTsKKworLy8gCQlDUmVjdCByY1dpbjsKKy8vIAkJcFBhZ2VWaWV3LT5Eb2NUb1dpbmRvdyhyY0Fubm90LCByY1dpbik7CisJCUNQREZfUmVjdCByY1dpbiA9IENQV0xfVXRpbHM6OkluZmxhdGVSZWN0KHJjQW5ub3QsMSk7CisvLwkJcmNXaW4uSW5mbGF0ZVJlY3QoMSwgMSk7CisKKwkJcmV0dXJuIHJjV2luLkdldE91dHRlclJlY3QoKTsKKwl9Cit9CisKK3ZvaWQgQ0ZGTF9JRm9ybUZpbGxlcjo6T25EcmF3KENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgLypIREMgaERDLCovIENQREZTREtfQW5ub3QqIHBBbm5vdCwgCisJCQkJCQlDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLAorCQkJCQkJLypjb25zdCBDUmVjdCYgcmNXaW5kb3csKi8gRlhfRFdPUkQgZHdGbGFncykKK3sKKwlBU1NFUlQocFBhZ2VWaWV3ICE9IE5VTEwpOworCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gKENQREZTREtfV2lkZ2V0KilwQW5ub3Q7CisKKwlpZiAoSXNWaXNpYmxlKHBXaWRnZXQpKQorCXsKKwkJaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBBbm5vdCwgRkFMU0UpKQorCQl7CisgCQkJaWYgKHBGb3JtRmlsbGVyLT5Jc1ZhbGlkKCkpCisgCQkJeworCQkJCXBGb3JtRmlsbGVyLT5PbkRyYXcocFBhZ2VWaWV3LCBwQW5ub3QsIHBEZXZpY2UsIHBVc2VyMkRldmljZSwgZHdGbGFncyk7CisJCQkJCisJCQkJcEFubm90LT5HZXRQREZQYWdlKCk7CisJCQkJCisKKwkJCQlDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQgPSBtX3BBcHAtPkdldEN1cnJlbnREb2MoKTsKKwkJCQlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOworCisJCQkJaWYgKHBEb2N1bWVudC0+R2V0Rm9jdXNBbm5vdCgpID09IHBBbm5vdCkKKwkJCQl7CisJCQkJCUNQREZfUmVjdCByY0ZvY3VzID0gcEZvcm1GaWxsZXItPkdldEZvY3VzQm94KHBQYWdlVmlldyk7CisJCQkJCWlmICghcmNGb2N1cy5Jc0VtcHR5KCkpCisJCQkJCXsKKwkJCQkJCUNGWF9QYXRoRGF0YSBwYXRoOworCQkJCQkJCisJCQkJCQlwYXRoLlNldFBvaW50Q291bnQoNSk7CisJCQkJCQlwYXRoLlNldFBvaW50KDAsIHJjRm9jdXMubGVmdCwgIHJjRm9jdXMudG9wLCBGWFBUX01PVkVUTyk7CisJCQkJCQlwYXRoLlNldFBvaW50KDEsIHJjRm9jdXMubGVmdCwgIHJjRm9jdXMuYm90dG9tLCBGWFBUX0xJTkVUTyk7CisJCQkJCQlwYXRoLlNldFBvaW50KDIsIHJjRm9jdXMucmlnaHQsICByY0ZvY3VzLmJvdHRvbSwgRlhQVF9MSU5FVE8pOworCQkJCQkJcGF0aC5TZXRQb2ludCgzLCByY0ZvY3VzLnJpZ2h0LCAgcmNGb2N1cy50b3AsIEZYUFRfTElORVRPKTsKKwkJCQkJCXBhdGguU2V0UG9pbnQoNCwgcmNGb2N1cy5sZWZ0LCAgcmNGb2N1cy50b3AsIEZYUFRfTElORVRPKTsKKwkJCQkJCQorCQkJCQkJQ0ZYX0dyYXBoU3RhdGVEYXRhIGdzZDsKKwkJCQkJCWdzZC5TZXREYXNoQ291bnQoMSk7CQkJCQorCQkJCQkJZ3NkLm1fRGFzaEFycmF5WzBdID0gMS4wZjsKKwkJCQkJCWdzZC5tX0Rhc2hQaGFzZSA9IDA7CQorCQkJCQkJCisJCQkJCQlnc2QubV9MaW5lV2lkdGggPSAxLjBmOworCQkJCQkJcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgJmdzZCwgMCwgQXJnYkVuY29kZSgyNTUsMCwwLDApLCBGWEZJTExfQUxURVJOQVRFKTsKKworCQkJCQkvLwk6OkRyYXdGb2N1c1JlY3QoaERDLCAmcmNGb2N1cyk7CQorCQkJCQl9CisJCQkJfQorCisJCQkJcmV0dXJuOworCQkJfQorCQl9CisKKwkJaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBBbm5vdCwgRkFMU0UpKQorCQkJcEZvcm1GaWxsZXItPk9uRHJhd0RlYWN0aXZlKHBQYWdlVmlldywgcEFubm90LCBwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIGR3RmxhZ3MpOworCQllbHNlCisJCQlwV2lkZ2V0LT5EcmF3QXBwZWFyYW5jZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIENQREZfQW5ub3Q6Ok5vcm1hbCwgTlVMTCk7CisKKwkJaWYgKCFJc1JlYWRPbmx5KHBXaWRnZXQpICYmIElzRmlsbGluZ0FsbG93ZWQocFdpZGdldCkpCisJCXsKKwkJCXBXaWRnZXQtPkRyYXdTaGFkb3cocERldmljZSwgcFBhZ2VWaWV3KTsKKwkJfQorCQorCX0KK30KKwordm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpPbkNyZWF0ZShDUERGU0RLX0Fubm90KiBwQW5ub3QpCit7CisJaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBBbm5vdCwgRkFMU0UpKQorCXsKKwkJcEZvcm1GaWxsZXItPk9uQ3JlYXRlKHBBbm5vdCk7CisJfQorfQorCit2b2lkIENGRkxfSUZvcm1GaWxsZXI6Ok9uTG9hZChDUERGU0RLX0Fubm90KiBwQW5ub3QpCit7CisJaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBBbm5vdCwgRkFMU0UpKQorCXsKKwkJcEZvcm1GaWxsZXItPk9uTG9hZChwQW5ub3QpOworCX0KK30KKwordm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpPbkRlbGV0ZShDUERGU0RLX0Fubm90KiBwQW5ub3QpCit7CisJaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBBbm5vdCwgRkFMU0UpKQorCXsKKwkJcEZvcm1GaWxsZXItPk9uRGVsZXRlKHBBbm5vdCk7CisJfQorCisJVW5SZWdpc3RlckZvcm1GaWxsZXIocEFubm90KTsKK30KKwordm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpPbk1vdXNlRW50ZXIoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWcpCit7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKwlBU1NFUlQocEFubm90LT5HZXRQREZBbm5vdCgpLT5HZXRTdWJUeXBlKCkgPT0gIldpZGdldCIpOworCQorCWlmICghbV9iTm90aWZ5aW5nKQorCXsKKwkJQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSAoQ1BERlNES19XaWRnZXQqKXBBbm5vdDsKKwkJaWYgKHBXaWRnZXQtPkdldEFBY3Rpb24oQ1BERl9BQWN0aW9uOjpDdXJzb3JFbnRlcikpCisJCXsKKwkJCW1fYk5vdGlmeWluZyA9IFRSVUU7CisJCQkKKwkJCWludCBuVmFsdWVBZ2UgPSBwV2lkZ2V0LT5HZXRWYWx1ZUFnZSgpOworCisJCQlwV2lkZ2V0LT5DbGVhckFwcE1vZGlmaWVkKCk7CisJCQkKKwkJCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7CisJCQkKKwkJCQorCQkJCisJCQlQREZTREtfRmllbGRBY3Rpb24gZmE7CisJCQlmYS5iTW9kaWZpZXIgPSBtX3BBcHAtPkZGSV9Jc0NUUkxLZXlEb3duKG5GbGFnKTsKKyAJCQlmYS5iU2hpZnQgPSBtX3BBcHAtPkZGSV9Jc1NISUZUS2V5RG93bihuRmxhZyk7CisJCQlwV2lkZ2V0LT5PbkFBY3Rpb24oQ1BERl9BQWN0aW9uOjpDdXJzb3JFbnRlciwgZmEsIHBQYWdlVmlldyApOworCQkJbV9iTm90aWZ5aW5nID0gRkFMU0U7CisJCQkKKwkJCS8vaWYgKCAhSXNWYWxpZEFubm90KHBQYWdlVmlldywgcEFubm90KSApIHJldHVybjsKKwkJCQorCQkJaWYgKHBXaWRnZXQtPklzQXBwTW9kaWZpZWQoKSkKKwkJCXsKKwkJCQlpZiAoQ0ZGTF9Gb3JtRmlsbGVyKiBwRm9ybUZpbGxlciA9IEdldEZvcm1GaWxsZXIocFdpZGdldCwgRkFMU0UpKQorCQkJCXsKKwkJCQkJcEZvcm1GaWxsZXItPlJlc2V0UERGV2luZG93KHBQYWdlVmlldywgcFdpZGdldC0+R2V0VmFsdWVBZ2UoKSA9PSBuVmFsdWVBZ2UpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkKKwlpZiAoQ0ZGTF9Gb3JtRmlsbGVyKiBwRm9ybUZpbGxlciA9IEdldEZvcm1GaWxsZXIocEFubm90LCBUUlVFKSkKKwl7CisJCXBGb3JtRmlsbGVyLT5Pbk1vdXNlRW50ZXIocFBhZ2VWaWV3LCBwQW5ub3QpOworCX0KK30KKwordm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpPbk1vdXNlRXhpdChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZykKK3sKKwlBU1NFUlQocEFubm90ICE9IE5VTEwpOworCUFTU0VSVChwQW5ub3QtPkdldFBERkFubm90KCktPkdldFN1YlR5cGUoKSA9PSAiV2lkZ2V0Iik7CisJCisJaWYgKCFtX2JOb3RpZnlpbmcpCisJeworCQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IChDUERGU0RLX1dpZGdldCopcEFubm90OworCQlpZiAocFdpZGdldC0+R2V0QUFjdGlvbihDUERGX0FBY3Rpb246OkN1cnNvckV4aXQpKQorCQl7CisJCQltX2JOb3RpZnlpbmcgPSBUUlVFOworCQkJcFdpZGdldC0+R2V0QXBwZWFyYW5jZUFnZSgpOworCQkJaW50IG5WYWx1ZUFnZSA9IHBXaWRnZXQtPkdldFZhbHVlQWdlKCk7CisJCQlwV2lkZ2V0LT5DbGVhckFwcE1vZGlmaWVkKCk7CisJCQkKKwkJCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7CisJCQkKKwkJCQorCQkJCisJCQlQREZTREtfRmllbGRBY3Rpb24gZmE7CisJCQlmYS5iTW9kaWZpZXIgPSBtX3BBcHAtPkZGSV9Jc0NUUkxLZXlEb3duKG5GbGFnKTsKKyAJCQlmYS5iU2hpZnQgPSBtX3BBcHAtPkZGSV9Jc1NISUZUS2V5RG93bihuRmxhZyk7CisJCQkKKwkJCXBXaWRnZXQtPk9uQUFjdGlvbihDUERGX0FBY3Rpb246OkN1cnNvckV4aXQsIGZhLCBwUGFnZVZpZXcpOworCQkJbV9iTm90aWZ5aW5nID0gRkFMU0U7CisJCQkKKwkJCS8vaWYgKCFJc1ZhbGlkQW5ub3QocFBhZ2VWaWV3LCBwQW5ub3QpKSByZXR1cm47CisJCQkKKwkJCWlmIChwV2lkZ2V0LT5Jc0FwcE1vZGlmaWVkKCkpCisJCQl7CisJCQkJaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBXaWRnZXQsIEZBTFNFKSkKKwkJCQl7CisJCQkJCXBGb3JtRmlsbGVyLT5SZXNldFBERldpbmRvdyhwUGFnZVZpZXcsIG5WYWx1ZUFnZSA9PSBwV2lkZ2V0LT5HZXRWYWx1ZUFnZSgpKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCisJaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBBbm5vdCwgRkFMU0UpKQorCXsKKwkJcEZvcm1GaWxsZXItPk9uTW91c2VFeGl0KHBQYWdlVmlldywgcEFubm90KTsKKwl9Cit9CisKK0ZYX0JPT0wJQ0ZGTF9JRm9ybUZpbGxlcjo6T25MQnV0dG9uRG93bihDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQoreworCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7CisJQVNTRVJUKHBBbm5vdC0+R2V0UERGQW5ub3QoKS0+R2V0U3ViVHlwZSgpID09ICJXaWRnZXQiKTsKKwkKKwlpZiAoIW1fYk5vdGlmeWluZykKKwl7CisJCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gKENQREZTREtfV2lkZ2V0KilwQW5ub3Q7CisJCWlmIChBbm5vdF9IaXRUZXN0KHBQYWdlVmlldywgcEFubm90LCBwb2ludCkgJiYgcFdpZGdldC0+R2V0QUFjdGlvbihDUERGX0FBY3Rpb246OkJ1dHRvbkRvd24pKQorCQl7CisJCQltX2JOb3RpZnlpbmcgPSBUUlVFOworCQkJcFdpZGdldC0+R2V0QXBwZWFyYW5jZUFnZSgpOworCQkJaW50IG5WYWx1ZUFnZSA9IHBXaWRnZXQtPkdldFZhbHVlQWdlKCk7CisJCQlwV2lkZ2V0LT5DbGVhckFwcE1vZGlmaWVkKCk7CisJCQkKKwkJCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7CisJCQkKKwkJCQorCQkJCisJCQlQREZTREtfRmllbGRBY3Rpb24gZmE7CisJCQlmYS5iTW9kaWZpZXIgPSBtX3BBcHAtPkZGSV9Jc0NUUkxLZXlEb3duKG5GbGFncyk7CisgCQkJZmEuYlNoaWZ0ID0gbV9wQXBwLT5GRklfSXNTSElGVEtleURvd24obkZsYWdzKTsKKwkJCXBXaWRnZXQtPk9uQUFjdGlvbihDUERGX0FBY3Rpb246OkJ1dHRvbkRvd24sIGZhLCBwUGFnZVZpZXcpOworCQkJbV9iTm90aWZ5aW5nID0gRkFMU0U7CisJCQkKKwkJCWlmICghSXNWYWxpZEFubm90KHBQYWdlVmlldywgcEFubm90KSkgcmV0dXJuIFRSVUU7CisJCQkKKwkJCWlmIChwV2lkZ2V0LT5Jc0FwcE1vZGlmaWVkKCkpCisJCQl7CisJCQkJaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBXaWRnZXQsIEZBTFNFKSkKKwkJCQl7CisJCQkJCXBGb3JtRmlsbGVyLT5SZXNldFBERldpbmRvdyhwUGFnZVZpZXcsIG5WYWx1ZUFnZSA9PSBwV2lkZ2V0LT5HZXRWYWx1ZUFnZSgpKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCisJaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBBbm5vdCwgRkFMU0UpKQorCXsKKwkJcmV0dXJuIHBGb3JtRmlsbGVyLT5PbkxCdXR0b25Eb3duKHBQYWdlVmlldywgcEFubm90LCBuRmxhZ3MsIHBvaW50KTsKKwl9CisJCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MCUNGRkxfSUZvcm1GaWxsZXI6Ok9uTEJ1dHRvblVwKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpCit7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKwlBU1NFUlQocEFubm90LT5HZXRQREZBbm5vdCgpLT5HZXRTdWJUeXBlKCkgPT0gIldpZGdldCIpOworCQorCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gKENQREZTREtfV2lkZ2V0KilwQW5ub3Q7CisJLy8gCUNSZWFkZXJfUGFnZSogcFBhZ2UgPSBwQW5ub3QtPkdldFBhZ2UoKTsKKwkvLyAJQVNTRVJUKHBQYWdlICE9IE5VTEwpOworCUNQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCA9IG1fcEFwcC0+R2V0Q3VycmVudERvYygpOworCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7CQkKKwkKKwlzd2l0Y2ggKHBXaWRnZXQtPkdldEZpZWxkVHlwZSgpKQorCXsKKwljYXNlIEZJRUxEVFlQRV9QVVNIQlVUVE9OOgorCWNhc2UgRklFTERUWVBFX0NIRUNLQk9YOgorCWNhc2UgRklFTERUWVBFX1JBRElPQlVUVE9OOgorCQlpZiAoR2V0Vmlld0JCb3gocFBhZ2VWaWV3LCBwQW5ub3QpLkNvbnRhaW5zKChpbnQpcG9pbnQueCwgKGludClwb2ludC55KSkKKwkJeworCQkJcERvY3VtZW50LT5TZXRGb2N1c0Fubm90KHBBbm5vdCk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcERvY3VtZW50LT5TZXRGb2N1c0Fubm90KHBBbm5vdCk7CisJCWJyZWFrOworCX0KKwkKKwlGWF9CT09MIGJSZXQgPSBGQUxTRTsKKwkKKwlpZiAoQ0ZGTF9Gb3JtRmlsbGVyKiBwRm9ybUZpbGxlciA9IEdldEZvcm1GaWxsZXIocEFubm90LCBGQUxTRSkpCisJeworCQliUmV0ID0gcEZvcm1GaWxsZXItPk9uTEJ1dHRvblVwKHBQYWdlVmlldywgcEFubm90LCBuRmxhZ3MsIHBvaW50KTsKKwl9CisKKwlpZiAocERvY3VtZW50LT5HZXRGb2N1c0Fubm90KCkgPT0gcEFubm90KQorCXsKKwkJRlhfQk9PTCBiRXhpdCA9IEZBTFNFOworCQlGWF9CT09MIGJSZXNldCA9IEZBTFNFOworCQlPbkJ1dHRvblVwKHBXaWRnZXQsIHBQYWdlVmlldywgYlJlc2V0LCBiRXhpdCxuRmxhZ3MpOworCQlpZiAoYkV4aXQpIHJldHVybiBUUlVFOworCX0KKwlyZXR1cm4gYlJldDsKK30KKwordm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpPbkJ1dHRvblVwKENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0LCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0JPT0wmIGJSZXNldCwgRlhfQk9PTCYgYkV4aXQsRlhfVUlOVCBuRmxhZykKK3sKKwlBU1NFUlQocFdpZGdldCAhPSBOVUxMKTsKKwkKKwlpZiAoIW1fYk5vdGlmeWluZykKKwl7CisJCWlmIChwV2lkZ2V0LT5HZXRBQWN0aW9uKENQREZfQUFjdGlvbjo6QnV0dG9uVXApKQorCQl7CisJCQltX2JOb3RpZnlpbmcgPSBUUlVFOworCQkJaW50IG5BZ2UgPSBwV2lkZ2V0LT5HZXRBcHBlYXJhbmNlQWdlKCk7CisJCQlpbnQgblZhbHVlQWdlID0gcFdpZGdldC0+R2V0VmFsdWVBZ2UoKTsKKwkJCQorCQkJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsKKy8vIAkJCUNSZWFkZXJfRG9jVmlldyogcERvY1ZpZXcgPSBwUGFnZVZpZXctPkdldERvY1ZpZXcoKTsKKy8vIAkJCUFTU0VSVChwRG9jVmlldyAhPSBOVUxMKTsKKwkJCQorCQkJCisJCQkKKwkJCVBERlNES19GaWVsZEFjdGlvbiBmYTsKKwkJCWZhLmJNb2RpZmllciA9IG1fcEFwcC0+RkZJX0lzQ1RSTEtleURvd24obkZsYWcpOworIAkJCWZhLmJTaGlmdCA9IG1fcEFwcC0+RkZJX0lzU0hJRlRLZXlEb3duKG5GbGFnKTsKKworCQkJcFdpZGdldC0+T25BQWN0aW9uKENQREZfQUFjdGlvbjo6QnV0dG9uVXAsIGZhLCBwUGFnZVZpZXcpOworCQkJbV9iTm90aWZ5aW5nID0gRkFMU0U7CisJCQkKKwkJCWlmICghSXNWYWxpZEFubm90KHBQYWdlVmlldywgcFdpZGdldCkpCisJCQl7CisJCQkJYkV4aXQgPSBUUlVFOworCQkJCXJldHVybjsKKwkJCX0KKwkJCQorCQkJaWYgKG5BZ2UgIT0gcFdpZGdldC0+R2V0QXBwZWFyYW5jZUFnZSgpKQorCQkJeworCQkJCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwV2lkZ2V0LCBGQUxTRSkpCisJCQkJeworCQkJCQlwRm9ybUZpbGxlci0+UmVzZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBuVmFsdWVBZ2UgPT0gcFdpZGdldC0+R2V0VmFsdWVBZ2UoKSk7CisJCQkJfQorCQkJCQorCQkJCWJSZXNldCA9IFRSVUU7CisJCQl9CisJCX0KKwl9Cit9CisKK0ZYX0JPT0wJQ0ZGTF9JRm9ybUZpbGxlcjo6T25MQnV0dG9uRGJsQ2xrKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpCit7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKwlBU1NFUlQocEFubm90LT5HZXRQREZBbm5vdCgpLT5HZXRTdWJUeXBlKCkgPT0gIldpZGdldCIpOworCisJaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBBbm5vdCwgRkFMU0UpKQorCXsKKwkJcmV0dXJuIHBGb3JtRmlsbGVyLT5PbkxCdXR0b25EYmxDbGsocFBhZ2VWaWV3LCBwQW5ub3QsIG5GbGFncywgcG9pbnQpOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTAlDRkZMX0lGb3JtRmlsbGVyOjpPbk1vdXNlTW92ZShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQoreworCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7CisJQVNTRVJUKHBBbm5vdC0+R2V0UERGQW5ub3QoKS0+R2V0U3ViVHlwZSgpID09ICJXaWRnZXQiKTsKKworCS8vY2hhbmdlIGN1cnNvcgorCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwQW5ub3QsIFRSVUUpKQorCXsKKwkJcmV0dXJuIHBGb3JtRmlsbGVyLT5Pbk1vdXNlTW92ZShwUGFnZVZpZXcsIHBBbm5vdCwgbkZsYWdzLCBwb2ludCk7CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MCUNGRkxfSUZvcm1GaWxsZXI6Ok9uTW91c2VXaGVlbChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIHNob3J0IHpEZWx0YSwgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpCit7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKwlBU1NFUlQocEFubm90LT5HZXRQREZBbm5vdCgpLT5HZXRTdWJUeXBlKCkgPT0gIldpZGdldCIpOworCisJaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBBbm5vdCwgRkFMU0UpKQorCXsKKwkJcmV0dXJuIHBGb3JtRmlsbGVyLT5Pbk1vdXNlV2hlZWwocFBhZ2VWaWV3LCBwQW5ub3QsIG5GbGFncywgekRlbHRhLCBwb2ludCk7CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MCUNGRkxfSUZvcm1GaWxsZXI6Ok9uUkJ1dHRvbkRvd24oQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkKK3sKKwlBU1NFUlQocEFubm90ICE9IE5VTEwpOworCUFTU0VSVChwQW5ub3QtPkdldFBERkFubm90KCktPkdldFN1YlR5cGUoKSA9PSAiV2lkZ2V0Iik7CisKKwlpZiAoQ0ZGTF9Gb3JtRmlsbGVyKiBwRm9ybUZpbGxlciA9IEdldEZvcm1GaWxsZXIocEFubm90LCBGQUxTRSkpCisJeworCQlyZXR1cm4gcEZvcm1GaWxsZXItPk9uUkJ1dHRvbkRvd24ocFBhZ2VWaWV3LCBwQW5ub3QsIG5GbGFncywgcG9pbnQpOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTAlDRkZMX0lGb3JtRmlsbGVyOjpPblJCdXR0b25VcChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQoreworCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7CisJQVNTRVJUKHBBbm5vdC0+R2V0UERGQW5ub3QoKS0+R2V0U3ViVHlwZSgpID09ICJXaWRnZXQiKTsKKworCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwQW5ub3QsIEZBTFNFKSkKKwl7CisJCXJldHVybiBwRm9ybUZpbGxlci0+T25SQnV0dG9uVXAocFBhZ2VWaWV3LCBwQW5ub3QsIG5GbGFncywgcG9pbnQpOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTAlDRkZMX0lGb3JtRmlsbGVyOjpPblJCdXR0b25EYmxDbGsoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkKK3sKKwlBU1NFUlQocEFubm90ICE9IE5VTEwpOworCUFTU0VSVChwQW5ub3QtPkdldFBERkFubm90KCktPkdldFN1YlR5cGUoKSA9PSAiV2lkZ2V0Iik7CisKKwlpZiAoQ0ZGTF9Gb3JtRmlsbGVyKiBwRm9ybUZpbGxlciA9IEdldEZvcm1GaWxsZXIocEFubm90LCBGQUxTRSkpCisJeworCQlyZXR1cm4gcEZvcm1GaWxsZXItPk9uUkJ1dHRvbkRibENsayhwUGFnZVZpZXcsIHBBbm5vdCwgbkZsYWdzLCBwb2ludCk7CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MCUNGRkxfSUZvcm1GaWxsZXI6Ok9uS2V5RG93bihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbktleUNvZGUsIEZYX1VJTlQgbkZsYWdzKQoreworCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7CisJQVNTRVJUKHBBbm5vdC0+R2V0UERGQW5ub3QoKS0+R2V0U3ViVHlwZSgpID09ICJXaWRnZXQiKTsKKworCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwQW5ub3QsIEZBTFNFKSkKKwl7CisJCXJldHVybiBwRm9ybUZpbGxlci0+T25LZXlEb3duKHBBbm5vdCwgbktleUNvZGUsIG5GbGFncyk7CQorCX0KKworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTAlDRkZMX0lGb3JtRmlsbGVyOjpPbkNoYXIoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5DaGFyLCBGWF9VSU5UIG5GbGFncykKK3sKKwlBU1NFUlQocEFubm90ICE9IE5VTEwpOworCUFTU0VSVChwQW5ub3QtPkdldFBERkFubm90KCktPkdldFN1YlR5cGUoKSA9PSAiV2lkZ2V0Iik7CisKKwlpZiAobkNoYXIgPT0gRldMX1ZLRVlfVGFiKSByZXR1cm4gVFJVRTsKKworCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwQW5ub3QsIEZBTFNFKSkKKwl7CisJCXJldHVybiBwRm9ybUZpbGxlci0+T25DaGFyKHBBbm5vdCwgbkNoYXIsIG5GbGFncyk7CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCit2b2lkIENGRkxfSUZvcm1GaWxsZXI6Ok9uRGVTZWxlY3RlZChDUERGU0RLX0Fubm90KiBwQW5ub3QpCit7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKwlBU1NFUlQocEFubm90LT5HZXRQREZBbm5vdCgpLT5HZXRTdWJUeXBlKCkgPT0gIldpZGdldCIpOworCisJaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBBbm5vdCwgRkFMU0UpKQorCXsKKwkJcEZvcm1GaWxsZXItPk9uRGVTZWxlY3RlZChwQW5ub3QpOworCX0KK30KKwordm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpPblNlbGVjdGVkKENQREZTREtfQW5ub3QqIHBBbm5vdCkKK3sKKwlBU1NFUlQocEFubm90ICE9IE5VTEwpOworCUFTU0VSVChwQW5ub3QtPkdldFBERkFubm90KCktPkdldFN1YlR5cGUoKSA9PSAiV2lkZ2V0Iik7CisKKwlpZiAoQ0ZGTF9Gb3JtRmlsbGVyKiBwRm9ybUZpbGxlciA9IEdldEZvcm1GaWxsZXIocEFubm90LCBGQUxTRSkpCisJeworCQlwRm9ybUZpbGxlci0+T25TZWxlY3RlZChwQW5ub3QpOworCX0KK30KKworRlhfQk9PTCBDRkZMX0lGb3JtRmlsbGVyOjpPblNldEZvY3VzKENQREZTREtfQW5ub3QqIHBBbm5vdCxGWF9VSU5UIG5GbGFnKQoreworCWlmKCFwQW5ub3QpIHJldHVybiBGQUxTRTsKKwlBU1NFUlQocEFubm90LT5HZXRQREZBbm5vdCgpLT5HZXRTdWJUeXBlKCkgPT0gIldpZGdldCIpOworCisJaWYgKCFtX2JOb3RpZnlpbmcpCisJeworCQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IChDUERGU0RLX1dpZGdldCopcEFubm90OworIAkJaWYgKHBXaWRnZXQtPkdldEFBY3Rpb24oQ1BERl9BQWN0aW9uOjpHZXRGb2N1cykpCisgCQl7CisgIAkJCW1fYk5vdGlmeWluZyA9IFRSVUU7CisJCQlwV2lkZ2V0LT5HZXRBcHBlYXJhbmNlQWdlKCk7CisJCQlpbnQgblZhbHVlQWdlID0gcFdpZGdldC0+R2V0VmFsdWVBZ2UoKTsKKyAJCQlwV2lkZ2V0LT5DbGVhckFwcE1vZGlmaWVkKCk7CisgCisgCisgCQkJQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gcEFubm90LT5HZXRQYWdlVmlldygpOworIAkJCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7CisgCQkJCisgCQkJUERGU0RLX0ZpZWxkQWN0aW9uIGZhOworCQkJZmEuYk1vZGlmaWVyID0gbV9wQXBwLT5GRklfSXNDVFJMS2V5RG93bihuRmxhZyk7CisgCQkJZmEuYlNoaWZ0ID0gbV9wQXBwLT5GRklfSXNTSElGVEtleURvd24obkZsYWcpOworCisgCisgCQkJQ0ZGTF9Gb3JtRmlsbGVyKiBwRm9ybUZpbGxlciA9IEdldEZvcm1GaWxsZXIocFdpZGdldCwgVFJVRSk7CisgCQkJaWYoIXBGb3JtRmlsbGVyKSByZXR1cm4gRkFMU0U7CisgCQkJcEZvcm1GaWxsZXItPkdldEFjdGlvbkRhdGEocFBhZ2VWaWV3LCBDUERGX0FBY3Rpb246OkdldEZvY3VzLCBmYSk7CisgCisgCQkJcFdpZGdldC0+T25BQWN0aW9uKENQREZfQUFjdGlvbjo6R2V0Rm9jdXMsIGZhLCBwUGFnZVZpZXcpOworIAkJCW1fYk5vdGlmeWluZyA9IEZBTFNFOworIAkJCQorIC8vCQkJaWYgKCFJc1ZhbGlkQW5ub3QobV9wQXBwLCBwRG9jdW1lbnQsIHBEb2NWaWV3LCBwUGFnZVZpZXcsIHBBbm5vdCkpIHJldHVybiBGQUxTRTsKKyAKKyAJCQlpZiAocFdpZGdldC0+SXNBcHBNb2RpZmllZCgpKQorIAkJCXsKKyAJCQkJaWYgKENGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBXaWRnZXQsIEZBTFNFKSkKKyAJCQkJeworIAkJCQkJcEZvcm1GaWxsZXItPlJlc2V0UERGV2luZG93KHBQYWdlVmlldywgblZhbHVlQWdlID09IHBXaWRnZXQtPkdldFZhbHVlQWdlKCkpOworIAkJCQl9CisgCQkJfQorCQl9CisJfQorCQorCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwQW5ub3QsIFRSVUUpKQorCXsKKwkJaWYgKHBGb3JtRmlsbGVyLT5PblNldEZvY3VzKHBBbm5vdCwgbkZsYWcpKQorCQl7CisJCQlyZXR1cm4gVFJVRTsKKwkJfQorCQllbHNlCisJCQlyZXR1cm4gRkFMU0U7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wJQ0ZGTF9JRm9ybUZpbGxlcjo6T25LaWxsRm9jdXMoQ1BERlNES19Bbm5vdCogcEFubm90LEZYX1VJTlQgbkZsYWcpCit7CisJaWYoIXBBbm5vdCkgcmV0dXJuIEZBTFNFOworCUFTU0VSVChwQW5ub3QtPkdldFBERkFubm90KCktPkdldFN1YlR5cGUoKSA9PSAiV2lkZ2V0Iik7CisKKwlpZiAoQ0ZGTF9Gb3JtRmlsbGVyKiBwRm9ybUZpbGxlciA9IEdldEZvcm1GaWxsZXIocEFubm90LCBGQUxTRSkpCisJeworCQlpZiAocEZvcm1GaWxsZXItPk9uS2lsbEZvY3VzKHBBbm5vdCwgbkZsYWcpKQorCQl7CisgCQkJaWYgKCFtX2JOb3RpZnlpbmcpCisgCQkJeworIAkJCQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IChDUERGU0RLX1dpZGdldCopcEFubm90OworIAkJCQlpZiAocFdpZGdldC0+R2V0QUFjdGlvbihDUERGX0FBY3Rpb246Okxvc2VGb2N1cykpCisgCQkJCXsKKyAJCQkJCW1fYk5vdGlmeWluZyA9IFRSVUU7CisgCQkJCQlwV2lkZ2V0LT5DbGVhckFwcE1vZGlmaWVkKCk7CisgCisgCQkJCQlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcgPSBwV2lkZ2V0LT5HZXRQYWdlVmlldygpOworIAkJCQkJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsKKyAKKyAJCQkJCVBERlNES19GaWVsZEFjdGlvbiBmYTsKKwkJCQkJZmEuYk1vZGlmaWVyID0gbV9wQXBwLT5GRklfSXNDVFJMS2V5RG93bihuRmxhZyk7CisgCQkJCQlmYS5iU2hpZnQgPSBtX3BBcHAtPkZGSV9Jc1NISUZUS2V5RG93bihuRmxhZyk7CisgCisgCQkJCQlwRm9ybUZpbGxlci0+R2V0QWN0aW9uRGF0YShwUGFnZVZpZXcsIENQREZfQUFjdGlvbjo6TG9zZUZvY3VzLCBmYSk7CisgCisgCQkJCQlwV2lkZ2V0LT5PbkFBY3Rpb24oQ1BERl9BQWN0aW9uOjpMb3NlRm9jdXMsIGZhLCBwUGFnZVZpZXcpOworIAkJCQkJbV9iTm90aWZ5aW5nID0gRkFMU0U7CisgCisgCQkJCX0KKyAJCQl9CisJCX0KKwkJZWxzZQorCQkJcmV0dXJuIEZBTFNFOworCX0KKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MCUNGRkxfSUZvcm1GaWxsZXI6OklzVmlzaWJsZShDUERGU0RLX1dpZGdldCogcFdpZGdldCkKK3sKKwlyZXR1cm4gcFdpZGdldC0+SXNWaXNpYmxlKCk7Cit9CisKK0ZYX0JPT0wJQ0ZGTF9JRm9ybUZpbGxlcjo6SXNSZWFkT25seShDUERGU0RLX1dpZGdldCogcFdpZGdldCkKK3sKKwlBU1NFUlQocFdpZGdldCAhPSBOVUxMKTsKKworCWludCBuRmllbGRGbGFncyA9IHBXaWRnZXQtPkdldEZpZWxkRmxhZ3MoKTsKKworCXJldHVybiAobkZpZWxkRmxhZ3MgJiBGSUVMREZMQUdfUkVBRE9OTFkpID09IEZJRUxERkxBR19SRUFET05MWTsKK30KKworRlhfQk9PTAlDRkZMX0lGb3JtRmlsbGVyOjpJc0ZpbGxpbmdBbGxvd2VkKENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0KQoreworCUFTU0VSVChwV2lkZ2V0ICE9IE5VTEwpOworCisJaWYgKHBXaWRnZXQtPkdldEZpZWxkVHlwZSgpID09IEZJRUxEVFlQRV9QVVNIQlVUVE9OKQorCQlyZXR1cm4gVFJVRTsKKyAJZWxzZQorIAl7CisgCQlDUERGX1BhZ2UqIHBQYWdlID0gcFdpZGdldC0+R2V0UERGUGFnZSgpOworIAkJQVNTRVJUKHBQYWdlICE9IE5VTEwpOworIAorIAkJQ1BERl9Eb2N1bWVudCogcERvY3VtZW50ID0gcFBhZ2UtPm1fcERvY3VtZW50OworIAkJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsKKyAKKwkJRlhfRFdPUkQgZHdQZXJtaXNzaW9ucyA9IHBEb2N1bWVudC0+R2V0VXNlclBlcm1pc3Npb25zKCk7CisgCQlyZXR1cm4gKGR3UGVybWlzc2lvbnMmRlBERlBFUk1fRklMTF9GT1JNKSB8fCAKKyAJCQkJKGR3UGVybWlzc2lvbnMmRlBERlBFUk1fQU5OT1RfRk9STSkgfHwgCisgCQkJKGR3UGVybWlzc2lvbnMmRlBERlBFUk1fTU9ESUZZKTsKKyAJfQorCXJldHVybiBUUlVFOwkKK30KKworQ0ZGTF9Gb3JtRmlsbGVyKiBDRkZMX0lGb3JtRmlsbGVyOjpHZXRGb3JtRmlsbGVyKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfQk9PTCBiUmVnaXN0ZXIpCit7CisvLyAJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKy8vIAlBU1NFUlQocEFubm90LT5HZXRQREZBbm5vdCgpLT5HZXRTdWJUeXBlKCkgPT0gIldpZGdldCIpOworCisJQ0ZGTF9Gb3JtRmlsbGVyICogcEZvcm1GaWxsZXIgPSBOVUxMOworCW1fTWFwcy5Mb29rdXAocEFubm90LCBwRm9ybUZpbGxlcik7CisKKwlpZiAocEZvcm1GaWxsZXIpCisJCXJldHVybiBwRm9ybUZpbGxlcjsKKworCWlmIChiUmVnaXN0ZXIpCisJeworCQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IChDUERGU0RLX1dpZGdldCopcEFubm90OwkJCisKKwkJaW50IG5GaWVsZFR5cGUgPSBwV2lkZ2V0LT5HZXRGaWVsZFR5cGUoKTsKKwkJc3dpdGNoKG5GaWVsZFR5cGUpCisJCXsKKyAJCWNhc2UgRklFTERUWVBFX1BVU0hCVVRUT046CisgCQkJcEZvcm1GaWxsZXIgPSBuZXcgQ0ZGTF9QdXNoQnV0dG9uKG1fcEFwcCwgcFdpZGdldCk7CisgCQkJYnJlYWs7CisJCWNhc2UgRklFTERUWVBFX0NIRUNLQk9YOgorCQkJcEZvcm1GaWxsZXIgPSBuZXcgQ0ZGTF9DaGVja0JveChtX3BBcHAsIHBXaWRnZXQpOworCQkJYnJlYWs7CisgCQljYXNlIEZJRUxEVFlQRV9SQURJT0JVVFRPTjoKKyAJCQlwRm9ybUZpbGxlciA9IG5ldyBDRkZMX1JhZGlvQnV0dG9uKG1fcEFwcCwgcFdpZGdldCk7CisgCQkJYnJlYWs7CisgCQljYXNlIEZJRUxEVFlQRV9URVhURklFTEQ6CisJCQlwRm9ybUZpbGxlciA9IG5ldyBDRkZMX1RleHRGaWVsZChtX3BBcHAsIHBXaWRnZXQpOworCQkJYnJlYWs7CisJCWNhc2UgRklFTERUWVBFX0xJU1RCT1g6CisJCQlwRm9ybUZpbGxlciA9IG5ldyBDRkZMX0xpc3RCb3gobV9wQXBwLCBwV2lkZ2V0KTsKKwkJCWJyZWFrOworCQljYXNlIEZJRUxEVFlQRV9DT01CT0JPWDoKKwkJCXBGb3JtRmlsbGVyID0gbmV3IENGRkxfQ29tYm9Cb3gobV9wQXBwLCBwV2lkZ2V0KTsKKwkJCWJyZWFrOworCQljYXNlIEZJRUxEVFlQRV9VTktOT1dOOgorCQlkZWZhdWx0OgorCQkJcEZvcm1GaWxsZXIgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAocEZvcm1GaWxsZXIpCisJCXsKKwkJCW1fTWFwcy5TZXRBdChwQW5ub3QsIHBGb3JtRmlsbGVyKTsKKwkJfQorCX0KKworCXJldHVybiBwRm9ybUZpbGxlcjsKK30KKwordm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpSZW1vdmVGb3JtRmlsbGVyKENQREZTREtfQW5ub3QqIHBBbm5vdCkKK3sKKwlpZiAoIHBBbm5vdCAhPSBOVUxMICkKKwl7CisJCVVuUmVnaXN0ZXJGb3JtRmlsbGVyKCBwQW5ub3QgKTsKKwl9Cit9CisKK3ZvaWQgQ0ZGTF9JRm9ybUZpbGxlcjo6VW5SZWdpc3RlckZvcm1GaWxsZXIoQ1BERlNES19Bbm5vdCogcEFubm90KQoreworCUNGRkxfRm9ybUZpbGxlciAqIHBGb3JtRmlsbGVyID0gTlVMTDsKKworCWlmIChtX01hcHMuTG9va3VwKHBBbm5vdCxwRm9ybUZpbGxlcikpCisJeworCQlpZiAocEZvcm1GaWxsZXIpCisJCQlkZWxldGUgcEZvcm1GaWxsZXI7CisJCW1fTWFwcy5SZW1vdmVLZXkocEFubm90KTsKKwl9Cit9CisKK3ZvaWQgQ0ZGTF9JRm9ybUZpbGxlcjo6U2V0Rm9jdXNBbm5vdFRhYihDUERGU0RLX0Fubm90KiBwV2lkZ2V0LCBGWF9CT09MIGJTYW1lRmllbGQsIEZYX0JPT0wgYk5leHQpCit7CisKK30KKwordm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpRdWVyeVdoZXJlUG9wdXAodm9pZCogcFByaXZhdGVEYXRhLCBGWF9GTE9BVCBmUG9wdXBNaW4sRlhfRkxPQVQgZlBvcHVwTWF4LCBGWF9JTlQzMiAmIG5SZXQsIEZYX0ZMT0FUICYgZlBvcHVwUmV0KQoreworCUFTU0VSVChwUHJpdmF0ZURhdGEgIT0gTlVMTCk7CisKKwlDRkZMX1ByaXZhdGVEYXRhKiBwRGF0YSA9IChDRkZMX1ByaXZhdGVEYXRhKilwUHJpdmF0ZURhdGE7CisKKwkKKworCisJQ1BERl9SZWN0IHJjUGFnZVZpZXcoMCwwLDAsMCk7CisJcmNQYWdlVmlldy5yaWdodCA9IHBEYXRhLT5wV2lkZ2V0LT5HZXRQREZQYWdlKCktPkdldFBhZ2VXaWR0aCgpOworCXJjUGFnZVZpZXcuYm90dG9tID0gcERhdGEtPnBXaWRnZXQtPkdldFBERlBhZ2UoKS0+R2V0UGFnZUhlaWdodCgpOworCXJjUGFnZVZpZXcuTm9ybWFsaXplKCk7CisKKworCUFTU0VSVChwRGF0YS0+cFdpZGdldCAhPSBOVUxMKTsKKwlDUERGX1JlY3QgcmNBbm5vdCA9IHBEYXRhLT5wV2lkZ2V0LT5HZXRSZWN0KCk7CisKKwlGWF9GTE9BVCBmVG9wID0gMC4wZjsKKwlGWF9GTE9BVCBmQm90dG9tID0gMC4wZjsKKworCUNQREZTREtfV2lkZ2V0ICogcFdpZGdldCA9IChDUERGU0RLX1dpZGdldCopcERhdGEtPnBXaWRnZXQ7CisJc3dpdGNoIChwV2lkZ2V0LT5HZXRSb3RhdGUoKSAvIDkwKQorCXsKKwlkZWZhdWx0OgorCWNhc2UgMDoKKwkJZlRvcCA9IHJjUGFnZVZpZXcudG9wIC0gcmNBbm5vdC50b3A7CisJCWZCb3R0b20gPSByY0Fubm90LmJvdHRvbSAtIHJjUGFnZVZpZXcuYm90dG9tOworCQlicmVhazsKKwljYXNlIDE6CisJCWZUb3AgPSByY0Fubm90LmxlZnQgLSByY1BhZ2VWaWV3LmxlZnQ7CisJCWZCb3R0b20gPSByY1BhZ2VWaWV3LnJpZ2h0IC0gcmNBbm5vdC5yaWdodDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlmVG9wID0gcmNBbm5vdC5ib3R0b20gLSByY1BhZ2VWaWV3LmJvdHRvbTsKKwkJZkJvdHRvbSA9IHJjUGFnZVZpZXcudG9wIC0gcmNBbm5vdC50b3A7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJZlRvcCA9IHJjUGFnZVZpZXcucmlnaHQgLSByY0Fubm90LnJpZ2h0OworCQlmQm90dG9tID0gcmNBbm5vdC5sZWZ0IC0gcmNQYWdlVmlldy5sZWZ0OworCQlicmVhazsKKwl9CisKKwlGWF9GTE9BVCBmRmFjdEhlaWdodCA9IDA7CisJRlhfQk9PTCBiQm90dG9tID0gVFJVRTsKKwlGWF9GTE9BVCBmTWF4TGlzdEJveEhlaWdodCA9IDA7CisJaWYgKGZQb3B1cE1heCA+IEZGTF9NQVhMSVNUQk9YSEVJR0hUKQorCXsKKwkJaWYgKGZQb3B1cE1pbiA+IEZGTF9NQVhMSVNUQk9YSEVJR0hUKQorCQl7CisJCQlmTWF4TGlzdEJveEhlaWdodCA9IGZQb3B1cE1pbjsKKwkJfQorCQllbHNlCisJCXsKKwkJCWZNYXhMaXN0Qm94SGVpZ2h0ID0gRkZMX01BWExJU1RCT1hIRUlHSFQ7CisJCX0KKwl9CisJZWxzZQorCQlmTWF4TGlzdEJveEhlaWdodCA9IGZQb3B1cE1heDsKKworCWlmIChmQm90dG9tID4gZk1heExpc3RCb3hIZWlnaHQpCisJeworCQlmRmFjdEhlaWdodCA9IGZNYXhMaXN0Qm94SGVpZ2h0OworCQliQm90dG9tID0gVFJVRTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKGZUb3AgPiBmTWF4TGlzdEJveEhlaWdodCkKKwkJeworCQkJZkZhY3RIZWlnaHQgPSBmTWF4TGlzdEJveEhlaWdodDsKKwkJCWJCb3R0b20gPSBGQUxTRTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChmVG9wID4gZkJvdHRvbSkKKwkJCXsKKwkJCQlmRmFjdEhlaWdodCA9IGZUb3A7CisJCQkJYkJvdHRvbSA9IEZBTFNFOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWZGYWN0SGVpZ2h0ID0gZkJvdHRvbTsKKwkJCQliQm90dG9tID0gVFJVRTsKKwkJCX0KKwkJfQorCX0KKworCW5SZXQgPSBiQm90dG9tID8gMCA6IDE7CisJZlBvcHVwUmV0ID0gZkZhY3RIZWlnaHQ7Cit9CisKK3ZvaWQgQ0ZGTF9JRm9ybUZpbGxlcjo6T25TZXRXaW5kb3dSZWN0KHZvaWQqIHBQcml2YXRlRGF0YSwgY29uc3QgQ1BERl9SZWN0ICYgcmNXaW5kb3cpCit7CisJQVNTRVJUKHBQcml2YXRlRGF0YSAhPSBOVUxMKTsKKworCUNGRkxfUHJpdmF0ZURhdGEqIHBEYXRhID0gKENGRkxfUHJpdmF0ZURhdGEqKXBQcml2YXRlRGF0YTsKKworCWlmIChDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwRGF0YS0+cFdpZGdldCwgVFJVRSkpCisJeworCisJCUNQREZfUmVjdCByY09sZCA9IHBGb3JtRmlsbGVyLT5QV0x0b0ZGTChwRm9ybUZpbGxlci0+R2V0V2luZG93UmVjdChwRGF0YS0+cFBhZ2VWaWV3KSk7CisJCUNQREZfUmVjdCByY05ldyA9IHBGb3JtRmlsbGVyLT5QV0x0b0ZGTChyY1dpbmRvdyk7CisJCXBGb3JtRmlsbGVyLT5TZXRXaW5kb3dSZWN0KHBEYXRhLT5wUGFnZVZpZXcsIHJjV2luZG93KTsKKworCQlDUERGX1JlY3QgdW5SZWN0ID0gcmNPbGQ7CisJCXVuUmVjdC5VbmlvbihyY05ldyk7CisJCS8vRlhfUkVDVCByY1JlY3QgPSB1blJlY3QuR2V0T3V0dGVyUmVjdCgpOworCQl1blJlY3QubGVmdCA9IChGWF9GTE9BVCkodW5SZWN0LmxlZnQgLSAwLjUpOworCQl1blJlY3QucmlnaHQgPSAoRlhfRkxPQVQpKHVuUmVjdC5yaWdodCArIDAuNSk7CisJCXVuUmVjdC50b3AgPSAoRlhfRkxPQVQpKHVuUmVjdC50b3AgKyAwLjUpOworCQl1blJlY3QuYm90dG9tID0gKEZYX0ZMT0FUKSh1blJlY3QuYm90dG9tIC0wLjUpOworCQltX3BBcHAtPkZGSV9JbnZhbGlkYXRlKHBEYXRhLT5wV2lkZ2V0LT5HZXRQREZQYWdlKCksIHVuUmVjdC5sZWZ0LCB1blJlY3QudG9wLCB1blJlY3QucmlnaHQsIHVuUmVjdC5ib3R0b20pOworCX0KK30KKwordm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpPbktleVN0cm9rZShGWF9CT09MIGJFZGl0T3JMaXN0LCB2b2lkKiBwUHJpdmF0ZURhdGEsIEZYX0lOVDMyIG5LZXlDb2RlLCBDRlhfV2lkZVN0cmluZyYgc3RyQ2hhbmdlLCAKKwkJCQkJCQkJICAgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZUV4LCBGWF9CT09MIGJLZXlEb3duLCAKKwkJCQkJCQkJICAgRlhfQk9PTCAmIGJSQywgRlhfQk9PTCAmIGJFeGl0KQoreworCUFTU0VSVChwUHJpdmF0ZURhdGEgIT0gTlVMTCk7CisJQ0ZGTF9Qcml2YXRlRGF0YSogcERhdGEgPSAoQ0ZGTF9Qcml2YXRlRGF0YSopcFByaXZhdGVEYXRhOworCUFTU0VSVChwRGF0YS0+cFdpZGdldCAhPSBOVUxMKTsKKworCUNGRkxfRm9ybUZpbGxlciogcEZvcm1GaWxsZXIgPSBHZXRGb3JtRmlsbGVyKHBEYXRhLT5wV2lkZ2V0LCBGQUxTRSk7CisJQVNTRVJUKHBGb3JtRmlsbGVyICE9IE5VTEwpOworCisJcEZvcm1GaWxsZXItPk9uS2V5U3Ryb2tlKGJLZXlEb3duKTsKK30KKwordm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpPbktleVN0cm9rZUNvbW1pdChDUERGU0RLX1dpZGdldCogcFdpZGdldCwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBGWF9CT09MJiBiUkMsIEZYX0JPT0wmIGJFeGl0LCBGWF9EV09SRCBuRmxhZykKK3sKKwlpZiAoIW1fYk5vdGlmeWluZykKKwl7CisJCUFTU0VSVChwV2lkZ2V0ICE9IE5VTEwpOworCQlpZiAocFdpZGdldC0+R2V0QUFjdGlvbihDUERGX0FBY3Rpb246OktleVN0cm9rZSkpCisJCXsKKwkJCW1fYk5vdGlmeWluZyA9IFRSVUU7CisJCQlwV2lkZ2V0LT5DbGVhckFwcE1vZGlmaWVkKCk7CisKKwkJCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7CisvLyAJCQlDUmVhZGVyX0RvY1ZpZXcqIHBEb2NWaWV3ID0gcFBhZ2VWaWV3LT5HZXREb2NWaWV3KCk7CisvLyAJCQlBU1NFUlQocERvY1ZpZXcgIT0gTlVMTCk7CisJCQkKKwkJCisKKwkJCVBERlNES19GaWVsZEFjdGlvbiBmYTsKKwkJCWZhLmJNb2RpZmllciA9IG1fcEFwcC0+RkZJX0lzQ1RSTEtleURvd24obkZsYWcpOworIAkJCWZhLmJTaGlmdCA9IG1fcEFwcC0+RkZJX0lzU0hJRlRLZXlEb3duKG5GbGFnKTsKKwkJCWZhLmJXaWxsQ29tbWl0ID0gVFJVRTsKKwkJCWZhLm5Db21taXRLZXkgPSBHZXRDb21taXRLZXkoKTsKKwkJCWZhLmJLZXlEb3duID0gR2V0S2V5RG93bigpOworCQkJZmEuYlJDID0gVFJVRTsKKworCQkJQ0ZGTF9Gb3JtRmlsbGVyKiBwRm9ybUZpbGxlciA9IEdldEZvcm1GaWxsZXIocFdpZGdldCwgRkFMU0UpOworCQkJQVNTRVJUKHBGb3JtRmlsbGVyICE9IE5VTEwpOworCisJCQlwRm9ybUZpbGxlci0+R2V0QWN0aW9uRGF0YShwUGFnZVZpZXcsIENQREZfQUFjdGlvbjo6S2V5U3Ryb2tlLCBmYSk7CisJCQlwRm9ybUZpbGxlci0+U2F2ZVN0YXRlKHBQYWdlVmlldyk7CisKKwkJCVBERlNES19GaWVsZEFjdGlvbiBmYU9sZCA9IGZhOworCQkJcFdpZGdldC0+T25BQWN0aW9uKENQREZfQUFjdGlvbjo6S2V5U3Ryb2tlLCBmYSwgcFBhZ2VWaWV3KTsKKworCQkJYlJDID0gZmEuYlJDOworLy8JCQliRXhpdCA9ICFJc1ZhbGlkQW5ub3QobV9wQXBwLCBwRG9jdW1lbnQsIHBEb2NWaWV3LCBwUGFnZVZpZXcsIHBXaWRnZXQpOworCisJCQltX2JOb3RpZnlpbmcgPSBGQUxTRTsKKwkJfQorCX0KK30KKwordm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpPblZhbGlkYXRlKENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0LCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0JPT0wmIGJSQywgRlhfQk9PTCYgYkV4aXQsIEZYX0RXT1JEIG5GbGFnKQoreworCWlmICghbV9iTm90aWZ5aW5nKQorCXsKKwkJQVNTRVJUKHBXaWRnZXQgIT0gTlVMTCk7CisJCWlmIChwV2lkZ2V0LT5HZXRBQWN0aW9uKENQREZfQUFjdGlvbjo6VmFsaWRhdGUpKQorCQl7CisJCQltX2JOb3RpZnlpbmcgPSBUUlVFOworCQkJcFdpZGdldC0+Q2xlYXJBcHBNb2RpZmllZCgpOworCisJCQlBU1NFUlQocFBhZ2VWaWV3ICE9IE5VTEwpOworLy8gCQkJQ1JlYWRlcl9Eb2NWaWV3KiBwRG9jVmlldyA9IHBQYWdlVmlldy0+R2V0RG9jVmlldygpOworLy8gCQkJQVNTRVJUKHBEb2NWaWV3ICE9IE5VTEwpOworCQkJCisJCQkKKworCQkJUERGU0RLX0ZpZWxkQWN0aW9uIGZhOworCQkJZmEuYk1vZGlmaWVyID0gbV9wQXBwLT5GRklfSXNDVFJMS2V5RG93bihuRmxhZyk7CisgCQkJZmEuYlNoaWZ0ID0gbV9wQXBwLT5GRklfSXNTSElGVEtleURvd24obkZsYWcpOworCQkJZmEuYktleURvd24gPSBHZXRLZXlEb3duKCk7CisJCQlmYS5iUkMgPSBUUlVFOworCisJCQlDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwV2lkZ2V0LCBGQUxTRSk7CisJCQlBU1NFUlQocEZvcm1GaWxsZXIgIT0gTlVMTCk7CisKKwkJCXBGb3JtRmlsbGVyLT5HZXRBY3Rpb25EYXRhKHBQYWdlVmlldywgQ1BERl9BQWN0aW9uOjpWYWxpZGF0ZSwgZmEpOworCQkJcEZvcm1GaWxsZXItPlNhdmVTdGF0ZShwUGFnZVZpZXcpOworCisJCQlQREZTREtfRmllbGRBY3Rpb24gZmFPbGQgPSBmYTsKKwkJCXBXaWRnZXQtPk9uQUFjdGlvbihDUERGX0FBY3Rpb246OlZhbGlkYXRlLCBmYSwgcFBhZ2VWaWV3KTsKKworCQkJYlJDID0gZmEuYlJDOworLy8JCQliRXhpdCA9ICFJc1ZhbGlkQW5ub3QobV9wQXBwLCBwRG9jdW1lbnQsIHBEb2NWaWV3LCBwUGFnZVZpZXcsIHBXaWRnZXQpOworCisJCQltX2JOb3RpZnlpbmcgPSBGQUxTRTsKKwkJfQorCX0KK30KKwordm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpPbkNhbGN1bGF0ZShDUERGU0RLX1dpZGdldCogcFdpZGdldCwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBGWF9CT09MJiBiRXhpdCwgRlhfRFdPUkQgbkZsYWcpCit7CisJaWYgKCFtX2JOb3RpZnlpbmcpCisJeworCQlBU1NFUlQocFdpZGdldCAhPSBOVUxMKTsKKwkJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsKKy8vIAkJQ1JlYWRlcl9Eb2NWaWV3KiBwRG9jVmlldyA9IHBQYWdlVmlldy0+R2V0RG9jVmlldygpOworLy8gCQlBU1NFUlQocERvY1ZpZXcgIT0gTlVMTCk7CisJCUNQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCA9IHBQYWdlVmlldy0+R2V0U0RLRG9jdW1lbnQoKTsKKwkJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsKKworCQlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsKKwkJQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7CisKKwkJcEludGVyRm9ybS0+T25DYWxjdWxhdGUocFdpZGdldC0+R2V0Rm9ybUZpZWxkKCkpOworCisvLwkJYkV4aXQgPSAhSXNWYWxpZEFubm90KG1fcEFwcCwgcERvY3VtZW50LCBwRG9jVmlldywgcFBhZ2VWaWV3LCBwV2lkZ2V0KTsKKworCQltX2JOb3RpZnlpbmcgPSBGQUxTRTsKKwl9Cit9CisKK3ZvaWQgQ0ZGTF9JRm9ybUZpbGxlcjo6T25Gb3JtYXQoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfQk9PTCYgYkV4aXQsIEZYX0RXT1JEIG5GbGFnKQoreworCWlmICghbV9iTm90aWZ5aW5nKQorCXsKKwkJQVNTRVJUKHBXaWRnZXQgIT0gTlVMTCk7CisJCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7CisvLyAJCUNSZWFkZXJfRG9jVmlldyogcERvY1ZpZXcgPSBwUGFnZVZpZXctPkdldERvY1ZpZXcoKTsKKy8vIAkJQVNTRVJUKHBEb2NWaWV3ICE9IE5VTEwpOworCQlDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQgPSBwUGFnZVZpZXctPkdldFNES0RvY3VtZW50KCk7CisJCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7CisKKwkJQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSAoQ1BERlNES19JbnRlckZvcm0qKXBEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7CisJCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOworCisJCUZYX0JPT0wgYkZvcm1hdGVkID0gRkFMU0U7CisJCUNGWF9XaWRlU3RyaW5nIHNWYWx1ZSA9IHBJbnRlckZvcm0tPk9uRm9ybWF0KHBXaWRnZXQtPkdldEZvcm1GaWVsZCgpLCBHZXRDb21taXRLZXkoKSwgYkZvcm1hdGVkKTsKKworLy8JCWJFeGl0ID0gIUlzVmFsaWRBbm5vdChtX3BBcHAsIHBEb2N1bWVudCwgcERvY1ZpZXcsIHBQYWdlVmlldywgcFdpZGdldCk7CisKKwkJaWYgKGJFeGl0KSByZXR1cm47CisKKwkJaWYgKGJGb3JtYXRlZCkKKwkJeworCQkJcEludGVyRm9ybS0+UmVzZXRGaWVsZEFwcGVhcmFuY2UocFdpZGdldC0+R2V0Rm9ybUZpZWxkKCksIHNWYWx1ZSwgVFJVRSk7CisJCQlwSW50ZXJGb3JtLT5VcGRhdGVGaWVsZChwV2lkZ2V0LT5HZXRGb3JtRmllbGQoKSk7CisJCX0KKworCQltX2JOb3RpZnlpbmcgPSBGQUxTRTsKKwl9Cit9CisKKy8vIExSRVNVTFQgQ0FMTEJBQ0sgQ0ZGTF9JRm9ybUZpbGxlcjo6RkZMX1duZFByb2MoCisvLyAJCQkJCQkJCQkgIGludCBjb2RlLCAgICAgICAvLyBob29rIGNvZGUKKy8vIAkJCQkJCQkJCSAgV1BBUkFNIHdQYXJhbSwgIC8vIHZpcnR1YWwta2V5IGNvZGUKKy8vIAkJCQkJCQkJCSAgTFBBUkFNIGxQYXJhbSAgIC8vIGtleXN0cm9rZS1tZXNzYWdlIGluZm9ybWF0aW9uCisvLyAJCQkJCQkJCQkJKQorLy8geworLy8gCWlmIChjb2RlICE9IEhDX0FDVElPTikKKy8vIAl7CisvLyAJCXJldHVybiBDYWxsTmV4dEhvb2tFeCAobV9ob29rU2hlZXQsIGNvZGUsIHdQYXJhbSwgbFBhcmFtKTsKKy8vIAl9CisvLyAKKy8vIAlGWFNZU19tZW1jcHkoJmdfTXNnLCAodm9pZCopbFBhcmFtLCBzaXplb2YoTVNHKSk7CQorLy8gCisvLyAJcmV0dXJuIDA7CisvLyB9CisKKy8vIE1TRwlDRkZMX0lGb3JtRmlsbGVyOjpHZXRMYXN0TWVzc2FnZSgpCisvLyB7CisvLyAJcmV0dXJuIGdfTXNnOworLy8gfQorCitpbnQgQ0ZGTF9JRm9ybUZpbGxlcjo6R2V0Q29tbWl0S2V5KCkKK3sKKy8vCU1TRyBtc2cgPSBDRkZMX0lGb3JtRmlsbGVyOjpHZXRMYXN0TWVzc2FnZSgpOworCisJaW50IG5Db21taXRLZXkgPSAwOworLy8gCXN3aXRjaCAobXNnLm1lc3NhZ2UpCisvLyAJeworLy8gCWNhc2UgV01fTEJVVFRPTkRPV046CisvLyAJY2FzZSBXTV9MQlVUVE9OVVA6CisvLyAJCW5Db21taXRLZXkgPSAxOworLy8gCQlicmVhazsKKy8vIAljYXNlIFdNX0tFWURPV046CisvLyAJCXN3aXRjaCAobXNnLndQYXJhbSkKKy8vIAkJeworLy8gCQljYXNlIFZLX1JFVFVSTjoKKy8vIAkJCW5Db21taXRLZXkgPSAyOworLy8gCQkJYnJlYWs7CisvLyAJCWNhc2UgVktfVEFCOgorLy8gCQkJbkNvbW1pdEtleSA9IDM7CisvLyAJCQlicmVhazsKKy8vIAkJfQorLy8gCQlicmVhazsKKy8vIAl9CisKKwlyZXR1cm4gbkNvbW1pdEtleTsKK30KKworRlhfQk9PTCBDRkZMX0lGb3JtRmlsbGVyOjpHZXRLZXlEb3duKCkKK3sKKwlyZXR1cm4gVFJVRTsKKy8vIAlNU0cgbXNnID0gQ0ZGTF9JRm9ybUZpbGxlcjo6R2V0TGFzdE1lc3NhZ2UoKTsKKy8vIAorLy8gCXJldHVybiBtc2cubWVzc2FnZSA9PSBXTV9LRVlET1dOIHx8IG1zZy5tZXNzYWdlID09IFdNX0NIQVI7Cit9CisKK0ZYX0JPT0wJQ0ZGTF9JRm9ybUZpbGxlcjo6SXNWYWxpZEFubm90KENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90KQoreworCisJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsKKwlBU1NFUlQocEFubm90ICE9IE5VTEwpOworCisJaWYocFBhZ2VWaWV3KQorCQlyZXR1cm4gcFBhZ2VWaWV3LT5Jc1ZhbGlkQW5ub3QocEFubm90LT5HZXRQREZBbm5vdCgpKTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsKK30KKwordm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpCZWZvcmVVbmRvKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkKK3sKKworfQorCit2b2lkIENGRkxfSUZvcm1GaWxsZXI6OkJlZm9yZVJlZG8oQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQoreworCUJlZm9yZVVuZG8ocERvY3VtZW50KTsKK30KKwordm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpBZnRlclVuZG8oQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQoreworfQorCit2b2lkIENGRkxfSUZvcm1GaWxsZXI6OkFmdGVyUmVkbyhDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpCit7Cit9CisKK0ZYX0JPT0wJQ0ZGTF9JRm9ybUZpbGxlcjo6Q2FuQ29weShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpCit7CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wJQ0ZGTF9JRm9ybUZpbGxlcjo6Q2FuQ3V0KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkKK3sKKworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTAlDRkZMX0lGb3JtRmlsbGVyOjpDYW5QYXN0ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpCit7CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgQ0ZGTF9JRm9ybUZpbGxlcjo6RG9Db3B5KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkKK3sKK30KKwordm9pZCBDRkZMX0lGb3JtRmlsbGVyOjpEb0N1dChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpCit7Cit9CisKK3ZvaWQgQ0ZGTF9JRm9ybUZpbGxlcjo6RG9QYXN0ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpCit7CisKK30KK3ZvaWQgQ0ZGTF9JRm9ybUZpbGxlcjo6T25CZWZvcmVLZXlTdHJva2UoRlhfQk9PTCBiRWRpdE9yTGlzdCwgdm9pZCogcFByaXZhdGVEYXRhLCBGWF9JTlQzMiBuS2V5Q29kZSwKKwkJCQkJCQkJCQkJICBDRlhfV2lkZVN0cmluZyAmIHN0ckNoYW5nZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZUV4LCAKKwkJCQkJCQkJCQkJICBpbnQgblNlbFN0YXJ0LCBpbnQgblNlbEVuZCwKKwkJCQkJCQkJCQlGWF9CT09MIGJLZXlEb3duLCBGWF9CT09MICYgYlJDLCBGWF9CT09MICYgYkV4aXQsIEZYX0RXT1JEIG5GbGFnKQoreworCUFTU0VSVChwUHJpdmF0ZURhdGEgIT0gTlVMTCk7CisJQ0ZGTF9Qcml2YXRlRGF0YSogcERhdGEgPSAoQ0ZGTF9Qcml2YXRlRGF0YSopcFByaXZhdGVEYXRhOworCUFTU0VSVChwRGF0YS0+cFdpZGdldCAhPSBOVUxMKTsKKwkKKwlDRkZMX0Zvcm1GaWxsZXIqIHBGb3JtRmlsbGVyID0gR2V0Rm9ybUZpbGxlcihwRGF0YS0+cFdpZGdldCwgRkFMU0UpOworCUFTU0VSVChwRm9ybUZpbGxlciAhPSBOVUxMKTsKKwkKKwlpZiAoIW1fYk5vdGlmeWluZykKKwl7CisJCWlmIChwRGF0YS0+cFdpZGdldC0+R2V0QUFjdGlvbihDUERGX0FBY3Rpb246OktleVN0cm9rZSkpCisJCXsKKwkJCW1fYk5vdGlmeWluZyA9IFRSVUU7CisJCQlpbnQgbkFnZSA9IHBEYXRhLT5wV2lkZ2V0LT5HZXRBcHBlYXJhbmNlQWdlKCk7CisJCQlpbnQgblZhbHVlQWdlID0gcERhdGEtPnBXaWRnZXQtPkdldFZhbHVlQWdlKCk7CisKKwkJCUFTU0VSVChwRGF0YS0+cFBhZ2VWaWV3ICE9IE5VTEwpOworCQkJQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50ICA9IHBEYXRhLT5wUGFnZVZpZXctPkdldFNES0RvY3VtZW50KCk7CisJCQkKKwkJCVBERlNES19GaWVsZEFjdGlvbiBmYTsKKyAJCQlmYS5iTW9kaWZpZXIgPSBtX3BBcHAtPkZGSV9Jc0NUUkxLZXlEb3duKG5GbGFnKTsKKyAJCQlmYS5iU2hpZnQgPSBtX3BBcHAtPkZGSV9Jc1NISUZUS2V5RG93bihuRmxhZyk7CisJCQlmYS5zQ2hhbmdlID0gc3RyQ2hhbmdlOworCQkJZmEuc0NoYW5nZUV4ID0gc3RyQ2hhbmdlRXg7CisJCQlmYS5iS2V5RG93biA9IGJLZXlEb3duOworCQkJZmEuYldpbGxDb21taXQgPSBGQUxTRTsKKwkJCWZhLmJSQyA9IFRSVUU7CisJCQlmYS5uU2VsU3RhcnQgPSBuU2VsU3RhcnQ7CisJCQlmYS5uU2VsRW5kID0gblNlbEVuZDsKKworCisJCQlwRm9ybUZpbGxlci0+R2V0QWN0aW9uRGF0YShwRGF0YS0+cFBhZ2VWaWV3LCBDUERGX0FBY3Rpb246OktleVN0cm9rZSwgZmEpOworCQkJcEZvcm1GaWxsZXItPlNhdmVTdGF0ZShwRGF0YS0+cFBhZ2VWaWV3KTsKKwkJCQorCQkJaWYgKHBEYXRhLT5wV2lkZ2V0LT5PbkFBY3Rpb24oQ1BERl9BQWN0aW9uOjpLZXlTdHJva2UsIGZhLCBwRGF0YS0+cFBhZ2VWaWV3KSkKKwkJCXsKKwkJCQlpZiAoIUlzVmFsaWRBbm5vdChwRGF0YS0+cFBhZ2VWaWV3LCBwRGF0YS0+cFdpZGdldCkpCisJCQkJeworCQkJCQliRXhpdCA9IFRSVUU7CisJCQkJCW1fYk5vdGlmeWluZyA9IEZBTFNFOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCQorCQkJCWlmIChuQWdlICE9IHBEYXRhLT5wV2lkZ2V0LT5HZXRBcHBlYXJhbmNlQWdlKCkpCisJCQkJeworCQkJCQlDUFdMX1duZCogcFduZCA9IHBGb3JtRmlsbGVyLT5SZXNldFBERldpbmRvdyhwRGF0YS0+cFBhZ2VWaWV3LCBuVmFsdWVBZ2UgPT0gcERhdGEtPnBXaWRnZXQtPkdldFZhbHVlQWdlKCkpOworCQkJCQlwRGF0YSA9IChDRkZMX1ByaXZhdGVEYXRhKilwV25kLT5HZXRBdHRhY2hlZERhdGEoKTsKKwkJCQkJYkV4aXQgPSBUUlVFOworCQkJCX0KKwkJCQkKKwkJCQlpZiAoZmEuYlJDKQorCQkJCXsKKwkJCQkJcEZvcm1GaWxsZXItPlNldEFjdGlvbkRhdGEocERhdGEtPnBQYWdlVmlldywgQ1BERl9BQWN0aW9uOjpLZXlTdHJva2UsIGZhKTsKKwkJCQkJYlJDID0gRkFMU0U7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCXBGb3JtRmlsbGVyLT5SZXN0b3JlU3RhdGUocERhdGEtPnBQYWdlVmlldyk7CisJCQkJCWJSQyA9IEZBTFNFOworCQkJCX0KKwkJCQkKKwkJCQlpZiAocERvY3VtZW50LT5HZXRGb2N1c0Fubm90KCkgIT0gcERhdGEtPnBXaWRnZXQpCisJCQkJeworCQkJCQlwRm9ybUZpbGxlci0+Q29tbWl0RGF0YShwRGF0YS0+cFBhZ2VWaWV3LG5GbGFnKTsKKwkJCQkJYkV4aXQgPSBUUlVFOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsJCQkKKwkJCQlpZiAoIUlzVmFsaWRBbm5vdChwRGF0YS0+cFBhZ2VWaWV3LCBwRGF0YS0+cFdpZGdldCkpCisJCQkJeworCQkJCQliRXhpdCA9IFRSVUU7CisJCQkJCW1fYk5vdGlmeWluZyA9IEZBTFNFOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJfQorCQkJCisJCQltX2JOb3RpZnlpbmcgPSBGQUxTRTsKKwkJfQorCX0KK30KKwordm9pZAlDRkZMX0lGb3JtRmlsbGVyOjpPbkFmdGVyS2V5U3Ryb2tlKEZYX0JPT0wgYkVkaXRPckxpc3QsIHZvaWQqIHBQcml2YXRlRGF0YSwgRlhfQk9PTCAmIGJFeGl0LEZYX0RXT1JEIG5GbGFnKSAKK3sKKwlBU1NFUlQocFByaXZhdGVEYXRhICE9IE5VTEwpOworCUNGRkxfUHJpdmF0ZURhdGEqIHBEYXRhID0gKENGRkxfUHJpdmF0ZURhdGEqKXBQcml2YXRlRGF0YTsKKwlBU1NFUlQocERhdGEtPnBXaWRnZXQgIT0gTlVMTCk7CisJCisJQ0ZGTF9Gb3JtRmlsbGVyKiBwRm9ybUZpbGxlciA9IEdldEZvcm1GaWxsZXIocERhdGEtPnBXaWRnZXQsIEZBTFNFKTsKKwlBU1NFUlQocEZvcm1GaWxsZXIgIT0gTlVMTCk7CisJCisJaWYgKCFiRWRpdE9yTGlzdCkKKwkJcEZvcm1GaWxsZXItPk9uS2V5U3Ryb2tlKGJFeGl0KTsKK30KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2Zvcm1maWxsZXIvRkZMX0xpc3RCb3guY3BwIGIvZnBkZnNkay9zcmMvZm9ybWZpbGxlci9GRkxfTGlzdEJveC5jcHAKaW5kZXggOWRkYjZhMC4uODdhZTU1MiAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvZm9ybWZpbGxlci9GRkxfTGlzdEJveC5jcHAKKysrIGIvZnBkZnNkay9zcmMvZm9ybWZpbGxlci9GRkxfTGlzdEJveC5jcHAKQEAgLTEsMzE5ICsxLDMxOSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9Gb3JtRmlsbGVyLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfRm9ybUZpbGxlci5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0xpc3RCb3guaCINCi0vLyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX01vZHVsZS5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0lGb3JtRmlsbGVyLmgiDQotLy8jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9VbmRvLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfQ0JBX0ZvbnRtYXAuaCINCi0NCi0NCi0jZGVmaW5lCUZGTF9ERUZBVUxUTElTVEJPWEZPTlRTSVpFCQkxMi4wZg0KLQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZGTF9MaXN0Qm94IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DRkZMX0xpc3RCb3g6OkNGRkxfTGlzdEJveChDUERGRG9jX0Vudmlyb25tZW50KiBwQXBwLCBDUERGU0RLX0Fubm90KiBwV2lkZ2V0KSA6DQotCUNGRkxfRm9ybUZpbGxlcihwQXBwLCBwV2lkZ2V0KSwNCi0JbV9wRm9udE1hcChOVUxMKQ0KLXsNCi19DQotDQotQ0ZGTF9MaXN0Qm94Ojp+Q0ZGTF9MaXN0Qm94KCkNCi17DQotCWlmIChtX3BGb250TWFwKQ0KLQl7DQotCQlkZWxldGUgbV9wRm9udE1hcDsNCi0JCW1fcEZvbnRNYXAgPSBOVUxMOw0KLQl9DQotfQ0KLQ0KLVBXTF9DUkVBVEVQQVJBTQlDRkZMX0xpc3RCb3g6OkdldENyZWF0ZVBhcmFtKCkNCi17DQotCVBXTF9DUkVBVEVQQVJBTSBjcCA9IENGRkxfRm9ybUZpbGxlcjo6R2V0Q3JlYXRlUGFyYW0oKTsNCi0NCi0JQVNTRVJUKG1fcFdpZGdldCAhPSBOVUxMKTsNCi0JRlhfRFdPUkQgZHdGaWVsZEZsYWcgPSBtX3BXaWRnZXQtPkdldEZpZWxkRmxhZ3MoKTsNCi0JCQ0KLQlpZiAoZHdGaWVsZEZsYWcgJiBGSUVMREZMQUdfTVVMVElTRUxFQ1QpDQotCXsJCQ0KLQkJY3AuZHdGbGFncyB8PSBQTEJTX01VTFRJUExFU0VMOw0KLQl9DQotDQotCWlmIChkd0ZpZWxkRmxhZyAmIEZJRUxERkxBR19DT01NSVRPTlNFTENIQU5HRSkNCi0Jew0KLQkJLy9jcC5kd0ZsYWdzIHw9IFBMQlNfQ09NTUlUU0VMRUNURURWQUxVRTsNCi0JfQ0KLQ0KLQljcC5kd0ZsYWdzIHw9IFBXU19WU0NST0xMOw0KLQ0KLQlpZiAoY3AuZHdGbGFncyAmIFBXU19BVVRPRk9OVFNJWkUpDQotCQljcC5mRm9udFNpemUgPSBGRkxfREVGQVVMVExJU1RCT1hGT05UU0laRTsNCi0NCi0JaWYgKCFtX3BGb250TWFwKQ0KLQl7DQotCQlBU1NFUlQodGhpcy0+bV9wQXBwICE9IE5VTEwpOw0KLQkJbV9wRm9udE1hcCA9IG5ldyBDQkFfRm9udE1hcChtX3BXaWRnZXQsbV9wQXBwLT5HZXRTeXNIYW5kbGVyKCkpOy8vLCBJU3lzdGVtSGFuZGxlOjpHZXRTeXN0ZW1IYW5kbGVyKG1fcEFwcCkpOw0KLQkJbV9wRm9udE1hcC0+SW5pdGlhbCgpOw0KLQl9DQotCWNwLnBGb250TWFwID0gbV9wRm9udE1hcDsNCi0NCi0JcmV0dXJuIGNwOw0KLX0NCi0NCi1DUFdMX1duZCogQ0ZGTF9MaXN0Qm94OjpOZXdQREZXaW5kb3coY29uc3QgUFdMX0NSRUFURVBBUkFNJiBjcCwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQ0KLXsNCi0JQ1BXTF9MaXN0Qm94KiBwV25kID0gbmV3IENQV0xfTGlzdEJveCgpOw0KLQlwV25kLT5BdHRhY2hGRkxEYXRhKHRoaXMpOw0KLQlwV25kLT5DcmVhdGUoY3ApOw0KLQ0KLQlBU1NFUlQobV9wQXBwICE9IE5VTEwpOw0KLQlDRkZMX0lGb3JtRmlsbGVyKiBwSUZvcm1GaWxsZXIgPSBtX3BBcHAtPkdldElGb3JtRmlsbGVyKCk7DQotCXBXbmQtPlNldEZpbGxlck5vdGlmeShwSUZvcm1GaWxsZXIpOw0KLQ0KLQlBU1NFUlQobV9wV2lkZ2V0ICE9IE5VTEwpOw0KLQkNCi0JZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9wV2lkZ2V0LT5Db3VudE9wdGlvbnMoKTsgaTxzejsgaSsrKQ0KLQkJcFduZC0+QWRkU3RyaW5nKG1fcFdpZGdldC0+R2V0T3B0aW9uTGFiZWwoaSkpOw0KLQkNCi0JaWYgKHBXbmQtPkhhc0ZsYWcoUExCU19NVUxUSVBMRVNFTCkpDQotCXsNCi0JCW1fT3JpZ2luU2VsZWN0aW9ucy5SZW1vdmVBbGwoKTsNCi0JCQ0KLQkJRlhfQk9PTCBiU2V0Q2FyZXQgPSBGQUxTRTsNCi0JCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fcFdpZGdldC0+Q291bnRPcHRpb25zKCk7IGk8c3o7IGkrKykNCi0JCXsNCi0JCQlpZiAobV9wV2lkZ2V0LT5Jc09wdGlvblNlbGVjdGVkKGkpKQ0KLQkJCXsNCi0JCQkJaWYgKCFiU2V0Q2FyZXQpDQotCQkJCXsNCi0JCQkJCXBXbmQtPlNldENhcmV0KGkpOw0KLQkJCQkJYlNldENhcmV0ID0gVFJVRTsNCi0JCQkJfQ0KLQkJCQlwV25kLT5TZWxlY3QoaSk7DQotCQkJCW1fT3JpZ2luU2VsZWN0aW9ucy5TZXRBdChpLCBOVUxMKTsNCi0JCQl9DQotCQl9DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlmb3IgKGludCBpPTAsc3o9bV9wV2lkZ2V0LT5Db3VudE9wdGlvbnMoKTsgaTxzejsgaSsrKQ0KLQkJew0KLQkJCWlmIChtX3BXaWRnZXQtPklzT3B0aW9uU2VsZWN0ZWQoaSkpDQotCQkJew0KLQkJCQlwV25kLT5TZWxlY3QoaSk7DQotCQkJCWJyZWFrOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQkNCi0JcFduZC0+U2V0VG9wVmlzaWJsZUluZGV4KG1fcFdpZGdldC0+R2V0VG9wVmlzaWJsZUluZGV4KCkpOw0KLQkNCi0JcmV0dXJuIHBXbmQ7DQotfQ0KLQ0KLQ0KLUZYX0JPT0wJQ0ZGTF9MaXN0Qm94OjpPbkNoYXIoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5DaGFyLCBGWF9VSU5UIG5GbGFncykNCi17DQotCXJldHVybiBDRkZMX0Zvcm1GaWxsZXI6Ok9uQ2hhcihwQW5ub3QsIG5DaGFyLCBuRmxhZ3MpOw0KLX0NCi0NCi1GWF9CT09MCUNGRkxfTGlzdEJveDo6SXNEYXRhQ2hhbmdlZChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpDQotew0KLQlBU1NFUlQobV9wV2lkZ2V0ICE9IE5VTEwpOw0KLQ0KLQlpZiAoQ1BXTF9MaXN0Qm94KiBwTGlzdEJveCA9IChDUFdMX0xpc3RCb3gqKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkNCi0Jew0KLQkJaWYgKG1fcFdpZGdldC0+R2V0RmllbGRGbGFncygpICYgRklFTERGTEFHX01VTFRJU0VMRUNUKQ0KLQkJew0KLQkJCWludCBuU2VsQ291bnQgPSAwOw0KLQkJCWZvciAoRlhfSU5UMzIgaT0wLHN6PXBMaXN0Qm94LT5HZXRDb3VudCgpOyBpPHN6OyBpKyspDQotCQkJew0KLQkJCQlpZiAocExpc3RCb3gtPklzSXRlbVNlbGVjdGVkKGkpKQ0KLQkJCQl7DQotCQkJCQl2b2lkKiBwID0gTlVMTDsNCi0JCQkJCWlmICghbV9PcmlnaW5TZWxlY3Rpb25zLkxvb2t1cChpLCBwKSkNCi0JCQkJCQlyZXR1cm4gVFJVRTsNCi0NCi0JCQkJCW5TZWxDb3VudCsrOw0KLQkJCQl9DQotCQkJfQ0KLQ0KLQkJCXJldHVybiBuU2VsQ291bnQgIT0gbV9PcmlnaW5TZWxlY3Rpb25zLkdldENvdW50KCk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJcmV0dXJuIHBMaXN0Qm94LT5HZXRDdXJTZWwoKSAhPSBtX3BXaWRnZXQtPkdldFNlbGVjdGVkSW5kZXgoMCk7DQotCQl9DQotCX0NCi0JDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotdm9pZCBDRkZMX0xpc3RCb3g6OlNhdmVEYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykNCi17DQotCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7DQotDQotCWlmIChDUFdMX0xpc3RCb3gqIHBMaXN0Qm94ID0gKENQV0xfTGlzdEJveCopR2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpKQ0KLQl7DQotCQlDRlhfSW50QXJyYXkgYU9sZFNlbGVjdCwgYU5ld1NlbGVjdDsNCi0NCi0JCXsNCi0JCQlmb3IgKGludCBpPTAsc3o9bV9wV2lkZ2V0LT5Db3VudE9wdGlvbnMoKTsgaTxzejsgaSsrKQ0KLQkJCXsNCi0JCQkJaWYgKG1fcFdpZGdldC0+SXNPcHRpb25TZWxlY3RlZChpKSkNCi0JCQkJew0KLQkJCQkJYU9sZFNlbGVjdC5BZGQoaSk7DQotCQkJCX0NCi0JCQl9DQotCQl9DQotDQotCQkNCi0JCUZYX0lOVDMyIG5OZXdUb3BJbmRleCA9IHBMaXN0Qm94LT5HZXRUb3BWaXNpYmxlSW5kZXgoKTsNCi0NCi0JCW1fcFdpZGdldC0+Q2xlYXJTZWxlY3Rpb24oRkFMU0UpOwkNCi0NCi0JCWlmIChtX3BXaWRnZXQtPkdldEZpZWxkRmxhZ3MoKSAmIEZJRUxERkxBR19NVUxUSVNFTEVDVCkNCi0JCXsNCi0JCQlmb3IgKEZYX0lOVDMyIGk9MCxzej1wTGlzdEJveC0+R2V0Q291bnQoKTsgaTxzejsgaSsrKQ0KLQkJCXsNCi0JCQkJaWYgKHBMaXN0Qm94LT5Jc0l0ZW1TZWxlY3RlZChpKSkNCi0JCQkJew0KLQkJCQkJbV9wV2lkZ2V0LT5TZXRPcHRpb25TZWxlY3Rpb24oaSwgVFJVRSwgRkFMU0UpOw0KLQkJCQkJYU5ld1NlbGVjdC5BZGQoaSk7DQotCQkJCX0NCi0JCQl9DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJbV9wV2lkZ2V0LT5TZXRPcHRpb25TZWxlY3Rpb24ocExpc3RCb3gtPkdldEN1clNlbCgpLCBUUlVFLCBGQUxTRSk7DQotCQkJYU5ld1NlbGVjdC5BZGQocExpc3RCb3gtPkdldEN1clNlbCgpKTsNCi0JCX0NCi0NCi0JCW1fcFdpZGdldC0+U2V0VG9wVmlzaWJsZUluZGV4KG5OZXdUb3BJbmRleCk7DQotCQltX3BXaWRnZXQtPlJlc2V0RmllbGRBcHBlYXJhbmNlKFRSVUUpOw0KLQkJbV9wV2lkZ2V0LT5VcGRhdGVGaWVsZCgpOw0KLQkJU2V0Q2hhbmdlTWFyaygpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9MaXN0Qm94OjpHZXRBY3Rpb25EYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLA0KLQkJCQkJCVBERlNES19GaWVsZEFjdGlvbiYgZmEpDQotew0KLQlzd2l0Y2ggKHR5cGUpDQotCXsNCi0JY2FzZSBDUERGX0FBY3Rpb246OlZhbGlkYXRlOg0KLQkJaWYgKG1fcFdpZGdldC0+R2V0RmllbGRGbGFncygpICYgRklFTERGTEFHX01VTFRJU0VMRUNUKQ0KLQkJew0KLQkJCWZhLnNWYWx1ZSA9IEwiIjsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlpZiAoQ1BXTF9MaXN0Qm94KiBwTGlzdEJveCA9IChDUFdMX0xpc3RCb3gqKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkNCi0JCQl7DQotCQkJCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7DQotCQkJCUZYX0lOVDMyIG5DdXJTZWwgPSBwTGlzdEJveC0+R2V0Q3VyU2VsKCk7DQotCQkJCWlmIChuQ3VyU2VsID49IDApDQotCQkJCQlmYS5zVmFsdWUgPSBtX3BXaWRnZXQtPkdldE9wdGlvbkxhYmVsKG5DdXJTZWwpOw0KLQkJCX0NCi0JCX0NCi0JCWJyZWFrOw0KLQljYXNlIENQREZfQUFjdGlvbjo6TG9zZUZvY3VzOg0KLQljYXNlIENQREZfQUFjdGlvbjo6R2V0Rm9jdXM6DQotCQlpZiAobV9wV2lkZ2V0LT5HZXRGaWVsZEZsYWdzKCkgJiBGSUVMREZMQUdfTVVMVElTRUxFQ1QpDQotCQl7DQotCQkJZmEuc1ZhbHVlID0gTCIiOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7DQotCQkJRlhfSU5UMzIgbkN1clNlbCA9IG1fcFdpZGdldC0+R2V0U2VsZWN0ZWRJbmRleCgwKTsNCi0JCQlpZiAobkN1clNlbCA+PSAwKQ0KLQkJCQlmYS5zVmFsdWUgPSBtX3BXaWRnZXQtPkdldE9wdGlvbkxhYmVsKG5DdXJTZWwpOw0KLQkJfQ0KLQkJYnJlYWs7DQotCWRlZmF1bHQ6DQotCQlicmVhazsNCi0JfQ0KLX0NCi0NCi0NCi12b2lkIENGRkxfTGlzdEJveDo6U2V0QWN0aW9uRGF0YShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgDQotCQkJCQkJCQljb25zdCBQREZTREtfRmllbGRBY3Rpb24mIGZhKQ0KLXsNCi19DQotDQotdm9pZCBDRkZMX0xpc3RCb3g6OlNhdmVTdGF0ZShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpDQotew0KLQlBU1NFUlQocFBhZ2VWaWV3ICE9IE5VTEwpOw0KLQ0KLQlpZiAoQ1BXTF9MaXN0Qm94KiBwTGlzdEJveCA9IChDUFdMX0xpc3RCb3gqKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkNCi0Jew0KLQkJZm9yIChGWF9JTlQzMiBpPTAsc3o9cExpc3RCb3gtPkdldENvdW50KCk7IGk8c3o7IGkrKykNCi0JCXsNCi0JCQlpZiAocExpc3RCb3gtPklzSXRlbVNlbGVjdGVkKGkpKQ0KLQkJCXsNCi0JCQkJbV9TdGF0ZS5BZGQoaSk7DQotCQkJfQ0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9MaXN0Qm94OjpSZXN0b3JlU3RhdGUoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQ0KLXsNCi0JaWYgKENQV0xfTGlzdEJveCogcExpc3RCb3ggPSAoQ1BXTF9MaXN0Qm94KilHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpDQotCXsNCi0JCWZvciAoaW50IGk9MCxzej1tX1N0YXRlLkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQkJCXBMaXN0Qm94LT5TZWxlY3QobV9TdGF0ZVtpXSk7DQotCX0NCi19DQotDQotQ1BXTF9XbmQqIENGRkxfTGlzdEJveDo6UmVzZXRQREZXaW5kb3coQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBGWF9CT09MIGJSZXN0b3JlVmFsdWUpDQotew0KLQlpZiAoYlJlc3RvcmVWYWx1ZSkNCi0JCVNhdmVTdGF0ZShwUGFnZVZpZXcpOw0KLQkNCi0JRGVzdHJveVBERldpbmRvdyhwUGFnZVZpZXcpOw0KLQkNCi0JQ1BXTF9XbmQqIHBSZXQgPSBOVUxMOw0KLQkNCi0JaWYgKGJSZXN0b3JlVmFsdWUpDQotCXsNCi0JCVJlc3RvcmVTdGF0ZShwUGFnZVZpZXcpOw0KLQkJcFJldCA9IHRoaXMtPkdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKTsNCi0JfQ0KLQllbHNlDQotCQlwUmV0ID0gdGhpcy0+R2V0UERGV2luZG93KHBQYWdlVmlldywgVFJVRSk7DQotCQ0KLQltX3BXaWRnZXQtPlVwZGF0ZUZpZWxkKCk7DQotCQ0KLQlyZXR1cm4gcFJldDsNCi19DQotDQotdm9pZCBDRkZMX0xpc3RCb3g6Ok9uS2V5U3Ryb2tlKEZYX0JPT0wgYktleURvd24sIEZYX0RXT1JEIG5GbGFnKQ0KLXsNCi0JQVNTRVJUKG1fcFdpZGdldCAhPSBOVUxMKTsNCi0NCi0JaW50IG5GbGFncyA9IG1fcFdpZGdldC0+R2V0RmllbGRGbGFncygpOw0KLQkNCi0JaWYgKG5GbGFncyAmIEZJRUxERkxBR19DT01NSVRPTlNFTENIQU5HRSkNCi0Jew0KLQkJaWYgKG1fYlZhbGlkKQ0KLQkJew0KLQkJCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyA9IHRoaXMtPkdldEN1clBhZ2VWaWV3KCk7DQotCQkJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsNCi0NCi0JCQlpZiAoQ29tbWl0RGF0YShwUGFnZVZpZXcsIG5GbGFnKSkNCi0JCQl7DQotCQkJCURlc3Ryb3lQREZXaW5kb3cocFBhZ2VWaWV3KTsNCi0JCQkJbV9iVmFsaWQgPSBGQUxTRTsNCi0JCQl9DQotCQl9DQotCX0NCi19DQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9Gb3JtRmlsbGVyLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9Gb3JtRmlsbGVyLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9MaXN0Qm94LmgiCisvLyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX01vZHVsZS5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfSUZvcm1GaWxsZXIuaCIKKy8vI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfVW5kby5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfQ0JBX0ZvbnRtYXAuaCIKKworCisjZGVmaW5lCUZGTF9ERUZBVUxUTElTVEJPWEZPTlRTSVpFCQkxMi4wZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZGTF9MaXN0Qm94IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ0ZGTF9MaXN0Qm94OjpDRkZMX0xpc3RCb3goQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCwgQ1BERlNES19Bbm5vdCogcFdpZGdldCkgOgorCUNGRkxfRm9ybUZpbGxlcihwQXBwLCBwV2lkZ2V0KSwKKwltX3BGb250TWFwKE5VTEwpCit7Cit9CisKK0NGRkxfTGlzdEJveDo6fkNGRkxfTGlzdEJveCgpCit7CisJaWYgKG1fcEZvbnRNYXApCisJeworCQlkZWxldGUgbV9wRm9udE1hcDsKKwkJbV9wRm9udE1hcCA9IE5VTEw7CisJfQorfQorCitQV0xfQ1JFQVRFUEFSQU0JQ0ZGTF9MaXN0Qm94OjpHZXRDcmVhdGVQYXJhbSgpCit7CisJUFdMX0NSRUFURVBBUkFNIGNwID0gQ0ZGTF9Gb3JtRmlsbGVyOjpHZXRDcmVhdGVQYXJhbSgpOworCisJQVNTRVJUKG1fcFdpZGdldCAhPSBOVUxMKTsKKwlGWF9EV09SRCBkd0ZpZWxkRmxhZyA9IG1fcFdpZGdldC0+R2V0RmllbGRGbGFncygpOworCQkKKwlpZiAoZHdGaWVsZEZsYWcgJiBGSUVMREZMQUdfTVVMVElTRUxFQ1QpCisJewkJCisJCWNwLmR3RmxhZ3MgfD0gUExCU19NVUxUSVBMRVNFTDsKKwl9CisKKwlpZiAoZHdGaWVsZEZsYWcgJiBGSUVMREZMQUdfQ09NTUlUT05TRUxDSEFOR0UpCisJeworCQkvL2NwLmR3RmxhZ3MgfD0gUExCU19DT01NSVRTRUxFQ1RFRFZBTFVFOworCX0KKworCWNwLmR3RmxhZ3MgfD0gUFdTX1ZTQ1JPTEw7CisKKwlpZiAoY3AuZHdGbGFncyAmIFBXU19BVVRPRk9OVFNJWkUpCisJCWNwLmZGb250U2l6ZSA9IEZGTF9ERUZBVUxUTElTVEJPWEZPTlRTSVpFOworCisJaWYgKCFtX3BGb250TWFwKQorCXsKKwkJQVNTRVJUKHRoaXMtPm1fcEFwcCAhPSBOVUxMKTsKKwkJbV9wRm9udE1hcCA9IG5ldyBDQkFfRm9udE1hcChtX3BXaWRnZXQsbV9wQXBwLT5HZXRTeXNIYW5kbGVyKCkpOy8vLCBJU3lzdGVtSGFuZGxlOjpHZXRTeXN0ZW1IYW5kbGVyKG1fcEFwcCkpOworCQltX3BGb250TWFwLT5Jbml0aWFsKCk7CisJfQorCWNwLnBGb250TWFwID0gbV9wRm9udE1hcDsKKworCXJldHVybiBjcDsKK30KKworQ1BXTF9XbmQqIENGRkxfTGlzdEJveDo6TmV3UERGV2luZG93KGNvbnN0IFBXTF9DUkVBVEVQQVJBTSYgY3AsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykKK3sKKwlDUFdMX0xpc3RCb3gqIHBXbmQgPSBuZXcgQ1BXTF9MaXN0Qm94KCk7CisJcFduZC0+QXR0YWNoRkZMRGF0YSh0aGlzKTsKKwlwV25kLT5DcmVhdGUoY3ApOworCisJQVNTRVJUKG1fcEFwcCAhPSBOVUxMKTsKKwlDRkZMX0lGb3JtRmlsbGVyKiBwSUZvcm1GaWxsZXIgPSBtX3BBcHAtPkdldElGb3JtRmlsbGVyKCk7CisJcFduZC0+U2V0RmlsbGVyTm90aWZ5KHBJRm9ybUZpbGxlcik7CisKKwlBU1NFUlQobV9wV2lkZ2V0ICE9IE5VTEwpOworCQorCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fcFdpZGdldC0+Q291bnRPcHRpb25zKCk7IGk8c3o7IGkrKykKKwkJcFduZC0+QWRkU3RyaW5nKG1fcFdpZGdldC0+R2V0T3B0aW9uTGFiZWwoaSkpOworCQorCWlmIChwV25kLT5IYXNGbGFnKFBMQlNfTVVMVElQTEVTRUwpKQorCXsKKwkJbV9PcmlnaW5TZWxlY3Rpb25zLlJlbW92ZUFsbCgpOworCQkKKwkJRlhfQk9PTCBiU2V0Q2FyZXQgPSBGQUxTRTsKKwkJZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9wV2lkZ2V0LT5Db3VudE9wdGlvbnMoKTsgaTxzejsgaSsrKQorCQl7CisJCQlpZiAobV9wV2lkZ2V0LT5Jc09wdGlvblNlbGVjdGVkKGkpKQorCQkJeworCQkJCWlmICghYlNldENhcmV0KQorCQkJCXsKKwkJCQkJcFduZC0+U2V0Q2FyZXQoaSk7CisJCQkJCWJTZXRDYXJldCA9IFRSVUU7CisJCQkJfQorCQkJCXBXbmQtPlNlbGVjdChpKTsKKwkJCQltX09yaWdpblNlbGVjdGlvbnMuU2V0QXQoaSwgTlVMTCk7CisJCQl9CisJCX0KKwl9CisJZWxzZQorCXsKKwkJZm9yIChpbnQgaT0wLHN6PW1fcFdpZGdldC0+Q291bnRPcHRpb25zKCk7IGk8c3o7IGkrKykKKwkJeworCQkJaWYgKG1fcFdpZGdldC0+SXNPcHRpb25TZWxlY3RlZChpKSkKKwkJCXsKKwkJCQlwV25kLT5TZWxlY3QoaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJCisJcFduZC0+U2V0VG9wVmlzaWJsZUluZGV4KG1fcFdpZGdldC0+R2V0VG9wVmlzaWJsZUluZGV4KCkpOworCQorCXJldHVybiBwV25kOworfQorCisKK0ZYX0JPT0wJQ0ZGTF9MaXN0Qm94OjpPbkNoYXIoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5DaGFyLCBGWF9VSU5UIG5GbGFncykKK3sKKwlyZXR1cm4gQ0ZGTF9Gb3JtRmlsbGVyOjpPbkNoYXIocEFubm90LCBuQ2hhciwgbkZsYWdzKTsKK30KKworRlhfQk9PTAlDRkZMX0xpc3RCb3g6OklzRGF0YUNoYW5nZWQoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQoreworCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7CisKKwlpZiAoQ1BXTF9MaXN0Qm94KiBwTGlzdEJveCA9IChDUFdMX0xpc3RCb3gqKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkKKwl7CisJCWlmIChtX3BXaWRnZXQtPkdldEZpZWxkRmxhZ3MoKSAmIEZJRUxERkxBR19NVUxUSVNFTEVDVCkKKwkJeworCQkJaW50IG5TZWxDb3VudCA9IDA7CisJCQlmb3IgKEZYX0lOVDMyIGk9MCxzej1wTGlzdEJveC0+R2V0Q291bnQoKTsgaTxzejsgaSsrKQorCQkJeworCQkJCWlmIChwTGlzdEJveC0+SXNJdGVtU2VsZWN0ZWQoaSkpCisJCQkJeworCQkJCQl2b2lkKiBwID0gTlVMTDsKKwkJCQkJaWYgKCFtX09yaWdpblNlbGVjdGlvbnMuTG9va3VwKGksIHApKQorCQkJCQkJcmV0dXJuIFRSVUU7CisKKwkJCQkJblNlbENvdW50Kys7CisJCQkJfQorCQkJfQorCisJCQlyZXR1cm4gblNlbENvdW50ICE9IG1fT3JpZ2luU2VsZWN0aW9ucy5HZXRDb3VudCgpOworCQl9CisJCWVsc2UKKwkJeworCQkJcmV0dXJuIHBMaXN0Qm94LT5HZXRDdXJTZWwoKSAhPSBtX3BXaWRnZXQtPkdldFNlbGVjdGVkSW5kZXgoMCk7CisJCX0KKwl9CisJCisJcmV0dXJuIEZBTFNFOworfQorCit2b2lkIENGRkxfTGlzdEJveDo6U2F2ZURhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQoreworCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7CisKKwlpZiAoQ1BXTF9MaXN0Qm94KiBwTGlzdEJveCA9IChDUFdMX0xpc3RCb3gqKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkKKwl7CisJCUNGWF9JbnRBcnJheSBhT2xkU2VsZWN0LCBhTmV3U2VsZWN0OworCisJCXsKKwkJCWZvciAoaW50IGk9MCxzej1tX3BXaWRnZXQtPkNvdW50T3B0aW9ucygpOyBpPHN6OyBpKyspCisJCQl7CisJCQkJaWYgKG1fcFdpZGdldC0+SXNPcHRpb25TZWxlY3RlZChpKSkKKwkJCQl7CisJCQkJCWFPbGRTZWxlY3QuQWRkKGkpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCQorCQlGWF9JTlQzMiBuTmV3VG9wSW5kZXggPSBwTGlzdEJveC0+R2V0VG9wVmlzaWJsZUluZGV4KCk7CisKKwkJbV9wV2lkZ2V0LT5DbGVhclNlbGVjdGlvbihGQUxTRSk7CQorCisJCWlmIChtX3BXaWRnZXQtPkdldEZpZWxkRmxhZ3MoKSAmIEZJRUxERkxBR19NVUxUSVNFTEVDVCkKKwkJeworCQkJZm9yIChGWF9JTlQzMiBpPTAsc3o9cExpc3RCb3gtPkdldENvdW50KCk7IGk8c3o7IGkrKykKKwkJCXsKKwkJCQlpZiAocExpc3RCb3gtPklzSXRlbVNlbGVjdGVkKGkpKQorCQkJCXsKKwkJCQkJbV9wV2lkZ2V0LT5TZXRPcHRpb25TZWxlY3Rpb24oaSwgVFJVRSwgRkFMU0UpOworCQkJCQlhTmV3U2VsZWN0LkFkZChpKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQltX3BXaWRnZXQtPlNldE9wdGlvblNlbGVjdGlvbihwTGlzdEJveC0+R2V0Q3VyU2VsKCksIFRSVUUsIEZBTFNFKTsKKwkJCWFOZXdTZWxlY3QuQWRkKHBMaXN0Qm94LT5HZXRDdXJTZWwoKSk7CisJCX0KKworCQltX3BXaWRnZXQtPlNldFRvcFZpc2libGVJbmRleChuTmV3VG9wSW5kZXgpOworCQltX3BXaWRnZXQtPlJlc2V0RmllbGRBcHBlYXJhbmNlKFRSVUUpOworCQltX3BXaWRnZXQtPlVwZGF0ZUZpZWxkKCk7CisJCVNldENoYW5nZU1hcmsoKTsKKwl9Cit9CisKK3ZvaWQgQ0ZGTF9MaXN0Qm94OjpHZXRBY3Rpb25EYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLAorCQkJCQkJUERGU0RLX0ZpZWxkQWN0aW9uJiBmYSkKK3sKKwlzd2l0Y2ggKHR5cGUpCisJeworCWNhc2UgQ1BERl9BQWN0aW9uOjpWYWxpZGF0ZToKKwkJaWYgKG1fcFdpZGdldC0+R2V0RmllbGRGbGFncygpICYgRklFTERGTEFHX01VTFRJU0VMRUNUKQorCQl7CisJCQlmYS5zVmFsdWUgPSBMIiI7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoQ1BXTF9MaXN0Qm94KiBwTGlzdEJveCA9IChDUFdMX0xpc3RCb3gqKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkKKwkJCXsKKwkJCQlBU1NFUlQobV9wV2lkZ2V0ICE9IE5VTEwpOworCQkJCUZYX0lOVDMyIG5DdXJTZWwgPSBwTGlzdEJveC0+R2V0Q3VyU2VsKCk7CisJCQkJaWYgKG5DdXJTZWwgPj0gMCkKKwkJCQkJZmEuc1ZhbHVlID0gbV9wV2lkZ2V0LT5HZXRPcHRpb25MYWJlbChuQ3VyU2VsKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIENQREZfQUFjdGlvbjo6TG9zZUZvY3VzOgorCWNhc2UgQ1BERl9BQWN0aW9uOjpHZXRGb2N1czoKKwkJaWYgKG1fcFdpZGdldC0+R2V0RmllbGRGbGFncygpICYgRklFTERGTEFHX01VTFRJU0VMRUNUKQorCQl7CisJCQlmYS5zVmFsdWUgPSBMIiI7CisJCX0KKwkJZWxzZQorCQl7CisJCQlBU1NFUlQobV9wV2lkZ2V0ICE9IE5VTEwpOworCQkJRlhfSU5UMzIgbkN1clNlbCA9IG1fcFdpZGdldC0+R2V0U2VsZWN0ZWRJbmRleCgwKTsKKwkJCWlmIChuQ3VyU2VsID49IDApCisJCQkJZmEuc1ZhbHVlID0gbV9wV2lkZ2V0LT5HZXRPcHRpb25MYWJlbChuQ3VyU2VsKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKwordm9pZCBDRkZMX0xpc3RCb3g6OlNldEFjdGlvbkRhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIAorCQkJCQkJCQljb25zdCBQREZTREtfRmllbGRBY3Rpb24mIGZhKQoreworfQorCit2b2lkIENGRkxfTGlzdEJveDo6U2F2ZVN0YXRlKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykKK3sKKwlBU1NFUlQocFBhZ2VWaWV3ICE9IE5VTEwpOworCisJaWYgKENQV0xfTGlzdEJveCogcExpc3RCb3ggPSAoQ1BXTF9MaXN0Qm94KilHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpCisJeworCQlmb3IgKEZYX0lOVDMyIGk9MCxzej1wTGlzdEJveC0+R2V0Q291bnQoKTsgaTxzejsgaSsrKQorCQl7CisJCQlpZiAocExpc3RCb3gtPklzSXRlbVNlbGVjdGVkKGkpKQorCQkJeworCQkJCW1fU3RhdGUuQWRkKGkpOworCQkJfQorCQl9CisJfQorfQorCit2b2lkIENGRkxfTGlzdEJveDo6UmVzdG9yZVN0YXRlKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykKK3sKKwlpZiAoQ1BXTF9MaXN0Qm94KiBwTGlzdEJveCA9IChDUFdMX0xpc3RCb3gqKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkKKwl7CisJCWZvciAoaW50IGk9MCxzej1tX1N0YXRlLkdldFNpemUoKTsgaTxzejsgaSsrKQorCQkJcExpc3RCb3gtPlNlbGVjdChtX1N0YXRlW2ldKTsKKwl9Cit9CisKK0NQV0xfV25kKiBDRkZMX0xpc3RCb3g6OlJlc2V0UERGV2luZG93KENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfQk9PTCBiUmVzdG9yZVZhbHVlKQoreworCWlmIChiUmVzdG9yZVZhbHVlKQorCQlTYXZlU3RhdGUocFBhZ2VWaWV3KTsKKwkKKwlEZXN0cm95UERGV2luZG93KHBQYWdlVmlldyk7CisJCisJQ1BXTF9XbmQqIHBSZXQgPSBOVUxMOworCQorCWlmIChiUmVzdG9yZVZhbHVlKQorCXsKKwkJUmVzdG9yZVN0YXRlKHBQYWdlVmlldyk7CisJCXBSZXQgPSB0aGlzLT5HZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSk7CisJfQorCWVsc2UKKwkJcFJldCA9IHRoaXMtPkdldFBERldpbmRvdyhwUGFnZVZpZXcsIFRSVUUpOworCQorCW1fcFdpZGdldC0+VXBkYXRlRmllbGQoKTsKKwkKKwlyZXR1cm4gcFJldDsKK30KKwordm9pZCBDRkZMX0xpc3RCb3g6Ok9uS2V5U3Ryb2tlKEZYX0JPT0wgYktleURvd24sIEZYX0RXT1JEIG5GbGFnKQoreworCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7CisKKwlpbnQgbkZsYWdzID0gbV9wV2lkZ2V0LT5HZXRGaWVsZEZsYWdzKCk7CisJCisJaWYgKG5GbGFncyAmIEZJRUxERkxBR19DT01NSVRPTlNFTENIQU5HRSkKKwl7CisJCWlmIChtX2JWYWxpZCkKKwkJeworCQkJQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gdGhpcy0+R2V0Q3VyUGFnZVZpZXcoKTsKKwkJCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7CisKKwkJCWlmIChDb21taXREYXRhKHBQYWdlVmlldywgbkZsYWcpKQorCQkJeworCQkJCURlc3Ryb3lQREZXaW5kb3cocFBhZ2VWaWV3KTsKKwkJCQltX2JWYWxpZCA9IEZBTFNFOworCQkJfQorCQl9CisJfQorfQorCmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9mb3JtZmlsbGVyL0ZGTF9Ob3RpZnkuY3BwIGIvZnBkZnNkay9zcmMvZm9ybWZpbGxlci9GRkxfTm90aWZ5LmNwcAppbmRleCBmMThlZDUxLi5mNmEyZmViIDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9mb3JtZmlsbGVyL0ZGTF9Ob3RpZnkuY3BwCisrKyBiL2ZwZGZzZGsvc3JjL2Zvcm1maWxsZXIvRkZMX05vdGlmeS5jcHAKQEAgLTEsMTcyICsxLDE3MiBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotLy8gI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9Gb3JtRmlsbGVyLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfRm9ybUZpbGxlci5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX05vdGlmeS5oIg0KLS8vICNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0NvbWJvQm94LmgiDQotLy8gI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfTW9kdWxlLmgiDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZGTF9Ob3RpZnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotLy8jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDgwMCkNCi0NCi1DRkZMX05vdGlmeTo6Q0ZGTF9Ob3RpZnkoQ0ZGTF9Gb3JtRmlsbGVyICogcEZvcm1GaWxsZXIpIDogDQotCW1fcEZvcm1GaWxsZXIocEZvcm1GaWxsZXIpLA0KLQltX2JEb0FjdGlvbmluZyhGQUxTRSksDQotCW1fbk5vdGlmeUZsYWcoMCkNCi17DQotCUFTU0VSVChtX3BGb3JtRmlsbGVyICE9IE5VTEwpOw0KLX0NCi0NCi1DRkZMX05vdGlmeTo6fkNGRkxfTm90aWZ5KCkNCi17DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9Ob3RpZnk6OkJlZm9yZU5vdGlmeSgpDQotew0KLQltX25Ob3RpZnlGbGFnICsrOw0KLX0NCi0NCi0NCi12b2lkIENGRkxfTm90aWZ5OjpBZnRlck5vdGlmeSgpDQotew0KLQltX25Ob3RpZnlGbGFnIC0tOw0KLX0NCi0NCi1GWF9CT09MIENGRkxfTm90aWZ5OjpPbk1vdXNlVXAoRlhfQk9PTCAmIGJFeGl0KQ0KLXsNCi0JQmVmb3JlTm90aWZ5KCk7DQotCUZYX0JPT0wgYlJldCA9IEZBTFNFOy8vRG9BQWN0aW9uKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGU6OkJ1dHRvblVwLCBiRXhpdCk7DQotCUFmdGVyTm90aWZ5KCk7DQotCXJldHVybiBiUmV0Ow0KLX0NCi0NCi1GWF9CT09MIENGRkxfTm90aWZ5OjpPbk1vdXNlRG93bihGWF9CT09MICYgYkV4aXQpDQotew0KLQlCZWZvcmVOb3RpZnkoKTsNCi0JRlhfQk9PTCBiUmV0ID0gRkFMU0U7Ly9Eb0FBY3Rpb24oQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZTo6QnV0dG9uRG93biwgYkV4aXQpOw0KLQlBZnRlck5vdGlmeSgpOw0KLQlyZXR1cm4gYlJldDsNCi19DQotDQotRlhfQk9PTCBDRkZMX05vdGlmeTo6T25Nb3VzZUVudGVyKEZYX0JPT0wgJiBiRXhpdCkNCi17DQotCUJlZm9yZU5vdGlmeSgpOw0KLQlGWF9CT09MIGJSZXQgPSBGQUxTRTsvL0RvQUFjdGlvbihDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlOjpDdXJzb3JFbnRlciwgYkV4aXQpOw0KLQlBZnRlck5vdGlmeSgpOw0KLQlyZXR1cm4gYlJldDsNCi19DQotDQotRlhfQk9PTCBDRkZMX05vdGlmeTo6T25Nb3VzZUV4aXQoRlhfQk9PTCAmIGJFeGl0KQ0KLXsNCi0JQmVmb3JlTm90aWZ5KCk7DQotCUZYX0JPT0wgYlJldCA9IEZBTFNFOy8vRG9BQWN0aW9uKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGU6OkN1cnNvckV4aXQsIGJFeGl0KTsNCi0JQWZ0ZXJOb3RpZnkoKTsNCi0JcmV0dXJuIGJSZXQ7DQotfQ0KLQ0KLUZYX0JPT0wgQ0ZGTF9Ob3RpZnk6Ok9uU2V0Rm9jdXMoRlhfQk9PTCAmIGJFeGl0KQ0KLXsNCi0JQmVmb3JlTm90aWZ5KCk7DQotCUZYX0JPT0wgYlJldCA9IEZBTFNFOy8vRG9BQWN0aW9uKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGU6OkdldEZvY3VzLCBiRXhpdCk7DQotCUFmdGVyTm90aWZ5KCk7DQotCXJldHVybiBiUmV0Ow0KLX0NCi0NCi1GWF9CT09MIENGRkxfTm90aWZ5OjpPbktpbGxGb2N1cyhGWF9CT09MICYgYkV4aXQpDQotew0KLQlCZWZvcmVOb3RpZnkoKTsNCi0JRlhfQk9PTCBiUmV0ID0gRkFMU0U7Ly9Eb0FBY3Rpb24oQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZTo6TG9zZUZvY3VzLCBiRXhpdCk7DQotCUFmdGVyTm90aWZ5KCk7DQotCXJldHVybiBiUmV0Ow0KLX0NCi0NCi1GWF9CT09MIENGRkxfTm90aWZ5OjpPbkNhbGN1bGF0ZSgpDQotew0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBDRkZMX05vdGlmeTo6T25Gb3JtYXQoaW50IGlDb21taXRLZXkpDQotew0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBDRkZMX05vdGlmeTo6T25LZXlTdHJva2UoQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQsIGludCBuQ29tbWl0S2V5LCBDRlhfV2lkZVN0cmluZyYgc3RyVmFsdWUsIENGWF9XaWRlU3RyaW5nJiBzdHJDaGFuZ2UsIA0KLQkJCQkJCQkgICBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyQ2hhbmdlRXgsIEZYX0JPT0wgYktleURvd24sIEZYX0JPT0wgYk1vZGlmaWVyLA0KLQkJCQkJCQkgICBGWF9CT09MIGJTaGlmdCwgRlhfQk9PTCBiV2lsbENvbW1pdCwgRlhfQk9PTCBiRmllbGRGdWxsLCANCi0JCQkJCQkJICAgaW50JiBuU2VsU3RhcnQsIGludCYgblNlbEVuZCwgRlhfQk9PTCYgYlJDKQ0KLXsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgQ0ZGTF9Ob3RpZnk6Ok9uVmFsaWRhdGUoQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQsIENGWF9XaWRlU3RyaW5nJiBzdHJWYWx1ZSwgQ0ZYX1dpZGVTdHJpbmcgJiBzdHJDaGFuZ2UsIA0KLQkJCQkJCQkJCSAgIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJDaGFuZ2VFeCwgRlhfQk9PTCBiS2V5RG93biwgRlhfQk9PTCBiTW9kaWZpZXIsDQotCQkJCQkJCQkJICAgRlhfQk9PTCBiU2hpZnQsIEZYX0JPT0wgJiBiUkMpDQotew0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTAlDRkZMX05vdGlmeTo6RG9BQWN0aW9uKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgZUFBVCwgRlhfQk9PTCAmIGJFeGl0KQ0KLXsNCi0JaWYgKHRoaXMtPm1fYkRvQWN0aW9uaW5nKSByZXR1cm4gRkFMU0U7DQotCQ0KLQlDUERGX0FjdGlvbiBhY3Rpb247DQotCWlmICghRmluZEFBY3Rpb24oZUFBVCxhY3Rpb24pKSByZXR1cm4gRkFMU0U7DQotDQotCXRoaXMtPm1fYkRvQWN0aW9uaW5nID0gVFJVRTsJDQotCUV4ZWN1dGVBY3Rpb25UcmVlKGVBQVQsYWN0aW9uLGJFeGl0KTsJDQotCXRoaXMtPm1fYkRvQWN0aW9uaW5nID0gRkFMU0U7DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MCUNGRkxfTm90aWZ5OjpFeGVjdXRlQWN0aW9uVHJlZShDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIGVBQVQsQ1BERl9BY3Rpb24gJiBhY3Rpb24sIEZYX0JPT0wmIGJFeGl0KQ0KLXsNCi0JaWYgKCFFeGVjdXRlQWN0aW9uKGVBQVQsYWN0aW9uLGJFeGl0KSkgcmV0dXJuIEZBTFNFOw0KLQlpZiAoYkV4aXQpIHJldHVybiBUUlVFOw0KLQ0KLQlmb3IgKEZYX0lOVDMyIGk9MCxzej1hY3Rpb24uR2V0U3ViQWN0aW9uc0NvdW50KCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJQ1BERl9BY3Rpb24gc3ViYWN0aW9uID0gYWN0aW9uLkdldFN1YkFjdGlvbihpKTsNCi0JCWlmICghRXhlY3V0ZUFjdGlvblRyZWUoZUFBVCxzdWJhY3Rpb24sYkV4aXQpKSByZXR1cm4gRkFMU0U7DQotCQlpZiAoYkV4aXQpIGJyZWFrOw0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi0NCi1GWF9CT09MCUNGRkxfTm90aWZ5OjpGaW5kQUFjdGlvbihDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIGVBQVQsQ1BERl9BY3Rpb24gJiBhY3Rpb24pDQotew0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgQ0ZGTF9Ob3RpZnk6OkZpbmRBQWN0aW9uKENQREZfQUFjdGlvbiBhYWN0aW9uLENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgZUFBVCxDUERGX0FjdGlvbiAmIGFjdGlvbikNCi17DQotCUNQREZfQWN0aW9uIE15QWN0aW9uOw0KLQ0KLQlpZiAoYWFjdGlvbi5BY3Rpb25FeGlzdChlQUFUKSkNCi0Jew0KLQkJTXlBY3Rpb24gPSBhYWN0aW9uLkdldEFjdGlvbihlQUFUKTsNCi0JfQ0KLQllbHNlDQotCQlyZXR1cm4gRkFMU0U7DQotDQotDQotCWlmIChNeUFjdGlvbi5HZXRUeXBlKCkgPT0gQ1BERl9BY3Rpb246OlVua25vd24pDQotCQlyZXR1cm4gRkFMU0U7DQotDQotCWFjdGlvbiA9IE15QWN0aW9uOw0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTAlDRkZMX05vdGlmeTo6RXhlY3V0ZUFjdGlvbihDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIGVBQVQsQ1BERl9BY3Rpb24gJiBhY3Rpb24sRlhfQk9PTCYgYkV4aXQpDQotew0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLS8vI3ByYWdtYSB3YXJuaW5nKGRlZmF1bHQ6IDQ4MDApDQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworLy8gI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9Gb3JtRmlsbGVyLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9Gb3JtRmlsbGVyLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9Ob3RpZnkuaCIKKy8vICNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0NvbWJvQm94LmgiCisvLyAjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9Nb2R1bGUuaCIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZGTF9Ob3RpZnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8vI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ4MDApCisKK0NGRkxfTm90aWZ5OjpDRkZMX05vdGlmeShDRkZMX0Zvcm1GaWxsZXIgKiBwRm9ybUZpbGxlcikgOiAKKwltX3BGb3JtRmlsbGVyKHBGb3JtRmlsbGVyKSwKKwltX2JEb0FjdGlvbmluZyhGQUxTRSksCisJbV9uTm90aWZ5RmxhZygwKQoreworCUFTU0VSVChtX3BGb3JtRmlsbGVyICE9IE5VTEwpOworfQorCitDRkZMX05vdGlmeTo6fkNGRkxfTm90aWZ5KCkKK3sKK30KKwordm9pZCBDRkZMX05vdGlmeTo6QmVmb3JlTm90aWZ5KCkKK3sKKwltX25Ob3RpZnlGbGFnICsrOworfQorCisKK3ZvaWQgQ0ZGTF9Ob3RpZnk6OkFmdGVyTm90aWZ5KCkKK3sKKwltX25Ob3RpZnlGbGFnIC0tOworfQorCitGWF9CT09MIENGRkxfTm90aWZ5OjpPbk1vdXNlVXAoRlhfQk9PTCAmIGJFeGl0KQoreworCUJlZm9yZU5vdGlmeSgpOworCUZYX0JPT0wgYlJldCA9IEZBTFNFOy8vRG9BQWN0aW9uKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGU6OkJ1dHRvblVwLCBiRXhpdCk7CisJQWZ0ZXJOb3RpZnkoKTsKKwlyZXR1cm4gYlJldDsKK30KKworRlhfQk9PTCBDRkZMX05vdGlmeTo6T25Nb3VzZURvd24oRlhfQk9PTCAmIGJFeGl0KQoreworCUJlZm9yZU5vdGlmeSgpOworCUZYX0JPT0wgYlJldCA9IEZBTFNFOy8vRG9BQWN0aW9uKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGU6OkJ1dHRvbkRvd24sIGJFeGl0KTsKKwlBZnRlck5vdGlmeSgpOworCXJldHVybiBiUmV0OworfQorCitGWF9CT09MIENGRkxfTm90aWZ5OjpPbk1vdXNlRW50ZXIoRlhfQk9PTCAmIGJFeGl0KQoreworCUJlZm9yZU5vdGlmeSgpOworCUZYX0JPT0wgYlJldCA9IEZBTFNFOy8vRG9BQWN0aW9uKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGU6OkN1cnNvckVudGVyLCBiRXhpdCk7CisJQWZ0ZXJOb3RpZnkoKTsKKwlyZXR1cm4gYlJldDsKK30KKworRlhfQk9PTCBDRkZMX05vdGlmeTo6T25Nb3VzZUV4aXQoRlhfQk9PTCAmIGJFeGl0KQoreworCUJlZm9yZU5vdGlmeSgpOworCUZYX0JPT0wgYlJldCA9IEZBTFNFOy8vRG9BQWN0aW9uKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGU6OkN1cnNvckV4aXQsIGJFeGl0KTsKKwlBZnRlck5vdGlmeSgpOworCXJldHVybiBiUmV0OworfQorCitGWF9CT09MIENGRkxfTm90aWZ5OjpPblNldEZvY3VzKEZYX0JPT0wgJiBiRXhpdCkKK3sKKwlCZWZvcmVOb3RpZnkoKTsKKwlGWF9CT09MIGJSZXQgPSBGQUxTRTsvL0RvQUFjdGlvbihDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlOjpHZXRGb2N1cywgYkV4aXQpOworCUFmdGVyTm90aWZ5KCk7CisJcmV0dXJuIGJSZXQ7Cit9CisKK0ZYX0JPT0wgQ0ZGTF9Ob3RpZnk6Ok9uS2lsbEZvY3VzKEZYX0JPT0wgJiBiRXhpdCkKK3sKKwlCZWZvcmVOb3RpZnkoKTsKKwlGWF9CT09MIGJSZXQgPSBGQUxTRTsvL0RvQUFjdGlvbihDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlOjpMb3NlRm9jdXMsIGJFeGl0KTsKKwlBZnRlck5vdGlmeSgpOworCXJldHVybiBiUmV0OworfQorCitGWF9CT09MIENGRkxfTm90aWZ5OjpPbkNhbGN1bGF0ZSgpCit7CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgQ0ZGTF9Ob3RpZnk6Ok9uRm9ybWF0KGludCBpQ29tbWl0S2V5KQoreworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIENGRkxfTm90aWZ5OjpPbktleVN0cm9rZShDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCwgaW50IG5Db21taXRLZXksIENGWF9XaWRlU3RyaW5nJiBzdHJWYWx1ZSwgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZSwgCisJCQkJCQkJICAgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZUV4LCBGWF9CT09MIGJLZXlEb3duLCBGWF9CT09MIGJNb2RpZmllciwKKwkJCQkJCQkgICBGWF9CT09MIGJTaGlmdCwgRlhfQk9PTCBiV2lsbENvbW1pdCwgRlhfQk9PTCBiRmllbGRGdWxsLCAKKwkJCQkJCQkgICBpbnQmIG5TZWxTdGFydCwgaW50JiBuU2VsRW5kLCBGWF9CT09MJiBiUkMpCit7CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgQ0ZGTF9Ob3RpZnk6Ok9uVmFsaWRhdGUoQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQsIENGWF9XaWRlU3RyaW5nJiBzdHJWYWx1ZSwgQ0ZYX1dpZGVTdHJpbmcgJiBzdHJDaGFuZ2UsIAorCQkJCQkJCQkJICAgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZUV4LCBGWF9CT09MIGJLZXlEb3duLCBGWF9CT09MIGJNb2RpZmllciwKKwkJCQkJCQkJCSAgIEZYX0JPT0wgYlNoaWZ0LCBGWF9CT09MICYgYlJDKQoreworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MCUNGRkxfTm90aWZ5OjpEb0FBY3Rpb24oQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSBlQUFULCBGWF9CT09MICYgYkV4aXQpCit7CisJaWYgKHRoaXMtPm1fYkRvQWN0aW9uaW5nKSByZXR1cm4gRkFMU0U7CisJCisJQ1BERl9BY3Rpb24gYWN0aW9uOworCWlmICghRmluZEFBY3Rpb24oZUFBVCxhY3Rpb24pKSByZXR1cm4gRkFMU0U7CisKKwl0aGlzLT5tX2JEb0FjdGlvbmluZyA9IFRSVUU7CQorCUV4ZWN1dGVBY3Rpb25UcmVlKGVBQVQsYWN0aW9uLGJFeGl0KTsJCisJdGhpcy0+bV9iRG9BY3Rpb25pbmcgPSBGQUxTRTsKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTAlDRkZMX05vdGlmeTo6RXhlY3V0ZUFjdGlvblRyZWUoQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSBlQUFULENQREZfQWN0aW9uICYgYWN0aW9uLCBGWF9CT09MJiBiRXhpdCkKK3sKKwlpZiAoIUV4ZWN1dGVBY3Rpb24oZUFBVCxhY3Rpb24sYkV4aXQpKSByZXR1cm4gRkFMU0U7CisJaWYgKGJFeGl0KSByZXR1cm4gVFJVRTsKKworCWZvciAoRlhfSU5UMzIgaT0wLHN6PWFjdGlvbi5HZXRTdWJBY3Rpb25zQ291bnQoKTsgaTxzejsgaSsrKQorCXsKKwkJQ1BERl9BY3Rpb24gc3ViYWN0aW9uID0gYWN0aW9uLkdldFN1YkFjdGlvbihpKTsKKwkJaWYgKCFFeGVjdXRlQWN0aW9uVHJlZShlQUFULHN1YmFjdGlvbixiRXhpdCkpIHJldHVybiBGQUxTRTsKKwkJaWYgKGJFeGl0KSBicmVhazsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworCitGWF9CT09MCUNGRkxfTm90aWZ5OjpGaW5kQUFjdGlvbihDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIGVBQVQsQ1BERl9BY3Rpb24gJiBhY3Rpb24pCit7CisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIENGRkxfTm90aWZ5OjpGaW5kQUFjdGlvbihDUERGX0FBY3Rpb24gYWFjdGlvbixDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIGVBQVQsQ1BERl9BY3Rpb24gJiBhY3Rpb24pCit7CisJQ1BERl9BY3Rpb24gTXlBY3Rpb247CisKKwlpZiAoYWFjdGlvbi5BY3Rpb25FeGlzdChlQUFUKSkKKwl7CisJCU15QWN0aW9uID0gYWFjdGlvbi5HZXRBY3Rpb24oZUFBVCk7CisJfQorCWVsc2UKKwkJcmV0dXJuIEZBTFNFOworCisKKwlpZiAoTXlBY3Rpb24uR2V0VHlwZSgpID09IENQREZfQWN0aW9uOjpVbmtub3duKQorCQlyZXR1cm4gRkFMU0U7CisKKwlhY3Rpb24gPSBNeUFjdGlvbjsKKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MCUNGRkxfTm90aWZ5OjpFeGVjdXRlQWN0aW9uKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgZUFBVCxDUERGX0FjdGlvbiAmIGFjdGlvbixGWF9CT09MJiBiRXhpdCkKK3sKKwlyZXR1cm4gRkFMU0U7Cit9CisvLyNwcmFnbWEgd2FybmluZyhkZWZhdWx0OiA0ODAwKQorCmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9mb3JtZmlsbGVyL0ZGTF9QdXNoQnV0dG9uLmNwcCBiL2ZwZGZzZGsvc3JjL2Zvcm1maWxsZXIvRkZMX1B1c2hCdXR0b24uY3BwCmluZGV4IDFhZmJlOGIuLmI4YTA3ZmIgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2Zvcm1maWxsZXIvRkZMX1B1c2hCdXR0b24uY3BwCisrKyBiL2ZwZGZzZGsvc3JjL2Zvcm1maWxsZXIvRkZMX1B1c2hCdXR0b24uY3BwCkBAIC0xLDQzICsxLDQzIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0Zvcm1GaWxsZXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9Gb3JtRmlsbGVyLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfUHVzaEJ1dHRvbi5oIg0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZGTF9QdXNoQnV0dG9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DRkZMX1B1c2hCdXR0b246OkNGRkxfUHVzaEJ1dHRvbihDUERGRG9jX0Vudmlyb25tZW50KiBwQXBwLCBDUERGU0RLX0Fubm90KiBwQW5ub3QpOg0KLQlDRkZMX0J1dHRvbiggcEFwcCwgcEFubm90KQ0KLXsNCi19DQotDQotQ0ZGTF9QdXNoQnV0dG9uOjp+Q0ZGTF9QdXNoQnV0dG9uKCkNCi17DQotfQ0KLQ0KLUNQV0xfV25kKiBDRkZMX1B1c2hCdXR0b246Ok5ld1BERldpbmRvdyhjb25zdCBQV0xfQ1JFQVRFUEFSQU0mIGNwLCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpDQotew0KLQlDUFdMX1B1c2hCdXR0b24qIHBXbmQgPSBuZXcgQ1BXTF9QdXNoQnV0dG9uKCk7DQotCXBXbmQtPkNyZWF0ZShjcCk7DQotCQ0KLQlyZXR1cm4gcFduZDsNCi19DQotDQotDQotRlhfQk9PTAlDRkZMX1B1c2hCdXR0b246Ok9uQ2hhcihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbkNoYXIsIEZYX1VJTlQgbkZsYWdzKQ0KLXsNCi0JcmV0dXJuIENGRkxfRm9ybUZpbGxlcjo6T25DaGFyKHBBbm5vdCwgbkNoYXIsIG5GbGFncyk7DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9QdXNoQnV0dG9uOjpPbkRyYXcoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCAgQ1BERlNES19Bbm5vdCogcEFubm90LCANCi0JCQkJCQkJIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsDQotCQkJCQkJCSBGWF9EV09SRCBkd0ZsYWdzKQ0KLXsNCi0JQ0ZGTF9CdXR0b246Ok9uRHJhdyhwUGFnZVZpZXcsIHBBbm5vdCwgcERldmljZSwgcFVzZXIyRGV2aWNlLCBkd0ZsYWdzKTsNCi19DQotDQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9Gb3JtRmlsbGVyLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9Gb3JtRmlsbGVyLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9QdXNoQnV0dG9uLmgiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZGTF9QdXNoQnV0dG9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ0ZGTF9QdXNoQnV0dG9uOjpDRkZMX1B1c2hCdXR0b24oQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCwgQ1BERlNES19Bbm5vdCogcEFubm90KToKKwlDRkZMX0J1dHRvbiggcEFwcCwgcEFubm90KQoreworfQorCitDRkZMX1B1c2hCdXR0b246On5DRkZMX1B1c2hCdXR0b24oKQoreworfQorCitDUFdMX1duZCogQ0ZGTF9QdXNoQnV0dG9uOjpOZXdQREZXaW5kb3coY29uc3QgUFdMX0NSRUFURVBBUkFNJiBjcCwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQoreworCUNQV0xfUHVzaEJ1dHRvbiogcFduZCA9IG5ldyBDUFdMX1B1c2hCdXR0b24oKTsKKwlwV25kLT5DcmVhdGUoY3ApOworCQorCXJldHVybiBwV25kOworfQorCisKK0ZYX0JPT0wJQ0ZGTF9QdXNoQnV0dG9uOjpPbkNoYXIoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5DaGFyLCBGWF9VSU5UIG5GbGFncykKK3sKKwlyZXR1cm4gQ0ZGTF9Gb3JtRmlsbGVyOjpPbkNoYXIocEFubm90LCBuQ2hhciwgbkZsYWdzKTsKK30KKwordm9pZCBDRkZMX1B1c2hCdXR0b246Ok9uRHJhdyhDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsICBDUERGU0RLX0Fubm90KiBwQW5ub3QsIAorCQkJCQkJCSBDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLAorCQkJCQkJCSBGWF9EV09SRCBkd0ZsYWdzKQoreworCUNGRkxfQnV0dG9uOjpPbkRyYXcocFBhZ2VWaWV3LCBwQW5ub3QsIHBEZXZpY2UsIHBVc2VyMkRldmljZSwgZHdGbGFncyk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvZm9ybWZpbGxlci9GRkxfUmFkaW9CdXR0b24uY3BwIGIvZnBkZnNkay9zcmMvZm9ybWZpbGxlci9GRkxfUmFkaW9CdXR0b24uY3BwCmluZGV4IDQ2MmMwNWUuLmFhY2I3ZDggMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2Zvcm1maWxsZXIvRkZMX1JhZGlvQnV0dG9uLmNwcAorKysgYi9mcGRmc2RrL3NyYy9mb3JtZmlsbGVyL0ZGTF9SYWRpb0J1dHRvbi5jcHAKQEAgLTEsMTM3ICsxLDEzNyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9Gb3JtRmlsbGVyLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfRm9ybUZpbGxlci5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX1JhZGlvQnV0dG9uLmgiDQotLy8jaW5jbHVkZSAiLi4vaW5jbHVkZS9GRkxfVW5kby5oIg0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZGTF9SYWRpb0J1dHRvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ0ZGTF9SYWRpb0J1dHRvbjo6Q0ZGTF9SYWRpb0J1dHRvbihDUERGRG9jX0Vudmlyb25tZW50KiBwQXBwLCBDUERGU0RLX0Fubm90KiBwV2lkZ2V0KSA6DQotCUNGRkxfQnV0dG9uKHBBcHAsIHBXaWRnZXQpDQotew0KLX0NCi0NCi1DRkZMX1JhZGlvQnV0dG9uOjp+Q0ZGTF9SYWRpb0J1dHRvbigpDQotew0KLX0NCi0NCi1DUFdMX1duZCogQ0ZGTF9SYWRpb0J1dHRvbjo6TmV3UERGV2luZG93KGNvbnN0IFBXTF9DUkVBVEVQQVJBTSYgY3AsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykNCi17DQotCUNQV0xfUmFkaW9CdXR0b24qIHBXbmQgPSBuZXcgQ1BXTF9SYWRpb0J1dHRvbigpOw0KLQlwV25kLT5DcmVhdGUoY3ApOw0KLQ0KLQlBU1NFUlQobV9wV2lkZ2V0ICE9IE5VTEwpOw0KLQlwV25kLT5TZXRDaGVjayhtX3BXaWRnZXQtPklzQ2hlY2tlZCgpKTsNCi0JDQotCXJldHVybiBwV25kOw0KLX0NCi0NCi1GWF9CT09MCUNGRkxfUmFkaW9CdXR0b246Ok9uS2V5RG93bihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX1VJTlQgbktleUNvZGUsIEZYX1VJTlQgbkZsYWdzKQ0KLXsNCi0Jc3dpdGNoIChuS2V5Q29kZSkNCi0Jew0KLQljYXNlIEZXTF9WS0VZX1JldHVybjoNCi0JY2FzZSBGV0xfVktFWV9TcGFjZToNCi0JCXJldHVybiBUUlVFOw0KLQlkZWZhdWx0Og0KLQkJcmV0dXJuIENGRkxfRm9ybUZpbGxlcjo6T25LZXlEb3duKHBBbm5vdCwgbktleUNvZGUsIG5GbGFncyk7DQotCX0NCi19DQotDQotRlhfQk9PTAlDRkZMX1JhZGlvQnV0dG9uOjpPbkNoYXIoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5DaGFyLCBGWF9VSU5UIG5GbGFncykNCi17DQotCXN3aXRjaCAobkNoYXIpDQotCXsNCi0JY2FzZSBGV0xfVktFWV9SZXR1cm46CQ0KLQljYXNlIEZXTF9WS0VZX1NwYWNlOg0KLQkJew0KLQkJCUNGRkxfSUZvcm1GaWxsZXIqIHBJRm9ybUZpbGxlciA9IG1fcEFwcC0+R2V0SUZvcm1GaWxsZXIoKTsNCi0JCQlBU1NFUlQocElGb3JtRmlsbGVyICE9IE5VTEwpOw0KLQ0KLQkJCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyA9IHBBbm5vdC0+R2V0UGFnZVZpZXcoKTsNCi0JCQlBU1NFUlQocFBhZ2VWaWV3ICE9IE5VTEwpOw0KLQ0KLQkJCUZYX0JPT0wgYlJlc2V0ID0gRkFMU0U7DQotCQkJRlhfQk9PTCBiRXhpdCA9IEZBTFNFOw0KLQ0KLQkJCXBJRm9ybUZpbGxlci0+T25CdXR0b25VcChtX3BXaWRnZXQsIHBQYWdlVmlldywgYlJlc2V0LCBiRXhpdCxuRmxhZ3MpOw0KLQ0KLQkJCWlmIChiUmVzZXQpIHJldHVybiBUUlVFOw0KLQkJCWlmIChiRXhpdCkgcmV0dXJuIFRSVUU7DQotDQotCQkJQ0ZGTF9Gb3JtRmlsbGVyOjpPbkNoYXIocEFubm90LCBuQ2hhciwgbkZsYWdzKTsNCi0NCi0JCQlpZiAoQ1BXTF9SYWRpb0J1dHRvbiAqIHBXbmQgPSAoQ1BXTF9SYWRpb0J1dHRvbiopR2V0UERGV2luZG93KHBQYWdlVmlldywgVFJVRSkpDQotCQkJCXBXbmQtPlNldENoZWNrKFRSVUUpOw0KLQkJCUNvbW1pdERhdGEocFBhZ2VWaWV3LG5GbGFncyk7DQotCQkJcmV0dXJuIFRSVUU7DQotCQl9DQotCWRlZmF1bHQ6DQotCQlyZXR1cm4gQ0ZGTF9Gb3JtRmlsbGVyOjpPbkNoYXIocEFubm90LCBuQ2hhciwgbkZsYWdzKTsNCi0JfQ0KLX0NCi0NCi1GWF9CT09MCUNGRkxfUmFkaW9CdXR0b246Ok9uTEJ1dHRvblVwKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpDQotew0KLQlDRkZMX0J1dHRvbjo6T25MQnV0dG9uVXAocFBhZ2VWaWV3LCBwQW5ub3QsIG5GbGFncywgcG9pbnQpOw0KLQ0KLQlpZiAoSXNWYWxpZCgpKQ0KLQl7DQotCQlpZiAoQ1BXTF9SYWRpb0J1dHRvbiAqIHBXbmQgPSAoQ1BXTF9SYWRpb0J1dHRvbiopR2V0UERGV2luZG93KHBQYWdlVmlldywgVFJVRSkpDQotCQkJcFduZC0+U2V0Q2hlY2soVFJVRSk7DQotDQotCQlpZiAoIUNvbW1pdERhdGEocFBhZ2VWaWV3LG5GbGFncykpIHJldHVybiBGQUxTRTsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTAlDRkZMX1JhZGlvQnV0dG9uOjpJc0RhdGFDaGFuZ2VkKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykNCi17DQotCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7DQotDQotCWlmIChDUFdMX1JhZGlvQnV0dG9uKiBwV25kID0gKENQV0xfUmFkaW9CdXR0b24qKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkNCi0Jew0KLQkJcmV0dXJuIHBXbmQtPklzQ2hlY2tlZCgpICE9IG1fcFdpZGdldC0+SXNDaGVja2VkKCk7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi12b2lkIENGRkxfUmFkaW9CdXR0b246OlNhdmVEYXRhKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykNCi17DQotCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7DQotDQotCWlmIChDUFdMX1JhZGlvQnV0dG9uKiBwV25kID0gKENQV0xfUmFkaW9CdXR0b24qKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkNCi0Jew0KLQkJDQotCQlGWF9CT09MIGJOZXdDaGVja2VkID0gcFduZC0+SXNDaGVja2VkKCk7DQotDQotCQlpZiAoYk5ld0NoZWNrZWQpDQotCQl7DQotCQkJQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCA9IG1fcFdpZGdldC0+R2V0Rm9ybUZpZWxkKCk7DQotCQkJQVNTRVJUKHBGaWVsZCAhPSBOVUxMKTsNCi0NCi0JCQlmb3IgKEZYX0lOVDMyIGk9MCxzej1wRmllbGQtPkNvdW50Q29udHJvbHMoKTsgaTxzejsgaSsrKQ0KLQkJCXsNCi0JCQkJaWYgKENQREZfRm9ybUNvbnRyb2wqIHBDdHJsID0gcEZpZWxkLT5HZXRDb250cm9sKGkpKQ0KLQkJCQl7DQotCQkJCQlpZiAocEN0cmwtPklzQ2hlY2tlZCgpKQ0KLQkJCQkJew0KLQkJCQkJCWJyZWFrOw0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQ0KLQkJbV9wV2lkZ2V0LT5TZXRDaGVjayhiTmV3Q2hlY2tlZCwgRkFMU0UpOw0KLQkJbV9wV2lkZ2V0LT5VcGRhdGVGaWVsZCgpOw0KLQkJU2V0Q2hhbmdlTWFyaygpOw0KLQl9DQotfQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRm9ybUZpbGxlci5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfRm9ybUZpbGxlci5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfUmFkaW9CdXR0b24uaCIKKy8vI2luY2x1ZGUgIi4uL2luY2x1ZGUvRkZMX1VuZG8uaCIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDRkZMX1JhZGlvQnV0dG9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ0ZGTF9SYWRpb0J1dHRvbjo6Q0ZGTF9SYWRpb0J1dHRvbihDUERGRG9jX0Vudmlyb25tZW50KiBwQXBwLCBDUERGU0RLX0Fubm90KiBwV2lkZ2V0KSA6CisJQ0ZGTF9CdXR0b24ocEFwcCwgcFdpZGdldCkKK3sKK30KKworQ0ZGTF9SYWRpb0J1dHRvbjo6fkNGRkxfUmFkaW9CdXR0b24oKQoreworfQorCitDUFdMX1duZCogQ0ZGTF9SYWRpb0J1dHRvbjo6TmV3UERGV2luZG93KGNvbnN0IFBXTF9DUkVBVEVQQVJBTSYgY3AsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykKK3sKKwlDUFdMX1JhZGlvQnV0dG9uKiBwV25kID0gbmV3IENQV0xfUmFkaW9CdXR0b24oKTsKKwlwV25kLT5DcmVhdGUoY3ApOworCisJQVNTRVJUKG1fcFdpZGdldCAhPSBOVUxMKTsKKwlwV25kLT5TZXRDaGVjayhtX3BXaWRnZXQtPklzQ2hlY2tlZCgpKTsKKwkKKwlyZXR1cm4gcFduZDsKK30KKworRlhfQk9PTAlDRkZMX1JhZGlvQnV0dG9uOjpPbktleURvd24oQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5LZXlDb2RlLCBGWF9VSU5UIG5GbGFncykKK3sKKwlzd2l0Y2ggKG5LZXlDb2RlKQorCXsKKwljYXNlIEZXTF9WS0VZX1JldHVybjoKKwljYXNlIEZXTF9WS0VZX1NwYWNlOgorCQlyZXR1cm4gVFJVRTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gQ0ZGTF9Gb3JtRmlsbGVyOjpPbktleURvd24ocEFubm90LCBuS2V5Q29kZSwgbkZsYWdzKTsKKwl9Cit9CisKK0ZYX0JPT0wJQ0ZGTF9SYWRpb0J1dHRvbjo6T25DaGFyKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuQ2hhciwgRlhfVUlOVCBuRmxhZ3MpCit7CisJc3dpdGNoIChuQ2hhcikKKwl7CisJY2FzZSBGV0xfVktFWV9SZXR1cm46CQorCWNhc2UgRldMX1ZLRVlfU3BhY2U6CisJCXsKKwkJCUNGRkxfSUZvcm1GaWxsZXIqIHBJRm9ybUZpbGxlciA9IG1fcEFwcC0+R2V0SUZvcm1GaWxsZXIoKTsKKwkJCUFTU0VSVChwSUZvcm1GaWxsZXIgIT0gTlVMTCk7CisKKwkJCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyA9IHBBbm5vdC0+R2V0UGFnZVZpZXcoKTsKKwkJCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7CisKKwkJCUZYX0JPT0wgYlJlc2V0ID0gRkFMU0U7CisJCQlGWF9CT09MIGJFeGl0ID0gRkFMU0U7CisKKwkJCXBJRm9ybUZpbGxlci0+T25CdXR0b25VcChtX3BXaWRnZXQsIHBQYWdlVmlldywgYlJlc2V0LCBiRXhpdCxuRmxhZ3MpOworCisJCQlpZiAoYlJlc2V0KSByZXR1cm4gVFJVRTsKKwkJCWlmIChiRXhpdCkgcmV0dXJuIFRSVUU7CisKKwkJCUNGRkxfRm9ybUZpbGxlcjo6T25DaGFyKHBBbm5vdCwgbkNoYXIsIG5GbGFncyk7CisKKwkJCWlmIChDUFdMX1JhZGlvQnV0dG9uICogcFduZCA9IChDUFdMX1JhZGlvQnV0dG9uKilHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBUUlVFKSkKKwkJCQlwV25kLT5TZXRDaGVjayhUUlVFKTsKKwkJCUNvbW1pdERhdGEocFBhZ2VWaWV3LG5GbGFncyk7CisJCQlyZXR1cm4gVFJVRTsKKwkJfQorCWRlZmF1bHQ6CisJCXJldHVybiBDRkZMX0Zvcm1GaWxsZXI6Ok9uQ2hhcihwQW5ub3QsIG5DaGFyLCBuRmxhZ3MpOworCX0KK30KKworRlhfQk9PTAlDRkZMX1JhZGlvQnV0dG9uOjpPbkxCdXR0b25VcChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfVUlOVCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQoreworCUNGRkxfQnV0dG9uOjpPbkxCdXR0b25VcChwUGFnZVZpZXcsIHBBbm5vdCwgbkZsYWdzLCBwb2ludCk7CisKKwlpZiAoSXNWYWxpZCgpKQorCXsKKwkJaWYgKENQV0xfUmFkaW9CdXR0b24gKiBwV25kID0gKENQV0xfUmFkaW9CdXR0b24qKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIFRSVUUpKQorCQkJcFduZC0+U2V0Q2hlY2soVFJVRSk7CisKKwkJaWYgKCFDb21taXREYXRhKHBQYWdlVmlldyxuRmxhZ3MpKSByZXR1cm4gRkFMU0U7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wJQ0ZGTF9SYWRpb0J1dHRvbjo6SXNEYXRhQ2hhbmdlZChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpCit7CisJQVNTRVJUKG1fcFdpZGdldCAhPSBOVUxMKTsKKworCWlmIChDUFdMX1JhZGlvQnV0dG9uKiBwV25kID0gKENQV0xfUmFkaW9CdXR0b24qKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkKKwl7CisJCXJldHVybiBwV25kLT5Jc0NoZWNrZWQoKSAhPSBtX3BXaWRnZXQtPklzQ2hlY2tlZCgpOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKwordm9pZCBDRkZMX1JhZGlvQnV0dG9uOjpTYXZlRGF0YShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpCit7CisJQVNTRVJUKG1fcFdpZGdldCAhPSBOVUxMKTsKKworCWlmIChDUFdMX1JhZGlvQnV0dG9uKiBwV25kID0gKENQV0xfUmFkaW9CdXR0b24qKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkKKwl7CisJCQorCQlGWF9CT09MIGJOZXdDaGVja2VkID0gcFduZC0+SXNDaGVja2VkKCk7CisKKwkJaWYgKGJOZXdDaGVja2VkKQorCQl7CisJCQlDUERGX0Zvcm1GaWVsZCogcEZpZWxkID0gbV9wV2lkZ2V0LT5HZXRGb3JtRmllbGQoKTsKKwkJCUFTU0VSVChwRmllbGQgIT0gTlVMTCk7CisKKwkJCWZvciAoRlhfSU5UMzIgaT0wLHN6PXBGaWVsZC0+Q291bnRDb250cm9scygpOyBpPHN6OyBpKyspCisJCQl7CisJCQkJaWYgKENQREZfRm9ybUNvbnRyb2wqIHBDdHJsID0gcEZpZWxkLT5HZXRDb250cm9sKGkpKQorCQkJCXsKKwkJCQkJaWYgKHBDdHJsLT5Jc0NoZWNrZWQoKSkKKwkJCQkJeworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQltX3BXaWRnZXQtPlNldENoZWNrKGJOZXdDaGVja2VkLCBGQUxTRSk7CisJCW1fcFdpZGdldC0+VXBkYXRlRmllbGQoKTsKKwkJU2V0Q2hhbmdlTWFyaygpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvZm9ybWZpbGxlci9GRkxfVGV4dEZpZWxkLmNwcCBiL2ZwZGZzZGsvc3JjL2Zvcm1maWxsZXIvRkZMX1RleHRGaWVsZC5jcHAKaW5kZXggNzY0NGQ0Yi4uOGNkNjJmYSAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvZm9ybWZpbGxlci9GRkxfVGV4dEZpZWxkLmNwcAorKysgYi9mcGRmc2RrL3NyYy9mb3JtZmlsbGVyL0ZGTF9UZXh0RmllbGQuY3BwCkBAIC0xLDQxMiArMSw0MTIgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLS8vI2luY2x1ZGUgIi4uL2luY2x1ZGUvRm9ybUZpbGxlci5oIg0KLS8vI2luY2x1ZGUgIi4uL2luY2x1ZGUvRkZMX0Zvcm1GaWxsZXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9UZXh0RmllbGQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9DQkFfRm9udG1hcC5oIg0KLS8vI2luY2x1ZGUgIi4uL2luY2x1ZGUvRkZMX05vdGlmeS5oIg0KLQ0KLUNGRkxfRWRpdFVuZG9JdGVtOjpDRkZMX0VkaXRVbmRvSXRlbShDUFdMX0VkaXQqIHBFZGl0KSA6IG1fcEVkaXQocEVkaXQpDQotew0KLX0NCi0NCi1DRkZMX0VkaXRVbmRvSXRlbTo6fkNGRkxfRWRpdFVuZG9JdGVtKCkNCi17DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9FZGl0VW5kb0l0ZW06OlVuZG8oKQ0KLXsNCi19DQotDQotdm9pZCBDRkZMX0VkaXRVbmRvSXRlbTo6UmVkbygpDQotew0KLX0NCi0NCi1DRlhfV2lkZVN0cmluZyBDRkZMX0VkaXRVbmRvSXRlbTo6R2V0RGVzY3IoKQ0KLXsNCi0JcmV0dXJuIEwiSW5wdXQiOw0KLX0NCi0NCi12b2lkIENGRkxfRWRpdFVuZG9JdGVtOjpSZWxlYXNlKCkNCi17DQotCWRlbGV0ZSB0aGlzOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENGRkxfVGV4dEZpZWxkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DRkZMX1RleHRGaWVsZDo6Q0ZGTF9UZXh0RmllbGQoQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCwgQ1BERlNES19Bbm5vdCogcEFubm90KSA6DQotCUNGRkxfRm9ybUZpbGxlcihwQXBwLCBwQW5ub3QpLA0KLQltX3BGb250TWFwKE5VTEwpLy8sDQotCS8vbV9wU3BlbGxDaGVjayhOVUxMKQ0KLXsNCi0JbV9TdGF0ZS5uU3RhcnQgPSBtX1N0YXRlLm5FbmQgPSAwOw0KLX0NCi0NCi1DRkZMX1RleHRGaWVsZDo6fkNGRkxfVGV4dEZpZWxkKCkNCi17DQotCWlmIChtX3BGb250TWFwKQ0KLQl7DQotCQlkZWxldGUgbV9wRm9udE1hcDsNCi0JCW1fcEZvbnRNYXAgPSBOVUxMOw0KLQl9DQotDQotfQ0KLQ0KLVBXTF9DUkVBVEVQQVJBTSBDRkZMX1RleHRGaWVsZDo6R2V0Q3JlYXRlUGFyYW0oKQ0KLXsNCi0JUFdMX0NSRUFURVBBUkFNIGNwID0gQ0ZGTF9Gb3JtRmlsbGVyOjpHZXRDcmVhdGVQYXJhbSgpOw0KLQ0KLQlBU1NFUlQobV9wV2lkZ2V0ICE9IE5VTEwpOw0KLQlpbnQgbkZsYWdzID0gbV9wV2lkZ2V0LT5HZXRGaWVsZEZsYWdzKCk7DQotDQotDQotCWlmIChuRmxhZ3MgJiBGSUVMREZMQUdfUEFTU1dPUkQpDQotCXsJCQ0KLQkJY3AuZHdGbGFncyB8PSBQRVNfUEFTU1dPUkQ7DQotCX0NCi0NCi0JaWYgKCEobkZsYWdzICYgRklFTERGTEFHX0RPTk9UU1BFTExDSEVDSykpDQotCXsJCQ0KLQl9DQotDQotCWlmIChuRmxhZ3MgJiBGSUVMREZMQUdfTVVMVElMSU5FKQ0KLQl7CQkNCi0JCWNwLmR3RmxhZ3MgfD0gUEVTX01VTFRJTElORSB8IFBFU19BVVRPUkVUVVJOIHwgUEVTX1RPUDsNCi0NCi0JCWlmICghKG5GbGFncyAmIEZJRUxERkxBR19ET05PVFNDUk9MTCkpDQotCQl7DQotCQkJY3AuZHdGbGFncyB8PSBQV1NfVlNDUk9MTCB8IFBFU19BVVRPU0NST0xMOw0KLQkJfQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJY3AuZHdGbGFncyB8PSBQRVNfQ0VOVEVSOw0KLQ0KLQkJaWYgKCEobkZsYWdzICYgRklFTERGTEFHX0RPTk9UU0NST0xMKSkNCi0JCXsNCi0JCQljcC5kd0ZsYWdzIHw9IFBFU19BVVRPU0NST0xMOw0KLQkJfQ0KLQl9DQotDQotCWlmIChuRmxhZ3MgJiBGSUVMREZMQUdfQ09NQikNCi0JewkJDQotCQljcC5kd0ZsYWdzIHw9IFBFU19DSEFSQVJSQVk7DQotCX0NCi0NCi0JaWYgKG5GbGFncyAmIEZJRUxERkxBR19SSUNIVEVYVCkNCi0JewkJDQotCQljcC5kd0ZsYWdzIHw9IFBFU19SSUNIOw0KLQl9DQotDQotCWNwLmR3RmxhZ3MgfD0gUEVTX1VORE87DQotCQ0KLSAJc3dpdGNoIChtX3BXaWRnZXQtPkdldEFsaWdubWVudCgpKQ0KLSAJew0KLSAJZGVmYXVsdDoNCi0gCWNhc2UgQkZfQUxJR05fTEVGVDoNCi0gCQljcC5kd0ZsYWdzIHw9IFBFU19MRUZUOw0KLSAJCWJyZWFrOw0KLSAJY2FzZSBCRl9BTElHTl9NSURETEU6DQotIAkJY3AuZHdGbGFncyB8PSBQRVNfTUlERExFOw0KLSAJCWJyZWFrOw0KLSAJY2FzZSBCRl9BTElHTl9SSUdIVDoNCi0gCQljcC5kd0ZsYWdzIHw9IFBFU19SSUdIVDsNCi0gCQlicmVhazsNCi0gCX0NCi0NCi0JaWYgKCFtX3BGb250TWFwKQ0KLQl7DQotCQlBU1NFUlQodGhpcy0+bV9wQXBwICE9IE5VTEwpOw0KLQkJbV9wRm9udE1hcCA9IG5ldyBDQkFfRm9udE1hcChtX3BXaWRnZXQsIC8qSVN5c3RlbUhhbmRsZTo6R2V0U3lzdGVtSGFuZGxlcihtX3BBcHApKi9tX3BBcHAtPkdldFN5c0hhbmRsZXIoKSk7DQotCQltX3BGb250TWFwLT5Jbml0aWFsKCk7DQotCX0NCi0JY3AucEZvbnRNYXAgPSBtX3BGb250TWFwOw0KLQljcC5wRm9jdXNIYW5kbGVyID0gdGhpczsNCi0NCi0JcmV0dXJuIGNwOw0KLX0NCi0NCi1DUFdMX1duZCogQ0ZGTF9UZXh0RmllbGQ6Ok5ld1BERldpbmRvdyhjb25zdCBQV0xfQ1JFQVRFUEFSQU0mIGNwLCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpDQotew0KLQlDUFdMX0VkaXQgKiBwV25kID0gbmV3IENQV0xfRWRpdCgpOw0KLQkJcFduZC0+QXR0YWNoRkZMRGF0YSh0aGlzKTsNCi0JcFduZC0+Q3JlYXRlKGNwKTsNCi0NCi0NCi0NCi0JQVNTRVJUKG1fcEFwcCAhPSBOVUxMKTsNCi0JQ0ZGTF9JRm9ybUZpbGxlciogcElGb3JtRmlsbGVyID0gbV9wQXBwLT5HZXRJRm9ybUZpbGxlcigpOw0KLQlwV25kLT5TZXRGaWxsZXJOb3RpZnkocElGb3JtRmlsbGVyKTsNCi0NCi0JQVNTRVJUKG1fcFdpZGdldCAhPSBOVUxMKTsNCi0JRlhfSU5UMzIgbk1heExlbiA9IG1fcFdpZGdldC0+R2V0TWF4TGVuKCk7DQotCUNGWF9XaWRlU3RyaW5nIHN3VmFsdWUgPSBtX3BXaWRnZXQtPkdldFZhbHVlKCk7DQotCQ0KLQlpZiAobk1heExlbiA+IDApDQotCXsNCi0JCWlmIChwV25kLT5IYXNGbGFnKFBFU19DSEFSQVJSQVkpKQ0KLQkJew0KLQkJCXBXbmQtPlNldENoYXJBcnJheShuTWF4TGVuKTsNCi0JCQlwV25kLT5TZXRBbGlnbkZvcm1hdFYoUEVBVl9DRU5URVIpOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCXBXbmQtPlNldExpbWl0Q2hhcihuTWF4TGVuKTsNCi0JCX0NCi0JfQ0KLQkNCi0JcFduZC0+U2V0VGV4dChzd1ZhbHVlKTsNCi0JDQotCXJldHVybiBwV25kOw0KLX0NCi0NCi0NCi1GWF9CT09MCUNGRkxfVGV4dEZpZWxkOjpPbkNoYXIoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5DaGFyLCBGWF9VSU5UIG5GbGFncykNCi17DQotCXN3aXRjaCAobkNoYXIpDQotCXsNCi0JY2FzZSBGV0xfVktFWV9SZXR1cm46DQotIAkJaWYgKCEobV9wV2lkZ2V0LT5HZXRGaWVsZEZsYWdzKCkgJiBGSUVMREZMQUdfTVVMVElMSU5FKSkNCi0gCQl7DQotIAkJCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyA9IHRoaXMtPkdldEN1clBhZ2VWaWV3KCk7DQotIAkJCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7DQotIAkJCW1fYlZhbGlkID0gIW1fYlZhbGlkOw0KLQkJCUNQREZfUmVjdCByY0Fubm90ID0gcEFubm90LT5HZXRSZWN0KCk7DQotCQkJbV9wQXBwLT5GRklfSW52YWxpZGF0ZShwQW5ub3QtPkdldFBERlBhZ2UoKSwgcmNBbm5vdC5sZWZ0LCByY0Fubm90LnRvcCwgcmNBbm5vdC5yaWdodCwgcmNBbm5vdC5ib3R0b20pOw0KLSANCi0gCQkJaWYgKG1fYlZhbGlkKQ0KLSAJCQl7DQotIAkJCQlpZiAoQ1BXTF9XbmQqIHBXbmQgPSBHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBUUlVFKSkNCi0gCQkJCQlwV25kLT5TZXRGb2N1cygpOw0KLSAJCQl9DQotIAkJCWVsc2UNCi0gCQkJew0KLSAJCQkJaWYgKENvbW1pdERhdGEocFBhZ2VWaWV3LCBuRmxhZ3MpKQ0KLSAJCQkJew0KLSAJCQkJCURlc3Ryb3lQREZXaW5kb3cocFBhZ2VWaWV3KTsNCi0gCQkJCQlyZXR1cm4gVFJVRTsNCi0gCQkJCX0NCi0gCQkJCWVsc2UNCi0gCQkJCXsNCi0gCQkJCQlyZXR1cm4gRkFMU0U7DQotIAkJCQl9DQotIAkJCX0NCi0gCQl9DQotCQlicmVhazsNCi0JY2FzZSBGV0xfVktFWV9Fc2NhcGU6DQotCQl7DQotCQkJQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gdGhpcy0+R2V0Q3VyUGFnZVZpZXcoKTsNCi0JCQlBU1NFUlQocFBhZ2VWaWV3ICE9IE5VTEwpOw0KLQkJCUVzY2FwZUZpbGxlcihwUGFnZVZpZXcsVFJVRSk7DQotCQkJcmV0dXJuIFRSVUU7DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIENGRkxfRm9ybUZpbGxlcjo6T25DaGFyKHBBbm5vdCwgbkNoYXIsIG5GbGFncyk7DQotfQ0KLQ0KLUZYX0JPT0wJQ0ZGTF9UZXh0RmllbGQ6OklzRGF0YUNoYW5nZWQoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQ0KLXsNCi0JQVNTRVJUKG1fcFdpZGdldCAhPSBOVUxMKTsNCi0NCi0gCWlmIChDUFdMX0VkaXQgKiBwRWRpdCA9IChDUFdMX0VkaXQqKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkNCi0gCQlyZXR1cm4gcEVkaXQtPkdldFRleHQoKSAhPSBtX3BXaWRnZXQtPkdldFZhbHVlKCk7DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotdm9pZCBDRkZMX1RleHRGaWVsZDo6U2F2ZURhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQ0KLXsNCi0JQVNTRVJUKG1fcFdpZGdldCAhPSBOVUxMKTsNCi0NCi0JaWYgKENQV0xfRWRpdCogcFduZCA9IChDUFdMX0VkaXQqKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkNCi0Jew0KLQkJQ0ZYX1dpZGVTdHJpbmcgc09sZFZhbHVlID0gbV9wV2lkZ2V0LT5HZXRWYWx1ZSgpOw0KLQkJQ0ZYX1dpZGVTdHJpbmcgc05ld1ZhbHVlID0gcFduZC0+R2V0VGV4dCgpOw0KLQ0KLQkJbV9wV2lkZ2V0LT5TZXRWYWx1ZShzTmV3VmFsdWUsIEZBTFNFKTsJDQotCQltX3BXaWRnZXQtPlJlc2V0RmllbGRBcHBlYXJhbmNlKFRSVUUpOw0KLQkJbV9wV2lkZ2V0LT5VcGRhdGVGaWVsZCgpOw0KLQkJU2V0Q2hhbmdlTWFyaygpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9UZXh0RmllbGQ6OkdldEFjdGlvbkRhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsDQotCQkJCQkJCQkJUERGU0RLX0ZpZWxkQWN0aW9uJiBmYSkNCi17DQotCXN3aXRjaCAodHlwZSkNCi0Jew0KLQljYXNlIENQREZfQUFjdGlvbjo6S2V5U3Ryb2tlOg0KLQkJaWYgKENQV0xfRWRpdCogcFduZCA9IChDUFdMX0VkaXQqKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkNCi0JCXsNCi0JCQlmYS5iRmllbGRGdWxsID0gcFduZC0+SXNUZXh0RnVsbCgpOwkNCi0NCi0JCQlmYS5zVmFsdWUgPSBwV25kLT5HZXRUZXh0KCk7DQotCQkJDQotCQkJaWYgKGZhLmJGaWVsZEZ1bGwpDQotCQkJew0KLQkJCQlmYS5zQ2hhbmdlID0gTCIiOw0KLQkJCQlmYS5zQ2hhbmdlRXggPSBMIiI7DQotCQkJfQ0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgQ1BERl9BQWN0aW9uOjpWYWxpZGF0ZToNCi0JCWlmIChDUFdMX0VkaXQqIHBXbmQgPSAoQ1BXTF9FZGl0KilHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpDQotCQl7DQotCQkJZmEuc1ZhbHVlID0gcFduZC0+R2V0VGV4dCgpOw0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgQ1BERl9BQWN0aW9uOjpMb3NlRm9jdXM6DQotCWNhc2UgQ1BERl9BQWN0aW9uOjpHZXRGb2N1czoNCi0JCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7DQotCQlmYS5zVmFsdWUgPSBtX3BXaWRnZXQtPkdldFZhbHVlKCk7DQotCQlicmVhazsNCi0JZGVmYXVsdDoNCi0JCWJyZWFrOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9UZXh0RmllbGQ6OlNldEFjdGlvbkRhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIA0KLSAJCQkJCQkJCQljb25zdCBQREZTREtfRmllbGRBY3Rpb24mIGZhKQ0KLXsNCi0Jc3dpdGNoICh0eXBlKQ0KLQl7DQotCWNhc2UgQ1BERl9BQWN0aW9uOjpLZXlTdHJva2U6DQotCQlpZiAoQ1BXTF9FZGl0ICogcEVkaXQgPSAoQ1BXTF9FZGl0KilHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpDQotCQl7DQotCQkJcEVkaXQtPlNldEZvY3VzKCk7DQotCQkJcEVkaXQtPlNldFNlbChmYS5uU2VsU3RhcnQsIGZhLm5TZWxFbmQpOw0KLQkJCXBFZGl0LT5SZXBsYWNlU2VsKGZhLnNDaGFuZ2UpOw0KLQkJfQ0KLQkJYnJlYWs7DQotCWRlZmF1bHQ6DQotCQlicmVhazsNCi0JfQ0KLX0NCi0NCi0NCi1GWF9CT09MCUNGRkxfVGV4dEZpZWxkOjpJc0FjdGlvbkRhdGFDaGFuZ2VkKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgY29uc3QgUERGU0RLX0ZpZWxkQWN0aW9uJiBmYU9sZCwgDQotCQkJCQkJCQkJY29uc3QgUERGU0RLX0ZpZWxkQWN0aW9uJiBmYU5ldykNCi17DQotCXN3aXRjaCAodHlwZSkNCi0Jew0KLQljYXNlIENQREZfQUFjdGlvbjo6S2V5U3Ryb2tlOg0KLQkJcmV0dXJuICghZmFPbGQuYkZpZWxkRnVsbCAmJiBmYU9sZC5uU2VsRW5kICE9IGZhTmV3Lm5TZWxFbmQpIHx8IGZhT2xkLm5TZWxTdGFydCAhPSBmYU5ldy5uU2VsU3RhcnQgfHwNCi0JCQlmYU9sZC5zQ2hhbmdlICE9IGZhTmV3LnNDaGFuZ2U7DQotCWRlZmF1bHQ6DQotCQlicmVhazsNCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9UZXh0RmllbGQ6OlNhdmVTdGF0ZShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpDQotew0KLQlBU1NFUlQocFBhZ2VWaWV3ICE9IE5VTEwpOw0KLQ0KLQlpZiAoQ1BXTF9FZGl0KiBwV25kID0gKENQV0xfRWRpdCopR2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpKQ0KLQl7DQotCQlwV25kLT5HZXRTZWwobV9TdGF0ZS5uU3RhcnQsIG1fU3RhdGUubkVuZCk7DQotCQltX1N0YXRlLnNWYWx1ZSA9IHBXbmQtPkdldFRleHQoKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENGRkxfVGV4dEZpZWxkOjpSZXN0b3JlU3RhdGUoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQ0KLXsNCi0JQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsNCi0NCi0JaWYgKENQV0xfRWRpdCogcFduZCA9IChDUFdMX0VkaXQqKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIFRSVUUpKQ0KLQl7DQotCQlwV25kLT5TZXRUZXh0KG1fU3RhdGUuc1ZhbHVlKTsNCi0JCXBXbmQtPlNldFNlbChtX1N0YXRlLm5TdGFydCwgbV9TdGF0ZS5uRW5kKTsNCi0JfQ0KLX0NCi0NCi1DUFdMX1duZCogQ0ZGTF9UZXh0RmllbGQ6OlJlc2V0UERGV2luZG93KENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfQk9PTCBiUmVzdG9yZVZhbHVlKQ0KLXsNCi0JaWYgKGJSZXN0b3JlVmFsdWUpDQotCQlTYXZlU3RhdGUocFBhZ2VWaWV3KTsNCi0NCi0JRGVzdHJveVBERldpbmRvdyhwUGFnZVZpZXcpOw0KLQ0KLQlDUFdMX1duZCogcFJldCA9IE5VTEw7DQotDQotCWlmIChiUmVzdG9yZVZhbHVlKQ0KLQl7DQotCQlSZXN0b3JlU3RhdGUocFBhZ2VWaWV3KTsNCi0JCXBSZXQgPSB0aGlzLT5HZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSk7DQotCX0NCi0JZWxzZQ0KLQkJcFJldCA9IHRoaXMtPkdldFBERldpbmRvdyhwUGFnZVZpZXcsIFRSVUUpOw0KLQ0KLQltX3BXaWRnZXQtPlVwZGF0ZUZpZWxkKCk7DQotCQ0KLQlyZXR1cm4gcFJldDsNCi19DQotDQotdm9pZCBDRkZMX1RleHRGaWVsZDo6T25TZXRGb2N1cyhDUFdMX1duZCogcFduZCkNCi17DQotCUFTU0VSVChtX3BBcHAgIT0gTlVMTCk7DQotCQ0KLSAJQVNTRVJUKHBXbmQgIT0gTlVMTCk7DQotIA0KLSAJaWYgKHBXbmQtPkdldENsYXNzTmFtZSgpID09IFBXTF9DTEFTU05BTUVfRURJVCkNCi0gCXsNCi0gCQlDUFdMX0VkaXQqIHBFZGl0ID0gKENQV0xfRWRpdCopcFduZDsNCi0JCXBFZGl0LT5TZXRDaGFyU2V0KDEzNCk7DQotCQlwRWRpdC0+U2V0Q29kZVBhZ2UoOTM2KTsNCi0gDQotCQlwRWRpdC0+U2V0UmVhZHlUb0lucHV0KCk7DQotCQlDRlhfV2lkZVN0cmluZyB3c1RleHQgPSBwRWRpdC0+R2V0VGV4dCgpOw0KLQkJaW50IG5DaGFyYWN0ZXJzID0gd3NUZXh0LkdldExlbmd0aCgpOw0KLQkJQ0ZYX0J5dGVTdHJpbmcgYnNVVEZUZXh0ID0gd3NUZXh0LlVURjE2TEVfRW5jb2RlKCk7DQotCQl1bnNpZ25lZCBzaG9ydCogcEJ1ZmZlciA9ICh1bnNpZ25lZCBzaG9ydCopKEZYX0xQQ1NUUilic1VURlRleHQ7DQotCQltX3BBcHAtPkZGSV9PblNldEZpZWxkSW5wdXRGb2N1cyhtX3BXaWRnZXQtPkdldEZvcm1GaWVsZCgpLCBwQnVmZmVyLCBuQ2hhcmFjdGVycywgVFJVRSk7DQotIA0KLSAJCXBFZGl0LT5TZXRFZGl0Tm90aWZ5KHRoaXMpOw0KLSAJCS8vcFVuZG8tPkJlZ2luRWRpdChwRG9jdW1lbnQpOw0KLSAJfQ0KLX0NCi0NCi12b2lkIENGRkxfVGV4dEZpZWxkOjpPbktpbGxGb2N1cyhDUFdMX1duZCogcFduZCkNCi17DQotDQotfQ0KLQ0KLUZYX0JPT0wJQ0ZGTF9UZXh0RmllbGQ6OkNhbkNvcHkoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQ0KLXsNCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MIENGRkxfVGV4dEZpZWxkOjpDYW5DdXQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQ0KLXsNCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MCUNGRkxfVGV4dEZpZWxkOjpDYW5QYXN0ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpDQotew0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLXZvaWQgQ0ZGTF9UZXh0RmllbGQ6OkRvQ29weShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpDQotew0KLQ0KLX0NCi0NCi12b2lkIENGRkxfVGV4dEZpZWxkOjpEb0N1dChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpDQotew0KLX0NCi0NCi12b2lkIENGRkxfVGV4dEZpZWxkOjpEb1Bhc3RlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkNCi17DQotDQotfQ0KLQ0KLXZvaWQgQ0ZGTF9UZXh0RmllbGQ6Ok9uQWRkVW5kbyhDUFdMX0VkaXQqIHBFZGl0KQ0KLXsNCi19DQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworLy8jaW5jbHVkZSAiLi4vaW5jbHVkZS9Gb3JtRmlsbGVyLmgiCisvLyNpbmNsdWRlICIuLi9pbmNsdWRlL0ZGTF9Gb3JtRmlsbGVyLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9mb3JtZmlsbGVyL0ZGTF9UZXh0RmllbGQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0NCQV9Gb250bWFwLmgiCisvLyNpbmNsdWRlICIuLi9pbmNsdWRlL0ZGTF9Ob3RpZnkuaCIKKworQ0ZGTF9FZGl0VW5kb0l0ZW06OkNGRkxfRWRpdFVuZG9JdGVtKENQV0xfRWRpdCogcEVkaXQpIDogbV9wRWRpdChwRWRpdCkKK3sKK30KKworQ0ZGTF9FZGl0VW5kb0l0ZW06On5DRkZMX0VkaXRVbmRvSXRlbSgpCit7Cit9CisKK3ZvaWQgQ0ZGTF9FZGl0VW5kb0l0ZW06OlVuZG8oKQoreworfQorCit2b2lkIENGRkxfRWRpdFVuZG9JdGVtOjpSZWRvKCkKK3sKK30KKworQ0ZYX1dpZGVTdHJpbmcgQ0ZGTF9FZGl0VW5kb0l0ZW06OkdldERlc2NyKCkKK3sKKwlyZXR1cm4gTCJJbnB1dCI7Cit9CisKK3ZvaWQgQ0ZGTF9FZGl0VW5kb0l0ZW06OlJlbGVhc2UoKQoreworCWRlbGV0ZSB0aGlzOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENGRkxfVGV4dEZpZWxkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ0ZGTF9UZXh0RmllbGQ6OkNGRkxfVGV4dEZpZWxkKENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAsIENQREZTREtfQW5ub3QqIHBBbm5vdCkgOgorCUNGRkxfRm9ybUZpbGxlcihwQXBwLCBwQW5ub3QpLAorCW1fcEZvbnRNYXAoTlVMTCkvLywKKwkvL21fcFNwZWxsQ2hlY2soTlVMTCkKK3sKKwltX1N0YXRlLm5TdGFydCA9IG1fU3RhdGUubkVuZCA9IDA7Cit9CisKK0NGRkxfVGV4dEZpZWxkOjp+Q0ZGTF9UZXh0RmllbGQoKQoreworCWlmIChtX3BGb250TWFwKQorCXsKKwkJZGVsZXRlIG1fcEZvbnRNYXA7CisJCW1fcEZvbnRNYXAgPSBOVUxMOworCX0KKworfQorCitQV0xfQ1JFQVRFUEFSQU0gQ0ZGTF9UZXh0RmllbGQ6OkdldENyZWF0ZVBhcmFtKCkKK3sKKwlQV0xfQ1JFQVRFUEFSQU0gY3AgPSBDRkZMX0Zvcm1GaWxsZXI6OkdldENyZWF0ZVBhcmFtKCk7CisKKwlBU1NFUlQobV9wV2lkZ2V0ICE9IE5VTEwpOworCWludCBuRmxhZ3MgPSBtX3BXaWRnZXQtPkdldEZpZWxkRmxhZ3MoKTsKKworCisJaWYgKG5GbGFncyAmIEZJRUxERkxBR19QQVNTV09SRCkKKwl7CQkKKwkJY3AuZHdGbGFncyB8PSBQRVNfUEFTU1dPUkQ7CisJfQorCisJaWYgKCEobkZsYWdzICYgRklFTERGTEFHX0RPTk9UU1BFTExDSEVDSykpCisJewkJCisJfQorCisJaWYgKG5GbGFncyAmIEZJRUxERkxBR19NVUxUSUxJTkUpCisJewkJCisJCWNwLmR3RmxhZ3MgfD0gUEVTX01VTFRJTElORSB8IFBFU19BVVRPUkVUVVJOIHwgUEVTX1RPUDsKKworCQlpZiAoIShuRmxhZ3MgJiBGSUVMREZMQUdfRE9OT1RTQ1JPTEwpKQorCQl7CisJCQljcC5kd0ZsYWdzIHw9IFBXU19WU0NST0xMIHwgUEVTX0FVVE9TQ1JPTEw7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJY3AuZHdGbGFncyB8PSBQRVNfQ0VOVEVSOworCisJCWlmICghKG5GbGFncyAmIEZJRUxERkxBR19ET05PVFNDUk9MTCkpCisJCXsKKwkJCWNwLmR3RmxhZ3MgfD0gUEVTX0FVVE9TQ1JPTEw7CisJCX0KKwl9CisKKwlpZiAobkZsYWdzICYgRklFTERGTEFHX0NPTUIpCisJewkJCisJCWNwLmR3RmxhZ3MgfD0gUEVTX0NIQVJBUlJBWTsKKwl9CisKKwlpZiAobkZsYWdzICYgRklFTERGTEFHX1JJQ0hURVhUKQorCXsJCQorCQljcC5kd0ZsYWdzIHw9IFBFU19SSUNIOworCX0KKworCWNwLmR3RmxhZ3MgfD0gUEVTX1VORE87CisJCisgCXN3aXRjaCAobV9wV2lkZ2V0LT5HZXRBbGlnbm1lbnQoKSkKKyAJeworIAlkZWZhdWx0OgorIAljYXNlIEJGX0FMSUdOX0xFRlQ6CisgCQljcC5kd0ZsYWdzIHw9IFBFU19MRUZUOworIAkJYnJlYWs7CisgCWNhc2UgQkZfQUxJR05fTUlERExFOgorIAkJY3AuZHdGbGFncyB8PSBQRVNfTUlERExFOworIAkJYnJlYWs7CisgCWNhc2UgQkZfQUxJR05fUklHSFQ6CisgCQljcC5kd0ZsYWdzIHw9IFBFU19SSUdIVDsKKyAJCWJyZWFrOworIAl9CisKKwlpZiAoIW1fcEZvbnRNYXApCisJeworCQlBU1NFUlQodGhpcy0+bV9wQXBwICE9IE5VTEwpOworCQltX3BGb250TWFwID0gbmV3IENCQV9Gb250TWFwKG1fcFdpZGdldCwgLypJU3lzdGVtSGFuZGxlOjpHZXRTeXN0ZW1IYW5kbGVyKG1fcEFwcCkqL21fcEFwcC0+R2V0U3lzSGFuZGxlcigpKTsKKwkJbV9wRm9udE1hcC0+SW5pdGlhbCgpOworCX0KKwljcC5wRm9udE1hcCA9IG1fcEZvbnRNYXA7CisJY3AucEZvY3VzSGFuZGxlciA9IHRoaXM7CisKKwlyZXR1cm4gY3A7Cit9CisKK0NQV0xfV25kKiBDRkZMX1RleHRGaWVsZDo6TmV3UERGV2luZG93KGNvbnN0IFBXTF9DUkVBVEVQQVJBTSYgY3AsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykKK3sKKwlDUFdMX0VkaXQgKiBwV25kID0gbmV3IENQV0xfRWRpdCgpOworCQlwV25kLT5BdHRhY2hGRkxEYXRhKHRoaXMpOworCXBXbmQtPkNyZWF0ZShjcCk7CisKKworCisJQVNTRVJUKG1fcEFwcCAhPSBOVUxMKTsKKwlDRkZMX0lGb3JtRmlsbGVyKiBwSUZvcm1GaWxsZXIgPSBtX3BBcHAtPkdldElGb3JtRmlsbGVyKCk7CisJcFduZC0+U2V0RmlsbGVyTm90aWZ5KHBJRm9ybUZpbGxlcik7CisKKwlBU1NFUlQobV9wV2lkZ2V0ICE9IE5VTEwpOworCUZYX0lOVDMyIG5NYXhMZW4gPSBtX3BXaWRnZXQtPkdldE1heExlbigpOworCUNGWF9XaWRlU3RyaW5nIHN3VmFsdWUgPSBtX3BXaWRnZXQtPkdldFZhbHVlKCk7CisJCisJaWYgKG5NYXhMZW4gPiAwKQorCXsKKwkJaWYgKHBXbmQtPkhhc0ZsYWcoUEVTX0NIQVJBUlJBWSkpCisJCXsKKwkJCXBXbmQtPlNldENoYXJBcnJheShuTWF4TGVuKTsKKwkJCXBXbmQtPlNldEFsaWduRm9ybWF0VihQRUFWX0NFTlRFUik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwV25kLT5TZXRMaW1pdENoYXIobk1heExlbik7CisJCX0KKwl9CisJCisJcFduZC0+U2V0VGV4dChzd1ZhbHVlKTsKKwkKKwlyZXR1cm4gcFduZDsKK30KKworCitGWF9CT09MCUNGRkxfVGV4dEZpZWxkOjpPbkNoYXIoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9VSU5UIG5DaGFyLCBGWF9VSU5UIG5GbGFncykKK3sKKwlzd2l0Y2ggKG5DaGFyKQorCXsKKwljYXNlIEZXTF9WS0VZX1JldHVybjoKKyAJCWlmICghKG1fcFdpZGdldC0+R2V0RmllbGRGbGFncygpICYgRklFTERGTEFHX01VTFRJTElORSkpCisgCQl7CisgCQkJQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gdGhpcy0+R2V0Q3VyUGFnZVZpZXcoKTsKKyAJCQlBU1NFUlQocFBhZ2VWaWV3ICE9IE5VTEwpOworIAkJCW1fYlZhbGlkID0gIW1fYlZhbGlkOworCQkJQ1BERl9SZWN0IHJjQW5ub3QgPSBwQW5ub3QtPkdldFJlY3QoKTsKKwkJCW1fcEFwcC0+RkZJX0ludmFsaWRhdGUocEFubm90LT5HZXRQREZQYWdlKCksIHJjQW5ub3QubGVmdCwgcmNBbm5vdC50b3AsIHJjQW5ub3QucmlnaHQsIHJjQW5ub3QuYm90dG9tKTsKKyAKKyAJCQlpZiAobV9iVmFsaWQpCisgCQkJeworIAkJCQlpZiAoQ1BXTF9XbmQqIHBXbmQgPSBHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBUUlVFKSkKKyAJCQkJCXBXbmQtPlNldEZvY3VzKCk7CisgCQkJfQorIAkJCWVsc2UKKyAJCQl7CisgCQkJCWlmIChDb21taXREYXRhKHBQYWdlVmlldywgbkZsYWdzKSkKKyAJCQkJeworIAkJCQkJRGVzdHJveVBERldpbmRvdyhwUGFnZVZpZXcpOworIAkJCQkJcmV0dXJuIFRSVUU7CisgCQkJCX0KKyAJCQkJZWxzZQorIAkJCQl7CisgCQkJCQlyZXR1cm4gRkFMU0U7CisgCQkJCX0KKyAJCQl9CisgCQl9CisJCWJyZWFrOworCWNhc2UgRldMX1ZLRVlfRXNjYXBlOgorCQl7CisJCQlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcgPSB0aGlzLT5HZXRDdXJQYWdlVmlldygpOworCQkJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsKKwkJCUVzY2FwZUZpbGxlcihwUGFnZVZpZXcsVFJVRSk7CisJCQlyZXR1cm4gVFJVRTsKKwkJfQorCX0KKworCXJldHVybiBDRkZMX0Zvcm1GaWxsZXI6Ok9uQ2hhcihwQW5ub3QsIG5DaGFyLCBuRmxhZ3MpOworfQorCitGWF9CT09MCUNGRkxfVGV4dEZpZWxkOjpJc0RhdGFDaGFuZ2VkKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykKK3sKKwlBU1NFUlQobV9wV2lkZ2V0ICE9IE5VTEwpOworCisgCWlmIChDUFdMX0VkaXQgKiBwRWRpdCA9IChDUFdMX0VkaXQqKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkKKyAJCXJldHVybiBwRWRpdC0+R2V0VGV4dCgpICE9IG1fcFdpZGdldC0+R2V0VmFsdWUoKTsKKworCXJldHVybiBGQUxTRTsKK30KKwordm9pZCBDRkZMX1RleHRGaWVsZDo6U2F2ZURhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQoreworCUFTU0VSVChtX3BXaWRnZXQgIT0gTlVMTCk7CisKKwlpZiAoQ1BXTF9FZGl0KiBwV25kID0gKENQV0xfRWRpdCopR2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpKQorCXsKKwkJQ0ZYX1dpZGVTdHJpbmcgc09sZFZhbHVlID0gbV9wV2lkZ2V0LT5HZXRWYWx1ZSgpOworCQlDRlhfV2lkZVN0cmluZyBzTmV3VmFsdWUgPSBwV25kLT5HZXRUZXh0KCk7CisKKwkJbV9wV2lkZ2V0LT5TZXRWYWx1ZShzTmV3VmFsdWUsIEZBTFNFKTsJCisJCW1fcFdpZGdldC0+UmVzZXRGaWVsZEFwcGVhcmFuY2UoVFJVRSk7CisJCW1fcFdpZGdldC0+VXBkYXRlRmllbGQoKTsKKwkJU2V0Q2hhbmdlTWFyaygpOworCX0KK30KKwordm9pZCBDRkZMX1RleHRGaWVsZDo6R2V0QWN0aW9uRGF0YShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwKKwkJCQkJCQkJCVBERlNES19GaWVsZEFjdGlvbiYgZmEpCit7CisJc3dpdGNoICh0eXBlKQorCXsKKwljYXNlIENQREZfQUFjdGlvbjo6S2V5U3Ryb2tlOgorCQlpZiAoQ1BXTF9FZGl0KiBwV25kID0gKENQV0xfRWRpdCopR2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpKQorCQl7CisJCQlmYS5iRmllbGRGdWxsID0gcFduZC0+SXNUZXh0RnVsbCgpOwkKKworCQkJZmEuc1ZhbHVlID0gcFduZC0+R2V0VGV4dCgpOworCQkJCisJCQlpZiAoZmEuYkZpZWxkRnVsbCkKKwkJCXsKKwkJCQlmYS5zQ2hhbmdlID0gTCIiOworCQkJCWZhLnNDaGFuZ2VFeCA9IEwiIjsKKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIENQREZfQUFjdGlvbjo6VmFsaWRhdGU6CisJCWlmIChDUFdMX0VkaXQqIHBXbmQgPSAoQ1BXTF9FZGl0KilHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpCisJCXsKKwkJCWZhLnNWYWx1ZSA9IHBXbmQtPkdldFRleHQoKTsKKwkJfQorCQlicmVhazsKKwljYXNlIENQREZfQUFjdGlvbjo6TG9zZUZvY3VzOgorCWNhc2UgQ1BERl9BQWN0aW9uOjpHZXRGb2N1czoKKwkJQVNTRVJUKG1fcFdpZGdldCAhPSBOVUxMKTsKKwkJZmEuc1ZhbHVlID0gbV9wV2lkZ2V0LT5HZXRWYWx1ZSgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgQ0ZGTF9UZXh0RmllbGQ6OlNldEFjdGlvbkRhdGEoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIAorIAkJCQkJCQkJCWNvbnN0IFBERlNES19GaWVsZEFjdGlvbiYgZmEpCit7CisJc3dpdGNoICh0eXBlKQorCXsKKwljYXNlIENQREZfQUFjdGlvbjo6S2V5U3Ryb2tlOgorCQlpZiAoQ1BXTF9FZGl0ICogcEVkaXQgPSAoQ1BXTF9FZGl0KilHZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBGQUxTRSkpCisJCXsKKwkJCXBFZGl0LT5TZXRGb2N1cygpOworCQkJcEVkaXQtPlNldFNlbChmYS5uU2VsU3RhcnQsIGZhLm5TZWxFbmQpOworCQkJcEVkaXQtPlJlcGxhY2VTZWwoZmEuc0NoYW5nZSk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCisKK0ZYX0JPT0wJQ0ZGTF9UZXh0RmllbGQ6OklzQWN0aW9uRGF0YUNoYW5nZWQoQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLCBjb25zdCBQREZTREtfRmllbGRBY3Rpb24mIGZhT2xkLCAKKwkJCQkJCQkJCWNvbnN0IFBERlNES19GaWVsZEFjdGlvbiYgZmFOZXcpCit7CisJc3dpdGNoICh0eXBlKQorCXsKKwljYXNlIENQREZfQUFjdGlvbjo6S2V5U3Ryb2tlOgorCQlyZXR1cm4gKCFmYU9sZC5iRmllbGRGdWxsICYmIGZhT2xkLm5TZWxFbmQgIT0gZmFOZXcublNlbEVuZCkgfHwgZmFPbGQublNlbFN0YXJ0ICE9IGZhTmV3Lm5TZWxTdGFydCB8fAorCQkJZmFPbGQuc0NoYW5nZSAhPSBmYU5ldy5zQ2hhbmdlOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKwordm9pZCBDRkZMX1RleHRGaWVsZDo6U2F2ZVN0YXRlKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykKK3sKKwlBU1NFUlQocFBhZ2VWaWV3ICE9IE5VTEwpOworCisJaWYgKENQV0xfRWRpdCogcFduZCA9IChDUFdMX0VkaXQqKUdldFBERldpbmRvdyhwUGFnZVZpZXcsIEZBTFNFKSkKKwl7CisJCXBXbmQtPkdldFNlbChtX1N0YXRlLm5TdGFydCwgbV9TdGF0ZS5uRW5kKTsKKwkJbV9TdGF0ZS5zVmFsdWUgPSBwV25kLT5HZXRUZXh0KCk7CisJfQorfQorCit2b2lkIENGRkxfVGV4dEZpZWxkOjpSZXN0b3JlU3RhdGUoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQoreworCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7CisKKwlpZiAoQ1BXTF9FZGl0KiBwV25kID0gKENQV0xfRWRpdCopR2V0UERGV2luZG93KHBQYWdlVmlldywgVFJVRSkpCisJeworCQlwV25kLT5TZXRUZXh0KG1fU3RhdGUuc1ZhbHVlKTsKKwkJcFduZC0+U2V0U2VsKG1fU3RhdGUublN0YXJ0LCBtX1N0YXRlLm5FbmQpOworCX0KK30KKworQ1BXTF9XbmQqIENGRkxfVGV4dEZpZWxkOjpSZXNldFBERldpbmRvdyhDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0JPT0wgYlJlc3RvcmVWYWx1ZSkKK3sKKwlpZiAoYlJlc3RvcmVWYWx1ZSkKKwkJU2F2ZVN0YXRlKHBQYWdlVmlldyk7CisKKwlEZXN0cm95UERGV2luZG93KHBQYWdlVmlldyk7CisKKwlDUFdMX1duZCogcFJldCA9IE5VTEw7CisKKwlpZiAoYlJlc3RvcmVWYWx1ZSkKKwl7CisJCVJlc3RvcmVTdGF0ZShwUGFnZVZpZXcpOworCQlwUmV0ID0gdGhpcy0+R2V0UERGV2luZG93KHBQYWdlVmlldywgRkFMU0UpOworCX0KKwllbHNlCisJCXBSZXQgPSB0aGlzLT5HZXRQREZXaW5kb3cocFBhZ2VWaWV3LCBUUlVFKTsKKworCW1fcFdpZGdldC0+VXBkYXRlRmllbGQoKTsKKwkKKwlyZXR1cm4gcFJldDsKK30KKwordm9pZCBDRkZMX1RleHRGaWVsZDo6T25TZXRGb2N1cyhDUFdMX1duZCogcFduZCkKK3sKKwlBU1NFUlQobV9wQXBwICE9IE5VTEwpOworCQorIAlBU1NFUlQocFduZCAhPSBOVUxMKTsKKyAKKyAJaWYgKHBXbmQtPkdldENsYXNzTmFtZSgpID09IFBXTF9DTEFTU05BTUVfRURJVCkKKyAJeworIAkJQ1BXTF9FZGl0KiBwRWRpdCA9IChDUFdMX0VkaXQqKXBXbmQ7CisJCXBFZGl0LT5TZXRDaGFyU2V0KDEzNCk7CisJCXBFZGl0LT5TZXRDb2RlUGFnZSg5MzYpOworIAorCQlwRWRpdC0+U2V0UmVhZHlUb0lucHV0KCk7CisJCUNGWF9XaWRlU3RyaW5nIHdzVGV4dCA9IHBFZGl0LT5HZXRUZXh0KCk7CisJCWludCBuQ2hhcmFjdGVycyA9IHdzVGV4dC5HZXRMZW5ndGgoKTsKKwkJQ0ZYX0J5dGVTdHJpbmcgYnNVVEZUZXh0ID0gd3NUZXh0LlVURjE2TEVfRW5jb2RlKCk7CisJCXVuc2lnbmVkIHNob3J0KiBwQnVmZmVyID0gKHVuc2lnbmVkIHNob3J0KikoRlhfTFBDU1RSKWJzVVRGVGV4dDsKKwkJbV9wQXBwLT5GRklfT25TZXRGaWVsZElucHV0Rm9jdXMobV9wV2lkZ2V0LT5HZXRGb3JtRmllbGQoKSwgcEJ1ZmZlciwgbkNoYXJhY3RlcnMsIFRSVUUpOworIAorIAkJcEVkaXQtPlNldEVkaXROb3RpZnkodGhpcyk7CisgCQkvL3BVbmRvLT5CZWdpbkVkaXQocERvY3VtZW50KTsKKyAJfQorfQorCit2b2lkIENGRkxfVGV4dEZpZWxkOjpPbktpbGxGb2N1cyhDUFdMX1duZCogcFduZCkKK3sKKworfQorCitGWF9CT09MCUNGRkxfVGV4dEZpZWxkOjpDYW5Db3B5KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkKK3sKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wgQ0ZGTF9UZXh0RmllbGQ6OkNhbkN1dChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpCit7CisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MCUNGRkxfVGV4dEZpZWxkOjpDYW5QYXN0ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpCit7CisJcmV0dXJuIEZBTFNFOworfQorCit2b2lkIENGRkxfVGV4dEZpZWxkOjpEb0NvcHkoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQoreworCit9CisKK3ZvaWQgQ0ZGTF9UZXh0RmllbGQ6OkRvQ3V0KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkKK3sKK30KKwordm9pZCBDRkZMX1RleHRGaWVsZDo6RG9QYXN0ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpCit7CisKK30KKwordm9pZCBDRkZMX1RleHRGaWVsZDo6T25BZGRVbmRvKENQV0xfRWRpdCogcEVkaXQpCit7Cit9CisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2Zvcm1maWxsZXIvRkZMX1V0aWxzLmNwcCBiL2ZwZGZzZGsvc3JjL2Zvcm1maWxsZXIvRkZMX1V0aWxzLmNwcAppbmRleCAyZTkwODEwLi4zZWE3ODkxIDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9mb3JtZmlsbGVyL0ZGTF9VdGlscy5jcHAKKysrIGIvZnBkZnNkay9zcmMvZm9ybWZpbGxlci9GRkxfVXRpbHMuY3BwCkBAIC0xLDEzMyArMSwxMzMgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRm9ybUZpbGxlci5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX1V0aWxzLmgiDQotDQotQ1BERl9SZWN0IENGRkxfVXRpbHM6Ok1heFJlY3QoY29uc3QgQ1BERl9SZWN0ICYgcmVjdDEsY29uc3QgQ1BERl9SZWN0ICYgcmVjdDIpDQotew0KLQlDUERGX1JlY3QgcmNSZXQ7DQotDQotCXJjUmV0LmxlZnQgPSBGRkxfTUlOKHJlY3QxLmxlZnQscmVjdDIubGVmdCk7DQotCXJjUmV0LmJvdHRvbSA9IEZGTF9NSU4ocmVjdDEuYm90dG9tLHJlY3QyLmJvdHRvbSk7DQotCXJjUmV0LnJpZ2h0ID0gRkZMX01BWChyZWN0MS5yaWdodCxyZWN0Mi5yaWdodCk7DQotCXJjUmV0LnRvcCA9IEZGTF9NQVgocmVjdDEudG9wLHJlY3QyLnRvcCk7DQotDQotCXJldHVybiByY1JldDsNCi19DQotDQotQ1BERl9SZWN0IENGRkxfVXRpbHM6OkluZmxhdGVSZWN0KGNvbnN0IENQREZfUmVjdCAmIGNyUmVjdCxjb25zdCBGWF9GTE9BVCAmIGZTaXplKQ0KLXsNCi0JQ1BERl9SZWN0IGNyTmV3KGNyUmVjdC5sZWZ0IC0gZlNpemUsDQotCQkJCQljclJlY3QuYm90dG9tIC0gZlNpemUsDQotCQkJCQljclJlY3QucmlnaHQgKyBmU2l6ZSwNCi0JCQkJCWNyUmVjdC50b3AgKyBmU2l6ZSk7DQotCWNyTmV3Lk5vcm1hbGl6ZSgpOw0KLQlyZXR1cm4gY3JOZXc7DQotfQ0KLQ0KLUNQREZfUmVjdCBDRkZMX1V0aWxzOjpEZWZsYXRlUmVjdChjb25zdCBDUERGX1JlY3QgJiBjclJlY3QsY29uc3QgRlhfRkxPQVQgJiBmU2l6ZSkNCi17DQotCUNQREZfUmVjdCBjck5ldyhjclJlY3QubGVmdCArIGZTaXplLA0KLQkJCQkJY3JSZWN0LmJvdHRvbSArIGZTaXplLA0KLQkJCQkJY3JSZWN0LnJpZ2h0IC0gZlNpemUsDQotCQkJCQljclJlY3QudG9wIC0gZlNpemUpOw0KLQljck5ldy5Ob3JtYWxpemUoKTsNCi0JcmV0dXJuIGNyTmV3Ow0KLX0NCi0NCi0vKg0KLUZYX0JPT0wgQ0ZGTF9VdGlsczo6UmVjdENvbnRhaW5zUmVjdChjb25zdCBDUERGX1JlY3QgJiBmYXRoZXIsY29uc3QgQ1BERl9SZWN0ICYgc29uKQ0KLXsNCi0JcmV0dXJuIChmYXRoZXIubGVmdCA8PSBzb24ubGVmdCAmJiBmYXRoZXIucmlnaHQgPj0gc29uLnJpZ2h0ICYmIA0KLQkJCQlmYXRoZXIuYm90dG9tIDw9IHNvbi5ib3R0b20gJiYgZmF0aGVyLnRvcCA+PSBzb24udG9wKTsNCi0NCi19DQotDQotRlhfQk9PTCBDRkZMX1V0aWxzOjpSZWN0Q29udGFpbnNQb2ludChjb25zdCBDUERGX1JlY3QgJiBmYXRoZXIsY29uc3QgQ1BERl9Qb2ludCAmIHNvbikNCi17DQotCXJldHVybiAoZmF0aGVyLmxlZnQgPD0gc29uLnggJiYgZmF0aGVyLnJpZ2h0ID49IHNvbi54ICYmIA0KLQkJCQlmYXRoZXIuYm90dG9tIDw9IHNvbi55ICYmIGZhdGhlci50b3AgPj0gc29uLnkpOw0KLX0NCi0NCi1GWF9CT09MIENGRkxfVXRpbHM6OlJlY3RDb250YWluc1hZKGNvbnN0IENQREZfUmVjdCAmIGZhdGhlcixGWF9GTE9BVCB4LEZYX0ZMT0FUIHkpDQotew0KLQlyZXR1cm4gKGZhdGhlci5sZWZ0IDw9IHggJiYgZmF0aGVyLnJpZ2h0ID49IHggJiYgDQotCQkJCWZhdGhlci5ib3R0b20gPD0geSAmJiBmYXRoZXIudG9wID49IHkpOw0KLX0NCi0qLw0KLQ0KLUZYX0JPT0wgQ0ZGTF9VdGlsczo6VHJhY2VPYmplY3QoQ1BERl9PYmplY3QqIHBPYmopDQotew0KLQlpZiAoIXBPYmopIHJldHVybiBGQUxTRTsNCi0NCi0JRlhfRFdPUkQJZHdPYmpOdW0gPSBwT2JqLT5HZXRPYmpOdW0oKTsNCi0Jc3dpdGNoIChwT2JqLT5HZXRUeXBlKCkpDQotCXsNCi0JY2FzZSBQREZPQkpfQVJSQVk6DQotCQl7DQotCQkJQ1BERl9BcnJheSogcEFycmF5ID0gKENQREZfQXJyYXkqKXBPYmo7DQotCQkJZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHBBcnJheS0+R2V0Q291bnQoKTsgaSArKykNCi0JCQl7DQotCQkJCUNQREZfT2JqZWN0KiBwRWxlbWVudCA9IHBBcnJheS0+R2V0RWxlbWVudFZhbHVlKGkpOwkJCQkNCi0JCQkJVHJhY2VPYmplY3QocEVsZW1lbnQpOw0KLQkJCX0NCi0JCX0NCi0JCWJyZWFrOw0KLQ0KLQljYXNlIFBERk9CSl9ESUNUSU9OQVJZOg0KLQkJew0KLQkJCUNQREZfRGljdGlvbmFyeSogcERpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KilwT2JqOw0KLQ0KLQkJCUZYX1BPU0lUSU9OIGZQb3MgPSBwRGljdC0+R2V0U3RhcnRQb3MoKTsNCi0JCQlDRlhfQnl0ZVN0cmluZyBjc0tleTsNCi0JCQlkbw0KLQkJCXsNCi0JCQkJQ1BERl9PYmplY3QqIHBFbGVtZW50ID0gcERpY3QtPkdldE5leHRFbGVtZW50KGZQb3MsIGNzS2V5KTsNCi0gCQkJCS8vVFJBQ0UoY3NLZXkgKyAiXG4iKTsNCi0JCQkJaWYgKCFwRWxlbWVudCkgYnJlYWs7DQotCQkJCVRyYWNlT2JqZWN0KHBFbGVtZW50KTsNCi0JCQl9d2hpbGUgKFRSVUUpOw0KLQkJfQ0KLQkJYnJlYWs7DQotDQotCWNhc2UgUERGT0JKX1NUUkVBTToNCi0JCXsNCi0JCQlDUERGX1N0cmVhbSogcFN0cmVhbSA9IChDUERGX1N0cmVhbSopcE9iajsNCi0JCQlDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gcFN0cmVhbS0+R2V0RGljdCgpOw0KLQkJCVRyYWNlT2JqZWN0KHBEaWN0KTsNCi0JCX0NCi0JCWJyZWFrOw0KLQ0KLQljYXNlIFBERk9CSl9SRUZFUkVOQ0U6DQotCQl7DQotCQkJQ1BERl9PYmplY3QqIHBEaXJlY3RPYmogPSBwT2JqLT5HZXREaXJlY3QoKTsNCi0JCQlUcmFjZU9iamVjdChwRGlyZWN0T2JqKTsNCi0JCX0NCi0JCWJyZWFrOw0KLQ0KLQljYXNlIFBERk9CSl9CT09MRUFOOg0KLQkJYnJlYWs7DQotCWNhc2UgUERGT0JKX05VTUJFUjoNCi0JCS8vVFJBQ0UoIiVkXG4iLChGWF9JTlQzMilwT2JqKTsNCi0JCWJyZWFrOw0KLQljYXNlIFBERk9CSl9TVFJJTkc6DQotCQkvL1RSQUNFKCgoQ1BERl9TdHJpbmcqKXBPYmopLT5HZXRTdHJpbmcoKSArICJcbiIpOw0KLQkJYnJlYWs7DQotCWNhc2UgUERGT0JKX05BTUU6DQotCQkvL1RSQUNFKCgoQ1BERl9OYW1lKilwT2JqKS0+R2V0U3RyaW5nKCkgKyAiXG4iKTsNCi0JCWJyZWFrOw0KLQljYXNlIFBERk9CSl9OVUxMOg0KLS8vCWNhc2UgUERGT0JKX0tFWVdPUkQ6DQotLy8JY2FzZSBQREZPQkpfRU9GOg0KLQlkZWZhdWx0Og0KLQkJYnJlYWs7DQotCX0NCi0JaWYgKGR3T2JqTnVtID09IDApIHJldHVybiBGQUxTRTsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Zvcm1maWxsZXIvRm9ybUZpbGxlci5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZm9ybWZpbGxlci9GRkxfVXRpbHMuaCIKKworQ1BERl9SZWN0IENGRkxfVXRpbHM6Ok1heFJlY3QoY29uc3QgQ1BERl9SZWN0ICYgcmVjdDEsY29uc3QgQ1BERl9SZWN0ICYgcmVjdDIpCit7CisJQ1BERl9SZWN0IHJjUmV0OworCisJcmNSZXQubGVmdCA9IEZGTF9NSU4ocmVjdDEubGVmdCxyZWN0Mi5sZWZ0KTsKKwlyY1JldC5ib3R0b20gPSBGRkxfTUlOKHJlY3QxLmJvdHRvbSxyZWN0Mi5ib3R0b20pOworCXJjUmV0LnJpZ2h0ID0gRkZMX01BWChyZWN0MS5yaWdodCxyZWN0Mi5yaWdodCk7CisJcmNSZXQudG9wID0gRkZMX01BWChyZWN0MS50b3AscmVjdDIudG9wKTsKKworCXJldHVybiByY1JldDsKK30KKworQ1BERl9SZWN0IENGRkxfVXRpbHM6OkluZmxhdGVSZWN0KGNvbnN0IENQREZfUmVjdCAmIGNyUmVjdCxjb25zdCBGWF9GTE9BVCAmIGZTaXplKQoreworCUNQREZfUmVjdCBjck5ldyhjclJlY3QubGVmdCAtIGZTaXplLAorCQkJCQljclJlY3QuYm90dG9tIC0gZlNpemUsCisJCQkJCWNyUmVjdC5yaWdodCArIGZTaXplLAorCQkJCQljclJlY3QudG9wICsgZlNpemUpOworCWNyTmV3Lk5vcm1hbGl6ZSgpOworCXJldHVybiBjck5ldzsKK30KKworQ1BERl9SZWN0IENGRkxfVXRpbHM6OkRlZmxhdGVSZWN0KGNvbnN0IENQREZfUmVjdCAmIGNyUmVjdCxjb25zdCBGWF9GTE9BVCAmIGZTaXplKQoreworCUNQREZfUmVjdCBjck5ldyhjclJlY3QubGVmdCArIGZTaXplLAorCQkJCQljclJlY3QuYm90dG9tICsgZlNpemUsCisJCQkJCWNyUmVjdC5yaWdodCAtIGZTaXplLAorCQkJCQljclJlY3QudG9wIC0gZlNpemUpOworCWNyTmV3Lk5vcm1hbGl6ZSgpOworCXJldHVybiBjck5ldzsKK30KKworLyoKK0ZYX0JPT0wgQ0ZGTF9VdGlsczo6UmVjdENvbnRhaW5zUmVjdChjb25zdCBDUERGX1JlY3QgJiBmYXRoZXIsY29uc3QgQ1BERl9SZWN0ICYgc29uKQoreworCXJldHVybiAoZmF0aGVyLmxlZnQgPD0gc29uLmxlZnQgJiYgZmF0aGVyLnJpZ2h0ID49IHNvbi5yaWdodCAmJiAKKwkJCQlmYXRoZXIuYm90dG9tIDw9IHNvbi5ib3R0b20gJiYgZmF0aGVyLnRvcCA+PSBzb24udG9wKTsKKworfQorCitGWF9CT09MIENGRkxfVXRpbHM6OlJlY3RDb250YWluc1BvaW50KGNvbnN0IENQREZfUmVjdCAmIGZhdGhlcixjb25zdCBDUERGX1BvaW50ICYgc29uKQoreworCXJldHVybiAoZmF0aGVyLmxlZnQgPD0gc29uLnggJiYgZmF0aGVyLnJpZ2h0ID49IHNvbi54ICYmIAorCQkJCWZhdGhlci5ib3R0b20gPD0gc29uLnkgJiYgZmF0aGVyLnRvcCA+PSBzb24ueSk7Cit9CisKK0ZYX0JPT0wgQ0ZGTF9VdGlsczo6UmVjdENvbnRhaW5zWFkoY29uc3QgQ1BERl9SZWN0ICYgZmF0aGVyLEZYX0ZMT0FUIHgsRlhfRkxPQVQgeSkKK3sKKwlyZXR1cm4gKGZhdGhlci5sZWZ0IDw9IHggJiYgZmF0aGVyLnJpZ2h0ID49IHggJiYgCisJCQkJZmF0aGVyLmJvdHRvbSA8PSB5ICYmIGZhdGhlci50b3AgPj0geSk7Cit9CisqLworCitGWF9CT09MIENGRkxfVXRpbHM6OlRyYWNlT2JqZWN0KENQREZfT2JqZWN0KiBwT2JqKQoreworCWlmICghcE9iaikgcmV0dXJuIEZBTFNFOworCisJRlhfRFdPUkQJZHdPYmpOdW0gPSBwT2JqLT5HZXRPYmpOdW0oKTsKKwlzd2l0Y2ggKHBPYmotPkdldFR5cGUoKSkKKwl7CisJY2FzZSBQREZPQkpfQVJSQVk6CisJCXsKKwkJCUNQREZfQXJyYXkqIHBBcnJheSA9IChDUERGX0FycmF5KilwT2JqOworCQkJZm9yIChGWF9EV09SRCBpID0gMDsgaSA8IHBBcnJheS0+R2V0Q291bnQoKTsgaSArKykKKwkJCXsKKwkJCQlDUERGX09iamVjdCogcEVsZW1lbnQgPSBwQXJyYXktPkdldEVsZW1lbnRWYWx1ZShpKTsJCQkJCisJCQkJVHJhY2VPYmplY3QocEVsZW1lbnQpOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBQREZPQkpfRElDVElPTkFSWToKKwkJeworCQkJQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IChDUERGX0RpY3Rpb25hcnkqKXBPYmo7CisKKwkJCUZYX1BPU0lUSU9OIGZQb3MgPSBwRGljdC0+R2V0U3RhcnRQb3MoKTsKKwkJCUNGWF9CeXRlU3RyaW5nIGNzS2V5OworCQkJZG8KKwkJCXsKKwkJCQlDUERGX09iamVjdCogcEVsZW1lbnQgPSBwRGljdC0+R2V0TmV4dEVsZW1lbnQoZlBvcywgY3NLZXkpOworIAkJCQkvL1RSQUNFKGNzS2V5ICsgIlxuIik7CisJCQkJaWYgKCFwRWxlbWVudCkgYnJlYWs7CisJCQkJVHJhY2VPYmplY3QocEVsZW1lbnQpOworCQkJfXdoaWxlIChUUlVFKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgUERGT0JKX1NUUkVBTToKKwkJeworCQkJQ1BERl9TdHJlYW0qIHBTdHJlYW0gPSAoQ1BERl9TdHJlYW0qKXBPYmo7CisJCQlDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gcFN0cmVhbS0+R2V0RGljdCgpOworCQkJVHJhY2VPYmplY3QocERpY3QpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBQREZPQkpfUkVGRVJFTkNFOgorCQl7CisJCQlDUERGX09iamVjdCogcERpcmVjdE9iaiA9IHBPYmotPkdldERpcmVjdCgpOworCQkJVHJhY2VPYmplY3QocERpcmVjdE9iaik7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFBERk9CSl9CT09MRUFOOgorCQlicmVhazsKKwljYXNlIFBERk9CSl9OVU1CRVI6CisJCS8vVFJBQ0UoIiVkXG4iLChGWF9JTlQzMilwT2JqKTsKKwkJYnJlYWs7CisJY2FzZSBQREZPQkpfU1RSSU5HOgorCQkvL1RSQUNFKCgoQ1BERl9TdHJpbmcqKXBPYmopLT5HZXRTdHJpbmcoKSArICJcbiIpOworCQlicmVhazsKKwljYXNlIFBERk9CSl9OQU1FOgorCQkvL1RSQUNFKCgoQ1BERl9OYW1lKilwT2JqKS0+R2V0U3RyaW5nKCkgKyAiXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBQREZPQkpfTlVMTDoKKy8vCWNhc2UgUERGT0JKX0tFWVdPUkQ6CisvLwljYXNlIFBERk9CSl9FT0Y6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWlmIChkd09iak51bSA9PSAwKSByZXR1cm4gRkFMU0U7CisKKwlyZXR1cm4gVFJVRTsKK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvZnBkZl9kYXRhYXZhaWwuY3BwIGIvZnBkZnNkay9zcmMvZnBkZl9kYXRhYXZhaWwuY3BwCmluZGV4IDllNTZjMmUuLmI1NDgzZjkgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2ZwZGZfZGF0YWF2YWlsLmNwcAorKysgYi9mcGRmc2RrL3NyYy9mcGRmX2RhdGFhdmFpbC5jcHAKQEAgLTEsMTY1ICsxLDE2NSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19kZWZpbmUuaCINCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mcGRmX2RhdGFhdmFpbC5oIg0KLQ0KLWV4dGVybiB2b2lkIFByb2Nlc3NQYXJzZUVycm9yKEZYX0RXT1JEIGVycl9jb2RlKTsNCi1jbGFzcyBDRlBERl9GaWxlQXZhaWxXcmFwIDogcHVibGljIElGWF9GaWxlQXZhaWwNCi17DQotcHVibGljOg0KLQlDRlBERl9GaWxlQXZhaWxXcmFwKCkNCi0Jew0KLQkJbV9wZmlsZUF2YWlsID0gTlVMTDsNCi0JfQ0KLQ0KLQl2b2lkIFNldChGWF9GSUxFQVZBSUwqIHBmaWxlQXZhaWwpDQotCXsNCi0JCW1fcGZpbGVBdmFpbCA9IHBmaWxlQXZhaWw7DQotCX0NCi0NCi0JdmlydHVhbCBGWF9CT09MCQkJSXNEYXRhQXZhaWwoIEZYX0ZJTEVTSVpFIG9mZnNldCwgRlhfRFdPUkQgc2l6ZSkNCi0Jew0KLQkJcmV0dXJuIG1fcGZpbGVBdmFpbC0+SXNEYXRhQXZhaWwobV9wZmlsZUF2YWlsLCBvZmZzZXQsIHNpemUpOw0KLQl9DQotDQotcHJpdmF0ZToNCi0JRlhfRklMRUFWQUlMKiBtX3BmaWxlQXZhaWw7DQotfTsgIA0KLQ0KLWNsYXNzIENGUERGX0ZpbGVBY2Nlc3NXcmFwIDogcHVibGljIElGWF9GaWxlUmVhZA0KLXsNCi1wdWJsaWM6DQotCUNGUERGX0ZpbGVBY2Nlc3NXcmFwKCkNCi0Jew0KLQkJbV9wRmlsZUFjY2VzcyA9IE5VTEw7DQotCX0NCi0NCi0Jdm9pZCBTZXQoRlBERl9GSUxFQUNDRVNTKiBwRmlsZSkNCi0Jew0KLQkJbV9wRmlsZUFjY2VzcyA9IHBGaWxlOw0KLQl9DQotDQotCXZpcnR1YWwgRlhfRklMRVNJWkUJCUdldFNpemUoKQ0KLQl7DQotCQlyZXR1cm4gbV9wRmlsZUFjY2Vzcy0+bV9GaWxlTGVuOyANCi0JfQ0KLQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCQlSZWFkQmxvY2sodm9pZCogYnVmZmVyLCBGWF9GSUxFU0laRSBvZmZzZXQsIHNpemVfdCBzaXplKQ0KLQl7DQotCQlyZXR1cm4gbV9wRmlsZUFjY2Vzcy0+bV9HZXRCbG9jayhtX3BGaWxlQWNjZXNzLT5tX1BhcmFtLCBvZmZzZXQsIChGWF9MUEJZVEUpYnVmZmVyLCBzaXplKTsNCi0JfQ0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQlSZWxlYXNlKCkNCi0Jew0KLQl9DQotDQotcHJpdmF0ZToNCi0JRlBERl9GSUxFQUNDRVNTKgkJbV9wRmlsZUFjY2VzczsNCi19Ow0KLQ0KLWNsYXNzIENGUERGX0Rvd25sb2FkSGludHNXcmFwIDogcHVibGljIElGWF9Eb3dubG9hZEhpbnRzDQotew0KLXB1YmxpYzoNCi0JQ0ZQREZfRG93bmxvYWRIaW50c1dyYXAoRlhfRE9XTkxPQURISU5UUyogcERvd25sb2FkSGludHMpDQotCXsNCi0JCW1fcERvd25sb2FkSGludHMgPSBwRG93bmxvYWRIaW50czsNCi0JfQ0KLXB1YmxpYzoNCi0JdmlydHVhbCB2b2lkCQkJQWRkU2VnbWVudChGWF9GSUxFU0laRSBvZmZzZXQsIEZYX0RXT1JEIHNpemUpIA0KLQl7DQotCQltX3BEb3dubG9hZEhpbnRzLT5BZGRTZWdtZW50KG1fcERvd25sb2FkSGludHMsIG9mZnNldCwgc2l6ZSk7DQotCX0JDQotcHJpdmF0ZToNCi0JRlhfRE9XTkxPQURISU5UUyogbV9wRG93bmxvYWRIaW50czsNCi19Ow0KLQ0KLWNsYXNzIENGUERGX0RhdGFBdmFpbCA6IHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0JQ0ZQREZfRGF0YUF2YWlsKCkNCi0Jew0KLQkJbV9wRGF0YUF2YWlsID0gTlVMTDsNCi0JfQ0KLQ0KLQl+Q0ZQREZfRGF0YUF2YWlsKCkNCi0Jew0KLQkJaWYgKG1fcERhdGFBdmFpbCkgZGVsZXRlIG1fcERhdGFBdmFpbDsNCi0JfQ0KLQ0KLQlDUERGX0RhdGFBdmFpbCoJCQltX3BEYXRhQXZhaWw7DQotCUNGUERGX0ZpbGVBdmFpbFdyYXAJCW1fRmlsZUF2YWlsOw0KLQlDRlBERl9GaWxlQWNjZXNzV3JhcAltX0ZpbGVSZWFkOw0KLX07DQotDQotRExMRVhQT1JUIEZQREZfQVZBSUwgU1REQ0FMTCBGUERGQXZhaWxfQ3JlYXRlKEZYX0ZJTEVBVkFJTCogZmlsZV9hdmFpbCwgRlBERl9GSUxFQUNDRVNTKiBmaWxlKQ0KLXsNCi0JQ0ZQREZfRGF0YUF2YWlsKiBwQXZhaWwgPSBGWF9ORVcgQ0ZQREZfRGF0YUF2YWlsOw0KLQlwQXZhaWwtPm1fRmlsZUF2YWlsLlNldChmaWxlX2F2YWlsKTsNCi0JcEF2YWlsLT5tX0ZpbGVSZWFkLlNldChmaWxlKTsNCi0JcEF2YWlsLT5tX3BEYXRhQXZhaWwgPSBGWF9ORVcgQ1BERl9EYXRhQXZhaWwoJnBBdmFpbC0+bV9GaWxlQXZhaWwsICZwQXZhaWwtPm1fRmlsZVJlYWQpOw0KLQlyZXR1cm4gcEF2YWlsOw0KLX0NCi0NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZBdmFpbF9EZXN0cm95KEZQREZfQVZBSUwgYXZhaWwpDQotew0KLQlpZiAoYXZhaWwgPT0gTlVMTCkgcmV0dXJuOw0KLQlkZWxldGUgKENGUERGX0RhdGFBdmFpbCopYXZhaWw7DQotfQ0KLQ0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGQXZhaWxfSXNEb2NBdmFpbChGUERGX0FWQUlMIGF2YWlsLCBGWF9ET1dOTE9BREhJTlRTKiBoaW50cykNCi17DQotCWlmIChhdmFpbCA9PSBOVUxMIHx8IGhpbnRzID09IE5VTEwpIHJldHVybiAwOw0KLQlDRlBERl9Eb3dubG9hZEhpbnRzV3JhcCBoaW50c193cmFwKGhpbnRzKTsNCi0JcmV0dXJuICgoQ0ZQREZfRGF0YUF2YWlsKilhdmFpbCktPm1fcERhdGFBdmFpbC0+SXNEb2NBdmFpbCgmaGludHNfd3JhcCk7DQotfQ0KLQ0KLWV4dGVybiB2b2lkIENoZWNrVW5TdXBwb3J0RXJyb3IoQ1BERl9Eb2N1bWVudCAqIHBEb2MsIEZYX0RXT1JEIGVycl9jb2RlKTsNCi0NCi1ETExFWFBPUlQgRlBERl9ET0NVTUVOVCBTVERDQUxMIEZQREZBdmFpbF9HZXREb2N1bWVudChGUERGX0FWQUlMIGF2YWlsLAlGUERGX0JZVEVTVFJJTkcgcGFzc3dvcmQpDQotew0KLQlpZiAoYXZhaWwgPT0gTlVMTCkgcmV0dXJuIE5VTEw7DQotCUNQREZfUGFyc2VyKiBwUGFyc2VyID0gRlhfTkVXIENQREZfUGFyc2VyOw0KLQlwUGFyc2VyLT5TZXRQYXNzd29yZChwYXNzd29yZCk7DQotDQotCUZYX0RXT1JEIGVycl9jb2RlID0gcFBhcnNlci0+U3RhcnRBc3luUGFyc2UoKChDRlBERl9EYXRhQXZhaWwqKWF2YWlsKS0+bV9wRGF0YUF2YWlsLT5HZXRGaWxlUmVhZCgpKTsNCi0JaWYgKGVycl9jb2RlKSB7DQotCQlkZWxldGUgcFBhcnNlcjsNCi0JCVByb2Nlc3NQYXJzZUVycm9yKGVycl9jb2RlKTsNCi0JCXJldHVybiBOVUxMOw0KLQl9DQotCSgoQ0ZQREZfRGF0YUF2YWlsKilhdmFpbCktPm1fcERhdGFBdmFpbC0+U2V0RG9jdW1lbnQocFBhcnNlci0+R2V0RG9jdW1lbnQoKSk7DQotCUNoZWNrVW5TdXBwb3J0RXJyb3IocFBhcnNlci0+R2V0RG9jdW1lbnQoKSwgRlBERl9FUlJfU1VDQ0VTUyk7DQotCXJldHVybiBwUGFyc2VyLT5HZXREb2N1bWVudCgpOw0KLX0NCi0NCi1ETExFWFBPUlQgaW50IFNURENBTEwgRlBERkF2YWlsX0dldEZpcnN0UGFnZU51bShGUERGX0RPQ1VNRU5UIGRvYykNCi17DQotCWlmIChkb2MgPT0gTlVMTCkgcmV0dXJuIDA7DQotCUNQREZfRG9jdW1lbnQqIHBEb2MgPSAoQ1BERl9Eb2N1bWVudCopZG9jOw0KLQlyZXR1cm4gKChDUERGX1BhcnNlciopcERvYy0+R2V0UGFyc2VyKCkpLT5HZXRGaXJzdFBhZ2VObygpOw0KLX0NCi0NCi1ETExFWFBPUlQgaW50IFNURENBTEwgRlBERkF2YWlsX0lzUGFnZUF2YWlsKEZQREZfQVZBSUwgYXZhaWwsIGludCBwYWdlX2luZGV4LCBGWF9ET1dOTE9BREhJTlRTKiBoaW50cykNCi17DQotCWlmIChhdmFpbCA9PSBOVUxMIHx8IGhpbnRzID09IE5VTEwpIHJldHVybiAwOw0KLQlDRlBERl9Eb3dubG9hZEhpbnRzV3JhcCBoaW50c193cmFwKGhpbnRzKTsNCi0JcmV0dXJuICgoQ0ZQREZfRGF0YUF2YWlsKilhdmFpbCktPm1fcERhdGFBdmFpbC0+SXNQYWdlQXZhaWwocGFnZV9pbmRleCwgJmhpbnRzX3dyYXApOw0KLX0NCi0NCi1ETExFWFBPUlQgaW50IFNURENBTEwgRlBERkF2YWlsX0lzRm9ybUF2YWlsKEZQREZfQVZBSUwgYXZhaWwsIEZYX0RPV05MT0FESElOVFMqIGhpbnRzKQ0KLXsNCi0JaWYgKGF2YWlsID09IE5VTEwgfHwgaGludHMgPT0gTlVMTCkgcmV0dXJuIC0xOw0KLQlDRlBERl9Eb3dubG9hZEhpbnRzV3JhcCBoaW50c193cmFwKGhpbnRzKTsNCi0JcmV0dXJuICgoQ0ZQREZfRGF0YUF2YWlsKilhdmFpbCktPm1fcERhdGFBdmFpbC0+SXNGb3JtQXZhaWwoJmhpbnRzX3dyYXApOw0KLX0NCi0NCi1ETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERkF2YWlsX0lzTGluZWFyaXplZChGUERGX0FWQUlMIGF2YWlsKQ0KLXsNCi0JCWlmIChhdmFpbCA9PSBOVUxMKSByZXR1cm4gLTE7DQotCXJldHVybiAoKENGUERGX0RhdGFBdmFpbCopYXZhaWwpLT5tX3BEYXRhQXZhaWwtPklzTGluZWFyaXplZFBERigpOw0KLQ0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX2RlZmluZS5oIgorI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnBkZl9kYXRhYXZhaWwuaCIKKworZXh0ZXJuIHZvaWQgUHJvY2Vzc1BhcnNlRXJyb3IoRlhfRFdPUkQgZXJyX2NvZGUpOworY2xhc3MgQ0ZQREZfRmlsZUF2YWlsV3JhcCA6IHB1YmxpYyBJRlhfRmlsZUF2YWlsCit7CitwdWJsaWM6CisJQ0ZQREZfRmlsZUF2YWlsV3JhcCgpCisJeworCQltX3BmaWxlQXZhaWwgPSBOVUxMOworCX0KKworCXZvaWQgU2V0KEZYX0ZJTEVBVkFJTCogcGZpbGVBdmFpbCkKKwl7CisJCW1fcGZpbGVBdmFpbCA9IHBmaWxlQXZhaWw7CisJfQorCisJdmlydHVhbCBGWF9CT09MCQkJSXNEYXRhQXZhaWwoIEZYX0ZJTEVTSVpFIG9mZnNldCwgRlhfRFdPUkQgc2l6ZSkKKwl7CisJCXJldHVybiBtX3BmaWxlQXZhaWwtPklzRGF0YUF2YWlsKG1fcGZpbGVBdmFpbCwgb2Zmc2V0LCBzaXplKTsKKwl9CisKK3ByaXZhdGU6CisJRlhfRklMRUFWQUlMKiBtX3BmaWxlQXZhaWw7Cit9OyAgCisKK2NsYXNzIENGUERGX0ZpbGVBY2Nlc3NXcmFwIDogcHVibGljIElGWF9GaWxlUmVhZAoreworcHVibGljOgorCUNGUERGX0ZpbGVBY2Nlc3NXcmFwKCkKKwl7CisJCW1fcEZpbGVBY2Nlc3MgPSBOVUxMOworCX0KKworCXZvaWQgU2V0KEZQREZfRklMRUFDQ0VTUyogcEZpbGUpCisJeworCQltX3BGaWxlQWNjZXNzID0gcEZpbGU7CisJfQorCisJdmlydHVhbCBGWF9GSUxFU0laRQkJR2V0U2l6ZSgpCisJeworCQlyZXR1cm4gbV9wRmlsZUFjY2Vzcy0+bV9GaWxlTGVuOyAKKwl9CisKKwl2aXJ0dWFsIEZYX0JPT0wJCQlSZWFkQmxvY2sodm9pZCogYnVmZmVyLCBGWF9GSUxFU0laRSBvZmZzZXQsIHNpemVfdCBzaXplKQorCXsKKwkJcmV0dXJuIG1fcEZpbGVBY2Nlc3MtPm1fR2V0QmxvY2sobV9wRmlsZUFjY2Vzcy0+bV9QYXJhbSwgb2Zmc2V0LCAoRlhfTFBCWVRFKWJ1ZmZlciwgc2l6ZSk7CisJfQorCisJdmlydHVhbCB2b2lkCQkJUmVsZWFzZSgpCisJeworCX0KKworcHJpdmF0ZToKKwlGUERGX0ZJTEVBQ0NFU1MqCQltX3BGaWxlQWNjZXNzOworfTsKKworY2xhc3MgQ0ZQREZfRG93bmxvYWRIaW50c1dyYXAgOiBwdWJsaWMgSUZYX0Rvd25sb2FkSGludHMKK3sKK3B1YmxpYzoKKwlDRlBERl9Eb3dubG9hZEhpbnRzV3JhcChGWF9ET1dOTE9BREhJTlRTKiBwRG93bmxvYWRIaW50cykKKwl7CisJCW1fcERvd25sb2FkSGludHMgPSBwRG93bmxvYWRIaW50czsKKwl9CitwdWJsaWM6CisJdmlydHVhbCB2b2lkCQkJQWRkU2VnbWVudChGWF9GSUxFU0laRSBvZmZzZXQsIEZYX0RXT1JEIHNpemUpIAorCXsKKwkJbV9wRG93bmxvYWRIaW50cy0+QWRkU2VnbWVudChtX3BEb3dubG9hZEhpbnRzLCBvZmZzZXQsIHNpemUpOworCX0JCitwcml2YXRlOgorCUZYX0RPV05MT0FESElOVFMqIG1fcERvd25sb2FkSGludHM7Cit9OworCitjbGFzcyBDRlBERl9EYXRhQXZhaWwgOiBwdWJsaWMgQ0ZYX09iamVjdAoreworcHVibGljOgorCUNGUERGX0RhdGFBdmFpbCgpCisJeworCQltX3BEYXRhQXZhaWwgPSBOVUxMOworCX0KKworCX5DRlBERl9EYXRhQXZhaWwoKQorCXsKKwkJaWYgKG1fcERhdGFBdmFpbCkgZGVsZXRlIG1fcERhdGFBdmFpbDsKKwl9CisKKwlDUERGX0RhdGFBdmFpbCoJCQltX3BEYXRhQXZhaWw7CisJQ0ZQREZfRmlsZUF2YWlsV3JhcAkJbV9GaWxlQXZhaWw7CisJQ0ZQREZfRmlsZUFjY2Vzc1dyYXAJbV9GaWxlUmVhZDsKK307CisKK0RMTEVYUE9SVCBGUERGX0FWQUlMIFNURENBTEwgRlBERkF2YWlsX0NyZWF0ZShGWF9GSUxFQVZBSUwqIGZpbGVfYXZhaWwsIEZQREZfRklMRUFDQ0VTUyogZmlsZSkKK3sKKwlDRlBERl9EYXRhQXZhaWwqIHBBdmFpbCA9IEZYX05FVyBDRlBERl9EYXRhQXZhaWw7CisJcEF2YWlsLT5tX0ZpbGVBdmFpbC5TZXQoZmlsZV9hdmFpbCk7CisJcEF2YWlsLT5tX0ZpbGVSZWFkLlNldChmaWxlKTsKKwlwQXZhaWwtPm1fcERhdGFBdmFpbCA9IEZYX05FVyBDUERGX0RhdGFBdmFpbCgmcEF2YWlsLT5tX0ZpbGVBdmFpbCwgJnBBdmFpbC0+bV9GaWxlUmVhZCk7CisJcmV0dXJuIHBBdmFpbDsKK30KKworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGQXZhaWxfRGVzdHJveShGUERGX0FWQUlMIGF2YWlsKQoreworCWlmIChhdmFpbCA9PSBOVUxMKSByZXR1cm47CisJZGVsZXRlIChDRlBERl9EYXRhQXZhaWwqKWF2YWlsOworfQorCitETExFWFBPUlQgaW50IFNURENBTEwgRlBERkF2YWlsX0lzRG9jQXZhaWwoRlBERl9BVkFJTCBhdmFpbCwgRlhfRE9XTkxPQURISU5UUyogaGludHMpCit7CisJaWYgKGF2YWlsID09IE5VTEwgfHwgaGludHMgPT0gTlVMTCkgcmV0dXJuIDA7CisJQ0ZQREZfRG93bmxvYWRIaW50c1dyYXAgaGludHNfd3JhcChoaW50cyk7CisJcmV0dXJuICgoQ0ZQREZfRGF0YUF2YWlsKilhdmFpbCktPm1fcERhdGFBdmFpbC0+SXNEb2NBdmFpbCgmaGludHNfd3JhcCk7Cit9CisKK2V4dGVybiB2b2lkIENoZWNrVW5TdXBwb3J0RXJyb3IoQ1BERl9Eb2N1bWVudCAqIHBEb2MsIEZYX0RXT1JEIGVycl9jb2RlKTsKKworRExMRVhQT1JUIEZQREZfRE9DVU1FTlQgU1REQ0FMTCBGUERGQXZhaWxfR2V0RG9jdW1lbnQoRlBERl9BVkFJTCBhdmFpbCwJRlBERl9CWVRFU1RSSU5HIHBhc3N3b3JkKQoreworCWlmIChhdmFpbCA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKwlDUERGX1BhcnNlciogcFBhcnNlciA9IEZYX05FVyBDUERGX1BhcnNlcjsKKwlwUGFyc2VyLT5TZXRQYXNzd29yZChwYXNzd29yZCk7CisKKwlGWF9EV09SRCBlcnJfY29kZSA9IHBQYXJzZXItPlN0YXJ0QXN5blBhcnNlKCgoQ0ZQREZfRGF0YUF2YWlsKilhdmFpbCktPm1fcERhdGFBdmFpbC0+R2V0RmlsZVJlYWQoKSk7CisJaWYgKGVycl9jb2RlKSB7CisJCWRlbGV0ZSBwUGFyc2VyOworCQlQcm9jZXNzUGFyc2VFcnJvcihlcnJfY29kZSk7CisJCXJldHVybiBOVUxMOworCX0KKwkoKENGUERGX0RhdGFBdmFpbCopYXZhaWwpLT5tX3BEYXRhQXZhaWwtPlNldERvY3VtZW50KHBQYXJzZXItPkdldERvY3VtZW50KCkpOworCUNoZWNrVW5TdXBwb3J0RXJyb3IocFBhcnNlci0+R2V0RG9jdW1lbnQoKSwgRlBERl9FUlJfU1VDQ0VTUyk7CisJcmV0dXJuIHBQYXJzZXItPkdldERvY3VtZW50KCk7Cit9CisKK0RMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGQXZhaWxfR2V0Rmlyc3RQYWdlTnVtKEZQREZfRE9DVU1FTlQgZG9jKQoreworCWlmIChkb2MgPT0gTlVMTCkgcmV0dXJuIDA7CisJQ1BERl9Eb2N1bWVudCogcERvYyA9IChDUERGX0RvY3VtZW50Kilkb2M7CisJcmV0dXJuICgoQ1BERl9QYXJzZXIqKXBEb2MtPkdldFBhcnNlcigpKS0+R2V0Rmlyc3RQYWdlTm8oKTsKK30KKworRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZBdmFpbF9Jc1BhZ2VBdmFpbChGUERGX0FWQUlMIGF2YWlsLCBpbnQgcGFnZV9pbmRleCwgRlhfRE9XTkxPQURISU5UUyogaGludHMpCit7CisJaWYgKGF2YWlsID09IE5VTEwgfHwgaGludHMgPT0gTlVMTCkgcmV0dXJuIDA7CisJQ0ZQREZfRG93bmxvYWRIaW50c1dyYXAgaGludHNfd3JhcChoaW50cyk7CisJcmV0dXJuICgoQ0ZQREZfRGF0YUF2YWlsKilhdmFpbCktPm1fcERhdGFBdmFpbC0+SXNQYWdlQXZhaWwocGFnZV9pbmRleCwgJmhpbnRzX3dyYXApOworfQorCitETExFWFBPUlQgaW50IFNURENBTEwgRlBERkF2YWlsX0lzRm9ybUF2YWlsKEZQREZfQVZBSUwgYXZhaWwsIEZYX0RPV05MT0FESElOVFMqIGhpbnRzKQoreworCWlmIChhdmFpbCA9PSBOVUxMIHx8IGhpbnRzID09IE5VTEwpIHJldHVybiAtMTsKKwlDRlBERl9Eb3dubG9hZEhpbnRzV3JhcCBoaW50c193cmFwKGhpbnRzKTsKKwlyZXR1cm4gKChDRlBERl9EYXRhQXZhaWwqKWF2YWlsKS0+bV9wRGF0YUF2YWlsLT5Jc0Zvcm1BdmFpbCgmaGludHNfd3JhcCk7Cit9CisKK0RMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGQXZhaWxfSXNMaW5lYXJpemVkKEZQREZfQVZBSUwgYXZhaWwpCit7CisJCWlmIChhdmFpbCA9PSBOVUxMKSByZXR1cm4gLTE7CisJcmV0dXJuICgoQ0ZQREZfRGF0YUF2YWlsKilhdmFpbCktPm1fcERhdGFBdmFpbC0+SXNMaW5lYXJpemVkUERGKCk7CisKK30KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2ZwZGZfZXh0LmNwcCBiL2ZwZGZzZGsvc3JjL2ZwZGZfZXh0LmNwcAppbmRleCBlMmUyZDg0Li4yZDllNWFlIDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9mcGRmX2V4dC5jcHAKKysrIGIvZnBkZnNkay9zcmMvZnBkZl9leHQuY3BwCkBAIC0xLDI0NSArMSwyNDUgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfZGVmaW5lLmgiDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnBkZl9leHQuaCINCi0NCi0jZGVmaW5lICBGUERGU0RLX1VOU1VQUE9SVF9DQUxMIDEwMA0KLQ0KLWNsYXNzIENGU0RLX1Vuc3VwcG9ydEluZm9fQWRhcHRlcg0KLXsNCi1wdWJsaWM6DQotCUNGU0RLX1Vuc3VwcG9ydEluZm9fQWRhcHRlcihVTlNVUFBPUlRfSU5GTyogdW5zcF9pbmZvKXsgbV91bnNwX2luZm8gPSB1bnNwX2luZm87fQ0KLS8vCUZYX0JPT0wgTmVlZFRvUGF1c2VOb3coKTsNCi0Jdm9pZCBSZXBvcnRFcnJvcihpbnQgbkVycm9yVHlwZSk7DQotDQotcHJpdmF0ZToNCi0JVU5TVVBQT1JUX0lORk8qIG1fdW5zcF9pbmZvOw0KLX07DQotDQotdm9pZCBDRlNES19VbnN1cHBvcnRJbmZvX0FkYXB0ZXI6OlJlcG9ydEVycm9yKGludCBuRXJyb3JUeXBlKQ0KLXsNCi0JaWYobV91bnNwX2luZm8gJiYgbV91bnNwX2luZm8tPkZTREtfVW5TdXBwb3J0X0hhbmRsZXIpDQotCXsNCi0JCW1fdW5zcF9pbmZvLT5GU0RLX1VuU3VwcG9ydF9IYW5kbGVyKG1fdW5zcF9pbmZvLG5FcnJvclR5cGUpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgRnJlZVVuc3VwcG9ydEluZm8oRlhfTFBWT0lEIHBEYXRhKQ0KLXsNCi0JQ0ZTREtfVW5zdXBwb3J0SW5mb19BZGFwdGVyICogcEFkYXB0ZXIgPSAoQ0ZTREtfVW5zdXBwb3J0SW5mb19BZGFwdGVyICopcERhdGE7DQotCWRlbGV0ZSBwQWRhcHRlcjsNCi19DQotDQotRlhfQk9PTCBGUERGX1VuU3VwcG9ydEVycm9yKGludCBuRXJyb3IpDQotew0KLQlDRlNES19VbnN1cHBvcnRJbmZvX0FkYXB0ZXIgKiBwQWRhcHRlciA9IChDRlNES19VbnN1cHBvcnRJbmZvX0FkYXB0ZXIgKilDUERGX01vZHVsZU1ncjo6R2V0KCktPkdldFByaXZhdGVEYXRhKCh2b2lkICopRlBERlNES19VTlNVUFBPUlRfQ0FMTCk7DQotDQotCWlmKCFwQWRhcHRlcikNCi0JCXJldHVybiBGQUxTRTsNCi0JcEFkYXB0ZXItPlJlcG9ydEVycm9yKG5FcnJvcik7DQotCXJldHVybiBUUlVFOw0KLX0JDQotDQotRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZTREtfU2V0VW5TcE9ialByb2Nlc3NIYW5kbGVyKFVOU1VQUE9SVF9JTkZPKiB1bnNwX2luZm8pDQotew0KLQlpZiAoIXVuc3BfaW5mbyB8fCB1bnNwX2luZm8tPnZlcnNpb24hPTEpDQotCQlyZXR1cm4gRkFMU0U7DQotCUNGU0RLX1Vuc3VwcG9ydEluZm9fQWRhcHRlciAqIHBBZGFwdGVyID0gbmV3IENGU0RLX1Vuc3VwcG9ydEluZm9fQWRhcHRlcih1bnNwX2luZm8pOw0KLQ0KLQlDUERGX01vZHVsZU1ncjo6R2V0KCktPlNldFByaXZhdGVEYXRhKCh2b2lkICopRlBERlNES19VTlNVUFBPUlRfQ0FMTCxwQWRhcHRlciwgJkZyZWVVbnN1cHBvcnRJbmZvKTsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgQ2hlY2tVblN1cHBvcnRBbm5vdChDUERGX0RvY3VtZW50ICogcERvYywgQ1BERl9Bbm5vdCogcFBERkFubm90KQ0KLXsNCi0JQ0ZYX0J5dGVTdHJpbmcgY2JTdWJUeXBlID0gcFBERkFubm90LT5HZXRTdWJUeXBlKCk7DQotCWlmKGNiU3ViVHlwZS5Db21wYXJlKCIzRCIpID09IDApDQotCXsNCi0JCUZQREZfVW5TdXBwb3J0RXJyb3IoRlBERl9VTlNQX0FOTk9UXzNEQU5OT1QpOw0KLQl9DQotCWVsc2UgaWYoY2JTdWJUeXBlLkNvbXBhcmUoIlNjcmVlbiIpID09MCkNCi0Jew0KLQkJQ1BERl9EaWN0aW9uYXJ5KiBwQW5ub3REaWN0ID0gcFBERkFubm90LT5tX3BBbm5vdERpY3Q7DQotCQlDRlhfQnl0ZVN0cmluZyBjYlN0cmluZzsNCi0JCWlmKHBBbm5vdERpY3QtPktleUV4aXN0KCJJVCIpKQ0KLQkJCWNiU3RyaW5nID0gcEFubm90RGljdC0+R2V0U3RyaW5nKCJJVCIpOw0KLQkJaWYoY2JTdHJpbmcuQ29tcGFyZSgiSW1nIikgIT0gMCkNCi0JCQlGUERGX1VuU3VwcG9ydEVycm9yKEZQREZfVU5TUF9BTk5PVF9TQ1JFRU5fTUVESUEpOw0KLQl9DQotCWVsc2UgaWYoY2JTdWJUeXBlLkNvbXBhcmUoIk1vdmllIikgPT0wKQ0KLQl7DQotCQlGUERGX1VuU3VwcG9ydEVycm9yKEZQREZfVU5TUF9BTk5PVF9NT1ZJRSk7DQotCX0NCi0JZWxzZSBpZihjYlN1YlR5cGUuQ29tcGFyZSgiU291bmQiKSA9PTApDQotCXsNCi0JCUZQREZfVW5TdXBwb3J0RXJyb3IoRlBERl9VTlNQX0FOTk9UX1NPVU5EKTsNCi0JfQ0KLQllbHNlIGlmKGNiU3ViVHlwZS5Db21wYXJlKCJSaWNoTWVkaWEiKSA9PTApDQotCXsNCi0JCUZQREZfVW5TdXBwb3J0RXJyb3IoRlBERl9VTlNQX0FOTk9UX1NDUkVFTl9SSUNITUVESUEpOw0KLQl9DQotCWVsc2UgaWYoY2JTdWJUeXBlLkNvbXBhcmUoIkZpbGVBdHRhY2htZW50IikgPT0wKQ0KLQl7DQotCQlGUERGX1VuU3VwcG9ydEVycm9yKEZQREZfVU5TUF9BTk5PVF9BVFRBQ0hNRU5UKTsNCi0JfQ0KLQllbHNlIGlmKGNiU3ViVHlwZS5Db21wYXJlKCJXaWRnZXQiKSA9PTApDQotCXsNCi0JCUNQREZfRGljdGlvbmFyeSogcEFubm90RGljdCA9IHBQREZBbm5vdC0+bV9wQW5ub3REaWN0Ow0KLQkJQ0ZYX0J5dGVTdHJpbmcgY2JTdHJpbmc7DQotCQlpZihwQW5ub3REaWN0LT5LZXlFeGlzdCgiRlQiKSkNCi0JCXsNCi0JCQljYlN0cmluZyA9IHBBbm5vdERpY3QtPkdldFN0cmluZygiRlQiKTsNCi0JCX0JDQotCQlpZihjYlN0cmluZy5Db21wYXJlKCJTaWciKSA9PSAwKQ0KLQkJew0KLQkJCUZQREZfVW5TdXBwb3J0RXJyb3IoRlBERl9VTlNQX0FOTk9UX1NJRyk7DQotCQl9DQotCX0NCi0JDQotfQ0KLQ0KLUZYX0JPT0wgQ2hlY2tTaGFyZWRGb3JtKENYTUxfRWxlbWVudCAqIHBFbGVtZW50LCBDRlhfQnl0ZVN0cmluZyBjYk5hbWUpDQotew0KLQlpbnQgY291bnQgPSBwRWxlbWVudC0+Q291bnRBdHRycygpOw0KLQlpbnQgaT0wOw0KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgDQotCXsNCi0JCUNGWF9CeXRlU3RyaW5nIHNwYWNlLCBuYW1lOyANCi0JCUNGWF9XaWRlU3RyaW5nIHZhbHVlOw0KLQkJcEVsZW1lbnQtPkdldEF0dHJCeUluZGV4KGksIHNwYWNlLCBuYW1lLCB2YWx1ZSk7DQotCQlpZiAoc3BhY2UgPT0gRlhfQlNUUkMoInhtbG5zIikgJiYgbmFtZSA9PSBGWF9CU1RSQygiYWRob2N3ZiIpICYmIHZhbHVlID09ICBMImh0dHA6Ly9ucy5hZG9iZS5jb20vQWNyb2JhdEFkaG9jV29ya2Zsb3cvMS4wLyIpDQotCQl7DQotCQkJQ1hNTF9FbGVtZW50ICpwVmVyc2lvbiA9IHBFbGVtZW50LT5HZXRFbGVtZW50KCJhZGhvY3dmIixjYk5hbWUpOw0KLQkJCWlmICghcFZlcnNpb24pDQotCQkJCWNvbnRpbnVlOw0KLQkJCUNGWF9XaWRlU3RyaW5nIHdzQ29udGVudCA9IHBWZXJzaW9uLT5HZXRDb250ZW50KDApOyAvLyA9PSAxLjENCi0JCQlpbnQgblR5cGUgPSB3c0NvbnRlbnQuR2V0SW50ZWdlcigpOw0KLQkJCXN3aXRjaChuVHlwZSkNCi0JCQl7DQotCQkJY2FzZSAxOg0KLQkJCQlGUERGX1VuU3VwcG9ydEVycm9yKEZQREZfVU5TUF9ET0NfU0hBUkVERk9STV9BQ1JPQkFUKTsNCi0JCQkJYnJlYWs7DQotCQkJY2FzZSAyOg0KLQkJCQlGUERGX1VuU3VwcG9ydEVycm9yKEZQREZfVU5TUF9ET0NfU0hBUkVERk9STV9GSUxFU1lTVEVNKTsNCi0JCQkJYnJlYWs7DQotCQkJY2FzZSAwOg0KLQkJCQlGUERGX1VuU3VwcG9ydEVycm9yKEZQREZfVU5TUF9ET0NfU0hBUkVERk9STV9FTUFJTCk7DQotCQkJCWJyZWFrOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQlGWF9EV09SRCBuQ291bnQgPSBwRWxlbWVudC0+Q291bnRDaGlsZHJlbigpOw0KLQlmb3IoaT0wOyBpPChpbnQpbkNvdW50OyBpKyspDQotCXsNCi0JCUNYTUxfRWxlbWVudDo6Q2hpbGRUeXBlIGNoaWxkVHlwZSA9IHBFbGVtZW50LT5HZXRDaGlsZFR5cGUoaSk7DQotCQlpZihjaGlsZFR5cGUgPT0gQ1hNTF9FbGVtZW50OjpFbGVtZW50KQ0KLQkJew0KLQkJCUNYTUxfRWxlbWVudCAqIHBDaGlsZCA9IHBFbGVtZW50LT5HZXRFbGVtZW50KGkpOw0KLQkJCWlmKENoZWNrU2hhcmVkRm9ybShwQ2hpbGQsIGNiTmFtZSkpDQotCQkJCXJldHVybiBUUlVFOw0KLQkJfQ0KLQl9DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotdm9pZCBDaGVja1VuU3VwcG9ydEVycm9yKENQREZfRG9jdW1lbnQgKiBwRG9jLCBGWF9EV09SRCBlcnJfY29kZSkNCi17DQotCS8vIFNlY3VyaXR5DQotCWlmKGVycl9jb2RlID09IEZQREZfRVJSX1NFQ1VSSVRZKQ0KLQl7DQotCQlGUERGX1VuU3VwcG9ydEVycm9yKEZQREZfVU5TUF9ET0NfU0VDVVJJVFkpOw0KLQkJcmV0dXJuIDsNCi0JfQ0KLQlpZighcERvYykNCi0JCXJldHVybiA7DQotDQotCS8vIFBvcnRmb2xpb3MgYW5kIFBhY2thZ2VzIA0KLQlDUERGX0RpY3Rpb25hcnkgKiBwUm9vdERpY3QgPSBwRG9jLT5HZXRSb290KCk7DQotCWlmKHBSb290RGljdCkNCi0Jew0KLQkJQ0ZYX0J5dGVTdHJpbmcgY2JTdHJpbmc7DQotCQlpZihwUm9vdERpY3QtPktleUV4aXN0KCJDb2xsZWN0aW9uIikpDQotCQl7DQotCQkJRlBERl9VblN1cHBvcnRFcnJvcihGUERGX1VOU1BfRE9DX1BPUlRBQkxFQ09MTEVDVElPTik7DQotCQkJcmV0dXJuIDsNCi0JCX0NCi0JCWlmKHBSb290RGljdC0+S2V5RXhpc3QoIk5hbWVzIikpDQotCQl7DQotCQkJQ1BERl9EaWN0aW9uYXJ5KiBwTmFtZURpY3QgPSBwUm9vdERpY3QtPkdldERpY3QoIk5hbWVzIik7DQotCQkJaWYocE5hbWVEaWN0LT5LZXlFeGlzdCgiRW1iZWRkZWRGaWxlcyIpKQ0KLQkJCXsNCi0JCQkJRlBERl9VblN1cHBvcnRFcnJvcihGUERGX1VOU1BfRE9DX0FUVEFDSE1FTlQpOw0KLQkJCQlyZXR1cm47DQotCQkJfQ0KLQkJCWVsc2UgaWYocE5hbWVEaWN0LT5LZXlFeGlzdCgiSmF2YVNjcmlwdCIpKQ0KLQkJCXsNCi0JCQkJQ1BERl9EaWN0aW9uYXJ5KiBwSlNEaWN0ID0gcE5hbWVEaWN0LT5HZXREaWN0KCJKYXZhU2NyaXB0Iik7DQotCQkJCUNQREZfQXJyYXkgKiBwQXJyYXkgPSBwSlNEaWN0LT5HZXRBcnJheSgiTmFtZXMiKTsNCi0JCQkJaWYgKHBBcnJheSkgew0KLQkJCQkJaW50IG5Db3VudCA9IHBBcnJheS0+R2V0Q291bnQoKTsNCi0JCQkJCWZvcihpbnQgaT0wOyBpPG5Db3VudDsgaSsrKQ0KLQkJCQkJew0KLQkJCQkJCUNGWF9CeXRlU3RyaW5nIGNiU3RyID0gcEFycmF5LT5HZXRTdHJpbmcoaSk7DQotCQkJCQkJaWYoY2JTdHIuQ29tcGFyZSgiY29tLmFkb2JlLmFjcm9iYXQuU2hhcmVkUmV2aWV3LlJlZ2lzdGVyIikgPT0gMCkNCi0JCQkJCQl7DQotCQkJCQkJCUZQREZfVW5TdXBwb3J0RXJyb3IoRlBERl9VTlNQX0RPQ19TSEFSRURSRVZJRVcpOw0KLQkJCQkJCQlyZXR1cm47DQotCQkJCQkJfQ0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQl9DQotDQotCS8vIFNoYXJlZEZvcm0NCi0JQ1BERl9NZXRhZGF0YSBtZXRhRGF0YTsNCi0JbWV0YURhdGEuTG9hZERvYyhwRG9jKTsNCi0JQ1hNTF9FbGVtZW50ICogcEVsZW1lbnQgPSBtZXRhRGF0YS5HZXRSb290KCk7DQotCWlmKHBFbGVtZW50KQ0KLQkJQ2hlY2tTaGFyZWRGb3JtKHBFbGVtZW50LCAid29ya2Zsb3dUeXBlIik7DQotDQotCQ0KLQkvLyBYRkEgRm9ybXMNCi0JQ1BERl9JbnRlckZvcm0gKiBwSW50ZXJGb3JtID0gRlhfTkVXIENQREZfSW50ZXJGb3JtKHBEb2MsRkFMU0UpOw0KLQlpZiAocEludGVyRm9ybSkNCi0Jew0KLQkJaWYocEludGVyRm9ybS0+SGFzWEZBRm9ybSgpKQ0KLQkJew0KLQkJCUZQREZfVW5TdXBwb3J0RXJyb3IoRlBERl9VTlNQX0RPQ19YRkFGT1JNKTsNCi0JCX0NCi0JCWRlbGV0ZSBwSW50ZXJGb3JtOw0KLQl9DQotfQ0KLQ0KLURMTEVYUE9SVCBpbnQgRlBERkRvY19HZXRQYWdlTW9kZShGUERGX0RPQ1VNRU5UIGRvY3VtZW50KQ0KLXsNCi0JaWYgKCFkb2N1bWVudCkgcmV0dXJuIFBBR0VNT0RFX1VOS09OT1dOOw0KLQlDUERGX0RpY3Rpb25hcnkgKnBSb290ID0gKChDUERGX0RvY3VtZW50Kilkb2N1bWVudCktPkdldFJvb3QoKTsNCi0JaWYgKCFwUm9vdCkNCi0JCXJldHVybiBQQUdFTU9ERV9VTktPTk9XTjsNCi0JQ1BERl9PYmplY3QqIHBOYW1lID0gcFJvb3QtPkdldEVsZW1lbnQoIlBhZ2VNb2RlIik7DQotCWlmICghcE5hbWUpDQotCQlyZXR1cm4gUEFHRU1PREVfVVNFTk9ORTsNCi0JQ0ZYX0J5dGVTdHJpbmcgc3RyUGFnZU1vZGUgPSBwTmFtZS0+R2V0U3RyaW5nKCk7DQotCQ0KLQlpZiAoc3RyUGFnZU1vZGUuSXNFbXB0eSgpfHxzdHJQYWdlTW9kZS5FcXVhbE5vQ2FzZShGWF9CU1RSKCJVc2VOb25lIikpKQ0KLQkJcmV0dXJuIFBBR0VNT0RFX1VTRU5PTkU7DQotCWVsc2UgaWYgKHN0clBhZ2VNb2RlLkVxdWFsTm9DYXNlKEZYX0JTVFIoIlVzZU91dGxpbmVzIikpKQ0KLQkJcmV0dXJuIFBBR0VNT0RFX1VTRU9VVExJTkVTOw0KLQllbHNlIGlmIChzdHJQYWdlTW9kZS5FcXVhbE5vQ2FzZShGWF9CU1RSKCJVc2VUaHVtYnMiKSkpDQotCQlyZXR1cm4gUEFHRU1PREVfVVNFVEhVTUJTOw0KLQllbHNlIGlmIChzdHJQYWdlTW9kZS5FcXVhbE5vQ2FzZShGWF9CU1RSKCJGdWxsU2NyZWVuIikpKQ0KLQkJcmV0dXJuIFBBR0VNT0RFX0ZVTExTQ1JFRU47DQotCWVsc2UgaWYgKHN0clBhZ2VNb2RlLkVxdWFsTm9DYXNlKEZYX0JTVFIoIlVzZU9DIikpKQ0KLQkJcmV0dXJuIFBBR0VNT0RFX1VTRU9DOw0KLQllbHNlIGlmIChzdHJQYWdlTW9kZS5FcXVhbE5vQ2FzZShGWF9CU1RSKCJVc2VBdHRhY2htZW50cyIpKSkNCi0JCXJldHVybiBQQUdFTU9ERV9VU0VBVFRBQ0hNRU5UUzsNCi0NCi0JcmV0dXJuIFBBR0VNT0RFX1VOS09OT1dOOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX2RlZmluZS5oIgorI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnBkZl9leHQuaCIKKworI2RlZmluZSAgRlBERlNES19VTlNVUFBPUlRfQ0FMTCAxMDAKKworY2xhc3MgQ0ZTREtfVW5zdXBwb3J0SW5mb19BZGFwdGVyCit7CitwdWJsaWM6CisJQ0ZTREtfVW5zdXBwb3J0SW5mb19BZGFwdGVyKFVOU1VQUE9SVF9JTkZPKiB1bnNwX2luZm8peyBtX3Vuc3BfaW5mbyA9IHVuc3BfaW5mbzt9CisvLwlGWF9CT09MIE5lZWRUb1BhdXNlTm93KCk7CisJdm9pZCBSZXBvcnRFcnJvcihpbnQgbkVycm9yVHlwZSk7CisKK3ByaXZhdGU6CisJVU5TVVBQT1JUX0lORk8qIG1fdW5zcF9pbmZvOworfTsKKwordm9pZCBDRlNES19VbnN1cHBvcnRJbmZvX0FkYXB0ZXI6OlJlcG9ydEVycm9yKGludCBuRXJyb3JUeXBlKQoreworCWlmKG1fdW5zcF9pbmZvICYmIG1fdW5zcF9pbmZvLT5GU0RLX1VuU3VwcG9ydF9IYW5kbGVyKQorCXsKKwkJbV91bnNwX2luZm8tPkZTREtfVW5TdXBwb3J0X0hhbmRsZXIobV91bnNwX2luZm8sbkVycm9yVHlwZSk7CisJfQorfQorCit2b2lkIEZyZWVVbnN1cHBvcnRJbmZvKEZYX0xQVk9JRCBwRGF0YSkKK3sKKwlDRlNES19VbnN1cHBvcnRJbmZvX0FkYXB0ZXIgKiBwQWRhcHRlciA9IChDRlNES19VbnN1cHBvcnRJbmZvX0FkYXB0ZXIgKilwRGF0YTsKKwlkZWxldGUgcEFkYXB0ZXI7Cit9CisKK0ZYX0JPT0wgRlBERl9VblN1cHBvcnRFcnJvcihpbnQgbkVycm9yKQoreworCUNGU0RLX1Vuc3VwcG9ydEluZm9fQWRhcHRlciAqIHBBZGFwdGVyID0gKENGU0RLX1Vuc3VwcG9ydEluZm9fQWRhcHRlciAqKUNQREZfTW9kdWxlTWdyOjpHZXQoKS0+R2V0UHJpdmF0ZURhdGEoKHZvaWQgKilGUERGU0RLX1VOU1VQUE9SVF9DQUxMKTsKKworCWlmKCFwQWRhcHRlcikKKwkJcmV0dXJuIEZBTFNFOworCXBBZGFwdGVyLT5SZXBvcnRFcnJvcihuRXJyb3IpOworCXJldHVybiBUUlVFOworfQkKKworRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZTREtfU2V0VW5TcE9ialByb2Nlc3NIYW5kbGVyKFVOU1VQUE9SVF9JTkZPKiB1bnNwX2luZm8pCit7CisJaWYgKCF1bnNwX2luZm8gfHwgdW5zcF9pbmZvLT52ZXJzaW9uIT0xKQorCQlyZXR1cm4gRkFMU0U7CisJQ0ZTREtfVW5zdXBwb3J0SW5mb19BZGFwdGVyICogcEFkYXB0ZXIgPSBuZXcgQ0ZTREtfVW5zdXBwb3J0SW5mb19BZGFwdGVyKHVuc3BfaW5mbyk7CisKKwlDUERGX01vZHVsZU1ncjo6R2V0KCktPlNldFByaXZhdGVEYXRhKCh2b2lkICopRlBERlNES19VTlNVUFBPUlRfQ0FMTCxwQWRhcHRlciwgJkZyZWVVbnN1cHBvcnRJbmZvKTsKKworCXJldHVybiBUUlVFOworfQorCit2b2lkIENoZWNrVW5TdXBwb3J0QW5ub3QoQ1BERl9Eb2N1bWVudCAqIHBEb2MsIENQREZfQW5ub3QqIHBQREZBbm5vdCkKK3sKKwlDRlhfQnl0ZVN0cmluZyBjYlN1YlR5cGUgPSBwUERGQW5ub3QtPkdldFN1YlR5cGUoKTsKKwlpZihjYlN1YlR5cGUuQ29tcGFyZSgiM0QiKSA9PSAwKQorCXsKKwkJRlBERl9VblN1cHBvcnRFcnJvcihGUERGX1VOU1BfQU5OT1RfM0RBTk5PVCk7CisJfQorCWVsc2UgaWYoY2JTdWJUeXBlLkNvbXBhcmUoIlNjcmVlbiIpID09MCkKKwl7CisJCUNQREZfRGljdGlvbmFyeSogcEFubm90RGljdCA9IHBQREZBbm5vdC0+bV9wQW5ub3REaWN0OworCQlDRlhfQnl0ZVN0cmluZyBjYlN0cmluZzsKKwkJaWYocEFubm90RGljdC0+S2V5RXhpc3QoIklUIikpCisJCQljYlN0cmluZyA9IHBBbm5vdERpY3QtPkdldFN0cmluZygiSVQiKTsKKwkJaWYoY2JTdHJpbmcuQ29tcGFyZSgiSW1nIikgIT0gMCkKKwkJCUZQREZfVW5TdXBwb3J0RXJyb3IoRlBERl9VTlNQX0FOTk9UX1NDUkVFTl9NRURJQSk7CisJfQorCWVsc2UgaWYoY2JTdWJUeXBlLkNvbXBhcmUoIk1vdmllIikgPT0wKQorCXsKKwkJRlBERl9VblN1cHBvcnRFcnJvcihGUERGX1VOU1BfQU5OT1RfTU9WSUUpOworCX0KKwllbHNlIGlmKGNiU3ViVHlwZS5Db21wYXJlKCJTb3VuZCIpID09MCkKKwl7CisJCUZQREZfVW5TdXBwb3J0RXJyb3IoRlBERl9VTlNQX0FOTk9UX1NPVU5EKTsKKwl9CisJZWxzZSBpZihjYlN1YlR5cGUuQ29tcGFyZSgiUmljaE1lZGlhIikgPT0wKQorCXsKKwkJRlBERl9VblN1cHBvcnRFcnJvcihGUERGX1VOU1BfQU5OT1RfU0NSRUVOX1JJQ0hNRURJQSk7CisJfQorCWVsc2UgaWYoY2JTdWJUeXBlLkNvbXBhcmUoIkZpbGVBdHRhY2htZW50IikgPT0wKQorCXsKKwkJRlBERl9VblN1cHBvcnRFcnJvcihGUERGX1VOU1BfQU5OT1RfQVRUQUNITUVOVCk7CisJfQorCWVsc2UgaWYoY2JTdWJUeXBlLkNvbXBhcmUoIldpZGdldCIpID09MCkKKwl7CisJCUNQREZfRGljdGlvbmFyeSogcEFubm90RGljdCA9IHBQREZBbm5vdC0+bV9wQW5ub3REaWN0OworCQlDRlhfQnl0ZVN0cmluZyBjYlN0cmluZzsKKwkJaWYocEFubm90RGljdC0+S2V5RXhpc3QoIkZUIikpCisJCXsKKwkJCWNiU3RyaW5nID0gcEFubm90RGljdC0+R2V0U3RyaW5nKCJGVCIpOworCQl9CQorCQlpZihjYlN0cmluZy5Db21wYXJlKCJTaWciKSA9PSAwKQorCQl7CisJCQlGUERGX1VuU3VwcG9ydEVycm9yKEZQREZfVU5TUF9BTk5PVF9TSUcpOworCQl9CisJfQorCQorfQorCitGWF9CT09MIENoZWNrU2hhcmVkRm9ybShDWE1MX0VsZW1lbnQgKiBwRWxlbWVudCwgQ0ZYX0J5dGVTdHJpbmcgY2JOYW1lKQoreworCWludCBjb3VudCA9IHBFbGVtZW50LT5Db3VudEF0dHJzKCk7CisJaW50IGk9MDsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgCisJeworCQlDRlhfQnl0ZVN0cmluZyBzcGFjZSwgbmFtZTsgCisJCUNGWF9XaWRlU3RyaW5nIHZhbHVlOworCQlwRWxlbWVudC0+R2V0QXR0ckJ5SW5kZXgoaSwgc3BhY2UsIG5hbWUsIHZhbHVlKTsKKwkJaWYgKHNwYWNlID09IEZYX0JTVFJDKCJ4bWxucyIpICYmIG5hbWUgPT0gRlhfQlNUUkMoImFkaG9jd2YiKSAmJiB2YWx1ZSA9PSAgTCJodHRwOi8vbnMuYWRvYmUuY29tL0Fjcm9iYXRBZGhvY1dvcmtmbG93LzEuMC8iKQorCQl7CisJCQlDWE1MX0VsZW1lbnQgKnBWZXJzaW9uID0gcEVsZW1lbnQtPkdldEVsZW1lbnQoImFkaG9jd2YiLGNiTmFtZSk7CisJCQlpZiAoIXBWZXJzaW9uKQorCQkJCWNvbnRpbnVlOworCQkJQ0ZYX1dpZGVTdHJpbmcgd3NDb250ZW50ID0gcFZlcnNpb24tPkdldENvbnRlbnQoMCk7IC8vID09IDEuMQorCQkJaW50IG5UeXBlID0gd3NDb250ZW50LkdldEludGVnZXIoKTsKKwkJCXN3aXRjaChuVHlwZSkKKwkJCXsKKwkJCWNhc2UgMToKKwkJCQlGUERGX1VuU3VwcG9ydEVycm9yKEZQREZfVU5TUF9ET0NfU0hBUkVERk9STV9BQ1JPQkFUKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlGUERGX1VuU3VwcG9ydEVycm9yKEZQREZfVU5TUF9ET0NfU0hBUkVERk9STV9GSUxFU1lTVEVNKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMDoKKwkJCQlGUERGX1VuU3VwcG9ydEVycm9yKEZQREZfVU5TUF9ET0NfU0hBUkVERk9STV9FTUFJTCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlGWF9EV09SRCBuQ291bnQgPSBwRWxlbWVudC0+Q291bnRDaGlsZHJlbigpOworCWZvcihpPTA7IGk8KGludCluQ291bnQ7IGkrKykKKwl7CisJCUNYTUxfRWxlbWVudDo6Q2hpbGRUeXBlIGNoaWxkVHlwZSA9IHBFbGVtZW50LT5HZXRDaGlsZFR5cGUoaSk7CisJCWlmKGNoaWxkVHlwZSA9PSBDWE1MX0VsZW1lbnQ6OkVsZW1lbnQpCisJCXsKKwkJCUNYTUxfRWxlbWVudCAqIHBDaGlsZCA9IHBFbGVtZW50LT5HZXRFbGVtZW50KGkpOworCQkJaWYoQ2hlY2tTaGFyZWRGb3JtKHBDaGlsZCwgY2JOYW1lKSkKKwkJCQlyZXR1cm4gVFJVRTsKKwkJfQorCX0KKwlyZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgQ2hlY2tVblN1cHBvcnRFcnJvcihDUERGX0RvY3VtZW50ICogcERvYywgRlhfRFdPUkQgZXJyX2NvZGUpCit7CisJLy8gU2VjdXJpdHkKKwlpZihlcnJfY29kZSA9PSBGUERGX0VSUl9TRUNVUklUWSkKKwl7CisJCUZQREZfVW5TdXBwb3J0RXJyb3IoRlBERl9VTlNQX0RPQ19TRUNVUklUWSk7CisJCXJldHVybiA7CisJfQorCWlmKCFwRG9jKQorCQlyZXR1cm4gOworCisJLy8gUG9ydGZvbGlvcyBhbmQgUGFja2FnZXMgCisJQ1BERl9EaWN0aW9uYXJ5ICogcFJvb3REaWN0ID0gcERvYy0+R2V0Um9vdCgpOworCWlmKHBSb290RGljdCkKKwl7CisJCUNGWF9CeXRlU3RyaW5nIGNiU3RyaW5nOworCQlpZihwUm9vdERpY3QtPktleUV4aXN0KCJDb2xsZWN0aW9uIikpCisJCXsKKwkJCUZQREZfVW5TdXBwb3J0RXJyb3IoRlBERl9VTlNQX0RPQ19QT1JUQUJMRUNPTExFQ1RJT04pOworCQkJcmV0dXJuIDsKKwkJfQorCQlpZihwUm9vdERpY3QtPktleUV4aXN0KCJOYW1lcyIpKQorCQl7CisJCQlDUERGX0RpY3Rpb25hcnkqIHBOYW1lRGljdCA9IHBSb290RGljdC0+R2V0RGljdCgiTmFtZXMiKTsKKwkJCWlmKHBOYW1lRGljdC0+S2V5RXhpc3QoIkVtYmVkZGVkRmlsZXMiKSkKKwkJCXsKKwkJCQlGUERGX1VuU3VwcG9ydEVycm9yKEZQREZfVU5TUF9ET0NfQVRUQUNITUVOVCk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJZWxzZSBpZihwTmFtZURpY3QtPktleUV4aXN0KCJKYXZhU2NyaXB0IikpCisJCQl7CisJCQkJQ1BERl9EaWN0aW9uYXJ5KiBwSlNEaWN0ID0gcE5hbWVEaWN0LT5HZXREaWN0KCJKYXZhU2NyaXB0Iik7CisJCQkJQ1BERl9BcnJheSAqIHBBcnJheSA9IHBKU0RpY3QtPkdldEFycmF5KCJOYW1lcyIpOworCQkJCWlmIChwQXJyYXkpIHsKKwkJCQkJaW50IG5Db3VudCA9IHBBcnJheS0+R2V0Q291bnQoKTsKKwkJCQkJZm9yKGludCBpPTA7IGk8bkNvdW50OyBpKyspCisJCQkJCXsKKwkJCQkJCUNGWF9CeXRlU3RyaW5nIGNiU3RyID0gcEFycmF5LT5HZXRTdHJpbmcoaSk7CisJCQkJCQlpZihjYlN0ci5Db21wYXJlKCJjb20uYWRvYmUuYWNyb2JhdC5TaGFyZWRSZXZpZXcuUmVnaXN0ZXIiKSA9PSAwKQorCQkJCQkJeworCQkJCQkJCUZQREZfVW5TdXBwb3J0RXJyb3IoRlBERl9VTlNQX0RPQ19TSEFSRURSRVZJRVcpOworCQkJCQkJCXJldHVybjsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8vIFNoYXJlZEZvcm0KKwlDUERGX01ldGFkYXRhIG1ldGFEYXRhOworCW1ldGFEYXRhLkxvYWREb2MocERvYyk7CisJQ1hNTF9FbGVtZW50ICogcEVsZW1lbnQgPSBtZXRhRGF0YS5HZXRSb290KCk7CisJaWYocEVsZW1lbnQpCisJCUNoZWNrU2hhcmVkRm9ybShwRWxlbWVudCwgIndvcmtmbG93VHlwZSIpOworCisJCisJLy8gWEZBIEZvcm1zCisJQ1BERl9JbnRlckZvcm0gKiBwSW50ZXJGb3JtID0gRlhfTkVXIENQREZfSW50ZXJGb3JtKHBEb2MsRkFMU0UpOworCWlmIChwSW50ZXJGb3JtKQorCXsKKwkJaWYocEludGVyRm9ybS0+SGFzWEZBRm9ybSgpKQorCQl7CisJCQlGUERGX1VuU3VwcG9ydEVycm9yKEZQREZfVU5TUF9ET0NfWEZBRk9STSk7CisJCX0KKwkJZGVsZXRlIHBJbnRlckZvcm07CisJfQorfQorCitETExFWFBPUlQgaW50IEZQREZEb2NfR2V0UGFnZU1vZGUoRlBERl9ET0NVTUVOVCBkb2N1bWVudCkKK3sKKwlpZiAoIWRvY3VtZW50KSByZXR1cm4gUEFHRU1PREVfVU5LT05PV047CisJQ1BERl9EaWN0aW9uYXJ5ICpwUm9vdCA9ICgoQ1BERl9Eb2N1bWVudCopZG9jdW1lbnQpLT5HZXRSb290KCk7CisJaWYgKCFwUm9vdCkKKwkJcmV0dXJuIFBBR0VNT0RFX1VOS09OT1dOOworCUNQREZfT2JqZWN0KiBwTmFtZSA9IHBSb290LT5HZXRFbGVtZW50KCJQYWdlTW9kZSIpOworCWlmICghcE5hbWUpCisJCXJldHVybiBQQUdFTU9ERV9VU0VOT05FOworCUNGWF9CeXRlU3RyaW5nIHN0clBhZ2VNb2RlID0gcE5hbWUtPkdldFN0cmluZygpOworCQorCWlmIChzdHJQYWdlTW9kZS5Jc0VtcHR5KCl8fHN0clBhZ2VNb2RlLkVxdWFsTm9DYXNlKEZYX0JTVFIoIlVzZU5vbmUiKSkpCisJCXJldHVybiBQQUdFTU9ERV9VU0VOT05FOworCWVsc2UgaWYgKHN0clBhZ2VNb2RlLkVxdWFsTm9DYXNlKEZYX0JTVFIoIlVzZU91dGxpbmVzIikpKQorCQlyZXR1cm4gUEFHRU1PREVfVVNFT1VUTElORVM7CisJZWxzZSBpZiAoc3RyUGFnZU1vZGUuRXF1YWxOb0Nhc2UoRlhfQlNUUigiVXNlVGh1bWJzIikpKQorCQlyZXR1cm4gUEFHRU1PREVfVVNFVEhVTUJTOworCWVsc2UgaWYgKHN0clBhZ2VNb2RlLkVxdWFsTm9DYXNlKEZYX0JTVFIoIkZ1bGxTY3JlZW4iKSkpCisJCXJldHVybiBQQUdFTU9ERV9GVUxMU0NSRUVOOworCWVsc2UgaWYgKHN0clBhZ2VNb2RlLkVxdWFsTm9DYXNlKEZYX0JTVFIoIlVzZU9DIikpKQorCQlyZXR1cm4gUEFHRU1PREVfVVNFT0M7CisJZWxzZSBpZiAoc3RyUGFnZU1vZGUuRXF1YWxOb0Nhc2UoRlhfQlNUUigiVXNlQXR0YWNobWVudHMiKSkpCisJCXJldHVybiBQQUdFTU9ERV9VU0VBVFRBQ0hNRU5UUzsKKworCXJldHVybiBQQUdFTU9ERV9VTktPTk9XTjsKK30KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2ZwZGZfZmxhdHRlbi5jcHAgYi9mcGRmc2RrL3NyYy9mcGRmX2ZsYXR0ZW4uY3BwCmluZGV4IGYwNDEwMGYuLjZkMzQ0MGYgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2ZwZGZfZmxhdHRlbi5jcHAKKysrIGIvZnBkZnNkay9zcmMvZnBkZl9mbGF0dGVuLmNwcApAQCAtMSw1NjEgKzEsNTYxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX2RlZmluZS5oIg0KLSNpbmNsdWRlICIuLi9pbmNsdWRlL2ZwZGZfZmxhdHRlbi5oIg0KLQ0KLXR5cGVkZWYgQ0ZYX0FycmF5VGVtcGxhdGU8Q1BERl9EaWN0aW9uYXJ5Kj4gQ1BERl9PYmplY3RBcnJheTsNCi10eXBlZGVmIENGWF9BcnJheVRlbXBsYXRlPENQREZfUmVjdD4gQ1BERl9SZWN0QXJyYXk7DQotDQotZW51bSBGUERGX1RZUEUgeyBNQVgsIE1JTiB9Ow0KLWVudW0gRlBERl9WQUxVRSB7IFRPUCwgTEVGVCwgUklHSFQsIEJPVFRPTSB9Ow0KLQ0KLUZYX0JPT0wgSXNWYWxpYWJsZVJlY3QoQ1BERl9SZWN0IHJlY3QsIENQREZfUmVjdCByY1BhZ2UpDQotew0KLQlpZiAoIHJlY3QubGVmdCAtIHJlY3QucmlnaHQgPiAwLjAwMDAwMWYgfHwgDQotCQkgcmVjdC5ib3R0b20gLSByZWN0LnRvcCA+IDAuMDAwMDAxZikNCi0JCXJldHVybiBGQUxTRTsNCi0JDQotCWlmIChyZWN0LmxlZnQgPT0gMC4wZiAmJg0KLQkJcmVjdC50b3AgPT0gMC4wZiAmJg0KLQkJcmVjdC5yaWdodCA9PSAwLjBmICYmDQotCQlyZWN0LmJvdHRvbSA9PSAwLjBmKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQkNCi0JaWYgKCFyY1BhZ2UuSXNFbXB0eSgpKQ0KLQl7DQotCQlpZiAocmVjdC5sZWZ0IC0gcmNQYWdlLmxlZnQgPCAtMTAuMDAwMDAxZiB8fA0KLQkJCXJlY3QucmlnaHQgLSByY1BhZ2UucmlnaHQgPiAxMC4wMDAwMDFmIHx8DQotCQkJcmVjdC50b3AgLSByY1BhZ2UudG9wID4gMTAuMDAwMDAxZiB8fA0KLQkJCXJlY3QuYm90dG9tIC0gcmNQYWdlLmJvdHRvbSA8IC0xMC4wMDAwMDFmKQ0KLQkJCXJldHVybiBGQUxTRTsNCi0JfQ0KLQkNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLQ0KLUZYX0JPT0wgR2V0Q29udGVudHNSZWN0KCBDUERGX0RvY3VtZW50ICogcERvYywgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCwgQ1BERl9SZWN0QXJyYXkgKiBwUmVjdEFycmF5ICkNCi17DQotCUNQREZfUGFnZSogcFBERlBhZ2UgPSBGWF9ORVcgQ1BERl9QYWdlOw0KLQlwUERGUGFnZS0+TG9hZCggcERvYywgcERpY3QsIEZBTFNFICk7DQotCXBQREZQYWdlLT5QYXJzZUNvbnRlbnQoKTsNCi0NCi0JRlhfUE9TSVRJT04gcG9zID0gcFBERlBhZ2UtPkdldEZpcnN0T2JqZWN0UG9zaXRpb24oKTsNCi0JDQotCXdoaWxlIChwb3MpDQotCXsNCi0JCUNQREZfUGFnZU9iamVjdCogcFBhZ2VPYmplY3QgPSBwUERGUGFnZS0+R2V0TmV4dE9iamVjdChwb3MpOw0KLQkJaWYgKCFwUGFnZU9iamVjdCljb250aW51ZTsNCi0JCQ0KLQkJQ1BERl9SZWN0IHJjOw0KLQkJcmMubGVmdCA9IHBQYWdlT2JqZWN0LT5tX0xlZnQ7DQotCQlyYy5yaWdodCA9IHBQYWdlT2JqZWN0LT5tX1JpZ2h0Ow0KLQkJcmMuYm90dG9tID0gcFBhZ2VPYmplY3QtPm1fQm90dG9tOw0KLQkJcmMudG9wID0gcFBhZ2VPYmplY3QtPm1fVG9wOw0KLQkJDQotCQlpZiAoSXNWYWxpYWJsZVJlY3QocmMsIHBEaWN0LT5HZXRSZWN0KCJNZWRpYUJveCIpKSkNCi0JCXsNCi0JCQlwUmVjdEFycmF5LT5BZGQocmMpOw0KLQkJfQ0KLQl9DQotCQ0KLQlkZWxldGUgcFBERlBhZ2U7DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi0NCi12b2lkIFBhcnNlclN0cmVhbSggQ1BERl9EaWN0aW9uYXJ5ICogcFBhZ2VEaWMsIENQREZfRGljdGlvbmFyeSogcFN0cmVhbSwgQ1BERl9SZWN0QXJyYXkgKiBwUmVjdEFycmF5LCBDUERGX09iamVjdEFycmF5ICogcE9iamVjdEFycmF5ICkNCi17DQotCWlmICghcFN0cmVhbSlyZXR1cm47DQotCUNQREZfUmVjdCByZWN0Ow0KLQlpZiAocFN0cmVhbS0+S2V5RXhpc3QoIlJlY3QiKSkNCi0JCXJlY3QgPSBwU3RyZWFtLT5HZXRSZWN0KCJSZWN0Iik7DQotCWVsc2UgaWYgKHBTdHJlYW0tPktleUV4aXN0KCJCQm94IikpDQotCQlyZWN0ID0gcFN0cmVhbS0+R2V0UmVjdCgiQkJveCIpOw0KLQkNCi0JaWYgKElzVmFsaWFibGVSZWN0KHJlY3QsIHBQYWdlRGljLT5HZXRSZWN0KCJNZWRpYUJveCIpKSkNCi0JCXBSZWN0QXJyYXktPkFkZChyZWN0KTsNCi0JDQotCXBPYmplY3RBcnJheS0+QWRkKHBTdHJlYW0pOw0KLX0NCi0NCi0NCi1pbnQgUGFyc2VyQW5ub3RzKCBDUERGX0RvY3VtZW50KiBwU291cmNlRG9jLCBDUERGX0RpY3Rpb25hcnkgKiBwUGFnZURpYywgQ1BERl9SZWN0QXJyYXkgKiBwUmVjdEFycmF5LCBDUERGX09iamVjdEFycmF5ICogcE9iamVjdEFycmF5LCBpbnQgblVzYWdlKQ0KLXsNCi0JaWYgKCFwU291cmNlRG9jIHx8ICFwUGFnZURpYykgcmV0dXJuIEZMQVRURU5fRkFJTDsNCi0JDQotCUdldENvbnRlbnRzUmVjdCggcFNvdXJjZURvYywgcFBhZ2VEaWMsIHBSZWN0QXJyYXkgKTsNCi0JQ1BERl9BcnJheSogcEFubm90cyA9IHBQYWdlRGljLT5HZXRBcnJheSgiQW5ub3RzIik7DQotCWlmIChwQW5ub3RzKQ0KLQl7DQotCQlGWF9EV09SRCBkd1NpemUgPSBwQW5ub3RzLT5HZXRDb3VudCgpOw0KLQkJDQotCQlmb3IgKGludCBpID0gMDsgaSA8IChpbnQpZHdTaXplOyBpKyspDQotCQl7DQotCQkJQ1BERl9PYmplY3QqIHBPYmogPSBwQW5ub3RzLT5HZXRFbGVtZW50VmFsdWUoaSk7DQotCQkJDQotCQkJaWYgKCFwT2JqKWNvbnRpbnVlOw0KLQkJCQ0KLQkJCWlmIChwT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpDQotCQkJew0KLQkJCQlDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpYyA9IChDUERGX0RpY3Rpb25hcnkqKXBPYmo7DQotCQkJCUNGWF9CeXRlU3RyaW5nIHNTdWJ0eXBlID0gcEFubm90RGljLT5HZXRTdHJpbmcoIlN1YnR5cGUiKTsNCi0JCQkJaWYgKHNTdWJ0eXBlID09ICJQb3B1cCIpY29udGludWU7DQotDQotCQkJCWludCBuQW5ub3RGbGFnID0gcEFubm90RGljLT5HZXRJbnRlZ2VyKCJGIik7DQotDQotCQkJCWlmKG5Bbm5vdEZsYWcgJiBBTk5PVEZMQUdfSElEREVOKSANCi0JCQkJCWNvbnRpbnVlOw0KLQkJCQlpZihuVXNhZ2UgPT0gRkxBVF9OT1JNQUxESVNQTEFZKQ0KLQkJCQl7DQotCQkJCQlpZihuQW5ub3RGbGFnICYgQU5OT1RGTEFHX0lOVklTSUJMRSkNCi0JCQkJCQljb250aW51ZTsNCi0JCQkJCVBhcnNlclN0cmVhbSggcFBhZ2VEaWMsIHBBbm5vdERpYywgcFJlY3RBcnJheSwgcE9iamVjdEFycmF5ICk7CQkNCi0JCQkJfQ0KLQkJCQllbHNlDQotCQkJCXsNCi0JCQkJCWlmKG5Bbm5vdEZsYWcgJiBBTk5PVEZMQUdfUFJJTlQpDQotCQkJCQkJUGFyc2VyU3RyZWFtKCBwUGFnZURpYywgcEFubm90RGljLCBwUmVjdEFycmF5LCBwT2JqZWN0QXJyYXkgKTsNCi0JCQkJfQkJCQ0KLQkJCX0NCi0JCX0NCi0JCXJldHVybiBGTEFUVEVOX1NVQ0NFU1M7DQotCX1lbHNlew0KLQkJcmV0dXJuIEZMQVRURU5fTk9USU5HVE9ETzsNCi0JfQ0KLX0NCi0NCi0NCi1GWF9GTE9BVCBHZXRNaW5NYXhWYWx1ZSggQ1BERl9SZWN0QXJyYXkmIGFycmF5LCBGUERGX1RZUEUgdHlwZSwgRlBERl9WQUxVRSB2YWx1ZSkNCi17DQotCWludCBuUmVjdHMgPSBhcnJheS5HZXRTaXplKCk7DQotCUZYX0ZMT0FUIGZSZXQgPSAwLjBmOw0KLQkNCi0JaWYgKG5SZWN0cyA8PSAwKXJldHVybiAwLjBmOw0KLQkNCi0JRlhfRkxPQVQqIHBBcnJheSA9IG5ldyBGWF9GTE9BVFtuUmVjdHNdOw0KLQlzd2l0Y2godmFsdWUpDQotCXsNCi0JY2FzZSBMRUZUOg0KLQkJew0KLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgblJlY3RzOyBpKyspDQotCQkJCXBBcnJheVtpXSA9IENQREZfUmVjdChhcnJheS5HZXRBdChpKSkubGVmdDsNCi0JCQkNCi0JCQlicmVhazsNCi0JCX0NCi0JY2FzZSBUT1A6DQotCQl7DQotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuUmVjdHM7IGkrKykNCi0JCQkJcEFycmF5W2ldID0gQ1BERl9SZWN0KGFycmF5LkdldEF0KGkpKS50b3A7DQotCQkJDQotCQkJYnJlYWs7DQotCQl9DQotCWNhc2UgUklHSFQ6DQotCQl7DQotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuUmVjdHM7IGkrKykNCi0JCQkJcEFycmF5W2ldID0gQ1BERl9SZWN0KGFycmF5LkdldEF0KGkpKS5yaWdodDsNCi0JCQkNCi0JCQlicmVhazsNCi0JCX0NCi0JY2FzZSBCT1RUT006DQotCQl7DQotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuUmVjdHM7IGkrKykNCi0JCQkJcEFycmF5W2ldID0gQ1BERl9SZWN0KGFycmF5LkdldEF0KGkpKS5ib3R0b207DQotCQkJDQotCQkJYnJlYWs7DQotCQl9DQotCWRlZmF1bHQ6DQotCQlicmVhazsNCi0JfQ0KLQlmUmV0ID0gcEFycmF5WzBdOw0KLQlpZiAodHlwZSA9PSBNQVgpDQotCXsNCi0JCWZvciAoaW50IGkgPSAxOyBpIDwgblJlY3RzOyBpKyspDQotCQkJaWYgKGZSZXQgPD0gcEFycmF5W2ldKQ0KLQkJCQlmUmV0ID0gcEFycmF5W2ldOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJZm9yIChpbnQgaSA9IDE7IGkgPCBuUmVjdHM7IGkrKykNCi0JCQlpZiAoZlJldCA+PSBwQXJyYXlbaV0pDQotCQkJCWZSZXQgPSBwQXJyYXlbaV07DQotCX0NCi0JZGVsZXRlW10gcEFycmF5Ow0KLQlyZXR1cm4gZlJldDsNCi19DQotDQotQ1BERl9SZWN0IENhbGN1bGF0ZVJlY3QoIENQREZfUmVjdEFycmF5ICogcFJlY3RBcnJheSApDQotew0KLQ0KLQlDUERGX1JlY3QgcmNSZXQ7DQotCQ0KLQlyY1JldC5sZWZ0ID0gR2V0TWluTWF4VmFsdWUoKnBSZWN0QXJyYXksIE1JTiwgTEVGVCk7DQotCXJjUmV0LnRvcCA9IEdldE1pbk1heFZhbHVlKCpwUmVjdEFycmF5LCBNQVgsIFRPUCk7DQotCXJjUmV0LnJpZ2h0ID0gR2V0TWluTWF4VmFsdWUoKnBSZWN0QXJyYXksIE1BWCwgUklHSFQpOw0KLQlyY1JldC5ib3R0b20gPSBHZXRNaW5NYXhWYWx1ZSgqcFJlY3RBcnJheSwgTUlOLCBCT1RUT00pOw0KLQkNCi0JcmV0dXJuIHJjUmV0Ow0KLX0NCi0NCi0NCi12b2lkIFNldFBhZ2VDb250ZW50cyhDRlhfQnl0ZVN0cmluZyBrZXksIENQREZfRGljdGlvbmFyeSogcFBhZ2UsIENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCkNCi17DQotCUNQREZfT2JqZWN0KiBwQ29udGVudHNPYmogPSBwUGFnZS0+R2V0U3RyZWFtKCJDb250ZW50cyIpOw0KLQlpZiAoIXBDb250ZW50c09iaikNCi0Jew0KLQkJcENvbnRlbnRzT2JqID0gcFBhZ2UtPkdldEFycmF5KCJDb250ZW50cyIpOw0KLQl9DQotCQ0KLQlpZiAoIXBDb250ZW50c09iaikNCi0Jew0KLQkJLy9DcmVhdGUgYSBuZXcgY29udGVudHMgZGljdGlvbmFyeQ0KLQkJaWYgKCFrZXkuSXNFbXB0eSgpKQ0KLQkJew0KLQkJCUNQREZfU3RyZWFtKiBwTmV3Q29udGVudHMgPSBGWF9ORVcgQ1BERl9TdHJlYW0oTlVMTCwgMCwgRlhfTkVXIENQREZfRGljdGlvbmFyeSk7DQotCQkJaWYgKCFwTmV3Q29udGVudHMpcmV0dXJuOw0KLQkJCXBQYWdlLT5TZXRBdFJlZmVyZW5jZSgiQ29udGVudHMiLCBwRG9jdW1lbnQsIHBEb2N1bWVudC0+QWRkSW5kaXJlY3RPYmplY3QocE5ld0NvbnRlbnRzKSk7DQotCQkJDQotCQkJQ0ZYX0J5dGVTdHJpbmcgc1N0cmVhbTsNCi0JCQlzU3RyZWFtLkZvcm1hdCgicSAxIDAgMCAxIDAgMCBjbSAvJXMgRG8gUSIsIChGWF9MUENTVFIpa2V5KTsNCi0JCQlwTmV3Q29udGVudHMtPlNldERhdGEoKEZYX0xQQ0JZVEUpc1N0cmVhbSwgc1N0cmVhbS5HZXRMZW5ndGgoKSwgRkFMU0UsIEZBTFNFKTsNCi0JCX0NCi0JCXJldHVybjsNCi0JfQ0KLQ0KLQlpbnQgaVR5cGUgPSBwQ29udGVudHNPYmotPkdldFR5cGUoKTsNCi0JQ1BERl9BcnJheSogcENvbnRlbnRzQXJyYXkgPSBOVUxMOw0KLQkNCi0Jc3dpdGNoKGlUeXBlKQ0KLQl7DQotCWNhc2UgUERGT0JKX1NUUkVBTToNCi0JCXsNCi0JCQlwQ29udGVudHNBcnJheSA9IEZYX05FVyBDUERGX0FycmF5Ow0KLQkJCUNQREZfU3RyZWFtKiBwQ29udGVudHMgPSAoQ1BERl9TdHJlYW0qKXBDb250ZW50c09iajsNCi0JCQlGWF9EV09SRCBkd09iak51bSA9IHBEb2N1bWVudC0+QWRkSW5kaXJlY3RPYmplY3QocENvbnRlbnRzKTsNCi0JCQlDUERGX1N0cmVhbUFjYyBhY2M7DQotCQkJYWNjLkxvYWRBbGxEYXRhKHBDb250ZW50cyk7DQotCQkJQ0ZYX0J5dGVTdHJpbmcgc1N0cmVhbSA9ICJxXG4iOw0KLQkJCUNGWF9CeXRlU3RyaW5nIHNCb2R5ID0gQ0ZYX0J5dGVTdHJpbmcoKEZYX0xQQ1NUUilhY2MuR2V0RGF0YSgpLCBhY2MuR2V0U2l6ZSgpKTsNCi0JCQlzU3RyZWFtID0gc1N0cmVhbSArIHNCb2R5ICsgIlxuUSI7DQotCQkJcENvbnRlbnRzLT5TZXREYXRhKChGWF9MUENCWVRFKXNTdHJlYW0sIHNTdHJlYW0uR2V0TGVuZ3RoKCksIEZBTFNFLCBGQUxTRSk7DQotCQkJcENvbnRlbnRzQXJyYXktPkFkZFJlZmVyZW5jZShwRG9jdW1lbnQsIGR3T2JqTnVtKTsNCi0JCQlicmVhazsNCi0JCX0NCi0JCQ0KLQljYXNlIFBERk9CSl9BUlJBWToNCi0JCXsNCi0JCQlwQ29udGVudHNBcnJheSA9IChDUERGX0FycmF5KilwQ29udGVudHNPYmo7DQotCQkJYnJlYWs7DQotCQl9DQotCWRlZmF1bHQ6DQotCQlicmVhazsNCi0JfQkNCi0JDQotCWlmICghcENvbnRlbnRzQXJyYXkpcmV0dXJuOw0KLQkNCi0JRlhfRFdPUkQgZHdPYmpOdW0gPSBwRG9jdW1lbnQtPkFkZEluZGlyZWN0T2JqZWN0KHBDb250ZW50c0FycmF5KTsNCi0JcFBhZ2UtPlNldEF0UmVmZXJlbmNlKCJDb250ZW50cyIsIHBEb2N1bWVudCwgZHdPYmpOdW0pOw0KLQkNCi0JaWYgKCFrZXkuSXNFbXB0eSgpKQ0KLQl7DQotCQlDUERGX1N0cmVhbSogcE5ld0NvbnRlbnRzID0gRlhfTkVXIENQREZfU3RyZWFtKE5VTEwsIDAsIEZYX05FVyBDUERGX0RpY3Rpb25hcnkpOw0KLQkJZHdPYmpOdW0gPSBwRG9jdW1lbnQtPkFkZEluZGlyZWN0T2JqZWN0KHBOZXdDb250ZW50cyk7DQotCQlwQ29udGVudHNBcnJheS0+QWRkUmVmZXJlbmNlKHBEb2N1bWVudCwgZHdPYmpOdW0pOw0KLQkJDQotCQlDRlhfQnl0ZVN0cmluZyBzU3RyZWFtOw0KLQkJc1N0cmVhbS5Gb3JtYXQoInEgMSAwIDAgMSAwIDAgY20gLyVzIERvIFEiLCAoRlhfTFBDU1RSKWtleSk7DQotCQlwTmV3Q29udGVudHMtPlNldERhdGEoKEZYX0xQQ0JZVEUpc1N0cmVhbSwgc1N0cmVhbS5HZXRMZW5ndGgoKSwgRkFMU0UsIEZBTFNFKTsNCi0JfQ0KLX0NCi0gDQotQ0ZYX0FmZmluZU1hdHJpeCBHZXRNYXRyaXgoQ1BERl9SZWN0IHJjQW5ub3QsIENQREZfUmVjdCByY1N0cmVhbSwgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXgpDQotew0KLQlpZihyY1N0cmVhbS5Jc0VtcHR5KCkpDQotCQlyZXR1cm4gQ0ZYX0FmZmluZU1hdHJpeCgpOw0KLQkNCi0JbWF0cml4LlRyYW5zZm9ybVJlY3QocmNTdHJlYW0pOw0KLQlyY1N0cmVhbS5Ob3JtYWxpemUoKTsNCi0JDQotCUZYX0ZMT0FUIGEgPSByY0Fubm90LldpZHRoKCkvcmNTdHJlYW0uV2lkdGgoKTsNCi0JRlhfRkxPQVQgZCA9IHJjQW5ub3QuSGVpZ2h0KCkvcmNTdHJlYW0uSGVpZ2h0KCk7DQotCQ0KLQlGWF9GTE9BVCBlID0gcmNBbm5vdC5sZWZ0IC0gcmNTdHJlYW0ubGVmdCAqIGE7DQotCUZYX0ZMT0FUIGYgPSByY0Fubm90LmJvdHRvbSAtIHJjU3RyZWFtLmJvdHRvbSAqIGQ7DQotCXJldHVybiBDRlhfQWZmaW5lTWF0cml4KGEsIDAsIDAsIGQsIGUsIGYpOw0KLX0NCi0NCi12b2lkIEdldE9mZnNldChGWF9GTE9BVCYgZmEsIEZYX0ZMT0FUJiBmZCwgRlhfRkxPQVQmIGZlLCBGWF9GTE9BVCYgZmYsIENQREZfUmVjdCByY0Fubm90LCBDUERGX1JlY3QgcmNTdHJlYW0sIENGWF9BZmZpbmVNYXRyaXggbWF0cml4KQ0KLXsNCi0JRlhfRkxPQVQgZlN0cmVhbVdpZHRoID0gMC4wZjsNCi0JRlhfRkxPQVQgZlN0cmVhbUhlaWdodCA9IDAuMGY7DQotDQotDQotCQ0KLQlpZiAobWF0cml4LmEgIT0gMCAmJiBtYXRyaXguZCAhPSAwKQ0KLQl7DQotCQlmU3RyZWFtV2lkdGggPSByY1N0cmVhbS5yaWdodCAtIHJjU3RyZWFtLmxlZnQ7DQotCQlmU3RyZWFtSGVpZ2h0ID0gcmNTdHJlYW0udG9wIC0gcmNTdHJlYW0uYm90dG9tOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJZlN0cmVhbVdpZHRoID0gcmNTdHJlYW0udG9wIC0gcmNTdHJlYW0uYm90dG9tOw0KLQkJZlN0cmVhbUhlaWdodCA9IHJjU3RyZWFtLnJpZ2h0IC0gcmNTdHJlYW0ubGVmdDsNCi0JfQ0KLQkNCi0JRlhfRkxPQVQgeDEgPSBtYXRyaXguYSAqIHJjU3RyZWFtLmxlZnQgKyBtYXRyaXguYyAqIHJjU3RyZWFtLmJvdHRvbSArIG1hdHJpeC5lOw0KLQlGWF9GTE9BVCB5MSA9IG1hdHJpeC5iICogcmNTdHJlYW0ubGVmdCArIG1hdHJpeC5kICogcmNTdHJlYW0uYm90dG9tICsgbWF0cml4LmY7DQotCUZYX0ZMT0FUIHgyID0gbWF0cml4LmEgKiByY1N0cmVhbS5sZWZ0ICsgbWF0cml4LmMgKiByY1N0cmVhbS50b3AgKyBtYXRyaXguZTsNCi0JRlhfRkxPQVQgeTIgPSBtYXRyaXguYiAqIHJjU3RyZWFtLmxlZnQgKyBtYXRyaXguZCAqIHJjU3RyZWFtLnRvcCArIG1hdHJpeC5mOw0KLQlGWF9GTE9BVCB4MyA9IG1hdHJpeC5hICogcmNTdHJlYW0ucmlnaHQgKyBtYXRyaXguYyAqIHJjU3RyZWFtLmJvdHRvbSArIG1hdHJpeC5lOw0KLQlGWF9GTE9BVCB5MyA9IG1hdHJpeC5iICogcmNTdHJlYW0ucmlnaHQgKyBtYXRyaXguZCAqIHJjU3RyZWFtLmJvdHRvbSArIG1hdHJpeC5mOw0KLQlGWF9GTE9BVCB4NCA9IG1hdHJpeC5hICogcmNTdHJlYW0ucmlnaHQgKyBtYXRyaXguYyAqIHJjU3RyZWFtLnRvcCArIG1hdHJpeC5lOw0KLQlGWF9GTE9BVCB5NCA9IG1hdHJpeC5iICogcmNTdHJlYW0ucmlnaHQgKyBtYXRyaXguZCAqIHJjU3RyZWFtLnRvcCArIG1hdHJpeC5mOw0KLQkNCi0JRlhfRkxPQVQgbGVmdCA9IEZYX01JTihGWF9NSU4oeDEsIHgyKSwgRlhfTUlOKHgzLCB4NCkpOw0KLQlGWF9GTE9BVCBib3R0b20gPSBGWF9NSU4oRlhfTUlOKHkxLCB5MiksIEZYX01JTih5MywgeTQpKTsNCi0JDQotCWZhID0gKHJjQW5ub3QucmlnaHQgLSByY0Fubm90LmxlZnQpL2ZTdHJlYW1XaWR0aDsNCi0JZmQgPSAocmNBbm5vdC50b3AgLSByY0Fubm90LmJvdHRvbSkvZlN0cmVhbUhlaWdodDsNCi0JZmUgPSByY0Fubm90LmxlZnQgLSBsZWZ0ICogZmE7DQotCWZmID0gcmNBbm5vdC5ib3R0b20gLSBib3R0b20gKiBmZDsNCi19DQotDQotDQotRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZQYWdlX0ZsYXR0ZW4oIEZQREZfUEFHRSBwYWdlLCBpbnQgbkZsYWcpDQotew0KLQlpZiAoIXBhZ2UpDQotCXsNCi0JCXJldHVybiBGTEFUVEVOX0ZBSUw7DQotCX0NCi0NCi0JQ1BERl9QYWdlICogcFBhZ2UgPSAoQ1BERl9QYWdlKikoIHBhZ2UgKTsNCi0JQ1BERl9Eb2N1bWVudCAqIHBEb2N1bWVudCA9IHBQYWdlLT5tX3BEb2N1bWVudDsNCi0JQ1BERl9EaWN0aW9uYXJ5ICogcFBhZ2VEaWN0ID0gcFBhZ2UtPm1fcEZvcm1EaWN0Ow0KLQkNCi0JaWYgKCAhcERvY3VtZW50IHx8ICFwUGFnZURpY3QgKQ0KLQl7DQotCQlyZXR1cm4gRkxBVFRFTl9GQUlMOw0KLQl9DQotDQotCUNQREZfT2JqZWN0QXJyYXkgT2JqZWN0QXJyYXk7DQotCUNQREZfUmVjdEFycmF5ICBSZWN0QXJyYXk7DQotDQotCWludCBpUmV0ID0gRkxBVFRFTl9GQUlMOw0KLQlpUmV0ID0gUGFyc2VyQW5ub3RzKCBwRG9jdW1lbnQsIHBQYWdlRGljdCwgJlJlY3RBcnJheSwgJk9iamVjdEFycmF5LCBuRmxhZyk7DQotCWlmIChpUmV0ID09IEZMQVRURU5fTk9USU5HVE9ETykNCi0Jew0KLQkJcmV0dXJuIEZMQVRURU5fTk9USU5HVE9ETzsNCi0JfWVsc2UgaWYgKGlSZXQgPT0gRkxBVFRFTl9GQUlMKQ0KLQl7DQotCQlyZXR1cm4gRkxBVFRFTl9GQUlMOw0KLQl9DQotCQ0KLQlDUERGX1JlY3QgcmNPcmlnaW5hbENCOw0KLQlDUERGX1JlY3QgcmNNZXJnZXIgPSBDYWxjdWxhdGVSZWN0KCAmUmVjdEFycmF5ICk7DQotCUNQREZfUmVjdCByY09yaWdpbmFsTUIgPSBwUGFnZURpY3QtPkdldFJlY3QoIk1lZGlhQm94Iik7DQotDQotCWlmIChwUGFnZURpY3QtPktleUV4aXN0KCJDcm9wQm94IikpDQotCQlyY09yaWdpbmFsTUIgPSBwUGFnZURpY3QtPkdldFJlY3QoIkNyb3BCb3giKTsNCi0JDQotCWlmIChyY09yaWdpbmFsTUIuSXNFbXB0eSgpKSAJDQotCXsNCi0JCXJjT3JpZ2luYWxNQiA9IENQREZfUmVjdCgwLjBmLCAwLjBmLCA2MTIuMGYsIDc5Mi4wZik7DQotCX0NCi0JDQotCXJjTWVyZ2VyLmxlZnQgPSByY01lcmdlci5sZWZ0IDwgcmNPcmlnaW5hbE1CLmxlZnQ/IHJjT3JpZ2luYWxNQi5sZWZ0IDogcmNNZXJnZXIubGVmdDsNCi0JcmNNZXJnZXIucmlnaHQgPSByY01lcmdlci5yaWdodCA+IHJjT3JpZ2luYWxNQi5yaWdodD8gcmNPcmlnaW5hbE1CLnJpZ2h0IDogcmNNZXJnZXIucmlnaHQ7DQotCXJjTWVyZ2VyLnRvcCA9IHJjTWVyZ2VyLnRvcCA+IHJjT3JpZ2luYWxNQi50b3A/IHJjT3JpZ2luYWxNQi50b3AgOiByY01lcmdlci50b3A7DQotCXJjTWVyZ2VyLmJvdHRvbSA9IHJjTWVyZ2VyLmJvdHRvbSA8IHJjT3JpZ2luYWxNQi5ib3R0b20/IHJjT3JpZ2luYWxNQi5ib3R0b20gOiByY01lcmdlci5ib3R0b207DQotCQ0KLQlpZiAocFBhZ2VEaWN0LT5LZXlFeGlzdCgiQXJ0Qm94IikpDQotCQlyY09yaWdpbmFsQ0IgPSBwUGFnZURpY3QtPkdldFJlY3QoIkFydEJveCIpOw0KLQllbHNlDQotCQlyY09yaWdpbmFsQ0IgPSByY09yaWdpbmFsTUI7DQotDQotCWlmICghcmNPcmlnaW5hbE1CLklzRW1wdHkoKSkNCi0Jew0KLQkJQ1BERl9BcnJheSogcE1lZGlhQm94ID0gRlhfTkVXIENQREZfQXJyYXkoKTsJDQotDQotCQlwTWVkaWFCb3gtPkFkZChGWF9ORVcgQ1BERl9OdW1iZXIocmNPcmlnaW5hbE1CLmxlZnQpKTsNCi0JCXBNZWRpYUJveC0+QWRkKEZYX05FVyBDUERGX051bWJlcihyY09yaWdpbmFsTUIuYm90dG9tKSk7DQotCQlwTWVkaWFCb3gtPkFkZChGWF9ORVcgQ1BERl9OdW1iZXIocmNPcmlnaW5hbE1CLnJpZ2h0KSk7DQotCQlwTWVkaWFCb3gtPkFkZChGWF9ORVcgQ1BERl9OdW1iZXIocmNPcmlnaW5hbE1CLnRvcCkpOw0KLQ0KLQkJcFBhZ2VEaWN0LT5TZXRBdCgiTWVkaWFCb3giLHBNZWRpYUJveCk7DQotCX0NCi0JDQotCWlmICghcmNPcmlnaW5hbENCLklzRW1wdHkoKSkNCi0Jew0KLQkJQ1BERl9BcnJheSogcENyb3BCb3ggPSBGWF9ORVcgQ1BERl9BcnJheSgpOw0KLQkJcENyb3BCb3gtPkFkZChGWF9ORVcgQ1BERl9OdW1iZXIocmNPcmlnaW5hbENCLmxlZnQpKTsNCi0JCXBDcm9wQm94LT5BZGQoRlhfTkVXIENQREZfTnVtYmVyKHJjT3JpZ2luYWxDQi5ib3R0b20pKTsNCi0JCXBDcm9wQm94LT5BZGQoRlhfTkVXIENQREZfTnVtYmVyKHJjT3JpZ2luYWxDQi5yaWdodCkpOw0KLQkJcENyb3BCb3gtPkFkZChGWF9ORVcgQ1BERl9OdW1iZXIocmNPcmlnaW5hbENCLnRvcCkpOw0KLQkJcFBhZ2VEaWN0LT5TZXRBdCgiQXJ0Qm94IiwgcENyb3BCb3gpOw0KLQl9DQotDQotCUNQREZfRGljdGlvbmFyeSogcFJlcyA9IE5VTEw7DQotCXBSZXMgPSBwUGFnZURpY3QtPkdldERpY3QoIlJlc291cmNlcyIpOw0KLQlpZiAoIXBSZXMpDQotCXsNCi0JCXBSZXMgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5Ow0KLQkJcFBhZ2VEaWN0LT5TZXRBdCggIlJlc291cmNlcyIsIHBSZXMgKTsNCi0JfQ0KLQ0KLQlDUERGX1N0cmVhbSogcE5ld1hPYmplY3QgPSBGWF9ORVcgQ1BERl9TdHJlYW0oTlVMTCwgMCwgRlhfTkVXIENQREZfRGljdGlvbmFyeSk7DQotCUZYX0RXT1JEIGR3T2JqTnVtID0gcERvY3VtZW50LT5BZGRJbmRpcmVjdE9iamVjdChwTmV3WE9iamVjdCk7DQotCUNQREZfRGljdGlvbmFyeSogcFBhZ2VYT2JqZWN0ID0gcFJlcy0+R2V0RGljdCgiWE9iamVjdCIpOw0KLQlpZiAoIXBQYWdlWE9iamVjdCkNCi0Jew0KLQkJcFBhZ2VYT2JqZWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsNCi0JCXBSZXMtPlNldEF0KCJYT2JqZWN0IiwgcFBhZ2VYT2JqZWN0KTsNCi0JfQ0KLQ0KLQlDRlhfQnl0ZVN0cmluZyBrZXkgPSAiIjsNCi0JaW50IG5TdHJlYW1zID0gT2JqZWN0QXJyYXkuR2V0U2l6ZSgpOw0KLQ0KLQlpZiAoblN0cmVhbXMgPiAwKQ0KLQl7DQotCQlmb3IgKGludCBpS2V5ID0gMDsgLyppS2V5IDwgMTAwKi87IGlLZXkrKykNCi0JCXsNCi0JCQljaGFyIHNFeHRlbmRbNV0gPSB7MH07DQotCQkJRlhTWVNfaXRvYShpS2V5LCBzRXh0ZW5kLCAxMCk7DQotCQkJa2V5ID0gQ0ZYX0J5dGVTdHJpbmcoIkZGVCIpICsgQ0ZYX0J5dGVTdHJpbmcoc0V4dGVuZCk7DQotDQotCQkJaWYgKCFwUGFnZVhPYmplY3QtPktleUV4aXN0KGtleSkpDQotCQkJCWJyZWFrOw0KLQkJfQ0KLQl9DQotDQotCVNldFBhZ2VDb250ZW50cyhrZXksIHBQYWdlRGljdCwgcERvY3VtZW50KTsNCi0NCi0JQ1BERl9EaWN0aW9uYXJ5KiBwTmV3WE9SZXMgPSBOVUxMOw0KLQ0KLQlpZiAoIWtleS5Jc0VtcHR5KCkpDQotCXsNCi0JCXBQYWdlWE9iamVjdC0+U2V0QXRSZWZlcmVuY2Uoa2V5LCBwRG9jdW1lbnQsIGR3T2JqTnVtKTsNCi0JCUNQREZfRGljdGlvbmFyeSogcE5ld09YYmplY3REaWMgPSBwTmV3WE9iamVjdC0+R2V0RGljdCgpOw0KLQkJcE5ld1hPUmVzID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsNCi0JCXBOZXdPWGJqZWN0RGljLT5TZXRBdCgiUmVzb3VyY2VzIiwgcE5ld1hPUmVzKTsNCi0JCXBOZXdPWGJqZWN0RGljLT5TZXRBdE5hbWUoIlR5cGUiLCAiWE9iamVjdCIpOw0KLQkJcE5ld09YYmplY3REaWMtPlNldEF0TmFtZSgiU3VidHlwZSIsICJGb3JtIik7DQotCQlwTmV3T1hiamVjdERpYy0+U2V0QXRJbnRlZ2VyKCJGb3JtVHlwZSIsIDEpOw0KLQkJcE5ld09YYmplY3REaWMtPlNldEF0TmFtZSgiTmFtZSIsICJGUk0iKTsNCi0JCUNQREZfUmVjdCByY0JCb3ggPSBwUGFnZURpY3QtPkdldFJlY3QoIkFydEJveCIpOyANCi0JCXBOZXdPWGJqZWN0RGljLT5TZXRBdFJlY3QoIkJCb3giLCByY0JCb3gpOw0KLQl9DQotCQ0KLQlmb3IgKGludCBpID0gMDsgaSA8IG5TdHJlYW1zOyBpKyspDQotCXsNCi0JCUNQREZfRGljdGlvbmFyeSogcEFubm90RGljID0gT2JqZWN0QXJyYXkuR2V0QXQoaSk7DQotCQlpZiAoIXBBbm5vdERpYyljb250aW51ZTsNCi0NCi0JCUNQREZfUmVjdCByY0Fubm90ID0gcEFubm90RGljLT5HZXRSZWN0KCJSZWN0Iik7DQotCQlyY0Fubm90Lk5vcm1hbGl6ZSgpOw0KLQ0KLQkJQ0ZYX0J5dGVTdHJpbmcgc0Fubm90U3RhdGUgPSBwQW5ub3REaWMtPkdldFN0cmluZygiQVMiKTsNCi0JCUNQREZfRGljdGlvbmFyeSogcEFubm90QVAgPSBwQW5ub3REaWMtPkdldERpY3QoIkFQIik7DQotCQlpZiAoIXBBbm5vdEFQKWNvbnRpbnVlOw0KLQ0KLQkJQ1BERl9TdHJlYW0qIHBBUFN0cmVhbSA9IHBBbm5vdEFQLT5HZXRTdHJlYW0oIk4iKTsNCi0JCWlmICghcEFQU3RyZWFtKQ0KLQkJew0KLQkJCUNQREZfRGljdGlvbmFyeSogcEFQRGljID0gcEFubm90QVAtPkdldERpY3QoIk4iKTsNCi0JCQlpZiAoIXBBUERpYyljb250aW51ZTsNCi0NCi0JCQlpZiAoIXNBbm5vdFN0YXRlLklzRW1wdHkoKSkNCi0JCQl7DQotCQkJCXBBUFN0cmVhbSA9IHBBUERpYy0+R2V0U3RyZWFtKHNBbm5vdFN0YXRlKTsNCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJRlhfUE9TSVRJT04gcG9zID0gcEFQRGljLT5HZXRTdGFydFBvcygpOw0KLQkJCQlpZiAocG9zKQ0KLQkJCQl7DQotCQkJCQlDRlhfQnl0ZVN0cmluZyBzS2V5Ow0KLQkJCQkJQ1BERl9PYmplY3QqIHBGaXJzdE9iaiA9IHBBUERpYy0+R2V0TmV4dEVsZW1lbnQocG9zLCBzS2V5KTsNCi0JCQkJCWlmIChwRmlyc3RPYmopDQotCQkJCQl7DQotCQkJCQkJaWYgKHBGaXJzdE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9SRUZFUkVOQ0UpDQotCQkJCQkJCXBGaXJzdE9iaiA9IHBGaXJzdE9iai0+R2V0RGlyZWN0KCk7DQotCQkJCQkJDQotCQkJCQkJaWYgKHBGaXJzdE9iai0+R2V0VHlwZSgpICE9IFBERk9CSl9TVFJFQU0pDQotCQkJCQkJCWNvbnRpbnVlOw0KLQ0KLQkJCQkJCXBBUFN0cmVhbSA9IChDUERGX1N0cmVhbSopcEZpcnN0T2JqOw0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQ0KLQkJaWYgKCFwQVBTdHJlYW0pY29udGludWU7DQotDQotCQlDUERGX0RpY3Rpb25hcnkqIHBBUERpYyA9IHBBUFN0cmVhbS0+R2V0RGljdCgpOw0KLQkJQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXggPSBwQVBEaWMtPkdldE1hdHJpeCgiTWF0cml4Iik7DQotDQotCQlDUERGX1JlY3QgcmNTdHJlYW07DQotCQlpZiAocEFQRGljLT5LZXlFeGlzdCgiUmVjdCIpKQ0KLQkJCXJjU3RyZWFtID0gcEFQRGljLT5HZXRSZWN0KCJSZWN0Iik7DQotCQllbHNlIGlmIChwQVBEaWMtPktleUV4aXN0KCJCQm94IikpDQotCQkJcmNTdHJlYW0gPSBwQVBEaWMtPkdldFJlY3QoIkJCb3giKTsNCi0NCi0JCWlmIChyY1N0cmVhbS5Jc0VtcHR5KCkpY29udGludWU7DQotDQotCQlDUERGX09iamVjdCogcE9iaiA9IHBBUFN0cmVhbTsNCi0NCi0JCWlmIChwT2JqKQ0KLQkJewkJDQotCQkJQ1BERl9EaWN0aW9uYXJ5KiBwT2JqRGljID0gcE9iai0+R2V0RGljdCgpOw0KLQkJCWlmIChwT2JqRGljKQ0KLQkJCXsNCi0JCQkJcE9iakRpYy0+U2V0QXROYW1lKCJUeXBlIiwgIlhPYmplY3QiKTsNCi0JCQkJcE9iakRpYy0+U2V0QXROYW1lKCJTdWJ0eXBlIiwgIkZvcm0iKTsNCi0JCQl9DQotCQl9DQotDQotCQlDUERGX0RpY3Rpb25hcnkqIHBYT2JqZWN0ID0gcE5ld1hPUmVzLT5HZXREaWN0KCJYT2JqZWN0Iik7DQotCQlpZiAoIXBYT2JqZWN0KQ0KLQkJew0KLQkJCXBYT2JqZWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsNCi0JCQlwTmV3WE9SZXMtPlNldEF0KCJYT2JqZWN0IiwgcFhPYmplY3QpOw0KLQkJfQ0KLQ0KLQkJQ0ZYX0J5dGVTdHJpbmcgc0Zvcm1OYW1lOw0KLQkJc0Zvcm1OYW1lLkZvcm1hdCgiRiVkIiwgaSk7DQotCQlGWF9EV09SRCBkd09iak51bSA9IHBEb2N1bWVudC0+QWRkSW5kaXJlY3RPYmplY3QocE9iaik7DQotCQlwWE9iamVjdC0+U2V0QXRSZWZlcmVuY2Uoc0Zvcm1OYW1lLCBwRG9jdW1lbnQsIGR3T2JqTnVtKTsNCi0NCi0JCUNQREZfU3RyZWFtQWNjIGFjYzsNCi0JCWFjYy5Mb2FkQWxsRGF0YShwTmV3WE9iamVjdCk7DQotDQotCQlGWF9MUENCWVRFIHBEYXRhID0gYWNjLkdldERhdGEoKTsNCi0JCUNGWF9CeXRlU3RyaW5nIHNTdHJlYW0ocERhdGEsIGFjYy5HZXRTaXplKCkpOw0KLQkJQ0ZYX0J5dGVTdHJpbmcgc1RlbXA7DQotDQotCQlpZiAobWF0cml4LklzSWRlbnRpdHkoKSkNCi0JCXsNCi0JCQltYXRyaXguYSA9IDEuMGY7DQotCQkJbWF0cml4LmIgPSAwLjBmOw0KLQkJCW1hdHJpeC5jID0gMC4wZjsNCi0JCQltYXRyaXguZCA9IDEuMGY7DQotCQkJbWF0cml4LmUgPSAwLjBmOw0KLQkJCW1hdHJpeC5mID0gMC4wZjsNCi0JCX0NCi0NCi0JCUNGWF9BZmZpbmVNYXRyaXggbSA9IEdldE1hdHJpeChyY0Fubm90LCByY1N0cmVhbSwgbWF0cml4KTsNCi0JCXNUZW1wLkZvcm1hdCgicSAlZiAwIDAgJWYgJWYgJWYgY20gLyVzIERvIFFcbiIsIG0uYSwgbS5kLCBtLmUsIG0uZiwgKEZYX0xQQ1NUUilzRm9ybU5hbWUpOw0KLQkJc1N0cmVhbSArPSBzVGVtcDsNCi0NCi0JCXBOZXdYT2JqZWN0LT5TZXREYXRhKChGWF9MUENCWVRFKXNTdHJlYW0sIHNTdHJlYW0uR2V0TGVuZ3RoKCksIEZBTFNFLCBGQUxTRSk7DQotCX0NCi0JcFBhZ2VEaWN0LT5SZW1vdmVBdCggIkFubm90cyIgKTsNCi0NCi0JT2JqZWN0QXJyYXkuUmVtb3ZlQWxsKCk7DQotCVJlY3RBcnJheS5SZW1vdmVBbGwoKTsNCi0NCi0JcmV0dXJuIEZMQVRURU5fU1VDQ0VTUzsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19kZWZpbmUuaCIKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2ZwZGZfZmxhdHRlbi5oIgorCit0eXBlZGVmIENGWF9BcnJheVRlbXBsYXRlPENQREZfRGljdGlvbmFyeSo+IENQREZfT2JqZWN0QXJyYXk7Cit0eXBlZGVmIENGWF9BcnJheVRlbXBsYXRlPENQREZfUmVjdD4gQ1BERl9SZWN0QXJyYXk7CisKK2VudW0gRlBERl9UWVBFIHsgTUFYLCBNSU4gfTsKK2VudW0gRlBERl9WQUxVRSB7IFRPUCwgTEVGVCwgUklHSFQsIEJPVFRPTSB9OworCitGWF9CT09MIElzVmFsaWFibGVSZWN0KENQREZfUmVjdCByZWN0LCBDUERGX1JlY3QgcmNQYWdlKQoreworCWlmICggcmVjdC5sZWZ0IC0gcmVjdC5yaWdodCA+IDAuMDAwMDAxZiB8fCAKKwkJIHJlY3QuYm90dG9tIC0gcmVjdC50b3AgPiAwLjAwMDAwMWYpCisJCXJldHVybiBGQUxTRTsKKwkKKwlpZiAocmVjdC5sZWZ0ID09IDAuMGYgJiYKKwkJcmVjdC50b3AgPT0gMC4wZiAmJgorCQlyZWN0LnJpZ2h0ID09IDAuMGYgJiYKKwkJcmVjdC5ib3R0b20gPT0gMC4wZikKKwkJcmV0dXJuIEZBTFNFOworCQorCWlmICghcmNQYWdlLklzRW1wdHkoKSkKKwl7CisJCWlmIChyZWN0LmxlZnQgLSByY1BhZ2UubGVmdCA8IC0xMC4wMDAwMDFmIHx8CisJCQlyZWN0LnJpZ2h0IC0gcmNQYWdlLnJpZ2h0ID4gMTAuMDAwMDAxZiB8fAorCQkJcmVjdC50b3AgLSByY1BhZ2UudG9wID4gMTAuMDAwMDAxZiB8fAorCQkJcmVjdC5ib3R0b20gLSByY1BhZ2UuYm90dG9tIDwgLTEwLjAwMDAwMWYpCisJCQlyZXR1cm4gRkFMU0U7CisJfQorCQorCXJldHVybiBUUlVFOworfQorCisKK0ZYX0JPT0wgR2V0Q29udGVudHNSZWN0KCBDUERGX0RvY3VtZW50ICogcERvYywgQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCwgQ1BERl9SZWN0QXJyYXkgKiBwUmVjdEFycmF5ICkKK3sKKwlDUERGX1BhZ2UqIHBQREZQYWdlID0gRlhfTkVXIENQREZfUGFnZTsKKwlwUERGUGFnZS0+TG9hZCggcERvYywgcERpY3QsIEZBTFNFICk7CisJcFBERlBhZ2UtPlBhcnNlQ29udGVudCgpOworCisJRlhfUE9TSVRJT04gcG9zID0gcFBERlBhZ2UtPkdldEZpcnN0T2JqZWN0UG9zaXRpb24oKTsKKwkKKwl3aGlsZSAocG9zKQorCXsKKwkJQ1BERl9QYWdlT2JqZWN0KiBwUGFnZU9iamVjdCA9IHBQREZQYWdlLT5HZXROZXh0T2JqZWN0KHBvcyk7CisJCWlmICghcFBhZ2VPYmplY3QpY29udGludWU7CisJCQorCQlDUERGX1JlY3QgcmM7CisJCXJjLmxlZnQgPSBwUGFnZU9iamVjdC0+bV9MZWZ0OworCQlyYy5yaWdodCA9IHBQYWdlT2JqZWN0LT5tX1JpZ2h0OworCQlyYy5ib3R0b20gPSBwUGFnZU9iamVjdC0+bV9Cb3R0b207CisJCXJjLnRvcCA9IHBQYWdlT2JqZWN0LT5tX1RvcDsKKwkJCisJCWlmIChJc1ZhbGlhYmxlUmVjdChyYywgcERpY3QtPkdldFJlY3QoIk1lZGlhQm94IikpKQorCQl7CisJCQlwUmVjdEFycmF5LT5BZGQocmMpOworCQl9CisJfQorCQorCWRlbGV0ZSBwUERGUGFnZTsKKwlyZXR1cm4gVFJVRTsKK30KKworCit2b2lkIFBhcnNlclN0cmVhbSggQ1BERl9EaWN0aW9uYXJ5ICogcFBhZ2VEaWMsIENQREZfRGljdGlvbmFyeSogcFN0cmVhbSwgQ1BERl9SZWN0QXJyYXkgKiBwUmVjdEFycmF5LCBDUERGX09iamVjdEFycmF5ICogcE9iamVjdEFycmF5ICkKK3sKKwlpZiAoIXBTdHJlYW0pcmV0dXJuOworCUNQREZfUmVjdCByZWN0OworCWlmIChwU3RyZWFtLT5LZXlFeGlzdCgiUmVjdCIpKQorCQlyZWN0ID0gcFN0cmVhbS0+R2V0UmVjdCgiUmVjdCIpOworCWVsc2UgaWYgKHBTdHJlYW0tPktleUV4aXN0KCJCQm94IikpCisJCXJlY3QgPSBwU3RyZWFtLT5HZXRSZWN0KCJCQm94Iik7CisJCisJaWYgKElzVmFsaWFibGVSZWN0KHJlY3QsIHBQYWdlRGljLT5HZXRSZWN0KCJNZWRpYUJveCIpKSkKKwkJcFJlY3RBcnJheS0+QWRkKHJlY3QpOworCQorCXBPYmplY3RBcnJheS0+QWRkKHBTdHJlYW0pOworfQorCisKK2ludCBQYXJzZXJBbm5vdHMoIENQREZfRG9jdW1lbnQqIHBTb3VyY2VEb2MsIENQREZfRGljdGlvbmFyeSAqIHBQYWdlRGljLCBDUERGX1JlY3RBcnJheSAqIHBSZWN0QXJyYXksIENQREZfT2JqZWN0QXJyYXkgKiBwT2JqZWN0QXJyYXksIGludCBuVXNhZ2UpCit7CisJaWYgKCFwU291cmNlRG9jIHx8ICFwUGFnZURpYykgcmV0dXJuIEZMQVRURU5fRkFJTDsKKwkKKwlHZXRDb250ZW50c1JlY3QoIHBTb3VyY2VEb2MsIHBQYWdlRGljLCBwUmVjdEFycmF5ICk7CisJQ1BERl9BcnJheSogcEFubm90cyA9IHBQYWdlRGljLT5HZXRBcnJheSgiQW5ub3RzIik7CisJaWYgKHBBbm5vdHMpCisJeworCQlGWF9EV09SRCBkd1NpemUgPSBwQW5ub3RzLT5HZXRDb3VudCgpOworCQkKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCAoaW50KWR3U2l6ZTsgaSsrKQorCQl7CisJCQlDUERGX09iamVjdCogcE9iaiA9IHBBbm5vdHMtPkdldEVsZW1lbnRWYWx1ZShpKTsKKwkJCQorCQkJaWYgKCFwT2JqKWNvbnRpbnVlOworCQkJCisJCQlpZiAocE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKQorCQkJeworCQkJCUNQREZfRGljdGlvbmFyeSogcEFubm90RGljID0gKENQREZfRGljdGlvbmFyeSopcE9iajsKKwkJCQlDRlhfQnl0ZVN0cmluZyBzU3VidHlwZSA9IHBBbm5vdERpYy0+R2V0U3RyaW5nKCJTdWJ0eXBlIik7CisJCQkJaWYgKHNTdWJ0eXBlID09ICJQb3B1cCIpY29udGludWU7CisKKwkJCQlpbnQgbkFubm90RmxhZyA9IHBBbm5vdERpYy0+R2V0SW50ZWdlcigiRiIpOworCisJCQkJaWYobkFubm90RmxhZyAmIEFOTk9URkxBR19ISURERU4pIAorCQkJCQljb250aW51ZTsKKwkJCQlpZihuVXNhZ2UgPT0gRkxBVF9OT1JNQUxESVNQTEFZKQorCQkJCXsKKwkJCQkJaWYobkFubm90RmxhZyAmIEFOTk9URkxBR19JTlZJU0lCTEUpCisJCQkJCQljb250aW51ZTsKKwkJCQkJUGFyc2VyU3RyZWFtKCBwUGFnZURpYywgcEFubm90RGljLCBwUmVjdEFycmF5LCBwT2JqZWN0QXJyYXkgKTsJCQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlpZihuQW5ub3RGbGFnICYgQU5OT1RGTEFHX1BSSU5UKQorCQkJCQkJUGFyc2VyU3RyZWFtKCBwUGFnZURpYywgcEFubm90RGljLCBwUmVjdEFycmF5LCBwT2JqZWN0QXJyYXkgKTsKKwkJCQl9CQkJCisJCQl9CisJCX0KKwkJcmV0dXJuIEZMQVRURU5fU1VDQ0VTUzsKKwl9ZWxzZXsKKwkJcmV0dXJuIEZMQVRURU5fTk9USU5HVE9ETzsKKwl9Cit9CisKKworRlhfRkxPQVQgR2V0TWluTWF4VmFsdWUoIENQREZfUmVjdEFycmF5JiBhcnJheSwgRlBERl9UWVBFIHR5cGUsIEZQREZfVkFMVUUgdmFsdWUpCit7CisJaW50IG5SZWN0cyA9IGFycmF5LkdldFNpemUoKTsKKwlGWF9GTE9BVCBmUmV0ID0gMC4wZjsKKwkKKwlpZiAoblJlY3RzIDw9IDApcmV0dXJuIDAuMGY7CisJCisJRlhfRkxPQVQqIHBBcnJheSA9IG5ldyBGWF9GTE9BVFtuUmVjdHNdOworCXN3aXRjaCh2YWx1ZSkKKwl7CisJY2FzZSBMRUZUOgorCQl7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IG5SZWN0czsgaSsrKQorCQkJCXBBcnJheVtpXSA9IENQREZfUmVjdChhcnJheS5HZXRBdChpKSkubGVmdDsKKwkJCQorCQkJYnJlYWs7CisJCX0KKwljYXNlIFRPUDoKKwkJeworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuUmVjdHM7IGkrKykKKwkJCQlwQXJyYXlbaV0gPSBDUERGX1JlY3QoYXJyYXkuR2V0QXQoaSkpLnRvcDsKKwkJCQorCQkJYnJlYWs7CisJCX0KKwljYXNlIFJJR0hUOgorCQl7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IG5SZWN0czsgaSsrKQorCQkJCXBBcnJheVtpXSA9IENQREZfUmVjdChhcnJheS5HZXRBdChpKSkucmlnaHQ7CisJCQkKKwkJCWJyZWFrOworCQl9CisJY2FzZSBCT1RUT006CisJCXsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgblJlY3RzOyBpKyspCisJCQkJcEFycmF5W2ldID0gQ1BERl9SZWN0KGFycmF5LkdldEF0KGkpKS5ib3R0b207CisJCQkKKwkJCWJyZWFrOworCQl9CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCWZSZXQgPSBwQXJyYXlbMF07CisJaWYgKHR5cGUgPT0gTUFYKQorCXsKKwkJZm9yIChpbnQgaSA9IDE7IGkgPCBuUmVjdHM7IGkrKykKKwkJCWlmIChmUmV0IDw9IHBBcnJheVtpXSkKKwkJCQlmUmV0ID0gcEFycmF5W2ldOworCX0KKwllbHNlCisJeworCQlmb3IgKGludCBpID0gMTsgaSA8IG5SZWN0czsgaSsrKQorCQkJaWYgKGZSZXQgPj0gcEFycmF5W2ldKQorCQkJCWZSZXQgPSBwQXJyYXlbaV07CisJfQorCWRlbGV0ZVtdIHBBcnJheTsKKwlyZXR1cm4gZlJldDsKK30KKworQ1BERl9SZWN0IENhbGN1bGF0ZVJlY3QoIENQREZfUmVjdEFycmF5ICogcFJlY3RBcnJheSApCit7CisKKwlDUERGX1JlY3QgcmNSZXQ7CisJCisJcmNSZXQubGVmdCA9IEdldE1pbk1heFZhbHVlKCpwUmVjdEFycmF5LCBNSU4sIExFRlQpOworCXJjUmV0LnRvcCA9IEdldE1pbk1heFZhbHVlKCpwUmVjdEFycmF5LCBNQVgsIFRPUCk7CisJcmNSZXQucmlnaHQgPSBHZXRNaW5NYXhWYWx1ZSgqcFJlY3RBcnJheSwgTUFYLCBSSUdIVCk7CisJcmNSZXQuYm90dG9tID0gR2V0TWluTWF4VmFsdWUoKnBSZWN0QXJyYXksIE1JTiwgQk9UVE9NKTsKKwkKKwlyZXR1cm4gcmNSZXQ7Cit9CisKKwordm9pZCBTZXRQYWdlQ29udGVudHMoQ0ZYX0J5dGVTdHJpbmcga2V5LCBDUERGX0RpY3Rpb25hcnkqIHBQYWdlLCBDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQpCit7CisJQ1BERl9PYmplY3QqIHBDb250ZW50c09iaiA9IHBQYWdlLT5HZXRTdHJlYW0oIkNvbnRlbnRzIik7CisJaWYgKCFwQ29udGVudHNPYmopCisJeworCQlwQ29udGVudHNPYmogPSBwUGFnZS0+R2V0QXJyYXkoIkNvbnRlbnRzIik7CisJfQorCQorCWlmICghcENvbnRlbnRzT2JqKQorCXsKKwkJLy9DcmVhdGUgYSBuZXcgY29udGVudHMgZGljdGlvbmFyeQorCQlpZiAoIWtleS5Jc0VtcHR5KCkpCisJCXsKKwkJCUNQREZfU3RyZWFtKiBwTmV3Q29udGVudHMgPSBGWF9ORVcgQ1BERl9TdHJlYW0oTlVMTCwgMCwgRlhfTkVXIENQREZfRGljdGlvbmFyeSk7CisJCQlpZiAoIXBOZXdDb250ZW50cylyZXR1cm47CisJCQlwUGFnZS0+U2V0QXRSZWZlcmVuY2UoIkNvbnRlbnRzIiwgcERvY3VtZW50LCBwRG9jdW1lbnQtPkFkZEluZGlyZWN0T2JqZWN0KHBOZXdDb250ZW50cykpOworCQkJCisJCQlDRlhfQnl0ZVN0cmluZyBzU3RyZWFtOworCQkJc1N0cmVhbS5Gb3JtYXQoInEgMSAwIDAgMSAwIDAgY20gLyVzIERvIFEiLCAoRlhfTFBDU1RSKWtleSk7CisJCQlwTmV3Q29udGVudHMtPlNldERhdGEoKEZYX0xQQ0JZVEUpc1N0cmVhbSwgc1N0cmVhbS5HZXRMZW5ndGgoKSwgRkFMU0UsIEZBTFNFKTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJaW50IGlUeXBlID0gcENvbnRlbnRzT2JqLT5HZXRUeXBlKCk7CisJQ1BERl9BcnJheSogcENvbnRlbnRzQXJyYXkgPSBOVUxMOworCQorCXN3aXRjaChpVHlwZSkKKwl7CisJY2FzZSBQREZPQkpfU1RSRUFNOgorCQl7CisJCQlwQ29udGVudHNBcnJheSA9IEZYX05FVyBDUERGX0FycmF5OworCQkJQ1BERl9TdHJlYW0qIHBDb250ZW50cyA9IChDUERGX1N0cmVhbSopcENvbnRlbnRzT2JqOworCQkJRlhfRFdPUkQgZHdPYmpOdW0gPSBwRG9jdW1lbnQtPkFkZEluZGlyZWN0T2JqZWN0KHBDb250ZW50cyk7CisJCQlDUERGX1N0cmVhbUFjYyBhY2M7CisJCQlhY2MuTG9hZEFsbERhdGEocENvbnRlbnRzKTsKKwkJCUNGWF9CeXRlU3RyaW5nIHNTdHJlYW0gPSAicVxuIjsKKwkJCUNGWF9CeXRlU3RyaW5nIHNCb2R5ID0gQ0ZYX0J5dGVTdHJpbmcoKEZYX0xQQ1NUUilhY2MuR2V0RGF0YSgpLCBhY2MuR2V0U2l6ZSgpKTsKKwkJCXNTdHJlYW0gPSBzU3RyZWFtICsgc0JvZHkgKyAiXG5RIjsKKwkJCXBDb250ZW50cy0+U2V0RGF0YSgoRlhfTFBDQllURSlzU3RyZWFtLCBzU3RyZWFtLkdldExlbmd0aCgpLCBGQUxTRSwgRkFMU0UpOworCQkJcENvbnRlbnRzQXJyYXktPkFkZFJlZmVyZW5jZShwRG9jdW1lbnQsIGR3T2JqTnVtKTsKKwkJCWJyZWFrOworCQl9CisJCQorCWNhc2UgUERGT0JKX0FSUkFZOgorCQl7CisJCQlwQ29udGVudHNBcnJheSA9IChDUERGX0FycmF5KilwQ29udGVudHNPYmo7CisJCQlicmVhazsKKwkJfQorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0JCisJCisJaWYgKCFwQ29udGVudHNBcnJheSlyZXR1cm47CisJCisJRlhfRFdPUkQgZHdPYmpOdW0gPSBwRG9jdW1lbnQtPkFkZEluZGlyZWN0T2JqZWN0KHBDb250ZW50c0FycmF5KTsKKwlwUGFnZS0+U2V0QXRSZWZlcmVuY2UoIkNvbnRlbnRzIiwgcERvY3VtZW50LCBkd09iak51bSk7CisJCisJaWYgKCFrZXkuSXNFbXB0eSgpKQorCXsKKwkJQ1BERl9TdHJlYW0qIHBOZXdDb250ZW50cyA9IEZYX05FVyBDUERGX1N0cmVhbShOVUxMLCAwLCBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5KTsKKwkJZHdPYmpOdW0gPSBwRG9jdW1lbnQtPkFkZEluZGlyZWN0T2JqZWN0KHBOZXdDb250ZW50cyk7CisJCXBDb250ZW50c0FycmF5LT5BZGRSZWZlcmVuY2UocERvY3VtZW50LCBkd09iak51bSk7CisJCQorCQlDRlhfQnl0ZVN0cmluZyBzU3RyZWFtOworCQlzU3RyZWFtLkZvcm1hdCgicSAxIDAgMCAxIDAgMCBjbSAvJXMgRG8gUSIsIChGWF9MUENTVFIpa2V5KTsKKwkJcE5ld0NvbnRlbnRzLT5TZXREYXRhKChGWF9MUENCWVRFKXNTdHJlYW0sIHNTdHJlYW0uR2V0TGVuZ3RoKCksIEZBTFNFLCBGQUxTRSk7CisJfQorfQorIAorQ0ZYX0FmZmluZU1hdHJpeCBHZXRNYXRyaXgoQ1BERl9SZWN0IHJjQW5ub3QsIENQREZfUmVjdCByY1N0cmVhbSwgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXgpCit7CisJaWYocmNTdHJlYW0uSXNFbXB0eSgpKQorCQlyZXR1cm4gQ0ZYX0FmZmluZU1hdHJpeCgpOworCQorCW1hdHJpeC5UcmFuc2Zvcm1SZWN0KHJjU3RyZWFtKTsKKwlyY1N0cmVhbS5Ob3JtYWxpemUoKTsKKwkKKwlGWF9GTE9BVCBhID0gcmNBbm5vdC5XaWR0aCgpL3JjU3RyZWFtLldpZHRoKCk7CisJRlhfRkxPQVQgZCA9IHJjQW5ub3QuSGVpZ2h0KCkvcmNTdHJlYW0uSGVpZ2h0KCk7CisJCisJRlhfRkxPQVQgZSA9IHJjQW5ub3QubGVmdCAtIHJjU3RyZWFtLmxlZnQgKiBhOworCUZYX0ZMT0FUIGYgPSByY0Fubm90LmJvdHRvbSAtIHJjU3RyZWFtLmJvdHRvbSAqIGQ7CisJcmV0dXJuIENGWF9BZmZpbmVNYXRyaXgoYSwgMCwgMCwgZCwgZSwgZik7Cit9CisKK3ZvaWQgR2V0T2Zmc2V0KEZYX0ZMT0FUJiBmYSwgRlhfRkxPQVQmIGZkLCBGWF9GTE9BVCYgZmUsIEZYX0ZMT0FUJiBmZiwgQ1BERl9SZWN0IHJjQW5ub3QsIENQREZfUmVjdCByY1N0cmVhbSwgQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXgpCit7CisJRlhfRkxPQVQgZlN0cmVhbVdpZHRoID0gMC4wZjsKKwlGWF9GTE9BVCBmU3RyZWFtSGVpZ2h0ID0gMC4wZjsKKworCisJCisJaWYgKG1hdHJpeC5hICE9IDAgJiYgbWF0cml4LmQgIT0gMCkKKwl7CisJCWZTdHJlYW1XaWR0aCA9IHJjU3RyZWFtLnJpZ2h0IC0gcmNTdHJlYW0ubGVmdDsKKwkJZlN0cmVhbUhlaWdodCA9IHJjU3RyZWFtLnRvcCAtIHJjU3RyZWFtLmJvdHRvbTsKKwl9CisJZWxzZQorCXsKKwkJZlN0cmVhbVdpZHRoID0gcmNTdHJlYW0udG9wIC0gcmNTdHJlYW0uYm90dG9tOworCQlmU3RyZWFtSGVpZ2h0ID0gcmNTdHJlYW0ucmlnaHQgLSByY1N0cmVhbS5sZWZ0OworCX0KKwkKKwlGWF9GTE9BVCB4MSA9IG1hdHJpeC5hICogcmNTdHJlYW0ubGVmdCArIG1hdHJpeC5jICogcmNTdHJlYW0uYm90dG9tICsgbWF0cml4LmU7CisJRlhfRkxPQVQgeTEgPSBtYXRyaXguYiAqIHJjU3RyZWFtLmxlZnQgKyBtYXRyaXguZCAqIHJjU3RyZWFtLmJvdHRvbSArIG1hdHJpeC5mOworCUZYX0ZMT0FUIHgyID0gbWF0cml4LmEgKiByY1N0cmVhbS5sZWZ0ICsgbWF0cml4LmMgKiByY1N0cmVhbS50b3AgKyBtYXRyaXguZTsKKwlGWF9GTE9BVCB5MiA9IG1hdHJpeC5iICogcmNTdHJlYW0ubGVmdCArIG1hdHJpeC5kICogcmNTdHJlYW0udG9wICsgbWF0cml4LmY7CisJRlhfRkxPQVQgeDMgPSBtYXRyaXguYSAqIHJjU3RyZWFtLnJpZ2h0ICsgbWF0cml4LmMgKiByY1N0cmVhbS5ib3R0b20gKyBtYXRyaXguZTsKKwlGWF9GTE9BVCB5MyA9IG1hdHJpeC5iICogcmNTdHJlYW0ucmlnaHQgKyBtYXRyaXguZCAqIHJjU3RyZWFtLmJvdHRvbSArIG1hdHJpeC5mOworCUZYX0ZMT0FUIHg0ID0gbWF0cml4LmEgKiByY1N0cmVhbS5yaWdodCArIG1hdHJpeC5jICogcmNTdHJlYW0udG9wICsgbWF0cml4LmU7CisJRlhfRkxPQVQgeTQgPSBtYXRyaXguYiAqIHJjU3RyZWFtLnJpZ2h0ICsgbWF0cml4LmQgKiByY1N0cmVhbS50b3AgKyBtYXRyaXguZjsKKwkKKwlGWF9GTE9BVCBsZWZ0ID0gRlhfTUlOKEZYX01JTih4MSwgeDIpLCBGWF9NSU4oeDMsIHg0KSk7CisJRlhfRkxPQVQgYm90dG9tID0gRlhfTUlOKEZYX01JTih5MSwgeTIpLCBGWF9NSU4oeTMsIHk0KSk7CisJCisJZmEgPSAocmNBbm5vdC5yaWdodCAtIHJjQW5ub3QubGVmdCkvZlN0cmVhbVdpZHRoOworCWZkID0gKHJjQW5ub3QudG9wIC0gcmNBbm5vdC5ib3R0b20pL2ZTdHJlYW1IZWlnaHQ7CisJZmUgPSByY0Fubm90LmxlZnQgLSBsZWZ0ICogZmE7CisJZmYgPSByY0Fubm90LmJvdHRvbSAtIGJvdHRvbSAqIGZkOworfQorCisKK0RMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGUGFnZV9GbGF0dGVuKCBGUERGX1BBR0UgcGFnZSwgaW50IG5GbGFnKQoreworCWlmICghcGFnZSkKKwl7CisJCXJldHVybiBGTEFUVEVOX0ZBSUw7CisJfQorCisJQ1BERl9QYWdlICogcFBhZ2UgPSAoQ1BERl9QYWdlKikoIHBhZ2UgKTsKKwlDUERGX0RvY3VtZW50ICogcERvY3VtZW50ID0gcFBhZ2UtPm1fcERvY3VtZW50OworCUNQREZfRGljdGlvbmFyeSAqIHBQYWdlRGljdCA9IHBQYWdlLT5tX3BGb3JtRGljdDsKKwkKKwlpZiAoICFwRG9jdW1lbnQgfHwgIXBQYWdlRGljdCApCisJeworCQlyZXR1cm4gRkxBVFRFTl9GQUlMOworCX0KKworCUNQREZfT2JqZWN0QXJyYXkgT2JqZWN0QXJyYXk7CisJQ1BERl9SZWN0QXJyYXkgIFJlY3RBcnJheTsKKworCWludCBpUmV0ID0gRkxBVFRFTl9GQUlMOworCWlSZXQgPSBQYXJzZXJBbm5vdHMoIHBEb2N1bWVudCwgcFBhZ2VEaWN0LCAmUmVjdEFycmF5LCAmT2JqZWN0QXJyYXksIG5GbGFnKTsKKwlpZiAoaVJldCA9PSBGTEFUVEVOX05PVElOR1RPRE8pCisJeworCQlyZXR1cm4gRkxBVFRFTl9OT1RJTkdUT0RPOworCX1lbHNlIGlmIChpUmV0ID09IEZMQVRURU5fRkFJTCkKKwl7CisJCXJldHVybiBGTEFUVEVOX0ZBSUw7CisJfQorCQorCUNQREZfUmVjdCByY09yaWdpbmFsQ0I7CisJQ1BERl9SZWN0IHJjTWVyZ2VyID0gQ2FsY3VsYXRlUmVjdCggJlJlY3RBcnJheSApOworCUNQREZfUmVjdCByY09yaWdpbmFsTUIgPSBwUGFnZURpY3QtPkdldFJlY3QoIk1lZGlhQm94Iik7CisKKwlpZiAocFBhZ2VEaWN0LT5LZXlFeGlzdCgiQ3JvcEJveCIpKQorCQlyY09yaWdpbmFsTUIgPSBwUGFnZURpY3QtPkdldFJlY3QoIkNyb3BCb3giKTsKKwkKKwlpZiAocmNPcmlnaW5hbE1CLklzRW1wdHkoKSkgCQorCXsKKwkJcmNPcmlnaW5hbE1CID0gQ1BERl9SZWN0KDAuMGYsIDAuMGYsIDYxMi4wZiwgNzkyLjBmKTsKKwl9CisJCisJcmNNZXJnZXIubGVmdCA9IHJjTWVyZ2VyLmxlZnQgPCByY09yaWdpbmFsTUIubGVmdD8gcmNPcmlnaW5hbE1CLmxlZnQgOiByY01lcmdlci5sZWZ0OworCXJjTWVyZ2VyLnJpZ2h0ID0gcmNNZXJnZXIucmlnaHQgPiByY09yaWdpbmFsTUIucmlnaHQ/IHJjT3JpZ2luYWxNQi5yaWdodCA6IHJjTWVyZ2VyLnJpZ2h0OworCXJjTWVyZ2VyLnRvcCA9IHJjTWVyZ2VyLnRvcCA+IHJjT3JpZ2luYWxNQi50b3A/IHJjT3JpZ2luYWxNQi50b3AgOiByY01lcmdlci50b3A7CisJcmNNZXJnZXIuYm90dG9tID0gcmNNZXJnZXIuYm90dG9tIDwgcmNPcmlnaW5hbE1CLmJvdHRvbT8gcmNPcmlnaW5hbE1CLmJvdHRvbSA6IHJjTWVyZ2VyLmJvdHRvbTsKKwkKKwlpZiAocFBhZ2VEaWN0LT5LZXlFeGlzdCgiQXJ0Qm94IikpCisJCXJjT3JpZ2luYWxDQiA9IHBQYWdlRGljdC0+R2V0UmVjdCgiQXJ0Qm94Iik7CisJZWxzZQorCQlyY09yaWdpbmFsQ0IgPSByY09yaWdpbmFsTUI7CisKKwlpZiAoIXJjT3JpZ2luYWxNQi5Jc0VtcHR5KCkpCisJeworCQlDUERGX0FycmF5KiBwTWVkaWFCb3ggPSBGWF9ORVcgQ1BERl9BcnJheSgpOwkKKworCQlwTWVkaWFCb3gtPkFkZChGWF9ORVcgQ1BERl9OdW1iZXIocmNPcmlnaW5hbE1CLmxlZnQpKTsKKwkJcE1lZGlhQm94LT5BZGQoRlhfTkVXIENQREZfTnVtYmVyKHJjT3JpZ2luYWxNQi5ib3R0b20pKTsKKwkJcE1lZGlhQm94LT5BZGQoRlhfTkVXIENQREZfTnVtYmVyKHJjT3JpZ2luYWxNQi5yaWdodCkpOworCQlwTWVkaWFCb3gtPkFkZChGWF9ORVcgQ1BERl9OdW1iZXIocmNPcmlnaW5hbE1CLnRvcCkpOworCisJCXBQYWdlRGljdC0+U2V0QXQoIk1lZGlhQm94IixwTWVkaWFCb3gpOworCX0KKwkKKwlpZiAoIXJjT3JpZ2luYWxDQi5Jc0VtcHR5KCkpCisJeworCQlDUERGX0FycmF5KiBwQ3JvcEJveCA9IEZYX05FVyBDUERGX0FycmF5KCk7CisJCXBDcm9wQm94LT5BZGQoRlhfTkVXIENQREZfTnVtYmVyKHJjT3JpZ2luYWxDQi5sZWZ0KSk7CisJCXBDcm9wQm94LT5BZGQoRlhfTkVXIENQREZfTnVtYmVyKHJjT3JpZ2luYWxDQi5ib3R0b20pKTsKKwkJcENyb3BCb3gtPkFkZChGWF9ORVcgQ1BERl9OdW1iZXIocmNPcmlnaW5hbENCLnJpZ2h0KSk7CisJCXBDcm9wQm94LT5BZGQoRlhfTkVXIENQREZfTnVtYmVyKHJjT3JpZ2luYWxDQi50b3ApKTsKKwkJcFBhZ2VEaWN0LT5TZXRBdCgiQXJ0Qm94IiwgcENyb3BCb3gpOworCX0KKworCUNQREZfRGljdGlvbmFyeSogcFJlcyA9IE5VTEw7CisJcFJlcyA9IHBQYWdlRGljdC0+R2V0RGljdCgiUmVzb3VyY2VzIik7CisJaWYgKCFwUmVzKQorCXsKKwkJcFJlcyA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7CisJCXBQYWdlRGljdC0+U2V0QXQoICJSZXNvdXJjZXMiLCBwUmVzICk7CisJfQorCisJQ1BERl9TdHJlYW0qIHBOZXdYT2JqZWN0ID0gRlhfTkVXIENQREZfU3RyZWFtKE5VTEwsIDAsIEZYX05FVyBDUERGX0RpY3Rpb25hcnkpOworCUZYX0RXT1JEIGR3T2JqTnVtID0gcERvY3VtZW50LT5BZGRJbmRpcmVjdE9iamVjdChwTmV3WE9iamVjdCk7CisJQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZVhPYmplY3QgPSBwUmVzLT5HZXREaWN0KCJYT2JqZWN0Iik7CisJaWYgKCFwUGFnZVhPYmplY3QpCisJeworCQlwUGFnZVhPYmplY3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5OworCQlwUmVzLT5TZXRBdCgiWE9iamVjdCIsIHBQYWdlWE9iamVjdCk7CisJfQorCisJQ0ZYX0J5dGVTdHJpbmcga2V5ID0gIiI7CisJaW50IG5TdHJlYW1zID0gT2JqZWN0QXJyYXkuR2V0U2l6ZSgpOworCisJaWYgKG5TdHJlYW1zID4gMCkKKwl7CisJCWZvciAoaW50IGlLZXkgPSAwOyAvKmlLZXkgPCAxMDAqLzsgaUtleSsrKQorCQl7CisJCQljaGFyIHNFeHRlbmRbNV0gPSB7MH07CisJCQlGWFNZU19pdG9hKGlLZXksIHNFeHRlbmQsIDEwKTsKKwkJCWtleSA9IENGWF9CeXRlU3RyaW5nKCJGRlQiKSArIENGWF9CeXRlU3RyaW5nKHNFeHRlbmQpOworCisJCQlpZiAoIXBQYWdlWE9iamVjdC0+S2V5RXhpc3Qoa2V5KSkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCVNldFBhZ2VDb250ZW50cyhrZXksIHBQYWdlRGljdCwgcERvY3VtZW50KTsKKworCUNQREZfRGljdGlvbmFyeSogcE5ld1hPUmVzID0gTlVMTDsKKworCWlmICgha2V5LklzRW1wdHkoKSkKKwl7CisJCXBQYWdlWE9iamVjdC0+U2V0QXRSZWZlcmVuY2Uoa2V5LCBwRG9jdW1lbnQsIGR3T2JqTnVtKTsKKwkJQ1BERl9EaWN0aW9uYXJ5KiBwTmV3T1hiamVjdERpYyA9IHBOZXdYT2JqZWN0LT5HZXREaWN0KCk7CisJCXBOZXdYT1JlcyA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7CisJCXBOZXdPWGJqZWN0RGljLT5TZXRBdCgiUmVzb3VyY2VzIiwgcE5ld1hPUmVzKTsKKwkJcE5ld09YYmplY3REaWMtPlNldEF0TmFtZSgiVHlwZSIsICJYT2JqZWN0Iik7CisJCXBOZXdPWGJqZWN0RGljLT5TZXRBdE5hbWUoIlN1YnR5cGUiLCAiRm9ybSIpOworCQlwTmV3T1hiamVjdERpYy0+U2V0QXRJbnRlZ2VyKCJGb3JtVHlwZSIsIDEpOworCQlwTmV3T1hiamVjdERpYy0+U2V0QXROYW1lKCJOYW1lIiwgIkZSTSIpOworCQlDUERGX1JlY3QgcmNCQm94ID0gcFBhZ2VEaWN0LT5HZXRSZWN0KCJBcnRCb3giKTsgCisJCXBOZXdPWGJqZWN0RGljLT5TZXRBdFJlY3QoIkJCb3giLCByY0JCb3gpOworCX0KKwkKKwlmb3IgKGludCBpID0gMDsgaSA8IG5TdHJlYW1zOyBpKyspCisJeworCQlDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpYyA9IE9iamVjdEFycmF5LkdldEF0KGkpOworCQlpZiAoIXBBbm5vdERpYyljb250aW51ZTsKKworCQlDUERGX1JlY3QgcmNBbm5vdCA9IHBBbm5vdERpYy0+R2V0UmVjdCgiUmVjdCIpOworCQlyY0Fubm90Lk5vcm1hbGl6ZSgpOworCisJCUNGWF9CeXRlU3RyaW5nIHNBbm5vdFN0YXRlID0gcEFubm90RGljLT5HZXRTdHJpbmcoIkFTIik7CisJCUNQREZfRGljdGlvbmFyeSogcEFubm90QVAgPSBwQW5ub3REaWMtPkdldERpY3QoIkFQIik7CisJCWlmICghcEFubm90QVApY29udGludWU7CisKKwkJQ1BERl9TdHJlYW0qIHBBUFN0cmVhbSA9IHBBbm5vdEFQLT5HZXRTdHJlYW0oIk4iKTsKKwkJaWYgKCFwQVBTdHJlYW0pCisJCXsKKwkJCUNQREZfRGljdGlvbmFyeSogcEFQRGljID0gcEFubm90QVAtPkdldERpY3QoIk4iKTsKKwkJCWlmICghcEFQRGljKWNvbnRpbnVlOworCisJCQlpZiAoIXNBbm5vdFN0YXRlLklzRW1wdHkoKSkKKwkJCXsKKwkJCQlwQVBTdHJlYW0gPSBwQVBEaWMtPkdldFN0cmVhbShzQW5ub3RTdGF0ZSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJRlhfUE9TSVRJT04gcG9zID0gcEFQRGljLT5HZXRTdGFydFBvcygpOworCQkJCWlmIChwb3MpCisJCQkJeworCQkJCQlDRlhfQnl0ZVN0cmluZyBzS2V5OworCQkJCQlDUERGX09iamVjdCogcEZpcnN0T2JqID0gcEFQRGljLT5HZXROZXh0RWxlbWVudChwb3MsIHNLZXkpOworCQkJCQlpZiAocEZpcnN0T2JqKQorCQkJCQl7CisJCQkJCQlpZiAocEZpcnN0T2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX1JFRkVSRU5DRSkKKwkJCQkJCQlwRmlyc3RPYmogPSBwRmlyc3RPYmotPkdldERpcmVjdCgpOworCQkJCQkJCisJCQkJCQlpZiAocEZpcnN0T2JqLT5HZXRUeXBlKCkgIT0gUERGT0JKX1NUUkVBTSkKKwkJCQkJCQljb250aW51ZTsKKworCQkJCQkJcEFQU3RyZWFtID0gKENQREZfU3RyZWFtKilwRmlyc3RPYmo7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCQlpZiAoIXBBUFN0cmVhbSljb250aW51ZTsKKworCQlDUERGX0RpY3Rpb25hcnkqIHBBUERpYyA9IHBBUFN0cmVhbS0+R2V0RGljdCgpOworCQlDRlhfQWZmaW5lTWF0cml4IG1hdHJpeCA9IHBBUERpYy0+R2V0TWF0cml4KCJNYXRyaXgiKTsKKworCQlDUERGX1JlY3QgcmNTdHJlYW07CisJCWlmIChwQVBEaWMtPktleUV4aXN0KCJSZWN0IikpCisJCQlyY1N0cmVhbSA9IHBBUERpYy0+R2V0UmVjdCgiUmVjdCIpOworCQllbHNlIGlmIChwQVBEaWMtPktleUV4aXN0KCJCQm94IikpCisJCQlyY1N0cmVhbSA9IHBBUERpYy0+R2V0UmVjdCgiQkJveCIpOworCisJCWlmIChyY1N0cmVhbS5Jc0VtcHR5KCkpY29udGludWU7CisKKwkJQ1BERl9PYmplY3QqIHBPYmogPSBwQVBTdHJlYW07CisKKwkJaWYgKHBPYmopCisJCXsJCQorCQkJQ1BERl9EaWN0aW9uYXJ5KiBwT2JqRGljID0gcE9iai0+R2V0RGljdCgpOworCQkJaWYgKHBPYmpEaWMpCisJCQl7CisJCQkJcE9iakRpYy0+U2V0QXROYW1lKCJUeXBlIiwgIlhPYmplY3QiKTsKKwkJCQlwT2JqRGljLT5TZXRBdE5hbWUoIlN1YnR5cGUiLCAiRm9ybSIpOworCQkJfQorCQl9CisKKwkJQ1BERl9EaWN0aW9uYXJ5KiBwWE9iamVjdCA9IHBOZXdYT1Jlcy0+R2V0RGljdCgiWE9iamVjdCIpOworCQlpZiAoIXBYT2JqZWN0KQorCQl7CisJCQlwWE9iamVjdCA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7CisJCQlwTmV3WE9SZXMtPlNldEF0KCJYT2JqZWN0IiwgcFhPYmplY3QpOworCQl9CisKKwkJQ0ZYX0J5dGVTdHJpbmcgc0Zvcm1OYW1lOworCQlzRm9ybU5hbWUuRm9ybWF0KCJGJWQiLCBpKTsKKwkJRlhfRFdPUkQgZHdPYmpOdW0gPSBwRG9jdW1lbnQtPkFkZEluZGlyZWN0T2JqZWN0KHBPYmopOworCQlwWE9iamVjdC0+U2V0QXRSZWZlcmVuY2Uoc0Zvcm1OYW1lLCBwRG9jdW1lbnQsIGR3T2JqTnVtKTsKKworCQlDUERGX1N0cmVhbUFjYyBhY2M7CisJCWFjYy5Mb2FkQWxsRGF0YShwTmV3WE9iamVjdCk7CisKKwkJRlhfTFBDQllURSBwRGF0YSA9IGFjYy5HZXREYXRhKCk7CisJCUNGWF9CeXRlU3RyaW5nIHNTdHJlYW0ocERhdGEsIGFjYy5HZXRTaXplKCkpOworCQlDRlhfQnl0ZVN0cmluZyBzVGVtcDsKKworCQlpZiAobWF0cml4LklzSWRlbnRpdHkoKSkKKwkJeworCQkJbWF0cml4LmEgPSAxLjBmOworCQkJbWF0cml4LmIgPSAwLjBmOworCQkJbWF0cml4LmMgPSAwLjBmOworCQkJbWF0cml4LmQgPSAxLjBmOworCQkJbWF0cml4LmUgPSAwLjBmOworCQkJbWF0cml4LmYgPSAwLjBmOworCQl9CisKKwkJQ0ZYX0FmZmluZU1hdHJpeCBtID0gR2V0TWF0cml4KHJjQW5ub3QsIHJjU3RyZWFtLCBtYXRyaXgpOworCQlzVGVtcC5Gb3JtYXQoInEgJWYgMCAwICVmICVmICVmIGNtIC8lcyBEbyBRXG4iLCBtLmEsIG0uZCwgbS5lLCBtLmYsIChGWF9MUENTVFIpc0Zvcm1OYW1lKTsKKwkJc1N0cmVhbSArPSBzVGVtcDsKKworCQlwTmV3WE9iamVjdC0+U2V0RGF0YSgoRlhfTFBDQllURSlzU3RyZWFtLCBzU3RyZWFtLkdldExlbmd0aCgpLCBGQUxTRSwgRkFMU0UpOworCX0KKwlwUGFnZURpY3QtPlJlbW92ZUF0KCAiQW5ub3RzIiApOworCisJT2JqZWN0QXJyYXkuUmVtb3ZlQWxsKCk7CisJUmVjdEFycmF5LlJlbW92ZUFsbCgpOworCisJcmV0dXJuIEZMQVRURU5fU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2ZwZGZfcHJvZ3Jlc3NpdmUuY3BwIGIvZnBkZnNkay9zcmMvZnBkZl9wcm9ncmVzc2l2ZS5jcHAKaW5kZXggMjk0OTZlMC4uYjY2OTFhZiAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvZnBkZl9wcm9ncmVzc2l2ZS5jcHAKKysrIGIvZnBkZnNkay9zcmMvZnBkZl9wcm9ncmVzc2l2ZS5jcHAKQEAgLTEsMTE0ICsxLDExNCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnBkZl9wcm9ncmVzc2l2ZS5oIg0KLSNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfZGVmaW5lLmgiDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnBkZnZpZXcuaCINCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX3JlbmRlcmNvbnRleHQuaCINCi0NCi1leHRlcm4gdm9pZCAoKkZ1bmNfUmVuZGVyUGFnZSkoIENSZW5kZXJDb250ZXh0KiwgRlBERl9QQUdFIHBhZ2UsIGludCBzdGFydF94LCBpbnQgc3RhcnRfeSwgaW50IHNpemVfeCwgaW50IHNpemVfeSwNCi0JCQkJCQlpbnQgcm90YXRlLCBpbnQgZmxhZ3MsRlhfQk9PTCBiTmVlZFRvUmVzdG9yZSwgSUZTREtfUEFVU0VfQWRhcHRlciAqIHBhdXNlICk7DQotDQotZXh0ZXJuIHZvaWQgRHJvcENvbnRleHQodm9pZCogZGF0YSk7DQotDQotRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZfUmVuZGVyUGFnZUJpdG1hcF9TdGFydCggRlBERl9CSVRNQVAgYml0bWFwLCBGUERGX1BBR0UgcGFnZSwgDQotCQkJCQkJCQkJCQkJCWludCBzdGFydF94LCBpbnQgc3RhcnRfeSwgaW50IHNpemVfeCwNCi0JCQkJCQkJCQkJCQkgICAgaW50IHNpemVfeSwgaW50IHJvdGF0ZSwgaW50IGZsYWdzLA0KLQkJCQkJCQkJCQkJCQlJRlNES19QQVVTRSAqIHBhdXNlICkNCi17DQotCWlmIChiaXRtYXAgPT0gTlVMTCB8fCBwYWdlID09IE5VTEwpDQotCQlyZXR1cm4gRlBERl9SRU5ERVJfRkFJTEVEOw0KLQ0KLSAJaWYgKCFwYXVzZSkNCi0gCQlyZXR1cm4gRlBERl9SRU5ERVJfRkFJTEVEOw0KLQ0KLQlpZiAocGF1c2UtPnZlcnNpb24gIT0xKQ0KLQkJcmV0dXJuIEZQREZfUkVOREVSX0ZBSUxFRDsNCi0NCi0JQ1BERl9QYWdlKiBwUGFnZSA9IChDUERGX1BhZ2UqKXBhZ2U7DQotCQ0KLS8vCUZYTVRfQ1NMT0NLX09CSigmcFBhZ2UtPm1fUGFnZUxvY2spOw0KLQkNCi0JQ1JlbmRlckNvbnRleHQqIHBDb250ZXh0ID0gRlhfTkVXIENSZW5kZXJDb250ZXh0Ow0KLQlwUGFnZS0+U2V0UHJpdmF0ZURhdGEoKHZvaWQqKTEsIHBDb250ZXh0LCBEcm9wQ29udGV4dCApOw0KLSNpZmRlZiBfU0tJQV9TVVBQT1JUXw0KLQlwQ29udGV4dC0+bV9wRGV2aWNlID0gRlhfTkVXIENGWF9Ta2lhRGV2aWNlOw0KLQlpZiAoZmxhZ3MgJiBGUERGX1JFVkVSU0VfQllURV9PUkRFUikNCi0JCSgoQ0ZYX1NraWFEZXZpY2UqKXBDb250ZXh0LT5tX3BEZXZpY2UpLT5BdHRhY2goKENGWF9ESUJpdG1hcCopYml0bWFwLDAsVFJVRSk7DQotCWVsc2UNCi0JCSgoQ0ZYX1NraWFEZXZpY2UqKXBDb250ZXh0LT5tX3BEZXZpY2UpLT5BdHRhY2goKENGWF9ESUJpdG1hcCopYml0bWFwKTsNCi0jZWxzZQ0KLQlwQ29udGV4dC0+bV9wRGV2aWNlID0gRlhfTkVXIENGWF9GeGdlRGV2aWNlOw0KLQlpZiAoZmxhZ3MgJiBGUERGX1JFVkVSU0VfQllURV9PUkRFUikNCi0JCSgoQ0ZYX0Z4Z2VEZXZpY2UqKXBDb250ZXh0LT5tX3BEZXZpY2UpLT5BdHRhY2goKENGWF9ESUJpdG1hcCopYml0bWFwLDAsVFJVRSk7DQotCWVsc2UNCi0JCSgoQ0ZYX0Z4Z2VEZXZpY2UqKXBDb250ZXh0LT5tX3BEZXZpY2UpLT5BdHRhY2goKENGWF9ESUJpdG1hcCopYml0bWFwKTsNCi0jZW5kaWYNCi0JSUZTREtfUEFVU0VfQWRhcHRlciBJUGF1c2VBZGFwdGVyKHBhdXNlKTsNCi0JDQotCWlmIChmbGFncyAmIEZQREZfTk9fQ0FUQ0gpDQotCQlGdW5jX1JlbmRlclBhZ2UocENvbnRleHQsIHBhZ2UsIHN0YXJ0X3gsIHN0YXJ0X3ksIHNpemVfeCwgc2l6ZV95LCByb3RhdGUsIGZsYWdzLEZBTFNFLCAmSVBhdXNlQWRhcHRlcik7DQotCWVsc2Ugew0KLQkJdHJ5IHsNCi0JCQlGdW5jX1JlbmRlclBhZ2UocENvbnRleHQsIHBhZ2UsIHN0YXJ0X3gsIHN0YXJ0X3ksIHNpemVfeCwgc2l6ZV95LCByb3RhdGUsIGZsYWdzLEZBTFNFLCAmSVBhdXNlQWRhcHRlcik7DQotCQkJfQ0KLQkJY2F0Y2ggKC4uLil7fQ0KLQl9DQotDQotCWlmICggcENvbnRleHQtPm1fcFJlbmRlcmVyICkNCi0Jew0KLQkJQ1BERl9Qcm9ncmVzc2l2ZVJlbmRlcmVyOjpSZW5kZXJTdGF0dXMgc3RhdHVzID0gQ1BERl9Qcm9ncmVzc2l2ZVJlbmRlcmVyOjpGYWlsZWQ7DQotCQlzdGF0dXMgPSBwQ29udGV4dC0+bV9wUmVuZGVyZXItPkdldFN0YXR1cygpOw0KLQkJcmV0dXJuIHN0YXR1czsNCi0JfQ0KLQlyZXR1cm4gRlBERl9SRU5ERVJfRkFJTEVEOw0KLX0NCi0NCi1ETExFWFBPUlQgaW50IFNURENBTEwgRlBERl9SZW5kZXJQYWdlX0NvbnRpbnVlKEZQREZfUEFHRSBwYWdlLElGU0RLX1BBVVNFICogcGF1c2UpDQotew0KLQlpZiAocGFnZSA9PSBOVUxMKQ0KLQkJcmV0dXJuIEZQREZfUkVOREVSX0ZBSUxFRDsNCi0NCi0gCWlmICghcGF1c2UpDQotCQlyZXR1cm4gRlBERl9SRU5ERVJfRkFJTEVEOw0KLQkNCi0JaWYgKHBhdXNlLT52ZXJzaW9uICE9MSkNCi0JCXJldHVybiBGUERGX1JFTkRFUl9GQUlMRUQ7DQotDQotCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOw0KLQ0KLS8vCUZYTVRfQ1NMT0NLX09CSigmcFBhZ2UtPm1fUGFnZUxvY2spOw0KLQ0KLQlDUmVuZGVyQ29udGV4dCAqIHBDb250ZXh0ID0gKENSZW5kZXJDb250ZXh0KilwUGFnZS0+R2V0UHJpdmF0ZURhdGEoKHZvaWQqKTEpOw0KLQlpZiAocENvbnRleHQgJiYgcENvbnRleHQtPm1fcFJlbmRlcmVyKQ0KLQl7DQotCQlJRlNES19QQVVTRV9BZGFwdGVyIElQYXVzZUFkYXB0ZXIocGF1c2UpOw0KLQkJcENvbnRleHQtPm1fcFJlbmRlcmVyLT5Db250aW51ZSgmSVBhdXNlQWRhcHRlcik7DQotDQotCQlDUERGX1Byb2dyZXNzaXZlUmVuZGVyZXI6OlJlbmRlclN0YXR1cyBzdGF0dXMgPSBDUERGX1Byb2dyZXNzaXZlUmVuZGVyZXI6OkZhaWxlZDsNCi0JCXN0YXR1cyA9IHBDb250ZXh0LT5tX3BSZW5kZXJlci0+R2V0U3RhdHVzKCk7DQotCQlyZXR1cm4gc3RhdHVzOw0KLQl9DQotCXJldHVybiBGUERGX1JFTkRFUl9GQUlMRUQ7DQotfQ0KLQ0KLQ0KLURMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERl9SZW5kZXJQYWdlX0Nsb3NlKEZQREZfUEFHRSBwYWdlKQ0KLXsNCi0JaWYgKHBhZ2UgPT0gTlVMTCkgcmV0dXJuOw0KLQlDUERGX1BhZ2UqIHBQYWdlID0gKENQREZfUGFnZSopcGFnZTsNCi0NCi0vLwlGWE1UX0NTTE9DS19PQkooJnBQYWdlLT5tX1BhZ2VMb2NrKTsNCi0NCi0JQ1JlbmRlckNvbnRleHQgKiBwQ29udGV4dCA9IChDUmVuZGVyQ29udGV4dCopcFBhZ2UtPkdldFByaXZhdGVEYXRhKCh2b2lkKikxKTsNCi0JaWYgKHBDb250ZXh0KQ0KLQl7DQotCQlwQ29udGV4dC0+bV9wRGV2aWNlLT5SZXN0b3JlU3RhdGUoKTsNCi0JCWRlbGV0ZSBwQ29udGV4dDsNCi0JCXBQYWdlLT5SZW1vdmVQcml2YXRlRGF0YSgodm9pZCopMSk7DQotCX0NCi19DQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnBkZl9wcm9ncmVzc2l2ZS5oIgorI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19kZWZpbmUuaCIKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2ZwZGZ2aWV3LmgiCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX3JlbmRlcmNvbnRleHQuaCIKKworZXh0ZXJuIHZvaWQgKCpGdW5jX1JlbmRlclBhZ2UpKCBDUmVuZGVyQ29udGV4dCosIEZQREZfUEFHRSBwYWdlLCBpbnQgc3RhcnRfeCwgaW50IHN0YXJ0X3ksIGludCBzaXplX3gsIGludCBzaXplX3ksCisJCQkJCQlpbnQgcm90YXRlLCBpbnQgZmxhZ3MsRlhfQk9PTCBiTmVlZFRvUmVzdG9yZSwgSUZTREtfUEFVU0VfQWRhcHRlciAqIHBhdXNlICk7CisKK2V4dGVybiB2b2lkIERyb3BDb250ZXh0KHZvaWQqIGRhdGEpOworCitETExFWFBPUlQgaW50IFNURENBTEwgRlBERl9SZW5kZXJQYWdlQml0bWFwX1N0YXJ0KCBGUERGX0JJVE1BUCBiaXRtYXAsIEZQREZfUEFHRSBwYWdlLCAKKwkJCQkJCQkJCQkJCQlpbnQgc3RhcnRfeCwgaW50IHN0YXJ0X3ksIGludCBzaXplX3gsCisJCQkJCQkJCQkJCQkgICAgaW50IHNpemVfeSwgaW50IHJvdGF0ZSwgaW50IGZsYWdzLAorCQkJCQkJCQkJCQkJCUlGU0RLX1BBVVNFICogcGF1c2UgKQoreworCWlmIChiaXRtYXAgPT0gTlVMTCB8fCBwYWdlID09IE5VTEwpCisJCXJldHVybiBGUERGX1JFTkRFUl9GQUlMRUQ7CisKKyAJaWYgKCFwYXVzZSkKKyAJCXJldHVybiBGUERGX1JFTkRFUl9GQUlMRUQ7CisKKwlpZiAocGF1c2UtPnZlcnNpb24gIT0xKQorCQlyZXR1cm4gRlBERl9SRU5ERVJfRkFJTEVEOworCisJQ1BERl9QYWdlKiBwUGFnZSA9IChDUERGX1BhZ2UqKXBhZ2U7CisJCisvLwlGWE1UX0NTTE9DS19PQkooJnBQYWdlLT5tX1BhZ2VMb2NrKTsKKwkKKwlDUmVuZGVyQ29udGV4dCogcENvbnRleHQgPSBGWF9ORVcgQ1JlbmRlckNvbnRleHQ7CisJcFBhZ2UtPlNldFByaXZhdGVEYXRhKCh2b2lkKikxLCBwQ29udGV4dCwgRHJvcENvbnRleHQgKTsKKyNpZmRlZiBfU0tJQV9TVVBQT1JUXworCXBDb250ZXh0LT5tX3BEZXZpY2UgPSBGWF9ORVcgQ0ZYX1NraWFEZXZpY2U7CisJaWYgKGZsYWdzICYgRlBERl9SRVZFUlNFX0JZVEVfT1JERVIpCisJCSgoQ0ZYX1NraWFEZXZpY2UqKXBDb250ZXh0LT5tX3BEZXZpY2UpLT5BdHRhY2goKENGWF9ESUJpdG1hcCopYml0bWFwLDAsVFJVRSk7CisJZWxzZQorCQkoKENGWF9Ta2lhRGV2aWNlKilwQ29udGV4dC0+bV9wRGV2aWNlKS0+QXR0YWNoKChDRlhfRElCaXRtYXAqKWJpdG1hcCk7CisjZWxzZQorCXBDb250ZXh0LT5tX3BEZXZpY2UgPSBGWF9ORVcgQ0ZYX0Z4Z2VEZXZpY2U7CisJaWYgKGZsYWdzICYgRlBERl9SRVZFUlNFX0JZVEVfT1JERVIpCisJCSgoQ0ZYX0Z4Z2VEZXZpY2UqKXBDb250ZXh0LT5tX3BEZXZpY2UpLT5BdHRhY2goKENGWF9ESUJpdG1hcCopYml0bWFwLDAsVFJVRSk7CisJZWxzZQorCQkoKENGWF9GeGdlRGV2aWNlKilwQ29udGV4dC0+bV9wRGV2aWNlKS0+QXR0YWNoKChDRlhfRElCaXRtYXAqKWJpdG1hcCk7CisjZW5kaWYKKwlJRlNES19QQVVTRV9BZGFwdGVyIElQYXVzZUFkYXB0ZXIocGF1c2UpOworCQorCWlmIChmbGFncyAmIEZQREZfTk9fQ0FUQ0gpCisJCUZ1bmNfUmVuZGVyUGFnZShwQ29udGV4dCwgcGFnZSwgc3RhcnRfeCwgc3RhcnRfeSwgc2l6ZV94LCBzaXplX3ksIHJvdGF0ZSwgZmxhZ3MsRkFMU0UsICZJUGF1c2VBZGFwdGVyKTsKKwllbHNlIHsKKwkJdHJ5IHsKKwkJCUZ1bmNfUmVuZGVyUGFnZShwQ29udGV4dCwgcGFnZSwgc3RhcnRfeCwgc3RhcnRfeSwgc2l6ZV94LCBzaXplX3ksIHJvdGF0ZSwgZmxhZ3MsRkFMU0UsICZJUGF1c2VBZGFwdGVyKTsKKwkJCX0KKwkJY2F0Y2ggKC4uLil7fQorCX0KKworCWlmICggcENvbnRleHQtPm1fcFJlbmRlcmVyICkKKwl7CisJCUNQREZfUHJvZ3Jlc3NpdmVSZW5kZXJlcjo6UmVuZGVyU3RhdHVzIHN0YXR1cyA9IENQREZfUHJvZ3Jlc3NpdmVSZW5kZXJlcjo6RmFpbGVkOworCQlzdGF0dXMgPSBwQ29udGV4dC0+bV9wUmVuZGVyZXItPkdldFN0YXR1cygpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKwlyZXR1cm4gRlBERl9SRU5ERVJfRkFJTEVEOworfQorCitETExFWFBPUlQgaW50IFNURENBTEwgRlBERl9SZW5kZXJQYWdlX0NvbnRpbnVlKEZQREZfUEFHRSBwYWdlLElGU0RLX1BBVVNFICogcGF1c2UpCit7CisJaWYgKHBhZ2UgPT0gTlVMTCkKKwkJcmV0dXJuIEZQREZfUkVOREVSX0ZBSUxFRDsKKworIAlpZiAoIXBhdXNlKQorCQlyZXR1cm4gRlBERl9SRU5ERVJfRkFJTEVEOworCQorCWlmIChwYXVzZS0+dmVyc2lvbiAhPTEpCisJCXJldHVybiBGUERGX1JFTkRFUl9GQUlMRUQ7CisKKwlDUERGX1BhZ2UqIHBQYWdlID0gKENQREZfUGFnZSopcGFnZTsKKworLy8JRlhNVF9DU0xPQ0tfT0JKKCZwUGFnZS0+bV9QYWdlTG9jayk7CisKKwlDUmVuZGVyQ29udGV4dCAqIHBDb250ZXh0ID0gKENSZW5kZXJDb250ZXh0KilwUGFnZS0+R2V0UHJpdmF0ZURhdGEoKHZvaWQqKTEpOworCWlmIChwQ29udGV4dCAmJiBwQ29udGV4dC0+bV9wUmVuZGVyZXIpCisJeworCQlJRlNES19QQVVTRV9BZGFwdGVyIElQYXVzZUFkYXB0ZXIocGF1c2UpOworCQlwQ29udGV4dC0+bV9wUmVuZGVyZXItPkNvbnRpbnVlKCZJUGF1c2VBZGFwdGVyKTsKKworCQlDUERGX1Byb2dyZXNzaXZlUmVuZGVyZXI6OlJlbmRlclN0YXR1cyBzdGF0dXMgPSBDUERGX1Byb2dyZXNzaXZlUmVuZGVyZXI6OkZhaWxlZDsKKwkJc3RhdHVzID0gcENvbnRleHQtPm1fcFJlbmRlcmVyLT5HZXRTdGF0dXMoKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJcmV0dXJuIEZQREZfUkVOREVSX0ZBSUxFRDsKK30KKworCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZfUmVuZGVyUGFnZV9DbG9zZShGUERGX1BBR0UgcGFnZSkKK3sKKwlpZiAocGFnZSA9PSBOVUxMKSByZXR1cm47CisJQ1BERl9QYWdlKiBwUGFnZSA9IChDUERGX1BhZ2UqKXBhZ2U7CisKKy8vCUZYTVRfQ1NMT0NLX09CSigmcFBhZ2UtPm1fUGFnZUxvY2spOworCisJQ1JlbmRlckNvbnRleHQgKiBwQ29udGV4dCA9IChDUmVuZGVyQ29udGV4dCopcFBhZ2UtPkdldFByaXZhdGVEYXRhKCh2b2lkKikxKTsKKwlpZiAocENvbnRleHQpCisJeworCQlwQ29udGV4dC0+bV9wRGV2aWNlLT5SZXN0b3JlU3RhdGUoKTsKKwkJZGVsZXRlIHBDb250ZXh0OworCQlwUGFnZS0+UmVtb3ZlUHJpdmF0ZURhdGEoKHZvaWQqKTEpOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvZnBkZl9zZWFyY2hleC5jcHAgYi9mcGRmc2RrL3NyYy9mcGRmX3NlYXJjaGV4LmNwcAppbmRleCA1NDBjZDU1Li4yMTgzMWEzIDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9mcGRmX3NlYXJjaGV4LmNwcAorKysgYi9mcGRmc2RrL3NyYy9mcGRmX3NlYXJjaGV4LmNwcApAQCAtMSwxNSArMSwxNSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19kZWZpbmUuaCINCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mcGRmX3NlYXJjaGV4LmgiDQotDQotDQotRExMRVhQT1JUIGludCBTVERDQUxMICBGUERGVGV4dF9HZXRDaGFySW5kZXhGcm9tVGV4dEluZGV4KEZQREZfVEVYVFBBR0UgdGV4dF9wYWdlLCBpbnQgblRleHRJbmRleCkNCi17DQotCWlmKCF0ZXh0X3BhZ2UpIHJldHVybiAtMTsNCi0JcmV0dXJuICgoSVBERl9UZXh0UGFnZSopdGV4dF9wYWdlKS0+Q2hhckluZGV4RnJvbVRleHRJbmRleChuVGV4dEluZGV4KTsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19kZWZpbmUuaCIKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2ZwZGZfc2VhcmNoZXguaCIKKworCitETExFWFBPUlQgaW50IFNURENBTEwgIEZQREZUZXh0X0dldENoYXJJbmRleEZyb21UZXh0SW5kZXgoRlBERl9URVhUUEFHRSB0ZXh0X3BhZ2UsIGludCBuVGV4dEluZGV4KQoreworCWlmKCF0ZXh0X3BhZ2UpIHJldHVybiAtMTsKKwlyZXR1cm4gKChJUERGX1RleHRQYWdlKil0ZXh0X3BhZ2UpLT5DaGFySW5kZXhGcm9tVGV4dEluZGV4KG5UZXh0SW5kZXgpOworfQpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvZnBkZl90cmFuc2Zvcm1wYWdlLmNwcCBiL2ZwZGZzZGsvc3JjL2ZwZGZfdHJhbnNmb3JtcGFnZS5jcHAKaW5kZXggZjE3MWM1ZS4uNzI5YjFjZCAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvZnBkZl90cmFuc2Zvcm1wYWdlLmNwcAorKysgYi9mcGRmc2RrL3NyYy9mcGRmX3RyYW5zZm9ybXBhZ2UuY3BwCkBAIC0xLDMyNSArMSwzMjUgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfZGVmaW5lLmgiDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnBkZl90cmFuc2Zvcm1wYWdlLmgiDQotDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGUGFnZV9TZXRNZWRpYUJveChGUERGX1BBR0UgcGFnZSwgZmxvYXQgbGVmdCwgZmxvYXQgYm90dG9tLCBmbG9hdCByaWdodCwgZmxvYXQgdG9wKQ0KLXsNCi0JaWYoIXBhZ2UpDQotCQlyZXR1cm47DQotCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOw0KLQlDUERGX0RpY3Rpb25hcnkqIHBQYWdlRGljdCA9IHBQYWdlLT5tX3BGb3JtRGljdDsNCi0JQ1BERl9BcnJheSogcE1lZGlhQm94QXJyYXkgPSBGWF9ORVcgQ1BERl9BcnJheTsNCi0JcE1lZGlhQm94QXJyYXktPkFkZChGWF9ORVcgQ1BERl9OdW1iZXIobGVmdCkpOw0KLQlwTWVkaWFCb3hBcnJheS0+QWRkKEZYX05FVyBDUERGX051bWJlcihib3R0b20pKTsNCi0JcE1lZGlhQm94QXJyYXktPkFkZChGWF9ORVcgQ1BERl9OdW1iZXIoRlhfRkxPQVQocmlnaHQpKSk7DQotCXBNZWRpYUJveEFycmF5LT5BZGQoRlhfTkVXIENQREZfTnVtYmVyKEZYX0ZMT0FUKHRvcCkpKTsNCi0JDQotCXBQYWdlRGljdC0+U2V0QXQoIk1lZGlhQm94IiwgcE1lZGlhQm94QXJyYXkpOw0KLX0NCi0NCi0NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZQYWdlX1NldENyb3BCb3goRlBERl9QQUdFIHBhZ2UsIGZsb2F0IGxlZnQsIGZsb2F0IGJvdHRvbSwgZmxvYXQgcmlnaHQsIGZsb2F0IHRvcCkNCi17DQotCWlmKCFwYWdlKQ0KLQkJcmV0dXJuOw0KLQlDUERGX1BhZ2UqIHBQYWdlID0gKENQREZfUGFnZSopcGFnZTsNCi0JQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QgPSBwUGFnZS0+bV9wRm9ybURpY3Q7DQotCUNQREZfQXJyYXkqIHBDcm9wQm94QXJyYXkgPSBGWF9ORVcgQ1BERl9BcnJheTsNCi0JcENyb3BCb3hBcnJheS0+QWRkKEZYX05FVyBDUERGX051bWJlcihsZWZ0KSk7DQotCXBDcm9wQm94QXJyYXktPkFkZChGWF9ORVcgQ1BERl9OdW1iZXIoYm90dG9tKSk7DQotCXBDcm9wQm94QXJyYXktPkFkZChGWF9ORVcgQ1BERl9OdW1iZXIoRlhfRkxPQVQocmlnaHQpKSk7DQotCXBDcm9wQm94QXJyYXktPkFkZChGWF9ORVcgQ1BERl9OdW1iZXIoRlhfRkxPQVQodG9wKSkpOw0KLQkNCi0JDQotCXBQYWdlRGljdC0+U2V0QXQoIkNyb3BCb3giLCBwQ3JvcEJveEFycmF5KTsNCi19DQotDQotDQotRExMRVhQT1JUIEZYX0JPT0wgU1REQ0FMTCBGUERGUGFnZV9HZXRNZWRpYUJveChGUERGX1BBR0UgcGFnZSwgZmxvYXQqIGxlZnQsIGZsb2F0KiBib3R0b20sIGZsb2F0KiByaWdodCwgZmxvYXQqIHRvcCkNCi17DQotCWlmKCFwYWdlKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQlDUERGX1BhZ2UqIHBQYWdlID0gKENQREZfUGFnZSopcGFnZTsNCi0JQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QgPSBwUGFnZS0+bV9wRm9ybURpY3Q7DQotCUNQREZfQXJyYXkqIHBBcnJheSA9IHBQYWdlRGljdC0+R2V0QXJyYXkoIk1lZGlhQm94Iik7DQotCWlmKHBBcnJheSkNCi0Jew0KLQkJKmxlZnQgPSBwQXJyYXktPkdldEZsb2F0KDApOw0KLQkJKmJvdHRvbSA9IHBBcnJheS0+R2V0RmxvYXQoMSk7DQotCQkqcmlnaHQgPSBwQXJyYXktPkdldEZsb2F0KDIpOw0KLQkJKnRvcCA9IHBBcnJheS0+R2V0RmxvYXQoMyk7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGUGFnZV9HZXRDcm9wQm94KEZQREZfUEFHRSBwYWdlLCBmbG9hdCogbGVmdCwgZmxvYXQqIGJvdHRvbSwgZmxvYXQqIHJpZ2h0LCBmbG9hdCogdG9wKQ0KLXsNCi0JaWYoIXBhZ2UpDQotCQlyZXR1cm4gRkFMU0U7DQotCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOw0KLQlDUERGX0RpY3Rpb25hcnkqIHBQYWdlRGljdCA9IHBQYWdlLT5tX3BGb3JtRGljdDsNCi0JQ1BERl9BcnJheSogcEFycmF5ID0gcFBhZ2VEaWN0LT5HZXRBcnJheSgiQ3JvcEJveCIpOw0KLQlpZihwQXJyYXkpDQotCXsNCi0JCSpsZWZ0ID0gcEFycmF5LT5HZXRGbG9hdCgwKTsNCi0JCSpib3R0b20gPSBwQXJyYXktPkdldEZsb2F0KDEpOw0KLQkJKnJpZ2h0ID0gcEFycmF5LT5HZXRGbG9hdCgyKTsNCi0JCSp0b3AgPSBwQXJyYXktPkdldEZsb2F0KDMpOw0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1ETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERlBhZ2VfVHJhbnNGb3JtV2l0aENsaXAoRlBERl9QQUdFIHBhZ2UsIEZTX01BVFJJWCogbWF0cml4LCBGU19SRUNURiogY2xpcFJlY3QpDQotew0KLQlpZighcGFnZSkNCi0JCXJldHVybiBGQUxTRTsNCi0NCi0JQ0ZYX0J5dGVUZXh0QnVmIHRleHRCdWY7DQotCXRleHRCdWY8PCJxICI7DQotCUNGWF9GbG9hdFJlY3QgcmVjdChjbGlwUmVjdC0+bGVmdCwgY2xpcFJlY3QtPmJvdHRvbSwgY2xpcFJlY3QtPnJpZ2h0LCBjbGlwUmVjdC0+dG9wKTsNCi0JcmVjdC5Ob3JtYWxpemUoKTsNCi0JQ0ZYX0J5dGVTdHJpbmcgYnNDbGlwcGluZzsNCi0JYnNDbGlwcGluZy5Gb3JtYXQoIiVmICVmICVmICVmIHJlIFcqIG4gIiwgcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSwgcmVjdC5XaWR0aCgpLCByZWN0LkhlaWdodCgpKTsNCi0JdGV4dEJ1Zjw8YnNDbGlwcGluZzsNCi0NCi0JQ0ZYX0J5dGVTdHJpbmcgYnNNYXRpeDsNCi0JYnNNYXRpeC5Gb3JtYXQoIiVmICVmICVmICVmICVmICVmIGNtICIsIG1hdHJpeC0+YSwgbWF0cml4LT5iLG1hdHJpeC0+YyxtYXRyaXgtPmQsbWF0cml4LT5lLG1hdHJpeC0+Zik7DQotCXRleHRCdWY8PGJzTWF0aXg7DQotCQ0KLQ0KLQlDUERGX1BhZ2UqIHBQYWdlID0gKENQREZfUGFnZSopcGFnZTsNCi0JQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpYyA9IHBQYWdlLT5tX3BGb3JtRGljdDsNCi0JQ1BERl9PYmplY3QqIHBDb250ZW50T2JqID0gcFBhZ2VEaWMtPkdldEVsZW1lbnQoIkNvbnRlbnRzIik7DQotCWlmKCFwQ29udGVudE9iaikNCi0JCXBDb250ZW50T2JqID0gcFBhZ2VEaWMtPkdldEFycmF5KCJDb250ZW50cyIpOw0KLQlpZighcENvbnRlbnRPYmopDQotCQlyZXR1cm4gRkFMU0U7DQotCQ0KLQlDUERGX0RpY3Rpb25hcnkqIHBEaWMgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5Ow0KLQlDUERGX1N0cmVhbSogcFN0cmVhbSA9IEZYX05FVyBDUERGX1N0cmVhbShOVUxMLDAsIHBEaWMpOw0KLQlwU3RyZWFtLT5TZXREYXRhKHRleHRCdWYuR2V0QnVmZmVyKCksIHRleHRCdWYuR2V0U2l6ZSgpLCBGQUxTRSwgRkFMU0UpOw0KLQlDUERGX0RvY3VtZW50KiBwRG9jID0gcFBhZ2UtPm1fcERvY3VtZW50Ow0KLQlpZighcERvYykNCi0JCXJldHVybiBGQUxTRTsNCi0JcERvYy0+QWRkSW5kaXJlY3RPYmplY3QocFN0cmVhbSk7DQotDQotCXBEaWMgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5Ow0KLQlDUERGX1N0cmVhbSogcEVuZFN0cmVhbSA9IEZYX05FVyBDUERGX1N0cmVhbShOVUxMLDAsIHBEaWMpOw0KLQlwRW5kU3RyZWFtLT5TZXREYXRhKChGWF9MUENCWVRFKSIgUSIsIDIsIEZBTFNFLCBGQUxTRSk7DQotCXBEb2MtPkFkZEluZGlyZWN0T2JqZWN0KHBFbmRTdHJlYW0pOw0KLQkNCi0JQ1BERl9BcnJheSogcENvbnRlbnRBcnJheSA9IE5VTEw7DQotCWlmIChwQ29udGVudE9iaiAmJiBwQ29udGVudE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkNCi0Jew0KLQkJcENvbnRlbnRBcnJheSA9IChDUERGX0FycmF5KilwQ29udGVudE9iajsNCi0JCUNQREZfUmVmZXJlbmNlKiBwUmVmID0gRlhfTkVXIENQREZfUmVmZXJlbmNlKHBEb2MsIHBTdHJlYW0tPkdldE9iak51bSgpKTsNCi0JCXBDb250ZW50QXJyYXktPkluc2VydEF0KDAsIHBSZWYpOw0KLQkJcENvbnRlbnRBcnJheS0+QWRkUmVmZXJlbmNlKHBEb2MscEVuZFN0cmVhbSk7DQotCQkNCi0JfQ0KLQllbHNlIGlmKHBDb250ZW50T2JqICYmIHBDb250ZW50T2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX1JFRkVSRU5DRSkNCi0Jew0KLQkJQ1BERl9SZWZlcmVuY2UqIHBSZWZlcmVuY2UgPSAoQ1BERl9SZWZlcmVuY2UqKXBDb250ZW50T2JqOw0KLQkJQ1BERl9PYmplY3QqIHBEaXJlY3RPYmogPSBwUmVmZXJlbmNlLT5HZXREaXJlY3QoKTsNCi0JCWlmKHBEaXJlY3RPYmogIT0gTlVMTCkNCi0JCXsNCi0JCQlpZihwRGlyZWN0T2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKQ0KLQkJCXsNCi0JCQkJcENvbnRlbnRBcnJheSA9IChDUERGX0FycmF5KilwRGlyZWN0T2JqOw0KLQkJCQlDUERGX1JlZmVyZW5jZSogcFJlZiA9IEZYX05FVyBDUERGX1JlZmVyZW5jZShwRG9jLCBwU3RyZWFtLT5HZXRPYmpOdW0oKSk7DQotCQkJCXBDb250ZW50QXJyYXktPkluc2VydEF0KDAsIHBSZWYpOw0KLQkJCQlwQ29udGVudEFycmF5LT5BZGRSZWZlcmVuY2UocERvYyxwRW5kU3RyZWFtKTsNCi0JCQkJDQotCQkJfQ0KLQkJCWVsc2UgaWYocERpcmVjdE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJFQU0pDQotCQkJew0KLQkJCQlwQ29udGVudEFycmF5ID0gRlhfTkVXIENQREZfQXJyYXkoKTsNCi0JCQkJcENvbnRlbnRBcnJheS0+QWRkUmVmZXJlbmNlKHBEb2MscFN0cmVhbS0+R2V0T2JqTnVtKCkpOw0KLQkJCQlwQ29udGVudEFycmF5LT5BZGRSZWZlcmVuY2UocERvYyxwRGlyZWN0T2JqLT5HZXRPYmpOdW0oKSk7DQotCQkJCXBDb250ZW50QXJyYXktPkFkZFJlZmVyZW5jZShwRG9jLCBwRW5kU3RyZWFtKTsNCi0JCQkJcFBhZ2VEaWMtPlNldEF0UmVmZXJlbmNlKCJDb250ZW50cyIsIHBEb2MsIHBEb2MtPkFkZEluZGlyZWN0T2JqZWN0KHBDb250ZW50QXJyYXkpKTsNCi0JCQl9DQotCQl9DQotCX0JDQotDQotCS8vTmVlZCB0byB0cmFuc2Zvcm0gdGhlIHBhdHRlcm5zIGFzIHdlbGwuDQotCUNQREZfRGljdGlvbmFyeSogcFJlcyA9IHBQYWdlRGljLT5HZXREaWN0KEZYX0JTVFJDKCJSZXNvdXJjZXMiKSk7DQotCWlmKHBSZXMpDQotCXsNCi0JCUNQREZfRGljdGlvbmFyeSogcFBhdHRlbkRpY3QgPSBwUmVzLT5HZXREaWN0KEZYX0JTVFJDKCJQYXR0ZXJuIikpOw0KLQkJaWYocFBhdHRlbkRpY3QpDQotCQl7DQotCQkJRlhfUE9TSVRJT04gcG9zID0gcFBhdHRlbkRpY3QtPkdldFN0YXJ0UG9zKCk7DQotCQkJd2hpbGUocG9zKQ0KLQkJCXsNCi0JCQkJQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IE5VTEw7DQotCQkJCUNGWF9CeXRlU3RyaW5nIGtleTsNCi0JCQkJQ1BERl9PYmplY3QqIHBPYmogPSBwUGF0dGVuRGljdC0+R2V0TmV4dEVsZW1lbnQocG9zLCBrZXkpOw0KLQkJCQlpZihwT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX1JFRkVSRU5DRSkNCi0JCQkJCXBPYmogPSBwT2JqLT5HZXREaXJlY3QoKTsNCi0JCQkJaWYocE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKQ0KLQkJCQl7DQotCQkJCQlwRGljdCA9IChDUERGX0RpY3Rpb25hcnkqKXBPYmo7DQotCQkJCX0NCi0JCQkJZWxzZSBpZihwT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUkVBTSkNCi0JCQkJew0KLQkJCQkJcERpY3QgPSAoKENQREZfU3RyZWFtKilwT2JqKS0+R2V0RGljdCgpOw0KLQkJCQl9DQotCQkJCWVsc2UNCi0JCQkJCWNvbnRpbnVlOw0KLQkJCQkNCi0JCQkJQ0ZYX0FmZmluZU1hdHJpeCBtID0gcERpY3QtPkdldE1hdHJpeChGWF9CU1RSQygiTWF0cml4IikpOw0KLQkJCQlDRlhfQWZmaW5lTWF0cml4IHQgPSAqKENGWF9BZmZpbmVNYXRyaXgqKW1hdHJpeDsNCi0JCQkJbS5Db25jYXQodCk7DQotCQkJCXBEaWN0LT5TZXRBdE1hdHJpeChGWF9CU1RSQygiTWF0cml4IiksIG0pOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGUGFnZU9ial9UcmFuc2Zvcm1DbGlwUGF0aChGUERGX1BBR0VPQkpFQ1QgcGFnZV9vYmplY3QsZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZikNCi17DQotCUNQREZfUGFnZU9iamVjdCogcFBhZ2VPYmogPSAoQ1BERl9QYWdlT2JqZWN0KilwYWdlX29iamVjdDsNCi0JaWYocFBhZ2VPYmogPT0gTlVMTCkNCi0JCXJldHVybjsNCi0JQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXgoKEZYX0ZMT0FUKWEsKEZYX0ZMT0FUKWIsKEZYX0ZMT0FUKWMsKEZYX0ZMT0FUKWQsKEZYX0ZMT0FUKWUsKEZYX0ZMT0FUKWYpOw0KLQkNCi0JLy9TcGVjaWFsIHRyZWF0bWVudCB0byBzaGFkaW5nIG9iamVjdCwgYmVjYXVzZSB0aGUgQ2xpcFBhdGggZm9yIHNoYWRpbmcgb2JqZWN0IGlzIGFscmVhZHkgdHJhbnNmb3JtZWQuDQotCWlmKHBQYWdlT2JqLT5tX1R5cGUgIT0gUERGUEFHRV9TSEFESU5HKQ0KLQkJcFBhZ2VPYmotPlRyYW5zZm9ybUNsaXBQYXRoKG1hdHJpeCk7DQotCXBQYWdlT2JqLT5UcmFuc2Zvcm1HZW5lcmFsU3RhdGUobWF0cml4KTsNCi19DQotDQotDQotRExMRVhQT1JUIEZQREZfQ0xJUFBBVEggU1REQ0FMTCBGUERGX0NyZWF0ZUNsaXBQYXRoKGZsb2F0IGxlZnQsIGZsb2F0IGJvdHRvbSwgZmxvYXQgcmlnaHQsIGZsb2F0IHRvcCkNCi17DQotCUNQREZfQ2xpcFBhdGgqIHBOZXdDbGlwUGF0aCA9ICBGWF9ORVcgQ1BERl9DbGlwUGF0aCgpOw0KLQlwTmV3Q2xpcFBhdGgtPkdldE1vZGlmeSgpOw0KLQlDUERGX1BhdGggUGF0aDsNCi0JUGF0aC5HZXRNb2RpZnkoKTsNCi0JUGF0aC5BcHBlbmRSZWN0KGxlZnQsIGJvdHRvbSwgcmlnaHQsIHRvcCk7DQotCXBOZXdDbGlwUGF0aC0+QXBwZW5kUGF0aChQYXRoLCBGWEZJTExfQUxURVJOQVRFLCBGQUxTRSk7DQotCXJldHVybiBwTmV3Q2xpcFBhdGg7DQotfQ0KLQ0KLURMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERl9EZXN0cm95Q2xpcFBhdGgoRlBERl9DTElQUEFUSCBjbGlwUGF0aCkNCi17DQotCWlmKGNsaXBQYXRoKQ0KLQkJZGVsZXRlIChDUERGX0NsaXBQYXRoKiljbGlwUGF0aDsNCi19DQotDQotdm9pZCBPdXRwdXRQYXRoKENGWF9CeXRlVGV4dEJ1ZiYgYnVmLCBDUERGX1BhdGggcGF0aCkNCi17DQotCWNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhID0gcGF0aDsNCi0JaWYgKHBQYXRoRGF0YSA9PSBOVUxMKSByZXR1cm47DQotCQ0KLQlGWF9QQVRIUE9JTlQqIHBQb2ludHMgPSBwUGF0aERhdGEtPkdldFBvaW50cygpOw0KLQkNCi0JaWYgKHBhdGguSXNSZWN0KCkpIHsNCi0JCWJ1ZiA8PCAocFBvaW50c1swXS5tX1BvaW50WCkgPDwgIiAiIDw8IChwUG9pbnRzWzBdLm1fUG9pbnRZKSA8PCAiICIgDQotCQkJPDwgKHBQb2ludHNbMl0ubV9Qb2ludFggLSBwUG9pbnRzWzBdLm1fUG9pbnRYKSA8PCAiICIgDQotCQkJPDwgKHBQb2ludHNbMl0ubV9Qb2ludFkgLSBwUG9pbnRzWzBdLm1fUG9pbnRZKSA8PCAiIHJlXG4iOw0KLQkJcmV0dXJuOw0KLQl9DQotCQ0KLQlDRlhfQnl0ZVN0cmluZyB0ZW1wOw0KLQlmb3IgKGludCBpID0gMDsgaSA8IHBQYXRoRGF0YS0+R2V0UG9pbnRDb3VudCgpOyBpICsrKSB7DQotCQlidWYgPDwgKHBQb2ludHNbaV0ubV9Qb2ludFgpIDw8ICIgIiA8PCAocFBvaW50c1tpXS5tX1BvaW50WSk7DQotCQlpbnQgcG9pbnRfdHlwZSA9IHBQb2ludHNbaV0ubV9GbGFnICYgRlhQVF9UWVBFOw0KLQkJaWYgKHBvaW50X3R5cGUgPT0gRlhQVF9NT1ZFVE8pDQotCQkJYnVmIDw8ICIgbVxuIjsNCi0JCWVsc2UgaWYgKHBvaW50X3R5cGUgPT0gRlhQVF9CRVpJRVJUTykgew0KLQkJCWJ1ZiA8PCAiICIgPDwgKHBQb2ludHNbaSsxXS5tX1BvaW50WCkgPDwgIiAiIDw8IChwUG9pbnRzW2krMV0ubV9Qb2ludFkpIDw8ICIgIiA8PCANCi0JCQkJKHBQb2ludHNbaSsyXS5tX1BvaW50WCkgPDwgIiAiIDw8IChwUG9pbnRzW2krMl0ubV9Qb2ludFkpOw0KLQkJCWlmIChwUG9pbnRzW2krMl0ubV9GbGFnICYgRlhQVF9DTE9TRUZJR1VSRSkNCi0JCQkJYnVmIDw8ICIgYyBoXG4iOw0KLQkJCWVsc2UNCi0JCQkJYnVmIDw8ICIgY1xuIjsNCi0JCQlpICs9IDI7DQotCQl9IGVsc2UgaWYgKHBvaW50X3R5cGUgPT0gRlhQVF9MSU5FVE8pIHsNCi0JCQlpZiAocFBvaW50c1tpXS5tX0ZsYWcgJiBGWFBUX0NMT1NFRklHVVJFKQ0KLQkJCQlidWYgPDwgIiBsIGhcbiI7DQotCQkJZWxzZQ0KLQkJCQlidWYgPDwgIiBsXG4iOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLURMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERlBhZ2VfSW5zZXJ0Q2xpcFBhdGgoRlBERl9QQUdFIHBhZ2UsRlBERl9DTElQUEFUSCBjbGlwUGF0aCkNCi17DQotCWlmKCFwYWdlKQ0KLQkJcmV0dXJuOw0KLQlDUERGX1BhZ2UqIHBQYWdlID0gKENQREZfUGFnZSopcGFnZTsNCi0JQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpYyA9IHBQYWdlLT5tX3BGb3JtRGljdDsNCi0JQ1BERl9PYmplY3QqIHBDb250ZW50T2JqID0gcFBhZ2VEaWMtPkdldEVsZW1lbnQoIkNvbnRlbnRzIik7DQotCWlmKCFwQ29udGVudE9iaikNCi0JCXBDb250ZW50T2JqID0gcFBhZ2VEaWMtPkdldEFycmF5KCJDb250ZW50cyIpOw0KLQlpZighcENvbnRlbnRPYmopDQotCQlyZXR1cm47DQotDQotCUNGWF9CeXRlVGV4dEJ1ZiBzdHJDbGlwOw0KLQlDUERGX0NsaXBQYXRoKiBwQ2xpcFBhdGggPSAoQ1BERl9DbGlwUGF0aCopY2xpcFBhdGg7DQotCUZYX0RXT1JEIGk7DQotCWZvciAoaSA9IDA7IGkgPCBwQ2xpcFBhdGgtPkdldFBhdGhDb3VudCgpOyBpICsrKSB7DQotCQlDUERGX1BhdGggcGF0aCA9IHBDbGlwUGF0aC0+R2V0UGF0aChpKTsNCi0JCWludCBpQ2xpcFR5cGUgPSBwQ2xpcFBhdGgtPkdldENsaXBUeXBlKGkpOw0KLQkJaWYgKHBhdGguR2V0UG9pbnRDb3VudCgpID09IDApIHsNCi0JCQkvLyBFbXB0eSBjbGlwcGluZyAodG90YWxseSBjbGlwcGVkIG91dCkNCi0JCQlzdHJDbGlwIDw8ICIwIDAgbSBXIG4gIjsNCi0JCX0gZWxzZSB7DQotCQkJT3V0cHV0UGF0aChzdHJDbGlwLCBwYXRoKTsNCi0JCQlpZiAoaUNsaXBUeXBlID09IEZYRklMTF9XSU5ESU5HKQ0KLQkJCQlzdHJDbGlwIDw8ICJXIG5cbiI7DQotCQkJZWxzZQ0KLQkJCQlzdHJDbGlwIDw8ICJXKiBuXG4iOw0KLQkJfQ0KLQl9DQotCUNQREZfRGljdGlvbmFyeSogcERpYyA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7DQotCUNQREZfU3RyZWFtKiBwU3RyZWFtID0gRlhfTkVXIENQREZfU3RyZWFtKE5VTEwsMCwgcERpYyk7DQotCXBTdHJlYW0tPlNldERhdGEoc3RyQ2xpcC5HZXRCdWZmZXIoKSwgc3RyQ2xpcC5HZXRTaXplKCksIEZBTFNFLCBGQUxTRSk7DQotCUNQREZfRG9jdW1lbnQqIHBEb2MgPSBwUGFnZS0+bV9wRG9jdW1lbnQ7DQotCWlmKCFwRG9jKQ0KLQkJcmV0dXJuOw0KLQlwRG9jLT5BZGRJbmRpcmVjdE9iamVjdChwU3RyZWFtKTsNCi0JDQotCUNQREZfQXJyYXkqIHBDb250ZW50QXJyYXkgPSBOVUxMOw0KLQlpZiAocENvbnRlbnRPYmogJiYgcENvbnRlbnRPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpDQotCXsNCi0JCXBDb250ZW50QXJyYXkgPSAoQ1BERl9BcnJheSopcENvbnRlbnRPYmo7DQotCQlDUERGX1JlZmVyZW5jZSogcFJlZiA9IEZYX05FVyBDUERGX1JlZmVyZW5jZShwRG9jLCBwU3RyZWFtLT5HZXRPYmpOdW0oKSk7DQotCQlwQ29udGVudEFycmF5LT5JbnNlcnRBdCgwLCBwUmVmKTsNCi0JCQ0KLQl9DQotCWVsc2UgaWYocENvbnRlbnRPYmogJiYgcENvbnRlbnRPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfUkVGRVJFTkNFKQ0KLQl7DQotCQlDUERGX1JlZmVyZW5jZSogcFJlZmVyZW5jZSA9IChDUERGX1JlZmVyZW5jZSopcENvbnRlbnRPYmo7DQotCQlDUERGX09iamVjdCogcERpcmVjdE9iaiA9IHBSZWZlcmVuY2UtPkdldERpcmVjdCgpOw0KLQkJaWYocERpcmVjdE9iaiAhPSBOVUxMKQ0KLQkJew0KLQkJCWlmKHBEaXJlY3RPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpDQotCQkJew0KLQkJCQlwQ29udGVudEFycmF5ID0gKENQREZfQXJyYXkqKXBEaXJlY3RPYmo7DQotCQkJCUNQREZfUmVmZXJlbmNlKiBwUmVmID0gRlhfTkVXIENQREZfUmVmZXJlbmNlKHBEb2MsIHBTdHJlYW0tPkdldE9iak51bSgpKTsNCi0JCQkJcENvbnRlbnRBcnJheS0+SW5zZXJ0QXQoMCwgcFJlZik7DQotCQkJCQ0KLQkJCX0NCi0JCQllbHNlIGlmKHBEaXJlY3RPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSRUFNKQ0KLQkJCXsNCi0JCQkJcENvbnRlbnRBcnJheSA9IEZYX05FVyBDUERGX0FycmF5KCk7DQotCQkJCXBDb250ZW50QXJyYXktPkFkZFJlZmVyZW5jZShwRG9jLHBTdHJlYW0tPkdldE9iak51bSgpKTsNCi0JCQkJcENvbnRlbnRBcnJheS0+QWRkUmVmZXJlbmNlKHBEb2MscERpcmVjdE9iai0+R2V0T2JqTnVtKCkpOw0KLQkJCQlwUGFnZURpYy0+U2V0QXRSZWZlcmVuY2UoIkNvbnRlbnRzIiwgcERvYywgcERvYy0+QWRkSW5kaXJlY3RPYmplY3QocENvbnRlbnRBcnJheSkpOw0KLQkJCX0NCi0JCX0NCi0JfQkNCi19DQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19kZWZpbmUuaCIKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2ZwZGZfdHJhbnNmb3JtcGFnZS5oIgorCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZQYWdlX1NldE1lZGlhQm94KEZQREZfUEFHRSBwYWdlLCBmbG9hdCBsZWZ0LCBmbG9hdCBib3R0b20sIGZsb2F0IHJpZ2h0LCBmbG9hdCB0b3ApCit7CisJaWYoIXBhZ2UpCisJCXJldHVybjsKKwlDUERGX1BhZ2UqIHBQYWdlID0gKENQREZfUGFnZSopcGFnZTsKKwlDUERGX0RpY3Rpb25hcnkqIHBQYWdlRGljdCA9IHBQYWdlLT5tX3BGb3JtRGljdDsKKwlDUERGX0FycmF5KiBwTWVkaWFCb3hBcnJheSA9IEZYX05FVyBDUERGX0FycmF5OworCXBNZWRpYUJveEFycmF5LT5BZGQoRlhfTkVXIENQREZfTnVtYmVyKGxlZnQpKTsKKwlwTWVkaWFCb3hBcnJheS0+QWRkKEZYX05FVyBDUERGX051bWJlcihib3R0b20pKTsKKwlwTWVkaWFCb3hBcnJheS0+QWRkKEZYX05FVyBDUERGX051bWJlcihGWF9GTE9BVChyaWdodCkpKTsKKwlwTWVkaWFCb3hBcnJheS0+QWRkKEZYX05FVyBDUERGX051bWJlcihGWF9GTE9BVCh0b3ApKSk7CisJCisJcFBhZ2VEaWN0LT5TZXRBdCgiTWVkaWFCb3giLCBwTWVkaWFCb3hBcnJheSk7Cit9CisKKworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGUGFnZV9TZXRDcm9wQm94KEZQREZfUEFHRSBwYWdlLCBmbG9hdCBsZWZ0LCBmbG9hdCBib3R0b20sIGZsb2F0IHJpZ2h0LCBmbG9hdCB0b3ApCit7CisJaWYoIXBhZ2UpCisJCXJldHVybjsKKwlDUERGX1BhZ2UqIHBQYWdlID0gKENQREZfUGFnZSopcGFnZTsKKwlDUERGX0RpY3Rpb25hcnkqIHBQYWdlRGljdCA9IHBQYWdlLT5tX3BGb3JtRGljdDsKKwlDUERGX0FycmF5KiBwQ3JvcEJveEFycmF5ID0gRlhfTkVXIENQREZfQXJyYXk7CisJcENyb3BCb3hBcnJheS0+QWRkKEZYX05FVyBDUERGX051bWJlcihsZWZ0KSk7CisJcENyb3BCb3hBcnJheS0+QWRkKEZYX05FVyBDUERGX051bWJlcihib3R0b20pKTsKKwlwQ3JvcEJveEFycmF5LT5BZGQoRlhfTkVXIENQREZfTnVtYmVyKEZYX0ZMT0FUKHJpZ2h0KSkpOworCXBDcm9wQm94QXJyYXktPkFkZChGWF9ORVcgQ1BERl9OdW1iZXIoRlhfRkxPQVQodG9wKSkpOworCQorCQorCXBQYWdlRGljdC0+U2V0QXQoIkNyb3BCb3giLCBwQ3JvcEJveEFycmF5KTsKK30KKworCitETExFWFBPUlQgRlhfQk9PTCBTVERDQUxMIEZQREZQYWdlX0dldE1lZGlhQm94KEZQREZfUEFHRSBwYWdlLCBmbG9hdCogbGVmdCwgZmxvYXQqIGJvdHRvbSwgZmxvYXQqIHJpZ2h0LCBmbG9hdCogdG9wKQoreworCWlmKCFwYWdlKQorCQlyZXR1cm4gRkFMU0U7CisJQ1BERl9QYWdlKiBwUGFnZSA9IChDUERGX1BhZ2UqKXBhZ2U7CisJQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QgPSBwUGFnZS0+bV9wRm9ybURpY3Q7CisJQ1BERl9BcnJheSogcEFycmF5ID0gcFBhZ2VEaWN0LT5HZXRBcnJheSgiTWVkaWFCb3giKTsKKwlpZihwQXJyYXkpCisJeworCQkqbGVmdCA9IHBBcnJheS0+R2V0RmxvYXQoMCk7CisJCSpib3R0b20gPSBwQXJyYXktPkdldEZsb2F0KDEpOworCQkqcmlnaHQgPSBwQXJyYXktPkdldEZsb2F0KDIpOworCQkqdG9wID0gcEFycmF5LT5HZXRGbG9hdCgzKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCXJldHVybiBGQUxTRTsKK30KKworRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZQYWdlX0dldENyb3BCb3goRlBERl9QQUdFIHBhZ2UsIGZsb2F0KiBsZWZ0LCBmbG9hdCogYm90dG9tLCBmbG9hdCogcmlnaHQsIGZsb2F0KiB0b3ApCit7CisJaWYoIXBhZ2UpCisJCXJldHVybiBGQUxTRTsKKwlDUERGX1BhZ2UqIHBQYWdlID0gKENQREZfUGFnZSopcGFnZTsKKwlDUERGX0RpY3Rpb25hcnkqIHBQYWdlRGljdCA9IHBQYWdlLT5tX3BGb3JtRGljdDsKKwlDUERGX0FycmF5KiBwQXJyYXkgPSBwUGFnZURpY3QtPkdldEFycmF5KCJDcm9wQm94Iik7CisJaWYocEFycmF5KQorCXsKKwkJKmxlZnQgPSBwQXJyYXktPkdldEZsb2F0KDApOworCQkqYm90dG9tID0gcEFycmF5LT5HZXRGbG9hdCgxKTsKKwkJKnJpZ2h0ID0gcEFycmF5LT5HZXRGbG9hdCgyKTsKKwkJKnRvcCA9IHBBcnJheS0+R2V0RmxvYXQoMyk7CisJCXJldHVybiBUUlVFOworCX0KKwlyZXR1cm4gRkFMU0U7Cit9CisKK0RMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGUGFnZV9UcmFuc0Zvcm1XaXRoQ2xpcChGUERGX1BBR0UgcGFnZSwgRlNfTUFUUklYKiBtYXRyaXgsIEZTX1JFQ1RGKiBjbGlwUmVjdCkKK3sKKwlpZighcGFnZSkKKwkJcmV0dXJuIEZBTFNFOworCisJQ0ZYX0J5dGVUZXh0QnVmIHRleHRCdWY7CisJdGV4dEJ1Zjw8InEgIjsKKwlDRlhfRmxvYXRSZWN0IHJlY3QoY2xpcFJlY3QtPmxlZnQsIGNsaXBSZWN0LT5ib3R0b20sIGNsaXBSZWN0LT5yaWdodCwgY2xpcFJlY3QtPnRvcCk7CisJcmVjdC5Ob3JtYWxpemUoKTsKKwlDRlhfQnl0ZVN0cmluZyBic0NsaXBwaW5nOworCWJzQ2xpcHBpbmcuRm9ybWF0KCIlZiAlZiAlZiAlZiByZSBXKiBuICIsIHJlY3QubGVmdCwgcmVjdC5ib3R0b20sIHJlY3QuV2lkdGgoKSwgcmVjdC5IZWlnaHQoKSk7CisJdGV4dEJ1Zjw8YnNDbGlwcGluZzsKKworCUNGWF9CeXRlU3RyaW5nIGJzTWF0aXg7CisJYnNNYXRpeC5Gb3JtYXQoIiVmICVmICVmICVmICVmICVmIGNtICIsIG1hdHJpeC0+YSwgbWF0cml4LT5iLG1hdHJpeC0+YyxtYXRyaXgtPmQsbWF0cml4LT5lLG1hdHJpeC0+Zik7CisJdGV4dEJ1Zjw8YnNNYXRpeDsKKwkKKworCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOworCUNQREZfRGljdGlvbmFyeSogcFBhZ2VEaWMgPSBwUGFnZS0+bV9wRm9ybURpY3Q7CisJQ1BERl9PYmplY3QqIHBDb250ZW50T2JqID0gcFBhZ2VEaWMtPkdldEVsZW1lbnQoIkNvbnRlbnRzIik7CisJaWYoIXBDb250ZW50T2JqKQorCQlwQ29udGVudE9iaiA9IHBQYWdlRGljLT5HZXRBcnJheSgiQ29udGVudHMiKTsKKwlpZighcENvbnRlbnRPYmopCisJCXJldHVybiBGQUxTRTsKKwkKKwlDUERGX0RpY3Rpb25hcnkqIHBEaWMgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5OworCUNQREZfU3RyZWFtKiBwU3RyZWFtID0gRlhfTkVXIENQREZfU3RyZWFtKE5VTEwsMCwgcERpYyk7CisJcFN0cmVhbS0+U2V0RGF0YSh0ZXh0QnVmLkdldEJ1ZmZlcigpLCB0ZXh0QnVmLkdldFNpemUoKSwgRkFMU0UsIEZBTFNFKTsKKwlDUERGX0RvY3VtZW50KiBwRG9jID0gcFBhZ2UtPm1fcERvY3VtZW50OworCWlmKCFwRG9jKQorCQlyZXR1cm4gRkFMU0U7CisJcERvYy0+QWRkSW5kaXJlY3RPYmplY3QocFN0cmVhbSk7CisKKwlwRGljID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsKKwlDUERGX1N0cmVhbSogcEVuZFN0cmVhbSA9IEZYX05FVyBDUERGX1N0cmVhbShOVUxMLDAsIHBEaWMpOworCXBFbmRTdHJlYW0tPlNldERhdGEoKEZYX0xQQ0JZVEUpIiBRIiwgMiwgRkFMU0UsIEZBTFNFKTsKKwlwRG9jLT5BZGRJbmRpcmVjdE9iamVjdChwRW5kU3RyZWFtKTsKKwkKKwlDUERGX0FycmF5KiBwQ29udGVudEFycmF5ID0gTlVMTDsKKwlpZiAocENvbnRlbnRPYmogJiYgcENvbnRlbnRPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpCisJeworCQlwQ29udGVudEFycmF5ID0gKENQREZfQXJyYXkqKXBDb250ZW50T2JqOworCQlDUERGX1JlZmVyZW5jZSogcFJlZiA9IEZYX05FVyBDUERGX1JlZmVyZW5jZShwRG9jLCBwU3RyZWFtLT5HZXRPYmpOdW0oKSk7CisJCXBDb250ZW50QXJyYXktPkluc2VydEF0KDAsIHBSZWYpOworCQlwQ29udGVudEFycmF5LT5BZGRSZWZlcmVuY2UocERvYyxwRW5kU3RyZWFtKTsKKwkJCisJfQorCWVsc2UgaWYocENvbnRlbnRPYmogJiYgcENvbnRlbnRPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfUkVGRVJFTkNFKQorCXsKKwkJQ1BERl9SZWZlcmVuY2UqIHBSZWZlcmVuY2UgPSAoQ1BERl9SZWZlcmVuY2UqKXBDb250ZW50T2JqOworCQlDUERGX09iamVjdCogcERpcmVjdE9iaiA9IHBSZWZlcmVuY2UtPkdldERpcmVjdCgpOworCQlpZihwRGlyZWN0T2JqICE9IE5VTEwpCisJCXsKKwkJCWlmKHBEaXJlY3RPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfQVJSQVkpCisJCQl7CisJCQkJcENvbnRlbnRBcnJheSA9IChDUERGX0FycmF5KilwRGlyZWN0T2JqOworCQkJCUNQREZfUmVmZXJlbmNlKiBwUmVmID0gRlhfTkVXIENQREZfUmVmZXJlbmNlKHBEb2MsIHBTdHJlYW0tPkdldE9iak51bSgpKTsKKwkJCQlwQ29udGVudEFycmF5LT5JbnNlcnRBdCgwLCBwUmVmKTsKKwkJCQlwQ29udGVudEFycmF5LT5BZGRSZWZlcmVuY2UocERvYyxwRW5kU3RyZWFtKTsKKwkJCQkKKwkJCX0KKwkJCWVsc2UgaWYocERpcmVjdE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9TVFJFQU0pCisJCQl7CisJCQkJcENvbnRlbnRBcnJheSA9IEZYX05FVyBDUERGX0FycmF5KCk7CisJCQkJcENvbnRlbnRBcnJheS0+QWRkUmVmZXJlbmNlKHBEb2MscFN0cmVhbS0+R2V0T2JqTnVtKCkpOworCQkJCXBDb250ZW50QXJyYXktPkFkZFJlZmVyZW5jZShwRG9jLHBEaXJlY3RPYmotPkdldE9iak51bSgpKTsKKwkJCQlwQ29udGVudEFycmF5LT5BZGRSZWZlcmVuY2UocERvYywgcEVuZFN0cmVhbSk7CisJCQkJcFBhZ2VEaWMtPlNldEF0UmVmZXJlbmNlKCJDb250ZW50cyIsIHBEb2MsIHBEb2MtPkFkZEluZGlyZWN0T2JqZWN0KHBDb250ZW50QXJyYXkpKTsKKwkJCX0KKwkJfQorCX0JCisKKwkvL05lZWQgdG8gdHJhbnNmb3JtIHRoZSBwYXR0ZXJucyBhcyB3ZWxsLgorCUNQREZfRGljdGlvbmFyeSogcFJlcyA9IHBQYWdlRGljLT5HZXREaWN0KEZYX0JTVFJDKCJSZXNvdXJjZXMiKSk7CisJaWYocFJlcykKKwl7CisJCUNQREZfRGljdGlvbmFyeSogcFBhdHRlbkRpY3QgPSBwUmVzLT5HZXREaWN0KEZYX0JTVFJDKCJQYXR0ZXJuIikpOworCQlpZihwUGF0dGVuRGljdCkKKwkJeworCQkJRlhfUE9TSVRJT04gcG9zID0gcFBhdHRlbkRpY3QtPkdldFN0YXJ0UG9zKCk7CisJCQl3aGlsZShwb3MpCisJCQl7CisJCQkJQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IE5VTEw7CisJCQkJQ0ZYX0J5dGVTdHJpbmcga2V5OworCQkJCUNQREZfT2JqZWN0KiBwT2JqID0gcFBhdHRlbkRpY3QtPkdldE5leHRFbGVtZW50KHBvcywga2V5KTsKKwkJCQlpZihwT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX1JFRkVSRU5DRSkKKwkJCQkJcE9iaiA9IHBPYmotPkdldERpcmVjdCgpOworCQkJCWlmKHBPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfRElDVElPTkFSWSkKKwkJCQl7CisJCQkJCXBEaWN0ID0gKENQREZfRGljdGlvbmFyeSopcE9iajsKKwkJCQl9CisJCQkJZWxzZSBpZihwT2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUkVBTSkKKwkJCQl7CisJCQkJCXBEaWN0ID0gKChDUERGX1N0cmVhbSopcE9iaiktPkdldERpY3QoKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCQljb250aW51ZTsKKwkJCQkKKwkJCQlDRlhfQWZmaW5lTWF0cml4IG0gPSBwRGljdC0+R2V0TWF0cml4KEZYX0JTVFJDKCJNYXRyaXgiKSk7CisJCQkJQ0ZYX0FmZmluZU1hdHJpeCB0ID0gKihDRlhfQWZmaW5lTWF0cml4KiltYXRyaXg7CisJCQkJbS5Db25jYXQodCk7CisJCQkJcERpY3QtPlNldEF0TWF0cml4KEZYX0JTVFJDKCJNYXRyaXgiKSwgbSk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGUGFnZU9ial9UcmFuc2Zvcm1DbGlwUGF0aChGUERGX1BBR0VPQkpFQ1QgcGFnZV9vYmplY3QsZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZikKK3sKKwlDUERGX1BhZ2VPYmplY3QqIHBQYWdlT2JqID0gKENQREZfUGFnZU9iamVjdCopcGFnZV9vYmplY3Q7CisJaWYocFBhZ2VPYmogPT0gTlVMTCkKKwkJcmV0dXJuOworCUNGWF9BZmZpbmVNYXRyaXggbWF0cml4KChGWF9GTE9BVClhLChGWF9GTE9BVCliLChGWF9GTE9BVCljLChGWF9GTE9BVClkLChGWF9GTE9BVCllLChGWF9GTE9BVClmKTsKKwkKKwkvL1NwZWNpYWwgdHJlYXRtZW50IHRvIHNoYWRpbmcgb2JqZWN0LCBiZWNhdXNlIHRoZSBDbGlwUGF0aCBmb3Igc2hhZGluZyBvYmplY3QgaXMgYWxyZWFkeSB0cmFuc2Zvcm1lZC4KKwlpZihwUGFnZU9iai0+bV9UeXBlICE9IFBERlBBR0VfU0hBRElORykKKwkJcFBhZ2VPYmotPlRyYW5zZm9ybUNsaXBQYXRoKG1hdHJpeCk7CisJcFBhZ2VPYmotPlRyYW5zZm9ybUdlbmVyYWxTdGF0ZShtYXRyaXgpOworfQorCisKK0RMTEVYUE9SVCBGUERGX0NMSVBQQVRIIFNURENBTEwgRlBERl9DcmVhdGVDbGlwUGF0aChmbG9hdCBsZWZ0LCBmbG9hdCBib3R0b20sIGZsb2F0IHJpZ2h0LCBmbG9hdCB0b3ApCit7CisJQ1BERl9DbGlwUGF0aCogcE5ld0NsaXBQYXRoID0gIEZYX05FVyBDUERGX0NsaXBQYXRoKCk7CisJcE5ld0NsaXBQYXRoLT5HZXRNb2RpZnkoKTsKKwlDUERGX1BhdGggUGF0aDsKKwlQYXRoLkdldE1vZGlmeSgpOworCVBhdGguQXBwZW5kUmVjdChsZWZ0LCBib3R0b20sIHJpZ2h0LCB0b3ApOworCXBOZXdDbGlwUGF0aC0+QXBwZW5kUGF0aChQYXRoLCBGWEZJTExfQUxURVJOQVRFLCBGQUxTRSk7CisJcmV0dXJuIHBOZXdDbGlwUGF0aDsKK30KKworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX0Rlc3Ryb3lDbGlwUGF0aChGUERGX0NMSVBQQVRIIGNsaXBQYXRoKQoreworCWlmKGNsaXBQYXRoKQorCQlkZWxldGUgKENQREZfQ2xpcFBhdGgqKWNsaXBQYXRoOworfQorCit2b2lkIE91dHB1dFBhdGgoQ0ZYX0J5dGVUZXh0QnVmJiBidWYsIENQREZfUGF0aCBwYXRoKQoreworCWNvbnN0IENGWF9QYXRoRGF0YSogcFBhdGhEYXRhID0gcGF0aDsKKwlpZiAocFBhdGhEYXRhID09IE5VTEwpIHJldHVybjsKKwkKKwlGWF9QQVRIUE9JTlQqIHBQb2ludHMgPSBwUGF0aERhdGEtPkdldFBvaW50cygpOworCQorCWlmIChwYXRoLklzUmVjdCgpKSB7CisJCWJ1ZiA8PCAocFBvaW50c1swXS5tX1BvaW50WCkgPDwgIiAiIDw8IChwUG9pbnRzWzBdLm1fUG9pbnRZKSA8PCAiICIgCisJCQk8PCAocFBvaW50c1syXS5tX1BvaW50WCAtIHBQb2ludHNbMF0ubV9Qb2ludFgpIDw8ICIgIiAKKwkJCTw8IChwUG9pbnRzWzJdLm1fUG9pbnRZIC0gcFBvaW50c1swXS5tX1BvaW50WSkgPDwgIiByZVxuIjsKKwkJcmV0dXJuOworCX0KKwkKKwlDRlhfQnl0ZVN0cmluZyB0ZW1wOworCWZvciAoaW50IGkgPSAwOyBpIDwgcFBhdGhEYXRhLT5HZXRQb2ludENvdW50KCk7IGkgKyspIHsKKwkJYnVmIDw8IChwUG9pbnRzW2ldLm1fUG9pbnRYKSA8PCAiICIgPDwgKHBQb2ludHNbaV0ubV9Qb2ludFkpOworCQlpbnQgcG9pbnRfdHlwZSA9IHBQb2ludHNbaV0ubV9GbGFnICYgRlhQVF9UWVBFOworCQlpZiAocG9pbnRfdHlwZSA9PSBGWFBUX01PVkVUTykKKwkJCWJ1ZiA8PCAiIG1cbiI7CisJCWVsc2UgaWYgKHBvaW50X3R5cGUgPT0gRlhQVF9CRVpJRVJUTykgeworCQkJYnVmIDw8ICIgIiA8PCAocFBvaW50c1tpKzFdLm1fUG9pbnRYKSA8PCAiICIgPDwgKHBQb2ludHNbaSsxXS5tX1BvaW50WSkgPDwgIiAiIDw8IAorCQkJCShwUG9pbnRzW2krMl0ubV9Qb2ludFgpIDw8ICIgIiA8PCAocFBvaW50c1tpKzJdLm1fUG9pbnRZKTsKKwkJCWlmIChwUG9pbnRzW2krMl0ubV9GbGFnICYgRlhQVF9DTE9TRUZJR1VSRSkKKwkJCQlidWYgPDwgIiBjIGhcbiI7CisJCQllbHNlCisJCQkJYnVmIDw8ICIgY1xuIjsKKwkJCWkgKz0gMjsKKwkJfSBlbHNlIGlmIChwb2ludF90eXBlID09IEZYUFRfTElORVRPKSB7CisJCQlpZiAocFBvaW50c1tpXS5tX0ZsYWcgJiBGWFBUX0NMT1NFRklHVVJFKQorCQkJCWJ1ZiA8PCAiIGwgaFxuIjsKKwkJCWVsc2UKKwkJCQlidWYgPDwgIiBsXG4iOworCQl9CisJfQorfQorCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZQYWdlX0luc2VydENsaXBQYXRoKEZQREZfUEFHRSBwYWdlLEZQREZfQ0xJUFBBVEggY2xpcFBhdGgpCit7CisJaWYoIXBhZ2UpCisJCXJldHVybjsKKwlDUERGX1BhZ2UqIHBQYWdlID0gKENQREZfUGFnZSopcGFnZTsKKwlDUERGX0RpY3Rpb25hcnkqIHBQYWdlRGljID0gcFBhZ2UtPm1fcEZvcm1EaWN0OworCUNQREZfT2JqZWN0KiBwQ29udGVudE9iaiA9IHBQYWdlRGljLT5HZXRFbGVtZW50KCJDb250ZW50cyIpOworCWlmKCFwQ29udGVudE9iaikKKwkJcENvbnRlbnRPYmogPSBwUGFnZURpYy0+R2V0QXJyYXkoIkNvbnRlbnRzIik7CisJaWYoIXBDb250ZW50T2JqKQorCQlyZXR1cm47CisKKwlDRlhfQnl0ZVRleHRCdWYgc3RyQ2xpcDsKKwlDUERGX0NsaXBQYXRoKiBwQ2xpcFBhdGggPSAoQ1BERl9DbGlwUGF0aCopY2xpcFBhdGg7CisJRlhfRFdPUkQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcENsaXBQYXRoLT5HZXRQYXRoQ291bnQoKTsgaSArKykgeworCQlDUERGX1BhdGggcGF0aCA9IHBDbGlwUGF0aC0+R2V0UGF0aChpKTsKKwkJaW50IGlDbGlwVHlwZSA9IHBDbGlwUGF0aC0+R2V0Q2xpcFR5cGUoaSk7CisJCWlmIChwYXRoLkdldFBvaW50Q291bnQoKSA9PSAwKSB7CisJCQkvLyBFbXB0eSBjbGlwcGluZyAodG90YWxseSBjbGlwcGVkIG91dCkKKwkJCXN0ckNsaXAgPDwgIjAgMCBtIFcgbiAiOworCQl9IGVsc2UgeworCQkJT3V0cHV0UGF0aChzdHJDbGlwLCBwYXRoKTsKKwkJCWlmIChpQ2xpcFR5cGUgPT0gRlhGSUxMX1dJTkRJTkcpCisJCQkJc3RyQ2xpcCA8PCAiVyBuXG4iOworCQkJZWxzZQorCQkJCXN0ckNsaXAgPDwgIlcqIG5cbiI7CisJCX0KKwl9CisJQ1BERl9EaWN0aW9uYXJ5KiBwRGljID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsKKwlDUERGX1N0cmVhbSogcFN0cmVhbSA9IEZYX05FVyBDUERGX1N0cmVhbShOVUxMLDAsIHBEaWMpOworCXBTdHJlYW0tPlNldERhdGEoc3RyQ2xpcC5HZXRCdWZmZXIoKSwgc3RyQ2xpcC5HZXRTaXplKCksIEZBTFNFLCBGQUxTRSk7CisJQ1BERl9Eb2N1bWVudCogcERvYyA9IHBQYWdlLT5tX3BEb2N1bWVudDsKKwlpZighcERvYykKKwkJcmV0dXJuOworCXBEb2MtPkFkZEluZGlyZWN0T2JqZWN0KHBTdHJlYW0pOworCQorCUNQREZfQXJyYXkqIHBDb250ZW50QXJyYXkgPSBOVUxMOworCWlmIChwQ29udGVudE9iaiAmJiBwQ29udGVudE9iai0+R2V0VHlwZSgpID09IFBERk9CSl9BUlJBWSkKKwl7CisJCXBDb250ZW50QXJyYXkgPSAoQ1BERl9BcnJheSopcENvbnRlbnRPYmo7CisJCUNQREZfUmVmZXJlbmNlKiBwUmVmID0gRlhfTkVXIENQREZfUmVmZXJlbmNlKHBEb2MsIHBTdHJlYW0tPkdldE9iak51bSgpKTsKKwkJcENvbnRlbnRBcnJheS0+SW5zZXJ0QXQoMCwgcFJlZik7CisJCQorCX0KKwllbHNlIGlmKHBDb250ZW50T2JqICYmIHBDb250ZW50T2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX1JFRkVSRU5DRSkKKwl7CisJCUNQREZfUmVmZXJlbmNlKiBwUmVmZXJlbmNlID0gKENQREZfUmVmZXJlbmNlKilwQ29udGVudE9iajsKKwkJQ1BERl9PYmplY3QqIHBEaXJlY3RPYmogPSBwUmVmZXJlbmNlLT5HZXREaXJlY3QoKTsKKwkJaWYocERpcmVjdE9iaiAhPSBOVUxMKQorCQl7CisJCQlpZihwRGlyZWN0T2JqLT5HZXRUeXBlKCkgPT0gUERGT0JKX0FSUkFZKQorCQkJeworCQkJCXBDb250ZW50QXJyYXkgPSAoQ1BERl9BcnJheSopcERpcmVjdE9iajsKKwkJCQlDUERGX1JlZmVyZW5jZSogcFJlZiA9IEZYX05FVyBDUERGX1JlZmVyZW5jZShwRG9jLCBwU3RyZWFtLT5HZXRPYmpOdW0oKSk7CisJCQkJcENvbnRlbnRBcnJheS0+SW5zZXJ0QXQoMCwgcFJlZik7CisJCQkJCisJCQl9CisJCQllbHNlIGlmKHBEaXJlY3RPYmotPkdldFR5cGUoKSA9PSBQREZPQkpfU1RSRUFNKQorCQkJeworCQkJCXBDb250ZW50QXJyYXkgPSBGWF9ORVcgQ1BERl9BcnJheSgpOworCQkJCXBDb250ZW50QXJyYXktPkFkZFJlZmVyZW5jZShwRG9jLHBTdHJlYW0tPkdldE9iak51bSgpKTsKKwkJCQlwQ29udGVudEFycmF5LT5BZGRSZWZlcmVuY2UocERvYyxwRGlyZWN0T2JqLT5HZXRPYmpOdW0oKSk7CisJCQkJcFBhZ2VEaWMtPlNldEF0UmVmZXJlbmNlKCJDb250ZW50cyIsIHBEb2MsIHBEb2MtPkFkZEluZGlyZWN0T2JqZWN0KHBDb250ZW50QXJyYXkpKTsKKwkJCX0KKwkJfQorCX0JCit9CisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2ZwZGZkb2MuY3BwIGIvZnBkZnNkay9zcmMvZnBkZmRvYy5jcHAKaW5kZXggZDVkOTAwMC4uNGZhNmJhMiAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvZnBkZmRvYy5jcHAKKysrIGIvZnBkZnNkay9zcmMvZnBkZmRvYy5jcHAKQEAgLTEsMjU5ICsxLDI1OSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19kZWZpbmUuaCINCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mcGRmZG9jLmgiDQotDQotc3RhdGljIGludCB0aGlzX21vZHVsZSA9IDA7DQotDQotc3RhdGljIENQREZfQm9va21hcmsgRmluZEJvb2ttYXJrKENQREZfQm9va21hcmtUcmVlJiB0cmVlLCBDUERGX0Jvb2ttYXJrIFRoaXMsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiB0aXRsZSkNCi17DQotCWlmIChUaGlzICE9IE5VTEwpIHsNCi0JCS8vIEZpcnN0IGNoZWNrIHRoaXMgaXRlbQ0KLQkJQ0ZYX1dpZGVTdHJpbmcgdGhpc190aXRsZSA9IFRoaXMuR2V0VGl0bGUoKTsNCi0JCWlmICh0aGlzX3RpdGxlLkNvbXBhcmVOb0Nhc2UodGl0bGUpID09IDApDQotCQkJcmV0dXJuIFRoaXM7DQotCX0NCi0JLy8gZ28gaW50byBjaGlsZHJlbiBpdGVtcw0KLQlDUERGX0Jvb2ttYXJrIENoaWxkID0gdHJlZS5HZXRGaXJzdENoaWxkKFRoaXMpOw0KLQl3aGlsZSAoQ2hpbGQgIT0gTlVMTCkgew0KLQkJLy8gY2hlY2sgaWYgdGhpcyBpdGVtDQotCQlDUERGX0Jvb2ttYXJrIEZvdW5kID0gRmluZEJvb2ttYXJrKHRyZWUsIENoaWxkLCB0aXRsZSk7DQotCQlpZiAoRm91bmQpIHJldHVybiBGb3VuZDsNCi0JCUNoaWxkID0gdHJlZS5HZXROZXh0U2libGluZyhDaGlsZCk7DQotCX0NCi0JcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX0JPT0tNQVJLIFNURENBTEwgRlBERkJvb2ttYXJrX0ZpbmQoRlBERl9ET0NVTUVOVCBkb2N1bWVudCwgRlBERl9XSURFU1RSSU5HIHRpdGxlKQ0KLXsNCi0JaWYgKGRvY3VtZW50ID09IE5VTEwpIHJldHVybiBOVUxMOw0KLQlpZiAodGl0bGUgPT0gTlVMTCB8fCB0aXRsZVswXSA9PSAwKSByZXR1cm4gTlVMTDsNCi0NCi0JQ1BERl9Eb2N1bWVudCogcERvYyA9IChDUERGX0RvY3VtZW50Kilkb2N1bWVudDsNCi0JQ1BERl9Cb29rbWFya1RyZWUgdHJlZShwRG9jKTsNCi0NCi0JQ0ZYX1dpZGVTdHJpbmcgd3N0ciA9IENGWF9XaWRlU3RyaW5nOjpGcm9tVVRGMTZMRSh0aXRsZSk7DQotCXJldHVybiBGaW5kQm9va21hcmsodHJlZSwgTlVMTCwgd3N0cik7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX0RFU1QgU1REQ0FMTCBGUERGQm9va21hcmtfR2V0RGVzdChGUERGX0RPQ1VNRU5UIGRvY3VtZW50LCBGUERGX0JPT0tNQVJLIGJvb2ttYXJrKQ0KLXsNCi0JaWYgKGRvY3VtZW50ID09IE5VTEwpIHJldHVybiBOVUxMOw0KLQlpZiAoYm9va21hcmsgPT0gTlVMTCkgcmV0dXJuIE5VTEw7DQotDQotCUNQREZfQm9va21hcmsgQm9va21hcmsgPSAoQ1BERl9EaWN0aW9uYXJ5Kilib29rbWFyazsNCi0JQ1BERl9Eb2N1bWVudCogcERvYyA9IChDUERGX0RvY3VtZW50Kilkb2N1bWVudDsNCi0JQ1BERl9EZXN0IGRlc3QgPSBCb29rbWFyay5HZXREZXN0KHBEb2MpOw0KLQlpZiAoZGVzdCAhPSBOVUxMKSByZXR1cm4gZGVzdDsNCi0NCi0JLy8gSWYgdGhpcyBib29rbWFyayBpcyBub3QgZGlyZWN0bHkgYXNzb2NpYXRlZCB3aXRoIGEgZGVzdCwgd2UgdHJ5IHRvIGdldCBhY3Rpb24NCi0JQ1BERl9BY3Rpb24gQWN0aW9uID0gQm9va21hcmsuR2V0QWN0aW9uKCk7DQotCWlmIChBY3Rpb24gPT0gTlVMTCkgcmV0dXJuIE5VTEw7DQotCXJldHVybiBBY3Rpb24uR2V0RGVzdChwRG9jKTsNCi19DQotDQotRExMRVhQT1JUIEZQREZfQUNUSU9OIFNURENBTEwgRlBERkJvb2ttYXJrX0dldEFjdGlvbihGUERGX0JPT0tNQVJLIGJvb2ttYXJrKQ0KLXsNCi0JaWYgKGJvb2ttYXJrID09IE5VTEwpIHJldHVybiBOVUxMOw0KLQ0KLQlDUERGX0Jvb2ttYXJrIEJvb2ttYXJrID0gKENQREZfRGljdGlvbmFyeSopYm9va21hcms7DQotCXJldHVybiBCb29rbWFyay5HZXRBY3Rpb24oKTsNCi19DQotDQotRExMRVhQT1JUIHVuc2lnbmVkIGxvbmcgU1REQ0FMTCBGUERGQWN0aW9uX0dldFR5cGUoRlBERl9BQ1RJT04gYWN0aW9uKQ0KLXsNCi0JaWYgKGFjdGlvbiA9PSBOVUxMKSByZXR1cm4gMDsNCi0NCi0JQ1BERl9BY3Rpb24gQWN0aW9uID0gKENQREZfRGljdGlvbmFyeSopYWN0aW9uOw0KLQlDUERGX0FjdGlvbjo6QWN0aW9uVHlwZSB0eXBlID0gQWN0aW9uLkdldFR5cGUoKTsNCi0Jc3dpdGNoICh0eXBlKSB7DQotCWNhc2UgQ1BERl9BY3Rpb246OkdvVG86DQotCQlyZXR1cm4gUERGQUNUSU9OX0dPVE87DQotCWNhc2UgQ1BERl9BY3Rpb246OkdvVG9SOg0KLQkJcmV0dXJuIFBERkFDVElPTl9SRU1PVEVHT1RPOw0KLQljYXNlIENQREZfQWN0aW9uOjpVUkk6DQotCQlyZXR1cm4gUERGQUNUSU9OX1VSSTsNCi0JY2FzZSBDUERGX0FjdGlvbjo6TGF1bmNoOg0KLQkJcmV0dXJuIFBERkFDVElPTl9MQVVOQ0g7DQotCWRlZmF1bHQ6DQotCQlyZXR1cm4gUERGQUNUSU9OX1VOU1VQUE9SVEVEOw0KLQl9DQotCXJldHVybiBQREZBQ1RJT05fVU5TVVBQT1JURUQ7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX0RFU1QgU1REQ0FMTCBGUERGQWN0aW9uX0dldERlc3QoRlBERl9ET0NVTUVOVCBkb2N1bWVudCwgRlBERl9BQ1RJT04gYWN0aW9uKQ0KLXsNCi0JaWYgKGRvY3VtZW50ID09IE5VTEwpIHJldHVybiBOVUxMOw0KLQlpZiAoYWN0aW9uID09IE5VTEwpIHJldHVybiBOVUxMOw0KLQlDUERGX0RvY3VtZW50KiBwRG9jID0gKENQREZfRG9jdW1lbnQqKWRvY3VtZW50Ow0KLQlDUERGX0FjdGlvbiBBY3Rpb24gPSAoQ1BERl9EaWN0aW9uYXJ5KilhY3Rpb247DQotDQotCXJldHVybiBBY3Rpb24uR2V0RGVzdChwRG9jKTsNCi19DQotDQotRExMRVhQT1JUIHVuc2lnbmVkIGxvbmcgU1REQ0FMTCBGUERGQWN0aW9uX0dldFVSSVBhdGgoRlBERl9ET0NVTUVOVCBkb2N1bWVudCwgRlBERl9BQ1RJT04gYWN0aW9uLCANCi0JCQkJCQkJCQkJCSAgdm9pZCogYnVmZmVyLCB1bnNpZ25lZCBsb25nIGJ1ZmxlbikNCi17DQotCWlmIChkb2N1bWVudCA9PSBOVUxMKSByZXR1cm4gMDsNCi0JaWYgKGFjdGlvbiA9PSBOVUxMKSByZXR1cm4gMDsNCi0JQ1BERl9Eb2N1bWVudCogcERvYyA9IChDUERGX0RvY3VtZW50Kilkb2N1bWVudDsNCi0JQ1BERl9BY3Rpb24gQWN0aW9uID0gKENQREZfRGljdGlvbmFyeSopYWN0aW9uOw0KLQ0KLQlDRlhfQnl0ZVN0cmluZyBwYXRoID0gQWN0aW9uLkdldFVSSShwRG9jKTsNCi0JdW5zaWduZWQgbG9uZyBsZW4gPSBwYXRoLkdldExlbmd0aCgpICsgMTsNCi0JaWYgKGJ1ZmZlciAhPSBOVUxMICYmIGJ1ZmxlbiA+PSBsZW4pDQotCQlGWFNZU19tZW1jcHkoYnVmZmVyLCAoRlhfTFBDU1RSKXBhdGgsIGxlbik7DQotCXJldHVybiBsZW47DQotfQ0KLQ0KLURMTEVYUE9SVCB1bnNpZ25lZCBsb25nIFNURENBTEwgRlBERkRlc3RfR2V0UGFnZUluZGV4KEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsIEZQREZfREVTVCBkZXN0KQ0KLXsNCi0JaWYgKGRvY3VtZW50ID09IE5VTEwpIHJldHVybiAwOw0KLQlpZiAoZGVzdCA9PSBOVUxMKSByZXR1cm4gMDsNCi0JQ1BERl9Eb2N1bWVudCogcERvYyA9IChDUERGX0RvY3VtZW50Kilkb2N1bWVudDsNCi0JQ1BERl9EZXN0IERlc3QgPSAoQ1BERl9BcnJheSopZGVzdDsNCi0NCi0JcmV0dXJuIERlc3QuR2V0UGFnZUluZGV4KHBEb2MpOw0KLX0NCi0NCi1zdGF0aWMgdm9pZCBSZWxlYXNlTGlua0xpc3QoRlhfTFBWT0lEIGRhdGEpDQotew0KLQlkZWxldGUgKENQREZfTGlua0xpc3QqKWRhdGE7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX0xJTksgU1REQ0FMTCBGUERGTGlua19HZXRMaW5rQXRQb2ludChGUERGX1BBR0UgcGFnZSwgZG91YmxlIHgsIGRvdWJsZSB5KQ0KLXsNCi0JaWYgKHBhZ2UgPT0gTlVMTCkgcmV0dXJuIE5VTEw7DQotCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOw0KLQ0KLQkvLyBMaW5rIGxpc3QgaXMgc3RvcmVkIHdpdGggdGhlIGRvY3VtZW50DQotCUNQREZfRG9jdW1lbnQqIHBEb2MgPSBwUGFnZS0+bV9wRG9jdW1lbnQ7DQotCUNQREZfTGlua0xpc3QqIHBMaW5rTGlzdCA9IChDUERGX0xpbmtMaXN0KilwRG9jLT5HZXRQcml2YXRlRGF0YSgmdGhpc19tb2R1bGUpOw0KLQlpZiAocExpbmtMaXN0ID09IE5VTEwpIHsNCi0JCXBMaW5rTGlzdCA9IEZYX05FVyBDUERGX0xpbmtMaXN0KHBEb2MpOw0KLQkJcERvYy0+U2V0UHJpdmF0ZURhdGEoJnRoaXNfbW9kdWxlLCBwTGlua0xpc3QsIFJlbGVhc2VMaW5rTGlzdCk7DQotCX0NCi0NCi0JcmV0dXJuIHBMaW5rTGlzdC0+R2V0TGlua0F0UG9pbnQocFBhZ2UsIChGWF9GTE9BVCl4LCAoRlhfRkxPQVQpeSk7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX0RFU1QgU1REQ0FMTCBGUERGTGlua19HZXREZXN0KEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsIEZQREZfTElOSyBsaW5rKQ0KLXsNCi0JaWYgKGRvY3VtZW50ID09IE5VTEwpIHJldHVybiBOVUxMOw0KLQlDUERGX0RvY3VtZW50KiBwRG9jID0gKENQREZfRG9jdW1lbnQqKWRvY3VtZW50Ow0KLQlpZiAobGluayA9PSBOVUxMKSByZXR1cm4gTlVMTDsNCi0JQ1BERl9MaW5rIExpbmsgPSAoQ1BERl9EaWN0aW9uYXJ5KilsaW5rOw0KLQ0KLQlGUERGX0RFU1QgZGVzdCA9IExpbmsuR2V0RGVzdChwRG9jKTsNCi0JaWYgKGRlc3QpIHJldHVybiBkZXN0Ow0KLQ0KLQkvLyBJZiB0aGlzIGxpbmsgaXMgbm90IGRpcmVjdGx5IGFzc29jaWF0ZWQgd2l0aCBhIGRlc3QsIHdlIHRyeSB0byBnZXQgYWN0aW9uDQotCUNQREZfQWN0aW9uIEFjdGlvbiA9IExpbmsuR2V0QWN0aW9uKCk7DQotCWlmIChBY3Rpb24gPT0gTlVMTCkgcmV0dXJuIE5VTEw7DQotCXJldHVybiBBY3Rpb24uR2V0RGVzdChwRG9jKTsNCi19DQotDQotRExMRVhQT1JUIEZQREZfQUNUSU9OIFNURENBTEwgRlBERkxpbmtfR2V0QWN0aW9uKEZQREZfTElOSyBsaW5rKQ0KLXsNCi0JaWYgKGxpbmsgPT0gTlVMTCkgcmV0dXJuIE5VTEw7DQotCUNQREZfTGluayBMaW5rID0gKENQREZfRGljdGlvbmFyeSopbGluazsNCi0NCi0JcmV0dXJuIExpbmsuR2V0QWN0aW9uKCk7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGTGlua19FbnVtZXJhdGUoRlBERl9QQUdFIHBhZ2UsIGludCogc3RhcnRQb3MsIEZQREZfTElOSyogbGlua0Fubm90KQ0KLXsNCi0JaWYoIXBhZ2UgfHwgIXN0YXJ0UG9zIHx8ICFsaW5rQW5ub3QpDQotCQlyZXR1cm4gRkFMU0U7DQotCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOw0KLQlpZighcFBhZ2UtPm1fcEZvcm1EaWN0KSByZXR1cm4gRkFMU0U7DQotCUNQREZfQXJyYXkqIHBBbm5vdHMgPSBwUGFnZS0+bV9wRm9ybURpY3QtPkdldEFycmF5KCJBbm5vdHMiKTsNCi0JaWYoIXBBbm5vdHMpIHJldHVybiBGQUxTRTsNCi0JZm9yIChpbnQgaSA9ICpzdGFydFBvczsgaSA8IChpbnQpcEFubm90cy0+R2V0Q291bnQoKTsgaSArKykgew0KLQkJQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IChDUERGX0RpY3Rpb25hcnkqKXBBbm5vdHMtPkdldEVsZW1lbnRWYWx1ZShpKTsNCi0JCWlmIChwRGljdCA9PSBOVUxMIHx8IHBEaWN0LT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIGNvbnRpbnVlOw0KLQkJaWYocERpY3QtPkdldFN0cmluZyhGWF9CU1RSQygiU3VidHlwZSIpKS5FcXVhbChGWF9CU1RSQygiTGluayIpKSkNCi0JCXsNCi0JCQkqc3RhcnRQb3MgPSBpKzE7DQotCQkJKmxpbmtBbm5vdCA9IChGUERGX0xJTkspcERpY3Q7IA0KLQkJCXJldHVybiBUUlVFOw0KLQkJfQ0KLQl9DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZMaW5rX0dldEFubm90UmVjdChGUERGX0xJTksgbGlua0Fubm90LCBGU19SRUNURiogcmVjdCkNCi17DQotCWlmKCFsaW5rQW5ub3QgfHwgIXJlY3QpDQotCQlyZXR1cm4gRkFMU0U7DQotCUNQREZfRGljdGlvbmFyeSogcEFubm90RGljdCA9IChDUERGX0RpY3Rpb25hcnkqKWxpbmtBbm5vdDsNCi0JQ1BERl9SZWN0IHJ0ID0gcEFubm90RGljdC0+R2V0UmVjdChGWF9CU1RSQygiUmVjdCIpKTsNCi0JcmVjdC0+bGVmdCA9IHJ0LmxlZnQ7DQotCXJlY3QtPmJvdHRvbSA9IHJ0LmJvdHRvbTsNCi0JcmVjdC0+cmlnaHQgPSBydC5yaWdodDsNCi0JcmVjdC0+dG9wID0gcnQudG9wOw0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZMaW5rX0NvdW50UXVhZFBvaW50cyhGUERGX0xJTksgbGlua0Fubm90KQ0KLXsNCi0JaWYoIWxpbmtBbm5vdCkNCi0JCXJldHVybiAwOw0KLQlDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KilsaW5rQW5ub3Q7DQotCUNQREZfQXJyYXkqIHBBcnJheSA9IHBBbm5vdERpY3QtPkdldEFycmF5KEZYX0JTVFJDKCJRdWFkUG9pbnRzIikpOw0KLQlpZiAocEFycmF5ID09IE5VTEwpDQotCQlyZXR1cm4gMDsNCi0JZWxzZQ0KLQkJcmV0dXJuIHBBcnJheS0+R2V0Q291bnQoKSAvIDg7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGTGlua19HZXRRdWFkUG9pbnRzKEZQREZfTElOSyBsaW5rQW5ub3QsIGludCBxdWFkSW5kZXgsIEZTX1FVQURQT0lOVFNGKiBxdWFkUG9pbnRzKQ0KLXsNCi0JaWYoIWxpbmtBbm5vdCB8fCAhcXVhZFBvaW50cykNCi0JCXJldHVybiBGQUxTRTsNCi0JQ1BERl9EaWN0aW9uYXJ5KiBwQW5ub3REaWN0ID0gKENQREZfRGljdGlvbmFyeSopbGlua0Fubm90Ow0KLQlDUERGX0FycmF5KiBwQXJyYXkgPSBwQW5ub3REaWN0LT5HZXRBcnJheShGWF9CU1RSQygiUXVhZFBvaW50cyIpKTsNCi0JaWYgKHBBcnJheSkgew0KLQkJaWYgKDAgPiBxdWFkSW5kZXggfHwgcXVhZEluZGV4ID49IChpbnQpcEFycmF5LT5HZXRDb3VudCgpLzggfHwNCi0JCQkoKHF1YWRJbmRleCo4KzcpID49IChpbnQpcEFycmF5LT5HZXRDb3VudCgpKSkgcmV0dXJuIEZBTFNFOw0KLQkJcXVhZFBvaW50cy0+eDEgPSBwQXJyYXktPkdldE51bWJlcihxdWFkSW5kZXgqOCk7DQotCQlxdWFkUG9pbnRzLT55MSA9IHBBcnJheS0+R2V0TnVtYmVyKHF1YWRJbmRleCo4KzEpOw0KLQkJcXVhZFBvaW50cy0+eDIgPSBwQXJyYXktPkdldE51bWJlcihxdWFkSW5kZXgqOCsyKTsNCi0JCXF1YWRQb2ludHMtPnkyID0gcEFycmF5LT5HZXROdW1iZXIocXVhZEluZGV4KjgrMyk7DQotCQlxdWFkUG9pbnRzLT54MyA9IHBBcnJheS0+R2V0TnVtYmVyKHF1YWRJbmRleCo4KzQpOw0KLQkJcXVhZFBvaW50cy0+eTMgPSBwQXJyYXktPkdldE51bWJlcihxdWFkSW5kZXgqOCs1KTsNCi0JCXF1YWRQb2ludHMtPng0ID0gcEFycmF5LT5HZXROdW1iZXIocXVhZEluZGV4KjgrNik7DQotCQlxdWFkUG9pbnRzLT55NCA9IHBBcnJheS0+R2V0TnVtYmVyKHF1YWRJbmRleCo4KzcpOw0KLQkJcmV0dXJuIFRSVUU7DQotCX0gDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotDQotRExMRVhQT1JUIHVuc2lnbmVkIGxvbmcgU1REQ0FMTCBGUERGX0dldE1ldGFUZXh0KEZQREZfRE9DVU1FTlQgZG9jLCBGUERGX0JZVEVTVFJJTkcgdGFnLA0KLQkJCQkJCQkJCQkJCSB2b2lkKiBidWZmZXIsIHVuc2lnbmVkIGxvbmcgYnVmbGVuKQ0KLXsNCi0JaWYgKGRvYyA9PSBOVUxMIHx8IHRhZyA9PSBOVUxMKSByZXR1cm4gMDsNCi0NCi0JQ1BERl9Eb2N1bWVudCogcERvYyA9IChDUERGX0RvY3VtZW50Kilkb2M7DQotCS8vIEdldCBpbmZvIGRpY3Rpb25hcnkNCi0JQ1BERl9EaWN0aW9uYXJ5KiBwSW5mbyA9IHBEb2MtPkdldEluZm8oKTsNCi0JaWYgKHBJbmZvID09IE5VTEwpIHJldHVybiAwOw0KLQ0KLQlDRlhfV2lkZVN0cmluZyB0ZXh0ID0gcEluZm8tPkdldFVuaWNvZGVUZXh0KHRhZyk7DQotDQotCS8vIFVzZSBVVEYtMTZMRSBlbmNvZGluZw0KLQlDRlhfQnl0ZVN0cmluZyBic3RyID0gdGV4dC5VVEYxNkxFX0VuY29kZSgpOw0KLQl1bnNpZ25lZCBsb25nIGxlbiA9IGJzdHIuR2V0TGVuZ3RoKCk7DQotCWlmIChidWZmZXIgIT0gTlVMTCB8fCBidWZsZW4gPj0gbGVuKzIpIHsNCi0JCUZYU1lTX21lbWNweShidWZmZXIsIChGWF9MUENTVFIpYnN0ciwgbGVuKTsNCi0JCS8vIHVzZSBkb3VibGUgemVybyBhcyB0cmFpbGVyDQotCQkoKEZYX0JZVEUqKWJ1ZmZlcilbbGVuXSA9ICgoRlhfQllURSopYnVmZmVyKVtsZW4rMV0gPSAwOw0KLQl9DQotCXJldHVybiBsZW4rMjsNCi19DQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19kZWZpbmUuaCIKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2ZwZGZkb2MuaCIKKworc3RhdGljIGludCB0aGlzX21vZHVsZSA9IDA7CisKK3N0YXRpYyBDUERGX0Jvb2ttYXJrIEZpbmRCb29rbWFyayhDUERGX0Jvb2ttYXJrVHJlZSYgdHJlZSwgQ1BERl9Cb29rbWFyayBUaGlzLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgdGl0bGUpCit7CisJaWYgKFRoaXMgIT0gTlVMTCkgeworCQkvLyBGaXJzdCBjaGVjayB0aGlzIGl0ZW0KKwkJQ0ZYX1dpZGVTdHJpbmcgdGhpc190aXRsZSA9IFRoaXMuR2V0VGl0bGUoKTsKKwkJaWYgKHRoaXNfdGl0bGUuQ29tcGFyZU5vQ2FzZSh0aXRsZSkgPT0gMCkKKwkJCXJldHVybiBUaGlzOworCX0KKwkvLyBnbyBpbnRvIGNoaWxkcmVuIGl0ZW1zCisJQ1BERl9Cb29rbWFyayBDaGlsZCA9IHRyZWUuR2V0Rmlyc3RDaGlsZChUaGlzKTsKKwl3aGlsZSAoQ2hpbGQgIT0gTlVMTCkgeworCQkvLyBjaGVjayBpZiB0aGlzIGl0ZW0KKwkJQ1BERl9Cb29rbWFyayBGb3VuZCA9IEZpbmRCb29rbWFyayh0cmVlLCBDaGlsZCwgdGl0bGUpOworCQlpZiAoRm91bmQpIHJldHVybiBGb3VuZDsKKwkJQ2hpbGQgPSB0cmVlLkdldE5leHRTaWJsaW5nKENoaWxkKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK0RMTEVYUE9SVCBGUERGX0JPT0tNQVJLIFNURENBTEwgRlBERkJvb2ttYXJrX0ZpbmQoRlBERl9ET0NVTUVOVCBkb2N1bWVudCwgRlBERl9XSURFU1RSSU5HIHRpdGxlKQoreworCWlmIChkb2N1bWVudCA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKwlpZiAodGl0bGUgPT0gTlVMTCB8fCB0aXRsZVswXSA9PSAwKSByZXR1cm4gTlVMTDsKKworCUNQREZfRG9jdW1lbnQqIHBEb2MgPSAoQ1BERl9Eb2N1bWVudCopZG9jdW1lbnQ7CisJQ1BERl9Cb29rbWFya1RyZWUgdHJlZShwRG9jKTsKKworCUNGWF9XaWRlU3RyaW5nIHdzdHIgPSBDRlhfV2lkZVN0cmluZzo6RnJvbVVURjE2TEUodGl0bGUpOworCXJldHVybiBGaW5kQm9va21hcmsodHJlZSwgTlVMTCwgd3N0cik7Cit9CisKK0RMTEVYUE9SVCBGUERGX0RFU1QgU1REQ0FMTCBGUERGQm9va21hcmtfR2V0RGVzdChGUERGX0RPQ1VNRU5UIGRvY3VtZW50LCBGUERGX0JPT0tNQVJLIGJvb2ttYXJrKQoreworCWlmIChkb2N1bWVudCA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKwlpZiAoYm9va21hcmsgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisKKwlDUERGX0Jvb2ttYXJrIEJvb2ttYXJrID0gKENQREZfRGljdGlvbmFyeSopYm9va21hcms7CisJQ1BERl9Eb2N1bWVudCogcERvYyA9IChDUERGX0RvY3VtZW50Kilkb2N1bWVudDsKKwlDUERGX0Rlc3QgZGVzdCA9IEJvb2ttYXJrLkdldERlc3QocERvYyk7CisJaWYgKGRlc3QgIT0gTlVMTCkgcmV0dXJuIGRlc3Q7CisKKwkvLyBJZiB0aGlzIGJvb2ttYXJrIGlzIG5vdCBkaXJlY3RseSBhc3NvY2lhdGVkIHdpdGggYSBkZXN0LCB3ZSB0cnkgdG8gZ2V0IGFjdGlvbgorCUNQREZfQWN0aW9uIEFjdGlvbiA9IEJvb2ttYXJrLkdldEFjdGlvbigpOworCWlmIChBY3Rpb24gPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisJcmV0dXJuIEFjdGlvbi5HZXREZXN0KHBEb2MpOworfQorCitETExFWFBPUlQgRlBERl9BQ1RJT04gU1REQ0FMTCBGUERGQm9va21hcmtfR2V0QWN0aW9uKEZQREZfQk9PS01BUksgYm9va21hcmspCit7CisJaWYgKGJvb2ttYXJrID09IE5VTEwpIHJldHVybiBOVUxMOworCisJQ1BERl9Cb29rbWFyayBCb29rbWFyayA9IChDUERGX0RpY3Rpb25hcnkqKWJvb2ttYXJrOworCXJldHVybiBCb29rbWFyay5HZXRBY3Rpb24oKTsKK30KKworRExMRVhQT1JUIHVuc2lnbmVkIGxvbmcgU1REQ0FMTCBGUERGQWN0aW9uX0dldFR5cGUoRlBERl9BQ1RJT04gYWN0aW9uKQoreworCWlmIChhY3Rpb24gPT0gTlVMTCkgcmV0dXJuIDA7CisKKwlDUERGX0FjdGlvbiBBY3Rpb24gPSAoQ1BERl9EaWN0aW9uYXJ5KilhY3Rpb247CisJQ1BERl9BY3Rpb246OkFjdGlvblR5cGUgdHlwZSA9IEFjdGlvbi5HZXRUeXBlKCk7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBDUERGX0FjdGlvbjo6R29UbzoKKwkJcmV0dXJuIFBERkFDVElPTl9HT1RPOworCWNhc2UgQ1BERl9BY3Rpb246OkdvVG9SOgorCQlyZXR1cm4gUERGQUNUSU9OX1JFTU9URUdPVE87CisJY2FzZSBDUERGX0FjdGlvbjo6VVJJOgorCQlyZXR1cm4gUERGQUNUSU9OX1VSSTsKKwljYXNlIENQREZfQWN0aW9uOjpMYXVuY2g6CisJCXJldHVybiBQREZBQ1RJT05fTEFVTkNIOworCWRlZmF1bHQ6CisJCXJldHVybiBQREZBQ1RJT05fVU5TVVBQT1JURUQ7CisJfQorCXJldHVybiBQREZBQ1RJT05fVU5TVVBQT1JURUQ7Cit9CisKK0RMTEVYUE9SVCBGUERGX0RFU1QgU1REQ0FMTCBGUERGQWN0aW9uX0dldERlc3QoRlBERl9ET0NVTUVOVCBkb2N1bWVudCwgRlBERl9BQ1RJT04gYWN0aW9uKQoreworCWlmIChkb2N1bWVudCA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKwlpZiAoYWN0aW9uID09IE5VTEwpIHJldHVybiBOVUxMOworCUNQREZfRG9jdW1lbnQqIHBEb2MgPSAoQ1BERl9Eb2N1bWVudCopZG9jdW1lbnQ7CisJQ1BERl9BY3Rpb24gQWN0aW9uID0gKENQREZfRGljdGlvbmFyeSopYWN0aW9uOworCisJcmV0dXJuIEFjdGlvbi5HZXREZXN0KHBEb2MpOworfQorCitETExFWFBPUlQgdW5zaWduZWQgbG9uZyBTVERDQUxMIEZQREZBY3Rpb25fR2V0VVJJUGF0aChGUERGX0RPQ1VNRU5UIGRvY3VtZW50LCBGUERGX0FDVElPTiBhY3Rpb24sIAorCQkJCQkJCQkJCQkgIHZvaWQqIGJ1ZmZlciwgdW5zaWduZWQgbG9uZyBidWZsZW4pCit7CisJaWYgKGRvY3VtZW50ID09IE5VTEwpIHJldHVybiAwOworCWlmIChhY3Rpb24gPT0gTlVMTCkgcmV0dXJuIDA7CisJQ1BERl9Eb2N1bWVudCogcERvYyA9IChDUERGX0RvY3VtZW50Kilkb2N1bWVudDsKKwlDUERGX0FjdGlvbiBBY3Rpb24gPSAoQ1BERl9EaWN0aW9uYXJ5KilhY3Rpb247CisKKwlDRlhfQnl0ZVN0cmluZyBwYXRoID0gQWN0aW9uLkdldFVSSShwRG9jKTsKKwl1bnNpZ25lZCBsb25nIGxlbiA9IHBhdGguR2V0TGVuZ3RoKCkgKyAxOworCWlmIChidWZmZXIgIT0gTlVMTCAmJiBidWZsZW4gPj0gbGVuKQorCQlGWFNZU19tZW1jcHkoYnVmZmVyLCAoRlhfTFBDU1RSKXBhdGgsIGxlbik7CisJcmV0dXJuIGxlbjsKK30KKworRExMRVhQT1JUIHVuc2lnbmVkIGxvbmcgU1REQ0FMTCBGUERGRGVzdF9HZXRQYWdlSW5kZXgoRlBERl9ET0NVTUVOVCBkb2N1bWVudCwgRlBERl9ERVNUIGRlc3QpCit7CisJaWYgKGRvY3VtZW50ID09IE5VTEwpIHJldHVybiAwOworCWlmIChkZXN0ID09IE5VTEwpIHJldHVybiAwOworCUNQREZfRG9jdW1lbnQqIHBEb2MgPSAoQ1BERl9Eb2N1bWVudCopZG9jdW1lbnQ7CisJQ1BERl9EZXN0IERlc3QgPSAoQ1BERl9BcnJheSopZGVzdDsKKworCXJldHVybiBEZXN0LkdldFBhZ2VJbmRleChwRG9jKTsKK30KKworc3RhdGljIHZvaWQgUmVsZWFzZUxpbmtMaXN0KEZYX0xQVk9JRCBkYXRhKQoreworCWRlbGV0ZSAoQ1BERl9MaW5rTGlzdCopZGF0YTsKK30KKworRExMRVhQT1JUIEZQREZfTElOSyBTVERDQUxMIEZQREZMaW5rX0dldExpbmtBdFBvaW50KEZQREZfUEFHRSBwYWdlLCBkb3VibGUgeCwgZG91YmxlIHkpCit7CisJaWYgKHBhZ2UgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisJQ1BERl9QYWdlKiBwUGFnZSA9IChDUERGX1BhZ2UqKXBhZ2U7CisKKwkvLyBMaW5rIGxpc3QgaXMgc3RvcmVkIHdpdGggdGhlIGRvY3VtZW50CisJQ1BERl9Eb2N1bWVudCogcERvYyA9IHBQYWdlLT5tX3BEb2N1bWVudDsKKwlDUERGX0xpbmtMaXN0KiBwTGlua0xpc3QgPSAoQ1BERl9MaW5rTGlzdCopcERvYy0+R2V0UHJpdmF0ZURhdGEoJnRoaXNfbW9kdWxlKTsKKwlpZiAocExpbmtMaXN0ID09IE5VTEwpIHsKKwkJcExpbmtMaXN0ID0gRlhfTkVXIENQREZfTGlua0xpc3QocERvYyk7CisJCXBEb2MtPlNldFByaXZhdGVEYXRhKCZ0aGlzX21vZHVsZSwgcExpbmtMaXN0LCBSZWxlYXNlTGlua0xpc3QpOworCX0KKworCXJldHVybiBwTGlua0xpc3QtPkdldExpbmtBdFBvaW50KHBQYWdlLCAoRlhfRkxPQVQpeCwgKEZYX0ZMT0FUKXkpOworfQorCitETExFWFBPUlQgRlBERl9ERVNUIFNURENBTEwgRlBERkxpbmtfR2V0RGVzdChGUERGX0RPQ1VNRU5UIGRvY3VtZW50LCBGUERGX0xJTksgbGluaykKK3sKKwlpZiAoZG9jdW1lbnQgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisJQ1BERl9Eb2N1bWVudCogcERvYyA9IChDUERGX0RvY3VtZW50Kilkb2N1bWVudDsKKwlpZiAobGluayA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKwlDUERGX0xpbmsgTGluayA9IChDUERGX0RpY3Rpb25hcnkqKWxpbms7CisKKwlGUERGX0RFU1QgZGVzdCA9IExpbmsuR2V0RGVzdChwRG9jKTsKKwlpZiAoZGVzdCkgcmV0dXJuIGRlc3Q7CisKKwkvLyBJZiB0aGlzIGxpbmsgaXMgbm90IGRpcmVjdGx5IGFzc29jaWF0ZWQgd2l0aCBhIGRlc3QsIHdlIHRyeSB0byBnZXQgYWN0aW9uCisJQ1BERl9BY3Rpb24gQWN0aW9uID0gTGluay5HZXRBY3Rpb24oKTsKKwlpZiAoQWN0aW9uID09IE5VTEwpIHJldHVybiBOVUxMOworCXJldHVybiBBY3Rpb24uR2V0RGVzdChwRG9jKTsKK30KKworRExMRVhQT1JUIEZQREZfQUNUSU9OIFNURENBTEwgRlBERkxpbmtfR2V0QWN0aW9uKEZQREZfTElOSyBsaW5rKQoreworCWlmIChsaW5rID09IE5VTEwpIHJldHVybiBOVUxMOworCUNQREZfTGluayBMaW5rID0gKENQREZfRGljdGlvbmFyeSopbGluazsKKworCXJldHVybiBMaW5rLkdldEFjdGlvbigpOworfQorCitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERkxpbmtfRW51bWVyYXRlKEZQREZfUEFHRSBwYWdlLCBpbnQqIHN0YXJ0UG9zLCBGUERGX0xJTksqIGxpbmtBbm5vdCkKK3sKKwlpZighcGFnZSB8fCAhc3RhcnRQb3MgfHwgIWxpbmtBbm5vdCkKKwkJcmV0dXJuIEZBTFNFOworCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOworCWlmKCFwUGFnZS0+bV9wRm9ybURpY3QpIHJldHVybiBGQUxTRTsKKwlDUERGX0FycmF5KiBwQW5ub3RzID0gcFBhZ2UtPm1fcEZvcm1EaWN0LT5HZXRBcnJheSgiQW5ub3RzIik7CisJaWYoIXBBbm5vdHMpIHJldHVybiBGQUxTRTsKKwlmb3IgKGludCBpID0gKnN0YXJ0UG9zOyBpIDwgKGludClwQW5ub3RzLT5HZXRDb3VudCgpOyBpICsrKSB7CisJCUNQREZfRGljdGlvbmFyeSogcERpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KilwQW5ub3RzLT5HZXRFbGVtZW50VmFsdWUoaSk7CisJCWlmIChwRGljdCA9PSBOVUxMIHx8IHBEaWN0LT5HZXRUeXBlKCkgIT0gUERGT0JKX0RJQ1RJT05BUlkpIGNvbnRpbnVlOworCQlpZihwRGljdC0+R2V0U3RyaW5nKEZYX0JTVFJDKCJTdWJ0eXBlIikpLkVxdWFsKEZYX0JTVFJDKCJMaW5rIikpKQorCQl7CisJCQkqc3RhcnRQb3MgPSBpKzE7CisJCQkqbGlua0Fubm90ID0gKEZQREZfTElOSylwRGljdDsgCisJCQlyZXR1cm4gVFJVRTsKKwkJfQorCX0KKwlyZXR1cm4gRkFMU0U7Cit9CisKK0RMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGTGlua19HZXRBbm5vdFJlY3QoRlBERl9MSU5LIGxpbmtBbm5vdCwgRlNfUkVDVEYqIHJlY3QpCit7CisJaWYoIWxpbmtBbm5vdCB8fCAhcmVjdCkKKwkJcmV0dXJuIEZBTFNFOworCUNQREZfRGljdGlvbmFyeSogcEFubm90RGljdCA9IChDUERGX0RpY3Rpb25hcnkqKWxpbmtBbm5vdDsKKwlDUERGX1JlY3QgcnQgPSBwQW5ub3REaWN0LT5HZXRSZWN0KEZYX0JTVFJDKCJSZWN0IikpOworCXJlY3QtPmxlZnQgPSBydC5sZWZ0OworCXJlY3QtPmJvdHRvbSA9IHJ0LmJvdHRvbTsKKwlyZWN0LT5yaWdodCA9IHJ0LnJpZ2h0OworCXJlY3QtPnRvcCA9IHJ0LnRvcDsKKwlyZXR1cm4gVFJVRTsKK30KKworRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZMaW5rX0NvdW50UXVhZFBvaW50cyhGUERGX0xJTksgbGlua0Fubm90KQoreworCWlmKCFsaW5rQW5ub3QpCisJCXJldHVybiAwOworCUNQREZfRGljdGlvbmFyeSogcEFubm90RGljdCA9IChDUERGX0RpY3Rpb25hcnkqKWxpbmtBbm5vdDsKKwlDUERGX0FycmF5KiBwQXJyYXkgPSBwQW5ub3REaWN0LT5HZXRBcnJheShGWF9CU1RSQygiUXVhZFBvaW50cyIpKTsKKwlpZiAocEFycmF5ID09IE5VTEwpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIHBBcnJheS0+R2V0Q291bnQoKSAvIDg7Cit9CisKK0RMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGTGlua19HZXRRdWFkUG9pbnRzKEZQREZfTElOSyBsaW5rQW5ub3QsIGludCBxdWFkSW5kZXgsIEZTX1FVQURQT0lOVFNGKiBxdWFkUG9pbnRzKQoreworCWlmKCFsaW5rQW5ub3QgfHwgIXF1YWRQb2ludHMpCisJCXJldHVybiBGQUxTRTsKKwlDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KilsaW5rQW5ub3Q7CisJQ1BERl9BcnJheSogcEFycmF5ID0gcEFubm90RGljdC0+R2V0QXJyYXkoRlhfQlNUUkMoIlF1YWRQb2ludHMiKSk7CisJaWYgKHBBcnJheSkgeworCQlpZiAoMCA+IHF1YWRJbmRleCB8fCBxdWFkSW5kZXggPj0gKGludClwQXJyYXktPkdldENvdW50KCkvOCB8fAorCQkJKChxdWFkSW5kZXgqOCs3KSA+PSAoaW50KXBBcnJheS0+R2V0Q291bnQoKSkpIHJldHVybiBGQUxTRTsKKwkJcXVhZFBvaW50cy0+eDEgPSBwQXJyYXktPkdldE51bWJlcihxdWFkSW5kZXgqOCk7CisJCXF1YWRQb2ludHMtPnkxID0gcEFycmF5LT5HZXROdW1iZXIocXVhZEluZGV4KjgrMSk7CisJCXF1YWRQb2ludHMtPngyID0gcEFycmF5LT5HZXROdW1iZXIocXVhZEluZGV4KjgrMik7CisJCXF1YWRQb2ludHMtPnkyID0gcEFycmF5LT5HZXROdW1iZXIocXVhZEluZGV4KjgrMyk7CisJCXF1YWRQb2ludHMtPngzID0gcEFycmF5LT5HZXROdW1iZXIocXVhZEluZGV4KjgrNCk7CisJCXF1YWRQb2ludHMtPnkzID0gcEFycmF5LT5HZXROdW1iZXIocXVhZEluZGV4KjgrNSk7CisJCXF1YWRQb2ludHMtPng0ID0gcEFycmF5LT5HZXROdW1iZXIocXVhZEluZGV4KjgrNik7CisJCXF1YWRQb2ludHMtPnk0ID0gcEFycmF5LT5HZXROdW1iZXIocXVhZEluZGV4KjgrNyk7CisJCXJldHVybiBUUlVFOworCX0gCisJcmV0dXJuIEZBTFNFOworfQorCisKK0RMTEVYUE9SVCB1bnNpZ25lZCBsb25nIFNURENBTEwgRlBERl9HZXRNZXRhVGV4dChGUERGX0RPQ1VNRU5UIGRvYywgRlBERl9CWVRFU1RSSU5HIHRhZywKKwkJCQkJCQkJCQkJCSB2b2lkKiBidWZmZXIsIHVuc2lnbmVkIGxvbmcgYnVmbGVuKQoreworCWlmIChkb2MgPT0gTlVMTCB8fCB0YWcgPT0gTlVMTCkgcmV0dXJuIDA7CisKKwlDUERGX0RvY3VtZW50KiBwRG9jID0gKENQREZfRG9jdW1lbnQqKWRvYzsKKwkvLyBHZXQgaW5mbyBkaWN0aW9uYXJ5CisJQ1BERl9EaWN0aW9uYXJ5KiBwSW5mbyA9IHBEb2MtPkdldEluZm8oKTsKKwlpZiAocEluZm8gPT0gTlVMTCkgcmV0dXJuIDA7CisKKwlDRlhfV2lkZVN0cmluZyB0ZXh0ID0gcEluZm8tPkdldFVuaWNvZGVUZXh0KHRhZyk7CisKKwkvLyBVc2UgVVRGLTE2TEUgZW5jb2RpbmcKKwlDRlhfQnl0ZVN0cmluZyBic3RyID0gdGV4dC5VVEYxNkxFX0VuY29kZSgpOworCXVuc2lnbmVkIGxvbmcgbGVuID0gYnN0ci5HZXRMZW5ndGgoKTsKKwlpZiAoYnVmZmVyICE9IE5VTEwgfHwgYnVmbGVuID49IGxlbisyKSB7CisJCUZYU1lTX21lbWNweShidWZmZXIsIChGWF9MUENTVFIpYnN0ciwgbGVuKTsKKwkJLy8gdXNlIGRvdWJsZSB6ZXJvIGFzIHRyYWlsZXIKKwkJKChGWF9CWVRFKilidWZmZXIpW2xlbl0gPSAoKEZYX0JZVEUqKWJ1ZmZlcilbbGVuKzFdID0gMDsKKwl9CisJcmV0dXJuIGxlbisyOworfQorCmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9mcGRmZWRpdGltZy5jcHAgYi9mcGRmc2RrL3NyYy9mcGRmZWRpdGltZy5jcHAKaW5kZXggZWE4MTIwMy4uYzI5ZDJiNyAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvZnBkZmVkaXRpbWcuY3BwCisrKyBiL2ZwZGZzZGsvc3JjL2ZwZGZlZGl0aW1nLmNwcApAQCAtMSw3NCArMSw3NCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19kZWZpbmUuaCINCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mcGRmZWRpdC5oIg0KLQ0KLQ0KLURMTEVYUE9SVCBGUERGX1BBR0VPQkpFQ1QgU1REQ0FMTCBGUERGUGFnZU9ial9OZXdJbWdlT2JqKEZQREZfRE9DVU1FTlQgZG9jdW1lbnQpDQotew0KLQlpZiAoIWRvY3VtZW50KQ0KLQkJcmV0dXJuIE5VTEw7DQotCUNQREZfSW1hZ2VPYmplY3QqIHBJbWFnZU9iaiA9IEZYX05FVyBDUERGX0ltYWdlT2JqZWN0Ow0KLQlDUERGX0ltYWdlKiBwSW1nID0gRlhfTkVXIENQREZfSW1hZ2UoKENQREZfRG9jdW1lbnQgKilkb2N1bWVudCk7DQotCXBJbWFnZU9iai0+bV9wSW1hZ2UgPSBwSW1nOw0KLQlyZXR1cm4gcEltYWdlT2JqOw0KLX0NCi0NCi1ETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERkltYWdlT2JqX0xvYWRKcGVnRmlsZShGUERGX1BBR0UqIHBhZ2VzLCBpbnQgbkNvdW50LEZQREZfUEFHRU9CSkVDVCBpbWFnZV9vYmplY3QsIEZQREZfRklMRUFDQ0VTUyogZmlsZUFjY2VzcykNCi17DQotCWlmICghaW1hZ2Vfb2JqZWN0IHx8ICFmaWxlQWNjZXNzKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQ0KLQlJRlhfRmlsZVJlYWQqIHBGaWxlID0gRlhfTkVXIENQREZfQ3VzdG9tQWNjZXNzKGZpbGVBY2Nlc3MpOw0KLQ0KLQlDUERGX0ltYWdlT2JqZWN0KiBwSW1nT2JqID0gKENQREZfSW1hZ2VPYmplY3QqKWltYWdlX29iamVjdDsNCi0JcEltZ09iai0+bV9HZW5lcmFsU3RhdGUuR2V0TW9kaWZ5KCk7DQotCWZvciAoaW50IGluZGV4PTA7aW5kZXg8bkNvdW50O2luZGV4KyspDQotCXsNCi0JCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlc1tpbmRleF07IA0KLQkJcEltZ09iai0+bV9wSW1hZ2UtPlJlc2V0Q2FjaGUocFBhZ2UsTlVMTCk7DQotCX0NCi0JcEltZ09iai0+bV9wSW1hZ2UtPlNldEpwZWdJbWFnZShwRmlsZSk7DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi0NCi1ETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERkltYWdlT2JqX1NldE1hdHJpeAkoRlBERl9QQUdFT0JKRUNUIGltYWdlX29iamVjdCwNCi0JCQkJCQkJCQkJCQkgZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZikNCi17DQotCWlmICghaW1hZ2Vfb2JqZWN0KQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQlDUERGX0ltYWdlT2JqZWN0KiBwSW1nT2JqID0gKENQREZfSW1hZ2VPYmplY3QqKWltYWdlX29iamVjdDsNCi0JcEltZ09iai0+bV9NYXRyaXguYSA9IChGWF9GTE9BVClhOw0KLQlwSW1nT2JqLT5tX01hdHJpeC5iID0gKEZYX0ZMT0FUKWI7DQotCXBJbWdPYmotPm1fTWF0cml4LmMgPSAoRlhfRkxPQVQpYzsNCi0JcEltZ09iai0+bV9NYXRyaXguZCA9IChGWF9GTE9BVClkOw0KLQlwSW1nT2JqLT5tX01hdHJpeC5lID0gKEZYX0ZMT0FUKWU7DQotCXBJbWdPYmotPm1fTWF0cml4LmYgPSAoRlhfRkxPQVQpZjsNCi0JcEltZ09iai0+Q2FsY0JvdW5kaW5nQm94KCk7DQotCXJldHVybiAgVFJVRTsNCi19DQotDQotRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZJbWFnZU9ial9TZXRCaXRtYXAoRlBERl9QQUdFKiBwYWdlcyxpbnQgbkNvdW50LEZQREZfUEFHRU9CSkVDVCBpbWFnZV9vYmplY3QsRlBERl9CSVRNQVAgYml0bWFwKQ0KLXsNCi0JaWYgKCFpbWFnZV9vYmplY3QgfHwgIWJpdG1hcCkNCi0JCXJldHVybiBGQUxTRTsNCi0JQ0ZYX0RJQml0bWFwKiBwQm1wID0gTlVMTDsNCi0JcEJtcCA9IChDRlhfRElCaXRtYXAqKWJpdG1hcDsNCi0JQ1BERl9JbWFnZU9iamVjdCogcEltZ09iaiA9IChDUERGX0ltYWdlT2JqZWN0KilpbWFnZV9vYmplY3Q7DQotCXBJbWdPYmotPm1fR2VuZXJhbFN0YXRlLkdldE1vZGlmeSgpOw0KLQlmb3IgKGludCBpbmRleD0wO2luZGV4PG5Db3VudDtpbmRleCsrKQ0KLQl7DQotCQlDUERGX1BhZ2UqIHBQYWdlID0gKENQREZfUGFnZSopcGFnZXNbaW5kZXhdOyANCi0JCXBJbWdPYmotPm1fcEltYWdlLT5SZXNldENhY2hlKHBQYWdlLE5VTEwpOw0KLQl9DQotCXBJbWdPYmotPm1fcEltYWdlLT5TZXRJbWFnZShwQm1wLEZBTFNFKTsNCi0JcEltZ09iai0+Q2FsY0JvdW5kaW5nQm94KCk7DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX2RlZmluZS5oIgorI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnBkZmVkaXQuaCIKKworCitETExFWFBPUlQgRlBERl9QQUdFT0JKRUNUIFNURENBTEwgRlBERlBhZ2VPYmpfTmV3SW1nZU9iaihGUERGX0RPQ1VNRU5UIGRvY3VtZW50KQoreworCWlmICghZG9jdW1lbnQpCisJCXJldHVybiBOVUxMOworCUNQREZfSW1hZ2VPYmplY3QqIHBJbWFnZU9iaiA9IEZYX05FVyBDUERGX0ltYWdlT2JqZWN0OworCUNQREZfSW1hZ2UqIHBJbWcgPSBGWF9ORVcgQ1BERl9JbWFnZSgoQ1BERl9Eb2N1bWVudCAqKWRvY3VtZW50KTsKKwlwSW1hZ2VPYmotPm1fcEltYWdlID0gcEltZzsKKwlyZXR1cm4gcEltYWdlT2JqOworfQorCitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERkltYWdlT2JqX0xvYWRKcGVnRmlsZShGUERGX1BBR0UqIHBhZ2VzLCBpbnQgbkNvdW50LEZQREZfUEFHRU9CSkVDVCBpbWFnZV9vYmplY3QsIEZQREZfRklMRUFDQ0VTUyogZmlsZUFjY2VzcykKK3sKKwlpZiAoIWltYWdlX29iamVjdCB8fCAhZmlsZUFjY2VzcykKKwkJcmV0dXJuIEZBTFNFOworCisJSUZYX0ZpbGVSZWFkKiBwRmlsZSA9IEZYX05FVyBDUERGX0N1c3RvbUFjY2VzcyhmaWxlQWNjZXNzKTsKKworCUNQREZfSW1hZ2VPYmplY3QqIHBJbWdPYmogPSAoQ1BERl9JbWFnZU9iamVjdCopaW1hZ2Vfb2JqZWN0OworCXBJbWdPYmotPm1fR2VuZXJhbFN0YXRlLkdldE1vZGlmeSgpOworCWZvciAoaW50IGluZGV4PTA7aW5kZXg8bkNvdW50O2luZGV4KyspCisJeworCQlDUERGX1BhZ2UqIHBQYWdlID0gKENQREZfUGFnZSopcGFnZXNbaW5kZXhdOyAKKwkJcEltZ09iai0+bV9wSW1hZ2UtPlJlc2V0Q2FjaGUocFBhZ2UsTlVMTCk7CisJfQorCXBJbWdPYmotPm1fcEltYWdlLT5TZXRKcGVnSW1hZ2UocEZpbGUpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKworRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZJbWFnZU9ial9TZXRNYXRyaXgJKEZQREZfUEFHRU9CSkVDVCBpbWFnZV9vYmplY3QsCisJCQkJCQkJCQkJCQkgZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZikKK3sKKwlpZiAoIWltYWdlX29iamVjdCkKKwkJcmV0dXJuIEZBTFNFOworCUNQREZfSW1hZ2VPYmplY3QqIHBJbWdPYmogPSAoQ1BERl9JbWFnZU9iamVjdCopaW1hZ2Vfb2JqZWN0OworCXBJbWdPYmotPm1fTWF0cml4LmEgPSAoRlhfRkxPQVQpYTsKKwlwSW1nT2JqLT5tX01hdHJpeC5iID0gKEZYX0ZMT0FUKWI7CisJcEltZ09iai0+bV9NYXRyaXguYyA9IChGWF9GTE9BVCljOworCXBJbWdPYmotPm1fTWF0cml4LmQgPSAoRlhfRkxPQVQpZDsKKwlwSW1nT2JqLT5tX01hdHJpeC5lID0gKEZYX0ZMT0FUKWU7CisJcEltZ09iai0+bV9NYXRyaXguZiA9IChGWF9GTE9BVClmOworCXBJbWdPYmotPkNhbGNCb3VuZGluZ0JveCgpOworCXJldHVybiAgVFJVRTsKK30KKworRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZJbWFnZU9ial9TZXRCaXRtYXAoRlBERl9QQUdFKiBwYWdlcyxpbnQgbkNvdW50LEZQREZfUEFHRU9CSkVDVCBpbWFnZV9vYmplY3QsRlBERl9CSVRNQVAgYml0bWFwKQoreworCWlmICghaW1hZ2Vfb2JqZWN0IHx8ICFiaXRtYXApCisJCXJldHVybiBGQUxTRTsKKwlDRlhfRElCaXRtYXAqIHBCbXAgPSBOVUxMOworCXBCbXAgPSAoQ0ZYX0RJQml0bWFwKiliaXRtYXA7CisJQ1BERl9JbWFnZU9iamVjdCogcEltZ09iaiA9IChDUERGX0ltYWdlT2JqZWN0KilpbWFnZV9vYmplY3Q7CisJcEltZ09iai0+bV9HZW5lcmFsU3RhdGUuR2V0TW9kaWZ5KCk7CisJZm9yIChpbnQgaW5kZXg9MDtpbmRleDxuQ291bnQ7aW5kZXgrKykKKwl7CisJCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlc1tpbmRleF07IAorCQlwSW1nT2JqLT5tX3BJbWFnZS0+UmVzZXRDYWNoZShwUGFnZSxOVUxMKTsKKwl9CisJcEltZ09iai0+bV9wSW1hZ2UtPlNldEltYWdlKHBCbXAsRkFMU0UpOworCXBJbWdPYmotPkNhbGNCb3VuZGluZ0JveCgpOworCXJldHVybiBUUlVFOworfQorCmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9mcGRmZWRpdHBhZ2UuY3BwIGIvZnBkZnNkay9zcmMvZnBkZmVkaXRwYWdlLmNwcAppbmRleCBkOWNiYmU0Li4zZjIyYjU2IDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9mcGRmZWRpdHBhZ2UuY3BwCisrKyBiL2ZwZGZzZGsvc3JjL2ZwZGZlZGl0cGFnZS5jcHAKQEAgLTEsMzE2ICsxLDMxNiBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotLy8gI2luY2x1ZGUgIng6L3BkZi9mcGRmYXBpNS9pbmNsdWRlL2ZwZGZhcGkuaCINCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX2RlZmluZS5oIg0KLSNpbmNsdWRlICIuLi9pbmNsdWRlL2ZwZGZlZGl0LmgiDQotDQotDQotI2lmIF9GWF9PU18gPT0gX0ZYX0FORFJPSURfDQotI2luY2x1ZGUgInRpbWUuaCINCi0jZWxzZQ0KLSNpbmNsdWRlIDxjdGltZT4NCi0jZW5kaWYNCi0NCi1ETExFWFBPUlQgRlBERl9ET0NVTUVOVCBTVERDQUxMIEZQREZfQ3JlYXRlTmV3RG9jdW1lbnQoKQ0KLXsNCi0JQ1BERl9Eb2N1bWVudCogcERvYyA9IEZYX05FVyBDUERGX0RvY3VtZW50Ow0KLQlpZiAoIXBEb2MpDQotCQlyZXR1cm4gTlVMTDsNCi0JcERvYy0+Q3JlYXRlTmV3RG9jKCk7DQotCXRpbWVfdCBjdXJyZW50VGltZTsNCi0NCi0JQ0ZYX0J5dGVTdHJpbmcgRGF0ZVN0cjsNCi0NCi0JaWYoRlNES19Jc1NhbmRCb3hQb2xpY3lFbmFibGVkKEZQREZfUE9MSUNZX01BQ0hJTkVUSU1FX0FDQ0VTUykpDQotCXsNCi0JCWlmICggLTEgIT0gdGltZSggJmN1cnJlbnRUaW1lICkgKQ0KLQkJew0KLQkJCXRtICogcFRNID0gbG9jYWx0aW1lKCAmY3VycmVudFRpbWUgKTsNCi0JCQlpZiAoIHBUTSApDQotCQkJew0KLQkJCQlEYXRlU3RyLkZvcm1hdCgJIkQ6JTA0ZCUwMmQlMDJkJTAyZCUwMmQlMDJkIiwgcFRNLT50bV95ZWFyKzE5MDAsIHBUTS0+dG1fbW9uKzEsDQotCQkJCQlwVE0tPnRtX21kYXksIHBUTS0+dG1faG91ciwgcFRNLT50bV9taW4sIHBUTS0+dG1fc2VjICk7DQotCQkJfQ0KLQkJfQ0KLQl9DQotCQ0KLQlDUERGX0RpY3Rpb25hcnkqIHBJbmZvRGljdCA9IE5VTEw7DQotCXBJbmZvRGljdCA9IHBEb2MtPkdldEluZm8oKTsNCi0JaWYgKHBJbmZvRGljdCkNCi0Jew0KLQkJaWYoRlNES19Jc1NhbmRCb3hQb2xpY3lFbmFibGVkKEZQREZfUE9MSUNZX01BQ0hJTkVUSU1FX0FDQ0VTUykpDQotCQkJcEluZm9EaWN0LT5TZXRBdCgiQ3JlYXRpb25EYXRlIiwgbmV3IENQREZfU3RyaW5nKERhdGVTdHIpKTsNCi0jaWZkZWYgRk9YSVRfQ0hST01FX0JVSUxEDQotCQlwSW5mb0RpY3QtPlNldEF0KCJDcmVhdG9yIixGWF9ORVcgQ1BERl9TdHJpbmcoTCJHb29nbGUiKSk7DQotI2Vsc2UNCi0JCXBJbmZvRGljdC0+U2V0QXQoIkNyZWF0b3IiLEZYX05FVyBDUERGX1N0cmluZyhMIkZveGl0IFBERiBTREsgRExMIDIuMCAtIEZveGl0IFNvZnR3YXJlIikpOw0KLSNlbmRpZg0KLQl9DQotDQotCXJldHVybiBwRG9jOw0KLX0NCi0NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZQYWdlX0RlbGV0ZShGUERGX0RPQ1VNRU5UIGRvY3VtZW50LCBpbnQgcGFnZV9pbmRleCkNCi17DQotCUNQREZfRG9jdW1lbnQqIHBEb2MgPSAoQ1BERl9Eb2N1bWVudCopZG9jdW1lbnQ7DQotCWlmIChwRG9jID09IE5VTEwpIA0KLQkJcmV0dXJuOw0KLQlpZiAocGFnZV9pbmRleCA8IDAgfHwgcGFnZV9pbmRleCA+PSBwRG9jLT5HZXRQYWdlQ291bnQoKSkgDQotCQlyZXR1cm47DQotDQotCXBEb2MtPkRlbGV0ZVBhZ2UocGFnZV9pbmRleCk7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX1BBR0UgU1REQ0FMTCBGUERGUGFnZV9OZXcoRlBERl9ET0NVTUVOVCBkb2N1bWVudCwgaW50IHBhZ2VfaW5kZXgsIGRvdWJsZSB3aWR0aCwgZG91YmxlIGhlaWdodCkNCi17DQotCWlmICghZG9jdW1lbnQpDQotCQlyZXR1cm4gTlVMTDsNCi0NCi0vLwlDUERGX1BhcnNlciogcFBhcnNlciA9IChDUERGX1BhcnNlciopZG9jdW1lbnQ7DQotCUNQREZfRG9jdW1lbnQqIHBEb2MgPSAoQ1BERl9Eb2N1bWVudCopZG9jdW1lbnQ7DQotCWlmKHBhZ2VfaW5kZXggPCAwKQ0KLQkJcGFnZV9pbmRleCA9IDA7DQotCWlmKHBEb2MtPkdldFBhZ2VDb3VudCgpPHBhZ2VfaW5kZXgpDQotCQlwYWdlX2luZGV4ID0gcERvYy0+R2V0UGFnZUNvdW50KCk7DQotLy8JaWYgKHBhZ2VfaW5kZXggPCAwIHx8IHBhZ2VfaW5kZXggPj0gcERvYy0+R2V0UGFnZUNvdW50KCkpIA0KLS8vCQlyZXR1cm4gTlVMTDsNCi0NCi0JQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QgPSBwRG9jLT5DcmVhdGVOZXdQYWdlKHBhZ2VfaW5kZXgpOw0KLQlpZighcFBhZ2VEaWN0KQ0KLQkJcmV0dXJuIE5VTEw7DQotCUNQREZfQXJyYXkqIHBNZWRpYUJveEFycmF5ID0gRlhfTkVXIENQREZfQXJyYXk7DQotCXBNZWRpYUJveEFycmF5LT5BZGQoRlhfTkVXIENQREZfTnVtYmVyKDApKTsNCi0JcE1lZGlhQm94QXJyYXktPkFkZChGWF9ORVcgQ1BERl9OdW1iZXIoMCkpOw0KLQlwTWVkaWFCb3hBcnJheS0+QWRkKEZYX05FVyBDUERGX051bWJlcihGWF9GTE9BVCh3aWR0aCkpKTsNCi0JcE1lZGlhQm94QXJyYXktPkFkZChGWF9ORVcgQ1BERl9OdW1iZXIoRlhfRkxPQVQoaGVpZ2h0KSkpOw0KLQ0KLQlwUGFnZURpY3QtPlNldEF0KCJNZWRpYUJveCIsIHBNZWRpYUJveEFycmF5KTsNCi0JcFBhZ2VEaWN0LT5TZXRBdCgiUm90YXRlIiwgRlhfTkVXIENQREZfTnVtYmVyKDApKTsNCi0JcFBhZ2VEaWN0LT5TZXRBdCgiUmVzb3VyY2VzIiwgRlhfTkVXIENQREZfRGljdGlvbmFyeSk7DQotDQotCUNQREZfUGFnZSogcFBhZ2UgPSBGWF9ORVcgQ1BERl9QYWdlOw0KLQlwUGFnZS0+TG9hZChwRG9jLHBQYWdlRGljdCk7DQotCXBQYWdlLT5QYXJzZUNvbnRlbnQoKTsNCi0NCi0JcmV0dXJuIHBQYWdlOw0KLX0NCi0NCi1ETExFWFBPUlQgaW50IFNURENBTEwgRlBERlBhZ2VfR2V0Um90YXRpb24oRlBERl9QQUdFIHBhZ2UpDQotew0KLQlDUERGX1BhZ2UqIHBQYWdlID0gKENQREZfUGFnZSopcGFnZTsNCi0JaWYgKCFwUGFnZSB8fCAhcFBhZ2UtPm1fcEZvcm1EaWN0IHx8ICFwUGFnZS0+bV9wRm9ybURpY3QtPktleUV4aXN0KCJUeXBlIikNCi0JCXx8IHBQYWdlLT5tX3BGb3JtRGljdC0+R2V0RWxlbWVudCgiVHlwZSIpLT5HZXREaXJlY3QoKS0+R2V0U3RyaW5nKCkuQ29tcGFyZSgiUGFnZSIpKQ0KLQl7DQotCQlyZXR1cm4gLTE7DQotCX0NCi0JQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IHBQYWdlLT5tX3BGb3JtRGljdDsNCi0NCi0JaW50IHJvdGF0ZSA9IDA7DQotCWlmKHBEaWN0ICE9IE5VTEwpDQotCXsNCi0JCWlmKHBEaWN0LT5LZXlFeGlzdCgiUm90YXRlIikpDQotCQkJcm90YXRlID0gcERpY3QtPkdldEVsZW1lbnQoIlJvdGF0ZSIpLT5HZXREaXJlY3QoKS0+R2V0SW50ZWdlcigpIC8gOTA7DQotCQllbHNlDQotCQl7DQotCQkJaWYocERpY3QtPktleUV4aXN0KCJQYXJlbnQiKSkNCi0JCQl7DQotCQkJCUNQREZfRGljdGlvbmFyeSogcFBhZ2VzID0gKENQREZfRGljdGlvbmFyeSopcERpY3QtPkdldEVsZW1lbnQoIlBhcmVudCIpLT5HZXREaXJlY3QoKTsNCi0JCQkJd2hpbGUocFBhZ2VzKQ0KLQkJCQl7DQotCQkJCQlpZihwUGFnZXMtPktleUV4aXN0KCJSb3RhdGUiKSkNCi0JCQkJCXsNCi0JCQkJCQlyb3RhdGUgPSBwUGFnZXMtPkdldEVsZW1lbnQoIlJvdGF0ZSIpLT5HZXREaXJlY3QoKS0+R2V0SW50ZWdlcigpIC8gOTA7DQotCQkJCQkJYnJlYWs7DQotCQkJCQl9DQotCQkJCQllbHNlIGlmKHBQYWdlcy0+S2V5RXhpc3QoIlBhcmVudCIpKQ0KLQkJCQkJCXBQYWdlcyA9IChDUERGX0RpY3Rpb25hcnkqKXBQYWdlcy0+R2V0RWxlbWVudCgiUGFyZW50IiktPkdldERpcmVjdCgpOw0KLQkJCQkJZWxzZSBicmVhazsNCi0JCQkJfQ0KLQkJCX0NCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsNCi0JCXJldHVybiAtMTsNCi0JfQ0KLQkNCi0JcmV0dXJuIHJvdGF0ZTsNCi19DQotDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGUGFnZV9JbnNlcnRPYmplY3QoRlBERl9QQUdFIHBhZ2UsIEZQREZfUEFHRU9CSkVDVCBwYWdlX29iaikNCi17DQotCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOw0KLQlpZiAoIXBQYWdlIHx8ICFwUGFnZS0+bV9wRm9ybURpY3QgfHwgIXBQYWdlLT5tX3BGb3JtRGljdC0+S2V5RXhpc3QoIlR5cGUiKQ0KLQkJfHwgcFBhZ2UtPm1fcEZvcm1EaWN0LT5HZXRFbGVtZW50KCJUeXBlIiktPkdldERpcmVjdCgpLT5HZXRTdHJpbmcoKS5Db21wYXJlKCJQYWdlIikpDQotCXsNCi0JCXJldHVybjsNCi0JfQ0KLQlDUERGX1BhZ2VPYmplY3QqIHBQYWdlT2JqID0gKENQREZfUGFnZU9iamVjdCopcGFnZV9vYmo7DQotCWlmKHBQYWdlT2JqID09IE5VTEwpDQotCQlyZXR1cm47DQotCUZYX1BPU0lUSU9OIExhc3RQZXJzaXRpb24gPSBwUGFnZS0+R2V0TGFzdE9iamVjdFBvc2l0aW9uKCk7DQotDQotCXBQYWdlLT5JbnNlcnRPYmplY3QoTGFzdFBlcnNpdGlvbiwgcFBhZ2VPYmopOw0KLQlzd2l0Y2gocFBhZ2VPYmotPm1fVHlwZSkNCi0Jew0KLQljYXNlIEZQREZfUEFHRU9CSl9QQVRIOg0KLQkJew0KLQkJCUNQREZfUGF0aE9iamVjdCogcFBhdGhPYmogPSAoQ1BERl9QYXRoT2JqZWN0KilwUGFnZU9iajsNCi0JCQlwUGF0aE9iai0+Q2FsY0JvdW5kaW5nQm94KCk7DQotCQkJYnJlYWs7DQotCQl9DQotCWNhc2UgRlBERl9QQUdFT0JKX1RFWFQ6DQotCQl7DQotCQkJLy8JQ1BERl9QYXRoT2JqZWN0KiBwUGF0aE9iaiA9IChDUERGX1BhdGhPYmplY3QqKXBQYWdlT2JqOw0KLQkJCS8vCXBQYXRoT2JqLT5DYWxjQm91bmRpbmdCb3goKTsNCi0JCQlicmVhazsNCi0JCX0NCi0JY2FzZSBGUERGX1BBR0VPQkpfSU1BR0U6DQotCQl7DQotCQkJQ1BERl9JbWFnZU9iamVjdCogcEltYWdlT2JqID0gKENQREZfSW1hZ2VPYmplY3QqKXBQYWdlT2JqOw0KLQkJCXBJbWFnZU9iai0+Q2FsY0JvdW5kaW5nQm94KCk7DQotCQkJYnJlYWs7DQotCQl9DQotCWNhc2UgRlBERl9QQUdFT0JKX1NIQURJTkc6DQotCQl7DQotCQkJQ1BERl9TaGFkaW5nT2JqZWN0KiBwU2hhZGluZ09iaiA9IChDUERGX1NoYWRpbmdPYmplY3QqKXBQYWdlT2JqOw0KLQkJCXBTaGFkaW5nT2JqLT5DYWxjQm91bmRpbmdCb3goKTsNCi0JCQlicmVhazsNCi0JCX0NCi0JY2FzZSBGUERGX1BBR0VPQkpfRk9STToNCi0JCXsNCi0JCQlDUERGX0Zvcm1PYmplY3QqIHBGb3JtT2JqID0gKENQREZfRm9ybU9iamVjdCopcFBhZ2VPYmo7DQotCQkJcEZvcm1PYmotPkNhbGNCb3VuZGluZ0JveCgpOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQlkZWZhdWx0Og0KLQkJYnJlYWs7DQotCX0NCi0NCi0JLy8JcFBhZ2UtPlBhcnNlQ29udGVudCgpOw0KLQkvL3BQYWdlLT5HZW5lcmF0ZUNvbnRlbnQoKTsNCi0NCi19DQotDQotRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZQYWdlX0NvdW50T2JqZWN0KEZQREZfUEFHRSBwYWdlKQ0KLXsNCi0JQ1BERl9QYWdlKiBwUGFnZSA9IChDUERGX1BhZ2UqKXBhZ2U7DQotCWlmICghcFBhZ2UgfHwgIXBQYWdlLT5tX3BGb3JtRGljdCB8fCAhcFBhZ2UtPm1fcEZvcm1EaWN0LT5LZXlFeGlzdCgiVHlwZSIpDQotCQl8fCBwUGFnZS0+bV9wRm9ybURpY3QtPkdldEVsZW1lbnQoIlR5cGUiKS0+R2V0RGlyZWN0KCktPkdldFN0cmluZygpLkNvbXBhcmUoIlBhZ2UiKSkNCi0Jew0KLQkJcmV0dXJuIC0xOw0KLQl9DQotCXJldHVybiBwUGFnZS0+Q291bnRPYmplY3RzKCk7DQotLy8JcmV0dXJuIDA7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX1BBR0VPQkpFQ1QgU1REQ0FMTCBGUERGUGFnZV9HZXRPYmplY3QoRlBERl9QQUdFIHBhZ2UsIGludCBpbmRleCkNCi17DQotCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOw0KLQlpZiAoIXBQYWdlIHx8ICFwUGFnZS0+bV9wRm9ybURpY3QgfHwgIXBQYWdlLT5tX3BGb3JtRGljdC0+S2V5RXhpc3QoIlR5cGUiKQ0KLQkJfHwgcFBhZ2UtPm1fcEZvcm1EaWN0LT5HZXRFbGVtZW50KCJUeXBlIiktPkdldERpcmVjdCgpLT5HZXRTdHJpbmcoKS5Db21wYXJlKCJQYWdlIikpDQotCXsNCi0JCXJldHVybiBOVUxMOw0KLQl9DQotCXJldHVybiBwUGFnZS0+R2V0T2JqZWN0QnlJbmRleChpbmRleCk7DQotLy8JcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGUGFnZV9IYXNUcmFuc3BhcmVuY3koRlBERl9QQUdFIHBhZ2UpDQotew0KLQlpZighcGFnZSkgcmV0dXJuIEZBTFNFOw0KLQlDUERGX1BhZ2UqIHBQYWdlID0gKENQREZfUGFnZSopcGFnZTsNCi0NCi0JcmV0dXJuIHBQYWdlLT5CYWNrZ3JvdW5kQWxwaGFOZWVkZWQoKTsNCi19DQotDQotRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZQYWdlT2JqX0hhc1RyYW5zcGFyZW5jeShGUERGX1BBR0VPQkpFQ1QgcGFnZU9iamVjdCkNCi17DQotCWlmKCFwYWdlT2JqZWN0KSByZXR1cm4gRkFMU0U7DQotCUNQREZfUGFnZU9iamVjdCogcFBhZ2VPYmogPSAoQ1BERl9QYWdlT2JqZWN0KilwYWdlT2JqZWN0Ow0KLQ0KLQljb25zdCBDUERGX0dlbmVyYWxTdGF0ZURhdGEqIHBHZW5lcmFsU3RhdGUgPSBwUGFnZU9iai0+bV9HZW5lcmFsU3RhdGU7DQotCWludCBibGVuZF90eXBlID0gcEdlbmVyYWxTdGF0ZSA/IHBHZW5lcmFsU3RhdGUtPm1fQmxlbmRUeXBlIDogRlhESUJfQkxFTkRfTk9STUFMOw0KLQlpZiAoYmxlbmRfdHlwZSAhPSBGWERJQl9CTEVORF9OT1JNQUwpIHJldHVybiBUUlVFOw0KLQ0KLQlDUERGX0RpY3Rpb25hcnkqIHBTTWFza0RpY3QgPSBwR2VuZXJhbFN0YXRlID8gKENQREZfRGljdGlvbmFyeSopcEdlbmVyYWxTdGF0ZS0+bV9wU29mdE1hc2sgOiBOVUxMOw0KLQlpZihwU01hc2tEaWN0KSByZXR1cm4gVFJVRTsNCi0NCi0JaWYocEdlbmVyYWxTdGF0ZSAmJiBwR2VuZXJhbFN0YXRlLT5tX0ZpbGxBbHBoYSAhPSAxLjBmKQ0KLQkJcmV0dXJuIFRSVUU7DQotDQotCWlmKHBQYWdlT2JqLT5tX1R5cGUgPT0gUERGUEFHRV9QQVRIKQ0KLQl7DQotCQlpZihwR2VuZXJhbFN0YXRlICYmIHBHZW5lcmFsU3RhdGUtPm1fU3Ryb2tlQWxwaGEgIT0gMS4wZikNCi0JCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQ0KLQlpZihwUGFnZU9iai0+bV9UeXBlID09IFBERlBBR0VfRk9STSkNCi0Jew0KLQkJQ1BERl9Gb3JtT2JqZWN0KiBwRm9ybU9iaiA9IChDUERGX0Zvcm1PYmplY3QqKXBQYWdlT2JqOw0KLQkJaWYocEZvcm1PYmotPm1fcEZvcm0gJiYgKHBGb3JtT2JqLT5tX3BGb3JtLT5tX1RyYW5zcGFyZW5jeSAmIFBERlRSQU5TX0lTT0xBVEVEKSkNCi0JCQlyZXR1cm4gVFJVRTsNCi0JCWlmKHBGb3JtT2JqLT5tX3BGb3JtICYmICghKHBGb3JtT2JqLT5tX3BGb3JtLT5tX1RyYW5zcGFyZW5jeSAmIFBERlRSQU5TX0lTT0xBVEVEKSAmJiAocEZvcm1PYmotPm1fcEZvcm0tPm1fVHJhbnNwYXJlbmN5ICYgUERGVFJBTlNfR1JPVVApKSkNCi0JCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGUGFnZV9HZW5lcmF0ZUNvbnRlbnQoRlBERl9QQUdFIHBhZ2UpDQotew0KLQlDUERGX1BhZ2UqIHBQYWdlID0gKENQREZfUGFnZSopcGFnZTsNCi0JaWYgKCFwUGFnZSB8fCAhcFBhZ2UtPm1fcEZvcm1EaWN0IHx8ICFwUGFnZS0+bV9wRm9ybURpY3QtPktleUV4aXN0KCJUeXBlIikNCi0JCXx8IHBQYWdlLT5tX3BGb3JtRGljdC0+R2V0RWxlbWVudCgiVHlwZSIpLT5HZXREaXJlY3QoKS0+R2V0U3RyaW5nKCkuQ29tcGFyZSgiUGFnZSIpKQ0KLQl7DQotCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0JQ1BERl9QYWdlQ29udGVudEdlbmVyYXRlIENHKHBQYWdlKTsNCi0JQ0cuR2VuZXJhdGVDb250ZW50KCk7DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZQYWdlT2JqX1RyYW5zZm9ybShGUERGX1BBR0VPQkpFQ1QgcGFnZV9vYmplY3QsDQotCQkJIGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpICANCi17DQotCUNQREZfUGFnZU9iamVjdCogcFBhZ2VPYmogPSAoQ1BERl9QYWdlT2JqZWN0KilwYWdlX29iamVjdDsNCi0JaWYocFBhZ2VPYmogPT0gTlVMTCkNCi0JCXJldHVybjsNCi0vL1BERl9JbWFnZU9iamVjdCogcEltYWdlT2JqID0gRlhfTkVXIENQREZfSW1hZ2VPYmplY3Q7DQotCUNGWF9BZmZpbmVNYXRyaXggbWF0cml4KChGWF9GTE9BVClhLChGWF9GTE9BVCliLChGWF9GTE9BVCljLChGWF9GTE9BVClkLChGWF9GTE9BVCllLChGWF9GTE9BVClmKTsNCi0JcFBhZ2VPYmotPlRyYW5zZm9ybShtYXRyaXgpOw0KLX0NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZQYWdlX1RyYW5zZm9ybUFubm90cyhGUERGX1BBR0UgcGFnZSwNCi0JCQkJCQkJCQkJCSAgIGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpDQotew0KLQlpZihwYWdlID09IE5VTEwpDQotCQlyZXR1cm47DQotCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOw0KLQlDUERGX0Fubm90TGlzdCBBbm5vdExpc3QocFBhZ2UpOw0KLQlmb3IgKGludCBpPTA7IGk8QW5ub3RMaXN0LkNvdW50KCk7aSsrKQ0KLQl7DQotCQlDUERGX0Fubm90KiBwQW5ub3QgPSBBbm5vdExpc3QuR2V0QXQoaSk7DQotCQkvLyB0cmFuc2Zvcm1Bbm5vdHMgUmVjdGFuZ2xlDQotCQlDUERGX1JlY3QgcmVjdDsNCi0JCXBBbm5vdC0+R2V0UmVjdChyZWN0KTsNCi0JCUNGWF9BZmZpbmVNYXRyaXggbWF0cml4KChGWF9GTE9BVClhLChGWF9GTE9BVCliLChGWF9GTE9BVCljLChGWF9GTE9BVClkLChGWF9GTE9BVCllLChGWF9GTE9BVClmKTsNCi0JCXJlY3QuVHJhbnNmb3JtKCZtYXRyaXgpOw0KLQkJQ1BERl9BcnJheSAqcFJlY3RBcnJheSA9IE5VTEw7DQotCQlwUmVjdEFycmF5ID0gcEFubm90LT5tX3BBbm5vdERpY3QtPkdldEFycmF5KCJSZWN0Iik7DQotCQlpZiAoIXBSZWN0QXJyYXkpIHBSZWN0QXJyYXk9Q1BERl9BcnJheTo6Q3JlYXRlKCk7DQotCQlwUmVjdEFycmF5LT5TZXRBdCgwLEZYX05FVyBDUERGX051bWJlcihyZWN0LmxlZnQpKTsNCi0JCXBSZWN0QXJyYXktPlNldEF0KDEsRlhfTkVXIENQREZfTnVtYmVyKHJlY3QuYm90dG9tKSk7DQotCQlwUmVjdEFycmF5LT5TZXRBdCgyLEZYX05FVyBDUERGX051bWJlcihyZWN0LnJpZ2h0KSk7DQotCQlwUmVjdEFycmF5LT5TZXRBdCgzLEZYX05FVyBDUERGX051bWJlcihyZWN0LnRvcCkpOw0KLQkJcEFubm90LT5tX3BBbm5vdERpY3QtPlNldEF0KCJSZWN0IixwUmVjdEFycmF5KTsNCi0NCi0JCS8vVHJhbnNmb3JtIEFQJ3MgcmVjdGFuZ2xlDQotCQkvL1RvIERvDQotDQotCX0NCi0NCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworLy8gI2luY2x1ZGUgIng6L3BkZi9mcGRmYXBpNS9pbmNsdWRlL2ZwZGZhcGkuaCIKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfZGVmaW5lLmgiCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9mcGRmZWRpdC5oIgorCisKKyNpZiBfRlhfT1NfID09IF9GWF9BTkRST0lEXworI2luY2x1ZGUgInRpbWUuaCIKKyNlbHNlCisjaW5jbHVkZSA8Y3RpbWU+CisjZW5kaWYKKworRExMRVhQT1JUIEZQREZfRE9DVU1FTlQgU1REQ0FMTCBGUERGX0NyZWF0ZU5ld0RvY3VtZW50KCkKK3sKKwlDUERGX0RvY3VtZW50KiBwRG9jID0gRlhfTkVXIENQREZfRG9jdW1lbnQ7CisJaWYgKCFwRG9jKQorCQlyZXR1cm4gTlVMTDsKKwlwRG9jLT5DcmVhdGVOZXdEb2MoKTsKKwl0aW1lX3QgY3VycmVudFRpbWU7CisKKwlDRlhfQnl0ZVN0cmluZyBEYXRlU3RyOworCisJaWYoRlNES19Jc1NhbmRCb3hQb2xpY3lFbmFibGVkKEZQREZfUE9MSUNZX01BQ0hJTkVUSU1FX0FDQ0VTUykpCisJeworCQlpZiAoIC0xICE9IHRpbWUoICZjdXJyZW50VGltZSApICkKKwkJeworCQkJdG0gKiBwVE0gPSBsb2NhbHRpbWUoICZjdXJyZW50VGltZSApOworCQkJaWYgKCBwVE0gKQorCQkJeworCQkJCURhdGVTdHIuRm9ybWF0KAkiRDolMDRkJTAyZCUwMmQlMDJkJTAyZCUwMmQiLCBwVE0tPnRtX3llYXIrMTkwMCwgcFRNLT50bV9tb24rMSwKKwkJCQkJcFRNLT50bV9tZGF5LCBwVE0tPnRtX2hvdXIsIHBUTS0+dG1fbWluLCBwVE0tPnRtX3NlYyApOworCQkJfQorCQl9CisJfQorCQorCUNQREZfRGljdGlvbmFyeSogcEluZm9EaWN0ID0gTlVMTDsKKwlwSW5mb0RpY3QgPSBwRG9jLT5HZXRJbmZvKCk7CisJaWYgKHBJbmZvRGljdCkKKwl7CisJCWlmKEZTREtfSXNTYW5kQm94UG9saWN5RW5hYmxlZChGUERGX1BPTElDWV9NQUNISU5FVElNRV9BQ0NFU1MpKQorCQkJcEluZm9EaWN0LT5TZXRBdCgiQ3JlYXRpb25EYXRlIiwgbmV3IENQREZfU3RyaW5nKERhdGVTdHIpKTsKKyNpZmRlZiBGT1hJVF9DSFJPTUVfQlVJTEQKKwkJcEluZm9EaWN0LT5TZXRBdCgiQ3JlYXRvciIsRlhfTkVXIENQREZfU3RyaW5nKEwiR29vZ2xlIikpOworI2Vsc2UKKwkJcEluZm9EaWN0LT5TZXRBdCgiQ3JlYXRvciIsRlhfTkVXIENQREZfU3RyaW5nKEwiRm94aXQgUERGIFNESyBETEwgMi4wIC0gRm94aXQgU29mdHdhcmUiKSk7CisjZW5kaWYKKwl9CisKKwlyZXR1cm4gcERvYzsKK30KKworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGUGFnZV9EZWxldGUoRlBERl9ET0NVTUVOVCBkb2N1bWVudCwgaW50IHBhZ2VfaW5kZXgpCit7CisJQ1BERl9Eb2N1bWVudCogcERvYyA9IChDUERGX0RvY3VtZW50Kilkb2N1bWVudDsKKwlpZiAocERvYyA9PSBOVUxMKSAKKwkJcmV0dXJuOworCWlmIChwYWdlX2luZGV4IDwgMCB8fCBwYWdlX2luZGV4ID49IHBEb2MtPkdldFBhZ2VDb3VudCgpKSAKKwkJcmV0dXJuOworCisJcERvYy0+RGVsZXRlUGFnZShwYWdlX2luZGV4KTsKK30KKworRExMRVhQT1JUIEZQREZfUEFHRSBTVERDQUxMIEZQREZQYWdlX05ldyhGUERGX0RPQ1VNRU5UIGRvY3VtZW50LCBpbnQgcGFnZV9pbmRleCwgZG91YmxlIHdpZHRoLCBkb3VibGUgaGVpZ2h0KQoreworCWlmICghZG9jdW1lbnQpCisJCXJldHVybiBOVUxMOworCisvLwlDUERGX1BhcnNlciogcFBhcnNlciA9IChDUERGX1BhcnNlciopZG9jdW1lbnQ7CisJQ1BERl9Eb2N1bWVudCogcERvYyA9IChDUERGX0RvY3VtZW50Kilkb2N1bWVudDsKKwlpZihwYWdlX2luZGV4IDwgMCkKKwkJcGFnZV9pbmRleCA9IDA7CisJaWYocERvYy0+R2V0UGFnZUNvdW50KCk8cGFnZV9pbmRleCkKKwkJcGFnZV9pbmRleCA9IHBEb2MtPkdldFBhZ2VDb3VudCgpOworLy8JaWYgKHBhZ2VfaW5kZXggPCAwIHx8IHBhZ2VfaW5kZXggPj0gcERvYy0+R2V0UGFnZUNvdW50KCkpIAorLy8JCXJldHVybiBOVUxMOworCisJQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QgPSBwRG9jLT5DcmVhdGVOZXdQYWdlKHBhZ2VfaW5kZXgpOworCWlmKCFwUGFnZURpY3QpCisJCXJldHVybiBOVUxMOworCUNQREZfQXJyYXkqIHBNZWRpYUJveEFycmF5ID0gRlhfTkVXIENQREZfQXJyYXk7CisJcE1lZGlhQm94QXJyYXktPkFkZChGWF9ORVcgQ1BERl9OdW1iZXIoMCkpOworCXBNZWRpYUJveEFycmF5LT5BZGQoRlhfTkVXIENQREZfTnVtYmVyKDApKTsKKwlwTWVkaWFCb3hBcnJheS0+QWRkKEZYX05FVyBDUERGX051bWJlcihGWF9GTE9BVCh3aWR0aCkpKTsKKwlwTWVkaWFCb3hBcnJheS0+QWRkKEZYX05FVyBDUERGX051bWJlcihGWF9GTE9BVChoZWlnaHQpKSk7CisKKwlwUGFnZURpY3QtPlNldEF0KCJNZWRpYUJveCIsIHBNZWRpYUJveEFycmF5KTsKKwlwUGFnZURpY3QtPlNldEF0KCJSb3RhdGUiLCBGWF9ORVcgQ1BERl9OdW1iZXIoMCkpOworCXBQYWdlRGljdC0+U2V0QXQoIlJlc291cmNlcyIsIEZYX05FVyBDUERGX0RpY3Rpb25hcnkpOworCisJQ1BERl9QYWdlKiBwUGFnZSA9IEZYX05FVyBDUERGX1BhZ2U7CisJcFBhZ2UtPkxvYWQocERvYyxwUGFnZURpY3QpOworCXBQYWdlLT5QYXJzZUNvbnRlbnQoKTsKKworCXJldHVybiBwUGFnZTsKK30KKworRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZQYWdlX0dldFJvdGF0aW9uKEZQREZfUEFHRSBwYWdlKQoreworCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOworCWlmICghcFBhZ2UgfHwgIXBQYWdlLT5tX3BGb3JtRGljdCB8fCAhcFBhZ2UtPm1fcEZvcm1EaWN0LT5LZXlFeGlzdCgiVHlwZSIpCisJCXx8IHBQYWdlLT5tX3BGb3JtRGljdC0+R2V0RWxlbWVudCgiVHlwZSIpLT5HZXREaXJlY3QoKS0+R2V0U3RyaW5nKCkuQ29tcGFyZSgiUGFnZSIpKQorCXsKKwkJcmV0dXJuIC0xOworCX0KKwlDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gcFBhZ2UtPm1fcEZvcm1EaWN0OworCisJaW50IHJvdGF0ZSA9IDA7CisJaWYocERpY3QgIT0gTlVMTCkKKwl7CisJCWlmKHBEaWN0LT5LZXlFeGlzdCgiUm90YXRlIikpCisJCQlyb3RhdGUgPSBwRGljdC0+R2V0RWxlbWVudCgiUm90YXRlIiktPkdldERpcmVjdCgpLT5HZXRJbnRlZ2VyKCkgLyA5MDsKKwkJZWxzZQorCQl7CisJCQlpZihwRGljdC0+S2V5RXhpc3QoIlBhcmVudCIpKQorCQkJeworCQkJCUNQREZfRGljdGlvbmFyeSogcFBhZ2VzID0gKENQREZfRGljdGlvbmFyeSopcERpY3QtPkdldEVsZW1lbnQoIlBhcmVudCIpLT5HZXREaXJlY3QoKTsKKwkJCQl3aGlsZShwUGFnZXMpCisJCQkJeworCQkJCQlpZihwUGFnZXMtPktleUV4aXN0KCJSb3RhdGUiKSkKKwkJCQkJeworCQkJCQkJcm90YXRlID0gcFBhZ2VzLT5HZXRFbGVtZW50KCJSb3RhdGUiKS0+R2V0RGlyZWN0KCktPkdldEludGVnZXIoKSAvIDkwOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZWxzZSBpZihwUGFnZXMtPktleUV4aXN0KCJQYXJlbnQiKSkKKwkJCQkJCXBQYWdlcyA9IChDUERGX0RpY3Rpb25hcnkqKXBQYWdlcy0+R2V0RWxlbWVudCgiUGFyZW50IiktPkdldERpcmVjdCgpOworCQkJCQllbHNlIGJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwllbHNlCisJeworCQlyZXR1cm4gLTE7CisJfQorCQorCXJldHVybiByb3RhdGU7Cit9CisKK0RMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERlBhZ2VfSW5zZXJ0T2JqZWN0KEZQREZfUEFHRSBwYWdlLCBGUERGX1BBR0VPQkpFQ1QgcGFnZV9vYmopCit7CisJQ1BERl9QYWdlKiBwUGFnZSA9IChDUERGX1BhZ2UqKXBhZ2U7CisJaWYgKCFwUGFnZSB8fCAhcFBhZ2UtPm1fcEZvcm1EaWN0IHx8ICFwUGFnZS0+bV9wRm9ybURpY3QtPktleUV4aXN0KCJUeXBlIikKKwkJfHwgcFBhZ2UtPm1fcEZvcm1EaWN0LT5HZXRFbGVtZW50KCJUeXBlIiktPkdldERpcmVjdCgpLT5HZXRTdHJpbmcoKS5Db21wYXJlKCJQYWdlIikpCisJeworCQlyZXR1cm47CisJfQorCUNQREZfUGFnZU9iamVjdCogcFBhZ2VPYmogPSAoQ1BERl9QYWdlT2JqZWN0KilwYWdlX29iajsKKwlpZihwUGFnZU9iaiA9PSBOVUxMKQorCQlyZXR1cm47CisJRlhfUE9TSVRJT04gTGFzdFBlcnNpdGlvbiA9IHBQYWdlLT5HZXRMYXN0T2JqZWN0UG9zaXRpb24oKTsKKworCXBQYWdlLT5JbnNlcnRPYmplY3QoTGFzdFBlcnNpdGlvbiwgcFBhZ2VPYmopOworCXN3aXRjaChwUGFnZU9iai0+bV9UeXBlKQorCXsKKwljYXNlIEZQREZfUEFHRU9CSl9QQVRIOgorCQl7CisJCQlDUERGX1BhdGhPYmplY3QqIHBQYXRoT2JqID0gKENQREZfUGF0aE9iamVjdCopcFBhZ2VPYmo7CisJCQlwUGF0aE9iai0+Q2FsY0JvdW5kaW5nQm94KCk7CisJCQlicmVhazsKKwkJfQorCWNhc2UgRlBERl9QQUdFT0JKX1RFWFQ6CisJCXsKKwkJCS8vCUNQREZfUGF0aE9iamVjdCogcFBhdGhPYmogPSAoQ1BERl9QYXRoT2JqZWN0KilwUGFnZU9iajsKKwkJCS8vCXBQYXRoT2JqLT5DYWxjQm91bmRpbmdCb3goKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBGUERGX1BBR0VPQkpfSU1BR0U6CisJCXsKKwkJCUNQREZfSW1hZ2VPYmplY3QqIHBJbWFnZU9iaiA9IChDUERGX0ltYWdlT2JqZWN0KilwUGFnZU9iajsKKwkJCXBJbWFnZU9iai0+Q2FsY0JvdW5kaW5nQm94KCk7CisJCQlicmVhazsKKwkJfQorCWNhc2UgRlBERl9QQUdFT0JKX1NIQURJTkc6CisJCXsKKwkJCUNQREZfU2hhZGluZ09iamVjdCogcFNoYWRpbmdPYmogPSAoQ1BERl9TaGFkaW5nT2JqZWN0KilwUGFnZU9iajsKKwkJCXBTaGFkaW5nT2JqLT5DYWxjQm91bmRpbmdCb3goKTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBGUERGX1BBR0VPQkpfRk9STToKKwkJeworCQkJQ1BERl9Gb3JtT2JqZWN0KiBwRm9ybU9iaiA9IChDUERGX0Zvcm1PYmplY3QqKXBQYWdlT2JqOworCQkJcEZvcm1PYmotPkNhbGNCb3VuZGluZ0JveCgpOworCQkJYnJlYWs7CisJCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwkvLwlwUGFnZS0+UGFyc2VDb250ZW50KCk7CisJLy9wUGFnZS0+R2VuZXJhdGVDb250ZW50KCk7CisKK30KKworRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZQYWdlX0NvdW50T2JqZWN0KEZQREZfUEFHRSBwYWdlKQoreworCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOworCWlmICghcFBhZ2UgfHwgIXBQYWdlLT5tX3BGb3JtRGljdCB8fCAhcFBhZ2UtPm1fcEZvcm1EaWN0LT5LZXlFeGlzdCgiVHlwZSIpCisJCXx8IHBQYWdlLT5tX3BGb3JtRGljdC0+R2V0RWxlbWVudCgiVHlwZSIpLT5HZXREaXJlY3QoKS0+R2V0U3RyaW5nKCkuQ29tcGFyZSgiUGFnZSIpKQorCXsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gcFBhZ2UtPkNvdW50T2JqZWN0cygpOworLy8JcmV0dXJuIDA7Cit9CisKK0RMTEVYUE9SVCBGUERGX1BBR0VPQkpFQ1QgU1REQ0FMTCBGUERGUGFnZV9HZXRPYmplY3QoRlBERl9QQUdFIHBhZ2UsIGludCBpbmRleCkKK3sKKwlDUERGX1BhZ2UqIHBQYWdlID0gKENQREZfUGFnZSopcGFnZTsKKwlpZiAoIXBQYWdlIHx8ICFwUGFnZS0+bV9wRm9ybURpY3QgfHwgIXBQYWdlLT5tX3BGb3JtRGljdC0+S2V5RXhpc3QoIlR5cGUiKQorCQl8fCBwUGFnZS0+bV9wRm9ybURpY3QtPkdldEVsZW1lbnQoIlR5cGUiKS0+R2V0RGlyZWN0KCktPkdldFN0cmluZygpLkNvbXBhcmUoIlBhZ2UiKSkKKwl7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gcFBhZ2UtPkdldE9iamVjdEJ5SW5kZXgoaW5kZXgpOworLy8JcmV0dXJuIE5VTEw7Cit9CisKK0RMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGUGFnZV9IYXNUcmFuc3BhcmVuY3koRlBERl9QQUdFIHBhZ2UpCit7CisJaWYoIXBhZ2UpIHJldHVybiBGQUxTRTsKKwlDUERGX1BhZ2UqIHBQYWdlID0gKENQREZfUGFnZSopcGFnZTsKKworCXJldHVybiBwUGFnZS0+QmFja2dyb3VuZEFscGhhTmVlZGVkKCk7Cit9CisKK0RMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGUGFnZU9ial9IYXNUcmFuc3BhcmVuY3koRlBERl9QQUdFT0JKRUNUIHBhZ2VPYmplY3QpCit7CisJaWYoIXBhZ2VPYmplY3QpIHJldHVybiBGQUxTRTsKKwlDUERGX1BhZ2VPYmplY3QqIHBQYWdlT2JqID0gKENQREZfUGFnZU9iamVjdCopcGFnZU9iamVjdDsKKworCWNvbnN0IENQREZfR2VuZXJhbFN0YXRlRGF0YSogcEdlbmVyYWxTdGF0ZSA9IHBQYWdlT2JqLT5tX0dlbmVyYWxTdGF0ZTsKKwlpbnQgYmxlbmRfdHlwZSA9IHBHZW5lcmFsU3RhdGUgPyBwR2VuZXJhbFN0YXRlLT5tX0JsZW5kVHlwZSA6IEZYRElCX0JMRU5EX05PUk1BTDsKKwlpZiAoYmxlbmRfdHlwZSAhPSBGWERJQl9CTEVORF9OT1JNQUwpIHJldHVybiBUUlVFOworCisJQ1BERl9EaWN0aW9uYXJ5KiBwU01hc2tEaWN0ID0gcEdlbmVyYWxTdGF0ZSA/IChDUERGX0RpY3Rpb25hcnkqKXBHZW5lcmFsU3RhdGUtPm1fcFNvZnRNYXNrIDogTlVMTDsKKwlpZihwU01hc2tEaWN0KSByZXR1cm4gVFJVRTsKKworCWlmKHBHZW5lcmFsU3RhdGUgJiYgcEdlbmVyYWxTdGF0ZS0+bV9GaWxsQWxwaGEgIT0gMS4wZikKKwkJcmV0dXJuIFRSVUU7CisKKwlpZihwUGFnZU9iai0+bV9UeXBlID09IFBERlBBR0VfUEFUSCkKKwl7CisJCWlmKHBHZW5lcmFsU3RhdGUgJiYgcEdlbmVyYWxTdGF0ZS0+bV9TdHJva2VBbHBoYSAhPSAxLjBmKQorCQkJcmV0dXJuIFRSVUU7CisJfQorCisJaWYocFBhZ2VPYmotPm1fVHlwZSA9PSBQREZQQUdFX0ZPUk0pCisJeworCQlDUERGX0Zvcm1PYmplY3QqIHBGb3JtT2JqID0gKENQREZfRm9ybU9iamVjdCopcFBhZ2VPYmo7CisJCWlmKHBGb3JtT2JqLT5tX3BGb3JtICYmIChwRm9ybU9iai0+bV9wRm9ybS0+bV9UcmFuc3BhcmVuY3kgJiBQREZUUkFOU19JU09MQVRFRCkpCisJCQlyZXR1cm4gVFJVRTsKKwkJaWYocEZvcm1PYmotPm1fcEZvcm0gJiYgKCEocEZvcm1PYmotPm1fcEZvcm0tPm1fVHJhbnNwYXJlbmN5ICYgUERGVFJBTlNfSVNPTEFURUQpICYmIChwRm9ybU9iai0+bV9wRm9ybS0+bV9UcmFuc3BhcmVuY3kgJiBQREZUUkFOU19HUk9VUCkpKQorCQkJcmV0dXJuIFRSVUU7CisJfQorCXJldHVybiBGQUxTRTsKK30KKworRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZQYWdlX0dlbmVyYXRlQ29udGVudChGUERGX1BBR0UgcGFnZSkKK3sKKwlDUERGX1BhZ2UqIHBQYWdlID0gKENQREZfUGFnZSopcGFnZTsKKwlpZiAoIXBQYWdlIHx8ICFwUGFnZS0+bV9wRm9ybURpY3QgfHwgIXBQYWdlLT5tX3BGb3JtRGljdC0+S2V5RXhpc3QoIlR5cGUiKQorCQl8fCBwUGFnZS0+bV9wRm9ybURpY3QtPkdldEVsZW1lbnQoIlR5cGUiKS0+R2V0RGlyZWN0KCktPkdldFN0cmluZygpLkNvbXBhcmUoIlBhZ2UiKSkKKwl7CisJCXJldHVybiBGQUxTRTsKKwl9CisJQ1BERl9QYWdlQ29udGVudEdlbmVyYXRlIENHKHBQYWdlKTsKKwlDRy5HZW5lcmF0ZUNvbnRlbnQoKTsKKworCXJldHVybiBUUlVFOworfQorCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZQYWdlT2JqX1RyYW5zZm9ybShGUERGX1BBR0VPQkpFQ1QgcGFnZV9vYmplY3QsCisJCQkgZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZikgIAoreworCUNQREZfUGFnZU9iamVjdCogcFBhZ2VPYmogPSAoQ1BERl9QYWdlT2JqZWN0KilwYWdlX29iamVjdDsKKwlpZihwUGFnZU9iaiA9PSBOVUxMKQorCQlyZXR1cm47CisvL1BERl9JbWFnZU9iamVjdCogcEltYWdlT2JqID0gRlhfTkVXIENQREZfSW1hZ2VPYmplY3Q7CisJQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXgoKEZYX0ZMT0FUKWEsKEZYX0ZMT0FUKWIsKEZYX0ZMT0FUKWMsKEZYX0ZMT0FUKWQsKEZYX0ZMT0FUKWUsKEZYX0ZMT0FUKWYpOworCXBQYWdlT2JqLT5UcmFuc2Zvcm0obWF0cml4KTsKK30KK0RMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERlBhZ2VfVHJhbnNmb3JtQW5ub3RzKEZQREZfUEFHRSBwYWdlLAorCQkJCQkJCQkJCQkgICBkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIGUsIGRvdWJsZSBmKQoreworCWlmKHBhZ2UgPT0gTlVMTCkKKwkJcmV0dXJuOworCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOworCUNQREZfQW5ub3RMaXN0IEFubm90TGlzdChwUGFnZSk7CisJZm9yIChpbnQgaT0wOyBpPEFubm90TGlzdC5Db3VudCgpO2krKykKKwl7CisJCUNQREZfQW5ub3QqIHBBbm5vdCA9IEFubm90TGlzdC5HZXRBdChpKTsKKwkJLy8gdHJhbnNmb3JtQW5ub3RzIFJlY3RhbmdsZQorCQlDUERGX1JlY3QgcmVjdDsKKwkJcEFubm90LT5HZXRSZWN0KHJlY3QpOworCQlDRlhfQWZmaW5lTWF0cml4IG1hdHJpeCgoRlhfRkxPQVQpYSwoRlhfRkxPQVQpYiwoRlhfRkxPQVQpYywoRlhfRkxPQVQpZCwoRlhfRkxPQVQpZSwoRlhfRkxPQVQpZik7CisJCXJlY3QuVHJhbnNmb3JtKCZtYXRyaXgpOworCQlDUERGX0FycmF5ICpwUmVjdEFycmF5ID0gTlVMTDsKKwkJcFJlY3RBcnJheSA9IHBBbm5vdC0+bV9wQW5ub3REaWN0LT5HZXRBcnJheSgiUmVjdCIpOworCQlpZiAoIXBSZWN0QXJyYXkpIHBSZWN0QXJyYXk9Q1BERl9BcnJheTo6Q3JlYXRlKCk7CisJCXBSZWN0QXJyYXktPlNldEF0KDAsRlhfTkVXIENQREZfTnVtYmVyKHJlY3QubGVmdCkpOworCQlwUmVjdEFycmF5LT5TZXRBdCgxLEZYX05FVyBDUERGX051bWJlcihyZWN0LmJvdHRvbSkpOworCQlwUmVjdEFycmF5LT5TZXRBdCgyLEZYX05FVyBDUERGX051bWJlcihyZWN0LnJpZ2h0KSk7CisJCXBSZWN0QXJyYXktPlNldEF0KDMsRlhfTkVXIENQREZfTnVtYmVyKHJlY3QudG9wKSk7CisJCXBBbm5vdC0+bV9wQW5ub3REaWN0LT5TZXRBdCgiUmVjdCIscFJlY3RBcnJheSk7CisKKwkJLy9UcmFuc2Zvcm0gQVAncyByZWN0YW5nbGUKKwkJLy9UbyBEbworCisJfQorCit9CmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9mcGRmZm9ybWZpbGwuY3BwIGIvZnBkZnNkay9zcmMvZnBkZmZvcm1maWxsLmNwcAppbmRleCAxMDExNDZiLi4yZGU3NjAzIDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9mcGRmZm9ybWZpbGwuY3BwCisrKyBiL2ZwZGZzZGsvc3JjL2ZwZGZmb3JtZmlsbC5jcHAKQEAgLTEsNDQxICsxLDQ0MSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnBkZnZpZXcuaCINCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mcGRmZm9ybWZpbGwuaCINCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX2RlZmluZS5oIg0KLSNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfbWdyLmgiDQotDQotDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvamF2YXNjcmlwdC9JSmF2YVNjcmlwdC5oIg0KLQ0KLQ0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERQYWdlX0hhc0Zvcm1GaWVsZEF0UG9pbnQoRlBERl9GT1JNSEFORExFIGhIYW5kbGUsIEZQREZfUEFHRSBwYWdlLGRvdWJsZSBwYWdlX3gsIGRvdWJsZSBwYWdlX3kpDQotew0KLQlpZighcGFnZSB8fCAhaEhhbmRsZSkNCi0JCXJldHVybiAtMTsNCi0JQ1BERl9QYWdlICogcFBhZ2UgPSAoQ1BERl9QYWdlKikgcGFnZTsNCi0NCi0JQ1BERl9JbnRlckZvcm0gKiBwSW50ZXJGb3JtID0gTlVMTDsNCi0JcEludGVyRm9ybSA9IG5ldyBDUERGX0ludGVyRm9ybShwUGFnZS0+bV9wRG9jdW1lbnQsRkFMU0UpOw0KLQlpZiAoIXBJbnRlckZvcm0pDQotCQlyZXR1cm4gLTE7DQotCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ3RybCA9IHBJbnRlckZvcm0tPkdldENvbnRyb2xBdFBvaW50KHBQYWdlLCAoRlhfRkxPQVQpcGFnZV94LCAoRlhfRkxPQVQpcGFnZV95KTsNCi0JaWYoIXBGb3JtQ3RybCkNCi0Jew0KLQkJZGVsZXRlIHBJbnRlckZvcm07DQotCQlyZXR1cm4gLTE7DQotCX0NCi0JQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSBwRm9ybUN0cmwtPkdldEZpZWxkKCk7DQotCWlmKCFwRm9ybUZpZWxkKQ0KLQl7DQotCQlkZWxldGUgcEludGVyRm9ybTsNCi0JCXJldHVybiAtMTsNCi0JfQ0KLQkNCi0JaW50IG5UeXBlID0gcEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCk7DQotCWRlbGV0ZSBwSW50ZXJGb3JtOw0KLQlyZXR1cm4gblR5cGU7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX0ZPUk1IQU5ETEUgU1REQ0FMTCBGUERGRE9DX0luaXRGb3JtRmlsbEVudmlyb3VtZW50KEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsIEZQREZfRk9STUZJTExJTkZPKiBmb3JtSW5mbykNCi17DQotCWlmKCFkb2N1bWVudCB8fCAhZm9ybUluZm8gfHwgZm9ybUluZm8tPnZlcnNpb24hPTEpDQotCQlyZXR1cm4gTlVMTDsNCi0JQ1BERl9Eb2N1bWVudCAqIHBEb2N1bWVudCA9IChDUERGX0RvY3VtZW50KikgZG9jdW1lbnQ7DQotIAlDUERGRG9jX0Vudmlyb25tZW50ICogcEVudiA9IE5VTEw7DQotCXBFbnYgPSBuZXcgQ1BERkRvY19FbnZpcm9ubWVudChwRG9jdW1lbnQpOw0KLQlpZiAoIXBFbnYpDQotCQlyZXR1cm4gTlVMTDsNCi0JcEVudi0+UmVnQXBwSGFuZGxlKGZvcm1JbmZvKTsNCi0NCi0JaWYocEVudi0+R2V0UERGRG9jdW1lbnQoKSkNCi0Jew0KLQkJQ1BERlNES19Eb2N1bWVudCogcFNES0RvYyA9IG5ldyBDUERGU0RLX0RvY3VtZW50KHBFbnYtPkdldFBERkRvY3VtZW50KCksIHBFbnYpOw0KLQkJaWYocFNES0RvYykNCi0JCQlwRW52LT5TZXRDdXJyZW50RG9jKHBTREtEb2MpOw0KLQl9DQotCXJldHVybiBwRW52Ow0KLX0NCi0NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZET0NfRXhpdEZvcm1GaWxsRW52aXJvdW1lbnQoRlBERl9GT1JNSEFORExFIGhIYW5kbGUpDQotew0KLQlpZighaEhhbmRsZSkNCi0JCXJldHVybjsgDQotCUNQREZTREtfRG9jdW1lbnQqIHBTREtEb2MgPSAoKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGUpLT5HZXRDdXJyZW50RG9jKCk7DQotCWlmKHBTREtEb2MpDQotCXsNCi0JCSgoQ1BERkRvY19FbnZpcm9ubWVudCopaEhhbmRsZSktPlNldEN1cnJlbnREb2MoTlVMTCk7DQotCQlkZWxldGUgcFNES0RvYzsNCi0JfQ0KLQlkZWxldGUgKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGU7DQotCWhIYW5kbGUgPSBOVUxMOw0KLX0NCi0NCi1ETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRk9STV9Pbk1vdXNlTW92ZShGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSwgRlBERl9QQUdFIHBhZ2UsIGludCBtb2RpZmllciwgZG91YmxlIHBhZ2VfeCwgZG91YmxlIHBhZ2VfeSkNCi17CQ0KLQlpZiAoIWhIYW5kbGUgfHwgIXBhZ2UpDQotCQlyZXR1cm4gRkFMU0U7DQotLy8gCUNQREZfUGFnZSAqIHBQYWdlID0gKENQREZfUGFnZSopIHBhZ2U7DQotLy8gCUNQREZfRG9jdW1lbnQgKiBwRG9jID0gcFBhZ2UtPm1fcERvY3VtZW50Ow0KLS8vCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSAoQ1BERkRvY19FbnZpcm9ubWVudCopaEhhbmRsZTsNCi0JQ1BERlNES19Eb2N1bWVudCogcEZYRG9jID0gKChDUERGRG9jX0Vudmlyb25tZW50KiloSGFuZGxlKS0+R2V0Q3VycmVudERvYygpOw0KLQlpZighcEZYRG9jKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcgPSBwRlhEb2MtPkdldFBhZ2VWaWV3KChDUERGX1BhZ2UqKXBhZ2UpOw0KLQlpZighcFBhZ2VWaWV3KQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQkNCi0vLyAJZG91YmxlIHBhZ2VfeCA9IDA7DQotLy8gCWRvdWJsZSBwYWdlX3kgPSAwOw0KLS8vCXBFbnYtPkZGSV9EZXZpY2VUb1BhZ2UocGFnZSwgcG9pbnRfeCwgcG9pbnRfeSwgJnBhZ2VfeCwgJnBhZ2VfeSk7DQotCUNQREZfUG9pbnQgcHQoKEZYX0ZMT0FUKXBhZ2VfeCwgKEZYX0ZMT0FUKXBhZ2VfeSk7DQotCXJldHVybiBwUGFnZVZpZXctPk9uTW91c2VNb3ZlKHB0LCBtb2RpZmllcik7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGT1JNX09uTEJ1dHRvbkRvd24oRlBERl9GT1JNSEFORExFIGhIYW5kbGUsIEZQREZfUEFHRSBwYWdlLCBpbnQgbW9kaWZpZXIsIGRvdWJsZSBwYWdlX3gsIGRvdWJsZSBwYWdlX3kpDQotew0KLQlpZiAoIWhIYW5kbGUgfHwgIXBhZ2UpDQotCQlyZXR1cm4gRkFMU0U7DQotCUNQREZTREtfRG9jdW1lbnQqIHBGWERvYyA9ICgoQ1BERkRvY19FbnZpcm9ubWVudCopaEhhbmRsZSktPkdldEN1cnJlbnREb2MoKTsNCi0JaWYoIXBGWERvYykNCi0JCXJldHVybiBGQUxTRTsNCi0JQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gcEZYRG9jLT5HZXRQYWdlVmlldygoQ1BERl9QYWdlKilwYWdlKTsNCi0JaWYoIXBQYWdlVmlldykNCi0JCXJldHVybiBGQUxTRTsNCi0vLyAJZG91YmxlIHBhZ2VfeCA9IDA7DQotLy8gCWRvdWJsZSBwYWdlX3kgPSAwOw0KLS8vIAlwRW52LT5GRklfRGV2aWNlVG9QYWdlKHBhZ2UsIHBvaW50X3gsIHBvaW50X3ksICZwYWdlX3gsICZwYWdlX3kpOw0KLQlDUERGX1BvaW50IHB0KChGWF9GTE9BVClwYWdlX3gsIChGWF9GTE9BVClwYWdlX3kpOw0KLSAJcmV0dXJuIHBQYWdlVmlldy0+T25MQnV0dG9uRG93bihwdCwgbW9kaWZpZXIpOw0KLX0NCi0NCi1ETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRk9STV9PbkxCdXR0b25VcChGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSwgRlBERl9QQUdFIHBhZ2UsIGludCBtb2RpZmllciwgZG91YmxlIHBhZ2VfeCwgZG91YmxlIHBhZ2VfeSkNCi17DQotCWlmICghaEhhbmRsZSB8fCAhcGFnZSkNCi0JCXJldHVybiBGQUxTRTsNCi0JQ1BERlNES19Eb2N1bWVudCogcEZYRG9jID0gKChDUERGRG9jX0Vudmlyb25tZW50KiloSGFuZGxlKS0+R2V0Q3VycmVudERvYygpOw0KLQlpZighcEZYRG9jKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcgPSBwRlhEb2MtPkdldFBhZ2VWaWV3KChDUERGX1BhZ2UqKXBhZ2UpOw0KLQlpZighcFBhZ2VWaWV3KQ0KLQkJcmV0dXJuIEZBTFNFOw0KLS8vIAlkb3VibGUgcGFnZV94ID0gMDsNCi0vLyAJZG91YmxlIHBhZ2VfeSA9IDA7DQotLy8gCXBFbnYtPkZGSV9EZXZpY2VUb1BhZ2UocGFnZSwgcG9pbnRfeCwgcG9pbnRfeSwgJnBhZ2VfeCwgJnBhZ2VfeSk7DQotCUNQREZfUG9pbnQgcHQoKEZYX0ZMT0FUKXBhZ2VfeCwgKEZYX0ZMT0FUKXBhZ2VfeSk7DQotCXJldHVybiBwUGFnZVZpZXctPk9uTEJ1dHRvblVwKHB0LCBtb2RpZmllcik7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGT1JNX09uS2V5RG93bihGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSwgRlBERl9QQUdFIHBhZ2UsIGludCBuS2V5Q29kZSwgaW50IG1vZGlmaWVyKQ0KLXsNCi0JaWYgKCFoSGFuZGxlIHx8ICFwYWdlKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQlDUERGU0RLX0RvY3VtZW50KiBwRlhEb2MgPSAoKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGUpLT5HZXRDdXJyZW50RG9jKCk7DQotCWlmKCFwRlhEb2MpDQotCQlyZXR1cm4gRkFMU0U7DQotCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyA9IHBGWERvYy0+R2V0UGFnZVZpZXcoKENQREZfUGFnZSopcGFnZSk7DQotCWlmKCFwUGFnZVZpZXcpDQotCQlyZXR1cm4gRkFMU0U7DQotCQ0KLQkNCi0JcmV0dXJuIHBQYWdlVmlldy0+T25LZXlEb3duKG5LZXlDb2RlLCBtb2RpZmllcik7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGT1JNX09uS2V5VXAoRlBERl9GT1JNSEFORExFIGhIYW5kbGUsIEZQREZfUEFHRSBwYWdlLCBpbnQgbktleUNvZGUsIGludCBtb2RpZmllcikNCi17DQotCWlmICghaEhhbmRsZSB8fCAhcGFnZSkNCi0JCXJldHVybiBGQUxTRTsNCi0JQ1BERlNES19Eb2N1bWVudCogcEZYRG9jID0gKChDUERGRG9jX0Vudmlyb25tZW50KiloSGFuZGxlKS0+R2V0Q3VycmVudERvYygpOw0KLQlpZighcEZYRG9jKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcgPSBwRlhEb2MtPkdldFBhZ2VWaWV3KChDUERGX1BhZ2UqKXBhZ2UpOw0KLQlpZighcFBhZ2VWaWV3KQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQkNCi0JDQotCXJldHVybiBwUGFnZVZpZXctPk9uS2V5VXAobktleUNvZGUsIG1vZGlmaWVyKTsNCi19DQotDQotDQotRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZPUk1fT25DaGFyKEZQREZfRk9STUhBTkRMRSBoSGFuZGxlLCBGUERGX1BBR0UgcGFnZSwgaW50IG5DaGFyLCAgaW50IG1vZGlmaWVyKQ0KLXsNCi0JaWYgKCFoSGFuZGxlIHx8ICFwYWdlKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQlDUERGU0RLX0RvY3VtZW50KiBwRlhEb2MgPSAoKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGUpLT5HZXRDdXJyZW50RG9jKCk7DQotCWlmKCFwRlhEb2MpDQotCQlyZXR1cm4gRkFMU0U7DQotCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyA9IHBGWERvYy0+R2V0UGFnZVZpZXcoKENQREZfUGFnZSopcGFnZSk7DQotCWlmKCFwUGFnZVZpZXcpDQotCQlyZXR1cm4gRkFMU0U7DQotCXJldHVybiBwUGFnZVZpZXctPk9uQ2hhcihuQ2hhciwgbW9kaWZpZXIpOw0KLQ0KLX0NCi0NCi1ETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRk9STV9Gb3JjZVRvS2lsbEZvY3VzKEZQREZfRk9STUhBTkRMRSBoSGFuZGxlKQ0KLXsNCi0JaWYoIWhIYW5kbGUpDQotCQlyZXR1cm4gRkFMU0U7DQotCUNQREZTREtfRG9jdW1lbnQqIHBTREtEb2MgPSAoKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGUpLT5HZXRDdXJyZW50RG9jKCk7DQotCWlmKCFwU0RLRG9jKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQkvL0tpbGwgdGhlIGN1cnJlbnQgZm9jdXMuIA0KLQlyZXR1cm4gcFNES0RvYy0+S2lsbEZvY3VzQW5ub3QoMCk7DQotfQ0KLQ0KLURMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERl9GRkxEcmF3KEZQREZfRk9STUhBTkRMRSBoSGFuZGxlLCBGUERGX0JJVE1BUCBiaXRtYXAsIEZQREZfUEFHRSBwYWdlLCBpbnQgc3RhcnRfeCwgaW50IHN0YXJ0X3ksIA0KLQkJCQkJCQkJCQkJCSAgaW50IHNpemVfeCwgaW50IHNpemVfeSwgaW50IHJvdGF0ZSwgaW50IGZsYWdzKQ0KLXsNCi0JaWYgKCFoSGFuZGxlIHx8ICFwYWdlKQ0KLQkJcmV0dXJuIDsNCi0JQ1BERl9QYWdlKiBwUGFnZSA9IChDUERGX1BhZ2UqKXBhZ2U7DQotCQ0KLQlDUERGX1JlbmRlck9wdGlvbnMgb3B0aW9uczsNCi0JaWYgKGZsYWdzICYgRlBERl9MQ0RfVEVYVCkNCi0JCW9wdGlvbnMubV9GbGFncyB8PSBSRU5ERVJfQ0xFQVJUWVBFOw0KLQllbHNlDQotCQlvcHRpb25zLm1fRmxhZ3MgJj0gflJFTkRFUl9DTEVBUlRZUEU7DQotCQ0KLQkvL0dyYXlzY2FsZSBvdXRwdXQNCi0JaWYgKGZsYWdzICYgRlBERl9HUkFZU0NBTEUpDQotCXsNCi0JCW9wdGlvbnMubV9Db2xvck1vZGUgPSBSRU5ERVJfQ09MT1JfR1JBWTsNCi0JCW9wdGlvbnMubV9Gb3JlQ29sb3IgPSAwOw0KLQkJb3B0aW9ucy5tX0JhY2tDb2xvciA9IDB4ZmZmZmZmOw0KLQl9DQotCQ0KLQlvcHRpb25zLm1fQWRkRmxhZ3MgPSBmbGFncyA+PiA4Ow0KLQ0KLQlvcHRpb25zLm1fcE9DQ29udGV4dCA9IEZYX05FVyBDUERGX09DQ29udGV4dChwUGFnZS0+bV9wRG9jdW1lbnQpOw0KLQ0KLQkvL0ZYTVRfQ1NMT0NLX09CSigmcFBhZ2UtPm1fUGFnZUxvY2spOw0KLQkNCi0JQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXg7DQotCXBQYWdlLT5HZXREaXNwbGF5TWF0cml4KG1hdHJpeCwgc3RhcnRfeCwgc3RhcnRfeSwgc2l6ZV94LCBzaXplX3ksIHJvdGF0ZSk7IA0KLQkNCi0JRlhfUkVDVCBjbGlwOw0KLQljbGlwLmxlZnQgPSBzdGFydF94Ow0KLQljbGlwLnJpZ2h0ID0gc3RhcnRfeCArIHNpemVfeDsNCi0JY2xpcC50b3AgPSBzdGFydF95Ow0KLQljbGlwLmJvdHRvbSA9IHN0YXJ0X3kgKyBzaXplX3k7DQotDQotI2lmZGVmIF9TS0lBX1NVUFBPUlRfDQotCUNGWF9Ta2lhRGV2aWNlKiBwRGV2aWNlID0gRlhfTkVXIENGWF9Ta2lhRGV2aWNlOw0KLSNlbHNlDQotCUNGWF9GeGdlRGV2aWNlKiBwRGV2aWNlID0gTlVMTDsNCi0JcERldmljZSA9IEZYX05FVyBDRlhfRnhnZURldmljZTsNCi0jZW5kaWYNCi0NCi0JaWYgKCFwRGV2aWNlKQ0KLQkJcmV0dXJuOw0KLQlwRGV2aWNlLT5BdHRhY2goKENGWF9ESUJpdG1hcCopYml0bWFwKTsNCi0JcERldmljZS0+U2F2ZVN0YXRlKCk7DQotCXBEZXZpY2UtPlNldENsaXBfUmVjdCgmY2xpcCk7DQotCQ0KLQ0KLQlDUERGX1JlbmRlckNvbnRleHQqIHBDb250ZXh0ID0gTlVMTDsNCi0JcENvbnRleHQgPSBGWF9ORVcgQ1BERl9SZW5kZXJDb250ZXh0Ow0KLQlpZiAoIXBDb250ZXh0KQ0KLQl7DQotCQlkZWxldGUgcERldmljZTsNCi0JCXBEZXZpY2UgPSBOVUxMOw0KLQkJcmV0dXJuOw0KLQl9DQotDQotDQotLy8JQ1BERl9Eb2N1bWVudCogcERvYyA9IHBQYWdlLT5tX3BEb2N1bWVudDsNCi0JQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IChDUERGRG9jX0Vudmlyb25tZW50KiloSGFuZGxlOw0KLQlDUERGU0RLX0RvY3VtZW50KiBwRlhEb2MgPSBwRW52LT5HZXRDdXJyZW50RG9jKCk7DQotCWlmKCFwRlhEb2MpDQotCXsNCi0JCWRlbGV0ZSBwQ29udGV4dDsNCi0JCWRlbGV0ZSBwRGV2aWNlOw0KLQkJcENvbnRleHQgPSBOVUxMOw0KLQkJcERldmljZSA9IE5VTEw7DQotCQlyZXR1cm47DQotCX0NCi0JaWYoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gcEZYRG9jLT5HZXRQYWdlVmlldyhwUGFnZSkpDQotCXsNCi0JCXBQYWdlVmlldy0+UGFnZVZpZXdfT25EcmF3KHBEZXZpY2UsICZtYXRyaXgsICZvcHRpb25zKTsNCi0JfQ0KLQlwRGV2aWNlLT5SZXN0b3JlU3RhdGUoKTsNCi0NCi0JaWYob3B0aW9ucy5tX3BPQ0NvbnRleHQpDQotCXsNCi0JCWRlbGV0ZSBvcHRpb25zLm1fcE9DQ29udGV4dDsNCi0JCW9wdGlvbnMubV9wT0NDb250ZXh0ID0gTlVMTDsNCi0JfQ0KLQlpZihwQ29udGV4dCkNCi0Jew0KLQkJZGVsZXRlIHBDb250ZXh0Ow0KLQkJcENvbnRleHQgPSBOVUxMOw0KLQl9DQotCWlmKHBEZXZpY2UpDQotCXsNCi0JCWRlbGV0ZSBwRGV2aWNlOw0KLQkJcERldmljZSA9IE5VTEw7DQotCX0NCi0NCi19DQotDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX1NldEZvcm1GaWVsZEhpZ2hsaWdodENvbG9yKEZQREZfRk9STUhBTkRMRSBoSGFuZGxlLCBpbnQgZmllbGRUeXBlLCB1bnNpZ25lZCBsb25nIGNvbG9yKQ0KLXsNCi0JaWYgKCFoSGFuZGxlKQ0KLQkJcmV0dXJuOw0KLS8vCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSAoQ1BERkRvY19FbnZpcm9ubWVudCogKWhIYW5kbGU7DQotCUNQREZTREtfRG9jdW1lbnQqIHBTREtEb2MgPSAoKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGUpLT5HZXRDdXJyZW50RG9jKCk7DQotCWlmKHBTREtEb2MpDQotCXsNCi0JCWlmKENQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gcFNES0RvYy0+R2V0SW50ZXJGb3JtKCkpDQotCQl7DQotCQkJcEludGVyRm9ybS0+U2V0SGlnaGxpZ2h0Q29sb3IoY29sb3IsIGZpZWxkVHlwZSk7DQotCQl9DQotCQ0KLQl9DQotDQotfQ0KLQ0KLURMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERl9TZXRGb3JtRmllbGRIaWdobGlnaHRBbHBoYShGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSwgdW5zaWduZWQgY2hhciBhbHBoYSkNCi17DQotCWlmICghaEhhbmRsZSkNCi0JCXJldHVybjsNCi0JQ1BERlNES19Eb2N1bWVudCogcFNES0RvYyA9ICgoQ1BERkRvY19FbnZpcm9ubWVudCopaEhhbmRsZSktPkdldEN1cnJlbnREb2MoKTsNCi0JaWYocFNES0RvYykNCi0Jew0KLQkJaWYoQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSBwU0RLRG9jLT5HZXRJbnRlckZvcm0oKSkNCi0JCQlwSW50ZXJGb3JtLT5TZXRIaWdobGlnaHRBbHBoYShhbHBoYSk7DQotCX0NCi19DQotDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX1JlbW92ZUZvcm1GaWVsZEhpZ2hsaWdodChGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSkNCi17DQotCWlmICghaEhhbmRsZSkNCi0JCXJldHVybjsNCi0JQ1BERlNES19Eb2N1bWVudCogcFNES0RvYyA9ICgoQ1BERkRvY19FbnZpcm9ubWVudCopaEhhbmRsZSktPkdldEN1cnJlbnREb2MoKTsNCi0JaWYocFNES0RvYykNCi0Jew0KLQkJaWYoQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSBwU0RLRG9jLT5HZXRJbnRlckZvcm0oKSkNCi0JCQlwSW50ZXJGb3JtLT5SZW1vdmVBbGxIaWdoTGlnaHQoKTsNCi0JfQ0KLX0NCi0NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZPUk1fT25BZnRlckxvYWRQYWdlKEZQREZfUEFHRSBwYWdlLCBGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSkNCi17DQotCWlmKCFoSGFuZGxlIHx8ICFwYWdlKQ0KLQkJcmV0dXJuOw0KLQlDUERGU0RLX0RvY3VtZW50KiBwU0RLRG9jID0gKChDUERGRG9jX0Vudmlyb25tZW50KiloSGFuZGxlKS0+R2V0Q3VycmVudERvYygpOw0KLQlpZighcFNES0RvYykNCi0JCXJldHVybjsNCi0JQ1BERl9QYWdlKiBwUGFnZSA9IChDUERGX1BhZ2UqKXBhZ2U7DQotCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyA9IHBTREtEb2MtPkdldFBhZ2VWaWV3KHBQYWdlLCBUUlVFKTsNCi0JaWYocFBhZ2VWaWV3KQ0KLQl7DQotCQlwUGFnZVZpZXctPlNldFZhbGlkKFRSVUUpOw0KLQl9CQ0KLX0NCi0NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZPUk1fT25CZWZvcmVDbG9zZVBhZ2UoRlBERl9QQUdFIHBhZ2UsIEZQREZfRk9STUhBTkRMRSBoSGFuZGxlKQ0KLXsNCi0JaWYoIWhIYW5kbGUgfHwgIXBhZ2UpDQotCQlyZXR1cm47DQotCUNQREZTREtfRG9jdW1lbnQqIHBTREtEb2MgPSAoKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGUpLT5HZXRDdXJyZW50RG9jKCk7DQotCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOw0KLQlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcgPSBwU0RLRG9jLT5HZXRQYWdlVmlldyhwUGFnZSwgRkFMU0UpOw0KLQlpZihwUGFnZVZpZXcpDQotCXsNCi0JCXBQYWdlVmlldy0+U2V0VmFsaWQoRkFMU0UpOw0KLQkJLy8gUmVNb3ZlUGFnZVZpZXcoKSB0YWtlcyBjYXJlIG9mIHRoZSBkZWxldGUgZm9yIHVzLg0KLQkJcFNES0RvYy0+UmVNb3ZlUGFnZVZpZXcocFBhZ2UpOw0KLQl9DQotfQ0KLURMTEVYUE9SVCB2b2lkIFNURENBTEwgRk9STV9Eb0RvY3VtZW50SlNBY3Rpb24oRlBERl9GT1JNSEFORExFIGhIYW5kbGUpDQotew0KLQlpZighaEhhbmRsZSkNCi0JCXJldHVybjsNCi0JaWYoIENQREZTREtfRG9jdW1lbnQqIHBTREtEb2MgPSAoKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGUpLT5HZXRDdXJyZW50RG9jKCkpDQotCXsNCi0JCXBTREtEb2MtPkluaXRQYWdlVmlldygpOw0KLQkJaWYoKChDUERGRG9jX0Vudmlyb25tZW50KiloSGFuZGxlKS0+SXNKU0luaXRpYXRlZCgpKQ0KLQkJCXBTREtEb2MtPlByb2NKYXZhc2NyaXB0RnVuKCk7DQotCX0JDQotfQ0KLQ0KLURMTEVYUE9SVCB2b2lkIFNURENBTEwgRk9STV9Eb0RvY3VtZW50T3BlbkFjdGlvbihGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSkNCi17DQotCWlmKCFoSGFuZGxlKQ0KLQkJcmV0dXJuOw0KLQlpZiggQ1BERlNES19Eb2N1bWVudCogcFNES0RvYyA9ICgoQ1BERkRvY19FbnZpcm9ubWVudCopaEhhbmRsZSktPkdldEN1cnJlbnREb2MoKSkNCi0Jew0KLQkJaWYoKChDUERGRG9jX0Vudmlyb25tZW50KiloSGFuZGxlKS0+SXNKU0luaXRpYXRlZCgpKQ0KLQkJCXBTREtEb2MtPlByb2NPcGVuQWN0aW9uKCk7DQotCX0NCi19DQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGT1JNX0RvRG9jdW1lbnRBQWN0aW9uKEZQREZfRk9STUhBTkRMRSBoSGFuZGxlLCBpbnQgYWFUeXBlKQ0KLXsNCi0JaWYoIWhIYW5kbGUpDQotCQlyZXR1cm47DQotCUNQREZTREtfRG9jdW1lbnQqIHBTREtEb2MgPSAoKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGUpLT5HZXRDdXJyZW50RG9jKCk7DQotCWlmKHBTREtEb2MpDQotCXsNCi0JCUNQREZfRG9jdW1lbnQqIHBEb2MgPSBwU0RLRG9jLT5HZXREb2N1bWVudCgpOw0KLQkJQ1BERl9EaWN0aW9uYXJ5KiBwRGljID0gcERvYy0+R2V0Um9vdCgpOw0KLQkJaWYgKCFwRGljKQ0KLQkJCXJldHVybjsNCi0JCUNQREZfQUFjdGlvbiBhYSA9IHBEaWMtPkdldERpY3QoRlhfQlNUUkMoIkFBIikpOw0KLQkJDQotCQlpZihhYS5BY3Rpb25FeGlzdCgoQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSlhYVR5cGUpKQ0KLQkJew0KLQkJCUNQREZfQWN0aW9uIGFjdGlvbiA9IGFhLkdldEFjdGlvbigoQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSlhYVR5cGUpOw0KLQkJCUNQREZTREtfQWN0aW9uSGFuZGxlciAqcEFjdGlvbkhhbmRsZXIgPSAoKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGUpLT5HZXRBY3Rpb25IYW5kZXIoKTsNCi0JCQlBU1NFUlQocEFjdGlvbkhhbmRsZXIgIT0gTlVMTCk7DQotCQkJcEFjdGlvbkhhbmRsZXItPkRvQWN0aW9uX0RvY3VtZW50KGFjdGlvbiwgKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUpYWFUeXBlLCBwU0RLRG9jKTsNCi0JCX0NCi0JfQ0KLX0NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZPUk1fRG9QYWdlQUFjdGlvbihGUERGX1BBR0UgcGFnZSwgRlBERl9GT1JNSEFORExFIGhIYW5kbGUsIGludCBhYVR5cGUpDQotew0KLQlpZighaEhhbmRsZSB8fCAhcGFnZSkNCi0JCXJldHVybjsNCi0JQ1BERlNES19Eb2N1bWVudCogcFNES0RvYyA9ICgoQ1BERkRvY19FbnZpcm9ubWVudCopaEhhbmRsZSktPkdldEN1cnJlbnREb2MoKTsNCi0JQ1BERl9QYWdlKiBwUGFnZSA9IChDUERGX1BhZ2UqKXBhZ2U7DQotCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyA9IHBTREtEb2MtPkdldFBhZ2VWaWV3KHBQYWdlLCBGQUxTRSk7DQotCWlmKHBQYWdlVmlldykNCi0Jew0KLQkJQ1BERkRvY19FbnZpcm9ubWVudCAqcEVudiA9IHBTREtEb2MtPkdldEVudigpOw0KLQkJQVNTRVJUKHBFbnYgIT0gTlVMTCk7DQotCQkJDQotCQlDUERGU0RLX0FjdGlvbkhhbmRsZXIgKnBBY3Rpb25IYW5kbGVyID0gcEVudi0+R2V0QWN0aW9uSGFuZGVyKCk7DQotCQlBU1NFUlQocEFjdGlvbkhhbmRsZXIgIT0gTlVMTCk7DQotCQkNCi0JCUNQREZfRGljdGlvbmFyeSAqcFBhZ2VEaWN0ID0gcFBhZ2UtPm1fcEZvcm1EaWN0Ow0KLQkJQVNTRVJUKHBQYWdlRGljdCAhPSBOVUxMKTsNCi0JCSANCi0JCUNQREZfQUFjdGlvbiBhYSA9IHBQYWdlRGljdC0+R2V0RGljdChGWF9CU1RSQygiQUEiKSk7DQotDQotCQlGWF9CT09MIGJFeGlzdE9BQWN0aW9uID0gRkFMU0U7DQotCQlGWF9CT09MIGJFeGlzdENBQWN0aW9uID0gRkFMU0U7DQotCQlpZiAoRlBERlBBR0VfQUFDVElPTl9PUEVOID09IGFhVHlwZSkNCi0JCXsNCi0JCQliRXhpc3RPQUFjdGlvbiA9IGFhLkFjdGlvbkV4aXN0KENQREZfQUFjdGlvbjo6T3BlblBhZ2UpOw0KLQkJCWlmIChiRXhpc3RPQUFjdGlvbikNCi0JCQl7DQotCQkJCUNQREZfQWN0aW9uIGFjdGlvbiA9IGFhLkdldEFjdGlvbihDUERGX0FBY3Rpb246Ok9wZW5QYWdlKTsNCi0JCQkJcEFjdGlvbkhhbmRsZXItPkRvQWN0aW9uX1BhZ2UoYWN0aW9uLCBDUERGX0FBY3Rpb246Ok9wZW5QYWdlLCBwU0RLRG9jKTsNCi0JCQl9DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJYkV4aXN0Q0FBY3Rpb24gPSBhYS5BY3Rpb25FeGlzdChDUERGX0FBY3Rpb246OkNsb3NlUGFnZSk7DQotCQkJaWYgKGJFeGlzdENBQWN0aW9uKQ0KLQkJCXsNCi0JCQkJQ1BERl9BY3Rpb24gYWN0aW9uID0gYWEuR2V0QWN0aW9uKENQREZfQUFjdGlvbjo6Q2xvc2VQYWdlKTsNCi0JCQkJcEFjdGlvbkhhbmRsZXItPkRvQWN0aW9uX1BhZ2UoYWN0aW9uLCBDUERGX0FBY3Rpb246OkNsb3NlUGFnZSwgcFNES0RvYyk7DQotCQkJfQ0KLQkJfQ0KLQl9DQotfQ0KLQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2ZwZGZ2aWV3LmgiCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9mcGRmZm9ybWZpbGwuaCIKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfZGVmaW5lLmgiCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX21nci5oIgorCisKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2phdmFzY3JpcHQvSUphdmFTY3JpcHQuaCIKKworCitETExFWFBPUlQgaW50IFNURENBTEwgRlBEUGFnZV9IYXNGb3JtRmllbGRBdFBvaW50KEZQREZfRk9STUhBTkRMRSBoSGFuZGxlLCBGUERGX1BBR0UgcGFnZSxkb3VibGUgcGFnZV94LCBkb3VibGUgcGFnZV95KQoreworCWlmKCFwYWdlIHx8ICFoSGFuZGxlKQorCQlyZXR1cm4gLTE7CisJQ1BERl9QYWdlICogcFBhZ2UgPSAoQ1BERl9QYWdlKikgcGFnZTsKKworCUNQREZfSW50ZXJGb3JtICogcEludGVyRm9ybSA9IE5VTEw7CisJcEludGVyRm9ybSA9IG5ldyBDUERGX0ludGVyRm9ybShwUGFnZS0+bV9wRG9jdW1lbnQsRkFMU0UpOworCWlmICghcEludGVyRm9ybSkKKwkJcmV0dXJuIC0xOworCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ3RybCA9IHBJbnRlckZvcm0tPkdldENvbnRyb2xBdFBvaW50KHBQYWdlLCAoRlhfRkxPQVQpcGFnZV94LCAoRlhfRkxPQVQpcGFnZV95KTsKKwlpZighcEZvcm1DdHJsKQorCXsKKwkJZGVsZXRlIHBJbnRlckZvcm07CisJCXJldHVybiAtMTsKKwl9CisJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSBwRm9ybUN0cmwtPkdldEZpZWxkKCk7CisJaWYoIXBGb3JtRmllbGQpCisJeworCQlkZWxldGUgcEludGVyRm9ybTsKKwkJcmV0dXJuIC0xOworCX0KKwkKKwlpbnQgblR5cGUgPSBwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKTsKKwlkZWxldGUgcEludGVyRm9ybTsKKwlyZXR1cm4gblR5cGU7Cit9CisKK0RMTEVYUE9SVCBGUERGX0ZPUk1IQU5ETEUgU1REQ0FMTCBGUERGRE9DX0luaXRGb3JtRmlsbEVudmlyb3VtZW50KEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsIEZQREZfRk9STUZJTExJTkZPKiBmb3JtSW5mbykKK3sKKwlpZighZG9jdW1lbnQgfHwgIWZvcm1JbmZvIHx8IGZvcm1JbmZvLT52ZXJzaW9uIT0xKQorCQlyZXR1cm4gTlVMTDsKKwlDUERGX0RvY3VtZW50ICogcERvY3VtZW50ID0gKENQREZfRG9jdW1lbnQqKSBkb2N1bWVudDsKKyAJQ1BERkRvY19FbnZpcm9ubWVudCAqIHBFbnYgPSBOVUxMOworCXBFbnYgPSBuZXcgQ1BERkRvY19FbnZpcm9ubWVudChwRG9jdW1lbnQpOworCWlmICghcEVudikKKwkJcmV0dXJuIE5VTEw7CisJcEVudi0+UmVnQXBwSGFuZGxlKGZvcm1JbmZvKTsKKworCWlmKHBFbnYtPkdldFBERkRvY3VtZW50KCkpCisJeworCQlDUERGU0RLX0RvY3VtZW50KiBwU0RLRG9jID0gbmV3IENQREZTREtfRG9jdW1lbnQocEVudi0+R2V0UERGRG9jdW1lbnQoKSwgcEVudik7CisJCWlmKHBTREtEb2MpCisJCQlwRW52LT5TZXRDdXJyZW50RG9jKHBTREtEb2MpOworCX0KKwlyZXR1cm4gcEVudjsKK30KKworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGRE9DX0V4aXRGb3JtRmlsbEVudmlyb3VtZW50KEZQREZfRk9STUhBTkRMRSBoSGFuZGxlKQoreworCWlmKCFoSGFuZGxlKQorCQlyZXR1cm47IAorCUNQREZTREtfRG9jdW1lbnQqIHBTREtEb2MgPSAoKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGUpLT5HZXRDdXJyZW50RG9jKCk7CisJaWYocFNES0RvYykKKwl7CisJCSgoQ1BERkRvY19FbnZpcm9ubWVudCopaEhhbmRsZSktPlNldEN1cnJlbnREb2MoTlVMTCk7CisJCWRlbGV0ZSBwU0RLRG9jOworCX0KKwlkZWxldGUgKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGU7CisJaEhhbmRsZSA9IE5VTEw7Cit9CisKK0RMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGT1JNX09uTW91c2VNb3ZlKEZQREZfRk9STUhBTkRMRSBoSGFuZGxlLCBGUERGX1BBR0UgcGFnZSwgaW50IG1vZGlmaWVyLCBkb3VibGUgcGFnZV94LCBkb3VibGUgcGFnZV95KQorewkKKwlpZiAoIWhIYW5kbGUgfHwgIXBhZ2UpCisJCXJldHVybiBGQUxTRTsKKy8vIAlDUERGX1BhZ2UgKiBwUGFnZSA9IChDUERGX1BhZ2UqKSBwYWdlOworLy8gCUNQREZfRG9jdW1lbnQgKiBwRG9jID0gcFBhZ2UtPm1fcERvY3VtZW50OworLy8JQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IChDUERGRG9jX0Vudmlyb25tZW50KiloSGFuZGxlOworCUNQREZTREtfRG9jdW1lbnQqIHBGWERvYyA9ICgoQ1BERkRvY19FbnZpcm9ubWVudCopaEhhbmRsZSktPkdldEN1cnJlbnREb2MoKTsKKwlpZighcEZYRG9jKQorCQlyZXR1cm4gRkFMU0U7CisJQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gcEZYRG9jLT5HZXRQYWdlVmlldygoQ1BERl9QYWdlKilwYWdlKTsKKwlpZighcFBhZ2VWaWV3KQorCQlyZXR1cm4gRkFMU0U7CisJCisvLyAJZG91YmxlIHBhZ2VfeCA9IDA7CisvLyAJZG91YmxlIHBhZ2VfeSA9IDA7CisvLwlwRW52LT5GRklfRGV2aWNlVG9QYWdlKHBhZ2UsIHBvaW50X3gsIHBvaW50X3ksICZwYWdlX3gsICZwYWdlX3kpOworCUNQREZfUG9pbnQgcHQoKEZYX0ZMT0FUKXBhZ2VfeCwgKEZYX0ZMT0FUKXBhZ2VfeSk7CisJcmV0dXJuIHBQYWdlVmlldy0+T25Nb3VzZU1vdmUocHQsIG1vZGlmaWVyKTsKK30KKworRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZPUk1fT25MQnV0dG9uRG93bihGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSwgRlBERl9QQUdFIHBhZ2UsIGludCBtb2RpZmllciwgZG91YmxlIHBhZ2VfeCwgZG91YmxlIHBhZ2VfeSkKK3sKKwlpZiAoIWhIYW5kbGUgfHwgIXBhZ2UpCisJCXJldHVybiBGQUxTRTsKKwlDUERGU0RLX0RvY3VtZW50KiBwRlhEb2MgPSAoKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGUpLT5HZXRDdXJyZW50RG9jKCk7CisJaWYoIXBGWERvYykKKwkJcmV0dXJuIEZBTFNFOworCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyA9IHBGWERvYy0+R2V0UGFnZVZpZXcoKENQREZfUGFnZSopcGFnZSk7CisJaWYoIXBQYWdlVmlldykKKwkJcmV0dXJuIEZBTFNFOworLy8gCWRvdWJsZSBwYWdlX3ggPSAwOworLy8gCWRvdWJsZSBwYWdlX3kgPSAwOworLy8gCXBFbnYtPkZGSV9EZXZpY2VUb1BhZ2UocGFnZSwgcG9pbnRfeCwgcG9pbnRfeSwgJnBhZ2VfeCwgJnBhZ2VfeSk7CisJQ1BERl9Qb2ludCBwdCgoRlhfRkxPQVQpcGFnZV94LCAoRlhfRkxPQVQpcGFnZV95KTsKKyAJcmV0dXJuIHBQYWdlVmlldy0+T25MQnV0dG9uRG93bihwdCwgbW9kaWZpZXIpOworfQorCitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRk9STV9PbkxCdXR0b25VcChGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSwgRlBERl9QQUdFIHBhZ2UsIGludCBtb2RpZmllciwgZG91YmxlIHBhZ2VfeCwgZG91YmxlIHBhZ2VfeSkKK3sKKwlpZiAoIWhIYW5kbGUgfHwgIXBhZ2UpCisJCXJldHVybiBGQUxTRTsKKwlDUERGU0RLX0RvY3VtZW50KiBwRlhEb2MgPSAoKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGUpLT5HZXRDdXJyZW50RG9jKCk7CisJaWYoIXBGWERvYykKKwkJcmV0dXJuIEZBTFNFOworCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyA9IHBGWERvYy0+R2V0UGFnZVZpZXcoKENQREZfUGFnZSopcGFnZSk7CisJaWYoIXBQYWdlVmlldykKKwkJcmV0dXJuIEZBTFNFOworLy8gCWRvdWJsZSBwYWdlX3ggPSAwOworLy8gCWRvdWJsZSBwYWdlX3kgPSAwOworLy8gCXBFbnYtPkZGSV9EZXZpY2VUb1BhZ2UocGFnZSwgcG9pbnRfeCwgcG9pbnRfeSwgJnBhZ2VfeCwgJnBhZ2VfeSk7CisJQ1BERl9Qb2ludCBwdCgoRlhfRkxPQVQpcGFnZV94LCAoRlhfRkxPQVQpcGFnZV95KTsKKwlyZXR1cm4gcFBhZ2VWaWV3LT5PbkxCdXR0b25VcChwdCwgbW9kaWZpZXIpOworfQorCitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRk9STV9PbktleURvd24oRlBERl9GT1JNSEFORExFIGhIYW5kbGUsIEZQREZfUEFHRSBwYWdlLCBpbnQgbktleUNvZGUsIGludCBtb2RpZmllcikKK3sKKwlpZiAoIWhIYW5kbGUgfHwgIXBhZ2UpCisJCXJldHVybiBGQUxTRTsKKwlDUERGU0RLX0RvY3VtZW50KiBwRlhEb2MgPSAoKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGUpLT5HZXRDdXJyZW50RG9jKCk7CisJaWYoIXBGWERvYykKKwkJcmV0dXJuIEZBTFNFOworCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyA9IHBGWERvYy0+R2V0UGFnZVZpZXcoKENQREZfUGFnZSopcGFnZSk7CisJaWYoIXBQYWdlVmlldykKKwkJcmV0dXJuIEZBTFNFOworCQorCQorCXJldHVybiBwUGFnZVZpZXctPk9uS2V5RG93bihuS2V5Q29kZSwgbW9kaWZpZXIpOworfQorCitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRk9STV9PbktleVVwKEZQREZfRk9STUhBTkRMRSBoSGFuZGxlLCBGUERGX1BBR0UgcGFnZSwgaW50IG5LZXlDb2RlLCBpbnQgbW9kaWZpZXIpCit7CisJaWYgKCFoSGFuZGxlIHx8ICFwYWdlKQorCQlyZXR1cm4gRkFMU0U7CisJQ1BERlNES19Eb2N1bWVudCogcEZYRG9jID0gKChDUERGRG9jX0Vudmlyb25tZW50KiloSGFuZGxlKS0+R2V0Q3VycmVudERvYygpOworCWlmKCFwRlhEb2MpCisJCXJldHVybiBGQUxTRTsKKwlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcgPSBwRlhEb2MtPkdldFBhZ2VWaWV3KChDUERGX1BhZ2UqKXBhZ2UpOworCWlmKCFwUGFnZVZpZXcpCisJCXJldHVybiBGQUxTRTsKKwkKKwkKKwlyZXR1cm4gcFBhZ2VWaWV3LT5PbktleVVwKG5LZXlDb2RlLCBtb2RpZmllcik7Cit9CisKKworRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZPUk1fT25DaGFyKEZQREZfRk9STUhBTkRMRSBoSGFuZGxlLCBGUERGX1BBR0UgcGFnZSwgaW50IG5DaGFyLCAgaW50IG1vZGlmaWVyKQoreworCWlmICghaEhhbmRsZSB8fCAhcGFnZSkKKwkJcmV0dXJuIEZBTFNFOworCUNQREZTREtfRG9jdW1lbnQqIHBGWERvYyA9ICgoQ1BERkRvY19FbnZpcm9ubWVudCopaEhhbmRsZSktPkdldEN1cnJlbnREb2MoKTsKKwlpZighcEZYRG9jKQorCQlyZXR1cm4gRkFMU0U7CisJQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gcEZYRG9jLT5HZXRQYWdlVmlldygoQ1BERl9QYWdlKilwYWdlKTsKKwlpZighcFBhZ2VWaWV3KQorCQlyZXR1cm4gRkFMU0U7CisJcmV0dXJuIHBQYWdlVmlldy0+T25DaGFyKG5DaGFyLCBtb2RpZmllcik7CisKK30KKworRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZPUk1fRm9yY2VUb0tpbGxGb2N1cyhGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSkKK3sKKwlpZighaEhhbmRsZSkKKwkJcmV0dXJuIEZBTFNFOworCUNQREZTREtfRG9jdW1lbnQqIHBTREtEb2MgPSAoKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGUpLT5HZXRDdXJyZW50RG9jKCk7CisJaWYoIXBTREtEb2MpCisJCXJldHVybiBGQUxTRTsKKwkvL0tpbGwgdGhlIGN1cnJlbnQgZm9jdXMuIAorCXJldHVybiBwU0RLRG9jLT5LaWxsRm9jdXNBbm5vdCgwKTsKK30KKworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX0ZGTERyYXcoRlBERl9GT1JNSEFORExFIGhIYW5kbGUsIEZQREZfQklUTUFQIGJpdG1hcCwgRlBERl9QQUdFIHBhZ2UsIGludCBzdGFydF94LCBpbnQgc3RhcnRfeSwgCisJCQkJCQkJCQkJCQkgIGludCBzaXplX3gsIGludCBzaXplX3ksIGludCByb3RhdGUsIGludCBmbGFncykKK3sKKwlpZiAoIWhIYW5kbGUgfHwgIXBhZ2UpCisJCXJldHVybiA7CisJQ1BERl9QYWdlKiBwUGFnZSA9IChDUERGX1BhZ2UqKXBhZ2U7CisJCisJQ1BERl9SZW5kZXJPcHRpb25zIG9wdGlvbnM7CisJaWYgKGZsYWdzICYgRlBERl9MQ0RfVEVYVCkKKwkJb3B0aW9ucy5tX0ZsYWdzIHw9IFJFTkRFUl9DTEVBUlRZUEU7CisJZWxzZQorCQlvcHRpb25zLm1fRmxhZ3MgJj0gflJFTkRFUl9DTEVBUlRZUEU7CisJCisJLy9HcmF5c2NhbGUgb3V0cHV0CisJaWYgKGZsYWdzICYgRlBERl9HUkFZU0NBTEUpCisJeworCQlvcHRpb25zLm1fQ29sb3JNb2RlID0gUkVOREVSX0NPTE9SX0dSQVk7CisJCW9wdGlvbnMubV9Gb3JlQ29sb3IgPSAwOworCQlvcHRpb25zLm1fQmFja0NvbG9yID0gMHhmZmZmZmY7CisJfQorCQorCW9wdGlvbnMubV9BZGRGbGFncyA9IGZsYWdzID4+IDg7CisKKwlvcHRpb25zLm1fcE9DQ29udGV4dCA9IEZYX05FVyBDUERGX09DQ29udGV4dChwUGFnZS0+bV9wRG9jdW1lbnQpOworCisJLy9GWE1UX0NTTE9DS19PQkooJnBQYWdlLT5tX1BhZ2VMb2NrKTsKKwkKKwlDRlhfQWZmaW5lTWF0cml4IG1hdHJpeDsKKwlwUGFnZS0+R2V0RGlzcGxheU1hdHJpeChtYXRyaXgsIHN0YXJ0X3gsIHN0YXJ0X3ksIHNpemVfeCwgc2l6ZV95LCByb3RhdGUpOyAKKwkKKwlGWF9SRUNUIGNsaXA7CisJY2xpcC5sZWZ0ID0gc3RhcnRfeDsKKwljbGlwLnJpZ2h0ID0gc3RhcnRfeCArIHNpemVfeDsKKwljbGlwLnRvcCA9IHN0YXJ0X3k7CisJY2xpcC5ib3R0b20gPSBzdGFydF95ICsgc2l6ZV95OworCisjaWZkZWYgX1NLSUFfU1VQUE9SVF8KKwlDRlhfU2tpYURldmljZSogcERldmljZSA9IEZYX05FVyBDRlhfU2tpYURldmljZTsKKyNlbHNlCisJQ0ZYX0Z4Z2VEZXZpY2UqIHBEZXZpY2UgPSBOVUxMOworCXBEZXZpY2UgPSBGWF9ORVcgQ0ZYX0Z4Z2VEZXZpY2U7CisjZW5kaWYKKworCWlmICghcERldmljZSkKKwkJcmV0dXJuOworCXBEZXZpY2UtPkF0dGFjaCgoQ0ZYX0RJQml0bWFwKiliaXRtYXApOworCXBEZXZpY2UtPlNhdmVTdGF0ZSgpOworCXBEZXZpY2UtPlNldENsaXBfUmVjdCgmY2xpcCk7CisJCisKKwlDUERGX1JlbmRlckNvbnRleHQqIHBDb250ZXh0ID0gTlVMTDsKKwlwQ29udGV4dCA9IEZYX05FVyBDUERGX1JlbmRlckNvbnRleHQ7CisJaWYgKCFwQ29udGV4dCkKKwl7CisJCWRlbGV0ZSBwRGV2aWNlOworCQlwRGV2aWNlID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCisvLwlDUERGX0RvY3VtZW50KiBwRG9jID0gcFBhZ2UtPm1fcERvY3VtZW50OworCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSAoQ1BERkRvY19FbnZpcm9ubWVudCopaEhhbmRsZTsKKwlDUERGU0RLX0RvY3VtZW50KiBwRlhEb2MgPSBwRW52LT5HZXRDdXJyZW50RG9jKCk7CisJaWYoIXBGWERvYykKKwl7CisJCWRlbGV0ZSBwQ29udGV4dDsKKwkJZGVsZXRlIHBEZXZpY2U7CisJCXBDb250ZXh0ID0gTlVMTDsKKwkJcERldmljZSA9IE5VTEw7CisJCXJldHVybjsKKwl9CisJaWYoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gcEZYRG9jLT5HZXRQYWdlVmlldyhwUGFnZSkpCisJeworCQlwUGFnZVZpZXctPlBhZ2VWaWV3X09uRHJhdyhwRGV2aWNlLCAmbWF0cml4LCAmb3B0aW9ucyk7CisJfQorCXBEZXZpY2UtPlJlc3RvcmVTdGF0ZSgpOworCisJaWYob3B0aW9ucy5tX3BPQ0NvbnRleHQpCisJeworCQlkZWxldGUgb3B0aW9ucy5tX3BPQ0NvbnRleHQ7CisJCW9wdGlvbnMubV9wT0NDb250ZXh0ID0gTlVMTDsKKwl9CisJaWYocENvbnRleHQpCisJeworCQlkZWxldGUgcENvbnRleHQ7CisJCXBDb250ZXh0ID0gTlVMTDsKKwl9CisJaWYocERldmljZSkKKwl7CisJCWRlbGV0ZSBwRGV2aWNlOworCQlwRGV2aWNlID0gTlVMTDsKKwl9CisKK30KKworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX1NldEZvcm1GaWVsZEhpZ2hsaWdodENvbG9yKEZQREZfRk9STUhBTkRMRSBoSGFuZGxlLCBpbnQgZmllbGRUeXBlLCB1bnNpZ25lZCBsb25nIGNvbG9yKQoreworCWlmICghaEhhbmRsZSkKKwkJcmV0dXJuOworLy8JQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IChDUERGRG9jX0Vudmlyb25tZW50KiApaEhhbmRsZTsKKwlDUERGU0RLX0RvY3VtZW50KiBwU0RLRG9jID0gKChDUERGRG9jX0Vudmlyb25tZW50KiloSGFuZGxlKS0+R2V0Q3VycmVudERvYygpOworCWlmKHBTREtEb2MpCisJeworCQlpZihDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IHBTREtEb2MtPkdldEludGVyRm9ybSgpKQorCQl7CisJCQlwSW50ZXJGb3JtLT5TZXRIaWdobGlnaHRDb2xvcihjb2xvciwgZmllbGRUeXBlKTsKKwkJfQorCQorCX0KKworfQorCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZfU2V0Rm9ybUZpZWxkSGlnaGxpZ2h0QWxwaGEoRlBERl9GT1JNSEFORExFIGhIYW5kbGUsIHVuc2lnbmVkIGNoYXIgYWxwaGEpCit7CisJaWYgKCFoSGFuZGxlKQorCQlyZXR1cm47CisJQ1BERlNES19Eb2N1bWVudCogcFNES0RvYyA9ICgoQ1BERkRvY19FbnZpcm9ubWVudCopaEhhbmRsZSktPkdldEN1cnJlbnREb2MoKTsKKwlpZihwU0RLRG9jKQorCXsKKwkJaWYoQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSBwU0RLRG9jLT5HZXRJbnRlckZvcm0oKSkKKwkJCXBJbnRlckZvcm0tPlNldEhpZ2hsaWdodEFscGhhKGFscGhhKTsKKwl9Cit9CisKK0RMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERl9SZW1vdmVGb3JtRmllbGRIaWdobGlnaHQoRlBERl9GT1JNSEFORExFIGhIYW5kbGUpCit7CisJaWYgKCFoSGFuZGxlKQorCQlyZXR1cm47CisJQ1BERlNES19Eb2N1bWVudCogcFNES0RvYyA9ICgoQ1BERkRvY19FbnZpcm9ubWVudCopaEhhbmRsZSktPkdldEN1cnJlbnREb2MoKTsKKwlpZihwU0RLRG9jKQorCXsKKwkJaWYoQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSBwU0RLRG9jLT5HZXRJbnRlckZvcm0oKSkKKwkJCXBJbnRlckZvcm0tPlJlbW92ZUFsbEhpZ2hMaWdodCgpOworCX0KK30KKworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGT1JNX09uQWZ0ZXJMb2FkUGFnZShGUERGX1BBR0UgcGFnZSwgRlBERl9GT1JNSEFORExFIGhIYW5kbGUpCit7CisJaWYoIWhIYW5kbGUgfHwgIXBhZ2UpCisJCXJldHVybjsKKwlDUERGU0RLX0RvY3VtZW50KiBwU0RLRG9jID0gKChDUERGRG9jX0Vudmlyb25tZW50KiloSGFuZGxlKS0+R2V0Q3VycmVudERvYygpOworCWlmKCFwU0RLRG9jKQorCQlyZXR1cm47CisJQ1BERl9QYWdlKiBwUGFnZSA9IChDUERGX1BhZ2UqKXBhZ2U7CisJQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gcFNES0RvYy0+R2V0UGFnZVZpZXcocFBhZ2UsIFRSVUUpOworCWlmKHBQYWdlVmlldykKKwl7CisJCXBQYWdlVmlldy0+U2V0VmFsaWQoVFJVRSk7CisJfQkKK30KKworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGT1JNX09uQmVmb3JlQ2xvc2VQYWdlKEZQREZfUEFHRSBwYWdlLCBGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSkKK3sKKwlpZighaEhhbmRsZSB8fCAhcGFnZSkKKwkJcmV0dXJuOworCUNQREZTREtfRG9jdW1lbnQqIHBTREtEb2MgPSAoKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGUpLT5HZXRDdXJyZW50RG9jKCk7CisJQ1BERl9QYWdlKiBwUGFnZSA9IChDUERGX1BhZ2UqKXBhZ2U7CisJQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gcFNES0RvYy0+R2V0UGFnZVZpZXcocFBhZ2UsIEZBTFNFKTsKKwlpZihwUGFnZVZpZXcpCisJeworCQlwUGFnZVZpZXctPlNldFZhbGlkKEZBTFNFKTsKKwkJLy8gUmVNb3ZlUGFnZVZpZXcoKSB0YWtlcyBjYXJlIG9mIHRoZSBkZWxldGUgZm9yIHVzLgorCQlwU0RLRG9jLT5SZU1vdmVQYWdlVmlldyhwUGFnZSk7CisJfQorfQorRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGT1JNX0RvRG9jdW1lbnRKU0FjdGlvbihGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSkKK3sKKwlpZighaEhhbmRsZSkKKwkJcmV0dXJuOworCWlmKCBDUERGU0RLX0RvY3VtZW50KiBwU0RLRG9jID0gKChDUERGRG9jX0Vudmlyb25tZW50KiloSGFuZGxlKS0+R2V0Q3VycmVudERvYygpKQorCXsKKwkJcFNES0RvYy0+SW5pdFBhZ2VWaWV3KCk7CisJCWlmKCgoQ1BERkRvY19FbnZpcm9ubWVudCopaEhhbmRsZSktPklzSlNJbml0aWF0ZWQoKSkKKwkJCXBTREtEb2MtPlByb2NKYXZhc2NyaXB0RnVuKCk7CisJfQkKK30KKworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGT1JNX0RvRG9jdW1lbnRPcGVuQWN0aW9uKEZQREZfRk9STUhBTkRMRSBoSGFuZGxlKQoreworCWlmKCFoSGFuZGxlKQorCQlyZXR1cm47CisJaWYoIENQREZTREtfRG9jdW1lbnQqIHBTREtEb2MgPSAoKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGUpLT5HZXRDdXJyZW50RG9jKCkpCisJeworCQlpZigoKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGUpLT5Jc0pTSW5pdGlhdGVkKCkpCisJCQlwU0RLRG9jLT5Qcm9jT3BlbkFjdGlvbigpOworCX0KK30KK0RMTEVYUE9SVCB2b2lkIFNURENBTEwgRk9STV9Eb0RvY3VtZW50QUFjdGlvbihGUERGX0ZPUk1IQU5ETEUgaEhhbmRsZSwgaW50IGFhVHlwZSkKK3sKKwlpZighaEhhbmRsZSkKKwkJcmV0dXJuOworCUNQREZTREtfRG9jdW1lbnQqIHBTREtEb2MgPSAoKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGUpLT5HZXRDdXJyZW50RG9jKCk7CisJaWYocFNES0RvYykKKwl7CisJCUNQREZfRG9jdW1lbnQqIHBEb2MgPSBwU0RLRG9jLT5HZXREb2N1bWVudCgpOworCQlDUERGX0RpY3Rpb25hcnkqIHBEaWMgPSBwRG9jLT5HZXRSb290KCk7CisJCWlmICghcERpYykKKwkJCXJldHVybjsKKwkJQ1BERl9BQWN0aW9uIGFhID0gcERpYy0+R2V0RGljdChGWF9CU1RSQygiQUEiKSk7CisJCQorCQlpZihhYS5BY3Rpb25FeGlzdCgoQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSlhYVR5cGUpKQorCQl7CisJCQlDUERGX0FjdGlvbiBhY3Rpb24gPSBhYS5HZXRBY3Rpb24oKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUpYWFUeXBlKTsKKwkJCUNQREZTREtfQWN0aW9uSGFuZGxlciAqcEFjdGlvbkhhbmRsZXIgPSAoKENQREZEb2NfRW52aXJvbm1lbnQqKWhIYW5kbGUpLT5HZXRBY3Rpb25IYW5kZXIoKTsKKwkJCUFTU0VSVChwQWN0aW9uSGFuZGxlciAhPSBOVUxMKTsKKwkJCXBBY3Rpb25IYW5kbGVyLT5Eb0FjdGlvbl9Eb2N1bWVudChhY3Rpb24sIChDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlKWFhVHlwZSwgcFNES0RvYyk7CisJCX0KKwl9Cit9CitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZPUk1fRG9QYWdlQUFjdGlvbihGUERGX1BBR0UgcGFnZSwgRlBERl9GT1JNSEFORExFIGhIYW5kbGUsIGludCBhYVR5cGUpCit7CisJaWYoIWhIYW5kbGUgfHwgIXBhZ2UpCisJCXJldHVybjsKKwlDUERGU0RLX0RvY3VtZW50KiBwU0RLRG9jID0gKChDUERGRG9jX0Vudmlyb25tZW50KiloSGFuZGxlKS0+R2V0Q3VycmVudERvYygpOworCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOworCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyA9IHBTREtEb2MtPkdldFBhZ2VWaWV3KHBQYWdlLCBGQUxTRSk7CisJaWYocFBhZ2VWaWV3KQorCXsKKwkJQ1BERkRvY19FbnZpcm9ubWVudCAqcEVudiA9IHBTREtEb2MtPkdldEVudigpOworCQlBU1NFUlQocEVudiAhPSBOVUxMKTsKKwkJCQorCQlDUERGU0RLX0FjdGlvbkhhbmRsZXIgKnBBY3Rpb25IYW5kbGVyID0gcEVudi0+R2V0QWN0aW9uSGFuZGVyKCk7CisJCUFTU0VSVChwQWN0aW9uSGFuZGxlciAhPSBOVUxMKTsKKwkJCisJCUNQREZfRGljdGlvbmFyeSAqcFBhZ2VEaWN0ID0gcFBhZ2UtPm1fcEZvcm1EaWN0OworCQlBU1NFUlQocFBhZ2VEaWN0ICE9IE5VTEwpOworCQkgCisJCUNQREZfQUFjdGlvbiBhYSA9IHBQYWdlRGljdC0+R2V0RGljdChGWF9CU1RSQygiQUEiKSk7CisKKwkJRlhfQk9PTCBiRXhpc3RPQUFjdGlvbiA9IEZBTFNFOworCQlGWF9CT09MIGJFeGlzdENBQWN0aW9uID0gRkFMU0U7CisJCWlmIChGUERGUEFHRV9BQUNUSU9OX09QRU4gPT0gYWFUeXBlKQorCQl7CisJCQliRXhpc3RPQUFjdGlvbiA9IGFhLkFjdGlvbkV4aXN0KENQREZfQUFjdGlvbjo6T3BlblBhZ2UpOworCQkJaWYgKGJFeGlzdE9BQWN0aW9uKQorCQkJeworCQkJCUNQREZfQWN0aW9uIGFjdGlvbiA9IGFhLkdldEFjdGlvbihDUERGX0FBY3Rpb246Ok9wZW5QYWdlKTsKKwkJCQlwQWN0aW9uSGFuZGxlci0+RG9BY3Rpb25fUGFnZShhY3Rpb24sIENQREZfQUFjdGlvbjo6T3BlblBhZ2UsIHBTREtEb2MpOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJYkV4aXN0Q0FBY3Rpb24gPSBhYS5BY3Rpb25FeGlzdChDUERGX0FBY3Rpb246OkNsb3NlUGFnZSk7CisJCQlpZiAoYkV4aXN0Q0FBY3Rpb24pCisJCQl7CisJCQkJQ1BERl9BY3Rpb24gYWN0aW9uID0gYWEuR2V0QWN0aW9uKENQREZfQUFjdGlvbjo6Q2xvc2VQYWdlKTsKKwkJCQlwQWN0aW9uSGFuZGxlci0+RG9BY3Rpb25fUGFnZShhY3Rpb24sIENQREZfQUFjdGlvbjo6Q2xvc2VQYWdlLCBwU0RLRG9jKTsKKwkJCX0KKwkJfQorCX0KK30KKworCmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9mcGRmb29tLmNwcCBiL2ZwZGZzZGsvc3JjL2ZwZGZvb20uY3BwCmluZGV4IGZiNjdhNWEuLjliYTk4M2IgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2ZwZGZvb20uY3BwCisrKyBiL2ZwZGZzZGsvc3JjL2ZwZGZvb20uY3BwCkBAIC0xLDI3ICsxLDI3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX2RlZmluZS5oIg0KLSNpbmNsdWRlICIuLi9pbmNsdWRlL2ZwZGZvb20uaCINCi0NCi12b2lkIE9PTV9IYW5kbGVyKEZYTUVNX0ZveGl0TWdyKiBwRm94aXRNZ3IsIHZvaWQqIHBhcmFtKQ0KLXsNCi0JaWYgKCFwYXJhbSkgcmV0dXJuOw0KLQkoKE9PTV9JTkZPKilwYXJhbSktPkZTREtfT09NX0hhbmRsZXIoKE9PTV9JTkZPKilwYXJhbSk7DQotfQ0KLQ0KLQ0KLURMTEVYUE9SVCBGWF9CT09MIFNURENBTEwgRlNES19TZXRPT01IYW5kbGVyKE9PTV9JTkZPKiBvb21JbmZvKQ0KLXsNCi0jaWZuZGVmIF9GWFNES19PUEVOU09VUkNFXw0KLQlpZiAoIW9vbUluZm8gfHwgb29tSW5mby0+dmVyc2lvbiE9MSkNCi0JCXJldHVybiBGQUxTRTsNCi0JRlhNRU1fU2V0T09NSGFuZGxlcihGWE1FTV9HZXREZWZhdWx0TWdyKCksT09NX0hhbmRsZXIsb29tSW5mbyk7DQotCXJldHVybiBUUlVFOw0KLSNlbHNlDQotCXJldHVybiBUUlVFOw0KLSNlbmRpZg0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX2RlZmluZS5oIgorI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnBkZm9vbS5oIgorCit2b2lkIE9PTV9IYW5kbGVyKEZYTUVNX0ZveGl0TWdyKiBwRm94aXRNZ3IsIHZvaWQqIHBhcmFtKQoreworCWlmICghcGFyYW0pIHJldHVybjsKKwkoKE9PTV9JTkZPKilwYXJhbSktPkZTREtfT09NX0hhbmRsZXIoKE9PTV9JTkZPKilwYXJhbSk7Cit9CisKKworRExMRVhQT1JUIEZYX0JPT0wgU1REQ0FMTCBGU0RLX1NldE9PTUhhbmRsZXIoT09NX0lORk8qIG9vbUluZm8pCit7CisjaWZuZGVmIF9GWFNES19PUEVOU09VUkNFXworCWlmICghb29tSW5mbyB8fCBvb21JbmZvLT52ZXJzaW9uIT0xKQorCQlyZXR1cm4gRkFMU0U7CisJRlhNRU1fU2V0T09NSGFuZGxlcihGWE1FTV9HZXREZWZhdWx0TWdyKCksT09NX0hhbmRsZXIsb29tSW5mbyk7CisJcmV0dXJuIFRSVUU7CisjZWxzZQorCXJldHVybiBUUlVFOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9mcGRmcHBvLmNwcCBiL2ZwZGZzZGsvc3JjL2ZwZGZwcG8uY3BwCmluZGV4IGU2MDU0ODQuLmE4MDM0NTQgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2ZwZGZwcG8uY3BwCisrKyBiL2ZwZGZzZGsvc3JjL2ZwZGZwcG8uY3BwCkBAIC0xLDQ2MCArMSw0NjAgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi9pbmNsdWRlL2ZwZGZwcG8uaCINCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX2RlZmluZS5oIg0KLQ0KLWNsYXNzIENQREZfUGFnZU9yZ2FuaXplcg0KLXsNCi1wdWJsaWM6DQotCUNQREZfUGFnZU9yZ2FuaXplcigpOw0KLQl+Q1BERl9QYWdlT3JnYW5pemVyKCk7DQotCQ0KLXB1YmxpYzoNCi0JRlhfQk9PTAkJCQlQREZEb2NJbml0KENQREZfRG9jdW1lbnQgKnBEZXN0UERGRG9jLCBDUERGX0RvY3VtZW50ICpwU3JjUERGRG9jKTsNCi0JRlhfQk9PTAkJCQlFeHBvcnRQYWdlKENQREZfRG9jdW1lbnQgKnBTcmNQREZEb2MsIENGWF9Xb3JkQXJyYXkqIG5QYWdlTnVtLCBDUERGX0RvY3VtZW50ICpwRGVzdFBERkRvYywgaW50IG5JbmRleCk7DQotCUNQREZfT2JqZWN0KgkJUGFnZURpY3RHZXRJbmhlcml0YWJsZVRhZyhDUERGX0RpY3Rpb25hcnkgKnBEaWN0LCBDRlhfQnl0ZVN0cmluZyBuU3JjdGFnKTsNCi0JRlhfQk9PTAkJCQlVcGRhdGVSZWZlcmVuY2UoQ1BERl9PYmplY3QgKnBPYmosIENQREZfRG9jdW1lbnQgKnBEb2MsIENGWF9NYXBQdHJUb1B0ciogcE1hcFB0clRvUHRyKTsNCi0JaW50CQkJCQlHZXROZXdPYmpJZChDUERGX0RvY3VtZW50ICpwRG9jLCBDRlhfTWFwUHRyVG9QdHIqIHBNYXBQdHJUb1B0ciwgQ1BERl9SZWZlcmVuY2UgKnBSZWYpOw0KLQkNCi19Ow0KLQ0KLQ0KLUNQREZfUGFnZU9yZ2FuaXplcjo6Q1BERl9QYWdlT3JnYW5pemVyKCkNCi17DQotDQotfQ0KLQ0KLUNQREZfUGFnZU9yZ2FuaXplcjo6fkNQREZfUGFnZU9yZ2FuaXplcigpDQotew0KLQ0KLX0NCi0NCi1GWF9CT09MIENQREZfUGFnZU9yZ2FuaXplcjo6UERGRG9jSW5pdChDUERGX0RvY3VtZW50ICpwRGVzdFBERkRvYywgQ1BERl9Eb2N1bWVudCAqcFNyY1BERkRvYykNCi17DQotCWlmKCFwRGVzdFBERkRvYyB8fCAhcFNyY1BERkRvYykNCi0JCXJldHVybiBmYWxzZTsNCi0JDQotCUNQREZfRGljdGlvbmFyeSogcE5ld1Jvb3QgPSBwRGVzdFBERkRvYy0+R2V0Um9vdCgpOw0KLQlpZighcE5ld1Jvb3QpCXJldHVybiBGQUxTRTsNCi0JDQotCS8vU2V0IHRoZSBkb2N1bWVudCBpbmZvcm1hdGlvbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotCQ0KLQlDUERGX0RpY3Rpb25hcnkqIERJbmZvRGljdCA9IHBEZXN0UERGRG9jLT5HZXRJbmZvKCk7DQotCQ0KLQlpZighREluZm9EaWN0KQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQkNCi0JQ0ZYX0J5dGVTdHJpbmcgcHJvZHVjZXJzdHI7DQotCQ0KLSNpZmRlZiBGT1hJVF9DSFJPTUVfQlVJTEQNCi0JcHJvZHVjZXJzdHIuRm9ybWF0KCJHb29nbGUiKTsNCi0jZWxzZQ0KLQkgcHJvZHVjZXJzdHIuRm9ybWF0KCJGb3hpdCBQREYgU0RLICVzIC0gRm94aXQgQ29ycG9yYXRpb24iLCAiMi4wIik7DQotI2VuZGlmDQotCURJbmZvRGljdC0+U2V0QXQoIlByb2R1Y2VyIiwgbmV3IENQREZfU3RyaW5nKHByb2R1Y2Vyc3RyKSk7DQotDQotCS8vU2V0IHR5cGUvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotCUNGWF9CeXRlU3RyaW5nIGNiUm9vdFR5cGUgPSBwTmV3Um9vdC0+R2V0U3RyaW5nKCJUeXBlIiwiIik7DQotCWlmKCBjYlJvb3RUeXBlLkVxdWFsKCIiKSApDQotCXsNCi0JCXBOZXdSb290LT5TZXRBdCgiVHlwZSIsIG5ldyBDUERGX05hbWUoIkNhdGFsb2ciKSk7DQotCX0NCi0JDQotCUNQREZfRGljdGlvbmFyeSogcE5ld1BhZ2VzID0gKENQREZfRGljdGlvbmFyeSopcE5ld1Jvb3QtPkdldEVsZW1lbnQoIlBhZ2VzIiktPkdldERpcmVjdCgpOw0KLQlpZighcE5ld1BhZ2VzKQ0KLQl7DQotCQlwTmV3UGFnZXMgPSBuZXcgQ1BERl9EaWN0aW9uYXJ5Ow0KLQkJRlhfRFdPUkQgTmV3UGFnZXNPTiA9IHBEZXN0UERGRG9jLT5BZGRJbmRpcmVjdE9iamVjdChwTmV3UGFnZXMpOw0KLQkJcE5ld1Jvb3QtPlNldEF0KCJQYWdlcyIsIG5ldyBDUERGX1JlZmVyZW5jZShwRGVzdFBERkRvYywgTmV3UGFnZXNPTikpOw0KLQl9DQotCQ0KLQlDRlhfQnl0ZVN0cmluZyBjYlBhZ2VUeXBlID0gcE5ld1BhZ2VzLT5HZXRTdHJpbmcoIlR5cGUiLCIiKTsNCi0JaWYoY2JQYWdlVHlwZS5FcXVhbCgiIikpDQotCXsNCi0JCXBOZXdQYWdlcy0+U2V0QXQoIlR5cGUiLCBuZXcgQ1BERl9OYW1lKCJQYWdlcyIpKTsNCi0JfQ0KLQ0KLQlDUERGX0FycmF5KiBwS2V5c0FycmF5ID0gcE5ld1BhZ2VzLT5HZXRBcnJheSgiS2lkcyIpOw0KLQlpZihwS2V5c0FycmF5ID09IE5VTEwpDQotCXsNCi0JCUNQREZfQXJyYXkqIHBOZXdLaWRzID0gbmV3IENQREZfQXJyYXk7DQotCQlGWF9EV09SRCBLaWRzb2JqbnVtID0gLTE7DQotCQlLaWRzb2JqbnVtID0gcERlc3RQREZEb2MtPkFkZEluZGlyZWN0T2JqZWN0KHBOZXdLaWRzKTsvLywgS2lkc29iam51bSwgS2lkc2dlbm51bSk7DQotCQkNCi0JCXBOZXdQYWdlcy0+U2V0QXQoIktpZHMiLCBuZXcgQ1BERl9SZWZlcmVuY2UocERlc3RQREZEb2MsIEtpZHNvYmpudW0pKTsvLywgS2lkc2dlbm51bSkpOw0KLQkJcE5ld1BhZ2VzLT5TZXRBdCgiQ291bnQiLCBuZXcgQ1BERl9OdW1iZXIoMCkpOwkJDQotCX0NCi0NCi0JcmV0dXJuIHRydWU7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BERl9QYWdlT3JnYW5pemVyOjpFeHBvcnRQYWdlKENQREZfRG9jdW1lbnQgKnBTcmNQREZEb2MsIENGWF9Xb3JkQXJyYXkqIG5QYWdlTnVtLCANCi0JCQkJCQkJCQkJCQlDUERGX0RvY3VtZW50ICpwRGVzdFBERkRvYyxpbnQgbkluZGV4KQ0KLXsNCi0JaW50IGN1cnBhZ2UgPW5JbmRleDsNCi0NCi0JQ0ZYX01hcFB0clRvUHRyKiBwTWFwUHRyVG9QdHIgPSBuZXcgQ0ZYX01hcFB0clRvUHRyOw0KLQlwTWFwUHRyVG9QdHItPkluaXRIYXNoVGFibGUoMTAwMSk7DQotDQotCWZvcihpbnQgaT0wOyBpPG5QYWdlTnVtLT5HZXRTaXplKCk7IGkrKykNCi0Jew0KLQkJDQotCQlDUERGX0RpY3Rpb25hcnkqIHBDdXJQYWdlRGljdCA9IHBEZXN0UERGRG9jLT5DcmVhdGVOZXdQYWdlKGN1cnBhZ2UpOw0KLQkJQ1BERl9EaWN0aW9uYXJ5KiBwU3JjUGFnZURpY3QgPSBwU3JjUERGRG9jLT5HZXRQYWdlKG5QYWdlTnVtLT5HZXRBdChpKS0xKTsNCi0JCWlmKCFwU3JjUGFnZURpY3QgfHwgIXBDdXJQYWdlRGljdCkNCi0JCXsNCi0JCQlkZWxldGUgcE1hcFB0clRvUHRyOw0KLQkJCXJldHVybiBGQUxTRTsNCi0JCX0NCi0JCQ0KLQkJLy8gQ2xvbmUgdGhlIHBhZ2UgZGljdGlvbmFyeS8vLy8vLy8vLy8vDQotCQlGWF9QT1NJVElPTglTcmNQb3MgPSBwU3JjUGFnZURpY3QtPkdldFN0YXJ0UG9zKCk7DQotCQl3aGlsZSAoU3JjUG9zKQ0KLQkJew0KLQkJCUNGWF9CeXRlU3RyaW5nIGNiU3JjS2V5U3RyOw0KLQkJCUNQREZfT2JqZWN0KiBwT2JqID0gcFNyY1BhZ2VEaWN0LT5HZXROZXh0RWxlbWVudChTcmNQb3MsIGNiU3JjS2V5U3RyKTsNCi0JCQlpZihjYlNyY0tleVN0ci5Db21wYXJlKCgiVHlwZSIpKSAmJiBjYlNyY0tleVN0ci5Db21wYXJlKCgiUGFyZW50IikpKQ0KLQkJCXsNCi0JCQkJaWYocEN1clBhZ2VEaWN0LT5LZXlFeGlzdChjYlNyY0tleVN0cikpDQotCQkJCQlwQ3VyUGFnZURpY3QtPlJlbW92ZUF0KGNiU3JjS2V5U3RyKTsNCi0JCQkJcEN1clBhZ2VEaWN0LT5TZXRBdChjYlNyY0tleVN0ciwgcE9iai0+Q2xvbmUoKSk7DQotCQkJfQ0KLQkJfQ0KLQkJDQotCQkvL2luaGVyaXRhYmxlIGl0ZW0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLQkJQ1BERl9PYmplY3QqIHBJbmhlcml0YWJsZSA9IE5VTEw7DQotCQkvLzEJTWVkaWFCb3ggIC8vcmVxdWlyZWQNCi0JCWlmKCFwQ3VyUGFnZURpY3QtPktleUV4aXN0KCJNZWRpYUJveCIpKQ0KLQkJew0KLQkJCQ0KLQkJCXBJbmhlcml0YWJsZSA9IFBhZ2VEaWN0R2V0SW5oZXJpdGFibGVUYWcocFNyY1BhZ2VEaWN0LCAiTWVkaWFCb3giKTsNCi0JCQlpZighcEluaGVyaXRhYmxlKSANCi0JCQl7DQotCQkJCS8vU2VhcmNoIHRoZSAiQ3JvcEJveCIgZnJvbSBzb3VyY2UgcGFnZSBkaWN0aW9uYXJ5LCBpZiBub3QgZXhpc3RzLHdlIHRha2UgdGhlIGxldHRlciBzaXplLg0KLQkJCQlwSW5oZXJpdGFibGUgPSBQYWdlRGljdEdldEluaGVyaXRhYmxlVGFnKHBTcmNQYWdlRGljdCwgIkNyb3BCb3giKTsNCi0JCQkJaWYocEluaGVyaXRhYmxlKQ0KLQkJCQkJcEN1clBhZ2VEaWN0LT5TZXRBdCgiTWVkaWFCb3giLCBwSW5oZXJpdGFibGUtPkNsb25lKCkpOw0KLQkJCQllbHNlDQotCQkJCXsNCi0JCQkJCS8vTWFrZSB0aGUgZGVmYXVsdCBzaXplIHRvIGJlIGxldHRlciBzaXplICg4LjUneDExJykNCi0JCQkJCUNQREZfQXJyYXkqIHBBcnJheSA9IG5ldyBDUERGX0FycmF5Ow0KLQkJCQkJcEFycmF5LT5BZGROdW1iZXIoMCk7DQotCQkJCQlwQXJyYXktPkFkZE51bWJlcigwKTsNCi0JCQkJCXBBcnJheS0+QWRkTnVtYmVyKDYxMik7DQotCQkJCQlwQXJyYXktPkFkZE51bWJlcig3OTIpOw0KLQkJCQkJcEN1clBhZ2VEaWN0LT5TZXRBdCgiTWVkaWFCb3giLCBwQXJyYXkpOw0KLQkJCQl9DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQkJcEN1clBhZ2VEaWN0LT5TZXRBdCgiTWVkaWFCb3giLCBwSW5oZXJpdGFibGUtPkNsb25lKCkpOw0KLQkJfQ0KLQkJLy8yIFJlc291cmNlcyAvL3JlcXVpcmVkDQotCQlpZighcEN1clBhZ2VEaWN0LT5LZXlFeGlzdCgiUmVzb3VyY2VzIikpDQotCQl7DQotCQkJcEluaGVyaXRhYmxlID0gUGFnZURpY3RHZXRJbmhlcml0YWJsZVRhZyhwU3JjUGFnZURpY3QsICJSZXNvdXJjZXMiKTsNCi0JCQlpZighcEluaGVyaXRhYmxlKSANCi0JCQl7DQotCQkJCWRlbGV0ZSBwTWFwUHRyVG9QdHI7DQotCQkJCXJldHVybiBGQUxTRTsNCi0JCQl9DQotCQkJcEN1clBhZ2VEaWN0LT5TZXRBdCgiUmVzb3VyY2VzIiwgcEluaGVyaXRhYmxlLT5DbG9uZSgpKTsNCi0JCX0NCi0JCS8vMyBDcm9wQm94ICAvL09wdGlvbmFsDQotCQlpZighcEN1clBhZ2VEaWN0LT5LZXlFeGlzdCgiQ3JvcEJveCIpKQ0KLQkJew0KLQkJCXBJbmhlcml0YWJsZSA9IFBhZ2VEaWN0R2V0SW5oZXJpdGFibGVUYWcocFNyY1BhZ2VEaWN0LCAiQ3JvcEJveCIpOw0KLQkJCWlmKHBJbmhlcml0YWJsZSkgDQotCQkJCXBDdXJQYWdlRGljdC0+U2V0QXQoIkNyb3BCb3giLCBwSW5oZXJpdGFibGUtPkNsb25lKCkpOw0KLQkJfQ0KLQkJLy80IFJvdGF0ZSAgLy9PcHRpb25hbA0KLQkJaWYoIXBDdXJQYWdlRGljdC0+S2V5RXhpc3QoIlJvdGF0ZSIpKQ0KLQkJew0KLQkJCXBJbmhlcml0YWJsZSA9IFBhZ2VEaWN0R2V0SW5oZXJpdGFibGVUYWcocFNyY1BhZ2VEaWN0LCAiUm90YXRlIik7DQotCQkJaWYocEluaGVyaXRhYmxlKSANCi0JCQkJcEN1clBhZ2VEaWN0LT5TZXRBdCgiUm90YXRlIiwgcEluaGVyaXRhYmxlLT5DbG9uZSgpKTsNCi0JCX0NCi0NCi0JCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLQkJLy9VcGRhdGUgdGhlIHJlZmVyZW5jZQ0KLQkJRlhfRFdPUkQgZHdPbGRQYWdlT2JqID0gcFNyY1BhZ2VEaWN0LT5HZXRPYmpOdW0oKTsNCi0JCUZYX0RXT1JEIGR3TmV3UGFnZU9iaiA9IHBDdXJQYWdlRGljdC0+R2V0T2JqTnVtKCk7DQotCQkNCi0JCXBNYXBQdHJUb1B0ci0+U2V0QXQoKEZYX0xQVk9JRCkoRlhfVUlOVFBUUilkd09sZFBhZ2VPYmosIChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpZHdOZXdQYWdlT2JqKTsNCi0NCi0JCXRoaXMtPlVwZGF0ZVJlZmVyZW5jZShwQ3VyUGFnZURpY3QsIHBEZXN0UERGRG9jLCBwTWFwUHRyVG9QdHIpOw0KLQkJY3VycGFnZSsrOw0KLQl9DQotDQotCWRlbGV0ZSBwTWFwUHRyVG9QdHI7DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1DUERGX09iamVjdCogQ1BERl9QYWdlT3JnYW5pemVyOjpQYWdlRGljdEdldEluaGVyaXRhYmxlVGFnKENQREZfRGljdGlvbmFyeSAqcERpY3QsIENGWF9CeXRlU3RyaW5nIG5TcmN0YWcpDQotew0KLQlpZighcERpY3QgfHwgIXBEaWN0LT5LZXlFeGlzdCgiVHlwZSIpIHx8IG5TcmN0YWcuSXNFbXB0eSgpKQkNCi0JCXJldHVybiBOVUxMOw0KLQ0KLQlDUERGX09iamVjdCogcFR5cGUgPSBwRGljdC0+R2V0RWxlbWVudCgiVHlwZSIpLT5HZXREaXJlY3QoKTsNCi0JaWYoIXBUeXBlIHx8IHBUeXBlLT5HZXRUeXBlKCkgIT0gUERGT0JKX05BTUUpCXJldHVybiBOVUxMOw0KLQ0KLQlpZihwVHlwZS0+R2V0U3RyaW5nKCkuQ29tcGFyZSgiUGFnZSIpKQlyZXR1cm4gTlVMTDsNCi0NCi0JaWYoIXBEaWN0LT5LZXlFeGlzdCgiUGFyZW50IikpCXJldHVybiBOVUxMOw0KLQlDUERGX09iamVjdCogcFBhcmVudCA9IHBEaWN0LT5HZXRFbGVtZW50KCJQYXJlbnQiKS0+R2V0RGlyZWN0KCk7DQotCWlmKCFwUGFyZW50IHx8IHBQYXJlbnQtPkdldFR5cGUoKSAhPSBQREZPQkpfRElDVElPTkFSWSkJcmV0dXJuIE5VTEw7DQotCQ0KLQlDUERGX0RpY3Rpb25hcnkqIHBwID0gKENQREZfRGljdGlvbmFyeSopcFBhcmVudDsNCi0JDQotCWlmKHBEaWN0LT5LZXlFeGlzdCgoY29uc3QgY2hhciopblNyY3RhZykpCQ0KLQkJcmV0dXJuIHBEaWN0LT5HZXRFbGVtZW50KChjb25zdCBjaGFyKiluU3JjdGFnKTsNCi0Jd2hpbGUgKHBwKQ0KLQl7DQotCQlpZihwcC0+S2V5RXhpc3QoKGNvbnN0IGNoYXIqKW5TcmN0YWcpKQkNCi0JCQlyZXR1cm4gcHAtPkdldEVsZW1lbnQoKGNvbnN0IGNoYXIqKW5TcmN0YWcpOw0KLQkJZWxzZSBpZihwcC0+S2V5RXhpc3QoIlBhcmVudCIpKQ0KLQkJCXBwID0gKENQREZfRGljdGlvbmFyeSopcHAtPkdldEVsZW1lbnQoIlBhcmVudCIpLT5HZXREaXJlY3QoKTsNCi0JCWVsc2UgYnJlYWs7DQotCX0NCi0JDQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi1GWF9CT09MIENQREZfUGFnZU9yZ2FuaXplcjo6VXBkYXRlUmVmZXJlbmNlKENQREZfT2JqZWN0ICpwT2JqLCBDUERGX0RvY3VtZW50ICpwRG9jLCANCi0JCQkJCQkJCQkJIENGWF9NYXBQdHJUb1B0ciogcE1hcFB0clRvUHRyKQ0KLXsNCi0Jc3dpdGNoIChwT2JqLT5HZXRUeXBlKCkpDQotCXsNCi0JY2FzZSBQREZPQkpfUkVGRVJFTkNFOg0KLQkJew0KLQkJCUNQREZfUmVmZXJlbmNlKiBwUmVmZXJlbmNlID0gKENQREZfUmVmZXJlbmNlKilwT2JqOw0KLQkJCWludCBuZXdvYmpudW0gPSBHZXROZXdPYmpJZChwRG9jLCBwTWFwUHRyVG9QdHIsIHBSZWZlcmVuY2UpOw0KLQkJCWlmIChuZXdvYmpudW0gPT0gMCkgcmV0dXJuIEZBTFNFOw0KLQkJCXBSZWZlcmVuY2UtPlNldFJlZihwRG9jLCBuZXdvYmpudW0pOy8vLCAwKTsNCi0JCQlicmVhazsNCi0JCX0NCi0JY2FzZSBQREZPQkpfRElDVElPTkFSWToNCi0JCXsNCi0JCQlDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gKENQREZfRGljdGlvbmFyeSopcE9iajsNCi0JCQkNCi0JCQlGWF9QT1NJVElPTiBwb3MgPSBwRGljdC0+R2V0U3RhcnRQb3MoKTsNCi0JCQl3aGlsZShwb3MpDQotCQkJew0KLQkJCQlDRlhfQnl0ZVN0cmluZyBrZXkoIiIpOw0KLQkJCQlDUERGX09iamVjdCogcE5leHRPYmogPSBwRGljdC0+R2V0TmV4dEVsZW1lbnQocG9zLCBrZXkpOw0KLQkJCQlpZiAoIUZYU1lTX3N0cmNtcChrZXksICJQYXJlbnQiKSB8fCAhRlhTWVNfc3RyY21wKGtleSwgIlByZXYiKSB8fCAhRlhTWVNfc3RyY21wKGtleSwgIkZpcnN0IikpDQotCQkJCQljb250aW51ZTsNCi0JCQkJaWYocE5leHRPYmopDQotCQkJCXsNCi0JCQkJCWlmKCFVcGRhdGVSZWZlcmVuY2UocE5leHRPYmosIHBEb2MsIHBNYXBQdHJUb1B0cikpDQotCQkJCQkJcERpY3QtPlJlbW92ZUF0KGtleSk7DQotCQkJCX0NCi0JCQkJZWxzZQ0KLQkJCQkJcmV0dXJuIEZBTFNFOw0KLQkJCX0NCi0JCQlicmVhazsNCi0JCX0NCi0JY2FzZQlQREZPQkpfQVJSQVk6DQotCQl7DQotCQkJQ1BERl9BcnJheSogcEFycmF5ID0gKENQREZfQXJyYXkqKXBPYmo7DQotCQkJRlhfRFdPUkQgY291bnQgPSBwQXJyYXktPkdldENvdW50KCk7DQotCQkJZm9yKEZYX0RXT1JEIGkgPSAwOyBpIDwgY291bnQ7IGkgKyspDQotCQkJew0KLQkJCQlDUERGX09iamVjdCogcE5leHRPYmogPSBwQXJyYXktPkdldEVsZW1lbnQoaSk7DQotCQkJCWlmKHBOZXh0T2JqKQ0KLQkJCQl7DQotCQkJCQlpZighVXBkYXRlUmVmZXJlbmNlKHBOZXh0T2JqLCBwRG9jLCBwTWFwUHRyVG9QdHIpKQ0KLQkJCQkJCXJldHVybiBGQUxTRTsNCi0JCQkJfQ0KLQkJCQllbHNlDQotCQkJCQlyZXR1cm4gRkFMU0U7DQotCQkJfQ0KLQkJCWJyZWFrOw0KLQkJfQ0KLQljYXNlCVBERk9CSl9TVFJFQU06DQotCQl7DQotCQkJQ1BERl9TdHJlYW0qIHBTdHJlYW0gPSAoQ1BERl9TdHJlYW0qKXBPYmo7DQotCQkJQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IHBTdHJlYW0tPkdldERpY3QoKTsNCi0JCQlpZihwRGljdCkNCi0JCQl7DQotCQkJCWlmKCFVcGRhdGVSZWZlcmVuY2UocERpY3QsIHBEb2MsIHBNYXBQdHJUb1B0cikpDQotCQkJCQlyZXR1cm4gRkFMU0U7DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQkJcmV0dXJuIEZBTFNFOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQlkZWZhdWx0OglicmVhazsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotaW50CUNQREZfUGFnZU9yZ2FuaXplcjo6R2V0TmV3T2JqSWQoQ1BERl9Eb2N1bWVudCAqcERvYywgQ0ZYX01hcFB0clRvUHRyKiBwTWFwUHRyVG9QdHIsDQotCQkJCQkJCQkJQ1BERl9SZWZlcmVuY2UgKnBSZWYpDQotew0KLQlzaXplX3QgZHdPYmpudW0gPSAwOw0KLQlpZighcFJlZikNCi0JCXJldHVybiAwOw0KLQlkd09iam51bSA9IHBSZWYtPkdldFJlZk9iak51bSgpOw0KLQkNCi0Jc2l6ZV90IGR3TmV3T2JqTnVtID0gMDsNCi0JDQotCXBNYXBQdHJUb1B0ci0+TG9va3VwKChGWF9MUFZPSUQpZHdPYmpudW0sIChGWF9MUFZPSUQmKWR3TmV3T2JqTnVtKTsNCi0JaWYoZHdOZXdPYmpOdW0pDQotCXsNCi0JCXJldHVybiAoaW50KWR3TmV3T2JqTnVtOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ1BERl9PYmplY3QqIHBDbG9uZSAgPSBwUmVmLT5HZXREaXJlY3QoKS0+Q2xvbmUoKTsNCi0JCWlmKCFwQ2xvbmUpCQkJcmV0dXJuIDA7DQotCQkNCi0JCWlmKHBDbG9uZS0+R2V0VHlwZSgpID09IFBERk9CSl9ESUNUSU9OQVJZKQ0KLQkJew0KLQkJCUNQREZfRGljdGlvbmFyeSogcERpY3RDbG9uZSA9IChDUERGX0RpY3Rpb25hcnkqKXBDbG9uZTsNCi0JCQlpZihwRGljdENsb25lLT5LZXlFeGlzdCgiVHlwZSIpKQ0KLQkJCXsNCi0JCQkJQ0ZYX0J5dGVTdHJpbmcgc3RyVHlwZSA9IHBEaWN0Q2xvbmUtPkdldFN0cmluZygiVHlwZSIpOw0KLQkJCQlpZighRlhTWVNfc3RyaWNtcChzdHJUeXBlLCAiUGFnZXMiKSkNCi0JCQkJew0KLQkJCQkJcERpY3RDbG9uZS0+UmVsZWFzZSgpOw0KLQkJCQkJcmV0dXJuIDQ7DQotCQkJCX0NCi0JCQkJZWxzZSBpZighRlhTWVNfc3RyaWNtcChzdHJUeXBlLCAiUGFnZSIpKQ0KLQkJCQl7DQotCQkJCQlwRGljdENsb25lLT5SZWxlYXNlKCk7DQotCQkJCQlyZXR1cm4gIDA7DQotCQkJCX0NCi0JCQl9DQotCQl9DQotCQlkd05ld09iak51bSA9IHBEb2MtPkFkZEluZGlyZWN0T2JqZWN0KHBDbG9uZSk7Ly8sIG9udW0sIGdudW0pOw0KLQkJcE1hcFB0clRvUHRyLT5TZXRBdCgoRlhfTFBWT0lEKWR3T2JqbnVtLCAoRlhfTFBWT0lEKWR3TmV3T2JqTnVtKTsNCi0JCQ0KLQkJaWYoIVVwZGF0ZVJlZmVyZW5jZShwQ2xvbmUsIHBEb2MsIHBNYXBQdHJUb1B0cikpDQotCQl7DQotCQkJcENsb25lLT5SZWxlYXNlKCk7DQotCQkJcmV0dXJuIDA7DQotCQl9DQotCQlyZXR1cm4gKGludClkd05ld09iak51bTsNCi0JfQ0KLQlyZXR1cm4gMDsNCi19DQotDQotRlBERl9CT09MIFBhcnNlclBhZ2VSYW5nZVN0cmluZyhDRlhfQnl0ZVN0cmluZyByYW5nc3RyaW5nLCBDRlhfV29yZEFycmF5KiBwYWdlQXJyYXksaW50IG5Db3VudCkNCi17DQotDQotCWlmKHJhbmdzdHJpbmcuR2V0TGVuZ3RoKCkgIT0gMCkNCi0Jew0KLQkJcmFuZ3N0cmluZy5SZW1vdmUoJyAnKTsNCi0JCWludCBuTGVuZ3RoID0gcmFuZ3N0cmluZy5HZXRMZW5ndGgoKTsNCi0JCUNGWF9CeXRlU3RyaW5nIGNiQ29tcGFyZVN0cmluZygiMDEyMzQ1Njc4OS0sIik7DQotCQlmb3IoaW50IGk9MDsgaTxuTGVuZ3RoOyBpKyspDQotCQl7DQotCQkJaWYoY2JDb21wYXJlU3RyaW5nLkZpbmQocmFuZ3N0cmluZ1tpXSkgPT0gLTEpDQotCQkJCXJldHVybiBGQUxTRTsNCi0JCX0NCi0JCUNGWF9CeXRlU3RyaW5nIGNiTWlkUmFuZ2U7DQotCQlpbnQgblN0cmluZ0Zyb20gPSAwOw0KLQkJaW50IG5TdHJpbmdUbz0wOw0KLQkJd2hpbGUoblN0cmluZ1RvIDwgbkxlbmd0aCkNCi0JCXsNCi0JCQluU3RyaW5nVG8gPSByYW5nc3RyaW5nLkZpbmQoJywnLG5TdHJpbmdGcm9tKTsNCi0JCQlpZihuU3RyaW5nVG8gPT0gLTEpDQotCQkJew0KLQkJCQluU3RyaW5nVG8gPSBuTGVuZ3RoOw0KLQkJCX0NCi0JCQljYk1pZFJhbmdlID0gcmFuZ3N0cmluZy5NaWQoblN0cmluZ0Zyb20sblN0cmluZ1RvLW5TdHJpbmdGcm9tKTsNCi0JCQkNCi0JCQlpbnQgbk1pZCA9IGNiTWlkUmFuZ2UuRmluZCgnLScpOw0KLQkJCWlmKG5NaWQgPT0gLTEpDQotCQkJew0KLQkJCQlsb25nIGxQYWdlTnVtID0gYXRvbChjYk1pZFJhbmdlKTsNCi0JCQkJaWYobFBhZ2VOdW0gPD0gMCB8fCBsUGFnZU51bSA+IG5Db3VudCkNCi0JCQkJCXJldHVybiBGQUxTRTsNCi0JCQkJcGFnZUFycmF5LT5BZGQoKEZYX1dPUkQpbFBhZ2VOdW0pOw0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQlpbnQgblN0YXJ0UGFnZU51bSA9IGF0b2woY2JNaWRSYW5nZS5NaWQoMCxuTWlkKSk7DQotCQkJCWlmIChuU3RhcnRQYWdlTnVtID09MCkNCi0JCQkJew0KLQkJCQkJcmV0dXJuIEZBTFNFOw0KLQkJCQl9DQotDQotDQotCQkJCW5NaWQgPSBuTWlkKzE7DQotCQkJCWludCBuRW5kID0gY2JNaWRSYW5nZS5HZXRMZW5ndGgoKS1uTWlkOw0KLQ0KLQkJCQlpZihuRW5kID09MClyZXR1cm4gRkFMU0U7DQotCQkJCQ0KLQkJCQkvLwkJCQlpbnQgbkVuZFBhZ2VOdW0gPSAobkVuZCA9PSAwKT9uQ291bnQ6YXRvbChjYk1pZFJhbmdlLk1pZChuTWlkLG5FbmQpKTsNCi0JCQkJaW50IG5FbmRQYWdlTnVtID0gYXRvbChjYk1pZFJhbmdlLk1pZChuTWlkLG5FbmQpKTsNCi0JCQkJDQotCQkJCWlmKG5TdGFydFBhZ2VOdW0gPCAwIHx8blN0YXJ0UGFnZU51bSA+bkVuZFBhZ2VOdW18fCBuRW5kUGFnZU51bSA+IG5Db3VudCkNCi0JCQkJew0KLQkJCQkJcmV0dXJuIEZBTFNFOw0KLQkJCQl9DQotCQkJCWVsc2UNCi0JCQkJew0KLQkJCQkJZm9yKGludCBuSW5kZXg9blN0YXJ0UGFnZU51bTsgbkluZGV4IDw9IG5FbmRQYWdlTnVtOyBuSW5kZXggKyspDQotCQkJCQkJcGFnZUFycmF5LT5BZGQobkluZGV4KTsNCi0JCQkJfQ0KLQkJCX0NCi0JCQluU3RyaW5nRnJvbSA9IG5TdHJpbmdUbyArMTsNCi0JCX0NCi0JfQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZfSW1wb3J0UGFnZXMoRlBERl9ET0NVTUVOVCBkZXN0X2RvYyxGUERGX0RPQ1VNRU5UIHNyY19kb2MsIA0KLQkJCQkJCQkJCQkJIEZQREZfQllURVNUUklORyBwYWdlcmFuZ2UsIGludCBpbmRleCkNCi17DQotCWlmKGRlc3RfZG9jID09IE5VTEwgfHwgc3JjX2RvYyA9PSBOVUxMICkNCi0JCXJldHVybiBGQUxTRTsNCi0JQ0ZYX1dvcmRBcnJheSBwYWdlQXJyYXk7DQotCUNQREZfRG9jdW1lbnQqIHBTcmNEb2MgPSAoQ1BERl9Eb2N1bWVudCopc3JjX2RvYzsNCi0JaW50IG5Db3VudCA9IHBTcmNEb2MtPkdldFBhZ2VDb3VudCgpOw0KLQlpZihwYWdlcmFuZ2UpDQotCXsNCi0JCWlmKFBhcnNlclBhZ2VSYW5nZVN0cmluZyhwYWdlcmFuZ2UsJnBhZ2VBcnJheSxuQ291bnQpID09IEZBTFNFKQ0KLQkJCXJldHVybiBGQUxTRTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCWZvcihpbnQgaT0xOyBpPD1uQ291bnQ7IGkrKykNCi0JCXsNCi0JCQlwYWdlQXJyYXkuQWRkKGkpOw0KLQkJfQ0KLQl9DQotCQ0KLQlDUERGX0RvY3VtZW50KiBwRGVzdERvYyA9IChDUERGX0RvY3VtZW50KilkZXN0X2RvYzsNCi0JQ1BERl9QYWdlT3JnYW5pemVyIHBhZ2VPcmc7DQotDQotCXBhZ2VPcmcuUERGRG9jSW5pdChwRGVzdERvYyxwU3JjRG9jKTsNCi0NCi0JaWYocGFnZU9yZy5FeHBvcnRQYWdlKHBTcmNEb2MsJnBhZ2VBcnJheSxwRGVzdERvYyxpbmRleCkpDQotCQlyZXR1cm4gVFJVRTsNCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1ETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERl9Db3B5Vmlld2VyUHJlZmVyZW5jZXMoRlBERl9ET0NVTUVOVCBkZXN0X2RvYywgRlBERl9ET0NVTUVOVCBzcmNfZG9jKQ0KLXsNCi0JaWYoc3JjX2RvYyA9PSBOVUxMIHx8IGRlc3RfZG9jID09IE5VTEwpDQotCQlyZXR1cm4gZmFsc2U7DQotCUNQREZfRG9jdW1lbnQqIHBTcmNEb2MgPSAoQ1BERl9Eb2N1bWVudCopc3JjX2RvYzsNCi0JQ1BERl9EaWN0aW9uYXJ5KiBwU3JjRGljdCA9IHBTcmNEb2MtPkdldFJvb3QoKTsNCi0JcFNyY0RpY3QgPSBwU3JjRGljdC0+R2V0RGljdChGWF9CU1RSQygiVmlld2VyUHJlZmVyZW5jZXMiKSk7Ow0KLQlpZighcFNyY0RpY3QpDQotCQlyZXR1cm4gRkFMU0U7DQotCUNQREZfRG9jdW1lbnQqIHBEc3REb2MgPSAoQ1BERl9Eb2N1bWVudCopZGVzdF9kb2M7DQotCUNQREZfRGljdGlvbmFyeSogcERzdERpY3QgPSBwRHN0RG9jLT5HZXRSb290KCk7DQotCWlmKCFwRHN0RGljdCkNCi0JCXJldHVybiBGQUxTRTsNCi0JcERzdERpY3QtPlNldEF0KEZYX0JTVFJDKCJWaWV3ZXJQcmVmZXJlbmNlcyIpLCBwU3JjRGljdC0+Q2xvbmUoVFJVRSkpOw0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnBkZnBwby5oIgorI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19kZWZpbmUuaCIKKworY2xhc3MgQ1BERl9QYWdlT3JnYW5pemVyCit7CitwdWJsaWM6CisJQ1BERl9QYWdlT3JnYW5pemVyKCk7CisJfkNQREZfUGFnZU9yZ2FuaXplcigpOworCQorcHVibGljOgorCUZYX0JPT0wJCQkJUERGRG9jSW5pdChDUERGX0RvY3VtZW50ICpwRGVzdFBERkRvYywgQ1BERl9Eb2N1bWVudCAqcFNyY1BERkRvYyk7CisJRlhfQk9PTAkJCQlFeHBvcnRQYWdlKENQREZfRG9jdW1lbnQgKnBTcmNQREZEb2MsIENGWF9Xb3JkQXJyYXkqIG5QYWdlTnVtLCBDUERGX0RvY3VtZW50ICpwRGVzdFBERkRvYywgaW50IG5JbmRleCk7CisJQ1BERl9PYmplY3QqCQlQYWdlRGljdEdldEluaGVyaXRhYmxlVGFnKENQREZfRGljdGlvbmFyeSAqcERpY3QsIENGWF9CeXRlU3RyaW5nIG5TcmN0YWcpOworCUZYX0JPT0wJCQkJVXBkYXRlUmVmZXJlbmNlKENQREZfT2JqZWN0ICpwT2JqLCBDUERGX0RvY3VtZW50ICpwRG9jLCBDRlhfTWFwUHRyVG9QdHIqIHBNYXBQdHJUb1B0cik7CisJaW50CQkJCQlHZXROZXdPYmpJZChDUERGX0RvY3VtZW50ICpwRG9jLCBDRlhfTWFwUHRyVG9QdHIqIHBNYXBQdHJUb1B0ciwgQ1BERl9SZWZlcmVuY2UgKnBSZWYpOworCQorfTsKKworCitDUERGX1BhZ2VPcmdhbml6ZXI6OkNQREZfUGFnZU9yZ2FuaXplcigpCit7CisKK30KKworQ1BERl9QYWdlT3JnYW5pemVyOjp+Q1BERl9QYWdlT3JnYW5pemVyKCkKK3sKKworfQorCitGWF9CT09MIENQREZfUGFnZU9yZ2FuaXplcjo6UERGRG9jSW5pdChDUERGX0RvY3VtZW50ICpwRGVzdFBERkRvYywgQ1BERl9Eb2N1bWVudCAqcFNyY1BERkRvYykKK3sKKwlpZighcERlc3RQREZEb2MgfHwgIXBTcmNQREZEb2MpCisJCXJldHVybiBmYWxzZTsKKwkKKwlDUERGX0RpY3Rpb25hcnkqIHBOZXdSb290ID0gcERlc3RQREZEb2MtPkdldFJvb3QoKTsKKwlpZighcE5ld1Jvb3QpCXJldHVybiBGQUxTRTsKKwkKKwkvL1NldCB0aGUgZG9jdW1lbnQgaW5mb3JtYXRpb24vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCQorCUNQREZfRGljdGlvbmFyeSogREluZm9EaWN0ID0gcERlc3RQREZEb2MtPkdldEluZm8oKTsKKwkKKwlpZighREluZm9EaWN0KQorCQlyZXR1cm4gRkFMU0U7CisJCisJQ0ZYX0J5dGVTdHJpbmcgcHJvZHVjZXJzdHI7CisJCisjaWZkZWYgRk9YSVRfQ0hST01FX0JVSUxECisJcHJvZHVjZXJzdHIuRm9ybWF0KCJHb29nbGUiKTsKKyNlbHNlCisJIHByb2R1Y2Vyc3RyLkZvcm1hdCgiRm94aXQgUERGIFNESyAlcyAtIEZveGl0IENvcnBvcmF0aW9uIiwgIjIuMCIpOworI2VuZGlmCisJREluZm9EaWN0LT5TZXRBdCgiUHJvZHVjZXIiLCBuZXcgQ1BERl9TdHJpbmcocHJvZHVjZXJzdHIpKTsKKworCS8vU2V0IHR5cGUvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJQ0ZYX0J5dGVTdHJpbmcgY2JSb290VHlwZSA9IHBOZXdSb290LT5HZXRTdHJpbmcoIlR5cGUiLCIiKTsKKwlpZiggY2JSb290VHlwZS5FcXVhbCgiIikgKQorCXsKKwkJcE5ld1Jvb3QtPlNldEF0KCJUeXBlIiwgbmV3IENQREZfTmFtZSgiQ2F0YWxvZyIpKTsKKwl9CisJCisJQ1BERl9EaWN0aW9uYXJ5KiBwTmV3UGFnZXMgPSAoQ1BERl9EaWN0aW9uYXJ5KilwTmV3Um9vdC0+R2V0RWxlbWVudCgiUGFnZXMiKS0+R2V0RGlyZWN0KCk7CisJaWYoIXBOZXdQYWdlcykKKwl7CisJCXBOZXdQYWdlcyA9IG5ldyBDUERGX0RpY3Rpb25hcnk7CisJCUZYX0RXT1JEIE5ld1BhZ2VzT04gPSBwRGVzdFBERkRvYy0+QWRkSW5kaXJlY3RPYmplY3QocE5ld1BhZ2VzKTsKKwkJcE5ld1Jvb3QtPlNldEF0KCJQYWdlcyIsIG5ldyBDUERGX1JlZmVyZW5jZShwRGVzdFBERkRvYywgTmV3UGFnZXNPTikpOworCX0KKwkKKwlDRlhfQnl0ZVN0cmluZyBjYlBhZ2VUeXBlID0gcE5ld1BhZ2VzLT5HZXRTdHJpbmcoIlR5cGUiLCIiKTsKKwlpZihjYlBhZ2VUeXBlLkVxdWFsKCIiKSkKKwl7CisJCXBOZXdQYWdlcy0+U2V0QXQoIlR5cGUiLCBuZXcgQ1BERl9OYW1lKCJQYWdlcyIpKTsKKwl9CisKKwlDUERGX0FycmF5KiBwS2V5c0FycmF5ID0gcE5ld1BhZ2VzLT5HZXRBcnJheSgiS2lkcyIpOworCWlmKHBLZXlzQXJyYXkgPT0gTlVMTCkKKwl7CisJCUNQREZfQXJyYXkqIHBOZXdLaWRzID0gbmV3IENQREZfQXJyYXk7CisJCUZYX0RXT1JEIEtpZHNvYmpudW0gPSAtMTsKKwkJS2lkc29iam51bSA9IHBEZXN0UERGRG9jLT5BZGRJbmRpcmVjdE9iamVjdChwTmV3S2lkcyk7Ly8sIEtpZHNvYmpudW0sIEtpZHNnZW5udW0pOworCQkKKwkJcE5ld1BhZ2VzLT5TZXRBdCgiS2lkcyIsIG5ldyBDUERGX1JlZmVyZW5jZShwRGVzdFBERkRvYywgS2lkc29iam51bSkpOy8vLCBLaWRzZ2VubnVtKSk7CisJCXBOZXdQYWdlcy0+U2V0QXQoIkNvdW50IiwgbmV3IENQREZfTnVtYmVyKDApKTsJCQorCX0KKworCXJldHVybiB0cnVlOworfQorCitGWF9CT09MIENQREZfUGFnZU9yZ2FuaXplcjo6RXhwb3J0UGFnZShDUERGX0RvY3VtZW50ICpwU3JjUERGRG9jLCBDRlhfV29yZEFycmF5KiBuUGFnZU51bSwgCisJCQkJCQkJCQkJCQlDUERGX0RvY3VtZW50ICpwRGVzdFBERkRvYyxpbnQgbkluZGV4KQoreworCWludCBjdXJwYWdlID1uSW5kZXg7CisKKwlDRlhfTWFwUHRyVG9QdHIqIHBNYXBQdHJUb1B0ciA9IG5ldyBDRlhfTWFwUHRyVG9QdHI7CisJcE1hcFB0clRvUHRyLT5Jbml0SGFzaFRhYmxlKDEwMDEpOworCisJZm9yKGludCBpPTA7IGk8blBhZ2VOdW0tPkdldFNpemUoKTsgaSsrKQorCXsKKwkJCisJCUNQREZfRGljdGlvbmFyeSogcEN1clBhZ2VEaWN0ID0gcERlc3RQREZEb2MtPkNyZWF0ZU5ld1BhZ2UoY3VycGFnZSk7CisJCUNQREZfRGljdGlvbmFyeSogcFNyY1BhZ2VEaWN0ID0gcFNyY1BERkRvYy0+R2V0UGFnZShuUGFnZU51bS0+R2V0QXQoaSktMSk7CisJCWlmKCFwU3JjUGFnZURpY3QgfHwgIXBDdXJQYWdlRGljdCkKKwkJeworCQkJZGVsZXRlIHBNYXBQdHJUb1B0cjsKKwkJCXJldHVybiBGQUxTRTsKKwkJfQorCQkKKwkJLy8gQ2xvbmUgdGhlIHBhZ2UgZGljdGlvbmFyeS8vLy8vLy8vLy8vCisJCUZYX1BPU0lUSU9OCVNyY1BvcyA9IHBTcmNQYWdlRGljdC0+R2V0U3RhcnRQb3MoKTsKKwkJd2hpbGUgKFNyY1BvcykKKwkJeworCQkJQ0ZYX0J5dGVTdHJpbmcgY2JTcmNLZXlTdHI7CisJCQlDUERGX09iamVjdCogcE9iaiA9IHBTcmNQYWdlRGljdC0+R2V0TmV4dEVsZW1lbnQoU3JjUG9zLCBjYlNyY0tleVN0cik7CisJCQlpZihjYlNyY0tleVN0ci5Db21wYXJlKCgiVHlwZSIpKSAmJiBjYlNyY0tleVN0ci5Db21wYXJlKCgiUGFyZW50IikpKQorCQkJeworCQkJCWlmKHBDdXJQYWdlRGljdC0+S2V5RXhpc3QoY2JTcmNLZXlTdHIpKQorCQkJCQlwQ3VyUGFnZURpY3QtPlJlbW92ZUF0KGNiU3JjS2V5U3RyKTsKKwkJCQlwQ3VyUGFnZURpY3QtPlNldEF0KGNiU3JjS2V5U3RyLCBwT2JqLT5DbG9uZSgpKTsKKwkJCX0KKwkJfQorCQkKKwkJLy9pbmhlcml0YWJsZSBpdGVtLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkJQ1BERl9PYmplY3QqIHBJbmhlcml0YWJsZSA9IE5VTEw7CisJCS8vMQlNZWRpYUJveCAgLy9yZXF1aXJlZAorCQlpZighcEN1clBhZ2VEaWN0LT5LZXlFeGlzdCgiTWVkaWFCb3giKSkKKwkJeworCQkJCisJCQlwSW5oZXJpdGFibGUgPSBQYWdlRGljdEdldEluaGVyaXRhYmxlVGFnKHBTcmNQYWdlRGljdCwgIk1lZGlhQm94Iik7CisJCQlpZighcEluaGVyaXRhYmxlKSAKKwkJCXsKKwkJCQkvL1NlYXJjaCB0aGUgIkNyb3BCb3giIGZyb20gc291cmNlIHBhZ2UgZGljdGlvbmFyeSwgaWYgbm90IGV4aXN0cyx3ZSB0YWtlIHRoZSBsZXR0ZXIgc2l6ZS4KKwkJCQlwSW5oZXJpdGFibGUgPSBQYWdlRGljdEdldEluaGVyaXRhYmxlVGFnKHBTcmNQYWdlRGljdCwgIkNyb3BCb3giKTsKKwkJCQlpZihwSW5oZXJpdGFibGUpCisJCQkJCXBDdXJQYWdlRGljdC0+U2V0QXQoIk1lZGlhQm94IiwgcEluaGVyaXRhYmxlLT5DbG9uZSgpKTsKKwkJCQllbHNlCisJCQkJeworCQkJCQkvL01ha2UgdGhlIGRlZmF1bHQgc2l6ZSB0byBiZSBsZXR0ZXIgc2l6ZSAoOC41J3gxMScpCisJCQkJCUNQREZfQXJyYXkqIHBBcnJheSA9IG5ldyBDUERGX0FycmF5OworCQkJCQlwQXJyYXktPkFkZE51bWJlcigwKTsKKwkJCQkJcEFycmF5LT5BZGROdW1iZXIoMCk7CisJCQkJCXBBcnJheS0+QWRkTnVtYmVyKDYxMik7CisJCQkJCXBBcnJheS0+QWRkTnVtYmVyKDc5Mik7CisJCQkJCXBDdXJQYWdlRGljdC0+U2V0QXQoIk1lZGlhQm94IiwgcEFycmF5KTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQkJcEN1clBhZ2VEaWN0LT5TZXRBdCgiTWVkaWFCb3giLCBwSW5oZXJpdGFibGUtPkNsb25lKCkpOworCQl9CisJCS8vMiBSZXNvdXJjZXMgLy9yZXF1aXJlZAorCQlpZighcEN1clBhZ2VEaWN0LT5LZXlFeGlzdCgiUmVzb3VyY2VzIikpCisJCXsKKwkJCXBJbmhlcml0YWJsZSA9IFBhZ2VEaWN0R2V0SW5oZXJpdGFibGVUYWcocFNyY1BhZ2VEaWN0LCAiUmVzb3VyY2VzIik7CisJCQlpZighcEluaGVyaXRhYmxlKSAKKwkJCXsKKwkJCQlkZWxldGUgcE1hcFB0clRvUHRyOworCQkJCXJldHVybiBGQUxTRTsKKwkJCX0KKwkJCXBDdXJQYWdlRGljdC0+U2V0QXQoIlJlc291cmNlcyIsIHBJbmhlcml0YWJsZS0+Q2xvbmUoKSk7CisJCX0KKwkJLy8zIENyb3BCb3ggIC8vT3B0aW9uYWwKKwkJaWYoIXBDdXJQYWdlRGljdC0+S2V5RXhpc3QoIkNyb3BCb3giKSkKKwkJeworCQkJcEluaGVyaXRhYmxlID0gUGFnZURpY3RHZXRJbmhlcml0YWJsZVRhZyhwU3JjUGFnZURpY3QsICJDcm9wQm94Iik7CisJCQlpZihwSW5oZXJpdGFibGUpIAorCQkJCXBDdXJQYWdlRGljdC0+U2V0QXQoIkNyb3BCb3giLCBwSW5oZXJpdGFibGUtPkNsb25lKCkpOworCQl9CisJCS8vNCBSb3RhdGUgIC8vT3B0aW9uYWwKKwkJaWYoIXBDdXJQYWdlRGljdC0+S2V5RXhpc3QoIlJvdGF0ZSIpKQorCQl7CisJCQlwSW5oZXJpdGFibGUgPSBQYWdlRGljdEdldEluaGVyaXRhYmxlVGFnKHBTcmNQYWdlRGljdCwgIlJvdGF0ZSIpOworCQkJaWYocEluaGVyaXRhYmxlKSAKKwkJCQlwQ3VyUGFnZURpY3QtPlNldEF0KCJSb3RhdGUiLCBwSW5oZXJpdGFibGUtPkNsb25lKCkpOworCQl9CisKKwkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisJCS8vVXBkYXRlIHRoZSByZWZlcmVuY2UKKwkJRlhfRFdPUkQgZHdPbGRQYWdlT2JqID0gcFNyY1BhZ2VEaWN0LT5HZXRPYmpOdW0oKTsKKwkJRlhfRFdPUkQgZHdOZXdQYWdlT2JqID0gcEN1clBhZ2VEaWN0LT5HZXRPYmpOdW0oKTsKKwkJCisJCXBNYXBQdHJUb1B0ci0+U2V0QXQoKEZYX0xQVk9JRCkoRlhfVUlOVFBUUilkd09sZFBhZ2VPYmosIChGWF9MUFZPSUQpKEZYX1VJTlRQVFIpZHdOZXdQYWdlT2JqKTsKKworCQl0aGlzLT5VcGRhdGVSZWZlcmVuY2UocEN1clBhZ2VEaWN0LCBwRGVzdFBERkRvYywgcE1hcFB0clRvUHRyKTsKKwkJY3VycGFnZSsrOworCX0KKworCWRlbGV0ZSBwTWFwUHRyVG9QdHI7CisJcmV0dXJuIFRSVUU7Cit9CisKK0NQREZfT2JqZWN0KiBDUERGX1BhZ2VPcmdhbml6ZXI6OlBhZ2VEaWN0R2V0SW5oZXJpdGFibGVUYWcoQ1BERl9EaWN0aW9uYXJ5ICpwRGljdCwgQ0ZYX0J5dGVTdHJpbmcgblNyY3RhZykKK3sKKwlpZighcERpY3QgfHwgIXBEaWN0LT5LZXlFeGlzdCgiVHlwZSIpIHx8IG5TcmN0YWcuSXNFbXB0eSgpKQkKKwkJcmV0dXJuIE5VTEw7CisKKwlDUERGX09iamVjdCogcFR5cGUgPSBwRGljdC0+R2V0RWxlbWVudCgiVHlwZSIpLT5HZXREaXJlY3QoKTsKKwlpZighcFR5cGUgfHwgcFR5cGUtPkdldFR5cGUoKSAhPSBQREZPQkpfTkFNRSkJcmV0dXJuIE5VTEw7CisKKwlpZihwVHlwZS0+R2V0U3RyaW5nKCkuQ29tcGFyZSgiUGFnZSIpKQlyZXR1cm4gTlVMTDsKKworCWlmKCFwRGljdC0+S2V5RXhpc3QoIlBhcmVudCIpKQlyZXR1cm4gTlVMTDsKKwlDUERGX09iamVjdCogcFBhcmVudCA9IHBEaWN0LT5HZXRFbGVtZW50KCJQYXJlbnQiKS0+R2V0RGlyZWN0KCk7CisJaWYoIXBQYXJlbnQgfHwgcFBhcmVudC0+R2V0VHlwZSgpICE9IFBERk9CSl9ESUNUSU9OQVJZKQlyZXR1cm4gTlVMTDsKKwkKKwlDUERGX0RpY3Rpb25hcnkqIHBwID0gKENQREZfRGljdGlvbmFyeSopcFBhcmVudDsKKwkKKwlpZihwRGljdC0+S2V5RXhpc3QoKGNvbnN0IGNoYXIqKW5TcmN0YWcpKQkKKwkJcmV0dXJuIHBEaWN0LT5HZXRFbGVtZW50KChjb25zdCBjaGFyKiluU3JjdGFnKTsKKwl3aGlsZSAocHApCisJeworCQlpZihwcC0+S2V5RXhpc3QoKGNvbnN0IGNoYXIqKW5TcmN0YWcpKQkKKwkJCXJldHVybiBwcC0+R2V0RWxlbWVudCgoY29uc3QgY2hhciopblNyY3RhZyk7CisJCWVsc2UgaWYocHAtPktleUV4aXN0KCJQYXJlbnQiKSkKKwkJCXBwID0gKENQREZfRGljdGlvbmFyeSopcHAtPkdldEVsZW1lbnQoIlBhcmVudCIpLT5HZXREaXJlY3QoKTsKKwkJZWxzZSBicmVhazsKKwl9CisJCisJcmV0dXJuIE5VTEw7Cit9CisKK0ZYX0JPT0wgQ1BERl9QYWdlT3JnYW5pemVyOjpVcGRhdGVSZWZlcmVuY2UoQ1BERl9PYmplY3QgKnBPYmosIENQREZfRG9jdW1lbnQgKnBEb2MsIAorCQkJCQkJCQkJCSBDRlhfTWFwUHRyVG9QdHIqIHBNYXBQdHJUb1B0cikKK3sKKwlzd2l0Y2ggKHBPYmotPkdldFR5cGUoKSkKKwl7CisJY2FzZSBQREZPQkpfUkVGRVJFTkNFOgorCQl7CisJCQlDUERGX1JlZmVyZW5jZSogcFJlZmVyZW5jZSA9IChDUERGX1JlZmVyZW5jZSopcE9iajsKKwkJCWludCBuZXdvYmpudW0gPSBHZXROZXdPYmpJZChwRG9jLCBwTWFwUHRyVG9QdHIsIHBSZWZlcmVuY2UpOworCQkJaWYgKG5ld29iam51bSA9PSAwKSByZXR1cm4gRkFMU0U7CisJCQlwUmVmZXJlbmNlLT5TZXRSZWYocERvYywgbmV3b2JqbnVtKTsvLywgMCk7CisJCQlicmVhazsKKwkJfQorCWNhc2UgUERGT0JKX0RJQ1RJT05BUlk6CisJCXsKKwkJCUNQREZfRGljdGlvbmFyeSogcERpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5KilwT2JqOworCQkJCisJCQlGWF9QT1NJVElPTiBwb3MgPSBwRGljdC0+R2V0U3RhcnRQb3MoKTsKKwkJCXdoaWxlKHBvcykKKwkJCXsKKwkJCQlDRlhfQnl0ZVN0cmluZyBrZXkoIiIpOworCQkJCUNQREZfT2JqZWN0KiBwTmV4dE9iaiA9IHBEaWN0LT5HZXROZXh0RWxlbWVudChwb3MsIGtleSk7CisJCQkJaWYgKCFGWFNZU19zdHJjbXAoa2V5LCAiUGFyZW50IikgfHwgIUZYU1lTX3N0cmNtcChrZXksICJQcmV2IikgfHwgIUZYU1lTX3N0cmNtcChrZXksICJGaXJzdCIpKQorCQkJCQljb250aW51ZTsKKwkJCQlpZihwTmV4dE9iaikKKwkJCQl7CisJCQkJCWlmKCFVcGRhdGVSZWZlcmVuY2UocE5leHRPYmosIHBEb2MsIHBNYXBQdHJUb1B0cikpCisJCQkJCQlwRGljdC0+UmVtb3ZlQXQoa2V5KTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gRkFMU0U7CisJCQl9CisJCQlicmVhazsKKwkJfQorCWNhc2UJUERGT0JKX0FSUkFZOgorCQl7CisJCQlDUERGX0FycmF5KiBwQXJyYXkgPSAoQ1BERl9BcnJheSopcE9iajsKKwkJCUZYX0RXT1JEIGNvdW50ID0gcEFycmF5LT5HZXRDb3VudCgpOworCQkJZm9yKEZYX0RXT1JEIGkgPSAwOyBpIDwgY291bnQ7IGkgKyspCisJCQl7CisJCQkJQ1BERl9PYmplY3QqIHBOZXh0T2JqID0gcEFycmF5LT5HZXRFbGVtZW50KGkpOworCQkJCWlmKHBOZXh0T2JqKQorCQkJCXsKKwkJCQkJaWYoIVVwZGF0ZVJlZmVyZW5jZShwTmV4dE9iaiwgcERvYywgcE1hcFB0clRvUHRyKSkKKwkJCQkJCXJldHVybiBGQUxTRTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gRkFMU0U7CisJCQl9CisJCQlicmVhazsKKwkJfQorCWNhc2UJUERGT0JKX1NUUkVBTToKKwkJeworCQkJQ1BERl9TdHJlYW0qIHBTdHJlYW0gPSAoQ1BERl9TdHJlYW0qKXBPYmo7CisJCQlDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gcFN0cmVhbS0+R2V0RGljdCgpOworCQkJaWYocERpY3QpCisJCQl7CisJCQkJaWYoIVVwZGF0ZVJlZmVyZW5jZShwRGljdCwgcERvYywgcE1hcFB0clRvUHRyKSkKKwkJCQkJcmV0dXJuIEZBTFNFOworCQkJfQorCQkJZWxzZQorCQkJCXJldHVybiBGQUxTRTsKKwkJCWJyZWFrOworCQl9CisJZGVmYXVsdDoJYnJlYWs7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK2ludAlDUERGX1BhZ2VPcmdhbml6ZXI6OkdldE5ld09iaklkKENQREZfRG9jdW1lbnQgKnBEb2MsIENGWF9NYXBQdHJUb1B0ciogcE1hcFB0clRvUHRyLAorCQkJCQkJCQkJQ1BERl9SZWZlcmVuY2UgKnBSZWYpCit7CisJc2l6ZV90IGR3T2JqbnVtID0gMDsKKwlpZighcFJlZikKKwkJcmV0dXJuIDA7CisJZHdPYmpudW0gPSBwUmVmLT5HZXRSZWZPYmpOdW0oKTsKKwkKKwlzaXplX3QgZHdOZXdPYmpOdW0gPSAwOworCQorCXBNYXBQdHJUb1B0ci0+TG9va3VwKChGWF9MUFZPSUQpZHdPYmpudW0sIChGWF9MUFZPSUQmKWR3TmV3T2JqTnVtKTsKKwlpZihkd05ld09iak51bSkKKwl7CisJCXJldHVybiAoaW50KWR3TmV3T2JqTnVtOworCX0KKwllbHNlCisJeworCQlDUERGX09iamVjdCogcENsb25lICA9IHBSZWYtPkdldERpcmVjdCgpLT5DbG9uZSgpOworCQlpZighcENsb25lKQkJCXJldHVybiAwOworCQkKKwkJaWYocENsb25lLT5HZXRUeXBlKCkgPT0gUERGT0JKX0RJQ1RJT05BUlkpCisJCXsKKwkJCUNQREZfRGljdGlvbmFyeSogcERpY3RDbG9uZSA9IChDUERGX0RpY3Rpb25hcnkqKXBDbG9uZTsKKwkJCWlmKHBEaWN0Q2xvbmUtPktleUV4aXN0KCJUeXBlIikpCisJCQl7CisJCQkJQ0ZYX0J5dGVTdHJpbmcgc3RyVHlwZSA9IHBEaWN0Q2xvbmUtPkdldFN0cmluZygiVHlwZSIpOworCQkJCWlmKCFGWFNZU19zdHJpY21wKHN0clR5cGUsICJQYWdlcyIpKQorCQkJCXsKKwkJCQkJcERpY3RDbG9uZS0+UmVsZWFzZSgpOworCQkJCQlyZXR1cm4gNDsKKwkJCQl9CisJCQkJZWxzZSBpZighRlhTWVNfc3RyaWNtcChzdHJUeXBlLCAiUGFnZSIpKQorCQkJCXsKKwkJCQkJcERpY3RDbG9uZS0+UmVsZWFzZSgpOworCQkJCQlyZXR1cm4gIDA7CisJCQkJfQorCQkJfQorCQl9CisJCWR3TmV3T2JqTnVtID0gcERvYy0+QWRkSW5kaXJlY3RPYmplY3QocENsb25lKTsvLywgb251bSwgZ251bSk7CisJCXBNYXBQdHJUb1B0ci0+U2V0QXQoKEZYX0xQVk9JRClkd09iam51bSwgKEZYX0xQVk9JRClkd05ld09iak51bSk7CisJCQorCQlpZighVXBkYXRlUmVmZXJlbmNlKHBDbG9uZSwgcERvYywgcE1hcFB0clRvUHRyKSkKKwkJeworCQkJcENsb25lLT5SZWxlYXNlKCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gKGludClkd05ld09iak51bTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK0ZQREZfQk9PTCBQYXJzZXJQYWdlUmFuZ2VTdHJpbmcoQ0ZYX0J5dGVTdHJpbmcgcmFuZ3N0cmluZywgQ0ZYX1dvcmRBcnJheSogcGFnZUFycmF5LGludCBuQ291bnQpCit7CisKKwlpZihyYW5nc3RyaW5nLkdldExlbmd0aCgpICE9IDApCisJeworCQlyYW5nc3RyaW5nLlJlbW92ZSgnICcpOworCQlpbnQgbkxlbmd0aCA9IHJhbmdzdHJpbmcuR2V0TGVuZ3RoKCk7CisJCUNGWF9CeXRlU3RyaW5nIGNiQ29tcGFyZVN0cmluZygiMDEyMzQ1Njc4OS0sIik7CisJCWZvcihpbnQgaT0wOyBpPG5MZW5ndGg7IGkrKykKKwkJeworCQkJaWYoY2JDb21wYXJlU3RyaW5nLkZpbmQocmFuZ3N0cmluZ1tpXSkgPT0gLTEpCisJCQkJcmV0dXJuIEZBTFNFOworCQl9CisJCUNGWF9CeXRlU3RyaW5nIGNiTWlkUmFuZ2U7CisJCWludCBuU3RyaW5nRnJvbSA9IDA7CisJCWludCBuU3RyaW5nVG89MDsKKwkJd2hpbGUoblN0cmluZ1RvIDwgbkxlbmd0aCkKKwkJeworCQkJblN0cmluZ1RvID0gcmFuZ3N0cmluZy5GaW5kKCcsJyxuU3RyaW5nRnJvbSk7CisJCQlpZihuU3RyaW5nVG8gPT0gLTEpCisJCQl7CisJCQkJblN0cmluZ1RvID0gbkxlbmd0aDsKKwkJCX0KKwkJCWNiTWlkUmFuZ2UgPSByYW5nc3RyaW5nLk1pZChuU3RyaW5nRnJvbSxuU3RyaW5nVG8tblN0cmluZ0Zyb20pOworCQkJCisJCQlpbnQgbk1pZCA9IGNiTWlkUmFuZ2UuRmluZCgnLScpOworCQkJaWYobk1pZCA9PSAtMSkKKwkJCXsKKwkJCQlsb25nIGxQYWdlTnVtID0gYXRvbChjYk1pZFJhbmdlKTsKKwkJCQlpZihsUGFnZU51bSA8PSAwIHx8IGxQYWdlTnVtID4gbkNvdW50KQorCQkJCQlyZXR1cm4gRkFMU0U7CisJCQkJcGFnZUFycmF5LT5BZGQoKEZYX1dPUkQpbFBhZ2VOdW0pOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWludCBuU3RhcnRQYWdlTnVtID0gYXRvbChjYk1pZFJhbmdlLk1pZCgwLG5NaWQpKTsKKwkJCQlpZiAoblN0YXJ0UGFnZU51bSA9PTApCisJCQkJeworCQkJCQlyZXR1cm4gRkFMU0U7CisJCQkJfQorCisKKwkJCQluTWlkID0gbk1pZCsxOworCQkJCWludCBuRW5kID0gY2JNaWRSYW5nZS5HZXRMZW5ndGgoKS1uTWlkOworCisJCQkJaWYobkVuZCA9PTApcmV0dXJuIEZBTFNFOworCQkJCQorCQkJCS8vCQkJCWludCBuRW5kUGFnZU51bSA9IChuRW5kID09IDApP25Db3VudDphdG9sKGNiTWlkUmFuZ2UuTWlkKG5NaWQsbkVuZCkpOworCQkJCWludCBuRW5kUGFnZU51bSA9IGF0b2woY2JNaWRSYW5nZS5NaWQobk1pZCxuRW5kKSk7CisJCQkJCisJCQkJaWYoblN0YXJ0UGFnZU51bSA8IDAgfHxuU3RhcnRQYWdlTnVtID5uRW5kUGFnZU51bXx8IG5FbmRQYWdlTnVtID4gbkNvdW50KQorCQkJCXsKKwkJCQkJcmV0dXJuIEZBTFNFOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlmb3IoaW50IG5JbmRleD1uU3RhcnRQYWdlTnVtOyBuSW5kZXggPD0gbkVuZFBhZ2VOdW07IG5JbmRleCArKykKKwkJCQkJCXBhZ2VBcnJheS0+QWRkKG5JbmRleCk7CisJCQkJfQorCQkJfQorCQkJblN0cmluZ0Zyb20gPSBuU3RyaW5nVG8gKzE7CisJCX0KKwl9CisJcmV0dXJuIFRSVUU7Cit9CisKK0RMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGX0ltcG9ydFBhZ2VzKEZQREZfRE9DVU1FTlQgZGVzdF9kb2MsRlBERl9ET0NVTUVOVCBzcmNfZG9jLCAKKwkJCQkJCQkJCQkJIEZQREZfQllURVNUUklORyBwYWdlcmFuZ2UsIGludCBpbmRleCkKK3sKKwlpZihkZXN0X2RvYyA9PSBOVUxMIHx8IHNyY19kb2MgPT0gTlVMTCApCisJCXJldHVybiBGQUxTRTsKKwlDRlhfV29yZEFycmF5IHBhZ2VBcnJheTsKKwlDUERGX0RvY3VtZW50KiBwU3JjRG9jID0gKENQREZfRG9jdW1lbnQqKXNyY19kb2M7CisJaW50IG5Db3VudCA9IHBTcmNEb2MtPkdldFBhZ2VDb3VudCgpOworCWlmKHBhZ2VyYW5nZSkKKwl7CisJCWlmKFBhcnNlclBhZ2VSYW5nZVN0cmluZyhwYWdlcmFuZ2UsJnBhZ2VBcnJheSxuQ291bnQpID09IEZBTFNFKQorCQkJcmV0dXJuIEZBTFNFOworCX0KKwllbHNlCisJeworCQlmb3IoaW50IGk9MTsgaTw9bkNvdW50OyBpKyspCisJCXsKKwkJCXBhZ2VBcnJheS5BZGQoaSk7CisJCX0KKwl9CisJCisJQ1BERl9Eb2N1bWVudCogcERlc3REb2MgPSAoQ1BERl9Eb2N1bWVudCopZGVzdF9kb2M7CisJQ1BERl9QYWdlT3JnYW5pemVyIHBhZ2VPcmc7CisKKwlwYWdlT3JnLlBERkRvY0luaXQocERlc3REb2MscFNyY0RvYyk7CisKKwlpZihwYWdlT3JnLkV4cG9ydFBhZ2UocFNyY0RvYywmcGFnZUFycmF5LHBEZXN0RG9jLGluZGV4KSkKKwkJcmV0dXJuIFRSVUU7CisJcmV0dXJuIEZBTFNFOworfQorCitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERl9Db3B5Vmlld2VyUHJlZmVyZW5jZXMoRlBERl9ET0NVTUVOVCBkZXN0X2RvYywgRlBERl9ET0NVTUVOVCBzcmNfZG9jKQoreworCWlmKHNyY19kb2MgPT0gTlVMTCB8fCBkZXN0X2RvYyA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisJQ1BERl9Eb2N1bWVudCogcFNyY0RvYyA9IChDUERGX0RvY3VtZW50KilzcmNfZG9jOworCUNQREZfRGljdGlvbmFyeSogcFNyY0RpY3QgPSBwU3JjRG9jLT5HZXRSb290KCk7CisJcFNyY0RpY3QgPSBwU3JjRGljdC0+R2V0RGljdChGWF9CU1RSQygiVmlld2VyUHJlZmVyZW5jZXMiKSk7OworCWlmKCFwU3JjRGljdCkKKwkJcmV0dXJuIEZBTFNFOworCUNQREZfRG9jdW1lbnQqIHBEc3REb2MgPSAoQ1BERl9Eb2N1bWVudCopZGVzdF9kb2M7CisJQ1BERl9EaWN0aW9uYXJ5KiBwRHN0RGljdCA9IHBEc3REb2MtPkdldFJvb3QoKTsKKwlpZighcERzdERpY3QpCisJCXJldHVybiBGQUxTRTsKKwlwRHN0RGljdC0+U2V0QXQoRlhfQlNUUkMoIlZpZXdlclByZWZlcmVuY2VzIiksIHBTcmNEaWN0LT5DbG9uZShUUlVFKSk7CisJcmV0dXJuIFRSVUU7Cit9CisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2ZwZGZzYXZlLmNwcCBiL2ZwZGZzZGsvc3JjL2ZwZGZzYXZlLmNwcAppbmRleCA4MjcyZWIwLi4wYzdhY2M4IDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9mcGRmc2F2ZS5jcHAKKysrIGIvZnBkZnNkay9zcmMvZnBkZnNhdmUuY3BwCkBAIC0xLDkxICsxLDkxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX2RlZmluZS5oIg0KLSNpbmNsdWRlICIuLi9pbmNsdWRlL2ZwZGZzYXZlLmgiDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnBkZmVkaXQuaCINCi0jaWYgX0ZYX09TXyA9PSBfRlhfQU5EUk9JRF8NCi0jaW5jbHVkZSAidGltZS5oIg0KLSNlbHNlDQotI2luY2x1ZGUgPGN0aW1lPg0KLSNlbmRpZg0KLQ0KLWNsYXNzIENGWF9JRmlsZVdyaXRlOnB1YmxpYyBJRlhfU3RyZWFtV3JpdGUNCi17DQotCQ0KLXB1YmxpYzoNCi0JQ0ZYX0lGaWxlV3JpdGUoKTsNCi0JRlhfQk9PTAkJCQlJbml0KCBGUERGX0ZJTEVXUklURSAqIHBGaWxlV3JpdGVTdHJ1Y3QgKTsNCi0JdmlydHVhbAlGWF9CT09MCQlXcml0ZUJsb2NrKGNvbnN0IHZvaWQqIHBEYXRhLCBzaXplX3Qgc2l6ZSk7DQotCXZpcnR1YWwgdm9pZAkJUmVsZWFzZSgpe307DQotCQ0KLXByb3RlY3RlZDoNCi0JRlBERl9GSUxFV1JJVEUqCQltX3BGaWxlV3JpdGVTdHJ1Y3Q7DQotfTsNCi0NCi1DRlhfSUZpbGVXcml0ZTo6Q0ZYX0lGaWxlV3JpdGUoKQ0KLXsNCi0JbV9wRmlsZVdyaXRlU3RydWN0ID0gTlVMTDsNCi19DQotDQotRlhfQk9PTCBDRlhfSUZpbGVXcml0ZTo6SW5pdCggRlBERl9GSUxFV1JJVEUgKiBwRmlsZVdyaXRlU3RydWN0ICkNCi17DQotCWlmICghcEZpbGVXcml0ZVN0cnVjdCkNCi0JCXJldHVybiBGQUxTRTsNCi0JZWxzZQ0KLQl7DQotCQltX3BGaWxlV3JpdGVTdHJ1Y3QgPSBwRmlsZVdyaXRlU3RydWN0Ow0KLQl9DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIENGWF9JRmlsZVdyaXRlOjpXcml0ZUJsb2NrKGNvbnN0IHZvaWQqIHBEYXRhLCBzaXplX3Qgc2l6ZSkNCi17DQotCWlmIChtX3BGaWxlV3JpdGVTdHJ1Y3QpDQotCXsNCi0JCW1fcEZpbGVXcml0ZVN0cnVjdC0+V3JpdGVCbG9jayggbV9wRmlsZVdyaXRlU3RydWN0LCBwRGF0YSwgc2l6ZSApOw0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0JZWxzZSANCi0JCXJldHVybiBGQUxTRTsNCi19DQotDQotRlBERl9CT09MIF9GUERGX0RvY19TYXZlKEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsRlBERl9GSUxFV1JJVEUgKiBwRmlsZVdyaXRlLEZQREZfRFdPUkQgZmxhZ3MsIEZQREZfQk9PTCBiU2V0VmVyc2lvbiwNCi0JCQkJCQkgaW50IGZpbGVWZXJpb24pDQotew0KLQlDUERGX0RvY3VtZW50KiBwRG9jID0gKENQREZfRG9jdW1lbnQqKWRvY3VtZW50Ow0KLQlpZiAoIXBEb2MpIA0KLQkJcmV0dXJuIDA7DQotCQ0KLQlpZiAoIGZsYWdzIDwgMSB8fCBmbGFncyA+IDIgKQ0KLQl7DQotCQlmbGFncyA9IDA7DQotCX0NCi0JDQotCUNQREZfQ3JlYXRvciBGaWxlTWFrZXIocERvYyk7DQotCWlmKGJTZXRWZXJzaW9uKQ0KLQkJRmlsZU1ha2VyLlNldEZpbGVWZXJzaW9uKGZpbGVWZXJpb24pOw0KLQlDRlhfSUZpbGVXcml0ZSogcFN0cmVhbVdyaXRlID0gTlVMTDsNCi0JRlhfQk9PTCBiUmV0Ow0KLQlwU3RyZWFtV3JpdGUgPSBuZXcgQ0ZYX0lGaWxlV3JpdGU7DQotCXBTdHJlYW1Xcml0ZS0+SW5pdCggcEZpbGVXcml0ZSApOw0KLQliUmV0ID0gRmlsZU1ha2VyLkNyZWF0ZShwU3RyZWFtV3JpdGUsIGZsYWdzKTsNCi0JZGVsZXRlIHBTdHJlYW1Xcml0ZTsNCi0JcmV0dXJuIGJSZXQ7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGX1NhdmVBc0NvcHkoCUZQREZfRE9DVU1FTlQgZG9jdW1lbnQsRlBERl9GSUxFV1JJVEUgKiBwRmlsZVdyaXRlLA0KLQkJCQkJCQkJCQkJCUZQREZfRFdPUkQgZmxhZ3MgKQ0KLXsNCi0JcmV0dXJuIF9GUERGX0RvY19TYXZlKGRvY3VtZW50LCBwRmlsZVdyaXRlLCBmbGFncywgRkFMU0UgLCAwKTsNCi19DQotDQotDQotRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZfU2F2ZVdpdGhWZXJzaW9uKAlGUERGX0RPQ1VNRU5UIGRvY3VtZW50LEZQREZfRklMRVdSSVRFICogcEZpbGVXcml0ZSwNCi0JRlBERl9EV09SRCBmbGFncywgaW50IGZpbGVWZXJzaW9uKQ0KLXsNCi0JcmV0dXJuIF9GUERGX0RvY19TYXZlKGRvY3VtZW50LCBwRmlsZVdyaXRlLCBmbGFncywgVFJVRSAsIGZpbGVWZXJzaW9uKTsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19kZWZpbmUuaCIKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2ZwZGZzYXZlLmgiCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9mcGRmZWRpdC5oIgorI2lmIF9GWF9PU18gPT0gX0ZYX0FORFJPSURfCisjaW5jbHVkZSAidGltZS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxjdGltZT4KKyNlbmRpZgorCitjbGFzcyBDRlhfSUZpbGVXcml0ZTpwdWJsaWMgSUZYX1N0cmVhbVdyaXRlCit7CisJCitwdWJsaWM6CisJQ0ZYX0lGaWxlV3JpdGUoKTsKKwlGWF9CT09MCQkJCUluaXQoIEZQREZfRklMRVdSSVRFICogcEZpbGVXcml0ZVN0cnVjdCApOworCXZpcnR1YWwJRlhfQk9PTAkJV3JpdGVCbG9jayhjb25zdCB2b2lkKiBwRGF0YSwgc2l6ZV90IHNpemUpOworCXZpcnR1YWwgdm9pZAkJUmVsZWFzZSgpe307CisJCitwcm90ZWN0ZWQ6CisJRlBERl9GSUxFV1JJVEUqCQltX3BGaWxlV3JpdGVTdHJ1Y3Q7Cit9OworCitDRlhfSUZpbGVXcml0ZTo6Q0ZYX0lGaWxlV3JpdGUoKQoreworCW1fcEZpbGVXcml0ZVN0cnVjdCA9IE5VTEw7Cit9CisKK0ZYX0JPT0wgQ0ZYX0lGaWxlV3JpdGU6OkluaXQoIEZQREZfRklMRVdSSVRFICogcEZpbGVXcml0ZVN0cnVjdCApCit7CisJaWYgKCFwRmlsZVdyaXRlU3RydWN0KQorCQlyZXR1cm4gRkFMU0U7CisJZWxzZQorCXsKKwkJbV9wRmlsZVdyaXRlU3RydWN0ID0gcEZpbGVXcml0ZVN0cnVjdDsKKwl9CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgQ0ZYX0lGaWxlV3JpdGU6OldyaXRlQmxvY2soY29uc3Qgdm9pZCogcERhdGEsIHNpemVfdCBzaXplKQoreworCWlmIChtX3BGaWxlV3JpdGVTdHJ1Y3QpCisJeworCQltX3BGaWxlV3JpdGVTdHJ1Y3QtPldyaXRlQmxvY2soIG1fcEZpbGVXcml0ZVN0cnVjdCwgcERhdGEsIHNpemUgKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCWVsc2UgCisJCXJldHVybiBGQUxTRTsKK30KKworRlBERl9CT09MIF9GUERGX0RvY19TYXZlKEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsRlBERl9GSUxFV1JJVEUgKiBwRmlsZVdyaXRlLEZQREZfRFdPUkQgZmxhZ3MsIEZQREZfQk9PTCBiU2V0VmVyc2lvbiwKKwkJCQkJCSBpbnQgZmlsZVZlcmlvbikKK3sKKwlDUERGX0RvY3VtZW50KiBwRG9jID0gKENQREZfRG9jdW1lbnQqKWRvY3VtZW50OworCWlmICghcERvYykgCisJCXJldHVybiAwOworCQorCWlmICggZmxhZ3MgPCAxIHx8IGZsYWdzID4gMiApCisJeworCQlmbGFncyA9IDA7CisJfQorCQorCUNQREZfQ3JlYXRvciBGaWxlTWFrZXIocERvYyk7CisJaWYoYlNldFZlcnNpb24pCisJCUZpbGVNYWtlci5TZXRGaWxlVmVyc2lvbihmaWxlVmVyaW9uKTsKKwlDRlhfSUZpbGVXcml0ZSogcFN0cmVhbVdyaXRlID0gTlVMTDsKKwlGWF9CT09MIGJSZXQ7CisJcFN0cmVhbVdyaXRlID0gbmV3IENGWF9JRmlsZVdyaXRlOworCXBTdHJlYW1Xcml0ZS0+SW5pdCggcEZpbGVXcml0ZSApOworCWJSZXQgPSBGaWxlTWFrZXIuQ3JlYXRlKHBTdHJlYW1Xcml0ZSwgZmxhZ3MpOworCWRlbGV0ZSBwU3RyZWFtV3JpdGU7CisJcmV0dXJuIGJSZXQ7Cit9CisKK0RMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGX1NhdmVBc0NvcHkoCUZQREZfRE9DVU1FTlQgZG9jdW1lbnQsRlBERl9GSUxFV1JJVEUgKiBwRmlsZVdyaXRlLAorCQkJCQkJCQkJCQkJRlBERl9EV09SRCBmbGFncyApCit7CisJcmV0dXJuIF9GUERGX0RvY19TYXZlKGRvY3VtZW50LCBwRmlsZVdyaXRlLCBmbGFncywgRkFMU0UgLCAwKTsKK30KKworCitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERl9TYXZlV2l0aFZlcnNpb24oCUZQREZfRE9DVU1FTlQgZG9jdW1lbnQsRlBERl9GSUxFV1JJVEUgKiBwRmlsZVdyaXRlLAorCUZQREZfRFdPUkQgZmxhZ3MsIGludCBmaWxlVmVyc2lvbikKK3sKKwlyZXR1cm4gX0ZQREZfRG9jX1NhdmUoZG9jdW1lbnQsIHBGaWxlV3JpdGUsIGZsYWdzLCBUUlVFICwgZmlsZVZlcnNpb24pOworfQpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvZnBkZnNka2RsbC5yYyBiL2ZwZGZzZGsvc3JjL2ZwZGZzZGtkbGwucmMKaW5kZXggZWUxMjA0OS4uZjIwM2YyZSAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvZnBkZnNka2RsbC5yYworKysgYi9mcGRmc2RrL3NyYy9mcGRmc2RrZGxsLnJjCkBAIC0xLDEwOSArMSwxMDkgQEAKLS8vTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gZ2VuZXJhdGVkIHJlc291cmNlIHNjcmlwdC4NCi0vLw0KLSNpbmNsdWRlICJyZXNvdXJjZS5oIg0KLQ0KLSNkZWZpbmUgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUw0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotLy8NCi0vLyBHZW5lcmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUgMiByZXNvdXJjZS4NCi0vLw0KLSNpbmNsdWRlICJhZnhyZXMuaCINCi0NCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLSN1bmRlZiBBUFNUVURJT19SRUFET05MWV9TWU1CT0xTDQotDQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi0vLyBDaGluZXNlIChQLlIuQy4pIHJlc291cmNlcw0KLQ0KLSNpZiAhZGVmaW5lZChBRlhfUkVTT1VSQ0VfRExMKSB8fCBkZWZpbmVkKEFGWF9UQVJHX0NIUykNCi0jaWZkZWYgX1dJTjMyDQotTEFOR1VBR0UgTEFOR19DSElORVNFLCBTVUJMQU5HX0NISU5FU0VfU0lNUExJRklFRA0KLSNwcmFnbWEgY29kZV9wYWdlKDkzNikNCi0jZW5kaWYgLy9fV0lOMzINCi0NCi0jaWZuZGVmIF9NQUMNCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLS8vDQotLy8gVmVyc2lvbg0KLS8vDQotDQotVlNfVkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPDQotIEZJTEVWRVJTSU9OIDIsMCwwLDE3MDUNCi0gUFJPRFVDVFZFUlNJT04gMiwwLDAsMTcwNQ0KLSBGSUxFRkxBR1NNQVNLIDB4M2ZMDQotI2lmZGVmIF9ERUJVRw0KLSBGSUxFRkxBR1MgMHgxTA0KLSNlbHNlDQotIEZJTEVGTEFHUyAweDBMDQotI2VuZGlmDQotIEZJTEVPUyAweDQwMDA0TA0KLSBGSUxFVFlQRSAweDJMDQotIEZJTEVTVUJUWVBFIDB4MEwNCi1CRUdJTg0KLSAgICBCTE9DSyAiU3RyaW5nRmlsZUluZm8iDQotICAgIEJFR0lODQotICAgICAgICBCTE9DSyAiMDgwOTA0YjAiDQotICAgICAgICBCRUdJTg0KLSAgICAgICAgICAgIFZBTFVFICJDb21tZW50cyIsICJGb3hpdCBDb3Jwb3JhdGlvblwwIg0KLSAgICAgICAgICAgIFZBTFVFICJDb21wYW55TmFtZSIsICJGb3hpdCBDb3Jwb3JhdGlvblwwIg0KLSAgICAgICAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLCAiZnBkZnNka1wwIg0KLSAgICAgICAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsICIyLCAwLCAwLCAxNzA1XDAiDQotICAgICAgICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJmcGRmc2RrXDAiDQotICAgICAgICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCAoQykgMjAwNC0yMDA5IEZveGl0IENvcnBvcmF0aW9uXDAiDQotICAgICAgICAgICAgVkFMVUUgIkxlZ2FsVHJhZGVtYXJrcyIsICJcMCINCi0gICAgICAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJmcGRmc2RrLmRsbFwwIg0KLSAgICAgICAgICAgIFZBTFVFICJQcml2YXRlQnVpbGQiLCAiXDAiDQotICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3ROYW1lIiwgIkZveGl0IFBERiBTREsgRExMXDAiDQotICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgIjIsIDAsIDAsIDE3MDVcMCINCi0gICAgICAgICAgICBWQUxVRSAiU3BlY2lhbEJ1aWxkIiwgIlwwIg0KLSAgICAgICAgRU5EDQotICAgIEVORA0KLSAgICBCTE9DSyAiVmFyRmlsZUluZm8iDQotICAgIEJFR0lODQotICAgICAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDgwOSwgMTIwMA0KLSAgICBFTkQNCi1FTkQNCi0NCi0jZW5kaWYgICAgLy8gIV9NQUMNCi0NCi0NCi0jaWZkZWYgQVBTVFVESU9fSU5WT0tFRA0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotLy8NCi0vLyBURVhUSU5DTFVERQ0KLS8vDQotDQotMSBURVhUSU5DTFVERSBNT1ZFQUJMRSBQVVJFIA0KLUJFR0lODQotICAgICJyZXNvdXJjZS5oXDAiDQotRU5EDQotDQotMiBURVhUSU5DTFVERSBNT1ZFQUJMRSBQVVJFIA0KLUJFR0lODQotICAgICIjaW5jbHVkZSAiImFmeHJlcy5oIiJcclxuIg0KLSAgICAiXDAiDQotRU5EDQotDQotMyBURVhUSU5DTFVERSBNT1ZFQUJMRSBQVVJFIA0KLUJFR0lODQotICAgICJcclxuIg0KLSAgICAiXDAiDQotRU5EDQotDQotI2VuZGlmICAgIC8vIEFQU1RVRElPX0lOVk9LRUQNCi0NCi0jZW5kaWYgICAgLy8gQ2hpbmVzZSAoUC5SLkMuKSByZXNvdXJjZXMNCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLQ0KLQ0KLQ0KLSNpZm5kZWYgQVBTVFVESU9fSU5WT0tFRA0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotLy8NCi0vLyBHZW5lcmF0ZWQgZnJvbSB0aGUgVEVYVElOQ0xVREUgMyByZXNvdXJjZS4NCi0vLw0KLQ0KLQ0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotI2VuZGlmICAgIC8vIG5vdCBBUFNUVURJT19JTlZPS0VEDQotDQorLy9NaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBnZW5lcmF0ZWQgcmVzb3VyY2Ugc2NyaXB0LgorLy8KKyNpbmNsdWRlICJyZXNvdXJjZS5oIgorCisjZGVmaW5lIEFQU1RVRElPX1JFQURPTkxZX1NZTUJPTFMKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gR2VuZXJhdGVkIGZyb20gdGhlIFRFWFRJTkNMVURFIDIgcmVzb3VyY2UuCisvLworI2luY2x1ZGUgImFmeHJlcy5oIgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI3VuZGVmIEFQU1RVRElPX1JFQURPTkxZX1NZTUJPTFMKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIENoaW5lc2UgKFAuUi5DLikgcmVzb3VyY2VzCisKKyNpZiAhZGVmaW5lZChBRlhfUkVTT1VSQ0VfRExMKSB8fCBkZWZpbmVkKEFGWF9UQVJHX0NIUykKKyNpZmRlZiBfV0lOMzIKK0xBTkdVQUdFIExBTkdfQ0hJTkVTRSwgU1VCTEFOR19DSElORVNFX1NJTVBMSUZJRUQKKyNwcmFnbWEgY29kZV9wYWdlKDkzNikKKyNlbmRpZiAvL19XSU4zMgorCisjaWZuZGVmIF9NQUMKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gVmVyc2lvbgorLy8KKworVlNfVkVSU0lPTl9JTkZPIFZFUlNJT05JTkZPCisgRklMRVZFUlNJT04gMiwwLDAsMTcwNQorIFBST0RVQ1RWRVJTSU9OIDIsMCwwLDE3MDUKKyBGSUxFRkxBR1NNQVNLIDB4M2ZMCisjaWZkZWYgX0RFQlVHCisgRklMRUZMQUdTIDB4MUwKKyNlbHNlCisgRklMRUZMQUdTIDB4MEwKKyNlbmRpZgorIEZJTEVPUyAweDQwMDA0TAorIEZJTEVUWVBFIDB4MkwKKyBGSUxFU1VCVFlQRSAweDBMCitCRUdJTgorICAgIEJMT0NLICJTdHJpbmdGaWxlSW5mbyIKKyAgICBCRUdJTgorICAgICAgICBCTE9DSyAiMDgwOTA0YjAiCisgICAgICAgIEJFR0lOCisgICAgICAgICAgICBWQUxVRSAiQ29tbWVudHMiLCAiRm94aXQgQ29ycG9yYXRpb25cMCIKKyAgICAgICAgICAgIFZBTFVFICJDb21wYW55TmFtZSIsICJGb3hpdCBDb3Jwb3JhdGlvblwwIgorICAgICAgICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJmcGRmc2RrXDAiCisgICAgICAgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLCAiMiwgMCwgMCwgMTcwNVwwIgorICAgICAgICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsICJmcGRmc2RrXDAiCisgICAgICAgICAgICBWQUxVRSAiTGVnYWxDb3B5cmlnaHQiLCAiQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgRm94aXQgQ29ycG9yYXRpb25cMCIKKyAgICAgICAgICAgIFZBTFVFICJMZWdhbFRyYWRlbWFya3MiLCAiXDAiCisgICAgICAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsICJmcGRmc2RrLmRsbFwwIgorICAgICAgICAgICAgVkFMVUUgIlByaXZhdGVCdWlsZCIsICJcMCIKKyAgICAgICAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsICJGb3hpdCBQREYgU0RLIERMTFwwIgorICAgICAgICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwgIjIsIDAsIDAsIDE3MDVcMCIKKyAgICAgICAgICAgIFZBTFVFICJTcGVjaWFsQnVpbGQiLCAiXDAiCisgICAgICAgIEVORAorICAgIEVORAorICAgIEJMT0NLICJWYXJGaWxlSW5mbyIKKyAgICBCRUdJTgorICAgICAgICBWQUxVRSAiVHJhbnNsYXRpb24iLCAweDgwOSwgMTIwMAorICAgIEVORAorRU5ECisKKyNlbmRpZiAgICAvLyAhX01BQworCisKKyNpZmRlZiBBUFNUVURJT19JTlZPS0VECisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIFRFWFRJTkNMVURFCisvLworCisxIFRFWFRJTkNMVURFIE1PVkVBQkxFIFBVUkUgCitCRUdJTgorICAgICJyZXNvdXJjZS5oXDAiCitFTkQKKworMiBURVhUSU5DTFVERSBNT1ZFQUJMRSBQVVJFIAorQkVHSU4KKyAgICAiI2luY2x1ZGUgIiJhZnhyZXMuaCIiXHJcbiIKKyAgICAiXDAiCitFTkQKKworMyBURVhUSU5DTFVERSBNT1ZFQUJMRSBQVVJFIAorQkVHSU4KKyAgICAiXHJcbiIKKyAgICAiXDAiCitFTkQKKworI2VuZGlmICAgIC8vIEFQU1RVRElPX0lOVk9LRUQKKworI2VuZGlmICAgIC8vIENoaW5lc2UgKFAuUi5DLikgcmVzb3VyY2VzCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKKworI2lmbmRlZiBBUFNUVURJT19JTlZPS0VECisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIEdlbmVyYXRlZCBmcm9tIHRoZSBURVhUSU5DTFVERSAzIHJlc291cmNlLgorLy8KKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2VuZGlmICAgIC8vIG5vdCBBUFNUVURJT19JTlZPS0VECisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2ZwZGZ0ZXh0LmNwcCBiL2ZwZGZzZGsvc3JjL2ZwZGZ0ZXh0LmNwcAppbmRleCA2MDQyZmNjLi4xYWEwNTQyIDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9mcGRmdGV4dC5jcHAKKysrIGIvZnBkZnNkay9zcmMvZnBkZnRleHQuY3BwCkBAIC0xLDI3OCArMSwyNzggQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfZGVmaW5lLmgiDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnBkZnRleHQuaCINCi0NCi0jaWZkZWYgX1dJTjMyDQotI2luY2x1ZGUgPHRjaGFyLmg+DQotI2VuZGlmDQotDQotICAgICAgICAvLyBqYWJkZWxtYWxlazogY29tbWVudGVkIG91dCB0byBidWlsZCBvbiBMaW51eC4gIE5vdCB1c2VkLg0KLQkvLyBleHRlcm4gSEFORExFIGdfaE1vZHVsZTsNCi0NCi1ETExFWFBPUlQgRlBERl9URVhUUEFHRSBTVERDQUxMIEZQREZUZXh0X0xvYWRQYWdlKEZQREZfUEFHRSBwYWdlKQ0KLXsNCi0JaWYgKCFwYWdlKSByZXR1cm4gTlVMTDsNCi0JSVBERl9UZXh0UGFnZSogdGV4dHBhZ2U9TlVMTDsNCi0JdHJ5DQotCXsNCi0JCUNQREZfVmlld2VyUHJlZmVyZW5jZXMgdmlld1JlZigoKENQREZfUGFnZSopcGFnZSktPm1fcERvY3VtZW50KTsNCi0JCXRleHRwYWdlPUlQREZfVGV4dFBhZ2U6OkNyZWF0ZVRleHRQYWdlKChDUERGX1BhZ2UqKXBhZ2Usdmlld1JlZi5Jc0RpcmVjdGlvblIyTCgpKTsNCi0JCXRleHRwYWdlLT5QYXJzZVRleHRQYWdlKCk7DQotCX0NCi0JY2F0Y2ggKC4uLikNCi0Jew0KLQkJaWYgKHRleHRwYWdlKQ0KLQkJCWRlbGV0ZSB0ZXh0cGFnZTsNCi0JCXJldHVybiBOVUxMOw0KLQl9DQotCXJldHVybiB0ZXh0cGFnZTsNCi19DQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGVGV4dF9DbG9zZVBhZ2UoRlBERl9URVhUUEFHRSB0ZXh0X3BhZ2UpDQotew0KLQlpZiAodGV4dF9wYWdlKXsNCi0JCUlQREZfVGV4dFBhZ2UqIHRleHRwYWdlPShJUERGX1RleHRQYWdlKil0ZXh0X3BhZ2U7DQotCQlkZWxldGUgdGV4dHBhZ2U7DQotCQl0ZXh0X3BhZ2U9TlVMTDsNCi0JfQ0KLX0NCi1ETExFWFBPUlQgaW50IFNURENBTEwgRlBERlRleHRfQ291bnRDaGFycyhGUERGX1RFWFRQQUdFIHRleHRfcGFnZSkNCi17DQotCWlmICghdGV4dF9wYWdlKSByZXR1cm4JLTE7DQotCUlQREZfVGV4dFBhZ2UqIHRleHRwYWdlPShJUERGX1RleHRQYWdlKil0ZXh0X3BhZ2U7DQotCXJldHVybiAgdGV4dHBhZ2UtPkNvdW50Q2hhcnMoKTsNCi19DQotRExMRVhQT1JUIHVuc2lnbmVkIGludCBTVERDQUxMIEZQREZUZXh0X0dldFVuaWNvZGUoRlBERl9URVhUUEFHRSB0ZXh0X3BhZ2UsIGludCBpbmRleCkNCi17DQotCWlmICghdGV4dF9wYWdlKSByZXR1cm4gLTE7DQotCUlQREZfVGV4dFBhZ2UqIHRleHRwYWdlPShJUERGX1RleHRQYWdlKil0ZXh0X3BhZ2U7DQotDQotCWlmIChpbmRleDwwIHx8IGluZGV4Pj10ZXh0cGFnZS0+Q291bnRDaGFycygpKSByZXR1cm4gMDsNCi0NCi0JRlBERl9DSEFSX0lORk8JY2hhcmluZm87DQotCXRleHRwYWdlLT5HZXRDaGFySW5mbyhpbmRleCxjaGFyaW5mbyk7DQotCXJldHVybiBjaGFyaW5mby5tX1VuaWNvZGU7DQotfQ0KLURMTEVYUE9SVCBkb3VibGUgU1REQ0FMTCBGUERGVGV4dF9HZXRGb250U2l6ZShGUERGX1RFWFRQQUdFIHRleHRfcGFnZSwgaW50IGluZGV4KQ0KLXsNCi0JaWYgKCF0ZXh0X3BhZ2UpIHJldHVybiAwOw0KLQlJUERGX1RleHRQYWdlKiB0ZXh0cGFnZT0oSVBERl9UZXh0UGFnZSopdGV4dF9wYWdlOw0KLQ0KLQlpZiAoaW5kZXg8MCB8fCBpbmRleD49dGV4dHBhZ2UtPkNvdW50Q2hhcnMoKSkgcmV0dXJuIDA7DQotDQotCUZQREZfQ0hBUl9JTkZPCWNoYXJpbmZvOw0KLQl0ZXh0cGFnZS0+R2V0Q2hhckluZm8oaW5kZXgsY2hhcmluZm8pOw0KLQlyZXR1cm4gY2hhcmluZm8ubV9Gb250U2l6ZTsNCi19DQotDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGVGV4dF9HZXRDaGFyQm94KEZQREZfVEVYVFBBR0UgdGV4dF9wYWdlLCBpbnQgaW5kZXgsZG91YmxlKiBsZWZ0LA0KLQkJCQkJCQkJCQkJCQlkb3VibGUqIHJpZ2h0LCBkb3VibGUqIGJvdHRvbSwgZG91YmxlKiB0b3ApDQotew0KLQlpZiAoIXRleHRfcGFnZSkgcmV0dXJuOw0KLQlJUERGX1RleHRQYWdlKiB0ZXh0cGFnZT0oSVBERl9UZXh0UGFnZSopdGV4dF9wYWdlOw0KLQkNCi0JaWYgKGluZGV4PDAgfHwgaW5kZXg+PXRleHRwYWdlLT5Db3VudENoYXJzKCkpIHJldHVybiA7DQotCUZQREZfQ0hBUl9JTkZPCWNoYXJpbmZvOw0KLQl0ZXh0cGFnZS0+R2V0Q2hhckluZm8oaW5kZXgsY2hhcmluZm8pOw0KLQkqbGVmdD1jaGFyaW5mby5tX0NoYXJCb3gubGVmdDsNCi0JKnJpZ2h0PWNoYXJpbmZvLm1fQ2hhckJveC5yaWdodDsNCi0JKmJvdHRvbT1jaGFyaW5mby5tX0NoYXJCb3guYm90dG9tOw0KLQkqdG9wPWNoYXJpbmZvLm1fQ2hhckJveC50b3A7DQotfQ0KLQ0KLS8vc2VsZWN0DQotRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZUZXh0X0dldENoYXJJbmRleEF0UG9zKEZQREZfVEVYVFBBR0UgdGV4dF9wYWdlLGRvdWJsZSB4LGRvdWJsZSB5LGRvdWJsZSB4VG9yZWxhbmNlLGRvdWJsZSB5VG9yZWxhbmNlKQ0KLXsNCi0JaWYgKCF0ZXh0X3BhZ2UpIHJldHVybiAtMzsNCi0JSVBERl9UZXh0UGFnZSogdGV4dHBhZ2U9KElQREZfVGV4dFBhZ2UqKXRleHRfcGFnZTsNCi0JcmV0dXJuIHRleHRwYWdlLT5HZXRJbmRleEF0UG9zKChGWF9GTE9BVCl4LChGWF9GTE9BVCl5LChGWF9GTE9BVCl4VG9yZWxhbmNlLChGWF9GTE9BVCl5VG9yZWxhbmNlKTsNCi19DQotDQotRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZUZXh0X0dldFRleHQoRlBERl9URVhUUEFHRSB0ZXh0X3BhZ2UsaW50IHN0YXJ0LGludCBjb3VudCx1bnNpZ25lZCBzaG9ydCogcmVzdWx0KQ0KLXsNCi0JaWYgKCF0ZXh0X3BhZ2UpIHJldHVybiAwOw0KLQlJUERGX1RleHRQYWdlKiB0ZXh0cGFnZT0oSVBERl9UZXh0UGFnZSopdGV4dF9wYWdlOw0KLQkNCi0JaWYgKHN0YXJ0Pj10ZXh0cGFnZS0+Q291bnRDaGFycygpKSByZXR1cm4gMDsNCi0NCi0JQ0ZYX1dpZGVTdHJpbmcgc3RyPXRleHRwYWdlLT5HZXRQYWdlVGV4dChzdGFydCxjb3VudCk7DQotCWlmKHN0ci5HZXRMZW5ndGgoKT5jb3VudCkNCi0JCXN0ciA9IHN0ci5MZWZ0KGNvdW50KTsNCi0NCi0JQ0ZYX0J5dGVTdHJpbmcgY2JVVEYxNnN0ciA9IHN0ci5VVEYxNkxFX0VuY29kZSgpOw0KLQlGWFNZU19tZW1jcHkocmVzdWx0LGNiVVRGMTZzdHIuR2V0QnVmZmVyKGNiVVRGMTZzdHIuR2V0TGVuZ3RoKCkpLGNiVVRGMTZzdHIuR2V0TGVuZ3RoKCkpOw0KLQljYlVURjE2c3RyLlJlbGVhc2VCdWZmZXIoY2JVVEYxNnN0ci5HZXRMZW5ndGgoKSk7DQotDQotCXJldHVybiBjYlVURjE2c3RyLkdldExlbmd0aCgpL3NpemVvZih1bnNpZ25lZCBzaG9ydCk7DQotfQ0KLQ0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGVGV4dF9Db3VudFJlY3RzKEZQREZfVEVYVFBBR0UgdGV4dF9wYWdlLGludCBzdGFydCxpbnQgY291bnQpDQotew0KLQlpZiAoIXRleHRfcGFnZSkgcmV0dXJuIDA7DQotCUlQREZfVGV4dFBhZ2UqIHRleHRwYWdlPShJUERGX1RleHRQYWdlKil0ZXh0X3BhZ2U7DQotCXJldHVybgl0ZXh0cGFnZS0+Q291bnRSZWN0cyhzdGFydCxjb3VudCk7DQotDQotfQ0KLURMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERlRleHRfR2V0UmVjdChGUERGX1RFWFRQQUdFIHRleHRfcGFnZSxpbnQgcmVjdF9pbmRleCwgZG91YmxlKiBsZWZ0LGRvdWJsZSogIHRvcCwNCi0JCQkJCQkJCQkJZG91YmxlKiAgcmlnaHQsIGRvdWJsZSogIGJvdHRvbSkNCi17DQotCWlmICghdGV4dF9wYWdlKSByZXR1cm47DQotCUlQREZfVGV4dFBhZ2UqIHRleHRwYWdlPShJUERGX1RleHRQYWdlKil0ZXh0X3BhZ2U7DQotCUNGWF9GbG9hdFJlY3QJcmVjdDsNCi0JdGV4dHBhZ2UtPkdldFJlY3QocmVjdF9pbmRleCxyZWN0LmxlZnQscmVjdC50b3AscmVjdC5yaWdodCxyZWN0LmJvdHRvbSk7DQotCSpsZWZ0PXJlY3QubGVmdDsNCi0JKnRvcD1yZWN0LnRvcDsNCi0JKnJpZ2h0PXJlY3QucmlnaHQ7DQotCSpib3R0b209cmVjdC5ib3R0b207DQotfQ0KLQ0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGVGV4dF9HZXRCb3VuZGVkVGV4dChGUERGX1RFWFRQQUdFIHRleHRfcGFnZSxkb3VibGUgbGVmdCwgZG91YmxlIHRvcCwgDQotCQkJCQkJCQkJCQkgIGRvdWJsZSByaWdodCwgZG91YmxlIGJvdHRvbSx1bnNpZ25lZCBzaG9ydCogYnVmZmVyLGludCBidWZsZW4pDQotew0KLQlpZiAoIXRleHRfcGFnZSkgcmV0dXJuIDA7DQotCUlQREZfVGV4dFBhZ2UqIHRleHRwYWdlPShJUERGX1RleHRQYWdlKil0ZXh0X3BhZ2U7DQotCUNGWF9GbG9hdFJlY3QgcmVjdCgoRlhfRkxPQVQpbGVmdCwoRlhfRkxPQVQpYm90dG9tLChGWF9GTE9BVClyaWdodCwoRlhfRkxPQVQpdG9wKTsNCi0JQ0ZYX1dpZGVTdHJpbmcgc3RyPXRleHRwYWdlLT5HZXRUZXh0QnlSZWN0KHJlY3QpOw0KLQ0KLQlpZiAoYnVmbGVuPD0wIHx8IGJ1ZmZlcj09TlVMTCkNCi0Jew0KLQkJcmV0dXJuIHN0ci5HZXRMZW5ndGgoKTsNCi0JfQ0KLQ0KLQlDRlhfQnl0ZVN0cmluZyBjYlVURjE2U3RyID0gc3RyLlVURjE2TEVfRW5jb2RlKCk7DQotCWludCBsZW4gPSBjYlVURjE2U3RyLkdldExlbmd0aCgpL3NpemVvZih1bnNpZ25lZCBzaG9ydCk7DQotCWludCBzaXplID0gYnVmbGVuID4gbGVuID8gbGVuIDogYnVmbGVuOw0KLQlGWFNZU19tZW1jcHkoYnVmZmVyLGNiVVRGMTZTdHIuR2V0QnVmZmVyKHNpemUqc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSksc2l6ZSpzaXplb2YodW5zaWduZWQgc2hvcnQpKTsNCi0JY2JVVEYxNlN0ci5SZWxlYXNlQnVmZmVyKHNpemUqc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7DQotDQotCXJldHVybiBzaXplOw0KLQkJDQotfQ0KLQ0KLS8vU2VhcmNoDQotLy8tMSBmb3IgZW5kDQotRExMRVhQT1JUIEZQREZfU0NISEFORExFIFNURENBTEwgRlBERlRleHRfRmluZFN0YXJ0KEZQREZfVEVYVFBBR0UgdGV4dF9wYWdlLEZQREZfV0lERVNUUklORyBmaW5kd2hhdCx1bnNpZ25lZCBsb25nIGZsYWdzLGludCBzdGFydF9pbmRleCkNCi17DQotCWlmICghdGV4dF9wYWdlKSByZXR1cm4gTlVMTDsNCi0JSVBERl9UZXh0UGFnZUZpbmQqIHRleHRwYWdlRmluZD1OVUxMOw0KLQl0cnkNCi0Jew0KLQkJdGV4dHBhZ2VGaW5kPUlQREZfVGV4dFBhZ2VGaW5kOjpDcmVhdGVQYWdlRmluZCgoSVBERl9UZXh0UGFnZSopdGV4dF9wYWdlKTsNCi0JCXRleHRwYWdlRmluZC0+RmluZEZpcnN0KENGWF9XaWRlU3RyaW5nOjpGcm9tVVRGMTZMRShmaW5kd2hhdCksZmxhZ3Msc3RhcnRfaW5kZXgpOw0KLQl9DQotCWNhdGNoICguLi4pDQotCXsNCi0JCWlmICh0ZXh0cGFnZUZpbmQpDQotCQkJZGVsZXRlIHRleHRwYWdlRmluZDsNCi0JCXJldHVybiBOVUxMOwkJDQotCX0NCi0JcmV0dXJuIHRleHRwYWdlRmluZDsNCi19DQotRExMRVhQT1JUIEZQREZfQk9PTAlTVERDQUxMIEZQREZUZXh0X0ZpbmROZXh0KEZQREZfU0NISEFORExFIGhhbmRsZSkNCi17DQotCWlmICghaGFuZGxlKSByZXR1cm4gRkFMU0U7DQotCUlQREZfVGV4dFBhZ2VGaW5kKiB0ZXh0cGFnZUZpbmQ9KElQREZfVGV4dFBhZ2VGaW5kKiloYW5kbGU7DQotCXJldHVybgl0ZXh0cGFnZUZpbmQtPkZpbmROZXh0KCk7DQotfQ0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGVGV4dF9GaW5kUHJldihGUERGX1NDSEhBTkRMRSBoYW5kbGUpDQotew0KLQlpZiAoIWhhbmRsZSkgcmV0dXJuIEZBTFNFOw0KLQlJUERGX1RleHRQYWdlRmluZCogdGV4dHBhZ2VGaW5kPShJUERGX1RleHRQYWdlRmluZCopaGFuZGxlOw0KLQlyZXR1cm4JdGV4dHBhZ2VGaW5kLT5GaW5kUHJldigpOw0KLX0NCi1ETExFWFBPUlQgaW50IFNURENBTEwgRlBERlRleHRfR2V0U2NoUmVzdWx0SW5kZXgoRlBERl9TQ0hIQU5ETEUgaGFuZGxlKQ0KLXsNCi0JaWYgKCFoYW5kbGUpIHJldHVybiAwOw0KLQlJUERGX1RleHRQYWdlRmluZCogdGV4dHBhZ2VGaW5kPShJUERGX1RleHRQYWdlRmluZCopaGFuZGxlOw0KLQlyZXR1cm4gdGV4dHBhZ2VGaW5kLT5HZXRDdXJPcmRlcigpOw0KLX0NCi1ETExFWFBPUlQgaW50IFNURENBTEwgRlBERlRleHRfR2V0U2NoQ291bnQoRlBERl9TQ0hIQU5ETEUgaGFuZGxlKQ0KLXsNCi0JaWYgKCFoYW5kbGUpIHJldHVybiAwOw0KLQlJUERGX1RleHRQYWdlRmluZCogdGV4dHBhZ2VGaW5kPShJUERGX1RleHRQYWdlRmluZCopaGFuZGxlOw0KLQlyZXR1cm4gdGV4dHBhZ2VGaW5kLT5HZXRNYXRjaGVkQ291bnQoKTsNCi19DQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGVGV4dF9GaW5kQ2xvc2UoRlBERl9TQ0hIQU5ETEUgaGFuZGxlKQ0KLXsNCi0JaWYgKCFoYW5kbGUpIHJldHVybjsNCi0JSVBERl9UZXh0UGFnZUZpbmQqIHRleHRwYWdlRmluZD0oSVBERl9UZXh0UGFnZUZpbmQqKWhhbmRsZTsNCi0JZGVsZXRlCXRleHRwYWdlRmluZDsNCi0JaGFuZGxlPU5VTEw7DQotfQ0KLQ0KLS8vd2ViIGxpbmsNCi1ETExFWFBPUlQgRlBERl9QQUdFTElOSyBTVERDQUxMIEZQREZMaW5rX0xvYWRXZWJMaW5rcyhGUERGX1RFWFRQQUdFIHRleHRfcGFnZSkNCi17DQotCWlmICghdGV4dF9wYWdlKSByZXR1cm4gTlVMTDsNCi0JSVBERl9MaW5rRXh0cmFjdCogcGFnZUxpbms9TlVMTDsNCi0JdHJ5DQotCXsNCi0JCXBhZ2VMaW5rPUlQREZfTGlua0V4dHJhY3Q6OkNyZWF0ZUxpbmtFeHRyYWN0KCk7DQotCQlwYWdlTGluay0+RXh0cmFjdExpbmtzKChJUERGX1RleHRQYWdlKil0ZXh0X3BhZ2UpOw0KLQl9DQotCWNhdGNoICguLi4pDQotCXsNCi0JCWlmIChwYWdlTGluaykNCi0JCQlkZWxldGUgcGFnZUxpbms7DQotCQlyZXR1cm4gTlVMTDsNCi0JfQ0KLQlyZXR1cm4gcGFnZUxpbms7DQotfQ0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGTGlua19Db3VudFdlYkxpbmtzKEZQREZfUEFHRUxJTksgbGlua19wYWdlKQ0KLXsNCi0JaWYgKCFsaW5rX3BhZ2UpIHJldHVybiAwOw0KLQlJUERGX0xpbmtFeHRyYWN0KiBwYWdlTGluaz0oSVBERl9MaW5rRXh0cmFjdCopbGlua19wYWdlOw0KLQlyZXR1cm4JcGFnZUxpbmstPkNvdW50TGlua3MoKTsNCi19DQotRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZMaW5rX0dldFVSTChGUERGX1BBR0VMSU5LIGxpbmtfcGFnZSxpbnQgbGlua19pbmRleCwgdW5zaWduZWQgc2hvcnQqIGJ1ZmZlcixpbnQgYnVmbGVuKQ0KLXsNCi0JaWYgKCFsaW5rX3BhZ2UpIHJldHVybiAwOw0KLQlJUERGX0xpbmtFeHRyYWN0KiBwYWdlTGluaz0oSVBERl9MaW5rRXh0cmFjdCopbGlua19wYWdlOw0KLQlDRlhfV2lkZVN0cmluZyB1cmw9cGFnZUxpbmstPkdldFVSTChsaW5rX2luZGV4KTsNCi0NCi0JQ0ZYX0J5dGVTdHJpbmcgY2JVVEYxNlVSTCA9IHVybC5VVEYxNkxFX0VuY29kZSgpOw0KLQlpbnQgbGVuPSBjYlVURjE2VVJMLkdldExlbmd0aCgpL3NpemVvZih1bnNpZ25lZCBzaG9ydCk7DQotCWlmIChidWZmZXI9PU5VTEwgfHwgYnVmbGVuPD0wKQ0KLQkJcmV0dXJuIGxlbjsNCi0JaW50IHNpemU9bGVuPGJ1ZmxlbiA/IGxlbiA6YnVmbGVuOw0KLQlpZiAoc2l6ZT4wKQ0KLQl7DQotCQlGWFNZU19tZW1jcHkoYnVmZmVyLGNiVVRGMTZVUkwuR2V0QnVmZmVyKHNpemUqc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSksc2l6ZSpzaXplb2YodW5zaWduZWQgc2hvcnQpKTsNCi0JCWNiVVRGMTZVUkwuUmVsZWFzZUJ1ZmZlcihzaXplKnNpemVvZih1bnNpZ25lZCBzaG9ydCkpOw0KLQl9DQotCXJldHVybiBzaXplOw0KLX0NCi1ETExFWFBPUlQgaW50IFNURENBTEwgRlBERkxpbmtfQ291bnRSZWN0cyhGUERGX1BBR0VMSU5LIGxpbmtfcGFnZSxpbnQgbGlua19pbmRleCkNCi17DQotCWlmICghbGlua19wYWdlKSByZXR1cm4gMDsNCi0JSVBERl9MaW5rRXh0cmFjdCogcGFnZUxpbms9KElQREZfTGlua0V4dHJhY3QqKWxpbmtfcGFnZTsNCi0JQ0ZYX1JlY3RBcnJheSByZWN0QXJyYXk7DQotCXBhZ2VMaW5rLT5HZXRSZWN0cyhsaW5rX2luZGV4LHJlY3RBcnJheSk7DQotCXJldHVybiByZWN0QXJyYXkuR2V0U2l6ZSgpOw0KLX0NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZMaW5rX0dldFJlY3QoRlBERl9QQUdFTElOSyBsaW5rX3BhZ2UsaW50IGxpbmtfaW5kZXgsICBpbnQgcmVjdF9pbmRleCwgZG91YmxlKiBsZWZ0LA0KLQkJCQkJCQkJCQlkb3VibGUqICB0b3AsZG91YmxlKiAgcmlnaHQsIGRvdWJsZSogIGJvdHRvbSkNCi17DQotCWlmICghbGlua19wYWdlKSByZXR1cm47DQotCUlQREZfTGlua0V4dHJhY3QqIHBhZ2VMaW5rPShJUERGX0xpbmtFeHRyYWN0KilsaW5rX3BhZ2U7DQotCUNGWF9SZWN0QXJyYXkgcmVjdEFycmF5Ow0KLQlwYWdlTGluay0+R2V0UmVjdHMobGlua19pbmRleCxyZWN0QXJyYXkpOw0KLQlDRlhfRmxvYXRSZWN0IHJlY3Q7DQotCXJlY3Q9cmVjdEFycmF5LkdldEF0KHJlY3RfaW5kZXgpOw0KLQkqbGVmdD1yZWN0LmxlZnQ7DQotCSpyaWdodD1yZWN0LnJpZ2h0Ow0KLQkqdG9wPXJlY3QudG9wOw0KLQkqYm90dG9tPXJlY3QuYm90dG9tOw0KLX0NCi1ETExFWFBPUlQgdm9pZAlTVERDQUxMCUZQREZMaW5rX0Nsb3NlV2ViTGlua3MoRlBERl9QQUdFTElOSyBsaW5rX3BhZ2UpDQotew0KLQlpZiAoIWxpbmtfcGFnZSkgcmV0dXJuOw0KLQlJUERGX0xpbmtFeHRyYWN0KiBwYWdlTGluaz0oSVBERl9MaW5rRXh0cmFjdCopbGlua19wYWdlOw0KLQlkZWxldGUgcGFnZUxpbms7DQotCXBhZ2VMaW5rID1OVUxMOw0KLX0NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX2RlZmluZS5oIgorI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnBkZnRleHQuaCIKKworI2lmZGVmIF9XSU4zMgorI2luY2x1ZGUgPHRjaGFyLmg+CisjZW5kaWYKKworICAgICAgICAvLyBqYWJkZWxtYWxlazogY29tbWVudGVkIG91dCB0byBidWlsZCBvbiBMaW51eC4gIE5vdCB1c2VkLgorCS8vIGV4dGVybiBIQU5ETEUgZ19oTW9kdWxlOworCitETExFWFBPUlQgRlBERl9URVhUUEFHRSBTVERDQUxMIEZQREZUZXh0X0xvYWRQYWdlKEZQREZfUEFHRSBwYWdlKQoreworCWlmICghcGFnZSkgcmV0dXJuIE5VTEw7CisJSVBERl9UZXh0UGFnZSogdGV4dHBhZ2U9TlVMTDsKKwl0cnkKKwl7CisJCUNQREZfVmlld2VyUHJlZmVyZW5jZXMgdmlld1JlZigoKENQREZfUGFnZSopcGFnZSktPm1fcERvY3VtZW50KTsKKwkJdGV4dHBhZ2U9SVBERl9UZXh0UGFnZTo6Q3JlYXRlVGV4dFBhZ2UoKENQREZfUGFnZSopcGFnZSx2aWV3UmVmLklzRGlyZWN0aW9uUjJMKCkpOworCQl0ZXh0cGFnZS0+UGFyc2VUZXh0UGFnZSgpOworCX0KKwljYXRjaCAoLi4uKQorCXsKKwkJaWYgKHRleHRwYWdlKQorCQkJZGVsZXRlIHRleHRwYWdlOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIHRleHRwYWdlOworfQorRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGVGV4dF9DbG9zZVBhZ2UoRlBERl9URVhUUEFHRSB0ZXh0X3BhZ2UpCit7CisJaWYgKHRleHRfcGFnZSl7CisJCUlQREZfVGV4dFBhZ2UqIHRleHRwYWdlPShJUERGX1RleHRQYWdlKil0ZXh0X3BhZ2U7CisJCWRlbGV0ZSB0ZXh0cGFnZTsKKwkJdGV4dF9wYWdlPU5VTEw7CisJfQorfQorRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZUZXh0X0NvdW50Q2hhcnMoRlBERl9URVhUUEFHRSB0ZXh0X3BhZ2UpCit7CisJaWYgKCF0ZXh0X3BhZ2UpIHJldHVybgktMTsKKwlJUERGX1RleHRQYWdlKiB0ZXh0cGFnZT0oSVBERl9UZXh0UGFnZSopdGV4dF9wYWdlOworCXJldHVybiAgdGV4dHBhZ2UtPkNvdW50Q2hhcnMoKTsKK30KK0RMTEVYUE9SVCB1bnNpZ25lZCBpbnQgU1REQ0FMTCBGUERGVGV4dF9HZXRVbmljb2RlKEZQREZfVEVYVFBBR0UgdGV4dF9wYWdlLCBpbnQgaW5kZXgpCit7CisJaWYgKCF0ZXh0X3BhZ2UpIHJldHVybiAtMTsKKwlJUERGX1RleHRQYWdlKiB0ZXh0cGFnZT0oSVBERl9UZXh0UGFnZSopdGV4dF9wYWdlOworCisJaWYgKGluZGV4PDAgfHwgaW5kZXg+PXRleHRwYWdlLT5Db3VudENoYXJzKCkpIHJldHVybiAwOworCisJRlBERl9DSEFSX0lORk8JY2hhcmluZm87CisJdGV4dHBhZ2UtPkdldENoYXJJbmZvKGluZGV4LGNoYXJpbmZvKTsKKwlyZXR1cm4gY2hhcmluZm8ubV9Vbmljb2RlOworfQorRExMRVhQT1JUIGRvdWJsZSBTVERDQUxMIEZQREZUZXh0X0dldEZvbnRTaXplKEZQREZfVEVYVFBBR0UgdGV4dF9wYWdlLCBpbnQgaW5kZXgpCit7CisJaWYgKCF0ZXh0X3BhZ2UpIHJldHVybiAwOworCUlQREZfVGV4dFBhZ2UqIHRleHRwYWdlPShJUERGX1RleHRQYWdlKil0ZXh0X3BhZ2U7CisKKwlpZiAoaW5kZXg8MCB8fCBpbmRleD49dGV4dHBhZ2UtPkNvdW50Q2hhcnMoKSkgcmV0dXJuIDA7CisKKwlGUERGX0NIQVJfSU5GTwljaGFyaW5mbzsKKwl0ZXh0cGFnZS0+R2V0Q2hhckluZm8oaW5kZXgsY2hhcmluZm8pOworCXJldHVybiBjaGFyaW5mby5tX0ZvbnRTaXplOworfQorCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZUZXh0X0dldENoYXJCb3goRlBERl9URVhUUEFHRSB0ZXh0X3BhZ2UsIGludCBpbmRleCxkb3VibGUqIGxlZnQsCisJCQkJCQkJCQkJCQkJZG91YmxlKiByaWdodCwgZG91YmxlKiBib3R0b20sIGRvdWJsZSogdG9wKQoreworCWlmICghdGV4dF9wYWdlKSByZXR1cm47CisJSVBERl9UZXh0UGFnZSogdGV4dHBhZ2U9KElQREZfVGV4dFBhZ2UqKXRleHRfcGFnZTsKKwkKKwlpZiAoaW5kZXg8MCB8fCBpbmRleD49dGV4dHBhZ2UtPkNvdW50Q2hhcnMoKSkgcmV0dXJuIDsKKwlGUERGX0NIQVJfSU5GTwljaGFyaW5mbzsKKwl0ZXh0cGFnZS0+R2V0Q2hhckluZm8oaW5kZXgsY2hhcmluZm8pOworCSpsZWZ0PWNoYXJpbmZvLm1fQ2hhckJveC5sZWZ0OworCSpyaWdodD1jaGFyaW5mby5tX0NoYXJCb3gucmlnaHQ7CisJKmJvdHRvbT1jaGFyaW5mby5tX0NoYXJCb3guYm90dG9tOworCSp0b3A9Y2hhcmluZm8ubV9DaGFyQm94LnRvcDsKK30KKworLy9zZWxlY3QKK0RMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGVGV4dF9HZXRDaGFySW5kZXhBdFBvcyhGUERGX1RFWFRQQUdFIHRleHRfcGFnZSxkb3VibGUgeCxkb3VibGUgeSxkb3VibGUgeFRvcmVsYW5jZSxkb3VibGUgeVRvcmVsYW5jZSkKK3sKKwlpZiAoIXRleHRfcGFnZSkgcmV0dXJuIC0zOworCUlQREZfVGV4dFBhZ2UqIHRleHRwYWdlPShJUERGX1RleHRQYWdlKil0ZXh0X3BhZ2U7CisJcmV0dXJuIHRleHRwYWdlLT5HZXRJbmRleEF0UG9zKChGWF9GTE9BVCl4LChGWF9GTE9BVCl5LChGWF9GTE9BVCl4VG9yZWxhbmNlLChGWF9GTE9BVCl5VG9yZWxhbmNlKTsKK30KKworRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZUZXh0X0dldFRleHQoRlBERl9URVhUUEFHRSB0ZXh0X3BhZ2UsaW50IHN0YXJ0LGludCBjb3VudCx1bnNpZ25lZCBzaG9ydCogcmVzdWx0KQoreworCWlmICghdGV4dF9wYWdlKSByZXR1cm4gMDsKKwlJUERGX1RleHRQYWdlKiB0ZXh0cGFnZT0oSVBERl9UZXh0UGFnZSopdGV4dF9wYWdlOworCQorCWlmIChzdGFydD49dGV4dHBhZ2UtPkNvdW50Q2hhcnMoKSkgcmV0dXJuIDA7CisKKwlDRlhfV2lkZVN0cmluZyBzdHI9dGV4dHBhZ2UtPkdldFBhZ2VUZXh0KHN0YXJ0LGNvdW50KTsKKwlpZihzdHIuR2V0TGVuZ3RoKCk+Y291bnQpCisJCXN0ciA9IHN0ci5MZWZ0KGNvdW50KTsKKworCUNGWF9CeXRlU3RyaW5nIGNiVVRGMTZzdHIgPSBzdHIuVVRGMTZMRV9FbmNvZGUoKTsKKwlGWFNZU19tZW1jcHkocmVzdWx0LGNiVVRGMTZzdHIuR2V0QnVmZmVyKGNiVVRGMTZzdHIuR2V0TGVuZ3RoKCkpLGNiVVRGMTZzdHIuR2V0TGVuZ3RoKCkpOworCWNiVVRGMTZzdHIuUmVsZWFzZUJ1ZmZlcihjYlVURjE2c3RyLkdldExlbmd0aCgpKTsKKworCXJldHVybiBjYlVURjE2c3RyLkdldExlbmd0aCgpL3NpemVvZih1bnNpZ25lZCBzaG9ydCk7Cit9CisKK0RMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGVGV4dF9Db3VudFJlY3RzKEZQREZfVEVYVFBBR0UgdGV4dF9wYWdlLGludCBzdGFydCxpbnQgY291bnQpCit7CisJaWYgKCF0ZXh0X3BhZ2UpIHJldHVybiAwOworCUlQREZfVGV4dFBhZ2UqIHRleHRwYWdlPShJUERGX1RleHRQYWdlKil0ZXh0X3BhZ2U7CisJcmV0dXJuCXRleHRwYWdlLT5Db3VudFJlY3RzKHN0YXJ0LGNvdW50KTsKKworfQorRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGVGV4dF9HZXRSZWN0KEZQREZfVEVYVFBBR0UgdGV4dF9wYWdlLGludCByZWN0X2luZGV4LCBkb3VibGUqIGxlZnQsZG91YmxlKiAgdG9wLAorCQkJCQkJCQkJCWRvdWJsZSogIHJpZ2h0LCBkb3VibGUqICBib3R0b20pCit7CisJaWYgKCF0ZXh0X3BhZ2UpIHJldHVybjsKKwlJUERGX1RleHRQYWdlKiB0ZXh0cGFnZT0oSVBERl9UZXh0UGFnZSopdGV4dF9wYWdlOworCUNGWF9GbG9hdFJlY3QJcmVjdDsKKwl0ZXh0cGFnZS0+R2V0UmVjdChyZWN0X2luZGV4LHJlY3QubGVmdCxyZWN0LnRvcCxyZWN0LnJpZ2h0LHJlY3QuYm90dG9tKTsKKwkqbGVmdD1yZWN0LmxlZnQ7CisJKnRvcD1yZWN0LnRvcDsKKwkqcmlnaHQ9cmVjdC5yaWdodDsKKwkqYm90dG9tPXJlY3QuYm90dG9tOworfQorCitETExFWFBPUlQgaW50IFNURENBTEwgRlBERlRleHRfR2V0Qm91bmRlZFRleHQoRlBERl9URVhUUEFHRSB0ZXh0X3BhZ2UsZG91YmxlIGxlZnQsIGRvdWJsZSB0b3AsIAorCQkJCQkJCQkJCQkgIGRvdWJsZSByaWdodCwgZG91YmxlIGJvdHRvbSx1bnNpZ25lZCBzaG9ydCogYnVmZmVyLGludCBidWZsZW4pCit7CisJaWYgKCF0ZXh0X3BhZ2UpIHJldHVybiAwOworCUlQREZfVGV4dFBhZ2UqIHRleHRwYWdlPShJUERGX1RleHRQYWdlKil0ZXh0X3BhZ2U7CisJQ0ZYX0Zsb2F0UmVjdCByZWN0KChGWF9GTE9BVClsZWZ0LChGWF9GTE9BVClib3R0b20sKEZYX0ZMT0FUKXJpZ2h0LChGWF9GTE9BVCl0b3ApOworCUNGWF9XaWRlU3RyaW5nIHN0cj10ZXh0cGFnZS0+R2V0VGV4dEJ5UmVjdChyZWN0KTsKKworCWlmIChidWZsZW48PTAgfHwgYnVmZmVyPT1OVUxMKQorCXsKKwkJcmV0dXJuIHN0ci5HZXRMZW5ndGgoKTsKKwl9CisKKwlDRlhfQnl0ZVN0cmluZyBjYlVURjE2U3RyID0gc3RyLlVURjE2TEVfRW5jb2RlKCk7CisJaW50IGxlbiA9IGNiVVRGMTZTdHIuR2V0TGVuZ3RoKCkvc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKKwlpbnQgc2l6ZSA9IGJ1ZmxlbiA+IGxlbiA/IGxlbiA6IGJ1ZmxlbjsKKwlGWFNZU19tZW1jcHkoYnVmZmVyLGNiVVRGMTZTdHIuR2V0QnVmZmVyKHNpemUqc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSksc2l6ZSpzaXplb2YodW5zaWduZWQgc2hvcnQpKTsKKwljYlVURjE2U3RyLlJlbGVhc2VCdWZmZXIoc2l6ZSpzaXplb2YodW5zaWduZWQgc2hvcnQpKTsKKworCXJldHVybiBzaXplOworCQkKK30KKworLy9TZWFyY2gKKy8vLTEgZm9yIGVuZAorRExMRVhQT1JUIEZQREZfU0NISEFORExFIFNURENBTEwgRlBERlRleHRfRmluZFN0YXJ0KEZQREZfVEVYVFBBR0UgdGV4dF9wYWdlLEZQREZfV0lERVNUUklORyBmaW5kd2hhdCx1bnNpZ25lZCBsb25nIGZsYWdzLGludCBzdGFydF9pbmRleCkKK3sKKwlpZiAoIXRleHRfcGFnZSkgcmV0dXJuIE5VTEw7CisJSVBERl9UZXh0UGFnZUZpbmQqIHRleHRwYWdlRmluZD1OVUxMOworCXRyeQorCXsKKwkJdGV4dHBhZ2VGaW5kPUlQREZfVGV4dFBhZ2VGaW5kOjpDcmVhdGVQYWdlRmluZCgoSVBERl9UZXh0UGFnZSopdGV4dF9wYWdlKTsKKwkJdGV4dHBhZ2VGaW5kLT5GaW5kRmlyc3QoQ0ZYX1dpZGVTdHJpbmc6OkZyb21VVEYxNkxFKGZpbmR3aGF0KSxmbGFncyxzdGFydF9pbmRleCk7CisJfQorCWNhdGNoICguLi4pCisJeworCQlpZiAodGV4dHBhZ2VGaW5kKQorCQkJZGVsZXRlIHRleHRwYWdlRmluZDsKKwkJcmV0dXJuIE5VTEw7CQkKKwl9CisJcmV0dXJuIHRleHRwYWdlRmluZDsKK30KK0RMTEVYUE9SVCBGUERGX0JPT0wJU1REQ0FMTCBGUERGVGV4dF9GaW5kTmV4dChGUERGX1NDSEhBTkRMRSBoYW5kbGUpCit7CisJaWYgKCFoYW5kbGUpIHJldHVybiBGQUxTRTsKKwlJUERGX1RleHRQYWdlRmluZCogdGV4dHBhZ2VGaW5kPShJUERGX1RleHRQYWdlRmluZCopaGFuZGxlOworCXJldHVybgl0ZXh0cGFnZUZpbmQtPkZpbmROZXh0KCk7Cit9CitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERlRleHRfRmluZFByZXYoRlBERl9TQ0hIQU5ETEUgaGFuZGxlKQoreworCWlmICghaGFuZGxlKSByZXR1cm4gRkFMU0U7CisJSVBERl9UZXh0UGFnZUZpbmQqIHRleHRwYWdlRmluZD0oSVBERl9UZXh0UGFnZUZpbmQqKWhhbmRsZTsKKwlyZXR1cm4JdGV4dHBhZ2VGaW5kLT5GaW5kUHJldigpOworfQorRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZUZXh0X0dldFNjaFJlc3VsdEluZGV4KEZQREZfU0NISEFORExFIGhhbmRsZSkKK3sKKwlpZiAoIWhhbmRsZSkgcmV0dXJuIDA7CisJSVBERl9UZXh0UGFnZUZpbmQqIHRleHRwYWdlRmluZD0oSVBERl9UZXh0UGFnZUZpbmQqKWhhbmRsZTsKKwlyZXR1cm4gdGV4dHBhZ2VGaW5kLT5HZXRDdXJPcmRlcigpOworfQorRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZUZXh0X0dldFNjaENvdW50KEZQREZfU0NISEFORExFIGhhbmRsZSkKK3sKKwlpZiAoIWhhbmRsZSkgcmV0dXJuIDA7CisJSVBERl9UZXh0UGFnZUZpbmQqIHRleHRwYWdlRmluZD0oSVBERl9UZXh0UGFnZUZpbmQqKWhhbmRsZTsKKwlyZXR1cm4gdGV4dHBhZ2VGaW5kLT5HZXRNYXRjaGVkQ291bnQoKTsKK30KK0RMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERlRleHRfRmluZENsb3NlKEZQREZfU0NISEFORExFIGhhbmRsZSkKK3sKKwlpZiAoIWhhbmRsZSkgcmV0dXJuOworCUlQREZfVGV4dFBhZ2VGaW5kKiB0ZXh0cGFnZUZpbmQ9KElQREZfVGV4dFBhZ2VGaW5kKiloYW5kbGU7CisJZGVsZXRlCXRleHRwYWdlRmluZDsKKwloYW5kbGU9TlVMTDsKK30KKworLy93ZWIgbGluaworRExMRVhQT1JUIEZQREZfUEFHRUxJTksgU1REQ0FMTCBGUERGTGlua19Mb2FkV2ViTGlua3MoRlBERl9URVhUUEFHRSB0ZXh0X3BhZ2UpCit7CisJaWYgKCF0ZXh0X3BhZ2UpIHJldHVybiBOVUxMOworCUlQREZfTGlua0V4dHJhY3QqIHBhZ2VMaW5rPU5VTEw7CisJdHJ5CisJeworCQlwYWdlTGluaz1JUERGX0xpbmtFeHRyYWN0OjpDcmVhdGVMaW5rRXh0cmFjdCgpOworCQlwYWdlTGluay0+RXh0cmFjdExpbmtzKChJUERGX1RleHRQYWdlKil0ZXh0X3BhZ2UpOworCX0KKwljYXRjaCAoLi4uKQorCXsKKwkJaWYgKHBhZ2VMaW5rKQorCQkJZGVsZXRlIHBhZ2VMaW5rOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIHBhZ2VMaW5rOworfQorRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZMaW5rX0NvdW50V2ViTGlua3MoRlBERl9QQUdFTElOSyBsaW5rX3BhZ2UpCit7CisJaWYgKCFsaW5rX3BhZ2UpIHJldHVybiAwOworCUlQREZfTGlua0V4dHJhY3QqIHBhZ2VMaW5rPShJUERGX0xpbmtFeHRyYWN0KilsaW5rX3BhZ2U7CisJcmV0dXJuCXBhZ2VMaW5rLT5Db3VudExpbmtzKCk7Cit9CitETExFWFBPUlQgaW50IFNURENBTEwgRlBERkxpbmtfR2V0VVJMKEZQREZfUEFHRUxJTksgbGlua19wYWdlLGludCBsaW5rX2luZGV4LCB1bnNpZ25lZCBzaG9ydCogYnVmZmVyLGludCBidWZsZW4pCit7CisJaWYgKCFsaW5rX3BhZ2UpIHJldHVybiAwOworCUlQREZfTGlua0V4dHJhY3QqIHBhZ2VMaW5rPShJUERGX0xpbmtFeHRyYWN0KilsaW5rX3BhZ2U7CisJQ0ZYX1dpZGVTdHJpbmcgdXJsPXBhZ2VMaW5rLT5HZXRVUkwobGlua19pbmRleCk7CisKKwlDRlhfQnl0ZVN0cmluZyBjYlVURjE2VVJMID0gdXJsLlVURjE2TEVfRW5jb2RlKCk7CisJaW50IGxlbj0gY2JVVEYxNlVSTC5HZXRMZW5ndGgoKS9zaXplb2YodW5zaWduZWQgc2hvcnQpOworCWlmIChidWZmZXI9PU5VTEwgfHwgYnVmbGVuPD0wKQorCQlyZXR1cm4gbGVuOworCWludCBzaXplPWxlbjxidWZsZW4gPyBsZW4gOmJ1ZmxlbjsKKwlpZiAoc2l6ZT4wKQorCXsKKwkJRlhTWVNfbWVtY3B5KGJ1ZmZlcixjYlVURjE2VVJMLkdldEJ1ZmZlcihzaXplKnNpemVvZih1bnNpZ25lZCBzaG9ydCkpLHNpemUqc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7CisJCWNiVVRGMTZVUkwuUmVsZWFzZUJ1ZmZlcihzaXplKnNpemVvZih1bnNpZ25lZCBzaG9ydCkpOworCX0KKwlyZXR1cm4gc2l6ZTsKK30KK0RMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGTGlua19Db3VudFJlY3RzKEZQREZfUEFHRUxJTksgbGlua19wYWdlLGludCBsaW5rX2luZGV4KQoreworCWlmICghbGlua19wYWdlKSByZXR1cm4gMDsKKwlJUERGX0xpbmtFeHRyYWN0KiBwYWdlTGluaz0oSVBERl9MaW5rRXh0cmFjdCopbGlua19wYWdlOworCUNGWF9SZWN0QXJyYXkgcmVjdEFycmF5OworCXBhZ2VMaW5rLT5HZXRSZWN0cyhsaW5rX2luZGV4LHJlY3RBcnJheSk7CisJcmV0dXJuIHJlY3RBcnJheS5HZXRTaXplKCk7Cit9CitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZMaW5rX0dldFJlY3QoRlBERl9QQUdFTElOSyBsaW5rX3BhZ2UsaW50IGxpbmtfaW5kZXgsICBpbnQgcmVjdF9pbmRleCwgZG91YmxlKiBsZWZ0LAorCQkJCQkJCQkJCWRvdWJsZSogIHRvcCxkb3VibGUqICByaWdodCwgZG91YmxlKiAgYm90dG9tKQoreworCWlmICghbGlua19wYWdlKSByZXR1cm47CisJSVBERl9MaW5rRXh0cmFjdCogcGFnZUxpbms9KElQREZfTGlua0V4dHJhY3QqKWxpbmtfcGFnZTsKKwlDRlhfUmVjdEFycmF5IHJlY3RBcnJheTsKKwlwYWdlTGluay0+R2V0UmVjdHMobGlua19pbmRleCxyZWN0QXJyYXkpOworCUNGWF9GbG9hdFJlY3QgcmVjdDsKKwlyZWN0PXJlY3RBcnJheS5HZXRBdChyZWN0X2luZGV4KTsKKwkqbGVmdD1yZWN0LmxlZnQ7CisJKnJpZ2h0PXJlY3QucmlnaHQ7CisJKnRvcD1yZWN0LnRvcDsKKwkqYm90dG9tPXJlY3QuYm90dG9tOworfQorRExMRVhQT1JUIHZvaWQJU1REQ0FMTAlGUERGTGlua19DbG9zZVdlYkxpbmtzKEZQREZfUEFHRUxJTksgbGlua19wYWdlKQoreworCWlmICghbGlua19wYWdlKSByZXR1cm47CisJSVBERl9MaW5rRXh0cmFjdCogcGFnZUxpbms9KElQREZfTGlua0V4dHJhY3QqKWxpbmtfcGFnZTsKKwlkZWxldGUgcGFnZUxpbms7CisJcGFnZUxpbmsgPU5VTEw7Cit9CisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2ZwZGZ2aWV3LmNwcCBiL2ZwZGZzZGsvc3JjL2ZwZGZ2aWV3LmNwcAppbmRleCBlNzJlNWFiLi5hNWJhNzk2IDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9mcGRmdmlldy5jcHAKKysrIGIvZnBkZnNkay9zcmMvZnBkZnZpZXcuY3BwCkBAIC0xLDg3OSArMSw4NzkgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfZGVmaW5lLmgiDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnBkZnZpZXcuaCINCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX3JlbmRlcmNvbnRleHQuaCINCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mcGRmX3Byb2dyZXNzaXZlLmgiDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnBkZl9leHQuaCINCi0NCi0NCi1DUERGX0N1c3RvbUFjY2Vzczo6Q1BERl9DdXN0b21BY2Nlc3MoRlBERl9GSUxFQUNDRVNTKiBwRmlsZUFjY2VzcykNCi17DQotCW1fRmlsZUFjY2VzcyA9ICpwRmlsZUFjY2VzczsNCi0JbV9CdWZmZXJPZmZzZXQgPSAoRlhfRFdPUkQpLTE7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BERl9DdXN0b21BY2Nlc3M6OkdldEJ5dGUoRlhfRFdPUkQgcG9zLCBGWF9CWVRFJiBjaCkNCi17DQotCWlmIChwb3MgPj0gbV9GaWxlQWNjZXNzLm1fRmlsZUxlbikgcmV0dXJuIEZBTFNFOw0KLQlpZiAobV9CdWZmZXJPZmZzZXQgPT0gKEZYX0RXT1JEKS0xIHx8IHBvcyA8IG1fQnVmZmVyT2Zmc2V0IHx8IHBvcyA+PSBtX0J1ZmZlck9mZnNldCArIDUxMikgew0KLQkJLy8gTmVlZCB0byByZWFkIGZyb20gZmlsZSBhY2Nlc3MNCi0JCW1fQnVmZmVyT2Zmc2V0ID0gcG9zOw0KLQkJaW50IHNpemUgPSA1MTI7DQotCQlpZiAocG9zICsgNTEyID4gbV9GaWxlQWNjZXNzLm1fRmlsZUxlbikNCi0JCQlzaXplID0gbV9GaWxlQWNjZXNzLm1fRmlsZUxlbiAtIHBvczsNCi0JCWlmICghbV9GaWxlQWNjZXNzLm1fR2V0QmxvY2sobV9GaWxlQWNjZXNzLm1fUGFyYW0sIG1fQnVmZmVyT2Zmc2V0LCBtX0J1ZmZlciwgc2l6ZSkpDQotCQkJcmV0dXJuIEZBTFNFOw0KLQl9DQotCWNoID0gbV9CdWZmZXJbcG9zIC0gbV9CdWZmZXJPZmZzZXRdOw0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBDUERGX0N1c3RvbUFjY2Vzczo6R2V0QmxvY2soRlhfRFdPUkQgcG9zLCBGWF9MUEJZVEUgcEJ1ZiwgRlhfRFdPUkQgc2l6ZSkNCi17DQotCWlmIChwb3MgKyBzaXplID4gbV9GaWxlQWNjZXNzLm1fRmlsZUxlbikgcmV0dXJuIEZBTFNFOw0KLQlyZXR1cm4gbV9GaWxlQWNjZXNzLm1fR2V0QmxvY2sobV9GaWxlQWNjZXNzLm1fUGFyYW0sIHBvcywgcEJ1Ziwgc2l6ZSk7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BERl9DdXN0b21BY2Nlc3M6OlJlYWRCbG9jayh2b2lkKiBidWZmZXIsIEZYX0ZJTEVTSVpFIG9mZnNldCwgc2l6ZV90IHNpemUpDQotew0KLQkvLwltX0ZpbGVBY2Nlc3MgPSAqcEZpbGVBY2Nlc3M7DQotCS8vCW1fQnVmZmVyT2Zmc2V0ID0gKEZYX0RXT1JEKS0xOw0KLQlpZiAob2Zmc2V0ICsgc2l6ZSA+IG1fRmlsZUFjY2Vzcy5tX0ZpbGVMZW4pIHJldHVybiBGQUxTRTsNCi0JcmV0dXJuIG1fRmlsZUFjY2Vzcy5tX0dldEJsb2NrKG1fRmlsZUFjY2Vzcy5tX1BhcmFtLCBvZmZzZXQsKEZYX0xQQllURSkgYnVmZmVyLCBzaXplKTsNCi0NCi0JLy8JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi0vLzAgYml0OiBGUERGX1BPTElDWV9NQUNISU5FVElNRV9BQ0NFU1MNCi1zdGF0aWMgRlhfRFdPUkQgZm94aXRfc2FuZGJveF9wb2xpY3kgPSAweEZGRkZGRkZGOw0KLQ0KLXZvaWQgRlNES19TZXRTYW5kQm94UG9saWN5KEZQREZfRFdPUkQgcG9saWN5LCBGUERGX0JPT0wgZW5hYmxlKQ0KLXsNCi0Jc3dpdGNoKHBvbGljeSkNCi0Jew0KLQljYXNlIEZQREZfUE9MSUNZX01BQ0hJTkVUSU1FX0FDQ0VTUzoNCi0JCXsNCi0JCQlpZihlbmFibGUpDQotCQkJCWZveGl0X3NhbmRib3hfcG9saWN5IHw9IDB4MDE7DQotCQkJZWxzZQ0KLQkJCQlmb3hpdF9zYW5kYm94X3BvbGljeSAmPSAweEZGRkZGRkZFOw0KLQkJfQ0KLQkJYnJlYWs7DQotCWRlZmF1bHQ6DQotCQlicmVhazsNCi0JfQ0KLX0NCi0NCi1GUERGX0JPT0wgRlNES19Jc1NhbmRCb3hQb2xpY3lFbmFibGVkKEZQREZfRFdPUkQgcG9saWN5KQ0KLXsNCi0Jc3dpdGNoKHBvbGljeSkNCi0Jew0KLQljYXNlIEZQREZfUE9MSUNZX01BQ0hJTkVUSU1FX0FDQ0VTUzoNCi0JCXsNCi0JCQlpZihmb3hpdF9zYW5kYm94X3BvbGljeSYweDAxKQ0KLQkJCQlyZXR1cm4gVFJVRTsNCi0JCQllbHNlDQotCQkJCXJldHVybiBGQUxTRTsNCi0JCX0NCi0JCWJyZWFrOw0KLQlkZWZhdWx0Og0KLQkJYnJlYWs7DQotCX0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi0NCi0jaWZuZGVmIF9UDQotI2RlZmluZSBfVCh4KSB4DQotI2VuZGlmDQotDQotI2lmZGVmIEFQSTUNCi0JQ1BERl9Nb2R1bGVNZ3IqCWdfcE1vZHVsZU1nciA9IE5VTEw7DQotI2Vsc2UNCi0JQ0NvZGVjX01vZHVsZU1ncioJZ19wQ29kZWNNb2R1bGUgPSBOVUxMOw0KLSNpZmRlZiBfRlhTREtfT1BFTlNPVVJDRV8NCi0JRlhNRU1fRm94aXRNZ3IqIGdfcEZveGl0TWdyID0gTlVMTDsNCi0jZW5kaWYNCi0jZW5kaWYNCi0NCi0vL2V4dGVybiBDUERGU0RLX0Zvcm1GaWxsQXBwKiBnX3BGb3JtRmlsbEFwcDsNCi0NCi0jaWYgX0ZYX09TXyA9PSBfRlhfTElOVVhfRU1CRURERURfDQotY2xhc3MgQ0ZvbnRNYXBwZXIgOiBwdWJsaWMgSVBERl9Gb250TWFwcGVyDQotew0KLXB1YmxpYzoNCi0JQ0ZvbnRNYXBwZXIoKTsNCi0JdmlydHVhbCB+Q0ZvbnRNYXBwZXIoKTsNCi0NCi0JdmlydHVhbCBGVF9GYWNlIEZpbmRTdWJzdEZvbnQoDQotCQkJCQkJCUNQREZfRG9jdW1lbnQqIHBEb2MsCQkJCS8vIFtJTl0gVGhlIFBERiBkb2N1bWVudA0KLQkJCQkJCQljb25zdCBDRlhfQnl0ZVN0cmluZyYgZmFjZV9uYW1lLAkvLyBbSU5dIE9yaWdpbmFsIG5hbWUNCi0JCQkJCQkJRlhfQk9PTCBiVHJ1ZVR5cGUsCQkJCQkvLyBbSU5dIFRydWVUeXBlIG9yIFR5cGUxDQotCQkJCQkJCUZYX0RXT1JEIGZsYWdzLAkJCQkJCS8vIFtJTl0gUERGIGZvbnQgZmxhZ3MgKHNlZSBQREYgUmVmZXJlbmNlIHNlY3Rpb24gNS43LjEpDQotCQkJCQkJCWludCBmb250X3dlaWdodCwJCQkJCS8vIFtJTl0gb3JpZ2luYWwgZm9udCB3ZWlnaHQuIDAgZm9yIG5vdCBzcGVjaWZpZWQNCi0JCQkJCQkJaW50IENoYXJzZXRDUCwJCQkJCQkvLyBbSU5dIGNvZGUgcGFnZSBmb3IgY2hhcnNldCAoc2VlIFdpbjMyIEdldEFDUCgpKQ0KLQkJCQkJCQlGWF9CT09MIGJWZXJ0aWNhbCwNCi0JCQkJCQkJQ1BERl9TdWJzdEZvbnQqIHBTdWJzdEZvbnQJCQkvLyBbT1VUXSBTdWJzdCBmb250IGRhdGENCi0JCQkJCQkpOw0KLQ0KLQlGVF9GYWNlIG1fU3lzRmFjZTsNCi19Ow0KLQ0KLUNGb250TWFwcGVyKiBnX3BGb250TWFwcGVyID0gTlVMTDsNCi0jZW5kaWYJCS8vICNpZiBfRlhfT1NfID09IF9GWF9MSU5VWF9FTUJFRERFRF8NCi0NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZfSW5pdExpYnJhcnkoRlhfTFBWT0lEIGhJbnN0YW5jZSkNCi17DQotI2lmZGVmIEFQSTUNCi0JQ1BERl9Nb2R1bGVNZ3I6OkNyZWF0ZSgpOw0KLQlnX3BNb2R1bGVNZ3IgPSBDUERGX01vZHVsZU1ncjo6R2V0KCk7DQotCSAjaWYgX0ZYX09TXyA9PSBfRlhfV0lOMzJfTU9CSUxFXyB8fCBfRlhfT1NfID09IF9GWF9MSU5VWF9FTUJFRERFRF8NCi0JIAlnX3BNb2R1bGVNZ3ItPkluaXRFbWJlZGRlZCgpOw0KLQkgI2lmZGVmIF9HQjFfQ01BUFNfDQotCSAJZ19wTW9kdWxlTWdyLT5Mb2FkRW1iZWRkZWRHQjFDTWFwcygpOw0KLQkgI2VuZGlmDQotCSAjaWZkZWYgX0dCMV9DTUFQU180Xw0KLQkgCWdfcE1vZHVsZU1nci0+TG9hZEVtYmVkZGVkR0IxQ01hcHNfNCgpOw0KLQkgI2VuZGlmDQotCSAjaWZkZWYgX0NOUzFfQ01BUFNfDQotCSAJZ19wTW9kdWxlTWdyLT5Mb2FkRW1iZWRkZWRDTlMxQ01hcHMoKTsNCi0JICNlbmRpZg0KLQkgI2lmZGVmIF9KQVBBTjFfQ01BUFNfDQotCSAJZ19wTW9kdWxlTWdyLT5Mb2FkRW1iZWRkZWRKYXBhbjFDTWFwcygpOw0KLQkgI2VuZGlmDQotCSAjaWZkZWYgX0pBUEFOMV9DTUFQU182Xw0KLQkgCWdfcE1vZHVsZU1nci0+TG9hZEVtYmVkZGVkSmFwYW4xQ01hcHNfNigpOw0KLQkgI2VuZGlmDQotCSAjaWZkZWYgX0tPUkVBMV9DTUFQU18NCi0JIAlnX3BNb2R1bGVNZ3ItPkxvYWRFbWJlZGRlZEtvcmVhMUNNYXBzKCk7DQotCSAjZW5kaWYNCi0JICNpZmRlZiBfSlBYX0RFQ09ERVJfDQotCSAJZ19wTW9kdWxlTWdyLT5Jbml0SnB4TW9kdWxlKCk7DQotCSAJZ19wTW9kdWxlTWdyLT5Jbml0SmJpZzJNb2R1bGUoKTsNCi0JIC8vCWdfcE1vZHVsZU1nci0+SW5pdEljY01vZHVsZSgpOw0KLQkgI2VuZGlmDQotCSAjZWxzZQ0KLQkgCWdfcE1vZHVsZU1nci0+SW5pdERlc2t0b3AoKTsNCi0JICNlbmRpZg0KLSNlbHNlDQotI2lmZGVmIF9GWFNES19PUEVOU09VUkNFXw0KLQlnX3BGb3hpdE1nciA9IEZYTUVNX0NyZWF0ZU1lbW9yeU1ncigxMDI0ICogMTAyNCAqIDMyLCBUUlVFKTsNCi0jZW5kaWYNCi0JZ19wQ29kZWNNb2R1bGUgPSBDQ29kZWNfTW9kdWxlTWdyOjpDcmVhdGUoKTsNCi0JDQotCUNGWF9HRU1vZHVsZTo6Q3JlYXRlKCk7DQotCUNGWF9HRU1vZHVsZTo6R2V0KCktPlNldENvZGVjTW9kdWxlKGdfcENvZGVjTW9kdWxlKTsNCi0JDQotCUNQREZfTW9kdWxlTWdyOjpDcmVhdGUoKTsNCi0JQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5TZXRDb2RlY01vZHVsZShnX3BDb2RlY01vZHVsZSk7DQotCUNQREZfTW9kdWxlTWdyOjpHZXQoKS0+SW5pdFBhZ2VNb2R1bGUoKTsNCi0JQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5Jbml0UmVuZGVyTW9kdWxlKCk7DQotI2lmZGVmIEZPWElUX0NIUk9NRV9CVUlMRA0KLQlDUERGX01vZHVsZU1nciAqIHBNb2R1bGVNZ3IgPSBDUERGX01vZHVsZU1ncjo6R2V0KCk7DQotCWlmICggcE1vZHVsZU1nciApDQotCXsNCi0JCXBNb2R1bGVNZ3ItPkxvYWRFbWJlZGRlZEdCMUNNYXBzKCk7DQotCQlwTW9kdWxlTWdyLT5Mb2FkRW1iZWRkZWRKYXBhbjFDTWFwcygpOw0KLQkJcE1vZHVsZU1nci0+TG9hZEVtYmVkZGVkQ05TMUNNYXBzKCk7DQotCQlwTW9kdWxlTWdyLT5Mb2FkRW1iZWRkZWRLb3JlYTFDTWFwcygpOw0KLQl9DQotI2VuZGlmIA0KLSNlbmRpZg0KLQ0KLSNpZmRlZiBfV0lOMzINCi0JLy8gR2V0IG1vZHVsZSBwYXRoDQotCVRDSEFSIGFwcF9wYXRoW01BWF9QQVRIXTsNCi0JOjpHZXRNb2R1bGVGaWxlTmFtZSgoSElOU1RBTkNFKWhJbnN0YW5jZSwgYXBwX3BhdGgsIE1BWF9QQVRIKTsNCi0Jc2l6ZV90IGxlbiA9IF90Y3NsZW4oYXBwX3BhdGgpOw0KLQlmb3IgKHNpemVfdCBpID0gbGVuOyBpID49IDA7IGkgLS0pDQotCQlpZiAoYXBwX3BhdGhbaV0gPT0gJ1xcJykgew0KLQkJCWFwcF9wYXRoW2ldID0gMDsNCi0JCQlicmVhazsNCi0JCX0NCi0JCQ0KLSNpZmRlZiBfVU5JQ09ERQ0KLQkJI2lmbmRlZiBfRlhTREtfT1BFTlNPVVJDRV8NCi0JCUNQREZfTW9kdWxlTWdyOjpHZXQoKS0+U2V0TW9kdWxlUGF0aChOVUxMLCBDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUoYXBwX3BhdGgpKTsNCi0JCSNlbmRpZg0KLSNlbHNlDQotI2lmbmRlZiBfRlhTREtfT1BFTlNPVVJDRV8NCi0JCUNQREZfTW9kdWxlTWdyOjpHZXQoKS0+U2V0TW9kdWxlUGF0aChOVUxMLCBhcHBfcGF0aCk7DQotI2VuZGlmDQotI2VuZGlmDQotI2VuZGlmDQotfQ0KLQ0KLQ0KLURMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERl9EZXN0cm95TGlicmFyeSgpDQotew0KLQ0KLSNpZiBfRlhfT1NfID09IF9GWF9MSU5VWF9FTUJFRERFRF8NCi0JaWYgKGdfcEZvbnRNYXBwZXIpIGRlbGV0ZSBnX3BGb250TWFwcGVyOw0KLSNlbmRpZg0KLSNpZmRlZiBBUEk1DQotCWdfcE1vZHVsZU1nci0+RGVzdHJveSgpOw0KLSNlbHNlDQotCUNQREZfTW9kdWxlTWdyOjpEZXN0cm95KCk7DQotCUNGWF9HRU1vZHVsZTo6RGVzdHJveSgpOw0KLQlnX3BDb2RlY01vZHVsZS0+RGVzdHJveSgpOw0KLSNlbmRpZg0KLSNpZm5kZWYgX0ZYU0RLX09QRU5TT1VSQ0VfDQotCUZYTUVNX0NvbGxlY3RBbGwoRlhNRU1fR2V0RGVmYXVsdE1ncigpKTsNCi0jZWxzZQ0KLQlGWE1FTV9EZXN0cm95Rm94aXRNZ3IoZ19wRm94aXRNZ3IpOw0KLSNlbmRpZg0KLX0NCi0NCi0jaWZuZGVmIF9XSU4zMg0KLWludCBnX0xhc3RFcnJvcjsNCi12b2lkIFNldExhc3RFcnJvcihpbnQgZXJyKQ0KLXsNCi0JZ19MYXN0RXJyb3IgPSBlcnI7DQotfQ0KLQ0KLWludCBHZXRMYXN0RXJyb3IoKQ0KLXsNCi0JcmV0dXJuIGdfTGFzdEVycm9yOw0KLX0NCi0jZW5kaWYNCi0NCi12b2lkIFByb2Nlc3NQYXJzZUVycm9yKEZYX0RXT1JEIGVycl9jb2RlKQ0KLXsNCi0JLy8gVHJhbnNsYXRlIEZQREZBUEkgZXJyb3IgY29kZSB0byBGUERGVklFVyBlcnJvciBjb2RlDQotCXN3aXRjaCAoZXJyX2NvZGUpIHsNCi0JCWNhc2UgUERGUEFSU0VfRVJST1JfRklMRToNCi0JCQllcnJfY29kZSA9IEZQREZfRVJSX0ZJTEU7DQotCQkJYnJlYWs7DQotCQljYXNlIFBERlBBUlNFX0VSUk9SX0ZPUk1BVDoNCi0JCQllcnJfY29kZSA9IEZQREZfRVJSX0ZPUk1BVDsNCi0JCQlicmVhazsNCi0JCWNhc2UgUERGUEFSU0VfRVJST1JfUEFTU1dPUkQ6DQotCQkJZXJyX2NvZGUgPSBGUERGX0VSUl9QQVNTV09SRDsNCi0JCQlicmVhazsNCi0JCWNhc2UgUERGUEFSU0VfRVJST1JfSEFORExFUjoNCi0JCQllcnJfY29kZSA9IEZQREZfRVJSX1NFQ1VSSVRZOw0KLQkJCWJyZWFrOw0KLQl9DQotCVNldExhc3RFcnJvcihlcnJfY29kZSk7DQotfQ0KLQ0KLURMTEVYUE9SVCB2b2lkCVNURENBTEwgRlBERl9TZXRTYW5kQm94UG9saWN5KEZQREZfRFdPUkQgcG9saWN5LCBGUERGX0JPT0wgZW5hYmxlKQ0KLXsNCi0JcmV0dXJuIEZTREtfU2V0U2FuZEJveFBvbGljeShwb2xpY3ksIGVuYWJsZSk7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX0RPQ1VNRU5UIFNURENBTEwgRlBERl9Mb2FkRG9jdW1lbnQoRlBERl9TVFJJTkcgZmlsZV9wYXRoLCBGUERGX0JZVEVTVFJJTkcgcGFzc3dvcmQpDQotew0KLQlDUERGX1BhcnNlciogcFBhcnNlciA9IEZYX05FVyBDUERGX1BhcnNlcjsNCi0JcFBhcnNlci0+U2V0UGFzc3dvcmQocGFzc3dvcmQpOw0KLQl0cnkgew0KLQkJRlhfRFdPUkQgZXJyX2NvZGUgPSBwUGFyc2VyLT5TdGFydFBhcnNlKChGWF9MUENTVFIpZmlsZV9wYXRoKTsNCi0JCWlmIChlcnJfY29kZSkgew0KLQkJCWRlbGV0ZSBwUGFyc2VyOw0KLQkJCVByb2Nlc3NQYXJzZUVycm9yKGVycl9jb2RlKTsNCi0JCQlyZXR1cm4gTlVMTDsNCi0JCX0NCi0JfQ0KLQljYXRjaCAoLi4uKSB7DQotCQlkZWxldGUgcFBhcnNlcjsNCi0JCVNldExhc3RFcnJvcihGUERGX0VSUl9VTktOT1dOKTsNCi0JCXJldHVybiBOVUxMOw0KLQl9DQotCXJldHVybiBwUGFyc2VyLT5HZXREb2N1bWVudCgpOw0KLX0NCi0NCi1leHRlcm4gdm9pZCBDaGVja1VuU3VwcG9ydEVycm9yKENQREZfRG9jdW1lbnQgKiBwRG9jLCBGWF9EV09SRCBlcnJfY29kZSk7DQotDQotY2xhc3MgQ01lbUZpbGU6IHB1YmxpYyBJRlhfRmlsZVJlYWQsIHB1YmxpYyBDRlhfT2JqZWN0DQotew0KLXB1YmxpYzoNCi0JQ01lbUZpbGUoRlhfQllURSogcEJ1ZiwgRlhfRklMRVNJWkUgc2l6ZSk6bV9wQnVmKHBCdWYpLG1fc2l6ZShzaXplKSB7fQ0KLQ0KLQl2aXJ0dWFsIHZvaWQJCQlSZWxlYXNlKCkge2RlbGV0ZSB0aGlzO30NCi0JdmlydHVhbCBGWF9GSUxFU0laRQkJR2V0U2l6ZSgpIHtyZXR1cm4gbV9zaXplO30NCi0JdmlydHVhbCBGWF9CT09MCQkJUmVhZEJsb2NrKHZvaWQqIGJ1ZmZlciwgRlhfRklMRVNJWkUgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkgDQotCXsNCi0JCWlmKG9mZnNldCtzaXplID4gKEZYX0RXT1JEKW1fc2l6ZSkgcmV0dXJuIEZBTFNFOw0KLQkJRlhTWVNfbWVtY3B5KGJ1ZmZlciwgbV9wQnVmK29mZnNldCwgc2l6ZSk7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLXByaXZhdGU6DQotCUZYX0JZVEUqIG1fcEJ1ZjsNCi0JRlhfRklMRVNJWkUgbV9zaXplOw0KLX07DQotRExMRVhQT1JUIEZQREZfRE9DVU1FTlQgU1REQ0FMTCBGUERGX0xvYWRNZW1Eb2N1bWVudChjb25zdCB2b2lkKiBkYXRhX2J1ZiwgaW50IHNpemUsIEZQREZfQllURVNUUklORyBwYXNzd29yZCkNCi17DQotCUNQREZfUGFyc2VyKiBwUGFyc2VyID0gRlhfTkVXIENQREZfUGFyc2VyOw0KLQlwUGFyc2VyLT5TZXRQYXNzd29yZChwYXNzd29yZCk7DQotCXRyeSB7DQotCQlDTWVtRmlsZSogcE1lbUZpbGUgPSBGWF9ORVcgQ01lbUZpbGUoKEZYX0JZVEUqKWRhdGFfYnVmLCBzaXplKTsNCi0JCUZYX0RXT1JEIGVycl9jb2RlID0gcFBhcnNlci0+U3RhcnRQYXJzZShwTWVtRmlsZSk7DQotCQlpZiAoZXJyX2NvZGUpIHsNCi0JCQlkZWxldGUgcFBhcnNlcjsNCi0JCQlQcm9jZXNzUGFyc2VFcnJvcihlcnJfY29kZSk7DQotCQkJcmV0dXJuIE5VTEw7DQotCQl9DQotCQlDUERGX0RvY3VtZW50ICogcERvYyA9IE5VTEw7DQotCQlwRG9jID0gcFBhcnNlcj9wUGFyc2VyLT5HZXREb2N1bWVudCgpOk5VTEw7DQotCQlDaGVja1VuU3VwcG9ydEVycm9yKHBEb2MsIGVycl9jb2RlKTsNCi0JfQ0KLQljYXRjaCAoLi4uKSB7DQotCQlkZWxldGUgcFBhcnNlcjsNCi0JCVNldExhc3RFcnJvcihGUERGX0VSUl9VTktOT1dOKTsNCi0JCXJldHVybiBOVUxMOw0KLQl9DQotCXJldHVybiBwUGFyc2VyLT5HZXREb2N1bWVudCgpOw0KLX0NCi0NCi1ETExFWFBPUlQgRlBERl9ET0NVTUVOVCBTVERDQUxMIEZQREZfTG9hZEN1c3RvbURvY3VtZW50KEZQREZfRklMRUFDQ0VTUyogcEZpbGVBY2Nlc3MsIEZQREZfQllURVNUUklORyBwYXNzd29yZCkNCi17DQotCUNQREZfUGFyc2VyKiBwUGFyc2VyID0gRlhfTkVXIENQREZfUGFyc2VyOw0KLQlwUGFyc2VyLT5TZXRQYXNzd29yZChwYXNzd29yZCk7DQotCUNQREZfQ3VzdG9tQWNjZXNzKiBwRmlsZSA9IEZYX05FVyBDUERGX0N1c3RvbUFjY2VzcyhwRmlsZUFjY2Vzcyk7DQotCXRyeSB7DQotCQlGWF9EV09SRCBlcnJfY29kZSA9IHBQYXJzZXItPlN0YXJ0UGFyc2UocEZpbGUpOw0KLQkJaWYgKGVycl9jb2RlKSB7DQotCQkJZGVsZXRlIHBQYXJzZXI7DQotCQkJUHJvY2Vzc1BhcnNlRXJyb3IoZXJyX2NvZGUpOw0KLQkJCXJldHVybiBOVUxMOw0KLQkJfQ0KLQkJQ1BERl9Eb2N1bWVudCAqIHBEb2MgPSBOVUxMOw0KLQkJcERvYyA9IHBQYXJzZXI/cFBhcnNlci0+R2V0RG9jdW1lbnQoKTpOVUxMOw0KLQkJQ2hlY2tVblN1cHBvcnRFcnJvcihwRG9jLCBlcnJfY29kZSk7DQotCX0NCi0JY2F0Y2ggKC4uLikgew0KLQkJZGVsZXRlIHBQYXJzZXI7DQotCQlTZXRMYXN0RXJyb3IoRlBERl9FUlJfVU5LTk9XTik7DQotCQlyZXR1cm4gTlVMTDsNCi0JfQ0KLQlyZXR1cm4gcFBhcnNlci0+R2V0RG9jdW1lbnQoKTsNCi19DQotDQotRExMRVhQT1JUIEZQREZfQk9PTCBTVERDQUxMIEZQREZfR2V0RmlsZVZlcnNpb24oRlBERl9ET0NVTUVOVCBkb2MsIGludCogZmlsZVZlcnNpb24pDQotew0KLQlpZighZG9jfHwhZmlsZVZlcnNpb24pIHJldHVybiBGQUxTRTsNCi0JKmZpbGVWZXJzaW9uID0gMDsNCi0JQ1BERl9Eb2N1bWVudCogcERvYyA9IChDUERGX0RvY3VtZW50Kilkb2M7DQotCUNQREZfUGFyc2VyKiBwUGFyc2VyID0gKENQREZfUGFyc2VyKilwRG9jLT5HZXRQYXJzZXIoKTsNCi0JaWYoIXBQYXJzZXIpDQotCQlyZXR1cm4gRkFMU0U7DQotCSpmaWxlVmVyc2lvbiA9IHBQYXJzZXItPkdldEZpbGVWZXJzaW9uKCk7DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi0vLyBqYWJkZWxtYWxlazogY2hhbmdlZCByZXR1cm4gdHlwZSBmcm9tIEZYX0RXT1JEIHRvIGJ1aWxkIG9uIExpbnV4IChhbmQgbWF0Y2ggaGVhZGVyKS4NCi1ETExFWFBPUlQgdW5zaWduZWQgbG9uZyBTVERDQUxMIEZQREZfR2V0RG9jUGVybWlzc2lvbnMoRlBERl9ET0NVTUVOVCBkb2N1bWVudCkNCi17DQotCWlmIChkb2N1bWVudCA9PSBOVUxMKSByZXR1cm4gMDsNCi0JQ1BERl9Eb2N1bWVudCpwRG9jID0gKENQREZfRG9jdW1lbnQqKWRvY3VtZW50Ow0KLQlDUERGX1BhcnNlciogcFBhcnNlciA9IAkoQ1BERl9QYXJzZXIqKXBEb2MtPkdldFBhcnNlcigpOw0KLQlDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gcFBhcnNlci0+R2V0RW5jcnlwdERpY3QoKTsNCi0JaWYgKHBEaWN0ID09IE5VTEwpIHJldHVybiAoRlhfRFdPUkQpLTE7DQotDQotCXJldHVybiBwRGljdC0+R2V0SW50ZWdlcigiUCIpOw0KLX0NCi0NCi1ETExFWFBPUlQgaW50IFNURENBTEwgRlBERl9HZXRQYWdlQ291bnQoRlBERl9ET0NVTUVOVCBkb2N1bWVudCkNCi17DQotCWlmIChkb2N1bWVudCA9PSBOVUxMKSByZXR1cm4gMDsNCi0JcmV0dXJuICgoQ1BERl9Eb2N1bWVudCopZG9jdW1lbnQpLT5HZXRQYWdlQ291bnQoKTsNCi19DQotDQotRExMRVhQT1JUIEZQREZfUEFHRSBTVERDQUxMIEZQREZfTG9hZFBhZ2UoRlBERl9ET0NVTUVOVCBkb2N1bWVudCwgaW50IHBhZ2VfaW5kZXgpDQotew0KLQlpZiAoZG9jdW1lbnQgPT0gTlVMTCkgcmV0dXJuIE5VTEw7DQotCWlmIChwYWdlX2luZGV4IDwgMCB8fCBwYWdlX2luZGV4ID49IEZQREZfR2V0UGFnZUNvdW50KGRvY3VtZW50KSkgcmV0dXJuIE5VTEw7DQotLy8JQ1BERl9QYXJzZXIqIHBQYXJzZXIgPSAoQ1BERl9QYXJzZXIqKWRvY3VtZW50Ow0KLQlDUERGX0RvY3VtZW50KiBwRG9jID0gKENQREZfRG9jdW1lbnQqKWRvY3VtZW50Ow0KLQlpZiAocERvYyA9PSBOVUxMKSByZXR1cm4gTlVMTDsNCi0JQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IHBEb2MtPkdldFBhZ2UocGFnZV9pbmRleCk7DQotCWlmIChwRGljdCA9PSBOVUxMKSByZXR1cm4gTlVMTDsNCi0JQ1BERl9QYWdlKiBwUGFnZSA9IEZYX05FVyBDUERGX1BhZ2U7DQotCXBQYWdlLT5Mb2FkKHBEb2MsIHBEaWN0KTsNCi0JdHJ5IHsNCi0JCXBQYWdlLT5QYXJzZUNvbnRlbnQoKTsNCi0JfQ0KLQljYXRjaCAoLi4uKSB7DQotCQlkZWxldGUgcFBhZ2U7DQotCQlyZXR1cm4gTlVMTDsNCi0JfQ0KLQkNCi0vLwlDaGVja1VuU3VwcG9ydEVycm9yKHBEb2MsIDApOw0KLQ0KLQlyZXR1cm4gcFBhZ2U7DQotfQ0KLQ0KLURMTEVYUE9SVCBkb3VibGUgU1REQ0FMTCBGUERGX0dldFBhZ2VXaWR0aChGUERGX1BBR0UgcGFnZSkNCi17DQotCWlmICghcGFnZSkNCi0JCXJldHVybiAwLjA7DQotCXJldHVybiAoKENQREZfUGFnZSopcGFnZSktPkdldFBhZ2VXaWR0aCgpOw0KLX0NCi0NCi1ETExFWFBPUlQgZG91YmxlIFNURENBTEwgRlBERl9HZXRQYWdlSGVpZ2h0KEZQREZfUEFHRSBwYWdlKQ0KLXsNCi0JaWYgKCFwYWdlKSByZXR1cm4gMC4wOw0KLQlyZXR1cm4gKChDUERGX1BhZ2UqKXBhZ2UpLT5HZXRQYWdlSGVpZ2h0KCk7DQotfQ0KLQ0KLXZvaWQgRHJvcENvbnRleHQodm9pZCogZGF0YSkNCi17DQotCWRlbGV0ZSAoQ1JlbmRlckNvbnRleHQqKWRhdGE7DQotfQ0KLQ0KLXZvaWQgRlBERl9SZW5kZXJQYWdlX1JldGFpbChDUmVuZGVyQ29udGV4dCogcENvbnRleHQsIEZQREZfUEFHRSBwYWdlLCBpbnQgc3RhcnRfeCwgaW50IHN0YXJ0X3ksIGludCBzaXplX3gsIGludCBzaXplX3ksDQotCQkJCQkJaW50IHJvdGF0ZSwgaW50IGZsYWdzLEZYX0JPT0wgYk5lZWRUb1Jlc3RvcmUsIElGU0RLX1BBVVNFX0FkYXB0ZXIgKiBwYXVzZSAgKTsNCi12b2lkICgqRnVuY19SZW5kZXJQYWdlKShDUmVuZGVyQ29udGV4dCosIEZQREZfUEFHRSBwYWdlLCBpbnQgc3RhcnRfeCwgaW50IHN0YXJ0X3ksIGludCBzaXplX3gsIGludCBzaXplX3ksDQotCQkJCQkJaW50IHJvdGF0ZSwgaW50IGZsYWdzLEZYX0JPT0wgYk5lZWRUb1Jlc3RvcmUsIElGU0RLX1BBVVNFX0FkYXB0ZXIgKiBwYXVzZSAgKSA9IEZQREZfUmVuZGVyUGFnZV9SZXRhaWw7DQotDQotI2lmIGRlZmluZWQoX0RFQlVHKSB8fCBkZWZpbmVkKERFQlVHKQ0KLSNkZWZpbmUgREVCVUdfVFJBQ0UNCi0jZW5kaWYNCi0NCi0jaWYgZGVmaW5lZChfV0lOMzIpDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX1JlbmRlclBhZ2UoSERDIGRjLCBGUERGX1BBR0UgcGFnZSwgaW50IHN0YXJ0X3gsIGludCBzdGFydF95LCBpbnQgc2l6ZV94LCBpbnQgc2l6ZV95LA0KLQkJCQkJCWludCByb3RhdGUsIGludCBmbGFncykNCi17DQotCWlmIChwYWdlPT1OVUxMKSByZXR1cm47DQotCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOw0KLQ0KLQlDUmVuZGVyQ29udGV4dCogcENvbnRleHQgPSBGWF9ORVcgQ1JlbmRlckNvbnRleHQ7DQotCXBQYWdlLT5TZXRQcml2YXRlRGF0YSgodm9pZCopMSwgcENvbnRleHQsIERyb3BDb250ZXh0KTsNCi0NCi0jaWZuZGVmIF9XSU4zMl9XQ0UNCi0JQ0ZYX0RJQml0bWFwKiBwQml0bWFwID0gTlVMTDsNCi0JRlhfQk9PTCBiQmFja2dyb3VuZEFscGhhTmVlZGVkPUZBTFNFOw0KLQliQmFja2dyb3VuZEFscGhhTmVlZGVkID0gcFBhZ2UtPkJhY2tncm91bmRBbHBoYU5lZWRlZCgpOw0KLQlpZiAoYkJhY2tncm91bmRBbHBoYU5lZWRlZCkNCi0Jew0KLQkJDQotCQlwQml0bWFwID0gRlhfTkVXIENGWF9ESUJpdG1hcDsNCi0JCXBCaXRtYXAtPkNyZWF0ZShzaXplX3gsIHNpemVfeSwgRlhESUJfQXJnYik7DQotCQlwQml0bWFwLT5DbGVhcigweDAwZmZmZmZmKTsNCi0jaWZkZWYgX1NLSUFfU1VQUE9SVF8NCi0JCXBDb250ZXh0LT5tX3BEZXZpY2UgPSBGWF9ORVcgQ0ZYX1NraWFEZXZpY2U7DQotCQkoKENGWF9Ta2lhRGV2aWNlKilwQ29udGV4dC0+bV9wRGV2aWNlKS0+QXR0YWNoKChDRlhfRElCaXRtYXAqKXBCaXRtYXApOw0KLSNlbHNlDQotCQlwQ29udGV4dC0+bV9wRGV2aWNlID0gRlhfTkVXIENGWF9GeGdlRGV2aWNlOw0KLQkJKChDRlhfRnhnZURldmljZSopcENvbnRleHQtPm1fcERldmljZSktPkF0dGFjaCgoQ0ZYX0RJQml0bWFwKilwQml0bWFwKTsNCi0jZW5kaWYNCi0JfQ0KLQllbHNlDQotCXBDb250ZXh0LT5tX3BEZXZpY2UgPSBGWF9ORVcgQ0ZYX1dpbmRvd3NEZXZpY2UoZGMpOw0KLQlpZiAoZmxhZ3MgJiBGUERGX05PX0NBVENIKQ0KLQkJRnVuY19SZW5kZXJQYWdlKHBDb250ZXh0LCBwYWdlLCBzdGFydF94LCBzdGFydF95LCBzaXplX3gsIHNpemVfeSwgcm90YXRlLCBmbGFncyxUUlVFLE5VTEwpOw0KLQllbHNlIHsNCi0JCXRyeSB7DQotCQkJRnVuY19SZW5kZXJQYWdlKHBDb250ZXh0LCBwYWdlLCBzdGFydF94LCBzdGFydF95LCBzaXplX3gsIHNpemVfeSwgcm90YXRlLCBmbGFncyxUUlVFLE5VTEwpOw0KLQkJfSBjYXRjaCAoLi4uKSB7DQotCQl9DQotCX0NCi0JaWYgKGJCYWNrZ3JvdW5kQWxwaGFOZWVkZWQpIA0KLQl7DQotCQlpZiAocEJpdG1hcCkNCi0JCXsNCi0JCQlDRlhfV2luZG93c0RldmljZSBXaW5EQyhkYyk7DQotCQkJDQotIAkJCWlmIChXaW5EQy5HZXREZXZpY2VDYXBzKEZYRENfREVWSUNFX0NMQVNTKSA9PSBGWERDX1BSSU5URVIpDQotIAkJCXsNCi0JCQkJQ0ZYX0RJQml0bWFwKiBwRHN0ID0gRlhfTkVXIENGWF9ESUJpdG1hcDsNCi0JCQkJcERzdC0+Q3JlYXRlKHBCaXRtYXAtPkdldFdpZHRoKCksIHBCaXRtYXAtPkdldEhlaWdodCgpLEZYRElCX1JnYjMyKTsNCi0JCQkJRlhTWVNfbWVtY3B5KHBEc3QtPkdldEJ1ZmZlcigpLCBwQml0bWFwLT5HZXRCdWZmZXIoKSwgcEJpdG1hcC0+R2V0UGl0Y2goKSpwQml0bWFwLT5HZXRIZWlnaHQoKSk7DQotLy8JCQkJV2luREMuU2V0RElCaXRzKHBEc3QsMCwwKTsNCi0JCQkJV2luREMuU3RyZXRjaERJQml0cyhwRHN0LDAsMCxzaXplX3gqMixzaXplX3kqMik7DQotCQkJCWRlbGV0ZSBwRHN0Ow0KLSAJCQl9DQotIAkJCWVsc2UNCi0gCQkJCVdpbkRDLlNldERJQml0cyhwQml0bWFwLDAsMCk7DQotDQotCQl9DQotCX0NCi0jZWxzZQ0KLQkvLyBnZXQgY2xpcCByZWdpb24NCi0JUkVDVCByZWN0LCBjbGlwcmVjdDsNCi0JcmVjdC5sZWZ0ID0gc3RhcnRfeDsNCi0JcmVjdC50b3AgPSBzdGFydF95Ow0KLQlyZWN0LnJpZ2h0ID0gc3RhcnRfeCArIHNpemVfeDsNCi0JcmVjdC5ib3R0b20gPSBzdGFydF95ICsgc2l6ZV95Ow0KLQlHZXRDbGlwQm94KGRjLCAmY2xpcHJlY3QpOw0KLQlJbnRlcnNlY3RSZWN0KCZyZWN0LCAmcmVjdCwgJmNsaXByZWN0KTsNCi0JaW50IHdpZHRoID0gcmVjdC5yaWdodCAtIHJlY3QubGVmdDsNCi0JaW50IGhlaWdodCA9IHJlY3QuYm90dG9tIC0gcmVjdC50b3A7DQotDQotI2lmZGVmIERFQlVHX1RSQUNFDQotCXsNCi0JCWNoYXIgc3RyWzEyOF07DQotCQlzcHJpbnRmKHN0ciwgIlJlbmRlcmluZyBESUIgJWQgeCAlZCIsIHdpZHRoLCBoZWlnaHQpOw0KLQkJQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5SZXBvcnRFcnJvcig5OTksIHN0cik7DQotCX0NCi0jZW5kaWYNCi0NCi0JLy8gQ3JlYXRlIGEgRElCIHNlY3Rpb24NCi0JTFBWT0lEIHBCdWZmZXI7DQotCUJJVE1BUElORk9IRUFERVIgYm1paDsNCi0JRlhTWVNfbWVtc2V0KCZibWloLCAwLCBzaXplb2YgYm1paCk7DQotCWJtaWguYmlTaXplID0gc2l6ZW9mIGJtaWg7DQotCWJtaWguYmlCaXRDb3VudCA9IDI0Ow0KLQlibWloLmJpSGVpZ2h0ID0gLWhlaWdodDsNCi0JYm1paC5iaVBsYW5lcyA9IDE7DQotCWJtaWguYmlXaWR0aCA9IHdpZHRoOw0KLQlwQ29udGV4dC0+bV9oQml0bWFwID0gQ3JlYXRlRElCU2VjdGlvbihkYywgKEJJVE1BUElORk8qKSZibWloLCBESUJfUkdCX0NPTE9SUywgJnBCdWZmZXIsIE5VTEwsIDApOw0KLQlpZiAocENvbnRleHQtPm1faEJpdG1hcCA9PSBOVUxMKSB7DQotI2lmIGRlZmluZWQoREVCVUcpIHx8IGRlZmluZWQoX0RFQlVHKQ0KLQkJY2hhciBzdHJbMTI4XTsNCi0JCXNwcmludGYoc3RyLCAiRXJyb3IgQ3JlYXRlRElCU2VjdGlvbjogJWQgeCAlZCwgZXJyb3IgY29kZSA9ICVkIiwgd2lkdGgsIGhlaWdodCwgR2V0TGFzdEVycm9yKCkpOw0KLQkJQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5SZXBvcnRFcnJvcihGUERGRVJSX09VVF9PRl9NRU1PUlksIHN0cik7DQotI2Vsc2UNCi0JCUNQREZfTW9kdWxlTWdyOjpHZXQoKS0+UmVwb3J0RXJyb3IoRlBERkVSUl9PVVRfT0ZfTUVNT1JZLCBOVUxMKTsNCi0jZW5kaWYNCi0JfQ0KLQlGWFNZU19tZW1zZXQocEJ1ZmZlciwgMHhmZiwgaGVpZ2h0Kigod2lkdGgqMyszKS80KjQpKTsNCi0NCi0jaWZkZWYgREVCVUdfVFJBQ0UNCi0Jew0KLQkJQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5SZXBvcnRFcnJvcig5OTksICJESUJTZWN0aW9uIGNyZWF0ZWQiKTsNCi0JfQ0KLSNlbmRpZg0KLQ0KLQkvLyBDcmVhdGUgYSBkZXZpY2Ugd2l0aCB0aGlzIGV4dGVybmFsIGJ1ZmZlcg0KLQlwQ29udGV4dC0+bV9wQml0bWFwID0gRlhfTkVXIENGWF9ESUJpdG1hcDsNCi0JcENvbnRleHQtPm1fcEJpdG1hcC0+Q3JlYXRlKHdpZHRoLCBoZWlnaHQsIEZYRElCX1JnYiwgKEZYX0xQQllURSlwQnVmZmVyKTsNCi0JcENvbnRleHQtPm1fcERldmljZSA9IEZYX05FVyBDUERGX0Z4Z2VEZXZpY2U7DQotCSgoQ1BERl9GeGdlRGV2aWNlKilwQ29udGV4dC0+bV9wRGV2aWNlKS0+QXR0YWNoKHBDb250ZXh0LT5tX3BCaXRtYXApOw0KLQkNCi0jaWZkZWYgREVCVUdfVFJBQ0UNCi0JQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5SZXBvcnRFcnJvcig5OTksICJSZWFkeSBmb3IgUERGIHJlbmRlcmluZyIpOw0KLSNlbmRpZg0KLQ0KLQkvLyBvdXRwdXQgdG8gYml0bWFwIGRldmljZQ0KLQlpZiAoZmxhZ3MgJiBGUERGX05PX0NBVENIKQ0KLQkJRnVuY19SZW5kZXJQYWdlKHBDb250ZXh0LCBwYWdlLCBzdGFydF94IC0gcmVjdC5sZWZ0LCBzdGFydF95IC0gcmVjdC50b3AsIHNpemVfeCwgc2l6ZV95LCByb3RhdGUsIGZsYWdzKTsNCi0JZWxzZSB7DQotCQl0cnkgew0KLQkJCUZ1bmNfUmVuZGVyUGFnZShwQ29udGV4dCwgcGFnZSwgc3RhcnRfeCAtIHJlY3QubGVmdCwgc3RhcnRfeSAtIHJlY3QudG9wLCBzaXplX3gsIHNpemVfeSwgcm90YXRlLCBmbGFncyk7DQotCQl9IGNhdGNoICguLi4pIHsNCi0JCX0NCi0JfQ0KLQ0KLSNpZmRlZiBERUJVR19UUkFDRQ0KLQlDUERGX01vZHVsZU1ncjo6R2V0KCktPlJlcG9ydEVycm9yKDk5OSwgIkZpbmlzaGVkIFBERiByZW5kZXJpbmciKTsNCi0jZW5kaWYNCi0NCi0JLy8gTm93IG91dHB1dCB0byByZWFsIGRldmljZQ0KLQlIREMgaE1lbURDID0gQ3JlYXRlQ29tcGF0aWJsZURDKGRjKTsNCi0JaWYgKGhNZW1EQyA9PSBOVUxMKSB7DQotI2lmIGRlZmluZWQoREVCVUcpIHx8IGRlZmluZWQoX0RFQlVHKQ0KLQkJY2hhciBzdHJbMTI4XTsNCi0JCXNwcmludGYoc3RyLCAiRXJyb3IgQ3JlYXRlQ29tcGF0aWJsZURDLiBFcnJvciBjb2RlID0gJWQiLCBHZXRMYXN0RXJyb3IoKSk7DQotCQlDUERGX01vZHVsZU1ncjo6R2V0KCktPlJlcG9ydEVycm9yKEZQREZFUlJfT1VUX09GX01FTU9SWSwgc3RyKTsNCi0jZWxzZQ0KLQkJQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5SZXBvcnRFcnJvcihGUERGRVJSX09VVF9PRl9NRU1PUlksIE5VTEwpOw0KLSNlbmRpZg0KLQl9DQotDQotCUhHRElPQkogaE9sZEJpdG1hcCA9IFNlbGVjdE9iamVjdChoTWVtREMsIHBDb250ZXh0LT5tX2hCaXRtYXApOw0KLQ0KLSNpZmRlZiBERUJVR19UUkFDRQ0KLQlDUERGX01vZHVsZU1ncjo6R2V0KCktPlJlcG9ydEVycm9yKDk5OSwgIlJlYWR5IGZvciBzY3JlZW4gcmVuZGVyaW5nIik7DQotI2VuZGlmDQotDQotCUJpdEJsdChkYywgcmVjdC5sZWZ0LCByZWN0LnRvcCwgd2lkdGgsIGhlaWdodCwgaE1lbURDLCAwLCAwLCBTUkNDT1BZKTsNCi0JU2VsZWN0T2JqZWN0KGhNZW1EQywgaE9sZEJpdG1hcCk7DQotCURlbGV0ZURDKGhNZW1EQyk7DQotDQotI2lmZGVmIERFQlVHX1RSQUNFDQotCUNQREZfTW9kdWxlTWdyOjpHZXQoKS0+UmVwb3J0RXJyb3IoOTk5LCAiRmluaXNoZWQgc2NyZWVuIHJlbmRlcmluZyIpOw0KLSNlbmRpZg0KLQ0KLSNlbmRpZg0KLQlpZiAoYkJhY2tncm91bmRBbHBoYU5lZWRlZCkNCi0Jew0KLQkJaWYgKHBCaXRtYXApDQotCQkJZGVsZXRlIHBCaXRtYXA7DQotCQlwQml0bWFwID0gTlVMTDsNCi0JfQ0KLQlkZWxldGUgcENvbnRleHQ7DQotCXBQYWdlLT5SZW1vdmVQcml2YXRlRGF0YSgodm9pZCopMSk7DQotfQ0KLSNlbmRpZg0KLQ0KLURMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERl9SZW5kZXJQYWdlQml0bWFwKEZQREZfQklUTUFQIGJpdG1hcCwgRlBERl9QQUdFIHBhZ2UsIGludCBzdGFydF94LCBpbnQgc3RhcnRfeSwgDQotCQkJCQkJaW50IHNpemVfeCwgaW50IHNpemVfeSwgaW50IHJvdGF0ZSwgaW50IGZsYWdzKQ0KLXsNCi0JaWYgKGJpdG1hcCA9PSBOVUxMIHx8IHBhZ2UgPT0gTlVMTCkgcmV0dXJuOw0KLQlDUERGX1BhZ2UqIHBQYWdlID0gKENQREZfUGFnZSopcGFnZTsNCi0NCi0NCi0JQ1JlbmRlckNvbnRleHQqIHBDb250ZXh0ID0gRlhfTkVXIENSZW5kZXJDb250ZXh0Ow0KLQlwUGFnZS0+U2V0UHJpdmF0ZURhdGEoKHZvaWQqKTEsIHBDb250ZXh0LCBEcm9wQ29udGV4dCk7DQotI2lmZGVmIF9TS0lBX1NVUFBPUlRfDQotCXBDb250ZXh0LT5tX3BEZXZpY2UgPSBGWF9ORVcgQ0ZYX1NraWFEZXZpY2U7DQotDQotCWlmIChmbGFncyAmIEZQREZfUkVWRVJTRV9CWVRFX09SREVSKQ0KLQkJKChDRlhfU2tpYURldmljZSopcENvbnRleHQtPm1fcERldmljZSktPkF0dGFjaCgoQ0ZYX0RJQml0bWFwKiliaXRtYXAsMCxUUlVFKTsNCi0JZWxzZQ0KLQkJKChDRlhfU2tpYURldmljZSopcENvbnRleHQtPm1fcERldmljZSktPkF0dGFjaCgoQ0ZYX0RJQml0bWFwKiliaXRtYXApOw0KLSNlbHNlDQotCXBDb250ZXh0LT5tX3BEZXZpY2UgPSBGWF9ORVcgQ0ZYX0Z4Z2VEZXZpY2U7DQotDQotCWlmIChmbGFncyAmIEZQREZfUkVWRVJTRV9CWVRFX09SREVSKQ0KLQkJKChDRlhfRnhnZURldmljZSopcENvbnRleHQtPm1fcERldmljZSktPkF0dGFjaCgoQ0ZYX0RJQml0bWFwKiliaXRtYXAsMCxUUlVFKTsNCi0JZWxzZQ0KLQkJKChDRlhfRnhnZURldmljZSopcENvbnRleHQtPm1fcERldmljZSktPkF0dGFjaCgoQ0ZYX0RJQml0bWFwKiliaXRtYXApOw0KLSNlbmRpZg0KLQlpZiAoZmxhZ3MgJiBGUERGX05PX0NBVENIKQ0KLQkJRnVuY19SZW5kZXJQYWdlKHBDb250ZXh0LCBwYWdlLCBzdGFydF94LCBzdGFydF95LCBzaXplX3gsIHNpemVfeSwgcm90YXRlLCBmbGFncyxUUlVFLE5VTEwpOw0KLQllbHNlIHsNCi0JCXRyeSB7DQotCQkJRnVuY19SZW5kZXJQYWdlKHBDb250ZXh0LCBwYWdlLCBzdGFydF94LCBzdGFydF95LCBzaXplX3gsIHNpemVfeSwgcm90YXRlLCBmbGFncyxUUlVFLE5VTEwpOw0KLQkJfSBjYXRjaCAoLi4uKSB7DQotCQl9DQotCX0NCi0NCi0JZGVsZXRlIHBDb250ZXh0Ow0KLQlwUGFnZS0+UmVtb3ZlUHJpdmF0ZURhdGEoKHZvaWQqKTEpOw0KLX0NCi0NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZfQ2xvc2VQYWdlKEZQREZfUEFHRSBwYWdlKQ0KLXsNCi0JaWYgKCFwYWdlKSByZXR1cm47DQotCWRlbGV0ZSAoQ1BERl9QYWdlKilwYWdlOw0KLQ0KLX0NCi0NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZfQ2xvc2VEb2N1bWVudChGUERGX0RPQ1VNRU5UIGRvY3VtZW50KQ0KLXsNCi0JaWYgKCFkb2N1bWVudCkNCi0JCXJldHVybjsNCi0JQ1BERl9Eb2N1bWVudCogcERvYyA9IChDUERGX0RvY3VtZW50Kilkb2N1bWVudDsJDQotCUNQREZfUGFyc2VyKiBwUGFyc2VyID0gKENQREZfUGFyc2VyKilwRG9jLT5HZXRQYXJzZXIoKTsNCi0JaWYgKHBQYXJzZXIgPT0gTlVMTCkgDQotCXsNCi0JCWRlbGV0ZSBwRG9jOw0KLQkJcmV0dXJuOw0KLQl9DQotCWRlbGV0ZSBwUGFyc2VyOw0KLS8vCWRlbGV0ZSBwRG9jOw0KLX0NCi0NCi1ETExFWFBPUlQgdW5zaWduZWQgbG9uZyBTVERDQUxMIEZQREZfR2V0TGFzdEVycm9yKCkNCi17DQotCXJldHVybiBHZXRMYXN0RXJyb3IoKTsNCi19DQotDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX0RldmljZVRvUGFnZShGUERGX1BBR0UgcGFnZSwgaW50IHN0YXJ0X3gsIGludCBzdGFydF95LCBpbnQgc2l6ZV94LCBpbnQgc2l6ZV95LA0KLQkJCQkJCWludCByb3RhdGUsIGludCBkZXZpY2VfeCwgaW50IGRldmljZV95LCBkb3VibGUqIHBhZ2VfeCwgZG91YmxlKiBwYWdlX3kpDQotew0KLQlpZiAocGFnZSA9PSBOVUxMIHx8IHBhZ2VfeCA9PSBOVUxMIHx8IHBhZ2VfeSA9PSBOVUxMKSByZXR1cm47DQotCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOw0KLQ0KLQlDUERGX01hdHJpeCBwYWdlMmRldmljZTsNCi0JcFBhZ2UtPkdldERpc3BsYXlNYXRyaXgocGFnZTJkZXZpY2UsIHN0YXJ0X3gsIHN0YXJ0X3ksIHNpemVfeCwgc2l6ZV95LCByb3RhdGUpOw0KLQlDUERGX01hdHJpeCBkZXZpY2UycGFnZTsNCi0JZGV2aWNlMnBhZ2UuU2V0UmV2ZXJzZShwYWdlMmRldmljZSk7DQotDQotCUZYX0ZMT0FUIHBhZ2VfeF9mLCBwYWdlX3lfZjsNCi0JZGV2aWNlMnBhZ2UuVHJhbnNmb3JtKChGWF9GTE9BVCkoZGV2aWNlX3gpLCAoRlhfRkxPQVQpKGRldmljZV95KSwgcGFnZV94X2YsIHBhZ2VfeV9mKTsNCi0NCi0JKnBhZ2VfeCA9IChwYWdlX3hfZik7DQotCSpwYWdlX3kgPSAocGFnZV95X2YpOw0KLX0NCi0NCi1ETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZfUGFnZVRvRGV2aWNlKEZQREZfUEFHRSBwYWdlLCBpbnQgc3RhcnRfeCwgaW50IHN0YXJ0X3ksIGludCBzaXplX3gsIGludCBzaXplX3ksDQotCQkJCQkJaW50IHJvdGF0ZSwgZG91YmxlIHBhZ2VfeCwgZG91YmxlIHBhZ2VfeSwgaW50KiBkZXZpY2VfeCwgaW50KiBkZXZpY2VfeSkNCi17DQotCWlmIChwYWdlID09IE5VTEwgfHwgZGV2aWNlX3ggPT0gTlVMTCB8fCBkZXZpY2VfeSA9PSBOVUxMKSByZXR1cm47DQotCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOw0KLQ0KLQlDUERGX01hdHJpeCBwYWdlMmRldmljZTsNCi0JcFBhZ2UtPkdldERpc3BsYXlNYXRyaXgocGFnZTJkZXZpY2UsIHN0YXJ0X3gsIHN0YXJ0X3ksIHNpemVfeCwgc2l6ZV95LCByb3RhdGUpOw0KLQ0KLQlGWF9GTE9BVCBkZXZpY2VfeF9mLCBkZXZpY2VfeV9mOw0KLQlwYWdlMmRldmljZS5UcmFuc2Zvcm0oKChGWF9GTE9BVClwYWdlX3gpLCAoKEZYX0ZMT0FUKXBhZ2VfeSksIGRldmljZV94X2YsIGRldmljZV95X2YpOw0KLQ0KLQkqZGV2aWNlX3ggPSBGWFNZU19yb3VuZChkZXZpY2VfeF9mKTsNCi0JKmRldmljZV95ID0gRlhTWVNfcm91bmQoZGV2aWNlX3lfZik7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX0JJVE1BUCBTVERDQUxMIEZQREZCaXRtYXBfQ3JlYXRlKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGFscGhhKQ0KLXsNCi0JQ0ZYX0RJQml0bWFwKiBwQml0bWFwID0gRlhfTkVXIENGWF9ESUJpdG1hcDsNCi0JcEJpdG1hcC0+Q3JlYXRlKHdpZHRoLCBoZWlnaHQsIGFscGhhID8gRlhESUJfQXJnYiA6IEZYRElCX1JnYjMyKTsNCi0JcmV0dXJuIHBCaXRtYXA7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX0JJVE1BUCBTVERDQUxMIEZQREZCaXRtYXBfQ3JlYXRlRXgoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZm9ybWF0LCB2b2lkKiBmaXJzdF9zY2FuLCBpbnQgc3RyaWRlKQ0KLXsNCi0JRlhESUJfRm9ybWF0IGZ4X2Zvcm1hdDsNCi0Jc3dpdGNoIChmb3JtYXQpIHsNCi0JCWNhc2UgRlBERkJpdG1hcF9HcmF5Og0KLQkJCWZ4X2Zvcm1hdCA9IEZYRElCXzhicHBSZ2I7DQotCQkJYnJlYWs7DQotCQljYXNlIEZQREZCaXRtYXBfQkdSOg0KLQkJCWZ4X2Zvcm1hdCA9IEZYRElCX1JnYjsNCi0JCQlicmVhazsNCi0JCWNhc2UgRlBERkJpdG1hcF9CR1J4Og0KLQkJCWZ4X2Zvcm1hdCA9IEZYRElCX1JnYjMyOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSBGUERGQml0bWFwX0JHUkE6DQotCQkJZnhfZm9ybWF0ID0gRlhESUJfQXJnYjsNCi0JCQlicmVhazsNCi0JCWRlZmF1bHQ6DQotCQkJcmV0dXJuIE5VTEw7DQotCX0NCi0JQ0ZYX0RJQml0bWFwKiBwQml0bWFwID0gRlhfTkVXIENGWF9ESUJpdG1hcDsNCi0JcEJpdG1hcC0+Q3JlYXRlKHdpZHRoLCBoZWlnaHQsIGZ4X2Zvcm1hdCwgKEZYX0xQQllURSlmaXJzdF9zY2FuLCBzdHJpZGUpOw0KLQlyZXR1cm4gcEJpdG1hcDsNCi19DQotDQotRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGQml0bWFwX0ZpbGxSZWN0KEZQREZfQklUTUFQIGJpdG1hcCwgaW50IGxlZnQsIGludCB0b3AsIGludCB3aWR0aCwgaW50IGhlaWdodCwgDQotCQkJCQkJCQkJaW50IHJlZCwgaW50IGdyZWVuLCBpbnQgYmx1ZSwgaW50IGFscGhhKQ0KLXsNCi0JaWYgKGJpdG1hcCA9PSBOVUxMKSByZXR1cm47DQotI2lmZGVmIF9TS0lBX1NVUFBPUlRfDQotCUNGWF9Ta2lhRGV2aWNlIGRldmljZTsNCi0jZWxzZQ0KLQlDRlhfRnhnZURldmljZSBkZXZpY2U7DQotI2VuZGlmDQotCWRldmljZS5BdHRhY2goKENGWF9ESUJpdG1hcCopYml0bWFwKTsNCi0JaWYgKCEoKENGWF9ESUJpdG1hcCopYml0bWFwKS0+SGFzQWxwaGEoKSkgYWxwaGEgPSAyNTU7DQotCUZYX1JFQ1QgcmVjdChsZWZ0LCB0b3AsIGxlZnQrd2lkdGgsIHRvcCtoZWlnaHQpOw0KLQlkZXZpY2UuRmlsbFJlY3QoJnJlY3QsIEZYQVJHQl9NQUtFKGFscGhhLCByZWQsIGdyZWVuLCBibHVlKSk7DQotfQ0KLQ0KLURMTEVYUE9SVCB2b2lkKiBTVERDQUxMIEZQREZCaXRtYXBfR2V0QnVmZmVyKEZQREZfQklUTUFQIGJpdG1hcCkNCi17DQotCWlmIChiaXRtYXAgPT0gTlVMTCkgcmV0dXJuIE5VTEw7DQotCXJldHVybiAoKENGWF9ESUJpdG1hcCopYml0bWFwKS0+R2V0QnVmZmVyKCk7DQotfQ0KLQ0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGQml0bWFwX0dldFdpZHRoKEZQREZfQklUTUFQIGJpdG1hcCkNCi17DQotCWlmIChiaXRtYXAgPT0gTlVMTCkgcmV0dXJuIDA7DQotCXJldHVybiAoKENGWF9ESUJpdG1hcCopYml0bWFwKS0+R2V0V2lkdGgoKTsNCi19DQotDQotRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZCaXRtYXBfR2V0SGVpZ2h0KEZQREZfQklUTUFQIGJpdG1hcCkNCi17DQotCWlmIChiaXRtYXAgPT0gTlVMTCkgcmV0dXJuIDA7DQotCXJldHVybiAoKENGWF9ESUJpdG1hcCopYml0bWFwKS0+R2V0SGVpZ2h0KCk7DQotfQ0KLQ0KLURMTEVYUE9SVCBpbnQgU1REQ0FMTCBGUERGQml0bWFwX0dldFN0cmlkZShGUERGX0JJVE1BUCBiaXRtYXApDQotew0KLQlpZiAoYml0bWFwID09IE5VTEwpIHJldHVybiAwOw0KLQlyZXR1cm4gKChDRlhfRElCaXRtYXAqKWJpdG1hcCktPkdldFBpdGNoKCk7DQotfQ0KLQ0KLURMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERkJpdG1hcF9EZXN0cm95KEZQREZfQklUTUFQIGJpdG1hcCkNCi17DQotCWlmIChiaXRtYXAgPT0gTlVMTCkgcmV0dXJuOw0KLQlkZWxldGUgKENGWF9ESUJpdG1hcCopYml0bWFwOw0KLX0NCi0NCi12b2lkIEZQREZfUmVuZGVyUGFnZV9SZXRhaWwoQ1JlbmRlckNvbnRleHQqIHBDb250ZXh0LCBGUERGX1BBR0UgcGFnZSwgaW50IHN0YXJ0X3gsIGludCBzdGFydF95LCBpbnQgc2l6ZV94LCBpbnQgc2l6ZV95LA0KLQkJCQkJCWludCByb3RhdGUsIGludCBmbGFncyxGWF9CT09MIGJOZWVkVG9SZXN0b3JlLCBJRlNES19QQVVTRV9BZGFwdGVyICogcGF1c2UgKQ0KLXsNCi0vLyNpZmRlZiBfTElDRU5TRURfQlVJTERfDQotCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOw0KLQlpZiAocFBhZ2UgPT0gTlVMTCkgcmV0dXJuOw0KLQ0KLQlpZiAoIXBDb250ZXh0LT5tX3BPcHRpb25zKQ0KLQkJcENvbnRleHQtPm1fcE9wdGlvbnMgPSBuZXcgQ1BERl9SZW5kZXJPcHRpb25zOw0KLS8vCUNQREZfUmVuZGVyT3B0aW9ucyBvcHRpb25zOw0KLQlpZiAoZmxhZ3MgJiBGUERGX0xDRF9URVhUKQ0KLQkJcENvbnRleHQtPm1fcE9wdGlvbnMtPm1fRmxhZ3MgfD0gUkVOREVSX0NMRUFSVFlQRTsNCi0JZWxzZQ0KLQkJcENvbnRleHQtPm1fcE9wdGlvbnMtPm1fRmxhZ3MgJj0gflJFTkRFUl9DTEVBUlRZUEU7DQotCWlmIChmbGFncyAmIEZQREZfTk9fTkFUSVZFVEVYVCkNCi0JCXBDb250ZXh0LT5tX3BPcHRpb25zLT5tX0ZsYWdzIHw9IFJFTkRFUl9OT19OQVRJVkVURVhUOw0KLQlpZiAoZmxhZ3MgJiBGUERGX1JFTkRFUl9MSU1JVEVESU1BR0VDQUNIRSkNCi0JCXBDb250ZXh0LT5tX3BPcHRpb25zLT5tX0ZsYWdzIHw9IFJFTkRFUl9MSU1JVEVESU1BR0VDQUNIRTsNCi0JaWYgKGZsYWdzICYgRlBERl9SRU5ERVJfRk9SQ0VIQUxGVE9ORSkNCi0JCXBDb250ZXh0LT5tX3BPcHRpb25zLT5tX0ZsYWdzIHw9IFJFTkRFUl9GT1JDRV9IQUxGVE9ORTsNCi0JLy9HcmF5c2NhbGUgb3V0cHV0DQotCWlmIChmbGFncyAmIEZQREZfR1JBWVNDQUxFKQ0KLQl7DQotCQlwQ29udGV4dC0+bV9wT3B0aW9ucy0+bV9Db2xvck1vZGUgPSBSRU5ERVJfQ09MT1JfR1JBWTsNCi0JCXBDb250ZXh0LT5tX3BPcHRpb25zLT5tX0ZvcmVDb2xvciA9IDA7DQotCQlwQ29udGV4dC0+bV9wT3B0aW9ucy0+bV9CYWNrQ29sb3IgPSAweGZmZmZmZjsNCi0JfQ0KLQljb25zdCBDUERGX09DQ29udGV4dDo6VXNhZ2VUeXBlIHVzYWdlID0gKGZsYWdzICYgRlBERl9QUklOVElORykgPyBDUERGX09DQ29udGV4dDo6UHJpbnQgOiBDUERGX09DQ29udGV4dDo6VmlldzsNCi0NCi0JcENvbnRleHQtPm1fcE9wdGlvbnMtPm1fQWRkRmxhZ3MgPSBmbGFncyA+PiA4Ow0KLQ0KLQlwQ29udGV4dC0+bV9wT3B0aW9ucy0+bV9wT0NDb250ZXh0ID0gbmV3IENQREZfT0NDb250ZXh0KHBQYWdlLT5tX3BEb2N1bWVudCwgdXNhZ2UpOw0KLQ0KLQ0KLQlDRlhfQWZmaW5lTWF0cml4IG1hdHJpeDsNCi0JcFBhZ2UtPkdldERpc3BsYXlNYXRyaXgobWF0cml4LCBzdGFydF94LCBzdGFydF95LCBzaXplX3gsIHNpemVfeSwgcm90YXRlKTsgDQotDQotCUZYX1JFQ1QgY2xpcDsNCi0JY2xpcC5sZWZ0ID0gc3RhcnRfeDsNCi0JY2xpcC5yaWdodCA9IHN0YXJ0X3ggKyBzaXplX3g7DQotCWNsaXAudG9wID0gc3RhcnRfeTsNCi0JY2xpcC5ib3R0b20gPSBzdGFydF95ICsgc2l6ZV95Ow0KLQlwQ29udGV4dC0+bV9wRGV2aWNlLT5TYXZlU3RhdGUoKTsNCi0JcENvbnRleHQtPm1fcERldmljZS0+U2V0Q2xpcF9SZWN0KCZjbGlwKTsNCi0NCi0JcENvbnRleHQtPm1fcENvbnRleHQgPSBGWF9ORVcgQ1BERl9SZW5kZXJDb250ZXh0Ow0KLQlwQ29udGV4dC0+bV9wQ29udGV4dC0+Q3JlYXRlKHBQYWdlKTsNCi0JcENvbnRleHQtPm1fcENvbnRleHQtPkFwcGVuZE9iamVjdExpc3QocFBhZ2UsICZtYXRyaXgpOw0KLQ0KLQlpZiAoZmxhZ3MgJiBGUERGX0FOTk9UKSB7DQotCQlwQ29udGV4dC0+bV9wQW5ub3RzID0gRlhfTkVXIENQREZfQW5ub3RMaXN0KHBQYWdlKTsNCi0JCUZYX0JPT0wgYlByaW50aW5nID0gcENvbnRleHQtPm1fcERldmljZS0+R2V0RGV2aWNlQ2xhc3MoKSAhPSBGWERDX0RJU1BMQVk7DQotCQlwQ29udGV4dC0+bV9wQW5ub3RzLT5EaXNwbGF5QW5ub3RzKHBQYWdlLCBwQ29udGV4dC0+bV9wQ29udGV4dCwgYlByaW50aW5nLCAmbWF0cml4LCBUUlVFLCBOVUxMKTsNCi0JfQ0KLQ0KLQlwQ29udGV4dC0+bV9wUmVuZGVyZXIgPSBGWF9ORVcgQ1BERl9Qcm9ncmVzc2l2ZVJlbmRlcmVyOw0KLQlwQ29udGV4dC0+bV9wUmVuZGVyZXItPlN0YXJ0KHBDb250ZXh0LT5tX3BDb250ZXh0LCBwQ29udGV4dC0+bV9wRGV2aWNlLCBwQ29udGV4dC0+bV9wT3B0aW9ucywgcGF1c2UpOw0KLQlpZiAoYk5lZWRUb1Jlc3RvcmUpDQotCXsNCi0JICBwQ29udGV4dC0+bV9wRGV2aWNlLT5SZXN0b3JlU3RhdGUoKTsNCi0JfQ0KLQkNCi0vLyNlbmRpZg0KLX0NCi0NCi1ETExFWFBPUlQgaW50IFNURENBTEwgRlBERl9HZXRQYWdlU2l6ZUJ5SW5kZXgoRlBERl9ET0NVTUVOVCBkb2N1bWVudCwgaW50IHBhZ2VfaW5kZXgsIGRvdWJsZSogd2lkdGgsIGRvdWJsZSogaGVpZ2h0KQ0KLXsNCi0JQ1BERl9Eb2N1bWVudCogcERvYyA9IChDUERGX0RvY3VtZW50Kilkb2N1bWVudDsNCi0JaWYocERvYyA9PSBOVUxMKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQ0KLQlDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gcERvYy0+R2V0UGFnZShwYWdlX2luZGV4KTsNCi0JaWYgKHBEaWN0ID09IE5VTEwpIHJldHVybiBGQUxTRTsNCi0NCi0JQ1BERl9QYWdlIHBhZ2U7DQotCXBhZ2UuTG9hZChwRG9jLCBwRGljdCk7DQotCSp3aWR0aCA9IHBhZ2UuR2V0UGFnZVdpZHRoKCk7DQotCSpoZWlnaHQgPSBwYWdlLkdldFBhZ2VIZWlnaHQoKTsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGX1ZJRVdFUlJFRl9HZXRQcmludFNjYWxpbmcoRlBERl9ET0NVTUVOVCBkb2N1bWVudCkNCi17DQotCUNQREZfRG9jdW1lbnQqIHBEb2MgPSAoQ1BERl9Eb2N1bWVudCopZG9jdW1lbnQ7DQotCWlmICghcERvYykgcmV0dXJuIFRSVUU7DQotCUNQREZfVmlld2VyUHJlZmVyZW5jZXMgdmlld1JlZihwRG9jKTsNCi0JcmV0dXJuIHZpZXdSZWYuUHJpbnRTY2FsaW5nKCk7DQotfQ0KLQ0KLURMTEVYUE9SVCBGUERGX0RFU1QgU1REQ0FMTCBGUERGX0dldE5hbWVkRGVzdEJ5TmFtZShGUERGX0RPQ1VNRU5UIGRvY3VtZW50LEZQREZfQllURVNUUklORyBuYW1lKQ0KLXsNCi0JaWYgKGRvY3VtZW50ID09IE5VTEwpDQotCQlyZXR1cm4gTlVMTDsNCi0JaWYgKG5hbWUgPT0gTlVMTCB8fCBuYW1lWzBdID09IDApIA0KLQkJcmV0dXJuIE5VTEw7DQotDQotCUNQREZfRG9jdW1lbnQqIHBEb2MgPSAoQ1BERl9Eb2N1bWVudCopZG9jdW1lbnQ7DQotCUNQREZfTmFtZVRyZWUgbmFtZV90cmVlKHBEb2MsIEZYX0JTVFJDKCJEZXN0cyIpKTsNCi0JcmV0dXJuIG5hbWVfdHJlZS5Mb29rdXBOYW1lZERlc3QocERvYywgbmFtZSk7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfZGVmaW5lLmgiCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9mcGRmdmlldy5oIgorI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19yZW5kZXJjb250ZXh0LmgiCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9mcGRmX3Byb2dyZXNzaXZlLmgiCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9mcGRmX2V4dC5oIgorCisKK0NQREZfQ3VzdG9tQWNjZXNzOjpDUERGX0N1c3RvbUFjY2VzcyhGUERGX0ZJTEVBQ0NFU1MqIHBGaWxlQWNjZXNzKQoreworCW1fRmlsZUFjY2VzcyA9ICpwRmlsZUFjY2VzczsKKwltX0J1ZmZlck9mZnNldCA9IChGWF9EV09SRCktMTsKK30KKworRlhfQk9PTCBDUERGX0N1c3RvbUFjY2Vzczo6R2V0Qnl0ZShGWF9EV09SRCBwb3MsIEZYX0JZVEUmIGNoKQoreworCWlmIChwb3MgPj0gbV9GaWxlQWNjZXNzLm1fRmlsZUxlbikgcmV0dXJuIEZBTFNFOworCWlmIChtX0J1ZmZlck9mZnNldCA9PSAoRlhfRFdPUkQpLTEgfHwgcG9zIDwgbV9CdWZmZXJPZmZzZXQgfHwgcG9zID49IG1fQnVmZmVyT2Zmc2V0ICsgNTEyKSB7CisJCS8vIE5lZWQgdG8gcmVhZCBmcm9tIGZpbGUgYWNjZXNzCisJCW1fQnVmZmVyT2Zmc2V0ID0gcG9zOworCQlpbnQgc2l6ZSA9IDUxMjsKKwkJaWYgKHBvcyArIDUxMiA+IG1fRmlsZUFjY2Vzcy5tX0ZpbGVMZW4pCisJCQlzaXplID0gbV9GaWxlQWNjZXNzLm1fRmlsZUxlbiAtIHBvczsKKwkJaWYgKCFtX0ZpbGVBY2Nlc3MubV9HZXRCbG9jayhtX0ZpbGVBY2Nlc3MubV9QYXJhbSwgbV9CdWZmZXJPZmZzZXQsIG1fQnVmZmVyLCBzaXplKSkKKwkJCXJldHVybiBGQUxTRTsKKwl9CisJY2ggPSBtX0J1ZmZlcltwb3MgLSBtX0J1ZmZlck9mZnNldF07CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgQ1BERl9DdXN0b21BY2Nlc3M6OkdldEJsb2NrKEZYX0RXT1JEIHBvcywgRlhfTFBCWVRFIHBCdWYsIEZYX0RXT1JEIHNpemUpCit7CisJaWYgKHBvcyArIHNpemUgPiBtX0ZpbGVBY2Nlc3MubV9GaWxlTGVuKSByZXR1cm4gRkFMU0U7CisJcmV0dXJuIG1fRmlsZUFjY2Vzcy5tX0dldEJsb2NrKG1fRmlsZUFjY2Vzcy5tX1BhcmFtLCBwb3MsIHBCdWYsIHNpemUpOworfQorCitGWF9CT09MIENQREZfQ3VzdG9tQWNjZXNzOjpSZWFkQmxvY2sodm9pZCogYnVmZmVyLCBGWF9GSUxFU0laRSBvZmZzZXQsIHNpemVfdCBzaXplKQoreworCS8vCW1fRmlsZUFjY2VzcyA9ICpwRmlsZUFjY2VzczsKKwkvLwltX0J1ZmZlck9mZnNldCA9IChGWF9EV09SRCktMTsKKwlpZiAob2Zmc2V0ICsgc2l6ZSA+IG1fRmlsZUFjY2Vzcy5tX0ZpbGVMZW4pIHJldHVybiBGQUxTRTsKKwlyZXR1cm4gbV9GaWxlQWNjZXNzLm1fR2V0QmxvY2sobV9GaWxlQWNjZXNzLm1fUGFyYW0sIG9mZnNldCwoRlhfTFBCWVRFKSBidWZmZXIsIHNpemUpOworCisJLy8JcmV0dXJuIEZBTFNFOworfQorCisvLzAgYml0OiBGUERGX1BPTElDWV9NQUNISU5FVElNRV9BQ0NFU1MKK3N0YXRpYyBGWF9EV09SRCBmb3hpdF9zYW5kYm94X3BvbGljeSA9IDB4RkZGRkZGRkY7CisKK3ZvaWQgRlNES19TZXRTYW5kQm94UG9saWN5KEZQREZfRFdPUkQgcG9saWN5LCBGUERGX0JPT0wgZW5hYmxlKQoreworCXN3aXRjaChwb2xpY3kpCisJeworCWNhc2UgRlBERl9QT0xJQ1lfTUFDSElORVRJTUVfQUNDRVNTOgorCQl7CisJCQlpZihlbmFibGUpCisJCQkJZm94aXRfc2FuZGJveF9wb2xpY3kgfD0gMHgwMTsKKwkJCWVsc2UKKwkJCQlmb3hpdF9zYW5kYm94X3BvbGljeSAmPSAweEZGRkZGRkZFOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworRlBERl9CT09MIEZTREtfSXNTYW5kQm94UG9saWN5RW5hYmxlZChGUERGX0RXT1JEIHBvbGljeSkKK3sKKwlzd2l0Y2gocG9saWN5KQorCXsKKwljYXNlIEZQREZfUE9MSUNZX01BQ0hJTkVUSU1FX0FDQ0VTUzoKKwkJeworCQkJaWYoZm94aXRfc2FuZGJveF9wb2xpY3kmMHgwMSkKKwkJCQlyZXR1cm4gVFJVRTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gRkFMU0U7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiBGQUxTRTsKK30KKworCisjaWZuZGVmIF9UCisjZGVmaW5lIF9UKHgpIHgKKyNlbmRpZgorCisjaWZkZWYgQVBJNQorCUNQREZfTW9kdWxlTWdyKglnX3BNb2R1bGVNZ3IgPSBOVUxMOworI2Vsc2UKKwlDQ29kZWNfTW9kdWxlTWdyKglnX3BDb2RlY01vZHVsZSA9IE5VTEw7CisjaWZkZWYgX0ZYU0RLX09QRU5TT1VSQ0VfCisJRlhNRU1fRm94aXRNZ3IqIGdfcEZveGl0TWdyID0gTlVMTDsKKyNlbmRpZgorI2VuZGlmCisKKy8vZXh0ZXJuIENQREZTREtfRm9ybUZpbGxBcHAqIGdfcEZvcm1GaWxsQXBwOworCisjaWYgX0ZYX09TXyA9PSBfRlhfTElOVVhfRU1CRURERURfCitjbGFzcyBDRm9udE1hcHBlciA6IHB1YmxpYyBJUERGX0ZvbnRNYXBwZXIKK3sKK3B1YmxpYzoKKwlDRm9udE1hcHBlcigpOworCXZpcnR1YWwgfkNGb250TWFwcGVyKCk7CisKKwl2aXJ0dWFsIEZUX0ZhY2UgRmluZFN1YnN0Rm9udCgKKwkJCQkJCQlDUERGX0RvY3VtZW50KiBwRG9jLAkJCQkvLyBbSU5dIFRoZSBQREYgZG9jdW1lbnQKKwkJCQkJCQljb25zdCBDRlhfQnl0ZVN0cmluZyYgZmFjZV9uYW1lLAkvLyBbSU5dIE9yaWdpbmFsIG5hbWUKKwkJCQkJCQlGWF9CT09MIGJUcnVlVHlwZSwJCQkJCS8vIFtJTl0gVHJ1ZVR5cGUgb3IgVHlwZTEKKwkJCQkJCQlGWF9EV09SRCBmbGFncywJCQkJCQkvLyBbSU5dIFBERiBmb250IGZsYWdzIChzZWUgUERGIFJlZmVyZW5jZSBzZWN0aW9uIDUuNy4xKQorCQkJCQkJCWludCBmb250X3dlaWdodCwJCQkJCS8vIFtJTl0gb3JpZ2luYWwgZm9udCB3ZWlnaHQuIDAgZm9yIG5vdCBzcGVjaWZpZWQKKwkJCQkJCQlpbnQgQ2hhcnNldENQLAkJCQkJCS8vIFtJTl0gY29kZSBwYWdlIGZvciBjaGFyc2V0IChzZWUgV2luMzIgR2V0QUNQKCkpCisJCQkJCQkJRlhfQk9PTCBiVmVydGljYWwsCisJCQkJCQkJQ1BERl9TdWJzdEZvbnQqIHBTdWJzdEZvbnQJCQkvLyBbT1VUXSBTdWJzdCBmb250IGRhdGEKKwkJCQkJCSk7CisKKwlGVF9GYWNlIG1fU3lzRmFjZTsKK307CisKK0NGb250TWFwcGVyKiBnX3BGb250TWFwcGVyID0gTlVMTDsKKyNlbmRpZgkJLy8gI2lmIF9GWF9PU18gPT0gX0ZYX0xJTlVYX0VNQkVEREVEXworCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZfSW5pdExpYnJhcnkoRlhfTFBWT0lEIGhJbnN0YW5jZSkKK3sKKyNpZmRlZiBBUEk1CisJQ1BERl9Nb2R1bGVNZ3I6OkNyZWF0ZSgpOworCWdfcE1vZHVsZU1nciA9IENQREZfTW9kdWxlTWdyOjpHZXQoKTsKKwkgI2lmIF9GWF9PU18gPT0gX0ZYX1dJTjMyX01PQklMRV8gfHwgX0ZYX09TXyA9PSBfRlhfTElOVVhfRU1CRURERURfCisJIAlnX3BNb2R1bGVNZ3ItPkluaXRFbWJlZGRlZCgpOworCSAjaWZkZWYgX0dCMV9DTUFQU18KKwkgCWdfcE1vZHVsZU1nci0+TG9hZEVtYmVkZGVkR0IxQ01hcHMoKTsKKwkgI2VuZGlmCisJICNpZmRlZiBfR0IxX0NNQVBTXzRfCisJIAlnX3BNb2R1bGVNZ3ItPkxvYWRFbWJlZGRlZEdCMUNNYXBzXzQoKTsKKwkgI2VuZGlmCisJICNpZmRlZiBfQ05TMV9DTUFQU18KKwkgCWdfcE1vZHVsZU1nci0+TG9hZEVtYmVkZGVkQ05TMUNNYXBzKCk7CisJICNlbmRpZgorCSAjaWZkZWYgX0pBUEFOMV9DTUFQU18KKwkgCWdfcE1vZHVsZU1nci0+TG9hZEVtYmVkZGVkSmFwYW4xQ01hcHMoKTsKKwkgI2VuZGlmCisJICNpZmRlZiBfSkFQQU4xX0NNQVBTXzZfCisJIAlnX3BNb2R1bGVNZ3ItPkxvYWRFbWJlZGRlZEphcGFuMUNNYXBzXzYoKTsKKwkgI2VuZGlmCisJICNpZmRlZiBfS09SRUExX0NNQVBTXworCSAJZ19wTW9kdWxlTWdyLT5Mb2FkRW1iZWRkZWRLb3JlYTFDTWFwcygpOworCSAjZW5kaWYKKwkgI2lmZGVmIF9KUFhfREVDT0RFUl8KKwkgCWdfcE1vZHVsZU1nci0+SW5pdEpweE1vZHVsZSgpOworCSAJZ19wTW9kdWxlTWdyLT5Jbml0SmJpZzJNb2R1bGUoKTsKKwkgLy8JZ19wTW9kdWxlTWdyLT5Jbml0SWNjTW9kdWxlKCk7CisJICNlbmRpZgorCSAjZWxzZQorCSAJZ19wTW9kdWxlTWdyLT5Jbml0RGVza3RvcCgpOworCSAjZW5kaWYKKyNlbHNlCisjaWZkZWYgX0ZYU0RLX09QRU5TT1VSQ0VfCisJZ19wRm94aXRNZ3IgPSBGWE1FTV9DcmVhdGVNZW1vcnlNZ3IoMTAyNCAqIDEwMjQgKiAzMiwgVFJVRSk7CisjZW5kaWYKKwlnX3BDb2RlY01vZHVsZSA9IENDb2RlY19Nb2R1bGVNZ3I6OkNyZWF0ZSgpOworCQorCUNGWF9HRU1vZHVsZTo6Q3JlYXRlKCk7CisJQ0ZYX0dFTW9kdWxlOjpHZXQoKS0+U2V0Q29kZWNNb2R1bGUoZ19wQ29kZWNNb2R1bGUpOworCQorCUNQREZfTW9kdWxlTWdyOjpDcmVhdGUoKTsKKwlDUERGX01vZHVsZU1ncjo6R2V0KCktPlNldENvZGVjTW9kdWxlKGdfcENvZGVjTW9kdWxlKTsKKwlDUERGX01vZHVsZU1ncjo6R2V0KCktPkluaXRQYWdlTW9kdWxlKCk7CisJQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5Jbml0UmVuZGVyTW9kdWxlKCk7CisjaWZkZWYgRk9YSVRfQ0hST01FX0JVSUxECisJQ1BERl9Nb2R1bGVNZ3IgKiBwTW9kdWxlTWdyID0gQ1BERl9Nb2R1bGVNZ3I6OkdldCgpOworCWlmICggcE1vZHVsZU1nciApCisJeworCQlwTW9kdWxlTWdyLT5Mb2FkRW1iZWRkZWRHQjFDTWFwcygpOworCQlwTW9kdWxlTWdyLT5Mb2FkRW1iZWRkZWRKYXBhbjFDTWFwcygpOworCQlwTW9kdWxlTWdyLT5Mb2FkRW1iZWRkZWRDTlMxQ01hcHMoKTsKKwkJcE1vZHVsZU1nci0+TG9hZEVtYmVkZGVkS29yZWExQ01hcHMoKTsKKwl9CisjZW5kaWYgCisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorCS8vIEdldCBtb2R1bGUgcGF0aAorCVRDSEFSIGFwcF9wYXRoW01BWF9QQVRIXTsKKwk6OkdldE1vZHVsZUZpbGVOYW1lKChISU5TVEFOQ0UpaEluc3RhbmNlLCBhcHBfcGF0aCwgTUFYX1BBVEgpOworCXNpemVfdCBsZW4gPSBfdGNzbGVuKGFwcF9wYXRoKTsKKwlmb3IgKHNpemVfdCBpID0gbGVuOyBpID49IDA7IGkgLS0pCisJCWlmIChhcHBfcGF0aFtpXSA9PSAnXFwnKSB7CisJCQlhcHBfcGF0aFtpXSA9IDA7CisJCQlicmVhazsKKwkJfQorCQkKKyNpZmRlZiBfVU5JQ09ERQorCQkjaWZuZGVmIF9GWFNES19PUEVOU09VUkNFXworCQlDUERGX01vZHVsZU1ncjo6R2V0KCktPlNldE1vZHVsZVBhdGgoTlVMTCwgQ0ZYX0J5dGVTdHJpbmc6OkZyb21Vbmljb2RlKGFwcF9wYXRoKSk7CisJCSNlbmRpZgorI2Vsc2UKKyNpZm5kZWYgX0ZYU0RLX09QRU5TT1VSQ0VfCisJCUNQREZfTW9kdWxlTWdyOjpHZXQoKS0+U2V0TW9kdWxlUGF0aChOVUxMLCBhcHBfcGF0aCk7CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCit9CisKKworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX0Rlc3Ryb3lMaWJyYXJ5KCkKK3sKKworI2lmIF9GWF9PU18gPT0gX0ZYX0xJTlVYX0VNQkVEREVEXworCWlmIChnX3BGb250TWFwcGVyKSBkZWxldGUgZ19wRm9udE1hcHBlcjsKKyNlbmRpZgorI2lmZGVmIEFQSTUKKwlnX3BNb2R1bGVNZ3ItPkRlc3Ryb3koKTsKKyNlbHNlCisJQ1BERl9Nb2R1bGVNZ3I6OkRlc3Ryb3koKTsKKwlDRlhfR0VNb2R1bGU6OkRlc3Ryb3koKTsKKwlnX3BDb2RlY01vZHVsZS0+RGVzdHJveSgpOworI2VuZGlmCisjaWZuZGVmIF9GWFNES19PUEVOU09VUkNFXworCUZYTUVNX0NvbGxlY3RBbGwoRlhNRU1fR2V0RGVmYXVsdE1ncigpKTsKKyNlbHNlCisJRlhNRU1fRGVzdHJveUZveGl0TWdyKGdfcEZveGl0TWdyKTsKKyNlbmRpZgorfQorCisjaWZuZGVmIF9XSU4zMgoraW50IGdfTGFzdEVycm9yOwordm9pZCBTZXRMYXN0RXJyb3IoaW50IGVycikKK3sKKwlnX0xhc3RFcnJvciA9IGVycjsKK30KKworaW50IEdldExhc3RFcnJvcigpCit7CisJcmV0dXJuIGdfTGFzdEVycm9yOworfQorI2VuZGlmCisKK3ZvaWQgUHJvY2Vzc1BhcnNlRXJyb3IoRlhfRFdPUkQgZXJyX2NvZGUpCit7CisJLy8gVHJhbnNsYXRlIEZQREZBUEkgZXJyb3IgY29kZSB0byBGUERGVklFVyBlcnJvciBjb2RlCisJc3dpdGNoIChlcnJfY29kZSkgeworCQljYXNlIFBERlBBUlNFX0VSUk9SX0ZJTEU6CisJCQllcnJfY29kZSA9IEZQREZfRVJSX0ZJTEU7CisJCQlicmVhazsKKwkJY2FzZSBQREZQQVJTRV9FUlJPUl9GT1JNQVQ6CisJCQllcnJfY29kZSA9IEZQREZfRVJSX0ZPUk1BVDsKKwkJCWJyZWFrOworCQljYXNlIFBERlBBUlNFX0VSUk9SX1BBU1NXT1JEOgorCQkJZXJyX2NvZGUgPSBGUERGX0VSUl9QQVNTV09SRDsKKwkJCWJyZWFrOworCQljYXNlIFBERlBBUlNFX0VSUk9SX0hBTkRMRVI6CisJCQllcnJfY29kZSA9IEZQREZfRVJSX1NFQ1VSSVRZOworCQkJYnJlYWs7CisJfQorCVNldExhc3RFcnJvcihlcnJfY29kZSk7Cit9CisKK0RMTEVYUE9SVCB2b2lkCVNURENBTEwgRlBERl9TZXRTYW5kQm94UG9saWN5KEZQREZfRFdPUkQgcG9saWN5LCBGUERGX0JPT0wgZW5hYmxlKQoreworCXJldHVybiBGU0RLX1NldFNhbmRCb3hQb2xpY3kocG9saWN5LCBlbmFibGUpOworfQorCitETExFWFBPUlQgRlBERl9ET0NVTUVOVCBTVERDQUxMIEZQREZfTG9hZERvY3VtZW50KEZQREZfU1RSSU5HIGZpbGVfcGF0aCwgRlBERl9CWVRFU1RSSU5HIHBhc3N3b3JkKQoreworCUNQREZfUGFyc2VyKiBwUGFyc2VyID0gRlhfTkVXIENQREZfUGFyc2VyOworCXBQYXJzZXItPlNldFBhc3N3b3JkKHBhc3N3b3JkKTsKKwl0cnkgeworCQlGWF9EV09SRCBlcnJfY29kZSA9IHBQYXJzZXItPlN0YXJ0UGFyc2UoKEZYX0xQQ1NUUilmaWxlX3BhdGgpOworCQlpZiAoZXJyX2NvZGUpIHsKKwkJCWRlbGV0ZSBwUGFyc2VyOworCQkJUHJvY2Vzc1BhcnNlRXJyb3IoZXJyX2NvZGUpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisJY2F0Y2ggKC4uLikgeworCQlkZWxldGUgcFBhcnNlcjsKKwkJU2V0TGFzdEVycm9yKEZQREZfRVJSX1VOS05PV04pOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIHBQYXJzZXItPkdldERvY3VtZW50KCk7Cit9CisKK2V4dGVybiB2b2lkIENoZWNrVW5TdXBwb3J0RXJyb3IoQ1BERl9Eb2N1bWVudCAqIHBEb2MsIEZYX0RXT1JEIGVycl9jb2RlKTsKKworY2xhc3MgQ01lbUZpbGU6IHB1YmxpYyBJRlhfRmlsZVJlYWQsIHB1YmxpYyBDRlhfT2JqZWN0Cit7CitwdWJsaWM6CisJQ01lbUZpbGUoRlhfQllURSogcEJ1ZiwgRlhfRklMRVNJWkUgc2l6ZSk6bV9wQnVmKHBCdWYpLG1fc2l6ZShzaXplKSB7fQorCisJdmlydHVhbCB2b2lkCQkJUmVsZWFzZSgpIHtkZWxldGUgdGhpczt9CisJdmlydHVhbCBGWF9GSUxFU0laRQkJR2V0U2l6ZSgpIHtyZXR1cm4gbV9zaXplO30KKwl2aXJ0dWFsIEZYX0JPT0wJCQlSZWFkQmxvY2sodm9pZCogYnVmZmVyLCBGWF9GSUxFU0laRSBvZmZzZXQsIHNpemVfdCBzaXplKSAKKwl7CisJCWlmKG9mZnNldCtzaXplID4gKEZYX0RXT1JEKW1fc2l6ZSkgcmV0dXJuIEZBTFNFOworCQlGWFNZU19tZW1jcHkoYnVmZmVyLCBtX3BCdWYrb2Zmc2V0LCBzaXplKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorcHJpdmF0ZToKKwlGWF9CWVRFKiBtX3BCdWY7CisJRlhfRklMRVNJWkUgbV9zaXplOworfTsKK0RMTEVYUE9SVCBGUERGX0RPQ1VNRU5UIFNURENBTEwgRlBERl9Mb2FkTWVtRG9jdW1lbnQoY29uc3Qgdm9pZCogZGF0YV9idWYsIGludCBzaXplLCBGUERGX0JZVEVTVFJJTkcgcGFzc3dvcmQpCit7CisJQ1BERl9QYXJzZXIqIHBQYXJzZXIgPSBGWF9ORVcgQ1BERl9QYXJzZXI7CisJcFBhcnNlci0+U2V0UGFzc3dvcmQocGFzc3dvcmQpOworCXRyeSB7CisJCUNNZW1GaWxlKiBwTWVtRmlsZSA9IEZYX05FVyBDTWVtRmlsZSgoRlhfQllURSopZGF0YV9idWYsIHNpemUpOworCQlGWF9EV09SRCBlcnJfY29kZSA9IHBQYXJzZXItPlN0YXJ0UGFyc2UocE1lbUZpbGUpOworCQlpZiAoZXJyX2NvZGUpIHsKKwkJCWRlbGV0ZSBwUGFyc2VyOworCQkJUHJvY2Vzc1BhcnNlRXJyb3IoZXJyX2NvZGUpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJQ1BERl9Eb2N1bWVudCAqIHBEb2MgPSBOVUxMOworCQlwRG9jID0gcFBhcnNlcj9wUGFyc2VyLT5HZXREb2N1bWVudCgpOk5VTEw7CisJCUNoZWNrVW5TdXBwb3J0RXJyb3IocERvYywgZXJyX2NvZGUpOworCX0KKwljYXRjaCAoLi4uKSB7CisJCWRlbGV0ZSBwUGFyc2VyOworCQlTZXRMYXN0RXJyb3IoRlBERl9FUlJfVU5LTk9XTik7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gcFBhcnNlci0+R2V0RG9jdW1lbnQoKTsKK30KKworRExMRVhQT1JUIEZQREZfRE9DVU1FTlQgU1REQ0FMTCBGUERGX0xvYWRDdXN0b21Eb2N1bWVudChGUERGX0ZJTEVBQ0NFU1MqIHBGaWxlQWNjZXNzLCBGUERGX0JZVEVTVFJJTkcgcGFzc3dvcmQpCit7CisJQ1BERl9QYXJzZXIqIHBQYXJzZXIgPSBGWF9ORVcgQ1BERl9QYXJzZXI7CisJcFBhcnNlci0+U2V0UGFzc3dvcmQocGFzc3dvcmQpOworCUNQREZfQ3VzdG9tQWNjZXNzKiBwRmlsZSA9IEZYX05FVyBDUERGX0N1c3RvbUFjY2VzcyhwRmlsZUFjY2Vzcyk7CisJdHJ5IHsKKwkJRlhfRFdPUkQgZXJyX2NvZGUgPSBwUGFyc2VyLT5TdGFydFBhcnNlKHBGaWxlKTsKKwkJaWYgKGVycl9jb2RlKSB7CisJCQlkZWxldGUgcFBhcnNlcjsKKwkJCVByb2Nlc3NQYXJzZUVycm9yKGVycl9jb2RlKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCUNQREZfRG9jdW1lbnQgKiBwRG9jID0gTlVMTDsKKwkJcERvYyA9IHBQYXJzZXI/cFBhcnNlci0+R2V0RG9jdW1lbnQoKTpOVUxMOworCQlDaGVja1VuU3VwcG9ydEVycm9yKHBEb2MsIGVycl9jb2RlKTsKKwl9CisJY2F0Y2ggKC4uLikgeworCQlkZWxldGUgcFBhcnNlcjsKKwkJU2V0TGFzdEVycm9yKEZQREZfRVJSX1VOS05PV04pOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIHBQYXJzZXItPkdldERvY3VtZW50KCk7Cit9CisKK0RMTEVYUE9SVCBGUERGX0JPT0wgU1REQ0FMTCBGUERGX0dldEZpbGVWZXJzaW9uKEZQREZfRE9DVU1FTlQgZG9jLCBpbnQqIGZpbGVWZXJzaW9uKQoreworCWlmKCFkb2N8fCFmaWxlVmVyc2lvbikgcmV0dXJuIEZBTFNFOworCSpmaWxlVmVyc2lvbiA9IDA7CisJQ1BERl9Eb2N1bWVudCogcERvYyA9IChDUERGX0RvY3VtZW50Kilkb2M7CisJQ1BERl9QYXJzZXIqIHBQYXJzZXIgPSAoQ1BERl9QYXJzZXIqKXBEb2MtPkdldFBhcnNlcigpOworCWlmKCFwUGFyc2VyKQorCQlyZXR1cm4gRkFMU0U7CisJKmZpbGVWZXJzaW9uID0gcFBhcnNlci0+R2V0RmlsZVZlcnNpb24oKTsKKwlyZXR1cm4gVFJVRTsKK30KKworLy8gamFiZGVsbWFsZWs6IGNoYW5nZWQgcmV0dXJuIHR5cGUgZnJvbSBGWF9EV09SRCB0byBidWlsZCBvbiBMaW51eCAoYW5kIG1hdGNoIGhlYWRlcikuCitETExFWFBPUlQgdW5zaWduZWQgbG9uZyBTVERDQUxMIEZQREZfR2V0RG9jUGVybWlzc2lvbnMoRlBERl9ET0NVTUVOVCBkb2N1bWVudCkKK3sKKwlpZiAoZG9jdW1lbnQgPT0gTlVMTCkgcmV0dXJuIDA7CisJQ1BERl9Eb2N1bWVudCpwRG9jID0gKENQREZfRG9jdW1lbnQqKWRvY3VtZW50OworCUNQREZfUGFyc2VyKiBwUGFyc2VyID0gCShDUERGX1BhcnNlciopcERvYy0+R2V0UGFyc2VyKCk7CisJQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IHBQYXJzZXItPkdldEVuY3J5cHREaWN0KCk7CisJaWYgKHBEaWN0ID09IE5VTEwpIHJldHVybiAoRlhfRFdPUkQpLTE7CisKKwlyZXR1cm4gcERpY3QtPkdldEludGVnZXIoIlAiKTsKK30KKworRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZfR2V0UGFnZUNvdW50KEZQREZfRE9DVU1FTlQgZG9jdW1lbnQpCit7CisJaWYgKGRvY3VtZW50ID09IE5VTEwpIHJldHVybiAwOworCXJldHVybiAoKENQREZfRG9jdW1lbnQqKWRvY3VtZW50KS0+R2V0UGFnZUNvdW50KCk7Cit9CisKK0RMTEVYUE9SVCBGUERGX1BBR0UgU1REQ0FMTCBGUERGX0xvYWRQYWdlKEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsIGludCBwYWdlX2luZGV4KQoreworCWlmIChkb2N1bWVudCA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKwlpZiAocGFnZV9pbmRleCA8IDAgfHwgcGFnZV9pbmRleCA+PSBGUERGX0dldFBhZ2VDb3VudChkb2N1bWVudCkpIHJldHVybiBOVUxMOworLy8JQ1BERl9QYXJzZXIqIHBQYXJzZXIgPSAoQ1BERl9QYXJzZXIqKWRvY3VtZW50OworCUNQREZfRG9jdW1lbnQqIHBEb2MgPSAoQ1BERl9Eb2N1bWVudCopZG9jdW1lbnQ7CisJaWYgKHBEb2MgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisJQ1BERl9EaWN0aW9uYXJ5KiBwRGljdCA9IHBEb2MtPkdldFBhZ2UocGFnZV9pbmRleCk7CisJaWYgKHBEaWN0ID09IE5VTEwpIHJldHVybiBOVUxMOworCUNQREZfUGFnZSogcFBhZ2UgPSBGWF9ORVcgQ1BERl9QYWdlOworCXBQYWdlLT5Mb2FkKHBEb2MsIHBEaWN0KTsKKwl0cnkgeworCQlwUGFnZS0+UGFyc2VDb250ZW50KCk7CisJfQorCWNhdGNoICguLi4pIHsKKwkJZGVsZXRlIHBQYWdlOworCQlyZXR1cm4gTlVMTDsKKwl9CisJCisvLwlDaGVja1VuU3VwcG9ydEVycm9yKHBEb2MsIDApOworCisJcmV0dXJuIHBQYWdlOworfQorCitETExFWFBPUlQgZG91YmxlIFNURENBTEwgRlBERl9HZXRQYWdlV2lkdGgoRlBERl9QQUdFIHBhZ2UpCit7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gMC4wOworCXJldHVybiAoKENQREZfUGFnZSopcGFnZSktPkdldFBhZ2VXaWR0aCgpOworfQorCitETExFWFBPUlQgZG91YmxlIFNURENBTEwgRlBERl9HZXRQYWdlSGVpZ2h0KEZQREZfUEFHRSBwYWdlKQoreworCWlmICghcGFnZSkgcmV0dXJuIDAuMDsKKwlyZXR1cm4gKChDUERGX1BhZ2UqKXBhZ2UpLT5HZXRQYWdlSGVpZ2h0KCk7Cit9CisKK3ZvaWQgRHJvcENvbnRleHQodm9pZCogZGF0YSkKK3sKKwlkZWxldGUgKENSZW5kZXJDb250ZXh0KilkYXRhOworfQorCit2b2lkIEZQREZfUmVuZGVyUGFnZV9SZXRhaWwoQ1JlbmRlckNvbnRleHQqIHBDb250ZXh0LCBGUERGX1BBR0UgcGFnZSwgaW50IHN0YXJ0X3gsIGludCBzdGFydF95LCBpbnQgc2l6ZV94LCBpbnQgc2l6ZV95LAorCQkJCQkJaW50IHJvdGF0ZSwgaW50IGZsYWdzLEZYX0JPT0wgYk5lZWRUb1Jlc3RvcmUsIElGU0RLX1BBVVNFX0FkYXB0ZXIgKiBwYXVzZSAgKTsKK3ZvaWQgKCpGdW5jX1JlbmRlclBhZ2UpKENSZW5kZXJDb250ZXh0KiwgRlBERl9QQUdFIHBhZ2UsIGludCBzdGFydF94LCBpbnQgc3RhcnRfeSwgaW50IHNpemVfeCwgaW50IHNpemVfeSwKKwkJCQkJCWludCByb3RhdGUsIGludCBmbGFncyxGWF9CT09MIGJOZWVkVG9SZXN0b3JlLCBJRlNES19QQVVTRV9BZGFwdGVyICogcGF1c2UgICkgPSBGUERGX1JlbmRlclBhZ2VfUmV0YWlsOworCisjaWYgZGVmaW5lZChfREVCVUcpIHx8IGRlZmluZWQoREVCVUcpCisjZGVmaW5lIERFQlVHX1RSQUNFCisjZW5kaWYKKworI2lmIGRlZmluZWQoX1dJTjMyKQorRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX1JlbmRlclBhZ2UoSERDIGRjLCBGUERGX1BBR0UgcGFnZSwgaW50IHN0YXJ0X3gsIGludCBzdGFydF95LCBpbnQgc2l6ZV94LCBpbnQgc2l6ZV95LAorCQkJCQkJaW50IHJvdGF0ZSwgaW50IGZsYWdzKQoreworCWlmIChwYWdlPT1OVUxMKSByZXR1cm47CisJQ1BERl9QYWdlKiBwUGFnZSA9IChDUERGX1BhZ2UqKXBhZ2U7CisKKwlDUmVuZGVyQ29udGV4dCogcENvbnRleHQgPSBGWF9ORVcgQ1JlbmRlckNvbnRleHQ7CisJcFBhZ2UtPlNldFByaXZhdGVEYXRhKCh2b2lkKikxLCBwQ29udGV4dCwgRHJvcENvbnRleHQpOworCisjaWZuZGVmIF9XSU4zMl9XQ0UKKwlDRlhfRElCaXRtYXAqIHBCaXRtYXAgPSBOVUxMOworCUZYX0JPT0wgYkJhY2tncm91bmRBbHBoYU5lZWRlZD1GQUxTRTsKKwliQmFja2dyb3VuZEFscGhhTmVlZGVkID0gcFBhZ2UtPkJhY2tncm91bmRBbHBoYU5lZWRlZCgpOworCWlmIChiQmFja2dyb3VuZEFscGhhTmVlZGVkKQorCXsKKwkJCisJCXBCaXRtYXAgPSBGWF9ORVcgQ0ZYX0RJQml0bWFwOworCQlwQml0bWFwLT5DcmVhdGUoc2l6ZV94LCBzaXplX3ksIEZYRElCX0FyZ2IpOworCQlwQml0bWFwLT5DbGVhcigweDAwZmZmZmZmKTsKKyNpZmRlZiBfU0tJQV9TVVBQT1JUXworCQlwQ29udGV4dC0+bV9wRGV2aWNlID0gRlhfTkVXIENGWF9Ta2lhRGV2aWNlOworCQkoKENGWF9Ta2lhRGV2aWNlKilwQ29udGV4dC0+bV9wRGV2aWNlKS0+QXR0YWNoKChDRlhfRElCaXRtYXAqKXBCaXRtYXApOworI2Vsc2UKKwkJcENvbnRleHQtPm1fcERldmljZSA9IEZYX05FVyBDRlhfRnhnZURldmljZTsKKwkJKChDRlhfRnhnZURldmljZSopcENvbnRleHQtPm1fcERldmljZSktPkF0dGFjaCgoQ0ZYX0RJQml0bWFwKilwQml0bWFwKTsKKyNlbmRpZgorCX0KKwllbHNlCisJcENvbnRleHQtPm1fcERldmljZSA9IEZYX05FVyBDRlhfV2luZG93c0RldmljZShkYyk7CisJaWYgKGZsYWdzICYgRlBERl9OT19DQVRDSCkKKwkJRnVuY19SZW5kZXJQYWdlKHBDb250ZXh0LCBwYWdlLCBzdGFydF94LCBzdGFydF95LCBzaXplX3gsIHNpemVfeSwgcm90YXRlLCBmbGFncyxUUlVFLE5VTEwpOworCWVsc2UgeworCQl0cnkgeworCQkJRnVuY19SZW5kZXJQYWdlKHBDb250ZXh0LCBwYWdlLCBzdGFydF94LCBzdGFydF95LCBzaXplX3gsIHNpemVfeSwgcm90YXRlLCBmbGFncyxUUlVFLE5VTEwpOworCQl9IGNhdGNoICguLi4pIHsKKwkJfQorCX0KKwlpZiAoYkJhY2tncm91bmRBbHBoYU5lZWRlZCkgCisJeworCQlpZiAocEJpdG1hcCkKKwkJeworCQkJQ0ZYX1dpbmRvd3NEZXZpY2UgV2luREMoZGMpOworCQkJCisgCQkJaWYgKFdpbkRDLkdldERldmljZUNhcHMoRlhEQ19ERVZJQ0VfQ0xBU1MpID09IEZYRENfUFJJTlRFUikKKyAJCQl7CisJCQkJQ0ZYX0RJQml0bWFwKiBwRHN0ID0gRlhfTkVXIENGWF9ESUJpdG1hcDsKKwkJCQlwRHN0LT5DcmVhdGUocEJpdG1hcC0+R2V0V2lkdGgoKSwgcEJpdG1hcC0+R2V0SGVpZ2h0KCksRlhESUJfUmdiMzIpOworCQkJCUZYU1lTX21lbWNweShwRHN0LT5HZXRCdWZmZXIoKSwgcEJpdG1hcC0+R2V0QnVmZmVyKCksIHBCaXRtYXAtPkdldFBpdGNoKCkqcEJpdG1hcC0+R2V0SGVpZ2h0KCkpOworLy8JCQkJV2luREMuU2V0RElCaXRzKHBEc3QsMCwwKTsKKwkJCQlXaW5EQy5TdHJldGNoRElCaXRzKHBEc3QsMCwwLHNpemVfeCoyLHNpemVfeSoyKTsKKwkJCQlkZWxldGUgcERzdDsKKyAJCQl9CisgCQkJZWxzZQorIAkJCQlXaW5EQy5TZXRESUJpdHMocEJpdG1hcCwwLDApOworCisJCX0KKwl9CisjZWxzZQorCS8vIGdldCBjbGlwIHJlZ2lvbgorCVJFQ1QgcmVjdCwgY2xpcHJlY3Q7CisJcmVjdC5sZWZ0ID0gc3RhcnRfeDsKKwlyZWN0LnRvcCA9IHN0YXJ0X3k7CisJcmVjdC5yaWdodCA9IHN0YXJ0X3ggKyBzaXplX3g7CisJcmVjdC5ib3R0b20gPSBzdGFydF95ICsgc2l6ZV95OworCUdldENsaXBCb3goZGMsICZjbGlwcmVjdCk7CisJSW50ZXJzZWN0UmVjdCgmcmVjdCwgJnJlY3QsICZjbGlwcmVjdCk7CisJaW50IHdpZHRoID0gcmVjdC5yaWdodCAtIHJlY3QubGVmdDsKKwlpbnQgaGVpZ2h0ID0gcmVjdC5ib3R0b20gLSByZWN0LnRvcDsKKworI2lmZGVmIERFQlVHX1RSQUNFCisJeworCQljaGFyIHN0clsxMjhdOworCQlzcHJpbnRmKHN0ciwgIlJlbmRlcmluZyBESUIgJWQgeCAlZCIsIHdpZHRoLCBoZWlnaHQpOworCQlDUERGX01vZHVsZU1ncjo6R2V0KCktPlJlcG9ydEVycm9yKDk5OSwgc3RyKTsKKwl9CisjZW5kaWYKKworCS8vIENyZWF0ZSBhIERJQiBzZWN0aW9uCisJTFBWT0lEIHBCdWZmZXI7CisJQklUTUFQSU5GT0hFQURFUiBibWloOworCUZYU1lTX21lbXNldCgmYm1paCwgMCwgc2l6ZW9mIGJtaWgpOworCWJtaWguYmlTaXplID0gc2l6ZW9mIGJtaWg7CisJYm1paC5iaUJpdENvdW50ID0gMjQ7CisJYm1paC5iaUhlaWdodCA9IC1oZWlnaHQ7CisJYm1paC5iaVBsYW5lcyA9IDE7CisJYm1paC5iaVdpZHRoID0gd2lkdGg7CisJcENvbnRleHQtPm1faEJpdG1hcCA9IENyZWF0ZURJQlNlY3Rpb24oZGMsIChCSVRNQVBJTkZPKikmYm1paCwgRElCX1JHQl9DT0xPUlMsICZwQnVmZmVyLCBOVUxMLCAwKTsKKwlpZiAocENvbnRleHQtPm1faEJpdG1hcCA9PSBOVUxMKSB7CisjaWYgZGVmaW5lZChERUJVRykgfHwgZGVmaW5lZChfREVCVUcpCisJCWNoYXIgc3RyWzEyOF07CisJCXNwcmludGYoc3RyLCAiRXJyb3IgQ3JlYXRlRElCU2VjdGlvbjogJWQgeCAlZCwgZXJyb3IgY29kZSA9ICVkIiwgd2lkdGgsIGhlaWdodCwgR2V0TGFzdEVycm9yKCkpOworCQlDUERGX01vZHVsZU1ncjo6R2V0KCktPlJlcG9ydEVycm9yKEZQREZFUlJfT1VUX09GX01FTU9SWSwgc3RyKTsKKyNlbHNlCisJCUNQREZfTW9kdWxlTWdyOjpHZXQoKS0+UmVwb3J0RXJyb3IoRlBERkVSUl9PVVRfT0ZfTUVNT1JZLCBOVUxMKTsKKyNlbmRpZgorCX0KKwlGWFNZU19tZW1zZXQocEJ1ZmZlciwgMHhmZiwgaGVpZ2h0Kigod2lkdGgqMyszKS80KjQpKTsKKworI2lmZGVmIERFQlVHX1RSQUNFCisJeworCQlDUERGX01vZHVsZU1ncjo6R2V0KCktPlJlcG9ydEVycm9yKDk5OSwgIkRJQlNlY3Rpb24gY3JlYXRlZCIpOworCX0KKyNlbmRpZgorCisJLy8gQ3JlYXRlIGEgZGV2aWNlIHdpdGggdGhpcyBleHRlcm5hbCBidWZmZXIKKwlwQ29udGV4dC0+bV9wQml0bWFwID0gRlhfTkVXIENGWF9ESUJpdG1hcDsKKwlwQ29udGV4dC0+bV9wQml0bWFwLT5DcmVhdGUod2lkdGgsIGhlaWdodCwgRlhESUJfUmdiLCAoRlhfTFBCWVRFKXBCdWZmZXIpOworCXBDb250ZXh0LT5tX3BEZXZpY2UgPSBGWF9ORVcgQ1BERl9GeGdlRGV2aWNlOworCSgoQ1BERl9GeGdlRGV2aWNlKilwQ29udGV4dC0+bV9wRGV2aWNlKS0+QXR0YWNoKHBDb250ZXh0LT5tX3BCaXRtYXApOworCQorI2lmZGVmIERFQlVHX1RSQUNFCisJQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5SZXBvcnRFcnJvcig5OTksICJSZWFkeSBmb3IgUERGIHJlbmRlcmluZyIpOworI2VuZGlmCisKKwkvLyBvdXRwdXQgdG8gYml0bWFwIGRldmljZQorCWlmIChmbGFncyAmIEZQREZfTk9fQ0FUQ0gpCisJCUZ1bmNfUmVuZGVyUGFnZShwQ29udGV4dCwgcGFnZSwgc3RhcnRfeCAtIHJlY3QubGVmdCwgc3RhcnRfeSAtIHJlY3QudG9wLCBzaXplX3gsIHNpemVfeSwgcm90YXRlLCBmbGFncyk7CisJZWxzZSB7CisJCXRyeSB7CisJCQlGdW5jX1JlbmRlclBhZ2UocENvbnRleHQsIHBhZ2UsIHN0YXJ0X3ggLSByZWN0LmxlZnQsIHN0YXJ0X3kgLSByZWN0LnRvcCwgc2l6ZV94LCBzaXplX3ksIHJvdGF0ZSwgZmxhZ3MpOworCQl9IGNhdGNoICguLi4pIHsKKwkJfQorCX0KKworI2lmZGVmIERFQlVHX1RSQUNFCisJQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5SZXBvcnRFcnJvcig5OTksICJGaW5pc2hlZCBQREYgcmVuZGVyaW5nIik7CisjZW5kaWYKKworCS8vIE5vdyBvdXRwdXQgdG8gcmVhbCBkZXZpY2UKKwlIREMgaE1lbURDID0gQ3JlYXRlQ29tcGF0aWJsZURDKGRjKTsKKwlpZiAoaE1lbURDID09IE5VTEwpIHsKKyNpZiBkZWZpbmVkKERFQlVHKSB8fCBkZWZpbmVkKF9ERUJVRykKKwkJY2hhciBzdHJbMTI4XTsKKwkJc3ByaW50ZihzdHIsICJFcnJvciBDcmVhdGVDb21wYXRpYmxlREMuIEVycm9yIGNvZGUgPSAlZCIsIEdldExhc3RFcnJvcigpKTsKKwkJQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5SZXBvcnRFcnJvcihGUERGRVJSX09VVF9PRl9NRU1PUlksIHN0cik7CisjZWxzZQorCQlDUERGX01vZHVsZU1ncjo6R2V0KCktPlJlcG9ydEVycm9yKEZQREZFUlJfT1VUX09GX01FTU9SWSwgTlVMTCk7CisjZW5kaWYKKwl9CisKKwlIR0RJT0JKIGhPbGRCaXRtYXAgPSBTZWxlY3RPYmplY3QoaE1lbURDLCBwQ29udGV4dC0+bV9oQml0bWFwKTsKKworI2lmZGVmIERFQlVHX1RSQUNFCisJQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5SZXBvcnRFcnJvcig5OTksICJSZWFkeSBmb3Igc2NyZWVuIHJlbmRlcmluZyIpOworI2VuZGlmCisKKwlCaXRCbHQoZGMsIHJlY3QubGVmdCwgcmVjdC50b3AsIHdpZHRoLCBoZWlnaHQsIGhNZW1EQywgMCwgMCwgU1JDQ09QWSk7CisJU2VsZWN0T2JqZWN0KGhNZW1EQywgaE9sZEJpdG1hcCk7CisJRGVsZXRlREMoaE1lbURDKTsKKworI2lmZGVmIERFQlVHX1RSQUNFCisJQ1BERl9Nb2R1bGVNZ3I6OkdldCgpLT5SZXBvcnRFcnJvcig5OTksICJGaW5pc2hlZCBzY3JlZW4gcmVuZGVyaW5nIik7CisjZW5kaWYKKworI2VuZGlmCisJaWYgKGJCYWNrZ3JvdW5kQWxwaGFOZWVkZWQpCisJeworCQlpZiAocEJpdG1hcCkKKwkJCWRlbGV0ZSBwQml0bWFwOworCQlwQml0bWFwID0gTlVMTDsKKwl9CisJZGVsZXRlIHBDb250ZXh0OworCXBQYWdlLT5SZW1vdmVQcml2YXRlRGF0YSgodm9pZCopMSk7Cit9CisjZW5kaWYKKworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX1JlbmRlclBhZ2VCaXRtYXAoRlBERl9CSVRNQVAgYml0bWFwLCBGUERGX1BBR0UgcGFnZSwgaW50IHN0YXJ0X3gsIGludCBzdGFydF95LCAKKwkJCQkJCWludCBzaXplX3gsIGludCBzaXplX3ksIGludCByb3RhdGUsIGludCBmbGFncykKK3sKKwlpZiAoYml0bWFwID09IE5VTEwgfHwgcGFnZSA9PSBOVUxMKSByZXR1cm47CisJQ1BERl9QYWdlKiBwUGFnZSA9IChDUERGX1BhZ2UqKXBhZ2U7CisKKworCUNSZW5kZXJDb250ZXh0KiBwQ29udGV4dCA9IEZYX05FVyBDUmVuZGVyQ29udGV4dDsKKwlwUGFnZS0+U2V0UHJpdmF0ZURhdGEoKHZvaWQqKTEsIHBDb250ZXh0LCBEcm9wQ29udGV4dCk7CisjaWZkZWYgX1NLSUFfU1VQUE9SVF8KKwlwQ29udGV4dC0+bV9wRGV2aWNlID0gRlhfTkVXIENGWF9Ta2lhRGV2aWNlOworCisJaWYgKGZsYWdzICYgRlBERl9SRVZFUlNFX0JZVEVfT1JERVIpCisJCSgoQ0ZYX1NraWFEZXZpY2UqKXBDb250ZXh0LT5tX3BEZXZpY2UpLT5BdHRhY2goKENGWF9ESUJpdG1hcCopYml0bWFwLDAsVFJVRSk7CisJZWxzZQorCQkoKENGWF9Ta2lhRGV2aWNlKilwQ29udGV4dC0+bV9wRGV2aWNlKS0+QXR0YWNoKChDRlhfRElCaXRtYXAqKWJpdG1hcCk7CisjZWxzZQorCXBDb250ZXh0LT5tX3BEZXZpY2UgPSBGWF9ORVcgQ0ZYX0Z4Z2VEZXZpY2U7CisKKwlpZiAoZmxhZ3MgJiBGUERGX1JFVkVSU0VfQllURV9PUkRFUikKKwkJKChDRlhfRnhnZURldmljZSopcENvbnRleHQtPm1fcERldmljZSktPkF0dGFjaCgoQ0ZYX0RJQml0bWFwKiliaXRtYXAsMCxUUlVFKTsKKwllbHNlCisJCSgoQ0ZYX0Z4Z2VEZXZpY2UqKXBDb250ZXh0LT5tX3BEZXZpY2UpLT5BdHRhY2goKENGWF9ESUJpdG1hcCopYml0bWFwKTsKKyNlbmRpZgorCWlmIChmbGFncyAmIEZQREZfTk9fQ0FUQ0gpCisJCUZ1bmNfUmVuZGVyUGFnZShwQ29udGV4dCwgcGFnZSwgc3RhcnRfeCwgc3RhcnRfeSwgc2l6ZV94LCBzaXplX3ksIHJvdGF0ZSwgZmxhZ3MsVFJVRSxOVUxMKTsKKwllbHNlIHsKKwkJdHJ5IHsKKwkJCUZ1bmNfUmVuZGVyUGFnZShwQ29udGV4dCwgcGFnZSwgc3RhcnRfeCwgc3RhcnRfeSwgc2l6ZV94LCBzaXplX3ksIHJvdGF0ZSwgZmxhZ3MsVFJVRSxOVUxMKTsKKwkJfSBjYXRjaCAoLi4uKSB7CisJCX0KKwl9CisKKwlkZWxldGUgcENvbnRleHQ7CisJcFBhZ2UtPlJlbW92ZVByaXZhdGVEYXRhKCh2b2lkKikxKTsKK30KKworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX0Nsb3NlUGFnZShGUERGX1BBR0UgcGFnZSkKK3sKKwlpZiAoIXBhZ2UpIHJldHVybjsKKwlkZWxldGUgKENQREZfUGFnZSopcGFnZTsKKworfQorCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZfQ2xvc2VEb2N1bWVudChGUERGX0RPQ1VNRU5UIGRvY3VtZW50KQoreworCWlmICghZG9jdW1lbnQpCisJCXJldHVybjsKKwlDUERGX0RvY3VtZW50KiBwRG9jID0gKENQREZfRG9jdW1lbnQqKWRvY3VtZW50OwkKKwlDUERGX1BhcnNlciogcFBhcnNlciA9IChDUERGX1BhcnNlciopcERvYy0+R2V0UGFyc2VyKCk7CisJaWYgKHBQYXJzZXIgPT0gTlVMTCkgCisJeworCQlkZWxldGUgcERvYzsKKwkJcmV0dXJuOworCX0KKwlkZWxldGUgcFBhcnNlcjsKKy8vCWRlbGV0ZSBwRG9jOworfQorCitETExFWFBPUlQgdW5zaWduZWQgbG9uZyBTVERDQUxMIEZQREZfR2V0TGFzdEVycm9yKCkKK3sKKwlyZXR1cm4gR2V0TGFzdEVycm9yKCk7Cit9CisKK0RMTEVYUE9SVCB2b2lkIFNURENBTEwgRlBERl9EZXZpY2VUb1BhZ2UoRlBERl9QQUdFIHBhZ2UsIGludCBzdGFydF94LCBpbnQgc3RhcnRfeSwgaW50IHNpemVfeCwgaW50IHNpemVfeSwKKwkJCQkJCWludCByb3RhdGUsIGludCBkZXZpY2VfeCwgaW50IGRldmljZV95LCBkb3VibGUqIHBhZ2VfeCwgZG91YmxlKiBwYWdlX3kpCit7CisJaWYgKHBhZ2UgPT0gTlVMTCB8fCBwYWdlX3ggPT0gTlVMTCB8fCBwYWdlX3kgPT0gTlVMTCkgcmV0dXJuOworCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOworCisJQ1BERl9NYXRyaXggcGFnZTJkZXZpY2U7CisJcFBhZ2UtPkdldERpc3BsYXlNYXRyaXgocGFnZTJkZXZpY2UsIHN0YXJ0X3gsIHN0YXJ0X3ksIHNpemVfeCwgc2l6ZV95LCByb3RhdGUpOworCUNQREZfTWF0cml4IGRldmljZTJwYWdlOworCWRldmljZTJwYWdlLlNldFJldmVyc2UocGFnZTJkZXZpY2UpOworCisJRlhfRkxPQVQgcGFnZV94X2YsIHBhZ2VfeV9mOworCWRldmljZTJwYWdlLlRyYW5zZm9ybSgoRlhfRkxPQVQpKGRldmljZV94KSwgKEZYX0ZMT0FUKShkZXZpY2VfeSksIHBhZ2VfeF9mLCBwYWdlX3lfZik7CisKKwkqcGFnZV94ID0gKHBhZ2VfeF9mKTsKKwkqcGFnZV95ID0gKHBhZ2VfeV9mKTsKK30KKworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGX1BhZ2VUb0RldmljZShGUERGX1BBR0UgcGFnZSwgaW50IHN0YXJ0X3gsIGludCBzdGFydF95LCBpbnQgc2l6ZV94LCBpbnQgc2l6ZV95LAorCQkJCQkJaW50IHJvdGF0ZSwgZG91YmxlIHBhZ2VfeCwgZG91YmxlIHBhZ2VfeSwgaW50KiBkZXZpY2VfeCwgaW50KiBkZXZpY2VfeSkKK3sKKwlpZiAocGFnZSA9PSBOVUxMIHx8IGRldmljZV94ID09IE5VTEwgfHwgZGV2aWNlX3kgPT0gTlVMTCkgcmV0dXJuOworCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwYWdlOworCisJQ1BERl9NYXRyaXggcGFnZTJkZXZpY2U7CisJcFBhZ2UtPkdldERpc3BsYXlNYXRyaXgocGFnZTJkZXZpY2UsIHN0YXJ0X3gsIHN0YXJ0X3ksIHNpemVfeCwgc2l6ZV95LCByb3RhdGUpOworCisJRlhfRkxPQVQgZGV2aWNlX3hfZiwgZGV2aWNlX3lfZjsKKwlwYWdlMmRldmljZS5UcmFuc2Zvcm0oKChGWF9GTE9BVClwYWdlX3gpLCAoKEZYX0ZMT0FUKXBhZ2VfeSksIGRldmljZV94X2YsIGRldmljZV95X2YpOworCisJKmRldmljZV94ID0gRlhTWVNfcm91bmQoZGV2aWNlX3hfZik7CisJKmRldmljZV95ID0gRlhTWVNfcm91bmQoZGV2aWNlX3lfZik7Cit9CisKK0RMTEVYUE9SVCBGUERGX0JJVE1BUCBTVERDQUxMIEZQREZCaXRtYXBfQ3JlYXRlKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGFscGhhKQoreworCUNGWF9ESUJpdG1hcCogcEJpdG1hcCA9IEZYX05FVyBDRlhfRElCaXRtYXA7CisJcEJpdG1hcC0+Q3JlYXRlKHdpZHRoLCBoZWlnaHQsIGFscGhhID8gRlhESUJfQXJnYiA6IEZYRElCX1JnYjMyKTsKKwlyZXR1cm4gcEJpdG1hcDsKK30KKworRExMRVhQT1JUIEZQREZfQklUTUFQIFNURENBTEwgRlBERkJpdG1hcF9DcmVhdGVFeChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmb3JtYXQsIHZvaWQqIGZpcnN0X3NjYW4sIGludCBzdHJpZGUpCit7CisJRlhESUJfRm9ybWF0IGZ4X2Zvcm1hdDsKKwlzd2l0Y2ggKGZvcm1hdCkgeworCQljYXNlIEZQREZCaXRtYXBfR3JheToKKwkJCWZ4X2Zvcm1hdCA9IEZYRElCXzhicHBSZ2I7CisJCQlicmVhazsKKwkJY2FzZSBGUERGQml0bWFwX0JHUjoKKwkJCWZ4X2Zvcm1hdCA9IEZYRElCX1JnYjsKKwkJCWJyZWFrOworCQljYXNlIEZQREZCaXRtYXBfQkdSeDoKKwkJCWZ4X2Zvcm1hdCA9IEZYRElCX1JnYjMyOworCQkJYnJlYWs7CisJCWNhc2UgRlBERkJpdG1hcF9CR1JBOgorCQkJZnhfZm9ybWF0ID0gRlhESUJfQXJnYjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIE5VTEw7CisJfQorCUNGWF9ESUJpdG1hcCogcEJpdG1hcCA9IEZYX05FVyBDRlhfRElCaXRtYXA7CisJcEJpdG1hcC0+Q3JlYXRlKHdpZHRoLCBoZWlnaHQsIGZ4X2Zvcm1hdCwgKEZYX0xQQllURSlmaXJzdF9zY2FuLCBzdHJpZGUpOworCXJldHVybiBwQml0bWFwOworfQorCitETExFWFBPUlQgdm9pZCBTVERDQUxMIEZQREZCaXRtYXBfRmlsbFJlY3QoRlBERl9CSVRNQVAgYml0bWFwLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCAKKwkJCQkJCQkJCWludCByZWQsIGludCBncmVlbiwgaW50IGJsdWUsIGludCBhbHBoYSkKK3sKKwlpZiAoYml0bWFwID09IE5VTEwpIHJldHVybjsKKyNpZmRlZiBfU0tJQV9TVVBQT1JUXworCUNGWF9Ta2lhRGV2aWNlIGRldmljZTsKKyNlbHNlCisJQ0ZYX0Z4Z2VEZXZpY2UgZGV2aWNlOworI2VuZGlmCisJZGV2aWNlLkF0dGFjaCgoQ0ZYX0RJQml0bWFwKiliaXRtYXApOworCWlmICghKChDRlhfRElCaXRtYXAqKWJpdG1hcCktPkhhc0FscGhhKCkpIGFscGhhID0gMjU1OworCUZYX1JFQ1QgcmVjdChsZWZ0LCB0b3AsIGxlZnQrd2lkdGgsIHRvcCtoZWlnaHQpOworCWRldmljZS5GaWxsUmVjdCgmcmVjdCwgRlhBUkdCX01BS0UoYWxwaGEsIHJlZCwgZ3JlZW4sIGJsdWUpKTsKK30KKworRExMRVhQT1JUIHZvaWQqIFNURENBTEwgRlBERkJpdG1hcF9HZXRCdWZmZXIoRlBERl9CSVRNQVAgYml0bWFwKQoreworCWlmIChiaXRtYXAgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisJcmV0dXJuICgoQ0ZYX0RJQml0bWFwKiliaXRtYXApLT5HZXRCdWZmZXIoKTsKK30KKworRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZCaXRtYXBfR2V0V2lkdGgoRlBERl9CSVRNQVAgYml0bWFwKQoreworCWlmIChiaXRtYXAgPT0gTlVMTCkgcmV0dXJuIDA7CisJcmV0dXJuICgoQ0ZYX0RJQml0bWFwKiliaXRtYXApLT5HZXRXaWR0aCgpOworfQorCitETExFWFBPUlQgaW50IFNURENBTEwgRlBERkJpdG1hcF9HZXRIZWlnaHQoRlBERl9CSVRNQVAgYml0bWFwKQoreworCWlmIChiaXRtYXAgPT0gTlVMTCkgcmV0dXJuIDA7CisJcmV0dXJuICgoQ0ZYX0RJQml0bWFwKiliaXRtYXApLT5HZXRIZWlnaHQoKTsKK30KKworRExMRVhQT1JUIGludCBTVERDQUxMIEZQREZCaXRtYXBfR2V0U3RyaWRlKEZQREZfQklUTUFQIGJpdG1hcCkKK3sKKwlpZiAoYml0bWFwID09IE5VTEwpIHJldHVybiAwOworCXJldHVybiAoKENGWF9ESUJpdG1hcCopYml0bWFwKS0+R2V0UGl0Y2goKTsKK30KKworRExMRVhQT1JUIHZvaWQgU1REQ0FMTCBGUERGQml0bWFwX0Rlc3Ryb3koRlBERl9CSVRNQVAgYml0bWFwKQoreworCWlmIChiaXRtYXAgPT0gTlVMTCkgcmV0dXJuOworCWRlbGV0ZSAoQ0ZYX0RJQml0bWFwKiliaXRtYXA7Cit9CisKK3ZvaWQgRlBERl9SZW5kZXJQYWdlX1JldGFpbChDUmVuZGVyQ29udGV4dCogcENvbnRleHQsIEZQREZfUEFHRSBwYWdlLCBpbnQgc3RhcnRfeCwgaW50IHN0YXJ0X3ksIGludCBzaXplX3gsIGludCBzaXplX3ksCisJCQkJCQlpbnQgcm90YXRlLCBpbnQgZmxhZ3MsRlhfQk9PTCBiTmVlZFRvUmVzdG9yZSwgSUZTREtfUEFVU0VfQWRhcHRlciAqIHBhdXNlICkKK3sKKy8vI2lmZGVmIF9MSUNFTlNFRF9CVUlMRF8KKwlDUERGX1BhZ2UqIHBQYWdlID0gKENQREZfUGFnZSopcGFnZTsKKwlpZiAocFBhZ2UgPT0gTlVMTCkgcmV0dXJuOworCisJaWYgKCFwQ29udGV4dC0+bV9wT3B0aW9ucykKKwkJcENvbnRleHQtPm1fcE9wdGlvbnMgPSBuZXcgQ1BERl9SZW5kZXJPcHRpb25zOworLy8JQ1BERl9SZW5kZXJPcHRpb25zIG9wdGlvbnM7CisJaWYgKGZsYWdzICYgRlBERl9MQ0RfVEVYVCkKKwkJcENvbnRleHQtPm1fcE9wdGlvbnMtPm1fRmxhZ3MgfD0gUkVOREVSX0NMRUFSVFlQRTsKKwllbHNlCisJCXBDb250ZXh0LT5tX3BPcHRpb25zLT5tX0ZsYWdzICY9IH5SRU5ERVJfQ0xFQVJUWVBFOworCWlmIChmbGFncyAmIEZQREZfTk9fTkFUSVZFVEVYVCkKKwkJcENvbnRleHQtPm1fcE9wdGlvbnMtPm1fRmxhZ3MgfD0gUkVOREVSX05PX05BVElWRVRFWFQ7CisJaWYgKGZsYWdzICYgRlBERl9SRU5ERVJfTElNSVRFRElNQUdFQ0FDSEUpCisJCXBDb250ZXh0LT5tX3BPcHRpb25zLT5tX0ZsYWdzIHw9IFJFTkRFUl9MSU1JVEVESU1BR0VDQUNIRTsKKwlpZiAoZmxhZ3MgJiBGUERGX1JFTkRFUl9GT1JDRUhBTEZUT05FKQorCQlwQ29udGV4dC0+bV9wT3B0aW9ucy0+bV9GbGFncyB8PSBSRU5ERVJfRk9SQ0VfSEFMRlRPTkU7CisJLy9HcmF5c2NhbGUgb3V0cHV0CisJaWYgKGZsYWdzICYgRlBERl9HUkFZU0NBTEUpCisJeworCQlwQ29udGV4dC0+bV9wT3B0aW9ucy0+bV9Db2xvck1vZGUgPSBSRU5ERVJfQ09MT1JfR1JBWTsKKwkJcENvbnRleHQtPm1fcE9wdGlvbnMtPm1fRm9yZUNvbG9yID0gMDsKKwkJcENvbnRleHQtPm1fcE9wdGlvbnMtPm1fQmFja0NvbG9yID0gMHhmZmZmZmY7CisJfQorCWNvbnN0IENQREZfT0NDb250ZXh0OjpVc2FnZVR5cGUgdXNhZ2UgPSAoZmxhZ3MgJiBGUERGX1BSSU5USU5HKSA/IENQREZfT0NDb250ZXh0OjpQcmludCA6IENQREZfT0NDb250ZXh0OjpWaWV3OworCisJcENvbnRleHQtPm1fcE9wdGlvbnMtPm1fQWRkRmxhZ3MgPSBmbGFncyA+PiA4OworCisJcENvbnRleHQtPm1fcE9wdGlvbnMtPm1fcE9DQ29udGV4dCA9IG5ldyBDUERGX09DQ29udGV4dChwUGFnZS0+bV9wRG9jdW1lbnQsIHVzYWdlKTsKKworCisJQ0ZYX0FmZmluZU1hdHJpeCBtYXRyaXg7CisJcFBhZ2UtPkdldERpc3BsYXlNYXRyaXgobWF0cml4LCBzdGFydF94LCBzdGFydF95LCBzaXplX3gsIHNpemVfeSwgcm90YXRlKTsgCisKKwlGWF9SRUNUIGNsaXA7CisJY2xpcC5sZWZ0ID0gc3RhcnRfeDsKKwljbGlwLnJpZ2h0ID0gc3RhcnRfeCArIHNpemVfeDsKKwljbGlwLnRvcCA9IHN0YXJ0X3k7CisJY2xpcC5ib3R0b20gPSBzdGFydF95ICsgc2l6ZV95OworCXBDb250ZXh0LT5tX3BEZXZpY2UtPlNhdmVTdGF0ZSgpOworCXBDb250ZXh0LT5tX3BEZXZpY2UtPlNldENsaXBfUmVjdCgmY2xpcCk7CisKKwlwQ29udGV4dC0+bV9wQ29udGV4dCA9IEZYX05FVyBDUERGX1JlbmRlckNvbnRleHQ7CisJcENvbnRleHQtPm1fcENvbnRleHQtPkNyZWF0ZShwUGFnZSk7CisJcENvbnRleHQtPm1fcENvbnRleHQtPkFwcGVuZE9iamVjdExpc3QocFBhZ2UsICZtYXRyaXgpOworCisJaWYgKGZsYWdzICYgRlBERl9BTk5PVCkgeworCQlwQ29udGV4dC0+bV9wQW5ub3RzID0gRlhfTkVXIENQREZfQW5ub3RMaXN0KHBQYWdlKTsKKwkJRlhfQk9PTCBiUHJpbnRpbmcgPSBwQ29udGV4dC0+bV9wRGV2aWNlLT5HZXREZXZpY2VDbGFzcygpICE9IEZYRENfRElTUExBWTsKKwkJcENvbnRleHQtPm1fcEFubm90cy0+RGlzcGxheUFubm90cyhwUGFnZSwgcENvbnRleHQtPm1fcENvbnRleHQsIGJQcmludGluZywgJm1hdHJpeCwgVFJVRSwgTlVMTCk7CisJfQorCisJcENvbnRleHQtPm1fcFJlbmRlcmVyID0gRlhfTkVXIENQREZfUHJvZ3Jlc3NpdmVSZW5kZXJlcjsKKwlwQ29udGV4dC0+bV9wUmVuZGVyZXItPlN0YXJ0KHBDb250ZXh0LT5tX3BDb250ZXh0LCBwQ29udGV4dC0+bV9wRGV2aWNlLCBwQ29udGV4dC0+bV9wT3B0aW9ucywgcGF1c2UpOworCWlmIChiTmVlZFRvUmVzdG9yZSkKKwl7CisJICBwQ29udGV4dC0+bV9wRGV2aWNlLT5SZXN0b3JlU3RhdGUoKTsKKwl9CisJCisvLyNlbmRpZgorfQorCitETExFWFBPUlQgaW50IFNURENBTEwgRlBERl9HZXRQYWdlU2l6ZUJ5SW5kZXgoRlBERl9ET0NVTUVOVCBkb2N1bWVudCwgaW50IHBhZ2VfaW5kZXgsIGRvdWJsZSogd2lkdGgsIGRvdWJsZSogaGVpZ2h0KQoreworCUNQREZfRG9jdW1lbnQqIHBEb2MgPSAoQ1BERl9Eb2N1bWVudCopZG9jdW1lbnQ7CisJaWYocERvYyA9PSBOVUxMKQorCQlyZXR1cm4gRkFMU0U7CisKKwlDUERGX0RpY3Rpb25hcnkqIHBEaWN0ID0gcERvYy0+R2V0UGFnZShwYWdlX2luZGV4KTsKKwlpZiAocERpY3QgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworCisJQ1BERl9QYWdlIHBhZ2U7CisJcGFnZS5Mb2FkKHBEb2MsIHBEaWN0KTsKKwkqd2lkdGggPSBwYWdlLkdldFBhZ2VXaWR0aCgpOworCSpoZWlnaHQgPSBwYWdlLkdldFBhZ2VIZWlnaHQoKTsKKworCXJldHVybiBUUlVFOworfQorCitETExFWFBPUlQgRlBERl9CT09MIFNURENBTEwgRlBERl9WSUVXRVJSRUZfR2V0UHJpbnRTY2FsaW5nKEZQREZfRE9DVU1FTlQgZG9jdW1lbnQpCit7CisJQ1BERl9Eb2N1bWVudCogcERvYyA9IChDUERGX0RvY3VtZW50Kilkb2N1bWVudDsKKwlpZiAoIXBEb2MpIHJldHVybiBUUlVFOworCUNQREZfVmlld2VyUHJlZmVyZW5jZXMgdmlld1JlZihwRG9jKTsKKwlyZXR1cm4gdmlld1JlZi5QcmludFNjYWxpbmcoKTsKK30KKworRExMRVhQT1JUIEZQREZfREVTVCBTVERDQUxMIEZQREZfR2V0TmFtZWREZXN0QnlOYW1lKEZQREZfRE9DVU1FTlQgZG9jdW1lbnQsRlBERl9CWVRFU1RSSU5HIG5hbWUpCit7CisJaWYgKGRvY3VtZW50ID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWlmIChuYW1lID09IE5VTEwgfHwgbmFtZVswXSA9PSAwKSAKKwkJcmV0dXJuIE5VTEw7CisKKwlDUERGX0RvY3VtZW50KiBwRG9jID0gKENQREZfRG9jdW1lbnQqKWRvY3VtZW50OworCUNQREZfTmFtZVRyZWUgbmFtZV90cmVlKHBEb2MsIEZYX0JTVFJDKCJEZXN0cyIpKTsKKwlyZXR1cm4gbmFtZV90cmVlLkxvb2t1cE5hbWVkRGVzdChwRG9jLCBuYW1lKTsKK30KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2ZzZGtfYWN0aW9uaGFuZGxlci5jcHAgYi9mcGRmc2RrL3NyYy9mc2RrX2FjdGlvbmhhbmRsZXIuY3BwCmluZGV4IDJhMzg5OGMuLjVkZWQ5ODQgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2ZzZGtfYWN0aW9uaGFuZGxlci5jcHAKKysrIGIvZnBkZnNkay9zcmMvZnNka19hY3Rpb25oYW5kbGVyLmNwcApAQCAtMSw4NTAgKzEsODUwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX2RlZmluZS5oIg0KLSNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfbWdyLmgiDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19hY3Rpb25oYW5kbGVyLmgiDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvamF2YXNjcmlwdC9JSmF2YVNjcmlwdC5oIg0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENCQV9BY3Rpb25IYW5kbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ1BERlNES19BY3Rpb25IYW5kbGVyOjpDUERGU0RLX0FjdGlvbkhhbmRsZXIoQ1BERkRvY19FbnZpcm9ubWVudCogcEV2aSkgOiANCi0JbV9wRXZpKHBFdmkpLA0KLQltX3BGb3JtQWN0aW9uSGFuZGxlcihOVUxMKSwNCi0JbV9wTWVkaWFBY3Rpb25IYW5kbGVyKE5VTEwpDQotew0KLQkJbV9wRm9ybUFjdGlvbkhhbmRsZXIgPSBuZXcgQ1BERlNES19Gb3JtQWN0aW9uSGFuZGxlcjsNCi19DQotDQotQ1BERlNES19BY3Rpb25IYW5kbGVyOjp+Q1BERlNES19BY3Rpb25IYW5kbGVyKCkNCi17DQotCWlmKG1fcEZvcm1BY3Rpb25IYW5kbGVyKQ0KLQl7DQotCQlkZWxldGUgbV9wRm9ybUFjdGlvbkhhbmRsZXI7DQotCQltX3BGb3JtQWN0aW9uSGFuZGxlciA9IE5VTEw7DQotCX0NCi19DQotDQotdm9pZCBDUERGU0RLX0FjdGlvbkhhbmRsZXI6OlNldEZvcm1BY3Rpb25IYW5kbGVyKENQREZTREtfRm9ybUFjdGlvbkhhbmRsZXIqIHBIYW5kbGVyKQ0KLXsNCi0JQVNTRVJUKHBIYW5kbGVyICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wRm9ybUFjdGlvbkhhbmRsZXIgPT0gTlVMTCk7DQotCW1fcEZvcm1BY3Rpb25IYW5kbGVyID0gcEhhbmRsZXI7DQotfQ0KLQ0KLXZvaWQgQ1BERlNES19BY3Rpb25IYW5kbGVyOjpTZXRNZWRpYUFjdGlvbkhhbmRsZXIoQ1BERlNES19NZWRpYUFjdGlvbkhhbmRsZXIqIHBIYW5kbGVyKQ0KLXsNCi0JQVNTRVJUKHBIYW5kbGVyICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wTWVkaWFBY3Rpb25IYW5kbGVyID09IE5VTEwpOw0KLQltX3BNZWRpYUFjdGlvbkhhbmRsZXIgPSBwSGFuZGxlcjsNCi19DQotDQotdm9pZCBDUERGU0RLX0FjdGlvbkhhbmRsZXI6OkRlc3Ryb3koKQ0KLXsNCi0JZGVsZXRlIHRoaXM7DQotfQ0KLQ0KLS8vZG9jdW1lbnQgb3Blbg0KLUZYX0JPT0wJQ1BERlNES19BY3Rpb25IYW5kbGVyOjpEb0FjdGlvbl9Eb2NPcGVuKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudA0KLQkJCQkJCQkJCQkJCS8qQ1JlYWRlcl9Eb2N1bWVudCogcERvY3VtZW50LCBDUmVhZGVyX0RvY1ZpZXcgKnBEb2NWaWV3Ki8pDQotew0KLQlDRlhfUHRyTGlzdCBsaXN0Ow0KLQlyZXR1cm4gRXhlY3V0ZURvY3VtZW50T3BlbkFjdGlvbihhY3Rpb24sIHBEb2N1bWVudCwgLypwRG9jVmlldywgKi9saXN0KTsNCi19DQotDQotLy9kb2N1bWVudCBvcGVuDQotRlhfQk9PTAlDUERGU0RLX0FjdGlvbkhhbmRsZXI6OkRvQWN0aW9uX0phdmFTY3JpcHQoY29uc3QgQ1BERl9BY3Rpb24mIEpzQWN0aW9uLENGWF9XaWRlU3RyaW5nIGNzSlNOYW1lLA0KLQkJCQkJCQlDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQvKiwgQ1JlYWRlcl9Eb2NWaWV3ICpwRG9jVmlldyovKQ0KLXsNCi0JaWYgKEpzQWN0aW9uLkdldFR5cGUoKSA9PSBDUERGX0FjdGlvbjo6SmF2YVNjcmlwdCkNCi0Jew0KLQkJQ0ZYX1dpZGVTdHJpbmcgc3dKUyA9IEpzQWN0aW9uLkdldEphdmFTY3JpcHQoKTsNCi0JCWlmICghc3dKUy5Jc0VtcHR5KCkpDQotCQl7DQotCQkJUnVuRG9jdW1lbnRPcGVuSmF2YVNjcmlwdChwRG9jdW1lbnQsIGNzSlNOYW1lLCBzd0pTKTsNCi0JCQlyZXR1cm4gVFJVRTsNCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wJQ1BERlNES19BY3Rpb25IYW5kbGVyOjpEb0FjdGlvbl9GaWVsZEphdmFTY3JpcHQoY29uc3QgQ1BERl9BY3Rpb24mIEpzQWN0aW9uLCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIA0KLQkJCQkJCQkJCUNQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQsIA0KLQkJCQkJCQkJCVBERlNES19GaWVsZEFjdGlvbiYgZGF0YSkNCi17DQotCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBwRG9jdW1lbnQtPkdldEVudigpOw0KLQlBU1NFUlQocEVudik7DQotCWlmIChwRW52LT5Jc0pTSW5pdGlhdGVkKCkgJiYgSnNBY3Rpb24uR2V0VHlwZSgpID09IENQREZfQWN0aW9uOjpKYXZhU2NyaXB0KQ0KLQl7DQotCQlDRlhfV2lkZVN0cmluZyBzd0pTID0gSnNBY3Rpb24uR2V0SmF2YVNjcmlwdCgpOw0KLQkJaWYgKCFzd0pTLklzRW1wdHkoKSkNCi0JCXsNCi0JCQlSdW5GaWVsZEphdmFTY3JpcHQocERvY3VtZW50LCBwRm9ybUZpZWxkLCB0eXBlLCBkYXRhLCBzd0pTKTsNCi0JCQlyZXR1cm4gVFJVRTsNCi0JCX0NCi0JfQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wJQ1BERlNES19BY3Rpb25IYW5kbGVyOjpEb0FjdGlvbl9QYWdlKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIGVudW0gQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSBlVHlwZSwNCi0JCQkJCQkJCQkJQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LyosIENSZWFkZXJfRG9jVmlldyAqcERvY1ZpZXcqLykNCi17DQotCUNGWF9QdHJMaXN0IGxpc3Q7DQotCXJldHVybiBFeGVjdXRlRG9jdW1lbnRQYWdlQWN0aW9uKGFjdGlvbiwgZVR5cGUsIHBEb2N1bWVudCwvKiBwRG9jVmlldywqLyBsaXN0KTsNCi19DQotDQotRlhfQk9PTAlDUERGU0RLX0FjdGlvbkhhbmRsZXI6OkRvQWN0aW9uX0RvY3VtZW50KGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIGVudW0gQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSBlVHlwZSwNCi0JCQkJCQkJCQkJCSBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQvKiwgQ1JlYWRlcl9Eb2NWaWV3ICpwRG9jVmlldyovKQ0KLXsNCi0JQ0ZYX1B0ckxpc3QgbGlzdDsNCi0JcmV0dXJuIEV4ZWN1dGVEb2N1bWVudFBhZ2VBY3Rpb24oYWN0aW9uLCBlVHlwZSwgcERvY3VtZW50LC8qIHBEb2NWaWV3LCovIGxpc3QpOw0KLX0NCi0NCi1GWF9CT09MCUNQREZTREtfQWN0aW9uSGFuZGxlcjo6RG9BY3Rpb25fQm9va01hcmsoQ1BERl9Cb29rbWFyayAqcEJvb2tNYXJrLCBjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIA0KLQkJCQkJCQlDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQvKiwgQ1JlYWRlcl9Eb2NWaWV3ICpwRG9jVmlldyovKQ0KLXsNCi0JQ0ZYX1B0ckxpc3QgbGlzdDsNCi0JcmV0dXJuIHRoaXMtPkV4ZWN1dGVCb29rTWFyayhhY3Rpb24sIHBEb2N1bWVudCwvKiBwRG9jVmlldywqLyBwQm9va01hcmssIGxpc3QpOw0KLX0NCi0NCi1GWF9CT09MCUNQREZTREtfQWN0aW9uSGFuZGxlcjo6RG9BY3Rpb25fU2NyZWVuKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgDQotCQkJCQkJCQkJCUNQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwvKiBDUmVhZGVyX0RvY1ZpZXcgKnBEb2NWaWV3LCovIENQREZTREtfQW5ub3QqIHBTY3JlZW4pDQotew0KLQlDRlhfUHRyTGlzdCBsaXN0Ow0KLQlyZXR1cm4gdGhpcy0+RXhlY3V0ZVNjcmVlbkFjdGlvbihhY3Rpb24sIHR5cGUsIHBEb2N1bWVudCwvKiBwRG9jVmlldywqLyBwU2NyZWVuLCBsaXN0KTsNCi19DQotDQotRlhfQk9PTAlDUERGU0RLX0FjdGlvbkhhbmRsZXI6OkRvQWN0aW9uX0xpbmsoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgDQotCQkJCQkJCQkJCUNQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudC8qLCBDUmVhZGVyX0RvY1ZpZXcgKnBEb2NWaWV3Ki8pDQotew0KLQlDRlhfUHRyTGlzdCBsaXN0Ow0KLQlyZXR1cm4gRXhlY3V0ZUxpbmtBY3Rpb24oYWN0aW9uLCBwRG9jdW1lbnQsLyogcERvY1ZpZXcsKi8gbGlzdCk7DQotfQ0KLQ0KLUZYX0JPT0wJQ1BERlNES19BY3Rpb25IYW5kbGVyOjpEb0FjdGlvbl9GaWVsZChjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIA0KLQkJCQkJCQkJCQlDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsLyogQ1JlYWRlcl9Eb2NWaWV3ICpwRG9jVmlldywqLyANCi0JCQkJCQkJCQkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQsIFBERlNES19GaWVsZEFjdGlvbiYgZGF0YSkNCi17DQotCUNGWF9QdHJMaXN0IGxpc3Q7DQotCXJldHVybiBFeGVjdXRlRmllbGRBY3Rpb24oYWN0aW9uLCB0eXBlLCBwRG9jdW1lbnQsLyogcERvY1ZpZXcsKi8gcEZvcm1GaWVsZCwgZGF0YSwgbGlzdCk7DQotfQ0KLQ0KLUZYX0JPT0wJQ1BERlNES19BY3Rpb25IYW5kbGVyOjpFeGVjdXRlRG9jdW1lbnRPcGVuQWN0aW9uKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwNCi0JCQkJCQkJCQkJCQkJIC8qQ1JlYWRlcl9Eb2NWaWV3ICpwRG9jVmlldywqLyBDRlhfUHRyTGlzdCYgbGlzdCkNCi17DQotCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmIChsaXN0LkZpbmQoKENQREZfRGljdGlvbmFyeSopYWN0aW9uKSkNCi0JCXJldHVybiBGQUxTRTsNCi0JbGlzdC5BZGRUYWlsKChDUERGX0RpY3Rpb25hcnkqKWFjdGlvbik7DQotDQotCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBwRG9jdW1lbnQtPkdldEVudigpOw0KLQlBU1NFUlQocEVudik7DQotCWlmIChhY3Rpb24uR2V0VHlwZSgpID09IENQREZfQWN0aW9uOjpKYXZhU2NyaXB0KQ0KLQl7DQotCQlpZihwRW52LT5Jc0pTSW5pdGlhdGVkKCkpDQotCQl7DQotCQkJQ0ZYX1dpZGVTdHJpbmcgc3dKUyA9IGFjdGlvbi5HZXRKYXZhU2NyaXB0KCk7DQotCQkJaWYgKCFzd0pTLklzRW1wdHkoKSkNCi0JCQl7DQotCQkJCVJ1bkRvY3VtZW50T3BlbkphdmFTY3JpcHQocERvY3VtZW50LCBMIiIsIHN3SlMpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsNCi0JCURvQWN0aW9uX05vSnMoYWN0aW9uLCBwRG9jdW1lbnQvKiwgcERvY1ZpZXcqLyk7DQotCX0NCi0NCi0vLyAJaWYgKCFJc1ZhbGlkRG9jVmlldyhwRG9jdW1lbnQsIHBEb2NWaWV3KSkNCi0vLyAJCXJldHVybiBGQUxTRTsNCi0NCi0JZm9yIChGWF9JTlQzMiBpPTAsc3o9YWN0aW9uLkdldFN1YkFjdGlvbnNDb3VudCgpOyBpPHN6OyBpKyspDQotCXsNCi0JCUNQREZfQWN0aW9uIHN1YmFjdGlvbiA9IGFjdGlvbi5HZXRTdWJBY3Rpb24oaSk7DQotCQlpZiAoIUV4ZWN1dGVEb2N1bWVudE9wZW5BY3Rpb24oc3ViYWN0aW9uLCBwRG9jdW1lbnQsLyogcERvY1ZpZXcsKi8gbGlzdCkpIHJldHVybiBGQUxTRTsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBDUERGU0RLX0FjdGlvbkhhbmRsZXI6OkV4ZWN1dGVMaW5rQWN0aW9uKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sCUNQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwNCi0JCQkJCQkJCQkJCQkgLypDUmVhZGVyX0RvY1ZpZXcqIHBEb2NWaWV3LCovIENGWF9QdHJMaXN0JiBsaXN0KQ0KLXsNCi0JQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKGxpc3QuRmluZCgoQ1BERl9EaWN0aW9uYXJ5KilhY3Rpb24pKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQlsaXN0LkFkZFRhaWwoKENQREZfRGljdGlvbmFyeSopYWN0aW9uKTsNCi0NCi0JQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IHBEb2N1bWVudC0+R2V0RW52KCk7DQotCUFTU0VSVChwRW52KTsNCi0JaWYgKGFjdGlvbi5HZXRUeXBlKCkgPT0gQ1BERl9BY3Rpb246OkphdmFTY3JpcHQpDQotCXsNCi0JCWlmKHBFbnYtPklzSlNJbml0aWF0ZWQoKSkNCi0JCXsNCi0JCQlDRlhfV2lkZVN0cmluZyBzd0pTID0gYWN0aW9uLkdldEphdmFTY3JpcHQoKTsNCi0JCQlpZiAoIXN3SlMuSXNFbXB0eSgpKQ0KLQkJCXsNCi0JCQkJSUZYSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwRG9jdW1lbnQtPkdldEpzUnVudGltZSgpOyAvLz8/Pz8NCi0JCQkJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOw0KLQ0KLQkJCQlwUnVudGltZS0+U2V0UmVhZGVyRG9jdW1lbnQocERvY3VtZW50KTsNCi0NCi0JCQkJSUZYSlNfQ29udGV4dCogcENvbnRleHQgPSBwUnVudGltZS0+TmV3Q29udGV4dCgpOw0KLQkJCQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotDQotCQkJCXBDb250ZXh0LT5PbkxpbmtfTW91c2VVcChwRG9jdW1lbnQpOw0KLQ0KLQkJCQlDRlhfV2lkZVN0cmluZyBjc0luZm87DQotCQkJCUZYX0JPT0wgYlJldCA9IHBDb250ZXh0LT5SdW5TY3JpcHQoc3dKUywgY3NJbmZvKTsNCi0JCQkJaWYgKCFiUmV0KQ0KLQkJCQl7DQotCQkJCQkvL0NCQ0xfRm9ybU5vdGlmeTo6TXNnQm94SlNFcnJvcihwUGFnZVZpZXctPkdldFBhZ2VWaWV3V25kKCksIGNzSW5mbyk7DQotCQkJCX0NCi0NCi0JCQkJcFJ1bnRpbWUtPlJlbGVhc2VDb250ZXh0KHBDb250ZXh0KTsNCi0JCQl9DQotCQl9DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlEb0FjdGlvbl9Ob0pzKGFjdGlvbiwgcERvY3VtZW50LyosIHBEb2NWaWV3Ki8pOw0KLQl9DQotDQotLy8gCWlmICghSXNWYWxpZERvY1ZpZXcocERvY3VtZW50LCBwRG9jVmlldykpDQotLy8gCQlyZXR1cm4gRkFMU0U7DQotDQotCWZvciAoRlhfSU5UMzIgaT0wLHN6PWFjdGlvbi5HZXRTdWJBY3Rpb25zQ291bnQoKTsgaTxzejsgaSsrKQ0KLQl7DQotCQlDUERGX0FjdGlvbiBzdWJhY3Rpb24gPSBhY3Rpb24uR2V0U3ViQWN0aW9uKGkpOw0KLQkJaWYgKCFFeGVjdXRlTGlua0FjdGlvbihzdWJhY3Rpb24sIHBEb2N1bWVudCwvKiBwRG9jVmlldywqLyBsaXN0KSkgcmV0dXJuIEZBTFNFOw0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MCUNQREZTREtfQWN0aW9uSGFuZGxlcjo6RXhlY3V0ZURvY3VtZW50UGFnZUFjdGlvbihjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsDQotCQkJCQkJCQkJCQkJIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwvKiBDUmVhZGVyX0RvY1ZpZXcqIHBEb2NWaWV3LCovIENGWF9QdHJMaXN0JiBsaXN0KQ0KLXsNCi0JQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKGxpc3QuRmluZCgoQ1BERl9EaWN0aW9uYXJ5KilhY3Rpb24pKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQlsaXN0LkFkZFRhaWwoKENQREZfRGljdGlvbmFyeSopYWN0aW9uKTsNCi0NCi0JQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IHBEb2N1bWVudC0+R2V0RW52KCk7DQotCUFTU0VSVChwRW52KTsNCi0JaWYgKGFjdGlvbi5HZXRUeXBlKCkgPT0gQ1BERl9BY3Rpb246OkphdmFTY3JpcHQpDQotCXsNCi0JCWlmKHBFbnYtPklzSlNJbml0aWF0ZWQoKSkNCi0JCXsNCi0JCQlDRlhfV2lkZVN0cmluZyBzd0pTID0gYWN0aW9uLkdldEphdmFTY3JpcHQoKTsNCi0JCQlpZiAoIXN3SlMuSXNFbXB0eSgpKQ0KLQkJCXsNCi0JCQkJUnVuRG9jdW1lbnRQYWdlSmF2YVNjcmlwdChwRG9jdW1lbnQsIHR5cGUsIHN3SlMpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsNCi0JCURvQWN0aW9uX05vSnMoYWN0aW9uLCBwRG9jdW1lbnQvKiwgcERvY1ZpZXcqLyk7DQotCX0NCi0NCi0JaWYgKCFJc1ZhbGlkRG9jVmlldyhwRG9jdW1lbnQvKiwgcERvY1ZpZXcqLykpDQotCQlyZXR1cm4gRkFMU0U7DQotDQotCWZvciAoRlhfSU5UMzIgaT0wLHN6PWFjdGlvbi5HZXRTdWJBY3Rpb25zQ291bnQoKTsgaTxzejsgaSsrKQ0KLQl7DQotCQlDUERGX0FjdGlvbiBzdWJhY3Rpb24gPSBhY3Rpb24uR2V0U3ViQWN0aW9uKGkpOw0KLQkJaWYgKCFFeGVjdXRlRG9jdW1lbnRQYWdlQWN0aW9uKHN1YmFjdGlvbiwgdHlwZSwgcERvY3VtZW50LC8qIHBEb2NWaWV3LCovIGxpc3QpKSByZXR1cm4gRkFMU0U7DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wJQ1BERlNES19BY3Rpb25IYW5kbGVyOjpJc1ZhbGlkRmllbGQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBDUERGX0RpY3Rpb25hcnkqIHBGaWVsZERpY3QpDQotew0KLQlBU1NFUlQobV9wRXZpICE9IE5VTEwpOw0KLQlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOw0KLQlBU1NFUlQocEZpZWxkRGljdCAhPSBOVUxMKTsNCi0NCi0JaWYgKDEvKm1fcEFwcC0+SXNWYWxpZERvY3VtZW50KHBEb2N1bWVudCkqLykNCi0Jew0KLQkJQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSBwRG9jdW1lbnQtPkdldEludGVyRm9ybSgpOw0KLQkJQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7DQotDQotCQlDUERGX0ludGVyRm9ybSogcFBERkludGVyRm9ybSA9IHBJbnRlckZvcm0tPkdldEludGVyRm9ybSgpOw0KLQkJQVNTRVJUKHBQREZJbnRlckZvcm0gIT0gTlVMTCk7DQotDQotCQlyZXR1cm4gcFBERkludGVyRm9ybS0+R2V0RmllbGRCeURpY3QocEZpZWxkRGljdCkgIT0gTlVMTDsNCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wJQ1BERlNES19BY3Rpb25IYW5kbGVyOjpFeGVjdXRlRmllbGRBY3Rpb24oY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLCANCi0JCQkJCQkJCQkJICBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsLyogQ1JlYWRlcl9Eb2NWaWV3KiBwRG9jVmlldywqLyBDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCwgDQotCQkJCQkJCQkJCSAgUERGU0RLX0ZpZWxkQWN0aW9uJiBkYXRhLCBDRlhfUHRyTGlzdCYgbGlzdCkNCi17DQotCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmIChsaXN0LkZpbmQoKENQREZfRGljdGlvbmFyeSopYWN0aW9uKSkNCi0JCXJldHVybiBGQUxTRTsNCi0JbGlzdC5BZGRUYWlsKChDUERGX0RpY3Rpb25hcnkqKWFjdGlvbik7DQotDQotCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBwRG9jdW1lbnQtPkdldEVudigpOw0KLQlBU1NFUlQocEVudik7DQotCWlmIChhY3Rpb24uR2V0VHlwZSgpID09IENQREZfQWN0aW9uOjpKYXZhU2NyaXB0KQ0KLQl7DQotCQlpZihwRW52LT5Jc0pTSW5pdGlhdGVkKCkpDQotCQl7DQotCQkJQ0ZYX1dpZGVTdHJpbmcgc3dKUyA9IGFjdGlvbi5HZXRKYXZhU2NyaXB0KCk7DQotCQkJaWYgKCFzd0pTLklzRW1wdHkoKSkNCi0JCQl7DQotCQkJCVJ1bkZpZWxkSmF2YVNjcmlwdChwRG9jdW1lbnQsIHBGb3JtRmllbGQsIHR5cGUsIGRhdGEsIHN3SlMpOw0KLQkJCQlpZiAoIUlzVmFsaWRGaWVsZChwRG9jdW1lbnQsIHBGb3JtRmllbGQtPkdldEZpZWxkRGljdCgpKSkNCi0JCQkJCXJldHVybiBGQUxTRTsNCi0JCQl9DQotCQl9DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlEb0FjdGlvbl9Ob0pzKGFjdGlvbiwgcERvY3VtZW50LyosIHBEb2NWaWV3Ki8pOw0KLS8vIAkJaWYgKCFJc1ZhbGlkRG9jVmlldyhwRG9jdW1lbnQsIHBEb2NWaWV3KSkNCi0vLyAJCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0NCi0JZm9yIChGWF9JTlQzMiBpPTAsc3o9YWN0aW9uLkdldFN1YkFjdGlvbnNDb3VudCgpOyBpPHN6OyBpKyspDQotCXsNCi0JCUNQREZfQWN0aW9uIHN1YmFjdGlvbiA9IGFjdGlvbi5HZXRTdWJBY3Rpb24oaSk7DQotCQlpZiAoIUV4ZWN1dGVGaWVsZEFjdGlvbihzdWJhY3Rpb24sIHR5cGUsIHBEb2N1bWVudCwvKiBwRG9jVmlldywqLyBwRm9ybUZpZWxkLCBkYXRhLCBsaXN0KSkgcmV0dXJuIEZBTFNFOw0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIENQREZTREtfQWN0aW9uSGFuZGxlcjo6RXhlY3V0ZVNjcmVlbkFjdGlvbihjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIA0KLQkJCQkJCQkJCQlDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsLyogQ1JlYWRlcl9Eb2NWaWV3KiBwRG9jVmlldywqLyBDUERGU0RLX0Fubm90KiBwU2NyZWVuLCBDRlhfUHRyTGlzdCYgbGlzdCkNCi17DQotCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmIChsaXN0LkZpbmQoKENQREZfRGljdGlvbmFyeSopYWN0aW9uKSkNCi0JCXJldHVybiBGQUxTRTsNCi0JbGlzdC5BZGRUYWlsKChDUERGX0RpY3Rpb25hcnkqKWFjdGlvbik7DQotDQotCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBwRG9jdW1lbnQtPkdldEVudigpOw0KLQlBU1NFUlQocEVudik7DQotCWlmIChhY3Rpb24uR2V0VHlwZSgpID09IENQREZfQWN0aW9uOjpKYXZhU2NyaXB0KQ0KLQl7DQotCQlpZihwRW52LT5Jc0pTSW5pdGlhdGVkKCkpDQotCQl7DQotCQkJQ0ZYX1dpZGVTdHJpbmcgc3dKUyA9IGFjdGlvbi5HZXRKYXZhU2NyaXB0KCk7DQotCQkJaWYgKCFzd0pTLklzRW1wdHkoKSkNCi0JCQl7DQotCQkJCUlGWEpTX1J1bnRpbWUqIHBSdW50aW1lID0gcERvY3VtZW50LT5HZXRKc1J1bnRpbWUoKTsNCi0JCQkJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOw0KLQ0KLQkJCQlwUnVudGltZS0+U2V0UmVhZGVyRG9jdW1lbnQocERvY3VtZW50KTsNCi0NCi0JCQkJSUZYSlNfQ29udGV4dCogcENvbnRleHQgPSBwUnVudGltZS0+TmV3Q29udGV4dCgpOw0KLQkJCQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotDQotCS8vIAkJCXN3aXRjaCAodHlwZSkNCi0JLy8gCQkJew0KLQkvLyAJCQljYXNlIENQREZfQUFjdGlvbjo6Q3Vyc29yRW50ZXI6DQotCS8vIAkJCQlwQ29udGV4dC0+T25TY3JlZW5fTW91c2VFbnRlcihJc0NUUkxwcmVzc2VkKCksIElzU0hJRlRwcmVzc2VkKCksIHBTY3JlZW4pOw0KLQkvLyAJCQkJYnJlYWs7DQotCS8vIAkJCWNhc2UgQ1BERl9BQWN0aW9uOjpDdXJzb3JFeGl0Og0KLQkvLyAJCQkJcENvbnRleHQtPk9uU2NyZWVuX01vdXNlRXhpdChJc0NUUkxwcmVzc2VkKCksIElzU0hJRlRwcmVzc2VkKCksIHBTY3JlZW4pOw0KLQkvLyAJCQkJYnJlYWs7DQotCS8vIAkJCWNhc2UgQ1BERl9BQWN0aW9uOjpCdXR0b25Eb3duOg0KLQkvLyAJCQkJcENvbnRleHQtPk9uU2NyZWVuX01vdXNlRG93bihJc0NUUkxwcmVzc2VkKCksIElzU0hJRlRwcmVzc2VkKCksIHBTY3JlZW4pOw0KLQkvLyAJCQkJYnJlYWs7DQotCS8vIAkJCWNhc2UgQ1BERl9BQWN0aW9uOjpCdXR0b25VcDoNCi0JLy8gCQkJCXBDb250ZXh0LT5PblNjcmVlbl9Nb3VzZVVwKElzQ1RSTHByZXNzZWQoKSwgSXNTSElGVHByZXNzZWQoKSwgcFNjcmVlbik7DQotCS8vIAkJCQlicmVhazsNCi0JLy8gCQkJY2FzZSBDUERGX0FBY3Rpb246OkdldEZvY3VzOg0KLQkvLyAJCQkJcENvbnRleHQtPk9uU2NyZWVuX0ZvY3VzKElzQ1RSTHByZXNzZWQoKSwgSXNTSElGVHByZXNzZWQoKSwgcFNjcmVlbik7DQotCS8vIAkJCQlicmVhazsNCi0JLy8gCQkJY2FzZSBDUERGX0FBY3Rpb246Okxvc2VGb2N1czoNCi0JLy8gCQkJCXBDb250ZXh0LT5PblNjcmVlbl9CbHVyKElzQ1RSTHByZXNzZWQoKSwgSXNTSElGVHByZXNzZWQoKSwgcFNjcmVlbik7DQotCS8vIAkJCQlicmVhazsNCi0JLy8gCQkJY2FzZSBDUERGX0FBY3Rpb246OlBhZ2VPcGVuOg0KLQkvLyAJCQkJcENvbnRleHQtPk9uU2NyZWVuX09wZW4oSXNDVFJMcHJlc3NlZCgpLCBJc1NISUZUcHJlc3NlZCgpLCBwU2NyZWVuKTsNCi0JLy8gCQkJCWJyZWFrOw0KLQkvLyAJCQljYXNlIENQREZfQUFjdGlvbjo6UGFnZUNsb3NlOg0KLQkvLyAJCQkJcENvbnRleHQtPk9uU2NyZWVuX0Nsb3NlKElzQ1RSTHByZXNzZWQoKSwgSXNTSElGVHByZXNzZWQoKSwgcFNjcmVlbik7DQotCS8vIAkJCQlicmVhazsNCi0JLy8gCQkJY2FzZSBDUERGX0FBY3Rpb246OlBhZ2VWaXNpYmxlOg0KLQkvLyAJCQkJcENvbnRleHQtPk9uU2NyZWVuX0luVmlldyhJc0NUUkxwcmVzc2VkKCksIElzU0hJRlRwcmVzc2VkKCksIHBTY3JlZW4pOw0KLQkvLyAJCQkJYnJlYWs7DQotCS8vIAkJCWNhc2UgQ1BERl9BQWN0aW9uOjpQYWdlSW52aXNpYmxlOg0KLQkvLyAJCQkJcENvbnRleHQtPk9uU2NyZWVuX091dFZpZXcoSXNDVFJMcHJlc3NlZCgpLCBJc1NISUZUcHJlc3NlZCgpLCBwU2NyZWVuKTsNCi0JLy8gCQkJCWJyZWFrOw0KLQkvLyAJCQlkZWZhdWx0Og0KLQkvLyAJCQkJQVNTRVJUKEZBTFNFKTsNCi0JLy8gCQkJCWJyZWFrOw0KLQkvLyAJCQl9DQotDQotCQkJCUNGWF9XaWRlU3RyaW5nIGNzSW5mbzsNCi0JCQkJRlhfQk9PTCBiUmV0ID0gcENvbnRleHQtPlJ1blNjcmlwdChzd0pTLCBjc0luZm8pOw0KLQkJCQlpZiAoIWJSZXQpDQotCQkJCXsNCi0JCQkJCS8vQ0JDTF9Gb3JtTm90aWZ5OjpNc2dCb3hKU0Vycm9yKHBQYWdlVmlldy0+R2V0UGFnZVZpZXdXbmQoKSwgY3NJbmZvKTsNCi0JCQkJfQ0KLQ0KLQkJCQlwUnVudGltZS0+UmVsZWFzZUNvbnRleHQocENvbnRleHQpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsNCi0JCURvQWN0aW9uX05vSnMoYWN0aW9uLCBwRG9jdW1lbnQvKiwgcERvY1ZpZXcqLyk7DQotCX0NCi0NCi0vLyAJaWYgKCFJc1ZhbGlkRG9jVmlldyhwRG9jdW1lbnQsIHBEb2NWaWV3KSkNCi0vLyAJCXJldHVybiBGQUxTRTsNCi0NCi0JZm9yIChGWF9JTlQzMiBpPTAsc3o9YWN0aW9uLkdldFN1YkFjdGlvbnNDb3VudCgpOyBpPHN6OyBpKyspDQotCXsNCi0JCUNQREZfQWN0aW9uIHN1YmFjdGlvbiA9IGFjdGlvbi5HZXRTdWJBY3Rpb24oaSk7DQotCQlpZiAoIUV4ZWN1dGVTY3JlZW5BY3Rpb24oc3ViYWN0aW9uLCB0eXBlLCBwRG9jdW1lbnQsLyogcERvY1ZpZXcsKi8gcFNjcmVlbiwgbGlzdCkpIHJldHVybiBGQUxTRTsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTAlDUERGU0RLX0FjdGlvbkhhbmRsZXI6OkV4ZWN1dGVCb29rTWFyayhjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIA0KLQkJCQkJCQkJCQkvKkNSZWFkZXJfRG9jVmlldyogcERvY1ZpZXcsKi8gQ1BERl9Cb29rbWFyayogcEJvb2ttYXJrLCBDRlhfUHRyTGlzdCYgbGlzdCkNCi17DQotCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmIChsaXN0LkZpbmQoKENQREZfRGljdGlvbmFyeSopYWN0aW9uKSkNCi0JCXJldHVybiBGQUxTRTsNCi0JbGlzdC5BZGRUYWlsKChDUERGX0RpY3Rpb25hcnkqKWFjdGlvbik7DQotDQotCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBwRG9jdW1lbnQtPkdldEVudigpOw0KLQlBU1NFUlQocEVudik7DQotCWlmIChhY3Rpb24uR2V0VHlwZSgpID09IENQREZfQWN0aW9uOjpKYXZhU2NyaXB0KQ0KLQl7DQotCQlpZihwRW52LT5Jc0pTSW5pdGlhdGVkKCkpDQotCQl7DQotCQkJQ0ZYX1dpZGVTdHJpbmcgc3dKUyA9IGFjdGlvbi5HZXRKYXZhU2NyaXB0KCk7DQotCQkJaWYgKCFzd0pTLklzRW1wdHkoKSkNCi0JCQl7DQotCQkJCUlGWEpTX1J1bnRpbWUqIHBSdW50aW1lID0gcERvY3VtZW50LT5HZXRKc1J1bnRpbWUoKTsNCi0JCQkJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOw0KLQ0KLQkJCQlwUnVudGltZS0+U2V0UmVhZGVyRG9jdW1lbnQocERvY3VtZW50KTsNCi0NCi0JCQkJSUZYSlNfQ29udGV4dCogcENvbnRleHQgPSBwUnVudGltZS0+TmV3Q29udGV4dCgpOw0KLQkJCQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotDQotCQkJCXBDb250ZXh0LT5PbkJvb2ttYXJrX01vdXNlVXAocEJvb2ttYXJrKTsNCi0NCi0JCQkJQ0ZYX1dpZGVTdHJpbmcgY3NJbmZvOw0KLQkJCQlGWF9CT09MIGJSZXQgPSBwQ29udGV4dC0+UnVuU2NyaXB0KHN3SlMsIGNzSW5mbyk7DQotCQkJCWlmICghYlJldCkNCi0JCQkJew0KLQkJCQkJLy9DQkNMX0Zvcm1Ob3RpZnk6Ok1zZ0JveEpTRXJyb3IocFBhZ2VWaWV3LT5HZXRQYWdlVmlld1duZCgpLCBjc0luZm8pOw0KLQkJCQl9DQotDQotCQkJCXBSdW50aW1lLT5SZWxlYXNlQ29udGV4dChwQ29udGV4dCk7DQotCQkJfQ0KLQkJfQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJRG9BY3Rpb25fTm9KcyhhY3Rpb24sIHBEb2N1bWVudC8qLCBwRG9jVmlldyovKTsNCi0JfQ0KLQ0KLS8vIAlpZiAoIUlzVmFsaWREb2NWaWV3KHBEb2N1bWVudCwgcERvY1ZpZXcpKQ0KLS8vIAkJcmV0dXJuIEZBTFNFOw0KLQ0KLQlmb3IgKEZYX0lOVDMyIGk9MCxzej1hY3Rpb24uR2V0U3ViQWN0aW9uc0NvdW50KCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJQ1BERl9BY3Rpb24gc3ViYWN0aW9uID0gYWN0aW9uLkdldFN1YkFjdGlvbihpKTsNCi0JCWlmICghRXhlY3V0ZUJvb2tNYXJrKHN1YmFjdGlvbiwgcERvY3VtZW50LC8qIHBEb2NWaWV3LCovIHBCb29rbWFyaywgbGlzdCkpIHJldHVybiBGQUxTRTsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotdm9pZCBDUERGU0RLX0FjdGlvbkhhbmRsZXI6OkRvQWN0aW9uX05vSnMoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LyosIENSZWFkZXJfRG9jVmlldyogcERvY1ZpZXcqLykNCi17DQotCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCXN3aXRjaCAoYWN0aW9uLkdldFR5cGUoKSkNCi0Jew0KLQljYXNlIENQREZfQWN0aW9uOjpHb1RvOg0KLQkJRG9BY3Rpb25fR29UbyhwRG9jdW1lbnQsLyogcERvY1ZpZXcsKi8gYWN0aW9uKTsNCi0JCWJyZWFrOw0KLQljYXNlIENQREZfQWN0aW9uOjpHb1RvUjoNCi0JCURvQWN0aW9uX0dvVG9SKHBEb2N1bWVudCwgYWN0aW9uKTsNCi0JCWJyZWFrOw0KLQljYXNlIENQREZfQWN0aW9uOjpHb1RvRToNCi0JCWJyZWFrOw0KLQljYXNlIENQREZfQWN0aW9uOjpMYXVuY2g6DQotCQlEb0FjdGlvbl9MYXVuY2gocERvY3VtZW50LCBhY3Rpb24pOw0KLQkJYnJlYWs7DQotCWNhc2UgQ1BERl9BY3Rpb246OlRocmVhZDoNCi0JCWJyZWFrOw0KLQljYXNlIENQREZfQWN0aW9uOjpVUkk6DQotCQlEb0FjdGlvbl9VUkkocERvY3VtZW50LCBhY3Rpb24pOw0KLQkJYnJlYWs7DQotCWNhc2UgQ1BERl9BY3Rpb246OlNvdW5kOg0KLQkJaWYgKG1fcE1lZGlhQWN0aW9uSGFuZGxlcikNCi0JCXsNCi0JCQltX3BNZWRpYUFjdGlvbkhhbmRsZXItPkRvQWN0aW9uX1NvdW5kKGFjdGlvbiwgcERvY3VtZW50LyosIHBEb2NWaWV3Ki8pOw0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgQ1BERl9BY3Rpb246Ok1vdmllOg0KLQkJaWYgKG1fcE1lZGlhQWN0aW9uSGFuZGxlcikNCi0JCXsNCi0JCQltX3BNZWRpYUFjdGlvbkhhbmRsZXItPkRvQWN0aW9uX01vdmllKGFjdGlvbiwgcERvY3VtZW50LyosIHBEb2NWaWV3Ki8pOw0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgQ1BERl9BY3Rpb246OkhpZGU6DQotCQlpZiAobV9wRm9ybUFjdGlvbkhhbmRsZXIpDQotCQl7DQotCQkJbV9wRm9ybUFjdGlvbkhhbmRsZXItPkRvQWN0aW9uX0hpZGUoYWN0aW9uLCBwRG9jdW1lbnQpOw0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgQ1BERl9BY3Rpb246Ok5hbWVkOg0KLQkJRG9BY3Rpb25fTmFtZWQocERvY3VtZW50LCBhY3Rpb24pOw0KLQkJYnJlYWs7DQotCWNhc2UgQ1BERl9BY3Rpb246OlN1Ym1pdEZvcm06DQotCQlpZiAobV9wRm9ybUFjdGlvbkhhbmRsZXIpDQotCQl7DQotCQkJbV9wRm9ybUFjdGlvbkhhbmRsZXItPkRvQWN0aW9uX1N1Ym1pdEZvcm0oYWN0aW9uLCBwRG9jdW1lbnQvKiwgcERvY1ZpZXcqLyk7DQotCQl9DQotCQlicmVhazsNCi0JY2FzZSBDUERGX0FjdGlvbjo6UmVzZXRGb3JtOg0KLQkJaWYgKG1fcEZvcm1BY3Rpb25IYW5kbGVyKQ0KLQkJew0KLQkJCW1fcEZvcm1BY3Rpb25IYW5kbGVyLT5Eb0FjdGlvbl9SZXNldEZvcm0oYWN0aW9uLCBwRG9jdW1lbnQpOw0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgQ1BERl9BY3Rpb246OkltcG9ydERhdGE6DQotCQlpZiAobV9wRm9ybUFjdGlvbkhhbmRsZXIpDQotCQl7DQotCQkJbV9wRm9ybUFjdGlvbkhhbmRsZXItPkRvQWN0aW9uX0ltcG9ydERhdGEoYWN0aW9uLCBwRG9jdW1lbnQvKiwgcERvY1ZpZXcqLyk7DQotCQl9DQotCQlicmVhazsNCi0JY2FzZSBDUERGX0FjdGlvbjo6SmF2YVNjcmlwdDoNCi0JCUFTU0VSVChGQUxTRSk7DQotCQlicmVhazsNCi0JY2FzZSBDUERGX0FjdGlvbjo6U2V0T0NHU3RhdGU6DQotCQlEb0FjdGlvbl9TZXRPQ0dTdGF0ZShwRG9jdW1lbnQsIC8qcERvY1ZpZXcsKi8gYWN0aW9uKTsNCi0JCWJyZWFrOw0KLQljYXNlIENQREZfQWN0aW9uOjpSZW5kaXRpb246DQotCQlpZiAobV9wTWVkaWFBY3Rpb25IYW5kbGVyKQ0KLQkJew0KLQkJCW1fcE1lZGlhQWN0aW9uSGFuZGxlci0+RG9BY3Rpb25fUmVuZGl0aW9uKGFjdGlvbiwgcERvY3VtZW50LyosIHBEb2NWaWV3Ki8pOw0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgQ1BERl9BY3Rpb246OlRyYW5zOg0KLQkJYnJlYWs7DQotCWNhc2UgQ1BERl9BY3Rpb246OkdvVG8zRFZpZXc6DQotCQlicmVhazsNCi0JZGVmYXVsdDoNCi0JCWJyZWFrOw0KLQl9DQotfQ0KLQ0KLUZYX0JPT0wJQ1BERlNES19BY3Rpb25IYW5kbGVyOjpJc1ZhbGlkRG9jVmlldyhDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQvKiwgQ1JlYWRlcl9Eb2NWaWV3KiBwRG9jVmlldyovKQ0KLXsNCi0JQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsNCi0JLy9BU1NFUlQocERvY1ZpZXcgIT0gTlVMTCk7DQotDQotCS8vcmV0dXJuIHBEb2N1bWVudC0+SXNWYWxpZERvY1ZpZXcocERvY1ZpZXcpOw0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotdm9pZCBDUERGU0RLX0FjdGlvbkhhbmRsZXI6OkRvQWN0aW9uX0dvVG8oQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCAvKkNSZWFkZXJfRG9jVmlldyogcERvY1ZpZXcsKi8NCi0JCQkJCQkJCSAgY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbikNCi17DQotCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7DQotLy8JQVNTRVJUKHBEb2NWaWV3ICE9IE5VTEwpOw0KLQlBU1NFUlQoYWN0aW9uICE9IE5VTEwpOw0KLQ0KLQlDUERGX0RvY3VtZW50KiBwUERGRG9jdW1lbnQgPSBwRG9jdW1lbnQtPkdldERvY3VtZW50KCk7DQotCUFTU0VSVChwUERGRG9jdW1lbnQgIT0gTlVMTCk7DQotCUNQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAgPSBwRG9jdW1lbnQtPkdldEVudigpOw0KLQlBU1NFUlQocEFwcCAhPSBOVUxMKTsNCi0NCi0JQ1BERl9EZXN0IE15RGVzdCA9IGFjdGlvbi5HZXREZXN0KHBQREZEb2N1bWVudCk7DQotCWludCBuUGFnZUluZGV4ID0gTXlEZXN0LkdldFBhZ2VJbmRleChwUERGRG9jdW1lbnQpOw0KLQlpbnQgbkZpdFR5cGUgPSBNeURlc3QuR2V0Wm9vbU1vZGUoKTsNCi0JY29uc3QgQ1BERl9BcnJheSAqIHBNeUFycmF5ID0gKENQREZfQXJyYXkqKU15RGVzdC5tX3BPYmo7DQotCWZsb2F0KiBwUG9zQXJ5ID0gTlVMTDsNCi0JaW50IHNpemVPZkFyeSA9IDA7DQotCWlmIChwTXlBcnJheSAhPSBOVUxMKQ0KLQl7DQotCQlwUG9zQXJ5ID0gbmV3IGZsb2F0W3BNeUFycmF5LT5HZXRDb3VudCgpXTsNCi0JCWludCBqID0gMDsNCi0JCWZvciAoaW50IGkgPSAyOyBpIDwgKGludClwTXlBcnJheS0+R2V0Q291bnQoKTsgaSsrKQ0KLQkJew0KLQkJCXBQb3NBcnlbaisrXSA9IHBNeUFycmF5LT5HZXRGbG9hdChpKTsNCi0JCX0NCi0JCXNpemVPZkFyeSA9IGo7DQotCX0NCi0JcEFwcC0+RkZJX0RvR29Ub0FjdGlvbihuUGFnZUluZGV4LCBuRml0VHlwZSwgcFBvc0FyeSwgc2l6ZU9mQXJ5KTsNCi0JaWYocFBvc0FyeSkNCi0JCWRlbGV0ZVtdIHBQb3NBcnk7DQotfQ0KLQ0KLXZvaWQgQ1BERlNES19BY3Rpb25IYW5kbGVyOjpEb0FjdGlvbl9Hb1RvUihDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24pDQotew0KLQ0KLX0NCi0NCi12b2lkIENQREZTREtfQWN0aW9uSGFuZGxlcjo6RG9BY3Rpb25fTGF1bmNoKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbikNCi17DQotDQotfQ0KLQ0KLXZvaWQgQ1BERlNES19BY3Rpb25IYW5kbGVyOjpEb0FjdGlvbl9VUkkoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uKQ0KLXsNCi0gCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7DQotIAlBU1NFUlQoYWN0aW9uICE9IE5VTEwpOw0KLQ0KLSAJQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCA9IHBEb2N1bWVudC0+R2V0RW52KCk7DQotIAlBU1NFUlQocEFwcCAhPSBOVUxMKTsNCi0gDQotIAlDRlhfQnl0ZVN0cmluZyBzVVJJID0gYWN0aW9uLkdldFVSSShwRG9jdW1lbnQtPkdldERvY3VtZW50KCkpOw0KLSAJcEFwcC0+RkZJX0RvVVJJQWN0aW9uKEZYX0xQQ1NUUihzVVJJKSk7DQotfQ0KLQ0KLXZvaWQgQ1BERlNES19BY3Rpb25IYW5kbGVyOjpEb0FjdGlvbl9OYW1lZChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24pDQotew0KLSAJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsNCi0gCUFTU0VSVChhY3Rpb24gIT0gTlVMTCk7DQotIA0KLSAJQ0ZYX0J5dGVTdHJpbmcgY3NOYW1lID0gYWN0aW9uLkdldE5hbWVkQWN0aW9uKCk7DQotIAlwRG9jdW1lbnQtPkdldEVudigpLT5GRklfRXhlY3V0ZU5hbWVkQWN0aW9uKGNzTmFtZSk7DQotfQ0KLQ0KLQ0KLXZvaWQgQ1BERlNES19BY3Rpb25IYW5kbGVyOjpEb0FjdGlvbl9TZXRPQ0dTdGF0ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsLyogQ1JlYWRlcl9Eb2NWaWV3KiBwRG9jVmlldywqLyBjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uKQ0KLXsNCi19DQotDQotdm9pZCBDUERGU0RLX0FjdGlvbkhhbmRsZXI6OlJ1bkZpZWxkSmF2YVNjcmlwdChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkLCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsDQotCQkJCQkJCQkJCVBERlNES19GaWVsZEFjdGlvbiYgZGF0YSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNjcmlwdCkNCi17DQotCUFTU0VSVCh0eXBlICE9IENQREZfQUFjdGlvbjo6Q2FsY3VsYXRlKTsNCi0JQVNTRVJUKHR5cGUgIT0gQ1BERl9BQWN0aW9uOjpGb3JtYXQpOw0KLQ0KLQlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlJRlhKU19SdW50aW1lKiBwUnVudGltZSA9IHBEb2N1bWVudC0+R2V0SnNSdW50aW1lKCk7DQotCUFTU0VSVChwUnVudGltZSAhPSBOVUxMKTsNCi0NCi0JcFJ1bnRpbWUtPlNldFJlYWRlckRvY3VtZW50KHBEb2N1bWVudCk7DQotDQotCUlGWEpTX0NvbnRleHQqIHBDb250ZXh0ID0gcFJ1bnRpbWUtPk5ld0NvbnRleHQoKTsNCi0JQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOw0KLQ0KLQlzd2l0Y2ggKHR5cGUpDQotCXsNCi0JY2FzZSBDUERGX0FBY3Rpb246OkN1cnNvckVudGVyOg0KLQkJcENvbnRleHQtPk9uRmllbGRfTW91c2VFbnRlcihkYXRhLmJNb2RpZmllciwgZGF0YS5iU2hpZnQsIHBGb3JtRmllbGQpOw0KLQkJYnJlYWs7DQotCWNhc2UgQ1BERl9BQWN0aW9uOjpDdXJzb3JFeGl0Og0KLQkJcENvbnRleHQtPk9uRmllbGRfTW91c2VFeGl0KGRhdGEuYk1vZGlmaWVyLCBkYXRhLmJTaGlmdCwgcEZvcm1GaWVsZCk7DQotCQlicmVhazsNCi0JY2FzZSBDUERGX0FBY3Rpb246OkJ1dHRvbkRvd246DQotCQlwQ29udGV4dC0+T25GaWVsZF9Nb3VzZURvd24oZGF0YS5iTW9kaWZpZXIsIGRhdGEuYlNoaWZ0LCBwRm9ybUZpZWxkKTsNCi0JCWJyZWFrOw0KLQljYXNlIENQREZfQUFjdGlvbjo6QnV0dG9uVXA6DQotCQlwQ29udGV4dC0+T25GaWVsZF9Nb3VzZVVwKGRhdGEuYk1vZGlmaWVyLCBkYXRhLmJTaGlmdCwgcEZvcm1GaWVsZCk7DQotCQlicmVhazsNCi0JY2FzZSBDUERGX0FBY3Rpb246OkdldEZvY3VzOg0KLQkJcENvbnRleHQtPk9uRmllbGRfRm9jdXMoZGF0YS5iTW9kaWZpZXIsIGRhdGEuYlNoaWZ0LCBwRm9ybUZpZWxkLCBkYXRhLnNWYWx1ZSk7DQotCQlicmVhazsNCi0JY2FzZSBDUERGX0FBY3Rpb246Okxvc2VGb2N1czoNCi0JCXBDb250ZXh0LT5PbkZpZWxkX0JsdXIoZGF0YS5iTW9kaWZpZXIsIGRhdGEuYlNoaWZ0LCBwRm9ybUZpZWxkLCBkYXRhLnNWYWx1ZSk7DQotCQlicmVhazsNCi0JY2FzZSBDUERGX0FBY3Rpb246OktleVN0cm9rZToNCi0JCXBDb250ZXh0LT5PbkZpZWxkX0tleXN0cm9rZShkYXRhLm5Db21taXRLZXksIGRhdGEuc0NoYW5nZSwgZGF0YS5zQ2hhbmdlRXgsIGRhdGEuYktleURvd24sIA0KLQkJCWRhdGEuYk1vZGlmaWVyLCBkYXRhLm5TZWxFbmQsIGRhdGEublNlbFN0YXJ0LCBkYXRhLmJTaGlmdCwgcEZvcm1GaWVsZCwgZGF0YS5zVmFsdWUsDQotCQkJZGF0YS5iV2lsbENvbW1pdCwgZGF0YS5iRmllbGRGdWxsLCBkYXRhLmJSQyk7DQotCQlicmVhazsNCi0JY2FzZSBDUERGX0FBY3Rpb246OlZhbGlkYXRlOg0KLQkJcENvbnRleHQtPk9uRmllbGRfVmFsaWRhdGUoZGF0YS5zQ2hhbmdlLCBkYXRhLnNDaGFuZ2VFeCwgZGF0YS5iS2V5RG93biwgZGF0YS5iTW9kaWZpZXIsDQotCQkJZGF0YS5iU2hpZnQsIHBGb3JtRmllbGQsIGRhdGEuc1ZhbHVlLCBkYXRhLmJSQyk7DQotCQlicmVhazsNCi0JZGVmYXVsdDoNCi0JCUFTU0VSVChGQUxTRSk7DQotCQlicmVhazsNCi0JfQ0KLQ0KLQlDRlhfV2lkZVN0cmluZyBjc0luZm87DQotCUZYX0JPT0wgYlJldCA9IHBDb250ZXh0LT5SdW5TY3JpcHQoc2NyaXB0LCBjc0luZm8pOw0KLQlpZiAoIWJSZXQpDQotCXsNCi0JCS8vQ0JDTF9Gb3JtTm90aWZ5OjpNc2dCb3hKU0Vycm9yKHBQYWdlVmlldy0+R2V0UGFnZVZpZXdXbmQoKSwgY3NJbmZvKTsNCi0JfQ0KLQ0KLQlwUnVudGltZS0+UmVsZWFzZUNvbnRleHQocENvbnRleHQpOw0KLX0NCi0NCi12b2lkIENQREZTREtfQWN0aW9uSGFuZGxlcjo6UnVuRG9jdW1lbnRPcGVuSmF2YVNjcmlwdChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzU2NyaXB0TmFtZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNjcmlwdCkNCi17DQotCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCUlGWEpTX1J1bnRpbWUqIHBSdW50aW1lID0gcERvY3VtZW50LT5HZXRKc1J1bnRpbWUoKTsNCi0JQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOw0KLQ0KLQlwUnVudGltZS0+U2V0UmVhZGVyRG9jdW1lbnQocERvY3VtZW50KTsNCi0NCi0JSUZYSlNfQ29udGV4dCogcENvbnRleHQgPSBwUnVudGltZS0+TmV3Q29udGV4dCgpOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotDQotCXBDb250ZXh0LT5PbkRvY19PcGVuKHBEb2N1bWVudCwgc1NjcmlwdE5hbWUpOw0KLQ0KLQlDRlhfV2lkZVN0cmluZyBjc0luZm87DQotCUZYX0JPT0wgYlJldCA9IHBDb250ZXh0LT5SdW5TY3JpcHQoc2NyaXB0LCBjc0luZm8pOw0KLQlpZiAoIWJSZXQpDQotCXsNCi0JCS8vQ0JDTF9Gb3JtTm90aWZ5OjpNc2dCb3hKU0Vycm9yKHBQYWdlVmlldy0+R2V0UGFnZVZpZXdXbmQoKSwgY3NJbmZvKTsNCi0JfQ0KLQ0KLQlwUnVudGltZS0+UmVsZWFzZUNvbnRleHQocENvbnRleHQpOw0KLX0NCi0NCi12b2lkIENQREZTREtfQWN0aW9uSGFuZGxlcjo6UnVuRG9jdW1lbnRQYWdlSmF2YVNjcmlwdChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNjcmlwdCkNCi17DQotCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCUlGWEpTX1J1bnRpbWUqIHBSdW50aW1lID0gcERvY3VtZW50LT5HZXRKc1J1bnRpbWUoKTsNCi0JQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOw0KLQ0KLQlwUnVudGltZS0+U2V0UmVhZGVyRG9jdW1lbnQocERvY3VtZW50KTsNCi0NCi0JSUZYSlNfQ29udGV4dCogcENvbnRleHQgPSBwUnVudGltZS0+TmV3Q29udGV4dCgpOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotDQotCXN3aXRjaCAodHlwZSkNCi0JewkNCi0JY2FzZSBDUERGX0FBY3Rpb246Ok9wZW5QYWdlOg0KLQkJcENvbnRleHQtPk9uUGFnZV9PcGVuKHBEb2N1bWVudCk7DQotCQlicmVhazsNCi0JY2FzZSBDUERGX0FBY3Rpb246OkNsb3NlUGFnZToNCi0JCXBDb250ZXh0LT5PblBhZ2VfQ2xvc2UocERvY3VtZW50KTsNCi0JCWJyZWFrOw0KLQljYXNlIENQREZfQUFjdGlvbjo6Q2xvc2VEb2N1bWVudDoNCi0JCXBDb250ZXh0LT5PbkRvY19XaWxsQ2xvc2UocERvY3VtZW50KTsNCi0JCWJyZWFrOw0KLQljYXNlIENQREZfQUFjdGlvbjo6U2F2ZURvY3VtZW50Og0KLQkJcENvbnRleHQtPk9uRG9jX1dpbGxTYXZlKHBEb2N1bWVudCk7DQotCQlicmVhazsNCi0JY2FzZSBDUERGX0FBY3Rpb246OkRvY3VtZW50U2F2ZWQ6DQotCQlwQ29udGV4dC0+T25Eb2NfRGlkU2F2ZShwRG9jdW1lbnQpOw0KLQkJYnJlYWs7DQotCWNhc2UgQ1BERl9BQWN0aW9uOjpQcmludERvY3VtZW50Og0KLQkJcENvbnRleHQtPk9uRG9jX1dpbGxQcmludChwRG9jdW1lbnQpOw0KLQkJYnJlYWs7DQotCWNhc2UgQ1BERl9BQWN0aW9uOjpEb2N1bWVudFByaW50ZWQ6DQotCQlwQ29udGV4dC0+T25Eb2NfRGlkUHJpbnQocERvY3VtZW50KTsNCi0JCWJyZWFrOw0KLQljYXNlIENQREZfQUFjdGlvbjo6UGFnZVZpc2libGU6DQotCQlwQ29udGV4dC0+T25QYWdlX0luVmlldyhwRG9jdW1lbnQpOw0KLQkJYnJlYWs7DQotCWNhc2UgQ1BERl9BQWN0aW9uOjpQYWdlSW52aXNpYmxlOg0KLQkJcENvbnRleHQtPk9uUGFnZV9PdXRWaWV3KHBEb2N1bWVudCk7DQotCQlicmVhazsNCi0JZGVmYXVsdDoNCi0JCUFTU0VSVChGQUxTRSk7DQotCQlicmVhazsNCi0JfQ0KLQ0KLQlDRlhfV2lkZVN0cmluZyBjc0luZm87DQotCUZYX0JPT0wgYlJldCA9IHBDb250ZXh0LT5SdW5TY3JpcHQoc2NyaXB0LCBjc0luZm8pOw0KLQlpZiAoIWJSZXQpDQotCXsNCi0JCS8vQ0JDTF9Gb3JtTm90aWZ5OjpNc2dCb3hKU0Vycm9yKHBQYWdlVmlldy0+R2V0UGFnZVZpZXdXbmQoKSwgY3NJbmZvKTsNCi0JfQ0KLQ0KLQlwUnVudGltZS0+UmVsZWFzZUNvbnRleHQocENvbnRleHQpOw0KLX0NCi0NCi0NCi1GWF9CT09MCUNQREZTREtfRm9ybUFjdGlvbkhhbmRsZXI6OkRvQWN0aW9uX0hpZGUoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQ0KLXsNCi0JQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsNCi0JDQotCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gKENQREZTREtfSW50ZXJGb3JtKilwRG9jdW1lbnQtPkdldEludGVyRm9ybSgpOw0KLQlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsNCi0JDQotCWlmIChwSW50ZXJGb3JtLT5Eb0FjdGlvbl9IaWRlKGFjdGlvbikpDQotCXsNCi0JCXBEb2N1bWVudC0+U2V0Q2hhbmdlTWFyaygpOw0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0JDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTAlDUERGU0RLX0Zvcm1BY3Rpb25IYW5kbGVyOjpEb0FjdGlvbl9TdWJtaXRGb3JtKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkNCi17DQotCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7DQotCQ0KLQlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsNCi0JQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7DQotCQ0KLQlyZXR1cm4gcEludGVyRm9ybS0+RG9BY3Rpb25fU3VibWl0Rm9ybShhY3Rpb24pOw0KLX0NCi0NCi1GWF9CT09MCUNQREZTREtfRm9ybUFjdGlvbkhhbmRsZXI6OkRvQWN0aW9uX1Jlc2V0Rm9ybShjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpDQotew0KLQlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOw0KLQkNCi0JQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSAoQ1BERlNES19JbnRlckZvcm0qKXBEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7DQotCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOw0KLQkNCi0JaWYgKHBJbnRlckZvcm0tPkRvQWN0aW9uX1Jlc2V0Rm9ybShhY3Rpb24pKQ0KLQl7CQ0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0JDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTAlDUERGU0RLX0Zvcm1BY3Rpb25IYW5kbGVyOjpEb0FjdGlvbl9JbXBvcnREYXRhKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkNCi17DQotCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7DQotCQ0KLQlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsNCi0JQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7DQotCQ0KLQlpZiAocEludGVyRm9ybS0+RG9BY3Rpb25fSW1wb3J0RGF0YShhY3Rpb24pKQ0KLQl7DQotCQlwRG9jdW1lbnQtPlNldENoYW5nZU1hcmsoKTsJDQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQkNCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MCUNQREZTREtfTWVkaWFBY3Rpb25IYW5kbGVyOjpEb0FjdGlvbl9SZW5kaXRpb24oY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQ0KLXsNCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MCUNQREZTREtfTWVkaWFBY3Rpb25IYW5kbGVyOjpEb0FjdGlvbl9Tb3VuZChjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpDQotew0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wJQ1BERlNES19NZWRpYUFjdGlvbkhhbmRsZXI6OkRvQWN0aW9uX01vdmllKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkNCi17DQotCXJldHVybiBGQUxTRTsNCi19DQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19kZWZpbmUuaCIKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfbWdyLmgiCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX2FjdGlvbmhhbmRsZXIuaCIKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2phdmFzY3JpcHQvSUphdmFTY3JpcHQuaCIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0JBX0FjdGlvbkhhbmRsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ1BERlNES19BY3Rpb25IYW5kbGVyOjpDUERGU0RLX0FjdGlvbkhhbmRsZXIoQ1BERkRvY19FbnZpcm9ubWVudCogcEV2aSkgOiAKKwltX3BFdmkocEV2aSksCisJbV9wRm9ybUFjdGlvbkhhbmRsZXIoTlVMTCksCisJbV9wTWVkaWFBY3Rpb25IYW5kbGVyKE5VTEwpCit7CisJCW1fcEZvcm1BY3Rpb25IYW5kbGVyID0gbmV3IENQREZTREtfRm9ybUFjdGlvbkhhbmRsZXI7Cit9CisKK0NQREZTREtfQWN0aW9uSGFuZGxlcjo6fkNQREZTREtfQWN0aW9uSGFuZGxlcigpCit7CisJaWYobV9wRm9ybUFjdGlvbkhhbmRsZXIpCisJeworCQlkZWxldGUgbV9wRm9ybUFjdGlvbkhhbmRsZXI7CisJCW1fcEZvcm1BY3Rpb25IYW5kbGVyID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgQ1BERlNES19BY3Rpb25IYW5kbGVyOjpTZXRGb3JtQWN0aW9uSGFuZGxlcihDUERGU0RLX0Zvcm1BY3Rpb25IYW5kbGVyKiBwSGFuZGxlcikKK3sKKwlBU1NFUlQocEhhbmRsZXIgIT0gTlVMTCk7CisJQVNTRVJUKG1fcEZvcm1BY3Rpb25IYW5kbGVyID09IE5VTEwpOworCW1fcEZvcm1BY3Rpb25IYW5kbGVyID0gcEhhbmRsZXI7Cit9CisKK3ZvaWQgQ1BERlNES19BY3Rpb25IYW5kbGVyOjpTZXRNZWRpYUFjdGlvbkhhbmRsZXIoQ1BERlNES19NZWRpYUFjdGlvbkhhbmRsZXIqIHBIYW5kbGVyKQoreworCUFTU0VSVChwSGFuZGxlciAhPSBOVUxMKTsKKwlBU1NFUlQobV9wTWVkaWFBY3Rpb25IYW5kbGVyID09IE5VTEwpOworCW1fcE1lZGlhQWN0aW9uSGFuZGxlciA9IHBIYW5kbGVyOworfQorCit2b2lkIENQREZTREtfQWN0aW9uSGFuZGxlcjo6RGVzdHJveSgpCit7CisJZGVsZXRlIHRoaXM7Cit9CisKKy8vZG9jdW1lbnQgb3BlbgorRlhfQk9PTAlDUERGU0RLX0FjdGlvbkhhbmRsZXI6OkRvQWN0aW9uX0RvY09wZW4oY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50CisJCQkJCQkJCQkJCQkvKkNSZWFkZXJfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ1JlYWRlcl9Eb2NWaWV3ICpwRG9jVmlldyovKQoreworCUNGWF9QdHJMaXN0IGxpc3Q7CisJcmV0dXJuIEV4ZWN1dGVEb2N1bWVudE9wZW5BY3Rpb24oYWN0aW9uLCBwRG9jdW1lbnQsIC8qcERvY1ZpZXcsICovbGlzdCk7Cit9CisKKy8vZG9jdW1lbnQgb3BlbgorRlhfQk9PTAlDUERGU0RLX0FjdGlvbkhhbmRsZXI6OkRvQWN0aW9uX0phdmFTY3JpcHQoY29uc3QgQ1BERl9BY3Rpb24mIEpzQWN0aW9uLENGWF9XaWRlU3RyaW5nIGNzSlNOYW1lLAorCQkJCQkJCUNQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudC8qLCBDUmVhZGVyX0RvY1ZpZXcgKnBEb2NWaWV3Ki8pCit7CisJaWYgKEpzQWN0aW9uLkdldFR5cGUoKSA9PSBDUERGX0FjdGlvbjo6SmF2YVNjcmlwdCkKKwl7CisJCUNGWF9XaWRlU3RyaW5nIHN3SlMgPSBKc0FjdGlvbi5HZXRKYXZhU2NyaXB0KCk7CisJCWlmICghc3dKUy5Jc0VtcHR5KCkpCisJCXsKKwkJCVJ1bkRvY3VtZW50T3BlbkphdmFTY3JpcHQocERvY3VtZW50LCBjc0pTTmFtZSwgc3dKUyk7CisJCQlyZXR1cm4gVFJVRTsKKwkJfQorCX0KKworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTAlDUERGU0RLX0FjdGlvbkhhbmRsZXI6OkRvQWN0aW9uX0ZpZWxkSmF2YVNjcmlwdChjb25zdCBDUERGX0FjdGlvbiYgSnNBY3Rpb24sIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgCisJCQkJCQkJCQlDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkLCAKKwkJCQkJCQkJCVBERlNES19GaWVsZEFjdGlvbiYgZGF0YSkKK3sKKwlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gcERvY3VtZW50LT5HZXRFbnYoKTsKKwlBU1NFUlQocEVudik7CisJaWYgKHBFbnYtPklzSlNJbml0aWF0ZWQoKSAmJiBKc0FjdGlvbi5HZXRUeXBlKCkgPT0gQ1BERl9BY3Rpb246OkphdmFTY3JpcHQpCisJeworCQlDRlhfV2lkZVN0cmluZyBzd0pTID0gSnNBY3Rpb24uR2V0SmF2YVNjcmlwdCgpOworCQlpZiAoIXN3SlMuSXNFbXB0eSgpKQorCQl7CisJCQlSdW5GaWVsZEphdmFTY3JpcHQocERvY3VtZW50LCBwRm9ybUZpZWxkLCB0eXBlLCBkYXRhLCBzd0pTKTsKKwkJCXJldHVybiBUUlVFOworCQl9CisJfQorCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTAlDUERGU0RLX0FjdGlvbkhhbmRsZXI6OkRvQWN0aW9uX1BhZ2UoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgZW51bSBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIGVUeXBlLAorCQkJCQkJCQkJCUNQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudC8qLCBDUmVhZGVyX0RvY1ZpZXcgKnBEb2NWaWV3Ki8pCit7CisJQ0ZYX1B0ckxpc3QgbGlzdDsKKwlyZXR1cm4gRXhlY3V0ZURvY3VtZW50UGFnZUFjdGlvbihhY3Rpb24sIGVUeXBlLCBwRG9jdW1lbnQsLyogcERvY1ZpZXcsKi8gbGlzdCk7Cit9CisKK0ZYX0JPT0wJQ1BERlNES19BY3Rpb25IYW5kbGVyOjpEb0FjdGlvbl9Eb2N1bWVudChjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBlbnVtIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgZVR5cGUsCisJCQkJCQkJCQkJCSBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQvKiwgQ1JlYWRlcl9Eb2NWaWV3ICpwRG9jVmlldyovKQoreworCUNGWF9QdHJMaXN0IGxpc3Q7CisJcmV0dXJuIEV4ZWN1dGVEb2N1bWVudFBhZ2VBY3Rpb24oYWN0aW9uLCBlVHlwZSwgcERvY3VtZW50LC8qIHBEb2NWaWV3LCovIGxpc3QpOworfQorCitGWF9CT09MCUNQREZTREtfQWN0aW9uSGFuZGxlcjo6RG9BY3Rpb25fQm9va01hcmsoQ1BERl9Cb29rbWFyayAqcEJvb2tNYXJrLCBjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIAorCQkJCQkJCUNQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudC8qLCBDUmVhZGVyX0RvY1ZpZXcgKnBEb2NWaWV3Ki8pCit7CisJQ0ZYX1B0ckxpc3QgbGlzdDsKKwlyZXR1cm4gdGhpcy0+RXhlY3V0ZUJvb2tNYXJrKGFjdGlvbiwgcERvY3VtZW50LC8qIHBEb2NWaWV3LCovIHBCb29rTWFyaywgbGlzdCk7Cit9CisKK0ZYX0JPT0wJQ1BERlNES19BY3Rpb25IYW5kbGVyOjpEb0FjdGlvbl9TY3JlZW4oY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLCAKKwkJCQkJCQkJCQlDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsLyogQ1JlYWRlcl9Eb2NWaWV3ICpwRG9jVmlldywqLyBDUERGU0RLX0Fubm90KiBwU2NyZWVuKQoreworCUNGWF9QdHJMaXN0IGxpc3Q7CisJcmV0dXJuIHRoaXMtPkV4ZWN1dGVTY3JlZW5BY3Rpb24oYWN0aW9uLCB0eXBlLCBwRG9jdW1lbnQsLyogcERvY1ZpZXcsKi8gcFNjcmVlbiwgbGlzdCk7Cit9CisKK0ZYX0JPT0wJQ1BERlNES19BY3Rpb25IYW5kbGVyOjpEb0FjdGlvbl9MaW5rKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIAorCQkJCQkJCQkJCUNQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudC8qLCBDUmVhZGVyX0RvY1ZpZXcgKnBEb2NWaWV3Ki8pCit7CisJQ0ZYX1B0ckxpc3QgbGlzdDsKKwlyZXR1cm4gRXhlY3V0ZUxpbmtBY3Rpb24oYWN0aW9uLCBwRG9jdW1lbnQsLyogcERvY1ZpZXcsKi8gbGlzdCk7Cit9CisKK0ZYX0JPT0wJQ1BERlNES19BY3Rpb25IYW5kbGVyOjpEb0FjdGlvbl9GaWVsZChjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIAorCQkJCQkJCQkJCUNQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwvKiBDUmVhZGVyX0RvY1ZpZXcgKnBEb2NWaWV3LCovIAorCQkJCQkJCQkJCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkLCBQREZTREtfRmllbGRBY3Rpb24mIGRhdGEpCit7CisJQ0ZYX1B0ckxpc3QgbGlzdDsKKwlyZXR1cm4gRXhlY3V0ZUZpZWxkQWN0aW9uKGFjdGlvbiwgdHlwZSwgcERvY3VtZW50LC8qIHBEb2NWaWV3LCovIHBGb3JtRmllbGQsIGRhdGEsIGxpc3QpOworfQorCitGWF9CT09MCUNQREZTREtfQWN0aW9uSGFuZGxlcjo6RXhlY3V0ZURvY3VtZW50T3BlbkFjdGlvbihjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsCisJCQkJCQkJCQkJCQkJIC8qQ1JlYWRlcl9Eb2NWaWV3ICpwRG9jVmlldywqLyBDRlhfUHRyTGlzdCYgbGlzdCkKK3sKKwlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKGxpc3QuRmluZCgoQ1BERl9EaWN0aW9uYXJ5KilhY3Rpb24pKQorCQlyZXR1cm4gRkFMU0U7CisJbGlzdC5BZGRUYWlsKChDUERGX0RpY3Rpb25hcnkqKWFjdGlvbik7CisKKwlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gcERvY3VtZW50LT5HZXRFbnYoKTsKKwlBU1NFUlQocEVudik7CisJaWYgKGFjdGlvbi5HZXRUeXBlKCkgPT0gQ1BERl9BY3Rpb246OkphdmFTY3JpcHQpCisJeworCQlpZihwRW52LT5Jc0pTSW5pdGlhdGVkKCkpCisJCXsKKwkJCUNGWF9XaWRlU3RyaW5nIHN3SlMgPSBhY3Rpb24uR2V0SmF2YVNjcmlwdCgpOworCQkJaWYgKCFzd0pTLklzRW1wdHkoKSkKKwkJCXsKKwkJCQlSdW5Eb2N1bWVudE9wZW5KYXZhU2NyaXB0KHBEb2N1bWVudCwgTCIiLCBzd0pTKTsKKwkJCX0KKwkJfQorCX0KKwllbHNlCisJeworCQlEb0FjdGlvbl9Ob0pzKGFjdGlvbiwgcERvY3VtZW50LyosIHBEb2NWaWV3Ki8pOworCX0KKworLy8gCWlmICghSXNWYWxpZERvY1ZpZXcocERvY3VtZW50LCBwRG9jVmlldykpCisvLyAJCXJldHVybiBGQUxTRTsKKworCWZvciAoRlhfSU5UMzIgaT0wLHN6PWFjdGlvbi5HZXRTdWJBY3Rpb25zQ291bnQoKTsgaTxzejsgaSsrKQorCXsKKwkJQ1BERl9BY3Rpb24gc3ViYWN0aW9uID0gYWN0aW9uLkdldFN1YkFjdGlvbihpKTsKKwkJaWYgKCFFeGVjdXRlRG9jdW1lbnRPcGVuQWN0aW9uKHN1YmFjdGlvbiwgcERvY3VtZW50LC8qIHBEb2NWaWV3LCovIGxpc3QpKSByZXR1cm4gRkFMU0U7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgQ1BERlNES19BY3Rpb25IYW5kbGVyOjpFeGVjdXRlTGlua0FjdGlvbihjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLAlDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsCisJCQkJCQkJCQkJCQkgLypDUmVhZGVyX0RvY1ZpZXcqIHBEb2NWaWV3LCovIENGWF9QdHJMaXN0JiBsaXN0KQoreworCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAobGlzdC5GaW5kKChDUERGX0RpY3Rpb25hcnkqKWFjdGlvbikpCisJCXJldHVybiBGQUxTRTsKKwlsaXN0LkFkZFRhaWwoKENQREZfRGljdGlvbmFyeSopYWN0aW9uKTsKKworCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBwRG9jdW1lbnQtPkdldEVudigpOworCUFTU0VSVChwRW52KTsKKwlpZiAoYWN0aW9uLkdldFR5cGUoKSA9PSBDUERGX0FjdGlvbjo6SmF2YVNjcmlwdCkKKwl7CisJCWlmKHBFbnYtPklzSlNJbml0aWF0ZWQoKSkKKwkJeworCQkJQ0ZYX1dpZGVTdHJpbmcgc3dKUyA9IGFjdGlvbi5HZXRKYXZhU2NyaXB0KCk7CisJCQlpZiAoIXN3SlMuSXNFbXB0eSgpKQorCQkJeworCQkJCUlGWEpTX1J1bnRpbWUqIHBSdW50aW1lID0gcERvY3VtZW50LT5HZXRKc1J1bnRpbWUoKTsgLy8/Pz8/CisJCQkJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOworCisJCQkJcFJ1bnRpbWUtPlNldFJlYWRlckRvY3VtZW50KHBEb2N1bWVudCk7CisKKwkJCQlJRlhKU19Db250ZXh0KiBwQ29udGV4dCA9IHBSdW50aW1lLT5OZXdDb250ZXh0KCk7CisJCQkJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCisJCQkJcENvbnRleHQtPk9uTGlua19Nb3VzZVVwKHBEb2N1bWVudCk7CisKKwkJCQlDRlhfV2lkZVN0cmluZyBjc0luZm87CisJCQkJRlhfQk9PTCBiUmV0ID0gcENvbnRleHQtPlJ1blNjcmlwdChzd0pTLCBjc0luZm8pOworCQkJCWlmICghYlJldCkKKwkJCQl7CisJCQkJCS8vQ0JDTF9Gb3JtTm90aWZ5OjpNc2dCb3hKU0Vycm9yKHBQYWdlVmlldy0+R2V0UGFnZVZpZXdXbmQoKSwgY3NJbmZvKTsKKwkJCQl9CisKKwkJCQlwUnVudGltZS0+UmVsZWFzZUNvbnRleHQocENvbnRleHQpOworCQkJfQorCQl9CisJfQorCWVsc2UKKwl7CisJCURvQWN0aW9uX05vSnMoYWN0aW9uLCBwRG9jdW1lbnQvKiwgcERvY1ZpZXcqLyk7CisJfQorCisvLyAJaWYgKCFJc1ZhbGlkRG9jVmlldyhwRG9jdW1lbnQsIHBEb2NWaWV3KSkKKy8vIAkJcmV0dXJuIEZBTFNFOworCisJZm9yIChGWF9JTlQzMiBpPTAsc3o9YWN0aW9uLkdldFN1YkFjdGlvbnNDb3VudCgpOyBpPHN6OyBpKyspCisJeworCQlDUERGX0FjdGlvbiBzdWJhY3Rpb24gPSBhY3Rpb24uR2V0U3ViQWN0aW9uKGkpOworCQlpZiAoIUV4ZWN1dGVMaW5rQWN0aW9uKHN1YmFjdGlvbiwgcERvY3VtZW50LC8qIHBEb2NWaWV3LCovIGxpc3QpKSByZXR1cm4gRkFMU0U7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wJQ1BERlNES19BY3Rpb25IYW5kbGVyOjpFeGVjdXRlRG9jdW1lbnRQYWdlQWN0aW9uKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwKKwkJCQkJCQkJCQkJCSBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsLyogQ1JlYWRlcl9Eb2NWaWV3KiBwRG9jVmlldywqLyBDRlhfUHRyTGlzdCYgbGlzdCkKK3sKKwlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKGxpc3QuRmluZCgoQ1BERl9EaWN0aW9uYXJ5KilhY3Rpb24pKQorCQlyZXR1cm4gRkFMU0U7CisJbGlzdC5BZGRUYWlsKChDUERGX0RpY3Rpb25hcnkqKWFjdGlvbik7CisKKwlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gcERvY3VtZW50LT5HZXRFbnYoKTsKKwlBU1NFUlQocEVudik7CisJaWYgKGFjdGlvbi5HZXRUeXBlKCkgPT0gQ1BERl9BY3Rpb246OkphdmFTY3JpcHQpCisJeworCQlpZihwRW52LT5Jc0pTSW5pdGlhdGVkKCkpCisJCXsKKwkJCUNGWF9XaWRlU3RyaW5nIHN3SlMgPSBhY3Rpb24uR2V0SmF2YVNjcmlwdCgpOworCQkJaWYgKCFzd0pTLklzRW1wdHkoKSkKKwkJCXsKKwkJCQlSdW5Eb2N1bWVudFBhZ2VKYXZhU2NyaXB0KHBEb2N1bWVudCwgdHlwZSwgc3dKUyk7CisJCQl9CisJCX0KKwl9CisJZWxzZQorCXsKKwkJRG9BY3Rpb25fTm9KcyhhY3Rpb24sIHBEb2N1bWVudC8qLCBwRG9jVmlldyovKTsKKwl9CisKKwlpZiAoIUlzVmFsaWREb2NWaWV3KHBEb2N1bWVudC8qLCBwRG9jVmlldyovKSkKKwkJcmV0dXJuIEZBTFNFOworCisJZm9yIChGWF9JTlQzMiBpPTAsc3o9YWN0aW9uLkdldFN1YkFjdGlvbnNDb3VudCgpOyBpPHN6OyBpKyspCisJeworCQlDUERGX0FjdGlvbiBzdWJhY3Rpb24gPSBhY3Rpb24uR2V0U3ViQWN0aW9uKGkpOworCQlpZiAoIUV4ZWN1dGVEb2N1bWVudFBhZ2VBY3Rpb24oc3ViYWN0aW9uLCB0eXBlLCBwRG9jdW1lbnQsLyogcERvY1ZpZXcsKi8gbGlzdCkpIHJldHVybiBGQUxTRTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTAlDUERGU0RLX0FjdGlvbkhhbmRsZXI6OklzVmFsaWRGaWVsZChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIENQREZfRGljdGlvbmFyeSogcEZpZWxkRGljdCkKK3sKKwlBU1NFUlQobV9wRXZpICE9IE5VTEwpOworCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7CisJQVNTRVJUKHBGaWVsZERpY3QgIT0gTlVMTCk7CisKKwlpZiAoMS8qbV9wQXBwLT5Jc1ZhbGlkRG9jdW1lbnQocERvY3VtZW50KSovKQorCXsKKwkJQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSBwRG9jdW1lbnQtPkdldEludGVyRm9ybSgpOworCQlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsKKworCQlDUERGX0ludGVyRm9ybSogcFBERkludGVyRm9ybSA9IHBJbnRlckZvcm0tPkdldEludGVyRm9ybSgpOworCQlBU1NFUlQocFBERkludGVyRm9ybSAhPSBOVUxMKTsKKworCQlyZXR1cm4gcFBERkludGVyRm9ybS0+R2V0RmllbGRCeURpY3QocEZpZWxkRGljdCkgIT0gTlVMTDsKKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wJQ1BERlNES19BY3Rpb25IYW5kbGVyOjpFeGVjdXRlRmllbGRBY3Rpb24oY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLCAKKwkJCQkJCQkJCQkgIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwvKiBDUmVhZGVyX0RvY1ZpZXcqIHBEb2NWaWV3LCovIENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkLCAKKwkJCQkJCQkJCQkgIFBERlNES19GaWVsZEFjdGlvbiYgZGF0YSwgQ0ZYX1B0ckxpc3QmIGxpc3QpCit7CisJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsKKworCWlmIChsaXN0LkZpbmQoKENQREZfRGljdGlvbmFyeSopYWN0aW9uKSkKKwkJcmV0dXJuIEZBTFNFOworCWxpc3QuQWRkVGFpbCgoQ1BERl9EaWN0aW9uYXJ5KilhY3Rpb24pOworCisJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IHBEb2N1bWVudC0+R2V0RW52KCk7CisJQVNTRVJUKHBFbnYpOworCWlmIChhY3Rpb24uR2V0VHlwZSgpID09IENQREZfQWN0aW9uOjpKYXZhU2NyaXB0KQorCXsKKwkJaWYocEVudi0+SXNKU0luaXRpYXRlZCgpKQorCQl7CisJCQlDRlhfV2lkZVN0cmluZyBzd0pTID0gYWN0aW9uLkdldEphdmFTY3JpcHQoKTsKKwkJCWlmICghc3dKUy5Jc0VtcHR5KCkpCisJCQl7CisJCQkJUnVuRmllbGRKYXZhU2NyaXB0KHBEb2N1bWVudCwgcEZvcm1GaWVsZCwgdHlwZSwgZGF0YSwgc3dKUyk7CisJCQkJaWYgKCFJc1ZhbGlkRmllbGQocERvY3VtZW50LCBwRm9ybUZpZWxkLT5HZXRGaWVsZERpY3QoKSkpCisJCQkJCXJldHVybiBGQUxTRTsKKwkJCX0KKwkJfQorCX0KKwllbHNlCisJeworCQlEb0FjdGlvbl9Ob0pzKGFjdGlvbiwgcERvY3VtZW50LyosIHBEb2NWaWV3Ki8pOworLy8gCQlpZiAoIUlzVmFsaWREb2NWaWV3KHBEb2N1bWVudCwgcERvY1ZpZXcpKQorLy8gCQkJcmV0dXJuIEZBTFNFOworCX0KKworCWZvciAoRlhfSU5UMzIgaT0wLHN6PWFjdGlvbi5HZXRTdWJBY3Rpb25zQ291bnQoKTsgaTxzejsgaSsrKQorCXsKKwkJQ1BERl9BY3Rpb24gc3ViYWN0aW9uID0gYWN0aW9uLkdldFN1YkFjdGlvbihpKTsKKwkJaWYgKCFFeGVjdXRlRmllbGRBY3Rpb24oc3ViYWN0aW9uLCB0eXBlLCBwRG9jdW1lbnQsLyogcERvY1ZpZXcsKi8gcEZvcm1GaWVsZCwgZGF0YSwgbGlzdCkpIHJldHVybiBGQUxTRTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBDUERGU0RLX0FjdGlvbkhhbmRsZXI6OkV4ZWN1dGVTY3JlZW5BY3Rpb24oY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLCAKKwkJCQkJCQkJCQlDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsLyogQ1JlYWRlcl9Eb2NWaWV3KiBwRG9jVmlldywqLyBDUERGU0RLX0Fubm90KiBwU2NyZWVuLCBDRlhfUHRyTGlzdCYgbGlzdCkKK3sKKwlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKGxpc3QuRmluZCgoQ1BERl9EaWN0aW9uYXJ5KilhY3Rpb24pKQorCQlyZXR1cm4gRkFMU0U7CisJbGlzdC5BZGRUYWlsKChDUERGX0RpY3Rpb25hcnkqKWFjdGlvbik7CisKKwlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gcERvY3VtZW50LT5HZXRFbnYoKTsKKwlBU1NFUlQocEVudik7CisJaWYgKGFjdGlvbi5HZXRUeXBlKCkgPT0gQ1BERl9BY3Rpb246OkphdmFTY3JpcHQpCisJeworCQlpZihwRW52LT5Jc0pTSW5pdGlhdGVkKCkpCisJCXsKKwkJCUNGWF9XaWRlU3RyaW5nIHN3SlMgPSBhY3Rpb24uR2V0SmF2YVNjcmlwdCgpOworCQkJaWYgKCFzd0pTLklzRW1wdHkoKSkKKwkJCXsKKwkJCQlJRlhKU19SdW50aW1lKiBwUnVudGltZSA9IHBEb2N1bWVudC0+R2V0SnNSdW50aW1lKCk7CisJCQkJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOworCisJCQkJcFJ1bnRpbWUtPlNldFJlYWRlckRvY3VtZW50KHBEb2N1bWVudCk7CisKKwkJCQlJRlhKU19Db250ZXh0KiBwQ29udGV4dCA9IHBSdW50aW1lLT5OZXdDb250ZXh0KCk7CisJCQkJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCisJLy8gCQkJc3dpdGNoICh0eXBlKQorCS8vIAkJCXsKKwkvLyAJCQljYXNlIENQREZfQUFjdGlvbjo6Q3Vyc29yRW50ZXI6CisJLy8gCQkJCXBDb250ZXh0LT5PblNjcmVlbl9Nb3VzZUVudGVyKElzQ1RSTHByZXNzZWQoKSwgSXNTSElGVHByZXNzZWQoKSwgcFNjcmVlbik7CisJLy8gCQkJCWJyZWFrOworCS8vIAkJCWNhc2UgQ1BERl9BQWN0aW9uOjpDdXJzb3JFeGl0OgorCS8vIAkJCQlwQ29udGV4dC0+T25TY3JlZW5fTW91c2VFeGl0KElzQ1RSTHByZXNzZWQoKSwgSXNTSElGVHByZXNzZWQoKSwgcFNjcmVlbik7CisJLy8gCQkJCWJyZWFrOworCS8vIAkJCWNhc2UgQ1BERl9BQWN0aW9uOjpCdXR0b25Eb3duOgorCS8vIAkJCQlwQ29udGV4dC0+T25TY3JlZW5fTW91c2VEb3duKElzQ1RSTHByZXNzZWQoKSwgSXNTSElGVHByZXNzZWQoKSwgcFNjcmVlbik7CisJLy8gCQkJCWJyZWFrOworCS8vIAkJCWNhc2UgQ1BERl9BQWN0aW9uOjpCdXR0b25VcDoKKwkvLyAJCQkJcENvbnRleHQtPk9uU2NyZWVuX01vdXNlVXAoSXNDVFJMcHJlc3NlZCgpLCBJc1NISUZUcHJlc3NlZCgpLCBwU2NyZWVuKTsKKwkvLyAJCQkJYnJlYWs7CisJLy8gCQkJY2FzZSBDUERGX0FBY3Rpb246OkdldEZvY3VzOgorCS8vIAkJCQlwQ29udGV4dC0+T25TY3JlZW5fRm9jdXMoSXNDVFJMcHJlc3NlZCgpLCBJc1NISUZUcHJlc3NlZCgpLCBwU2NyZWVuKTsKKwkvLyAJCQkJYnJlYWs7CisJLy8gCQkJY2FzZSBDUERGX0FBY3Rpb246Okxvc2VGb2N1czoKKwkvLyAJCQkJcENvbnRleHQtPk9uU2NyZWVuX0JsdXIoSXNDVFJMcHJlc3NlZCgpLCBJc1NISUZUcHJlc3NlZCgpLCBwU2NyZWVuKTsKKwkvLyAJCQkJYnJlYWs7CisJLy8gCQkJY2FzZSBDUERGX0FBY3Rpb246OlBhZ2VPcGVuOgorCS8vIAkJCQlwQ29udGV4dC0+T25TY3JlZW5fT3BlbihJc0NUUkxwcmVzc2VkKCksIElzU0hJRlRwcmVzc2VkKCksIHBTY3JlZW4pOworCS8vIAkJCQlicmVhazsKKwkvLyAJCQljYXNlIENQREZfQUFjdGlvbjo6UGFnZUNsb3NlOgorCS8vIAkJCQlwQ29udGV4dC0+T25TY3JlZW5fQ2xvc2UoSXNDVFJMcHJlc3NlZCgpLCBJc1NISUZUcHJlc3NlZCgpLCBwU2NyZWVuKTsKKwkvLyAJCQkJYnJlYWs7CisJLy8gCQkJY2FzZSBDUERGX0FBY3Rpb246OlBhZ2VWaXNpYmxlOgorCS8vIAkJCQlwQ29udGV4dC0+T25TY3JlZW5fSW5WaWV3KElzQ1RSTHByZXNzZWQoKSwgSXNTSElGVHByZXNzZWQoKSwgcFNjcmVlbik7CisJLy8gCQkJCWJyZWFrOworCS8vIAkJCWNhc2UgQ1BERl9BQWN0aW9uOjpQYWdlSW52aXNpYmxlOgorCS8vIAkJCQlwQ29udGV4dC0+T25TY3JlZW5fT3V0VmlldyhJc0NUUkxwcmVzc2VkKCksIElzU0hJRlRwcmVzc2VkKCksIHBTY3JlZW4pOworCS8vIAkJCQlicmVhazsKKwkvLyAJCQlkZWZhdWx0OgorCS8vIAkJCQlBU1NFUlQoRkFMU0UpOworCS8vIAkJCQlicmVhazsKKwkvLyAJCQl9CisKKwkJCQlDRlhfV2lkZVN0cmluZyBjc0luZm87CisJCQkJRlhfQk9PTCBiUmV0ID0gcENvbnRleHQtPlJ1blNjcmlwdChzd0pTLCBjc0luZm8pOworCQkJCWlmICghYlJldCkKKwkJCQl7CisJCQkJCS8vQ0JDTF9Gb3JtTm90aWZ5OjpNc2dCb3hKU0Vycm9yKHBQYWdlVmlldy0+R2V0UGFnZVZpZXdXbmQoKSwgY3NJbmZvKTsKKwkJCQl9CisKKwkJCQlwUnVudGltZS0+UmVsZWFzZUNvbnRleHQocENvbnRleHQpOworCQkJfQorCQl9CisJfQorCWVsc2UKKwl7CisJCURvQWN0aW9uX05vSnMoYWN0aW9uLCBwRG9jdW1lbnQvKiwgcERvY1ZpZXcqLyk7CisJfQorCisvLyAJaWYgKCFJc1ZhbGlkRG9jVmlldyhwRG9jdW1lbnQsIHBEb2NWaWV3KSkKKy8vIAkJcmV0dXJuIEZBTFNFOworCisJZm9yIChGWF9JTlQzMiBpPTAsc3o9YWN0aW9uLkdldFN1YkFjdGlvbnNDb3VudCgpOyBpPHN6OyBpKyspCisJeworCQlDUERGX0FjdGlvbiBzdWJhY3Rpb24gPSBhY3Rpb24uR2V0U3ViQWN0aW9uKGkpOworCQlpZiAoIUV4ZWN1dGVTY3JlZW5BY3Rpb24oc3ViYWN0aW9uLCB0eXBlLCBwRG9jdW1lbnQsLyogcERvY1ZpZXcsKi8gcFNjcmVlbiwgbGlzdCkpIHJldHVybiBGQUxTRTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTAlDUERGU0RLX0FjdGlvbkhhbmRsZXI6OkV4ZWN1dGVCb29rTWFyayhjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIAorCQkJCQkJCQkJCS8qQ1JlYWRlcl9Eb2NWaWV3KiBwRG9jVmlldywqLyBDUERGX0Jvb2ttYXJrKiBwQm9va21hcmssIENGWF9QdHJMaXN0JiBsaXN0KQoreworCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAobGlzdC5GaW5kKChDUERGX0RpY3Rpb25hcnkqKWFjdGlvbikpCisJCXJldHVybiBGQUxTRTsKKwlsaXN0LkFkZFRhaWwoKENQREZfRGljdGlvbmFyeSopYWN0aW9uKTsKKworCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBwRG9jdW1lbnQtPkdldEVudigpOworCUFTU0VSVChwRW52KTsKKwlpZiAoYWN0aW9uLkdldFR5cGUoKSA9PSBDUERGX0FjdGlvbjo6SmF2YVNjcmlwdCkKKwl7CisJCWlmKHBFbnYtPklzSlNJbml0aWF0ZWQoKSkKKwkJeworCQkJQ0ZYX1dpZGVTdHJpbmcgc3dKUyA9IGFjdGlvbi5HZXRKYXZhU2NyaXB0KCk7CisJCQlpZiAoIXN3SlMuSXNFbXB0eSgpKQorCQkJeworCQkJCUlGWEpTX1J1bnRpbWUqIHBSdW50aW1lID0gcERvY3VtZW50LT5HZXRKc1J1bnRpbWUoKTsKKwkJCQlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7CisKKwkJCQlwUnVudGltZS0+U2V0UmVhZGVyRG9jdW1lbnQocERvY3VtZW50KTsKKworCQkJCUlGWEpTX0NvbnRleHQqIHBDb250ZXh0ID0gcFJ1bnRpbWUtPk5ld0NvbnRleHQoKTsKKwkJCQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7CisKKwkJCQlwQ29udGV4dC0+T25Cb29rbWFya19Nb3VzZVVwKHBCb29rbWFyayk7CisKKwkJCQlDRlhfV2lkZVN0cmluZyBjc0luZm87CisJCQkJRlhfQk9PTCBiUmV0ID0gcENvbnRleHQtPlJ1blNjcmlwdChzd0pTLCBjc0luZm8pOworCQkJCWlmICghYlJldCkKKwkJCQl7CisJCQkJCS8vQ0JDTF9Gb3JtTm90aWZ5OjpNc2dCb3hKU0Vycm9yKHBQYWdlVmlldy0+R2V0UGFnZVZpZXdXbmQoKSwgY3NJbmZvKTsKKwkJCQl9CisKKwkJCQlwUnVudGltZS0+UmVsZWFzZUNvbnRleHQocENvbnRleHQpOworCQkJfQorCQl9CisJfQorCWVsc2UKKwl7CisJCURvQWN0aW9uX05vSnMoYWN0aW9uLCBwRG9jdW1lbnQvKiwgcERvY1ZpZXcqLyk7CisJfQorCisvLyAJaWYgKCFJc1ZhbGlkRG9jVmlldyhwRG9jdW1lbnQsIHBEb2NWaWV3KSkKKy8vIAkJcmV0dXJuIEZBTFNFOworCisJZm9yIChGWF9JTlQzMiBpPTAsc3o9YWN0aW9uLkdldFN1YkFjdGlvbnNDb3VudCgpOyBpPHN6OyBpKyspCisJeworCQlDUERGX0FjdGlvbiBzdWJhY3Rpb24gPSBhY3Rpb24uR2V0U3ViQWN0aW9uKGkpOworCQlpZiAoIUV4ZWN1dGVCb29rTWFyayhzdWJhY3Rpb24sIHBEb2N1bWVudCwvKiBwRG9jVmlldywqLyBwQm9va21hcmssIGxpc3QpKSByZXR1cm4gRkFMU0U7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgQ1BERlNES19BY3Rpb25IYW5kbGVyOjpEb0FjdGlvbl9Ob0pzKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24sIENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudC8qLCBDUmVhZGVyX0RvY1ZpZXcqIHBEb2NWaWV3Ki8pCit7CisJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsKKworCXN3aXRjaCAoYWN0aW9uLkdldFR5cGUoKSkKKwl7CisJY2FzZSBDUERGX0FjdGlvbjo6R29UbzoKKwkJRG9BY3Rpb25fR29UbyhwRG9jdW1lbnQsLyogcERvY1ZpZXcsKi8gYWN0aW9uKTsKKwkJYnJlYWs7CisJY2FzZSBDUERGX0FjdGlvbjo6R29Ub1I6CisJCURvQWN0aW9uX0dvVG9SKHBEb2N1bWVudCwgYWN0aW9uKTsKKwkJYnJlYWs7CisJY2FzZSBDUERGX0FjdGlvbjo6R29Ub0U6CisJCWJyZWFrOworCWNhc2UgQ1BERl9BY3Rpb246OkxhdW5jaDoKKwkJRG9BY3Rpb25fTGF1bmNoKHBEb2N1bWVudCwgYWN0aW9uKTsKKwkJYnJlYWs7CisJY2FzZSBDUERGX0FjdGlvbjo6VGhyZWFkOgorCQlicmVhazsKKwljYXNlIENQREZfQWN0aW9uOjpVUkk6CisJCURvQWN0aW9uX1VSSShwRG9jdW1lbnQsIGFjdGlvbik7CisJCWJyZWFrOworCWNhc2UgQ1BERl9BY3Rpb246OlNvdW5kOgorCQlpZiAobV9wTWVkaWFBY3Rpb25IYW5kbGVyKQorCQl7CisJCQltX3BNZWRpYUFjdGlvbkhhbmRsZXItPkRvQWN0aW9uX1NvdW5kKGFjdGlvbiwgcERvY3VtZW50LyosIHBEb2NWaWV3Ki8pOworCQl9CisJCWJyZWFrOworCWNhc2UgQ1BERl9BY3Rpb246Ok1vdmllOgorCQlpZiAobV9wTWVkaWFBY3Rpb25IYW5kbGVyKQorCQl7CisJCQltX3BNZWRpYUFjdGlvbkhhbmRsZXItPkRvQWN0aW9uX01vdmllKGFjdGlvbiwgcERvY3VtZW50LyosIHBEb2NWaWV3Ki8pOworCQl9CisJCWJyZWFrOworCWNhc2UgQ1BERl9BY3Rpb246OkhpZGU6CisJCWlmIChtX3BGb3JtQWN0aW9uSGFuZGxlcikKKwkJeworCQkJbV9wRm9ybUFjdGlvbkhhbmRsZXItPkRvQWN0aW9uX0hpZGUoYWN0aW9uLCBwRG9jdW1lbnQpOworCQl9CisJCWJyZWFrOworCWNhc2UgQ1BERl9BY3Rpb246Ok5hbWVkOgorCQlEb0FjdGlvbl9OYW1lZChwRG9jdW1lbnQsIGFjdGlvbik7CisJCWJyZWFrOworCWNhc2UgQ1BERl9BY3Rpb246OlN1Ym1pdEZvcm06CisJCWlmIChtX3BGb3JtQWN0aW9uSGFuZGxlcikKKwkJeworCQkJbV9wRm9ybUFjdGlvbkhhbmRsZXItPkRvQWN0aW9uX1N1Ym1pdEZvcm0oYWN0aW9uLCBwRG9jdW1lbnQvKiwgcERvY1ZpZXcqLyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDUERGX0FjdGlvbjo6UmVzZXRGb3JtOgorCQlpZiAobV9wRm9ybUFjdGlvbkhhbmRsZXIpCisJCXsKKwkJCW1fcEZvcm1BY3Rpb25IYW5kbGVyLT5Eb0FjdGlvbl9SZXNldEZvcm0oYWN0aW9uLCBwRG9jdW1lbnQpOworCQl9CisJCWJyZWFrOworCWNhc2UgQ1BERl9BY3Rpb246OkltcG9ydERhdGE6CisJCWlmIChtX3BGb3JtQWN0aW9uSGFuZGxlcikKKwkJeworCQkJbV9wRm9ybUFjdGlvbkhhbmRsZXItPkRvQWN0aW9uX0ltcG9ydERhdGEoYWN0aW9uLCBwRG9jdW1lbnQvKiwgcERvY1ZpZXcqLyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDUERGX0FjdGlvbjo6SmF2YVNjcmlwdDoKKwkJQVNTRVJUKEZBTFNFKTsKKwkJYnJlYWs7CisJY2FzZSBDUERGX0FjdGlvbjo6U2V0T0NHU3RhdGU6CisJCURvQWN0aW9uX1NldE9DR1N0YXRlKHBEb2N1bWVudCwgLypwRG9jVmlldywqLyBhY3Rpb24pOworCQlicmVhazsKKwljYXNlIENQREZfQWN0aW9uOjpSZW5kaXRpb246CisJCWlmIChtX3BNZWRpYUFjdGlvbkhhbmRsZXIpCisJCXsKKwkJCW1fcE1lZGlhQWN0aW9uSGFuZGxlci0+RG9BY3Rpb25fUmVuZGl0aW9uKGFjdGlvbiwgcERvY3VtZW50LyosIHBEb2NWaWV3Ki8pOworCQl9CisJCWJyZWFrOworCWNhc2UgQ1BERl9BY3Rpb246OlRyYW5zOgorCQlicmVhazsKKwljYXNlIENQREZfQWN0aW9uOjpHb1RvM0RWaWV3OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK0ZYX0JPT0wJQ1BERlNES19BY3Rpb25IYW5kbGVyOjpJc1ZhbGlkRG9jVmlldyhDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQvKiwgQ1JlYWRlcl9Eb2NWaWV3KiBwRG9jVmlldyovKQoreworCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7CisJLy9BU1NFUlQocERvY1ZpZXcgIT0gTlVMTCk7CisKKwkvL3JldHVybiBwRG9jdW1lbnQtPklzVmFsaWREb2NWaWV3KHBEb2NWaWV3KTsKKwlyZXR1cm4gVFJVRTsKK30KKwordm9pZCBDUERGU0RLX0FjdGlvbkhhbmRsZXI6OkRvQWN0aW9uX0dvVG8oQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCAvKkNSZWFkZXJfRG9jVmlldyogcERvY1ZpZXcsKi8KKwkJCQkJCQkJICBjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uKQoreworCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7CisvLwlBU1NFUlQocERvY1ZpZXcgIT0gTlVMTCk7CisJQVNTRVJUKGFjdGlvbiAhPSBOVUxMKTsKKworCUNQREZfRG9jdW1lbnQqIHBQREZEb2N1bWVudCA9IHBEb2N1bWVudC0+R2V0RG9jdW1lbnQoKTsKKwlBU1NFUlQocFBERkRvY3VtZW50ICE9IE5VTEwpOworCUNQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAgPSBwRG9jdW1lbnQtPkdldEVudigpOworCUFTU0VSVChwQXBwICE9IE5VTEwpOworCisJQ1BERl9EZXN0IE15RGVzdCA9IGFjdGlvbi5HZXREZXN0KHBQREZEb2N1bWVudCk7CisJaW50IG5QYWdlSW5kZXggPSBNeURlc3QuR2V0UGFnZUluZGV4KHBQREZEb2N1bWVudCk7CisJaW50IG5GaXRUeXBlID0gTXlEZXN0LkdldFpvb21Nb2RlKCk7CisJY29uc3QgQ1BERl9BcnJheSAqIHBNeUFycmF5ID0gKENQREZfQXJyYXkqKU15RGVzdC5tX3BPYmo7CisJZmxvYXQqIHBQb3NBcnkgPSBOVUxMOworCWludCBzaXplT2ZBcnkgPSAwOworCWlmIChwTXlBcnJheSAhPSBOVUxMKQorCXsKKwkJcFBvc0FyeSA9IG5ldyBmbG9hdFtwTXlBcnJheS0+R2V0Q291bnQoKV07CisJCWludCBqID0gMDsKKwkJZm9yIChpbnQgaSA9IDI7IGkgPCAoaW50KXBNeUFycmF5LT5HZXRDb3VudCgpOyBpKyspCisJCXsKKwkJCXBQb3NBcnlbaisrXSA9IHBNeUFycmF5LT5HZXRGbG9hdChpKTsKKwkJfQorCQlzaXplT2ZBcnkgPSBqOworCX0KKwlwQXBwLT5GRklfRG9Hb1RvQWN0aW9uKG5QYWdlSW5kZXgsIG5GaXRUeXBlLCBwUG9zQXJ5LCBzaXplT2ZBcnkpOworCWlmKHBQb3NBcnkpCisJCWRlbGV0ZVtdIHBQb3NBcnk7Cit9CisKK3ZvaWQgQ1BERlNES19BY3Rpb25IYW5kbGVyOjpEb0FjdGlvbl9Hb1RvUihDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24pCit7CisKK30KKwordm9pZCBDUERGU0RLX0FjdGlvbkhhbmRsZXI6OkRvQWN0aW9uX0xhdW5jaChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24pCit7CisKK30KKwordm9pZCBDUERGU0RLX0FjdGlvbkhhbmRsZXI6OkRvQWN0aW9uX1VSSShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24pCit7CisgCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7CisgCUFTU0VSVChhY3Rpb24gIT0gTlVMTCk7CisKKyAJQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCA9IHBEb2N1bWVudC0+R2V0RW52KCk7CisgCUFTU0VSVChwQXBwICE9IE5VTEwpOworIAorIAlDRlhfQnl0ZVN0cmluZyBzVVJJID0gYWN0aW9uLkdldFVSSShwRG9jdW1lbnQtPkdldERvY3VtZW50KCkpOworIAlwQXBwLT5GRklfRG9VUklBY3Rpb24oRlhfTFBDU1RSKHNVUkkpKTsKK30KKwordm9pZCBDUERGU0RLX0FjdGlvbkhhbmRsZXI6OkRvQWN0aW9uX05hbWVkKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbikKK3sKKyAJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsKKyAJQVNTRVJUKGFjdGlvbiAhPSBOVUxMKTsKKyAKKyAJQ0ZYX0J5dGVTdHJpbmcgY3NOYW1lID0gYWN0aW9uLkdldE5hbWVkQWN0aW9uKCk7CisgCXBEb2N1bWVudC0+R2V0RW52KCktPkZGSV9FeGVjdXRlTmFtZWRBY3Rpb24oY3NOYW1lKTsKK30KKworCit2b2lkIENQREZTREtfQWN0aW9uSGFuZGxlcjo6RG9BY3Rpb25fU2V0T0NHU3RhdGUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LC8qIENSZWFkZXJfRG9jVmlldyogcERvY1ZpZXcsKi8gY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbikKK3sKK30KKwordm9pZCBDUERGU0RLX0FjdGlvbkhhbmRsZXI6OlJ1bkZpZWxkSmF2YVNjcmlwdChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkLCBDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsCisJCQkJCQkJCQkJUERGU0RLX0ZpZWxkQWN0aW9uJiBkYXRhLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc2NyaXB0KQoreworCUFTU0VSVCh0eXBlICE9IENQREZfQUFjdGlvbjo6Q2FsY3VsYXRlKTsKKwlBU1NFUlQodHlwZSAhPSBDUERGX0FBY3Rpb246OkZvcm1hdCk7CisKKwlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOworCisJSUZYSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwRG9jdW1lbnQtPkdldEpzUnVudGltZSgpOworCUFTU0VSVChwUnVudGltZSAhPSBOVUxMKTsKKworCXBSdW50aW1lLT5TZXRSZWFkZXJEb2N1bWVudChwRG9jdW1lbnQpOworCisJSUZYSlNfQ29udGV4dCogcENvbnRleHQgPSBwUnVudGltZS0+TmV3Q29udGV4dCgpOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKworCXN3aXRjaCAodHlwZSkKKwl7CisJY2FzZSBDUERGX0FBY3Rpb246OkN1cnNvckVudGVyOgorCQlwQ29udGV4dC0+T25GaWVsZF9Nb3VzZUVudGVyKGRhdGEuYk1vZGlmaWVyLCBkYXRhLmJTaGlmdCwgcEZvcm1GaWVsZCk7CisJCWJyZWFrOworCWNhc2UgQ1BERl9BQWN0aW9uOjpDdXJzb3JFeGl0OgorCQlwQ29udGV4dC0+T25GaWVsZF9Nb3VzZUV4aXQoZGF0YS5iTW9kaWZpZXIsIGRhdGEuYlNoaWZ0LCBwRm9ybUZpZWxkKTsKKwkJYnJlYWs7CisJY2FzZSBDUERGX0FBY3Rpb246OkJ1dHRvbkRvd246CisJCXBDb250ZXh0LT5PbkZpZWxkX01vdXNlRG93bihkYXRhLmJNb2RpZmllciwgZGF0YS5iU2hpZnQsIHBGb3JtRmllbGQpOworCQlicmVhazsKKwljYXNlIENQREZfQUFjdGlvbjo6QnV0dG9uVXA6CisJCXBDb250ZXh0LT5PbkZpZWxkX01vdXNlVXAoZGF0YS5iTW9kaWZpZXIsIGRhdGEuYlNoaWZ0LCBwRm9ybUZpZWxkKTsKKwkJYnJlYWs7CisJY2FzZSBDUERGX0FBY3Rpb246OkdldEZvY3VzOgorCQlwQ29udGV4dC0+T25GaWVsZF9Gb2N1cyhkYXRhLmJNb2RpZmllciwgZGF0YS5iU2hpZnQsIHBGb3JtRmllbGQsIGRhdGEuc1ZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBDUERGX0FBY3Rpb246Okxvc2VGb2N1czoKKwkJcENvbnRleHQtPk9uRmllbGRfQmx1cihkYXRhLmJNb2RpZmllciwgZGF0YS5iU2hpZnQsIHBGb3JtRmllbGQsIGRhdGEuc1ZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBDUERGX0FBY3Rpb246OktleVN0cm9rZToKKwkJcENvbnRleHQtPk9uRmllbGRfS2V5c3Ryb2tlKGRhdGEubkNvbW1pdEtleSwgZGF0YS5zQ2hhbmdlLCBkYXRhLnNDaGFuZ2VFeCwgZGF0YS5iS2V5RG93biwgCisJCQlkYXRhLmJNb2RpZmllciwgZGF0YS5uU2VsRW5kLCBkYXRhLm5TZWxTdGFydCwgZGF0YS5iU2hpZnQsIHBGb3JtRmllbGQsIGRhdGEuc1ZhbHVlLAorCQkJZGF0YS5iV2lsbENvbW1pdCwgZGF0YS5iRmllbGRGdWxsLCBkYXRhLmJSQyk7CisJCWJyZWFrOworCWNhc2UgQ1BERl9BQWN0aW9uOjpWYWxpZGF0ZToKKwkJcENvbnRleHQtPk9uRmllbGRfVmFsaWRhdGUoZGF0YS5zQ2hhbmdlLCBkYXRhLnNDaGFuZ2VFeCwgZGF0YS5iS2V5RG93biwgZGF0YS5iTW9kaWZpZXIsCisJCQlkYXRhLmJTaGlmdCwgcEZvcm1GaWVsZCwgZGF0YS5zVmFsdWUsIGRhdGEuYlJDKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQVNTRVJUKEZBTFNFKTsKKwkJYnJlYWs7CisJfQorCisJQ0ZYX1dpZGVTdHJpbmcgY3NJbmZvOworCUZYX0JPT0wgYlJldCA9IHBDb250ZXh0LT5SdW5TY3JpcHQoc2NyaXB0LCBjc0luZm8pOworCWlmICghYlJldCkKKwl7CisJCS8vQ0JDTF9Gb3JtTm90aWZ5OjpNc2dCb3hKU0Vycm9yKHBQYWdlVmlldy0+R2V0UGFnZVZpZXdXbmQoKSwgY3NJbmZvKTsKKwl9CisKKwlwUnVudGltZS0+UmVsZWFzZUNvbnRleHQocENvbnRleHQpOworfQorCit2b2lkIENQREZTREtfQWN0aW9uSGFuZGxlcjo6UnVuRG9jdW1lbnRPcGVuSmF2YVNjcmlwdChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzU2NyaXB0TmFtZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNjcmlwdCkKK3sKKwlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOworCisJSUZYSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwRG9jdW1lbnQtPkdldEpzUnVudGltZSgpOworCUFTU0VSVChwUnVudGltZSAhPSBOVUxMKTsKKworCXBSdW50aW1lLT5TZXRSZWFkZXJEb2N1bWVudChwRG9jdW1lbnQpOworCisJSUZYSlNfQ29udGV4dCogcENvbnRleHQgPSBwUnVudGltZS0+TmV3Q29udGV4dCgpOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKworCXBDb250ZXh0LT5PbkRvY19PcGVuKHBEb2N1bWVudCwgc1NjcmlwdE5hbWUpOworCisJQ0ZYX1dpZGVTdHJpbmcgY3NJbmZvOworCUZYX0JPT0wgYlJldCA9IHBDb250ZXh0LT5SdW5TY3JpcHQoc2NyaXB0LCBjc0luZm8pOworCWlmICghYlJldCkKKwl7CisJCS8vQ0JDTF9Gb3JtTm90aWZ5OjpNc2dCb3hKU0Vycm9yKHBQYWdlVmlldy0+R2V0UGFnZVZpZXdXbmQoKSwgY3NJbmZvKTsKKwl9CisKKwlwUnVudGltZS0+UmVsZWFzZUNvbnRleHQocENvbnRleHQpOworfQorCit2b2lkIENQREZTREtfQWN0aW9uSGFuZGxlcjo6UnVuRG9jdW1lbnRQYWdlSmF2YVNjcmlwdChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgdHlwZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNjcmlwdCkKK3sKKwlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOworCisJSUZYSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwRG9jdW1lbnQtPkdldEpzUnVudGltZSgpOworCUFTU0VSVChwUnVudGltZSAhPSBOVUxMKTsKKworCXBSdW50aW1lLT5TZXRSZWFkZXJEb2N1bWVudChwRG9jdW1lbnQpOworCisJSUZYSlNfQ29udGV4dCogcENvbnRleHQgPSBwUnVudGltZS0+TmV3Q29udGV4dCgpOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKworCXN3aXRjaCAodHlwZSkKKwl7CQorCWNhc2UgQ1BERl9BQWN0aW9uOjpPcGVuUGFnZToKKwkJcENvbnRleHQtPk9uUGFnZV9PcGVuKHBEb2N1bWVudCk7CisJCWJyZWFrOworCWNhc2UgQ1BERl9BQWN0aW9uOjpDbG9zZVBhZ2U6CisJCXBDb250ZXh0LT5PblBhZ2VfQ2xvc2UocERvY3VtZW50KTsKKwkJYnJlYWs7CisJY2FzZSBDUERGX0FBY3Rpb246OkNsb3NlRG9jdW1lbnQ6CisJCXBDb250ZXh0LT5PbkRvY19XaWxsQ2xvc2UocERvY3VtZW50KTsKKwkJYnJlYWs7CisJY2FzZSBDUERGX0FBY3Rpb246OlNhdmVEb2N1bWVudDoKKwkJcENvbnRleHQtPk9uRG9jX1dpbGxTYXZlKHBEb2N1bWVudCk7CisJCWJyZWFrOworCWNhc2UgQ1BERl9BQWN0aW9uOjpEb2N1bWVudFNhdmVkOgorCQlwQ29udGV4dC0+T25Eb2NfRGlkU2F2ZShwRG9jdW1lbnQpOworCQlicmVhazsKKwljYXNlIENQREZfQUFjdGlvbjo6UHJpbnREb2N1bWVudDoKKwkJcENvbnRleHQtPk9uRG9jX1dpbGxQcmludChwRG9jdW1lbnQpOworCQlicmVhazsKKwljYXNlIENQREZfQUFjdGlvbjo6RG9jdW1lbnRQcmludGVkOgorCQlwQ29udGV4dC0+T25Eb2NfRGlkUHJpbnQocERvY3VtZW50KTsKKwkJYnJlYWs7CisJY2FzZSBDUERGX0FBY3Rpb246OlBhZ2VWaXNpYmxlOgorCQlwQ29udGV4dC0+T25QYWdlX0luVmlldyhwRG9jdW1lbnQpOworCQlicmVhazsKKwljYXNlIENQREZfQUFjdGlvbjo6UGFnZUludmlzaWJsZToKKwkJcENvbnRleHQtPk9uUGFnZV9PdXRWaWV3KHBEb2N1bWVudCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUFTU0VSVChGQUxTRSk7CisJCWJyZWFrOworCX0KKworCUNGWF9XaWRlU3RyaW5nIGNzSW5mbzsKKwlGWF9CT09MIGJSZXQgPSBwQ29udGV4dC0+UnVuU2NyaXB0KHNjcmlwdCwgY3NJbmZvKTsKKwlpZiAoIWJSZXQpCisJeworCQkvL0NCQ0xfRm9ybU5vdGlmeTo6TXNnQm94SlNFcnJvcihwUGFnZVZpZXctPkdldFBhZ2VWaWV3V25kKCksIGNzSW5mbyk7CisJfQorCisJcFJ1bnRpbWUtPlJlbGVhc2VDb250ZXh0KHBDb250ZXh0KTsKK30KKworCitGWF9CT09MCUNQREZTREtfRm9ybUFjdGlvbkhhbmRsZXI6OkRvQWN0aW9uX0hpZGUoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQoreworCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7CisJCisJQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSAoQ1BERlNES19JbnRlckZvcm0qKXBEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7CisJQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7CisJCisJaWYgKHBJbnRlckZvcm0tPkRvQWN0aW9uX0hpZGUoYWN0aW9uKSkKKwl7CisJCXBEb2N1bWVudC0+U2V0Q2hhbmdlTWFyaygpOworCQlyZXR1cm4gVFJVRTsKKwl9CisJCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MCUNQREZTREtfRm9ybUFjdGlvbkhhbmRsZXI6OkRvQWN0aW9uX1N1Ym1pdEZvcm0oY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQoreworCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7CisJCisJQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSAoQ1BERlNES19JbnRlckZvcm0qKXBEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7CisJQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7CisJCisJcmV0dXJuIHBJbnRlckZvcm0tPkRvQWN0aW9uX1N1Ym1pdEZvcm0oYWN0aW9uKTsKK30KKworRlhfQk9PTAlDUERGU0RLX0Zvcm1BY3Rpb25IYW5kbGVyOjpEb0FjdGlvbl9SZXNldEZvcm0oY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQoreworCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7CisJCisJQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSAoQ1BERlNES19JbnRlckZvcm0qKXBEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7CisJQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7CisJCisJaWYgKHBJbnRlckZvcm0tPkRvQWN0aW9uX1Jlc2V0Rm9ybShhY3Rpb24pKQorCXsJCisJCXJldHVybiBUUlVFOworCX0KKwkKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wJQ1BERlNES19Gb3JtQWN0aW9uSGFuZGxlcjo6RG9BY3Rpb25fSW1wb3J0RGF0YShjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uLCBDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQpCit7CisJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsKKwkKKwlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsKKwlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsKKwkKKwlpZiAocEludGVyRm9ybS0+RG9BY3Rpb25fSW1wb3J0RGF0YShhY3Rpb24pKQorCXsKKwkJcERvY3VtZW50LT5TZXRDaGFuZ2VNYXJrKCk7CQorCQlyZXR1cm4gVFJVRTsKKwl9CisJCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MCUNQREZTREtfTWVkaWFBY3Rpb25IYW5kbGVyOjpEb0FjdGlvbl9SZW5kaXRpb24oY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQoreworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTAlDUERGU0RLX01lZGlhQWN0aW9uSGFuZGxlcjo6RG9BY3Rpb25fU291bmQoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQoreworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTAlDUERGU0RLX01lZGlhQWN0aW9uSGFuZGxlcjo6RG9BY3Rpb25fTW92aWUoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbiwgQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQoreworCXJldHVybiBGQUxTRTsKK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvZnNka19hbm5vdGhhbmRsZXIuY3BwIGIvZnBkZnNkay9zcmMvZnNka19hbm5vdGhhbmRsZXIuY3BwCmluZGV4IGIyYTI0YTguLjlmMjA4ZDMgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2ZzZGtfYW5ub3RoYW5kbGVyLmNwcAorKysgYi9mcGRmc2RrL3NyYy9mc2RrX2Fubm90aGFuZGxlci5jcHAKQEAgLTEsOTQ1ICsxLDk0NSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19kZWZpbmUuaCINCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX21nci5oIg0KLSNpbmNsdWRlICIuLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0Zvcm1GaWxsZXIuaCINCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX2Fubm90aGFuZGxlci5oIg0KLQ0KLQ0KLUNQREZTREtfQW5ub3RIYW5kbGVyTWdyOjpDUERGU0RLX0Fubm90SGFuZGxlck1ncihDUERGRG9jX0Vudmlyb25tZW50KiBwQXBwKQ0KLXsNCi0JbV9wQXBwID0gcEFwcDsNCi0NCi0JQ1BERlNES19CRkFubm90SGFuZGxlciogcEhhbmRsZXIgPSBuZXcgQ1BERlNES19CRkFubm90SGFuZGxlcihtX3BBcHApOw0KLQlwSGFuZGxlci0+U2V0Rm9ybUZpbGxlcihtX3BBcHAtPkdldElGb3JtRmlsbGVyKCkpOw0KLQlSZWdpc3RlckFubm90SGFuZGxlcihwSGFuZGxlcik7DQotfQ0KLQ0KLUNQREZTREtfQW5ub3RIYW5kbGVyTWdyOjp+Q1BERlNES19Bbm5vdEhhbmRsZXJNZ3IoKQ0KLXsNCi0JZm9yKGludCBpPTA7IGk8bV9IYW5kbGVycy5HZXRTaXplKCk7IGkrKykNCi0Jew0KLQkJSVBERlNES19Bbm5vdEhhbmRsZXIqIHBIYW5kbGVyID0gbV9IYW5kbGVycy5HZXRBdChpKTsNCi0JCWRlbGV0ZSBwSGFuZGxlcjsNCi0JfQ0KLQltX0hhbmRsZXJzLlJlbW92ZUFsbCgpOw0KLQltX21hcFR5cGUySGFuZGxlci5SZW1vdmVBbGwoKTsNCi19DQotDQotdm9pZAlDUERGU0RLX0Fubm90SGFuZGxlck1ncjo6UmVnaXN0ZXJBbm5vdEhhbmRsZXIoSVBERlNES19Bbm5vdEhhbmRsZXIqIHBBbm5vdEhhbmRsZXIpDQotew0KLQlBU1NFUlQocEFubm90SGFuZGxlciAhPSBOVUxMKTsNCi0JDQotCUFTU0VSVChHZXRBbm5vdEhhbmRsZXIocEFubm90SGFuZGxlci0+R2V0VHlwZSgpKSA9PSBOVUxMKTsNCi0JDQotCW1fSGFuZGxlcnMuQWRkKHBBbm5vdEhhbmRsZXIpOw0KLQltX21hcFR5cGUySGFuZGxlci5TZXRBdChwQW5ub3RIYW5kbGVyLT5HZXRUeXBlKCksICh2b2lkKilwQW5ub3RIYW5kbGVyKTsNCi19DQotDQotdm9pZCBDUERGU0RLX0Fubm90SGFuZGxlck1ncjo6VW5SZWdpc3RlckFubm90SGFuZGxlcihJUERGU0RLX0Fubm90SGFuZGxlciogcEFubm90SGFuZGxlcikNCi17DQotCUFTU0VSVChwQW5ub3RIYW5kbGVyICE9IE5VTEwpOw0KLQkNCi0JbV9tYXBUeXBlMkhhbmRsZXIuUmVtb3ZlS2V5KHBBbm5vdEhhbmRsZXItPkdldFR5cGUoKSk7DQotCQ0KLQlmb3IgKGludCBpPTAsIHN6PW1fSGFuZGxlcnMuR2V0U2l6ZSgpOyBpPHN6OyBpKyspDQotCXsNCi0JCWlmIChtX0hhbmRsZXJzLkdldEF0KGkpID09IHBBbm5vdEhhbmRsZXIpDQotCQl7DQotCQkJbV9IYW5kbGVycy5SZW1vdmVBdChpKTsNCi0JCQlicmVhazsNCi0JCX0NCi0JfQ0KLX0NCi0NCi1DUERGU0RLX0Fubm90KiBDUERGU0RLX0Fubm90SGFuZGxlck1ncjo6TmV3QW5ub3QoQ1BERl9Bbm5vdCAqIHBBbm5vdCwgQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3KQ0KLXsNCi0JQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsNCi0JQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsNCi0JDQotCWlmIChJUERGU0RLX0Fubm90SGFuZGxlciogcEFubm90SGFuZGxlciA9IEdldEFubm90SGFuZGxlcihwQW5ub3QtPkdldFN1YlR5cGUoKSkpDQotCXsNCi0JCXJldHVybiBwQW5ub3RIYW5kbGVyLT5OZXdBbm5vdChwQW5ub3QsIHBQYWdlVmlldyk7DQotCX0NCi0JDQotCXJldHVybiBuZXcgQ1BERlNES19Bbm5vdChwQW5ub3QsIHBQYWdlVmlldyk7DQotfQ0KLQ0KLXZvaWQgQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OlJlbGVhc2VBbm5vdChDUERGU0RLX0Fubm90KiBwQW5ub3QpDQotew0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQkNCi0JcEFubm90LT5HZXRQREZQYWdlKCk7DQotCQ0KLQlpZiAoSVBERlNES19Bbm5vdEhhbmRsZXIqIHBBbm5vdEhhbmRsZXIgPSBHZXRBbm5vdEhhbmRsZXIocEFubm90KSkNCi0Jew0KLQkJcEFubm90SGFuZGxlci0+T25SZWxlYXNlKHBBbm5vdCk7DQotCQlwQW5ub3RIYW5kbGVyLT5SZWxlYXNlQW5ub3QocEFubm90KTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCWRlbGV0ZSAoQ1BERlNES19Bbm5vdCopcEFubm90Ow0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OkFubm90X09uQ3JlYXRlKENQREZTREtfQW5ub3QqIHBBbm5vdCkNCi17DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotCQ0KLQlDUERGX0Fubm90KiBwUERGQW5ub3QgPSBwQW5ub3QtPkdldFBERkFubm90KCk7DQotCUFTU0VSVChwUERGQW5ub3QgIT0gTlVMTCk7DQotCUFTU0VSVChwUERGQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsNCi0JDQotCUNQREZTREtfRGF0ZVRpbWUgY3VyVGltZTsNCi0JcFBERkFubm90LT5tX3BBbm5vdERpY3QtPlNldEF0U3RyaW5nKCJNIiwgY3VyVGltZS5Ub1BERkRhdGVUaW1lU3RyaW5nKCkpOw0KLQlwUERGQW5ub3QtPm1fcEFubm90RGljdC0+U2V0QXROdW1iZXIoIkYiLCAoaW50KTApOwkNCi0JDQotCWlmIChJUERGU0RLX0Fubm90SGFuZGxlciogcEFubm90SGFuZGxlciA9IEdldEFubm90SGFuZGxlcihwQW5ub3QpKQ0KLQl7DQotCQlwQW5ub3RIYW5kbGVyLT5PbkNyZWF0ZShwQW5ub3QpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OkFubm90X09uTG9hZChDUERGU0RLX0Fubm90KiBwQW5ub3QpDQotew0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQkNCi0JaWYgKElQREZTREtfQW5ub3RIYW5kbGVyKiBwQW5ub3RIYW5kbGVyID0gR2V0QW5ub3RIYW5kbGVyKHBBbm5vdCkpDQotCXsNCi0JCXBBbm5vdEhhbmRsZXItPk9uTG9hZChwQW5ub3QpOw0KLQl9DQotfQ0KLQ0KLUlQREZTREtfQW5ub3RIYW5kbGVyKiBDUERGU0RLX0Fubm90SGFuZGxlck1ncjo6R2V0QW5ub3RIYW5kbGVyKENQREZTREtfQW5ub3QqIHBBbm5vdCkgY29uc3QNCi17DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotCQ0KLQlDUERGX0Fubm90KiBwUERGQW5ub3QgPSBwQW5ub3QtPkdldFBERkFubm90KCk7DQotCUFTU0VSVChwUERGQW5ub3QgIT0gTlVMTCk7DQotCQ0KLQlyZXR1cm4gR2V0QW5ub3RIYW5kbGVyKHBQREZBbm5vdC0+R2V0U3ViVHlwZSgpKTsNCi19DQotDQotSVBERlNES19Bbm5vdEhhbmRsZXIqIENQREZTREtfQW5ub3RIYW5kbGVyTWdyOjpHZXRBbm5vdEhhbmRsZXIoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNUeXBlKSBjb25zdA0KLXsNCi0Jdm9pZCogcFJldCA9IE5VTEw7DQotCW1fbWFwVHlwZTJIYW5kbGVyLkxvb2t1cChzVHlwZSwgcFJldCk7CQ0KLQlyZXR1cm4gKElQREZTREtfQW5ub3RIYW5kbGVyKilwUmV0Ow0KLX0NCi0NCi12b2lkIENQREZTREtfQW5ub3RIYW5kbGVyTWdyOjpBbm5vdF9PbkRyYXcoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsRlhfRFdPUkQgZHdGbGFncykNCi17DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotCQ0KLQlpZiAoSVBERlNES19Bbm5vdEhhbmRsZXIqIHBBbm5vdEhhbmRsZXIgPSBHZXRBbm5vdEhhbmRsZXIocEFubm90KSkNCi0Jew0KLQkJcEFubm90SGFuZGxlci0+T25EcmF3KHBQYWdlVmlldywgcEFubm90LCBwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIGR3RmxhZ3MpOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJcEFubm90LT5EcmF3QXBwZWFyYW5jZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIENQREZfQW5ub3Q6Ok5vcm1hbCwgTlVMTCk7DQotCX0NCi19DQotDQotDQotRlhfQk9PTCBDUERGU0RLX0Fubm90SGFuZGxlck1ncjo6QW5ub3RfT25MQnV0dG9uRG93bihDUERGU0RLX1BhZ2VWaWV3ICogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpDQotew0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQkNCi0JaWYgKElQREZTREtfQW5ub3RIYW5kbGVyKiBwQW5ub3RIYW5kbGVyID0gR2V0QW5ub3RIYW5kbGVyKHBBbm5vdCkpDQotCXsNCi0JCXJldHVybiBwQW5ub3RIYW5kbGVyLT5PbkxCdXR0b25Eb3duKHBQYWdlVmlldywgcEFubm90LCBuRmxhZ3MsIHBvaW50KTsNCi0JfQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLUZYX0JPT0wgQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OkFubm90X09uTEJ1dHRvblVwKENQREZTREtfUGFnZVZpZXcgKiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkNCi0gew0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQ0KLQlpZiAoSVBERlNES19Bbm5vdEhhbmRsZXIqIHBBbm5vdEhhbmRsZXIgPSBHZXRBbm5vdEhhbmRsZXIocEFubm90KSkNCi0Jew0KLQkJcmV0dXJuIHBBbm5vdEhhbmRsZXItPk9uTEJ1dHRvblVwKHBQYWdlVmlldywgcEFubm90LCBuRmxhZ3MsIHBvaW50KTsNCi0JfQ0KLQlyZXR1cm4gRkFMU0U7DQotIH0NCi1GWF9CT09MIENQREZTREtfQW5ub3RIYW5kbGVyTWdyOjpBbm5vdF9PbkxCdXR0b25EYmxDbGsoQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQ0KLXsNCi0JQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsNCi0JDQotCWlmIChJUERGU0RLX0Fubm90SGFuZGxlciogcEFubm90SGFuZGxlciA9IEdldEFubm90SGFuZGxlcihwQW5ub3QpKQ0KLQl7DQotCQlyZXR1cm4gcEFubm90SGFuZGxlci0+T25MQnV0dG9uRGJsQ2xrKHBQYWdlVmlldywgcEFubm90LCBuRmxhZ3MsIHBvaW50KTsNCi0JfQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLUZYX0JPT0wgQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OkFubm90X09uTW91c2VNb3ZlKENQREZTREtfUGFnZVZpZXcgKiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkNCi17DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotCQ0KLQlpZiAoSVBERlNES19Bbm5vdEhhbmRsZXIqIHBBbm5vdEhhbmRsZXIgPSBHZXRBbm5vdEhhbmRsZXIocEFubm90KSkNCi0Jew0KLQkJcmV0dXJuIHBBbm5vdEhhbmRsZXItPk9uTW91c2VNb3ZlKHBQYWdlVmlldywgcEFubm90LCBuRmxhZ3MsIHBvaW50KTsNCi0JfQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLUZYX0JPT0wgQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OkFubm90X09uTW91c2VXaGVlbChDUERGU0RLX1BhZ2VWaWV3ICogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgc2hvcnQgekRlbHRhLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkNCi17DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotCQ0KLQlpZiAoSVBERlNES19Bbm5vdEhhbmRsZXIqIHBBbm5vdEhhbmRsZXIgPSBHZXRBbm5vdEhhbmRsZXIocEFubm90KSkNCi0Jew0KLQkJcmV0dXJuIHBBbm5vdEhhbmRsZXItPk9uTW91c2VXaGVlbChwUGFnZVZpZXcsIHBBbm5vdCxuRmxhZ3MsekRlbHRhLCBwb2ludCk7DQotCX0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi1GWF9CT09MIENQREZTREtfQW5ub3RIYW5kbGVyTWdyOjpBbm5vdF9PblJCdXR0b25Eb3duKENQREZTREtfUGFnZVZpZXcgKiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkNCi17DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotCQ0KLQlpZiAoSVBERlNES19Bbm5vdEhhbmRsZXIqIHBBbm5vdEhhbmRsZXIgPSBHZXRBbm5vdEhhbmRsZXIocEFubm90KSkNCi0Jew0KLQkJcmV0dXJuIHBBbm5vdEhhbmRsZXItPk9uUkJ1dHRvbkRvd24ocFBhZ2VWaWV3LCBwQW5ub3QsIG5GbGFncywgcG9pbnQpOw0KLQl9DQotCXJldHVybiBGQUxTRTsNCi19DQotRlhfQk9PTCBDUERGU0RLX0Fubm90SGFuZGxlck1ncjo6QW5ub3RfT25SQnV0dG9uVXAoQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQ0KLXsNCi0JQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsNCi0JDQotCWlmIChJUERGU0RLX0Fubm90SGFuZGxlciogcEFubm90SGFuZGxlciA9IEdldEFubm90SGFuZGxlcihwQW5ub3QpKQ0KLQl7DQotCQlyZXR1cm4gcEFubm90SGFuZGxlci0+T25SQnV0dG9uVXAocFBhZ2VWaWV3LCBwQW5ub3QsIG5GbGFncywgcG9pbnQpOw0KLQl9DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotdm9pZCBDUERGU0RLX0Fubm90SGFuZGxlck1ncjo6QW5ub3RfT25Nb3VzZUVudGVyKENQREZTREtfUGFnZVZpZXcgKiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQkNCi0JaWYgKElQREZTREtfQW5ub3RIYW5kbGVyKiBwQW5ub3RIYW5kbGVyID0gR2V0QW5ub3RIYW5kbGVyKHBBbm5vdCkpDQotCXsNCi0JCXBBbm5vdEhhbmRsZXItPk9uTW91c2VFbnRlcihwUGFnZVZpZXcsIHBBbm5vdCwgbkZsYWcpOw0KLQl9DQotCXJldHVybiA7DQotfQ0KLQ0KLXZvaWQgQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OkFubm90X09uTW91c2VFeGl0KENQREZTREtfUGFnZVZpZXcgKiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQkNCi0JaWYgKElQREZTREtfQW5ub3RIYW5kbGVyKiBwQW5ub3RIYW5kbGVyID0gR2V0QW5ub3RIYW5kbGVyKHBBbm5vdCkpDQotCXsNCi0JCXBBbm5vdEhhbmRsZXItPk9uTW91c2VFeGl0KHBQYWdlVmlldywgcEFubm90LCBuRmxhZyk7DQotCX0NCi0JcmV0dXJuOw0KLX0NCi0NCi1GWF9CT09MIENQREZTREtfQW5ub3RIYW5kbGVyTWdyOjpBbm5vdF9PbkNoYXIoQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuQ2hhciwgRlhfRFdPUkQgbkZsYWdzKQ0KLXsNCi0NCi0JaWYgKElQREZTREtfQW5ub3RIYW5kbGVyKiBwQW5ub3RIYW5kbGVyID0gR2V0QW5ub3RIYW5kbGVyKHBBbm5vdCkpDQotCXsNCi0JCXJldHVybiBwQW5ub3RIYW5kbGVyLT5PbkNoYXIocEFubm90LG5DaGFyLCBuRmxhZ3MpOw0KLQl9DQotCXJldHVybiBGQUxTRTsNCi0NCi19DQotDQotRlhfQk9PTAkJCUNQREZTREtfQW5ub3RIYW5kbGVyTWdyOjpBbm5vdF9PbktleURvd24oQ1BERlNES19Bbm5vdCogcEFubm90LCBpbnQgbktleUNvZGUsIGludCBuRmxhZykNCi17DQotDQotCWlmICghbV9wQXBwLT5GRklfSXNDVFJMS2V5RG93bihuRmxhZykgJiYgIW1fcEFwcC0+RkZJX0lzQUxUS2V5RG93bihuRmxhZykpDQotCXsNCi0JCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlID0gcEFubm90LT5HZXRQYWdlVmlldygpOw0KLQkJQ1BERlNES19Bbm5vdCogcEZvY3VzQW5ub3QgPSBwUGFnZS0+R2V0Rm9jdXNBbm5vdCgpOw0KLQkJaWYgKHBGb2N1c0Fubm90ICYmIChuS2V5Q29kZSA9PSBGV0xfVktFWV9UYWIpKQ0KLQkJew0KLQkJCUNQREZTREtfQW5ub3QqIHBOZXh0ID0gR2V0TmV4dEFubm90KHBGb2N1c0Fubm90LCAhbV9wQXBwLT5GRklfSXNTSElGVEtleURvd24obkZsYWcpKTsNCi0NCi0JCQlpZihwTmV4dCAmJiBwTmV4dCAhPSBwRm9jdXNBbm5vdCkNCi0JCQl7DQotCQkJCUNQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCA9IHBQYWdlLT5HZXRTREtEb2N1bWVudCgpOw0KLQkJCQlwRG9jdW1lbnQtPlNldEZvY3VzQW5ub3QocE5leHQpOw0KLQkJCQlyZXR1cm4gVFJVRTsNCi0JCQl9DQotCQl9DQotCX0NCi0NCi0JaWYgKElQREZTREtfQW5ub3RIYW5kbGVyKiBwQW5ub3RIYW5kbGVyID0gR2V0QW5ub3RIYW5kbGVyKHBBbm5vdCkpDQotCXsNCi0JCXJldHVybiBwQW5ub3RIYW5kbGVyLT5PbktleURvd24ocEFubm90LG5LZXlDb2RlLCBuRmxhZyk7DQotCX0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi1GWF9CT09MCQkJQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OkFubm90X09uS2V5VXAoQ1BERlNES19Bbm5vdCogcEFubm90LCBpbnQgbktleUNvZGUsIGludCBuRmxhZykNCi17DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTAkJCUNQREZTREtfQW5ub3RIYW5kbGVyTWdyOjpBbm5vdF9PblNldEZvY3VzKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQ0KLQlpZiAoSVBERlNES19Bbm5vdEhhbmRsZXIqIHBBbm5vdEhhbmRsZXIgPSBHZXRBbm5vdEhhbmRsZXIocEFubm90KSkNCi0Jew0KLQkJaWYgKHBBbm5vdEhhbmRsZXItPk9uU2V0Rm9jdXMocEFubm90LCBuRmxhZykpDQotCQl7DQotCQkJQ1BERlNES19QYWdlVmlldyogcFBhZ2UgPSBwQW5ub3QtPkdldFBhZ2VWaWV3KCk7DQotCQkJQVNTRVJUKHBQYWdlICE9IE5VTEwpOw0KLQ0KLQkJCXBQYWdlLT5HZXRTREtEb2N1bWVudCgpOw0KLQkvLwkJcERvY3VtZW50LT5TZXRUb3Btb3N0QW5ub3QocEFubm90KTsNCi0NCi0JCQlyZXR1cm4gVFJVRTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlyZXR1cm4gRkFMU0U7DQotCQl9DQotCX0NCi0JDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTAkJCUNQREZTREtfQW5ub3RIYW5kbGVyTWdyOjpBbm5vdF9PbktpbGxGb2N1cyhDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFnKQ0KLXsNCi0JQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsNCi0JDQotCWlmIChJUERGU0RLX0Fubm90SGFuZGxlciogcEFubm90SGFuZGxlciA9IEdldEFubm90SGFuZGxlcihwQW5ub3QpKQ0KLQl7DQotCQlpZiAocEFubm90SGFuZGxlci0+T25LaWxsRm9jdXMocEFubm90LCBuRmxhZykpDQotCQl7CQ0KLQkJCXJldHVybiBUUlVFOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJCXJldHVybiBGQUxTRTsNCi0JfQ0KLQkNCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1DUERGX1JlY3QJQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OkFubm90X09uR2V0Vmlld0JCb3goQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QpDQotew0KLQlBU1NFUlQocEFubm90KTsNCi0JaWYgKElQREZTREtfQW5ub3RIYW5kbGVyKiBwQW5ub3RIYW5kbGVyID0gR2V0QW5ub3RIYW5kbGVyKHBBbm5vdCkpDQotCXsNCi0JCXJldHVybiBwQW5ub3RIYW5kbGVyLT5HZXRWaWV3QkJveChwUGFnZVZpZXcsIHBBbm5vdCk7DQotCX0NCi0JcmV0dXJuIHBBbm5vdC0+R2V0UmVjdCgpOw0KLX0NCi0NCi1GWF9CT09MCUNQREZTREtfQW5ub3RIYW5kbGVyTWdyOjpBbm5vdF9PbkhpdFRlc3QoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQ0KLXsNCi0JQVNTRVJUKHBBbm5vdCk7DQotCWlmIChJUERGU0RLX0Fubm90SGFuZGxlciogcEFubm90SGFuZGxlciA9IEdldEFubm90SGFuZGxlcihwQW5ub3QpKQ0KLQl7DQotCQlpZihwQW5ub3RIYW5kbGVyLT5DYW5BbnN3ZXIocEFubm90KSkNCi0JCQlyZXR1cm4gcEFubm90SGFuZGxlci0+SGl0VGVzdChwUGFnZVZpZXcsIHBBbm5vdCwgcG9pbnQpOw0KLQl9DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotQ1BERlNES19Bbm5vdCoJQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OkdldE5leHRBbm5vdChDUERGU0RLX0Fubm90KiBwU0RLQW5ub3QsRlhfQk9PTCBiTmV4dCkNCi17DQotCSBDQkFfQW5ub3RJdGVyYXRvciBhaShwU0RLQW5ub3QtPkdldFBhZ2VWaWV3KCksICJXaWRnZXQiLCAiIik7DQotDQotCSBDUERGU0RLX0Fubm90KiBwTmV4dCA9IGJOZXh0ID8gDQotCQkgYWkuR2V0TmV4dEFubm90KHBTREtBbm5vdCkgOiANCi0JCWFpLkdldFByZXZBbm5vdChwU0RLQW5ub3QpOw0KLQkNCi0JCXJldHVybiBwTmV4dDsNCi19DQotDQotRlhfQk9PTCBDUERGU0RLX0JGQW5ub3RIYW5kbGVyOjpDYW5BbnN3ZXIoQ1BERlNES19Bbm5vdCogcEFubm90KQ0KLXsNCi0JQVNTRVJUKHBBbm5vdCk7DQotCUFTU0VSVChwQW5ub3QtPkdldFR5cGUoKSA9PSAiV2lkZ2V0Iik7DQotCUNGWF9CeXRlU3RyaW5nIHNTdWJUeXBlID0gcEFubm90LT5HZXRTdWJUeXBlKCk7DQotCQ0KLQlpZiAoc1N1YlR5cGUgPT0gQkZGVF9TSUdOQVRVUkUpDQotCXsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gKENQREZTREtfV2lkZ2V0KilwQW5ub3Q7DQotCQlpZiAoIXBXaWRnZXQtPklzVmlzaWJsZSgpKSByZXR1cm4gRkFMU0U7DQotDQotCQlpbnQgbkZpZWxkRmxhZ3MgPSBwV2lkZ2V0LT5HZXRGaWVsZEZsYWdzKCk7DQotCQlpZiAoKG5GaWVsZEZsYWdzICYgRklFTERGTEFHX1JFQURPTkxZKSA9PSBGSUVMREZMQUdfUkVBRE9OTFkpIHJldHVybiBGQUxTRTsNCi0JCWlmIChwV2lkZ2V0LT5HZXRGaWVsZFR5cGUoKSA9PSBGSUVMRFRZUEVfUFVTSEJVVFRPTikNCi0JCQlyZXR1cm4gVFJVRTsNCi0JCWVsc2UNCi0JCXsNCi0JCQlDUERGX1BhZ2UqIHBQYWdlID0gcFdpZGdldC0+R2V0UERGUGFnZSgpOw0KLQkJCUFTU0VSVChwUGFnZSAhPSBOVUxMKTsNCi0JCQkNCi0JCQlDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQgPSBwUGFnZS0+bV9wRG9jdW1lbnQ7DQotCQkJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsNCi0JCQkNCi0JCQlGWF9EV09SRCBkd1Blcm1pc3Npb25zID0gcERvY3VtZW50LT5HZXRVc2VyUGVybWlzc2lvbnMoKTsNCi0JCQlyZXR1cm4gKGR3UGVybWlzc2lvbnMmRlBERlBFUk1fRklMTF9GT1JNKSB8fCANCi0JCQkJKGR3UGVybWlzc2lvbnMmRlBERlBFUk1fQU5OT1RfRk9STSkgfHwgDQotIAkJCShkd1Blcm1pc3Npb25zJkZQREZQRVJNX0FOTk9UX0ZPUk0pOw0KLQkJfQ0KLQl9DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotQ1BERlNES19Bbm5vdCoJCUNQREZTREtfQkZBbm5vdEhhbmRsZXI6Ok5ld0Fubm90KENQREZfQW5ub3QqIHBBbm5vdCwgQ1BERlNES19QYWdlVmlldyogcFBhZ2UpDQotew0KLQlBU1NFUlQocFBhZ2UgIT0gTlVMTCk7DQotCXBQYWdlLT5HZXRQREZEb2N1bWVudCgpOw0KLQkNCi0JQ1BERlNES19Eb2N1bWVudCogcFNES0RvYyAgPSBtX3BBcHAtPkdldEN1cnJlbnREb2MoKTsNCi0JQVNTRVJUKHBTREtEb2MpOw0KLQlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopcFNES0RvYy0+R2V0SW50ZXJGb3JtKCk7DQotCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOw0KLQkNCi0JQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSBOVUxMOw0KLQlpZiAoQ1BERl9Gb3JtQ29udHJvbCogcEN0cmwgPSBDUERGU0RLX1dpZGdldDo6R2V0Rm9ybUNvbnRyb2wocEludGVyRm9ybS0+R2V0SW50ZXJGb3JtKCksIHBBbm5vdC0+bV9wQW5ub3REaWN0KSkNCi0Jew0KLQkJcFdpZGdldCA9IG5ldyBDUERGU0RLX1dpZGdldChwQW5ub3QsIHBQYWdlLCBwSW50ZXJGb3JtKTsNCi0JCXBJbnRlckZvcm0tPkFkZE1hcChwQ3RybCwgcFdpZGdldCk7DQotCQlDUERGX0ludGVyRm9ybSogcFBERkludGVyRm9ybSA9IHBJbnRlckZvcm0tPkdldEludGVyRm9ybSgpOw0KLQkJaWYocFBERkludGVyRm9ybSAmJiBwUERGSW50ZXJGb3JtLT5OZWVkQ29uc3RydWN0QVAoKSkNCi0JCQlwV2lkZ2V0LT5SZXNldEFwcGVhcmFuY2UoTlVMTCxGQUxTRSk7DQotCX0NCi0JDQotCXJldHVybiBwV2lkZ2V0Ow0KLX0NCi0NCi12b2lkIENQREZTREtfQkZBbm5vdEhhbmRsZXI6OlJlbGVhc2VBbm5vdChDUERGU0RLX0Fubm90KiBwQW5ub3QpDQotew0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQ0KLQlpZiAobV9wRm9ybUZpbGxlcikNCi0JCW1fcEZvcm1GaWxsZXItPk9uRGVsZXRlKHBBbm5vdCk7DQotCQ0KLQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IChDUERGU0RLX1dpZGdldCopcEFubm90Ow0KLQlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IHBXaWRnZXQtPkdldEludGVyRm9ybSgpOw0KLQlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsNCi0JDQotCUNQREZfRm9ybUNvbnRyb2wqIHBDdHJvbCA9IHBXaWRnZXQtPkdldEZvcm1Db250cm9sKCk7DQotCXBJbnRlckZvcm0tPlJlbW92ZU1hcChwQ3Ryb2wpOw0KLQkNCi0NCi0JZGVsZXRlIHBXaWRnZXQ7DQotfQ0KLQ0KLQ0KLXZvaWQgQ1BERlNES19CRkFubm90SGFuZGxlcjo6T25EcmF3KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLCAgRlhfRFdPUkQgZHdGbGFncykNCi17DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotCUNGWF9CeXRlU3RyaW5nIHNTdWJUeXBlID0gcEFubm90LT5HZXRTdWJUeXBlKCk7DQotCQ0KLQlpZiAoc1N1YlR5cGUgPT0gQkZGVF9TSUdOQVRVUkUpDQotCXsNCi0JCXBBbm5vdC0+RHJhd0FwcGVhcmFuY2UocERldmljZSwgcFVzZXIyRGV2aWNlLCBDUERGX0Fubm90OjpOb3JtYWwsIE5VTEwpOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJaWYgKG1fcEZvcm1GaWxsZXIpDQotCQl7DQotCQkJbV9wRm9ybUZpbGxlci0+T25EcmF3KHBQYWdlVmlldywgcEFubm90LCBwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIGR3RmxhZ3MpOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BERlNES19CRkFubm90SGFuZGxlcjo6T25Nb3VzZUVudGVyKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZykgDQotew0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQlDRlhfQnl0ZVN0cmluZyBzU3ViVHlwZSA9IHBBbm5vdC0+R2V0U3ViVHlwZSgpOw0KLQkNCi0JaWYgKHNTdWJUeXBlID09IEJGRlRfU0lHTkFUVVJFKQ0KLQl7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlpZiAobV9wRm9ybUZpbGxlcikNCi0JCQkgbV9wRm9ybUZpbGxlci0+T25Nb3VzZUVudGVyKHBQYWdlVmlldywgcEFubm90LCBuRmxhZyk7DQotCX0NCi0JDQotDQotfQ0KLXZvaWQgQ1BERlNES19CRkFubm90SGFuZGxlcjo6T25Nb3VzZUV4aXQoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFnKSANCi17DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotCUNGWF9CeXRlU3RyaW5nIHNTdWJUeXBlID0gcEFubm90LT5HZXRTdWJUeXBlKCk7DQotCQ0KLQlpZiAoc1N1YlR5cGUgPT0gQkZGVF9TSUdOQVRVUkUpDQotCXsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCWlmIChtX3BGb3JtRmlsbGVyKQ0KLQkJCSBtX3BGb3JtRmlsbGVyLT5Pbk1vdXNlRXhpdChwUGFnZVZpZXcsIHBBbm5vdCwgbkZsYWcpOw0KLQl9DQotCQ0KLX0NCi1GWF9CT09MIENQREZTREtfQkZBbm5vdEhhbmRsZXI6Ok9uTEJ1dHRvbkRvd24oQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpDQotew0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQlDRlhfQnl0ZVN0cmluZyBzU3ViVHlwZSA9IHBBbm5vdC0+R2V0U3ViVHlwZSgpOw0KLQkNCi0JaWYgKHNTdWJUeXBlID09IEJGRlRfU0lHTkFUVVJFKQ0KLQl7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlpZiAobV9wRm9ybUZpbGxlcikNCi0JCQlyZXR1cm4gbV9wRm9ybUZpbGxlci0+T25MQnV0dG9uRG93bihwUGFnZVZpZXcsIHBBbm5vdCwgbkZsYWdzLCBwb2ludCk7DQotCX0NCi0JDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBDUERGU0RLX0JGQW5ub3RIYW5kbGVyOjpPbkxCdXR0b25VcChDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkNCi17DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotCUNGWF9CeXRlU3RyaW5nIHNTdWJUeXBlID0gcEFubm90LT5HZXRTdWJUeXBlKCk7DQotCQ0KLQlpZiAoc1N1YlR5cGUgPT0gQkZGVF9TSUdOQVRVUkUpDQotCXsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCWlmIChtX3BGb3JtRmlsbGVyKQ0KLQkJCXJldHVybiBtX3BGb3JtRmlsbGVyLT5PbkxCdXR0b25VcChwUGFnZVZpZXcsIHBBbm5vdCwgbkZsYWdzLCBwb2ludCk7DQotCX0NCi0JDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBDUERGU0RLX0JGQW5ub3RIYW5kbGVyOjpPbkxCdXR0b25EYmxDbGsoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpDQotew0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQlDRlhfQnl0ZVN0cmluZyBzU3ViVHlwZSA9IHBBbm5vdC0+R2V0U3ViVHlwZSgpOw0KLQkNCi0JaWYgKHNTdWJUeXBlID09IEJGRlRfU0lHTkFUVVJFKQ0KLQl7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlpZiAobV9wRm9ybUZpbGxlcikNCi0JCQlyZXR1cm4gbV9wRm9ybUZpbGxlci0+T25MQnV0dG9uRGJsQ2xrKHBQYWdlVmlldywgcEFubm90LCBuRmxhZ3MsIHBvaW50KTsNCi0JfQ0KLQkNCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MIENQREZTREtfQkZBbm5vdEhhbmRsZXI6Ok9uTW91c2VNb3ZlKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQ0KLXsJDQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotCUNGWF9CeXRlU3RyaW5nIHNTdWJUeXBlID0gcEFubm90LT5HZXRTdWJUeXBlKCk7DQotDQotCWlmIChzU3ViVHlwZSA9PSBCRkZUX1NJR05BVFVSRSkNCi0Jew0KLQl9DQotCWVsc2UNCi0Jew0KLQkJaWYgKG1fcEZvcm1GaWxsZXIpDQotCQkJcmV0dXJuIG1fcEZvcm1GaWxsZXItPk9uTW91c2VNb3ZlKHBQYWdlVmlldywgcEFubm90LCBuRmxhZ3MsIHBvaW50KTsNCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotDQotfQ0KLQ0KLQ0KLUZYX0JPT0wgQ1BERlNES19CRkFubm90SGFuZGxlcjo6T25Nb3VzZVdoZWVsKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIHNob3J0IHpEZWx0YSwgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpDQotew0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQlDRlhfQnl0ZVN0cmluZyBzU3ViVHlwZSA9IHBBbm5vdC0+R2V0U3ViVHlwZSgpOw0KLQkNCi0JaWYgKHNTdWJUeXBlID09IEJGRlRfU0lHTkFUVVJFKQ0KLQl7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlpZiAobV9wRm9ybUZpbGxlcikNCi0JCQlyZXR1cm4gbV9wRm9ybUZpbGxlci0+T25Nb3VzZVdoZWVsKHBQYWdlVmlldywgcEFubm90LCBuRmxhZ3MsIHpEZWx0YSxwb2ludCk7DQotCX0NCi0JDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBDUERGU0RLX0JGQW5ub3RIYW5kbGVyOjpPblJCdXR0b25Eb3duKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQ0KLXsNCi0JQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsNCi0JQ0ZYX0J5dGVTdHJpbmcgc1N1YlR5cGUgPSBwQW5ub3QtPkdldFN1YlR5cGUoKTsNCi0JDQotCWlmIChzU3ViVHlwZSA9PSBCRkZUX1NJR05BVFVSRSkNCi0Jew0KLQl9DQotCWVsc2UNCi0Jew0KLQkJaWYgKG1fcEZvcm1GaWxsZXIpDQotCQkJcmV0dXJuIG1fcEZvcm1GaWxsZXItPk9uUkJ1dHRvbkRvd24ocFBhZ2VWaWV3LCBwQW5ub3QsIG5GbGFncywgcG9pbnQpOw0KLQl9DQotCQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLUZYX0JPT0wgQ1BERlNES19CRkFubm90SGFuZGxlcjo6T25SQnV0dG9uVXAoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpDQotew0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQlDRlhfQnl0ZVN0cmluZyBzU3ViVHlwZSA9IHBBbm5vdC0+R2V0U3ViVHlwZSgpOw0KLQkNCi0JaWYgKHNTdWJUeXBlID09IEJGRlRfU0lHTkFUVVJFKQ0KLQl7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlpZiAobV9wRm9ybUZpbGxlcikNCi0JCQlyZXR1cm4gbV9wRm9ybUZpbGxlci0+T25SQnV0dG9uVXAocFBhZ2VWaWV3LCBwQW5ub3QsIG5GbGFncywgcG9pbnQpOw0KLQl9DQotCQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BERlNES19CRkFubm90SGFuZGxlcjo6T25DaGFyKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkNoYXIsIEZYX0RXT1JEIG5GbGFncykNCi17DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotCUNGWF9CeXRlU3RyaW5nIHNTdWJUeXBlID0gcEFubm90LT5HZXRTdWJUeXBlKCk7DQotCQ0KLQlpZiAoc1N1YlR5cGUgPT0gQkZGVF9TSUdOQVRVUkUpDQotCXsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCWlmIChtX3BGb3JtRmlsbGVyKQ0KLQkJCXJldHVybiBtX3BGb3JtRmlsbGVyLT5PbkNoYXIocEFubm90LG5DaGFyLCBuRmxhZ3MpOw0KLQl9DQotCQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BERlNES19CRkFubm90SGFuZGxlcjo6T25LZXlEb3duKENQREZTREtfQW5ub3QqIHBBbm5vdCwgaW50IG5LZXlDb2RlLCBpbnQgbkZsYWcpDQotew0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQlDRlhfQnl0ZVN0cmluZyBzU3ViVHlwZSA9IHBBbm5vdC0+R2V0U3ViVHlwZSgpOw0KLQkNCi0JaWYgKHNTdWJUeXBlID09IEJGRlRfU0lHTkFUVVJFKQ0KLQl7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlpZiAobV9wRm9ybUZpbGxlcikNCi0JCQlyZXR1cm4gbV9wRm9ybUZpbGxlci0+T25LZXlEb3duKHBBbm5vdCxuS2V5Q29kZSwgbkZsYWcpOw0KLQl9DQotCQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BERlNES19CRkFubm90SGFuZGxlcjo6T25LZXlVcChDUERGU0RLX0Fubm90KiBwQW5ub3QsIGludCBuS2V5Q29kZSwgaW50IG5GbGFnKQ0KLXsNCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi12b2lkCUNQREZTREtfQkZBbm5vdEhhbmRsZXI6Ok9uQ3JlYXRlKENQREZTREtfQW5ub3QqIHBBbm5vdCkgDQotew0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQlDRlhfQnl0ZVN0cmluZyBzU3ViVHlwZSA9IHBBbm5vdC0+R2V0U3ViVHlwZSgpOw0KLQkNCi0JaWYgKHNTdWJUeXBlID09IEJGRlRfU0lHTkFUVVJFKQ0KLQl7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlpZiAobV9wRm9ybUZpbGxlcikNCi0JCQltX3BGb3JtRmlsbGVyLT5PbkNyZWF0ZShwQW5ub3QpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BERlNES19CRkFubm90SGFuZGxlcjo6T25Mb2FkKENQREZTREtfQW5ub3QqIHBBbm5vdCkNCi17DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotCQ0KLQlDRlhfQnl0ZVN0cmluZyBzU3ViVHlwZSA9IHBBbm5vdC0+R2V0U3ViVHlwZSgpOw0KLQkNCi0JaWYgKHNTdWJUeXBlID09IEJGRlRfU0lHTkFUVVJFKQ0KLQl7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IChDUERGU0RLX1dpZGdldCopcEFubm90Ow0KLQkJDQotCWlmICghcFdpZGdldC0+SXNBcHBlYXJhbmNlVmFsaWQoKSkNCi0JCQlwV2lkZ2V0LT5SZXNldEFwcGVhcmFuY2UoTlVMTCwgRkFMU0UpOw0KLQkJDQotCQlpbnQgbkZpZWxkVHlwZSA9IHBXaWRnZXQtPkdldEZpZWxkVHlwZSgpOw0KLQkJDQotCQlpZiAobkZpZWxkVHlwZSA9PSBGSUVMRFRZUEVfVEVYVEZJRUxEIHx8IG5GaWVsZFR5cGUgPT0gRklFTERUWVBFX0NPTUJPQk9YKQ0KLQkJew0KLQkJCUZYX0JPT0wgYkZvcm1hdGVkID0gRkFMU0U7DQotCQkJQ0ZYX1dpZGVTdHJpbmcgc1ZhbHVlID0gcFdpZGdldC0+T25Gb3JtYXQoMCwgYkZvcm1hdGVkKTsNCi0JCQkNCi0JCQlpZiAoYkZvcm1hdGVkICYmIG5GaWVsZFR5cGUgPT0gRklFTERUWVBFX0NPTUJPQk9YKQ0KLQkJCXsNCi0JCQkJcFdpZGdldC0+UmVzZXRBcHBlYXJhbmNlKHNWYWx1ZSwgRkFMU0UpOw0KLQkJCX0NCi0JCX0NCi0JCQ0KLQ0KLQkJaWYgKG1fcEZvcm1GaWxsZXIpDQotCQkJbV9wRm9ybUZpbGxlci0+T25Mb2FkKHBBbm5vdCk7DQotDQotCX0NCi19DQotDQotRlhfQk9PTAlDUERGU0RLX0JGQW5ub3RIYW5kbGVyOjpPblNldEZvY3VzKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQlDRlhfQnl0ZVN0cmluZyBzU3ViVHlwZSA9IHBBbm5vdC0+R2V0U3ViVHlwZSgpOw0KLQkNCi0JaWYgKHNTdWJUeXBlID09IEJGRlRfU0lHTkFUVVJFKQ0KLQl7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlpZiAobV9wRm9ybUZpbGxlcikNCi0JCQlyZXR1cm4gbV9wRm9ybUZpbGxlci0+T25TZXRGb2N1cyhwQW5ub3QsbkZsYWcpOw0KLQl9DQotCQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTAlDUERGU0RLX0JGQW5ub3RIYW5kbGVyOjpPbktpbGxGb2N1cyhDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFnKQ0KLXsNCi0JQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsNCi0JQ0ZYX0J5dGVTdHJpbmcgc1N1YlR5cGUgPSBwQW5ub3QtPkdldFN1YlR5cGUoKTsNCi0JDQotCWlmIChzU3ViVHlwZSA9PSBCRkZUX1NJR05BVFVSRSkNCi0Jew0KLQl9DQotCWVsc2UNCi0Jew0KLQkJaWYgKG1fcEZvcm1GaWxsZXIpDQotCQkJcmV0dXJuIG1fcEZvcm1GaWxsZXItPk9uS2lsbEZvY3VzKHBBbm5vdCxuRmxhZyk7DQotCX0NCi0JDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1DUERGX1JlY3QgQ1BERlNES19CRkFubm90SGFuZGxlcjo6R2V0Vmlld0JCb3goQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QpDQotew0KLQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQlDRlhfQnl0ZVN0cmluZyBzU3ViVHlwZSA9IHBBbm5vdC0+R2V0U3ViVHlwZSgpOw0KLQkNCi0JaWYgKHNTdWJUeXBlID09IEJGRlRfU0lHTkFUVVJFKQ0KLQl7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlpZiAobV9wRm9ybUZpbGxlcikNCi0JCQlyZXR1cm4gbV9wRm9ybUZpbGxlci0+R2V0Vmlld0JCb3gocFBhZ2VWaWV3LCBwQW5ub3QpOw0KLQ0KLQl9DQotCQ0KLQlyZXR1cm4gQ1BERl9SZWN0KDAsMCwwLDApOw0KLX0NCi0NCi1GWF9CT09MCUNQREZTREtfQkZBbm5vdEhhbmRsZXI6OkhpdFRlc3QoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQ0KLXsNCi0JQVNTRVJUKHBQYWdlVmlldyk7DQotCUFTU0VSVChwQW5ub3QpOw0KLQ0KLQlDUERGX1JlY3QgcmVjdCA9IEdldFZpZXdCQm94KHBQYWdlVmlldywgcEFubm90KTsNCi0JcmV0dXJuIHJlY3QuQ29udGFpbnMocG9pbnQueCwgcG9pbnQueSk7DQotfQ0KLQ0KLS8vQ1JlYWRlcl9Bbm5vdEl0ZXJhdG9yRXgNCi0NCi1DUERGU0RLX0Fubm90SXRlcmF0b3I6OkNQREZTREtfQW5ub3RJdGVyYXRvcihDUERGU0RLX1BhZ2VWaWV3ICogcFBhZ2VWaWV3LEZYX0JPT0wgYlJldmVyc2UsDQotCQkJCQkJCQkJCQkJIEZYX0JPT0wgYklnbm9yZVRvcG1vc3QvKj1GQUxTRSovLA0KLQkJCQkJCQkJCQkJCSBGWF9CT09MIGJDaXJjbGUvKj1GQUxTRSovLA0KLQkJCQkJCQkJCQkJCSBDRlhfUHRyQXJyYXkgKnBMaXN0Lyo9TlVMTCovKQ0KLXsNCi0JQVNTRVJUKHBQYWdlVmlldyk7DQotCW1fYlJldmVyc2U9YlJldmVyc2U7DQotCW1fYklnbm9yZVRvcG1vc3Q9IGJJZ25vcmVUb3Btb3N0Ow0KLQltX2JDaXJjbGU9YkNpcmNsZTsNCi0JbV9wSXRlcmF0b3JBbm5vdExpc3QuUmVtb3ZlQWxsKCk7DQotCUluaXRJdGVyYXRvckFubm90TGlzdChwUGFnZVZpZXcscExpc3QpOw0KLX0NCi0NCi1DUERGU0RLX0Fubm90KglDUERGU0RLX0Fubm90SXRlcmF0b3I6Ok5leHRBbm5vdCAoY29uc3QgQ1BERlNES19Bbm5vdCogcEN1cnJlbnQpIA0KLXsNCi0JDQotCWludCBpbmRleD0tMTsNCi0JaW50IG5Db3VudD10aGlzLT5tX3BJdGVyYXRvckFubm90TGlzdC5HZXRTaXplKCk7DQotCWlmKHBDdXJyZW50KXsNCi0JCWZvcihpbnQgaT0wO2k8bkNvdW50O2krKyl7DQotCQkJQ1BERlNES19Bbm5vdCAqIHBSZWFkZXJBbm5vdD0gKENQREZTREtfQW5ub3QgKiltX3BJdGVyYXRvckFubm90TGlzdC5HZXRBdChpKTsNCi0JCQlpZihwUmVhZGVyQW5ub3QgPT1wQ3VycmVudCl7CQkJDQotCQkJCWluZGV4PWk7DQotCQkJCWJyZWFrOw0KLQkJCX0JCQkNCi0JCX0NCi0JfQkNCi0JcmV0dXJuIE5leHRBbm5vdChpbmRleCk7DQotfQ0KLUNQREZTREtfQW5ub3QqCUNQREZTREtfQW5ub3RJdGVyYXRvcjo6UHJldkFubm90IChjb25zdCBDUERGU0RLX0Fubm90KnBDdXJyZW50KQ0KLXsNCi0JDQotCWludCBpbmRleD0tMTsNCi0JaW50IG5Db3VudD10aGlzLT5tX3BJdGVyYXRvckFubm90TGlzdC5HZXRTaXplKCk7DQotCWlmKHBDdXJyZW50KXsNCi0JCWZvcihpbnQgaT0wO2k8bkNvdW50O2krKyl7DQotCQkJQ1BERlNES19Bbm5vdCAqIHBSZWFkZXJBbm5vdD0gKENQREZTREtfQW5ub3QqKW1fcEl0ZXJhdG9yQW5ub3RMaXN0LkdldEF0KGkpOw0KLQkJCWlmKHBSZWFkZXJBbm5vdCA9PXBDdXJyZW50KXsJCQkNCi0JCQkJaW5kZXg9aTsNCi0JCQkJYnJlYWs7DQotCQkJfQkJCQ0KLQkJfQkNCi0JfQ0KLQlyZXR1cm4gUHJldkFubm90KGluZGV4KTsJDQotfQ0KLUNQREZTREtfQW5ub3QqCUNQREZTREtfQW5ub3RJdGVyYXRvcjo6TmV4dEFubm90IChpbnQmIGluZGV4KSANCi17CQ0KLQkNCi0JaW50IG5Db3VudD1tX3BJdGVyYXRvckFubm90TGlzdC5HZXRTaXplKCk7DQotICAgIGlmKG5Db3VudDw9MCkgaW5kZXg9LTE7DQotICAgIGVsc2V7DQotCQlpZihpbmRleDwwKXsNCi0JCQlpbmRleD0wOwkJDQotCQl9DQotCQllbHNlewkJDQotCQkJaWYobV9iQ2lyY2xlKXsJCQkNCi0JCQkJaW5kZXg9KCBpbmRleCA8bkNvdW50LTEpID8gKGluZGV4KzEpIDowOwkJDQotCQkJfQ0KLQkJCWVsc2V7DQotCQkJCWluZGV4PSggaW5kZXggPG5Db3VudC0xKSA/IChpbmRleCsxKSA6LTE7CQkNCi0JCQl9DQotCQkJDQotCQl9CQ0KLQl9DQotCXJldHVybiAoaW5kZXggPDApID8gTlVMTCA6IChDUERGU0RLX0Fubm90KiltX3BJdGVyYXRvckFubm90TGlzdC5HZXRBdChpbmRleCk7CQkNCi19DQotDQotDQotQ1BERlNES19Bbm5vdCoJQ1BERlNES19Bbm5vdEl0ZXJhdG9yOjpQcmV2QW5ub3QgKGludCYgaW5kZXgpDQotew0KLQkNCi0JaW50IG5Db3VudD1tX3BJdGVyYXRvckFubm90TGlzdC5HZXRTaXplKCk7DQotICAgIGlmKG5Db3VudDw9MCkgaW5kZXg9LTE7DQotCWVsc2V7CQ0KLQkJaWYoaW5kZXg8MCl7DQotCQkJaW5kZXg9bkNvdW50LTE7CQkgDQotCQl9DQotCQllbHNlewkNCi0JCQlpZihtX2JDaXJjbGUpewkJCQ0KLQkJCQlpbmRleCA9ICggaW5kZXggPjApID8gKGluZGV4LTEpIDpuQ291bnQtMTsJCQ0KLQkJCX0NCi0JCQllbHNlew0KLQkJCQlpbmRleCA9ICggaW5kZXggPjApID8gKGluZGV4LTEpIDotMTsJDQotCQkJfQkJCQkNCi0JCX0NCi0JfQ0KLQlyZXR1cm4gKGluZGV4IDwwKSA/IE5VTEwgOiAoQ1BERlNES19Bbm5vdCopbV9wSXRlcmF0b3JBbm5vdExpc3QuR2V0QXQoaW5kZXgpOwkJDQotfQ0KLQ0KLQ0KLUNQREZTREtfQW5ub3QqQ1BERlNES19Bbm5vdEl0ZXJhdG9yOjpOZXh0KGNvbnN0IENQREZTREtfQW5ub3QqIHBDdXJyZW50KSANCi17DQotDQotCXJldHVybiAobV9iUmV2ZXJzZSkgPyBQcmV2QW5ub3QocEN1cnJlbnQpOk5leHRBbm5vdChwQ3VycmVudCk7CQkgDQotDQotfQ0KLQ0KLUNQREZTREtfQW5ub3QqCUNQREZTREtfQW5ub3RJdGVyYXRvcjo6UHJldihjb25zdCBDUERGU0RLX0Fubm90KiBwQ3VycmVudCkgDQotew0KLQ0KLQlyZXR1cm4gKG1fYlJldmVyc2UpID8gTmV4dEFubm90KHBDdXJyZW50KTpQcmV2QW5ub3QocEN1cnJlbnQpOwkJIA0KLX0NCi0NCi1DUERGU0RLX0Fubm90KkNQREZTREtfQW5ub3RJdGVyYXRvcjo6TmV4dChpbnQmIGluZGV4ICkNCi17DQotCQ0KLQlyZXR1cm4gKG1fYlJldmVyc2UpID8gUHJldkFubm90KGluZGV4KTpOZXh0QW5ub3QoaW5kZXgpOwkJIA0KLQkNCi19DQotDQotQ1BERlNES19Bbm5vdCoJQ1BERlNES19Bbm5vdEl0ZXJhdG9yOjpQcmV2KGludCYgaW5kZXggKQ0KLXsNCi0JDQotCXJldHVybiAobV9iUmV2ZXJzZSkgPyBOZXh0QW5ub3QoaW5kZXgpOlByZXZBbm5vdChpbmRleCk7CQkgDQotfQ0KLQ0KLQ0KLXZvaWQgQ1BERlNES19Bbm5vdEl0ZXJhdG9yOjpJbnNlcnRTb3J0KENGWF9QdHJBcnJheSAmYXJyYXlMaXN0LCBBSV9DT01QQVJFIHBDb21wYXJlKQ0KLXsNCi0JZm9yIChpbnQgaSA9IDE7IGkgPCBhcnJheUxpc3QuR2V0U2l6ZSgpOyBpKyspDQotCXsNCi0JCWlmIChwQ29tcGFyZSgoQ1BERlNES19Bbm5vdCopKGFycmF5TGlzdFtpXSkgLCAoQ1BERlNES19Bbm5vdCopKGFycmF5TGlzdFtpLTFdKSkgPCAwKQ0KLQkJew0KLQkJCWludCBqID0gaS0xOw0KLQkJCUNQREZTREtfQW5ub3QqIHBUZW1wID0gKENQREZTREtfQW5ub3QqKWFycmF5TGlzdFtpXTsNCi0JCQkNCi0JCQlkbw0KLQkJCXsNCi0JCQkJYXJyYXlMaXN0W2ogKyAxXSA9IGFycmF5TGlzdFtqXTsNCi0JCQl9IHdoaWxlICgtLWogPj0gMCAmJiBwQ29tcGFyZShwVGVtcCwgKENQREZTREtfQW5ub3QqKWFycmF5TGlzdFtqXSkgPCAwKTsNCi0NCi0JCQlhcnJheUxpc3RbaisxXSA9IHBUZW1wOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLWludCBMeU9yZGVyQ29tcGFyZShDUERGU0RLX0Fubm90KiBwMSwgQ1BERlNES19Bbm5vdCogcDIpDQotew0KLQlpZihwMS0+R2V0TGF5b3V0T3JkZXIoKSA8IHAyLT5HZXRMYXlvdXRPcmRlcigpKQ0KLQkJcmV0dXJuIC0xOw0KLQllbHNlIGlmIChwMS0+R2V0TGF5b3V0T3JkZXIoKSA9PSBwMi0+R2V0TGF5b3V0T3JkZXIoKSkNCi0JCXJldHVybiAwOw0KLQllbHNlDQotCQlyZXR1cm4gMTsNCi19DQotDQotRlhfQk9PTCBDUERGU0RLX0Fubm90SXRlcmF0b3I6OkluaXRJdGVyYXRvckFubm90TGlzdChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsQ0ZYX1B0ckFycmF5ICogcEFubm90TGlzdCkNCi17DQotCUFTU0VSVChwUGFnZVZpZXcpOw0KLQkNCi0JDQotDQotCWlmKHBBbm5vdExpc3Q9PU5VTEwpewkNCi0JCXBBbm5vdExpc3Q9cFBhZ2VWaWV3LT5HZXRBbm5vdExpc3QoKTsNCi0JfQ0KLQ0KLQl0aGlzLT5tX3BJdGVyYXRvckFubm90TGlzdC5SZW1vdmVBbGwoKTsNCi0JaWYoIXBBbm5vdExpc3QpIHJldHVybiBGQUxTRTsNCi0NCi0JQ1BERlNES19Bbm5vdCAqIHBUb3BNb3N0QW5ub3Q9IChtX2JJZ25vcmVUb3Btb3N0KSA/IE5VTEwgOiBwUGFnZVZpZXctPkdldEZvY3VzQW5ub3QoKTsNCi0NCi0NCi0JaW50IG5Db3VudCA9cEFubm90TGlzdC0+R2V0U2l6ZSgpOw0KLQ0KLQlmb3IoaW50IGkgPSBuQ291bnQtIDEgO2kgPj0gMDtpLS0pDQotCXsNCi0JCUNQREZTREtfQW5ub3QgKiBwUmVhZGVyQW5ub3Q9IChDUERGU0RLX0Fubm90KilwQW5ub3RMaXN0LT5HZXRBdChpKTsNCi0JCW1fcEl0ZXJhdG9yQW5ub3RMaXN0LkFkZChwUmVhZGVyQW5ub3QpOwkNCi0JfQ0KLQ0KLQlJbnNlcnRTb3J0KG1fcEl0ZXJhdG9yQW5ub3RMaXN0LCZMeU9yZGVyQ29tcGFyZSk7DQotDQotCWlmKHBUb3BNb3N0QW5ub3QpDQotCXsNCi0JCWZvcihpbnQgaT0wIDtpPG5Db3VudDtpKyspDQotCQl7DQotCQkJQ1BERlNES19Bbm5vdCAqIHBSZWFkZXJBbm5vdCA9IChDUERGU0RLX0Fubm90KiltX3BJdGVyYXRvckFubm90TGlzdC5HZXRBdChpKTsNCi0JCQlpZihwUmVhZGVyQW5ub3QgPT0gcFRvcE1vc3RBbm5vdCkNCi0JCQl7DQotCQkJCW1fcEl0ZXJhdG9yQW5ub3RMaXN0LlJlbW92ZUF0KGkpOw0KLQkJCQltX3BJdGVyYXRvckFubm90TGlzdC5JbnNlcnRBdCgwLCBwUmVhZGVyQW5ub3QpOw0KLQkJCQlicmVhazsNCi0JCQl9CQ0KLQkJfQ0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX2RlZmluZS5oIgorI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19tZ3IuaCIKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0Zvcm1GaWxsZXIuaCIKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfYW5ub3RoYW5kbGVyLmgiCisKKworQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OkNQREZTREtfQW5ub3RIYW5kbGVyTWdyKENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHApCit7CisJbV9wQXBwID0gcEFwcDsKKworCUNQREZTREtfQkZBbm5vdEhhbmRsZXIqIHBIYW5kbGVyID0gbmV3IENQREZTREtfQkZBbm5vdEhhbmRsZXIobV9wQXBwKTsKKwlwSGFuZGxlci0+U2V0Rm9ybUZpbGxlcihtX3BBcHAtPkdldElGb3JtRmlsbGVyKCkpOworCVJlZ2lzdGVyQW5ub3RIYW5kbGVyKHBIYW5kbGVyKTsKK30KKworQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6On5DUERGU0RLX0Fubm90SGFuZGxlck1ncigpCit7CisJZm9yKGludCBpPTA7IGk8bV9IYW5kbGVycy5HZXRTaXplKCk7IGkrKykKKwl7CisJCUlQREZTREtfQW5ub3RIYW5kbGVyKiBwSGFuZGxlciA9IG1fSGFuZGxlcnMuR2V0QXQoaSk7CisJCWRlbGV0ZSBwSGFuZGxlcjsKKwl9CisJbV9IYW5kbGVycy5SZW1vdmVBbGwoKTsKKwltX21hcFR5cGUySGFuZGxlci5SZW1vdmVBbGwoKTsKK30KKwordm9pZAlDUERGU0RLX0Fubm90SGFuZGxlck1ncjo6UmVnaXN0ZXJBbm5vdEhhbmRsZXIoSVBERlNES19Bbm5vdEhhbmRsZXIqIHBBbm5vdEhhbmRsZXIpCit7CisJQVNTRVJUKHBBbm5vdEhhbmRsZXIgIT0gTlVMTCk7CisJCisJQVNTRVJUKEdldEFubm90SGFuZGxlcihwQW5ub3RIYW5kbGVyLT5HZXRUeXBlKCkpID09IE5VTEwpOworCQorCW1fSGFuZGxlcnMuQWRkKHBBbm5vdEhhbmRsZXIpOworCW1fbWFwVHlwZTJIYW5kbGVyLlNldEF0KHBBbm5vdEhhbmRsZXItPkdldFR5cGUoKSwgKHZvaWQqKXBBbm5vdEhhbmRsZXIpOworfQorCit2b2lkIENQREZTREtfQW5ub3RIYW5kbGVyTWdyOjpVblJlZ2lzdGVyQW5ub3RIYW5kbGVyKElQREZTREtfQW5ub3RIYW5kbGVyKiBwQW5ub3RIYW5kbGVyKQoreworCUFTU0VSVChwQW5ub3RIYW5kbGVyICE9IE5VTEwpOworCQorCW1fbWFwVHlwZTJIYW5kbGVyLlJlbW92ZUtleShwQW5ub3RIYW5kbGVyLT5HZXRUeXBlKCkpOworCQorCWZvciAoaW50IGk9MCwgc3o9bV9IYW5kbGVycy5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwl7CisJCWlmIChtX0hhbmRsZXJzLkdldEF0KGkpID09IHBBbm5vdEhhbmRsZXIpCisJCXsKKwkJCW1fSGFuZGxlcnMuUmVtb3ZlQXQoaSk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworQ1BERlNES19Bbm5vdCogQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6Ok5ld0Fubm90KENQREZfQW5ub3QgKiBwQW5ub3QsIENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldykKK3sKKwlBU1NFUlQocEFubm90ICE9IE5VTEwpOworCUFTU0VSVChwUGFnZVZpZXcgIT0gTlVMTCk7CisJCisJaWYgKElQREZTREtfQW5ub3RIYW5kbGVyKiBwQW5ub3RIYW5kbGVyID0gR2V0QW5ub3RIYW5kbGVyKHBBbm5vdC0+R2V0U3ViVHlwZSgpKSkKKwl7CisJCXJldHVybiBwQW5ub3RIYW5kbGVyLT5OZXdBbm5vdChwQW5ub3QsIHBQYWdlVmlldyk7CisJfQorCQorCXJldHVybiBuZXcgQ1BERlNES19Bbm5vdChwQW5ub3QsIHBQYWdlVmlldyk7Cit9CisKK3ZvaWQgQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OlJlbGVhc2VBbm5vdChDUERGU0RLX0Fubm90KiBwQW5ub3QpCit7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKwkKKwlwQW5ub3QtPkdldFBERlBhZ2UoKTsKKwkKKwlpZiAoSVBERlNES19Bbm5vdEhhbmRsZXIqIHBBbm5vdEhhbmRsZXIgPSBHZXRBbm5vdEhhbmRsZXIocEFubm90KSkKKwl7CisJCXBBbm5vdEhhbmRsZXItPk9uUmVsZWFzZShwQW5ub3QpOworCQlwQW5ub3RIYW5kbGVyLT5SZWxlYXNlQW5ub3QocEFubm90KTsKKwl9CisJZWxzZQorCXsKKwkJZGVsZXRlIChDUERGU0RLX0Fubm90KilwQW5ub3Q7CisJfQorfQorCit2b2lkIENQREZTREtfQW5ub3RIYW5kbGVyTWdyOjpBbm5vdF9PbkNyZWF0ZShDUERGU0RLX0Fubm90KiBwQW5ub3QpCit7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKwkKKwlDUERGX0Fubm90KiBwUERGQW5ub3QgPSBwQW5ub3QtPkdldFBERkFubm90KCk7CisJQVNTRVJUKHBQREZBbm5vdCAhPSBOVUxMKTsKKwlBU1NFUlQocFBERkFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7CisJCisJQ1BERlNES19EYXRlVGltZSBjdXJUaW1lOworCXBQREZBbm5vdC0+bV9wQW5ub3REaWN0LT5TZXRBdFN0cmluZygiTSIsIGN1clRpbWUuVG9QREZEYXRlVGltZVN0cmluZygpKTsKKwlwUERGQW5ub3QtPm1fcEFubm90RGljdC0+U2V0QXROdW1iZXIoIkYiLCAoaW50KTApOwkKKwkKKwlpZiAoSVBERlNES19Bbm5vdEhhbmRsZXIqIHBBbm5vdEhhbmRsZXIgPSBHZXRBbm5vdEhhbmRsZXIocEFubm90KSkKKwl7CisJCXBBbm5vdEhhbmRsZXItPk9uQ3JlYXRlKHBBbm5vdCk7CisJfQorfQorCit2b2lkIENQREZTREtfQW5ub3RIYW5kbGVyTWdyOjpBbm5vdF9PbkxvYWQoQ1BERlNES19Bbm5vdCogcEFubm90KQoreworCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7CisJCisJaWYgKElQREZTREtfQW5ub3RIYW5kbGVyKiBwQW5ub3RIYW5kbGVyID0gR2V0QW5ub3RIYW5kbGVyKHBBbm5vdCkpCisJeworCQlwQW5ub3RIYW5kbGVyLT5PbkxvYWQocEFubm90KTsKKwl9Cit9CisKK0lQREZTREtfQW5ub3RIYW5kbGVyKiBDUERGU0RLX0Fubm90SGFuZGxlck1ncjo6R2V0QW5ub3RIYW5kbGVyKENQREZTREtfQW5ub3QqIHBBbm5vdCkgY29uc3QKK3sKKwlBU1NFUlQocEFubm90ICE9IE5VTEwpOworCQorCUNQREZfQW5ub3QqIHBQREZBbm5vdCA9IHBBbm5vdC0+R2V0UERGQW5ub3QoKTsKKwlBU1NFUlQocFBERkFubm90ICE9IE5VTEwpOworCQorCXJldHVybiBHZXRBbm5vdEhhbmRsZXIocFBERkFubm90LT5HZXRTdWJUeXBlKCkpOworfQorCitJUERGU0RLX0Fubm90SGFuZGxlciogQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OkdldEFubm90SGFuZGxlcihjb25zdCBDRlhfQnl0ZVN0cmluZyYgc1R5cGUpIGNvbnN0Cit7CisJdm9pZCogcFJldCA9IE5VTEw7CisJbV9tYXBUeXBlMkhhbmRsZXIuTG9va3VwKHNUeXBlLCBwUmV0KTsJCisJcmV0dXJuIChJUERGU0RLX0Fubm90SGFuZGxlciopcFJldDsKK30KKwordm9pZCBDUERGU0RLX0Fubm90SGFuZGxlck1ncjo6QW5ub3RfT25EcmF3KENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLEZYX0RXT1JEIGR3RmxhZ3MpCit7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKwkKKwlpZiAoSVBERlNES19Bbm5vdEhhbmRsZXIqIHBBbm5vdEhhbmRsZXIgPSBHZXRBbm5vdEhhbmRsZXIocEFubm90KSkKKwl7CisJCXBBbm5vdEhhbmRsZXItPk9uRHJhdyhwUGFnZVZpZXcsIHBBbm5vdCwgcERldmljZSwgcFVzZXIyRGV2aWNlLCBkd0ZsYWdzKTsKKwl9CisJZWxzZQorCXsKKwkJcEFubm90LT5EcmF3QXBwZWFyYW5jZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIENQREZfQW5ub3Q6Ok5vcm1hbCwgTlVMTCk7CisJfQorfQorCisKK0ZYX0JPT0wgQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OkFubm90X09uTEJ1dHRvbkRvd24oQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQoreworCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7CisJCisJaWYgKElQREZTREtfQW5ub3RIYW5kbGVyKiBwQW5ub3RIYW5kbGVyID0gR2V0QW5ub3RIYW5kbGVyKHBBbm5vdCkpCisJeworCQlyZXR1cm4gcEFubm90SGFuZGxlci0+T25MQnV0dG9uRG93bihwUGFnZVZpZXcsIHBBbm5vdCwgbkZsYWdzLCBwb2ludCk7CisJfQorCXJldHVybiBGQUxTRTsKK30KK0ZYX0JPT0wgQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OkFubm90X09uTEJ1dHRvblVwKENQREZTREtfUGFnZVZpZXcgKiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkKKyB7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKworCWlmIChJUERGU0RLX0Fubm90SGFuZGxlciogcEFubm90SGFuZGxlciA9IEdldEFubm90SGFuZGxlcihwQW5ub3QpKQorCXsKKwkJcmV0dXJuIHBBbm5vdEhhbmRsZXItPk9uTEJ1dHRvblVwKHBQYWdlVmlldywgcEFubm90LCBuRmxhZ3MsIHBvaW50KTsKKwl9CisJcmV0dXJuIEZBTFNFOworIH0KK0ZYX0JPT0wgQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OkFubm90X09uTEJ1dHRvbkRibENsayhDUERGU0RLX1BhZ2VWaWV3ICogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpCit7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKwkKKwlpZiAoSVBERlNES19Bbm5vdEhhbmRsZXIqIHBBbm5vdEhhbmRsZXIgPSBHZXRBbm5vdEhhbmRsZXIocEFubm90KSkKKwl7CisJCXJldHVybiBwQW5ub3RIYW5kbGVyLT5PbkxCdXR0b25EYmxDbGsocFBhZ2VWaWV3LCBwQW5ub3QsIG5GbGFncywgcG9pbnQpOworCX0KKwlyZXR1cm4gRkFMU0U7Cit9CitGWF9CT09MIENQREZTREtfQW5ub3RIYW5kbGVyTWdyOjpBbm5vdF9Pbk1vdXNlTW92ZShDUERGU0RLX1BhZ2VWaWV3ICogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpCit7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKwkKKwlpZiAoSVBERlNES19Bbm5vdEhhbmRsZXIqIHBBbm5vdEhhbmRsZXIgPSBHZXRBbm5vdEhhbmRsZXIocEFubm90KSkKKwl7CisJCXJldHVybiBwQW5ub3RIYW5kbGVyLT5Pbk1vdXNlTW92ZShwUGFnZVZpZXcsIHBBbm5vdCwgbkZsYWdzLCBwb2ludCk7CisJfQorCXJldHVybiBGQUxTRTsKK30KK0ZYX0JPT0wgQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OkFubm90X09uTW91c2VXaGVlbChDUERGU0RLX1BhZ2VWaWV3ICogcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgc2hvcnQgekRlbHRhLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkKK3sKKwlBU1NFUlQocEFubm90ICE9IE5VTEwpOworCQorCWlmIChJUERGU0RLX0Fubm90SGFuZGxlciogcEFubm90SGFuZGxlciA9IEdldEFubm90SGFuZGxlcihwQW5ub3QpKQorCXsKKwkJcmV0dXJuIHBBbm5vdEhhbmRsZXItPk9uTW91c2VXaGVlbChwUGFnZVZpZXcsIHBBbm5vdCxuRmxhZ3MsekRlbHRhLCBwb2ludCk7CisJfQorCXJldHVybiBGQUxTRTsKK30KK0ZYX0JPT0wgQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OkFubm90X09uUkJ1dHRvbkRvd24oQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQoreworCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7CisJCisJaWYgKElQREZTREtfQW5ub3RIYW5kbGVyKiBwQW5ub3RIYW5kbGVyID0gR2V0QW5ub3RIYW5kbGVyKHBBbm5vdCkpCisJeworCQlyZXR1cm4gcEFubm90SGFuZGxlci0+T25SQnV0dG9uRG93bihwUGFnZVZpZXcsIHBBbm5vdCwgbkZsYWdzLCBwb2ludCk7CisJfQorCXJldHVybiBGQUxTRTsKK30KK0ZYX0JPT0wgQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OkFubm90X09uUkJ1dHRvblVwKENQREZTREtfUGFnZVZpZXcgKiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkKK3sKKwlBU1NFUlQocEFubm90ICE9IE5VTEwpOworCQorCWlmIChJUERGU0RLX0Fubm90SGFuZGxlciogcEFubm90SGFuZGxlciA9IEdldEFubm90SGFuZGxlcihwQW5ub3QpKQorCXsKKwkJcmV0dXJuIHBBbm5vdEhhbmRsZXItPk9uUkJ1dHRvblVwKHBQYWdlVmlldywgcEFubm90LCBuRmxhZ3MsIHBvaW50KTsKKwl9CisJcmV0dXJuIEZBTFNFOworfQorCit2b2lkIENQREZTREtfQW5ub3RIYW5kbGVyTWdyOjpBbm5vdF9Pbk1vdXNlRW50ZXIoQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZykKK3sKKwlBU1NFUlQocEFubm90ICE9IE5VTEwpOworCQorCWlmIChJUERGU0RLX0Fubm90SGFuZGxlciogcEFubm90SGFuZGxlciA9IEdldEFubm90SGFuZGxlcihwQW5ub3QpKQorCXsKKwkJcEFubm90SGFuZGxlci0+T25Nb3VzZUVudGVyKHBQYWdlVmlldywgcEFubm90LCBuRmxhZyk7CisJfQorCXJldHVybiA7Cit9CisKK3ZvaWQgQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OkFubm90X09uTW91c2VFeGl0KENQREZTREtfUGFnZVZpZXcgKiBwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWcpCit7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKwkKKwlpZiAoSVBERlNES19Bbm5vdEhhbmRsZXIqIHBBbm5vdEhhbmRsZXIgPSBHZXRBbm5vdEhhbmRsZXIocEFubm90KSkKKwl7CisJCXBBbm5vdEhhbmRsZXItPk9uTW91c2VFeGl0KHBQYWdlVmlldywgcEFubm90LCBuRmxhZyk7CisJfQorCXJldHVybjsKK30KKworRlhfQk9PTCBDUERGU0RLX0Fubm90SGFuZGxlck1ncjo6QW5ub3RfT25DaGFyKENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkNoYXIsIEZYX0RXT1JEIG5GbGFncykKK3sKKworCWlmIChJUERGU0RLX0Fubm90SGFuZGxlciogcEFubm90SGFuZGxlciA9IEdldEFubm90SGFuZGxlcihwQW5ub3QpKQorCXsKKwkJcmV0dXJuIHBBbm5vdEhhbmRsZXItPk9uQ2hhcihwQW5ub3QsbkNoYXIsIG5GbGFncyk7CisJfQorCXJldHVybiBGQUxTRTsKKworfQorCitGWF9CT09MCQkJQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OkFubm90X09uS2V5RG93bihDUERGU0RLX0Fubm90KiBwQW5ub3QsIGludCBuS2V5Q29kZSwgaW50IG5GbGFnKQoreworCisJaWYgKCFtX3BBcHAtPkZGSV9Jc0NUUkxLZXlEb3duKG5GbGFnKSAmJiAhbV9wQXBwLT5GRklfSXNBTFRLZXlEb3duKG5GbGFnKSkKKwl7CisJCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlID0gcEFubm90LT5HZXRQYWdlVmlldygpOworCQlDUERGU0RLX0Fubm90KiBwRm9jdXNBbm5vdCA9IHBQYWdlLT5HZXRGb2N1c0Fubm90KCk7CisJCWlmIChwRm9jdXNBbm5vdCAmJiAobktleUNvZGUgPT0gRldMX1ZLRVlfVGFiKSkKKwkJeworCQkJQ1BERlNES19Bbm5vdCogcE5leHQgPSBHZXROZXh0QW5ub3QocEZvY3VzQW5ub3QsICFtX3BBcHAtPkZGSV9Jc1NISUZUS2V5RG93bihuRmxhZykpOworCisJCQlpZihwTmV4dCAmJiBwTmV4dCAhPSBwRm9jdXNBbm5vdCkKKwkJCXsKKwkJCQlDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQgPSBwUGFnZS0+R2V0U0RLRG9jdW1lbnQoKTsKKwkJCQlwRG9jdW1lbnQtPlNldEZvY3VzQW5ub3QocE5leHQpOworCQkJCXJldHVybiBUUlVFOworCQkJfQorCQl9CisJfQorCisJaWYgKElQREZTREtfQW5ub3RIYW5kbGVyKiBwQW5ub3RIYW5kbGVyID0gR2V0QW5ub3RIYW5kbGVyKHBBbm5vdCkpCisJeworCQlyZXR1cm4gcEFubm90SGFuZGxlci0+T25LZXlEb3duKHBBbm5vdCxuS2V5Q29kZSwgbkZsYWcpOworCX0KKwlyZXR1cm4gRkFMU0U7Cit9CitGWF9CT09MCQkJQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3I6OkFubm90X09uS2V5VXAoQ1BERlNES19Bbm5vdCogcEFubm90LCBpbnQgbktleUNvZGUsIGludCBuRmxhZykKK3sKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wJCQlDUERGU0RLX0Fubm90SGFuZGxlck1ncjo6QW5ub3RfT25TZXRGb2N1cyhDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFnKQoreworCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7CisKKwlpZiAoSVBERlNES19Bbm5vdEhhbmRsZXIqIHBBbm5vdEhhbmRsZXIgPSBHZXRBbm5vdEhhbmRsZXIocEFubm90KSkKKwl7CisJCWlmIChwQW5ub3RIYW5kbGVyLT5PblNldEZvY3VzKHBBbm5vdCwgbkZsYWcpKQorCQl7CisJCQlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZSA9IHBBbm5vdC0+R2V0UGFnZVZpZXcoKTsKKwkJCUFTU0VSVChwUGFnZSAhPSBOVUxMKTsKKworCQkJcFBhZ2UtPkdldFNES0RvY3VtZW50KCk7CisJLy8JCXBEb2N1bWVudC0+U2V0VG9wbW9zdEFubm90KHBBbm5vdCk7CisKKwkJCXJldHVybiBUUlVFOworCQl9CisJCWVsc2UKKwkJeworCQkJcmV0dXJuIEZBTFNFOworCQl9CisJfQorCQorCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTAkJCUNQREZTREtfQW5ub3RIYW5kbGVyTWdyOjpBbm5vdF9PbktpbGxGb2N1cyhDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFnKQoreworCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7CisJCisJaWYgKElQREZTREtfQW5ub3RIYW5kbGVyKiBwQW5ub3RIYW5kbGVyID0gR2V0QW5ub3RIYW5kbGVyKHBBbm5vdCkpCisJeworCQlpZiAocEFubm90SGFuZGxlci0+T25LaWxsRm9jdXMocEFubm90LCBuRmxhZykpCisJCXsJCisJCQlyZXR1cm4gVFJVRTsKKwkJfQorCQllbHNlCisJCQlyZXR1cm4gRkFMU0U7CisJfQorCQorCXJldHVybiBGQUxTRTsKK30KKworQ1BERl9SZWN0CUNQREZTREtfQW5ub3RIYW5kbGVyTWdyOjpBbm5vdF9PbkdldFZpZXdCQm94KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90KQoreworCUFTU0VSVChwQW5ub3QpOworCWlmIChJUERGU0RLX0Fubm90SGFuZGxlciogcEFubm90SGFuZGxlciA9IEdldEFubm90SGFuZGxlcihwQW5ub3QpKQorCXsKKwkJcmV0dXJuIHBBbm5vdEhhbmRsZXItPkdldFZpZXdCQm94KHBQYWdlVmlldywgcEFubm90KTsKKwl9CisJcmV0dXJuIHBBbm5vdC0+R2V0UmVjdCgpOworfQorCitGWF9CT09MCUNQREZTREtfQW5ub3RIYW5kbGVyTWdyOjpBbm5vdF9PbkhpdFRlc3QoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQoreworCUFTU0VSVChwQW5ub3QpOworCWlmIChJUERGU0RLX0Fubm90SGFuZGxlciogcEFubm90SGFuZGxlciA9IEdldEFubm90SGFuZGxlcihwQW5ub3QpKQorCXsKKwkJaWYocEFubm90SGFuZGxlci0+Q2FuQW5zd2VyKHBBbm5vdCkpCisJCQlyZXR1cm4gcEFubm90SGFuZGxlci0+SGl0VGVzdChwUGFnZVZpZXcsIHBBbm5vdCwgcG9pbnQpOworCX0KKwlyZXR1cm4gRkFMU0U7Cit9CisKK0NQREZTREtfQW5ub3QqCUNQREZTREtfQW5ub3RIYW5kbGVyTWdyOjpHZXROZXh0QW5ub3QoQ1BERlNES19Bbm5vdCogcFNES0Fubm90LEZYX0JPT0wgYk5leHQpCit7CisJIENCQV9Bbm5vdEl0ZXJhdG9yIGFpKHBTREtBbm5vdC0+R2V0UGFnZVZpZXcoKSwgIldpZGdldCIsICIiKTsKKworCSBDUERGU0RLX0Fubm90KiBwTmV4dCA9IGJOZXh0ID8gCisJCSBhaS5HZXROZXh0QW5ub3QocFNES0Fubm90KSA6IAorCQlhaS5HZXRQcmV2QW5ub3QocFNES0Fubm90KTsKKwkKKwkJcmV0dXJuIHBOZXh0OworfQorCitGWF9CT09MIENQREZTREtfQkZBbm5vdEhhbmRsZXI6OkNhbkFuc3dlcihDUERGU0RLX0Fubm90KiBwQW5ub3QpCit7CisJQVNTRVJUKHBBbm5vdCk7CisJQVNTRVJUKHBBbm5vdC0+R2V0VHlwZSgpID09ICJXaWRnZXQiKTsKKwlDRlhfQnl0ZVN0cmluZyBzU3ViVHlwZSA9IHBBbm5vdC0+R2V0U3ViVHlwZSgpOworCQorCWlmIChzU3ViVHlwZSA9PSBCRkZUX1NJR05BVFVSRSkKKwl7CisJfQorCWVsc2UKKwl7CisJCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gKENQREZTREtfV2lkZ2V0KilwQW5ub3Q7CisJCWlmICghcFdpZGdldC0+SXNWaXNpYmxlKCkpIHJldHVybiBGQUxTRTsKKworCQlpbnQgbkZpZWxkRmxhZ3MgPSBwV2lkZ2V0LT5HZXRGaWVsZEZsYWdzKCk7CisJCWlmICgobkZpZWxkRmxhZ3MgJiBGSUVMREZMQUdfUkVBRE9OTFkpID09IEZJRUxERkxBR19SRUFET05MWSkgcmV0dXJuIEZBTFNFOworCQlpZiAocFdpZGdldC0+R2V0RmllbGRUeXBlKCkgPT0gRklFTERUWVBFX1BVU0hCVVRUT04pCisJCQlyZXR1cm4gVFJVRTsKKwkJZWxzZQorCQl7CisJCQlDUERGX1BhZ2UqIHBQYWdlID0gcFdpZGdldC0+R2V0UERGUGFnZSgpOworCQkJQVNTRVJUKHBQYWdlICE9IE5VTEwpOworCQkJCisJCQlDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQgPSBwUGFnZS0+bV9wRG9jdW1lbnQ7CisJCQlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOworCQkJCisJCQlGWF9EV09SRCBkd1Blcm1pc3Npb25zID0gcERvY3VtZW50LT5HZXRVc2VyUGVybWlzc2lvbnMoKTsKKwkJCXJldHVybiAoZHdQZXJtaXNzaW9ucyZGUERGUEVSTV9GSUxMX0ZPUk0pIHx8IAorCQkJCShkd1Blcm1pc3Npb25zJkZQREZQRVJNX0FOTk9UX0ZPUk0pIHx8IAorIAkJCShkd1Blcm1pc3Npb25zJkZQREZQRVJNX0FOTk9UX0ZPUk0pOworCQl9CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCitDUERGU0RLX0Fubm90KgkJQ1BERlNES19CRkFubm90SGFuZGxlcjo6TmV3QW5ub3QoQ1BERl9Bbm5vdCogcEFubm90LCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZSkKK3sKKwlBU1NFUlQocFBhZ2UgIT0gTlVMTCk7CisJcFBhZ2UtPkdldFBERkRvY3VtZW50KCk7CisJCisJQ1BERlNES19Eb2N1bWVudCogcFNES0RvYyAgPSBtX3BBcHAtPkdldEN1cnJlbnREb2MoKTsKKwlBU1NFUlQocFNES0RvYyk7CisJQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSAoQ1BERlNES19JbnRlckZvcm0qKXBTREtEb2MtPkdldEludGVyRm9ybSgpOworCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOworCQorCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gTlVMTDsKKwlpZiAoQ1BERl9Gb3JtQ29udHJvbCogcEN0cmwgPSBDUERGU0RLX1dpZGdldDo6R2V0Rm9ybUNvbnRyb2wocEludGVyRm9ybS0+R2V0SW50ZXJGb3JtKCksIHBBbm5vdC0+bV9wQW5ub3REaWN0KSkKKwl7CisJCXBXaWRnZXQgPSBuZXcgQ1BERlNES19XaWRnZXQocEFubm90LCBwUGFnZSwgcEludGVyRm9ybSk7CisJCXBJbnRlckZvcm0tPkFkZE1hcChwQ3RybCwgcFdpZGdldCk7CisJCUNQREZfSW50ZXJGb3JtKiBwUERGSW50ZXJGb3JtID0gcEludGVyRm9ybS0+R2V0SW50ZXJGb3JtKCk7CisJCWlmKHBQREZJbnRlckZvcm0gJiYgcFBERkludGVyRm9ybS0+TmVlZENvbnN0cnVjdEFQKCkpCisJCQlwV2lkZ2V0LT5SZXNldEFwcGVhcmFuY2UoTlVMTCxGQUxTRSk7CisJfQorCQorCXJldHVybiBwV2lkZ2V0OworfQorCit2b2lkIENQREZTREtfQkZBbm5vdEhhbmRsZXI6OlJlbGVhc2VBbm5vdChDUERGU0RLX0Fubm90KiBwQW5ub3QpCit7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKworCWlmIChtX3BGb3JtRmlsbGVyKQorCQltX3BGb3JtRmlsbGVyLT5PbkRlbGV0ZShwQW5ub3QpOworCQorCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gKENQREZTREtfV2lkZ2V0KilwQW5ub3Q7CisJQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSBwV2lkZ2V0LT5HZXRJbnRlckZvcm0oKTsKKwlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsKKwkKKwlDUERGX0Zvcm1Db250cm9sKiBwQ3Ryb2wgPSBwV2lkZ2V0LT5HZXRGb3JtQ29udHJvbCgpOworCXBJbnRlckZvcm0tPlJlbW92ZU1hcChwQ3Ryb2wpOworCQorCisJZGVsZXRlIHBXaWRnZXQ7Cit9CisKKwordm9pZCBDUERGU0RLX0JGQW5ub3RIYW5kbGVyOjpPbkRyYXcoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsICBGWF9EV09SRCBkd0ZsYWdzKQoreworCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7CisJQ0ZYX0J5dGVTdHJpbmcgc1N1YlR5cGUgPSBwQW5ub3QtPkdldFN1YlR5cGUoKTsKKwkKKwlpZiAoc1N1YlR5cGUgPT0gQkZGVF9TSUdOQVRVUkUpCisJeworCQlwQW5ub3QtPkRyYXdBcHBlYXJhbmNlKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgQ1BERl9Bbm5vdDo6Tm9ybWFsLCBOVUxMKTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKG1fcEZvcm1GaWxsZXIpCisJCXsKKwkJCW1fcEZvcm1GaWxsZXItPk9uRHJhdyhwUGFnZVZpZXcsIHBBbm5vdCwgcERldmljZSwgcFVzZXIyRGV2aWNlLCBkd0ZsYWdzKTsKKwkJfQorCX0KK30KKwordm9pZCBDUERGU0RLX0JGQW5ub3RIYW5kbGVyOjpPbk1vdXNlRW50ZXIoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFnKSAKK3sKKwlBU1NFUlQocEFubm90ICE9IE5VTEwpOworCUNGWF9CeXRlU3RyaW5nIHNTdWJUeXBlID0gcEFubm90LT5HZXRTdWJUeXBlKCk7CisJCisJaWYgKHNTdWJUeXBlID09IEJGRlRfU0lHTkFUVVJFKQorCXsKKwl9CisJZWxzZQorCXsKKwkJaWYgKG1fcEZvcm1GaWxsZXIpCisJCQkgbV9wRm9ybUZpbGxlci0+T25Nb3VzZUVudGVyKHBQYWdlVmlldywgcEFubm90LCBuRmxhZyk7CisJfQorCQorCit9Cit2b2lkIENQREZTREtfQkZBbm5vdEhhbmRsZXI6Ok9uTW91c2VFeGl0KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZykgCit7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKwlDRlhfQnl0ZVN0cmluZyBzU3ViVHlwZSA9IHBBbm5vdC0+R2V0U3ViVHlwZSgpOworCQorCWlmIChzU3ViVHlwZSA9PSBCRkZUX1NJR05BVFVSRSkKKwl7CisJfQorCWVsc2UKKwl7CisJCWlmIChtX3BGb3JtRmlsbGVyKQorCQkJIG1fcEZvcm1GaWxsZXItPk9uTW91c2VFeGl0KHBQYWdlVmlldywgcEFubm90LCBuRmxhZyk7CisJfQorCQorfQorRlhfQk9PTCBDUERGU0RLX0JGQW5ub3RIYW5kbGVyOjpPbkxCdXR0b25Eb3duKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQoreworCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7CisJQ0ZYX0J5dGVTdHJpbmcgc1N1YlR5cGUgPSBwQW5ub3QtPkdldFN1YlR5cGUoKTsKKwkKKwlpZiAoc1N1YlR5cGUgPT0gQkZGVF9TSUdOQVRVUkUpCisJeworCX0KKwllbHNlCisJeworCQlpZiAobV9wRm9ybUZpbGxlcikKKwkJCXJldHVybiBtX3BGb3JtRmlsbGVyLT5PbkxCdXR0b25Eb3duKHBQYWdlVmlldywgcEFubm90LCBuRmxhZ3MsIHBvaW50KTsKKwl9CisJCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIENQREZTREtfQkZBbm5vdEhhbmRsZXI6Ok9uTEJ1dHRvblVwKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQoreworCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7CisJQ0ZYX0J5dGVTdHJpbmcgc1N1YlR5cGUgPSBwQW5ub3QtPkdldFN1YlR5cGUoKTsKKwkKKwlpZiAoc1N1YlR5cGUgPT0gQkZGVF9TSUdOQVRVUkUpCisJeworCX0KKwllbHNlCisJeworCQlpZiAobV9wRm9ybUZpbGxlcikKKwkJCXJldHVybiBtX3BGb3JtRmlsbGVyLT5PbkxCdXR0b25VcChwUGFnZVZpZXcsIHBBbm5vdCwgbkZsYWdzLCBwb2ludCk7CisJfQorCQorCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBDUERGU0RLX0JGQW5ub3RIYW5kbGVyOjpPbkxCdXR0b25EYmxDbGsoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpCit7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKwlDRlhfQnl0ZVN0cmluZyBzU3ViVHlwZSA9IHBBbm5vdC0+R2V0U3ViVHlwZSgpOworCQorCWlmIChzU3ViVHlwZSA9PSBCRkZUX1NJR05BVFVSRSkKKwl7CisJfQorCWVsc2UKKwl7CisJCWlmIChtX3BGb3JtRmlsbGVyKQorCQkJcmV0dXJuIG1fcEZvcm1GaWxsZXItPk9uTEJ1dHRvbkRibENsayhwUGFnZVZpZXcsIHBBbm5vdCwgbkZsYWdzLCBwb2ludCk7CisJfQorCQorCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBDUERGU0RLX0JGQW5ub3RIYW5kbGVyOjpPbk1vdXNlTW92ZShDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkKK3sJCisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKwlDRlhfQnl0ZVN0cmluZyBzU3ViVHlwZSA9IHBBbm5vdC0+R2V0U3ViVHlwZSgpOworCisJaWYgKHNTdWJUeXBlID09IEJGRlRfU0lHTkFUVVJFKQorCXsKKwl9CisJZWxzZQorCXsKKwkJaWYgKG1fcEZvcm1GaWxsZXIpCisJCQlyZXR1cm4gbV9wRm9ybUZpbGxlci0+T25Nb3VzZU1vdmUocFBhZ2VWaWV3LCBwQW5ub3QsIG5GbGFncywgcG9pbnQpOworCX0KKworCXJldHVybiBGQUxTRTsKKworfQorCisKK0ZYX0JPT0wgQ1BERlNES19CRkFubm90SGFuZGxlcjo6T25Nb3VzZVdoZWVsKENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBGWF9EV09SRCBuRmxhZ3MsIHNob3J0IHpEZWx0YSwgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpCit7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKwlDRlhfQnl0ZVN0cmluZyBzU3ViVHlwZSA9IHBBbm5vdC0+R2V0U3ViVHlwZSgpOworCQorCWlmIChzU3ViVHlwZSA9PSBCRkZUX1NJR05BVFVSRSkKKwl7CisJfQorCWVsc2UKKwl7CisJCWlmIChtX3BGb3JtRmlsbGVyKQorCQkJcmV0dXJuIG1fcEZvcm1GaWxsZXItPk9uTW91c2VXaGVlbChwUGFnZVZpZXcsIHBBbm5vdCwgbkZsYWdzLCB6RGVsdGEscG9pbnQpOworCX0KKwkKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wgQ1BERlNES19CRkFubm90SGFuZGxlcjo6T25SQnV0dG9uRG93bihDUERGU0RLX1BhZ2VWaWV3ICpwUGFnZVZpZXcsIENQREZTREtfQW5ub3QqIHBBbm5vdCwgRlhfRFdPUkQgbkZsYWdzLCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkKK3sKKwlBU1NFUlQocEFubm90ICE9IE5VTEwpOworCUNGWF9CeXRlU3RyaW5nIHNTdWJUeXBlID0gcEFubm90LT5HZXRTdWJUeXBlKCk7CisJCisJaWYgKHNTdWJUeXBlID09IEJGRlRfU0lHTkFUVVJFKQorCXsKKwl9CisJZWxzZQorCXsKKwkJaWYgKG1fcEZvcm1GaWxsZXIpCisJCQlyZXR1cm4gbV9wRm9ybUZpbGxlci0+T25SQnV0dG9uRG93bihwUGFnZVZpZXcsIHBBbm5vdCwgbkZsYWdzLCBwb2ludCk7CisJfQorCQorCXJldHVybiBGQUxTRTsKK30KK0ZYX0JPT0wgQ1BERlNES19CRkFubm90SGFuZGxlcjo6T25SQnV0dG9uVXAoQ1BERlNES19QYWdlVmlldyAqcFBhZ2VWaWV3LCBDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFncywgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpCit7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKwlDRlhfQnl0ZVN0cmluZyBzU3ViVHlwZSA9IHBBbm5vdC0+R2V0U3ViVHlwZSgpOworCQorCWlmIChzU3ViVHlwZSA9PSBCRkZUX1NJR05BVFVSRSkKKwl7CisJfQorCWVsc2UKKwl7CisJCWlmIChtX3BGb3JtRmlsbGVyKQorCQkJcmV0dXJuIG1fcEZvcm1GaWxsZXItPk9uUkJ1dHRvblVwKHBQYWdlVmlldywgcEFubm90LCBuRmxhZ3MsIHBvaW50KTsKKwl9CisJCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIENQREZTREtfQkZBbm5vdEhhbmRsZXI6Ok9uQ2hhcihDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5DaGFyLCBGWF9EV09SRCBuRmxhZ3MpCit7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKwlDRlhfQnl0ZVN0cmluZyBzU3ViVHlwZSA9IHBBbm5vdC0+R2V0U3ViVHlwZSgpOworCQorCWlmIChzU3ViVHlwZSA9PSBCRkZUX1NJR05BVFVSRSkKKwl7CisJfQorCWVsc2UKKwl7CisJCWlmIChtX3BGb3JtRmlsbGVyKQorCQkJcmV0dXJuIG1fcEZvcm1GaWxsZXItPk9uQ2hhcihwQW5ub3QsbkNoYXIsIG5GbGFncyk7CisJfQorCQorCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBDUERGU0RLX0JGQW5ub3RIYW5kbGVyOjpPbktleURvd24oQ1BERlNES19Bbm5vdCogcEFubm90LCBpbnQgbktleUNvZGUsIGludCBuRmxhZykKK3sKKwlBU1NFUlQocEFubm90ICE9IE5VTEwpOworCUNGWF9CeXRlU3RyaW5nIHNTdWJUeXBlID0gcEFubm90LT5HZXRTdWJUeXBlKCk7CisJCisJaWYgKHNTdWJUeXBlID09IEJGRlRfU0lHTkFUVVJFKQorCXsKKwl9CisJZWxzZQorCXsKKwkJaWYgKG1fcEZvcm1GaWxsZXIpCisJCQlyZXR1cm4gbV9wRm9ybUZpbGxlci0+T25LZXlEb3duKHBBbm5vdCxuS2V5Q29kZSwgbkZsYWcpOworCX0KKwkKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wgQ1BERlNES19CRkFubm90SGFuZGxlcjo6T25LZXlVcChDUERGU0RLX0Fubm90KiBwQW5ub3QsIGludCBuS2V5Q29kZSwgaW50IG5GbGFnKQoreworCisJcmV0dXJuIEZBTFNFOworfQordm9pZAlDUERGU0RLX0JGQW5ub3RIYW5kbGVyOjpPbkNyZWF0ZShDUERGU0RLX0Fubm90KiBwQW5ub3QpIAoreworCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7CisJQ0ZYX0J5dGVTdHJpbmcgc1N1YlR5cGUgPSBwQW5ub3QtPkdldFN1YlR5cGUoKTsKKwkKKwlpZiAoc1N1YlR5cGUgPT0gQkZGVF9TSUdOQVRVUkUpCisJeworCX0KKwllbHNlCisJeworCQlpZiAobV9wRm9ybUZpbGxlcikKKwkJCW1fcEZvcm1GaWxsZXItPk9uQ3JlYXRlKHBBbm5vdCk7CisJfQorfQorCit2b2lkIENQREZTREtfQkZBbm5vdEhhbmRsZXI6Ok9uTG9hZChDUERGU0RLX0Fubm90KiBwQW5ub3QpCit7CisJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKwkKKwlDRlhfQnl0ZVN0cmluZyBzU3ViVHlwZSA9IHBBbm5vdC0+R2V0U3ViVHlwZSgpOworCQorCWlmIChzU3ViVHlwZSA9PSBCRkZUX1NJR05BVFVSRSkKKwl7CisJfQorCWVsc2UKKwl7CisJCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gKENQREZTREtfV2lkZ2V0KilwQW5ub3Q7CisJCQorCWlmICghcFdpZGdldC0+SXNBcHBlYXJhbmNlVmFsaWQoKSkKKwkJCXBXaWRnZXQtPlJlc2V0QXBwZWFyYW5jZShOVUxMLCBGQUxTRSk7CisJCQorCQlpbnQgbkZpZWxkVHlwZSA9IHBXaWRnZXQtPkdldEZpZWxkVHlwZSgpOworCQkKKwkJaWYgKG5GaWVsZFR5cGUgPT0gRklFTERUWVBFX1RFWFRGSUVMRCB8fCBuRmllbGRUeXBlID09IEZJRUxEVFlQRV9DT01CT0JPWCkKKwkJeworCQkJRlhfQk9PTCBiRm9ybWF0ZWQgPSBGQUxTRTsKKwkJCUNGWF9XaWRlU3RyaW5nIHNWYWx1ZSA9IHBXaWRnZXQtPk9uRm9ybWF0KDAsIGJGb3JtYXRlZCk7CisJCQkKKwkJCWlmIChiRm9ybWF0ZWQgJiYgbkZpZWxkVHlwZSA9PSBGSUVMRFRZUEVfQ09NQk9CT1gpCisJCQl7CisJCQkJcFdpZGdldC0+UmVzZXRBcHBlYXJhbmNlKHNWYWx1ZSwgRkFMU0UpOworCQkJfQorCQl9CisJCQorCisJCWlmIChtX3BGb3JtRmlsbGVyKQorCQkJbV9wRm9ybUZpbGxlci0+T25Mb2FkKHBBbm5vdCk7CisKKwl9Cit9CisKK0ZYX0JPT0wJQ1BERlNES19CRkFubm90SGFuZGxlcjo6T25TZXRGb2N1cyhDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFnKQoreworCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7CisJQ0ZYX0J5dGVTdHJpbmcgc1N1YlR5cGUgPSBwQW5ub3QtPkdldFN1YlR5cGUoKTsKKwkKKwlpZiAoc1N1YlR5cGUgPT0gQkZGVF9TSUdOQVRVUkUpCisJeworCX0KKwllbHNlCisJeworCQlpZiAobV9wRm9ybUZpbGxlcikKKwkJCXJldHVybiBtX3BGb3JtRmlsbGVyLT5PblNldEZvY3VzKHBBbm5vdCxuRmxhZyk7CisJfQorCQorCXJldHVybiBUUlVFOworfQorRlhfQk9PTAlDUERGU0RLX0JGQW5ub3RIYW5kbGVyOjpPbktpbGxGb2N1cyhDUERGU0RLX0Fubm90KiBwQW5ub3QsIEZYX0RXT1JEIG5GbGFnKQoreworCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7CisJQ0ZYX0J5dGVTdHJpbmcgc1N1YlR5cGUgPSBwQW5ub3QtPkdldFN1YlR5cGUoKTsKKwkKKwlpZiAoc1N1YlR5cGUgPT0gQkZGVF9TSUdOQVRVUkUpCisJeworCX0KKwllbHNlCisJeworCQlpZiAobV9wRm9ybUZpbGxlcikKKwkJCXJldHVybiBtX3BGb3JtRmlsbGVyLT5PbktpbGxGb2N1cyhwQW5ub3QsbkZsYWcpOworCX0KKwkKKwlyZXR1cm4gVFJVRTsKK30KKworQ1BERl9SZWN0IENQREZTREtfQkZBbm5vdEhhbmRsZXI6OkdldFZpZXdCQm94KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90KQoreworCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7CisJQ0ZYX0J5dGVTdHJpbmcgc1N1YlR5cGUgPSBwQW5ub3QtPkdldFN1YlR5cGUoKTsKKwkKKwlpZiAoc1N1YlR5cGUgPT0gQkZGVF9TSUdOQVRVUkUpCisJeworCX0KKwllbHNlCisJeworCQlpZiAobV9wRm9ybUZpbGxlcikKKwkJCXJldHVybiBtX3BGb3JtRmlsbGVyLT5HZXRWaWV3QkJveChwUGFnZVZpZXcsIHBBbm5vdCk7CisKKwl9CisJCisJcmV0dXJuIENQREZfUmVjdCgwLDAsMCwwKTsKK30KKworRlhfQk9PTAlDUERGU0RLX0JGQW5ub3RIYW5kbGVyOjpIaXRUZXN0KENQREZTREtfUGFnZVZpZXcgKnBQYWdlVmlldywgQ1BERlNES19Bbm5vdCogcEFubm90LCBjb25zdCBDUERGX1BvaW50JiBwb2ludCkKK3sKKwlBU1NFUlQocFBhZ2VWaWV3KTsKKwlBU1NFUlQocEFubm90KTsKKworCUNQREZfUmVjdCByZWN0ID0gR2V0Vmlld0JCb3gocFBhZ2VWaWV3LCBwQW5ub3QpOworCXJldHVybiByZWN0LkNvbnRhaW5zKHBvaW50LngsIHBvaW50LnkpOworfQorCisvL0NSZWFkZXJfQW5ub3RJdGVyYXRvckV4CisKK0NQREZTREtfQW5ub3RJdGVyYXRvcjo6Q1BERlNES19Bbm5vdEl0ZXJhdG9yKENQREZTREtfUGFnZVZpZXcgKiBwUGFnZVZpZXcsRlhfQk9PTCBiUmV2ZXJzZSwKKwkJCQkJCQkJCQkJCSBGWF9CT09MIGJJZ25vcmVUb3Btb3N0Lyo9RkFMU0UqLywKKwkJCQkJCQkJCQkJCSBGWF9CT09MIGJDaXJjbGUvKj1GQUxTRSovLAorCQkJCQkJCQkJCQkJIENGWF9QdHJBcnJheSAqcExpc3QvKj1OVUxMKi8pCit7CisJQVNTRVJUKHBQYWdlVmlldyk7CisJbV9iUmV2ZXJzZT1iUmV2ZXJzZTsKKwltX2JJZ25vcmVUb3Btb3N0PSBiSWdub3JlVG9wbW9zdDsKKwltX2JDaXJjbGU9YkNpcmNsZTsKKwltX3BJdGVyYXRvckFubm90TGlzdC5SZW1vdmVBbGwoKTsKKwlJbml0SXRlcmF0b3JBbm5vdExpc3QocFBhZ2VWaWV3LHBMaXN0KTsKK30KKworQ1BERlNES19Bbm5vdCoJQ1BERlNES19Bbm5vdEl0ZXJhdG9yOjpOZXh0QW5ub3QgKGNvbnN0IENQREZTREtfQW5ub3QqIHBDdXJyZW50KSAKK3sKKwkKKwlpbnQgaW5kZXg9LTE7CisJaW50IG5Db3VudD10aGlzLT5tX3BJdGVyYXRvckFubm90TGlzdC5HZXRTaXplKCk7CisJaWYocEN1cnJlbnQpeworCQlmb3IoaW50IGk9MDtpPG5Db3VudDtpKyspeworCQkJQ1BERlNES19Bbm5vdCAqIHBSZWFkZXJBbm5vdD0gKENQREZTREtfQW5ub3QgKiltX3BJdGVyYXRvckFubm90TGlzdC5HZXRBdChpKTsKKwkJCWlmKHBSZWFkZXJBbm5vdCA9PXBDdXJyZW50KXsJCQkKKwkJCQlpbmRleD1pOworCQkJCWJyZWFrOworCQkJfQkJCQorCQl9CisJfQkKKwlyZXR1cm4gTmV4dEFubm90KGluZGV4KTsKK30KK0NQREZTREtfQW5ub3QqCUNQREZTREtfQW5ub3RJdGVyYXRvcjo6UHJldkFubm90IChjb25zdCBDUERGU0RLX0Fubm90KnBDdXJyZW50KQoreworCQorCWludCBpbmRleD0tMTsKKwlpbnQgbkNvdW50PXRoaXMtPm1fcEl0ZXJhdG9yQW5ub3RMaXN0LkdldFNpemUoKTsKKwlpZihwQ3VycmVudCl7CisJCWZvcihpbnQgaT0wO2k8bkNvdW50O2krKyl7CisJCQlDUERGU0RLX0Fubm90ICogcFJlYWRlckFubm90PSAoQ1BERlNES19Bbm5vdCopbV9wSXRlcmF0b3JBbm5vdExpc3QuR2V0QXQoaSk7CisJCQlpZihwUmVhZGVyQW5ub3QgPT1wQ3VycmVudCl7CQkJCisJCQkJaW5kZXg9aTsKKwkJCQlicmVhazsKKwkJCX0JCQkKKwkJfQkKKwl9CisJcmV0dXJuIFByZXZBbm5vdChpbmRleCk7CQorfQorQ1BERlNES19Bbm5vdCoJQ1BERlNES19Bbm5vdEl0ZXJhdG9yOjpOZXh0QW5ub3QgKGludCYgaW5kZXgpIAorewkKKwkKKwlpbnQgbkNvdW50PW1fcEl0ZXJhdG9yQW5ub3RMaXN0LkdldFNpemUoKTsKKyAgICBpZihuQ291bnQ8PTApIGluZGV4PS0xOworICAgIGVsc2V7CisJCWlmKGluZGV4PDApeworCQkJaW5kZXg9MDsJCQorCQl9CisJCWVsc2V7CQkKKwkJCWlmKG1fYkNpcmNsZSl7CQkJCisJCQkJaW5kZXg9KCBpbmRleCA8bkNvdW50LTEpID8gKGluZGV4KzEpIDowOwkJCisJCQl9CisJCQllbHNleworCQkJCWluZGV4PSggaW5kZXggPG5Db3VudC0xKSA/IChpbmRleCsxKSA6LTE7CQkKKwkJCX0KKwkJCQorCQl9CQorCX0KKwlyZXR1cm4gKGluZGV4IDwwKSA/IE5VTEwgOiAoQ1BERlNES19Bbm5vdCopbV9wSXRlcmF0b3JBbm5vdExpc3QuR2V0QXQoaW5kZXgpOwkJCit9CisKKworQ1BERlNES19Bbm5vdCoJQ1BERlNES19Bbm5vdEl0ZXJhdG9yOjpQcmV2QW5ub3QgKGludCYgaW5kZXgpCit7CisJCisJaW50IG5Db3VudD1tX3BJdGVyYXRvckFubm90TGlzdC5HZXRTaXplKCk7CisgICAgaWYobkNvdW50PD0wKSBpbmRleD0tMTsKKwllbHNlewkKKwkJaWYoaW5kZXg8MCl7CisJCQlpbmRleD1uQ291bnQtMTsJCSAKKwkJfQorCQllbHNlewkKKwkJCWlmKG1fYkNpcmNsZSl7CQkJCisJCQkJaW5kZXggPSAoIGluZGV4ID4wKSA/IChpbmRleC0xKSA6bkNvdW50LTE7CQkKKwkJCX0KKwkJCWVsc2V7CisJCQkJaW5kZXggPSAoIGluZGV4ID4wKSA/IChpbmRleC0xKSA6LTE7CQorCQkJfQkJCQkKKwkJfQorCX0KKwlyZXR1cm4gKGluZGV4IDwwKSA/IE5VTEwgOiAoQ1BERlNES19Bbm5vdCopbV9wSXRlcmF0b3JBbm5vdExpc3QuR2V0QXQoaW5kZXgpOwkJCit9CisKKworQ1BERlNES19Bbm5vdCpDUERGU0RLX0Fubm90SXRlcmF0b3I6Ok5leHQoY29uc3QgQ1BERlNES19Bbm5vdCogcEN1cnJlbnQpIAoreworCisJcmV0dXJuIChtX2JSZXZlcnNlKSA/IFByZXZBbm5vdChwQ3VycmVudCk6TmV4dEFubm90KHBDdXJyZW50KTsJCSAKKworfQorCitDUERGU0RLX0Fubm90KglDUERGU0RLX0Fubm90SXRlcmF0b3I6OlByZXYoY29uc3QgQ1BERlNES19Bbm5vdCogcEN1cnJlbnQpIAoreworCisJcmV0dXJuIChtX2JSZXZlcnNlKSA/IE5leHRBbm5vdChwQ3VycmVudCk6UHJldkFubm90KHBDdXJyZW50KTsJCSAKK30KKworQ1BERlNES19Bbm5vdCpDUERGU0RLX0Fubm90SXRlcmF0b3I6Ok5leHQoaW50JiBpbmRleCApCit7CisJCisJcmV0dXJuIChtX2JSZXZlcnNlKSA/IFByZXZBbm5vdChpbmRleCk6TmV4dEFubm90KGluZGV4KTsJCSAKKwkKK30KKworQ1BERlNES19Bbm5vdCoJQ1BERlNES19Bbm5vdEl0ZXJhdG9yOjpQcmV2KGludCYgaW5kZXggKQoreworCQorCXJldHVybiAobV9iUmV2ZXJzZSkgPyBOZXh0QW5ub3QoaW5kZXgpOlByZXZBbm5vdChpbmRleCk7CQkgCit9CisKKwordm9pZCBDUERGU0RLX0Fubm90SXRlcmF0b3I6Okluc2VydFNvcnQoQ0ZYX1B0ckFycmF5ICZhcnJheUxpc3QsIEFJX0NPTVBBUkUgcENvbXBhcmUpCit7CisJZm9yIChpbnQgaSA9IDE7IGkgPCBhcnJheUxpc3QuR2V0U2l6ZSgpOyBpKyspCisJeworCQlpZiAocENvbXBhcmUoKENQREZTREtfQW5ub3QqKShhcnJheUxpc3RbaV0pICwgKENQREZTREtfQW5ub3QqKShhcnJheUxpc3RbaS0xXSkpIDwgMCkKKwkJeworCQkJaW50IGogPSBpLTE7CisJCQlDUERGU0RLX0Fubm90KiBwVGVtcCA9IChDUERGU0RLX0Fubm90KilhcnJheUxpc3RbaV07CisJCQkKKwkJCWRvCisJCQl7CisJCQkJYXJyYXlMaXN0W2ogKyAxXSA9IGFycmF5TGlzdFtqXTsKKwkJCX0gd2hpbGUgKC0taiA+PSAwICYmIHBDb21wYXJlKHBUZW1wLCAoQ1BERlNES19Bbm5vdCopYXJyYXlMaXN0W2pdKSA8IDApOworCisJCQlhcnJheUxpc3RbaisxXSA9IHBUZW1wOworCQl9CisJfQorfQorCitpbnQgTHlPcmRlckNvbXBhcmUoQ1BERlNES19Bbm5vdCogcDEsIENQREZTREtfQW5ub3QqIHAyKQoreworCWlmKHAxLT5HZXRMYXlvdXRPcmRlcigpIDwgcDItPkdldExheW91dE9yZGVyKCkpCisJCXJldHVybiAtMTsKKwllbHNlIGlmIChwMS0+R2V0TGF5b3V0T3JkZXIoKSA9PSBwMi0+R2V0TGF5b3V0T3JkZXIoKSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKworRlhfQk9PTCBDUERGU0RLX0Fubm90SXRlcmF0b3I6OkluaXRJdGVyYXRvckFubm90TGlzdChDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsQ0ZYX1B0ckFycmF5ICogcEFubm90TGlzdCkKK3sKKwlBU1NFUlQocFBhZ2VWaWV3KTsKKwkKKwkKKworCWlmKHBBbm5vdExpc3Q9PU5VTEwpewkKKwkJcEFubm90TGlzdD1wUGFnZVZpZXctPkdldEFubm90TGlzdCgpOworCX0KKworCXRoaXMtPm1fcEl0ZXJhdG9yQW5ub3RMaXN0LlJlbW92ZUFsbCgpOworCWlmKCFwQW5ub3RMaXN0KSByZXR1cm4gRkFMU0U7CisKKwlDUERGU0RLX0Fubm90ICogcFRvcE1vc3RBbm5vdD0gKG1fYklnbm9yZVRvcG1vc3QpID8gTlVMTCA6IHBQYWdlVmlldy0+R2V0Rm9jdXNBbm5vdCgpOworCisKKwlpbnQgbkNvdW50ID1wQW5ub3RMaXN0LT5HZXRTaXplKCk7CisKKwlmb3IoaW50IGkgPSBuQ291bnQtIDEgO2kgPj0gMDtpLS0pCisJeworCQlDUERGU0RLX0Fubm90ICogcFJlYWRlckFubm90PSAoQ1BERlNES19Bbm5vdCopcEFubm90TGlzdC0+R2V0QXQoaSk7CisJCW1fcEl0ZXJhdG9yQW5ub3RMaXN0LkFkZChwUmVhZGVyQW5ub3QpOwkKKwl9CisKKwlJbnNlcnRTb3J0KG1fcEl0ZXJhdG9yQW5ub3RMaXN0LCZMeU9yZGVyQ29tcGFyZSk7CisKKwlpZihwVG9wTW9zdEFubm90KQorCXsKKwkJZm9yKGludCBpPTAgO2k8bkNvdW50O2krKykKKwkJeworCQkJQ1BERlNES19Bbm5vdCAqIHBSZWFkZXJBbm5vdCA9IChDUERGU0RLX0Fubm90KiltX3BJdGVyYXRvckFubm90TGlzdC5HZXRBdChpKTsKKwkJCWlmKHBSZWFkZXJBbm5vdCA9PSBwVG9wTW9zdEFubm90KQorCQkJeworCQkJCW1fcEl0ZXJhdG9yQW5ub3RMaXN0LlJlbW92ZUF0KGkpOworCQkJCW1fcEl0ZXJhdG9yQW5ub3RMaXN0Lkluc2VydEF0KDAsIHBSZWFkZXJBbm5vdCk7CisJCQkJYnJlYWs7CisJCQl9CQorCQl9CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2ZzZGtfYmFzZWFubm90LmNwcCBiL2ZwZGZzZGsvc3JjL2ZzZGtfYmFzZWFubm90LmNwcAppbmRleCBhYzM2ZTNjLi5jOGUwNzM1IDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9mc2RrX2Jhc2Vhbm5vdC5jcHAKKysrIGIvZnBkZnNkay9zcmMvZnNka19iYXNlYW5ub3QuY3BwCkBAIC0xLDExODcgKzEsMTE4NyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19kZWZpbmUuaCINCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX21nci5oIg0KLSNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfYmFzZWFubm90LmgiDQotDQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLwkJCQkJCQkJQ1BERlNES19EYXRlVGltZQkNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLWludCBfZ0FmeEdldFRpbWVab25lSW5TZWNvbmRzKEZYX0NIQVIgdHpob3VyLCBGWF9CWVRFIHR6bWludXRlKQ0KLXsNCi0JcmV0dXJuIChpbnQpdHpob3VyICogMzYwMCArIChpbnQpdHptaW51dGUgKiAodHpob3VyID49IDAgPyA2MCA6IC02MCk7DQotfQ0KLQ0KLUZYX0JPT0wgX2dBZnhJc0xlYXBZZWFyKEZYX1NIT1JUIHllYXIpDQotew0KLQlyZXR1cm4gKCh5ZWFyICUgNDAwID09IDApIHx8ICgoeWVhciAlIDQgPT0gMCkgJiYgKHllYXIgJSAxMDAgIT0gMCkpKTsNCi19DQotDQotRlhfV09SRCBfZ0FmeEdldFllYXJEYXlzKEZYX1NIT1JUIHllYXIpDQotew0KLQlyZXR1cm4gKF9nQWZ4SXNMZWFwWWVhcih5ZWFyKSA9PSBUUlVFID8gMzY2IDogMzY1KTsNCi19DQotDQotRlhfQllURSBfZ0FmeEdldE1vbnRoRGF5cyhGWF9TSE9SVCB5ZWFyLCBGWF9CWVRFIG1vbnRoKQ0KLXsNCi0JRlhfQllURQltRGF5czsNCi0Jc3dpdGNoIChtb250aCkNCi0Jew0KLQljYXNlIDE6DQotCWNhc2UgMzoNCi0JY2FzZSA1Og0KLQljYXNlIDc6DQotCWNhc2UgODoNCi0JY2FzZSAxMDoNCi0JY2FzZSAxMjoNCi0JCW1EYXlzID0gMzE7DQotCQlicmVhazsNCi0NCi0JY2FzZSA0Og0KLQljYXNlIDY6DQotCWNhc2UgOToNCi0JY2FzZSAxMToNCi0JCW1EYXlzID0gMzA7DQotCQlicmVhazsNCi0NCi0JY2FzZSAyOg0KLQkJaWYgKF9nQWZ4SXNMZWFwWWVhcih5ZWFyKSA9PSBUUlVFKQ0KLQkJCW1EYXlzID0gMjk7DQotCQllbHNlDQotCQkJbURheXMgPSAyODsNCi0JCWJyZWFrOw0KLQ0KLQlkZWZhdWx0Og0KLQkJbURheXMgPSAwOw0KLQkJYnJlYWs7DQotCX0NCi0NCi0JcmV0dXJuIG1EYXlzOw0KLX0NCi0NCi1DUERGU0RLX0RhdGVUaW1lOjpDUERGU0RLX0RhdGVUaW1lKCkNCi17DQotCVJlc2V0RGF0ZVRpbWUoKTsNCi19DQotDQotQ1BERlNES19EYXRlVGltZTo6Q1BERlNES19EYXRlVGltZShjb25zdCBDRlhfQnl0ZVN0cmluZyYgZHRTdHIpDQotew0KLQlSZXNldERhdGVUaW1lKCk7DQotDQotCUZyb21QREZEYXRlVGltZVN0cmluZyhkdFN0cik7DQotfQ0KLQ0KLUNQREZTREtfRGF0ZVRpbWU6OkNQREZTREtfRGF0ZVRpbWUoY29uc3QgQ1BERlNES19EYXRlVGltZSYgZGF0ZXRpbWUpDQotew0KLQlvcGVyYXRvciA9IChkYXRldGltZSk7DQotfQ0KLQ0KLUNQREZTREtfRGF0ZVRpbWU6OkNQREZTREtfRGF0ZVRpbWUoY29uc3QgRlhfU1lTVEVNVElNRSYgc3QpDQotew0KLQlvcGVyYXRvciA9IChzdCkgOw0KLX0NCi0NCi0NCi12b2lkIENQREZTREtfRGF0ZVRpbWU6OlJlc2V0RGF0ZVRpbWUoKQ0KLXsNCi0JdHpzZXQoKTsNCi0NCi0JdGltZV90CWN1clRpbWU7DQotCXRpbWUoJmN1clRpbWUpOw0KLQlzdHJ1Y3QgdG0qIG5ld3RpbWU7DQotCS8vbmV3dGltZSA9IGdtdGltZSgmY3VyVGltZSk7DQotCW5ld3RpbWUgPSBsb2NhbHRpbWUoJmN1clRpbWUpOw0KLQ0KLQlkdC55ZWFyID0gbmV3dGltZS0+dG1feWVhciArIDE5MDA7DQotCWR0Lm1vbnRoID0gbmV3dGltZS0+dG1fbW9uICsgMTsNCi0JZHQuZGF5ID0gbmV3dGltZS0+dG1fbWRheTsNCi0JZHQuaG91ciA9IG5ld3RpbWUtPnRtX2hvdXI7DQotCWR0Lm1pbnV0ZSA9IG5ld3RpbWUtPnRtX21pbjsNCi0JZHQuc2Vjb25kID0gbmV3dGltZS0+dG1fc2VjOw0KLS8vIAlkdC50ekhvdXIgPSBfdGltZXpvbmUgLyAzNjAwICogLTE7DQotLy8gCWR0LnR6TWludXRlID0gKGFicyhfdGltZXpvbmUpICUgMzYwMCkgLyA2MDsNCi19DQotDQotQ1BERlNES19EYXRlVGltZSYgQ1BERlNES19EYXRlVGltZTo6b3BlcmF0b3IgPSAoY29uc3QgQ1BERlNES19EYXRlVGltZSYgZGF0ZXRpbWUpDQotew0KLQlGWFNZU19tZW1jcHkoJmR0LCAmZGF0ZXRpbWUuZHQsIHNpemVvZihGWF9EQVRFVElNRSkpOw0KLQlyZXR1cm4gKnRoaXM7DQotfQ0KLQ0KLUNQREZTREtfRGF0ZVRpbWUmIENQREZTREtfRGF0ZVRpbWU6Om9wZXJhdG9yID0gKGNvbnN0IEZYX1NZU1RFTVRJTUUmIHN0KQ0KLXsNCi0JdHpzZXQoKTsNCi0NCi0JZHQueWVhciA9IChGWF9TSE9SVClzdC53WWVhcjsNCi0JZHQubW9udGggPSAoRlhfQllURSlzdC53TW9udGg7DQotCWR0LmRheSA9IChGWF9CWVRFKXN0LndEYXk7DQotCWR0LmhvdXIgPSAoRlhfQllURSlzdC53SG91cjsNCi0JZHQubWludXRlID0gKEZYX0JZVEUpc3Qud01pbnV0ZTsNCi0JZHQuc2Vjb25kID0gKEZYX0JZVEUpc3Qud1NlY29uZDsNCi0vLyAJZHQudHpIb3VyID0gX3RpbWV6b25lIC8gMzYwMCAqIC0xOw0KLS8vIAlkdC50ek1pbnV0ZSA9IChhYnMoX3RpbWV6b25lKSAlIDM2MDApIC8gNjA7DQotCXJldHVybiAqdGhpczsNCi19DQotDQotRlhfQk9PTCBDUERGU0RLX0RhdGVUaW1lOjpvcGVyYXRvciA9PSAoQ1BERlNES19EYXRlVGltZSYgZGF0ZXRpbWUpDQotew0KLQlyZXR1cm4gKEZYU1lTX21lbWNtcCgmZHQsICZkYXRldGltZS5kdCwgc2l6ZW9mKEZYX0RBVEVUSU1FKSkgPT0gMCk7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BERlNES19EYXRlVGltZTo6b3BlcmF0b3IgIT0gKENQREZTREtfRGF0ZVRpbWUmIGRhdGV0aW1lKQ0KLXsNCi0JcmV0dXJuIChGWFNZU19tZW1jbXAoJmR0LCAmZGF0ZXRpbWUuZHQsIHNpemVvZihGWF9EQVRFVElNRSkpICE9IDApOw0KLX0NCi0NCi1GWF9CT09MIENQREZTREtfRGF0ZVRpbWU6Om9wZXJhdG9yID4gKENQREZTREtfRGF0ZVRpbWUmIGRhdGV0aW1lKQ0KLXsNCi0JQ1BERlNES19EYXRlVGltZSBkdDEgPSBUb0dNVCgpOw0KLQlDUERGU0RLX0RhdGVUaW1lIGR0MiA9IGRhdGV0aW1lLlRvR01UKCk7DQotCWludCBkMSA9ICgoKGludClkdDEuZHQueWVhcikgPDwgMTYpIHwgKCgoaW50KWR0MS5kdC5tb250aCkgPDwgOCkgfCAoaW50KWR0MS5kdC5kYXk7DQotCWludCBkMiA9ICgoKGludClkdDEuZHQuaG91cikgPDwgMTYpIHwgKCgoaW50KWR0MS5kdC5taW51dGUpIDw8IDgpIHwgKGludClkdDEuZHQuc2Vjb25kOw0KLQlpbnQgZDMgPSAoKChpbnQpZHQyLmR0LnllYXIpIDw8IDE2KSB8ICgoKGludClkdDIuZHQubW9udGgpIDw8IDgpIHwgKGludClkdDIuZHQuZGF5Ow0KLQlpbnQgZDQgPSAoKChpbnQpZHQyLmR0LmhvdXIpIDw8IDE2KSB8ICgoKGludClkdDIuZHQubWludXRlKSA8PCA4KSB8IChpbnQpZHQyLmR0LnNlY29uZDsNCi0NCi0JaWYgKGQxID4gZDMpIHJldHVybiBUUlVFOw0KLQlpZiAoZDIgPiBkNCkgcmV0dXJuIFRSVUU7DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBDUERGU0RLX0RhdGVUaW1lOjpvcGVyYXRvciA+PSAoQ1BERlNES19EYXRlVGltZSYgZGF0ZXRpbWUpDQotew0KLQlDUERGU0RLX0RhdGVUaW1lIGR0MSA9IFRvR01UKCk7DQotCUNQREZTREtfRGF0ZVRpbWUgZHQyID0gZGF0ZXRpbWUuVG9HTVQoKTsNCi0JaW50IGQxID0gKCgoaW50KWR0MS5kdC55ZWFyKSA8PCAxNikgfCAoKChpbnQpZHQxLmR0Lm1vbnRoKSA8PCA4KSB8IChpbnQpZHQxLmR0LmRheTsNCi0JaW50IGQyID0gKCgoaW50KWR0MS5kdC5ob3VyKSA8PCAxNikgfCAoKChpbnQpZHQxLmR0Lm1pbnV0ZSkgPDwgOCkgfCAoaW50KWR0MS5kdC5zZWNvbmQ7DQotCWludCBkMyA9ICgoKGludClkdDIuZHQueWVhcikgPDwgMTYpIHwgKCgoaW50KWR0Mi5kdC5tb250aCkgPDwgOCkgfCAoaW50KWR0Mi5kdC5kYXk7DQotCWludCBkNCA9ICgoKGludClkdDIuZHQuaG91cikgPDwgMTYpIHwgKCgoaW50KWR0Mi5kdC5taW51dGUpIDw8IDgpIHwgKGludClkdDIuZHQuc2Vjb25kOw0KLQ0KLQlpZiAoZDEgPj0gZDMpIHJldHVybiBUUlVFOw0KLQlpZiAoZDIgPj0gZDQpIHJldHVybiBUUlVFOw0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BERlNES19EYXRlVGltZTo6b3BlcmF0b3IgPCAoQ1BERlNES19EYXRlVGltZSYgZGF0ZXRpbWUpDQotew0KLQlDUERGU0RLX0RhdGVUaW1lIGR0MSA9IFRvR01UKCk7DQotCUNQREZTREtfRGF0ZVRpbWUgZHQyID0gZGF0ZXRpbWUuVG9HTVQoKTsNCi0JaW50IGQxID0gKCgoaW50KWR0MS5kdC55ZWFyKSA8PCAxNikgfCAoKChpbnQpZHQxLmR0Lm1vbnRoKSA8PCA4KSB8IChpbnQpZHQxLmR0LmRheTsNCi0JaW50IGQyID0gKCgoaW50KWR0MS5kdC5ob3VyKSA8PCAxNikgfCAoKChpbnQpZHQxLmR0Lm1pbnV0ZSkgPDwgOCkgfCAoaW50KWR0MS5kdC5zZWNvbmQ7DQotCWludCBkMyA9ICgoKGludClkdDIuZHQueWVhcikgPDwgMTYpIHwgKCgoaW50KWR0Mi5kdC5tb250aCkgPDwgOCkgfCAoaW50KWR0Mi5kdC5kYXk7DQotCWludCBkNCA9ICgoKGludClkdDIuZHQuaG91cikgPDwgMTYpIHwgKCgoaW50KWR0Mi5kdC5taW51dGUpIDw8IDgpIHwgKGludClkdDIuZHQuc2Vjb25kOw0KLQ0KLQlpZiAoZDEgPCBkMykgcmV0dXJuIFRSVUU7DQotCWlmIChkMiA8IGQ0KSByZXR1cm4gVFJVRTsNCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MIENQREZTREtfRGF0ZVRpbWU6Om9wZXJhdG9yIDw9IChDUERGU0RLX0RhdGVUaW1lJiBkYXRldGltZSkNCi17DQotCUNQREZTREtfRGF0ZVRpbWUgZHQxID0gVG9HTVQoKTsNCi0JQ1BERlNES19EYXRlVGltZSBkdDIgPSBkYXRldGltZS5Ub0dNVCgpOw0KLQlpbnQgZDEgPSAoKChpbnQpZHQxLmR0LnllYXIpIDw8IDE2KSB8ICgoKGludClkdDEuZHQubW9udGgpIDw8IDgpIHwgKGludClkdDEuZHQuZGF5Ow0KLQlpbnQgZDIgPSAoKChpbnQpZHQxLmR0LmhvdXIpIDw8IDE2KSB8ICgoKGludClkdDEuZHQubWludXRlKSA8PCA4KSB8IChpbnQpZHQxLmR0LnNlY29uZDsNCi0JaW50IGQzID0gKCgoaW50KWR0Mi5kdC55ZWFyKSA8PCAxNikgfCAoKChpbnQpZHQyLmR0Lm1vbnRoKSA8PCA4KSB8IChpbnQpZHQyLmR0LmRheTsNCi0JaW50IGQ0ID0gKCgoaW50KWR0Mi5kdC5ob3VyKSA8PCAxNikgfCAoKChpbnQpZHQyLmR0Lm1pbnV0ZSkgPDwgOCkgfCAoaW50KWR0Mi5kdC5zZWNvbmQ7DQotDQotCWlmIChkMSA8PSBkMykgcmV0dXJuIFRSVUU7DQotCWlmIChkMiA8PSBkNCkgcmV0dXJuIFRSVUU7DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotQ1BERlNES19EYXRlVGltZTo6b3BlcmF0b3IgdGltZV90KCkNCi17DQotCXN0cnVjdCB0bSBuZXd0aW1lOw0KLQ0KLQluZXd0aW1lLnRtX3llYXIgPSBkdC55ZWFyIC0gMTkwMDsNCi0JbmV3dGltZS50bV9tb24gPSBkdC5tb250aCAtIDE7DQotCW5ld3RpbWUudG1fbWRheSA9IGR0LmRheTsNCi0JbmV3dGltZS50bV9ob3VyID0gZHQuaG91cjsNCi0JbmV3dGltZS50bV9taW4gPSBkdC5taW51dGU7DQotCW5ld3RpbWUudG1fc2VjID0gZHQuc2Vjb25kOw0KLQ0KLQlyZXR1cm4gbWt0aW1lKCZuZXd0aW1lKTsNCi19DQotDQotQ1BERlNES19EYXRlVGltZSYgQ1BERlNES19EYXRlVGltZTo6RnJvbVBERkRhdGVUaW1lU3RyaW5nKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBkdFN0cikNCi17DQotCWludCBzdHJMZW5ndGggPSBkdFN0ci5HZXRMZW5ndGgoKTsNCi0JaWYgKHN0ckxlbmd0aCA+IDApDQotCXsNCi0JCWludCBpID0gMDsNCi0JCWludCBqLCBrOw0KLQkJRlhfQ0hBUiBjaDsNCi0JCXdoaWxlIChpIDwgc3RyTGVuZ3RoKQ0KLQkJew0KLQkJCWNoID0gZHRTdHJbaV07DQotCQkJaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIGJyZWFrOw0KLQkJCWkgKys7DQotCQl9DQotCQlpZiAoaSA+PSBzdHJMZW5ndGgpIHJldHVybiAqdGhpczsNCi0NCi0JCWogPSAwOw0KLQkJayA9IDA7DQotCQl3aGlsZSAoaSA8IHN0ckxlbmd0aCAmJiBqIDwgNCkNCi0JCXsNCi0JCQljaCA9IGR0U3RyW2ldOw0KLQkJCWsgPSBrICogMTAgKyBjaCAtICcwJzsNCi0JCQlqICsrOw0KLQkJCWlmIChjaCA8ICcwJyB8fCBjaCA+ICc5JykgYnJlYWs7DQotCQkJaSArKzsNCi0JCX0NCi0JCWR0LnllYXIgPSAoRlhfU0hPUlQpazsNCi0JCWlmIChpID49IHN0ckxlbmd0aCB8fCBqIDwgNCkgcmV0dXJuICp0aGlzOw0KLQ0KLQkJaiA9IDA7DQotCQlrID0gMDsNCi0JCXdoaWxlIChpIDwgc3RyTGVuZ3RoICYmIGogPCAyKQ0KLQkJew0KLQkJCWNoID0gZHRTdHJbaV07DQotCQkJayA9IGsgKiAxMCArIGNoIC0gJzAnOw0KLQkJCWogKys7DQotCQkJaWYgKGNoIDwgJzAnIHx8IGNoID4gJzknKSBicmVhazsNCi0JCQlpICsrOw0KLQkJfQ0KLQkJZHQubW9udGggPSAoRlhfQllURSlrOw0KLQkJaWYgKGkgPj0gc3RyTGVuZ3RoIHx8IGogPCAyKSByZXR1cm4gKnRoaXM7DQotDQotCQlqID0gMDsNCi0JCWsgPSAwOw0KLQkJd2hpbGUgKGkgPCBzdHJMZW5ndGggJiYgaiA8IDIpDQotCQl7DQotCQkJY2ggPSBkdFN0cltpXTsNCi0JCQlrID0gayAqIDEwICsgY2ggLSAnMCc7DQotCQkJaiArKzsNCi0JCQlpZiAoY2ggPCAnMCcgfHwgY2ggPiAnOScpIGJyZWFrOw0KLQkJCWkgKys7DQotCQl9DQotCQlkdC5kYXkgPSAoRlhfQllURSlrOw0KLQkJaWYgKGkgPj0gc3RyTGVuZ3RoIHx8IGogPCAyKSByZXR1cm4gKnRoaXM7DQotDQotCQlqID0gMDsNCi0JCWsgPSAwOw0KLQkJd2hpbGUgKGkgPCBzdHJMZW5ndGggJiYgaiA8IDIpDQotCQl7DQotCQkJY2ggPSBkdFN0cltpXTsNCi0JCQlrID0gayAqIDEwICsgY2ggLSAnMCc7DQotCQkJaiArKzsNCi0JCQlpZiAoY2ggPCAnMCcgfHwgY2ggPiAnOScpIGJyZWFrOw0KLQkJCWkgKys7DQotCQl9DQotCQlkdC5ob3VyID0gKEZYX0JZVEUpazsNCi0JCWlmIChpID49IHN0ckxlbmd0aCB8fCBqIDwgMikgcmV0dXJuICp0aGlzOw0KLQ0KLQkJaiA9IDA7DQotCQlrID0gMDsNCi0JCXdoaWxlIChpIDwgc3RyTGVuZ3RoICYmIGogPCAyKQ0KLQkJew0KLQkJCWNoID0gZHRTdHJbaV07DQotCQkJayA9IGsgKiAxMCArIGNoIC0gJzAnOw0KLQkJCWogKys7DQotCQkJaWYgKGNoIDwgJzAnIHx8IGNoID4gJzknKSBicmVhazsNCi0JCQlpICsrOw0KLQkJfQ0KLQkJZHQubWludXRlID0gKEZYX0JZVEUpazsNCi0JCWlmIChpID49IHN0ckxlbmd0aCB8fCBqIDwgMikgcmV0dXJuICp0aGlzOw0KLQ0KLQkJaiA9IDA7DQotCQlrID0gMDsNCi0JCXdoaWxlIChpIDwgc3RyTGVuZ3RoICYmIGogPCAyKQ0KLQkJew0KLQkJCWNoID0gZHRTdHJbaV07DQotCQkJayA9IGsgKiAxMCArIGNoIC0gJzAnOw0KLQkJCWogKys7DQotCQkJaWYgKGNoIDwgJzAnIHx8IGNoID4gJzknKSBicmVhazsNCi0JCQlpICsrOw0KLQkJfQ0KLQkJZHQuc2Vjb25kID0gKEZYX0JZVEUpazsNCi0JCWlmIChpID49IHN0ckxlbmd0aCB8fCBqIDwgMikgcmV0dXJuICp0aGlzOw0KLQ0KLQkJY2ggPSBkdFN0cltpICsrXTsNCi0JCWlmIChjaCAhPSAnLScgJiYgY2ggIT0gJysnKSByZXR1cm4gKnRoaXM7DQotCQlpZiAoY2ggPT0gJy0nKQ0KLQkJCWR0LnR6SG91ciA9IC0xOw0KLQkJZWxzZQ0KLQkJCWR0LnR6SG91ciA9IDE7DQotCQlqID0gMDsNCi0JCWsgPSAwOw0KLQkJd2hpbGUgKGkgPCBzdHJMZW5ndGggJiYgaiA8IDIpDQotCQl7DQotCQkJY2ggPSBkdFN0cltpXTsNCi0JCQlrID0gayAqIDEwICsgY2ggLSAnMCc7DQotCQkJaiArKzsNCi0JCQlpZiAoY2ggPCAnMCcgfHwgY2ggPiAnOScpIGJyZWFrOw0KLQkJCWkgKys7DQotCQl9DQotCQlkdC50ekhvdXIgKj0gKEZYX0NIQVIpazsNCi0JCWlmIChpID49IHN0ckxlbmd0aCB8fCBqIDwgMikgcmV0dXJuICp0aGlzOw0KLQ0KLQkJY2ggPSBkdFN0cltpICsrXTsNCi0JCWlmIChjaCAhPSAnXCcnKSByZXR1cm4gKnRoaXM7DQotCQlqID0gMDsNCi0JCWsgPSAwOw0KLQkJd2hpbGUgKGkgPCBzdHJMZW5ndGggJiYgaiA8IDIpDQotCQl7DQotCQkJY2ggPSBkdFN0cltpXTsNCi0JCQlrID0gayAqIDEwICsgY2ggLSAnMCc7DQotCQkJaiArKzsNCi0JCQlpZiAoY2ggPCAnMCcgfHwgY2ggPiAnOScpIGJyZWFrOw0KLQkJCWkgKys7DQotCQl9DQotCQlkdC50ek1pbnV0ZSA9IChGWF9CWVRFKWs7DQotCQlpZiAoaSA+PSBzdHJMZW5ndGggfHwgaiA8IDIpIHJldHVybiAqdGhpczsNCi0JfQ0KLQ0KLQlyZXR1cm4gICp0aGlzOw0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDUERGU0RLX0RhdGVUaW1lOjpUb0NvbW1vbkRhdGVUaW1lU3RyaW5nKCkNCi17DQotCUNGWF9CeXRlU3RyaW5nIHN0cjE7DQotCXN0cjEuRm9ybWF0KCIlMDRkLSUwMmQtJTAyZCAlMDJkOiUwMmQ6JTAyZCAiLCBkdC55ZWFyLCBkdC5tb250aCwgZHQuZGF5LCBkdC5ob3VyLCBkdC5taW51dGUsIGR0LnNlY29uZCk7DQotCWlmIChkdC50ekhvdXIgPCAwKQ0KLQkJc3RyMSArPSAiLSI7DQotCWVsc2UNCi0JCXN0cjEgKz0gIisiOw0KLQlDRlhfQnl0ZVN0cmluZyBzdHIyOw0KLQlzdHIyLkZvcm1hdCgiJTAyZDolMDJkIiwgYWJzKGR0LnR6SG91ciksIGR0LnR6TWludXRlKTsNCi0JcmV0dXJuIHN0cjEgKyBzdHIyOw0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDUERGU0RLX0RhdGVUaW1lOjpUb1BERkRhdGVUaW1lU3RyaW5nKCkNCi17DQotCUNGWF9CeXRlU3RyaW5nIGR0U3RyOw0KLQljaGFyIHRlbXBTdHJbMzJdOw0KLQlzcHJpbnRmKHRlbXBTdHIsICJEOiUwNGQlMDJkJTAyZCUwMmQlMDJkJTAyZCIsIGR0LnllYXIsIGR0Lm1vbnRoLCBkdC5kYXksIGR0LmhvdXIsIGR0Lm1pbnV0ZSwgZHQuc2Vjb25kKTsNCi0JZHRTdHIgPSBDRlhfQnl0ZVN0cmluZyh0ZW1wU3RyKTsNCi0JaWYgKGR0LnR6SG91ciA8IDApDQotCQlkdFN0ciArPSBDRlhfQnl0ZVN0cmluZygiLSIpOw0KLQllbHNlDQotCQlkdFN0ciArPSBDRlhfQnl0ZVN0cmluZygiKyIpOw0KLQlzcHJpbnRmKHRlbXBTdHIsICIlMDJkJyUwMmQnIiwgYWJzKGR0LnR6SG91ciksIGR0LnR6TWludXRlKTsNCi0JZHRTdHIgKz0gQ0ZYX0J5dGVTdHJpbmcodGVtcFN0cik7DQotCXJldHVybiBkdFN0cjsNCi19DQotDQotdm9pZCBDUERGU0RLX0RhdGVUaW1lOjpUb1N5c3RlbVRpbWUoRlhfU1lTVEVNVElNRSYgc3QpDQotew0KLQlDUERGU0RLX0RhdGVUaW1lIGR0ID0gKnRoaXM7DQotCXRpbWVfdCB0ID0gKHRpbWVfdClkdDsNCi0Jc3RydWN0IHRtKiBwVGltZSA9IGxvY2FsdGltZSgmdCk7DQotCWlmKHBUaW1lKXsgDQotCQlzdC53WWVhciA9IChGWF9XT1JEKXBUaW1lLT50bV95ZWFyICsgMTkwMDsNCi0JCXN0LndNb250aCA9IChGWF9XT1JEKXBUaW1lLT50bV9tb24gKyAxOw0KLQkJc3Qud0RheSA9IChGWF9XT1JEKXBUaW1lLT50bV9tZGF5Ow0KLQkJc3Qud0RheU9mV2VlayA9IChGWF9XT1JEKXBUaW1lLT50bV93ZGF5Ow0KLQkJc3Qud0hvdXIgPSAoRlhfV09SRClwVGltZS0+dG1faG91cjsNCi0JCXN0LndNaW51dGUgPSAoRlhfV09SRClwVGltZS0+dG1fbWluOw0KLQkJc3Qud1NlY29uZCA9IChGWF9XT1JEKXBUaW1lLT50bV9zZWM7DQotCQlzdC53TWlsbGlzZWNvbmRzID0gMDsNCi0JfQ0KLX0NCi0NCi1DUERGU0RLX0RhdGVUaW1lIENQREZTREtfRGF0ZVRpbWU6OlRvR01UKCkNCi17DQotCUNQREZTREtfRGF0ZVRpbWUgZHQgPSAqdGhpczsNCi0JZHQuQWRkU2Vjb25kcygtX2dBZnhHZXRUaW1lWm9uZUluU2Vjb25kcyhkdC5kdC50ekhvdXIsIGR0LmR0LnR6TWludXRlKSk7DQotCWR0LmR0LnR6SG91ciA9IDA7DQotCWR0LmR0LnR6TWludXRlID0gMDsNCi0JcmV0dXJuIGR0Ow0KLX0NCi0NCi1DUERGU0RLX0RhdGVUaW1lJiBDUERGU0RLX0RhdGVUaW1lOjpBZGREYXlzKHNob3J0IGRheXMpDQotew0KLQlpZiAoZGF5cyA9PSAwKSByZXR1cm4gKnRoaXM7DQotDQotCUZYX1NIT1JUCXkgPSBkdC55ZWFyLCB5eTsNCi0JRlhfQllURQkJbSA9IGR0Lm1vbnRoOw0KLQlGWF9CWVRFCQlkID0gZHQuZGF5Ow0KLQlpbnQJCQltZGF5cywgeWRheXMsIGxkYXlzOw0KLQ0KLQlsZGF5cyA9IGRheXM7DQotCWlmIChsZGF5cyA+IDApDQotCXsNCi0JCXl5ID0geTsNCi0JCWlmICgoKEZYX1dPUkQpbSAqIDEwMCArIGQpID4gMzAwKSB5eSArKzsNCi0JCXlkYXlzID0gX2dBZnhHZXRZZWFyRGF5cyh5eSk7DQotCQl3aGlsZSAobGRheXMgPj0geWRheXMpDQotCQl7DQotCQkJeSArKzsNCi0JCQlsZGF5cyAtPSB5ZGF5czsNCi0JCQl5eSArKzsNCi0JCQltZGF5cyA9IF9nQWZ4R2V0TW9udGhEYXlzKHksIG0pOw0KLQkJCWlmIChkID4gbWRheXMpDQotCQkJew0KLQkJCQltICsrOw0KLQkJCQlkIC09IG1kYXlzOw0KLQkJCX0NCi0JCQl5ZGF5cyA9IF9nQWZ4R2V0WWVhckRheXMoeXkpOw0KLQkJfQ0KLQkJbWRheXMgPSBfZ0FmeEdldE1vbnRoRGF5cyh5LCBtKSAtIGQgKyAxOw0KLQkJd2hpbGUgKGxkYXlzID49IG1kYXlzKQ0KLQkJew0KLQkJCWxkYXlzIC09IG1kYXlzOw0KLQkJCW0gKys7DQotCQkJZCA9IDE7DQotCQkJbWRheXMgPSBfZ0FmeEdldE1vbnRoRGF5cyh5LCBtKTsNCi0JCX0NCi0JCWQgKz0gbGRheXM7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlsZGF5cyAqPSAtMTsNCi0JCXl5ID0geTsNCi0JCWlmICgoKEZYX1dPUkQpbSAqIDEwMCArIGQpIDwgMzAwKSB5eSAtLTsNCi0JCXlkYXlzID0gX2dBZnhHZXRZZWFyRGF5cyh5eSk7DQotCQl3aGlsZSAobGRheXMgPj0geWRheXMpDQotCQl7DQotCQkJeSAtLTsNCi0JCQlsZGF5cyAtPSB5ZGF5czsNCi0JCQl5eSAtLTsNCi0JCQltZGF5cyA9IF9nQWZ4R2V0TW9udGhEYXlzKHksIG0pOw0KLQkJCWlmIChkID4gbWRheXMpDQotCQkJew0KLQkJCQltICsrOw0KLQkJCQlkIC09IG1kYXlzOw0KLQkJCX0NCi0JCQl5ZGF5cyA9IF9nQWZ4R2V0WWVhckRheXMoeXkpOw0KLQkJfQ0KLQkJd2hpbGUgKGxkYXlzID49IGQpDQotCQl7DQotCQkJbGRheXMgLT0gZDsNCi0JCQltIC0tOw0KLQkJCW1kYXlzID0gX2dBZnhHZXRNb250aERheXMoeSwgbSk7DQotCQkJZCA9IG1kYXlzOw0KLQkJfQ0KLQkJZCAtPSBsZGF5czsNCi0JfQ0KLQ0KLQlkdC55ZWFyID0geTsNCi0JZHQubW9udGggPSBtOw0KLQlkdC5kYXkgPSBkOw0KLQ0KLQlyZXR1cm4gKnRoaXM7DQotfQ0KLQ0KLUNQREZTREtfRGF0ZVRpbWUmIENQREZTREtfRGF0ZVRpbWU6OkFkZFNlY29uZHMoaW50IHNlY29uZHMpDQotew0KLQlpZiAoc2Vjb25kcyA9PSAwKSByZXR1cm4gKnRoaXM7DQotDQotCWludAluOw0KLQlpbnQJZGF5czsNCi0NCi0JbiA9IGR0LmhvdXIgKiAzNjAwICsgZHQubWludXRlICogNjAgKyBkdC5zZWNvbmQgKyBzZWNvbmRzOw0KLQlpZiAobiA8IDApDQotCXsNCi0JCWRheXMgPSAobiAtIDg2Mzk5KSAvIDg2NDAwOw0KLQkJbiAtPSBkYXlzICogODY0MDA7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlkYXlzID0gbiAvIDg2NDAwOw0KLQkJbiAlPSA4NjQwMDsNCi0JfQ0KLQlkdC5ob3VyID0gKEZYX0JZVEUpKG4gLyAzNjAwKTsNCi0JZHQuaG91ciAlPSAyNDsNCi0JbiAlPSAzNjAwOw0KLQlkdC5taW51dGUgPSAoRlhfQllURSkobiAvIDYwKTsNCi0JZHQuc2Vjb25kID0gKEZYX0JZVEUpKG4gJSA2MCk7DQotCWlmIChkYXlzICE9IDApIEFkZERheXMoZGF5cyk7DQotDQotCXJldHVybiAqdGhpczsNCi19DQotDQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLwkJCQkJCQkJQ1BERlNES19Bbm5vdAkNCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLUNQREZTREtfQW5ub3Q6OkNQREZTREtfQW5ub3QoQ1BERl9Bbm5vdCogcEFubm90LCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpIDoNCi1tX3BBbm5vdChwQW5ub3QpLA0KLW1fcFBhZ2VWaWV3KHBQYWdlVmlldyksDQotbV9iU2VsZWN0ZWQoRkFMU0UpLA0KLW1fblRhYk9yZGVyKC0xKQ0KLXsNCi19DQotDQotQ1BERlNES19Bbm5vdDo6fkNQREZTREtfQW5ub3QoKQ0KLXsNCi0JbV9wQW5ub3QgPSBOVUxMOw0KLQltX3BQYWdlVmlldyA9IE5VTEw7DQotfQ0KLQ0KLUNQREZfQW5ub3QqCUNQREZTREtfQW5ub3Q6OkdldFBERkFubm90KCkNCi17DQotCXJldHVybiBtX3BBbm5vdDsNCi19DQotDQotRlhfRFdPUkQgQ1BERlNES19Bbm5vdDo6R2V0RmxhZ3MoKQ0KLXsNCi0JQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOw0KLQkNCi0JcmV0dXJuIG1fcEFubm90LT5HZXRGbGFncygpOw0KLX0NCi0NCi12b2lkIENQREZTREtfQW5ub3Q6OlNldFBhZ2UoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQ0KLXsNCi0JbV9wUGFnZVZpZXcgPSBwUGFnZVZpZXc7DQotfQ0KLQ0KLUNQREZTREtfUGFnZVZpZXcqIENQREZTREtfQW5ub3Q6OkdldFBhZ2VWaWV3KCkNCi17DQotCXJldHVybiBtX3BQYWdlVmlldzsNCi19DQotDQotRlhfQk9PTCBDUERGU0RLX0Fubm90OjpJc1NlbGVjdGVkKCkNCi17DQotCXJldHVybiBtX2JTZWxlY3RlZDsNCi19DQotDQotdm9pZCBDUERGU0RLX0Fubm90OjpTZXRTZWxlY3RlZChGWF9CT09MIGJTZWxlY3RlZCkNCi17DQotCW1fYlNlbGVjdGVkID0gYlNlbGVjdGVkOw0KLX0NCi0NCi0vLyBUYWIgT3JkZXIJDQotaW50IENQREZTREtfQW5ub3Q6OkdldFRhYk9yZGVyKCkNCi17DQotCXJldHVybiBtX25UYWJPcmRlcjsNCi19DQotDQotdm9pZCBDUERGU0RLX0Fubm90OjpTZXRUYWJPcmRlcihpbnQgaVRhYk9yZGVyKQ0KLXsNCi0JbV9uVGFiT3JkZXIgPSBpVGFiT3JkZXI7DQotfQ0KLQ0KLUNQREZfRGljdGlvbmFyeSogQ1BERlNES19Bbm5vdDo6R2V0QW5ub3REaWN0KCkgY29uc3QNCi17DQotCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsNCi0JDQotCXJldHVybiBtX3BBbm5vdC0+bV9wQW5ub3REaWN0Ow0KLX0NCi0NCi12b2lkIENQREZTREtfQW5ub3Q6OlNldFJlY3QoY29uc3QgQ1BERl9SZWN0JiByZWN0KQ0KLXsNCi0JQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsNCi0JQVNTRVJUKHJlY3QucmlnaHQgLSByZWN0LmxlZnQgPj0gR2V0TWluV2lkdGgoKSk7DQotCUFTU0VSVChyZWN0LnRvcCAtIHJlY3QuYm90dG9tID49IEdldE1pbkhlaWdodCgpKTsNCi0JDQotCW1fcEFubm90LT5tX3BBbm5vdERpY3QtPlNldEF0UmVjdCgiUmVjdCIsIHJlY3QpOw0KLX0NCi0NCi1DUERGX1JlY3QgQ1BERlNES19Bbm5vdDo6R2V0UmVjdCgpIGNvbnN0DQotew0KLQlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7DQotCQ0KLQlDUERGX1JlY3QgcmVjdDsNCi0JbV9wQW5ub3QtPkdldFJlY3QocmVjdCk7DQotCQ0KLQlyZXR1cm4gcmVjdDsNCi19DQotDQotQ0ZYX0J5dGVTdHJpbmcgQ1BERlNES19Bbm5vdDo6R2V0VHlwZSgpIGNvbnN0DQotew0KLQlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7DQotCQ0KLQlyZXR1cm4gbV9wQW5ub3QtPkdldFN1YlR5cGUoKTsNCi19DQotDQotQ0ZYX0J5dGVTdHJpbmcgQ1BERlNES19Bbm5vdDo6R2V0U3ViVHlwZSgpIGNvbnN0DQotew0KLQlyZXR1cm4gIiI7DQotfQ0KLQ0KLXZvaWQgQ1BERlNES19Bbm5vdDo6UmVzZXRBcHBlYXJhbmNlKCkNCi17DQotCUFTU0VSVChGQUxTRSk7DQotfQ0KLQ0KLXZvaWQgQ1BERlNES19Bbm5vdDo6RHJhd0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgY29uc3QgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwNCi0JCQkJCQkJCSAgIENQREZfQW5ub3Q6OkFwcGVhcmFuY2VNb2RlIG1vZGUsIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMpCQ0KLXsNCi0JQVNTRVJUKG1fcFBhZ2VWaWV3ICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7DQotCQ0KLQltX3BBbm5vdC0+RHJhd0FwcGVhcmFuY2UobV9wUGFnZVZpZXctPkdldFBERlBhZ2UoKSwgcERldmljZSwgcFVzZXIyRGV2aWNlLCBtb2RlLCBwT3B0aW9ucyk7DQotfQ0KLQ0KLUZYX0JPT0wJQ1BERlNES19Bbm5vdDo6SXNBcHBlYXJhbmNlVmFsaWQoKQ0KLXsNCi0JQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsNCi0JDQotCXJldHVybiBtX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5HZXREaWN0KCJBUCIpICE9IE5VTEw7DQotfQ0KLQ0KLUZYX0JPT0wJQ1BERlNES19Bbm5vdDo6SXNBcHBlYXJhbmNlVmFsaWQoQ1BERl9Bbm5vdDo6QXBwZWFyYW5jZU1vZGUgbW9kZSkNCi17DQotCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsNCi0JQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7DQotCQ0KLQlDUERGX0RpY3Rpb25hcnkqIHBBUCA9IG1fcEFubm90LT5tX3BBbm5vdERpY3QtPkdldERpY3QoIkFQIik7DQotCWlmIChwQVAgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOw0KLQkNCi0JLy8gQ2hvb3NlIHRoZSByaWdodCBzdWItYXANCi0JY29uc3QgRlhfQ0hBUiogYXBfZW50cnkgPSAiTiI7DQotCWlmIChtb2RlID09IENQREZfQW5ub3Q6OkRvd24pDQotCQlhcF9lbnRyeSA9ICJEIjsNCi0JZWxzZSBpZiAobW9kZSA9PSBDUERGX0Fubm90OjpSb2xsb3ZlcikNCi0JCWFwX2VudHJ5ID0gIlIiOw0KLQlpZiAoIXBBUC0+S2V5RXhpc3QoYXBfZW50cnkpKQ0KLQkJYXBfZW50cnkgPSAiTiI7DQotCQ0KLQkvLyBHZXQgdGhlIEFQIHN0cmVhbSBvciBzdWJkaXJlY3RvcnkNCi0JQ1BERl9PYmplY3QqIHBzdWIgPSBwQVAtPkdldEVsZW1lbnRWYWx1ZShhcF9lbnRyeSk7DQotCWlmIChwc3ViID09IE5VTEwpIHJldHVybiBGQUxTRTsNCi0JDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi12b2lkIENQREZTREtfQW5ub3Q6OkRyYXdCb3JkZXIoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgY29uc3QgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwNCi0JCQkJCQkgICBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zKQ0KLXsNCi0JQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOw0KLQltX3BBbm5vdC0+RHJhd0JvcmRlcihwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHBPcHRpb25zKTsgDQotfQ0KLQ0KLXZvaWQgQ1BERlNES19Bbm5vdDo6Q2xlYXJDYWNoZWRBUCgpDQotew0KLQlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7DQotCW1fcEFubm90LT5DbGVhckNhY2hlZEFQKCk7DQotfSAgICANCi0NCi12b2lkIENQREZTREtfQW5ub3Q6OlNldENvbnRlbnRzKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzQ29udGVudHMpDQotew0KLQlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7DQotCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOw0KLQkNCi0JaWYgKHNDb250ZW50cy5Jc0VtcHR5KCkpDQotCQltX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5SZW1vdmVBdCgiQ29udGVudHMiKTsNCi0JZWxzZQ0KLQkJbV9wQW5ub3QtPm1fcEFubm90RGljdC0+U2V0QXRTdHJpbmcoIkNvbnRlbnRzIiwgUERGX0VuY29kZVRleHQoc0NvbnRlbnRzKSk7DQotfQ0KLQ0KLUNGWF9XaWRlU3RyaW5nIENQREZTREtfQW5ub3Q6OkdldENvbnRlbnRzKCkgY29uc3QNCi17DQotCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsNCi0JQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7DQotCQ0KLQlyZXR1cm4gbV9wQW5ub3QtPm1fcEFubm90RGljdC0+R2V0VW5pY29kZVRleHQoIkNvbnRlbnRzIik7DQotfQ0KLQ0KLXZvaWQgQ1BERlNES19Bbm5vdDo6U2V0QW5ub3ROYW1lKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzTmFtZSkNCi17DQotCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsNCi0JQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7DQotCQ0KLQlpZiAoc05hbWUuSXNFbXB0eSgpKQ0KLQkJbV9wQW5ub3QtPm1fcEFubm90RGljdC0+UmVtb3ZlQXQoIk5NIik7DQotCWVsc2UNCi0JCW1fcEFubm90LT5tX3BBbm5vdERpY3QtPlNldEF0U3RyaW5nKCJOTSIsIFBERl9FbmNvZGVUZXh0KHNOYW1lKSk7DQotfQ0KLQ0KLUNGWF9XaWRlU3RyaW5nIENQREZTREtfQW5ub3Q6OkdldEFubm90TmFtZSgpIGNvbnN0DQotew0KLQlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7DQotCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOw0KLQkNCi0JcmV0dXJuIG1fcEFubm90LT5tX3BBbm5vdERpY3QtPkdldFVuaWNvZGVUZXh0KCJOTSIpOw0KLX0NCi0NCi12b2lkIENQREZTREtfQW5ub3Q6OlNldE1vZGlmaWVkRGF0ZShjb25zdCBGWF9TWVNURU1USU1FJiBzdCkNCi17DQotCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsNCi0JQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7DQotCQ0KLQlDUERGU0RLX0RhdGVUaW1lIGR0KHN0KTsNCi0JQ0ZYX0J5dGVTdHJpbmcgc3RyID0gZHQuVG9QREZEYXRlVGltZVN0cmluZygpOw0KLQkNCi0JaWYgKHN0ci5Jc0VtcHR5KCkpDQotCQltX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5SZW1vdmVBdCgiTSIpOw0KLQllbHNlDQotCQltX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5TZXRBdFN0cmluZygiTSIsIHN0cik7DQotfQ0KLQ0KLUZYX1NZU1RFTVRJTUUgQ1BERlNES19Bbm5vdDo6R2V0TW9kaWZpZWREYXRlKCkgY29uc3QNCi17DQotCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsNCi0JQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7DQotCQ0KLQlGWF9TWVNURU1USU1FIHN5c3RpbWU7CQ0KLQlDRlhfQnl0ZVN0cmluZyBzdHIgPSBtX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5HZXRTdHJpbmcoIk0iKTsNCi0JDQotIAlDUERGU0RLX0RhdGVUaW1lIGR0KHN0cik7DQotIAlkdC5Ub1N5c3RlbVRpbWUoc3lzdGltZSk7DQotCQ0KLQlyZXR1cm4gc3lzdGltZTsNCi19DQotDQotdm9pZCBDUERGU0RLX0Fubm90OjpTZXRGbGFncyhpbnQgbkZsYWdzKQ0KLXsNCi0JQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsNCi0JDQotCW1fcEFubm90LT5tX3BBbm5vdERpY3QtPlNldEF0SW50ZWdlcigiRiIsIG5GbGFncyk7DQotfQ0KLQ0KLWludCBDUERGU0RLX0Fubm90OjpHZXRGbGFncygpIGNvbnN0DQotew0KLQlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7DQotCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOw0KLQkNCi0JcmV0dXJuIG1fcEFubm90LT5tX3BBbm5vdERpY3QtPkdldEludGVnZXIoIkYiKTsNCi19DQotDQotdm9pZCBDUERGU0RLX0Fubm90OjpTZXRBcHBTdGF0ZShjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyKQ0KLXsNCi0JQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsNCi0NCi0JaWYgKHN0ci5Jc0VtcHR5KCkpDQotCQltX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5SZW1vdmVBdCgiQVMiKTsNCi0JZWxzZQ0KLQkJbV9wQW5ub3QtPm1fcEFubm90RGljdC0+U2V0QXRTdHJpbmcoIkFTIiwgc3RyKTsNCi19DQotDQotQ0ZYX0J5dGVTdHJpbmcgQ1BERlNES19Bbm5vdDo6R2V0QXBwU3RhdGUoKSBjb25zdA0KLXsNCi0JQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsNCi0NCi0JcmV0dXJuIG1fcEFubm90LT5tX3BBbm5vdERpY3QtPkdldFN0cmluZygiQVMiKTsNCi19DQotDQotdm9pZCBDUERGU0RLX0Fubm90OjpTZXRTdHJ1Y3RQYXJlbnQoaW50IGtleSkNCi17DQotCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsNCi0JQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7DQotCQ0KLQltX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5TZXRBdEludGVnZXIoIlN0cnVjdFBhcmVudCIsIGtleSk7DQotfQ0KLQ0KLWludAlDUERGU0RLX0Fubm90OjpHZXRTdHJ1Y3RQYXJlbnQoKSBjb25zdA0KLXsNCi0JQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsNCi0JDQotCXJldHVybiBtX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5HZXRJbnRlZ2VyKCJTdHJ1Y3RQYXJlbnQiKTsNCi19DQotDQotLy9ib3JkZXINCi12b2lkIENQREZTREtfQW5ub3Q6OlNldEJvcmRlcldpZHRoKGludCBuV2lkdGgpDQotew0KLQlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7DQotCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOw0KLQ0KLQlDUERGX0FycmF5KiBwQm9yZGVyID0gbV9wQW5ub3QtPm1fcEFubm90RGljdC0+R2V0QXJyYXkoIkJvcmRlciIpOw0KLQ0KLQlpZiAocEJvcmRlcikNCi0Jew0KLQkJcEJvcmRlci0+U2V0QXQoMiwgRlhfTkVXIENQREZfTnVtYmVyKG5XaWR0aCkpOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ1BERl9EaWN0aW9uYXJ5KiBwQlNEaWN0ID0gbV9wQW5ub3QtPm1fcEFubm90RGljdC0+R2V0RGljdCgiQlMiKTsNCi0NCi0JCWlmICghcEJTRGljdCkNCi0JCXsNCi0JCQlwQlNEaWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsNCi0JCQltX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5TZXRBdCgiQlMiLCBwQlNEaWN0KTsNCi0JCX0NCi0NCi0JCXBCU0RpY3QtPlNldEF0SW50ZWdlcigiVyIsIG5XaWR0aCk7DQotCX0NCi19DQotDQotaW50CUNQREZTREtfQW5ub3Q6OkdldEJvcmRlcldpZHRoKCkgY29uc3QNCi17DQotCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsNCi0JQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7DQotDQotCUNQREZfQXJyYXkqIHBCb3JkZXIgPSBtX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5HZXRBcnJheSgiQm9yZGVyIik7DQotDQotCWlmIChwQm9yZGVyKQ0KLQl7DQotCQlyZXR1cm4gcEJvcmRlci0+R2V0SW50ZWdlcigyKTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCUNQREZfRGljdGlvbmFyeSogcEJTRGljdCA9IG1fcEFubm90LT5tX3BBbm5vdERpY3QtPkdldERpY3QoIkJTIik7DQotDQotCQlpZiAocEJTRGljdCkNCi0JCXsNCi0JCQlyZXR1cm4gcEJTRGljdC0+R2V0SW50ZWdlcigiVyIsIDEpOw0KLQkJfQ0KLQl9DQotCXJldHVybiAxOw0KLX0NCi0NCi12b2lkIENQREZTREtfQW5ub3Q6OlNldEJvcmRlclN0eWxlKGludCBuU3R5bGUpDQotew0KLQlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7DQotCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOw0KLQ0KLQlDUERGX0RpY3Rpb25hcnkqIHBCU0RpY3QgPSBtX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5HZXREaWN0KCJCUyIpOw0KLQlpZiAoIXBCU0RpY3QpDQotCXsNCi0JCXBCU0RpY3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5Ow0KLQkJbV9wQW5ub3QtPm1fcEFubm90RGljdC0+U2V0QXQoIkJTIiwgcEJTRGljdCk7DQotCX0NCi0NCi0Jc3dpdGNoIChuU3R5bGUpDQotCXsNCi0JY2FzZSBCQlNfU09MSUQ6DQotCQlwQlNEaWN0LT5TZXRBdE5hbWUoIlMiLCAiUyIpOw0KLQkJYnJlYWs7DQotCWNhc2UgQkJTX0RBU0g6DQotCQlwQlNEaWN0LT5TZXRBdE5hbWUoIlMiLCAiRCIpOw0KLQkJYnJlYWs7DQotCWNhc2UgQkJTX0JFVkVMRUQ6DQotCQlwQlNEaWN0LT5TZXRBdE5hbWUoIlMiLCAiQiIpOw0KLQkJYnJlYWs7DQotCWNhc2UgQkJTX0lOU0VUOg0KLQkJcEJTRGljdC0+U2V0QXROYW1lKCJTIiwgIkkiKTsNCi0JCWJyZWFrOw0KLQljYXNlIEJCU19VTkRFUkxJTkU6DQotCQlwQlNEaWN0LT5TZXRBdE5hbWUoIlMiLCAiVSIpOw0KLQkJYnJlYWs7DQotCX0NCi19DQotDQotaW50CUNQREZTREtfQW5ub3Q6OkdldEJvcmRlclN0eWxlKCkgY29uc3QNCi17DQotCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsNCi0JQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7DQotDQotCUNQREZfRGljdGlvbmFyeSogcEJTRGljdCA9IG1fcEFubm90LT5tX3BBbm5vdERpY3QtPkdldERpY3QoIkJTIik7DQotCWlmIChwQlNEaWN0KQ0KLQl7DQotCQlDRlhfQnl0ZVN0cmluZyBzQm9yZGVyU3R5bGUgPSBwQlNEaWN0LT5HZXRTdHJpbmcoIlMiLCAiUyIpOw0KLQkJaWYgKHNCb3JkZXJTdHlsZSA9PSAiUyIpIHJldHVybiBCQlNfU09MSUQ7DQotCQlpZiAoc0JvcmRlclN0eWxlID09ICJEIikgcmV0dXJuIEJCU19EQVNIOw0KLQkJaWYgKHNCb3JkZXJTdHlsZSA9PSAiQiIpIHJldHVybiBCQlNfQkVWRUxFRDsNCi0JCWlmIChzQm9yZGVyU3R5bGUgPT0gIkkiKSByZXR1cm4gQkJTX0lOU0VUOw0KLQkJaWYgKHNCb3JkZXJTdHlsZSA9PSAiVSIpIHJldHVybiBCQlNfVU5ERVJMSU5FOw0KLQl9DQotDQotCUNQREZfQXJyYXkqIHBCb3JkZXIgPSBtX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5HZXRBcnJheSgiQm9yZGVyIik7DQotCWlmIChwQm9yZGVyKQ0KLQl7DQotCQlpZiAocEJvcmRlci0+R2V0Q291bnQoKSA+PSA0KSANCi0JCXsgDQotCQkJQ1BERl9BcnJheSAqcERQID0gcEJvcmRlci0+R2V0QXJyYXkoMyk7DQotCQkJaWYgKHBEUCAmJiBwRFAtPkdldENvdW50KCkgPiAwKQ0KLQkJCQlyZXR1cm4gQkJTX0RBU0g7DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIEJCU19TT0xJRDsNCi19DQotDQotdm9pZCBDUERGU0RLX0Fubm90OjpTZXRCb3JkZXJEYXNoKGNvbnN0IENGWF9JbnRBcnJheSYgYXJyYXkpDQotew0KLQlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7DQotCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOw0KLQ0KLQlDUERGX0RpY3Rpb25hcnkqIHBCU0RpY3QgPSBtX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5HZXREaWN0KCJCUyIpOw0KLQlpZiAoIXBCU0RpY3QpDQotCXsNCi0JCXBCU0RpY3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5Ow0KLQkJbV9wQW5ub3QtPm1fcEFubm90RGljdC0+U2V0QXQoIkJTIiwgcEJTRGljdCk7DQotCX0NCi0NCi0JQ1BERl9BcnJheSogcEFycmF5ID0gRlhfTkVXIENQREZfQXJyYXk7DQotCWZvciAoaW50IGk9MCxzej1hcnJheS5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJcEFycmF5LT5BZGRJbnRlZ2VyKGFycmF5W2ldKTsNCi0JfQ0KLQ0KLQlwQlNEaWN0LT5TZXRBdCgiRCIsIHBBcnJheSk7DQotfQ0KLQ0KLXZvaWQgQ1BERlNES19Bbm5vdDo6R2V0Qm9yZGVyRGFzaChDRlhfSW50QXJyYXkmIGFycmF5KSBjb25zdA0KLXsNCi0JQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsNCi0NCi0JQ1BERl9BcnJheSogcERhc2ggPSBOVUxMOw0KLQ0KLQlDUERGX0FycmF5KiBwQm9yZGVyID0gbV9wQW5ub3QtPm1fcEFubm90RGljdC0+R2V0QXJyYXkoIkJvcmRlciIpOw0KLQlpZiAocEJvcmRlcikNCi0Jew0KLQkJcERhc2ggPSBwQm9yZGVyLT5HZXRBcnJheSgzKTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCUNQREZfRGljdGlvbmFyeSogcEJTRGljdCA9IG1fcEFubm90LT5tX3BBbm5vdERpY3QtPkdldERpY3QoIkJTIik7DQotCQlpZiAocEJTRGljdCkNCi0JCXsNCi0JCQlwRGFzaCA9IHBCU0RpY3QtPkdldEFycmF5KCJEIik7DQotCQl9DQotCX0NCi0NCi0JaWYgKHBEYXNoKQ0KLQl7DQotCQlmb3IgKGludCBpPTAsc3o9cERhc2gtPkdldENvdW50KCk7IGk8c3o7IGkrKykNCi0JCXsNCi0JCQlhcnJheS5BZGQocERhc2gtPkdldEludGVnZXIoaSkpOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BERlNES19Bbm5vdDo6U2V0Q29sb3IoRlhfQ09MT1JSRUYgY29sb3IpDQotew0KLQlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7DQotCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOw0KLQ0KLQlDUERGX0FycmF5KiBwQXJyYXkgPSBGWF9ORVcgQ1BERl9BcnJheTsNCi0JcEFycmF5LT5BZGROdW1iZXIoKEZYX0ZMT0FUKUZYU1lTX0dldFJWYWx1ZShjb2xvcikgLyAyNTUuMGYpOw0KLQlwQXJyYXktPkFkZE51bWJlcigoRlhfRkxPQVQpRlhTWVNfR2V0R1ZhbHVlKGNvbG9yKSAvIDI1NS4wZik7DQotCXBBcnJheS0+QWRkTnVtYmVyKChGWF9GTE9BVClGWFNZU19HZXRCVmFsdWUoY29sb3IpIC8gMjU1LjBmKTsNCi0JbV9wQW5ub3QtPm1fcEFubm90RGljdC0+U2V0QXQoIkMiLCBwQXJyYXkpOw0KLX0NCi0NCi12b2lkIENQREZTREtfQW5ub3Q6OlJlbW92ZUNvbG9yKCkNCi17DQotCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsNCi0JQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7DQotDQotCW1fcEFubm90LT5tX3BBbm5vdERpY3QtPlJlbW92ZUF0KCJDIikgOyANCi19DQotDQotRlhfQk9PTCBDUERGU0RLX0Fubm90OjpHZXRDb2xvcihGWF9DT0xPUlJFRiYgY29sb3IpIGNvbnN0DQotew0KLQlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7DQotCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOw0KLQ0KLQlpZiAoQ1BERl9BcnJheSogcEVudHJ5ID0gbV9wQW5ub3QtPm1fcEFubm90RGljdC0+R2V0QXJyYXkoIkMiKSkJCQ0KLQl7DQotCQlpbnQgbkNvdW50ID0gcEVudHJ5LT5HZXRDb3VudCgpOw0KLQkJaWYgKG5Db3VudCA9PSAxKQ0KLQkJew0KLQkJCUZYX0ZMT0FUIGcgPSBwRW50cnktPkdldE51bWJlcigwKSAqIDI1NTsNCi0NCi0JCQljb2xvciA9IEZYU1lTX1JHQigoaW50KWcsIChpbnQpZywgKGludClnKTsNCi0NCi0JCQlyZXR1cm4gVFJVRTsNCi0JCX0NCi0JCWVsc2UgaWYgKG5Db3VudCA9PSAzKQ0KLQkJew0KLQkJCUZYX0ZMT0FUIHIgPSBwRW50cnktPkdldE51bWJlcigwKSAqIDI1NTsNCi0JCQlGWF9GTE9BVCBnID0gcEVudHJ5LT5HZXROdW1iZXIoMSkgKiAyNTU7DQotCQkJRlhfRkxPQVQgYiA9IHBFbnRyeS0+R2V0TnVtYmVyKDIpICogMjU1Ow0KLQ0KLQkJCWNvbG9yID0gRlhTWVNfUkdCKChpbnQpciwgKGludClnLCAoaW50KWIpOw0KLQ0KLQkJCXJldHVybiBUUlVFOw0KLQkJfQ0KLQkJZWxzZSBpZiAobkNvdW50ID09IDQpDQotCQl7DQotCQkJRlhfRkxPQVQgYyA9IHBFbnRyeS0+R2V0TnVtYmVyKDApOw0KLQkJCUZYX0ZMT0FUIG0gPSBwRW50cnktPkdldE51bWJlcigxKTsNCi0JCQlGWF9GTE9BVCB5ID0gcEVudHJ5LT5HZXROdW1iZXIoMik7DQotCQkJRlhfRkxPQVQgayA9IHBFbnRyeS0+R2V0TnVtYmVyKDMpOw0KLQ0KLQkJCUZYX0ZMT0FUIHIgPSAxLjBmIC0gRlhfTUlOKDEuMGYsIGMgKyBrKTsNCi0JCQlGWF9GTE9BVCBnID0gMS4wZiAtIEZYX01JTigxLjBmLCBtICsgayk7DQotCQkJRlhfRkxPQVQgYiA9IDEuMGYgLSBGWF9NSU4oMS4wZiwgeSArIGspOw0KLQ0KLQkJCWNvbG9yID0gRlhTWVNfUkdCKChpbnQpKHIgKiAyNTUpLCAoaW50KShnICogMjU1KSwgKGludCkoYiAqIDI1NSkpOw0KLQ0KLQkJCXJldHVybiBUUlVFOw0KLQkJfQ0KLQl9DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotDQotdm9pZCBDUERGU0RLX0Fubm90OjpXcml0ZUFwcGVhcmFuY2UoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNBUFR5cGUsIGNvbnN0IENQREZfUmVjdCYgcmNCQm94LCANCi0JCQkJCQkJCWNvbnN0IENQREZfTWF0cml4JiBtYXRyaXgsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzQ29udGVudHMsDQotCQkJCQkJCQljb25zdCBDRlhfQnl0ZVN0cmluZyYgc0FQU3RhdGUpDQotew0KLQlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7DQotCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOw0KLQkNCi0JQ1BERl9EaWN0aW9uYXJ5KiBwQVBEaWN0ID0gbV9wQW5ub3QtPm1fcEFubm90RGljdC0+R2V0RGljdCgiQVAiKTsNCi0JDQotCWlmICghcEFQRGljdCkgDQotCXsNCi0JCXBBUERpY3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5Ow0KLQkJbV9wQW5ub3QtPm1fcEFubm90RGljdC0+U2V0QXQoIkFQIiwgcEFQRGljdCk7DQotCX0NCi0JDQotCUNQREZfU3RyZWFtKiBwU3RyZWFtID0gTlVMTDsNCi0JQ1BERl9EaWN0aW9uYXJ5KiBwUGFyZW50RGljdCA9IE5VTEw7DQotCQ0KLQlpZiAoc0FQU3RhdGUuSXNFbXB0eSgpKQ0KLQl7DQotCQlwUGFyZW50RGljdCA9IHBBUERpY3Q7DQotCQlwU3RyZWFtID0gcEFQRGljdC0+R2V0U3RyZWFtKHNBUFR5cGUpOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ1BERl9EaWN0aW9uYXJ5KiBwQVBUeXBlRGljdCA9IHBBUERpY3QtPkdldERpY3Qoc0FQVHlwZSk7DQotCQlpZiAoIXBBUFR5cGVEaWN0KQ0KLQkJew0KLQkJCXBBUFR5cGVEaWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsNCi0JCQlwQVBEaWN0LT5TZXRBdChzQVBUeXBlLCBwQVBUeXBlRGljdCk7DQotCQl9DQotCQkNCi0JCXBQYXJlbnREaWN0ID0gcEFQVHlwZURpY3Q7DQotCQlwU3RyZWFtID0gcEFQVHlwZURpY3QtPkdldFN0cmVhbShzQVBTdGF0ZSk7DQotCX0NCi0JDQotCWlmICghcFN0cmVhbSkgDQotCXsNCi0JCUFTU0VSVChtX3BQYWdlVmlldyAhPSBOVUxMKTsNCi0JCUNQREZfRG9jdW1lbnQqIHBEb2MgPSBtX3BQYWdlVmlldy0+R2V0UERGRG9jdW1lbnQoKTsNCi0JCUFTU0VSVChwRG9jICE9IE5VTEwpOw0KLQkJDQotCQlwU3RyZWFtID0gRlhfTkVXIENQREZfU3RyZWFtKE5VTEwsIDAsIE5VTEwpOw0KLQkJRlhfSU5UMzIgb2JqbnVtID0gcERvYy0+QWRkSW5kaXJlY3RPYmplY3QocFN0cmVhbSk7DQotCQkvL3BBUERpY3QtPlNldEF0UmVmZXJlbmNlKHNBUFR5cGUsIHBEb2MsIG9iam51bSk7DQotCQlBU1NFUlQocFBhcmVudERpY3QgIT0gTlVMTCk7DQotCQlwUGFyZW50RGljdC0+U2V0QXRSZWZlcmVuY2Uoc0FQVHlwZSwgcERvYywgb2JqbnVtKTsNCi0JfQ0KLQkNCi0JQ1BERl9EaWN0aW9uYXJ5ICogcFN0cmVhbURpY3QgPSBwU3RyZWFtLT5HZXREaWN0KCk7DQotCQ0KLQlpZiAoIXBTdHJlYW1EaWN0KQ0KLQl7DQotCQlwU3RyZWFtRGljdCA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7DQotCQlwU3RyZWFtRGljdC0+U2V0QXROYW1lKCJUeXBlIiwgIlhPYmplY3QiKTsNCi0JCXBTdHJlYW1EaWN0LT5TZXRBdE5hbWUoIlN1YnR5cGUiLCAiRm9ybSIpOw0KLQkJcFN0cmVhbURpY3QtPlNldEF0SW50ZWdlcigiRm9ybVR5cGUiLCAxKTsNCi0JCXBTdHJlYW0tPkluaXRTdHJlYW0oTlVMTCwwLHBTdHJlYW1EaWN0KTsNCi0JfQ0KLQkNCi0JaWYgKHBTdHJlYW1EaWN0KQ0KLQl7DQotCQlwU3RyZWFtRGljdC0+U2V0QXRNYXRyaXgoIk1hdHJpeCIsbWF0cml4KTsJDQotCQlwU3RyZWFtRGljdC0+U2V0QXRSZWN0KCJCQm94IiwgcmNCQm94KTsJCQ0KLQl9DQotCQ0KLQlwU3RyZWFtLT5TZXREYXRhKChGWF9CWVRFKikoRlhfTFBDU1RSKXNDb250ZW50cywgc0NvbnRlbnRzLkdldExlbmd0aCgpLCBGQUxTRSwgRkFMU0UpOw0KLX0NCi0NCi0jZGVmaW5lIEJBX0FOTk9UX01JTldJRFRICQkJMQ0KLSNkZWZpbmUgQkFfQU5OT1RfTUlOSEVJR0hUCQkJMQ0KLQ0KLUZYX0ZMT0FUIENQREZTREtfQW5ub3Q6OkdldE1pbldpZHRoKCkgY29uc3QNCi17DQotCXJldHVybiBCQV9BTk5PVF9NSU5XSURUSDsNCi19DQotDQotRlhfRkxPQVQgQ1BERlNES19Bbm5vdDo6R2V0TWluSGVpZ2h0KCkgY29uc3QNCi17DQotCXJldHVybiBCQV9BTk5PVF9NSU5IRUlHSFQ7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BERlNES19Bbm5vdDo6Q3JlYXRlRm9ybUZpbGxlcigpDQotew0KLQlyZXR1cm4gVFJVRTsNCi19DQotRlhfQk9PTAlDUERGU0RLX0Fubm90OjpJc1Zpc2libGUoKSBjb25zdA0KLXsNCi0JaW50IG5GbGFncyA9IEdldEZsYWdzKCk7DQotCXJldHVybiAhKChuRmxhZ3MgJiBBTk5PVEZMQUdfSU5WSVNJQkxFKSB8fCAobkZsYWdzICYgQU5OT1RGTEFHX0hJRERFTikgfHwgKG5GbGFncyAmIEFOTk9URkxBR19OT1ZJRVcpKTsNCi19DQotDQotQ1BERl9BY3Rpb24gQ1BERlNES19Bbm5vdDo6R2V0QWN0aW9uKCkgY29uc3QNCi17DQotCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsNCi0JQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7DQotCQ0KLQlyZXR1cm4gbV9wQW5ub3QtPm1fcEFubm90RGljdC0+R2V0RGljdCgiQSIpOw0KLX0NCi0NCi12b2lkIENQREZTREtfQW5ub3Q6OlNldEFjdGlvbihjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uKQ0KLXsNCi0JQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsNCi0JDQotCUFTU0VSVChhY3Rpb24gIT0gTlVMTCk7DQotCQ0KLQlpZiAoKENQREZfQWN0aW9uJilhY3Rpb24gIT0gbV9wQW5ub3QtPm1fcEFubm90RGljdC0+R2V0RGljdCgiQSIpKQ0KLQl7DQotCQlDUERGX0RvY3VtZW50KiBwRG9jID0gbV9wUGFnZVZpZXctPkdldFBERkRvY3VtZW50KCk7DQotCQlBU1NFUlQocERvYyAhPSBOVUxMKTsNCi0JCQ0KLQkJaWYgKGFjdGlvbi5tX3BEaWN0ICYmIChhY3Rpb24ubV9wRGljdC0+R2V0T2JqTnVtKCkgPT0gMCkpDQotCQkJcERvYy0+QWRkSW5kaXJlY3RPYmplY3QoYWN0aW9uLm1fcERpY3QpOyANCi0JCW1fcEFubm90LT5tX3BBbm5vdERpY3QtPlNldEF0UmVmZXJlbmNlKCJBIiwgcERvYywgYWN0aW9uLm1fcERpY3QtPkdldE9iak51bSgpKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENQREZTREtfQW5ub3Q6OlJlbW92ZUFjdGlvbigpDQotew0KLQlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7DQotCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOw0KLQkNCi0JbV9wQW5ub3QtPm1fcEFubm90RGljdC0+UmVtb3ZlQXQoIkEiKTsNCi19DQotDQotQ1BERl9BQWN0aW9uIENQREZTREtfQW5ub3Q6OkdldEFBY3Rpb24oKSBjb25zdA0KLXsNCi0JQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsNCi0JDQotCXJldHVybiBtX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5HZXREaWN0KCJBQSIpOw0KLX0NCi0NCi12b2lkIENQREZTREtfQW5ub3Q6OlNldEFBY3Rpb24oY29uc3QgQ1BERl9BQWN0aW9uJiBhYSkNCi17DQotCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsNCi0JQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7DQotCUFTU0VSVChhYSAhPSBOVUxMKTsNCi0JDQotCWlmICgoQ1BERl9BQWN0aW9uJilhYSAhPSBtX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5HZXREaWN0KCJBQSIpKQ0KLQkJbV9wQW5ub3QtPm1fcEFubm90RGljdC0+U2V0QXQoIkFBIiwgKENQREZfQUFjdGlvbiYpYWEpOw0KLX0NCi0NCi12b2lkIENQREZTREtfQW5ub3Q6OlJlbW92ZUFBY3Rpb24oKQ0KLXsNCi0JQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsNCi0JDQotCW1fcEFubm90LT5tX3BBbm5vdERpY3QtPlJlbW92ZUF0KCJBQSIpOw0KLX0NCi0NCi1DUERGX0FjdGlvbglDUERGU0RLX0Fubm90OjpHZXRBQWN0aW9uKENQREZfQUFjdGlvbjo6QUFjdGlvblR5cGUgZUFBVCkNCi17DQotCUNQREZfQUFjdGlvbiBBQWN0aW9uID0gR2V0QUFjdGlvbigpOw0KLQkNCi0JaWYgKEFBY3Rpb24uQWN0aW9uRXhpc3QoZUFBVCkpDQotCXsNCi0JCXJldHVybiBBQWN0aW9uLkdldEFjdGlvbihlQUFUKTsNCi0JfQ0KLQllbHNlIGlmIChlQUFUID09IENQREZfQUFjdGlvbjo6QnV0dG9uVXApDQotCXsNCi0JCXJldHVybiBHZXRBY3Rpb24oKTsNCi0JfQ0KLQkNCi0JcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLXZvaWQgIENQREZTREtfQW5ub3Q6OkFubm90X09uRHJhdyhDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLCBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zKQ0KLXsNCi0JDQotCW1fcEFubm90LT5HZXRBUEZvcm0obV9wUGFnZVZpZXctPkdldFBERlBhZ2UoKSwgQ1BERl9Bbm5vdDo6Tm9ybWFsKTsNCi0JbV9wQW5ub3QtPkRyYXdBcHBlYXJhbmNlKG1fcFBhZ2VWaWV3LT5HZXRQREZQYWdlKCksIHBEZXZpY2UsIHBVc2VyMkRldmljZSwgQ1BERl9Bbm5vdDo6Tm9ybWFsLCBOVUxMKTsNCi0NCi0JcmV0dXJuIDsNCi19DQotDQotQ1BERl9QYWdlKiBDUERGU0RLX0Fubm90OjpHZXRQREZQYWdlKCkNCi17DQotCWlmKG1fcFBhZ2VWaWV3KQ0KLQkJcmV0dXJuIG1fcFBhZ2VWaWV3LT5HZXRQREZQYWdlKCk7DQotCXJldHVybiBOVUxMOw0KLX0NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX2RlZmluZS5oIgorI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19tZ3IuaCIKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfYmFzZWFubm90LmgiCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCQkJCQkJCQlDUERGU0RLX0RhdGVUaW1lCQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ludCBfZ0FmeEdldFRpbWVab25lSW5TZWNvbmRzKEZYX0NIQVIgdHpob3VyLCBGWF9CWVRFIHR6bWludXRlKQoreworCXJldHVybiAoaW50KXR6aG91ciAqIDM2MDAgKyAoaW50KXR6bWludXRlICogKHR6aG91ciA+PSAwID8gNjAgOiAtNjApOworfQorCitGWF9CT09MIF9nQWZ4SXNMZWFwWWVhcihGWF9TSE9SVCB5ZWFyKQoreworCXJldHVybiAoKHllYXIgJSA0MDAgPT0gMCkgfHwgKCh5ZWFyICUgNCA9PSAwKSAmJiAoeWVhciAlIDEwMCAhPSAwKSkpOworfQorCitGWF9XT1JEIF9nQWZ4R2V0WWVhckRheXMoRlhfU0hPUlQgeWVhcikKK3sKKwlyZXR1cm4gKF9nQWZ4SXNMZWFwWWVhcih5ZWFyKSA9PSBUUlVFID8gMzY2IDogMzY1KTsKK30KKworRlhfQllURSBfZ0FmeEdldE1vbnRoRGF5cyhGWF9TSE9SVCB5ZWFyLCBGWF9CWVRFIG1vbnRoKQoreworCUZYX0JZVEUJbURheXM7CisJc3dpdGNoIChtb250aCkKKwl7CisJY2FzZSAxOgorCWNhc2UgMzoKKwljYXNlIDU6CisJY2FzZSA3OgorCWNhc2UgODoKKwljYXNlIDEwOgorCWNhc2UgMTI6CisJCW1EYXlzID0gMzE7CisJCWJyZWFrOworCisJY2FzZSA0OgorCWNhc2UgNjoKKwljYXNlIDk6CisJY2FzZSAxMToKKwkJbURheXMgPSAzMDsKKwkJYnJlYWs7CisKKwljYXNlIDI6CisJCWlmIChfZ0FmeElzTGVhcFllYXIoeWVhcikgPT0gVFJVRSkKKwkJCW1EYXlzID0gMjk7CisJCWVsc2UKKwkJCW1EYXlzID0gMjg7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJbURheXMgPSAwOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbURheXM7Cit9CisKK0NQREZTREtfRGF0ZVRpbWU6OkNQREZTREtfRGF0ZVRpbWUoKQoreworCVJlc2V0RGF0ZVRpbWUoKTsKK30KKworQ1BERlNES19EYXRlVGltZTo6Q1BERlNES19EYXRlVGltZShjb25zdCBDRlhfQnl0ZVN0cmluZyYgZHRTdHIpCit7CisJUmVzZXREYXRlVGltZSgpOworCisJRnJvbVBERkRhdGVUaW1lU3RyaW5nKGR0U3RyKTsKK30KKworQ1BERlNES19EYXRlVGltZTo6Q1BERlNES19EYXRlVGltZShjb25zdCBDUERGU0RLX0RhdGVUaW1lJiBkYXRldGltZSkKK3sKKwlvcGVyYXRvciA9IChkYXRldGltZSk7Cit9CisKK0NQREZTREtfRGF0ZVRpbWU6OkNQREZTREtfRGF0ZVRpbWUoY29uc3QgRlhfU1lTVEVNVElNRSYgc3QpCit7CisJb3BlcmF0b3IgPSAoc3QpIDsKK30KKworCit2b2lkIENQREZTREtfRGF0ZVRpbWU6OlJlc2V0RGF0ZVRpbWUoKQoreworCXR6c2V0KCk7CisKKwl0aW1lX3QJY3VyVGltZTsKKwl0aW1lKCZjdXJUaW1lKTsKKwlzdHJ1Y3QgdG0qIG5ld3RpbWU7CisJLy9uZXd0aW1lID0gZ210aW1lKCZjdXJUaW1lKTsKKwluZXd0aW1lID0gbG9jYWx0aW1lKCZjdXJUaW1lKTsKKworCWR0LnllYXIgPSBuZXd0aW1lLT50bV95ZWFyICsgMTkwMDsKKwlkdC5tb250aCA9IG5ld3RpbWUtPnRtX21vbiArIDE7CisJZHQuZGF5ID0gbmV3dGltZS0+dG1fbWRheTsKKwlkdC5ob3VyID0gbmV3dGltZS0+dG1faG91cjsKKwlkdC5taW51dGUgPSBuZXd0aW1lLT50bV9taW47CisJZHQuc2Vjb25kID0gbmV3dGltZS0+dG1fc2VjOworLy8gCWR0LnR6SG91ciA9IF90aW1lem9uZSAvIDM2MDAgKiAtMTsKKy8vIAlkdC50ek1pbnV0ZSA9IChhYnMoX3RpbWV6b25lKSAlIDM2MDApIC8gNjA7Cit9CisKK0NQREZTREtfRGF0ZVRpbWUmIENQREZTREtfRGF0ZVRpbWU6Om9wZXJhdG9yID0gKGNvbnN0IENQREZTREtfRGF0ZVRpbWUmIGRhdGV0aW1lKQoreworCUZYU1lTX21lbWNweSgmZHQsICZkYXRldGltZS5kdCwgc2l6ZW9mKEZYX0RBVEVUSU1FKSk7CisJcmV0dXJuICp0aGlzOworfQorCitDUERGU0RLX0RhdGVUaW1lJiBDUERGU0RLX0RhdGVUaW1lOjpvcGVyYXRvciA9IChjb25zdCBGWF9TWVNURU1USU1FJiBzdCkKK3sKKwl0enNldCgpOworCisJZHQueWVhciA9IChGWF9TSE9SVClzdC53WWVhcjsKKwlkdC5tb250aCA9IChGWF9CWVRFKXN0LndNb250aDsKKwlkdC5kYXkgPSAoRlhfQllURSlzdC53RGF5OworCWR0LmhvdXIgPSAoRlhfQllURSlzdC53SG91cjsKKwlkdC5taW51dGUgPSAoRlhfQllURSlzdC53TWludXRlOworCWR0LnNlY29uZCA9IChGWF9CWVRFKXN0LndTZWNvbmQ7CisvLyAJZHQudHpIb3VyID0gX3RpbWV6b25lIC8gMzYwMCAqIC0xOworLy8gCWR0LnR6TWludXRlID0gKGFicyhfdGltZXpvbmUpICUgMzYwMCkgLyA2MDsKKwlyZXR1cm4gKnRoaXM7Cit9CisKK0ZYX0JPT0wgQ1BERlNES19EYXRlVGltZTo6b3BlcmF0b3IgPT0gKENQREZTREtfRGF0ZVRpbWUmIGRhdGV0aW1lKQoreworCXJldHVybiAoRlhTWVNfbWVtY21wKCZkdCwgJmRhdGV0aW1lLmR0LCBzaXplb2YoRlhfREFURVRJTUUpKSA9PSAwKTsKK30KKworRlhfQk9PTCBDUERGU0RLX0RhdGVUaW1lOjpvcGVyYXRvciAhPSAoQ1BERlNES19EYXRlVGltZSYgZGF0ZXRpbWUpCit7CisJcmV0dXJuIChGWFNZU19tZW1jbXAoJmR0LCAmZGF0ZXRpbWUuZHQsIHNpemVvZihGWF9EQVRFVElNRSkpICE9IDApOworfQorCitGWF9CT09MIENQREZTREtfRGF0ZVRpbWU6Om9wZXJhdG9yID4gKENQREZTREtfRGF0ZVRpbWUmIGRhdGV0aW1lKQoreworCUNQREZTREtfRGF0ZVRpbWUgZHQxID0gVG9HTVQoKTsKKwlDUERGU0RLX0RhdGVUaW1lIGR0MiA9IGRhdGV0aW1lLlRvR01UKCk7CisJaW50IGQxID0gKCgoaW50KWR0MS5kdC55ZWFyKSA8PCAxNikgfCAoKChpbnQpZHQxLmR0Lm1vbnRoKSA8PCA4KSB8IChpbnQpZHQxLmR0LmRheTsKKwlpbnQgZDIgPSAoKChpbnQpZHQxLmR0LmhvdXIpIDw8IDE2KSB8ICgoKGludClkdDEuZHQubWludXRlKSA8PCA4KSB8IChpbnQpZHQxLmR0LnNlY29uZDsKKwlpbnQgZDMgPSAoKChpbnQpZHQyLmR0LnllYXIpIDw8IDE2KSB8ICgoKGludClkdDIuZHQubW9udGgpIDw8IDgpIHwgKGludClkdDIuZHQuZGF5OworCWludCBkNCA9ICgoKGludClkdDIuZHQuaG91cikgPDwgMTYpIHwgKCgoaW50KWR0Mi5kdC5taW51dGUpIDw8IDgpIHwgKGludClkdDIuZHQuc2Vjb25kOworCisJaWYgKGQxID4gZDMpIHJldHVybiBUUlVFOworCWlmIChkMiA+IGQ0KSByZXR1cm4gVFJVRTsKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wgQ1BERlNES19EYXRlVGltZTo6b3BlcmF0b3IgPj0gKENQREZTREtfRGF0ZVRpbWUmIGRhdGV0aW1lKQoreworCUNQREZTREtfRGF0ZVRpbWUgZHQxID0gVG9HTVQoKTsKKwlDUERGU0RLX0RhdGVUaW1lIGR0MiA9IGRhdGV0aW1lLlRvR01UKCk7CisJaW50IGQxID0gKCgoaW50KWR0MS5kdC55ZWFyKSA8PCAxNikgfCAoKChpbnQpZHQxLmR0Lm1vbnRoKSA8PCA4KSB8IChpbnQpZHQxLmR0LmRheTsKKwlpbnQgZDIgPSAoKChpbnQpZHQxLmR0LmhvdXIpIDw8IDE2KSB8ICgoKGludClkdDEuZHQubWludXRlKSA8PCA4KSB8IChpbnQpZHQxLmR0LnNlY29uZDsKKwlpbnQgZDMgPSAoKChpbnQpZHQyLmR0LnllYXIpIDw8IDE2KSB8ICgoKGludClkdDIuZHQubW9udGgpIDw8IDgpIHwgKGludClkdDIuZHQuZGF5OworCWludCBkNCA9ICgoKGludClkdDIuZHQuaG91cikgPDwgMTYpIHwgKCgoaW50KWR0Mi5kdC5taW51dGUpIDw8IDgpIHwgKGludClkdDIuZHQuc2Vjb25kOworCisJaWYgKGQxID49IGQzKSByZXR1cm4gVFJVRTsKKwlpZiAoZDIgPj0gZDQpIHJldHVybiBUUlVFOworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBDUERGU0RLX0RhdGVUaW1lOjpvcGVyYXRvciA8IChDUERGU0RLX0RhdGVUaW1lJiBkYXRldGltZSkKK3sKKwlDUERGU0RLX0RhdGVUaW1lIGR0MSA9IFRvR01UKCk7CisJQ1BERlNES19EYXRlVGltZSBkdDIgPSBkYXRldGltZS5Ub0dNVCgpOworCWludCBkMSA9ICgoKGludClkdDEuZHQueWVhcikgPDwgMTYpIHwgKCgoaW50KWR0MS5kdC5tb250aCkgPDwgOCkgfCAoaW50KWR0MS5kdC5kYXk7CisJaW50IGQyID0gKCgoaW50KWR0MS5kdC5ob3VyKSA8PCAxNikgfCAoKChpbnQpZHQxLmR0Lm1pbnV0ZSkgPDwgOCkgfCAoaW50KWR0MS5kdC5zZWNvbmQ7CisJaW50IGQzID0gKCgoaW50KWR0Mi5kdC55ZWFyKSA8PCAxNikgfCAoKChpbnQpZHQyLmR0Lm1vbnRoKSA8PCA4KSB8IChpbnQpZHQyLmR0LmRheTsKKwlpbnQgZDQgPSAoKChpbnQpZHQyLmR0LmhvdXIpIDw8IDE2KSB8ICgoKGludClkdDIuZHQubWludXRlKSA8PCA4KSB8IChpbnQpZHQyLmR0LnNlY29uZDsKKworCWlmIChkMSA8IGQzKSByZXR1cm4gVFJVRTsKKwlpZiAoZDIgPCBkNCkgcmV0dXJuIFRSVUU7CisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIENQREZTREtfRGF0ZVRpbWU6Om9wZXJhdG9yIDw9IChDUERGU0RLX0RhdGVUaW1lJiBkYXRldGltZSkKK3sKKwlDUERGU0RLX0RhdGVUaW1lIGR0MSA9IFRvR01UKCk7CisJQ1BERlNES19EYXRlVGltZSBkdDIgPSBkYXRldGltZS5Ub0dNVCgpOworCWludCBkMSA9ICgoKGludClkdDEuZHQueWVhcikgPDwgMTYpIHwgKCgoaW50KWR0MS5kdC5tb250aCkgPDwgOCkgfCAoaW50KWR0MS5kdC5kYXk7CisJaW50IGQyID0gKCgoaW50KWR0MS5kdC5ob3VyKSA8PCAxNikgfCAoKChpbnQpZHQxLmR0Lm1pbnV0ZSkgPDwgOCkgfCAoaW50KWR0MS5kdC5zZWNvbmQ7CisJaW50IGQzID0gKCgoaW50KWR0Mi5kdC55ZWFyKSA8PCAxNikgfCAoKChpbnQpZHQyLmR0Lm1vbnRoKSA8PCA4KSB8IChpbnQpZHQyLmR0LmRheTsKKwlpbnQgZDQgPSAoKChpbnQpZHQyLmR0LmhvdXIpIDw8IDE2KSB8ICgoKGludClkdDIuZHQubWludXRlKSA8PCA4KSB8IChpbnQpZHQyLmR0LnNlY29uZDsKKworCWlmIChkMSA8PSBkMykgcmV0dXJuIFRSVUU7CisJaWYgKGQyIDw9IGQ0KSByZXR1cm4gVFJVRTsKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0NQREZTREtfRGF0ZVRpbWU6Om9wZXJhdG9yIHRpbWVfdCgpCit7CisJc3RydWN0IHRtIG5ld3RpbWU7CisKKwluZXd0aW1lLnRtX3llYXIgPSBkdC55ZWFyIC0gMTkwMDsKKwluZXd0aW1lLnRtX21vbiA9IGR0Lm1vbnRoIC0gMTsKKwluZXd0aW1lLnRtX21kYXkgPSBkdC5kYXk7CisJbmV3dGltZS50bV9ob3VyID0gZHQuaG91cjsKKwluZXd0aW1lLnRtX21pbiA9IGR0Lm1pbnV0ZTsKKwluZXd0aW1lLnRtX3NlYyA9IGR0LnNlY29uZDsKKworCXJldHVybiBta3RpbWUoJm5ld3RpbWUpOworfQorCitDUERGU0RLX0RhdGVUaW1lJiBDUERGU0RLX0RhdGVUaW1lOjpGcm9tUERGRGF0ZVRpbWVTdHJpbmcoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIGR0U3RyKQoreworCWludCBzdHJMZW5ndGggPSBkdFN0ci5HZXRMZW5ndGgoKTsKKwlpZiAoc3RyTGVuZ3RoID4gMCkKKwl7CisJCWludCBpID0gMDsKKwkJaW50IGosIGs7CisJCUZYX0NIQVIgY2g7CisJCXdoaWxlIChpIDwgc3RyTGVuZ3RoKQorCQl7CisJCQljaCA9IGR0U3RyW2ldOworCQkJaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIGJyZWFrOworCQkJaSArKzsKKwkJfQorCQlpZiAoaSA+PSBzdHJMZW5ndGgpIHJldHVybiAqdGhpczsKKworCQlqID0gMDsKKwkJayA9IDA7CisJCXdoaWxlIChpIDwgc3RyTGVuZ3RoICYmIGogPCA0KQorCQl7CisJCQljaCA9IGR0U3RyW2ldOworCQkJayA9IGsgKiAxMCArIGNoIC0gJzAnOworCQkJaiArKzsKKwkJCWlmIChjaCA8ICcwJyB8fCBjaCA+ICc5JykgYnJlYWs7CisJCQlpICsrOworCQl9CisJCWR0LnllYXIgPSAoRlhfU0hPUlQpazsKKwkJaWYgKGkgPj0gc3RyTGVuZ3RoIHx8IGogPCA0KSByZXR1cm4gKnRoaXM7CisKKwkJaiA9IDA7CisJCWsgPSAwOworCQl3aGlsZSAoaSA8IHN0ckxlbmd0aCAmJiBqIDwgMikKKwkJeworCQkJY2ggPSBkdFN0cltpXTsKKwkJCWsgPSBrICogMTAgKyBjaCAtICcwJzsKKwkJCWogKys7CisJCQlpZiAoY2ggPCAnMCcgfHwgY2ggPiAnOScpIGJyZWFrOworCQkJaSArKzsKKwkJfQorCQlkdC5tb250aCA9IChGWF9CWVRFKWs7CisJCWlmIChpID49IHN0ckxlbmd0aCB8fCBqIDwgMikgcmV0dXJuICp0aGlzOworCisJCWogPSAwOworCQlrID0gMDsKKwkJd2hpbGUgKGkgPCBzdHJMZW5ndGggJiYgaiA8IDIpCisJCXsKKwkJCWNoID0gZHRTdHJbaV07CisJCQlrID0gayAqIDEwICsgY2ggLSAnMCc7CisJCQlqICsrOworCQkJaWYgKGNoIDwgJzAnIHx8IGNoID4gJzknKSBicmVhazsKKwkJCWkgKys7CisJCX0KKwkJZHQuZGF5ID0gKEZYX0JZVEUpazsKKwkJaWYgKGkgPj0gc3RyTGVuZ3RoIHx8IGogPCAyKSByZXR1cm4gKnRoaXM7CisKKwkJaiA9IDA7CisJCWsgPSAwOworCQl3aGlsZSAoaSA8IHN0ckxlbmd0aCAmJiBqIDwgMikKKwkJeworCQkJY2ggPSBkdFN0cltpXTsKKwkJCWsgPSBrICogMTAgKyBjaCAtICcwJzsKKwkJCWogKys7CisJCQlpZiAoY2ggPCAnMCcgfHwgY2ggPiAnOScpIGJyZWFrOworCQkJaSArKzsKKwkJfQorCQlkdC5ob3VyID0gKEZYX0JZVEUpazsKKwkJaWYgKGkgPj0gc3RyTGVuZ3RoIHx8IGogPCAyKSByZXR1cm4gKnRoaXM7CisKKwkJaiA9IDA7CisJCWsgPSAwOworCQl3aGlsZSAoaSA8IHN0ckxlbmd0aCAmJiBqIDwgMikKKwkJeworCQkJY2ggPSBkdFN0cltpXTsKKwkJCWsgPSBrICogMTAgKyBjaCAtICcwJzsKKwkJCWogKys7CisJCQlpZiAoY2ggPCAnMCcgfHwgY2ggPiAnOScpIGJyZWFrOworCQkJaSArKzsKKwkJfQorCQlkdC5taW51dGUgPSAoRlhfQllURSlrOworCQlpZiAoaSA+PSBzdHJMZW5ndGggfHwgaiA8IDIpIHJldHVybiAqdGhpczsKKworCQlqID0gMDsKKwkJayA9IDA7CisJCXdoaWxlIChpIDwgc3RyTGVuZ3RoICYmIGogPCAyKQorCQl7CisJCQljaCA9IGR0U3RyW2ldOworCQkJayA9IGsgKiAxMCArIGNoIC0gJzAnOworCQkJaiArKzsKKwkJCWlmIChjaCA8ICcwJyB8fCBjaCA+ICc5JykgYnJlYWs7CisJCQlpICsrOworCQl9CisJCWR0LnNlY29uZCA9IChGWF9CWVRFKWs7CisJCWlmIChpID49IHN0ckxlbmd0aCB8fCBqIDwgMikgcmV0dXJuICp0aGlzOworCisJCWNoID0gZHRTdHJbaSArK107CisJCWlmIChjaCAhPSAnLScgJiYgY2ggIT0gJysnKSByZXR1cm4gKnRoaXM7CisJCWlmIChjaCA9PSAnLScpCisJCQlkdC50ekhvdXIgPSAtMTsKKwkJZWxzZQorCQkJZHQudHpIb3VyID0gMTsKKwkJaiA9IDA7CisJCWsgPSAwOworCQl3aGlsZSAoaSA8IHN0ckxlbmd0aCAmJiBqIDwgMikKKwkJeworCQkJY2ggPSBkdFN0cltpXTsKKwkJCWsgPSBrICogMTAgKyBjaCAtICcwJzsKKwkJCWogKys7CisJCQlpZiAoY2ggPCAnMCcgfHwgY2ggPiAnOScpIGJyZWFrOworCQkJaSArKzsKKwkJfQorCQlkdC50ekhvdXIgKj0gKEZYX0NIQVIpazsKKwkJaWYgKGkgPj0gc3RyTGVuZ3RoIHx8IGogPCAyKSByZXR1cm4gKnRoaXM7CisKKwkJY2ggPSBkdFN0cltpICsrXTsKKwkJaWYgKGNoICE9ICdcJycpIHJldHVybiAqdGhpczsKKwkJaiA9IDA7CisJCWsgPSAwOworCQl3aGlsZSAoaSA8IHN0ckxlbmd0aCAmJiBqIDwgMikKKwkJeworCQkJY2ggPSBkdFN0cltpXTsKKwkJCWsgPSBrICogMTAgKyBjaCAtICcwJzsKKwkJCWogKys7CisJCQlpZiAoY2ggPCAnMCcgfHwgY2ggPiAnOScpIGJyZWFrOworCQkJaSArKzsKKwkJfQorCQlkdC50ek1pbnV0ZSA9IChGWF9CWVRFKWs7CisJCWlmIChpID49IHN0ckxlbmd0aCB8fCBqIDwgMikgcmV0dXJuICp0aGlzOworCX0KKworCXJldHVybiAgKnRoaXM7Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQREZTREtfRGF0ZVRpbWU6OlRvQ29tbW9uRGF0ZVRpbWVTdHJpbmcoKQoreworCUNGWF9CeXRlU3RyaW5nIHN0cjE7CisJc3RyMS5Gb3JtYXQoIiUwNGQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkICIsIGR0LnllYXIsIGR0Lm1vbnRoLCBkdC5kYXksIGR0LmhvdXIsIGR0Lm1pbnV0ZSwgZHQuc2Vjb25kKTsKKwlpZiAoZHQudHpIb3VyIDwgMCkKKwkJc3RyMSArPSAiLSI7CisJZWxzZQorCQlzdHIxICs9ICIrIjsKKwlDRlhfQnl0ZVN0cmluZyBzdHIyOworCXN0cjIuRm9ybWF0KCIlMDJkOiUwMmQiLCBhYnMoZHQudHpIb3VyKSwgZHQudHpNaW51dGUpOworCXJldHVybiBzdHIxICsgc3RyMjsKK30KKworQ0ZYX0J5dGVTdHJpbmcgQ1BERlNES19EYXRlVGltZTo6VG9QREZEYXRlVGltZVN0cmluZygpCit7CisJQ0ZYX0J5dGVTdHJpbmcgZHRTdHI7CisJY2hhciB0ZW1wU3RyWzMyXTsKKwlzcHJpbnRmKHRlbXBTdHIsICJEOiUwNGQlMDJkJTAyZCUwMmQlMDJkJTAyZCIsIGR0LnllYXIsIGR0Lm1vbnRoLCBkdC5kYXksIGR0LmhvdXIsIGR0Lm1pbnV0ZSwgZHQuc2Vjb25kKTsKKwlkdFN0ciA9IENGWF9CeXRlU3RyaW5nKHRlbXBTdHIpOworCWlmIChkdC50ekhvdXIgPCAwKQorCQlkdFN0ciArPSBDRlhfQnl0ZVN0cmluZygiLSIpOworCWVsc2UKKwkJZHRTdHIgKz0gQ0ZYX0J5dGVTdHJpbmcoIisiKTsKKwlzcHJpbnRmKHRlbXBTdHIsICIlMDJkJyUwMmQnIiwgYWJzKGR0LnR6SG91ciksIGR0LnR6TWludXRlKTsKKwlkdFN0ciArPSBDRlhfQnl0ZVN0cmluZyh0ZW1wU3RyKTsKKwlyZXR1cm4gZHRTdHI7Cit9CisKK3ZvaWQgQ1BERlNES19EYXRlVGltZTo6VG9TeXN0ZW1UaW1lKEZYX1NZU1RFTVRJTUUmIHN0KQoreworCUNQREZTREtfRGF0ZVRpbWUgZHQgPSAqdGhpczsKKwl0aW1lX3QgdCA9ICh0aW1lX3QpZHQ7CisJc3RydWN0IHRtKiBwVGltZSA9IGxvY2FsdGltZSgmdCk7CisJaWYocFRpbWUpeyAKKwkJc3Qud1llYXIgPSAoRlhfV09SRClwVGltZS0+dG1feWVhciArIDE5MDA7CisJCXN0LndNb250aCA9IChGWF9XT1JEKXBUaW1lLT50bV9tb24gKyAxOworCQlzdC53RGF5ID0gKEZYX1dPUkQpcFRpbWUtPnRtX21kYXk7CisJCXN0LndEYXlPZldlZWsgPSAoRlhfV09SRClwVGltZS0+dG1fd2RheTsKKwkJc3Qud0hvdXIgPSAoRlhfV09SRClwVGltZS0+dG1faG91cjsKKwkJc3Qud01pbnV0ZSA9IChGWF9XT1JEKXBUaW1lLT50bV9taW47CisJCXN0LndTZWNvbmQgPSAoRlhfV09SRClwVGltZS0+dG1fc2VjOworCQlzdC53TWlsbGlzZWNvbmRzID0gMDsKKwl9Cit9CisKK0NQREZTREtfRGF0ZVRpbWUgQ1BERlNES19EYXRlVGltZTo6VG9HTVQoKQoreworCUNQREZTREtfRGF0ZVRpbWUgZHQgPSAqdGhpczsKKwlkdC5BZGRTZWNvbmRzKC1fZ0FmeEdldFRpbWVab25lSW5TZWNvbmRzKGR0LmR0LnR6SG91ciwgZHQuZHQudHpNaW51dGUpKTsKKwlkdC5kdC50ekhvdXIgPSAwOworCWR0LmR0LnR6TWludXRlID0gMDsKKwlyZXR1cm4gZHQ7Cit9CisKK0NQREZTREtfRGF0ZVRpbWUmIENQREZTREtfRGF0ZVRpbWU6OkFkZERheXMoc2hvcnQgZGF5cykKK3sKKwlpZiAoZGF5cyA9PSAwKSByZXR1cm4gKnRoaXM7CisKKwlGWF9TSE9SVAl5ID0gZHQueWVhciwgeXk7CisJRlhfQllURQkJbSA9IGR0Lm1vbnRoOworCUZYX0JZVEUJCWQgPSBkdC5kYXk7CisJaW50CQkJbWRheXMsIHlkYXlzLCBsZGF5czsKKworCWxkYXlzID0gZGF5czsKKwlpZiAobGRheXMgPiAwKQorCXsKKwkJeXkgPSB5OworCQlpZiAoKChGWF9XT1JEKW0gKiAxMDAgKyBkKSA+IDMwMCkgeXkgKys7CisJCXlkYXlzID0gX2dBZnhHZXRZZWFyRGF5cyh5eSk7CisJCXdoaWxlIChsZGF5cyA+PSB5ZGF5cykKKwkJeworCQkJeSArKzsKKwkJCWxkYXlzIC09IHlkYXlzOworCQkJeXkgKys7CisJCQltZGF5cyA9IF9nQWZ4R2V0TW9udGhEYXlzKHksIG0pOworCQkJaWYgKGQgPiBtZGF5cykKKwkJCXsKKwkJCQltICsrOworCQkJCWQgLT0gbWRheXM7CisJCQl9CisJCQl5ZGF5cyA9IF9nQWZ4R2V0WWVhckRheXMoeXkpOworCQl9CisJCW1kYXlzID0gX2dBZnhHZXRNb250aERheXMoeSwgbSkgLSBkICsgMTsKKwkJd2hpbGUgKGxkYXlzID49IG1kYXlzKQorCQl7CisJCQlsZGF5cyAtPSBtZGF5czsKKwkJCW0gKys7CisJCQlkID0gMTsKKwkJCW1kYXlzID0gX2dBZnhHZXRNb250aERheXMoeSwgbSk7CisJCX0KKwkJZCArPSBsZGF5czsKKwl9CisJZWxzZQorCXsKKwkJbGRheXMgKj0gLTE7CisJCXl5ID0geTsKKwkJaWYgKCgoRlhfV09SRCltICogMTAwICsgZCkgPCAzMDApIHl5IC0tOworCQl5ZGF5cyA9IF9nQWZ4R2V0WWVhckRheXMoeXkpOworCQl3aGlsZSAobGRheXMgPj0geWRheXMpCisJCXsKKwkJCXkgLS07CisJCQlsZGF5cyAtPSB5ZGF5czsKKwkJCXl5IC0tOworCQkJbWRheXMgPSBfZ0FmeEdldE1vbnRoRGF5cyh5LCBtKTsKKwkJCWlmIChkID4gbWRheXMpCisJCQl7CisJCQkJbSArKzsKKwkJCQlkIC09IG1kYXlzOworCQkJfQorCQkJeWRheXMgPSBfZ0FmeEdldFllYXJEYXlzKHl5KTsKKwkJfQorCQl3aGlsZSAobGRheXMgPj0gZCkKKwkJeworCQkJbGRheXMgLT0gZDsKKwkJCW0gLS07CisJCQltZGF5cyA9IF9nQWZ4R2V0TW9udGhEYXlzKHksIG0pOworCQkJZCA9IG1kYXlzOworCQl9CisJCWQgLT0gbGRheXM7CisJfQorCisJZHQueWVhciA9IHk7CisJZHQubW9udGggPSBtOworCWR0LmRheSA9IGQ7CisKKwlyZXR1cm4gKnRoaXM7Cit9CisKK0NQREZTREtfRGF0ZVRpbWUmIENQREZTREtfRGF0ZVRpbWU6OkFkZFNlY29uZHMoaW50IHNlY29uZHMpCit7CisJaWYgKHNlY29uZHMgPT0gMCkgcmV0dXJuICp0aGlzOworCisJaW50CW47CisJaW50CWRheXM7CisKKwluID0gZHQuaG91ciAqIDM2MDAgKyBkdC5taW51dGUgKiA2MCArIGR0LnNlY29uZCArIHNlY29uZHM7CisJaWYgKG4gPCAwKQorCXsKKwkJZGF5cyA9IChuIC0gODYzOTkpIC8gODY0MDA7CisJCW4gLT0gZGF5cyAqIDg2NDAwOworCX0KKwllbHNlCisJeworCQlkYXlzID0gbiAvIDg2NDAwOworCQluICU9IDg2NDAwOworCX0KKwlkdC5ob3VyID0gKEZYX0JZVEUpKG4gLyAzNjAwKTsKKwlkdC5ob3VyICU9IDI0OworCW4gJT0gMzYwMDsKKwlkdC5taW51dGUgPSAoRlhfQllURSkobiAvIDYwKTsKKwlkdC5zZWNvbmQgPSAoRlhfQllURSkobiAlIDYwKTsKKwlpZiAoZGF5cyAhPSAwKSBBZGREYXlzKGRheXMpOworCisJcmV0dXJuICp0aGlzOworfQorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLwkJCQkJCQkJQ1BERlNES19Bbm5vdAkKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDUERGU0RLX0Fubm90OjpDUERGU0RLX0Fubm90KENQREZfQW5ub3QqIHBBbm5vdCwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KSA6CittX3BBbm5vdChwQW5ub3QpLAorbV9wUGFnZVZpZXcocFBhZ2VWaWV3KSwKK21fYlNlbGVjdGVkKEZBTFNFKSwKK21fblRhYk9yZGVyKC0xKQoreworfQorCitDUERGU0RLX0Fubm90Ojp+Q1BERlNES19Bbm5vdCgpCit7CisJbV9wQW5ub3QgPSBOVUxMOworCW1fcFBhZ2VWaWV3ID0gTlVMTDsKK30KKworQ1BERl9Bbm5vdCoJQ1BERlNES19Bbm5vdDo6R2V0UERGQW5ub3QoKQoreworCXJldHVybiBtX3BBbm5vdDsKK30KKworRlhfRFdPUkQgQ1BERlNES19Bbm5vdDo6R2V0RmxhZ3MoKQoreworCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsKKwkKKwlyZXR1cm4gbV9wQW5ub3QtPkdldEZsYWdzKCk7Cit9CisKK3ZvaWQgQ1BERlNES19Bbm5vdDo6U2V0UGFnZShDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpCit7CisJbV9wUGFnZVZpZXcgPSBwUGFnZVZpZXc7Cit9CisKK0NQREZTREtfUGFnZVZpZXcqIENQREZTREtfQW5ub3Q6OkdldFBhZ2VWaWV3KCkKK3sKKwlyZXR1cm4gbV9wUGFnZVZpZXc7Cit9CisKK0ZYX0JPT0wgQ1BERlNES19Bbm5vdDo6SXNTZWxlY3RlZCgpCit7CisJcmV0dXJuIG1fYlNlbGVjdGVkOworfQorCit2b2lkIENQREZTREtfQW5ub3Q6OlNldFNlbGVjdGVkKEZYX0JPT0wgYlNlbGVjdGVkKQoreworCW1fYlNlbGVjdGVkID0gYlNlbGVjdGVkOworfQorCisvLyBUYWIgT3JkZXIJCitpbnQgQ1BERlNES19Bbm5vdDo6R2V0VGFiT3JkZXIoKQoreworCXJldHVybiBtX25UYWJPcmRlcjsKK30KKwordm9pZCBDUERGU0RLX0Fubm90OjpTZXRUYWJPcmRlcihpbnQgaVRhYk9yZGVyKQoreworCW1fblRhYk9yZGVyID0gaVRhYk9yZGVyOworfQorCitDUERGX0RpY3Rpb25hcnkqIENQREZTREtfQW5ub3Q6OkdldEFubm90RGljdCgpIGNvbnN0Cit7CisJQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOworCQorCXJldHVybiBtX3BBbm5vdC0+bV9wQW5ub3REaWN0OworfQorCit2b2lkIENQREZTREtfQW5ub3Q6OlNldFJlY3QoY29uc3QgQ1BERl9SZWN0JiByZWN0KQoreworCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsKKwlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsKKwlBU1NFUlQocmVjdC5yaWdodCAtIHJlY3QubGVmdCA+PSBHZXRNaW5XaWR0aCgpKTsKKwlBU1NFUlQocmVjdC50b3AgLSByZWN0LmJvdHRvbSA+PSBHZXRNaW5IZWlnaHQoKSk7CisJCisJbV9wQW5ub3QtPm1fcEFubm90RGljdC0+U2V0QXRSZWN0KCJSZWN0IiwgcmVjdCk7Cit9CisKK0NQREZfUmVjdCBDUERGU0RLX0Fubm90OjpHZXRSZWN0KCkgY29uc3QKK3sKKwlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7CisJCisJQ1BERl9SZWN0IHJlY3Q7CisJbV9wQW5ub3QtPkdldFJlY3QocmVjdCk7CisJCisJcmV0dXJuIHJlY3Q7Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQREZTREtfQW5ub3Q6OkdldFR5cGUoKSBjb25zdAoreworCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsKKwkKKwlyZXR1cm4gbV9wQW5ub3QtPkdldFN1YlR5cGUoKTsKK30KKworQ0ZYX0J5dGVTdHJpbmcgQ1BERlNES19Bbm5vdDo6R2V0U3ViVHlwZSgpIGNvbnN0Cit7CisJcmV0dXJuICIiOworfQorCit2b2lkIENQREZTREtfQW5ub3Q6OlJlc2V0QXBwZWFyYW5jZSgpCit7CisJQVNTRVJUKEZBTFNFKTsKK30KKwordm9pZCBDUERGU0RLX0Fubm90OjpEcmF3QXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBjb25zdCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLAorCQkJCQkJCQkgICBDUERGX0Fubm90OjpBcHBlYXJhbmNlTW9kZSBtb2RlLCBjb25zdCBDUERGX1JlbmRlck9wdGlvbnMqIHBPcHRpb25zKQkKK3sKKwlBU1NFUlQobV9wUGFnZVZpZXcgIT0gTlVMTCk7CisJQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOworCQorCW1fcEFubm90LT5EcmF3QXBwZWFyYW5jZShtX3BQYWdlVmlldy0+R2V0UERGUGFnZSgpLCBwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIG1vZGUsIHBPcHRpb25zKTsKK30KKworRlhfQk9PTAlDUERGU0RLX0Fubm90OjpJc0FwcGVhcmFuY2VWYWxpZCgpCit7CisJQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOworCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOworCQorCXJldHVybiBtX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5HZXREaWN0KCJBUCIpICE9IE5VTEw7Cit9CisKK0ZYX0JPT0wJQ1BERlNES19Bbm5vdDo6SXNBcHBlYXJhbmNlVmFsaWQoQ1BERl9Bbm5vdDo6QXBwZWFyYW5jZU1vZGUgbW9kZSkKK3sKKwlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7CisJQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7CisJCisJQ1BERl9EaWN0aW9uYXJ5KiBwQVAgPSBtX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5HZXREaWN0KCJBUCIpOworCWlmIChwQVAgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworCQorCS8vIENob29zZSB0aGUgcmlnaHQgc3ViLWFwCisJY29uc3QgRlhfQ0hBUiogYXBfZW50cnkgPSAiTiI7CisJaWYgKG1vZGUgPT0gQ1BERl9Bbm5vdDo6RG93bikKKwkJYXBfZW50cnkgPSAiRCI7CisJZWxzZSBpZiAobW9kZSA9PSBDUERGX0Fubm90OjpSb2xsb3ZlcikKKwkJYXBfZW50cnkgPSAiUiI7CisJaWYgKCFwQVAtPktleUV4aXN0KGFwX2VudHJ5KSkKKwkJYXBfZW50cnkgPSAiTiI7CisJCisJLy8gR2V0IHRoZSBBUCBzdHJlYW0gb3Igc3ViZGlyZWN0b3J5CisJQ1BERl9PYmplY3QqIHBzdWIgPSBwQVAtPkdldEVsZW1lbnRWYWx1ZShhcF9lbnRyeSk7CisJaWYgKHBzdWIgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworCQorCXJldHVybiBUUlVFOworfQorCit2b2lkIENQREZTREtfQW5ub3Q6OkRyYXdCb3JkZXIoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgY29uc3QgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwKKwkJCQkJCSAgIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMpCit7CisJQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOworCW1fcEFubm90LT5EcmF3Qm9yZGVyKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgcE9wdGlvbnMpOyAKK30KKwordm9pZCBDUERGU0RLX0Fubm90OjpDbGVhckNhY2hlZEFQKCkKK3sKKwlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7CisJbV9wQW5ub3QtPkNsZWFyQ2FjaGVkQVAoKTsKK30gICAgCisKK3ZvaWQgQ1BERlNES19Bbm5vdDo6U2V0Q29udGVudHMoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNDb250ZW50cykKK3sKKwlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7CisJQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7CisJCisJaWYgKHNDb250ZW50cy5Jc0VtcHR5KCkpCisJCW1fcEFubm90LT5tX3BBbm5vdERpY3QtPlJlbW92ZUF0KCJDb250ZW50cyIpOworCWVsc2UKKwkJbV9wQW5ub3QtPm1fcEFubm90RGljdC0+U2V0QXRTdHJpbmcoIkNvbnRlbnRzIiwgUERGX0VuY29kZVRleHQoc0NvbnRlbnRzKSk7Cit9CisKK0NGWF9XaWRlU3RyaW5nIENQREZTREtfQW5ub3Q6OkdldENvbnRlbnRzKCkgY29uc3QKK3sKKwlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7CisJQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7CisJCisJcmV0dXJuIG1fcEFubm90LT5tX3BBbm5vdERpY3QtPkdldFVuaWNvZGVUZXh0KCJDb250ZW50cyIpOworfQorCit2b2lkIENQREZTREtfQW5ub3Q6OlNldEFubm90TmFtZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc05hbWUpCit7CisJQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOworCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOworCQorCWlmIChzTmFtZS5Jc0VtcHR5KCkpCisJCW1fcEFubm90LT5tX3BBbm5vdERpY3QtPlJlbW92ZUF0KCJOTSIpOworCWVsc2UKKwkJbV9wQW5ub3QtPm1fcEFubm90RGljdC0+U2V0QXRTdHJpbmcoIk5NIiwgUERGX0VuY29kZVRleHQoc05hbWUpKTsKK30KKworQ0ZYX1dpZGVTdHJpbmcgQ1BERlNES19Bbm5vdDo6R2V0QW5ub3ROYW1lKCkgY29uc3QKK3sKKwlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7CisJQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7CisJCisJcmV0dXJuIG1fcEFubm90LT5tX3BBbm5vdERpY3QtPkdldFVuaWNvZGVUZXh0KCJOTSIpOworfQorCit2b2lkIENQREZTREtfQW5ub3Q6OlNldE1vZGlmaWVkRGF0ZShjb25zdCBGWF9TWVNURU1USU1FJiBzdCkKK3sKKwlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7CisJQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7CisJCisJQ1BERlNES19EYXRlVGltZSBkdChzdCk7CisJQ0ZYX0J5dGVTdHJpbmcgc3RyID0gZHQuVG9QREZEYXRlVGltZVN0cmluZygpOworCQorCWlmIChzdHIuSXNFbXB0eSgpKQorCQltX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5SZW1vdmVBdCgiTSIpOworCWVsc2UKKwkJbV9wQW5ub3QtPm1fcEFubm90RGljdC0+U2V0QXRTdHJpbmcoIk0iLCBzdHIpOworfQorCitGWF9TWVNURU1USU1FIENQREZTREtfQW5ub3Q6OkdldE1vZGlmaWVkRGF0ZSgpIGNvbnN0Cit7CisJQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOworCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOworCQorCUZYX1NZU1RFTVRJTUUgc3lzdGltZTsJCisJQ0ZYX0J5dGVTdHJpbmcgc3RyID0gbV9wQW5ub3QtPm1fcEFubm90RGljdC0+R2V0U3RyaW5nKCJNIik7CisJCisgCUNQREZTREtfRGF0ZVRpbWUgZHQoc3RyKTsKKyAJZHQuVG9TeXN0ZW1UaW1lKHN5c3RpbWUpOworCQorCXJldHVybiBzeXN0aW1lOworfQorCit2b2lkIENQREZTREtfQW5ub3Q6OlNldEZsYWdzKGludCBuRmxhZ3MpCit7CisJQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOworCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOworCQorCW1fcEFubm90LT5tX3BBbm5vdERpY3QtPlNldEF0SW50ZWdlcigiRiIsIG5GbGFncyk7Cit9CisKK2ludCBDUERGU0RLX0Fubm90OjpHZXRGbGFncygpIGNvbnN0Cit7CisJQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOworCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOworCQorCXJldHVybiBtX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5HZXRJbnRlZ2VyKCJGIik7Cit9CisKK3ZvaWQgQ1BERlNES19Bbm5vdDo6U2V0QXBwU3RhdGUoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cikKK3sKKwlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7CisJQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7CisKKwlpZiAoc3RyLklzRW1wdHkoKSkKKwkJbV9wQW5ub3QtPm1fcEFubm90RGljdC0+UmVtb3ZlQXQoIkFTIik7CisJZWxzZQorCQltX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5TZXRBdFN0cmluZygiQVMiLCBzdHIpOworfQorCitDRlhfQnl0ZVN0cmluZyBDUERGU0RLX0Fubm90OjpHZXRBcHBTdGF0ZSgpIGNvbnN0Cit7CisJQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOworCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOworCisJcmV0dXJuIG1fcEFubm90LT5tX3BBbm5vdERpY3QtPkdldFN0cmluZygiQVMiKTsKK30KKwordm9pZCBDUERGU0RLX0Fubm90OjpTZXRTdHJ1Y3RQYXJlbnQoaW50IGtleSkKK3sKKwlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7CisJQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7CisJCisJbV9wQW5ub3QtPm1fcEFubm90RGljdC0+U2V0QXRJbnRlZ2VyKCJTdHJ1Y3RQYXJlbnQiLCBrZXkpOworfQorCitpbnQJQ1BERlNES19Bbm5vdDo6R2V0U3RydWN0UGFyZW50KCkgY29uc3QKK3sKKwlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7CisJQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7CisJCisJcmV0dXJuIG1fcEFubm90LT5tX3BBbm5vdERpY3QtPkdldEludGVnZXIoIlN0cnVjdFBhcmVudCIpOworfQorCisvL2JvcmRlcgordm9pZCBDUERGU0RLX0Fubm90OjpTZXRCb3JkZXJXaWR0aChpbnQgbldpZHRoKQoreworCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsKKwlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsKKworCUNQREZfQXJyYXkqIHBCb3JkZXIgPSBtX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5HZXRBcnJheSgiQm9yZGVyIik7CisKKwlpZiAocEJvcmRlcikKKwl7CisJCXBCb3JkZXItPlNldEF0KDIsIEZYX05FVyBDUERGX051bWJlcihuV2lkdGgpKTsKKwl9CisJZWxzZQorCXsKKwkJQ1BERl9EaWN0aW9uYXJ5KiBwQlNEaWN0ID0gbV9wQW5ub3QtPm1fcEFubm90RGljdC0+R2V0RGljdCgiQlMiKTsKKworCQlpZiAoIXBCU0RpY3QpCisJCXsKKwkJCXBCU0RpY3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5OworCQkJbV9wQW5ub3QtPm1fcEFubm90RGljdC0+U2V0QXQoIkJTIiwgcEJTRGljdCk7CisJCX0KKworCQlwQlNEaWN0LT5TZXRBdEludGVnZXIoIlciLCBuV2lkdGgpOworCX0KK30KKworaW50CUNQREZTREtfQW5ub3Q6OkdldEJvcmRlcldpZHRoKCkgY29uc3QKK3sKKwlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7CisJQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7CisKKwlDUERGX0FycmF5KiBwQm9yZGVyID0gbV9wQW5ub3QtPm1fcEFubm90RGljdC0+R2V0QXJyYXkoIkJvcmRlciIpOworCisJaWYgKHBCb3JkZXIpCisJeworCQlyZXR1cm4gcEJvcmRlci0+R2V0SW50ZWdlcigyKTsKKwl9CisJZWxzZQorCXsKKwkJQ1BERl9EaWN0aW9uYXJ5KiBwQlNEaWN0ID0gbV9wQW5ub3QtPm1fcEFubm90RGljdC0+R2V0RGljdCgiQlMiKTsKKworCQlpZiAocEJTRGljdCkKKwkJeworCQkJcmV0dXJuIHBCU0RpY3QtPkdldEludGVnZXIoIlciLCAxKTsKKwkJfQorCX0KKwlyZXR1cm4gMTsKK30KKwordm9pZCBDUERGU0RLX0Fubm90OjpTZXRCb3JkZXJTdHlsZShpbnQgblN0eWxlKQoreworCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsKKwlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsKKworCUNQREZfRGljdGlvbmFyeSogcEJTRGljdCA9IG1fcEFubm90LT5tX3BBbm5vdERpY3QtPkdldERpY3QoIkJTIik7CisJaWYgKCFwQlNEaWN0KQorCXsKKwkJcEJTRGljdCA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7CisJCW1fcEFubm90LT5tX3BBbm5vdERpY3QtPlNldEF0KCJCUyIsIHBCU0RpY3QpOworCX0KKworCXN3aXRjaCAoblN0eWxlKQorCXsKKwljYXNlIEJCU19TT0xJRDoKKwkJcEJTRGljdC0+U2V0QXROYW1lKCJTIiwgIlMiKTsKKwkJYnJlYWs7CisJY2FzZSBCQlNfREFTSDoKKwkJcEJTRGljdC0+U2V0QXROYW1lKCJTIiwgIkQiKTsKKwkJYnJlYWs7CisJY2FzZSBCQlNfQkVWRUxFRDoKKwkJcEJTRGljdC0+U2V0QXROYW1lKCJTIiwgIkIiKTsKKwkJYnJlYWs7CisJY2FzZSBCQlNfSU5TRVQ6CisJCXBCU0RpY3QtPlNldEF0TmFtZSgiUyIsICJJIik7CisJCWJyZWFrOworCWNhc2UgQkJTX1VOREVSTElORToKKwkJcEJTRGljdC0+U2V0QXROYW1lKCJTIiwgIlUiKTsKKwkJYnJlYWs7CisJfQorfQorCitpbnQJQ1BERlNES19Bbm5vdDo6R2V0Qm9yZGVyU3R5bGUoKSBjb25zdAoreworCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsKKwlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsKKworCUNQREZfRGljdGlvbmFyeSogcEJTRGljdCA9IG1fcEFubm90LT5tX3BBbm5vdERpY3QtPkdldERpY3QoIkJTIik7CisJaWYgKHBCU0RpY3QpCisJeworCQlDRlhfQnl0ZVN0cmluZyBzQm9yZGVyU3R5bGUgPSBwQlNEaWN0LT5HZXRTdHJpbmcoIlMiLCAiUyIpOworCQlpZiAoc0JvcmRlclN0eWxlID09ICJTIikgcmV0dXJuIEJCU19TT0xJRDsKKwkJaWYgKHNCb3JkZXJTdHlsZSA9PSAiRCIpIHJldHVybiBCQlNfREFTSDsKKwkJaWYgKHNCb3JkZXJTdHlsZSA9PSAiQiIpIHJldHVybiBCQlNfQkVWRUxFRDsKKwkJaWYgKHNCb3JkZXJTdHlsZSA9PSAiSSIpIHJldHVybiBCQlNfSU5TRVQ7CisJCWlmIChzQm9yZGVyU3R5bGUgPT0gIlUiKSByZXR1cm4gQkJTX1VOREVSTElORTsKKwl9CisKKwlDUERGX0FycmF5KiBwQm9yZGVyID0gbV9wQW5ub3QtPm1fcEFubm90RGljdC0+R2V0QXJyYXkoIkJvcmRlciIpOworCWlmIChwQm9yZGVyKQorCXsKKwkJaWYgKHBCb3JkZXItPkdldENvdW50KCkgPj0gNCkgCisJCXsgCisJCQlDUERGX0FycmF5ICpwRFAgPSBwQm9yZGVyLT5HZXRBcnJheSgzKTsKKwkJCWlmIChwRFAgJiYgcERQLT5HZXRDb3VudCgpID4gMCkKKwkJCQlyZXR1cm4gQkJTX0RBU0g7CisJCX0KKwl9CisKKwlyZXR1cm4gQkJTX1NPTElEOworfQorCit2b2lkIENQREZTREtfQW5ub3Q6OlNldEJvcmRlckRhc2goY29uc3QgQ0ZYX0ludEFycmF5JiBhcnJheSkKK3sKKwlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7CisJQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7CisKKwlDUERGX0RpY3Rpb25hcnkqIHBCU0RpY3QgPSBtX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5HZXREaWN0KCJCUyIpOworCWlmICghcEJTRGljdCkKKwl7CisJCXBCU0RpY3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5OworCQltX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5TZXRBdCgiQlMiLCBwQlNEaWN0KTsKKwl9CisKKwlDUERGX0FycmF5KiBwQXJyYXkgPSBGWF9ORVcgQ1BERl9BcnJheTsKKwlmb3IgKGludCBpPTAsc3o9YXJyYXkuR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJeworCQlwQXJyYXktPkFkZEludGVnZXIoYXJyYXlbaV0pOworCX0KKworCXBCU0RpY3QtPlNldEF0KCJEIiwgcEFycmF5KTsKK30KKwordm9pZCBDUERGU0RLX0Fubm90OjpHZXRCb3JkZXJEYXNoKENGWF9JbnRBcnJheSYgYXJyYXkpIGNvbnN0Cit7CisJQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOworCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOworCisJQ1BERl9BcnJheSogcERhc2ggPSBOVUxMOworCisJQ1BERl9BcnJheSogcEJvcmRlciA9IG1fcEFubm90LT5tX3BBbm5vdERpY3QtPkdldEFycmF5KCJCb3JkZXIiKTsKKwlpZiAocEJvcmRlcikKKwl7CisJCXBEYXNoID0gcEJvcmRlci0+R2V0QXJyYXkoMyk7CisJfQorCWVsc2UKKwl7CisJCUNQREZfRGljdGlvbmFyeSogcEJTRGljdCA9IG1fcEFubm90LT5tX3BBbm5vdERpY3QtPkdldERpY3QoIkJTIik7CisJCWlmIChwQlNEaWN0KQorCQl7CisJCQlwRGFzaCA9IHBCU0RpY3QtPkdldEFycmF5KCJEIik7CisJCX0KKwl9CisKKwlpZiAocERhc2gpCisJeworCQlmb3IgKGludCBpPTAsc3o9cERhc2gtPkdldENvdW50KCk7IGk8c3o7IGkrKykKKwkJeworCQkJYXJyYXkuQWRkKHBEYXNoLT5HZXRJbnRlZ2VyKGkpKTsKKwkJfQorCX0KK30KKwordm9pZCBDUERGU0RLX0Fubm90OjpTZXRDb2xvcihGWF9DT0xPUlJFRiBjb2xvcikKK3sKKwlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7CisJQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7CisKKwlDUERGX0FycmF5KiBwQXJyYXkgPSBGWF9ORVcgQ1BERl9BcnJheTsKKwlwQXJyYXktPkFkZE51bWJlcigoRlhfRkxPQVQpRlhTWVNfR2V0UlZhbHVlKGNvbG9yKSAvIDI1NS4wZik7CisJcEFycmF5LT5BZGROdW1iZXIoKEZYX0ZMT0FUKUZYU1lTX0dldEdWYWx1ZShjb2xvcikgLyAyNTUuMGYpOworCXBBcnJheS0+QWRkTnVtYmVyKChGWF9GTE9BVClGWFNZU19HZXRCVmFsdWUoY29sb3IpIC8gMjU1LjBmKTsKKwltX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5TZXRBdCgiQyIsIHBBcnJheSk7Cit9CisKK3ZvaWQgQ1BERlNES19Bbm5vdDo6UmVtb3ZlQ29sb3IoKQoreworCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsKKwlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsKKworCW1fcEFubm90LT5tX3BBbm5vdERpY3QtPlJlbW92ZUF0KCJDIikgOyAKK30KKworRlhfQk9PTCBDUERGU0RLX0Fubm90OjpHZXRDb2xvcihGWF9DT0xPUlJFRiYgY29sb3IpIGNvbnN0Cit7CisJQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOworCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOworCisJaWYgKENQREZfQXJyYXkqIHBFbnRyeSA9IG1fcEFubm90LT5tX3BBbm5vdERpY3QtPkdldEFycmF5KCJDIikpCQkKKwl7CisJCWludCBuQ291bnQgPSBwRW50cnktPkdldENvdW50KCk7CisJCWlmIChuQ291bnQgPT0gMSkKKwkJeworCQkJRlhfRkxPQVQgZyA9IHBFbnRyeS0+R2V0TnVtYmVyKDApICogMjU1OworCisJCQljb2xvciA9IEZYU1lTX1JHQigoaW50KWcsIChpbnQpZywgKGludClnKTsKKworCQkJcmV0dXJuIFRSVUU7CisJCX0KKwkJZWxzZSBpZiAobkNvdW50ID09IDMpCisJCXsKKwkJCUZYX0ZMT0FUIHIgPSBwRW50cnktPkdldE51bWJlcigwKSAqIDI1NTsKKwkJCUZYX0ZMT0FUIGcgPSBwRW50cnktPkdldE51bWJlcigxKSAqIDI1NTsKKwkJCUZYX0ZMT0FUIGIgPSBwRW50cnktPkdldE51bWJlcigyKSAqIDI1NTsKKworCQkJY29sb3IgPSBGWFNZU19SR0IoKGludClyLCAoaW50KWcsIChpbnQpYik7CisKKwkJCXJldHVybiBUUlVFOworCQl9CisJCWVsc2UgaWYgKG5Db3VudCA9PSA0KQorCQl7CisJCQlGWF9GTE9BVCBjID0gcEVudHJ5LT5HZXROdW1iZXIoMCk7CisJCQlGWF9GTE9BVCBtID0gcEVudHJ5LT5HZXROdW1iZXIoMSk7CisJCQlGWF9GTE9BVCB5ID0gcEVudHJ5LT5HZXROdW1iZXIoMik7CisJCQlGWF9GTE9BVCBrID0gcEVudHJ5LT5HZXROdW1iZXIoMyk7CisKKwkJCUZYX0ZMT0FUIHIgPSAxLjBmIC0gRlhfTUlOKDEuMGYsIGMgKyBrKTsKKwkJCUZYX0ZMT0FUIGcgPSAxLjBmIC0gRlhfTUlOKDEuMGYsIG0gKyBrKTsKKwkJCUZYX0ZMT0FUIGIgPSAxLjBmIC0gRlhfTUlOKDEuMGYsIHkgKyBrKTsKKworCQkJY29sb3IgPSBGWFNZU19SR0IoKGludCkociAqIDI1NSksIChpbnQpKGcgKiAyNTUpLCAoaW50KShiICogMjU1KSk7CisKKwkJCXJldHVybiBUUlVFOworCQl9CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCisKK3ZvaWQgQ1BERlNES19Bbm5vdDo6V3JpdGVBcHBlYXJhbmNlKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzQVBUeXBlLCBjb25zdCBDUERGX1JlY3QmIHJjQkJveCwgCisJCQkJCQkJCWNvbnN0IENQREZfTWF0cml4JiBtYXRyaXgsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzQ29udGVudHMsCisJCQkJCQkJCWNvbnN0IENGWF9CeXRlU3RyaW5nJiBzQVBTdGF0ZSkKK3sKKwlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7CisJQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7CisJCisJQ1BERl9EaWN0aW9uYXJ5KiBwQVBEaWN0ID0gbV9wQW5ub3QtPm1fcEFubm90RGljdC0+R2V0RGljdCgiQVAiKTsKKwkKKwlpZiAoIXBBUERpY3QpIAorCXsKKwkJcEFQRGljdCA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7CisJCW1fcEFubm90LT5tX3BBbm5vdERpY3QtPlNldEF0KCJBUCIsIHBBUERpY3QpOworCX0KKwkKKwlDUERGX1N0cmVhbSogcFN0cmVhbSA9IE5VTEw7CisJQ1BERl9EaWN0aW9uYXJ5KiBwUGFyZW50RGljdCA9IE5VTEw7CisJCisJaWYgKHNBUFN0YXRlLklzRW1wdHkoKSkKKwl7CisJCXBQYXJlbnREaWN0ID0gcEFQRGljdDsKKwkJcFN0cmVhbSA9IHBBUERpY3QtPkdldFN0cmVhbShzQVBUeXBlKTsKKwl9CisJZWxzZQorCXsKKwkJQ1BERl9EaWN0aW9uYXJ5KiBwQVBUeXBlRGljdCA9IHBBUERpY3QtPkdldERpY3Qoc0FQVHlwZSk7CisJCWlmICghcEFQVHlwZURpY3QpCisJCXsKKwkJCXBBUFR5cGVEaWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsKKwkJCXBBUERpY3QtPlNldEF0KHNBUFR5cGUsIHBBUFR5cGVEaWN0KTsKKwkJfQorCQkKKwkJcFBhcmVudERpY3QgPSBwQVBUeXBlRGljdDsKKwkJcFN0cmVhbSA9IHBBUFR5cGVEaWN0LT5HZXRTdHJlYW0oc0FQU3RhdGUpOworCX0KKwkKKwlpZiAoIXBTdHJlYW0pIAorCXsKKwkJQVNTRVJUKG1fcFBhZ2VWaWV3ICE9IE5VTEwpOworCQlDUERGX0RvY3VtZW50KiBwRG9jID0gbV9wUGFnZVZpZXctPkdldFBERkRvY3VtZW50KCk7CisJCUFTU0VSVChwRG9jICE9IE5VTEwpOworCQkKKwkJcFN0cmVhbSA9IEZYX05FVyBDUERGX1N0cmVhbShOVUxMLCAwLCBOVUxMKTsKKwkJRlhfSU5UMzIgb2JqbnVtID0gcERvYy0+QWRkSW5kaXJlY3RPYmplY3QocFN0cmVhbSk7CisJCS8vcEFQRGljdC0+U2V0QXRSZWZlcmVuY2Uoc0FQVHlwZSwgcERvYywgb2JqbnVtKTsKKwkJQVNTRVJUKHBQYXJlbnREaWN0ICE9IE5VTEwpOworCQlwUGFyZW50RGljdC0+U2V0QXRSZWZlcmVuY2Uoc0FQVHlwZSwgcERvYywgb2JqbnVtKTsKKwl9CisJCisJQ1BERl9EaWN0aW9uYXJ5ICogcFN0cmVhbURpY3QgPSBwU3RyZWFtLT5HZXREaWN0KCk7CisJCisJaWYgKCFwU3RyZWFtRGljdCkKKwl7CisJCXBTdHJlYW1EaWN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeTsKKwkJcFN0cmVhbURpY3QtPlNldEF0TmFtZSgiVHlwZSIsICJYT2JqZWN0Iik7CisJCXBTdHJlYW1EaWN0LT5TZXRBdE5hbWUoIlN1YnR5cGUiLCAiRm9ybSIpOworCQlwU3RyZWFtRGljdC0+U2V0QXRJbnRlZ2VyKCJGb3JtVHlwZSIsIDEpOworCQlwU3RyZWFtLT5Jbml0U3RyZWFtKE5VTEwsMCxwU3RyZWFtRGljdCk7CisJfQorCQorCWlmIChwU3RyZWFtRGljdCkKKwl7CisJCXBTdHJlYW1EaWN0LT5TZXRBdE1hdHJpeCgiTWF0cml4IixtYXRyaXgpOwkKKwkJcFN0cmVhbURpY3QtPlNldEF0UmVjdCgiQkJveCIsIHJjQkJveCk7CQkKKwl9CisJCisJcFN0cmVhbS0+U2V0RGF0YSgoRlhfQllURSopKEZYX0xQQ1NUUilzQ29udGVudHMsIHNDb250ZW50cy5HZXRMZW5ndGgoKSwgRkFMU0UsIEZBTFNFKTsKK30KKworI2RlZmluZSBCQV9BTk5PVF9NSU5XSURUSAkJCTEKKyNkZWZpbmUgQkFfQU5OT1RfTUlOSEVJR0hUCQkJMQorCitGWF9GTE9BVCBDUERGU0RLX0Fubm90OjpHZXRNaW5XaWR0aCgpIGNvbnN0Cit7CisJcmV0dXJuIEJBX0FOTk9UX01JTldJRFRIOworfQorCitGWF9GTE9BVCBDUERGU0RLX0Fubm90OjpHZXRNaW5IZWlnaHQoKSBjb25zdAoreworCXJldHVybiBCQV9BTk5PVF9NSU5IRUlHSFQ7Cit9CisKK0ZYX0JPT0wgQ1BERlNES19Bbm5vdDo6Q3JlYXRlRm9ybUZpbGxlcigpCit7CisJcmV0dXJuIFRSVUU7Cit9CitGWF9CT09MCUNQREZTREtfQW5ub3Q6OklzVmlzaWJsZSgpIGNvbnN0Cit7CisJaW50IG5GbGFncyA9IEdldEZsYWdzKCk7CisJcmV0dXJuICEoKG5GbGFncyAmIEFOTk9URkxBR19JTlZJU0lCTEUpIHx8IChuRmxhZ3MgJiBBTk5PVEZMQUdfSElEREVOKSB8fCAobkZsYWdzICYgQU5OT1RGTEFHX05PVklFVykpOworfQorCitDUERGX0FjdGlvbiBDUERGU0RLX0Fubm90OjpHZXRBY3Rpb24oKSBjb25zdAoreworCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsKKwlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsKKwkKKwlyZXR1cm4gbV9wQW5ub3QtPm1fcEFubm90RGljdC0+R2V0RGljdCgiQSIpOworfQorCit2b2lkIENQREZTREtfQW5ub3Q6OlNldEFjdGlvbihjb25zdCBDUERGX0FjdGlvbiYgYWN0aW9uKQoreworCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsKKwlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsKKwkKKwlBU1NFUlQoYWN0aW9uICE9IE5VTEwpOworCQorCWlmICgoQ1BERl9BY3Rpb24mKWFjdGlvbiAhPSBtX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5HZXREaWN0KCJBIikpCisJeworCQlDUERGX0RvY3VtZW50KiBwRG9jID0gbV9wUGFnZVZpZXctPkdldFBERkRvY3VtZW50KCk7CisJCUFTU0VSVChwRG9jICE9IE5VTEwpOworCQkKKwkJaWYgKGFjdGlvbi5tX3BEaWN0ICYmIChhY3Rpb24ubV9wRGljdC0+R2V0T2JqTnVtKCkgPT0gMCkpCisJCQlwRG9jLT5BZGRJbmRpcmVjdE9iamVjdChhY3Rpb24ubV9wRGljdCk7IAorCQltX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5TZXRBdFJlZmVyZW5jZSgiQSIsIHBEb2MsIGFjdGlvbi5tX3BEaWN0LT5HZXRPYmpOdW0oKSk7CisJfQorfQorCit2b2lkIENQREZTREtfQW5ub3Q6OlJlbW92ZUFjdGlvbigpCit7CisJQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOworCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOworCQorCW1fcEFubm90LT5tX3BBbm5vdERpY3QtPlJlbW92ZUF0KCJBIik7Cit9CisKK0NQREZfQUFjdGlvbiBDUERGU0RLX0Fubm90OjpHZXRBQWN0aW9uKCkgY29uc3QKK3sKKwlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7CisJQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7CisJCisJcmV0dXJuIG1fcEFubm90LT5tX3BBbm5vdERpY3QtPkdldERpY3QoIkFBIik7Cit9CisKK3ZvaWQgQ1BERlNES19Bbm5vdDo6U2V0QUFjdGlvbihjb25zdCBDUERGX0FBY3Rpb24mIGFhKQoreworCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsKKwlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsKKwlBU1NFUlQoYWEgIT0gTlVMTCk7CisJCisJaWYgKChDUERGX0FBY3Rpb24mKWFhICE9IG1fcEFubm90LT5tX3BBbm5vdERpY3QtPkdldERpY3QoIkFBIikpCisJCW1fcEFubm90LT5tX3BBbm5vdERpY3QtPlNldEF0KCJBQSIsIChDUERGX0FBY3Rpb24mKWFhKTsKK30KKwordm9pZCBDUERGU0RLX0Fubm90OjpSZW1vdmVBQWN0aW9uKCkKK3sKKwlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7CisJQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7CisJCisJbV9wQW5ub3QtPm1fcEFubm90RGljdC0+UmVtb3ZlQXQoIkFBIik7Cit9CisKK0NQREZfQWN0aW9uCUNQREZTREtfQW5ub3Q6OkdldEFBY3Rpb24oQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSBlQUFUKQoreworCUNQREZfQUFjdGlvbiBBQWN0aW9uID0gR2V0QUFjdGlvbigpOworCQorCWlmIChBQWN0aW9uLkFjdGlvbkV4aXN0KGVBQVQpKQorCXsKKwkJcmV0dXJuIEFBY3Rpb24uR2V0QWN0aW9uKGVBQVQpOworCX0KKwllbHNlIGlmIChlQUFUID09IENQREZfQUFjdGlvbjo6QnV0dG9uVXApCisJeworCQlyZXR1cm4gR2V0QWN0aW9uKCk7CisJfQorCQorCXJldHVybiBOVUxMOworfQorCit2b2lkICBDUERGU0RLX0Fubm90OjpBbm5vdF9PbkRyYXcoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucykKK3sKKwkKKwltX3BBbm5vdC0+R2V0QVBGb3JtKG1fcFBhZ2VWaWV3LT5HZXRQREZQYWdlKCksIENQREZfQW5ub3Q6Ok5vcm1hbCk7CisJbV9wQW5ub3QtPkRyYXdBcHBlYXJhbmNlKG1fcFBhZ2VWaWV3LT5HZXRQREZQYWdlKCksIHBEZXZpY2UsIHBVc2VyMkRldmljZSwgQ1BERl9Bbm5vdDo6Tm9ybWFsLCBOVUxMKTsKKworCXJldHVybiA7Cit9CisKK0NQREZfUGFnZSogQ1BERlNES19Bbm5vdDo6R2V0UERGUGFnZSgpCit7CisJaWYobV9wUGFnZVZpZXcpCisJCXJldHVybiBtX3BQYWdlVmlldy0+R2V0UERGUGFnZSgpOworCXJldHVybiBOVUxMOworfQorCmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9mc2RrX2Jhc2Vmb3JtLmNwcCBiL2ZwZGZzZGsvc3JjL2ZzZGtfYmFzZWZvcm0uY3BwCmluZGV4IDIzZDllYzkuLmFlM2I2MzYgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2ZzZGtfYmFzZWZvcm0uY3BwCisrKyBiL2ZwZGZzZGsvc3JjL2ZzZGtfYmFzZWZvcm0uY3BwCkBAIC0xLDMxMTEgKzEsMzExMSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19kZWZpbmUuaCINCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX21nci5oIg0KLSNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfYmFzZWFubm90LmgiDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19iYXNlZm9ybS5oIg0KLSNpbmNsdWRlICIuLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0Zvcm1GaWxsZXIuaCINCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX2FjdGlvbmhhbmRsZXIuaCINCi0NCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0lKYXZhU2NyaXB0LmgiDQotDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0vLyoJCQkJCQkJCQkJQ1BERlNES19XaWRnZXQgDQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi0jZGVmaW5lIElzRmxvYXRaZXJvKGYpCQkJCQkJKChmKSA8IDAuMDEgJiYgKGYpID4gLTAuMDEpDQotI2RlZmluZSBJc0Zsb2F0QmlnZ2VyKGZhLGZiKQkJCQkoKGZhKSA+IChmYikgJiYgIUlzRmxvYXRaZXJvKChmYSkgLSAoZmIpKSkNCi0jZGVmaW5lIElzRmxvYXRTbWFsbGVyKGZhLGZiKQkJCQkoKGZhKSA8IChmYikgJiYgIUlzRmxvYXRaZXJvKChmYSkgLSAoZmIpKSkNCi0jZGVmaW5lIElzRmxvYXRFcXVhbChmYSxmYikJCQkJCUlzRmxvYXRaZXJvKChmYSktKGZiKSkNCi0NCi1DUERGU0RLX1dpZGdldDo6Q1BERlNES19XaWRnZXQoQ1BERl9Bbm5vdCogcEFubm90LCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIENQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtKSA6DQotCQkJCQlDUERGU0RLX0Fubm90KHBBbm5vdCwgcFBhZ2VWaWV3KSwNCi0JCQkJCW1fcEludGVyRm9ybShwSW50ZXJGb3JtKSwNCi0JCQkJCW1fbkFwcEFnZSgwKSwNCi0JCQkJCW1fblZhbHVlQWdlKDApDQotew0KLQlBU1NFUlQobV9wSW50ZXJGb3JtICE9IE5VTEwpOw0KLX0NCi0NCi1DUERGU0RLX1dpZGdldDo6fkNQREZTREtfV2lkZ2V0KCkNCi17DQotDQotfQ0KLQ0KLUZYX0JPT0wJCUNQREZTREtfV2lkZ2V0OjpJc1dpZGdldEFwcGVhcmFuY2VWYWxpZChDUERGX0Fubm90OjpBcHBlYXJhbmNlTW9kZSBtb2RlKQ0KLXsNCi0JQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsNCi0JDQotCUNQREZfRGljdGlvbmFyeSogcEFQID0gbV9wQW5ub3QtPm1fcEFubm90RGljdC0+R2V0RGljdCgiQVAiKTsNCi0JaWYgKHBBUCA9PSBOVUxMKSByZXR1cm4gRkFMU0U7DQotCQ0KLQkvLyBDaG9vc2UgdGhlIHJpZ2h0IHN1Yi1hcA0KLQljb25zdCBGWF9DSEFSKiBhcF9lbnRyeSA9ICJOIjsNCi0JaWYgKG1vZGUgPT0gQ1BERl9Bbm5vdDo6RG93bikNCi0JCWFwX2VudHJ5ID0gIkQiOw0KLQllbHNlIGlmIChtb2RlID09IENQREZfQW5ub3Q6OlJvbGxvdmVyKQ0KLQkJYXBfZW50cnkgPSAiUiI7DQotCWlmICghcEFQLT5LZXlFeGlzdChhcF9lbnRyeSkpDQotCQlhcF9lbnRyeSA9ICJOIjsNCi0JDQotCS8vIEdldCB0aGUgQVAgc3RyZWFtIG9yIHN1YmRpcmVjdG9yeQ0KLQlDUERGX09iamVjdCogcHN1YiA9IHBBUC0+R2V0RWxlbWVudFZhbHVlKGFwX2VudHJ5KTsNCi0JaWYgKHBzdWIgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOw0KLQkNCi0JaW50IG5GaWVsZFR5cGUgPSBHZXRGaWVsZFR5cGUoKTsNCi0Jc3dpdGNoIChuRmllbGRUeXBlKQ0KLQl7DQotCWNhc2UgRklFTERUWVBFX1BVU0hCVVRUT046DQotCWNhc2UgRklFTERUWVBFX0NPTUJPQk9YOg0KLQljYXNlIEZJRUxEVFlQRV9MSVNUQk9YOg0KLQljYXNlIEZJRUxEVFlQRV9URVhURklFTEQ6DQotCWNhc2UgRklFTERUWVBFX1NJR05BVFVSRToNCi0JCXJldHVybiBwc3ViLT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUkVBTTsNCi0JY2FzZSBGSUVMRFRZUEVfQ0hFQ0tCT1g6DQotCWNhc2UgRklFTERUWVBFX1JBRElPQlVUVE9OOg0KLQkJaWYgKHBzdWItPkdldFR5cGUoKSA9PSBQREZPQkpfRElDVElPTkFSWSkgDQotCQl7DQotCQkJQ1BERl9EaWN0aW9uYXJ5KiBwU3ViRGljdCA9IChDUERGX0RpY3Rpb25hcnkqKXBzdWI7DQotCQkJDQotCQkJcmV0dXJuIHBTdWJEaWN0LT5HZXRTdHJlYW0odGhpcy0+R2V0QXBwU3RhdGUoKSkgIT0gTlVMTDsNCi0JCX0NCi0JCWVsc2UNCi0JCQlyZXR1cm4gRkFMU0U7DQotCQlicmVhazsNCi0JfQ0KLQkNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLWludAlDUERGU0RLX1dpZGdldDo6R2V0RmllbGRUeXBlKCkgY29uc3QNCi17DQotCUNQREZfRm9ybUZpZWxkKiBwRmllbGQgPSBHZXRGb3JtRmllbGQoKTsNCi0JQVNTRVJUKHBGaWVsZCAhPSBOVUxMKTsNCi0JDQotCXJldHVybiBwRmllbGQtPkdldEZpZWxkVHlwZSgpOw0KLX0NCi0NCi1pbnQgQ1BERlNES19XaWRnZXQ6OkdldEZpZWxkRmxhZ3MoKSBjb25zdA0KLXsNCi0JQ1BERl9JbnRlckZvcm0qIHBQREZJbnRlckZvcm0gPSBtX3BJbnRlckZvcm0tPkdldEludGVyRm9ybSgpOw0KLQlBU1NFUlQocFBERkludGVyRm9ybSAhPSBOVUxMKTsNCi0NCi0JQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sID0gcFBERkludGVyRm9ybS0+R2V0Q29udHJvbEJ5RGljdChtX3BBbm5vdC0+bV9wQW5ub3REaWN0KTsNCi0JQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSBwRm9ybUNvbnRyb2wtPkdldEZpZWxkKCk7DQotCXJldHVybiBwRm9ybUZpZWxkLT5HZXRGaWVsZEZsYWdzKCk7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQREZTREtfV2lkZ2V0OjpHZXRTdWJUeXBlKCkgY29uc3QNCi17DQotCWludCBuVHlwZSA9IEdldEZpZWxkVHlwZSgpOw0KLQkNCi0JaWYgKG5UeXBlID09IEZJRUxEVFlQRV9TSUdOQVRVUkUpDQotCQlyZXR1cm4gQkZGVF9TSUdOQVRVUkU7DQotCXJldHVybiBDUERGU0RLX0Fubm90OjpHZXRTdWJUeXBlKCk7DQotfQ0KLQ0KLUNQREZfRm9ybUZpZWxkKglDUERGU0RLX1dpZGdldDo6R2V0Rm9ybUZpZWxkKCkgY29uc3QNCi17DQotCUFTU0VSVChtX3BJbnRlckZvcm0gIT0gTlVMTCk7DQotCQ0KLQlDUERGX0Zvcm1Db250cm9sKiBwQ3RybCA9IEdldEZvcm1Db250cm9sKCk7CQ0KLQlBU1NFUlQocEN0cmwgIT0gTlVMTCk7DQotCQ0KLQlyZXR1cm4gcEN0cmwtPkdldEZpZWxkKCk7DQotfQ0KLQ0KLUNQREZfRm9ybUNvbnRyb2wqIENQREZTREtfV2lkZ2V0OjpHZXRGb3JtQ29udHJvbCgpIGNvbnN0DQotew0KLQlBU1NFUlQobV9wSW50ZXJGb3JtICE9IE5VTEwpOw0KLQkNCi0JQ1BERl9JbnRlckZvcm0qIHBQREZJbnRlckZvcm0gPSBtX3BJbnRlckZvcm0tPkdldEludGVyRm9ybSgpOw0KLQlBU1NFUlQocFBERkludGVyRm9ybSAhPSBOVUxMKTsNCi0JDQotCXJldHVybiBwUERGSW50ZXJGb3JtLT5HZXRDb250cm9sQnlEaWN0KEdldEFubm90RGljdCgpKTsNCi19DQotc3RhdGljIENQREZfRGljdGlvbmFyeSogQkZfR2V0RmllbGQoQ1BERl9EaWN0aW9uYXJ5KiBwRmllbGREaWN0LCBjb25zdCBGWF9DSEFSKiBuYW1lKQ0KLXsNCi0JaWYgKHBGaWVsZERpY3QgPT0gTlVMTCkgcmV0dXJuIE5VTEw7DQotCS8vIEZpcnN0IGNoZWNrIHRoZSBkaWN0aW9uYXJ5IGl0c2VsZg0KLQlDUERGX09iamVjdCogcEF0dHIgPSBwRmllbGREaWN0LT5HZXRFbGVtZW50VmFsdWUobmFtZSk7DQotCWlmIChwQXR0cikgcmV0dXJuIHBGaWVsZERpY3Q7DQotCQ0KLQkvLyBOb3cgd2UgbmVlZCB0byBzZWFyY2ggZnJvbSBwYXJlbnRzDQotCUNQREZfRGljdGlvbmFyeSogcFBhcmVudCA9IHBGaWVsZERpY3QtPkdldERpY3QoIlBhcmVudCIpOw0KLQlpZiAocFBhcmVudCA9PSBOVUxMKSByZXR1cm4gTlVMTDsNCi0JDQotCXJldHVybiBCRl9HZXRGaWVsZChwUGFyZW50LCBuYW1lKTsNCi19DQotDQotQ1BERl9Gb3JtQ29udHJvbCogQ1BERlNES19XaWRnZXQ6OkdldEZvcm1Db250cm9sKENQREZfSW50ZXJGb3JtKiBwSW50ZXJGb3JtLCBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpY3QpDQotew0KLQlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsNCi0JQVNTRVJUKHBBbm5vdERpY3QgIT0gTlVMTCk7DQotCQ0KLQlDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCA9IHBJbnRlckZvcm0tPkdldENvbnRyb2xCeURpY3QocEFubm90RGljdCk7DQotCQ0KLQlyZXR1cm4gcENvbnRyb2w7DQotfQ0KLQ0KLWludCBDUERGU0RLX1dpZGdldDo6R2V0Um90YXRlKCkgY29uc3QNCi17DQotCUNQREZfRm9ybUNvbnRyb2wqIHBDdHJsID0gdGhpcy0+R2V0Rm9ybUNvbnRyb2woKTsNCi0JQVNTRVJUKHBDdHJsICE9IE5VTEwpOw0KLQkNCi0JcmV0dXJuIHBDdHJsLT5HZXRSb3RhdGlvbigpICUgMzYwOw0KLX0NCi0NCi1GWF9CT09MCUNQREZTREtfV2lkZ2V0OjpHZXRGaWxsQ29sb3IoRlhfQ09MT1JSRUYmIGNvbG9yKSBjb25zdA0KLXsNCi0JQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1DdHJsID0gR2V0Rm9ybUNvbnRyb2woKTsNCi0JQVNTRVJUKHBGb3JtQ3RybCAhPSBOVUxMKTsNCi0JDQotCWludCBpQ29sb3JUeXBlID0gMDsJDQotCWNvbG9yID0gRlhfQVJHQlRPQ09MT1JSRUYocEZvcm1DdHJsLT5HZXRCYWNrZ3JvdW5kQ29sb3IoaUNvbG9yVHlwZSkpOw0KLQkNCi0JcmV0dXJuIGlDb2xvclR5cGUgIT0gQ09MT1JUWVBFX1RSQU5TUEFSRU5UOw0KLX0NCi0NCi1GWF9CT09MCUNQREZTREtfV2lkZ2V0OjpHZXRCb3JkZXJDb2xvcihGWF9DT0xPUlJFRiYgY29sb3IpIGNvbnN0DQotew0KLQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUN0cmwgPSBHZXRGb3JtQ29udHJvbCgpOw0KLQlBU1NFUlQocEZvcm1DdHJsICE9IE5VTEwpOw0KLQkNCi0JaW50IGlDb2xvclR5cGUgPSAwOwkNCi0JY29sb3IgPSBGWF9BUkdCVE9DT0xPUlJFRihwRm9ybUN0cmwtPkdldEJvcmRlckNvbG9yKGlDb2xvclR5cGUpKTsNCi0JDQotCXJldHVybiBpQ29sb3JUeXBlICE9IENPTE9SVFlQRV9UUkFOU1BBUkVOVDsNCi19DQotDQotRlhfQk9PTAlDUERGU0RLX1dpZGdldDo6R2V0VGV4dENvbG9yKEZYX0NPTE9SUkVGJiBjb2xvcikgY29uc3QNCi17DQotCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ3RybCA9IEdldEZvcm1Db250cm9sKCk7DQotCUFTU0VSVChwRm9ybUN0cmwgIT0gTlVMTCk7DQotCQ0KLQlDUERGX0RlZmF1bHRBcHBlYXJhbmNlIGRhID0gcEZvcm1DdHJsLT5HZXREZWZhdWx0QXBwZWFyYW5jZSgpOw0KLQlpZiAoZGEuSGFzQ29sb3IoKSkNCi0Jew0KLQkJRlhfQVJHQiBhcmdiOw0KLQkJaW50IGlDb2xvclR5cGUgPSBDT0xPUlRZUEVfVFJBTlNQQVJFTlQ7CQ0KLQkJZGEuR2V0Q29sb3IoYXJnYiwgaUNvbG9yVHlwZSk7DQotCQljb2xvciA9IEZYX0FSR0JUT0NPTE9SUkVGKGFyZ2IpOw0KLQkJDQotCQlyZXR1cm4gaUNvbG9yVHlwZSAhPSBDT0xPUlRZUEVfVFJBTlNQQVJFTlQ7DQotCX0NCi0JDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfRkxPQVQgQ1BERlNES19XaWRnZXQ6OkdldEZvbnRTaXplKCkgY29uc3QNCi17DQotCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ3RybCA9IEdldEZvcm1Db250cm9sKCk7DQotCUFTU0VSVChwRm9ybUN0cmwgIT0gTlVMTCk7DQotCQ0KLQlDUERGX0RlZmF1bHRBcHBlYXJhbmNlIHBEYSA9IHBGb3JtQ3RybC0+R2V0RGVmYXVsdEFwcGVhcmFuY2UoKTsNCi0JQ0ZYX0J5dGVTdHJpbmcgY3NGb250ID0gIiI7DQotCUZYX0ZMT0FUIGZGb250U2l6ZSA9IDAuMGY7DQotCXBEYS5HZXRGb250KGNzRm9udCwgZkZvbnRTaXplKTsNCi0JDQotCXJldHVybiBmRm9udFNpemU7DQotfQ0KLQ0KLWludAlDUERGU0RLX1dpZGdldDo6R2V0U2VsZWN0ZWRJbmRleChpbnQgbkluZGV4KSBjb25zdA0KLXsNCi0JQ1BERl9Gb3JtRmllbGQqCXBGb3JtRmllbGQgPSBHZXRGb3JtRmllbGQoKTsNCi0JQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotCQ0KLQlyZXR1cm4gcEZvcm1GaWVsZC0+R2V0U2VsZWN0ZWRJbmRleChuSW5kZXgpOw0KLX0NCi0NCi1DRlhfV2lkZVN0cmluZyBDUERGU0RLX1dpZGdldDo6R2V0VmFsdWUoKSBjb25zdA0KLXsNCi0JQ1BERl9Gb3JtRmllbGQqCXBGb3JtRmllbGQgPSBHZXRGb3JtRmllbGQoKTsNCi0JQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotCQ0KLQlyZXR1cm4gcEZvcm1GaWVsZC0+R2V0VmFsdWUoKTsNCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgQ1BERlNES19XaWRnZXQ6OkdldERlZmF1bHRWYWx1ZSgpIGNvbnN0DQotew0KLQlDUERGX0Zvcm1GaWVsZCoJcEZvcm1GaWVsZCA9IEdldEZvcm1GaWVsZCgpOw0KLQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0JDQotCXJldHVybiBwRm9ybUZpZWxkLT5HZXREZWZhdWx0VmFsdWUoKTsNCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgQ1BERlNES19XaWRnZXQ6OkdldE9wdGlvbkxhYmVsKGludCBuSW5kZXgpIGNvbnN0DQotew0KLQlDUERGX0Zvcm1GaWVsZCoJcEZvcm1GaWVsZCA9IEdldEZvcm1GaWVsZCgpOw0KLQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0JDQotCXJldHVybiBwRm9ybUZpZWxkLT5HZXRPcHRpb25MYWJlbChuSW5kZXgpOw0KLX0NCi0NCi1pbnQJQ1BERlNES19XaWRnZXQ6OkNvdW50T3B0aW9ucygpIGNvbnN0DQotew0KLQlDUERGX0Zvcm1GaWVsZCoJcEZvcm1GaWVsZCA9IEdldEZvcm1GaWVsZCgpOw0KLQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0JDQotCXJldHVybiBwRm9ybUZpZWxkLT5Db3VudE9wdGlvbnMoKTsNCi19DQotDQotRlhfQk9PTAlDUERGU0RLX1dpZGdldDo6SXNPcHRpb25TZWxlY3RlZChpbnQgbkluZGV4KSBjb25zdA0KLXsNCi0JQ1BERl9Gb3JtRmllbGQqCXBGb3JtRmllbGQgPSBHZXRGb3JtRmllbGQoKTsNCi0JQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotCQ0KLQlyZXR1cm4gcEZvcm1GaWVsZC0+SXNJdGVtU2VsZWN0ZWQobkluZGV4KTsNCi19DQotDQotaW50CUNQREZTREtfV2lkZ2V0OjpHZXRUb3BWaXNpYmxlSW5kZXgoKSBjb25zdA0KLXsNCi0JQ1BERl9Gb3JtRmllbGQqCXBGb3JtRmllbGQgPSBHZXRGb3JtRmllbGQoKTsNCi0JQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotCQ0KLQlyZXR1cm4gcEZvcm1GaWVsZC0+R2V0VG9wVmlzaWJsZUluZGV4KCk7DQotfQ0KLQ0KLUZYX0JPT0wJQ1BERlNES19XaWRnZXQ6OklzQ2hlY2tlZCgpIGNvbnN0DQotew0KLQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUN0cmwgPSBHZXRGb3JtQ29udHJvbCgpOw0KLQlBU1NFUlQocEZvcm1DdHJsICE9IE5VTEwpOw0KLQkNCi0JcmV0dXJuIHBGb3JtQ3RybC0+SXNDaGVja2VkKCk7DQotfQ0KLQ0KLWludAlDUERGU0RLX1dpZGdldDo6R2V0QWxpZ25tZW50KCkgY29uc3QNCi17DQotCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ3RybCA9IEdldEZvcm1Db250cm9sKCk7DQotCUFTU0VSVChwRm9ybUN0cmwgIT0gTlVMTCk7DQotCQ0KLQlyZXR1cm4gcEZvcm1DdHJsLT5HZXRDb250cm9sQWxpZ25tZW50KCk7DQotfQ0KLQ0KLWludAlDUERGU0RLX1dpZGdldDo6R2V0TWF4TGVuKCkgY29uc3QNCi17DQotCUNQREZfRm9ybUZpZWxkKglwRm9ybUZpZWxkID0gR2V0Rm9ybUZpZWxkKCk7DQotCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQkNCi0JcmV0dXJuIHBGb3JtRmllbGQtPkdldE1heExlbigpOw0KLX0NCi0NCi12b2lkIENQREZTREtfV2lkZ2V0OjpTZXRDaGVjayhGWF9CT09MIGJDaGVja2VkLCBGWF9CT09MIGJOb3RpZnkpDQotew0KLQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUN0cmwgPSBHZXRGb3JtQ29udHJvbCgpOw0KLQlBU1NFUlQocEZvcm1DdHJsICE9IE5VTEwpOw0KLQkNCi0JQ1BERl9Gb3JtRmllbGQqCXBGb3JtRmllbGQgPSBwRm9ybUN0cmwtPkdldEZpZWxkKCk7DQotCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQkNCi0JcEZvcm1GaWVsZC0+Q2hlY2tDb250cm9sKHBGb3JtRmllbGQtPkdldENvbnRyb2xJbmRleChwRm9ybUN0cmwpLCBiQ2hlY2tlZCwgYk5vdGlmeSk7DQotfQ0KLQ0KLXZvaWQgQ1BERlNES19XaWRnZXQ6OlNldFZhbHVlKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzVmFsdWUsIEZYX0JPT0wgYk5vdGlmeSkNCi17DQotCUNQREZfRm9ybUZpZWxkKglwRm9ybUZpZWxkID0gR2V0Rm9ybUZpZWxkKCk7DQotCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQkNCi0JcEZvcm1GaWVsZC0+U2V0VmFsdWUoc1ZhbHVlLCBiTm90aWZ5KTsNCi19DQotDQotdm9pZCBDUERGU0RLX1dpZGdldDo6U2V0RGVmYXVsdFZhbHVlKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzVmFsdWUpDQotew0KLX0NCi12b2lkIENQREZTREtfV2lkZ2V0OjpTZXRPcHRpb25TZWxlY3Rpb24oaW50IGluZGV4LCBGWF9CT09MIGJTZWxlY3RlZCwgRlhfQk9PTCBiTm90aWZ5KQ0KLXsNCi0JQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSBHZXRGb3JtRmllbGQoKTsNCi0JQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotCQ0KLQlwRm9ybUZpZWxkLT5TZXRJdGVtU2VsZWN0aW9uKGluZGV4LCBiU2VsZWN0ZWQsIGJOb3RpZnkpOw0KLX0NCi0NCi12b2lkIENQREZTREtfV2lkZ2V0OjpDbGVhclNlbGVjdGlvbihGWF9CT09MIGJOb3RpZnkpDQotew0KLQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IEdldEZvcm1GaWVsZCgpOw0KLQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0JDQotCXBGb3JtRmllbGQtPkNsZWFyU2VsZWN0aW9uKGJOb3RpZnkpOw0KLX0NCi0NCi12b2lkIENQREZTREtfV2lkZ2V0OjpTZXRUb3BWaXNpYmxlSW5kZXgoaW50IGluZGV4KQ0KLXsNCi19DQotDQotdm9pZCBDUERGU0RLX1dpZGdldDo6U2V0QXBwTW9kaWZpZWQoKQ0KLXsNCi0JbV9iQXBwTW9kaWZpZWQgPSBUUlVFOw0KLX0NCi0NCi12b2lkIENQREZTREtfV2lkZ2V0OjpDbGVhckFwcE1vZGlmaWVkKCkNCi17DQotCW1fYkFwcE1vZGlmaWVkID0gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BERlNES19XaWRnZXQ6OklzQXBwTW9kaWZpZWQoKSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fYkFwcE1vZGlmaWVkOw0KLX0NCi0NCi12b2lkIENQREZTREtfV2lkZ2V0OjpSZXNldEFwcGVhcmFuY2UoRlhfTFBDV1NUUiBzVmFsdWUsIEZYX0JPT0wgYlZhbHVlQ2hhbmdlZCkNCi17DQotCVNldEFwcE1vZGlmaWVkKCk7DQotDQotCW1fbkFwcEFnZSsrOw0KLQlpZiAobV9uQXBwQWdlID4gOTk5OTk5KQ0KLQkJbV9uQXBwQWdlID0gMDsNCi0JaWYgKGJWYWx1ZUNoYW5nZWQpDQotCQltX25WYWx1ZUFnZSsrOw0KLQ0KLQlpbnQgbkZpZWxkVHlwZSA9IEdldEZpZWxkVHlwZSgpOw0KLQkNCi0Jc3dpdGNoIChuRmllbGRUeXBlKQ0KLQl7DQotCWNhc2UgRklFTERUWVBFX1BVU0hCVVRUT046DQotCQlSZXNldEFwcGVhcmFuY2VfUHVzaEJ1dHRvbigpOw0KLQkJYnJlYWs7DQotCWNhc2UgRklFTERUWVBFX0NIRUNLQk9YOg0KLQkJUmVzZXRBcHBlYXJhbmNlX0NoZWNrQm94KCk7DQotCQlicmVhazsNCi0JY2FzZSBGSUVMRFRZUEVfUkFESU9CVVRUT046DQotCQlSZXNldEFwcGVhcmFuY2VfUmFkaW9CdXR0b24oKTsNCi0JCWJyZWFrOw0KLQljYXNlIEZJRUxEVFlQRV9DT01CT0JPWDoNCi0JCVJlc2V0QXBwZWFyYW5jZV9Db21ib0JveChzVmFsdWUpOw0KLQkJYnJlYWs7DQotCWNhc2UgRklFTERUWVBFX0xJU1RCT1g6DQotCQlSZXNldEFwcGVhcmFuY2VfTGlzdEJveCgpOw0KLQkJYnJlYWs7DQotCWNhc2UgRklFTERUWVBFX1RFWFRGSUVMRDoNCi0JCVJlc2V0QXBwZWFyYW5jZV9UZXh0RmllbGQoc1ZhbHVlKTsNCi0JCWJyZWFrOw0KLQl9DQotCQ0KLQlBU1NFUlQobV9wQW5ub3QgIT0gTlVMTCk7DQotCW1fcEFubm90LT5DbGVhckNhY2hlZEFQKCk7DQotfQ0KLQ0KLUNGWF9XaWRlU3RyaW5nIENQREZTREtfV2lkZ2V0OjpPbkZvcm1hdChpbnQgbkNvbW1pdEtleSwgRlhfQk9PTCYgYkZvcm1hdGVkKQ0KLXsNCi0gCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gR2V0Rm9ybUZpZWxkKCk7DQotIAlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0gCQ0KLSAJQVNTRVJUKG1fcEludGVyRm9ybSAhPSBOVUxMKTsNCi0JDQotCXJldHVybiBtX3BJbnRlckZvcm0tPk9uRm9ybWF0KHBGb3JtRmllbGQsIG5Db21taXRLZXksIGJGb3JtYXRlZCk7DQotDQotfQ0KLQ0KLXZvaWQgQ1BERlNES19XaWRnZXQ6OlJlc2V0RmllbGRBcHBlYXJhbmNlKEZYX0JPT0wgYlZhbHVlQ2hhbmdlZCkNCi17DQotCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gR2V0Rm9ybUZpZWxkKCk7DQotCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQkNCi0JQVNTRVJUKG1fcEludGVyRm9ybSAhPSBOVUxMKTsNCi0NCi0JbV9wSW50ZXJGb3JtLT5SZXNldEZpZWxkQXBwZWFyYW5jZShwRm9ybUZpZWxkLCBOVUxMLCBiVmFsdWVDaGFuZ2VkKTsNCi19DQotDQotdm9pZAlDUERGU0RLX1dpZGdldDo6RHJhd0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgY29uc3QgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwNCi0JCUNQREZfQW5ub3Q6OkFwcGVhcmFuY2VNb2RlIG1vZGUsIGNvbnN0IENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMpDQotew0KLQlpbnQgbkZpZWxkVHlwZSA9IEdldEZpZWxkVHlwZSgpOw0KLQkNCi0JaWYgKChuRmllbGRUeXBlID09IEZJRUxEVFlQRV9DSEVDS0JPWCB8fCBuRmllbGRUeXBlID09IEZJRUxEVFlQRV9SQURJT0JVVFRPTikgJiYNCi0JCW1vZGUgPT0gQ1BERl9Bbm5vdDo6Tm9ybWFsICYmIA0KLQkJIXRoaXMtPklzV2lkZ2V0QXBwZWFyYW5jZVZhbGlkKENQREZfQW5ub3Q6Ok5vcm1hbCkpDQotCXsNCi0JCUNGWF9QYXRoRGF0YSBwYXRoRGF0YTsNCi0JCQ0KLQkJQ1BERl9SZWN0IHJjQW5ub3QgPSB0aGlzLT5HZXRSZWN0KCk7DQotCQkNCi0JCXBhdGhEYXRhLkFwcGVuZFJlY3QocmNBbm5vdC5sZWZ0LCByY0Fubm90LmJvdHRvbSwNCi0JCQlyY0Fubm90LnJpZ2h0LCByY0Fubm90LnRvcCk7DQotCQkNCi0JCUNGWF9HcmFwaFN0YXRlRGF0YSBnc2Q7DQotCQlnc2QubV9MaW5lV2lkdGggPSAwLjBmOw0KLQkJDQotCQlwRGV2aWNlLT5EcmF3UGF0aCgmcGF0aERhdGEsIHBVc2VyMkRldmljZSwgJmdzZCwgMCwgMHhGRkFBQUFBQSwgRlhGSUxMX0FMVEVSTkFURSk7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlDUERGU0RLX0Fubm90OjpEcmF3QXBwZWFyYW5jZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIG1vZGUsIHBPcHRpb25zKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENQREZTREtfV2lkZ2V0OjpVcGRhdGVGaWVsZCgpDQotew0KLQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IEdldEZvcm1GaWVsZCgpOw0KLQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0JDQotCUFTU0VSVChtX3BJbnRlckZvcm0gIT0gTlVMTCk7DQotCW1fcEludGVyRm9ybS0+VXBkYXRlRmllbGQocEZvcm1GaWVsZCk7DQotfQ0KLQ0KLXZvaWQgQ1BERlNES19XaWRnZXQ6OkRyYXdTaGFkb3coQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQ0KLXsNCi0gCUFTU0VSVChtX3BJbnRlckZvcm0gIT0gTlVMTCk7DQotIA0KLQlpbnQgbkZpZWxkVHlwZSA9IEdldEZpZWxkVHlwZSgpOw0KLSAJaWYgKG1fcEludGVyRm9ybS0+SXNOZWVkSGlnaExpZ2h0KG5GaWVsZFR5cGUpKQ0KLSAJew0KLSANCi0vLyAgCQlpZiAobkZpZWxkVHlwZSAhPSBGSUVMRFRZUEVfUFVTSEJVVFRPTikNCi0vLyAgCQl7DQotCQkJQ1BERl9SZWN0IHJjICA9IEdldFJlY3QoKTsNCi0JCQlGWF9DT0xPUlJFRiBjb2xvciA9IG1fcEludGVyRm9ybS0+R2V0SGlnaGxpZ2h0Q29sb3IobkZpZWxkVHlwZSk7DQotCQkJRlhfQllURSBhbHBoYSA9IG1fcEludGVyRm9ybS0+R2V0SGlnaGxpZ2h0QWxwaGEoKTsNCi0NCi0JCQlDRlhfRmxvYXRSZWN0IHJjRGV2aWNlOw0KLQkJCUFTU0VSVChtX3BJbnRlckZvcm0tPkdldERvY3VtZW50KCkpOw0KLQkJCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBtX3BJbnRlckZvcm0tPkdldERvY3VtZW50KCktPkdldEVudigpOw0KLQkJCWlmKCFwRW52KQ0KLQkJCQlyZXR1cm47DQotCQkJQ0ZYX0FmZmluZU1hdHJpeCBwYWdlMmRldmljZTsNCi0JCQlwUGFnZVZpZXctPkdldEN1cnJlbnRNYXRyaXgocGFnZTJkZXZpY2UpOw0KLQkJCXBhZ2UyZGV2aWNlLlRyYW5zZm9ybSgoKEZYX0ZMT0FUKXJjLmxlZnQpLCAoKEZYX0ZMT0FUKXJjLmJvdHRvbSksIHJjRGV2aWNlLmxlZnQsIHJjRGV2aWNlLmJvdHRvbSk7DQotLy8gCQkJcEVudi0+RkZJX1BhZ2VUb0RldmljZShtX3BQYWdlVmlldy0+R2V0UERGUGFnZSgpLCByYy5sZWZ0LCByYy5ib3R0b20sICZyY0RldmljZS5sZWZ0LCAmcmNEZXZpY2UuYm90dG9tKTsNCi0vLyAJCQlwRW52LT5GRklfUGFnZVRvRGV2aWNlKG1fcFBhZ2VWaWV3LT5HZXRQREZQYWdlKCksIHJjLnJpZ2h0LCByYy50b3AsICZyY0RldmljZS5yaWdodCwgJnJjRGV2aWNlLnRvcCk7DQotCQkJcGFnZTJkZXZpY2UuVHJhbnNmb3JtKCgoRlhfRkxPQVQpcmMucmlnaHQpLCAoKEZYX0ZMT0FUKXJjLnRvcCksIHJjRGV2aWNlLnJpZ2h0LCByY0RldmljZS50b3ApOw0KLQ0KLQkJCXJjRGV2aWNlLk5vcm1hbGl6ZSgpOw0KLQ0KLQkJCUZYX0FSR0IgYXJnYiA9IEFyZ2JFbmNvZGUoKGludClhbHBoYSwgY29sb3IpOw0KLQkJCUZYX1JFQ1QgcmNEZXYoKGludClyY0RldmljZS5sZWZ0LChpbnQpcmNEZXZpY2UudG9wLChpbnQpcmNEZXZpY2UucmlnaHQsKGludClyY0RldmljZS5ib3R0b20pOw0KLQkJCXBEZXZpY2UtPkZpbGxSZWN0KCZyY0RldiwgYXJnYik7CQ0KLQkJCS8qIAkJfSovDQotCX0NCi19DQotDQotdm9pZCBDUERGU0RLX1dpZGdldDo6UmVzZXRBcHBlYXJhbmNlX1B1c2hCdXR0b24oKQ0KLXsNCi0JQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2wgPSBHZXRGb3JtQ29udHJvbCgpOw0KLQlBU1NFUlQocENvbnRyb2wgIT0gTlVMTCk7DQotDQotDQotCQ0KLQlDUERGX1JlY3QgcmNXaW5kb3cgPSBHZXRSb3RhdGVkUmVjdCgpOwkNCi0NCi0JRlhfSU5UMzIgbkxheW91dCA9IDA7DQotDQotCXN3aXRjaCAocENvbnRyb2wtPkdldFRleHRQb3NpdGlvbigpKQ0KLQl7DQotCWNhc2UgVEVYVFBPU19JQ09OOg0KLQkJbkxheW91dCA9IFBQQkxfSUNPTjsNCi0JCWJyZWFrOw0KLQljYXNlIFRFWFRQT1NfQkVMT1c6DQotCQluTGF5b3V0ID0gUFBCTF9JQ09OVE9QTEFCRUxCT1RUT007DQotCQlicmVhazsNCi0JY2FzZSBURVhUUE9TX0FCT1ZFOg0KLQkJbkxheW91dCA9IFBQQkxfTEFCRUxUT1BJQ09OQk9UVE9NOw0KLQkJYnJlYWs7DQotCWNhc2UgVEVYVFBPU19SSUdIVDoNCi0JCW5MYXlvdXQgPSBQUEJMX0lDT05MRUZUTEFCRUxSSUdIVDsNCi0JCWJyZWFrOw0KLQljYXNlIFRFWFRQT1NfTEVGVDoNCi0JCW5MYXlvdXQgPSBQUEJMX0xBQkVMTEVGVElDT05SSUdIVDsNCi0JCWJyZWFrOw0KLQljYXNlIFRFWFRQT1NfT1ZFUkxBSUQ6DQotCQluTGF5b3V0ID0gUFBCTF9MQUJFTE9WRVJJQ09OOw0KLQkJYnJlYWs7DQotCWRlZmF1bHQ6DQotCQluTGF5b3V0ID0gUFBCTF9MQUJFTDsNCi0JCWJyZWFrOw0KLQl9DQotDQotCUNQV0xfQ29sb3IgY3JCYWNrZ3JvdW5kLCBjckJvcmRlcjsNCi0NCi0JaW50IGlDb2xvclR5cGU7DQotCUZYX0ZMT0FUIGZjWzRdOw0KLQ0KLQlwQ29udHJvbC0+R2V0T3JpZ2luYWxCYWNrZ3JvdW5kQ29sb3IoaUNvbG9yVHlwZSwgZmMpOw0KLQlpZiAoaUNvbG9yVHlwZSA+IDApDQotCQljckJhY2tncm91bmQgPSBDUFdMX0NvbG9yKGlDb2xvclR5cGUsIGZjWzBdLCBmY1sxXSwgZmNbMl0sIGZjWzNdKTsNCi0NCi0JcENvbnRyb2wtPkdldE9yaWdpbmFsQm9yZGVyQ29sb3IoaUNvbG9yVHlwZSwgZmMpOw0KLQlpZiAoaUNvbG9yVHlwZSA+IDApDQotCQljckJvcmRlciA9IENQV0xfQ29sb3IoaUNvbG9yVHlwZSwgZmNbMF0sIGZjWzFdLCBmY1syXSwgZmNbM10pOw0KLQ0KLQlGWF9GTE9BVCBmQm9yZGVyV2lkdGggPSAoRlhfRkxPQVQpR2V0Qm9yZGVyV2lkdGgoKTsNCi0JRlhfSU5UMzIgbkJvcmRlclN0eWxlID0gMDsNCi0JQ1BXTF9EYXNoIGRzQm9yZGVyKDMsMCwwKTsNCi0JQ1BXTF9Db2xvciBjckxlZnRUb3AsY3JSaWdodEJvdHRvbTsNCi0NCi0Jc3dpdGNoIChHZXRCb3JkZXJTdHlsZSgpKQ0KLQl7DQotCWNhc2UgQkJTX0RBU0g6DQotCQluQm9yZGVyU3R5bGUgPSBQQlNfREFTSDsNCi0JCWRzQm9yZGVyID0gQ1BXTF9EYXNoKDMsIDMsIDApOw0KLQkJYnJlYWs7DQotCWNhc2UgQkJTX0JFVkVMRUQ6DQotCQluQm9yZGVyU3R5bGUgPSBQQlNfQkVWRUxFRDsNCi0JCWZCb3JkZXJXaWR0aCAqPSAyOw0KLQkJY3JMZWZ0VG9wID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwxKTsNCi0JCWNyUmlnaHRCb3R0b20gPSBDUFdMX1V0aWxzOjpEZXZpZGVDb2xvcihjckJhY2tncm91bmQsMik7DQotCQlicmVhazsNCi0JY2FzZSBCQlNfSU5TRVQ6DQotCQluQm9yZGVyU3R5bGUgPSBQQlNfSU5TRVQ7DQotCQlmQm9yZGVyV2lkdGggKj0gMjsNCi0JCWNyTGVmdFRvcCA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMC41KTsNCi0JCWNyUmlnaHRCb3R0b20gPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLDAuNzUpOw0KLQkJYnJlYWs7DQotCWNhc2UgQkJTX1VOREVSTElORToNCi0JCW5Cb3JkZXJTdHlsZSA9IFBCU19VTkRFUkxJTkVEOw0KLQkJYnJlYWs7DQotCWRlZmF1bHQ6IA0KLQkJbkJvcmRlclN0eWxlID0gUEJTX1NPTElEOw0KLQkJYnJlYWs7DQotCX0NCi0NCi0JQ1BERl9SZWN0IHJjQ2xpZW50ID0gQ1BXTF9VdGlsczo6RGVmbGF0ZVJlY3QocmNXaW5kb3csZkJvcmRlcldpZHRoKTsJDQotDQotCUNQV0xfQ29sb3IgY3JUZXh0KENPTE9SVFlQRV9HUkFZLDApOw0KLQ0KLQlGWF9GTE9BVCBmRm9udFNpemUgPSAxMi4wZjsNCi0JQ0ZYX0J5dGVTdHJpbmcgY3NOYW1lVGFnOw0KLQ0KLQlDUERGX0RlZmF1bHRBcHBlYXJhbmNlIGRhID0gcENvbnRyb2wtPkdldERlZmF1bHRBcHBlYXJhbmNlKCk7DQotCWlmIChkYS5IYXNDb2xvcigpKQ0KLQl7DQotCQlkYS5HZXRDb2xvcihpQ29sb3JUeXBlLCBmYyk7DQotCQljclRleHQgPSBDUFdMX0NvbG9yKGlDb2xvclR5cGUsIGZjWzBdLCBmY1sxXSwgZmNbMl0sIGZjWzNdKTsNCi0JfQ0KLQ0KLQlpZiAoZGEuSGFzRm9udCgpKSANCi0JCWRhLkdldEZvbnQoY3NOYW1lVGFnLCBmRm9udFNpemUpOw0KLQ0KLQlDRlhfV2lkZVN0cmluZyBjc1dDYXB0aW9uOw0KLQlDRlhfV2lkZVN0cmluZyBjc05vcm1hbENhcHRpb24sIGNzUm9sbG92ZXJDYXB0aW9uLCBjc0Rvd25DYXB0aW9uOw0KLQ0KLQlpZiAocENvbnRyb2wtPkhhc01LRW50cnkoIkNBIikpDQotCXsNCi0JCWNzTm9ybWFsQ2FwdGlvbiA9IHBDb250cm9sLT5HZXROb3JtYWxDYXB0aW9uKCk7DQotCX0NCi0JaWYgKHBDb250cm9sLT5IYXNNS0VudHJ5KCJSQyIpKQ0KLQl7DQotCQljc1JvbGxvdmVyQ2FwdGlvbiA9IHBDb250cm9sLT5HZXRSb2xsb3ZlckNhcHRpb24oKTsNCi0JfQ0KLQlpZiAocENvbnRyb2wtPkhhc01LRW50cnkoIkFDIikpDQotCXsNCi0JCWNzRG93bkNhcHRpb24gPSBwQ29udHJvbC0+R2V0RG93bkNhcHRpb24oKTsNCi0JfQ0KLQ0KLQlDUERGX1N0cmVhbSogcE5vcm1hbEljb24gPSBOVUxMOw0KLQlDUERGX1N0cmVhbSogcFJvbGxvdmVySWNvbiA9IE5VTEw7DQotCUNQREZfU3RyZWFtKiBwRG93bkljb24gPSBOVUxMOw0KLQ0KLQlpZiAocENvbnRyb2wtPkhhc01LRW50cnkoIkkiKSkNCi0Jew0KLQkJcE5vcm1hbEljb24gPSBwQ29udHJvbC0+R2V0Tm9ybWFsSWNvbigpOw0KLQl9DQotCWlmIChwQ29udHJvbC0+SGFzTUtFbnRyeSgiUkkiKSkNCi0Jew0KLQkJcFJvbGxvdmVySWNvbiA9IHBDb250cm9sLT5HZXRSb2xsb3Zlckljb24oKTsNCi0JfQ0KLQlpZiAocENvbnRyb2wtPkhhc01LRW50cnkoIklYIikpDQotCXsNCi0JCXBEb3duSWNvbiA9IHBDb250cm9sLT5HZXREb3duSWNvbigpOw0KLQl9DQotDQotCWlmIChwTm9ybWFsSWNvbikNCi0Jew0KLQkJaWYgKENQREZfRGljdGlvbmFyeSogcEltYWdlRGljdCA9IHBOb3JtYWxJY29uLT5HZXREaWN0KCkpDQotCQl7DQotCQkJaWYgKHBJbWFnZURpY3QtPkdldFN0cmluZygiTmFtZSIpLklzRW1wdHkoKSkNCi0JCQkJcEltYWdlRGljdC0+U2V0QXRTdHJpbmcoIk5hbWUiLCAiSW1nQSIpOw0KLQkJfQ0KLQl9DQotDQotCWlmIChwUm9sbG92ZXJJY29uKQ0KLQl7DQotCQlpZiAoQ1BERl9EaWN0aW9uYXJ5KiBwSW1hZ2VEaWN0ID0gcFJvbGxvdmVySWNvbi0+R2V0RGljdCgpKQ0KLQkJew0KLQkJCWlmIChwSW1hZ2VEaWN0LT5HZXRTdHJpbmcoIk5hbWUiKS5Jc0VtcHR5KCkpDQotCQkJCXBJbWFnZURpY3QtPlNldEF0U3RyaW5nKCJOYW1lIiwgIkltZ0IiKTsNCi0JCX0NCi0JfQ0KLQ0KLQlpZiAocERvd25JY29uKQ0KLQl7DQotCQlpZiAoQ1BERl9EaWN0aW9uYXJ5KiBwSW1hZ2VEaWN0ID0gcERvd25JY29uLT5HZXREaWN0KCkpDQotCQl7DQotCQkJaWYgKHBJbWFnZURpY3QtPkdldFN0cmluZygiTmFtZSIpLklzRW1wdHkoKSkNCi0JCQkJcEltYWdlRGljdC0+U2V0QXRTdHJpbmcoIk5hbWUiLCAiSW1nQyIpOw0KLQkJfQ0KLQl9DQotDQotCUNQREZfSWNvbkZpdCBpY29uRml0ID0gcENvbnRyb2wtPkdldEljb25GaXQoKTsNCi0NCi0vLyAJQVNTRVJUKHRoaXMtPm1fcEJhc2VGb3JtICE9IE5VTEwpOw0KLQlBU1NFUlQodGhpcy0+bV9wSW50ZXJGb3JtICE9IE5VTEwpOw0KLQlDUERGU0RLX0RvY3VtZW50KiBwRG9jID0gbV9wSW50ZXJGb3JtLT5HZXREb2N1bWVudCgpOw0KLQlBU1NFUlQocERvYyAhPSBOVUxMKTsNCi0JQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IHBEb2MtPkdldEVudigpOw0KLQ0KLSAJQ0JBX0ZvbnRNYXAgRm9udE1hcCh0aGlzLHBFbnYtPkdldFN5c0hhbmRsZXIoKSk7Ly8sIElTeXN0ZW1IYW5kbGU6OkdldFN5c3RlbUhhbmRsZXIobV9wQmFzZUZvcm0tPkdldEVudigpKSk7DQotCUZvbnRNYXAuSW5pdGlhbCgpOw0KLQ0KLQlGb250TWFwLlNldEFQVHlwZSgiTiIpOw0KLQ0KLQlDRlhfQnl0ZVN0cmluZyBjc0FQID0gQ1BXTF9VdGlsczo6R2V0UmVjdEZpbGxBcHBTdHJlYW0ocmNXaW5kb3csIGNyQmFja2dyb3VuZCkgKyANCi0JCUNQV0xfVXRpbHM6OkdldEJvcmRlckFwcFN0cmVhbShyY1dpbmRvdywgZkJvcmRlcldpZHRoLCBjckJvcmRlciwgY3JMZWZ0VG9wLCBjclJpZ2h0Qm90dG9tLCBuQm9yZGVyU3R5bGUsIGRzQm9yZGVyKSArDQotCQlDUFdMX1V0aWxzOjpHZXRQdXNoQnV0dG9uQXBwU3RyZWFtKGljb25GaXQuR2V0Rml0dGluZ0JvdW5kcygpID8gcmNXaW5kb3cgOiByY0NsaWVudCwgJkZvbnRNYXAsIHBOb3JtYWxJY29uLCBpY29uRml0LCBjc05vcm1hbENhcHRpb24sIGNyVGV4dCwgZkZvbnRTaXplLCBuTGF5b3V0KTsNCi0NCi0JV3JpdGVBcHBlYXJhbmNlKCJOIiwgR2V0Um90YXRlZFJlY3QoKSwgR2V0TWF0cml4KCksIGNzQVApOw0KLQlpZiAocE5vcm1hbEljb24pDQotCQlBZGRJbWFnZVRvQXBwZWFyYW5jZSgiTiIsIHBOb3JtYWxJY29uKTsNCi0NCi0JQ1BERl9Gb3JtQ29udHJvbDo6SGlnaGxpZ2h0aW5nTW9kZSBlSExNID0gcENvbnRyb2wtPkdldEhpZ2hsaWdodGluZ01vZGUoKTsNCi0JaWYgKGVITE0gPT0gQ1BERl9Gb3JtQ29udHJvbDo6UHVzaCB8fCBlSExNID09IENQREZfRm9ybUNvbnRyb2w6OlRvZ2dsZSkNCi0Jew0KLQkJaWYgKGNzUm9sbG92ZXJDYXB0aW9uLklzRW1wdHkoKSAmJiAhcFJvbGxvdmVySWNvbikJCQkNCi0JCXsNCi0JCQljc1JvbGxvdmVyQ2FwdGlvbiA9IGNzTm9ybWFsQ2FwdGlvbjsNCi0JCQlwUm9sbG92ZXJJY29uID0gcE5vcm1hbEljb247DQotCQl9DQotDQotCQlGb250TWFwLlNldEFQVHlwZSgiUiIpOw0KLQ0KLQkJY3NBUCA9IENQV0xfVXRpbHM6OkdldFJlY3RGaWxsQXBwU3RyZWFtKHJjV2luZG93LCBjckJhY2tncm91bmQpICsgDQotCQkJCUNQV0xfVXRpbHM6OkdldEJvcmRlckFwcFN0cmVhbShyY1dpbmRvdywgZkJvcmRlcldpZHRoLCBjckJvcmRlciwgY3JMZWZ0VG9wLCBjclJpZ2h0Qm90dG9tLCBuQm9yZGVyU3R5bGUsIGRzQm9yZGVyKSArDQotCQkJCUNQV0xfVXRpbHM6OkdldFB1c2hCdXR0b25BcHBTdHJlYW0oaWNvbkZpdC5HZXRGaXR0aW5nQm91bmRzKCkgPyByY1dpbmRvdyA6IHJjQ2xpZW50LCAmRm9udE1hcCwgcFJvbGxvdmVySWNvbiwgaWNvbkZpdCwgY3NSb2xsb3ZlckNhcHRpb24sIGNyVGV4dCwgZkZvbnRTaXplLCBuTGF5b3V0KTsNCi0NCi0JCVdyaXRlQXBwZWFyYW5jZSgiUiIsIEdldFJvdGF0ZWRSZWN0KCksIEdldE1hdHJpeCgpLCBjc0FQKTsNCi0JCWlmIChwUm9sbG92ZXJJY29uKQ0KLQkJCUFkZEltYWdlVG9BcHBlYXJhbmNlKCJSIiwgcFJvbGxvdmVySWNvbik7DQotDQotCQlpZiAoY3NEb3duQ2FwdGlvbi5Jc0VtcHR5KCkgJiYgIXBEb3duSWNvbikNCi0JCXsNCi0JCQljc0Rvd25DYXB0aW9uID0gY3NOb3JtYWxDYXB0aW9uOw0KLQkJCXBEb3duSWNvbiA9IHBOb3JtYWxJY29uOw0KLQkJfQ0KLQ0KLQkJc3dpdGNoIChuQm9yZGVyU3R5bGUpDQotCQl7DQotCQljYXNlIFBCU19CRVZFTEVEOg0KLQkJCXsNCi0JCQkJQ1BXTF9Db2xvciBjclRlbXAgPSBjckxlZnRUb3A7DQotCQkJCWNyTGVmdFRvcCA9IGNyUmlnaHRCb3R0b207DQotCQkJCWNyUmlnaHRCb3R0b20gPSBjclRlbXA7DQotCQkJfQ0KLQkJCWJyZWFrOw0KLQkJY2FzZSBQQlNfSU5TRVQ6DQotCQkJY3JMZWZ0VG9wID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwwKTsNCi0JCQljclJpZ2h0Qm90dG9tID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwxKTsNCi0JCQlicmVhazsNCi0JCX0NCi0JCQ0KLQkJRm9udE1hcC5TZXRBUFR5cGUoIkQiKTsNCi0NCi0JCWNzQVAgPSBDUFdMX1V0aWxzOjpHZXRSZWN0RmlsbEFwcFN0cmVhbShyY1dpbmRvdywgQ1BXTF9VdGlsczo6U3Vic3RyYWN0Q29sb3IoY3JCYWNrZ3JvdW5kLDAuMjVmKSkgKyANCi0JCQlDUFdMX1V0aWxzOjpHZXRCb3JkZXJBcHBTdHJlYW0ocmNXaW5kb3csIGZCb3JkZXJXaWR0aCwgY3JCb3JkZXIsIGNyTGVmdFRvcCwgY3JSaWdodEJvdHRvbSwgbkJvcmRlclN0eWxlLCBkc0JvcmRlcikgKyANCi0JCQlDUFdMX1V0aWxzOjpHZXRQdXNoQnV0dG9uQXBwU3RyZWFtKGljb25GaXQuR2V0Rml0dGluZ0JvdW5kcygpID8gcmNXaW5kb3cgOiByY0NsaWVudCwgJkZvbnRNYXAsIHBEb3duSWNvbiwgaWNvbkZpdCwgY3NEb3duQ2FwdGlvbiwgY3JUZXh0LCBmRm9udFNpemUsIG5MYXlvdXQpOw0KLQ0KLQkJV3JpdGVBcHBlYXJhbmNlKCJEIiwgR2V0Um90YXRlZFJlY3QoKSwgR2V0TWF0cml4KCksIGNzQVApOw0KLQkJaWYgKHBEb3duSWNvbikNCi0JCQlBZGRJbWFnZVRvQXBwZWFyYW5jZSgiRCIsIHBEb3duSWNvbik7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlSZW1vdmVBcHBlYXJhbmNlKCJEIik7DQotCQlSZW1vdmVBcHBlYXJhbmNlKCJSIik7DQotCX0NCi19DQotDQotdm9pZCBDUERGU0RLX1dpZGdldDo6UmVzZXRBcHBlYXJhbmNlX0NoZWNrQm94KCkNCi17DQotCUNQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sID0gR2V0Rm9ybUNvbnRyb2woKTsNCi0JQVNTRVJUKHBDb250cm9sICE9IE5VTEwpOw0KLQ0KLQ0KLQ0KLQlDUFdMX0NvbG9yIGNyQmFja2dyb3VuZCwgY3JCb3JkZXIsIGNyVGV4dDsNCi0JDQotCWludCBpQ29sb3JUeXBlOw0KLQlGWF9GTE9BVCBmY1s0XTsNCi0NCi0JcENvbnRyb2wtPkdldE9yaWdpbmFsQmFja2dyb3VuZENvbG9yKGlDb2xvclR5cGUsIGZjKTsNCi0JaWYgKGlDb2xvclR5cGUgPiAwKQ0KLQkJY3JCYWNrZ3JvdW5kID0gQ1BXTF9Db2xvcihpQ29sb3JUeXBlLCBmY1swXSwgZmNbMV0sIGZjWzJdLCBmY1szXSk7DQotDQotCXBDb250cm9sLT5HZXRPcmlnaW5hbEJvcmRlckNvbG9yKGlDb2xvclR5cGUsIGZjKTsNCi0JaWYgKGlDb2xvclR5cGUgPiAwKQ0KLQkJY3JCb3JkZXIgPSBDUFdMX0NvbG9yKGlDb2xvclR5cGUsIGZjWzBdLCBmY1sxXSwgZmNbMl0sIGZjWzNdKTsNCi0NCi0JRlhfRkxPQVQgZkJvcmRlcldpZHRoID0gKEZYX0ZMT0FUKUdldEJvcmRlcldpZHRoKCk7DQotCUZYX0lOVDMyIG5Cb3JkZXJTdHlsZSA9IDA7DQotCUNQV0xfRGFzaCBkc0JvcmRlcigzLDAsMCk7DQotCUNQV0xfQ29sb3IgY3JMZWZ0VG9wLGNyUmlnaHRCb3R0b207DQotDQotCXN3aXRjaCAoR2V0Qm9yZGVyU3R5bGUoKSkNCi0Jew0KLQljYXNlIEJCU19EQVNIOg0KLQkJbkJvcmRlclN0eWxlID0gUEJTX0RBU0g7DQotCQlkc0JvcmRlciA9IENQV0xfRGFzaCgzLCAzLCAwKTsNCi0JCWJyZWFrOw0KLQljYXNlIEJCU19CRVZFTEVEOg0KLQkJbkJvcmRlclN0eWxlID0gUEJTX0JFVkVMRUQ7DQotCQlmQm9yZGVyV2lkdGggKj0gMjsNCi0JCWNyTGVmdFRvcCA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMSk7DQotCQljclJpZ2h0Qm90dG9tID0gQ1BXTF9VdGlsczo6RGV2aWRlQ29sb3IoY3JCYWNrZ3JvdW5kLDIpOw0KLQkJYnJlYWs7DQotCWNhc2UgQkJTX0lOU0VUOg0KLQkJbkJvcmRlclN0eWxlID0gUEJTX0lOU0VUOw0KLQkJZkJvcmRlcldpZHRoICo9IDI7DQotCQljckxlZnRUb3AgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLDAuNSk7DQotCQljclJpZ2h0Qm90dG9tID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwwLjc1KTsNCi0JCWJyZWFrOw0KLQljYXNlIEJCU19VTkRFUkxJTkU6DQotCQluQm9yZGVyU3R5bGUgPSBQQlNfVU5ERVJMSU5FRDsNCi0JCWJyZWFrOw0KLQlkZWZhdWx0OiANCi0JCW5Cb3JkZXJTdHlsZSA9IFBCU19TT0xJRDsNCi0JCWJyZWFrOw0KLQl9DQotDQotCUNQREZfUmVjdCByY1dpbmRvdyA9IEdldFJvdGF0ZWRSZWN0KCk7DQotCUNQREZfUmVjdCByY0NsaWVudCA9IENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KHJjV2luZG93LGZCb3JkZXJXaWR0aCk7DQotDQotCUNQREZfRGVmYXVsdEFwcGVhcmFuY2UgZGEgPSBwQ29udHJvbC0+R2V0RGVmYXVsdEFwcGVhcmFuY2UoKTsNCi0JaWYgKGRhLkhhc0NvbG9yKCkpDQotCXsNCi0JCWRhLkdldENvbG9yKGlDb2xvclR5cGUsIGZjKTsNCi0JCWNyVGV4dCA9IENQV0xfQ29sb3IoaUNvbG9yVHlwZSwgZmNbMF0sIGZjWzFdLCBmY1syXSwgZmNbM10pOw0KLQl9DQotDQotCUZYX0lOVDMyIG5TdHlsZSA9IDA7DQotDQotCUNGWF9XaWRlU3RyaW5nIGNzV0NhcHRpb24gPSBwQ29udHJvbC0+R2V0Tm9ybWFsQ2FwdGlvbigpOw0KLQlpZiAoY3NXQ2FwdGlvbi5HZXRMZW5ndGgoKSA+IDApDQotCXsNCi0JCXN3aXRjaCAoY3NXQ2FwdGlvblswXSkNCi0JCXsNCi0JCWNhc2UgTCdsJzoNCi0JCQluU3R5bGUgPSBQQ1NfQ0lSQ0xFOwkJCQ0KLQkJCWJyZWFrOw0KLQkJY2FzZSBMJzgnOg0KLQkJCW5TdHlsZSA9IFBDU19DUk9TUzsNCi0JCQlicmVhazsNCi0JCWNhc2UgTCd1JzoNCi0JCQluU3R5bGUgPSBQQ1NfRElBTU9ORDsNCi0JCQlicmVhazsNCi0JCWNhc2UgTCduJzoNCi0JCQluU3R5bGUgPSBQQ1NfU1FVQVJFOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSBMJ0gnOg0KLQkJCW5TdHlsZSA9IFBDU19TVEFSOw0KLQkJCWJyZWFrOw0KLQkJZGVmYXVsdDogLy9MJzQnDQotCQkJblN0eWxlID0gUENTX0NIRUNLOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJblN0eWxlID0gUENTX0NIRUNLOw0KLQl9DQotDQotCUNGWF9CeXRlU3RyaW5nIGNzQVBfTl9PTiA9IENQV0xfVXRpbHM6OkdldFJlY3RGaWxsQXBwU3RyZWFtKHJjV2luZG93LGNyQmFja2dyb3VuZCkgKw0KLQkJQ1BXTF9VdGlsczo6R2V0Qm9yZGVyQXBwU3RyZWFtKHJjV2luZG93LGZCb3JkZXJXaWR0aCxjckJvcmRlcixjckxlZnRUb3AsY3JSaWdodEJvdHRvbSxuQm9yZGVyU3R5bGUsZHNCb3JkZXIpOw0KLQ0KLQlDRlhfQnl0ZVN0cmluZyBjc0FQX05fT0ZGID0gY3NBUF9OX09OOw0KLQ0KLQlzd2l0Y2ggKG5Cb3JkZXJTdHlsZSkNCi0Jew0KLQljYXNlIFBCU19CRVZFTEVEOg0KLQkJew0KLQkJCUNQV0xfQ29sb3IgY3JUZW1wID0gY3JMZWZ0VG9wOw0KLQkJCWNyTGVmdFRvcCA9IGNyUmlnaHRCb3R0b207DQotCQkJY3JSaWdodEJvdHRvbSA9IGNyVGVtcDsNCi0JCX0NCi0JCWJyZWFrOw0KLQljYXNlIFBCU19JTlNFVDoNCi0JCWNyTGVmdFRvcCA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMCk7DQotCQljclJpZ2h0Qm90dG9tID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwxKTsNCi0JCWJyZWFrOw0KLQl9DQotDQotCUNGWF9CeXRlU3RyaW5nIGNzQVBfRF9PTiA9IENQV0xfVXRpbHM6OkdldFJlY3RGaWxsQXBwU3RyZWFtKHJjV2luZG93LENQV0xfVXRpbHM6OlN1YnN0cmFjdENvbG9yKGNyQmFja2dyb3VuZCwwLjI1ZikpICsgDQotCQlDUFdMX1V0aWxzOjpHZXRCb3JkZXJBcHBTdHJlYW0ocmNXaW5kb3csZkJvcmRlcldpZHRoLGNyQm9yZGVyLGNyTGVmdFRvcCxjclJpZ2h0Qm90dG9tLG5Cb3JkZXJTdHlsZSxkc0JvcmRlcik7DQotDQotCUNGWF9CeXRlU3RyaW5nIGNzQVBfRF9PRkYgPSBjc0FQX0RfT047DQotDQotCWNzQVBfTl9PTiArPSBDUFdMX1V0aWxzOjpHZXRDaGVja0JveEFwcFN0cmVhbShyY0NsaWVudCxuU3R5bGUsY3JUZXh0KTsNCi0JY3NBUF9EX09OICs9IENQV0xfVXRpbHM6OkdldENoZWNrQm94QXBwU3RyZWFtKHJjQ2xpZW50LG5TdHlsZSxjclRleHQpOw0KLQ0KLQlXcml0ZUFwcGVhcmFuY2UoIk4iLCBHZXRSb3RhdGVkUmVjdCgpLCBHZXRNYXRyaXgoKSwgY3NBUF9OX09OLCBwQ29udHJvbC0+R2V0Q2hlY2tlZEFQU3RhdGUoKSk7DQotCVdyaXRlQXBwZWFyYW5jZSgiTiIsIEdldFJvdGF0ZWRSZWN0KCksIEdldE1hdHJpeCgpLCBjc0FQX05fT0ZGLCAiT2ZmIik7DQotDQotCVdyaXRlQXBwZWFyYW5jZSgiRCIsIEdldFJvdGF0ZWRSZWN0KCksIEdldE1hdHJpeCgpLCBjc0FQX0RfT04sIHBDb250cm9sLT5HZXRDaGVja2VkQVBTdGF0ZSgpKTsNCi0JV3JpdGVBcHBlYXJhbmNlKCJEIiwgR2V0Um90YXRlZFJlY3QoKSwgR2V0TWF0cml4KCksIGNzQVBfRF9PRkYsICJPZmYiKTsNCi0NCi0JQ0ZYX0J5dGVTdHJpbmcgY3NBUyA9IEdldEFwcFN0YXRlKCk7DQotCWlmIChjc0FTLklzRW1wdHkoKSkNCi0JCVNldEFwcFN0YXRlKCJPZmYiKTsNCi19DQotDQotdm9pZCBDUERGU0RLX1dpZGdldDo6UmVzZXRBcHBlYXJhbmNlX1JhZGlvQnV0dG9uKCkNCi17DQotCUNQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sID0gR2V0Rm9ybUNvbnRyb2woKTsNCi0JQVNTRVJUKHBDb250cm9sICE9IE5VTEwpOw0KLQkNCi0NCi0NCi0JQ1BXTF9Db2xvciBjckJhY2tncm91bmQsIGNyQm9yZGVyLCBjclRleHQ7DQotCQ0KLQlpbnQgaUNvbG9yVHlwZTsNCi0JRlhfRkxPQVQgZmNbNF07DQotDQotCXBDb250cm9sLT5HZXRPcmlnaW5hbEJhY2tncm91bmRDb2xvcihpQ29sb3JUeXBlLCBmYyk7DQotCWlmIChpQ29sb3JUeXBlID4gMCkNCi0JCWNyQmFja2dyb3VuZCA9IENQV0xfQ29sb3IoaUNvbG9yVHlwZSwgZmNbMF0sIGZjWzFdLCBmY1syXSwgZmNbM10pOw0KLQ0KLQlwQ29udHJvbC0+R2V0T3JpZ2luYWxCb3JkZXJDb2xvcihpQ29sb3JUeXBlLCBmYyk7DQotCWlmIChpQ29sb3JUeXBlID4gMCkNCi0JCWNyQm9yZGVyID0gQ1BXTF9Db2xvcihpQ29sb3JUeXBlLCBmY1swXSwgZmNbMV0sIGZjWzJdLCBmY1szXSk7DQotDQotCUZYX0ZMT0FUIGZCb3JkZXJXaWR0aCA9IChGWF9GTE9BVClHZXRCb3JkZXJXaWR0aCgpOw0KLQlGWF9JTlQzMiBuQm9yZGVyU3R5bGUgPSAwOw0KLQlDUFdMX0Rhc2ggZHNCb3JkZXIoMywwLDApOw0KLQlDUFdMX0NvbG9yIGNyTGVmdFRvcCxjclJpZ2h0Qm90dG9tOw0KLQ0KLQlzd2l0Y2ggKEdldEJvcmRlclN0eWxlKCkpDQotCXsNCi0JY2FzZSBCQlNfREFTSDoNCi0JCW5Cb3JkZXJTdHlsZSA9IFBCU19EQVNIOw0KLQkJZHNCb3JkZXIgPSBDUFdMX0Rhc2goMywgMywgMCk7DQotCQlicmVhazsNCi0JY2FzZSBCQlNfQkVWRUxFRDoNCi0JCW5Cb3JkZXJTdHlsZSA9IFBCU19CRVZFTEVEOw0KLQkJZkJvcmRlcldpZHRoICo9IDI7DQotCQljckxlZnRUb3AgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLDEpOw0KLQkJY3JSaWdodEJvdHRvbSA9IENQV0xfVXRpbHM6OkRldmlkZUNvbG9yKGNyQmFja2dyb3VuZCwyKTsNCi0JCWJyZWFrOw0KLQljYXNlIEJCU19JTlNFVDoNCi0JCW5Cb3JkZXJTdHlsZSA9IFBCU19JTlNFVDsNCi0JCWZCb3JkZXJXaWR0aCAqPSAyOw0KLQkJY3JMZWZ0VG9wID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwwLjUpOw0KLQkJY3JSaWdodEJvdHRvbSA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMC43NSk7DQotCQlicmVhazsNCi0JY2FzZSBCQlNfVU5ERVJMSU5FOg0KLQkJbkJvcmRlclN0eWxlID0gUEJTX1VOREVSTElORUQ7DQotCQlicmVhazsNCi0JZGVmYXVsdDogDQotCQluQm9yZGVyU3R5bGUgPSBQQlNfU09MSUQ7DQotCQlicmVhazsNCi0JfQ0KLQ0KLQlDUERGX1JlY3QgcmNXaW5kb3cgPSBHZXRSb3RhdGVkUmVjdCgpOw0KLQlDUERGX1JlY3QgcmNDbGllbnQgPSBDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdChyY1dpbmRvdywgZkJvcmRlcldpZHRoKTsNCi0NCi0JQ1BERl9EZWZhdWx0QXBwZWFyYW5jZSBkYSA9IHBDb250cm9sLT5HZXREZWZhdWx0QXBwZWFyYW5jZSgpOw0KLQlpZiAoZGEuSGFzQ29sb3IoKSkNCi0Jew0KLQkJZGEuR2V0Q29sb3IoaUNvbG9yVHlwZSwgZmMpOw0KLQkJY3JUZXh0ID0gQ1BXTF9Db2xvcihpQ29sb3JUeXBlLCBmY1swXSwgZmNbMV0sIGZjWzJdLCBmY1szXSk7DQotCX0NCi0NCi0JRlhfSU5UMzIgblN0eWxlID0gMDsNCi0NCi0JQ0ZYX1dpZGVTdHJpbmcgY3NXQ2FwdGlvbiA9IHBDb250cm9sLT5HZXROb3JtYWxDYXB0aW9uKCk7DQotCWlmIChjc1dDYXB0aW9uLkdldExlbmd0aCgpID4gMCkNCi0Jew0KLQkJc3dpdGNoIChjc1dDYXB0aW9uWzBdKQ0KLQkJew0KLQkJZGVmYXVsdDogLy9MJ2wnOg0KLQkJCW5TdHlsZSA9IFBDU19DSVJDTEU7CQkJDQotCQkJYnJlYWs7DQotCQljYXNlIEwnOCc6DQotCQkJblN0eWxlID0gUENTX0NST1NTOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSBMJ3UnOg0KLQkJCW5TdHlsZSA9IFBDU19ESUFNT05EOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSBMJ24nOg0KLQkJCW5TdHlsZSA9IFBDU19TUVVBUkU7DQotCQkJYnJlYWs7DQotCQljYXNlIEwnSCc6DQotCQkJblN0eWxlID0gUENTX1NUQVI7DQotCQkJYnJlYWs7DQotCQljYXNlIEwnNCc6DQotCQkJblN0eWxlID0gUENTX0NIRUNLOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJblN0eWxlID0gUENTX0NJUkNMRTsNCi0JfQ0KLQ0KLQlDRlhfQnl0ZVN0cmluZyBjc0FQX05fT047DQotDQotCUNQREZfUmVjdCByY0NlbnRlciA9IENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KENQV0xfVXRpbHM6OkdldENlbnRlclNxdWFyZShyY1dpbmRvdyksIDEuMGYpOw0KLQkNCi0JaWYgKG5TdHlsZSA9PSBQQ1NfQ0lSQ0xFKQ0KLQl7DQotCQlpZiAobkJvcmRlclN0eWxlID09IFBCU19CRVZFTEVEKQ0KLQkJew0KLQkJCWNyTGVmdFRvcCA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksIDEpOw0KLQkJCWNyUmlnaHRCb3R0b20gPSBDUFdMX1V0aWxzOjpTdWJzdHJhY3RDb2xvcihjckJhY2tncm91bmQsMC4yNWYpOw0KLQkJfQ0KLQkJZWxzZSBpZiAobkJvcmRlclN0eWxlID09IFBCU19JTlNFVCkNCi0JCXsNCi0JCQljckxlZnRUb3AgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLDAuNWYpOw0KLQkJCWNyUmlnaHRCb3R0b20gPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLDAuNzVmKTsNCi0JCX0NCi0NCi0JCWNzQVBfTl9PTiA9IENQV0xfVXRpbHM6OkdldENpcmNsZUZpbGxBcHBTdHJlYW0ocmNDZW50ZXIsY3JCYWNrZ3JvdW5kKSArIA0KLQkJCUNQV0xfVXRpbHM6OkdldENpcmNsZUJvcmRlckFwcFN0cmVhbShyY0NlbnRlcixmQm9yZGVyV2lkdGgsY3JCb3JkZXIsY3JMZWZ0VG9wLGNyUmlnaHRCb3R0b20sbkJvcmRlclN0eWxlLGRzQm9yZGVyKTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCWNzQVBfTl9PTiA9IENQV0xfVXRpbHM6OkdldFJlY3RGaWxsQXBwU3RyZWFtKHJjV2luZG93LGNyQmFja2dyb3VuZCkgKyANCi0JCQlDUFdMX1V0aWxzOjpHZXRCb3JkZXJBcHBTdHJlYW0ocmNXaW5kb3csZkJvcmRlcldpZHRoLGNyQm9yZGVyLGNyTGVmdFRvcCxjclJpZ2h0Qm90dG9tLG5Cb3JkZXJTdHlsZSxkc0JvcmRlcik7DQotCX0NCi0NCi0JQ0ZYX0J5dGVTdHJpbmcgY3NBUF9OX09GRiA9IGNzQVBfTl9PTjsNCi0NCi0Jc3dpdGNoIChuQm9yZGVyU3R5bGUpDQotCXsNCi0JY2FzZSBQQlNfQkVWRUxFRDoNCi0JCXsNCi0JCQlDUFdMX0NvbG9yIGNyVGVtcCA9IGNyTGVmdFRvcDsNCi0JCQljckxlZnRUb3AgPSBjclJpZ2h0Qm90dG9tOw0KLQkJCWNyUmlnaHRCb3R0b20gPSBjclRlbXA7DQotCQl9DQotCQlicmVhazsNCi0JY2FzZSBQQlNfSU5TRVQ6DQotCQljckxlZnRUb3AgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLDApOw0KLQkJY3JSaWdodEJvdHRvbSA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMSk7DQotCQlicmVhazsNCi0JfQ0KLQ0KLQlDRlhfQnl0ZVN0cmluZyBjc0FQX0RfT047DQotDQotCWlmIChuU3R5bGUgPT0gUENTX0NJUkNMRSkNCi0Jew0KLQkJQ1BXTF9Db2xvciBjckJLID0gQ1BXTF9VdGlsczo6U3Vic3RyYWN0Q29sb3IoY3JCYWNrZ3JvdW5kLDAuMjVmKTsNCi0JCWlmIChuQm9yZGVyU3R5bGUgPT0gUEJTX0JFVkVMRUQpDQotCQl7DQotCQkJY3JMZWZ0VG9wID0gQ1BXTF9VdGlsczo6U3Vic3RyYWN0Q29sb3IoY3JCYWNrZ3JvdW5kLDAuMjVmKTsNCi0JCQljclJpZ2h0Qm90dG9tID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwgMSk7DQotCQkJY3JCSyA9IGNyQmFja2dyb3VuZDsNCi0JCX0NCi0JCWVsc2UgaWYgKG5Cb3JkZXJTdHlsZSA9PSBQQlNfSU5TRVQpDQotCQl7DQotCQkJY3JMZWZ0VG9wID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwwKTsNCi0JCQljclJpZ2h0Qm90dG9tID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwxKTsNCi0JCX0NCi0NCi0JCWNzQVBfRF9PTiA9IENQV0xfVXRpbHM6OkdldENpcmNsZUZpbGxBcHBTdHJlYW0ocmNDZW50ZXIsY3JCSykNCi0JCQkrIENQV0xfVXRpbHM6OkdldENpcmNsZUJvcmRlckFwcFN0cmVhbShyY0NlbnRlcixmQm9yZGVyV2lkdGgsY3JCb3JkZXIsY3JMZWZ0VG9wLGNyUmlnaHRCb3R0b20sbkJvcmRlclN0eWxlLGRzQm9yZGVyKTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCWNzQVBfRF9PTiA9IENQV0xfVXRpbHM6OkdldFJlY3RGaWxsQXBwU3RyZWFtKHJjV2luZG93LENQV0xfVXRpbHM6OlN1YnN0cmFjdENvbG9yKGNyQmFja2dyb3VuZCwwLjI1ZikpICsgDQotCQkJQ1BXTF9VdGlsczo6R2V0Qm9yZGVyQXBwU3RyZWFtKHJjV2luZG93LGZCb3JkZXJXaWR0aCxjckJvcmRlcixjckxlZnRUb3AsY3JSaWdodEJvdHRvbSxuQm9yZGVyU3R5bGUsZHNCb3JkZXIpOwkJDQotCX0NCi0NCi0JQ0ZYX0J5dGVTdHJpbmcgY3NBUF9EX09GRiA9IGNzQVBfRF9PTjsNCi0NCi0JY3NBUF9OX09OICs9IENQV0xfVXRpbHM6OkdldFJhZGlvQnV0dG9uQXBwU3RyZWFtKHJjQ2xpZW50LG5TdHlsZSxjclRleHQpOw0KLQljc0FQX0RfT04gKz0gQ1BXTF9VdGlsczo6R2V0UmFkaW9CdXR0b25BcHBTdHJlYW0ocmNDbGllbnQsblN0eWxlLGNyVGV4dCk7DQotDQotCVdyaXRlQXBwZWFyYW5jZSgiTiIsIEdldFJvdGF0ZWRSZWN0KCksIEdldE1hdHJpeCgpLCBjc0FQX05fT04sIHBDb250cm9sLT5HZXRDaGVja2VkQVBTdGF0ZSgpKTsNCi0JV3JpdGVBcHBlYXJhbmNlKCJOIiwgR2V0Um90YXRlZFJlY3QoKSwgR2V0TWF0cml4KCksIGNzQVBfTl9PRkYsICJPZmYiKTsNCi0NCi0JV3JpdGVBcHBlYXJhbmNlKCJEIiwgR2V0Um90YXRlZFJlY3QoKSwgR2V0TWF0cml4KCksIGNzQVBfRF9PTiwgcENvbnRyb2wtPkdldENoZWNrZWRBUFN0YXRlKCkpOw0KLQlXcml0ZUFwcGVhcmFuY2UoIkQiLCBHZXRSb3RhdGVkUmVjdCgpLCBHZXRNYXRyaXgoKSwgY3NBUF9EX09GRiwgIk9mZiIpOw0KLQ0KLQlDRlhfQnl0ZVN0cmluZyBjc0FTID0gR2V0QXBwU3RhdGUoKTsNCi0JaWYgKGNzQVMuSXNFbXB0eSgpKQ0KLQkJU2V0QXBwU3RhdGUoIk9mZiIpOw0KLX0NCi0NCi12b2lkIENQREZTREtfV2lkZ2V0OjpSZXNldEFwcGVhcmFuY2VfQ29tYm9Cb3goRlhfTFBDV1NUUiBzVmFsdWUpDQotew0KLQlDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCA9IEdldEZvcm1Db250cm9sKCk7DQotCUFTU0VSVChwQ29udHJvbCAhPSBOVUxMKTsNCi0JQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCA9IHBDb250cm9sLT5HZXRGaWVsZCgpOw0KLQlBU1NFUlQocEZpZWxkICE9IE5VTEwpOw0KLQ0KLQlDRlhfQnl0ZVRleHRCdWYgc0JvZHksIHNMaW5lczsNCi0NCi0JQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOw0KLQlDUERGX1JlY3QgcmNCdXR0b24gPSByY0NsaWVudDsNCi0JcmNCdXR0b24ubGVmdCA9IHJjQnV0dG9uLnJpZ2h0IC0gMTM7DQotCXJjQnV0dG9uLk5vcm1hbGl6ZSgpOw0KLQ0KLQlpZiAoSUZYX0VkaXQgKiBwRWRpdCA9IElGWF9FZGl0OjpOZXdFZGl0KCkpDQotCXsNCi0JCXBFZGl0LT5FbmFibGVSZWZyZXNoKEZBTFNFKTsNCi0NCi0JCUFTU0VSVCh0aGlzLT5tX3BJbnRlckZvcm0gIT0gTlVMTCk7DQotCQlDUERGU0RLX0RvY3VtZW50KiBwRG9jID0gbV9wSW50ZXJGb3JtLT5HZXREb2N1bWVudCgpOw0KLQkJQVNTRVJUKHBEb2MgIT0gTlVMTCk7DQotCQlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gcERvYy0+R2V0RW52KCk7DQotCQlDQkFfRm9udE1hcCBGb250TWFwKHRoaXMscEVudi0+R2V0U3lzSGFuZGxlcigpKTsNCi0JCUZvbnRNYXAuSW5pdGlhbCgpOw0KLQkJcEVkaXQtPlNldEZvbnRNYXAoJkZvbnRNYXApOw0KLQ0KLQkJQ1BERl9SZWN0IHJjRWRpdCA9IHJjQ2xpZW50Ow0KLQkJcmNFZGl0LnJpZ2h0ID0gcmNCdXR0b24ubGVmdDsNCi0JCXJjRWRpdC5Ob3JtYWxpemUoKTsNCi0JCQ0KLQkJcEVkaXQtPlNldFBsYXRlUmVjdChyY0VkaXQpOw0KLQkJcEVkaXQtPlNldEFsaWdubWVudFYoMSk7DQotDQotCQlGWF9GTE9BVCBmRm9udFNpemUgPSB0aGlzLT5HZXRGb250U2l6ZSgpOw0KLQkJaWYgKElzRmxvYXRaZXJvKGZGb250U2l6ZSkpDQotCQkJcEVkaXQtPlNldEF1dG9Gb250U2l6ZShUUlVFKTsNCi0JCWVsc2UNCi0JCQlwRWRpdC0+U2V0Rm9udFNpemUoZkZvbnRTaXplKTsNCi0JCQ0KLQkJcEVkaXQtPkluaXRpYWxpemUoKTsNCi0JCQ0KLQkJaWYgKHNWYWx1ZSkNCi0JCQlwRWRpdC0+U2V0VGV4dChzVmFsdWUpOw0KLQkJZWxzZQ0KLQkJew0KLQkJCUZYX0lOVDMyIG5DdXJTZWwgPSBwRmllbGQtPkdldFNlbGVjdGVkSW5kZXgoMCk7DQotDQotCQkJaWYgKG5DdXJTZWwgPCAwKQ0KLQkJCQlwRWRpdC0+U2V0VGV4dCgoRlhfTFBDV1NUUilwRmllbGQtPkdldFZhbHVlKCkpOw0KLQkJCWVsc2UNCi0JCQkJcEVkaXQtPlNldFRleHQoKEZYX0xQQ1dTVFIpcEZpZWxkLT5HZXRPcHRpb25MYWJlbChuQ3VyU2VsKSk7DQotCQl9DQotDQotCQlDUERGX1JlY3QgcmNDb250ZW50ID0gcEVkaXQtPkdldENvbnRlbnRSZWN0KCk7DQotDQotCQlDRlhfQnl0ZVN0cmluZyBzRWRpdCA9IENQV0xfVXRpbHM6OkdldEVkaXRBcHBTdHJlYW0ocEVkaXQsQ1BERl9Qb2ludCgwLjBmLDAuMGYpKTsNCi0JCWlmIChzRWRpdC5HZXRMZW5ndGgoKSA+IDApDQotCQl7DQotCQkJc0JvZHkgPDwgIi9UeCBCTUNcbiIgPDwgInFcbiI7DQotCQkJaWYgKHJjQ29udGVudC5XaWR0aCgpID4gcmNFZGl0LldpZHRoKCkgfHwNCi0JCQkJcmNDb250ZW50LkhlaWdodCgpID4gcmNFZGl0LkhlaWdodCgpKQ0KLQkJCXsNCi0JCQkJc0JvZHkgPDwgcmNFZGl0LmxlZnQgPDwgIiAiIDw8IHJjRWRpdC5ib3R0b20gPDwgIiAiIA0KLQkJCQkJPDwgcmNFZGl0LldpZHRoKCkgPDwgIiAiIDw8IHJjRWRpdC5IZWlnaHQoKSA8PCAiIHJlXG5XXG5uXG4iOw0KLQkJCX0NCi0NCi0JCQlDUFdMX0NvbG9yIGNyVGV4dCA9IEdldFRleHRQV0xDb2xvcigpOwkNCi0JCQlzQm9keSA8PCAiQlRcbiIgPDwgQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oY3JUZXh0KSA8PCBzRWRpdCA8PCAiRVRcbiIgPDwgIlFcbkVNQ1xuIjsNCi0JCX0NCi0NCi0JCUlGWF9FZGl0OjpEZWxFZGl0KHBFZGl0KTsNCi0JfQ0KLQ0KLQlzQm9keSA8PCBDUFdMX1V0aWxzOjpHZXREcm9wQnV0dG9uQXBwU3RyZWFtKHJjQnV0dG9uKTsNCi0NCi0JQ0ZYX0J5dGVTdHJpbmcgc0FQID0gR2V0QmFja2dyb3VuZEFwcFN0cmVhbSgpICsgR2V0Qm9yZGVyQXBwU3RyZWFtKCkgKyBzTGluZXMuR2V0Qnl0ZVN0cmluZygpICsgc0JvZHkuR2V0Qnl0ZVN0cmluZygpOw0KLQ0KLQlXcml0ZUFwcGVhcmFuY2UoIk4iLCBHZXRSb3RhdGVkUmVjdCgpLCBHZXRNYXRyaXgoKSwgc0FQKTsNCi19DQotDQotdm9pZCBDUERGU0RLX1dpZGdldDo6UmVzZXRBcHBlYXJhbmNlX0xpc3RCb3goKQ0KLXsNCi0JQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2wgPSBHZXRGb3JtQ29udHJvbCgpOw0KLQlBU1NFUlQocENvbnRyb2wgIT0gTlVMTCk7DQotCUNQREZfRm9ybUZpZWxkKiBwRmllbGQgPSBwQ29udHJvbC0+R2V0RmllbGQoKTsNCi0JQVNTRVJUKHBGaWVsZCAhPSBOVUxMKTsNCi0NCi0JQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOw0KLQ0KLQlDRlhfQnl0ZVRleHRCdWYgc0JvZHksIHNMaW5lczsNCi0NCi0JaWYgKElGWF9FZGl0ICogcEVkaXQgPSBJRlhfRWRpdDo6TmV3RWRpdCgpKQ0KLQl7DQotCQlwRWRpdC0+RW5hYmxlUmVmcmVzaChGQUxTRSk7DQotDQotLy8JCUFTU0VSVCh0aGlzLT5tX3BCYXNlRm9ybSAhPSBOVUxMKTsNCi0JCUFTU0VSVCh0aGlzLT5tX3BJbnRlckZvcm0gIT0gTlVMTCk7DQotCQlDUERGU0RLX0RvY3VtZW50KiBwRG9jID0gbV9wSW50ZXJGb3JtLT5HZXREb2N1bWVudCgpOw0KLQkJQVNTRVJUKHBEb2MgIT0gTlVMTCk7DQotCQlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gcERvYy0+R2V0RW52KCk7DQotDQotCQlDQkFfRm9udE1hcCBGb250TWFwKHRoaXMscEVudi0+R2V0U3lzSGFuZGxlcigpKTsNCi0JCUZvbnRNYXAuSW5pdGlhbCgpOw0KLQkJcEVkaXQtPlNldEZvbnRNYXAoJkZvbnRNYXApOw0KLQ0KLQkJcEVkaXQtPlNldFBsYXRlUmVjdChDUERGX1JlY3QocmNDbGllbnQubGVmdCwwLjBmLHJjQ2xpZW50LnJpZ2h0LDAuMGYpKTsJDQotCQkNCi0JCUZYX0ZMT0FUIGZGb250U2l6ZSA9IEdldEZvbnRTaXplKCk7DQotDQotCQlpZiAoSXNGbG9hdFplcm8oZkZvbnRTaXplKSkNCi0JCQlwRWRpdC0+U2V0Rm9udFNpemUoMTIuMGYpOw0KLQkJZWxzZQ0KLQkJCXBFZGl0LT5TZXRGb250U2l6ZShmRm9udFNpemUpOw0KLQkJDQotCQlwRWRpdC0+SW5pdGlhbGl6ZSgpOw0KLQ0KLQkJQ0ZYX0J5dGVUZXh0QnVmIHNMaXN0Ow0KLQkJRlhfRkxPQVQgZnkgPSByY0NsaWVudC50b3A7DQotDQotCQlGWF9JTlQzMiBuVG9wID0gcEZpZWxkLT5HZXRUb3BWaXNpYmxlSW5kZXgoKTsNCi0JCUZYX0lOVDMyIG5Db3VudCA9IHBGaWVsZC0+Q291bnRPcHRpb25zKCk7DQotCQlGWF9JTlQzMiBuU2VsQ291bnQgPSBwRmllbGQtPkNvdW50U2VsZWN0ZWRJdGVtcygpOw0KLQ0KLQkJZm9yIChGWF9JTlQzMiBpPW5Ub3A7IGk8bkNvdW50OyBpKyspDQotCQl7DQotCQkJRlhfQk9PTCBiU2VsZWN0ZWQgPSBGQUxTRTsJCQkJDQotCQkJZm9yIChGWF9JTlQzMiBqPTA7IGo8blNlbENvdW50OyBqKyspDQotCQkJew0KLQkJCQlpZiAocEZpZWxkLT5HZXRTZWxlY3RlZEluZGV4KGopID09IGkpDQotCQkJCXsNCi0JCQkJCWJTZWxlY3RlZCA9IFRSVUU7DQotCQkJCQlicmVhazsNCi0JCQkJfQ0KLQkJCX0NCi0NCi0JCQlwRWRpdC0+U2V0VGV4dCgoRlhfTFBDV1NUUilwRmllbGQtPkdldE9wdGlvbkxhYmVsKGkpKTsNCi0NCi0JCQlDUERGX1JlY3QgcmNDb250ZW50ID0gcEVkaXQtPkdldENvbnRlbnRSZWN0KCk7DQotCQkJRlhfRkxPQVQgZkl0ZW1IZWlnaHQgPSByY0NvbnRlbnQuSGVpZ2h0KCk7DQotDQotCQkJaWYgKGJTZWxlY3RlZCkNCi0JCQl7DQotCQkJCUNQREZfUmVjdCByY0l0ZW0gPSBDUERGX1JlY3QocmNDbGllbnQubGVmdCxmeS1mSXRlbUhlaWdodCxyY0NsaWVudC5yaWdodCxmeSk7DQotCQkJCXNMaXN0IDw8ICJxXG4iIDw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKENQV0xfQ29sb3IoQ09MT1JUWVBFX1JHQiwwLDUxLjBmLzI1NS4wZiwxMTMuMGYvMjU1LjBmKSxUUlVFKQ0KLQkJCQkJPDwgcmNJdGVtLmxlZnQgPDwgIiAiIDw8IHJjSXRlbS5ib3R0b20gPDwgIiAiIDw8IHJjSXRlbS5XaWR0aCgpIDw8ICIgIiA8PCByY0l0ZW0uSGVpZ2h0KCkgPDwgIiByZSBmXG4iIDw8ICJRXG4iOw0KLQ0KLQkJCQlzTGlzdCA8PCAiQlRcbiIgPDwgQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwxKSxUUlVFKSA8PCANCi0JCQkJCUNQV0xfVXRpbHM6OkdldEVkaXRBcHBTdHJlYW0ocEVkaXQsQ1BERl9Qb2ludCgwLjBmLGZ5KSkgPDwgIkVUXG4iOw0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQlDUFdMX0NvbG9yIGNyVGV4dCA9IEdldFRleHRQV0xDb2xvcigpOw0KLQkJCQlzTGlzdCA8PCAiQlRcbiIgPDwgQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oY3JUZXh0LFRSVUUpIDw8IA0KLQkJCQlDUFdMX1V0aWxzOjpHZXRFZGl0QXBwU3RyZWFtKHBFZGl0LENQREZfUG9pbnQoMC4wZixmeSkpIDw8ICJFVFxuIjsNCi0JCQl9DQotDQotCQkJZnkgLT0gZkl0ZW1IZWlnaHQ7DQotCQl9DQotCQkJCQkNCi0JCWlmIChzTGlzdC5HZXRTaXplKCkgPiAwKQ0KLQkJew0KLQkJCXNCb2R5IDw8ICIvVHggQk1DXG4iIDw8ICJxXG4iIDw8IHJjQ2xpZW50LmxlZnQgPDwgIiAiIDw8IHJjQ2xpZW50LmJvdHRvbSA8PCAiICIgDQotCQkJCQk8PCByY0NsaWVudC5XaWR0aCgpIDw8ICIgIiA8PCByY0NsaWVudC5IZWlnaHQoKSA8PCAiIHJlXG5XXG5uXG4iOw0KLQkJCXNCb2R5IDw8IHNMaXN0IDw8ICJRXG5FTUNcbiI7DQotCQl9DQotDQotCQlJRlhfRWRpdDo6RGVsRWRpdChwRWRpdCk7DQotCX0NCi0NCi0JQ0ZYX0J5dGVTdHJpbmcgc0FQID0gR2V0QmFja2dyb3VuZEFwcFN0cmVhbSgpICsgR2V0Qm9yZGVyQXBwU3RyZWFtKCkgKyBzTGluZXMuR2V0Qnl0ZVN0cmluZygpICsgc0JvZHkuR2V0Qnl0ZVN0cmluZygpOw0KLQ0KLQlXcml0ZUFwcGVhcmFuY2UoIk4iLCBHZXRSb3RhdGVkUmVjdCgpLCBHZXRNYXRyaXgoKSwgc0FQKTsNCi19DQotDQotdm9pZCBDUERGU0RLX1dpZGdldDo6UmVzZXRBcHBlYXJhbmNlX1RleHRGaWVsZChGWF9MUENXU1RSIHNWYWx1ZSkNCi17DQotCUNQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sID0gR2V0Rm9ybUNvbnRyb2woKTsNCi0JQVNTRVJUKHBDb250cm9sICE9IE5VTEwpOw0KLQlDUERGX0Zvcm1GaWVsZCogcEZpZWxkID0gcENvbnRyb2wtPkdldEZpZWxkKCk7DQotCUFTU0VSVChwRmllbGQgIT0gTlVMTCk7DQotDQotCUNGWF9CeXRlVGV4dEJ1ZiBzQm9keSwgc0xpbmVzOw0KLQkNCi0JaWYgKElGWF9FZGl0ICogcEVkaXQgPSBJRlhfRWRpdDo6TmV3RWRpdCgpKQ0KLQl7DQotCQlwRWRpdC0+RW5hYmxlUmVmcmVzaChGQUxTRSk7DQotDQotLy8JCUFTU0VSVCh0aGlzLT5tX3BCYXNlRm9ybSAhPSBOVUxMKTsNCi0JCUFTU0VSVCh0aGlzLT5tX3BJbnRlckZvcm0gIT0gTlVMTCk7DQotCQlDUERGU0RLX0RvY3VtZW50KiBwRG9jID0gbV9wSW50ZXJGb3JtLT5HZXREb2N1bWVudCgpOw0KLQkJQVNTRVJUKHBEb2MgIT0gTlVMTCk7DQotCQlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gcERvYy0+R2V0RW52KCk7DQotDQotCQlDQkFfRm9udE1hcCBGb250TWFwKHRoaXMscEVudi0+R2V0U3lzSGFuZGxlcigpKTsvLywgSVN5c3RlbUhhbmRsZTo6R2V0U3lzdGVtSGFuZGxlcihtX3BCYXNlRm9ybS0+R2V0RW52KCkpKTsNCi0JCUZvbnRNYXAuSW5pdGlhbCgpOw0KLQkJcEVkaXQtPlNldEZvbnRNYXAoJkZvbnRNYXApOw0KLQ0KLQkJQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOw0KLQkJcEVkaXQtPlNldFBsYXRlUmVjdChyY0NsaWVudCk7DQotCQlwRWRpdC0+U2V0QWxpZ25tZW50SChwQ29udHJvbC0+R2V0Q29udHJvbEFsaWdubWVudCgpKTsNCi0JCQ0KLQkJRlhfRFdPUkQgZHdGaWVsZEZsYWdzID0gcEZpZWxkLT5HZXRGaWVsZEZsYWdzKCk7DQotCQlGWF9CT09MIGJNdWx0aUxpbmUgPSAoZHdGaWVsZEZsYWdzID4+IDEyKSAmIDE7DQotDQotCQlpZiAoYk11bHRpTGluZSkNCi0JCXsNCi0JCQlwRWRpdC0+U2V0TXVsdGlMaW5lKFRSVUUpOw0KLQkJCXBFZGl0LT5TZXRBdXRvUmV0dXJuKFRSVUUpOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCXBFZGl0LT5TZXRBbGlnbm1lbnRWKDEpOw0KLQkJfQ0KLQ0KLQkJRlhfV09SRCBzdWJXb3JkID0gMDsNCi0JCWlmICgoZHdGaWVsZEZsYWdzID4+IDEzKSAmIDEpDQotCQl7DQotCQkJc3ViV29yZCA9ICcqJzsNCi0JCQlwRWRpdC0+U2V0UGFzc3dvcmRDaGFyKHN1YldvcmQpOw0KLQkJfQ0KLQ0KLQkJaW50IG5NYXhMZW4gPSBwRmllbGQtPkdldE1heExlbigpOw0KLQkJRlhfQk9PTCBiQ2hhckFycmF5ID0gKGR3RmllbGRGbGFncyA+PiAyNCkgJiAxOw0KLQkJRlhfRkxPQVQgZkZvbnRTaXplID0gR2V0Rm9udFNpemUoKTsJDQotDQotCQlpZiAobk1heExlbiA+IDApDQotCQl7DQotCQkJaWYgKGJDaGFyQXJyYXkpDQotCQkJew0KLQkJCQlwRWRpdC0+U2V0Q2hhckFycmF5KG5NYXhMZW4pOw0KLQ0KLQkJCQlpZiAoSXNGbG9hdFplcm8oZkZvbnRTaXplKSkNCi0JCQkJew0KLQkJCQkJZkZvbnRTaXplID0gQ1BXTF9FZGl0OjpHZXRDaGFyQXJyYXlBdXRvRm9udFNpemUoRm9udE1hcC5HZXRQREZGb250KDApLHJjQ2xpZW50LG5NYXhMZW4pOw0KLQkJCQl9DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCWlmIChzVmFsdWUpDQotCQkJCQluTWF4TGVuID0gd2NzbGVuKChjb25zdCB3Y2hhcl90KilzVmFsdWUpOyANCi0JCQkJcEVkaXQtPlNldExpbWl0Q2hhcihuTWF4TGVuKTsNCi0JCQl9DQotCQl9DQotDQotCQlpZiAoSXNGbG9hdFplcm8oZkZvbnRTaXplKSkNCi0JCQlwRWRpdC0+U2V0QXV0b0ZvbnRTaXplKFRSVUUpOw0KLQkJZWxzZQ0KLQkJCXBFZGl0LT5TZXRGb250U2l6ZShmRm9udFNpemUpOw0KLQ0KLQkJcEVkaXQtPkluaXRpYWxpemUoKTsNCi0JCQ0KLQkJaWYgKHNWYWx1ZSkNCi0JCQlwRWRpdC0+U2V0VGV4dChzVmFsdWUpOw0KLQkJZWxzZQ0KLQkJCXBFZGl0LT5TZXRUZXh0KChGWF9MUENXU1RSKXBGaWVsZC0+R2V0VmFsdWUoKSk7DQotDQotCQlDUERGX1JlY3QgcmNDb250ZW50ID0gcEVkaXQtPkdldENvbnRlbnRSZWN0KCk7DQotDQotCQlDRlhfQnl0ZVN0cmluZyBzRWRpdCA9IENQV0xfVXRpbHM6OkdldEVkaXRBcHBTdHJlYW0ocEVkaXQsQ1BERl9Qb2ludCgwLjBmLDAuMGYpLA0KLQkJCQkJCQkJCQkJCQkJCQkJTlVMTCwhYkNoYXJBcnJheSxzdWJXb3JkKTsNCi0NCi0JCWlmIChzRWRpdC5HZXRMZW5ndGgoKSA+IDApDQotCQl7DQotCQkJc0JvZHkgPDwgIi9UeCBCTUNcbiIgPDwgInFcbiI7DQotCQkJaWYgKHJjQ29udGVudC5XaWR0aCgpID4gcmNDbGllbnQuV2lkdGgoKSB8fA0KLQkJCQlyY0NvbnRlbnQuSGVpZ2h0KCkgPiByY0NsaWVudC5IZWlnaHQoKSkNCi0JCQl7DQotCQkJCXNCb2R5IDw8IHJjQ2xpZW50LmxlZnQgPDwgIiAiIDw8IHJjQ2xpZW50LmJvdHRvbSA8PCAiICIgDQotCQkJCQk8PCByY0NsaWVudC5XaWR0aCgpIDw8ICIgIiA8PCByY0NsaWVudC5IZWlnaHQoKSA8PCAiIHJlXG5XXG5uXG4iOw0KLQkJCX0NCi0JCQlDUFdMX0NvbG9yIGNyVGV4dCA9IEdldFRleHRQV0xDb2xvcigpOwkNCi0JCQlzQm9keSA8PCAiQlRcbiIgPDwgQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oY3JUZXh0KSA8PCBzRWRpdCA8PCAiRVRcbiIgPDwgIlFcbkVNQ1xuIjsNCi0JCX0NCi0NCi0JCWlmIChiQ2hhckFycmF5KQ0KLQkJew0KLQkJCXN3aXRjaCAoR2V0Qm9yZGVyU3R5bGUoKSkNCi0JCQl7DQotCQkJY2FzZSBCQlNfU09MSUQ6DQotCQkJCXsNCi0JCQkJCUNGWF9CeXRlU3RyaW5nIHNDb2xvciA9IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKEdldEJvcmRlclBXTENvbG9yKCksRkFMU0UpOw0KLQkJCQkJaWYgKHNDb2xvci5HZXRMZW5ndGgoKSA+IDApDQotCQkJCQl7DQotCQkJCQkJc0xpbmVzIDw8ICJxXG4iIDw8IEdldEJvcmRlcldpZHRoKCkgPDwgIiB3XG4iIA0KLQkJCQkJCQk8PCBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShHZXRCb3JkZXJQV0xDb2xvcigpLEZBTFNFKSA8PCAiIDIgSiAwIGpcbiI7CQkJCQkNCi0NCi0JCQkJCQlmb3IgKEZYX0lOVDMyIGk9MTtpPG5NYXhMZW47aSsrKQ0KLQkJCQkJCXsNCi0JCQkJCQkJc0xpbmVzIDw8IHJjQ2xpZW50LmxlZnQgKyAoKHJjQ2xpZW50LnJpZ2h0IC0gcmNDbGllbnQubGVmdCkvbk1heExlbikqaSA8PCAiICINCi0JCQkJCQkJCTw8IHJjQ2xpZW50LmJvdHRvbSA8PCAiIG1cbiINCi0JCQkJCQkJCTw8IHJjQ2xpZW50LmxlZnQgKyAoKHJjQ2xpZW50LnJpZ2h0IC0gcmNDbGllbnQubGVmdCkvbk1heExlbikqaSA8PCAiICINCi0JCQkJCQkJCTw8IHJjQ2xpZW50LnRvcCA8PCAiIGwgU1xuIjsJCQkJCQkNCi0JCQkJCQl9DQotDQotCQkJCQkJc0xpbmVzIDw8ICJRXG4iOwkJDQotCQkJCQl9DQotCQkJCX0NCi0JCQkJYnJlYWs7DQotCQkJY2FzZSBCQlNfREFTSDoNCi0JCQkJew0KLQkJCQkJQ0ZYX0J5dGVTdHJpbmcgc0NvbG9yID0gQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oR2V0Qm9yZGVyUFdMQ29sb3IoKSxGQUxTRSk7DQotCQkJCQlpZiAoc0NvbG9yLkdldExlbmd0aCgpID4gMCkNCi0JCQkJCXsNCi0JCQkJCQlDUFdMX0Rhc2ggZHNCb3JkZXIgPSBDUFdMX0Rhc2goMywgMywgMCk7DQotDQotCQkJCQkJc0xpbmVzIDw8ICJxXG4iIDw8IEdldEJvcmRlcldpZHRoKCkgPDwgIiB3XG4iIA0KLQkJCQkJCQk8PCBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShHZXRCb3JkZXJQV0xDb2xvcigpLEZBTFNFKQ0KLQkJCQkJCQk8PCAiWyIgPDwgZHNCb3JkZXIubkRhc2ggPDwgIiAiIA0KLQkJCQkJCQk8PCBkc0JvcmRlci5uR2FwIDw8ICJdICIgDQotCQkJCQkJCTw8IGRzQm9yZGVyLm5QaGFzZSA8PCAiIGRcbiI7DQotDQotCQkJCQkJZm9yIChGWF9JTlQzMiBpPTE7aTxuTWF4TGVuO2krKykJCQkJCQ0KLQkJCQkJCXsNCi0JCQkJCQkJc0xpbmVzIDw8IHJjQ2xpZW50LmxlZnQgKyAoKHJjQ2xpZW50LnJpZ2h0IC0gcmNDbGllbnQubGVmdCkvbk1heExlbikqaSA8PCAiICINCi0JCQkJCQkJCTw8IHJjQ2xpZW50LmJvdHRvbSA8PCAiIG1cbiINCi0JCQkJCQkJCTw8IHJjQ2xpZW50LmxlZnQgKyAoKHJjQ2xpZW50LnJpZ2h0IC0gcmNDbGllbnQubGVmdCkvbk1heExlbikqaSA8PCAiICINCi0JCQkJCQkJCTw8IHJjQ2xpZW50LnRvcCA8PCAiIGwgU1xuIjsJDQotCQkJCQkJfQ0KLQ0KLQkJCQkJCXNMaW5lcyA8PCAiUVxuIjsNCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCQlicmVhazsNCi0JCQl9DQotCQl9DQotDQotCQlJRlhfRWRpdDo6RGVsRWRpdChwRWRpdCk7DQotCX0NCi0NCi0JQ0ZYX0J5dGVTdHJpbmcgc0FQID0gR2V0QmFja2dyb3VuZEFwcFN0cmVhbSgpICsgR2V0Qm9yZGVyQXBwU3RyZWFtKCkgKyBzTGluZXMuR2V0Qnl0ZVN0cmluZygpICsgc0JvZHkuR2V0Qnl0ZVN0cmluZygpOw0KLQlXcml0ZUFwcGVhcmFuY2UoIk4iLCBHZXRSb3RhdGVkUmVjdCgpLCBHZXRNYXRyaXgoKSwgc0FQKTsNCi19DQotDQotQ1BERl9SZWN0IENQREZTREtfV2lkZ2V0OjpHZXRDbGllbnRSZWN0KCkgY29uc3QNCi17DQotCUNQREZfUmVjdCByY1dpbmRvdyA9IEdldFJvdGF0ZWRSZWN0KCk7DQotCUZYX0ZMT0FUIGZCb3JkZXJXaWR0aCA9IChGWF9GTE9BVClHZXRCb3JkZXJXaWR0aCgpOw0KLQlzd2l0Y2ggKEdldEJvcmRlclN0eWxlKCkpDQotCXsNCi0JY2FzZSBCQlNfQkVWRUxFRDoNCi0JY2FzZSBCQlNfSU5TRVQ6DQotCQlmQm9yZGVyV2lkdGggKj0gMi4wZjsNCi0JCWJyZWFrOw0KLQl9DQotDQotCXJldHVybiBDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdChyY1dpbmRvdywgZkJvcmRlcldpZHRoKTsNCi19DQotDQotQ1BERl9SZWN0IENQREZTREtfV2lkZ2V0OjpHZXRSb3RhdGVkUmVjdCgpIGNvbnN0DQotew0KLQlDUERGX1JlY3QgcmVjdEFubm90ID0gR2V0UmVjdCgpOw0KLQlGWF9GTE9BVCBmV2lkdGggPSByZWN0QW5ub3QucmlnaHQgLSByZWN0QW5ub3QubGVmdDsNCi0JRlhfRkxPQVQgZkhlaWdodCA9IHJlY3RBbm5vdC50b3AgLSByZWN0QW5ub3QuYm90dG9tOw0KLQ0KLQlDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCA9IEdldEZvcm1Db250cm9sKCk7DQotCUFTU0VSVChwQ29udHJvbCAhPSBOVUxMKTsNCi0NCi0JQ1BERl9SZWN0IHJjUERGV2luZG93Ow0KLQlzd2l0Y2goYWJzKHBDb250cm9sLT5HZXRSb3RhdGlvbigpICUgMzYwKSkNCi0Jew0KLQkJY2FzZSAwOg0KLQkJY2FzZSAxODA6DQotCQlkZWZhdWx0Og0KLQkJCXJjUERGV2luZG93ID0gQ1BERl9SZWN0KDAsIDAsIGZXaWR0aCwgZkhlaWdodCk7CQ0KLQkJCWJyZWFrOw0KLQkJY2FzZSA5MDoNCi0JCWNhc2UgMjcwOg0KLQkJCXJjUERGV2luZG93ID0gQ1BERl9SZWN0KDAsIDAsIGZIZWlnaHQsIGZXaWR0aCk7DQotCQkJYnJlYWs7DQotCX0NCi0NCi0JcmV0dXJuIHJjUERGV2luZG93Ow0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDUERGU0RLX1dpZGdldDo6R2V0QmFja2dyb3VuZEFwcFN0cmVhbSgpIGNvbnN0DQotew0KLQlDUFdMX0NvbG9yIGNyQmFja2dyb3VuZCA9IEdldEZpbGxQV0xDb2xvcigpOw0KLQlpZiAoY3JCYWNrZ3JvdW5kLm5Db2xvclR5cGUgIT0gQ09MT1JUWVBFX1RSQU5TUEFSRU5UKQ0KLQkJcmV0dXJuIENQV0xfVXRpbHM6OkdldFJlY3RGaWxsQXBwU3RyZWFtKEdldFJvdGF0ZWRSZWN0KCksIGNyQmFja2dyb3VuZCk7DQotCWVsc2UNCi0JCXJldHVybiAiIjsNCi19DQotDQotQ0ZYX0J5dGVTdHJpbmcgQ1BERlNES19XaWRnZXQ6OkdldEJvcmRlckFwcFN0cmVhbSgpIGNvbnN0DQotew0KLQlDUERGX1JlY3QgcmNXaW5kb3cgPSBHZXRSb3RhdGVkUmVjdCgpOw0KLQlDUFdMX0NvbG9yIGNyQm9yZGVyID0gR2V0Qm9yZGVyUFdMQ29sb3IoKTsNCi0JQ1BXTF9Db2xvciBjckJhY2tncm91bmQgPSBHZXRGaWxsUFdMQ29sb3IoKTsNCi0JQ1BXTF9Db2xvciBjckxlZnRUb3AsIGNyUmlnaHRCb3R0b207DQotDQotCUZYX0ZMT0FUIGZCb3JkZXJXaWR0aCA9IChGWF9GTE9BVClHZXRCb3JkZXJXaWR0aCgpOw0KLQlGWF9JTlQzMiBuQm9yZGVyU3R5bGUgPSAwOw0KLQlDUFdMX0Rhc2ggZHNCb3JkZXIoMywwLDApOw0KLQ0KLQlzd2l0Y2ggKEdldEJvcmRlclN0eWxlKCkpDQotCXsNCi0JY2FzZSBCQlNfREFTSDoNCi0JCW5Cb3JkZXJTdHlsZSA9IFBCU19EQVNIOw0KLQkJZHNCb3JkZXIgPSBDUFdMX0Rhc2goMywgMywgMCk7DQotCQlicmVhazsNCi0JY2FzZSBCQlNfQkVWRUxFRDoNCi0JCW5Cb3JkZXJTdHlsZSA9IFBCU19CRVZFTEVEOw0KLQkJZkJvcmRlcldpZHRoICo9IDI7DQotCQljckxlZnRUb3AgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLCAxKTsNCi0JCWNyUmlnaHRCb3R0b20gPSBDUFdMX1V0aWxzOjpEZXZpZGVDb2xvcihjckJhY2tncm91bmQsIDIpOw0KLQkJYnJlYWs7DQotCWNhc2UgQkJTX0lOU0VUOg0KLQkJbkJvcmRlclN0eWxlID0gUEJTX0lOU0VUOw0KLQkJZkJvcmRlcldpZHRoICo9IDI7DQotCQljckxlZnRUb3AgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLCAwLjUpOw0KLQkJY3JSaWdodEJvdHRvbSA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksIDAuNzUpOw0KLQkJYnJlYWs7DQotCWNhc2UgQkJTX1VOREVSTElORToNCi0JCW5Cb3JkZXJTdHlsZSA9IFBCU19VTkRFUkxJTkVEOw0KLQkJYnJlYWs7DQotCWRlZmF1bHQ6IA0KLQkJbkJvcmRlclN0eWxlID0gUEJTX1NPTElEOw0KLQkJYnJlYWs7DQotCX0NCi0NCi0JcmV0dXJuIENQV0xfVXRpbHM6OkdldEJvcmRlckFwcFN0cmVhbShyY1dpbmRvdywgZkJvcmRlcldpZHRoLCBjckJvcmRlciwgY3JMZWZ0VG9wLCANCi0JCWNyUmlnaHRCb3R0b20sIG5Cb3JkZXJTdHlsZSwgZHNCb3JkZXIpOw0KLX0NCi0NCi1DUERGX01hdHJpeCBDUERGU0RLX1dpZGdldDo6R2V0TWF0cml4KCkgY29uc3QNCi17DQotCUNQREZfTWF0cml4IG10Ow0KLQlDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCA9IEdldEZvcm1Db250cm9sKCk7DQotCUFTU0VSVChwQ29udHJvbCAhPSBOVUxMKTsNCi0NCi0JQ1BERl9SZWN0IHJjQW5ub3QgPSBHZXRSZWN0KCk7DQotCUZYX0ZMT0FUIGZXaWR0aCA9IHJjQW5ub3QucmlnaHQgLSByY0Fubm90LmxlZnQ7DQotCUZYX0ZMT0FUIGZIZWlnaHQgPSByY0Fubm90LnRvcCAtIHJjQW5ub3QuYm90dG9tOw0KLQkNCi0NCi0NCi0Jc3dpdGNoIChhYnMocENvbnRyb2wtPkdldFJvdGF0aW9uKCkgJSAzNjApKQ0KLQl7DQotCQljYXNlIDA6DQotCQlkZWZhdWx0Og0KLQkJCW10ID0gQ1BERl9NYXRyaXgoMSwgMCwgMCwgMSwgMCwgMCk7DQotCQkJYnJlYWs7DQotCQljYXNlIDkwOg0KLQkJCW10ID0gQ1BERl9NYXRyaXgoMCwgMSwgLTEsIDAsIGZXaWR0aCwgMCk7DQotCQkJYnJlYWs7DQotCQljYXNlIDE4MDoNCi0JCQltdCA9IENQREZfTWF0cml4KC0xLCAwLCAwLCAtMSwgZldpZHRoLCBmSGVpZ2h0KTsNCi0JCQlicmVhazsNCi0JCWNhc2UgMjcwOg0KLQkJCW10ID0gQ1BERl9NYXRyaXgoMCwgLTEsIDEsIDAsIDAsIGZIZWlnaHQpOw0KLQkJCWJyZWFrOw0KLQl9DQotDQotCXJldHVybiBtdDsNCi19DQotDQotQ1BXTF9Db2xvciBDUERGU0RLX1dpZGdldDo6R2V0VGV4dFBXTENvbG9yKCkgY29uc3QNCi17DQotCUNQV0xfQ29sb3IgY3JUZXh0ID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwgMCk7DQotDQotCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ3RybCA9IEdldEZvcm1Db250cm9sKCk7DQotCUFTU0VSVChwRm9ybUN0cmwgIT0gTlVMTCk7DQotDQotCUNQREZfRGVmYXVsdEFwcGVhcmFuY2UgZGEgPSBwRm9ybUN0cmwtPkdldERlZmF1bHRBcHBlYXJhbmNlKCk7DQotCWlmIChkYS5IYXNDb2xvcigpKQ0KLQl7DQotCQlGWF9JTlQzMiBpQ29sb3JUeXBlOw0KLQkJRlhfRkxPQVQgZmNbNF07DQotCQlkYS5HZXRDb2xvcihpQ29sb3JUeXBlLCBmYyk7DQotCQljclRleHQgPSBDUFdMX0NvbG9yKGlDb2xvclR5cGUsIGZjWzBdLCBmY1sxXSwgZmNbMl0sIGZjWzNdKTsNCi0JfQ0KLQ0KLQlyZXR1cm4gY3JUZXh0Ow0KLX0NCi0NCi1DUFdMX0NvbG9yIENQREZTREtfV2lkZ2V0OjpHZXRCb3JkZXJQV0xDb2xvcigpIGNvbnN0DQotew0KLQlDUFdMX0NvbG9yIGNyQm9yZGVyOw0KLQ0KLQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUN0cmwgPSBHZXRGb3JtQ29udHJvbCgpOw0KLQlBU1NFUlQocEZvcm1DdHJsICE9IE5VTEwpOw0KLQ0KLQlGWF9JTlQzMiBpQ29sb3JUeXBlOw0KLQlGWF9GTE9BVCBmY1s0XTsNCi0JcEZvcm1DdHJsLT5HZXRPcmlnaW5hbEJvcmRlckNvbG9yKGlDb2xvclR5cGUsIGZjKTsNCi0JaWYgKGlDb2xvclR5cGUgPiAwKQ0KLQkJY3JCb3JkZXIgPSBDUFdMX0NvbG9yKGlDb2xvclR5cGUsIGZjWzBdLCBmY1sxXSwgZmNbMl0sIGZjWzNdKTsNCi0NCi0JcmV0dXJuIGNyQm9yZGVyOw0KLX0NCi0NCi1DUFdMX0NvbG9yIENQREZTREtfV2lkZ2V0OjpHZXRGaWxsUFdMQ29sb3IoKSBjb25zdA0KLXsNCi0JQ1BXTF9Db2xvciBjckZpbGw7DQotDQotCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ3RybCA9IEdldEZvcm1Db250cm9sKCk7DQotCUFTU0VSVChwRm9ybUN0cmwgIT0gTlVMTCk7DQotDQotCUZYX0lOVDMyIGlDb2xvclR5cGU7DQotCUZYX0ZMT0FUIGZjWzRdOw0KLQlwRm9ybUN0cmwtPkdldE9yaWdpbmFsQmFja2dyb3VuZENvbG9yKGlDb2xvclR5cGUsIGZjKTsNCi0JaWYgKGlDb2xvclR5cGUgPiAwKQ0KLQkJY3JGaWxsID0gQ1BXTF9Db2xvcihpQ29sb3JUeXBlLCBmY1swXSwgZmNbMV0sIGZjWzJdLCBmY1szXSk7DQotDQotCXJldHVybiBjckZpbGw7DQotfQ0KLQ0KLXZvaWQgQ1BERlNES19XaWRnZXQ6OkFkZEltYWdlVG9BcHBlYXJhbmNlKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzQVBUeXBlLCBDUERGX1N0cmVhbSogcEltYWdlKQ0KLXsNCi0JQVNTRVJUKHBJbWFnZSAhPSBOVUxMKTsNCi0NCi0JQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsNCi0NCi0JQ1BERl9Eb2N1bWVudCogcERvYyA9IG1fcFBhZ2VWaWV3LT5HZXRQREZEb2N1bWVudCgpOy8vcERvY3VtZW50LT5HZXREb2N1bWVudCgpOw0KLQlBU1NFUlQocERvYyAhPSBOVUxMKTsNCi0NCi0JQ1BERl9EaWN0aW9uYXJ5KiBwQVBEaWN0ID0gbV9wQW5ub3QtPm1fcEFubm90RGljdC0+R2V0RGljdCgiQVAiKTsNCi0JQVNTRVJUKHBBUERpY3QgIT0gTlVMTCk7DQotDQotCUNQREZfU3RyZWFtKiBwU3RyZWFtID0gcEFQRGljdC0+R2V0U3RyZWFtKHNBUFR5cGUpOw0KLQlBU1NFUlQocFN0cmVhbSAhPSBOVUxMKTsNCi0NCi0JQ1BERl9EaWN0aW9uYXJ5KiBwU3RyZWFtRGljdCA9IHBTdHJlYW0tPkdldERpY3QoKTsNCi0JQVNTRVJUKHBTdHJlYW1EaWN0ICE9IE5VTEwpOw0KLQ0KLQlDRlhfQnl0ZVN0cmluZyBzSW1hZ2VBbGlhcyA9ICJJTUciOw0KLQ0KLQlpZiAoQ1BERl9EaWN0aW9uYXJ5KiBwSW1hZ2VEaWN0ID0gcEltYWdlLT5HZXREaWN0KCkpDQotCXsNCi0JCXNJbWFnZUFsaWFzID0gcEltYWdlRGljdC0+R2V0U3RyaW5nKCJOYW1lIik7DQotCQlpZiAoc0ltYWdlQWxpYXMuSXNFbXB0eSgpKQ0KLQkJCXNJbWFnZUFsaWFzID0gIklNRyI7DQotCX0JDQotDQotCUNQREZfRGljdGlvbmFyeSogcFN0cmVhbVJlc0xpc3QgPSBwU3RyZWFtRGljdC0+R2V0RGljdCgiUmVzb3VyY2VzIik7DQotCWlmICghcFN0cmVhbVJlc0xpc3QpDQotCXsNCi0JCXBTdHJlYW1SZXNMaXN0ID0gRlhfTkVXIENQREZfRGljdGlvbmFyeSgpOw0KLQkJcFN0cmVhbURpY3QtPlNldEF0KCJSZXNvdXJjZXMiLCBwU3RyZWFtUmVzTGlzdCk7DQotCX0NCi0NCi0JaWYgKHBTdHJlYW1SZXNMaXN0KSANCi0Jew0KLQkJQ1BERl9EaWN0aW9uYXJ5KiBwWE9iamVjdCA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnk7CQkJDQotCQlwWE9iamVjdC0+U2V0QXRSZWZlcmVuY2Uoc0ltYWdlQWxpYXMsIHBEb2MsIHBJbWFnZSk7DQotCQlwU3RyZWFtUmVzTGlzdC0+U2V0QXQoIlhPYmplY3QiLCBwWE9iamVjdCk7DQotCX0NCi19DQotDQotdm9pZCBDUERGU0RLX1dpZGdldDo6UmVtb3ZlQXBwZWFyYW5jZShjb25zdCBDRlhfQnl0ZVN0cmluZyYgc0FQVHlwZSkNCi17DQotCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsNCi0JQVNTRVJUKG1fcEFubm90LT5tX3BBbm5vdERpY3QgIT0gTlVMTCk7DQotDQotCWlmIChDUERGX0RpY3Rpb25hcnkqIHBBUERpY3QgPSBtX3BBbm5vdC0+bV9wQW5ub3REaWN0LT5HZXREaWN0KCJBUCIpKQ0KLQl7DQotCQlwQVBEaWN0LT5SZW1vdmVBdChzQVBUeXBlKTsNCi0JfQ0KLX0NCi0NCi1GWF9CT09MIENQREZTREtfV2lkZ2V0OjpPbkFBY3Rpb24oQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSB0eXBlLCBQREZTREtfRmllbGRBY3Rpb24mIGRhdGEsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldykNCi17DQotCUNQREZfQWN0aW9uIGFjdGlvbiA9IEdldEFBY3Rpb24odHlwZSk7DQotDQotCWlmIChhY3Rpb24gJiYgYWN0aW9uLkdldFR5cGUoKSAhPSBDUERGX0FjdGlvbjo6VW5rbm93bikNCi0Jew0KLSAJCUNQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCA9IHBQYWdlVmlldy0+R2V0U0RLRG9jdW1lbnQoKTsNCi0gCQlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOw0KLSANCi0gCQlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gcERvY3VtZW50LT5HZXRFbnYoKTsNCi0gCQlBU1NFUlQocEVudiAhPSBOVUxMKTsNCi0NCi0JCUNQREZTREtfQWN0aW9uSGFuZGxlciogcEFjdGlvbkhhbmRsZXIgPSBwRW52LT5HZXRBY3Rpb25IYW5kZXIoKTsvKihDUERGU0RLX0FjdGlvbkhhbmRsZXIqKXBBcHAtPkdldEFjdGlvbkhhbmRsZXIoKTsqLw0KLSAJCUFTU0VSVChwQWN0aW9uSGFuZGxlciAhPSBOVUxMKTsNCi0gDQotIAkJcmV0dXJuIHBBY3Rpb25IYW5kbGVyLT5Eb0FjdGlvbl9GaWVsZChhY3Rpb24sIHR5cGUsIHBEb2N1bWVudCwgR2V0Rm9ybUZpZWxkKCksIGRhdGEpOw0KLQl9DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotQ1BERl9BY3Rpb24JQ1BERlNES19XaWRnZXQ6OkdldEFBY3Rpb24oQ1BERl9BQWN0aW9uOjpBQWN0aW9uVHlwZSBlQUFUKQ0KLXsNCi0Jc3dpdGNoIChlQUFUKQ0KLQl7DQotCWNhc2UgQ1BERl9BQWN0aW9uOjpDdXJzb3JFbnRlcjoNCi0JY2FzZSBDUERGX0FBY3Rpb246OkN1cnNvckV4aXQ6DQotCWNhc2UgQ1BERl9BQWN0aW9uOjpCdXR0b25Eb3duOg0KLQljYXNlIENQREZfQUFjdGlvbjo6QnV0dG9uVXA6DQotCWNhc2UgQ1BERl9BQWN0aW9uOjpHZXRGb2N1czoNCi0JY2FzZSBDUERGX0FBY3Rpb246Okxvc2VGb2N1czoNCi0JY2FzZSBDUERGX0FBY3Rpb246OlBhZ2VPcGVuOg0KLQljYXNlIENQREZfQUFjdGlvbjo6UGFnZUNsb3NlOg0KLQljYXNlIENQREZfQUFjdGlvbjo6UGFnZVZpc2libGU6DQotCWNhc2UgQ1BERl9BQWN0aW9uOjpQYWdlSW52aXNpYmxlOg0KLQkJcmV0dXJuIENQREZTREtfQW5ub3Q6OkdldEFBY3Rpb24oZUFBVCk7DQotCWNhc2UgQ1BERl9BQWN0aW9uOjpLZXlTdHJva2U6DQotCWNhc2UgQ1BERl9BQWN0aW9uOjpGb3JtYXQ6DQotCWNhc2UgQ1BERl9BQWN0aW9uOjpWYWxpZGF0ZToNCi0JY2FzZSBDUERGX0FBY3Rpb246OkNhbGN1bGF0ZToNCi0JCXsNCi0JCQlDUERGX0Zvcm1GaWVsZCogcEZpZWxkID0gdGhpcy0+R2V0Rm9ybUZpZWxkKCk7DQotCQkJQVNTRVJUKHBGaWVsZCAhPSBOVUxMKTsNCi0NCi0JCQlpZiAoQ1BERl9BQWN0aW9uIGFhID0gcEZpZWxkLT5HZXRBZGRpdGlvbmFsQWN0aW9uKCkpDQotCQkJCXJldHVybiBhYS5HZXRBY3Rpb24oZUFBVCk7DQotCQkJZWxzZSANCi0JCQkJcmV0dXJuIENQREZTREtfQW5ub3Q6OkdldEFBY3Rpb24oZUFBVCk7DQotCQl9DQotCWRlZmF1bHQ6DQotCQlyZXR1cm4gTlVMTDsNCi0JfQ0KLQ0KLQlyZXR1cm4gTlVMTDsNCi19DQotDQotDQotQ0ZYX1dpZGVTdHJpbmcgQ1BERlNES19XaWRnZXQ6OkdldEFsdGVybmF0ZU5hbWUoKSBjb25zdA0KLXsNCi0JQ1BERl9Gb3JtRmllbGQqCXBGb3JtRmllbGQgPSBHZXRGb3JtRmllbGQoKTsNCi0JQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotDQotCXJldHVybiBwRm9ybUZpZWxkLT5HZXRBbHRlcm5hdGVOYW1lKCk7DQotfQ0KLQ0KLUZYX0lOVDMyCUNQREZTREtfV2lkZ2V0OjpHZXRBcHBlYXJhbmNlQWdlKCkgY29uc3QNCi17DQotCXJldHVybiBtX25BcHBBZ2U7DQotfQ0KLQ0KLUZYX0lOVDMyIENQREZTREtfV2lkZ2V0OjpHZXRWYWx1ZUFnZSgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9uVmFsdWVBZ2U7DQotfQ0KLQ0KLQ0KLUZYX0JPT0wJQ1BERlNES19XaWRnZXQ6OkhpdFRlc3QoRlhfRkxPQVQgcGFnZVgsIEZYX0ZMT0FUIHBhZ2VZKQ0KLXsNCi0JQ1BERl9Bbm5vdCogcEFubm90ID0gR2V0UERGQW5ub3QoKTsNCi0JQ0ZYX0Zsb2F0UmVjdCBhbm5vdFJlY3Q7DQotCXBBbm5vdC0+R2V0UmVjdChhbm5vdFJlY3QpOw0KLQlpZihhbm5vdFJlY3QuQ29udGFpbnMocGFnZVgsIHBhZ2VZKSkNCi0Jew0KLQkJaWYgKCFJc1Zpc2libGUoKSkgcmV0dXJuIEZBTFNFOw0KLQkJDQotCQlpbnQgbkZpZWxkRmxhZ3MgPSBHZXRGaWVsZEZsYWdzKCk7DQotCQlpZiAoKG5GaWVsZEZsYWdzICYgRklFTERGTEFHX1JFQURPTkxZKSA9PSBGSUVMREZMQUdfUkVBRE9OTFkpIA0KLQkJCXJldHVybiBGQUxTRTsNCi0JCQ0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1DUERGU0RLX0ludGVyRm9ybTo6Q1BERlNES19JbnRlckZvcm0oQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50KQ0KLQk6bV9wRG9jdW1lbnQocERvY3VtZW50KSwNCi0JbV9wSW50ZXJGb3JtKE5VTEwpLA0KLQltX2JDYWxjdWxhdGUoVFJVRSksDQotCW1fYkJ1c3koRkFMU0UpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotCW1fcEludGVyRm9ybSA9IG5ldyBDUERGX0ludGVyRm9ybShtX3BEb2N1bWVudC0+R2V0RG9jdW1lbnQoKSwgRkFMU0UpOw0KLQlBU1NFUlQobV9wSW50ZXJGb3JtICE9IE5VTEwpOw0KLQltX3BJbnRlckZvcm0tPlNldEZvcm1Ob3RpZnkodGhpcyk7DQotDQotCWZvcihpbnQgaT0wOyBpPDY7IGkrKykNCi0JCW1fYk5lZWRIaWdodGxpZ2h0W2ldID0gRkFMU0U7DQotCW1faUhpZ2hsaWdodEFscGhhID0gMDsNCi19DQotDQotQ1BERlNES19JbnRlckZvcm06On5DUERGU0RLX0ludGVyRm9ybSgpDQotew0KLQlBU1NFUlQobV9wSW50ZXJGb3JtICE9IE5VTEwpOw0KLQlkZWxldGUgbV9wSW50ZXJGb3JtOw0KLQltX3BJbnRlckZvcm0gPSBOVUxMOw0KLQ0KLQltX01hcC5SZW1vdmVBbGwoKTsNCi19DQotDQotdm9pZCBDUERGU0RLX0ludGVyRm9ybTo6RGVzdHJveSgpDQotew0KLQlkZWxldGUgdGhpczsNCi19DQotDQotQ1BERl9JbnRlckZvcm0qIENQREZTREtfSW50ZXJGb3JtOjpHZXRJbnRlckZvcm0oKQ0KLXsNCi0JcmV0dXJuIG1fcEludGVyRm9ybTsNCi19DQotDQotQ1BERlNES19Eb2N1bWVudCogQ1BERlNES19JbnRlckZvcm06OkdldERvY3VtZW50KCkNCi17DQotCXJldHVybiBtX3BEb2N1bWVudDsNCi19DQotDQotRlhfQk9PTCBDUERGU0RLX0ludGVyRm9ybTo6SGlnaGxpZ2h0V2lkZ2V0cygpDQotew0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUNQREZTREtfV2lkZ2V0KiBDUERGU0RLX0ludGVyRm9ybTo6R2V0U2libGluZyhDUERGU0RLX1dpZGdldCogcFdpZGdldCwgRlhfQk9PTCBiTmV4dCkgY29uc3QNCi17DQotCUFTU0VSVChwV2lkZ2V0ICE9IE5VTEwpOw0KLQ0KLQlDQkFfQW5ub3RJdGVyYXRvciogcEl0ZXJhdG9yID0gbmV3IENCQV9Bbm5vdEl0ZXJhdG9yKHBXaWRnZXQtPkdldFBhZ2VWaWV3KCksICJXaWRnZXQiLCAiIik7DQotCUFTU0VSVChwSXRlcmF0b3IgIT0gTlVMTCk7DQotDQotCUNQREZTREtfV2lkZ2V0KiBwUmV0ID0gTlVMTDsNCi0NCi0JaWYgKGJOZXh0KQ0KLQkJcFJldCA9IChDUERGU0RLX1dpZGdldCopcEl0ZXJhdG9yLT5HZXROZXh0QW5ub3QocFdpZGdldCk7DQotCWVsc2UNCi0JCXBSZXQgPSAoQ1BERlNES19XaWRnZXQqKXBJdGVyYXRvci0+R2V0UHJldkFubm90KHBXaWRnZXQpOw0KLQ0KLQlwSXRlcmF0b3ItPlJlbGVhc2UoKTsNCi0JDQotCXJldHVybiBwUmV0Ow0KLQ0KLX0NCi0NCi1DUERGU0RLX1dpZGdldCoJQ1BERlNES19JbnRlckZvcm06OkdldFdpZGdldChDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCkgY29uc3QNCi17DQotCWlmKCFwQ29udHJvbCB8fCAhbV9wSW50ZXJGb3JtKSByZXR1cm4gTlVMTDsNCi0JDQotCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gTlVMTDsNCi0JbV9NYXAuTG9va3VwKHBDb250cm9sLCBwV2lkZ2V0KTsNCi0NCi0JaWYgKHBXaWRnZXQpIHJldHVybiBwV2lkZ2V0Ow0KLQ0KLQlDUERGX0RpY3Rpb25hcnkqIHBDb250cm9sRGljdCA9IHBDb250cm9sLT5HZXRXaWRnZXQoKTsNCi0JQVNTRVJUKHBDb250cm9sRGljdCAhPSBOVUxMKTsNCi0NCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQlDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQgPSBtX3BEb2N1bWVudC0+R2V0RG9jdW1lbnQoKTsNCi0NCi0JQ1BERlNES19QYWdlVmlldyogcFBhZ2UgPSBOVUxMOw0KLQ0KLQlpZiAoQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QgPSBwQ29udHJvbERpY3QtPkdldERpY3QoIlAiKSkNCi0Jew0KLQkJaW50IG5QYWdlSW5kZXggPSBwRG9jdW1lbnQtPkdldFBhZ2VJbmRleChwUGFnZURpY3QtPkdldE9iak51bSgpKTsNCi0JCWlmIChuUGFnZUluZGV4ID49IDApDQotCQl7DQotCQkJcFBhZ2UgPSBtX3BEb2N1bWVudC0+R2V0UGFnZVZpZXcoblBhZ2VJbmRleCk7DQotCQl9DQotCX0NCi0NCi0JaWYgKCFwUGFnZSkgDQotCXsNCi0JCWludCBuUGFnZUluZGV4ID0gR2V0UGFnZUluZGV4QnlBbm5vdERpY3QocERvY3VtZW50LCBwQ29udHJvbERpY3QpOw0KLQkJaWYgKG5QYWdlSW5kZXggPj0gMCkNCi0JCXsNCi0JCQlwUGFnZSA9IG1fcERvY3VtZW50LT5HZXRQYWdlVmlldyhuUGFnZUluZGV4KTsNCi0JCX0NCi0JfQ0KLQ0KLQlpZiAocFBhZ2UpDQotCQlyZXR1cm4gKENQREZTREtfV2lkZ2V0KilwUGFnZS0+R2V0QW5ub3RCeURpY3QocENvbnRyb2xEaWN0KTsNCi0NCi0JcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLXZvaWQgQ1BERlNES19JbnRlckZvcm06OkdldFdpZGdldHMoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNGaWVsZE5hbWUsIENGWF9QdHJBcnJheSYgd2lkZ2V0cykNCi17DQotCUFTU0VSVChtX3BJbnRlckZvcm0gIT0gTlVMTCk7DQotDQotCWZvciAoaW50IGk9MCxzej1tX3BJbnRlckZvcm0tPkNvdW50RmllbGRzKHNGaWVsZE5hbWUpOyBpPHN6OyBpKyspDQotCXsNCi0JCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gbV9wSW50ZXJGb3JtLT5HZXRGaWVsZChpLCBzRmllbGROYW1lKTsNCi0JCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQkJR2V0V2lkZ2V0cyhwRm9ybUZpZWxkLCB3aWRnZXRzKTsJDQotCX0NCi19DQotDQotdm9pZCBDUERGU0RLX0ludGVyRm9ybTo6R2V0V2lkZ2V0cyhDUERGX0Zvcm1GaWVsZCogcEZpZWxkLCBDRlhfUHRyQXJyYXkmIHdpZGdldHMpDQotew0KLQlBU1NFUlQocEZpZWxkICE9IE5VTEwpOw0KLQ0KLQlmb3IgKGludCBpPTAsaXN6PXBGaWVsZC0+Q291bnRDb250cm9scygpOyBpPGlzejsgaSsrKQ0KLQl7DQotCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUN0cmwgPSBwRmllbGQtPkdldENvbnRyb2woaSk7DQotCQlBU1NFUlQocEZvcm1DdHJsICE9IE5VTEwpOw0KLQ0KLQkJQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSBHZXRXaWRnZXQocEZvcm1DdHJsKTsNCi0NCi0JCWlmIChwV2lkZ2V0KQ0KLQkJCXdpZGdldHMuQWRkKHBXaWRnZXQpOw0KLQl9DQotfQ0KLQ0KLWludCBDUERGU0RLX0ludGVyRm9ybTo6R2V0UGFnZUluZGV4QnlBbm5vdERpY3QoQ1BERl9Eb2N1bWVudCogcERvY3VtZW50LCBDUERGX0RpY3Rpb25hcnkqIHBBbm5vdERpY3QpIGNvbnN0DQotew0KLQlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOw0KLQlBU1NFUlQocEFubm90RGljdCAhPSBOVUxMKTsNCi0NCi0JZm9yIChpbnQgaT0wLHN6PXBEb2N1bWVudC0+R2V0UGFnZUNvdW50KCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJaWYgKENQREZfRGljdGlvbmFyeSogcFBhZ2VEaWN0ID0gcERvY3VtZW50LT5HZXRQYWdlKGkpKQ0KLQkJewkJCQ0KLQkJCWlmIChDUERGX0FycmF5KiBwQW5ub3RzID0gcFBhZ2VEaWN0LT5HZXRBcnJheSgiQW5ub3RzIikpDQotCQkJew0KLQkJCQlmb3IgKGludCBqPTAsanN6PXBBbm5vdHMtPkdldENvdW50KCk7IGo8anN6OyBqKyspDQotCQkJCXsNCi0JCQkJCUNQREZfT2JqZWN0KiBwRGljdCA9IHBBbm5vdHMtPkdldEVsZW1lbnRWYWx1ZShqKTsNCi0JCQkJCWlmIChwQW5ub3REaWN0ID09IHBEaWN0KQ0KLQkJCQkJew0KLQkJCQkJCXJldHVybiBpOw0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQl9DQotDQotCXJldHVybiAtMTsNCi19DQotDQotdm9pZCBDUERGU0RLX0ludGVyRm9ybTo6QWRkTWFwKENQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sLCBDUERGU0RLX1dpZGdldCogcFdpZGdldCkNCi17DQotCW1fTWFwLlNldEF0KHBDb250cm9sLCBwV2lkZ2V0KTsNCi19DQotDQotdm9pZCBDUERGU0RLX0ludGVyRm9ybTo6UmVtb3ZlTWFwKENQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sKQ0KLXsNCi0JbV9NYXAuUmVtb3ZlS2V5KHBDb250cm9sKTsNCi19DQotDQotdm9pZCBDUERGU0RLX0ludGVyRm9ybTo6RW5hYmxlQ2FsY3VsYXRlKEZYX0JPT0wgYkVuYWJsZWQpDQotew0KLQltX2JDYWxjdWxhdGUgPSBiRW5hYmxlZDsNCi19DQotDQotRlhfQk9PTCBDUERGU0RLX0ludGVyRm9ybTo6SXNDYWxjdWxhdGVFbmFibGVkKCkgY29uc3QNCi17DQotCXJldHVybiBtX2JDYWxjdWxhdGU7DQotfQ0KLQ0KLSNpZmRlZiBfV0lOMzINCi1DUERGX1N0cmVhbSogQ1BERlNES19JbnRlckZvcm06OkxvYWRJbWFnZUZyb21GaWxlKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzRmlsZSkNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0JQ1BERl9Eb2N1bWVudCogcERvY3VtZW50ID0gbV9wRG9jdW1lbnQtPkdldERvY3VtZW50KCk7DQotCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCUNQREZfU3RyZWFtKiBwUmV0U3RyZWFtID0gTlVMTDsNCi0NCi0JaWYgKENGWF9ESUJpdG1hcCogcEJtcCA9IENGWF9XaW5kb3dzRElCOjpMb2FkRnJvbUZpbGUoc0ZpbGUpKQ0KLQl7DQotCQlpbnQgbldpZHRoID0gcEJtcC0+R2V0V2lkdGgoKTsNCi0JCWludCBuSGVpZ2h0ID0gcEJtcC0+R2V0SGVpZ2h0KCk7DQotDQotCQlDUERGX0ltYWdlIEltYWdlKHBEb2N1bWVudCk7DQotCQlJbWFnZS5TZXRJbWFnZShwQm1wLCBGQUxTRSk7DQotCQlDUERGX1N0cmVhbSogcEltYWdlU3RyZWFtID0gSW1hZ2UuR2V0U3RyZWFtKCk7DQotCQlpZiAocEltYWdlU3RyZWFtKQ0KLQkJew0KLQkJCWlmIChwSW1hZ2VTdHJlYW0tPkdldE9iak51bSgpID09IDApDQotCQkJCXBEb2N1bWVudC0+QWRkSW5kaXJlY3RPYmplY3QocEltYWdlU3RyZWFtKTsNCi0NCi0JCQlDUERGX0RpY3Rpb25hcnkqIHBTdHJlYW1EaWN0ID0gbmV3IENQREZfRGljdGlvbmFyeSgpOw0KLQkJCXBTdHJlYW1EaWN0LT5TZXRBdE5hbWUoIlN1YnR5cGUiLCAiRm9ybSIpOw0KLQkJCXBTdHJlYW1EaWN0LT5TZXRBdE5hbWUoIk5hbWUiLCAiSU1HIik7DQotCQkJQ1BERl9BcnJheSogcE1hdHJpeCA9IG5ldyBDUERGX0FycmF5KCk7DQotCQkJcFN0cmVhbURpY3QtPlNldEF0KCJNYXRyaXgiLCBwTWF0cml4KTsNCi0JCQlwTWF0cml4LT5BZGRJbnRlZ2VyKDEpOw0KLQkJCXBNYXRyaXgtPkFkZEludGVnZXIoMCk7DQotCQkJcE1hdHJpeC0+QWRkSW50ZWdlcigwKTsNCi0JCQlwTWF0cml4LT5BZGRJbnRlZ2VyKDEpOw0KLQkJCXBNYXRyaXgtPkFkZEludGVnZXIoLW5XaWR0aCAvIDIpOw0KLQkJCXBNYXRyaXgtPkFkZEludGVnZXIoLW5IZWlnaHQgLyAyKTsNCi0JCQlDUERGX0RpY3Rpb25hcnkqIHBSZXNvdXJjZSA9IG5ldyBDUERGX0RpY3Rpb25hcnkoKTsNCi0JCQlwU3RyZWFtRGljdC0+U2V0QXQoIlJlc291cmNlcyIsIHBSZXNvdXJjZSk7DQotCQkJQ1BERl9EaWN0aW9uYXJ5KiBwWE9iamVjdCA9IG5ldyBDUERGX0RpY3Rpb25hcnkoKTsNCi0JCQlwUmVzb3VyY2UtPlNldEF0KCJYT2JqZWN0IiwgcFhPYmplY3QpOw0KLQkJCXBYT2JqZWN0LT5TZXRBdFJlZmVyZW5jZSgiSW1nIiwgcERvY3VtZW50LCBwSW1hZ2VTdHJlYW0pOw0KLQkJCUNQREZfQXJyYXkqIHBQcm9jU2V0ID0gbmV3IENQREZfQXJyYXkoKTsNCi0JCQlwUmVzb3VyY2UtPlNldEF0KCJQcm9jU2V0IiwgcFByb2NTZXQpOw0KLQkJCXBQcm9jU2V0LT5BZGROYW1lKCJQREYiKTsNCi0JCQlwUHJvY1NldC0+QWRkTmFtZSgiSW1hZ2VDIik7DQotCQkJcFN0cmVhbURpY3QtPlNldEF0TmFtZSgiVHlwZSIsICJYT2JqZWN0Iik7DQotCQkJQ1BERl9BcnJheSogcEJCb3ggPSBuZXcgQ1BERl9BcnJheSgpOw0KLQkJCXBTdHJlYW1EaWN0LT5TZXRBdCgiQkJveCIsIHBCQm94KTsNCi0JCQlwQkJveC0+QWRkSW50ZWdlcigwKTsNCi0JCQlwQkJveC0+QWRkSW50ZWdlcigwKTsNCi0JCQlwQkJveC0+QWRkSW50ZWdlcihuV2lkdGgpOw0KLQkJCXBCQm94LT5BZGRJbnRlZ2VyKG5IZWlnaHQpOw0KLQkJCXBTdHJlYW1EaWN0LT5TZXRBdEludGVnZXIoIkZvcm1UeXBlIiwgMSk7DQotDQotCQkJcFJldFN0cmVhbSA9IG5ldyBDUERGX1N0cmVhbShOVUxMLCAwLCBOVUxMKTsNCi0JCQlDRlhfQnl0ZVN0cmluZyBjc1N0cmVhbTsNCi0JCQljc1N0cmVhbS5Gb3JtYXQoInFcbiVkIDAgMCAlZCAwIDAgY21cbi9JbWcgRG9cblEiLCBuV2lkdGgsIG5IZWlnaHQpOw0KLQkJCXBSZXRTdHJlYW0tPkluaXRTdHJlYW0oKEZYX0JZVEUqKShGWF9MUENTVFIpY3NTdHJlYW0sIGNzU3RyZWFtLkdldExlbmd0aCgpLCBwU3RyZWFtRGljdCk7DQotCQkJcERvY3VtZW50LT5BZGRJbmRpcmVjdE9iamVjdChwUmV0U3RyZWFtKTsNCi0JCX0NCi0NCi0JCWRlbGV0ZSBwQm1wOw0KLQl9DQotDQotCXJldHVybiBwUmV0U3RyZWFtOw0KLX0NCi0jZW5kaWYNCi0NCi12b2lkIENQREZTREtfSW50ZXJGb3JtOjpPbkNhbGN1bGF0ZShDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCkNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0JQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcERvY3VtZW50LT5HZXRFbnYoKTsNCi0JQVNTRVJUKHBFbnYpOw0KLQlpZighcEVudi0+SXNKU0luaXRpYXRlZCgpKQ0KLQkJcmV0dXJuOw0KLQ0KLQlpZiAobV9iQnVzeSkgcmV0dXJuOw0KLQ0KLQltX2JCdXN5ID0gVFJVRTsNCi0NCi0JaWYgKHRoaXMtPklzQ2FsY3VsYXRlRW5hYmxlZCgpKQ0KLQl7DQotCQlJRlhKU19SdW50aW1lKiBwUnVudGltZSA9IG1fcERvY3VtZW50LT5HZXRKc1J1bnRpbWUoKTsNCi0JCUFTU0VSVChwUnVudGltZSAhPSBOVUxMKTsNCi0NCi0JCXBSdW50aW1lLT5TZXRSZWFkZXJEb2N1bWVudChtX3BEb2N1bWVudCk7DQotDQotCQlpbnQgblNpemUgPSBtX3BJbnRlckZvcm0tPkNvdW50RmllbGRzSW5DYWxjdWxhdGlvbk9yZGVyKCk7DQotCQlmb3IgKGludCBpPTA7IGk8blNpemU7IGkrKykNCi0JCXsNCi0JCQlpZihDUERGX0Zvcm1GaWVsZCogcEZpZWxkID0gbV9wSW50ZXJGb3JtLT5HZXRGaWVsZEluQ2FsY3VsYXRpb25PcmRlcihpKSkNCi0JCQl7DQotLy8JCQlBU1NFUlQocEZpZWxkICE9IE5VTEwpOw0KLQkJCQlpbnQgblR5cGUgPSBwRmllbGQtPkdldEZpZWxkVHlwZSgpOw0KLQkJCQlpZiAoblR5cGUgPT0gRklFTERUWVBFX0NPTUJPQk9YIHx8IG5UeXBlID09IEZJRUxEVFlQRV9URVhURklFTEQpDQotCQkJCXsNCi0JCQkJCUNQREZfQUFjdGlvbiBhQWN0aW9uID0gcEZpZWxkLT5HZXRBZGRpdGlvbmFsQWN0aW9uKCk7DQotCQkJCQlpZiAoYUFjdGlvbiAmJiBhQWN0aW9uLkFjdGlvbkV4aXN0KENQREZfQUFjdGlvbjo6Q2FsY3VsYXRlKSkNCi0JCQkJCXsNCi0JCQkJCQlDUERGX0FjdGlvbiBhY3Rpb24gPSBhQWN0aW9uLkdldEFjdGlvbihDUERGX0FBY3Rpb246OkNhbGN1bGF0ZSk7DQotCQkJCQkJaWYgKGFjdGlvbikNCi0JCQkJCQl7DQotCQkJCQkJCUNGWF9XaWRlU3RyaW5nIGNzSlMgPSBhY3Rpb24uR2V0SmF2YVNjcmlwdCgpOw0KLQkJCQkJCQlpZiAoIWNzSlMuSXNFbXB0eSgpKQ0KLQkJCQkJCQl7DQotCQkJCQkJCQlJRlhKU19Db250ZXh0KiBwQ29udGV4dCA9IHBSdW50aW1lLT5OZXdDb250ZXh0KCk7DQotCQkJCQkJCQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotCQkJCQkJCQkNCi0JCQkJCQkJCUNGWF9XaWRlU3RyaW5nIHNPbGRWYWx1ZSA9IHBGaWVsZC0+R2V0VmFsdWUoKTsNCi0JCQkJCQkJCUNGWF9XaWRlU3RyaW5nIHNWYWx1ZSA9IHNPbGRWYWx1ZTsNCi0JCQkJCQkJCUZYX0JPT0wgYlJDID0gVFJVRTsNCi0JCQkJCQkJCXBDb250ZXh0LT5PbkZpZWxkX0NhbGN1bGF0ZShwRm9ybUZpZWxkLCBwRmllbGQsIHNWYWx1ZSwgYlJDKTsNCi0JCQkJCQkJCQ0KLQkJCQkJCQkJQ0ZYX1dpZGVTdHJpbmcgc0luZm87DQotCQkJCQkJCQlGWF9CT09MIGJSZXQgPSBwQ29udGV4dC0+UnVuU2NyaXB0KGNzSlMsIHNJbmZvKTsNCi0JCQkJCQkJCXBSdW50aW1lLT5SZWxlYXNlQ29udGV4dChwQ29udGV4dCk7DQotCQkJCQkJCQkNCi0JCQkJCQkJCWlmIChiUmV0KQ0KLQkJCQkJCQkJew0KLQkJCQkJCQkJCWlmIChiUkMpDQotCQkJCQkJCQkJew0KLQkJCQkJCQkJCQlpZiAoc1ZhbHVlLkNvbXBhcmUoc09sZFZhbHVlKSAhPSAwKQ0KLQkJCQkJCQkJCQkJcEZpZWxkLT5TZXRWYWx1ZShzVmFsdWUsIFRSVUUpOw0KLQkJCQkJCQkJCX0NCi0JCQkJCQkJCX0NCi0JCQkJCQkJfQ0KLQkJCQkJCX0NCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCX0NCi0JCX0NCi0NCi0JCQ0KLQl9DQotDQotCW1fYkJ1c3kgPSBGQUxTRTsNCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgQ1BERlNES19JbnRlckZvcm06Ok9uRm9ybWF0KENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkLCBpbnQgbkNvbW1pdEtleSwgRlhfQk9PTCYgYkZvcm1hdGVkKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JQ0ZYX1dpZGVTdHJpbmcgc1ZhbHVlID0gcEZvcm1GaWVsZC0+R2V0VmFsdWUoKTsNCi0JQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcERvY3VtZW50LT5HZXRFbnYoKTsNCi0JQVNTRVJUKHBFbnYpOw0KLQlpZighcEVudi0+SXNKU0luaXRpYXRlZCgpKQ0KLQl7DQotCQliRm9ybWF0ZWQgPSBGQUxTRTsNCi0JCXJldHVybiBzVmFsdWU7DQotCX0gDQotDQotCUlGWEpTX1J1bnRpbWUqIHBSdW50aW1lID0gbV9wRG9jdW1lbnQtPkdldEpzUnVudGltZSgpOw0KLQlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7DQotCQ0KLQlwUnVudGltZS0+U2V0UmVhZGVyRG9jdW1lbnQobV9wRG9jdW1lbnQpOw0KLQ0KLQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgPT0gRklFTERUWVBFX0NPTUJPQk9YKQ0KLQl7DQotCQlpZiAocEZvcm1GaWVsZC0+Q291bnRTZWxlY3RlZEl0ZW1zKCkgPiAwKQ0KLQkJew0KLQkJCWludCBpbmRleCA9IHBGb3JtRmllbGQtPkdldFNlbGVjdGVkSW5kZXgoMCk7DQotCQkJaWYgKGluZGV4ID49IDApDQotCQkJCXNWYWx1ZSA9IHBGb3JtRmllbGQtPkdldE9wdGlvbkxhYmVsKGluZGV4KTsNCi0JCX0NCi0JfQ0KLQ0KLQliRm9ybWF0ZWQgPSBGQUxTRTsNCi0NCi0JQ1BERl9BQWN0aW9uIGFBY3Rpb24gPSBwRm9ybUZpZWxkLT5HZXRBZGRpdGlvbmFsQWN0aW9uKCk7DQotCWlmIChhQWN0aW9uICE9IE5VTEwgJiYgYUFjdGlvbi5BY3Rpb25FeGlzdChDUERGX0FBY3Rpb246OkZvcm1hdCkpIA0KLQl7DQotCQlDUERGX0FjdGlvbiBhY3Rpb24gPSBhQWN0aW9uLkdldEFjdGlvbihDUERGX0FBY3Rpb246OkZvcm1hdCk7DQotCQlpZiAoYWN0aW9uKQ0KLQkJewkJCQ0KLQkJCUNGWF9XaWRlU3RyaW5nIHNjcmlwdCA9IGFjdGlvbi5HZXRKYXZhU2NyaXB0KCk7DQotCQkJaWYgKCFzY3JpcHQuSXNFbXB0eSgpKQ0KLQkJCXsNCi0JCQkJQ0ZYX1dpZGVTdHJpbmcgVmFsdWUgPSBzVmFsdWU7DQotDQotCQkJCUlGWEpTX0NvbnRleHQqIHBDb250ZXh0ID0gcFJ1bnRpbWUtPk5ld0NvbnRleHQoKTsNCi0JCQkJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOw0KLQ0KLQkJCQlwQ29udGV4dC0+T25GaWVsZF9Gb3JtYXQobkNvbW1pdEtleSwgcEZvcm1GaWVsZCwgVmFsdWUsIFRSVUUpOw0KLQkJCQ0KLQkJCQlDRlhfV2lkZVN0cmluZyBzSW5mbzsNCi0gCQkJCUZYX0JPT0wgYlJldCA9IHBDb250ZXh0LT5SdW5TY3JpcHQoc2NyaXB0LCBzSW5mbyk7DQotCQkJCXBSdW50aW1lLT5SZWxlYXNlQ29udGV4dChwQ29udGV4dCk7DQotDQotCQkJCWlmIChiUmV0KQ0KLQkJCQl7DQotCQkJCQlzVmFsdWUgPSBWYWx1ZTsNCi0JCQkJCWJGb3JtYXRlZCA9IFRSVUU7DQotCQkJCX0NCi0JCQl9DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIHNWYWx1ZTsNCi19DQotDQotdm9pZCBDUERGU0RLX0ludGVyRm9ybTo6UmVzZXRGaWVsZEFwcGVhcmFuY2UoQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQsIEZYX0xQQ1dTVFIgc1ZhbHVlLCBGWF9CT09MIGJWYWx1ZUNoYW5nZWQpDQotew0KLQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JZm9yIChpbnQgaT0wLHN6PXBGb3JtRmllbGQtPkNvdW50Q29udHJvbHMoKTsgaTxzejsgaSsrKQ0KLQl7DQotCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUN0cmwgPSBwRm9ybUZpZWxkLT5HZXRDb250cm9sKGkpOw0KLQkJQVNTRVJUKHBGb3JtQ3RybCAhPSBOVUxMKTsNCi0NCi0JCUFTU0VSVChtX3BJbnRlckZvcm0gIT0gTlVMTCk7DQotCQlpZihDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IEdldFdpZGdldChwRm9ybUN0cmwpKQ0KLQkJCXBXaWRnZXQtPlJlc2V0QXBwZWFyYW5jZShzVmFsdWUsIGJWYWx1ZUNoYW5nZWQpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BERlNES19JbnRlckZvcm06OlVwZGF0ZUZpZWxkKENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkKQ0KLXsNCi0JQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotDQotCWZvciAoaW50IGk9MCxzej1wRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1DdHJsID0gcEZvcm1GaWVsZC0+R2V0Q29udHJvbChpKTsNCi0JCUFTU0VSVChwRm9ybUN0cmwgIT0gTlVMTCk7DQotDQotCQlpZihDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IEdldFdpZGdldChwRm9ybUN0cmwpKQ0KLQkJew0KLQkJCUNQREZEb2NfRW52aXJvbm1lbnQgKiBwRW52ID0gbV9wRG9jdW1lbnQtPkdldEVudigpOw0KLQkJCUNGRkxfSUZvcm1GaWxsZXIqIHBJRm9ybUZpbGxlciA9IHBFbnYtPkdldElGb3JtRmlsbGVyKCk7DQotCQkJDQotCQkJQ1BERl9QYWdlICogcFBhZ2UgPSBwV2lkZ2V0LT5HZXRQREZQYWdlKCk7DQotCQkJQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldyA9IG1fcERvY3VtZW50LT5HZXRQYWdlVmlldyhwUGFnZSxGQUxTRSk7DQotDQotCQkJRlhfUkVDVCByY0JCb3ggPSBwSUZvcm1GaWxsZXItPkdldFZpZXdCQm94KHBQYWdlVmlldywgcFdpZGdldCk7DQotDQotCQkJcEVudi0+RkZJX0ludmFsaWRhdGUocFBhZ2UscmNCQm94LmxlZnQsIHJjQkJveC50b3AsIHJjQkJveC5yaWdodCwgcmNCQm94LmJvdHRvbSk7DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBDUERGU0RLX0ludGVyRm9ybTo6T25LZXlTdHJva2VDb21taXQoQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQsIENGWF9XaWRlU3RyaW5nJiBjc1ZhbHVlLCBGWF9CT09MJiBiUkMpDQotew0KLQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0gCUNQREZfQUFjdGlvbiBhQWN0aW9uID0gcEZvcm1GaWVsZC0+R2V0QWRkaXRpb25hbEFjdGlvbigpOw0KLSAJaWYgKGFBY3Rpb24gIT0gTlVMTCAmJiBhQWN0aW9uLkFjdGlvbkV4aXN0KENQREZfQUFjdGlvbjo6S2V5U3Ryb2tlKSkgDQotIAl7DQotIAkJQ1BERl9BY3Rpb24gYWN0aW9uID0gYUFjdGlvbi5HZXRBY3Rpb24oQ1BERl9BQWN0aW9uOjpLZXlTdHJva2UpOw0KLSAJCWlmIChhY3Rpb24pDQotIAkJewkJCSANCi0gCQkJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLSAJCQlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gbV9wRG9jdW1lbnQtPkdldEVudigpOw0KLSAJCQlBU1NFUlQocEVudiAhPSBOVUxMKTsNCi0NCi0JCQlDUERGU0RLX0FjdGlvbkhhbmRsZXIqIHBBY3Rpb25IYW5kbGVyID0gcEVudi0+R2V0QWN0aW9uSGFuZGVyKCk7DQotCQkJQVNTRVJUKHBBY3Rpb25IYW5kbGVyICE9IE5VTEwpOw0KLQkNCi0JCQlQREZTREtfRmllbGRBY3Rpb24gZmE7DQotCQkJZmEuYk1vZGlmaWVyID0gcEVudi0+RkZJX0lzQ1RSTEtleURvd24oMCk7DQotIAkJCWZhLmJTaGlmdCA9IHBFbnYtPkZGSV9Jc1NISUZUS2V5RG93bigwKTsNCi0JCQlmYS5zVmFsdWUgPSBjc1ZhbHVlOw0KLQ0KLSAgIAkJCXBBY3Rpb25IYW5kbGVyLT5Eb0FjdGlvbl9GaWVsZEphdmFTY3JpcHQoYWN0aW9uLCBDUERGX0FBY3Rpb246OktleVN0cm9rZSwgDQotICAgCQkJCW1fcERvY3VtZW50LCBwRm9ybUZpZWxkLCBmYSk7DQotICAgCQkJYlJDID0gZmEuYlJDOw0KLSAJCX0NCi0gCX0NCi19DQotDQotdm9pZCBDUERGU0RLX0ludGVyRm9ybTo6T25WYWxpZGF0ZShDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCwgQ0ZYX1dpZGVTdHJpbmcmIGNzVmFsdWUsIEZYX0JPT0wmIGJSQykNCi17DQotCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLSAJQ1BERl9BQWN0aW9uIGFBY3Rpb24gPSBwRm9ybUZpZWxkLT5HZXRBZGRpdGlvbmFsQWN0aW9uKCk7DQotIAlpZiAoYUFjdGlvbiAhPSBOVUxMICYmIGFBY3Rpb24uQWN0aW9uRXhpc3QoQ1BERl9BQWN0aW9uOjpWYWxpZGF0ZSkpIA0KLSAJew0KLSAJCUNQREZfQWN0aW9uIGFjdGlvbiA9IGFBY3Rpb24uR2V0QWN0aW9uKENQREZfQUFjdGlvbjo6VmFsaWRhdGUpOw0KLQkJaWYgKGFjdGlvbikNCi0gCQl7CQkNCi0JCQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotCQkJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcERvY3VtZW50LT5HZXRFbnYoKTsNCi0JCQlBU1NFUlQocEVudiAhPSBOVUxMKTsNCi0JCQkNCi0JCQlDUERGU0RLX0FjdGlvbkhhbmRsZXIqIHBBY3Rpb25IYW5kbGVyID0gcEVudi0+R2V0QWN0aW9uSGFuZGVyKCk7DQotCQkJQVNTRVJUKHBBY3Rpb25IYW5kbGVyICE9IE5VTEwpOw0KLQ0KLQkJCVBERlNES19GaWVsZEFjdGlvbiBmYTsNCi0JCQlmYS5iTW9kaWZpZXIgPSBwRW52LT5GRklfSXNDVFJMS2V5RG93bigwKTsNCi0JCQlmYS5iU2hpZnQgPSBwRW52LT5GRklfSXNTSElGVEtleURvd24oMCk7DQotCQkJZmEuc1ZhbHVlID0gY3NWYWx1ZTsNCi0NCi0JCQlwQWN0aW9uSGFuZGxlci0+RG9BY3Rpb25fRmllbGRKYXZhU2NyaXB0KGFjdGlvbiwgQ1BERl9BQWN0aW9uOjpWYWxpZGF0ZSwgbV9wRG9jdW1lbnQsIHBGb3JtRmllbGQsIGZhKTsNCi0JCQliUkMgPSBmYS5iUkM7DQotIAkgDQotCQl9DQotIAl9DQotfQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGFjdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUZYX0JPT0wgQ1BERlNES19JbnRlckZvcm06OkRvQWN0aW9uX0hpZGUoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbikNCi17DQotCUFTU0VSVChhY3Rpb24gIT0gTlVMTCk7DQotDQotCUNQREZfQWN0aW9uRmllbGRzIGFmID0gYWN0aW9uLkdldFdpZGdldHMoKTsNCi0JQ0ZYX1B0ckFycmF5IGZpZWxkT2JqZWN0czsNCi0JYWYuR2V0QWxsRmllbGRzKGZpZWxkT2JqZWN0cyk7DQotCUNGWF9QdHJBcnJheSB3aWRnZXRBcnJheTsNCi0JQ0ZYX1B0ckFycmF5IGZpZWxkczsNCi0JR2V0RmllbGRGcm9tT2JqZWN0cyhmaWVsZE9iamVjdHMsIGZpZWxkcyk7DQotDQotCUZYX0JPT0wgYkhpZGUgPSBhY3Rpb24uR2V0SGlkZVN0YXR1cygpOw0KLQ0KLQlGWF9CT09MIGJDaGFuZ2VkID0gRkFMU0U7DQotCQ0KLQlmb3IgKGludCBpPTAsIHN6PWZpZWxkcy5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopZmllbGRzW2ldOw0KLQkJQVNTRVJUKHBGaWVsZCAhPSBOVUxMKTsNCi0NCi0JDQotCQlmb3IgKGludCBqPTAsanN6PXBGaWVsZC0+Q291bnRDb250cm9scygpOyBqPGpzejsgaisrKQ0KLQkJew0KLQkJCUNQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sID0gcEZpZWxkLT5HZXRDb250cm9sKGopOw0KLQkJCUFTU0VSVChwQ29udHJvbCAhPSBOVUxMKTsNCi0NCi0JCQlpZiAoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSBHZXRXaWRnZXQocENvbnRyb2wpKQ0KLQkJCXsNCi0JCQkJaW50IG5GbGFncyA9IHBXaWRnZXQtPkdldEZsYWdzKCk7DQotCQkJCWlmIChiSGlkZSkNCi0JCQkJew0KLQkJCQkJbkZsYWdzICY9ICh+QU5OT1RGTEFHX0lOVklTSUJMRSk7DQotCQkJCQluRmxhZ3MgJj0gKH5BTk5PVEZMQUdfTk9WSUVXKTsNCi0JCQkJCW5GbGFncyB8PSAoQU5OT1RGTEFHX0hJRERFTik7DQotCQkJCX0NCi0JCQkJZWxzZQ0KLQkJCQl7DQotCQkJCQluRmxhZ3MgJj0gKH5BTk5PVEZMQUdfSU5WSVNJQkxFKTsNCi0JCQkJCW5GbGFncyAmPSAofkFOTk9URkxBR19ISURERU4pOw0KLQkJCQkJbkZsYWdzICY9ICh+QU5OT1RGTEFHX05PVklFVyk7DQotCQkJCX0NCi0JCQkJcFdpZGdldC0+U2V0RmxhZ3MobkZsYWdzKTsNCi0NCi0gCQkJCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyA9IHBXaWRnZXQtPkdldFBhZ2VWaWV3KCk7DQotIAkJCQlBU1NFUlQocFBhZ2VWaWV3ICE9IE5VTEwpOw0KLSANCi0gCQkJCXBQYWdlVmlldy0+VXBkYXRlVmlldyhwV2lkZ2V0KTsNCi0NCi0JCQkJYkNoYW5nZWQgPSBUUlVFOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gYkNoYW5nZWQ7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BERlNES19JbnRlckZvcm06OkRvQWN0aW9uX1N1Ym1pdEZvcm0oY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbikNCi17DQotCUFTU0VSVChhY3Rpb24gIT0gTlVMTCk7DQotCUFTU0VSVChtX3BJbnRlckZvcm0gIT0gTlVMTCk7DQotDQotCUNGWF9XaWRlU3RyaW5nIHNEZXN0aW5hdGlvbiA9IGFjdGlvbi5HZXRGaWxlUGF0aCgpOw0KLQlpZiAoc0Rlc3RpbmF0aW9uLklzRW1wdHkoKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlDUERGX0RpY3Rpb25hcnkqIHBBY3Rpb25EaWN0ID0gYWN0aW9uOw0KLQlpZiAocEFjdGlvbkRpY3QtPktleUV4aXN0KCJGaWVsZHMiKSkNCi0Jew0KLQkJQ1BERl9BY3Rpb25GaWVsZHMgYWYgPSBhY3Rpb24uR2V0V2lkZ2V0cygpOw0KLQkJRlhfRFdPUkQgZHdGbGFncyA9IGFjdGlvbi5HZXRGbGFncygpOw0KLQkJDQotCQlDRlhfUHRyQXJyYXkgZmllbGRPYmplY3RzOw0KLQkJYWYuR2V0QWxsRmllbGRzKGZpZWxkT2JqZWN0cyk7DQotCQlDRlhfUHRyQXJyYXkgZmllbGRzOw0KLQkJR2V0RmllbGRGcm9tT2JqZWN0cyhmaWVsZE9iamVjdHMsIGZpZWxkcyk7DQotCQkNCi0JCWlmIChmaWVsZHMuR2V0U2l6ZSgpICE9IDApDQotCQl7DQotCQkJRlhfQk9PTCBiSW5jbHVkZU9yRXhjbHVkZSA9ICEoZHdGbGFncyAmIDB4MDEpOw0KLQkJCWlmIChtX3BJbnRlckZvcm0tPkNoZWNrUmVxdWlyZWRGaWVsZHMoJmZpZWxkcywgYkluY2x1ZGVPckV4Y2x1ZGUpKQ0KLQkJCXsNCi0JCQkJcmV0dXJuIEZBTFNFOw0KLQkJCX0NCi0JCQlyZXR1cm4gU3VibWl0RmllbGRzKHNEZXN0aW5hdGlvbiwgZmllbGRzLCBiSW5jbHVkZU9yRXhjbHVkZSwgRkFMU0UpOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCWlmICggbV9wSW50ZXJGb3JtLT5DaGVja1JlcXVpcmVkRmllbGRzKCkpDQotCQkJew0KLQkJCQlyZXR1cm4gRkFMU0U7DQotCQkJfQ0KLQ0KLQkJCXJldHVybiBTdWJtaXRGb3JtKHNEZXN0aW5hdGlvbiwgRkFMU0UpOw0KLQkJfQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJaWYgKCBtX3BJbnRlckZvcm0tPkNoZWNrUmVxdWlyZWRGaWVsZHMoKSkNCi0JCXsNCi0JCQlyZXR1cm4gRkFMU0U7DQotCQl9DQotDQotCQlyZXR1cm4gU3VibWl0Rm9ybShzRGVzdGluYXRpb24sIEZBTFNFKTsNCi0JfQ0KLX0NCi0NCi1GWF9CT09MIENQREZTREtfSW50ZXJGb3JtOjpTdWJtaXRGaWVsZHMoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIGNzRGVzdGluYXRpb24sIGNvbnN0IENGWF9QdHJBcnJheSYgZmllbGRzLA0KLQkJCQkJCQkJCUZYX0JPT0wgYkluY2x1ZGVPckV4Y2x1ZGUsIEZYX0JPT0wgYlVybEVuY29kZWQpDQotew0KLQlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gbV9wRG9jdW1lbnQtPkdldEVudigpOw0KLQlBU1NFUlQocEVudiAhPSBOVUxMKTsNCi0NCi0JQ0ZYX0J5dGVUZXh0QnVmIHRleHRCdWY7DQotCUV4cG9ydEZpZWxkc1RvRkRGVGV4dEJ1ZihmaWVsZHMsIGJJbmNsdWRlT3JFeGNsdWRlLCB0ZXh0QnVmKTsNCi0NCi0JRlhfTFBCWVRFIHBCdWZmZXIgPSB0ZXh0QnVmLkdldEJ1ZmZlcigpOw0KLQlGWF9TVFJTSVpFIG5CdWZTaXplID0gdGV4dEJ1Zi5HZXRMZW5ndGgoKTsNCi0JDQotCWlmIChiVXJsRW5jb2RlZCkNCi0Jew0KLQkJaWYoIUZERlRvVVJMRW5jb2RlZERhdGEocEJ1ZmZlciwgbkJ1ZlNpemUpKQ0KLQkJCXJldHVybiBGQUxTRTsNCi0JfQ0KLQ0KLQlwRW52LT5KU19kb2NTdWJtaXRGb3JtKHBCdWZmZXIsIG5CdWZTaXplLCAoRlhfTFBDV1NUUiljc0Rlc3RpbmF0aW9uKTsNCi0JDQotCWlmIChiVXJsRW5jb2RlZCAmJiBwQnVmZmVyKQ0KLQl7DQotCQlGWF9GcmVlKHBCdWZmZXIpOw0KLQkJcEJ1ZmZlciA9IE5VTEw7CQ0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi12b2lkIENQREZTREtfSW50ZXJGb3JtOjpEb0ZERkJ1ZmZlcihDRlhfQnl0ZVN0cmluZyBzQnVmZmVyKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAoQ0ZERl9Eb2N1bWVudCAqcEZERkRvY3VtZW50ID0gQ0ZERl9Eb2N1bWVudDo6UGFyc2VNZW1vcnkoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilzQnVmZmVyLkdldEJ1ZmZlcihzQnVmZmVyLkdldExlbmd0aCgpKSwgc0J1ZmZlci5HZXRMZW5ndGgoKSkpDQotCXsJCQkJCQkNCi0JCUNQREZfRGljdGlvbmFyeSogcFJvb3REaWMgPSBwRkRGRG9jdW1lbnQtPkdldFJvb3QoKTsNCi0JCWlmKHBSb290RGljKQ0KLQkJew0KLQkJCUNQREZfRGljdGlvbmFyeSAqIHBGREZEaWN0PXBSb290RGljLT5HZXREaWN0KCJGREYiKTsNCi0JCQlpZihwRkRGRGljdCkNCi0JCQl7CQkNCi0JCQkJQ1BERl9EaWN0aW9uYXJ5ICogcEpTRGljdCA9IHBGREZEaWN0LT5HZXREaWN0KCJKYXZhU2NyaXB0Iik7DQotCQkJCWlmKHBKU0RpY3QpDQotCQkJCXsNCi0JCQkJCUNGWF9XaWRlU3RyaW5nIGNzSlM7DQotCQkJCQ0KLQkJCQkJQ1BERl9PYmplY3QqIHBKUyA9IHBKU0RpY3QtPkdldEVsZW1lbnRWYWx1ZSgiQmVmb3JlIik7DQotCQkJCQlpZiAocEpTICE9IE5VTEwpDQotCQkJCQl7DQotCQkJCQkJaW50IGlUeXBlID0gcEpTLT5HZXRUeXBlKCk7DQotCQkJCQkJaWYgKGlUeXBlID09IFBERk9CSl9TVFJJTkcpDQotCQkJCQkJCWNzSlMgPSBwSlNEaWN0LT5HZXRVbmljb2RlVGV4dCgiQmVmb3JlIik7DQotCQkJCQkJZWxzZSBpZiAoaVR5cGUgPT0gUERGT0JKX1NUUkVBTSkNCi0JCQkJCQkJY3NKUyA9IHBKUy0+R2V0VW5pY29kZVRleHQoKTsNCi0JCQkJCX0NCi0JCQkJCQ0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQkJZGVsZXRlIHBGREZEb2N1bWVudDsNCi0JfQ0KLQ0KLQlzQnVmZmVyLlJlbGVhc2VCdWZmZXIoKTsNCi19DQotDQotRlhfQk9PTCBDUERGU0RLX0ludGVyRm9ybTo6RkRGVG9VUkxFbmNvZGVkRGF0YShDRlhfV2lkZVN0cmluZyBjc0ZERkZpbGUsIENGWF9XaWRlU3RyaW5nIGNzVHh0RmlsZSkNCi17DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIENQREZTREtfSW50ZXJGb3JtOjpGREZUb1VSTEVuY29kZWREYXRhKEZYX0xQQllURSYgcEJ1ZiwgRlhfU1RSU0laRSYgbkJ1ZlNpemUpDQotew0KLSAJQ0ZERl9Eb2N1bWVudCogcEZERiA9IENGREZfRG9jdW1lbnQ6OlBhcnNlTWVtb3J5KHBCdWYsIG5CdWZTaXplKTsNCi0gCWlmIChwRkRGKQ0KLSAJew0KLSAJCUNQREZfRGljdGlvbmFyeSogcE1haW5EaWN0ID0gcEZERi0+R2V0Um9vdCgpLT5HZXREaWN0KCJGREYiKTsNCi0gCQlpZiAocE1haW5EaWN0ID09IE5VTEwpIHJldHVybiBGQUxTRTsNCi0gCQkNCi0gCQkvLyBHZXQgZmllbGRzDQotIAkJQ1BERl9BcnJheSogcEZpZWxkcyA9IHBNYWluRGljdC0+R2V0QXJyYXkoIkZpZWxkcyIpOw0KLSAJCWlmIChwRmllbGRzID09IE5VTEwpIHJldHVybiBGQUxTRTsNCi0JCQ0KLQkJQ0ZYX0J5dGVUZXh0QnVmIGZkZkVuY29kZWREYXRhOw0KLQ0KLSAJCWZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwRmllbGRzLT5HZXRDb3VudCgpOyBpICsrKSANCi0gCQl7DQotIAkJCUNQREZfRGljdGlvbmFyeSogcEZpZWxkID0gcEZpZWxkcy0+R2V0RGljdChpKTsNCi0gCQkJaWYgKHBGaWVsZCA9PSBOVUxMKSBjb250aW51ZTsNCi0gCQkJQ0ZYX1dpZGVTdHJpbmcgbmFtZTsNCi0gCQkJbmFtZSA9IHBGaWVsZC0+R2V0VW5pY29kZVRleHQoIlQiKTsNCi0gCQkJQ0ZYX0J5dGVTdHJpbmcgbmFtZV9iID0gQ0ZYX0J5dGVTdHJpbmc6OkZyb21Vbmljb2RlKG5hbWUpOw0KLSAJCQlDRlhfQnl0ZVN0cmluZyBjc0JWYWx1ZSA9IHBGaWVsZC0+R2V0U3RyaW5nKCJWIik7DQotIAkJCUNGWF9XaWRlU3RyaW5nIGNzV1ZhbHVlID0gUERGX0RlY29kZVRleHQoY3NCVmFsdWUpOw0KLSAJCQlDRlhfQnl0ZVN0cmluZyBjc1ZhbHVlX2IgPSBDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUoY3NXVmFsdWUpOw0KLQ0KLQkJCWZkZkVuY29kZWREYXRhID0gZmRmRW5jb2RlZERhdGE8PG5hbWVfYi5HZXRCdWZmZXIobmFtZV9iLkdldExlbmd0aCgpKTsNCi0gIAkJCW5hbWVfYi5SZWxlYXNlQnVmZmVyKCk7DQotCQkJZmRmRW5jb2RlZERhdGEgPSBmZGZFbmNvZGVkRGF0YTw8Ij0iOw0KLQkJCWZkZkVuY29kZWREYXRhID0gZmRmRW5jb2RlZERhdGE8PGNzVmFsdWVfYi5HZXRCdWZmZXIoY3NWYWx1ZV9iLkdldExlbmd0aCgpKTsNCi0gIAkJCWNzVmFsdWVfYi5SZWxlYXNlQnVmZmVyKCk7DQotICAJCQlpZihpICE9IHBGaWVsZHMtPkdldENvdW50KCktMSkNCi0gIAkJCQlmZGZFbmNvZGVkRGF0YSA9IGZkZkVuY29kZWREYXRhPDwiJiI7DQotIAkJfQ0KLQkJDQotCQluQnVmU2l6ZSA9IGZkZkVuY29kZWREYXRhLkdldExlbmd0aCgpOw0KLQkJcEJ1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIG5CdWZTaXplKTsNCi0JCWlmKCFwQnVmKQ0KLQkJCXJldHVybiBGQUxTRTsNCi0JCUZYU1lTX21lbWNweShwQnVmLCBmZGZFbmNvZGVkRGF0YS5HZXRCdWZmZXIoKSwgbkJ1ZlNpemUpOw0KLSAJCQ0KLSAJfQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBDUERGU0RLX0ludGVyRm9ybTo6RXhwb3J0RmllbGRzVG9GREZGaWxlKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzRkRGRmlsZU5hbWUsIA0KLQkJCQkJCQkJCQkJCSBjb25zdCBDRlhfUHRyQXJyYXkmIGZpZWxkcywgRlhfQk9PTCBiSW5jbHVkZU9yRXhjbHVkZSkNCi17DQotCWlmIChzRkRGRmlsZU5hbWUuSXNFbXB0eSgpKSByZXR1cm4gRkFMU0U7DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0JQVNTRVJUKG1fcEludGVyRm9ybSAhPSBOVUxMKTsNCi0NCi0gCUNGREZfRG9jdW1lbnQqIHBGREYgPSBtX3BJbnRlckZvcm0tPkV4cG9ydFRvRkRGKG1fcERvY3VtZW50LT5HZXRQYXRoKCksKENGWF9QdHJBcnJheSYpZmllbGRzLCBiSW5jbHVkZU9yRXhjbHVkZSk7DQotIAlpZiAoIXBGREYpIHJldHVybiBGQUxTRTsNCi0gCUZYX0JPT0wgYlJldCA9IHBGREYtPldyaXRlRmlsZShzRkRGRmlsZU5hbWUuVVRGOEVuY29kZSgpKTsgLy8gPSBGQUxTRTsvLw0KLQlkZWxldGUgcEZERjsNCi0NCi0JcmV0dXJuIGJSZXQ7DQotfQ0KLUZYX0JPT0wgQ1BERlNES19JbnRlckZvcm06OkV4cG9ydEZpZWxkc1RvRkRGVGV4dEJ1Zihjb25zdCBDRlhfUHRyQXJyYXkmIGZpZWxkcyxGWF9CT09MIGJJbmNsdWRlT3JFeGNsdWRlLCBDRlhfQnl0ZVRleHRCdWYmIHRleHRCdWYpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotCUFTU0VSVChtX3BJbnRlckZvcm0gIT0gTlVMTCk7DQotCQ0KLQlDRkRGX0RvY3VtZW50KiBwRkRGID0gbV9wSW50ZXJGb3JtLT5FeHBvcnRUb0ZERihtX3BEb2N1bWVudC0+R2V0UGF0aCgpLChDRlhfUHRyQXJyYXkmKWZpZWxkcywgYkluY2x1ZGVPckV4Y2x1ZGUpOw0KLQlpZiAoIXBGREYpIHJldHVybiBGQUxTRTsNCi0JRlhfQk9PTCBiUmV0ID0gcEZERi0+V3JpdGVCdWYodGV4dEJ1Zik7IC8vID0gRkFMU0U7Ly8NCi0JZGVsZXRlIHBGREY7DQotCQ0KLQlyZXR1cm4gYlJldDsNCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgQ1BERlNES19JbnRlckZvcm06OkdldFRlbXBvcmFyeUZpbGVOYW1lKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzRmlsZUV4dCkNCi17DQotCUNGWF9XaWRlU3RyaW5nIHNGaWxlTmFtZTsNCi0JcmV0dXJuIEwiIjsNCi19DQotDQotRlhfQk9PTCBDUERGU0RLX0ludGVyRm9ybTo6U3VibWl0Rm9ybShjb25zdCBDRlhfV2lkZVN0cmluZyYgc0Rlc3RpbmF0aW9uLCBGWF9CT09MIGJVcmxFbmNvZGVkKQ0KLXsNCi0gCWlmIChzRGVzdGluYXRpb24uSXNFbXB0eSgpKSByZXR1cm4gRkFMU0U7DQotDQotCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBtX3BEb2N1bWVudC0+R2V0RW52KCk7DQotCUFTU0VSVChwRW52ICE9IE5VTEwpOw0KLQ0KLQlpZihOVUxMID09IG1fcERvY3VtZW50KSByZXR1cm4gRkFMU0U7DQotCUNGWF9XaWRlU3RyaW5nIHdzUERGRmlsZVBhdGggPSBtX3BEb2N1bWVudC0+R2V0UGF0aCgpOw0KLQkNCi0JaWYoTlVMTCA9PSBtX3BJbnRlckZvcm0pIHJldHVybiBGQUxTRTsNCi0JQ0ZERl9Eb2N1bWVudCogcEZERkRvYyA9IG1fcEludGVyRm9ybS0+RXhwb3J0VG9GREYod3NQREZGaWxlUGF0aCk7DQotCWlmIChOVUxMID09IHBGREZEb2MpIHJldHVybiBGQUxTRTsNCi0NCi0JQ0ZYX0J5dGVUZXh0QnVmIEZkZkJ1ZmZlcjsNCi0JRlhfQk9PTCBiUmV0ID0gcEZERkRvYy0+V3JpdGVCdWYoRmRmQnVmZmVyKTsNCi0JZGVsZXRlIHBGREZEb2M7DQotCWlmICghYlJldCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlGWF9MUEJZVEUgcEJ1ZmZlciA9IEZkZkJ1ZmZlci5HZXRCdWZmZXIoKTsNCi0JRlhfU1RSU0laRSBuQnVmU2l6ZSA9IEZkZkJ1ZmZlci5HZXRMZW5ndGgoKTsNCi0JDQotCWlmIChiVXJsRW5jb2RlZCkNCi0Jew0KLQkJaWYoIUZERlRvVVJMRW5jb2RlZERhdGEocEJ1ZmZlciwgbkJ1ZlNpemUpKQ0KLQkJCXJldHVybiBGQUxTRTsNCi0JfQ0KLQ0KLQlwRW52LT5KU19kb2NTdWJtaXRGb3JtKHBCdWZmZXIsIG5CdWZTaXplLCAoRlhfTFBDV1NUUilzRGVzdGluYXRpb24pOw0KLQkNCi0JaWYgKGJVcmxFbmNvZGVkICYmIHBCdWZmZXIpDQotCXsNCi0JCUZYX0ZyZWUocEJ1ZmZlcik7DQotCQlwQnVmZmVyID0gTlVMTDsJDQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wJQ1BERlNES19JbnRlckZvcm06OkV4cG9ydEZvcm1Ub0ZERkZpbGUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNGREZGaWxlTmFtZSkNCi17DQotCWlmIChzRkRGRmlsZU5hbWUuSXNFbXB0eSgpKSByZXR1cm4gRkFMU0U7DQotDQotCUFTU0VSVChtX3BJbnRlckZvcm0gIT0gTlVMTCk7DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JQ0ZERl9Eb2N1bWVudCogcEZERiA9IG1fcEludGVyRm9ybS0+RXhwb3J0VG9GREYobV9wRG9jdW1lbnQtPkdldFBhdGgoKSk7DQotCWlmICghcEZERikgcmV0dXJuIEZBTFNFOw0KLQ0KLQlGWF9CT09MIGJSZXQgPSBwRkRGLT5Xcml0ZUZpbGUoc0ZERkZpbGVOYW1lLlVURjhFbmNvZGUoKSk7DQotCWRlbGV0ZSBwRkRGOw0KLQ0KLQlyZXR1cm4gYlJldDsNCi19DQotDQotRlhfQk9PTCBDUERGU0RLX0ludGVyRm9ybTo6RXhwb3J0Rm9ybVRvRkRGVGV4dEJ1ZihDRlhfQnl0ZVRleHRCdWYmIHRleHRCdWYpDQotew0KLQ0KLQlBU1NFUlQobV9wSW50ZXJGb3JtICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotCQ0KLQlDRkRGX0RvY3VtZW50KiBwRkRGID0gbV9wSW50ZXJGb3JtLT5FeHBvcnRUb0ZERihtX3BEb2N1bWVudC0+R2V0UGF0aCgpKTsNCi0JaWYgKCFwRkRGKSByZXR1cm4gRkFMU0U7DQotCQ0KLQlGWF9CT09MIGJSZXQgPSBwRkRGLT5Xcml0ZUJ1Zih0ZXh0QnVmKTsNCi0JZGVsZXRlIHBGREY7DQotCQ0KLQlyZXR1cm4gYlJldDsNCi19DQotDQotRlhfQk9PTCBDUERGU0RLX0ludGVyRm9ybTo6RXhwb3J0Rm9ybVRvVHh0RmlsZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc1R4dEZpbGVOYW1lKQ0KLXsNCi0JQVNTRVJUKG1fcEludGVyRm9ybSAhPSBOVUxMKTsNCi0NCi0JQ0ZYX1dpZGVTdHJpbmcgc0ZpZWxkTmFtZXM7DQotCUNGWF9XaWRlU3RyaW5nIHNGaWVsZFZhbHVlczsNCi0NCi0JaW50IG5TaXplID0gbV9wSW50ZXJGb3JtLT5Db3VudEZpZWxkcygpOw0KLQ0KLQlpZiAoblNpemUgPiAwKQ0KLQl7DQotCQlmb3IgKGludCBpPTA7IGk8blNpemU7IGkrKykNCi0JCXsNCi0JCQlDUERGX0Zvcm1GaWVsZCogcEZpZWxkID0gbV9wSW50ZXJGb3JtLT5HZXRGaWVsZChpKTsNCi0JCQlBU1NFUlQocEZpZWxkICE9IE5VTEwpOw0KLQ0KLQkJCWlmIChpICE9IDApDQotCQkJew0KLQkJCQlzRmllbGROYW1lcyArPSBMIlx0IjsNCi0JCQkJc0ZpZWxkVmFsdWVzICs9IEwiXHQiOw0KLQkJCX0NCi0JCQlzRmllbGROYW1lcyArPSBwRmllbGQtPkdldEZ1bGxOYW1lKCk7DQotCQkJc0ZpZWxkVmFsdWVzICs9IHBGaWVsZC0+R2V0VmFsdWUoKTsNCi0JCX0NCi0NCi0JCXJldHVybiBUUlVFOw0KLQl9DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTAlDUERGU0RLX0ludGVyRm9ybTo6SW1wb3J0Rm9ybUZyb21UeHRGaWxlKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzVHh0RmlsZU5hbWUpDQotew0KLQlBU1NFUlQobV9wSW50ZXJGb3JtICE9IE5VTEwpOw0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBDUERGU0RLX0ludGVyRm9ybTo6RG9BY3Rpb25fUmVzZXRGb3JtKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24pDQotew0KLQlBU1NFUlQoYWN0aW9uICE9IE5VTEwpOw0KLQ0KLQlDUERGX0RpY3Rpb25hcnkqIHBBY3Rpb25EaWN0ID0gYWN0aW9uOw0KLQ0KLQlpZiAocEFjdGlvbkRpY3QtPktleUV4aXN0KCJGaWVsZHMiKSkNCi0Jew0KLQkJQ1BERl9BY3Rpb25GaWVsZHMgYWYgPSBhY3Rpb24uR2V0V2lkZ2V0cygpOw0KLQkJRlhfRFdPUkQgZHdGbGFncyA9IGFjdGlvbi5HZXRGbGFncygpOw0KLQkJDQotCQlDRlhfUHRyQXJyYXkgZmllbGRPYmplY3RzOw0KLQkJYWYuR2V0QWxsRmllbGRzKGZpZWxkT2JqZWN0cyk7DQotCQlDRlhfUHRyQXJyYXkgZmllbGRzOw0KLQkJR2V0RmllbGRGcm9tT2JqZWN0cyhmaWVsZE9iamVjdHMsIGZpZWxkcyk7DQotCQkNCi0JCUFTU0VSVChtX3BJbnRlckZvcm0gIT0gTlVMTCk7DQotDQotCQlyZXR1cm4gbV9wSW50ZXJGb3JtLT5SZXNldEZvcm0oZmllbGRzLCAhKGR3RmxhZ3MgJiAweDAxKSwgVFJVRSk7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlBU1NFUlQobV9wSW50ZXJGb3JtICE9IE5VTEwpOw0KLQkJcmV0dXJuIG1fcEludGVyRm9ybS0+UmVzZXRGb3JtKFRSVUUpOw0KLQl9DQotfQ0KLQ0KLUZYX0JPT0wgQ1BERlNES19JbnRlckZvcm06OkRvQWN0aW9uX0ltcG9ydERhdGEoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbikNCi17DQotCUFTU0VSVChhY3Rpb24gIT0gTlVMTCk7DQotDQotCUNGWF9XaWRlU3RyaW5nIHNGaWxlUGF0aCA9IGFjdGlvbi5HZXRGaWxlUGF0aCgpOw0KLQlpZiAoc0ZpbGVQYXRoLklzRW1wdHkoKSkNCi0JCXJldHVybiBGQUxTRTsNCi0NCi0JaWYgKCFJbXBvcnRGb3JtRnJvbUZERkZpbGUoc0ZpbGVQYXRoLCBUUlVFKSkNCi0Jew0KLQkJcmV0dXJuIEZBTFNFOw0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MCUNQREZTREtfSW50ZXJGb3JtOjpJbXBvcnRGb3JtRnJvbUZERkZpbGUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIGNzRkRGRmlsZU5hbWUsDQotCQkJCQkJCQkJCQkJIEZYX0JPT0wgYk5vdGlmeSkNCi17DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotdm9pZCBDUERGU0RLX0ludGVyRm9ybTo6R2V0RmllbGRGcm9tT2JqZWN0cyhjb25zdCBDRlhfUHRyQXJyYXkmIG9iamVjdHMsIENGWF9QdHJBcnJheSYgZmllbGRzKQ0KLXsNCi0JQVNTRVJUKG1fcEludGVyRm9ybSAhPSBOVUxMKTsNCi0NCi0JaW50IGlDb3VudCA9IG9iamVjdHMuR2V0U2l6ZSgpOw0KLQlmb3IgKGludCBpID0gMDsgaSA8IGlDb3VudDsgaSArKykNCi0Jew0KLQkJQ1BERl9PYmplY3QqIHBPYmplY3QgPSAoQ1BERl9PYmplY3QqKW9iamVjdHNbaV07DQotCQlpZiAocE9iamVjdCA9PSBOVUxMKSBjb250aW51ZTsNCi0JCQ0KLQkJaW50IGlUeXBlID0gcE9iamVjdC0+R2V0VHlwZSgpOw0KLQkJaWYgKGlUeXBlID09IFBERk9CSl9TVFJJTkcpDQotCQl7DQotCQkJQ0ZYX1dpZGVTdHJpbmcgY3NOYW1lID0gcE9iamVjdC0+R2V0VW5pY29kZVRleHQoKTsNCi0JCQlDUERGX0Zvcm1GaWVsZCogcEZpZWxkID0gbV9wSW50ZXJGb3JtLT5HZXRGaWVsZCgwLCBjc05hbWUpOw0KLQkJCWlmIChwRmllbGQgIT0gTlVMTCkNCi0JCQkJZmllbGRzLkFkZChwRmllbGQpOw0KLQkJfQ0KLQkJZWxzZSBpZiAoaVR5cGUgPT0gUERGT0JKX0RJQ1RJT05BUlkpDQotCQl7DQotCQkJaWYgKG1fcEludGVyRm9ybS0+SXNWYWxpZEZvcm1GaWVsZChwT2JqZWN0KSkNCi0JCQkJZmllbGRzLkFkZChwT2JqZWN0KTsNCi0JCX0NCi0JfQ0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUERGX0Zvcm1Ob3RpZnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1pbnQJQ1BERlNES19JbnRlckZvcm06OkJlZm9yZVZhbHVlQ2hhbmdlKGNvbnN0IENQREZfRm9ybUZpZWxkKiBwRmllbGQsIENGWF9XaWRlU3RyaW5nJiBjc1ZhbHVlKQ0KLXsNCi0JQVNTRVJUKHBGaWVsZCAhPSBOVUxMKTsNCi0NCi0JQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKXBGaWVsZDsNCi0NCi0JaW50IG5UeXBlID0gcEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCk7DQotCWlmIChuVHlwZSA9PSBGSUVMRFRZUEVfQ09NQk9CT1ggfHwgblR5cGUgPT0gRklFTERUWVBFX1RFWFRGSUVMRCkNCi0Jew0KLQkJRlhfQk9PTCBiUkMgPSBUUlVFOw0KLQkJT25LZXlTdHJva2VDb21taXQocEZvcm1GaWVsZCwgY3NWYWx1ZSwgYlJDKTsNCi0JCWlmIChiUkMpIA0KLQkJew0KLQkJCU9uVmFsaWRhdGUocEZvcm1GaWVsZCwgY3NWYWx1ZSwgYlJDKTsNCi0JCQlpZiAoYlJDKQ0KLQkJCQlyZXR1cm4gMTsNCi0JCQllbHNlDQotCQkJCXJldHVybiAtMTsNCi0JCX0NCi0JCWVsc2UNCi0JCQlyZXR1cm4gLTE7DQotCX0NCi0JZWxzZQ0KLQkJcmV0dXJuIDA7DQotfQ0KLQ0KLWludAlDUERGU0RLX0ludGVyRm9ybTo6QWZ0ZXJWYWx1ZUNoYW5nZShjb25zdCBDUERGX0Zvcm1GaWVsZCogcEZpZWxkKQ0KLXsNCi0JQVNTRVJUKHBGaWVsZCAhPSBOVUxMKTsNCi0NCi0JQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKXBGaWVsZDsNCi0JaW50IG5UeXBlID0gcEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCk7DQotDQotCWlmIChuVHlwZSA9PSBGSUVMRFRZUEVfQ09NQk9CT1ggfHwgblR5cGUgPT0gRklFTERUWVBFX1RFWFRGSUVMRCkNCi0Jew0KLQkJdGhpcy0+T25DYWxjdWxhdGUocEZvcm1GaWVsZCk7DQotCQlGWF9CT09MIGJGb3JtYXRlZCA9IEZBTFNFOw0KLQkJQ0ZYX1dpZGVTdHJpbmcgc1ZhbHVlID0gdGhpcy0+T25Gb3JtYXQocEZvcm1GaWVsZCwgMCwgYkZvcm1hdGVkKTsNCi0JCWlmIChiRm9ybWF0ZWQpDQotCQkJdGhpcy0+UmVzZXRGaWVsZEFwcGVhcmFuY2UocEZvcm1GaWVsZCwgc1ZhbHVlLCBUUlVFKTsNCi0JCWVsc2UNCi0JCQl0aGlzLT5SZXNldEZpZWxkQXBwZWFyYW5jZShwRm9ybUZpZWxkLCBOVUxMLCBUUlVFKTsNCi0JCXRoaXMtPlVwZGF0ZUZpZWxkKHBGb3JtRmllbGQpOw0KLQl9DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1pbnQJQ1BERlNES19JbnRlckZvcm06OkJlZm9yZVNlbGVjdGlvbkNoYW5nZShjb25zdCBDUERGX0Zvcm1GaWVsZCogcEZpZWxkLCBDRlhfV2lkZVN0cmluZyYgY3NWYWx1ZSkNCi17DQotCUFTU0VSVChwRmllbGQgIT0gTlVMTCk7DQotDQotCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilwRmllbGQ7DQotDQotCWludCBuVHlwZSA9IHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpOw0KLQlpZiAoblR5cGUgPT0gRklFTERUWVBFX0xJU1RCT1gpDQotCXsNCi0JCUZYX0JPT0wgYlJDID0gVFJVRTsNCi0JCU9uS2V5U3Ryb2tlQ29tbWl0KHBGb3JtRmllbGQsIGNzVmFsdWUsIGJSQyk7DQotCQlpZiAoYlJDKSANCi0JCXsNCi0JCQlPblZhbGlkYXRlKHBGb3JtRmllbGQsIGNzVmFsdWUsIGJSQyk7DQotCQkJaWYgKGJSQykNCi0JCQkJcmV0dXJuIDE7DQotCQkJZWxzZQ0KLQkJCQlyZXR1cm4gLTE7DQotCQl9DQotCQllbHNlDQotCQkJcmV0dXJuIC0xOw0KLQl9DQotCWVsc2UNCi0JCXJldHVybiAwOw0KLX0NCi0NCi1pbnQJQ1BERlNES19JbnRlckZvcm06OkFmdGVyU2VsZWN0aW9uQ2hhbmdlKGNvbnN0IENQREZfRm9ybUZpZWxkKiBwRmllbGQpDQotew0KLQlBU1NFUlQocEZpZWxkICE9IE5VTEwpOw0KLQ0KLQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopcEZpZWxkOw0KLQlpbnQgblR5cGUgPSBwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKTsNCi0NCi0JaWYgKG5UeXBlID09IEZJRUxEVFlQRV9MSVNUQk9YKQ0KLQl7DQotCQl0aGlzLT5PbkNhbGN1bGF0ZShwRm9ybUZpZWxkKTsNCi0JCXRoaXMtPlJlc2V0RmllbGRBcHBlYXJhbmNlKHBGb3JtRmllbGQsIE5VTEwsIFRSVUUpOw0KLQkJdGhpcy0+VXBkYXRlRmllbGQocEZvcm1GaWVsZCk7DQotCX0NCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLWludAlDUERGU0RLX0ludGVyRm9ybTo6QWZ0ZXJDaGVja2VkU3RhdHVzQ2hhbmdlKGNvbnN0IENQREZfRm9ybUZpZWxkKiBwRmllbGQsIGNvbnN0IENGWF9CeXRlQXJyYXkmIHN0YXR1c0FycmF5KQ0KLXsNCi0JQVNTRVJUKHBGaWVsZCAhPSBOVUxMKTsNCi0NCi0JQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKXBGaWVsZDsNCi0JaW50IG5UeXBlID0gcEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCk7DQotDQotCWlmIChuVHlwZSA9PSBGSUVMRFRZUEVfQ0hFQ0tCT1ggfHwgblR5cGUgPT0gRklFTERUWVBFX1JBRElPQlVUVE9OKQ0KLQl7DQotCQl0aGlzLT5PbkNhbGN1bGF0ZShwRm9ybUZpZWxkKTsNCi0JCS8vdGhpcy0+UmVzZXRGaWVsZEFwcGVhcmFuY2UocEZvcm1GaWVsZCwgTlVMTCk7DQotCQl0aGlzLT5VcGRhdGVGaWVsZChwRm9ybUZpZWxkKTsNCi0JfQ0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotaW50CUNQREZTREtfSW50ZXJGb3JtOjpCZWZvcmVGb3JtUmVzZXQoY29uc3QgQ1BERl9JbnRlckZvcm0qIHBGb3JtKQ0KLXsNCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLWludAlDUERGU0RLX0ludGVyRm9ybTo6QWZ0ZXJGb3JtUmVzZXQoY29uc3QgQ1BERl9JbnRlckZvcm0qIHBGb3JtKQ0KLXsNCi0JdGhpcy0+T25DYWxjdWxhdGUoTlVMTCk7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1pbnQJQ1BERlNES19JbnRlckZvcm06OkJlZm9yZUZvcm1JbXBvcnREYXRhKGNvbnN0IENQREZfSW50ZXJGb3JtKiBwRm9ybSkNCi17DQotCXJldHVybiAwOw0KLX0NCi0NCi1pbnQJQ1BERlNES19JbnRlckZvcm06OkFmdGVyRm9ybUltcG9ydERhdGEoY29uc3QgQ1BERl9JbnRlckZvcm0qIHBGb3JtKQ0KLXsNCi0JdGhpcy0+T25DYWxjdWxhdGUoTlVMTCk7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1GWF9CT09MIENQREZTREtfSW50ZXJGb3JtOjpJc05lZWRIaWdoTGlnaHQoaW50IG5GaWVsZFR5cGUpDQotew0KLQlpZihuRmllbGRUeXBlIDwxIHx8IG5GaWVsZFR5cGUgPiA2KQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQlyZXR1cm4gbV9iTmVlZEhpZ2h0bGlnaHRbbkZpZWxkVHlwZS0xXTsNCi19DQotDQotdm9pZCBDUERGU0RLX0ludGVyRm9ybTo6UmVtb3ZlQWxsSGlnaExpZ2h0KCkNCi17DQotCW1lbXNldCgodm9pZCopbV9iTmVlZEhpZ2h0bGlnaHQsIDAsIDYqc2l6ZW9mKEZYX0JPT0wpKTsNCi19DQotdm9pZCAgIENQREZTREtfSW50ZXJGb3JtOjpTZXRIaWdobGlnaHRDb2xvcihGWF9DT0xPUlJFRiBjbHIsIGludCBuRmllbGRUeXBlKQ0KLXsNCi0JaWYobkZpZWxkVHlwZSA8MCB8fCBuRmllbGRUeXBlID4gNikgcmV0dXJuOw0KLQlzd2l0Y2gobkZpZWxkVHlwZSkNCi0Jew0KLQljYXNlIDA6DQotCQl7DQotCQkJZm9yKGludCBpPTA7IGk8NjsgaSsrKQ0KLQkJCXsNCi0JCQkJbV9hSGlnaGxpZ2h0Q29sb3JbaV0gPSBjbHI7DQotCQkJCW1fYk5lZWRIaWdodGxpZ2h0W2ldID0gVFJVRTsNCi0JCQl9DQotCQkJYnJlYWs7DQotCQl9DQotCWRlZmF1bHQ6DQotCQl7DQotCQkJbV9hSGlnaGxpZ2h0Q29sb3JbbkZpZWxkVHlwZS0xXSA9IGNscjsNCi0JCQltX2JOZWVkSGlnaHRsaWdodFtuRmllbGRUeXBlLTFdID0gVFJVRTsNCi0JCQlicmVhazsNCi0JCX0NCi0JfQ0KLQkNCi19DQotDQotRlhfQ09MT1JSRUYgQ1BERlNES19JbnRlckZvcm06OkdldEhpZ2hsaWdodENvbG9yKGludCBuRmllbGRUeXBlKQ0KLXsNCi0JaWYobkZpZWxkVHlwZSA8MCB8fCBuRmllbGRUeXBlID42KSByZXR1cm4gRlhTWVNfUkdCKDI1NSwyNTUsMjU1KTsNCi0JaWYobkZpZWxkVHlwZSA9PSAwKQ0KLQkJcmV0dXJuIG1fYUhpZ2hsaWdodENvbG9yWzBdOw0KLQllbHNlDQotCQlyZXR1cm4gbV9hSGlnaGxpZ2h0Q29sb3JbbkZpZWxkVHlwZS0xXTsNCi19DQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDQkFfQW5ub3RJdGVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ0JBX0Fubm90SXRlcmF0b3I6OkNCQV9Bbm5vdEl0ZXJhdG9yKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNUeXBlLCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc1N1YlR5cGUpDQotCTptX3BQYWdlVmlldyhwUGFnZVZpZXcpLA0KLQltX3NUeXBlKHNUeXBlKSwNCi0JbV9zU3ViVHlwZShzU3ViVHlwZSksDQotCW1fblRhYnMoQkFJX1NUUlVDVFVSRSkNCi17DQotCUFTU0VSVChtX3BQYWdlVmlldyAhPSBOVUxMKTsNCi0NCi0JQ1BERl9QYWdlKiBwUERGUGFnZSA9IG1fcFBhZ2VWaWV3LT5HZXRQREZQYWdlKCk7DQotCUFTU0VSVChwUERGUGFnZSAhPSBOVUxMKTsNCi0JQVNTRVJUKHBQREZQYWdlLT5tX3BGb3JtRGljdCAhPSBOVUxMKTsNCi0NCi0JQ0ZYX0J5dGVTdHJpbmcgc1RhYnMgPSBwUERGUGFnZS0+bV9wRm9ybURpY3QtPkdldFN0cmluZygiVGFicyIpOw0KLQ0KLQlpZiAoc1RhYnMgPT0gIlIiKQ0KLQl7DQotCQltX25UYWJzID0gQkFJX1JPVzsNCi0JfQ0KLQllbHNlIGlmIChzVGFicyA9PSAiQyIpDQotCXsNCi0JCW1fblRhYnMgPSBCQUlfQ09MVU1OOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJbV9uVGFicyA9IEJBSV9TVFJVQ1RVUkU7DQotCX0NCi0NCi0JR2VuZXJhdGVSZXN1bHRzKCk7DQotfQ0KLQ0KLUNCQV9Bbm5vdEl0ZXJhdG9yOjp+Q0JBX0Fubm90SXRlcmF0b3IoKQ0KLXsNCi0JbV9Bbm5vdHMuUmVtb3ZlQWxsKCk7DQotfQ0KLQ0KLUNQREZTREtfQW5ub3QqIENCQV9Bbm5vdEl0ZXJhdG9yOjpHZXRGaXJzdEFubm90KCkNCi17DQotCWlmIChtX0Fubm90cy5HZXRTaXplKCkgPiAwKQ0KLQkJcmV0dXJuIG1fQW5ub3RzWzBdOw0KLQkNCi0JcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLUNQREZTREtfQW5ub3QqIENCQV9Bbm5vdEl0ZXJhdG9yOjpHZXRMYXN0QW5ub3QoKQ0KLXsNCi0JaWYgKG1fQW5ub3RzLkdldFNpemUoKSA+IDApDQotCQlyZXR1cm4gbV9Bbm5vdHNbbV9Bbm5vdHMuR2V0U2l6ZSgpIC0gMV07DQotDQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi1DUERGU0RLX0Fubm90KiBDQkFfQW5ub3RJdGVyYXRvcjo6R2V0TmV4dEFubm90KENQREZTREtfQW5ub3QqIHBBbm5vdCkNCi17DQotCWZvciAoaW50IGk9MCxzej1tX0Fubm90cy5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJaWYgKG1fQW5ub3RzW2ldID09IHBBbm5vdCkNCi0JCXsNCi0JCQlpZiAoaSsxIDwgc3opDQotCQkJCXJldHVybiBtX0Fubm90c1tpKzFdOw0KLQkJCWVsc2UNCi0JCQkJcmV0dXJuIG1fQW5ub3RzWzBdOw0KLQkJfQ0KLQl9DQotDQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi1DUERGU0RLX0Fubm90KiBDQkFfQW5ub3RJdGVyYXRvcjo6R2V0UHJldkFubm90KENQREZTREtfQW5ub3QqIHBBbm5vdCkNCi17DQotCWZvciAoaW50IGk9MCxzej1tX0Fubm90cy5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJaWYgKG1fQW5ub3RzW2ldID09IHBBbm5vdCkNCi0JCXsNCi0JCQlpZiAoaS0xID49IDApDQotCQkJCXJldHVybiBtX0Fubm90c1tpLTFdOw0KLQkJCWVsc2UNCi0JCQkJcmV0dXJuIG1fQW5ub3RzW3N6LTFdOw0KLQkJfQ0KLQl9DQotDQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi1pbnQgQ0JBX0Fubm90SXRlcmF0b3I6OkNvbXBhcmVCeUxlZnQoQ1BERlNES19Bbm5vdCogcDEsIENQREZTREtfQW5ub3QqIHAyKQ0KLXsNCi0JQVNTRVJUKHAxICE9IE5VTEwpOw0KLQlBU1NFUlQocDIgIT0gTlVMTCk7DQotDQotCUNQREZfUmVjdCByY0Fubm90MSA9IEdldEFubm90UmVjdChwMSk7DQotCUNQREZfUmVjdCByY0Fubm90MiA9IEdldEFubm90UmVjdChwMik7DQotDQotCWlmIChyY0Fubm90MS5sZWZ0IDwgcmNBbm5vdDIubGVmdCkNCi0JCXJldHVybiAtMTsNCi0JaWYgKHJjQW5ub3QxLmxlZnQgPiByY0Fubm90Mi5sZWZ0KQ0KLQkJcmV0dXJuIDE7DQotCXJldHVybiAwOw0KLX0NCi0NCi0NCi1pbnQgQ0JBX0Fubm90SXRlcmF0b3I6OkNvbXBhcmVCeVRvcChDUERGU0RLX0Fubm90KiBwMSwgQ1BERlNES19Bbm5vdCogcDIpDQotew0KLQlBU1NFUlQocDEgIT0gTlVMTCk7DQotCUFTU0VSVChwMiAhPSBOVUxMKTsNCi0NCi0JQ1BERl9SZWN0IHJjQW5ub3QxID0gR2V0QW5ub3RSZWN0KHAxKTsNCi0JQ1BERl9SZWN0IHJjQW5ub3QyID0gR2V0QW5ub3RSZWN0KHAyKTsNCi0NCi0JaWYgKHJjQW5ub3QxLnRvcCA8IHJjQW5ub3QyLnRvcCkNCi0JCXJldHVybiAtMTsNCi0JaWYgKHJjQW5ub3QxLnRvcCA+IHJjQW5ub3QyLnRvcCkNCi0JCXJldHVybiAxOw0KLQlyZXR1cm4gMDsNCi19DQotDQotdm9pZCBDQkFfQW5ub3RJdGVyYXRvcjo6R2VuZXJhdGVSZXN1bHRzKCkNCi17DQotCUFTU0VSVChtX3BQYWdlVmlldyAhPSBOVUxMKTsNCi0NCi0Jc3dpdGNoIChtX25UYWJzKQ0KLQl7DQotCWNhc2UgQkFJX1NUUlVDVFVSRToNCi0JCXsNCi0JCQlmb3IgKGludCBpPTAsc3o9bV9wUGFnZVZpZXctPkNvdW50QW5ub3RzKCk7IGk8c3o7IGkrKykNCi0JCQl7DQotCQkJCUNQREZTREtfQW5ub3QqIHBBbm5vdCA9IG1fcFBhZ2VWaWV3LT5HZXRBbm5vdChpKTsNCi0JCQkJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsNCi0NCi0JCQkJaWYgKHBBbm5vdC0+R2V0VHlwZSgpID09IG1fc1R5cGUgDQotCQkJCQkmJiBwQW5ub3QtPkdldFN1YlR5cGUoKSA9PSBtX3NTdWJUeXBlKQ0KLQkJCQkJbV9Bbm5vdHMuQWRkKHBBbm5vdCk7DQotCQkJfQ0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgQkFJX1JPVzoNCi0JCXsNCi0JCQlDUERGU0RLX1NvcnRBbm5vdHMgc2E7DQotDQotCQkJew0KLQkJCQkNCi0JCQkJZm9yIChpbnQgaT0wLHN6PW1fcFBhZ2VWaWV3LT5Db3VudEFubm90cygpOyBpPHN6OyBpKyspDQotCQkJCXsNCi0JCQkJCUNQREZTREtfQW5ub3QqIHBBbm5vdCA9IG1fcFBhZ2VWaWV3LT5HZXRBbm5vdChpKTsNCi0JCQkJCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotDQotCQkJCQlpZiAocEFubm90LT5HZXRUeXBlKCkgPT0gbV9zVHlwZSANCi0JCQkJCQkmJiBwQW5ub3QtPkdldFN1YlR5cGUoKSA9PSBtX3NTdWJUeXBlKQ0KLQkJCQkJCXNhLkFkZChwQW5ub3QpOw0KLQkJCQl9DQotCQkJfQ0KLQ0KLQkJCWlmIChzYS5HZXRTaXplKCkgPiAwKQ0KLQkJCXsNCi0JCQkJc2EuU29ydChDQkFfQW5ub3RJdGVyYXRvcjo6Q29tcGFyZUJ5TGVmdCk7DQotCQkJfQ0KLQ0KLQkJCXdoaWxlIChzYS5HZXRTaXplKCkgPiAwKQ0KLQkJCXsNCi0JCQkJaW50IG5MZWZ0VG9wSW5kZXggPSAtMTsNCi0NCi0JCQkJew0KLQkJCQkJRlhfRkxPQVQgZlRvcCA9IDAuMGY7DQotDQotCQkJCQlmb3IgKGludCBpPXNhLkdldFNpemUoKS0xOyBpPj0wOyBpLS0pDQotCQkJCQl7DQotCQkJCQkJQ1BERlNES19Bbm5vdCogcEFubm90ID0gc2EuR2V0QXQoaSk7DQotCQkJCQkJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsNCi0NCi0JCQkJCQlDUERGX1JlY3QgcmNBbm5vdCA9IEdldEFubm90UmVjdChwQW5ub3QpOw0KLQ0KLQkJCQkJCWlmIChyY0Fubm90LnRvcCA+IGZUb3ApDQotCQkJCQkJew0KLQkJCQkJCQluTGVmdFRvcEluZGV4ID0gaTsNCi0JCQkJCQkJZlRvcCA9IHJjQW5ub3QudG9wOw0KLQkJCQkJCX0NCi0JCQkJCX0NCi0JCQkJfQ0KLQ0KLQkJCQlpZiAobkxlZnRUb3BJbmRleCA+PSAwKQ0KLQkJCQl7DQotCQkJCQlDUERGU0RLX0Fubm90KiBwTGVmdFRvcEFubm90ID0gc2EuR2V0QXQobkxlZnRUb3BJbmRleCk7DQotCQkJCQlBU1NFUlQocExlZnRUb3BBbm5vdCAhPSBOVUxMKTsNCi0NCi0JCQkJCUNQREZfUmVjdCByY0xlZnRUb3AgPSBHZXRBbm5vdFJlY3QocExlZnRUb3BBbm5vdCk7DQotCQkJCQkNCi0JCQkJCW1fQW5ub3RzLkFkZChwTGVmdFRvcEFubm90KTsNCi0JCQkJCXNhLlJlbW92ZUF0KG5MZWZ0VG9wSW5kZXgpOw0KLQ0KLQkJCQkJQ0ZYX0FycmF5VGVtcGxhdGU8aW50PiBhU2VsZWN0Ow0KLQ0KLQkJCQkJew0KLQkJCQkJCWZvciAoaW50IGk9MCxzej1zYS5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0JCQkJCQl7DQotCQkJCQkJCUNQREZTREtfQW5ub3QqIHBBbm5vdCA9IHNhLkdldEF0KGkpOw0KLQkJCQkJCQlBU1NFUlQocEFubm90ICE9IE5VTEwpOw0KLQ0KLQkJCQkJCQlDUERGX1JlY3QgcmNBbm5vdCA9IEdldEFubm90UmVjdChwQW5ub3QpOw0KLQ0KLQkJCQkJCQlGWF9GTE9BVCBmQ2VudGVyWSA9IChyY0Fubm90LnRvcCArIHJjQW5ub3QuYm90dG9tKSAvIDIuMGY7DQotDQotCQkJCQkJCWlmIChmQ2VudGVyWSA+IHJjTGVmdFRvcC5ib3R0b20gJiYgZkNlbnRlclkgPCByY0xlZnRUb3AudG9wKQ0KLQkJCQkJCQkJYVNlbGVjdC5BZGQoaSk7DQotCQkJCQkJfQ0KLQkJCQkJfQ0KLQ0KLQkJCQkJew0KLQkJCQkJCWZvciAoaW50IGk9MCxzej1hU2VsZWN0LkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQkJCQkJCXsNCi0JCQkJCQkJbV9Bbm5vdHMuQWRkKHNhW2FTZWxlY3RbaV1dKTsNCi0JCQkJCQl9DQotCQkJCQl9DQotDQotCQkJCQl7DQotCQkJCQkJZm9yIChpbnQgaT1hU2VsZWN0LkdldFNpemUoKS0xOyBpPj0wOyBpLS0pDQotCQkJCQkJew0KLQkJCQkJCQlzYS5SZW1vdmVBdChhU2VsZWN0W2ldKTsNCi0JCQkJCQl9DQotCQkJCQl9DQotDQotCQkJCQlhU2VsZWN0LlJlbW92ZUFsbCgpOw0KLQkJCQl9DQotCQkJfQ0KLQkJCXNhLlJlbW92ZUFsbCgpOw0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgQkFJX0NPTFVNTjoNCi0JCXsNCi0JCQlDUERGU0RLX1NvcnRBbm5vdHMgc2E7DQotDQotCQkJew0KLQkJCQlmb3IgKGludCBpPTAsc3o9bV9wUGFnZVZpZXctPkNvdW50QW5ub3RzKCk7IGk8c3o7IGkrKykNCi0JCQkJew0KLQkJCQkJQ1BERlNES19Bbm5vdCogcEFubm90ID0gbV9wUGFnZVZpZXctPkdldEFubm90KGkpOw0KLQkJCQkJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsNCi0NCi0JCQkJCWlmIChwQW5ub3QtPkdldFR5cGUoKSA9PSBtX3NUeXBlIA0KLQkJCQkJCSYmIHBBbm5vdC0+R2V0U3ViVHlwZSgpID09IG1fc1N1YlR5cGUpDQotCQkJCQkJc2EuQWRkKHBBbm5vdCk7DQotCQkJCX0NCi0JCQl9DQotDQotCQkJaWYgKHNhLkdldFNpemUoKSA+IDApDQotCQkJew0KLQkJCQlzYS5Tb3J0KENCQV9Bbm5vdEl0ZXJhdG9yOjpDb21wYXJlQnlUb3AsIEZBTFNFKTsNCi0JCQl9DQotDQotCQkJd2hpbGUgKHNhLkdldFNpemUoKSA+IDApDQotCQkJew0KLQkJCQlpbnQgbkxlZnRUb3BJbmRleCA9IC0xOw0KLQ0KLQkJCQl7DQotCQkJCQlGWF9GTE9BVCBmTGVmdCA9IC0xLjBmOw0KLQ0KLQkJCQkJZm9yIChpbnQgaT1zYS5HZXRTaXplKCktMTsgaT49MDsgaS0tKQ0KLQkJCQkJew0KLQkJCQkJCUNQREZTREtfQW5ub3QqIHBBbm5vdCA9IHNhLkdldEF0KGkpOw0KLQkJCQkJCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotDQotCQkJCQkJQ1BERl9SZWN0IHJjQW5ub3QgPSBHZXRBbm5vdFJlY3QocEFubm90KTsNCi0NCi0JCQkJCQlpZiAoZkxlZnQgPCAwKQ0KLQkJCQkJCXsNCi0JCQkJCQkJbkxlZnRUb3BJbmRleCA9IDA7DQotCQkJCQkJCWZMZWZ0ID0gcmNBbm5vdC5sZWZ0Ow0KLQkJCQkJCX0NCi0JCQkJCQllbHNlIGlmIChyY0Fubm90LmxlZnQgPCBmTGVmdCkNCi0JCQkJCQl7DQotCQkJCQkJCW5MZWZ0VG9wSW5kZXggPSBpOw0KLQkJCQkJCQlmTGVmdCA9IHJjQW5ub3QubGVmdDsNCi0JCQkJCQl9DQotCQkJCQl9DQotCQkJCX0NCi0NCi0JCQkJaWYgKG5MZWZ0VG9wSW5kZXggPj0gMCkNCi0JCQkJew0KLQkJCQkJQ1BERlNES19Bbm5vdCogcExlZnRUb3BBbm5vdCA9IHNhLkdldEF0KG5MZWZ0VG9wSW5kZXgpOw0KLQkJCQkJQVNTRVJUKHBMZWZ0VG9wQW5ub3QgIT0gTlVMTCk7DQotDQotCQkJCQlDUERGX1JlY3QgcmNMZWZ0VG9wID0gR2V0QW5ub3RSZWN0KHBMZWZ0VG9wQW5ub3QpOw0KLQkJCQkJDQotCQkJCQltX0Fubm90cy5BZGQocExlZnRUb3BBbm5vdCk7DQotCQkJCQlzYS5SZW1vdmVBdChuTGVmdFRvcEluZGV4KTsNCi0NCi0JCQkJCUNGWF9BcnJheVRlbXBsYXRlPGludD4gYVNlbGVjdDsNCi0NCi0JCQkJCXsNCi0JCQkJCQlmb3IgKGludCBpPTAsc3o9c2EuR2V0U2l6ZSgpOyBpPHN6OyBpKyspDQotCQkJCQkJew0KLQkJCQkJCQlDUERGU0RLX0Fubm90KiBwQW5ub3QgPSBzYS5HZXRBdChpKTsNCi0JCQkJCQkJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsNCi0NCi0JCQkJCQkJQ1BERl9SZWN0IHJjQW5ub3QgPSBHZXRBbm5vdFJlY3QocEFubm90KTsNCi0NCi0JCQkJCQkJRlhfRkxPQVQgZkNlbnRlclggPSAocmNBbm5vdC5sZWZ0ICsgcmNBbm5vdC5yaWdodCkgLyAyLjBmOw0KLQ0KLQkJCQkJCQlpZiAoZkNlbnRlclggPiByY0xlZnRUb3AubGVmdCAmJiBmQ2VudGVyWCA8IHJjTGVmdFRvcC5yaWdodCkNCi0JCQkJCQkJCWFTZWxlY3QuQWRkKGkpOw0KLQkJCQkJCX0NCi0JCQkJCX0NCi0NCi0JCQkJCXsNCi0JCQkJCQlmb3IgKGludCBpPTAsc3o9YVNlbGVjdC5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0JCQkJCQl7DQotCQkJCQkJCW1fQW5ub3RzLkFkZChzYVthU2VsZWN0W2ldXSk7DQotCQkJCQkJfQ0KLQkJCQkJfQ0KLQ0KLQkJCQkJew0KLQkJCQkJCWZvciAoaW50IGk9YVNlbGVjdC5HZXRTaXplKCktMTsgaT49MDsgaS0tKQ0KLQkJCQkJCXsNCi0JCQkJCQkJc2EuUmVtb3ZlQXQoYVNlbGVjdFtpXSk7DQotCQkJCQkJfQ0KLQkJCQkJfQ0KLQ0KLQkJCQkJYVNlbGVjdC5SZW1vdmVBbGwoKTsNCi0JCQkJfQ0KLQkJCX0NCi0JCQlzYS5SZW1vdmVBbGwoKTsNCi0JCX0NCi0JCWJyZWFrOw0KLQl9DQotfQ0KLQ0KLUNQREZfUmVjdCBDQkFfQW5ub3RJdGVyYXRvcjo6R2V0QW5ub3RSZWN0KENQREZTREtfQW5ub3QqIHBBbm5vdCkNCi17DQotCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7DQotDQotCUNQREZfQW5ub3QqIHBQREZBbm5vdCA9IHBBbm5vdC0+R2V0UERGQW5ub3QoKTsNCi0JQVNTRVJUKHBQREZBbm5vdCAhPSBOVUxMKTsNCi0NCi0JQ1BERl9SZWN0IHJjQW5ub3Q7DQotCXBQREZBbm5vdC0+R2V0UmVjdChyY0Fubm90KTsNCi0NCi0JcmV0dXJuIHJjQW5ub3Q7DQotfQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfZGVmaW5lLmgiCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX21nci5oIgorI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19iYXNlYW5ub3QuaCIKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfYmFzZWZvcm0uaCIKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0Zvcm1GaWxsZXIuaCIKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfYWN0aW9uaGFuZGxlci5oIgorCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0lKYXZhU2NyaXB0LmgiCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyoJCQkJCQkJCQkJQ1BERlNES19XaWRnZXQgCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIElzRmxvYXRaZXJvKGYpCQkJCQkJKChmKSA8IDAuMDEgJiYgKGYpID4gLTAuMDEpCisjZGVmaW5lIElzRmxvYXRCaWdnZXIoZmEsZmIpCQkJCSgoZmEpID4gKGZiKSAmJiAhSXNGbG9hdFplcm8oKGZhKSAtIChmYikpKQorI2RlZmluZSBJc0Zsb2F0U21hbGxlcihmYSxmYikJCQkJKChmYSkgPCAoZmIpICYmICFJc0Zsb2F0WmVybygoZmEpIC0gKGZiKSkpCisjZGVmaW5lIElzRmxvYXRFcXVhbChmYSxmYikJCQkJCUlzRmxvYXRaZXJvKChmYSktKGZiKSkKKworQ1BERlNES19XaWRnZXQ6OkNQREZTREtfV2lkZ2V0KENQREZfQW5ub3QqIHBBbm5vdCwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSkgOgorCQkJCQlDUERGU0RLX0Fubm90KHBBbm5vdCwgcFBhZ2VWaWV3KSwKKwkJCQkJbV9wSW50ZXJGb3JtKHBJbnRlckZvcm0pLAorCQkJCQltX25BcHBBZ2UoMCksCisJCQkJCW1fblZhbHVlQWdlKDApCit7CisJQVNTRVJUKG1fcEludGVyRm9ybSAhPSBOVUxMKTsKK30KKworQ1BERlNES19XaWRnZXQ6On5DUERGU0RLX1dpZGdldCgpCit7CisKK30KKworRlhfQk9PTAkJQ1BERlNES19XaWRnZXQ6OklzV2lkZ2V0QXBwZWFyYW5jZVZhbGlkKENQREZfQW5ub3Q6OkFwcGVhcmFuY2VNb2RlIG1vZGUpCit7CisJQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOworCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOworCQorCUNQREZfRGljdGlvbmFyeSogcEFQID0gbV9wQW5ub3QtPm1fcEFubm90RGljdC0+R2V0RGljdCgiQVAiKTsKKwlpZiAocEFQID09IE5VTEwpIHJldHVybiBGQUxTRTsKKwkKKwkvLyBDaG9vc2UgdGhlIHJpZ2h0IHN1Yi1hcAorCWNvbnN0IEZYX0NIQVIqIGFwX2VudHJ5ID0gIk4iOworCWlmIChtb2RlID09IENQREZfQW5ub3Q6OkRvd24pCisJCWFwX2VudHJ5ID0gIkQiOworCWVsc2UgaWYgKG1vZGUgPT0gQ1BERl9Bbm5vdDo6Um9sbG92ZXIpCisJCWFwX2VudHJ5ID0gIlIiOworCWlmICghcEFQLT5LZXlFeGlzdChhcF9lbnRyeSkpCisJCWFwX2VudHJ5ID0gIk4iOworCQorCS8vIEdldCB0aGUgQVAgc3RyZWFtIG9yIHN1YmRpcmVjdG9yeQorCUNQREZfT2JqZWN0KiBwc3ViID0gcEFQLT5HZXRFbGVtZW50VmFsdWUoYXBfZW50cnkpOworCWlmIChwc3ViID09IE5VTEwpIHJldHVybiBGQUxTRTsKKwkKKwlpbnQgbkZpZWxkVHlwZSA9IEdldEZpZWxkVHlwZSgpOworCXN3aXRjaCAobkZpZWxkVHlwZSkKKwl7CisJY2FzZSBGSUVMRFRZUEVfUFVTSEJVVFRPTjoKKwljYXNlIEZJRUxEVFlQRV9DT01CT0JPWDoKKwljYXNlIEZJRUxEVFlQRV9MSVNUQk9YOgorCWNhc2UgRklFTERUWVBFX1RFWFRGSUVMRDoKKwljYXNlIEZJRUxEVFlQRV9TSUdOQVRVUkU6CisJCXJldHVybiBwc3ViLT5HZXRUeXBlKCkgPT0gUERGT0JKX1NUUkVBTTsKKwljYXNlIEZJRUxEVFlQRV9DSEVDS0JPWDoKKwljYXNlIEZJRUxEVFlQRV9SQURJT0JVVFRPTjoKKwkJaWYgKHBzdWItPkdldFR5cGUoKSA9PSBQREZPQkpfRElDVElPTkFSWSkgCisJCXsKKwkJCUNQREZfRGljdGlvbmFyeSogcFN1YkRpY3QgPSAoQ1BERl9EaWN0aW9uYXJ5Kilwc3ViOworCQkJCisJCQlyZXR1cm4gcFN1YkRpY3QtPkdldFN0cmVhbSh0aGlzLT5HZXRBcHBTdGF0ZSgpKSAhPSBOVUxMOworCQl9CisJCWVsc2UKKwkJCXJldHVybiBGQUxTRTsKKwkJYnJlYWs7CisJfQorCQorCXJldHVybiBUUlVFOworfQorCitpbnQJQ1BERlNES19XaWRnZXQ6OkdldEZpZWxkVHlwZSgpIGNvbnN0Cit7CisJQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCA9IEdldEZvcm1GaWVsZCgpOworCUFTU0VSVChwRmllbGQgIT0gTlVMTCk7CisJCisJcmV0dXJuIHBGaWVsZC0+R2V0RmllbGRUeXBlKCk7Cit9CisKK2ludCBDUERGU0RLX1dpZGdldDo6R2V0RmllbGRGbGFncygpIGNvbnN0Cit7CisJQ1BERl9JbnRlckZvcm0qIHBQREZJbnRlckZvcm0gPSBtX3BJbnRlckZvcm0tPkdldEludGVyRm9ybSgpOworCUFTU0VSVChwUERGSW50ZXJGb3JtICE9IE5VTEwpOworCisJQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sID0gcFBERkludGVyRm9ybS0+R2V0Q29udHJvbEJ5RGljdChtX3BBbm5vdC0+bV9wQW5ub3REaWN0KTsKKwlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IHBGb3JtQ29udHJvbC0+R2V0RmllbGQoKTsKKwlyZXR1cm4gcEZvcm1GaWVsZC0+R2V0RmllbGRGbGFncygpOworfQorCitDRlhfQnl0ZVN0cmluZyBDUERGU0RLX1dpZGdldDo6R2V0U3ViVHlwZSgpIGNvbnN0Cit7CisJaW50IG5UeXBlID0gR2V0RmllbGRUeXBlKCk7CisJCisJaWYgKG5UeXBlID09IEZJRUxEVFlQRV9TSUdOQVRVUkUpCisJCXJldHVybiBCRkZUX1NJR05BVFVSRTsKKwlyZXR1cm4gQ1BERlNES19Bbm5vdDo6R2V0U3ViVHlwZSgpOworfQorCitDUERGX0Zvcm1GaWVsZCoJQ1BERlNES19XaWRnZXQ6OkdldEZvcm1GaWVsZCgpIGNvbnN0Cit7CisJQVNTRVJUKG1fcEludGVyRm9ybSAhPSBOVUxMKTsKKwkKKwlDUERGX0Zvcm1Db250cm9sKiBwQ3RybCA9IEdldEZvcm1Db250cm9sKCk7CQorCUFTU0VSVChwQ3RybCAhPSBOVUxMKTsKKwkKKwlyZXR1cm4gcEN0cmwtPkdldEZpZWxkKCk7Cit9CisKK0NQREZfRm9ybUNvbnRyb2wqIENQREZTREtfV2lkZ2V0OjpHZXRGb3JtQ29udHJvbCgpIGNvbnN0Cit7CisJQVNTRVJUKG1fcEludGVyRm9ybSAhPSBOVUxMKTsKKwkKKwlDUERGX0ludGVyRm9ybSogcFBERkludGVyRm9ybSA9IG1fcEludGVyRm9ybS0+R2V0SW50ZXJGb3JtKCk7CisJQVNTRVJUKHBQREZJbnRlckZvcm0gIT0gTlVMTCk7CisJCisJcmV0dXJuIHBQREZJbnRlckZvcm0tPkdldENvbnRyb2xCeURpY3QoR2V0QW5ub3REaWN0KCkpOworfQorc3RhdGljIENQREZfRGljdGlvbmFyeSogQkZfR2V0RmllbGQoQ1BERl9EaWN0aW9uYXJ5KiBwRmllbGREaWN0LCBjb25zdCBGWF9DSEFSKiBuYW1lKQoreworCWlmIChwRmllbGREaWN0ID09IE5VTEwpIHJldHVybiBOVUxMOworCS8vIEZpcnN0IGNoZWNrIHRoZSBkaWN0aW9uYXJ5IGl0c2VsZgorCUNQREZfT2JqZWN0KiBwQXR0ciA9IHBGaWVsZERpY3QtPkdldEVsZW1lbnRWYWx1ZShuYW1lKTsKKwlpZiAocEF0dHIpIHJldHVybiBwRmllbGREaWN0OworCQorCS8vIE5vdyB3ZSBuZWVkIHRvIHNlYXJjaCBmcm9tIHBhcmVudHMKKwlDUERGX0RpY3Rpb25hcnkqIHBQYXJlbnQgPSBwRmllbGREaWN0LT5HZXREaWN0KCJQYXJlbnQiKTsKKwlpZiAocFBhcmVudCA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKwkKKwlyZXR1cm4gQkZfR2V0RmllbGQocFBhcmVudCwgbmFtZSk7Cit9CisKK0NQREZfRm9ybUNvbnRyb2wqIENQREZTREtfV2lkZ2V0OjpHZXRGb3JtQ29udHJvbChDUERGX0ludGVyRm9ybSogcEludGVyRm9ybSwgQ1BERl9EaWN0aW9uYXJ5KiBwQW5ub3REaWN0KQoreworCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOworCUFTU0VSVChwQW5ub3REaWN0ICE9IE5VTEwpOworCQorCUNQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sID0gcEludGVyRm9ybS0+R2V0Q29udHJvbEJ5RGljdChwQW5ub3REaWN0KTsKKwkKKwlyZXR1cm4gcENvbnRyb2w7Cit9CisKK2ludCBDUERGU0RLX1dpZGdldDo6R2V0Um90YXRlKCkgY29uc3QKK3sKKwlDUERGX0Zvcm1Db250cm9sKiBwQ3RybCA9IHRoaXMtPkdldEZvcm1Db250cm9sKCk7CisJQVNTRVJUKHBDdHJsICE9IE5VTEwpOworCQorCXJldHVybiBwQ3RybC0+R2V0Um90YXRpb24oKSAlIDM2MDsKK30KKworRlhfQk9PTAlDUERGU0RLX1dpZGdldDo6R2V0RmlsbENvbG9yKEZYX0NPTE9SUkVGJiBjb2xvcikgY29uc3QKK3sKKwlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUN0cmwgPSBHZXRGb3JtQ29udHJvbCgpOworCUFTU0VSVChwRm9ybUN0cmwgIT0gTlVMTCk7CisJCisJaW50IGlDb2xvclR5cGUgPSAwOwkKKwljb2xvciA9IEZYX0FSR0JUT0NPTE9SUkVGKHBGb3JtQ3RybC0+R2V0QmFja2dyb3VuZENvbG9yKGlDb2xvclR5cGUpKTsKKwkKKwlyZXR1cm4gaUNvbG9yVHlwZSAhPSBDT0xPUlRZUEVfVFJBTlNQQVJFTlQ7Cit9CisKK0ZYX0JPT0wJQ1BERlNES19XaWRnZXQ6OkdldEJvcmRlckNvbG9yKEZYX0NPTE9SUkVGJiBjb2xvcikgY29uc3QKK3sKKwlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUN0cmwgPSBHZXRGb3JtQ29udHJvbCgpOworCUFTU0VSVChwRm9ybUN0cmwgIT0gTlVMTCk7CisJCisJaW50IGlDb2xvclR5cGUgPSAwOwkKKwljb2xvciA9IEZYX0FSR0JUT0NPTE9SUkVGKHBGb3JtQ3RybC0+R2V0Qm9yZGVyQ29sb3IoaUNvbG9yVHlwZSkpOworCQorCXJldHVybiBpQ29sb3JUeXBlICE9IENPTE9SVFlQRV9UUkFOU1BBUkVOVDsKK30KKworRlhfQk9PTAlDUERGU0RLX1dpZGdldDo6R2V0VGV4dENvbG9yKEZYX0NPTE9SUkVGJiBjb2xvcikgY29uc3QKK3sKKwlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUN0cmwgPSBHZXRGb3JtQ29udHJvbCgpOworCUFTU0VSVChwRm9ybUN0cmwgIT0gTlVMTCk7CisJCisJQ1BERl9EZWZhdWx0QXBwZWFyYW5jZSBkYSA9IHBGb3JtQ3RybC0+R2V0RGVmYXVsdEFwcGVhcmFuY2UoKTsKKwlpZiAoZGEuSGFzQ29sb3IoKSkKKwl7CisJCUZYX0FSR0IgYXJnYjsKKwkJaW50IGlDb2xvclR5cGUgPSBDT0xPUlRZUEVfVFJBTlNQQVJFTlQ7CQorCQlkYS5HZXRDb2xvcihhcmdiLCBpQ29sb3JUeXBlKTsKKwkJY29sb3IgPSBGWF9BUkdCVE9DT0xPUlJFRihhcmdiKTsKKwkJCisJCXJldHVybiBpQ29sb3JUeXBlICE9IENPTE9SVFlQRV9UUkFOU1BBUkVOVDsKKwl9CisJCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9GTE9BVCBDUERGU0RLX1dpZGdldDo6R2V0Rm9udFNpemUoKSBjb25zdAoreworCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ3RybCA9IEdldEZvcm1Db250cm9sKCk7CisJQVNTRVJUKHBGb3JtQ3RybCAhPSBOVUxMKTsKKwkKKwlDUERGX0RlZmF1bHRBcHBlYXJhbmNlIHBEYSA9IHBGb3JtQ3RybC0+R2V0RGVmYXVsdEFwcGVhcmFuY2UoKTsKKwlDRlhfQnl0ZVN0cmluZyBjc0ZvbnQgPSAiIjsKKwlGWF9GTE9BVCBmRm9udFNpemUgPSAwLjBmOworCXBEYS5HZXRGb250KGNzRm9udCwgZkZvbnRTaXplKTsKKwkKKwlyZXR1cm4gZkZvbnRTaXplOworfQorCitpbnQJQ1BERlNES19XaWRnZXQ6OkdldFNlbGVjdGVkSW5kZXgoaW50IG5JbmRleCkgY29uc3QKK3sKKwlDUERGX0Zvcm1GaWVsZCoJcEZvcm1GaWVsZCA9IEdldEZvcm1GaWVsZCgpOworCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCQorCXJldHVybiBwRm9ybUZpZWxkLT5HZXRTZWxlY3RlZEluZGV4KG5JbmRleCk7Cit9CisKK0NGWF9XaWRlU3RyaW5nIENQREZTREtfV2lkZ2V0OjpHZXRWYWx1ZSgpIGNvbnN0Cit7CisJQ1BERl9Gb3JtRmllbGQqCXBGb3JtRmllbGQgPSBHZXRGb3JtRmllbGQoKTsKKwlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKwkKKwlyZXR1cm4gcEZvcm1GaWVsZC0+R2V0VmFsdWUoKTsKK30KKworQ0ZYX1dpZGVTdHJpbmcgQ1BERlNES19XaWRnZXQ6OkdldERlZmF1bHRWYWx1ZSgpIGNvbnN0Cit7CisJQ1BERl9Gb3JtRmllbGQqCXBGb3JtRmllbGQgPSBHZXRGb3JtRmllbGQoKTsKKwlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKwkKKwlyZXR1cm4gcEZvcm1GaWVsZC0+R2V0RGVmYXVsdFZhbHVlKCk7Cit9CisKK0NGWF9XaWRlU3RyaW5nIENQREZTREtfV2lkZ2V0OjpHZXRPcHRpb25MYWJlbChpbnQgbkluZGV4KSBjb25zdAoreworCUNQREZfRm9ybUZpZWxkKglwRm9ybUZpZWxkID0gR2V0Rm9ybUZpZWxkKCk7CisJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisJCisJcmV0dXJuIHBGb3JtRmllbGQtPkdldE9wdGlvbkxhYmVsKG5JbmRleCk7Cit9CisKK2ludAlDUERGU0RLX1dpZGdldDo6Q291bnRPcHRpb25zKCkgY29uc3QKK3sKKwlDUERGX0Zvcm1GaWVsZCoJcEZvcm1GaWVsZCA9IEdldEZvcm1GaWVsZCgpOworCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCQorCXJldHVybiBwRm9ybUZpZWxkLT5Db3VudE9wdGlvbnMoKTsKK30KKworRlhfQk9PTAlDUERGU0RLX1dpZGdldDo6SXNPcHRpb25TZWxlY3RlZChpbnQgbkluZGV4KSBjb25zdAoreworCUNQREZfRm9ybUZpZWxkKglwRm9ybUZpZWxkID0gR2V0Rm9ybUZpZWxkKCk7CisJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisJCisJcmV0dXJuIHBGb3JtRmllbGQtPklzSXRlbVNlbGVjdGVkKG5JbmRleCk7Cit9CisKK2ludAlDUERGU0RLX1dpZGdldDo6R2V0VG9wVmlzaWJsZUluZGV4KCkgY29uc3QKK3sKKwlDUERGX0Zvcm1GaWVsZCoJcEZvcm1GaWVsZCA9IEdldEZvcm1GaWVsZCgpOworCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCQorCXJldHVybiBwRm9ybUZpZWxkLT5HZXRUb3BWaXNpYmxlSW5kZXgoKTsKK30KKworRlhfQk9PTAlDUERGU0RLX1dpZGdldDo6SXNDaGVja2VkKCkgY29uc3QKK3sKKwlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUN0cmwgPSBHZXRGb3JtQ29udHJvbCgpOworCUFTU0VSVChwRm9ybUN0cmwgIT0gTlVMTCk7CisJCisJcmV0dXJuIHBGb3JtQ3RybC0+SXNDaGVja2VkKCk7Cit9CisKK2ludAlDUERGU0RLX1dpZGdldDo6R2V0QWxpZ25tZW50KCkgY29uc3QKK3sKKwlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUN0cmwgPSBHZXRGb3JtQ29udHJvbCgpOworCUFTU0VSVChwRm9ybUN0cmwgIT0gTlVMTCk7CisJCisJcmV0dXJuIHBGb3JtQ3RybC0+R2V0Q29udHJvbEFsaWdubWVudCgpOworfQorCitpbnQJQ1BERlNES19XaWRnZXQ6OkdldE1heExlbigpIGNvbnN0Cit7CisJQ1BERl9Gb3JtRmllbGQqCXBGb3JtRmllbGQgPSBHZXRGb3JtRmllbGQoKTsKKwlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKwkKKwlyZXR1cm4gcEZvcm1GaWVsZC0+R2V0TWF4TGVuKCk7Cit9CisKK3ZvaWQgQ1BERlNES19XaWRnZXQ6OlNldENoZWNrKEZYX0JPT0wgYkNoZWNrZWQsIEZYX0JPT0wgYk5vdGlmeSkKK3sKKwlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUN0cmwgPSBHZXRGb3JtQ29udHJvbCgpOworCUFTU0VSVChwRm9ybUN0cmwgIT0gTlVMTCk7CisJCisJQ1BERl9Gb3JtRmllbGQqCXBGb3JtRmllbGQgPSBwRm9ybUN0cmwtPkdldEZpZWxkKCk7CisJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisJCisJcEZvcm1GaWVsZC0+Q2hlY2tDb250cm9sKHBGb3JtRmllbGQtPkdldENvbnRyb2xJbmRleChwRm9ybUN0cmwpLCBiQ2hlY2tlZCwgYk5vdGlmeSk7Cit9CisKK3ZvaWQgQ1BERlNES19XaWRnZXQ6OlNldFZhbHVlKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzVmFsdWUsIEZYX0JPT0wgYk5vdGlmeSkKK3sKKwlDUERGX0Zvcm1GaWVsZCoJcEZvcm1GaWVsZCA9IEdldEZvcm1GaWVsZCgpOworCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCQorCXBGb3JtRmllbGQtPlNldFZhbHVlKHNWYWx1ZSwgYk5vdGlmeSk7Cit9CisKK3ZvaWQgQ1BERlNES19XaWRnZXQ6OlNldERlZmF1bHRWYWx1ZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc1ZhbHVlKQoreworfQordm9pZCBDUERGU0RLX1dpZGdldDo6U2V0T3B0aW9uU2VsZWN0aW9uKGludCBpbmRleCwgRlhfQk9PTCBiU2VsZWN0ZWQsIEZYX0JPT0wgYk5vdGlmeSkKK3sKKwlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IEdldEZvcm1GaWVsZCgpOworCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCQorCXBGb3JtRmllbGQtPlNldEl0ZW1TZWxlY3Rpb24oaW5kZXgsIGJTZWxlY3RlZCwgYk5vdGlmeSk7Cit9CisKK3ZvaWQgQ1BERlNES19XaWRnZXQ6OkNsZWFyU2VsZWN0aW9uKEZYX0JPT0wgYk5vdGlmeSkKK3sKKwlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IEdldEZvcm1GaWVsZCgpOworCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCQorCXBGb3JtRmllbGQtPkNsZWFyU2VsZWN0aW9uKGJOb3RpZnkpOworfQorCit2b2lkIENQREZTREtfV2lkZ2V0OjpTZXRUb3BWaXNpYmxlSW5kZXgoaW50IGluZGV4KQoreworfQorCit2b2lkIENQREZTREtfV2lkZ2V0OjpTZXRBcHBNb2RpZmllZCgpCit7CisJbV9iQXBwTW9kaWZpZWQgPSBUUlVFOworfQorCit2b2lkIENQREZTREtfV2lkZ2V0OjpDbGVhckFwcE1vZGlmaWVkKCkKK3sKKwltX2JBcHBNb2RpZmllZCA9IEZBTFNFOworfQorCitGWF9CT09MIENQREZTREtfV2lkZ2V0OjpJc0FwcE1vZGlmaWVkKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9iQXBwTW9kaWZpZWQ7Cit9CisKK3ZvaWQgQ1BERlNES19XaWRnZXQ6OlJlc2V0QXBwZWFyYW5jZShGWF9MUENXU1RSIHNWYWx1ZSwgRlhfQk9PTCBiVmFsdWVDaGFuZ2VkKQoreworCVNldEFwcE1vZGlmaWVkKCk7CisKKwltX25BcHBBZ2UrKzsKKwlpZiAobV9uQXBwQWdlID4gOTk5OTk5KQorCQltX25BcHBBZ2UgPSAwOworCWlmIChiVmFsdWVDaGFuZ2VkKQorCQltX25WYWx1ZUFnZSsrOworCisJaW50IG5GaWVsZFR5cGUgPSBHZXRGaWVsZFR5cGUoKTsKKwkKKwlzd2l0Y2ggKG5GaWVsZFR5cGUpCisJeworCWNhc2UgRklFTERUWVBFX1BVU0hCVVRUT046CisJCVJlc2V0QXBwZWFyYW5jZV9QdXNoQnV0dG9uKCk7CisJCWJyZWFrOworCWNhc2UgRklFTERUWVBFX0NIRUNLQk9YOgorCQlSZXNldEFwcGVhcmFuY2VfQ2hlY2tCb3goKTsKKwkJYnJlYWs7CisJY2FzZSBGSUVMRFRZUEVfUkFESU9CVVRUT046CisJCVJlc2V0QXBwZWFyYW5jZV9SYWRpb0J1dHRvbigpOworCQlicmVhazsKKwljYXNlIEZJRUxEVFlQRV9DT01CT0JPWDoKKwkJUmVzZXRBcHBlYXJhbmNlX0NvbWJvQm94KHNWYWx1ZSk7CisJCWJyZWFrOworCWNhc2UgRklFTERUWVBFX0xJU1RCT1g6CisJCVJlc2V0QXBwZWFyYW5jZV9MaXN0Qm94KCk7CisJCWJyZWFrOworCWNhc2UgRklFTERUWVBFX1RFWFRGSUVMRDoKKwkJUmVzZXRBcHBlYXJhbmNlX1RleHRGaWVsZChzVmFsdWUpOworCQlicmVhazsKKwl9CisJCisJQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOworCW1fcEFubm90LT5DbGVhckNhY2hlZEFQKCk7Cit9CisKK0NGWF9XaWRlU3RyaW5nIENQREZTREtfV2lkZ2V0OjpPbkZvcm1hdChpbnQgbkNvbW1pdEtleSwgRlhfQk9PTCYgYkZvcm1hdGVkKQoreworIAlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IEdldEZvcm1GaWVsZCgpOworIAlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKyAJCisgCUFTU0VSVChtX3BJbnRlckZvcm0gIT0gTlVMTCk7CisJCisJcmV0dXJuIG1fcEludGVyRm9ybS0+T25Gb3JtYXQocEZvcm1GaWVsZCwgbkNvbW1pdEtleSwgYkZvcm1hdGVkKTsKKworfQorCit2b2lkIENQREZTREtfV2lkZ2V0OjpSZXNldEZpZWxkQXBwZWFyYW5jZShGWF9CT09MIGJWYWx1ZUNoYW5nZWQpCit7CisJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSBHZXRGb3JtRmllbGQoKTsKKwlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKwkKKwlBU1NFUlQobV9wSW50ZXJGb3JtICE9IE5VTEwpOworCisJbV9wSW50ZXJGb3JtLT5SZXNldEZpZWxkQXBwZWFyYW5jZShwRm9ybUZpZWxkLCBOVUxMLCBiVmFsdWVDaGFuZ2VkKTsKK30KKwordm9pZAlDUERGU0RLX1dpZGdldDo6RHJhd0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgY29uc3QgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwKKwkJQ1BERl9Bbm5vdDo6QXBwZWFyYW5jZU1vZGUgbW9kZSwgY29uc3QgQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucykKK3sKKwlpbnQgbkZpZWxkVHlwZSA9IEdldEZpZWxkVHlwZSgpOworCQorCWlmICgobkZpZWxkVHlwZSA9PSBGSUVMRFRZUEVfQ0hFQ0tCT1ggfHwgbkZpZWxkVHlwZSA9PSBGSUVMRFRZUEVfUkFESU9CVVRUT04pICYmCisJCW1vZGUgPT0gQ1BERl9Bbm5vdDo6Tm9ybWFsICYmIAorCQkhdGhpcy0+SXNXaWRnZXRBcHBlYXJhbmNlVmFsaWQoQ1BERl9Bbm5vdDo6Tm9ybWFsKSkKKwl7CisJCUNGWF9QYXRoRGF0YSBwYXRoRGF0YTsKKwkJCisJCUNQREZfUmVjdCByY0Fubm90ID0gdGhpcy0+R2V0UmVjdCgpOworCQkKKwkJcGF0aERhdGEuQXBwZW5kUmVjdChyY0Fubm90LmxlZnQsIHJjQW5ub3QuYm90dG9tLAorCQkJcmNBbm5vdC5yaWdodCwgcmNBbm5vdC50b3ApOworCQkKKwkJQ0ZYX0dyYXBoU3RhdGVEYXRhIGdzZDsKKwkJZ3NkLm1fTGluZVdpZHRoID0gMC4wZjsKKwkJCisJCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoRGF0YSwgcFVzZXIyRGV2aWNlLCAmZ3NkLCAwLCAweEZGQUFBQUFBLCBGWEZJTExfQUxURVJOQVRFKTsKKwl9CisJZWxzZQorCXsKKwkJQ1BERlNES19Bbm5vdDo6RHJhd0FwcGVhcmFuY2UocERldmljZSwgcFVzZXIyRGV2aWNlLCBtb2RlLCBwT3B0aW9ucyk7CisJfQorfQorCit2b2lkIENQREZTREtfV2lkZ2V0OjpVcGRhdGVGaWVsZCgpCit7CisJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSBHZXRGb3JtRmllbGQoKTsKKwlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKwkKKwlBU1NFUlQobV9wSW50ZXJGb3JtICE9IE5VTEwpOworCW1fcEludGVyRm9ybS0+VXBkYXRlRmllbGQocEZvcm1GaWVsZCk7Cit9CisKK3ZvaWQgQ1BERlNES19XaWRnZXQ6OkRyYXdTaGFkb3coQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQoreworIAlBU1NFUlQobV9wSW50ZXJGb3JtICE9IE5VTEwpOworIAorCWludCBuRmllbGRUeXBlID0gR2V0RmllbGRUeXBlKCk7CisgCWlmIChtX3BJbnRlckZvcm0tPklzTmVlZEhpZ2hMaWdodChuRmllbGRUeXBlKSkKKyAJeworIAorLy8gIAkJaWYgKG5GaWVsZFR5cGUgIT0gRklFTERUWVBFX1BVU0hCVVRUT04pCisvLyAgCQl7CisJCQlDUERGX1JlY3QgcmMgID0gR2V0UmVjdCgpOworCQkJRlhfQ09MT1JSRUYgY29sb3IgPSBtX3BJbnRlckZvcm0tPkdldEhpZ2hsaWdodENvbG9yKG5GaWVsZFR5cGUpOworCQkJRlhfQllURSBhbHBoYSA9IG1fcEludGVyRm9ybS0+R2V0SGlnaGxpZ2h0QWxwaGEoKTsKKworCQkJQ0ZYX0Zsb2F0UmVjdCByY0RldmljZTsKKwkJCUFTU0VSVChtX3BJbnRlckZvcm0tPkdldERvY3VtZW50KCkpOworCQkJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcEludGVyRm9ybS0+R2V0RG9jdW1lbnQoKS0+R2V0RW52KCk7CisJCQlpZighcEVudikKKwkJCQlyZXR1cm47CisJCQlDRlhfQWZmaW5lTWF0cml4IHBhZ2UyZGV2aWNlOworCQkJcFBhZ2VWaWV3LT5HZXRDdXJyZW50TWF0cml4KHBhZ2UyZGV2aWNlKTsKKwkJCXBhZ2UyZGV2aWNlLlRyYW5zZm9ybSgoKEZYX0ZMT0FUKXJjLmxlZnQpLCAoKEZYX0ZMT0FUKXJjLmJvdHRvbSksIHJjRGV2aWNlLmxlZnQsIHJjRGV2aWNlLmJvdHRvbSk7CisvLyAJCQlwRW52LT5GRklfUGFnZVRvRGV2aWNlKG1fcFBhZ2VWaWV3LT5HZXRQREZQYWdlKCksIHJjLmxlZnQsIHJjLmJvdHRvbSwgJnJjRGV2aWNlLmxlZnQsICZyY0RldmljZS5ib3R0b20pOworLy8gCQkJcEVudi0+RkZJX1BhZ2VUb0RldmljZShtX3BQYWdlVmlldy0+R2V0UERGUGFnZSgpLCByYy5yaWdodCwgcmMudG9wLCAmcmNEZXZpY2UucmlnaHQsICZyY0RldmljZS50b3ApOworCQkJcGFnZTJkZXZpY2UuVHJhbnNmb3JtKCgoRlhfRkxPQVQpcmMucmlnaHQpLCAoKEZYX0ZMT0FUKXJjLnRvcCksIHJjRGV2aWNlLnJpZ2h0LCByY0RldmljZS50b3ApOworCisJCQlyY0RldmljZS5Ob3JtYWxpemUoKTsKKworCQkJRlhfQVJHQiBhcmdiID0gQXJnYkVuY29kZSgoaW50KWFscGhhLCBjb2xvcik7CisJCQlGWF9SRUNUIHJjRGV2KChpbnQpcmNEZXZpY2UubGVmdCwoaW50KXJjRGV2aWNlLnRvcCwoaW50KXJjRGV2aWNlLnJpZ2h0LChpbnQpcmNEZXZpY2UuYm90dG9tKTsKKwkJCXBEZXZpY2UtPkZpbGxSZWN0KCZyY0RldiwgYXJnYik7CQorCQkJLyogCQl9Ki8KKwl9Cit9CisKK3ZvaWQgQ1BERlNES19XaWRnZXQ6OlJlc2V0QXBwZWFyYW5jZV9QdXNoQnV0dG9uKCkKK3sKKwlDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCA9IEdldEZvcm1Db250cm9sKCk7CisJQVNTRVJUKHBDb250cm9sICE9IE5VTEwpOworCisKKwkKKwlDUERGX1JlY3QgcmNXaW5kb3cgPSBHZXRSb3RhdGVkUmVjdCgpOwkKKworCUZYX0lOVDMyIG5MYXlvdXQgPSAwOworCisJc3dpdGNoIChwQ29udHJvbC0+R2V0VGV4dFBvc2l0aW9uKCkpCisJeworCWNhc2UgVEVYVFBPU19JQ09OOgorCQluTGF5b3V0ID0gUFBCTF9JQ09OOworCQlicmVhazsKKwljYXNlIFRFWFRQT1NfQkVMT1c6CisJCW5MYXlvdXQgPSBQUEJMX0lDT05UT1BMQUJFTEJPVFRPTTsKKwkJYnJlYWs7CisJY2FzZSBURVhUUE9TX0FCT1ZFOgorCQluTGF5b3V0ID0gUFBCTF9MQUJFTFRPUElDT05CT1RUT007CisJCWJyZWFrOworCWNhc2UgVEVYVFBPU19SSUdIVDoKKwkJbkxheW91dCA9IFBQQkxfSUNPTkxFRlRMQUJFTFJJR0hUOworCQlicmVhazsKKwljYXNlIFRFWFRQT1NfTEVGVDoKKwkJbkxheW91dCA9IFBQQkxfTEFCRUxMRUZUSUNPTlJJR0hUOworCQlicmVhazsKKwljYXNlIFRFWFRQT1NfT1ZFUkxBSUQ6CisJCW5MYXlvdXQgPSBQUEJMX0xBQkVMT1ZFUklDT047CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW5MYXlvdXQgPSBQUEJMX0xBQkVMOworCQlicmVhazsKKwl9CisKKwlDUFdMX0NvbG9yIGNyQmFja2dyb3VuZCwgY3JCb3JkZXI7CisKKwlpbnQgaUNvbG9yVHlwZTsKKwlGWF9GTE9BVCBmY1s0XTsKKworCXBDb250cm9sLT5HZXRPcmlnaW5hbEJhY2tncm91bmRDb2xvcihpQ29sb3JUeXBlLCBmYyk7CisJaWYgKGlDb2xvclR5cGUgPiAwKQorCQljckJhY2tncm91bmQgPSBDUFdMX0NvbG9yKGlDb2xvclR5cGUsIGZjWzBdLCBmY1sxXSwgZmNbMl0sIGZjWzNdKTsKKworCXBDb250cm9sLT5HZXRPcmlnaW5hbEJvcmRlckNvbG9yKGlDb2xvclR5cGUsIGZjKTsKKwlpZiAoaUNvbG9yVHlwZSA+IDApCisJCWNyQm9yZGVyID0gQ1BXTF9Db2xvcihpQ29sb3JUeXBlLCBmY1swXSwgZmNbMV0sIGZjWzJdLCBmY1szXSk7CisKKwlGWF9GTE9BVCBmQm9yZGVyV2lkdGggPSAoRlhfRkxPQVQpR2V0Qm9yZGVyV2lkdGgoKTsKKwlGWF9JTlQzMiBuQm9yZGVyU3R5bGUgPSAwOworCUNQV0xfRGFzaCBkc0JvcmRlcigzLDAsMCk7CisJQ1BXTF9Db2xvciBjckxlZnRUb3AsY3JSaWdodEJvdHRvbTsKKworCXN3aXRjaCAoR2V0Qm9yZGVyU3R5bGUoKSkKKwl7CisJY2FzZSBCQlNfREFTSDoKKwkJbkJvcmRlclN0eWxlID0gUEJTX0RBU0g7CisJCWRzQm9yZGVyID0gQ1BXTF9EYXNoKDMsIDMsIDApOworCQlicmVhazsKKwljYXNlIEJCU19CRVZFTEVEOgorCQluQm9yZGVyU3R5bGUgPSBQQlNfQkVWRUxFRDsKKwkJZkJvcmRlcldpZHRoICo9IDI7CisJCWNyTGVmdFRvcCA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMSk7CisJCWNyUmlnaHRCb3R0b20gPSBDUFdMX1V0aWxzOjpEZXZpZGVDb2xvcihjckJhY2tncm91bmQsMik7CisJCWJyZWFrOworCWNhc2UgQkJTX0lOU0VUOgorCQluQm9yZGVyU3R5bGUgPSBQQlNfSU5TRVQ7CisJCWZCb3JkZXJXaWR0aCAqPSAyOworCQljckxlZnRUb3AgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLDAuNSk7CisJCWNyUmlnaHRCb3R0b20gPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLDAuNzUpOworCQlicmVhazsKKwljYXNlIEJCU19VTkRFUkxJTkU6CisJCW5Cb3JkZXJTdHlsZSA9IFBCU19VTkRFUkxJTkVEOworCQlicmVhazsKKwlkZWZhdWx0OiAKKwkJbkJvcmRlclN0eWxlID0gUEJTX1NPTElEOworCQlicmVhazsKKwl9CisKKwlDUERGX1JlY3QgcmNDbGllbnQgPSBDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdChyY1dpbmRvdyxmQm9yZGVyV2lkdGgpOwkKKworCUNQV0xfQ29sb3IgY3JUZXh0KENPTE9SVFlQRV9HUkFZLDApOworCisJRlhfRkxPQVQgZkZvbnRTaXplID0gMTIuMGY7CisJQ0ZYX0J5dGVTdHJpbmcgY3NOYW1lVGFnOworCisJQ1BERl9EZWZhdWx0QXBwZWFyYW5jZSBkYSA9IHBDb250cm9sLT5HZXREZWZhdWx0QXBwZWFyYW5jZSgpOworCWlmIChkYS5IYXNDb2xvcigpKQorCXsKKwkJZGEuR2V0Q29sb3IoaUNvbG9yVHlwZSwgZmMpOworCQljclRleHQgPSBDUFdMX0NvbG9yKGlDb2xvclR5cGUsIGZjWzBdLCBmY1sxXSwgZmNbMl0sIGZjWzNdKTsKKwl9CisKKwlpZiAoZGEuSGFzRm9udCgpKSAKKwkJZGEuR2V0Rm9udChjc05hbWVUYWcsIGZGb250U2l6ZSk7CisKKwlDRlhfV2lkZVN0cmluZyBjc1dDYXB0aW9uOworCUNGWF9XaWRlU3RyaW5nIGNzTm9ybWFsQ2FwdGlvbiwgY3NSb2xsb3ZlckNhcHRpb24sIGNzRG93bkNhcHRpb247CisKKwlpZiAocENvbnRyb2wtPkhhc01LRW50cnkoIkNBIikpCisJeworCQljc05vcm1hbENhcHRpb24gPSBwQ29udHJvbC0+R2V0Tm9ybWFsQ2FwdGlvbigpOworCX0KKwlpZiAocENvbnRyb2wtPkhhc01LRW50cnkoIlJDIikpCisJeworCQljc1JvbGxvdmVyQ2FwdGlvbiA9IHBDb250cm9sLT5HZXRSb2xsb3ZlckNhcHRpb24oKTsKKwl9CisJaWYgKHBDb250cm9sLT5IYXNNS0VudHJ5KCJBQyIpKQorCXsKKwkJY3NEb3duQ2FwdGlvbiA9IHBDb250cm9sLT5HZXREb3duQ2FwdGlvbigpOworCX0KKworCUNQREZfU3RyZWFtKiBwTm9ybWFsSWNvbiA9IE5VTEw7CisJQ1BERl9TdHJlYW0qIHBSb2xsb3Zlckljb24gPSBOVUxMOworCUNQREZfU3RyZWFtKiBwRG93bkljb24gPSBOVUxMOworCisJaWYgKHBDb250cm9sLT5IYXNNS0VudHJ5KCJJIikpCisJeworCQlwTm9ybWFsSWNvbiA9IHBDb250cm9sLT5HZXROb3JtYWxJY29uKCk7CisJfQorCWlmIChwQ29udHJvbC0+SGFzTUtFbnRyeSgiUkkiKSkKKwl7CisJCXBSb2xsb3Zlckljb24gPSBwQ29udHJvbC0+R2V0Um9sbG92ZXJJY29uKCk7CisJfQorCWlmIChwQ29udHJvbC0+SGFzTUtFbnRyeSgiSVgiKSkKKwl7CisJCXBEb3duSWNvbiA9IHBDb250cm9sLT5HZXREb3duSWNvbigpOworCX0KKworCWlmIChwTm9ybWFsSWNvbikKKwl7CisJCWlmIChDUERGX0RpY3Rpb25hcnkqIHBJbWFnZURpY3QgPSBwTm9ybWFsSWNvbi0+R2V0RGljdCgpKQorCQl7CisJCQlpZiAocEltYWdlRGljdC0+R2V0U3RyaW5nKCJOYW1lIikuSXNFbXB0eSgpKQorCQkJCXBJbWFnZURpY3QtPlNldEF0U3RyaW5nKCJOYW1lIiwgIkltZ0EiKTsKKwkJfQorCX0KKworCWlmIChwUm9sbG92ZXJJY29uKQorCXsKKwkJaWYgKENQREZfRGljdGlvbmFyeSogcEltYWdlRGljdCA9IHBSb2xsb3Zlckljb24tPkdldERpY3QoKSkKKwkJeworCQkJaWYgKHBJbWFnZURpY3QtPkdldFN0cmluZygiTmFtZSIpLklzRW1wdHkoKSkKKwkJCQlwSW1hZ2VEaWN0LT5TZXRBdFN0cmluZygiTmFtZSIsICJJbWdCIik7CisJCX0KKwl9CisKKwlpZiAocERvd25JY29uKQorCXsKKwkJaWYgKENQREZfRGljdGlvbmFyeSogcEltYWdlRGljdCA9IHBEb3duSWNvbi0+R2V0RGljdCgpKQorCQl7CisJCQlpZiAocEltYWdlRGljdC0+R2V0U3RyaW5nKCJOYW1lIikuSXNFbXB0eSgpKQorCQkJCXBJbWFnZURpY3QtPlNldEF0U3RyaW5nKCJOYW1lIiwgIkltZ0MiKTsKKwkJfQorCX0KKworCUNQREZfSWNvbkZpdCBpY29uRml0ID0gcENvbnRyb2wtPkdldEljb25GaXQoKTsKKworLy8gCUFTU0VSVCh0aGlzLT5tX3BCYXNlRm9ybSAhPSBOVUxMKTsKKwlBU1NFUlQodGhpcy0+bV9wSW50ZXJGb3JtICE9IE5VTEwpOworCUNQREZTREtfRG9jdW1lbnQqIHBEb2MgPSBtX3BJbnRlckZvcm0tPkdldERvY3VtZW50KCk7CisJQVNTRVJUKHBEb2MgIT0gTlVMTCk7CisJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IHBEb2MtPkdldEVudigpOworCisgCUNCQV9Gb250TWFwIEZvbnRNYXAodGhpcyxwRW52LT5HZXRTeXNIYW5kbGVyKCkpOy8vLCBJU3lzdGVtSGFuZGxlOjpHZXRTeXN0ZW1IYW5kbGVyKG1fcEJhc2VGb3JtLT5HZXRFbnYoKSkpOworCUZvbnRNYXAuSW5pdGlhbCgpOworCisJRm9udE1hcC5TZXRBUFR5cGUoIk4iKTsKKworCUNGWF9CeXRlU3RyaW5nIGNzQVAgPSBDUFdMX1V0aWxzOjpHZXRSZWN0RmlsbEFwcFN0cmVhbShyY1dpbmRvdywgY3JCYWNrZ3JvdW5kKSArIAorCQlDUFdMX1V0aWxzOjpHZXRCb3JkZXJBcHBTdHJlYW0ocmNXaW5kb3csIGZCb3JkZXJXaWR0aCwgY3JCb3JkZXIsIGNyTGVmdFRvcCwgY3JSaWdodEJvdHRvbSwgbkJvcmRlclN0eWxlLCBkc0JvcmRlcikgKworCQlDUFdMX1V0aWxzOjpHZXRQdXNoQnV0dG9uQXBwU3RyZWFtKGljb25GaXQuR2V0Rml0dGluZ0JvdW5kcygpID8gcmNXaW5kb3cgOiByY0NsaWVudCwgJkZvbnRNYXAsIHBOb3JtYWxJY29uLCBpY29uRml0LCBjc05vcm1hbENhcHRpb24sIGNyVGV4dCwgZkZvbnRTaXplLCBuTGF5b3V0KTsKKworCVdyaXRlQXBwZWFyYW5jZSgiTiIsIEdldFJvdGF0ZWRSZWN0KCksIEdldE1hdHJpeCgpLCBjc0FQKTsKKwlpZiAocE5vcm1hbEljb24pCisJCUFkZEltYWdlVG9BcHBlYXJhbmNlKCJOIiwgcE5vcm1hbEljb24pOworCisJQ1BERl9Gb3JtQ29udHJvbDo6SGlnaGxpZ2h0aW5nTW9kZSBlSExNID0gcENvbnRyb2wtPkdldEhpZ2hsaWdodGluZ01vZGUoKTsKKwlpZiAoZUhMTSA9PSBDUERGX0Zvcm1Db250cm9sOjpQdXNoIHx8IGVITE0gPT0gQ1BERl9Gb3JtQ29udHJvbDo6VG9nZ2xlKQorCXsKKwkJaWYgKGNzUm9sbG92ZXJDYXB0aW9uLklzRW1wdHkoKSAmJiAhcFJvbGxvdmVySWNvbikJCQkKKwkJeworCQkJY3NSb2xsb3ZlckNhcHRpb24gPSBjc05vcm1hbENhcHRpb247CisJCQlwUm9sbG92ZXJJY29uID0gcE5vcm1hbEljb247CisJCX0KKworCQlGb250TWFwLlNldEFQVHlwZSgiUiIpOworCisJCWNzQVAgPSBDUFdMX1V0aWxzOjpHZXRSZWN0RmlsbEFwcFN0cmVhbShyY1dpbmRvdywgY3JCYWNrZ3JvdW5kKSArIAorCQkJCUNQV0xfVXRpbHM6OkdldEJvcmRlckFwcFN0cmVhbShyY1dpbmRvdywgZkJvcmRlcldpZHRoLCBjckJvcmRlciwgY3JMZWZ0VG9wLCBjclJpZ2h0Qm90dG9tLCBuQm9yZGVyU3R5bGUsIGRzQm9yZGVyKSArCisJCQkJQ1BXTF9VdGlsczo6R2V0UHVzaEJ1dHRvbkFwcFN0cmVhbShpY29uRml0LkdldEZpdHRpbmdCb3VuZHMoKSA/IHJjV2luZG93IDogcmNDbGllbnQsICZGb250TWFwLCBwUm9sbG92ZXJJY29uLCBpY29uRml0LCBjc1JvbGxvdmVyQ2FwdGlvbiwgY3JUZXh0LCBmRm9udFNpemUsIG5MYXlvdXQpOworCisJCVdyaXRlQXBwZWFyYW5jZSgiUiIsIEdldFJvdGF0ZWRSZWN0KCksIEdldE1hdHJpeCgpLCBjc0FQKTsKKwkJaWYgKHBSb2xsb3Zlckljb24pCisJCQlBZGRJbWFnZVRvQXBwZWFyYW5jZSgiUiIsIHBSb2xsb3Zlckljb24pOworCisJCWlmIChjc0Rvd25DYXB0aW9uLklzRW1wdHkoKSAmJiAhcERvd25JY29uKQorCQl7CisJCQljc0Rvd25DYXB0aW9uID0gY3NOb3JtYWxDYXB0aW9uOworCQkJcERvd25JY29uID0gcE5vcm1hbEljb247CisJCX0KKworCQlzd2l0Y2ggKG5Cb3JkZXJTdHlsZSkKKwkJeworCQljYXNlIFBCU19CRVZFTEVEOgorCQkJeworCQkJCUNQV0xfQ29sb3IgY3JUZW1wID0gY3JMZWZ0VG9wOworCQkJCWNyTGVmdFRvcCA9IGNyUmlnaHRCb3R0b207CisJCQkJY3JSaWdodEJvdHRvbSA9IGNyVGVtcDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBCU19JTlNFVDoKKwkJCWNyTGVmdFRvcCA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMCk7CisJCQljclJpZ2h0Qm90dG9tID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwxKTsKKwkJCWJyZWFrOworCQl9CisJCQorCQlGb250TWFwLlNldEFQVHlwZSgiRCIpOworCisJCWNzQVAgPSBDUFdMX1V0aWxzOjpHZXRSZWN0RmlsbEFwcFN0cmVhbShyY1dpbmRvdywgQ1BXTF9VdGlsczo6U3Vic3RyYWN0Q29sb3IoY3JCYWNrZ3JvdW5kLDAuMjVmKSkgKyAKKwkJCUNQV0xfVXRpbHM6OkdldEJvcmRlckFwcFN0cmVhbShyY1dpbmRvdywgZkJvcmRlcldpZHRoLCBjckJvcmRlciwgY3JMZWZ0VG9wLCBjclJpZ2h0Qm90dG9tLCBuQm9yZGVyU3R5bGUsIGRzQm9yZGVyKSArIAorCQkJQ1BXTF9VdGlsczo6R2V0UHVzaEJ1dHRvbkFwcFN0cmVhbShpY29uRml0LkdldEZpdHRpbmdCb3VuZHMoKSA/IHJjV2luZG93IDogcmNDbGllbnQsICZGb250TWFwLCBwRG93bkljb24sIGljb25GaXQsIGNzRG93bkNhcHRpb24sIGNyVGV4dCwgZkZvbnRTaXplLCBuTGF5b3V0KTsKKworCQlXcml0ZUFwcGVhcmFuY2UoIkQiLCBHZXRSb3RhdGVkUmVjdCgpLCBHZXRNYXRyaXgoKSwgY3NBUCk7CisJCWlmIChwRG93bkljb24pCisJCQlBZGRJbWFnZVRvQXBwZWFyYW5jZSgiRCIsIHBEb3duSWNvbik7CisJfQorCWVsc2UKKwl7CisJCVJlbW92ZUFwcGVhcmFuY2UoIkQiKTsKKwkJUmVtb3ZlQXBwZWFyYW5jZSgiUiIpOworCX0KK30KKwordm9pZCBDUERGU0RLX1dpZGdldDo6UmVzZXRBcHBlYXJhbmNlX0NoZWNrQm94KCkKK3sKKwlDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCA9IEdldEZvcm1Db250cm9sKCk7CisJQVNTRVJUKHBDb250cm9sICE9IE5VTEwpOworCisKKworCUNQV0xfQ29sb3IgY3JCYWNrZ3JvdW5kLCBjckJvcmRlciwgY3JUZXh0OworCQorCWludCBpQ29sb3JUeXBlOworCUZYX0ZMT0FUIGZjWzRdOworCisJcENvbnRyb2wtPkdldE9yaWdpbmFsQmFja2dyb3VuZENvbG9yKGlDb2xvclR5cGUsIGZjKTsKKwlpZiAoaUNvbG9yVHlwZSA+IDApCisJCWNyQmFja2dyb3VuZCA9IENQV0xfQ29sb3IoaUNvbG9yVHlwZSwgZmNbMF0sIGZjWzFdLCBmY1syXSwgZmNbM10pOworCisJcENvbnRyb2wtPkdldE9yaWdpbmFsQm9yZGVyQ29sb3IoaUNvbG9yVHlwZSwgZmMpOworCWlmIChpQ29sb3JUeXBlID4gMCkKKwkJY3JCb3JkZXIgPSBDUFdMX0NvbG9yKGlDb2xvclR5cGUsIGZjWzBdLCBmY1sxXSwgZmNbMl0sIGZjWzNdKTsKKworCUZYX0ZMT0FUIGZCb3JkZXJXaWR0aCA9IChGWF9GTE9BVClHZXRCb3JkZXJXaWR0aCgpOworCUZYX0lOVDMyIG5Cb3JkZXJTdHlsZSA9IDA7CisJQ1BXTF9EYXNoIGRzQm9yZGVyKDMsMCwwKTsKKwlDUFdMX0NvbG9yIGNyTGVmdFRvcCxjclJpZ2h0Qm90dG9tOworCisJc3dpdGNoIChHZXRCb3JkZXJTdHlsZSgpKQorCXsKKwljYXNlIEJCU19EQVNIOgorCQluQm9yZGVyU3R5bGUgPSBQQlNfREFTSDsKKwkJZHNCb3JkZXIgPSBDUFdMX0Rhc2goMywgMywgMCk7CisJCWJyZWFrOworCWNhc2UgQkJTX0JFVkVMRUQ6CisJCW5Cb3JkZXJTdHlsZSA9IFBCU19CRVZFTEVEOworCQlmQm9yZGVyV2lkdGggKj0gMjsKKwkJY3JMZWZ0VG9wID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwxKTsKKwkJY3JSaWdodEJvdHRvbSA9IENQV0xfVXRpbHM6OkRldmlkZUNvbG9yKGNyQmFja2dyb3VuZCwyKTsKKwkJYnJlYWs7CisJY2FzZSBCQlNfSU5TRVQ6CisJCW5Cb3JkZXJTdHlsZSA9IFBCU19JTlNFVDsKKwkJZkJvcmRlcldpZHRoICo9IDI7CisJCWNyTGVmdFRvcCA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMC41KTsKKwkJY3JSaWdodEJvdHRvbSA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMC43NSk7CisJCWJyZWFrOworCWNhc2UgQkJTX1VOREVSTElORToKKwkJbkJvcmRlclN0eWxlID0gUEJTX1VOREVSTElORUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6IAorCQluQm9yZGVyU3R5bGUgPSBQQlNfU09MSUQ7CisJCWJyZWFrOworCX0KKworCUNQREZfUmVjdCByY1dpbmRvdyA9IEdldFJvdGF0ZWRSZWN0KCk7CisJQ1BERl9SZWN0IHJjQ2xpZW50ID0gQ1BXTF9VdGlsczo6RGVmbGF0ZVJlY3QocmNXaW5kb3csZkJvcmRlcldpZHRoKTsKKworCUNQREZfRGVmYXVsdEFwcGVhcmFuY2UgZGEgPSBwQ29udHJvbC0+R2V0RGVmYXVsdEFwcGVhcmFuY2UoKTsKKwlpZiAoZGEuSGFzQ29sb3IoKSkKKwl7CisJCWRhLkdldENvbG9yKGlDb2xvclR5cGUsIGZjKTsKKwkJY3JUZXh0ID0gQ1BXTF9Db2xvcihpQ29sb3JUeXBlLCBmY1swXSwgZmNbMV0sIGZjWzJdLCBmY1szXSk7CisJfQorCisJRlhfSU5UMzIgblN0eWxlID0gMDsKKworCUNGWF9XaWRlU3RyaW5nIGNzV0NhcHRpb24gPSBwQ29udHJvbC0+R2V0Tm9ybWFsQ2FwdGlvbigpOworCWlmIChjc1dDYXB0aW9uLkdldExlbmd0aCgpID4gMCkKKwl7CisJCXN3aXRjaCAoY3NXQ2FwdGlvblswXSkKKwkJeworCQljYXNlIEwnbCc6CisJCQluU3R5bGUgPSBQQ1NfQ0lSQ0xFOwkJCQorCQkJYnJlYWs7CisJCWNhc2UgTCc4JzoKKwkJCW5TdHlsZSA9IFBDU19DUk9TUzsKKwkJCWJyZWFrOworCQljYXNlIEwndSc6CisJCQluU3R5bGUgPSBQQ1NfRElBTU9ORDsKKwkJCWJyZWFrOworCQljYXNlIEwnbic6CisJCQluU3R5bGUgPSBQQ1NfU1FVQVJFOworCQkJYnJlYWs7CisJCWNhc2UgTCdIJzoKKwkJCW5TdHlsZSA9IFBDU19TVEFSOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6IC8vTCc0JworCQkJblN0eWxlID0gUENTX0NIRUNLOworCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJblN0eWxlID0gUENTX0NIRUNLOworCX0KKworCUNGWF9CeXRlU3RyaW5nIGNzQVBfTl9PTiA9IENQV0xfVXRpbHM6OkdldFJlY3RGaWxsQXBwU3RyZWFtKHJjV2luZG93LGNyQmFja2dyb3VuZCkgKworCQlDUFdMX1V0aWxzOjpHZXRCb3JkZXJBcHBTdHJlYW0ocmNXaW5kb3csZkJvcmRlcldpZHRoLGNyQm9yZGVyLGNyTGVmdFRvcCxjclJpZ2h0Qm90dG9tLG5Cb3JkZXJTdHlsZSxkc0JvcmRlcik7CisKKwlDRlhfQnl0ZVN0cmluZyBjc0FQX05fT0ZGID0gY3NBUF9OX09OOworCisJc3dpdGNoIChuQm9yZGVyU3R5bGUpCisJeworCWNhc2UgUEJTX0JFVkVMRUQ6CisJCXsKKwkJCUNQV0xfQ29sb3IgY3JUZW1wID0gY3JMZWZ0VG9wOworCQkJY3JMZWZ0VG9wID0gY3JSaWdodEJvdHRvbTsKKwkJCWNyUmlnaHRCb3R0b20gPSBjclRlbXA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQQlNfSU5TRVQ6CisJCWNyTGVmdFRvcCA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMCk7CisJCWNyUmlnaHRCb3R0b20gPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLDEpOworCQlicmVhazsKKwl9CisKKwlDRlhfQnl0ZVN0cmluZyBjc0FQX0RfT04gPSBDUFdMX1V0aWxzOjpHZXRSZWN0RmlsbEFwcFN0cmVhbShyY1dpbmRvdyxDUFdMX1V0aWxzOjpTdWJzdHJhY3RDb2xvcihjckJhY2tncm91bmQsMC4yNWYpKSArIAorCQlDUFdMX1V0aWxzOjpHZXRCb3JkZXJBcHBTdHJlYW0ocmNXaW5kb3csZkJvcmRlcldpZHRoLGNyQm9yZGVyLGNyTGVmdFRvcCxjclJpZ2h0Qm90dG9tLG5Cb3JkZXJTdHlsZSxkc0JvcmRlcik7CisKKwlDRlhfQnl0ZVN0cmluZyBjc0FQX0RfT0ZGID0gY3NBUF9EX09OOworCisJY3NBUF9OX09OICs9IENQV0xfVXRpbHM6OkdldENoZWNrQm94QXBwU3RyZWFtKHJjQ2xpZW50LG5TdHlsZSxjclRleHQpOworCWNzQVBfRF9PTiArPSBDUFdMX1V0aWxzOjpHZXRDaGVja0JveEFwcFN0cmVhbShyY0NsaWVudCxuU3R5bGUsY3JUZXh0KTsKKworCVdyaXRlQXBwZWFyYW5jZSgiTiIsIEdldFJvdGF0ZWRSZWN0KCksIEdldE1hdHJpeCgpLCBjc0FQX05fT04sIHBDb250cm9sLT5HZXRDaGVja2VkQVBTdGF0ZSgpKTsKKwlXcml0ZUFwcGVhcmFuY2UoIk4iLCBHZXRSb3RhdGVkUmVjdCgpLCBHZXRNYXRyaXgoKSwgY3NBUF9OX09GRiwgIk9mZiIpOworCisJV3JpdGVBcHBlYXJhbmNlKCJEIiwgR2V0Um90YXRlZFJlY3QoKSwgR2V0TWF0cml4KCksIGNzQVBfRF9PTiwgcENvbnRyb2wtPkdldENoZWNrZWRBUFN0YXRlKCkpOworCVdyaXRlQXBwZWFyYW5jZSgiRCIsIEdldFJvdGF0ZWRSZWN0KCksIEdldE1hdHJpeCgpLCBjc0FQX0RfT0ZGLCAiT2ZmIik7CisKKwlDRlhfQnl0ZVN0cmluZyBjc0FTID0gR2V0QXBwU3RhdGUoKTsKKwlpZiAoY3NBUy5Jc0VtcHR5KCkpCisJCVNldEFwcFN0YXRlKCJPZmYiKTsKK30KKwordm9pZCBDUERGU0RLX1dpZGdldDo6UmVzZXRBcHBlYXJhbmNlX1JhZGlvQnV0dG9uKCkKK3sKKwlDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCA9IEdldEZvcm1Db250cm9sKCk7CisJQVNTRVJUKHBDb250cm9sICE9IE5VTEwpOworCQorCisKKwlDUFdMX0NvbG9yIGNyQmFja2dyb3VuZCwgY3JCb3JkZXIsIGNyVGV4dDsKKwkKKwlpbnQgaUNvbG9yVHlwZTsKKwlGWF9GTE9BVCBmY1s0XTsKKworCXBDb250cm9sLT5HZXRPcmlnaW5hbEJhY2tncm91bmRDb2xvcihpQ29sb3JUeXBlLCBmYyk7CisJaWYgKGlDb2xvclR5cGUgPiAwKQorCQljckJhY2tncm91bmQgPSBDUFdMX0NvbG9yKGlDb2xvclR5cGUsIGZjWzBdLCBmY1sxXSwgZmNbMl0sIGZjWzNdKTsKKworCXBDb250cm9sLT5HZXRPcmlnaW5hbEJvcmRlckNvbG9yKGlDb2xvclR5cGUsIGZjKTsKKwlpZiAoaUNvbG9yVHlwZSA+IDApCisJCWNyQm9yZGVyID0gQ1BXTF9Db2xvcihpQ29sb3JUeXBlLCBmY1swXSwgZmNbMV0sIGZjWzJdLCBmY1szXSk7CisKKwlGWF9GTE9BVCBmQm9yZGVyV2lkdGggPSAoRlhfRkxPQVQpR2V0Qm9yZGVyV2lkdGgoKTsKKwlGWF9JTlQzMiBuQm9yZGVyU3R5bGUgPSAwOworCUNQV0xfRGFzaCBkc0JvcmRlcigzLDAsMCk7CisJQ1BXTF9Db2xvciBjckxlZnRUb3AsY3JSaWdodEJvdHRvbTsKKworCXN3aXRjaCAoR2V0Qm9yZGVyU3R5bGUoKSkKKwl7CisJY2FzZSBCQlNfREFTSDoKKwkJbkJvcmRlclN0eWxlID0gUEJTX0RBU0g7CisJCWRzQm9yZGVyID0gQ1BXTF9EYXNoKDMsIDMsIDApOworCQlicmVhazsKKwljYXNlIEJCU19CRVZFTEVEOgorCQluQm9yZGVyU3R5bGUgPSBQQlNfQkVWRUxFRDsKKwkJZkJvcmRlcldpZHRoICo9IDI7CisJCWNyTGVmdFRvcCA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMSk7CisJCWNyUmlnaHRCb3R0b20gPSBDUFdMX1V0aWxzOjpEZXZpZGVDb2xvcihjckJhY2tncm91bmQsMik7CisJCWJyZWFrOworCWNhc2UgQkJTX0lOU0VUOgorCQluQm9yZGVyU3R5bGUgPSBQQlNfSU5TRVQ7CisJCWZCb3JkZXJXaWR0aCAqPSAyOworCQljckxlZnRUb3AgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLDAuNSk7CisJCWNyUmlnaHRCb3R0b20gPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLDAuNzUpOworCQlicmVhazsKKwljYXNlIEJCU19VTkRFUkxJTkU6CisJCW5Cb3JkZXJTdHlsZSA9IFBCU19VTkRFUkxJTkVEOworCQlicmVhazsKKwlkZWZhdWx0OiAKKwkJbkJvcmRlclN0eWxlID0gUEJTX1NPTElEOworCQlicmVhazsKKwl9CisKKwlDUERGX1JlY3QgcmNXaW5kb3cgPSBHZXRSb3RhdGVkUmVjdCgpOworCUNQREZfUmVjdCByY0NsaWVudCA9IENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KHJjV2luZG93LCBmQm9yZGVyV2lkdGgpOworCisJQ1BERl9EZWZhdWx0QXBwZWFyYW5jZSBkYSA9IHBDb250cm9sLT5HZXREZWZhdWx0QXBwZWFyYW5jZSgpOworCWlmIChkYS5IYXNDb2xvcigpKQorCXsKKwkJZGEuR2V0Q29sb3IoaUNvbG9yVHlwZSwgZmMpOworCQljclRleHQgPSBDUFdMX0NvbG9yKGlDb2xvclR5cGUsIGZjWzBdLCBmY1sxXSwgZmNbMl0sIGZjWzNdKTsKKwl9CisKKwlGWF9JTlQzMiBuU3R5bGUgPSAwOworCisJQ0ZYX1dpZGVTdHJpbmcgY3NXQ2FwdGlvbiA9IHBDb250cm9sLT5HZXROb3JtYWxDYXB0aW9uKCk7CisJaWYgKGNzV0NhcHRpb24uR2V0TGVuZ3RoKCkgPiAwKQorCXsKKwkJc3dpdGNoIChjc1dDYXB0aW9uWzBdKQorCQl7CisJCWRlZmF1bHQ6IC8vTCdsJzoKKwkJCW5TdHlsZSA9IFBDU19DSVJDTEU7CQkJCisJCQlicmVhazsKKwkJY2FzZSBMJzgnOgorCQkJblN0eWxlID0gUENTX0NST1NTOworCQkJYnJlYWs7CisJCWNhc2UgTCd1JzoKKwkJCW5TdHlsZSA9IFBDU19ESUFNT05EOworCQkJYnJlYWs7CisJCWNhc2UgTCduJzoKKwkJCW5TdHlsZSA9IFBDU19TUVVBUkU7CisJCQlicmVhazsKKwkJY2FzZSBMJ0gnOgorCQkJblN0eWxlID0gUENTX1NUQVI7CisJCQlicmVhazsKKwkJY2FzZSBMJzQnOgorCQkJblN0eWxlID0gUENTX0NIRUNLOworCQkJYnJlYWs7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJblN0eWxlID0gUENTX0NJUkNMRTsKKwl9CisKKwlDRlhfQnl0ZVN0cmluZyBjc0FQX05fT047CisKKwlDUERGX1JlY3QgcmNDZW50ZXIgPSBDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdChDUFdMX1V0aWxzOjpHZXRDZW50ZXJTcXVhcmUocmNXaW5kb3cpLCAxLjBmKTsKKwkKKwlpZiAoblN0eWxlID09IFBDU19DSVJDTEUpCisJeworCQlpZiAobkJvcmRlclN0eWxlID09IFBCU19CRVZFTEVEKQorCQl7CisJCQljckxlZnRUb3AgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLCAxKTsKKwkJCWNyUmlnaHRCb3R0b20gPSBDUFdMX1V0aWxzOjpTdWJzdHJhY3RDb2xvcihjckJhY2tncm91bmQsMC4yNWYpOworCQl9CisJCWVsc2UgaWYgKG5Cb3JkZXJTdHlsZSA9PSBQQlNfSU5TRVQpCisJCXsKKwkJCWNyTGVmdFRvcCA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMC41Zik7CisJCQljclJpZ2h0Qm90dG9tID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwwLjc1Zik7CisJCX0KKworCQljc0FQX05fT04gPSBDUFdMX1V0aWxzOjpHZXRDaXJjbGVGaWxsQXBwU3RyZWFtKHJjQ2VudGVyLGNyQmFja2dyb3VuZCkgKyAKKwkJCUNQV0xfVXRpbHM6OkdldENpcmNsZUJvcmRlckFwcFN0cmVhbShyY0NlbnRlcixmQm9yZGVyV2lkdGgsY3JCb3JkZXIsY3JMZWZ0VG9wLGNyUmlnaHRCb3R0b20sbkJvcmRlclN0eWxlLGRzQm9yZGVyKTsKKwl9CisJZWxzZQorCXsKKwkJY3NBUF9OX09OID0gQ1BXTF9VdGlsczo6R2V0UmVjdEZpbGxBcHBTdHJlYW0ocmNXaW5kb3csY3JCYWNrZ3JvdW5kKSArIAorCQkJQ1BXTF9VdGlsczo6R2V0Qm9yZGVyQXBwU3RyZWFtKHJjV2luZG93LGZCb3JkZXJXaWR0aCxjckJvcmRlcixjckxlZnRUb3AsY3JSaWdodEJvdHRvbSxuQm9yZGVyU3R5bGUsZHNCb3JkZXIpOworCX0KKworCUNGWF9CeXRlU3RyaW5nIGNzQVBfTl9PRkYgPSBjc0FQX05fT047CisKKwlzd2l0Y2ggKG5Cb3JkZXJTdHlsZSkKKwl7CisJY2FzZSBQQlNfQkVWRUxFRDoKKwkJeworCQkJQ1BXTF9Db2xvciBjclRlbXAgPSBjckxlZnRUb3A7CisJCQljckxlZnRUb3AgPSBjclJpZ2h0Qm90dG9tOworCQkJY3JSaWdodEJvdHRvbSA9IGNyVGVtcDsKKwkJfQorCQlicmVhazsKKwljYXNlIFBCU19JTlNFVDoKKwkJY3JMZWZ0VG9wID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwwKTsKKwkJY3JSaWdodEJvdHRvbSA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMSk7CisJCWJyZWFrOworCX0KKworCUNGWF9CeXRlU3RyaW5nIGNzQVBfRF9PTjsKKworCWlmIChuU3R5bGUgPT0gUENTX0NJUkNMRSkKKwl7CisJCUNQV0xfQ29sb3IgY3JCSyA9IENQV0xfVXRpbHM6OlN1YnN0cmFjdENvbG9yKGNyQmFja2dyb3VuZCwwLjI1Zik7CisJCWlmIChuQm9yZGVyU3R5bGUgPT0gUEJTX0JFVkVMRUQpCisJCXsKKwkJCWNyTGVmdFRvcCA9IENQV0xfVXRpbHM6OlN1YnN0cmFjdENvbG9yKGNyQmFja2dyb3VuZCwwLjI1Zik7CisJCQljclJpZ2h0Qm90dG9tID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwgMSk7CisJCQljckJLID0gY3JCYWNrZ3JvdW5kOworCQl9CisJCWVsc2UgaWYgKG5Cb3JkZXJTdHlsZSA9PSBQQlNfSU5TRVQpCisJCXsKKwkJCWNyTGVmdFRvcCA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMCk7CisJCQljclJpZ2h0Qm90dG9tID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwxKTsKKwkJfQorCisJCWNzQVBfRF9PTiA9IENQV0xfVXRpbHM6OkdldENpcmNsZUZpbGxBcHBTdHJlYW0ocmNDZW50ZXIsY3JCSykKKwkJCSsgQ1BXTF9VdGlsczo6R2V0Q2lyY2xlQm9yZGVyQXBwU3RyZWFtKHJjQ2VudGVyLGZCb3JkZXJXaWR0aCxjckJvcmRlcixjckxlZnRUb3AsY3JSaWdodEJvdHRvbSxuQm9yZGVyU3R5bGUsZHNCb3JkZXIpOworCX0KKwllbHNlCisJeworCQljc0FQX0RfT04gPSBDUFdMX1V0aWxzOjpHZXRSZWN0RmlsbEFwcFN0cmVhbShyY1dpbmRvdyxDUFdMX1V0aWxzOjpTdWJzdHJhY3RDb2xvcihjckJhY2tncm91bmQsMC4yNWYpKSArIAorCQkJQ1BXTF9VdGlsczo6R2V0Qm9yZGVyQXBwU3RyZWFtKHJjV2luZG93LGZCb3JkZXJXaWR0aCxjckJvcmRlcixjckxlZnRUb3AsY3JSaWdodEJvdHRvbSxuQm9yZGVyU3R5bGUsZHNCb3JkZXIpOwkJCisJfQorCisJQ0ZYX0J5dGVTdHJpbmcgY3NBUF9EX09GRiA9IGNzQVBfRF9PTjsKKworCWNzQVBfTl9PTiArPSBDUFdMX1V0aWxzOjpHZXRSYWRpb0J1dHRvbkFwcFN0cmVhbShyY0NsaWVudCxuU3R5bGUsY3JUZXh0KTsKKwljc0FQX0RfT04gKz0gQ1BXTF9VdGlsczo6R2V0UmFkaW9CdXR0b25BcHBTdHJlYW0ocmNDbGllbnQsblN0eWxlLGNyVGV4dCk7CisKKwlXcml0ZUFwcGVhcmFuY2UoIk4iLCBHZXRSb3RhdGVkUmVjdCgpLCBHZXRNYXRyaXgoKSwgY3NBUF9OX09OLCBwQ29udHJvbC0+R2V0Q2hlY2tlZEFQU3RhdGUoKSk7CisJV3JpdGVBcHBlYXJhbmNlKCJOIiwgR2V0Um90YXRlZFJlY3QoKSwgR2V0TWF0cml4KCksIGNzQVBfTl9PRkYsICJPZmYiKTsKKworCVdyaXRlQXBwZWFyYW5jZSgiRCIsIEdldFJvdGF0ZWRSZWN0KCksIEdldE1hdHJpeCgpLCBjc0FQX0RfT04sIHBDb250cm9sLT5HZXRDaGVja2VkQVBTdGF0ZSgpKTsKKwlXcml0ZUFwcGVhcmFuY2UoIkQiLCBHZXRSb3RhdGVkUmVjdCgpLCBHZXRNYXRyaXgoKSwgY3NBUF9EX09GRiwgIk9mZiIpOworCisJQ0ZYX0J5dGVTdHJpbmcgY3NBUyA9IEdldEFwcFN0YXRlKCk7CisJaWYgKGNzQVMuSXNFbXB0eSgpKQorCQlTZXRBcHBTdGF0ZSgiT2ZmIik7Cit9CisKK3ZvaWQgQ1BERlNES19XaWRnZXQ6OlJlc2V0QXBwZWFyYW5jZV9Db21ib0JveChGWF9MUENXU1RSIHNWYWx1ZSkKK3sKKwlDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCA9IEdldEZvcm1Db250cm9sKCk7CisJQVNTRVJUKHBDb250cm9sICE9IE5VTEwpOworCUNQREZfRm9ybUZpZWxkKiBwRmllbGQgPSBwQ29udHJvbC0+R2V0RmllbGQoKTsKKwlBU1NFUlQocEZpZWxkICE9IE5VTEwpOworCisJQ0ZYX0J5dGVUZXh0QnVmIHNCb2R5LCBzTGluZXM7CisKKwlDUERGX1JlY3QgcmNDbGllbnQgPSBHZXRDbGllbnRSZWN0KCk7CisJQ1BERl9SZWN0IHJjQnV0dG9uID0gcmNDbGllbnQ7CisJcmNCdXR0b24ubGVmdCA9IHJjQnV0dG9uLnJpZ2h0IC0gMTM7CisJcmNCdXR0b24uTm9ybWFsaXplKCk7CisKKwlpZiAoSUZYX0VkaXQgKiBwRWRpdCA9IElGWF9FZGl0OjpOZXdFZGl0KCkpCisJeworCQlwRWRpdC0+RW5hYmxlUmVmcmVzaChGQUxTRSk7CisKKwkJQVNTRVJUKHRoaXMtPm1fcEludGVyRm9ybSAhPSBOVUxMKTsKKwkJQ1BERlNES19Eb2N1bWVudCogcERvYyA9IG1fcEludGVyRm9ybS0+R2V0RG9jdW1lbnQoKTsKKwkJQVNTRVJUKHBEb2MgIT0gTlVMTCk7CisJCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBwRG9jLT5HZXRFbnYoKTsKKwkJQ0JBX0ZvbnRNYXAgRm9udE1hcCh0aGlzLHBFbnYtPkdldFN5c0hhbmRsZXIoKSk7CisJCUZvbnRNYXAuSW5pdGlhbCgpOworCQlwRWRpdC0+U2V0Rm9udE1hcCgmRm9udE1hcCk7CisKKwkJQ1BERl9SZWN0IHJjRWRpdCA9IHJjQ2xpZW50OworCQlyY0VkaXQucmlnaHQgPSByY0J1dHRvbi5sZWZ0OworCQlyY0VkaXQuTm9ybWFsaXplKCk7CisJCQorCQlwRWRpdC0+U2V0UGxhdGVSZWN0KHJjRWRpdCk7CisJCXBFZGl0LT5TZXRBbGlnbm1lbnRWKDEpOworCisJCUZYX0ZMT0FUIGZGb250U2l6ZSA9IHRoaXMtPkdldEZvbnRTaXplKCk7CisJCWlmIChJc0Zsb2F0WmVybyhmRm9udFNpemUpKQorCQkJcEVkaXQtPlNldEF1dG9Gb250U2l6ZShUUlVFKTsKKwkJZWxzZQorCQkJcEVkaXQtPlNldEZvbnRTaXplKGZGb250U2l6ZSk7CisJCQorCQlwRWRpdC0+SW5pdGlhbGl6ZSgpOworCQkKKwkJaWYgKHNWYWx1ZSkKKwkJCXBFZGl0LT5TZXRUZXh0KHNWYWx1ZSk7CisJCWVsc2UKKwkJeworCQkJRlhfSU5UMzIgbkN1clNlbCA9IHBGaWVsZC0+R2V0U2VsZWN0ZWRJbmRleCgwKTsKKworCQkJaWYgKG5DdXJTZWwgPCAwKQorCQkJCXBFZGl0LT5TZXRUZXh0KChGWF9MUENXU1RSKXBGaWVsZC0+R2V0VmFsdWUoKSk7CisJCQllbHNlCisJCQkJcEVkaXQtPlNldFRleHQoKEZYX0xQQ1dTVFIpcEZpZWxkLT5HZXRPcHRpb25MYWJlbChuQ3VyU2VsKSk7CisJCX0KKworCQlDUERGX1JlY3QgcmNDb250ZW50ID0gcEVkaXQtPkdldENvbnRlbnRSZWN0KCk7CisKKwkJQ0ZYX0J5dGVTdHJpbmcgc0VkaXQgPSBDUFdMX1V0aWxzOjpHZXRFZGl0QXBwU3RyZWFtKHBFZGl0LENQREZfUG9pbnQoMC4wZiwwLjBmKSk7CisJCWlmIChzRWRpdC5HZXRMZW5ndGgoKSA+IDApCisJCXsKKwkJCXNCb2R5IDw8ICIvVHggQk1DXG4iIDw8ICJxXG4iOworCQkJaWYgKHJjQ29udGVudC5XaWR0aCgpID4gcmNFZGl0LldpZHRoKCkgfHwKKwkJCQlyY0NvbnRlbnQuSGVpZ2h0KCkgPiByY0VkaXQuSGVpZ2h0KCkpCisJCQl7CisJCQkJc0JvZHkgPDwgcmNFZGl0LmxlZnQgPDwgIiAiIDw8IHJjRWRpdC5ib3R0b20gPDwgIiAiIAorCQkJCQk8PCByY0VkaXQuV2lkdGgoKSA8PCAiICIgPDwgcmNFZGl0LkhlaWdodCgpIDw8ICIgcmVcbldcbm5cbiI7CisJCQl9CisKKwkJCUNQV0xfQ29sb3IgY3JUZXh0ID0gR2V0VGV4dFBXTENvbG9yKCk7CQorCQkJc0JvZHkgPDwgIkJUXG4iIDw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKGNyVGV4dCkgPDwgc0VkaXQgPDwgIkVUXG4iIDw8ICJRXG5FTUNcbiI7CisJCX0KKworCQlJRlhfRWRpdDo6RGVsRWRpdChwRWRpdCk7CisJfQorCisJc0JvZHkgPDwgQ1BXTF9VdGlsczo6R2V0RHJvcEJ1dHRvbkFwcFN0cmVhbShyY0J1dHRvbik7CisKKwlDRlhfQnl0ZVN0cmluZyBzQVAgPSBHZXRCYWNrZ3JvdW5kQXBwU3RyZWFtKCkgKyBHZXRCb3JkZXJBcHBTdHJlYW0oKSArIHNMaW5lcy5HZXRCeXRlU3RyaW5nKCkgKyBzQm9keS5HZXRCeXRlU3RyaW5nKCk7CisKKwlXcml0ZUFwcGVhcmFuY2UoIk4iLCBHZXRSb3RhdGVkUmVjdCgpLCBHZXRNYXRyaXgoKSwgc0FQKTsKK30KKwordm9pZCBDUERGU0RLX1dpZGdldDo6UmVzZXRBcHBlYXJhbmNlX0xpc3RCb3goKQoreworCUNQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sID0gR2V0Rm9ybUNvbnRyb2woKTsKKwlBU1NFUlQocENvbnRyb2wgIT0gTlVMTCk7CisJQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCA9IHBDb250cm9sLT5HZXRGaWVsZCgpOworCUFTU0VSVChwRmllbGQgIT0gTlVMTCk7CisKKwlDUERGX1JlY3QgcmNDbGllbnQgPSBHZXRDbGllbnRSZWN0KCk7CisKKwlDRlhfQnl0ZVRleHRCdWYgc0JvZHksIHNMaW5lczsKKworCWlmIChJRlhfRWRpdCAqIHBFZGl0ID0gSUZYX0VkaXQ6Ok5ld0VkaXQoKSkKKwl7CisJCXBFZGl0LT5FbmFibGVSZWZyZXNoKEZBTFNFKTsKKworLy8JCUFTU0VSVCh0aGlzLT5tX3BCYXNlRm9ybSAhPSBOVUxMKTsKKwkJQVNTRVJUKHRoaXMtPm1fcEludGVyRm9ybSAhPSBOVUxMKTsKKwkJQ1BERlNES19Eb2N1bWVudCogcERvYyA9IG1fcEludGVyRm9ybS0+R2V0RG9jdW1lbnQoKTsKKwkJQVNTRVJUKHBEb2MgIT0gTlVMTCk7CisJCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBwRG9jLT5HZXRFbnYoKTsKKworCQlDQkFfRm9udE1hcCBGb250TWFwKHRoaXMscEVudi0+R2V0U3lzSGFuZGxlcigpKTsKKwkJRm9udE1hcC5Jbml0aWFsKCk7CisJCXBFZGl0LT5TZXRGb250TWFwKCZGb250TWFwKTsKKworCQlwRWRpdC0+U2V0UGxhdGVSZWN0KENQREZfUmVjdChyY0NsaWVudC5sZWZ0LDAuMGYscmNDbGllbnQucmlnaHQsMC4wZikpOwkKKwkJCisJCUZYX0ZMT0FUIGZGb250U2l6ZSA9IEdldEZvbnRTaXplKCk7CisKKwkJaWYgKElzRmxvYXRaZXJvKGZGb250U2l6ZSkpCisJCQlwRWRpdC0+U2V0Rm9udFNpemUoMTIuMGYpOworCQllbHNlCisJCQlwRWRpdC0+U2V0Rm9udFNpemUoZkZvbnRTaXplKTsKKwkJCisJCXBFZGl0LT5Jbml0aWFsaXplKCk7CisKKwkJQ0ZYX0J5dGVUZXh0QnVmIHNMaXN0OworCQlGWF9GTE9BVCBmeSA9IHJjQ2xpZW50LnRvcDsKKworCQlGWF9JTlQzMiBuVG9wID0gcEZpZWxkLT5HZXRUb3BWaXNpYmxlSW5kZXgoKTsKKwkJRlhfSU5UMzIgbkNvdW50ID0gcEZpZWxkLT5Db3VudE9wdGlvbnMoKTsKKwkJRlhfSU5UMzIgblNlbENvdW50ID0gcEZpZWxkLT5Db3VudFNlbGVjdGVkSXRlbXMoKTsKKworCQlmb3IgKEZYX0lOVDMyIGk9blRvcDsgaTxuQ291bnQ7IGkrKykKKwkJeworCQkJRlhfQk9PTCBiU2VsZWN0ZWQgPSBGQUxTRTsJCQkJCisJCQlmb3IgKEZYX0lOVDMyIGo9MDsgajxuU2VsQ291bnQ7IGorKykKKwkJCXsKKwkJCQlpZiAocEZpZWxkLT5HZXRTZWxlY3RlZEluZGV4KGopID09IGkpCisJCQkJeworCQkJCQliU2VsZWN0ZWQgPSBUUlVFOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisKKwkJCXBFZGl0LT5TZXRUZXh0KChGWF9MUENXU1RSKXBGaWVsZC0+R2V0T3B0aW9uTGFiZWwoaSkpOworCisJCQlDUERGX1JlY3QgcmNDb250ZW50ID0gcEVkaXQtPkdldENvbnRlbnRSZWN0KCk7CisJCQlGWF9GTE9BVCBmSXRlbUhlaWdodCA9IHJjQ29udGVudC5IZWlnaHQoKTsKKworCQkJaWYgKGJTZWxlY3RlZCkKKwkJCXsKKwkJCQlDUERGX1JlY3QgcmNJdGVtID0gQ1BERl9SZWN0KHJjQ2xpZW50LmxlZnQsZnktZkl0ZW1IZWlnaHQscmNDbGllbnQucmlnaHQsZnkpOworCQkJCXNMaXN0IDw8ICJxXG4iIDw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKENQV0xfQ29sb3IoQ09MT1JUWVBFX1JHQiwwLDUxLjBmLzI1NS4wZiwxMTMuMGYvMjU1LjBmKSxUUlVFKQorCQkJCQk8PCByY0l0ZW0ubGVmdCA8PCAiICIgPDwgcmNJdGVtLmJvdHRvbSA8PCAiICIgPDwgcmNJdGVtLldpZHRoKCkgPDwgIiAiIDw8IHJjSXRlbS5IZWlnaHQoKSA8PCAiIHJlIGZcbiIgPDwgIlFcbiI7CisKKwkJCQlzTGlzdCA8PCAiQlRcbiIgPDwgQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwxKSxUUlVFKSA8PCAKKwkJCQkJQ1BXTF9VdGlsczo6R2V0RWRpdEFwcFN0cmVhbShwRWRpdCxDUERGX1BvaW50KDAuMGYsZnkpKSA8PCAiRVRcbiI7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJQ1BXTF9Db2xvciBjclRleHQgPSBHZXRUZXh0UFdMQ29sb3IoKTsKKwkJCQlzTGlzdCA8PCAiQlRcbiIgPDwgQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oY3JUZXh0LFRSVUUpIDw8IAorCQkJCUNQV0xfVXRpbHM6OkdldEVkaXRBcHBTdHJlYW0ocEVkaXQsQ1BERl9Qb2ludCgwLjBmLGZ5KSkgPDwgIkVUXG4iOworCQkJfQorCisJCQlmeSAtPSBmSXRlbUhlaWdodDsKKwkJfQorCQkJCQkKKwkJaWYgKHNMaXN0LkdldFNpemUoKSA+IDApCisJCXsKKwkJCXNCb2R5IDw8ICIvVHggQk1DXG4iIDw8ICJxXG4iIDw8IHJjQ2xpZW50LmxlZnQgPDwgIiAiIDw8IHJjQ2xpZW50LmJvdHRvbSA8PCAiICIgCisJCQkJCTw8IHJjQ2xpZW50LldpZHRoKCkgPDwgIiAiIDw8IHJjQ2xpZW50LkhlaWdodCgpIDw8ICIgcmVcbldcbm5cbiI7CisJCQlzQm9keSA8PCBzTGlzdCA8PCAiUVxuRU1DXG4iOworCQl9CisKKwkJSUZYX0VkaXQ6OkRlbEVkaXQocEVkaXQpOworCX0KKworCUNGWF9CeXRlU3RyaW5nIHNBUCA9IEdldEJhY2tncm91bmRBcHBTdHJlYW0oKSArIEdldEJvcmRlckFwcFN0cmVhbSgpICsgc0xpbmVzLkdldEJ5dGVTdHJpbmcoKSArIHNCb2R5LkdldEJ5dGVTdHJpbmcoKTsKKworCVdyaXRlQXBwZWFyYW5jZSgiTiIsIEdldFJvdGF0ZWRSZWN0KCksIEdldE1hdHJpeCgpLCBzQVApOworfQorCit2b2lkIENQREZTREtfV2lkZ2V0OjpSZXNldEFwcGVhcmFuY2VfVGV4dEZpZWxkKEZYX0xQQ1dTVFIgc1ZhbHVlKQoreworCUNQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sID0gR2V0Rm9ybUNvbnRyb2woKTsKKwlBU1NFUlQocENvbnRyb2wgIT0gTlVMTCk7CisJQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCA9IHBDb250cm9sLT5HZXRGaWVsZCgpOworCUFTU0VSVChwRmllbGQgIT0gTlVMTCk7CisKKwlDRlhfQnl0ZVRleHRCdWYgc0JvZHksIHNMaW5lczsKKwkKKwlpZiAoSUZYX0VkaXQgKiBwRWRpdCA9IElGWF9FZGl0OjpOZXdFZGl0KCkpCisJeworCQlwRWRpdC0+RW5hYmxlUmVmcmVzaChGQUxTRSk7CisKKy8vCQlBU1NFUlQodGhpcy0+bV9wQmFzZUZvcm0gIT0gTlVMTCk7CisJCUFTU0VSVCh0aGlzLT5tX3BJbnRlckZvcm0gIT0gTlVMTCk7CisJCUNQREZTREtfRG9jdW1lbnQqIHBEb2MgPSBtX3BJbnRlckZvcm0tPkdldERvY3VtZW50KCk7CisJCUFTU0VSVChwRG9jICE9IE5VTEwpOworCQlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gcERvYy0+R2V0RW52KCk7CisKKwkJQ0JBX0ZvbnRNYXAgRm9udE1hcCh0aGlzLHBFbnYtPkdldFN5c0hhbmRsZXIoKSk7Ly8sIElTeXN0ZW1IYW5kbGU6OkdldFN5c3RlbUhhbmRsZXIobV9wQmFzZUZvcm0tPkdldEVudigpKSk7CisJCUZvbnRNYXAuSW5pdGlhbCgpOworCQlwRWRpdC0+U2V0Rm9udE1hcCgmRm9udE1hcCk7CisKKwkJQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOworCQlwRWRpdC0+U2V0UGxhdGVSZWN0KHJjQ2xpZW50KTsKKwkJcEVkaXQtPlNldEFsaWdubWVudEgocENvbnRyb2wtPkdldENvbnRyb2xBbGlnbm1lbnQoKSk7CisJCQorCQlGWF9EV09SRCBkd0ZpZWxkRmxhZ3MgPSBwRmllbGQtPkdldEZpZWxkRmxhZ3MoKTsKKwkJRlhfQk9PTCBiTXVsdGlMaW5lID0gKGR3RmllbGRGbGFncyA+PiAxMikgJiAxOworCisJCWlmIChiTXVsdGlMaW5lKQorCQl7CisJCQlwRWRpdC0+U2V0TXVsdGlMaW5lKFRSVUUpOworCQkJcEVkaXQtPlNldEF1dG9SZXR1cm4oVFJVRSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwRWRpdC0+U2V0QWxpZ25tZW50VigxKTsKKwkJfQorCisJCUZYX1dPUkQgc3ViV29yZCA9IDA7CisJCWlmICgoZHdGaWVsZEZsYWdzID4+IDEzKSAmIDEpCisJCXsKKwkJCXN1YldvcmQgPSAnKic7CisJCQlwRWRpdC0+U2V0UGFzc3dvcmRDaGFyKHN1YldvcmQpOworCQl9CisKKwkJaW50IG5NYXhMZW4gPSBwRmllbGQtPkdldE1heExlbigpOworCQlGWF9CT09MIGJDaGFyQXJyYXkgPSAoZHdGaWVsZEZsYWdzID4+IDI0KSAmIDE7CisJCUZYX0ZMT0FUIGZGb250U2l6ZSA9IEdldEZvbnRTaXplKCk7CQorCisJCWlmIChuTWF4TGVuID4gMCkKKwkJeworCQkJaWYgKGJDaGFyQXJyYXkpCisJCQl7CisJCQkJcEVkaXQtPlNldENoYXJBcnJheShuTWF4TGVuKTsKKworCQkJCWlmIChJc0Zsb2F0WmVybyhmRm9udFNpemUpKQorCQkJCXsKKwkJCQkJZkZvbnRTaXplID0gQ1BXTF9FZGl0OjpHZXRDaGFyQXJyYXlBdXRvRm9udFNpemUoRm9udE1hcC5HZXRQREZGb250KDApLHJjQ2xpZW50LG5NYXhMZW4pOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAoc1ZhbHVlKQorCQkJCQluTWF4TGVuID0gd2NzbGVuKChjb25zdCB3Y2hhcl90KilzVmFsdWUpOyAKKwkJCQlwRWRpdC0+U2V0TGltaXRDaGFyKG5NYXhMZW4pOworCQkJfQorCQl9CisKKwkJaWYgKElzRmxvYXRaZXJvKGZGb250U2l6ZSkpCisJCQlwRWRpdC0+U2V0QXV0b0ZvbnRTaXplKFRSVUUpOworCQllbHNlCisJCQlwRWRpdC0+U2V0Rm9udFNpemUoZkZvbnRTaXplKTsKKworCQlwRWRpdC0+SW5pdGlhbGl6ZSgpOworCQkKKwkJaWYgKHNWYWx1ZSkKKwkJCXBFZGl0LT5TZXRUZXh0KHNWYWx1ZSk7CisJCWVsc2UKKwkJCXBFZGl0LT5TZXRUZXh0KChGWF9MUENXU1RSKXBGaWVsZC0+R2V0VmFsdWUoKSk7CisKKwkJQ1BERl9SZWN0IHJjQ29udGVudCA9IHBFZGl0LT5HZXRDb250ZW50UmVjdCgpOworCisJCUNGWF9CeXRlU3RyaW5nIHNFZGl0ID0gQ1BXTF9VdGlsczo6R2V0RWRpdEFwcFN0cmVhbShwRWRpdCxDUERGX1BvaW50KDAuMGYsMC4wZiksCisJCQkJCQkJCQkJCQkJCQkJCU5VTEwsIWJDaGFyQXJyYXksc3ViV29yZCk7CisKKwkJaWYgKHNFZGl0LkdldExlbmd0aCgpID4gMCkKKwkJeworCQkJc0JvZHkgPDwgIi9UeCBCTUNcbiIgPDwgInFcbiI7CisJCQlpZiAocmNDb250ZW50LldpZHRoKCkgPiByY0NsaWVudC5XaWR0aCgpIHx8CisJCQkJcmNDb250ZW50LkhlaWdodCgpID4gcmNDbGllbnQuSGVpZ2h0KCkpCisJCQl7CisJCQkJc0JvZHkgPDwgcmNDbGllbnQubGVmdCA8PCAiICIgPDwgcmNDbGllbnQuYm90dG9tIDw8ICIgIiAKKwkJCQkJPDwgcmNDbGllbnQuV2lkdGgoKSA8PCAiICIgPDwgcmNDbGllbnQuSGVpZ2h0KCkgPDwgIiByZVxuV1xublxuIjsKKwkJCX0KKwkJCUNQV0xfQ29sb3IgY3JUZXh0ID0gR2V0VGV4dFBXTENvbG9yKCk7CQorCQkJc0JvZHkgPDwgIkJUXG4iIDw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKGNyVGV4dCkgPDwgc0VkaXQgPDwgIkVUXG4iIDw8ICJRXG5FTUNcbiI7CisJCX0KKworCQlpZiAoYkNoYXJBcnJheSkKKwkJeworCQkJc3dpdGNoIChHZXRCb3JkZXJTdHlsZSgpKQorCQkJeworCQkJY2FzZSBCQlNfU09MSUQ6CisJCQkJeworCQkJCQlDRlhfQnl0ZVN0cmluZyBzQ29sb3IgPSBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShHZXRCb3JkZXJQV0xDb2xvcigpLEZBTFNFKTsKKwkJCQkJaWYgKHNDb2xvci5HZXRMZW5ndGgoKSA+IDApCisJCQkJCXsKKwkJCQkJCXNMaW5lcyA8PCAicVxuIiA8PCBHZXRCb3JkZXJXaWR0aCgpIDw8ICIgd1xuIiAKKwkJCQkJCQk8PCBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShHZXRCb3JkZXJQV0xDb2xvcigpLEZBTFNFKSA8PCAiIDIgSiAwIGpcbiI7CQkJCQkKKworCQkJCQkJZm9yIChGWF9JTlQzMiBpPTE7aTxuTWF4TGVuO2krKykKKwkJCQkJCXsKKwkJCQkJCQlzTGluZXMgPDwgcmNDbGllbnQubGVmdCArICgocmNDbGllbnQucmlnaHQgLSByY0NsaWVudC5sZWZ0KS9uTWF4TGVuKSppIDw8ICIgIgorCQkJCQkJCQk8PCByY0NsaWVudC5ib3R0b20gPDwgIiBtXG4iCisJCQkJCQkJCTw8IHJjQ2xpZW50LmxlZnQgKyAoKHJjQ2xpZW50LnJpZ2h0IC0gcmNDbGllbnQubGVmdCkvbk1heExlbikqaSA8PCAiICIKKwkJCQkJCQkJPDwgcmNDbGllbnQudG9wIDw8ICIgbCBTXG4iOwkJCQkJCQorCQkJCQkJfQorCisJCQkJCQlzTGluZXMgPDwgIlFcbiI7CQkKKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgQkJTX0RBU0g6CisJCQkJeworCQkJCQlDRlhfQnl0ZVN0cmluZyBzQ29sb3IgPSBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShHZXRCb3JkZXJQV0xDb2xvcigpLEZBTFNFKTsKKwkJCQkJaWYgKHNDb2xvci5HZXRMZW5ndGgoKSA+IDApCisJCQkJCXsKKwkJCQkJCUNQV0xfRGFzaCBkc0JvcmRlciA9IENQV0xfRGFzaCgzLCAzLCAwKTsKKworCQkJCQkJc0xpbmVzIDw8ICJxXG4iIDw8IEdldEJvcmRlcldpZHRoKCkgPDwgIiB3XG4iIAorCQkJCQkJCTw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKEdldEJvcmRlclBXTENvbG9yKCksRkFMU0UpCisJCQkJCQkJPDwgIlsiIDw8IGRzQm9yZGVyLm5EYXNoIDw8ICIgIiAKKwkJCQkJCQk8PCBkc0JvcmRlci5uR2FwIDw8ICJdICIgCisJCQkJCQkJPDwgZHNCb3JkZXIublBoYXNlIDw8ICIgZFxuIjsKKworCQkJCQkJZm9yIChGWF9JTlQzMiBpPTE7aTxuTWF4TGVuO2krKykJCQkJCQorCQkJCQkJeworCQkJCQkJCXNMaW5lcyA8PCByY0NsaWVudC5sZWZ0ICsgKChyY0NsaWVudC5yaWdodCAtIHJjQ2xpZW50LmxlZnQpL25NYXhMZW4pKmkgPDwgIiAiCisJCQkJCQkJCTw8IHJjQ2xpZW50LmJvdHRvbSA8PCAiIG1cbiIKKwkJCQkJCQkJPDwgcmNDbGllbnQubGVmdCArICgocmNDbGllbnQucmlnaHQgLSByY0NsaWVudC5sZWZ0KS9uTWF4TGVuKSppIDw8ICIgIgorCQkJCQkJCQk8PCByY0NsaWVudC50b3AgPDwgIiBsIFNcbiI7CQorCQkJCQkJfQorCisJCQkJCQlzTGluZXMgPDwgIlFcbiI7CisJCQkJCX0KKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlJRlhfRWRpdDo6RGVsRWRpdChwRWRpdCk7CisJfQorCisJQ0ZYX0J5dGVTdHJpbmcgc0FQID0gR2V0QmFja2dyb3VuZEFwcFN0cmVhbSgpICsgR2V0Qm9yZGVyQXBwU3RyZWFtKCkgKyBzTGluZXMuR2V0Qnl0ZVN0cmluZygpICsgc0JvZHkuR2V0Qnl0ZVN0cmluZygpOworCVdyaXRlQXBwZWFyYW5jZSgiTiIsIEdldFJvdGF0ZWRSZWN0KCksIEdldE1hdHJpeCgpLCBzQVApOworfQorCitDUERGX1JlY3QgQ1BERlNES19XaWRnZXQ6OkdldENsaWVudFJlY3QoKSBjb25zdAoreworCUNQREZfUmVjdCByY1dpbmRvdyA9IEdldFJvdGF0ZWRSZWN0KCk7CisJRlhfRkxPQVQgZkJvcmRlcldpZHRoID0gKEZYX0ZMT0FUKUdldEJvcmRlcldpZHRoKCk7CisJc3dpdGNoIChHZXRCb3JkZXJTdHlsZSgpKQorCXsKKwljYXNlIEJCU19CRVZFTEVEOgorCWNhc2UgQkJTX0lOU0VUOgorCQlmQm9yZGVyV2lkdGggKj0gMi4wZjsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KHJjV2luZG93LCBmQm9yZGVyV2lkdGgpOworfQorCitDUERGX1JlY3QgQ1BERlNES19XaWRnZXQ6OkdldFJvdGF0ZWRSZWN0KCkgY29uc3QKK3sKKwlDUERGX1JlY3QgcmVjdEFubm90ID0gR2V0UmVjdCgpOworCUZYX0ZMT0FUIGZXaWR0aCA9IHJlY3RBbm5vdC5yaWdodCAtIHJlY3RBbm5vdC5sZWZ0OworCUZYX0ZMT0FUIGZIZWlnaHQgPSByZWN0QW5ub3QudG9wIC0gcmVjdEFubm90LmJvdHRvbTsKKworCUNQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sID0gR2V0Rm9ybUNvbnRyb2woKTsKKwlBU1NFUlQocENvbnRyb2wgIT0gTlVMTCk7CisKKwlDUERGX1JlY3QgcmNQREZXaW5kb3c7CisJc3dpdGNoKGFicyhwQ29udHJvbC0+R2V0Um90YXRpb24oKSAlIDM2MCkpCisJeworCQljYXNlIDA6CisJCWNhc2UgMTgwOgorCQlkZWZhdWx0OgorCQkJcmNQREZXaW5kb3cgPSBDUERGX1JlY3QoMCwgMCwgZldpZHRoLCBmSGVpZ2h0KTsJCisJCQlicmVhazsKKwkJY2FzZSA5MDoKKwkJY2FzZSAyNzA6CisJCQlyY1BERldpbmRvdyA9IENQREZfUmVjdCgwLCAwLCBmSGVpZ2h0LCBmV2lkdGgpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJjUERGV2luZG93OworfQorCitDRlhfQnl0ZVN0cmluZyBDUERGU0RLX1dpZGdldDo6R2V0QmFja2dyb3VuZEFwcFN0cmVhbSgpIGNvbnN0Cit7CisJQ1BXTF9Db2xvciBjckJhY2tncm91bmQgPSBHZXRGaWxsUFdMQ29sb3IoKTsKKwlpZiAoY3JCYWNrZ3JvdW5kLm5Db2xvclR5cGUgIT0gQ09MT1JUWVBFX1RSQU5TUEFSRU5UKQorCQlyZXR1cm4gQ1BXTF9VdGlsczo6R2V0UmVjdEZpbGxBcHBTdHJlYW0oR2V0Um90YXRlZFJlY3QoKSwgY3JCYWNrZ3JvdW5kKTsKKwllbHNlCisJCXJldHVybiAiIjsKK30KKworQ0ZYX0J5dGVTdHJpbmcgQ1BERlNES19XaWRnZXQ6OkdldEJvcmRlckFwcFN0cmVhbSgpIGNvbnN0Cit7CisJQ1BERl9SZWN0IHJjV2luZG93ID0gR2V0Um90YXRlZFJlY3QoKTsKKwlDUFdMX0NvbG9yIGNyQm9yZGVyID0gR2V0Qm9yZGVyUFdMQ29sb3IoKTsKKwlDUFdMX0NvbG9yIGNyQmFja2dyb3VuZCA9IEdldEZpbGxQV0xDb2xvcigpOworCUNQV0xfQ29sb3IgY3JMZWZ0VG9wLCBjclJpZ2h0Qm90dG9tOworCisJRlhfRkxPQVQgZkJvcmRlcldpZHRoID0gKEZYX0ZMT0FUKUdldEJvcmRlcldpZHRoKCk7CisJRlhfSU5UMzIgbkJvcmRlclN0eWxlID0gMDsKKwlDUFdMX0Rhc2ggZHNCb3JkZXIoMywwLDApOworCisJc3dpdGNoIChHZXRCb3JkZXJTdHlsZSgpKQorCXsKKwljYXNlIEJCU19EQVNIOgorCQluQm9yZGVyU3R5bGUgPSBQQlNfREFTSDsKKwkJZHNCb3JkZXIgPSBDUFdMX0Rhc2goMywgMywgMCk7CisJCWJyZWFrOworCWNhc2UgQkJTX0JFVkVMRUQ6CisJCW5Cb3JkZXJTdHlsZSA9IFBCU19CRVZFTEVEOworCQlmQm9yZGVyV2lkdGggKj0gMjsKKwkJY3JMZWZ0VG9wID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwgMSk7CisJCWNyUmlnaHRCb3R0b20gPSBDUFdMX1V0aWxzOjpEZXZpZGVDb2xvcihjckJhY2tncm91bmQsIDIpOworCQlicmVhazsKKwljYXNlIEJCU19JTlNFVDoKKwkJbkJvcmRlclN0eWxlID0gUEJTX0lOU0VUOworCQlmQm9yZGVyV2lkdGggKj0gMjsKKwkJY3JMZWZ0VG9wID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwgMC41KTsKKwkJY3JSaWdodEJvdHRvbSA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksIDAuNzUpOworCQlicmVhazsKKwljYXNlIEJCU19VTkRFUkxJTkU6CisJCW5Cb3JkZXJTdHlsZSA9IFBCU19VTkRFUkxJTkVEOworCQlicmVhazsKKwlkZWZhdWx0OiAKKwkJbkJvcmRlclN0eWxlID0gUEJTX1NPTElEOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gQ1BXTF9VdGlsczo6R2V0Qm9yZGVyQXBwU3RyZWFtKHJjV2luZG93LCBmQm9yZGVyV2lkdGgsIGNyQm9yZGVyLCBjckxlZnRUb3AsIAorCQljclJpZ2h0Qm90dG9tLCBuQm9yZGVyU3R5bGUsIGRzQm9yZGVyKTsKK30KKworQ1BERl9NYXRyaXggQ1BERlNES19XaWRnZXQ6OkdldE1hdHJpeCgpIGNvbnN0Cit7CisJQ1BERl9NYXRyaXggbXQ7CisJQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2wgPSBHZXRGb3JtQ29udHJvbCgpOworCUFTU0VSVChwQ29udHJvbCAhPSBOVUxMKTsKKworCUNQREZfUmVjdCByY0Fubm90ID0gR2V0UmVjdCgpOworCUZYX0ZMT0FUIGZXaWR0aCA9IHJjQW5ub3QucmlnaHQgLSByY0Fubm90LmxlZnQ7CisJRlhfRkxPQVQgZkhlaWdodCA9IHJjQW5ub3QudG9wIC0gcmNBbm5vdC5ib3R0b207CisJCisKKworCXN3aXRjaCAoYWJzKHBDb250cm9sLT5HZXRSb3RhdGlvbigpICUgMzYwKSkKKwl7CisJCWNhc2UgMDoKKwkJZGVmYXVsdDoKKwkJCW10ID0gQ1BERl9NYXRyaXgoMSwgMCwgMCwgMSwgMCwgMCk7CisJCQlicmVhazsKKwkJY2FzZSA5MDoKKwkJCW10ID0gQ1BERl9NYXRyaXgoMCwgMSwgLTEsIDAsIGZXaWR0aCwgMCk7CisJCQlicmVhazsKKwkJY2FzZSAxODA6CisJCQltdCA9IENQREZfTWF0cml4KC0xLCAwLCAwLCAtMSwgZldpZHRoLCBmSGVpZ2h0KTsKKwkJCWJyZWFrOworCQljYXNlIDI3MDoKKwkJCW10ID0gQ1BERl9NYXRyaXgoMCwgLTEsIDEsIDAsIDAsIGZIZWlnaHQpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIG10OworfQorCitDUFdMX0NvbG9yIENQREZTREtfV2lkZ2V0OjpHZXRUZXh0UFdMQ29sb3IoKSBjb25zdAoreworCUNQV0xfQ29sb3IgY3JUZXh0ID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwgMCk7CisKKwlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUN0cmwgPSBHZXRGb3JtQ29udHJvbCgpOworCUFTU0VSVChwRm9ybUN0cmwgIT0gTlVMTCk7CisKKwlDUERGX0RlZmF1bHRBcHBlYXJhbmNlIGRhID0gcEZvcm1DdHJsLT5HZXREZWZhdWx0QXBwZWFyYW5jZSgpOworCWlmIChkYS5IYXNDb2xvcigpKQorCXsKKwkJRlhfSU5UMzIgaUNvbG9yVHlwZTsKKwkJRlhfRkxPQVQgZmNbNF07CisJCWRhLkdldENvbG9yKGlDb2xvclR5cGUsIGZjKTsKKwkJY3JUZXh0ID0gQ1BXTF9Db2xvcihpQ29sb3JUeXBlLCBmY1swXSwgZmNbMV0sIGZjWzJdLCBmY1szXSk7CisJfQorCisJcmV0dXJuIGNyVGV4dDsKK30KKworQ1BXTF9Db2xvciBDUERGU0RLX1dpZGdldDo6R2V0Qm9yZGVyUFdMQ29sb3IoKSBjb25zdAoreworCUNQV0xfQ29sb3IgY3JCb3JkZXI7CisKKwlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUN0cmwgPSBHZXRGb3JtQ29udHJvbCgpOworCUFTU0VSVChwRm9ybUN0cmwgIT0gTlVMTCk7CisKKwlGWF9JTlQzMiBpQ29sb3JUeXBlOworCUZYX0ZMT0FUIGZjWzRdOworCXBGb3JtQ3RybC0+R2V0T3JpZ2luYWxCb3JkZXJDb2xvcihpQ29sb3JUeXBlLCBmYyk7CisJaWYgKGlDb2xvclR5cGUgPiAwKQorCQljckJvcmRlciA9IENQV0xfQ29sb3IoaUNvbG9yVHlwZSwgZmNbMF0sIGZjWzFdLCBmY1syXSwgZmNbM10pOworCisJcmV0dXJuIGNyQm9yZGVyOworfQorCitDUFdMX0NvbG9yIENQREZTREtfV2lkZ2V0OjpHZXRGaWxsUFdMQ29sb3IoKSBjb25zdAoreworCUNQV0xfQ29sb3IgY3JGaWxsOworCisJQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1DdHJsID0gR2V0Rm9ybUNvbnRyb2woKTsKKwlBU1NFUlQocEZvcm1DdHJsICE9IE5VTEwpOworCisJRlhfSU5UMzIgaUNvbG9yVHlwZTsKKwlGWF9GTE9BVCBmY1s0XTsKKwlwRm9ybUN0cmwtPkdldE9yaWdpbmFsQmFja2dyb3VuZENvbG9yKGlDb2xvclR5cGUsIGZjKTsKKwlpZiAoaUNvbG9yVHlwZSA+IDApCisJCWNyRmlsbCA9IENQV0xfQ29sb3IoaUNvbG9yVHlwZSwgZmNbMF0sIGZjWzFdLCBmY1syXSwgZmNbM10pOworCisJcmV0dXJuIGNyRmlsbDsKK30KKwordm9pZCBDUERGU0RLX1dpZGdldDo6QWRkSW1hZ2VUb0FwcGVhcmFuY2UoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNBUFR5cGUsIENQREZfU3RyZWFtKiBwSW1hZ2UpCit7CisJQVNTRVJUKHBJbWFnZSAhPSBOVUxMKTsKKworCUFTU0VSVChtX3BBbm5vdCAhPSBOVUxMKTsKKwlBU1NFUlQobV9wQW5ub3QtPm1fcEFubm90RGljdCAhPSBOVUxMKTsKKworCUNQREZfRG9jdW1lbnQqIHBEb2MgPSBtX3BQYWdlVmlldy0+R2V0UERGRG9jdW1lbnQoKTsvL3BEb2N1bWVudC0+R2V0RG9jdW1lbnQoKTsKKwlBU1NFUlQocERvYyAhPSBOVUxMKTsKKworCUNQREZfRGljdGlvbmFyeSogcEFQRGljdCA9IG1fcEFubm90LT5tX3BBbm5vdERpY3QtPkdldERpY3QoIkFQIik7CisJQVNTRVJUKHBBUERpY3QgIT0gTlVMTCk7CisKKwlDUERGX1N0cmVhbSogcFN0cmVhbSA9IHBBUERpY3QtPkdldFN0cmVhbShzQVBUeXBlKTsKKwlBU1NFUlQocFN0cmVhbSAhPSBOVUxMKTsKKworCUNQREZfRGljdGlvbmFyeSogcFN0cmVhbURpY3QgPSBwU3RyZWFtLT5HZXREaWN0KCk7CisJQVNTRVJUKHBTdHJlYW1EaWN0ICE9IE5VTEwpOworCisJQ0ZYX0J5dGVTdHJpbmcgc0ltYWdlQWxpYXMgPSAiSU1HIjsKKworCWlmIChDUERGX0RpY3Rpb25hcnkqIHBJbWFnZURpY3QgPSBwSW1hZ2UtPkdldERpY3QoKSkKKwl7CisJCXNJbWFnZUFsaWFzID0gcEltYWdlRGljdC0+R2V0U3RyaW5nKCJOYW1lIik7CisJCWlmIChzSW1hZ2VBbGlhcy5Jc0VtcHR5KCkpCisJCQlzSW1hZ2VBbGlhcyA9ICJJTUciOworCX0JCisKKwlDUERGX0RpY3Rpb25hcnkqIHBTdHJlYW1SZXNMaXN0ID0gcFN0cmVhbURpY3QtPkdldERpY3QoIlJlc291cmNlcyIpOworCWlmICghcFN0cmVhbVJlc0xpc3QpCisJeworCQlwU3RyZWFtUmVzTGlzdCA9IEZYX05FVyBDUERGX0RpY3Rpb25hcnkoKTsKKwkJcFN0cmVhbURpY3QtPlNldEF0KCJSZXNvdXJjZXMiLCBwU3RyZWFtUmVzTGlzdCk7CisJfQorCisJaWYgKHBTdHJlYW1SZXNMaXN0KSAKKwl7CisJCUNQREZfRGljdGlvbmFyeSogcFhPYmplY3QgPSBGWF9ORVcgQ1BERl9EaWN0aW9uYXJ5OwkJCQorCQlwWE9iamVjdC0+U2V0QXRSZWZlcmVuY2Uoc0ltYWdlQWxpYXMsIHBEb2MsIHBJbWFnZSk7CisJCXBTdHJlYW1SZXNMaXN0LT5TZXRBdCgiWE9iamVjdCIsIHBYT2JqZWN0KTsKKwl9Cit9CisKK3ZvaWQgQ1BERlNES19XaWRnZXQ6OlJlbW92ZUFwcGVhcmFuY2UoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNBUFR5cGUpCit7CisJQVNTRVJUKG1fcEFubm90ICE9IE5VTEwpOworCUFTU0VSVChtX3BBbm5vdC0+bV9wQW5ub3REaWN0ICE9IE5VTEwpOworCisJaWYgKENQREZfRGljdGlvbmFyeSogcEFQRGljdCA9IG1fcEFubm90LT5tX3BBbm5vdERpY3QtPkdldERpY3QoIkFQIikpCisJeworCQlwQVBEaWN0LT5SZW1vdmVBdChzQVBUeXBlKTsKKwl9Cit9CisKK0ZYX0JPT0wgQ1BERlNES19XaWRnZXQ6Ok9uQUFjdGlvbihDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIHR5cGUsIFBERlNES19GaWVsZEFjdGlvbiYgZGF0YSwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQoreworCUNQREZfQWN0aW9uIGFjdGlvbiA9IEdldEFBY3Rpb24odHlwZSk7CisKKwlpZiAoYWN0aW9uICYmIGFjdGlvbi5HZXRUeXBlKCkgIT0gQ1BERl9BY3Rpb246OlVua25vd24pCisJeworIAkJQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50ID0gcFBhZ2VWaWV3LT5HZXRTREtEb2N1bWVudCgpOworIAkJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsKKyAKKyAJCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBwRG9jdW1lbnQtPkdldEVudigpOworIAkJQVNTRVJUKHBFbnYgIT0gTlVMTCk7CisKKwkJQ1BERlNES19BY3Rpb25IYW5kbGVyKiBwQWN0aW9uSGFuZGxlciA9IHBFbnYtPkdldEFjdGlvbkhhbmRlcigpOy8qKENQREZTREtfQWN0aW9uSGFuZGxlciopcEFwcC0+R2V0QWN0aW9uSGFuZGxlcigpOyovCisgCQlBU1NFUlQocEFjdGlvbkhhbmRsZXIgIT0gTlVMTCk7CisgCisgCQlyZXR1cm4gcEFjdGlvbkhhbmRsZXItPkRvQWN0aW9uX0ZpZWxkKGFjdGlvbiwgdHlwZSwgcERvY3VtZW50LCBHZXRGb3JtRmllbGQoKSwgZGF0YSk7CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCitDUERGX0FjdGlvbglDUERGU0RLX1dpZGdldDo6R2V0QUFjdGlvbihDUERGX0FBY3Rpb246OkFBY3Rpb25UeXBlIGVBQVQpCit7CisJc3dpdGNoIChlQUFUKQorCXsKKwljYXNlIENQREZfQUFjdGlvbjo6Q3Vyc29yRW50ZXI6CisJY2FzZSBDUERGX0FBY3Rpb246OkN1cnNvckV4aXQ6CisJY2FzZSBDUERGX0FBY3Rpb246OkJ1dHRvbkRvd246CisJY2FzZSBDUERGX0FBY3Rpb246OkJ1dHRvblVwOgorCWNhc2UgQ1BERl9BQWN0aW9uOjpHZXRGb2N1czoKKwljYXNlIENQREZfQUFjdGlvbjo6TG9zZUZvY3VzOgorCWNhc2UgQ1BERl9BQWN0aW9uOjpQYWdlT3BlbjoKKwljYXNlIENQREZfQUFjdGlvbjo6UGFnZUNsb3NlOgorCWNhc2UgQ1BERl9BQWN0aW9uOjpQYWdlVmlzaWJsZToKKwljYXNlIENQREZfQUFjdGlvbjo6UGFnZUludmlzaWJsZToKKwkJcmV0dXJuIENQREZTREtfQW5ub3Q6OkdldEFBY3Rpb24oZUFBVCk7CisJY2FzZSBDUERGX0FBY3Rpb246OktleVN0cm9rZToKKwljYXNlIENQREZfQUFjdGlvbjo6Rm9ybWF0OgorCWNhc2UgQ1BERl9BQWN0aW9uOjpWYWxpZGF0ZToKKwljYXNlIENQREZfQUFjdGlvbjo6Q2FsY3VsYXRlOgorCQl7CisJCQlDUERGX0Zvcm1GaWVsZCogcEZpZWxkID0gdGhpcy0+R2V0Rm9ybUZpZWxkKCk7CisJCQlBU1NFUlQocEZpZWxkICE9IE5VTEwpOworCisJCQlpZiAoQ1BERl9BQWN0aW9uIGFhID0gcEZpZWxkLT5HZXRBZGRpdGlvbmFsQWN0aW9uKCkpCisJCQkJcmV0dXJuIGFhLkdldEFjdGlvbihlQUFUKTsKKwkJCWVsc2UgCisJCQkJcmV0dXJuIENQREZTREtfQW5ub3Q6OkdldEFBY3Rpb24oZUFBVCk7CisJCX0KKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworCitDRlhfV2lkZVN0cmluZyBDUERGU0RLX1dpZGdldDo6R2V0QWx0ZXJuYXRlTmFtZSgpIGNvbnN0Cit7CisJQ1BERl9Gb3JtRmllbGQqCXBGb3JtRmllbGQgPSBHZXRGb3JtRmllbGQoKTsKKwlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCXJldHVybiBwRm9ybUZpZWxkLT5HZXRBbHRlcm5hdGVOYW1lKCk7Cit9CisKK0ZYX0lOVDMyCUNQREZTREtfV2lkZ2V0OjpHZXRBcHBlYXJhbmNlQWdlKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9uQXBwQWdlOworfQorCitGWF9JTlQzMiBDUERGU0RLX1dpZGdldDo6R2V0VmFsdWVBZ2UoKSBjb25zdAoreworCXJldHVybiBtX25WYWx1ZUFnZTsKK30KKworCitGWF9CT09MCUNQREZTREtfV2lkZ2V0OjpIaXRUZXN0KEZYX0ZMT0FUIHBhZ2VYLCBGWF9GTE9BVCBwYWdlWSkKK3sKKwlDUERGX0Fubm90KiBwQW5ub3QgPSBHZXRQREZBbm5vdCgpOworCUNGWF9GbG9hdFJlY3QgYW5ub3RSZWN0OworCXBBbm5vdC0+R2V0UmVjdChhbm5vdFJlY3QpOworCWlmKGFubm90UmVjdC5Db250YWlucyhwYWdlWCwgcGFnZVkpKQorCXsKKwkJaWYgKCFJc1Zpc2libGUoKSkgcmV0dXJuIEZBTFNFOworCQkKKwkJaW50IG5GaWVsZEZsYWdzID0gR2V0RmllbGRGbGFncygpOworCQlpZiAoKG5GaWVsZEZsYWdzICYgRklFTERGTEFHX1JFQURPTkxZKSA9PSBGSUVMREZMQUdfUkVBRE9OTFkpIAorCQkJcmV0dXJuIEZBTFNFOworCQkKKwkJcmV0dXJuIFRSVUU7CisJfQorCXJldHVybiBGQUxTRTsKK30KKworQ1BERlNES19JbnRlckZvcm06OkNQREZTREtfSW50ZXJGb3JtKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCkKKwk6bV9wRG9jdW1lbnQocERvY3VtZW50KSwKKwltX3BJbnRlckZvcm0oTlVMTCksCisJbV9iQ2FsY3VsYXRlKFRSVUUpLAorCW1fYkJ1c3koRkFMU0UpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCW1fcEludGVyRm9ybSA9IG5ldyBDUERGX0ludGVyRm9ybShtX3BEb2N1bWVudC0+R2V0RG9jdW1lbnQoKSwgRkFMU0UpOworCUFTU0VSVChtX3BJbnRlckZvcm0gIT0gTlVMTCk7CisJbV9wSW50ZXJGb3JtLT5TZXRGb3JtTm90aWZ5KHRoaXMpOworCisJZm9yKGludCBpPTA7IGk8NjsgaSsrKQorCQltX2JOZWVkSGlnaHRsaWdodFtpXSA9IEZBTFNFOworCW1faUhpZ2hsaWdodEFscGhhID0gMDsKK30KKworQ1BERlNES19JbnRlckZvcm06On5DUERGU0RLX0ludGVyRm9ybSgpCit7CisJQVNTRVJUKG1fcEludGVyRm9ybSAhPSBOVUxMKTsKKwlkZWxldGUgbV9wSW50ZXJGb3JtOworCW1fcEludGVyRm9ybSA9IE5VTEw7CisKKwltX01hcC5SZW1vdmVBbGwoKTsKK30KKwordm9pZCBDUERGU0RLX0ludGVyRm9ybTo6RGVzdHJveSgpCit7CisJZGVsZXRlIHRoaXM7Cit9CisKK0NQREZfSW50ZXJGb3JtKiBDUERGU0RLX0ludGVyRm9ybTo6R2V0SW50ZXJGb3JtKCkKK3sKKwlyZXR1cm4gbV9wSW50ZXJGb3JtOworfQorCitDUERGU0RLX0RvY3VtZW50KiBDUERGU0RLX0ludGVyRm9ybTo6R2V0RG9jdW1lbnQoKQoreworCXJldHVybiBtX3BEb2N1bWVudDsKK30KKworRlhfQk9PTCBDUERGU0RLX0ludGVyRm9ybTo6SGlnaGxpZ2h0V2lkZ2V0cygpCit7CisJcmV0dXJuIEZBTFNFOworfQorCitDUERGU0RLX1dpZGdldCogQ1BERlNES19JbnRlckZvcm06OkdldFNpYmxpbmcoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQsIEZYX0JPT0wgYk5leHQpIGNvbnN0Cit7CisJQVNTRVJUKHBXaWRnZXQgIT0gTlVMTCk7CisKKwlDQkFfQW5ub3RJdGVyYXRvciogcEl0ZXJhdG9yID0gbmV3IENCQV9Bbm5vdEl0ZXJhdG9yKHBXaWRnZXQtPkdldFBhZ2VWaWV3KCksICJXaWRnZXQiLCAiIik7CisJQVNTRVJUKHBJdGVyYXRvciAhPSBOVUxMKTsKKworCUNQREZTREtfV2lkZ2V0KiBwUmV0ID0gTlVMTDsKKworCWlmIChiTmV4dCkKKwkJcFJldCA9IChDUERGU0RLX1dpZGdldCopcEl0ZXJhdG9yLT5HZXROZXh0QW5ub3QocFdpZGdldCk7CisJZWxzZQorCQlwUmV0ID0gKENQREZTREtfV2lkZ2V0KilwSXRlcmF0b3ItPkdldFByZXZBbm5vdChwV2lkZ2V0KTsKKworCXBJdGVyYXRvci0+UmVsZWFzZSgpOworCQorCXJldHVybiBwUmV0OworCit9CisKK0NQREZTREtfV2lkZ2V0KglDUERGU0RLX0ludGVyRm9ybTo6R2V0V2lkZ2V0KENQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sKSBjb25zdAoreworCWlmKCFwQ29udHJvbCB8fCAhbV9wSW50ZXJGb3JtKSByZXR1cm4gTlVMTDsKKwkKKwlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IE5VTEw7CisJbV9NYXAuTG9va3VwKHBDb250cm9sLCBwV2lkZ2V0KTsKKworCWlmIChwV2lkZ2V0KSByZXR1cm4gcFdpZGdldDsKKworCUNQREZfRGljdGlvbmFyeSogcENvbnRyb2xEaWN0ID0gcENvbnRyb2wtPkdldFdpZGdldCgpOworCUFTU0VSVChwQ29udHJvbERpY3QgIT0gTlVMTCk7CisKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisJQ1BERl9Eb2N1bWVudCogcERvY3VtZW50ID0gbV9wRG9jdW1lbnQtPkdldERvY3VtZW50KCk7CisKKwlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZSA9IE5VTEw7CisKKwlpZiAoQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QgPSBwQ29udHJvbERpY3QtPkdldERpY3QoIlAiKSkKKwl7CisJCWludCBuUGFnZUluZGV4ID0gcERvY3VtZW50LT5HZXRQYWdlSW5kZXgocFBhZ2VEaWN0LT5HZXRPYmpOdW0oKSk7CisJCWlmIChuUGFnZUluZGV4ID49IDApCisJCXsKKwkJCXBQYWdlID0gbV9wRG9jdW1lbnQtPkdldFBhZ2VWaWV3KG5QYWdlSW5kZXgpOworCQl9CisJfQorCisJaWYgKCFwUGFnZSkgCisJeworCQlpbnQgblBhZ2VJbmRleCA9IEdldFBhZ2VJbmRleEJ5QW5ub3REaWN0KHBEb2N1bWVudCwgcENvbnRyb2xEaWN0KTsKKwkJaWYgKG5QYWdlSW5kZXggPj0gMCkKKwkJeworCQkJcFBhZ2UgPSBtX3BEb2N1bWVudC0+R2V0UGFnZVZpZXcoblBhZ2VJbmRleCk7CisJCX0KKwl9CisKKwlpZiAocFBhZ2UpCisJCXJldHVybiAoQ1BERlNES19XaWRnZXQqKXBQYWdlLT5HZXRBbm5vdEJ5RGljdChwQ29udHJvbERpY3QpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgQ1BERlNES19JbnRlckZvcm06OkdldFdpZGdldHMoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNGaWVsZE5hbWUsIENGWF9QdHJBcnJheSYgd2lkZ2V0cykKK3sKKwlBU1NFUlQobV9wSW50ZXJGb3JtICE9IE5VTEwpOworCisJZm9yIChpbnQgaT0wLHN6PW1fcEludGVyRm9ybS0+Q291bnRGaWVsZHMoc0ZpZWxkTmFtZSk7IGk8c3o7IGkrKykKKwl7CisJCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gbV9wSW50ZXJGb3JtLT5HZXRGaWVsZChpLCBzRmllbGROYW1lKTsKKwkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwkJR2V0V2lkZ2V0cyhwRm9ybUZpZWxkLCB3aWRnZXRzKTsJCisJfQorfQorCit2b2lkIENQREZTREtfSW50ZXJGb3JtOjpHZXRXaWRnZXRzKENQREZfRm9ybUZpZWxkKiBwRmllbGQsIENGWF9QdHJBcnJheSYgd2lkZ2V0cykKK3sKKwlBU1NFUlQocEZpZWxkICE9IE5VTEwpOworCisJZm9yIChpbnQgaT0wLGlzej1wRmllbGQtPkNvdW50Q29udHJvbHMoKTsgaTxpc3o7IGkrKykKKwl7CisJCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ3RybCA9IHBGaWVsZC0+R2V0Q29udHJvbChpKTsKKwkJQVNTRVJUKHBGb3JtQ3RybCAhPSBOVUxMKTsKKworCQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IEdldFdpZGdldChwRm9ybUN0cmwpOworCisJCWlmIChwV2lkZ2V0KQorCQkJd2lkZ2V0cy5BZGQocFdpZGdldCk7CisJfQorfQorCitpbnQgQ1BERlNES19JbnRlckZvcm06OkdldFBhZ2VJbmRleEJ5QW5ub3REaWN0KENQREZfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ1BERl9EaWN0aW9uYXJ5KiBwQW5ub3REaWN0KSBjb25zdAoreworCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7CisJQVNTRVJUKHBBbm5vdERpY3QgIT0gTlVMTCk7CisKKwlmb3IgKGludCBpPTAsc3o9cERvY3VtZW50LT5HZXRQYWdlQ291bnQoKTsgaTxzejsgaSsrKQorCXsKKwkJaWYgKENQREZfRGljdGlvbmFyeSogcFBhZ2VEaWN0ID0gcERvY3VtZW50LT5HZXRQYWdlKGkpKQorCQl7CQkJCisJCQlpZiAoQ1BERl9BcnJheSogcEFubm90cyA9IHBQYWdlRGljdC0+R2V0QXJyYXkoIkFubm90cyIpKQorCQkJeworCQkJCWZvciAoaW50IGo9MCxqc3o9cEFubm90cy0+R2V0Q291bnQoKTsgajxqc3o7IGorKykKKwkJCQl7CisJCQkJCUNQREZfT2JqZWN0KiBwRGljdCA9IHBBbm5vdHMtPkdldEVsZW1lbnRWYWx1ZShqKTsKKwkJCQkJaWYgKHBBbm5vdERpY3QgPT0gcERpY3QpCisJCQkJCXsKKwkJCQkJCXJldHVybiBpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIC0xOworfQorCit2b2lkIENQREZTREtfSW50ZXJGb3JtOjpBZGRNYXAoQ1BERl9Gb3JtQ29udHJvbCogcENvbnRyb2wsIENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0KQoreworCW1fTWFwLlNldEF0KHBDb250cm9sLCBwV2lkZ2V0KTsKK30KKwordm9pZCBDUERGU0RLX0ludGVyRm9ybTo6UmVtb3ZlTWFwKENQREZfRm9ybUNvbnRyb2wqIHBDb250cm9sKQoreworCW1fTWFwLlJlbW92ZUtleShwQ29udHJvbCk7Cit9CisKK3ZvaWQgQ1BERlNES19JbnRlckZvcm06OkVuYWJsZUNhbGN1bGF0ZShGWF9CT09MIGJFbmFibGVkKQoreworCW1fYkNhbGN1bGF0ZSA9IGJFbmFibGVkOworfQorCitGWF9CT09MIENQREZTREtfSW50ZXJGb3JtOjpJc0NhbGN1bGF0ZUVuYWJsZWQoKSBjb25zdAoreworCXJldHVybiBtX2JDYWxjdWxhdGU7Cit9CisKKyNpZmRlZiBfV0lOMzIKK0NQREZfU3RyZWFtKiBDUERGU0RLX0ludGVyRm9ybTo6TG9hZEltYWdlRnJvbUZpbGUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNGaWxlKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKwlDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQgPSBtX3BEb2N1bWVudC0+R2V0RG9jdW1lbnQoKTsKKwlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOworCisJQ1BERl9TdHJlYW0qIHBSZXRTdHJlYW0gPSBOVUxMOworCisJaWYgKENGWF9ESUJpdG1hcCogcEJtcCA9IENGWF9XaW5kb3dzRElCOjpMb2FkRnJvbUZpbGUoc0ZpbGUpKQorCXsKKwkJaW50IG5XaWR0aCA9IHBCbXAtPkdldFdpZHRoKCk7CisJCWludCBuSGVpZ2h0ID0gcEJtcC0+R2V0SGVpZ2h0KCk7CisKKwkJQ1BERl9JbWFnZSBJbWFnZShwRG9jdW1lbnQpOworCQlJbWFnZS5TZXRJbWFnZShwQm1wLCBGQUxTRSk7CisJCUNQREZfU3RyZWFtKiBwSW1hZ2VTdHJlYW0gPSBJbWFnZS5HZXRTdHJlYW0oKTsKKwkJaWYgKHBJbWFnZVN0cmVhbSkKKwkJeworCQkJaWYgKHBJbWFnZVN0cmVhbS0+R2V0T2JqTnVtKCkgPT0gMCkKKwkJCQlwRG9jdW1lbnQtPkFkZEluZGlyZWN0T2JqZWN0KHBJbWFnZVN0cmVhbSk7CisKKwkJCUNQREZfRGljdGlvbmFyeSogcFN0cmVhbURpY3QgPSBuZXcgQ1BERl9EaWN0aW9uYXJ5KCk7CisJCQlwU3RyZWFtRGljdC0+U2V0QXROYW1lKCJTdWJ0eXBlIiwgIkZvcm0iKTsKKwkJCXBTdHJlYW1EaWN0LT5TZXRBdE5hbWUoIk5hbWUiLCAiSU1HIik7CisJCQlDUERGX0FycmF5KiBwTWF0cml4ID0gbmV3IENQREZfQXJyYXkoKTsKKwkJCXBTdHJlYW1EaWN0LT5TZXRBdCgiTWF0cml4IiwgcE1hdHJpeCk7CisJCQlwTWF0cml4LT5BZGRJbnRlZ2VyKDEpOworCQkJcE1hdHJpeC0+QWRkSW50ZWdlcigwKTsKKwkJCXBNYXRyaXgtPkFkZEludGVnZXIoMCk7CisJCQlwTWF0cml4LT5BZGRJbnRlZ2VyKDEpOworCQkJcE1hdHJpeC0+QWRkSW50ZWdlcigtbldpZHRoIC8gMik7CisJCQlwTWF0cml4LT5BZGRJbnRlZ2VyKC1uSGVpZ2h0IC8gMik7CisJCQlDUERGX0RpY3Rpb25hcnkqIHBSZXNvdXJjZSA9IG5ldyBDUERGX0RpY3Rpb25hcnkoKTsKKwkJCXBTdHJlYW1EaWN0LT5TZXRBdCgiUmVzb3VyY2VzIiwgcFJlc291cmNlKTsKKwkJCUNQREZfRGljdGlvbmFyeSogcFhPYmplY3QgPSBuZXcgQ1BERl9EaWN0aW9uYXJ5KCk7CisJCQlwUmVzb3VyY2UtPlNldEF0KCJYT2JqZWN0IiwgcFhPYmplY3QpOworCQkJcFhPYmplY3QtPlNldEF0UmVmZXJlbmNlKCJJbWciLCBwRG9jdW1lbnQsIHBJbWFnZVN0cmVhbSk7CisJCQlDUERGX0FycmF5KiBwUHJvY1NldCA9IG5ldyBDUERGX0FycmF5KCk7CisJCQlwUmVzb3VyY2UtPlNldEF0KCJQcm9jU2V0IiwgcFByb2NTZXQpOworCQkJcFByb2NTZXQtPkFkZE5hbWUoIlBERiIpOworCQkJcFByb2NTZXQtPkFkZE5hbWUoIkltYWdlQyIpOworCQkJcFN0cmVhbURpY3QtPlNldEF0TmFtZSgiVHlwZSIsICJYT2JqZWN0Iik7CisJCQlDUERGX0FycmF5KiBwQkJveCA9IG5ldyBDUERGX0FycmF5KCk7CisJCQlwU3RyZWFtRGljdC0+U2V0QXQoIkJCb3giLCBwQkJveCk7CisJCQlwQkJveC0+QWRkSW50ZWdlcigwKTsKKwkJCXBCQm94LT5BZGRJbnRlZ2VyKDApOworCQkJcEJCb3gtPkFkZEludGVnZXIobldpZHRoKTsKKwkJCXBCQm94LT5BZGRJbnRlZ2VyKG5IZWlnaHQpOworCQkJcFN0cmVhbURpY3QtPlNldEF0SW50ZWdlcigiRm9ybVR5cGUiLCAxKTsKKworCQkJcFJldFN0cmVhbSA9IG5ldyBDUERGX1N0cmVhbShOVUxMLCAwLCBOVUxMKTsKKwkJCUNGWF9CeXRlU3RyaW5nIGNzU3RyZWFtOworCQkJY3NTdHJlYW0uRm9ybWF0KCJxXG4lZCAwIDAgJWQgMCAwIGNtXG4vSW1nIERvXG5RIiwgbldpZHRoLCBuSGVpZ2h0KTsKKwkJCXBSZXRTdHJlYW0tPkluaXRTdHJlYW0oKEZYX0JZVEUqKShGWF9MUENTVFIpY3NTdHJlYW0sIGNzU3RyZWFtLkdldExlbmd0aCgpLCBwU3RyZWFtRGljdCk7CisJCQlwRG9jdW1lbnQtPkFkZEluZGlyZWN0T2JqZWN0KHBSZXRTdHJlYW0pOworCQl9CisKKwkJZGVsZXRlIHBCbXA7CisJfQorCisJcmV0dXJuIHBSZXRTdHJlYW07Cit9CisjZW5kaWYKKwordm9pZCBDUERGU0RLX0ludGVyRm9ybTo6T25DYWxjdWxhdGUoQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBtX3BEb2N1bWVudC0+R2V0RW52KCk7CisJQVNTRVJUKHBFbnYpOworCWlmKCFwRW52LT5Jc0pTSW5pdGlhdGVkKCkpCisJCXJldHVybjsKKworCWlmIChtX2JCdXN5KSByZXR1cm47CisKKwltX2JCdXN5ID0gVFJVRTsKKworCWlmICh0aGlzLT5Jc0NhbGN1bGF0ZUVuYWJsZWQoKSkKKwl7CisJCUlGWEpTX1J1bnRpbWUqIHBSdW50aW1lID0gbV9wRG9jdW1lbnQtPkdldEpzUnVudGltZSgpOworCQlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7CisKKwkJcFJ1bnRpbWUtPlNldFJlYWRlckRvY3VtZW50KG1fcERvY3VtZW50KTsKKworCQlpbnQgblNpemUgPSBtX3BJbnRlckZvcm0tPkNvdW50RmllbGRzSW5DYWxjdWxhdGlvbk9yZGVyKCk7CisJCWZvciAoaW50IGk9MDsgaTxuU2l6ZTsgaSsrKQorCQl7CisJCQlpZihDUERGX0Zvcm1GaWVsZCogcEZpZWxkID0gbV9wSW50ZXJGb3JtLT5HZXRGaWVsZEluQ2FsY3VsYXRpb25PcmRlcihpKSkKKwkJCXsKKy8vCQkJQVNTRVJUKHBGaWVsZCAhPSBOVUxMKTsKKwkJCQlpbnQgblR5cGUgPSBwRmllbGQtPkdldEZpZWxkVHlwZSgpOworCQkJCWlmIChuVHlwZSA9PSBGSUVMRFRZUEVfQ09NQk9CT1ggfHwgblR5cGUgPT0gRklFTERUWVBFX1RFWFRGSUVMRCkKKwkJCQl7CisJCQkJCUNQREZfQUFjdGlvbiBhQWN0aW9uID0gcEZpZWxkLT5HZXRBZGRpdGlvbmFsQWN0aW9uKCk7CisJCQkJCWlmIChhQWN0aW9uICYmIGFBY3Rpb24uQWN0aW9uRXhpc3QoQ1BERl9BQWN0aW9uOjpDYWxjdWxhdGUpKQorCQkJCQl7CisJCQkJCQlDUERGX0FjdGlvbiBhY3Rpb24gPSBhQWN0aW9uLkdldEFjdGlvbihDUERGX0FBY3Rpb246OkNhbGN1bGF0ZSk7CisJCQkJCQlpZiAoYWN0aW9uKQorCQkJCQkJeworCQkJCQkJCUNGWF9XaWRlU3RyaW5nIGNzSlMgPSBhY3Rpb24uR2V0SmF2YVNjcmlwdCgpOworCQkJCQkJCWlmICghY3NKUy5Jc0VtcHR5KCkpCisJCQkJCQkJeworCQkJCQkJCQlJRlhKU19Db250ZXh0KiBwQ29udGV4dCA9IHBSdW50aW1lLT5OZXdDb250ZXh0KCk7CisJCQkJCQkJCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwkJCQkJCQkJCisJCQkJCQkJCUNGWF9XaWRlU3RyaW5nIHNPbGRWYWx1ZSA9IHBGaWVsZC0+R2V0VmFsdWUoKTsKKwkJCQkJCQkJQ0ZYX1dpZGVTdHJpbmcgc1ZhbHVlID0gc09sZFZhbHVlOworCQkJCQkJCQlGWF9CT09MIGJSQyA9IFRSVUU7CisJCQkJCQkJCXBDb250ZXh0LT5PbkZpZWxkX0NhbGN1bGF0ZShwRm9ybUZpZWxkLCBwRmllbGQsIHNWYWx1ZSwgYlJDKTsKKwkJCQkJCQkJCisJCQkJCQkJCUNGWF9XaWRlU3RyaW5nIHNJbmZvOworCQkJCQkJCQlGWF9CT09MIGJSZXQgPSBwQ29udGV4dC0+UnVuU2NyaXB0KGNzSlMsIHNJbmZvKTsKKwkJCQkJCQkJcFJ1bnRpbWUtPlJlbGVhc2VDb250ZXh0KHBDb250ZXh0KTsKKwkJCQkJCQkJCisJCQkJCQkJCWlmIChiUmV0KQorCQkJCQkJCQl7CisJCQkJCQkJCQlpZiAoYlJDKQorCQkJCQkJCQkJeworCQkJCQkJCQkJCWlmIChzVmFsdWUuQ29tcGFyZShzT2xkVmFsdWUpICE9IDApCisJCQkJCQkJCQkJCXBGaWVsZC0+U2V0VmFsdWUoc1ZhbHVlLCBUUlVFKTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisJCQorCX0KKworCW1fYkJ1c3kgPSBGQUxTRTsKK30KKworQ0ZYX1dpZGVTdHJpbmcgQ1BERlNES19JbnRlckZvcm06Ok9uRm9ybWF0KENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkLCBpbnQgbkNvbW1pdEtleSwgRlhfQk9PTCYgYkZvcm1hdGVkKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKwlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCUNGWF9XaWRlU3RyaW5nIHNWYWx1ZSA9IHBGb3JtRmllbGQtPkdldFZhbHVlKCk7CisJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcERvY3VtZW50LT5HZXRFbnYoKTsKKwlBU1NFUlQocEVudik7CisJaWYoIXBFbnYtPklzSlNJbml0aWF0ZWQoKSkKKwl7CisJCWJGb3JtYXRlZCA9IEZBTFNFOworCQlyZXR1cm4gc1ZhbHVlOworCX0gCisKKwlJRlhKU19SdW50aW1lKiBwUnVudGltZSA9IG1fcERvY3VtZW50LT5HZXRKc1J1bnRpbWUoKTsKKwlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7CisJCisJcFJ1bnRpbWUtPlNldFJlYWRlckRvY3VtZW50KG1fcERvY3VtZW50KTsKKworCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSA9PSBGSUVMRFRZUEVfQ09NQk9CT1gpCisJeworCQlpZiAocEZvcm1GaWVsZC0+Q291bnRTZWxlY3RlZEl0ZW1zKCkgPiAwKQorCQl7CisJCQlpbnQgaW5kZXggPSBwRm9ybUZpZWxkLT5HZXRTZWxlY3RlZEluZGV4KDApOworCQkJaWYgKGluZGV4ID49IDApCisJCQkJc1ZhbHVlID0gcEZvcm1GaWVsZC0+R2V0T3B0aW9uTGFiZWwoaW5kZXgpOworCQl9CisJfQorCisJYkZvcm1hdGVkID0gRkFMU0U7CisKKwlDUERGX0FBY3Rpb24gYUFjdGlvbiA9IHBGb3JtRmllbGQtPkdldEFkZGl0aW9uYWxBY3Rpb24oKTsKKwlpZiAoYUFjdGlvbiAhPSBOVUxMICYmIGFBY3Rpb24uQWN0aW9uRXhpc3QoQ1BERl9BQWN0aW9uOjpGb3JtYXQpKSAKKwl7CisJCUNQREZfQWN0aW9uIGFjdGlvbiA9IGFBY3Rpb24uR2V0QWN0aW9uKENQREZfQUFjdGlvbjo6Rm9ybWF0KTsKKwkJaWYgKGFjdGlvbikKKwkJewkJCQorCQkJQ0ZYX1dpZGVTdHJpbmcgc2NyaXB0ID0gYWN0aW9uLkdldEphdmFTY3JpcHQoKTsKKwkJCWlmICghc2NyaXB0LklzRW1wdHkoKSkKKwkJCXsKKwkJCQlDRlhfV2lkZVN0cmluZyBWYWx1ZSA9IHNWYWx1ZTsKKworCQkJCUlGWEpTX0NvbnRleHQqIHBDb250ZXh0ID0gcFJ1bnRpbWUtPk5ld0NvbnRleHQoKTsKKwkJCQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7CisKKwkJCQlwQ29udGV4dC0+T25GaWVsZF9Gb3JtYXQobkNvbW1pdEtleSwgcEZvcm1GaWVsZCwgVmFsdWUsIFRSVUUpOworCQkJCisJCQkJQ0ZYX1dpZGVTdHJpbmcgc0luZm87CisgCQkJCUZYX0JPT0wgYlJldCA9IHBDb250ZXh0LT5SdW5TY3JpcHQoc2NyaXB0LCBzSW5mbyk7CisJCQkJcFJ1bnRpbWUtPlJlbGVhc2VDb250ZXh0KHBDb250ZXh0KTsKKworCQkJCWlmIChiUmV0KQorCQkJCXsKKwkJCQkJc1ZhbHVlID0gVmFsdWU7CisJCQkJCWJGb3JtYXRlZCA9IFRSVUU7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHNWYWx1ZTsKK30KKwordm9pZCBDUERGU0RLX0ludGVyRm9ybTo6UmVzZXRGaWVsZEFwcGVhcmFuY2UoQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQsIEZYX0xQQ1dTVFIgc1ZhbHVlLCBGWF9CT09MIGJWYWx1ZUNoYW5nZWQpCit7CisJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwlmb3IgKGludCBpPTAsc3o9cEZvcm1GaWVsZC0+Q291bnRDb250cm9scygpOyBpPHN6OyBpKyspCisJeworCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUN0cmwgPSBwRm9ybUZpZWxkLT5HZXRDb250cm9sKGkpOworCQlBU1NFUlQocEZvcm1DdHJsICE9IE5VTEwpOworCisJCUFTU0VSVChtX3BJbnRlckZvcm0gIT0gTlVMTCk7CisJCWlmKENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gR2V0V2lkZ2V0KHBGb3JtQ3RybCkpCisJCQlwV2lkZ2V0LT5SZXNldEFwcGVhcmFuY2Uoc1ZhbHVlLCBiVmFsdWVDaGFuZ2VkKTsKKwl9Cit9CisKK3ZvaWQgQ1BERlNES19JbnRlckZvcm06OlVwZGF0ZUZpZWxkKENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkKQoreworCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCisJZm9yIChpbnQgaT0wLHN6PXBGb3JtRmllbGQtPkNvdW50Q29udHJvbHMoKTsgaTxzejsgaSsrKQorCXsKKwkJQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1DdHJsID0gcEZvcm1GaWVsZC0+R2V0Q29udHJvbChpKTsKKwkJQVNTRVJUKHBGb3JtQ3RybCAhPSBOVUxMKTsKKworCQlpZihDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IEdldFdpZGdldChwRm9ybUN0cmwpKQorCQl7CisJCQlDUERGRG9jX0Vudmlyb25tZW50ICogcEVudiA9IG1fcERvY3VtZW50LT5HZXRFbnYoKTsKKwkJCUNGRkxfSUZvcm1GaWxsZXIqIHBJRm9ybUZpbGxlciA9IHBFbnYtPkdldElGb3JtRmlsbGVyKCk7CisJCQkKKwkJCUNQREZfUGFnZSAqIHBQYWdlID0gcFdpZGdldC0+R2V0UERGUGFnZSgpOworCQkJQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldyA9IG1fcERvY3VtZW50LT5HZXRQYWdlVmlldyhwUGFnZSxGQUxTRSk7CisKKwkJCUZYX1JFQ1QgcmNCQm94ID0gcElGb3JtRmlsbGVyLT5HZXRWaWV3QkJveChwUGFnZVZpZXcsIHBXaWRnZXQpOworCisJCQlwRW52LT5GRklfSW52YWxpZGF0ZShwUGFnZSxyY0JCb3gubGVmdCwgcmNCQm94LnRvcCwgcmNCQm94LnJpZ2h0LCByY0JCb3guYm90dG9tKTsKKwkJfQorCX0KK30KKwordm9pZCBDUERGU0RLX0ludGVyRm9ybTo6T25LZXlTdHJva2VDb21taXQoQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQsIENGWF9XaWRlU3RyaW5nJiBjc1ZhbHVlLCBGWF9CT09MJiBiUkMpCit7CisJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKyAJQ1BERl9BQWN0aW9uIGFBY3Rpb24gPSBwRm9ybUZpZWxkLT5HZXRBZGRpdGlvbmFsQWN0aW9uKCk7CisgCWlmIChhQWN0aW9uICE9IE5VTEwgJiYgYUFjdGlvbi5BY3Rpb25FeGlzdChDUERGX0FBY3Rpb246OktleVN0cm9rZSkpIAorIAl7CisgCQlDUERGX0FjdGlvbiBhY3Rpb24gPSBhQWN0aW9uLkdldEFjdGlvbihDUERGX0FBY3Rpb246OktleVN0cm9rZSk7CisgCQlpZiAoYWN0aW9uKQorIAkJewkJCSAKKyAJCQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisgCQkJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcERvY3VtZW50LT5HZXRFbnYoKTsKKyAJCQlBU1NFUlQocEVudiAhPSBOVUxMKTsKKworCQkJQ1BERlNES19BY3Rpb25IYW5kbGVyKiBwQWN0aW9uSGFuZGxlciA9IHBFbnYtPkdldEFjdGlvbkhhbmRlcigpOworCQkJQVNTRVJUKHBBY3Rpb25IYW5kbGVyICE9IE5VTEwpOworCQorCQkJUERGU0RLX0ZpZWxkQWN0aW9uIGZhOworCQkJZmEuYk1vZGlmaWVyID0gcEVudi0+RkZJX0lzQ1RSTEtleURvd24oMCk7CisgCQkJZmEuYlNoaWZ0ID0gcEVudi0+RkZJX0lzU0hJRlRLZXlEb3duKDApOworCQkJZmEuc1ZhbHVlID0gY3NWYWx1ZTsKKworICAgCQkJcEFjdGlvbkhhbmRsZXItPkRvQWN0aW9uX0ZpZWxkSmF2YVNjcmlwdChhY3Rpb24sIENQREZfQUFjdGlvbjo6S2V5U3Ryb2tlLCAKKyAgIAkJCQltX3BEb2N1bWVudCwgcEZvcm1GaWVsZCwgZmEpOworICAgCQkJYlJDID0gZmEuYlJDOworIAkJfQorIAl9Cit9CisKK3ZvaWQgQ1BERlNES19JbnRlckZvcm06Ok9uVmFsaWRhdGUoQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQsIENGWF9XaWRlU3RyaW5nJiBjc1ZhbHVlLCBGWF9CT09MJiBiUkMpCit7CisJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKyAJQ1BERl9BQWN0aW9uIGFBY3Rpb24gPSBwRm9ybUZpZWxkLT5HZXRBZGRpdGlvbmFsQWN0aW9uKCk7CisgCWlmIChhQWN0aW9uICE9IE5VTEwgJiYgYUFjdGlvbi5BY3Rpb25FeGlzdChDUERGX0FBY3Rpb246OlZhbGlkYXRlKSkgCisgCXsKKyAJCUNQREZfQWN0aW9uIGFjdGlvbiA9IGFBY3Rpb24uR2V0QWN0aW9uKENQREZfQUFjdGlvbjo6VmFsaWRhdGUpOworCQlpZiAoYWN0aW9uKQorIAkJewkJCisJCQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisJCQlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gbV9wRG9jdW1lbnQtPkdldEVudigpOworCQkJQVNTRVJUKHBFbnYgIT0gTlVMTCk7CisJCQkKKwkJCUNQREZTREtfQWN0aW9uSGFuZGxlciogcEFjdGlvbkhhbmRsZXIgPSBwRW52LT5HZXRBY3Rpb25IYW5kZXIoKTsKKwkJCUFTU0VSVChwQWN0aW9uSGFuZGxlciAhPSBOVUxMKTsKKworCQkJUERGU0RLX0ZpZWxkQWN0aW9uIGZhOworCQkJZmEuYk1vZGlmaWVyID0gcEVudi0+RkZJX0lzQ1RSTEtleURvd24oMCk7CisJCQlmYS5iU2hpZnQgPSBwRW52LT5GRklfSXNTSElGVEtleURvd24oMCk7CisJCQlmYS5zVmFsdWUgPSBjc1ZhbHVlOworCisJCQlwQWN0aW9uSGFuZGxlci0+RG9BY3Rpb25fRmllbGRKYXZhU2NyaXB0KGFjdGlvbiwgQ1BERl9BQWN0aW9uOjpWYWxpZGF0ZSwgbV9wRG9jdW1lbnQsIHBGb3JtRmllbGQsIGZhKTsKKwkJCWJSQyA9IGZhLmJSQzsKKyAJIAorCQl9CisgCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYWN0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0ZYX0JPT0wgQ1BERlNES19JbnRlckZvcm06OkRvQWN0aW9uX0hpZGUoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbikKK3sKKwlBU1NFUlQoYWN0aW9uICE9IE5VTEwpOworCisJQ1BERl9BY3Rpb25GaWVsZHMgYWYgPSBhY3Rpb24uR2V0V2lkZ2V0cygpOworCUNGWF9QdHJBcnJheSBmaWVsZE9iamVjdHM7CisJYWYuR2V0QWxsRmllbGRzKGZpZWxkT2JqZWN0cyk7CisJQ0ZYX1B0ckFycmF5IHdpZGdldEFycmF5OworCUNGWF9QdHJBcnJheSBmaWVsZHM7CisJR2V0RmllbGRGcm9tT2JqZWN0cyhmaWVsZE9iamVjdHMsIGZpZWxkcyk7CisKKwlGWF9CT09MIGJIaWRlID0gYWN0aW9uLkdldEhpZGVTdGF0dXMoKTsKKworCUZYX0JPT0wgYkNoYW5nZWQgPSBGQUxTRTsKKwkKKwlmb3IgKGludCBpPTAsIHN6PWZpZWxkcy5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwl7CisJCUNQREZfRm9ybUZpZWxkKiBwRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKWZpZWxkc1tpXTsKKwkJQVNTRVJUKHBGaWVsZCAhPSBOVUxMKTsKKworCQorCQlmb3IgKGludCBqPTAsanN6PXBGaWVsZC0+Q291bnRDb250cm9scygpOyBqPGpzejsgaisrKQorCQl7CisJCQlDUERGX0Zvcm1Db250cm9sKiBwQ29udHJvbCA9IHBGaWVsZC0+R2V0Q29udHJvbChqKTsKKwkJCUFTU0VSVChwQ29udHJvbCAhPSBOVUxMKTsKKworCQkJaWYgKENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gR2V0V2lkZ2V0KHBDb250cm9sKSkKKwkJCXsKKwkJCQlpbnQgbkZsYWdzID0gcFdpZGdldC0+R2V0RmxhZ3MoKTsKKwkJCQlpZiAoYkhpZGUpCisJCQkJeworCQkJCQluRmxhZ3MgJj0gKH5BTk5PVEZMQUdfSU5WSVNJQkxFKTsKKwkJCQkJbkZsYWdzICY9ICh+QU5OT1RGTEFHX05PVklFVyk7CisJCQkJCW5GbGFncyB8PSAoQU5OT1RGTEFHX0hJRERFTik7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCW5GbGFncyAmPSAofkFOTk9URkxBR19JTlZJU0lCTEUpOworCQkJCQluRmxhZ3MgJj0gKH5BTk5PVEZMQUdfSElEREVOKTsKKwkJCQkJbkZsYWdzICY9ICh+QU5OT1RGTEFHX05PVklFVyk7CisJCQkJfQorCQkJCXBXaWRnZXQtPlNldEZsYWdzKG5GbGFncyk7CisKKyAJCQkJQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gcFdpZGdldC0+R2V0UGFnZVZpZXcoKTsKKyAJCQkJQVNTRVJUKHBQYWdlVmlldyAhPSBOVUxMKTsKKyAKKyAJCQkJcFBhZ2VWaWV3LT5VcGRhdGVWaWV3KHBXaWRnZXQpOworCisJCQkJYkNoYW5nZWQgPSBUUlVFOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIGJDaGFuZ2VkOworfQorCitGWF9CT09MIENQREZTREtfSW50ZXJGb3JtOjpEb0FjdGlvbl9TdWJtaXRGb3JtKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24pCit7CisJQVNTRVJUKGFjdGlvbiAhPSBOVUxMKTsKKwlBU1NFUlQobV9wSW50ZXJGb3JtICE9IE5VTEwpOworCisJQ0ZYX1dpZGVTdHJpbmcgc0Rlc3RpbmF0aW9uID0gYWN0aW9uLkdldEZpbGVQYXRoKCk7CisJaWYgKHNEZXN0aW5hdGlvbi5Jc0VtcHR5KCkpIHJldHVybiBGQUxTRTsKKworCUNQREZfRGljdGlvbmFyeSogcEFjdGlvbkRpY3QgPSBhY3Rpb247CisJaWYgKHBBY3Rpb25EaWN0LT5LZXlFeGlzdCgiRmllbGRzIikpCisJeworCQlDUERGX0FjdGlvbkZpZWxkcyBhZiA9IGFjdGlvbi5HZXRXaWRnZXRzKCk7CisJCUZYX0RXT1JEIGR3RmxhZ3MgPSBhY3Rpb24uR2V0RmxhZ3MoKTsKKwkJCisJCUNGWF9QdHJBcnJheSBmaWVsZE9iamVjdHM7CisJCWFmLkdldEFsbEZpZWxkcyhmaWVsZE9iamVjdHMpOworCQlDRlhfUHRyQXJyYXkgZmllbGRzOworCQlHZXRGaWVsZEZyb21PYmplY3RzKGZpZWxkT2JqZWN0cywgZmllbGRzKTsKKwkJCisJCWlmIChmaWVsZHMuR2V0U2l6ZSgpICE9IDApCisJCXsKKwkJCUZYX0JPT0wgYkluY2x1ZGVPckV4Y2x1ZGUgPSAhKGR3RmxhZ3MgJiAweDAxKTsKKwkJCWlmIChtX3BJbnRlckZvcm0tPkNoZWNrUmVxdWlyZWRGaWVsZHMoJmZpZWxkcywgYkluY2x1ZGVPckV4Y2x1ZGUpKQorCQkJeworCQkJCXJldHVybiBGQUxTRTsKKwkJCX0KKwkJCXJldHVybiBTdWJtaXRGaWVsZHMoc0Rlc3RpbmF0aW9uLCBmaWVsZHMsIGJJbmNsdWRlT3JFeGNsdWRlLCBGQUxTRSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoIG1fcEludGVyRm9ybS0+Q2hlY2tSZXF1aXJlZEZpZWxkcygpKQorCQkJeworCQkJCXJldHVybiBGQUxTRTsKKwkJCX0KKworCQkJcmV0dXJuIFN1Ym1pdEZvcm0oc0Rlc3RpbmF0aW9uLCBGQUxTRSk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJaWYgKCBtX3BJbnRlckZvcm0tPkNoZWNrUmVxdWlyZWRGaWVsZHMoKSkKKwkJeworCQkJcmV0dXJuIEZBTFNFOworCQl9CisKKwkJcmV0dXJuIFN1Ym1pdEZvcm0oc0Rlc3RpbmF0aW9uLCBGQUxTRSk7CisJfQorfQorCitGWF9CT09MIENQREZTREtfSW50ZXJGb3JtOjpTdWJtaXRGaWVsZHMoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIGNzRGVzdGluYXRpb24sIGNvbnN0IENGWF9QdHJBcnJheSYgZmllbGRzLAorCQkJCQkJCQkJRlhfQk9PTCBiSW5jbHVkZU9yRXhjbHVkZSwgRlhfQk9PTCBiVXJsRW5jb2RlZCkKK3sKKwlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gbV9wRG9jdW1lbnQtPkdldEVudigpOworCUFTU0VSVChwRW52ICE9IE5VTEwpOworCisJQ0ZYX0J5dGVUZXh0QnVmIHRleHRCdWY7CisJRXhwb3J0RmllbGRzVG9GREZUZXh0QnVmKGZpZWxkcywgYkluY2x1ZGVPckV4Y2x1ZGUsIHRleHRCdWYpOworCisJRlhfTFBCWVRFIHBCdWZmZXIgPSB0ZXh0QnVmLkdldEJ1ZmZlcigpOworCUZYX1NUUlNJWkUgbkJ1ZlNpemUgPSB0ZXh0QnVmLkdldExlbmd0aCgpOworCQorCWlmIChiVXJsRW5jb2RlZCkKKwl7CisJCWlmKCFGREZUb1VSTEVuY29kZWREYXRhKHBCdWZmZXIsIG5CdWZTaXplKSkKKwkJCXJldHVybiBGQUxTRTsKKwl9CisKKwlwRW52LT5KU19kb2NTdWJtaXRGb3JtKHBCdWZmZXIsIG5CdWZTaXplLCAoRlhfTFBDV1NUUiljc0Rlc3RpbmF0aW9uKTsKKwkKKwlpZiAoYlVybEVuY29kZWQgJiYgcEJ1ZmZlcikKKwl7CisJCUZYX0ZyZWUocEJ1ZmZlcik7CisJCXBCdWZmZXIgPSBOVUxMOwkKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKwordm9pZCBDUERGU0RLX0ludGVyRm9ybTo6RG9GREZCdWZmZXIoQ0ZYX0J5dGVTdHJpbmcgc0J1ZmZlcikKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAoQ0ZERl9Eb2N1bWVudCAqcEZERkRvY3VtZW50ID0gQ0ZERl9Eb2N1bWVudDo6UGFyc2VNZW1vcnkoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilzQnVmZmVyLkdldEJ1ZmZlcihzQnVmZmVyLkdldExlbmd0aCgpKSwgc0J1ZmZlci5HZXRMZW5ndGgoKSkpCisJewkJCQkJCQorCQlDUERGX0RpY3Rpb25hcnkqIHBSb290RGljID0gcEZERkRvY3VtZW50LT5HZXRSb290KCk7CisJCWlmKHBSb290RGljKQorCQl7CisJCQlDUERGX0RpY3Rpb25hcnkgKiBwRkRGRGljdD1wUm9vdERpYy0+R2V0RGljdCgiRkRGIik7CisJCQlpZihwRkRGRGljdCkKKwkJCXsJCQorCQkJCUNQREZfRGljdGlvbmFyeSAqIHBKU0RpY3QgPSBwRkRGRGljdC0+R2V0RGljdCgiSmF2YVNjcmlwdCIpOworCQkJCWlmKHBKU0RpY3QpCisJCQkJeworCQkJCQlDRlhfV2lkZVN0cmluZyBjc0pTOworCQkJCQorCQkJCQlDUERGX09iamVjdCogcEpTID0gcEpTRGljdC0+R2V0RWxlbWVudFZhbHVlKCJCZWZvcmUiKTsKKwkJCQkJaWYgKHBKUyAhPSBOVUxMKQorCQkJCQl7CisJCQkJCQlpbnQgaVR5cGUgPSBwSlMtPkdldFR5cGUoKTsKKwkJCQkJCWlmIChpVHlwZSA9PSBQREZPQkpfU1RSSU5HKQorCQkJCQkJCWNzSlMgPSBwSlNEaWN0LT5HZXRVbmljb2RlVGV4dCgiQmVmb3JlIik7CisJCQkJCQllbHNlIGlmIChpVHlwZSA9PSBQREZPQkpfU1RSRUFNKQorCQkJCQkJCWNzSlMgPSBwSlMtPkdldFVuaWNvZGVUZXh0KCk7CisJCQkJCX0KKwkJCQkJCisJCQkJfQorCQkJfQorCQl9CisJCWRlbGV0ZSBwRkRGRG9jdW1lbnQ7CisJfQorCisJc0J1ZmZlci5SZWxlYXNlQnVmZmVyKCk7Cit9CisKK0ZYX0JPT0wgQ1BERlNES19JbnRlckZvcm06OkZERlRvVVJMRW5jb2RlZERhdGEoQ0ZYX1dpZGVTdHJpbmcgY3NGREZGaWxlLCBDRlhfV2lkZVN0cmluZyBjc1R4dEZpbGUpCit7CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgQ1BERlNES19JbnRlckZvcm06OkZERlRvVVJMRW5jb2RlZERhdGEoRlhfTFBCWVRFJiBwQnVmLCBGWF9TVFJTSVpFJiBuQnVmU2l6ZSkKK3sKKyAJQ0ZERl9Eb2N1bWVudCogcEZERiA9IENGREZfRG9jdW1lbnQ6OlBhcnNlTWVtb3J5KHBCdWYsIG5CdWZTaXplKTsKKyAJaWYgKHBGREYpCisgCXsKKyAJCUNQREZfRGljdGlvbmFyeSogcE1haW5EaWN0ID0gcEZERi0+R2V0Um9vdCgpLT5HZXREaWN0KCJGREYiKTsKKyAJCWlmIChwTWFpbkRpY3QgPT0gTlVMTCkgcmV0dXJuIEZBTFNFOworIAkJCisgCQkvLyBHZXQgZmllbGRzCisgCQlDUERGX0FycmF5KiBwRmllbGRzID0gcE1haW5EaWN0LT5HZXRBcnJheSgiRmllbGRzIik7CisgCQlpZiAocEZpZWxkcyA9PSBOVUxMKSByZXR1cm4gRkFMU0U7CisJCQorCQlDRlhfQnl0ZVRleHRCdWYgZmRmRW5jb2RlZERhdGE7CisKKyAJCWZvciAoRlhfRFdPUkQgaSA9IDA7IGkgPCBwRmllbGRzLT5HZXRDb3VudCgpOyBpICsrKSAKKyAJCXsKKyAJCQlDUERGX0RpY3Rpb25hcnkqIHBGaWVsZCA9IHBGaWVsZHMtPkdldERpY3QoaSk7CisgCQkJaWYgKHBGaWVsZCA9PSBOVUxMKSBjb250aW51ZTsKKyAJCQlDRlhfV2lkZVN0cmluZyBuYW1lOworIAkJCW5hbWUgPSBwRmllbGQtPkdldFVuaWNvZGVUZXh0KCJUIik7CisgCQkJQ0ZYX0J5dGVTdHJpbmcgbmFtZV9iID0gQ0ZYX0J5dGVTdHJpbmc6OkZyb21Vbmljb2RlKG5hbWUpOworIAkJCUNGWF9CeXRlU3RyaW5nIGNzQlZhbHVlID0gcEZpZWxkLT5HZXRTdHJpbmcoIlYiKTsKKyAJCQlDRlhfV2lkZVN0cmluZyBjc1dWYWx1ZSA9IFBERl9EZWNvZGVUZXh0KGNzQlZhbHVlKTsKKyAJCQlDRlhfQnl0ZVN0cmluZyBjc1ZhbHVlX2IgPSBDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUoY3NXVmFsdWUpOworCisJCQlmZGZFbmNvZGVkRGF0YSA9IGZkZkVuY29kZWREYXRhPDxuYW1lX2IuR2V0QnVmZmVyKG5hbWVfYi5HZXRMZW5ndGgoKSk7CisgIAkJCW5hbWVfYi5SZWxlYXNlQnVmZmVyKCk7CisJCQlmZGZFbmNvZGVkRGF0YSA9IGZkZkVuY29kZWREYXRhPDwiPSI7CisJCQlmZGZFbmNvZGVkRGF0YSA9IGZkZkVuY29kZWREYXRhPDxjc1ZhbHVlX2IuR2V0QnVmZmVyKGNzVmFsdWVfYi5HZXRMZW5ndGgoKSk7CisgIAkJCWNzVmFsdWVfYi5SZWxlYXNlQnVmZmVyKCk7CisgIAkJCWlmKGkgIT0gcEZpZWxkcy0+R2V0Q291bnQoKS0xKQorICAJCQkJZmRmRW5jb2RlZERhdGEgPSBmZGZFbmNvZGVkRGF0YTw8IiYiOworIAkJfQorCQkKKwkJbkJ1ZlNpemUgPSBmZGZFbmNvZGVkRGF0YS5HZXRMZW5ndGgoKTsKKwkJcEJ1ZiA9IEZYX0FsbG9jKEZYX0JZVEUsIG5CdWZTaXplKTsKKwkJaWYoIXBCdWYpCisJCQlyZXR1cm4gRkFMU0U7CisJCUZYU1lTX21lbWNweShwQnVmLCBmZGZFbmNvZGVkRGF0YS5HZXRCdWZmZXIoKSwgbkJ1ZlNpemUpOworIAkJCisgCX0KKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBDUERGU0RLX0ludGVyRm9ybTo6RXhwb3J0RmllbGRzVG9GREZGaWxlKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzRkRGRmlsZU5hbWUsIAorCQkJCQkJCQkJCQkJIGNvbnN0IENGWF9QdHJBcnJheSYgZmllbGRzLCBGWF9CT09MIGJJbmNsdWRlT3JFeGNsdWRlKQoreworCWlmIChzRkRGRmlsZU5hbWUuSXNFbXB0eSgpKSByZXR1cm4gRkFMU0U7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCUFTU0VSVChtX3BJbnRlckZvcm0gIT0gTlVMTCk7CisKKyAJQ0ZERl9Eb2N1bWVudCogcEZERiA9IG1fcEludGVyRm9ybS0+RXhwb3J0VG9GREYobV9wRG9jdW1lbnQtPkdldFBhdGgoKSwoQ0ZYX1B0ckFycmF5JilmaWVsZHMsIGJJbmNsdWRlT3JFeGNsdWRlKTsKKyAJaWYgKCFwRkRGKSByZXR1cm4gRkFMU0U7CisgCUZYX0JPT0wgYlJldCA9IHBGREYtPldyaXRlRmlsZShzRkRGRmlsZU5hbWUuVVRGOEVuY29kZSgpKTsgLy8gPSBGQUxTRTsvLworCWRlbGV0ZSBwRkRGOworCisJcmV0dXJuIGJSZXQ7Cit9CitGWF9CT09MIENQREZTREtfSW50ZXJGb3JtOjpFeHBvcnRGaWVsZHNUb0ZERlRleHRCdWYoY29uc3QgQ0ZYX1B0ckFycmF5JiBmaWVsZHMsRlhfQk9PTCBiSW5jbHVkZU9yRXhjbHVkZSwgQ0ZYX0J5dGVUZXh0QnVmJiB0ZXh0QnVmKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKwlBU1NFUlQobV9wSW50ZXJGb3JtICE9IE5VTEwpOworCQorCUNGREZfRG9jdW1lbnQqIHBGREYgPSBtX3BJbnRlckZvcm0tPkV4cG9ydFRvRkRGKG1fcERvY3VtZW50LT5HZXRQYXRoKCksKENGWF9QdHJBcnJheSYpZmllbGRzLCBiSW5jbHVkZU9yRXhjbHVkZSk7CisJaWYgKCFwRkRGKSByZXR1cm4gRkFMU0U7CisJRlhfQk9PTCBiUmV0ID0gcEZERi0+V3JpdGVCdWYodGV4dEJ1Zik7IC8vID0gRkFMU0U7Ly8KKwlkZWxldGUgcEZERjsKKwkKKwlyZXR1cm4gYlJldDsKK30KKworQ0ZYX1dpZGVTdHJpbmcgQ1BERlNES19JbnRlckZvcm06OkdldFRlbXBvcmFyeUZpbGVOYW1lKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzRmlsZUV4dCkKK3sKKwlDRlhfV2lkZVN0cmluZyBzRmlsZU5hbWU7CisJcmV0dXJuIEwiIjsKK30KKworRlhfQk9PTCBDUERGU0RLX0ludGVyRm9ybTo6U3VibWl0Rm9ybShjb25zdCBDRlhfV2lkZVN0cmluZyYgc0Rlc3RpbmF0aW9uLCBGWF9CT09MIGJVcmxFbmNvZGVkKQoreworIAlpZiAoc0Rlc3RpbmF0aW9uLklzRW1wdHkoKSkgcmV0dXJuIEZBTFNFOworCisJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcERvY3VtZW50LT5HZXRFbnYoKTsKKwlBU1NFUlQocEVudiAhPSBOVUxMKTsKKworCWlmKE5VTEwgPT0gbV9wRG9jdW1lbnQpIHJldHVybiBGQUxTRTsKKwlDRlhfV2lkZVN0cmluZyB3c1BERkZpbGVQYXRoID0gbV9wRG9jdW1lbnQtPkdldFBhdGgoKTsKKwkKKwlpZihOVUxMID09IG1fcEludGVyRm9ybSkgcmV0dXJuIEZBTFNFOworCUNGREZfRG9jdW1lbnQqIHBGREZEb2MgPSBtX3BJbnRlckZvcm0tPkV4cG9ydFRvRkRGKHdzUERGRmlsZVBhdGgpOworCWlmIChOVUxMID09IHBGREZEb2MpIHJldHVybiBGQUxTRTsKKworCUNGWF9CeXRlVGV4dEJ1ZiBGZGZCdWZmZXI7CisJRlhfQk9PTCBiUmV0ID0gcEZERkRvYy0+V3JpdGVCdWYoRmRmQnVmZmVyKTsKKwlkZWxldGUgcEZERkRvYzsKKwlpZiAoIWJSZXQpIHJldHVybiBGQUxTRTsKKworCUZYX0xQQllURSBwQnVmZmVyID0gRmRmQnVmZmVyLkdldEJ1ZmZlcigpOworCUZYX1NUUlNJWkUgbkJ1ZlNpemUgPSBGZGZCdWZmZXIuR2V0TGVuZ3RoKCk7CisJCisJaWYgKGJVcmxFbmNvZGVkKQorCXsKKwkJaWYoIUZERlRvVVJMRW5jb2RlZERhdGEocEJ1ZmZlciwgbkJ1ZlNpemUpKQorCQkJcmV0dXJuIEZBTFNFOworCX0KKworCXBFbnYtPkpTX2RvY1N1Ym1pdEZvcm0ocEJ1ZmZlciwgbkJ1ZlNpemUsIChGWF9MUENXU1RSKXNEZXN0aW5hdGlvbik7CisJCisJaWYgKGJVcmxFbmNvZGVkICYmIHBCdWZmZXIpCisJeworCQlGWF9GcmVlKHBCdWZmZXIpOworCQlwQnVmZmVyID0gTlVMTDsJCisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wJQ1BERlNES19JbnRlckZvcm06OkV4cG9ydEZvcm1Ub0ZERkZpbGUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNGREZGaWxlTmFtZSkKK3sKKwlpZiAoc0ZERkZpbGVOYW1lLklzRW1wdHkoKSkgcmV0dXJuIEZBTFNFOworCisJQVNTRVJUKG1fcEludGVyRm9ybSAhPSBOVUxMKTsKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlDRkRGX0RvY3VtZW50KiBwRkRGID0gbV9wSW50ZXJGb3JtLT5FeHBvcnRUb0ZERihtX3BEb2N1bWVudC0+R2V0UGF0aCgpKTsKKwlpZiAoIXBGREYpIHJldHVybiBGQUxTRTsKKworCUZYX0JPT0wgYlJldCA9IHBGREYtPldyaXRlRmlsZShzRkRGRmlsZU5hbWUuVVRGOEVuY29kZSgpKTsKKwlkZWxldGUgcEZERjsKKworCXJldHVybiBiUmV0OworfQorCitGWF9CT09MIENQREZTREtfSW50ZXJGb3JtOjpFeHBvcnRGb3JtVG9GREZUZXh0QnVmKENGWF9CeXRlVGV4dEJ1ZiYgdGV4dEJ1ZikKK3sKKworCUFTU0VSVChtX3BJbnRlckZvcm0gIT0gTlVMTCk7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCQorCUNGREZfRG9jdW1lbnQqIHBGREYgPSBtX3BJbnRlckZvcm0tPkV4cG9ydFRvRkRGKG1fcERvY3VtZW50LT5HZXRQYXRoKCkpOworCWlmICghcEZERikgcmV0dXJuIEZBTFNFOworCQorCUZYX0JPT0wgYlJldCA9IHBGREYtPldyaXRlQnVmKHRleHRCdWYpOworCWRlbGV0ZSBwRkRGOworCQorCXJldHVybiBiUmV0OworfQorCitGWF9CT09MIENQREZTREtfSW50ZXJGb3JtOjpFeHBvcnRGb3JtVG9UeHRGaWxlKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzVHh0RmlsZU5hbWUpCit7CisJQVNTRVJUKG1fcEludGVyRm9ybSAhPSBOVUxMKTsKKworCUNGWF9XaWRlU3RyaW5nIHNGaWVsZE5hbWVzOworCUNGWF9XaWRlU3RyaW5nIHNGaWVsZFZhbHVlczsKKworCWludCBuU2l6ZSA9IG1fcEludGVyRm9ybS0+Q291bnRGaWVsZHMoKTsKKworCWlmIChuU2l6ZSA+IDApCisJeworCQlmb3IgKGludCBpPTA7IGk8blNpemU7IGkrKykKKwkJeworCQkJQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCA9IG1fcEludGVyRm9ybS0+R2V0RmllbGQoaSk7CisJCQlBU1NFUlQocEZpZWxkICE9IE5VTEwpOworCisJCQlpZiAoaSAhPSAwKQorCQkJeworCQkJCXNGaWVsZE5hbWVzICs9IEwiXHQiOworCQkJCXNGaWVsZFZhbHVlcyArPSBMIlx0IjsKKwkJCX0KKwkJCXNGaWVsZE5hbWVzICs9IHBGaWVsZC0+R2V0RnVsbE5hbWUoKTsKKwkJCXNGaWVsZFZhbHVlcyArPSBwRmllbGQtPkdldFZhbHVlKCk7CisJCX0KKworCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wJQ1BERlNES19JbnRlckZvcm06OkltcG9ydEZvcm1Gcm9tVHh0RmlsZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc1R4dEZpbGVOYW1lKQoreworCUFTU0VSVChtX3BJbnRlckZvcm0gIT0gTlVMTCk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBDUERGU0RLX0ludGVyRm9ybTo6RG9BY3Rpb25fUmVzZXRGb3JtKGNvbnN0IENQREZfQWN0aW9uJiBhY3Rpb24pCit7CisJQVNTRVJUKGFjdGlvbiAhPSBOVUxMKTsKKworCUNQREZfRGljdGlvbmFyeSogcEFjdGlvbkRpY3QgPSBhY3Rpb247CisKKwlpZiAocEFjdGlvbkRpY3QtPktleUV4aXN0KCJGaWVsZHMiKSkKKwl7CisJCUNQREZfQWN0aW9uRmllbGRzIGFmID0gYWN0aW9uLkdldFdpZGdldHMoKTsKKwkJRlhfRFdPUkQgZHdGbGFncyA9IGFjdGlvbi5HZXRGbGFncygpOworCQkKKwkJQ0ZYX1B0ckFycmF5IGZpZWxkT2JqZWN0czsKKwkJYWYuR2V0QWxsRmllbGRzKGZpZWxkT2JqZWN0cyk7CisJCUNGWF9QdHJBcnJheSBmaWVsZHM7CisJCUdldEZpZWxkRnJvbU9iamVjdHMoZmllbGRPYmplY3RzLCBmaWVsZHMpOworCQkKKwkJQVNTRVJUKG1fcEludGVyRm9ybSAhPSBOVUxMKTsKKworCQlyZXR1cm4gbV9wSW50ZXJGb3JtLT5SZXNldEZvcm0oZmllbGRzLCAhKGR3RmxhZ3MgJiAweDAxKSwgVFJVRSk7CisJfQorCWVsc2UKKwl7CisJCUFTU0VSVChtX3BJbnRlckZvcm0gIT0gTlVMTCk7CisJCXJldHVybiBtX3BJbnRlckZvcm0tPlJlc2V0Rm9ybShUUlVFKTsKKwl9Cit9CisKK0ZYX0JPT0wgQ1BERlNES19JbnRlckZvcm06OkRvQWN0aW9uX0ltcG9ydERhdGEoY29uc3QgQ1BERl9BY3Rpb24mIGFjdGlvbikKK3sKKwlBU1NFUlQoYWN0aW9uICE9IE5VTEwpOworCisJQ0ZYX1dpZGVTdHJpbmcgc0ZpbGVQYXRoID0gYWN0aW9uLkdldEZpbGVQYXRoKCk7CisJaWYgKHNGaWxlUGF0aC5Jc0VtcHR5KCkpCisJCXJldHVybiBGQUxTRTsKKworCWlmICghSW1wb3J0Rm9ybUZyb21GREZGaWxlKHNGaWxlUGF0aCwgVFJVRSkpCisJeworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wJQ1BERlNES19JbnRlckZvcm06OkltcG9ydEZvcm1Gcm9tRkRGRmlsZShjb25zdCBDRlhfV2lkZVN0cmluZyYgY3NGREZGaWxlTmFtZSwKKwkJCQkJCQkJCQkJCSBGWF9CT09MIGJOb3RpZnkpCit7CisJcmV0dXJuIEZBTFNFOworfQorCit2b2lkIENQREZTREtfSW50ZXJGb3JtOjpHZXRGaWVsZEZyb21PYmplY3RzKGNvbnN0IENGWF9QdHJBcnJheSYgb2JqZWN0cywgQ0ZYX1B0ckFycmF5JiBmaWVsZHMpCit7CisJQVNTRVJUKG1fcEludGVyRm9ybSAhPSBOVUxMKTsKKworCWludCBpQ291bnQgPSBvYmplY3RzLkdldFNpemUoKTsKKwlmb3IgKGludCBpID0gMDsgaSA8IGlDb3VudDsgaSArKykKKwl7CisJCUNQREZfT2JqZWN0KiBwT2JqZWN0ID0gKENQREZfT2JqZWN0KilvYmplY3RzW2ldOworCQlpZiAocE9iamVjdCA9PSBOVUxMKSBjb250aW51ZTsKKwkJCisJCWludCBpVHlwZSA9IHBPYmplY3QtPkdldFR5cGUoKTsKKwkJaWYgKGlUeXBlID09IFBERk9CSl9TVFJJTkcpCisJCXsKKwkJCUNGWF9XaWRlU3RyaW5nIGNzTmFtZSA9IHBPYmplY3QtPkdldFVuaWNvZGVUZXh0KCk7CisJCQlDUERGX0Zvcm1GaWVsZCogcEZpZWxkID0gbV9wSW50ZXJGb3JtLT5HZXRGaWVsZCgwLCBjc05hbWUpOworCQkJaWYgKHBGaWVsZCAhPSBOVUxMKQorCQkJCWZpZWxkcy5BZGQocEZpZWxkKTsKKwkJfQorCQllbHNlIGlmIChpVHlwZSA9PSBQREZPQkpfRElDVElPTkFSWSkKKwkJeworCQkJaWYgKG1fcEludGVyRm9ybS0+SXNWYWxpZEZvcm1GaWVsZChwT2JqZWN0KSkKKwkJCQlmaWVsZHMuQWRkKHBPYmplY3QpOworCQl9CisJfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUERGX0Zvcm1Ob3RpZnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworaW50CUNQREZTREtfSW50ZXJGb3JtOjpCZWZvcmVWYWx1ZUNoYW5nZShjb25zdCBDUERGX0Zvcm1GaWVsZCogcEZpZWxkLCBDRlhfV2lkZVN0cmluZyYgY3NWYWx1ZSkKK3sKKwlBU1NFUlQocEZpZWxkICE9IE5VTEwpOworCisJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKXBGaWVsZDsKKworCWludCBuVHlwZSA9IHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpOworCWlmIChuVHlwZSA9PSBGSUVMRFRZUEVfQ09NQk9CT1ggfHwgblR5cGUgPT0gRklFTERUWVBFX1RFWFRGSUVMRCkKKwl7CisJCUZYX0JPT0wgYlJDID0gVFJVRTsKKwkJT25LZXlTdHJva2VDb21taXQocEZvcm1GaWVsZCwgY3NWYWx1ZSwgYlJDKTsKKwkJaWYgKGJSQykgCisJCXsKKwkJCU9uVmFsaWRhdGUocEZvcm1GaWVsZCwgY3NWYWx1ZSwgYlJDKTsKKwkJCWlmIChiUkMpCisJCQkJcmV0dXJuIDE7CisJCQllbHNlCisJCQkJcmV0dXJuIC0xOworCQl9CisJCWVsc2UKKwkJCXJldHVybiAtMTsKKwl9CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworaW50CUNQREZTREtfSW50ZXJGb3JtOjpBZnRlclZhbHVlQ2hhbmdlKGNvbnN0IENQREZfRm9ybUZpZWxkKiBwRmllbGQpCit7CisJQVNTRVJUKHBGaWVsZCAhPSBOVUxMKTsKKworCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilwRmllbGQ7CisJaW50IG5UeXBlID0gcEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCk7CisKKwlpZiAoblR5cGUgPT0gRklFTERUWVBFX0NPTUJPQk9YIHx8IG5UeXBlID09IEZJRUxEVFlQRV9URVhURklFTEQpCisJeworCQl0aGlzLT5PbkNhbGN1bGF0ZShwRm9ybUZpZWxkKTsKKwkJRlhfQk9PTCBiRm9ybWF0ZWQgPSBGQUxTRTsKKwkJQ0ZYX1dpZGVTdHJpbmcgc1ZhbHVlID0gdGhpcy0+T25Gb3JtYXQocEZvcm1GaWVsZCwgMCwgYkZvcm1hdGVkKTsKKwkJaWYgKGJGb3JtYXRlZCkKKwkJCXRoaXMtPlJlc2V0RmllbGRBcHBlYXJhbmNlKHBGb3JtRmllbGQsIHNWYWx1ZSwgVFJVRSk7CisJCWVsc2UKKwkJCXRoaXMtPlJlc2V0RmllbGRBcHBlYXJhbmNlKHBGb3JtRmllbGQsIE5VTEwsIFRSVUUpOworCQl0aGlzLT5VcGRhdGVGaWVsZChwRm9ybUZpZWxkKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50CUNQREZTREtfSW50ZXJGb3JtOjpCZWZvcmVTZWxlY3Rpb25DaGFuZ2UoY29uc3QgQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCwgQ0ZYX1dpZGVTdHJpbmcmIGNzVmFsdWUpCit7CisJQVNTRVJUKHBGaWVsZCAhPSBOVUxMKTsKKworCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilwRmllbGQ7CisKKwlpbnQgblR5cGUgPSBwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKTsKKwlpZiAoblR5cGUgPT0gRklFTERUWVBFX0xJU1RCT1gpCisJeworCQlGWF9CT09MIGJSQyA9IFRSVUU7CisJCU9uS2V5U3Ryb2tlQ29tbWl0KHBGb3JtRmllbGQsIGNzVmFsdWUsIGJSQyk7CisJCWlmIChiUkMpIAorCQl7CisJCQlPblZhbGlkYXRlKHBGb3JtRmllbGQsIGNzVmFsdWUsIGJSQyk7CisJCQlpZiAoYlJDKQorCQkJCXJldHVybiAxOworCQkJZWxzZQorCQkJCXJldHVybiAtMTsKKwkJfQorCQllbHNlCisJCQlyZXR1cm4gLTE7CisJfQorCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK2ludAlDUERGU0RLX0ludGVyRm9ybTo6QWZ0ZXJTZWxlY3Rpb25DaGFuZ2UoY29uc3QgQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCkKK3sKKwlBU1NFUlQocEZpZWxkICE9IE5VTEwpOworCisJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKXBGaWVsZDsKKwlpbnQgblR5cGUgPSBwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKTsKKworCWlmIChuVHlwZSA9PSBGSUVMRFRZUEVfTElTVEJPWCkKKwl7CisJCXRoaXMtPk9uQ2FsY3VsYXRlKHBGb3JtRmllbGQpOworCQl0aGlzLT5SZXNldEZpZWxkQXBwZWFyYW5jZShwRm9ybUZpZWxkLCBOVUxMLCBUUlVFKTsKKwkJdGhpcy0+VXBkYXRlRmllbGQocEZvcm1GaWVsZCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludAlDUERGU0RLX0ludGVyRm9ybTo6QWZ0ZXJDaGVja2VkU3RhdHVzQ2hhbmdlKGNvbnN0IENQREZfRm9ybUZpZWxkKiBwRmllbGQsIGNvbnN0IENGWF9CeXRlQXJyYXkmIHN0YXR1c0FycmF5KQoreworCUFTU0VSVChwRmllbGQgIT0gTlVMTCk7CisKKwlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopcEZpZWxkOworCWludCBuVHlwZSA9IHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpOworCisJaWYgKG5UeXBlID09IEZJRUxEVFlQRV9DSEVDS0JPWCB8fCBuVHlwZSA9PSBGSUVMRFRZUEVfUkFESU9CVVRUT04pCisJeworCQl0aGlzLT5PbkNhbGN1bGF0ZShwRm9ybUZpZWxkKTsKKwkJLy90aGlzLT5SZXNldEZpZWxkQXBwZWFyYW5jZShwRm9ybUZpZWxkLCBOVUxMKTsKKwkJdGhpcy0+VXBkYXRlRmllbGQocEZvcm1GaWVsZCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludAlDUERGU0RLX0ludGVyRm9ybTo6QmVmb3JlRm9ybVJlc2V0KGNvbnN0IENQREZfSW50ZXJGb3JtKiBwRm9ybSkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50CUNQREZTREtfSW50ZXJGb3JtOjpBZnRlckZvcm1SZXNldChjb25zdCBDUERGX0ludGVyRm9ybSogcEZvcm0pCit7CisJdGhpcy0+T25DYWxjdWxhdGUoTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50CUNQREZTREtfSW50ZXJGb3JtOjpCZWZvcmVGb3JtSW1wb3J0RGF0YShjb25zdCBDUERGX0ludGVyRm9ybSogcEZvcm0pCit7CisJcmV0dXJuIDA7Cit9CisKK2ludAlDUERGU0RLX0ludGVyRm9ybTo6QWZ0ZXJGb3JtSW1wb3J0RGF0YShjb25zdCBDUERGX0ludGVyRm9ybSogcEZvcm0pCit7CisJdGhpcy0+T25DYWxjdWxhdGUoTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworRlhfQk9PTCBDUERGU0RLX0ludGVyRm9ybTo6SXNOZWVkSGlnaExpZ2h0KGludCBuRmllbGRUeXBlKQoreworCWlmKG5GaWVsZFR5cGUgPDEgfHwgbkZpZWxkVHlwZSA+IDYpCisJCXJldHVybiBGQUxTRTsKKwlyZXR1cm4gbV9iTmVlZEhpZ2h0bGlnaHRbbkZpZWxkVHlwZS0xXTsKK30KKwordm9pZCBDUERGU0RLX0ludGVyRm9ybTo6UmVtb3ZlQWxsSGlnaExpZ2h0KCkKK3sKKwltZW1zZXQoKHZvaWQqKW1fYk5lZWRIaWdodGxpZ2h0LCAwLCA2KnNpemVvZihGWF9CT09MKSk7Cit9Cit2b2lkICAgQ1BERlNES19JbnRlckZvcm06OlNldEhpZ2hsaWdodENvbG9yKEZYX0NPTE9SUkVGIGNsciwgaW50IG5GaWVsZFR5cGUpCit7CisJaWYobkZpZWxkVHlwZSA8MCB8fCBuRmllbGRUeXBlID4gNikgcmV0dXJuOworCXN3aXRjaChuRmllbGRUeXBlKQorCXsKKwljYXNlIDA6CisJCXsKKwkJCWZvcihpbnQgaT0wOyBpPDY7IGkrKykKKwkJCXsKKwkJCQltX2FIaWdobGlnaHRDb2xvcltpXSA9IGNscjsKKwkJCQltX2JOZWVkSGlnaHRsaWdodFtpXSA9IFRSVUU7CisJCQl9CisJCQlicmVhazsKKwkJfQorCWRlZmF1bHQ6CisJCXsKKwkJCW1fYUhpZ2hsaWdodENvbG9yW25GaWVsZFR5cGUtMV0gPSBjbHI7CisJCQltX2JOZWVkSGlnaHRsaWdodFtuRmllbGRUeXBlLTFdID0gVFJVRTsKKwkJCWJyZWFrOworCQl9CisJfQorCQorfQorCitGWF9DT0xPUlJFRiBDUERGU0RLX0ludGVyRm9ybTo6R2V0SGlnaGxpZ2h0Q29sb3IoaW50IG5GaWVsZFR5cGUpCit7CisJaWYobkZpZWxkVHlwZSA8MCB8fCBuRmllbGRUeXBlID42KSByZXR1cm4gRlhTWVNfUkdCKDI1NSwyNTUsMjU1KTsKKwlpZihuRmllbGRUeXBlID09IDApCisJCXJldHVybiBtX2FIaWdobGlnaHRDb2xvclswXTsKKwllbHNlCisJCXJldHVybiBtX2FIaWdobGlnaHRDb2xvcltuRmllbGRUeXBlLTFdOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENCQV9Bbm5vdEl0ZXJhdG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ0JBX0Fubm90SXRlcmF0b3I6OkNCQV9Bbm5vdEl0ZXJhdG9yKENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNUeXBlLCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc1N1YlR5cGUpCisJOm1fcFBhZ2VWaWV3KHBQYWdlVmlldyksCisJbV9zVHlwZShzVHlwZSksCisJbV9zU3ViVHlwZShzU3ViVHlwZSksCisJbV9uVGFicyhCQUlfU1RSVUNUVVJFKQoreworCUFTU0VSVChtX3BQYWdlVmlldyAhPSBOVUxMKTsKKworCUNQREZfUGFnZSogcFBERlBhZ2UgPSBtX3BQYWdlVmlldy0+R2V0UERGUGFnZSgpOworCUFTU0VSVChwUERGUGFnZSAhPSBOVUxMKTsKKwlBU1NFUlQocFBERlBhZ2UtPm1fcEZvcm1EaWN0ICE9IE5VTEwpOworCisJQ0ZYX0J5dGVTdHJpbmcgc1RhYnMgPSBwUERGUGFnZS0+bV9wRm9ybURpY3QtPkdldFN0cmluZygiVGFicyIpOworCisJaWYgKHNUYWJzID09ICJSIikKKwl7CisJCW1fblRhYnMgPSBCQUlfUk9XOworCX0KKwllbHNlIGlmIChzVGFicyA9PSAiQyIpCisJeworCQltX25UYWJzID0gQkFJX0NPTFVNTjsKKwl9CisJZWxzZQorCXsKKwkJbV9uVGFicyA9IEJBSV9TVFJVQ1RVUkU7CisJfQorCisJR2VuZXJhdGVSZXN1bHRzKCk7Cit9CisKK0NCQV9Bbm5vdEl0ZXJhdG9yOjp+Q0JBX0Fubm90SXRlcmF0b3IoKQoreworCW1fQW5ub3RzLlJlbW92ZUFsbCgpOworfQorCitDUERGU0RLX0Fubm90KiBDQkFfQW5ub3RJdGVyYXRvcjo6R2V0Rmlyc3RBbm5vdCgpCit7CisJaWYgKG1fQW5ub3RzLkdldFNpemUoKSA+IDApCisJCXJldHVybiBtX0Fubm90c1swXTsKKwkKKwlyZXR1cm4gTlVMTDsKK30KKworQ1BERlNES19Bbm5vdCogQ0JBX0Fubm90SXRlcmF0b3I6OkdldExhc3RBbm5vdCgpCit7CisJaWYgKG1fQW5ub3RzLkdldFNpemUoKSA+IDApCisJCXJldHVybiBtX0Fubm90c1ttX0Fubm90cy5HZXRTaXplKCkgLSAxXTsKKworCXJldHVybiBOVUxMOworfQorCitDUERGU0RLX0Fubm90KiBDQkFfQW5ub3RJdGVyYXRvcjo6R2V0TmV4dEFubm90KENQREZTREtfQW5ub3QqIHBBbm5vdCkKK3sKKwlmb3IgKGludCBpPTAsc3o9bV9Bbm5vdHMuR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJeworCQlpZiAobV9Bbm5vdHNbaV0gPT0gcEFubm90KQorCQl7CisJCQlpZiAoaSsxIDwgc3opCisJCQkJcmV0dXJuIG1fQW5ub3RzW2krMV07CisJCQllbHNlCisJCQkJcmV0dXJuIG1fQW5ub3RzWzBdOworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK0NQREZTREtfQW5ub3QqIENCQV9Bbm5vdEl0ZXJhdG9yOjpHZXRQcmV2QW5ub3QoQ1BERlNES19Bbm5vdCogcEFubm90KQoreworCWZvciAoaW50IGk9MCxzej1tX0Fubm90cy5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwl7CisJCWlmIChtX0Fubm90c1tpXSA9PSBwQW5ub3QpCisJCXsKKwkJCWlmIChpLTEgPj0gMCkKKwkJCQlyZXR1cm4gbV9Bbm5vdHNbaS0xXTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gbV9Bbm5vdHNbc3otMV07CisJCX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IENCQV9Bbm5vdEl0ZXJhdG9yOjpDb21wYXJlQnlMZWZ0KENQREZTREtfQW5ub3QqIHAxLCBDUERGU0RLX0Fubm90KiBwMikKK3sKKwlBU1NFUlQocDEgIT0gTlVMTCk7CisJQVNTRVJUKHAyICE9IE5VTEwpOworCisJQ1BERl9SZWN0IHJjQW5ub3QxID0gR2V0QW5ub3RSZWN0KHAxKTsKKwlDUERGX1JlY3QgcmNBbm5vdDIgPSBHZXRBbm5vdFJlY3QocDIpOworCisJaWYgKHJjQW5ub3QxLmxlZnQgPCByY0Fubm90Mi5sZWZ0KQorCQlyZXR1cm4gLTE7CisJaWYgKHJjQW5ub3QxLmxlZnQgPiByY0Fubm90Mi5sZWZ0KQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworCitpbnQgQ0JBX0Fubm90SXRlcmF0b3I6OkNvbXBhcmVCeVRvcChDUERGU0RLX0Fubm90KiBwMSwgQ1BERlNES19Bbm5vdCogcDIpCit7CisJQVNTRVJUKHAxICE9IE5VTEwpOworCUFTU0VSVChwMiAhPSBOVUxMKTsKKworCUNQREZfUmVjdCByY0Fubm90MSA9IEdldEFubm90UmVjdChwMSk7CisJQ1BERl9SZWN0IHJjQW5ub3QyID0gR2V0QW5ub3RSZWN0KHAyKTsKKworCWlmIChyY0Fubm90MS50b3AgPCByY0Fubm90Mi50b3ApCisJCXJldHVybiAtMTsKKwlpZiAocmNBbm5vdDEudG9wID4gcmNBbm5vdDIudG9wKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBDQkFfQW5ub3RJdGVyYXRvcjo6R2VuZXJhdGVSZXN1bHRzKCkKK3sKKwlBU1NFUlQobV9wUGFnZVZpZXcgIT0gTlVMTCk7CisKKwlzd2l0Y2ggKG1fblRhYnMpCisJeworCWNhc2UgQkFJX1NUUlVDVFVSRToKKwkJeworCQkJZm9yIChpbnQgaT0wLHN6PW1fcFBhZ2VWaWV3LT5Db3VudEFubm90cygpOyBpPHN6OyBpKyspCisJCQl7CisJCQkJQ1BERlNES19Bbm5vdCogcEFubm90ID0gbV9wUGFnZVZpZXctPkdldEFubm90KGkpOworCQkJCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7CisKKwkJCQlpZiAocEFubm90LT5HZXRUeXBlKCkgPT0gbV9zVHlwZSAKKwkJCQkJJiYgcEFubm90LT5HZXRTdWJUeXBlKCkgPT0gbV9zU3ViVHlwZSkKKwkJCQkJbV9Bbm5vdHMuQWRkKHBBbm5vdCk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJY2FzZSBCQUlfUk9XOgorCQl7CisJCQlDUERGU0RLX1NvcnRBbm5vdHMgc2E7CisKKwkJCXsKKwkJCQkKKwkJCQlmb3IgKGludCBpPTAsc3o9bV9wUGFnZVZpZXctPkNvdW50QW5ub3RzKCk7IGk8c3o7IGkrKykKKwkJCQl7CisJCQkJCUNQREZTREtfQW5ub3QqIHBBbm5vdCA9IG1fcFBhZ2VWaWV3LT5HZXRBbm5vdChpKTsKKwkJCQkJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKworCQkJCQlpZiAocEFubm90LT5HZXRUeXBlKCkgPT0gbV9zVHlwZSAKKwkJCQkJCSYmIHBBbm5vdC0+R2V0U3ViVHlwZSgpID09IG1fc1N1YlR5cGUpCisJCQkJCQlzYS5BZGQocEFubm90KTsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChzYS5HZXRTaXplKCkgPiAwKQorCQkJeworCQkJCXNhLlNvcnQoQ0JBX0Fubm90SXRlcmF0b3I6OkNvbXBhcmVCeUxlZnQpOworCQkJfQorCisJCQl3aGlsZSAoc2EuR2V0U2l6ZSgpID4gMCkKKwkJCXsKKwkJCQlpbnQgbkxlZnRUb3BJbmRleCA9IC0xOworCisJCQkJeworCQkJCQlGWF9GTE9BVCBmVG9wID0gMC4wZjsKKworCQkJCQlmb3IgKGludCBpPXNhLkdldFNpemUoKS0xOyBpPj0wOyBpLS0pCisJCQkJCXsKKwkJCQkJCUNQREZTREtfQW5ub3QqIHBBbm5vdCA9IHNhLkdldEF0KGkpOworCQkJCQkJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKworCQkJCQkJQ1BERl9SZWN0IHJjQW5ub3QgPSBHZXRBbm5vdFJlY3QocEFubm90KTsKKworCQkJCQkJaWYgKHJjQW5ub3QudG9wID4gZlRvcCkKKwkJCQkJCXsKKwkJCQkJCQluTGVmdFRvcEluZGV4ID0gaTsKKwkJCQkJCQlmVG9wID0gcmNBbm5vdC50b3A7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAobkxlZnRUb3BJbmRleCA+PSAwKQorCQkJCXsKKwkJCQkJQ1BERlNES19Bbm5vdCogcExlZnRUb3BBbm5vdCA9IHNhLkdldEF0KG5MZWZ0VG9wSW5kZXgpOworCQkJCQlBU1NFUlQocExlZnRUb3BBbm5vdCAhPSBOVUxMKTsKKworCQkJCQlDUERGX1JlY3QgcmNMZWZ0VG9wID0gR2V0QW5ub3RSZWN0KHBMZWZ0VG9wQW5ub3QpOworCQkJCQkKKwkJCQkJbV9Bbm5vdHMuQWRkKHBMZWZ0VG9wQW5ub3QpOworCQkJCQlzYS5SZW1vdmVBdChuTGVmdFRvcEluZGV4KTsKKworCQkJCQlDRlhfQXJyYXlUZW1wbGF0ZTxpbnQ+IGFTZWxlY3Q7CisKKwkJCQkJeworCQkJCQkJZm9yIChpbnQgaT0wLHN6PXNhLkdldFNpemUoKTsgaTxzejsgaSsrKQorCQkJCQkJeworCQkJCQkJCUNQREZTREtfQW5ub3QqIHBBbm5vdCA9IHNhLkdldEF0KGkpOworCQkJCQkJCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7CisKKwkJCQkJCQlDUERGX1JlY3QgcmNBbm5vdCA9IEdldEFubm90UmVjdChwQW5ub3QpOworCisJCQkJCQkJRlhfRkxPQVQgZkNlbnRlclkgPSAocmNBbm5vdC50b3AgKyByY0Fubm90LmJvdHRvbSkgLyAyLjBmOworCisJCQkJCQkJaWYgKGZDZW50ZXJZID4gcmNMZWZ0VG9wLmJvdHRvbSAmJiBmQ2VudGVyWSA8IHJjTGVmdFRvcC50b3ApCisJCQkJCQkJCWFTZWxlY3QuQWRkKGkpOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJeworCQkJCQkJZm9yIChpbnQgaT0wLHN6PWFTZWxlY3QuR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJCQkJCQl7CisJCQkJCQkJbV9Bbm5vdHMuQWRkKHNhW2FTZWxlY3RbaV1dKTsKKwkJCQkJCX0KKwkJCQkJfQorCisJCQkJCXsKKwkJCQkJCWZvciAoaW50IGk9YVNlbGVjdC5HZXRTaXplKCktMTsgaT49MDsgaS0tKQorCQkJCQkJeworCQkJCQkJCXNhLlJlbW92ZUF0KGFTZWxlY3RbaV0pOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJYVNlbGVjdC5SZW1vdmVBbGwoKTsKKwkJCQl9CisJCQl9CisJCQlzYS5SZW1vdmVBbGwoKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEJBSV9DT0xVTU46CisJCXsKKwkJCUNQREZTREtfU29ydEFubm90cyBzYTsKKworCQkJeworCQkJCWZvciAoaW50IGk9MCxzej1tX3BQYWdlVmlldy0+Q291bnRBbm5vdHMoKTsgaTxzejsgaSsrKQorCQkJCXsKKwkJCQkJQ1BERlNES19Bbm5vdCogcEFubm90ID0gbV9wUGFnZVZpZXctPkdldEFubm90KGkpOworCQkJCQlBU1NFUlQocEFubm90ICE9IE5VTEwpOworCisJCQkJCWlmIChwQW5ub3QtPkdldFR5cGUoKSA9PSBtX3NUeXBlIAorCQkJCQkJJiYgcEFubm90LT5HZXRTdWJUeXBlKCkgPT0gbV9zU3ViVHlwZSkKKwkJCQkJCXNhLkFkZChwQW5ub3QpOworCQkJCX0KKwkJCX0KKworCQkJaWYgKHNhLkdldFNpemUoKSA+IDApCisJCQl7CisJCQkJc2EuU29ydChDQkFfQW5ub3RJdGVyYXRvcjo6Q29tcGFyZUJ5VG9wLCBGQUxTRSk7CisJCQl9CisKKwkJCXdoaWxlIChzYS5HZXRTaXplKCkgPiAwKQorCQkJeworCQkJCWludCBuTGVmdFRvcEluZGV4ID0gLTE7CisKKwkJCQl7CisJCQkJCUZYX0ZMT0FUIGZMZWZ0ID0gLTEuMGY7CisKKwkJCQkJZm9yIChpbnQgaT1zYS5HZXRTaXplKCktMTsgaT49MDsgaS0tKQorCQkJCQl7CisJCQkJCQlDUERGU0RLX0Fubm90KiBwQW5ub3QgPSBzYS5HZXRBdChpKTsKKwkJCQkJCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7CisKKwkJCQkJCUNQREZfUmVjdCByY0Fubm90ID0gR2V0QW5ub3RSZWN0KHBBbm5vdCk7CisKKwkJCQkJCWlmIChmTGVmdCA8IDApCisJCQkJCQl7CisJCQkJCQkJbkxlZnRUb3BJbmRleCA9IDA7CisJCQkJCQkJZkxlZnQgPSByY0Fubm90LmxlZnQ7CisJCQkJCQl9CisJCQkJCQllbHNlIGlmIChyY0Fubm90LmxlZnQgPCBmTGVmdCkKKwkJCQkJCXsKKwkJCQkJCQluTGVmdFRvcEluZGV4ID0gaTsKKwkJCQkJCQlmTGVmdCA9IHJjQW5ub3QubGVmdDsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKworCQkJCWlmIChuTGVmdFRvcEluZGV4ID49IDApCisJCQkJeworCQkJCQlDUERGU0RLX0Fubm90KiBwTGVmdFRvcEFubm90ID0gc2EuR2V0QXQobkxlZnRUb3BJbmRleCk7CisJCQkJCUFTU0VSVChwTGVmdFRvcEFubm90ICE9IE5VTEwpOworCisJCQkJCUNQREZfUmVjdCByY0xlZnRUb3AgPSBHZXRBbm5vdFJlY3QocExlZnRUb3BBbm5vdCk7CisJCQkJCQorCQkJCQltX0Fubm90cy5BZGQocExlZnRUb3BBbm5vdCk7CisJCQkJCXNhLlJlbW92ZUF0KG5MZWZ0VG9wSW5kZXgpOworCisJCQkJCUNGWF9BcnJheVRlbXBsYXRlPGludD4gYVNlbGVjdDsKKworCQkJCQl7CisJCQkJCQlmb3IgKGludCBpPTAsc3o9c2EuR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJCQkJCQl7CisJCQkJCQkJQ1BERlNES19Bbm5vdCogcEFubm90ID0gc2EuR2V0QXQoaSk7CisJCQkJCQkJQVNTRVJUKHBBbm5vdCAhPSBOVUxMKTsKKworCQkJCQkJCUNQREZfUmVjdCByY0Fubm90ID0gR2V0QW5ub3RSZWN0KHBBbm5vdCk7CisKKwkJCQkJCQlGWF9GTE9BVCBmQ2VudGVyWCA9IChyY0Fubm90LmxlZnQgKyByY0Fubm90LnJpZ2h0KSAvIDIuMGY7CisKKwkJCQkJCQlpZiAoZkNlbnRlclggPiByY0xlZnRUb3AubGVmdCAmJiBmQ2VudGVyWCA8IHJjTGVmdFRvcC5yaWdodCkKKwkJCQkJCQkJYVNlbGVjdC5BZGQoaSk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQl7CisJCQkJCQlmb3IgKGludCBpPTAsc3o9YVNlbGVjdC5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwkJCQkJCXsKKwkJCQkJCQltX0Fubm90cy5BZGQoc2FbYVNlbGVjdFtpXV0pOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJeworCQkJCQkJZm9yIChpbnQgaT1hU2VsZWN0LkdldFNpemUoKS0xOyBpPj0wOyBpLS0pCisJCQkJCQl7CisJCQkJCQkJc2EuUmVtb3ZlQXQoYVNlbGVjdFtpXSk7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlhU2VsZWN0LlJlbW92ZUFsbCgpOworCQkJCX0KKwkJCX0KKwkJCXNhLlJlbW92ZUFsbCgpOworCQl9CisJCWJyZWFrOworCX0KK30KKworQ1BERl9SZWN0IENCQV9Bbm5vdEl0ZXJhdG9yOjpHZXRBbm5vdFJlY3QoQ1BERlNES19Bbm5vdCogcEFubm90KQoreworCUFTU0VSVChwQW5ub3QgIT0gTlVMTCk7CisKKwlDUERGX0Fubm90KiBwUERGQW5ub3QgPSBwQW5ub3QtPkdldFBERkFubm90KCk7CisJQVNTRVJUKHBQREZBbm5vdCAhPSBOVUxMKTsKKworCUNQREZfUmVjdCByY0Fubm90OworCXBQREZBbm5vdC0+R2V0UmVjdChyY0Fubm90KTsKKworCXJldHVybiByY0Fubm90OworfQorCmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9mc2RrX21nci5jcHAgYi9mcGRmc2RrL3NyYy9mc2RrX21nci5jcHAKaW5kZXggOWExMTkyNy4uOTA1MmMzNyAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvZnNka19tZ3IuY3BwCisrKyBiL2ZwZGZzZGsvc3JjL2ZzZGtfbWdyLmNwcApAQCAtMSwxMDU1ICsxLDEwNTUgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfZGVmaW5lLmgiDQotI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnNka19tZ3IuaCINCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9mcGRmX2V4dC5oIg0KLSNpbmNsdWRlICIuLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0Zvcm1GaWxsZXIuaCINCi0jaW5jbHVkZSAiLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0lKYXZhU2NyaXB0LmgiDQotDQotI2lmIF9GWF9PU18gPT0gX0ZYX0FORFJPSURfDQotI2luY2x1ZGUgInRpbWUuaCINCi0jZWxzZQ0KLSNpbmNsdWRlIDxjdGltZT4NCi0jZW5kaWYNCi0NCi0vL2V4dGVybiBDUERGRG9jX0Vudmlyb25tZW50KiBnX3BGb3JtRmlsbEFwcDsNCi1jbGFzcyBDRlhfU3lzdGVtSGFuZGxlcjpwdWJsaWMgSUZYX1N5c3RlbUhhbmRsZXINCi17DQotcHVibGljOg0KLQlDRlhfU3lzdGVtSGFuZGxlcihDUERGRG9jX0Vudmlyb25tZW50KiBwRW52KTptX3BFbnYocEVudiksbV9uQ2hhclNldCgtMSkge30NCi1wdWJsaWM6DQotCXZpcnR1YWwgdm9pZAkJCQlJbnZhbGlkYXRlUmVjdChGWF9IV05EIGhXbmQsIEZYX1JFQ1QgcmVjdCkgOw0KLQl2aXJ0dWFsIHZvaWQJCQkJT3V0cHV0U2VsZWN0ZWRSZWN0KHZvaWQqIHBGb3JtRmlsbGVyLCBDUERGX1JlY3QmIHJlY3QpOw0KLQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJSXNTZWxlY3Rpb25JbXBsZW1lbnRlZCgpOw0KLQ0KLQl2aXJ0dWFsIENGWF9XaWRlU3RyaW5nCQlHZXRDbGlwYm9hcmRUZXh0KEZYX0hXTkQgaFduZCl7cmV0dXJuIEwiIjt9DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlTZXRDbGlwYm9hcmRUZXh0KEZYX0hXTkQgaFduZCwgQ0ZYX1dpZGVTdHJpbmcgc3RyaW5nKSB7cmV0dXJuIEZBTFNFO30NCi0JDQotCXZpcnR1YWwgdm9pZAkJCQlDbGllbnRUb1NjcmVlbihGWF9IV05EIGhXbmQsIEZYX0lOVDMyJiB4LCBGWF9JTlQzMiYgeSkge30NCi0JdmlydHVhbCB2b2lkCQkJCVNjcmVlblRvQ2xpZW50KEZYX0hXTkQgaFduZCwgRlhfSU5UMzImIHgsIEZYX0lOVDMyJiB5KSB7fQ0KLQ0KLQkvKmN1cnNvciBzdHlsZQ0KLQlGWENUX0FSUk9XCQ0KLQlGWENUX05FU1cJCQ0KLQlGWENUX05XU0UJCQ0KLQlGWENUX1ZCRUFNCQkNCi0JRlhDVF9IQkVBTQkJDQotCUZYQ1RfSEFORA0KLQkqLw0KLQl2aXJ0dWFsIHZvaWQJCQkJU2V0Q3Vyc29yKEZYX0lOVDMyIG5DdXJzb3JUeXBlKTsNCi0NCi0JdmlydHVhbCBGWF9ITUVOVQkJCUNyZWF0ZVBvcHVwTWVudSgpIHtyZXR1cm4gTlVMTDt9DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlBcHBlbmRNZW51SXRlbShGWF9ITUVOVSBoTWVudSwgRlhfSU5UMzIgbklETmV3SXRlbSwgQ0ZYX1dpZGVTdHJpbmcgc3RyaW5nKSB7cmV0dXJuIEZBTFNFO30NCi0JdmlydHVhbCBGWF9CT09MCQkJCUVuYWJsZU1lbnVJdGVtKEZYX0hNRU5VIGhNZW51LCBGWF9JTlQzMiBuSURJdGVtLCBGWF9CT09MIGJFbmFibGVkKSB7cmV0dXJuIEZBTFNFO30NCi0JdmlydHVhbCBGWF9JTlQzMgkJCVRyYWNrUG9wdXBNZW51KEZYX0hNRU5VIGhNZW51LCBGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBGWF9IV05EIGhQYXJlbnQpIHtyZXR1cm4gLTE7fQ0KLQl2aXJ0dWFsIHZvaWQJCQkJRGVzdHJveU1lbnUoRlhfSE1FTlUgaE1lbnUpIHt9DQotDQotCXZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCUdldE5hdGl2ZVRydWVUeXBlRm9udChGWF9JTlQzMiBuQ2hhcnNldCk7DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlGaW5kTmF0aXZlVHJ1ZVR5cGVGb250KEZYX0lOVDMyIG5DaGFyc2V0LCBDRlhfQnl0ZVN0cmluZyBzRm9udEZhY2VOYW1lKTsNCi0JdmlydHVhbCBDUERGX0ZvbnQqCQkJQWRkTmF0aXZlVHJ1ZVR5cGVGb250VG9QREYoQ1BERl9Eb2N1bWVudCogcERvYywgQ0ZYX0J5dGVTdHJpbmcgc0ZvbnRGYWNlTmFtZSwgRlhfQllURSBuQ2hhcnNldCk7DQotDQotCXZpcnR1YWwgRlhfSU5UMzIJCQlTZXRUaW1lcihGWF9JTlQzMiB1RWxhcHNlLCBUaW1lckNhbGxiYWNrIGxwVGltZXJGdW5jKSA7DQotCXZpcnR1YWwgdm9pZAkJCQlLaWxsVGltZXIoRlhfSU5UMzIgbklEKSA7DQotDQotDQotCXZpcnR1YWwgRlhfQk9PTAkJCQlJc1NISUZUS2V5RG93bihGWF9EV09SRCBuRmxhZykge3JldHVybiBtX3BFbnYtPkZGSV9Jc1NISUZUS2V5RG93bihuRmxhZyk7fQ0KLQl2aXJ0dWFsIEZYX0JPT0wJCQkJSXNDVFJMS2V5RG93bihGWF9EV09SRCBuRmxhZykge3JldHVybiBtX3BFbnYtPkZGSV9Jc0NUUkxLZXlEb3duKG5GbGFnKTt9DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlJc0FMVEtleURvd24oRlhfRFdPUkQgbkZsYWcpIHtyZXR1cm4gbV9wRW52LT5GRklfSXNBTFRLZXlEb3duKG5GbGFnKTt9DQotCXZpcnR1YWwgRlhfQk9PTAkJCQlJc0lOU0VSVEtleURvd24oRlhfRFdPUkQgbkZsYWcpIHtyZXR1cm4gbV9wRW52LT5GRklfSXNJTlNFUlRLZXlEb3duKG5GbGFnKTt9DQotDQotCXZpcnR1YWwJRlhfU1lTVEVNVElNRQkJR2V0TG9jYWxUaW1lKCk7DQotDQotCXZpcnR1YWwgRlhfSU5UMzIJCQlHZXRDaGFyU2V0KCkge3JldHVybiBtX25DaGFyU2V0O30NCi0JdmlydHVhbCB2b2lkIAkJCQlTZXRDaGFyU2V0KEZYX0lOVDMyIG5DaGFyU2V0KSB7bV9uQ2hhclNldCA9IG5DaGFyU2V0O30NCi1wcml2YXRlOg0KLQlDUERGRG9jX0Vudmlyb25tZW50KiBtX3BFbnY7DQotCWludAkJbV9uQ2hhclNldDsNCi19Ow0KLQ0KLXZvaWQgQ0ZYX1N5c3RlbUhhbmRsZXI6OlNldEN1cnNvcihGWF9JTlQzMiBuQ3Vyc29yVHlwZSkNCi17DQotDQotCW1fcEVudi0+RkZJX1NldEN1cnNvcihuQ3Vyc29yVHlwZSk7DQotfQ0KLQ0KLXZvaWQgQ0ZYX1N5c3RlbUhhbmRsZXI6OkludmFsaWRhdGVSZWN0KEZYX0hXTkQgaFduZCwgRlhfUkVDVCByZWN0KQ0KLXsNCi0JLy9nX3BGb3JtRmlsbEFwcC0+RkZJX0ludmFsaWRhdGUoKTsNCi0JQ1BERlNES19Bbm5vdCogcFNES0Fubm90ID0gKENQREZTREtfQW5ub3QqKWhXbmQ7DQotCUNQREZfUGFnZSogcFBhZ2UgPSBOVUxMOw0KLQlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcgPSBOVUxMOw0KLQlwUGFnZVZpZXcgPSBwU0RLQW5ub3QtPkdldFBhZ2VWaWV3KCk7DQotCXBQYWdlID0gcFNES0Fubm90LT5HZXRQREZQYWdlKCk7DQotCWlmKCFwUGFnZSB8fCAhcFBhZ2VWaWV3KQ0KLQkJcmV0dXJuOw0KLQlDUERGX01hdHJpeCBwYWdlMmRldmljZTsNCi0JcFBhZ2VWaWV3LT5HZXRDdXJyZW50TWF0cml4KHBhZ2UyZGV2aWNlKTsNCi0JQ1BERl9NYXRyaXggZGV2aWNlMnBhZ2U7DQotCWRldmljZTJwYWdlLlNldFJldmVyc2UocGFnZTJkZXZpY2UpOw0KLQlGWF9GTE9BVCBsZWZ0LCB0b3AsIHJpZ2h0LGJvdHRvbTsNCi0JZGV2aWNlMnBhZ2UuVHJhbnNmb3JtKChGWF9GTE9BVClyZWN0LmxlZnQsIChGWF9GTE9BVClyZWN0LnRvcCwgbGVmdCwgdG9wKTsNCi0JZGV2aWNlMnBhZ2UuVHJhbnNmb3JtKChGWF9GTE9BVClyZWN0LnJpZ2h0LCAoRlhfRkxPQVQpcmVjdC5ib3R0b20sIHJpZ2h0LCBib3R0b20pOw0KLS8vIAltX3BFbnYtPkZGSV9EZXZpY2VUb1BhZ2UocFBhZ2UsIHJlY3QubGVmdCwgcmVjdC50b3AsIChkb3VibGUqKSZsZWZ0LCAoZG91YmxlKikmdG9wKTsNCi0vLyAJbV9wRW52LT5GRklfRGV2aWNlVG9QYWdlKHBQYWdlLCByZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSwgKGRvdWJsZSopJnJpZ2h0LCAoZG91YmxlKikmYm90dG9tKTsNCi0JQ1BERl9SZWN0IHJjUERGKGxlZnQsIGJvdHRvbSwgcmlnaHQsIHRvcCk7DQotCXJjUERGLk5vcm1hbGl6ZSgpOw0KLQ0KLQltX3BFbnYtPkZGSV9JbnZhbGlkYXRlKHBQYWdlLCByY1BERi5sZWZ0LCByY1BERi50b3AsIHJjUERGLnJpZ2h0LCByY1BERi5ib3R0b20pOw0KLX0NCi12b2lkIENGWF9TeXN0ZW1IYW5kbGVyOjpPdXRwdXRTZWxlY3RlZFJlY3Qodm9pZCogcEZvcm1GaWxsZXIsIENQREZfUmVjdCYgcmVjdCkNCi17DQotCUNGRkxfRm9ybUZpbGxlciogcEZGTCA9IChDRkZMX0Zvcm1GaWxsZXIqKXBGb3JtRmlsbGVyOw0KLQlpZihwRkZMKQ0KLQl7DQotCQlDUERGX1BvaW50IGxlZnRib3R0b20gPSBDUERGX1BvaW50KHJlY3QubGVmdCwgcmVjdC5ib3R0b20pOw0KLQkJQ1BERl9Qb2ludCByaWdodHRvcCA9IENQREZfUG9pbnQocmVjdC5yaWdodCwgcmVjdC50b3ApOw0KLQkJQ1BERl9Qb2ludCBwdEEgPSBwRkZMLT5QV0x0b0ZGTChsZWZ0Ym90dG9tKTsNCi0JCUNQREZfUG9pbnQgcHRCID0gcEZGTC0+UFdMdG9GRkwocmlnaHR0b3ApOwkNCi0NCi0NCi0JCUNQREZTREtfQW5ub3QqIHBBbm5vdCAgPSBwRkZMLT5HZXRTREtBbm5vdCgpOw0KLQkJQVNTRVJUKHBBbm5vdCk7DQotCQlDUERGX1BhZ2UqIHBQYWdlID0gcEFubm90LT5HZXRQREZQYWdlKCk7DQotCQlBU1NFUlQocFBhZ2UpOw0KLQkJbV9wRW52LT5GRklfT3V0cHV0U2VsZWN0ZWRSZWN0KHBQYWdlLCBwdEEueCwgcHRCLnksIHB0Qi54LCBwdEEueSk7DQotCX0NCi0JDQotfQ0KLQ0KLUZYX0JPT0wgQ0ZYX1N5c3RlbUhhbmRsZXI6OklzU2VsZWN0aW9uSW1wbGVtZW50ZWQoKQ0KLXsNCi0JaWYobV9wRW52KQ0KLQl7DQotCQlGUERGX0ZPUk1GSUxMSU5GTyogcEluZm8gPSBtX3BFbnYtPkdldEZvcm1GaWxsSW5mbygpOw0KLQkJaWYocEluZm8gJiYgcEluZm8tPkZGSV9PdXRwdXRTZWxlY3RlZFJlY3QpDQotCQkJcmV0dXJuIFRSVUU7DQotCX0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDRlhfU3lzdGVtSGFuZGxlcjo6R2V0TmF0aXZlVHJ1ZVR5cGVGb250KEZYX0lOVDMyIG5DaGFyc2V0KQ0KLXsNCi0JcmV0dXJuICIiOw0KLX0NCi0NCi1GWF9CT09MCUNGWF9TeXN0ZW1IYW5kbGVyOjpGaW5kTmF0aXZlVHJ1ZVR5cGVGb250KEZYX0lOVDMyIG5DaGFyc2V0LCBDRlhfQnl0ZVN0cmluZyBzRm9udEZhY2VOYW1lKSANCi17DQotCUNGWF9Gb250TWdyKiBwRm9udE1nciA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldEZvbnRNZ3IoKTsNCi0vLwlGWEZUX0ZhY2UgbkZhY2UgPSBwRm9udE1nci0+RmluZFN1YnN0Rm9udChzRm9udEZhY2VOYW1lLFRSVUUsMCwwLDAsMCxOVUxMKTsNCi0vLwlGWEZUX0ZhY2UgbkZhY2UgID0gcEZvbnRNZ3ItPm1fcEJ1aWx0aW5NYXBwZXItPkZpbmRTdWJzdEZvbnQoc0ZvbnRGYWNlTmFtZSxUUlVFLDAsMCwwLDAsTlVMTCk7DQotDQotCWlmKHBGb250TWdyKQ0KLQl7DQotCQlDRlhfRm9udE1hcHBlcioJcEZvbnRNYXBwZXIgPSBwRm9udE1nci0+bV9wQnVpbHRpbk1hcHBlcjsNCi0JCWlmKHBGb250TWFwcGVyKQ0KLQkJewkNCi0JCQlpbnQgblNpemUgPSBwRm9udE1hcHBlci0+bV9JbnN0YWxsZWRUVEZvbnRzLkdldFNpemUoKTsNCi0JCQlpZihuU2l6ZSA9PTApDQotCQkJew0KLQkJCQlwRm9udE1hcHBlci0+TG9hZEluc3RhbGxlZEZvbnRzKCk7DQotCQkJCW5TaXplID0gcEZvbnRNYXBwZXItPm1fSW5zdGFsbGVkVFRGb250cy5HZXRTaXplKCk7DQotCQkJfQ0KLQkJCQ0KLQkJCWZvcihpbnQgaT0wOyBpPG5TaXplOyBpKyspDQotCQkJew0KLQkJCQlpZihwRm9udE1hcHBlci0+bV9JbnN0YWxsZWRUVEZvbnRzW2ldLkNvbXBhcmUoc0ZvbnRGYWNlTmFtZSkpDQotCQkJCQlyZXR1cm4gVFJVRTsNCi0JCQl9DQotCQl9DQotDQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLS8vIAlwRm9udE1nci0+bV9GYWNlTWFwLkxvb2t1cChzRm9udEZhY2VOYW1lLHBGb250KTsNCi0vLyAJcmV0dXJuIChwRm9udCE9TlVMTCk7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgQ2hhclNldDJDUChpbnQgY2hhcnNldCkNCi17DQotCWlmKGNoYXJzZXQgPT0gMTI4KQ0KLQkJcmV0dXJuIDkzMjsNCi0JZWxzZSBpZihjaGFyc2V0ID09IDEzNCkNCi0JCXJldHVybiA5MzY7DQotCWVsc2UgaWYoY2hhcnNldCA9PSAxMjkpDQotCQlyZXR1cm4gOTQ5Ow0KLQllbHNlIGlmKGNoYXJzZXQgPT0gMTM2KQ0KLQkJcmV0dXJuIDk1MDsNCi0JcmV0dXJuIDA7DQotfQ0KLUNQREZfRm9udCogQ0ZYX1N5c3RlbUhhbmRsZXI6OkFkZE5hdGl2ZVRydWVUeXBlRm9udFRvUERGKENQREZfRG9jdW1lbnQqIHBEb2MsIENGWF9CeXRlU3RyaW5nIHNGb250RmFjZU5hbWUsIA0KLQkJCQkJCQkJCQkJCQkJIEZYX0JZVEUgbkNoYXJzZXQpIA0KLXsNCi0JaWYocERvYykNCi0Jew0KLQkJQ0ZYX0ZvbnQqIHBGWEZvbnQgPSBuZXcgQ0ZYX0ZvbnQoKTsNCi0JCXBGWEZvbnQtPkxvYWRTdWJzdChzRm9udEZhY2VOYW1lLFRSVUUsMCwwLDAsQ2hhclNldDJDUChuQ2hhcnNldCksRkFMU0UpOw0KLQkJQ1BERl9Gb250KiBwRm9udCA9IHBEb2MtPkFkZEZvbnQocEZYRm9udCxuQ2hhcnNldCxGQUxTRSk7DQotCQlkZWxldGUgcEZYRm9udDsNCi0JCXJldHVybiBwRm9udDsNCi0JfQ0KLQ0KLQlyZXR1cm4gTlVMTDsNCi19DQotDQotDQotRlhfSU5UMzIgQ0ZYX1N5c3RlbUhhbmRsZXI6OlNldFRpbWVyKEZYX0lOVDMyIHVFbGFwc2UsIFRpbWVyQ2FsbGJhY2sgbHBUaW1lckZ1bmMpDQotew0KLQlyZXR1cm4gbV9wRW52LT5GRklfU2V0VGltZXIodUVsYXBzZSwgbHBUaW1lckZ1bmMpOw0KLX0NCi12b2lkIENGWF9TeXN0ZW1IYW5kbGVyOjpLaWxsVGltZXIoRlhfSU5UMzIgbklEKQ0KLXsNCi0JbV9wRW52LT5GRklfS2lsbFRpbWVyKG5JRCk7DQotfQ0KLQ0KLUZYX1NZU1RFTVRJTUUgQ0ZYX1N5c3RlbUhhbmRsZXI6OkdldExvY2FsVGltZSgpDQotew0KLQlyZXR1cm4gbV9wRW52LT5GRklfR2V0TG9jYWxUaW1lKCk7DQotfQ0KLQ0KLQ0KLUNKU19SdW50aW1lRmFjdG9yeSogR2V0SlNSdW50aW1lRmFjdG9yeSgpDQotew0KLQlzdGF0aWMgQ0pTX1J1bnRpbWVGYWN0b3J5IHNfSlNSdW50aW1lRmFjdG9yeTsNCi0JcmV0dXJuICZzX0pTUnVudGltZUZhY3Rvcnk7DQotfQ0KLQ0KLUNQREZEb2NfRW52aXJvbm1lbnQ6OkNQREZEb2NfRW52aXJvbm1lbnQoQ1BERl9Eb2N1bWVudCAqIHBEb2MpOm1fcEluZm8oTlVMTCksbV9wSUZvcm1GaWxsZXIoTlVMTCksDQotCQkJCQkJCQltX3BBbm5vdEhhbmRsZXJNZ3IoTlVMTCksbV9wQWN0aW9uSGFuZGxlcihOVUxMKSxtX3BKU1J1bnRpbWUoTlVMTCksDQotCQkJCQkJCQltX3BTREtEb2MoTlVMTCksIG1fcFBERkRvYyhwRG9jKQ0KLXsNCi0NCi0JbV9wU3lzSGFuZGxlciA9IE5VTEw7DQotCW1fcFN5c0hhbmRsZXIgPSBuZXcgQ0ZYX1N5c3RlbUhhbmRsZXIodGhpcyk7DQotDQotCQ0KLQltX3BKU1J1bnRpbWVGYWN0b3J5ID0gTlVMTDsNCi0JbV9wSlNSdW50aW1lRmFjdG9yeSA9IEdldEpTUnVudGltZUZhY3RvcnkoKTsNCi0JbV9wSlNSdW50aW1lRmFjdG9yeS0+QWRkUmVmKCk7DQotfQ0KLQ0KLUNQREZEb2NfRW52aXJvbm1lbnQ6On5DUERGRG9jX0Vudmlyb25tZW50KCkNCi17DQotDQotCWlmICggbV9wSUZvcm1GaWxsZXIgKQ0KLQl7DQotCQlkZWxldGUgbV9wSUZvcm1GaWxsZXI7DQotCQltX3BJRm9ybUZpbGxlciA9IE5VTEw7DQotCX0NCi0JaWYobV9wSlNSdW50aW1lICYmIG1fcEpTUnVudGltZUZhY3RvcnkpDQotCQltX3BKU1J1bnRpbWVGYWN0b3J5LT5EZWxldGVKU1J1bnRpbWUobV9wSlNSdW50aW1lKTsNCi0JbV9wSlNSdW50aW1lRmFjdG9yeS0+UmVsZWFzZSgpOw0KLQ0KLQlpZihtX3BTeXNIYW5kbGVyKQ0KLQl7DQotCQlkZWxldGUgbV9wU3lzSGFuZGxlcjsNCi0JCW1fcFN5c0hhbmRsZXIgPSBOVUxMOw0KLQl9DQotDQotCWlmKG1fcEFubm90SGFuZGxlck1ncikNCi0Jew0KLQkJZGVsZXRlIG1fcEFubm90SGFuZGxlck1ncjsNCi0JCW1fcEFubm90SGFuZGxlck1nciA9IE5VTEw7DQotCX0NCi0JaWYobV9wQWN0aW9uSGFuZGxlcikNCi0Jew0KLQkJZGVsZXRlIG1fcEFjdGlvbkhhbmRsZXI7DQotCQltX3BBY3Rpb25IYW5kbGVyID0gTlVMTDsNCi0JfQ0KLQ0KLQ0KLX0NCi0NCi0NCi1JRlhKU19SdW50aW1lKiBDUERGRG9jX0Vudmlyb25tZW50OjpHZXRKU1J1bnRpbWUoKQ0KLXsNCi0JaWYoIUlzSlNJbml0aWF0ZWQoKSkNCi0JCXJldHVybiBOVUxMOw0KLQlhc3NlcnQobV9wSlNSdW50aW1lRmFjdG9yeSk7DQotCWlmKCFtX3BKU1J1bnRpbWUpDQotCQltX3BKU1J1bnRpbWUgPSBtX3BKU1J1bnRpbWVGYWN0b3J5LT5OZXdKU1J1bnRpbWUodGhpcyk7DQotCXJldHVybiBtX3BKU1J1bnRpbWU7DQotfQ0KLQ0KLUNQREZTREtfQW5ub3RIYW5kbGVyTWdyKiBDUERGRG9jX0Vudmlyb25tZW50OjpHZXRBbm5vdEhhbmRsZXJNZ3IoKQ0KLXsNCi0JaWYoIW1fcEFubm90SGFuZGxlck1ncikNCi0JCW1fcEFubm90SGFuZGxlck1nciA9IG5ldyBDUERGU0RLX0Fubm90SGFuZGxlck1ncih0aGlzKTsNCi0JcmV0dXJuIG1fcEFubm90SGFuZGxlck1ncjsNCi19DQotDQotQ1BERlNES19BY3Rpb25IYW5kbGVyKiBDUERGRG9jX0Vudmlyb25tZW50OjpHZXRBY3Rpb25IYW5kZXIoKQ0KLXsNCi0JaWYoIW1fcEFjdGlvbkhhbmRsZXIpDQotCQltX3BBY3Rpb25IYW5kbGVyID0gbmV3IENQREZTREtfQWN0aW9uSGFuZGxlcih0aGlzKTsNCi0JcmV0dXJuIG1fcEFjdGlvbkhhbmRsZXI7DQotfQ0KLQ0KLWludCBDUERGRG9jX0Vudmlyb25tZW50OjpSZWdBcHBIYW5kbGUoRlBERl9GT1JNRklMTElORk8qIHBGRmluZm8pDQotew0KLQltX3BJbmZvICA9IHBGRmluZm87IA0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotQ1BERlNES19Eb2N1bWVudCogQ1BERkRvY19FbnZpcm9ubWVudDo6R2V0Q3VycmVudERvYygpDQotew0KLQlyZXR1cm4gbV9wU0RLRG9jOw0KLX0NCi0NCi1DRkZMX0lGb3JtRmlsbGVyKiBDUERGRG9jX0Vudmlyb25tZW50OjpHZXRJRm9ybUZpbGxlcigpDQotew0KLQlpZighbV9wSUZvcm1GaWxsZXIpDQotCQltX3BJRm9ybUZpbGxlciA9IG5ldyBDRkZMX0lGb3JtRmlsbGVyKHRoaXMpOw0KLQlyZXR1cm4gbV9wSUZvcm1GaWxsZXI7DQotfQ0KLQ0KLUZYX0JPT0wJQ1BERkRvY19FbnZpcm9ubWVudDo6SXNKU0luaXRpYXRlZCgpDQotew0KLQlpZihtX3BJbmZvKQ0KLQl7DQotCQlpZihtX3BJbmZvLT5tX3BKc1BsYXRmb3JtKQ0KLQkJCXJldHVybiBUUlVFOw0KLQkJZWxzZQ0KLQkJCXJldHVybiBGQUxTRTsNCi0JfQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUNQREZTREtfRG9jdW1lbnQ6OkNQREZTREtfRG9jdW1lbnQoQ1BERl9Eb2N1bWVudCogcERvYyxDUERGRG9jX0Vudmlyb25tZW50KiBwRW52KTptX3BEb2MocERvYyksDQotCQkJCQkJbV9wSW50ZXJGb3JtKE5VTEwpLG1fcEVudihwRW52KSxtX3BPY2NvbnRlbnQoTlVMTCksbV9iQ2hhbmdlTWFzayhGQUxTRSkNCi17DQotCW1fcEZvY3VzQW5ub3QgPSBOVUxMOw0KLX0NCi0NCi1DUERGU0RLX0RvY3VtZW50Ojp+Q1BERlNES19Eb2N1bWVudCgpDQotew0KLQltX3BhZ2VNYXAuUmVtb3ZlQWxsKCk7DQotCWlmKG1fcEludGVyRm9ybSkNCi0Jew0KLQkJbV9wSW50ZXJGb3JtLT5EZXN0cm95KCk7DQotCQltX3BJbnRlckZvcm0gPSBOVUxMOw0KLQl9DQotCWlmKG1fcE9jY29udGVudCkNCi0Jew0KLQkJZGVsZXRlIG1fcE9jY29udGVudDsNCi0JCW1fcE9jY29udGVudCA9IE5VTEw7DQotCX0NCi19DQotDQotdm9pZCBDUERGU0RLX0RvY3VtZW50OjpJbml0UGFnZVZpZXcoKQ0KLXsNCi0JaW50IG5Db3VudCA9IG1fcERvYy0+R2V0UGFnZUNvdW50KCk7DQotCWZvcihpbnQgaT0wOyBpPG5Db3VudDsgaSsrKQ0KLQl7DQotCS8vIFRvIGRvDQotLy8JCUNQREZfRGljdGlvbmFyeSogcERpYyA9IG1fcERvYy0+R2V0UGFnZShpKTsNCi0vLwkJbV9wYWdlTWFwLlNldEF0KHBEaWMsIHBQYWdlVmlldyk7DQotCX0NCi19DQotDQotdm9pZCBDUERGU0RLX0RvY3VtZW50OjpBZGRQYWdlVmlldyhDUERGX1BhZ2UqIHBQREZQYWdlLCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcpDQotew0KLQltX3BhZ2VNYXAuU2V0QXQocFBERlBhZ2UsIHBQYWdlVmlldyk7DQotfQ0KLQ0KLUNQREZTREtfUGFnZVZpZXcqIENQREZTREtfRG9jdW1lbnQ6OkdldFBhZ2VWaWV3KENQREZfUGFnZSogcFBERlBhZ2UsIEZYX0JPT0wgUmVOZXcpDQotew0KLQlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcgPSAoQ1BERlNES19QYWdlVmlldyopbV9wYWdlTWFwLkdldFZhbHVlQXQocFBERlBhZ2UpOw0KLQlpZihwUGFnZVZpZXcgIT0gTlVMTCkNCi0JCXJldHVybiBwUGFnZVZpZXc7DQotCWlmKFJlTmV3KQ0KLQl7DQotCQlwUGFnZVZpZXcgPSBuZXcgQ1BERlNES19QYWdlVmlldyh0aGlzLHBQREZQYWdlKTsNCi0JCW1fcGFnZU1hcC5TZXRBdChwUERGUGFnZSwgcFBhZ2VWaWV3KTsNCi0JCS8vRGVsYXkgdG8gbG9hZCBhbGwgdGhlIGFubm90YXRpb25zLCB0byBhdm9pZCBlbmRsZXNzIGxvb3AuDQotCQlwUGFnZVZpZXctPkxvYWRGWEFubm90cygpOw0KLQl9DQotCXJldHVybiBwUGFnZVZpZXc7DQotDQotfQ0KLQ0KLUNQREZTREtfUGFnZVZpZXcqIENQREZTREtfRG9jdW1lbnQ6OkdldEN1cnJlbnRWaWV3KCkNCi17DQotCUNQREZfUGFnZSAqIHBQYWdlID0gKENQREZfUGFnZSAqKW1fcEVudi0+RkZJX0dldEN1cnJlbnRQYWdlKG1fcERvYyk7DQotCWlmKHBQYWdlKQ0KLQkJcmV0dXJuIHRoaXMtPkdldFBhZ2VWaWV3KHBQYWdlLCBUUlVFKTsNCi0JcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLUNQREZTREtfUGFnZVZpZXcqIENQREZTREtfRG9jdW1lbnQ6OkdldFBhZ2VWaWV3KGludCBuSW5kZXgpDQotew0KLQlDUERGU0RLX1BhZ2VWaWV3ICogcFRlbXBQYWdlVmlldyA9IE5VTEw7DQotCUNQREZfUGFnZSAqIHBUZW1wUGFnZSA9IChDUERGX1BhZ2UqKW1fcEVudi0+RkZJX0dldFBhZ2UobV9wRG9jLG5JbmRleCk7DQotCWlmKCFwVGVtcFBhZ2UpDQotCQlyZXR1cm4gTlVMTDsNCi0NCi0JbV9wYWdlTWFwLkxvb2t1cChwVGVtcFBhZ2UsIHBUZW1wUGFnZVZpZXcpOw0KLQkNCi0JQVNTRVJUKHBUZW1wUGFnZVZpZXcgIT0gTlVMTCk7DQotCQ0KLQlyZXR1cm4gcFRlbXBQYWdlVmlldzsNCi19DQotDQotdm9pZCBDUERGU0RLX0RvY3VtZW50OjogUHJvY0phdmFzY3JpcHRGdW4oKQ0KLXsNCi0JQ1BERl9Eb2N1bWVudCogcFBERkRvYyA9IHRoaXMtPkdldERvY3VtZW50KCk7DQotCUNQREZfRG9jSlNBY3Rpb25zIGRvY0pTKHBQREZEb2MpOw0KLQlpbnQgaUNvdW50ID0gZG9jSlMuQ291bnRKU0FjdGlvbnMoKTsNCi0JaWYgKGlDb3VudCA8IDEpIHJldHVybjsNCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspDQotCXsNCi0JCUNGWF9CeXRlU3RyaW5nIGNzSlNOYW1lOw0KLQkJQ1BERl9BY3Rpb24ganNBY3Rpb24gPSBkb2NKUy5HZXRKU0FjdGlvbihpLCBjc0pTTmFtZSk7DQotCQlpZihtX3BFbnYtPkdldEFjdGlvbkhhbmRlcigpKQ0KLQkJCW1fcEVudi0+R2V0QWN0aW9uSGFuZGVyKCktPkRvQWN0aW9uX0phdmFTY3JpcHQoanNBY3Rpb24sQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChjc0pTTmFtZSksdGhpcyk7DQotCX0NCi0JDQotfQ0KLQ0KLUZYX0JPT0wgQ1BERlNES19Eb2N1bWVudDo6UHJvY09wZW5BY3Rpb24oKQ0KLXsNCi0JaWYoIW1fcERvYykgcmV0dXJuIEZBTFNFOw0KLQkNCi0JQ1BERl9EaWN0aW9uYXJ5KiBwUm9vdCA9IG1fcERvYy0+R2V0Um9vdCgpOwkNCi0JaWYgKCFwUm9vdCkJcmV0dXJuIEZBTFNFOw0KLQlDUERGX09iamVjdCogcE9wZW5BY3Rpb24gPSBwUm9vdC0+R2V0RGljdCgiT3BlbkFjdGlvbiIpOy8vDQotCWlmKCFwT3BlbkFjdGlvbikgcE9wZW5BY3Rpb24gPSBwUm9vdC0+R2V0QXJyYXkoIk9wZW5BY3Rpb24iKTsvLw0KLQlpZighcE9wZW5BY3Rpb24pIHJldHVybiBGQUxTRTsNCi0JDQotCWlmKHBPcGVuQWN0aW9uLT5HZXRUeXBlKCk9PVBERk9CSl9BUlJBWSkNCi0JewkNCi0JfQ0KLQllbHNlIGlmKHBPcGVuQWN0aW9uLT5HZXRUeXBlKCk9PVBERk9CSl9ESUNUSU9OQVJZKQ0KLQl7CQ0KLQkJQ1BERl9EaWN0aW9uYXJ5ICogcERpY3Q9KENQREZfRGljdGlvbmFyeSopcE9wZW5BY3Rpb247CQ0KLQkJQ1BERl9BY3Rpb24gQWN0aW9uID0gcERpY3Q7DQotCQkNCi0JCWlmKG1fcEVudi0+R2V0QWN0aW9uSGFuZGVyKCkpDQotCQkJbV9wRW52LT5HZXRBY3Rpb25IYW5kZXIoKS0+RG9BY3Rpb25fRG9jT3BlbihBY3Rpb24sdGhpcyk7CQkNCi0JfQkNCi0JZWxzZQ0KLQl7DQotCQlyZXR1cm4gRkFMU0U7CQkJDQotCX0JDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1DUERGX09DQ29udGV4dCoJQ1BERlNES19Eb2N1bWVudDo6R2V0T0NDb250ZXh0KCkNCi17DQotCWlmKCFtX3BPY2NvbnRlbnQpDQotCQltX3BPY2NvbnRlbnQgPSBuZXcgQ1BERl9PQ0NvbnRleHQobV9wRG9jKTsNCi0JcmV0dXJuIG1fcE9jY29udGVudDsNCi19DQotDQotdm9pZCBDUERGU0RLX0RvY3VtZW50OjpSZU1vdmVQYWdlVmlldyhDUERGX1BhZ2UqIHBQREZQYWdlKQ0KLXsNCi0JQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gKENQREZTREtfUGFnZVZpZXcqKW1fcGFnZU1hcC5HZXRWYWx1ZUF0KHBQREZQYWdlKTsNCi0JaWYocFBhZ2VWaWV3KQ0KLQl7DQotCQlkZWxldGUgcFBhZ2VWaWV3Ow0KLQkJbV9wYWdlTWFwLlJlbW92ZUtleShwUERGUGFnZSk7DQotCX0NCi19DQotDQotQ1BERl9QYWdlICogQ1BERlNES19Eb2N1bWVudDo6R2V0UGFnZShpbnQgbkluZGV4KQ0KLXsNCi0JQ1BERl9QYWdlICogcFRlbXBQYWdlID0gKENQREZfUGFnZSopbV9wRW52LT5GRklfR2V0UGFnZShtX3BEb2MsbkluZGV4KTsNCi0JaWYoIXBUZW1wUGFnZSkNCi0JCXJldHVybiBOVUxMOw0KLQlyZXR1cm4gcFRlbXBQYWdlOw0KLX0NCi0NCi1DUERGU0RLX0ludGVyRm9ybSogQ1BERlNES19Eb2N1bWVudDo6R2V0SW50ZXJGb3JtKCkNCi17DQotCWlmKCFtX3BJbnRlckZvcm0pDQotCQltX3BJbnRlckZvcm0gPSBuZXcgQ1BERlNES19JbnRlckZvcm0odGhpcyk7DQotCXJldHVybiBtX3BJbnRlckZvcm07DQotfQ0KLQ0KLXZvaWQgQ1BERlNES19Eb2N1bWVudDo6VXBkYXRlQWxsVmlld3MoQ1BERlNES19QYWdlVmlldyogcFNlbmRlciwgQ1BERlNES19Bbm5vdCogcEFubm90KQ0KLXsNCi0JDQotCUZYX1BPU0lUSU9OIHBvcyA9IG1fcGFnZU1hcC5HZXRTdGFydFBvc2l0aW9uKCk7DQotCUNQREZfUGFnZSAqIHBQYWdlID0gTlVMTDsNCi0JQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldyA9IE5VTEw7DQotCXdoaWxlKHBvcykNCi0Jew0KLQkJbV9wYWdlTWFwLkdldE5leHRBc3NvYyhwb3MsIHBQYWdlLCBwUGFnZVZpZXcpOw0KLQ0KLQkJaWYocFBhZ2VWaWV3ICE9IHBTZW5kZXIpDQotCQl7DQotCQkJcFBhZ2VWaWV3LT5VcGRhdGVWaWV3KHBBbm5vdCk7DQotCQl9DQotCX0NCi19DQotDQotQ1BERlNES19Bbm5vdCogQ1BERlNES19Eb2N1bWVudDo6R2V0Rm9jdXNBbm5vdCgpDQotew0KLQlyZXR1cm4gdGhpcy0+bV9wRm9jdXNBbm5vdDsJDQotfQ0KLQ0KLUZYX0JPT0wgQ1BERlNES19Eb2N1bWVudDo6U2V0Rm9jdXNBbm5vdChDUERGU0RLX0Fubm90KiBwQW5ub3QsRlhfVUlOVCBuRmxhZykNCi17DQotDQotCWlmKG1fcEZvY3VzQW5ub3Q9PXBBbm5vdCkgcmV0dXJuIFRSVUU7DQotCQ0KLQlpZihtX3BGb2N1c0Fubm90KQ0KLQl7DQotCQlpZighdGhpcy0+S2lsbEZvY3VzQW5ub3QobkZsYWcpICkgcmV0dXJuIEZBTFNFOwkNCi0JfQ0KLQlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcgPSBwQW5ub3QtPkdldFBhZ2VWaWV3KCk7DQotCWlmKHBBbm5vdCAmJiBwUGFnZVZpZXctPklzVmFsaWQoKSkNCi0Jew0KLQkJQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3IgKnBBbm5vdEhhbmRsZXI9bV9wRW52LT5HZXRBbm5vdEhhbmRsZXJNZ3IoKTsNCi0NCi0JCWlmKHBBbm5vdEhhbmRsZXImJiFtX3BGb2N1c0Fubm90KQ0KLQkJew0KLQkJCWlmICghcEFubm90SGFuZGxlci0+QW5ub3RfT25TZXRGb2N1cyhwQW5ub3QsbkZsYWcpKQ0KLQkJCQlyZXR1cm4gRkFMU0U7DQotCQkJaWYoIW1fcEZvY3VzQW5ub3QpDQotCQkJew0KLQkJCQl0aGlzLT5tX3BGb2N1c0Fubm90PXBBbm5vdDsNCi0JCQkJcmV0dXJuIFRSVUU7DQotCQkJfQ0KLQkJfQkJCQ0KLQl9DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBDUERGU0RLX0RvY3VtZW50OjpLaWxsRm9jdXNBbm5vdChGWF9VSU5UIG5GbGFnKQ0KLXsNCi0JaWYobV9wRm9jdXNBbm5vdCkNCi0Jew0KLQkJQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3IgKnBBbm5vdEhhbmRsZXI9bV9wRW52LT5HZXRBbm5vdEhhbmRsZXJNZ3IoKTsNCi0JCWlmKHBBbm5vdEhhbmRsZXIpDQotCQl7DQotCQkJQ1BERlNES19Bbm5vdCogcEZvY3VzQW5ub3QgPSBtX3BGb2N1c0Fubm90Ow0KLQkJCW1fcEZvY3VzQW5ub3QgPSBOVUxMOw0KLQkJCWlmKHBBbm5vdEhhbmRsZXItPkFubm90X09uS2lsbEZvY3VzKHBGb2N1c0Fubm90LCBuRmxhZykpDQotCQkJew0KLQkJCQkNCi0JCQkJaWYocEZvY3VzQW5ub3QtPkdldFR5cGUoKSA9PSBGWF9CU1RSQygiV2lkZ2V0IikpDQotCQkJCXsNCi0JCQkJCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gKENQREZTREtfV2lkZ2V0KilwRm9jdXNBbm5vdDsNCi0JCQkJCWludCBuRmllbGRUeXBlID0gcFdpZGdldC0+R2V0RmllbGRUeXBlKCk7DQotCQkJCQlpZihGSUVMRFRZUEVfVEVYVEZJRUxEID09IG5GaWVsZFR5cGUgfHwgRklFTERUWVBFX0NPTUJPQk9YID09IG5GaWVsZFR5cGUpDQotCQkJCQkJbV9wRW52LT5GRklfT25TZXRGaWVsZElucHV0Rm9jdXMoTlVMTCwgTlVMTCwgMCwgRkFMU0UpOw0KLQkJCQl9DQotDQotCQkJCWlmKCFtX3BGb2N1c0Fubm90KQ0KLQkJCQkJcmV0dXJuIFRSVUU7DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCW1fcEZvY3VzQW5ub3QgPSBwRm9jdXNBbm5vdDsNCi0JCQl9DQotCQl9DQotCX0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MCUNQREZTREtfRG9jdW1lbnQ6OkRlbGV0ZVBhZ2VzKGludCBuU3RhcnQsIGludCAgbkNvdW50KQ0KLXsNCi0JaWYgKCBuU3RhcnQgPCAwIHx8IG5TdGFydCA+PSBHZXRQYWdlQ291bnQoKSB8fCBuQ291bnQgPD0gMCApDQotCXsNCi0JCXJldHVybiBGQUxTRTsNCi0JfQ0KLQ0KLQlDUERGX1BhZ2UgKiBwVGVtcFBhZ2UgPSBOVUxMOw0KLQlmb3IgKCBpbnQgaSA9IG5Db3VudC0xOyBpID49IDA7IGktLSApDQotCXsNCi0JCXBUZW1wUGFnZSA9IEdldFBhZ2UoblN0YXJ0K2kpOw0KLQkJaWYgKCBwVGVtcFBhZ2UgIT0gTlVMTCApDQotCQl7DQotCQkJUmVNb3ZlUGFnZVZpZXcocFRlbXBQYWdlKTsNCi0JCX0NCi0JfQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotdm9pZCBDUERGU0RLX0RvY3VtZW50OjpPbkNsb3NlRG9jdW1lbnQoKQ0KLXsNCi0JS2lsbEZvY3VzQW5ub3QoKTsNCi19DQotDQotRlhfQk9PTCBDUERGU0RLX0RvY3VtZW50OjpHZXRQZXJtaXNzaW9ucyhpbnQgbkZsYWcpDQotew0KLQlGWF9EV09SRCBkd1Blcm1pc3Npb25zID0gbV9wRG9jLT5HZXRVc2VyUGVybWlzc2lvbnMoKTsNCi0JcmV0dXJuIGR3UGVybWlzc2lvbnMmbkZsYWc7DQotfQ0KLQ0KLUlGWEpTX1J1bnRpbWUgKiBDUERGU0RLX0RvY3VtZW50OjpHZXRKc1J1bnRpbWUoKQ0KLXsNCi0JQVNTRVJUKG1fcEVudiE9TlVMTCk7DQotCXJldHVybiBtX3BFbnYtPkdldEpTUnVudGltZSgpOw0KLX0NCi0NCi1DRlhfV2lkZVN0cmluZwlDUERGU0RLX0RvY3VtZW50OjpHZXRQYXRoKCkgDQotew0KLQlBU1NFUlQobV9wRW52ICE9IE5VTEwpOw0KLQlyZXR1cm4gbV9wRW52LT5KU19kb2NHZXRGaWxlUGF0aCgpOw0KLX0NCi0NCi0NCi1DUERGU0RLX1BhZ2VWaWV3OjpDUERGU0RLX1BhZ2VWaWV3KENQREZTREtfRG9jdW1lbnQqIHBTREtEb2MsQ1BERl9QYWdlKiBwYWdlKTptX3BTREtEb2MocFNES0RvYyksbV9wYWdlKHBhZ2UpDQotew0KLQlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IHBTREtEb2MtPkdldEludGVyRm9ybSgpOw0KLQlpZihwSW50ZXJGb3JtKQ0KLQl7DQotCQlDUERGX0ludGVyRm9ybSogcFBERkludGVyRm9ybSA9IHBJbnRlckZvcm0tPkdldEludGVyRm9ybSgpOw0KLQkJcFBERkludGVyRm9ybS0+Rml4UGFnZUZpZWxkcyhwYWdlKTsNCi0JfQ0KLQ0KLQltX2Z4QW5ub3RBcnJheS5SZW1vdmVBbGwoKTsNCi0NCi0JbV9iRW50ZXJXaWRnZXQgPSBGQUxTRTsNCi0JbV9iRXhpdFdpZGdldCA9IEZBTFNFOw0KLQltX2JPbldpZGdldCA9IEZBTFNFOw0KLQltX0NhcHR1cmVXaWRnZXQgPSBOVUxMOw0KLQltX2JWYWxpZCA9IEZBTFNFOw0KLX0NCi0NCi1DUERGU0RLX1BhZ2VWaWV3Ojp+Q1BERlNES19QYWdlVmlldygpDQotew0KLQlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gbV9wU0RLRG9jLT5HZXRFbnYoKTsJDQotCWludCBuQW5ub3RDb3VudCA9IG1fZnhBbm5vdEFycmF5LkdldFNpemUoKTsNCi0JZm9yIChpbnQgaT0wOyBpPG5Bbm5vdENvdW50OyBpKyspDQotCXsNCi0JCUNQREZTREtfQW5ub3QqIHBBbm5vdCA9IChDUERGU0RLX0Fubm90KiltX2Z4QW5ub3RBcnJheS5HZXRBdChpKTsNCi0JCS8vaWYgdGhlcmUgaXMgYSBmb2N1c2VkIGFubm90IG9uIHRoZSBwYWdlLCB3ZSBzaG91bGQga2lsbCB0aGUgZm9jdXMgZmlyc3QuDQotCQlpZihwQW5ub3QgPT0gbV9wU0RLRG9jLT5HZXRGb2N1c0Fubm90KCkpDQotCQkJS2lsbEZvY3VzQW5ub3QoKTsNCi0JCUNQREZTREtfQW5ub3RIYW5kbGVyTWdyKiBwQW5ub3RIYW5kbGVyTWdyID0gcEVudi0+R2V0QW5ub3RIYW5kbGVyTWdyKCk7DQotCQlBU1NFUlQocEFubm90SGFuZGxlck1ncik7DQotCQlwQW5ub3RIYW5kbGVyTWdyLT5SZWxlYXNlQW5ub3QocEFubm90KTsNCi0JfQ0KLQltX2Z4QW5ub3RBcnJheS5SZW1vdmVBbGwoKTsNCi0JaWYobV9wQW5ub3RMaXN0KQ0KLQl7DQotCQlkZWxldGUgbV9wQW5ub3RMaXN0Ow0KLQkJbV9wQW5ub3RMaXN0ID0gTlVMTDsNCi0JfQ0KLX0NCi0NCi12b2lkIENQREZTREtfUGFnZVZpZXc6OlBhZ2VWaWV3X09uRHJhdyhDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLENQREZfUmVuZGVyT3B0aW9ucyogcE9wdGlvbnMpDQotew0KLQltX2N1ck1hdHJpeCA9ICpwVXNlcjJEZXZpY2U7DQotCQ0KLQkvLwltX3BBbm5vdExpc3QtPkRpc3BsYXlBbm5vdHMobV9wYWdlLCBwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIEZBTFNFLCBwT3B0aW9ucyk7DQotCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBtX3BTREtEb2MtPkdldEVudigpOw0KLQlDUERGU0RLX0Fubm90SXRlcmF0b3IgYW5ub3RJdGVyYXRvcih0aGlzLCBUUlVFKTsNCi0JQ1BERlNES19Bbm5vdCAqIHBTREtBbm5vdD1OVUxMOw0KLQlpbnQgaW5kZXg9LTE7DQotCXdoaWxlKChwU0RLQW5ub3QgPSBhbm5vdEl0ZXJhdG9yLk5leHQoaW5kZXgpKSkNCi0Jew0KLQkJQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3IqIHBBbm5vdEhhbmRsZXJNZ3IgPSBwRW52LT5HZXRBbm5vdEhhbmRsZXJNZ3IoKTsNCi0JCUFTU0VSVChwQW5ub3RIYW5kbGVyTWdyKTsNCi0JCXBBbm5vdEhhbmRsZXJNZ3ItPkFubm90X09uRHJhdyh0aGlzLCBwU0RLQW5ub3QsIHBEZXZpY2UsIHBVc2VyMkRldmljZSwgMCk7DQotCX0NCi0NCi19DQotDQotQ1BERl9Bbm5vdCogQ1BERlNES19QYWdlVmlldzo6R2V0UERGQW5ub3RBdFBvaW50KEZYX0ZMT0FUIHBhZ2VYLCBGWF9GTE9BVCBwYWdlWSkNCi17DQotCQ0KLQlpbnQgbkNvdW50ID0gbV9wQW5ub3RMaXN0LT5Db3VudCgpOw0KLQlmb3IoaW50IGkgPSAwIDsgaTxuQ291bnQ7IGkrKykNCi0Jew0KLQkJQ1BERl9Bbm5vdCogcEFubm90ID0gbV9wQW5ub3RMaXN0LT5HZXRBdChpKTsNCi0JCUNGWF9GbG9hdFJlY3QgYW5ub3RSZWN0Ow0KLQkJcEFubm90LT5HZXRSZWN0KGFubm90UmVjdCk7DQotCQlpZihhbm5vdFJlY3QuQ29udGFpbnMocGFnZVgsIHBhZ2VZKSkNCi0JCQlyZXR1cm4gcEFubm90Ow0KLQl9DQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi1DUERGX0Fubm90KiBDUERGU0RLX1BhZ2VWaWV3OjpHZXRQREZXaWRnZXRBdFBvaW50KEZYX0ZMT0FUIHBhZ2VYLCBGWF9GTE9BVCBwYWdlWSkNCi17DQotCQ0KLQlpbnQgbkNvdW50ID0gbV9wQW5ub3RMaXN0LT5Db3VudCgpOw0KLQlmb3IoaW50IGkgPSAwIDsgaTxuQ291bnQ7IGkrKykNCi0Jew0KLQkJQ1BERl9Bbm5vdCogcEFubm90ID0gbV9wQW5ub3RMaXN0LT5HZXRBdChpKTsNCi0JCWlmKHBBbm5vdC0+R2V0U3ViVHlwZSgpID09ICJXaWRnZXQiKQ0KLQkJew0KLQkJCUNGWF9GbG9hdFJlY3QgYW5ub3RSZWN0Ow0KLQkJCXBBbm5vdC0+R2V0UmVjdChhbm5vdFJlY3QpOw0KLQkJCWlmKGFubm90UmVjdC5Db250YWlucyhwYWdlWCwgcGFnZVkpKQ0KLQkJCQlyZXR1cm4gcEFubm90Ow0KLQkJfQ0KLQl9DQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi1DUERGU0RLX0Fubm90KiBDUERGU0RLX1BhZ2VWaWV3OjpHZXRGWEFubm90QXRQb2ludChGWF9GTE9BVCBwYWdlWCwgRlhfRkxPQVQgcGFnZVkpDQotew0KLQ0KLQlDUERGU0RLX0Fubm90SXRlcmF0b3IgYW5ub3RJdGVyYXRvcih0aGlzLCBGQUxTRSk7DQotCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBtX3BTREtEb2MtPkdldEVudigpOw0KLQlDUERGU0RLX0Fubm90SGFuZGxlck1nciogcEFubm90TWdyID0gcEVudi0+R2V0QW5ub3RIYW5kbGVyTWdyKCk7DQotCUNQREZTREtfQW5ub3QqIHBTREtBbm5vdCA9IE5VTEw7DQotCWludCBpbmRleCA9IC0xOw0KLQl3aGlsZSgocFNES0Fubm90ID0gYW5ub3RJdGVyYXRvci5OZXh0KGluZGV4KSkpDQotCXsNCi0JCUNQREZfUmVjdCByYyA9IHBBbm5vdE1nci0+QW5ub3RfT25HZXRWaWV3QkJveCh0aGlzLCBwU0RLQW5ub3QpOw0KLQkJaWYocmMuQ29udGFpbnMocGFnZVgsIHBhZ2VZKSkNCi0JCQlyZXR1cm4gcFNES0Fubm90Ow0KLQl9DQotDQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi1DUERGU0RLX0Fubm90KiBDUERGU0RLX1BhZ2VWaWV3OjpHZXRGWFdpZGdldEF0UG9pbnQoRlhfRkxPQVQgcGFnZVgsIEZYX0ZMT0FUIHBhZ2VZKQ0KLXsNCi0NCi0JQ1BERlNES19Bbm5vdEl0ZXJhdG9yIGFubm90SXRlcmF0b3IodGhpcywgRkFMU0UpOw0KLQlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gbV9wU0RLRG9jLT5HZXRFbnYoKTsNCi0JQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3IqIHBBbm5vdE1nciA9IHBFbnYtPkdldEFubm90SGFuZGxlck1ncigpOw0KLQlDUERGU0RLX0Fubm90KiBwU0RLQW5ub3QgPSBOVUxMOw0KLQlpbnQgaW5kZXggPSAtMTsNCi0Jd2hpbGUoKHBTREtBbm5vdCA9IGFubm90SXRlcmF0b3IuTmV4dChpbmRleCkpKQ0KLQl7DQotCQlpZihwU0RLQW5ub3QtPkdldFR5cGUoKSA9PSAiV2lkZ2V0IikNCi0JCXsJDQotCQkJcEFubm90TWdyLT5Bbm5vdF9PbkdldFZpZXdCQm94KHRoaXMsIHBTREtBbm5vdCk7DQotCQkJQ1BERl9Qb2ludCBwb2ludChwYWdlWCwgcGFnZVkpOw0KLQkJCWlmIChwQW5ub3RNZ3ItPkFubm90X09uSGl0VGVzdCh0aGlzLCBwU0RLQW5ub3QsIHBvaW50KSkNCi0vLwkJCWlmKHJjLkNvbnRhaW5zKHBhZ2VYLCBwYWdlWSkpDQotCQkJCXJldHVybiBwU0RLQW5ub3Q7DQotCQl9DQotCX0NCi0JDQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi0NCi1GWF9CT09MIENQREZTREtfUGFnZVZpZXc6OkFubm90X0hhc0FwcGVhcmFuY2UoQ1BERl9Bbm5vdCogcEFubm90KQ0KLXsNCi0JQ1BERl9EaWN0aW9uYXJ5KiBwQW5ub3REaWMgPSBwQW5ub3QtPm1fcEFubm90RGljdDsNCi0JaWYocEFubm90RGljKQ0KLQkJcmV0dXJuCXBBbm5vdERpYy0+S2V5RXhpc3QoIkFTIik7DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotQ1BERlNES19Bbm5vdCoJQ1BERlNES19QYWdlVmlldzo6QWRkQW5ub3QoQ1BERl9Bbm5vdCAqIHBQREZBbm5vdCkNCi17DQotCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBtX3BTREtEb2MtPkdldEVudigpOw0KLQlBU1NFUlQocEVudik7DQotCUNQREZTREtfQW5ub3RIYW5kbGVyTWdyICogcEFubm90SGFuZGxlcj0gcEVudi0+R2V0QW5ub3RIYW5kbGVyTWdyKCk7CQ0KLQkNCi0JQ1BERlNES19Bbm5vdCogcFNES0Fubm90ID1OVUxMOw0KLQkNCi0JaWYocEFubm90SGFuZGxlcikNCi0Jew0KLQkJcFNES0Fubm90ID0gcEFubm90SGFuZGxlci0+TmV3QW5ub3QocFBERkFubm90LCB0aGlzKTsNCi0JfQ0KLQlpZighcFNES0Fubm90KQkgDQotCQlyZXR1cm4gTlVMTDsNCi0NCi0JbV9meEFubm90QXJyYXkuQWRkKHBTREtBbm5vdCk7CQ0KLQkJDQotCWlmKHBBbm5vdEhhbmRsZXIpDQotCXsJIAkJIAkgDQotCQlwQW5ub3RIYW5kbGVyLT5Bbm5vdF9PbkNyZWF0ZShwU0RLQW5ub3QpOw0KLQkJDQotCX0NCi0NCi0JIHJldHVybiBwU0RLQW5ub3Q7DQotfQ0KLQ0KLUNQREZTREtfQW5ub3QqIENQREZTREtfUGFnZVZpZXc6OkFkZEFubm90KENQREZfRGljdGlvbmFyeSAqIHBEaWN0KQ0KLXsNCi0JaWYocERpY3QpICANCi0JCXJldHVybiB0aGlzLT5BZGRBbm5vdChwRGljdC0+R2V0U3RyaW5nKCJTdWJ0eXBlIikscERpY3QpOw0KLQkgcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLUNQREZTREtfQW5ub3QqIENQREZTREtfUGFnZVZpZXc6OkFkZEFubm90KEZYX0xQQ1NUUiBscFN1YlR5cGUsQ1BERl9EaWN0aW9uYXJ5ICogcERpY3QpDQotew0KLQlyZXR1cm4gTlVMTDsNCi19DQotDQotRlhfQk9PTCAgQ1BERlNES19QYWdlVmlldzo6RGVsZXRlQW5ub3QoQ1BERlNES19Bbm5vdCogcEFubm90KQ0KLXsNCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1DUERGX0RvY3VtZW50KiBDUERGU0RLX1BhZ2VWaWV3OjpHZXRQREZEb2N1bWVudCgpDQotew0KLQlpZihtX3BhZ2UpDQotCXsNCi0JCXJldHVybiBtX3BhZ2UtPm1fcERvY3VtZW50Ow0KLQl9DQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi1pbnQJQ1BERlNES19QYWdlVmlldzo6Q291bnRBbm5vdHMoKQ0KLXsNCi0JcmV0dXJuIG1fcEFubm90TGlzdC0+Q291bnQoKTsNCi19DQotDQotQ1BERlNES19Bbm5vdCoJQ1BERlNES19QYWdlVmlldzo6R2V0QW5ub3QoaW50IG5JbmRleCkNCi17DQotCWludCBuQ291bnQgPSBtX2Z4QW5ub3RBcnJheS5HZXRTaXplKCk7DQotCWlmICggbkluZGV4IDwgMCB8fCBuSW5kZXggPj0gbkNvdW50ICkNCi0Jew0KLQkJcmV0dXJuIE5VTEw7DQotCX0NCi0NCi0JcmV0dXJuIChDUERGU0RLX0Fubm90KiltX2Z4QW5ub3RBcnJheS5HZXRBdChuSW5kZXgpOw0KLX0NCi0NCi1DUERGU0RLX0Fubm90KiBDUERGU0RLX1BhZ2VWaWV3OjpHZXRBbm5vdEJ5RGljdChDUERGX0RpY3Rpb25hcnkgKiBwRGljdCkNCi17DQotCWludCBuQ291bnQgPSBtX2Z4QW5ub3RBcnJheS5HZXRTaXplKCk7DQotIAlmb3IoaW50IGk9MDsgaTxuQ291bnQ7IGkrKykNCi0gCXsNCi0JCUNQREZTREtfQW5ub3QqIHBBbm5vdCA9IChDUERGU0RLX0Fubm90KiltX2Z4QW5ub3RBcnJheS5HZXRBdChpKTsNCi0gCQlpZihwRGljdD09cEFubm90LT5HZXRQREZBbm5vdCgpLT5tX3BBbm5vdERpY3QpIA0KLSAJCQlyZXR1cm4gcEFubm90Ow0KLSAJfQ0KLQlyZXR1cm4gTlVMTDsNCi19DQotDQotRlhfQk9PTCBDUERGU0RLX1BhZ2VWaWV3OjpPbkxCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfVUlOVCBuRmxhZykNCi17DQotCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBtX3BTREtEb2MtPkdldEVudigpOw0KLQlBU1NFUlQocEVudik7DQotCUNQREZTREtfQW5ub3QqIHBGWEFubm90ID0gR2V0RlhXaWRnZXRBdFBvaW50KHBvaW50LngsIHBvaW50LnkpOw0KLQlpZighcEZYQW5ub3QpDQotCXsNCi0JCUtpbGxGb2N1c0Fubm90KG5GbGFnKTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCUNQREZTREtfQW5ub3RIYW5kbGVyTWdyKiBwQW5ub3RIYW5kbGVyTWdyID0gcEVudi0+R2V0QW5ub3RIYW5kbGVyTWdyKCk7DQotCQlBU1NFUlQocEFubm90SGFuZGxlck1ncik7DQotDQotCQlGWF9CT09MIGJSZXQgPSBwQW5ub3RIYW5kbGVyTWdyLT5Bbm5vdF9PbkxCdXR0b25Eb3duKHRoaXMsIHBGWEFubm90LCBuRmxhZyxwb2ludCk7DQotIAkJaWYoYlJldCkNCi0gCQl7DQotIAkJCVNldEZvY3VzQW5ub3QocEZYQW5ub3QpOw0KLSAJCX0NCi0JCXJldHVybiBiUmV0Ow0KLQl9DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotDQotRlhfQk9PTCBDUERGU0RLX1BhZ2VWaWV3OjpPbkxCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX1VJTlQgbkZsYWcpDQotew0KLQlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gbV9wU0RLRG9jLT5HZXRFbnYoKTsNCi0JQVNTRVJUKHBFbnYpOw0KLQlDUERGU0RLX0Fubm90SGFuZGxlck1nciogcEFubm90SGFuZGxlck1nciA9IHBFbnYtPkdldEFubm90SGFuZGxlck1ncigpOw0KLQlBU1NFUlQocEFubm90SGFuZGxlck1ncik7DQotCUNQREZTREtfQW5ub3QqIHBGWEFubm90ID0gR2V0RlhXaWRnZXRBdFBvaW50KHBvaW50LngsIHBvaW50LnkpOw0KLQlDUERGU0RLX0Fubm90KiBwRm9jdXNBbm5vdCA9IEdldEZvY3VzQW5ub3QoKTsNCi0JRlhfQk9PTCBiUmV0ICA9IEZBTFNFOw0KLQlpZihwRm9jdXNBbm5vdCAmJiBwRm9jdXNBbm5vdCAhPSBwRlhBbm5vdCkNCi0Jew0KLQkJLy9MYXN0IGZvY3VzIEFubm90IGdldHMgYSBjaGFuY2UgdG8gaGFuZGxlIHRoZSBldmVudC4NCi0JCWJSZXQgPSBwQW5ub3RIYW5kbGVyTWdyLT5Bbm5vdF9PbkxCdXR0b25VcCh0aGlzLCBwRm9jdXNBbm5vdCwgbkZsYWcscG9pbnQpOw0KLQl9DQotCWlmKHBGWEFubm90ICYmICFiUmV0KQ0KLQl7DQotCQliUmV0ID0gcEFubm90SGFuZGxlck1nci0+QW5ub3RfT25MQnV0dG9uVXAodGhpcywgcEZYQW5ub3QsIG5GbGFnLHBvaW50KTsNCi0JCXJldHVybiBiUmV0Ow0KLQl9DQotCXJldHVybiBiUmV0Ow0KLX0NCi0NCi1GWF9CT09MIENQREZTREtfUGFnZVZpZXc6Ok9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgaW50IG5GbGFnKQ0KLXsNCi0NCi0JQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcFNES0RvYy0+R2V0RW52KCk7DQotCUNQREZTREtfQW5ub3RIYW5kbGVyTWdyKiBwQW5ub3RIYW5kbGVyTWdyID0gcEVudi0+R2V0QW5ub3RIYW5kbGVyTWdyKCk7DQotCUFTU0VSVChwQW5ub3RIYW5kbGVyTWdyKTsNCi0JaWYoQ1BERlNES19Bbm5vdCogcEZYQW5ub3QgPSBHZXRGWFdpZGdldEF0UG9pbnQocG9pbnQueCwgcG9pbnQueSkpDQotCXsNCi0JCWlmKG1fQ2FwdHVyZVdpZGdldCAmJiBtX0NhcHR1cmVXaWRnZXQgIT0gcEZYQW5ub3QpDQotCQl7DQotCQkJbV9iRXhpdFdpZGdldCA9IFRSVUU7DQotCQkJbV9iRW50ZXJXaWRnZXQgPSBGQUxTRTsNCi0JCQlwQW5ub3RIYW5kbGVyTWdyLT5Bbm5vdF9Pbk1vdXNlRXhpdCh0aGlzLCBtX0NhcHR1cmVXaWRnZXQsIG5GbGFnKTsNCi0JCX0NCi0JCW1fQ2FwdHVyZVdpZGdldCA9IChDUERGU0RLX1dpZGdldCopcEZYQW5ub3Q7DQotCQltX2JPbldpZGdldCA9IFRSVUU7DQotCQlpZighbV9iRW50ZXJXaWRnZXQpDQotCQl7DQotCQkJbV9iRW50ZXJXaWRnZXQgPSBUUlVFOw0KLQkJCW1fYkV4aXRXaWRnZXQgPSBGQUxTRTsNCi0JCQlwQW5ub3RIYW5kbGVyTWdyLT5Bbm5vdF9Pbk1vdXNlRW50ZXIodGhpcywgcEZYQW5ub3QsbkZsYWcpOw0KLQkJfQ0KLQkJcEFubm90SGFuZGxlck1nci0+QW5ub3RfT25Nb3VzZU1vdmUodGhpcywgcEZYQW5ub3QsIG5GbGFnLCBwb2ludCk7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCWlmKG1fYk9uV2lkZ2V0KQ0KLQkJewkNCi0JCQltX2JPbldpZGdldCA9IEZBTFNFOw0KLQkJCW1fYkV4aXRXaWRnZXQgPSBUUlVFOw0KLQkJCW1fYkVudGVyV2lkZ2V0ID0gRkFMU0U7DQotCQkJaWYobV9DYXB0dXJlV2lkZ2V0KQ0KLQkJCXsNCi0JCQkJcEFubm90SGFuZGxlck1nci0+QW5ub3RfT25Nb3VzZUV4aXQodGhpcywgbV9DYXB0dXJlV2lkZ2V0LCBuRmxhZyk7DQotCQkJCW1fQ2FwdHVyZVdpZGdldCA9IE5VTEw7DQotCQkJfQ0KLQkJfQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQl9DQotCQ0KLQlyZXR1cm4gRkFMU0U7Ow0KLX0NCi0NCi1GWF9CT09MIENQREZTREtfUGFnZVZpZXc6Ok9uTW91c2VXaGVlbChkb3VibGUgZGVsdGFYLCBkb3VibGUgZGVsdGFZLGNvbnN0IENQREZfUG9pbnQmIHBvaW50LCBpbnQgbkZsYWcpDQotew0KLQlpZihDUERGU0RLX0Fubm90KiBwQW5ub3QgPSBHZXRGWFdpZGdldEF0UG9pbnQocG9pbnQueCwgcG9pbnQueSkpDQotCXsNCi0JCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBtX3BTREtEb2MtPkdldEVudigpOw0KLQkJQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3IqIHBBbm5vdEhhbmRsZXJNZ3IgPSBwRW52LT5HZXRBbm5vdEhhbmRsZXJNZ3IoKTsNCi0JCUFTU0VSVChwQW5ub3RIYW5kbGVyTWdyKTsNCi0JCXJldHVybiBwQW5ub3RIYW5kbGVyTWdyLT5Bbm5vdF9Pbk1vdXNlV2hlZWwodGhpcywgcEFubm90LCBuRmxhZywgKGludClkZWx0YVksIHBvaW50KTsNCi0JfQ0KLQlyZXR1cm4gRkFMU0U7DQotDQotfQ0KLQ0KLUZYX0JPT0wgQ1BERlNES19QYWdlVmlldzo6T25DaGFyKGludCBuQ2hhciwgRlhfVUlOVCBuRmxhZykNCi17DQotCWlmKENQREZTREtfQW5ub3QqIHBBbm5vdCA9IEdldEZvY3VzQW5ub3QoKSkNCi0Jew0KLQkJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcFNES0RvYy0+R2V0RW52KCk7DQotCQlDUERGU0RLX0Fubm90SGFuZGxlck1nciogcEFubm90SGFuZGxlck1nciA9IHBFbnYtPkdldEFubm90SGFuZGxlck1ncigpOw0KLQkJQVNTRVJUKHBBbm5vdEhhbmRsZXJNZ3IpOw0KLQkJcmV0dXJuIHBBbm5vdEhhbmRsZXJNZ3ItPkFubm90X09uQ2hhcihwQW5ub3QsIG5DaGFyLCBuRmxhZyk7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MIENQREZTREtfUGFnZVZpZXc6Ok9uS2V5RG93bihpbnQgbktleUNvZGUsIGludCBuRmxhZykNCi17DQotCWlmKENQREZTREtfQW5ub3QqIHBBbm5vdCA9IEdldEZvY3VzQW5ub3QoKSkNCi0Jew0KLQkJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcFNES0RvYy0+R2V0RW52KCk7DQotCQlDUERGU0RLX0Fubm90SGFuZGxlck1nciogcEFubm90SGFuZGxlck1nciA9IHBFbnYtPkdldEFubm90SGFuZGxlck1ncigpOw0KLQkJQVNTRVJUKHBBbm5vdEhhbmRsZXJNZ3IpOw0KLQkJcmV0dXJuIHBBbm5vdEhhbmRsZXJNZ3ItPkFubm90X09uS2V5RG93bihwQW5ub3QsIG5LZXlDb2RlLCBuRmxhZyk7DQotCX0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MIENQREZTREtfUGFnZVZpZXc6Ok9uS2V5VXAoaW50IG5LZXlDb2RlLCBpbnQgbkZsYWcpDQotew0KLS8vIAlpZihDUERGU0RLX0Fubm90KiBwQW5ub3QgPSBHZXRGb2N1c0Fubm90KCkpDQotLy8gCXsNCi0vLyAJCUNGRkxfSUZvcm1GaWxsZXIqIHBJRm9ybUZpbGxlciA9IGdfcEZvcm1GaWxsQXBwLT5HZXRJRm9ybUZpbGxlcigpOw0KLS8vIAkJcmV0dXJuIHBJRm9ybUZpbGxlci0+T25LZXlVcChwQW5ub3QsIG5LZXlDb2RlLCBuRmxhZyk7DQotLy8gCX0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1leHRlcm4gdm9pZCBDaGVja1VuU3VwcG9ydEFubm90KENQREZfRG9jdW1lbnQgKiBwRG9jLCBDUERGX0Fubm90KiBwUERGQW5ub3QpOw0KLQ0KLXZvaWQgQ1BERlNES19QYWdlVmlldzo6TG9hZEZYQW5ub3RzKCkNCi17DQotCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBtX3BTREtEb2MtPkdldEVudigpOw0KLQ0KLQlGWF9CT09MIGVuYWJsZUFQVXBkYXRlID0gQ1BERl9JbnRlckZvcm06OlVwZGF0aW5nQVBFbmFibGVkKCk7DQotCS8vRGlzYWJsZSB0aGUgZGVmYXVsdCBBUCBjb25zdHJ1Y3Rpb24uDQotCUNQREZfSW50ZXJGb3JtOjpFbmFibGVVcGRhdGVBUChGQUxTRSk7DQotCW1fcEFubm90TGlzdCA9IG5ldyBDUERGX0Fubm90TGlzdChtX3BhZ2UpOw0KLQlDUERGX0ludGVyRm9ybTo6RW5hYmxlVXBkYXRlQVAoZW5hYmxlQVBVcGRhdGUpOw0KLQlpbnQgbkNvdW50ID0gbV9wQW5ub3RMaXN0LT5Db3VudCgpOw0KLQlmb3IoaW50IGk9MDsgaTxuQ291bnQ7IGkrKykNCi0Jew0KLQkJQ1BERl9Bbm5vdCogcFBERkFubm90ID0gbV9wQW5ub3RMaXN0LT5HZXRBdChpKTsNCi0JCUNQREZfRG9jdW1lbnQgKiBwRG9jID0gdGhpcy0+R2V0UERGRG9jdW1lbnQoKTsNCi0JCQ0KLQkJQ2hlY2tVblN1cHBvcnRBbm5vdChwRG9jLCBwUERGQW5ub3QpOw0KLQ0KLQkJQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3IqIHBBbm5vdEhhbmRsZXJNZ3IgPSBwRW52LT5HZXRBbm5vdEhhbmRsZXJNZ3IoKTsNCi0JCUFTU0VSVChwQW5ub3RIYW5kbGVyTWdyICE9IE5VTEwpOw0KLQkJaWYocEFubm90SGFuZGxlck1ncikNCi0JCXsNCi0JCQlDUERGU0RLX0Fubm90KiBwQW5ub3QgPSBwQW5ub3RIYW5kbGVyTWdyLT5OZXdBbm5vdChwUERGQW5ub3QsIHRoaXMpOw0KLQkJCWlmKCFwQW5ub3QpDQotCQkJCWNvbnRpbnVlOw0KLQkJCW1fZnhBbm5vdEFycmF5LkFkZChwQW5ub3QpOw0KLQ0KLQkJCXBBbm5vdEhhbmRsZXJNZ3ItPkFubm90X09uTG9hZChwQW5ub3QpOw0KLQkJfQ0KLQ0KLQl9DQotfQ0KLQ0KLXZvaWQJQ1BERlNES19QYWdlVmlldzo6VXBkYXRlUmVjdHMoQ0ZYX1JlY3RBcnJheSYgcmVjdHMpDQotew0KLQlmb3IoaW50IGk9MDsgaTxyZWN0cy5HZXRTaXplKCk7IGkrKykNCi0Jew0KLQkJQ1BERl9SZWN0IHJjID0gcmVjdHMuR2V0QXQoaSk7DQotCQlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gbV9wU0RLRG9jLT5HZXRFbnYoKTsNCi0JCXBFbnYtPkZGSV9JbnZhbGlkYXRlKG1fcGFnZSwgcmMubGVmdCwgcmMudG9wLCByYy5yaWdodCwgcmMuYm90dG9tKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENQREZTREtfUGFnZVZpZXc6OlVwZGF0ZVZpZXcoQ1BERlNES19Bbm5vdCogcEFubm90KQ0KLXsNCi0JQ1BERl9SZWN0IHJjV2luZG93Ow0KLQ0KLSAJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcFNES0RvYy0+R2V0RW52KCk7CQ0KLS8vIAlDUERGU0RLX0Fubm90SGFuZGxlck1nciogcEFubm90SGFuZGxlciA9IHBFbnYtPkdldEFubm90SGFuZGxlck1ncigpOw0KLQkNCi0JcmNXaW5kb3cgPSBwQW5ub3QtPkdldFJlY3QoKTsvL3BBbm5vdEhhbmRsZXItPkFubm90X09uR2V0Vmlld0JCb3godGhpcyxwQW5ub3QpOwkNCi0JcEVudi0+RkZJX0ludmFsaWRhdGUobV9wYWdlLCByY1dpbmRvdy5sZWZ0LCByY1dpbmRvdy50b3AsIHJjV2luZG93LnJpZ2h0LCByY1dpbmRvdy5ib3R0b20pOw0KLQ0KLX0NCi0NCi1pbnQgQ1BERlNES19QYWdlVmlldzo6R2V0UGFnZUluZGV4KCkNCi17DQotCWlmKG1fcGFnZSkNCi0Jew0KLQkJQ1BERl9EaWN0aW9uYXJ5KiBwRGljID0gbV9wYWdlLT5tX3BGb3JtRGljdDsNCi0JCUNQREZfRG9jdW1lbnQqIHBEb2MgPSBtX3BTREtEb2MtPkdldERvY3VtZW50KCk7DQotCQlpZihwRG9jICYmIHBEaWMpDQotCQl7DQotCQkJcmV0dXJuIHBEb2MtPkdldFBhZ2VJbmRleChwRGljLT5HZXRPYmpOdW0oKSk7DQotCQl9DQotCX0NCi0JcmV0dXJuIC0xOw0KLX0NCi0NCi1GWF9CT09MCUNQREZTREtfUGFnZVZpZXc6OklzVmFsaWRBbm5vdChGWF9MUFZPSUQgcCkNCi17DQotCWlmIChwID09IE5VTEwpIHJldHVybiBGQUxTRTsNCi0JaW50IGlDb3VudCA9IG1fcEFubm90TGlzdC0+Q291bnQoKTsNCi0JZm9yIChpbnQgaSA9IDA7IGkgPCBpQ291bnQ7IGkrKykNCi0Jew0KLQkJaWYgKG1fcEFubm90TGlzdC0+R2V0QXQoaSkgPT0gcCkNCi0JCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLQ0KLUNQREZTREtfQW5ub3QqIENQREZTREtfUGFnZVZpZXc6OkdldEZvY3VzQW5ub3QoKQ0KLXsNCi0JQ1BERlNES19Bbm5vdCogcEZvY3VzQW5ub3QgPSBtX3BTREtEb2MtPkdldEZvY3VzQW5ub3QoKTsNCi0JaWYoIXBGb2N1c0Fubm90KQ0KLQkJcmV0dXJuIE5VTEw7DQotCQ0KLQlmb3IoaW50IGk9MDsgaTxtX2Z4QW5ub3RBcnJheS5HZXRTaXplKCk7IGkrKykNCi0Jew0KLQkJQ1BERlNES19Bbm5vdCogcEFubm90ID0gKENQREZTREtfQW5ub3QqKW1fZnhBbm5vdEFycmF5LkdldEF0KGkpOw0KLQkJaWYocEFubm90ID09IHBGb2N1c0Fubm90KQ0KLQkJCXJldHVybiBwQW5ub3Q7DQotCX0NCi0JcmV0dXJuIE5VTEw7DQotfQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfZGVmaW5lLmgiCisjaW5jbHVkZSAiLi4vaW5jbHVkZS9mc2RrX21nci5oIgorI2luY2x1ZGUgIi4uL2luY2x1ZGUvZnBkZl9leHQuaCIKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2Zvcm1maWxsZXIvRkZMX0Zvcm1GaWxsZXIuaCIKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2phdmFzY3JpcHQvSUphdmFTY3JpcHQuaCIKKworI2lmIF9GWF9PU18gPT0gX0ZYX0FORFJPSURfCisjaW5jbHVkZSAidGltZS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxjdGltZT4KKyNlbmRpZgorCisvL2V4dGVybiBDUERGRG9jX0Vudmlyb25tZW50KiBnX3BGb3JtRmlsbEFwcDsKK2NsYXNzIENGWF9TeXN0ZW1IYW5kbGVyOnB1YmxpYyBJRlhfU3lzdGVtSGFuZGxlcgoreworcHVibGljOgorCUNGWF9TeXN0ZW1IYW5kbGVyKENQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYpOm1fcEVudihwRW52KSxtX25DaGFyU2V0KC0xKSB7fQorcHVibGljOgorCXZpcnR1YWwgdm9pZAkJCQlJbnZhbGlkYXRlUmVjdChGWF9IV05EIGhXbmQsIEZYX1JFQ1QgcmVjdCkgOworCXZpcnR1YWwgdm9pZAkJCQlPdXRwdXRTZWxlY3RlZFJlY3Qodm9pZCogcEZvcm1GaWxsZXIsIENQREZfUmVjdCYgcmVjdCk7CisKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJSXNTZWxlY3Rpb25JbXBsZW1lbnRlZCgpOworCisJdmlydHVhbCBDRlhfV2lkZVN0cmluZwkJR2V0Q2xpcGJvYXJkVGV4dChGWF9IV05EIGhXbmQpe3JldHVybiBMIiI7fQorCXZpcnR1YWwgRlhfQk9PTAkJCQlTZXRDbGlwYm9hcmRUZXh0KEZYX0hXTkQgaFduZCwgQ0ZYX1dpZGVTdHJpbmcgc3RyaW5nKSB7cmV0dXJuIEZBTFNFO30KKwkKKwl2aXJ0dWFsIHZvaWQJCQkJQ2xpZW50VG9TY3JlZW4oRlhfSFdORCBoV25kLCBGWF9JTlQzMiYgeCwgRlhfSU5UMzImIHkpIHt9CisJdmlydHVhbCB2b2lkCQkJCVNjcmVlblRvQ2xpZW50KEZYX0hXTkQgaFduZCwgRlhfSU5UMzImIHgsIEZYX0lOVDMyJiB5KSB7fQorCisJLypjdXJzb3Igc3R5bGUKKwlGWENUX0FSUk9XCQorCUZYQ1RfTkVTVwkJCisJRlhDVF9OV1NFCQkKKwlGWENUX1ZCRUFNCQkKKwlGWENUX0hCRUFNCQkKKwlGWENUX0hBTkQKKwkqLworCXZpcnR1YWwgdm9pZAkJCQlTZXRDdXJzb3IoRlhfSU5UMzIgbkN1cnNvclR5cGUpOworCisJdmlydHVhbCBGWF9ITUVOVQkJCUNyZWF0ZVBvcHVwTWVudSgpIHtyZXR1cm4gTlVMTDt9CisJdmlydHVhbCBGWF9CT09MCQkJCUFwcGVuZE1lbnVJdGVtKEZYX0hNRU5VIGhNZW51LCBGWF9JTlQzMiBuSUROZXdJdGVtLCBDRlhfV2lkZVN0cmluZyBzdHJpbmcpIHtyZXR1cm4gRkFMU0U7fQorCXZpcnR1YWwgRlhfQk9PTAkJCQlFbmFibGVNZW51SXRlbShGWF9ITUVOVSBoTWVudSwgRlhfSU5UMzIgbklESXRlbSwgRlhfQk9PTCBiRW5hYmxlZCkge3JldHVybiBGQUxTRTt9CisJdmlydHVhbCBGWF9JTlQzMgkJCVRyYWNrUG9wdXBNZW51KEZYX0hNRU5VIGhNZW51LCBGWF9JTlQzMiB4LCBGWF9JTlQzMiB5LCBGWF9IV05EIGhQYXJlbnQpIHtyZXR1cm4gLTE7fQorCXZpcnR1YWwgdm9pZAkJCQlEZXN0cm95TWVudShGWF9ITUVOVSBoTWVudSkge30KKworCXZpcnR1YWwgQ0ZYX0J5dGVTdHJpbmcJCUdldE5hdGl2ZVRydWVUeXBlRm9udChGWF9JTlQzMiBuQ2hhcnNldCk7CisJdmlydHVhbCBGWF9CT09MCQkJCUZpbmROYXRpdmVUcnVlVHlwZUZvbnQoRlhfSU5UMzIgbkNoYXJzZXQsIENGWF9CeXRlU3RyaW5nIHNGb250RmFjZU5hbWUpOworCXZpcnR1YWwgQ1BERl9Gb250KgkJCUFkZE5hdGl2ZVRydWVUeXBlRm9udFRvUERGKENQREZfRG9jdW1lbnQqIHBEb2MsIENGWF9CeXRlU3RyaW5nIHNGb250RmFjZU5hbWUsIEZYX0JZVEUgbkNoYXJzZXQpOworCisJdmlydHVhbCBGWF9JTlQzMgkJCVNldFRpbWVyKEZYX0lOVDMyIHVFbGFwc2UsIFRpbWVyQ2FsbGJhY2sgbHBUaW1lckZ1bmMpIDsKKwl2aXJ0dWFsIHZvaWQJCQkJS2lsbFRpbWVyKEZYX0lOVDMyIG5JRCkgOworCisKKwl2aXJ0dWFsIEZYX0JPT0wJCQkJSXNTSElGVEtleURvd24oRlhfRFdPUkQgbkZsYWcpIHtyZXR1cm4gbV9wRW52LT5GRklfSXNTSElGVEtleURvd24obkZsYWcpO30KKwl2aXJ0dWFsIEZYX0JPT0wJCQkJSXNDVFJMS2V5RG93bihGWF9EV09SRCBuRmxhZykge3JldHVybiBtX3BFbnYtPkZGSV9Jc0NUUkxLZXlEb3duKG5GbGFnKTt9CisJdmlydHVhbCBGWF9CT09MCQkJCUlzQUxUS2V5RG93bihGWF9EV09SRCBuRmxhZykge3JldHVybiBtX3BFbnYtPkZGSV9Jc0FMVEtleURvd24obkZsYWcpO30KKwl2aXJ0dWFsIEZYX0JPT0wJCQkJSXNJTlNFUlRLZXlEb3duKEZYX0RXT1JEIG5GbGFnKSB7cmV0dXJuIG1fcEVudi0+RkZJX0lzSU5TRVJUS2V5RG93bihuRmxhZyk7fQorCisJdmlydHVhbAlGWF9TWVNURU1USU1FCQlHZXRMb2NhbFRpbWUoKTsKKworCXZpcnR1YWwgRlhfSU5UMzIJCQlHZXRDaGFyU2V0KCkge3JldHVybiBtX25DaGFyU2V0O30KKwl2aXJ0dWFsIHZvaWQgCQkJCVNldENoYXJTZXQoRlhfSU5UMzIgbkNoYXJTZXQpIHttX25DaGFyU2V0ID0gbkNoYXJTZXQ7fQorcHJpdmF0ZToKKwlDUERGRG9jX0Vudmlyb25tZW50KiBtX3BFbnY7CisJaW50CQltX25DaGFyU2V0OworfTsKKwordm9pZCBDRlhfU3lzdGVtSGFuZGxlcjo6U2V0Q3Vyc29yKEZYX0lOVDMyIG5DdXJzb3JUeXBlKQoreworCisJbV9wRW52LT5GRklfU2V0Q3Vyc29yKG5DdXJzb3JUeXBlKTsKK30KKwordm9pZCBDRlhfU3lzdGVtSGFuZGxlcjo6SW52YWxpZGF0ZVJlY3QoRlhfSFdORCBoV25kLCBGWF9SRUNUIHJlY3QpCit7CisJLy9nX3BGb3JtRmlsbEFwcC0+RkZJX0ludmFsaWRhdGUoKTsKKwlDUERGU0RLX0Fubm90KiBwU0RLQW5ub3QgPSAoQ1BERlNES19Bbm5vdCopaFduZDsKKwlDUERGX1BhZ2UqIHBQYWdlID0gTlVMTDsKKwlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcgPSBOVUxMOworCXBQYWdlVmlldyA9IHBTREtBbm5vdC0+R2V0UGFnZVZpZXcoKTsKKwlwUGFnZSA9IHBTREtBbm5vdC0+R2V0UERGUGFnZSgpOworCWlmKCFwUGFnZSB8fCAhcFBhZ2VWaWV3KQorCQlyZXR1cm47CisJQ1BERl9NYXRyaXggcGFnZTJkZXZpY2U7CisJcFBhZ2VWaWV3LT5HZXRDdXJyZW50TWF0cml4KHBhZ2UyZGV2aWNlKTsKKwlDUERGX01hdHJpeCBkZXZpY2UycGFnZTsKKwlkZXZpY2UycGFnZS5TZXRSZXZlcnNlKHBhZ2UyZGV2aWNlKTsKKwlGWF9GTE9BVCBsZWZ0LCB0b3AsIHJpZ2h0LGJvdHRvbTsKKwlkZXZpY2UycGFnZS5UcmFuc2Zvcm0oKEZYX0ZMT0FUKXJlY3QubGVmdCwgKEZYX0ZMT0FUKXJlY3QudG9wLCBsZWZ0LCB0b3ApOworCWRldmljZTJwYWdlLlRyYW5zZm9ybSgoRlhfRkxPQVQpcmVjdC5yaWdodCwgKEZYX0ZMT0FUKXJlY3QuYm90dG9tLCByaWdodCwgYm90dG9tKTsKKy8vIAltX3BFbnYtPkZGSV9EZXZpY2VUb1BhZ2UocFBhZ2UsIHJlY3QubGVmdCwgcmVjdC50b3AsIChkb3VibGUqKSZsZWZ0LCAoZG91YmxlKikmdG9wKTsKKy8vIAltX3BFbnYtPkZGSV9EZXZpY2VUb1BhZ2UocFBhZ2UsIHJlY3QucmlnaHQsIHJlY3QuYm90dG9tLCAoZG91YmxlKikmcmlnaHQsIChkb3VibGUqKSZib3R0b20pOworCUNQREZfUmVjdCByY1BERihsZWZ0LCBib3R0b20sIHJpZ2h0LCB0b3ApOworCXJjUERGLk5vcm1hbGl6ZSgpOworCisJbV9wRW52LT5GRklfSW52YWxpZGF0ZShwUGFnZSwgcmNQREYubGVmdCwgcmNQREYudG9wLCByY1BERi5yaWdodCwgcmNQREYuYm90dG9tKTsKK30KK3ZvaWQgQ0ZYX1N5c3RlbUhhbmRsZXI6Ok91dHB1dFNlbGVjdGVkUmVjdCh2b2lkKiBwRm9ybUZpbGxlciwgQ1BERl9SZWN0JiByZWN0KQoreworCUNGRkxfRm9ybUZpbGxlciogcEZGTCA9IChDRkZMX0Zvcm1GaWxsZXIqKXBGb3JtRmlsbGVyOworCWlmKHBGRkwpCisJeworCQlDUERGX1BvaW50IGxlZnRib3R0b20gPSBDUERGX1BvaW50KHJlY3QubGVmdCwgcmVjdC5ib3R0b20pOworCQlDUERGX1BvaW50IHJpZ2h0dG9wID0gQ1BERl9Qb2ludChyZWN0LnJpZ2h0LCByZWN0LnRvcCk7CisJCUNQREZfUG9pbnQgcHRBID0gcEZGTC0+UFdMdG9GRkwobGVmdGJvdHRvbSk7CisJCUNQREZfUG9pbnQgcHRCID0gcEZGTC0+UFdMdG9GRkwocmlnaHR0b3ApOwkKKworCisJCUNQREZTREtfQW5ub3QqIHBBbm5vdCAgPSBwRkZMLT5HZXRTREtBbm5vdCgpOworCQlBU1NFUlQocEFubm90KTsKKwkJQ1BERl9QYWdlKiBwUGFnZSA9IHBBbm5vdC0+R2V0UERGUGFnZSgpOworCQlBU1NFUlQocFBhZ2UpOworCQltX3BFbnYtPkZGSV9PdXRwdXRTZWxlY3RlZFJlY3QocFBhZ2UsIHB0QS54LCBwdEIueSwgcHRCLngsIHB0QS55KTsKKwl9CisJCit9CisKK0ZYX0JPT0wgQ0ZYX1N5c3RlbUhhbmRsZXI6OklzU2VsZWN0aW9uSW1wbGVtZW50ZWQoKQoreworCWlmKG1fcEVudikKKwl7CisJCUZQREZfRk9STUZJTExJTkZPKiBwSW5mbyA9IG1fcEVudi0+R2V0Rm9ybUZpbGxJbmZvKCk7CisJCWlmKHBJbmZvICYmIHBJbmZvLT5GRklfT3V0cHV0U2VsZWN0ZWRSZWN0KQorCQkJcmV0dXJuIFRSVUU7CisJfQorCXJldHVybiBGQUxTRTsKK30KKworQ0ZYX0J5dGVTdHJpbmcgQ0ZYX1N5c3RlbUhhbmRsZXI6OkdldE5hdGl2ZVRydWVUeXBlRm9udChGWF9JTlQzMiBuQ2hhcnNldCkKK3sKKwlyZXR1cm4gIiI7Cit9CisKK0ZYX0JPT0wJQ0ZYX1N5c3RlbUhhbmRsZXI6OkZpbmROYXRpdmVUcnVlVHlwZUZvbnQoRlhfSU5UMzIgbkNoYXJzZXQsIENGWF9CeXRlU3RyaW5nIHNGb250RmFjZU5hbWUpIAoreworCUNGWF9Gb250TWdyKiBwRm9udE1nciA9IENGWF9HRU1vZHVsZTo6R2V0KCktPkdldEZvbnRNZ3IoKTsKKy8vCUZYRlRfRmFjZSBuRmFjZSA9IHBGb250TWdyLT5GaW5kU3Vic3RGb250KHNGb250RmFjZU5hbWUsVFJVRSwwLDAsMCwwLE5VTEwpOworLy8JRlhGVF9GYWNlIG5GYWNlICA9IHBGb250TWdyLT5tX3BCdWlsdGluTWFwcGVyLT5GaW5kU3Vic3RGb250KHNGb250RmFjZU5hbWUsVFJVRSwwLDAsMCwwLE5VTEwpOworCisJaWYocEZvbnRNZ3IpCisJeworCQlDRlhfRm9udE1hcHBlcioJcEZvbnRNYXBwZXIgPSBwRm9udE1nci0+bV9wQnVpbHRpbk1hcHBlcjsKKwkJaWYocEZvbnRNYXBwZXIpCisJCXsJCisJCQlpbnQgblNpemUgPSBwRm9udE1hcHBlci0+bV9JbnN0YWxsZWRUVEZvbnRzLkdldFNpemUoKTsKKwkJCWlmKG5TaXplID09MCkKKwkJCXsKKwkJCQlwRm9udE1hcHBlci0+TG9hZEluc3RhbGxlZEZvbnRzKCk7CisJCQkJblNpemUgPSBwRm9udE1hcHBlci0+bV9JbnN0YWxsZWRUVEZvbnRzLkdldFNpemUoKTsKKwkJCX0KKwkJCQorCQkJZm9yKGludCBpPTA7IGk8blNpemU7IGkrKykKKwkJCXsKKwkJCQlpZihwRm9udE1hcHBlci0+bV9JbnN0YWxsZWRUVEZvbnRzW2ldLkNvbXBhcmUoc0ZvbnRGYWNlTmFtZSkpCisJCQkJCXJldHVybiBUUlVFOworCQkJfQorCQl9CisKKwl9CisKKwlyZXR1cm4gRkFMU0U7CisvLyAJcEZvbnRNZ3ItPm1fRmFjZU1hcC5Mb29rdXAoc0ZvbnRGYWNlTmFtZSxwRm9udCk7CisvLyAJcmV0dXJuIChwRm9udCE9TlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgQ2hhclNldDJDUChpbnQgY2hhcnNldCkKK3sKKwlpZihjaGFyc2V0ID09IDEyOCkKKwkJcmV0dXJuIDkzMjsKKwllbHNlIGlmKGNoYXJzZXQgPT0gMTM0KQorCQlyZXR1cm4gOTM2OworCWVsc2UgaWYoY2hhcnNldCA9PSAxMjkpCisJCXJldHVybiA5NDk7CisJZWxzZSBpZihjaGFyc2V0ID09IDEzNikKKwkJcmV0dXJuIDk1MDsKKwlyZXR1cm4gMDsKK30KK0NQREZfRm9udCogQ0ZYX1N5c3RlbUhhbmRsZXI6OkFkZE5hdGl2ZVRydWVUeXBlRm9udFRvUERGKENQREZfRG9jdW1lbnQqIHBEb2MsIENGWF9CeXRlU3RyaW5nIHNGb250RmFjZU5hbWUsIAorCQkJCQkJCQkJCQkJCQkgRlhfQllURSBuQ2hhcnNldCkgCit7CisJaWYocERvYykKKwl7CisJCUNGWF9Gb250KiBwRlhGb250ID0gbmV3IENGWF9Gb250KCk7CisJCXBGWEZvbnQtPkxvYWRTdWJzdChzRm9udEZhY2VOYW1lLFRSVUUsMCwwLDAsQ2hhclNldDJDUChuQ2hhcnNldCksRkFMU0UpOworCQlDUERGX0ZvbnQqIHBGb250ID0gcERvYy0+QWRkRm9udChwRlhGb250LG5DaGFyc2V0LEZBTFNFKTsKKwkJZGVsZXRlIHBGWEZvbnQ7CisJCXJldHVybiBwRm9udDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworCitGWF9JTlQzMiBDRlhfU3lzdGVtSGFuZGxlcjo6U2V0VGltZXIoRlhfSU5UMzIgdUVsYXBzZSwgVGltZXJDYWxsYmFjayBscFRpbWVyRnVuYykKK3sKKwlyZXR1cm4gbV9wRW52LT5GRklfU2V0VGltZXIodUVsYXBzZSwgbHBUaW1lckZ1bmMpOworfQordm9pZCBDRlhfU3lzdGVtSGFuZGxlcjo6S2lsbFRpbWVyKEZYX0lOVDMyIG5JRCkKK3sKKwltX3BFbnYtPkZGSV9LaWxsVGltZXIobklEKTsKK30KKworRlhfU1lTVEVNVElNRSBDRlhfU3lzdGVtSGFuZGxlcjo6R2V0TG9jYWxUaW1lKCkKK3sKKwlyZXR1cm4gbV9wRW52LT5GRklfR2V0TG9jYWxUaW1lKCk7Cit9CisKKworQ0pTX1J1bnRpbWVGYWN0b3J5KiBHZXRKU1J1bnRpbWVGYWN0b3J5KCkKK3sKKwlzdGF0aWMgQ0pTX1J1bnRpbWVGYWN0b3J5IHNfSlNSdW50aW1lRmFjdG9yeTsKKwlyZXR1cm4gJnNfSlNSdW50aW1lRmFjdG9yeTsKK30KKworQ1BERkRvY19FbnZpcm9ubWVudDo6Q1BERkRvY19FbnZpcm9ubWVudChDUERGX0RvY3VtZW50ICogcERvYyk6bV9wSW5mbyhOVUxMKSxtX3BJRm9ybUZpbGxlcihOVUxMKSwKKwkJCQkJCQkJbV9wQW5ub3RIYW5kbGVyTWdyKE5VTEwpLG1fcEFjdGlvbkhhbmRsZXIoTlVMTCksbV9wSlNSdW50aW1lKE5VTEwpLAorCQkJCQkJCQltX3BTREtEb2MoTlVMTCksIG1fcFBERkRvYyhwRG9jKQoreworCisJbV9wU3lzSGFuZGxlciA9IE5VTEw7CisJbV9wU3lzSGFuZGxlciA9IG5ldyBDRlhfU3lzdGVtSGFuZGxlcih0aGlzKTsKKworCQorCW1fcEpTUnVudGltZUZhY3RvcnkgPSBOVUxMOworCW1fcEpTUnVudGltZUZhY3RvcnkgPSBHZXRKU1J1bnRpbWVGYWN0b3J5KCk7CisJbV9wSlNSdW50aW1lRmFjdG9yeS0+QWRkUmVmKCk7Cit9CisKK0NQREZEb2NfRW52aXJvbm1lbnQ6On5DUERGRG9jX0Vudmlyb25tZW50KCkKK3sKKworCWlmICggbV9wSUZvcm1GaWxsZXIgKQorCXsKKwkJZGVsZXRlIG1fcElGb3JtRmlsbGVyOworCQltX3BJRm9ybUZpbGxlciA9IE5VTEw7CisJfQorCWlmKG1fcEpTUnVudGltZSAmJiBtX3BKU1J1bnRpbWVGYWN0b3J5KQorCQltX3BKU1J1bnRpbWVGYWN0b3J5LT5EZWxldGVKU1J1bnRpbWUobV9wSlNSdW50aW1lKTsKKwltX3BKU1J1bnRpbWVGYWN0b3J5LT5SZWxlYXNlKCk7CisKKwlpZihtX3BTeXNIYW5kbGVyKQorCXsKKwkJZGVsZXRlIG1fcFN5c0hhbmRsZXI7CisJCW1fcFN5c0hhbmRsZXIgPSBOVUxMOworCX0KKworCWlmKG1fcEFubm90SGFuZGxlck1ncikKKwl7CisJCWRlbGV0ZSBtX3BBbm5vdEhhbmRsZXJNZ3I7CisJCW1fcEFubm90SGFuZGxlck1nciA9IE5VTEw7CisJfQorCWlmKG1fcEFjdGlvbkhhbmRsZXIpCisJeworCQlkZWxldGUgbV9wQWN0aW9uSGFuZGxlcjsKKwkJbV9wQWN0aW9uSGFuZGxlciA9IE5VTEw7CisJfQorCisKK30KKworCitJRlhKU19SdW50aW1lKiBDUERGRG9jX0Vudmlyb25tZW50OjpHZXRKU1J1bnRpbWUoKQoreworCWlmKCFJc0pTSW5pdGlhdGVkKCkpCisJCXJldHVybiBOVUxMOworCWFzc2VydChtX3BKU1J1bnRpbWVGYWN0b3J5KTsKKwlpZighbV9wSlNSdW50aW1lKQorCQltX3BKU1J1bnRpbWUgPSBtX3BKU1J1bnRpbWVGYWN0b3J5LT5OZXdKU1J1bnRpbWUodGhpcyk7CisJcmV0dXJuIG1fcEpTUnVudGltZTsKK30KKworQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3IqIENQREZEb2NfRW52aXJvbm1lbnQ6OkdldEFubm90SGFuZGxlck1ncigpCit7CisJaWYoIW1fcEFubm90SGFuZGxlck1ncikKKwkJbV9wQW5ub3RIYW5kbGVyTWdyID0gbmV3IENQREZTREtfQW5ub3RIYW5kbGVyTWdyKHRoaXMpOworCXJldHVybiBtX3BBbm5vdEhhbmRsZXJNZ3I7Cit9CisKK0NQREZTREtfQWN0aW9uSGFuZGxlciogQ1BERkRvY19FbnZpcm9ubWVudDo6R2V0QWN0aW9uSGFuZGVyKCkKK3sKKwlpZighbV9wQWN0aW9uSGFuZGxlcikKKwkJbV9wQWN0aW9uSGFuZGxlciA9IG5ldyBDUERGU0RLX0FjdGlvbkhhbmRsZXIodGhpcyk7CisJcmV0dXJuIG1fcEFjdGlvbkhhbmRsZXI7Cit9CisKK2ludCBDUERGRG9jX0Vudmlyb25tZW50OjpSZWdBcHBIYW5kbGUoRlBERl9GT1JNRklMTElORk8qIHBGRmluZm8pCit7CisJbV9wSW5mbyAgPSBwRkZpbmZvOyAKKwlyZXR1cm4gVFJVRTsKK30KKworQ1BERlNES19Eb2N1bWVudCogQ1BERkRvY19FbnZpcm9ubWVudDo6R2V0Q3VycmVudERvYygpCit7CisJcmV0dXJuIG1fcFNES0RvYzsKK30KKworQ0ZGTF9JRm9ybUZpbGxlciogQ1BERkRvY19FbnZpcm9ubWVudDo6R2V0SUZvcm1GaWxsZXIoKQoreworCWlmKCFtX3BJRm9ybUZpbGxlcikKKwkJbV9wSUZvcm1GaWxsZXIgPSBuZXcgQ0ZGTF9JRm9ybUZpbGxlcih0aGlzKTsKKwlyZXR1cm4gbV9wSUZvcm1GaWxsZXI7Cit9CisKK0ZYX0JPT0wJQ1BERkRvY19FbnZpcm9ubWVudDo6SXNKU0luaXRpYXRlZCgpCit7CisJaWYobV9wSW5mbykKKwl7CisJCWlmKG1fcEluZm8tPm1fcEpzUGxhdGZvcm0pCisJCQlyZXR1cm4gVFJVRTsKKwkJZWxzZQorCQkJcmV0dXJuIEZBTFNFOworCX0KKwlyZXR1cm4gRkFMU0U7Cit9CisKK0NQREZTREtfRG9jdW1lbnQ6OkNQREZTREtfRG9jdW1lbnQoQ1BERl9Eb2N1bWVudCogcERvYyxDUERGRG9jX0Vudmlyb25tZW50KiBwRW52KTptX3BEb2MocERvYyksCisJCQkJCQltX3BJbnRlckZvcm0oTlVMTCksbV9wRW52KHBFbnYpLG1fcE9jY29udGVudChOVUxMKSxtX2JDaGFuZ2VNYXNrKEZBTFNFKQoreworCW1fcEZvY3VzQW5ub3QgPSBOVUxMOworfQorCitDUERGU0RLX0RvY3VtZW50Ojp+Q1BERlNES19Eb2N1bWVudCgpCit7CisJbV9wYWdlTWFwLlJlbW92ZUFsbCgpOworCWlmKG1fcEludGVyRm9ybSkKKwl7CisJCW1fcEludGVyRm9ybS0+RGVzdHJveSgpOworCQltX3BJbnRlckZvcm0gPSBOVUxMOworCX0KKwlpZihtX3BPY2NvbnRlbnQpCisJeworCQlkZWxldGUgbV9wT2Njb250ZW50OworCQltX3BPY2NvbnRlbnQgPSBOVUxMOworCX0KK30KKwordm9pZCBDUERGU0RLX0RvY3VtZW50OjpJbml0UGFnZVZpZXcoKQoreworCWludCBuQ291bnQgPSBtX3BEb2MtPkdldFBhZ2VDb3VudCgpOworCWZvcihpbnQgaT0wOyBpPG5Db3VudDsgaSsrKQorCXsKKwkvLyBUbyBkbworLy8JCUNQREZfRGljdGlvbmFyeSogcERpYyA9IG1fcERvYy0+R2V0UGFnZShpKTsKKy8vCQltX3BhZ2VNYXAuU2V0QXQocERpYywgcFBhZ2VWaWV3KTsKKwl9Cit9CisKK3ZvaWQgQ1BERlNES19Eb2N1bWVudDo6QWRkUGFnZVZpZXcoQ1BERl9QYWdlKiBwUERGUGFnZSwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3KQoreworCW1fcGFnZU1hcC5TZXRBdChwUERGUGFnZSwgcFBhZ2VWaWV3KTsKK30KKworQ1BERlNES19QYWdlVmlldyogQ1BERlNES19Eb2N1bWVudDo6R2V0UGFnZVZpZXcoQ1BERl9QYWdlKiBwUERGUGFnZSwgRlhfQk9PTCBSZU5ldykKK3sKKwlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcgPSAoQ1BERlNES19QYWdlVmlldyopbV9wYWdlTWFwLkdldFZhbHVlQXQocFBERlBhZ2UpOworCWlmKHBQYWdlVmlldyAhPSBOVUxMKQorCQlyZXR1cm4gcFBhZ2VWaWV3OworCWlmKFJlTmV3KQorCXsKKwkJcFBhZ2VWaWV3ID0gbmV3IENQREZTREtfUGFnZVZpZXcodGhpcyxwUERGUGFnZSk7CisJCW1fcGFnZU1hcC5TZXRBdChwUERGUGFnZSwgcFBhZ2VWaWV3KTsKKwkJLy9EZWxheSB0byBsb2FkIGFsbCB0aGUgYW5ub3RhdGlvbnMsIHRvIGF2b2lkIGVuZGxlc3MgbG9vcC4KKwkJcFBhZ2VWaWV3LT5Mb2FkRlhBbm5vdHMoKTsKKwl9CisJcmV0dXJuIHBQYWdlVmlldzsKKworfQorCitDUERGU0RLX1BhZ2VWaWV3KiBDUERGU0RLX0RvY3VtZW50OjpHZXRDdXJyZW50VmlldygpCit7CisJQ1BERl9QYWdlICogcFBhZ2UgPSAoQ1BERl9QYWdlICopbV9wRW52LT5GRklfR2V0Q3VycmVudFBhZ2UobV9wRG9jKTsKKwlpZihwUGFnZSkKKwkJcmV0dXJuIHRoaXMtPkdldFBhZ2VWaWV3KHBQYWdlLCBUUlVFKTsKKwlyZXR1cm4gTlVMTDsKK30KKworQ1BERlNES19QYWdlVmlldyogQ1BERlNES19Eb2N1bWVudDo6R2V0UGFnZVZpZXcoaW50IG5JbmRleCkKK3sKKwlDUERGU0RLX1BhZ2VWaWV3ICogcFRlbXBQYWdlVmlldyA9IE5VTEw7CisJQ1BERl9QYWdlICogcFRlbXBQYWdlID0gKENQREZfUGFnZSopbV9wRW52LT5GRklfR2V0UGFnZShtX3BEb2MsbkluZGV4KTsKKwlpZighcFRlbXBQYWdlKQorCQlyZXR1cm4gTlVMTDsKKworCW1fcGFnZU1hcC5Mb29rdXAocFRlbXBQYWdlLCBwVGVtcFBhZ2VWaWV3KTsKKwkKKwlBU1NFUlQocFRlbXBQYWdlVmlldyAhPSBOVUxMKTsKKwkKKwlyZXR1cm4gcFRlbXBQYWdlVmlldzsKK30KKwordm9pZCBDUERGU0RLX0RvY3VtZW50OjogUHJvY0phdmFzY3JpcHRGdW4oKQoreworCUNQREZfRG9jdW1lbnQqIHBQREZEb2MgPSB0aGlzLT5HZXREb2N1bWVudCgpOworCUNQREZfRG9jSlNBY3Rpb25zIGRvY0pTKHBQREZEb2MpOworCWludCBpQ291bnQgPSBkb2NKUy5Db3VudEpTQWN0aW9ucygpOworCWlmIChpQ291bnQgPCAxKSByZXR1cm47CisJZm9yIChpbnQgaSA9IDA7IGkgPCBpQ291bnQ7IGkgKyspCisJeworCQlDRlhfQnl0ZVN0cmluZyBjc0pTTmFtZTsKKwkJQ1BERl9BY3Rpb24ganNBY3Rpb24gPSBkb2NKUy5HZXRKU0FjdGlvbihpLCBjc0pTTmFtZSk7CisJCWlmKG1fcEVudi0+R2V0QWN0aW9uSGFuZGVyKCkpCisJCQltX3BFbnYtPkdldEFjdGlvbkhhbmRlcigpLT5Eb0FjdGlvbl9KYXZhU2NyaXB0KGpzQWN0aW9uLENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoY3NKU05hbWUpLHRoaXMpOworCX0KKwkKK30KKworRlhfQk9PTCBDUERGU0RLX0RvY3VtZW50OjpQcm9jT3BlbkFjdGlvbigpCit7CisJaWYoIW1fcERvYykgcmV0dXJuIEZBTFNFOworCQorCUNQREZfRGljdGlvbmFyeSogcFJvb3QgPSBtX3BEb2MtPkdldFJvb3QoKTsJCisJaWYgKCFwUm9vdCkJcmV0dXJuIEZBTFNFOworCUNQREZfT2JqZWN0KiBwT3BlbkFjdGlvbiA9IHBSb290LT5HZXREaWN0KCJPcGVuQWN0aW9uIik7Ly8KKwlpZighcE9wZW5BY3Rpb24pIHBPcGVuQWN0aW9uID0gcFJvb3QtPkdldEFycmF5KCJPcGVuQWN0aW9uIik7Ly8KKwlpZighcE9wZW5BY3Rpb24pIHJldHVybiBGQUxTRTsKKwkKKwlpZihwT3BlbkFjdGlvbi0+R2V0VHlwZSgpPT1QREZPQkpfQVJSQVkpCisJewkKKwl9CisJZWxzZSBpZihwT3BlbkFjdGlvbi0+R2V0VHlwZSgpPT1QREZPQkpfRElDVElPTkFSWSkKKwl7CQorCQlDUERGX0RpY3Rpb25hcnkgKiBwRGljdD0oQ1BERl9EaWN0aW9uYXJ5KilwT3BlbkFjdGlvbjsJCisJCUNQREZfQWN0aW9uIEFjdGlvbiA9IHBEaWN0OworCQkKKwkJaWYobV9wRW52LT5HZXRBY3Rpb25IYW5kZXIoKSkKKwkJCW1fcEVudi0+R2V0QWN0aW9uSGFuZGVyKCktPkRvQWN0aW9uX0RvY09wZW4oQWN0aW9uLHRoaXMpOwkJCisJfQkKKwllbHNlCisJeworCQlyZXR1cm4gRkFMU0U7CQkJCisJfQkKKwlyZXR1cm4gVFJVRTsKK30KKworQ1BERl9PQ0NvbnRleHQqCUNQREZTREtfRG9jdW1lbnQ6OkdldE9DQ29udGV4dCgpCit7CisJaWYoIW1fcE9jY29udGVudCkKKwkJbV9wT2Njb250ZW50ID0gbmV3IENQREZfT0NDb250ZXh0KG1fcERvYyk7CisJcmV0dXJuIG1fcE9jY29udGVudDsKK30KKwordm9pZCBDUERGU0RLX0RvY3VtZW50OjpSZU1vdmVQYWdlVmlldyhDUERGX1BhZ2UqIHBQREZQYWdlKQoreworCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyA9IChDUERGU0RLX1BhZ2VWaWV3KiltX3BhZ2VNYXAuR2V0VmFsdWVBdChwUERGUGFnZSk7CisJaWYocFBhZ2VWaWV3KQorCXsKKwkJZGVsZXRlIHBQYWdlVmlldzsKKwkJbV9wYWdlTWFwLlJlbW92ZUtleShwUERGUGFnZSk7CisJfQorfQorCitDUERGX1BhZ2UgKiBDUERGU0RLX0RvY3VtZW50OjpHZXRQYWdlKGludCBuSW5kZXgpCit7CisJQ1BERl9QYWdlICogcFRlbXBQYWdlID0gKENQREZfUGFnZSopbV9wRW52LT5GRklfR2V0UGFnZShtX3BEb2MsbkluZGV4KTsKKwlpZighcFRlbXBQYWdlKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gcFRlbXBQYWdlOworfQorCitDUERGU0RLX0ludGVyRm9ybSogQ1BERlNES19Eb2N1bWVudDo6R2V0SW50ZXJGb3JtKCkKK3sKKwlpZighbV9wSW50ZXJGb3JtKQorCQltX3BJbnRlckZvcm0gPSBuZXcgQ1BERlNES19JbnRlckZvcm0odGhpcyk7CisJcmV0dXJuIG1fcEludGVyRm9ybTsKK30KKwordm9pZCBDUERGU0RLX0RvY3VtZW50OjpVcGRhdGVBbGxWaWV3cyhDUERGU0RLX1BhZ2VWaWV3KiBwU2VuZGVyLCBDUERGU0RLX0Fubm90KiBwQW5ub3QpCit7CisJCisJRlhfUE9TSVRJT04gcG9zID0gbV9wYWdlTWFwLkdldFN0YXJ0UG9zaXRpb24oKTsKKwlDUERGX1BhZ2UgKiBwUGFnZSA9IE5VTEw7CisJQ1BERlNES19QYWdlVmlldyAqIHBQYWdlVmlldyA9IE5VTEw7CisJd2hpbGUocG9zKQorCXsKKwkJbV9wYWdlTWFwLkdldE5leHRBc3NvYyhwb3MsIHBQYWdlLCBwUGFnZVZpZXcpOworCisJCWlmKHBQYWdlVmlldyAhPSBwU2VuZGVyKQorCQl7CisJCQlwUGFnZVZpZXctPlVwZGF0ZVZpZXcocEFubm90KTsKKwkJfQorCX0KK30KKworQ1BERlNES19Bbm5vdCogQ1BERlNES19Eb2N1bWVudDo6R2V0Rm9jdXNBbm5vdCgpCit7CisJcmV0dXJuIHRoaXMtPm1fcEZvY3VzQW5ub3Q7CQorfQorCitGWF9CT09MIENQREZTREtfRG9jdW1lbnQ6OlNldEZvY3VzQW5ub3QoQ1BERlNES19Bbm5vdCogcEFubm90LEZYX1VJTlQgbkZsYWcpCit7CisKKwlpZihtX3BGb2N1c0Fubm90PT1wQW5ub3QpIHJldHVybiBUUlVFOworCQorCWlmKG1fcEZvY3VzQW5ub3QpCisJeworCQlpZighdGhpcy0+S2lsbEZvY3VzQW5ub3QobkZsYWcpICkgcmV0dXJuIEZBTFNFOwkKKwl9CisJQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gcEFubm90LT5HZXRQYWdlVmlldygpOworCWlmKHBBbm5vdCAmJiBwUGFnZVZpZXctPklzVmFsaWQoKSkKKwl7CisJCUNQREZTREtfQW5ub3RIYW5kbGVyTWdyICpwQW5ub3RIYW5kbGVyPW1fcEVudi0+R2V0QW5ub3RIYW5kbGVyTWdyKCk7CisKKwkJaWYocEFubm90SGFuZGxlciYmIW1fcEZvY3VzQW5ub3QpCisJCXsKKwkJCWlmICghcEFubm90SGFuZGxlci0+QW5ub3RfT25TZXRGb2N1cyhwQW5ub3QsbkZsYWcpKQorCQkJCXJldHVybiBGQUxTRTsKKwkJCWlmKCFtX3BGb2N1c0Fubm90KQorCQkJeworCQkJCXRoaXMtPm1fcEZvY3VzQW5ub3Q9cEFubm90OworCQkJCXJldHVybiBUUlVFOworCQkJfQorCQl9CQkJCisJfQorCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBDUERGU0RLX0RvY3VtZW50OjpLaWxsRm9jdXNBbm5vdChGWF9VSU5UIG5GbGFnKQoreworCWlmKG1fcEZvY3VzQW5ub3QpCisJeworCQlDUERGU0RLX0Fubm90SGFuZGxlck1nciAqcEFubm90SGFuZGxlcj1tX3BFbnYtPkdldEFubm90SGFuZGxlck1ncigpOworCQlpZihwQW5ub3RIYW5kbGVyKQorCQl7CisJCQlDUERGU0RLX0Fubm90KiBwRm9jdXNBbm5vdCA9IG1fcEZvY3VzQW5ub3Q7CisJCQltX3BGb2N1c0Fubm90ID0gTlVMTDsKKwkJCWlmKHBBbm5vdEhhbmRsZXItPkFubm90X09uS2lsbEZvY3VzKHBGb2N1c0Fubm90LCBuRmxhZykpCisJCQl7CisJCQkJCisJCQkJaWYocEZvY3VzQW5ub3QtPkdldFR5cGUoKSA9PSBGWF9CU1RSQygiV2lkZ2V0IikpCisJCQkJeworCQkJCQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IChDUERGU0RLX1dpZGdldCopcEZvY3VzQW5ub3Q7CisJCQkJCWludCBuRmllbGRUeXBlID0gcFdpZGdldC0+R2V0RmllbGRUeXBlKCk7CisJCQkJCWlmKEZJRUxEVFlQRV9URVhURklFTEQgPT0gbkZpZWxkVHlwZSB8fCBGSUVMRFRZUEVfQ09NQk9CT1ggPT0gbkZpZWxkVHlwZSkKKwkJCQkJCW1fcEVudi0+RkZJX09uU2V0RmllbGRJbnB1dEZvY3VzKE5VTEwsIE5VTEwsIDAsIEZBTFNFKTsKKwkJCQl9CisKKwkJCQlpZighbV9wRm9jdXNBbm5vdCkKKwkJCQkJcmV0dXJuIFRSVUU7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJbV9wRm9jdXNBbm5vdCA9IHBGb2N1c0Fubm90OworCQkJfQorCQl9CisJfQorCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTAlDUERGU0RLX0RvY3VtZW50OjpEZWxldGVQYWdlcyhpbnQgblN0YXJ0LCBpbnQgIG5Db3VudCkKK3sKKwlpZiAoIG5TdGFydCA8IDAgfHwgblN0YXJ0ID49IEdldFBhZ2VDb3VudCgpIHx8IG5Db3VudCA8PSAwICkKKwl7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlDUERGX1BhZ2UgKiBwVGVtcFBhZ2UgPSBOVUxMOworCWZvciAoIGludCBpID0gbkNvdW50LTE7IGkgPj0gMDsgaS0tICkKKwl7CisJCXBUZW1wUGFnZSA9IEdldFBhZ2UoblN0YXJ0K2kpOworCQlpZiAoIHBUZW1wUGFnZSAhPSBOVUxMICkKKwkJeworCQkJUmVNb3ZlUGFnZVZpZXcocFRlbXBQYWdlKTsKKwkJfQorCX0KKwlyZXR1cm4gVFJVRTsKK30KKwordm9pZCBDUERGU0RLX0RvY3VtZW50OjpPbkNsb3NlRG9jdW1lbnQoKQoreworCUtpbGxGb2N1c0Fubm90KCk7Cit9CisKK0ZYX0JPT0wgQ1BERlNES19Eb2N1bWVudDo6R2V0UGVybWlzc2lvbnMoaW50IG5GbGFnKQoreworCUZYX0RXT1JEIGR3UGVybWlzc2lvbnMgPSBtX3BEb2MtPkdldFVzZXJQZXJtaXNzaW9ucygpOworCXJldHVybiBkd1Blcm1pc3Npb25zJm5GbGFnOworfQorCitJRlhKU19SdW50aW1lICogQ1BERlNES19Eb2N1bWVudDo6R2V0SnNSdW50aW1lKCkKK3sKKwlBU1NFUlQobV9wRW52IT1OVUxMKTsKKwlyZXR1cm4gbV9wRW52LT5HZXRKU1J1bnRpbWUoKTsKK30KKworQ0ZYX1dpZGVTdHJpbmcJQ1BERlNES19Eb2N1bWVudDo6R2V0UGF0aCgpIAoreworCUFTU0VSVChtX3BFbnYgIT0gTlVMTCk7CisJcmV0dXJuIG1fcEVudi0+SlNfZG9jR2V0RmlsZVBhdGgoKTsKK30KKworCitDUERGU0RLX1BhZ2VWaWV3OjpDUERGU0RLX1BhZ2VWaWV3KENQREZTREtfRG9jdW1lbnQqIHBTREtEb2MsQ1BERl9QYWdlKiBwYWdlKTptX3BTREtEb2MocFNES0RvYyksbV9wYWdlKHBhZ2UpCit7CisJQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSBwU0RLRG9jLT5HZXRJbnRlckZvcm0oKTsKKwlpZihwSW50ZXJGb3JtKQorCXsKKwkJQ1BERl9JbnRlckZvcm0qIHBQREZJbnRlckZvcm0gPSBwSW50ZXJGb3JtLT5HZXRJbnRlckZvcm0oKTsKKwkJcFBERkludGVyRm9ybS0+Rml4UGFnZUZpZWxkcyhwYWdlKTsKKwl9CisKKwltX2Z4QW5ub3RBcnJheS5SZW1vdmVBbGwoKTsKKworCW1fYkVudGVyV2lkZ2V0ID0gRkFMU0U7CisJbV9iRXhpdFdpZGdldCA9IEZBTFNFOworCW1fYk9uV2lkZ2V0ID0gRkFMU0U7CisJbV9DYXB0dXJlV2lkZ2V0ID0gTlVMTDsKKwltX2JWYWxpZCA9IEZBTFNFOworfQorCitDUERGU0RLX1BhZ2VWaWV3Ojp+Q1BERlNES19QYWdlVmlldygpCit7CisJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcFNES0RvYy0+R2V0RW52KCk7CQorCWludCBuQW5ub3RDb3VudCA9IG1fZnhBbm5vdEFycmF5LkdldFNpemUoKTsKKwlmb3IgKGludCBpPTA7IGk8bkFubm90Q291bnQ7IGkrKykKKwl7CisJCUNQREZTREtfQW5ub3QqIHBBbm5vdCA9IChDUERGU0RLX0Fubm90KiltX2Z4QW5ub3RBcnJheS5HZXRBdChpKTsKKwkJLy9pZiB0aGVyZSBpcyBhIGZvY3VzZWQgYW5ub3Qgb24gdGhlIHBhZ2UsIHdlIHNob3VsZCBraWxsIHRoZSBmb2N1cyBmaXJzdC4KKwkJaWYocEFubm90ID09IG1fcFNES0RvYy0+R2V0Rm9jdXNBbm5vdCgpKQorCQkJS2lsbEZvY3VzQW5ub3QoKTsKKwkJQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3IqIHBBbm5vdEhhbmRsZXJNZ3IgPSBwRW52LT5HZXRBbm5vdEhhbmRsZXJNZ3IoKTsKKwkJQVNTRVJUKHBBbm5vdEhhbmRsZXJNZ3IpOworCQlwQW5ub3RIYW5kbGVyTWdyLT5SZWxlYXNlQW5ub3QocEFubm90KTsKKwl9CisJbV9meEFubm90QXJyYXkuUmVtb3ZlQWxsKCk7CisJaWYobV9wQW5ub3RMaXN0KQorCXsKKwkJZGVsZXRlIG1fcEFubm90TGlzdDsKKwkJbV9wQW5ub3RMaXN0ID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgQ1BERlNES19QYWdlVmlldzo6UGFnZVZpZXdfT25EcmF3KENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsQ1BERl9SZW5kZXJPcHRpb25zKiBwT3B0aW9ucykKK3sKKwltX2N1ck1hdHJpeCA9ICpwVXNlcjJEZXZpY2U7CisJCisJLy8JbV9wQW5ub3RMaXN0LT5EaXNwbGF5QW5ub3RzKG1fcGFnZSwgcERldmljZSwgcFVzZXIyRGV2aWNlLCBGQUxTRSwgcE9wdGlvbnMpOworCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBtX3BTREtEb2MtPkdldEVudigpOworCUNQREZTREtfQW5ub3RJdGVyYXRvciBhbm5vdEl0ZXJhdG9yKHRoaXMsIFRSVUUpOworCUNQREZTREtfQW5ub3QgKiBwU0RLQW5ub3Q9TlVMTDsKKwlpbnQgaW5kZXg9LTE7CisJd2hpbGUoKHBTREtBbm5vdCA9IGFubm90SXRlcmF0b3IuTmV4dChpbmRleCkpKQorCXsKKwkJQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3IqIHBBbm5vdEhhbmRsZXJNZ3IgPSBwRW52LT5HZXRBbm5vdEhhbmRsZXJNZ3IoKTsKKwkJQVNTRVJUKHBBbm5vdEhhbmRsZXJNZ3IpOworCQlwQW5ub3RIYW5kbGVyTWdyLT5Bbm5vdF9PbkRyYXcodGhpcywgcFNES0Fubm90LCBwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIDApOworCX0KKworfQorCitDUERGX0Fubm90KiBDUERGU0RLX1BhZ2VWaWV3OjpHZXRQREZBbm5vdEF0UG9pbnQoRlhfRkxPQVQgcGFnZVgsIEZYX0ZMT0FUIHBhZ2VZKQoreworCQorCWludCBuQ291bnQgPSBtX3BBbm5vdExpc3QtPkNvdW50KCk7CisJZm9yKGludCBpID0gMCA7IGk8bkNvdW50OyBpKyspCisJeworCQlDUERGX0Fubm90KiBwQW5ub3QgPSBtX3BBbm5vdExpc3QtPkdldEF0KGkpOworCQlDRlhfRmxvYXRSZWN0IGFubm90UmVjdDsKKwkJcEFubm90LT5HZXRSZWN0KGFubm90UmVjdCk7CisJCWlmKGFubm90UmVjdC5Db250YWlucyhwYWdlWCwgcGFnZVkpKQorCQkJcmV0dXJuIHBBbm5vdDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK0NQREZfQW5ub3QqIENQREZTREtfUGFnZVZpZXc6OkdldFBERldpZGdldEF0UG9pbnQoRlhfRkxPQVQgcGFnZVgsIEZYX0ZMT0FUIHBhZ2VZKQoreworCQorCWludCBuQ291bnQgPSBtX3BBbm5vdExpc3QtPkNvdW50KCk7CisJZm9yKGludCBpID0gMCA7IGk8bkNvdW50OyBpKyspCisJeworCQlDUERGX0Fubm90KiBwQW5ub3QgPSBtX3BBbm5vdExpc3QtPkdldEF0KGkpOworCQlpZihwQW5ub3QtPkdldFN1YlR5cGUoKSA9PSAiV2lkZ2V0IikKKwkJeworCQkJQ0ZYX0Zsb2F0UmVjdCBhbm5vdFJlY3Q7CisJCQlwQW5ub3QtPkdldFJlY3QoYW5ub3RSZWN0KTsKKwkJCWlmKGFubm90UmVjdC5Db250YWlucyhwYWdlWCwgcGFnZVkpKQorCQkJCXJldHVybiBwQW5ub3Q7CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK0NQREZTREtfQW5ub3QqIENQREZTREtfUGFnZVZpZXc6OkdldEZYQW5ub3RBdFBvaW50KEZYX0ZMT0FUIHBhZ2VYLCBGWF9GTE9BVCBwYWdlWSkKK3sKKworCUNQREZTREtfQW5ub3RJdGVyYXRvciBhbm5vdEl0ZXJhdG9yKHRoaXMsIEZBTFNFKTsKKwlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gbV9wU0RLRG9jLT5HZXRFbnYoKTsKKwlDUERGU0RLX0Fubm90SGFuZGxlck1nciogcEFubm90TWdyID0gcEVudi0+R2V0QW5ub3RIYW5kbGVyTWdyKCk7CisJQ1BERlNES19Bbm5vdCogcFNES0Fubm90ID0gTlVMTDsKKwlpbnQgaW5kZXggPSAtMTsKKwl3aGlsZSgocFNES0Fubm90ID0gYW5ub3RJdGVyYXRvci5OZXh0KGluZGV4KSkpCisJeworCQlDUERGX1JlY3QgcmMgPSBwQW5ub3RNZ3ItPkFubm90X09uR2V0Vmlld0JCb3godGhpcywgcFNES0Fubm90KTsKKwkJaWYocmMuQ29udGFpbnMocGFnZVgsIHBhZ2VZKSkKKwkJCXJldHVybiBwU0RLQW5ub3Q7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK0NQREZTREtfQW5ub3QqIENQREZTREtfUGFnZVZpZXc6OkdldEZYV2lkZ2V0QXRQb2ludChGWF9GTE9BVCBwYWdlWCwgRlhfRkxPQVQgcGFnZVkpCit7CisKKwlDUERGU0RLX0Fubm90SXRlcmF0b3IgYW5ub3RJdGVyYXRvcih0aGlzLCBGQUxTRSk7CisJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcFNES0RvYy0+R2V0RW52KCk7CisJQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3IqIHBBbm5vdE1nciA9IHBFbnYtPkdldEFubm90SGFuZGxlck1ncigpOworCUNQREZTREtfQW5ub3QqIHBTREtBbm5vdCA9IE5VTEw7CisJaW50IGluZGV4ID0gLTE7CisJd2hpbGUoKHBTREtBbm5vdCA9IGFubm90SXRlcmF0b3IuTmV4dChpbmRleCkpKQorCXsKKwkJaWYocFNES0Fubm90LT5HZXRUeXBlKCkgPT0gIldpZGdldCIpCisJCXsJCisJCQlwQW5ub3RNZ3ItPkFubm90X09uR2V0Vmlld0JCb3godGhpcywgcFNES0Fubm90KTsKKwkJCUNQREZfUG9pbnQgcG9pbnQocGFnZVgsIHBhZ2VZKTsKKwkJCWlmIChwQW5ub3RNZ3ItPkFubm90X09uSGl0VGVzdCh0aGlzLCBwU0RLQW5ub3QsIHBvaW50KSkKKy8vCQkJaWYocmMuQ29udGFpbnMocGFnZVgsIHBhZ2VZKSkKKwkJCQlyZXR1cm4gcFNES0Fubm90OworCQl9CisJfQorCQorCXJldHVybiBOVUxMOworfQorCisKK0ZYX0JPT0wgQ1BERlNES19QYWdlVmlldzo6QW5ub3RfSGFzQXBwZWFyYW5jZShDUERGX0Fubm90KiBwQW5ub3QpCit7CisJQ1BERl9EaWN0aW9uYXJ5KiBwQW5ub3REaWMgPSBwQW5ub3QtPm1fcEFubm90RGljdDsKKwlpZihwQW5ub3REaWMpCisJCXJldHVybglwQW5ub3REaWMtPktleUV4aXN0KCJBUyIpOworCXJldHVybiBGQUxTRTsKK30KKworQ1BERlNES19Bbm5vdCoJQ1BERlNES19QYWdlVmlldzo6QWRkQW5ub3QoQ1BERl9Bbm5vdCAqIHBQREZBbm5vdCkKK3sKKwlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gbV9wU0RLRG9jLT5HZXRFbnYoKTsKKwlBU1NFUlQocEVudik7CisJQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3IgKiBwQW5ub3RIYW5kbGVyPSBwRW52LT5HZXRBbm5vdEhhbmRsZXJNZ3IoKTsJCisJCisJQ1BERlNES19Bbm5vdCogcFNES0Fubm90ID1OVUxMOworCQorCWlmKHBBbm5vdEhhbmRsZXIpCisJeworCQlwU0RLQW5ub3QgPSBwQW5ub3RIYW5kbGVyLT5OZXdBbm5vdChwUERGQW5ub3QsIHRoaXMpOworCX0KKwlpZighcFNES0Fubm90KQkgCisJCXJldHVybiBOVUxMOworCisJbV9meEFubm90QXJyYXkuQWRkKHBTREtBbm5vdCk7CQorCQkKKwlpZihwQW5ub3RIYW5kbGVyKQorCXsJIAkJIAkgCisJCXBBbm5vdEhhbmRsZXItPkFubm90X09uQ3JlYXRlKHBTREtBbm5vdCk7CisJCQorCX0KKworCSByZXR1cm4gcFNES0Fubm90OworfQorCitDUERGU0RLX0Fubm90KiBDUERGU0RLX1BhZ2VWaWV3OjpBZGRBbm5vdChDUERGX0RpY3Rpb25hcnkgKiBwRGljdCkKK3sKKwlpZihwRGljdCkgIAorCQlyZXR1cm4gdGhpcy0+QWRkQW5ub3QocERpY3QtPkdldFN0cmluZygiU3VidHlwZSIpLHBEaWN0KTsKKwkgcmV0dXJuIE5VTEw7Cit9CisKK0NQREZTREtfQW5ub3QqIENQREZTREtfUGFnZVZpZXc6OkFkZEFubm90KEZYX0xQQ1NUUiBscFN1YlR5cGUsQ1BERl9EaWN0aW9uYXJ5ICogcERpY3QpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK0ZYX0JPT0wgIENQREZTREtfUGFnZVZpZXc6OkRlbGV0ZUFubm90KENQREZTREtfQW5ub3QqIHBBbm5vdCkKK3sKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0NQREZfRG9jdW1lbnQqIENQREZTREtfUGFnZVZpZXc6OkdldFBERkRvY3VtZW50KCkKK3sKKwlpZihtX3BhZ2UpCisJeworCQlyZXR1cm4gbV9wYWdlLT5tX3BEb2N1bWVudDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludAlDUERGU0RLX1BhZ2VWaWV3OjpDb3VudEFubm90cygpCit7CisJcmV0dXJuIG1fcEFubm90TGlzdC0+Q291bnQoKTsKK30KKworQ1BERlNES19Bbm5vdCoJQ1BERlNES19QYWdlVmlldzo6R2V0QW5ub3QoaW50IG5JbmRleCkKK3sKKwlpbnQgbkNvdW50ID0gbV9meEFubm90QXJyYXkuR2V0U2l6ZSgpOworCWlmICggbkluZGV4IDwgMCB8fCBuSW5kZXggPj0gbkNvdW50ICkKKwl7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiAoQ1BERlNES19Bbm5vdCopbV9meEFubm90QXJyYXkuR2V0QXQobkluZGV4KTsKK30KKworQ1BERlNES19Bbm5vdCogQ1BERlNES19QYWdlVmlldzo6R2V0QW5ub3RCeURpY3QoQ1BERl9EaWN0aW9uYXJ5ICogcERpY3QpCit7CisJaW50IG5Db3VudCA9IG1fZnhBbm5vdEFycmF5LkdldFNpemUoKTsKKyAJZm9yKGludCBpPTA7IGk8bkNvdW50OyBpKyspCisgCXsKKwkJQ1BERlNES19Bbm5vdCogcEFubm90ID0gKENQREZTREtfQW5ub3QqKW1fZnhBbm5vdEFycmF5LkdldEF0KGkpOworIAkJaWYocERpY3Q9PXBBbm5vdC0+R2V0UERGQW5ub3QoKS0+bV9wQW5ub3REaWN0KSAKKyAJCQlyZXR1cm4gcEFubm90OworIAl9CisJcmV0dXJuIE5VTEw7Cit9CisKK0ZYX0JPT0wgQ1BERlNES19QYWdlVmlldzo6T25MQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX1VJTlQgbkZsYWcpCit7CisJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcFNES0RvYy0+R2V0RW52KCk7CisJQVNTRVJUKHBFbnYpOworCUNQREZTREtfQW5ub3QqIHBGWEFubm90ID0gR2V0RlhXaWRnZXRBdFBvaW50KHBvaW50LngsIHBvaW50LnkpOworCWlmKCFwRlhBbm5vdCkKKwl7CisJCUtpbGxGb2N1c0Fubm90KG5GbGFnKTsKKwl9CisJZWxzZQorCXsKKwkJQ1BERlNES19Bbm5vdEhhbmRsZXJNZ3IqIHBBbm5vdEhhbmRsZXJNZ3IgPSBwRW52LT5HZXRBbm5vdEhhbmRsZXJNZ3IoKTsKKwkJQVNTRVJUKHBBbm5vdEhhbmRsZXJNZ3IpOworCisJCUZYX0JPT0wgYlJldCA9IHBBbm5vdEhhbmRsZXJNZ3ItPkFubm90X09uTEJ1dHRvbkRvd24odGhpcywgcEZYQW5ub3QsIG5GbGFnLHBvaW50KTsKKyAJCWlmKGJSZXQpCisgCQl7CisgCQkJU2V0Rm9jdXNBbm5vdChwRlhBbm5vdCk7CisgCQl9CisJCXJldHVybiBiUmV0OworCX0KKwlyZXR1cm4gRkFMU0U7Cit9CisKKworRlhfQk9PTCBDUERGU0RLX1BhZ2VWaWV3OjpPbkxCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX1VJTlQgbkZsYWcpCit7CisJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcFNES0RvYy0+R2V0RW52KCk7CisJQVNTRVJUKHBFbnYpOworCUNQREZTREtfQW5ub3RIYW5kbGVyTWdyKiBwQW5ub3RIYW5kbGVyTWdyID0gcEVudi0+R2V0QW5ub3RIYW5kbGVyTWdyKCk7CisJQVNTRVJUKHBBbm5vdEhhbmRsZXJNZ3IpOworCUNQREZTREtfQW5ub3QqIHBGWEFubm90ID0gR2V0RlhXaWRnZXRBdFBvaW50KHBvaW50LngsIHBvaW50LnkpOworCUNQREZTREtfQW5ub3QqIHBGb2N1c0Fubm90ID0gR2V0Rm9jdXNBbm5vdCgpOworCUZYX0JPT0wgYlJldCAgPSBGQUxTRTsKKwlpZihwRm9jdXNBbm5vdCAmJiBwRm9jdXNBbm5vdCAhPSBwRlhBbm5vdCkKKwl7CisJCS8vTGFzdCBmb2N1cyBBbm5vdCBnZXRzIGEgY2hhbmNlIHRvIGhhbmRsZSB0aGUgZXZlbnQuCisJCWJSZXQgPSBwQW5ub3RIYW5kbGVyTWdyLT5Bbm5vdF9PbkxCdXR0b25VcCh0aGlzLCBwRm9jdXNBbm5vdCwgbkZsYWcscG9pbnQpOworCX0KKwlpZihwRlhBbm5vdCAmJiAhYlJldCkKKwl7CisJCWJSZXQgPSBwQW5ub3RIYW5kbGVyTWdyLT5Bbm5vdF9PbkxCdXR0b25VcCh0aGlzLCBwRlhBbm5vdCwgbkZsYWcscG9pbnQpOworCQlyZXR1cm4gYlJldDsKKwl9CisJcmV0dXJuIGJSZXQ7Cit9CisKK0ZYX0JPT0wgQ1BERlNES19QYWdlVmlldzo6T25Nb3VzZU1vdmUoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBpbnQgbkZsYWcpCit7CisKKwlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gbV9wU0RLRG9jLT5HZXRFbnYoKTsKKwlDUERGU0RLX0Fubm90SGFuZGxlck1nciogcEFubm90SGFuZGxlck1nciA9IHBFbnYtPkdldEFubm90SGFuZGxlck1ncigpOworCUFTU0VSVChwQW5ub3RIYW5kbGVyTWdyKTsKKwlpZihDUERGU0RLX0Fubm90KiBwRlhBbm5vdCA9IEdldEZYV2lkZ2V0QXRQb2ludChwb2ludC54LCBwb2ludC55KSkKKwl7CisJCWlmKG1fQ2FwdHVyZVdpZGdldCAmJiBtX0NhcHR1cmVXaWRnZXQgIT0gcEZYQW5ub3QpCisJCXsKKwkJCW1fYkV4aXRXaWRnZXQgPSBUUlVFOworCQkJbV9iRW50ZXJXaWRnZXQgPSBGQUxTRTsKKwkJCXBBbm5vdEhhbmRsZXJNZ3ItPkFubm90X09uTW91c2VFeGl0KHRoaXMsIG1fQ2FwdHVyZVdpZGdldCwgbkZsYWcpOworCQl9CisJCW1fQ2FwdHVyZVdpZGdldCA9IChDUERGU0RLX1dpZGdldCopcEZYQW5ub3Q7CisJCW1fYk9uV2lkZ2V0ID0gVFJVRTsKKwkJaWYoIW1fYkVudGVyV2lkZ2V0KQorCQl7CisJCQltX2JFbnRlcldpZGdldCA9IFRSVUU7CisJCQltX2JFeGl0V2lkZ2V0ID0gRkFMU0U7CisJCQlwQW5ub3RIYW5kbGVyTWdyLT5Bbm5vdF9Pbk1vdXNlRW50ZXIodGhpcywgcEZYQW5ub3QsbkZsYWcpOworCQl9CisJCXBBbm5vdEhhbmRsZXJNZ3ItPkFubm90X09uTW91c2VNb3ZlKHRoaXMsIHBGWEFubm90LCBuRmxhZywgcG9pbnQpOworCQlyZXR1cm4gVFJVRTsKKwl9CisJZWxzZQorCXsKKwkJaWYobV9iT25XaWRnZXQpCisJCXsJCisJCQltX2JPbldpZGdldCA9IEZBTFNFOworCQkJbV9iRXhpdFdpZGdldCA9IFRSVUU7CisJCQltX2JFbnRlcldpZGdldCA9IEZBTFNFOworCQkJaWYobV9DYXB0dXJlV2lkZ2V0KQorCQkJeworCQkJCXBBbm5vdEhhbmRsZXJNZ3ItPkFubm90X09uTW91c2VFeGl0KHRoaXMsIG1fQ2FwdHVyZVdpZGdldCwgbkZsYWcpOworCQkJCW1fQ2FwdHVyZVdpZGdldCA9IE5VTEw7CisJCQl9CisJCX0KKwkJcmV0dXJuIEZBTFNFOworCX0KKwkKKwlyZXR1cm4gRkFMU0U7OworfQorCitGWF9CT09MIENQREZTREtfUGFnZVZpZXc6Ok9uTW91c2VXaGVlbChkb3VibGUgZGVsdGFYLCBkb3VibGUgZGVsdGFZLGNvbnN0IENQREZfUG9pbnQmIHBvaW50LCBpbnQgbkZsYWcpCit7CisJaWYoQ1BERlNES19Bbm5vdCogcEFubm90ID0gR2V0RlhXaWRnZXRBdFBvaW50KHBvaW50LngsIHBvaW50LnkpKQorCXsKKwkJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcFNES0RvYy0+R2V0RW52KCk7CisJCUNQREZTREtfQW5ub3RIYW5kbGVyTWdyKiBwQW5ub3RIYW5kbGVyTWdyID0gcEVudi0+R2V0QW5ub3RIYW5kbGVyTWdyKCk7CisJCUFTU0VSVChwQW5ub3RIYW5kbGVyTWdyKTsKKwkJcmV0dXJuIHBBbm5vdEhhbmRsZXJNZ3ItPkFubm90X09uTW91c2VXaGVlbCh0aGlzLCBwQW5ub3QsIG5GbGFnLCAoaW50KWRlbHRhWSwgcG9pbnQpOworCX0KKwlyZXR1cm4gRkFMU0U7CisKK30KKworRlhfQk9PTCBDUERGU0RLX1BhZ2VWaWV3OjpPbkNoYXIoaW50IG5DaGFyLCBGWF9VSU5UIG5GbGFnKQoreworCWlmKENQREZTREtfQW5ub3QqIHBBbm5vdCA9IEdldEZvY3VzQW5ub3QoKSkKKwl7CisJCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBtX3BTREtEb2MtPkdldEVudigpOworCQlDUERGU0RLX0Fubm90SGFuZGxlck1nciogcEFubm90SGFuZGxlck1nciA9IHBFbnYtPkdldEFubm90SGFuZGxlck1ncigpOworCQlBU1NFUlQocEFubm90SGFuZGxlck1ncik7CisJCXJldHVybiBwQW5ub3RIYW5kbGVyTWdyLT5Bbm5vdF9PbkNoYXIocEFubm90LCBuQ2hhciwgbkZsYWcpOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBDUERGU0RLX1BhZ2VWaWV3OjpPbktleURvd24oaW50IG5LZXlDb2RlLCBpbnQgbkZsYWcpCit7CisJaWYoQ1BERlNES19Bbm5vdCogcEFubm90ID0gR2V0Rm9jdXNBbm5vdCgpKQorCXsKKwkJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcFNES0RvYy0+R2V0RW52KCk7CisJCUNQREZTREtfQW5ub3RIYW5kbGVyTWdyKiBwQW5ub3RIYW5kbGVyTWdyID0gcEVudi0+R2V0QW5ub3RIYW5kbGVyTWdyKCk7CisJCUFTU0VSVChwQW5ub3RIYW5kbGVyTWdyKTsKKwkJcmV0dXJuIHBBbm5vdEhhbmRsZXJNZ3ItPkFubm90X09uS2V5RG93bihwQW5ub3QsIG5LZXlDb2RlLCBuRmxhZyk7CisJfQorCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBDUERGU0RLX1BhZ2VWaWV3OjpPbktleVVwKGludCBuS2V5Q29kZSwgaW50IG5GbGFnKQoreworLy8gCWlmKENQREZTREtfQW5ub3QqIHBBbm5vdCA9IEdldEZvY3VzQW5ub3QoKSkKKy8vIAl7CisvLyAJCUNGRkxfSUZvcm1GaWxsZXIqIHBJRm9ybUZpbGxlciA9IGdfcEZvcm1GaWxsQXBwLT5HZXRJRm9ybUZpbGxlcigpOworLy8gCQlyZXR1cm4gcElGb3JtRmlsbGVyLT5PbktleVVwKHBBbm5vdCwgbktleUNvZGUsIG5GbGFnKTsKKy8vIAl9CisJcmV0dXJuIEZBTFNFOworfQorCitleHRlcm4gdm9pZCBDaGVja1VuU3VwcG9ydEFubm90KENQREZfRG9jdW1lbnQgKiBwRG9jLCBDUERGX0Fubm90KiBwUERGQW5ub3QpOworCit2b2lkIENQREZTREtfUGFnZVZpZXc6OkxvYWRGWEFubm90cygpCit7CisJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcFNES0RvYy0+R2V0RW52KCk7CisKKwlGWF9CT09MIGVuYWJsZUFQVXBkYXRlID0gQ1BERl9JbnRlckZvcm06OlVwZGF0aW5nQVBFbmFibGVkKCk7CisJLy9EaXNhYmxlIHRoZSBkZWZhdWx0IEFQIGNvbnN0cnVjdGlvbi4KKwlDUERGX0ludGVyRm9ybTo6RW5hYmxlVXBkYXRlQVAoRkFMU0UpOworCW1fcEFubm90TGlzdCA9IG5ldyBDUERGX0Fubm90TGlzdChtX3BhZ2UpOworCUNQREZfSW50ZXJGb3JtOjpFbmFibGVVcGRhdGVBUChlbmFibGVBUFVwZGF0ZSk7CisJaW50IG5Db3VudCA9IG1fcEFubm90TGlzdC0+Q291bnQoKTsKKwlmb3IoaW50IGk9MDsgaTxuQ291bnQ7IGkrKykKKwl7CisJCUNQREZfQW5ub3QqIHBQREZBbm5vdCA9IG1fcEFubm90TGlzdC0+R2V0QXQoaSk7CisJCUNQREZfRG9jdW1lbnQgKiBwRG9jID0gdGhpcy0+R2V0UERGRG9jdW1lbnQoKTsKKwkJCisJCUNoZWNrVW5TdXBwb3J0QW5ub3QocERvYywgcFBERkFubm90KTsKKworCQlDUERGU0RLX0Fubm90SGFuZGxlck1nciogcEFubm90SGFuZGxlck1nciA9IHBFbnYtPkdldEFubm90SGFuZGxlck1ncigpOworCQlBU1NFUlQocEFubm90SGFuZGxlck1nciAhPSBOVUxMKTsKKwkJaWYocEFubm90SGFuZGxlck1ncikKKwkJeworCQkJQ1BERlNES19Bbm5vdCogcEFubm90ID0gcEFubm90SGFuZGxlck1nci0+TmV3QW5ub3QocFBERkFubm90LCB0aGlzKTsKKwkJCWlmKCFwQW5ub3QpCisJCQkJY29udGludWU7CisJCQltX2Z4QW5ub3RBcnJheS5BZGQocEFubm90KTsKKworCQkJcEFubm90SGFuZGxlck1nci0+QW5ub3RfT25Mb2FkKHBBbm5vdCk7CisJCX0KKworCX0KK30KKwordm9pZAlDUERGU0RLX1BhZ2VWaWV3OjpVcGRhdGVSZWN0cyhDRlhfUmVjdEFycmF5JiByZWN0cykKK3sKKwlmb3IoaW50IGk9MDsgaTxyZWN0cy5HZXRTaXplKCk7IGkrKykKKwl7CisJCUNQREZfUmVjdCByYyA9IHJlY3RzLkdldEF0KGkpOworCQlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gbV9wU0RLRG9jLT5HZXRFbnYoKTsKKwkJcEVudi0+RkZJX0ludmFsaWRhdGUobV9wYWdlLCByYy5sZWZ0LCByYy50b3AsIHJjLnJpZ2h0LCByYy5ib3R0b20pOworCX0KK30KKwordm9pZCBDUERGU0RLX1BhZ2VWaWV3OjpVcGRhdGVWaWV3KENQREZTREtfQW5ub3QqIHBBbm5vdCkKK3sKKwlDUERGX1JlY3QgcmNXaW5kb3c7CisKKyAJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcFNES0RvYy0+R2V0RW52KCk7CQorLy8gCUNQREZTREtfQW5ub3RIYW5kbGVyTWdyKiBwQW5ub3RIYW5kbGVyID0gcEVudi0+R2V0QW5ub3RIYW5kbGVyTWdyKCk7CisJCisJcmNXaW5kb3cgPSBwQW5ub3QtPkdldFJlY3QoKTsvL3BBbm5vdEhhbmRsZXItPkFubm90X09uR2V0Vmlld0JCb3godGhpcyxwQW5ub3QpOwkKKwlwRW52LT5GRklfSW52YWxpZGF0ZShtX3BhZ2UsIHJjV2luZG93LmxlZnQsIHJjV2luZG93LnRvcCwgcmNXaW5kb3cucmlnaHQsIHJjV2luZG93LmJvdHRvbSk7CisKK30KKworaW50IENQREZTREtfUGFnZVZpZXc6OkdldFBhZ2VJbmRleCgpCit7CisJaWYobV9wYWdlKQorCXsKKwkJQ1BERl9EaWN0aW9uYXJ5KiBwRGljID0gbV9wYWdlLT5tX3BGb3JtRGljdDsKKwkJQ1BERl9Eb2N1bWVudCogcERvYyA9IG1fcFNES0RvYy0+R2V0RG9jdW1lbnQoKTsKKwkJaWYocERvYyAmJiBwRGljKQorCQl7CisJCQlyZXR1cm4gcERvYy0+R2V0UGFnZUluZGV4KHBEaWMtPkdldE9iak51bSgpKTsKKwkJfQorCX0KKwlyZXR1cm4gLTE7Cit9CisKK0ZYX0JPT0wJQ1BERlNES19QYWdlVmlldzo6SXNWYWxpZEFubm90KEZYX0xQVk9JRCBwKQoreworCWlmIChwID09IE5VTEwpIHJldHVybiBGQUxTRTsKKwlpbnQgaUNvdW50ID0gbV9wQW5ub3RMaXN0LT5Db3VudCgpOworCWZvciAoaW50IGkgPSAwOyBpIDwgaUNvdW50OyBpKyspCisJeworCQlpZiAobV9wQW5ub3RMaXN0LT5HZXRBdChpKSA9PSBwKQorCQkJcmV0dXJuIFRSVUU7CisJfQorCXJldHVybiBGQUxTRTsKK30KKworCitDUERGU0RLX0Fubm90KiBDUERGU0RLX1BhZ2VWaWV3OjpHZXRGb2N1c0Fubm90KCkKK3sKKwlDUERGU0RLX0Fubm90KiBwRm9jdXNBbm5vdCA9IG1fcFNES0RvYy0+R2V0Rm9jdXNBbm5vdCgpOworCWlmKCFwRm9jdXNBbm5vdCkKKwkJcmV0dXJuIE5VTEw7CisJCisJZm9yKGludCBpPTA7IGk8bV9meEFubm90QXJyYXkuR2V0U2l6ZSgpOyBpKyspCisJeworCQlDUERGU0RLX0Fubm90KiBwQW5ub3QgPSAoQ1BERlNES19Bbm5vdCopbV9meEFubm90QXJyYXkuR2V0QXQoaSk7CisJCWlmKHBBbm5vdCA9PSBwRm9jdXNBbm5vdCkKKwkJCXJldHVybiBwQW5ub3Q7CisJfQorCXJldHVybiBOVUxMOworfQorCmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9mc2RrX3JlbmRlcmNvbnRleHQuY3BwIGIvZnBkZnNkay9zcmMvZnNka19yZW5kZXJjb250ZXh0LmNwcAppbmRleCA1NTM4MmUxLi44OWM2MTc5IDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9mc2RrX3JlbmRlcmNvbnRleHQuY3BwCisrKyBiL2ZwZGZzZGsvc3JjL2ZzZGtfcmVuZGVyY29udGV4dC5jcHAKQEAgLTEsNDkgKzEsNDkgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfcmVuZGVyY29udGV4dC5oIg0KLQ0KLXZvaWQgQ1JlbmRlckNvbnRleHQ6OkNsZWFyKCkNCi17DQotCW1fcERldmljZSA9IE5VTEw7DQotCW1fcENvbnRleHQgPSBOVUxMOw0KLQltX3BSZW5kZXJlciA9IE5VTEw7DQotCW1fcEFubm90cyA9IE5VTEw7DQotCW1fcE9wdGlvbnMJPSBOVUxMOw0KLSNpZmRlZiBfV0lOMzJfV0NFDQotCW1fcEJpdG1hcCA9IE5VTEw7DQotCW1faEJpdG1hcCA9IE5VTEw7DQotI2VuZGlmDQotfQ0KLQ0KLUNSZW5kZXJDb250ZXh0Ojp+Q1JlbmRlckNvbnRleHQoKQ0KLXsNCi0JaWYgKG1fcFJlbmRlcmVyKSBkZWxldGUgbV9wUmVuZGVyZXI7DQotCWlmIChtX3BDb250ZXh0KSBkZWxldGUgbV9wQ29udGV4dDsNCi0JaWYgKG1fcERldmljZSkgZGVsZXRlIG1fcERldmljZTsNCi0JaWYgKG1fcEFubm90cykgZGVsZXRlIG1fcEFubm90czsNCi0JaWYgKG1fcE9wdGlvbnMtPm1fcE9DQ29udGV4dCkgZGVsZXRlIG1fcE9wdGlvbnMtPm1fcE9DQ29udGV4dDsNCi0JaWYgKG1fcE9wdGlvbnMpIGRlbGV0ZSBtX3BPcHRpb25zOw0KLSNpZmRlZiBfV0lOMzJfV0NFDQotCWlmIChtX3BCaXRtYXApIGRlbGV0ZSBtX3BCaXRtYXA7DQotCWlmIChtX2hCaXRtYXApIERlbGV0ZU9iamVjdChtX2hCaXRtYXApOw0KLSNlbmRpZg0KLX0NCi0NCi1JRlNES19QQVVTRV9BZGFwdGVyOjpJRlNES19QQVVTRV9BZGFwdGVyKElGU0RLX1BBVVNFKiBJUGF1c2UgKQ0KLXsNCi0JbV9JUGF1c2UgPSBJUGF1c2U7DQotfQ0KLQ0KLUZYX0JPT0wgSUZTREtfUEFVU0VfQWRhcHRlcjo6TmVlZFRvUGF1c2VOb3coKQ0KLXsNCi0JaWYgKG1fSVBhdXNlLT5OZWVkVG9QYXVzZU5vdykNCi0Jew0KLQkJcmV0dXJuIG1fSVBhdXNlLT5OZWVkVG9QYXVzZU5vdyhtX0lQYXVzZSk7DQotCX1lbHNlew0KLQkJcmV0dXJuIEZBTFNFOw0KLQl9DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi9pbmNsdWRlL2ZzZGtfcmVuZGVyY29udGV4dC5oIgorCit2b2lkIENSZW5kZXJDb250ZXh0OjpDbGVhcigpCit7CisJbV9wRGV2aWNlID0gTlVMTDsKKwltX3BDb250ZXh0ID0gTlVMTDsKKwltX3BSZW5kZXJlciA9IE5VTEw7CisJbV9wQW5ub3RzID0gTlVMTDsKKwltX3BPcHRpb25zCT0gTlVMTDsKKyNpZmRlZiBfV0lOMzJfV0NFCisJbV9wQml0bWFwID0gTlVMTDsKKwltX2hCaXRtYXAgPSBOVUxMOworI2VuZGlmCit9CisKK0NSZW5kZXJDb250ZXh0Ojp+Q1JlbmRlckNvbnRleHQoKQoreworCWlmIChtX3BSZW5kZXJlcikgZGVsZXRlIG1fcFJlbmRlcmVyOworCWlmIChtX3BDb250ZXh0KSBkZWxldGUgbV9wQ29udGV4dDsKKwlpZiAobV9wRGV2aWNlKSBkZWxldGUgbV9wRGV2aWNlOworCWlmIChtX3BBbm5vdHMpIGRlbGV0ZSBtX3BBbm5vdHM7CisJaWYgKG1fcE9wdGlvbnMtPm1fcE9DQ29udGV4dCkgZGVsZXRlIG1fcE9wdGlvbnMtPm1fcE9DQ29udGV4dDsKKwlpZiAobV9wT3B0aW9ucykgZGVsZXRlIG1fcE9wdGlvbnM7CisjaWZkZWYgX1dJTjMyX1dDRQorCWlmIChtX3BCaXRtYXApIGRlbGV0ZSBtX3BCaXRtYXA7CisJaWYgKG1faEJpdG1hcCkgRGVsZXRlT2JqZWN0KG1faEJpdG1hcCk7CisjZW5kaWYKK30KKworSUZTREtfUEFVU0VfQWRhcHRlcjo6SUZTREtfUEFVU0VfQWRhcHRlcihJRlNES19QQVVTRSogSVBhdXNlICkKK3sKKwltX0lQYXVzZSA9IElQYXVzZTsKK30KKworRlhfQk9PTCBJRlNES19QQVVTRV9BZGFwdGVyOjpOZWVkVG9QYXVzZU5vdygpCit7CisJaWYgKG1fSVBhdXNlLT5OZWVkVG9QYXVzZU5vdykKKwl7CisJCXJldHVybiBtX0lQYXVzZS0+TmVlZFRvUGF1c2VOb3cobV9JUGF1c2UpOworCX1lbHNleworCQlyZXR1cm4gRkFMU0U7CisJfQorfQpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvZnhlZGl0L2Z4ZXRfYXAuY3BwIGIvZnBkZnNkay9zcmMvZnhlZGl0L2Z4ZXRfYXAuY3BwCmluZGV4IDk3MzBkMzcuLjkyZTViZmMgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2Z4ZWRpdC9meGV0X2FwLmNwcAorKysgYi9mcGRmc2RrL3NyYy9meGVkaXQvZnhldF9hcC5jcHAKQEAgLTEsMjI1ICsxLDIyNSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhlZGl0L2Z4ZXRfc3R1Yi5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4ZWRpdC9meF9lZGl0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhlZGl0L2Z4ZXRfZWRpdC5oIg0KLQ0KLUNGWF9CeXRlU3RyaW5nIEdldFBERldvcmRTdHJpbmcoSUZYX0VkaXRfRm9udE1hcCAqIHBGb250TWFwLCBGWF9JTlQzMiBuRm9udEluZGV4LCBGWF9XT1JEIFdvcmQsIEZYX1dPUkQgU3ViV29yZCkgDQotew0KLQlBU1NFUlQgKHBGb250TWFwICE9IE5VTEwpOw0KLQ0KLQlDRlhfQnl0ZVN0cmluZyBzV29yZDsNCi0NCi0JaWYgKENQREZfRm9udCAqIHBQREZGb250ID0gcEZvbnRNYXAtPkdldFBERkZvbnQobkZvbnRJbmRleCkpDQotCXsNCi0JCWlmIChTdWJXb3JkID4gMCkNCi0JCXsNCi0JCQlXb3JkID0gU3ViV29yZDsJCQ0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCUZYX0RXT1JEIGR3Q2hhckNvZGUgPSAtMTsNCi0NCi0JCQlpZiAocFBERkZvbnQtPklzVW5pY29kZUNvbXBhdGlibGUoKSkNCi0JCQkJZHdDaGFyQ29kZSA9IHBQREZGb250LT5DaGFyQ29kZUZyb21Vbmljb2RlKFdvcmQpOw0KLQkJCWVsc2UNCi0JCQkJZHdDaGFyQ29kZSA9IHBGb250TWFwLT5DaGFyQ29kZUZyb21Vbmljb2RlKG5Gb250SW5kZXgsIFdvcmQpOw0KLQ0KLQkJCWlmIChkd0NoYXJDb2RlID4gMCApDQotCQkJew0KLQkJCQlwUERGRm9udC0+QXBwZW5kQ2hhcihzV29yZCwgZHdDaGFyQ29kZSk7DQotCQkJCXJldHVybiBzV29yZDsNCi0JCQl9DQotCQl9DQotDQotCQlwUERGRm9udC0+QXBwZW5kQ2hhcihzV29yZCwgV29yZCk7DQotCX0NCi0NCi0JcmV0dXJuIHNXb3JkOw0KLX0NCi0NCi1zdGF0aWMgQ0ZYX0J5dGVTdHJpbmcgR2V0V29yZFJlbmRlclN0cmluZyhjb25zdCBDRlhfQnl0ZVN0cmluZyAmIHN0cldvcmRzKQ0KLXsNCi0JaWYgKHN0cldvcmRzLkdldExlbmd0aCgpID4gMCkNCi0JCXJldHVybiBQREZfRW5jb2RlU3RyaW5nKHN0cldvcmRzKSArICIgVGpcbiI7DQotDQotCXJldHVybiAiIjsNCi19DQotDQotc3RhdGljIENGWF9CeXRlU3RyaW5nIEdldEZvbnRTZXRTdHJpbmcoSUZYX0VkaXRfRm9udE1hcCAqIHBGb250TWFwLCBGWF9JTlQzMiBuRm9udEluZGV4LCBGWF9GTE9BVCBmRm9udFNpemUpDQotew0KLQlDRlhfQnl0ZVRleHRCdWYgc1JldDsNCi0NCi0JaWYgKHBGb250TWFwKQ0KLQl7DQotCQlDRlhfQnl0ZVN0cmluZyBzRm9udEFsaWFzID0gcEZvbnRNYXAtPkdldFBERkZvbnRBbGlhcyhuRm9udEluZGV4KTsNCi0NCi0JCWlmIChzRm9udEFsaWFzLkdldExlbmd0aCgpID4gMCAmJiBmRm9udFNpemUgPiAwICkNCi0JCQlzUmV0IDw8ICIvIiA8PCBzRm9udEFsaWFzIDw8ICIgIiA8PCBmRm9udFNpemUgPDwgIiBUZlxuIjsNCi0JfQ0KLQ0KLQlyZXR1cm4gc1JldC5HZXRCeXRlU3RyaW5nKCk7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIElGWF9FZGl0OjpHZXRFZGl0QXBwZWFyYW5jZVN0cmVhbShJRlhfRWRpdCogcEVkaXQsIGNvbnN0IENQREZfUG9pbnQgJiBwdE9mZnNldCwgDQotCQkJCQkJCQkJCQkJIGNvbnN0IENQVlRfV29yZFJhbmdlICogcFJhbmdlIC8qID0gTlVMTCovLCBGWF9CT09MIGJDb250aW51b3VzLyogPSBUUlVFKi8sIEZYX1dPUkQgU3ViV29yZC8qID0gMCovKQ0KLXsNCi0JQ0ZYX0J5dGVUZXh0QnVmIHNFZGl0U3RyZWFtLCBzV29yZHM7DQotDQotCUNQREZfUG9pbnQgcHRPbGQoMC4wZiwwLjBmKSxwdE5ldygwLjBmLDAuMGYpOw0KLQlGWF9JTlQzMiBuQ3VyRm9udEluZGV4ID0gLTE7DQotDQotCWlmIChJRlhfRWRpdF9JdGVyYXRvciogcEl0ZXJhdG9yID0gcEVkaXQtPkdldEl0ZXJhdG9yKCkpDQotCXsNCi0JCWlmIChwUmFuZ2UpDQotCQkJcEl0ZXJhdG9yLT5TZXRBdChwUmFuZ2UtPkJlZ2luUG9zKTsNCi0JCWVsc2UNCi0JCQlwSXRlcmF0b3ItPlNldEF0KDApOw0KLQ0KLQkJQ1BWVF9Xb3JkUGxhY2Ugb2xkcGxhY2U7DQotDQotCQl3aGlsZSAocEl0ZXJhdG9yLT5OZXh0V29yZCgpKQ0KLQkJew0KLQkJCUNQVlRfV29yZFBsYWNlIHBsYWNlID0gcEl0ZXJhdG9yLT5HZXRBdCgpOw0KLQ0KLQkJCWlmIChwUmFuZ2UgJiYgcGxhY2UuV29yZENtcChwUmFuZ2UtPkVuZFBvcykgPiAwKSBicmVhazsNCi0NCi0JCQlpZiAoYkNvbnRpbnVvdXMpCQkJDQotCQkJew0KLQkJCQlpZiAocGxhY2UuTGluZUNtcChvbGRwbGFjZSkgIT0gMCkNCi0JCQkJew0KLQkJCQkJaWYgKHNXb3Jkcy5HZXRTaXplKCkgPiAwKQ0KLQkJCQkJew0KLQkJCQkJCXNFZGl0U3RyZWFtIDw8IEdldFdvcmRSZW5kZXJTdHJpbmcoc1dvcmRzLkdldEJ5dGVTdHJpbmcoKSk7DQotCQkJCQkJc1dvcmRzLkNsZWFyKCk7DQotCQkJCQl9DQotDQotCQkJCQlDUFZUX1dvcmQgd29yZDsNCi0JCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpDQotCQkJCQl7DQotCQkJCQkJcHROZXcgPSBDUERGX1BvaW50KHdvcmQucHRXb3JkLnggKyBwdE9mZnNldC54LCB3b3JkLnB0V29yZC55ICsgcHRPZmZzZXQueSk7DQotCQkJCQl9DQotCQkJCQllbHNlDQotCQkJCQl7DQotCQkJCQkJQ1BWVF9MaW5lIGxpbmU7DQotCQkJCQkJcEl0ZXJhdG9yLT5HZXRMaW5lKGxpbmUpOw0KLQkJCQkJCXB0TmV3ID0gQ1BERl9Qb2ludChsaW5lLnB0TGluZS54ICsgcHRPZmZzZXQueCwgbGluZS5wdExpbmUueSArIHB0T2Zmc2V0LnkpOw0KLQkJCQkJfQ0KLQ0KLQkJCQkJaWYgKHB0TmV3LnggIT0gcHRPbGQueCB8fCBwdE5ldy55ICE9IHB0T2xkLnkpDQotCQkJCQl7DQotCQkJCQkJc0VkaXRTdHJlYW0gPDwgcHROZXcueCAtIHB0T2xkLnggPDwgIiAiIDw8IHB0TmV3LnkgLSBwdE9sZC55IDw8ICIgVGRcbiI7DQotDQotCQkJCQkJcHRPbGQgPSBwdE5ldzsNCi0JCQkJCX0NCi0JCQkJfQ0KLQ0KLQkJCQlDUFZUX1dvcmQgd29yZDsNCi0JCQkJaWYgKHBJdGVyYXRvci0+R2V0V29yZCh3b3JkKSkNCi0JCQkJewkNCi0JCQkJCWlmICh3b3JkLm5Gb250SW5kZXggIT0gbkN1ckZvbnRJbmRleCkNCi0JCQkJCXsNCi0JCQkJCQlpZiAoc1dvcmRzLkdldFNpemUoKSA+IDApDQotCQkJCQkJew0KLQkJCQkJCQlzRWRpdFN0cmVhbSA8PCBHZXRXb3JkUmVuZGVyU3RyaW5nKHNXb3Jkcy5HZXRCeXRlU3RyaW5nKCkpOw0KLQkJCQkJCQlzV29yZHMuQ2xlYXIoKTsNCi0JCQkJCQl9DQotCQkJCQkJc0VkaXRTdHJlYW0gPDwgR2V0Rm9udFNldFN0cmluZyhwRWRpdC0+R2V0Rm9udE1hcCgpLHdvcmQubkZvbnRJbmRleCx3b3JkLmZGb250U2l6ZSk7DQotCQkJCQkJbkN1ckZvbnRJbmRleCA9IHdvcmQubkZvbnRJbmRleDsNCi0JCQkJCX0NCi0NCi0JCQkJCXNXb3JkcyA8PCBHZXRQREZXb3JkU3RyaW5nKHBFZGl0LT5HZXRGb250TWFwKCksbkN1ckZvbnRJbmRleCx3b3JkLldvcmQsU3ViV29yZCk7DQotCQkJCX0NCi0NCi0JCQkJb2xkcGxhY2UgPSBwbGFjZTsNCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJQ1BWVF9Xb3JkIHdvcmQ7DQotCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpDQotCQkJCXsNCi0JCQkJCXB0TmV3ID0gQ1BERl9Qb2ludCh3b3JkLnB0V29yZC54ICsgcHRPZmZzZXQueCwgd29yZC5wdFdvcmQueSArIHB0T2Zmc2V0LnkpOw0KLQ0KLQkJCQkJaWYgKHB0TmV3LnggIT0gcHRPbGQueCB8fCBwdE5ldy55ICE9IHB0T2xkLnkpDQotCQkJCQl7DQotCQkJCQkJc0VkaXRTdHJlYW0gPDwgcHROZXcueCAtIHB0T2xkLnggPDwgIiAiIDw8IHB0TmV3LnkgLSBwdE9sZC55IDw8ICIgVGRcbiI7DQotCQkJCQkJcHRPbGQgPSBwdE5ldzsNCi0JCQkJCX0JDQotDQotCQkJCQlpZiAod29yZC5uRm9udEluZGV4ICE9IG5DdXJGb250SW5kZXgpDQotCQkJCQl7DQotCQkJCQkJc0VkaXRTdHJlYW0gPDwgR2V0Rm9udFNldFN0cmluZyhwRWRpdC0+R2V0Rm9udE1hcCgpLHdvcmQubkZvbnRJbmRleCx3b3JkLmZGb250U2l6ZSk7DQotCQkJCQkJbkN1ckZvbnRJbmRleCA9IHdvcmQubkZvbnRJbmRleDsNCi0JCQkJCX0NCi0NCi0JCQkJCXNFZGl0U3RyZWFtIDw8IEdldFdvcmRSZW5kZXJTdHJpbmcoR2V0UERGV29yZFN0cmluZyhwRWRpdC0+R2V0Rm9udE1hcCgpLG5DdXJGb250SW5kZXgsd29yZC5Xb3JkLFN1YldvcmQpKTsNCi0JCQkJfQ0KLQkJCX0NCi0JCX0NCi0NCi0JCWlmIChzV29yZHMuR2V0U2l6ZSgpID4gMCkNCi0JCXsNCi0JCQlzRWRpdFN0cmVhbSA8PCBHZXRXb3JkUmVuZGVyU3RyaW5nKHNXb3Jkcy5HZXRCeXRlU3RyaW5nKCkpOw0KLQkJCXNXb3Jkcy5DbGVhcigpOw0KLQkJfQ0KLQl9DQotDQotCUNGWF9CeXRlVGV4dEJ1ZiBzQXBwU3RyZWFtOw0KLQlpZiAoc0VkaXRTdHJlYW0uR2V0U2l6ZSgpID4gMCkNCi0Jew0KLQkJRlhfSU5UMzIgbkhvcnpTY2FsZSA9IHBFZGl0LT5HZXRIb3J6U2NhbGUoKTsNCi0JCWlmIChuSG9yelNjYWxlICE9IDEwMCkNCi0JCXsNCi0JCQlzQXBwU3RyZWFtIDw8IG5Ib3J6U2NhbGUgPDwgIiBUelxuIjsNCi0JCX0NCi0NCi0JCUZYX0ZMT0FUIGZDaGFyU3BhY2UgPSBwRWRpdC0+R2V0Q2hhclNwYWNlKCk7DQotCQlpZiAoIUZYX0VESVRfSXNGbG9hdFplcm8oZkNoYXJTcGFjZSkpDQotCQl7DQotCQkJc0FwcFN0cmVhbSA8PCBmQ2hhclNwYWNlIDw8ICIgVGNcbiI7DQotCQl9DQotDQotCQlzQXBwU3RyZWFtIDw8IHNFZGl0U3RyZWFtOw0KLQl9CQ0KLQ0KLQlyZXR1cm4gc0FwcFN0cmVhbS5HZXRCeXRlU3RyaW5nKCk7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIElGWF9FZGl0OjpHZXRTZWxlY3RBcHBlYXJhbmNlU3RyZWFtKElGWF9FZGl0KiBwRWRpdCwgY29uc3QgQ1BERl9Qb2ludCAmIHB0T2Zmc2V0LCANCi0JCQkJCQkJY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgKiBwUmFuZ2UgLyo9IE5VTEwqLykNCi17DQotCUNGWF9CeXRlVGV4dEJ1ZiBzUmV0Ow0KLQ0KLQlpZiAocFJhbmdlICYmIHBSYW5nZS0+SXNFeGlzdCgpKQ0KLQl7DQotCQlpZiAoSUZYX0VkaXRfSXRlcmF0b3IqIHBJdGVyYXRvciA9IHBFZGl0LT5HZXRJdGVyYXRvcigpKQ0KLQkJew0KLQkJCXBJdGVyYXRvci0+U2V0QXQocFJhbmdlLT5CZWdpblBvcyk7DQotCQkJDQotCQkJd2hpbGUgKHBJdGVyYXRvci0+TmV4dFdvcmQoKSkNCi0JCQl7DQotCQkJCUNQVlRfV29yZFBsYWNlIHBsYWNlID0gcEl0ZXJhdG9yLT5HZXRBdCgpOw0KLQ0KLQkJCQlpZiAocFJhbmdlICYmIHBsYWNlLldvcmRDbXAocFJhbmdlLT5FbmRQb3MpID4gMCkgYnJlYWs7CQkJCQ0KLQ0KLQkJCQlDUFZUX1dvcmQgd29yZDsNCi0JCQkJQ1BWVF9MaW5lIGxpbmU7DQotCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkgJiYgcEl0ZXJhdG9yLT5HZXRMaW5lKGxpbmUpKQ0KLQkJCQl7CQkJDQotCQkJCQkvL0NQREZfUmVjdCByY1dvcmRTZWwgPSBDUERGX1JlY3Qod29yZC5wdFdvcmQueCxsaW5lLnB0TGluZS55ICsgbGluZS5mTGluZURlc2NlbnQsDQotCQkJCQkvLwkJd29yZC5wdFdvcmQueCt3b3JkLmZXaWR0aCxsaW5lLnB0TGluZS55ICsgbGluZS5mTGluZUFzY2VudCk7DQotDQotCQkJCQlzUmV0IDw8IHdvcmQucHRXb3JkLnggKyBwdE9mZnNldC54IDw8ICIgIiA8PCBsaW5lLnB0TGluZS55ICsgbGluZS5mTGluZURlc2NlbnQNCi0JCQkJCQk8PCAiICIgPDwgd29yZC5mV2lkdGggPDwgIiAiIDw8IGxpbmUuZkxpbmVBc2NlbnQgLSBsaW5lLmZMaW5lRGVzY2VudCA8PCAiIHJlXG5mXG4iOwkJCQkNCi0JCQkJfQ0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gc1JldC5HZXRCeXRlU3RyaW5nKCk7DQotfQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4ZWRpdC9meGV0X3N0dWIuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4ZWRpdC9meF9lZGl0LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGVkaXQvZnhldF9lZGl0LmgiCisKK0NGWF9CeXRlU3RyaW5nIEdldFBERldvcmRTdHJpbmcoSUZYX0VkaXRfRm9udE1hcCAqIHBGb250TWFwLCBGWF9JTlQzMiBuRm9udEluZGV4LCBGWF9XT1JEIFdvcmQsIEZYX1dPUkQgU3ViV29yZCkgCit7CisJQVNTRVJUIChwRm9udE1hcCAhPSBOVUxMKTsKKworCUNGWF9CeXRlU3RyaW5nIHNXb3JkOworCisJaWYgKENQREZfRm9udCAqIHBQREZGb250ID0gcEZvbnRNYXAtPkdldFBERkZvbnQobkZvbnRJbmRleCkpCisJeworCQlpZiAoU3ViV29yZCA+IDApCisJCXsKKwkJCVdvcmQgPSBTdWJXb3JkOwkJCisJCX0KKwkJZWxzZQorCQl7CisJCQlGWF9EV09SRCBkd0NoYXJDb2RlID0gLTE7CisKKwkJCWlmIChwUERGRm9udC0+SXNVbmljb2RlQ29tcGF0aWJsZSgpKQorCQkJCWR3Q2hhckNvZGUgPSBwUERGRm9udC0+Q2hhckNvZGVGcm9tVW5pY29kZShXb3JkKTsKKwkJCWVsc2UKKwkJCQlkd0NoYXJDb2RlID0gcEZvbnRNYXAtPkNoYXJDb2RlRnJvbVVuaWNvZGUobkZvbnRJbmRleCwgV29yZCk7CisKKwkJCWlmIChkd0NoYXJDb2RlID4gMCApCisJCQl7CisJCQkJcFBERkZvbnQtPkFwcGVuZENoYXIoc1dvcmQsIGR3Q2hhckNvZGUpOworCQkJCXJldHVybiBzV29yZDsKKwkJCX0KKwkJfQorCisJCXBQREZGb250LT5BcHBlbmRDaGFyKHNXb3JkLCBXb3JkKTsKKwl9CisKKwlyZXR1cm4gc1dvcmQ7Cit9CisKK3N0YXRpYyBDRlhfQnl0ZVN0cmluZyBHZXRXb3JkUmVuZGVyU3RyaW5nKGNvbnN0IENGWF9CeXRlU3RyaW5nICYgc3RyV29yZHMpCit7CisJaWYgKHN0cldvcmRzLkdldExlbmd0aCgpID4gMCkKKwkJcmV0dXJuIFBERl9FbmNvZGVTdHJpbmcoc3RyV29yZHMpICsgIiBUalxuIjsKKworCXJldHVybiAiIjsKK30KKworc3RhdGljIENGWF9CeXRlU3RyaW5nIEdldEZvbnRTZXRTdHJpbmcoSUZYX0VkaXRfRm9udE1hcCAqIHBGb250TWFwLCBGWF9JTlQzMiBuRm9udEluZGV4LCBGWF9GTE9BVCBmRm9udFNpemUpCit7CisJQ0ZYX0J5dGVUZXh0QnVmIHNSZXQ7CisKKwlpZiAocEZvbnRNYXApCisJeworCQlDRlhfQnl0ZVN0cmluZyBzRm9udEFsaWFzID0gcEZvbnRNYXAtPkdldFBERkZvbnRBbGlhcyhuRm9udEluZGV4KTsKKworCQlpZiAoc0ZvbnRBbGlhcy5HZXRMZW5ndGgoKSA+IDAgJiYgZkZvbnRTaXplID4gMCApCisJCQlzUmV0IDw8ICIvIiA8PCBzRm9udEFsaWFzIDw8ICIgIiA8PCBmRm9udFNpemUgPDwgIiBUZlxuIjsKKwl9CisKKwlyZXR1cm4gc1JldC5HZXRCeXRlU3RyaW5nKCk7Cit9CisKK0NGWF9CeXRlU3RyaW5nIElGWF9FZGl0OjpHZXRFZGl0QXBwZWFyYW5jZVN0cmVhbShJRlhfRWRpdCogcEVkaXQsIGNvbnN0IENQREZfUG9pbnQgJiBwdE9mZnNldCwgCisJCQkJCQkJCQkJCQkgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgKiBwUmFuZ2UgLyogPSBOVUxMKi8sIEZYX0JPT0wgYkNvbnRpbnVvdXMvKiA9IFRSVUUqLywgRlhfV09SRCBTdWJXb3JkLyogPSAwKi8pCit7CisJQ0ZYX0J5dGVUZXh0QnVmIHNFZGl0U3RyZWFtLCBzV29yZHM7CisKKwlDUERGX1BvaW50IHB0T2xkKDAuMGYsMC4wZikscHROZXcoMC4wZiwwLjBmKTsKKwlGWF9JTlQzMiBuQ3VyRm9udEluZGV4ID0gLTE7CisKKwlpZiAoSUZYX0VkaXRfSXRlcmF0b3IqIHBJdGVyYXRvciA9IHBFZGl0LT5HZXRJdGVyYXRvcigpKQorCXsKKwkJaWYgKHBSYW5nZSkKKwkJCXBJdGVyYXRvci0+U2V0QXQocFJhbmdlLT5CZWdpblBvcyk7CisJCWVsc2UKKwkJCXBJdGVyYXRvci0+U2V0QXQoMCk7CisKKwkJQ1BWVF9Xb3JkUGxhY2Ugb2xkcGxhY2U7CisKKwkJd2hpbGUgKHBJdGVyYXRvci0+TmV4dFdvcmQoKSkKKwkJeworCQkJQ1BWVF9Xb3JkUGxhY2UgcGxhY2UgPSBwSXRlcmF0b3ItPkdldEF0KCk7CisKKwkJCWlmIChwUmFuZ2UgJiYgcGxhY2UuV29yZENtcChwUmFuZ2UtPkVuZFBvcykgPiAwKSBicmVhazsKKworCQkJaWYgKGJDb250aW51b3VzKQkJCQorCQkJeworCQkJCWlmIChwbGFjZS5MaW5lQ21wKG9sZHBsYWNlKSAhPSAwKQorCQkJCXsKKwkJCQkJaWYgKHNXb3Jkcy5HZXRTaXplKCkgPiAwKQorCQkJCQl7CisJCQkJCQlzRWRpdFN0cmVhbSA8PCBHZXRXb3JkUmVuZGVyU3RyaW5nKHNXb3Jkcy5HZXRCeXRlU3RyaW5nKCkpOworCQkJCQkJc1dvcmRzLkNsZWFyKCk7CisJCQkJCX0KKworCQkJCQlDUFZUX1dvcmQgd29yZDsKKwkJCQkJaWYgKHBJdGVyYXRvci0+R2V0V29yZCh3b3JkKSkKKwkJCQkJeworCQkJCQkJcHROZXcgPSBDUERGX1BvaW50KHdvcmQucHRXb3JkLnggKyBwdE9mZnNldC54LCB3b3JkLnB0V29yZC55ICsgcHRPZmZzZXQueSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlDUFZUX0xpbmUgbGluZTsKKwkJCQkJCXBJdGVyYXRvci0+R2V0TGluZShsaW5lKTsKKwkJCQkJCXB0TmV3ID0gQ1BERl9Qb2ludChsaW5lLnB0TGluZS54ICsgcHRPZmZzZXQueCwgbGluZS5wdExpbmUueSArIHB0T2Zmc2V0LnkpOworCQkJCQl9CisKKwkJCQkJaWYgKHB0TmV3LnggIT0gcHRPbGQueCB8fCBwdE5ldy55ICE9IHB0T2xkLnkpCisJCQkJCXsKKwkJCQkJCXNFZGl0U3RyZWFtIDw8IHB0TmV3LnggLSBwdE9sZC54IDw8ICIgIiA8PCBwdE5ldy55IC0gcHRPbGQueSA8PCAiIFRkXG4iOworCisJCQkJCQlwdE9sZCA9IHB0TmV3OworCQkJCQl9CisJCQkJfQorCisJCQkJQ1BWVF9Xb3JkIHdvcmQ7CisJCQkJaWYgKHBJdGVyYXRvci0+R2V0V29yZCh3b3JkKSkKKwkJCQl7CQorCQkJCQlpZiAod29yZC5uRm9udEluZGV4ICE9IG5DdXJGb250SW5kZXgpCisJCQkJCXsKKwkJCQkJCWlmIChzV29yZHMuR2V0U2l6ZSgpID4gMCkKKwkJCQkJCXsKKwkJCQkJCQlzRWRpdFN0cmVhbSA8PCBHZXRXb3JkUmVuZGVyU3RyaW5nKHNXb3Jkcy5HZXRCeXRlU3RyaW5nKCkpOworCQkJCQkJCXNXb3Jkcy5DbGVhcigpOworCQkJCQkJfQorCQkJCQkJc0VkaXRTdHJlYW0gPDwgR2V0Rm9udFNldFN0cmluZyhwRWRpdC0+R2V0Rm9udE1hcCgpLHdvcmQubkZvbnRJbmRleCx3b3JkLmZGb250U2l6ZSk7CisJCQkJCQluQ3VyRm9udEluZGV4ID0gd29yZC5uRm9udEluZGV4OworCQkJCQl9CisKKwkJCQkJc1dvcmRzIDw8IEdldFBERldvcmRTdHJpbmcocEVkaXQtPkdldEZvbnRNYXAoKSxuQ3VyRm9udEluZGV4LHdvcmQuV29yZCxTdWJXb3JkKTsKKwkJCQl9CisKKwkJCQlvbGRwbGFjZSA9IHBsYWNlOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCUNQVlRfV29yZCB3b3JkOworCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpCisJCQkJeworCQkJCQlwdE5ldyA9IENQREZfUG9pbnQod29yZC5wdFdvcmQueCArIHB0T2Zmc2V0LngsIHdvcmQucHRXb3JkLnkgKyBwdE9mZnNldC55KTsKKworCQkJCQlpZiAocHROZXcueCAhPSBwdE9sZC54IHx8IHB0TmV3LnkgIT0gcHRPbGQueSkKKwkJCQkJeworCQkJCQkJc0VkaXRTdHJlYW0gPDwgcHROZXcueCAtIHB0T2xkLnggPDwgIiAiIDw8IHB0TmV3LnkgLSBwdE9sZC55IDw8ICIgVGRcbiI7CisJCQkJCQlwdE9sZCA9IHB0TmV3OworCQkJCQl9CQorCisJCQkJCWlmICh3b3JkLm5Gb250SW5kZXggIT0gbkN1ckZvbnRJbmRleCkKKwkJCQkJeworCQkJCQkJc0VkaXRTdHJlYW0gPDwgR2V0Rm9udFNldFN0cmluZyhwRWRpdC0+R2V0Rm9udE1hcCgpLHdvcmQubkZvbnRJbmRleCx3b3JkLmZGb250U2l6ZSk7CisJCQkJCQluQ3VyRm9udEluZGV4ID0gd29yZC5uRm9udEluZGV4OworCQkJCQl9CisKKwkJCQkJc0VkaXRTdHJlYW0gPDwgR2V0V29yZFJlbmRlclN0cmluZyhHZXRQREZXb3JkU3RyaW5nKHBFZGl0LT5HZXRGb250TWFwKCksbkN1ckZvbnRJbmRleCx3b3JkLldvcmQsU3ViV29yZCkpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmIChzV29yZHMuR2V0U2l6ZSgpID4gMCkKKwkJeworCQkJc0VkaXRTdHJlYW0gPDwgR2V0V29yZFJlbmRlclN0cmluZyhzV29yZHMuR2V0Qnl0ZVN0cmluZygpKTsKKwkJCXNXb3Jkcy5DbGVhcigpOworCQl9CisJfQorCisJQ0ZYX0J5dGVUZXh0QnVmIHNBcHBTdHJlYW07CisJaWYgKHNFZGl0U3RyZWFtLkdldFNpemUoKSA+IDApCisJeworCQlGWF9JTlQzMiBuSG9yelNjYWxlID0gcEVkaXQtPkdldEhvcnpTY2FsZSgpOworCQlpZiAobkhvcnpTY2FsZSAhPSAxMDApCisJCXsKKwkJCXNBcHBTdHJlYW0gPDwgbkhvcnpTY2FsZSA8PCAiIFR6XG4iOworCQl9CisKKwkJRlhfRkxPQVQgZkNoYXJTcGFjZSA9IHBFZGl0LT5HZXRDaGFyU3BhY2UoKTsKKwkJaWYgKCFGWF9FRElUX0lzRmxvYXRaZXJvKGZDaGFyU3BhY2UpKQorCQl7CisJCQlzQXBwU3RyZWFtIDw8IGZDaGFyU3BhY2UgPDwgIiBUY1xuIjsKKwkJfQorCisJCXNBcHBTdHJlYW0gPDwgc0VkaXRTdHJlYW07CisJfQkKKworCXJldHVybiBzQXBwU3RyZWFtLkdldEJ5dGVTdHJpbmcoKTsKK30KKworQ0ZYX0J5dGVTdHJpbmcgSUZYX0VkaXQ6OkdldFNlbGVjdEFwcGVhcmFuY2VTdHJlYW0oSUZYX0VkaXQqIHBFZGl0LCBjb25zdCBDUERGX1BvaW50ICYgcHRPZmZzZXQsIAorCQkJCQkJCWNvbnN0IENQVlRfV29yZFJhbmdlICogcFJhbmdlIC8qPSBOVUxMKi8pCit7CisJQ0ZYX0J5dGVUZXh0QnVmIHNSZXQ7CisKKwlpZiAocFJhbmdlICYmIHBSYW5nZS0+SXNFeGlzdCgpKQorCXsKKwkJaWYgKElGWF9FZGl0X0l0ZXJhdG9yKiBwSXRlcmF0b3IgPSBwRWRpdC0+R2V0SXRlcmF0b3IoKSkKKwkJeworCQkJcEl0ZXJhdG9yLT5TZXRBdChwUmFuZ2UtPkJlZ2luUG9zKTsKKwkJCQorCQkJd2hpbGUgKHBJdGVyYXRvci0+TmV4dFdvcmQoKSkKKwkJCXsKKwkJCQlDUFZUX1dvcmRQbGFjZSBwbGFjZSA9IHBJdGVyYXRvci0+R2V0QXQoKTsKKworCQkJCWlmIChwUmFuZ2UgJiYgcGxhY2UuV29yZENtcChwUmFuZ2UtPkVuZFBvcykgPiAwKSBicmVhazsJCQkJCisKKwkJCQlDUFZUX1dvcmQgd29yZDsKKwkJCQlDUFZUX0xpbmUgbGluZTsKKwkJCQlpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmQpICYmIHBJdGVyYXRvci0+R2V0TGluZShsaW5lKSkKKwkJCQl7CQkJCisJCQkJCS8vQ1BERl9SZWN0IHJjV29yZFNlbCA9IENQREZfUmVjdCh3b3JkLnB0V29yZC54LGxpbmUucHRMaW5lLnkgKyBsaW5lLmZMaW5lRGVzY2VudCwKKwkJCQkJLy8JCXdvcmQucHRXb3JkLngrd29yZC5mV2lkdGgsbGluZS5wdExpbmUueSArIGxpbmUuZkxpbmVBc2NlbnQpOworCisJCQkJCXNSZXQgPDwgd29yZC5wdFdvcmQueCArIHB0T2Zmc2V0LnggPDwgIiAiIDw8IGxpbmUucHRMaW5lLnkgKyBsaW5lLmZMaW5lRGVzY2VudAorCQkJCQkJPDwgIiAiIDw8IHdvcmQuZldpZHRoIDw8ICIgIiA8PCBsaW5lLmZMaW5lQXNjZW50IC0gbGluZS5mTGluZURlc2NlbnQgPDwgIiByZVxuZlxuIjsJCQkJCisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHNSZXQuR2V0Qnl0ZVN0cmluZygpOworfQorCmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9meGVkaXQvZnhldF9lZGl0LmNwcCBiL2ZwZGZzZGsvc3JjL2Z4ZWRpdC9meGV0X2VkaXQuY3BwCmluZGV4IDVhNmQ0ZDguLmVmYzdhY2QgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2Z4ZWRpdC9meGV0X2VkaXQuY3BwCisrKyBiL2ZwZGZzZGsvc3JjL2Z4ZWRpdC9meGV0X2VkaXQuY3BwCkBAIC0xLDM2MTAgKzEsMzYxMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhlZGl0L2Z4ZXRfc3R1Yi5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4ZWRpdC9meGV0X2VkaXQuaCINCi0NCi0jZGVmaW5lIEZYX0VESVRfVU5ET19NQVhJVEVNCQkJCTEwMDAwDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDRlhfRWRpdF9JdGVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ0ZYX0VkaXRfSXRlcmF0b3I6OkNGWF9FZGl0X0l0ZXJhdG9yKENGWF9FZGl0ICogcEVkaXQsSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IgKiBwVlRJdGVyYXRvcikgOiANCi0JbV9wRWRpdChwRWRpdCksDQotCW1fcFZUSXRlcmF0b3IocFZUSXRlcmF0b3IpDQotew0KLX0NCi0NCi1DRlhfRWRpdF9JdGVyYXRvcjo6fkNGWF9FZGl0X0l0ZXJhdG9yKCkNCi17DQotfQ0KLQ0KLUZYX0JPT0wJQ0ZYX0VkaXRfSXRlcmF0b3I6Ok5leHRXb3JkKCkNCi17DQotCUFTU0VSVChtX3BWVEl0ZXJhdG9yICE9IE5VTEwpOw0KLQkNCi0JcmV0dXJuIG1fcFZUSXRlcmF0b3ItPk5leHRXb3JkKCk7DQotfQ0KLQ0KLUZYX0JPT0wgQ0ZYX0VkaXRfSXRlcmF0b3I6Ok5leHRMaW5lKCkNCi17DQotCUFTU0VSVChtX3BWVEl0ZXJhdG9yICE9IE5VTEwpOw0KLQ0KLQlyZXR1cm4gbV9wVlRJdGVyYXRvci0+TmV4dExpbmUoKTsNCi19DQotDQotRlhfQk9PTCBDRlhfRWRpdF9JdGVyYXRvcjo6TmV4dFNlY3Rpb24oKQ0KLXsNCi0JQVNTRVJUKG1fcFZUSXRlcmF0b3IgIT0gTlVMTCk7DQotDQotCXJldHVybiBtX3BWVEl0ZXJhdG9yLT5OZXh0U2VjdGlvbigpOw0KLX0NCi0NCi1GWF9CT09MCUNGWF9FZGl0X0l0ZXJhdG9yOjpQcmV2V29yZCgpDQotew0KLQlBU1NFUlQobV9wVlRJdGVyYXRvciAhPSBOVUxMKTsNCi0JDQotCXJldHVybiBtX3BWVEl0ZXJhdG9yLT5QcmV2V29yZCgpOw0KLX0NCi0NCi1GWF9CT09MCUNGWF9FZGl0X0l0ZXJhdG9yOjpQcmV2TGluZSgpDQotew0KLQlBU1NFUlQobV9wVlRJdGVyYXRvciAhPSBOVUxMKTsNCi0NCi0JcmV0dXJuIG1fcFZUSXRlcmF0b3ItPlByZXZMaW5lKCk7DQotfQ0KLQ0KLUZYX0JPT0wJQ0ZYX0VkaXRfSXRlcmF0b3I6OlByZXZTZWN0aW9uKCkNCi17DQotCUFTU0VSVChtX3BWVEl0ZXJhdG9yICE9IE5VTEwpOw0KLQ0KLQlyZXR1cm4gbV9wVlRJdGVyYXRvci0+UHJldlNlY3Rpb24oKTsNCi19DQotDQotRlhfQk9PTCBDRlhfRWRpdF9JdGVyYXRvcjo6R2V0V29yZChDUFZUX1dvcmQgJiB3b3JkKSBjb25zdA0KLXsNCi0JQVNTRVJUKG1fcEVkaXQgIT0gTlVMTCk7DQotCUFTU0VSVChtX3BWVEl0ZXJhdG9yICE9IE5VTEwpOw0KLQ0KLQlpZiAobV9wVlRJdGVyYXRvci0+R2V0V29yZCh3b3JkKSkNCi0Jew0KLQkJd29yZC5wdFdvcmQgPSBtX3BFZGl0LT5WVFRvRWRpdCh3b3JkLnB0V29yZCk7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgQ0ZYX0VkaXRfSXRlcmF0b3I6OkdldExpbmUoQ1BWVF9MaW5lICYgbGluZSkgY29uc3QNCi17DQotCUFTU0VSVChtX3BFZGl0ICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wVlRJdGVyYXRvciAhPSBOVUxMKTsNCi0NCi0JaWYgKG1fcFZUSXRlcmF0b3ItPkdldExpbmUobGluZSkpDQotCXsJCQ0KLQkJbGluZS5wdExpbmUgPSBtX3BFZGl0LT5WVFRvRWRpdChsaW5lLnB0TGluZSk7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgQ0ZYX0VkaXRfSXRlcmF0b3I6OkdldFNlY3Rpb24oQ1BWVF9TZWN0aW9uICYgc2VjdGlvbikgY29uc3QNCi17DQotCUFTU0VSVChtX3BFZGl0ICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wVlRJdGVyYXRvciAhPSBOVUxMKTsNCi0NCi0JaWYgKG1fcFZUSXRlcmF0b3ItPkdldFNlY3Rpb24oc2VjdGlvbikpDQotCXsNCi0JCXNlY3Rpb24ucmNTZWN0aW9uID0gbV9wRWRpdC0+VlRUb0VkaXQoc2VjdGlvbi5yY1NlY3Rpb24pOw0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi12b2lkIENGWF9FZGl0X0l0ZXJhdG9yOjpTZXRBdChGWF9JTlQzMiBuV29yZEluZGV4KQ0KLXsNCi0JQVNTRVJUKG1fcFZUSXRlcmF0b3IgIT0gTlVMTCk7DQotDQotCW1fcFZUSXRlcmF0b3ItPlNldEF0KG5Xb3JkSW5kZXgpOw0KLX0NCi0NCi12b2lkIENGWF9FZGl0X0l0ZXJhdG9yOjpTZXRBdChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKQ0KLXsNCi0JQVNTRVJUKG1fcFZUSXRlcmF0b3IgIT0gTlVMTCk7DQotDQotCW1fcFZUSXRlcmF0b3ItPlNldEF0KHBsYWNlKTsNCi19DQotDQotY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBDRlhfRWRpdF9JdGVyYXRvcjo6R2V0QXQoKSBjb25zdA0KLXsNCi0JQVNTRVJUKG1fcFZUSXRlcmF0b3IgIT0gTlVMTCk7DQotDQotCXJldHVybiBtX3BWVEl0ZXJhdG9yLT5HZXRBdCgpOw0KLX0NCi0NCi1JRlhfRWRpdCogQ0ZYX0VkaXRfSXRlcmF0b3I6OkdldEVkaXQoKSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fcEVkaXQ7DQotfQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDRlhfRWRpdF9Qcm92aWRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ0ZYX0VkaXRfUHJvdmlkZXI6OkNGWF9FZGl0X1Byb3ZpZGVyKElGWF9FZGl0X0ZvbnRNYXAgKiBwRm9udE1hcCkgOiBtX3BGb250TWFwKHBGb250TWFwKQ0KLXsNCi0JQVNTRVJUKG1fcEZvbnRNYXAgIT0gTlVMTCk7DQotfQ0KLQ0KLUNGWF9FZGl0X1Byb3ZpZGVyOjp+Q0ZYX0VkaXRfUHJvdmlkZXIoKQ0KLXsNCi19DQotDQotSUZYX0VkaXRfRm9udE1hcCogQ0ZYX0VkaXRfUHJvdmlkZXI6OkdldEZvbnRNYXAoKQ0KLXsNCi0JcmV0dXJuIG1fcEZvbnRNYXA7DQotfQ0KLQ0KLUZYX0lOVDMyIENGWF9FZGl0X1Byb3ZpZGVyOjpHZXRDaGFyV2lkdGgoRlhfSU5UMzIgbkZvbnRJbmRleCwgRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBuV29yZFN0eWxlKQ0KLXsNCi0JaWYgKENQREZfRm9udCogcFBERkZvbnQgPSBtX3BGb250TWFwLT5HZXRQREZGb250KG5Gb250SW5kZXgpKQ0KLQl7DQotCQlGWF9EV09SRCBjaGFyY29kZSA9IHdvcmQ7DQotDQotCQlpZiAocFBERkZvbnQtPklzVW5pY29kZUNvbXBhdGlibGUoKSkJCQ0KLQkJCWNoYXJjb2RlID0gcFBERkZvbnQtPkNoYXJDb2RlRnJvbVVuaWNvZGUod29yZCk7CQ0KLQkJZWxzZQ0KLQkJCWNoYXJjb2RlID0gbV9wRm9udE1hcC0+Q2hhckNvZGVGcm9tVW5pY29kZShuRm9udEluZGV4LCB3b3JkKTsNCi0NCi0JCWlmIChjaGFyY29kZSAhPSAtMSkJCQkNCi0JCQlyZXR1cm4gcFBERkZvbnQtPkdldENoYXJXaWR0aEYoY2hhcmNvZGUpOw0KLQl9DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1GWF9JTlQzMiBDRlhfRWRpdF9Qcm92aWRlcjo6R2V0VHlwZUFzY2VudChGWF9JTlQzMiBuRm9udEluZGV4KQ0KLXsNCi0JaWYgKENQREZfRm9udCogcFBERkZvbnQgPSBtX3BGb250TWFwLT5HZXRQREZGb250KG5Gb250SW5kZXgpKQ0KLQkJcmV0dXJuIHBQREZGb250LT5HZXRUeXBlQXNjZW50KCk7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1GWF9JTlQzMiBDRlhfRWRpdF9Qcm92aWRlcjo6R2V0VHlwZURlc2NlbnQoRlhfSU5UMzIgbkZvbnRJbmRleCkNCi17DQotCWlmIChDUERGX0ZvbnQqIHBQREZGb250ID0gbV9wRm9udE1hcC0+R2V0UERGRm9udChuRm9udEluZGV4KSkNCi0JCXJldHVybiBwUERGRm9udC0+R2V0VHlwZURlc2NlbnQoKTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLUZYX0lOVDMyIENGWF9FZGl0X1Byb3ZpZGVyOjpHZXRXb3JkRm9udEluZGV4KEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCwgRlhfSU5UMzIgbkZvbnRJbmRleCkNCi17DQotCXJldHVybiBtX3BGb250TWFwLT5HZXRXb3JkRm9udEluZGV4KHdvcmQsY2hhcnNldCxuRm9udEluZGV4KTsNCi19DQotDQotRlhfSU5UMzIgQ0ZYX0VkaXRfUHJvdmlkZXI6OkdldERlZmF1bHRGb250SW5kZXgoKQ0KLXsNCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLUZYX0JPT0wJQ0ZYX0VkaXRfUHJvdmlkZXI6OklzTGF0aW5Xb3JkKEZYX1dPUkQgd29yZCkNCi17DQotCXJldHVybiBGWF9FRElUX0lTTEFUSU5XT1JEKHdvcmQpOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZYX0VkaXRfUmVmcmVzaCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DRlhfRWRpdF9SZWZyZXNoOjpDRlhfRWRpdF9SZWZyZXNoKCkNCi17DQotfQ0KLQ0KLUNGWF9FZGl0X1JlZnJlc2g6On5DRlhfRWRpdF9SZWZyZXNoKCkNCi17DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXRfUmVmcmVzaDo6QmVnaW5SZWZyZXNoKCkNCi17DQotCW1fUmVmcmVzaFJlY3RzLkVtcHR5KCk7DQotCW1fT2xkTGluZVJlY3RzID0gbV9OZXdMaW5lUmVjdHM7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXRfUmVmcmVzaDo6UHVzaChjb25zdCBDUFZUX1dvcmRSYW5nZSAmIGxpbmVyYW5nZSxjb25zdCBDUERGX1JlY3QgJiByZWN0KQ0KLXsNCi0JbV9OZXdMaW5lUmVjdHMuQWRkKGxpbmVyYW5nZSxyZWN0KTsNCi19DQotDQotdm9pZCBDRlhfRWRpdF9SZWZyZXNoOjpOb0FuYWx5c2UoKQ0KLXsNCi0Jew0KLQkJZm9yIChGWF9JTlQzMiBpID0gMCwgc3ogPSBtX09sZExpbmVSZWN0cy5HZXRTaXplKCk7IGkgPCBzejsgaSsrKQ0KLQkJCWlmIChDRlhfRWRpdF9MaW5lUmVjdCAqIHBPbGRSZWN0ID0gbV9PbGRMaW5lUmVjdHMuR2V0QXQoaSkpDQotCQkJCW1fUmVmcmVzaFJlY3RzLkFkZChwT2xkUmVjdC0+bV9yY0xpbmUpOw0KLQl9DQotDQotCXsNCi0JCWZvciAoRlhfSU5UMzIgaSA9IDAsIHN6ID0gbV9OZXdMaW5lUmVjdHMuR2V0U2l6ZSgpOyBpIDwgc3o7IGkrKykNCi0JCQlpZiAoQ0ZYX0VkaXRfTGluZVJlY3QgKiBwTmV3UmVjdCA9IG1fTmV3TGluZVJlY3RzLkdldEF0KGkpKQ0KLQkJCQltX1JlZnJlc2hSZWN0cy5BZGQocE5ld1JlY3QtPm1fcmNMaW5lKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENGWF9FZGl0X1JlZnJlc2g6OkFuYWx5c2UoRlhfSU5UMzIgbkFsaWdubWVudCkNCi17DQotCUZYX0JPT0wgYkxpbmVUb3BDaGFuZ2VkID0gRkFMU0U7DQotCUNQREZfUmVjdCByY1Jlc3VsdDsNCi0JRlhfRkxPQVQgZldpZHRoRGlmZjsNCi0NCi0JRlhfSU5UMzIgc3pNYXggPSBGWF9FRElUX01BWChtX09sZExpbmVSZWN0cy5HZXRTaXplKCksbV9OZXdMaW5lUmVjdHMuR2V0U2l6ZSgpKTsNCi0JRlhfSU5UMzIgaSA9IDA7DQotDQotCXdoaWxlIChpIDwgc3pNYXgpDQotCXsNCi0JCUNGWF9FZGl0X0xpbmVSZWN0ICogcE9sZFJlY3QgPSBtX09sZExpbmVSZWN0cy5HZXRBdChpKTsNCi0JCUNGWF9FZGl0X0xpbmVSZWN0ICogcE5ld1JlY3QgPSBtX05ld0xpbmVSZWN0cy5HZXRBdChpKTsNCi0NCi0JCWlmIChwT2xkUmVjdCkNCi0JCXsNCi0JCQlpZiAocE5ld1JlY3QpDQotCQkJew0KLQkJCQlpZiAoYkxpbmVUb3BDaGFuZ2VkKQ0KLQkJCQl7DQotCQkJCQlyY1Jlc3VsdCA9IHBPbGRSZWN0LT5tX3JjTGluZTsNCi0JCQkJCXJjUmVzdWx0LlVuaW9uKHBOZXdSZWN0LT5tX3JjTGluZSk7DQotCQkJCQltX1JlZnJlc2hSZWN0cy5BZGQocmNSZXN1bHQpOw0KLQkJCQl9DQotCQkJCWVsc2UNCi0JCQkJew0KLQkJCQkJaWYgKCpwTmV3UmVjdCAhPSAqcE9sZFJlY3QpDQotCQkJCQl7DQotCQkJCQkJaWYgKCFwTmV3UmVjdC0+SXNTYW1lVG9wKCpwT2xkUmVjdCkgfHwgIXBOZXdSZWN0LT5Jc1NhbWVIZWlnaHQoKnBPbGRSZWN0KSkNCi0JCQkJCQl7DQotCQkJCQkJCWJMaW5lVG9wQ2hhbmdlZCA9IFRSVUU7DQotCQkJCQkJCWNvbnRpbnVlOw0KLQkJCQkJCX0NCi0NCi0JCQkJCQlpZiAobkFsaWdubWVudCA9PSAwKQ0KLQkJCQkJCXsNCi0JCQkJCQkJaWYgKHBOZXdSZWN0LT5tX3dyTGluZS5CZWdpblBvcyAhPSBwT2xkUmVjdC0+bV93ckxpbmUuQmVnaW5Qb3MpDQotCQkJCQkJCXsNCi0JCQkJCQkJCXJjUmVzdWx0ID0gcE9sZFJlY3QtPm1fcmNMaW5lOw0KLQkJCQkJCQkJcmNSZXN1bHQuVW5pb24ocE5ld1JlY3QtPm1fcmNMaW5lKTsNCi0JCQkJCQkJCW1fUmVmcmVzaFJlY3RzLkFkZChyY1Jlc3VsdCk7CQ0KLQkJCQkJCQl9DQotCQkJCQkJCWVsc2UNCi0JCQkJCQkJew0KLQkJCQkJCQkJaWYgKCFwTmV3UmVjdC0+SXNTYW1lTGVmdCgqcE9sZFJlY3QpKSANCi0JCQkJCQkJCXsNCi0JCQkJCQkJCQlyY1Jlc3VsdCA9IHBPbGRSZWN0LT5tX3JjTGluZTsNCi0JCQkJCQkJCQlyY1Jlc3VsdC5VbmlvbihwTmV3UmVjdC0+bV9yY0xpbmUpOwkJCQkJCQkJCQkNCi0JCQkJCQkJCX0NCi0JCQkJCQkJCWVsc2UNCi0JCQkJCQkJCXsNCi0JCQkJCQkJCQlmV2lkdGhEaWZmID0gcE5ld1JlY3QtPm1fcmNMaW5lLldpZHRoKCkgLSBwT2xkUmVjdC0+bV9yY0xpbmUuV2lkdGgoKTsNCi0JCQkJCQkJCQlyY1Jlc3VsdCA9IHBOZXdSZWN0LT5tX3JjTGluZTsNCi0JCQkJCQkJCQlpZiAoZldpZHRoRGlmZiA+IDAuMGYpDQotCQkJCQkJCQkJCXJjUmVzdWx0LmxlZnQgPSByY1Jlc3VsdC5yaWdodCAtIGZXaWR0aERpZmY7DQotCQkJCQkJCQkJZWxzZQ0KLQkJCQkJCQkJCXsNCi0JCQkJCQkJCQkJcmNSZXN1bHQubGVmdCA9IHJjUmVzdWx0LnJpZ2h0Ow0KLQkJCQkJCQkJCQlyY1Jlc3VsdC5yaWdodCArPSAoLWZXaWR0aERpZmYpOw0KLQkJCQkJCQkJCX0NCi0JCQkJCQkJCX0NCi0JCQkJCQkJCW1fUmVmcmVzaFJlY3RzLkFkZChyY1Jlc3VsdCk7DQotCQkJCQkJCX0NCi0JCQkJCQl9DQotCQkJCQkJZWxzZQ0KLQkJCQkJCXsNCi0JCQkJCQkJcmNSZXN1bHQgPSBwT2xkUmVjdC0+bV9yY0xpbmU7DQotCQkJCQkJCXJjUmVzdWx0LlVuaW9uKHBOZXdSZWN0LT5tX3JjTGluZSk7DQotCQkJCQkJCW1fUmVmcmVzaFJlY3RzLkFkZChyY1Jlc3VsdCk7DQotCQkJCQkJfQ0KLQkJCQkJfQ0KLQkJCQkJZWxzZQ0KLQkJCQkJew0KLQkJCQkJCS8vZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZw0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCW1fUmVmcmVzaFJlY3RzLkFkZChwT2xkUmVjdC0+bV9yY0xpbmUpOw0KLQkJCX0NCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlpZiAocE5ld1JlY3QpDQotCQkJew0KLQkJCQltX1JlZnJlc2hSZWN0cy5BZGQocE5ld1JlY3QtPm1fcmNMaW5lKTsNCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJLy9lcnJvcg0KLQkJCX0NCi0JCX0NCi0JCWkrKzsNCi0JfQ0KLX0NCi0NCi12b2lkIENGWF9FZGl0X1JlZnJlc2g6OkFkZFJlZnJlc2goY29uc3QgQ1BERl9SZWN0ICYgcmVjdCkNCi17DQotCW1fUmVmcmVzaFJlY3RzLkFkZChyZWN0KTsNCi19DQotDQotY29uc3QgQ0ZYX0VkaXRfUmVjdEFycmF5ICogQ0ZYX0VkaXRfUmVmcmVzaDo6R2V0UmVmcmVzaFJlY3RzKCkgY29uc3QNCi17DQotCXJldHVybiAmbV9SZWZyZXNoUmVjdHM7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXRfUmVmcmVzaDo6RW5kUmVmcmVzaCgpDQotew0KLQltX1JlZnJlc2hSZWN0cy5FbXB0eSgpOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENGWF9FZGl0X1VuZG8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUNGWF9FZGl0X1VuZG86OkNGWF9FZGl0X1VuZG8oRlhfSU5UMzIgbkJ1ZnNpemUpIDogbV9uQ3VyVW5kb1BvcygwKSwNCi0JbV9uQnVmU2l6ZShuQnVmc2l6ZSksDQotCW1fYk1vZGlmaWVkKEZBTFNFKSwNCi0JbV9iVmlyZ2luKFRSVUUpLA0KLQltX2JXb3JraW5nKEZBTFNFKQ0KLXsNCi19DQotDQotQ0ZYX0VkaXRfVW5kbzo6fkNGWF9FZGl0X1VuZG8oKQ0KLXsNCi0JUmVzZXQoKTsNCi19DQotDQotRlhfQk9PTCBDRlhfRWRpdF9VbmRvOjpDYW5VbmRvKCkgY29uc3QNCi17DQotCXJldHVybiBtX25DdXJVbmRvUG9zID4gMDsNCi19DQotDQotdm9pZCBDRlhfRWRpdF9VbmRvOjpVbmRvKCkNCi17DQotCW1fYldvcmtpbmcgPSBUUlVFOw0KLQ0KLQlpZiAobV9uQ3VyVW5kb1BvcyA+IDApDQotCXsNCi0JCUlGWF9FZGl0X1VuZG9JdGVtICogcEl0ZW0gPSBtX1VuZG9JdGVtU3RhY2suR2V0QXQobV9uQ3VyVW5kb1Bvcy0xKTsNCi0JCUFTU0VSVChwSXRlbSAhPSBOVUxMKTsNCi0NCi0JCXBJdGVtLT5VbmRvKCk7DQotCQ0KLQkJbV9uQ3VyVW5kb1Bvcy0tOw0KLQkJbV9iTW9kaWZpZWQgPSAobV9uQ3VyVW5kb1BvcyAhPSAwKTsJCQ0KLQl9DQotDQotCW1fYldvcmtpbmcgPSBGQUxTRTsNCi19DQotDQotRlhfQk9PTAlDRlhfRWRpdF9VbmRvOjpDYW5SZWRvKCkgY29uc3QNCi17DQotCXJldHVybiBtX25DdXJVbmRvUG9zIDwgbV9VbmRvSXRlbVN0YWNrLkdldFNpemUoKTsNCi19DQotDQotdm9pZCBDRlhfRWRpdF9VbmRvOjpSZWRvKCkNCi17DQotCW1fYldvcmtpbmcgPSBUUlVFOw0KLQ0KLQlGWF9JTlQzMiBuU3RhY2tTaXplID0gbV9VbmRvSXRlbVN0YWNrLkdldFNpemUoKTsNCi0NCi0JaWYgKG1fbkN1clVuZG9Qb3MgPCBuU3RhY2tTaXplKQ0KLQl7DQotCQlJRlhfRWRpdF9VbmRvSXRlbSAqIHBJdGVtID0gbV9VbmRvSXRlbVN0YWNrLkdldEF0KG1fbkN1clVuZG9Qb3MpOw0KLQkJQVNTRVJUKHBJdGVtICE9IE5VTEwpOw0KLQ0KLQkJcEl0ZW0tPlJlZG8oKTsNCi0NCi0JCW1fbkN1clVuZG9Qb3MrKzsNCi0JCW1fYk1vZGlmaWVkID0gKG1fbkN1clVuZG9Qb3MgIT0gMCk7CQkNCi0JfQ0KLQ0KLQltX2JXb3JraW5nID0gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wJQ0ZYX0VkaXRfVW5kbzo6SXNXb3JraW5nKCkgY29uc3QNCi17DQotCXJldHVybiBtX2JXb3JraW5nOw0KLX0NCi0NCi12b2lkIENGWF9FZGl0X1VuZG86OkFkZEl0ZW0oSUZYX0VkaXRfVW5kb0l0ZW0qIHBJdGVtKQ0KLXsNCi0JQVNTRVJUKCFtX2JXb3JraW5nKTsNCi0JQVNTRVJUKHBJdGVtICE9IE5VTEwpOw0KLQlBU1NFUlQobV9uQnVmU2l6ZSA+IDEpOw0KLQkNCi0JaWYgKG1fbkN1clVuZG9Qb3MgPCBtX1VuZG9JdGVtU3RhY2suR2V0U2l6ZSgpKQ0KLQkJUmVtb3ZlVGFpbHMoKTsNCi0NCi0JaWYgKG1fVW5kb0l0ZW1TdGFjay5HZXRTaXplKCkgPj0gbV9uQnVmU2l6ZSkNCi0Jew0KLQkJUmVtb3ZlSGVhZHMoKTsJDQotCQltX2JWaXJnaW4gPSBGQUxTRTsNCi0JfQ0KLQ0KLQltX1VuZG9JdGVtU3RhY2suQWRkKHBJdGVtKTsJDQotCW1fbkN1clVuZG9Qb3MgPSBtX1VuZG9JdGVtU3RhY2suR2V0U2l6ZSgpOw0KLQ0KLQltX2JNb2RpZmllZCA9IChtX25DdXJVbmRvUG9zICE9IDApOw0KLX0NCi0NCi1GWF9CT09MCUNGWF9FZGl0X1VuZG86OklzTW9kaWZpZWQoKSBjb25zdA0KLXsNCi0JaWYgKG1fYlZpcmdpbikNCi0JCXJldHVybiBtX2JNb2RpZmllZDsNCi0JZWxzZQ0KLQkJcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUlGWF9FZGl0X1VuZG9JdGVtKiBDRlhfRWRpdF9VbmRvOjpHZXRJdGVtKEZYX0lOVDMyIG5JbmRleCkNCi17DQotCWlmIChuSW5kZXg+PTAgJiYgbkluZGV4IDwgbV9VbmRvSXRlbVN0YWNrLkdldFNpemUoKSkNCi0JCXJldHVybiBtX1VuZG9JdGVtU3RhY2suR2V0QXQobkluZGV4KTsNCi0NCi0JcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXRfVW5kbzo6UmVtb3ZlSGVhZHMoKQ0KLXsNCi0JQVNTRVJUKG1fVW5kb0l0ZW1TdGFjay5HZXRTaXplKCkgPiAxKTsNCi0NCi0JSUZYX0VkaXRfVW5kb0l0ZW0qIHBJdGVtID0gbV9VbmRvSXRlbVN0YWNrLkdldEF0KDApOw0KLQlBU1NFUlQocEl0ZW0gIT0gTlVMTCk7DQotDQotCXBJdGVtLT5SZWxlYXNlKCk7DQotCW1fVW5kb0l0ZW1TdGFjay5SZW1vdmVBdCgwKTsNCi19DQotDQotdm9pZCBDRlhfRWRpdF9VbmRvOjpSZW1vdmVUYWlscygpDQotew0KLQlmb3IgKEZYX0lOVDMyIGkgPSBtX1VuZG9JdGVtU3RhY2suR2V0U2l6ZSgpLTE7IGkgPj0gbV9uQ3VyVW5kb1BvczsgaS0tKQ0KLQl7DQotCQlJRlhfRWRpdF9VbmRvSXRlbSogcEl0ZW0gPSBtX1VuZG9JdGVtU3RhY2suR2V0QXQoaSk7DQotCQlBU1NFUlQocEl0ZW0gIT0gTlVMTCk7DQotDQotCQlwSXRlbS0+UmVsZWFzZSgpOw0KLQkJbV9VbmRvSXRlbVN0YWNrLlJlbW92ZUF0KGkpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXRfVW5kbzo6UmVzZXQoKQ0KLXsNCi0JZm9yIChGWF9JTlQzMiBpPTAsIHN6PW1fVW5kb0l0ZW1TdGFjay5HZXRTaXplKCk7IGkgPCBzejsgaSsrKQ0KLQl7DQotCQlJRlhfRWRpdF9VbmRvSXRlbSAqIHBJdGVtID0gbV9VbmRvSXRlbVN0YWNrLkdldEF0KGkpOw0KLQkJQVNTRVJUKHBJdGVtICE9IE5VTEwpOw0KLQ0KLQkJcEl0ZW0tPlJlbGVhc2UoKTsNCi0JfQ0KLQltX25DdXJVbmRvUG9zID0gMDsNCi0JbV9VbmRvSXRlbVN0YWNrLlJlbW92ZUFsbCgpOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDRlhfRWRpdF9Hcm91cFVuZG9JdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ0ZYX0VkaXRfR3JvdXBVbmRvSXRlbTo6Q0ZYX0VkaXRfR3JvdXBVbmRvSXRlbShjb25zdCBDRlhfV2lkZVN0cmluZyYgc1RpdGxlKSA6IG1fc1RpdGxlKHNUaXRsZSkNCi17DQotfQ0KLQ0KLUNGWF9FZGl0X0dyb3VwVW5kb0l0ZW06On5DRlhfRWRpdF9Hcm91cFVuZG9JdGVtKCkNCi17DQotCWZvciAoaW50IGk9MCxzej1tX0l0ZW1zLkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQl7DQotCQlDRlhfRWRpdF9VbmRvSXRlbSogcFVuZG9JdGVtID0gbV9JdGVtc1tpXTsNCi0JCUFTU0VSVChwVW5kb0l0ZW0gIT0gTlVMTCk7DQotDQotCQlwVW5kb0l0ZW0tPlJlbGVhc2UoKTsNCi0JfQ0KLQ0KLQltX0l0ZW1zLlJlbW92ZUFsbCgpOw0KLX0NCi0NCi12b2lkIENGWF9FZGl0X0dyb3VwVW5kb0l0ZW06OkFkZFVuZG9JdGVtKENGWF9FZGl0X1VuZG9JdGVtKiBwVW5kb0l0ZW0pDQotew0KLQlBU1NFUlQocFVuZG9JdGVtICE9IE5VTEwpOw0KLQ0KLQlwVW5kb0l0ZW0tPlNldEZpcnN0KEZBTFNFKTsNCi0JcFVuZG9JdGVtLT5TZXRMYXN0KEZBTFNFKTsNCi0NCi0JbV9JdGVtcy5BZGQocFVuZG9JdGVtKTsNCi0NCi0JaWYgKG1fc1RpdGxlLklzRW1wdHkoKSkNCi0JCW1fc1RpdGxlID0gcFVuZG9JdGVtLT5HZXRVbmRvVGl0bGUoKTsNCi19DQotDQotdm9pZCBDRlhfRWRpdF9Hcm91cFVuZG9JdGVtOjpVcGRhdGVJdGVtcygpDQotew0KLQlpZiAobV9JdGVtcy5HZXRTaXplKCkgPiAwKQ0KLQl7DQotCQlDRlhfRWRpdF9VbmRvSXRlbSogcEZpcnN0SXRlbSA9IG1fSXRlbXNbMF07DQotCQlBU1NFUlQocEZpcnN0SXRlbSAhPSBOVUxMKTsNCi0JCXBGaXJzdEl0ZW0tPlNldEZpcnN0KFRSVUUpOw0KLQ0KLQkJQ0ZYX0VkaXRfVW5kb0l0ZW0qIHBMYXN0SXRlbSA9IG1fSXRlbXNbbV9JdGVtcy5HZXRTaXplKCkgLSAxXTsNCi0JCUFTU0VSVChwTGFzdEl0ZW0gIT0gTlVMTCk7DQotCQlwTGFzdEl0ZW0tPlNldExhc3QoVFJVRSk7DQotCX0NCi19DQotDQotdm9pZCBDRlhfRWRpdF9Hcm91cFVuZG9JdGVtOjpVbmRvKCkNCi17DQotCWZvciAoaW50IGk9bV9JdGVtcy5HZXRTaXplKCktMTsgaT49MDsgaS0tKQ0KLQl7DQotCQlDRlhfRWRpdF9VbmRvSXRlbSogcFVuZG9JdGVtID0gbV9JdGVtc1tpXTsNCi0JCUFTU0VSVChwVW5kb0l0ZW0gIT0gTlVMTCk7DQotDQotCQlwVW5kb0l0ZW0tPlVuZG8oKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENGWF9FZGl0X0dyb3VwVW5kb0l0ZW06OlJlZG8oKQ0KLXsNCi0JZm9yIChpbnQgaT0wLHN6PW1fSXRlbXMuR2V0U2l6ZSgpOyBpPHN6OyBpKyspDQotCXsNCi0JCUNGWF9FZGl0X1VuZG9JdGVtKiBwVW5kb0l0ZW0gPSBtX0l0ZW1zW2ldOw0KLQkJQVNTRVJUKHBVbmRvSXRlbSAhPSBOVUxMKTsNCi0NCi0JCXBVbmRvSXRlbS0+UmVkbygpOw0KLQl9DQotfQ0KLQ0KLUNGWF9XaWRlU3RyaW5nIENGWF9FZGl0X0dyb3VwVW5kb0l0ZW06OkdldFVuZG9UaXRsZSgpDQotew0KLQlyZXR1cm4gbV9zVGl0bGU7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXRfR3JvdXBVbmRvSXRlbTo6UmVsZWFzZSgpDQotew0KLQlkZWxldGUgdGhpczsNCi19DQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDRlhfRWRpdF9VbmRvSXRlbSBkZXJpdmVkIGNsYXNzZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUNGWEVVX0luc2VydFdvcmQ6OkNGWEVVX0luc2VydFdvcmQoQ0ZYX0VkaXQgKiBwRWRpdCwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cE9sZFBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwTmV3UGxhY2UsDQotCQkJCQkJCQkgRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBjaGFyc2V0LCBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMpIA0KLQk6IG1fcEVkaXQocEVkaXQpLCBtX3dwT2xkKHdwT2xkUGxhY2UpLCBtX3dwTmV3KHdwTmV3UGxhY2UpLCBtX1dvcmQod29yZCksIG1fbkNoYXJzZXQoY2hhcnNldCksIG1fV29yZFByb3BzKCkNCi17DQotCWlmIChwV29yZFByb3BzKQ0KLQkJbV9Xb3JkUHJvcHMgPSAqcFdvcmRQcm9wczsNCi19DQotDQotQ0ZYRVVfSW5zZXJ0V29yZDo6fkNGWEVVX0luc2VydFdvcmQoKQ0KLXsNCi19DQotDQotdm9pZCBDRlhFVV9JbnNlcnRXb3JkOjpSZWRvKCkNCi17DQotCWlmIChtX3BFZGl0KQ0KLQl7DQotCQltX3BFZGl0LT5TZWxlY3ROb25lKCk7DQotCQltX3BFZGl0LT5TZXRDYXJldChtX3dwT2xkKTsJCQ0KLQkJbV9wRWRpdC0+SW5zZXJ0V29yZChtX1dvcmQsbV9uQ2hhcnNldCwmbV9Xb3JkUHJvcHMsRkFMU0UsVFJVRSk7DQotCX0NCi19DQotDQotdm9pZCBDRlhFVV9JbnNlcnRXb3JkOjpVbmRvKCkNCi17DQotCWlmIChtX3BFZGl0KQ0KLQl7DQotCQltX3BFZGl0LT5TZWxlY3ROb25lKCk7DQotCQltX3BFZGl0LT5TZXRDYXJldChtX3dwTmV3KTsNCi0JCW1fcEVkaXQtPkJhY2tzcGFjZShGQUxTRSxUUlVFKTsNCi0JfQ0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUNGWEVVX0luc2VydFJldHVybjo6Q0ZYRVVfSW5zZXJ0UmV0dXJuKENGWF9FZGl0ICogcEVkaXQsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3BPbGRQbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cE5ld1BsYWNlLA0KLQkJCSBjb25zdCBDUFZUX1NlY1Byb3BzICogcFNlY1Byb3BzLCBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMpIDoNCi0JCQltX3BFZGl0KHBFZGl0KSwNCi0JCQltX3dwT2xkKHdwT2xkUGxhY2UpLA0KLQkJCW1fd3BOZXcod3BOZXdQbGFjZSksDQotCQkJbV9TZWNQcm9wcygpLA0KLQkJCW1fV29yZFByb3BzKCkJCQkJCQkJCQkgDQotew0KLQlpZiAocFNlY1Byb3BzKQ0KLQkJbV9TZWNQcm9wcyA9ICpwU2VjUHJvcHM7DQotCWlmIChwV29yZFByb3BzKQ0KLQkJbV9Xb3JkUHJvcHMgPSAqcFdvcmRQcm9wczsNCi19DQotDQotQ0ZYRVVfSW5zZXJ0UmV0dXJuOjp+Q0ZYRVVfSW5zZXJ0UmV0dXJuKCkNCi17DQotfQ0KLQ0KLXZvaWQgQ0ZYRVVfSW5zZXJ0UmV0dXJuOjpSZWRvKCkNCi17DQotCWlmIChtX3BFZGl0KQ0KLQl7DQotCQltX3BFZGl0LT5TZWxlY3ROb25lKCk7DQotCQltX3BFZGl0LT5TZXRDYXJldChtX3dwT2xkKTsNCi0JCW1fcEVkaXQtPkluc2VydFJldHVybigmbV9TZWNQcm9wcywmbV9Xb3JkUHJvcHMsRkFMU0UsVFJVRSk7DQotCX0NCi19DQotDQotdm9pZCBDRlhFVV9JbnNlcnRSZXR1cm46OlVuZG8oKQ0KLXsNCi0JaWYgKG1fcEVkaXQpDQotCXsNCi0JCW1fcEVkaXQtPlNlbGVjdE5vbmUoKTsNCi0JCW1fcEVkaXQtPlNldENhcmV0KG1fd3BOZXcpOw0KLQkJbV9wRWRpdC0+QmFja3NwYWNlKEZBTFNFLFRSVUUpOw0KLQl9DQotfQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotLy9DRlhFVV9CYWNrc3BhY2UNCi0NCi1DRlhFVV9CYWNrc3BhY2U6OkNGWEVVX0JhY2tzcGFjZShDRlhfRWRpdCAqIHBFZGl0LCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwT2xkUGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3BOZXdQbGFjZSwNCi0JCQkJCQkJICAgRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBjaGFyc2V0LA0KLQkJCQkJCQkgICBjb25zdCBDUFZUX1NlY1Byb3BzICYgU2VjUHJvcHMsIGNvbnN0IENQVlRfV29yZFByb3BzICYgV29yZFByb3BzKSA6DQotCQkJbV9wRWRpdChwRWRpdCksDQotCQkJbV93cE9sZCh3cE9sZFBsYWNlKSwNCi0JCQltX3dwTmV3KHdwTmV3UGxhY2UpLA0KLQkJCW1fV29yZCh3b3JkKSwNCi0JCQltX25DaGFyc2V0KGNoYXJzZXQpLA0KLQkJCW1fU2VjUHJvcHMoU2VjUHJvcHMpLA0KLQkJCW1fV29yZFByb3BzKFdvcmRQcm9wcykJCQkJCQkJCQkgDQotew0KLX0NCi0NCi1DRlhFVV9CYWNrc3BhY2U6On5DRlhFVV9CYWNrc3BhY2UoKQ0KLXsNCi19DQotDQotdm9pZCBDRlhFVV9CYWNrc3BhY2U6OlJlZG8oKQ0KLXsNCi0JaWYgKG1fcEVkaXQpDQotCXsNCi0JCW1fcEVkaXQtPlNlbGVjdE5vbmUoKTsNCi0JCW1fcEVkaXQtPlNldENhcmV0KG1fd3BPbGQpOw0KLQkJbV9wRWRpdC0+QmFja3NwYWNlKEZBTFNFLFRSVUUpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZYRVVfQmFja3NwYWNlOjpVbmRvKCkNCi17DQotCWlmIChtX3BFZGl0KQ0KLQl7DQotCQltX3BFZGl0LT5TZWxlY3ROb25lKCk7DQotCQltX3BFZGl0LT5TZXRDYXJldChtX3dwTmV3KTsNCi0JCWlmIChtX3dwTmV3LlNlY0NtcChtX3dwT2xkKSAhPSAwKQ0KLQkJew0KLQkJCW1fcEVkaXQtPkluc2VydFJldHVybigmbV9TZWNQcm9wcywmbV9Xb3JkUHJvcHMsRkFMU0UsVFJVRSk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJbV9wRWRpdC0+SW5zZXJ0V29yZChtX1dvcmQsbV9uQ2hhcnNldCwmbV9Xb3JkUHJvcHMsRkFMU0UsVFJVRSk7DQotCQl9DQotCX0NCi19DQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vL0NGWEVVX0RlbGV0ZQ0KLQ0KLUNGWEVVX0RlbGV0ZTo6Q0ZYRVVfRGVsZXRlKENGWF9FZGl0ICogcEVkaXQsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3BPbGRQbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cE5ld1BsYWNlLA0KLQkJCQkJCQkgICBGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIGNoYXJzZXQsDQotCQkJCQkJCSAgIGNvbnN0IENQVlRfU2VjUHJvcHMgJiBTZWNQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgJiBXb3JkUHJvcHMsIEZYX0JPT0wgYlNlY0VuZCkgOg0KLQkJCW1fcEVkaXQocEVkaXQpLA0KLQkJCW1fd3BPbGQod3BPbGRQbGFjZSksDQotCQkJbV93cE5ldyh3cE5ld1BsYWNlKSwNCi0JCQltX1dvcmQod29yZCksDQotCQkJbV9uQ2hhcnNldChjaGFyc2V0KSwNCi0JCQltX1NlY1Byb3BzKFNlY1Byb3BzKSwNCi0JCQltX1dvcmRQcm9wcyhXb3JkUHJvcHMpLA0KLQkJCW1fYlNlY0VuZChiU2VjRW5kKQ0KLXsNCi19DQotDQotQ0ZYRVVfRGVsZXRlOjp+Q0ZYRVVfRGVsZXRlKCkNCi17DQotfQ0KLQ0KLXZvaWQgQ0ZYRVVfRGVsZXRlOjpSZWRvKCkNCi17DQotCWlmIChtX3BFZGl0KQ0KLQl7DQotCQltX3BFZGl0LT5TZWxlY3ROb25lKCk7DQotCQltX3BFZGl0LT5TZXRDYXJldChtX3dwT2xkKTsNCi0JCW1fcEVkaXQtPkRlbGV0ZShGQUxTRSxUUlVFKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENGWEVVX0RlbGV0ZTo6VW5kbygpDQotew0KLQlpZiAobV9wRWRpdCkNCi0Jew0KLQkJbV9wRWRpdC0+U2VsZWN0Tm9uZSgpOw0KLQkJbV9wRWRpdC0+U2V0Q2FyZXQobV93cE5ldyk7DQotCQlpZiAobV9iU2VjRW5kKQ0KLQkJew0KLQkJCW1fcEVkaXQtPkluc2VydFJldHVybigmbV9TZWNQcm9wcywmbV9Xb3JkUHJvcHMsRkFMU0UsVFJVRSk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJbV9wRWRpdC0+SW5zZXJ0V29yZChtX1dvcmQsbV9uQ2hhcnNldCwmbV9Xb3JkUHJvcHMsRkFMU0UsVFJVRSk7DQotCQl9DQotCX0NCi19DQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vL0NGWEVVX0NsZWFyDQotDQotQ0ZYRVVfQ2xlYXI6OkNGWEVVX0NsZWFyKENGWF9FZGl0ICogcEVkaXQsICBjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHdyU2VsLCBjb25zdCBDRlhfV2lkZVN0cmluZyAmIHN3VGV4dCkgOg0KLQkJCW1fcEVkaXQocEVkaXQpLA0KLQkJCW1fd3JTZWwod3JTZWwpLA0KLQkJCW1fc3dUZXh0KHN3VGV4dCkNCi17DQotfQ0KLQ0KLUNGWEVVX0NsZWFyOjp+Q0ZYRVVfQ2xlYXIoKQ0KLXsNCi19DQotDQotdm9pZCBDRlhFVV9DbGVhcjo6UmVkbygpDQotew0KLQlpZiAobV9wRWRpdCkNCi0Jew0KLQkJbV9wRWRpdC0+U2VsZWN0Tm9uZSgpOw0KLQkJbV9wRWRpdC0+U2V0U2VsKG1fd3JTZWwuQmVnaW5Qb3MsbV93clNlbC5FbmRQb3MpOw0KLQkJbV9wRWRpdC0+Q2xlYXIoRkFMU0UsVFJVRSk7DQotCX0NCi19DQotDQotdm9pZCBDRlhFVV9DbGVhcjo6VW5kbygpDQotew0KLQlpZiAobV9wRWRpdCkNCi0Jew0KLQkJbV9wRWRpdC0+U2VsZWN0Tm9uZSgpOw0KLQkJbV9wRWRpdC0+U2V0Q2FyZXQobV93clNlbC5CZWdpblBvcyk7DQotCQltX3BFZGl0LT5JbnNlcnRUZXh0KG1fc3dUZXh0LCBERUZBVUxUX0NIQVJTRVQsIE5VTEwsTlVMTCxGQUxTRSxUUlVFKTsNCi0JCW1fcEVkaXQtPlNldFNlbChtX3dyU2VsLkJlZ2luUG9zLG1fd3JTZWwuRW5kUG9zKTsNCi0JfQ0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLS8vQ0ZYRVVfQ2xlYXJSaWNoDQotDQotQ0ZYRVVfQ2xlYXJSaWNoOjpDRlhFVV9DbGVhclJpY2goQ0ZYX0VkaXQgKiBwRWRpdCwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cE9sZFBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwTmV3UGxhY2UsDQotCQkJCQkJCSAgIGNvbnN0IENQVlRfV29yZFJhbmdlICYgd3JTZWwsIEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCwNCi0JCQkJCQkJICAgY29uc3QgQ1BWVF9TZWNQcm9wcyAmIFNlY1Byb3BzLCBjb25zdCBDUFZUX1dvcmRQcm9wcyAmIFdvcmRQcm9wcykgOg0KLQkJCW1fcEVkaXQocEVkaXQpLA0KLQkJCW1fd3BPbGQod3BPbGRQbGFjZSksDQotCQkJbV93cE5ldyh3cE5ld1BsYWNlKSwNCi0JCQltX3dyU2VsKHdyU2VsKSwNCi0JCQltX1dvcmQod29yZCksDQotCQkJbV9uQ2hhcnNldChjaGFyc2V0KSwNCi0JCQltX1NlY1Byb3BzKFNlY1Byb3BzKSwNCi0JCQltX1dvcmRQcm9wcyhXb3JkUHJvcHMpCQkJCQkJCQkJIA0KLXsNCi19DQotDQotQ0ZYRVVfQ2xlYXJSaWNoOjp+Q0ZYRVVfQ2xlYXJSaWNoKCkNCi17DQotfQ0KLQ0KLXZvaWQgQ0ZYRVVfQ2xlYXJSaWNoOjpSZWRvKCkNCi17DQotCWlmIChtX3BFZGl0ICYmIElzTGFzdCgpKQ0KLQl7DQotCQltX3BFZGl0LT5TZWxlY3ROb25lKCk7DQotCQltX3BFZGl0LT5TZXRTZWwobV93clNlbC5CZWdpblBvcyxtX3dyU2VsLkVuZFBvcyk7DQotCQltX3BFZGl0LT5DbGVhcihGQUxTRSxUUlVFKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENGWEVVX0NsZWFyUmljaDo6VW5kbygpDQotew0KLQlpZiAobV9wRWRpdCkNCi0Jew0KLQkJbV9wRWRpdC0+U2VsZWN0Tm9uZSgpOw0KLQkJbV9wRWRpdC0+U2V0Q2FyZXQobV93cE9sZCk7DQotCQlpZiAobV93cE5ldy5TZWNDbXAobV93cE9sZCkgIT0gMCkNCi0JCXsNCi0JCQltX3BFZGl0LT5JbnNlcnRSZXR1cm4oJm1fU2VjUHJvcHMsJm1fV29yZFByb3BzLEZBTFNFLEZBTFNFKTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQltX3BFZGl0LT5JbnNlcnRXb3JkKG1fV29yZCxtX25DaGFyc2V0LCZtX1dvcmRQcm9wcyxGQUxTRSxGQUxTRSk7DQotCQl9DQotDQotCQlpZiAoSXNGaXJzdCgpKQ0KLQkJew0KLQkJCW1fcEVkaXQtPlBhaW50SW5zZXJ0VGV4dChtX3dyU2VsLkJlZ2luUG9zLG1fd3JTZWwuRW5kUG9zKTsNCi0JCQltX3BFZGl0LT5TZXRTZWwobV93clNlbC5CZWdpblBvcyxtX3dyU2VsLkVuZFBvcyk7DQotCQl9DQotCX0NCi19DQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0vL0NGWEVVX0luc2VydFRleHQNCi0NCi1DRlhFVV9JbnNlcnRUZXh0OjpDRlhFVV9JbnNlcnRUZXh0KENGWF9FZGl0ICogcEVkaXQsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3BPbGRQbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cE5ld1BsYWNlLA0KLQkJCQkJCQkgICBjb25zdCBDRlhfV2lkZVN0cmluZyAmIHN3VGV4dCwgRlhfSU5UMzIgY2hhcnNldCwNCi0JCQkJCQkJICAgY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzKSA6DQotCQkJbV9wRWRpdChwRWRpdCksDQotCQkJbV93cE9sZCh3cE9sZFBsYWNlKSwNCi0JCQltX3dwTmV3KHdwTmV3UGxhY2UpLA0KLQkJCW1fc3dUZXh0KHN3VGV4dCksDQotCQkJbV9uQ2hhcnNldChjaGFyc2V0KSwNCi0JCQltX1NlY1Byb3BzKCksDQotCQkJbV9Xb3JkUHJvcHMoKQkJCQkJCQkJCSANCi17DQotCWlmIChwU2VjUHJvcHMpDQotCQltX1NlY1Byb3BzID0gKnBTZWNQcm9wczsNCi0JaWYgKHBXb3JkUHJvcHMpDQotCQltX1dvcmRQcm9wcyA9ICpwV29yZFByb3BzOw0KLX0NCi0NCi1DRlhFVV9JbnNlcnRUZXh0Ojp+Q0ZYRVVfSW5zZXJ0VGV4dCgpDQotew0KLX0NCi0NCi12b2lkIENGWEVVX0luc2VydFRleHQ6OlJlZG8oKQ0KLXsNCi0JaWYgKG1fcEVkaXQgJiYgSXNMYXN0KCkpDQotCXsNCi0JCW1fcEVkaXQtPlNlbGVjdE5vbmUoKTsNCi0JCW1fcEVkaXQtPlNldENhcmV0KG1fd3BPbGQpOw0KLQkJbV9wRWRpdC0+SW5zZXJ0VGV4dChtX3N3VGV4dCwgbV9uQ2hhcnNldCwmbV9TZWNQcm9wcywgJm1fV29yZFByb3BzLEZBTFNFLFRSVUUpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZYRVVfSW5zZXJ0VGV4dDo6VW5kbygpDQotew0KLQlpZiAobV9wRWRpdCkNCi0Jew0KLQkJbV9wRWRpdC0+U2VsZWN0Tm9uZSgpOw0KLQkJbV9wRWRpdC0+U2V0U2VsKG1fd3BPbGQsbV93cE5ldyk7DQotCQltX3BFZGl0LT5DbGVhcihGQUxTRSxUUlVFKTsNCi0JfQ0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUNGWEVVX1NldFNlY1Byb3BzOjpDRlhFVV9TZXRTZWNQcm9wcyhDRlhfRWRpdCAqIHBFZGl0LCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBFRElUX1BST1BTX0UgZXAsIA0KLQkJY29uc3QgQ1BWVF9TZWNQcm9wcyAmIG9sZHNlY3Byb3BzLCBjb25zdCBDUFZUX1dvcmRQcm9wcyAmIG9sZHdvcmRwcm9wcywgDQotCQljb25zdCBDUFZUX1NlY1Byb3BzICYgbmV3c2VjcHJvcHMsIGNvbnN0IENQVlRfV29yZFByb3BzICYgbmV3d29yZHByb3BzLCBjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHJhbmdlKQ0KLQkJOiBtX3BFZGl0KHBFZGl0KSwNCi0JCW1fd3BQbGFjZShwbGFjZSksDQotCQltX2VQcm9wcyhlcCksDQotCQltX09sZFNlY1Byb3BzKG9sZHNlY3Byb3BzKSwNCi0JCW1fTmV3U2VjUHJvcHMobmV3c2VjcHJvcHMpLA0KLQkJbV9PbGRXb3JkUHJvcHMob2xkd29yZHByb3BzKSwNCi0JCW1fTmV3V29yZFByb3BzKG5ld3dvcmRwcm9wcyksDQotCQltX3dyUGxhY2UocmFuZ2UpDQotew0KLX0NCi0NCi1DRlhFVV9TZXRTZWNQcm9wczo6fkNGWEVVX1NldFNlY1Byb3BzKCkNCi17DQotfQ0KLQ0KLXZvaWQgQ0ZYRVVfU2V0U2VjUHJvcHM6OlJlZG8oKQ0KLXsNCi0JaWYgKG1fcEVkaXQpDQotCXsNCi0JCW1fcEVkaXQtPlNldFNlY1Byb3BzKG1fZVByb3BzLG1fd3BQbGFjZSwmbV9OZXdTZWNQcm9wcywmbV9OZXdXb3JkUHJvcHMsbV93clBsYWNlLEZBTFNFKTsNCi0JCWlmIChJc0xhc3QoKSkNCi0JCXsNCi0JCQltX3BFZGl0LT5TZWxlY3ROb25lKCk7DQotCQkJbV9wRWRpdC0+UGFpbnRTZXRQcm9wcyhtX2VQcm9wcyxtX3dyUGxhY2UpOw0KLQkJCW1fcEVkaXQtPlNldFNlbChtX3dyUGxhY2UuQmVnaW5Qb3MsbV93clBsYWNlLkVuZFBvcyk7DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBDRlhFVV9TZXRTZWNQcm9wczo6VW5kbygpDQotew0KLQlpZiAobV9wRWRpdCkNCi0Jew0KLQkJbV9wRWRpdC0+U2V0U2VjUHJvcHMobV9lUHJvcHMsbV93cFBsYWNlLCZtX09sZFNlY1Byb3BzLCZtX09sZFdvcmRQcm9wcyxtX3dyUGxhY2UsRkFMU0UpOw0KLQkJaWYgKElzRmlyc3QoKSkNCi0JCXsNCi0JCQltX3BFZGl0LT5TZWxlY3ROb25lKCk7DQotCQkJbV9wRWRpdC0+UGFpbnRTZXRQcm9wcyhtX2VQcm9wcyxtX3dyUGxhY2UpOw0KLQkJCW1fcEVkaXQtPlNldFNlbChtX3dyUGxhY2UuQmVnaW5Qb3MsbV93clBsYWNlLkVuZFBvcyk7DQotCQl9DQotCX0NCi19DQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DRlhFVV9TZXRXb3JkUHJvcHM6OkNGWEVVX1NldFdvcmRQcm9wcyhDRlhfRWRpdCAqIHBFZGl0LCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBFRElUX1BST1BTX0UgZXAsIA0KLQkJY29uc3QgQ1BWVF9Xb3JkUHJvcHMgJiBvbGRwcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgJiBuZXdwcm9wcywgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiByYW5nZSkNCi0JCTogbV9wRWRpdChwRWRpdCksDQotCQltX3dwUGxhY2UocGxhY2UpLA0KLQkJbV9lUHJvcHMoZXApLA0KLQkJbV9PbGRXb3JkUHJvcHMob2xkcHJvcHMpLA0KLQkJbV9OZXdXb3JkUHJvcHMobmV3cHJvcHMpLA0KLQkJbV93clBsYWNlKHJhbmdlKQ0KLXsNCi19DQotDQotQ0ZYRVVfU2V0V29yZFByb3BzOjp+Q0ZYRVVfU2V0V29yZFByb3BzKCkNCi17DQotfQ0KLQ0KLXZvaWQgQ0ZYRVVfU2V0V29yZFByb3BzOjpSZWRvKCkNCi17DQotCWlmIChtX3BFZGl0KQ0KLQl7DQotCQltX3BFZGl0LT5TZXRXb3JkUHJvcHMobV9lUHJvcHMsbV93cFBsYWNlLCZtX05ld1dvcmRQcm9wcyxtX3dyUGxhY2UsRkFMU0UpOw0KLQkJaWYgKElzTGFzdCgpKQ0KLQkJew0KLQkJCW1fcEVkaXQtPlNlbGVjdE5vbmUoKTsNCi0JCQltX3BFZGl0LT5QYWludFNldFByb3BzKG1fZVByb3BzLG1fd3JQbGFjZSk7DQotCQkJbV9wRWRpdC0+U2V0U2VsKG1fd3JQbGFjZS5CZWdpblBvcyxtX3dyUGxhY2UuRW5kUG9zKTsNCi0JCX0NCi0JfQ0KLX0NCi0NCi12b2lkIENGWEVVX1NldFdvcmRQcm9wczo6VW5kbygpDQotew0KLQlpZiAobV9wRWRpdCkNCi0Jew0KLQkJbV9wRWRpdC0+U2V0V29yZFByb3BzKG1fZVByb3BzLG1fd3BQbGFjZSwmbV9PbGRXb3JkUHJvcHMsbV93clBsYWNlLEZBTFNFKTsNCi0JCWlmIChJc0ZpcnN0KCkpDQotCQl7DQotCQkJbV9wRWRpdC0+U2VsZWN0Tm9uZSgpOw0KLQkJCW1fcEVkaXQtPlBhaW50U2V0UHJvcHMobV9lUHJvcHMsbV93clBsYWNlKTsNCi0JCQltX3BFZGl0LT5TZXRTZWwobV93clBsYWNlLkJlZ2luUG9zLG1fd3JQbGFjZS5FbmRQb3MpOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZYX0VkaXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUNGWF9FZGl0OjpDRlhfRWRpdChJUERGX1ZhcmlhYmxlVGV4dCAqIHBWVCkgOg0KLQltX3BWVChwVlQpLA0KLQltX3BOb3RpZnkoTlVMTCksDQotCW1fcE9wck5vdGlmeShOVUxMKSwNCi0JbV93cENhcmV0KC0xLC0xLC0xKSwNCi0JbV93cE9sZENhcmV0KC0xLC0xLC0xKSwNCi0JbV9wdFNjcm9sbFBvcygwLDApLA0KLQltX3B0UmVmcmVzaFNjcm9sbFBvcygwLDApLA0KLQltX2JFbmFibGVTY3JvbGwoRkFMU0UpLA0KLQltX2JFbmFibGVPdmVyZmxvdyhGQUxTRSksDQotCW1fcFZUUHJvdmlkZShOVUxMKSwNCi0JbV9wSXRlcmF0b3IoTlVMTCksDQotCW1fU2VsU3RhdGUoKSwNCi0JbV9wdENhcmV0KDAuMGYsMC4wZiksDQotCW1fVW5kbyhGWF9FRElUX1VORE9fTUFYSVRFTSksDQotCW1fbkFsaWdubWVudCgwKSwNCi0JbV9iTm90aWZ5RmxhZyhGQUxTRSksDQotCW1fYkVuYWJsZVJlZnJlc2goVFJVRSksDQotCW1fcmNPbGRDb250ZW50KDAuMGYsMC4wZiwwLjBmLDAuMGYpLA0KLQltX2JFbmFibGVVbmRvKFRSVUUpLA0KLQltX2JOb3RpZnkoVFJVRSksDQotCW1fYk9wck5vdGlmeShGQUxTRSksDQotCW1fcEdyb3VwVW5kb0l0ZW0oTlVMTCkNCi17CQ0KLQlBU1NFUlQocFZUICE9IE5VTEwpOw0KLX0NCi0NCi1DRlhfRWRpdDo6fkNGWF9FZGl0KCkNCi17DQotCWlmIChtX3BWVFByb3ZpZGUpDQotCXsNCi0JCWRlbGV0ZSBtX3BWVFByb3ZpZGU7DQotCQltX3BWVFByb3ZpZGUgPSBOVUxMOw0KLQl9DQotDQotCWlmIChtX3BJdGVyYXRvcikNCi0Jew0KLQkJZGVsZXRlIG1fcEl0ZXJhdG9yOw0KLQkJbV9wSXRlcmF0b3IgPSBOVUxMOw0KLQl9DQotDQotCUFTU0VSVChtX3BHcm91cFVuZG9JdGVtID09IE5VTEwpOw0KLX0NCi0NCi0vLyBwdWJsaWMgbWV0aG9kcw0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OkluaXRpYWxpemUoKQ0KLXsNCi0JbV9wVlQtPkluaXRpYWxpemUoKTsNCi0JU2V0Q2FyZXQobV9wVlQtPkdldEJlZ2luV29yZFBsYWNlKCkpOw0KLQlTZXRDYXJldE9yaWdpbigpOw0KLX0NCi0NCi12b2lkIENGWF9FZGl0OjpTZXRGb250TWFwKElGWF9FZGl0X0ZvbnRNYXAgKiBwRm9udE1hcCkNCi17DQotCWlmIChtX3BWVFByb3ZpZGUpIA0KLQkJZGVsZXRlIG1fcFZUUHJvdmlkZTsNCi0NCi0JbV9wVlQtPlNldFByb3ZpZGVyKG1fcFZUUHJvdmlkZSA9IG5ldyBDRlhfRWRpdF9Qcm92aWRlcihwRm9udE1hcCkpOw0KLX0NCi0NCi12b2lkIENGWF9FZGl0OjpTZXRWVFByb3ZpZGVyKElQREZfVmFyaWFibGVUZXh0X1Byb3ZpZGVyKiBwUHJvdmlkZXIpDQotew0KLQltX3BWVC0+U2V0UHJvdmlkZXIocFByb3ZpZGVyKTsNCi19DQotDQotdm9pZCBDRlhfRWRpdDo6U2V0Tm90aWZ5KElGWF9FZGl0X05vdGlmeSogcE5vdGlmeSkNCi17DQotCW1fcE5vdGlmeSA9IHBOb3RpZnk7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OlNldE9wck5vdGlmeShJRlhfRWRpdF9PcHJOb3RpZnkqIHBPcHJOb3RpZnkpDQotew0KLQltX3BPcHJOb3RpZnkgPSBwT3ByTm90aWZ5Ow0KLX0NCi0NCi1JRlhfRWRpdF9JdGVyYXRvciAqIENGWF9FZGl0OjpHZXRJdGVyYXRvcigpDQotew0KLQlpZiAoIW1fcEl0ZXJhdG9yKQ0KLQkJbV9wSXRlcmF0b3IgPSBuZXcgQ0ZYX0VkaXRfSXRlcmF0b3IodGhpcyxtX3BWVC0+R2V0SXRlcmF0b3IoKSk7DQotDQotCXJldHVybiBtX3BJdGVyYXRvcjsNCi19DQotDQotSVBERl9WYXJpYWJsZVRleHQgKglDRlhfRWRpdDo6R2V0VmFyaWFibGVUZXh0KCkNCi17DQotCXJldHVybiBtX3BWVDsNCi19DQotDQotSUZYX0VkaXRfRm9udE1hcCogQ0ZYX0VkaXQ6OkdldEZvbnRNYXAoKQ0KLXsNCi0JaWYgKG1fcFZUUHJvdmlkZSkNCi0JCXJldHVybiBtX3BWVFByb3ZpZGUtPkdldEZvbnRNYXAoKTsNCi0NCi0JcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OlNldFBsYXRlUmVjdChjb25zdCBDUERGX1JlY3QgJiByZWN0LCBGWF9CT09MIGJQYWludC8qID0gVFJVRSovKQ0KLXsJDQotCW1fcFZULT5TZXRQbGF0ZVJlY3QocmVjdCk7DQotCW1fcHRTY3JvbGxQb3MgPSBDUERGX1BvaW50KHJlY3QubGVmdCxyZWN0LnRvcCk7CQkJDQotCWlmIChiUGFpbnQpIFBhaW50KCk7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OlNldEFsaWdubWVudEgoRlhfSU5UMzIgbkZvcm1hdC8qID0wICovLCBGWF9CT09MIGJQYWludC8qID0gVFJVRSovKQ0KLXsNCi0JbV9wVlQtPlNldEFsaWdubWVudChuRm9ybWF0KTsNCi0JaWYgKGJQYWludCkgUGFpbnQoKTsNCi19DQotDQotdm9pZCBDRlhfRWRpdDo6U2V0QWxpZ25tZW50VihGWF9JTlQzMiBuRm9ybWF0LyogPTAgKi8sIEZYX0JPT0wgYlBhaW50LyogPSBUUlVFKi8pDQotew0KLQltX25BbGlnbm1lbnQgPSBuRm9ybWF0Ow0KLQlpZiAoYlBhaW50KSBQYWludCgpOw0KLX0NCi0NCi12b2lkIENGWF9FZGl0OjpTZXRQYXNzd29yZENoYXIoRlhfV09SRCB3U3ViV29yZC8qID0nKicgKi8sIEZYX0JPT0wgYlBhaW50LyogPSBUUlVFKi8pDQotew0KLQltX3BWVC0+U2V0UGFzc3dvcmRDaGFyKHdTdWJXb3JkKTsNCi0JaWYgKGJQYWludCkgUGFpbnQoKTsNCi19DQotDQotdm9pZCBDRlhfRWRpdDo6U2V0TGltaXRDaGFyKEZYX0lOVDMyIG5MaW1pdENoYXIvKiA9MCAqLywgRlhfQk9PTCBiUGFpbnQvKiA9IFRSVUUqLykNCi17DQotCW1fcFZULT5TZXRMaW1pdENoYXIobkxpbWl0Q2hhcik7DQotCWlmIChiUGFpbnQpIFBhaW50KCk7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OlNldENoYXJBcnJheShGWF9JTlQzMiBuQ2hhckFycmF5LyogPTAgKi8sIEZYX0JPT0wgYlBhaW50LyogPSBUUlVFKi8pDQotew0KLQltX3BWVC0+U2V0Q2hhckFycmF5KG5DaGFyQXJyYXkpOw0KLQlpZiAoYlBhaW50KSBQYWludCgpOw0KLX0NCi0NCi12b2lkIENGWF9FZGl0OjpTZXRDaGFyU3BhY2UoRlhfRkxPQVQgZkNoYXJTcGFjZS8qID0wLjBmICovLCBGWF9CT09MIGJQYWludC8qID0gVFJVRSovKQ0KLXsNCi0JbV9wVlQtPlNldENoYXJTcGFjZShmQ2hhclNwYWNlKTsNCi0JaWYgKGJQYWludCkgUGFpbnQoKTsNCi19DQotDQotdm9pZCBDRlhfRWRpdDo6U2V0SG9yelNjYWxlKEZYX0lOVDMyIG5Ib3J6U2NhbGUvKiA9MTAwICovLCBGWF9CT09MIGJQYWludC8qID0gVFJVRSovKQ0KLXsNCi0JbV9wVlQtPlNldEhvcnpTY2FsZShuSG9yelNjYWxlKTsNCi0JaWYgKGJQYWludCkgUGFpbnQoKTsNCi19DQotDQotdm9pZCBDRlhfRWRpdDo6U2V0TXVsdGlMaW5lKEZYX0JPT0wgYk11bHRpTGluZS8qID1UUlVFICovLCBGWF9CT09MIGJQYWludC8qID0gVFJVRSovKQ0KLXsNCi0JbV9wVlQtPlNldE11bHRpTGluZShiTXVsdGlMaW5lKTsNCi0JaWYgKGJQYWludCkgUGFpbnQoKTsNCi19DQotDQotdm9pZCBDRlhfRWRpdDo6U2V0QXV0b1JldHVybihGWF9CT09MIGJBdXRvLyogPVRSVUUgKi8sIEZYX0JPT0wgYlBhaW50LyogPSBUUlVFKi8pDQotew0KLQltX3BWVC0+U2V0QXV0b1JldHVybihiQXV0byk7DQotCWlmIChiUGFpbnQpIFBhaW50KCk7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OlNldExpbmVMZWFkaW5nKEZYX0ZMT0FUIGZMaW5lTGVhZGluZy8qID1UUlVFICovLCBGWF9CT09MIGJQYWludC8qID0gVFJVRSovKQ0KLXsNCi0JbV9wVlQtPlNldExpbmVMZWFkaW5nKGZMaW5lTGVhZGluZyk7DQotCWlmIChiUGFpbnQpIFBhaW50KCk7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OlNldEF1dG9Gb250U2l6ZShGWF9CT09MIGJBdXRvLyogPVRSVUUgKi8sIEZYX0JPT0wgYlBhaW50LyogPSBUUlVFKi8pDQotew0KLQltX3BWVC0+U2V0QXV0b0ZvbnRTaXplKGJBdXRvKTsNCi0JaWYgKGJQYWludCkgUGFpbnQoKTsNCi19DQotDQotdm9pZCBDRlhfRWRpdDo6U2V0Rm9udFNpemUoRlhfRkxPQVQgZkZvbnRTaXplLCBGWF9CT09MIGJQYWludC8qID0gVFJVRSovKQ0KLXsNCi0JbV9wVlQtPlNldEZvbnRTaXplKGZGb250U2l6ZSk7DQotCWlmIChiUGFpbnQpIFBhaW50KCk7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OlNldEF1dG9TY3JvbGwoRlhfQk9PTCBiQXV0by8qID1UUlVFICovLCBGWF9CT09MIGJQYWludC8qID0gVFJVRSovKQ0KLXsNCi0JbV9iRW5hYmxlU2Nyb2xsID0gYkF1dG87DQotCWlmIChiUGFpbnQpIFBhaW50KCk7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OlNldFRleHRPdmVyZmxvdyhGWF9CT09MIGJBbGxvd2VkIC8qPSBGQUxTRSovLCBGWF9CT09MIGJQYWludC8qID0gVFJVRSovKQ0KLXsNCi0JbV9iRW5hYmxlT3ZlcmZsb3cgPSBiQWxsb3dlZDsNCi0JaWYgKGJQYWludCkgUGFpbnQoKTsNCi19DQotDQotdm9pZCBDRlhfRWRpdDo6U2V0U2VsKEZYX0lOVDMyIG5TdGFydENoYXIsRlhfSU5UMzIgbkVuZENoYXIpDQotew0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJaWYgKG5TdGFydENoYXIgPT0gMCAmJiBuRW5kQ2hhciA8IDApDQotCQl7DQotCQkJU2VsZWN0QWxsKCk7DQotCQl9DQotCQllbHNlIGlmIChuU3RhcnRDaGFyIDwgMCkNCi0JCXsJDQotCQkJdGhpcy0+U2VsZWN0Tm9uZSgpOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJewkJDQotCQkJaWYgKG5TdGFydENoYXIgPCBuRW5kQ2hhcikNCi0JCQl7DQotCQkJCVNldFNlbChtX3BWVC0+V29yZEluZGV4VG9Xb3JkUGxhY2UoblN0YXJ0Q2hhciksbV9wVlQtPldvcmRJbmRleFRvV29yZFBsYWNlKG5FbmRDaGFyKSk7DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCVNldFNlbChtX3BWVC0+V29yZEluZGV4VG9Xb3JkUGxhY2UobkVuZENoYXIpLG1fcFZULT5Xb3JkSW5kZXhUb1dvcmRQbGFjZShuU3RhcnRDaGFyKSk7DQotCQkJfQ0KLQkJfQkNCi0JfQ0KLX0NCi0NCi12b2lkIENGWF9FZGl0OjpTZXRTZWwoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBiZWdpbixjb25zdCBDUFZUX1dvcmRQbGFjZSAmIGVuZCkNCi17DQotCWlmIChtX3BWVC0+SXNWYWxpZCgpKQ0KLQl7DQotCQlTZWxlY3ROb25lKCk7DQotDQotCQltX1NlbFN0YXRlLlNldChiZWdpbixlbmQpOw0KLQ0KLQkJU2V0Q2FyZXQobV9TZWxTdGF0ZS5FbmRQb3MpOw0KLQ0KLQkJaWYgKG1fU2VsU3RhdGUuSXNFeGlzdCgpKQ0KLQkJew0KLQkJCVNjcm9sbFRvQ2FyZXQoKTsNCi0JCQlDUFZUX1dvcmRSYW5nZSB3cihtX1NlbFN0YXRlLkJlZ2luUG9zLG1fU2VsU3RhdGUuRW5kUG9zKTsNCi0JCQlSZWZyZXNoKFJQX09QVElPTkFMLCZ3cik7DQotCQkJU2V0Q2FyZXRJbmZvKCk7DQotCQl9DQotCQllbHNlDQotCQl7CQkNCi0JCQlTY3JvbGxUb0NhcmV0KCk7DQotCQkJU2V0Q2FyZXRJbmZvKCk7DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBDRlhfRWRpdDo6R2V0U2VsKEZYX0lOVDMyICYgblN0YXJ0Q2hhciwgRlhfSU5UMzIgJiBuRW5kQ2hhcikgY29uc3QNCi17DQotCW5TdGFydENoYXIgPSAtMTsNCi0JbkVuZENoYXIgPSAtMTsNCi0NCi0JaWYgKG1fcFZULT5Jc1ZhbGlkKCkpDQotCXsNCi0JCWlmIChtX1NlbFN0YXRlLklzRXhpc3QoKSkNCi0JCXsNCi0JCQlpZiAobV9TZWxTdGF0ZS5CZWdpblBvcy5Xb3JkQ21wKG1fU2VsU3RhdGUuRW5kUG9zKTwwKQ0KLQkJCXsNCi0JCQkJblN0YXJ0Q2hhciA9IG1fcFZULT5Xb3JkUGxhY2VUb1dvcmRJbmRleChtX1NlbFN0YXRlLkJlZ2luUG9zKTsNCi0JCQkJbkVuZENoYXIgPSBtX3BWVC0+V29yZFBsYWNlVG9Xb3JkSW5kZXgobV9TZWxTdGF0ZS5FbmRQb3MpOw0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQluU3RhcnRDaGFyID0gbV9wVlQtPldvcmRQbGFjZVRvV29yZEluZGV4KG1fU2VsU3RhdGUuRW5kUG9zKTsNCi0JCQkJbkVuZENoYXIgPSBtX3BWVC0+V29yZFBsYWNlVG9Xb3JkSW5kZXgobV9TZWxTdGF0ZS5CZWdpblBvcyk7DQotCQkJfQ0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCW5TdGFydENoYXIgPSBtX3BWVC0+V29yZFBsYWNlVG9Xb3JkSW5kZXgobV93cENhcmV0KTsNCi0JCQluRW5kQ2hhciA9IG1fcFZULT5Xb3JkUGxhY2VUb1dvcmRJbmRleChtX3dwQ2FyZXQpOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLUZYX0lOVDMyIENGWF9FZGl0OjpHZXRDYXJldCgpIGNvbnN0DQotew0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0JCXJldHVybiBtX3BWVC0+V29yZFBsYWNlVG9Xb3JkSW5kZXgobV93cENhcmV0KTsNCi0NCi0JcmV0dXJuIC0xOw0KLX0NCi0NCi1DUFZUX1dvcmRQbGFjZSBDRlhfRWRpdDo6R2V0Q2FyZXRXb3JkUGxhY2UoKSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fd3BDYXJldDsNCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgQ0ZYX0VkaXQ6OkdldFRleHQoKSBjb25zdA0KLXsNCi0JQ0ZYX1dpZGVTdHJpbmcgc3dSZXQ7DQotDQotCWlmIChtX3BWVC0+SXNWYWxpZCgpKQ0KLQl7DQotCQlpZiAoSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IgKiBwSXRlcmF0b3IgPSBtX3BWVC0+R2V0SXRlcmF0b3IoKSkNCi0JCXsNCi0JCQlGWF9CT09MIGJSaWNoID0gbV9wVlQtPklzUmljaFRleHQoKTsNCi0NCi0JCQlwSXRlcmF0b3ItPlNldEF0KDApOw0KLQ0KLQkJCUNQVlRfV29yZCB3b3JkaW5mbzsJDQotCQkJQ1BWVF9Xb3JkUGxhY2Ugb2xkcGxhY2UgPSBwSXRlcmF0b3ItPkdldEF0KCk7DQotCQkJd2hpbGUgKHBJdGVyYXRvci0+TmV4dFdvcmQoKSkNCi0JCQl7DQotCQkJCUNQVlRfV29yZFBsYWNlIHBsYWNlID0gcEl0ZXJhdG9yLT5HZXRBdCgpOw0KLQ0KLQkJCQlpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmRpbmZvKSkNCi0JCQkJew0KLQkJCQkJaWYgKGJSaWNoKQ0KLQkJCQkJew0KLQkJCQkJCXN3UmV0ICs9IHdvcmRpbmZvLldvcmQ7DQotCQkJCQl9DQotCQkJCQllbHNlDQotCQkJCQl7DQotCQkJCQkJc3dSZXQgKz0gd29yZGluZm8uV29yZDsNCi0JCQkJCX0JCQkJCQ0KLQkJCQl9DQotDQotCQkJCWlmIChvbGRwbGFjZS5TZWNDbXAocGxhY2UpICE9IDApDQotCQkJCXsNCi0JCQkJCXN3UmV0ICs9IDB4MEQ7DQotCQkJCQlzd1JldCArPSAweDBBOw0KLQkJCQl9DQotCQkJCQ0KLQkJCQlvbGRwbGFjZSA9IHBsYWNlOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gc3dSZXQ7DQotfQ0KLQ0KLUNGWF9XaWRlU3RyaW5nIENGWF9FZGl0OjpHZXRSYW5nZVRleHQoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiByYW5nZSkgY29uc3QNCi17DQotCUNGWF9XaWRlU3RyaW5nIHN3UmV0Ow0KLQ0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJRlhfQk9PTCBiUmljaCA9IG1fcFZULT5Jc1JpY2hUZXh0KCk7DQotDQotCQlpZiAoSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IgKiBwSXRlcmF0b3IgPSBtX3BWVC0+R2V0SXRlcmF0b3IoKSkNCi0JCXsJCQkNCi0JCQlDUFZUX1dvcmRSYW5nZSB3clRlbXAgPSByYW5nZTsNCi0JCQltX3BWVC0+VXBkYXRlV29yZFBsYWNlKHdyVGVtcC5CZWdpblBvcyk7DQotCQkJbV9wVlQtPlVwZGF0ZVdvcmRQbGFjZSh3clRlbXAuRW5kUG9zKTsNCi0JCQlwSXRlcmF0b3ItPlNldEF0KHdyVGVtcC5CZWdpblBvcyk7DQotDQotCQkJQ1BWVF9Xb3JkIHdvcmRpbmZvOwkNCi0JCQlDUFZUX1dvcmRQbGFjZSBvbGRwbGFjZSA9IHdyVGVtcC5CZWdpblBvczsNCi0JCQl3aGlsZSAocEl0ZXJhdG9yLT5OZXh0V29yZCgpKQ0KLQkJCXsNCi0JCQkJQ1BWVF9Xb3JkUGxhY2UgcGxhY2UgPSBwSXRlcmF0b3ItPkdldEF0KCk7DQotCQkJCWlmIChwbGFjZS5Xb3JkQ21wKHdyVGVtcC5FbmRQb3MpID4gMClicmVhazsNCi0NCi0JCQkJaWYgKHBJdGVyYXRvci0+R2V0V29yZCh3b3JkaW5mbykpDQotCQkJCXsNCi0JCQkJCWlmIChiUmljaCkNCi0JCQkJCXsNCi0JCQkJCQlzd1JldCArPSB3b3JkaW5mby5Xb3JkOw0KLQkJCQkJfQ0KLQkJCQkJZWxzZQ0KLQkJCQkJew0KLQkJCQkJCXN3UmV0ICs9IHdvcmRpbmZvLldvcmQ7DQotCQkJCQl9CQkJCQkNCi0JCQkJfQ0KLQ0KLQkJCQlpZiAob2xkcGxhY2UuU2VjQ21wKHBsYWNlKSAhPSAwKQ0KLQkJCQl7DQotCQkJCQlzd1JldCArPSAweDBEOw0KLQkJCQkJc3dSZXQgKz0gMHgwQTsNCi0JCQkJfQ0KLQkJCQkNCi0JCQkJb2xkcGxhY2UgPSBwbGFjZTsNCi0JCQl9DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIHN3UmV0Ow0KLX0NCi0NCi1DRlhfV2lkZVN0cmluZyBDRlhfRWRpdDo6R2V0U2VsVGV4dCgpIGNvbnN0DQotew0KLQlyZXR1cm4gR2V0UmFuZ2VUZXh0KG1fU2VsU3RhdGUuQ29udmVydFRvV29yZFJhbmdlKCkpOw0KLX0NCi0NCi1GWF9JTlQzMiBDRlhfRWRpdDo6R2V0VG90YWxXb3JkcygpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9wVlQtPkdldFRvdGFsV29yZHMoKTsNCi19DQotDQotRlhfSU5UMzIgQ0ZYX0VkaXQ6OkdldFRvdGFsTGluZXMoKSBjb25zdA0KLXsNCi0JRlhfSU5UMzIgbkxpbmVzID0gMDsNCi0NCi0JaWYgKElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yICogcEl0ZXJhdG9yID0gbV9wVlQtPkdldEl0ZXJhdG9yKCkpDQotCXsNCi0JCXBJdGVyYXRvci0+U2V0QXQoMCk7DQotCQl3aGlsZSAocEl0ZXJhdG9yLT5OZXh0TGluZSgpKQ0KLQkJCW5MaW5lcysrOw0KLQl9DQotDQotCXJldHVybiBuTGluZXMrMTsNCi19DQotDQotQ1BWVF9Xb3JkUmFuZ2UgQ0ZYX0VkaXQ6OkdldFNlbGVjdFdvcmRSYW5nZSgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9TZWxTdGF0ZS5Db252ZXJ0VG9Xb3JkUmFuZ2UoKTsNCi19DQotDQotQ1BWVF9Xb3JkUmFuZ2UgQ0ZYX0VkaXQ6OkNvbWJpbmVXb3JkUmFuZ2UoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiB3cjEsIGNvbnN0IENQVlRfV29yZFJhbmdlICYgd3IyKQ0KLXsNCi0JQ1BWVF9Xb3JkUmFuZ2Ugd3JSZXQ7DQotDQotCWlmICh3cjEuQmVnaW5Qb3MuV29yZENtcCh3cjIuQmVnaW5Qb3MpIDwgMCkNCi0Jew0KLQkJd3JSZXQuQmVnaW5Qb3MgPSB3cjEuQmVnaW5Qb3M7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQl3clJldC5CZWdpblBvcyA9IHdyMi5CZWdpblBvczsNCi0JfQ0KLQ0KLQlpZiAod3IxLkVuZFBvcy5Xb3JkQ21wKHdyMi5FbmRQb3MpIDwgMCkNCi0Jew0KLQkJd3JSZXQuRW5kUG9zID0gd3IyLkVuZFBvczsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCXdyUmV0LkVuZFBvcyA9IHdyMS5FbmRQb3M7DQotCX0NCi0NCi0JcmV0dXJuIHdyUmV0Ow0KLX0NCi0NCi1GWF9CT09MCUNGWF9FZGl0OjpJc1JpY2hUZXh0KCkgY29uc3QNCi17DQotCXJldHVybiBtX3BWVC0+SXNSaWNoVGV4dCgpOw0KLX0NCi0NCi12b2lkIENGWF9FZGl0OjpTZXRSaWNoVGV4dChGWF9CT09MIGJSaWNoVGV4dC8qID1UUlVFICovLCBGWF9CT09MIGJQYWludC8qID0gVFJVRSovKQ0KLXsNCi0JbV9wVlQtPlNldFJpY2hUZXh0KGJSaWNoVGV4dCk7DQotCWlmIChiUGFpbnQpIFBhaW50KCk7DQotfQ0KLQ0KLUZYX0JPT0wgQ0ZYX0VkaXQ6OlNldFJpY2hGb250SW5kZXgoRlhfSU5UMzIgbkZvbnRJbmRleCkNCi17DQotCUNQVlRfV29yZFByb3BzIFdvcmRQcm9wczsNCi0JV29yZFByb3BzLm5Gb250SW5kZXggPSBuRm9udEluZGV4Ow0KLQlyZXR1cm4gU2V0UmljaFRleHRQcm9wcyhFUF9GT05USU5ERVgsTlVMTCwmV29yZFByb3BzKTsJDQotfQ0KLQ0KLUZYX0JPT0wgQ0ZYX0VkaXQ6OlNldFJpY2hGb250U2l6ZShGWF9GTE9BVCBmRm9udFNpemUpDQotewkNCi0JQ1BWVF9Xb3JkUHJvcHMgV29yZFByb3BzOw0KLQlXb3JkUHJvcHMuZkZvbnRTaXplID0gZkZvbnRTaXplOw0KLQlyZXR1cm4gU2V0UmljaFRleHRQcm9wcyhFUF9GT05UU0laRSxOVUxMLCZXb3JkUHJvcHMpOwkNCi19DQotDQotRlhfQk9PTCBDRlhfRWRpdDo6U2V0UmljaFRleHRDb2xvcihGWF9DT0xPUlJFRiBkd0NvbG9yKQ0KLXsNCi0JQ1BWVF9Xb3JkUHJvcHMgV29yZFByb3BzOw0KLQlXb3JkUHJvcHMuZHdXb3JkQ29sb3IgPSBkd0NvbG9yOw0KLQlyZXR1cm4gU2V0UmljaFRleHRQcm9wcyhFUF9XT1JEQ09MT1IsTlVMTCwmV29yZFByb3BzKTsJDQotfQ0KLQ0KLUZYX0JPT0wgQ0ZYX0VkaXQ6OlNldFJpY2hUZXh0U2NyaXB0KEZYX0lOVDMyIG5TY3JpcHRUeXBlKQ0KLXsNCi0JQ1BWVF9Xb3JkUHJvcHMgV29yZFByb3BzOw0KLQlXb3JkUHJvcHMublNjcmlwdFR5cGUgPSBuU2NyaXB0VHlwZTsNCi0JcmV0dXJuIFNldFJpY2hUZXh0UHJvcHMoRVBfU0NSSVBUVFlQRSxOVUxMLCZXb3JkUHJvcHMpOwkNCi19DQotDQotRlhfQk9PTCBDRlhfRWRpdDo6U2V0UmljaFRleHRCb2xkKEZYX0JPT0wgYkJvbGQpDQotew0KLQlDUFZUX1dvcmRQcm9wcyBXb3JkUHJvcHM7DQotCWlmIChiQm9sZCkNCi0JCVdvcmRQcm9wcy5uV29yZFN0eWxlIHw9IFBWVFdPUkRfU1RZTEVfQk9MRDsNCi0JcmV0dXJuIFNldFJpY2hUZXh0UHJvcHMoRVBfQk9MRCxOVUxMLCZXb3JkUHJvcHMpOw0KLX0NCi0NCi1GWF9CT09MIENGWF9FZGl0OjpTZXRSaWNoVGV4dEl0YWxpYyhGWF9CT09MIGJJdGFsaWMpDQotew0KLQlDUFZUX1dvcmRQcm9wcyBXb3JkUHJvcHM7DQotCWlmIChiSXRhbGljKQ0KLQkJV29yZFByb3BzLm5Xb3JkU3R5bGUgfD0gUFZUV09SRF9TVFlMRV9JVEFMSUM7DQotCXJldHVybiBTZXRSaWNoVGV4dFByb3BzKEVQX0lUQUxJQyxOVUxMLCZXb3JkUHJvcHMpOw0KLX0NCi0NCi1GWF9CT09MIENGWF9FZGl0OjpTZXRSaWNoVGV4dFVuZGVybGluZShGWF9CT09MIGJVbmRlcmxpbmUpDQotew0KLQlDUFZUX1dvcmRQcm9wcyBXb3JkUHJvcHM7DQotCWlmIChiVW5kZXJsaW5lKQ0KLQkJV29yZFByb3BzLm5Xb3JkU3R5bGUgfD0gUFZUV09SRF9TVFlMRV9VTkRFUkxJTkU7DQotCXJldHVybiBTZXRSaWNoVGV4dFByb3BzKEVQX1VOREVSTElORSxOVUxMLCZXb3JkUHJvcHMpOw0KLX0NCi0NCi1GWF9CT09MIENGWF9FZGl0OjpTZXRSaWNoVGV4dENyb3Nzb3V0KEZYX0JPT0wgYkNyb3Nzb3V0KQ0KLXsNCi0JQ1BWVF9Xb3JkUHJvcHMgV29yZFByb3BzOw0KLQlpZiAoYkNyb3Nzb3V0KQ0KLQkJV29yZFByb3BzLm5Xb3JkU3R5bGUgfD0gUFZUV09SRF9TVFlMRV9DUk9TU09VVDsNCi0JcmV0dXJuIFNldFJpY2hUZXh0UHJvcHMoRVBfQ1JPU1NPVVQsTlVMTCwmV29yZFByb3BzKTsNCi19DQotDQotRlhfQk9PTCBDRlhfRWRpdDo6U2V0UmljaFRleHRDaGFyU3BhY2UoRlhfRkxPQVQgZkNoYXJTcGFjZSkNCi17DQotCUNQVlRfV29yZFByb3BzIFdvcmRQcm9wczsNCi0JV29yZFByb3BzLmZDaGFyU3BhY2UgPSBmQ2hhclNwYWNlOw0KLQlyZXR1cm4gU2V0UmljaFRleHRQcm9wcyhFUF9DSEFSU1BBQ0UsTlVMTCwmV29yZFByb3BzKTsJDQotfQ0KLQ0KLUZYX0JPT0wgQ0ZYX0VkaXQ6OlNldFJpY2hUZXh0SG9yelNjYWxlKEZYX0lOVDMyIG5Ib3J6U2NhbGUgLyo9IDEwMCovKQ0KLXsNCi0JQ1BWVF9Xb3JkUHJvcHMgV29yZFByb3BzOw0KLQlXb3JkUHJvcHMubkhvcnpTY2FsZSA9IG5Ib3J6U2NhbGU7DQotCXJldHVybiBTZXRSaWNoVGV4dFByb3BzKEVQX0hPUlpTQ0FMRSxOVUxMLCZXb3JkUHJvcHMpOwkNCi19DQotDQotRlhfQk9PTCBDRlhfRWRpdDo6U2V0UmljaFRleHRMaW5lTGVhZGluZyhGWF9GTE9BVCBmTGluZUxlYWRpbmcpDQotew0KLQlDUFZUX1NlY1Byb3BzIFNlY1Byb3BzOw0KLQlTZWNQcm9wcy5mTGluZUxlYWRpbmcgPSBmTGluZUxlYWRpbmc7DQotCXJldHVybiBTZXRSaWNoVGV4dFByb3BzKEVQX0xJTkVMRUFESU5HLCZTZWNQcm9wcyxOVUxMKTsJDQotfQ0KLQ0KLUZYX0JPT0wgQ0ZYX0VkaXQ6OlNldFJpY2hUZXh0TGluZUluZGVudChGWF9GTE9BVCBmTGluZUluZGVudCkNCi17DQotCUNQVlRfU2VjUHJvcHMgU2VjUHJvcHM7DQotCVNlY1Byb3BzLmZMaW5lSW5kZW50ID0gZkxpbmVJbmRlbnQ7DQotCXJldHVybiBTZXRSaWNoVGV4dFByb3BzKEVQX0xJTkVJTkRFTlQsJlNlY1Byb3BzLE5VTEwpOw0KLX0NCi0NCi1GWF9CT09MCUNGWF9FZGl0OjpTZXRSaWNoVGV4dEFsaWdubWVudChGWF9JTlQzMiBuQWxpZ25tZW50KQ0KLXsNCi0JQ1BWVF9TZWNQcm9wcyBTZWNQcm9wczsNCi0JU2VjUHJvcHMubkFsaWdubWVudCA9IG5BbGlnbm1lbnQ7DQotCXJldHVybiBTZXRSaWNoVGV4dFByb3BzKEVQX0FMSUdOTUVOVCwmU2VjUHJvcHMsTlVMTCk7DQotfQ0KLQ0KLUZYX0JPT0wgQ0ZYX0VkaXQ6OlNldFJpY2hUZXh0UHJvcHMoRURJVF9QUk9QU19FIGVQcm9wcywgY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzKQ0KLXsNCi0JRlhfQk9PTCBiU2V0ID0gRkFMU0U7DQotCUZYX0JPT0wgYlNldDEsYlNldDI7DQotCWlmIChtX3BWVC0+SXNWYWxpZCgpICYmIG1fcFZULT5Jc1JpY2hUZXh0KCkpDQotCXsNCi0JCWlmIChJUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvciAqIHBJdGVyYXRvciA9IG1fcFZULT5HZXRJdGVyYXRvcigpKQ0KLQkJew0KLQkJCUNQVlRfV29yZFJhbmdlIHdyVGVtcCA9IG1fU2VsU3RhdGUuQ29udmVydFRvV29yZFJhbmdlKCk7DQotCQkJDQotCQkJbV9wVlQtPlVwZGF0ZVdvcmRQbGFjZSh3clRlbXAuQmVnaW5Qb3MpOw0KLQkJCW1fcFZULT5VcGRhdGVXb3JkUGxhY2Uod3JUZW1wLkVuZFBvcyk7DQotCQkJcEl0ZXJhdG9yLT5TZXRBdCh3clRlbXAuQmVnaW5Qb3MpOw0KLQ0KLQkJCUJlZ2luR3JvdXBVbmRvKEwiIik7Ow0KLQ0KLQkJCWJTZXQgPSBTZXRTZWNQcm9wcyhlUHJvcHMsd3JUZW1wLkJlZ2luUG9zLHBTZWNQcm9wcyxwV29yZFByb3BzLHdyVGVtcCxUUlVFKTsNCi0NCi0JCQl3aGlsZSAocEl0ZXJhdG9yLT5OZXh0V29yZCgpKQ0KLQkJCXsNCi0JCQkJQ1BWVF9Xb3JkUGxhY2UgcGxhY2UgPSBwSXRlcmF0b3ItPkdldEF0KCk7DQotCQkJCWlmIChwbGFjZS5Xb3JkQ21wKHdyVGVtcC5FbmRQb3MpID4gMCkgYnJlYWs7DQotCQkJCWJTZXQxID0gU2V0U2VjUHJvcHMoZVByb3BzLHBsYWNlLHBTZWNQcm9wcyxwV29yZFByb3BzLHdyVGVtcCxUUlVFKTsNCi0JCQkJYlNldDIgPSBTZXRXb3JkUHJvcHMoZVByb3BzLHBsYWNlLHBXb3JkUHJvcHMsd3JUZW1wLFRSVUUpOw0KLQkJCQkNCi0JCQkJaWYgKCFiU2V0KQ0KLQkJCQkJYlNldCA9IChiU2V0MSB8fCBiU2V0Mik7DQotCQkJfQ0KLQ0KLQkJCUVuZEdyb3VwVW5kbygpOw0KLQ0KLQkJCWlmIChiU2V0KQ0KLQkJCXsNCi0JCQkJUGFpbnRTZXRQcm9wcyhlUHJvcHMsd3JUZW1wKTsNCi0JCQl9DQotCQl9DQotCX0JDQotDQotCXJldHVybiBiU2V0Ow0KLX0NCi0NCi12b2lkIENGWF9FZGl0OjpQYWludFNldFByb3BzKEVESVRfUFJPUFNfRSBlUHJvcHMsIGNvbnN0IENQVlRfV29yZFJhbmdlICYgd3IpDQotew0KLQlzd2l0Y2goZVByb3BzKQ0KLQl7DQotCWNhc2UgRVBfTElORUxFQURJTkc6DQotCWNhc2UgRVBfTElORUlOREVOVDoNCi0JY2FzZSBFUF9BTElHTk1FTlQ6DQotCQlSZWFycmFuZ2VQYXJ0KHdyKTsNCi0JCVNjcm9sbFRvQ2FyZXQoKTsNCi0JCVJlZnJlc2goUlBfQU5BTFlTRSk7DQotCQlTZXRDYXJldE9yaWdpbigpOw0KLQkJU2V0Q2FyZXRJbmZvKCk7CQ0KLQkJYnJlYWs7CQkJCQkNCi0JY2FzZSBFUF9XT1JEQ09MT1I6DQotCWNhc2UgRVBfVU5ERVJMSU5FOg0KLQljYXNlIEVQX0NST1NTT1VUOg0KLQkJUmVmcmVzaChSUF9PUFRJT05BTCwmd3IpOw0KLQkJYnJlYWs7DQotCWNhc2UgRVBfRk9OVElOREVYOg0KLQljYXNlIEVQX0ZPTlRTSVpFOg0KLQljYXNlIEVQX1NDUklQVFRZUEU6CQkJCQkNCi0JY2FzZSBFUF9DSEFSU1BBQ0U6DQotCWNhc2UgRVBfSE9SWlNDQUxFOg0KLQljYXNlIEVQX0JPTEQ6DQotCWNhc2UgRVBfSVRBTElDOg0KLQkJUmVhcnJhbmdlUGFydCh3cik7DQotCQlTY3JvbGxUb0NhcmV0KCk7DQotDQotCQlDUFZUX1dvcmRSYW5nZSB3clJlZnJlc2gobV9wVlQtPkdldFNlY3Rpb25CZWdpblBsYWNlKHdyLkJlZ2luUG9zKSwNCi0JCQltX3BWVC0+R2V0U2VjdGlvbkVuZFBsYWNlKHdyLkVuZFBvcykpOw0KLQkJUmVmcmVzaChSUF9BTkFMWVNFLCZ3clJlZnJlc2gpOw0KLQ0KLQkJU2V0Q2FyZXRPcmlnaW4oKTsNCi0JCVNldENhcmV0SW5mbygpOwkNCi0JCWJyZWFrOw0KLQl9CQkJCQ0KLX0NCi0NCi1GWF9CT09MIENGWF9FZGl0OjpTZXRTZWNQcm9wcyhFRElUX1BST1BTX0UgZVByb3BzLCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCANCi0JCQkJCQkJICAgY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzLCANCi0JCQkJCQkJICAgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiB3ciwgRlhfQk9PTCBiQWRkVW5kbykNCi17DQotCWlmIChtX3BWVC0+SXNWYWxpZCgpICYmIG1fcFZULT5Jc1JpY2hUZXh0KCkpDQotCXsNCi0JCWlmIChJUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvciAqIHBJdGVyYXRvciA9IG1fcFZULT5HZXRJdGVyYXRvcigpKQ0KLQkJew0KLQkJCUZYX0JPT0wgYlNldCA9IEZBTFNFOw0KLQkJCUNQVlRfU2VjdGlvbiBzZWNpbmZvOw0KLQkJCUNQVlRfU2VjdGlvbiBPbGRTZWNpbmZvOw0KLQ0KLQkJCUNQVlRfV29yZFBsYWNlIG9sZHBsYWNlID0gcEl0ZXJhdG9yLT5HZXRBdCgpOw0KLQ0KLQkJCWlmIChlUHJvcHMgPT0gRVBfTElORUxFQURJTkcgfHwgZVByb3BzID09IEVQX0xJTkVJTkRFTlQgfHwgZVByb3BzID09IEVQX0FMSUdOTUVOVCkNCi0JCQl7DQotCQkJCWlmIChwU2VjUHJvcHMpDQotCQkJCXsNCi0JCQkJCXBJdGVyYXRvci0+U2V0QXQocGxhY2UpOw0KLQkJCQkJaWYgKHBJdGVyYXRvci0+R2V0U2VjdGlvbihzZWNpbmZvKSkNCi0JCQkJCXsNCi0JCQkJCQlpZiAoYkFkZFVuZG8pIE9sZFNlY2luZm8gPSBzZWNpbmZvOw0KLQ0KLQkJCQkJCXN3aXRjaChlUHJvcHMpDQotCQkJCQkJew0KLQkJCQkJCWNhc2UgRVBfTElORUxFQURJTkc6CQkJCQ0KLQkJCQkJCQlpZiAoIUZYX0VESVRfSXNGbG9hdEVxdWFsKHNlY2luZm8uU2VjUHJvcHMuZkxpbmVMZWFkaW5nLHBTZWNQcm9wcy0+ZkxpbmVMZWFkaW5nKSkNCi0JCQkJCQkJew0KLQkJCQkJCQkJc2VjaW5mby5TZWNQcm9wcy5mTGluZUxlYWRpbmcgPSBwU2VjUHJvcHMtPmZMaW5lTGVhZGluZzsJCQkJCQkJDQotCQkJCQkJCQliU2V0ID0gVFJVRTsNCi0JCQkJCQkJfQ0KLQkJCQkJCQlicmVhazsNCi0JCQkJCQljYXNlIEVQX0xJTkVJTkRFTlQ6DQotCQkJCQkJCWlmICghRlhfRURJVF9Jc0Zsb2F0RXF1YWwoc2VjaW5mby5TZWNQcm9wcy5mTGluZUluZGVudCxwU2VjUHJvcHMtPmZMaW5lSW5kZW50KSkNCi0JCQkJCQkJew0KLQkJCQkJCQkJc2VjaW5mby5TZWNQcm9wcy5mTGluZUluZGVudCA9IHBTZWNQcm9wcy0+ZkxpbmVJbmRlbnQ7DQotCQkJCQkJCQliU2V0ID0gVFJVRTsNCi0JCQkJCQkJfQ0KLQkJCQkJCQlicmVhazsNCi0JCQkJCQljYXNlIEVQX0FMSUdOTUVOVDoNCi0JCQkJCQkJaWYgKHNlY2luZm8uU2VjUHJvcHMubkFsaWdubWVudCAhPSBwU2VjUHJvcHMtPm5BbGlnbm1lbnQpDQotCQkJCQkJCXsNCi0JCQkJCQkJCXNlY2luZm8uU2VjUHJvcHMubkFsaWdubWVudCA9IHBTZWNQcm9wcy0+bkFsaWdubWVudDsNCi0JCQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJCQl9DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCWRlZmF1bHQ6DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCX0NCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQlpZiAocFdvcmRQcm9wcyAmJiBwbGFjZSA9PSBtX3BWVC0+R2V0U2VjdGlvbkJlZ2luUGxhY2UocGxhY2UpKQ0KLQkJCQl7DQotCQkJCQlwSXRlcmF0b3ItPlNldEF0KHBsYWNlKTsNCi0JCQkJCWlmIChwSXRlcmF0b3ItPkdldFNlY3Rpb24oc2VjaW5mbykpDQotCQkJCQl7DQotCQkJCQkJaWYgKGJBZGRVbmRvKSBPbGRTZWNpbmZvID0gc2VjaW5mbzsNCi0NCi0JCQkJCQlzd2l0Y2goZVByb3BzKQ0KLQkJCQkJCXsNCi0JCQkJCQljYXNlIEVQX0ZPTlRJTkRFWDoJCQkJDQotCQkJCQkJCWlmIChzZWNpbmZvLldvcmRQcm9wcy5uRm9udEluZGV4ICE9IHBXb3JkUHJvcHMtPm5Gb250SW5kZXgpDQotCQkJCQkJCXsNCi0JCQkJCQkJCXNlY2luZm8uV29yZFByb3BzLm5Gb250SW5kZXggPSBwV29yZFByb3BzLT5uRm9udEluZGV4Ow0KLQkJCQkJCQkJYlNldCA9IFRSVUU7DQotCQkJCQkJCX0NCi0JCQkJCQkJYnJlYWs7DQotCQkJCQkJY2FzZSBFUF9GT05UU0laRToNCi0JCQkJCQkJaWYgKCFGWF9FRElUX0lzRmxvYXRFcXVhbChzZWNpbmZvLldvcmRQcm9wcy5mRm9udFNpemUscFdvcmRQcm9wcy0+ZkZvbnRTaXplKSkNCi0JCQkJCQkJew0KLQkJCQkJCQkJc2VjaW5mby5Xb3JkUHJvcHMuZkZvbnRTaXplID0gcFdvcmRQcm9wcy0+ZkZvbnRTaXplOw0KLQkJCQkJCQkJYlNldCA9IFRSVUU7DQotCQkJCQkJCX0NCi0JCQkJCQkJYnJlYWs7DQotCQkJCQkJY2FzZSBFUF9XT1JEQ09MT1I6DQotCQkJCQkJCWlmIChzZWNpbmZvLldvcmRQcm9wcy5kd1dvcmRDb2xvciAhPSBwV29yZFByb3BzLT5kd1dvcmRDb2xvcikNCi0JCQkJCQkJew0KLQkJCQkJCQkJc2VjaW5mby5Xb3JkUHJvcHMuZHdXb3JkQ29sb3IgPSBwV29yZFByb3BzLT5kd1dvcmRDb2xvcjsNCi0JCQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJCQl9DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCWNhc2UgRVBfU0NSSVBUVFlQRToJCQkJDQotCQkJCQkJCWlmIChzZWNpbmZvLldvcmRQcm9wcy5uU2NyaXB0VHlwZSAhPSBwV29yZFByb3BzLT5uU2NyaXB0VHlwZSkNCi0JCQkJCQkJew0KLQkJCQkJCQkJc2VjaW5mby5Xb3JkUHJvcHMublNjcmlwdFR5cGUgPSBwV29yZFByb3BzLT5uU2NyaXB0VHlwZTsNCi0JCQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJCQl9DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCWNhc2UgRVBfQ0hBUlNQQUNFOgkJCQ0KLQkJCQkJCQlpZiAoIUZYX0VESVRfSXNGbG9hdEVxdWFsKHNlY2luZm8uV29yZFByb3BzLmZDaGFyU3BhY2UscFdvcmRQcm9wcy0+ZkNoYXJTcGFjZSkpDQotCQkJCQkJCXsNCi0JCQkJCQkJCXNlY2luZm8uV29yZFByb3BzLmZDaGFyU3BhY2UgPSBwV29yZFByb3BzLT5mQ2hhclNwYWNlOw0KLQkJCQkJCQkJYlNldCA9IFRSVUU7DQotCQkJCQkJCX0NCi0JCQkJCQkJYnJlYWs7DQotCQkJCQkJY2FzZSBFUF9IT1JaU0NBTEU6CQkJCQ0KLQkJCQkJCQlpZiAoc2VjaW5mby5Xb3JkUHJvcHMubkhvcnpTY2FsZSAhPSBwV29yZFByb3BzLT5uSG9yelNjYWxlKQ0KLQkJCQkJCQl7DQotCQkJCQkJCQlzZWNpbmZvLldvcmRQcm9wcy5uSG9yelNjYWxlID0gcFdvcmRQcm9wcy0+bkhvcnpTY2FsZTsNCi0JCQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJCQl9DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCWNhc2UgRVBfVU5ERVJMSU5FOg0KLQkJCQkJCQlpZiAocFdvcmRQcm9wcy0+bldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfVU5ERVJMSU5FKQ0KLQkJCQkJCQl7DQotCQkJCQkJCQlpZiAoKHNlY2luZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgJiBQVlRXT1JEX1NUWUxFX1VOREVSTElORSkgPT0gMCkNCi0JCQkJCQkJCXsNCi0JCQkJCQkJCQlzZWNpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlIHw9IFBWVFdPUkRfU1RZTEVfVU5ERVJMSU5FOyANCi0JCQkJCQkJCQliU2V0ID0gVFJVRTsNCi0JCQkJCQkJCX0NCi0JCQkJCQkJfQ0KLQkJCQkJCQllbHNlDQotCQkJCQkJCXsNCi0JCQkJCQkJCWlmICgoc2VjaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfVU5ERVJMSU5FKSAhPSAwKQ0KLQkJCQkJCQkJew0KLQkJCQkJCQkJCXNlY2luZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgJj0gflBWVFdPUkRfU1RZTEVfVU5ERVJMSU5FOw0KLQkJCQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJCQkJfQ0KLQkJCQkJCQl9DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCWNhc2UgRVBfQ1JPU1NPVVQ6DQotCQkJCQkJCWlmIChwV29yZFByb3BzLT5uV29yZFN0eWxlICYgUFZUV09SRF9TVFlMRV9DUk9TU09VVCkNCi0JCQkJCQkJew0KLQkJCQkJCQkJaWYgKChzZWNpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlICYgUFZUV09SRF9TVFlMRV9DUk9TU09VVCkgPT0gMCkNCi0JCQkJCQkJCXsNCi0JCQkJCQkJCQlzZWNpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlIHw9IFBWVFdPUkRfU1RZTEVfQ1JPU1NPVVQ7IA0KLQkJCQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJCQkJfQ0KLQkJCQkJCQl9DQotCQkJCQkJCWVsc2UNCi0JCQkJCQkJew0KLQkJCQkJCQkJaWYgKChzZWNpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlICYgUFZUV09SRF9TVFlMRV9DUk9TU09VVCkgIT0gMCkNCi0JCQkJCQkJCXsNCi0JCQkJCQkJCQlzZWNpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlICY9IH5QVlRXT1JEX1NUWUxFX0NST1NTT1VUOw0KLQkJCQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJCQkJfQ0KLQkJCQkJCQl9DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCWNhc2UgRVBfQk9MRDoNCi0JCQkJCQkJaWYgKHBXb3JkUHJvcHMtPm5Xb3JkU3R5bGUgJiBQVlRXT1JEX1NUWUxFX0JPTEQpDQotCQkJCQkJCXsNCi0JCQkJCQkJCWlmICgoc2VjaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfQk9MRCkgPT0gMCkNCi0JCQkJCQkJCXsNCi0JCQkJCQkJCQlzZWNpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlIHw9IFBWVFdPUkRfU1RZTEVfQk9MRDsgDQotCQkJCQkJCQkJYlNldCA9IFRSVUU7DQotCQkJCQkJCQl9DQotCQkJCQkJCX0NCi0JCQkJCQkJZWxzZQ0KLQkJCQkJCQl7DQotCQkJCQkJCQlpZiAoKHNlY2luZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgJiBQVlRXT1JEX1NUWUxFX0JPTEQpICE9IDApDQotCQkJCQkJCQl7DQotCQkJCQkJCQkJc2VjaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSAmPSB+UFZUV09SRF9TVFlMRV9CT0xEOw0KLQkJCQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJCQkJfQ0KLQkJCQkJCQl9DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCWNhc2UgRVBfSVRBTElDOg0KLQkJCQkJCQlpZiAocFdvcmRQcm9wcy0+bldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfSVRBTElDKQ0KLQkJCQkJCQl7DQotCQkJCQkJCQlpZiAoKHNlY2luZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgJiBQVlRXT1JEX1NUWUxFX0lUQUxJQykgPT0gMCkNCi0JCQkJCQkJCXsNCi0JCQkJCQkJCQlzZWNpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlIHw9IFBWVFdPUkRfU1RZTEVfSVRBTElDOyANCi0JCQkJCQkJCQliU2V0ID0gVFJVRTsNCi0JCQkJCQkJCX0NCi0JCQkJCQkJfQ0KLQkJCQkJCQllbHNlDQotCQkJCQkJCXsNCi0JCQkJCQkJCWlmICgoc2VjaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfSVRBTElDKSAhPSAwKQ0KLQkJCQkJCQkJew0KLQkJCQkJCQkJCXNlY2luZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgJj0gflBWVFdPUkRfU1RZTEVfSVRBTElDOw0KLQkJCQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJCQkJfQ0KLQkJCQkJCQl9DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCWRlZmF1bHQ6DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCX0NCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCX0NCi0NCi0JCQlpZiAoYlNldCkNCi0JCQl7DQotCQkJCXBJdGVyYXRvci0+U2V0U2VjdGlvbihzZWNpbmZvKTsNCi0NCi0JCQkJaWYgKGJBZGRVbmRvICYmIG1fYkVuYWJsZVVuZG8pDQotCQkJCXsNCi0JCQkJCUFkZEVkaXRVbmRvSXRlbShuZXcgQ0ZYRVVfU2V0U2VjUHJvcHMNCi0JCQkJCQkodGhpcyxwbGFjZSxlUHJvcHMsT2xkU2VjaW5mby5TZWNQcm9wcyxPbGRTZWNpbmZvLldvcmRQcm9wcyxzZWNpbmZvLlNlY1Byb3BzLHNlY2luZm8uV29yZFByb3BzLHdyKSk7DQotCQkJCX0NCi0JCQl9DQotDQotCQkJcEl0ZXJhdG9yLT5TZXRBdChvbGRwbGFjZSk7DQotDQotCQkJcmV0dXJuIGJTZXQ7DQotCQl9DQotCX0NCi0JDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBDRlhfRWRpdDo6U2V0V29yZFByb3BzKEVESVRfUFJPUFNfRSBlUHJvcHMsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIA0KLQkJCQkJCQkJY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzLCBjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHdyLCBGWF9CT09MIGJBZGRVbmRvKQ0KLXsNCi0JaWYgKG1fcFZULT5Jc1ZhbGlkKCkgJiYgbV9wVlQtPklzUmljaFRleHQoKSkNCi0Jew0KLQkJaWYgKElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yICogcEl0ZXJhdG9yID0gbV9wVlQtPkdldEl0ZXJhdG9yKCkpDQotCQl7DQotCQkJRlhfQk9PTCBiU2V0ID0gRkFMU0U7DQotCQkJQ1BWVF9Xb3JkIHdvcmRpbmZvOw0KLQkJCUNQVlRfV29yZCBPbGRXb3JkaW5mbzsNCi0NCi0JCQlDUFZUX1dvcmRQbGFjZSBvbGRwbGFjZSA9IHBJdGVyYXRvci0+R2V0QXQoKTsNCi0NCi0JCQlpZiAocFdvcmRQcm9wcykNCi0JCQl7DQotCQkJCXBJdGVyYXRvci0+U2V0QXQocGxhY2UpOw0KLQkJCQlpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmRpbmZvKSkNCi0JCQkJew0KLQkJCQkJaWYgKGJBZGRVbmRvKSBPbGRXb3JkaW5mbyA9IHdvcmRpbmZvOw0KLQ0KLQkJCQkJc3dpdGNoKGVQcm9wcykNCi0JCQkJCXsNCi0JCQkJCWNhc2UgRVBfRk9OVElOREVYOgkJCQkNCi0JCQkJCQlpZiAod29yZGluZm8uV29yZFByb3BzLm5Gb250SW5kZXggIT0gcFdvcmRQcm9wcy0+bkZvbnRJbmRleCkNCi0JCQkJCQl7DQotCQkJCQkJCWlmIChJRlhfRWRpdF9Gb250TWFwKiBwRm9udE1hcCA9IHRoaXMtPkdldEZvbnRNYXAoKSkNCi0JCQkJCQkJew0KLQkJCQkJCQkJd29yZGluZm8uV29yZFByb3BzLm5Gb250SW5kZXggPSBwRm9udE1hcC0+R2V0V29yZEZvbnRJbmRleCh3b3JkaW5mby5Xb3JkLHdvcmRpbmZvLm5DaGFyc2V0LHBXb3JkUHJvcHMtPm5Gb250SW5kZXgpOw0KLQkJCQkJCQl9DQotCQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJCX0NCi0JCQkJCQlicmVhazsNCi0JCQkJCWNhc2UgRVBfRk9OVFNJWkU6DQotCQkJCQkJaWYgKCFGWF9FRElUX0lzRmxvYXRFcXVhbCh3b3JkaW5mby5Xb3JkUHJvcHMuZkZvbnRTaXplLHBXb3JkUHJvcHMtPmZGb250U2l6ZSkpDQotCQkJCQkJew0KLQkJCQkJCQl3b3JkaW5mby5Xb3JkUHJvcHMuZkZvbnRTaXplID0gcFdvcmRQcm9wcy0+ZkZvbnRTaXplOw0KLQkJCQkJCQliU2V0ID0gVFJVRTsNCi0JCQkJCQl9DQotCQkJCQkJYnJlYWs7DQotCQkJCQljYXNlIEVQX1dPUkRDT0xPUjoNCi0JCQkJCQlpZiAod29yZGluZm8uV29yZFByb3BzLmR3V29yZENvbG9yICE9IHBXb3JkUHJvcHMtPmR3V29yZENvbG9yKQ0KLQkJCQkJCXsNCi0JCQkJCQkJd29yZGluZm8uV29yZFByb3BzLmR3V29yZENvbG9yID0gcFdvcmRQcm9wcy0+ZHdXb3JkQ29sb3I7DQotCQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJCX0NCi0JCQkJCQlicmVhazsNCi0JCQkJCWNhc2UgRVBfU0NSSVBUVFlQRToNCi0JCQkJCQlpZiAod29yZGluZm8uV29yZFByb3BzLm5TY3JpcHRUeXBlICE9IHBXb3JkUHJvcHMtPm5TY3JpcHRUeXBlKQ0KLQkJCQkJCXsNCi0JCQkJCQkJd29yZGluZm8uV29yZFByb3BzLm5TY3JpcHRUeXBlID0gcFdvcmRQcm9wcy0+blNjcmlwdFR5cGU7DQotCQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJCX0NCi0JCQkJCQlicmVhazsNCi0JCQkJCWNhc2UgRVBfQ0hBUlNQQUNFOg0KLQkJCQkJCWlmICghRlhfRURJVF9Jc0Zsb2F0RXF1YWwod29yZGluZm8uV29yZFByb3BzLmZDaGFyU3BhY2UscFdvcmRQcm9wcy0+ZkNoYXJTcGFjZSkpDQotCQkJCQkJew0KLQkJCQkJCQl3b3JkaW5mby5Xb3JkUHJvcHMuZkNoYXJTcGFjZSA9IHBXb3JkUHJvcHMtPmZDaGFyU3BhY2U7DQotCQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJCX0NCi0JCQkJCQlicmVhazsNCi0JCQkJCWNhc2UgRVBfSE9SWlNDQUxFOg0KLQkJCQkJCWlmICh3b3JkaW5mby5Xb3JkUHJvcHMubkhvcnpTY2FsZSAhPSBwV29yZFByb3BzLT5uSG9yelNjYWxlKQ0KLQkJCQkJCXsNCi0JCQkJCQkJd29yZGluZm8uV29yZFByb3BzLm5Ib3J6U2NhbGUgPSBwV29yZFByb3BzLT5uSG9yelNjYWxlOw0KLQkJCQkJCQliU2V0ID0gVFJVRTsNCi0JCQkJCQl9DQotCQkJCQkJYnJlYWs7DQotCQkJCQljYXNlIEVQX1VOREVSTElORToNCi0JCQkJCQlpZiAocFdvcmRQcm9wcy0+bldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfVU5ERVJMSU5FKQ0KLQkJCQkJCXsNCi0JCQkJCQkJaWYgKCh3b3JkaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfVU5ERVJMSU5FKSA9PSAwKQ0KLQkJCQkJCQl7DQotCQkJCQkJCQl3b3JkaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSB8PSBQVlRXT1JEX1NUWUxFX1VOREVSTElORTsNCi0JCQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJCQl9DQotCQkJCQkJfQ0KLQkJCQkJCWVsc2UNCi0JCQkJCQl7DQotCQkJCQkJCWlmICgod29yZGluZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgJiBQVlRXT1JEX1NUWUxFX1VOREVSTElORSkgIT0gMCkNCi0JCQkJCQkJew0KLQkJCQkJCQkJd29yZGluZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgJj0gflBWVFdPUkRfU1RZTEVfVU5ERVJMSU5FOw0KLQkJCQkJCQkJYlNldCA9IFRSVUU7DQotCQkJCQkJCX0NCi0JCQkJCQl9DQotCQkJCQkJYnJlYWs7DQotCQkJCQljYXNlIEVQX0NST1NTT1VUOg0KLQkJCQkJCWlmIChwV29yZFByb3BzLT5uV29yZFN0eWxlICYgUFZUV09SRF9TVFlMRV9DUk9TU09VVCkNCi0JCQkJCQl7DQotCQkJCQkJCWlmICgod29yZGluZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgJiBQVlRXT1JEX1NUWUxFX0NST1NTT1VUKSA9PSAwKQ0KLQkJCQkJCQl7DQotCQkJCQkJCQl3b3JkaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSB8PSBQVlRXT1JEX1NUWUxFX0NST1NTT1VUOyANCi0JCQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJCQl9DQotCQkJCQkJfQ0KLQkJCQkJCWVsc2UNCi0JCQkJCQl7DQotCQkJCQkJCWlmICgod29yZGluZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgJiBQVlRXT1JEX1NUWUxFX0NST1NTT1VUKSAhPSAwKQ0KLQkJCQkJCQl7DQotCQkJCQkJCQl3b3JkaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSAmPSB+UFZUV09SRF9TVFlMRV9DUk9TU09VVDsNCi0JCQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJCQl9DQotCQkJCQkJfQ0KLQkJCQkJCWJyZWFrOw0KLQkJCQkJY2FzZSBFUF9CT0xEOg0KLQkJCQkJCWlmIChwV29yZFByb3BzLT5uV29yZFN0eWxlICYgUFZUV09SRF9TVFlMRV9CT0xEKQ0KLQkJCQkJCXsNCi0JCQkJCQkJaWYgKCh3b3JkaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfQk9MRCkgPT0gMCkNCi0JCQkJCQkJew0KLQkJCQkJCQkJd29yZGluZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgfD0gUFZUV09SRF9TVFlMRV9CT0xEOyANCi0JCQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJCQl9DQotCQkJCQkJfQ0KLQkJCQkJCWVsc2UNCi0JCQkJCQl7DQotCQkJCQkJCWlmICgod29yZGluZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgJiBQVlRXT1JEX1NUWUxFX0JPTEQpICE9IDApDQotCQkJCQkJCXsNCi0JCQkJCQkJCXdvcmRpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlICY9IH5QVlRXT1JEX1NUWUxFX0JPTEQ7DQotCQkJCQkJCQliU2V0ID0gVFJVRTsNCi0JCQkJCQkJfQ0KLQkJCQkJCX0NCi0JCQkJCQlicmVhazsNCi0JCQkJCWNhc2UgRVBfSVRBTElDOg0KLQkJCQkJCWlmIChwV29yZFByb3BzLT5uV29yZFN0eWxlICYgUFZUV09SRF9TVFlMRV9JVEFMSUMpDQotCQkJCQkJew0KLQkJCQkJCQlpZiAoKHdvcmRpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlICYgUFZUV09SRF9TVFlMRV9JVEFMSUMpID09IDApDQotCQkJCQkJCXsNCi0JCQkJCQkJCXdvcmRpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlIHw9IFBWVFdPUkRfU1RZTEVfSVRBTElDOyANCi0JCQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJCQl9DQotCQkJCQkJfQ0KLQkJCQkJCWVsc2UNCi0JCQkJCQl7DQotCQkJCQkJCWlmICgod29yZGluZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgJiBQVlRXT1JEX1NUWUxFX0lUQUxJQykgIT0gMCkNCi0JCQkJCQkJew0KLQkJCQkJCQkJd29yZGluZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgJj0gflBWVFdPUkRfU1RZTEVfSVRBTElDOw0KLQkJCQkJCQkJYlNldCA9IFRSVUU7DQotCQkJCQkJCX0NCi0JCQkJCQl9DQotCQkJCQkJYnJlYWs7DQotCQkJCQlkZWZhdWx0Og0KLQkJCQkJCWJyZWFrOw0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQkNCi0NCi0JCQlpZiAoYlNldCkNCi0JCQl7DQotCQkJCXBJdGVyYXRvci0+U2V0V29yZCh3b3JkaW5mbyk7DQotDQotCQkJCWlmIChiQWRkVW5kbyAmJiBtX2JFbmFibGVVbmRvKQ0KLQkJCQl7DQotCQkJCQlBZGRFZGl0VW5kb0l0ZW0obmV3IENGWEVVX1NldFdvcmRQcm9wcw0KLQkJCQkJCSh0aGlzLHBsYWNlLGVQcm9wcyxPbGRXb3JkaW5mby5Xb3JkUHJvcHMsd29yZGluZm8uV29yZFByb3BzLHdyKSk7DQotCQkJCX0NCi0JCQl9DQotCQkJDQotCQkJcEl0ZXJhdG9yLT5TZXRBdChvbGRwbGFjZSk7DQotCQkJcmV0dXJuIGJTZXQ7DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi12b2lkIENGWF9FZGl0OjpTZXRUZXh0KEZYX0xQQ1dTVFIgdGV4dCxGWF9JTlQzMiBjaGFyc2V0IC8qPSBERUZBVUxUX0NIQVJTRVQqLywNCi0JCQkJCQljb25zdCBDUFZUX1NlY1Byb3BzICogcFNlY1Byb3BzIC8qPSBOVUxMKi8sY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzIC8qPSBOVUxMKi8pDQotew0KLQlTZXRUZXh0KHRleHQsY2hhcnNldCxwU2VjUHJvcHMscFdvcmRQcm9wcyxUUlVFLFRSVUUpOw0KLX0NCi0NCi1GWF9CT09MIENGWF9FZGl0OjpJbnNlcnRXb3JkKEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCAvKj0gREVGQVVMVF9DSEFSU0VUKi8sIGNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcyAvKj0gTlVMTCovKQ0KLXsNCi0JcmV0dXJuIEluc2VydFdvcmQod29yZCxjaGFyc2V0LHBXb3JkUHJvcHMsVFJVRSxUUlVFKTsNCi19DQotDQotRlhfQk9PTCBDRlhfRWRpdDo6SW5zZXJ0UmV0dXJuKGNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMgLyo9IE5VTEwqLyxjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMgLyo9IE5VTEwqLykNCi17DQotCXJldHVybiBJbnNlcnRSZXR1cm4ocFNlY1Byb3BzLHBXb3JkUHJvcHMsVFJVRSxUUlVFKTsNCi19DQotDQotRlhfQk9PTCBDRlhfRWRpdDo6QmFja3NwYWNlKCkNCi17DQotCXJldHVybiBCYWNrc3BhY2UoVFJVRSxUUlVFKTsNCi19DQotDQotRlhfQk9PTCBDRlhfRWRpdDo6RGVsZXRlKCkNCi17DQotCXJldHVybiBEZWxldGUoVFJVRSxUUlVFKTsNCi19DQotDQotRlhfQk9PTCBDRlhfRWRpdDo6Q2xlYXIoKQ0KLXsNCi0JcmV0dXJuIENsZWFyKFRSVUUsVFJVRSk7DQotfQ0KLQ0KLUZYX0JPT0wgQ0ZYX0VkaXQ6Okluc2VydFRleHQoRlhfTFBDV1NUUiB0ZXh0LCBGWF9JTlQzMiBjaGFyc2V0IC8qPSBERUZBVUxUX0NIQVJTRVQqLywNCi0JCQkJCQkJCWNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMgLyo9IE5VTEwqLyxjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMgLyo9IE5VTEwqLykNCi17DQotCXJldHVybiBJbnNlcnRUZXh0KHRleHQsY2hhcnNldCxwU2VjUHJvcHMscFdvcmRQcm9wcyxUUlVFLFRSVUUpOw0KLX0NCi0NCi1GWF9GTE9BVCBDRlhfRWRpdDo6R2V0Rm9udFNpemUoKSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fcFZULT5HZXRGb250U2l6ZSgpOw0KLX0NCi0NCi1GWF9XT1JEIENGWF9FZGl0OjpHZXRQYXNzd29yZENoYXIoKSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fcFZULT5HZXRQYXNzd29yZENoYXIoKTsNCi19DQotDQotRlhfSU5UMzIgQ0ZYX0VkaXQ6OkdldENoYXJBcnJheSgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9wVlQtPkdldENoYXJBcnJheSgpOw0KLX0NCi0NCi1DUERGX1JlY3QgQ0ZYX0VkaXQ6OkdldFBsYXRlUmVjdCgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9wVlQtPkdldFBsYXRlUmVjdCgpOw0KLX0NCi0NCi1DUERGX1JlY3QgQ0ZYX0VkaXQ6OkdldENvbnRlbnRSZWN0KCkgY29uc3QNCi17DQotCXJldHVybiBWVFRvRWRpdChtX3BWVC0+R2V0Q29udGVudFJlY3QoKSk7DQotfQ0KLQ0KLUZYX0lOVDMyIENGWF9FZGl0OjpHZXRIb3J6U2NhbGUoKSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fcFZULT5HZXRIb3J6U2NhbGUoKTsNCi19DQotDQotRlhfRkxPQVQgQ0ZYX0VkaXQ6OkdldENoYXJTcGFjZSgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9wVlQtPkdldENoYXJTcGFjZSgpOw0KLX0NCi0NCi0vLyBpbm5lciBtZXRob2RzDQotDQotQ1BWVF9Xb3JkUmFuZ2UgQ0ZYX0VkaXQ6OkdldFdob2xlV29yZFJhbmdlKCkgY29uc3QNCi17DQotCWlmIChtX3BWVC0+SXNWYWxpZCgpKQ0KLQkJcmV0dXJuIENQVlRfV29yZFJhbmdlKG1fcFZULT5HZXRCZWdpbldvcmRQbGFjZSgpLG1fcFZULT5HZXRFbmRXb3JkUGxhY2UoKSk7DQotDQotCXJldHVybiBDUFZUX1dvcmRSYW5nZSgpOw0KLX0NCi0NCi1DUFZUX1dvcmRSYW5nZSBDRlhfRWRpdDo6R2V0VmlzaWJsZVdvcmRSYW5nZSgpIGNvbnN0DQotew0KLQlpZiAobV9iRW5hYmxlT3ZlcmZsb3cpIHJldHVybiBHZXRXaG9sZVdvcmRSYW5nZSgpOw0KLQ0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJQ1BERl9SZWN0IHJjUGxhdGUgPSBtX3BWVC0+R2V0UGxhdGVSZWN0KCk7DQotDQotCQlDUFZUX1dvcmRQbGFjZSBwbGFjZTEgPSBtX3BWVC0+U2VhcmNoV29yZFBsYWNlKEVkaXRUb1ZUKENQREZfUG9pbnQocmNQbGF0ZS5sZWZ0LHJjUGxhdGUudG9wKSkpOw0KLQkJQ1BWVF9Xb3JkUGxhY2UgcGxhY2UyID0gbV9wVlQtPlNlYXJjaFdvcmRQbGFjZShFZGl0VG9WVChDUERGX1BvaW50KHJjUGxhdGUucmlnaHQscmNQbGF0ZS5ib3R0b20pKSk7DQotDQotCQlyZXR1cm4gQ1BWVF9Xb3JkUmFuZ2UocGxhY2UxLHBsYWNlMik7DQotCX0NCi0NCi0JcmV0dXJuIENQVlRfV29yZFJhbmdlKCk7DQotfQ0KLQ0KLUNQVlRfV29yZFBsYWNlIENGWF9FZGl0OjpTZWFyY2hXb3JkUGxhY2UoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpIGNvbnN0DQotew0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJcmV0dXJuIG1fcFZULT5TZWFyY2hXb3JkUGxhY2UoRWRpdFRvVlQocG9pbnQpKTsNCi0JfQ0KLQ0KLQlyZXR1cm4gQ1BWVF9Xb3JkUGxhY2UoKTsNCi19DQotDQotdm9pZCBDRlhfRWRpdDo6UGFpbnQoKQ0KLXsNCi0JaWYgKG1fcFZULT5Jc1ZhbGlkKCkpDQotCXsNCi0JCVJlYXJyYW5nZUFsbCgpOw0KLQkJU2Nyb2xsVG9DYXJldCgpOw0KLQkJUmVmcmVzaChSUF9OT0FOQUxZU0UpOw0KLQkJU2V0Q2FyZXRPcmlnaW4oKTsNCi0JCVNldENhcmV0SW5mbygpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OlJlYXJyYW5nZUFsbCgpDQotew0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJbV9wVlQtPlVwZGF0ZVdvcmRQbGFjZShtX3dwQ2FyZXQpOw0KLQkJbV9wVlQtPlJlYXJyYW5nZUFsbCgpOw0KLQkJbV9wVlQtPlVwZGF0ZVdvcmRQbGFjZShtX3dwQ2FyZXQpOw0KLQkJU2V0U2Nyb2xsSW5mbygpOw0KLQkJU2V0Q29udGVudENoYW5nZWQoKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENGWF9FZGl0OjpSZWFycmFuZ2VQYXJ0KGNvbnN0IENQVlRfV29yZFJhbmdlICYgcmFuZ2UpDQotew0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJbV9wVlQtPlVwZGF0ZVdvcmRQbGFjZShtX3dwQ2FyZXQpOw0KLQkJbV9wVlQtPlJlYXJyYW5nZVBhcnQocmFuZ2UpOw0KLQkJbV9wVlQtPlVwZGF0ZVdvcmRQbGFjZShtX3dwQ2FyZXQpOw0KLQkJU2V0U2Nyb2xsSW5mbygpOw0KLQkJU2V0Q29udGVudENoYW5nZWQoKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENGWF9FZGl0OjpTZXRDb250ZW50Q2hhbmdlZCgpDQotew0KLQlpZiAobV9iTm90aWZ5ICYmIG1fcE5vdGlmeSkNCi0Jew0KLQkJQ1BERl9SZWN0IHJjQ29udGVudCA9IG1fcFZULT5HZXRDb250ZW50UmVjdCgpOw0KLQkJaWYgKHJjQ29udGVudC5XaWR0aCgpICE9IG1fcmNPbGRDb250ZW50LldpZHRoKCkgfHwNCi0JCQlyY0NvbnRlbnQuSGVpZ2h0KCkgIT0gbV9yY09sZENvbnRlbnQuSGVpZ2h0KCkpDQotCQl7DQotCQkJaWYgKCFtX2JOb3RpZnlGbGFnKQ0KLQkJCXsNCi0JCQkJbV9iTm90aWZ5RmxhZyA9IFRSVUU7DQotCQkJCW1fcE5vdGlmeS0+SU9uQ29udGVudENoYW5nZShyY0NvbnRlbnQpOw0KLQkJCQltX2JOb3RpZnlGbGFnID0gRkFMU0U7DQotCQkJfQ0KLQkJCW1fcmNPbGRDb250ZW50ID0gcmNDb250ZW50Ow0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OlNlbGVjdEFsbCgpDQotew0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJbV9TZWxTdGF0ZSA9IEdldFdob2xlV29yZFJhbmdlKCk7CQkNCi0JCVNldENhcmV0KG1fU2VsU3RhdGUuRW5kUG9zKTsJCQ0KLQkJDQotCQlTY3JvbGxUb0NhcmV0KCk7DQotCQlDUFZUX1dvcmRSYW5nZSB3clZpc2libGUgPSBHZXRWaXNpYmxlV29yZFJhbmdlKCk7DQotCQlSZWZyZXNoKFJQX09QVElPTkFMLCZ3clZpc2libGUpOw0KLQkJU2V0Q2FyZXRJbmZvKCk7DQotCX0NCi19DQotDQotdm9pZCBDRlhfRWRpdDo6U2VsZWN0Tm9uZSgpDQotew0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJaWYgKG1fU2VsU3RhdGUuSXNFeGlzdCgpKQ0KLQkJew0KLQkJCUNQVlRfV29yZFJhbmdlIHdyVGVtcCA9IG1fU2VsU3RhdGUuQ29udmVydFRvV29yZFJhbmdlKCk7DQotCQkJbV9TZWxTdGF0ZS5EZWZhdWx0KCk7DQotCQkJUmVmcmVzaChSUF9PUFRJT05BTCwmd3JUZW1wKTsNCi0JCX0NCi0JfQkNCi19DQotDQotRlhfQk9PTAlDRlhfRWRpdDo6SXNTZWxlY3RlZCgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9TZWxTdGF0ZS5Jc0V4aXN0KCk7DQotfQ0KLQ0KLUNQREZfUG9pbnQgQ0ZYX0VkaXQ6OlZUVG9FZGl0KGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3QNCi17DQotCUNQREZfUmVjdCByY0NvbnRlbnQgPSBtX3BWVC0+R2V0Q29udGVudFJlY3QoKTsNCi0JQ1BERl9SZWN0IHJjUGxhdGUgPSBtX3BWVC0+R2V0UGxhdGVSZWN0KCk7DQotDQotCUZYX0ZMT0FUIGZQYWRkaW5nID0gMC4wZjsNCi0NCi0Jc3dpdGNoIChtX25BbGlnbm1lbnQpDQotCXsNCi0JY2FzZSAwOg0KLQkJZlBhZGRpbmcgPSAwLjBmOw0KLQkJYnJlYWs7DQotCWNhc2UgMToNCi0JCWZQYWRkaW5nID0gKHJjUGxhdGUuSGVpZ2h0KCkgLSByY0NvbnRlbnQuSGVpZ2h0KCkpICogMC41ZjsNCi0JCWJyZWFrOw0KLQljYXNlIDI6DQotCQlmUGFkZGluZyA9IHJjUGxhdGUuSGVpZ2h0KCkgLSByY0NvbnRlbnQuSGVpZ2h0KCk7DQotCQlicmVhazsNCi0JfQ0KLQkNCi0JcmV0dXJuIENQREZfUG9pbnQocG9pbnQueCAtIChtX3B0U2Nyb2xsUG9zLnggLSByY1BsYXRlLmxlZnQpLA0KLQkJcG9pbnQueSAtIChtX3B0U2Nyb2xsUG9zLnkgKyBmUGFkZGluZyAtIHJjUGxhdGUudG9wKSk7DQotfQ0KLQ0KLUNQREZfUG9pbnQgQ0ZYX0VkaXQ6OkVkaXRUb1ZUKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3QNCi17DQotCUNQREZfUmVjdCByY0NvbnRlbnQgPSBtX3BWVC0+R2V0Q29udGVudFJlY3QoKTsNCi0JQ1BERl9SZWN0IHJjUGxhdGUgPSBtX3BWVC0+R2V0UGxhdGVSZWN0KCk7DQotDQotCUZYX0ZMT0FUIGZQYWRkaW5nID0gMC4wZjsNCi0NCi0Jc3dpdGNoIChtX25BbGlnbm1lbnQpDQotCXsNCi0JY2FzZSAwOg0KLQkJZlBhZGRpbmcgPSAwLjBmOw0KLQkJYnJlYWs7DQotCWNhc2UgMToNCi0JCWZQYWRkaW5nID0gKHJjUGxhdGUuSGVpZ2h0KCkgLSByY0NvbnRlbnQuSGVpZ2h0KCkpICogMC41ZjsNCi0JCWJyZWFrOw0KLQljYXNlIDI6DQotCQlmUGFkZGluZyA9IHJjUGxhdGUuSGVpZ2h0KCkgLSByY0NvbnRlbnQuSGVpZ2h0KCk7DQotCQlicmVhazsNCi0JfQ0KLQ0KLQlyZXR1cm4gQ1BERl9Qb2ludChwb2ludC54ICsgKG1fcHRTY3JvbGxQb3MueCAtIHJjUGxhdGUubGVmdCksDQotCQlwb2ludC55ICsgKG1fcHRTY3JvbGxQb3MueSArIGZQYWRkaW5nIC0gcmNQbGF0ZS50b3ApKTsNCi19DQotDQotQ1BERl9SZWN0IENGWF9FZGl0OjpWVFRvRWRpdChjb25zdCBDUERGX1JlY3QgJiByZWN0KSBjb25zdA0KLXsNCi0JQ1BERl9Qb2ludCBwdExlZnRCb3R0b20gPSBWVFRvRWRpdChDUERGX1BvaW50KHJlY3QubGVmdCxyZWN0LmJvdHRvbSkpOw0KLQlDUERGX1BvaW50IHB0UmlnaHRUb3AgPSBWVFRvRWRpdChDUERGX1BvaW50KHJlY3QucmlnaHQscmVjdC50b3ApKTsNCi0NCi0JcmV0dXJuIENQREZfUmVjdChwdExlZnRCb3R0b20ueCxwdExlZnRCb3R0b20ueSxwdFJpZ2h0VG9wLngscHRSaWdodFRvcC55KTsNCi19DQotDQotQ1BERl9SZWN0IENGWF9FZGl0OjpFZGl0VG9WVChjb25zdCBDUERGX1JlY3QgJiByZWN0KSBjb25zdA0KLXsNCi0JQ1BERl9Qb2ludCBwdExlZnRCb3R0b20gPSBFZGl0VG9WVChDUERGX1BvaW50KHJlY3QubGVmdCxyZWN0LmJvdHRvbSkpOw0KLQlDUERGX1BvaW50IHB0UmlnaHRUb3AgPSBFZGl0VG9WVChDUERGX1BvaW50KHJlY3QucmlnaHQscmVjdC50b3ApKTsNCi0NCi0JcmV0dXJuIENQREZfUmVjdChwdExlZnRCb3R0b20ueCxwdExlZnRCb3R0b20ueSxwdFJpZ2h0VG9wLngscHRSaWdodFRvcC55KTsNCi19DQotDQotdm9pZCBDRlhfRWRpdDo6U2V0U2Nyb2xsSW5mbygpDQotew0KLQlpZiAobV9iTm90aWZ5ICYmIG1fcE5vdGlmeSkNCi0Jew0KLQkJQ1BERl9SZWN0IHJjUGxhdGUgPSBtX3BWVC0+R2V0UGxhdGVSZWN0KCk7DQotCQlDUERGX1JlY3QgcmNDb250ZW50ID0gbV9wVlQtPkdldENvbnRlbnRSZWN0KCk7DQotDQotCQlpZiAoIW1fYk5vdGlmeUZsYWcpDQotCQl7DQotCQkJbV9iTm90aWZ5RmxhZyA9IFRSVUU7DQotCQkJbV9wTm90aWZ5LT5JT25TZXRTY3JvbGxJbmZvWChyY1BsYXRlLmxlZnQsIHJjUGxhdGUucmlnaHQsIA0KLQkJCQkJCQkJcmNDb250ZW50LmxlZnQsIHJjQ29udGVudC5yaWdodCwgcmNQbGF0ZS5XaWR0aCgpIC8gMywgcmNQbGF0ZS5XaWR0aCgpKTsNCi0JCQkNCi0JCQltX3BOb3RpZnktPklPblNldFNjcm9sbEluZm9ZKHJjUGxhdGUuYm90dG9tLCByY1BsYXRlLnRvcCwgDQotCQkJCQlyY0NvbnRlbnQuYm90dG9tLCByY0NvbnRlbnQudG9wLCByY1BsYXRlLkhlaWdodCgpIC8gMywgcmNQbGF0ZS5IZWlnaHQoKSk7DQotCQkJbV9iTm90aWZ5RmxhZyA9IEZBTFNFOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OlNldFNjcm9sbFBvc1goRlhfRkxPQVQgZngpDQotew0KLQlpZiAoIW1fYkVuYWJsZVNjcm9sbCkgcmV0dXJuOw0KLQ0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJaWYgKCFGWF9FRElUX0lzRmxvYXRFcXVhbChtX3B0U2Nyb2xsUG9zLngsZngpKQ0KLQkJew0KLQkJCW1fcHRTY3JvbGxQb3MueCA9IGZ4OwkJCQ0KLQkJCVJlZnJlc2goUlBfTk9BTkFMWVNFKTsNCi0NCi0JCQlpZiAobV9iTm90aWZ5ICYmIG1fcE5vdGlmeSkNCi0JCQl7DQotCQkJCWlmICghbV9iTm90aWZ5RmxhZykNCi0JCQkJew0KLQkJCQkJbV9iTm90aWZ5RmxhZyA9IFRSVUU7DQotCQkJCQltX3BOb3RpZnktPklPblNldFNjcm9sbFBvc1goZngpOw0KLQkJCQkJbV9iTm90aWZ5RmxhZyA9IEZBTFNFOw0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OlNldFNjcm9sbFBvc1koRlhfRkxPQVQgZnkpDQotew0KLQlpZiAoIW1fYkVuYWJsZVNjcm9sbCkgcmV0dXJuOw0KLQ0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJaWYgKCFGWF9FRElUX0lzRmxvYXRFcXVhbChtX3B0U2Nyb2xsUG9zLnksZnkpKQ0KLQkJewkJCQkNCi0JCQltX3B0U2Nyb2xsUG9zLnkgPSBmeTsNCi0JCQlSZWZyZXNoKFJQX05PQU5BTFlTRSk7DQotDQotCQkJaWYgKG1fYk5vdGlmeSAmJiBtX3BOb3RpZnkpDQotCQkJew0KLQkJCQlpZiAoIW1fYk5vdGlmeUZsYWcpDQotCQkJCXsNCi0JCQkJCW1fYk5vdGlmeUZsYWcgPSBUUlVFOw0KLQkJCQkJbV9wTm90aWZ5LT5JT25TZXRTY3JvbGxQb3NZKGZ5KTsNCi0JCQkJCW1fYk5vdGlmeUZsYWcgPSBGQUxTRTsNCi0JCQkJfQ0KLQkJCX0NCi0JCX0NCi0JfQ0KLX0NCi0NCi12b2lkIENGWF9FZGl0OjpTZXRTY3JvbGxQb3MoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KQ0KLXsNCi0JU2V0U2Nyb2xsUG9zWChwb2ludC54KTsNCi0JU2V0U2Nyb2xsUG9zWShwb2ludC55KTsNCi0JU2V0U2Nyb2xsTGltaXQoKTsNCi0JU2V0Q2FyZXRJbmZvKCk7DQotfQ0KLQ0KLUNQREZfUG9pbnQgQ0ZYX0VkaXQ6OkdldFNjcm9sbFBvcygpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9wdFNjcm9sbFBvczsNCi19DQotDQotdm9pZCBDRlhfRWRpdDo6U2V0U2Nyb2xsTGltaXQoKQ0KLXsNCi0JaWYgKG1fcFZULT5Jc1ZhbGlkKCkpDQotCXsNCi0JCUNQREZfUmVjdCByY0NvbnRlbnQgPSBtX3BWVC0+R2V0Q29udGVudFJlY3QoKTsNCi0JCUNQREZfUmVjdCByY1BsYXRlID0gbV9wVlQtPkdldFBsYXRlUmVjdCgpOw0KLQ0KLQkJaWYgKHJjUGxhdGUuV2lkdGgoKSA+IHJjQ29udGVudC5XaWR0aCgpKQ0KLQkJew0KLQkJCVNldFNjcm9sbFBvc1gocmNQbGF0ZS5sZWZ0KTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlpZiAoRlhfRURJVF9Jc0Zsb2F0U21hbGxlcihtX3B0U2Nyb2xsUG9zLngsIHJjQ29udGVudC5sZWZ0KSkNCi0JCQl7DQotCQkJCVNldFNjcm9sbFBvc1gocmNDb250ZW50LmxlZnQpOwkJCQ0KLQkJCX0NCi0JCQllbHNlIGlmIChGWF9FRElUX0lzRmxvYXRCaWdnZXIobV9wdFNjcm9sbFBvcy54LCByY0NvbnRlbnQucmlnaHQgLSByY1BsYXRlLldpZHRoKCkpKQ0KLQkJCXsNCi0JCQkJU2V0U2Nyb2xsUG9zWChyY0NvbnRlbnQucmlnaHQgLSByY1BsYXRlLldpZHRoKCkpOw0KLQkJCX0NCi0JCX0NCi0NCi0JCWlmIChyY1BsYXRlLkhlaWdodCgpID4gcmNDb250ZW50LkhlaWdodCgpKQ0KLQkJew0KLQkJCVNldFNjcm9sbFBvc1kocmNQbGF0ZS50b3ApOw0KLQkJfQ0KLQkJZWxzZQkJDQotCQl7DQotCQkJaWYgKEZYX0VESVRfSXNGbG9hdFNtYWxsZXIobV9wdFNjcm9sbFBvcy55LCByY0NvbnRlbnQuYm90dG9tICsgcmNQbGF0ZS5IZWlnaHQoKSkpDQotCQkJew0KLQkJCQlTZXRTY3JvbGxQb3NZKHJjQ29udGVudC5ib3R0b20gKyByY1BsYXRlLkhlaWdodCgpKTsNCi0JCQl9DQotCQkJZWxzZSBpZiAoRlhfRURJVF9Jc0Zsb2F0QmlnZ2VyKG1fcHRTY3JvbGxQb3MueSwgcmNDb250ZW50LnRvcCkpDQotCQkJew0KLQkJCQlTZXRTY3JvbGxQb3NZKHJjQ29udGVudC50b3ApOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLX0NCi0NCi12b2lkIENGWF9FZGl0OjpTY3JvbGxUb0NhcmV0KCkNCi17DQotCVNldFNjcm9sbExpbWl0KCk7DQotDQotCWlmIChtX3BWVC0+SXNWYWxpZCgpKQ0KLQl7DQotCQlDUERGX1BvaW50IHB0SGVhZCgwLDApOw0KLQkJQ1BERl9Qb2ludCBwdEZvb3QoMCwwKTsNCi0NCi0JCWlmIChJUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvciAqIHBJdGVyYXRvciA9IG1fcFZULT5HZXRJdGVyYXRvcigpKQ0KLQkJew0KLQkJCXBJdGVyYXRvci0+U2V0QXQobV93cENhcmV0KTsNCi0NCi0JCQlDUFZUX1dvcmQgd29yZDsNCi0JCQlDUFZUX0xpbmUgbGluZTsNCi0JCQlpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmQpKQ0KLQkJCXsNCi0JCQkJcHRIZWFkLnggPSB3b3JkLnB0V29yZC54ICsgd29yZC5mV2lkdGg7DQotCQkJCXB0SGVhZC55ID0gd29yZC5wdFdvcmQueSArIHdvcmQuZkFzY2VudDsNCi0JCQkJcHRGb290LnggPSB3b3JkLnB0V29yZC54ICsgd29yZC5mV2lkdGg7DQotCQkJCXB0Rm9vdC55ID0gd29yZC5wdFdvcmQueSArIHdvcmQuZkRlc2NlbnQ7DQotCQkJfQ0KLQkJCWVsc2UgaWYgKHBJdGVyYXRvci0+R2V0TGluZShsaW5lKSkNCi0JCQl7CQkJCQ0KLQkJCQlwdEhlYWQueCA9IGxpbmUucHRMaW5lLng7DQotCQkJCXB0SGVhZC55ID0gbGluZS5wdExpbmUueSArIGxpbmUuZkxpbmVBc2NlbnQ7DQotCQkJCXB0Rm9vdC54ID0gbGluZS5wdExpbmUueDsNCi0JCQkJcHRGb290LnkgPSBsaW5lLnB0TGluZS55ICsgbGluZS5mTGluZURlc2NlbnQ7DQotCQkJfQ0KLQkJfQ0KLQ0KLQkJQ1BERl9Qb2ludCBwdEhlYWRFZGl0ID0gVlRUb0VkaXQocHRIZWFkKTsNCi0JCUNQREZfUG9pbnQgcHRGb290RWRpdCA9IFZUVG9FZGl0KHB0Rm9vdCk7DQotDQotCQlDUERGX1JlY3QgcmNQbGF0ZSA9IG1fcFZULT5HZXRQbGF0ZVJlY3QoKTsNCi0NCi0JCWlmICghRlhfRURJVF9Jc0Zsb2F0RXF1YWwocmNQbGF0ZS5sZWZ0LHJjUGxhdGUucmlnaHQpKQ0KLQkJew0KLQkJCWlmIChGWF9FRElUX0lzRmxvYXRTbWFsbGVyKHB0SGVhZEVkaXQueCwgcmNQbGF0ZS5sZWZ0KSB8fA0KLQkJCQlGWF9FRElUX0lzRmxvYXRFcXVhbChwdEhlYWRFZGl0LngsIHJjUGxhdGUubGVmdCkpDQotCQkJew0KLQkJCQlTZXRTY3JvbGxQb3NYKHB0SGVhZC54KTsNCi0JCQl9DQotCQkJZWxzZSBpZiAoRlhfRURJVF9Jc0Zsb2F0QmlnZ2VyKHB0SGVhZEVkaXQueCwgcmNQbGF0ZS5yaWdodCkpDQotCQkJew0KLQkJCQlTZXRTY3JvbGxQb3NYKHB0SGVhZC54IC0gcmNQbGF0ZS5XaWR0aCgpKTsNCi0JCQl9DQotCQl9DQotDQotCQlpZiAoIUZYX0VESVRfSXNGbG9hdEVxdWFsKHJjUGxhdGUudG9wLHJjUGxhdGUuYm90dG9tKSkNCi0JCXsNCi0JCQlpZiAoRlhfRURJVF9Jc0Zsb2F0U21hbGxlcihwdEZvb3RFZGl0LnksIHJjUGxhdGUuYm90dG9tKSB8fA0KLQkJCQlGWF9FRElUX0lzRmxvYXRFcXVhbChwdEZvb3RFZGl0LnksIHJjUGxhdGUuYm90dG9tKSkNCi0JCQl7DQotCQkJCWlmIChGWF9FRElUX0lzRmxvYXRTbWFsbGVyKHB0SGVhZEVkaXQueSwgcmNQbGF0ZS50b3ApKQ0KLQkJCQl7DQotCQkJCQlTZXRTY3JvbGxQb3NZKHB0Rm9vdC55ICsgcmNQbGF0ZS5IZWlnaHQoKSk7DQotCQkJCX0NCi0JCQl9DQotCQkJZWxzZSBpZiAoRlhfRURJVF9Jc0Zsb2F0QmlnZ2VyKHB0SGVhZEVkaXQueSwgcmNQbGF0ZS50b3ApKQ0KLQkJCXsNCi0JCQkJaWYgKEZYX0VESVRfSXNGbG9hdEJpZ2dlcihwdEZvb3RFZGl0LnksIHJjUGxhdGUuYm90dG9tKSkNCi0JCQkJew0KLQkJCQkJU2V0U2Nyb2xsUG9zWShwdEhlYWQueSk7DQotCQkJCX0NCi0JCQl9DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBDRlhfRWRpdDo6UmVmcmVzaChSRUZSRVNIX1BMQU5fRSBlUGxhbixjb25zdCBDUFZUX1dvcmRSYW5nZSAqIHBSYW5nZTEsY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgKiBwUmFuZ2UyKQ0KLXsNCi0JaWYgKG1fYkVuYWJsZVJlZnJlc2ggJiYgbV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJbV9SZWZyZXNoLkJlZ2luUmVmcmVzaCgpOw0KLQkJUmVmcmVzaFB1c2hMaW5lUmVjdHMoR2V0VmlzaWJsZVdvcmRSYW5nZSgpKTsNCi0NCi0vLyAJCWlmICghRlhfRURJVF9Jc0Zsb2F0RXF1YWwobV9wdFJlZnJlc2hTY3JvbGxQb3MueCxtX3B0U2Nyb2xsUG9zLngpIHx8IA0KLS8vIAkJCSFGWF9FRElUX0lzRmxvYXRFcXVhbChtX3B0UmVmcmVzaFNjcm9sbFBvcy55LG1fcHRTY3JvbGxQb3MueSkpDQotLy8gCQl7DQotCQkJbV9SZWZyZXNoLk5vQW5hbHlzZSgpOw0KLQkJCW1fcHRSZWZyZXNoU2Nyb2xsUG9zID0gbV9wdFNjcm9sbFBvczsNCi0vLyAJCX0NCi0vLyAJCWVsc2UNCi0vLyAJCXsNCi0vLyAJCQlzd2l0Y2ggKGVQbGFuKQ0KLS8vIAkJCXsNCi0vLyAJCQljYXNlIFJQX0FOQUxZU0U6DQotLy8gCQkJCW1fUmVmcmVzaC5BbmFseXNlKG1fcFZULT5HZXRBbGlnbm1lbnQoKSk7DQotLy8gDQotLy8gCQkJCWlmIChwUmFuZ2UxKSBSZWZyZXNoUHVzaFJhbmRvbVJlY3RzKCpwUmFuZ2UxKTsNCi0vLyAJCQkJaWYgKHBSYW5nZTIpIFJlZnJlc2hQdXNoUmFuZG9tUmVjdHMoKnBSYW5nZTIpOw0KLS8vIAkJCQlicmVhazsNCi0vLyAJCQljYXNlIFJQX05PQU5BTFlTRToNCi0vLyAJCQkJbV9SZWZyZXNoLk5vQW5hbHlzZSgpOw0KLS8vIAkJCQlicmVhazsNCi0vLyAJCQljYXNlIFJQX09QVElPTkFMOg0KLS8vIAkJCQlpZiAocFJhbmdlMSkgUmVmcmVzaFB1c2hSYW5kb21SZWN0cygqcFJhbmdlMSk7DQotLy8gCQkJCWlmIChwUmFuZ2UyKSBSZWZyZXNoUHVzaFJhbmRvbVJlY3RzKCpwUmFuZ2UyKTsNCi0vLyAJCQkJYnJlYWs7CQ0KLS8vIAkJCX0NCi0vLyAJCX0JCQ0KLQ0KLQkJaWYgKG1fYk5vdGlmeSAmJiBtX3BOb3RpZnkpDQotCQl7DQotCQkJaWYgKCFtX2JOb3RpZnlGbGFnKQ0KLQkJCXsNCi0JCQkJbV9iTm90aWZ5RmxhZyA9IFRSVUU7DQotCQkJCWlmIChjb25zdCBDRlhfRWRpdF9SZWN0QXJyYXkgKiBwUmVjdHMgPSBtX1JlZnJlc2guR2V0UmVmcmVzaFJlY3RzKCkpDQotCQkJCXsNCi0JCQkJCWZvciAoRlhfSU5UMzIgaSA9IDAsIHN6ID0gcFJlY3RzLT5HZXRTaXplKCk7IGkgPCBzejsgaSsrKQ0KLQkJCQkJCW1fcE5vdGlmeS0+SU9uSW52YWxpZGF0ZVJlY3QocFJlY3RzLT5HZXRBdChpKSk7DQotCQkJCX0NCi0JCQkJbV9iTm90aWZ5RmxhZyA9IEZBTFNFOw0KLQkJCX0NCi0JCX0NCi0NCi0JCW1fUmVmcmVzaC5FbmRSZWZyZXNoKCk7DQotCX0NCi19DQotDQotdm9pZCBDRlhfRWRpdDo6UmVmcmVzaFB1c2hMaW5lUmVjdHMoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiB3cikNCi17DQotCWlmIChtX3BWVC0+SXNWYWxpZCgpKQ0KLQl7DQotCQlpZiAoSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IgKiBwSXRlcmF0b3IgPSBtX3BWVC0+R2V0SXRlcmF0b3IoKSkNCi0JCXsNCi0JCQlDUFZUX1dvcmRQbGFjZSB3cEJlZ2luID0gd3IuQmVnaW5Qb3M7DQotCQkJbV9wVlQtPlVwZGF0ZVdvcmRQbGFjZSh3cEJlZ2luKTsNCi0JCQlDUFZUX1dvcmRQbGFjZSB3cEVuZCA9IHdyLkVuZFBvczsNCi0JCQltX3BWVC0+VXBkYXRlV29yZFBsYWNlKHdwRW5kKTsNCi0JCQlwSXRlcmF0b3ItPlNldEF0KHdwQmVnaW4pOw0KLQ0KLQkJCUNQVlRfTGluZSBsaW5laW5mbzsJDQotCQkJZG8NCi0JCQl7DQotCQkJCWlmICghcEl0ZXJhdG9yLT5HZXRMaW5lKGxpbmVpbmZvKSlicmVhazsNCi0JCQkJaWYgKGxpbmVpbmZvLmxpbmVwbGFjZS5MaW5lQ21wKHdwRW5kKSA+IDApYnJlYWs7DQotDQotCQkJCUNQREZfUmVjdCByY0xpbmUobGluZWluZm8ucHRMaW5lLngsDQotCQkJCQkJCQkJbGluZWluZm8ucHRMaW5lLnkgKyBsaW5laW5mby5mTGluZURlc2NlbnQsDQotCQkJCQkJCQkJbGluZWluZm8ucHRMaW5lLnggKyBsaW5laW5mby5mTGluZVdpZHRoLA0KLQkJCQkJCQkJCWxpbmVpbmZvLnB0TGluZS55ICsgbGluZWluZm8uZkxpbmVBc2NlbnQpOw0KLQ0KLQkJCQltX1JlZnJlc2guUHVzaChDUFZUX1dvcmRSYW5nZShsaW5laW5mby5saW5lcGxhY2UsbGluZWluZm8ubGluZUVuZCksVlRUb0VkaXQocmNMaW5lKSk7DQotDQotCQkJfXdoaWxlIChwSXRlcmF0b3ItPk5leHRMaW5lKCkpOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OlJlZnJlc2hQdXNoUmFuZG9tUmVjdHMoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiB3cikNCi17DQotCWlmIChtX3BWVC0+SXNWYWxpZCgpKQ0KLQl7DQotCQlpZiAoSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IgKiBwSXRlcmF0b3IgPSBtX3BWVC0+R2V0SXRlcmF0b3IoKSkNCi0JCXsNCi0JCQlDUFZUX1dvcmRSYW5nZSB3clRlbXAgPSB3cjsNCi0NCi0JCQltX3BWVC0+VXBkYXRlV29yZFBsYWNlKHdyVGVtcC5CZWdpblBvcyk7DQotCQkJbV9wVlQtPlVwZGF0ZVdvcmRQbGFjZSh3clRlbXAuRW5kUG9zKTsNCi0JCQlwSXRlcmF0b3ItPlNldEF0KHdyVGVtcC5CZWdpblBvcyk7DQotDQotCQkJQ1BWVF9Xb3JkIHdvcmRpbmZvOwkNCi0JCQlDUFZUX0xpbmUgbGluZWluZm87CQ0KLQkJCUNQVlRfV29yZFBsYWNlIHBsYWNlOw0KLQ0KLQkJCXdoaWxlIChwSXRlcmF0b3ItPk5leHRXb3JkKCkpDQotCQkJew0KLQkJCQlwbGFjZSA9IHBJdGVyYXRvci0+R2V0QXQoKTsNCi0JCQkJaWYgKHBsYWNlLldvcmRDbXAod3JUZW1wLkVuZFBvcykgPiAwKSBicmVhazsNCi0JCQkJCQkNCi0JCQkJcEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmRpbmZvKTsNCi0JCQkJcEl0ZXJhdG9yLT5HZXRMaW5lKGxpbmVpbmZvKTsNCi0NCi0JCQkJaWYgKHBsYWNlLkxpbmVDbXAod3JUZW1wLkJlZ2luUG9zKSA9PSAwIHx8IHBsYWNlLkxpbmVDbXAod3JUZW1wLkVuZFBvcykgPT0gMCkNCi0JCQkJew0KLQkJCQkJQ1BERl9SZWN0IHJjV29yZCh3b3JkaW5mby5wdFdvcmQueCwNCi0JCQkJCQkJCQkJbGluZWluZm8ucHRMaW5lLnkgKyBsaW5laW5mby5mTGluZURlc2NlbnQsDQotCQkJCQkJCQkJCXdvcmRpbmZvLnB0V29yZC54ICsgd29yZGluZm8uZldpZHRoLA0KLQkJCQkJCQkJCQlsaW5laW5mby5wdExpbmUueSArIGxpbmVpbmZvLmZMaW5lQXNjZW50KTsNCi0NCi0JCQkJCW1fUmVmcmVzaC5BZGRSZWZyZXNoKFZUVG9FZGl0KHJjV29yZCkpOw0KLQkJCQl9DQotCQkJCWVsc2UNCi0JCQkJewkJDQotCQkJCQlDUERGX1JlY3QgcmNMaW5lKGxpbmVpbmZvLnB0TGluZS54LA0KLQkJCQkJCQkJCQlsaW5laW5mby5wdExpbmUueSArIGxpbmVpbmZvLmZMaW5lRGVzY2VudCwNCi0JCQkJCQkJCQkJbGluZWluZm8ucHRMaW5lLnggKyBsaW5laW5mby5mTGluZVdpZHRoLA0KLQkJCQkJCQkJCQlsaW5laW5mby5wdExpbmUueSArIGxpbmVpbmZvLmZMaW5lQXNjZW50KTsNCi0NCi0JCQkJCW1fUmVmcmVzaC5BZGRSZWZyZXNoKFZUVG9FZGl0KHJjTGluZSkpOw0KLQ0KLQkJCQkJcEl0ZXJhdG9yLT5OZXh0TGluZSgpOw0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OlJlZnJlc2hXb3JkUmFuZ2UoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UmIHdyKQ0KLXsNCi0JaWYgKElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yICogcEl0ZXJhdG9yID0gbV9wVlQtPkdldEl0ZXJhdG9yKCkpDQotCXsNCi0JCUNQVlRfV29yZFJhbmdlIHdyVGVtcCA9IHdyOw0KLQ0KLQkJbV9wVlQtPlVwZGF0ZVdvcmRQbGFjZSh3clRlbXAuQmVnaW5Qb3MpOw0KLQkJbV9wVlQtPlVwZGF0ZVdvcmRQbGFjZSh3clRlbXAuRW5kUG9zKTsNCi0JCXBJdGVyYXRvci0+U2V0QXQod3JUZW1wLkJlZ2luUG9zKTsNCi0NCi0JCUNQVlRfV29yZCB3b3JkaW5mbzsJDQotCQlDUFZUX0xpbmUgbGluZWluZm87CQ0KLQkJQ1BWVF9Xb3JkUGxhY2UgcGxhY2U7DQotDQotCQl3aGlsZSAocEl0ZXJhdG9yLT5OZXh0V29yZCgpKQ0KLQkJew0KLQkJCXBsYWNlID0gcEl0ZXJhdG9yLT5HZXRBdCgpOw0KLQkJCWlmIChwbGFjZS5Xb3JkQ21wKHdyVGVtcC5FbmRQb3MpID4gMCkgYnJlYWs7DQotCQkJCQkNCi0JCQlwSXRlcmF0b3ItPkdldFdvcmQod29yZGluZm8pOw0KLQkJCXBJdGVyYXRvci0+R2V0TGluZShsaW5laW5mbyk7DQotDQotCQkJaWYgKHBsYWNlLkxpbmVDbXAod3JUZW1wLkJlZ2luUG9zKSA9PSAwIHx8IHBsYWNlLkxpbmVDbXAod3JUZW1wLkVuZFBvcykgPT0gMCkNCi0JCQl7DQotCQkJCUNQREZfUmVjdCByY1dvcmQod29yZGluZm8ucHRXb3JkLngsDQotCQkJCQkJCQkJbGluZWluZm8ucHRMaW5lLnkgKyBsaW5laW5mby5mTGluZURlc2NlbnQsDQotCQkJCQkJCQkJd29yZGluZm8ucHRXb3JkLnggKyB3b3JkaW5mby5mV2lkdGgsDQotCQkJCQkJCQkJbGluZWluZm8ucHRMaW5lLnkgKyBsaW5laW5mby5mTGluZUFzY2VudCk7DQotDQotCQkJCWlmIChtX2JOb3RpZnkgJiYgbV9wTm90aWZ5KQ0KLQkJCQl7DQotCQkJCQlpZiAoIW1fYk5vdGlmeUZsYWcpDQotCQkJCQl7DQotCQkJCQkJbV9iTm90aWZ5RmxhZyA9IFRSVUU7DQotCQkJCQkJQ1BERl9SZWN0IHJjUmVmcmVzaCA9IFZUVG9FZGl0KHJjV29yZCk7DQotCQkJCQkJbV9wTm90aWZ5LT5JT25JbnZhbGlkYXRlUmVjdCgmcmNSZWZyZXNoKTsNCi0JCQkJCQltX2JOb3RpZnlGbGFnID0gRkFMU0U7DQotCQkJCQl9DQotCQkJCX0NCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsJCQ0KLQkJCQlDUERGX1JlY3QgcmNMaW5lKGxpbmVpbmZvLnB0TGluZS54LA0KLQkJCQkJCQkJCWxpbmVpbmZvLnB0TGluZS55ICsgbGluZWluZm8uZkxpbmVEZXNjZW50LA0KLQkJCQkJCQkJCWxpbmVpbmZvLnB0TGluZS54ICsgbGluZWluZm8uZkxpbmVXaWR0aCwNCi0JCQkJCQkJCQlsaW5laW5mby5wdExpbmUueSArIGxpbmVpbmZvLmZMaW5lQXNjZW50KTsNCi0NCi0JCQkJaWYgKG1fYk5vdGlmeSAmJiBtX3BOb3RpZnkpDQotCQkJCXsNCi0JCQkJCWlmICghbV9iTm90aWZ5RmxhZykNCi0JCQkJCXsNCi0JCQkJCQltX2JOb3RpZnlGbGFnID0gVFJVRTsNCi0JCQkJCQlDUERGX1JlY3QgcmNSZWZyZXNoID0gVlRUb0VkaXQocmNMaW5lKTsNCi0JCQkJCQltX3BOb3RpZnktPklPbkludmFsaWRhdGVSZWN0KCZyY1JlZnJlc2gpOw0KLQkJCQkJCW1fYk5vdGlmeUZsYWcgPSBGQUxTRTsNCi0JCQkJCX0NCi0JCQkJfQ0KLQ0KLQkJCQlwSXRlcmF0b3ItPk5leHRMaW5lKCk7DQotCQkJfQ0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OlNldENhcmV0KGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpDQotew0KLQltX3dwT2xkQ2FyZXQgPSBtX3dwQ2FyZXQ7IA0KLQltX3dwQ2FyZXQgPSBwbGFjZTsJDQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OlNldENhcmV0SW5mbygpDQotew0KLQlpZiAobV9iTm90aWZ5ICYmIG1fcE5vdGlmeSkNCi0Jew0KLQkJaWYgKCFtX2JOb3RpZnlGbGFnKQ0KLQkJew0KLQkJCUNQREZfUG9pbnQgcHRIZWFkKDAuMGYsMC4wZikscHRGb290KDAuMGYsMC4wZik7DQotDQotCQkJaWYgKElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yICogcEl0ZXJhdG9yID0gbV9wVlQtPkdldEl0ZXJhdG9yKCkpDQotCQkJew0KLQkJCQlwSXRlcmF0b3ItPlNldEF0KG1fd3BDYXJldCk7DQotCQkJCUNQVlRfV29yZCB3b3JkOw0KLQkJCQlDUFZUX0xpbmUgbGluZTsNCi0JCQkJaWYgKHBJdGVyYXRvci0+R2V0V29yZCh3b3JkKSkNCi0JCQkJew0KLQkJCQkJcHRIZWFkLnggPSB3b3JkLnB0V29yZC54ICsgd29yZC5mV2lkdGg7DQotCQkJCQlwdEhlYWQueSA9IHdvcmQucHRXb3JkLnkgKyB3b3JkLmZBc2NlbnQ7DQotCQkJCQlwdEZvb3QueCA9IHdvcmQucHRXb3JkLnggKyB3b3JkLmZXaWR0aDsNCi0JCQkJCXB0Rm9vdC55ID0gd29yZC5wdFdvcmQueSArIHdvcmQuZkRlc2NlbnQ7DQotCQkJCX0NCi0JCQkJZWxzZSBpZiAocEl0ZXJhdG9yLT5HZXRMaW5lKGxpbmUpKQ0KLQkJCQl7CQkJCQ0KLQkJCQkJcHRIZWFkLnggPSBsaW5lLnB0TGluZS54Ow0KLQkJCQkJcHRIZWFkLnkgPSBsaW5lLnB0TGluZS55ICsgbGluZS5mTGluZUFzY2VudDsNCi0JCQkJCXB0Rm9vdC54ID0gbGluZS5wdExpbmUueDsNCi0JCQkJCXB0Rm9vdC55ID0gbGluZS5wdExpbmUueSArIGxpbmUuZkxpbmVEZXNjZW50Ow0KLQkJCQl9DQotCQkJfQkJDQotDQotCQkJbV9iTm90aWZ5RmxhZyA9IFRSVUU7DQotCQkJbV9wTm90aWZ5LT5JT25TZXRDYXJldCghbV9TZWxTdGF0ZS5Jc0V4aXN0KCksVlRUb0VkaXQocHRIZWFkKSxWVFRvRWRpdChwdEZvb3QpLCBtX3dwQ2FyZXQpOw0KLQkJCW1fYk5vdGlmeUZsYWcgPSBGQUxTRTsNCi0JCX0NCi0JfQ0KLQ0KLQlTZXRDYXJldENoYW5nZSgpOw0KLX0NCi0NCi12b2lkIENGWF9FZGl0OjpTZXRDYXJldENoYW5nZSgpDQotew0KLQlpZiAodGhpcy0+bV93cENhcmV0ID09IHRoaXMtPm1fd3BPbGRDYXJldCkgcmV0dXJuOw0KLQ0KLQlpZiAobV9iTm90aWZ5ICYmIG1fcFZULT5Jc1JpY2hUZXh0KCkgJiYgbV9wTm90aWZ5KQ0KLQl7DQotCQlDUFZUX1NlY1Byb3BzIFNlY1Byb3BzOw0KLQkJQ1BWVF9Xb3JkUHJvcHMgV29yZFByb3BzOw0KLQ0KLQkJaWYgKElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yICogcEl0ZXJhdG9yID0gbV9wVlQtPkdldEl0ZXJhdG9yKCkpDQotCQl7DQotCQkJcEl0ZXJhdG9yLT5TZXRBdChtX3dwQ2FyZXQpOw0KLQkJCUNQVlRfV29yZCB3b3JkOw0KLQkJCUNQVlRfU2VjdGlvbiBzZWN0aW9uOw0KLQ0KLQkJCWlmIChwSXRlcmF0b3ItPkdldFNlY3Rpb24oc2VjdGlvbikpDQotCQkJew0KLQkJCQlTZWNQcm9wcyA9IHNlY3Rpb24uU2VjUHJvcHM7DQotCQkJCVdvcmRQcm9wcyA9IHNlY3Rpb24uV29yZFByb3BzOw0KLQkJCX0NCi0JCQkNCi0JCQlpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmQpKQ0KLQkJCXsJCQkJDQotCQkJCVdvcmRQcm9wcyA9IHdvcmQuV29yZFByb3BzOwkJCQkNCi0JCQl9DQotCQl9CQkNCi0JCQ0KLQkJaWYgKCFtX2JOb3RpZnlGbGFnKQ0KLQkJew0KLQkJCW1fYk5vdGlmeUZsYWcgPSBUUlVFOw0KLQkJCW1fcE5vdGlmeS0+SU9uQ2FyZXRDaGFuZ2UoU2VjUHJvcHMsV29yZFByb3BzKTsNCi0JCQltX2JOb3RpZnlGbGFnID0gRkFMU0U7DQotCQl9DQotCX0JDQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OlNldENhcmV0KEZYX0lOVDMyIG5Qb3MpDQotew0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJU2VsZWN0Tm9uZSgpOwkJDQotCQlTZXRDYXJldChtX3BWVC0+V29yZEluZGV4VG9Xb3JkUGxhY2UoblBvcykpOw0KLQkJbV9TZWxTdGF0ZS5TZXQobV93cENhcmV0LG1fd3BDYXJldCk7DQotDQotCQlTY3JvbGxUb0NhcmV0KCk7DQotCQlTZXRDYXJldE9yaWdpbigpOw0KLQkJU2V0Q2FyZXRJbmZvKCk7DQotCX0NCi19DQotDQotdm9pZCBDRlhfRWRpdDo6T25Nb3VzZURvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpDQotew0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJU2VsZWN0Tm9uZSgpOwkJDQotCQlTZXRDYXJldChtX3BWVC0+U2VhcmNoV29yZFBsYWNlKEVkaXRUb1ZUKHBvaW50KSkpOw0KLQkJbV9TZWxTdGF0ZS5TZXQobV93cENhcmV0LG1fd3BDYXJldCk7DQotDQotCQlTY3JvbGxUb0NhcmV0KCk7DQotCQlTZXRDYXJldE9yaWdpbigpOw0KLQkJU2V0Q2FyZXRJbmZvKCk7DQotCX0NCi19DQotDQotdm9pZCBDRlhfRWRpdDo6T25Nb3VzZU1vdmUoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpDQotew0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJU2V0Q2FyZXQobV9wVlQtPlNlYXJjaFdvcmRQbGFjZShFZGl0VG9WVChwb2ludCkpKTsNCi0NCi0JCWlmIChtX3dwQ2FyZXQgIT0gbV93cE9sZENhcmV0KQ0KLQkJew0KLQkJCW1fU2VsU3RhdGUuU2V0RW5kUG9zKG1fd3BDYXJldCk7CQkNCi0NCi0JCQlTY3JvbGxUb0NhcmV0KCk7DQotCQkJQ1BWVF9Xb3JkUmFuZ2Ugd3IobV93cE9sZENhcmV0LG1fd3BDYXJldCk7DQotCQkJUmVmcmVzaChSUF9PUFRJT05BTCwmd3IpOw0KLQkJCVNldENhcmV0T3JpZ2luKCk7DQotCQkJU2V0Q2FyZXRJbmZvKCk7DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBDRlhfRWRpdDo6T25WS19VUChGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKQ0KLXsJDQotCWlmIChtX3BWVC0+SXNWYWxpZCgpKQ0KLQl7DQotCQlTZXRDYXJldChtX3BWVC0+R2V0VXBXb3JkUGxhY2UobV93cENhcmV0LG1fcHRDYXJldCkpOw0KLQ0KLQkJaWYgKGJTaGlmdCkNCi0JCXsNCi0JCQlpZiAobV9TZWxTdGF0ZS5Jc0V4aXN0KCkpDQotCQkJCW1fU2VsU3RhdGUuU2V0RW5kUG9zKG1fd3BDYXJldCk7DQotCQkJZWxzZQ0KLQkJCQltX1NlbFN0YXRlLlNldChtX3dwT2xkQ2FyZXQsbV93cENhcmV0KTsNCi0NCi0JCQlpZiAobV93cE9sZENhcmV0ICE9IG1fd3BDYXJldCkNCi0JCQl7DQotCQkJCVNjcm9sbFRvQ2FyZXQoKTsNCi0JCQkJQ1BWVF9Xb3JkUmFuZ2Ugd3IobV93cE9sZENhcmV0LCBtX3dwQ2FyZXQpOw0KLQkJCQlSZWZyZXNoKFJQX09QVElPTkFMLCAmd3IpOw0KLQkJCQlTZXRDYXJldEluZm8oKTsNCi0JCQl9DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJU2VsZWN0Tm9uZSgpOwkJDQotCQkJDQotCQkJU2Nyb2xsVG9DYXJldCgpOwkJCQ0KLQkJCVNldENhcmV0SW5mbygpOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6Ok9uVktfRE9XTihGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKQ0KLXsNCi0JaWYgKG1fcFZULT5Jc1ZhbGlkKCkpDQotCXsNCi0JCVNldENhcmV0KG1fcFZULT5HZXREb3duV29yZFBsYWNlKG1fd3BDYXJldCxtX3B0Q2FyZXQpKTsNCi0NCi0JCWlmIChiU2hpZnQpDQotCQl7DQotCQkJaWYgKG1fU2VsU3RhdGUuSXNFeGlzdCgpKQ0KLQkJCQltX1NlbFN0YXRlLlNldEVuZFBvcyhtX3dwQ2FyZXQpOw0KLQkJCWVsc2UNCi0JCQkJbV9TZWxTdGF0ZS5TZXQobV93cE9sZENhcmV0LG1fd3BDYXJldCk7DQotDQotCQkJaWYgKG1fd3BPbGRDYXJldCAhPSBtX3dwQ2FyZXQpDQotCQkJew0KLQkJCQlTY3JvbGxUb0NhcmV0KCk7DQotCQkJCUNQVlRfV29yZFJhbmdlIHdyKG1fd3BPbGRDYXJldCxtX3dwQ2FyZXQpOw0KLQkJCQlSZWZyZXNoKFJQX09QVElPTkFMLCAmd3IpOw0KLQkJCQlTZXRDYXJldEluZm8oKTsNCi0JCQl9DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJU2VsZWN0Tm9uZSgpOw0KLQ0KLQkJCVNjcm9sbFRvQ2FyZXQoKTsJCQ0KLQkJCVNldENhcmV0SW5mbygpOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6Ok9uVktfTEVGVChGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKQ0KLXsNCi0JaWYgKG1fcFZULT5Jc1ZhbGlkKCkpDQotCXsNCi0JCWlmIChiU2hpZnQpDQotCQl7DQotCQkJaWYgKG1fd3BDYXJldCA9PSBtX3BWVC0+R2V0TGluZUJlZ2luUGxhY2UobV93cENhcmV0KSAmJg0KLQkJCQltX3dwQ2FyZXQgIT0gbV9wVlQtPkdldFNlY3Rpb25CZWdpblBsYWNlKG1fd3BDYXJldCkpDQotCQkJCVNldENhcmV0KG1fcFZULT5HZXRQcmV2V29yZFBsYWNlKG1fd3BDYXJldCkpOwkNCi0NCi0JCQlTZXRDYXJldChtX3BWVC0+R2V0UHJldldvcmRQbGFjZShtX3dwQ2FyZXQpKTsNCi0NCi0JCQlpZiAobV9TZWxTdGF0ZS5Jc0V4aXN0KCkpDQotCQkJCW1fU2VsU3RhdGUuU2V0RW5kUG9zKG1fd3BDYXJldCk7CQkJDQotCQkJZWxzZQ0KLQkJCQltX1NlbFN0YXRlLlNldChtX3dwT2xkQ2FyZXQsIG1fd3BDYXJldCk7DQotDQotCQkJaWYgKG1fd3BPbGRDYXJldCAhPSBtX3dwQ2FyZXQpDQotCQkJew0KLQkJCQlTY3JvbGxUb0NhcmV0KCk7DQotCQkJCUNQVlRfV29yZFJhbmdlIHdyKG1fd3BPbGRDYXJldCxtX3dwQ2FyZXQpOw0KLQkJCQlSZWZyZXNoKFJQX09QVElPTkFMLCZ3cik7DQotCQkJCVNldENhcmV0SW5mbygpOw0KLQkJCX0NCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlpZiAobV9TZWxTdGF0ZS5Jc0V4aXN0KCkpDQotCQkJew0KLQkJCQlpZiAobV9TZWxTdGF0ZS5CZWdpblBvcy5Xb3JkQ21wKG1fU2VsU3RhdGUuRW5kUG9zKTwwKQ0KLQkJCQkJU2V0Q2FyZXQobV9TZWxTdGF0ZS5CZWdpblBvcyk7DQotCQkJCWVsc2UNCi0JCQkJCVNldENhcmV0KG1fU2VsU3RhdGUuRW5kUG9zKTsNCi0NCi0JCQkJU2VsZWN0Tm9uZSgpOw0KLQkJCQlTY3JvbGxUb0NhcmV0KCk7DQotCQkJCVNldENhcmV0SW5mbygpOw0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQlpZiAobV93cENhcmV0ID09IG1fcFZULT5HZXRMaW5lQmVnaW5QbGFjZShtX3dwQ2FyZXQpICYmDQotCQkJCQltX3dwQ2FyZXQgIT0gbV9wVlQtPkdldFNlY3Rpb25CZWdpblBsYWNlKG1fd3BDYXJldCkpDQotCQkJCQlTZXRDYXJldChtX3BWVC0+R2V0UHJldldvcmRQbGFjZShtX3dwQ2FyZXQpKTsJDQotDQotCQkJCVNldENhcmV0KG1fcFZULT5HZXRQcmV2V29yZFBsYWNlKG1fd3BDYXJldCkpOw0KLQ0KLQkJCQlTY3JvbGxUb0NhcmV0KCk7DQotCQkJCVNldENhcmV0T3JpZ2luKCk7DQotCQkJCVNldENhcmV0SW5mbygpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLX0NCi0NCi12b2lkIENGWF9FZGl0OjpPblZLX1JJR0hUKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpDQotew0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJaWYgKGJTaGlmdCkNCi0JCXsNCi0JCQlTZXRDYXJldChtX3BWVC0+R2V0TmV4dFdvcmRQbGFjZShtX3dwQ2FyZXQpKTsNCi0NCi0JCQlpZiAobV93cENhcmV0ID09IG1fcFZULT5HZXRMaW5lRW5kUGxhY2UobV93cENhcmV0KSAmJg0KLQkJCQltX3dwQ2FyZXQgIT0gbV9wVlQtPkdldFNlY3Rpb25FbmRQbGFjZShtX3dwQ2FyZXQpKQ0KLQkJCQlTZXRDYXJldChtX3BWVC0+R2V0TmV4dFdvcmRQbGFjZShtX3dwQ2FyZXQpKTsNCi0NCi0JCQlpZiAobV9TZWxTdGF0ZS5Jc0V4aXN0KCkpDQotCQkJCW1fU2VsU3RhdGUuU2V0RW5kUG9zKG1fd3BDYXJldCk7CQkJDQotCQkJZWxzZQ0KLQkJCQltX1NlbFN0YXRlLlNldChtX3dwT2xkQ2FyZXQsbV93cENhcmV0KTsJCQkNCi0NCi0JCQlpZiAobV93cE9sZENhcmV0ICE9IG1fd3BDYXJldCkNCi0JCQl7CQkJDQotCQkJCVNjcm9sbFRvQ2FyZXQoKTsNCi0JCQkJQ1BWVF9Xb3JkUmFuZ2Ugd3IobV93cE9sZENhcmV0LG1fd3BDYXJldCk7DQotCQkJCVJlZnJlc2goUlBfT1BUSU9OQUwsJndyKTsNCi0JCQkJU2V0Q2FyZXRJbmZvKCk7DQotCQkJfQ0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCWlmIChtX1NlbFN0YXRlLklzRXhpc3QoKSkNCi0JCQl7DQotCQkJCWlmIChtX1NlbFN0YXRlLkJlZ2luUG9zLldvcmRDbXAobV9TZWxTdGF0ZS5FbmRQb3MpPjApDQotCQkJCQlTZXRDYXJldChtX1NlbFN0YXRlLkJlZ2luUG9zKTsNCi0JCQkJZWxzZQ0KLQkJCQkJU2V0Q2FyZXQobV9TZWxTdGF0ZS5FbmRQb3MpOw0KLQ0KLQkJCQlTZWxlY3ROb25lKCk7DQotCQkJCVNjcm9sbFRvQ2FyZXQoKTsNCi0JCQkJU2V0Q2FyZXRJbmZvKCk7DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCVNldENhcmV0KG1fcFZULT5HZXROZXh0V29yZFBsYWNlKG1fd3BDYXJldCkpOw0KLQ0KLQkJCQlpZiAobV93cENhcmV0ID09IG1fcFZULT5HZXRMaW5lRW5kUGxhY2UobV93cENhcmV0KSAmJg0KLQkJCQkJbV93cENhcmV0ICE9IG1fcFZULT5HZXRTZWN0aW9uRW5kUGxhY2UobV93cENhcmV0KSkNCi0JCQkJCVNldENhcmV0KG1fcFZULT5HZXROZXh0V29yZFBsYWNlKG1fd3BDYXJldCkpOwkJCQkNCi0NCi0JCQkJU2Nyb2xsVG9DYXJldCgpOw0KLQkJCQlTZXRDYXJldE9yaWdpbigpOw0KLQkJCQlTZXRDYXJldEluZm8oKTsNCi0JCQl9DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBDRlhfRWRpdDo6T25WS19IT01FKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpDQotew0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJaWYgKGJTaGlmdCkNCi0JCXsNCi0JCQlpZiAoYkN0cmwpDQotCQkJCVNldENhcmV0KG1fcFZULT5HZXRCZWdpbldvcmRQbGFjZSgpKTsNCi0JCQllbHNlDQotCQkJCVNldENhcmV0KG1fcFZULT5HZXRMaW5lQmVnaW5QbGFjZShtX3dwQ2FyZXQpKTsNCi0NCi0JCQlpZiAobV9TZWxTdGF0ZS5Jc0V4aXN0KCkpDQotCQkJCW1fU2VsU3RhdGUuU2V0RW5kUG9zKG1fd3BDYXJldCk7CQkJDQotCQkJZWxzZQ0KLQkJCQltX1NlbFN0YXRlLlNldChtX3dwT2xkQ2FyZXQsbV93cENhcmV0KTsNCi0NCi0JCQlTY3JvbGxUb0NhcmV0KCk7DQotCQkJQ1BWVF9Xb3JkUmFuZ2Ugd3IobV93cE9sZENhcmV0LCBtX3dwQ2FyZXQpOw0KLQkJCVJlZnJlc2goUlBfT1BUSU9OQUwsICZ3cik7DQotCQkJU2V0Q2FyZXRJbmZvKCk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJaWYgKG1fU2VsU3RhdGUuSXNFeGlzdCgpKQ0KLQkJCXsNCi0JCQkJaWYgKG1fU2VsU3RhdGUuQmVnaW5Qb3MuV29yZENtcChtX1NlbFN0YXRlLkVuZFBvcyk8MCkNCi0JCQkJCVNldENhcmV0KG1fU2VsU3RhdGUuQmVnaW5Qb3MpOw0KLQkJCQllbHNlDQotCQkJCQlTZXRDYXJldChtX1NlbFN0YXRlLkVuZFBvcyk7DQotDQotCQkJCVNlbGVjdE5vbmUoKTsNCi0JCQkJU2Nyb2xsVG9DYXJldCgpOw0KLQkJCQlTZXRDYXJldEluZm8oKTsNCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJaWYgKGJDdHJsKQ0KLQkJCQkJU2V0Q2FyZXQobV9wVlQtPkdldEJlZ2luV29yZFBsYWNlKCkpOw0KLQkJCQllbHNlDQotCQkJCQlTZXRDYXJldChtX3BWVC0+R2V0TGluZUJlZ2luUGxhY2UobV93cENhcmV0KSk7CQ0KLQkJCQkNCi0JCQkJU2Nyb2xsVG9DYXJldCgpOw0KLQkJCQlTZXRDYXJldE9yaWdpbigpOw0KLQkJCQlTZXRDYXJldEluZm8oKTsNCi0JCQl9DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBDRlhfRWRpdDo6T25WS19FTkQoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkNCi17DQotCWlmIChtX3BWVC0+SXNWYWxpZCgpKQ0KLQl7DQotCQlpZiAoYlNoaWZ0KQ0KLQkJew0KLQkJCWlmIChiQ3RybCkNCi0JCQkJU2V0Q2FyZXQobV9wVlQtPkdldEVuZFdvcmRQbGFjZSgpKTsNCi0JCQllbHNlDQotCQkJCVNldENhcmV0KG1fcFZULT5HZXRMaW5lRW5kUGxhY2UobV93cENhcmV0KSk7DQotDQotCQkJaWYgKG1fU2VsU3RhdGUuSXNFeGlzdCgpKQ0KLQkJCQltX1NlbFN0YXRlLlNldEVuZFBvcyhtX3dwQ2FyZXQpOw0KLQkJCWVsc2UNCi0JCQkJbV9TZWxTdGF0ZS5TZXQobV93cE9sZENhcmV0LCBtX3dwQ2FyZXQpOw0KLQ0KLQkJCVNjcm9sbFRvQ2FyZXQoKTsNCi0JCQlDUFZUX1dvcmRSYW5nZSB3cihtX3dwT2xkQ2FyZXQsIG1fd3BDYXJldCk7DQotCQkJUmVmcmVzaChSUF9PUFRJT05BTCwgJndyKTsNCi0JCQlTZXRDYXJldEluZm8oKTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlpZiAobV9TZWxTdGF0ZS5Jc0V4aXN0KCkpDQotCQkJew0KLQkJCQlpZiAobV9TZWxTdGF0ZS5CZWdpblBvcy5Xb3JkQ21wKG1fU2VsU3RhdGUuRW5kUG9zKT4wKQ0KLQkJCQkJU2V0Q2FyZXQobV9TZWxTdGF0ZS5CZWdpblBvcyk7DQotCQkJCWVsc2UNCi0JCQkJCVNldENhcmV0KG1fU2VsU3RhdGUuRW5kUG9zKTsNCi0NCi0JCQkJU2VsZWN0Tm9uZSgpOw0KLQkJCQlTY3JvbGxUb0NhcmV0KCk7DQotCQkJCVNldENhcmV0SW5mbygpOw0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQlpZiAoYkN0cmwpDQotCQkJCQlTZXRDYXJldChtX3BWVC0+R2V0RW5kV29yZFBsYWNlKCkpOw0KLQkJCQllbHNlDQotCQkJCQlTZXRDYXJldChtX3BWVC0+R2V0TGluZUVuZFBsYWNlKG1fd3BDYXJldCkpOw0KLQkJCQkJCQ0KLQkJCQlTY3JvbGxUb0NhcmV0KCk7CQkJDQotCQkJCVNldENhcmV0T3JpZ2luKCk7DQotCQkJCVNldENhcmV0SW5mbygpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLX0NCi0NCi12b2lkIENGWF9FZGl0OjpTZXRUZXh0KEZYX0xQQ1dTVFIgdGV4dCxGWF9JTlQzMiBjaGFyc2V0LA0KLQkJCQkJCWNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMsY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzLCBGWF9CT09MIGJBZGRVbmRvLCBGWF9CT09MIGJQYWludCkNCi17DQotCUVtcHR5KCk7DQotCURvSW5zZXJ0VGV4dChDUFZUX1dvcmRQbGFjZSgwLDAsLTEpLCB0ZXh0LCBjaGFyc2V0LCBwU2VjUHJvcHMsIHBXb3JkUHJvcHMpOw0KLQlpZiAoYlBhaW50KSBQYWludCgpOw0KLQlpZiAobV9iT3ByTm90aWZ5ICYmIG1fcE9wck5vdGlmeSkNCi0JCW1fcE9wck5vdGlmeS0+T25TZXRUZXh0KG1fd3BDYXJldCwgbV93cE9sZENhcmV0KTsNCi0JLy9pZiAoYkFkZFVuZG8pDQotfQ0KLQ0KLUZYX0JPT0wgQ0ZYX0VkaXQ6Okluc2VydFdvcmQoRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBjaGFyc2V0LCBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMsIEZYX0JPT0wgYkFkZFVuZG8sIEZYX0JPT0wgYlBhaW50KQ0KLXsNCi0JaWYgKElzVGV4dE92ZXJmbG93KCkpIHJldHVybiBGQUxTRTsNCi0NCi0JaWYgKG1fcFZULT5Jc1ZhbGlkKCkpDQotCXsNCi0JCW1fcFZULT5VcGRhdGVXb3JkUGxhY2UobV93cENhcmV0KTsNCi0NCi0JCVNldENhcmV0KG1fcFZULT5JbnNlcnRXb3JkKG1fd3BDYXJldCx3b3JkLEdldENoYXJTZXRGcm9tVW5pY29kZSh3b3JkLCBjaGFyc2V0KSxwV29yZFByb3BzKSk7DQotCQltX1NlbFN0YXRlLlNldChtX3dwQ2FyZXQsbV93cENhcmV0KTsNCi0NCi0JCWlmIChtX3dwQ2FyZXQgIT0gbV93cE9sZENhcmV0KQ0KLQkJew0KLQkJCWlmIChiQWRkVW5kbyAmJiBtX2JFbmFibGVVbmRvKQ0KLQkJCXsNCi0JCQkJQWRkRWRpdFVuZG9JdGVtKG5ldyBDRlhFVV9JbnNlcnRXb3JkKHRoaXMsbV93cE9sZENhcmV0LG1fd3BDYXJldCx3b3JkLGNoYXJzZXQscFdvcmRQcm9wcykpOw0KLQkJCX0NCi0NCi0JCQlpZiAoYlBhaW50KQ0KLQkJCQlQYWludEluc2VydFRleHQobV93cE9sZENhcmV0LCBtX3dwQ2FyZXQpOw0KLQ0KLQkJCWlmIChtX2JPcHJOb3RpZnkgJiYgbV9wT3ByTm90aWZ5KQ0KLQkJCQltX3BPcHJOb3RpZnktPk9uSW5zZXJ0V29yZChtX3dwQ2FyZXQsIG1fd3BPbGRDYXJldCk7DQotDQotCQkJcmV0dXJuIFRSVUU7DQotCQl9DQotCX0NCi0JDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBDRlhfRWRpdDo6SW5zZXJ0UmV0dXJuKGNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMsY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzLCANCi0JCQkJCQkJICAgRlhfQk9PTCBiQWRkVW5kbywgRlhfQk9PTCBiUGFpbnQpDQotew0KLQlpZiAoSXNUZXh0T3ZlcmZsb3coKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJbV9wVlQtPlVwZGF0ZVdvcmRQbGFjZShtX3dwQ2FyZXQpOw0KLQkJU2V0Q2FyZXQobV9wVlQtPkluc2VydFNlY3Rpb24obV93cENhcmV0LHBTZWNQcm9wcyxwV29yZFByb3BzKSk7DQotCQltX1NlbFN0YXRlLlNldChtX3dwQ2FyZXQsbV93cENhcmV0KTsNCi0NCi0JCWlmIChtX3dwQ2FyZXQgIT0gbV93cE9sZENhcmV0KQ0KLQkJew0KLQkJCWlmIChiQWRkVW5kbyAmJiBtX2JFbmFibGVVbmRvKQ0KLQkJCXsNCi0JCQkJQWRkRWRpdFVuZG9JdGVtKG5ldyBDRlhFVV9JbnNlcnRSZXR1cm4odGhpcyxtX3dwT2xkQ2FyZXQsbV93cENhcmV0LHBTZWNQcm9wcyxwV29yZFByb3BzKSk7DQotCQkJfQ0KLQ0KLQkJCWlmIChiUGFpbnQpDQotCQkJew0KLQkJCQlSZWFycmFuZ2VQYXJ0KENQVlRfV29yZFJhbmdlKG1fd3BPbGRDYXJldCwgbV93cENhcmV0KSk7DQotCQkJCVNjcm9sbFRvQ2FyZXQoKTsNCi0JCQkJQ1BWVF9Xb3JkUmFuZ2Ugd3IobV93cE9sZENhcmV0LCBHZXRWaXNpYmxlV29yZFJhbmdlKCkuRW5kUG9zKTsNCi0JCQkJUmVmcmVzaChSUF9BTkFMWVNFLCAmd3IpOwkJDQotCQkJCVNldENhcmV0T3JpZ2luKCk7DQotCQkJCVNldENhcmV0SW5mbygpOwkJCQ0KLQkJCX0NCi0NCi0JCQlpZiAobV9iT3ByTm90aWZ5ICYmIG1fcE9wck5vdGlmeSkNCi0JCQkJbV9wT3ByTm90aWZ5LT5Pbkluc2VydFJldHVybihtX3dwQ2FyZXQsIG1fd3BPbGRDYXJldCk7DQotDQotCQkJcmV0dXJuIFRSVUU7DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MIENGWF9FZGl0OjpCYWNrc3BhY2UoRlhfQk9PTCBiQWRkVW5kbywgRlhfQk9PTCBiUGFpbnQpDQotew0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJaWYgKG1fd3BDYXJldCA9PSBtX3BWVC0+R2V0QmVnaW5Xb3JkUGxhY2UoKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJQ1BWVF9TZWN0aW9uIHNlY3Rpb247DQotCQlDUFZUX1dvcmQgd29yZDsNCi0NCi0JCWlmIChiQWRkVW5kbykNCi0JCXsNCi0JCQlpZiAoSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IgKiBwSXRlcmF0b3IgPSBtX3BWVC0+R2V0SXRlcmF0b3IoKSkNCi0JCQl7CQkJCQ0KLQkJCQlwSXRlcmF0b3ItPlNldEF0KG1fd3BDYXJldCk7DQotCQkJCXBJdGVyYXRvci0+R2V0U2VjdGlvbihzZWN0aW9uKTsNCi0JCQkJcEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmQpOw0KLQkJCX0NCi0JCX0NCi0NCi0JCW1fcFZULT5VcGRhdGVXb3JkUGxhY2UobV93cENhcmV0KTsNCi0JCVNldENhcmV0KG1fcFZULT5CYWNrU3BhY2VXb3JkKG1fd3BDYXJldCkpOw0KLQkJbV9TZWxTdGF0ZS5TZXQobV93cENhcmV0LG1fd3BDYXJldCk7DQotDQotCQlpZiAobV93cENhcmV0ICE9IG1fd3BPbGRDYXJldCkNCi0JCXsNCi0JCQlpZiAoYkFkZFVuZG8gJiYgbV9iRW5hYmxlVW5kbykNCi0JCQl7DQotCQkJCWlmIChtX3dwQ2FyZXQuU2VjQ21wKG1fd3BPbGRDYXJldCkgIT0gMCkJCQkNCi0JCQkJCUFkZEVkaXRVbmRvSXRlbShuZXcgQ0ZYRVVfQmFja3NwYWNlKHRoaXMsbV93cE9sZENhcmV0LG1fd3BDYXJldCx3b3JkLldvcmQsd29yZC5uQ2hhcnNldCwNCi0JCQkJCQlzZWN0aW9uLlNlY1Byb3BzLHNlY3Rpb24uV29yZFByb3BzKSk7DQotCQkJCWVsc2UNCi0JCQkJCUFkZEVkaXRVbmRvSXRlbShuZXcgQ0ZYRVVfQmFja3NwYWNlKHRoaXMsbV93cE9sZENhcmV0LG1fd3BDYXJldCx3b3JkLldvcmQsd29yZC5uQ2hhcnNldCwNCi0JCQkJCQlzZWN0aW9uLlNlY1Byb3BzLHdvcmQuV29yZFByb3BzKSk7DQotCQkJfQ0KLQ0KLQkJCWlmIChiUGFpbnQpDQotCQkJew0KLQkJCQlSZWFycmFuZ2VQYXJ0KENQVlRfV29yZFJhbmdlKG1fd3BDYXJldCxtX3dwT2xkQ2FyZXQpKTsNCi0JCQkJU2Nyb2xsVG9DYXJldCgpOw0KLQ0KLQkJCQlDUFZUX1dvcmRSYW5nZSB3cjsNCi0JCQkJaWYgKG1fd3BDYXJldC5TZWNDbXAobV93cE9sZENhcmV0KSAhPTApDQotCQkJCQl3ciA9IENQVlRfV29yZFJhbmdlKG1fcFZULT5HZXRQcmV2V29yZFBsYWNlKG1fd3BDYXJldCksR2V0VmlzaWJsZVdvcmRSYW5nZSgpLkVuZFBvcyk7CQ0KLQkJCQllbHNlIGlmIChtX3dwQ2FyZXQuTGluZUNtcChtX3dwT2xkQ2FyZXQpICE9MCkNCi0JCQkJCXdyID0gQ1BWVF9Xb3JkUmFuZ2UobV9wVlQtPkdldExpbmVCZWdpblBsYWNlKG1fd3BDYXJldCksbV9wVlQtPkdldFNlY3Rpb25FbmRQbGFjZShtX3dwQ2FyZXQpKTsNCi0JCQkJZWxzZQ0KLQkJCQkJd3IgPSBDUFZUX1dvcmRSYW5nZShtX3BWVC0+R2V0UHJldldvcmRQbGFjZShtX3dwQ2FyZXQpLG1fcFZULT5HZXRTZWN0aW9uRW5kUGxhY2UobV93cENhcmV0KSk7DQotDQotCQkJCVJlZnJlc2goUlBfQU5BTFlTRSwgJndyKTsNCi0NCi0JCQkJU2V0Q2FyZXRPcmlnaW4oKTsNCi0JCQkJU2V0Q2FyZXRJbmZvKCk7DQotCQkJfQ0KLQ0KLQkJCWlmIChtX2JPcHJOb3RpZnkgJiYgbV9wT3ByTm90aWZ5KQ0KLQkJCQltX3BPcHJOb3RpZnktPk9uQmFja1NwYWNlKG1fd3BDYXJldCwgbV93cE9sZENhcmV0KTsNCi0NCi0JCQlyZXR1cm4gVFJVRTsNCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgQ0ZYX0VkaXQ6OkRlbGV0ZShGWF9CT09MIGJBZGRVbmRvLCBGWF9CT09MIGJQYWludCkNCi17DQotCWlmIChtX3BWVC0+SXNWYWxpZCgpKQ0KLQl7DQotCQlpZiAobV93cENhcmV0ID09IG1fcFZULT5HZXRFbmRXb3JkUGxhY2UoKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJQ1BWVF9TZWN0aW9uIHNlY3Rpb247DQotCQlDUFZUX1dvcmQgd29yZDsNCi0NCi0JCWlmIChiQWRkVW5kbykNCi0JCXsNCi0JCQlpZiAoSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IgKiBwSXRlcmF0b3IgPSBtX3BWVC0+R2V0SXRlcmF0b3IoKSkNCi0JCQl7CQkJCQ0KLQkJCQlwSXRlcmF0b3ItPlNldEF0KG1fcFZULT5HZXROZXh0V29yZFBsYWNlKG1fd3BDYXJldCkpOw0KLQkJCQlwSXRlcmF0b3ItPkdldFNlY3Rpb24oc2VjdGlvbik7DQotCQkJCXBJdGVyYXRvci0+R2V0V29yZCh3b3JkKTsNCi0JCQl9DQotCQl9DQotDQotCQltX3BWVC0+VXBkYXRlV29yZFBsYWNlKG1fd3BDYXJldCk7DQotCQlGWF9CT09MIGJTZWNFbmQgPSAobV93cENhcmV0ID09IG1fcFZULT5HZXRTZWN0aW9uRW5kUGxhY2UobV93cENhcmV0KSk7DQotDQotCQlTZXRDYXJldChtX3BWVC0+RGVsZXRlV29yZChtX3dwQ2FyZXQpKTsNCi0JCW1fU2VsU3RhdGUuU2V0KG1fd3BDYXJldCxtX3dwQ2FyZXQpOw0KLQ0KLQkJaWYgKGJBZGRVbmRvICYmIG1fYkVuYWJsZVVuZG8pDQotCQl7DQotCQkJaWYgKGJTZWNFbmQpCQkNCi0JCQkJQWRkRWRpdFVuZG9JdGVtKG5ldyBDRlhFVV9EZWxldGUodGhpcyxtX3dwT2xkQ2FyZXQsbV93cENhcmV0LHdvcmQuV29yZCx3b3JkLm5DaGFyc2V0LA0KLQkJCQkJc2VjdGlvbi5TZWNQcm9wcyxzZWN0aW9uLldvcmRQcm9wcyxiU2VjRW5kKSk7DQotCQkJZWxzZQ0KLQkJCQlBZGRFZGl0VW5kb0l0ZW0obmV3IENGWEVVX0RlbGV0ZSh0aGlzLG1fd3BPbGRDYXJldCxtX3dwQ2FyZXQsd29yZC5Xb3JkLHdvcmQubkNoYXJzZXQsDQotCQkJCQlzZWN0aW9uLlNlY1Byb3BzLHdvcmQuV29yZFByb3BzLGJTZWNFbmQpKTsNCi0JCX0NCi0JCQ0KLQkJaWYgKGJQYWludCkNCi0JCXsNCi0JCQlSZWFycmFuZ2VQYXJ0KENQVlRfV29yZFJhbmdlKG1fd3BPbGRDYXJldCxtX3dwQ2FyZXQpKTsNCi0JCQlTY3JvbGxUb0NhcmV0KCk7DQotDQotCQkJQ1BWVF9Xb3JkUmFuZ2Ugd3I7DQotCQkJaWYgKGJTZWNFbmQpDQotCQkJCXdyID0gQ1BWVF9Xb3JkUmFuZ2UobV9wVlQtPkdldFByZXZXb3JkUGxhY2UobV93cE9sZENhcmV0KSxHZXRWaXNpYmxlV29yZFJhbmdlKCkuRW5kUG9zKTsNCi0JCQllbHNlIGlmIChtX3dwQ2FyZXQuTGluZUNtcChtX3dwT2xkQ2FyZXQpICE9MCkNCi0JCQkJd3IgPSBDUFZUX1dvcmRSYW5nZShtX3BWVC0+R2V0TGluZUJlZ2luUGxhY2UobV93cENhcmV0KSxtX3BWVC0+R2V0U2VjdGlvbkVuZFBsYWNlKG1fd3BDYXJldCkpOw0KLQkJCWVsc2UNCi0JCQkJd3IgPSBDUFZUX1dvcmRSYW5nZShtX3BWVC0+R2V0UHJldldvcmRQbGFjZShtX3dwT2xkQ2FyZXQpLG1fcFZULT5HZXRTZWN0aW9uRW5kUGxhY2UobV93cENhcmV0KSk7CQkJDQotDQotCQkJUmVmcmVzaChSUF9BTkFMWVNFLCAmd3IpOw0KLQkJCQ0KLQkJCVNldENhcmV0T3JpZ2luKCk7DQotCQkJU2V0Q2FyZXRJbmZvKCk7DQotCQl9DQotDQotCQlpZiAobV9iT3ByTm90aWZ5ICYmIG1fcE9wck5vdGlmeSkNCi0JCQltX3BPcHJOb3RpZnktPk9uRGVsZXRlKG1fd3BDYXJldCwgbV93cE9sZENhcmV0KTsNCi0NCi0JCXJldHVybiBUUlVFOw0KLQl9DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTAlDRlhfRWRpdDo6RW1wdHkoKQ0KLXsNCi0JaWYgKG1fcFZULT5Jc1ZhbGlkKCkpDQotCXsNCi0JCW1fcFZULT5EZWxldGVXb3JkcyhHZXRXaG9sZVdvcmRSYW5nZSgpKTsNCi0JCVNldENhcmV0KG1fcFZULT5HZXRCZWdpbldvcmRQbGFjZSgpKTsNCi0NCi0JCXJldHVybiBUUlVFOw0KLQl9DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBDRlhfRWRpdDo6Q2xlYXIoRlhfQk9PTCBiQWRkVW5kbywgRlhfQk9PTCBiUGFpbnQpDQotew0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJaWYgKG1fU2VsU3RhdGUuSXNFeGlzdCgpKQ0KLQkJew0KLQkJCUNQVlRfV29yZFJhbmdlIHJhbmdlID0gbV9TZWxTdGF0ZS5Db252ZXJ0VG9Xb3JkUmFuZ2UoKTsNCi0NCi0JCQlpZiAoYkFkZFVuZG8gJiYgbV9iRW5hYmxlVW5kbykNCi0JCQl7DQotCQkJCWlmIChtX3BWVC0+SXNSaWNoVGV4dCgpKQ0KLQkJCQl7DQotCQkJCQlCZWdpbkdyb3VwVW5kbyhMIiIpOw0KLQ0KLQkJCQkJaWYgKElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yICogcEl0ZXJhdG9yID0gbV9wVlQtPkdldEl0ZXJhdG9yKCkpDQotCQkJCQl7DQotCQkJCQkJcEl0ZXJhdG9yLT5TZXRBdChyYW5nZS5FbmRQb3MpOw0KLQ0KLQkJCQkJCUNQVlRfV29yZCB3b3JkaW5mbzsJDQotCQkJCQkJQ1BWVF9TZWN0aW9uIHNlY2luZm87CQkJCQkJDQotCQkJCQkJZG8NCi0JCQkJCQl7CQkJCQkJCQ0KLQkJCQkJCQlDUFZUX1dvcmRQbGFjZSBwbGFjZSA9IHBJdGVyYXRvci0+R2V0QXQoKTsNCi0JCQkJCQkJaWYgKHBsYWNlLldvcmRDbXAocmFuZ2UuQmVnaW5Qb3MpIDw9IDApYnJlYWs7DQotDQotCQkJCQkJCUNQVlRfV29yZFBsYWNlIG9sZHBsYWNlID0gbV9wVlQtPkdldFByZXZXb3JkUGxhY2UocGxhY2UpOwkJCQkJCQkNCi0NCi0JCQkJCQkJaWYgKG9sZHBsYWNlLlNlY0NtcChwbGFjZSkgIT0gMCkNCi0JCQkJCQkJew0KLQkJCQkJCQkJaWYgKHBJdGVyYXRvci0+R2V0U2VjdGlvbihzZWNpbmZvKSkNCi0JCQkJCQkJCXsNCi0JCQkJCQkJCQlBZGRFZGl0VW5kb0l0ZW0obmV3IENGWEVVX0NsZWFyUmljaCh0aGlzLG9sZHBsYWNlLHBsYWNlLHJhbmdlLHdvcmRpbmZvLldvcmQsDQotCQkJCQkJCQkJCXdvcmRpbmZvLm5DaGFyc2V0LHNlY2luZm8uU2VjUHJvcHMsc2VjaW5mby5Xb3JkUHJvcHMpKTsNCi0JCQkJCQkJCX0NCi0JCQkJCQkJfQ0KLQkJCQkJCQllbHNlDQotCQkJCQkJCXsNCi0JCQkJCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZGluZm8pKQ0KLQkJCQkJCQkJewkJCQkJCQkJCQ0KLQkJCQkJCQkJCW9sZHBsYWNlID0gbV9wVlQtPkFqdXN0TGluZUhlYWRlcihvbGRwbGFjZSxUUlVFKTsNCi0JCQkJCQkJCQlwbGFjZSA9IG1fcFZULT5BanVzdExpbmVIZWFkZXIocGxhY2UsVFJVRSk7DQotDQotCQkJCQkJCQkJQWRkRWRpdFVuZG9JdGVtKG5ldyBDRlhFVV9DbGVhclJpY2godGhpcyxvbGRwbGFjZSxwbGFjZSxyYW5nZSx3b3JkaW5mby5Xb3JkLA0KLQkJCQkJCQkJCQl3b3JkaW5mby5uQ2hhcnNldCxzZWNpbmZvLlNlY1Byb3BzLHdvcmRpbmZvLldvcmRQcm9wcykpOw0KLQkJCQkJCQkJfQ0KLQkJCQkJCQl9DQotCQkJCQkJfXdoaWxlIChwSXRlcmF0b3ItPlByZXZXb3JkKCkpOw0KLQkJCQkJfQ0KLQkJCQkJRW5kR3JvdXBVbmRvKCk7DQotCQkJCX0NCi0JCQkJZWxzZQ0KLQkJCQl7CQkJCQkNCi0JCQkJCUFkZEVkaXRVbmRvSXRlbShuZXcgQ0ZYRVVfQ2xlYXIodGhpcyxyYW5nZSxHZXRTZWxUZXh0KCkpKTsJCQkJCQ0KLQkJCQl9DQotCQkJfQ0KLQ0KLQkJCVNlbGVjdE5vbmUoKTsJCQkNCi0JCQlTZXRDYXJldChtX3BWVC0+RGVsZXRlV29yZHMocmFuZ2UpKTsJDQotCQkJbV9TZWxTdGF0ZS5TZXQobV93cENhcmV0LG1fd3BDYXJldCk7DQotDQotCQkJaWYgKGJQYWludCkNCi0JCQl7DQotCQkJCVJlYXJyYW5nZVBhcnQocmFuZ2UpOwkNCi0JCQkJU2Nyb2xsVG9DYXJldCgpOw0KLQ0KLQkJCQlDUFZUX1dvcmRSYW5nZSB3cihtX3dwT2xkQ2FyZXQsIEdldFZpc2libGVXb3JkUmFuZ2UoKS5FbmRQb3MpOw0KLQkJCQlSZWZyZXNoKFJQX0FOQUxZU0UsICZ3cik7DQotCQkJCQ0KLQkJCQlTZXRDYXJldE9yaWdpbigpOw0KLQkJCQlTZXRDYXJldEluZm8oKTsNCi0JCQl9DQotDQotCQkJaWYgKG1fYk9wck5vdGlmeSAmJiBtX3BPcHJOb3RpZnkpDQotCQkJCW1fcE9wck5vdGlmeS0+T25DbGVhcihtX3dwQ2FyZXQsIG1fd3BPbGRDYXJldCk7DQotDQotCQkJcmV0dXJuIFRSVUU7DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MIENGWF9FZGl0OjpJbnNlcnRUZXh0KEZYX0xQQ1dTVFIgdGV4dCwgRlhfSU5UMzIgY2hhcnNldCwNCi0JCQkJCWNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMsIGNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcywgRlhfQk9PTCBiQWRkVW5kbywgRlhfQk9PTCBiUGFpbnQpDQotew0KLQlpZiAoSXNUZXh0T3ZlcmZsb3coKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQltX3BWVC0+VXBkYXRlV29yZFBsYWNlKG1fd3BDYXJldCk7DQotCVNldENhcmV0KERvSW5zZXJ0VGV4dChtX3dwQ2FyZXQsIHRleHQsIGNoYXJzZXQsIHBTZWNQcm9wcywgcFdvcmRQcm9wcykpOw0KLQltX1NlbFN0YXRlLlNldChtX3dwQ2FyZXQsbV93cENhcmV0KTsNCi0NCi0JaWYgKG1fd3BDYXJldCAhPSBtX3dwT2xkQ2FyZXQpDQotCXsNCi0JCWlmIChiQWRkVW5kbyAmJiBtX2JFbmFibGVVbmRvKQ0KLQkJew0KLQkJCUFkZEVkaXRVbmRvSXRlbShuZXcgQ0ZYRVVfSW5zZXJ0VGV4dCh0aGlzLG1fd3BPbGRDYXJldCxtX3dwQ2FyZXQsdGV4dCxjaGFyc2V0LHBTZWNQcm9wcyxwV29yZFByb3BzKSk7DQotCQl9DQotDQotCQlpZiAoYlBhaW50KQ0KLQkJCVBhaW50SW5zZXJ0VGV4dChtX3dwT2xkQ2FyZXQsIG1fd3BDYXJldCk7DQotDQotCQlpZiAobV9iT3ByTm90aWZ5ICYmIG1fcE9wck5vdGlmeSkNCi0JCQltX3BPcHJOb3RpZnktPk9uSW5zZXJ0VGV4dChtX3dwQ2FyZXQsIG1fd3BPbGRDYXJldCk7DQotDQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OlBhaW50SW5zZXJ0VGV4dChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwT2xkLCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwTmV3KQ0KLXsNCi0JaWYgKG1fcFZULT5Jc1ZhbGlkKCkpDQotCXsNCi0JCVJlYXJyYW5nZVBhcnQoQ1BWVF9Xb3JkUmFuZ2Uod3BPbGQsd3BOZXcpKTsNCi0JCVNjcm9sbFRvQ2FyZXQoKTsNCi0JCQ0KLQkJQ1BWVF9Xb3JkUmFuZ2Ugd3I7DQotCQlpZiAobV93cENhcmV0LkxpbmVDbXAod3BPbGQpICE9MCkNCi0JCQl3ciA9IENQVlRfV29yZFJhbmdlKG1fcFZULT5HZXRMaW5lQmVnaW5QbGFjZSh3cE9sZCksbV9wVlQtPkdldFNlY3Rpb25FbmRQbGFjZSh3cE5ldykpOwkNCi0JCWVsc2UNCi0JCQl3ciA9IENQVlRfV29yZFJhbmdlKHdwT2xkLG1fcFZULT5HZXRTZWN0aW9uRW5kUGxhY2Uod3BOZXcpKTsJDQotCQlSZWZyZXNoKFJQX0FOQUxZU0UsICZ3cik7DQotCQlTZXRDYXJldE9yaWdpbigpOw0KLQkJU2V0Q2FyZXRJbmZvKCk7DQotCX0NCi19DQotDQotRlhfQk9PTCBDRlhfRWRpdDo6UmVkbygpDQotew0KLQlpZiAobV9iRW5hYmxlVW5kbykNCi0Jew0KLQkJaWYgKG1fVW5kby5DYW5SZWRvKCkpDQotCQl7DQotCQkJbV9VbmRvLlJlZG8oKTsNCi0JCQlyZXR1cm4gVFJVRTsNCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgQ0ZYX0VkaXQ6OlVuZG8oKQ0KLXsNCi0JaWYgKG1fYkVuYWJsZVVuZG8pDQotCXsNCi0JCWlmIChtX1VuZG8uQ2FuVW5kbygpKQ0KLQkJew0KLQkJCW1fVW5kby5VbmRvKCk7DQotCQkJcmV0dXJuIFRSVUU7DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi12b2lkIENGWF9FZGl0OjpTZXRDYXJldE9yaWdpbigpDQotew0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJaWYgKElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yICogcEl0ZXJhdG9yID0gbV9wVlQtPkdldEl0ZXJhdG9yKCkpDQotCQl7DQotCQkJcEl0ZXJhdG9yLT5TZXRBdChtX3dwQ2FyZXQpOw0KLQkJCUNQVlRfV29yZCB3b3JkOw0KLQkJCUNQVlRfTGluZSBsaW5lOw0KLQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpDQotCQkJew0KLQkJCQltX3B0Q2FyZXQueCA9IHdvcmQucHRXb3JkLnggKyB3b3JkLmZXaWR0aDsNCi0JCQkJbV9wdENhcmV0LnkgPSB3b3JkLnB0V29yZC55Ow0KLQkJCX0NCi0JCQllbHNlIGlmIChwSXRlcmF0b3ItPkdldExpbmUobGluZSkpDQotCQkJewkJCQkNCi0JCQkJbV9wdENhcmV0LnggPSBsaW5lLnB0TGluZS54Ow0KLQkJCQltX3B0Q2FyZXQueSA9IGxpbmUucHRMaW5lLnk7DQotCQkJfQ0KLQkJfQkJCQkNCi0JfQkNCi19DQotDQotRlhfSU5UMzIgQ0ZYX0VkaXQ6OldvcmRQbGFjZVRvV29yZEluZGV4KGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0DQotew0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0JCXJldHVybiBtX3BWVC0+V29yZFBsYWNlVG9Xb3JkSW5kZXgocGxhY2UpOw0KLQ0KLQlyZXR1cm4gLTE7DQotfQ0KLQ0KLUNQVlRfV29yZFBsYWNlIENGWF9FZGl0OjpXb3JkSW5kZXhUb1dvcmRQbGFjZShGWF9JTlQzMiBpbmRleCkgY29uc3QNCi17DQotCWlmIChtX3BWVC0+SXNWYWxpZCgpKQ0KLQkJcmV0dXJuIG1fcFZULT5Xb3JkSW5kZXhUb1dvcmRQbGFjZShpbmRleCk7DQotDQotCXJldHVybiBDUFZUX1dvcmRQbGFjZSgpOw0KLX0NCi0NCi1GWF9CT09MCUNGWF9FZGl0OjpJc1RleHRGdWxsKCkgY29uc3QNCi17DQotCUZYX0lOVDMyIG5Ub3RhbFdvcmRzID0gbV9wVlQtPkdldFRvdGFsV29yZHMoKTsNCi0JRlhfSU5UMzIgbkxpbWl0Q2hhciA9IG1fcFZULT5HZXRMaW1pdENoYXIoKTsNCi0JRlhfSU5UMzIgbkNoYXJBcnJheSA9IG1fcFZULT5HZXRDaGFyQXJyYXkoKTsNCi0NCi0JcmV0dXJuIElzVGV4dE92ZXJmbG93KCkgfHwgKG5MaW1pdENoYXI+MCAmJiBuVG90YWxXb3JkcyA+PSBuTGltaXRDaGFyKQ0KLQkJfHwgKG5DaGFyQXJyYXk+MCAmJiBuVG90YWxXb3JkcyA+PSBuQ2hhckFycmF5KTsNCi19DQotDQotRlhfQk9PTAlDRlhfRWRpdDo6SXNUZXh0T3ZlcmZsb3coKSBjb25zdA0KLXsNCi0JaWYgKCFtX2JFbmFibGVTY3JvbGwgJiYgIW1fYkVuYWJsZU92ZXJmbG93KQ0KLQl7DQotCQlDUERGX1JlY3QgcmNQbGF0ZSA9IG1fcFZULT5HZXRQbGF0ZVJlY3QoKTsNCi0JCUNQREZfUmVjdCByY0NvbnRlbnQgPSBtX3BWVC0+R2V0Q29udGVudFJlY3QoKTsNCi0NCi0JCWlmIChtX3BWVC0+SXNNdWx0aUxpbmUoKSAmJiBHZXRUb3RhbExpbmVzKCkgPiAxKQ0KLQkJew0KLQkJCWlmIChGWF9FRElUX0lzRmxvYXRCaWdnZXIocmNDb250ZW50LkhlaWdodCgpLHJjUGxhdGUuSGVpZ2h0KCkpKSByZXR1cm4gVFJVRTsNCi0JCX0NCi0NCi0JCWlmIChGWF9FRElUX0lzRmxvYXRCaWdnZXIocmNDb250ZW50LldpZHRoKCkscmNQbGF0ZS5XaWR0aCgpKSkgcmV0dXJuIFRSVUU7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1DUFZUX1dvcmRQbGFjZSBDRlhfRWRpdDo6R2V0TGluZUJlZ2luUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3QNCi17DQotCXJldHVybiBtX3BWVC0+R2V0TGluZUJlZ2luUGxhY2UocGxhY2UpOw0KLX0NCi0NCi1DUFZUX1dvcmRQbGFjZSBDRlhfRWRpdDo6R2V0TGluZUVuZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9wVlQtPkdldExpbmVFbmRQbGFjZShwbGFjZSk7DQotfQ0KLQ0KLUNQVlRfV29yZFBsYWNlIENGWF9FZGl0OjpHZXRTZWN0aW9uQmVnaW5QbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fcFZULT5HZXRTZWN0aW9uQmVnaW5QbGFjZShwbGFjZSk7DQotfQ0KLQ0KLUNQVlRfV29yZFBsYWNlIENGWF9FZGl0OjpHZXRTZWN0aW9uRW5kUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3QNCi17DQotCXJldHVybiBtX3BWVC0+R2V0U2VjdGlvbkVuZFBsYWNlKHBsYWNlKTsNCi19DQotDQotRlhfQk9PTAlDRlhfRWRpdDo6Q2FuVW5kbygpIGNvbnN0DQotew0KLQlpZiAobV9iRW5hYmxlVW5kbykNCi0Jew0KLQkJcmV0dXJuIG1fVW5kby5DYW5VbmRvKCk7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MCUNGWF9FZGl0OjpDYW5SZWRvKCkgY29uc3QNCi17DQotCWlmIChtX2JFbmFibGVVbmRvKQ0KLQl7DQotCQlyZXR1cm4gbV9VbmRvLkNhblJlZG8oKTsNCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wJQ0ZYX0VkaXQ6OklzTW9kaWZpZWQoKSBjb25zdA0KLXsNCi0JaWYgKG1fYkVuYWJsZVVuZG8pDQotCXsNCi0JCXJldHVybiBtX1VuZG8uSXNNb2RpZmllZCgpOw0KLQl9DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotdm9pZCBDRlhfRWRpdDo6RW5hYmxlUmVmcmVzaChGWF9CT09MIGJSZWZyZXNoKQ0KLXsNCi0JbV9iRW5hYmxlUmVmcmVzaCA9IGJSZWZyZXNoOw0KLX0NCi0NCi12b2lkIENGWF9FZGl0OjpFbmFibGVVbmRvKEZYX0JPT0wgYlVuZG8pDQotew0KLQl0aGlzLT5tX2JFbmFibGVVbmRvID0gYlVuZG87DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OkVuYWJsZU5vdGlmeShGWF9CT09MIGJOb3RpZnkpDQotew0KLQl0aGlzLT5tX2JOb3RpZnkgPSBiTm90aWZ5Ow0KLX0NCi0NCi12b2lkIENGWF9FZGl0OjpFbmFibGVPcHJOb3RpZnkoRlhfQk9PTCBiTm90aWZ5KQ0KLXsNCi0JdGhpcy0+bV9iT3ByTm90aWZ5ID0gYk5vdGlmeTsNCi19DQotDQotRlhfRkxPQVQgQ0ZYX0VkaXQ6OkdldExpbmVUb3AoY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlKSBjb25zdA0KLXsNCi0JaWYgKElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yKiBwSXRlcmF0b3IgPSBtX3BWVC0+R2V0SXRlcmF0b3IoKSkNCi0Jew0KLQkJQ1BWVF9Xb3JkUGxhY2Ugd3BPbGQgPSBwSXRlcmF0b3ItPkdldEF0KCk7DQotDQotCQlwSXRlcmF0b3ItPlNldEF0KHBsYWNlKTsNCi0JCUNQVlRfTGluZSBsaW5lOw0KLQkJcEl0ZXJhdG9yLT5HZXRMaW5lKGxpbmUpOw0KLQ0KLQkJcEl0ZXJhdG9yLT5TZXRBdCh3cE9sZCk7DQotDQotCQlyZXR1cm4gbGluZS5wdExpbmUueSArIGxpbmUuZkxpbmVBc2NlbnQ7DQotCX0NCi0NCi0JcmV0dXJuIDAuMGY7DQotfQ0KLQ0KLUZYX0ZMT0FUIENGWF9FZGl0OjpHZXRMaW5lQm90dG9tKGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSkgY29uc3QNCi17DQotCWlmIChJUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvciogcEl0ZXJhdG9yID0gbV9wVlQtPkdldEl0ZXJhdG9yKCkpDQotCXsNCi0JCUNQVlRfV29yZFBsYWNlIHdwT2xkID0gcEl0ZXJhdG9yLT5HZXRBdCgpOw0KLQ0KLQkJcEl0ZXJhdG9yLT5TZXRBdChwbGFjZSk7DQotCQlDUFZUX0xpbmUgbGluZTsNCi0JCXBJdGVyYXRvci0+R2V0TGluZShsaW5lKTsNCi0NCi0JCXBJdGVyYXRvci0+U2V0QXQod3BPbGQpOw0KLQ0KLQkJcmV0dXJuIGxpbmUucHRMaW5lLnkgKyBsaW5lLmZMaW5lRGVzY2VudDsNCi0JfQ0KLQ0KLQlyZXR1cm4gMC4wZjsNCi19DQotDQotQ1BWVF9Xb3JkUGxhY2UgQ0ZYX0VkaXQ6OkRvSW5zZXJ0VGV4dChjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIEZYX0xQQ1dTVFIgdGV4dCwgRlhfSU5UMzIgY2hhcnNldCwgDQotCQkJCQkJCQkJICBjb25zdCBDUFZUX1NlY1Byb3BzICogcFNlY1Byb3BzLCBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMpDQotew0KLQlDUFZUX1dvcmRQbGFjZSB3cCA9IHBsYWNlOw0KLQ0KLQlpZiAobV9wVlQtPklzVmFsaWQoKSkNCi0Jew0KLQkJQ0ZYX1dpZGVTdHJpbmcgc1RleHQgPSB0ZXh0Ow0KLQ0KLQkJZm9yIChGWF9JTlQzMiBpID0gMCwgc3ogPSBzVGV4dC5HZXRMZW5ndGgoKTsgaSA8IHN6OyBpKyspDQotCQl7DQotCQkJRlhfV09SRCB3b3JkID0gc1RleHRbaV07DQotCQkJc3dpdGNoICh3b3JkKQ0KLQkJCXsNCi0JCQljYXNlIDB4MEQ6DQotCQkJCXdwID0gbV9wVlQtPkluc2VydFNlY3Rpb24od3AscFNlY1Byb3BzLHBXb3JkUHJvcHMpOw0KLQkJCQlpZiAoc1RleHRbaSsxXSA9PSAweDBBKQ0KLQkJCQkJaSsrOw0KLQkJCQlicmVhazsNCi0JCQljYXNlIDB4MEE6CQ0KLQkJCQl3cCA9IG1fcFZULT5JbnNlcnRTZWN0aW9uKHdwLHBTZWNQcm9wcyxwV29yZFByb3BzKTsNCi0JCQkJaWYgKHNUZXh0W2krMV0gPT0gMHgwRCkNCi0JCQkJCWkrKzsNCi0JCQkJYnJlYWs7DQotCQkJY2FzZSAweDA5Og0KLQkJCQl3b3JkID0gMHgyMDsNCi0JCQlkZWZhdWx0Og0KLQkJCQl3cCA9IG1fcFZULT5JbnNlcnRXb3JkKHdwLHdvcmQsR2V0Q2hhclNldEZyb21Vbmljb2RlKHdvcmQsIGNoYXJzZXQpLHBXb3JkUHJvcHMpOw0KLQkJCQlicmVhazsNCi0JCQl9DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIHdwOw0KLX0NCi0NCi1GWF9JTlQzMiBDRlhfRWRpdDo6R2V0Q2hhclNldEZyb21Vbmljb2RlKEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgbk9sZENoYXJzZXQpDQotew0KLQlpZiAoSUZYX0VkaXRfRm9udE1hcCogcEZvbnRNYXAgPSB0aGlzLT5HZXRGb250TWFwKCkpDQotCQlyZXR1cm4gcEZvbnRNYXAtPkNoYXJTZXRGcm9tVW5pY29kZSh3b3JkLCBuT2xkQ2hhcnNldCk7DQotCWVsc2UNCi0JCXJldHVybiBuT2xkQ2hhcnNldDsNCi19DQotDQotdm9pZCBDRlhfRWRpdDo6QmVnaW5Hcm91cFVuZG8oY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNUaXRsZSkNCi17DQotCUFTU0VSVChtX3BHcm91cFVuZG9JdGVtID09IE5VTEwpOw0KLQ0KLQltX3BHcm91cFVuZG9JdGVtID0gbmV3IENGWF9FZGl0X0dyb3VwVW5kb0l0ZW0oc1RpdGxlKTsNCi19DQotDQotdm9pZCBDRlhfRWRpdDo6RW5kR3JvdXBVbmRvKCkNCi17DQotCUFTU0VSVChtX3BHcm91cFVuZG9JdGVtICE9IE5VTEwpOw0KLQ0KLQltX3BHcm91cFVuZG9JdGVtLT5VcGRhdGVJdGVtcygpOw0KLQltX1VuZG8uQWRkSXRlbShtX3BHcm91cFVuZG9JdGVtKTsNCi0JaWYgKG1fYk9wck5vdGlmeSAmJiBtX3BPcHJOb3RpZnkpDQotCQltX3BPcHJOb3RpZnktPk9uQWRkVW5kbyhtX3BHcm91cFVuZG9JdGVtKTsNCi0JbV9wR3JvdXBVbmRvSXRlbSA9IE5VTEw7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0VkaXQ6OkFkZEVkaXRVbmRvSXRlbShDRlhfRWRpdF9VbmRvSXRlbSogcEVkaXRVbmRvSXRlbSkNCi17DQotCWlmIChtX3BHcm91cFVuZG9JdGVtKQ0KLQkJbV9wR3JvdXBVbmRvSXRlbS0+QWRkVW5kb0l0ZW0ocEVkaXRVbmRvSXRlbSk7DQotCWVsc2UNCi0Jew0KLQkJbV9VbmRvLkFkZEl0ZW0ocEVkaXRVbmRvSXRlbSk7DQotCQlpZiAobV9iT3ByTm90aWZ5ICYmIG1fcE9wck5vdGlmeSkNCi0JCQltX3BPcHJOb3RpZnktPk9uQWRkVW5kbyhwRWRpdFVuZG9JdGVtKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENGWF9FZGl0OjpBZGRVbmRvSXRlbShJRlhfRWRpdF9VbmRvSXRlbSogcFVuZG9JdGVtKQ0KLXsNCi0JbV9VbmRvLkFkZEl0ZW0ocFVuZG9JdGVtKTsNCi0JaWYgKG1fYk9wck5vdGlmeSAmJiBtX3BPcHJOb3RpZnkpDQotCQltX3BPcHJOb3RpZnktPk9uQWRkVW5kbyhwVW5kb0l0ZW0pOw0KLX0NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGVkaXQvZnhldF9zdHViLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGVkaXQvZnhldF9lZGl0LmgiCisKKyNkZWZpbmUgRlhfRURJVF9VTkRPX01BWElURU0JCQkJMTAwMDAKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDRlhfRWRpdF9JdGVyYXRvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0NGWF9FZGl0X0l0ZXJhdG9yOjpDRlhfRWRpdF9JdGVyYXRvcihDRlhfRWRpdCAqIHBFZGl0LElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yICogcFZUSXRlcmF0b3IpIDogCisJbV9wRWRpdChwRWRpdCksCisJbV9wVlRJdGVyYXRvcihwVlRJdGVyYXRvcikKK3sKK30KKworQ0ZYX0VkaXRfSXRlcmF0b3I6On5DRlhfRWRpdF9JdGVyYXRvcigpCit7Cit9CisKK0ZYX0JPT0wJQ0ZYX0VkaXRfSXRlcmF0b3I6Ok5leHRXb3JkKCkKK3sKKwlBU1NFUlQobV9wVlRJdGVyYXRvciAhPSBOVUxMKTsKKwkKKwlyZXR1cm4gbV9wVlRJdGVyYXRvci0+TmV4dFdvcmQoKTsKK30KKworRlhfQk9PTCBDRlhfRWRpdF9JdGVyYXRvcjo6TmV4dExpbmUoKQoreworCUFTU0VSVChtX3BWVEl0ZXJhdG9yICE9IE5VTEwpOworCisJcmV0dXJuIG1fcFZUSXRlcmF0b3ItPk5leHRMaW5lKCk7Cit9CisKK0ZYX0JPT0wgQ0ZYX0VkaXRfSXRlcmF0b3I6Ok5leHRTZWN0aW9uKCkKK3sKKwlBU1NFUlQobV9wVlRJdGVyYXRvciAhPSBOVUxMKTsKKworCXJldHVybiBtX3BWVEl0ZXJhdG9yLT5OZXh0U2VjdGlvbigpOworfQorCitGWF9CT09MCUNGWF9FZGl0X0l0ZXJhdG9yOjpQcmV2V29yZCgpCit7CisJQVNTRVJUKG1fcFZUSXRlcmF0b3IgIT0gTlVMTCk7CisJCisJcmV0dXJuIG1fcFZUSXRlcmF0b3ItPlByZXZXb3JkKCk7Cit9CisKK0ZYX0JPT0wJQ0ZYX0VkaXRfSXRlcmF0b3I6OlByZXZMaW5lKCkKK3sKKwlBU1NFUlQobV9wVlRJdGVyYXRvciAhPSBOVUxMKTsKKworCXJldHVybiBtX3BWVEl0ZXJhdG9yLT5QcmV2TGluZSgpOworfQorCitGWF9CT09MCUNGWF9FZGl0X0l0ZXJhdG9yOjpQcmV2U2VjdGlvbigpCit7CisJQVNTRVJUKG1fcFZUSXRlcmF0b3IgIT0gTlVMTCk7CisKKwlyZXR1cm4gbV9wVlRJdGVyYXRvci0+UHJldlNlY3Rpb24oKTsKK30KKworRlhfQk9PTCBDRlhfRWRpdF9JdGVyYXRvcjo6R2V0V29yZChDUFZUX1dvcmQgJiB3b3JkKSBjb25zdAoreworCUFTU0VSVChtX3BFZGl0ICE9IE5VTEwpOworCUFTU0VSVChtX3BWVEl0ZXJhdG9yICE9IE5VTEwpOworCisJaWYgKG1fcFZUSXRlcmF0b3ItPkdldFdvcmQod29yZCkpCisJeworCQl3b3JkLnB0V29yZCA9IG1fcEVkaXQtPlZUVG9FZGl0KHdvcmQucHRXb3JkKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIENGWF9FZGl0X0l0ZXJhdG9yOjpHZXRMaW5lKENQVlRfTGluZSAmIGxpbmUpIGNvbnN0Cit7CisJQVNTRVJUKG1fcEVkaXQgIT0gTlVMTCk7CisJQVNTRVJUKG1fcFZUSXRlcmF0b3IgIT0gTlVMTCk7CisKKwlpZiAobV9wVlRJdGVyYXRvci0+R2V0TGluZShsaW5lKSkKKwl7CQkKKwkJbGluZS5wdExpbmUgPSBtX3BFZGl0LT5WVFRvRWRpdChsaW5lLnB0TGluZSk7CisJCXJldHVybiBUUlVFOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBDRlhfRWRpdF9JdGVyYXRvcjo6R2V0U2VjdGlvbihDUFZUX1NlY3Rpb24gJiBzZWN0aW9uKSBjb25zdAoreworCUFTU0VSVChtX3BFZGl0ICE9IE5VTEwpOworCUFTU0VSVChtX3BWVEl0ZXJhdG9yICE9IE5VTEwpOworCisJaWYgKG1fcFZUSXRlcmF0b3ItPkdldFNlY3Rpb24oc2VjdGlvbikpCisJeworCQlzZWN0aW9uLnJjU2VjdGlvbiA9IG1fcEVkaXQtPlZUVG9FZGl0KHNlY3Rpb24ucmNTZWN0aW9uKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCit2b2lkIENGWF9FZGl0X0l0ZXJhdG9yOjpTZXRBdChGWF9JTlQzMiBuV29yZEluZGV4KQoreworCUFTU0VSVChtX3BWVEl0ZXJhdG9yICE9IE5VTEwpOworCisJbV9wVlRJdGVyYXRvci0+U2V0QXQobldvcmRJbmRleCk7Cit9CisKK3ZvaWQgQ0ZYX0VkaXRfSXRlcmF0b3I6OlNldEF0KGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpCit7CisJQVNTRVJUKG1fcFZUSXRlcmF0b3IgIT0gTlVMTCk7CisKKwltX3BWVEl0ZXJhdG9yLT5TZXRBdChwbGFjZSk7Cit9CisKK2NvbnN0IENQVlRfV29yZFBsYWNlICYgQ0ZYX0VkaXRfSXRlcmF0b3I6OkdldEF0KCkgY29uc3QKK3sKKwlBU1NFUlQobV9wVlRJdGVyYXRvciAhPSBOVUxMKTsKKworCXJldHVybiBtX3BWVEl0ZXJhdG9yLT5HZXRBdCgpOworfQorCitJRlhfRWRpdCogQ0ZYX0VkaXRfSXRlcmF0b3I6OkdldEVkaXQoKSBjb25zdAoreworCXJldHVybiBtX3BFZGl0OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZYX0VkaXRfUHJvdmlkZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDRlhfRWRpdF9Qcm92aWRlcjo6Q0ZYX0VkaXRfUHJvdmlkZXIoSUZYX0VkaXRfRm9udE1hcCAqIHBGb250TWFwKSA6IG1fcEZvbnRNYXAocEZvbnRNYXApCit7CisJQVNTRVJUKG1fcEZvbnRNYXAgIT0gTlVMTCk7Cit9CisKK0NGWF9FZGl0X1Byb3ZpZGVyOjp+Q0ZYX0VkaXRfUHJvdmlkZXIoKQoreworfQorCitJRlhfRWRpdF9Gb250TWFwKiBDRlhfRWRpdF9Qcm92aWRlcjo6R2V0Rm9udE1hcCgpCit7CisJcmV0dXJuIG1fcEZvbnRNYXA7Cit9CisKK0ZYX0lOVDMyIENGWF9FZGl0X1Byb3ZpZGVyOjpHZXRDaGFyV2lkdGgoRlhfSU5UMzIgbkZvbnRJbmRleCwgRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBuV29yZFN0eWxlKQoreworCWlmIChDUERGX0ZvbnQqIHBQREZGb250ID0gbV9wRm9udE1hcC0+R2V0UERGRm9udChuRm9udEluZGV4KSkKKwl7CisJCUZYX0RXT1JEIGNoYXJjb2RlID0gd29yZDsKKworCQlpZiAocFBERkZvbnQtPklzVW5pY29kZUNvbXBhdGlibGUoKSkJCQorCQkJY2hhcmNvZGUgPSBwUERGRm9udC0+Q2hhckNvZGVGcm9tVW5pY29kZSh3b3JkKTsJCisJCWVsc2UKKwkJCWNoYXJjb2RlID0gbV9wRm9udE1hcC0+Q2hhckNvZGVGcm9tVW5pY29kZShuRm9udEluZGV4LCB3b3JkKTsKKworCQlpZiAoY2hhcmNvZGUgIT0gLTEpCQkJCisJCQlyZXR1cm4gcFBERkZvbnQtPkdldENoYXJXaWR0aEYoY2hhcmNvZGUpOworCX0KKworCXJldHVybiAwOworfQorCitGWF9JTlQzMiBDRlhfRWRpdF9Qcm92aWRlcjo6R2V0VHlwZUFzY2VudChGWF9JTlQzMiBuRm9udEluZGV4KQoreworCWlmIChDUERGX0ZvbnQqIHBQREZGb250ID0gbV9wRm9udE1hcC0+R2V0UERGRm9udChuRm9udEluZGV4KSkKKwkJcmV0dXJuIHBQREZGb250LT5HZXRUeXBlQXNjZW50KCk7CisKKwlyZXR1cm4gMDsKK30KKworRlhfSU5UMzIgQ0ZYX0VkaXRfUHJvdmlkZXI6OkdldFR5cGVEZXNjZW50KEZYX0lOVDMyIG5Gb250SW5kZXgpCit7CisJaWYgKENQREZfRm9udCogcFBERkZvbnQgPSBtX3BGb250TWFwLT5HZXRQREZGb250KG5Gb250SW5kZXgpKQorCQlyZXR1cm4gcFBERkZvbnQtPkdldFR5cGVEZXNjZW50KCk7CisKKwlyZXR1cm4gMDsKK30KKworRlhfSU5UMzIgQ0ZYX0VkaXRfUHJvdmlkZXI6OkdldFdvcmRGb250SW5kZXgoRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBjaGFyc2V0LCBGWF9JTlQzMiBuRm9udEluZGV4KQoreworCXJldHVybiBtX3BGb250TWFwLT5HZXRXb3JkRm9udEluZGV4KHdvcmQsY2hhcnNldCxuRm9udEluZGV4KTsKK30KKworRlhfSU5UMzIgQ0ZYX0VkaXRfUHJvdmlkZXI6OkdldERlZmF1bHRGb250SW5kZXgoKQoreworCXJldHVybiAwOworfQorCitGWF9CT09MCUNGWF9FZGl0X1Byb3ZpZGVyOjpJc0xhdGluV29yZChGWF9XT1JEIHdvcmQpCit7CisJcmV0dXJuIEZYX0VESVRfSVNMQVRJTldPUkQod29yZCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDRlhfRWRpdF9SZWZyZXNoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDRlhfRWRpdF9SZWZyZXNoOjpDRlhfRWRpdF9SZWZyZXNoKCkKK3sKK30KKworQ0ZYX0VkaXRfUmVmcmVzaDo6fkNGWF9FZGl0X1JlZnJlc2goKQoreworfQorCit2b2lkIENGWF9FZGl0X1JlZnJlc2g6OkJlZ2luUmVmcmVzaCgpCit7CisJbV9SZWZyZXNoUmVjdHMuRW1wdHkoKTsKKwltX09sZExpbmVSZWN0cyA9IG1fTmV3TGluZVJlY3RzOworfQorCit2b2lkIENGWF9FZGl0X1JlZnJlc2g6OlB1c2goY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiBsaW5lcmFuZ2UsY29uc3QgQ1BERl9SZWN0ICYgcmVjdCkKK3sKKwltX05ld0xpbmVSZWN0cy5BZGQobGluZXJhbmdlLHJlY3QpOworfQorCit2b2lkIENGWF9FZGl0X1JlZnJlc2g6Ok5vQW5hbHlzZSgpCit7CisJeworCQlmb3IgKEZYX0lOVDMyIGkgPSAwLCBzeiA9IG1fT2xkTGluZVJlY3RzLkdldFNpemUoKTsgaSA8IHN6OyBpKyspCisJCQlpZiAoQ0ZYX0VkaXRfTGluZVJlY3QgKiBwT2xkUmVjdCA9IG1fT2xkTGluZVJlY3RzLkdldEF0KGkpKQorCQkJCW1fUmVmcmVzaFJlY3RzLkFkZChwT2xkUmVjdC0+bV9yY0xpbmUpOworCX0KKworCXsKKwkJZm9yIChGWF9JTlQzMiBpID0gMCwgc3ogPSBtX05ld0xpbmVSZWN0cy5HZXRTaXplKCk7IGkgPCBzejsgaSsrKQorCQkJaWYgKENGWF9FZGl0X0xpbmVSZWN0ICogcE5ld1JlY3QgPSBtX05ld0xpbmVSZWN0cy5HZXRBdChpKSkKKwkJCQltX1JlZnJlc2hSZWN0cy5BZGQocE5ld1JlY3QtPm1fcmNMaW5lKTsKKwl9Cit9CisKK3ZvaWQgQ0ZYX0VkaXRfUmVmcmVzaDo6QW5hbHlzZShGWF9JTlQzMiBuQWxpZ25tZW50KQoreworCUZYX0JPT0wgYkxpbmVUb3BDaGFuZ2VkID0gRkFMU0U7CisJQ1BERl9SZWN0IHJjUmVzdWx0OworCUZYX0ZMT0FUIGZXaWR0aERpZmY7CisKKwlGWF9JTlQzMiBzek1heCA9IEZYX0VESVRfTUFYKG1fT2xkTGluZVJlY3RzLkdldFNpemUoKSxtX05ld0xpbmVSZWN0cy5HZXRTaXplKCkpOworCUZYX0lOVDMyIGkgPSAwOworCisJd2hpbGUgKGkgPCBzek1heCkKKwl7CisJCUNGWF9FZGl0X0xpbmVSZWN0ICogcE9sZFJlY3QgPSBtX09sZExpbmVSZWN0cy5HZXRBdChpKTsKKwkJQ0ZYX0VkaXRfTGluZVJlY3QgKiBwTmV3UmVjdCA9IG1fTmV3TGluZVJlY3RzLkdldEF0KGkpOworCisJCWlmIChwT2xkUmVjdCkKKwkJeworCQkJaWYgKHBOZXdSZWN0KQorCQkJeworCQkJCWlmIChiTGluZVRvcENoYW5nZWQpCisJCQkJeworCQkJCQlyY1Jlc3VsdCA9IHBPbGRSZWN0LT5tX3JjTGluZTsKKwkJCQkJcmNSZXN1bHQuVW5pb24ocE5ld1JlY3QtPm1fcmNMaW5lKTsKKwkJCQkJbV9SZWZyZXNoUmVjdHMuQWRkKHJjUmVzdWx0KTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJaWYgKCpwTmV3UmVjdCAhPSAqcE9sZFJlY3QpCisJCQkJCXsKKwkJCQkJCWlmICghcE5ld1JlY3QtPklzU2FtZVRvcCgqcE9sZFJlY3QpIHx8ICFwTmV3UmVjdC0+SXNTYW1lSGVpZ2h0KCpwT2xkUmVjdCkpCisJCQkJCQl7CisJCQkJCQkJYkxpbmVUb3BDaGFuZ2VkID0gVFJVRTsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKworCQkJCQkJaWYgKG5BbGlnbm1lbnQgPT0gMCkKKwkJCQkJCXsKKwkJCQkJCQlpZiAocE5ld1JlY3QtPm1fd3JMaW5lLkJlZ2luUG9zICE9IHBPbGRSZWN0LT5tX3dyTGluZS5CZWdpblBvcykKKwkJCQkJCQl7CisJCQkJCQkJCXJjUmVzdWx0ID0gcE9sZFJlY3QtPm1fcmNMaW5lOworCQkJCQkJCQlyY1Jlc3VsdC5VbmlvbihwTmV3UmVjdC0+bV9yY0xpbmUpOworCQkJCQkJCQltX1JlZnJlc2hSZWN0cy5BZGQocmNSZXN1bHQpOwkKKwkJCQkJCQl9CisJCQkJCQkJZWxzZQorCQkJCQkJCXsKKwkJCQkJCQkJaWYgKCFwTmV3UmVjdC0+SXNTYW1lTGVmdCgqcE9sZFJlY3QpKSAKKwkJCQkJCQkJeworCQkJCQkJCQkJcmNSZXN1bHQgPSBwT2xkUmVjdC0+bV9yY0xpbmU7CisJCQkJCQkJCQlyY1Jlc3VsdC5VbmlvbihwTmV3UmVjdC0+bV9yY0xpbmUpOwkJCQkJCQkJCQkKKwkJCQkJCQkJfQorCQkJCQkJCQllbHNlCisJCQkJCQkJCXsKKwkJCQkJCQkJCWZXaWR0aERpZmYgPSBwTmV3UmVjdC0+bV9yY0xpbmUuV2lkdGgoKSAtIHBPbGRSZWN0LT5tX3JjTGluZS5XaWR0aCgpOworCQkJCQkJCQkJcmNSZXN1bHQgPSBwTmV3UmVjdC0+bV9yY0xpbmU7CisJCQkJCQkJCQlpZiAoZldpZHRoRGlmZiA+IDAuMGYpCisJCQkJCQkJCQkJcmNSZXN1bHQubGVmdCA9IHJjUmVzdWx0LnJpZ2h0IC0gZldpZHRoRGlmZjsKKwkJCQkJCQkJCWVsc2UKKwkJCQkJCQkJCXsKKwkJCQkJCQkJCQlyY1Jlc3VsdC5sZWZ0ID0gcmNSZXN1bHQucmlnaHQ7CisJCQkJCQkJCQkJcmNSZXN1bHQucmlnaHQgKz0gKC1mV2lkdGhEaWZmKTsKKwkJCQkJCQkJCX0KKwkJCQkJCQkJfQorCQkJCQkJCQltX1JlZnJlc2hSZWN0cy5BZGQocmNSZXN1bHQpOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsKKwkJCQkJCQlyY1Jlc3VsdCA9IHBPbGRSZWN0LT5tX3JjTGluZTsKKwkJCQkJCQlyY1Jlc3VsdC5VbmlvbihwTmV3UmVjdC0+bV9yY0xpbmUpOworCQkJCQkJCW1fUmVmcmVzaFJlY3RzLkFkZChyY1Jlc3VsdCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQkvL2Rvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQltX1JlZnJlc2hSZWN0cy5BZGQocE9sZFJlY3QtPm1fcmNMaW5lKTsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChwTmV3UmVjdCkKKwkJCXsKKwkJCQltX1JlZnJlc2hSZWN0cy5BZGQocE5ld1JlY3QtPm1fcmNMaW5lKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQkvL2Vycm9yCisJCQl9CisJCX0KKwkJaSsrOworCX0KK30KKwordm9pZCBDRlhfRWRpdF9SZWZyZXNoOjpBZGRSZWZyZXNoKGNvbnN0IENQREZfUmVjdCAmIHJlY3QpCit7CisJbV9SZWZyZXNoUmVjdHMuQWRkKHJlY3QpOworfQorCitjb25zdCBDRlhfRWRpdF9SZWN0QXJyYXkgKiBDRlhfRWRpdF9SZWZyZXNoOjpHZXRSZWZyZXNoUmVjdHMoKSBjb25zdAoreworCXJldHVybiAmbV9SZWZyZXNoUmVjdHM7Cit9CisKK3ZvaWQgQ0ZYX0VkaXRfUmVmcmVzaDo6RW5kUmVmcmVzaCgpCit7CisJbV9SZWZyZXNoUmVjdHMuRW1wdHkoKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDRlhfRWRpdF9VbmRvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ0ZYX0VkaXRfVW5kbzo6Q0ZYX0VkaXRfVW5kbyhGWF9JTlQzMiBuQnVmc2l6ZSkgOiBtX25DdXJVbmRvUG9zKDApLAorCW1fbkJ1ZlNpemUobkJ1ZnNpemUpLAorCW1fYk1vZGlmaWVkKEZBTFNFKSwKKwltX2JWaXJnaW4oVFJVRSksCisJbV9iV29ya2luZyhGQUxTRSkKK3sKK30KKworQ0ZYX0VkaXRfVW5kbzo6fkNGWF9FZGl0X1VuZG8oKQoreworCVJlc2V0KCk7Cit9CisKK0ZYX0JPT0wgQ0ZYX0VkaXRfVW5kbzo6Q2FuVW5kbygpIGNvbnN0Cit7CisJcmV0dXJuIG1fbkN1clVuZG9Qb3MgPiAwOworfQorCit2b2lkIENGWF9FZGl0X1VuZG86OlVuZG8oKQoreworCW1fYldvcmtpbmcgPSBUUlVFOworCisJaWYgKG1fbkN1clVuZG9Qb3MgPiAwKQorCXsKKwkJSUZYX0VkaXRfVW5kb0l0ZW0gKiBwSXRlbSA9IG1fVW5kb0l0ZW1TdGFjay5HZXRBdChtX25DdXJVbmRvUG9zLTEpOworCQlBU1NFUlQocEl0ZW0gIT0gTlVMTCk7CisKKwkJcEl0ZW0tPlVuZG8oKTsKKwkKKwkJbV9uQ3VyVW5kb1Bvcy0tOworCQltX2JNb2RpZmllZCA9IChtX25DdXJVbmRvUG9zICE9IDApOwkJCisJfQorCisJbV9iV29ya2luZyA9IEZBTFNFOworfQorCitGWF9CT09MCUNGWF9FZGl0X1VuZG86OkNhblJlZG8oKSBjb25zdAoreworCXJldHVybiBtX25DdXJVbmRvUG9zIDwgbV9VbmRvSXRlbVN0YWNrLkdldFNpemUoKTsKK30KKwordm9pZCBDRlhfRWRpdF9VbmRvOjpSZWRvKCkKK3sKKwltX2JXb3JraW5nID0gVFJVRTsKKworCUZYX0lOVDMyIG5TdGFja1NpemUgPSBtX1VuZG9JdGVtU3RhY2suR2V0U2l6ZSgpOworCisJaWYgKG1fbkN1clVuZG9Qb3MgPCBuU3RhY2tTaXplKQorCXsKKwkJSUZYX0VkaXRfVW5kb0l0ZW0gKiBwSXRlbSA9IG1fVW5kb0l0ZW1TdGFjay5HZXRBdChtX25DdXJVbmRvUG9zKTsKKwkJQVNTRVJUKHBJdGVtICE9IE5VTEwpOworCisJCXBJdGVtLT5SZWRvKCk7CisKKwkJbV9uQ3VyVW5kb1BvcysrOworCQltX2JNb2RpZmllZCA9IChtX25DdXJVbmRvUG9zICE9IDApOwkJCisJfQorCisJbV9iV29ya2luZyA9IEZBTFNFOworfQorCitGWF9CT09MCUNGWF9FZGl0X1VuZG86OklzV29ya2luZygpIGNvbnN0Cit7CisJcmV0dXJuIG1fYldvcmtpbmc7Cit9CisKK3ZvaWQgQ0ZYX0VkaXRfVW5kbzo6QWRkSXRlbShJRlhfRWRpdF9VbmRvSXRlbSogcEl0ZW0pCit7CisJQVNTRVJUKCFtX2JXb3JraW5nKTsKKwlBU1NFUlQocEl0ZW0gIT0gTlVMTCk7CisJQVNTRVJUKG1fbkJ1ZlNpemUgPiAxKTsKKwkKKwlpZiAobV9uQ3VyVW5kb1BvcyA8IG1fVW5kb0l0ZW1TdGFjay5HZXRTaXplKCkpCisJCVJlbW92ZVRhaWxzKCk7CisKKwlpZiAobV9VbmRvSXRlbVN0YWNrLkdldFNpemUoKSA+PSBtX25CdWZTaXplKQorCXsKKwkJUmVtb3ZlSGVhZHMoKTsJCisJCW1fYlZpcmdpbiA9IEZBTFNFOworCX0KKworCW1fVW5kb0l0ZW1TdGFjay5BZGQocEl0ZW0pOwkKKwltX25DdXJVbmRvUG9zID0gbV9VbmRvSXRlbVN0YWNrLkdldFNpemUoKTsKKworCW1fYk1vZGlmaWVkID0gKG1fbkN1clVuZG9Qb3MgIT0gMCk7Cit9CisKK0ZYX0JPT0wJQ0ZYX0VkaXRfVW5kbzo6SXNNb2RpZmllZCgpIGNvbnN0Cit7CisJaWYgKG1fYlZpcmdpbikKKwkJcmV0dXJuIG1fYk1vZGlmaWVkOworCWVsc2UKKwkJcmV0dXJuIFRSVUU7Cit9CisKK0lGWF9FZGl0X1VuZG9JdGVtKiBDRlhfRWRpdF9VbmRvOjpHZXRJdGVtKEZYX0lOVDMyIG5JbmRleCkKK3sKKwlpZiAobkluZGV4Pj0wICYmIG5JbmRleCA8IG1fVW5kb0l0ZW1TdGFjay5HZXRTaXplKCkpCisJCXJldHVybiBtX1VuZG9JdGVtU3RhY2suR2V0QXQobkluZGV4KTsKKworCXJldHVybiBOVUxMOworfQorCit2b2lkIENGWF9FZGl0X1VuZG86OlJlbW92ZUhlYWRzKCkKK3sKKwlBU1NFUlQobV9VbmRvSXRlbVN0YWNrLkdldFNpemUoKSA+IDEpOworCisJSUZYX0VkaXRfVW5kb0l0ZW0qIHBJdGVtID0gbV9VbmRvSXRlbVN0YWNrLkdldEF0KDApOworCUFTU0VSVChwSXRlbSAhPSBOVUxMKTsKKworCXBJdGVtLT5SZWxlYXNlKCk7CisJbV9VbmRvSXRlbVN0YWNrLlJlbW92ZUF0KDApOworfQorCit2b2lkIENGWF9FZGl0X1VuZG86OlJlbW92ZVRhaWxzKCkKK3sKKwlmb3IgKEZYX0lOVDMyIGkgPSBtX1VuZG9JdGVtU3RhY2suR2V0U2l6ZSgpLTE7IGkgPj0gbV9uQ3VyVW5kb1BvczsgaS0tKQorCXsKKwkJSUZYX0VkaXRfVW5kb0l0ZW0qIHBJdGVtID0gbV9VbmRvSXRlbVN0YWNrLkdldEF0KGkpOworCQlBU1NFUlQocEl0ZW0gIT0gTlVMTCk7CisKKwkJcEl0ZW0tPlJlbGVhc2UoKTsKKwkJbV9VbmRvSXRlbVN0YWNrLlJlbW92ZUF0KGkpOworCX0KK30KKwordm9pZCBDRlhfRWRpdF9VbmRvOjpSZXNldCgpCit7CisJZm9yIChGWF9JTlQzMiBpPTAsIHN6PW1fVW5kb0l0ZW1TdGFjay5HZXRTaXplKCk7IGkgPCBzejsgaSsrKQorCXsKKwkJSUZYX0VkaXRfVW5kb0l0ZW0gKiBwSXRlbSA9IG1fVW5kb0l0ZW1TdGFjay5HZXRBdChpKTsKKwkJQVNTRVJUKHBJdGVtICE9IE5VTEwpOworCisJCXBJdGVtLT5SZWxlYXNlKCk7CisJfQorCW1fbkN1clVuZG9Qb3MgPSAwOworCW1fVW5kb0l0ZW1TdGFjay5SZW1vdmVBbGwoKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZYX0VkaXRfR3JvdXBVbmRvSXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDRlhfRWRpdF9Hcm91cFVuZG9JdGVtOjpDRlhfRWRpdF9Hcm91cFVuZG9JdGVtKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzVGl0bGUpIDogbV9zVGl0bGUoc1RpdGxlKQoreworfQorCitDRlhfRWRpdF9Hcm91cFVuZG9JdGVtOjp+Q0ZYX0VkaXRfR3JvdXBVbmRvSXRlbSgpCit7CisJZm9yIChpbnQgaT0wLHN6PW1fSXRlbXMuR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJeworCQlDRlhfRWRpdF9VbmRvSXRlbSogcFVuZG9JdGVtID0gbV9JdGVtc1tpXTsKKwkJQVNTRVJUKHBVbmRvSXRlbSAhPSBOVUxMKTsKKworCQlwVW5kb0l0ZW0tPlJlbGVhc2UoKTsKKwl9CisKKwltX0l0ZW1zLlJlbW92ZUFsbCgpOworfQorCit2b2lkIENGWF9FZGl0X0dyb3VwVW5kb0l0ZW06OkFkZFVuZG9JdGVtKENGWF9FZGl0X1VuZG9JdGVtKiBwVW5kb0l0ZW0pCit7CisJQVNTRVJUKHBVbmRvSXRlbSAhPSBOVUxMKTsKKworCXBVbmRvSXRlbS0+U2V0Rmlyc3QoRkFMU0UpOworCXBVbmRvSXRlbS0+U2V0TGFzdChGQUxTRSk7CisKKwltX0l0ZW1zLkFkZChwVW5kb0l0ZW0pOworCisJaWYgKG1fc1RpdGxlLklzRW1wdHkoKSkKKwkJbV9zVGl0bGUgPSBwVW5kb0l0ZW0tPkdldFVuZG9UaXRsZSgpOworfQorCit2b2lkIENGWF9FZGl0X0dyb3VwVW5kb0l0ZW06OlVwZGF0ZUl0ZW1zKCkKK3sKKwlpZiAobV9JdGVtcy5HZXRTaXplKCkgPiAwKQorCXsKKwkJQ0ZYX0VkaXRfVW5kb0l0ZW0qIHBGaXJzdEl0ZW0gPSBtX0l0ZW1zWzBdOworCQlBU1NFUlQocEZpcnN0SXRlbSAhPSBOVUxMKTsKKwkJcEZpcnN0SXRlbS0+U2V0Rmlyc3QoVFJVRSk7CisKKwkJQ0ZYX0VkaXRfVW5kb0l0ZW0qIHBMYXN0SXRlbSA9IG1fSXRlbXNbbV9JdGVtcy5HZXRTaXplKCkgLSAxXTsKKwkJQVNTRVJUKHBMYXN0SXRlbSAhPSBOVUxMKTsKKwkJcExhc3RJdGVtLT5TZXRMYXN0KFRSVUUpOworCX0KK30KKwordm9pZCBDRlhfRWRpdF9Hcm91cFVuZG9JdGVtOjpVbmRvKCkKK3sKKwlmb3IgKGludCBpPW1fSXRlbXMuR2V0U2l6ZSgpLTE7IGk+PTA7IGktLSkKKwl7CisJCUNGWF9FZGl0X1VuZG9JdGVtKiBwVW5kb0l0ZW0gPSBtX0l0ZW1zW2ldOworCQlBU1NFUlQocFVuZG9JdGVtICE9IE5VTEwpOworCisJCXBVbmRvSXRlbS0+VW5kbygpOworCX0KK30KKwordm9pZCBDRlhfRWRpdF9Hcm91cFVuZG9JdGVtOjpSZWRvKCkKK3sKKwlmb3IgKGludCBpPTAsc3o9bV9JdGVtcy5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwl7CisJCUNGWF9FZGl0X1VuZG9JdGVtKiBwVW5kb0l0ZW0gPSBtX0l0ZW1zW2ldOworCQlBU1NFUlQocFVuZG9JdGVtICE9IE5VTEwpOworCisJCXBVbmRvSXRlbS0+UmVkbygpOworCX0KK30KKworQ0ZYX1dpZGVTdHJpbmcgQ0ZYX0VkaXRfR3JvdXBVbmRvSXRlbTo6R2V0VW5kb1RpdGxlKCkKK3sKKwlyZXR1cm4gbV9zVGl0bGU7Cit9CisKK3ZvaWQgQ0ZYX0VkaXRfR3JvdXBVbmRvSXRlbTo6UmVsZWFzZSgpCit7CisJZGVsZXRlIHRoaXM7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZYX0VkaXRfVW5kb0l0ZW0gZGVyaXZlZCBjbGFzc2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ0ZYRVVfSW5zZXJ0V29yZDo6Q0ZYRVVfSW5zZXJ0V29yZChDRlhfRWRpdCAqIHBFZGl0LCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwT2xkUGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3BOZXdQbGFjZSwKKwkJCQkJCQkJIEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCwgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzKSAKKwk6IG1fcEVkaXQocEVkaXQpLCBtX3dwT2xkKHdwT2xkUGxhY2UpLCBtX3dwTmV3KHdwTmV3UGxhY2UpLCBtX1dvcmQod29yZCksIG1fbkNoYXJzZXQoY2hhcnNldCksIG1fV29yZFByb3BzKCkKK3sKKwlpZiAocFdvcmRQcm9wcykKKwkJbV9Xb3JkUHJvcHMgPSAqcFdvcmRQcm9wczsKK30KKworQ0ZYRVVfSW5zZXJ0V29yZDo6fkNGWEVVX0luc2VydFdvcmQoKQoreworfQorCit2b2lkIENGWEVVX0luc2VydFdvcmQ6OlJlZG8oKQoreworCWlmIChtX3BFZGl0KQorCXsKKwkJbV9wRWRpdC0+U2VsZWN0Tm9uZSgpOworCQltX3BFZGl0LT5TZXRDYXJldChtX3dwT2xkKTsJCQorCQltX3BFZGl0LT5JbnNlcnRXb3JkKG1fV29yZCxtX25DaGFyc2V0LCZtX1dvcmRQcm9wcyxGQUxTRSxUUlVFKTsKKwl9Cit9CisKK3ZvaWQgQ0ZYRVVfSW5zZXJ0V29yZDo6VW5kbygpCit7CisJaWYgKG1fcEVkaXQpCisJeworCQltX3BFZGl0LT5TZWxlY3ROb25lKCk7CisJCW1fcEVkaXQtPlNldENhcmV0KG1fd3BOZXcpOworCQltX3BFZGl0LT5CYWNrc3BhY2UoRkFMU0UsVFJVRSk7CisJfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDRlhFVV9JbnNlcnRSZXR1cm46OkNGWEVVX0luc2VydFJldHVybihDRlhfRWRpdCAqIHBFZGl0LCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwT2xkUGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3BOZXdQbGFjZSwKKwkJCSBjb25zdCBDUFZUX1NlY1Byb3BzICogcFNlY1Byb3BzLCBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMpIDoKKwkJCW1fcEVkaXQocEVkaXQpLAorCQkJbV93cE9sZCh3cE9sZFBsYWNlKSwKKwkJCW1fd3BOZXcod3BOZXdQbGFjZSksCisJCQltX1NlY1Byb3BzKCksCisJCQltX1dvcmRQcm9wcygpCQkJCQkJCQkJIAoreworCWlmIChwU2VjUHJvcHMpCisJCW1fU2VjUHJvcHMgPSAqcFNlY1Byb3BzOworCWlmIChwV29yZFByb3BzKQorCQltX1dvcmRQcm9wcyA9ICpwV29yZFByb3BzOworfQorCitDRlhFVV9JbnNlcnRSZXR1cm46On5DRlhFVV9JbnNlcnRSZXR1cm4oKQoreworfQorCit2b2lkIENGWEVVX0luc2VydFJldHVybjo6UmVkbygpCit7CisJaWYgKG1fcEVkaXQpCisJeworCQltX3BFZGl0LT5TZWxlY3ROb25lKCk7CisJCW1fcEVkaXQtPlNldENhcmV0KG1fd3BPbGQpOworCQltX3BFZGl0LT5JbnNlcnRSZXR1cm4oJm1fU2VjUHJvcHMsJm1fV29yZFByb3BzLEZBTFNFLFRSVUUpOworCX0KK30KKwordm9pZCBDRlhFVV9JbnNlcnRSZXR1cm46OlVuZG8oKQoreworCWlmIChtX3BFZGl0KQorCXsKKwkJbV9wRWRpdC0+U2VsZWN0Tm9uZSgpOworCQltX3BFZGl0LT5TZXRDYXJldChtX3dwTmV3KTsKKwkJbV9wRWRpdC0+QmFja3NwYWNlKEZBTFNFLFRSVUUpOworCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8vQ0ZYRVVfQmFja3NwYWNlCisKK0NGWEVVX0JhY2tzcGFjZTo6Q0ZYRVVfQmFja3NwYWNlKENGWF9FZGl0ICogcEVkaXQsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3BPbGRQbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cE5ld1BsYWNlLAorCQkJCQkJCSAgIEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCwKKwkJCQkJCQkgICBjb25zdCBDUFZUX1NlY1Byb3BzICYgU2VjUHJvcHMsIGNvbnN0IENQVlRfV29yZFByb3BzICYgV29yZFByb3BzKSA6CisJCQltX3BFZGl0KHBFZGl0KSwKKwkJCW1fd3BPbGQod3BPbGRQbGFjZSksCisJCQltX3dwTmV3KHdwTmV3UGxhY2UpLAorCQkJbV9Xb3JkKHdvcmQpLAorCQkJbV9uQ2hhcnNldChjaGFyc2V0KSwKKwkJCW1fU2VjUHJvcHMoU2VjUHJvcHMpLAorCQkJbV9Xb3JkUHJvcHMoV29yZFByb3BzKQkJCQkJCQkJCSAKK3sKK30KKworQ0ZYRVVfQmFja3NwYWNlOjp+Q0ZYRVVfQmFja3NwYWNlKCkKK3sKK30KKwordm9pZCBDRlhFVV9CYWNrc3BhY2U6OlJlZG8oKQoreworCWlmIChtX3BFZGl0KQorCXsKKwkJbV9wRWRpdC0+U2VsZWN0Tm9uZSgpOworCQltX3BFZGl0LT5TZXRDYXJldChtX3dwT2xkKTsKKwkJbV9wRWRpdC0+QmFja3NwYWNlKEZBTFNFLFRSVUUpOworCX0KK30KKwordm9pZCBDRlhFVV9CYWNrc3BhY2U6OlVuZG8oKQoreworCWlmIChtX3BFZGl0KQorCXsKKwkJbV9wRWRpdC0+U2VsZWN0Tm9uZSgpOworCQltX3BFZGl0LT5TZXRDYXJldChtX3dwTmV3KTsKKwkJaWYgKG1fd3BOZXcuU2VjQ21wKG1fd3BPbGQpICE9IDApCisJCXsKKwkJCW1fcEVkaXQtPkluc2VydFJldHVybigmbV9TZWNQcm9wcywmbV9Xb3JkUHJvcHMsRkFMU0UsVFJVRSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQltX3BFZGl0LT5JbnNlcnRXb3JkKG1fV29yZCxtX25DaGFyc2V0LCZtX1dvcmRQcm9wcyxGQUxTRSxUUlVFKTsKKwkJfQorCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8vQ0ZYRVVfRGVsZXRlCisKK0NGWEVVX0RlbGV0ZTo6Q0ZYRVVfRGVsZXRlKENGWF9FZGl0ICogcEVkaXQsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3BPbGRQbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cE5ld1BsYWNlLAorCQkJCQkJCSAgIEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCwKKwkJCQkJCQkgICBjb25zdCBDUFZUX1NlY1Byb3BzICYgU2VjUHJvcHMsIGNvbnN0IENQVlRfV29yZFByb3BzICYgV29yZFByb3BzLCBGWF9CT09MIGJTZWNFbmQpIDoKKwkJCW1fcEVkaXQocEVkaXQpLAorCQkJbV93cE9sZCh3cE9sZFBsYWNlKSwKKwkJCW1fd3BOZXcod3BOZXdQbGFjZSksCisJCQltX1dvcmQod29yZCksCisJCQltX25DaGFyc2V0KGNoYXJzZXQpLAorCQkJbV9TZWNQcm9wcyhTZWNQcm9wcyksCisJCQltX1dvcmRQcm9wcyhXb3JkUHJvcHMpLAorCQkJbV9iU2VjRW5kKGJTZWNFbmQpCit7Cit9CisKK0NGWEVVX0RlbGV0ZTo6fkNGWEVVX0RlbGV0ZSgpCit7Cit9CisKK3ZvaWQgQ0ZYRVVfRGVsZXRlOjpSZWRvKCkKK3sKKwlpZiAobV9wRWRpdCkKKwl7CisJCW1fcEVkaXQtPlNlbGVjdE5vbmUoKTsKKwkJbV9wRWRpdC0+U2V0Q2FyZXQobV93cE9sZCk7CisJCW1fcEVkaXQtPkRlbGV0ZShGQUxTRSxUUlVFKTsKKwl9Cit9CisKK3ZvaWQgQ0ZYRVVfRGVsZXRlOjpVbmRvKCkKK3sKKwlpZiAobV9wRWRpdCkKKwl7CisJCW1fcEVkaXQtPlNlbGVjdE5vbmUoKTsKKwkJbV9wRWRpdC0+U2V0Q2FyZXQobV93cE5ldyk7CisJCWlmIChtX2JTZWNFbmQpCisJCXsKKwkJCW1fcEVkaXQtPkluc2VydFJldHVybigmbV9TZWNQcm9wcywmbV9Xb3JkUHJvcHMsRkFMU0UsVFJVRSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQltX3BFZGl0LT5JbnNlcnRXb3JkKG1fV29yZCxtX25DaGFyc2V0LCZtX1dvcmRQcm9wcyxGQUxTRSxUUlVFKTsKKwkJfQorCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8vQ0ZYRVVfQ2xlYXIKKworQ0ZYRVVfQ2xlYXI6OkNGWEVVX0NsZWFyKENGWF9FZGl0ICogcEVkaXQsICBjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHdyU2VsLCBjb25zdCBDRlhfV2lkZVN0cmluZyAmIHN3VGV4dCkgOgorCQkJbV9wRWRpdChwRWRpdCksCisJCQltX3dyU2VsKHdyU2VsKSwKKwkJCW1fc3dUZXh0KHN3VGV4dCkKK3sKK30KKworQ0ZYRVVfQ2xlYXI6On5DRlhFVV9DbGVhcigpCit7Cit9CisKK3ZvaWQgQ0ZYRVVfQ2xlYXI6OlJlZG8oKQoreworCWlmIChtX3BFZGl0KQorCXsKKwkJbV9wRWRpdC0+U2VsZWN0Tm9uZSgpOworCQltX3BFZGl0LT5TZXRTZWwobV93clNlbC5CZWdpblBvcyxtX3dyU2VsLkVuZFBvcyk7CisJCW1fcEVkaXQtPkNsZWFyKEZBTFNFLFRSVUUpOworCX0KK30KKwordm9pZCBDRlhFVV9DbGVhcjo6VW5kbygpCit7CisJaWYgKG1fcEVkaXQpCisJeworCQltX3BFZGl0LT5TZWxlY3ROb25lKCk7CisJCW1fcEVkaXQtPlNldENhcmV0KG1fd3JTZWwuQmVnaW5Qb3MpOworCQltX3BFZGl0LT5JbnNlcnRUZXh0KG1fc3dUZXh0LCBERUZBVUxUX0NIQVJTRVQsIE5VTEwsTlVMTCxGQUxTRSxUUlVFKTsKKwkJbV9wRWRpdC0+U2V0U2VsKG1fd3JTZWwuQmVnaW5Qb3MsbV93clNlbC5FbmRQb3MpOworCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8vQ0ZYRVVfQ2xlYXJSaWNoCisKK0NGWEVVX0NsZWFyUmljaDo6Q0ZYRVVfQ2xlYXJSaWNoKENGWF9FZGl0ICogcEVkaXQsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgd3BPbGRQbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cE5ld1BsYWNlLAorCQkJCQkJCSAgIGNvbnN0IENQVlRfV29yZFJhbmdlICYgd3JTZWwsIEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCwKKwkJCQkJCQkgICBjb25zdCBDUFZUX1NlY1Byb3BzICYgU2VjUHJvcHMsIGNvbnN0IENQVlRfV29yZFByb3BzICYgV29yZFByb3BzKSA6CisJCQltX3BFZGl0KHBFZGl0KSwKKwkJCW1fd3BPbGQod3BPbGRQbGFjZSksCisJCQltX3dwTmV3KHdwTmV3UGxhY2UpLAorCQkJbV93clNlbCh3clNlbCksCisJCQltX1dvcmQod29yZCksCisJCQltX25DaGFyc2V0KGNoYXJzZXQpLAorCQkJbV9TZWNQcm9wcyhTZWNQcm9wcyksCisJCQltX1dvcmRQcm9wcyhXb3JkUHJvcHMpCQkJCQkJCQkJIAoreworfQorCitDRlhFVV9DbGVhclJpY2g6On5DRlhFVV9DbGVhclJpY2goKQoreworfQorCit2b2lkIENGWEVVX0NsZWFyUmljaDo6UmVkbygpCit7CisJaWYgKG1fcEVkaXQgJiYgSXNMYXN0KCkpCisJeworCQltX3BFZGl0LT5TZWxlY3ROb25lKCk7CisJCW1fcEVkaXQtPlNldFNlbChtX3dyU2VsLkJlZ2luUG9zLG1fd3JTZWwuRW5kUG9zKTsKKwkJbV9wRWRpdC0+Q2xlYXIoRkFMU0UsVFJVRSk7CisJfQorfQorCit2b2lkIENGWEVVX0NsZWFyUmljaDo6VW5kbygpCit7CisJaWYgKG1fcEVkaXQpCisJeworCQltX3BFZGl0LT5TZWxlY3ROb25lKCk7CisJCW1fcEVkaXQtPlNldENhcmV0KG1fd3BPbGQpOworCQlpZiAobV93cE5ldy5TZWNDbXAobV93cE9sZCkgIT0gMCkKKwkJeworCQkJbV9wRWRpdC0+SW5zZXJ0UmV0dXJuKCZtX1NlY1Byb3BzLCZtX1dvcmRQcm9wcyxGQUxTRSxGQUxTRSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQltX3BFZGl0LT5JbnNlcnRXb3JkKG1fV29yZCxtX25DaGFyc2V0LCZtX1dvcmRQcm9wcyxGQUxTRSxGQUxTRSk7CisJCX0KKworCQlpZiAoSXNGaXJzdCgpKQorCQl7CisJCQltX3BFZGl0LT5QYWludEluc2VydFRleHQobV93clNlbC5CZWdpblBvcyxtX3dyU2VsLkVuZFBvcyk7CisJCQltX3BFZGl0LT5TZXRTZWwobV93clNlbC5CZWdpblBvcyxtX3dyU2VsLkVuZFBvcyk7CisJCX0KKwl9Cit9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLy9DRlhFVV9JbnNlcnRUZXh0CisKK0NGWEVVX0luc2VydFRleHQ6OkNGWEVVX0luc2VydFRleHQoQ0ZYX0VkaXQgKiBwRWRpdCwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cE9sZFBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHdwTmV3UGxhY2UsCisJCQkJCQkJICAgY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJiBzd1RleHQsIEZYX0lOVDMyIGNoYXJzZXQsCisJCQkJCQkJICAgY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzKSA6CisJCQltX3BFZGl0KHBFZGl0KSwKKwkJCW1fd3BPbGQod3BPbGRQbGFjZSksCisJCQltX3dwTmV3KHdwTmV3UGxhY2UpLAorCQkJbV9zd1RleHQoc3dUZXh0KSwKKwkJCW1fbkNoYXJzZXQoY2hhcnNldCksCisJCQltX1NlY1Byb3BzKCksCisJCQltX1dvcmRQcm9wcygpCQkJCQkJCQkJIAoreworCWlmIChwU2VjUHJvcHMpCisJCW1fU2VjUHJvcHMgPSAqcFNlY1Byb3BzOworCWlmIChwV29yZFByb3BzKQorCQltX1dvcmRQcm9wcyA9ICpwV29yZFByb3BzOworfQorCitDRlhFVV9JbnNlcnRUZXh0Ojp+Q0ZYRVVfSW5zZXJ0VGV4dCgpCit7Cit9CisKK3ZvaWQgQ0ZYRVVfSW5zZXJ0VGV4dDo6UmVkbygpCit7CisJaWYgKG1fcEVkaXQgJiYgSXNMYXN0KCkpCisJeworCQltX3BFZGl0LT5TZWxlY3ROb25lKCk7CisJCW1fcEVkaXQtPlNldENhcmV0KG1fd3BPbGQpOworCQltX3BFZGl0LT5JbnNlcnRUZXh0KG1fc3dUZXh0LCBtX25DaGFyc2V0LCZtX1NlY1Byb3BzLCAmbV9Xb3JkUHJvcHMsRkFMU0UsVFJVRSk7CisJfQorfQorCit2b2lkIENGWEVVX0luc2VydFRleHQ6OlVuZG8oKQoreworCWlmIChtX3BFZGl0KQorCXsKKwkJbV9wRWRpdC0+U2VsZWN0Tm9uZSgpOworCQltX3BFZGl0LT5TZXRTZWwobV93cE9sZCxtX3dwTmV3KTsKKwkJbV9wRWRpdC0+Q2xlYXIoRkFMU0UsVFJVRSk7CisJfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDRlhFVV9TZXRTZWNQcm9wczo6Q0ZYRVVfU2V0U2VjUHJvcHMoQ0ZYX0VkaXQgKiBwRWRpdCwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSwgRURJVF9QUk9QU19FIGVwLCAKKwkJY29uc3QgQ1BWVF9TZWNQcm9wcyAmIG9sZHNlY3Byb3BzLCBjb25zdCBDUFZUX1dvcmRQcm9wcyAmIG9sZHdvcmRwcm9wcywgCisJCWNvbnN0IENQVlRfU2VjUHJvcHMgJiBuZXdzZWNwcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgJiBuZXd3b3JkcHJvcHMsIGNvbnN0IENQVlRfV29yZFJhbmdlICYgcmFuZ2UpCisJCTogbV9wRWRpdChwRWRpdCksCisJCW1fd3BQbGFjZShwbGFjZSksCisJCW1fZVByb3BzKGVwKSwKKwkJbV9PbGRTZWNQcm9wcyhvbGRzZWNwcm9wcyksCisJCW1fTmV3U2VjUHJvcHMobmV3c2VjcHJvcHMpLAorCQltX09sZFdvcmRQcm9wcyhvbGR3b3JkcHJvcHMpLAorCQltX05ld1dvcmRQcm9wcyhuZXd3b3JkcHJvcHMpLAorCQltX3dyUGxhY2UocmFuZ2UpCit7Cit9CisKK0NGWEVVX1NldFNlY1Byb3BzOjp+Q0ZYRVVfU2V0U2VjUHJvcHMoKQoreworfQorCit2b2lkIENGWEVVX1NldFNlY1Byb3BzOjpSZWRvKCkKK3sKKwlpZiAobV9wRWRpdCkKKwl7CisJCW1fcEVkaXQtPlNldFNlY1Byb3BzKG1fZVByb3BzLG1fd3BQbGFjZSwmbV9OZXdTZWNQcm9wcywmbV9OZXdXb3JkUHJvcHMsbV93clBsYWNlLEZBTFNFKTsKKwkJaWYgKElzTGFzdCgpKQorCQl7CisJCQltX3BFZGl0LT5TZWxlY3ROb25lKCk7CisJCQltX3BFZGl0LT5QYWludFNldFByb3BzKG1fZVByb3BzLG1fd3JQbGFjZSk7CisJCQltX3BFZGl0LT5TZXRTZWwobV93clBsYWNlLkJlZ2luUG9zLG1fd3JQbGFjZS5FbmRQb3MpOworCQl9CisJfQorfQorCit2b2lkIENGWEVVX1NldFNlY1Byb3BzOjpVbmRvKCkKK3sKKwlpZiAobV9wRWRpdCkKKwl7CisJCW1fcEVkaXQtPlNldFNlY1Byb3BzKG1fZVByb3BzLG1fd3BQbGFjZSwmbV9PbGRTZWNQcm9wcywmbV9PbGRXb3JkUHJvcHMsbV93clBsYWNlLEZBTFNFKTsKKwkJaWYgKElzRmlyc3QoKSkKKwkJeworCQkJbV9wRWRpdC0+U2VsZWN0Tm9uZSgpOworCQkJbV9wRWRpdC0+UGFpbnRTZXRQcm9wcyhtX2VQcm9wcyxtX3dyUGxhY2UpOworCQkJbV9wRWRpdC0+U2V0U2VsKG1fd3JQbGFjZS5CZWdpblBvcyxtX3dyUGxhY2UuRW5kUG9zKTsKKwkJfQorCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ0ZYRVVfU2V0V29yZFByb3BzOjpDRlhFVV9TZXRXb3JkUHJvcHMoQ0ZYX0VkaXQgKiBwRWRpdCwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSwgRURJVF9QUk9QU19FIGVwLCAKKwkJY29uc3QgQ1BWVF9Xb3JkUHJvcHMgJiBvbGRwcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgJiBuZXdwcm9wcywgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiByYW5nZSkKKwkJOiBtX3BFZGl0KHBFZGl0KSwKKwkJbV93cFBsYWNlKHBsYWNlKSwKKwkJbV9lUHJvcHMoZXApLAorCQltX09sZFdvcmRQcm9wcyhvbGRwcm9wcyksCisJCW1fTmV3V29yZFByb3BzKG5ld3Byb3BzKSwKKwkJbV93clBsYWNlKHJhbmdlKQoreworfQorCitDRlhFVV9TZXRXb3JkUHJvcHM6On5DRlhFVV9TZXRXb3JkUHJvcHMoKQoreworfQorCit2b2lkIENGWEVVX1NldFdvcmRQcm9wczo6UmVkbygpCit7CisJaWYgKG1fcEVkaXQpCisJeworCQltX3BFZGl0LT5TZXRXb3JkUHJvcHMobV9lUHJvcHMsbV93cFBsYWNlLCZtX05ld1dvcmRQcm9wcyxtX3dyUGxhY2UsRkFMU0UpOworCQlpZiAoSXNMYXN0KCkpCisJCXsKKwkJCW1fcEVkaXQtPlNlbGVjdE5vbmUoKTsKKwkJCW1fcEVkaXQtPlBhaW50U2V0UHJvcHMobV9lUHJvcHMsbV93clBsYWNlKTsKKwkJCW1fcEVkaXQtPlNldFNlbChtX3dyUGxhY2UuQmVnaW5Qb3MsbV93clBsYWNlLkVuZFBvcyk7CisJCX0KKwl9Cit9CisKK3ZvaWQgQ0ZYRVVfU2V0V29yZFByb3BzOjpVbmRvKCkKK3sKKwlpZiAobV9wRWRpdCkKKwl7CisJCW1fcEVkaXQtPlNldFdvcmRQcm9wcyhtX2VQcm9wcyxtX3dwUGxhY2UsJm1fT2xkV29yZFByb3BzLG1fd3JQbGFjZSxGQUxTRSk7CisJCWlmIChJc0ZpcnN0KCkpCisJCXsKKwkJCW1fcEVkaXQtPlNlbGVjdE5vbmUoKTsKKwkJCW1fcEVkaXQtPlBhaW50U2V0UHJvcHMobV9lUHJvcHMsbV93clBsYWNlKTsKKwkJCW1fcEVkaXQtPlNldFNlbChtX3dyUGxhY2UuQmVnaW5Qb3MsbV93clBsYWNlLkVuZFBvcyk7CisJCX0KKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZYX0VkaXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDRlhfRWRpdDo6Q0ZYX0VkaXQoSVBERl9WYXJpYWJsZVRleHQgKiBwVlQpIDoKKwltX3BWVChwVlQpLAorCW1fcE5vdGlmeShOVUxMKSwKKwltX3BPcHJOb3RpZnkoTlVMTCksCisJbV93cENhcmV0KC0xLC0xLC0xKSwKKwltX3dwT2xkQ2FyZXQoLTEsLTEsLTEpLAorCW1fcHRTY3JvbGxQb3MoMCwwKSwKKwltX3B0UmVmcmVzaFNjcm9sbFBvcygwLDApLAorCW1fYkVuYWJsZVNjcm9sbChGQUxTRSksCisJbV9iRW5hYmxlT3ZlcmZsb3coRkFMU0UpLAorCW1fcFZUUHJvdmlkZShOVUxMKSwKKwltX3BJdGVyYXRvcihOVUxMKSwKKwltX1NlbFN0YXRlKCksCisJbV9wdENhcmV0KDAuMGYsMC4wZiksCisJbV9VbmRvKEZYX0VESVRfVU5ET19NQVhJVEVNKSwKKwltX25BbGlnbm1lbnQoMCksCisJbV9iTm90aWZ5RmxhZyhGQUxTRSksCisJbV9iRW5hYmxlUmVmcmVzaChUUlVFKSwKKwltX3JjT2xkQ29udGVudCgwLjBmLDAuMGYsMC4wZiwwLjBmKSwKKwltX2JFbmFibGVVbmRvKFRSVUUpLAorCW1fYk5vdGlmeShUUlVFKSwKKwltX2JPcHJOb3RpZnkoRkFMU0UpLAorCW1fcEdyb3VwVW5kb0l0ZW0oTlVMTCkKK3sJCisJQVNTRVJUKHBWVCAhPSBOVUxMKTsKK30KKworQ0ZYX0VkaXQ6On5DRlhfRWRpdCgpCit7CisJaWYgKG1fcFZUUHJvdmlkZSkKKwl7CisJCWRlbGV0ZSBtX3BWVFByb3ZpZGU7CisJCW1fcFZUUHJvdmlkZSA9IE5VTEw7CisJfQorCisJaWYgKG1fcEl0ZXJhdG9yKQorCXsKKwkJZGVsZXRlIG1fcEl0ZXJhdG9yOworCQltX3BJdGVyYXRvciA9IE5VTEw7CisJfQorCisJQVNTRVJUKG1fcEdyb3VwVW5kb0l0ZW0gPT0gTlVMTCk7Cit9CisKKy8vIHB1YmxpYyBtZXRob2RzCisKK3ZvaWQgQ0ZYX0VkaXQ6OkluaXRpYWxpemUoKQoreworCW1fcFZULT5Jbml0aWFsaXplKCk7CisJU2V0Q2FyZXQobV9wVlQtPkdldEJlZ2luV29yZFBsYWNlKCkpOworCVNldENhcmV0T3JpZ2luKCk7Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6OlNldEZvbnRNYXAoSUZYX0VkaXRfRm9udE1hcCAqIHBGb250TWFwKQoreworCWlmIChtX3BWVFByb3ZpZGUpIAorCQlkZWxldGUgbV9wVlRQcm92aWRlOworCisJbV9wVlQtPlNldFByb3ZpZGVyKG1fcFZUUHJvdmlkZSA9IG5ldyBDRlhfRWRpdF9Qcm92aWRlcihwRm9udE1hcCkpOworfQorCit2b2lkIENGWF9FZGl0OjpTZXRWVFByb3ZpZGVyKElQREZfVmFyaWFibGVUZXh0X1Byb3ZpZGVyKiBwUHJvdmlkZXIpCit7CisJbV9wVlQtPlNldFByb3ZpZGVyKHBQcm92aWRlcik7Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6OlNldE5vdGlmeShJRlhfRWRpdF9Ob3RpZnkqIHBOb3RpZnkpCit7CisJbV9wTm90aWZ5ID0gcE5vdGlmeTsKK30KKwordm9pZCBDRlhfRWRpdDo6U2V0T3ByTm90aWZ5KElGWF9FZGl0X09wck5vdGlmeSogcE9wck5vdGlmeSkKK3sKKwltX3BPcHJOb3RpZnkgPSBwT3ByTm90aWZ5OworfQorCitJRlhfRWRpdF9JdGVyYXRvciAqIENGWF9FZGl0OjpHZXRJdGVyYXRvcigpCit7CisJaWYgKCFtX3BJdGVyYXRvcikKKwkJbV9wSXRlcmF0b3IgPSBuZXcgQ0ZYX0VkaXRfSXRlcmF0b3IodGhpcyxtX3BWVC0+R2V0SXRlcmF0b3IoKSk7CisKKwlyZXR1cm4gbV9wSXRlcmF0b3I7Cit9CisKK0lQREZfVmFyaWFibGVUZXh0ICoJQ0ZYX0VkaXQ6OkdldFZhcmlhYmxlVGV4dCgpCit7CisJcmV0dXJuIG1fcFZUOworfQorCitJRlhfRWRpdF9Gb250TWFwKiBDRlhfRWRpdDo6R2V0Rm9udE1hcCgpCit7CisJaWYgKG1fcFZUUHJvdmlkZSkKKwkJcmV0dXJuIG1fcFZUUHJvdmlkZS0+R2V0Rm9udE1hcCgpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6OlNldFBsYXRlUmVjdChjb25zdCBDUERGX1JlY3QgJiByZWN0LCBGWF9CT09MIGJQYWludC8qID0gVFJVRSovKQorewkKKwltX3BWVC0+U2V0UGxhdGVSZWN0KHJlY3QpOworCW1fcHRTY3JvbGxQb3MgPSBDUERGX1BvaW50KHJlY3QubGVmdCxyZWN0LnRvcCk7CQkJCisJaWYgKGJQYWludCkgUGFpbnQoKTsKK30KKwordm9pZCBDRlhfRWRpdDo6U2V0QWxpZ25tZW50SChGWF9JTlQzMiBuRm9ybWF0LyogPTAgKi8sIEZYX0JPT0wgYlBhaW50LyogPSBUUlVFKi8pCit7CisJbV9wVlQtPlNldEFsaWdubWVudChuRm9ybWF0KTsKKwlpZiAoYlBhaW50KSBQYWludCgpOworfQorCit2b2lkIENGWF9FZGl0OjpTZXRBbGlnbm1lbnRWKEZYX0lOVDMyIG5Gb3JtYXQvKiA9MCAqLywgRlhfQk9PTCBiUGFpbnQvKiA9IFRSVUUqLykKK3sKKwltX25BbGlnbm1lbnQgPSBuRm9ybWF0OworCWlmIChiUGFpbnQpIFBhaW50KCk7Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6OlNldFBhc3N3b3JkQ2hhcihGWF9XT1JEIHdTdWJXb3JkLyogPScqJyAqLywgRlhfQk9PTCBiUGFpbnQvKiA9IFRSVUUqLykKK3sKKwltX3BWVC0+U2V0UGFzc3dvcmRDaGFyKHdTdWJXb3JkKTsKKwlpZiAoYlBhaW50KSBQYWludCgpOworfQorCit2b2lkIENGWF9FZGl0OjpTZXRMaW1pdENoYXIoRlhfSU5UMzIgbkxpbWl0Q2hhci8qID0wICovLCBGWF9CT09MIGJQYWludC8qID0gVFJVRSovKQoreworCW1fcFZULT5TZXRMaW1pdENoYXIobkxpbWl0Q2hhcik7CisJaWYgKGJQYWludCkgUGFpbnQoKTsKK30KKwordm9pZCBDRlhfRWRpdDo6U2V0Q2hhckFycmF5KEZYX0lOVDMyIG5DaGFyQXJyYXkvKiA9MCAqLywgRlhfQk9PTCBiUGFpbnQvKiA9IFRSVUUqLykKK3sKKwltX3BWVC0+U2V0Q2hhckFycmF5KG5DaGFyQXJyYXkpOworCWlmIChiUGFpbnQpIFBhaW50KCk7Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6OlNldENoYXJTcGFjZShGWF9GTE9BVCBmQ2hhclNwYWNlLyogPTAuMGYgKi8sIEZYX0JPT0wgYlBhaW50LyogPSBUUlVFKi8pCit7CisJbV9wVlQtPlNldENoYXJTcGFjZShmQ2hhclNwYWNlKTsKKwlpZiAoYlBhaW50KSBQYWludCgpOworfQorCit2b2lkIENGWF9FZGl0OjpTZXRIb3J6U2NhbGUoRlhfSU5UMzIgbkhvcnpTY2FsZS8qID0xMDAgKi8sIEZYX0JPT0wgYlBhaW50LyogPSBUUlVFKi8pCit7CisJbV9wVlQtPlNldEhvcnpTY2FsZShuSG9yelNjYWxlKTsKKwlpZiAoYlBhaW50KSBQYWludCgpOworfQorCit2b2lkIENGWF9FZGl0OjpTZXRNdWx0aUxpbmUoRlhfQk9PTCBiTXVsdGlMaW5lLyogPVRSVUUgKi8sIEZYX0JPT0wgYlBhaW50LyogPSBUUlVFKi8pCit7CisJbV9wVlQtPlNldE11bHRpTGluZShiTXVsdGlMaW5lKTsKKwlpZiAoYlBhaW50KSBQYWludCgpOworfQorCit2b2lkIENGWF9FZGl0OjpTZXRBdXRvUmV0dXJuKEZYX0JPT0wgYkF1dG8vKiA9VFJVRSAqLywgRlhfQk9PTCBiUGFpbnQvKiA9IFRSVUUqLykKK3sKKwltX3BWVC0+U2V0QXV0b1JldHVybihiQXV0byk7CisJaWYgKGJQYWludCkgUGFpbnQoKTsKK30KKwordm9pZCBDRlhfRWRpdDo6U2V0TGluZUxlYWRpbmcoRlhfRkxPQVQgZkxpbmVMZWFkaW5nLyogPVRSVUUgKi8sIEZYX0JPT0wgYlBhaW50LyogPSBUUlVFKi8pCit7CisJbV9wVlQtPlNldExpbmVMZWFkaW5nKGZMaW5lTGVhZGluZyk7CisJaWYgKGJQYWludCkgUGFpbnQoKTsKK30KKwordm9pZCBDRlhfRWRpdDo6U2V0QXV0b0ZvbnRTaXplKEZYX0JPT0wgYkF1dG8vKiA9VFJVRSAqLywgRlhfQk9PTCBiUGFpbnQvKiA9IFRSVUUqLykKK3sKKwltX3BWVC0+U2V0QXV0b0ZvbnRTaXplKGJBdXRvKTsKKwlpZiAoYlBhaW50KSBQYWludCgpOworfQorCit2b2lkIENGWF9FZGl0OjpTZXRGb250U2l6ZShGWF9GTE9BVCBmRm9udFNpemUsIEZYX0JPT0wgYlBhaW50LyogPSBUUlVFKi8pCit7CisJbV9wVlQtPlNldEZvbnRTaXplKGZGb250U2l6ZSk7CisJaWYgKGJQYWludCkgUGFpbnQoKTsKK30KKwordm9pZCBDRlhfRWRpdDo6U2V0QXV0b1Njcm9sbChGWF9CT09MIGJBdXRvLyogPVRSVUUgKi8sIEZYX0JPT0wgYlBhaW50LyogPSBUUlVFKi8pCit7CisJbV9iRW5hYmxlU2Nyb2xsID0gYkF1dG87CisJaWYgKGJQYWludCkgUGFpbnQoKTsKK30KKwordm9pZCBDRlhfRWRpdDo6U2V0VGV4dE92ZXJmbG93KEZYX0JPT0wgYkFsbG93ZWQgLyo9IEZBTFNFKi8sIEZYX0JPT0wgYlBhaW50LyogPSBUUlVFKi8pCit7CisJbV9iRW5hYmxlT3ZlcmZsb3cgPSBiQWxsb3dlZDsKKwlpZiAoYlBhaW50KSBQYWludCgpOworfQorCit2b2lkIENGWF9FZGl0OjpTZXRTZWwoRlhfSU5UMzIgblN0YXJ0Q2hhcixGWF9JTlQzMiBuRW5kQ2hhcikKK3sKKwlpZiAobV9wVlQtPklzVmFsaWQoKSkKKwl7CisJCWlmIChuU3RhcnRDaGFyID09IDAgJiYgbkVuZENoYXIgPCAwKQorCQl7CisJCQlTZWxlY3RBbGwoKTsKKwkJfQorCQllbHNlIGlmIChuU3RhcnRDaGFyIDwgMCkKKwkJewkKKwkJCXRoaXMtPlNlbGVjdE5vbmUoKTsKKwkJfQorCQllbHNlCisJCXsJCQorCQkJaWYgKG5TdGFydENoYXIgPCBuRW5kQ2hhcikKKwkJCXsKKwkJCQlTZXRTZWwobV9wVlQtPldvcmRJbmRleFRvV29yZFBsYWNlKG5TdGFydENoYXIpLG1fcFZULT5Xb3JkSW5kZXhUb1dvcmRQbGFjZShuRW5kQ2hhcikpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCVNldFNlbChtX3BWVC0+V29yZEluZGV4VG9Xb3JkUGxhY2UobkVuZENoYXIpLG1fcFZULT5Xb3JkSW5kZXhUb1dvcmRQbGFjZShuU3RhcnRDaGFyKSk7CisJCQl9CisJCX0JCisJfQorfQorCit2b2lkIENGWF9FZGl0OjpTZXRTZWwoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBiZWdpbixjb25zdCBDUFZUX1dvcmRQbGFjZSAmIGVuZCkKK3sKKwlpZiAobV9wVlQtPklzVmFsaWQoKSkKKwl7CisJCVNlbGVjdE5vbmUoKTsKKworCQltX1NlbFN0YXRlLlNldChiZWdpbixlbmQpOworCisJCVNldENhcmV0KG1fU2VsU3RhdGUuRW5kUG9zKTsKKworCQlpZiAobV9TZWxTdGF0ZS5Jc0V4aXN0KCkpCisJCXsKKwkJCVNjcm9sbFRvQ2FyZXQoKTsKKwkJCUNQVlRfV29yZFJhbmdlIHdyKG1fU2VsU3RhdGUuQmVnaW5Qb3MsbV9TZWxTdGF0ZS5FbmRQb3MpOworCQkJUmVmcmVzaChSUF9PUFRJT05BTCwmd3IpOworCQkJU2V0Q2FyZXRJbmZvKCk7CisJCX0KKwkJZWxzZQorCQl7CQkKKwkJCVNjcm9sbFRvQ2FyZXQoKTsKKwkJCVNldENhcmV0SW5mbygpOworCQl9CisJfQorfQorCit2b2lkIENGWF9FZGl0OjpHZXRTZWwoRlhfSU5UMzIgJiBuU3RhcnRDaGFyLCBGWF9JTlQzMiAmIG5FbmRDaGFyKSBjb25zdAoreworCW5TdGFydENoYXIgPSAtMTsKKwluRW5kQ2hhciA9IC0xOworCisJaWYgKG1fcFZULT5Jc1ZhbGlkKCkpCisJeworCQlpZiAobV9TZWxTdGF0ZS5Jc0V4aXN0KCkpCisJCXsKKwkJCWlmIChtX1NlbFN0YXRlLkJlZ2luUG9zLldvcmRDbXAobV9TZWxTdGF0ZS5FbmRQb3MpPDApCisJCQl7CisJCQkJblN0YXJ0Q2hhciA9IG1fcFZULT5Xb3JkUGxhY2VUb1dvcmRJbmRleChtX1NlbFN0YXRlLkJlZ2luUG9zKTsKKwkJCQluRW5kQ2hhciA9IG1fcFZULT5Xb3JkUGxhY2VUb1dvcmRJbmRleChtX1NlbFN0YXRlLkVuZFBvcyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJblN0YXJ0Q2hhciA9IG1fcFZULT5Xb3JkUGxhY2VUb1dvcmRJbmRleChtX1NlbFN0YXRlLkVuZFBvcyk7CisJCQkJbkVuZENoYXIgPSBtX3BWVC0+V29yZFBsYWNlVG9Xb3JkSW5kZXgobV9TZWxTdGF0ZS5CZWdpblBvcyk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQluU3RhcnRDaGFyID0gbV9wVlQtPldvcmRQbGFjZVRvV29yZEluZGV4KG1fd3BDYXJldCk7CisJCQluRW5kQ2hhciA9IG1fcFZULT5Xb3JkUGxhY2VUb1dvcmRJbmRleChtX3dwQ2FyZXQpOworCQl9CisJfQorfQorCitGWF9JTlQzMiBDRlhfRWRpdDo6R2V0Q2FyZXQoKSBjb25zdAoreworCWlmIChtX3BWVC0+SXNWYWxpZCgpKQorCQlyZXR1cm4gbV9wVlQtPldvcmRQbGFjZVRvV29yZEluZGV4KG1fd3BDYXJldCk7CisKKwlyZXR1cm4gLTE7Cit9CisKK0NQVlRfV29yZFBsYWNlIENGWF9FZGl0OjpHZXRDYXJldFdvcmRQbGFjZSgpIGNvbnN0Cit7CisJcmV0dXJuIG1fd3BDYXJldDsKK30KKworQ0ZYX1dpZGVTdHJpbmcgQ0ZYX0VkaXQ6OkdldFRleHQoKSBjb25zdAoreworCUNGWF9XaWRlU3RyaW5nIHN3UmV0OworCisJaWYgKG1fcFZULT5Jc1ZhbGlkKCkpCisJeworCQlpZiAoSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IgKiBwSXRlcmF0b3IgPSBtX3BWVC0+R2V0SXRlcmF0b3IoKSkKKwkJeworCQkJRlhfQk9PTCBiUmljaCA9IG1fcFZULT5Jc1JpY2hUZXh0KCk7CisKKwkJCXBJdGVyYXRvci0+U2V0QXQoMCk7CisKKwkJCUNQVlRfV29yZCB3b3JkaW5mbzsJCisJCQlDUFZUX1dvcmRQbGFjZSBvbGRwbGFjZSA9IHBJdGVyYXRvci0+R2V0QXQoKTsKKwkJCXdoaWxlIChwSXRlcmF0b3ItPk5leHRXb3JkKCkpCisJCQl7CisJCQkJQ1BWVF9Xb3JkUGxhY2UgcGxhY2UgPSBwSXRlcmF0b3ItPkdldEF0KCk7CisKKwkJCQlpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmRpbmZvKSkKKwkJCQl7CisJCQkJCWlmIChiUmljaCkKKwkJCQkJeworCQkJCQkJc3dSZXQgKz0gd29yZGluZm8uV29yZDsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCXN3UmV0ICs9IHdvcmRpbmZvLldvcmQ7CisJCQkJCX0JCQkJCQorCQkJCX0KKworCQkJCWlmIChvbGRwbGFjZS5TZWNDbXAocGxhY2UpICE9IDApCisJCQkJeworCQkJCQlzd1JldCArPSAweDBEOworCQkJCQlzd1JldCArPSAweDBBOworCQkJCX0KKwkJCQkKKwkJCQlvbGRwbGFjZSA9IHBsYWNlOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHN3UmV0OworfQorCitDRlhfV2lkZVN0cmluZyBDRlhfRWRpdDo6R2V0UmFuZ2VUZXh0KGNvbnN0IENQVlRfV29yZFJhbmdlICYgcmFuZ2UpIGNvbnN0Cit7CisJQ0ZYX1dpZGVTdHJpbmcgc3dSZXQ7CisKKwlpZiAobV9wVlQtPklzVmFsaWQoKSkKKwl7CisJCUZYX0JPT0wgYlJpY2ggPSBtX3BWVC0+SXNSaWNoVGV4dCgpOworCisJCWlmIChJUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvciAqIHBJdGVyYXRvciA9IG1fcFZULT5HZXRJdGVyYXRvcigpKQorCQl7CQkJCisJCQlDUFZUX1dvcmRSYW5nZSB3clRlbXAgPSByYW5nZTsKKwkJCW1fcFZULT5VcGRhdGVXb3JkUGxhY2Uod3JUZW1wLkJlZ2luUG9zKTsKKwkJCW1fcFZULT5VcGRhdGVXb3JkUGxhY2Uod3JUZW1wLkVuZFBvcyk7CisJCQlwSXRlcmF0b3ItPlNldEF0KHdyVGVtcC5CZWdpblBvcyk7CisKKwkJCUNQVlRfV29yZCB3b3JkaW5mbzsJCisJCQlDUFZUX1dvcmRQbGFjZSBvbGRwbGFjZSA9IHdyVGVtcC5CZWdpblBvczsKKwkJCXdoaWxlIChwSXRlcmF0b3ItPk5leHRXb3JkKCkpCisJCQl7CisJCQkJQ1BWVF9Xb3JkUGxhY2UgcGxhY2UgPSBwSXRlcmF0b3ItPkdldEF0KCk7CisJCQkJaWYgKHBsYWNlLldvcmRDbXAod3JUZW1wLkVuZFBvcykgPiAwKWJyZWFrOworCisJCQkJaWYgKHBJdGVyYXRvci0+R2V0V29yZCh3b3JkaW5mbykpCisJCQkJeworCQkJCQlpZiAoYlJpY2gpCisJCQkJCXsKKwkJCQkJCXN3UmV0ICs9IHdvcmRpbmZvLldvcmQ7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlzd1JldCArPSB3b3JkaW5mby5Xb3JkOworCQkJCQl9CQkJCQkKKwkJCQl9CisKKwkJCQlpZiAob2xkcGxhY2UuU2VjQ21wKHBsYWNlKSAhPSAwKQorCQkJCXsKKwkJCQkJc3dSZXQgKz0gMHgwRDsKKwkJCQkJc3dSZXQgKz0gMHgwQTsKKwkJCQl9CisJCQkJCisJCQkJb2xkcGxhY2UgPSBwbGFjZTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBzd1JldDsKK30KKworQ0ZYX1dpZGVTdHJpbmcgQ0ZYX0VkaXQ6OkdldFNlbFRleHQoKSBjb25zdAoreworCXJldHVybiBHZXRSYW5nZVRleHQobV9TZWxTdGF0ZS5Db252ZXJ0VG9Xb3JkUmFuZ2UoKSk7Cit9CisKK0ZYX0lOVDMyIENGWF9FZGl0OjpHZXRUb3RhbFdvcmRzKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9wVlQtPkdldFRvdGFsV29yZHMoKTsKK30KKworRlhfSU5UMzIgQ0ZYX0VkaXQ6OkdldFRvdGFsTGluZXMoKSBjb25zdAoreworCUZYX0lOVDMyIG5MaW5lcyA9IDA7CisKKwlpZiAoSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IgKiBwSXRlcmF0b3IgPSBtX3BWVC0+R2V0SXRlcmF0b3IoKSkKKwl7CisJCXBJdGVyYXRvci0+U2V0QXQoMCk7CisJCXdoaWxlIChwSXRlcmF0b3ItPk5leHRMaW5lKCkpCisJCQluTGluZXMrKzsKKwl9CisKKwlyZXR1cm4gbkxpbmVzKzE7Cit9CisKK0NQVlRfV29yZFJhbmdlIENGWF9FZGl0OjpHZXRTZWxlY3RXb3JkUmFuZ2UoKSBjb25zdAoreworCXJldHVybiBtX1NlbFN0YXRlLkNvbnZlcnRUb1dvcmRSYW5nZSgpOworfQorCitDUFZUX1dvcmRSYW5nZSBDRlhfRWRpdDo6Q29tYmluZVdvcmRSYW5nZShjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHdyMSwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiB3cjIpCit7CisJQ1BWVF9Xb3JkUmFuZ2Ugd3JSZXQ7CisKKwlpZiAod3IxLkJlZ2luUG9zLldvcmRDbXAod3IyLkJlZ2luUG9zKSA8IDApCisJeworCQl3clJldC5CZWdpblBvcyA9IHdyMS5CZWdpblBvczsKKwl9CisJZWxzZQorCXsKKwkJd3JSZXQuQmVnaW5Qb3MgPSB3cjIuQmVnaW5Qb3M7CisJfQorCisJaWYgKHdyMS5FbmRQb3MuV29yZENtcCh3cjIuRW5kUG9zKSA8IDApCisJeworCQl3clJldC5FbmRQb3MgPSB3cjIuRW5kUG9zOworCX0KKwllbHNlCisJeworCQl3clJldC5FbmRQb3MgPSB3cjEuRW5kUG9zOworCX0KKworCXJldHVybiB3clJldDsKK30KKworRlhfQk9PTAlDRlhfRWRpdDo6SXNSaWNoVGV4dCgpIGNvbnN0Cit7CisJcmV0dXJuIG1fcFZULT5Jc1JpY2hUZXh0KCk7Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6OlNldFJpY2hUZXh0KEZYX0JPT0wgYlJpY2hUZXh0LyogPVRSVUUgKi8sIEZYX0JPT0wgYlBhaW50LyogPSBUUlVFKi8pCit7CisJbV9wVlQtPlNldFJpY2hUZXh0KGJSaWNoVGV4dCk7CisJaWYgKGJQYWludCkgUGFpbnQoKTsKK30KKworRlhfQk9PTCBDRlhfRWRpdDo6U2V0UmljaEZvbnRJbmRleChGWF9JTlQzMiBuRm9udEluZGV4KQoreworCUNQVlRfV29yZFByb3BzIFdvcmRQcm9wczsKKwlXb3JkUHJvcHMubkZvbnRJbmRleCA9IG5Gb250SW5kZXg7CisJcmV0dXJuIFNldFJpY2hUZXh0UHJvcHMoRVBfRk9OVElOREVYLE5VTEwsJldvcmRQcm9wcyk7CQorfQorCitGWF9CT09MIENGWF9FZGl0OjpTZXRSaWNoRm9udFNpemUoRlhfRkxPQVQgZkZvbnRTaXplKQorewkKKwlDUFZUX1dvcmRQcm9wcyBXb3JkUHJvcHM7CisJV29yZFByb3BzLmZGb250U2l6ZSA9IGZGb250U2l6ZTsKKwlyZXR1cm4gU2V0UmljaFRleHRQcm9wcyhFUF9GT05UU0laRSxOVUxMLCZXb3JkUHJvcHMpOwkKK30KKworRlhfQk9PTCBDRlhfRWRpdDo6U2V0UmljaFRleHRDb2xvcihGWF9DT0xPUlJFRiBkd0NvbG9yKQoreworCUNQVlRfV29yZFByb3BzIFdvcmRQcm9wczsKKwlXb3JkUHJvcHMuZHdXb3JkQ29sb3IgPSBkd0NvbG9yOworCXJldHVybiBTZXRSaWNoVGV4dFByb3BzKEVQX1dPUkRDT0xPUixOVUxMLCZXb3JkUHJvcHMpOwkKK30KKworRlhfQk9PTCBDRlhfRWRpdDo6U2V0UmljaFRleHRTY3JpcHQoRlhfSU5UMzIgblNjcmlwdFR5cGUpCit7CisJQ1BWVF9Xb3JkUHJvcHMgV29yZFByb3BzOworCVdvcmRQcm9wcy5uU2NyaXB0VHlwZSA9IG5TY3JpcHRUeXBlOworCXJldHVybiBTZXRSaWNoVGV4dFByb3BzKEVQX1NDUklQVFRZUEUsTlVMTCwmV29yZFByb3BzKTsJCit9CisKK0ZYX0JPT0wgQ0ZYX0VkaXQ6OlNldFJpY2hUZXh0Qm9sZChGWF9CT09MIGJCb2xkKQoreworCUNQVlRfV29yZFByb3BzIFdvcmRQcm9wczsKKwlpZiAoYkJvbGQpCisJCVdvcmRQcm9wcy5uV29yZFN0eWxlIHw9IFBWVFdPUkRfU1RZTEVfQk9MRDsKKwlyZXR1cm4gU2V0UmljaFRleHRQcm9wcyhFUF9CT0xELE5VTEwsJldvcmRQcm9wcyk7Cit9CisKK0ZYX0JPT0wgQ0ZYX0VkaXQ6OlNldFJpY2hUZXh0SXRhbGljKEZYX0JPT0wgYkl0YWxpYykKK3sKKwlDUFZUX1dvcmRQcm9wcyBXb3JkUHJvcHM7CisJaWYgKGJJdGFsaWMpCisJCVdvcmRQcm9wcy5uV29yZFN0eWxlIHw9IFBWVFdPUkRfU1RZTEVfSVRBTElDOworCXJldHVybiBTZXRSaWNoVGV4dFByb3BzKEVQX0lUQUxJQyxOVUxMLCZXb3JkUHJvcHMpOworfQorCitGWF9CT09MIENGWF9FZGl0OjpTZXRSaWNoVGV4dFVuZGVybGluZShGWF9CT09MIGJVbmRlcmxpbmUpCit7CisJQ1BWVF9Xb3JkUHJvcHMgV29yZFByb3BzOworCWlmIChiVW5kZXJsaW5lKQorCQlXb3JkUHJvcHMubldvcmRTdHlsZSB8PSBQVlRXT1JEX1NUWUxFX1VOREVSTElORTsKKwlyZXR1cm4gU2V0UmljaFRleHRQcm9wcyhFUF9VTkRFUkxJTkUsTlVMTCwmV29yZFByb3BzKTsKK30KKworRlhfQk9PTCBDRlhfRWRpdDo6U2V0UmljaFRleHRDcm9zc291dChGWF9CT09MIGJDcm9zc291dCkKK3sKKwlDUFZUX1dvcmRQcm9wcyBXb3JkUHJvcHM7CisJaWYgKGJDcm9zc291dCkKKwkJV29yZFByb3BzLm5Xb3JkU3R5bGUgfD0gUFZUV09SRF9TVFlMRV9DUk9TU09VVDsKKwlyZXR1cm4gU2V0UmljaFRleHRQcm9wcyhFUF9DUk9TU09VVCxOVUxMLCZXb3JkUHJvcHMpOworfQorCitGWF9CT09MIENGWF9FZGl0OjpTZXRSaWNoVGV4dENoYXJTcGFjZShGWF9GTE9BVCBmQ2hhclNwYWNlKQoreworCUNQVlRfV29yZFByb3BzIFdvcmRQcm9wczsKKwlXb3JkUHJvcHMuZkNoYXJTcGFjZSA9IGZDaGFyU3BhY2U7CisJcmV0dXJuIFNldFJpY2hUZXh0UHJvcHMoRVBfQ0hBUlNQQUNFLE5VTEwsJldvcmRQcm9wcyk7CQorfQorCitGWF9CT09MIENGWF9FZGl0OjpTZXRSaWNoVGV4dEhvcnpTY2FsZShGWF9JTlQzMiBuSG9yelNjYWxlIC8qPSAxMDAqLykKK3sKKwlDUFZUX1dvcmRQcm9wcyBXb3JkUHJvcHM7CisJV29yZFByb3BzLm5Ib3J6U2NhbGUgPSBuSG9yelNjYWxlOworCXJldHVybiBTZXRSaWNoVGV4dFByb3BzKEVQX0hPUlpTQ0FMRSxOVUxMLCZXb3JkUHJvcHMpOwkKK30KKworRlhfQk9PTCBDRlhfRWRpdDo6U2V0UmljaFRleHRMaW5lTGVhZGluZyhGWF9GTE9BVCBmTGluZUxlYWRpbmcpCit7CisJQ1BWVF9TZWNQcm9wcyBTZWNQcm9wczsKKwlTZWNQcm9wcy5mTGluZUxlYWRpbmcgPSBmTGluZUxlYWRpbmc7CisJcmV0dXJuIFNldFJpY2hUZXh0UHJvcHMoRVBfTElORUxFQURJTkcsJlNlY1Byb3BzLE5VTEwpOwkKK30KKworRlhfQk9PTCBDRlhfRWRpdDo6U2V0UmljaFRleHRMaW5lSW5kZW50KEZYX0ZMT0FUIGZMaW5lSW5kZW50KQoreworCUNQVlRfU2VjUHJvcHMgU2VjUHJvcHM7CisJU2VjUHJvcHMuZkxpbmVJbmRlbnQgPSBmTGluZUluZGVudDsKKwlyZXR1cm4gU2V0UmljaFRleHRQcm9wcyhFUF9MSU5FSU5ERU5ULCZTZWNQcm9wcyxOVUxMKTsKK30KKworRlhfQk9PTAlDRlhfRWRpdDo6U2V0UmljaFRleHRBbGlnbm1lbnQoRlhfSU5UMzIgbkFsaWdubWVudCkKK3sKKwlDUFZUX1NlY1Byb3BzIFNlY1Byb3BzOworCVNlY1Byb3BzLm5BbGlnbm1lbnQgPSBuQWxpZ25tZW50OworCXJldHVybiBTZXRSaWNoVGV4dFByb3BzKEVQX0FMSUdOTUVOVCwmU2VjUHJvcHMsTlVMTCk7Cit9CisKK0ZYX0JPT0wgQ0ZYX0VkaXQ6OlNldFJpY2hUZXh0UHJvcHMoRURJVF9QUk9QU19FIGVQcm9wcywgY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzKQoreworCUZYX0JPT0wgYlNldCA9IEZBTFNFOworCUZYX0JPT0wgYlNldDEsYlNldDI7CisJaWYgKG1fcFZULT5Jc1ZhbGlkKCkgJiYgbV9wVlQtPklzUmljaFRleHQoKSkKKwl7CisJCWlmIChJUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvciAqIHBJdGVyYXRvciA9IG1fcFZULT5HZXRJdGVyYXRvcigpKQorCQl7CisJCQlDUFZUX1dvcmRSYW5nZSB3clRlbXAgPSBtX1NlbFN0YXRlLkNvbnZlcnRUb1dvcmRSYW5nZSgpOworCQkJCisJCQltX3BWVC0+VXBkYXRlV29yZFBsYWNlKHdyVGVtcC5CZWdpblBvcyk7CisJCQltX3BWVC0+VXBkYXRlV29yZFBsYWNlKHdyVGVtcC5FbmRQb3MpOworCQkJcEl0ZXJhdG9yLT5TZXRBdCh3clRlbXAuQmVnaW5Qb3MpOworCisJCQlCZWdpbkdyb3VwVW5kbyhMIiIpOzsKKworCQkJYlNldCA9IFNldFNlY1Byb3BzKGVQcm9wcyx3clRlbXAuQmVnaW5Qb3MscFNlY1Byb3BzLHBXb3JkUHJvcHMsd3JUZW1wLFRSVUUpOworCisJCQl3aGlsZSAocEl0ZXJhdG9yLT5OZXh0V29yZCgpKQorCQkJeworCQkJCUNQVlRfV29yZFBsYWNlIHBsYWNlID0gcEl0ZXJhdG9yLT5HZXRBdCgpOworCQkJCWlmIChwbGFjZS5Xb3JkQ21wKHdyVGVtcC5FbmRQb3MpID4gMCkgYnJlYWs7CisJCQkJYlNldDEgPSBTZXRTZWNQcm9wcyhlUHJvcHMscGxhY2UscFNlY1Byb3BzLHBXb3JkUHJvcHMsd3JUZW1wLFRSVUUpOworCQkJCWJTZXQyID0gU2V0V29yZFByb3BzKGVQcm9wcyxwbGFjZSxwV29yZFByb3BzLHdyVGVtcCxUUlVFKTsKKwkJCQkKKwkJCQlpZiAoIWJTZXQpCisJCQkJCWJTZXQgPSAoYlNldDEgfHwgYlNldDIpOworCQkJfQorCisJCQlFbmRHcm91cFVuZG8oKTsKKworCQkJaWYgKGJTZXQpCisJCQl7CisJCQkJUGFpbnRTZXRQcm9wcyhlUHJvcHMsd3JUZW1wKTsKKwkJCX0KKwkJfQorCX0JCisKKwlyZXR1cm4gYlNldDsKK30KKwordm9pZCBDRlhfRWRpdDo6UGFpbnRTZXRQcm9wcyhFRElUX1BST1BTX0UgZVByb3BzLCBjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHdyKQoreworCXN3aXRjaChlUHJvcHMpCisJeworCWNhc2UgRVBfTElORUxFQURJTkc6CisJY2FzZSBFUF9MSU5FSU5ERU5UOgorCWNhc2UgRVBfQUxJR05NRU5UOgorCQlSZWFycmFuZ2VQYXJ0KHdyKTsKKwkJU2Nyb2xsVG9DYXJldCgpOworCQlSZWZyZXNoKFJQX0FOQUxZU0UpOworCQlTZXRDYXJldE9yaWdpbigpOworCQlTZXRDYXJldEluZm8oKTsJCisJCWJyZWFrOwkJCQkJCisJY2FzZSBFUF9XT1JEQ09MT1I6CisJY2FzZSBFUF9VTkRFUkxJTkU6CisJY2FzZSBFUF9DUk9TU09VVDoKKwkJUmVmcmVzaChSUF9PUFRJT05BTCwmd3IpOworCQlicmVhazsKKwljYXNlIEVQX0ZPTlRJTkRFWDoKKwljYXNlIEVQX0ZPTlRTSVpFOgorCWNhc2UgRVBfU0NSSVBUVFlQRToJCQkJCQorCWNhc2UgRVBfQ0hBUlNQQUNFOgorCWNhc2UgRVBfSE9SWlNDQUxFOgorCWNhc2UgRVBfQk9MRDoKKwljYXNlIEVQX0lUQUxJQzoKKwkJUmVhcnJhbmdlUGFydCh3cik7CisJCVNjcm9sbFRvQ2FyZXQoKTsKKworCQlDUFZUX1dvcmRSYW5nZSB3clJlZnJlc2gobV9wVlQtPkdldFNlY3Rpb25CZWdpblBsYWNlKHdyLkJlZ2luUG9zKSwKKwkJCW1fcFZULT5HZXRTZWN0aW9uRW5kUGxhY2Uod3IuRW5kUG9zKSk7CisJCVJlZnJlc2goUlBfQU5BTFlTRSwmd3JSZWZyZXNoKTsKKworCQlTZXRDYXJldE9yaWdpbigpOworCQlTZXRDYXJldEluZm8oKTsJCisJCWJyZWFrOworCX0JCQkJCit9CisKK0ZYX0JPT0wgQ0ZYX0VkaXQ6OlNldFNlY1Byb3BzKEVESVRfUFJPUFNfRSBlUHJvcHMsIGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UsIAorCQkJCQkJCSAgIGNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMsIGNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcywgCisJCQkJCQkJICAgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiB3ciwgRlhfQk9PTCBiQWRkVW5kbykKK3sKKwlpZiAobV9wVlQtPklzVmFsaWQoKSAmJiBtX3BWVC0+SXNSaWNoVGV4dCgpKQorCXsKKwkJaWYgKElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yICogcEl0ZXJhdG9yID0gbV9wVlQtPkdldEl0ZXJhdG9yKCkpCisJCXsKKwkJCUZYX0JPT0wgYlNldCA9IEZBTFNFOworCQkJQ1BWVF9TZWN0aW9uIHNlY2luZm87CisJCQlDUFZUX1NlY3Rpb24gT2xkU2VjaW5mbzsKKworCQkJQ1BWVF9Xb3JkUGxhY2Ugb2xkcGxhY2UgPSBwSXRlcmF0b3ItPkdldEF0KCk7CisKKwkJCWlmIChlUHJvcHMgPT0gRVBfTElORUxFQURJTkcgfHwgZVByb3BzID09IEVQX0xJTkVJTkRFTlQgfHwgZVByb3BzID09IEVQX0FMSUdOTUVOVCkKKwkJCXsKKwkJCQlpZiAocFNlY1Byb3BzKQorCQkJCXsKKwkJCQkJcEl0ZXJhdG9yLT5TZXRBdChwbGFjZSk7CisJCQkJCWlmIChwSXRlcmF0b3ItPkdldFNlY3Rpb24oc2VjaW5mbykpCisJCQkJCXsKKwkJCQkJCWlmIChiQWRkVW5kbykgT2xkU2VjaW5mbyA9IHNlY2luZm87CisKKwkJCQkJCXN3aXRjaChlUHJvcHMpCisJCQkJCQl7CisJCQkJCQljYXNlIEVQX0xJTkVMRUFESU5HOgkJCQkKKwkJCQkJCQlpZiAoIUZYX0VESVRfSXNGbG9hdEVxdWFsKHNlY2luZm8uU2VjUHJvcHMuZkxpbmVMZWFkaW5nLHBTZWNQcm9wcy0+ZkxpbmVMZWFkaW5nKSkKKwkJCQkJCQl7CisJCQkJCQkJCXNlY2luZm8uU2VjUHJvcHMuZkxpbmVMZWFkaW5nID0gcFNlY1Byb3BzLT5mTGluZUxlYWRpbmc7CQkJCQkJCQorCQkJCQkJCQliU2V0ID0gVFJVRTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIEVQX0xJTkVJTkRFTlQ6CisJCQkJCQkJaWYgKCFGWF9FRElUX0lzRmxvYXRFcXVhbChzZWNpbmZvLlNlY1Byb3BzLmZMaW5lSW5kZW50LHBTZWNQcm9wcy0+ZkxpbmVJbmRlbnQpKQorCQkJCQkJCXsKKwkJCQkJCQkJc2VjaW5mby5TZWNQcm9wcy5mTGluZUluZGVudCA9IHBTZWNQcm9wcy0+ZkxpbmVJbmRlbnQ7CisJCQkJCQkJCWJTZXQgPSBUUlVFOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgRVBfQUxJR05NRU5UOgorCQkJCQkJCWlmIChzZWNpbmZvLlNlY1Byb3BzLm5BbGlnbm1lbnQgIT0gcFNlY1Byb3BzLT5uQWxpZ25tZW50KQorCQkJCQkJCXsKKwkJCQkJCQkJc2VjaW5mby5TZWNQcm9wcy5uQWxpZ25tZW50ID0gcFNlY1Byb3BzLT5uQWxpZ25tZW50OworCQkJCQkJCQliU2V0ID0gVFJVRTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQlkZWZhdWx0OgorCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmIChwV29yZFByb3BzICYmIHBsYWNlID09IG1fcFZULT5HZXRTZWN0aW9uQmVnaW5QbGFjZShwbGFjZSkpCisJCQkJeworCQkJCQlwSXRlcmF0b3ItPlNldEF0KHBsYWNlKTsKKwkJCQkJaWYgKHBJdGVyYXRvci0+R2V0U2VjdGlvbihzZWNpbmZvKSkKKwkJCQkJeworCQkJCQkJaWYgKGJBZGRVbmRvKSBPbGRTZWNpbmZvID0gc2VjaW5mbzsKKworCQkJCQkJc3dpdGNoKGVQcm9wcykKKwkJCQkJCXsKKwkJCQkJCWNhc2UgRVBfRk9OVElOREVYOgkJCQkKKwkJCQkJCQlpZiAoc2VjaW5mby5Xb3JkUHJvcHMubkZvbnRJbmRleCAhPSBwV29yZFByb3BzLT5uRm9udEluZGV4KQorCQkJCQkJCXsKKwkJCQkJCQkJc2VjaW5mby5Xb3JkUHJvcHMubkZvbnRJbmRleCA9IHBXb3JkUHJvcHMtPm5Gb250SW5kZXg7CisJCQkJCQkJCWJTZXQgPSBUUlVFOworCQkJCQkJCX0KKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgRVBfRk9OVFNJWkU6CisJCQkJCQkJaWYgKCFGWF9FRElUX0lzRmxvYXRFcXVhbChzZWNpbmZvLldvcmRQcm9wcy5mRm9udFNpemUscFdvcmRQcm9wcy0+ZkZvbnRTaXplKSkKKwkJCQkJCQl7CisJCQkJCQkJCXNlY2luZm8uV29yZFByb3BzLmZGb250U2l6ZSA9IHBXb3JkUHJvcHMtPmZGb250U2l6ZTsKKwkJCQkJCQkJYlNldCA9IFRSVUU7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSBFUF9XT1JEQ09MT1I6CisJCQkJCQkJaWYgKHNlY2luZm8uV29yZFByb3BzLmR3V29yZENvbG9yICE9IHBXb3JkUHJvcHMtPmR3V29yZENvbG9yKQorCQkJCQkJCXsKKwkJCQkJCQkJc2VjaW5mby5Xb3JkUHJvcHMuZHdXb3JkQ29sb3IgPSBwV29yZFByb3BzLT5kd1dvcmRDb2xvcjsKKwkJCQkJCQkJYlNldCA9IFRSVUU7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSBFUF9TQ1JJUFRUWVBFOgkJCQkKKwkJCQkJCQlpZiAoc2VjaW5mby5Xb3JkUHJvcHMublNjcmlwdFR5cGUgIT0gcFdvcmRQcm9wcy0+blNjcmlwdFR5cGUpCisJCQkJCQkJeworCQkJCQkJCQlzZWNpbmZvLldvcmRQcm9wcy5uU2NyaXB0VHlwZSA9IHBXb3JkUHJvcHMtPm5TY3JpcHRUeXBlOworCQkJCQkJCQliU2V0ID0gVFJVRTsKKwkJCQkJCQl9CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIEVQX0NIQVJTUEFDRToJCQkKKwkJCQkJCQlpZiAoIUZYX0VESVRfSXNGbG9hdEVxdWFsKHNlY2luZm8uV29yZFByb3BzLmZDaGFyU3BhY2UscFdvcmRQcm9wcy0+ZkNoYXJTcGFjZSkpCisJCQkJCQkJeworCQkJCQkJCQlzZWNpbmZvLldvcmRQcm9wcy5mQ2hhclNwYWNlID0gcFdvcmRQcm9wcy0+ZkNoYXJTcGFjZTsKKwkJCQkJCQkJYlNldCA9IFRSVUU7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSBFUF9IT1JaU0NBTEU6CQkJCQorCQkJCQkJCWlmIChzZWNpbmZvLldvcmRQcm9wcy5uSG9yelNjYWxlICE9IHBXb3JkUHJvcHMtPm5Ib3J6U2NhbGUpCisJCQkJCQkJeworCQkJCQkJCQlzZWNpbmZvLldvcmRQcm9wcy5uSG9yelNjYWxlID0gcFdvcmRQcm9wcy0+bkhvcnpTY2FsZTsKKwkJCQkJCQkJYlNldCA9IFRSVUU7CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSBFUF9VTkRFUkxJTkU6CisJCQkJCQkJaWYgKHBXb3JkUHJvcHMtPm5Xb3JkU3R5bGUgJiBQVlRXT1JEX1NUWUxFX1VOREVSTElORSkKKwkJCQkJCQl7CisJCQkJCQkJCWlmICgoc2VjaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfVU5ERVJMSU5FKSA9PSAwKQorCQkJCQkJCQl7CisJCQkJCQkJCQlzZWNpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlIHw9IFBWVFdPUkRfU1RZTEVfVU5ERVJMSU5FOyAKKwkJCQkJCQkJCWJTZXQgPSBUUlVFOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWVsc2UKKwkJCQkJCQl7CisJCQkJCQkJCWlmICgoc2VjaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfVU5ERVJMSU5FKSAhPSAwKQorCQkJCQkJCQl7CisJCQkJCQkJCQlzZWNpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlICY9IH5QVlRXT1JEX1NUWUxFX1VOREVSTElORTsKKwkJCQkJCQkJCWJTZXQgPSBUUlVFOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSBFUF9DUk9TU09VVDoKKwkJCQkJCQlpZiAocFdvcmRQcm9wcy0+bldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfQ1JPU1NPVVQpCisJCQkJCQkJeworCQkJCQkJCQlpZiAoKHNlY2luZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgJiBQVlRXT1JEX1NUWUxFX0NST1NTT1VUKSA9PSAwKQorCQkJCQkJCQl7CisJCQkJCQkJCQlzZWNpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlIHw9IFBWVFdPUkRfU1RZTEVfQ1JPU1NPVVQ7IAorCQkJCQkJCQkJYlNldCA9IFRSVUU7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJZWxzZQorCQkJCQkJCXsKKwkJCQkJCQkJaWYgKChzZWNpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlICYgUFZUV09SRF9TVFlMRV9DUk9TU09VVCkgIT0gMCkKKwkJCQkJCQkJeworCQkJCQkJCQkJc2VjaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSAmPSB+UFZUV09SRF9TVFlMRV9DUk9TU09VVDsKKwkJCQkJCQkJCWJTZXQgPSBUUlVFOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSBFUF9CT0xEOgorCQkJCQkJCWlmIChwV29yZFByb3BzLT5uV29yZFN0eWxlICYgUFZUV09SRF9TVFlMRV9CT0xEKQorCQkJCQkJCXsKKwkJCQkJCQkJaWYgKChzZWNpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlICYgUFZUV09SRF9TVFlMRV9CT0xEKSA9PSAwKQorCQkJCQkJCQl7CisJCQkJCQkJCQlzZWNpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlIHw9IFBWVFdPUkRfU1RZTEVfQk9MRDsgCisJCQkJCQkJCQliU2V0ID0gVFJVRTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJeworCQkJCQkJCQlpZiAoKHNlY2luZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgJiBQVlRXT1JEX1NUWUxFX0JPTEQpICE9IDApCisJCQkJCQkJCXsKKwkJCQkJCQkJCXNlY2luZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgJj0gflBWVFdPUkRfU1RZTEVfQk9MRDsKKwkJCQkJCQkJCWJTZXQgPSBUUlVFOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSBFUF9JVEFMSUM6CisJCQkJCQkJaWYgKHBXb3JkUHJvcHMtPm5Xb3JkU3R5bGUgJiBQVlRXT1JEX1NUWUxFX0lUQUxJQykKKwkJCQkJCQl7CisJCQkJCQkJCWlmICgoc2VjaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfSVRBTElDKSA9PSAwKQorCQkJCQkJCQl7CisJCQkJCQkJCQlzZWNpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlIHw9IFBWVFdPUkRfU1RZTEVfSVRBTElDOyAKKwkJCQkJCQkJCWJTZXQgPSBUUlVFOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWVsc2UKKwkJCQkJCQl7CisJCQkJCQkJCWlmICgoc2VjaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfSVRBTElDKSAhPSAwKQorCQkJCQkJCQl7CisJCQkJCQkJCQlzZWNpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlICY9IH5QVlRXT1JEX1NUWUxFX0lUQUxJQzsKKwkJCQkJCQkJCWJTZXQgPSBUUlVFOworCQkJCQkJCQl9CisJCQkJCQkJfQorCQkJCQkJCWJyZWFrOworCQkJCQkJZGVmYXVsdDoKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKGJTZXQpCisJCQl7CisJCQkJcEl0ZXJhdG9yLT5TZXRTZWN0aW9uKHNlY2luZm8pOworCisJCQkJaWYgKGJBZGRVbmRvICYmIG1fYkVuYWJsZVVuZG8pCisJCQkJeworCQkJCQlBZGRFZGl0VW5kb0l0ZW0obmV3IENGWEVVX1NldFNlY1Byb3BzCisJCQkJCQkodGhpcyxwbGFjZSxlUHJvcHMsT2xkU2VjaW5mby5TZWNQcm9wcyxPbGRTZWNpbmZvLldvcmRQcm9wcyxzZWNpbmZvLlNlY1Byb3BzLHNlY2luZm8uV29yZFByb3BzLHdyKSk7CisJCQkJfQorCQkJfQorCisJCQlwSXRlcmF0b3ItPlNldEF0KG9sZHBsYWNlKTsKKworCQkJcmV0dXJuIGJTZXQ7CisJCX0KKwl9CisJCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIENGWF9FZGl0OjpTZXRXb3JkUHJvcHMoRURJVF9QUk9QU19FIGVQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSwgCisJCQkJCQkJCWNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiB3ciwgRlhfQk9PTCBiQWRkVW5kbykKK3sKKwlpZiAobV9wVlQtPklzVmFsaWQoKSAmJiBtX3BWVC0+SXNSaWNoVGV4dCgpKQorCXsKKwkJaWYgKElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yICogcEl0ZXJhdG9yID0gbV9wVlQtPkdldEl0ZXJhdG9yKCkpCisJCXsKKwkJCUZYX0JPT0wgYlNldCA9IEZBTFNFOworCQkJQ1BWVF9Xb3JkIHdvcmRpbmZvOworCQkJQ1BWVF9Xb3JkIE9sZFdvcmRpbmZvOworCisJCQlDUFZUX1dvcmRQbGFjZSBvbGRwbGFjZSA9IHBJdGVyYXRvci0+R2V0QXQoKTsKKworCQkJaWYgKHBXb3JkUHJvcHMpCisJCQl7CisJCQkJcEl0ZXJhdG9yLT5TZXRBdChwbGFjZSk7CisJCQkJaWYgKHBJdGVyYXRvci0+R2V0V29yZCh3b3JkaW5mbykpCisJCQkJeworCQkJCQlpZiAoYkFkZFVuZG8pIE9sZFdvcmRpbmZvID0gd29yZGluZm87CisKKwkJCQkJc3dpdGNoKGVQcm9wcykKKwkJCQkJeworCQkJCQljYXNlIEVQX0ZPTlRJTkRFWDoJCQkJCisJCQkJCQlpZiAod29yZGluZm8uV29yZFByb3BzLm5Gb250SW5kZXggIT0gcFdvcmRQcm9wcy0+bkZvbnRJbmRleCkKKwkJCQkJCXsKKwkJCQkJCQlpZiAoSUZYX0VkaXRfRm9udE1hcCogcEZvbnRNYXAgPSB0aGlzLT5HZXRGb250TWFwKCkpCisJCQkJCQkJeworCQkJCQkJCQl3b3JkaW5mby5Xb3JkUHJvcHMubkZvbnRJbmRleCA9IHBGb250TWFwLT5HZXRXb3JkRm9udEluZGV4KHdvcmRpbmZvLldvcmQsd29yZGluZm8ubkNoYXJzZXQscFdvcmRQcm9wcy0+bkZvbnRJbmRleCk7CisJCQkJCQkJfQorCQkJCQkJCWJTZXQgPSBUUlVFOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgRVBfRk9OVFNJWkU6CisJCQkJCQlpZiAoIUZYX0VESVRfSXNGbG9hdEVxdWFsKHdvcmRpbmZvLldvcmRQcm9wcy5mRm9udFNpemUscFdvcmRQcm9wcy0+ZkZvbnRTaXplKSkKKwkJCQkJCXsKKwkJCQkJCQl3b3JkaW5mby5Xb3JkUHJvcHMuZkZvbnRTaXplID0gcFdvcmRQcm9wcy0+ZkZvbnRTaXplOworCQkJCQkJCWJTZXQgPSBUUlVFOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgRVBfV09SRENPTE9SOgorCQkJCQkJaWYgKHdvcmRpbmZvLldvcmRQcm9wcy5kd1dvcmRDb2xvciAhPSBwV29yZFByb3BzLT5kd1dvcmRDb2xvcikKKwkJCQkJCXsKKwkJCQkJCQl3b3JkaW5mby5Xb3JkUHJvcHMuZHdXb3JkQ29sb3IgPSBwV29yZFByb3BzLT5kd1dvcmRDb2xvcjsKKwkJCQkJCQliU2V0ID0gVFJVRTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIEVQX1NDUklQVFRZUEU6CisJCQkJCQlpZiAod29yZGluZm8uV29yZFByb3BzLm5TY3JpcHRUeXBlICE9IHBXb3JkUHJvcHMtPm5TY3JpcHRUeXBlKQorCQkJCQkJeworCQkJCQkJCXdvcmRpbmZvLldvcmRQcm9wcy5uU2NyaXB0VHlwZSA9IHBXb3JkUHJvcHMtPm5TY3JpcHRUeXBlOworCQkJCQkJCWJTZXQgPSBUUlVFOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgRVBfQ0hBUlNQQUNFOgorCQkJCQkJaWYgKCFGWF9FRElUX0lzRmxvYXRFcXVhbCh3b3JkaW5mby5Xb3JkUHJvcHMuZkNoYXJTcGFjZSxwV29yZFByb3BzLT5mQ2hhclNwYWNlKSkKKwkJCQkJCXsKKwkJCQkJCQl3b3JkaW5mby5Xb3JkUHJvcHMuZkNoYXJTcGFjZSA9IHBXb3JkUHJvcHMtPmZDaGFyU3BhY2U7CisJCQkJCQkJYlNldCA9IFRSVUU7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBFUF9IT1JaU0NBTEU6CisJCQkJCQlpZiAod29yZGluZm8uV29yZFByb3BzLm5Ib3J6U2NhbGUgIT0gcFdvcmRQcm9wcy0+bkhvcnpTY2FsZSkKKwkJCQkJCXsKKwkJCQkJCQl3b3JkaW5mby5Xb3JkUHJvcHMubkhvcnpTY2FsZSA9IHBXb3JkUHJvcHMtPm5Ib3J6U2NhbGU7CisJCQkJCQkJYlNldCA9IFRSVUU7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBFUF9VTkRFUkxJTkU6CisJCQkJCQlpZiAocFdvcmRQcm9wcy0+bldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfVU5ERVJMSU5FKQorCQkJCQkJeworCQkJCQkJCWlmICgod29yZGluZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgJiBQVlRXT1JEX1NUWUxFX1VOREVSTElORSkgPT0gMCkKKwkJCQkJCQl7CisJCQkJCQkJCXdvcmRpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlIHw9IFBWVFdPUkRfU1RZTEVfVU5ERVJMSU5FOworCQkJCQkJCQliU2V0ID0gVFJVRTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJaWYgKCh3b3JkaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfVU5ERVJMSU5FKSAhPSAwKQorCQkJCQkJCXsKKwkJCQkJCQkJd29yZGluZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgJj0gflBWVFdPUkRfU1RZTEVfVU5ERVJMSU5FOworCQkJCQkJCQliU2V0ID0gVFJVRTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBFUF9DUk9TU09VVDoKKwkJCQkJCWlmIChwV29yZFByb3BzLT5uV29yZFN0eWxlICYgUFZUV09SRF9TVFlMRV9DUk9TU09VVCkKKwkJCQkJCXsKKwkJCQkJCQlpZiAoKHdvcmRpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlICYgUFZUV09SRF9TVFlMRV9DUk9TU09VVCkgPT0gMCkKKwkJCQkJCQl7CisJCQkJCQkJCXdvcmRpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlIHw9IFBWVFdPUkRfU1RZTEVfQ1JPU1NPVVQ7IAorCQkJCQkJCQliU2V0ID0gVFJVRTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJaWYgKCh3b3JkaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfQ1JPU1NPVVQpICE9IDApCisJCQkJCQkJeworCQkJCQkJCQl3b3JkaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSAmPSB+UFZUV09SRF9TVFlMRV9DUk9TU09VVDsKKwkJCQkJCQkJYlNldCA9IFRSVUU7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgRVBfQk9MRDoKKwkJCQkJCWlmIChwV29yZFByb3BzLT5uV29yZFN0eWxlICYgUFZUV09SRF9TVFlMRV9CT0xEKQorCQkJCQkJeworCQkJCQkJCWlmICgod29yZGluZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgJiBQVlRXT1JEX1NUWUxFX0JPTEQpID09IDApCisJCQkJCQkJeworCQkJCQkJCQl3b3JkaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSB8PSBQVlRXT1JEX1NUWUxFX0JPTEQ7IAorCQkJCQkJCQliU2V0ID0gVFJVRTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJaWYgKCh3b3JkaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfQk9MRCkgIT0gMCkKKwkJCQkJCQl7CisJCQkJCQkJCXdvcmRpbmZvLldvcmRQcm9wcy5uV29yZFN0eWxlICY9IH5QVlRXT1JEX1NUWUxFX0JPTEQ7CisJCQkJCQkJCWJTZXQgPSBUUlVFOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIEVQX0lUQUxJQzoKKwkJCQkJCWlmIChwV29yZFByb3BzLT5uV29yZFN0eWxlICYgUFZUV09SRF9TVFlMRV9JVEFMSUMpCisJCQkJCQl7CisJCQkJCQkJaWYgKCh3b3JkaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfSVRBTElDKSA9PSAwKQorCQkJCQkJCXsKKwkJCQkJCQkJd29yZGluZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgfD0gUFZUV09SRF9TVFlMRV9JVEFMSUM7IAorCQkJCQkJCQliU2V0ID0gVFJVRTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJaWYgKCh3b3JkaW5mby5Xb3JkUHJvcHMubldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfSVRBTElDKSAhPSAwKQorCQkJCQkJCXsKKwkJCQkJCQkJd29yZGluZm8uV29yZFByb3BzLm5Xb3JkU3R5bGUgJj0gflBWVFdPUkRfU1RZTEVfSVRBTElDOworCQkJCQkJCQliU2V0ID0gVFJVRTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQkKKworCQkJaWYgKGJTZXQpCisJCQl7CisJCQkJcEl0ZXJhdG9yLT5TZXRXb3JkKHdvcmRpbmZvKTsKKworCQkJCWlmIChiQWRkVW5kbyAmJiBtX2JFbmFibGVVbmRvKQorCQkJCXsKKwkJCQkJQWRkRWRpdFVuZG9JdGVtKG5ldyBDRlhFVV9TZXRXb3JkUHJvcHMKKwkJCQkJCSh0aGlzLHBsYWNlLGVQcm9wcyxPbGRXb3JkaW5mby5Xb3JkUHJvcHMsd29yZGluZm8uV29yZFByb3BzLHdyKSk7CisJCQkJfQorCQkJfQorCQkJCisJCQlwSXRlcmF0b3ItPlNldEF0KG9sZHBsYWNlKTsKKwkJCXJldHVybiBiU2V0OworCQl9CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCit2b2lkIENGWF9FZGl0OjpTZXRUZXh0KEZYX0xQQ1dTVFIgdGV4dCxGWF9JTlQzMiBjaGFyc2V0IC8qPSBERUZBVUxUX0NIQVJTRVQqLywKKwkJCQkJCWNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMgLyo9IE5VTEwqLyxjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMgLyo9IE5VTEwqLykKK3sKKwlTZXRUZXh0KHRleHQsY2hhcnNldCxwU2VjUHJvcHMscFdvcmRQcm9wcyxUUlVFLFRSVUUpOworfQorCitGWF9CT09MIENGWF9FZGl0OjpJbnNlcnRXb3JkKEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCAvKj0gREVGQVVMVF9DSEFSU0VUKi8sIGNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcyAvKj0gTlVMTCovKQoreworCXJldHVybiBJbnNlcnRXb3JkKHdvcmQsY2hhcnNldCxwV29yZFByb3BzLFRSVUUsVFJVRSk7Cit9CisKK0ZYX0JPT0wgQ0ZYX0VkaXQ6Okluc2VydFJldHVybihjb25zdCBDUFZUX1NlY1Byb3BzICogcFNlY1Byb3BzIC8qPSBOVUxMKi8sY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzIC8qPSBOVUxMKi8pCit7CisJcmV0dXJuIEluc2VydFJldHVybihwU2VjUHJvcHMscFdvcmRQcm9wcyxUUlVFLFRSVUUpOworfQorCitGWF9CT09MIENGWF9FZGl0OjpCYWNrc3BhY2UoKQoreworCXJldHVybiBCYWNrc3BhY2UoVFJVRSxUUlVFKTsKK30KKworRlhfQk9PTCBDRlhfRWRpdDo6RGVsZXRlKCkKK3sKKwlyZXR1cm4gRGVsZXRlKFRSVUUsVFJVRSk7Cit9CisKK0ZYX0JPT0wgQ0ZYX0VkaXQ6OkNsZWFyKCkKK3sKKwlyZXR1cm4gQ2xlYXIoVFJVRSxUUlVFKTsKK30KKworRlhfQk9PTCBDRlhfRWRpdDo6SW5zZXJ0VGV4dChGWF9MUENXU1RSIHRleHQsIEZYX0lOVDMyIGNoYXJzZXQgLyo9IERFRkFVTFRfQ0hBUlNFVCovLAorCQkJCQkJCQljb25zdCBDUFZUX1NlY1Byb3BzICogcFNlY1Byb3BzIC8qPSBOVUxMKi8sY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzIC8qPSBOVUxMKi8pCit7CisJcmV0dXJuIEluc2VydFRleHQodGV4dCxjaGFyc2V0LHBTZWNQcm9wcyxwV29yZFByb3BzLFRSVUUsVFJVRSk7Cit9CisKK0ZYX0ZMT0FUIENGWF9FZGl0OjpHZXRGb250U2l6ZSgpIGNvbnN0Cit7CisJcmV0dXJuIG1fcFZULT5HZXRGb250U2l6ZSgpOworfQorCitGWF9XT1JEIENGWF9FZGl0OjpHZXRQYXNzd29yZENoYXIoKSBjb25zdAoreworCXJldHVybiBtX3BWVC0+R2V0UGFzc3dvcmRDaGFyKCk7Cit9CisKK0ZYX0lOVDMyIENGWF9FZGl0OjpHZXRDaGFyQXJyYXkoKSBjb25zdAoreworCXJldHVybiBtX3BWVC0+R2V0Q2hhckFycmF5KCk7Cit9CisKK0NQREZfUmVjdCBDRlhfRWRpdDo6R2V0UGxhdGVSZWN0KCkgY29uc3QKK3sKKwlyZXR1cm4gbV9wVlQtPkdldFBsYXRlUmVjdCgpOworfQorCitDUERGX1JlY3QgQ0ZYX0VkaXQ6OkdldENvbnRlbnRSZWN0KCkgY29uc3QKK3sKKwlyZXR1cm4gVlRUb0VkaXQobV9wVlQtPkdldENvbnRlbnRSZWN0KCkpOworfQorCitGWF9JTlQzMiBDRlhfRWRpdDo6R2V0SG9yelNjYWxlKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9wVlQtPkdldEhvcnpTY2FsZSgpOworfQorCitGWF9GTE9BVCBDRlhfRWRpdDo6R2V0Q2hhclNwYWNlKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9wVlQtPkdldENoYXJTcGFjZSgpOworfQorCisvLyBpbm5lciBtZXRob2RzCisKK0NQVlRfV29yZFJhbmdlIENGWF9FZGl0OjpHZXRXaG9sZVdvcmRSYW5nZSgpIGNvbnN0Cit7CisJaWYgKG1fcFZULT5Jc1ZhbGlkKCkpCisJCXJldHVybiBDUFZUX1dvcmRSYW5nZShtX3BWVC0+R2V0QmVnaW5Xb3JkUGxhY2UoKSxtX3BWVC0+R2V0RW5kV29yZFBsYWNlKCkpOworCisJcmV0dXJuIENQVlRfV29yZFJhbmdlKCk7Cit9CisKK0NQVlRfV29yZFJhbmdlIENGWF9FZGl0OjpHZXRWaXNpYmxlV29yZFJhbmdlKCkgY29uc3QKK3sKKwlpZiAobV9iRW5hYmxlT3ZlcmZsb3cpIHJldHVybiBHZXRXaG9sZVdvcmRSYW5nZSgpOworCisJaWYgKG1fcFZULT5Jc1ZhbGlkKCkpCisJeworCQlDUERGX1JlY3QgcmNQbGF0ZSA9IG1fcFZULT5HZXRQbGF0ZVJlY3QoKTsKKworCQlDUFZUX1dvcmRQbGFjZSBwbGFjZTEgPSBtX3BWVC0+U2VhcmNoV29yZFBsYWNlKEVkaXRUb1ZUKENQREZfUG9pbnQocmNQbGF0ZS5sZWZ0LHJjUGxhdGUudG9wKSkpOworCQlDUFZUX1dvcmRQbGFjZSBwbGFjZTIgPSBtX3BWVC0+U2VhcmNoV29yZFBsYWNlKEVkaXRUb1ZUKENQREZfUG9pbnQocmNQbGF0ZS5yaWdodCxyY1BsYXRlLmJvdHRvbSkpKTsKKworCQlyZXR1cm4gQ1BWVF9Xb3JkUmFuZ2UocGxhY2UxLHBsYWNlMik7CisJfQorCisJcmV0dXJuIENQVlRfV29yZFJhbmdlKCk7Cit9CisKK0NQVlRfV29yZFBsYWNlIENGWF9FZGl0OjpTZWFyY2hXb3JkUGxhY2UoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpIGNvbnN0Cit7CisJaWYgKG1fcFZULT5Jc1ZhbGlkKCkpCisJeworCQlyZXR1cm4gbV9wVlQtPlNlYXJjaFdvcmRQbGFjZShFZGl0VG9WVChwb2ludCkpOworCX0KKworCXJldHVybiBDUFZUX1dvcmRQbGFjZSgpOworfQorCit2b2lkIENGWF9FZGl0OjpQYWludCgpCit7CisJaWYgKG1fcFZULT5Jc1ZhbGlkKCkpCisJeworCQlSZWFycmFuZ2VBbGwoKTsKKwkJU2Nyb2xsVG9DYXJldCgpOworCQlSZWZyZXNoKFJQX05PQU5BTFlTRSk7CisJCVNldENhcmV0T3JpZ2luKCk7CisJCVNldENhcmV0SW5mbygpOworCX0KK30KKwordm9pZCBDRlhfRWRpdDo6UmVhcnJhbmdlQWxsKCkKK3sKKwlpZiAobV9wVlQtPklzVmFsaWQoKSkKKwl7CisJCW1fcFZULT5VcGRhdGVXb3JkUGxhY2UobV93cENhcmV0KTsKKwkJbV9wVlQtPlJlYXJyYW5nZUFsbCgpOworCQltX3BWVC0+VXBkYXRlV29yZFBsYWNlKG1fd3BDYXJldCk7CisJCVNldFNjcm9sbEluZm8oKTsKKwkJU2V0Q29udGVudENoYW5nZWQoKTsKKwl9Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6OlJlYXJyYW5nZVBhcnQoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiByYW5nZSkKK3sKKwlpZiAobV9wVlQtPklzVmFsaWQoKSkKKwl7CisJCW1fcFZULT5VcGRhdGVXb3JkUGxhY2UobV93cENhcmV0KTsKKwkJbV9wVlQtPlJlYXJyYW5nZVBhcnQocmFuZ2UpOworCQltX3BWVC0+VXBkYXRlV29yZFBsYWNlKG1fd3BDYXJldCk7CisJCVNldFNjcm9sbEluZm8oKTsKKwkJU2V0Q29udGVudENoYW5nZWQoKTsKKwl9Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6OlNldENvbnRlbnRDaGFuZ2VkKCkKK3sKKwlpZiAobV9iTm90aWZ5ICYmIG1fcE5vdGlmeSkKKwl7CisJCUNQREZfUmVjdCByY0NvbnRlbnQgPSBtX3BWVC0+R2V0Q29udGVudFJlY3QoKTsKKwkJaWYgKHJjQ29udGVudC5XaWR0aCgpICE9IG1fcmNPbGRDb250ZW50LldpZHRoKCkgfHwKKwkJCXJjQ29udGVudC5IZWlnaHQoKSAhPSBtX3JjT2xkQ29udGVudC5IZWlnaHQoKSkKKwkJeworCQkJaWYgKCFtX2JOb3RpZnlGbGFnKQorCQkJeworCQkJCW1fYk5vdGlmeUZsYWcgPSBUUlVFOworCQkJCW1fcE5vdGlmeS0+SU9uQ29udGVudENoYW5nZShyY0NvbnRlbnQpOworCQkJCW1fYk5vdGlmeUZsYWcgPSBGQUxTRTsKKwkJCX0KKwkJCW1fcmNPbGRDb250ZW50ID0gcmNDb250ZW50OworCQl9CisJfQorfQorCit2b2lkIENGWF9FZGl0OjpTZWxlY3RBbGwoKQoreworCWlmIChtX3BWVC0+SXNWYWxpZCgpKQorCXsKKwkJbV9TZWxTdGF0ZSA9IEdldFdob2xlV29yZFJhbmdlKCk7CQkKKwkJU2V0Q2FyZXQobV9TZWxTdGF0ZS5FbmRQb3MpOwkJCisJCQorCQlTY3JvbGxUb0NhcmV0KCk7CisJCUNQVlRfV29yZFJhbmdlIHdyVmlzaWJsZSA9IEdldFZpc2libGVXb3JkUmFuZ2UoKTsKKwkJUmVmcmVzaChSUF9PUFRJT05BTCwmd3JWaXNpYmxlKTsKKwkJU2V0Q2FyZXRJbmZvKCk7CisJfQorfQorCit2b2lkIENGWF9FZGl0OjpTZWxlY3ROb25lKCkKK3sKKwlpZiAobV9wVlQtPklzVmFsaWQoKSkKKwl7CisJCWlmIChtX1NlbFN0YXRlLklzRXhpc3QoKSkKKwkJeworCQkJQ1BWVF9Xb3JkUmFuZ2Ugd3JUZW1wID0gbV9TZWxTdGF0ZS5Db252ZXJ0VG9Xb3JkUmFuZ2UoKTsKKwkJCW1fU2VsU3RhdGUuRGVmYXVsdCgpOworCQkJUmVmcmVzaChSUF9PUFRJT05BTCwmd3JUZW1wKTsKKwkJfQorCX0JCit9CisKK0ZYX0JPT0wJQ0ZYX0VkaXQ6OklzU2VsZWN0ZWQoKSBjb25zdAoreworCXJldHVybiBtX1NlbFN0YXRlLklzRXhpc3QoKTsKK30KKworQ1BERl9Qb2ludCBDRlhfRWRpdDo6VlRUb0VkaXQoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdAoreworCUNQREZfUmVjdCByY0NvbnRlbnQgPSBtX3BWVC0+R2V0Q29udGVudFJlY3QoKTsKKwlDUERGX1JlY3QgcmNQbGF0ZSA9IG1fcFZULT5HZXRQbGF0ZVJlY3QoKTsKKworCUZYX0ZMT0FUIGZQYWRkaW5nID0gMC4wZjsKKworCXN3aXRjaCAobV9uQWxpZ25tZW50KQorCXsKKwljYXNlIDA6CisJCWZQYWRkaW5nID0gMC4wZjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlmUGFkZGluZyA9IChyY1BsYXRlLkhlaWdodCgpIC0gcmNDb250ZW50LkhlaWdodCgpKSAqIDAuNWY7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZlBhZGRpbmcgPSByY1BsYXRlLkhlaWdodCgpIC0gcmNDb250ZW50LkhlaWdodCgpOworCQlicmVhazsKKwl9CisJCisJcmV0dXJuIENQREZfUG9pbnQocG9pbnQueCAtIChtX3B0U2Nyb2xsUG9zLnggLSByY1BsYXRlLmxlZnQpLAorCQlwb2ludC55IC0gKG1fcHRTY3JvbGxQb3MueSArIGZQYWRkaW5nIC0gcmNQbGF0ZS50b3ApKTsKK30KKworQ1BERl9Qb2ludCBDRlhfRWRpdDo6RWRpdFRvVlQoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdAoreworCUNQREZfUmVjdCByY0NvbnRlbnQgPSBtX3BWVC0+R2V0Q29udGVudFJlY3QoKTsKKwlDUERGX1JlY3QgcmNQbGF0ZSA9IG1fcFZULT5HZXRQbGF0ZVJlY3QoKTsKKworCUZYX0ZMT0FUIGZQYWRkaW5nID0gMC4wZjsKKworCXN3aXRjaCAobV9uQWxpZ25tZW50KQorCXsKKwljYXNlIDA6CisJCWZQYWRkaW5nID0gMC4wZjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlmUGFkZGluZyA9IChyY1BsYXRlLkhlaWdodCgpIC0gcmNDb250ZW50LkhlaWdodCgpKSAqIDAuNWY7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZlBhZGRpbmcgPSByY1BsYXRlLkhlaWdodCgpIC0gcmNDb250ZW50LkhlaWdodCgpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gQ1BERl9Qb2ludChwb2ludC54ICsgKG1fcHRTY3JvbGxQb3MueCAtIHJjUGxhdGUubGVmdCksCisJCXBvaW50LnkgKyAobV9wdFNjcm9sbFBvcy55ICsgZlBhZGRpbmcgLSByY1BsYXRlLnRvcCkpOworfQorCitDUERGX1JlY3QgQ0ZYX0VkaXQ6OlZUVG9FZGl0KGNvbnN0IENQREZfUmVjdCAmIHJlY3QpIGNvbnN0Cit7CisJQ1BERl9Qb2ludCBwdExlZnRCb3R0b20gPSBWVFRvRWRpdChDUERGX1BvaW50KHJlY3QubGVmdCxyZWN0LmJvdHRvbSkpOworCUNQREZfUG9pbnQgcHRSaWdodFRvcCA9IFZUVG9FZGl0KENQREZfUG9pbnQocmVjdC5yaWdodCxyZWN0LnRvcCkpOworCisJcmV0dXJuIENQREZfUmVjdChwdExlZnRCb3R0b20ueCxwdExlZnRCb3R0b20ueSxwdFJpZ2h0VG9wLngscHRSaWdodFRvcC55KTsKK30KKworQ1BERl9SZWN0IENGWF9FZGl0OjpFZGl0VG9WVChjb25zdCBDUERGX1JlY3QgJiByZWN0KSBjb25zdAoreworCUNQREZfUG9pbnQgcHRMZWZ0Qm90dG9tID0gRWRpdFRvVlQoQ1BERl9Qb2ludChyZWN0LmxlZnQscmVjdC5ib3R0b20pKTsKKwlDUERGX1BvaW50IHB0UmlnaHRUb3AgPSBFZGl0VG9WVChDUERGX1BvaW50KHJlY3QucmlnaHQscmVjdC50b3ApKTsKKworCXJldHVybiBDUERGX1JlY3QocHRMZWZ0Qm90dG9tLngscHRMZWZ0Qm90dG9tLnkscHRSaWdodFRvcC54LHB0UmlnaHRUb3AueSk7Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6OlNldFNjcm9sbEluZm8oKQoreworCWlmIChtX2JOb3RpZnkgJiYgbV9wTm90aWZ5KQorCXsKKwkJQ1BERl9SZWN0IHJjUGxhdGUgPSBtX3BWVC0+R2V0UGxhdGVSZWN0KCk7CisJCUNQREZfUmVjdCByY0NvbnRlbnQgPSBtX3BWVC0+R2V0Q29udGVudFJlY3QoKTsKKworCQlpZiAoIW1fYk5vdGlmeUZsYWcpCisJCXsKKwkJCW1fYk5vdGlmeUZsYWcgPSBUUlVFOworCQkJbV9wTm90aWZ5LT5JT25TZXRTY3JvbGxJbmZvWChyY1BsYXRlLmxlZnQsIHJjUGxhdGUucmlnaHQsIAorCQkJCQkJCQlyY0NvbnRlbnQubGVmdCwgcmNDb250ZW50LnJpZ2h0LCByY1BsYXRlLldpZHRoKCkgLyAzLCByY1BsYXRlLldpZHRoKCkpOworCQkJCisJCQltX3BOb3RpZnktPklPblNldFNjcm9sbEluZm9ZKHJjUGxhdGUuYm90dG9tLCByY1BsYXRlLnRvcCwgCisJCQkJCXJjQ29udGVudC5ib3R0b20sIHJjQ29udGVudC50b3AsIHJjUGxhdGUuSGVpZ2h0KCkgLyAzLCByY1BsYXRlLkhlaWdodCgpKTsKKwkJCW1fYk5vdGlmeUZsYWcgPSBGQUxTRTsKKwkJfQorCX0KK30KKwordm9pZCBDRlhfRWRpdDo6U2V0U2Nyb2xsUG9zWChGWF9GTE9BVCBmeCkKK3sKKwlpZiAoIW1fYkVuYWJsZVNjcm9sbCkgcmV0dXJuOworCisJaWYgKG1fcFZULT5Jc1ZhbGlkKCkpCisJeworCQlpZiAoIUZYX0VESVRfSXNGbG9hdEVxdWFsKG1fcHRTY3JvbGxQb3MueCxmeCkpCisJCXsKKwkJCW1fcHRTY3JvbGxQb3MueCA9IGZ4OwkJCQorCQkJUmVmcmVzaChSUF9OT0FOQUxZU0UpOworCisJCQlpZiAobV9iTm90aWZ5ICYmIG1fcE5vdGlmeSkKKwkJCXsKKwkJCQlpZiAoIW1fYk5vdGlmeUZsYWcpCisJCQkJeworCQkJCQltX2JOb3RpZnlGbGFnID0gVFJVRTsKKwkJCQkJbV9wTm90aWZ5LT5JT25TZXRTY3JvbGxQb3NYKGZ4KTsKKwkJCQkJbV9iTm90aWZ5RmxhZyA9IEZBTFNFOworCQkJCX0KKwkJCX0KKwkJfQorCX0KK30KKwordm9pZCBDRlhfRWRpdDo6U2V0U2Nyb2xsUG9zWShGWF9GTE9BVCBmeSkKK3sKKwlpZiAoIW1fYkVuYWJsZVNjcm9sbCkgcmV0dXJuOworCisJaWYgKG1fcFZULT5Jc1ZhbGlkKCkpCisJeworCQlpZiAoIUZYX0VESVRfSXNGbG9hdEVxdWFsKG1fcHRTY3JvbGxQb3MueSxmeSkpCisJCXsJCQkJCisJCQltX3B0U2Nyb2xsUG9zLnkgPSBmeTsKKwkJCVJlZnJlc2goUlBfTk9BTkFMWVNFKTsKKworCQkJaWYgKG1fYk5vdGlmeSAmJiBtX3BOb3RpZnkpCisJCQl7CisJCQkJaWYgKCFtX2JOb3RpZnlGbGFnKQorCQkJCXsKKwkJCQkJbV9iTm90aWZ5RmxhZyA9IFRSVUU7CisJCQkJCW1fcE5vdGlmeS0+SU9uU2V0U2Nyb2xsUG9zWShmeSk7CisJCQkJCW1fYk5vdGlmeUZsYWcgPSBGQUxTRTsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6OlNldFNjcm9sbFBvcyhjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpCit7CisJU2V0U2Nyb2xsUG9zWChwb2ludC54KTsKKwlTZXRTY3JvbGxQb3NZKHBvaW50LnkpOworCVNldFNjcm9sbExpbWl0KCk7CisJU2V0Q2FyZXRJbmZvKCk7Cit9CisKK0NQREZfUG9pbnQgQ0ZYX0VkaXQ6OkdldFNjcm9sbFBvcygpIGNvbnN0Cit7CisJcmV0dXJuIG1fcHRTY3JvbGxQb3M7Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6OlNldFNjcm9sbExpbWl0KCkKK3sKKwlpZiAobV9wVlQtPklzVmFsaWQoKSkKKwl7CisJCUNQREZfUmVjdCByY0NvbnRlbnQgPSBtX3BWVC0+R2V0Q29udGVudFJlY3QoKTsKKwkJQ1BERl9SZWN0IHJjUGxhdGUgPSBtX3BWVC0+R2V0UGxhdGVSZWN0KCk7CisKKwkJaWYgKHJjUGxhdGUuV2lkdGgoKSA+IHJjQ29udGVudC5XaWR0aCgpKQorCQl7CisJCQlTZXRTY3JvbGxQb3NYKHJjUGxhdGUubGVmdCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoRlhfRURJVF9Jc0Zsb2F0U21hbGxlcihtX3B0U2Nyb2xsUG9zLngsIHJjQ29udGVudC5sZWZ0KSkKKwkJCXsKKwkJCQlTZXRTY3JvbGxQb3NYKHJjQ29udGVudC5sZWZ0KTsJCQkKKwkJCX0KKwkJCWVsc2UgaWYgKEZYX0VESVRfSXNGbG9hdEJpZ2dlcihtX3B0U2Nyb2xsUG9zLngsIHJjQ29udGVudC5yaWdodCAtIHJjUGxhdGUuV2lkdGgoKSkpCisJCQl7CisJCQkJU2V0U2Nyb2xsUG9zWChyY0NvbnRlbnQucmlnaHQgLSByY1BsYXRlLldpZHRoKCkpOworCQkJfQorCQl9CisKKwkJaWYgKHJjUGxhdGUuSGVpZ2h0KCkgPiByY0NvbnRlbnQuSGVpZ2h0KCkpCisJCXsKKwkJCVNldFNjcm9sbFBvc1kocmNQbGF0ZS50b3ApOworCQl9CisJCWVsc2UJCQorCQl7CisJCQlpZiAoRlhfRURJVF9Jc0Zsb2F0U21hbGxlcihtX3B0U2Nyb2xsUG9zLnksIHJjQ29udGVudC5ib3R0b20gKyByY1BsYXRlLkhlaWdodCgpKSkKKwkJCXsKKwkJCQlTZXRTY3JvbGxQb3NZKHJjQ29udGVudC5ib3R0b20gKyByY1BsYXRlLkhlaWdodCgpKTsKKwkJCX0KKwkJCWVsc2UgaWYgKEZYX0VESVRfSXNGbG9hdEJpZ2dlcihtX3B0U2Nyb2xsUG9zLnksIHJjQ29udGVudC50b3ApKQorCQkJeworCQkJCVNldFNjcm9sbFBvc1kocmNDb250ZW50LnRvcCk7CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6OlNjcm9sbFRvQ2FyZXQoKQoreworCVNldFNjcm9sbExpbWl0KCk7CisKKwlpZiAobV9wVlQtPklzVmFsaWQoKSkKKwl7CisJCUNQREZfUG9pbnQgcHRIZWFkKDAsMCk7CisJCUNQREZfUG9pbnQgcHRGb290KDAsMCk7CisKKwkJaWYgKElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yICogcEl0ZXJhdG9yID0gbV9wVlQtPkdldEl0ZXJhdG9yKCkpCisJCXsKKwkJCXBJdGVyYXRvci0+U2V0QXQobV93cENhcmV0KTsKKworCQkJQ1BWVF9Xb3JkIHdvcmQ7CisJCQlDUFZUX0xpbmUgbGluZTsKKwkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpCisJCQl7CisJCQkJcHRIZWFkLnggPSB3b3JkLnB0V29yZC54ICsgd29yZC5mV2lkdGg7CisJCQkJcHRIZWFkLnkgPSB3b3JkLnB0V29yZC55ICsgd29yZC5mQXNjZW50OworCQkJCXB0Rm9vdC54ID0gd29yZC5wdFdvcmQueCArIHdvcmQuZldpZHRoOworCQkJCXB0Rm9vdC55ID0gd29yZC5wdFdvcmQueSArIHdvcmQuZkRlc2NlbnQ7CisJCQl9CisJCQllbHNlIGlmIChwSXRlcmF0b3ItPkdldExpbmUobGluZSkpCisJCQl7CQkJCQorCQkJCXB0SGVhZC54ID0gbGluZS5wdExpbmUueDsKKwkJCQlwdEhlYWQueSA9IGxpbmUucHRMaW5lLnkgKyBsaW5lLmZMaW5lQXNjZW50OworCQkJCXB0Rm9vdC54ID0gbGluZS5wdExpbmUueDsKKwkJCQlwdEZvb3QueSA9IGxpbmUucHRMaW5lLnkgKyBsaW5lLmZMaW5lRGVzY2VudDsKKwkJCX0KKwkJfQorCisJCUNQREZfUG9pbnQgcHRIZWFkRWRpdCA9IFZUVG9FZGl0KHB0SGVhZCk7CisJCUNQREZfUG9pbnQgcHRGb290RWRpdCA9IFZUVG9FZGl0KHB0Rm9vdCk7CisKKwkJQ1BERl9SZWN0IHJjUGxhdGUgPSBtX3BWVC0+R2V0UGxhdGVSZWN0KCk7CisKKwkJaWYgKCFGWF9FRElUX0lzRmxvYXRFcXVhbChyY1BsYXRlLmxlZnQscmNQbGF0ZS5yaWdodCkpCisJCXsKKwkJCWlmIChGWF9FRElUX0lzRmxvYXRTbWFsbGVyKHB0SGVhZEVkaXQueCwgcmNQbGF0ZS5sZWZ0KSB8fAorCQkJCUZYX0VESVRfSXNGbG9hdEVxdWFsKHB0SGVhZEVkaXQueCwgcmNQbGF0ZS5sZWZ0KSkKKwkJCXsKKwkJCQlTZXRTY3JvbGxQb3NYKHB0SGVhZC54KTsKKwkJCX0KKwkJCWVsc2UgaWYgKEZYX0VESVRfSXNGbG9hdEJpZ2dlcihwdEhlYWRFZGl0LngsIHJjUGxhdGUucmlnaHQpKQorCQkJeworCQkJCVNldFNjcm9sbFBvc1gocHRIZWFkLnggLSByY1BsYXRlLldpZHRoKCkpOworCQkJfQorCQl9CisKKwkJaWYgKCFGWF9FRElUX0lzRmxvYXRFcXVhbChyY1BsYXRlLnRvcCxyY1BsYXRlLmJvdHRvbSkpCisJCXsKKwkJCWlmIChGWF9FRElUX0lzRmxvYXRTbWFsbGVyKHB0Rm9vdEVkaXQueSwgcmNQbGF0ZS5ib3R0b20pIHx8CisJCQkJRlhfRURJVF9Jc0Zsb2F0RXF1YWwocHRGb290RWRpdC55LCByY1BsYXRlLmJvdHRvbSkpCisJCQl7CisJCQkJaWYgKEZYX0VESVRfSXNGbG9hdFNtYWxsZXIocHRIZWFkRWRpdC55LCByY1BsYXRlLnRvcCkpCisJCQkJeworCQkJCQlTZXRTY3JvbGxQb3NZKHB0Rm9vdC55ICsgcmNQbGF0ZS5IZWlnaHQoKSk7CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoRlhfRURJVF9Jc0Zsb2F0QmlnZ2VyKHB0SGVhZEVkaXQueSwgcmNQbGF0ZS50b3ApKQorCQkJeworCQkJCWlmIChGWF9FRElUX0lzRmxvYXRCaWdnZXIocHRGb290RWRpdC55LCByY1BsYXRlLmJvdHRvbSkpCisJCQkJeworCQkJCQlTZXRTY3JvbGxQb3NZKHB0SGVhZC55KTsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6OlJlZnJlc2goUkVGUkVTSF9QTEFOX0UgZVBsYW4sY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgKiBwUmFuZ2UxLGNvbnN0IENQVlRfV29yZFJhbmdlICogcFJhbmdlMikKK3sKKwlpZiAobV9iRW5hYmxlUmVmcmVzaCAmJiBtX3BWVC0+SXNWYWxpZCgpKQorCXsKKwkJbV9SZWZyZXNoLkJlZ2luUmVmcmVzaCgpOworCQlSZWZyZXNoUHVzaExpbmVSZWN0cyhHZXRWaXNpYmxlV29yZFJhbmdlKCkpOworCisvLyAJCWlmICghRlhfRURJVF9Jc0Zsb2F0RXF1YWwobV9wdFJlZnJlc2hTY3JvbGxQb3MueCxtX3B0U2Nyb2xsUG9zLngpIHx8IAorLy8gCQkJIUZYX0VESVRfSXNGbG9hdEVxdWFsKG1fcHRSZWZyZXNoU2Nyb2xsUG9zLnksbV9wdFNjcm9sbFBvcy55KSkKKy8vIAkJeworCQkJbV9SZWZyZXNoLk5vQW5hbHlzZSgpOworCQkJbV9wdFJlZnJlc2hTY3JvbGxQb3MgPSBtX3B0U2Nyb2xsUG9zOworLy8gCQl9CisvLyAJCWVsc2UKKy8vIAkJeworLy8gCQkJc3dpdGNoIChlUGxhbikKKy8vIAkJCXsKKy8vIAkJCWNhc2UgUlBfQU5BTFlTRToKKy8vIAkJCQltX1JlZnJlc2guQW5hbHlzZShtX3BWVC0+R2V0QWxpZ25tZW50KCkpOworLy8gCisvLyAJCQkJaWYgKHBSYW5nZTEpIFJlZnJlc2hQdXNoUmFuZG9tUmVjdHMoKnBSYW5nZTEpOworLy8gCQkJCWlmIChwUmFuZ2UyKSBSZWZyZXNoUHVzaFJhbmRvbVJlY3RzKCpwUmFuZ2UyKTsKKy8vIAkJCQlicmVhazsKKy8vIAkJCWNhc2UgUlBfTk9BTkFMWVNFOgorLy8gCQkJCW1fUmVmcmVzaC5Ob0FuYWx5c2UoKTsKKy8vIAkJCQlicmVhazsKKy8vIAkJCWNhc2UgUlBfT1BUSU9OQUw6CisvLyAJCQkJaWYgKHBSYW5nZTEpIFJlZnJlc2hQdXNoUmFuZG9tUmVjdHMoKnBSYW5nZTEpOworLy8gCQkJCWlmIChwUmFuZ2UyKSBSZWZyZXNoUHVzaFJhbmRvbVJlY3RzKCpwUmFuZ2UyKTsKKy8vIAkJCQlicmVhazsJCisvLyAJCQl9CisvLyAJCX0JCQorCisJCWlmIChtX2JOb3RpZnkgJiYgbV9wTm90aWZ5KQorCQl7CisJCQlpZiAoIW1fYk5vdGlmeUZsYWcpCisJCQl7CisJCQkJbV9iTm90aWZ5RmxhZyA9IFRSVUU7CisJCQkJaWYgKGNvbnN0IENGWF9FZGl0X1JlY3RBcnJheSAqIHBSZWN0cyA9IG1fUmVmcmVzaC5HZXRSZWZyZXNoUmVjdHMoKSkKKwkJCQl7CisJCQkJCWZvciAoRlhfSU5UMzIgaSA9IDAsIHN6ID0gcFJlY3RzLT5HZXRTaXplKCk7IGkgPCBzejsgaSsrKQorCQkJCQkJbV9wTm90aWZ5LT5JT25JbnZhbGlkYXRlUmVjdChwUmVjdHMtPkdldEF0KGkpKTsKKwkJCQl9CisJCQkJbV9iTm90aWZ5RmxhZyA9IEZBTFNFOworCQkJfQorCQl9CisKKwkJbV9SZWZyZXNoLkVuZFJlZnJlc2goKTsKKwl9Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6OlJlZnJlc2hQdXNoTGluZVJlY3RzKGNvbnN0IENQVlRfV29yZFJhbmdlICYgd3IpCit7CisJaWYgKG1fcFZULT5Jc1ZhbGlkKCkpCisJeworCQlpZiAoSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IgKiBwSXRlcmF0b3IgPSBtX3BWVC0+R2V0SXRlcmF0b3IoKSkKKwkJeworCQkJQ1BWVF9Xb3JkUGxhY2Ugd3BCZWdpbiA9IHdyLkJlZ2luUG9zOworCQkJbV9wVlQtPlVwZGF0ZVdvcmRQbGFjZSh3cEJlZ2luKTsKKwkJCUNQVlRfV29yZFBsYWNlIHdwRW5kID0gd3IuRW5kUG9zOworCQkJbV9wVlQtPlVwZGF0ZVdvcmRQbGFjZSh3cEVuZCk7CisJCQlwSXRlcmF0b3ItPlNldEF0KHdwQmVnaW4pOworCisJCQlDUFZUX0xpbmUgbGluZWluZm87CQorCQkJZG8KKwkJCXsKKwkJCQlpZiAoIXBJdGVyYXRvci0+R2V0TGluZShsaW5laW5mbykpYnJlYWs7CisJCQkJaWYgKGxpbmVpbmZvLmxpbmVwbGFjZS5MaW5lQ21wKHdwRW5kKSA+IDApYnJlYWs7CisKKwkJCQlDUERGX1JlY3QgcmNMaW5lKGxpbmVpbmZvLnB0TGluZS54LAorCQkJCQkJCQkJbGluZWluZm8ucHRMaW5lLnkgKyBsaW5laW5mby5mTGluZURlc2NlbnQsCisJCQkJCQkJCQlsaW5laW5mby5wdExpbmUueCArIGxpbmVpbmZvLmZMaW5lV2lkdGgsCisJCQkJCQkJCQlsaW5laW5mby5wdExpbmUueSArIGxpbmVpbmZvLmZMaW5lQXNjZW50KTsKKworCQkJCW1fUmVmcmVzaC5QdXNoKENQVlRfV29yZFJhbmdlKGxpbmVpbmZvLmxpbmVwbGFjZSxsaW5laW5mby5saW5lRW5kKSxWVFRvRWRpdChyY0xpbmUpKTsKKworCQkJfXdoaWxlIChwSXRlcmF0b3ItPk5leHRMaW5lKCkpOworCQl9CisJfQorfQorCit2b2lkIENGWF9FZGl0OjpSZWZyZXNoUHVzaFJhbmRvbVJlY3RzKGNvbnN0IENQVlRfV29yZFJhbmdlICYgd3IpCit7CisJaWYgKG1fcFZULT5Jc1ZhbGlkKCkpCisJeworCQlpZiAoSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IgKiBwSXRlcmF0b3IgPSBtX3BWVC0+R2V0SXRlcmF0b3IoKSkKKwkJeworCQkJQ1BWVF9Xb3JkUmFuZ2Ugd3JUZW1wID0gd3I7CisKKwkJCW1fcFZULT5VcGRhdGVXb3JkUGxhY2Uod3JUZW1wLkJlZ2luUG9zKTsKKwkJCW1fcFZULT5VcGRhdGVXb3JkUGxhY2Uod3JUZW1wLkVuZFBvcyk7CisJCQlwSXRlcmF0b3ItPlNldEF0KHdyVGVtcC5CZWdpblBvcyk7CisKKwkJCUNQVlRfV29yZCB3b3JkaW5mbzsJCisJCQlDUFZUX0xpbmUgbGluZWluZm87CQorCQkJQ1BWVF9Xb3JkUGxhY2UgcGxhY2U7CisKKwkJCXdoaWxlIChwSXRlcmF0b3ItPk5leHRXb3JkKCkpCisJCQl7CisJCQkJcGxhY2UgPSBwSXRlcmF0b3ItPkdldEF0KCk7CisJCQkJaWYgKHBsYWNlLldvcmRDbXAod3JUZW1wLkVuZFBvcykgPiAwKSBicmVhazsKKwkJCQkJCQorCQkJCXBJdGVyYXRvci0+R2V0V29yZCh3b3JkaW5mbyk7CisJCQkJcEl0ZXJhdG9yLT5HZXRMaW5lKGxpbmVpbmZvKTsKKworCQkJCWlmIChwbGFjZS5MaW5lQ21wKHdyVGVtcC5CZWdpblBvcykgPT0gMCB8fCBwbGFjZS5MaW5lQ21wKHdyVGVtcC5FbmRQb3MpID09IDApCisJCQkJeworCQkJCQlDUERGX1JlY3QgcmNXb3JkKHdvcmRpbmZvLnB0V29yZC54LAorCQkJCQkJCQkJCWxpbmVpbmZvLnB0TGluZS55ICsgbGluZWluZm8uZkxpbmVEZXNjZW50LAorCQkJCQkJCQkJCXdvcmRpbmZvLnB0V29yZC54ICsgd29yZGluZm8uZldpZHRoLAorCQkJCQkJCQkJCWxpbmVpbmZvLnB0TGluZS55ICsgbGluZWluZm8uZkxpbmVBc2NlbnQpOworCisJCQkJCW1fUmVmcmVzaC5BZGRSZWZyZXNoKFZUVG9FZGl0KHJjV29yZCkpOworCQkJCX0KKwkJCQllbHNlCisJCQkJewkJCisJCQkJCUNQREZfUmVjdCByY0xpbmUobGluZWluZm8ucHRMaW5lLngsCisJCQkJCQkJCQkJbGluZWluZm8ucHRMaW5lLnkgKyBsaW5laW5mby5mTGluZURlc2NlbnQsCisJCQkJCQkJCQkJbGluZWluZm8ucHRMaW5lLnggKyBsaW5laW5mby5mTGluZVdpZHRoLAorCQkJCQkJCQkJCWxpbmVpbmZvLnB0TGluZS55ICsgbGluZWluZm8uZkxpbmVBc2NlbnQpOworCisJCQkJCW1fUmVmcmVzaC5BZGRSZWZyZXNoKFZUVG9FZGl0KHJjTGluZSkpOworCisJCQkJCXBJdGVyYXRvci0+TmV4dExpbmUoKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6OlJlZnJlc2hXb3JkUmFuZ2UoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UmIHdyKQoreworCWlmIChJUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvciAqIHBJdGVyYXRvciA9IG1fcFZULT5HZXRJdGVyYXRvcigpKQorCXsKKwkJQ1BWVF9Xb3JkUmFuZ2Ugd3JUZW1wID0gd3I7CisKKwkJbV9wVlQtPlVwZGF0ZVdvcmRQbGFjZSh3clRlbXAuQmVnaW5Qb3MpOworCQltX3BWVC0+VXBkYXRlV29yZFBsYWNlKHdyVGVtcC5FbmRQb3MpOworCQlwSXRlcmF0b3ItPlNldEF0KHdyVGVtcC5CZWdpblBvcyk7CisKKwkJQ1BWVF9Xb3JkIHdvcmRpbmZvOwkKKwkJQ1BWVF9MaW5lIGxpbmVpbmZvOwkKKwkJQ1BWVF9Xb3JkUGxhY2UgcGxhY2U7CisKKwkJd2hpbGUgKHBJdGVyYXRvci0+TmV4dFdvcmQoKSkKKwkJeworCQkJcGxhY2UgPSBwSXRlcmF0b3ItPkdldEF0KCk7CisJCQlpZiAocGxhY2UuV29yZENtcCh3clRlbXAuRW5kUG9zKSA+IDApIGJyZWFrOworCQkJCQkKKwkJCXBJdGVyYXRvci0+R2V0V29yZCh3b3JkaW5mbyk7CisJCQlwSXRlcmF0b3ItPkdldExpbmUobGluZWluZm8pOworCisJCQlpZiAocGxhY2UuTGluZUNtcCh3clRlbXAuQmVnaW5Qb3MpID09IDAgfHwgcGxhY2UuTGluZUNtcCh3clRlbXAuRW5kUG9zKSA9PSAwKQorCQkJeworCQkJCUNQREZfUmVjdCByY1dvcmQod29yZGluZm8ucHRXb3JkLngsCisJCQkJCQkJCQlsaW5laW5mby5wdExpbmUueSArIGxpbmVpbmZvLmZMaW5lRGVzY2VudCwKKwkJCQkJCQkJCXdvcmRpbmZvLnB0V29yZC54ICsgd29yZGluZm8uZldpZHRoLAorCQkJCQkJCQkJbGluZWluZm8ucHRMaW5lLnkgKyBsaW5laW5mby5mTGluZUFzY2VudCk7CisKKwkJCQlpZiAobV9iTm90aWZ5ICYmIG1fcE5vdGlmeSkKKwkJCQl7CisJCQkJCWlmICghbV9iTm90aWZ5RmxhZykKKwkJCQkJeworCQkJCQkJbV9iTm90aWZ5RmxhZyA9IFRSVUU7CisJCQkJCQlDUERGX1JlY3QgcmNSZWZyZXNoID0gVlRUb0VkaXQocmNXb3JkKTsKKwkJCQkJCW1fcE5vdGlmeS0+SU9uSW52YWxpZGF0ZVJlY3QoJnJjUmVmcmVzaCk7CisJCQkJCQltX2JOb3RpZnlGbGFnID0gRkFMU0U7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CQkKKwkJCQlDUERGX1JlY3QgcmNMaW5lKGxpbmVpbmZvLnB0TGluZS54LAorCQkJCQkJCQkJbGluZWluZm8ucHRMaW5lLnkgKyBsaW5laW5mby5mTGluZURlc2NlbnQsCisJCQkJCQkJCQlsaW5laW5mby5wdExpbmUueCArIGxpbmVpbmZvLmZMaW5lV2lkdGgsCisJCQkJCQkJCQlsaW5laW5mby5wdExpbmUueSArIGxpbmVpbmZvLmZMaW5lQXNjZW50KTsKKworCQkJCWlmIChtX2JOb3RpZnkgJiYgbV9wTm90aWZ5KQorCQkJCXsKKwkJCQkJaWYgKCFtX2JOb3RpZnlGbGFnKQorCQkJCQl7CisJCQkJCQltX2JOb3RpZnlGbGFnID0gVFJVRTsKKwkJCQkJCUNQREZfUmVjdCByY1JlZnJlc2ggPSBWVFRvRWRpdChyY0xpbmUpOworCQkJCQkJbV9wTm90aWZ5LT5JT25JbnZhbGlkYXRlUmVjdCgmcmNSZWZyZXNoKTsKKwkJCQkJCW1fYk5vdGlmeUZsYWcgPSBGQUxTRTsKKwkJCQkJfQorCQkJCX0KKworCQkJCXBJdGVyYXRvci0+TmV4dExpbmUoKTsKKwkJCX0KKwkJfQorCX0KK30KKwordm9pZCBDRlhfRWRpdDo6U2V0Q2FyZXQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkKK3sKKwltX3dwT2xkQ2FyZXQgPSBtX3dwQ2FyZXQ7IAorCW1fd3BDYXJldCA9IHBsYWNlOwkKK30KKwordm9pZCBDRlhfRWRpdDo6U2V0Q2FyZXRJbmZvKCkKK3sKKwlpZiAobV9iTm90aWZ5ICYmIG1fcE5vdGlmeSkKKwl7CisJCWlmICghbV9iTm90aWZ5RmxhZykKKwkJeworCQkJQ1BERl9Qb2ludCBwdEhlYWQoMC4wZiwwLjBmKSxwdEZvb3QoMC4wZiwwLjBmKTsKKworCQkJaWYgKElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yICogcEl0ZXJhdG9yID0gbV9wVlQtPkdldEl0ZXJhdG9yKCkpCisJCQl7CisJCQkJcEl0ZXJhdG9yLT5TZXRBdChtX3dwQ2FyZXQpOworCQkJCUNQVlRfV29yZCB3b3JkOworCQkJCUNQVlRfTGluZSBsaW5lOworCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpCisJCQkJeworCQkJCQlwdEhlYWQueCA9IHdvcmQucHRXb3JkLnggKyB3b3JkLmZXaWR0aDsKKwkJCQkJcHRIZWFkLnkgPSB3b3JkLnB0V29yZC55ICsgd29yZC5mQXNjZW50OworCQkJCQlwdEZvb3QueCA9IHdvcmQucHRXb3JkLnggKyB3b3JkLmZXaWR0aDsKKwkJCQkJcHRGb290LnkgPSB3b3JkLnB0V29yZC55ICsgd29yZC5mRGVzY2VudDsKKwkJCQl9CisJCQkJZWxzZSBpZiAocEl0ZXJhdG9yLT5HZXRMaW5lKGxpbmUpKQorCQkJCXsJCQkJCisJCQkJCXB0SGVhZC54ID0gbGluZS5wdExpbmUueDsKKwkJCQkJcHRIZWFkLnkgPSBsaW5lLnB0TGluZS55ICsgbGluZS5mTGluZUFzY2VudDsKKwkJCQkJcHRGb290LnggPSBsaW5lLnB0TGluZS54OworCQkJCQlwdEZvb3QueSA9IGxpbmUucHRMaW5lLnkgKyBsaW5lLmZMaW5lRGVzY2VudDsKKwkJCQl9CisJCQl9CQkKKworCQkJbV9iTm90aWZ5RmxhZyA9IFRSVUU7CisJCQltX3BOb3RpZnktPklPblNldENhcmV0KCFtX1NlbFN0YXRlLklzRXhpc3QoKSxWVFRvRWRpdChwdEhlYWQpLFZUVG9FZGl0KHB0Rm9vdCksIG1fd3BDYXJldCk7CisJCQltX2JOb3RpZnlGbGFnID0gRkFMU0U7CisJCX0KKwl9CisKKwlTZXRDYXJldENoYW5nZSgpOworfQorCit2b2lkIENGWF9FZGl0OjpTZXRDYXJldENoYW5nZSgpCit7CisJaWYgKHRoaXMtPm1fd3BDYXJldCA9PSB0aGlzLT5tX3dwT2xkQ2FyZXQpIHJldHVybjsKKworCWlmIChtX2JOb3RpZnkgJiYgbV9wVlQtPklzUmljaFRleHQoKSAmJiBtX3BOb3RpZnkpCisJeworCQlDUFZUX1NlY1Byb3BzIFNlY1Byb3BzOworCQlDUFZUX1dvcmRQcm9wcyBXb3JkUHJvcHM7CisKKwkJaWYgKElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yICogcEl0ZXJhdG9yID0gbV9wVlQtPkdldEl0ZXJhdG9yKCkpCisJCXsKKwkJCXBJdGVyYXRvci0+U2V0QXQobV93cENhcmV0KTsKKwkJCUNQVlRfV29yZCB3b3JkOworCQkJQ1BWVF9TZWN0aW9uIHNlY3Rpb247CisKKwkJCWlmIChwSXRlcmF0b3ItPkdldFNlY3Rpb24oc2VjdGlvbikpCisJCQl7CisJCQkJU2VjUHJvcHMgPSBzZWN0aW9uLlNlY1Byb3BzOworCQkJCVdvcmRQcm9wcyA9IHNlY3Rpb24uV29yZFByb3BzOworCQkJfQorCQkJCisJCQlpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmQpKQorCQkJewkJCQkKKwkJCQlXb3JkUHJvcHMgPSB3b3JkLldvcmRQcm9wczsJCQkJCisJCQl9CisJCX0JCQorCQkKKwkJaWYgKCFtX2JOb3RpZnlGbGFnKQorCQl7CisJCQltX2JOb3RpZnlGbGFnID0gVFJVRTsKKwkJCW1fcE5vdGlmeS0+SU9uQ2FyZXRDaGFuZ2UoU2VjUHJvcHMsV29yZFByb3BzKTsKKwkJCW1fYk5vdGlmeUZsYWcgPSBGQUxTRTsKKwkJfQorCX0JCit9CisKK3ZvaWQgQ0ZYX0VkaXQ6OlNldENhcmV0KEZYX0lOVDMyIG5Qb3MpCit7CisJaWYgKG1fcFZULT5Jc1ZhbGlkKCkpCisJeworCQlTZWxlY3ROb25lKCk7CQkKKwkJU2V0Q2FyZXQobV9wVlQtPldvcmRJbmRleFRvV29yZFBsYWNlKG5Qb3MpKTsKKwkJbV9TZWxTdGF0ZS5TZXQobV93cENhcmV0LG1fd3BDYXJldCk7CisKKwkJU2Nyb2xsVG9DYXJldCgpOworCQlTZXRDYXJldE9yaWdpbigpOworCQlTZXRDYXJldEluZm8oKTsKKwl9Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6Ok9uTW91c2VEb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCxGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKQoreworCWlmIChtX3BWVC0+SXNWYWxpZCgpKQorCXsKKwkJU2VsZWN0Tm9uZSgpOwkJCisJCVNldENhcmV0KG1fcFZULT5TZWFyY2hXb3JkUGxhY2UoRWRpdFRvVlQocG9pbnQpKSk7CisJCW1fU2VsU3RhdGUuU2V0KG1fd3BDYXJldCxtX3dwQ2FyZXQpOworCisJCVNjcm9sbFRvQ2FyZXQoKTsKKwkJU2V0Q2FyZXRPcmlnaW4oKTsKKwkJU2V0Q2FyZXRJbmZvKCk7CisJfQorfQorCit2b2lkIENGWF9FZGl0OjpPbk1vdXNlTW92ZShjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkKK3sKKwlpZiAobV9wVlQtPklzVmFsaWQoKSkKKwl7CisJCVNldENhcmV0KG1fcFZULT5TZWFyY2hXb3JkUGxhY2UoRWRpdFRvVlQocG9pbnQpKSk7CisKKwkJaWYgKG1fd3BDYXJldCAhPSBtX3dwT2xkQ2FyZXQpCisJCXsKKwkJCW1fU2VsU3RhdGUuU2V0RW5kUG9zKG1fd3BDYXJldCk7CQkKKworCQkJU2Nyb2xsVG9DYXJldCgpOworCQkJQ1BWVF9Xb3JkUmFuZ2Ugd3IobV93cE9sZENhcmV0LG1fd3BDYXJldCk7CisJCQlSZWZyZXNoKFJQX09QVElPTkFMLCZ3cik7CisJCQlTZXRDYXJldE9yaWdpbigpOworCQkJU2V0Q2FyZXRJbmZvKCk7CisJCX0KKwl9Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6Ok9uVktfVVAoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkKK3sJCisJaWYgKG1fcFZULT5Jc1ZhbGlkKCkpCisJeworCQlTZXRDYXJldChtX3BWVC0+R2V0VXBXb3JkUGxhY2UobV93cENhcmV0LG1fcHRDYXJldCkpOworCisJCWlmIChiU2hpZnQpCisJCXsKKwkJCWlmIChtX1NlbFN0YXRlLklzRXhpc3QoKSkKKwkJCQltX1NlbFN0YXRlLlNldEVuZFBvcyhtX3dwQ2FyZXQpOworCQkJZWxzZQorCQkJCW1fU2VsU3RhdGUuU2V0KG1fd3BPbGRDYXJldCxtX3dwQ2FyZXQpOworCisJCQlpZiAobV93cE9sZENhcmV0ICE9IG1fd3BDYXJldCkKKwkJCXsKKwkJCQlTY3JvbGxUb0NhcmV0KCk7CisJCQkJQ1BWVF9Xb3JkUmFuZ2Ugd3IobV93cE9sZENhcmV0LCBtX3dwQ2FyZXQpOworCQkJCVJlZnJlc2goUlBfT1BUSU9OQUwsICZ3cik7CisJCQkJU2V0Q2FyZXRJbmZvKCk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlTZWxlY3ROb25lKCk7CQkKKwkJCQorCQkJU2Nyb2xsVG9DYXJldCgpOwkJCQorCQkJU2V0Q2FyZXRJbmZvKCk7CisJCX0KKwl9Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6Ok9uVktfRE9XTihGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKQoreworCWlmIChtX3BWVC0+SXNWYWxpZCgpKQorCXsKKwkJU2V0Q2FyZXQobV9wVlQtPkdldERvd25Xb3JkUGxhY2UobV93cENhcmV0LG1fcHRDYXJldCkpOworCisJCWlmIChiU2hpZnQpCisJCXsKKwkJCWlmIChtX1NlbFN0YXRlLklzRXhpc3QoKSkKKwkJCQltX1NlbFN0YXRlLlNldEVuZFBvcyhtX3dwQ2FyZXQpOworCQkJZWxzZQorCQkJCW1fU2VsU3RhdGUuU2V0KG1fd3BPbGRDYXJldCxtX3dwQ2FyZXQpOworCisJCQlpZiAobV93cE9sZENhcmV0ICE9IG1fd3BDYXJldCkKKwkJCXsKKwkJCQlTY3JvbGxUb0NhcmV0KCk7CisJCQkJQ1BWVF9Xb3JkUmFuZ2Ugd3IobV93cE9sZENhcmV0LG1fd3BDYXJldCk7CisJCQkJUmVmcmVzaChSUF9PUFRJT05BTCwgJndyKTsKKwkJCQlTZXRDYXJldEluZm8oKTsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCVNlbGVjdE5vbmUoKTsKKworCQkJU2Nyb2xsVG9DYXJldCgpOwkJCisJCQlTZXRDYXJldEluZm8oKTsKKwkJfQorCX0KK30KKwordm9pZCBDRlhfRWRpdDo6T25WS19MRUZUKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpCit7CisJaWYgKG1fcFZULT5Jc1ZhbGlkKCkpCisJeworCQlpZiAoYlNoaWZ0KQorCQl7CisJCQlpZiAobV93cENhcmV0ID09IG1fcFZULT5HZXRMaW5lQmVnaW5QbGFjZShtX3dwQ2FyZXQpICYmCisJCQkJbV93cENhcmV0ICE9IG1fcFZULT5HZXRTZWN0aW9uQmVnaW5QbGFjZShtX3dwQ2FyZXQpKQorCQkJCVNldENhcmV0KG1fcFZULT5HZXRQcmV2V29yZFBsYWNlKG1fd3BDYXJldCkpOwkKKworCQkJU2V0Q2FyZXQobV9wVlQtPkdldFByZXZXb3JkUGxhY2UobV93cENhcmV0KSk7CisKKwkJCWlmIChtX1NlbFN0YXRlLklzRXhpc3QoKSkKKwkJCQltX1NlbFN0YXRlLlNldEVuZFBvcyhtX3dwQ2FyZXQpOwkJCQorCQkJZWxzZQorCQkJCW1fU2VsU3RhdGUuU2V0KG1fd3BPbGRDYXJldCwgbV93cENhcmV0KTsKKworCQkJaWYgKG1fd3BPbGRDYXJldCAhPSBtX3dwQ2FyZXQpCisJCQl7CisJCQkJU2Nyb2xsVG9DYXJldCgpOworCQkJCUNQVlRfV29yZFJhbmdlIHdyKG1fd3BPbGRDYXJldCxtX3dwQ2FyZXQpOworCQkJCVJlZnJlc2goUlBfT1BUSU9OQUwsJndyKTsKKwkJCQlTZXRDYXJldEluZm8oKTsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChtX1NlbFN0YXRlLklzRXhpc3QoKSkKKwkJCXsKKwkJCQlpZiAobV9TZWxTdGF0ZS5CZWdpblBvcy5Xb3JkQ21wKG1fU2VsU3RhdGUuRW5kUG9zKTwwKQorCQkJCQlTZXRDYXJldChtX1NlbFN0YXRlLkJlZ2luUG9zKTsKKwkJCQllbHNlCisJCQkJCVNldENhcmV0KG1fU2VsU3RhdGUuRW5kUG9zKTsKKworCQkJCVNlbGVjdE5vbmUoKTsKKwkJCQlTY3JvbGxUb0NhcmV0KCk7CisJCQkJU2V0Q2FyZXRJbmZvKCk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKG1fd3BDYXJldCA9PSBtX3BWVC0+R2V0TGluZUJlZ2luUGxhY2UobV93cENhcmV0KSAmJgorCQkJCQltX3dwQ2FyZXQgIT0gbV9wVlQtPkdldFNlY3Rpb25CZWdpblBsYWNlKG1fd3BDYXJldCkpCisJCQkJCVNldENhcmV0KG1fcFZULT5HZXRQcmV2V29yZFBsYWNlKG1fd3BDYXJldCkpOwkKKworCQkJCVNldENhcmV0KG1fcFZULT5HZXRQcmV2V29yZFBsYWNlKG1fd3BDYXJldCkpOworCisJCQkJU2Nyb2xsVG9DYXJldCgpOworCQkJCVNldENhcmV0T3JpZ2luKCk7CisJCQkJU2V0Q2FyZXRJbmZvKCk7CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6Ok9uVktfUklHSFQoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkKK3sKKwlpZiAobV9wVlQtPklzVmFsaWQoKSkKKwl7CisJCWlmIChiU2hpZnQpCisJCXsKKwkJCVNldENhcmV0KG1fcFZULT5HZXROZXh0V29yZFBsYWNlKG1fd3BDYXJldCkpOworCisJCQlpZiAobV93cENhcmV0ID09IG1fcFZULT5HZXRMaW5lRW5kUGxhY2UobV93cENhcmV0KSAmJgorCQkJCW1fd3BDYXJldCAhPSBtX3BWVC0+R2V0U2VjdGlvbkVuZFBsYWNlKG1fd3BDYXJldCkpCisJCQkJU2V0Q2FyZXQobV9wVlQtPkdldE5leHRXb3JkUGxhY2UobV93cENhcmV0KSk7CisKKwkJCWlmIChtX1NlbFN0YXRlLklzRXhpc3QoKSkKKwkJCQltX1NlbFN0YXRlLlNldEVuZFBvcyhtX3dwQ2FyZXQpOwkJCQorCQkJZWxzZQorCQkJCW1fU2VsU3RhdGUuU2V0KG1fd3BPbGRDYXJldCxtX3dwQ2FyZXQpOwkJCQorCisJCQlpZiAobV93cE9sZENhcmV0ICE9IG1fd3BDYXJldCkKKwkJCXsJCQkKKwkJCQlTY3JvbGxUb0NhcmV0KCk7CisJCQkJQ1BWVF9Xb3JkUmFuZ2Ugd3IobV93cE9sZENhcmV0LG1fd3BDYXJldCk7CisJCQkJUmVmcmVzaChSUF9PUFRJT05BTCwmd3IpOworCQkJCVNldENhcmV0SW5mbygpOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKG1fU2VsU3RhdGUuSXNFeGlzdCgpKQorCQkJeworCQkJCWlmIChtX1NlbFN0YXRlLkJlZ2luUG9zLldvcmRDbXAobV9TZWxTdGF0ZS5FbmRQb3MpPjApCisJCQkJCVNldENhcmV0KG1fU2VsU3RhdGUuQmVnaW5Qb3MpOworCQkJCWVsc2UKKwkJCQkJU2V0Q2FyZXQobV9TZWxTdGF0ZS5FbmRQb3MpOworCisJCQkJU2VsZWN0Tm9uZSgpOworCQkJCVNjcm9sbFRvQ2FyZXQoKTsKKwkJCQlTZXRDYXJldEluZm8oKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlTZXRDYXJldChtX3BWVC0+R2V0TmV4dFdvcmRQbGFjZShtX3dwQ2FyZXQpKTsKKworCQkJCWlmIChtX3dwQ2FyZXQgPT0gbV9wVlQtPkdldExpbmVFbmRQbGFjZShtX3dwQ2FyZXQpICYmCisJCQkJCW1fd3BDYXJldCAhPSBtX3BWVC0+R2V0U2VjdGlvbkVuZFBsYWNlKG1fd3BDYXJldCkpCisJCQkJCVNldENhcmV0KG1fcFZULT5HZXROZXh0V29yZFBsYWNlKG1fd3BDYXJldCkpOwkJCQkKKworCQkJCVNjcm9sbFRvQ2FyZXQoKTsKKwkJCQlTZXRDYXJldE9yaWdpbigpOworCQkJCVNldENhcmV0SW5mbygpOworCQkJfQorCQl9CisJfQorfQorCit2b2lkIENGWF9FZGl0OjpPblZLX0hPTUUoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkKK3sKKwlpZiAobV9wVlQtPklzVmFsaWQoKSkKKwl7CisJCWlmIChiU2hpZnQpCisJCXsKKwkJCWlmIChiQ3RybCkKKwkJCQlTZXRDYXJldChtX3BWVC0+R2V0QmVnaW5Xb3JkUGxhY2UoKSk7CisJCQllbHNlCisJCQkJU2V0Q2FyZXQobV9wVlQtPkdldExpbmVCZWdpblBsYWNlKG1fd3BDYXJldCkpOworCisJCQlpZiAobV9TZWxTdGF0ZS5Jc0V4aXN0KCkpCisJCQkJbV9TZWxTdGF0ZS5TZXRFbmRQb3MobV93cENhcmV0KTsJCQkKKwkJCWVsc2UKKwkJCQltX1NlbFN0YXRlLlNldChtX3dwT2xkQ2FyZXQsbV93cENhcmV0KTsKKworCQkJU2Nyb2xsVG9DYXJldCgpOworCQkJQ1BWVF9Xb3JkUmFuZ2Ugd3IobV93cE9sZENhcmV0LCBtX3dwQ2FyZXQpOworCQkJUmVmcmVzaChSUF9PUFRJT05BTCwgJndyKTsKKwkJCVNldENhcmV0SW5mbygpOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKG1fU2VsU3RhdGUuSXNFeGlzdCgpKQorCQkJeworCQkJCWlmIChtX1NlbFN0YXRlLkJlZ2luUG9zLldvcmRDbXAobV9TZWxTdGF0ZS5FbmRQb3MpPDApCisJCQkJCVNldENhcmV0KG1fU2VsU3RhdGUuQmVnaW5Qb3MpOworCQkJCWVsc2UKKwkJCQkJU2V0Q2FyZXQobV9TZWxTdGF0ZS5FbmRQb3MpOworCisJCQkJU2VsZWN0Tm9uZSgpOworCQkJCVNjcm9sbFRvQ2FyZXQoKTsKKwkJCQlTZXRDYXJldEluZm8oKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlpZiAoYkN0cmwpCisJCQkJCVNldENhcmV0KG1fcFZULT5HZXRCZWdpbldvcmRQbGFjZSgpKTsKKwkJCQllbHNlCisJCQkJCVNldENhcmV0KG1fcFZULT5HZXRMaW5lQmVnaW5QbGFjZShtX3dwQ2FyZXQpKTsJCisJCQkJCisJCQkJU2Nyb2xsVG9DYXJldCgpOworCQkJCVNldENhcmV0T3JpZ2luKCk7CisJCQkJU2V0Q2FyZXRJbmZvKCk7CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6Ok9uVktfRU5EKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpCit7CisJaWYgKG1fcFZULT5Jc1ZhbGlkKCkpCisJeworCQlpZiAoYlNoaWZ0KQorCQl7CisJCQlpZiAoYkN0cmwpCisJCQkJU2V0Q2FyZXQobV9wVlQtPkdldEVuZFdvcmRQbGFjZSgpKTsKKwkJCWVsc2UKKwkJCQlTZXRDYXJldChtX3BWVC0+R2V0TGluZUVuZFBsYWNlKG1fd3BDYXJldCkpOworCisJCQlpZiAobV9TZWxTdGF0ZS5Jc0V4aXN0KCkpCisJCQkJbV9TZWxTdGF0ZS5TZXRFbmRQb3MobV93cENhcmV0KTsKKwkJCWVsc2UKKwkJCQltX1NlbFN0YXRlLlNldChtX3dwT2xkQ2FyZXQsIG1fd3BDYXJldCk7CisKKwkJCVNjcm9sbFRvQ2FyZXQoKTsKKwkJCUNQVlRfV29yZFJhbmdlIHdyKG1fd3BPbGRDYXJldCwgbV93cENhcmV0KTsKKwkJCVJlZnJlc2goUlBfT1BUSU9OQUwsICZ3cik7CisJCQlTZXRDYXJldEluZm8oKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChtX1NlbFN0YXRlLklzRXhpc3QoKSkKKwkJCXsKKwkJCQlpZiAobV9TZWxTdGF0ZS5CZWdpblBvcy5Xb3JkQ21wKG1fU2VsU3RhdGUuRW5kUG9zKT4wKQorCQkJCQlTZXRDYXJldChtX1NlbFN0YXRlLkJlZ2luUG9zKTsKKwkJCQllbHNlCisJCQkJCVNldENhcmV0KG1fU2VsU3RhdGUuRW5kUG9zKTsKKworCQkJCVNlbGVjdE5vbmUoKTsKKwkJCQlTY3JvbGxUb0NhcmV0KCk7CisJCQkJU2V0Q2FyZXRJbmZvKCk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYgKGJDdHJsKQorCQkJCQlTZXRDYXJldChtX3BWVC0+R2V0RW5kV29yZFBsYWNlKCkpOworCQkJCWVsc2UKKwkJCQkJU2V0Q2FyZXQobV9wVlQtPkdldExpbmVFbmRQbGFjZShtX3dwQ2FyZXQpKTsKKwkJCQkJCQorCQkJCVNjcm9sbFRvQ2FyZXQoKTsJCQkKKwkJCQlTZXRDYXJldE9yaWdpbigpOworCQkJCVNldENhcmV0SW5mbygpOworCQkJfQorCQl9CisJfQorfQorCit2b2lkIENGWF9FZGl0OjpTZXRUZXh0KEZYX0xQQ1dTVFIgdGV4dCxGWF9JTlQzMiBjaGFyc2V0LAorCQkJCQkJY29uc3QgQ1BWVF9TZWNQcm9wcyAqIHBTZWNQcm9wcyxjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMsIEZYX0JPT0wgYkFkZFVuZG8sIEZYX0JPT0wgYlBhaW50KQoreworCUVtcHR5KCk7CisJRG9JbnNlcnRUZXh0KENQVlRfV29yZFBsYWNlKDAsMCwtMSksIHRleHQsIGNoYXJzZXQsIHBTZWNQcm9wcywgcFdvcmRQcm9wcyk7CisJaWYgKGJQYWludCkgUGFpbnQoKTsKKwlpZiAobV9iT3ByTm90aWZ5ICYmIG1fcE9wck5vdGlmeSkKKwkJbV9wT3ByTm90aWZ5LT5PblNldFRleHQobV93cENhcmV0LCBtX3dwT2xkQ2FyZXQpOworCS8vaWYgKGJBZGRVbmRvKQorfQorCitGWF9CT09MIENGWF9FZGl0OjpJbnNlcnRXb3JkKEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgY2hhcnNldCwgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzLCBGWF9CT09MIGJBZGRVbmRvLCBGWF9CT09MIGJQYWludCkKK3sKKwlpZiAoSXNUZXh0T3ZlcmZsb3coKSkgcmV0dXJuIEZBTFNFOworCisJaWYgKG1fcFZULT5Jc1ZhbGlkKCkpCisJeworCQltX3BWVC0+VXBkYXRlV29yZFBsYWNlKG1fd3BDYXJldCk7CisKKwkJU2V0Q2FyZXQobV9wVlQtPkluc2VydFdvcmQobV93cENhcmV0LHdvcmQsR2V0Q2hhclNldEZyb21Vbmljb2RlKHdvcmQsIGNoYXJzZXQpLHBXb3JkUHJvcHMpKTsKKwkJbV9TZWxTdGF0ZS5TZXQobV93cENhcmV0LG1fd3BDYXJldCk7CisKKwkJaWYgKG1fd3BDYXJldCAhPSBtX3dwT2xkQ2FyZXQpCisJCXsKKwkJCWlmIChiQWRkVW5kbyAmJiBtX2JFbmFibGVVbmRvKQorCQkJeworCQkJCUFkZEVkaXRVbmRvSXRlbShuZXcgQ0ZYRVVfSW5zZXJ0V29yZCh0aGlzLG1fd3BPbGRDYXJldCxtX3dwQ2FyZXQsd29yZCxjaGFyc2V0LHBXb3JkUHJvcHMpKTsKKwkJCX0KKworCQkJaWYgKGJQYWludCkKKwkJCQlQYWludEluc2VydFRleHQobV93cE9sZENhcmV0LCBtX3dwQ2FyZXQpOworCisJCQlpZiAobV9iT3ByTm90aWZ5ICYmIG1fcE9wck5vdGlmeSkKKwkJCQltX3BPcHJOb3RpZnktPk9uSW5zZXJ0V29yZChtX3dwQ2FyZXQsIG1fd3BPbGRDYXJldCk7CisKKwkJCXJldHVybiBUUlVFOworCQl9CisJfQorCQorCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBDRlhfRWRpdDo6SW5zZXJ0UmV0dXJuKGNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMsY29uc3QgQ1BWVF9Xb3JkUHJvcHMgKiBwV29yZFByb3BzLCAKKwkJCQkJCQkgICBGWF9CT09MIGJBZGRVbmRvLCBGWF9CT09MIGJQYWludCkKK3sKKwlpZiAoSXNUZXh0T3ZlcmZsb3coKSkgcmV0dXJuIEZBTFNFOworCisJaWYgKG1fcFZULT5Jc1ZhbGlkKCkpCisJeworCQltX3BWVC0+VXBkYXRlV29yZFBsYWNlKG1fd3BDYXJldCk7CisJCVNldENhcmV0KG1fcFZULT5JbnNlcnRTZWN0aW9uKG1fd3BDYXJldCxwU2VjUHJvcHMscFdvcmRQcm9wcykpOworCQltX1NlbFN0YXRlLlNldChtX3dwQ2FyZXQsbV93cENhcmV0KTsKKworCQlpZiAobV93cENhcmV0ICE9IG1fd3BPbGRDYXJldCkKKwkJeworCQkJaWYgKGJBZGRVbmRvICYmIG1fYkVuYWJsZVVuZG8pCisJCQl7CisJCQkJQWRkRWRpdFVuZG9JdGVtKG5ldyBDRlhFVV9JbnNlcnRSZXR1cm4odGhpcyxtX3dwT2xkQ2FyZXQsbV93cENhcmV0LHBTZWNQcm9wcyxwV29yZFByb3BzKSk7CisJCQl9CisKKwkJCWlmIChiUGFpbnQpCisJCQl7CisJCQkJUmVhcnJhbmdlUGFydChDUFZUX1dvcmRSYW5nZShtX3dwT2xkQ2FyZXQsIG1fd3BDYXJldCkpOworCQkJCVNjcm9sbFRvQ2FyZXQoKTsKKwkJCQlDUFZUX1dvcmRSYW5nZSB3cihtX3dwT2xkQ2FyZXQsIEdldFZpc2libGVXb3JkUmFuZ2UoKS5FbmRQb3MpOworCQkJCVJlZnJlc2goUlBfQU5BTFlTRSwgJndyKTsJCQorCQkJCVNldENhcmV0T3JpZ2luKCk7CisJCQkJU2V0Q2FyZXRJbmZvKCk7CQkJCisJCQl9CisKKwkJCWlmIChtX2JPcHJOb3RpZnkgJiYgbV9wT3ByTm90aWZ5KQorCQkJCW1fcE9wck5vdGlmeS0+T25JbnNlcnRSZXR1cm4obV93cENhcmV0LCBtX3dwT2xkQ2FyZXQpOworCisJCQlyZXR1cm4gVFJVRTsKKwkJfQorCX0KKworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBDRlhfRWRpdDo6QmFja3NwYWNlKEZYX0JPT0wgYkFkZFVuZG8sIEZYX0JPT0wgYlBhaW50KQoreworCWlmIChtX3BWVC0+SXNWYWxpZCgpKQorCXsKKwkJaWYgKG1fd3BDYXJldCA9PSBtX3BWVC0+R2V0QmVnaW5Xb3JkUGxhY2UoKSkgcmV0dXJuIEZBTFNFOworCisJCUNQVlRfU2VjdGlvbiBzZWN0aW9uOworCQlDUFZUX1dvcmQgd29yZDsKKworCQlpZiAoYkFkZFVuZG8pCisJCXsKKwkJCWlmIChJUERGX1ZhcmlhYmxlVGV4dF9JdGVyYXRvciAqIHBJdGVyYXRvciA9IG1fcFZULT5HZXRJdGVyYXRvcigpKQorCQkJewkJCQkKKwkJCQlwSXRlcmF0b3ItPlNldEF0KG1fd3BDYXJldCk7CisJCQkJcEl0ZXJhdG9yLT5HZXRTZWN0aW9uKHNlY3Rpb24pOworCQkJCXBJdGVyYXRvci0+R2V0V29yZCh3b3JkKTsKKwkJCX0KKwkJfQorCisJCW1fcFZULT5VcGRhdGVXb3JkUGxhY2UobV93cENhcmV0KTsKKwkJU2V0Q2FyZXQobV9wVlQtPkJhY2tTcGFjZVdvcmQobV93cENhcmV0KSk7CisJCW1fU2VsU3RhdGUuU2V0KG1fd3BDYXJldCxtX3dwQ2FyZXQpOworCisJCWlmIChtX3dwQ2FyZXQgIT0gbV93cE9sZENhcmV0KQorCQl7CisJCQlpZiAoYkFkZFVuZG8gJiYgbV9iRW5hYmxlVW5kbykKKwkJCXsKKwkJCQlpZiAobV93cENhcmV0LlNlY0NtcChtX3dwT2xkQ2FyZXQpICE9IDApCQkJCisJCQkJCUFkZEVkaXRVbmRvSXRlbShuZXcgQ0ZYRVVfQmFja3NwYWNlKHRoaXMsbV93cE9sZENhcmV0LG1fd3BDYXJldCx3b3JkLldvcmQsd29yZC5uQ2hhcnNldCwKKwkJCQkJCXNlY3Rpb24uU2VjUHJvcHMsc2VjdGlvbi5Xb3JkUHJvcHMpKTsKKwkJCQllbHNlCisJCQkJCUFkZEVkaXRVbmRvSXRlbShuZXcgQ0ZYRVVfQmFja3NwYWNlKHRoaXMsbV93cE9sZENhcmV0LG1fd3BDYXJldCx3b3JkLldvcmQsd29yZC5uQ2hhcnNldCwKKwkJCQkJCXNlY3Rpb24uU2VjUHJvcHMsd29yZC5Xb3JkUHJvcHMpKTsKKwkJCX0KKworCQkJaWYgKGJQYWludCkKKwkJCXsKKwkJCQlSZWFycmFuZ2VQYXJ0KENQVlRfV29yZFJhbmdlKG1fd3BDYXJldCxtX3dwT2xkQ2FyZXQpKTsKKwkJCQlTY3JvbGxUb0NhcmV0KCk7CisKKwkJCQlDUFZUX1dvcmRSYW5nZSB3cjsKKwkJCQlpZiAobV93cENhcmV0LlNlY0NtcChtX3dwT2xkQ2FyZXQpICE9MCkKKwkJCQkJd3IgPSBDUFZUX1dvcmRSYW5nZShtX3BWVC0+R2V0UHJldldvcmRQbGFjZShtX3dwQ2FyZXQpLEdldFZpc2libGVXb3JkUmFuZ2UoKS5FbmRQb3MpOwkKKwkJCQllbHNlIGlmIChtX3dwQ2FyZXQuTGluZUNtcChtX3dwT2xkQ2FyZXQpICE9MCkKKwkJCQkJd3IgPSBDUFZUX1dvcmRSYW5nZShtX3BWVC0+R2V0TGluZUJlZ2luUGxhY2UobV93cENhcmV0KSxtX3BWVC0+R2V0U2VjdGlvbkVuZFBsYWNlKG1fd3BDYXJldCkpOworCQkJCWVsc2UKKwkJCQkJd3IgPSBDUFZUX1dvcmRSYW5nZShtX3BWVC0+R2V0UHJldldvcmRQbGFjZShtX3dwQ2FyZXQpLG1fcFZULT5HZXRTZWN0aW9uRW5kUGxhY2UobV93cENhcmV0KSk7CisKKwkJCQlSZWZyZXNoKFJQX0FOQUxZU0UsICZ3cik7CisKKwkJCQlTZXRDYXJldE9yaWdpbigpOworCQkJCVNldENhcmV0SW5mbygpOworCQkJfQorCisJCQlpZiAobV9iT3ByTm90aWZ5ICYmIG1fcE9wck5vdGlmeSkKKwkJCQltX3BPcHJOb3RpZnktPk9uQmFja1NwYWNlKG1fd3BDYXJldCwgbV93cE9sZENhcmV0KTsKKworCQkJcmV0dXJuIFRSVUU7CisJCX0KKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wgQ0ZYX0VkaXQ6OkRlbGV0ZShGWF9CT09MIGJBZGRVbmRvLCBGWF9CT09MIGJQYWludCkKK3sKKwlpZiAobV9wVlQtPklzVmFsaWQoKSkKKwl7CisJCWlmIChtX3dwQ2FyZXQgPT0gbV9wVlQtPkdldEVuZFdvcmRQbGFjZSgpKSByZXR1cm4gRkFMU0U7CisKKwkJQ1BWVF9TZWN0aW9uIHNlY3Rpb247CisJCUNQVlRfV29yZCB3b3JkOworCisJCWlmIChiQWRkVW5kbykKKwkJeworCQkJaWYgKElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yICogcEl0ZXJhdG9yID0gbV9wVlQtPkdldEl0ZXJhdG9yKCkpCisJCQl7CQkJCQorCQkJCXBJdGVyYXRvci0+U2V0QXQobV9wVlQtPkdldE5leHRXb3JkUGxhY2UobV93cENhcmV0KSk7CisJCQkJcEl0ZXJhdG9yLT5HZXRTZWN0aW9uKHNlY3Rpb24pOworCQkJCXBJdGVyYXRvci0+R2V0V29yZCh3b3JkKTsKKwkJCX0KKwkJfQorCisJCW1fcFZULT5VcGRhdGVXb3JkUGxhY2UobV93cENhcmV0KTsKKwkJRlhfQk9PTCBiU2VjRW5kID0gKG1fd3BDYXJldCA9PSBtX3BWVC0+R2V0U2VjdGlvbkVuZFBsYWNlKG1fd3BDYXJldCkpOworCisJCVNldENhcmV0KG1fcFZULT5EZWxldGVXb3JkKG1fd3BDYXJldCkpOworCQltX1NlbFN0YXRlLlNldChtX3dwQ2FyZXQsbV93cENhcmV0KTsKKworCQlpZiAoYkFkZFVuZG8gJiYgbV9iRW5hYmxlVW5kbykKKwkJeworCQkJaWYgKGJTZWNFbmQpCQkKKwkJCQlBZGRFZGl0VW5kb0l0ZW0obmV3IENGWEVVX0RlbGV0ZSh0aGlzLG1fd3BPbGRDYXJldCxtX3dwQ2FyZXQsd29yZC5Xb3JkLHdvcmQubkNoYXJzZXQsCisJCQkJCXNlY3Rpb24uU2VjUHJvcHMsc2VjdGlvbi5Xb3JkUHJvcHMsYlNlY0VuZCkpOworCQkJZWxzZQorCQkJCUFkZEVkaXRVbmRvSXRlbShuZXcgQ0ZYRVVfRGVsZXRlKHRoaXMsbV93cE9sZENhcmV0LG1fd3BDYXJldCx3b3JkLldvcmQsd29yZC5uQ2hhcnNldCwKKwkJCQkJc2VjdGlvbi5TZWNQcm9wcyx3b3JkLldvcmRQcm9wcyxiU2VjRW5kKSk7CisJCX0KKwkJCisJCWlmIChiUGFpbnQpCisJCXsKKwkJCVJlYXJyYW5nZVBhcnQoQ1BWVF9Xb3JkUmFuZ2UobV93cE9sZENhcmV0LG1fd3BDYXJldCkpOworCQkJU2Nyb2xsVG9DYXJldCgpOworCisJCQlDUFZUX1dvcmRSYW5nZSB3cjsKKwkJCWlmIChiU2VjRW5kKQorCQkJCXdyID0gQ1BWVF9Xb3JkUmFuZ2UobV9wVlQtPkdldFByZXZXb3JkUGxhY2UobV93cE9sZENhcmV0KSxHZXRWaXNpYmxlV29yZFJhbmdlKCkuRW5kUG9zKTsKKwkJCWVsc2UgaWYgKG1fd3BDYXJldC5MaW5lQ21wKG1fd3BPbGRDYXJldCkgIT0wKQorCQkJCXdyID0gQ1BWVF9Xb3JkUmFuZ2UobV9wVlQtPkdldExpbmVCZWdpblBsYWNlKG1fd3BDYXJldCksbV9wVlQtPkdldFNlY3Rpb25FbmRQbGFjZShtX3dwQ2FyZXQpKTsKKwkJCWVsc2UKKwkJCQl3ciA9IENQVlRfV29yZFJhbmdlKG1fcFZULT5HZXRQcmV2V29yZFBsYWNlKG1fd3BPbGRDYXJldCksbV9wVlQtPkdldFNlY3Rpb25FbmRQbGFjZShtX3dwQ2FyZXQpKTsJCQkKKworCQkJUmVmcmVzaChSUF9BTkFMWVNFLCAmd3IpOworCQkJCisJCQlTZXRDYXJldE9yaWdpbigpOworCQkJU2V0Q2FyZXRJbmZvKCk7CisJCX0KKworCQlpZiAobV9iT3ByTm90aWZ5ICYmIG1fcE9wck5vdGlmeSkKKwkJCW1fcE9wck5vdGlmeS0+T25EZWxldGUobV93cENhcmV0LCBtX3dwT2xkQ2FyZXQpOworCisJCXJldHVybiBUUlVFOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTAlDRlhfRWRpdDo6RW1wdHkoKQoreworCWlmIChtX3BWVC0+SXNWYWxpZCgpKQorCXsKKwkJbV9wVlQtPkRlbGV0ZVdvcmRzKEdldFdob2xlV29yZFJhbmdlKCkpOworCQlTZXRDYXJldChtX3BWVC0+R2V0QmVnaW5Xb3JkUGxhY2UoKSk7CisKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIENGWF9FZGl0OjpDbGVhcihGWF9CT09MIGJBZGRVbmRvLCBGWF9CT09MIGJQYWludCkKK3sKKwlpZiAobV9wVlQtPklzVmFsaWQoKSkKKwl7CisJCWlmIChtX1NlbFN0YXRlLklzRXhpc3QoKSkKKwkJeworCQkJQ1BWVF9Xb3JkUmFuZ2UgcmFuZ2UgPSBtX1NlbFN0YXRlLkNvbnZlcnRUb1dvcmRSYW5nZSgpOworCisJCQlpZiAoYkFkZFVuZG8gJiYgbV9iRW5hYmxlVW5kbykKKwkJCXsKKwkJCQlpZiAobV9wVlQtPklzUmljaFRleHQoKSkKKwkJCQl7CisJCQkJCUJlZ2luR3JvdXBVbmRvKEwiIik7CisKKwkJCQkJaWYgKElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yICogcEl0ZXJhdG9yID0gbV9wVlQtPkdldEl0ZXJhdG9yKCkpCisJCQkJCXsKKwkJCQkJCXBJdGVyYXRvci0+U2V0QXQocmFuZ2UuRW5kUG9zKTsKKworCQkJCQkJQ1BWVF9Xb3JkIHdvcmRpbmZvOwkKKwkJCQkJCUNQVlRfU2VjdGlvbiBzZWNpbmZvOwkJCQkJCQorCQkJCQkJZG8KKwkJCQkJCXsJCQkJCQkJCisJCQkJCQkJQ1BWVF9Xb3JkUGxhY2UgcGxhY2UgPSBwSXRlcmF0b3ItPkdldEF0KCk7CisJCQkJCQkJaWYgKHBsYWNlLldvcmRDbXAocmFuZ2UuQmVnaW5Qb3MpIDw9IDApYnJlYWs7CisKKwkJCQkJCQlDUFZUX1dvcmRQbGFjZSBvbGRwbGFjZSA9IG1fcFZULT5HZXRQcmV2V29yZFBsYWNlKHBsYWNlKTsJCQkJCQkJCisKKwkJCQkJCQlpZiAob2xkcGxhY2UuU2VjQ21wKHBsYWNlKSAhPSAwKQorCQkJCQkJCXsKKwkJCQkJCQkJaWYgKHBJdGVyYXRvci0+R2V0U2VjdGlvbihzZWNpbmZvKSkKKwkJCQkJCQkJeworCQkJCQkJCQkJQWRkRWRpdFVuZG9JdGVtKG5ldyBDRlhFVV9DbGVhclJpY2godGhpcyxvbGRwbGFjZSxwbGFjZSxyYW5nZSx3b3JkaW5mby5Xb3JkLAorCQkJCQkJCQkJCXdvcmRpbmZvLm5DaGFyc2V0LHNlY2luZm8uU2VjUHJvcHMsc2VjaW5mby5Xb3JkUHJvcHMpKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJeworCQkJCQkJCQlpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmRpbmZvKSkKKwkJCQkJCQkJewkJCQkJCQkJCQorCQkJCQkJCQkJb2xkcGxhY2UgPSBtX3BWVC0+QWp1c3RMaW5lSGVhZGVyKG9sZHBsYWNlLFRSVUUpOworCQkJCQkJCQkJcGxhY2UgPSBtX3BWVC0+QWp1c3RMaW5lSGVhZGVyKHBsYWNlLFRSVUUpOworCisJCQkJCQkJCQlBZGRFZGl0VW5kb0l0ZW0obmV3IENGWEVVX0NsZWFyUmljaCh0aGlzLG9sZHBsYWNlLHBsYWNlLHJhbmdlLHdvcmRpbmZvLldvcmQsCisJCQkJCQkJCQkJd29yZGluZm8ubkNoYXJzZXQsc2VjaW5mby5TZWNQcm9wcyx3b3JkaW5mby5Xb3JkUHJvcHMpKTsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCX13aGlsZSAocEl0ZXJhdG9yLT5QcmV2V29yZCgpKTsKKwkJCQkJfQorCQkJCQlFbmRHcm91cFVuZG8oKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsJCQkJCQorCQkJCQlBZGRFZGl0VW5kb0l0ZW0obmV3IENGWEVVX0NsZWFyKHRoaXMscmFuZ2UsR2V0U2VsVGV4dCgpKSk7CQkJCQkKKwkJCQl9CisJCQl9CisKKwkJCVNlbGVjdE5vbmUoKTsJCQkKKwkJCVNldENhcmV0KG1fcFZULT5EZWxldGVXb3JkcyhyYW5nZSkpOwkKKwkJCW1fU2VsU3RhdGUuU2V0KG1fd3BDYXJldCxtX3dwQ2FyZXQpOworCisJCQlpZiAoYlBhaW50KQorCQkJeworCQkJCVJlYXJyYW5nZVBhcnQocmFuZ2UpOwkKKwkJCQlTY3JvbGxUb0NhcmV0KCk7CisKKwkJCQlDUFZUX1dvcmRSYW5nZSB3cihtX3dwT2xkQ2FyZXQsIEdldFZpc2libGVXb3JkUmFuZ2UoKS5FbmRQb3MpOworCQkJCVJlZnJlc2goUlBfQU5BTFlTRSwgJndyKTsKKwkJCQkKKwkJCQlTZXRDYXJldE9yaWdpbigpOworCQkJCVNldENhcmV0SW5mbygpOworCQkJfQorCisJCQlpZiAobV9iT3ByTm90aWZ5ICYmIG1fcE9wck5vdGlmeSkKKwkJCQltX3BPcHJOb3RpZnktPk9uQ2xlYXIobV93cENhcmV0LCBtX3dwT2xkQ2FyZXQpOworCisJCQlyZXR1cm4gVFJVRTsKKwkJfQorCX0KKworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBDRlhfRWRpdDo6SW5zZXJ0VGV4dChGWF9MUENXU1RSIHRleHQsIEZYX0lOVDMyIGNoYXJzZXQsCisJCQkJCWNvbnN0IENQVlRfU2VjUHJvcHMgKiBwU2VjUHJvcHMsIGNvbnN0IENQVlRfV29yZFByb3BzICogcFdvcmRQcm9wcywgRlhfQk9PTCBiQWRkVW5kbywgRlhfQk9PTCBiUGFpbnQpCit7CisJaWYgKElzVGV4dE92ZXJmbG93KCkpIHJldHVybiBGQUxTRTsKKworCW1fcFZULT5VcGRhdGVXb3JkUGxhY2UobV93cENhcmV0KTsKKwlTZXRDYXJldChEb0luc2VydFRleHQobV93cENhcmV0LCB0ZXh0LCBjaGFyc2V0LCBwU2VjUHJvcHMsIHBXb3JkUHJvcHMpKTsKKwltX1NlbFN0YXRlLlNldChtX3dwQ2FyZXQsbV93cENhcmV0KTsKKworCWlmIChtX3dwQ2FyZXQgIT0gbV93cE9sZENhcmV0KQorCXsKKwkJaWYgKGJBZGRVbmRvICYmIG1fYkVuYWJsZVVuZG8pCisJCXsKKwkJCUFkZEVkaXRVbmRvSXRlbShuZXcgQ0ZYRVVfSW5zZXJ0VGV4dCh0aGlzLG1fd3BPbGRDYXJldCxtX3dwQ2FyZXQsdGV4dCxjaGFyc2V0LHBTZWNQcm9wcyxwV29yZFByb3BzKSk7CisJCX0KKworCQlpZiAoYlBhaW50KQorCQkJUGFpbnRJbnNlcnRUZXh0KG1fd3BPbGRDYXJldCwgbV93cENhcmV0KTsKKworCQlpZiAobV9iT3ByTm90aWZ5ICYmIG1fcE9wck5vdGlmeSkKKwkJCW1fcE9wck5vdGlmeS0+T25JbnNlcnRUZXh0KG1fd3BDYXJldCwgbV93cE9sZENhcmV0KTsKKworCQlyZXR1cm4gVFJVRTsKKwl9CisJcmV0dXJuIEZBTFNFOworfQorCit2b2lkIENGWF9FZGl0OjpQYWludEluc2VydFRleHQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cE9sZCwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiB3cE5ldykKK3sKKwlpZiAobV9wVlQtPklzVmFsaWQoKSkKKwl7CisJCVJlYXJyYW5nZVBhcnQoQ1BWVF9Xb3JkUmFuZ2Uod3BPbGQsd3BOZXcpKTsKKwkJU2Nyb2xsVG9DYXJldCgpOworCQkKKwkJQ1BWVF9Xb3JkUmFuZ2Ugd3I7CisJCWlmIChtX3dwQ2FyZXQuTGluZUNtcCh3cE9sZCkgIT0wKQorCQkJd3IgPSBDUFZUX1dvcmRSYW5nZShtX3BWVC0+R2V0TGluZUJlZ2luUGxhY2Uod3BPbGQpLG1fcFZULT5HZXRTZWN0aW9uRW5kUGxhY2Uod3BOZXcpKTsJCisJCWVsc2UKKwkJCXdyID0gQ1BWVF9Xb3JkUmFuZ2Uod3BPbGQsbV9wVlQtPkdldFNlY3Rpb25FbmRQbGFjZSh3cE5ldykpOwkKKwkJUmVmcmVzaChSUF9BTkFMWVNFLCAmd3IpOworCQlTZXRDYXJldE9yaWdpbigpOworCQlTZXRDYXJldEluZm8oKTsKKwl9Cit9CisKK0ZYX0JPT0wgQ0ZYX0VkaXQ6OlJlZG8oKQoreworCWlmIChtX2JFbmFibGVVbmRvKQorCXsKKwkJaWYgKG1fVW5kby5DYW5SZWRvKCkpCisJCXsKKwkJCW1fVW5kby5SZWRvKCk7CisJCQlyZXR1cm4gVFJVRTsKKwkJfQorCX0KKworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBDRlhfRWRpdDo6VW5kbygpCit7CisJaWYgKG1fYkVuYWJsZVVuZG8pCisJeworCQlpZiAobV9VbmRvLkNhblVuZG8oKSkKKwkJeworCQkJbV9VbmRvLlVuZG8oKTsKKwkJCXJldHVybiBUUlVFOworCQl9CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCit2b2lkIENGWF9FZGl0OjpTZXRDYXJldE9yaWdpbigpCit7CisJaWYgKG1fcFZULT5Jc1ZhbGlkKCkpCisJeworCQlpZiAoSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IgKiBwSXRlcmF0b3IgPSBtX3BWVC0+R2V0SXRlcmF0b3IoKSkKKwkJeworCQkJcEl0ZXJhdG9yLT5TZXRBdChtX3dwQ2FyZXQpOworCQkJQ1BWVF9Xb3JkIHdvcmQ7CisJCQlDUFZUX0xpbmUgbGluZTsKKwkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpCisJCQl7CisJCQkJbV9wdENhcmV0LnggPSB3b3JkLnB0V29yZC54ICsgd29yZC5mV2lkdGg7CisJCQkJbV9wdENhcmV0LnkgPSB3b3JkLnB0V29yZC55OworCQkJfQorCQkJZWxzZSBpZiAocEl0ZXJhdG9yLT5HZXRMaW5lKGxpbmUpKQorCQkJewkJCQkKKwkJCQltX3B0Q2FyZXQueCA9IGxpbmUucHRMaW5lLng7CisJCQkJbV9wdENhcmV0LnkgPSBsaW5lLnB0TGluZS55OworCQkJfQorCQl9CQkJCQorCX0JCit9CisKK0ZYX0lOVDMyIENGWF9FZGl0OjpXb3JkUGxhY2VUb1dvcmRJbmRleChjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdAoreworCWlmIChtX3BWVC0+SXNWYWxpZCgpKQorCQlyZXR1cm4gbV9wVlQtPldvcmRQbGFjZVRvV29yZEluZGV4KHBsYWNlKTsKKworCXJldHVybiAtMTsKK30KKworQ1BWVF9Xb3JkUGxhY2UgQ0ZYX0VkaXQ6OldvcmRJbmRleFRvV29yZFBsYWNlKEZYX0lOVDMyIGluZGV4KSBjb25zdAoreworCWlmIChtX3BWVC0+SXNWYWxpZCgpKQorCQlyZXR1cm4gbV9wVlQtPldvcmRJbmRleFRvV29yZFBsYWNlKGluZGV4KTsKKworCXJldHVybiBDUFZUX1dvcmRQbGFjZSgpOworfQorCitGWF9CT09MCUNGWF9FZGl0OjpJc1RleHRGdWxsKCkgY29uc3QKK3sKKwlGWF9JTlQzMiBuVG90YWxXb3JkcyA9IG1fcFZULT5HZXRUb3RhbFdvcmRzKCk7CisJRlhfSU5UMzIgbkxpbWl0Q2hhciA9IG1fcFZULT5HZXRMaW1pdENoYXIoKTsKKwlGWF9JTlQzMiBuQ2hhckFycmF5ID0gbV9wVlQtPkdldENoYXJBcnJheSgpOworCisJcmV0dXJuIElzVGV4dE92ZXJmbG93KCkgfHwgKG5MaW1pdENoYXI+MCAmJiBuVG90YWxXb3JkcyA+PSBuTGltaXRDaGFyKQorCQl8fCAobkNoYXJBcnJheT4wICYmIG5Ub3RhbFdvcmRzID49IG5DaGFyQXJyYXkpOworfQorCitGWF9CT09MCUNGWF9FZGl0OjpJc1RleHRPdmVyZmxvdygpIGNvbnN0Cit7CisJaWYgKCFtX2JFbmFibGVTY3JvbGwgJiYgIW1fYkVuYWJsZU92ZXJmbG93KQorCXsKKwkJQ1BERl9SZWN0IHJjUGxhdGUgPSBtX3BWVC0+R2V0UGxhdGVSZWN0KCk7CisJCUNQREZfUmVjdCByY0NvbnRlbnQgPSBtX3BWVC0+R2V0Q29udGVudFJlY3QoKTsKKworCQlpZiAobV9wVlQtPklzTXVsdGlMaW5lKCkgJiYgR2V0VG90YWxMaW5lcygpID4gMSkKKwkJeworCQkJaWYgKEZYX0VESVRfSXNGbG9hdEJpZ2dlcihyY0NvbnRlbnQuSGVpZ2h0KCkscmNQbGF0ZS5IZWlnaHQoKSkpIHJldHVybiBUUlVFOworCQl9CisKKwkJaWYgKEZYX0VESVRfSXNGbG9hdEJpZ2dlcihyY0NvbnRlbnQuV2lkdGgoKSxyY1BsYXRlLldpZHRoKCkpKSByZXR1cm4gVFJVRTsKKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0NQVlRfV29yZFBsYWNlIENGWF9FZGl0OjpHZXRMaW5lQmVnaW5QbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdAoreworCXJldHVybiBtX3BWVC0+R2V0TGluZUJlZ2luUGxhY2UocGxhY2UpOworfQorCitDUFZUX1dvcmRQbGFjZSBDRlhfRWRpdDo6R2V0TGluZUVuZFBsYWNlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0Cit7CisJcmV0dXJuIG1fcFZULT5HZXRMaW5lRW5kUGxhY2UocGxhY2UpOworfQorCitDUFZUX1dvcmRQbGFjZSBDRlhfRWRpdDo6R2V0U2VjdGlvbkJlZ2luUGxhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UgJiBwbGFjZSkgY29uc3QKK3sKKwlyZXR1cm4gbV9wVlQtPkdldFNlY3Rpb25CZWdpblBsYWNlKHBsYWNlKTsKK30KKworQ1BWVF9Xb3JkUGxhY2UgQ0ZYX0VkaXQ6OkdldFNlY3Rpb25FbmRQbGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdAoreworCXJldHVybiBtX3BWVC0+R2V0U2VjdGlvbkVuZFBsYWNlKHBsYWNlKTsKK30KKworRlhfQk9PTAlDRlhfRWRpdDo6Q2FuVW5kbygpIGNvbnN0Cit7CisJaWYgKG1fYkVuYWJsZVVuZG8pCisJeworCQlyZXR1cm4gbV9VbmRvLkNhblVuZG8oKTsKKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wJQ0ZYX0VkaXQ6OkNhblJlZG8oKSBjb25zdAoreworCWlmIChtX2JFbmFibGVVbmRvKQorCXsKKwkJcmV0dXJuIG1fVW5kby5DYW5SZWRvKCk7CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MCUNGWF9FZGl0OjpJc01vZGlmaWVkKCkgY29uc3QKK3sKKwlpZiAobV9iRW5hYmxlVW5kbykKKwl7CisJCXJldHVybiBtX1VuZG8uSXNNb2RpZmllZCgpOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKwordm9pZCBDRlhfRWRpdDo6RW5hYmxlUmVmcmVzaChGWF9CT09MIGJSZWZyZXNoKQoreworCW1fYkVuYWJsZVJlZnJlc2ggPSBiUmVmcmVzaDsKK30KKwordm9pZCBDRlhfRWRpdDo6RW5hYmxlVW5kbyhGWF9CT09MIGJVbmRvKQoreworCXRoaXMtPm1fYkVuYWJsZVVuZG8gPSBiVW5kbzsKK30KKwordm9pZCBDRlhfRWRpdDo6RW5hYmxlTm90aWZ5KEZYX0JPT0wgYk5vdGlmeSkKK3sKKwl0aGlzLT5tX2JOb3RpZnkgPSBiTm90aWZ5OworfQorCit2b2lkIENGWF9FZGl0OjpFbmFibGVPcHJOb3RpZnkoRlhfQk9PTCBiTm90aWZ5KQoreworCXRoaXMtPm1fYk9wck5vdGlmeSA9IGJOb3RpZnk7Cit9CisKK0ZYX0ZMT0FUIENGWF9FZGl0OjpHZXRMaW5lVG9wKGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSkgY29uc3QKK3sKKwlpZiAoSVBERl9WYXJpYWJsZVRleHRfSXRlcmF0b3IqIHBJdGVyYXRvciA9IG1fcFZULT5HZXRJdGVyYXRvcigpKQorCXsKKwkJQ1BWVF9Xb3JkUGxhY2Ugd3BPbGQgPSBwSXRlcmF0b3ItPkdldEF0KCk7CisKKwkJcEl0ZXJhdG9yLT5TZXRBdChwbGFjZSk7CisJCUNQVlRfTGluZSBsaW5lOworCQlwSXRlcmF0b3ItPkdldExpbmUobGluZSk7CisKKwkJcEl0ZXJhdG9yLT5TZXRBdCh3cE9sZCk7CisKKwkJcmV0dXJuIGxpbmUucHRMaW5lLnkgKyBsaW5lLmZMaW5lQXNjZW50OworCX0KKworCXJldHVybiAwLjBmOworfQorCitGWF9GTE9BVCBDRlhfRWRpdDo6R2V0TGluZUJvdHRvbShjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UpIGNvbnN0Cit7CisJaWYgKElQREZfVmFyaWFibGVUZXh0X0l0ZXJhdG9yKiBwSXRlcmF0b3IgPSBtX3BWVC0+R2V0SXRlcmF0b3IoKSkKKwl7CisJCUNQVlRfV29yZFBsYWNlIHdwT2xkID0gcEl0ZXJhdG9yLT5HZXRBdCgpOworCisJCXBJdGVyYXRvci0+U2V0QXQocGxhY2UpOworCQlDUFZUX0xpbmUgbGluZTsKKwkJcEl0ZXJhdG9yLT5HZXRMaW5lKGxpbmUpOworCisJCXBJdGVyYXRvci0+U2V0QXQod3BPbGQpOworCisJCXJldHVybiBsaW5lLnB0TGluZS55ICsgbGluZS5mTGluZURlc2NlbnQ7CisJfQorCisJcmV0dXJuIDAuMGY7Cit9CisKK0NQVlRfV29yZFBsYWNlIENGWF9FZGl0OjpEb0luc2VydFRleHQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlLCBGWF9MUENXU1RSIHRleHQsIEZYX0lOVDMyIGNoYXJzZXQsIAorCQkJCQkJCQkJICBjb25zdCBDUFZUX1NlY1Byb3BzICogcFNlY1Byb3BzLCBjb25zdCBDUFZUX1dvcmRQcm9wcyAqIHBXb3JkUHJvcHMpCit7CisJQ1BWVF9Xb3JkUGxhY2Ugd3AgPSBwbGFjZTsKKworCWlmIChtX3BWVC0+SXNWYWxpZCgpKQorCXsKKwkJQ0ZYX1dpZGVTdHJpbmcgc1RleHQgPSB0ZXh0OworCisJCWZvciAoRlhfSU5UMzIgaSA9IDAsIHN6ID0gc1RleHQuR2V0TGVuZ3RoKCk7IGkgPCBzejsgaSsrKQorCQl7CisJCQlGWF9XT1JEIHdvcmQgPSBzVGV4dFtpXTsKKwkJCXN3aXRjaCAod29yZCkKKwkJCXsKKwkJCWNhc2UgMHgwRDoKKwkJCQl3cCA9IG1fcFZULT5JbnNlcnRTZWN0aW9uKHdwLHBTZWNQcm9wcyxwV29yZFByb3BzKTsKKwkJCQlpZiAoc1RleHRbaSsxXSA9PSAweDBBKQorCQkJCQlpKys7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4MEE6CQorCQkJCXdwID0gbV9wVlQtPkluc2VydFNlY3Rpb24od3AscFNlY1Byb3BzLHBXb3JkUHJvcHMpOworCQkJCWlmIChzVGV4dFtpKzFdID09IDB4MEQpCisJCQkJCWkrKzsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHgwOToKKwkJCQl3b3JkID0gMHgyMDsKKwkJCWRlZmF1bHQ6CisJCQkJd3AgPSBtX3BWVC0+SW5zZXJ0V29yZCh3cCx3b3JkLEdldENoYXJTZXRGcm9tVW5pY29kZSh3b3JkLCBjaGFyc2V0KSxwV29yZFByb3BzKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiB3cDsKK30KKworRlhfSU5UMzIgQ0ZYX0VkaXQ6OkdldENoYXJTZXRGcm9tVW5pY29kZShGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIG5PbGRDaGFyc2V0KQoreworCWlmIChJRlhfRWRpdF9Gb250TWFwKiBwRm9udE1hcCA9IHRoaXMtPkdldEZvbnRNYXAoKSkKKwkJcmV0dXJuIHBGb250TWFwLT5DaGFyU2V0RnJvbVVuaWNvZGUod29yZCwgbk9sZENoYXJzZXQpOworCWVsc2UKKwkJcmV0dXJuIG5PbGRDaGFyc2V0OworfQorCit2b2lkIENGWF9FZGl0OjpCZWdpbkdyb3VwVW5kbyhjb25zdCBDRlhfV2lkZVN0cmluZyYgc1RpdGxlKQoreworCUFTU0VSVChtX3BHcm91cFVuZG9JdGVtID09IE5VTEwpOworCisJbV9wR3JvdXBVbmRvSXRlbSA9IG5ldyBDRlhfRWRpdF9Hcm91cFVuZG9JdGVtKHNUaXRsZSk7Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6OkVuZEdyb3VwVW5kbygpCit7CisJQVNTRVJUKG1fcEdyb3VwVW5kb0l0ZW0gIT0gTlVMTCk7CisKKwltX3BHcm91cFVuZG9JdGVtLT5VcGRhdGVJdGVtcygpOworCW1fVW5kby5BZGRJdGVtKG1fcEdyb3VwVW5kb0l0ZW0pOworCWlmIChtX2JPcHJOb3RpZnkgJiYgbV9wT3ByTm90aWZ5KQorCQltX3BPcHJOb3RpZnktPk9uQWRkVW5kbyhtX3BHcm91cFVuZG9JdGVtKTsKKwltX3BHcm91cFVuZG9JdGVtID0gTlVMTDsKK30KKwordm9pZCBDRlhfRWRpdDo6QWRkRWRpdFVuZG9JdGVtKENGWF9FZGl0X1VuZG9JdGVtKiBwRWRpdFVuZG9JdGVtKQoreworCWlmIChtX3BHcm91cFVuZG9JdGVtKQorCQltX3BHcm91cFVuZG9JdGVtLT5BZGRVbmRvSXRlbShwRWRpdFVuZG9JdGVtKTsKKwllbHNlCisJeworCQltX1VuZG8uQWRkSXRlbShwRWRpdFVuZG9JdGVtKTsKKwkJaWYgKG1fYk9wck5vdGlmeSAmJiBtX3BPcHJOb3RpZnkpCisJCQltX3BPcHJOb3RpZnktPk9uQWRkVW5kbyhwRWRpdFVuZG9JdGVtKTsKKwl9Cit9CisKK3ZvaWQgQ0ZYX0VkaXQ6OkFkZFVuZG9JdGVtKElGWF9FZGl0X1VuZG9JdGVtKiBwVW5kb0l0ZW0pCit7CisJbV9VbmRvLkFkZEl0ZW0ocFVuZG9JdGVtKTsKKwlpZiAobV9iT3ByTm90aWZ5ICYmIG1fcE9wck5vdGlmeSkKKwkJbV9wT3ByTm90aWZ5LT5PbkFkZFVuZG8ocFVuZG9JdGVtKTsKK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvZnhlZGl0L2Z4ZXRfbGlzdC5jcHAgYi9mcGRmc2RrL3NyYy9meGVkaXQvZnhldF9saXN0LmNwcAppbmRleCBkZDcwZTBjLi42M2FlZTFiIDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9meGVkaXQvZnhldF9saXN0LmNwcAorKysgYi9mcGRmc2RrL3NyYy9meGVkaXQvZnhldF9saXN0LmNwcApAQCAtMSwxMDEyICsxLDEwMTIgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4ZWRpdC9meGV0X3N0dWIuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGVkaXQvZnhldF9lZGl0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhlZGl0L2Z4ZXRfbGlzdC5oIg0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0ZYX0xpc3RJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DRlhfTGlzdEl0ZW06OkNGWF9MaXN0SXRlbSgpIDogbV9wRWRpdChOVUxMKSwNCi0JbV9iU2VsZWN0ZWQoRkFMU0UpLA0KLQltX2JDYXJldChGQUxTRSksDQotCW1fcmNMaXN0SXRlbSgwLjBmLDAuMGYsMC4wZiwwLjBmKQ0KLXsNCi0JbV9wRWRpdCA9IElGWF9FZGl0OjpOZXdFZGl0KCk7DQotCUFTU0VSVChtX3BFZGl0ICE9IE5VTEwpOw0KLQ0KLQltX3BFZGl0LT5TZXRBbGlnbm1lbnRWKDEpOw0KLQltX3BFZGl0LT5Jbml0aWFsaXplKCk7DQotfQ0KLQ0KLUNGWF9MaXN0SXRlbTo6fkNGWF9MaXN0SXRlbSgpDQotew0KLQlJRlhfRWRpdDo6RGVsRWRpdChtX3BFZGl0KTsNCi19DQotDQotdm9pZCBDRlhfTGlzdEl0ZW06OlNldEZvbnRNYXAoSUZYX0VkaXRfRm9udE1hcCAqIHBGb250TWFwKQ0KLXsNCi0JaWYgKG1fcEVkaXQpDQotCQltX3BFZGl0LT5TZXRGb250TWFwKHBGb250TWFwKTsNCi19DQotDQotSUZYX0VkaXQqIENGWF9MaXN0SXRlbTo6R2V0RWRpdCgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9wRWRpdDsNCi19DQotDQotSUZYX0VkaXRfSXRlcmF0b3IqCUNGWF9MaXN0SXRlbTo6R2V0SXRlcmF0b3IoKSBjb25zdA0KLXsNCi0JaWYgKG1fcEVkaXQpDQotCQlyZXR1cm4gbV9wRWRpdC0+R2V0SXRlcmF0b3IoKTsNCi0NCi0JcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0xpc3RJdGVtOjpTZXRSZWN0KGNvbnN0IENMU1RfUmVjdCAmIHJlY3QpDQotew0KLQltX3JjTGlzdEl0ZW0gPSByZWN0Ow0KLX0NCi0NCi1DTFNUX1JlY3QgQ0ZYX0xpc3RJdGVtOjpHZXRSZWN0KCkgY29uc3QNCi17DQotCXJldHVybiBtX3JjTGlzdEl0ZW07DQotfQ0KLQ0KLUZYX0JPT0wgQ0ZYX0xpc3RJdGVtOjpJc1NlbGVjdGVkKCkgY29uc3QNCi17DQotCXJldHVybiBtX2JTZWxlY3RlZDsNCi19DQotDQotdm9pZCBDRlhfTGlzdEl0ZW06OlNldFNlbGVjdChGWF9CT09MIGJTZWxlY3RlZCkNCi17DQotCW1fYlNlbGVjdGVkID0gYlNlbGVjdGVkOw0KLX0NCi0NCi1GWF9CT09MIENGWF9MaXN0SXRlbTo6SXNDYXJldCgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9iQ2FyZXQ7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0xpc3RJdGVtOjpTZXRDYXJldChGWF9CT09MIGJDYXJldCkNCi17DQotCW1fYkNhcmV0ID0gYkNhcmV0Ow0KLX0NCi0NCi12b2lkIENGWF9MaXN0SXRlbTo6U2V0VGV4dChGWF9MUENXU1RSIHRleHQpDQotew0KLQlpZiAobV9wRWRpdCkNCi0JCW1fcEVkaXQtPlNldFRleHQodGV4dCk7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0xpc3RJdGVtOjpTZXRGb250U2l6ZShGWF9GTE9BVCBmRm9udFNpemUpDQotew0KLQlpZiAobV9wRWRpdCkNCi0JCW1fcEVkaXQtPlNldEZvbnRTaXplKGZGb250U2l6ZSk7DQotfQ0KLQ0KLUZYX0ZMT0FUIENGWF9MaXN0SXRlbTo6R2V0SXRlbUhlaWdodCgpIGNvbnN0DQotew0KLQlpZiAobV9wRWRpdCkNCi0JCXJldHVybiBtX3BFZGl0LT5HZXRDb250ZW50UmVjdCgpLkhlaWdodCgpOw0KLQ0KLQlyZXR1cm4gMC4wZjsNCi19DQotDQotRlhfV09SRCBDRlhfTGlzdEl0ZW06OkdldEZpcnN0Q2hhcigpIGNvbnN0DQotew0KLQlDUFZUX1dvcmQgd29yZDsNCi0NCi0JaWYgKElGWF9FZGl0X0l0ZXJhdG9yKglwSXRlcmF0b3IgPSBHZXRJdGVyYXRvcigpKQ0KLQl7DQotCQlwSXRlcmF0b3ItPlNldEF0KDEpOwkJDQotCQlwSXRlcmF0b3ItPkdldFdvcmQod29yZCk7DQotCX0NCi0NCi0JcmV0dXJuIHdvcmQuV29yZDsNCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgQ0ZYX0xpc3RJdGVtOjpHZXRUZXh0KCkgY29uc3QNCi17DQotCWlmIChtX3BFZGl0KQ0KLQkJcmV0dXJuIG1fcEVkaXQtPkdldFRleHQoKTsNCi0NCi0JcmV0dXJuIEwiIjsNCi19DQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENGWF9MaXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUNGWF9MaXN0OjpDRlhfTGlzdCgpIDogbV9wRm9udE1hcChOVUxMKSwgbV9mRm9udFNpemUoMC4wZiksIG1fYk11bHRpcGxlKEZBTFNFKSANCi17DQotfQ0KLQ0KLUNGWF9MaXN0Ojp+Q0ZYX0xpc3QoKQ0KLXsNCi0JRW1wdHkoKTsNCi19DQotDQotdm9pZCBDRlhfTGlzdDo6RW1wdHkoKQ0KLXsNCi0JZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9hTGlzdEl0ZW1zLkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQkJZGVsZXRlIG1fYUxpc3RJdGVtcy5HZXRBdChpKTsNCi0NCi0JbV9hTGlzdEl0ZW1zLlJlbW92ZUFsbCgpOw0KLX0NCi0NCi12b2lkIENGWF9MaXN0OjpTZXRGb250TWFwKElGWF9FZGl0X0ZvbnRNYXAgKiBwRm9udE1hcCkNCi17DQotCW1fcEZvbnRNYXAgPSBwRm9udE1hcDsNCi19DQotDQotdm9pZCBDRlhfTGlzdDo6U2V0Rm9udFNpemUoRlhfRkxPQVQgZkZvbnRTaXplKQ0KLXsNCi0JbV9mRm9udFNpemUgPSBmRm9udFNpemU7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0xpc3Q6OkFkZEl0ZW0oRlhfTFBDV1NUUiBzdHIpDQotewkNCi0JaWYgKENGWF9MaXN0SXRlbSAqIHBMaXN0SXRlbSA9IG5ldyBDRlhfTGlzdEl0ZW0oKSkNCi0Jew0KLQkJcExpc3RJdGVtLT5TZXRGb250TWFwKG1fcEZvbnRNYXApOw0KLQkJcExpc3RJdGVtLT5TZXRGb250U2l6ZShtX2ZGb250U2l6ZSk7DQotCQlwTGlzdEl0ZW0tPlNldFRleHQoc3RyKTsNCi0JCW1fYUxpc3RJdGVtcy5BZGQocExpc3RJdGVtKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENGWF9MaXN0OjpSZUFycmFuZ2UoRlhfSU5UMzIgbkl0ZW1JbmRleCkNCi17DQotCUZYX0ZMT0FUIGZQb3NZID0gMC4wZjsNCi0NCi0JaWYgKENGWF9MaXN0SXRlbSAqIHBQcmV2SXRlbSA9IG1fYUxpc3RJdGVtcy5HZXRBdChuSXRlbUluZGV4IC0gMSkpDQotCQlmUG9zWSA9IHBQcmV2SXRlbS0+R2V0UmVjdCgpLmJvdHRvbTsNCi0JDQotCWZvciAoRlhfSU5UMzIgaT1uSXRlbUluZGV4LHN6PW1fYUxpc3RJdGVtcy5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJaWYgKENGWF9MaXN0SXRlbSAqIHBMaXN0SXRlbSA9IG1fYUxpc3RJdGVtcy5HZXRBdChpKSkNCi0JCXsNCi0JCQlGWF9GTE9BVCBmTGlzdEl0ZW1IZWlnaHQgPSBwTGlzdEl0ZW0tPkdldEl0ZW1IZWlnaHQoKTsNCi0JCQlwTGlzdEl0ZW0tPlNldFJlY3QoQ0xTVF9SZWN0KDAuMGYsZlBvc1ksMC4wZixmUG9zWSArIGZMaXN0SXRlbUhlaWdodCkpOw0KLQkJCWZQb3NZICs9IGZMaXN0SXRlbUhlaWdodDsJCQkNCi0JCX0NCi0JfQ0KLQ0KLQlTZXRDb250ZW50UmVjdChDTFNUX1JlY3QoMC4wZiwwLjBmLDAuMGYsZlBvc1kpKTsJDQotfQ0KLQ0KLUlGWF9FZGl0ICogQ0ZYX0xpc3Q6OkdldEl0ZW1FZGl0KEZYX0lOVDMyIG5JbmRleCkgY29uc3QNCi17DQotCWlmIChDRlhfTGlzdEl0ZW0gKiBwTGlzdEl0ZW0gPSBtX2FMaXN0SXRlbXMuR2V0QXQobkluZGV4KSkNCi0Jew0KLQkJcmV0dXJuIHBMaXN0SXRlbS0+R2V0RWRpdCgpOw0KLQl9DQotDQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi1GWF9JTlQzMiBDRlhfTGlzdDo6R2V0Q291bnQoKSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fYUxpc3RJdGVtcy5HZXRTaXplKCk7DQotfQ0KLQ0KLUNQREZfUmVjdCBDRlhfTGlzdDo6R2V0UGxhdGVSZWN0KCkgY29uc3QNCi17DQotCXJldHVybiBDRlhfTGlzdENvbnRhaW5lcjo6R2V0UGxhdGVSZWN0KCk7DQotfQ0KLQ0KLUNQREZfUmVjdCBDRlhfTGlzdDo6R2V0Q29udGVudFJlY3QoKSBjb25zdA0KLXsNCi0JcmV0dXJuIElubmVyVG9PdXRlcihDRlhfTGlzdENvbnRhaW5lcjo6R2V0Q29udGVudFJlY3QoKSk7DQotfQ0KLQ0KLUZYX0ZMT0FUIENGWF9MaXN0OjpHZXRGb250U2l6ZSgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9mRm9udFNpemU7DQotfQ0KLQ0KLUZYX0lOVDMyIENGWF9MaXN0OjpHZXRJdGVtSW5kZXgoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdA0KLXsNCi0JQ1BERl9Qb2ludCBwdCA9IE91dGVyVG9Jbm5lcihwb2ludCk7DQotDQotCUZYX0JPT0wgYkZpcnN0ID0gVFJVRTsNCi0JRlhfQk9PTCBiTGFzdCA9IFRSVUU7DQotDQotCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fYUxpc3RJdGVtcy5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJaWYgKENGWF9MaXN0SXRlbSAqIHBMaXN0SXRlbSA9IG1fYUxpc3RJdGVtcy5HZXRBdChpKSkNCi0JCXsNCi0JCQlDTFNUX1JlY3QgcmNMaXN0SXRlbSA9IHBMaXN0SXRlbS0+R2V0UmVjdCgpOw0KLQ0KLQkJCWlmIChGWF9FRElUX0lzRmxvYXRCaWdnZXIocHQueSwgcmNMaXN0SXRlbS50b3ApKQ0KLQkJCXsJCQkNCi0JCQkJYkZpcnN0ID0gRkFMU0U7DQotCQkJfQ0KLQ0KLQkJCWlmIChGWF9FRElUX0lzRmxvYXRTbWFsbGVyKHB0LnksIHJjTGlzdEl0ZW0uYm90dG9tKSkNCi0JCQl7DQotCQkJCWJMYXN0ID0gRkFMU0U7DQotCQkJfQ0KLQ0KLQkJCWlmIChwdC55ID49IHJjTGlzdEl0ZW0udG9wICYmIHB0LnkgPCByY0xpc3RJdGVtLmJvdHRvbSkNCi0JCQl7DQotCQkJCXJldHVybiBpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQlpZiAoYkZpcnN0KSByZXR1cm4gMDsNCi0JaWYgKGJMYXN0KSByZXR1cm4gbV9hTGlzdEl0ZW1zLkdldFNpemUoKS0xOw0KLQ0KLQlyZXR1cm4gLTE7DQotfQ0KLQ0KLUZYX0ZMT0FUIENGWF9MaXN0OjpHZXRGaXJzdEhlaWdodCgpIGNvbnN0DQotew0KLQlpZiAoQ0ZYX0xpc3RJdGVtICogcExpc3RJdGVtID0gbV9hTGlzdEl0ZW1zLkdldEF0KDApKQ0KLQl7DQotCQlyZXR1cm4gcExpc3RJdGVtLT5HZXRJdGVtSGVpZ2h0KCk7DQotCX0NCi0NCi0JcmV0dXJuIDEuMGY7DQotfQ0KLQ0KLUZYX0lOVDMyIENGWF9MaXN0OjpHZXRGaXJzdFNlbGVjdGVkKCkgY29uc3QNCi17DQotCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fYUxpc3RJdGVtcy5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJaWYgKENGWF9MaXN0SXRlbSAqIHBMaXN0SXRlbSA9IG1fYUxpc3RJdGVtcy5HZXRBdChpKSkNCi0JCXsNCi0JCQlpZiAocExpc3RJdGVtLT5Jc1NlbGVjdGVkKCkpDQotCQkJCXJldHVybiBpOw0KLQkJfQ0KLQl9DQotCXJldHVybiAtMTsNCi19DQotDQotRlhfSU5UMzIgQ0ZYX0xpc3Q6OkdldExhc3RTZWxlY3RlZCgpIGNvbnN0DQotew0KLQlmb3IgKEZYX0lOVDMyIGk9bV9hTGlzdEl0ZW1zLkdldFNpemUoKS0xOyBpPj0wOyBpLS0pDQotCXsNCi0JCWlmIChDRlhfTGlzdEl0ZW0gKiBwTGlzdEl0ZW0gPSBtX2FMaXN0SXRlbXMuR2V0QXQoaSkpDQotCQl7DQotCQkJaWYgKHBMaXN0SXRlbS0+SXNTZWxlY3RlZCgpKQ0KLQkJCQlyZXR1cm4gaTsNCi0JCX0NCi0JfQ0KLQlyZXR1cm4gLTE7DQotfQ0KLQ0KLUZYX1dDSEFSIENGWF9MaXN0OjpUb3VwcGVyKEZYX1dDSEFSIGMpIGNvbnN0DQotew0KLQlpZiAoIChjID49ICdhJykgJiYgKGMgPD0gJ3onKSApDQotCQljID0gYyAtICgnYScgLSAnQScpOw0KLQlyZXR1cm4gYzsNCi19DQotDQotRlhfSU5UMzIgQ0ZYX0xpc3Q6OkZpbmROZXh0KEZYX0lOVDMyIG5JbmRleCxGWF9XQ0hBUiBuQ2hhcikgY29uc3QNCi17DQotCUZYX0lOVDMyIG5DaXJjbGVJbmRleCA9IG5JbmRleDsNCi0NCi0JZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9hTGlzdEl0ZW1zLkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQl7DQotCQluQ2lyY2xlSW5kZXggKys7DQotCQlpZiAobkNpcmNsZUluZGV4ID49IHN6KSBuQ2lyY2xlSW5kZXggPSAwOw0KLQ0KLQkJaWYgKENGWF9MaXN0SXRlbSAqIHBMaXN0SXRlbSA9IG1fYUxpc3RJdGVtcy5HZXRBdChuQ2lyY2xlSW5kZXgpKQ0KLQkJew0KLQkJCWlmIChUb3VwcGVyKHBMaXN0SXRlbS0+R2V0Rmlyc3RDaGFyKCkpID09IFRvdXBwZXIobkNoYXIpKQ0KLQkJCQlyZXR1cm4gbkNpcmNsZUluZGV4Ow0KLQkJfQ0KLQl9DQotDQotCXJldHVybiBuQ2lyY2xlSW5kZXg7DQotfQ0KLQ0KLUNQREZfUmVjdCBDRlhfTGlzdDo6R2V0SXRlbVJlY3QoRlhfSU5UMzIgbkluZGV4KSBjb25zdA0KLXsNCi0JaWYgKENGWF9MaXN0SXRlbSAqIHBMaXN0SXRlbSA9IG1fYUxpc3RJdGVtcy5HZXRBdChuSW5kZXgpKQ0KLQl7DQotCQlDUERGX1JlY3QgcmNJdGVtID0gcExpc3RJdGVtLT5HZXRSZWN0KCk7DQotCQlyY0l0ZW0ubGVmdCA9IDAuMGY7DQotCQlyY0l0ZW0ucmlnaHQgPSBHZXRQbGF0ZVJlY3QoKS5XaWR0aCgpOw0KLQkJcmV0dXJuIElubmVyVG9PdXRlcihyY0l0ZW0pOw0KLQl9DQotDQotCXJldHVybiBDUERGX1JlY3QoKTsNCi19DQotDQotRlhfQk9PTCBDRlhfTGlzdDo6SXNJdGVtU2VsZWN0ZWQoRlhfSU5UMzIgbkluZGV4KSBjb25zdA0KLXsNCi0JaWYgKENGWF9MaXN0SXRlbSAqIHBMaXN0SXRlbSA9IG1fYUxpc3RJdGVtcy5HZXRBdChuSW5kZXgpKQ0KLQl7DQotCQlyZXR1cm4gcExpc3RJdGVtLT5Jc1NlbGVjdGVkKCk7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi12b2lkIENGWF9MaXN0OjpTZXRJdGVtU2VsZWN0KEZYX0lOVDMyIG5JdGVtSW5kZXgsIEZYX0JPT0wgYlNlbGVjdGVkKQ0KLXsNCi0JaWYgKENGWF9MaXN0SXRlbSAqIHBMaXN0SXRlbSA9IG1fYUxpc3RJdGVtcy5HZXRBdChuSXRlbUluZGV4KSkNCi0Jew0KLQkJcExpc3RJdGVtLT5TZXRTZWxlY3QoYlNlbGVjdGVkKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENGWF9MaXN0OjpTZXRJdGVtQ2FyZXQoRlhfSU5UMzIgbkl0ZW1JbmRleCwgRlhfQk9PTCBiQ2FyZXQpDQotew0KLQlpZiAoQ0ZYX0xpc3RJdGVtICogcExpc3RJdGVtID0gbV9hTGlzdEl0ZW1zLkdldEF0KG5JdGVtSW5kZXgpKQ0KLQl7DQotCQlwTGlzdEl0ZW0tPlNldENhcmV0KGJDYXJldCk7CQkNCi0JfQ0KLX0NCi0NCi12b2lkIENGWF9MaXN0OjpTZXRNdWx0aXBsZVNlbChGWF9CT09MIGJNdWx0aXBsZSkNCi17DQotCW1fYk11bHRpcGxlID0gYk11bHRpcGxlOw0KLX0NCi0NCi1GWF9CT09MIENGWF9MaXN0OjpJc011bHRpcGxlU2VsKCkgY29uc3QNCi17DQotCXJldHVybiBtX2JNdWx0aXBsZTsNCi19DQotDQotRlhfQk9PTCBDRlhfTGlzdDo6SXNWYWxpZChGWF9JTlQzMiBuSXRlbUluZGV4KSBjb25zdA0KLXsNCi0JcmV0dXJuIG5JdGVtSW5kZXggPj0gMCAmJiBuSXRlbUluZGV4IDwgbV9hTGlzdEl0ZW1zLkdldFNpemUoKTsNCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgQ0ZYX0xpc3Q6OkdldEl0ZW1UZXh0KEZYX0lOVDMyIG5JbmRleCkgY29uc3QNCi17DQotCWlmIChDRlhfTGlzdEl0ZW0gKiBwTGlzdEl0ZW0gPSBtX2FMaXN0SXRlbXMuR2V0QXQobkluZGV4KSkNCi0Jew0KLQkJcmV0dXJuIHBMaXN0SXRlbS0+R2V0VGV4dCgpOw0KLQl9DQotDQotCXJldHVybiBMIiI7DQotfQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUExTVF9TZWxlY3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUNQTFNUX1NlbGVjdDo6Q1BMU1RfU2VsZWN0KCkNCi17DQotfQ0KLQ0KLUNQTFNUX1NlbGVjdDo6fkNQTFNUX1NlbGVjdCgpDQotew0KLQlmb3IgKEZYX0lOVDMyIGk9MCxzej1tX2FJdGVtcy5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0JCWRlbGV0ZSBtX2FJdGVtcy5HZXRBdChpKTsNCi0NCi0JbV9hSXRlbXMuUmVtb3ZlQWxsKCk7DQotfQ0KLQ0KLXZvaWQgQ1BMU1RfU2VsZWN0OjpBZGQoRlhfSU5UMzIgbkl0ZW1JbmRleCkNCi17DQotCUZYX0lOVDMyIG5JbmRleCA9IEZpbmQobkl0ZW1JbmRleCk7DQotDQotCWlmIChuSW5kZXggPCAwKSANCi0JCW1fYUl0ZW1zLkFkZChuZXcgQ1BMU1RfU2VsZWN0X0l0ZW0obkl0ZW1JbmRleCwxKSk7DQotCWVsc2UNCi0Jew0KLQkJaWYgKENQTFNUX1NlbGVjdF9JdGVtICogcEl0ZW0gPSBtX2FJdGVtcy5HZXRBdChuSW5kZXgpKQ0KLQkJew0KLQkJCXBJdGVtLT5uU3RhdGUgPSAxOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BMU1RfU2VsZWN0OjpBZGQoRlhfSU5UMzIgbkJlZ2luSW5kZXgsIEZYX0lOVDMyIG5FbmRJbmRleCkNCi17DQotCWlmIChuQmVnaW5JbmRleCA+IG5FbmRJbmRleCkNCi0Jew0KLQkJRlhfSU5UMzIgblRlbXAgPSBuRW5kSW5kZXg7DQotCQluRW5kSW5kZXggPSBuQmVnaW5JbmRleDsNCi0JCW5CZWdpbkluZGV4ID0gblRlbXA7DQotCX0NCi0NCi0JZm9yIChGWF9JTlQzMiBpPW5CZWdpbkluZGV4OyBpPD1uRW5kSW5kZXg7IGkrKykJQWRkKGkpOw0KLX0NCi0NCi12b2lkIENQTFNUX1NlbGVjdDo6U3ViKEZYX0lOVDMyIG5JdGVtSW5kZXgpDQotew0KLQlmb3IgKEZYX0lOVDMyIGk9bV9hSXRlbXMuR2V0U2l6ZSgpLTE7IGk+PTA7IGktLSkNCi0Jew0KLQkJaWYgKENQTFNUX1NlbGVjdF9JdGVtICogcEl0ZW0gPSBtX2FJdGVtcy5HZXRBdChpKSkNCi0JCQlpZiAocEl0ZW0tPm5JdGVtSW5kZXggPT0gbkl0ZW1JbmRleCkNCi0JCQkJcEl0ZW0tPm5TdGF0ZSA9IC0xOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BMU1RfU2VsZWN0OjpTdWIoRlhfSU5UMzIgbkJlZ2luSW5kZXgsIEZYX0lOVDMyIG5FbmRJbmRleCkNCi17DQotCWlmIChuQmVnaW5JbmRleCA+IG5FbmRJbmRleCkNCi0Jew0KLQkJRlhfSU5UMzIgblRlbXAgPSBuRW5kSW5kZXg7DQotCQluRW5kSW5kZXggPSBuQmVnaW5JbmRleDsNCi0JCW5CZWdpbkluZGV4ID0gblRlbXA7DQotCX0NCi0NCi0JZm9yIChGWF9JTlQzMiBpPW5CZWdpbkluZGV4OyBpPD1uRW5kSW5kZXg7IGkrKykJU3ViKGkpOw0KLX0NCi0NCi1GWF9JTlQzMiBDUExTVF9TZWxlY3Q6OkZpbmQoRlhfSU5UMzIgbkl0ZW1JbmRleCkgY29uc3QNCi17DQotCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fYUl0ZW1zLkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQl7DQotCQlpZiAoQ1BMU1RfU2VsZWN0X0l0ZW0gKiBwSXRlbSA9IG1fYUl0ZW1zLkdldEF0KGkpKQ0KLQkJew0KLQkJCWlmIChwSXRlbS0+bkl0ZW1JbmRleCA9PSBuSXRlbUluZGV4KQ0KLQkJCQlyZXR1cm4gaTsNCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gLTE7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BMU1RfU2VsZWN0OjpJc0V4aXN0KEZYX0lOVDMyIG5JdGVtSW5kZXgpIGNvbnN0DQotew0KLQlyZXR1cm4gRmluZChuSXRlbUluZGV4KSA+PSAwOw0KLX0NCi0NCi1GWF9JTlQzMiBDUExTVF9TZWxlY3Q6OkdldENvdW50KCkgY29uc3QNCi17DQotCXJldHVybiBtX2FJdGVtcy5HZXRTaXplKCk7DQotfQ0KLQ0KLUZYX0lOVDMyIENQTFNUX1NlbGVjdDo6R2V0SXRlbUluZGV4KEZYX0lOVDMyIG5JbmRleCkgY29uc3QNCi17DQotCWlmIChuSW5kZXggPj0gMCAmJiBuSW5kZXggPCBtX2FJdGVtcy5HZXRTaXplKCkpDQotCQlpZiAoQ1BMU1RfU2VsZWN0X0l0ZW0gKiBwSXRlbSA9IG1fYUl0ZW1zLkdldEF0KG5JbmRleCkpDQotCQkJcmV0dXJuIHBJdGVtLT5uSXRlbUluZGV4Ow0KLQ0KLQlyZXR1cm4gLTE7DQotfQ0KLQ0KLUZYX0lOVDMyIENQTFNUX1NlbGVjdDo6R2V0U3RhdGUoRlhfSU5UMzIgbkluZGV4KSBjb25zdA0KLXsNCi0JaWYgKG5JbmRleCA+PSAwICYmIG5JbmRleCA8IG1fYUl0ZW1zLkdldFNpemUoKSkNCi0JCWlmIChDUExTVF9TZWxlY3RfSXRlbSAqIHBJdGVtID0gbV9hSXRlbXMuR2V0QXQobkluZGV4KSkNCi0JCQlyZXR1cm4gcEl0ZW0tPm5TdGF0ZTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXZvaWQgQ1BMU1RfU2VsZWN0OjpEZXNlbGVjdEFsbCgpDQotew0KLQlmb3IgKEZYX0lOVDMyIGk9MCxzej1tX2FJdGVtcy5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJaWYgKENQTFNUX1NlbGVjdF9JdGVtICogcEl0ZW0gPSBtX2FJdGVtcy5HZXRBdChpKSkNCi0JCXsNCi0JCQlwSXRlbS0+blN0YXRlID0gLTE7DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBDUExTVF9TZWxlY3Q6OkRvbmUoKQ0KLXsNCi0JZm9yIChGWF9JTlQzMiBpPW1fYUl0ZW1zLkdldFNpemUoKS0xOyBpPj0wOyBpLS0pDQotCXsJDQotCQlpZiAoQ1BMU1RfU2VsZWN0X0l0ZW0gKiBwSXRlbSA9IG1fYUl0ZW1zLkdldEF0KGkpKQ0KLQkJew0KLQkJCWlmIChwSXRlbS0+blN0YXRlID09IC0xKQ0KLQkJCXsNCi0JCQkJZGVsZXRlIHBJdGVtOw0KLQkJCQltX2FJdGVtcy5SZW1vdmVBdChpKTsNCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJcEl0ZW0tPm5TdGF0ZSA9IDA7DQotCQkJfQ0KLQkJfQ0KLQl9DQotfQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDRlhfTGlzdEN0cmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ0ZYX0xpc3RDdHJsOjpDRlhfTGlzdEN0cmwoKSA6IG1fcE5vdGlmeShOVUxMKSwNCi0JbV9wdFNjcm9sbFBvcygwLjBmLDAuMGYpLA0KLQltX25TZWxJdGVtKC0xKSwNCi0JbV9uRm9vdEluZGV4KC0xKSwNCi0JbV9iQ3RybFNlbChGQUxTRSksCQ0KLQltX25DYXJldEluZGV4KC0xKSwNCi0JbV9iTm90aWZ5RmxhZyhGQUxTRSkNCi17DQotfQ0KLQ0KLUNGWF9MaXN0Q3RybDo6fkNGWF9MaXN0Q3RybCgpDQotew0KLX0NCi0NCi12b2lkIENGWF9MaXN0Q3RybDo6U2V0Tm90aWZ5KElGWF9MaXN0X05vdGlmeSAqIHBOb3RpZnkpDQotew0KLQltX3BOb3RpZnkgPSBwTm90aWZ5Ow0KLX0NCi0NCi1DUERGX1BvaW50IENGWF9MaXN0Q3RybDo6SW5Ub091dChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpIGNvbnN0DQotew0KLQlDUERGX1JlY3QgcmNQbGF0ZSA9IEdldFBsYXRlUmVjdCgpOw0KLQ0KLQlyZXR1cm4gQ1BERl9Qb2ludChwb2ludC54IC0gKG1fcHRTY3JvbGxQb3MueCAtIHJjUGxhdGUubGVmdCksDQotCQlwb2ludC55IC0gKG1fcHRTY3JvbGxQb3MueSAtIHJjUGxhdGUudG9wKSk7DQotfQ0KLQ0KLUNQREZfUG9pbnQgQ0ZYX0xpc3RDdHJsOjpPdXRUb0luKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3QNCi17DQotCUNQREZfUmVjdCByY1BsYXRlID0gR2V0UGxhdGVSZWN0KCk7DQotDQotCXJldHVybiBDUERGX1BvaW50KHBvaW50LnggKyAobV9wdFNjcm9sbFBvcy54IC0gcmNQbGF0ZS5sZWZ0KSwNCi0JCXBvaW50LnkgKyAobV9wdFNjcm9sbFBvcy55IC0gcmNQbGF0ZS50b3ApKTsNCi19DQotDQotQ1BERl9SZWN0IENGWF9MaXN0Q3RybDo6SW5Ub091dChjb25zdCBDUERGX1JlY3QgJiByZWN0KSBjb25zdA0KLXsNCi0JQ1BERl9Qb2ludCBwdExlZnRCb3R0b20gPSBJblRvT3V0KENQREZfUG9pbnQocmVjdC5sZWZ0LHJlY3QuYm90dG9tKSk7DQotCUNQREZfUG9pbnQgcHRSaWdodFRvcCA9IEluVG9PdXQoQ1BERl9Qb2ludChyZWN0LnJpZ2h0LHJlY3QudG9wKSk7DQotDQotCXJldHVybiBDUERGX1JlY3QocHRMZWZ0Qm90dG9tLngscHRMZWZ0Qm90dG9tLnkscHRSaWdodFRvcC54LHB0UmlnaHRUb3AueSk7DQotfQ0KLQ0KLUNQREZfUmVjdCBDRlhfTGlzdEN0cmw6Ok91dFRvSW4oY29uc3QgQ1BERl9SZWN0ICYgcmVjdCkgY29uc3QNCi17DQotCUNQREZfUG9pbnQgcHRMZWZ0Qm90dG9tID0gT3V0VG9JbihDUERGX1BvaW50KHJlY3QubGVmdCxyZWN0LmJvdHRvbSkpOw0KLQlDUERGX1BvaW50IHB0UmlnaHRUb3AgPSBPdXRUb0luKENQREZfUG9pbnQocmVjdC5yaWdodCxyZWN0LnRvcCkpOw0KLQ0KLQlyZXR1cm4gQ1BERl9SZWN0KHB0TGVmdEJvdHRvbS54LHB0TGVmdEJvdHRvbS55LHB0UmlnaHRUb3AueCxwdFJpZ2h0VG9wLnkpOw0KLX0NCi0NCi12b2lkIENGWF9MaXN0Q3RybDo6T25Nb3VzZURvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpDQotew0KLQlGWF9JTlQzMiBuSGl0SW5kZXggPSB0aGlzLT5HZXRJdGVtSW5kZXgocG9pbnQpOw0KLQ0KLQlpZiAoSXNNdWx0aXBsZVNlbCgpKQ0KLQl7DQotCQlpZiAoYkN0cmwpDQotCQl7DQotCQkJaWYgKElzSXRlbVNlbGVjdGVkKG5IaXRJbmRleCkpDQotCQkJew0KLQkJCQltX2FTZWxJdGVtcy5TdWIobkhpdEluZGV4KTsNCi0JCQkJU2VsZWN0SXRlbXMoKTsNCi0JCQkJbV9iQ3RybFNlbCA9IEZBTFNFOw0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQltX2FTZWxJdGVtcy5BZGQobkhpdEluZGV4KTsNCi0JCQkJU2VsZWN0SXRlbXMoKTsNCi0JCQkJbV9iQ3RybFNlbCA9IFRSVUU7DQotCQkJfQkJDQotCQkJDQotCQkJbV9uRm9vdEluZGV4ID0gbkhpdEluZGV4Ow0KLQkJfQ0KLQkJZWxzZSBpZiAoYlNoaWZ0KQ0KLQkJew0KLQkJCW1fYVNlbEl0ZW1zLkRlc2VsZWN0QWxsKCk7DQotCQkJbV9hU2VsSXRlbXMuQWRkKG1fbkZvb3RJbmRleCxuSGl0SW5kZXgpOw0KLQkJCVNlbGVjdEl0ZW1zKCk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJbV9hU2VsSXRlbXMuRGVzZWxlY3RBbGwoKTsNCi0JCQltX2FTZWxJdGVtcy5BZGQobkhpdEluZGV4KTsNCi0JCQlTZWxlY3RJdGVtcygpOw0KLQ0KLQkJCW1fbkZvb3RJbmRleCA9IG5IaXRJbmRleDsNCi0JCX0NCi0NCi0JCVNldENhcmV0KG5IaXRJbmRleCk7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlTZXRTaW5nbGVTZWxlY3QobkhpdEluZGV4KTsNCi0JfQ0KLQ0KLQlpZiAoIXRoaXMtPklzSXRlbVZpc2libGUobkhpdEluZGV4KSkNCi0JCXRoaXMtPlNjcm9sbFRvTGlzdEl0ZW0obkhpdEluZGV4KTsNCi19DQotDQotdm9pZCBDRlhfTGlzdEN0cmw6Ok9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCxGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKQ0KLXsNCi0JRlhfSU5UMzIgbkhpdEluZGV4ID0gdGhpcy0+R2V0SXRlbUluZGV4KHBvaW50KTsNCi0NCi0JaWYgKElzTXVsdGlwbGVTZWwoKSkNCi0JewkJCQ0KLQkJaWYgKGJDdHJsKQ0KLQkJew0KLQkJCWlmIChtX2JDdHJsU2VsKQ0KLQkJCQltX2FTZWxJdGVtcy5BZGQobV9uRm9vdEluZGV4LG5IaXRJbmRleCk7DQotCQkJZWxzZQ0KLQkJCQltX2FTZWxJdGVtcy5TdWIobV9uRm9vdEluZGV4LG5IaXRJbmRleCk7CQkJDQotCQkJDQotCQkJU2VsZWN0SXRlbXMoKTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQltX2FTZWxJdGVtcy5EZXNlbGVjdEFsbCgpOw0KLQkJCW1fYVNlbEl0ZW1zLkFkZChtX25Gb290SW5kZXgsbkhpdEluZGV4KTsNCi0JCQlTZWxlY3RJdGVtcygpOw0KLQkJfQ0KLQ0KLQkJU2V0Q2FyZXQobkhpdEluZGV4KTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCVNldFNpbmdsZVNlbGVjdChuSGl0SW5kZXgpOw0KLQl9DQotDQotCWlmICghdGhpcy0+SXNJdGVtVmlzaWJsZShuSGl0SW5kZXgpKQ0KLQkJdGhpcy0+U2Nyb2xsVG9MaXN0SXRlbShuSGl0SW5kZXgpOw0KLX0NCi0NCi12b2lkIENGWF9MaXN0Q3RybDo6T25WSyhGWF9JTlQzMiBuSXRlbUluZGV4LEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpDQotew0KLQlpZiAoSXNNdWx0aXBsZVNlbCgpKQ0KLQl7DQotCQlpZiAobkl0ZW1JbmRleCA+PSAwICYmIG5JdGVtSW5kZXggPCBHZXRDb3VudCgpKQ0KLQkJew0KLQkJCWlmIChiQ3RybCkNCi0JCQl7DQotCQkJfQ0KLQkJCWVsc2UgaWYgKGJTaGlmdCkNCi0JCQl7DQotCQkJCW1fYVNlbEl0ZW1zLkRlc2VsZWN0QWxsKCk7DQotCQkJCW1fYVNlbEl0ZW1zLkFkZChtX25Gb290SW5kZXgsbkl0ZW1JbmRleCk7DQotCQkJCVNlbGVjdEl0ZW1zKCk7DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCW1fYVNlbEl0ZW1zLkRlc2VsZWN0QWxsKCk7DQotCQkJCW1fYVNlbEl0ZW1zLkFkZChuSXRlbUluZGV4KTsNCi0JCQkJU2VsZWN0SXRlbXMoKTsNCi0JCQkJbV9uRm9vdEluZGV4ID0gbkl0ZW1JbmRleDsNCi0JCQl9DQotDQotCQkJU2V0Q2FyZXQobkl0ZW1JbmRleCk7CQ0KLQkJfQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJU2V0U2luZ2xlU2VsZWN0KG5JdGVtSW5kZXgpOw0KLQl9DQotDQotCWlmICghdGhpcy0+SXNJdGVtVmlzaWJsZShuSXRlbUluZGV4KSkNCi0JCXRoaXMtPlNjcm9sbFRvTGlzdEl0ZW0obkl0ZW1JbmRleCk7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0xpc3RDdHJsOjpPblZLX1VQKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpDQotew0KLQlPblZLKElzTXVsdGlwbGVTZWwoKSA/IEdldENhcmV0KCktMSA6IEdldFNlbGVjdCgpLTEsIGJTaGlmdCwgYkN0cmwpOw0KLX0NCi0NCi12b2lkIENGWF9MaXN0Q3RybDo6T25WS19ET1dOKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpDQotew0KLQlPblZLKElzTXVsdGlwbGVTZWwoKSA/IEdldENhcmV0KCkrMSA6IEdldFNlbGVjdCgpKzEsIGJTaGlmdCwgYkN0cmwpOw0KLX0NCi0NCi12b2lkIENGWF9MaXN0Q3RybDo6T25WS19MRUZUKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpDQotew0KLQlPblZLKDAsIGJTaGlmdCwgYkN0cmwpOw0KLX0NCi0NCi12b2lkIENGWF9MaXN0Q3RybDo6T25WS19SSUdIVChGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKQ0KLXsNCi0JT25WSyhHZXRDb3VudCgpLTEsIGJTaGlmdCwgYkN0cmwpOw0KLX0NCi0NCi12b2lkIENGWF9MaXN0Q3RybDo6T25WS19IT01FKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpDQotew0KLQlPblZLKDAsIGJTaGlmdCwgYkN0cmwpOw0KLX0NCi0NCi12b2lkIENGWF9MaXN0Q3RybDo6T25WS19FTkQoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkNCi17DQotCU9uVksoR2V0Q291bnQoKS0xLCBiU2hpZnQsIGJDdHJsKTsNCi19DQotDQotRlhfQk9PTAlDRlhfTGlzdEN0cmw6Ok9uQ2hhcihGWF9XT1JEIG5DaGFyLEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpDQotew0KLQlGWF9JTlQzMiBuSW5kZXggPSBHZXRMYXN0U2VsZWN0ZWQoKTsJDQotCUZYX0lOVDMyIG5GaW5kSW5kZXggPSBGaW5kTmV4dChuSW5kZXgsbkNoYXIpOw0KLQ0KLQlpZiAobkZpbmRJbmRleCAhPSBuSW5kZXgpDQotCXsNCi0JCU9uVksobkZpbmRJbmRleCwgYlNoaWZ0LCBiQ3RybCk7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLS8qIC0tLS0tLS0tIGlubmVyIG1ldGhvZHMgLS0tLS0tLSAqLw0KLQ0KLXZvaWQgQ0ZYX0xpc3RDdHJsOjpTZXRQbGF0ZVJlY3QoY29uc3QgQ1BERl9SZWN0ICYgcmVjdCkNCi17DQotCUNGWF9MaXN0Q29udGFpbmVyOjpTZXRQbGF0ZVJlY3QocmVjdCk7DQotCW1fcHRTY3JvbGxQb3MueCA9IHJlY3QubGVmdDsNCi0JU2V0U2Nyb2xsUG9zKENQREZfUG9pbnQocmVjdC5sZWZ0LHJlY3QudG9wKSk7CQ0KLQlSZUFycmFuZ2UoMCk7DQotCUludmFsaWRhdGVJdGVtKC0xKTsNCi19DQotDQotQ1BERl9SZWN0IENGWF9MaXN0Q3RybDo6R2V0SXRlbVJlY3QoRlhfSU5UMzIgbkluZGV4KSBjb25zdA0KLXsNCi0JcmV0dXJuIEluVG9PdXQoQ0ZYX0xpc3Q6OkdldEl0ZW1SZWN0KG5JbmRleCkpOw0KLX0NCi0NCi12b2lkIENGWF9MaXN0Q3RybDo6QWRkU3RyaW5nKEZYX0xQQ1dTVFIgc3RyaW5nKQ0KLXsNCi0JQWRkSXRlbShzdHJpbmcpOw0KLQlSZUFycmFuZ2UoR2V0Q291bnQoKSAtIDEpOw0KLX0NCi0NCi12b2lkIENGWF9MaXN0Q3RybDo6U2V0TXVsdGlwbGVTZWxlY3QoRlhfSU5UMzIgbkl0ZW1JbmRleCwgRlhfQk9PTCBiU2VsZWN0ZWQpDQotew0KLQlpZiAoIUlzVmFsaWQobkl0ZW1JbmRleCkpIHJldHVybjsNCi0NCi0JaWYgKGJTZWxlY3RlZCAhPSB0aGlzLT5Jc0l0ZW1TZWxlY3RlZChuSXRlbUluZGV4KSkNCi0Jew0KLQkJaWYgKGJTZWxlY3RlZCkNCi0JCXsNCi0JCQlTZXRJdGVtU2VsZWN0KG5JdGVtSW5kZXgsVFJVRSk7DQotCQkJSW52YWxpZGF0ZUl0ZW0obkl0ZW1JbmRleCk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJU2V0SXRlbVNlbGVjdChuSXRlbUluZGV4LEZBTFNFKTsNCi0JCQlJbnZhbGlkYXRlSXRlbShuSXRlbUluZGV4KTsNCi0JCX0NCi0JfQ0KLX0NCi0NCi12b2lkIENGWF9MaXN0Q3RybDo6U2V0U2luZ2xlU2VsZWN0KEZYX0lOVDMyIG5JdGVtSW5kZXgpDQotew0KLQlpZiAoIUlzVmFsaWQobkl0ZW1JbmRleCkpIHJldHVybjsNCi0NCi0JaWYgKG1fblNlbEl0ZW0gIT0gbkl0ZW1JbmRleCkNCi0Jew0KLQkJaWYgKG1fblNlbEl0ZW0gPj0gMCkNCi0JCXsNCi0JCQlTZXRJdGVtU2VsZWN0KG1fblNlbEl0ZW0sRkFMU0UpOw0KLQkJCUludmFsaWRhdGVJdGVtKG1fblNlbEl0ZW0pOw0KLQkJfQ0KLQkJDQotCQlTZXRJdGVtU2VsZWN0KG5JdGVtSW5kZXgsVFJVRSk7DQotCQlJbnZhbGlkYXRlSXRlbShuSXRlbUluZGV4KTsNCi0JCW1fblNlbEl0ZW0gPSBuSXRlbUluZGV4OwkJDQotCX0NCi19DQotDQotdm9pZCBDRlhfTGlzdEN0cmw6OlNldENhcmV0KEZYX0lOVDMyIG5JdGVtSW5kZXgpDQotew0KLQlpZiAoIUlzVmFsaWQobkl0ZW1JbmRleCkpIHJldHVybjsNCi0NCi0JaWYgKHRoaXMtPklzTXVsdGlwbGVTZWwoKSkNCi0JewkJDQotCQlGWF9JTlQzMiBuT2xkSW5kZXggPSBtX25DYXJldEluZGV4Ow0KLQ0KLQkJaWYgKG5PbGRJbmRleCAhPSBuSXRlbUluZGV4KQ0KLQkJew0KLQkJCW1fbkNhcmV0SW5kZXggPSBuSXRlbUluZGV4Ow0KLQ0KLQkJCVNldEl0ZW1DYXJldChuT2xkSW5kZXgsIEZBTFNFKTsNCi0JCQlTZXRJdGVtQ2FyZXQobkl0ZW1JbmRleCxUUlVFKTsNCi0NCi0JCQlJbnZhbGlkYXRlSXRlbShuT2xkSW5kZXgpOw0KLQkJCUludmFsaWRhdGVJdGVtKG5JdGVtSW5kZXgpOwkJCQ0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZYX0xpc3RDdHJsOjpJbnZhbGlkYXRlSXRlbShGWF9JTlQzMiBuSXRlbUluZGV4KQ0KLXsNCi0JaWYgKG1fcE5vdGlmeSkNCi0Jew0KLQkJaWYgKG5JdGVtSW5kZXggPT0gLTEpDQotCQl7DQotCQkJaWYgKCFtX2JOb3RpZnlGbGFnKQ0KLQkJCXsNCi0JCQkJbV9iTm90aWZ5RmxhZyA9IFRSVUU7DQotCQkJCUNQREZfUmVjdCByY1JlZnJlc2ggPSBHZXRQbGF0ZVJlY3QoKTsNCi0JCQkJbV9wTm90aWZ5LT5JT25JbnZhbGlkYXRlUmVjdCgmcmNSZWZyZXNoKTsNCi0JCQkJbV9iTm90aWZ5RmxhZyA9IEZBTFNFOw0KLQkJCX0NCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlpZiAoIW1fYk5vdGlmeUZsYWcpDQotCQkJew0KLQkJCQltX2JOb3RpZnlGbGFnID0gVFJVRTsNCi0JCQkJQ1BERl9SZWN0IHJjUmVmcmVzaCA9IEdldEl0ZW1SZWN0KG5JdGVtSW5kZXgpOw0KLQkJCQlyY1JlZnJlc2gubGVmdCAtPSAxLjBmOw0KLQkJCQlyY1JlZnJlc2gucmlnaHQgKz0gMS4wZjsNCi0JCQkJcmNSZWZyZXNoLmJvdHRvbSAtPSAxLjBmOw0KLQkJCQlyY1JlZnJlc2gudG9wICs9IDEuMGY7DQotDQotCQkJCW1fcE5vdGlmeS0+SU9uSW52YWxpZGF0ZVJlY3QoJnJjUmVmcmVzaCk7DQotCQkJCW1fYk5vdGlmeUZsYWcgPSBGQUxTRTsNCi0JCQl9DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBDRlhfTGlzdEN0cmw6OlNlbGVjdEl0ZW1zKCkNCi17DQotCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fYVNlbEl0ZW1zLkdldENvdW50KCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJRlhfSU5UMzIgbkl0ZW1JbmRleCA9IG1fYVNlbEl0ZW1zLkdldEl0ZW1JbmRleChpKTsNCi0JCUZYX0lOVDMyIG5TdGF0ZSA9IG1fYVNlbEl0ZW1zLkdldFN0YXRlKGkpOw0KLQ0KLQkJc3dpdGNoKG5TdGF0ZSkNCi0JCXsNCi0JCWNhc2UgMToNCi0JCQlTZXRNdWx0aXBsZVNlbGVjdChuSXRlbUluZGV4LCBUUlVFKTsJCQkNCi0JCQlicmVhazsNCi0JCWNhc2UgLTE6DQotCQkJU2V0TXVsdGlwbGVTZWxlY3Qobkl0ZW1JbmRleCwgRkFMU0UpOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQl9DQotDQotCW1fYVNlbEl0ZW1zLkRvbmUoKTsNCi19DQotDQotdm9pZCBDRlhfTGlzdEN0cmw6OlNlbGVjdChGWF9JTlQzMiBuSXRlbUluZGV4KQ0KLXsNCi0JaWYgKCFJc1ZhbGlkKG5JdGVtSW5kZXgpKSByZXR1cm47DQotDQotCWlmICh0aGlzLT5Jc011bHRpcGxlU2VsKCkpDQotCXsNCi0JCW1fYVNlbEl0ZW1zLkFkZChuSXRlbUluZGV4KTsNCi0JCVNlbGVjdEl0ZW1zKCk7DQotCX0NCi0JZWxzZQ0KLQkJU2V0U2luZ2xlU2VsZWN0KG5JdGVtSW5kZXgpOw0KLX0NCi0NCi1GWF9CT09MCUNGWF9MaXN0Q3RybDo6SXNJdGVtVmlzaWJsZShGWF9JTlQzMiBuSXRlbUluZGV4KSBjb25zdA0KLXsNCi0JQ1BERl9SZWN0IHJjUGxhdGUgPSB0aGlzLT5HZXRQbGF0ZVJlY3QoKTsNCi0JQ1BERl9SZWN0IHJjSXRlbSA9IHRoaXMtPkdldEl0ZW1SZWN0KG5JdGVtSW5kZXgpOw0KLQ0KLQlyZXR1cm4gcmNJdGVtLmJvdHRvbSA+PSByY1BsYXRlLmJvdHRvbSAmJiByY0l0ZW0udG9wIDw9IHJjUGxhdGUudG9wOw0KLX0NCi0NCi12b2lkIENGWF9MaXN0Q3RybDo6U2Nyb2xsVG9MaXN0SXRlbShGWF9JTlQzMiBuSXRlbUluZGV4KQ0KLXsNCi0JaWYgKCFJc1ZhbGlkKG5JdGVtSW5kZXgpKSByZXR1cm47DQotDQotCUNQREZfUmVjdCByY1BsYXRlID0gdGhpcy0+R2V0UGxhdGVSZWN0KCk7DQotCUNQREZfUmVjdCByY0l0ZW0gPSBDRlhfTGlzdDo6R2V0SXRlbVJlY3Qobkl0ZW1JbmRleCk7DQotCUNQREZfUmVjdCByY0l0ZW1DdHJsID0gR2V0SXRlbVJlY3Qobkl0ZW1JbmRleCk7DQotDQotCWlmIChGWF9FRElUX0lzRmxvYXRTbWFsbGVyKHJjSXRlbUN0cmwuYm90dG9tLCByY1BsYXRlLmJvdHRvbSkpDQotCXsNCi0JCWlmIChGWF9FRElUX0lzRmxvYXRTbWFsbGVyKHJjSXRlbUN0cmwudG9wLCByY1BsYXRlLnRvcCkpDQotCQl7DQotCQkJU2V0U2Nyb2xsUG9zWShyY0l0ZW0uYm90dG9tICsgcmNQbGF0ZS5IZWlnaHQoKSk7DQotCQl9DQotCX0NCi0JZWxzZSBpZiAoRlhfRURJVF9Jc0Zsb2F0QmlnZ2VyKHJjSXRlbUN0cmwudG9wLCByY1BsYXRlLnRvcCkpDQotCXsNCi0JCWlmIChGWF9FRElUX0lzRmxvYXRCaWdnZXIocmNJdGVtQ3RybC5ib3R0b20sIHJjUGxhdGUuYm90dG9tKSkNCi0JCXsNCi0JCQlTZXRTY3JvbGxQb3NZKHJjSXRlbS50b3ApOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZYX0xpc3RDdHJsOjpTZXRTY3JvbGxJbmZvKCkNCi17DQotCWlmIChtX3BOb3RpZnkpDQotCXsNCi0JCUNQREZfUmVjdCByY1BsYXRlID0gR2V0UGxhdGVSZWN0KCk7DQotCQlDUERGX1JlY3QgcmNDb250ZW50ID0gQ0ZYX0xpc3Q6OkdldENvbnRlbnRSZWN0KCk7DQotDQotCQlpZiAoIW1fYk5vdGlmeUZsYWcpDQotCQl7DQotCQkJbV9iTm90aWZ5RmxhZyA9IFRSVUU7DQotCQkJbV9wTm90aWZ5LT5JT25TZXRTY3JvbGxJbmZvWShyY1BsYXRlLmJvdHRvbSwgcmNQbGF0ZS50b3AsIA0KLQkJCQkJcmNDb250ZW50LmJvdHRvbSwgcmNDb250ZW50LnRvcCwgR2V0Rmlyc3RIZWlnaHQoKSwgcmNQbGF0ZS5IZWlnaHQoKSk7DQotCQkJbV9iTm90aWZ5RmxhZyA9IEZBTFNFOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0ZYX0xpc3RDdHJsOjpTZXRTY3JvbGxQb3MoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KQ0KLXsNCi0JU2V0U2Nyb2xsUG9zWShwb2ludC55KTsNCi19DQotDQotdm9pZCBDRlhfTGlzdEN0cmw6OlNldFNjcm9sbFBvc1koRlhfRkxPQVQgZnkpDQotew0KLQlpZiAoIUZYX0VESVRfSXNGbG9hdEVxdWFsKG1fcHRTY3JvbGxQb3MueSxmeSkpDQotCXsNCi0JCUNQREZfUmVjdCByY1BsYXRlID0gdGhpcy0+R2V0UGxhdGVSZWN0KCk7DQotCQlDUERGX1JlY3QgcmNDb250ZW50ID0gQ0ZYX0xpc3Q6OkdldENvbnRlbnRSZWN0KCk7DQotDQotCQlpZiAocmNQbGF0ZS5IZWlnaHQoKSA+IHJjQ29udGVudC5IZWlnaHQoKSkNCi0JCXsNCi0JCQlmeSA9IHJjUGxhdGUudG9wOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCWlmIChGWF9FRElUX0lzRmxvYXRTbWFsbGVyKGZ5IC0gcmNQbGF0ZS5IZWlnaHQoKSwgcmNDb250ZW50LmJvdHRvbSkpDQotCQkJew0KLQkJCQlmeSA9IHJjQ29udGVudC5ib3R0b20gKyByY1BsYXRlLkhlaWdodCgpOw0KLQkJCX0NCi0JCQllbHNlIGlmIChGWF9FRElUX0lzRmxvYXRCaWdnZXIoZnksIHJjQ29udGVudC50b3ApKQ0KLQkJCXsNCi0JCQkJZnkgPSByY0NvbnRlbnQudG9wOw0KLQkJCX0NCi0JCX0NCi0NCi0JCW1fcHRTY3JvbGxQb3MueSA9IGZ5Ow0KLQkJSW52YWxpZGF0ZUl0ZW0oLTEpOw0KLQ0KLQkJaWYgKG1fcE5vdGlmeSkgDQotCQl7DQotCQkJaWYgKCFtX2JOb3RpZnlGbGFnKQ0KLQkJCXsNCi0JCQkJbV9iTm90aWZ5RmxhZyA9IFRSVUU7DQotCQkJCW1fcE5vdGlmeS0+SU9uU2V0U2Nyb2xsUG9zWShmeSk7DQotCQkJCW1fYk5vdGlmeUZsYWcgPSBGQUxTRTsNCi0JCQl9DQotCQl9DQotCX0NCi19DQotDQotQ1BERl9SZWN0IENGWF9MaXN0Q3RybDo6R2V0Q29udGVudFJlY3QoKSBjb25zdA0KLXsNCi0JcmV0dXJuIEluVG9PdXQoQ0ZYX0xpc3Q6OkdldENvbnRlbnRSZWN0KCkpOw0KLX0NCi0NCi12b2lkIENGWF9MaXN0Q3RybDo6UmVBcnJhbmdlKEZYX0lOVDMyIG5JdGVtSW5kZXgpDQotew0KLQlDRlhfTGlzdDo6UmVBcnJhbmdlKG5JdGVtSW5kZXgpOw0KLQlTZXRTY3JvbGxJbmZvKCk7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0xpc3RDdHJsOjpTZXRUb3BJdGVtKEZYX0lOVDMyIG5JbmRleCkNCi17DQotCWlmIChJc1ZhbGlkKG5JbmRleCkpDQotCXsNCi0JCXRoaXMtPkdldFBsYXRlUmVjdCgpOw0KLQkJQ1BERl9SZWN0IHJjSXRlbSA9IENGWF9MaXN0OjpHZXRJdGVtUmVjdChuSW5kZXgpOw0KLQkJU2V0U2Nyb2xsUG9zWShyY0l0ZW0udG9wKTsNCi0JfQ0KLX0NCi0NCi1GWF9JTlQzMiBDRlhfTGlzdEN0cmw6OkdldFRvcEl0ZW0oKSBjb25zdA0KLXsNCi0JRlhfSU5UMzIgbkl0ZW1JbmRleCA9IHRoaXMtPkdldEl0ZW1JbmRleCh0aGlzLT5HZXRCVFBvaW50KCkpOw0KLQ0KLQlpZiAoIUlzSXRlbVZpc2libGUobkl0ZW1JbmRleCkgJiYgSXNJdGVtVmlzaWJsZShuSXRlbUluZGV4ICsgMSkpDQotCQkJbkl0ZW1JbmRleCArPSAxOw0KLQ0KLQlyZXR1cm4gbkl0ZW1JbmRleDsNCi19DQotDQotdm9pZCBDRlhfTGlzdEN0cmw6OkVtcHR5KCkNCi17DQotCUNGWF9MaXN0OjpFbXB0eSgpOw0KLQlJbnZhbGlkYXRlSXRlbSgtMSk7DQotfQ0KLQ0KLXZvaWQgQ0ZYX0xpc3RDdHJsOjpDYW5jZWwoKQ0KLXsNCi0JbV9hU2VsSXRlbXMuRGVzZWxlY3RBbGwoKTsNCi19DQotDQotRlhfSU5UMzIgQ0ZYX0xpc3RDdHJsOjpHZXRJdGVtSW5kZXgoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdA0KLXsNCi0JcmV0dXJuIENGWF9MaXN0OjpHZXRJdGVtSW5kZXgoT3V0VG9Jbihwb2ludCkpOw0KLX0NCi0NCi1DRlhfV2lkZVN0cmluZyBDRlhfTGlzdEN0cmw6OkdldFRleHQoKSBjb25zdA0KLXsNCi0JaWYgKHRoaXMtPklzTXVsdGlwbGVTZWwoKSkNCi0JCXJldHVybiB0aGlzLT5HZXRJdGVtVGV4dCh0aGlzLT5tX25DYXJldEluZGV4KTsJDQotCWVsc2UNCi0JCXJldHVybiB0aGlzLT5HZXRJdGVtVGV4dCh0aGlzLT5tX25TZWxJdGVtKTsNCi19DQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhlZGl0L2Z4ZXRfc3R1Yi5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhlZGl0L2Z4ZXRfZWRpdC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhlZGl0L2Z4ZXRfbGlzdC5oIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENGWF9MaXN0SXRlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0NGWF9MaXN0SXRlbTo6Q0ZYX0xpc3RJdGVtKCkgOiBtX3BFZGl0KE5VTEwpLAorCW1fYlNlbGVjdGVkKEZBTFNFKSwKKwltX2JDYXJldChGQUxTRSksCisJbV9yY0xpc3RJdGVtKDAuMGYsMC4wZiwwLjBmLDAuMGYpCit7CisJbV9wRWRpdCA9IElGWF9FZGl0OjpOZXdFZGl0KCk7CisJQVNTRVJUKG1fcEVkaXQgIT0gTlVMTCk7CisKKwltX3BFZGl0LT5TZXRBbGlnbm1lbnRWKDEpOworCW1fcEVkaXQtPkluaXRpYWxpemUoKTsKK30KKworQ0ZYX0xpc3RJdGVtOjp+Q0ZYX0xpc3RJdGVtKCkKK3sKKwlJRlhfRWRpdDo6RGVsRWRpdChtX3BFZGl0KTsKK30KKwordm9pZCBDRlhfTGlzdEl0ZW06OlNldEZvbnRNYXAoSUZYX0VkaXRfRm9udE1hcCAqIHBGb250TWFwKQoreworCWlmIChtX3BFZGl0KQorCQltX3BFZGl0LT5TZXRGb250TWFwKHBGb250TWFwKTsKK30KKworSUZYX0VkaXQqIENGWF9MaXN0SXRlbTo6R2V0RWRpdCgpIGNvbnN0Cit7CisJcmV0dXJuIG1fcEVkaXQ7Cit9CisKK0lGWF9FZGl0X0l0ZXJhdG9yKglDRlhfTGlzdEl0ZW06OkdldEl0ZXJhdG9yKCkgY29uc3QKK3sKKwlpZiAobV9wRWRpdCkKKwkJcmV0dXJuIG1fcEVkaXQtPkdldEl0ZXJhdG9yKCk7CisKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBDRlhfTGlzdEl0ZW06OlNldFJlY3QoY29uc3QgQ0xTVF9SZWN0ICYgcmVjdCkKK3sKKwltX3JjTGlzdEl0ZW0gPSByZWN0OworfQorCitDTFNUX1JlY3QgQ0ZYX0xpc3RJdGVtOjpHZXRSZWN0KCkgY29uc3QKK3sKKwlyZXR1cm4gbV9yY0xpc3RJdGVtOworfQorCitGWF9CT09MIENGWF9MaXN0SXRlbTo6SXNTZWxlY3RlZCgpIGNvbnN0Cit7CisJcmV0dXJuIG1fYlNlbGVjdGVkOworfQorCit2b2lkIENGWF9MaXN0SXRlbTo6U2V0U2VsZWN0KEZYX0JPT0wgYlNlbGVjdGVkKQoreworCW1fYlNlbGVjdGVkID0gYlNlbGVjdGVkOworfQorCitGWF9CT09MIENGWF9MaXN0SXRlbTo6SXNDYXJldCgpIGNvbnN0Cit7CisJcmV0dXJuIG1fYkNhcmV0OworfQorCit2b2lkIENGWF9MaXN0SXRlbTo6U2V0Q2FyZXQoRlhfQk9PTCBiQ2FyZXQpCit7CisJbV9iQ2FyZXQgPSBiQ2FyZXQ7Cit9CisKK3ZvaWQgQ0ZYX0xpc3RJdGVtOjpTZXRUZXh0KEZYX0xQQ1dTVFIgdGV4dCkKK3sKKwlpZiAobV9wRWRpdCkKKwkJbV9wRWRpdC0+U2V0VGV4dCh0ZXh0KTsKK30KKwordm9pZCBDRlhfTGlzdEl0ZW06OlNldEZvbnRTaXplKEZYX0ZMT0FUIGZGb250U2l6ZSkKK3sKKwlpZiAobV9wRWRpdCkKKwkJbV9wRWRpdC0+U2V0Rm9udFNpemUoZkZvbnRTaXplKTsKK30KKworRlhfRkxPQVQgQ0ZYX0xpc3RJdGVtOjpHZXRJdGVtSGVpZ2h0KCkgY29uc3QKK3sKKwlpZiAobV9wRWRpdCkKKwkJcmV0dXJuIG1fcEVkaXQtPkdldENvbnRlbnRSZWN0KCkuSGVpZ2h0KCk7CisKKwlyZXR1cm4gMC4wZjsKK30KKworRlhfV09SRCBDRlhfTGlzdEl0ZW06OkdldEZpcnN0Q2hhcigpIGNvbnN0Cit7CisJQ1BWVF9Xb3JkIHdvcmQ7CisKKwlpZiAoSUZYX0VkaXRfSXRlcmF0b3IqCXBJdGVyYXRvciA9IEdldEl0ZXJhdG9yKCkpCisJeworCQlwSXRlcmF0b3ItPlNldEF0KDEpOwkJCisJCXBJdGVyYXRvci0+R2V0V29yZCh3b3JkKTsKKwl9CisKKwlyZXR1cm4gd29yZC5Xb3JkOworfQorCitDRlhfV2lkZVN0cmluZyBDRlhfTGlzdEl0ZW06OkdldFRleHQoKSBjb25zdAoreworCWlmIChtX3BFZGl0KQorCQlyZXR1cm4gbV9wRWRpdC0+R2V0VGV4dCgpOworCisJcmV0dXJuIEwiIjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENGWF9MaXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDRlhfTGlzdDo6Q0ZYX0xpc3QoKSA6IG1fcEZvbnRNYXAoTlVMTCksIG1fZkZvbnRTaXplKDAuMGYpLCBtX2JNdWx0aXBsZShGQUxTRSkgCit7Cit9CisKK0NGWF9MaXN0Ojp+Q0ZYX0xpc3QoKQoreworCUVtcHR5KCk7Cit9CisKK3ZvaWQgQ0ZYX0xpc3Q6OkVtcHR5KCkKK3sKKwlmb3IgKEZYX0lOVDMyIGk9MCxzej1tX2FMaXN0SXRlbXMuR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJCWRlbGV0ZSBtX2FMaXN0SXRlbXMuR2V0QXQoaSk7CisKKwltX2FMaXN0SXRlbXMuUmVtb3ZlQWxsKCk7Cit9CisKK3ZvaWQgQ0ZYX0xpc3Q6OlNldEZvbnRNYXAoSUZYX0VkaXRfRm9udE1hcCAqIHBGb250TWFwKQoreworCW1fcEZvbnRNYXAgPSBwRm9udE1hcDsKK30KKwordm9pZCBDRlhfTGlzdDo6U2V0Rm9udFNpemUoRlhfRkxPQVQgZkZvbnRTaXplKQoreworCW1fZkZvbnRTaXplID0gZkZvbnRTaXplOworfQorCit2b2lkIENGWF9MaXN0OjpBZGRJdGVtKEZYX0xQQ1dTVFIgc3RyKQorewkKKwlpZiAoQ0ZYX0xpc3RJdGVtICogcExpc3RJdGVtID0gbmV3IENGWF9MaXN0SXRlbSgpKQorCXsKKwkJcExpc3RJdGVtLT5TZXRGb250TWFwKG1fcEZvbnRNYXApOworCQlwTGlzdEl0ZW0tPlNldEZvbnRTaXplKG1fZkZvbnRTaXplKTsKKwkJcExpc3RJdGVtLT5TZXRUZXh0KHN0cik7CisJCW1fYUxpc3RJdGVtcy5BZGQocExpc3RJdGVtKTsKKwl9Cit9CisKK3ZvaWQgQ0ZYX0xpc3Q6OlJlQXJyYW5nZShGWF9JTlQzMiBuSXRlbUluZGV4KQoreworCUZYX0ZMT0FUIGZQb3NZID0gMC4wZjsKKworCWlmIChDRlhfTGlzdEl0ZW0gKiBwUHJldkl0ZW0gPSBtX2FMaXN0SXRlbXMuR2V0QXQobkl0ZW1JbmRleCAtIDEpKQorCQlmUG9zWSA9IHBQcmV2SXRlbS0+R2V0UmVjdCgpLmJvdHRvbTsKKwkKKwlmb3IgKEZYX0lOVDMyIGk9bkl0ZW1JbmRleCxzej1tX2FMaXN0SXRlbXMuR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJeworCQlpZiAoQ0ZYX0xpc3RJdGVtICogcExpc3RJdGVtID0gbV9hTGlzdEl0ZW1zLkdldEF0KGkpKQorCQl7CisJCQlGWF9GTE9BVCBmTGlzdEl0ZW1IZWlnaHQgPSBwTGlzdEl0ZW0tPkdldEl0ZW1IZWlnaHQoKTsKKwkJCXBMaXN0SXRlbS0+U2V0UmVjdChDTFNUX1JlY3QoMC4wZixmUG9zWSwwLjBmLGZQb3NZICsgZkxpc3RJdGVtSGVpZ2h0KSk7CisJCQlmUG9zWSArPSBmTGlzdEl0ZW1IZWlnaHQ7CQkJCisJCX0KKwl9CisKKwlTZXRDb250ZW50UmVjdChDTFNUX1JlY3QoMC4wZiwwLjBmLDAuMGYsZlBvc1kpKTsJCit9CisKK0lGWF9FZGl0ICogQ0ZYX0xpc3Q6OkdldEl0ZW1FZGl0KEZYX0lOVDMyIG5JbmRleCkgY29uc3QKK3sKKwlpZiAoQ0ZYX0xpc3RJdGVtICogcExpc3RJdGVtID0gbV9hTGlzdEl0ZW1zLkdldEF0KG5JbmRleCkpCisJeworCQlyZXR1cm4gcExpc3RJdGVtLT5HZXRFZGl0KCk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK0ZYX0lOVDMyIENGWF9MaXN0OjpHZXRDb3VudCgpIGNvbnN0Cit7CisJcmV0dXJuIG1fYUxpc3RJdGVtcy5HZXRTaXplKCk7Cit9CisKK0NQREZfUmVjdCBDRlhfTGlzdDo6R2V0UGxhdGVSZWN0KCkgY29uc3QKK3sKKwlyZXR1cm4gQ0ZYX0xpc3RDb250YWluZXI6OkdldFBsYXRlUmVjdCgpOworfQorCitDUERGX1JlY3QgQ0ZYX0xpc3Q6OkdldENvbnRlbnRSZWN0KCkgY29uc3QKK3sKKwlyZXR1cm4gSW5uZXJUb091dGVyKENGWF9MaXN0Q29udGFpbmVyOjpHZXRDb250ZW50UmVjdCgpKTsKK30KKworRlhfRkxPQVQgQ0ZYX0xpc3Q6OkdldEZvbnRTaXplKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9mRm9udFNpemU7Cit9CisKK0ZYX0lOVDMyIENGWF9MaXN0OjpHZXRJdGVtSW5kZXgoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdAoreworCUNQREZfUG9pbnQgcHQgPSBPdXRlclRvSW5uZXIocG9pbnQpOworCisJRlhfQk9PTCBiRmlyc3QgPSBUUlVFOworCUZYX0JPT0wgYkxhc3QgPSBUUlVFOworCisJZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9hTGlzdEl0ZW1zLkdldFNpemUoKTsgaTxzejsgaSsrKQorCXsKKwkJaWYgKENGWF9MaXN0SXRlbSAqIHBMaXN0SXRlbSA9IG1fYUxpc3RJdGVtcy5HZXRBdChpKSkKKwkJeworCQkJQ0xTVF9SZWN0IHJjTGlzdEl0ZW0gPSBwTGlzdEl0ZW0tPkdldFJlY3QoKTsKKworCQkJaWYgKEZYX0VESVRfSXNGbG9hdEJpZ2dlcihwdC55LCByY0xpc3RJdGVtLnRvcCkpCisJCQl7CQkJCisJCQkJYkZpcnN0ID0gRkFMU0U7CisJCQl9CisKKwkJCWlmIChGWF9FRElUX0lzRmxvYXRTbWFsbGVyKHB0LnksIHJjTGlzdEl0ZW0uYm90dG9tKSkKKwkJCXsKKwkJCQliTGFzdCA9IEZBTFNFOworCQkJfQorCisJCQlpZiAocHQueSA+PSByY0xpc3RJdGVtLnRvcCAmJiBwdC55IDwgcmNMaXN0SXRlbS5ib3R0b20pCisJCQl7CisJCQkJcmV0dXJuIGk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoYkZpcnN0KSByZXR1cm4gMDsKKwlpZiAoYkxhc3QpIHJldHVybiBtX2FMaXN0SXRlbXMuR2V0U2l6ZSgpLTE7CisKKwlyZXR1cm4gLTE7Cit9CisKK0ZYX0ZMT0FUIENGWF9MaXN0OjpHZXRGaXJzdEhlaWdodCgpIGNvbnN0Cit7CisJaWYgKENGWF9MaXN0SXRlbSAqIHBMaXN0SXRlbSA9IG1fYUxpc3RJdGVtcy5HZXRBdCgwKSkKKwl7CisJCXJldHVybiBwTGlzdEl0ZW0tPkdldEl0ZW1IZWlnaHQoKTsKKwl9CisKKwlyZXR1cm4gMS4wZjsKK30KKworRlhfSU5UMzIgQ0ZYX0xpc3Q6OkdldEZpcnN0U2VsZWN0ZWQoKSBjb25zdAoreworCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fYUxpc3RJdGVtcy5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwl7CisJCWlmIChDRlhfTGlzdEl0ZW0gKiBwTGlzdEl0ZW0gPSBtX2FMaXN0SXRlbXMuR2V0QXQoaSkpCisJCXsKKwkJCWlmIChwTGlzdEl0ZW0tPklzU2VsZWN0ZWQoKSkKKwkJCQlyZXR1cm4gaTsKKwkJfQorCX0KKwlyZXR1cm4gLTE7Cit9CisKK0ZYX0lOVDMyIENGWF9MaXN0OjpHZXRMYXN0U2VsZWN0ZWQoKSBjb25zdAoreworCWZvciAoRlhfSU5UMzIgaT1tX2FMaXN0SXRlbXMuR2V0U2l6ZSgpLTE7IGk+PTA7IGktLSkKKwl7CisJCWlmIChDRlhfTGlzdEl0ZW0gKiBwTGlzdEl0ZW0gPSBtX2FMaXN0SXRlbXMuR2V0QXQoaSkpCisJCXsKKwkJCWlmIChwTGlzdEl0ZW0tPklzU2VsZWN0ZWQoKSkKKwkJCQlyZXR1cm4gaTsKKwkJfQorCX0KKwlyZXR1cm4gLTE7Cit9CisKK0ZYX1dDSEFSIENGWF9MaXN0OjpUb3VwcGVyKEZYX1dDSEFSIGMpIGNvbnN0Cit7CisJaWYgKCAoYyA+PSAnYScpICYmIChjIDw9ICd6JykgKQorCQljID0gYyAtICgnYScgLSAnQScpOworCXJldHVybiBjOworfQorCitGWF9JTlQzMiBDRlhfTGlzdDo6RmluZE5leHQoRlhfSU5UMzIgbkluZGV4LEZYX1dDSEFSIG5DaGFyKSBjb25zdAoreworCUZYX0lOVDMyIG5DaXJjbGVJbmRleCA9IG5JbmRleDsKKworCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fYUxpc3RJdGVtcy5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwl7CisJCW5DaXJjbGVJbmRleCArKzsKKwkJaWYgKG5DaXJjbGVJbmRleCA+PSBzeikgbkNpcmNsZUluZGV4ID0gMDsKKworCQlpZiAoQ0ZYX0xpc3RJdGVtICogcExpc3RJdGVtID0gbV9hTGlzdEl0ZW1zLkdldEF0KG5DaXJjbGVJbmRleCkpCisJCXsKKwkJCWlmIChUb3VwcGVyKHBMaXN0SXRlbS0+R2V0Rmlyc3RDaGFyKCkpID09IFRvdXBwZXIobkNoYXIpKQorCQkJCXJldHVybiBuQ2lyY2xlSW5kZXg7CisJCX0KKwl9CisKKwlyZXR1cm4gbkNpcmNsZUluZGV4OworfQorCitDUERGX1JlY3QgQ0ZYX0xpc3Q6OkdldEl0ZW1SZWN0KEZYX0lOVDMyIG5JbmRleCkgY29uc3QKK3sKKwlpZiAoQ0ZYX0xpc3RJdGVtICogcExpc3RJdGVtID0gbV9hTGlzdEl0ZW1zLkdldEF0KG5JbmRleCkpCisJeworCQlDUERGX1JlY3QgcmNJdGVtID0gcExpc3RJdGVtLT5HZXRSZWN0KCk7CisJCXJjSXRlbS5sZWZ0ID0gMC4wZjsKKwkJcmNJdGVtLnJpZ2h0ID0gR2V0UGxhdGVSZWN0KCkuV2lkdGgoKTsKKwkJcmV0dXJuIElubmVyVG9PdXRlcihyY0l0ZW0pOworCX0KKworCXJldHVybiBDUERGX1JlY3QoKTsKK30KKworRlhfQk9PTCBDRlhfTGlzdDo6SXNJdGVtU2VsZWN0ZWQoRlhfSU5UMzIgbkluZGV4KSBjb25zdAoreworCWlmIChDRlhfTGlzdEl0ZW0gKiBwTGlzdEl0ZW0gPSBtX2FMaXN0SXRlbXMuR2V0QXQobkluZGV4KSkKKwl7CisJCXJldHVybiBwTGlzdEl0ZW0tPklzU2VsZWN0ZWQoKTsKKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgQ0ZYX0xpc3Q6OlNldEl0ZW1TZWxlY3QoRlhfSU5UMzIgbkl0ZW1JbmRleCwgRlhfQk9PTCBiU2VsZWN0ZWQpCit7CisJaWYgKENGWF9MaXN0SXRlbSAqIHBMaXN0SXRlbSA9IG1fYUxpc3RJdGVtcy5HZXRBdChuSXRlbUluZGV4KSkKKwl7CisJCXBMaXN0SXRlbS0+U2V0U2VsZWN0KGJTZWxlY3RlZCk7CisJfQorfQorCit2b2lkIENGWF9MaXN0OjpTZXRJdGVtQ2FyZXQoRlhfSU5UMzIgbkl0ZW1JbmRleCwgRlhfQk9PTCBiQ2FyZXQpCit7CisJaWYgKENGWF9MaXN0SXRlbSAqIHBMaXN0SXRlbSA9IG1fYUxpc3RJdGVtcy5HZXRBdChuSXRlbUluZGV4KSkKKwl7CisJCXBMaXN0SXRlbS0+U2V0Q2FyZXQoYkNhcmV0KTsJCQorCX0KK30KKwordm9pZCBDRlhfTGlzdDo6U2V0TXVsdGlwbGVTZWwoRlhfQk9PTCBiTXVsdGlwbGUpCit7CisJbV9iTXVsdGlwbGUgPSBiTXVsdGlwbGU7Cit9CisKK0ZYX0JPT0wgQ0ZYX0xpc3Q6OklzTXVsdGlwbGVTZWwoKSBjb25zdAoreworCXJldHVybiBtX2JNdWx0aXBsZTsKK30KKworRlhfQk9PTCBDRlhfTGlzdDo6SXNWYWxpZChGWF9JTlQzMiBuSXRlbUluZGV4KSBjb25zdAoreworCXJldHVybiBuSXRlbUluZGV4ID49IDAgJiYgbkl0ZW1JbmRleCA8IG1fYUxpc3RJdGVtcy5HZXRTaXplKCk7Cit9CisKK0NGWF9XaWRlU3RyaW5nIENGWF9MaXN0OjpHZXRJdGVtVGV4dChGWF9JTlQzMiBuSW5kZXgpIGNvbnN0Cit7CisJaWYgKENGWF9MaXN0SXRlbSAqIHBMaXN0SXRlbSA9IG1fYUxpc3RJdGVtcy5HZXRBdChuSW5kZXgpKQorCXsKKwkJcmV0dXJuIHBMaXN0SXRlbS0+R2V0VGV4dCgpOworCX0KKworCXJldHVybiBMIiI7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUExTVF9TZWxlY3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDUExTVF9TZWxlY3Q6OkNQTFNUX1NlbGVjdCgpCit7Cit9CisKK0NQTFNUX1NlbGVjdDo6fkNQTFNUX1NlbGVjdCgpCit7CisJZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9hSXRlbXMuR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJCWRlbGV0ZSBtX2FJdGVtcy5HZXRBdChpKTsKKworCW1fYUl0ZW1zLlJlbW92ZUFsbCgpOworfQorCit2b2lkIENQTFNUX1NlbGVjdDo6QWRkKEZYX0lOVDMyIG5JdGVtSW5kZXgpCit7CisJRlhfSU5UMzIgbkluZGV4ID0gRmluZChuSXRlbUluZGV4KTsKKworCWlmIChuSW5kZXggPCAwKSAKKwkJbV9hSXRlbXMuQWRkKG5ldyBDUExTVF9TZWxlY3RfSXRlbShuSXRlbUluZGV4LDEpKTsKKwllbHNlCisJeworCQlpZiAoQ1BMU1RfU2VsZWN0X0l0ZW0gKiBwSXRlbSA9IG1fYUl0ZW1zLkdldEF0KG5JbmRleCkpCisJCXsKKwkJCXBJdGVtLT5uU3RhdGUgPSAxOworCQl9CisJfQorfQorCit2b2lkIENQTFNUX1NlbGVjdDo6QWRkKEZYX0lOVDMyIG5CZWdpbkluZGV4LCBGWF9JTlQzMiBuRW5kSW5kZXgpCit7CisJaWYgKG5CZWdpbkluZGV4ID4gbkVuZEluZGV4KQorCXsKKwkJRlhfSU5UMzIgblRlbXAgPSBuRW5kSW5kZXg7CisJCW5FbmRJbmRleCA9IG5CZWdpbkluZGV4OworCQluQmVnaW5JbmRleCA9IG5UZW1wOworCX0KKworCWZvciAoRlhfSU5UMzIgaT1uQmVnaW5JbmRleDsgaTw9bkVuZEluZGV4OyBpKyspCUFkZChpKTsKK30KKwordm9pZCBDUExTVF9TZWxlY3Q6OlN1YihGWF9JTlQzMiBuSXRlbUluZGV4KQoreworCWZvciAoRlhfSU5UMzIgaT1tX2FJdGVtcy5HZXRTaXplKCktMTsgaT49MDsgaS0tKQorCXsKKwkJaWYgKENQTFNUX1NlbGVjdF9JdGVtICogcEl0ZW0gPSBtX2FJdGVtcy5HZXRBdChpKSkKKwkJCWlmIChwSXRlbS0+bkl0ZW1JbmRleCA9PSBuSXRlbUluZGV4KQorCQkJCXBJdGVtLT5uU3RhdGUgPSAtMTsKKwl9Cit9CisKK3ZvaWQgQ1BMU1RfU2VsZWN0OjpTdWIoRlhfSU5UMzIgbkJlZ2luSW5kZXgsIEZYX0lOVDMyIG5FbmRJbmRleCkKK3sKKwlpZiAobkJlZ2luSW5kZXggPiBuRW5kSW5kZXgpCisJeworCQlGWF9JTlQzMiBuVGVtcCA9IG5FbmRJbmRleDsKKwkJbkVuZEluZGV4ID0gbkJlZ2luSW5kZXg7CisJCW5CZWdpbkluZGV4ID0gblRlbXA7CisJfQorCisJZm9yIChGWF9JTlQzMiBpPW5CZWdpbkluZGV4OyBpPD1uRW5kSW5kZXg7IGkrKykJU3ViKGkpOworfQorCitGWF9JTlQzMiBDUExTVF9TZWxlY3Q6OkZpbmQoRlhfSU5UMzIgbkl0ZW1JbmRleCkgY29uc3QKK3sKKwlmb3IgKEZYX0lOVDMyIGk9MCxzej1tX2FJdGVtcy5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwl7CisJCWlmIChDUExTVF9TZWxlY3RfSXRlbSAqIHBJdGVtID0gbV9hSXRlbXMuR2V0QXQoaSkpCisJCXsKKwkJCWlmIChwSXRlbS0+bkl0ZW1JbmRleCA9PSBuSXRlbUluZGV4KQorCQkJCXJldHVybiBpOworCQl9CisJfQorCisJcmV0dXJuIC0xOworfQorCitGWF9CT09MIENQTFNUX1NlbGVjdDo6SXNFeGlzdChGWF9JTlQzMiBuSXRlbUluZGV4KSBjb25zdAoreworCXJldHVybiBGaW5kKG5JdGVtSW5kZXgpID49IDA7Cit9CisKK0ZYX0lOVDMyIENQTFNUX1NlbGVjdDo6R2V0Q291bnQoKSBjb25zdAoreworCXJldHVybiBtX2FJdGVtcy5HZXRTaXplKCk7Cit9CisKK0ZYX0lOVDMyIENQTFNUX1NlbGVjdDo6R2V0SXRlbUluZGV4KEZYX0lOVDMyIG5JbmRleCkgY29uc3QKK3sKKwlpZiAobkluZGV4ID49IDAgJiYgbkluZGV4IDwgbV9hSXRlbXMuR2V0U2l6ZSgpKQorCQlpZiAoQ1BMU1RfU2VsZWN0X0l0ZW0gKiBwSXRlbSA9IG1fYUl0ZW1zLkdldEF0KG5JbmRleCkpCisJCQlyZXR1cm4gcEl0ZW0tPm5JdGVtSW5kZXg7CisKKwlyZXR1cm4gLTE7Cit9CisKK0ZYX0lOVDMyIENQTFNUX1NlbGVjdDo6R2V0U3RhdGUoRlhfSU5UMzIgbkluZGV4KSBjb25zdAoreworCWlmIChuSW5kZXggPj0gMCAmJiBuSW5kZXggPCBtX2FJdGVtcy5HZXRTaXplKCkpCisJCWlmIChDUExTVF9TZWxlY3RfSXRlbSAqIHBJdGVtID0gbV9hSXRlbXMuR2V0QXQobkluZGV4KSkKKwkJCXJldHVybiBwSXRlbS0+blN0YXRlOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ1BMU1RfU2VsZWN0OjpEZXNlbGVjdEFsbCgpCit7CisJZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9hSXRlbXMuR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJeworCQlpZiAoQ1BMU1RfU2VsZWN0X0l0ZW0gKiBwSXRlbSA9IG1fYUl0ZW1zLkdldEF0KGkpKQorCQl7CisJCQlwSXRlbS0+blN0YXRlID0gLTE7CisJCX0KKwl9Cit9CisKK3ZvaWQgQ1BMU1RfU2VsZWN0OjpEb25lKCkKK3sKKwlmb3IgKEZYX0lOVDMyIGk9bV9hSXRlbXMuR2V0U2l6ZSgpLTE7IGk+PTA7IGktLSkKKwl7CQorCQlpZiAoQ1BMU1RfU2VsZWN0X0l0ZW0gKiBwSXRlbSA9IG1fYUl0ZW1zLkdldEF0KGkpKQorCQl7CisJCQlpZiAocEl0ZW0tPm5TdGF0ZSA9PSAtMSkKKwkJCXsKKwkJCQlkZWxldGUgcEl0ZW07CisJCQkJbV9hSXRlbXMuUmVtb3ZlQXQoaSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcEl0ZW0tPm5TdGF0ZSA9IDA7CisJCQl9CisJCX0KKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDRlhfTGlzdEN0cmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0NGWF9MaXN0Q3RybDo6Q0ZYX0xpc3RDdHJsKCkgOiBtX3BOb3RpZnkoTlVMTCksCisJbV9wdFNjcm9sbFBvcygwLjBmLDAuMGYpLAorCW1fblNlbEl0ZW0oLTEpLAorCW1fbkZvb3RJbmRleCgtMSksCisJbV9iQ3RybFNlbChGQUxTRSksCQorCW1fbkNhcmV0SW5kZXgoLTEpLAorCW1fYk5vdGlmeUZsYWcoRkFMU0UpCit7Cit9CisKK0NGWF9MaXN0Q3RybDo6fkNGWF9MaXN0Q3RybCgpCit7Cit9CisKK3ZvaWQgQ0ZYX0xpc3RDdHJsOjpTZXROb3RpZnkoSUZYX0xpc3RfTm90aWZ5ICogcE5vdGlmeSkKK3sKKwltX3BOb3RpZnkgPSBwTm90aWZ5OworfQorCitDUERGX1BvaW50IENGWF9MaXN0Q3RybDo6SW5Ub091dChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpIGNvbnN0Cit7CisJQ1BERl9SZWN0IHJjUGxhdGUgPSBHZXRQbGF0ZVJlY3QoKTsKKworCXJldHVybiBDUERGX1BvaW50KHBvaW50LnggLSAobV9wdFNjcm9sbFBvcy54IC0gcmNQbGF0ZS5sZWZ0KSwKKwkJcG9pbnQueSAtIChtX3B0U2Nyb2xsUG9zLnkgLSByY1BsYXRlLnRvcCkpOworfQorCitDUERGX1BvaW50IENGWF9MaXN0Q3RybDo6T3V0VG9Jbihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpIGNvbnN0Cit7CisJQ1BERl9SZWN0IHJjUGxhdGUgPSBHZXRQbGF0ZVJlY3QoKTsKKworCXJldHVybiBDUERGX1BvaW50KHBvaW50LnggKyAobV9wdFNjcm9sbFBvcy54IC0gcmNQbGF0ZS5sZWZ0KSwKKwkJcG9pbnQueSArIChtX3B0U2Nyb2xsUG9zLnkgLSByY1BsYXRlLnRvcCkpOworfQorCitDUERGX1JlY3QgQ0ZYX0xpc3RDdHJsOjpJblRvT3V0KGNvbnN0IENQREZfUmVjdCAmIHJlY3QpIGNvbnN0Cit7CisJQ1BERl9Qb2ludCBwdExlZnRCb3R0b20gPSBJblRvT3V0KENQREZfUG9pbnQocmVjdC5sZWZ0LHJlY3QuYm90dG9tKSk7CisJQ1BERl9Qb2ludCBwdFJpZ2h0VG9wID0gSW5Ub091dChDUERGX1BvaW50KHJlY3QucmlnaHQscmVjdC50b3ApKTsKKworCXJldHVybiBDUERGX1JlY3QocHRMZWZ0Qm90dG9tLngscHRMZWZ0Qm90dG9tLnkscHRSaWdodFRvcC54LHB0UmlnaHRUb3AueSk7Cit9CisKK0NQREZfUmVjdCBDRlhfTGlzdEN0cmw6Ok91dFRvSW4oY29uc3QgQ1BERl9SZWN0ICYgcmVjdCkgY29uc3QKK3sKKwlDUERGX1BvaW50IHB0TGVmdEJvdHRvbSA9IE91dFRvSW4oQ1BERl9Qb2ludChyZWN0LmxlZnQscmVjdC5ib3R0b20pKTsKKwlDUERGX1BvaW50IHB0UmlnaHRUb3AgPSBPdXRUb0luKENQREZfUG9pbnQocmVjdC5yaWdodCxyZWN0LnRvcCkpOworCisJcmV0dXJuIENQREZfUmVjdChwdExlZnRCb3R0b20ueCxwdExlZnRCb3R0b20ueSxwdFJpZ2h0VG9wLngscHRSaWdodFRvcC55KTsKK30KKwordm9pZCBDRlhfTGlzdEN0cmw6Ok9uTW91c2VEb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCxGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKQoreworCUZYX0lOVDMyIG5IaXRJbmRleCA9IHRoaXMtPkdldEl0ZW1JbmRleChwb2ludCk7CisKKwlpZiAoSXNNdWx0aXBsZVNlbCgpKQorCXsKKwkJaWYgKGJDdHJsKQorCQl7CisJCQlpZiAoSXNJdGVtU2VsZWN0ZWQobkhpdEluZGV4KSkKKwkJCXsKKwkJCQltX2FTZWxJdGVtcy5TdWIobkhpdEluZGV4KTsKKwkJCQlTZWxlY3RJdGVtcygpOworCQkJCW1fYkN0cmxTZWwgPSBGQUxTRTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQltX2FTZWxJdGVtcy5BZGQobkhpdEluZGV4KTsKKwkJCQlTZWxlY3RJdGVtcygpOworCQkJCW1fYkN0cmxTZWwgPSBUUlVFOworCQkJfQkJCisJCQkKKwkJCW1fbkZvb3RJbmRleCA9IG5IaXRJbmRleDsKKwkJfQorCQllbHNlIGlmIChiU2hpZnQpCisJCXsKKwkJCW1fYVNlbEl0ZW1zLkRlc2VsZWN0QWxsKCk7CisJCQltX2FTZWxJdGVtcy5BZGQobV9uRm9vdEluZGV4LG5IaXRJbmRleCk7CisJCQlTZWxlY3RJdGVtcygpOworCQl9CisJCWVsc2UKKwkJeworCQkJbV9hU2VsSXRlbXMuRGVzZWxlY3RBbGwoKTsKKwkJCW1fYVNlbEl0ZW1zLkFkZChuSGl0SW5kZXgpOworCQkJU2VsZWN0SXRlbXMoKTsKKworCQkJbV9uRm9vdEluZGV4ID0gbkhpdEluZGV4OworCQl9CisKKwkJU2V0Q2FyZXQobkhpdEluZGV4KTsKKwl9CisJZWxzZQorCXsKKwkJU2V0U2luZ2xlU2VsZWN0KG5IaXRJbmRleCk7CisJfQorCisJaWYgKCF0aGlzLT5Jc0l0ZW1WaXNpYmxlKG5IaXRJbmRleCkpCisJCXRoaXMtPlNjcm9sbFRvTGlzdEl0ZW0obkhpdEluZGV4KTsKK30KKwordm9pZCBDRlhfTGlzdEN0cmw6Ok9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCxGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKQoreworCUZYX0lOVDMyIG5IaXRJbmRleCA9IHRoaXMtPkdldEl0ZW1JbmRleChwb2ludCk7CisKKwlpZiAoSXNNdWx0aXBsZVNlbCgpKQorCXsJCQkKKwkJaWYgKGJDdHJsKQorCQl7CisJCQlpZiAobV9iQ3RybFNlbCkKKwkJCQltX2FTZWxJdGVtcy5BZGQobV9uRm9vdEluZGV4LG5IaXRJbmRleCk7CisJCQllbHNlCisJCQkJbV9hU2VsSXRlbXMuU3ViKG1fbkZvb3RJbmRleCxuSGl0SW5kZXgpOwkJCQorCQkJCisJCQlTZWxlY3RJdGVtcygpOworCQl9CisJCWVsc2UKKwkJeworCQkJbV9hU2VsSXRlbXMuRGVzZWxlY3RBbGwoKTsKKwkJCW1fYVNlbEl0ZW1zLkFkZChtX25Gb290SW5kZXgsbkhpdEluZGV4KTsKKwkJCVNlbGVjdEl0ZW1zKCk7CisJCX0KKworCQlTZXRDYXJldChuSGl0SW5kZXgpOworCX0KKwllbHNlCisJeworCQlTZXRTaW5nbGVTZWxlY3QobkhpdEluZGV4KTsKKwl9CisKKwlpZiAoIXRoaXMtPklzSXRlbVZpc2libGUobkhpdEluZGV4KSkKKwkJdGhpcy0+U2Nyb2xsVG9MaXN0SXRlbShuSGl0SW5kZXgpOworfQorCit2b2lkIENGWF9MaXN0Q3RybDo6T25WSyhGWF9JTlQzMiBuSXRlbUluZGV4LEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpCit7CisJaWYgKElzTXVsdGlwbGVTZWwoKSkKKwl7CisJCWlmIChuSXRlbUluZGV4ID49IDAgJiYgbkl0ZW1JbmRleCA8IEdldENvdW50KCkpCisJCXsKKwkJCWlmIChiQ3RybCkKKwkJCXsKKwkJCX0KKwkJCWVsc2UgaWYgKGJTaGlmdCkKKwkJCXsKKwkJCQltX2FTZWxJdGVtcy5EZXNlbGVjdEFsbCgpOworCQkJCW1fYVNlbEl0ZW1zLkFkZChtX25Gb290SW5kZXgsbkl0ZW1JbmRleCk7CisJCQkJU2VsZWN0SXRlbXMoKTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQltX2FTZWxJdGVtcy5EZXNlbGVjdEFsbCgpOworCQkJCW1fYVNlbEl0ZW1zLkFkZChuSXRlbUluZGV4KTsKKwkJCQlTZWxlY3RJdGVtcygpOworCQkJCW1fbkZvb3RJbmRleCA9IG5JdGVtSW5kZXg7CisJCQl9CisKKwkJCVNldENhcmV0KG5JdGVtSW5kZXgpOwkKKwkJfQorCX0KKwllbHNlCisJeworCQlTZXRTaW5nbGVTZWxlY3Qobkl0ZW1JbmRleCk7CisJfQorCisJaWYgKCF0aGlzLT5Jc0l0ZW1WaXNpYmxlKG5JdGVtSW5kZXgpKQorCQl0aGlzLT5TY3JvbGxUb0xpc3RJdGVtKG5JdGVtSW5kZXgpOworfQorCit2b2lkIENGWF9MaXN0Q3RybDo6T25WS19VUChGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKQoreworCU9uVksoSXNNdWx0aXBsZVNlbCgpID8gR2V0Q2FyZXQoKS0xIDogR2V0U2VsZWN0KCktMSwgYlNoaWZ0LCBiQ3RybCk7Cit9CisKK3ZvaWQgQ0ZYX0xpc3RDdHJsOjpPblZLX0RPV04oRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkKK3sKKwlPblZLKElzTXVsdGlwbGVTZWwoKSA/IEdldENhcmV0KCkrMSA6IEdldFNlbGVjdCgpKzEsIGJTaGlmdCwgYkN0cmwpOworfQorCit2b2lkIENGWF9MaXN0Q3RybDo6T25WS19MRUZUKEZYX0JPT0wgYlNoaWZ0LEZYX0JPT0wgYkN0cmwpCit7CisJT25WSygwLCBiU2hpZnQsIGJDdHJsKTsKK30KKwordm9pZCBDRlhfTGlzdEN0cmw6Ok9uVktfUklHSFQoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkKK3sKKwlPblZLKEdldENvdW50KCktMSwgYlNoaWZ0LCBiQ3RybCk7Cit9CisKK3ZvaWQgQ0ZYX0xpc3RDdHJsOjpPblZLX0hPTUUoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkKK3sKKwlPblZLKDAsIGJTaGlmdCwgYkN0cmwpOworfQorCit2b2lkIENGWF9MaXN0Q3RybDo6T25WS19FTkQoRlhfQk9PTCBiU2hpZnQsRlhfQk9PTCBiQ3RybCkKK3sKKwlPblZLKEdldENvdW50KCktMSwgYlNoaWZ0LCBiQ3RybCk7Cit9CisKK0ZYX0JPT0wJQ0ZYX0xpc3RDdHJsOjpPbkNoYXIoRlhfV09SRCBuQ2hhcixGWF9CT09MIGJTaGlmdCxGWF9CT09MIGJDdHJsKQoreworCUZYX0lOVDMyIG5JbmRleCA9IEdldExhc3RTZWxlY3RlZCgpOwkKKwlGWF9JTlQzMiBuRmluZEluZGV4ID0gRmluZE5leHQobkluZGV4LG5DaGFyKTsKKworCWlmIChuRmluZEluZGV4ICE9IG5JbmRleCkKKwl7CisJCU9uVksobkZpbmRJbmRleCwgYlNoaWZ0LCBiQ3RybCk7CisJCXJldHVybiBUUlVFOworCX0KKwlyZXR1cm4gRkFMU0U7Cit9CisKKy8qIC0tLS0tLS0tIGlubmVyIG1ldGhvZHMgLS0tLS0tLSAqLworCit2b2lkIENGWF9MaXN0Q3RybDo6U2V0UGxhdGVSZWN0KGNvbnN0IENQREZfUmVjdCAmIHJlY3QpCit7CisJQ0ZYX0xpc3RDb250YWluZXI6OlNldFBsYXRlUmVjdChyZWN0KTsKKwltX3B0U2Nyb2xsUG9zLnggPSByZWN0LmxlZnQ7CisJU2V0U2Nyb2xsUG9zKENQREZfUG9pbnQocmVjdC5sZWZ0LHJlY3QudG9wKSk7CQorCVJlQXJyYW5nZSgwKTsKKwlJbnZhbGlkYXRlSXRlbSgtMSk7Cit9CisKK0NQREZfUmVjdCBDRlhfTGlzdEN0cmw6OkdldEl0ZW1SZWN0KEZYX0lOVDMyIG5JbmRleCkgY29uc3QKK3sKKwlyZXR1cm4gSW5Ub091dChDRlhfTGlzdDo6R2V0SXRlbVJlY3QobkluZGV4KSk7Cit9CisKK3ZvaWQgQ0ZYX0xpc3RDdHJsOjpBZGRTdHJpbmcoRlhfTFBDV1NUUiBzdHJpbmcpCit7CisJQWRkSXRlbShzdHJpbmcpOworCVJlQXJyYW5nZShHZXRDb3VudCgpIC0gMSk7Cit9CisKK3ZvaWQgQ0ZYX0xpc3RDdHJsOjpTZXRNdWx0aXBsZVNlbGVjdChGWF9JTlQzMiBuSXRlbUluZGV4LCBGWF9CT09MIGJTZWxlY3RlZCkKK3sKKwlpZiAoIUlzVmFsaWQobkl0ZW1JbmRleCkpIHJldHVybjsKKworCWlmIChiU2VsZWN0ZWQgIT0gdGhpcy0+SXNJdGVtU2VsZWN0ZWQobkl0ZW1JbmRleCkpCisJeworCQlpZiAoYlNlbGVjdGVkKQorCQl7CisJCQlTZXRJdGVtU2VsZWN0KG5JdGVtSW5kZXgsVFJVRSk7CisJCQlJbnZhbGlkYXRlSXRlbShuSXRlbUluZGV4KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCVNldEl0ZW1TZWxlY3Qobkl0ZW1JbmRleCxGQUxTRSk7CisJCQlJbnZhbGlkYXRlSXRlbShuSXRlbUluZGV4KTsKKwkJfQorCX0KK30KKwordm9pZCBDRlhfTGlzdEN0cmw6OlNldFNpbmdsZVNlbGVjdChGWF9JTlQzMiBuSXRlbUluZGV4KQoreworCWlmICghSXNWYWxpZChuSXRlbUluZGV4KSkgcmV0dXJuOworCisJaWYgKG1fblNlbEl0ZW0gIT0gbkl0ZW1JbmRleCkKKwl7CisJCWlmIChtX25TZWxJdGVtID49IDApCisJCXsKKwkJCVNldEl0ZW1TZWxlY3QobV9uU2VsSXRlbSxGQUxTRSk7CisJCQlJbnZhbGlkYXRlSXRlbShtX25TZWxJdGVtKTsKKwkJfQorCQkKKwkJU2V0SXRlbVNlbGVjdChuSXRlbUluZGV4LFRSVUUpOworCQlJbnZhbGlkYXRlSXRlbShuSXRlbUluZGV4KTsKKwkJbV9uU2VsSXRlbSA9IG5JdGVtSW5kZXg7CQkKKwl9Cit9CisKK3ZvaWQgQ0ZYX0xpc3RDdHJsOjpTZXRDYXJldChGWF9JTlQzMiBuSXRlbUluZGV4KQoreworCWlmICghSXNWYWxpZChuSXRlbUluZGV4KSkgcmV0dXJuOworCisJaWYgKHRoaXMtPklzTXVsdGlwbGVTZWwoKSkKKwl7CQkKKwkJRlhfSU5UMzIgbk9sZEluZGV4ID0gbV9uQ2FyZXRJbmRleDsKKworCQlpZiAobk9sZEluZGV4ICE9IG5JdGVtSW5kZXgpCisJCXsKKwkJCW1fbkNhcmV0SW5kZXggPSBuSXRlbUluZGV4OworCisJCQlTZXRJdGVtQ2FyZXQobk9sZEluZGV4LCBGQUxTRSk7CisJCQlTZXRJdGVtQ2FyZXQobkl0ZW1JbmRleCxUUlVFKTsKKworCQkJSW52YWxpZGF0ZUl0ZW0obk9sZEluZGV4KTsKKwkJCUludmFsaWRhdGVJdGVtKG5JdGVtSW5kZXgpOwkJCQorCQl9CisJfQorfQorCit2b2lkIENGWF9MaXN0Q3RybDo6SW52YWxpZGF0ZUl0ZW0oRlhfSU5UMzIgbkl0ZW1JbmRleCkKK3sKKwlpZiAobV9wTm90aWZ5KQorCXsKKwkJaWYgKG5JdGVtSW5kZXggPT0gLTEpCisJCXsKKwkJCWlmICghbV9iTm90aWZ5RmxhZykKKwkJCXsKKwkJCQltX2JOb3RpZnlGbGFnID0gVFJVRTsKKwkJCQlDUERGX1JlY3QgcmNSZWZyZXNoID0gR2V0UGxhdGVSZWN0KCk7CisJCQkJbV9wTm90aWZ5LT5JT25JbnZhbGlkYXRlUmVjdCgmcmNSZWZyZXNoKTsKKwkJCQltX2JOb3RpZnlGbGFnID0gRkFMU0U7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAoIW1fYk5vdGlmeUZsYWcpCisJCQl7CisJCQkJbV9iTm90aWZ5RmxhZyA9IFRSVUU7CisJCQkJQ1BERl9SZWN0IHJjUmVmcmVzaCA9IEdldEl0ZW1SZWN0KG5JdGVtSW5kZXgpOworCQkJCXJjUmVmcmVzaC5sZWZ0IC09IDEuMGY7CisJCQkJcmNSZWZyZXNoLnJpZ2h0ICs9IDEuMGY7CisJCQkJcmNSZWZyZXNoLmJvdHRvbSAtPSAxLjBmOworCQkJCXJjUmVmcmVzaC50b3AgKz0gMS4wZjsKKworCQkJCW1fcE5vdGlmeS0+SU9uSW52YWxpZGF0ZVJlY3QoJnJjUmVmcmVzaCk7CisJCQkJbV9iTm90aWZ5RmxhZyA9IEZBTFNFOworCQkJfQorCQl9CisJfQorfQorCit2b2lkIENGWF9MaXN0Q3RybDo6U2VsZWN0SXRlbXMoKQoreworCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fYVNlbEl0ZW1zLkdldENvdW50KCk7IGk8c3o7IGkrKykKKwl7CisJCUZYX0lOVDMyIG5JdGVtSW5kZXggPSBtX2FTZWxJdGVtcy5HZXRJdGVtSW5kZXgoaSk7CisJCUZYX0lOVDMyIG5TdGF0ZSA9IG1fYVNlbEl0ZW1zLkdldFN0YXRlKGkpOworCisJCXN3aXRjaChuU3RhdGUpCisJCXsKKwkJY2FzZSAxOgorCQkJU2V0TXVsdGlwbGVTZWxlY3Qobkl0ZW1JbmRleCwgVFJVRSk7CQkJCisJCQlicmVhazsKKwkJY2FzZSAtMToKKwkJCVNldE11bHRpcGxlU2VsZWN0KG5JdGVtSW5kZXgsIEZBTFNFKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbV9hU2VsSXRlbXMuRG9uZSgpOworfQorCit2b2lkIENGWF9MaXN0Q3RybDo6U2VsZWN0KEZYX0lOVDMyIG5JdGVtSW5kZXgpCit7CisJaWYgKCFJc1ZhbGlkKG5JdGVtSW5kZXgpKSByZXR1cm47CisKKwlpZiAodGhpcy0+SXNNdWx0aXBsZVNlbCgpKQorCXsKKwkJbV9hU2VsSXRlbXMuQWRkKG5JdGVtSW5kZXgpOworCQlTZWxlY3RJdGVtcygpOworCX0KKwllbHNlCisJCVNldFNpbmdsZVNlbGVjdChuSXRlbUluZGV4KTsKK30KKworRlhfQk9PTAlDRlhfTGlzdEN0cmw6OklzSXRlbVZpc2libGUoRlhfSU5UMzIgbkl0ZW1JbmRleCkgY29uc3QKK3sKKwlDUERGX1JlY3QgcmNQbGF0ZSA9IHRoaXMtPkdldFBsYXRlUmVjdCgpOworCUNQREZfUmVjdCByY0l0ZW0gPSB0aGlzLT5HZXRJdGVtUmVjdChuSXRlbUluZGV4KTsKKworCXJldHVybiByY0l0ZW0uYm90dG9tID49IHJjUGxhdGUuYm90dG9tICYmIHJjSXRlbS50b3AgPD0gcmNQbGF0ZS50b3A7Cit9CisKK3ZvaWQgQ0ZYX0xpc3RDdHJsOjpTY3JvbGxUb0xpc3RJdGVtKEZYX0lOVDMyIG5JdGVtSW5kZXgpCit7CisJaWYgKCFJc1ZhbGlkKG5JdGVtSW5kZXgpKSByZXR1cm47CisKKwlDUERGX1JlY3QgcmNQbGF0ZSA9IHRoaXMtPkdldFBsYXRlUmVjdCgpOworCUNQREZfUmVjdCByY0l0ZW0gPSBDRlhfTGlzdDo6R2V0SXRlbVJlY3Qobkl0ZW1JbmRleCk7CisJQ1BERl9SZWN0IHJjSXRlbUN0cmwgPSBHZXRJdGVtUmVjdChuSXRlbUluZGV4KTsKKworCWlmIChGWF9FRElUX0lzRmxvYXRTbWFsbGVyKHJjSXRlbUN0cmwuYm90dG9tLCByY1BsYXRlLmJvdHRvbSkpCisJeworCQlpZiAoRlhfRURJVF9Jc0Zsb2F0U21hbGxlcihyY0l0ZW1DdHJsLnRvcCwgcmNQbGF0ZS50b3ApKQorCQl7CisJCQlTZXRTY3JvbGxQb3NZKHJjSXRlbS5ib3R0b20gKyByY1BsYXRlLkhlaWdodCgpKTsKKwkJfQorCX0KKwllbHNlIGlmIChGWF9FRElUX0lzRmxvYXRCaWdnZXIocmNJdGVtQ3RybC50b3AsIHJjUGxhdGUudG9wKSkKKwl7CisJCWlmIChGWF9FRElUX0lzRmxvYXRCaWdnZXIocmNJdGVtQ3RybC5ib3R0b20sIHJjUGxhdGUuYm90dG9tKSkKKwkJeworCQkJU2V0U2Nyb2xsUG9zWShyY0l0ZW0udG9wKTsKKwkJfQorCX0KK30KKwordm9pZCBDRlhfTGlzdEN0cmw6OlNldFNjcm9sbEluZm8oKQoreworCWlmIChtX3BOb3RpZnkpCisJeworCQlDUERGX1JlY3QgcmNQbGF0ZSA9IEdldFBsYXRlUmVjdCgpOworCQlDUERGX1JlY3QgcmNDb250ZW50ID0gQ0ZYX0xpc3Q6OkdldENvbnRlbnRSZWN0KCk7CisKKwkJaWYgKCFtX2JOb3RpZnlGbGFnKQorCQl7CisJCQltX2JOb3RpZnlGbGFnID0gVFJVRTsKKwkJCW1fcE5vdGlmeS0+SU9uU2V0U2Nyb2xsSW5mb1kocmNQbGF0ZS5ib3R0b20sIHJjUGxhdGUudG9wLCAKKwkJCQkJcmNDb250ZW50LmJvdHRvbSwgcmNDb250ZW50LnRvcCwgR2V0Rmlyc3RIZWlnaHQoKSwgcmNQbGF0ZS5IZWlnaHQoKSk7CisJCQltX2JOb3RpZnlGbGFnID0gRkFMU0U7CisJCX0KKwl9Cit9CisKK3ZvaWQgQ0ZYX0xpc3RDdHJsOjpTZXRTY3JvbGxQb3MoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KQoreworCVNldFNjcm9sbFBvc1kocG9pbnQueSk7Cit9CisKK3ZvaWQgQ0ZYX0xpc3RDdHJsOjpTZXRTY3JvbGxQb3NZKEZYX0ZMT0FUIGZ5KQoreworCWlmICghRlhfRURJVF9Jc0Zsb2F0RXF1YWwobV9wdFNjcm9sbFBvcy55LGZ5KSkKKwl7CisJCUNQREZfUmVjdCByY1BsYXRlID0gdGhpcy0+R2V0UGxhdGVSZWN0KCk7CisJCUNQREZfUmVjdCByY0NvbnRlbnQgPSBDRlhfTGlzdDo6R2V0Q29udGVudFJlY3QoKTsKKworCQlpZiAocmNQbGF0ZS5IZWlnaHQoKSA+IHJjQ29udGVudC5IZWlnaHQoKSkKKwkJeworCQkJZnkgPSByY1BsYXRlLnRvcDsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChGWF9FRElUX0lzRmxvYXRTbWFsbGVyKGZ5IC0gcmNQbGF0ZS5IZWlnaHQoKSwgcmNDb250ZW50LmJvdHRvbSkpCisJCQl7CisJCQkJZnkgPSByY0NvbnRlbnQuYm90dG9tICsgcmNQbGF0ZS5IZWlnaHQoKTsKKwkJCX0KKwkJCWVsc2UgaWYgKEZYX0VESVRfSXNGbG9hdEJpZ2dlcihmeSwgcmNDb250ZW50LnRvcCkpCisJCQl7CisJCQkJZnkgPSByY0NvbnRlbnQudG9wOworCQkJfQorCQl9CisKKwkJbV9wdFNjcm9sbFBvcy55ID0gZnk7CisJCUludmFsaWRhdGVJdGVtKC0xKTsKKworCQlpZiAobV9wTm90aWZ5KSAKKwkJeworCQkJaWYgKCFtX2JOb3RpZnlGbGFnKQorCQkJeworCQkJCW1fYk5vdGlmeUZsYWcgPSBUUlVFOworCQkJCW1fcE5vdGlmeS0+SU9uU2V0U2Nyb2xsUG9zWShmeSk7CisJCQkJbV9iTm90aWZ5RmxhZyA9IEZBTFNFOworCQkJfQorCQl9CisJfQorfQorCitDUERGX1JlY3QgQ0ZYX0xpc3RDdHJsOjpHZXRDb250ZW50UmVjdCgpIGNvbnN0Cit7CisJcmV0dXJuIEluVG9PdXQoQ0ZYX0xpc3Q6OkdldENvbnRlbnRSZWN0KCkpOworfQorCit2b2lkIENGWF9MaXN0Q3RybDo6UmVBcnJhbmdlKEZYX0lOVDMyIG5JdGVtSW5kZXgpCit7CisJQ0ZYX0xpc3Q6OlJlQXJyYW5nZShuSXRlbUluZGV4KTsKKwlTZXRTY3JvbGxJbmZvKCk7Cit9CisKK3ZvaWQgQ0ZYX0xpc3RDdHJsOjpTZXRUb3BJdGVtKEZYX0lOVDMyIG5JbmRleCkKK3sKKwlpZiAoSXNWYWxpZChuSW5kZXgpKQorCXsKKwkJdGhpcy0+R2V0UGxhdGVSZWN0KCk7CisJCUNQREZfUmVjdCByY0l0ZW0gPSBDRlhfTGlzdDo6R2V0SXRlbVJlY3QobkluZGV4KTsKKwkJU2V0U2Nyb2xsUG9zWShyY0l0ZW0udG9wKTsKKwl9Cit9CisKK0ZYX0lOVDMyIENGWF9MaXN0Q3RybDo6R2V0VG9wSXRlbSgpIGNvbnN0Cit7CisJRlhfSU5UMzIgbkl0ZW1JbmRleCA9IHRoaXMtPkdldEl0ZW1JbmRleCh0aGlzLT5HZXRCVFBvaW50KCkpOworCisJaWYgKCFJc0l0ZW1WaXNpYmxlKG5JdGVtSW5kZXgpICYmIElzSXRlbVZpc2libGUobkl0ZW1JbmRleCArIDEpKQorCQkJbkl0ZW1JbmRleCArPSAxOworCisJcmV0dXJuIG5JdGVtSW5kZXg7Cit9CisKK3ZvaWQgQ0ZYX0xpc3RDdHJsOjpFbXB0eSgpCit7CisJQ0ZYX0xpc3Q6OkVtcHR5KCk7CisJSW52YWxpZGF0ZUl0ZW0oLTEpOworfQorCit2b2lkIENGWF9MaXN0Q3RybDo6Q2FuY2VsKCkKK3sKKwltX2FTZWxJdGVtcy5EZXNlbGVjdEFsbCgpOworfQorCitGWF9JTlQzMiBDRlhfTGlzdEN0cmw6OkdldEl0ZW1JbmRleChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpIGNvbnN0Cit7CisJcmV0dXJuIENGWF9MaXN0OjpHZXRJdGVtSW5kZXgoT3V0VG9Jbihwb2ludCkpOworfQorCitDRlhfV2lkZVN0cmluZyBDRlhfTGlzdEN0cmw6OkdldFRleHQoKSBjb25zdAoreworCWlmICh0aGlzLT5Jc011bHRpcGxlU2VsKCkpCisJCXJldHVybiB0aGlzLT5HZXRJdGVtVGV4dCh0aGlzLT5tX25DYXJldEluZGV4KTsJCisJZWxzZQorCQlyZXR1cm4gdGhpcy0+R2V0SXRlbVRleHQodGhpcy0+bV9uU2VsSXRlbSk7Cit9CisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2Z4ZWRpdC9meGV0X21vZHVsZS5jcHAgYi9mcGRmc2RrL3NyYy9meGVkaXQvZnhldF9tb2R1bGUuY3BwCmluZGV4IGIxM2FmODkuLjljYTdmMmUgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2Z4ZWRpdC9meGV0X21vZHVsZS5jcHAKKysrIGIvZnBkZnNkay9zcmMvZnhlZGl0L2Z4ZXRfbW9kdWxlLmNwcApAQCAtMSw0NiArMSw0NiBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhlZGl0L2Z4ZXRfc3R1Yi5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4ZWRpdC9meGV0X2VkaXQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGVkaXQvZnhldF9saXN0LmgiDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJRlhfRWRpdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotSUZYX0VkaXQqIElGWF9FZGl0OjpOZXdFZGl0KCkNCi17DQotCWlmIChJUERGX1ZhcmlhYmxlVGV4dCAqIHBWVCA9IElQREZfVmFyaWFibGVUZXh0OjpOZXdWYXJpYWJsZVRleHQoKSkNCi0Jew0KLQkJcmV0dXJuIG5ldyBDRlhfRWRpdChwVlQpOw0KLQl9DQotDQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi12b2lkIElGWF9FZGl0OjpEZWxFZGl0KElGWF9FZGl0KiBwRWRpdCkNCi17DQotCUFTU0VSVChwRWRpdCAhPSBOVUxMKTsNCi0NCi0JSVBERl9WYXJpYWJsZVRleHQ6OkRlbFZhcmlhYmxlVGV4dChwRWRpdC0+R2V0VmFyaWFibGVUZXh0KCkpOw0KLQ0KLQlkZWxldGUgKENGWF9FZGl0KilwRWRpdDsNCi19DQotDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJRlhfTGlzdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotSUZYX0xpc3QqIElGWF9MaXN0OjpOZXdMaXN0KCkNCi17DQotCXJldHVybiBuZXcgQ0ZYX0xpc3RDdHJsKCk7DQotfQ0KLQ0KLXZvaWQgSUZYX0xpc3Q6OkRlbExpc3QoSUZYX0xpc3QqIHBMaXN0KQ0KLXsNCi0JQVNTRVJUKHBMaXN0ICE9IE5VTEwpOw0KLQ0KLQlkZWxldGUgKENGWF9MaXN0Q3RybCopcExpc3Q7DQotfQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4ZWRpdC9meGV0X3N0dWIuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4ZWRpdC9meGV0X2VkaXQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4ZWRpdC9meGV0X2xpc3QuaCIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJRlhfRWRpdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0lGWF9FZGl0KiBJRlhfRWRpdDo6TmV3RWRpdCgpCit7CisJaWYgKElQREZfVmFyaWFibGVUZXh0ICogcFZUID0gSVBERl9WYXJpYWJsZVRleHQ6Ok5ld1ZhcmlhYmxlVGV4dCgpKQorCXsKKwkJcmV0dXJuIG5ldyBDRlhfRWRpdChwVlQpOworCX0KKworCXJldHVybiBOVUxMOworfQorCit2b2lkIElGWF9FZGl0OjpEZWxFZGl0KElGWF9FZGl0KiBwRWRpdCkKK3sKKwlBU1NFUlQocEVkaXQgIT0gTlVMTCk7CisKKwlJUERGX1ZhcmlhYmxlVGV4dDo6RGVsVmFyaWFibGVUZXh0KHBFZGl0LT5HZXRWYXJpYWJsZVRleHQoKSk7CisKKwlkZWxldGUgKENGWF9FZGl0KilwRWRpdDsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIElGWF9MaXN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworSUZYX0xpc3QqIElGWF9MaXN0OjpOZXdMaXN0KCkKK3sKKwlyZXR1cm4gbmV3IENGWF9MaXN0Q3RybCgpOworfQorCit2b2lkIElGWF9MaXN0OjpEZWxMaXN0KElGWF9MaXN0KiBwTGlzdCkKK3sKKwlBU1NFUlQocExpc3QgIT0gTlVMTCk7CisKKwlkZWxldGUgKENGWF9MaXN0Q3RybCopcExpc3Q7Cit9CisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2Z4ZWRpdC9meGV0X3BhZ2VvYmpzLmNwcCBiL2ZwZGZzZGsvc3JjL2Z4ZWRpdC9meGV0X3BhZ2VvYmpzLmNwcAppbmRleCA5OTUyMDYxLi4zM2Q1N2VkIDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9meGVkaXQvZnhldF9wYWdlb2Jqcy5jcHAKKysrIGIvZnBkZnNkay9zcmMvZnhlZGl0L2Z4ZXRfcGFnZW9ianMuY3BwCkBAIC0xLDY4NyArMSw2ODcgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4ZWRpdC9meGV0X3N0dWIuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGVkaXQvZnhfZWRpdC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2Z4ZWRpdC9meGV0X2VkaXQuaCINCi0NCi0jZGVmaW5lIEZYX0VESVRfVU5ERVJMSU5FSEFMRldJRFRICQkJCTAuNWYNCi0jZGVmaW5lIEZYX0VESVRfQ1JPU1NPVVRIQUxGV0lEVEgJCQkJMC41Zg0KLQ0KLWV4dGVybiBDRlhfQnl0ZVN0cmluZyBHZXRQREZXb3JkU3RyaW5nKElGWF9FZGl0X0ZvbnRNYXAgKiBwRm9udE1hcCwgRlhfSU5UMzIgbkZvbnRJbmRleCwgRlhfV09SRCBXb3JkLCBGWF9XT1JEIFN1YldvcmQpOw0KLQ0KLUNQREZfUmVjdCBHZXRVbmRlckxpbmVSZWN0KGNvbnN0IENQVlRfV29yZCYgd29yZCkNCi17DQotCXJldHVybiBDUERGX1JlY3Qod29yZC5wdFdvcmQueCwgd29yZC5wdFdvcmQueSArIHdvcmQuZkRlc2NlbnQgKiAwLjVmLA0KLQkJCQkJCXdvcmQucHRXb3JkLnggKyB3b3JkLmZXaWR0aCwgd29yZC5wdFdvcmQueSArIHdvcmQuZkRlc2NlbnQgKiAwLjI1Zik7DQotfQ0KLQ0KLUNQREZfUmVjdCBHZXRDcm9zc291dFJlY3QoY29uc3QgQ1BWVF9Xb3JkJiB3b3JkKQ0KLXsNCi0JcmV0dXJuIENQREZfUmVjdCh3b3JkLnB0V29yZC54LCB3b3JkLnB0V29yZC55ICsgKHdvcmQuZkFzY2VudCArIHdvcmQuZkRlc2NlbnQpICogMC41ZiArIHdvcmQuZkRlc2NlbnQgKiAwLjI1ZiwNCi0JCQkJCQkJd29yZC5wdFdvcmQueCArIHdvcmQuZldpZHRoLCB3b3JkLnB0V29yZC55ICsgKHdvcmQuZkFzY2VudCArIHdvcmQuZkRlc2NlbnQpICogMC41Zik7DQotfQ0KLQ0KLXN0YXRpYyB2b2lkIERyYXdUZXh0U3RyaW5nKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIGNvbnN0IENQREZfUG9pbnQmIHB0LCBDUERGX0ZvbnQqIHBGb250LCBGWF9GTE9BVCBmRm9udFNpemUsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsDQotCQkJCQkgIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIsIEZYX0FSR0IgY3JUZXh0RmlsbCwgRlhfQVJHQiBjclRleHRTdHJva2UsIEZYX0lOVDMyIG5Ib3J6U2NhbGUpDQotew0KLQlGWF9GTE9BVCB4ID0gcHQueCwgeSA9IHB0Lnk7DQotCXBVc2VyMkRldmljZS0+VHJhbnNmb3JtKHgsIHkpOw0KLQ0KLQlpZiAocEZvbnQpDQotCXsNCi0JCWlmIChuSG9yelNjYWxlICE9IDEwMCkNCi0JCXsNCi0JCQlDUERGX01hdHJpeCBtdChuSG9yelNjYWxlLzEwMC4wZiwwLDAsMSwwLDApOw0KLQkJCW10LkNvbmNhdCgqcFVzZXIyRGV2aWNlKTsNCi0NCi0JCQlDUERGX1JlbmRlck9wdGlvbnMgcm87DQotCQkJcm8ubV9GbGFncyA9IFJFTkRFUl9DTEVBUlRZUEU7DQotCQkJcm8ubV9Db2xvck1vZGUgPSBSRU5ERVJfQ09MT1JfTk9STUFMOw0KLQ0KLQkJCWlmIChjclRleHRTdHJva2UgIT0gMCkNCi0JCQl7DQotCQkJCUNQREZfUG9pbnQgcHQxKDAsMCksIHB0MigxLDApOw0KLQkJCQlwVXNlcjJEZXZpY2UtPlRyYW5zZm9ybShwdDEueCwgcHQxLnkpOw0KLQkJCQlwVXNlcjJEZXZpY2UtPlRyYW5zZm9ybShwdDIueCwgcHQyLnkpOw0KLQkJCQlDRlhfR3JhcGhTdGF0ZURhdGEgZ3NkOw0KLQkJCQlnc2QubV9MaW5lV2lkdGggPSAoRlhfRkxPQVQpRlhTWVNfZmFicygocHQyLnggKyBwdDIueSkgLSAocHQxLnggKyBwdDEueSkpOw0KLQ0KLQkJCQlDUERGX1RleHRSZW5kZXJlcjo6RHJhd1RleHRTdHJpbmcocERldmljZSx4LCB5LCBwRm9udCwgZkZvbnRTaXplLCAmbXQsIHN0ciwgY3JUZXh0RmlsbCwgY3JUZXh0U3Ryb2tlLCAmZ3NkLCAmcm8pOw0KLQkJCX0NCi0JCQllbHNlDQotCQkJCUNQREZfVGV4dFJlbmRlcmVyOjpEcmF3VGV4dFN0cmluZyhwRGV2aWNlLHgsIHksIHBGb250LCBmRm9udFNpemUsICZtdCwgc3RyLCBjclRleHRGaWxsLCAwLCBOVUxMLCAmcm8pOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCUNQREZfUmVuZGVyT3B0aW9ucyBybzsNCi0JCQlyby5tX0ZsYWdzID0gUkVOREVSX0NMRUFSVFlQRTsNCi0JCQlyby5tX0NvbG9yTW9kZSA9IFJFTkRFUl9DT0xPUl9OT1JNQUw7DQotDQotCQkJaWYgKGNyVGV4dFN0cm9rZSAhPSAwKQ0KLQkJCXsNCi0JCQkJQ1BERl9Qb2ludCBwdDEoMCwwKSwgcHQyKDEsMCk7DQotCQkJCXBVc2VyMkRldmljZS0+VHJhbnNmb3JtKHB0MS54LCBwdDEueSk7DQotCQkJCXBVc2VyMkRldmljZS0+VHJhbnNmb3JtKHB0Mi54LCBwdDIueSk7DQotCQkJCUNGWF9HcmFwaFN0YXRlRGF0YSBnc2Q7DQotCQkJCWdzZC5tX0xpbmVXaWR0aCA9IChGWF9GTE9BVClGWFNZU19mYWJzKChwdDIueCArIHB0Mi55KSAtIChwdDEueCArIHB0MS55KSk7DQotDQotCQkJCUNQREZfVGV4dFJlbmRlcmVyOjpEcmF3VGV4dFN0cmluZyhwRGV2aWNlLHgsIHksIHBGb250LCBmRm9udFNpemUsIHBVc2VyMkRldmljZSwgc3RyLCBjclRleHRGaWxsLCBjclRleHRTdHJva2UsICZnc2QsICZybyk7DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQkJQ1BERl9UZXh0UmVuZGVyZXI6OkRyYXdUZXh0U3RyaW5nKHBEZXZpY2UseCwgeSwgcEZvbnQsIGZGb250U2l6ZSwgcFVzZXIyRGV2aWNlLCBzdHIsIGNyVGV4dEZpbGwsIDAsIE5VTEwsICZybyk7DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBJRlhfRWRpdDo6RHJhd1VuZGVybGluZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLCBJRlhfRWRpdCogcEVkaXQsIEZYX0NPTE9SUkVGIGNvbG9yLA0KLQkJCQkJCQkJY29uc3QgQ1BERl9SZWN0JiByY0NsaXAsIGNvbnN0IENQREZfUG9pbnQmIHB0T2Zmc2V0LCBjb25zdCBDUFZUX1dvcmRSYW5nZSogcFJhbmdlKQ0KLXsNCi0JcERldmljZS0+U2F2ZVN0YXRlKCk7DQotDQotCWlmICghcmNDbGlwLklzRW1wdHkoKSkNCi0Jew0KLQkJQ1BERl9SZWN0IHJjVGVtcCA9IHJjQ2xpcDsNCi0JCXBVc2VyMkRldmljZS0+VHJhbnNmb3JtUmVjdChyY1RlbXApOw0KLQkJRlhfUkVDVCByY0RldkNsaXA7DQotCQlyY0RldkNsaXAubGVmdCA9IChGWF9JTlQzMilyY1RlbXAubGVmdDsNCi0JCXJjRGV2Q2xpcC5yaWdodCA9IChGWF9JTlQzMilyY1RlbXAucmlnaHQ7DQotCQlyY0RldkNsaXAudG9wID0gKEZYX0lOVDMyKXJjVGVtcC50b3A7DQotCQlyY0RldkNsaXAuYm90dG9tID0gKEZYX0lOVDMyKXJjVGVtcC5ib3R0b207DQotCQlwRGV2aWNlLT5TZXRDbGlwX1JlY3QoJnJjRGV2Q2xpcCk7DQotCX0NCi0NCi0JaWYgKElGWF9FZGl0X0l0ZXJhdG9yKiBwSXRlcmF0b3IgPSBwRWRpdC0+R2V0SXRlcmF0b3IoKSkNCi0Jew0KLQkJaWYgKHBFZGl0LT5HZXRGb250TWFwKCkpDQotCQl7DQotCQkJaWYgKHBSYW5nZSkNCi0JCQkJcEl0ZXJhdG9yLT5TZXRBdChwUmFuZ2UtPkJlZ2luUG9zKTsNCi0JCQllbHNlDQotCQkJCXBJdGVyYXRvci0+U2V0QXQoMCk7DQotDQotCQkJd2hpbGUgKHBJdGVyYXRvci0+TmV4dFdvcmQoKSkNCi0JCQl7DQotCQkJCUNQVlRfV29yZFBsYWNlIHBsYWNlID0gcEl0ZXJhdG9yLT5HZXRBdCgpOw0KLQkJCQlpZiAocFJhbmdlICYmIHBsYWNlLldvcmRDbXAocFJhbmdlLT5FbmRQb3MpID4gMCkgYnJlYWs7DQotDQotCQkJCUNQVlRfV29yZCB3b3JkOwkJCQkNCi0JCQkJaWYgKHBJdGVyYXRvci0+R2V0V29yZCh3b3JkKSkNCi0JCQkJew0KLQkJCQkJQ0ZYX1BhdGhEYXRhIHBhdGhVbmRlcmxpbmU7DQotCQkJCQlDUERGX1JlY3QgcmNVbmRlcmxpbmUgPSBHZXRVbmRlckxpbmVSZWN0KHdvcmQpOw0KLQkJCQkJcmNVbmRlcmxpbmUubGVmdCArPSBwdE9mZnNldC54Ow0KLQkJCQkJcmNVbmRlcmxpbmUucmlnaHQgKz0gcHRPZmZzZXQueDsNCi0JCQkJCXJjVW5kZXJsaW5lLnRvcCArPSBwdE9mZnNldC55Ow0KLQkJCQkJcmNVbmRlcmxpbmUuYm90dG9tICs9IHB0T2Zmc2V0Lnk7DQotCQkJCQlwYXRoVW5kZXJsaW5lLkFwcGVuZFJlY3QocmNVbmRlcmxpbmUubGVmdCwgcmNVbmRlcmxpbmUuYm90dG9tLCByY1VuZGVybGluZS5yaWdodCwgcmNVbmRlcmxpbmUudG9wKTsNCi0NCi0JCQkJCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoVW5kZXJsaW5lLCBwVXNlcjJEZXZpY2UsIE5VTEwsIGNvbG9yLCAwLCBGWEZJTExfV0lORElORyk7DQotCQkJCX0NCi0JCQl9CQkJDQotCQl9DQotCX0NCi0JDQotCXBEZXZpY2UtPlJlc3RvcmVTdGF0ZSgpOw0KLX0NCi0NCi12b2lkIElGWF9FZGl0OjpEcmF3RWRpdChDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLCBJRlhfRWRpdCogcEVkaXQsIEZYX0NPTE9SUkVGIGNyVGV4dEZpbGwsIEZYX0NPTE9SUkVGIGNyVGV4dFN0cm9rZSwgDQotCQkJCQkJY29uc3QgQ1BERl9SZWN0JiByY0NsaXAsIGNvbnN0IENQREZfUG9pbnQmIHB0T2Zmc2V0LCBjb25zdCBDUFZUX1dvcmRSYW5nZSogcFJhbmdlLCBJRlhfU3lzdGVtSGFuZGxlciogcFN5c3RlbUhhbmRsZXIsIHZvaWQqIHBGRkxEYXRhKQ0KLXsNCi0JDQotCUZYX0JPT0wgYkNvbnRpbnVvdXMgPSBwRWRpdC0+R2V0Q2hhckFycmF5KCkgPT0gMDsNCi0JaWYgKHBFZGl0LT5HZXRDaGFyU3BhY2UoKSA+IDAuMGYpDQotCQliQ29udGludW91cyA9IEZBTFNFOw0KLQ0KLQlGWF9XT1JEIFN1YldvcmQgPSBwRWRpdC0+R2V0UGFzc3dvcmRDaGFyKCk7DQotCUZYX0ZMT0FUIGZGb250U2l6ZSA9IHBFZGl0LT5HZXRGb250U2l6ZSgpOw0KLQlDUFZUX1dvcmRSYW5nZSB3clNlbGVjdCA9IHBFZGl0LT5HZXRTZWxlY3RXb3JkUmFuZ2UoKTsNCi0JRlhfSU5UMzIgbkhvcnpTY2FsZSA9IHBFZGl0LT5HZXRIb3J6U2NhbGUoKTsNCi0NCi0JRlhfQ09MT1JSRUYgY3JDdXJGaWxsID0gY3JUZXh0RmlsbDsNCi0JRlhfQ09MT1JSRUYgY3JPbGRGaWxsID0gY3JDdXJGaWxsOw0KLQ0KLQlGWF9CT09MIGJTZWxlY3QgPSBGQUxTRTsNCi0JY29uc3QgRlhfQ09MT1JSRUYgY3JXaGl0ZSA9IEFyZ2JFbmNvZGUoMjU1LDI1NSwyNTUsMjU1KTsNCi0JY29uc3QgRlhfQ09MT1JSRUYgY3JTZWxCSyA9IEFyZ2JFbmNvZGUoMjU1LDAsNTEsMTEzKTsNCi0NCi0JQ0ZYX0J5dGVUZXh0QnVmIHNUZXh0QnVmOw0KLQlGWF9JTlQzMiBuRm9udEluZGV4ID0gLTE7DQotCUNQREZfUG9pbnQgcHRCVCgwLjBmLDAuMGYpOw0KLQ0KLQlwRGV2aWNlLT5TYXZlU3RhdGUoKTsNCi0NCi0JaWYgKCFyY0NsaXAuSXNFbXB0eSgpKQ0KLQl7DQotCQlDUERGX1JlY3QgcmNUZW1wID0gcmNDbGlwOw0KLQkJcFVzZXIyRGV2aWNlLT5UcmFuc2Zvcm1SZWN0KHJjVGVtcCk7DQotCQlGWF9SRUNUIHJjRGV2Q2xpcDsNCi0JCXJjRGV2Q2xpcC5sZWZ0ID0gKEZYX0lOVDMyKXJjVGVtcC5sZWZ0Ow0KLQkJcmNEZXZDbGlwLnJpZ2h0ID0gKEZYX0lOVDMyKXJjVGVtcC5yaWdodDsNCi0JCXJjRGV2Q2xpcC50b3AgPSAoRlhfSU5UMzIpcmNUZW1wLnRvcDsNCi0JCXJjRGV2Q2xpcC5ib3R0b20gPSAoRlhfSU5UMzIpcmNUZW1wLmJvdHRvbTsNCi0JCXBEZXZpY2UtPlNldENsaXBfUmVjdCgmcmNEZXZDbGlwKTsNCi0JfQ0KLQ0KLQlpZiAoSUZYX0VkaXRfSXRlcmF0b3IqIHBJdGVyYXRvciA9IHBFZGl0LT5HZXRJdGVyYXRvcigpKQ0KLQl7DQotCQlpZiAoSUZYX0VkaXRfRm9udE1hcCogcEZvbnRNYXAgPSBwRWRpdC0+R2V0Rm9udE1hcCgpKQ0KLQkJew0KLQkJCWlmIChwUmFuZ2UpDQotCQkJCXBJdGVyYXRvci0+U2V0QXQocFJhbmdlLT5CZWdpblBvcyk7DQotCQkJZWxzZQ0KLQkJCQlwSXRlcmF0b3ItPlNldEF0KDApOw0KLQ0KLQkJCUNQVlRfV29yZFBsYWNlIG9sZHBsYWNlOwkJCQ0KLQ0KLQkJCXdoaWxlIChwSXRlcmF0b3ItPk5leHRXb3JkKCkpDQotCQkJew0KLQkJCQlDUFZUX1dvcmRQbGFjZSBwbGFjZSA9IHBJdGVyYXRvci0+R2V0QXQoKTsNCi0JCQkJaWYgKHBSYW5nZSAmJiBwbGFjZS5Xb3JkQ21wKHBSYW5nZS0+RW5kUG9zKSA+IDApIGJyZWFrOw0KLQ0KLQkJCQlpZiAod3JTZWxlY3QuSXNFeGlzdCgpKQ0KLQkJCQl7DQotCQkJCQliU2VsZWN0ID0gcGxhY2UuV29yZENtcCh3clNlbGVjdC5CZWdpblBvcykgPiAwICYmIHBsYWNlLldvcmRDbXAod3JTZWxlY3QuRW5kUG9zKSA8PSAwOw0KLQkJCQkJaWYgKGJTZWxlY3QpDQotCQkJCQl7CQkJCQkJDQotCQkJCQkJY3JDdXJGaWxsID0gY3JXaGl0ZTsJCQkJCQkNCi0JCQkJCX0NCi0JCQkJCWVsc2UNCi0JCQkJCXsNCi0JCQkJCQljckN1ckZpbGwgPSBjclRleHRGaWxsOw0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJCWlmKHBTeXN0ZW1IYW5kbGVyICYmIHBTeXN0ZW1IYW5kbGVyLT5Jc1NlbGVjdGlvbkltcGxlbWVudGVkKCkpCQ0KLQkJCQl7DQotCQkJCQljckN1ckZpbGwgPSBjclRleHRGaWxsOw0KLSAJCQkJCWNyT2xkRmlsbCA9IGNyQ3VyRmlsbDsNCi0JCQkJfQ0KLQkJCQlDUFZUX1dvcmQgd29yZDsJCQkJDQotCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpDQotCQkJCXsNCi0NCi0JCQkJCWlmIChiU2VsZWN0KQ0KLQkJCQkJew0KLQkJCQkJCQ0KLQkJCQkJCUNQVlRfTGluZSBsaW5lOw0KLQkJCQkJCXBJdGVyYXRvci0+R2V0TGluZShsaW5lKTsNCi0NCi0JCQkJCQlpZihwU3lzdGVtSGFuZGxlciAmJiBwU3lzdGVtSGFuZGxlci0+SXNTZWxlY3Rpb25JbXBsZW1lbnRlZCgpKQ0KLQkJCQkJCXsNCi0JCQkJCQkJQ1BERl9SZWN0IHJjKHdvcmQucHRXb3JkLngsbGluZS5wdExpbmUueSArIGxpbmUuZkxpbmVEZXNjZW50LA0KLQkJCQkJCQkJd29yZC5wdFdvcmQueCt3b3JkLmZXaWR0aCxsaW5lLnB0TGluZS55ICsgbGluZS5mTGluZUFzY2VudCk7DQotCQkJCQkJCXJjLkludGVyc2VjdChyY0NsaXApOw0KLQkJCQkJCQkvL0NGWF9FZGl0KiBwRXQgPSAoQ0ZYX0VkaXQqKXBFZGl0Ow0KLQkJCQkJCQkvL0NQREZfUmVjdCByY0VkaXQgPSBwRXQtPlZUVG9FZGl0KHJjKTsNCi0JCQkJCQkJcFN5c3RlbUhhbmRsZXItPk91dHB1dFNlbGVjdGVkUmVjdChwRkZMRGF0YSxyYyk7DQotCQkJCQkJfQ0KLQkJCQkJCWVsc2UNCi0JCQkJCQl7CQ0KLSAJCQkJCQkJQ0ZYX1BhdGhEYXRhIHBhdGhTZWxCSzsNCi0gCQkJCQkJCXBhdGhTZWxCSy5BcHBlbmRSZWN0KHdvcmQucHRXb3JkLngsbGluZS5wdExpbmUueSArIGxpbmUuZkxpbmVEZXNjZW50LA0KLSAJCQkJCQkJCXdvcmQucHRXb3JkLngrd29yZC5mV2lkdGgsbGluZS5wdExpbmUueSArIGxpbmUuZkxpbmVBc2NlbnQpOw0KLSAJCQkJCQkJDQotIAkJCQkJCQlwRGV2aWNlLT5EcmF3UGF0aCgmcGF0aFNlbEJLLCBwVXNlcjJEZXZpY2UsIE5VTEwsIGNyU2VsQkssIDAsIEZYRklMTF9XSU5ESU5HKTsJDQotCQkJCQkJfQ0KLQkJCQkJfQ0KLQ0KLQkJCQkJaWYgKGJDb250aW51b3VzKQ0KLQkJCQkJew0KLQkJCQkJCWlmIChwbGFjZS5MaW5lQ21wKG9sZHBsYWNlKSAhPSAwIHx8IHdvcmQubkZvbnRJbmRleCAhPSBuRm9udEluZGV4IHx8IA0KLQkJCQkJCQljck9sZEZpbGwgIT0gY3JDdXJGaWxsKQ0KLQkJCQkJCXsNCi0JCQkJCQkJaWYgKHNUZXh0QnVmLkdldExlbmd0aCgpID4gMCkNCi0JCQkJCQkJewkJCQkJCQkJDQotCQkJCQkJCQlEcmF3VGV4dFN0cmluZyhwRGV2aWNlLCBDUERGX1BvaW50KHB0QlQueCtwdE9mZnNldC54LCBwdEJULnkrcHRPZmZzZXQueSksIHBGb250TWFwLT5HZXRQREZGb250KG5Gb250SW5kZXgpLA0KLQkJCQkJCQkJCWZGb250U2l6ZSwgcFVzZXIyRGV2aWNlLCBzVGV4dEJ1Zi5HZXRCeXRlU3RyaW5nKCksIGNyT2xkRmlsbCwgY3JUZXh0U3Ryb2tlLCBuSG9yelNjYWxlKTsNCi0NCi0JCQkJCQkJCXNUZXh0QnVmLkNsZWFyKCk7DQotCQkJCQkJCX0NCi0JCQkJCQkJbkZvbnRJbmRleCA9IHdvcmQubkZvbnRJbmRleDsNCi0JCQkJCQkJcHRCVCA9IHdvcmQucHRXb3JkOw0KLQkJCQkJCQljck9sZEZpbGwgPSBjckN1ckZpbGw7DQotCQkJCQkJfQ0KLQ0KLQkJCQkJCXNUZXh0QnVmIDw8IEdldFBERldvcmRTdHJpbmcocEZvbnRNYXAsIHdvcmQubkZvbnRJbmRleCwgd29yZC5Xb3JkLCBTdWJXb3JkKTsJCQkJCQkNCi0JCQkJCX0NCi0JCQkJCWVsc2UNCi0JCQkJCXsNCi0JCQkJCQlEcmF3VGV4dFN0cmluZyhwRGV2aWNlLENQREZfUG9pbnQod29yZC5wdFdvcmQueCtwdE9mZnNldC54LCB3b3JkLnB0V29yZC55K3B0T2Zmc2V0LnkpLCBwRm9udE1hcC0+R2V0UERGRm9udCh3b3JkLm5Gb250SW5kZXgpLA0KLQkJCQkJCQlmRm9udFNpemUsIHBVc2VyMkRldmljZSwgR2V0UERGV29yZFN0cmluZyhwRm9udE1hcCwgd29yZC5uRm9udEluZGV4LCB3b3JkLldvcmQsIFN1YldvcmQpLCBjckN1ckZpbGwsIGNyVGV4dFN0cm9rZSwgbkhvcnpTY2FsZSk7DQotDQotCQkJCQl9DQotCQkJCQlvbGRwbGFjZSA9IHBsYWNlOw0KLQ0KLQ0KLQkJCQl9DQotCQkJfQ0KLQ0KLQkJCWlmIChzVGV4dEJ1Zi5HZXRMZW5ndGgoKSA+IDApDQotCQkJewkJCQkNCi0JCQkJRHJhd1RleHRTdHJpbmcocERldmljZSwgQ1BERl9Qb2ludChwdEJULngrcHRPZmZzZXQueCwgcHRCVC55K3B0T2Zmc2V0LnkpLCBwRm9udE1hcC0+R2V0UERGRm9udChuRm9udEluZGV4KSwNCi0JCQkJCWZGb250U2l6ZSwgcFVzZXIyRGV2aWNlLCBzVGV4dEJ1Zi5HZXRCeXRlU3RyaW5nKCksIGNyT2xkRmlsbCwgY3JUZXh0U3Ryb2tlLCBuSG9yelNjYWxlKTsNCi0JCQl9CQkJDQotCQl9DQotCX0NCi0JDQotCXBEZXZpY2UtPlJlc3RvcmVTdGF0ZSgpOw0KLX0NCi0NCi12b2lkIElGWF9FZGl0OjpEcmF3UmljaEVkaXQoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwgSUZYX0VkaXQqIHBFZGl0LCAgDQotCQkJCQkJY29uc3QgQ1BERl9SZWN0JiByY0NsaXAsIGNvbnN0IENQREZfUG9pbnQmIHB0T2Zmc2V0LCBjb25zdCBDUFZUX1dvcmRSYW5nZSogcFJhbmdlKQ0KLXsNCi0JLy9GWF9GTE9BVCBmRm9udFNpemUgPSBwRWRpdC0+R2V0Rm9udFNpemUoKTsNCi0JQ1BWVF9Xb3JkUmFuZ2Ugd3JTZWxlY3QgPSBwRWRpdC0+R2V0U2VsZWN0V29yZFJhbmdlKCk7DQotDQotCUZYX0NPTE9SUkVGIGNyQ3VyVGV4dCA9IEFyZ2JFbmNvZGUoMjU1LCAwLDAsMCk7DQotCUZYX0NPTE9SUkVGIGNyT2xkID0gY3JDdXJUZXh0Ow0KLQlGWF9CT09MIGJTZWxlY3QgPSBGQUxTRTsNCi0JY29uc3QgRlhfQ09MT1JSRUYgY3JXaGl0ZSA9IEFyZ2JFbmNvZGUoMjU1LDI1NSwyNTUsMjU1KTsNCi0JY29uc3QgRlhfQ09MT1JSRUYgY3JTZWxCSyA9IEFyZ2JFbmNvZGUoMjU1LDAsNTEsMTEzKTsNCi0NCi0JQ0ZYX0J5dGVUZXh0QnVmIHNUZXh0QnVmOw0KLQlDUFZUX1dvcmRQcm9wcyB3cDsNCi0JQ1BERl9Qb2ludCBwdEJUKDAuMGYsMC4wZik7DQotDQotCXBEZXZpY2UtPlNhdmVTdGF0ZSgpOw0KLQ0KLQlpZiAoIXJjQ2xpcC5Jc0VtcHR5KCkpDQotCXsNCi0JCUNQREZfUmVjdCByY1RlbXAgPSByY0NsaXA7DQotCQlwVXNlcjJEZXZpY2UtPlRyYW5zZm9ybVJlY3QocmNUZW1wKTsNCi0JCUZYX1JFQ1QgcmNEZXZDbGlwOw0KLQkJcmNEZXZDbGlwLmxlZnQgPSAoRlhfSU5UMzIpcmNUZW1wLmxlZnQ7DQotCQlyY0RldkNsaXAucmlnaHQgPSAoRlhfSU5UMzIpcmNUZW1wLnJpZ2h0Ow0KLQkJcmNEZXZDbGlwLnRvcCA9IChGWF9JTlQzMilyY1RlbXAudG9wOw0KLQkJcmNEZXZDbGlwLmJvdHRvbSA9IChGWF9JTlQzMilyY1RlbXAuYm90dG9tOw0KLQkJcERldmljZS0+U2V0Q2xpcF9SZWN0KCZyY0RldkNsaXApOw0KLQl9DQotDQotCWlmIChJRlhfRWRpdF9JdGVyYXRvciogcEl0ZXJhdG9yID0gcEVkaXQtPkdldEl0ZXJhdG9yKCkpDQotCXsNCi0JCWlmIChJRlhfRWRpdF9Gb250TWFwKiBwRm9udE1hcCA9IHBFZGl0LT5HZXRGb250TWFwKCkpDQotCQl7DQotCQkJaWYgKHBSYW5nZSkNCi0JCQkJcEl0ZXJhdG9yLT5TZXRBdChwUmFuZ2UtPkJlZ2luUG9zKTsNCi0JCQllbHNlDQotCQkJCXBJdGVyYXRvci0+U2V0QXQoMCk7DQotDQotCQkJQ1BWVF9Xb3JkUGxhY2Ugb2xkcGxhY2U7CQkJDQotDQotCQkJd2hpbGUgKHBJdGVyYXRvci0+TmV4dFdvcmQoKSkNCi0JCQl7DQotCQkJCUNQVlRfV29yZFBsYWNlIHBsYWNlID0gcEl0ZXJhdG9yLT5HZXRBdCgpOw0KLQkJCQlpZiAocFJhbmdlICYmIHBsYWNlLldvcmRDbXAocFJhbmdlLT5FbmRQb3MpID4gMCkgYnJlYWs7DQotCQkJCQ0KLQkJCQlDUFZUX1dvcmQgd29yZDsJCQkJDQotCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpDQotCQkJCXsNCi0JCQkJCXdvcmQuV29yZFByb3BzLmZGb250U2l6ZSA9IHdvcmQuZkZvbnRTaXplOw0KLQ0KLQkJCQkJY3JDdXJUZXh0ID0gQXJnYkVuY29kZSgyNTUsd29yZC5Xb3JkUHJvcHMuZHdXb3JkQ29sb3IpOw0KLQ0KLQkJCQkJaWYgKHdyU2VsZWN0LklzRXhpc3QoKSkNCi0JCQkJCXsNCi0JCQkJCQliU2VsZWN0ID0gcGxhY2UuV29yZENtcCh3clNlbGVjdC5CZWdpblBvcykgPiAwICYmIHBsYWNlLldvcmRDbXAod3JTZWxlY3QuRW5kUG9zKSA8PSAwOw0KLQkJCQkJCWlmIChiU2VsZWN0KQ0KLQkJCQkJCXsJCQkJCQkNCi0JCQkJCQkJY3JDdXJUZXh0ID0gY3JXaGl0ZTsNCi0JCQkJCQl9DQotCQkJCQl9DQotDQotCQkJCQlpZiAoYlNlbGVjdCkNCi0JCQkJCXsNCi0JCQkJCQlDUFZUX0xpbmUgbGluZTsNCi0JCQkJCQlwSXRlcmF0b3ItPkdldExpbmUobGluZSk7DQotDQotCQkJCQkJQ0ZYX1BhdGhEYXRhIHBhdGhTZWxCSzsNCi0JCQkJCQlwYXRoU2VsQksuQXBwZW5kUmVjdCh3b3JkLnB0V29yZC54CQkrIHB0T2Zmc2V0LngsDQotCQkJCQkJCWxpbmUucHRMaW5lLnkgKyBsaW5lLmZMaW5lRGVzY2VudAkrIHB0T2Zmc2V0LnksDQotCQkJCQkJCXdvcmQucHRXb3JkLngrd29yZC5mV2lkdGgJCQkrIHB0T2Zmc2V0LngsDQotCQkJCQkJCWxpbmUucHRMaW5lLnkgKyBsaW5lLmZMaW5lQXNjZW50CSsgcHRPZmZzZXQueSk7DQotDQotCQkJCQkJcERldmljZS0+RHJhd1BhdGgoJnBhdGhTZWxCSywgcFVzZXIyRGV2aWNlLCBOVUxMLCBjclNlbEJLLCAwLCBGWEZJTExfV0lORElORyk7CQkJCQkJCQkJCQkJDQotCQkJCQl9DQotDQotCQkJCQlpZiAocGxhY2UuTGluZUNtcChvbGRwbGFjZSkgIT0gMCB8fCB3b3JkLldvcmRQcm9wcy5mQ2hhclNwYWNlID4gMC4wZiB8fCB3b3JkLldvcmRQcm9wcy5uSG9yelNjYWxlICE9IDEwMCB8fCANCi0JCQkJCQlGWFNZU19tZW1jbXAoJndvcmQuV29yZFByb3BzLCAmd3AsIHNpemVvZihDUFZUX1dvcmRQcm9wcykpICE9IDAgfHwgDQotCQkJCQkJY3JPbGQgIT0gY3JDdXJUZXh0KQ0KLQkJCQkJew0KLQkJCQkJCWlmIChzVGV4dEJ1Zi5HZXRMZW5ndGgoKSA+IDApDQotCQkJCQkJewkJCQkJCQkJDQotCQkJCQkJCURyYXdUZXh0U3RyaW5nKHBEZXZpY2UsIENQREZfUG9pbnQocHRCVC54K3B0T2Zmc2V0LngsIHB0QlQueStwdE9mZnNldC55KSwgcEZvbnRNYXAtPkdldFBERkZvbnQod3AubkZvbnRJbmRleCksDQotCQkJCQkJCQl3cC5mRm9udFNpemUsIHBVc2VyMkRldmljZSwgc1RleHRCdWYuR2V0Qnl0ZVN0cmluZygpLCBjck9sZCwgMCwgd3AubkhvcnpTY2FsZSk7DQotDQotCQkJCQkJCXNUZXh0QnVmLkNsZWFyKCk7DQotCQkJCQkJfQ0KLQkJCQkJCXdwID0gd29yZC5Xb3JkUHJvcHM7DQotCQkJCQkJcHRCVCA9IHdvcmQucHRXb3JkOw0KLQkJCQkJCWNyT2xkID0gY3JDdXJUZXh0Ow0KLQkJCQkJfQ0KLQ0KLQkJCQkJc1RleHRCdWYgPDwgR2V0UERGV29yZFN0cmluZyhwRm9udE1hcCwgd29yZC5Xb3JkUHJvcHMubkZvbnRJbmRleCwgd29yZC5Xb3JkLCAwKTsJDQotCQkJCQkNCi0JCQkJCWlmICh3b3JkLldvcmRQcm9wcy5uV29yZFN0eWxlICYgUFZUV09SRF9TVFlMRV9VTkRFUkxJTkUpDQotCQkJCQl7DQotCQkJCQkJQ0ZYX1BhdGhEYXRhIHBhdGhVbmRlcmxpbmU7DQotCQkJCQkJQ1BERl9SZWN0IHJjVW5kZXJsaW5lID0gR2V0VW5kZXJMaW5lUmVjdCh3b3JkKTsNCi0JCQkJCQlwYXRoVW5kZXJsaW5lLkFwcGVuZFJlY3QocmNVbmRlcmxpbmUubGVmdCwgcmNVbmRlcmxpbmUuYm90dG9tLCByY1VuZGVybGluZS5yaWdodCwgcmNVbmRlcmxpbmUudG9wKTsNCi0NCi0JCQkJCQlwRGV2aWNlLT5EcmF3UGF0aCgmcGF0aFVuZGVybGluZSwgcFVzZXIyRGV2aWNlLCBOVUxMLCBjckN1clRleHQsIDAsIEZYRklMTF9XSU5ESU5HKTsJDQotCQkJCQl9DQotDQotCQkJCQlpZiAod29yZC5Xb3JkUHJvcHMubldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfQ1JPU1NPVVQpDQotCQkJCQl7DQotCQkJCQkJQ0ZYX1BhdGhEYXRhIHBhdGhDcm9zc291dDsNCi0JCQkJCQlDUERGX1JlY3QgcmNDcm9zc291dCA9IEdldENyb3Nzb3V0UmVjdCh3b3JkKTsNCi0JCQkJCQlwYXRoQ3Jvc3NvdXQuQXBwZW5kUmVjdChyY0Nyb3Nzb3V0LmxlZnQsIHJjQ3Jvc3NvdXQuYm90dG9tLCByY0Nyb3Nzb3V0LnJpZ2h0LCByY0Nyb3Nzb3V0LnRvcCk7DQotDQotCQkJCQkJcERldmljZS0+RHJhd1BhdGgoJnBhdGhDcm9zc291dCwgcFVzZXIyRGV2aWNlLCBOVUxMLCBjckN1clRleHQsIDAsIEZYRklMTF9XSU5ESU5HKTsNCi0JCQkJCX0NCi0NCi0JCQkJCW9sZHBsYWNlID0gcGxhY2U7CQkJCQkNCi0JCQkJfQ0KLQkJCX0NCi0NCi0JCQlpZiAoc1RleHRCdWYuR2V0TGVuZ3RoKCkgPiAwKQ0KLQkJCXsJCQkJDQotCQkJCURyYXdUZXh0U3RyaW5nKHBEZXZpY2UsIENQREZfUG9pbnQocHRCVC54K3B0T2Zmc2V0LngsIHB0QlQueStwdE9mZnNldC55KSwgcEZvbnRNYXAtPkdldFBERkZvbnQod3AubkZvbnRJbmRleCksDQotCQkJCQl3cC5mRm9udFNpemUsIHBVc2VyMkRldmljZSwgc1RleHRCdWYuR2V0Qnl0ZVN0cmluZygpLCBjck9sZCwgMCwgd3AubkhvcnpTY2FsZSk7DQotCQkJfQ0KLQkJfQ0KLQl9DQotCQ0KLQlwRGV2aWNlLT5SZXN0b3JlU3RhdGUoKTsNCi19DQotDQotc3RhdGljIHZvaWQgQWRkTGluZVRvUGFnZU9iamVjdHMoQ1BERl9QYWdlT2JqZWN0cyogcFBhZ2VPYmpzLCBGWF9DT0xPUlJFRiBjclN0cm9rZSwgDQotCQkJCQkJCQkgY29uc3QgQ1BERl9Qb2ludCYgcHQxLCBjb25zdCBDUERGX1BvaW50JiBwdDIpDQotew0KLQlDUERGX1BhdGhPYmplY3QqIHBQYXRoT2JqID0gbmV3IENQREZfUGF0aE9iamVjdDsNCi0JQ1BERl9QYXRoRGF0YSogcFBhdGhEYXRhID0gcFBhdGhPYmotPm1fUGF0aC5HZXRNb2RpZnkoKTsNCi0NCi0JcFBhdGhEYXRhLT5TZXRQb2ludENvdW50KDIpOw0KLQlwUGF0aERhdGEtPlNldFBvaW50KDAsIHB0MS54LCBwdDEueSwgRlhQVF9NT1ZFVE8pOw0KLQlwUGF0aERhdGEtPlNldFBvaW50KDEsIHB0Mi54LCBwdDIueSwgRlhQVF9MSU5FVE8pOw0KLQ0KLQlGWF9GTE9BVCByZ2JbM107DQotCXJnYlswXSA9IEZYQVJHQl9SKGNyU3Ryb2tlKSAvIDI1NS4wZjsNCi0JcmdiWzFdID0gRlhBUkdCX0coY3JTdHJva2UpIC8gMjU1LjBmOw0KLQlyZ2JbMl0gPSBGWEFSR0JfQihjclN0cm9rZSkgLyAyNTUuMGY7DQotCXBQYXRoT2JqLT5tX0NvbG9yU3RhdGUuU2V0U3Ryb2tlQ29sb3IoQ1BERl9Db2xvclNwYWNlOjpHZXRTdG9ja0NTKFBERkNTX0RFVklDRVJHQiksIHJnYiwgMyk7DQotDQotCUNGWF9HcmFwaFN0YXRlRGF0YSogcERhdGEgPSBwUGF0aE9iai0+bV9HcmFwaFN0YXRlLkdldE1vZGlmeSgpOw0KLQlwRGF0YS0+bV9MaW5lV2lkdGggPSAxOw0KLQ0KLQlwUGFnZU9ianMtPkluc2VydE9iamVjdChwUGFnZU9ianMtPkdldExhc3RPYmplY3RQb3NpdGlvbigpLHBQYXRoT2JqKTsNCi19DQotDQotc3RhdGljIHZvaWQgQWRkUmVjdFRvUGFnZU9iamVjdHMoQ1BERl9QYWdlT2JqZWN0cyogcFBhZ2VPYmpzLCBGWF9DT0xPUlJFRiBjckZpbGwsIGNvbnN0IENQREZfUmVjdCYgcmNGaWxsKQ0KLXsNCi0JQ1BERl9QYXRoT2JqZWN0KiBwUGF0aE9iaiA9IG5ldyBDUERGX1BhdGhPYmplY3Q7DQotCUNQREZfUGF0aERhdGEqIHBQYXRoRGF0YSA9IHBQYXRoT2JqLT5tX1BhdGguR2V0TW9kaWZ5KCk7DQotCXBQYXRoRGF0YS0+QXBwZW5kUmVjdChyY0ZpbGwubGVmdCxyY0ZpbGwuYm90dG9tLHJjRmlsbC5yaWdodCxyY0ZpbGwudG9wKTsJDQotCQ0KLQlGWF9GTE9BVCByZ2JbM107DQotCXJnYlswXSA9IEZYQVJHQl9SKGNyRmlsbCkgLyAyNTUuMGYgOw0KLQlyZ2JbMV0gPSBGWEFSR0JfRyhjckZpbGwpIC8gMjU1LjBmOw0KLQlyZ2JbMl0gPSBGWEFSR0JfQihjckZpbGwpIC8gMjU1LjBmOw0KLQlwUGF0aE9iai0+bV9Db2xvclN0YXRlLlNldEZpbGxDb2xvcihDUERGX0NvbG9yU3BhY2U6OkdldFN0b2NrQ1MoUERGQ1NfREVWSUNFUkdCKSwgcmdiLCAzKTsNCi0NCi0JcFBhdGhPYmotPm1fRmlsbFR5cGUgPSBGWEZJTExfQUxURVJOQVRFOw0KLQlwUGF0aE9iai0+bV9iU3Ryb2tlID0gRkFMU0U7DQotDQotCXBQYWdlT2Jqcy0+SW5zZXJ0T2JqZWN0KHBQYWdlT2Jqcy0+R2V0TGFzdE9iamVjdFBvc2l0aW9uKCkscFBhdGhPYmopOw0KLX0NCi0NCi1zdGF0aWMgQ1BERl9UZXh0T2JqZWN0KiBBZGRUZXh0T2JqVG9QYWdlT2JqZWN0cyhDUERGX1BhZ2VPYmplY3RzKiBwUGFnZU9ianMsIEZYX0NPTE9SUkVGIGNyVGV4dCwgDQotCQkJCQkJCSBDUERGX0ZvbnQqIHBGb250LCBGWF9GTE9BVCBmRm9udFNpemUsIEZYX0ZMT0FUIGZDaGFyU3BhY2UsIEZYX0lOVDMyIG5Ib3J6U2NhbGUsIA0KLQkJCQkJCQkgY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiB0ZXh0KQ0KLXsNCi0JQ1BERl9UZXh0T2JqZWN0KiBwVHh0T2JqID0gbmV3IENQREZfVGV4dE9iamVjdDsNCi0JCQkNCi0JQ1BERl9UZXh0U3RhdGVEYXRhKiBwVGV4dFN0YXRlRGF0YSA9IHBUeHRPYmotPm1fVGV4dFN0YXRlLkdldE1vZGlmeSgpOw0KLQlwVGV4dFN0YXRlRGF0YS0+bV9wRm9udCA9IHBGb250Ow0KLQlwVGV4dFN0YXRlRGF0YS0+bV9Gb250U2l6ZSA9IGZGb250U2l6ZTsNCi0JcFRleHRTdGF0ZURhdGEtPm1fQ2hhclNwYWNlID0gZkNoYXJTcGFjZTsNCi0JcFRleHRTdGF0ZURhdGEtPm1fV29yZFNwYWNlID0gMDsNCi0JcFRleHRTdGF0ZURhdGEtPm1fVGV4dE1vZGUgID0gMDsNCi0JcFRleHRTdGF0ZURhdGEtPm1fTWF0cml4WzBdID0gbkhvcnpTY2FsZSAvIDEwMC4wZjsNCi0JcFRleHRTdGF0ZURhdGEtPm1fTWF0cml4WzFdID0gMDsNCi0JcFRleHRTdGF0ZURhdGEtPm1fTWF0cml4WzJdID0gMDsNCi0JcFRleHRTdGF0ZURhdGEtPm1fTWF0cml4WzNdID0gMTsNCi0NCi0JRlhfRkxPQVQgcmdiWzNdOw0KLQlyZ2JbMF0gPSBGWEFSR0JfUihjclRleHQpIC8gMjU1LjBmIDsNCi0JcmdiWzFdID0gRlhBUkdCX0coY3JUZXh0KSAvIDI1NS4wZjsNCi0JcmdiWzJdID0gRlhBUkdCX0IoY3JUZXh0KSAvIDI1NS4wZjsNCi0JcFR4dE9iai0+bV9Db2xvclN0YXRlLlNldEZpbGxDb2xvcihDUERGX0NvbG9yU3BhY2U6OkdldFN0b2NrQ1MoUERGQ1NfREVWSUNFUkdCKSxyZ2IsIDMpOw0KLQlwVHh0T2JqLT5tX0NvbG9yU3RhdGUuU2V0U3Ryb2tlQ29sb3IoQ1BERl9Db2xvclNwYWNlOjpHZXRTdG9ja0NTKFBERkNTX0RFVklDRVJHQikscmdiLCAzKTsNCi0NCi0JcFR4dE9iai0+U2V0UG9zaXRpb24ocG9pbnQueCxwb2ludC55KTsNCi0JcFR4dE9iai0+U2V0VGV4dCh0ZXh0KTsJDQotDQotCXBQYWdlT2Jqcy0+SW5zZXJ0T2JqZWN0KHBQYWdlT2Jqcy0+R2V0TGFzdE9iamVjdFBvc2l0aW9uKCkscFR4dE9iaik7DQotDQotCXJldHVybiBwVHh0T2JqOw0KLX0NCi0NCi0vKg0KLUxpc3Qgb2YgY3VycmVudGx5IHN1cHBvcnRlZCBzdGFuZGFyZCBmb250czoNCi1Db3VyaWVyLCBDb3VyaWVyLUJvbGQsIENvdXJpZXItQm9sZE9ibGlxdWUsIENvdXJpZXItT2JsaXF1ZQ0KLUhlbHZldGljYSwgSGVsdmV0aWNhLUJvbGQsIEhlbHZldGljYS1Cb2xkT2JsaXF1ZSwgSGVsdmV0aWNhLU9ibGlxdWUNCi1UaW1lcy1Sb21hbiwgVGltZXMtQm9sZCwgVGltZXMtSXRhbGljLCBUaW1lcy1Cb2xkSXRhbGljDQotU3ltYm9sLCBaYXBmRGluZ2JhdHMNCi0qLw0KLQ0KLWNvbnN0IGNoYXIqIGdfc0ZYRURJVFN0YW5kYXJkRm9udE5hbWVbXSA9IHsiQ291cmllciIsICJDb3VyaWVyLUJvbGQiLCAiQ291cmllci1Cb2xkT2JsaXF1ZSIsICJDb3VyaWVyLU9ibGlxdWUiLA0KLQkiSGVsdmV0aWNhIiwgIkhlbHZldGljYS1Cb2xkIiwgIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsICJIZWx2ZXRpY2EtT2JsaXF1ZSIsDQotCSJUaW1lcy1Sb21hbiIsICJUaW1lcy1Cb2xkIiwgIlRpbWVzLUl0YWxpYyIsICJUaW1lcy1Cb2xkSXRhbGljIiwNCi0JIlN5bWJvbCIsICJaYXBmRGluZ2JhdHMifTsNCi0NCi1zdGF0aWMgRlhfQk9PTCBGWF9FRElUX0lzU3RhbmRhcmRGb250KGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzRm9udE5hbWUpDQotew0KLQlmb3IgKEZYX0lOVDMyIGk9MDsgaTwxNDsgaSsrKQ0KLQl7DQotCQlpZiAoc0ZvbnROYW1lID09IGdfc0ZYRURJVFN0YW5kYXJkRm9udE5hbWVbaV0pDQotCQkJcmV0dXJuIFRSVUU7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi12b2lkIElGWF9FZGl0OjpHZW5lcmF0ZVBhZ2VPYmplY3RzKENQREZfUGFnZU9iamVjdHMqIHBQYWdlT2JqZWN0cywgSUZYX0VkaXQqIHBFZGl0LA0KLQkJCQkJCQkJICAgY29uc3QgQ1BERl9Qb2ludCYgcHRPZmZzZXQsIGNvbnN0IENQVlRfV29yZFJhbmdlKiBwUmFuZ2UsIEZYX0NPTE9SUkVGIGNyVGV4dCwgQ0ZYX0FycmF5VGVtcGxhdGU8Q1BERl9UZXh0T2JqZWN0Kj4mIE9iakFycmF5KQ0KLXsNCi0JRlhfRkxPQVQgZkZvbnRTaXplID0gcEVkaXQtPkdldEZvbnRTaXplKCk7DQotDQotCUZYX0lOVDMyIG5PbGRGb250SW5kZXggPSAtMTsNCi0NCi0JQ0ZYX0J5dGVUZXh0QnVmIHNUZXh0QnVmOw0KLQlDUERGX1BvaW50IHB0QlQoMC4wZiwwLjBmKTsNCi0NCi0JT2JqQXJyYXkuUmVtb3ZlQWxsKCk7DQotDQotCWlmIChJRlhfRWRpdF9JdGVyYXRvciogcEl0ZXJhdG9yID0gcEVkaXQtPkdldEl0ZXJhdG9yKCkpDQotCXsNCi0JCWlmIChJRlhfRWRpdF9Gb250TWFwKiBwRm9udE1hcCA9IHBFZGl0LT5HZXRGb250TWFwKCkpDQotCQl7DQotCQkJaWYgKHBSYW5nZSkNCi0JCQkJcEl0ZXJhdG9yLT5TZXRBdChwUmFuZ2UtPkJlZ2luUG9zKTsNCi0JCQllbHNlDQotCQkJCXBJdGVyYXRvci0+U2V0QXQoMCk7DQotDQotCQkJQ1BWVF9Xb3JkUGxhY2Ugb2xkcGxhY2U7CQkJDQotDQotCQkJd2hpbGUgKHBJdGVyYXRvci0+TmV4dFdvcmQoKSkNCi0JCQl7DQotCQkJCUNQVlRfV29yZFBsYWNlIHBsYWNlID0gcEl0ZXJhdG9yLT5HZXRBdCgpOw0KLQkJCQlpZiAocFJhbmdlICYmIHBsYWNlLldvcmRDbXAocFJhbmdlLT5FbmRQb3MpID4gMCkgYnJlYWs7DQotCQkJCQ0KLQkJCQlDUFZUX1dvcmQgd29yZDsJCQkJDQotCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpDQotCQkJCXsNCi0JCQkJCWlmIChwbGFjZS5MaW5lQ21wKG9sZHBsYWNlKSAhPSAwIHx8IG5PbGRGb250SW5kZXggIT0gd29yZC5uRm9udEluZGV4KQ0KLQkJCQkJew0KLQkJCQkJCWlmIChzVGV4dEJ1Zi5HZXRMZW5ndGgoKSA+IDApDQotCQkJCQkJew0KLQkJCQkJCQlPYmpBcnJheS5BZGQoQWRkVGV4dE9ialRvUGFnZU9iamVjdHMocFBhZ2VPYmplY3RzLCBjclRleHQsIHBGb250TWFwLT5HZXRQREZGb250KG5PbGRGb250SW5kZXgpLCBmRm9udFNpemUsIDAuMGYsIDEwMCwNCi0JCQkJCQkJCUNQREZfUG9pbnQocHRCVC54K3B0T2Zmc2V0LngsIHB0QlQueStwdE9mZnNldC55KSwgc1RleHRCdWYuR2V0Qnl0ZVN0cmluZygpKSk7DQotDQotCQkJCQkJCXNUZXh0QnVmLkNsZWFyKCk7DQotCQkJCQkJfQ0KLQ0KLQkJCQkJCXB0QlQgPSB3b3JkLnB0V29yZDsNCi0JCQkJCQluT2xkRm9udEluZGV4ID0gd29yZC5uRm9udEluZGV4Ow0KLQkJCQkJfQ0KLQ0KLQkJCQkJc1RleHRCdWYgPDwgR2V0UERGV29yZFN0cmluZyhwRm9udE1hcCwgd29yZC5uRm9udEluZGV4LCB3b3JkLldvcmQsIDApOw0KLQkJCQkJb2xkcGxhY2UgPSBwbGFjZTsJCQkJCQ0KLQkJCQl9DQotCQkJfQ0KLQ0KLQkJCWlmIChzVGV4dEJ1Zi5HZXRMZW5ndGgoKSA+IDApDQotCQkJewkJCQkNCi0JCQkJT2JqQXJyYXkuQWRkKEFkZFRleHRPYmpUb1BhZ2VPYmplY3RzKHBQYWdlT2JqZWN0cywgY3JUZXh0LCBwRm9udE1hcC0+R2V0UERGRm9udChuT2xkRm9udEluZGV4KSwgZkZvbnRTaXplLCAwLjBmLCAxMDAsDQotCQkJCQlDUERGX1BvaW50KHB0QlQueCtwdE9mZnNldC54LCBwdEJULnkrcHRPZmZzZXQueSksIHNUZXh0QnVmLkdldEJ5dGVTdHJpbmcoKSkpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLX0NCi0NCi12b2lkIElGWF9FZGl0OjpHZW5lcmF0ZVJpY2hQYWdlT2JqZWN0cyhDUERGX1BhZ2VPYmplY3RzKiBwUGFnZU9iamVjdHMsIElGWF9FZGl0KiBwRWRpdCwNCi0JCQkJCQkJCSAgIGNvbnN0IENQREZfUG9pbnQmIHB0T2Zmc2V0LCBjb25zdCBDUFZUX1dvcmRSYW5nZSogcFJhbmdlLCBDRlhfQXJyYXlUZW1wbGF0ZTxDUERGX1RleHRPYmplY3QqPiYgT2JqQXJyYXkpDQotew0KLQ0KLQ0KLQlGWF9DT0xPUlJFRiBjckN1clRleHQgPSBBcmdiRW5jb2RlKDI1NSwgMCwgMCwgMCk7DQotCUZYX0NPTE9SUkVGIGNyT2xkID0gY3JDdXJUZXh0Ow0KLQ0KLQ0KLQlDRlhfQnl0ZVRleHRCdWYgc1RleHRCdWY7DQotCUNQVlRfV29yZFByb3BzIHdwOw0KLQlDUERGX1BvaW50IHB0QlQoMC4wZiwwLjBmKTsNCi0NCi0JT2JqQXJyYXkuUmVtb3ZlQWxsKCk7DQotDQotCWlmIChJRlhfRWRpdF9JdGVyYXRvciogcEl0ZXJhdG9yID0gcEVkaXQtPkdldEl0ZXJhdG9yKCkpDQotCXsNCi0JCWlmIChJRlhfRWRpdF9Gb250TWFwKiBwRm9udE1hcCA9IHBFZGl0LT5HZXRGb250TWFwKCkpDQotCQl7DQotCQkJaWYgKHBSYW5nZSkNCi0JCQkJcEl0ZXJhdG9yLT5TZXRBdChwUmFuZ2UtPkJlZ2luUG9zKTsNCi0JCQllbHNlDQotCQkJCXBJdGVyYXRvci0+U2V0QXQoMCk7DQotDQotCQkJQ1BWVF9Xb3JkUGxhY2Ugb2xkcGxhY2U7CQkJDQotDQotCQkJd2hpbGUgKHBJdGVyYXRvci0+TmV4dFdvcmQoKSkNCi0JCQl7DQotCQkJCUNQVlRfV29yZFBsYWNlIHBsYWNlID0gcEl0ZXJhdG9yLT5HZXRBdCgpOw0KLQkJCQlpZiAocFJhbmdlICYmIHBsYWNlLldvcmRDbXAocFJhbmdlLT5FbmRQb3MpID4gMCkgYnJlYWs7DQotCQkJCQ0KLQkJCQlDUFZUX1dvcmQgd29yZDsJCQkJDQotCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpDQotCQkJCXsNCi0JCQkJCXdvcmQuV29yZFByb3BzLmZGb250U2l6ZSA9IHdvcmQuZkZvbnRTaXplOw0KLQ0KLQkJCQkJY3JDdXJUZXh0ID0gQXJnYkVuY29kZSgyNTUsd29yZC5Xb3JkUHJvcHMuZHdXb3JkQ29sb3IpOw0KLQ0KLQkJCQkJaWYgKHBsYWNlLkxpbmVDbXAob2xkcGxhY2UpICE9IDAgfHwgd29yZC5Xb3JkUHJvcHMuZkNoYXJTcGFjZSA+IDAuMGYgfHwgd29yZC5Xb3JkUHJvcHMubkhvcnpTY2FsZSAhPSAxMDAgfHwgDQotCQkJCQkJRlhTWVNfbWVtY21wKCZ3b3JkLldvcmRQcm9wcywgJndwLCBzaXplb2YoQ1BWVF9Xb3JkUHJvcHMpKSAhPSAwIHx8IA0KLQkJCQkJCWNyT2xkICE9IGNyQ3VyVGV4dCkNCi0JCQkJCXsNCi0JCQkJCQlpZiAoc1RleHRCdWYuR2V0TGVuZ3RoKCkgPiAwKQ0KLQkJCQkJCXsNCi0JCQkJCQkJT2JqQXJyYXkuQWRkKEFkZFRleHRPYmpUb1BhZ2VPYmplY3RzKHBQYWdlT2JqZWN0cywgY3JPbGQsIHBGb250TWFwLT5HZXRQREZGb250KHdwLm5Gb250SW5kZXgpLCB3cC5mRm9udFNpemUsIHdwLmZDaGFyU3BhY2UsIHdwLm5Ib3J6U2NhbGUsDQotCQkJCQkJCQlDUERGX1BvaW50KHB0QlQueCtwdE9mZnNldC54LCBwdEJULnkrcHRPZmZzZXQueSksIHNUZXh0QnVmLkdldEJ5dGVTdHJpbmcoKSkpOw0KLQ0KLQkJCQkJCQlzVGV4dEJ1Zi5DbGVhcigpOw0KLQkJCQkJCX0NCi0NCi0JCQkJCQl3cCA9IHdvcmQuV29yZFByb3BzOw0KLQkJCQkJCXB0QlQgPSB3b3JkLnB0V29yZDsNCi0JCQkJCQljck9sZCA9IGNyQ3VyVGV4dDsNCi0JDQotCQkJCQl9DQotDQotCQkJCQlzVGV4dEJ1ZiA8PCBHZXRQREZXb3JkU3RyaW5nKHBGb250TWFwLCB3b3JkLldvcmRQcm9wcy5uRm9udEluZGV4LCB3b3JkLldvcmQsIDApOwkNCi0JCQkJCQ0KLQkJCQkJaWYgKHdvcmQuV29yZFByb3BzLm5Xb3JkU3R5bGUgJiBQVlRXT1JEX1NUWUxFX1VOREVSTElORSkNCi0JCQkJCXsvKg0KLQkJCQkJCUFkZExpbmVUb1BhZ2VPYmplY3RzKHBQYWdlT2JqZWN0cywgY3JDdXJUZXh0LCANCi0JCQkJCQkJQ1BERl9Qb2ludCh3b3JkLnB0V29yZC54LCB3b3JkLnB0V29yZC55ICsgd29yZC5mRGVzY2VudCAqIDAuNGYpLA0KLQkJCQkJCQlDUERGX1BvaW50KHdvcmQucHRXb3JkLnggKyB3b3JkLmZXaWR0aCwgd29yZC5wdFdvcmQueSArIHdvcmQuZkRlc2NlbnQgKiAwLjRmKSk7CQkJCQkJCQ0KLSovDQotCQkJCQkJQ1BERl9SZWN0IHJjVW5kZXJsaW5lID0gR2V0VW5kZXJMaW5lUmVjdCh3b3JkKTsNCi0JCQkJCQlyY1VuZGVybGluZS5sZWZ0ICs9IHB0T2Zmc2V0Lng7DQotCQkJCQkJcmNVbmRlcmxpbmUucmlnaHQgKz0gcHRPZmZzZXQueDsNCi0JCQkJCQlyY1VuZGVybGluZS50b3AgKz0gcHRPZmZzZXQueTsNCi0JCQkJCQlyY1VuZGVybGluZS5ib3R0b20gKz0gcHRPZmZzZXQueTsNCi0JCQkJCQkNCi0JCQkJCQlBZGRSZWN0VG9QYWdlT2JqZWN0cyhwUGFnZU9iamVjdHMsIGNyQ3VyVGV4dCwgcmNVbmRlcmxpbmUpOwkJCQkJCQkNCi0JCQkJCX0NCi0NCi0JCQkJCWlmICh3b3JkLldvcmRQcm9wcy5uV29yZFN0eWxlICYgUFZUV09SRF9TVFlMRV9DUk9TU09VVCkNCi0JCQkJCXsNCi0JCQkJCQlDUERGX1JlY3QgcmNDcm9zc291dCA9IEdldENyb3Nzb3V0UmVjdCh3b3JkKTsNCi0JCQkJCQlyY0Nyb3Nzb3V0LmxlZnQgKz0gcHRPZmZzZXQueDsNCi0JCQkJCQlyY0Nyb3Nzb3V0LnJpZ2h0ICs9IHB0T2Zmc2V0Lng7DQotCQkJCQkJcmNDcm9zc291dC50b3AgKz0gcHRPZmZzZXQueTsNCi0JCQkJCQlyY0Nyb3Nzb3V0LmJvdHRvbSArPSBwdE9mZnNldC55Ow0KLQ0KLQkJCQkJCUFkZFJlY3RUb1BhZ2VPYmplY3RzKHBQYWdlT2JqZWN0cywgY3JDdXJUZXh0LCByY0Nyb3Nzb3V0KTsJCQkJCQkNCi0JCQkJCX0NCi0NCi0JCQkJCW9sZHBsYWNlID0gcGxhY2U7CQkJCQkNCi0JCQkJfQ0KLQkJCX0NCi0NCi0JCQlpZiAoc1RleHRCdWYuR2V0TGVuZ3RoKCkgPiAwKQ0KLQkJCXsJCQkJDQotCQkJCU9iakFycmF5LkFkZChBZGRUZXh0T2JqVG9QYWdlT2JqZWN0cyhwUGFnZU9iamVjdHMsIGNyT2xkLCBwRm9udE1hcC0+R2V0UERGRm9udCh3cC5uRm9udEluZGV4KSwgd3AuZkZvbnRTaXplLCB3cC5mQ2hhclNwYWNlLCB3cC5uSG9yelNjYWxlLA0KLQkJCQkJQ1BERl9Qb2ludChwdEJULngrcHRPZmZzZXQueCwgcHRCVC55K3B0T2Zmc2V0LnkpLCBzVGV4dEJ1Zi5HZXRCeXRlU3RyaW5nKCkpKTsNCi0JCQl9DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBJRlhfRWRpdDo6R2VuZXJhdGVVbmRlcmxpbmVPYmplY3RzKENQREZfUGFnZU9iamVjdHMqIHBQYWdlT2JqZWN0cywgSUZYX0VkaXQqIHBFZGl0LA0KLQkJCQkJCQkJICAgY29uc3QgQ1BERl9Qb2ludCYgcHRPZmZzZXQsIGNvbnN0IENQVlRfV29yZFJhbmdlKiBwUmFuZ2UsIEZYX0NPTE9SUkVGIGNvbG9yKQ0KLXsNCi0NCi0NCi0JaWYgKElGWF9FZGl0X0l0ZXJhdG9yKiBwSXRlcmF0b3IgPSBwRWRpdC0+R2V0SXRlcmF0b3IoKSkNCi0Jew0KLQkJaWYgKHBFZGl0LT5HZXRGb250TWFwKCkpDQotCQl7DQotCQkJaWYgKHBSYW5nZSkNCi0JCQkJcEl0ZXJhdG9yLT5TZXRBdChwUmFuZ2UtPkJlZ2luUG9zKTsNCi0JCQllbHNlDQotCQkJCXBJdGVyYXRvci0+U2V0QXQoMCk7DQotDQotCQkJQ1BWVF9Xb3JkUGxhY2Ugb2xkcGxhY2U7CQkJDQotDQotCQkJd2hpbGUgKHBJdGVyYXRvci0+TmV4dFdvcmQoKSkNCi0JCQl7DQotCQkJCUNQVlRfV29yZFBsYWNlIHBsYWNlID0gcEl0ZXJhdG9yLT5HZXRBdCgpOw0KLQkJCQlpZiAocFJhbmdlICYmIHBsYWNlLldvcmRDbXAocFJhbmdlLT5FbmRQb3MpID4gMCkgYnJlYWs7DQotCQkJCQ0KLQkJCQlDUFZUX1dvcmQgd29yZDsJCQkJDQotCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpDQotCQkJCXsNCi0JCQkJCUNQREZfUmVjdCByY1VuZGVybGluZSA9IEdldFVuZGVyTGluZVJlY3Qod29yZCk7DQotCQkJCQlyY1VuZGVybGluZS5sZWZ0ICs9IHB0T2Zmc2V0Lng7DQotCQkJCQlyY1VuZGVybGluZS5yaWdodCArPSBwdE9mZnNldC54Ow0KLQkJCQkJcmNVbmRlcmxpbmUudG9wICs9IHB0T2Zmc2V0Lnk7DQotCQkJCQlyY1VuZGVybGluZS5ib3R0b20gKz0gcHRPZmZzZXQueTsNCi0JCQkJCUFkZFJlY3RUb1BhZ2VPYmplY3RzKHBQYWdlT2JqZWN0cywgY29sb3IsIHJjVW5kZXJsaW5lKTsNCi0JCQkJfQ0KLQkJCX0NCi0JCX0NCi0JfQ0KLX0NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGVkaXQvZnhldF9zdHViLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9meGVkaXQvZnhfZWRpdC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvZnhlZGl0L2Z4ZXRfZWRpdC5oIgorCisjZGVmaW5lIEZYX0VESVRfVU5ERVJMSU5FSEFMRldJRFRICQkJCTAuNWYKKyNkZWZpbmUgRlhfRURJVF9DUk9TU09VVEhBTEZXSURUSAkJCQkwLjVmCisKK2V4dGVybiBDRlhfQnl0ZVN0cmluZyBHZXRQREZXb3JkU3RyaW5nKElGWF9FZGl0X0ZvbnRNYXAgKiBwRm9udE1hcCwgRlhfSU5UMzIgbkZvbnRJbmRleCwgRlhfV09SRCBXb3JkLCBGWF9XT1JEIFN1YldvcmQpOworCitDUERGX1JlY3QgR2V0VW5kZXJMaW5lUmVjdChjb25zdCBDUFZUX1dvcmQmIHdvcmQpCit7CisJcmV0dXJuIENQREZfUmVjdCh3b3JkLnB0V29yZC54LCB3b3JkLnB0V29yZC55ICsgd29yZC5mRGVzY2VudCAqIDAuNWYsCisJCQkJCQl3b3JkLnB0V29yZC54ICsgd29yZC5mV2lkdGgsIHdvcmQucHRXb3JkLnkgKyB3b3JkLmZEZXNjZW50ICogMC4yNWYpOworfQorCitDUERGX1JlY3QgR2V0Q3Jvc3NvdXRSZWN0KGNvbnN0IENQVlRfV29yZCYgd29yZCkKK3sKKwlyZXR1cm4gQ1BERl9SZWN0KHdvcmQucHRXb3JkLngsIHdvcmQucHRXb3JkLnkgKyAod29yZC5mQXNjZW50ICsgd29yZC5mRGVzY2VudCkgKiAwLjVmICsgd29yZC5mRGVzY2VudCAqIDAuMjVmLAorCQkJCQkJCXdvcmQucHRXb3JkLnggKyB3b3JkLmZXaWR0aCwgd29yZC5wdFdvcmQueSArICh3b3JkLmZBc2NlbnQgKyB3b3JkLmZEZXNjZW50KSAqIDAuNWYpOworfQorCitzdGF0aWMgdm9pZCBEcmF3VGV4dFN0cmluZyhDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBjb25zdCBDUERGX1BvaW50JiBwdCwgQ1BERl9Gb250KiBwRm9udCwgRlhfRkxPQVQgZkZvbnRTaXplLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLAorCQkJCQkgIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHIsIEZYX0FSR0IgY3JUZXh0RmlsbCwgRlhfQVJHQiBjclRleHRTdHJva2UsIEZYX0lOVDMyIG5Ib3J6U2NhbGUpCit7CisJRlhfRkxPQVQgeCA9IHB0LngsIHkgPSBwdC55OworCXBVc2VyMkRldmljZS0+VHJhbnNmb3JtKHgsIHkpOworCisJaWYgKHBGb250KQorCXsKKwkJaWYgKG5Ib3J6U2NhbGUgIT0gMTAwKQorCQl7CisJCQlDUERGX01hdHJpeCBtdChuSG9yelNjYWxlLzEwMC4wZiwwLDAsMSwwLDApOworCQkJbXQuQ29uY2F0KCpwVXNlcjJEZXZpY2UpOworCisJCQlDUERGX1JlbmRlck9wdGlvbnMgcm87CisJCQlyby5tX0ZsYWdzID0gUkVOREVSX0NMRUFSVFlQRTsKKwkJCXJvLm1fQ29sb3JNb2RlID0gUkVOREVSX0NPTE9SX05PUk1BTDsKKworCQkJaWYgKGNyVGV4dFN0cm9rZSAhPSAwKQorCQkJeworCQkJCUNQREZfUG9pbnQgcHQxKDAsMCksIHB0MigxLDApOworCQkJCXBVc2VyMkRldmljZS0+VHJhbnNmb3JtKHB0MS54LCBwdDEueSk7CisJCQkJcFVzZXIyRGV2aWNlLT5UcmFuc2Zvcm0ocHQyLngsIHB0Mi55KTsKKwkJCQlDRlhfR3JhcGhTdGF0ZURhdGEgZ3NkOworCQkJCWdzZC5tX0xpbmVXaWR0aCA9IChGWF9GTE9BVClGWFNZU19mYWJzKChwdDIueCArIHB0Mi55KSAtIChwdDEueCArIHB0MS55KSk7CisKKwkJCQlDUERGX1RleHRSZW5kZXJlcjo6RHJhd1RleHRTdHJpbmcocERldmljZSx4LCB5LCBwRm9udCwgZkZvbnRTaXplLCAmbXQsIHN0ciwgY3JUZXh0RmlsbCwgY3JUZXh0U3Ryb2tlLCAmZ3NkLCAmcm8pOworCQkJfQorCQkJZWxzZQorCQkJCUNQREZfVGV4dFJlbmRlcmVyOjpEcmF3VGV4dFN0cmluZyhwRGV2aWNlLHgsIHksIHBGb250LCBmRm9udFNpemUsICZtdCwgc3RyLCBjclRleHRGaWxsLCAwLCBOVUxMLCAmcm8pOworCQl9CisJCWVsc2UKKwkJeworCQkJQ1BERl9SZW5kZXJPcHRpb25zIHJvOworCQkJcm8ubV9GbGFncyA9IFJFTkRFUl9DTEVBUlRZUEU7CisJCQlyby5tX0NvbG9yTW9kZSA9IFJFTkRFUl9DT0xPUl9OT1JNQUw7CisKKwkJCWlmIChjclRleHRTdHJva2UgIT0gMCkKKwkJCXsKKwkJCQlDUERGX1BvaW50IHB0MSgwLDApLCBwdDIoMSwwKTsKKwkJCQlwVXNlcjJEZXZpY2UtPlRyYW5zZm9ybShwdDEueCwgcHQxLnkpOworCQkJCXBVc2VyMkRldmljZS0+VHJhbnNmb3JtKHB0Mi54LCBwdDIueSk7CisJCQkJQ0ZYX0dyYXBoU3RhdGVEYXRhIGdzZDsKKwkJCQlnc2QubV9MaW5lV2lkdGggPSAoRlhfRkxPQVQpRlhTWVNfZmFicygocHQyLnggKyBwdDIueSkgLSAocHQxLnggKyBwdDEueSkpOworCisJCQkJQ1BERl9UZXh0UmVuZGVyZXI6OkRyYXdUZXh0U3RyaW5nKHBEZXZpY2UseCwgeSwgcEZvbnQsIGZGb250U2l6ZSwgcFVzZXIyRGV2aWNlLCBzdHIsIGNyVGV4dEZpbGwsIGNyVGV4dFN0cm9rZSwgJmdzZCwgJnJvKTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlDUERGX1RleHRSZW5kZXJlcjo6RHJhd1RleHRTdHJpbmcocERldmljZSx4LCB5LCBwRm9udCwgZkZvbnRTaXplLCBwVXNlcjJEZXZpY2UsIHN0ciwgY3JUZXh0RmlsbCwgMCwgTlVMTCwgJnJvKTsKKwkJfQorCX0KK30KKwordm9pZCBJRlhfRWRpdDo6RHJhd1VuZGVybGluZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLCBJRlhfRWRpdCogcEVkaXQsIEZYX0NPTE9SUkVGIGNvbG9yLAorCQkJCQkJCQljb25zdCBDUERGX1JlY3QmIHJjQ2xpcCwgY29uc3QgQ1BERl9Qb2ludCYgcHRPZmZzZXQsIGNvbnN0IENQVlRfV29yZFJhbmdlKiBwUmFuZ2UpCit7CisJcERldmljZS0+U2F2ZVN0YXRlKCk7CisKKwlpZiAoIXJjQ2xpcC5Jc0VtcHR5KCkpCisJeworCQlDUERGX1JlY3QgcmNUZW1wID0gcmNDbGlwOworCQlwVXNlcjJEZXZpY2UtPlRyYW5zZm9ybVJlY3QocmNUZW1wKTsKKwkJRlhfUkVDVCByY0RldkNsaXA7CisJCXJjRGV2Q2xpcC5sZWZ0ID0gKEZYX0lOVDMyKXJjVGVtcC5sZWZ0OworCQlyY0RldkNsaXAucmlnaHQgPSAoRlhfSU5UMzIpcmNUZW1wLnJpZ2h0OworCQlyY0RldkNsaXAudG9wID0gKEZYX0lOVDMyKXJjVGVtcC50b3A7CisJCXJjRGV2Q2xpcC5ib3R0b20gPSAoRlhfSU5UMzIpcmNUZW1wLmJvdHRvbTsKKwkJcERldmljZS0+U2V0Q2xpcF9SZWN0KCZyY0RldkNsaXApOworCX0KKworCWlmIChJRlhfRWRpdF9JdGVyYXRvciogcEl0ZXJhdG9yID0gcEVkaXQtPkdldEl0ZXJhdG9yKCkpCisJeworCQlpZiAocEVkaXQtPkdldEZvbnRNYXAoKSkKKwkJeworCQkJaWYgKHBSYW5nZSkKKwkJCQlwSXRlcmF0b3ItPlNldEF0KHBSYW5nZS0+QmVnaW5Qb3MpOworCQkJZWxzZQorCQkJCXBJdGVyYXRvci0+U2V0QXQoMCk7CisKKwkJCXdoaWxlIChwSXRlcmF0b3ItPk5leHRXb3JkKCkpCisJCQl7CisJCQkJQ1BWVF9Xb3JkUGxhY2UgcGxhY2UgPSBwSXRlcmF0b3ItPkdldEF0KCk7CisJCQkJaWYgKHBSYW5nZSAmJiBwbGFjZS5Xb3JkQ21wKHBSYW5nZS0+RW5kUG9zKSA+IDApIGJyZWFrOworCisJCQkJQ1BWVF9Xb3JkIHdvcmQ7CQkJCQorCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpCisJCQkJeworCQkJCQlDRlhfUGF0aERhdGEgcGF0aFVuZGVybGluZTsKKwkJCQkJQ1BERl9SZWN0IHJjVW5kZXJsaW5lID0gR2V0VW5kZXJMaW5lUmVjdCh3b3JkKTsKKwkJCQkJcmNVbmRlcmxpbmUubGVmdCArPSBwdE9mZnNldC54OworCQkJCQlyY1VuZGVybGluZS5yaWdodCArPSBwdE9mZnNldC54OworCQkJCQlyY1VuZGVybGluZS50b3AgKz0gcHRPZmZzZXQueTsKKwkJCQkJcmNVbmRlcmxpbmUuYm90dG9tICs9IHB0T2Zmc2V0Lnk7CisJCQkJCXBhdGhVbmRlcmxpbmUuQXBwZW5kUmVjdChyY1VuZGVybGluZS5sZWZ0LCByY1VuZGVybGluZS5ib3R0b20sIHJjVW5kZXJsaW5lLnJpZ2h0LCByY1VuZGVybGluZS50b3ApOworCisJCQkJCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoVW5kZXJsaW5lLCBwVXNlcjJEZXZpY2UsIE5VTEwsIGNvbG9yLCAwLCBGWEZJTExfV0lORElORyk7CisJCQkJfQorCQkJfQkJCQorCQl9CisJfQorCQorCXBEZXZpY2UtPlJlc3RvcmVTdGF0ZSgpOworfQorCit2b2lkIElGWF9FZGl0OjpEcmF3RWRpdChDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLCBJRlhfRWRpdCogcEVkaXQsIEZYX0NPTE9SUkVGIGNyVGV4dEZpbGwsIEZYX0NPTE9SUkVGIGNyVGV4dFN0cm9rZSwgCisJCQkJCQljb25zdCBDUERGX1JlY3QmIHJjQ2xpcCwgY29uc3QgQ1BERl9Qb2ludCYgcHRPZmZzZXQsIGNvbnN0IENQVlRfV29yZFJhbmdlKiBwUmFuZ2UsIElGWF9TeXN0ZW1IYW5kbGVyKiBwU3lzdGVtSGFuZGxlciwgdm9pZCogcEZGTERhdGEpCit7CisJCisJRlhfQk9PTCBiQ29udGludW91cyA9IHBFZGl0LT5HZXRDaGFyQXJyYXkoKSA9PSAwOworCWlmIChwRWRpdC0+R2V0Q2hhclNwYWNlKCkgPiAwLjBmKQorCQliQ29udGludW91cyA9IEZBTFNFOworCisJRlhfV09SRCBTdWJXb3JkID0gcEVkaXQtPkdldFBhc3N3b3JkQ2hhcigpOworCUZYX0ZMT0FUIGZGb250U2l6ZSA9IHBFZGl0LT5HZXRGb250U2l6ZSgpOworCUNQVlRfV29yZFJhbmdlIHdyU2VsZWN0ID0gcEVkaXQtPkdldFNlbGVjdFdvcmRSYW5nZSgpOworCUZYX0lOVDMyIG5Ib3J6U2NhbGUgPSBwRWRpdC0+R2V0SG9yelNjYWxlKCk7CisKKwlGWF9DT0xPUlJFRiBjckN1ckZpbGwgPSBjclRleHRGaWxsOworCUZYX0NPTE9SUkVGIGNyT2xkRmlsbCA9IGNyQ3VyRmlsbDsKKworCUZYX0JPT0wgYlNlbGVjdCA9IEZBTFNFOworCWNvbnN0IEZYX0NPTE9SUkVGIGNyV2hpdGUgPSBBcmdiRW5jb2RlKDI1NSwyNTUsMjU1LDI1NSk7CisJY29uc3QgRlhfQ09MT1JSRUYgY3JTZWxCSyA9IEFyZ2JFbmNvZGUoMjU1LDAsNTEsMTEzKTsKKworCUNGWF9CeXRlVGV4dEJ1ZiBzVGV4dEJ1ZjsKKwlGWF9JTlQzMiBuRm9udEluZGV4ID0gLTE7CisJQ1BERl9Qb2ludCBwdEJUKDAuMGYsMC4wZik7CisKKwlwRGV2aWNlLT5TYXZlU3RhdGUoKTsKKworCWlmICghcmNDbGlwLklzRW1wdHkoKSkKKwl7CisJCUNQREZfUmVjdCByY1RlbXAgPSByY0NsaXA7CisJCXBVc2VyMkRldmljZS0+VHJhbnNmb3JtUmVjdChyY1RlbXApOworCQlGWF9SRUNUIHJjRGV2Q2xpcDsKKwkJcmNEZXZDbGlwLmxlZnQgPSAoRlhfSU5UMzIpcmNUZW1wLmxlZnQ7CisJCXJjRGV2Q2xpcC5yaWdodCA9IChGWF9JTlQzMilyY1RlbXAucmlnaHQ7CisJCXJjRGV2Q2xpcC50b3AgPSAoRlhfSU5UMzIpcmNUZW1wLnRvcDsKKwkJcmNEZXZDbGlwLmJvdHRvbSA9IChGWF9JTlQzMilyY1RlbXAuYm90dG9tOworCQlwRGV2aWNlLT5TZXRDbGlwX1JlY3QoJnJjRGV2Q2xpcCk7CisJfQorCisJaWYgKElGWF9FZGl0X0l0ZXJhdG9yKiBwSXRlcmF0b3IgPSBwRWRpdC0+R2V0SXRlcmF0b3IoKSkKKwl7CisJCWlmIChJRlhfRWRpdF9Gb250TWFwKiBwRm9udE1hcCA9IHBFZGl0LT5HZXRGb250TWFwKCkpCisJCXsKKwkJCWlmIChwUmFuZ2UpCisJCQkJcEl0ZXJhdG9yLT5TZXRBdChwUmFuZ2UtPkJlZ2luUG9zKTsKKwkJCWVsc2UKKwkJCQlwSXRlcmF0b3ItPlNldEF0KDApOworCisJCQlDUFZUX1dvcmRQbGFjZSBvbGRwbGFjZTsJCQkKKworCQkJd2hpbGUgKHBJdGVyYXRvci0+TmV4dFdvcmQoKSkKKwkJCXsKKwkJCQlDUFZUX1dvcmRQbGFjZSBwbGFjZSA9IHBJdGVyYXRvci0+R2V0QXQoKTsKKwkJCQlpZiAocFJhbmdlICYmIHBsYWNlLldvcmRDbXAocFJhbmdlLT5FbmRQb3MpID4gMCkgYnJlYWs7CisKKwkJCQlpZiAod3JTZWxlY3QuSXNFeGlzdCgpKQorCQkJCXsKKwkJCQkJYlNlbGVjdCA9IHBsYWNlLldvcmRDbXAod3JTZWxlY3QuQmVnaW5Qb3MpID4gMCAmJiBwbGFjZS5Xb3JkQ21wKHdyU2VsZWN0LkVuZFBvcykgPD0gMDsKKwkJCQkJaWYgKGJTZWxlY3QpCisJCQkJCXsJCQkJCQkKKwkJCQkJCWNyQ3VyRmlsbCA9IGNyV2hpdGU7CQkJCQkJCisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQljckN1ckZpbGwgPSBjclRleHRGaWxsOworCQkJCQl9CisJCQkJfQorCQkJCWlmKHBTeXN0ZW1IYW5kbGVyICYmIHBTeXN0ZW1IYW5kbGVyLT5Jc1NlbGVjdGlvbkltcGxlbWVudGVkKCkpCQorCQkJCXsKKwkJCQkJY3JDdXJGaWxsID0gY3JUZXh0RmlsbDsKKyAJCQkJCWNyT2xkRmlsbCA9IGNyQ3VyRmlsbDsKKwkJCQl9CisJCQkJQ1BWVF9Xb3JkIHdvcmQ7CQkJCQorCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpCisJCQkJeworCisJCQkJCWlmIChiU2VsZWN0KQorCQkJCQl7CisJCQkJCQkKKwkJCQkJCUNQVlRfTGluZSBsaW5lOworCQkJCQkJcEl0ZXJhdG9yLT5HZXRMaW5lKGxpbmUpOworCisJCQkJCQlpZihwU3lzdGVtSGFuZGxlciAmJiBwU3lzdGVtSGFuZGxlci0+SXNTZWxlY3Rpb25JbXBsZW1lbnRlZCgpKQorCQkJCQkJeworCQkJCQkJCUNQREZfUmVjdCByYyh3b3JkLnB0V29yZC54LGxpbmUucHRMaW5lLnkgKyBsaW5lLmZMaW5lRGVzY2VudCwKKwkJCQkJCQkJd29yZC5wdFdvcmQueCt3b3JkLmZXaWR0aCxsaW5lLnB0TGluZS55ICsgbGluZS5mTGluZUFzY2VudCk7CisJCQkJCQkJcmMuSW50ZXJzZWN0KHJjQ2xpcCk7CisJCQkJCQkJLy9DRlhfRWRpdCogcEV0ID0gKENGWF9FZGl0KilwRWRpdDsKKwkJCQkJCQkvL0NQREZfUmVjdCByY0VkaXQgPSBwRXQtPlZUVG9FZGl0KHJjKTsKKwkJCQkJCQlwU3lzdGVtSGFuZGxlci0+T3V0cHV0U2VsZWN0ZWRSZWN0KHBGRkxEYXRhLHJjKTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCXsJCisgCQkJCQkJCUNGWF9QYXRoRGF0YSBwYXRoU2VsQks7CisgCQkJCQkJCXBhdGhTZWxCSy5BcHBlbmRSZWN0KHdvcmQucHRXb3JkLngsbGluZS5wdExpbmUueSArIGxpbmUuZkxpbmVEZXNjZW50LAorIAkJCQkJCQkJd29yZC5wdFdvcmQueCt3b3JkLmZXaWR0aCxsaW5lLnB0TGluZS55ICsgbGluZS5mTGluZUFzY2VudCk7CisgCQkJCQkJCQorIAkJCQkJCQlwRGV2aWNlLT5EcmF3UGF0aCgmcGF0aFNlbEJLLCBwVXNlcjJEZXZpY2UsIE5VTEwsIGNyU2VsQkssIDAsIEZYRklMTF9XSU5ESU5HKTsJCisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlpZiAoYkNvbnRpbnVvdXMpCisJCQkJCXsKKwkJCQkJCWlmIChwbGFjZS5MaW5lQ21wKG9sZHBsYWNlKSAhPSAwIHx8IHdvcmQubkZvbnRJbmRleCAhPSBuRm9udEluZGV4IHx8IAorCQkJCQkJCWNyT2xkRmlsbCAhPSBjckN1ckZpbGwpCisJCQkJCQl7CisJCQkJCQkJaWYgKHNUZXh0QnVmLkdldExlbmd0aCgpID4gMCkKKwkJCQkJCQl7CQkJCQkJCQkKKwkJCQkJCQkJRHJhd1RleHRTdHJpbmcocERldmljZSwgQ1BERl9Qb2ludChwdEJULngrcHRPZmZzZXQueCwgcHRCVC55K3B0T2Zmc2V0LnkpLCBwRm9udE1hcC0+R2V0UERGRm9udChuRm9udEluZGV4KSwKKwkJCQkJCQkJCWZGb250U2l6ZSwgcFVzZXIyRGV2aWNlLCBzVGV4dEJ1Zi5HZXRCeXRlU3RyaW5nKCksIGNyT2xkRmlsbCwgY3JUZXh0U3Ryb2tlLCBuSG9yelNjYWxlKTsKKworCQkJCQkJCQlzVGV4dEJ1Zi5DbGVhcigpOworCQkJCQkJCX0KKwkJCQkJCQluRm9udEluZGV4ID0gd29yZC5uRm9udEluZGV4OworCQkJCQkJCXB0QlQgPSB3b3JkLnB0V29yZDsKKwkJCQkJCQljck9sZEZpbGwgPSBjckN1ckZpbGw7CisJCQkJCQl9CisKKwkJCQkJCXNUZXh0QnVmIDw8IEdldFBERldvcmRTdHJpbmcocEZvbnRNYXAsIHdvcmQubkZvbnRJbmRleCwgd29yZC5Xb3JkLCBTdWJXb3JkKTsJCQkJCQkKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCURyYXdUZXh0U3RyaW5nKHBEZXZpY2UsQ1BERl9Qb2ludCh3b3JkLnB0V29yZC54K3B0T2Zmc2V0LngsIHdvcmQucHRXb3JkLnkrcHRPZmZzZXQueSksIHBGb250TWFwLT5HZXRQREZGb250KHdvcmQubkZvbnRJbmRleCksCisJCQkJCQkJZkZvbnRTaXplLCBwVXNlcjJEZXZpY2UsIEdldFBERldvcmRTdHJpbmcocEZvbnRNYXAsIHdvcmQubkZvbnRJbmRleCwgd29yZC5Xb3JkLCBTdWJXb3JkKSwgY3JDdXJGaWxsLCBjclRleHRTdHJva2UsIG5Ib3J6U2NhbGUpOworCisJCQkJCX0KKwkJCQkJb2xkcGxhY2UgPSBwbGFjZTsKKworCisJCQkJfQorCQkJfQorCisJCQlpZiAoc1RleHRCdWYuR2V0TGVuZ3RoKCkgPiAwKQorCQkJewkJCQkKKwkJCQlEcmF3VGV4dFN0cmluZyhwRGV2aWNlLCBDUERGX1BvaW50KHB0QlQueCtwdE9mZnNldC54LCBwdEJULnkrcHRPZmZzZXQueSksIHBGb250TWFwLT5HZXRQREZGb250KG5Gb250SW5kZXgpLAorCQkJCQlmRm9udFNpemUsIHBVc2VyMkRldmljZSwgc1RleHRCdWYuR2V0Qnl0ZVN0cmluZygpLCBjck9sZEZpbGwsIGNyVGV4dFN0cm9rZSwgbkhvcnpTY2FsZSk7CisJCQl9CQkJCisJCX0KKwl9CisJCisJcERldmljZS0+UmVzdG9yZVN0YXRlKCk7Cit9CisKK3ZvaWQgSUZYX0VkaXQ6OkRyYXdSaWNoRWRpdChDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLCBJRlhfRWRpdCogcEVkaXQsICAKKwkJCQkJCWNvbnN0IENQREZfUmVjdCYgcmNDbGlwLCBjb25zdCBDUERGX1BvaW50JiBwdE9mZnNldCwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UqIHBSYW5nZSkKK3sKKwkvL0ZYX0ZMT0FUIGZGb250U2l6ZSA9IHBFZGl0LT5HZXRGb250U2l6ZSgpOworCUNQVlRfV29yZFJhbmdlIHdyU2VsZWN0ID0gcEVkaXQtPkdldFNlbGVjdFdvcmRSYW5nZSgpOworCisJRlhfQ09MT1JSRUYgY3JDdXJUZXh0ID0gQXJnYkVuY29kZSgyNTUsIDAsMCwwKTsKKwlGWF9DT0xPUlJFRiBjck9sZCA9IGNyQ3VyVGV4dDsKKwlGWF9CT09MIGJTZWxlY3QgPSBGQUxTRTsKKwljb25zdCBGWF9DT0xPUlJFRiBjcldoaXRlID0gQXJnYkVuY29kZSgyNTUsMjU1LDI1NSwyNTUpOworCWNvbnN0IEZYX0NPTE9SUkVGIGNyU2VsQksgPSBBcmdiRW5jb2RlKDI1NSwwLDUxLDExMyk7CisKKwlDRlhfQnl0ZVRleHRCdWYgc1RleHRCdWY7CisJQ1BWVF9Xb3JkUHJvcHMgd3A7CisJQ1BERl9Qb2ludCBwdEJUKDAuMGYsMC4wZik7CisKKwlwRGV2aWNlLT5TYXZlU3RhdGUoKTsKKworCWlmICghcmNDbGlwLklzRW1wdHkoKSkKKwl7CisJCUNQREZfUmVjdCByY1RlbXAgPSByY0NsaXA7CisJCXBVc2VyMkRldmljZS0+VHJhbnNmb3JtUmVjdChyY1RlbXApOworCQlGWF9SRUNUIHJjRGV2Q2xpcDsKKwkJcmNEZXZDbGlwLmxlZnQgPSAoRlhfSU5UMzIpcmNUZW1wLmxlZnQ7CisJCXJjRGV2Q2xpcC5yaWdodCA9IChGWF9JTlQzMilyY1RlbXAucmlnaHQ7CisJCXJjRGV2Q2xpcC50b3AgPSAoRlhfSU5UMzIpcmNUZW1wLnRvcDsKKwkJcmNEZXZDbGlwLmJvdHRvbSA9IChGWF9JTlQzMilyY1RlbXAuYm90dG9tOworCQlwRGV2aWNlLT5TZXRDbGlwX1JlY3QoJnJjRGV2Q2xpcCk7CisJfQorCisJaWYgKElGWF9FZGl0X0l0ZXJhdG9yKiBwSXRlcmF0b3IgPSBwRWRpdC0+R2V0SXRlcmF0b3IoKSkKKwl7CisJCWlmIChJRlhfRWRpdF9Gb250TWFwKiBwRm9udE1hcCA9IHBFZGl0LT5HZXRGb250TWFwKCkpCisJCXsKKwkJCWlmIChwUmFuZ2UpCisJCQkJcEl0ZXJhdG9yLT5TZXRBdChwUmFuZ2UtPkJlZ2luUG9zKTsKKwkJCWVsc2UKKwkJCQlwSXRlcmF0b3ItPlNldEF0KDApOworCisJCQlDUFZUX1dvcmRQbGFjZSBvbGRwbGFjZTsJCQkKKworCQkJd2hpbGUgKHBJdGVyYXRvci0+TmV4dFdvcmQoKSkKKwkJCXsKKwkJCQlDUFZUX1dvcmRQbGFjZSBwbGFjZSA9IHBJdGVyYXRvci0+R2V0QXQoKTsKKwkJCQlpZiAocFJhbmdlICYmIHBsYWNlLldvcmRDbXAocFJhbmdlLT5FbmRQb3MpID4gMCkgYnJlYWs7CisJCQkJCisJCQkJQ1BWVF9Xb3JkIHdvcmQ7CQkJCQorCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpCisJCQkJeworCQkJCQl3b3JkLldvcmRQcm9wcy5mRm9udFNpemUgPSB3b3JkLmZGb250U2l6ZTsKKworCQkJCQljckN1clRleHQgPSBBcmdiRW5jb2RlKDI1NSx3b3JkLldvcmRQcm9wcy5kd1dvcmRDb2xvcik7CisKKwkJCQkJaWYgKHdyU2VsZWN0LklzRXhpc3QoKSkKKwkJCQkJeworCQkJCQkJYlNlbGVjdCA9IHBsYWNlLldvcmRDbXAod3JTZWxlY3QuQmVnaW5Qb3MpID4gMCAmJiBwbGFjZS5Xb3JkQ21wKHdyU2VsZWN0LkVuZFBvcykgPD0gMDsKKwkJCQkJCWlmIChiU2VsZWN0KQorCQkJCQkJewkJCQkJCQorCQkJCQkJCWNyQ3VyVGV4dCA9IGNyV2hpdGU7CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlpZiAoYlNlbGVjdCkKKwkJCQkJeworCQkJCQkJQ1BWVF9MaW5lIGxpbmU7CisJCQkJCQlwSXRlcmF0b3ItPkdldExpbmUobGluZSk7CisKKwkJCQkJCUNGWF9QYXRoRGF0YSBwYXRoU2VsQks7CisJCQkJCQlwYXRoU2VsQksuQXBwZW5kUmVjdCh3b3JkLnB0V29yZC54CQkrIHB0T2Zmc2V0LngsCisJCQkJCQkJbGluZS5wdExpbmUueSArIGxpbmUuZkxpbmVEZXNjZW50CSsgcHRPZmZzZXQueSwKKwkJCQkJCQl3b3JkLnB0V29yZC54K3dvcmQuZldpZHRoCQkJKyBwdE9mZnNldC54LAorCQkJCQkJCWxpbmUucHRMaW5lLnkgKyBsaW5lLmZMaW5lQXNjZW50CSsgcHRPZmZzZXQueSk7CisKKwkJCQkJCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoU2VsQkssIHBVc2VyMkRldmljZSwgTlVMTCwgY3JTZWxCSywgMCwgRlhGSUxMX1dJTkRJTkcpOwkJCQkJCQkJCQkJCQorCQkJCQl9CisKKwkJCQkJaWYgKHBsYWNlLkxpbmVDbXAob2xkcGxhY2UpICE9IDAgfHwgd29yZC5Xb3JkUHJvcHMuZkNoYXJTcGFjZSA+IDAuMGYgfHwgd29yZC5Xb3JkUHJvcHMubkhvcnpTY2FsZSAhPSAxMDAgfHwgCisJCQkJCQlGWFNZU19tZW1jbXAoJndvcmQuV29yZFByb3BzLCAmd3AsIHNpemVvZihDUFZUX1dvcmRQcm9wcykpICE9IDAgfHwgCisJCQkJCQljck9sZCAhPSBjckN1clRleHQpCisJCQkJCXsKKwkJCQkJCWlmIChzVGV4dEJ1Zi5HZXRMZW5ndGgoKSA+IDApCisJCQkJCQl7CQkJCQkJCQkKKwkJCQkJCQlEcmF3VGV4dFN0cmluZyhwRGV2aWNlLCBDUERGX1BvaW50KHB0QlQueCtwdE9mZnNldC54LCBwdEJULnkrcHRPZmZzZXQueSksIHBGb250TWFwLT5HZXRQREZGb250KHdwLm5Gb250SW5kZXgpLAorCQkJCQkJCQl3cC5mRm9udFNpemUsIHBVc2VyMkRldmljZSwgc1RleHRCdWYuR2V0Qnl0ZVN0cmluZygpLCBjck9sZCwgMCwgd3AubkhvcnpTY2FsZSk7CisKKwkJCQkJCQlzVGV4dEJ1Zi5DbGVhcigpOworCQkJCQkJfQorCQkJCQkJd3AgPSB3b3JkLldvcmRQcm9wczsKKwkJCQkJCXB0QlQgPSB3b3JkLnB0V29yZDsKKwkJCQkJCWNyT2xkID0gY3JDdXJUZXh0OworCQkJCQl9CisKKwkJCQkJc1RleHRCdWYgPDwgR2V0UERGV29yZFN0cmluZyhwRm9udE1hcCwgd29yZC5Xb3JkUHJvcHMubkZvbnRJbmRleCwgd29yZC5Xb3JkLCAwKTsJCisJCQkJCQorCQkJCQlpZiAod29yZC5Xb3JkUHJvcHMubldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfVU5ERVJMSU5FKQorCQkJCQl7CisJCQkJCQlDRlhfUGF0aERhdGEgcGF0aFVuZGVybGluZTsKKwkJCQkJCUNQREZfUmVjdCByY1VuZGVybGluZSA9IEdldFVuZGVyTGluZVJlY3Qod29yZCk7CisJCQkJCQlwYXRoVW5kZXJsaW5lLkFwcGVuZFJlY3QocmNVbmRlcmxpbmUubGVmdCwgcmNVbmRlcmxpbmUuYm90dG9tLCByY1VuZGVybGluZS5yaWdodCwgcmNVbmRlcmxpbmUudG9wKTsKKworCQkJCQkJcERldmljZS0+RHJhd1BhdGgoJnBhdGhVbmRlcmxpbmUsIHBVc2VyMkRldmljZSwgTlVMTCwgY3JDdXJUZXh0LCAwLCBGWEZJTExfV0lORElORyk7CQorCQkJCQl9CisKKwkJCQkJaWYgKHdvcmQuV29yZFByb3BzLm5Xb3JkU3R5bGUgJiBQVlRXT1JEX1NUWUxFX0NST1NTT1VUKQorCQkJCQl7CisJCQkJCQlDRlhfUGF0aERhdGEgcGF0aENyb3Nzb3V0OworCQkJCQkJQ1BERl9SZWN0IHJjQ3Jvc3NvdXQgPSBHZXRDcm9zc291dFJlY3Qod29yZCk7CisJCQkJCQlwYXRoQ3Jvc3NvdXQuQXBwZW5kUmVjdChyY0Nyb3Nzb3V0LmxlZnQsIHJjQ3Jvc3NvdXQuYm90dG9tLCByY0Nyb3Nzb3V0LnJpZ2h0LCByY0Nyb3Nzb3V0LnRvcCk7CisKKwkJCQkJCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoQ3Jvc3NvdXQsIHBVc2VyMkRldmljZSwgTlVMTCwgY3JDdXJUZXh0LCAwLCBGWEZJTExfV0lORElORyk7CisJCQkJCX0KKworCQkJCQlvbGRwbGFjZSA9IHBsYWNlOwkJCQkJCisJCQkJfQorCQkJfQorCisJCQlpZiAoc1RleHRCdWYuR2V0TGVuZ3RoKCkgPiAwKQorCQkJewkJCQkKKwkJCQlEcmF3VGV4dFN0cmluZyhwRGV2aWNlLCBDUERGX1BvaW50KHB0QlQueCtwdE9mZnNldC54LCBwdEJULnkrcHRPZmZzZXQueSksIHBGb250TWFwLT5HZXRQREZGb250KHdwLm5Gb250SW5kZXgpLAorCQkJCQl3cC5mRm9udFNpemUsIHBVc2VyMkRldmljZSwgc1RleHRCdWYuR2V0Qnl0ZVN0cmluZygpLCBjck9sZCwgMCwgd3AubkhvcnpTY2FsZSk7CisJCQl9CisJCX0KKwl9CisJCisJcERldmljZS0+UmVzdG9yZVN0YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkIEFkZExpbmVUb1BhZ2VPYmplY3RzKENQREZfUGFnZU9iamVjdHMqIHBQYWdlT2JqcywgRlhfQ09MT1JSRUYgY3JTdHJva2UsIAorCQkJCQkJCQkgY29uc3QgQ1BERl9Qb2ludCYgcHQxLCBjb25zdCBDUERGX1BvaW50JiBwdDIpCit7CisJQ1BERl9QYXRoT2JqZWN0KiBwUGF0aE9iaiA9IG5ldyBDUERGX1BhdGhPYmplY3Q7CisJQ1BERl9QYXRoRGF0YSogcFBhdGhEYXRhID0gcFBhdGhPYmotPm1fUGF0aC5HZXRNb2RpZnkoKTsKKworCXBQYXRoRGF0YS0+U2V0UG9pbnRDb3VudCgyKTsKKwlwUGF0aERhdGEtPlNldFBvaW50KDAsIHB0MS54LCBwdDEueSwgRlhQVF9NT1ZFVE8pOworCXBQYXRoRGF0YS0+U2V0UG9pbnQoMSwgcHQyLngsIHB0Mi55LCBGWFBUX0xJTkVUTyk7CisKKwlGWF9GTE9BVCByZ2JbM107CisJcmdiWzBdID0gRlhBUkdCX1IoY3JTdHJva2UpIC8gMjU1LjBmOworCXJnYlsxXSA9IEZYQVJHQl9HKGNyU3Ryb2tlKSAvIDI1NS4wZjsKKwlyZ2JbMl0gPSBGWEFSR0JfQihjclN0cm9rZSkgLyAyNTUuMGY7CisJcFBhdGhPYmotPm1fQ29sb3JTdGF0ZS5TZXRTdHJva2VDb2xvcihDUERGX0NvbG9yU3BhY2U6OkdldFN0b2NrQ1MoUERGQ1NfREVWSUNFUkdCKSwgcmdiLCAzKTsKKworCUNGWF9HcmFwaFN0YXRlRGF0YSogcERhdGEgPSBwUGF0aE9iai0+bV9HcmFwaFN0YXRlLkdldE1vZGlmeSgpOworCXBEYXRhLT5tX0xpbmVXaWR0aCA9IDE7CisKKwlwUGFnZU9ianMtPkluc2VydE9iamVjdChwUGFnZU9ianMtPkdldExhc3RPYmplY3RQb3NpdGlvbigpLHBQYXRoT2JqKTsKK30KKworc3RhdGljIHZvaWQgQWRkUmVjdFRvUGFnZU9iamVjdHMoQ1BERl9QYWdlT2JqZWN0cyogcFBhZ2VPYmpzLCBGWF9DT0xPUlJFRiBjckZpbGwsIGNvbnN0IENQREZfUmVjdCYgcmNGaWxsKQoreworCUNQREZfUGF0aE9iamVjdCogcFBhdGhPYmogPSBuZXcgQ1BERl9QYXRoT2JqZWN0OworCUNQREZfUGF0aERhdGEqIHBQYXRoRGF0YSA9IHBQYXRoT2JqLT5tX1BhdGguR2V0TW9kaWZ5KCk7CisJcFBhdGhEYXRhLT5BcHBlbmRSZWN0KHJjRmlsbC5sZWZ0LHJjRmlsbC5ib3R0b20scmNGaWxsLnJpZ2h0LHJjRmlsbC50b3ApOwkKKwkKKwlGWF9GTE9BVCByZ2JbM107CisJcmdiWzBdID0gRlhBUkdCX1IoY3JGaWxsKSAvIDI1NS4wZiA7CisJcmdiWzFdID0gRlhBUkdCX0coY3JGaWxsKSAvIDI1NS4wZjsKKwlyZ2JbMl0gPSBGWEFSR0JfQihjckZpbGwpIC8gMjU1LjBmOworCXBQYXRoT2JqLT5tX0NvbG9yU3RhdGUuU2V0RmlsbENvbG9yKENQREZfQ29sb3JTcGFjZTo6R2V0U3RvY2tDUyhQREZDU19ERVZJQ0VSR0IpLCByZ2IsIDMpOworCisJcFBhdGhPYmotPm1fRmlsbFR5cGUgPSBGWEZJTExfQUxURVJOQVRFOworCXBQYXRoT2JqLT5tX2JTdHJva2UgPSBGQUxTRTsKKworCXBQYWdlT2Jqcy0+SW5zZXJ0T2JqZWN0KHBQYWdlT2Jqcy0+R2V0TGFzdE9iamVjdFBvc2l0aW9uKCkscFBhdGhPYmopOworfQorCitzdGF0aWMgQ1BERl9UZXh0T2JqZWN0KiBBZGRUZXh0T2JqVG9QYWdlT2JqZWN0cyhDUERGX1BhZ2VPYmplY3RzKiBwUGFnZU9ianMsIEZYX0NPTE9SUkVGIGNyVGV4dCwgCisJCQkJCQkJIENQREZfRm9udCogcEZvbnQsIEZYX0ZMT0FUIGZGb250U2l6ZSwgRlhfRkxPQVQgZkNoYXJTcGFjZSwgRlhfSU5UMzIgbkhvcnpTY2FsZSwgCisJCQkJCQkJIGNvbnN0IENQREZfUG9pbnQmIHBvaW50LCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgdGV4dCkKK3sKKwlDUERGX1RleHRPYmplY3QqIHBUeHRPYmogPSBuZXcgQ1BERl9UZXh0T2JqZWN0OworCQkJCisJQ1BERl9UZXh0U3RhdGVEYXRhKiBwVGV4dFN0YXRlRGF0YSA9IHBUeHRPYmotPm1fVGV4dFN0YXRlLkdldE1vZGlmeSgpOworCXBUZXh0U3RhdGVEYXRhLT5tX3BGb250ID0gcEZvbnQ7CisJcFRleHRTdGF0ZURhdGEtPm1fRm9udFNpemUgPSBmRm9udFNpemU7CisJcFRleHRTdGF0ZURhdGEtPm1fQ2hhclNwYWNlID0gZkNoYXJTcGFjZTsKKwlwVGV4dFN0YXRlRGF0YS0+bV9Xb3JkU3BhY2UgPSAwOworCXBUZXh0U3RhdGVEYXRhLT5tX1RleHRNb2RlICA9IDA7CisJcFRleHRTdGF0ZURhdGEtPm1fTWF0cml4WzBdID0gbkhvcnpTY2FsZSAvIDEwMC4wZjsKKwlwVGV4dFN0YXRlRGF0YS0+bV9NYXRyaXhbMV0gPSAwOworCXBUZXh0U3RhdGVEYXRhLT5tX01hdHJpeFsyXSA9IDA7CisJcFRleHRTdGF0ZURhdGEtPm1fTWF0cml4WzNdID0gMTsKKworCUZYX0ZMT0FUIHJnYlszXTsKKwlyZ2JbMF0gPSBGWEFSR0JfUihjclRleHQpIC8gMjU1LjBmIDsKKwlyZ2JbMV0gPSBGWEFSR0JfRyhjclRleHQpIC8gMjU1LjBmOworCXJnYlsyXSA9IEZYQVJHQl9CKGNyVGV4dCkgLyAyNTUuMGY7CisJcFR4dE9iai0+bV9Db2xvclN0YXRlLlNldEZpbGxDb2xvcihDUERGX0NvbG9yU3BhY2U6OkdldFN0b2NrQ1MoUERGQ1NfREVWSUNFUkdCKSxyZ2IsIDMpOworCXBUeHRPYmotPm1fQ29sb3JTdGF0ZS5TZXRTdHJva2VDb2xvcihDUERGX0NvbG9yU3BhY2U6OkdldFN0b2NrQ1MoUERGQ1NfREVWSUNFUkdCKSxyZ2IsIDMpOworCisJcFR4dE9iai0+U2V0UG9zaXRpb24ocG9pbnQueCxwb2ludC55KTsKKwlwVHh0T2JqLT5TZXRUZXh0KHRleHQpOwkKKworCXBQYWdlT2Jqcy0+SW5zZXJ0T2JqZWN0KHBQYWdlT2Jqcy0+R2V0TGFzdE9iamVjdFBvc2l0aW9uKCkscFR4dE9iaik7CisKKwlyZXR1cm4gcFR4dE9iajsKK30KKworLyoKK0xpc3Qgb2YgY3VycmVudGx5IHN1cHBvcnRlZCBzdGFuZGFyZCBmb250czoKK0NvdXJpZXIsIENvdXJpZXItQm9sZCwgQ291cmllci1Cb2xkT2JsaXF1ZSwgQ291cmllci1PYmxpcXVlCitIZWx2ZXRpY2EsIEhlbHZldGljYS1Cb2xkLCBIZWx2ZXRpY2EtQm9sZE9ibGlxdWUsIEhlbHZldGljYS1PYmxpcXVlCitUaW1lcy1Sb21hbiwgVGltZXMtQm9sZCwgVGltZXMtSXRhbGljLCBUaW1lcy1Cb2xkSXRhbGljCitTeW1ib2wsIFphcGZEaW5nYmF0cworKi8KKworY29uc3QgY2hhciogZ19zRlhFRElUU3RhbmRhcmRGb250TmFtZVtdID0geyJDb3VyaWVyIiwgIkNvdXJpZXItQm9sZCIsICJDb3VyaWVyLUJvbGRPYmxpcXVlIiwgIkNvdXJpZXItT2JsaXF1ZSIsCisJIkhlbHZldGljYSIsICJIZWx2ZXRpY2EtQm9sZCIsICJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLCAiSGVsdmV0aWNhLU9ibGlxdWUiLAorCSJUaW1lcy1Sb21hbiIsICJUaW1lcy1Cb2xkIiwgIlRpbWVzLUl0YWxpYyIsICJUaW1lcy1Cb2xkSXRhbGljIiwKKwkiU3ltYm9sIiwgIlphcGZEaW5nYmF0cyJ9OworCitzdGF0aWMgRlhfQk9PTCBGWF9FRElUX0lzU3RhbmRhcmRGb250KGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzRm9udE5hbWUpCit7CisJZm9yIChGWF9JTlQzMiBpPTA7IGk8MTQ7IGkrKykKKwl7CisJCWlmIChzRm9udE5hbWUgPT0gZ19zRlhFRElUU3RhbmRhcmRGb250TmFtZVtpXSkKKwkJCXJldHVybiBUUlVFOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKwordm9pZCBJRlhfRWRpdDo6R2VuZXJhdGVQYWdlT2JqZWN0cyhDUERGX1BhZ2VPYmplY3RzKiBwUGFnZU9iamVjdHMsIElGWF9FZGl0KiBwRWRpdCwKKwkJCQkJCQkJICAgY29uc3QgQ1BERl9Qb2ludCYgcHRPZmZzZXQsIGNvbnN0IENQVlRfV29yZFJhbmdlKiBwUmFuZ2UsIEZYX0NPTE9SUkVGIGNyVGV4dCwgQ0ZYX0FycmF5VGVtcGxhdGU8Q1BERl9UZXh0T2JqZWN0Kj4mIE9iakFycmF5KQoreworCUZYX0ZMT0FUIGZGb250U2l6ZSA9IHBFZGl0LT5HZXRGb250U2l6ZSgpOworCisJRlhfSU5UMzIgbk9sZEZvbnRJbmRleCA9IC0xOworCisJQ0ZYX0J5dGVUZXh0QnVmIHNUZXh0QnVmOworCUNQREZfUG9pbnQgcHRCVCgwLjBmLDAuMGYpOworCisJT2JqQXJyYXkuUmVtb3ZlQWxsKCk7CisKKwlpZiAoSUZYX0VkaXRfSXRlcmF0b3IqIHBJdGVyYXRvciA9IHBFZGl0LT5HZXRJdGVyYXRvcigpKQorCXsKKwkJaWYgKElGWF9FZGl0X0ZvbnRNYXAqIHBGb250TWFwID0gcEVkaXQtPkdldEZvbnRNYXAoKSkKKwkJeworCQkJaWYgKHBSYW5nZSkKKwkJCQlwSXRlcmF0b3ItPlNldEF0KHBSYW5nZS0+QmVnaW5Qb3MpOworCQkJZWxzZQorCQkJCXBJdGVyYXRvci0+U2V0QXQoMCk7CisKKwkJCUNQVlRfV29yZFBsYWNlIG9sZHBsYWNlOwkJCQorCisJCQl3aGlsZSAocEl0ZXJhdG9yLT5OZXh0V29yZCgpKQorCQkJeworCQkJCUNQVlRfV29yZFBsYWNlIHBsYWNlID0gcEl0ZXJhdG9yLT5HZXRBdCgpOworCQkJCWlmIChwUmFuZ2UgJiYgcGxhY2UuV29yZENtcChwUmFuZ2UtPkVuZFBvcykgPiAwKSBicmVhazsKKwkJCQkKKwkJCQlDUFZUX1dvcmQgd29yZDsJCQkJCisJCQkJaWYgKHBJdGVyYXRvci0+R2V0V29yZCh3b3JkKSkKKwkJCQl7CisJCQkJCWlmIChwbGFjZS5MaW5lQ21wKG9sZHBsYWNlKSAhPSAwIHx8IG5PbGRGb250SW5kZXggIT0gd29yZC5uRm9udEluZGV4KQorCQkJCQl7CisJCQkJCQlpZiAoc1RleHRCdWYuR2V0TGVuZ3RoKCkgPiAwKQorCQkJCQkJeworCQkJCQkJCU9iakFycmF5LkFkZChBZGRUZXh0T2JqVG9QYWdlT2JqZWN0cyhwUGFnZU9iamVjdHMsIGNyVGV4dCwgcEZvbnRNYXAtPkdldFBERkZvbnQobk9sZEZvbnRJbmRleCksIGZGb250U2l6ZSwgMC4wZiwgMTAwLAorCQkJCQkJCQlDUERGX1BvaW50KHB0QlQueCtwdE9mZnNldC54LCBwdEJULnkrcHRPZmZzZXQueSksIHNUZXh0QnVmLkdldEJ5dGVTdHJpbmcoKSkpOworCisJCQkJCQkJc1RleHRCdWYuQ2xlYXIoKTsKKwkJCQkJCX0KKworCQkJCQkJcHRCVCA9IHdvcmQucHRXb3JkOworCQkJCQkJbk9sZEZvbnRJbmRleCA9IHdvcmQubkZvbnRJbmRleDsKKwkJCQkJfQorCisJCQkJCXNUZXh0QnVmIDw8IEdldFBERldvcmRTdHJpbmcocEZvbnRNYXAsIHdvcmQubkZvbnRJbmRleCwgd29yZC5Xb3JkLCAwKTsKKwkJCQkJb2xkcGxhY2UgPSBwbGFjZTsJCQkJCQorCQkJCX0KKwkJCX0KKworCQkJaWYgKHNUZXh0QnVmLkdldExlbmd0aCgpID4gMCkKKwkJCXsJCQkJCisJCQkJT2JqQXJyYXkuQWRkKEFkZFRleHRPYmpUb1BhZ2VPYmplY3RzKHBQYWdlT2JqZWN0cywgY3JUZXh0LCBwRm9udE1hcC0+R2V0UERGRm9udChuT2xkRm9udEluZGV4KSwgZkZvbnRTaXplLCAwLjBmLCAxMDAsCisJCQkJCUNQREZfUG9pbnQocHRCVC54K3B0T2Zmc2V0LngsIHB0QlQueStwdE9mZnNldC55KSwgc1RleHRCdWYuR2V0Qnl0ZVN0cmluZygpKSk7CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQgSUZYX0VkaXQ6OkdlbmVyYXRlUmljaFBhZ2VPYmplY3RzKENQREZfUGFnZU9iamVjdHMqIHBQYWdlT2JqZWN0cywgSUZYX0VkaXQqIHBFZGl0LAorCQkJCQkJCQkgICBjb25zdCBDUERGX1BvaW50JiBwdE9mZnNldCwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UqIHBSYW5nZSwgQ0ZYX0FycmF5VGVtcGxhdGU8Q1BERl9UZXh0T2JqZWN0Kj4mIE9iakFycmF5KQoreworCisKKwlGWF9DT0xPUlJFRiBjckN1clRleHQgPSBBcmdiRW5jb2RlKDI1NSwgMCwgMCwgMCk7CisJRlhfQ09MT1JSRUYgY3JPbGQgPSBjckN1clRleHQ7CisKKworCUNGWF9CeXRlVGV4dEJ1ZiBzVGV4dEJ1ZjsKKwlDUFZUX1dvcmRQcm9wcyB3cDsKKwlDUERGX1BvaW50IHB0QlQoMC4wZiwwLjBmKTsKKworCU9iakFycmF5LlJlbW92ZUFsbCgpOworCisJaWYgKElGWF9FZGl0X0l0ZXJhdG9yKiBwSXRlcmF0b3IgPSBwRWRpdC0+R2V0SXRlcmF0b3IoKSkKKwl7CisJCWlmIChJRlhfRWRpdF9Gb250TWFwKiBwRm9udE1hcCA9IHBFZGl0LT5HZXRGb250TWFwKCkpCisJCXsKKwkJCWlmIChwUmFuZ2UpCisJCQkJcEl0ZXJhdG9yLT5TZXRBdChwUmFuZ2UtPkJlZ2luUG9zKTsKKwkJCWVsc2UKKwkJCQlwSXRlcmF0b3ItPlNldEF0KDApOworCisJCQlDUFZUX1dvcmRQbGFjZSBvbGRwbGFjZTsJCQkKKworCQkJd2hpbGUgKHBJdGVyYXRvci0+TmV4dFdvcmQoKSkKKwkJCXsKKwkJCQlDUFZUX1dvcmRQbGFjZSBwbGFjZSA9IHBJdGVyYXRvci0+R2V0QXQoKTsKKwkJCQlpZiAocFJhbmdlICYmIHBsYWNlLldvcmRDbXAocFJhbmdlLT5FbmRQb3MpID4gMCkgYnJlYWs7CisJCQkJCisJCQkJQ1BWVF9Xb3JkIHdvcmQ7CQkJCQorCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpCisJCQkJeworCQkJCQl3b3JkLldvcmRQcm9wcy5mRm9udFNpemUgPSB3b3JkLmZGb250U2l6ZTsKKworCQkJCQljckN1clRleHQgPSBBcmdiRW5jb2RlKDI1NSx3b3JkLldvcmRQcm9wcy5kd1dvcmRDb2xvcik7CisKKwkJCQkJaWYgKHBsYWNlLkxpbmVDbXAob2xkcGxhY2UpICE9IDAgfHwgd29yZC5Xb3JkUHJvcHMuZkNoYXJTcGFjZSA+IDAuMGYgfHwgd29yZC5Xb3JkUHJvcHMubkhvcnpTY2FsZSAhPSAxMDAgfHwgCisJCQkJCQlGWFNZU19tZW1jbXAoJndvcmQuV29yZFByb3BzLCAmd3AsIHNpemVvZihDUFZUX1dvcmRQcm9wcykpICE9IDAgfHwgCisJCQkJCQljck9sZCAhPSBjckN1clRleHQpCisJCQkJCXsKKwkJCQkJCWlmIChzVGV4dEJ1Zi5HZXRMZW5ndGgoKSA+IDApCisJCQkJCQl7CisJCQkJCQkJT2JqQXJyYXkuQWRkKEFkZFRleHRPYmpUb1BhZ2VPYmplY3RzKHBQYWdlT2JqZWN0cywgY3JPbGQsIHBGb250TWFwLT5HZXRQREZGb250KHdwLm5Gb250SW5kZXgpLCB3cC5mRm9udFNpemUsIHdwLmZDaGFyU3BhY2UsIHdwLm5Ib3J6U2NhbGUsCisJCQkJCQkJCUNQREZfUG9pbnQocHRCVC54K3B0T2Zmc2V0LngsIHB0QlQueStwdE9mZnNldC55KSwgc1RleHRCdWYuR2V0Qnl0ZVN0cmluZygpKSk7CisKKwkJCQkJCQlzVGV4dEJ1Zi5DbGVhcigpOworCQkJCQkJfQorCisJCQkJCQl3cCA9IHdvcmQuV29yZFByb3BzOworCQkJCQkJcHRCVCA9IHdvcmQucHRXb3JkOworCQkJCQkJY3JPbGQgPSBjckN1clRleHQ7CisJCisJCQkJCX0KKworCQkJCQlzVGV4dEJ1ZiA8PCBHZXRQREZXb3JkU3RyaW5nKHBGb250TWFwLCB3b3JkLldvcmRQcm9wcy5uRm9udEluZGV4LCB3b3JkLldvcmQsIDApOwkKKwkJCQkJCisJCQkJCWlmICh3b3JkLldvcmRQcm9wcy5uV29yZFN0eWxlICYgUFZUV09SRF9TVFlMRV9VTkRFUkxJTkUpCisJCQkJCXsvKgorCQkJCQkJQWRkTGluZVRvUGFnZU9iamVjdHMocFBhZ2VPYmplY3RzLCBjckN1clRleHQsIAorCQkJCQkJCUNQREZfUG9pbnQod29yZC5wdFdvcmQueCwgd29yZC5wdFdvcmQueSArIHdvcmQuZkRlc2NlbnQgKiAwLjRmKSwKKwkJCQkJCQlDUERGX1BvaW50KHdvcmQucHRXb3JkLnggKyB3b3JkLmZXaWR0aCwgd29yZC5wdFdvcmQueSArIHdvcmQuZkRlc2NlbnQgKiAwLjRmKSk7CQkJCQkJCQorKi8KKwkJCQkJCUNQREZfUmVjdCByY1VuZGVybGluZSA9IEdldFVuZGVyTGluZVJlY3Qod29yZCk7CisJCQkJCQlyY1VuZGVybGluZS5sZWZ0ICs9IHB0T2Zmc2V0Lng7CisJCQkJCQlyY1VuZGVybGluZS5yaWdodCArPSBwdE9mZnNldC54OworCQkJCQkJcmNVbmRlcmxpbmUudG9wICs9IHB0T2Zmc2V0Lnk7CisJCQkJCQlyY1VuZGVybGluZS5ib3R0b20gKz0gcHRPZmZzZXQueTsKKwkJCQkJCQorCQkJCQkJQWRkUmVjdFRvUGFnZU9iamVjdHMocFBhZ2VPYmplY3RzLCBjckN1clRleHQsIHJjVW5kZXJsaW5lKTsJCQkJCQkJCisJCQkJCX0KKworCQkJCQlpZiAod29yZC5Xb3JkUHJvcHMubldvcmRTdHlsZSAmIFBWVFdPUkRfU1RZTEVfQ1JPU1NPVVQpCisJCQkJCXsKKwkJCQkJCUNQREZfUmVjdCByY0Nyb3Nzb3V0ID0gR2V0Q3Jvc3NvdXRSZWN0KHdvcmQpOworCQkJCQkJcmNDcm9zc291dC5sZWZ0ICs9IHB0T2Zmc2V0Lng7CisJCQkJCQlyY0Nyb3Nzb3V0LnJpZ2h0ICs9IHB0T2Zmc2V0Lng7CisJCQkJCQlyY0Nyb3Nzb3V0LnRvcCArPSBwdE9mZnNldC55OworCQkJCQkJcmNDcm9zc291dC5ib3R0b20gKz0gcHRPZmZzZXQueTsKKworCQkJCQkJQWRkUmVjdFRvUGFnZU9iamVjdHMocFBhZ2VPYmplY3RzLCBjckN1clRleHQsIHJjQ3Jvc3NvdXQpOwkJCQkJCQorCQkJCQl9CisKKwkJCQkJb2xkcGxhY2UgPSBwbGFjZTsJCQkJCQorCQkJCX0KKwkJCX0KKworCQkJaWYgKHNUZXh0QnVmLkdldExlbmd0aCgpID4gMCkKKwkJCXsJCQkJCisJCQkJT2JqQXJyYXkuQWRkKEFkZFRleHRPYmpUb1BhZ2VPYmplY3RzKHBQYWdlT2JqZWN0cywgY3JPbGQsIHBGb250TWFwLT5HZXRQREZGb250KHdwLm5Gb250SW5kZXgpLCB3cC5mRm9udFNpemUsIHdwLmZDaGFyU3BhY2UsIHdwLm5Ib3J6U2NhbGUsCisJCQkJCUNQREZfUG9pbnQocHRCVC54K3B0T2Zmc2V0LngsIHB0QlQueStwdE9mZnNldC55KSwgc1RleHRCdWYuR2V0Qnl0ZVN0cmluZygpKSk7CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQgSUZYX0VkaXQ6OkdlbmVyYXRlVW5kZXJsaW5lT2JqZWN0cyhDUERGX1BhZ2VPYmplY3RzKiBwUGFnZU9iamVjdHMsIElGWF9FZGl0KiBwRWRpdCwKKwkJCQkJCQkJICAgY29uc3QgQ1BERl9Qb2ludCYgcHRPZmZzZXQsIGNvbnN0IENQVlRfV29yZFJhbmdlKiBwUmFuZ2UsIEZYX0NPTE9SUkVGIGNvbG9yKQoreworCisKKwlpZiAoSUZYX0VkaXRfSXRlcmF0b3IqIHBJdGVyYXRvciA9IHBFZGl0LT5HZXRJdGVyYXRvcigpKQorCXsKKwkJaWYgKHBFZGl0LT5HZXRGb250TWFwKCkpCisJCXsKKwkJCWlmIChwUmFuZ2UpCisJCQkJcEl0ZXJhdG9yLT5TZXRBdChwUmFuZ2UtPkJlZ2luUG9zKTsKKwkJCWVsc2UKKwkJCQlwSXRlcmF0b3ItPlNldEF0KDApOworCisJCQlDUFZUX1dvcmRQbGFjZSBvbGRwbGFjZTsJCQkKKworCQkJd2hpbGUgKHBJdGVyYXRvci0+TmV4dFdvcmQoKSkKKwkJCXsKKwkJCQlDUFZUX1dvcmRQbGFjZSBwbGFjZSA9IHBJdGVyYXRvci0+R2V0QXQoKTsKKwkJCQlpZiAocFJhbmdlICYmIHBsYWNlLldvcmRDbXAocFJhbmdlLT5FbmRQb3MpID4gMCkgYnJlYWs7CisJCQkJCisJCQkJQ1BWVF9Xb3JkIHdvcmQ7CQkJCQorCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpCisJCQkJeworCQkJCQlDUERGX1JlY3QgcmNVbmRlcmxpbmUgPSBHZXRVbmRlckxpbmVSZWN0KHdvcmQpOworCQkJCQlyY1VuZGVybGluZS5sZWZ0ICs9IHB0T2Zmc2V0Lng7CisJCQkJCXJjVW5kZXJsaW5lLnJpZ2h0ICs9IHB0T2Zmc2V0Lng7CisJCQkJCXJjVW5kZXJsaW5lLnRvcCArPSBwdE9mZnNldC55OworCQkJCQlyY1VuZGVybGluZS5ib3R0b20gKz0gcHRPZmZzZXQueTsKKwkJCQkJQWRkUmVjdFRvUGFnZU9iamVjdHMocFBhZ2VPYmplY3RzLCBjb2xvciwgcmNVbmRlcmxpbmUpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9Db25zdHMuY3BwIGIvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9Db25zdHMuY3BwCmluZGV4IDA5YjhmOGUuLjI3OGNkN2UgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvQ29uc3RzLmNwcAorKysgYi9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L0NvbnN0cy5jcHAKQEAgLTEsMjQ3ICsxLDI0NyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KYXZhU2NyaXB0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9JSmF2YVNjcmlwdC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRGVmaW5lLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19PYmplY3QuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1ZhbHVlLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9Db25zdHMuaCINCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYm9yZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfQm9yZGVyKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKHMsCXNvbGlkKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKGIsCWJldmVsZWQpDQotCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9TVFJJTkcoZCwJZGFzaGVkKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKGksCWluc2V0KQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKHUsCXVuZGVybGluZSkNCi1FTkRfSlNfU1RBVElDX0NPTlNUKCkNCi0NCi1JTVBMRU1FTlRfSlNfQ0xBU1NfQ09OU1QoQ0pTX0JvcmRlcixib3JkZXIpDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGRpc3BsYXkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQkVHSU5fSlNfU1RBVElDX0NPTlNUKENKU19EaXNwbGF5KQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfTlVNQkVSKHZpc2libGUsCTApDQotCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9OVU1CRVIoaGlkZGVuLAkxKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfTlVNQkVSKG5vUHJpbnQsCTIpDQotCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9OVU1CRVIobm9WaWV3LAkzKQ0KLUVORF9KU19TVEFUSUNfQ09OU1QoKQ0KLQ0KLUlNUExFTUVOVF9KU19DTEFTU19DT05TVChDSlNfRGlzcGxheSxkaXNwbGF5KQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBmb250IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfRm9udCkNCi0JSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhUaW1lcywJCVRpbWVzLVJvbWFuKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKFRpbWVzQiwJVGltZXMtQm9sZCkNCi0JSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhUaW1lc0ksCVRpbWVzLUl0YWxpYykNCi0JSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhUaW1lc0JJLAlUaW1lcy1Cb2xkSXRhbGljKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKEhlbHYsCQlIZWx2ZXRpY2EpDQotCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9TVFJJTkcoSGVsdkIsCQlIZWx2ZXRpY2EtQm9sZCkNCi0JSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhIZWx2SSwJCUhlbHZldGljYS1PYmxpcXVlKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKEhlbHZCSSwJSGVsdmV0aWNhLUJvbGRPYmxpcXVlKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKENvdXIsCQlDb3VyaWVyKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKENvdXJCLAkJQ291cmllci1Cb2xkKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKENvdXJJLAkJQ291cmllci1PYmxpcXVlKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKENvdXJCSSwJQ291cmllci1Cb2xkT2JsaXF1ZSkNCi0JSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhTeW1ib2wsCVN5bWJvbCkNCi0JSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhaYXBmRCwJCVphcGZEaW5nYmF0cykNCi1FTkRfSlNfU1RBVElDX0NPTlNUKCkNCi0NCi1JTVBMRU1FTlRfSlNfQ0xBU1NfQ09OU1QoQ0pTX0ZvbnQsZm9udCkNCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaGlnaGxpZ2h0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfSGlnaGxpZ2h0KQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKG4sCW5vbmUpDQotCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9TVFJJTkcoaSwJaW52ZXJ0KQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKHAsCXB1c2gpDQotCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9TVFJJTkcobywJb3V0bGluZSkNCi1FTkRfSlNfU1RBVElDX0NPTlNUKCkNCi0NCi1JTVBMRU1FTlRfSlNfQ0xBU1NfQ09OU1QoQ0pTX0hpZ2hsaWdodCxoaWdobGlnaHQpDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHBvc2l0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfUG9zaXRpb24pDQotCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9OVU1CRVIodGV4dE9ubHksCQkwKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfTlVNQkVSKGljb25Pbmx5LAkJMSkNCi0JSlNfU1RBVElDX0NPTlNUX0VOVFJZX05VTUJFUihpY29uVGV4dFYsCQkyKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfTlVNQkVSKHRleHRJY29uViwJCTMpDQotCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9OVU1CRVIoaWNvblRleHRILAkJNCkNCi0JSlNfU1RBVElDX0NPTlNUX0VOVFJZX05VTUJFUih0ZXh0SWNvbkgsCQk1KQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfTlVNQkVSKG92ZXJsYXksCQk2KQ0KLUVORF9KU19TVEFUSUNfQ09OU1QoKQ0KLQ0KLUlNUExFTUVOVF9KU19DTEFTU19DT05TVChDSlNfUG9zaXRpb24scG9zaXRpb24pDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNjYWxlSG93IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfU2NhbGVIb3cpDQotCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9OVU1CRVIocHJvcG9ydGlvbmFsLAkwKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfTlVNQkVSKGFuYW1vcnBoaWMsCTEpDQotRU5EX0pTX1NUQVRJQ19DT05TVCgpDQotDQotSU1QTEVNRU5UX0pTX0NMQVNTX0NPTlNUKENKU19TY2FsZUhvdyxzY2FsZUhvdykNCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2NhbGVXaGVuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfU2NhbGVXaGVuKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfTlVNQkVSKGFsd2F5cywJMCkNCi0JSlNfU1RBVElDX0NPTlNUX0VOVFJZX05VTUJFUihuZXZlciwJCTEpDQotCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9OVU1CRVIodG9vQmlnLAkyKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfTlVNQkVSKHRvb1NtYWxsLAkzKQ0KLUVORF9KU19TVEFUSUNfQ09OU1QoKQ0KLQ0KLUlNUExFTUVOVF9KU19DTEFTU19DT05TVChDSlNfU2NhbGVXaGVuLHNjYWxlV2hlbikNCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3R5bGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQkVHSU5fSlNfU1RBVElDX0NPTlNUKENKU19TdHlsZSkNCi0JSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhjaCwJY2hlY2spDQotCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9TVFJJTkcoY3IsCWNyb3NzKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKGRpLAlkaWFtb25kKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKGNpLAljaXJjbGUpDQotCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9TVFJJTkcoc3QsCXN0YXIpDQotCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9TVFJJTkcoc3EsCXNxdWFyZSkNCi1FTkRfSlNfU1RBVElDX0NPTlNUKCkNCi0NCi1JTVBMRU1FTlRfSlNfQ0xBU1NfQ09OU1QoQ0pTX1N0eWxlLHN0eWxlKQ0KLQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB6b29tdHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1CRUdJTl9KU19TVEFUSUNfQ09OU1QoQ0pTX1pvb210eXBlKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKG5vbmUsCU5vVmFyeSkNCi0JSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhmaXRQLAlGaXRQYWdlKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKGZpdFcsCUZpdFdpZHRoKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKGZpdEgsCUZpdEhlaWdodCkNCi0JSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhmaXRWLAlGaXRWaXNpYmxlV2lkdGgpDQotCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9TVFJJTkcocHJlZiwJUHJlZmVycmVkKQ0KLQlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKHJlZlcsCVJlZmxvd1dpZHRoKQ0KLUVORF9KU19TVEFUSUNfQ09OU1QoKQ0KLQ0KLUlNUExFTUVOVF9KU19DTEFTU19DT05TVChDSlNfWm9vbXR5cGUsem9vbXR5cGUpDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENKU19HbG9iYWxDb25zdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotaW50CUNKU19HbG9iYWxDb25zdHM6OkluaXQoSUpTX1J1bnRpbWUqIHBSdW50aW1lKQ0KLXsNCi0JREVGSU5FX0dMT0JBTF9DT05TVChwUnVudGltZSwgSURTX0dSRUFURVJfVEhBTiAsIEludmFsaWQgdmFsdWU6IG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzLik7DQotCURFRklORV9HTE9CQUxfQ09OU1QocFJ1bnRpbWUsIElEU19HVF9BTkRfTFQsSW52YWxpZCB2YWx1ZTogbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcy4pOw0KLQlERUZJTkVfR0xPQkFMX0NPTlNUKHBSdW50aW1lLCBJRFNfTEVTU19USEFOLEludmFsaWQgdmFsdWU6IG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzLik7DQotCURFRklORV9HTE9CQUxfQ09OU1QocFJ1bnRpbWUsIElEU19JTlZBTElEX01PTlRILCoqIEludmFsaWQgKiopOw0KLQlERUZJTkVfR0xPQkFMX0NPTlNUKHBSdW50aW1lLCBJRFNfSU5WQUxJRF9EQVRFLEludmFsaWQgZGF0ZS90aW1lOiBwbGVhc2UgZW5zdXJlIHRoYXQgdGhlIGRhdGUvdGltZSBleGlzdHMuIEZpZWxkKTsNCi0JREVGSU5FX0dMT0JBTF9DT05TVChwUnVudGltZSwgSURTX0lOVkFMSURfVkFMVUUsVGhlIHZhbHVlIGVudGVyZWQgZG9lcyBub3QgbWF0Y2ggdGhlIGZvcm1hdCBvZiB0aGUgZmllbGQpOw0KLQlERUZJTkVfR0xPQkFMX0NPTlNUKHBSdW50aW1lLCBJRFNfQU0sYW0pOw0KLQlERUZJTkVfR0xPQkFMX0NPTlNUKHBSdW50aW1lLCBJRFNfUE0scG0pOw0KLQlERUZJTkVfR0xPQkFMX0NPTlNUKHBSdW50aW1lLCBJRFNfTU9OVEhfSU5GTyxKYW51YXJ5WzFdRmVicnVhcnlbMl1NYXJjaFszXUFwcmlsWzRdTWF5WzVdSnVuZVs2XUp1bHlbN11BdWd1c3RbOF1TZXB0ZW1iZXJbOV1PY3RvYmVyWzEwXU5vdmVtYmVyWzExXURlY2VtYmVyWzEyXVNlcHRbOV1KYW5bMV1GZWJbMl1NYXJbM11BcHJbNF1KdW5bNl1KdWxbN11BdWdbOF1TZXBbOV1PY3RbMTBdTm92WzExXURlY1sxMl0pOw0KLQlERUZJTkVfR0xPQkFMX0NPTlNUKHBSdW50aW1lLCBJRFNfU1RBUlRVUF9DT05TT0xFX01TRywgKiogXl9eICoqKTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDSlNfR2xvYmFsQXJyYXlzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLWludAlDSlNfR2xvYmFsQXJyYXlzOjpJbml0KElKU19SdW50aW1lKiBwUnVudGltZSkNCi17DQotCXsNCi0JCUZYX0xQQ1dTVFIgQXJyYXlOYW1lID0gKEZYX0xQQ1dTVFIpTCJSRV9OVU1CRVJfRU5UUllfRE9UX1NFUCI7DQotCQlGWF9MUENXU1RSIEFycmF5Q29udGVudFtdID0geyhGWF9MUENXU1RSKUwiWystXT9cXGQqXFwuP1xcZCoifTsNCi0JCURFRklORV9HTE9CQUxfQVJSQVkocFJ1bnRpbWUpOw0KLQl9DQotDQotCXsNCi0JCUZYX0xQQ1dTVFIgQXJyYXlOYW1lID0gKEZYX0xQQ1dTVFIpTCJSRV9OVU1CRVJfQ09NTUlUX0RPVF9TRVAiOw0KLQkJRlhfTFBDV1NUUiBBcnJheUNvbnRlbnRbXSA9IHsoRlhfTFBDV1NUUilMIlsrLV0/XFxkKyhcXC5cXGQrKT8iLCAgICAgICAgICAgICAgICAvKiAtMS4wIG9yIC0xICovDQotCQkJCQkJCQkJCShGWF9MUENXU1RSKUwiWystXT9cXC5cXGQrIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLS4xICovDQotCQkJCQkJCQkJCShGWF9MUENXU1RSKUwiWystXT9cXGQrXFwuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLTEuICovDQotCQkJCQkJCQkJCX07DQotCQlERUZJTkVfR0xPQkFMX0FSUkFZKHBSdW50aW1lKTsNCi0JfQ0KLQ0KLQl7DQotCQlGWF9MUENXU1RSIEFycmF5TmFtZSA9IChGWF9MUENXU1RSKUwiUkVfTlVNQkVSX0VOVFJZX0NPTU1BX1NFUCI7DQotCQlGWF9MUENXU1RSIEFycmF5Q29udGVudFtdID0geyhGWF9MUENXU1RSKUwiWystXT9cXGQqLD9cXGQqIn07DQotCQkNCi0JCURFRklORV9HTE9CQUxfQVJSQVkocFJ1bnRpbWUpOw0KLQl9DQotDQotCXsNCi0JCUZYX0xQQ1dTVFIgQXJyYXlOYW1lID0gKEZYX0xQQ1dTVFIpTCJSRV9OVU1CRVJfQ09NTUlUX0NPTU1BX1NFUCI7DQotCQlGWF9MUENXU1RSIEFycmF5Q29udGVudFtdID0geyhGWF9MUENXU1RSKUwiWystXT9cXGQrKFsuLF1cXGQrKT8iLCAgICAgICAgICAgICAgIC8qIC0xLDAgb3IgLTEgKi8NCi0JCQkJCQkJCQkJKEZYX0xQQ1dTVFIpTCJbKy1dP1suLF1cXGQrIiwgICAgICAgICAgICAgICAgICAgLyogLSwxICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChGWF9MUENXU1RSKUwiWystXT9cXGQrWy4sXSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLTEsICovDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07DQotCQlERUZJTkVfR0xPQkFMX0FSUkFZKHBSdW50aW1lKTsNCi0JfQ0KLQ0KLQl7DQotCQlGWF9MUENXU1RSIEFycmF5TmFtZSA9IChGWF9MUENXU1RSKUwiUkVfWklQX0VOVFJZIjsNCi0gICAgICAgIEZYX0xQQ1dTVFIgQXJyYXlDb250ZW50W10gPSB7KEZYX0xQQ1dTVFIpTCJcXGR7MCw1fSJ9Ow0KLQkJREVGSU5FX0dMT0JBTF9BUlJBWShwUnVudGltZSk7DQotCX0NCi0NCi0Jew0KLQkJRlhfTFBDV1NUUiBBcnJheU5hbWUgPSAoRlhfTFBDV1NUUilMIlJFX1pJUF9DT01NSVQiOw0KLQkJRlhfTFBDV1NUUiBBcnJheUNvbnRlbnRbXSA9IHsoRlhfTFBDV1NUUilMIlxcZHs1fSJ9Ow0KLQkJREVGSU5FX0dMT0JBTF9BUlJBWShwUnVudGltZSk7DQotCX0NCi0NCi0Jew0KLQkJRlhfTFBDV1NUUiBBcnJheU5hbWUgPSAoRlhfTFBDV1NUUilMIlJFX1pJUDRfRU5UUlkiOw0KLQkJRlhfTFBDV1NUUiBBcnJheUNvbnRlbnRbXSA9IHsoRlhfTFBDV1NUUilMIlxcZHswLDV9KFxcLnxbLSBdKT9cXGR7MCw0fSJ9Ow0KLQkJREVGSU5FX0dMT0JBTF9BUlJBWShwUnVudGltZSk7DQotCX0NCi0NCi0Jew0KLQkJRlhfTFBDV1NUUiBBcnJheU5hbWUgPSAoRlhfTFBDV1NUUilMIlJFX1pJUDRfQ09NTUlUIjsNCi0JCUZYX0xQQ1dTVFIgQXJyYXlDb250ZW50W10gPSB7KEZYX0xQQ1dTVFIpTCJcXGR7NX0oXFwufFstIF0pP1xcZHs0fSJ9Ow0KLQkJREVGSU5FX0dMT0JBTF9BUlJBWShwUnVudGltZSk7DQotCX0NCi0NCi0Jew0KLQkJRlhfTFBDV1NUUiBBcnJheU5hbWUgPSAoRlhfTFBDV1NUUilMIlJFX1BIT05FX0VOVFJZIjsNCi0JCUZYX0xQQ1dTVFIgQXJyYXlDb250ZW50W10gPSB7DQotCQkJCShGWF9MUENXU1RSKUwiXFxkezAsM30oXFwufFstIF0pP1xcZHswLDN9KFxcLnxbLSBdKT9cXGR7MCw0fSIsCQkvKiA1NTUtMTIzNCBvciA0MDggNTU1LTEyMzQgKi8NCi0JCQkJKEZYX0xQQ1dTVFIpTCJcXChcXGR7MCwzfSIsCQkJCQkJCQkJCQkvKiAoNDA4ICovDQotCQkJCShGWF9MUENXU1RSKUwiXFwoXFxkezAsM31cXCkoXFwufFstIF0pP1xcZHswLDN9KFxcLnxbLSBdKT9cXGR7MCw0fSIsCS8qICg0MDgpIDU1NS0xMjM0ICovDQotCQkJCQkvKiAoYWxsb3cgdGhlIGFkZGl0aW9uIG9mIHBhcmVucyBhcyBhbiBhZnRlcnRob3VnaHQpICovDQotCQkJCShGWF9MUENXU1RSKUwiXFwoXFxkezAsM30oXFwufFstIF0pP1xcZHswLDN9KFxcLnxbLSBdKT9cXGR7MCw0fSIsCS8qICg0MDggNTU1LTEyMzQgKi8NCi0JCQkJKEZYX0xQQ1dTVFIpTCJcXGR7MCwzfVxcKShcXC58Wy0gXSk/XFxkezAsM30oXFwufFstIF0pP1xcZHswLDR9IiwJLyogNDA4KSA1NTUtMTIzNCAqLw0KLQkJCQkoRlhfTFBDV1NUUilMIjAxMShcXC58Wy0gXFxkXSkqIgkJCQkJCQkJCQkvKiBpbnRlcm5hdGlvbmFsICovDQotCQkJfTsNCi0JCURFRklORV9HTE9CQUxfQVJSQVkocFJ1bnRpbWUpOw0KLQl9DQotDQotCXsNCi0JCUZYX0xQQ1dTVFIgQXJyYXlOYW1lID0gKEZYX0xQQ1dTVFIpTCJSRV9QSE9ORV9DT01NSVQiOw0KLQkJRlhfTFBDV1NUUiBBcnJheUNvbnRlbnRbXSA9IHsNCi0JCQkJCShGWF9MUENXU1RSKUwiXFxkezN9KFxcLnxbLSBdKT9cXGR7NH0iLAkJCQkJCQkvKiA1NTUtMTIzNCAqLw0KLQkJCQkJKEZYX0xQQ1dTVFIpTCJcXGR7M30oXFwufFstIF0pP1xcZHszfShcXC58Wy0gXSk/XFxkezR9IiwJCQkvKiA0MDggNTU1LTEyMzQgKi8NCi0JCQkJCShGWF9MUENXU1RSKUwiXFwoXFxkezN9XFwpKFxcLnxbLSBdKT9cXGR7M30oXFwufFstIF0pP1xcZHs0fSIsCS8qICg0MDgpIDU1NS0xMjM0ICovDQotCQkJCQkoRlhfTFBDV1NUUilMIjAxMShcXC58Wy0gXFxkXSkqIgkJCQkJCQkJCS8qIGludGVybmF0aW9uYWwgKi8NCi0JCQkJfTsNCi0JCURFRklORV9HTE9CQUxfQVJSQVkocFJ1bnRpbWUpOw0KLQl9DQotDQotCXsNCi0JCUZYX0xQQ1dTVFIgQXJyYXlOYW1lID0gKEZYX0xQQ1dTVFIpTCJSRV9TU05fRU5UUlkiOw0KLQkJRlhfTFBDV1NUUiBBcnJheUNvbnRlbnRbXSA9IHsoRlhfTFBDV1NUUilMIlxcZHswLDN9KFxcLnxbLSBdKT9cXGR7MCwyfShcXC58Wy0gXSk/XFxkezAsNH0ifTsNCi0JCURFRklORV9HTE9CQUxfQVJSQVkocFJ1bnRpbWUpOw0KLQl9DQotDQotCXsNCi0JCUZYX0xQQ1dTVFIgQXJyYXlOYW1lID0gKEZYX0xQQ1dTVFIpTCJSRV9TU05fQ09NTUlUIjsNCi0JCUZYX0xQQ1dTVFIgQXJyYXlDb250ZW50W10gPSB7KEZYX0xQQ1dTVFIpTCJcXGR7M30oXFwufFstIF0pP1xcZHsyfShcXC58Wy0gXSk/XFxkezR9In07DQotCQlERUZJTkVfR0xPQkFMX0FSUkFZKHBSdW50aW1lKTsNCi0JfQ0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KYXZhU2NyaXB0LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0lKYXZhU2NyaXB0LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0RlZmluZS5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19PYmplY3QuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfVmFsdWUuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvQ29uc3RzLmgiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBib3JkZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0JFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfQm9yZGVyKQorCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9TVFJJTkcocywJc29saWQpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhiLAliZXZlbGVkKQorCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9TVFJJTkcoZCwJZGFzaGVkKQorCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9TVFJJTkcoaSwJaW5zZXQpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyh1LAl1bmRlcmxpbmUpCitFTkRfSlNfU1RBVElDX0NPTlNUKCkKKworSU1QTEVNRU5UX0pTX0NMQVNTX0NPTlNUKENKU19Cb3JkZXIsYm9yZGVyKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZGlzcGxheSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQkVHSU5fSlNfU1RBVElDX0NPTlNUKENKU19EaXNwbGF5KQorCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9OVU1CRVIodmlzaWJsZSwJMCkKKwlKU19TVEFUSUNfQ09OU1RfRU5UUllfTlVNQkVSKGhpZGRlbiwJMSkKKwlKU19TVEFUSUNfQ09OU1RfRU5UUllfTlVNQkVSKG5vUHJpbnQsCTIpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX05VTUJFUihub1ZpZXcsCTMpCitFTkRfSlNfU1RBVElDX0NPTlNUKCkKKworSU1QTEVNRU5UX0pTX0NMQVNTX0NPTlNUKENKU19EaXNwbGF5LGRpc3BsYXkpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBmb250IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitCRUdJTl9KU19TVEFUSUNfQ09OU1QoQ0pTX0ZvbnQpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhUaW1lcywJCVRpbWVzLVJvbWFuKQorCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9TVFJJTkcoVGltZXNCLAlUaW1lcy1Cb2xkKQorCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9TVFJJTkcoVGltZXNJLAlUaW1lcy1JdGFsaWMpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhUaW1lc0JJLAlUaW1lcy1Cb2xkSXRhbGljKQorCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9TVFJJTkcoSGVsdiwJCUhlbHZldGljYSkKKwlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKEhlbHZCLAkJSGVsdmV0aWNhLUJvbGQpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhIZWx2SSwJCUhlbHZldGljYS1PYmxpcXVlKQorCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9TVFJJTkcoSGVsdkJJLAlIZWx2ZXRpY2EtQm9sZE9ibGlxdWUpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhDb3VyLAkJQ291cmllcikKKwlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKENvdXJCLAkJQ291cmllci1Cb2xkKQorCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9TVFJJTkcoQ291ckksCQlDb3VyaWVyLU9ibGlxdWUpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhDb3VyQkksCUNvdXJpZXItQm9sZE9ibGlxdWUpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhTeW1ib2wsCVN5bWJvbCkKKwlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKFphcGZELAkJWmFwZkRpbmdiYXRzKQorRU5EX0pTX1NUQVRJQ19DT05TVCgpCisKK0lNUExFTUVOVF9KU19DTEFTU19DT05TVChDSlNfRm9udCxmb250KQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaGlnaGxpZ2h0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitCRUdJTl9KU19TVEFUSUNfQ09OU1QoQ0pTX0hpZ2hsaWdodCkKKwlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKG4sCW5vbmUpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhpLAlpbnZlcnQpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhwLAlwdXNoKQorCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9TVFJJTkcobywJb3V0bGluZSkKK0VORF9KU19TVEFUSUNfQ09OU1QoKQorCitJTVBMRU1FTlRfSlNfQ0xBU1NfQ09OU1QoQ0pTX0hpZ2hsaWdodCxoaWdobGlnaHQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwb3NpdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQkVHSU5fSlNfU1RBVElDX0NPTlNUKENKU19Qb3NpdGlvbikKKwlKU19TVEFUSUNfQ09OU1RfRU5UUllfTlVNQkVSKHRleHRPbmx5LAkJMCkKKwlKU19TVEFUSUNfQ09OU1RfRU5UUllfTlVNQkVSKGljb25Pbmx5LAkJMSkKKwlKU19TVEFUSUNfQ09OU1RfRU5UUllfTlVNQkVSKGljb25UZXh0ViwJCTIpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX05VTUJFUih0ZXh0SWNvblYsCQkzKQorCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9OVU1CRVIoaWNvblRleHRILAkJNCkKKwlKU19TVEFUSUNfQ09OU1RfRU5UUllfTlVNQkVSKHRleHRJY29uSCwJCTUpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX05VTUJFUihvdmVybGF5LAkJNikKK0VORF9KU19TVEFUSUNfQ09OU1QoKQorCitJTVBMRU1FTlRfSlNfQ0xBU1NfQ09OU1QoQ0pTX1Bvc2l0aW9uLHBvc2l0aW9uKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2NhbGVIb3cgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0JFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfU2NhbGVIb3cpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX05VTUJFUihwcm9wb3J0aW9uYWwsCTApCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX05VTUJFUihhbmFtb3JwaGljLAkxKQorRU5EX0pTX1NUQVRJQ19DT05TVCgpCisKK0lNUExFTUVOVF9KU19DTEFTU19DT05TVChDSlNfU2NhbGVIb3csc2NhbGVIb3cpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzY2FsZVdoZW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0JFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfU2NhbGVXaGVuKQorCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9OVU1CRVIoYWx3YXlzLAkwKQorCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9OVU1CRVIobmV2ZXIsCQkxKQorCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9OVU1CRVIodG9vQmlnLAkyKQorCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9OVU1CRVIodG9vU21hbGwsCTMpCitFTkRfSlNfU1RBVElDX0NPTlNUKCkKKworSU1QTEVNRU5UX0pTX0NMQVNTX0NPTlNUKENKU19TY2FsZVdoZW4sc2NhbGVXaGVuKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3R5bGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0JFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfU3R5bGUpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhjaCwJY2hlY2spCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhjciwJY3Jvc3MpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhkaSwJZGlhbW9uZCkKKwlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKGNpLAljaXJjbGUpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhzdCwJc3RhcikKKwlKU19TVEFUSUNfQ09OU1RfRU5UUllfU1RSSU5HKHNxLAlzcXVhcmUpCitFTkRfSlNfU1RBVElDX0NPTlNUKCkKKworSU1QTEVNRU5UX0pTX0NMQVNTX0NPTlNUKENKU19TdHlsZSxzdHlsZSkKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gem9vbXR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0JFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfWm9vbXR5cGUpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhub25lLAlOb1ZhcnkpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhmaXRQLAlGaXRQYWdlKQorCUpTX1NUQVRJQ19DT05TVF9FTlRSWV9TVFJJTkcoZml0VywJRml0V2lkdGgpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhmaXRILAlGaXRIZWlnaHQpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhmaXRWLAlGaXRWaXNpYmxlV2lkdGgpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhwcmVmLAlQcmVmZXJyZWQpCisJSlNfU1RBVElDX0NPTlNUX0VOVFJZX1NUUklORyhyZWZXLAlSZWZsb3dXaWR0aCkKK0VORF9KU19TVEFUSUNfQ09OU1QoKQorCitJTVBMRU1FTlRfSlNfQ0xBU1NfQ09OU1QoQ0pTX1pvb210eXBlLHpvb210eXBlKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0pTX0dsb2JhbENvbnN0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworaW50CUNKU19HbG9iYWxDb25zdHM6OkluaXQoSUpTX1J1bnRpbWUqIHBSdW50aW1lKQoreworCURFRklORV9HTE9CQUxfQ09OU1QocFJ1bnRpbWUsIElEU19HUkVBVEVSX1RIQU4gLCBJbnZhbGlkIHZhbHVlOiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcy4pOworCURFRklORV9HTE9CQUxfQ09OU1QocFJ1bnRpbWUsIElEU19HVF9BTkRfTFQsSW52YWxpZCB2YWx1ZTogbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcy4pOworCURFRklORV9HTE9CQUxfQ09OU1QocFJ1bnRpbWUsIElEU19MRVNTX1RIQU4sSW52YWxpZCB2YWx1ZTogbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMuKTsKKwlERUZJTkVfR0xPQkFMX0NPTlNUKHBSdW50aW1lLCBJRFNfSU5WQUxJRF9NT05USCwqKiBJbnZhbGlkICoqKTsKKwlERUZJTkVfR0xPQkFMX0NPTlNUKHBSdW50aW1lLCBJRFNfSU5WQUxJRF9EQVRFLEludmFsaWQgZGF0ZS90aW1lOiBwbGVhc2UgZW5zdXJlIHRoYXQgdGhlIGRhdGUvdGltZSBleGlzdHMuIEZpZWxkKTsKKwlERUZJTkVfR0xPQkFMX0NPTlNUKHBSdW50aW1lLCBJRFNfSU5WQUxJRF9WQUxVRSxUaGUgdmFsdWUgZW50ZXJlZCBkb2VzIG5vdCBtYXRjaCB0aGUgZm9ybWF0IG9mIHRoZSBmaWVsZCk7CisJREVGSU5FX0dMT0JBTF9DT05TVChwUnVudGltZSwgSURTX0FNLGFtKTsKKwlERUZJTkVfR0xPQkFMX0NPTlNUKHBSdW50aW1lLCBJRFNfUE0scG0pOworCURFRklORV9HTE9CQUxfQ09OU1QocFJ1bnRpbWUsIElEU19NT05USF9JTkZPLEphbnVhcnlbMV1GZWJydWFyeVsyXU1hcmNoWzNdQXByaWxbNF1NYXlbNV1KdW5lWzZdSnVseVs3XUF1Z3VzdFs4XVNlcHRlbWJlcls5XU9jdG9iZXJbMTBdTm92ZW1iZXJbMTFdRGVjZW1iZXJbMTJdU2VwdFs5XUphblsxXUZlYlsyXU1hclszXUFwcls0XUp1bls2XUp1bFs3XUF1Z1s4XVNlcFs5XU9jdFsxMF1Ob3ZbMTFdRGVjWzEyXSk7CisJREVGSU5FX0dMT0JBTF9DT05TVChwUnVudGltZSwgSURTX1NUQVJUVVBfQ09OU09MRV9NU0csICoqIF5fXiAqKik7CisKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENKU19HbG9iYWxBcnJheXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2ludAlDSlNfR2xvYmFsQXJyYXlzOjpJbml0KElKU19SdW50aW1lKiBwUnVudGltZSkKK3sKKwl7CisJCUZYX0xQQ1dTVFIgQXJyYXlOYW1lID0gKEZYX0xQQ1dTVFIpTCJSRV9OVU1CRVJfRU5UUllfRE9UX1NFUCI7CisJCUZYX0xQQ1dTVFIgQXJyYXlDb250ZW50W10gPSB7KEZYX0xQQ1dTVFIpTCJbKy1dP1xcZCpcXC4/XFxkKiJ9OworCQlERUZJTkVfR0xPQkFMX0FSUkFZKHBSdW50aW1lKTsKKwl9CisKKwl7CisJCUZYX0xQQ1dTVFIgQXJyYXlOYW1lID0gKEZYX0xQQ1dTVFIpTCJSRV9OVU1CRVJfQ09NTUlUX0RPVF9TRVAiOworCQlGWF9MUENXU1RSIEFycmF5Q29udGVudFtdID0geyhGWF9MUENXU1RSKUwiWystXT9cXGQrKFxcLlxcZCspPyIsICAgICAgICAgICAgICAgIC8qIC0xLjAgb3IgLTEgKi8KKwkJCQkJCQkJCQkoRlhfTFBDV1NUUilMIlsrLV0/XFwuXFxkKyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC0uMSAqLworCQkJCQkJCQkJCShGWF9MUENXU1RSKUwiWystXT9cXGQrXFwuIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogLTEuICovCisJCQkJCQkJCQkJfTsKKwkJREVGSU5FX0dMT0JBTF9BUlJBWShwUnVudGltZSk7CisJfQorCisJeworCQlGWF9MUENXU1RSIEFycmF5TmFtZSA9IChGWF9MUENXU1RSKUwiUkVfTlVNQkVSX0VOVFJZX0NPTU1BX1NFUCI7CisJCUZYX0xQQ1dTVFIgQXJyYXlDb250ZW50W10gPSB7KEZYX0xQQ1dTVFIpTCJbKy1dP1xcZCosP1xcZCoifTsKKwkJCisJCURFRklORV9HTE9CQUxfQVJSQVkocFJ1bnRpbWUpOworCX0KKworCXsKKwkJRlhfTFBDV1NUUiBBcnJheU5hbWUgPSAoRlhfTFBDV1NUUilMIlJFX05VTUJFUl9DT01NSVRfQ09NTUFfU0VQIjsKKwkJRlhfTFBDV1NUUiBBcnJheUNvbnRlbnRbXSA9IHsoRlhfTFBDV1NUUilMIlsrLV0/XFxkKyhbLixdXFxkKyk/IiwgICAgICAgICAgICAgICAvKiAtMSwwIG9yIC0xICovCisJCQkJCQkJCQkJKEZYX0xQQ1dTVFIpTCJbKy1dP1suLF1cXGQrIiwgICAgICAgICAgICAgICAgICAgLyogLSwxICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEZYX0xQQ1dTVFIpTCJbKy1dP1xcZCtbLixdIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtMSwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworCQlERUZJTkVfR0xPQkFMX0FSUkFZKHBSdW50aW1lKTsKKwl9CisKKwl7CisJCUZYX0xQQ1dTVFIgQXJyYXlOYW1lID0gKEZYX0xQQ1dTVFIpTCJSRV9aSVBfRU5UUlkiOworICAgICAgICBGWF9MUENXU1RSIEFycmF5Q29udGVudFtdID0geyhGWF9MUENXU1RSKUwiXFxkezAsNX0ifTsKKwkJREVGSU5FX0dMT0JBTF9BUlJBWShwUnVudGltZSk7CisJfQorCisJeworCQlGWF9MUENXU1RSIEFycmF5TmFtZSA9IChGWF9MUENXU1RSKUwiUkVfWklQX0NPTU1JVCI7CisJCUZYX0xQQ1dTVFIgQXJyYXlDb250ZW50W10gPSB7KEZYX0xQQ1dTVFIpTCJcXGR7NX0ifTsKKwkJREVGSU5FX0dMT0JBTF9BUlJBWShwUnVudGltZSk7CisJfQorCisJeworCQlGWF9MUENXU1RSIEFycmF5TmFtZSA9IChGWF9MUENXU1RSKUwiUkVfWklQNF9FTlRSWSI7CisJCUZYX0xQQ1dTVFIgQXJyYXlDb250ZW50W10gPSB7KEZYX0xQQ1dTVFIpTCJcXGR7MCw1fShcXC58Wy0gXSk/XFxkezAsNH0ifTsKKwkJREVGSU5FX0dMT0JBTF9BUlJBWShwUnVudGltZSk7CisJfQorCisJeworCQlGWF9MUENXU1RSIEFycmF5TmFtZSA9IChGWF9MUENXU1RSKUwiUkVfWklQNF9DT01NSVQiOworCQlGWF9MUENXU1RSIEFycmF5Q29udGVudFtdID0geyhGWF9MUENXU1RSKUwiXFxkezV9KFxcLnxbLSBdKT9cXGR7NH0ifTsKKwkJREVGSU5FX0dMT0JBTF9BUlJBWShwUnVudGltZSk7CisJfQorCisJeworCQlGWF9MUENXU1RSIEFycmF5TmFtZSA9IChGWF9MUENXU1RSKUwiUkVfUEhPTkVfRU5UUlkiOworCQlGWF9MUENXU1RSIEFycmF5Q29udGVudFtdID0geworCQkJCShGWF9MUENXU1RSKUwiXFxkezAsM30oXFwufFstIF0pP1xcZHswLDN9KFxcLnxbLSBdKT9cXGR7MCw0fSIsCQkvKiA1NTUtMTIzNCBvciA0MDggNTU1LTEyMzQgKi8KKwkJCQkoRlhfTFBDV1NUUilMIlxcKFxcZHswLDN9IiwJCQkJCQkJCQkJCS8qICg0MDggKi8KKwkJCQkoRlhfTFBDV1NUUilMIlxcKFxcZHswLDN9XFwpKFxcLnxbLSBdKT9cXGR7MCwzfShcXC58Wy0gXSk/XFxkezAsNH0iLAkvKiAoNDA4KSA1NTUtMTIzNCAqLworCQkJCQkvKiAoYWxsb3cgdGhlIGFkZGl0aW9uIG9mIHBhcmVucyBhcyBhbiBhZnRlcnRob3VnaHQpICovCisJCQkJKEZYX0xQQ1dTVFIpTCJcXChcXGR7MCwzfShcXC58Wy0gXSk/XFxkezAsM30oXFwufFstIF0pP1xcZHswLDR9IiwJLyogKDQwOCA1NTUtMTIzNCAqLworCQkJCShGWF9MUENXU1RSKUwiXFxkezAsM31cXCkoXFwufFstIF0pP1xcZHswLDN9KFxcLnxbLSBdKT9cXGR7MCw0fSIsCS8qIDQwOCkgNTU1LTEyMzQgKi8KKwkJCQkoRlhfTFBDV1NUUilMIjAxMShcXC58Wy0gXFxkXSkqIgkJCQkJCQkJCQkvKiBpbnRlcm5hdGlvbmFsICovCisJCQl9OworCQlERUZJTkVfR0xPQkFMX0FSUkFZKHBSdW50aW1lKTsKKwl9CisKKwl7CisJCUZYX0xQQ1dTVFIgQXJyYXlOYW1lID0gKEZYX0xQQ1dTVFIpTCJSRV9QSE9ORV9DT01NSVQiOworCQlGWF9MUENXU1RSIEFycmF5Q29udGVudFtdID0geworCQkJCQkoRlhfTFBDV1NUUilMIlxcZHszfShcXC58Wy0gXSk/XFxkezR9IiwJCQkJCQkJLyogNTU1LTEyMzQgKi8KKwkJCQkJKEZYX0xQQ1dTVFIpTCJcXGR7M30oXFwufFstIF0pP1xcZHszfShcXC58Wy0gXSk/XFxkezR9IiwJCQkvKiA0MDggNTU1LTEyMzQgKi8KKwkJCQkJKEZYX0xQQ1dTVFIpTCJcXChcXGR7M31cXCkoXFwufFstIF0pP1xcZHszfShcXC58Wy0gXSk/XFxkezR9IiwJLyogKDQwOCkgNTU1LTEyMzQgKi8KKwkJCQkJKEZYX0xQQ1dTVFIpTCIwMTEoXFwufFstIFxcZF0pKiIJCQkJCQkJCQkvKiBpbnRlcm5hdGlvbmFsICovCisJCQkJfTsKKwkJREVGSU5FX0dMT0JBTF9BUlJBWShwUnVudGltZSk7CisJfQorCisJeworCQlGWF9MUENXU1RSIEFycmF5TmFtZSA9IChGWF9MUENXU1RSKUwiUkVfU1NOX0VOVFJZIjsKKwkJRlhfTFBDV1NUUiBBcnJheUNvbnRlbnRbXSA9IHsoRlhfTFBDV1NUUilMIlxcZHswLDN9KFxcLnxbLSBdKT9cXGR7MCwyfShcXC58Wy0gXSk/XFxkezAsNH0ifTsKKwkJREVGSU5FX0dMT0JBTF9BUlJBWShwUnVudGltZSk7CisJfQorCisJeworCQlGWF9MUENXU1RSIEFycmF5TmFtZSA9IChGWF9MUENXU1RSKUwiUkVfU1NOX0NPTU1JVCI7CisJCUZYX0xQQ1dTVFIgQXJyYXlDb250ZW50W10gPSB7KEZYX0xQQ1dTVFIpTCJcXGR7M30oXFwufFstIF0pP1xcZHsyfShcXC58Wy0gXSk/XFxkezR9In07CisJCURFRklORV9HTE9CQUxfQVJSQVkocFJ1bnRpbWUpOworCX0KKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L0RvY3VtZW50LmNwcCBiL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvRG9jdW1lbnQuY3BwCmluZGV4IGVjOTMwYjguLjBhNmFjZmEgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvRG9jdW1lbnQuY3BwCisrKyBiL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvRG9jdW1lbnQuY3BwCkBAIC0xLDI1MjcgKzEsMjUyNyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KYXZhU2NyaXB0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9JSmF2YVNjcmlwdC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRGVmaW5lLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19PYmplY3QuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1ZhbHVlLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9Eb2N1bWVudC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRXZlbnRIYW5kbGVyLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19Db250ZXh0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19SdW50aW1lLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9hcHAuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0ZpZWxkLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9JY29uLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9GaWVsZC5oIg0KLQ0KLXN0YXRpYyB2ODo6SXNvbGF0ZSogR2V0SXNvbGF0ZShJRlhKU19Db250ZXh0KiBjYykNCi17DQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotDQotCUNKU19SdW50aW1lKiBwUnVudGltZSA9IHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKTsNCi0JQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOw0KLQ0KLQlyZXR1cm4gcFJ1bnRpbWUtPkdldElzb2xhdGUoKTsNCi19DQotDQotQkVHSU5fSlNfU1RBVElDX0NPTlNUKENKU19QcmludFBhcmFtc09iaikNCi1FTkRfSlNfU1RBVElDX0NPTlNUKCkNCi0NCi1CRUdJTl9KU19TVEFUSUNfUFJPUChDSlNfUHJpbnRQYXJhbXNPYmopDQotRU5EX0pTX1NUQVRJQ19QUk9QKCkNCi0NCi1CRUdJTl9KU19TVEFUSUNfTUVUSE9EKENKU19QcmludFBhcmFtc09iaikNCi1FTkRfSlNfU1RBVElDX01FVEhPRCgpDQotDQotSU1QTEVNRU5UX0pTX0NMQVNTKENKU19QcmludFBhcmFtc09iaiwgUHJpbnRQYXJhbXNPYmopDQotDQotUHJpbnRQYXJhbXNPYmo6OlByaW50UGFyYW1zT2JqKENKU19PYmplY3QqIHBKU09iamVjdCkNCi06IENKU19FbWJlZE9iaihwSlNPYmplY3QpDQotew0KLQliVUkgPSBUUlVFOw0KLQluU3RhcnQgPSAwOw0KLQluRW5kID0gMDsNCi0JYlNpbGVudCA9IEZBTFNFOw0KLQliU2hyaW5rVG9GaXQgPSBGQUxTRTsNCi0JYlByaW50QXNJbWFnZSA9IEZBTFNFOw0KLQliUmV2ZXJzZSA9IEZBTFNFOw0KLQliQW5ub3RhdGlvbnMgPSBUUlVFOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERvY3VtZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi0jZGVmaW5lIE1JTldJRFRIICA1LjBmDQotI2RlZmluZSBNSU5IRUlHSFQgNS4wZg0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfRG9jdW1lbnQpDQotRU5EX0pTX1NUQVRJQ19DT05TVCgpDQotDQotQkVHSU5fSlNfU1RBVElDX1BST1AoQ0pTX0RvY3VtZW50KQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShBREJFKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShhdXRob3IpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGJhc2VVUkwpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGJvb2ttYXJrUm9vdCkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkoY2FsY3VsYXRlKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShDb2xsYWIpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGNyZWF0aW9uRGF0ZSkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkoY3JlYXRvcikNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkoZGVsYXkpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGRpcnR5KQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShkb2N1bWVudEZpbGVOYW1lKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShleHRlcm5hbCkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkoZmlsZXNpemUpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGljb25zKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShpbmZvKSAgIA0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShrZXl3b3JkcykNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkobGF5b3V0KQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShtZWRpYSkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkobW9kRGF0ZSkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkobW91c2VYKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShtb3VzZVkpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKG51bUZpZWxkcykNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkobnVtUGFnZXMpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHBhZ2VOdW0pICAgDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHBhZ2VXaW5kb3dSZWN0KQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShwYXRoKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShwcm9kdWNlcikNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkoc3ViamVjdCkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkodGl0bGUpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHpvb20pDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHpvb21UeXBlKQ0KLUVORF9KU19TVEFUSUNfUFJPUCgpDQotDQotQkVHSU5fSlNfU1RBVElDX01FVEhPRChDSlNfRG9jdW1lbnQpDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoYWRkQW5ub3QsMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShhZGRGaWVsZCwgNCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShhZGRMaW5rLCAwKQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGFkZEljb24sIDApDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoY2FsY3VsYXRlTm93LCAwKQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGNsb3NlRG9jLCAwKQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGNyZWF0ZURhdGFPYmplY3QsIDApDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZGVsZXRlUGFnZXMsIDIpDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZXhwb3J0QXNUZXh0LCAzKQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGV4cG9ydEFzRkRGLCA2KQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGV4cG9ydEFzWEZERiwgNSkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShleHRyYWN0UGFnZXMsIDMpDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZ2V0QW5ub3QsIDApDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZ2V0QW5ub3RzLCAyKQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGdldEFubm90M0QsIDIpDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZ2V0QW5ub3RzM0QsIDEpDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZ2V0RmllbGQsIDEpDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZ2V0SWNvbiwgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShnZXRMaW5rcywgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShnZXROdGhGaWVsZE5hbWUsIDEpDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZ2V0T0NHcywgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShnZXRQYWdlQm94LCAwKQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGdldFBhZ2VOdGhXb3JkLCAzKQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGdldFBhZ2VOdGhXb3JkUXVhZHMsIDIpDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZ2V0UGFnZU51bVdvcmRzLCAxKQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGdldFByaW50UGFyYW1zLCAwKQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGdldFVSTCwgMikNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShpbXBvcnRBbkZERiwgMSkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShpbXBvcnRBblhGREYsIDEpDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoaW1wb3J0VGV4dERhdGEsIDIpDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoaW5zZXJ0UGFnZXMsIDQpDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkobWFpbEZvcm0sIDYpDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkocHJpbnQsIDkpDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkocmVtb3ZlRmllbGQsIDEpDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkocmVwbGFjZVBhZ2VzLCA0KQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKHJlc2V0Rm9ybSwgMSkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShyZW1vdmVJY29uLCAwKQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKHNhdmVBcywgNSkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShzdWJtaXRGb3JtLCAyMykNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShtYWlsRG9jLCAwKQkJDQotRU5EX0pTX1NUQVRJQ19NRVRIT0QoKQ0KLQ0KLUlNUExFTUVOVF9KU19DTEFTUyhDSlNfRG9jdW1lbnQsIERvY3VtZW50KQ0KLQ0KLUZYX0JPT0wJQ0pTX0RvY3VtZW50OjpJbml0SW5zdGFuY2UoSUZYSlNfQ29udGV4dCogY2MpDQotew0KLQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotDQotCURvY3VtZW50KiBwRG9jID0gKERvY3VtZW50KilHZXRFbWJlZE9iamVjdCgpOw0KLQlBU1NFUlQocERvYyAhPSBOVUxMKTsNCi0JDQotCXBEb2MtPkF0dGFjaERvYyhwQ29udGV4dC0+R2V0UmVhZGVyRG9jdW1lbnQoKSk7DQotCXBEb2MtPlNldElzb2xhdGUocENvbnRleHQtPkdldEpTUnVudGltZSgpLT5HZXRJc29sYXRlKCkpOw0KLQlyZXR1cm4gVFJVRTsNCi19Ow0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb2N1bWVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1Eb2N1bWVudDo6RG9jdW1lbnQoQ0pTX09iamVjdCogcEpTT2JqZWN0KSA6IENKU19FbWJlZE9iaihwSlNPYmplY3QpLA0KLQltX2N3QmFzZVVSTChMIiIpLA0KLQltX3BJY29uVHJlZShOVUxMKSwNCi0JbV9wRG9jdW1lbnQoTlVMTCksDQotCW1fYkRlbGF5KEZBTFNFKSwNCi0JbV9pc29sYXRlKE5VTEwpDQotew0KLX0NCi0NCi1Eb2N1bWVudDo6fkRvY3VtZW50KCkNCi17DQotCWlmIChtX3BJY29uVHJlZSkNCi0Jew0KLQkJbV9wSWNvblRyZWUtPkRlbGV0ZUljb25UcmVlKCk7DQotCQlkZWxldGUgbV9wSWNvblRyZWU7DQotCQltX3BJY29uVHJlZSA9IE5VTEw7DQotCX0NCi0JZm9yIChpbnQgaT0wOyBpPG1fRGVsYXlEYXRhLkdldFNpemUoKTsgaSsrKQ0KLQl7DQotCQlpZiAoQ0pTX0RlbGF5RGF0YSogcERhdGEgPSBtX0RlbGF5RGF0YS5HZXRBdChpKSkNCi0JCXsNCi0JCQlkZWxldGUgcERhdGE7DQotCQkJcERhdGEgPSBOVUxMOw0KLQkJCW1fRGVsYXlEYXRhLlNldEF0KGksIE5VTEwpOw0KLQkJCQ0KLQkJfQ0KLQl9DQotDQotCW1fRGVsYXlEYXRhLlJlbW92ZUFsbCgpOw0KLQltX0RlbGF5QW5ub3REYXRhLlJlbW92ZUFsbCgpOw0KLX0NCi0NCi0vL3RoZSB0b3RhbCBudW1iZXIgb2YgZmlsZWRzIGluIGRvY3VtZW50Lg0KLUZYX0JPT0wgRG9jdW1lbnQ6Om51bUZpZWxkcyhPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlpZiAoIXZwLklzR2V0dGluZygpKSByZXR1cm4gRkFMU0U7DQotDQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0gICAJQ1BERlNES19JbnRlckZvcm0gKnBJbnRlckZvcm0gPSBtX3BEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7DQotCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOw0KLQ0KLQlDUERGX0ludGVyRm9ybSAqcFBERkZvcm0gPSBwSW50ZXJGb3JtLT5HZXRJbnRlckZvcm0oKTsNCi0JQVNTRVJUKHBQREZGb3JtICE9IE5VTEwpOw0KLQ0KLQl2cCA8PCAoaW50KXBQREZGb3JtLT5Db3VudEZpZWxkcygpOw0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBEb2N1bWVudDo6ZGlydHkoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAodnAuSXNHZXR0aW5nKCkpDQotCXsNCi0JCWlmIChtX3BEb2N1bWVudC0+R2V0Q2hhbmdlTWFyaygpKQ0KLQkJCXZwIDw8IHRydWU7DQotCQllbHNlDQotCQkJdnAgPDwgZmFsc2U7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlib29sIGJDaGFuZ2VkID0gZmFsc2U7DQotDQotCQl2cCA+PiBiQ2hhbmdlZDsNCi0NCi0JCWlmIChiQ2hhbmdlZCkNCi0JCQltX3BEb2N1bWVudC0+U2V0Q2hhbmdlTWFyaygpOw0KLQkJZWxzZQ0KLQkJCW1fcERvY3VtZW50LT5DbGVhckNoYW5nZU1hcmsoKTsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBEb2N1bWVudDo6QURCRShPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmICh2cC5Jc0dldHRpbmcoKSkNCi0Jew0KLQkJdnAuU2V0TnVsbCgpOw0KLQl9DQotCWVsc2UNCi0Jew0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIERvY3VtZW50OjpwYWdlTnVtKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKHZwLklzR2V0dGluZygpKQ0KLQl7CQkJDQotCQlpZiAoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gbV9wRG9jdW1lbnQtPkdldEN1cnJlbnRWaWV3KCkpDQotCQl7DQotCQkJdnAgPDwgcFBhZ2VWaWV3LT5HZXRQYWdlSW5kZXgoKTsNCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsJCQ0KLQkJaW50IGlQYWdlQ291bnQgPSBtX3BEb2N1bWVudC0+R2V0UGFnZUNvdW50KCk7DQotDQotCQlpbnQgaVBhZ2VOdW0gPSAwOw0KLQkJdnAgPj4gaVBhZ2VOdW07DQotDQotCQlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gbV9wRG9jdW1lbnQtPkdldEVudigpOw0KLQkJaWYoIXBFbnYpDQotCQkJcmV0dXJuIEZBTFNFOw0KLQ0KLQkJaWYgKGlQYWdlTnVtID49IDAgJiYgaVBhZ2VOdW0gPCBpUGFnZUNvdW50KQ0KLQkJew0KLQkJCSBwRW52LT5KU19kb2Nnb3RvUGFnZShpUGFnZU51bSk7DQotCQl9DQotCQllbHNlIGlmIChpUGFnZU51bSA+PSBpUGFnZUNvdW50KQ0KLQkJew0KLQkJCSBwRW52LT5KU19kb2Nnb3RvUGFnZShpUGFnZUNvdW50LTEpOw0KLQkJfQ0KLQkJZWxzZSBpZiAoaVBhZ2VOdW0gPCAwKQ0KLQkJew0KLQkJCSBwRW52LT5KU19kb2Nnb3RvUGFnZSgwKTsNCi0JCX0NCi0JfQ0KLQ0KLSAJcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OlBhcnNlclBhcmFtcyhKU09iamVjdCogcE9iaixDSlNfQW5ub3RPYmomIGFubm90b2JqKQ0KLXsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OmFkZEFubm90KE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0gCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIERvY3VtZW50OjphZGRGaWVsZChPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCS8vRG9lc24ndCBzdXBwb3J0Lg0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotLy9leHBvcnRzIGZvcm0gZmllbGRzIGFzIGEgdGFiLWRlbGltaXRlZCB0ZXh0IGZpbGUgdG8gYSBsb2NhbCBoYXJkIGRpc2suDQotLy9jb21tZW50OiBuZWVkIHJlYWRlciBzdXBwb3J0DQotLy9ub3RlIDogd2F0Y2ggdGhlIHRoaXJkIHBhcmFtZXRlcjpjUGF0aCwgZm9yIHdoYXQgY2FzZSBpdCBjYW4gYmUgc2FmZWx5IHNhdmVkPw0KLS8vaW50IENQREZTREtfSW50ZXJGb3JtOjpFeHBvcnRBc1RleHQoRlhfQk9PTCBiTm9QYXNzd29yZCxTdHJpbmdBcnJheSBhRmllbGRzLFN0cmluZyBjUGF0aCk7DQotLy9yZXR1cm4gdmFsdWUsIGludCB0aGUgaW5kZXggb2YgdGhlIHBhcmFtZXRlcnMgaWxsZWdhbCwgdGhlIGluZGV4IGlzIGJhc2VkIG9uIDEuDQotDQotRlhfQk9PTCBEb2N1bWVudDo6ZXhwb3J0QXNUZXh0KE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JaWYgKElzU2FmZU1vZGUoY2MpKSByZXR1cm4gVFJVRTsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLS8vZXhwb3J0cyBmb3JtIGZpZWxkcyBhcyBhIGZkZiBmaWxlIHRvIHRoZSBsb2NhbCBoYXJkIGRyaXZlDQotLy9jb21tZW50OiBuZWVkIHJlYWRlciBzdXBwb3J0cw0KLS8vbm90ZTp0aGUgbGFzdCBwYXJhbWV0ZXIgaGFzbid0IGJlZW4gY29uZmlybWVkLmJlY2F1c2UgdGhlIHByZXZpb3VzIG9uZSBibG9ja3MgdGhlIHdheS4NCi0vL2ludCBDUERGU0RLX0RvY3VtZW50OjpFeHBvcnRBc0ZERihGWF9CT09MIGJBbGxGaWVsZHMsQk9PTCBiTm9QYXNzd29yZCxTdHJpbmdBcnJheSBhRmllbGRzLEZYX0JPT0wgYkZsYWdzLFN0cmluZyBjUGF0aCxGWF9CT09MIGJBbm5vdGF0aW9ucyk7DQotDQotRlhfQk9PTCBEb2N1bWVudDo6ZXhwb3J0QXNGREYoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IEdldElzb2xhdGUoY2MpOw0KLQlpZiAoSXNTYWZlTW9kZShjYykpIHJldHVybiBUUlVFOw0KLQ0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmICghbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX0VYVFJBQ1RfQUNDRVNTKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlGWF9CT09MIGJBbGxGaWVsZHMgPSBwYXJhbXMuc2l6ZSgpID4gMCA/IChGWF9CT09MKXBhcmFtc1swXSA6IEZBTFNFOw0KLQlGWF9CT09MIGJOb1Bhc3NXb3JkID0gcGFyYW1zLnNpemUoKSA+IDEgPyAoRlhfQk9PTClwYXJhbXNbMV0gOiBUUlVFOw0KLQlGWF9CT09MIGJXaG9sZSA9IHBhcmFtcy5zaXplKCkgPiAyID8gKHBhcmFtc1syXS5HZXRUeXBlKCkgPT0gVlRfbnVsbCkgOiBUUlVFOw0KLQlDSlNfQXJyYXkgYXJyYXlGaWxlZHMoaXNvbGF0ZSk7DQotCWlmICghYldob2xlKQ0KLQkJYXJyYXlGaWxlZHMuQXR0YWNoKHBhcmFtc1syXSk7DQotCS8vRlhfQk9PTCBiRmxhZ3MgPSBwYXJhbXMuc2l6ZSgpID4gMyA/IChGWF9CT09MKXBhcmFtc1szXSA6IEZBTFNFOw0KLSAgICBDRlhfV2lkZVN0cmluZyBzd0ZpbGVQYXRoID0gcGFyYW1zLnNpemUoKSA+IDQgPyAoRlhfTFBDV1NUUilwYXJhbXNbNF0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKSA6IChGWF9MUENXU1RSKUwiIjsNCi0NCi0JaWYgKHN3RmlsZVBhdGguSXNFbXB0eSgpKQ0KLQl7DQotCQlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gbV9wRG9jdW1lbnQtPkdldEVudigpOw0KLQkJc3dGaWxlUGF0aCA9IHBFbnYtPkpTX2ZpZWxkQnJvd3NlKCk7DQotCQlpZihzd0ZpbGVQYXRoLklzRW1wdHkoKSkNCi0JCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCXN3RmlsZVBhdGggPSBhcHA6OlBERlBhdGhUb1N5c1BhdGgoc3dGaWxlUGF0aCk7DQotCX0NCi0gICAgDQotCW1fcERvY3VtZW50LT5TZXRGb2N1c0Fubm90KE5VTEwpOw0KLSAgIA0KLSAgICBDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybT0gKENQREZTREtfSW50ZXJGb3JtKiltX3BEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7DQotCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOw0KLQ0KLQlDUERGX0ludGVyRm9ybSogcFBERkZvcm0gPSBwSW50ZXJGb3JtLT5HZXRJbnRlckZvcm0oKTsNCi0JQVNTRVJUKHBQREZGb3JtICE9IE5VTEwpOw0KLQ0KLQlDRlhfUHRyQXJyYXkgYUZpZWxkczsNCi0NCi0JaWYgKGJXaG9sZSkNCi0Jew0KLQkJZm9yIChpbnQgaj0wLGpzej1wUERGRm9ybS0+Q291bnRGaWVsZHMoKTsgajxqc3o7IGorKykNCi0JCXsNCi0JCQlhRmllbGRzLkFkZChwUERGRm9ybS0+R2V0RmllbGQoaikpOw0KLQkJfQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJZm9yIChpbnQgaT0wLGlzej1hcnJheUZpbGVkcy5HZXRMZW5ndGgoKTsgaTxpc3o7IGkrKykNCi0JCXsNCi0JCQlDSlNfVmFsdWUgdmFsTmFtZShpc29sYXRlKTsNCi0JCQlhcnJheUZpbGVkcy5HZXRFbGVtZW50KGksdmFsTmFtZSk7DQotCQkJQ0ZYX1dpZGVTdHJpbmcgc3dOYW1lID0gdmFsTmFtZS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOw0KLQ0KLQkJCWZvciAoaW50IGo9MCwganN6PXBQREZGb3JtLT5Db3VudEZpZWxkcyhzd05hbWUpOyBqPGpzejsgaisrKQ0KLQkJCXsNCi0JCQkJYUZpZWxkcy5BZGQocFBERkZvcm0tPkdldEZpZWxkKGosIHN3TmFtZSkpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQlDRlhfUHRyQXJyYXkgZmllbGRzOw0KLQ0KLQlmb3IgKGludCBpPTAsc3o9YUZpZWxkcy5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0Jew0KLQkgICAgQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopYUZpZWxkc1tpXTsNCi0JCQ0KLQkJaWYgKCFiQWxsRmllbGRzKQ0KLQkJCWlmIChwRmllbGQtPkdldFZhbHVlKCkgPT0gTCIiKQ0KLQkJCQljb250aW51ZTsNCi0NCi0JCWlmIChiTm9QYXNzV29yZCkNCi0JCQlpZiAocEZpZWxkLT5HZXRGaWVsZEZsYWdzKCkgJiAweDIwMDApDQotCQkJCWNvbnRpbnVlOw0KLQ0KLSAgICAgICAgZmllbGRzLkFkZCgodm9pZCopcEZpZWxkKTsNCi0JfSAgICANCi0NCi0gICAgcmV0dXJuIHBJbnRlckZvcm0tPkV4cG9ydEZpZWxkc1RvRkRGRmlsZShzd0ZpbGVQYXRoLCBmaWVsZHMsIFRSVUUpOw0KLX0NCi0NCi0vL2V4cG9ydHMgZm9ybSBmaWVsZHMgYW4gWEZERiBmaWxlIHRvIHRoZSBsb2NhbCBoYXJkIGRyaXZlDQotLy9jb21tZW50OiBuZWVkIHJlZGVyIHN1cHBvcnRzDQotLy9ub3RlOnRoZSBsYXN0IHBhcmFtZXRlciBjYW4ndCBiZSB0ZXN0DQotLy9pbnQgQ1BERlNES19Eb2N1bWVudDo6RXhwb3J0QXNYRkRGKEZYX0JPT0wgYkFsbEZpZWxkcyxGWF9CT09MICBiTm9QYXNzV29yZCxTdHJpbmdBcnJheSBhRmllbGRzLFN0cmluZyBjUGF0aCxGWF9CT09MIGJBbm5vYXRhdGlvbnMpOw0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OmV4cG9ydEFzWEZERihPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCWlmIChJc1NhZmVNb2RlKGNjKSkgcmV0dXJuIFRSVUU7DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKCFtX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fRVhUUkFDVF9BQ0NFU1MpKSByZXR1cm4gRkFMU0U7DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi0vL01hcHMgYSBmaWVsZCBvYmplY3QgaW4gUERGIGRvY3VtZW50IHRvIGEgSmF2YVNjcmlwdCB2YXJpYWJsZQ0KLS8vY29tbWVudDoNCi0vL25vdGU6IHRoZSBwYXJlbXRlciBjTmFtZSwgdGhpcyBpcyBjbHVlIGhvdyB0byB0cmVhdCBpZiB0aGUgY05hbWUgaXMgbm90IGEgdmFsaWFibGUgZmlsZWQgbmFtZSBpbiB0aGlzIGRvY3VtZW50DQotDQotRlhfQk9PTCBEb2N1bWVudDo6Z2V0RmllbGQoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IEdldElzb2xhdGUoY2MpOw0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmIChwYXJhbXMuc2l6ZSgpIDwgMSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlDRlhfV2lkZVN0cmluZyB3aWRlTmFtZSA9IHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOw0KLQ0KLSAgICBDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IG1fcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsNCi0JQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7DQotDQotCUNQREZfSW50ZXJGb3JtKiBwUERGRm9ybSA9IHBJbnRlckZvcm0tPkdldEludGVyRm9ybSgpOw0KLQlBU1NFUlQocFBERkZvcm0gIT0gTlVMTCk7DQotDQotCWlmIChwUERGRm9ybS0+Q291bnRGaWVsZHMod2lkZU5hbWUpIDw9IDApIA0KLQl7DQotCQl2UmV0LlNldE51bGwoKTsNCi0JCXJldHVybiBUUlVFOw0KLQl9DQotDQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0JQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpOw0KLQlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7DQotDQotCUpTRlhPYmplY3QgIHBGaWVsZE9iaiA9IEpTX05ld0Z4RHluYW1pY09iaigqcFJ1bnRpbWUsIHBDb250ZXh0LCBKU19HZXRPYmpEZWZuSUQoKnBSdW50aW1lLCBMIkZpZWxkIikpOw0KLQ0KLQlDSlNfRmllbGQgKiBwSlNGaWVsZCA9IChDSlNfRmllbGQqKUpTX0dldFByaXZhdGUoaXNvbGF0ZSxwRmllbGRPYmopOw0KLQlBU1NFUlQocEpTRmllbGQgIT0gTlVMTCk7DQotDQotCUZpZWxkICogcEZpZWxkID0gKEZpZWxkICopcEpTRmllbGQtPkdldEVtYmVkT2JqZWN0KCk7IA0KLQlBU1NFUlQocEZpZWxkICE9IE5VTEwpOw0KLQ0KLQlwRmllbGQtPkF0dGFjaEZpZWxkKHRoaXMsIHdpZGVOYW1lKTsNCi0JdlJldCA9IHBKU0ZpZWxkOw0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotLy9HZXRzIHRoZSBuYW1lIG9mIHRoZSBudGggZmllbGQgaW4gdGhlIGRvY3VtZW50IA0KLS8vY29tbWVudDoNCi0vL25vdGU6IHRoZSBwYXJhbWV0ZXIgbkluZGV4LCBpZiBpdCBpcyBub3QgYXZhaWxhYmxlDQotDQotRlhfQk9PTCBEb2N1bWVudDo6Z2V0TnRoRmllbGROYW1lKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpbnQgbkluZGV4ID0gcGFyYW1zLnNpemUoKSA+IDAgPyAoaW50KXBhcmFtc1swXSA6IC0xOw0KLQlpZiAobkluZGV4ID09IC0xKSByZXR1cm4gRkFMU0U7DQotDQotCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gbV9wRG9jdW1lbnQtPkdldEludGVyRm9ybSgpOw0KLQlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsNCi0NCi0JQ1BERl9JbnRlckZvcm0qIHBQREZGb3JtID0gcEludGVyRm9ybS0+R2V0SW50ZXJGb3JtKCk7DQotCUFTU0VSVChwUERGRm9ybSAhPSBOVUxMKTsNCi0NCi0JQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCA9IHBQREZGb3JtLT5HZXRGaWVsZChuSW5kZXgpOw0KLQlpZiAoIXBGaWVsZCkNCi0JCXJldHVybiBGQUxTRTsNCi0NCi0JdlJldCA9IHBGaWVsZC0+R2V0RnVsbE5hbWUoKTsNCi0JcmV0dXJuIFRSVUU7CQ0KLX0NCi0NCi0vL2ltcG9ydHMgdGhlIHNwZWNpZmllZCBmZGYgZmlsZS4NCi0vL2NvbW1lbnRzOiBuZWVkIHJlYWRlciBzdXBwcG9ydA0KLS8vbm90ZTpvbmNlIHRoZSBjcGF0aCBpcyBpbGxpZ2wgIHRoZW4gYSBmaWxlIGRpYWxvZyBib3ggcG9wcyB1cCBpbiBvcmRlciB0byBhc2sgdXNlciB0byBjaG9vb3NlIHRoZSBmaWxlDQotLy9pbnQgQ1BERlNES19Eb2N1bWVudDo6aW1wb3J0QW5GREYoU3RyaW5nIGNQYXRoKTsNCi0NCi1GWF9CT09MIERvY3VtZW50OjppbXBvcnRBbkZERihPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCWlmIChJc1NhZmVNb2RlKGNjKSkgcmV0dXJuIFRSVUU7DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKCEobV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX01PRElGWSkgfHwgDQotCQltX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fQU5OT1RfRk9STSkgfHwNCi0JCW1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9GSUxMX0ZPUk0pKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQ0KLQlDRlhfV2lkZVN0cmluZyBzd1BhdGg7DQotCQ0KLQlpZiAocGFyYW1zLnNpemUoKSA+IDApDQotCQlzd1BhdGggPSBwYXJhbXNbMF07DQotICAgIA0KLQlpZiAoc3dQYXRoLklzRW1wdHkoKSkNCi0Jew0KLQkJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcERvY3VtZW50LT5HZXRFbnYoKTsNCi0JCXN3UGF0aCA9IHBFbnYtPkpTX2ZpZWxkQnJvd3NlKCk7DQotCQlpZihzd1BhdGguSXNFbXB0eSgpKQ0KLQkJCXJldHVybiBUUlVFOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJc3dQYXRoID0gYXBwOjpQREZQYXRoVG9TeXNQYXRoKHN3UGF0aCk7DQotCX0NCi0NCi0JbV9wRG9jdW1lbnQtPlNldEZvY3VzQW5ub3QoTlVMTCk7DQotDQotCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gKENQREZTREtfSW50ZXJGb3JtKiltX3BEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7DQotCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOw0KLQ0KLQlpZiAoIXBJbnRlckZvcm0tPkltcG9ydEZvcm1Gcm9tRkRGRmlsZShzd1BhdGgsIFRSVUUpKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQ0KLSAJbV9wRG9jdW1lbnQtPlNldENoYW5nZU1hcmsoKTsNCi0vLyAJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcERvY3VtZW50LT5HZXRFbnYoKTsNCi0vLyAJQVNTRVJUKHBFbnYgIT0gTlVMTCk7DQotLy8gCUlVbmRvKiBwVW5kbyA9IElVbmRvOjpHZXRVbmRvKHBFbnYpOw0KLS8vIAlBU1NFUlQocFVuZG8gIT0gTlVMTCk7DQotLy8gCXBVbmRvLT5SZXNldChtX3BEb2N1bWVudCk7DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi0vL2ltcG9ydHMgYW5kIHNwZWNpZmllZCBYRkRGIGZpbGUgY29udGFpbmluZyBYTUwgZm9ybSBkYXRhDQotLy9jb21tZW50OiBuZWVkIHJlYWRlciBzdXBwb3J0cw0KLS8vbm90ZTogc2FtZSBhcyB1cA0KLS8vaW50IENQREZTREtfRG9jdW1lbnQ6OmltcG9ydEFuRkRGKFN0cmluZyBjUGF0aCkNCi0NCi1GWF9CT09MIERvY3VtZW50OjppbXBvcnRBblhGREYoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlpZiAoSXNTYWZlTW9kZShjYykpIHJldHVybiBUUlVFOw0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmICghKG1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9NT0RJRlkpIHx8IA0KLQkJbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX0FOTk9UX0ZPUk0pIHx8DQotCQltX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fRklMTF9GT1JNKSkpIHJldHVybiBGQUxTRTsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLS8vaW1wb3J0cyBhbmQgc3BlY2lmaWVkIHRleHQgZmlsZSANCi0vL2NvbW1uZXQ6IG5lZWQgcmVhZGVyIHN1cHBvcnRzDQotLy9ub3RlOiBzYW1lIGFzIHVwLHdoZW4gblJvdyBpcyBub3QgcmF0aW9uYWwsYWRvYmUgaXMgZHVtYiBmb3IgaXQuDQotLy9pbnQgQ1BERlNES19Eb2N1bWVudDo6aW1wb3J0VGV4dERhdGEoU3RyaW5nIGNQYXRoLGludCBuUm93KTsNCi0NCi1GWF9CT09MIERvY3VtZW50OjppbXBvcnRUZXh0RGF0YShPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCWlmIChJc1NhZmVNb2RlKGNjKSkgcmV0dXJuIFRSVUU7DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKCEobV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX01PRElGWSkgfHwgDQotCQltX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fQU5OT1RfRk9STSkgfHwNCi0JCW1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9GSUxMX0ZPUk0pKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotLy9leHBvcnRzIHRoZSBmb3JtIGRhdGEgYW5kIG1haWxzIHRoZSByZXN1bHRpbmcgZmRmIGZpbGUgYXMgYW4gYXR0YWNobWVudCB0byBhbGwgcmVjaXBpZW50cy4NCi0vL2NvbW1lbnQ6IG5lZWQgcmVhZGVyIHN1cHBvcnRzDQotLy9ub3RlOg0KLS8vaW50IENQREZTREtfRG9jdW1lbnQ6Om1haWxGb3JtKEZYX0JPT0wgYlVJLFN0cmluZyBjdG8sc3RyaW5nIGNjYyxzdHJpbmcgY2JjYyxzdHJpbmcgY1N1YmplY3Qsc3RyaW5nIGNtcyk7DQotDQotRlhfQk9PTCBEb2N1bWVudDo6bWFpbEZvcm0oT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmICghbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX0VYVFJBQ1RfQUNDRVNTKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlpbnQgaUxlbmd0aCA9IHBhcmFtcy5zaXplKCk7DQotDQotCUZYX0JPT0wgYlVJID0gaUxlbmd0aCA+IDAgPyAoRlhfQk9PTClwYXJhbXNbMF0gOiBUUlVFOw0KLQlDRlhfV2lkZVN0cmluZyBjVG8gPSBpTGVuZ3RoID4gMSA/IChGWF9MUENXU1RSKXBhcmFtc1sxXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpIDogKEZYX0xQQ1dTVFIpTCIiOw0KLQlDRlhfV2lkZVN0cmluZyBjQ2MgPSBpTGVuZ3RoID4gMiA/IChGWF9MUENXU1RSKXBhcmFtc1syXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpIDogKEZYX0xQQ1dTVFIpTCIiOw0KLQlDRlhfV2lkZVN0cmluZyBjQmNjID0gaUxlbmd0aCA+IDMgPyAoRlhfTFBDV1NUUilwYXJhbXNbM10ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKSA6IChGWF9MUENXU1RSKUwiIjsNCi0JQ0ZYX1dpZGVTdHJpbmcgY1N1YmplY3QgPSBpTGVuZ3RoID4gNCA/IChGWF9MUENXU1RSKXBhcmFtc1s0XS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpIDogKEZYX0xQQ1dTVFIpTCIiOw0KLQlDRlhfV2lkZVN0cmluZyBjTXNnID0gaUxlbmd0aCA+IDUgPyAoRlhfTFBDV1NUUilwYXJhbXNbNV0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKSA6IChGWF9MUENXU1RSKUwiIjsNCi0NCi0JQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSAoQ1BERlNES19JbnRlckZvcm0qKW1fcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsNCi0JQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7DQotDQotCUNGWF9CeXRlVGV4dEJ1ZiB0ZXh0QnVmOw0KLQlpZiAoIXBJbnRlckZvcm0tPkV4cG9ydEZvcm1Ub0ZERlRleHRCdWYodGV4dEJ1ZikpDQotCQlyZXR1cm4gRkFMU0U7DQotDQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0JQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IHBDb250ZXh0LT5HZXRSZWFkZXJBcHAoKTsNCi0JQVNTRVJUKHBFbnYgIT0gTlVMTCk7DQotCUNKU19SdW50aW1lKiBwUnVudGltZSA9IHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKTsNCi0JQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOw0KLQ0KLQlwUnVudGltZS0+QmVnaW5CbG9jaygpOw0KLSAgICBwRW52LT5KU19kb2NtYWlsRm9ybSh0ZXh0QnVmLkdldEJ1ZmZlcigpLCB0ZXh0QnVmLkdldExlbmd0aCgpLCBiVUksIChGWF9MUENXU1RSKWNUbywgKEZYX0xQQ1dTVFIpY1N1YmplY3QsIChGWF9MUENXU1RSKWNDYywgKEZYX0xQQ1dTVFIpY0JjYywgKEZYX0xQQ1dTVFIpY01zZyk7DQotCXBSdW50aW1lLT5FbmRCbG9jaygpOw0KLSAJcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OnByaW50KE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0KiljYzsNCi0JQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOw0KLQlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7DQotCUFTU0VSVChwUnVudGltZSAhPSBOVUxMKTsNCi0NCi0JRlhfQk9PTCBiVUkgPSBUUlVFOw0KLQlpbnQgblN0YXJ0ID0gMDsNCi0JaW50IG5FbmQgPSAwOw0KLQlGWF9CT09MIGJTaWxlbnQgPSBGQUxTRTsNCi0JRlhfQk9PTCBiU2hyaW5rVG9GaXQgPSBGQUxTRTsNCi0JRlhfQk9PTCBiUHJpbnRBc0ltYWdlID0gRkFMU0U7DQotCUZYX0JPT0wgYlJldmVyc2UgPSBGQUxTRTsNCi0JRlhfQk9PTCBiQW5ub3RhdGlvbnMgPSBGQUxTRTsNCi0NCi0JaW50IG5sZW5ndGggPSBwYXJhbXMuc2l6ZSgpOw0KLQlpZihubGVuZ3RoID09OSkNCi0Jew0KLQkJaWYgKHBhcmFtc1s4XS5HZXRUeXBlKCkgPT0gVlRfZnhvYmplY3QpDQotCQl7DQotCQkJSlNGWE9iamVjdCBwT2JqID0gKEpTRlhPYmplY3QpcGFyYW1zWzhdOw0KLQkJCXsNCi0JCQkJaWYgKEpTX0dldE9iakRlZm5JRChwT2JqKSA9PSBKU19HZXRPYmpEZWZuSUQoKnBSdW50aW1lLCBMIlByaW50UGFyYW1zT2JqIikpDQotCQkJCXsNCi0JCQkJCWlmIChDSlNfT2JqZWN0KiBwSlNPYmogPSAoQ0pTX09iamVjdCopcGFyYW1zWzhdKQ0KLQkJCQkJew0KLQkJCQkJCQlpZiAoUHJpbnRQYXJhbXNPYmoqIHBwcmludHBhcmFtc09iaiA9IChQcmludFBhcmFtc09iaiopcEpTT2JqLT5HZXRFbWJlZE9iamVjdCgpKQ0KLQkJCQkJCQl7DQotCQkJCQkJCQliVUkgPSBwcHJpbnRwYXJhbXNPYmotPmJVSTsNCi0JCQkJCQkJCW5TdGFydCA9IHBwcmludHBhcmFtc09iai0+blN0YXJ0Ow0KLQkJCQkJCQkJbkVuZCA9IHBwcmludHBhcmFtc09iai0+bkVuZDsNCi0JCQkJCQkJCWJTaWxlbnQgPSBwcHJpbnRwYXJhbXNPYmotPmJTaWxlbnQ7DQotCQkJCQkJCQliU2hyaW5rVG9GaXQgPSBwcHJpbnRwYXJhbXNPYmotPmJTaHJpbmtUb0ZpdDsNCi0JCQkJCQkJCWJQcmludEFzSW1hZ2UgPSBwcHJpbnRwYXJhbXNPYmotPmJQcmludEFzSW1hZ2U7DQotCQkJCQkJCQliUmV2ZXJzZSA9IHBwcmludHBhcmFtc09iai0+YlJldmVyc2U7DQotCQkJCQkJCQliQW5ub3RhdGlvbnMgPSBwcHJpbnRwYXJhbXNPYmotPmJBbm5vdGF0aW9uczsNCi0JCQkJCQkJfQ0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQkNCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsNCi0JCWlmKG5sZW5ndGggPj0gMSkNCi0JCQkgYlVJID0gcGFyYW1zWzBdOw0KLQkJaWYobmxlbmd0aCA+PSAyKQ0KLQkJCSBuU3RhcnQgPSAoaW50KXBhcmFtc1sxXTsNCi0JCWlmKG5sZW5ndGggPj0gMykNCi0JCSAgICBuRW5kID0gKGludClwYXJhbXNbMl07DQotCQlpZihubGVuZ3RoID49IDQpDQotCQkJYlNpbGVudCA9IHBhcmFtc1szXTsNCi0JCWlmKG5sZW5ndGggPj0gNSkNCi0JCSAgICBiU2hyaW5rVG9GaXQgPSBwYXJhbXNbNF07DQotCQlpZihubGVuZ3RoID49IDYpDQotCQkJYlByaW50QXNJbWFnZSA9IHBhcmFtc1s1XTsNCi0JCWlmKG5sZW5ndGggPj0gNykNCi0JCQliUmV2ZXJzZSA9IHBhcmFtc1s2XTsNCi0JCWlmKG5sZW5ndGggPj0gOCkNCi0JCQliQW5ub3RhdGlvbnMgPSBwYXJhbXNbN107DQotCX0NCi0NCi0gCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0gDQotIAlpZiAoQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcERvY3VtZW50LT5HZXRFbnYoKSkNCi0gCXsNCi0JCXBFbnYtPkpTX2RvY3ByaW50KGJVSSwgblN0YXJ0LCBuRW5kLCBiU2lsZW50LCBiU2hyaW5rVG9GaXQsIGJQcmludEFzSW1hZ2UsIGJSZXZlcnNlLCBiQW5ub3RhdGlvbnMpOw0KLSAJCXJldHVybiBUUlVFOw0KLSAJfQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLS8vcmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGZpZWxkIGZyb20gdGhlIGRvY3VtZW50Lg0KLS8vY29tbWVudDoNCi0vL25vdGU6IGlmIHRoZSBmaWxlZCBuYW1lIGlzIG5vdCByZXRpb25hbCwgYWRvYmUgaXMgZHVtYiBmb3IgaXQuDQotDQotRlhfQk9PTCBEb2N1bWVudDo6cmVtb3ZlRmllbGQoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmICghKG1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9NT0RJRlkpIHx8IA0KLQkJbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX0FOTk9UX0ZPUk0pKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlpZiAocGFyYW1zLnNpemUoKSA8IDEpDQotCQlyZXR1cm4gVFJVRTsNCi0NCi0JQ0ZYX1dpZGVTdHJpbmcgc0ZpZWxkTmFtZSA9IHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOw0KLQ0KLQlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopbV9wRG9jdW1lbnQtPkdldEludGVyRm9ybSgpOw0KLQlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsNCi0NCi0JQ0ZYX1B0ckFycmF5IHdpZGdldHM7DQotCXBJbnRlckZvcm0tPkdldFdpZGdldHMoc0ZpZWxkTmFtZSwgd2lkZ2V0cyk7DQotDQotCWludCBuU2l6ZSA9IHdpZGdldHMuR2V0U2l6ZSgpOw0KLQ0KLQlpZiAoblNpemUgPiAwKQ0KLQl7DQotCQlmb3IgKGludCBpPTA7IGk8blNpemU7IGkrKykNCi0JCXsNCi0JCQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IChDUERGU0RLX1dpZGdldCopd2lkZ2V0c1tpXTsNCi0JCQlBU1NFUlQocFdpZGdldCAhPSBOVUxMKTsNCi0NCi0JCQlDUERGX1JlY3QgcmNBbm5vdCA9IHBXaWRnZXQtPkdldFJlY3QoKTsNCi0JCQlyY0Fubm90LmxlZnQgLT0gMTsNCi0JCQlyY0Fubm90LmJvdHRvbSAtPSAxOw0KLQkJCXJjQW5ub3QucmlnaHQgKz0gMTsNCi0JCQlyY0Fubm90LnRvcCArPSAxOw0KLQ0KLQkJCUNGWF9SZWN0QXJyYXkgYVJlZnJlc2g7DQotCQkJYVJlZnJlc2guQWRkKHJjQW5ub3QpOw0KLQ0KLQkJCUNQREZfUGFnZSogcFBhZ2UgPSBwV2lkZ2V0LT5HZXRQREZQYWdlKCk7DQotCQkJQVNTRVJUKHBQYWdlICE9IE5VTEwpOw0KLQkJCQ0KLQkJCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyA9IG1fcERvY3VtZW50LT5HZXRQYWdlVmlldyhwUGFnZSk7DQotCQkJcFBhZ2VWaWV3LT5EZWxldGVBbm5vdChwV2lkZ2V0KTsNCi0NCi0JCQlwUGFnZVZpZXctPlVwZGF0ZVJlY3RzKGFSZWZyZXNoKTsNCi0JCX0NCi0JCW1fcERvY3VtZW50LT5TZXRDaGFuZ2VNYXJrKCk7DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLS8vcmVzZXQgZmlsZWQgdmFsdWVzIHdpdGhpbiBhIGRvY3VtZW50Lg0KLS8vY29tbWVudDoNCi0vL25vdGU6IGlmIHRoZSBmaWVsZHMgbmFtZXMgciBub3QgcmF0aW9uYWwsIGFvZGJlIGlzIGR1bWIgZm9yIGl0Lg0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OnJlc2V0Rm9ybShPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKCEobV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX01PRElGWSkgfHwgDQotCQltX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fQU5OT1RfRk9STSkgfHwNCi0JCW1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9GSUxMX0ZPUk0pKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopbV9wRG9jdW1lbnQtPkdldEludGVyRm9ybSgpOw0KLQlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsNCi0NCi0JQ1BERl9JbnRlckZvcm0qIHBQREZGb3JtID0gcEludGVyRm9ybS0+R2V0SW50ZXJGb3JtKCk7DQotCUFTU0VSVChwUERGRm9ybSAhPSBOVUxMKTsNCi0NCi0Jdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBHZXRJc29sYXRlKGNjKTsNCi0JQ0pTX0FycmF5IGFOYW1lKGlzb2xhdGUpOw0KLQ0KLQlpZiAocGFyYW1zLnNpemUoKSA+IDApDQotCXsNCi0JCXN3aXRjaCAocGFyYW1zWzBdLkdldFR5cGUoKSkNCi0JCXsNCi0JCWRlZmF1bHQ6DQotCQkJYU5hbWUuQXR0YWNoKHBhcmFtc1swXSk7DQotCQkJYnJlYWs7DQotCQljYXNlIFZUX3N0cmluZzoNCi0JCQlhTmFtZS5TZXRFbGVtZW50KDAscGFyYW1zWzBdKTsNCi0JCQlicmVhazsNCi0JCX0NCi0NCi0JCUNGWF9QdHJBcnJheSBhRmllbGRzOw0KLQ0KLQkJZm9yIChpbnQgaT0wLGlzej1hTmFtZS5HZXRMZW5ndGgoKTsgaTxpc3o7IGkrKykNCi0JCXsNCi0JCQlDSlNfVmFsdWUgdmFsRWxlbWVudChpc29sYXRlKTsNCi0JCQlhTmFtZS5HZXRFbGVtZW50KGksdmFsRWxlbWVudCk7DQotCQkJQ0ZYX1dpZGVTdHJpbmcgc3dWYWwgPSB2YWxFbGVtZW50Lm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7CQ0KLQkJCQ0KLQkJCWZvciAoaW50IGo9MCxqc3o9cFBERkZvcm0tPkNvdW50RmllbGRzKHN3VmFsKTsgajxqc3o7IGorKykNCi0JCQl7DQotCQkJCWFGaWVsZHMuQWRkKCh2b2lkKilwUERGRm9ybS0+R2V0RmllbGQoaixzd1ZhbCkpOw0KLQkJCX0JCQ0KLQkJfQ0KLQ0KLQkJaWYgKGFGaWVsZHMuR2V0U2l6ZSgpID4gMCkNCi0JCXsNCi0gCQkJcFBERkZvcm0tPlJlc2V0Rm9ybShhRmllbGRzLCBUUlVFLCBUUlVFKTsNCi0gCQkJbV9wRG9jdW1lbnQtPlNldENoYW5nZU1hcmsoKTsNCi0NCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsNCi0gCQlwUERGRm9ybS0+UmVzZXRGb3JtKFRSVUUpOw0KLSAJCW1fcERvY3VtZW50LT5TZXRDaGFuZ2VNYXJrKCk7DQotDQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OnNhdmVBcyhPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotDQotCWlmIChJc1NhZmVNb2RlKGNjKSkgcmV0dXJuIFRSVUU7DQotDQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0vLwltX3BEb2N1bWVudC0+RG9TYXZlQXMoKTsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OnN1Ym1pdEZvcm0oT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotLy8JaWYgKCFtX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fRVhUUkFDVF9BQ0NFU1MpKSByZXR1cm4gRkFMU0U7DQotDQotCWludCBuU2l6ZSA9IHBhcmFtcy5zaXplKCk7DQotCWlmIChuU2l6ZSA8IDEpIHJldHVybiBGQUxTRTsNCi0NCi0JQ0ZYX1dpZGVTdHJpbmcgc3RyVVJMOw0KLQlGWF9CT09MIGJGREYgPSBUUlVFOw0KLQlGWF9CT09MIGJFbXB0eSA9IEZBTFNFOw0KLQl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IEdldElzb2xhdGUoY2MpOw0KLQlDSlNfQXJyYXkgYUZpZWxkcyhpc29sYXRlKTsNCi0NCi0JQ0pTX1ZhbHVlIHYgPSBwYXJhbXNbMF07DQotCWlmICh2LkdldFR5cGUoKSA9PSBWVF9zdHJpbmcpDQotCXsNCi0JCXN0clVSTCA9IHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOw0KLQkJaWYgKG5TaXplID4gMSkNCi0JCQliRkRGID0gcGFyYW1zWzFdOw0KLQkJaWYgKG5TaXplID4gMikNCi0JCQliRW1wdHkgPSBwYXJhbXNbMl07DQotCQlpZiAoblNpemUgPiAzKQ0KLQkJCWFGaWVsZHMuQXR0YWNoKHBhcmFtc1szXSk7DQotCX0NCi0JZWxzZSBpZiAodi5HZXRUeXBlKCkgPT0gVlRfb2JqZWN0KQ0KLQl7DQotCQlKU09iamVjdCBwT2JqID0gKEpTT2JqZWN0KXBhcmFtc1swXTsNCi0JCXY4OjpIYW5kbGU8djg6OlZhbHVlPiBwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaiwgTCJjVVJMIik7DQotCQlpZiAoIXBWYWx1ZS5Jc0VtcHR5KCkpDQotCQkJc3RyVVJMID0gQ0pTX1ZhbHVlKGlzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpOw0KLQkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwiYkZERiIpOw0KLQkJCWJGREYgPSBDSlNfVmFsdWUoaXNvbGF0ZSxwVmFsdWUsIEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpOw0KLQkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwiYkVtcHR5Iik7DQotCQkJYkVtcHR5ID0gQ0pTX1ZhbHVlKGlzb2xhdGUscFZhbHVlLCBHRVRfVkFMVUVfVFlQRShwVmFsdWUpKTsNCi0JCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLEwiYUZpZWxkcyIpOw0KLQkJCWFGaWVsZHMuQXR0YWNoKENKU19WYWx1ZShpc29sYXRlLHBWYWx1ZSwgR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSkpOw0KLQl9CQkNCi0NCi0JQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSAoQ1BERlNES19JbnRlckZvcm0qKW1fcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsNCi0JQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7DQotCUNQREZfSW50ZXJGb3JtKiBwUERGSW50ZXJGb3JtID0gcEludGVyRm9ybS0+R2V0SW50ZXJGb3JtKCk7DQotCUFTU0VSVChwUERGSW50ZXJGb3JtICE9IE5VTEwpOw0KLQ0KLQlGWF9CT09MIGJBbGwgPSAoYUZpZWxkcy5HZXRMZW5ndGgoKSA9PSAwKTsNCi0NCi0JaWYgKGJBbGwgJiYgYkVtcHR5KQ0KLQl7DQotCQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOw0KLQkJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOw0KLQkJQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpOw0KLQkJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOw0KLQ0KLQkJDQotCQlpZiAocFBERkludGVyRm9ybS0+Q2hlY2tSZXF1aXJlZEZpZWxkcygpKQ0KLQkJew0KLQkJCXBSdW50aW1lLT5CZWdpbkJsb2NrKCk7DQotCQkJcEludGVyRm9ybS0+U3VibWl0Rm9ybShzdHJVUkwsIEZBTFNFKTsNCi0JCQlwUnVudGltZS0+RW5kQmxvY2soKTsNCi0JCX0NCi0NCi0JCXJldHVybiBUUlVFOw0KLQl9DQotCWVsc2UNCi0JewkNCi0JCUNGWF9QdHJBcnJheSBmaWVsZE9iamVjdHM7DQotDQotCQlmb3IgKGludCBpPTAsc3o9YUZpZWxkcy5HZXRMZW5ndGgoKTsgaTxzejsgaSsrKQ0KLQkJew0KLQkJCUNKU19WYWx1ZSB2YWxOYW1lKGlzb2xhdGUpOw0KLQkJCWFGaWVsZHMuR2V0RWxlbWVudChpLCB2YWxOYW1lKTsNCi0JCQlDRlhfV2lkZVN0cmluZyBzTmFtZSA9IHZhbE5hbWUub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsNCi0NCi0JCQlDUERGX0ludGVyRm9ybSogcFBERkZvcm0gPSBwSW50ZXJGb3JtLT5HZXRJbnRlckZvcm0oKTsNCi0JCQlBU1NFUlQocFBERkZvcm0gIT0gTlVMTCk7DQotDQotCQkJZm9yIChpbnQgaj0wLCBqc3o9cFBERkZvcm0tPkNvdW50RmllbGRzKHNOYW1lKTsgajxqc3o7IGorKykNCi0JCQl7DQotCQkJCUNQREZfRm9ybUZpZWxkKiBwRmllbGQgPSBwUERGRm9ybS0+R2V0RmllbGQoaiwgc05hbWUpOw0KLQkJCQlpZiAoIWJFbXB0eSAmJiBwRmllbGQtPkdldFZhbHVlKCkuSXNFbXB0eSgpKQ0KLQkJCQkJY29udGludWU7DQotDQotCQkJCWZpZWxkT2JqZWN0cy5BZGQocEZpZWxkKTsNCi0JCQl9DQotCQl9DQotDQotCQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOw0KLQkJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOw0KLQkJQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpOw0KLQkJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOw0KLQ0KLQkJDQotCQlpZiAocFBERkludGVyRm9ybS0+Q2hlY2tSZXF1aXJlZEZpZWxkcygmZmllbGRPYmplY3RzLCBUUlVFKSkNCi0JCXsNCi0JCQlwUnVudGltZS0+QmVnaW5CbG9jaygpOw0KLQkJCXBJbnRlckZvcm0tPlN1Ym1pdEZpZWxkcyhzdHJVUkwsIGZpZWxkT2JqZWN0cywgVFJVRSwgIWJGREYpOw0KLQkJCXBSdW50aW1lLT5FbmRCbG9jaygpOw0KLQkJfQ0KLQ0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0NCi19DQotDQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLQ0KLXZvaWQgRG9jdW1lbnQ6OkF0dGFjaERvYyhDUERGU0RLX0RvY3VtZW50ICpwRG9jKQ0KLXsNCi0JbV9wRG9jdW1lbnQgPSBwRG9jOw0KLX0NCi0NCi1DUERGU0RLX0RvY3VtZW50ICogRG9jdW1lbnQ6OkdldFJlYWRlckRvYygpDQotew0KLQlyZXR1cm4gbV9wRG9jdW1lbnQ7DQotfQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OkV4dHJhY3RGaWxlTmFtZShDUERGU0RLX0RvY3VtZW50ICpwRG9jLENGWF9CeXRlU3RyaW5nICZzdHJGaWxlTmFtZSkNCi17DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBEb2N1bWVudDo6RXh0cmFjdEZvbGRlck5hbWUoQ1BERlNES19Eb2N1bWVudCAqcERvYyxDRlhfQnl0ZVN0cmluZyAmc3RyRm9sZGVyTmFtZSkNCi17DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBEb2N1bWVudDo6Ym9va21hcmtSb290KE9CSl9QUk9QX1BBUkFNUykNCi17CQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBEb2N1bWVudDo6bWFpbERvYyhPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JRlhfQk9PTCBiVUkgPSBUUlVFOw0KLQlDRlhfV2lkZVN0cmluZyBjVG8gPSBMIiI7DQotCUNGWF9XaWRlU3RyaW5nIGNDYyA9IEwiIjsNCi0JQ0ZYX1dpZGVTdHJpbmcgY0JjYyA9IEwiIjsNCi0JQ0ZYX1dpZGVTdHJpbmcgY1N1YmplY3QgPSBMIiI7DQotCUNGWF9XaWRlU3RyaW5nIGNNc2cgPSBMIiI7DQotCQ0KLQ0KLQliVUkgPSBwYXJhbXMuc2l6ZSgpPj0xP3N0YXRpY19jYXN0PEZYX0JPT0w+KHBhcmFtc1swXSk6VFJVRTsNCi0JY1RvID0gcGFyYW1zLnNpemUoKT49Mj8oY29uc3Qgd2NoYXJfdCopcGFyYW1zWzFdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk6TCIiOw0KLQljQ2MgPSBwYXJhbXMuc2l6ZSgpPj0zPyhjb25zdCB3Y2hhcl90KilwYXJhbXNbMl0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTpMIiI7DQotCWNCY2MgPSBwYXJhbXMuc2l6ZSgpPj00Pyhjb25zdCB3Y2hhcl90KilwYXJhbXNbM10ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTpMIiI7DQotCWNTdWJqZWN0ID0gcGFyYW1zLnNpemUoKT49NT8oY29uc3Qgd2NoYXJfdCopcGFyYW1zWzRdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk6TCIiOw0KLQljTXNnID0gcGFyYW1zLnNpemUoKT49Nj8oY29uc3Qgd2NoYXJfdCopcGFyYW1zWzVdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk6TCIiOw0KLQkNCi0Jdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBHZXRJc29sYXRlKGNjKTsNCi0NCi0JaWYocGFyYW1zLnNpemUoKT49MSAmJiBwYXJhbXNbMF0uR2V0VHlwZSgpID09IFZUX29iamVjdCkNCi0Jew0KLQkJSlNPYmplY3QgIHBPYmogPSAoSlNPYmplY3QgKXBhcmFtc1swXTsNCi0NCi0JCXY4OjpIYW5kbGU8djg6OlZhbHVlPiBwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaiwgTCJiVUkiKTsNCi0JCQliVUkgPSAoaW50KUNKU19WYWx1ZShpc29sYXRlLHBWYWx1ZSxHRVRfVkFMVUVfVFlQRShwVmFsdWUpKTsNCi0NCi0JCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLCBMImNUbyIpOw0KLQkJCWNUbyA9IENKU19WYWx1ZShpc29sYXRlLHBWYWx1ZSxHRVRfVkFMVUVfVFlQRShwVmFsdWUpKS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOw0KLQ0KLQkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwiY0NjIik7DQotCQkJY0NjID0gQ0pTX1ZhbHVlKGlzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7DQotDQotCQlwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaiwgTCJjQmNjIik7DQotCQkJY0JjYyA9IENKU19WYWx1ZShpc29sYXRlLHBWYWx1ZSxHRVRfVkFMVUVfVFlQRShwVmFsdWUpKS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOw0KLQ0KLQkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwiY1N1YmplY3QiKTsNCi0JCQljU3ViamVjdCA9IENKU19WYWx1ZShpc29sYXRlLHBWYWx1ZSxHRVRfVkFMVUVfVFlQRShwVmFsdWUpKS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOw0KLQ0KLQkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwiY01zZyIpOw0KLQkJCWNNc2cgPSBDSlNfVmFsdWUoaXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSkub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsNCi0JDQotCX0NCi0NCi0JQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0KiljYzsNCi0JQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOw0KLQlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7DQotCUFTU0VSVChwUnVudGltZSAhPSBOVUxMKTsNCi0NCi0JcFJ1bnRpbWUtPkJlZ2luQmxvY2soKTsNCi0JQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IHBSdW50aW1lLT5HZXRSZWFkZXJBcHAoKTsNCi0JcEVudi0+SlNfZG9jbWFpbEZvcm0oTlVMTCwgMCwgYlVJLCAoRlhfTFBDV1NUUiljVG8sIChGWF9MUENXU1RSKWNTdWJqZWN0LCAoRlhfTFBDV1NUUiljQ2MsIChGWF9MUENXU1RSKWNCY2MsIChGWF9MUENXU1RSKWNNc2cpOw0KLQlwUnVudGltZS0+RW5kQmxvY2soKTsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OmF1dGhvcihPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCUNQREZfRGljdGlvbmFyeSogcERpY3Rpb25hcnkgPSBtX3BEb2N1bWVudC0+R2V0RG9jdW1lbnQoKS0+R2V0SW5mbygpOw0KLQlpZiAoIXBEaWN0aW9uYXJ5KXJldHVybiBGQUxTRTsNCi0NCi0JaWYgKHZwLklzR2V0dGluZygpKQ0KLQl7DQotCQl2cCA8PCBwRGljdGlvbmFyeS0+R2V0VW5pY29kZVRleHQoIkF1dGhvciIpOw0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlpZiAoIW1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9NT0RJRlkpKSByZXR1cm4gRkFMU0U7DQotDQotCQlDRlhfV2lkZVN0cmluZyBjc0F1dGhvcjsNCi0JCXZwID4+IGNzQXV0aG9yOw0KLQkJcERpY3Rpb25hcnktPlNldEF0U3RyaW5nKCJBdXRob3IiLCBQREZfRW5jb2RlVGV4dChjc0F1dGhvcikpOw0KLQkJbV9wRG9jdW1lbnQtPlNldENoYW5nZU1hcmsoKTsNCi0JCXJldHVybiBUUlVFOw0KLQl9DQotfQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OmluZm8oT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlDUERGX0RpY3Rpb25hcnkqIHBEaWN0aW9uYXJ5ID0gbV9wRG9jdW1lbnQtPkdldERvY3VtZW50KCktPkdldEluZm8oKTsNCi0JaWYgKCFwRGljdGlvbmFyeSlyZXR1cm4gRkFMU0U7DQotDQotCUNGWF9XaWRlU3RyaW5nIGN3QXV0aG9yCQkJPSBwRGljdGlvbmFyeS0+R2V0VW5pY29kZVRleHQoIkF1dGhvciIpOw0KLQlDRlhfV2lkZVN0cmluZyBjd1RpdGxlCQkJPSBwRGljdGlvbmFyeS0+R2V0VW5pY29kZVRleHQoIlRpdGxlIik7DQotCUNGWF9XaWRlU3RyaW5nIGN3U3ViamVjdAkJPSBwRGljdGlvbmFyeS0+R2V0VW5pY29kZVRleHQoIlN1YmplY3QiKTsNCi0JQ0ZYX1dpZGVTdHJpbmcgY3dLZXl3b3JkcwkJPSBwRGljdGlvbmFyeS0+R2V0VW5pY29kZVRleHQoIktleXdvcmRzIik7DQotCUNGWF9XaWRlU3RyaW5nIGN3Q3JlYXRvcgkJPSBwRGljdGlvbmFyeS0+R2V0VW5pY29kZVRleHQoIkNyZWF0b3IiKTsNCi0JQ0ZYX1dpZGVTdHJpbmcgY3dQcm9kdWNlcgkJPSBwRGljdGlvbmFyeS0+R2V0VW5pY29kZVRleHQoIlByb2R1Y2VyIik7DQotCUNGWF9XaWRlU3RyaW5nIGN3Q3JlYXRpb25EYXRlCT0gcERpY3Rpb25hcnktPkdldFVuaWNvZGVUZXh0KCJDcmVhdGlvbkRhdGUiKTsNCi0JQ0ZYX1dpZGVTdHJpbmcgY3dNb2REYXRlCQk9IHBEaWN0aW9uYXJ5LT5HZXRVbmljb2RlVGV4dCgiTW9kRGF0ZSIpOw0KLQlDRlhfV2lkZVN0cmluZyBjd1RyYXBwZWQJCT0gcERpY3Rpb25hcnktPkdldFVuaWNvZGVUZXh0KCJUcmFwcGVkIik7DQotDQotCXY4OjpJc29sYXRlKiBpc29sYXRlID0gR2V0SXNvbGF0ZShjYyk7DQotCWlmICghdnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjOw0KLQkJQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpOw0KLQ0KLQkJSlNGWE9iamVjdCAgcE9iaiA9IEpTX05ld0Z4RHluYW1pY09iaigqcFJ1bnRpbWUsIHBDb250ZXh0LCAtMSk7DQotDQotCQlKU19QdXRPYmplY3RTdHJpbmcoaXNvbGF0ZSxwT2JqLCBMIkF1dGhvciIsIGN3QXV0aG9yKTsNCi0JCUpTX1B1dE9iamVjdFN0cmluZyhpc29sYXRlLHBPYmosIEwiVGl0bGUiLCBjd1RpdGxlKTsNCi0JCUpTX1B1dE9iamVjdFN0cmluZyhpc29sYXRlLHBPYmosIEwiU3ViamVjdCIsIGN3U3ViamVjdCk7DQotCQlKU19QdXRPYmplY3RTdHJpbmcoaXNvbGF0ZSxwT2JqLCBMIktleXdvcmRzIiwgY3dLZXl3b3Jkcyk7DQotCQlKU19QdXRPYmplY3RTdHJpbmcoaXNvbGF0ZSxwT2JqLCBMIkNyZWF0b3IiLCBjd0NyZWF0b3IpOw0KLQkJSlNfUHV0T2JqZWN0U3RyaW5nKGlzb2xhdGUscE9iaiwgTCJQcm9kdWNlciIsIGN3UHJvZHVjZXIpOw0KLQkJSlNfUHV0T2JqZWN0U3RyaW5nKGlzb2xhdGUscE9iaiwgTCJDcmVhdGlvbkRhdGUiLCBjd0NyZWF0aW9uRGF0ZSk7DQotCQlKU19QdXRPYmplY3RTdHJpbmcoaXNvbGF0ZSxwT2JqLCBMIk1vZERhdGUiLCBjd01vZERhdGUpOw0KLQkJSlNfUHV0T2JqZWN0U3RyaW5nKGlzb2xhdGUscE9iaiwgTCJUcmFwcGVkIiwgY3dUcmFwcGVkKTsNCi0NCi0vLyBJdCdzIHRvIGJlIGNvbXBhdGlibGUgdG8gbm9uLXN0YW5kYXJkIGluZm8gZGljdGlvbmFyeS4JDQotCQlGWF9QT1NJVElPTiBwb3MgPSBwRGljdGlvbmFyeS0+R2V0U3RhcnRQb3MoKTsNCi0JCXdoaWxlKHBvcykNCi0JCXsNCi0JCQlDRlhfQnl0ZVN0cmluZyBic0tleTsNCi0JCQlDUERGX09iamVjdCogcFZhbHVlT2JqID0gcERpY3Rpb25hcnktPkdldE5leHRFbGVtZW50KHBvcywgYnNLZXkpOw0KLQkJCUNGWF9XaWRlU3RyaW5nIHdzS2V5ICA9IENGWF9XaWRlU3RyaW5nOjpGcm9tVVRGOChic0tleSk7DQotCQkJaWYoKHBWYWx1ZU9iai0+R2V0VHlwZSgpPT1QREZPQkpfU1RSSU5HKSB8fCAocFZhbHVlT2JqLT5HZXRUeXBlKCk9PVBERk9CSl9OQU1FKSApDQotCQkJCQlKU19QdXRPYmplY3RTdHJpbmcoaXNvbGF0ZSxwT2JqLCB3c0tleSwgcFZhbHVlT2JqLT5HZXRVbmljb2RlVGV4dCgpKTsNCi0JCQlpZihwVmFsdWVPYmotPkdldFR5cGUoKT09UERGT0JKX05VTUJFUikNCi0JCQkJSlNfUHV0T2JqZWN0TnVtYmVyKGlzb2xhdGUscE9iaiwgd3NLZXksIChmbG9hdClwVmFsdWVPYmotPkdldE51bWJlcigpKTsNCi0JCQlpZihwVmFsdWVPYmotPkdldFR5cGUoKT09UERGT0JKX0JPT0xFQU4pDQotCQkJCUpTX1B1dE9iamVjdEJvb2xlYW4oaXNvbGF0ZSxwT2JqLCB3c0tleSwgKGJvb2wpcFZhbHVlT2JqLT5HZXRJbnRlZ2VyKCkpOw0KLQkJfQ0KLQ0KLQkJdnAgPDwgcE9iajsNCi0JCXJldHVybiBUUlVFOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi19DQotDQotRlhfQk9PTCBEb2N1bWVudDo6Y3JlYXRpb25EYXRlKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JQ1BERl9EaWN0aW9uYXJ5KiBwRGljdGlvbmFyeSA9IG1fcERvY3VtZW50LT5HZXREb2N1bWVudCgpLT5HZXRJbmZvKCk7DQotCWlmICghcERpY3Rpb25hcnkpcmV0dXJuIEZBTFNFOw0KLQ0KLQlpZiAodnAuSXNHZXR0aW5nKCkpDQotCXsNCi0JCXZwIDw8IHBEaWN0aW9uYXJ5LT5HZXRVbmljb2RlVGV4dCgiQ3JlYXRpb25EYXRlIik7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCWlmICghbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX01PRElGWSkpIHJldHVybiBGQUxTRTsNCi0NCi0JCUNGWF9XaWRlU3RyaW5nIGNzQ3JlYXRpb25EYXRlOw0KLQkJdnAgPj4gY3NDcmVhdGlvbkRhdGU7DQotCQlwRGljdGlvbmFyeS0+U2V0QXRTdHJpbmcoIkNyZWF0aW9uRGF0ZSIsIFBERl9FbmNvZGVUZXh0KGNzQ3JlYXRpb25EYXRlKSk7DQotCQltX3BEb2N1bWVudC0+U2V0Q2hhbmdlTWFyaygpOw0KLQ0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi19DQotDQotRlhfQk9PTCBEb2N1bWVudDo6Y3JlYXRvcihPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCUNQREZfRGljdGlvbmFyeSogcERpY3Rpb25hcnkgPSBtX3BEb2N1bWVudC0+R2V0RG9jdW1lbnQoKS0+R2V0SW5mbygpOw0KLQlpZiAoIXBEaWN0aW9uYXJ5KXJldHVybiBGQUxTRTsNCi0NCi0JaWYgKHZwLklzR2V0dGluZygpKQ0KLQl7DQotCQl2cCA8PCBwRGljdGlvbmFyeS0+R2V0VW5pY29kZVRleHQoIkNyZWF0b3IiKTsNCi0JCXJldHVybiBUUlVFOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJaWYgKCFtX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fTU9ESUZZKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJQ0ZYX1dpZGVTdHJpbmcgY3NDcmVhdG9yOw0KLQkJdnAgPj4gY3NDcmVhdG9yOw0KLQkJcERpY3Rpb25hcnktPlNldEF0U3RyaW5nKCJDcmVhdG9yIiwgUERGX0VuY29kZVRleHQoY3NDcmVhdG9yKSk7DQotCQltX3BEb2N1bWVudC0+U2V0Q2hhbmdlTWFyaygpOw0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi19DQotDQotRlhfQk9PTCBEb2N1bWVudDo6ZGVsYXkoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JaWYgKHZwLklzR2V0dGluZygpKQ0KLQl7DQotCQl2cCA8PCBtX2JEZWxheTsNCi0JCXJldHVybiBUUlVFOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQkJaWYgKCFtX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fTU9ESUZZKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJYm9vbCBiOw0KLQkJdnAgPj4gYjsNCi0NCi0JCW1fYkRlbGF5ID0gYjsNCi0NCi0JCWlmIChtX2JEZWxheSkgDQotCQl7DQotCQkJZm9yIChpbnQgaT0wLHN6PW1fRGVsYXlEYXRhLkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQkJCQlkZWxldGUgbV9EZWxheURhdGEuR2V0QXQoaSk7DQotDQotCQkJbV9EZWxheURhdGEuUmVtb3ZlQWxsKCk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJZm9yIChpbnQgaT0wLHN6PW1fRGVsYXlEYXRhLkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQkJCXsNCi0JCQkJaWYgKENKU19EZWxheURhdGEqIHBEYXRhID0gbV9EZWxheURhdGEuR2V0QXQoaSkpDQotCQkJCXsNCi0JCQkJCUZpZWxkOjpEb0RlbGF5KG1fcERvY3VtZW50LCBwRGF0YSk7DQotCQkJCQlkZWxldGUgbV9EZWxheURhdGEuR2V0QXQoaSk7DQotCQkJCX0NCi0JCQl9DQotCQkJbV9EZWxheURhdGEuUmVtb3ZlQWxsKCk7DQotCQl9DQotDQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLX0NCi0NCi1GWF9CT09MIERvY3VtZW50OjprZXl3b3JkcyhPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCUNQREZfRGljdGlvbmFyeSogcERpY3Rpb25hcnkgPSBtX3BEb2N1bWVudC0+R2V0RG9jdW1lbnQoKS0+R2V0SW5mbygpOw0KLQlpZiAoIXBEaWN0aW9uYXJ5KXJldHVybiBGQUxTRTsNCi0NCi0JaWYgKHZwLklzR2V0dGluZygpKQ0KLQl7DQotCQl2cCA8PCBwRGljdGlvbmFyeS0+R2V0VW5pY29kZVRleHQoIktleXdvcmRzIik7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCWlmICghbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX01PRElGWSkpIHJldHVybiBGQUxTRTsNCi0NCi0JCUNGWF9XaWRlU3RyaW5nIGNzS2V5d29yZHM7DQotCQl2cCA+PiBjc0tleXdvcmRzOw0KLQkJcERpY3Rpb25hcnktPlNldEF0U3RyaW5nKCJLZXl3b3JkcyIsIFBERl9FbmNvZGVUZXh0KGNzS2V5d29yZHMpKTsNCi0JCW1fcERvY3VtZW50LT5TZXRDaGFuZ2VNYXJrKCk7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLX0NCi0NCi1GWF9CT09MIERvY3VtZW50Ojptb2REYXRlKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JQ1BERl9EaWN0aW9uYXJ5KiBwRGljdGlvbmFyeSA9IG1fcERvY3VtZW50LT5HZXREb2N1bWVudCgpLT5HZXRJbmZvKCk7DQotCWlmICghcERpY3Rpb25hcnkpcmV0dXJuIEZBTFNFOw0KLQ0KLQlpZiAodnAuSXNHZXR0aW5nKCkpDQotCXsNCi0JCXZwIDw8IHBEaWN0aW9uYXJ5LT5HZXRVbmljb2RlVGV4dCgiTW9kRGF0ZSIpOw0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlpZiAoIW1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9NT0RJRlkpKSByZXR1cm4gRkFMU0U7DQotDQotCQlDRlhfV2lkZVN0cmluZyBjc21vZERhdGU7DQotCQl2cCA+PiBjc21vZERhdGU7DQotCQlwRGljdGlvbmFyeS0+U2V0QXRTdHJpbmcoIk1vZERhdGUiLCBQREZfRW5jb2RlVGV4dChjc21vZERhdGUpKTsNCi0JCW1fcERvY3VtZW50LT5TZXRDaGFuZ2VNYXJrKCk7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLX0NCi0NCi1GWF9CT09MIERvY3VtZW50Ojpwcm9kdWNlcihPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCUNQREZfRGljdGlvbmFyeSogcERpY3Rpb25hcnkgPSBtX3BEb2N1bWVudC0+R2V0RG9jdW1lbnQoKS0+R2V0SW5mbygpOw0KLQlpZiAoIXBEaWN0aW9uYXJ5KXJldHVybiBGQUxTRTsNCi0NCi0JaWYgKHZwLklzR2V0dGluZygpKQ0KLQl7DQotCQl2cCA8PCBwRGljdGlvbmFyeS0+R2V0VW5pY29kZVRleHQoIlByb2R1Y2VyIik7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCWlmICghbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX01PRElGWSkpIHJldHVybiBGQUxTRTsNCi0NCi0JCUNGWF9XaWRlU3RyaW5nIGNzcHJvZHVjZXI7DQotCQl2cCA+PiBjc3Byb2R1Y2VyOw0KLQkJcERpY3Rpb25hcnktPlNldEF0U3RyaW5nKCJQcm9kdWNlciIsIFBERl9FbmNvZGVUZXh0KGNzcHJvZHVjZXIpKTsNCi0JCW1fcERvY3VtZW50LT5TZXRDaGFuZ2VNYXJrKCk7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLX0NCi0NCi1GWF9CT09MIERvY3VtZW50OjpzdWJqZWN0KE9CSl9QUk9QX1BBUkFNUykNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JQ1BERl9EaWN0aW9uYXJ5KiBwRGljdGlvbmFyeSA9IG1fcERvY3VtZW50LT5HZXREb2N1bWVudCgpLT5HZXRJbmZvKCk7DQotCWlmICghcERpY3Rpb25hcnkpcmV0dXJuIEZBTFNFOw0KLQ0KLQlpZiAodnAuSXNHZXR0aW5nKCkpDQotCXsNCi0JCXZwIDw8IHBEaWN0aW9uYXJ5LT5HZXRVbmljb2RlVGV4dCgiU3ViamVjdCIpOw0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlpZiAoIW1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9NT0RJRlkpKSByZXR1cm4gRkFMU0U7DQotDQotCQlDRlhfV2lkZVN0cmluZyBjc3N1YmplY3Q7DQotCQl2cCA+PiBjc3N1YmplY3Q7DQotCQlwRGljdGlvbmFyeS0+U2V0QXRTdHJpbmcoIlN1YmplY3QiLCBQREZfRW5jb2RlVGV4dChjc3N1YmplY3QpKTsNCi0JCW1fcERvY3VtZW50LT5TZXRDaGFuZ2VNYXJrKCk7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLX0NCi0NCi1GWF9CT09MIERvY3VtZW50Ojp0aXRsZShPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmIChtX3BEb2N1bWVudCA9PSBOVUxMIHx8IG1fcERvY3VtZW50LT5HZXREb2N1bWVudCgpID09IE5VTEwpDQotCQlyZXR1cm4gRkFMU0U7DQotDQotCUNQREZfRGljdGlvbmFyeSogcERpY3Rpb25hcnkgPSBtX3BEb2N1bWVudC0+R2V0RG9jdW1lbnQoKS0+R2V0SW5mbygpOw0KLQlpZiAoIXBEaWN0aW9uYXJ5KXJldHVybiBGQUxTRTsNCi0NCi0JaWYgKHZwLklzR2V0dGluZygpKQ0KLQl7DQotCQl2cCA8PCBwRGljdGlvbmFyeS0+R2V0VW5pY29kZVRleHQoIlRpdGxlIik7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCWlmICghbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX01PRElGWSkpIHJldHVybiBGQUxTRTsNCi0NCi0JCUNGWF9XaWRlU3RyaW5nIGNzdGl0bGU7DQotCQl2cCA+PiBjc3RpdGxlOw0KLQkJcERpY3Rpb25hcnktPlNldEF0U3RyaW5nKCJUaXRsZSIsIFBERl9FbmNvZGVUZXh0KGNzdGl0bGUpKTsNCi0JCW1fcERvY3VtZW50LT5TZXRDaGFuZ2VNYXJrKCk7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLX0NCi0NCi1GWF9CT09MIERvY3VtZW50OjpudW1QYWdlcyhPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlpZiAodnAuSXNHZXR0aW5nKCkpDQotCXsNCi0JCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0JCXZwIDw8IG1fcERvY3VtZW50LT5HZXRQYWdlQ291bnQoKTsNCi0JCXJldHVybiBUUlVFOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJcmV0dXJuIEZBTFNFOw0KLQl9DQotfQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OmV4dGVybmFsKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCS8vSW4gQ2hyb21lIGNhc2Usc2hvdWxkIGFsd2F5cyByZXR1cm4gdHJ1ZS4NCi0JdnAgPDwgVFJVRTsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OmZpbGVzaXplKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCWlmICghdnAuSXNHZXR0aW5nKCkpcmV0dXJuIEZBTFNFOw0KLQ0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotLy8gCUNGaWxlIGZpbGUobV9wRG9jdW1lbnQtPkdldFBhdGgoKSwgQ0ZpbGU6Om1vZGVSZWFkIHwgQ0ZpbGU6OnR5cGVCaW5hcnkgfCBDRmlsZTo6c2hhcmVEZW55Tm9uZSk7DQotLy8gCXZwIDw8IChkb3VibGUpZmlsZS5HZXRMZW5ndGgoKTsNCi0vLyAJZmlsZS5DbG9zZSgpOw0KLQ0KLQlpZiAoIG1fcERvY3VtZW50LT5HZXRQYXRoKCkuSXNFbXB0eSgpID09IEZBTFNFKQ0KLQl7DQotCQlDRlhfQnl0ZVN0cmluZyBic1N0ciA9IENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZSggbV9wRG9jdW1lbnQtPkdldFBhdGgoKSApOw0KLQkJRklMRSAqIHBGaWxlID0gTlVMTDsNCi0JCXBGaWxlID0gZm9wZW4oIGJzU3RyLkdldEJ1ZmZlciggYnNTdHIuR2V0TGVuZ3RoKCkgKSwgInJiIiApOw0KLQkJaWYgKCBwRmlsZSApDQotCQl7DQotCQkJZnNlZWsoIHBGaWxlLCAwLCBTRUVLX0VORCApOw0KLQkJCWxvbmcgbFNpemUgPSBmdGVsbCggcEZpbGUgKTsNCi0JCQlmY2xvc2UoIHBGaWxlICk7DQotCQkJcEZpbGUgPSBOVUxMOw0KLQ0KLQkJCXZwIDw8IChGWF9JTlQzMikobFNpemUpOw0KLQkJCXJldHVybiBUUlVFOw0KLQkJfQ0KLQl9DQotDQotCXZwIDw8IDA7DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIERvY3VtZW50Ojptb3VzZVgoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0gCXJldHVybiBUUlVFOwkNCi19DQotDQotRlhfQk9PTCBEb2N1bWVudDo6bW91c2VZKE9CSl9QUk9QX1BBUkFNUykNCi17DQotIAlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBEb2N1bWVudDo6YmFzZVVSTChPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlpZiAodnAuSXNHZXR0aW5nKCkpDQotCXsNCi0JCXZwIDw8IG1fY3dCYXNlVVJMOw0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQl2cCA+PiBtX2N3QmFzZVVSTDsNCi0JCXJldHVybiBUUlVFOw0KLQl9DQotfQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OmNhbGN1bGF0ZShPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gKENQREZTREtfSW50ZXJGb3JtKiltX3BEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7DQotCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOw0KLQ0KLQlpZiAodnAuSXNHZXR0aW5nKCkpDQotCXsNCi0JCWlmIChwSW50ZXJGb3JtLT5Jc0NhbGN1bGF0ZUVuYWJsZWQoKSkNCi0JCQl2cCA8PCB0cnVlOw0KLQkJZWxzZQ0KLQkJCXZwIDw8IGZhbHNlOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJYm9vbCBiQ2FsY3VsYXRlOw0KLQkJdnAgPj4gYkNhbGN1bGF0ZTsNCi0NCi0JCXBJbnRlckZvcm0tPkVuYWJsZUNhbGN1bGF0ZShiQ2FsY3VsYXRlKTsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBEb2N1bWVudDo6ZG9jdW1lbnRGaWxlTmFtZShPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlpZiAoIXZwLklzR2V0dGluZygpKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQ0KLQlDRlhfV2lkZVN0cmluZyB3c0ZpbGVQYXRoID0gbV9wRG9jdW1lbnQtPkdldFBhdGgoKTsNCi0NCi0JRlhfSU5UMzIgaSA9IHdzRmlsZVBhdGguR2V0TGVuZ3RoKCkgLSAxOw0KLQlmb3IgKCA7IGkgPj0gMDsgaS0tICkNCi0Jew0KLQkJaWYgKCB3c0ZpbGVQYXRoLkdldEF0KCBpICkgPT0gTCdcXCcgfHwgd3NGaWxlUGF0aC5HZXRBdCggaSApID09IEwnLycgKQ0KLQkJCWJyZWFrOw0KLQl9DQotCWlmICggaSA+PSAwICYmIGkgPCB3c0ZpbGVQYXRoLkdldExlbmd0aCgpIC0gMSApDQotCXsNCi0JCXZwIDw8ICggd3NGaWxlUGF0aC5HZXRCdWZmZXIoIHdzRmlsZVBhdGguR2V0TGVuZ3RoKCkgKSArIGkgKyAxICk7DQotCX1lbHNlew0KLQkJdnAgPDwgTCIiOw0KLQl9DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1DRlhfV2lkZVN0cmluZyBEb2N1bWVudDo6UmV2ZXJzYWxTdHIoQ0ZYX1dpZGVTdHJpbmcgY2JGcm9tKQ0KLXsNCi0Jd2NoYXJfdCogcEZyb20gPSBOVUxMOw0KLQlpbnQgaUxlbnRoID0gY2JGcm9tLkdldExlbmd0aCgpOw0KLQl3Y2hhcl90KiBwUmVzdWx0ID0gKHdjaGFyX3QqKW1hbGxvYygoaUxlbnRoKzEpICogc2l6ZW9mKHdjaGFyX3QpKTsNCi0JbWVtc2V0KHBSZXN1bHQsIDAsIChpTGVudGgrMSkpOw0KLQlwRnJvbSA9ICh3Y2hhcl90KiljYkZyb20uR2V0QnVmZmVyKGlMZW50aCk7DQotDQotCWZvciAoaW50IGkgPSAwOyBpIDwgaUxlbnRoOyBpKyspDQotCXsNCi0JCXBSZXN1bHRbaV0gPSAqKHBGcm9tICsgaUxlbnRoIC0gaSAtIDEpOw0KLQl9DQotDQotCWNiRnJvbS5SZWxlYXNlQnVmZmVyKCk7DQotCUNGWF9XaWRlU3RyaW5nIGNiUmV0ID0gQ0ZYX1dpZGVTdHJpbmcocFJlc3VsdCk7DQotCWZyZWUocFJlc3VsdCk7DQotCXBSZXN1bHQgPSBOVUxMOw0KLQlyZXR1cm4gY2JSZXQ7DQotfQ0KLQ0KLUNGWF9XaWRlU3RyaW5nIERvY3VtZW50OjpDdXRTdHJpbmcoQ0ZYX1dpZGVTdHJpbmcgY2JGcm9tKQ0KLXsNCi0Jd2NoYXJfdCogcEZyb20gPSBOVUxMOw0KLQlpbnQgaUxlbnRoID0gY2JGcm9tLkdldExlbmd0aCgpOw0KLQl3Y2hhcl90KiBwUmVzdWx0ID0gKHdjaGFyX3QqKW1hbGxvYygoaUxlbnRoKzEpICogc2l6ZW9mKHdjaGFyX3QpKTsNCi0JbWVtc2V0KHBSZXN1bHQsIDAsIChpTGVudGgrMSkpOw0KLQlwRnJvbSA9ICh3Y2hhcl90KiljYkZyb20uR2V0QnVmZmVyKGlMZW50aCk7DQotDQotCWZvciAoaW50IGkgPSAwOyBpIDwgaUxlbnRoOyBpKyspDQotCXsNCi0JCWlmIChwRnJvbVtpXSA9PSBMJ1xcJyB8fCBwRnJvbVtpXSA9PSBMJy8nKQ0KLQkJCWJyZWFrOw0KLQkJcFJlc3VsdFtpXSA9IHBGcm9tW2ldOw0KLQl9DQotDQotCWNiRnJvbS5SZWxlYXNlQnVmZmVyKCk7DQotCUNGWF9XaWRlU3RyaW5nIGNiUmV0ID0gQ0ZYX1dpZGVTdHJpbmcocFJlc3VsdCk7DQotCWZyZWUocFJlc3VsdCk7DQotCXBSZXN1bHQgPSBOVUxMOw0KLQlyZXR1cm4gY2JSZXQ7DQotfQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OnBhdGgoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JaWYgKCF2cC5Jc0dldHRpbmcoKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQl2cCA8PCBhcHA6OlN5c1BhdGhUb1BERlBhdGgobV9wRG9jdW1lbnQtPkdldFBhdGgoKSk7DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIERvY3VtZW50OjpwYWdlV2luZG93UmVjdChPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBEb2N1bWVudDo6bGF5b3V0KE9CSl9QUk9QX1BBUkFNUykNCi17CQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBEb2N1bWVudDo6YWRkTGluayhPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotIAlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBEb2N1bWVudDo6Y2xvc2VEb2MoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotDQotCQ0KLQkNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OmdldFBhZ2VCb3goT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLSAJcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OmdldEFubm90KE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0gCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIERvY3VtZW50OjpnZXRBbm5vdHMoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQl2UmV0LlNldE51bGwoKTsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OmdldEFubm90M0QoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQl2UmV0LlNldE51bGwoKTsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OmdldEFubm90czNEKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JdlJldCA9IFZUX3VuZGVmaW5lZDsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OmdldE9DR3MoT0JKX01FVEhPRF9QQVJBTVMpDQotewkNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OmdldExpbmtzKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLWJvb2wgRG9jdW1lbnQ6OklzRW5jbG9zZWRJblJlY3QoQ0ZYX0Zsb2F0UmVjdCByZWN0LCBDRlhfRmxvYXRSZWN0IExpbmtSZWN0KQ0KLXsNCi0JaWYgKHJlY3QubGVmdCA8PSBMaW5rUmVjdC5sZWZ0DQotCSAgJiYgcmVjdC50b3AgPD0gTGlua1JlY3QudG9wDQotCSAgJiYgcmVjdC5yaWdodCA+PSBMaW5rUmVjdC5yaWdodA0KLQkgICYmIHJlY3QuYm90dG9tID49IExpbmtSZWN0LmJvdHRvbSkNCi0JCXJldHVybiB0cnVlOw0KLQllbHNlDQotCQlyZXR1cm4gZmFsc2U7DQotfQ0KLQ0KLXZvaWQgSWNvblRyZWU6Okluc2VydEljb25FbGVtZW50KEljb25FbGVtZW50KiBwTmV3SWNvbikNCi17DQotCWlmICghcE5ld0ljb24pcmV0dXJuOw0KLQ0KLQlpZiAobV9wSGVhZCA9PSBOVUxMICYmIG1fcEVuZCA9PSBOVUxMKQ0KLQl7DQotCQltX3BIZWFkID0gbV9wRW5kID0gcE5ld0ljb247DQotCQltX2lMZW5ndGgrKzsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCW1fcEVuZC0+TmV4dEljb24gPSBwTmV3SWNvbjsNCi0JCW1fcEVuZCA9IHBOZXdJY29uOw0KLQkJbV9pTGVuZ3RoKys7DQotCX0NCi19DQotDQotdm9pZCBJY29uVHJlZTo6RGVsZXRlSWNvblRyZWUoKQ0KLXsNCi0JaWYgKCFtX3BIZWFkIHx8ICFtX3BFbmQpcmV0dXJuOw0KLQkNCi0JSWNvbkVsZW1lbnQqIHBUZW1wID0gTlVMTDsNCi0Jd2hpbGUobV9wRW5kICE9IG1fcEhlYWQpDQotCXsNCi0JCXBUZW1wID0gbV9wSGVhZDsNCi0JCW1fcEhlYWQgPSBtX3BIZWFkLT5OZXh0SWNvbjsNCi0JCWRlbGV0ZSBwVGVtcDsNCi0JfQ0KLQ0KLQlkZWxldGUgbV9wRW5kOw0KLQltX3BIZWFkID0gTlVMTDsNCi0JbV9wRW5kID0gTlVMTDsNCi19DQotDQotaW50IEljb25UcmVlOjpHZXRMZW5ndGgoKQ0KLXsNCi0JcmV0dXJuIG1faUxlbmd0aDsNCi19DQotDQotSWNvbkVsZW1lbnQqIEljb25UcmVlOjpvcGVyYXRvciBbXShpbnQgaUluZGV4KQ0KLXsNCi0JaWYgKGlJbmRleCA+PSAwICYmIGlJbmRleCA8PSBtX2lMZW5ndGgpDQotCXsNCi0JCUljb25FbGVtZW50KiBwVGVtcCA9IG1fcEhlYWQ7DQotCQlmb3IgKGludCBpID0gMDsgaSA8IGlJbmRleDsgaSsrKQ0KLQkJew0KLQkJCXBUZW1wID0gcFRlbXAtPk5leHRJY29uOw0KLQkJfQ0KLQkJcmV0dXJuIHBUZW1wOw0KLQl9DQotCWVsc2UNCi0JCXJldHVybiBOVUxMOw0KLX0NCi0NCi12b2lkIEljb25UcmVlOjpEZWxldGVJY29uRWxlbWVudChDRlhfV2lkZVN0cmluZyBzd0ljb25OYW1lKQ0KLXsNCi0JSWNvbkVsZW1lbnQqIHBUZW1wID0gbV9wSGVhZDsNCi0JaW50IGlMb29wQ291bnQgPSBtX2lMZW5ndGg7IA0KLQlmb3IgKGludCBpID0gMDsgaSA8IGlMb29wQ291bnQgLSAxOyBpKyspDQotCXsNCi0JCWlmIChwVGVtcCA9PSBtX3BFbmQpDQotCQkJYnJlYWs7DQotCQ0KLQkJaWYgKG1fcEhlYWQtPkljb25OYW1lID09IHN3SWNvbk5hbWUpDQotCQl7DQotCQkJbV9wSGVhZCA9IG1fcEhlYWQtPk5leHRJY29uOw0KLQkJCWRlbGV0ZSBwVGVtcDsNCi0JCQltX2lMZW5ndGgtLTsNCi0JCQlwVGVtcCA9IG1fcEhlYWQ7DQotCQl9DQotCQlpZiAocFRlbXAtPk5leHRJY29uLT5JY29uTmFtZSA9PSBzd0ljb25OYW1lKQ0KLQkJew0KLQkJCWlmIChwVGVtcC0+TmV4dEljb24gPT0gbV9wRW5kKQ0KLQkJCXsNCi0JCQkJbV9wRW5kID0gcFRlbXA7DQotCQkJCWRlbGV0ZSBwVGVtcC0+TmV4dEljb247DQotCQkJCW1faUxlbmd0aC0tOw0KLQkJCQlwVGVtcC0+TmV4dEljb24gPSBOVUxMOw0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQlJY29uRWxlbWVudCogcEVsZW1lbnQgPSBwVGVtcC0+TmV4dEljb247DQotCQkJCXBUZW1wLT5OZXh0SWNvbiA9IHBUZW1wLT5OZXh0SWNvbi0+TmV4dEljb247DQotCQkJCWRlbGV0ZSBwRWxlbWVudDsNCi0JCQkJbV9pTGVuZ3RoLS07DQotCQkJCXBFbGVtZW50ID0gTlVMTDsNCi0JCQl9DQotDQotCQkJY29udGludWU7DQotCQl9DQotDQotCQlwVGVtcCA9IHBUZW1wLT5OZXh0SWNvbjsNCi0JfQ0KLX0NCi0NCi1GWF9CT09MIERvY3VtZW50OjphZGRJY29uKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JaWYgKHBhcmFtcy5zaXplKCkgIT0gMilyZXR1cm4gRkFMU0U7DQotDQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0JQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpOw0KLQlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7DQotDQotCUNGWF9XaWRlU3RyaW5nIHN3SWNvbk5hbWUgPSBwYXJhbXNbMF0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsNCi0JDQotCUpTRlhPYmplY3QgcEpTSWNvbiA9IChKU0ZYT2JqZWN0KXBhcmFtc1sxXTsNCi0JaWYgKEpTX0dldE9iakRlZm5JRChwSlNJY29uKSAhPSBKU19HZXRPYmpEZWZuSUQoKnBSdW50aW1lLCBMIkljb24iKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlDSlNfRW1iZWRPYmoqIHBFbWJlZE9iaiA9ICgoQ0pTX09iamVjdCopcGFyYW1zWzFdKS0+R2V0RW1iZWRPYmplY3QoKTsNCi0JaWYgKCFwRW1iZWRPYmopcmV0dXJuIEZBTFNFOw0KLQlJY29uKiBwSWNvbiA9IChJY29uKilwRW1iZWRPYmo7DQotDQotCWlmICghbV9wSWNvblRyZWUpDQotCQltX3BJY29uVHJlZSA9IG5ldyBJY29uVHJlZSgpOw0KLQ0KLQlJY29uRWxlbWVudCogcE5ld0ljb24gPSBuZXcgSWNvbkVsZW1lbnQoKTsNCi0JcE5ld0ljb24tPkljb25OYW1lID0gc3dJY29uTmFtZTsNCi0JcE5ld0ljb24tPk5leHRJY29uID0gTlVMTDsNCi0JcE5ld0ljb24tPkljb25TdHJlYW0gPSBwSWNvbjsNCi0JbV9wSWNvblRyZWUtPkluc2VydEljb25FbGVtZW50KHBOZXdJY29uKTsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6Omljb25zKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCWlmICh2cC5Jc1NldHRpbmcoKSkNCi0JCXJldHVybiBGQUxTRTsNCi0NCi0JaWYgKCFtX3BJY29uVHJlZSkNCi0Jew0KLQkJdnAuU2V0TnVsbCgpOw0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0NCi0JQ0pTX0FycmF5IEljb25zKG1faXNvbGF0ZSk7DQotCUljb25FbGVtZW50KiBwSWNvbkVsZW1lbnQgPSBOVUxMOw0KLQlpbnQgaUljb25UcmVlTGVuZ3RoID0gbV9wSWNvblRyZWUtPkdldExlbmd0aCgpOw0KLQ0KLQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQgKiljYzsNCi0JQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpOw0KLQ0KLQlmb3IgKGludCBpID0gMDsgaSA8IGlJY29uVHJlZUxlbmd0aDsgaSsrKQ0KLQl7DQotCQlwSWNvbkVsZW1lbnQgPSAoKm1fcEljb25UcmVlKVtpXTsNCi0JCQ0KLQkJSlNGWE9iamVjdCAgcE9iaiA9IEpTX05ld0Z4RHluYW1pY09iaigqcFJ1bnRpbWUsIHBDb250ZXh0LCBKU19HZXRPYmpEZWZuSUQoKnBSdW50aW1lLCBMIkljb24iKSk7DQotCQlpZiAocE9iai5Jc0VtcHR5KCkpIHJldHVybiBGQUxTRTsNCi0JCQkJDQotCQlDSlNfSWNvbiAqIHBKU19JY29uID0gKENKU19JY29uICopSlNfR2V0UHJpdmF0ZShwT2JqKTsNCi0JCWlmICghcEpTX0ljb24pIHJldHVybiBGQUxTRTsNCi0NCi0JCUljb24qIHBJY29uID0gKEljb24qKXBKU19JY29uLT5HZXRFbWJlZE9iamVjdCgpOw0KLQkJaWYgKCFwSWNvbilyZXR1cm4gRkFMU0U7DQotDQotCQlwSWNvbi0+U2V0U3RyZWFtKHBJY29uRWxlbWVudC0+SWNvblN0cmVhbS0+R2V0U3RyZWFtKCkpOw0KLQkJcEljb24tPlNldEljb25OYW1lKHBJY29uRWxlbWVudC0+SWNvbk5hbWUpOw0KLQkJSWNvbnMuU2V0RWxlbWVudChpLCBDSlNfVmFsdWUobV9pc29sYXRlLHBKU19JY29uKSk7DQotCX0NCi0NCi0JdnAgPDwgSWNvbnM7DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIERvY3VtZW50OjpnZXRJY29uKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JaWYgKHBhcmFtcy5zaXplKCkgIT0gMSlyZXR1cm4gRkFMU0U7DQotCWlmKCFtX3BJY29uVHJlZSkNCi0JCXJldHVybiBGQUxTRTsNCi0JQ0ZYX1dpZGVTdHJpbmcgc3dJY29uTmFtZSA9IHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOw0KLQlpbnQgaUljb25Db3VudHMgPSBtX3BJY29uVHJlZS0+R2V0TGVuZ3RoKCk7DQotDQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjOw0KLQlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7DQotDQotCWZvciAoaW50IGkgPSAwOyBpIDwgaUljb25Db3VudHM7IGkrKykNCi0Jew0KLQkJaWYgKCgqbV9wSWNvblRyZWUpW2ldLT5JY29uTmFtZSA9PSBzd0ljb25OYW1lKQ0KLQkJew0KLQkJCUljb24qIHBSZXRJY29uID0gKCptX3BJY29uVHJlZSlbaV0tPkljb25TdHJlYW07DQotCQkJCQ0KLQkJCUpTRlhPYmplY3QgIHBPYmogPSBKU19OZXdGeER5bmFtaWNPYmooKnBSdW50aW1lLCBwQ29udGV4dCwgSlNfR2V0T2JqRGVmbklEKCpwUnVudGltZSwgTCJJY29uIikpOw0KLQkJCWlmIChwT2JqLklzRW1wdHkoKSkgcmV0dXJuIEZBTFNFOw0KLQkJCQkJDQotCQkJQ0pTX0ljb24gKiBwSlNfSWNvbiA9IChDSlNfSWNvbiAqKUpTX0dldFByaXZhdGUocE9iaik7DQotCQkJaWYgKCFwSlNfSWNvbikgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJCUljb24qIHBJY29uID0gKEljb24qKXBKU19JY29uLT5HZXRFbWJlZE9iamVjdCgpOw0KLQkJCWlmICghcEljb24pcmV0dXJuIEZBTFNFOw0KLQ0KLQkJCXBJY29uLT5TZXRJY29uTmFtZShzd0ljb25OYW1lKTsNCi0JCQlwSWNvbi0+U2V0U3RyZWFtKHBSZXRJY29uLT5HZXRTdHJlYW0oKSk7DQotCQkJdlJldCA9IHBKU19JY29uOw0KLQkJCXJldHVybiBUUlVFOw0KLQkJfQ0KLQl9DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBEb2N1bWVudDo6cmVtb3ZlSWNvbihPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCWlmIChwYXJhbXMuc2l6ZSgpICE9IDEpcmV0dXJuIEZBTFNFOw0KLQlpZighbV9wSWNvblRyZWUpDQotCQlyZXR1cm4gRkFMU0U7DQotCUNGWF9XaWRlU3RyaW5nIHN3SWNvbk5hbWUgPSBwYXJhbXNbMF0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsNCi0jaWZuZGVmIEZPWElUX0NIUk9NRV9CVUlMRA0KLQltX3BJY29uVHJlZS0+RGVsZXRlSWNvbkVsZW1lbnQoc3dJY29uTmFtZSk7DQotI2VuZGlmDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIERvY3VtZW50OjpjcmVhdGVEYXRhT2JqZWN0KE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JaWYgKElzU2FmZU1vZGUoY2MpKSByZXR1cm4gVFJVRTsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlDRlhfV2lkZVN0cmluZyBzd05hbWUgPSBMIiI7DQotCUNGWF9CeXRlU3RyaW5nIHNiTmFtZSA9ICIiOw0KLQlDRlhfV2lkZVN0cmluZyBzd1ZhbHVlID0gTCIiOw0KLQlDRlhfV2lkZVN0cmluZyBzd01JTUVUeXBlID0gTCIiOw0KLQlDRlhfV2lkZVN0cmluZyBzd0NyeXB0RmlsdGVyID0gTCIiOw0KLQlDRlhfQnl0ZVN0cmluZyBzYkZpbGVWYWx1ZSA9ICIiOw0KLQkNCi0JaW50IGlQYXJhbVNpemUgPSBwYXJhbXMuc2l6ZSgpOw0KLQlmb3IgKGludCBpID0gMDsgaSA8IGlQYXJhbVNpemU7IGkrKykNCi0Jew0KLQkJaWYgKGkgPT0gMCkNCi0JCQlzd05hbWUgPSBwYXJhbXNbMF07DQotCQlpZiAoaSA9PSAxKQ0KLQkJCXN3VmFsdWUgPSBwYXJhbXNbMV07DQotCQlpZiAoaSA9PSAyKQ0KLQkJCXN3TUlNRVR5cGUgPSBwYXJhbXNbMl07DQotCQlpZiAoaSA9PSAzKQ0KLQkJCXN3Q3J5cHRGaWx0ZXIgPSBwYXJhbXNbNF07DQotCX0NCi0NCi0JRklMRSogcEZpbGUgPSBOVUxMOw0KLQ0KLQkvL0NGaWxlU3RhdHVzIGZpbGVTdGF0dXM7DQotCWNvbnN0IGludCBCVUZTSVpFID0gMTc7DQotCUZYX0JZVEUgYnVmW0JVRlNJWkVdOw0KLQlGWF9CWVRFICpwQnVmZmVyID0gTlVMTDsNCi0JY2hhciogcEJ1ZiA9IE5VTEw7DQotCWludCBuRmlsZVNpemUgPSAwOw0KLQlzYkZpbGVWYWx1ZSA9IENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShzd1ZhbHVlKTsNCi0Jc2JOYW1lID0gQ0ZYX0J5dGVTdHJpbmc6OkZyb21Vbmljb2RlKHN3TmFtZSk7DQotCWludCBpQnVmTGVuZ3RoID0gc2JGaWxlVmFsdWUuR2V0TGVuZ3RoKCk7DQotCXBCdWYgPSAoY2hhciopbWFsbG9jKHNpemVvZihjaGFyKSAqIGlCdWZMZW5ndGgpOw0KLQlwQnVmID0gc2JGaWxlVmFsdWUuR2V0QnVmZmVyKGlCdWZMZW5ndGgpOw0KLQ0KLQlpZiAoIE5VTEwgPT0gKHBGaWxlID0gRlhTWVNfZm9wZW4oIHNiTmFtZS5HZXRCdWZmZXIoc2JOYW1lLkdldExlbmd0aCgpKSwgIndiKyIgKSkgKQ0KLQl7DQotCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0NCi0JZndyaXRlKCBwQnVmLCBzaXplb2YoY2hhciksIGlCdWZMZW5ndGgsIHBGaWxlICk7DQotCWZjbG9zZSggcEZpbGUgKTsNCi0JcEZpbGUgPSBOVUxMOw0KLQ0KLQlwRmlsZSA9IEZYU1lTX2ZvcGVuKCBzYk5hbWUuR2V0QnVmZmVyKHNiTmFtZS5HZXRMZW5ndGgoKSksICJyYisiICk7DQotCWZzZWVrKCBwRmlsZSwgMCwgU0VFS19FTkQgKTsNCi0JbkZpbGVTaXplID0gZnRlbGwoIHBGaWxlICk7DQotDQotCXBCdWZmZXIgPSBuZXcgRlhfQllURVtuRmlsZVNpemVdOw0KLQlmc2VlayggcEZpbGUsIDAsIFNFRUtfU0VUICk7DQotCXNpemVfdCBzID0gZnJlYWQoIHBCdWZmZXIsIHNpemVvZihjaGFyKSwgbkZpbGVTaXplLCBwRmlsZSApOw0KLQlpZihzID09IDApDQotCXsNCi0JCWRlbGV0ZVtdIHBCdWZmZXI7DQotCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0NCi0JQ1JZUFRfTUQ1R2VuZXJhdGUocEJ1ZmZlciwgbkZpbGVTaXplLCBidWYpOw0KLQlidWZbQlVGU0laRSAtIDFdID0gMDsNCi0JQ0ZYX1dpZGVTdHJpbmcgY3NDaGVja1N1bSgoRlhfTFBDV1NUUilidWYsIDE2KTsNCi0JZGVsZXRlW10gcEJ1ZmZlcjsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6Om1lZGlhKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIERvY3VtZW50OjpjYWxjdWxhdGVOb3coT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmICghKG1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9NT0RJRlkpIHx8IA0KLQkJbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX0FOTk9UX0ZPUk0pIHx8DQotCQltX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fRklMTF9GT1JNKSkpIHJldHVybiBGQUxTRTsNCi0NCi0JQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSAoQ1BERlNES19JbnRlckZvcm0qKW1fcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsNCi0JQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7DQotCXBJbnRlckZvcm0tPk9uQ2FsY3VsYXRlKCk7DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIERvY3VtZW50OjpDb2xsYWIoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OmdldFBhZ2VOdGhXb3JkKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JLy9pZiAoSXNTYWZlTW9kZShjYykpIHJldHVybiBUUlVFOw0KLQ0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmICghbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX0VYVFJBQ1RfQUNDRVNTKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlpbnQgblBhZ2VObyA9IHBhcmFtcy5HZXRTaXplKCkgPiAwID8gKGludClwYXJhbXNbMF0gOiAwOw0KLQlpbnQgbldvcmRObyA9IHBhcmFtcy5HZXRTaXplKCkgPiAxID8gKGludClwYXJhbXNbMV0gOiAwOw0KLQlib29sIGJTdHJpcCA9IHBhcmFtcy5HZXRTaXplKCkgPiAyID8gKGJvb2wpcGFyYW1zWzJdIDogdHJ1ZTsNCi0NCi0JQ1BERl9Eb2N1bWVudCogcERvY3VtZW50ID0gbV9wRG9jdW1lbnQtPkdldERvY3VtZW50KCk7DQotCWlmICghcERvY3VtZW50KSByZXR1cm4gRkFMU0U7DQotDQotCWlmIChuUGFnZU5vIDwgMCB8fCBuUGFnZU5vID49IHBEb2N1bWVudC0+R2V0UGFnZUNvdW50KCkpDQotCXsNCi0JCS8vc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQoSURTX1NUUklOR19KU1BBUkFNRVJST1IpOw0KLQkJcmV0dXJuIEZBTFNFOw0KLQl9DQotDQotCUNQREZfRGljdGlvbmFyeSogcFBhZ2VEaWN0ID0gcERvY3VtZW50LT5HZXRQYWdlKG5QYWdlTm8pOw0KLQlpZiAoIXBQYWdlRGljdCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlDUERGX1BhZ2UgcGFnZTsNCi0JcGFnZS5Mb2FkKHBEb2N1bWVudCwgcFBhZ2VEaWN0KTsNCi0JcGFnZS5TdGFydFBhcnNlKCk7DQotCXBhZ2UuUGFyc2VDb250ZW50KCk7DQotDQotCUZYX1BPU0lUSU9OIHBvcyA9IHBhZ2UuR2V0Rmlyc3RPYmplY3RQb3NpdGlvbigpOw0KLQ0KLQlpbnQgbldvcmRzID0gMDsNCi0NCi0JQ0ZYX1dpZGVTdHJpbmcgc3dSZXQ7DQotDQotCXdoaWxlIChwb3MpDQotCXsNCi0JCWlmIChDUERGX1BhZ2VPYmplY3QqIHBQYWdlT2JqID0gcGFnZS5HZXROZXh0T2JqZWN0KHBvcykpDQotCQl7DQotCQkJaWYgKHBQYWdlT2JqLT5tX1R5cGUgPT0gUERGUEFHRV9URVhUKQ0KLQkJCXsNCi0JCQkJaW50IG5PYmpXb3JkcyA9IENvdW50V29yZHMoKENQREZfVGV4dE9iamVjdCopcFBhZ2VPYmopOw0KLQ0KLQkJCQlpZiAobldvcmRzICsgbk9ialdvcmRzID49IG5Xb3JkTm8pDQotCQkJCXsNCi0JCQkJCXN3UmV0ID0gR2V0T2JqV29yZFN0cigoQ1BERl9UZXh0T2JqZWN0KilwUGFnZU9iaiwgbldvcmRObyAtIG5Xb3Jkcyk7DQotCQkJCQlicmVhazsNCi0JCQkJfQ0KLQ0KLQkJCQluV29yZHMgKz0gbk9ialdvcmRzOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQlpZiAoYlN0cmlwKQ0KLQl7DQotCQlzd1JldC5UcmltTGVmdCgpOw0KLQkJc3dSZXQuVHJpbVJpZ2h0KCk7DQotCX0NCi0NCi0JdlJldCA9IHN3UmV0Ow0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBEb2N1bWVudDo6Z2V0UGFnZU50aFdvcmRRdWFkcyhPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCS8vaWYgKElzU2FmZU1vZGUoY2MpKSByZXR1cm4gVFJVRTsNCi0NCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAoIW1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9FWFRSQUNUX0FDQ0VTUykpIHJldHVybiBGQUxTRTsNCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MIERvY3VtZW50OjpnZXRQYWdlTnVtV29yZHMoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmICghbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX0VYVFJBQ1RfQUNDRVNTKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlpbnQgblBhZ2VObyA9IHBhcmFtcy5HZXRTaXplKCkgPiAwID8gKGludClwYXJhbXNbMF0gOiAwOw0KLQ0KLQlDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQgPSBtX3BEb2N1bWVudC0+R2V0RG9jdW1lbnQoKTsNCi0JQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKG5QYWdlTm8gPCAwIHx8IG5QYWdlTm8gPj0gcERvY3VtZW50LT5HZXRQYWdlQ291bnQoKSkNCi0Jew0KLQkJLy9zRXJyb3IgPSBKU0dldFN0cmluZ0Zyb21JRChJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7DQotCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0NCi0JQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QgPSBwRG9jdW1lbnQtPkdldFBhZ2UoblBhZ2VObyk7DQotCWlmICghcFBhZ2VEaWN0KSByZXR1cm4gRkFMU0U7DQotDQotCUNQREZfUGFnZSBwYWdlOw0KLQlwYWdlLkxvYWQocERvY3VtZW50LCBwUGFnZURpY3QpOw0KLQlwYWdlLlN0YXJ0UGFyc2UoKTsNCi0JcGFnZS5QYXJzZUNvbnRlbnQoKTsNCi0NCi0JRlhfUE9TSVRJT04gcG9zID0gcGFnZS5HZXRGaXJzdE9iamVjdFBvc2l0aW9uKCk7DQotDQotCWludCBuV29yZHMgPSAwOw0KLQ0KLQl3aGlsZSAocG9zKQ0KLQl7DQotCQlpZiAoQ1BERl9QYWdlT2JqZWN0KiBwUGFnZU9iaiA9IHBhZ2UuR2V0TmV4dE9iamVjdChwb3MpKQ0KLQkJew0KLQkJCWlmIChwUGFnZU9iai0+bV9UeXBlID09IFBERlBBR0VfVEVYVCkNCi0JCQl7DQotCQkJCUNQREZfVGV4dE9iamVjdCogcFRleHRPYmogPSAoQ1BERl9UZXh0T2JqZWN0KilwUGFnZU9iajsNCi0JCQkJbldvcmRzICs9IENvdW50V29yZHMocFRleHRPYmopOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQl2UmV0ID0gbldvcmRzOw0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBEb2N1bWVudDo6Z2V0UHJpbnRQYXJhbXMoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotCUNKU19SdW50aW1lKiBwUnVudGltZSA9IHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKTsNCi0JQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOw0KLQlKU0ZYT2JqZWN0IHBSZXRPYmogPSBKU19OZXdGeER5bmFtaWNPYmooKnBSdW50aW1lLCBwQ29udGV4dCwgSlNfR2V0T2JqRGVmbklEKCpwUnVudGltZSwgTCJQcmludFBhcmFtc09iaiIpKTsNCi0JLy9ub3QgaW1wbGVtZW50ZWQgeWV0Lg0KLQl2UmV0ID0gcFJldE9iajsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLSNkZWZpbmUgSVNMQVRJTldPUkQodSkJKHUgIT0gMHgyMCAmJiB1IDw9IDB4MjhGRikNCi0NCi1pbnQJRG9jdW1lbnQ6OkNvdW50V29yZHMoQ1BERl9UZXh0T2JqZWN0KiBwVGV4dE9iaikNCi17DQotCWlmICghcFRleHRPYmopIHJldHVybiAwOw0KLQ0KLQlpbnQgbldvcmRzID0gMDsNCi0NCi0JQ1BERl9Gb250KiBwRm9udCA9IHBUZXh0T2JqLT5HZXRGb250KCk7DQotCWlmICghcEZvbnQpIHJldHVybiAwOw0KLQ0KLQlGWF9CT09MIGJJc0xhdGluID0gRkFMU0U7DQotDQotCWZvciAoaW50IGk9MCwgc3o9cFRleHRPYmotPkNvdW50Q2hhcnMoKTsgaTxzejsgaSsrKQ0KLQl7DQotCQlGWF9EV09SRCBjaGFyY29kZSA9IC0xOw0KLQkJRlhfRkxPQVQga2VybmluZzsNCi0NCi0JCXBUZXh0T2JqLT5HZXRDaGFySW5mbyhpLCBjaGFyY29kZSwga2VybmluZyk7DQotCQlDRlhfV2lkZVN0cmluZyBzd1VuaWNvZGUgPSBwRm9udC0+VW5pY29kZUZyb21DaGFyQ29kZShjaGFyY29kZSk7DQotDQotCQlGWF9XT1JEIHVuaWNvZGUgPSAwOw0KLQkJaWYgKHN3VW5pY29kZS5HZXRMZW5ndGgoKSA+IDApDQotCQkJdW5pY29kZSA9IHN3VW5pY29kZVswXTsNCi0NCi0JCWlmIChJU0xBVElOV09SRCh1bmljb2RlKSAmJiBiSXNMYXRpbikNCi0JCQljb250aW51ZTsNCi0JCQ0KLQkJYklzTGF0aW4gPSBJU0xBVElOV09SRCh1bmljb2RlKTsNCi0JCWlmICh1bmljb2RlICE9IDB4MjApDQotCQkJbldvcmRzKys7DQotCX0NCi0NCi0JcmV0dXJuIG5Xb3JkczsNCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgRG9jdW1lbnQ6OkdldE9ialdvcmRTdHIoQ1BERl9UZXh0T2JqZWN0KiBwVGV4dE9iaiwgaW50IG5Xb3JkSW5kZXgpDQotew0KLQlBU1NFUlQocFRleHRPYmogIT0gTlVMTCk7DQotDQotCUNGWF9XaWRlU3RyaW5nIHN3UmV0Ow0KLQ0KLQlDUERGX0ZvbnQqIHBGb250ID0gcFRleHRPYmotPkdldEZvbnQoKTsNCi0JaWYgKCFwRm9udCkgcmV0dXJuIEwiIjsNCi0NCi0JaW50IG5Xb3JkcyA9IDA7DQotCUZYX0JPT0wgYklzTGF0aW4gPSBGQUxTRTsNCi0NCi0JZm9yIChpbnQgaT0wLCBzej1wVGV4dE9iai0+Q291bnRDaGFycygpOyBpPHN6OyBpKyspDQotCXsNCi0JCUZYX0RXT1JEIGNoYXJjb2RlID0gLTE7DQotCQlGWF9GTE9BVCBrZXJuaW5nOw0KLQ0KLQkJcFRleHRPYmotPkdldENoYXJJbmZvKGksIGNoYXJjb2RlLCBrZXJuaW5nKTsNCi0JCUNGWF9XaWRlU3RyaW5nIHN3VW5pY29kZSA9IHBGb250LT5Vbmljb2RlRnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsNCi0NCi0JCUZYX1dPUkQgdW5pY29kZSA9IDA7DQotCQlpZiAoc3dVbmljb2RlLkdldExlbmd0aCgpID4gMCkNCi0JCQl1bmljb2RlID0gc3dVbmljb2RlWzBdOw0KLQ0KLQkJaWYgKElTTEFUSU5XT1JEKHVuaWNvZGUpICYmIGJJc0xhdGluKQ0KLQkJew0KLQkJfQ0KLQkJZWxzZQ0KLQkJewkJDQotCQkJYklzTGF0aW4gPSBJU0xBVElOV09SRCh1bmljb2RlKTsNCi0JCQlpZiAodW5pY29kZSAhPSAweDIwKQ0KLQkJCQluV29yZHMrKzsJDQotCQl9DQotDQotCQlpZiAobldvcmRzLTEgPT0gbldvcmRJbmRleCkNCi0JCQlzd1JldCArPSB1bmljb2RlOw0KLQl9DQotDQotCXJldHVybiBzd1JldDsNCi19DQotDQotRlhfQk9PTCBEb2N1bWVudDo6em9vbShPQkpfUFJPUF9QQVJBTVMpDQotew0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotLyoqDQotKG5vbmUsCU5vVmFyeSkNCi0oZml0UCwJRml0UGFnZSkNCi0oZml0VywJRml0V2lkdGgpDQotKGZpdEgsCUZpdEhlaWdodCkNCi0oZml0ViwJRml0VmlzaWJsZVdpZHRoKQ0KLShwcmVmLAlQcmVmZXJyZWQpDQotKHJlZlcsCVJlZmxvd1dpZHRoKQ0KLSovDQotDQotRlhfQk9PTCBEb2N1bWVudDo6em9vbVR5cGUoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6OmRlbGV0ZVBhZ2VzKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JDQotDQotCQ0KLQkNCi0NCi0NCi0Jdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBHZXRJc29sYXRlKGNjKTsNCi0vLyAJaWYgKHBFbnYtPkdldEFwcE5hbWUoKS5Db21wYXJlKFBIQU5UT00pICE9IDApDQotLy8gCQlyZXR1cm4gVFJVRTsNCi0NCi0JLy9pZiAoSXNTYWZlTW9kZShjYykpIHJldHVybiBUUlVFOw0KLQ0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmICghKG1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9NT0RJRlkpIHx8IA0KLQkJbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX0FTU0VNQkxFKSkpIHJldHVybiBGQUxTRTsNCi0NCi0JaW50IGlTaXplID0gcGFyYW1zLnNpemUoKTsNCi0JDQotCWludCBuU3RhcnQgPSAwOw0KLQlpbnQgbkVuZCA9IDA7DQotCQ0KLQlpZiAoaVNpemUgPCAxKQ0KLQl7DQotCX0NCi0JZWxzZSBpZiAoaVNpemUgPT0gMSkNCi0Jew0KLQkJaWYgKHBhcmFtc1swXS5HZXRUeXBlKCkgPT0gVlRfb2JqZWN0KQ0KLQkJew0KLQkJCUpTT2JqZWN0ICBwT2JqID0gKEpTT2JqZWN0IClwYXJhbXNbMF07DQotCQkJdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLCBMIm5TdGFydCIpOw0KLQkJCQluU3RhcnQgPSAoaW50KUNKU19WYWx1ZShtX2lzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpOw0KLQ0KLQkJCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLCBMIm5FbmQiKTsNCi0JCQkJbkVuZCA9IChpbnQpQ0pTX1ZhbHVlKG1faXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJblN0YXJ0ID0gKGludClwYXJhbXNbMF07DQotCQl9DQotCX0NCi0JZWxzZQ0KLQl7DQotCQluU3RhcnQgPSAoaW50KXBhcmFtc1swXTsNCi0JCW5FbmQgPSAoaW50KXBhcmFtc1sxXTsNCi0JfQ0KLQ0KLQlpbnQgblRvdGFsID0gbV9wRG9jdW1lbnQtPkdldFBhZ2VDb3VudCgpOw0KLQ0KLQlpZiAoblN0YXJ0IDwgMCkJblN0YXJ0ID0gMDsNCi0JaWYgKG5TdGFydCA+PSBuVG90YWwpIG5TdGFydCA9IG5Ub3RhbCAtIDE7DQotDQotCWlmIChuRW5kIDwgMCkgbkVuZCA9IDA7DQotCWlmIChuRW5kID49IG5Ub3RhbCkgbkVuZCA9IG5Ub3RhbCAtIDE7DQotDQotCWlmIChuRW5kIDwgblN0YXJ0KSBuRW5kID0gblN0YXJ0Ow0KLQ0KLQkNCi0NCi0jaWZuZGVmIEZPWElUX0NIUk9NRV9CVUlMRA0KLQlyZXR1cm4gbV9wRG9jdW1lbnQtPkRlbGV0ZVBhZ2VzKG5TdGFydCwgbkVuZCAtIG5TdGFydCArIDEpOw0KLSNlbHNlDQotCXJldHVybiBUUlVFOw0KLSNlbmRpZg0KLX0NCi0NCi1GWF9CT09MIERvY3VtZW50OjpleHRyYWN0UGFnZXMoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQkNCi0NCi0JDQotCQ0KLQkNCi0NCi0Jdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBHZXRJc29sYXRlKGNjKTsNCi0NCi0JaWYgKElzU2FmZU1vZGUoY2MpKSByZXR1cm4gVFJVRTsNCi0NCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAoIW1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9FWFRSQUNUKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlpbnQgaVNpemUgPSBwYXJhbXMuc2l6ZSgpOw0KLQkNCi0JaW50IG5Ub3RhbCA9IG1fcERvY3VtZW50LT5HZXRQYWdlQ291bnQoKTsNCi0JaW50IG5TdGFydCA9IDA7DQotCWludCBuRW5kID0gblRvdGFsIC0gMTsNCi0NCi0JQ0ZYX1dpZGVTdHJpbmcgc3dGaWxlUGF0aDsNCi0JDQotCWlmIChpU2l6ZSA8IDEpDQotCXsNCi0JfQ0KLQllbHNlIGlmIChpU2l6ZSA9PSAxKQ0KLQl7DQotCQlpZiAocGFyYW1zWzBdLkdldFR5cGUoKSA9PSBWVF9vYmplY3QpDQotCQl7DQotCQkJSlNPYmplY3QgIHBPYmogPSAoSlNPYmplY3QgKXBhcmFtc1swXTsNCi0JCQl2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwiblN0YXJ0Iik7DQotCQkJCW5TdGFydCA9IChpbnQpQ0pTX1ZhbHVlKG1faXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSk7DQotDQotCQkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwibkVuZCIpOw0KLQkJCQluRW5kID0gKGludClDSlNfVmFsdWUobV9pc29sYXRlLHBWYWx1ZSxHRVRfVkFMVUVfVFlQRShwVmFsdWUpKTsNCi0NCi0JCQlwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaiwgTCJjUGF0aCIpOw0KLQkJCQlzd0ZpbGVQYXRoID0gQ0pTX1ZhbHVlKG1faXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSkub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQluU3RhcnQgPSAoaW50KXBhcmFtc1swXTsNCi0JCX0NCi0JfQ0KLQllbHNlIGlmIChpU2l6ZSA9PSAyKQ0KLQl7DQotCQluU3RhcnQgPSAoaW50KXBhcmFtc1swXTsNCi0JCW5FbmQgPSAoaW50KXBhcmFtc1sxXTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCW5TdGFydCA9IChpbnQpcGFyYW1zWzBdOw0KLQkJbkVuZCA9IChpbnQpcGFyYW1zWzFdOw0KLQkJc3dGaWxlUGF0aCA9IHBhcmFtc1syXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOw0KLQl9DQotDQotCWlmIChuRW5kIDwgblN0YXJ0KQ0KLQkJbkVuZCA9IG5TdGFydDsNCi0NCi0JQ1BERl9Eb2N1bWVudCAqcE5ld0RvYyA9IG5ldyBDUERGX0RvY3VtZW50Ow0KLQlwTmV3RG9jLT5DcmVhdGVOZXdEb2MoKTsJDQotDQotCUNGWF9Xb3JkQXJyYXkgYXJyYXk7DQotCWZvciAoaW50IGk9blN0YXJ0OyBpPD1uRW5kOyBpKyspDQotCQlhcnJheS5BZGQoaSk7DQotDQotLy8JbV9wRG9jdW1lbnQtPkV4dHJhY3RQYWdlcyhhcnJheSwgcE5ld0RvYyk7DQotDQotCWlmIChzd0ZpbGVQYXRoLklzRW1wdHkoKSkNCi0Jew0KLQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJc3dGaWxlUGF0aCA9IGFwcDo6UERGUGF0aFRvU3lzUGF0aChzd0ZpbGVQYXRoKTsNCi0JCUNQREZfQ3JlYXRvciBQREZDcmVhdGVyKHBOZXdEb2MpOw0KLQkJUERGQ3JlYXRlci5DcmVhdGUoc3dGaWxlUGF0aCk7DQotCQlkZWxldGUgcE5ld0RvYzsNCi0vLwkJcEVudi0+T3BlbkRvY3VtZW50KHN3RmlsZVBhdGgpOw0KLQkJdlJldC5TZXROdWxsKCk7DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRG9jdW1lbnQ6Omluc2VydFBhZ2VzKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0NCi0NCi0JDQotDQotDQotDQotCXY4OjpJc29sYXRlKiBpc29sYXRlID0gR2V0SXNvbGF0ZShjYyk7DQotDQotCWlmIChJc1NhZmVNb2RlKGNjKSkgcmV0dXJuIFRSVUU7DQotDQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKCEobV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX01PRElGWSkgfHwgDQotCQltX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fQVNTRU1CTEUpKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlpbnQgaVNpemUgPSBwYXJhbXMuc2l6ZSgpOw0KLQkNCi0JaW50IG5TdGFydCA9IDA7DQotCWludCBuRW5kID0gMDsNCi0JaW50IG5QYWdlID0gMDsNCi0NCi0JQ0ZYX1dpZGVTdHJpbmcgc3dGaWxlUGF0aDsNCi0JDQotCWlmIChpU2l6ZSA8IDEpDQotCXsNCi0JfQ0KLQllbHNlIGlmIChpU2l6ZSA9PSAxKQ0KLQl7DQotCQlpZiAocGFyYW1zWzBdLkdldFR5cGUoKSA9PSBWVF9vYmplY3QpDQotCQl7DQotCQkJSlNPYmplY3QgIHBPYmogPSAoSlNPYmplY3QgKXBhcmFtc1swXTsNCi0NCi0JCQl2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwiblBhZ2UiKTsNCi0JCQkJblBhZ2UgPSAoaW50KUNKU19WYWx1ZShtX2lzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpOw0KLQ0KLQkJCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLCBMImNQYXRoIik7DQotCQkJCXN3RmlsZVBhdGggPSBDSlNfVmFsdWUobV9pc29sYXRlLHBWYWx1ZSxHRVRfVkFMVUVfVFlQRShwVmFsdWUpKS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOw0KLQ0KLQkJCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLCBMIm5TdGFydCIpOw0KLQkJCQluU3RhcnQgPSAoaW50KUNKU19WYWx1ZShtX2lzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpOw0KLQ0KLQkJCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLCBMIm5FbmQiKTsNCi0JCQkJbkVuZCA9IChpbnQpQ0pTX1ZhbHVlKG1faXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJblBhZ2UgPSAoaW50KXBhcmFtc1swXTsNCi0JCX0NCi0JfQ0KLQllbHNlIA0KLQl7DQotCQluUGFnZSA9IChpbnQpcGFyYW1zWzBdOw0KLQ0KLQkJaWYgKGlTaXplID49IDIpDQotCQkJc3dGaWxlUGF0aCA9IHBhcmFtc1sxXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOw0KLQ0KLQkJaWYgKGlTaXplID49IDMpDQotCQkJblN0YXJ0ID0gKGludClwYXJhbXNbMl07DQotDQotCQlpZiAoaVNpemUgPj0gNCkNCi0JCQluRW5kID0gKGludClwYXJhbXNbM107DQotCX0NCi0NCi0JblBhZ2UrKzsNCi0NCi0JaWYgKG5QYWdlIDwgMCkNCi0JCW5QYWdlID0gMDsNCi0NCi0JaWYgKG5QYWdlID4gbV9wRG9jdW1lbnQtPkdldFBhZ2VDb3VudCgpKQ0KLQkJblBhZ2UgPSBtX3BEb2N1bWVudC0+R2V0UGFnZUNvdW50KCk7DQotDQotCWlmIChzd0ZpbGVQYXRoLklzRW1wdHkoKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlzd0ZpbGVQYXRoID0gYXBwOjpQREZQYXRoVG9TeXNQYXRoKHN3RmlsZVBhdGgpOw0KLQ0KLQlDUERGX1BhcnNlciBwZGZQYXJzZXI7DQotCXBkZlBhcnNlci5TdGFydFBhcnNlKHN3RmlsZVBhdGgsIEZBTFNFKTsNCi0JQ1BERl9Eb2N1bWVudCogcFNyY0RvYyA9IHBkZlBhcnNlci5HZXREb2N1bWVudCgpOw0KLQ0KLQlpZiAoIXBTcmNEb2MpIA0KLQl7DQotCQlwZGZQYXJzZXIuQ2xvc2VQYXJzZXIoKTsNCi0JCXJldHVybiBGQUxTRTsNCi0JfQ0KLQ0KLQlpbnQgblRvdGFsID0gcFNyY0RvYy0+R2V0UGFnZUNvdW50KCk7DQotDQotCWlmIChuU3RhcnQgPCAwKQluU3RhcnQgPSAwOw0KLQlpZiAoblN0YXJ0ID49IG5Ub3RhbCkgblN0YXJ0ID0gblRvdGFsIC0gMTsNCi0NCi0JaWYgKG5FbmQgPCAwKSBuRW5kID0gMDsNCi0JaWYgKG5FbmQgPj0gblRvdGFsKSBuRW5kID0gblRvdGFsIC0gMTsNCi0NCi0JaWYgKG5FbmQgPCBuU3RhcnQpIG5FbmQgPSBuU3RhcnQ7DQotDQotCUNGWF9Xb3JkQXJyYXkgYXJyYXk7DQotCWZvciAoaW50IGk9blN0YXJ0OyBpPD1uRW5kOyBpKyspDQotCQlhcnJheS5BZGQoaSk7DQotDQotLy8JbV9wRG9jdW1lbnQtPkluc2VydFBhZ2VzKG5QYWdlLCBwU3JjRG9jLCBhcnJheSk7DQotDQotCXBkZlBhcnNlci5DbG9zZVBhcnNlcigpOw0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBEb2N1bWVudDo6cmVwbGFjZVBhZ2VzKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0NCi0NCi0JDQotDQotDQotDQotCXY4OjpJc29sYXRlKiBpc29sYXRlID0gR2V0SXNvbGF0ZShjYyk7DQotDQotCWlmIChJc1NhZmVNb2RlKGNjKSkgcmV0dXJuIFRSVUU7DQotDQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKCEobV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX01PRElGWSkgfHwgDQotCQltX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fQVNTRU1CTEUpKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlpbnQgaVNpemUgPSBwYXJhbXMuc2l6ZSgpOw0KLQkNCi0JaW50IG5TdGFydCA9IC0xOw0KLQlpbnQgbkVuZCA9IC0xOw0KLQlpbnQgblBhZ2UgPSAwOw0KLQ0KLQlDRlhfV2lkZVN0cmluZyBzd0ZpbGVQYXRoOw0KLQkNCi0JaWYgKGlTaXplIDwgMSkNCi0Jew0KLQl9DQotCWVsc2UgaWYgKGlTaXplID09IDEpDQotCXsNCi0JCWlmIChwYXJhbXNbMF0uR2V0VHlwZSgpID09IFZUX29iamVjdCkNCi0JCXsNCi0JCQlKU09iamVjdCAgcE9iaiA9IChKU09iamVjdCApcGFyYW1zWzBdOw0KLQ0KLQkJCXY4OjpIYW5kbGU8djg6OlZhbHVlPiBwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaiwgTCJuUGFnZSIpOw0KLQkJCQluUGFnZSA9IChpbnQpQ0pTX1ZhbHVlKG1faXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSk7DQotDQotCQkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwiY1BhdGgiKTsNCi0JCQkJc3dGaWxlUGF0aCA9IENKU19WYWx1ZShtX2lzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7DQotDQotCQkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwiblN0YXJ0Iik7DQotCQkJCW5TdGFydCA9IChpbnQpQ0pTX1ZhbHVlKG1faXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSk7DQotDQotCQkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwibkVuZCIpOw0KLQkJCQluRW5kID0gKGludClDSlNfVmFsdWUobV9pc29sYXRlLHBWYWx1ZSxHRVRfVkFMVUVfVFlQRShwVmFsdWUpKTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQluUGFnZSA9IChpbnQpcGFyYW1zWzBdOw0KLQkJfQ0KLQl9DQotCWVsc2UgDQotCXsNCi0JCW5QYWdlID0gKGludClwYXJhbXNbMF07DQotDQotCQlpZiAoaVNpemUgPj0gMikNCi0JCQlzd0ZpbGVQYXRoID0gcGFyYW1zWzFdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7DQotDQotCQlpZiAoaVNpemUgPj0gMykNCi0JCQluU3RhcnQgPSAoaW50KXBhcmFtc1syXTsNCi0NCi0JCWlmIChpU2l6ZSA+PSA0KQ0KLQkJCW5FbmQgPSAoaW50KXBhcmFtc1szXTsNCi0JfQ0KLQ0KLQlpZiAoblBhZ2UgPCAwKQ0KLQkJblBhZ2UgPSAwOw0KLQ0KLQlpZiAoblBhZ2UgPj0gbV9wRG9jdW1lbnQtPkdldFBhZ2VDb3VudCgpKQ0KLQkJblBhZ2UgPSBtX3BEb2N1bWVudC0+R2V0UGFnZUNvdW50KCkgLSAxOw0KLQ0KLQlpZiAoc3dGaWxlUGF0aC5Jc0VtcHR5KCkpIHJldHVybiBGQUxTRTsNCi0NCi0Jc3dGaWxlUGF0aCA9IGFwcDo6UERGUGF0aFRvU3lzUGF0aChzd0ZpbGVQYXRoKTsNCi0NCi0JQ1BERl9QYXJzZXIgcGRmUGFyc2VyOw0KLQlwZGZQYXJzZXIuU3RhcnRQYXJzZShzd0ZpbGVQYXRoLCBGQUxTRSk7DQotCUNQREZfRG9jdW1lbnQqIHBTcmNEb2MgPSBwZGZQYXJzZXIuR2V0RG9jdW1lbnQoKTsNCi0NCi0JaWYgKCFwU3JjRG9jKSANCi0Jew0KLQkJcGRmUGFyc2VyLkNsb3NlUGFyc2VyKCk7DQotCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0NCi0JaW50IG5Ub3RhbCA9IHBTcmNEb2MtPkdldFBhZ2VDb3VudCgpOw0KLQ0KLQlpZiAoblN0YXJ0IDwgMCkNCi0Jew0KLQkJaWYgKG5FbmQgPCAwKQ0KLQkJew0KLQkJCW5TdGFydCA9IDA7DQotCQkJbkVuZCA9IG5Ub3RhbCAtIDE7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJblN0YXJ0ID0gMDsNCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsNCi0JCWlmIChuRW5kIDwgMCkNCi0JCXsNCi0JCQluRW5kID0gblN0YXJ0Ow0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCWlmIChuU3RhcnQgPj0gblRvdGFsKSBuU3RhcnQgPSBuVG90YWwgLSAxOw0KLQkJCWlmIChuRW5kID49IG5Ub3RhbCkgbkVuZCA9IG5Ub3RhbCAtIDE7DQotDQotCQkJaWYgKG5FbmQgPCBuU3RhcnQpIG5FbmQgPSBuU3RhcnQ7DQotCQl9DQotCX0NCi0NCi0JQ0ZYX1dvcmRBcnJheSBhcnJheTsNCi0JZm9yIChpbnQgaT1uU3RhcnQ7IGk8PW5FbmQ7IGkrKykNCi0JCWFycmF5LkFkZChpKTsNCi0NCi0vLwltX3BEb2N1bWVudC0+UmVwbGFjZVBhZ2VzKG5QYWdlLCBwU3JjRG9jLCBhcnJheSk7DQotDQotCXBkZlBhcnNlci5DbG9zZVBhcnNlcigpOw0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBEb2N1bWVudDo6Z2V0VVJMKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JaWYgKElzU2FmZU1vZGUoY2MpKSByZXR1cm4gVFJVRTsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgRG9jdW1lbnQ6OkFkZERlbGF5RGF0YShDSlNfRGVsYXlEYXRhKiBwRGF0YSkNCi17DQotCW1fRGVsYXlEYXRhLkFkZChwRGF0YSk7DQotfQ0KLQ0KLXZvaWQgRG9jdW1lbnQ6OkRvRmllbGREZWxheShjb25zdCBDRlhfV2lkZVN0cmluZyYgc0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgpDQotew0KLQlDRlhfRFdvcmRBcnJheSBEZWxBcnJheTsNCi0NCi0JZm9yIChpbnQgaT0wLHN6PW1fRGVsYXlEYXRhLkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQl7DQotCQlpZiAoQ0pTX0RlbGF5RGF0YSogcERhdGEgPSBtX0RlbGF5RGF0YS5HZXRBdChpKSkNCi0JCXsNCi0JCQlpZiAocERhdGEtPnNGaWVsZE5hbWUgPT0gc0ZpZWxkTmFtZSAmJiBwRGF0YS0+bkNvbnRyb2xJbmRleCA9PSBuQ29udHJvbEluZGV4KQ0KLQkJCXsNCi0JCQkJRmllbGQ6OkRvRGVsYXkobV9wRG9jdW1lbnQsIHBEYXRhKTsNCi0JCQkJZGVsZXRlIHBEYXRhOw0KLQkJCQltX0RlbGF5RGF0YS5TZXRBdChpLCBOVUxMKTsNCi0JCQkJRGVsQXJyYXkuQWRkKGkpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQlmb3IgKGludCBqPURlbEFycmF5LkdldFNpemUoKS0xOyBqPj0wOyBqLS0pDQotCXsNCi0JCW1fRGVsYXlEYXRhLlJlbW92ZUF0KERlbEFycmF5W2pdKTsNCi0JfQ0KLX0NCi0NCi12b2lkIERvY3VtZW50OjpBZGREZWxheUFubm90RGF0YShDSlNfQW5ub3RPYmogKnBEYXRhKQ0KLXsNCi0JbV9EZWxheUFubm90RGF0YS5BZGQocERhdGEpOw0KLX0NCi0NCi12b2lkIERvY3VtZW50OjpEb0Fubm90RGVsYXkoKQ0KLXsNCi0JQ0ZYX0RXb3JkQXJyYXkgRGVsQXJyYXk7DQotCQ0KLQlmb3IgKGludCBqPURlbEFycmF5LkdldFNpemUoKS0xOyBqPj0wOyBqLS0pDQotCXsNCi0JCW1fRGVsYXlEYXRhLlJlbW92ZUF0KERlbEFycmF5W2pdKTsNCi0JfQ0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0phdmFTY3JpcHQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSUphdmFTY3JpcHQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRGVmaW5lLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX09iamVjdC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19WYWx1ZS5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9Eb2N1bWVudC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19FdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfQ29udGV4dC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19SdW50aW1lLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L2FwcC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9GaWVsZC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9JY29uLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0ZpZWxkLmgiCisKK3N0YXRpYyB2ODo6SXNvbGF0ZSogR2V0SXNvbGF0ZShJRlhKU19Db250ZXh0KiBjYykKK3sKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQgKiljYzsKKwlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7CisKKwlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7CisJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOworCisJcmV0dXJuIHBSdW50aW1lLT5HZXRJc29sYXRlKCk7Cit9CisKK0JFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfUHJpbnRQYXJhbXNPYmopCitFTkRfSlNfU1RBVElDX0NPTlNUKCkKKworQkVHSU5fSlNfU1RBVElDX1BST1AoQ0pTX1ByaW50UGFyYW1zT2JqKQorRU5EX0pTX1NUQVRJQ19QUk9QKCkKKworQkVHSU5fSlNfU1RBVElDX01FVEhPRChDSlNfUHJpbnRQYXJhbXNPYmopCitFTkRfSlNfU1RBVElDX01FVEhPRCgpCisKK0lNUExFTUVOVF9KU19DTEFTUyhDSlNfUHJpbnRQYXJhbXNPYmosIFByaW50UGFyYW1zT2JqKQorCitQcmludFBhcmFtc09iajo6UHJpbnRQYXJhbXNPYmooQ0pTX09iamVjdCogcEpTT2JqZWN0KQorOiBDSlNfRW1iZWRPYmoocEpTT2JqZWN0KQoreworCWJVSSA9IFRSVUU7CisJblN0YXJ0ID0gMDsKKwluRW5kID0gMDsKKwliU2lsZW50ID0gRkFMU0U7CisJYlNocmlua1RvRml0ID0gRkFMU0U7CisJYlByaW50QXNJbWFnZSA9IEZBTFNFOworCWJSZXZlcnNlID0gRkFMU0U7CisJYkFubm90YXRpb25zID0gVFJVRTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb2N1bWVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgTUlOV0lEVEggIDUuMGYKKyNkZWZpbmUgTUlOSEVJR0hUIDUuMGYKKworQkVHSU5fSlNfU1RBVElDX0NPTlNUKENKU19Eb2N1bWVudCkKK0VORF9KU19TVEFUSUNfQ09OU1QoKQorCitCRUdJTl9KU19TVEFUSUNfUFJPUChDSlNfRG9jdW1lbnQpCisJSlNfU1RBVElDX1BST1BfRU5UUlkoQURCRSkKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShhdXRob3IpCisJSlNfU1RBVElDX1BST1BfRU5UUlkoYmFzZVVSTCkKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShib29rbWFya1Jvb3QpCisJSlNfU1RBVElDX1BST1BfRU5UUlkoY2FsY3VsYXRlKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKENvbGxhYikKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShjcmVhdGlvbkRhdGUpCisJSlNfU1RBVElDX1BST1BfRU5UUlkoY3JlYXRvcikKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShkZWxheSkKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShkaXJ0eSkKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShkb2N1bWVudEZpbGVOYW1lKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGV4dGVybmFsKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGZpbGVzaXplKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGljb25zKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGluZm8pICAgCisJSlNfU1RBVElDX1BST1BfRU5UUlkoa2V5d29yZHMpCisJSlNfU1RBVElDX1BST1BfRU5UUlkobGF5b3V0KQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKG1lZGlhKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKG1vZERhdGUpCisJSlNfU1RBVElDX1BST1BfRU5UUlkobW91c2VYKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKG1vdXNlWSkKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShudW1GaWVsZHMpCisJSlNfU1RBVElDX1BST1BfRU5UUlkobnVtUGFnZXMpCisJSlNfU1RBVElDX1BST1BfRU5UUlkocGFnZU51bSkgICAKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShwYWdlV2luZG93UmVjdCkKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShwYXRoKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHByb2R1Y2VyKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHN1YmplY3QpCisJSlNfU1RBVElDX1BST1BfRU5UUlkodGl0bGUpCisJSlNfU1RBVElDX1BST1BfRU5UUlkoem9vbSkKKwlKU19TVEFUSUNfUFJPUF9FTlRSWSh6b29tVHlwZSkKK0VORF9KU19TVEFUSUNfUFJPUCgpCisKK0JFR0lOX0pTX1NUQVRJQ19NRVRIT0QoQ0pTX0RvY3VtZW50KQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoYWRkQW5ub3QsMCkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGFkZEZpZWxkLCA0KQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoYWRkTGluaywgMCkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGFkZEljb24sIDApCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShjYWxjdWxhdGVOb3csIDApCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShjbG9zZURvYywgMCkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGNyZWF0ZURhdGFPYmplY3QsIDApCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShkZWxldGVQYWdlcywgMikKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGV4cG9ydEFzVGV4dCwgMykKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGV4cG9ydEFzRkRGLCA2KQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZXhwb3J0QXNYRkRGLCA1KQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZXh0cmFjdFBhZ2VzLCAzKQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZ2V0QW5ub3QsIDApCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShnZXRBbm5vdHMsIDIpCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShnZXRBbm5vdDNELCAyKQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZ2V0QW5ub3RzM0QsIDEpCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShnZXRGaWVsZCwgMSkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGdldEljb24sIDApCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShnZXRMaW5rcywgMCkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGdldE50aEZpZWxkTmFtZSwgMSkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGdldE9DR3MsIDApCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShnZXRQYWdlQm94LCAwKQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZ2V0UGFnZU50aFdvcmQsIDMpCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShnZXRQYWdlTnRoV29yZFF1YWRzLCAyKQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZ2V0UGFnZU51bVdvcmRzLCAxKQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZ2V0UHJpbnRQYXJhbXMsIDApCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShnZXRVUkwsIDIpCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShpbXBvcnRBbkZERiwgMSkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGltcG9ydEFuWEZERiwgMSkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGltcG9ydFRleHREYXRhLCAyKQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoaW5zZXJ0UGFnZXMsIDQpCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShtYWlsRm9ybSwgNikKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKHByaW50LCA5KQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkocmVtb3ZlRmllbGQsIDEpCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShyZXBsYWNlUGFnZXMsIDQpCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShyZXNldEZvcm0sIDEpCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShyZW1vdmVJY29uLCAwKQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoc2F2ZUFzLCA1KQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoc3VibWl0Rm9ybSwgMjMpCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShtYWlsRG9jLCAwKQkJCitFTkRfSlNfU1RBVElDX01FVEhPRCgpCisKK0lNUExFTUVOVF9KU19DTEFTUyhDSlNfRG9jdW1lbnQsIERvY3VtZW50KQorCitGWF9CT09MCUNKU19Eb2N1bWVudDo6SW5pdEluc3RhbmNlKElGWEpTX0NvbnRleHQqIGNjKQoreworCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7CisJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCisJRG9jdW1lbnQqIHBEb2MgPSAoRG9jdW1lbnQqKUdldEVtYmVkT2JqZWN0KCk7CisJQVNTRVJUKHBEb2MgIT0gTlVMTCk7CisJCisJcERvYy0+QXR0YWNoRG9jKHBDb250ZXh0LT5HZXRSZWFkZXJEb2N1bWVudCgpKTsKKwlwRG9jLT5TZXRJc29sYXRlKHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKS0+R2V0SXNvbGF0ZSgpKTsKKwlyZXR1cm4gVFJVRTsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEb2N1bWVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworRG9jdW1lbnQ6OkRvY3VtZW50KENKU19PYmplY3QqIHBKU09iamVjdCkgOiBDSlNfRW1iZWRPYmoocEpTT2JqZWN0KSwKKwltX2N3QmFzZVVSTChMIiIpLAorCW1fcEljb25UcmVlKE5VTEwpLAorCW1fcERvY3VtZW50KE5VTEwpLAorCW1fYkRlbGF5KEZBTFNFKSwKKwltX2lzb2xhdGUoTlVMTCkKK3sKK30KKworRG9jdW1lbnQ6On5Eb2N1bWVudCgpCit7CisJaWYgKG1fcEljb25UcmVlKQorCXsKKwkJbV9wSWNvblRyZWUtPkRlbGV0ZUljb25UcmVlKCk7CisJCWRlbGV0ZSBtX3BJY29uVHJlZTsKKwkJbV9wSWNvblRyZWUgPSBOVUxMOworCX0KKwlmb3IgKGludCBpPTA7IGk8bV9EZWxheURhdGEuR2V0U2l6ZSgpOyBpKyspCisJeworCQlpZiAoQ0pTX0RlbGF5RGF0YSogcERhdGEgPSBtX0RlbGF5RGF0YS5HZXRBdChpKSkKKwkJeworCQkJZGVsZXRlIHBEYXRhOworCQkJcERhdGEgPSBOVUxMOworCQkJbV9EZWxheURhdGEuU2V0QXQoaSwgTlVMTCk7CisJCQkKKwkJfQorCX0KKworCW1fRGVsYXlEYXRhLlJlbW92ZUFsbCgpOworCW1fRGVsYXlBbm5vdERhdGEuUmVtb3ZlQWxsKCk7Cit9CisKKy8vdGhlIHRvdGFsIG51bWJlciBvZiBmaWxlZHMgaW4gZG9jdW1lbnQuCitGWF9CT09MIERvY3VtZW50OjpudW1GaWVsZHMoT0JKX1BST1BfUEFSQU1TKQoreworCWlmICghdnAuSXNHZXR0aW5nKCkpIHJldHVybiBGQUxTRTsKKworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworICAgCUNQREZTREtfSW50ZXJGb3JtICpwSW50ZXJGb3JtID0gbV9wRG9jdW1lbnQtPkdldEludGVyRm9ybSgpOworCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOworCisJQ1BERl9JbnRlckZvcm0gKnBQREZGb3JtID0gcEludGVyRm9ybS0+R2V0SW50ZXJGb3JtKCk7CisJQVNTRVJUKHBQREZGb3JtICE9IE5VTEwpOworCisJdnAgPDwgKGludClwUERGRm9ybS0+Q291bnRGaWVsZHMoKTsKKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIERvY3VtZW50OjpkaXJ0eShPQkpfUFJPUF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKHZwLklzR2V0dGluZygpKQorCXsKKwkJaWYgKG1fcERvY3VtZW50LT5HZXRDaGFuZ2VNYXJrKCkpCisJCQl2cCA8PCB0cnVlOworCQllbHNlCisJCQl2cCA8PCBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJYm9vbCBiQ2hhbmdlZCA9IGZhbHNlOworCisJCXZwID4+IGJDaGFuZ2VkOworCisJCWlmIChiQ2hhbmdlZCkKKwkJCW1fcERvY3VtZW50LT5TZXRDaGFuZ2VNYXJrKCk7CisJCWVsc2UKKwkJCW1fcERvY3VtZW50LT5DbGVhckNoYW5nZU1hcmsoKTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBEb2N1bWVudDo6QURCRShPQkpfUFJPUF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKHZwLklzR2V0dGluZygpKQorCXsKKwkJdnAuU2V0TnVsbCgpOworCX0KKwllbHNlCisJeworCX0KKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIERvY3VtZW50OjpwYWdlTnVtKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAodnAuSXNHZXR0aW5nKCkpCisJewkJCQorCQlpZiAoQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gbV9wRG9jdW1lbnQtPkdldEN1cnJlbnRWaWV3KCkpCisJCXsKKwkJCXZwIDw8IHBQYWdlVmlldy0+R2V0UGFnZUluZGV4KCk7CisJCX0KKwl9CisJZWxzZQorCXsJCQorCQlpbnQgaVBhZ2VDb3VudCA9IG1fcERvY3VtZW50LT5HZXRQYWdlQ291bnQoKTsKKworCQlpbnQgaVBhZ2VOdW0gPSAwOworCQl2cCA+PiBpUGFnZU51bTsKKworCQlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gbV9wRG9jdW1lbnQtPkdldEVudigpOworCQlpZighcEVudikKKwkJCXJldHVybiBGQUxTRTsKKworCQlpZiAoaVBhZ2VOdW0gPj0gMCAmJiBpUGFnZU51bSA8IGlQYWdlQ291bnQpCisJCXsKKwkJCSBwRW52LT5KU19kb2Nnb3RvUGFnZShpUGFnZU51bSk7CisJCX0KKwkJZWxzZSBpZiAoaVBhZ2VOdW0gPj0gaVBhZ2VDb3VudCkKKwkJeworCQkJIHBFbnYtPkpTX2RvY2dvdG9QYWdlKGlQYWdlQ291bnQtMSk7CisJCX0KKwkJZWxzZSBpZiAoaVBhZ2VOdW0gPCAwKQorCQl7CisJCQkgcEVudi0+SlNfZG9jZ290b1BhZ2UoMCk7CisJCX0KKwl9CisKKyAJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OlBhcnNlclBhcmFtcyhKU09iamVjdCogcE9iaixDSlNfQW5ub3RPYmomIGFubm90b2JqKQoreworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIERvY3VtZW50OjphZGRBbm5vdChPQkpfTUVUSE9EX1BBUkFNUykKK3sKKyAJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OmFkZEZpZWxkKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCS8vRG9lc24ndCBzdXBwb3J0LgorCXJldHVybiBUUlVFOworfQorCisvL2V4cG9ydHMgZm9ybSBmaWVsZHMgYXMgYSB0YWItZGVsaW1pdGVkIHRleHQgZmlsZSB0byBhIGxvY2FsIGhhcmQgZGlzay4KKy8vY29tbWVudDogbmVlZCByZWFkZXIgc3VwcG9ydAorLy9ub3RlIDogd2F0Y2ggdGhlIHRoaXJkIHBhcmFtZXRlcjpjUGF0aCwgZm9yIHdoYXQgY2FzZSBpdCBjYW4gYmUgc2FmZWx5IHNhdmVkPworLy9pbnQgQ1BERlNES19JbnRlckZvcm06OkV4cG9ydEFzVGV4dChGWF9CT09MIGJOb1Bhc3N3b3JkLFN0cmluZ0FycmF5IGFGaWVsZHMsU3RyaW5nIGNQYXRoKTsKKy8vcmV0dXJuIHZhbHVlLCBpbnQgdGhlIGluZGV4IG9mIHRoZSBwYXJhbWV0ZXJzIGlsbGVnYWwsIHRoZSBpbmRleCBpcyBiYXNlZCBvbiAxLgorCitGWF9CT09MIERvY3VtZW50OjpleHBvcnRBc1RleHQoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJaWYgKElzU2FmZU1vZGUoY2MpKSByZXR1cm4gVFJVRTsKKwlyZXR1cm4gVFJVRTsKK30KKworLy9leHBvcnRzIGZvcm0gZmllbGRzIGFzIGEgZmRmIGZpbGUgdG8gdGhlIGxvY2FsIGhhcmQgZHJpdmUKKy8vY29tbWVudDogbmVlZCByZWFkZXIgc3VwcG9ydHMKKy8vbm90ZTp0aGUgbGFzdCBwYXJhbWV0ZXIgaGFzbid0IGJlZW4gY29uZmlybWVkLmJlY2F1c2UgdGhlIHByZXZpb3VzIG9uZSBibG9ja3MgdGhlIHdheS4KKy8vaW50IENQREZTREtfRG9jdW1lbnQ6OkV4cG9ydEFzRkRGKEZYX0JPT0wgYkFsbEZpZWxkcyxCT09MIGJOb1Bhc3N3b3JkLFN0cmluZ0FycmF5IGFGaWVsZHMsRlhfQk9PTCBiRmxhZ3MsU3RyaW5nIGNQYXRoLEZYX0JPT0wgYkFubm90YXRpb25zKTsKKworRlhfQk9PTCBEb2N1bWVudDo6ZXhwb3J0QXNGREYoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBHZXRJc29sYXRlKGNjKTsKKwlpZiAoSXNTYWZlTW9kZShjYykpIHJldHVybiBUUlVFOworCisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKCFtX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fRVhUUkFDVF9BQ0NFU1MpKSByZXR1cm4gRkFMU0U7CisKKwlGWF9CT09MIGJBbGxGaWVsZHMgPSBwYXJhbXMuc2l6ZSgpID4gMCA/IChGWF9CT09MKXBhcmFtc1swXSA6IEZBTFNFOworCUZYX0JPT0wgYk5vUGFzc1dvcmQgPSBwYXJhbXMuc2l6ZSgpID4gMSA/IChGWF9CT09MKXBhcmFtc1sxXSA6IFRSVUU7CisJRlhfQk9PTCBiV2hvbGUgPSBwYXJhbXMuc2l6ZSgpID4gMiA/IChwYXJhbXNbMl0uR2V0VHlwZSgpID09IFZUX251bGwpIDogVFJVRTsKKwlDSlNfQXJyYXkgYXJyYXlGaWxlZHMoaXNvbGF0ZSk7CisJaWYgKCFiV2hvbGUpCisJCWFycmF5RmlsZWRzLkF0dGFjaChwYXJhbXNbMl0pOworCS8vRlhfQk9PTCBiRmxhZ3MgPSBwYXJhbXMuc2l6ZSgpID4gMyA/IChGWF9CT09MKXBhcmFtc1szXSA6IEZBTFNFOworICAgIENGWF9XaWRlU3RyaW5nIHN3RmlsZVBhdGggPSBwYXJhbXMuc2l6ZSgpID4gNCA/IChGWF9MUENXU1RSKXBhcmFtc1s0XS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpIDogKEZYX0xQQ1dTVFIpTCIiOworCisJaWYgKHN3RmlsZVBhdGguSXNFbXB0eSgpKQorCXsKKwkJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcERvY3VtZW50LT5HZXRFbnYoKTsKKwkJc3dGaWxlUGF0aCA9IHBFbnYtPkpTX2ZpZWxkQnJvd3NlKCk7CisJCWlmKHN3RmlsZVBhdGguSXNFbXB0eSgpKQorCQkJcmV0dXJuIFRSVUU7CisJfQorCWVsc2UKKwl7CisJCXN3RmlsZVBhdGggPSBhcHA6OlBERlBhdGhUb1N5c1BhdGgoc3dGaWxlUGF0aCk7CisJfQorICAgIAorCW1fcERvY3VtZW50LT5TZXRGb2N1c0Fubm90KE5VTEwpOworICAgCisgICAgQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm09IChDUERGU0RLX0ludGVyRm9ybSopbV9wRG9jdW1lbnQtPkdldEludGVyRm9ybSgpOworCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOworCisJQ1BERl9JbnRlckZvcm0qIHBQREZGb3JtID0gcEludGVyRm9ybS0+R2V0SW50ZXJGb3JtKCk7CisJQVNTRVJUKHBQREZGb3JtICE9IE5VTEwpOworCisJQ0ZYX1B0ckFycmF5IGFGaWVsZHM7CisKKwlpZiAoYldob2xlKQorCXsKKwkJZm9yIChpbnQgaj0wLGpzej1wUERGRm9ybS0+Q291bnRGaWVsZHMoKTsgajxqc3o7IGorKykKKwkJeworCQkJYUZpZWxkcy5BZGQocFBERkZvcm0tPkdldEZpZWxkKGopKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlmb3IgKGludCBpPTAsaXN6PWFycmF5RmlsZWRzLkdldExlbmd0aCgpOyBpPGlzejsgaSsrKQorCQl7CisJCQlDSlNfVmFsdWUgdmFsTmFtZShpc29sYXRlKTsKKwkJCWFycmF5RmlsZWRzLkdldEVsZW1lbnQoaSx2YWxOYW1lKTsKKwkJCUNGWF9XaWRlU3RyaW5nIHN3TmFtZSA9IHZhbE5hbWUub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsKKworCQkJZm9yIChpbnQgaj0wLCBqc3o9cFBERkZvcm0tPkNvdW50RmllbGRzKHN3TmFtZSk7IGo8anN6OyBqKyspCisJCQl7CisJCQkJYUZpZWxkcy5BZGQocFBERkZvcm0tPkdldEZpZWxkKGosIHN3TmFtZSkpOworCQkJfQorCQl9CisJfQorCisJQ0ZYX1B0ckFycmF5IGZpZWxkczsKKworCWZvciAoaW50IGk9MCxzej1hRmllbGRzLkdldFNpemUoKTsgaTxzejsgaSsrKQorCXsKKwkgICAgQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopYUZpZWxkc1tpXTsKKwkJCisJCWlmICghYkFsbEZpZWxkcykKKwkJCWlmIChwRmllbGQtPkdldFZhbHVlKCkgPT0gTCIiKQorCQkJCWNvbnRpbnVlOworCisJCWlmIChiTm9QYXNzV29yZCkKKwkJCWlmIChwRmllbGQtPkdldEZpZWxkRmxhZ3MoKSAmIDB4MjAwMCkKKwkJCQljb250aW51ZTsKKworICAgICAgICBmaWVsZHMuQWRkKCh2b2lkKilwRmllbGQpOworCX0gICAgCisKKyAgICByZXR1cm4gcEludGVyRm9ybS0+RXhwb3J0RmllbGRzVG9GREZGaWxlKHN3RmlsZVBhdGgsIGZpZWxkcywgVFJVRSk7Cit9CisKKy8vZXhwb3J0cyBmb3JtIGZpZWxkcyBhbiBYRkRGIGZpbGUgdG8gdGhlIGxvY2FsIGhhcmQgZHJpdmUKKy8vY29tbWVudDogbmVlZCByZWRlciBzdXBwb3J0cworLy9ub3RlOnRoZSBsYXN0IHBhcmFtZXRlciBjYW4ndCBiZSB0ZXN0CisvL2ludCBDUERGU0RLX0RvY3VtZW50OjpFeHBvcnRBc1hGREYoRlhfQk9PTCBiQWxsRmllbGRzLEZYX0JPT0wgIGJOb1Bhc3NXb3JkLFN0cmluZ0FycmF5IGFGaWVsZHMsU3RyaW5nIGNQYXRoLEZYX0JPT0wgYkFubm9hdGF0aW9ucyk7CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OmV4cG9ydEFzWEZERihPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlpZiAoSXNTYWZlTW9kZShjYykpIHJldHVybiBUUlVFOworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCWlmICghbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX0VYVFJBQ1RfQUNDRVNTKSkgcmV0dXJuIEZBTFNFOworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8vTWFwcyBhIGZpZWxkIG9iamVjdCBpbiBQREYgZG9jdW1lbnQgdG8gYSBKYXZhU2NyaXB0IHZhcmlhYmxlCisvL2NvbW1lbnQ6CisvL25vdGU6IHRoZSBwYXJlbXRlciBjTmFtZSwgdGhpcyBpcyBjbHVlIGhvdyB0byB0cmVhdCBpZiB0aGUgY05hbWUgaXMgbm90IGEgdmFsaWFibGUgZmlsZWQgbmFtZSBpbiB0aGlzIGRvY3VtZW50CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OmdldEZpZWxkKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCXY4OjpJc29sYXRlKiBpc29sYXRlID0gR2V0SXNvbGF0ZShjYyk7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKHBhcmFtcy5zaXplKCkgPCAxKSByZXR1cm4gRkFMU0U7CisKKwlDRlhfV2lkZVN0cmluZyB3aWRlTmFtZSA9IHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOworCisgICAgQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSBtX3BEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7CisJQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7CisKKwlDUERGX0ludGVyRm9ybSogcFBERkZvcm0gPSBwSW50ZXJGb3JtLT5HZXRJbnRlckZvcm0oKTsKKwlBU1NFUlQocFBERkZvcm0gIT0gTlVMTCk7CisKKwlpZiAocFBERkZvcm0tPkNvdW50RmllbGRzKHdpZGVOYW1lKSA8PSAwKSAKKwl7CisJCXZSZXQuU2V0TnVsbCgpOworCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7CisJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOworCisJSlNGWE9iamVjdCAgcEZpZWxkT2JqID0gSlNfTmV3RnhEeW5hbWljT2JqKCpwUnVudGltZSwgcENvbnRleHQsIEpTX0dldE9iakRlZm5JRCgqcFJ1bnRpbWUsIEwiRmllbGQiKSk7CisKKwlDSlNfRmllbGQgKiBwSlNGaWVsZCA9IChDSlNfRmllbGQqKUpTX0dldFByaXZhdGUoaXNvbGF0ZSxwRmllbGRPYmopOworCUFTU0VSVChwSlNGaWVsZCAhPSBOVUxMKTsKKworCUZpZWxkICogcEZpZWxkID0gKEZpZWxkICopcEpTRmllbGQtPkdldEVtYmVkT2JqZWN0KCk7IAorCUFTU0VSVChwRmllbGQgIT0gTlVMTCk7CisKKwlwRmllbGQtPkF0dGFjaEZpZWxkKHRoaXMsIHdpZGVOYW1lKTsKKwl2UmV0ID0gcEpTRmllbGQ7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLy9HZXRzIHRoZSBuYW1lIG9mIHRoZSBudGggZmllbGQgaW4gdGhlIGRvY3VtZW50IAorLy9jb21tZW50OgorLy9ub3RlOiB0aGUgcGFyYW1ldGVyIG5JbmRleCwgaWYgaXQgaXMgbm90IGF2YWlsYWJsZQorCitGWF9CT09MIERvY3VtZW50OjpnZXROdGhGaWVsZE5hbWUoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaW50IG5JbmRleCA9IHBhcmFtcy5zaXplKCkgPiAwID8gKGludClwYXJhbXNbMF0gOiAtMTsKKwlpZiAobkluZGV4ID09IC0xKSByZXR1cm4gRkFMU0U7CisKKwlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IG1fcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsKKwlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsKKworCUNQREZfSW50ZXJGb3JtKiBwUERGRm9ybSA9IHBJbnRlckZvcm0tPkdldEludGVyRm9ybSgpOworCUFTU0VSVChwUERGRm9ybSAhPSBOVUxMKTsKKworCUNQREZfRm9ybUZpZWxkKiBwRmllbGQgPSBwUERGRm9ybS0+R2V0RmllbGQobkluZGV4KTsKKwlpZiAoIXBGaWVsZCkKKwkJcmV0dXJuIEZBTFNFOworCisJdlJldCA9IHBGaWVsZC0+R2V0RnVsbE5hbWUoKTsKKwlyZXR1cm4gVFJVRTsJCit9CisKKy8vaW1wb3J0cyB0aGUgc3BlY2lmaWVkIGZkZiBmaWxlLgorLy9jb21tZW50czogbmVlZCByZWFkZXIgc3VwcHBvcnQKKy8vbm90ZTpvbmNlIHRoZSBjcGF0aCBpcyBpbGxpZ2wgIHRoZW4gYSBmaWxlIGRpYWxvZyBib3ggcG9wcyB1cCBpbiBvcmRlciB0byBhc2sgdXNlciB0byBjaG9vb3NlIHRoZSBmaWxlCisvL2ludCBDUERGU0RLX0RvY3VtZW50OjppbXBvcnRBbkZERihTdHJpbmcgY1BhdGgpOworCitGWF9CT09MIERvY3VtZW50OjppbXBvcnRBbkZERihPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlpZiAoSXNTYWZlTW9kZShjYykpIHJldHVybiBUUlVFOworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCWlmICghKG1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9NT0RJRlkpIHx8IAorCQltX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fQU5OT1RfRk9STSkgfHwKKwkJbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX0ZJTExfRk9STSkpKSByZXR1cm4gRkFMU0U7CisKKworCUNGWF9XaWRlU3RyaW5nIHN3UGF0aDsKKwkKKwlpZiAocGFyYW1zLnNpemUoKSA+IDApCisJCXN3UGF0aCA9IHBhcmFtc1swXTsKKyAgICAKKwlpZiAoc3dQYXRoLklzRW1wdHkoKSkKKwl7CisJCUNQREZEb2NfRW52aXJvbm1lbnQqIHBFbnYgPSBtX3BEb2N1bWVudC0+R2V0RW52KCk7CisJCXN3UGF0aCA9IHBFbnYtPkpTX2ZpZWxkQnJvd3NlKCk7CisJCWlmKHN3UGF0aC5Jc0VtcHR5KCkpCisJCQlyZXR1cm4gVFJVRTsKKwl9CisJZWxzZQorCXsKKwkJc3dQYXRoID0gYXBwOjpQREZQYXRoVG9TeXNQYXRoKHN3UGF0aCk7CisJfQorCisJbV9wRG9jdW1lbnQtPlNldEZvY3VzQW5ub3QoTlVMTCk7CisKKwlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopbV9wRG9jdW1lbnQtPkdldEludGVyRm9ybSgpOworCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOworCisJaWYgKCFwSW50ZXJGb3JtLT5JbXBvcnRGb3JtRnJvbUZERkZpbGUoc3dQYXRoLCBUUlVFKSkKKwkJcmV0dXJuIEZBTFNFOworCisgCW1fcERvY3VtZW50LT5TZXRDaGFuZ2VNYXJrKCk7CisvLyAJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcERvY3VtZW50LT5HZXRFbnYoKTsKKy8vIAlBU1NFUlQocEVudiAhPSBOVUxMKTsKKy8vIAlJVW5kbyogcFVuZG8gPSBJVW5kbzo6R2V0VW5kbyhwRW52KTsKKy8vIAlBU1NFUlQocFVuZG8gIT0gTlVMTCk7CisvLyAJcFVuZG8tPlJlc2V0KG1fcERvY3VtZW50KTsKKworCXJldHVybiBUUlVFOworfQorCisvL2ltcG9ydHMgYW5kIHNwZWNpZmllZCBYRkRGIGZpbGUgY29udGFpbmluZyBYTUwgZm9ybSBkYXRhCisvL2NvbW1lbnQ6IG5lZWQgcmVhZGVyIHN1cHBvcnRzCisvL25vdGU6IHNhbWUgYXMgdXAKKy8vaW50IENQREZTREtfRG9jdW1lbnQ6OmltcG9ydEFuRkRGKFN0cmluZyBjUGF0aCkKKworRlhfQk9PTCBEb2N1bWVudDo6aW1wb3J0QW5YRkRGKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCWlmIChJc1NhZmVNb2RlKGNjKSkgcmV0dXJuIFRSVUU7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKCEobV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX01PRElGWSkgfHwgCisJCW1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9BTk5PVF9GT1JNKSB8fAorCQltX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fRklMTF9GT1JNKSkpIHJldHVybiBGQUxTRTsKKworCXJldHVybiBUUlVFOworfQorCisvL2ltcG9ydHMgYW5kIHNwZWNpZmllZCB0ZXh0IGZpbGUgCisvL2NvbW1uZXQ6IG5lZWQgcmVhZGVyIHN1cHBvcnRzCisvL25vdGU6IHNhbWUgYXMgdXAsd2hlbiBuUm93IGlzIG5vdCByYXRpb25hbCxhZG9iZSBpcyBkdW1iIGZvciBpdC4KKy8vaW50IENQREZTREtfRG9jdW1lbnQ6OmltcG9ydFRleHREYXRhKFN0cmluZyBjUGF0aCxpbnQgblJvdyk7CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OmltcG9ydFRleHREYXRhKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCWlmIChJc1NhZmVNb2RlKGNjKSkgcmV0dXJuIFRSVUU7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKCEobV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX01PRElGWSkgfHwgCisJCW1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9BTk5PVF9GT1JNKSB8fAorCQltX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fRklMTF9GT1JNKSkpIHJldHVybiBGQUxTRTsKKworCXJldHVybiBUUlVFOworfQorCisvL2V4cG9ydHMgdGhlIGZvcm0gZGF0YSBhbmQgbWFpbHMgdGhlIHJlc3VsdGluZyBmZGYgZmlsZSBhcyBhbiBhdHRhY2htZW50IHRvIGFsbCByZWNpcGllbnRzLgorLy9jb21tZW50OiBuZWVkIHJlYWRlciBzdXBwb3J0cworLy9ub3RlOgorLy9pbnQgQ1BERlNES19Eb2N1bWVudDo6bWFpbEZvcm0oRlhfQk9PTCBiVUksU3RyaW5nIGN0byxzdHJpbmcgY2NjLHN0cmluZyBjYmNjLHN0cmluZyBjU3ViamVjdCxzdHJpbmcgY21zKTsKKworRlhfQk9PTCBEb2N1bWVudDo6bWFpbEZvcm0oT0JKX01FVEhPRF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKCFtX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fRVhUUkFDVF9BQ0NFU1MpKSByZXR1cm4gRkFMU0U7CisKKwlpbnQgaUxlbmd0aCA9IHBhcmFtcy5zaXplKCk7CisKKwlGWF9CT09MIGJVSSA9IGlMZW5ndGggPiAwID8gKEZYX0JPT0wpcGFyYW1zWzBdIDogVFJVRTsKKwlDRlhfV2lkZVN0cmluZyBjVG8gPSBpTGVuZ3RoID4gMSA/IChGWF9MUENXU1RSKXBhcmFtc1sxXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpIDogKEZYX0xQQ1dTVFIpTCIiOworCUNGWF9XaWRlU3RyaW5nIGNDYyA9IGlMZW5ndGggPiAyID8gKEZYX0xQQ1dTVFIpcGFyYW1zWzJdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCkgOiAoRlhfTFBDV1NUUilMIiI7CisJQ0ZYX1dpZGVTdHJpbmcgY0JjYyA9IGlMZW5ndGggPiAzID8gKEZYX0xQQ1dTVFIpcGFyYW1zWzNdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCkgOiAoRlhfTFBDV1NUUilMIiI7CisJQ0ZYX1dpZGVTdHJpbmcgY1N1YmplY3QgPSBpTGVuZ3RoID4gNCA/IChGWF9MUENXU1RSKXBhcmFtc1s0XS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpIDogKEZYX0xQQ1dTVFIpTCIiOworCUNGWF9XaWRlU3RyaW5nIGNNc2cgPSBpTGVuZ3RoID4gNSA/IChGWF9MUENXU1RSKXBhcmFtc1s1XS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpIDogKEZYX0xQQ1dTVFIpTCIiOworCisJQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSAoQ1BERlNES19JbnRlckZvcm0qKW1fcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsKKwlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsKKworCUNGWF9CeXRlVGV4dEJ1ZiB0ZXh0QnVmOworCWlmICghcEludGVyRm9ybS0+RXhwb3J0Rm9ybVRvRkRGVGV4dEJ1Zih0ZXh0QnVmKSkKKwkJcmV0dXJuIEZBTFNFOworCisJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0KiljYzsKKwlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7CisJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IHBDb250ZXh0LT5HZXRSZWFkZXJBcHAoKTsKKwlBU1NFUlQocEVudiAhPSBOVUxMKTsKKwlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7CisJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOworCisJcFJ1bnRpbWUtPkJlZ2luQmxvY2soKTsKKyAgICBwRW52LT5KU19kb2NtYWlsRm9ybSh0ZXh0QnVmLkdldEJ1ZmZlcigpLCB0ZXh0QnVmLkdldExlbmd0aCgpLCBiVUksIChGWF9MUENXU1RSKWNUbywgKEZYX0xQQ1dTVFIpY1N1YmplY3QsIChGWF9MUENXU1RSKWNDYywgKEZYX0xQQ1dTVFIpY0JjYywgKEZYX0xQQ1dTVFIpY01zZyk7CisJcFJ1bnRpbWUtPkVuZEJsb2NrKCk7CisgCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIERvY3VtZW50OjpwcmludChPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7CisJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOworCisJRlhfQk9PTCBiVUkgPSBUUlVFOworCWludCBuU3RhcnQgPSAwOworCWludCBuRW5kID0gMDsKKwlGWF9CT09MIGJTaWxlbnQgPSBGQUxTRTsKKwlGWF9CT09MIGJTaHJpbmtUb0ZpdCA9IEZBTFNFOworCUZYX0JPT0wgYlByaW50QXNJbWFnZSA9IEZBTFNFOworCUZYX0JPT0wgYlJldmVyc2UgPSBGQUxTRTsKKwlGWF9CT09MIGJBbm5vdGF0aW9ucyA9IEZBTFNFOworCisJaW50IG5sZW5ndGggPSBwYXJhbXMuc2l6ZSgpOworCWlmKG5sZW5ndGggPT05KQorCXsKKwkJaWYgKHBhcmFtc1s4XS5HZXRUeXBlKCkgPT0gVlRfZnhvYmplY3QpCisJCXsKKwkJCUpTRlhPYmplY3QgcE9iaiA9IChKU0ZYT2JqZWN0KXBhcmFtc1s4XTsKKwkJCXsKKwkJCQlpZiAoSlNfR2V0T2JqRGVmbklEKHBPYmopID09IEpTX0dldE9iakRlZm5JRCgqcFJ1bnRpbWUsIEwiUHJpbnRQYXJhbXNPYmoiKSkKKwkJCQl7CisJCQkJCWlmIChDSlNfT2JqZWN0KiBwSlNPYmogPSAoQ0pTX09iamVjdCopcGFyYW1zWzhdKQorCQkJCQl7CisJCQkJCQkJaWYgKFByaW50UGFyYW1zT2JqKiBwcHJpbnRwYXJhbXNPYmogPSAoUHJpbnRQYXJhbXNPYmoqKXBKU09iai0+R2V0RW1iZWRPYmplY3QoKSkKKwkJCQkJCQl7CisJCQkJCQkJCWJVSSA9IHBwcmludHBhcmFtc09iai0+YlVJOworCQkJCQkJCQluU3RhcnQgPSBwcHJpbnRwYXJhbXNPYmotPm5TdGFydDsKKwkJCQkJCQkJbkVuZCA9IHBwcmludHBhcmFtc09iai0+bkVuZDsKKwkJCQkJCQkJYlNpbGVudCA9IHBwcmludHBhcmFtc09iai0+YlNpbGVudDsKKwkJCQkJCQkJYlNocmlua1RvRml0ID0gcHByaW50cGFyYW1zT2JqLT5iU2hyaW5rVG9GaXQ7CisJCQkJCQkJCWJQcmludEFzSW1hZ2UgPSBwcHJpbnRwYXJhbXNPYmotPmJQcmludEFzSW1hZ2U7CisJCQkJCQkJCWJSZXZlcnNlID0gcHByaW50cGFyYW1zT2JqLT5iUmV2ZXJzZTsKKwkJCQkJCQkJYkFubm90YXRpb25zID0gcHByaW50cGFyYW1zT2JqLT5iQW5ub3RhdGlvbnM7CisJCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQkKKwkJfQorCX0KKwllbHNlCisJeworCQlpZihubGVuZ3RoID49IDEpCisJCQkgYlVJID0gcGFyYW1zWzBdOworCQlpZihubGVuZ3RoID49IDIpCisJCQkgblN0YXJ0ID0gKGludClwYXJhbXNbMV07CisJCWlmKG5sZW5ndGggPj0gMykKKwkJICAgIG5FbmQgPSAoaW50KXBhcmFtc1syXTsKKwkJaWYobmxlbmd0aCA+PSA0KQorCQkJYlNpbGVudCA9IHBhcmFtc1szXTsKKwkJaWYobmxlbmd0aCA+PSA1KQorCQkgICAgYlNocmlua1RvRml0ID0gcGFyYW1zWzRdOworCQlpZihubGVuZ3RoID49IDYpCisJCQliUHJpbnRBc0ltYWdlID0gcGFyYW1zWzVdOworCQlpZihubGVuZ3RoID49IDcpCisJCQliUmV2ZXJzZSA9IHBhcmFtc1s2XTsKKwkJaWYobmxlbmd0aCA+PSA4KQorCQkJYkFubm90YXRpb25zID0gcGFyYW1zWzddOworCX0KKworIAlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisgCisgCWlmIChDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gbV9wRG9jdW1lbnQtPkdldEVudigpKQorIAl7CisJCXBFbnYtPkpTX2RvY3ByaW50KGJVSSwgblN0YXJ0LCBuRW5kLCBiU2lsZW50LCBiU2hyaW5rVG9GaXQsIGJQcmludEFzSW1hZ2UsIGJSZXZlcnNlLCBiQW5ub3RhdGlvbnMpOworIAkJcmV0dXJuIFRSVUU7CisgCX0KKwlyZXR1cm4gRkFMU0U7Cit9CisKKy8vcmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGZpZWxkIGZyb20gdGhlIGRvY3VtZW50LgorLy9jb21tZW50OgorLy9ub3RlOiBpZiB0aGUgZmlsZWQgbmFtZSBpcyBub3QgcmV0aW9uYWwsIGFkb2JlIGlzIGR1bWIgZm9yIGl0LgorCitGWF9CT09MIERvY3VtZW50OjpyZW1vdmVGaWVsZChPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAoIShtX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fTU9ESUZZKSB8fCAKKwkJbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX0FOTk9UX0ZPUk0pKSkgcmV0dXJuIEZBTFNFOworCisJaWYgKHBhcmFtcy5zaXplKCkgPCAxKQorCQlyZXR1cm4gVFJVRTsKKworCUNGWF9XaWRlU3RyaW5nIHNGaWVsZE5hbWUgPSBwYXJhbXNbMF0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsKKworCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gKENQREZTREtfSW50ZXJGb3JtKiltX3BEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7CisJQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7CisKKwlDRlhfUHRyQXJyYXkgd2lkZ2V0czsKKwlwSW50ZXJGb3JtLT5HZXRXaWRnZXRzKHNGaWVsZE5hbWUsIHdpZGdldHMpOworCisJaW50IG5TaXplID0gd2lkZ2V0cy5HZXRTaXplKCk7CisKKwlpZiAoblNpemUgPiAwKQorCXsKKwkJZm9yIChpbnQgaT0wOyBpPG5TaXplOyBpKyspCisJCXsKKwkJCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gKENQREZTREtfV2lkZ2V0Kil3aWRnZXRzW2ldOworCQkJQVNTRVJUKHBXaWRnZXQgIT0gTlVMTCk7CisKKwkJCUNQREZfUmVjdCByY0Fubm90ID0gcFdpZGdldC0+R2V0UmVjdCgpOworCQkJcmNBbm5vdC5sZWZ0IC09IDE7CisJCQlyY0Fubm90LmJvdHRvbSAtPSAxOworCQkJcmNBbm5vdC5yaWdodCArPSAxOworCQkJcmNBbm5vdC50b3AgKz0gMTsKKworCQkJQ0ZYX1JlY3RBcnJheSBhUmVmcmVzaDsKKwkJCWFSZWZyZXNoLkFkZChyY0Fubm90KTsKKworCQkJQ1BERl9QYWdlKiBwUGFnZSA9IHBXaWRnZXQtPkdldFBERlBhZ2UoKTsKKwkJCUFTU0VSVChwUGFnZSAhPSBOVUxMKTsKKwkJCQorCQkJQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3ID0gbV9wRG9jdW1lbnQtPkdldFBhZ2VWaWV3KHBQYWdlKTsKKwkJCXBQYWdlVmlldy0+RGVsZXRlQW5ub3QocFdpZGdldCk7CisKKwkJCXBQYWdlVmlldy0+VXBkYXRlUmVjdHMoYVJlZnJlc2gpOworCQl9CisJCW1fcERvY3VtZW50LT5TZXRDaGFuZ2VNYXJrKCk7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKKy8vcmVzZXQgZmlsZWQgdmFsdWVzIHdpdGhpbiBhIGRvY3VtZW50LgorLy9jb21tZW50OgorLy9ub3RlOiBpZiB0aGUgZmllbGRzIG5hbWVzIHIgbm90IHJhdGlvbmFsLCBhb2RiZSBpcyBkdW1iIGZvciBpdC4KKworRlhfQk9PTCBEb2N1bWVudDo6cmVzZXRGb3JtKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCWlmICghKG1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9NT0RJRlkpIHx8IAorCQltX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fQU5OT1RfRk9STSkgfHwKKwkJbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX0ZJTExfRk9STSkpKSByZXR1cm4gRkFMU0U7CisKKwlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopbV9wRG9jdW1lbnQtPkdldEludGVyRm9ybSgpOworCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOworCisJQ1BERl9JbnRlckZvcm0qIHBQREZGb3JtID0gcEludGVyRm9ybS0+R2V0SW50ZXJGb3JtKCk7CisJQVNTRVJUKHBQREZGb3JtICE9IE5VTEwpOworCisJdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBHZXRJc29sYXRlKGNjKTsKKwlDSlNfQXJyYXkgYU5hbWUoaXNvbGF0ZSk7CisKKwlpZiAocGFyYW1zLnNpemUoKSA+IDApCisJeworCQlzd2l0Y2ggKHBhcmFtc1swXS5HZXRUeXBlKCkpCisJCXsKKwkJZGVmYXVsdDoKKwkJCWFOYW1lLkF0dGFjaChwYXJhbXNbMF0pOworCQkJYnJlYWs7CisJCWNhc2UgVlRfc3RyaW5nOgorCQkJYU5hbWUuU2V0RWxlbWVudCgwLHBhcmFtc1swXSk7CisJCQlicmVhazsKKwkJfQorCisJCUNGWF9QdHJBcnJheSBhRmllbGRzOworCisJCWZvciAoaW50IGk9MCxpc3o9YU5hbWUuR2V0TGVuZ3RoKCk7IGk8aXN6OyBpKyspCisJCXsKKwkJCUNKU19WYWx1ZSB2YWxFbGVtZW50KGlzb2xhdGUpOworCQkJYU5hbWUuR2V0RWxlbWVudChpLHZhbEVsZW1lbnQpOworCQkJQ0ZYX1dpZGVTdHJpbmcgc3dWYWwgPSB2YWxFbGVtZW50Lm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7CQorCQkJCisJCQlmb3IgKGludCBqPTAsanN6PXBQREZGb3JtLT5Db3VudEZpZWxkcyhzd1ZhbCk7IGo8anN6OyBqKyspCisJCQl7CisJCQkJYUZpZWxkcy5BZGQoKHZvaWQqKXBQREZGb3JtLT5HZXRGaWVsZChqLHN3VmFsKSk7CisJCQl9CQkKKwkJfQorCisJCWlmIChhRmllbGRzLkdldFNpemUoKSA+IDApCisJCXsKKyAJCQlwUERGRm9ybS0+UmVzZXRGb3JtKGFGaWVsZHMsIFRSVUUsIFRSVUUpOworIAkJCW1fcERvY3VtZW50LT5TZXRDaGFuZ2VNYXJrKCk7CisKKwkJfQorCX0KKwllbHNlCisJeworIAkJcFBERkZvcm0tPlJlc2V0Rm9ybShUUlVFKTsKKyAJCW1fcERvY3VtZW50LT5TZXRDaGFuZ2VNYXJrKCk7CisKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworCitGWF9CT09MIERvY3VtZW50OjpzYXZlQXMoT0JKX01FVEhPRF9QQVJBTVMpCit7CisKKwlpZiAoSXNTYWZlTW9kZShjYykpIHJldHVybiBUUlVFOworCisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisvLwltX3BEb2N1bWVudC0+RG9TYXZlQXMoKTsKKworCXJldHVybiBUUlVFOworfQorCisKK0ZYX0JPT0wgRG9jdW1lbnQ6OnN1Ym1pdEZvcm0oT0JKX01FVEhPRF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisvLwlpZiAoIW1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9FWFRSQUNUX0FDQ0VTUykpIHJldHVybiBGQUxTRTsKKworCWludCBuU2l6ZSA9IHBhcmFtcy5zaXplKCk7CisJaWYgKG5TaXplIDwgMSkgcmV0dXJuIEZBTFNFOworCisJQ0ZYX1dpZGVTdHJpbmcgc3RyVVJMOworCUZYX0JPT0wgYkZERiA9IFRSVUU7CisJRlhfQk9PTCBiRW1wdHkgPSBGQUxTRTsKKwl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IEdldElzb2xhdGUoY2MpOworCUNKU19BcnJheSBhRmllbGRzKGlzb2xhdGUpOworCisJQ0pTX1ZhbHVlIHYgPSBwYXJhbXNbMF07CisJaWYgKHYuR2V0VHlwZSgpID09IFZUX3N0cmluZykKKwl7CisJCXN0clVSTCA9IHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOworCQlpZiAoblNpemUgPiAxKQorCQkJYkZERiA9IHBhcmFtc1sxXTsKKwkJaWYgKG5TaXplID4gMikKKwkJCWJFbXB0eSA9IHBhcmFtc1syXTsKKwkJaWYgKG5TaXplID4gMykKKwkJCWFGaWVsZHMuQXR0YWNoKHBhcmFtc1szXSk7CisJfQorCWVsc2UgaWYgKHYuR2V0VHlwZSgpID09IFZUX29iamVjdCkKKwl7CisJCUpTT2JqZWN0IHBPYmogPSAoSlNPYmplY3QpcGFyYW1zWzBdOworCQl2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwiY1VSTCIpOworCQlpZiAoIXBWYWx1ZS5Jc0VtcHR5KCkpCisJCQlzdHJVUkwgPSBDSlNfVmFsdWUoaXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSk7CisJCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLCBMImJGREYiKTsKKwkJCWJGREYgPSBDSlNfVmFsdWUoaXNvbGF0ZSxwVmFsdWUsIEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpOworCQlwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaiwgTCJiRW1wdHkiKTsKKwkJCWJFbXB0eSA9IENKU19WYWx1ZShpc29sYXRlLHBWYWx1ZSwgR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSk7CisJCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLEwiYUZpZWxkcyIpOworCQkJYUZpZWxkcy5BdHRhY2goQ0pTX1ZhbHVlKGlzb2xhdGUscFZhbHVlLCBHRVRfVkFMVUVfVFlQRShwVmFsdWUpKSk7CisJfQkJCisKKwlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopbV9wRG9jdW1lbnQtPkdldEludGVyRm9ybSgpOworCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOworCUNQREZfSW50ZXJGb3JtKiBwUERGSW50ZXJGb3JtID0gcEludGVyRm9ybS0+R2V0SW50ZXJGb3JtKCk7CisJQVNTRVJUKHBQREZJbnRlckZvcm0gIT0gTlVMTCk7CisKKwlGWF9CT09MIGJBbGwgPSAoYUZpZWxkcy5HZXRMZW5ndGgoKSA9PSAwKTsKKworCWlmIChiQWxsICYmIGJFbXB0eSkKKwl7CisJCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7CisJCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwkJQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpOworCQlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7CisKKwkJCisJCWlmIChwUERGSW50ZXJGb3JtLT5DaGVja1JlcXVpcmVkRmllbGRzKCkpCisJCXsKKwkJCXBSdW50aW1lLT5CZWdpbkJsb2NrKCk7CisJCQlwSW50ZXJGb3JtLT5TdWJtaXRGb3JtKHN0clVSTCwgRkFMU0UpOworCQkJcFJ1bnRpbWUtPkVuZEJsb2NrKCk7CisJCX0KKworCQlyZXR1cm4gVFJVRTsKKwl9CisJZWxzZQorCXsJCisJCUNGWF9QdHJBcnJheSBmaWVsZE9iamVjdHM7CisKKwkJZm9yIChpbnQgaT0wLHN6PWFGaWVsZHMuR2V0TGVuZ3RoKCk7IGk8c3o7IGkrKykKKwkJeworCQkJQ0pTX1ZhbHVlIHZhbE5hbWUoaXNvbGF0ZSk7CisJCQlhRmllbGRzLkdldEVsZW1lbnQoaSwgdmFsTmFtZSk7CisJCQlDRlhfV2lkZVN0cmluZyBzTmFtZSA9IHZhbE5hbWUub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsKKworCQkJQ1BERl9JbnRlckZvcm0qIHBQREZGb3JtID0gcEludGVyRm9ybS0+R2V0SW50ZXJGb3JtKCk7CisJCQlBU1NFUlQocFBERkZvcm0gIT0gTlVMTCk7CisKKwkJCWZvciAoaW50IGo9MCwganN6PXBQREZGb3JtLT5Db3VudEZpZWxkcyhzTmFtZSk7IGo8anN6OyBqKyspCisJCQl7CisJCQkJQ1BERl9Gb3JtRmllbGQqIHBGaWVsZCA9IHBQREZGb3JtLT5HZXRGaWVsZChqLCBzTmFtZSk7CisJCQkJaWYgKCFiRW1wdHkgJiYgcEZpZWxkLT5HZXRWYWx1ZSgpLklzRW1wdHkoKSkKKwkJCQkJY29udGludWU7CisKKwkJCQlmaWVsZE9iamVjdHMuQWRkKHBGaWVsZCk7CisJCQl9CisJCX0KKworCQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOworCQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7CisJCUNKU19SdW50aW1lKiBwUnVudGltZSA9IHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKTsKKwkJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOworCisJCQorCQlpZiAocFBERkludGVyRm9ybS0+Q2hlY2tSZXF1aXJlZEZpZWxkcygmZmllbGRPYmplY3RzLCBUUlVFKSkKKwkJeworCQkJcFJ1bnRpbWUtPkJlZ2luQmxvY2soKTsKKwkJCXBJbnRlckZvcm0tPlN1Ym1pdEZpZWxkcyhzdHJVUkwsIGZpZWxkT2JqZWN0cywgVFJVRSwgIWJGREYpOworCQkJcFJ1bnRpbWUtPkVuZEJsb2NrKCk7CisJCX0KKworCQlyZXR1cm4gVFJVRTsKKwl9CisKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCit2b2lkIERvY3VtZW50OjpBdHRhY2hEb2MoQ1BERlNES19Eb2N1bWVudCAqcERvYykKK3sKKwltX3BEb2N1bWVudCA9IHBEb2M7Cit9CisKK0NQREZTREtfRG9jdW1lbnQgKiBEb2N1bWVudDo6R2V0UmVhZGVyRG9jKCkKK3sKKwlyZXR1cm4gbV9wRG9jdW1lbnQ7Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OkV4dHJhY3RGaWxlTmFtZShDUERGU0RLX0RvY3VtZW50ICpwRG9jLENGWF9CeXRlU3RyaW5nICZzdHJGaWxlTmFtZSkKK3sKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OkV4dHJhY3RGb2xkZXJOYW1lKENQREZTREtfRG9jdW1lbnQgKnBEb2MsQ0ZYX0J5dGVTdHJpbmcgJnN0ckZvbGRlck5hbWUpCit7CisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIERvY3VtZW50Ojpib29rbWFya1Jvb3QoT0JKX1BST1BfUEFSQU1TKQorewkKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBEb2N1bWVudDo6bWFpbERvYyhPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlGWF9CT09MIGJVSSA9IFRSVUU7CisJQ0ZYX1dpZGVTdHJpbmcgY1RvID0gTCIiOworCUNGWF9XaWRlU3RyaW5nIGNDYyA9IEwiIjsKKwlDRlhfV2lkZVN0cmluZyBjQmNjID0gTCIiOworCUNGWF9XaWRlU3RyaW5nIGNTdWJqZWN0ID0gTCIiOworCUNGWF9XaWRlU3RyaW5nIGNNc2cgPSBMIiI7CisJCisKKwliVUkgPSBwYXJhbXMuc2l6ZSgpPj0xP3N0YXRpY19jYXN0PEZYX0JPT0w+KHBhcmFtc1swXSk6VFJVRTsKKwljVG8gPSBwYXJhbXMuc2l6ZSgpPj0yPyhjb25zdCB3Y2hhcl90KilwYXJhbXNbMV0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTpMIiI7CisJY0NjID0gcGFyYW1zLnNpemUoKT49Mz8oY29uc3Qgd2NoYXJfdCopcGFyYW1zWzJdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk6TCIiOworCWNCY2MgPSBwYXJhbXMuc2l6ZSgpPj00Pyhjb25zdCB3Y2hhcl90KilwYXJhbXNbM10ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTpMIiI7CisJY1N1YmplY3QgPSBwYXJhbXMuc2l6ZSgpPj01Pyhjb25zdCB3Y2hhcl90KilwYXJhbXNbNF0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTpMIiI7CisJY01zZyA9IHBhcmFtcy5zaXplKCk+PTY/KGNvbnN0IHdjaGFyX3QqKXBhcmFtc1s1XS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOkwiIjsKKwkKKwl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IEdldElzb2xhdGUoY2MpOworCisJaWYocGFyYW1zLnNpemUoKT49MSAmJiBwYXJhbXNbMF0uR2V0VHlwZSgpID09IFZUX29iamVjdCkKKwl7CisJCUpTT2JqZWN0ICBwT2JqID0gKEpTT2JqZWN0IClwYXJhbXNbMF07CisKKwkJdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLCBMImJVSSIpOworCQkJYlVJID0gKGludClDSlNfVmFsdWUoaXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSk7CisKKwkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwiY1RvIik7CisJCQljVG8gPSBDSlNfVmFsdWUoaXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSkub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsKKworCQlwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaiwgTCJjQ2MiKTsKKwkJCWNDYyA9IENKU19WYWx1ZShpc29sYXRlLHBWYWx1ZSxHRVRfVkFMVUVfVFlQRShwVmFsdWUpKS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOworCisJCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLCBMImNCY2MiKTsKKwkJCWNCY2MgPSBDSlNfVmFsdWUoaXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSkub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsKKworCQlwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaiwgTCJjU3ViamVjdCIpOworCQkJY1N1YmplY3QgPSBDSlNfVmFsdWUoaXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSkub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsKKworCQlwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaiwgTCJjTXNnIik7CisJCQljTXNnID0gQ0pTX1ZhbHVlKGlzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7CisJCisJfQorCisJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0KiljYzsKKwlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7CisJQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpOworCUFTU0VSVChwUnVudGltZSAhPSBOVUxMKTsKKworCXBSdW50aW1lLT5CZWdpbkJsb2NrKCk7CisJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IHBSdW50aW1lLT5HZXRSZWFkZXJBcHAoKTsKKwlwRW52LT5KU19kb2NtYWlsRm9ybShOVUxMLCAwLCBiVUksIChGWF9MUENXU1RSKWNUbywgKEZYX0xQQ1dTVFIpY1N1YmplY3QsIChGWF9MUENXU1RSKWNDYywgKEZYX0xQQ1dTVFIpY0JjYywgKEZYX0xQQ1dTVFIpY01zZyk7CisJcFJ1bnRpbWUtPkVuZEJsb2NrKCk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBEb2N1bWVudDo6YXV0aG9yKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlDUERGX0RpY3Rpb25hcnkqIHBEaWN0aW9uYXJ5ID0gbV9wRG9jdW1lbnQtPkdldERvY3VtZW50KCktPkdldEluZm8oKTsKKwlpZiAoIXBEaWN0aW9uYXJ5KXJldHVybiBGQUxTRTsKKworCWlmICh2cC5Jc0dldHRpbmcoKSkKKwl7CisJCXZwIDw8IHBEaWN0aW9uYXJ5LT5HZXRVbmljb2RlVGV4dCgiQXV0aG9yIik7CisJCXJldHVybiBUUlVFOworCX0KKwllbHNlCisJeworCQlpZiAoIW1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9NT0RJRlkpKSByZXR1cm4gRkFMU0U7CisKKwkJQ0ZYX1dpZGVTdHJpbmcgY3NBdXRob3I7CisJCXZwID4+IGNzQXV0aG9yOworCQlwRGljdGlvbmFyeS0+U2V0QXRTdHJpbmcoIkF1dGhvciIsIFBERl9FbmNvZGVUZXh0KGNzQXV0aG9yKSk7CisJCW1fcERvY3VtZW50LT5TZXRDaGFuZ2VNYXJrKCk7CisJCXJldHVybiBUUlVFOworCX0KK30KKworRlhfQk9PTCBEb2N1bWVudDo6aW5mbyhPQkpfUFJPUF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJQ1BERl9EaWN0aW9uYXJ5KiBwRGljdGlvbmFyeSA9IG1fcERvY3VtZW50LT5HZXREb2N1bWVudCgpLT5HZXRJbmZvKCk7CisJaWYgKCFwRGljdGlvbmFyeSlyZXR1cm4gRkFMU0U7CisKKwlDRlhfV2lkZVN0cmluZyBjd0F1dGhvcgkJCT0gcERpY3Rpb25hcnktPkdldFVuaWNvZGVUZXh0KCJBdXRob3IiKTsKKwlDRlhfV2lkZVN0cmluZyBjd1RpdGxlCQkJPSBwRGljdGlvbmFyeS0+R2V0VW5pY29kZVRleHQoIlRpdGxlIik7CisJQ0ZYX1dpZGVTdHJpbmcgY3dTdWJqZWN0CQk9IHBEaWN0aW9uYXJ5LT5HZXRVbmljb2RlVGV4dCgiU3ViamVjdCIpOworCUNGWF9XaWRlU3RyaW5nIGN3S2V5d29yZHMJCT0gcERpY3Rpb25hcnktPkdldFVuaWNvZGVUZXh0KCJLZXl3b3JkcyIpOworCUNGWF9XaWRlU3RyaW5nIGN3Q3JlYXRvcgkJPSBwRGljdGlvbmFyeS0+R2V0VW5pY29kZVRleHQoIkNyZWF0b3IiKTsKKwlDRlhfV2lkZVN0cmluZyBjd1Byb2R1Y2VyCQk9IHBEaWN0aW9uYXJ5LT5HZXRVbmljb2RlVGV4dCgiUHJvZHVjZXIiKTsKKwlDRlhfV2lkZVN0cmluZyBjd0NyZWF0aW9uRGF0ZQk9IHBEaWN0aW9uYXJ5LT5HZXRVbmljb2RlVGV4dCgiQ3JlYXRpb25EYXRlIik7CisJQ0ZYX1dpZGVTdHJpbmcgY3dNb2REYXRlCQk9IHBEaWN0aW9uYXJ5LT5HZXRVbmljb2RlVGV4dCgiTW9kRGF0ZSIpOworCUNGWF9XaWRlU3RyaW5nIGN3VHJhcHBlZAkJPSBwRGljdGlvbmFyeS0+R2V0VW5pY29kZVRleHQoIlRyYXBwZWQiKTsKKworCXY4OjpJc29sYXRlKiBpc29sYXRlID0gR2V0SXNvbGF0ZShjYyk7CisJaWYgKCF2cC5Jc1NldHRpbmcoKSkKKwl7CisJCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjOworCQlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7CisKKwkJSlNGWE9iamVjdCAgcE9iaiA9IEpTX05ld0Z4RHluYW1pY09iaigqcFJ1bnRpbWUsIHBDb250ZXh0LCAtMSk7CisKKwkJSlNfUHV0T2JqZWN0U3RyaW5nKGlzb2xhdGUscE9iaiwgTCJBdXRob3IiLCBjd0F1dGhvcik7CisJCUpTX1B1dE9iamVjdFN0cmluZyhpc29sYXRlLHBPYmosIEwiVGl0bGUiLCBjd1RpdGxlKTsKKwkJSlNfUHV0T2JqZWN0U3RyaW5nKGlzb2xhdGUscE9iaiwgTCJTdWJqZWN0IiwgY3dTdWJqZWN0KTsKKwkJSlNfUHV0T2JqZWN0U3RyaW5nKGlzb2xhdGUscE9iaiwgTCJLZXl3b3JkcyIsIGN3S2V5d29yZHMpOworCQlKU19QdXRPYmplY3RTdHJpbmcoaXNvbGF0ZSxwT2JqLCBMIkNyZWF0b3IiLCBjd0NyZWF0b3IpOworCQlKU19QdXRPYmplY3RTdHJpbmcoaXNvbGF0ZSxwT2JqLCBMIlByb2R1Y2VyIiwgY3dQcm9kdWNlcik7CisJCUpTX1B1dE9iamVjdFN0cmluZyhpc29sYXRlLHBPYmosIEwiQ3JlYXRpb25EYXRlIiwgY3dDcmVhdGlvbkRhdGUpOworCQlKU19QdXRPYmplY3RTdHJpbmcoaXNvbGF0ZSxwT2JqLCBMIk1vZERhdGUiLCBjd01vZERhdGUpOworCQlKU19QdXRPYmplY3RTdHJpbmcoaXNvbGF0ZSxwT2JqLCBMIlRyYXBwZWQiLCBjd1RyYXBwZWQpOworCisvLyBJdCdzIHRvIGJlIGNvbXBhdGlibGUgdG8gbm9uLXN0YW5kYXJkIGluZm8gZGljdGlvbmFyeS4JCisJCUZYX1BPU0lUSU9OIHBvcyA9IHBEaWN0aW9uYXJ5LT5HZXRTdGFydFBvcygpOworCQl3aGlsZShwb3MpCisJCXsKKwkJCUNGWF9CeXRlU3RyaW5nIGJzS2V5OworCQkJQ1BERl9PYmplY3QqIHBWYWx1ZU9iaiA9IHBEaWN0aW9uYXJ5LT5HZXROZXh0RWxlbWVudChwb3MsIGJzS2V5KTsKKwkJCUNGWF9XaWRlU3RyaW5nIHdzS2V5ICA9IENGWF9XaWRlU3RyaW5nOjpGcm9tVVRGOChic0tleSk7CisJCQlpZigocFZhbHVlT2JqLT5HZXRUeXBlKCk9PVBERk9CSl9TVFJJTkcpIHx8IChwVmFsdWVPYmotPkdldFR5cGUoKT09UERGT0JKX05BTUUpICkKKwkJCQkJSlNfUHV0T2JqZWN0U3RyaW5nKGlzb2xhdGUscE9iaiwgd3NLZXksIHBWYWx1ZU9iai0+R2V0VW5pY29kZVRleHQoKSk7CisJCQlpZihwVmFsdWVPYmotPkdldFR5cGUoKT09UERGT0JKX05VTUJFUikKKwkJCQlKU19QdXRPYmplY3ROdW1iZXIoaXNvbGF0ZSxwT2JqLCB3c0tleSwgKGZsb2F0KXBWYWx1ZU9iai0+R2V0TnVtYmVyKCkpOworCQkJaWYocFZhbHVlT2JqLT5HZXRUeXBlKCk9PVBERk9CSl9CT09MRUFOKQorCQkJCUpTX1B1dE9iamVjdEJvb2xlYW4oaXNvbGF0ZSxwT2JqLCB3c0tleSwgKGJvb2wpcFZhbHVlT2JqLT5HZXRJbnRlZ2VyKCkpOworCQl9CisKKwkJdnAgPDwgcE9iajsKKwkJcmV0dXJuIFRSVUU7CisJfQorCWVsc2UKKwl7CisJCXJldHVybiBUUlVFOworCX0KK30KKworRlhfQk9PTCBEb2N1bWVudDo6Y3JlYXRpb25EYXRlKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlDUERGX0RpY3Rpb25hcnkqIHBEaWN0aW9uYXJ5ID0gbV9wRG9jdW1lbnQtPkdldERvY3VtZW50KCktPkdldEluZm8oKTsKKwlpZiAoIXBEaWN0aW9uYXJ5KXJldHVybiBGQUxTRTsKKworCWlmICh2cC5Jc0dldHRpbmcoKSkKKwl7CisJCXZwIDw8IHBEaWN0aW9uYXJ5LT5HZXRVbmljb2RlVGV4dCgiQ3JlYXRpb25EYXRlIik7CisJCXJldHVybiBUUlVFOworCX0KKwllbHNlCisJeworCQlpZiAoIW1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9NT0RJRlkpKSByZXR1cm4gRkFMU0U7CisKKwkJQ0ZYX1dpZGVTdHJpbmcgY3NDcmVhdGlvbkRhdGU7CisJCXZwID4+IGNzQ3JlYXRpb25EYXRlOworCQlwRGljdGlvbmFyeS0+U2V0QXRTdHJpbmcoIkNyZWF0aW9uRGF0ZSIsIFBERl9FbmNvZGVUZXh0KGNzQ3JlYXRpb25EYXRlKSk7CisJCW1fcERvY3VtZW50LT5TZXRDaGFuZ2VNYXJrKCk7CisKKwkJcmV0dXJuIFRSVUU7CisJfQorfQorCitGWF9CT09MIERvY3VtZW50OjpjcmVhdG9yKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlDUERGX0RpY3Rpb25hcnkqIHBEaWN0aW9uYXJ5ID0gbV9wRG9jdW1lbnQtPkdldERvY3VtZW50KCktPkdldEluZm8oKTsKKwlpZiAoIXBEaWN0aW9uYXJ5KXJldHVybiBGQUxTRTsKKworCWlmICh2cC5Jc0dldHRpbmcoKSkKKwl7CisJCXZwIDw8IHBEaWN0aW9uYXJ5LT5HZXRVbmljb2RlVGV4dCgiQ3JlYXRvciIpOworCQlyZXR1cm4gVFJVRTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKCFtX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fTU9ESUZZKSkgcmV0dXJuIEZBTFNFOworCisJCUNGWF9XaWRlU3RyaW5nIGNzQ3JlYXRvcjsKKwkJdnAgPj4gY3NDcmVhdG9yOworCQlwRGljdGlvbmFyeS0+U2V0QXRTdHJpbmcoIkNyZWF0b3IiLCBQREZfRW5jb2RlVGV4dChjc0NyZWF0b3IpKTsKKwkJbV9wRG9jdW1lbnQtPlNldENoYW5nZU1hcmsoKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorfQorCitGWF9CT09MIERvY3VtZW50OjpkZWxheShPQkpfUFJPUF9QQVJBTVMpCit7CisJaWYgKHZwLklzR2V0dGluZygpKQorCXsKKwkJdnAgPDwgbV9iRGVsYXk7CisJCXJldHVybiBUUlVFOworCX0KKwllbHNlCisJeworCQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwkJaWYgKCFtX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fTU9ESUZZKSkgcmV0dXJuIEZBTFNFOworCisJCWJvb2wgYjsKKwkJdnAgPj4gYjsKKworCQltX2JEZWxheSA9IGI7CisKKwkJaWYgKG1fYkRlbGF5KSAKKwkJeworCQkJZm9yIChpbnQgaT0wLHN6PW1fRGVsYXlEYXRhLkdldFNpemUoKTsgaTxzejsgaSsrKQorCQkJCWRlbGV0ZSBtX0RlbGF5RGF0YS5HZXRBdChpKTsKKworCQkJbV9EZWxheURhdGEuUmVtb3ZlQWxsKCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlmb3IgKGludCBpPTAsc3o9bV9EZWxheURhdGEuR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJCQl7CisJCQkJaWYgKENKU19EZWxheURhdGEqIHBEYXRhID0gbV9EZWxheURhdGEuR2V0QXQoaSkpCisJCQkJeworCQkJCQlGaWVsZDo6RG9EZWxheShtX3BEb2N1bWVudCwgcERhdGEpOworCQkJCQlkZWxldGUgbV9EZWxheURhdGEuR2V0QXQoaSk7CisJCQkJfQorCQkJfQorCQkJbV9EZWxheURhdGEuUmVtb3ZlQWxsKCk7CisJCX0KKworCQlyZXR1cm4gVFJVRTsKKwl9Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OmtleXdvcmRzKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlDUERGX0RpY3Rpb25hcnkqIHBEaWN0aW9uYXJ5ID0gbV9wRG9jdW1lbnQtPkdldERvY3VtZW50KCktPkdldEluZm8oKTsKKwlpZiAoIXBEaWN0aW9uYXJ5KXJldHVybiBGQUxTRTsKKworCWlmICh2cC5Jc0dldHRpbmcoKSkKKwl7CisJCXZwIDw8IHBEaWN0aW9uYXJ5LT5HZXRVbmljb2RlVGV4dCgiS2V5d29yZHMiKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCWVsc2UKKwl7CisJCWlmICghbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX01PRElGWSkpIHJldHVybiBGQUxTRTsKKworCQlDRlhfV2lkZVN0cmluZyBjc0tleXdvcmRzOworCQl2cCA+PiBjc0tleXdvcmRzOworCQlwRGljdGlvbmFyeS0+U2V0QXRTdHJpbmcoIktleXdvcmRzIiwgUERGX0VuY29kZVRleHQoY3NLZXl3b3JkcykpOworCQltX3BEb2N1bWVudC0+U2V0Q2hhbmdlTWFyaygpOworCQlyZXR1cm4gVFJVRTsKKwl9Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6Om1vZERhdGUoT0JKX1BST1BfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCUNQREZfRGljdGlvbmFyeSogcERpY3Rpb25hcnkgPSBtX3BEb2N1bWVudC0+R2V0RG9jdW1lbnQoKS0+R2V0SW5mbygpOworCWlmICghcERpY3Rpb25hcnkpcmV0dXJuIEZBTFNFOworCisJaWYgKHZwLklzR2V0dGluZygpKQorCXsKKwkJdnAgPDwgcERpY3Rpb25hcnktPkdldFVuaWNvZGVUZXh0KCJNb2REYXRlIik7CisJCXJldHVybiBUUlVFOworCX0KKwllbHNlCisJeworCQlpZiAoIW1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9NT0RJRlkpKSByZXR1cm4gRkFMU0U7CisKKwkJQ0ZYX1dpZGVTdHJpbmcgY3Ntb2REYXRlOworCQl2cCA+PiBjc21vZERhdGU7CisJCXBEaWN0aW9uYXJ5LT5TZXRBdFN0cmluZygiTW9kRGF0ZSIsIFBERl9FbmNvZGVUZXh0KGNzbW9kRGF0ZSkpOworCQltX3BEb2N1bWVudC0+U2V0Q2hhbmdlTWFyaygpOworCQlyZXR1cm4gVFJVRTsKKwl9Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OnByb2R1Y2VyKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlDUERGX0RpY3Rpb25hcnkqIHBEaWN0aW9uYXJ5ID0gbV9wRG9jdW1lbnQtPkdldERvY3VtZW50KCktPkdldEluZm8oKTsKKwlpZiAoIXBEaWN0aW9uYXJ5KXJldHVybiBGQUxTRTsKKworCWlmICh2cC5Jc0dldHRpbmcoKSkKKwl7CisJCXZwIDw8IHBEaWN0aW9uYXJ5LT5HZXRVbmljb2RlVGV4dCgiUHJvZHVjZXIiKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCWVsc2UKKwl7CisJCWlmICghbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX01PRElGWSkpIHJldHVybiBGQUxTRTsKKworCQlDRlhfV2lkZVN0cmluZyBjc3Byb2R1Y2VyOworCQl2cCA+PiBjc3Byb2R1Y2VyOworCQlwRGljdGlvbmFyeS0+U2V0QXRTdHJpbmcoIlByb2R1Y2VyIiwgUERGX0VuY29kZVRleHQoY3Nwcm9kdWNlcikpOworCQltX3BEb2N1bWVudC0+U2V0Q2hhbmdlTWFyaygpOworCQlyZXR1cm4gVFJVRTsKKwl9Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OnN1YmplY3QoT0JKX1BST1BfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCUNQREZfRGljdGlvbmFyeSogcERpY3Rpb25hcnkgPSBtX3BEb2N1bWVudC0+R2V0RG9jdW1lbnQoKS0+R2V0SW5mbygpOworCWlmICghcERpY3Rpb25hcnkpcmV0dXJuIEZBTFNFOworCisJaWYgKHZwLklzR2V0dGluZygpKQorCXsKKwkJdnAgPDwgcERpY3Rpb25hcnktPkdldFVuaWNvZGVUZXh0KCJTdWJqZWN0Iik7CisJCXJldHVybiBUUlVFOworCX0KKwllbHNlCisJeworCQlpZiAoIW1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9NT0RJRlkpKSByZXR1cm4gRkFMU0U7CisKKwkJQ0ZYX1dpZGVTdHJpbmcgY3NzdWJqZWN0OworCQl2cCA+PiBjc3N1YmplY3Q7CisJCXBEaWN0aW9uYXJ5LT5TZXRBdFN0cmluZygiU3ViamVjdCIsIFBERl9FbmNvZGVUZXh0KGNzc3ViamVjdCkpOworCQltX3BEb2N1bWVudC0+U2V0Q2hhbmdlTWFyaygpOworCQlyZXR1cm4gVFJVRTsKKwl9Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OnRpdGxlKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAobV9wRG9jdW1lbnQgPT0gTlVMTCB8fCBtX3BEb2N1bWVudC0+R2V0RG9jdW1lbnQoKSA9PSBOVUxMKQorCQlyZXR1cm4gRkFMU0U7CisKKwlDUERGX0RpY3Rpb25hcnkqIHBEaWN0aW9uYXJ5ID0gbV9wRG9jdW1lbnQtPkdldERvY3VtZW50KCktPkdldEluZm8oKTsKKwlpZiAoIXBEaWN0aW9uYXJ5KXJldHVybiBGQUxTRTsKKworCWlmICh2cC5Jc0dldHRpbmcoKSkKKwl7CisJCXZwIDw8IHBEaWN0aW9uYXJ5LT5HZXRVbmljb2RlVGV4dCgiVGl0bGUiKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCWVsc2UKKwl7CisJCWlmICghbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX01PRElGWSkpIHJldHVybiBGQUxTRTsKKworCQlDRlhfV2lkZVN0cmluZyBjc3RpdGxlOworCQl2cCA+PiBjc3RpdGxlOworCQlwRGljdGlvbmFyeS0+U2V0QXRTdHJpbmcoIlRpdGxlIiwgUERGX0VuY29kZVRleHQoY3N0aXRsZSkpOworCQltX3BEb2N1bWVudC0+U2V0Q2hhbmdlTWFyaygpOworCQlyZXR1cm4gVFJVRTsKKwl9Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6Om51bVBhZ2VzKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlpZiAodnAuSXNHZXR0aW5nKCkpCisJeworCQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisJCXZwIDw8IG1fcERvY3VtZW50LT5HZXRQYWdlQ291bnQoKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCWVsc2UKKwl7CisJCXJldHVybiBGQUxTRTsKKwl9Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OmV4dGVybmFsKE9CSl9QUk9QX1BBUkFNUykKK3sKKwkvL0luIENocm9tZSBjYXNlLHNob3VsZCBhbHdheXMgcmV0dXJuIHRydWUuCisJdnAgPDwgVFJVRTsKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBEb2N1bWVudDo6ZmlsZXNpemUoT0JKX1BST1BfUEFSQU1TKQoreworCWlmICghdnAuSXNHZXR0aW5nKCkpcmV0dXJuIEZBTFNFOworCisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisvLyAJQ0ZpbGUgZmlsZShtX3BEb2N1bWVudC0+R2V0UGF0aCgpLCBDRmlsZTo6bW9kZVJlYWQgfCBDRmlsZTo6dHlwZUJpbmFyeSB8IENGaWxlOjpzaGFyZURlbnlOb25lKTsKKy8vIAl2cCA8PCAoZG91YmxlKWZpbGUuR2V0TGVuZ3RoKCk7CisvLyAJZmlsZS5DbG9zZSgpOworCisJaWYgKCBtX3BEb2N1bWVudC0+R2V0UGF0aCgpLklzRW1wdHkoKSA9PSBGQUxTRSkKKwl7CisJCUNGWF9CeXRlU3RyaW5nIGJzU3RyID0gQ0ZYX0J5dGVTdHJpbmc6OkZyb21Vbmljb2RlKCBtX3BEb2N1bWVudC0+R2V0UGF0aCgpICk7CisJCUZJTEUgKiBwRmlsZSA9IE5VTEw7CisJCXBGaWxlID0gZm9wZW4oIGJzU3RyLkdldEJ1ZmZlciggYnNTdHIuR2V0TGVuZ3RoKCkgKSwgInJiIiApOworCQlpZiAoIHBGaWxlICkKKwkJeworCQkJZnNlZWsoIHBGaWxlLCAwLCBTRUVLX0VORCApOworCQkJbG9uZyBsU2l6ZSA9IGZ0ZWxsKCBwRmlsZSApOworCQkJZmNsb3NlKCBwRmlsZSApOworCQkJcEZpbGUgPSBOVUxMOworCisJCQl2cCA8PCAoRlhfSU5UMzIpKGxTaXplKTsKKwkJCXJldHVybiBUUlVFOworCQl9CisJfQorCisJdnAgPDwgMDsKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBEb2N1bWVudDo6bW91c2VYKE9CSl9QUk9QX1BBUkFNUykKK3sKKyAJcmV0dXJuIFRSVUU7CQorfQorCitGWF9CT09MIERvY3VtZW50Ojptb3VzZVkoT0JKX1BST1BfUEFSQU1TKQoreworIAlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBEb2N1bWVudDo6YmFzZVVSTChPQkpfUFJPUF9QQVJBTVMpCit7CisJaWYgKHZwLklzR2V0dGluZygpKQorCXsKKwkJdnAgPDwgbV9jd0Jhc2VVUkw7CisJCXJldHVybiBUUlVFOworCX0KKwllbHNlCisJeworCQl2cCA+PiBtX2N3QmFzZVVSTDsKKwkJcmV0dXJuIFRSVUU7CisJfQorfQorCitGWF9CT09MIERvY3VtZW50OjpjYWxjdWxhdGUoT0JKX1BST1BfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gKENQREZTREtfSW50ZXJGb3JtKiltX3BEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7CisJQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7CisKKwlpZiAodnAuSXNHZXR0aW5nKCkpCisJeworCQlpZiAocEludGVyRm9ybS0+SXNDYWxjdWxhdGVFbmFibGVkKCkpCisJCQl2cCA8PCB0cnVlOworCQllbHNlCisJCQl2cCA8PCBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJYm9vbCBiQ2FsY3VsYXRlOworCQl2cCA+PiBiQ2FsY3VsYXRlOworCisJCXBJbnRlckZvcm0tPkVuYWJsZUNhbGN1bGF0ZShiQ2FsY3VsYXRlKTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBEb2N1bWVudDo6ZG9jdW1lbnRGaWxlTmFtZShPQkpfUFJPUF9QQVJBTVMpCit7CisJaWYgKCF2cC5Jc0dldHRpbmcoKSkKKwkJcmV0dXJuIEZBTFNFOworCisJQ0ZYX1dpZGVTdHJpbmcgd3NGaWxlUGF0aCA9IG1fcERvY3VtZW50LT5HZXRQYXRoKCk7CisKKwlGWF9JTlQzMiBpID0gd3NGaWxlUGF0aC5HZXRMZW5ndGgoKSAtIDE7CisJZm9yICggOyBpID49IDA7IGktLSApCisJeworCQlpZiAoIHdzRmlsZVBhdGguR2V0QXQoIGkgKSA9PSBMJ1xcJyB8fCB3c0ZpbGVQYXRoLkdldEF0KCBpICkgPT0gTCcvJyApCisJCQlicmVhazsKKwl9CisJaWYgKCBpID49IDAgJiYgaSA8IHdzRmlsZVBhdGguR2V0TGVuZ3RoKCkgLSAxICkKKwl7CisJCXZwIDw8ICggd3NGaWxlUGF0aC5HZXRCdWZmZXIoIHdzRmlsZVBhdGguR2V0TGVuZ3RoKCkgKSArIGkgKyAxICk7CisJfWVsc2V7CisJCXZwIDw8IEwiIjsKKwl9CisJcmV0dXJuIFRSVUU7Cit9CisKK0NGWF9XaWRlU3RyaW5nIERvY3VtZW50OjpSZXZlcnNhbFN0cihDRlhfV2lkZVN0cmluZyBjYkZyb20pCit7CisJd2NoYXJfdCogcEZyb20gPSBOVUxMOworCWludCBpTGVudGggPSBjYkZyb20uR2V0TGVuZ3RoKCk7CisJd2NoYXJfdCogcFJlc3VsdCA9ICh3Y2hhcl90KiltYWxsb2MoKGlMZW50aCsxKSAqIHNpemVvZih3Y2hhcl90KSk7CisJbWVtc2V0KHBSZXN1bHQsIDAsIChpTGVudGgrMSkpOworCXBGcm9tID0gKHdjaGFyX3QqKWNiRnJvbS5HZXRCdWZmZXIoaUxlbnRoKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgaUxlbnRoOyBpKyspCisJeworCQlwUmVzdWx0W2ldID0gKihwRnJvbSArIGlMZW50aCAtIGkgLSAxKTsKKwl9CisKKwljYkZyb20uUmVsZWFzZUJ1ZmZlcigpOworCUNGWF9XaWRlU3RyaW5nIGNiUmV0ID0gQ0ZYX1dpZGVTdHJpbmcocFJlc3VsdCk7CisJZnJlZShwUmVzdWx0KTsKKwlwUmVzdWx0ID0gTlVMTDsKKwlyZXR1cm4gY2JSZXQ7Cit9CisKK0NGWF9XaWRlU3RyaW5nIERvY3VtZW50OjpDdXRTdHJpbmcoQ0ZYX1dpZGVTdHJpbmcgY2JGcm9tKQoreworCXdjaGFyX3QqIHBGcm9tID0gTlVMTDsKKwlpbnQgaUxlbnRoID0gY2JGcm9tLkdldExlbmd0aCgpOworCXdjaGFyX3QqIHBSZXN1bHQgPSAod2NoYXJfdCopbWFsbG9jKChpTGVudGgrMSkgKiBzaXplb2Yod2NoYXJfdCkpOworCW1lbXNldChwUmVzdWx0LCAwLCAoaUxlbnRoKzEpKTsKKwlwRnJvbSA9ICh3Y2hhcl90KiljYkZyb20uR2V0QnVmZmVyKGlMZW50aCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IGlMZW50aDsgaSsrKQorCXsKKwkJaWYgKHBGcm9tW2ldID09IEwnXFwnIHx8IHBGcm9tW2ldID09IEwnLycpCisJCQlicmVhazsKKwkJcFJlc3VsdFtpXSA9IHBGcm9tW2ldOworCX0KKworCWNiRnJvbS5SZWxlYXNlQnVmZmVyKCk7CisJQ0ZYX1dpZGVTdHJpbmcgY2JSZXQgPSBDRlhfV2lkZVN0cmluZyhwUmVzdWx0KTsKKwlmcmVlKHBSZXN1bHQpOworCXBSZXN1bHQgPSBOVUxMOworCXJldHVybiBjYlJldDsKK30KKworRlhfQk9PTCBEb2N1bWVudDo6cGF0aChPQkpfUFJPUF9QQVJBTVMpCit7CisJaWYgKCF2cC5Jc0dldHRpbmcoKSkgcmV0dXJuIEZBTFNFOworCisJdnAgPDwgYXBwOjpTeXNQYXRoVG9QREZQYXRoKG1fcERvY3VtZW50LT5HZXRQYXRoKCkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OnBhZ2VXaW5kb3dSZWN0KE9CSl9QUk9QX1BBUkFNUykKK3sKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBEb2N1bWVudDo6bGF5b3V0KE9CSl9QUk9QX1BBUkFNUykKK3sJCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OmFkZExpbmsoT0JKX01FVEhPRF9QQVJBTVMpCit7CisgCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIERvY3VtZW50OjpjbG9zZURvYyhPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKworCQorCQorCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OmdldFBhZ2VCb3goT0JKX01FVEhPRF9QQVJBTVMpCit7CisgCXJldHVybiBUUlVFOworfQorCisKK0ZYX0JPT0wgRG9jdW1lbnQ6OmdldEFubm90KE9CSl9NRVRIT0RfUEFSQU1TKQoreworIAlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBEb2N1bWVudDo6Z2V0QW5ub3RzKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCXZSZXQuU2V0TnVsbCgpOworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIERvY3VtZW50OjpnZXRBbm5vdDNEKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCXZSZXQuU2V0TnVsbCgpOworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIERvY3VtZW50OjpnZXRBbm5vdHMzRChPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwl2UmV0ID0gVlRfdW5kZWZpbmVkOworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIERvY3VtZW50OjpnZXRPQ0dzKE9CSl9NRVRIT0RfUEFSQU1TKQorewkKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBEb2N1bWVudDo6Z2V0TGlua3MoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJcmV0dXJuIFRSVUU7Cit9CisKK2Jvb2wgRG9jdW1lbnQ6OklzRW5jbG9zZWRJblJlY3QoQ0ZYX0Zsb2F0UmVjdCByZWN0LCBDRlhfRmxvYXRSZWN0IExpbmtSZWN0KQoreworCWlmIChyZWN0LmxlZnQgPD0gTGlua1JlY3QubGVmdAorCSAgJiYgcmVjdC50b3AgPD0gTGlua1JlY3QudG9wCisJICAmJiByZWN0LnJpZ2h0ID49IExpbmtSZWN0LnJpZ2h0CisJICAmJiByZWN0LmJvdHRvbSA+PSBMaW5rUmVjdC5ib3R0b20pCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEljb25UcmVlOjpJbnNlcnRJY29uRWxlbWVudChJY29uRWxlbWVudCogcE5ld0ljb24pCit7CisJaWYgKCFwTmV3SWNvbilyZXR1cm47CisKKwlpZiAobV9wSGVhZCA9PSBOVUxMICYmIG1fcEVuZCA9PSBOVUxMKQorCXsKKwkJbV9wSGVhZCA9IG1fcEVuZCA9IHBOZXdJY29uOworCQltX2lMZW5ndGgrKzsKKwl9CisJZWxzZQorCXsKKwkJbV9wRW5kLT5OZXh0SWNvbiA9IHBOZXdJY29uOworCQltX3BFbmQgPSBwTmV3SWNvbjsKKwkJbV9pTGVuZ3RoKys7CisJfQorfQorCit2b2lkIEljb25UcmVlOjpEZWxldGVJY29uVHJlZSgpCit7CisJaWYgKCFtX3BIZWFkIHx8ICFtX3BFbmQpcmV0dXJuOworCQorCUljb25FbGVtZW50KiBwVGVtcCA9IE5VTEw7CisJd2hpbGUobV9wRW5kICE9IG1fcEhlYWQpCisJeworCQlwVGVtcCA9IG1fcEhlYWQ7CisJCW1fcEhlYWQgPSBtX3BIZWFkLT5OZXh0SWNvbjsKKwkJZGVsZXRlIHBUZW1wOworCX0KKworCWRlbGV0ZSBtX3BFbmQ7CisJbV9wSGVhZCA9IE5VTEw7CisJbV9wRW5kID0gTlVMTDsKK30KKworaW50IEljb25UcmVlOjpHZXRMZW5ndGgoKQoreworCXJldHVybiBtX2lMZW5ndGg7Cit9CisKK0ljb25FbGVtZW50KiBJY29uVHJlZTo6b3BlcmF0b3IgW10oaW50IGlJbmRleCkKK3sKKwlpZiAoaUluZGV4ID49IDAgJiYgaUluZGV4IDw9IG1faUxlbmd0aCkKKwl7CisJCUljb25FbGVtZW50KiBwVGVtcCA9IG1fcEhlYWQ7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgaUluZGV4OyBpKyspCisJCXsKKwkJCXBUZW1wID0gcFRlbXAtPk5leHRJY29uOworCQl9CisJCXJldHVybiBwVGVtcDsKKwl9CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBJY29uVHJlZTo6RGVsZXRlSWNvbkVsZW1lbnQoQ0ZYX1dpZGVTdHJpbmcgc3dJY29uTmFtZSkKK3sKKwlJY29uRWxlbWVudCogcFRlbXAgPSBtX3BIZWFkOworCWludCBpTG9vcENvdW50ID0gbV9pTGVuZ3RoOyAKKwlmb3IgKGludCBpID0gMDsgaSA8IGlMb29wQ291bnQgLSAxOyBpKyspCisJeworCQlpZiAocFRlbXAgPT0gbV9wRW5kKQorCQkJYnJlYWs7CisJCisJCWlmIChtX3BIZWFkLT5JY29uTmFtZSA9PSBzd0ljb25OYW1lKQorCQl7CisJCQltX3BIZWFkID0gbV9wSGVhZC0+TmV4dEljb247CisJCQlkZWxldGUgcFRlbXA7CisJCQltX2lMZW5ndGgtLTsKKwkJCXBUZW1wID0gbV9wSGVhZDsKKwkJfQorCQlpZiAocFRlbXAtPk5leHRJY29uLT5JY29uTmFtZSA9PSBzd0ljb25OYW1lKQorCQl7CisJCQlpZiAocFRlbXAtPk5leHRJY29uID09IG1fcEVuZCkKKwkJCXsKKwkJCQltX3BFbmQgPSBwVGVtcDsKKwkJCQlkZWxldGUgcFRlbXAtPk5leHRJY29uOworCQkJCW1faUxlbmd0aC0tOworCQkJCXBUZW1wLT5OZXh0SWNvbiA9IE5VTEw7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJSWNvbkVsZW1lbnQqIHBFbGVtZW50ID0gcFRlbXAtPk5leHRJY29uOworCQkJCXBUZW1wLT5OZXh0SWNvbiA9IHBUZW1wLT5OZXh0SWNvbi0+TmV4dEljb247CisJCQkJZGVsZXRlIHBFbGVtZW50OworCQkJCW1faUxlbmd0aC0tOworCQkJCXBFbGVtZW50ID0gTlVMTDsKKwkJCX0KKworCQkJY29udGludWU7CisJCX0KKworCQlwVGVtcCA9IHBUZW1wLT5OZXh0SWNvbjsKKwl9Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OmFkZEljb24oT0JKX01FVEhPRF9QQVJBTVMpCit7CisJaWYgKHBhcmFtcy5zaXplKCkgIT0gMilyZXR1cm4gRkFMU0U7CisKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7CisJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOworCisJQ0ZYX1dpZGVTdHJpbmcgc3dJY29uTmFtZSA9IHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOworCQorCUpTRlhPYmplY3QgcEpTSWNvbiA9IChKU0ZYT2JqZWN0KXBhcmFtc1sxXTsKKwlpZiAoSlNfR2V0T2JqRGVmbklEKHBKU0ljb24pICE9IEpTX0dldE9iakRlZm5JRCgqcFJ1bnRpbWUsIEwiSWNvbiIpKSByZXR1cm4gRkFMU0U7CisKKwlDSlNfRW1iZWRPYmoqIHBFbWJlZE9iaiA9ICgoQ0pTX09iamVjdCopcGFyYW1zWzFdKS0+R2V0RW1iZWRPYmplY3QoKTsKKwlpZiAoIXBFbWJlZE9iailyZXR1cm4gRkFMU0U7CisJSWNvbiogcEljb24gPSAoSWNvbiopcEVtYmVkT2JqOworCisJaWYgKCFtX3BJY29uVHJlZSkKKwkJbV9wSWNvblRyZWUgPSBuZXcgSWNvblRyZWUoKTsKKworCUljb25FbGVtZW50KiBwTmV3SWNvbiA9IG5ldyBJY29uRWxlbWVudCgpOworCXBOZXdJY29uLT5JY29uTmFtZSA9IHN3SWNvbk5hbWU7CisJcE5ld0ljb24tPk5leHRJY29uID0gTlVMTDsKKwlwTmV3SWNvbi0+SWNvblN0cmVhbSA9IHBJY29uOworCW1fcEljb25UcmVlLT5JbnNlcnRJY29uRWxlbWVudChwTmV3SWNvbik7CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6Omljb25zKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlpZiAodnAuSXNTZXR0aW5nKCkpCisJCXJldHVybiBGQUxTRTsKKworCWlmICghbV9wSWNvblRyZWUpCisJeworCQl2cC5TZXROdWxsKCk7CisJCXJldHVybiBUUlVFOworCX0KKworCUNKU19BcnJheSBJY29ucyhtX2lzb2xhdGUpOworCUljb25FbGVtZW50KiBwSWNvbkVsZW1lbnQgPSBOVUxMOworCWludCBpSWNvblRyZWVMZW5ndGggPSBtX3BJY29uVHJlZS0+R2V0TGVuZ3RoKCk7CisKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQgKiljYzsKKwlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IGlJY29uVHJlZUxlbmd0aDsgaSsrKQorCXsKKwkJcEljb25FbGVtZW50ID0gKCptX3BJY29uVHJlZSlbaV07CisJCQorCQlKU0ZYT2JqZWN0ICBwT2JqID0gSlNfTmV3RnhEeW5hbWljT2JqKCpwUnVudGltZSwgcENvbnRleHQsIEpTX0dldE9iakRlZm5JRCgqcFJ1bnRpbWUsIEwiSWNvbiIpKTsKKwkJaWYgKHBPYmouSXNFbXB0eSgpKSByZXR1cm4gRkFMU0U7CisJCQkJCisJCUNKU19JY29uICogcEpTX0ljb24gPSAoQ0pTX0ljb24gKilKU19HZXRQcml2YXRlKHBPYmopOworCQlpZiAoIXBKU19JY29uKSByZXR1cm4gRkFMU0U7CisKKwkJSWNvbiogcEljb24gPSAoSWNvbiopcEpTX0ljb24tPkdldEVtYmVkT2JqZWN0KCk7CisJCWlmICghcEljb24pcmV0dXJuIEZBTFNFOworCisJCXBJY29uLT5TZXRTdHJlYW0ocEljb25FbGVtZW50LT5JY29uU3RyZWFtLT5HZXRTdHJlYW0oKSk7CisJCXBJY29uLT5TZXRJY29uTmFtZShwSWNvbkVsZW1lbnQtPkljb25OYW1lKTsKKwkJSWNvbnMuU2V0RWxlbWVudChpLCBDSlNfVmFsdWUobV9pc29sYXRlLHBKU19JY29uKSk7CisJfQorCisJdnAgPDwgSWNvbnM7CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OmdldEljb24oT0JKX01FVEhPRF9QQVJBTVMpCit7CisJaWYgKHBhcmFtcy5zaXplKCkgIT0gMSlyZXR1cm4gRkFMU0U7CisJaWYoIW1fcEljb25UcmVlKQorCQlyZXR1cm4gRkFMU0U7CisJQ0ZYX1dpZGVTdHJpbmcgc3dJY29uTmFtZSA9IHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOworCWludCBpSWNvbkNvdW50cyA9IG1fcEljb25UcmVlLT5HZXRMZW5ndGgoKTsKKworCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjOworCUNKU19SdW50aW1lKiBwUnVudGltZSA9IHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgaUljb25Db3VudHM7IGkrKykKKwl7CisJCWlmICgoKm1fcEljb25UcmVlKVtpXS0+SWNvbk5hbWUgPT0gc3dJY29uTmFtZSkKKwkJeworCQkJSWNvbiogcFJldEljb24gPSAoKm1fcEljb25UcmVlKVtpXS0+SWNvblN0cmVhbTsKKwkJCQkKKwkJCUpTRlhPYmplY3QgIHBPYmogPSBKU19OZXdGeER5bmFtaWNPYmooKnBSdW50aW1lLCBwQ29udGV4dCwgSlNfR2V0T2JqRGVmbklEKCpwUnVudGltZSwgTCJJY29uIikpOworCQkJaWYgKHBPYmouSXNFbXB0eSgpKSByZXR1cm4gRkFMU0U7CisJCQkJCQorCQkJQ0pTX0ljb24gKiBwSlNfSWNvbiA9IChDSlNfSWNvbiAqKUpTX0dldFByaXZhdGUocE9iaik7CisJCQlpZiAoIXBKU19JY29uKSByZXR1cm4gRkFMU0U7CisKKwkJCUljb24qIHBJY29uID0gKEljb24qKXBKU19JY29uLT5HZXRFbWJlZE9iamVjdCgpOworCQkJaWYgKCFwSWNvbilyZXR1cm4gRkFMU0U7CisKKwkJCXBJY29uLT5TZXRJY29uTmFtZShzd0ljb25OYW1lKTsKKwkJCXBJY29uLT5TZXRTdHJlYW0ocFJldEljb24tPkdldFN0cmVhbSgpKTsKKwkJCXZSZXQgPSBwSlNfSWNvbjsKKwkJCXJldHVybiBUUlVFOworCQl9CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIERvY3VtZW50OjpyZW1vdmVJY29uKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCWlmIChwYXJhbXMuc2l6ZSgpICE9IDEpcmV0dXJuIEZBTFNFOworCWlmKCFtX3BJY29uVHJlZSkKKwkJcmV0dXJuIEZBTFNFOworCUNGWF9XaWRlU3RyaW5nIHN3SWNvbk5hbWUgPSBwYXJhbXNbMF0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsKKyNpZm5kZWYgRk9YSVRfQ0hST01FX0JVSUxECisJbV9wSWNvblRyZWUtPkRlbGV0ZUljb25FbGVtZW50KHN3SWNvbk5hbWUpOworI2VuZGlmCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OmNyZWF0ZURhdGFPYmplY3QoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJaWYgKElzU2FmZU1vZGUoY2MpKSByZXR1cm4gVFJVRTsKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlDRlhfV2lkZVN0cmluZyBzd05hbWUgPSBMIiI7CisJQ0ZYX0J5dGVTdHJpbmcgc2JOYW1lID0gIiI7CisJQ0ZYX1dpZGVTdHJpbmcgc3dWYWx1ZSA9IEwiIjsKKwlDRlhfV2lkZVN0cmluZyBzd01JTUVUeXBlID0gTCIiOworCUNGWF9XaWRlU3RyaW5nIHN3Q3J5cHRGaWx0ZXIgPSBMIiI7CisJQ0ZYX0J5dGVTdHJpbmcgc2JGaWxlVmFsdWUgPSAiIjsKKwkKKwlpbnQgaVBhcmFtU2l6ZSA9IHBhcmFtcy5zaXplKCk7CisJZm9yIChpbnQgaSA9IDA7IGkgPCBpUGFyYW1TaXplOyBpKyspCisJeworCQlpZiAoaSA9PSAwKQorCQkJc3dOYW1lID0gcGFyYW1zWzBdOworCQlpZiAoaSA9PSAxKQorCQkJc3dWYWx1ZSA9IHBhcmFtc1sxXTsKKwkJaWYgKGkgPT0gMikKKwkJCXN3TUlNRVR5cGUgPSBwYXJhbXNbMl07CisJCWlmIChpID09IDMpCisJCQlzd0NyeXB0RmlsdGVyID0gcGFyYW1zWzRdOworCX0KKworCUZJTEUqIHBGaWxlID0gTlVMTDsKKworCS8vQ0ZpbGVTdGF0dXMgZmlsZVN0YXR1czsKKwljb25zdCBpbnQgQlVGU0laRSA9IDE3OworCUZYX0JZVEUgYnVmW0JVRlNJWkVdOworCUZYX0JZVEUgKnBCdWZmZXIgPSBOVUxMOworCWNoYXIqIHBCdWYgPSBOVUxMOworCWludCBuRmlsZVNpemUgPSAwOworCXNiRmlsZVZhbHVlID0gQ0ZYX0J5dGVTdHJpbmc6OkZyb21Vbmljb2RlKHN3VmFsdWUpOworCXNiTmFtZSA9IENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShzd05hbWUpOworCWludCBpQnVmTGVuZ3RoID0gc2JGaWxlVmFsdWUuR2V0TGVuZ3RoKCk7CisJcEJ1ZiA9IChjaGFyKiltYWxsb2Moc2l6ZW9mKGNoYXIpICogaUJ1Zkxlbmd0aCk7CisJcEJ1ZiA9IHNiRmlsZVZhbHVlLkdldEJ1ZmZlcihpQnVmTGVuZ3RoKTsKKworCWlmICggTlVMTCA9PSAocEZpbGUgPSBGWFNZU19mb3Blbiggc2JOYW1lLkdldEJ1ZmZlcihzYk5hbWUuR2V0TGVuZ3RoKCkpLCAid2IrIiApKSApCisJeworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJZndyaXRlKCBwQnVmLCBzaXplb2YoY2hhciksIGlCdWZMZW5ndGgsIHBGaWxlICk7CisJZmNsb3NlKCBwRmlsZSApOworCXBGaWxlID0gTlVMTDsKKworCXBGaWxlID0gRlhTWVNfZm9wZW4oIHNiTmFtZS5HZXRCdWZmZXIoc2JOYW1lLkdldExlbmd0aCgpKSwgInJiKyIgKTsKKwlmc2VlayggcEZpbGUsIDAsIFNFRUtfRU5EICk7CisJbkZpbGVTaXplID0gZnRlbGwoIHBGaWxlICk7CisKKwlwQnVmZmVyID0gbmV3IEZYX0JZVEVbbkZpbGVTaXplXTsKKwlmc2VlayggcEZpbGUsIDAsIFNFRUtfU0VUICk7CisJc2l6ZV90IHMgPSBmcmVhZCggcEJ1ZmZlciwgc2l6ZW9mKGNoYXIpLCBuRmlsZVNpemUsIHBGaWxlICk7CisJaWYocyA9PSAwKQorCXsKKwkJZGVsZXRlW10gcEJ1ZmZlcjsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCUNSWVBUX01ENUdlbmVyYXRlKHBCdWZmZXIsIG5GaWxlU2l6ZSwgYnVmKTsKKwlidWZbQlVGU0laRSAtIDFdID0gMDsKKwlDRlhfV2lkZVN0cmluZyBjc0NoZWNrU3VtKChGWF9MUENXU1RSKWJ1ZiwgMTYpOworCWRlbGV0ZVtdIHBCdWZmZXI7CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBEb2N1bWVudDo6bWVkaWEoT0JKX1BST1BfUEFSQU1TKQoreworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIERvY3VtZW50OjpjYWxjdWxhdGVOb3coT0JKX01FVEhPRF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKCEobV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX01PRElGWSkgfHwgCisJCW1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9BTk5PVF9GT1JNKSB8fAorCQltX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fRklMTF9GT1JNKSkpIHJldHVybiBGQUxTRTsKKworCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gKENQREZTREtfSW50ZXJGb3JtKiltX3BEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7CisJQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7CisJcEludGVyRm9ybS0+T25DYWxjdWxhdGUoKTsKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBEb2N1bWVudDo6Q29sbGFiKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBEb2N1bWVudDo6Z2V0UGFnZU50aFdvcmQoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJLy9pZiAoSXNTYWZlTW9kZShjYykpIHJldHVybiBUUlVFOworCisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKCFtX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fRVhUUkFDVF9BQ0NFU1MpKSByZXR1cm4gRkFMU0U7CisKKwlpbnQgblBhZ2VObyA9IHBhcmFtcy5HZXRTaXplKCkgPiAwID8gKGludClwYXJhbXNbMF0gOiAwOworCWludCBuV29yZE5vID0gcGFyYW1zLkdldFNpemUoKSA+IDEgPyAoaW50KXBhcmFtc1sxXSA6IDA7CisJYm9vbCBiU3RyaXAgPSBwYXJhbXMuR2V0U2l6ZSgpID4gMiA/IChib29sKXBhcmFtc1syXSA6IHRydWU7CisKKwlDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQgPSBtX3BEb2N1bWVudC0+R2V0RG9jdW1lbnQoKTsKKwlpZiAoIXBEb2N1bWVudCkgcmV0dXJuIEZBTFNFOworCisJaWYgKG5QYWdlTm8gPCAwIHx8IG5QYWdlTm8gPj0gcERvY3VtZW50LT5HZXRQYWdlQ291bnQoKSkKKwl7CisJCS8vc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQoSURTX1NUUklOR19KU1BBUkFNRVJST1IpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QgPSBwRG9jdW1lbnQtPkdldFBhZ2UoblBhZ2VObyk7CisJaWYgKCFwUGFnZURpY3QpIHJldHVybiBGQUxTRTsKKworCUNQREZfUGFnZSBwYWdlOworCXBhZ2UuTG9hZChwRG9jdW1lbnQsIHBQYWdlRGljdCk7CisJcGFnZS5TdGFydFBhcnNlKCk7CisJcGFnZS5QYXJzZUNvbnRlbnQoKTsKKworCUZYX1BPU0lUSU9OIHBvcyA9IHBhZ2UuR2V0Rmlyc3RPYmplY3RQb3NpdGlvbigpOworCisJaW50IG5Xb3JkcyA9IDA7CisKKwlDRlhfV2lkZVN0cmluZyBzd1JldDsKKworCXdoaWxlIChwb3MpCisJeworCQlpZiAoQ1BERl9QYWdlT2JqZWN0KiBwUGFnZU9iaiA9IHBhZ2UuR2V0TmV4dE9iamVjdChwb3MpKQorCQl7CisJCQlpZiAocFBhZ2VPYmotPm1fVHlwZSA9PSBQREZQQUdFX1RFWFQpCisJCQl7CisJCQkJaW50IG5PYmpXb3JkcyA9IENvdW50V29yZHMoKENQREZfVGV4dE9iamVjdCopcFBhZ2VPYmopOworCisJCQkJaWYgKG5Xb3JkcyArIG5PYmpXb3JkcyA+PSBuV29yZE5vKQorCQkJCXsKKwkJCQkJc3dSZXQgPSBHZXRPYmpXb3JkU3RyKChDUERGX1RleHRPYmplY3QqKXBQYWdlT2JqLCBuV29yZE5vIC0gbldvcmRzKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJbldvcmRzICs9IG5PYmpXb3JkczsKKwkJCX0KKwkJfQorCX0KKworCWlmIChiU3RyaXApCisJeworCQlzd1JldC5UcmltTGVmdCgpOworCQlzd1JldC5UcmltUmlnaHQoKTsKKwl9CisKKwl2UmV0ID0gc3dSZXQ7CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OmdldFBhZ2VOdGhXb3JkUXVhZHMoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJLy9pZiAoSXNTYWZlTW9kZShjYykpIHJldHVybiBUUlVFOworCisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKCFtX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fRVhUUkFDVF9BQ0NFU1MpKSByZXR1cm4gRkFMU0U7CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OmdldFBhZ2VOdW1Xb3JkcyhPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAoIW1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9FWFRSQUNUX0FDQ0VTUykpIHJldHVybiBGQUxTRTsKKworCWludCBuUGFnZU5vID0gcGFyYW1zLkdldFNpemUoKSA+IDAgPyAoaW50KXBhcmFtc1swXSA6IDA7CisKKwlDUERGX0RvY3VtZW50KiBwRG9jdW1lbnQgPSBtX3BEb2N1bWVudC0+R2V0RG9jdW1lbnQoKTsKKwlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKG5QYWdlTm8gPCAwIHx8IG5QYWdlTm8gPj0gcERvY3VtZW50LT5HZXRQYWdlQ291bnQoKSkKKwl7CisJCS8vc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQoSURTX1NUUklOR19KU1BBUkFNRVJST1IpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJQ1BERl9EaWN0aW9uYXJ5KiBwUGFnZURpY3QgPSBwRG9jdW1lbnQtPkdldFBhZ2UoblBhZ2VObyk7CisJaWYgKCFwUGFnZURpY3QpIHJldHVybiBGQUxTRTsKKworCUNQREZfUGFnZSBwYWdlOworCXBhZ2UuTG9hZChwRG9jdW1lbnQsIHBQYWdlRGljdCk7CisJcGFnZS5TdGFydFBhcnNlKCk7CisJcGFnZS5QYXJzZUNvbnRlbnQoKTsKKworCUZYX1BPU0lUSU9OIHBvcyA9IHBhZ2UuR2V0Rmlyc3RPYmplY3RQb3NpdGlvbigpOworCisJaW50IG5Xb3JkcyA9IDA7CisKKwl3aGlsZSAocG9zKQorCXsKKwkJaWYgKENQREZfUGFnZU9iamVjdCogcFBhZ2VPYmogPSBwYWdlLkdldE5leHRPYmplY3QocG9zKSkKKwkJeworCQkJaWYgKHBQYWdlT2JqLT5tX1R5cGUgPT0gUERGUEFHRV9URVhUKQorCQkJeworCQkJCUNQREZfVGV4dE9iamVjdCogcFRleHRPYmogPSAoQ1BERl9UZXh0T2JqZWN0KilwUGFnZU9iajsKKwkJCQluV29yZHMgKz0gQ291bnRXb3JkcyhwVGV4dE9iaik7CisJCQl9CisJCX0KKwl9CisKKwl2UmV0ID0gbldvcmRzOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OmdldFByaW50UGFyYW1zKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7CisJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCUNKU19SdW50aW1lKiBwUnVudGltZSA9IHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKTsKKwlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7CisJSlNGWE9iamVjdCBwUmV0T2JqID0gSlNfTmV3RnhEeW5hbWljT2JqKCpwUnVudGltZSwgcENvbnRleHQsIEpTX0dldE9iakRlZm5JRCgqcFJ1bnRpbWUsIEwiUHJpbnRQYXJhbXNPYmoiKSk7CisJLy9ub3QgaW1wbGVtZW50ZWQgeWV0LgorCXZSZXQgPSBwUmV0T2JqOworCisJcmV0dXJuIFRSVUU7Cit9CisKKyNkZWZpbmUgSVNMQVRJTldPUkQodSkJKHUgIT0gMHgyMCAmJiB1IDw9IDB4MjhGRikKKworaW50CURvY3VtZW50OjpDb3VudFdvcmRzKENQREZfVGV4dE9iamVjdCogcFRleHRPYmopCit7CisJaWYgKCFwVGV4dE9iaikgcmV0dXJuIDA7CisKKwlpbnQgbldvcmRzID0gMDsKKworCUNQREZfRm9udCogcEZvbnQgPSBwVGV4dE9iai0+R2V0Rm9udCgpOworCWlmICghcEZvbnQpIHJldHVybiAwOworCisJRlhfQk9PTCBiSXNMYXRpbiA9IEZBTFNFOworCisJZm9yIChpbnQgaT0wLCBzej1wVGV4dE9iai0+Q291bnRDaGFycygpOyBpPHN6OyBpKyspCisJeworCQlGWF9EV09SRCBjaGFyY29kZSA9IC0xOworCQlGWF9GTE9BVCBrZXJuaW5nOworCisJCXBUZXh0T2JqLT5HZXRDaGFySW5mbyhpLCBjaGFyY29kZSwga2VybmluZyk7CisJCUNGWF9XaWRlU3RyaW5nIHN3VW5pY29kZSA9IHBGb250LT5Vbmljb2RlRnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsKKworCQlGWF9XT1JEIHVuaWNvZGUgPSAwOworCQlpZiAoc3dVbmljb2RlLkdldExlbmd0aCgpID4gMCkKKwkJCXVuaWNvZGUgPSBzd1VuaWNvZGVbMF07CisKKwkJaWYgKElTTEFUSU5XT1JEKHVuaWNvZGUpICYmIGJJc0xhdGluKQorCQkJY29udGludWU7CisJCQorCQliSXNMYXRpbiA9IElTTEFUSU5XT1JEKHVuaWNvZGUpOworCQlpZiAodW5pY29kZSAhPSAweDIwKQorCQkJbldvcmRzKys7CisJfQorCisJcmV0dXJuIG5Xb3JkczsKK30KKworQ0ZYX1dpZGVTdHJpbmcgRG9jdW1lbnQ6OkdldE9ialdvcmRTdHIoQ1BERl9UZXh0T2JqZWN0KiBwVGV4dE9iaiwgaW50IG5Xb3JkSW5kZXgpCit7CisJQVNTRVJUKHBUZXh0T2JqICE9IE5VTEwpOworCisJQ0ZYX1dpZGVTdHJpbmcgc3dSZXQ7CisKKwlDUERGX0ZvbnQqIHBGb250ID0gcFRleHRPYmotPkdldEZvbnQoKTsKKwlpZiAoIXBGb250KSByZXR1cm4gTCIiOworCisJaW50IG5Xb3JkcyA9IDA7CisJRlhfQk9PTCBiSXNMYXRpbiA9IEZBTFNFOworCisJZm9yIChpbnQgaT0wLCBzej1wVGV4dE9iai0+Q291bnRDaGFycygpOyBpPHN6OyBpKyspCisJeworCQlGWF9EV09SRCBjaGFyY29kZSA9IC0xOworCQlGWF9GTE9BVCBrZXJuaW5nOworCisJCXBUZXh0T2JqLT5HZXRDaGFySW5mbyhpLCBjaGFyY29kZSwga2VybmluZyk7CisJCUNGWF9XaWRlU3RyaW5nIHN3VW5pY29kZSA9IHBGb250LT5Vbmljb2RlRnJvbUNoYXJDb2RlKGNoYXJjb2RlKTsKKworCQlGWF9XT1JEIHVuaWNvZGUgPSAwOworCQlpZiAoc3dVbmljb2RlLkdldExlbmd0aCgpID4gMCkKKwkJCXVuaWNvZGUgPSBzd1VuaWNvZGVbMF07CisKKwkJaWYgKElTTEFUSU5XT1JEKHVuaWNvZGUpICYmIGJJc0xhdGluKQorCQl7CisJCX0KKwkJZWxzZQorCQl7CQkKKwkJCWJJc0xhdGluID0gSVNMQVRJTldPUkQodW5pY29kZSk7CisJCQlpZiAodW5pY29kZSAhPSAweDIwKQorCQkJCW5Xb3JkcysrOwkKKwkJfQorCisJCWlmIChuV29yZHMtMSA9PSBuV29yZEluZGV4KQorCQkJc3dSZXQgKz0gdW5pY29kZTsKKwl9CisKKwlyZXR1cm4gc3dSZXQ7Cit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6Onpvb20oT0JKX1BST1BfUEFSQU1TKQoreworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qKgorKG5vbmUsCU5vVmFyeSkKKyhmaXRQLAlGaXRQYWdlKQorKGZpdFcsCUZpdFdpZHRoKQorKGZpdEgsCUZpdEhlaWdodCkKKyhmaXRWLAlGaXRWaXNpYmxlV2lkdGgpCisocHJlZiwJUHJlZmVycmVkKQorKHJlZlcsCVJlZmxvd1dpZHRoKQorKi8KKworRlhfQk9PTCBEb2N1bWVudDo6em9vbVR5cGUoT0JKX1BST1BfUEFSQU1TKQoreworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIERvY3VtZW50OjpkZWxldGVQYWdlcyhPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwkKKworCQorCQorCisKKwl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IEdldElzb2xhdGUoY2MpOworLy8gCWlmIChwRW52LT5HZXRBcHBOYW1lKCkuQ29tcGFyZShQSEFOVE9NKSAhPSAwKQorLy8gCQlyZXR1cm4gVFJVRTsKKworCS8vaWYgKElzU2FmZU1vZGUoY2MpKSByZXR1cm4gVFJVRTsKKworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCWlmICghKG1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9NT0RJRlkpIHx8IAorCQltX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fQVNTRU1CTEUpKSkgcmV0dXJuIEZBTFNFOworCisJaW50IGlTaXplID0gcGFyYW1zLnNpemUoKTsKKwkKKwlpbnQgblN0YXJ0ID0gMDsKKwlpbnQgbkVuZCA9IDA7CisJCisJaWYgKGlTaXplIDwgMSkKKwl7CisJfQorCWVsc2UgaWYgKGlTaXplID09IDEpCisJeworCQlpZiAocGFyYW1zWzBdLkdldFR5cGUoKSA9PSBWVF9vYmplY3QpCisJCXsKKwkJCUpTT2JqZWN0ICBwT2JqID0gKEpTT2JqZWN0IClwYXJhbXNbMF07CisJCQl2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwiblN0YXJ0Iik7CisJCQkJblN0YXJ0ID0gKGludClDSlNfVmFsdWUobV9pc29sYXRlLHBWYWx1ZSxHRVRfVkFMVUVfVFlQRShwVmFsdWUpKTsKKworCQkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwibkVuZCIpOworCQkJCW5FbmQgPSAoaW50KUNKU19WYWx1ZShtX2lzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpOworCQl9CisJCWVsc2UKKwkJeworCQkJblN0YXJ0ID0gKGludClwYXJhbXNbMF07CisJCX0KKwl9CisJZWxzZQorCXsKKwkJblN0YXJ0ID0gKGludClwYXJhbXNbMF07CisJCW5FbmQgPSAoaW50KXBhcmFtc1sxXTsKKwl9CisKKwlpbnQgblRvdGFsID0gbV9wRG9jdW1lbnQtPkdldFBhZ2VDb3VudCgpOworCisJaWYgKG5TdGFydCA8IDApCW5TdGFydCA9IDA7CisJaWYgKG5TdGFydCA+PSBuVG90YWwpIG5TdGFydCA9IG5Ub3RhbCAtIDE7CisKKwlpZiAobkVuZCA8IDApIG5FbmQgPSAwOworCWlmIChuRW5kID49IG5Ub3RhbCkgbkVuZCA9IG5Ub3RhbCAtIDE7CisKKwlpZiAobkVuZCA8IG5TdGFydCkgbkVuZCA9IG5TdGFydDsKKworCQorCisjaWZuZGVmIEZPWElUX0NIUk9NRV9CVUlMRAorCXJldHVybiBtX3BEb2N1bWVudC0+RGVsZXRlUGFnZXMoblN0YXJ0LCBuRW5kIC0gblN0YXJ0ICsgMSk7CisjZWxzZQorCXJldHVybiBUUlVFOworI2VuZGlmCit9CisKK0ZYX0JPT0wgRG9jdW1lbnQ6OmV4dHJhY3RQYWdlcyhPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwkKKworCQorCQorCQorCisJdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBHZXRJc29sYXRlKGNjKTsKKworCWlmIChJc1NhZmVNb2RlKGNjKSkgcmV0dXJuIFRSVUU7CisKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAoIW1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9FWFRSQUNUKSkgcmV0dXJuIEZBTFNFOworCisJaW50IGlTaXplID0gcGFyYW1zLnNpemUoKTsKKwkKKwlpbnQgblRvdGFsID0gbV9wRG9jdW1lbnQtPkdldFBhZ2VDb3VudCgpOworCWludCBuU3RhcnQgPSAwOworCWludCBuRW5kID0gblRvdGFsIC0gMTsKKworCUNGWF9XaWRlU3RyaW5nIHN3RmlsZVBhdGg7CisJCisJaWYgKGlTaXplIDwgMSkKKwl7CisJfQorCWVsc2UgaWYgKGlTaXplID09IDEpCisJeworCQlpZiAocGFyYW1zWzBdLkdldFR5cGUoKSA9PSBWVF9vYmplY3QpCisJCXsKKwkJCUpTT2JqZWN0ICBwT2JqID0gKEpTT2JqZWN0IClwYXJhbXNbMF07CisJCQl2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwiblN0YXJ0Iik7CisJCQkJblN0YXJ0ID0gKGludClDSlNfVmFsdWUobV9pc29sYXRlLHBWYWx1ZSxHRVRfVkFMVUVfVFlQRShwVmFsdWUpKTsKKworCQkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwibkVuZCIpOworCQkJCW5FbmQgPSAoaW50KUNKU19WYWx1ZShtX2lzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpOworCisJCQlwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaiwgTCJjUGF0aCIpOworCQkJCXN3RmlsZVBhdGggPSBDSlNfVmFsdWUobV9pc29sYXRlLHBWYWx1ZSxHRVRfVkFMVUVfVFlQRShwVmFsdWUpKS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOworCQl9CisJCWVsc2UKKwkJeworCQkJblN0YXJ0ID0gKGludClwYXJhbXNbMF07CisJCX0KKwl9CisJZWxzZSBpZiAoaVNpemUgPT0gMikKKwl7CisJCW5TdGFydCA9IChpbnQpcGFyYW1zWzBdOworCQluRW5kID0gKGludClwYXJhbXNbMV07CisJfQorCWVsc2UKKwl7CisJCW5TdGFydCA9IChpbnQpcGFyYW1zWzBdOworCQluRW5kID0gKGludClwYXJhbXNbMV07CisJCXN3RmlsZVBhdGggPSBwYXJhbXNbMl0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsKKwl9CisKKwlpZiAobkVuZCA8IG5TdGFydCkKKwkJbkVuZCA9IG5TdGFydDsKKworCUNQREZfRG9jdW1lbnQgKnBOZXdEb2MgPSBuZXcgQ1BERl9Eb2N1bWVudDsKKwlwTmV3RG9jLT5DcmVhdGVOZXdEb2MoKTsJCisKKwlDRlhfV29yZEFycmF5IGFycmF5OworCWZvciAoaW50IGk9blN0YXJ0OyBpPD1uRW5kOyBpKyspCisJCWFycmF5LkFkZChpKTsKKworLy8JbV9wRG9jdW1lbnQtPkV4dHJhY3RQYWdlcyhhcnJheSwgcE5ld0RvYyk7CisKKwlpZiAoc3dGaWxlUGF0aC5Jc0VtcHR5KCkpCisJeworCisJfQorCWVsc2UKKwl7CisJCXN3RmlsZVBhdGggPSBhcHA6OlBERlBhdGhUb1N5c1BhdGgoc3dGaWxlUGF0aCk7CisJCUNQREZfQ3JlYXRvciBQREZDcmVhdGVyKHBOZXdEb2MpOworCQlQREZDcmVhdGVyLkNyZWF0ZShzd0ZpbGVQYXRoKTsKKwkJZGVsZXRlIHBOZXdEb2M7CisvLwkJcEVudi0+T3BlbkRvY3VtZW50KHN3RmlsZVBhdGgpOworCQl2UmV0LlNldE51bGwoKTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBEb2N1bWVudDo6aW5zZXJ0UGFnZXMoT0JKX01FVEhPRF9QQVJBTVMpCit7CisKKworCQorCisKKworCXY4OjpJc29sYXRlKiBpc29sYXRlID0gR2V0SXNvbGF0ZShjYyk7CisKKwlpZiAoSXNTYWZlTW9kZShjYykpIHJldHVybiBUUlVFOworCisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKCEobV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX01PRElGWSkgfHwgCisJCW1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9BU1NFTUJMRSkpKSByZXR1cm4gRkFMU0U7CisKKwlpbnQgaVNpemUgPSBwYXJhbXMuc2l6ZSgpOworCQorCWludCBuU3RhcnQgPSAwOworCWludCBuRW5kID0gMDsKKwlpbnQgblBhZ2UgPSAwOworCisJQ0ZYX1dpZGVTdHJpbmcgc3dGaWxlUGF0aDsKKwkKKwlpZiAoaVNpemUgPCAxKQorCXsKKwl9CisJZWxzZSBpZiAoaVNpemUgPT0gMSkKKwl7CisJCWlmIChwYXJhbXNbMF0uR2V0VHlwZSgpID09IFZUX29iamVjdCkKKwkJeworCQkJSlNPYmplY3QgIHBPYmogPSAoSlNPYmplY3QgKXBhcmFtc1swXTsKKworCQkJdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLCBMIm5QYWdlIik7CisJCQkJblBhZ2UgPSAoaW50KUNKU19WYWx1ZShtX2lzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpOworCisJCQlwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaiwgTCJjUGF0aCIpOworCQkJCXN3RmlsZVBhdGggPSBDSlNfVmFsdWUobV9pc29sYXRlLHBWYWx1ZSxHRVRfVkFMVUVfVFlQRShwVmFsdWUpKS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOworCisJCQlwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaiwgTCJuU3RhcnQiKTsKKwkJCQluU3RhcnQgPSAoaW50KUNKU19WYWx1ZShtX2lzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpOworCisJCQlwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaiwgTCJuRW5kIik7CisJCQkJbkVuZCA9IChpbnQpQ0pTX1ZhbHVlKG1faXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQluUGFnZSA9IChpbnQpcGFyYW1zWzBdOworCQl9CisJfQorCWVsc2UgCisJeworCQluUGFnZSA9IChpbnQpcGFyYW1zWzBdOworCisJCWlmIChpU2l6ZSA+PSAyKQorCQkJc3dGaWxlUGF0aCA9IHBhcmFtc1sxXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOworCisJCWlmIChpU2l6ZSA+PSAzKQorCQkJblN0YXJ0ID0gKGludClwYXJhbXNbMl07CisKKwkJaWYgKGlTaXplID49IDQpCisJCQluRW5kID0gKGludClwYXJhbXNbM107CisJfQorCisJblBhZ2UrKzsKKworCWlmIChuUGFnZSA8IDApCisJCW5QYWdlID0gMDsKKworCWlmIChuUGFnZSA+IG1fcERvY3VtZW50LT5HZXRQYWdlQ291bnQoKSkKKwkJblBhZ2UgPSBtX3BEb2N1bWVudC0+R2V0UGFnZUNvdW50KCk7CisKKwlpZiAoc3dGaWxlUGF0aC5Jc0VtcHR5KCkpIHJldHVybiBGQUxTRTsKKworCXN3RmlsZVBhdGggPSBhcHA6OlBERlBhdGhUb1N5c1BhdGgoc3dGaWxlUGF0aCk7CisKKwlDUERGX1BhcnNlciBwZGZQYXJzZXI7CisJcGRmUGFyc2VyLlN0YXJ0UGFyc2Uoc3dGaWxlUGF0aCwgRkFMU0UpOworCUNQREZfRG9jdW1lbnQqIHBTcmNEb2MgPSBwZGZQYXJzZXIuR2V0RG9jdW1lbnQoKTsKKworCWlmICghcFNyY0RvYykgCisJeworCQlwZGZQYXJzZXIuQ2xvc2VQYXJzZXIoKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCWludCBuVG90YWwgPSBwU3JjRG9jLT5HZXRQYWdlQ291bnQoKTsKKworCWlmIChuU3RhcnQgPCAwKQluU3RhcnQgPSAwOworCWlmIChuU3RhcnQgPj0gblRvdGFsKSBuU3RhcnQgPSBuVG90YWwgLSAxOworCisJaWYgKG5FbmQgPCAwKSBuRW5kID0gMDsKKwlpZiAobkVuZCA+PSBuVG90YWwpIG5FbmQgPSBuVG90YWwgLSAxOworCisJaWYgKG5FbmQgPCBuU3RhcnQpIG5FbmQgPSBuU3RhcnQ7CisKKwlDRlhfV29yZEFycmF5IGFycmF5OworCWZvciAoaW50IGk9blN0YXJ0OyBpPD1uRW5kOyBpKyspCisJCWFycmF5LkFkZChpKTsKKworLy8JbV9wRG9jdW1lbnQtPkluc2VydFBhZ2VzKG5QYWdlLCBwU3JjRG9jLCBhcnJheSk7CisKKwlwZGZQYXJzZXIuQ2xvc2VQYXJzZXIoKTsKKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIERvY3VtZW50OjpyZXBsYWNlUGFnZXMoT0JKX01FVEhPRF9QQVJBTVMpCit7CisKKworCQorCisKKworCXY4OjpJc29sYXRlKiBpc29sYXRlID0gR2V0SXNvbGF0ZShjYyk7CisKKwlpZiAoSXNTYWZlTW9kZShjYykpIHJldHVybiBUUlVFOworCisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKCEobV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX01PRElGWSkgfHwgCisJCW1fcERvY3VtZW50LT5HZXRQZXJtaXNzaW9ucyhGUERGUEVSTV9BU1NFTUJMRSkpKSByZXR1cm4gRkFMU0U7CisKKwlpbnQgaVNpemUgPSBwYXJhbXMuc2l6ZSgpOworCQorCWludCBuU3RhcnQgPSAtMTsKKwlpbnQgbkVuZCA9IC0xOworCWludCBuUGFnZSA9IDA7CisKKwlDRlhfV2lkZVN0cmluZyBzd0ZpbGVQYXRoOworCQorCWlmIChpU2l6ZSA8IDEpCisJeworCX0KKwllbHNlIGlmIChpU2l6ZSA9PSAxKQorCXsKKwkJaWYgKHBhcmFtc1swXS5HZXRUeXBlKCkgPT0gVlRfb2JqZWN0KQorCQl7CisJCQlKU09iamVjdCAgcE9iaiA9IChKU09iamVjdCApcGFyYW1zWzBdOworCisJCQl2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwiblBhZ2UiKTsKKwkJCQluUGFnZSA9IChpbnQpQ0pTX1ZhbHVlKG1faXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSk7CisKKwkJCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLCBMImNQYXRoIik7CisJCQkJc3dGaWxlUGF0aCA9IENKU19WYWx1ZShtX2lzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7CisKKwkJCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLCBMIm5TdGFydCIpOworCQkJCW5TdGFydCA9IChpbnQpQ0pTX1ZhbHVlKG1faXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSk7CisKKwkJCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLCBMIm5FbmQiKTsKKwkJCQluRW5kID0gKGludClDSlNfVmFsdWUobV9pc29sYXRlLHBWYWx1ZSxHRVRfVkFMVUVfVFlQRShwVmFsdWUpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCW5QYWdlID0gKGludClwYXJhbXNbMF07CisJCX0KKwl9CisJZWxzZSAKKwl7CisJCW5QYWdlID0gKGludClwYXJhbXNbMF07CisKKwkJaWYgKGlTaXplID49IDIpCisJCQlzd0ZpbGVQYXRoID0gcGFyYW1zWzFdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7CisKKwkJaWYgKGlTaXplID49IDMpCisJCQluU3RhcnQgPSAoaW50KXBhcmFtc1syXTsKKworCQlpZiAoaVNpemUgPj0gNCkKKwkJCW5FbmQgPSAoaW50KXBhcmFtc1szXTsKKwl9CisKKwlpZiAoblBhZ2UgPCAwKQorCQluUGFnZSA9IDA7CisKKwlpZiAoblBhZ2UgPj0gbV9wRG9jdW1lbnQtPkdldFBhZ2VDb3VudCgpKQorCQluUGFnZSA9IG1fcERvY3VtZW50LT5HZXRQYWdlQ291bnQoKSAtIDE7CisKKwlpZiAoc3dGaWxlUGF0aC5Jc0VtcHR5KCkpIHJldHVybiBGQUxTRTsKKworCXN3RmlsZVBhdGggPSBhcHA6OlBERlBhdGhUb1N5c1BhdGgoc3dGaWxlUGF0aCk7CisKKwlDUERGX1BhcnNlciBwZGZQYXJzZXI7CisJcGRmUGFyc2VyLlN0YXJ0UGFyc2Uoc3dGaWxlUGF0aCwgRkFMU0UpOworCUNQREZfRG9jdW1lbnQqIHBTcmNEb2MgPSBwZGZQYXJzZXIuR2V0RG9jdW1lbnQoKTsKKworCWlmICghcFNyY0RvYykgCisJeworCQlwZGZQYXJzZXIuQ2xvc2VQYXJzZXIoKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCWludCBuVG90YWwgPSBwU3JjRG9jLT5HZXRQYWdlQ291bnQoKTsKKworCWlmIChuU3RhcnQgPCAwKQorCXsKKwkJaWYgKG5FbmQgPCAwKQorCQl7CisJCQluU3RhcnQgPSAwOworCQkJbkVuZCA9IG5Ub3RhbCAtIDE7CisJCX0KKwkJZWxzZQorCQl7CisJCQluU3RhcnQgPSAwOworCQl9CisJfQorCWVsc2UKKwl7CisJCWlmIChuRW5kIDwgMCkKKwkJeworCQkJbkVuZCA9IG5TdGFydDsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmIChuU3RhcnQgPj0gblRvdGFsKSBuU3RhcnQgPSBuVG90YWwgLSAxOworCQkJaWYgKG5FbmQgPj0gblRvdGFsKSBuRW5kID0gblRvdGFsIC0gMTsKKworCQkJaWYgKG5FbmQgPCBuU3RhcnQpIG5FbmQgPSBuU3RhcnQ7CisJCX0KKwl9CisKKwlDRlhfV29yZEFycmF5IGFycmF5OworCWZvciAoaW50IGk9blN0YXJ0OyBpPD1uRW5kOyBpKyspCisJCWFycmF5LkFkZChpKTsKKworLy8JbV9wRG9jdW1lbnQtPlJlcGxhY2VQYWdlcyhuUGFnZSwgcFNyY0RvYywgYXJyYXkpOworCisJcGRmUGFyc2VyLkNsb3NlUGFyc2VyKCk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBEb2N1bWVudDo6Z2V0VVJMKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCWlmIChJc1NhZmVNb2RlKGNjKSkgcmV0dXJuIFRSVUU7CisKKwlyZXR1cm4gVFJVRTsKK30KKwordm9pZCBEb2N1bWVudDo6QWRkRGVsYXlEYXRhKENKU19EZWxheURhdGEqIHBEYXRhKQoreworCW1fRGVsYXlEYXRhLkFkZChwRGF0YSk7Cit9CisKK3ZvaWQgRG9jdW1lbnQ6OkRvRmllbGREZWxheShjb25zdCBDRlhfV2lkZVN0cmluZyYgc0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgpCit7CisJQ0ZYX0RXb3JkQXJyYXkgRGVsQXJyYXk7CisKKwlmb3IgKGludCBpPTAsc3o9bV9EZWxheURhdGEuR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJeworCQlpZiAoQ0pTX0RlbGF5RGF0YSogcERhdGEgPSBtX0RlbGF5RGF0YS5HZXRBdChpKSkKKwkJeworCQkJaWYgKHBEYXRhLT5zRmllbGROYW1lID09IHNGaWVsZE5hbWUgJiYgcERhdGEtPm5Db250cm9sSW5kZXggPT0gbkNvbnRyb2xJbmRleCkKKwkJCXsKKwkJCQlGaWVsZDo6RG9EZWxheShtX3BEb2N1bWVudCwgcERhdGEpOworCQkJCWRlbGV0ZSBwRGF0YTsKKwkJCQltX0RlbGF5RGF0YS5TZXRBdChpLCBOVUxMKTsKKwkJCQlEZWxBcnJheS5BZGQoaSk7CisJCQl9CisJCX0KKwl9CisKKwlmb3IgKGludCBqPURlbEFycmF5LkdldFNpemUoKS0xOyBqPj0wOyBqLS0pCisJeworCQltX0RlbGF5RGF0YS5SZW1vdmVBdChEZWxBcnJheVtqXSk7CisJfQorfQorCit2b2lkIERvY3VtZW50OjpBZGREZWxheUFubm90RGF0YShDSlNfQW5ub3RPYmogKnBEYXRhKQoreworCW1fRGVsYXlBbm5vdERhdGEuQWRkKHBEYXRhKTsKK30KKwordm9pZCBEb2N1bWVudDo6RG9Bbm5vdERlbGF5KCkKK3sKKwlDRlhfRFdvcmRBcnJheSBEZWxBcnJheTsKKwkKKwlmb3IgKGludCBqPURlbEFycmF5LkdldFNpemUoKS0xOyBqPj0wOyBqLS0pCisJeworCQltX0RlbGF5RGF0YS5SZW1vdmVBdChEZWxBcnJheVtqXSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9GaWVsZC5jcHAgYi9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L0ZpZWxkLmNwcAppbmRleCA0NGE3NDRmLi5mNWY5YmYwIDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L0ZpZWxkLmNwcAorKysgYi9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L0ZpZWxkLmNwcApAQCAtMSw0MTI4ICsxLDQxMjggQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSmF2YVNjcmlwdC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSUphdmFTY3JpcHQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0RlZmluZS5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfT2JqZWN0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19WYWx1ZS5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvRmllbGQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0V2ZW50SGFuZGxlci5oIg0KLS8vI2luY2x1ZGUgIi4uL2luY2x1ZGUvSlNfUmVzTWdyLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19Db250ZXh0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19SdW50aW1lLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9Eb2N1bWVudC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvY29sb3IuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L1B1YmxpY01ldGhvZHMuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0ljb24uaCINCi0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZpZWxkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1CRUdJTl9KU19TVEFUSUNfQ09OU1QoQ0pTX0ZpZWxkKQ0KLUVORF9KU19TVEFUSUNfQ09OU1QoKQ0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19QUk9QKENKU19GaWVsZCkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkoYWxpZ25tZW50KQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShib3JkZXJTdHlsZSkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkoYnV0dG9uQWxpZ25YKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShidXR0b25BbGlnblkpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGJ1dHRvbkZpdEJvdW5kcykNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkoYnV0dG9uUG9zaXRpb24pDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGJ1dHRvblNjYWxlSG93KQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShidXR0b25TY2FsZVdoZW4pDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGNhbGNPcmRlckluZGV4KQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShjaGFyTGltaXQpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGNvbWIpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGNvbW1pdE9uU2VsQ2hhbmdlKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShjdXJyZW50VmFsdWVJbmRpY2VzKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShkZWZhdWx0U3R5bGUpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGRlZmF1bHRWYWx1ZSkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkoZG9Ob3RTY3JvbGwpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGRvTm90U3BlbGxDaGVjaykNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkoZGVsYXkpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGRpc3BsYXkpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGRvYykNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkoZWRpdGFibGUpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGV4cG9ydFZhbHVlcykNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkoaGlkZGVuKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShmaWxlU2VsZWN0KQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShmaWxsQ29sb3IpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGxpbmVXaWR0aCkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkoaGlnaGxpZ2h0KQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShtdWx0aWxpbmUpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKG11bHRpcGxlU2VsZWN0aW9uKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShuYW1lKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShudW1JdGVtcykNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkocGFnZSkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkocGFzc3dvcmQpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHByaW50KQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShyYWRpb3NJblVuaXNvbikNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkocmVhZG9ubHkpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHJlY3QpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHJlcXVpcmVkKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShyaWNoVGV4dCkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkocmljaFZhbHVlKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShyb3RhdGlvbikNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkoc3Ryb2tlQ29sb3IpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHN0eWxlKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShzdWJtaXROYW1lKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWSh0ZXh0Q29sb3IpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHRleHRGb250KQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWSh0ZXh0U2l6ZSkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkodHlwZSkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkodXNlck5hbWUpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHZhbHVlKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWSh2YWx1ZUFzU3RyaW5nKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShzb3VyY2UpDQotRU5EX0pTX1NUQVRJQ19QUk9QKCkNCi0NCi1CRUdJTl9KU19TVEFUSUNfTUVUSE9EKENKU19GaWVsZCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShicm93c2VGb3JGaWxlVG9TdWJtaXQsICAgICAgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShidXR0b25HZXRDYXB0aW9uLCAgICAgICAgICAgMSkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShidXR0b25HZXRJY29uLCAgICAgICAgICAgICAgMSkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShidXR0b25JbXBvcnRJY29uLCAgICAgICAgICAgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShidXR0b25TZXRDYXB0aW9uLCAgICAgICAgICAgMikNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShidXR0b25TZXRJY29uLCAgICAgICAgICAgICAgMikNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShjaGVja1RoaXNCb3gsICAgICAgICAgICAgICAgMikNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShjbGVhckl0ZW1zLCAgICAgICAgICAgICAgICAgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShkZWZhdWx0SXNDaGVja2VkLCAgICAgICAgICAgMikNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShkZWxldGVJdGVtQXQsICAgICAgICAgICAgICAgMSkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShnZXRBcnJheSAsICAgICAgICAgICAgICAgICAgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShnZXRJdGVtQXQsICAgICAgICAgICAgICAgICAgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShnZXRMb2NrLCAgICAgICAgICAgICAgICAgICAgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShpbnNlcnRJdGVtQXQsICAgICAgICAgICAgICAgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShpc0JveENoZWNrZWQsICAgICAgICAgICAgICAgMSkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShpc0RlZmF1bHRDaGVja2VkLCAgICAgICAgICAgMSkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShzZXRBY3Rpb24sICAgICAgICAgICAgICAgICAgMikNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShzZXRGb2N1cywgICAgICAgICAgICAgICAgICAgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShzZXRJdGVtcywgICAgICAgICAgICAgICAgICAgMSkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShzZXRMb2NrLCAgICAgICAgICAgICAgICAgICAgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShzaWduYXR1cmVHZXRNb2RpZmljYXRpb25zLCAgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShzaWduYXR1cmVHZXRTZWVkVmFsdWUsICAgICAgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShzaWduYXR1cmVJbmZvLCAgICAgICAgICAgICAgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShzaWduYXR1cmVTZXRTZWVkVmFsdWUsICAgICAgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShzaWduYXR1cmVTaWduLCAgICAgICAgICAgICAgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShzaWduYXR1cmVWYWxpZGF0ZSwgICAgICAgICAgMCkNCi1FTkRfSlNfU1RBVElDX01FVEhPRCgpDQotDQotSU1QTEVNRU5UX0pTX0NMQVNTKENKU19GaWVsZCwgRmllbGQpDQotDQotRlhfQk9PTAlDSlNfRmllbGQ6OkluaXRJbnN0YW5jZShJRlhKU19Db250ZXh0KiBjYykNCi17DQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0NCi0JRmllbGQqIHBGaWVsZCA9IChGaWVsZCopR2V0RW1iZWRPYmplY3QoKTsNCi0JQVNTRVJUKHBGaWVsZCAhPSBOVUxMKTsNCi0NCi0JcEZpZWxkLT5TZXRJc29sYXRlKHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKS0+R2V0SXNvbGF0ZSgpKTsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfTsNCi0NCi1GaWVsZDo6RmllbGQoQ0pTX09iamVjdCogcEpTT2JqZWN0KTogQ0pTX0VtYmVkT2JqKHBKU09iamVjdCksDQotCW1fcEpTRG9jKE5VTEwpLA0KLQltX3BEb2N1bWVudChOVUxMKSwNCi0JbV9uRm9ybUNvbnRyb2xJbmRleCgtMSksDQotCW1fYkNhblNldChGQUxTRSksDQotCW1fYkRlbGF5KEZBTFNFKSwNCi0JbV9pc29sYXRlKE5VTEwpDQotew0KLX0NCi0NCi1GaWVsZDo6fkZpZWxkKCkNCi17DQotfQ0KLQ0KLS8vbm90ZTogaUNvbnRyb2xObyA9IC0xLCBtZWFucyBub3QgYSB3aWRnZXQuDQotdm9pZCBGaWVsZDo6UGFyc2VGaWVsZE5hbWUoY29uc3Qgc3RkOjp3c3RyaW5nICZzdHJGaWVsZE5hbWVQYXJzZWQsc3RkOjp3c3RyaW5nICZzdHJGaWVsZE5hbWUsaW50ICYgaUNvbnRyb2xObykNCi17DQotCWludCBpU3RhcnQgPSBzdHJGaWVsZE5hbWVQYXJzZWQuZmluZF9sYXN0X29mKEwnLicpOw0KLQlpZiAoaVN0YXJ0ID09IC0xKQ0KLQl7DQotCQlzdHJGaWVsZE5hbWUgPSBzdHJGaWVsZE5hbWVQYXJzZWQ7DQotCQlpQ29udHJvbE5vID0gLTE7DQotCQlyZXR1cm47DQotCX0NCi0Jc3RkOjp3c3RyaW5nIHN1ZmZpeGFsID0gc3RyRmllbGROYW1lUGFyc2VkLnN1YnN0cihpU3RhcnQrMSk7DQotCWlDb250cm9sTm8gPSBGWFNZU193dG9pKChGWF9MUENXU1RSKXN1ZmZpeGFsLmNfc3RyKCkpOw0KLQlpZiAoaUNvbnRyb2xObyA9PSAwKQ0KLQl7DQotCQlpbnQgaVN0YXJ0Ow0KLQkJd2hpbGUoKGlTdGFydCA9IHN1ZmZpeGFsLmZpbmRfbGFzdF9vZihMIiAiKSkgIT0gLTEpDQotCQl7DQotCQkJc3VmZml4YWwuZXJhc2UoaVN0YXJ0LDEpOw0KLQkJfQ0KLQ0KLQkJaWYgKHN1ZmZpeGFsLmNvbXBhcmUoTCIwIikgIT0gMCkNCi0JCXsNCi0JCQlzdHJGaWVsZE5hbWUgPSBzdHJGaWVsZE5hbWVQYXJzZWQ7DQotCQkJaUNvbnRyb2xObyA9IC0xOw0KLQkJCXJldHVybjsNCi0JCX0NCi0NCi0JfQ0KLQlzdHJGaWVsZE5hbWUgPSBzdHJGaWVsZE5hbWVQYXJzZWQuc3Vic3RyKDAsaVN0YXJ0KTsgICAgDQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OkF0dGFjaEZpZWxkKERvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBjc0ZpZWxkTmFtZSkNCi17DQotCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7DQotCW1fcEpTRG9jID0gcERvY3VtZW50Ow0KLQ0KLQltX3BEb2N1bWVudCA9IHBEb2N1bWVudC0+R2V0UmVhZGVyRG9jKCk7DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JbV9iQ2FuU2V0ID0gbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX0ZJTExfRk9STSkgfHwgDQotCQltX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fQU5OT1RfRk9STSkgfHwgDQotCQltX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fTU9ESUZZKTsNCi0NCi0JQ1BERlNES19JbnRlckZvcm0qIHBSREludGVyRm9ybSA9IG1fcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsNCi0JQVNTRVJUKHBSREludGVyRm9ybSAhPSBOVUxMKTsNCi0NCi0JQ1BERl9JbnRlckZvcm0qIHBJbnRlckZvcm0gPSBwUkRJbnRlckZvcm0tPkdldEludGVyRm9ybSgpOw0KLQlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsNCi0NCi0JQ0ZYX1dpZGVTdHJpbmcgc3dGaWVsZE5hbWVUZW1wID0gY3NGaWVsZE5hbWU7DQotCXN3RmllbGROYW1lVGVtcC5SZXBsYWNlKChGWF9MUENXU1RSKUwiLi4iLCAoRlhfTFBDV1NUUilMIi4iKTsNCi0NCi0JaWYgKHBJbnRlckZvcm0tPkNvdW50RmllbGRzKHN3RmllbGROYW1lVGVtcCkgPD0gMCkNCi0Jew0KLQkJc3RkOjp3c3RyaW5nIHN0ckZpZWxkTmFtZTsNCi0JCWludCBpQ29udHJvbE5vID0gLTE7DQotCQlQYXJzZUZpZWxkTmFtZSgod2NoYXJfdCopKEZYX0xQQ1dTVFIpc3dGaWVsZE5hbWVUZW1wLCBzdHJGaWVsZE5hbWUsIGlDb250cm9sTm8pOw0KLQkJaWYgKGlDb250cm9sTm8gPT0gLTEpIHJldHVybiBGQUxTRTsNCi0JCQ0KLQkJbV9GaWVsZE5hbWUgPSBzdHJGaWVsZE5hbWUuY19zdHIoKTsNCi0JCW1fbkZvcm1Db250cm9sSW5kZXggPSBpQ29udHJvbE5vOw0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0NCi0JbV9GaWVsZE5hbWUgPSBzd0ZpZWxkTmFtZVRlbXA7DQotCW1fbkZvcm1Db250cm9sSW5kZXggPSAtMTsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OkdldEZvcm1GaWVsZHMoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgY3NGaWVsZE5hbWUsIENGWF9QdHJBcnJheSYgRmllbGRBcnJheSkNCi17DQotCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCUNQREZTREtfSW50ZXJGb3JtKiBwUmVhZGVySW50ZXJGb3JtID0gcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsNCi0JQVNTRVJUKHBSZWFkZXJJbnRlckZvcm0gIT0gTlVMTCk7DQotDQotCUNQREZfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gcFJlYWRlckludGVyRm9ybS0+R2V0SW50ZXJGb3JtKCk7DQotCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOw0KLQ0KLQlBU1NFUlQoRmllbGRBcnJheS5HZXRTaXplKCkgPT0gMCk7DQotDQotCWZvciAoaW50IGk9MCxzej1wSW50ZXJGb3JtLT5Db3VudEZpZWxkcyhjc0ZpZWxkTmFtZSk7IGk8c3o7IGkrKykNCi0Jew0KLQkJaWYgKENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gcEludGVyRm9ybS0+R2V0RmllbGQoaSwgY3NGaWVsZE5hbWUpKQ0KLQkJCUZpZWxkQXJyYXkuQWRkKCh2b2lkKilwRm9ybUZpZWxkKTsNCi0JfQ0KLX0NCi0NCi12b2lkIEZpZWxkOjpHZXRGb3JtRmllbGRzKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBjc0ZpZWxkTmFtZSwgQ0ZYX1B0ckFycmF5JiBGaWVsZEFycmF5KQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlGaWVsZDo6R2V0Rm9ybUZpZWxkcyhtX3BEb2N1bWVudCwgY3NGaWVsZE5hbWUsIEZpZWxkQXJyYXkpOw0KLX0NCi0NCi12b2lkIEZpZWxkOjpVcGRhdGVGb3JtRmllbGQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCwgDQotCQkJCQkJCUZYX0JPT0wgYkNoYW5nZU1hcmssIEZYX0JPT0wgYlJlc2V0QVAsIEZYX0JPT0wgYlJlZnJlc2gpDQotew0KLQlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOw0KLQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSAoQ1BERlNES19JbnRlckZvcm0qKXBEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7DQotCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOw0KLQ0KLQlDRlhfUHRyQXJyYXkgd2lkZ2V0czsNCi0JcEludGVyRm9ybS0+R2V0V2lkZ2V0cyhwRm9ybUZpZWxkLCB3aWRnZXRzKTsNCi0NCi0JaWYgKGJSZXNldEFQKQ0KLQl7DQotCQlpbnQgbkZpZWxkVHlwZSA9IHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpOw0KLQkJaWYgKG5GaWVsZFR5cGUgPT0gRklFTERUWVBFX0NPTUJPQk9YIHx8IG5GaWVsZFR5cGUgPT0gRklFTERUWVBFX1RFWFRGSUVMRCkNCi0JCXsNCi0JCQlmb3IgKGludCBpPTAsc3o9d2lkZ2V0cy5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0JCQl7DQotCQkJCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gKENQREZTREtfV2lkZ2V0Kil3aWRnZXRzLkdldEF0KGkpOw0KLQkJCQlBU1NFUlQocFdpZGdldCAhPSBOVUxMKTsNCi0NCi0JCQkJRlhfQk9PTCBiRm9ybWF0ZWQgPSBGQUxTRTsNCi0JCQkJQ0ZYX1dpZGVTdHJpbmcgc1ZhbHVlID0gcFdpZGdldC0+T25Gb3JtYXQoMCwgYkZvcm1hdGVkKTsNCi0JCQkJaWYgKGJGb3JtYXRlZCkNCi0JCQkJCXBXaWRnZXQtPlJlc2V0QXBwZWFyYW5jZShzVmFsdWUsIEZBTFNFKTsNCi0JCQkJZWxzZQ0KLQkJCQkJcFdpZGdldC0+UmVzZXRBcHBlYXJhbmNlKE5VTEwsIEZBTFNFKTsNCi0JCQl9DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJZm9yIChpbnQgaT0wLHN6PXdpZGdldHMuR2V0U2l6ZSgpOyBpPHN6OyBpKyspDQotCQkJew0KLQkJCQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IChDUERGU0RLX1dpZGdldCopd2lkZ2V0cy5HZXRBdChpKTsNCi0JCQkJQVNTRVJUKHBXaWRnZXQgIT0gTlVMTCk7DQotDQotCQkJCXBXaWRnZXQtPlJlc2V0QXBwZWFyYW5jZShOVUxMLCBGQUxTRSk7DQotCQkJfQ0KLQkJfQ0KLQl9DQotDQotCWlmIChiUmVmcmVzaCkNCi0Jew0KLQkJZm9yIChpbnQgaT0wLHN6PXdpZGdldHMuR2V0U2l6ZSgpOyBpPHN6OyBpKyspDQotCQl7DQotCQkJQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSAoQ1BERlNES19XaWRnZXQqKXdpZGdldHMuR2V0QXQoaSk7DQotCQkJQVNTRVJUKHBXaWRnZXQgIT0gTlVMTCk7DQotCQkJDQotCQkJQ1BERlNES19JbnRlckZvcm0gKiBwSW50ZXJGb3JtID0gcFdpZGdldC0+R2V0SW50ZXJGb3JtKCk7DQotCQkJQ1BERlNES19Eb2N1bWVudCogcERvYyA9IHBJbnRlckZvcm0tPkdldERvY3VtZW50KCk7DQotLy8gCQkJQ1JlYWRlcl9QYWdlKiBwUGFnZSA9IHBXaWRnZXQtPkdldFBhZ2UoKTsNCi0gCQkJQVNTRVJUKHBEb2MgIT0gTlVMTCk7DQotCQkJcERvYy0+VXBkYXRlQWxsVmlld3MoTlVMTCwgcFdpZGdldCk7DQotCQl9DQotCX0JCQ0KLQkNCi0JaWYgKGJDaGFuZ2VNYXJrKQ0KLQkJcERvY3VtZW50LT5TZXRDaGFuZ2VNYXJrKCk7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OlVwZGF0ZUZvcm1Db250cm9sKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sLCANCi0JCQkJCQkJRlhfQk9PTCBiQ2hhbmdlTWFyaywgRlhfQk9PTCBiUmVzZXRBUCwgRlhfQk9PTCBiUmVmcmVzaCkNCi17DQotCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7DQotCUFTU0VSVChwRm9ybUNvbnRyb2wgIT0gTlVMTCk7DQotDQotCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gKENQREZTREtfSW50ZXJGb3JtKilwRG9jdW1lbnQtPkdldEludGVyRm9ybSgpOw0KLQlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsNCi0NCi0JQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSBwSW50ZXJGb3JtLT5HZXRXaWRnZXQocEZvcm1Db250cm9sKTsNCi0JDQotCWlmIChwV2lkZ2V0KQ0KLQl7DQotCQlpZiAoYlJlc2V0QVApDQotCQl7DQotCQkJaW50IG5GaWVsZFR5cGUgPSBwV2lkZ2V0LT5HZXRGaWVsZFR5cGUoKTsNCi0JCQlpZiAobkZpZWxkVHlwZSA9PSBGSUVMRFRZUEVfQ09NQk9CT1ggfHwgbkZpZWxkVHlwZSA9PSBGSUVMRFRZUEVfVEVYVEZJRUxEKQ0KLQkJCXsNCi0JCQkJRlhfQk9PTCBiRm9ybWF0ZWQgPSBGQUxTRTsNCi0JCQkJQ0ZYX1dpZGVTdHJpbmcgc1ZhbHVlID0gcFdpZGdldC0+T25Gb3JtYXQoMCwgYkZvcm1hdGVkKTsNCi0JCQkJaWYgKGJGb3JtYXRlZCkNCi0JCQkJCXBXaWRnZXQtPlJlc2V0QXBwZWFyYW5jZShzVmFsdWUsIEZBTFNFKTsNCi0JCQkJZWxzZQ0KLQkJCQkJcFdpZGdldC0+UmVzZXRBcHBlYXJhbmNlKE5VTEwsIEZBTFNFKTsNCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJcFdpZGdldC0+UmVzZXRBcHBlYXJhbmNlKE5VTEwsIEZBTFNFKTsNCi0JCQl9DQotCQl9DQotDQotCQlpZiAoYlJlZnJlc2gpDQotCQl7DQotCQkJQ1BERlNES19JbnRlckZvcm0gKiBwSW50ZXJGb3JtID0gcFdpZGdldC0+R2V0SW50ZXJGb3JtKCk7DQotCQkJQ1BERlNES19Eb2N1bWVudCogcERvYyA9IHBJbnRlckZvcm0tPkdldERvY3VtZW50KCk7DQotCQkJQVNTRVJUKHBEb2MgIT0gTlVMTCk7DQotCQkJcERvYy0+VXBkYXRlQWxsVmlld3MoTlVMTCwgcFdpZGdldCk7DQotCQl9DQotDQotCX0NCi0NCi0JaWYgKGJDaGFuZ2VNYXJrKQ0KLQkJcERvY3VtZW50LT5TZXRDaGFuZ2VNYXJrKCk7DQotfQ0KLQ0KLUNQREZTREtfV2lkZ2V0KiBGaWVsZDo6R2V0V2lkZ2V0KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sKQ0KLXsNCi0JQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsNCi0JQVNTRVJUKHBGb3JtQ29udHJvbCAhPSBOVUxMKTsNCi0NCi0JQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSAoQ1BERlNES19JbnRlckZvcm0qKXBEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7DQotCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOw0KLQ0KLQlyZXR1cm4gcEludGVyRm9ybS0+R2V0V2lkZ2V0KHBGb3JtQ29udHJvbCk7DQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OlZhbHVlSXNPY2N1cihDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCwgQ0ZYX1dpZGVTdHJpbmcgY3NPcHRMYWJlbCkNCi17DQotCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQlmb3IgKGludCBpPTAsc3ogPSBwRm9ybUZpZWxkLT5Db3VudE9wdGlvbnMoKTsgaSA8IHN6OyBpKyspDQotCXsNCi0JCWlmIChjc09wdExhYmVsLkNvbXBhcmUocEZvcm1GaWVsZC0+R2V0T3B0aW9uTGFiZWwoaSkpID09IDApDQotCQkJcmV0dXJuIFRSVUU7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1DUERGX0Zvcm1Db250cm9sKiBGaWVsZDo6R2V0U21hcnRGaWVsZENvbnRyb2woQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQpDQotew0KLQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0JaWYoIXBGb3JtRmllbGQtPkNvdW50Q29udHJvbHMoKSB8fCBtX25Gb3JtQ29udHJvbEluZGV4Pj1wRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCkpIHJldHVybiBOVUxMOw0KLQ0KLQlpZiAobV9uRm9ybUNvbnRyb2xJbmRleDwwKQ0KLQkJcmV0dXJuIHBGb3JtRmllbGQtPkdldENvbnRyb2woMCk7DQotCWVsc2UNCi0JCXJldHVybiBwRm9ybUZpZWxkLT5HZXRDb250cm9sKG1fbkZvcm1Db250cm9sSW5kZXgpOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHByb3BlcnR5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1GWF9CT09MIEZpZWxkOjphbGlnbm1lbnQoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7DQotDQotCQlDRlhfQnl0ZVN0cmluZyBhbGlnblN0cjsNCi0JCXZwID4+IGFsaWduU3RyOw0KLQ0KLQkJaWYgKG1fYkRlbGF5KQ0KLQkJew0KLQkJCUFkZERlbGF5X1N0cmluZyhGUF9BTElHTk1FTlQsIGFsaWduU3RyKTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlGaWVsZDo6U2V0QWxpZ25tZW50KG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgYWxpZ25TdHIpOw0KLQkJfQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLCBGaWVsZEFycmF5KTsNCi0JCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7DQotDQotCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfVEVYVEZJRUxEKQ0KLQkJCXJldHVybiBGQUxTRTsNCi0NCi0JCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCA9IEdldFNtYXJ0RmllbGRDb250cm9sKHBGb3JtRmllbGQpOw0KLQkJaWYgKCFwRm9ybUNvbnRyb2wpcmV0dXJuIEZBTFNFOw0KLQ0KLQkJc3dpdGNoIChwRm9ybUNvbnRyb2wtPkdldENvbnRyb2xBbGlnbm1lbnQoKSkNCi0JCXsNCi0JCQljYXNlIDE6DQotCQkJCXZwIDw8IChGWF9MUENXU1RSKUwiY2VudGVyIjsNCi0JCQkJYnJlYWs7DQotCQkJY2FzZSAwOg0KLQkJCQl2cCA8PCAoRlhfTFBDV1NUUilMImxlZnQiOw0KLQkJCQlicmVhazsNCi0JCQljYXNlIDI6DQotCQkJCXZwIDw8IChGWF9MUENXU1RSKUwicmlnaHQiOw0KLQkJCQlicmVhazsNCi0JCQlkZWZhdWx0Og0KLQkJCQl2cCA8PCAoRlhfTFBDV1NUUilMIiI7DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OlNldEFsaWdubWVudChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIA0KLQkJCQkJCSBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyaW5nKQ0KLXsNCi0JLy9Ob3Qgc3VwcG9ydGVkLg0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjpib3JkZXJTdHlsZShPQkpfUFJPUF9QQVJBTVMpDQotewkNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7DQotDQotCQlDRlhfQnl0ZVN0cmluZyBzdHJUeXBlID0gIiI7DQotCQl2cCA+PiBzdHJUeXBlOw0KLQ0KLQkJaWYgKG1fYkRlbGF5KQ0KLQkJew0KLQkJCUFkZERlbGF5X1N0cmluZyhGUF9CT1JERVJTVFlMRSwgc3RyVHlwZSk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJRmllbGQ6OlNldEJvcmRlclN0eWxlKG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgc3RyVHlwZSk7DQotCQl9DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsNCi0JCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsIEZpZWxkQXJyYXkpOw0KLQkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0JCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsNCi0JCWlmICghcEZvcm1GaWVsZCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSBHZXRXaWRnZXQobV9wRG9jdW1lbnQsIEdldFNtYXJ0RmllbGRDb250cm9sKHBGb3JtRmllbGQpKTsNCi0JCWlmICghcFdpZGdldCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJaW50IG5Cb3JkZXJzdHlsZSA9IHBXaWRnZXQtPkdldEJvcmRlclN0eWxlKCk7DQotDQotCQlzd2l0Y2ggKG5Cb3JkZXJzdHlsZSkNCi0JCXsNCi0JCQljYXNlIEJCU19TT0xJRDoNCi0JCQkJdnAgPDwgKEZYX0xQQ1dTVFIpTCJzb2xpZCI7DQotCQkJCWJyZWFrOw0KLQkJCWNhc2UgQkJTX0RBU0g6DQotCQkJCXZwIDw8IChGWF9MUENXU1RSKUwiZGFzaGVkIjsNCi0JCQkJYnJlYWs7DQotCQkJY2FzZSBCQlNfQkVWRUxFRDoNCi0JCQkJdnAgPDwgKEZYX0xQQ1dTVFIpTCJiZXZlbGVkIjsNCi0JCQkJYnJlYWs7DQotCQkJY2FzZSBCQlNfSU5TRVQ6DQotCQkJCXZwIDw8IChGWF9MUENXU1RSKUwiaW5zZXQiOw0KLQkJCQlicmVhazsNCi0JCQljYXNlIEJCU19VTkRFUkxJTkU6DQotCQkJCXZwIDw8IChGWF9MUENXU1RSKUwidW5kZXJsaW5lIjsNCi0JCQkJYnJlYWs7DQotCQkJZGVmYXVsdDoNCi0JCQkJdnAgPDwgKEZYX0xQQ1dTVFIpTCIiOw0KLQkJCQlicmVhazsNCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotdm9pZCBGaWVsZDo6U2V0Qm9yZGVyU3R5bGUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCANCi0JCQkJCQkgICBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyaW5nKQ0KLXsNCi0JQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaW50IG5Cb3JkZXJTdHlsZSA9IDA7DQotDQotCWlmIChzdHJpbmcgPT0gInNvbGlkIikNCi0JCW5Cb3JkZXJTdHlsZSA9IEJCU19TT0xJRDsNCi0JZWxzZSBpZiAoc3RyaW5nID09ICJiZXZlbGVkIikNCi0JCW5Cb3JkZXJTdHlsZSA9IEJCU19CRVZFTEVEOw0KLQllbHNlIGlmIChzdHJpbmcgPT0gImRhc2hlZCIpDQotCQluQm9yZGVyU3R5bGUgPSBCQlNfREFTSDsNCi0JZWxzZSBpZiAoc3RyaW5nID09ICJpbnNldCIpDQotCQluQm9yZGVyU3R5bGUgPSBCQlNfSU5TRVQ7DQotCWVsc2UgaWYgKHN0cmluZyA9PSAidW5kZXJsaW5lIikNCi0JCW5Cb3JkZXJTdHlsZSA9IEJCU19VTkRFUkxJTkU7DQotCWVsc2UgcmV0dXJuOw0KLQ0KLQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsNCi0JR2V0Rm9ybUZpZWxkcyhwRG9jdW1lbnQsIHN3RmllbGROYW1lLCBGaWVsZEFycmF5KTsNCi0NCi0JZm9yIChpbnQgaT0wLGlzej1GaWVsZEFycmF5LkdldFNpemUoKTsgaTxpc3o7IGkrKykNCi0Jew0KLQkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KGkpOw0KLQkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotDQotCQlpZiAobkNvbnRyb2xJbmRleCA8IDApDQotCQl7DQotCQkJRlhfQk9PTCBiU2V0ID0gRkFMU0U7DQotCQkJZm9yIChpbnQgaj0wLGpzeiA9IHBGb3JtRmllbGQtPkNvdW50Q29udHJvbHMoKTsgajxqc3o7IGorKykNCi0JCQl7DQotCQkJCWlmIChDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IEdldFdpZGdldChwRG9jdW1lbnQsIHBGb3JtRmllbGQtPkdldENvbnRyb2woaikpKQ0KLQkJCQl7DQotCQkJCQlpZiAocFdpZGdldC0+R2V0Qm9yZGVyU3R5bGUoKSAhPSBuQm9yZGVyU3R5bGUpDQotCQkJCQl7DQotCQkJCQkJcFdpZGdldC0+U2V0Qm9yZGVyU3R5bGUobkJvcmRlclN0eWxlKTsNCi0JCQkJCQliU2V0ID0gVFJVRTsNCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCX0NCi0JCQlpZiAoYlNldCkgVXBkYXRlRm9ybUZpZWxkKHBEb2N1bWVudCwgcEZvcm1GaWVsZCwgVFJVRSwgVFJVRSwgVFJVRSk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJaWYobkNvbnRyb2xJbmRleCA+PSBwRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCkpIHJldHVybjsNCi0JCQlpZiAoQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sID0gcEZvcm1GaWVsZC0+R2V0Q29udHJvbChuQ29udHJvbEluZGV4KSkNCi0JCQl7DQotCQkJCWlmIChDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IEdldFdpZGdldChwRG9jdW1lbnQsIHBGb3JtQ29udHJvbCkpDQotCQkJCXsNCi0JCQkJCWlmIChwV2lkZ2V0LT5HZXRCb3JkZXJTdHlsZSgpICE9IG5Cb3JkZXJTdHlsZSkNCi0JCQkJCXsNCi0JCQkJCQlwV2lkZ2V0LT5TZXRCb3JkZXJTdHlsZShuQm9yZGVyU3R5bGUpOw0KLQkJCQkJCVVwZGF0ZUZvcm1Db250cm9sKHBEb2N1bWVudCwgcEZvcm1Db250cm9sLCBUUlVFLCBUUlVFLCBUUlVFKTsNCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCX0NCi0JCX0NCi0JfQ0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjpidXR0b25BbGlnblgoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7DQotDQotCQlpbnQgblZQOw0KLQkJdnAgPj4gblZQOw0KLQ0KLQkJaWYgKG1fYkRlbGF5KQ0KLQkJew0KLQkJCUFkZERlbGF5X0ludChGUF9CVVRUT05BTElHTlgsIG5WUCk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJRmllbGQ6OlNldEJ1dHRvbkFsaWduWChtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIG5WUCk7DQotCQl9DQotCX0NCi0JZWxzZQ0KLQl7CQkNCi0JCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5Ow0KLQkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsNCi0JCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7DQotDQotCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfUFVTSEJVVFRPTikNCi0JCQlyZXR1cm4gRkFMU0U7DQotDQotCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBHZXRTbWFydEZpZWxkQ29udHJvbChwRm9ybUZpZWxkKTsNCi0JCWlmICghcEZvcm1Db250cm9sKXJldHVybiBGQUxTRTsNCi0NCi0JCUNQREZfSWNvbkZpdCBJY29uRml0ID0gcEZvcm1Db250cm9sLT5HZXRJY29uRml0KCk7DQotDQotCQlGWF9GTE9BVCBmTGVmdCxmQm90dG9tOw0KLQkJSWNvbkZpdC5HZXRJY29uUG9zaXRpb24oZkxlZnQsZkJvdHRvbSk7DQotDQotCQl2cCA8PCAoRlhfSU5UMzIpZkxlZnQ7DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OlNldEJ1dHRvbkFsaWduWChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGludCBudW1iZXIpDQotew0KLQkvL05vdCBzdXBwb3J0ZWQuDQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OmJ1dHRvbkFsaWduWShPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmICh2cC5Jc1NldHRpbmcoKSkNCi0Jew0KLQkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsNCi0NCi0JCWludCBuVlA7DQotCQl2cCA+PiBuVlA7DQotDQotCQlpZiAobV9iRGVsYXkpDQotCQl7DQotCQkJQWRkRGVsYXlfSW50KEZQX0JVVFRPTkFMSUdOWSwgblZQKTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlGaWVsZDo6U2V0QnV0dG9uQWxpZ25ZKG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgblZQKTsNCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsNCi0JCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5Ow0KLQkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsNCi0JCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7DQotDQotCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfUFVTSEJVVFRPTikNCi0JCQlyZXR1cm4gRkFMU0U7DQotDQotCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBHZXRTbWFydEZpZWxkQ29udHJvbChwRm9ybUZpZWxkKTsNCi0JCWlmICghcEZvcm1Db250cm9sKXJldHVybiBGQUxTRTsNCi0NCi0JCUNQREZfSWNvbkZpdCBJY29uRml0ID0gcEZvcm1Db250cm9sLT5HZXRJY29uRml0KCk7DQotDQotCQlGWF9GTE9BVCBmTGVmdCxmQm90dG9tOw0KLQkJSWNvbkZpdC5HZXRJY29uUG9zaXRpb24oZkxlZnQsZkJvdHRvbSk7DQotDQotCQl2cCA8PCAgKEZYX0lOVDMyKWZCb3R0b207DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OlNldEJ1dHRvbkFsaWduWShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGludCBudW1iZXIpDQotew0KLQkvL05vdCBzdXBwb3J0ZWQuDQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OmJ1dHRvbkZpdEJvdW5kcyhPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmICh2cC5Jc1NldHRpbmcoKSkNCi0Jew0KLQkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsNCi0NCi0JCWJvb2wgYlZQOw0KLQkJdnAgPj4gYlZQOw0KLQ0KLQkJaWYgKG1fYkRlbGF5KQ0KLQkJew0KLQkJCUFkZERlbGF5X0Jvb2woRlBfQlVUVE9ORklUQk9VTkRTLCBiVlApOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCUZpZWxkOjpTZXRCdXR0b25GaXRCb3VuZHMobV9wRG9jdW1lbnQsIG1fRmllbGROYW1lLCBtX25Gb3JtQ29udHJvbEluZGV4LCBiVlApOw0KLQkJfQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOw0KLQkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0JCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsNCi0JCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9QVVNIQlVUVE9OKQ0KLQkJCXJldHVybiBGQUxTRTsNCi0NCi0JCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCA9IEdldFNtYXJ0RmllbGRDb250cm9sKHBGb3JtRmllbGQpOw0KLQkJaWYgKCFwRm9ybUNvbnRyb2wpcmV0dXJuIEZBTFNFOw0KLQ0KLQkJQ1BERl9JY29uRml0IEljb25GaXQgPSBwRm9ybUNvbnRyb2wtPkdldEljb25GaXQoKTsNCi0JCXZwIDw8IEljb25GaXQuR2V0Rml0dGluZ0JvdW5kcygpOwkJDQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OlNldEJ1dHRvbkZpdEJvdW5kcyhDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGJvb2wgYikNCi17DQotCS8vTm90IHN1cHBvcnRlZC4NCi19DQotDQotRlhfQk9PTCBGaWVsZDo6YnV0dG9uUG9zaXRpb24oT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7DQotDQotCQlpbnQgblZQOw0KLQkJdnAgPj4gblZQOw0KLQ0KLQkJaWYgKG1fYkRlbGF5KQ0KLQkJew0KLQkJCUFkZERlbGF5X0ludChGUF9CVVRUT05QT1NJVElPTiwgblZQKTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlGaWVsZDo6U2V0QnV0dG9uUG9zaXRpb24obV9wRG9jdW1lbnQsIG1fRmllbGROYW1lLCBtX25Gb3JtQ29udHJvbEluZGV4LCBuVlApOw0KLQkJfQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOw0KLQkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0JCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsNCi0JCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9QVVNIQlVUVE9OKQ0KLQkJCXJldHVybiBGQUxTRTsNCi0NCi0JCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCA9IEdldFNtYXJ0RmllbGRDb250cm9sKHBGb3JtRmllbGQpOw0KLQkJaWYgKCFwRm9ybUNvbnRyb2wpcmV0dXJuIEZBTFNFOw0KLQ0KLQkJdnAgPDwgIHBGb3JtQ29udHJvbC0+R2V0VGV4dFBvc2l0aW9uKCk7DQotCX0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OlNldEJ1dHRvblBvc2l0aW9uKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgaW50IG51bWJlcikNCi17DQotCS8vTm90IHN1cHBvcnRlZC4NCi19DQotDQotRlhfQk9PTCBGaWVsZDo6YnV0dG9uU2NhbGVIb3coT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7DQotDQotCQlpbnQgblZQOw0KLQkJdnAgPj4gblZQOw0KLQ0KLQkJaWYgKG1fYkRlbGF5KQ0KLQkJew0KLQkJCUFkZERlbGF5X0ludChGUF9CVVRUT05TQ0FMRUhPVywgblZQKTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlGaWVsZDo6U2V0QnV0dG9uU2NhbGVIb3cobV9wRG9jdW1lbnQsIG1fRmllbGROYW1lLCBtX25Gb3JtQ29udHJvbEluZGV4LCBuVlApOw0KLQkJfQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLCBGaWVsZEFycmF5KTsNCi0JCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7DQotDQotCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfUFVTSEJVVFRPTikNCi0JCQlyZXR1cm4gRkFMU0U7DQotDQotCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBHZXRTbWFydEZpZWxkQ29udHJvbChwRm9ybUZpZWxkKTsNCi0JCWlmICghcEZvcm1Db250cm9sKXJldHVybiBGQUxTRTsNCi0NCi0JCUNQREZfSWNvbkZpdCBJY29uRml0ID0gcEZvcm1Db250cm9sLT5HZXRJY29uRml0KCk7DQotCQlpZiAoSWNvbkZpdC5Jc1Byb3BvcnRpb25hbFNjYWxlKCkpDQotCQkJdnAgPDwgKEZYX0lOVDMyKTA7DQotCQllbHNlDQotCQkJdnAgPDwgKEZYX0lOVDMyKTE7DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OlNldEJ1dHRvblNjYWxlSG93KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgaW50IG51bWJlcikNCi17DQotCS8vTm90IHN1cHBvcnRlZC4NCi19DQotDQotRlhfQk9PTCBGaWVsZDo6YnV0dG9uU2NhbGVXaGVuKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKHZwLklzU2V0dGluZygpKQ0KLQl7DQotCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJaW50IG5WUDsNCi0JCXZwID4+IG5WUDsNCi0NCi0JCWlmIChtX2JEZWxheSkNCi0JCXsNCi0JCQlBZGREZWxheV9JbnQoRlBfQlVUVE9OU0NBTEVXSEVOLCBuVlApOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCUZpZWxkOjpTZXRCdXR0b25TY2FsZVdoZW4obV9wRG9jdW1lbnQsIG1fRmllbGROYW1lLCBtX25Gb3JtQ29udHJvbEluZGV4LCBuVlApOw0KLQkJfQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOw0KLQkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0JCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKikgRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfUFVTSEJVVFRPTikNCi0JCQlyZXR1cm4gRkFMU0U7DQotDQotCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBHZXRTbWFydEZpZWxkQ29udHJvbChwRm9ybUZpZWxkKTsNCi0JCWlmICghcEZvcm1Db250cm9sKSByZXR1cm4gRkFMU0U7DQotDQotCQlDUERGX0ljb25GaXQgSWNvbkZpdCA9IHBGb3JtQ29udHJvbC0+R2V0SWNvbkZpdCgpOw0KLQkJaW50IFNjYWxlTSA9IEljb25GaXQuR2V0U2NhbGVNZXRob2QoKTsNCi0JCXN3aXRjaCAoU2NhbGVNKQ0KLQkJew0KLQkJCWNhc2UgQ1BERl9JY29uRml0OjpBbHdheXMgOg0KLQkJCQl2cCA8PCAgKEZYX0lOVDMyKSBDUERGX0ljb25GaXQ6OkFsd2F5czsNCi0JCQkJYnJlYWs7DQotCQkJY2FzZSBDUERGX0ljb25GaXQ6OkJpZ2dlciA6DQotCQkJCXZwIDw8ICAoRlhfSU5UMzIpIENQREZfSWNvbkZpdDo6QmlnZ2VyOw0KLQkJCQlicmVhazsNCi0JCQljYXNlIENQREZfSWNvbkZpdDo6TmV2ZXIgOg0KLQkJCQl2cCA8PCAgKEZYX0lOVDMyKSBDUERGX0ljb25GaXQ6Ok5ldmVyOw0KLQkJCQlicmVhazsNCi0JCQljYXNlIENQREZfSWNvbkZpdDo6U21hbGxlciA6DQotCQkJCXZwIDw8ICAoRlhfSU5UMzIpIENQREZfSWNvbkZpdDo6U21hbGxlcjsNCi0JCQkJYnJlYWs7DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OlNldEJ1dHRvblNjYWxlV2hlbihDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGludCBudW1iZXIpDQotew0KLQkvL05vdCBzdXBwb3J0ZWQuDQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OmNhbGNPcmRlckluZGV4KE9CSl9QUk9QX1BBUkFNUykNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKHZwLklzU2V0dGluZygpKQ0KLQl7CQ0KLQkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsNCi0NCi0JCWludCBuVlA7DQotCQl2cCA+PiBuVlA7DQotDQotCQlpZiAobV9iRGVsYXkpDQotCQl7DQotCQkJQWRkRGVsYXlfSW50KEZQX0NBTENPUkRFUklOREVYLCBuVlApOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCUZpZWxkOjpTZXRDYWxjT3JkZXJJbmRleChtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIG5WUCk7DQotCQl9DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsNCi0JCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsIEZpZWxkQXJyYXkpOw0KLQkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0JCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsNCi0JCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9DT01CT0JPWCAmJiBwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfVEVYVEZJRUxEKQ0KLQkJCXJldHVybiBGQUxTRTsNCi0NCi0JCUNQREZTREtfSW50ZXJGb3JtKiBwUkRJbnRlckZvcm0gPSBtX3BEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7DQotCQlBU1NFUlQocFJESW50ZXJGb3JtICE9IE5VTEwpOw0KLQ0KLQkJQ1BERl9JbnRlckZvcm0qIHBJbnRlckZvcm0gPSBwUkRJbnRlckZvcm0tPkdldEludGVyRm9ybSgpOw0KLQkJQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7DQotDQotCQl2cCA8PCAoRlhfSU5UMzIpcEludGVyRm9ybS0+RmluZEZpZWxkSW5DYWxjdWxhdGlvbk9yZGVyKHBGb3JtRmllbGQpOw0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi12b2lkIEZpZWxkOjpTZXRDYWxjT3JkZXJJbmRleChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGludCBudW1iZXIpDQotew0KLQkvL05vdCBzdXBwb3J0ZWQuDQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OmNoYXJMaW1pdChPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmICh2cC5Jc1NldHRpbmcoKSkNCi0Jew0KLQkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsNCi0NCi0JCWludCBuVlA7DQotCQl2cCA+PiBuVlA7DQotDQotCQlpZiAobV9iRGVsYXkpDQotCQl7DQotCQkJQWRkRGVsYXlfSW50KEZQX0NIQVJMSU1JVCwgblZQKTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlGaWVsZDo6U2V0Q2hhckxpbWl0KG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgblZQKTsNCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsNCi0JCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5Ow0KLQkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSwgRmllbGRBcnJheSk7DQotCQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOw0KLQkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotDQotCQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX1RFWFRGSUVMRCkNCi0JCQlyZXR1cm4gRkFMU0U7DQotDQotCQl2cCA8PCAoRlhfSU5UMzIpcEZvcm1GaWVsZC0+R2V0TWF4TGVuKCk7DQotCX0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OlNldENoYXJMaW1pdChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGludCBudW1iZXIpDQotew0KLQkvL05vdCBzdXBwb3J0ZWQuDQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OmNvbWIoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7DQotDQotCQlib29sIGJWUDsNCi0JCXZwID4+IGJWUDsNCi0NCi0JCWlmIChtX2JEZWxheSkNCi0JCXsNCi0JCQlBZGREZWxheV9Cb29sKEZQX0NPTUIsIGJWUCk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJRmllbGQ6OlNldENvbWIobV9wRG9jdW1lbnQsIG1fRmllbGROYW1lLCBtX25Gb3JtQ29udHJvbEluZGV4LCBiVlApOw0KLQkJfQ0KLQl9DQotCWVsc2UNCi0JewkNCi0JCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5Ow0KLQkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsNCi0JCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7DQotDQotCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfVEVYVEZJRUxEKQ0KLQkJCXJldHVybiBGQUxTRTsNCi0NCi0JCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZEZsYWdzKCkgJiBGSUVMREZMQUdfQ09NQikNCi0JCQl2cCA8PCB0cnVlOw0KLQkJZWxzZQ0KLQkJCXZwIDw8IGZhbHNlOw0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi12b2lkIEZpZWxkOjpTZXRDb21iKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgYm9vbCBiKQ0KLXsNCi0JLy9Ob3Qgc3VwcG9ydGVkLg0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjpjb21taXRPblNlbENoYW5nZShPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmICh2cC5Jc1NldHRpbmcoKSkNCi0Jew0KLQkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsNCi0NCi0JCWJvb2wgYlZQOw0KLQkJdnAgPj4gYlZQOw0KLQ0KLQkJaWYgKG1fYkRlbGF5KQ0KLQkJew0KLQkJCUFkZERlbGF5X0Jvb2woRlBfQ09NTUlUT05TRUxDSEFOR0UsIGJWUCk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJRmllbGQ6OlNldENvbW1pdE9uU2VsQ2hhbmdlKG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgYlZQKTsNCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsNCi0JCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5Ow0KLQkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsNCi0JCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7DQotDQotCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfQ09NQk9CT1ggJiYgcEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX0xJU1RCT1gpDQotCQkJcmV0dXJuIEZBTFNFOw0KLQ0KLQkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkRmxhZ3MoKSAmIEZJRUxERkxBR19DT01NSVRPTlNFTENIQU5HRSkNCi0JCQl2cCA8PCB0cnVlOw0KLQkJZWxzZQ0KLQkJCXZwIDw8IGZhbHNlOw0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi12b2lkIEZpZWxkOjpTZXRDb21taXRPblNlbENoYW5nZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGJvb2wgYikNCi17DQotCS8vTm90IHN1cHBvcnRlZC4NCi19DQotDQotRlhfQk9PTCBGaWVsZDo6Y3VycmVudFZhbHVlSW5kaWNlcyhPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmICh2cC5Jc1NldHRpbmcoKSkNCi0Jew0KLQkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsNCi0NCi0JCUNGWF9EV29yZEFycmF5IGFycmF5Ow0KLQ0KLQkJaWYgKHZwLkdldFR5cGUoKSA9PSBWVF9udW1iZXIpDQotCQl7DQotCQkJaW50IGlTZWxlY3RpbmcgPSAwOw0KLQkJCXZwID4+IGlTZWxlY3Rpbmc7DQotCQkJYXJyYXkuQWRkKGlTZWxlY3RpbmcpOw0KLQkJfQ0KLQkJZWxzZSBpZiAodnAuSXNBcnJheU9iamVjdCgpKQ0KLQkJew0KLQkJCUNKU19BcnJheSBTZWxBcnJheShtX2lzb2xhdGUpOw0KLQkJCUNKU19WYWx1ZSBTZWxWYWx1ZShtX2lzb2xhdGUpOw0KLQkJCWludCBpU2VsZWN0aW5nOw0KLQkJCXZwID4+IFNlbEFycmF5Ow0KLQkJCWZvciAoaW50IGk9MCxzej1TZWxBcnJheS5HZXRMZW5ndGgoKTsgaTxzejsgaSsrKQ0KLQkJCXsNCi0JCQkJU2VsQXJyYXkuR2V0RWxlbWVudChpLFNlbFZhbHVlKTsNCi0JCQkJaVNlbGVjdGluZyA9IChGWF9JTlQzMilTZWxWYWx1ZTsNCi0JCQkJYXJyYXkuQWRkKGlTZWxlY3RpbmcpOw0KLQkJCX0NCi0JCX0NCi0JCQ0KLQkJaWYgKG1fYkRlbGF5KQ0KLQkJew0KLQkJCUFkZERlbGF5X1dvcmRBcnJheShGUF9DVVJSRU5UVkFMVUVJTkRJQ0VTLCBhcnJheSk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJRmllbGQ6OlNldEN1cnJlbnRWYWx1ZUluZGljZXMobV9wRG9jdW1lbnQsIG1fRmllbGROYW1lLCBtX25Gb3JtQ29udHJvbEluZGV4LCBhcnJheSk7DQotCQl9DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsNCi0JCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7DQotCQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOw0KLQkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotDQotCQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX0NPTUJPQk9YICYmIHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9MSVNUQk9YKQ0KLQkJCXJldHVybiBGQUxTRTsNCi0NCi0JCWlmIChwRm9ybUZpZWxkLT5Db3VudFNlbGVjdGVkSXRlbXMoKSA9PSAxKQ0KLQkJCXZwIDw8IHBGb3JtRmllbGQtPkdldFNlbGVjdGVkSW5kZXgoMCk7DQotCQllbHNlIGlmIChwRm9ybUZpZWxkLT5Db3VudFNlbGVjdGVkSXRlbXMoKSA+IDEpDQotCQl7DQotCQkJQ0pTX0FycmF5IFNlbEFycmF5KG1faXNvbGF0ZSk7DQotCQkJZm9yIChpbnQgaT0wLHN6PXBGb3JtRmllbGQtPkNvdW50U2VsZWN0ZWRJdGVtcygpOyBpPHN6OyBpKyspDQotCQkJew0KLQkJCQlTZWxBcnJheS5TZXRFbGVtZW50KGksIENKU19WYWx1ZShtX2lzb2xhdGUscEZvcm1GaWVsZC0+R2V0U2VsZWN0ZWRJbmRleChpKSkpOw0KLQkJCX0NCi0JCQl2cCA8PCBTZWxBcnJheTsNCi0JCX0NCi0JCWVsc2UNCi0JCQl2cCA8PCAtMTsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotdm9pZCBGaWVsZDo6U2V0Q3VycmVudFZhbHVlSW5kaWNlcyhDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIA0KLQkJCQkJCQkJICAgY29uc3QgQ0ZYX0RXb3JkQXJyYXkmIGFycmF5KQ0KLXsNCi0JQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCUdldEZvcm1GaWVsZHMocERvY3VtZW50LCBzd0ZpZWxkTmFtZSwgRmllbGRBcnJheSk7DQotDQotCWZvciAoaW50IGk9MCxpc3o9RmllbGRBcnJheS5HZXRTaXplKCk7IGk8aXN6OyBpKyspDQotCXsNCi0JCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdChpKTsNCi0JCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQkJaW50IG5GaWVsZFR5cGUgPSBwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKTsNCi0JCWlmIChuRmllbGRUeXBlID09IEZJRUxEVFlQRV9DT01CT0JPWCB8fCBuRmllbGRUeXBlID09IEZJRUxEVFlQRV9MSVNUQk9YKQ0KLQkJew0KLQkJCUZYX0RXT1JEIGR3RmllbGRGbGFncyA9IHBGb3JtRmllbGQtPkdldEZpZWxkRmxhZ3MoKTsNCi0JCQlwRm9ybUZpZWxkLT5DbGVhclNlbGVjdGlvbihUUlVFKTsNCi0NCi0JCQlmb3IgKGludCBpPTAsc3o9YXJyYXkuR2V0U2l6ZSgpOyBpPHN6OyBpKyspDQotCQkJew0KLQkJCQlpZiAoaT4wICYmICEoZHdGaWVsZEZsYWdzICYgKDE8PDIxKSkpDQotCQkJCXsNCi0JCQkJCWJyZWFrOw0KLQkJCQl9DQotDQotCQkJCWludCBpU2VsZWN0aW5nID0gKEZYX0lOVDMyKWFycmF5LkdldEF0KGkpOw0KLQkJCQlpZiAoaVNlbGVjdGluZyA8IHBGb3JtRmllbGQtPkNvdW50T3B0aW9ucygpICYmICFwRm9ybUZpZWxkLT5Jc0l0ZW1TZWxlY3RlZChpU2VsZWN0aW5nKSkNCi0JCQkJCXBGb3JtRmllbGQtPlNldEl0ZW1TZWxlY3Rpb24oaVNlbGVjdGluZywgVFJVRSk7DQotDQotCQkJfQ0KLQkJCVVwZGF0ZUZvcm1GaWVsZChwRG9jdW1lbnQsIHBGb3JtRmllbGQsIFRSVUUsIFRSVUUsIFRSVUUpOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OmRlZmF1bHRTdHlsZShPQkpfUFJPUF9QQVJBTVMpDQotew0KLQkvLyBNUUcgc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQoSURTX1NUUklOR19OT1RTVVBQT1JUKTsNCi0JcmV0dXJuIEZBTFNFOw0KLQ0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7DQotDQotCQk7CQkNCi0JfQ0KLQllbHNlDQotCXsNCi0JCTsNCi0JfQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotdm9pZCBGaWVsZDo6U2V0RGVmYXVsdFN0eWxlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCkNCi17DQotCS8vTm90IHN1cHBvcnRlZC4NCi19DQotDQotRlhfQk9PTCBGaWVsZDo6ZGVmYXVsdFZhbHVlKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKHZwLklzU2V0dGluZygpKQ0KLQl7DQotCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJQ0ZYX1dpZGVTdHJpbmcgV2lkZVN0cjsNCi0JCXZwID4+IFdpZGVTdHI7IA0KLQ0KLQkJaWYgKG1fYkRlbGF5KQ0KLQkJew0KLQkJCUFkZERlbGF5X1dpZGVTdHJpbmcoRlBfREVGQVVMVFZBTFVFLCBXaWRlU3RyKTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlGaWVsZDo6U2V0RGVmYXVsdFZhbHVlKG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgV2lkZVN0cik7DQotCQl9DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsNCi0JCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7DQotCQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOw0KLQkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotDQotCQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgPT0gRklFTERUWVBFX1BVU0hCVVRUT04gfHwgDQotCQkJcEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgPT0gRklFTERUWVBFX1NJR05BVFVSRSkNCi0JCQlyZXR1cm4gRkFMU0U7DQotDQotCQl2cCA8PCBwRm9ybUZpZWxkLT5HZXREZWZhdWx0VmFsdWUoKTsNCi0JfQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotdm9pZCBGaWVsZDo6U2V0RGVmYXVsdFZhbHVlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwNCi0JCQkJCQkJY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cmluZykNCi17DQotCS8vTm90IHN1cHBvcnRlZC4NCi19DQotDQotRlhfQk9PTCBGaWVsZDo6ZG9Ob3RTY3JvbGwoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7DQotDQotCQlib29sIGJWUDsNCi0JCXZwID4+IGJWUDsNCi0NCi0JCWlmIChtX2JEZWxheSkNCi0JCXsNCi0JCQlBZGREZWxheV9Cb29sKEZQX0RPTk9UU0NST0xMLCBiVlApOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCUZpZWxkOjpTZXREb05vdFNjcm9sbChtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIGJWUCk7DQotCQl9DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsNCi0JCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7DQotCQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOw0KLQkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotDQotCQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX1RFWFRGSUVMRCkNCi0JCQlyZXR1cm4gRkFMU0U7DQotDQotCQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRGbGFncygpICYgRklFTERGTEFHX0RPTk9UU0NST0xMKQ0KLQkJCXZwIDw8IHRydWU7DQotCQllbHNlDQotCQkJdnAgPDwgZmFsc2U7DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OlNldERvTm90U2Nyb2xsKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgYm9vbCBiKQ0KLXsNCi0JLy9Ob3Qgc3VwcG9ydGVkLg0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjpkb05vdFNwZWxsQ2hlY2soT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7DQotDQotCQlib29sIGJWUDsNCi0JCXZwID4+IGJWUDsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5Ow0KLQkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsNCi0JCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7DQotDQotCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfVEVYVEZJRUxEICYmIA0KLQkJCXBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9DT01CT0JPWCkNCi0JCQlyZXR1cm4gRkFMU0U7DQotDQotCQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRGbGFncygpICYgRklFTERGTEFHX0RPTk9UU1BFTExDSEVDSykNCi0JCQl2cCA8PCB0cnVlOw0KLQkJZWxzZQ0KLQkJCXZwIDw8IGZhbHNlOw0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi12b2lkIEZpZWxkOjpTZXREZWxheShGWF9CT09MIGJEZWxheSkNCi17DQotCW1fYkRlbGF5ID0gYkRlbGF5Ow0KLQ0KLQlpZiAoIW1fYkRlbGF5KQ0KLQl7DQotCQlpZiAobV9wSlNEb2MpDQotCQkJbV9wSlNEb2MtPkRvRmllbGREZWxheShtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCk7DQotCX0NCi19DQotDQotRlhfQk9PTCBGaWVsZDo6ZGVsYXkoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JaWYgKHZwLklzU2V0dGluZygpKQ0KLQl7DQotCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOw0KLQkJDQotCQlib29sIGJWUDsNCi0JCXZwID4+IGJWUDsNCi0NCi0JCVNldERlbGF5KGJWUCk7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQl2cCA8PCBtX2JEZWxheTsNCi0JfQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBGaWVsZDo6ZGlzcGxheShPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmICh2cC5Jc1NldHRpbmcoKSkNCi0Jew0KLQkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsNCi0NCi0JCWludCBuVlA7DQotCQl2cCA+PiBuVlA7CQ0KLQ0KLQkJaWYgKG1fYkRlbGF5KQ0KLQkJew0KLQkJCUFkZERlbGF5X0ludChGUF9ESVNQTEFZLCBuVlApOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCUZpZWxkOjpTZXREaXNwbGF5KG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgblZQKTsNCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsNCi0JCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5Ow0KLQkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsNCi0JCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7DQotDQotCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gKENQREZTREtfSW50ZXJGb3JtKiltX3BEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7DQotCQlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsNCi0NCi0JCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gcEludGVyRm9ybS0+R2V0V2lkZ2V0KEdldFNtYXJ0RmllbGRDb250cm9sKHBGb3JtRmllbGQpKTsNCi0JCWlmICghcFdpZGdldClyZXR1cm4gRkFMU0U7DQotDQotCQlGWF9EV09SRCBkd0ZsYWcgPSBwV2lkZ2V0LT5HZXRGbGFncygpOw0KLQ0KLQkJaWYgKEFOTk9URkxBR19JTlZJU0lCTEUgJiBkd0ZsYWcgfHwgQU5OT1RGTEFHX0hJRERFTiAmIGR3RmxhZykgDQotCQl7DQotCQkJdnAgPDwgKEZYX0lOVDMyKTE7DQotCQl9DQotCQllbHNlIA0KLQkJew0KLQkJCWlmIChBTk5PVEZMQUdfUFJJTlQgJiBkd0ZsYWcpDQotCQkJew0KLQkJCQlpZiAoQU5OT1RGTEFHX05PVklFVyAmIGR3RmxhZykNCi0JCQkJew0KLQkJCQkJdnAgPDwgKEZYX0lOVDMyKTM7DQotCQkJCX0NCi0JCQkJZWxzZQ0KLQkJCQl7DQotCQkJCQl2cCA8PCAoRlhfSU5UMzIpMDsNCi0JCQkJfQ0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQl2cCA8PCAoRlhfSU5UMzIpMjsNCi0JCQl9CQkJCQ0KLQkJfQ0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi12b2lkIEZpZWxkOjpTZXREaXNwbGF5KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgaW50IG51bWJlcikNCi17DQotCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gKENQREZTREtfSW50ZXJGb3JtKilwRG9jdW1lbnQtPkdldEludGVyRm9ybSgpOw0KLQlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsNCi0NCi0JQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCUdldEZvcm1GaWVsZHMocERvY3VtZW50LCBzd0ZpZWxkTmFtZSwgRmllbGRBcnJheSk7DQotDQotCWZvciAoaW50IGk9MCxpc3o9RmllbGRBcnJheS5HZXRTaXplKCk7IGk8aXN6OyBpKyspDQotCXsNCi0JCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdChpKTsNCi0JCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQkJaWYgKG5Db250cm9sSW5kZXggPCAwKQ0KLQkJew0KLQkJCUZYX0JPT0wgYlNldCA9IEZBTFNFOw0KLQkJCWZvciAoaW50IGo9MCxqc3ogPSBwRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCk7IGo8anN6OyBqKyspDQotCQkJew0KLQkJCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBwRm9ybUZpZWxkLT5HZXRDb250cm9sKGopOw0KLQkJCQlBU1NFUlQocEZvcm1Db250cm9sICE9IE5VTEwpOw0KLQ0KLQkJCQlpZiAoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSBwSW50ZXJGb3JtLT5HZXRXaWRnZXQocEZvcm1Db250cm9sKSkNCi0JCQkJew0KLQkJCQkJRlhfRFdPUkQgZHdGbGFnID0gcFdpZGdldC0+R2V0RmxhZ3MoKTsNCi0JCQkJCXN3aXRjaCAobnVtYmVyKQ0KLQkJCQkJew0KLQkJCQkJY2FzZSAwOg0KLQkJCQkJCWR3RmxhZyAmPSAofkFOTk9URkxBR19JTlZJU0lCTEUpOw0KLQkJCQkJCWR3RmxhZyAmPSAofkFOTk9URkxBR19ISURERU4pOw0KLQkJCQkJCWR3RmxhZyAmPSAofkFOTk9URkxBR19OT1ZJRVcpOw0KLQkJCQkJCWR3RmxhZyB8PSBBTk5PVEZMQUdfUFJJTlQ7CQkJCQkJCQ0KLQkJCQkJCWJyZWFrOw0KLQkJCQkJY2FzZSAxOg0KLQkJCQkJCWR3RmxhZyAmPSAofkFOTk9URkxBR19JTlZJU0lCTEUpOw0KLQkJCQkJCWR3RmxhZyAmPSAofkFOTk9URkxBR19OT1ZJRVcpOw0KLQkJCQkJCWR3RmxhZyB8PSAoQU5OT1RGTEFHX0hJRERFTiB8IEFOTk9URkxBR19QUklOVCk7DQotCQkJCQkJYnJlYWs7DQotCQkJCQljYXNlIDI6DQotCQkJCQkJZHdGbGFnICY9ICh+QU5OT1RGTEFHX0lOVklTSUJMRSk7DQotCQkJCQkJZHdGbGFnICY9ICh+QU5OT1RGTEFHX1BSSU5UKTsNCi0JCQkJCQlkd0ZsYWcgJj0gKH5BTk5PVEZMQUdfSElEREVOKTsNCi0JCQkJCQlkd0ZsYWcgJj0gKH5BTk5PVEZMQUdfTk9WSUVXKTsNCi0JCQkJCQlicmVhazsNCi0JCQkJCWNhc2UgMzoNCi0JCQkJCQlkd0ZsYWcgfD0gQU5OT1RGTEFHX05PVklFVzsNCi0JCQkJCQlkd0ZsYWcgfD0gQU5OT1RGTEFHX1BSSU5UOw0KLQkJCQkJCWR3RmxhZyAmPSAofkFOTk9URkxBR19ISURERU4pOw0KLQkJCQkJCWJyZWFrOw0KLQkJCQkJfQkNCi0NCi0JCQkJCWlmIChkd0ZsYWcgIT0gcFdpZGdldC0+R2V0RmxhZ3MoKSkNCi0JCQkJCXsNCi0JCQkJCQlwV2lkZ2V0LT5TZXRGbGFncyhkd0ZsYWcpOw0KLQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQkJDQotCQkJDQotCQkJaWYgKGJTZXQpIFVwZGF0ZUZvcm1GaWVsZChwRG9jdW1lbnQsIHBGb3JtRmllbGQsIFRSVUUsIEZBTFNFLCBUUlVFKTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlpZihuQ29udHJvbEluZGV4ID49IHBGb3JtRmllbGQtPkNvdW50Q29udHJvbHMoKSkgcmV0dXJuOw0KLQkJCWlmIChDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBwRm9ybUZpZWxkLT5HZXRDb250cm9sKG5Db250cm9sSW5kZXgpKQ0KLQkJCXsNCi0JCQkJaWYgKENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gcEludGVyRm9ybS0+R2V0V2lkZ2V0KHBGb3JtQ29udHJvbCkpDQotCQkJCXsNCi0NCi0JCQkJCUZYX0RXT1JEIGR3RmxhZyA9IHBXaWRnZXQtPkdldEZsYWdzKCk7DQotCQkJCQlzd2l0Y2ggKG51bWJlcikNCi0JCQkJCXsNCi0JCQkJCWNhc2UgMDoNCi0JCQkJCQlkd0ZsYWcgJj0gKH5BTk5PVEZMQUdfSU5WSVNJQkxFKTsNCi0JCQkJCQlkd0ZsYWcgJj0gKH5BTk5PVEZMQUdfSElEREVOKTsNCi0JCQkJCQlkd0ZsYWcgJj0gKH5BTk5PVEZMQUdfTk9WSUVXKTsNCi0JCQkJCQlkd0ZsYWcgfD0gQU5OT1RGTEFHX1BSSU5UOwkJCQkJCQkNCi0JCQkJCQlicmVhazsNCi0JCQkJCWNhc2UgMToNCi0JCQkJCQlkd0ZsYWcgJj0gKH5BTk5PVEZMQUdfSU5WSVNJQkxFKTsNCi0JCQkJCQlkd0ZsYWcgJj0gKH5BTk5PVEZMQUdfTk9WSUVXKTsNCi0JCQkJCQlkd0ZsYWcgfD0gKEFOTk9URkxBR19ISURERU4gfCBBTk5PVEZMQUdfUFJJTlQpOw0KLQkJCQkJCWJyZWFrOw0KLQkJCQkJY2FzZSAyOg0KLQkJCQkJCWR3RmxhZyAmPSAofkFOTk9URkxBR19JTlZJU0lCTEUpOw0KLQkJCQkJCWR3RmxhZyAmPSAofkFOTk9URkxBR19QUklOVCk7DQotCQkJCQkJZHdGbGFnICY9ICh+QU5OT1RGTEFHX0hJRERFTik7DQotCQkJCQkJZHdGbGFnICY9ICh+QU5OT1RGTEFHX05PVklFVyk7DQotCQkJCQkJYnJlYWs7DQotCQkJCQljYXNlIDM6DQotCQkJCQkJZHdGbGFnIHw9IEFOTk9URkxBR19OT1ZJRVc7DQotCQkJCQkJZHdGbGFnIHw9IEFOTk9URkxBR19QUklOVDsNCi0JCQkJCQlkd0ZsYWcgJj0gKH5BTk5PVEZMQUdfSElEREVOKTsNCi0JCQkJCQlicmVhazsNCi0JCQkJCX0JDQotCQkJCQlpZiAoZHdGbGFnICE9IHBXaWRnZXQtPkdldEZsYWdzKCkpDQotCQkJCQl7DQotCQkJCQkJcFdpZGdldC0+U2V0RmxhZ3MoZHdGbGFnKTsNCi0JCQkJCQlVcGRhdGVGb3JtQ29udHJvbChwRG9jdW1lbnQsIHBGb3JtQ29udHJvbCwgVFJVRSwgRkFMU0UsIFRSVUUpOw0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQl9DQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OmRvYyhPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wSlNEb2MgIT0gTlVMTCk7DQotDQotCWlmICghdnAuSXNHZXR0aW5nKCkpcmV0dXJuIEZBTFNFOw0KLQ0KLQl2cCA8PCAoQ0pTX09iamVjdCopKCptX3BKU0RvYyk7DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjplZGl0YWJsZShPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmICh2cC5Jc1NldHRpbmcoKSkNCi0Jew0KLQkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsNCi0NCi0JCWJvb2wgYlZQOw0KLQkJdnAgPj4gYlZQOw0KLQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLCBGaWVsZEFycmF5KTsNCi0JCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7DQotDQotCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfQ09NQk9CT1gpDQotCQkJcmV0dXJuIEZBTFNFOw0KLQ0KLQkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkRmxhZ3MoKSAmIEZJRUxERkxBR19FRElUKQ0KLQkJCXZwIDw8IHRydWU7DQotCQllbHNlDQotCQkJdnAgPDwgZmFsc2U7DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OmV4cG9ydFZhbHVlcyhPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5Ow0KLQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOw0KLQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX0NIRUNLQk9YICYmIA0KLQkJcEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX1JBRElPQlVUVE9OKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQ0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsJDQotCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOw0KLQkJaWYgKCF2cC5Jc0FycmF5T2JqZWN0KCkpcmV0dXJuIEZBTFNFOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ0pTX0FycmF5IEV4cG9ydFZhbHVzQXJyYXkobV9pc29sYXRlKTsNCi0NCi0JCWlmIChtX25Gb3JtQ29udHJvbEluZGV4IDwgMCkNCi0JCXsNCi0JCQlmb3IgKGludCBpPTAsc3o9cEZvcm1GaWVsZC0+Q291bnRDb250cm9scygpOyBpPHN6OyBpKyspDQotCQkJew0KLQkJCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBwRm9ybUZpZWxkLT5HZXRDb250cm9sKGkpOw0KLQkJCQlBU1NFUlQocEZvcm1Db250cm9sICE9IE5VTEwpOw0KLQ0KLQkJCQlFeHBvcnRWYWx1c0FycmF5LlNldEVsZW1lbnQoaSwgQ0pTX1ZhbHVlKG1faXNvbGF0ZSwoRlhfTFBDV1NUUilwRm9ybUNvbnRyb2wtPkdldEV4cG9ydFZhbHVlKCkpKTsNCi0JCQl9DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJaWYobV9uRm9ybUNvbnRyb2xJbmRleCA+PSBwRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCkpIHJldHVybiBGQUxTRTsNCi0JCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBwRm9ybUZpZWxkLT5HZXRDb250cm9sKG1fbkZvcm1Db250cm9sSW5kZXgpOw0KLQkJCWlmICghcEZvcm1Db250cm9sKSByZXR1cm4gRkFMU0U7DQotDQotCQkJRXhwb3J0VmFsdXNBcnJheS5TZXRFbGVtZW50KDAsIENKU19WYWx1ZShtX2lzb2xhdGUsKEZYX0xQQ1dTVFIpcEZvcm1Db250cm9sLT5HZXRFeHBvcnRWYWx1ZSgpKSk7DQotCQl9DQotDQotCQl2cCA8PCBFeHBvcnRWYWx1c0FycmF5Ow0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjpmaWxlU2VsZWN0KE9CSl9QUk9QX1BBUkFNUykNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsIEZpZWxkQXJyYXkpOw0KLQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX1RFWFRGSUVMRCkNCi0JCXJldHVybiBGQUxTRTsNCi0NCi0JaWYgKHZwLklzU2V0dGluZygpKQ0KLQl7DQotCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJYm9vbCBiVlA7DQotCQl2cCA+PiBiVlA7DQotDQotCX0NCi0JZWxzZQ0KLQl7DQotCQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRGbGFncygpICYgRklFTERGTEFHX0ZJTEVTRUxFQ1QpDQotCQkJdnAgPDwgdHJ1ZTsNCi0JCWVsc2UNCi0JCQl2cCA8PCBmYWxzZTsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBGaWVsZDo6ZmlsbENvbG9yKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JQ0pTX0FycmF5IGNyQXJyYXkobV9pc29sYXRlKTsNCi0NCi0JQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7DQotCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7DQotDQotCWlmICh2cC5Jc1NldHRpbmcoKSkNCi0Jew0KLQkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsNCi0JCWlmICghdnAuSXNBcnJheU9iamVjdCgpKSByZXR1cm4gRkFMU0U7DQotDQotCQl2cCA+PiBjckFycmF5Ow0KLQ0KLQkJQ1BXTF9Db2xvciBjb2xvcjsNCi0JCWNvbG9yOjpDb252ZXJ0QXJyYXlUb1BXTENvbG9yKGNyQXJyYXksIGNvbG9yKTsNCi0NCi0JCWlmIChtX2JEZWxheSkNCi0JCXsNCi0JCQlBZGREZWxheV9Db2xvcihGUF9GSUxMQ09MT1IsIGNvbG9yKTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlGaWVsZDo6U2V0RmlsbENvbG9yKG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgY29sb3IpOw0KLQkJfQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOw0KLQkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotDQotCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBHZXRTbWFydEZpZWxkQ29udHJvbChwRm9ybUZpZWxkKTsNCi0JCWlmICghcEZvcm1Db250cm9sKXJldHVybiBGQUxTRTsNCi0NCi0JCWludCBpQ29sb3JUeXBlOw0KLQkJcEZvcm1Db250cm9sLT5HZXRCYWNrZ3JvdW5kQ29sb3IoaUNvbG9yVHlwZSk7DQotDQotCQlDUFdMX0NvbG9yIGNvbG9yOw0KLQ0KLQkJaWYgKGlDb2xvclR5cGUgPT0gQ09MT1JUWVBFX1RSQU5TUEFSRU5UKQ0KLQkJew0KLQkJCWNvbG9yID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfVFJBTlNQQVJFTlQpOw0KLQkJfQ0KLQkJZWxzZSBpZiAoaUNvbG9yVHlwZSA9PSBDT0xPUlRZUEVfR1JBWSkNCi0JCXsNCi0JCQljb2xvciA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksIHBGb3JtQ29udHJvbC0+R2V0T3JpZ2luYWxCYWNrZ3JvdW5kQ29sb3IoMCkpOw0KLQkJfQ0KLQkJZWxzZSBpZiAoaUNvbG9yVHlwZSA9PSBDT0xPUlRZUEVfUkdCKQ0KLQkJew0KLQkJCWNvbG9yID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfUkdCLCBwRm9ybUNvbnRyb2wtPkdldE9yaWdpbmFsQmFja2dyb3VuZENvbG9yKDApLA0KLQkJCQlwRm9ybUNvbnRyb2wtPkdldE9yaWdpbmFsQmFja2dyb3VuZENvbG9yKDEpLA0KLQkJCQlwRm9ybUNvbnRyb2wtPkdldE9yaWdpbmFsQmFja2dyb3VuZENvbG9yKDIpKTsNCi0JCX0NCi0JCWVsc2UgaWYgKGlDb2xvclR5cGUgPT0gQ09MT1JUWVBFX0NNWUspDQotCQl7DQotCQkJY29sb3IgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9DTVlLLCBwRm9ybUNvbnRyb2wtPkdldE9yaWdpbmFsQmFja2dyb3VuZENvbG9yKDApLA0KLQkJCQlwRm9ybUNvbnRyb2wtPkdldE9yaWdpbmFsQmFja2dyb3VuZENvbG9yKDEpLA0KLQkJCQlwRm9ybUNvbnRyb2wtPkdldE9yaWdpbmFsQmFja2dyb3VuZENvbG9yKDIpLA0KLQkJCQlwRm9ybUNvbnRyb2wtPkdldE9yaWdpbmFsQmFja2dyb3VuZENvbG9yKDMpKTsNCi0JCX0NCi0JCWVsc2UNCi0JCQlyZXR1cm4gRkFMU0U7DQotDQotCQljb2xvcjo6Q29udmVydFBXTENvbG9yVG9BcnJheShjb2xvciwgY3JBcnJheSk7DQotICAgICAgICB2cCAgPDwgIGNyQXJyYXk7DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OlNldEZpbGxDb2xvcihDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yKQ0KLXsNCi0JLy9Ob3Qgc3VwcG9ydGVkLg0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjpoaWRkZW4oT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7DQotDQotCQlib29sIGJWUDsNCi0JCXZwID4+IGJWUDsNCi0NCi0JCWlmIChtX2JEZWxheSkNCi0JCXsNCi0JCQlBZGREZWxheV9Cb29sKEZQX0hJRERFTiwgYlZQKTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlGaWVsZDo6U2V0SGlkZGVuKG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgYlZQKTsNCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsNCi0JCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5Ow0KLQkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsNCi0JCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7DQotDQotCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gKENQREZTREtfSW50ZXJGb3JtKiltX3BEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7DQotCQlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsNCi0NCi0JCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gcEludGVyRm9ybS0+R2V0V2lkZ2V0KEdldFNtYXJ0RmllbGRDb250cm9sKHBGb3JtRmllbGQpKTsNCi0JCWlmICghcFdpZGdldCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJRlhfRFdPUkQgZHdGbGFncyA9IHBXaWRnZXQtPkdldEZsYWdzKCk7DQotDQotCQlpZiAoQU5OT1RGTEFHX0lOVklTSUJMRSAmIGR3RmxhZ3MgfHwgQU5OT1RGTEFHX0hJRERFTiAmIGR3RmxhZ3MpIA0KLQkJew0KLQkJCXZwIDw8IHRydWU7DQotCQl9DQotCQllbHNlIA0KLQkJCXZwIDw8IGZhbHNlOw0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi12b2lkIEZpZWxkOjpTZXRIaWRkZW4oQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBib29sIGIpDQotew0KLQlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsNCi0JQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7DQotDQotCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5Ow0KLQlHZXRGb3JtRmllbGRzKHBEb2N1bWVudCwgc3dGaWVsZE5hbWUsIEZpZWxkQXJyYXkpOw0KLQ0KLQlmb3IgKGludCBpPTAsaXN6PUZpZWxkQXJyYXkuR2V0U2l6ZSgpOyBpPGlzejsgaSsrKQ0KLQl7DQotCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoaSk7DQotCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JCWlmIChuQ29udHJvbEluZGV4IDwgMCkNCi0JCXsNCi0JCQlGWF9CT09MIGJTZXQgPSBGQUxTRTsNCi0JCQlmb3IgKGludCBqPTAsanN6ID0gcEZvcm1GaWVsZC0+Q291bnRDb250cm9scygpOyBqPGpzejsgaisrKQ0KLQkJCXsNCi0JCQkJaWYgKENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gcEludGVyRm9ybS0+R2V0V2lkZ2V0KHBGb3JtRmllbGQtPkdldENvbnRyb2woaikpKQ0KLQkJCQl7CQkJCQkNCi0JCQkJCUZYX0RXT1JEIGR3RmxhZ3MgPSBwV2lkZ2V0LT5HZXRGbGFncygpOw0KLQkJCQkJDQotCQkJCQlpZiAoYikNCi0JCQkJCXsNCi0JCQkJCQlkd0ZsYWdzICY9ICh+QU5OT1RGTEFHX0lOVklTSUJMRSk7DQotCQkJCQkJZHdGbGFncyAmPSAofkFOTk9URkxBR19OT1ZJRVcpOw0KLQkJCQkJCWR3RmxhZ3MgfD0gKEFOTk9URkxBR19ISURERU4gfCBBTk5PVEZMQUdfUFJJTlQpOw0KLQkJCQkJfQ0KLQkJCQkJZWxzZQ0KLQkJCQkJew0KLQkJCQkJCWR3RmxhZ3MgJj0gKH5BTk5PVEZMQUdfSU5WSVNJQkxFKTsNCi0JCQkJCQlkd0ZsYWdzICY9ICh+QU5OT1RGTEFHX0hJRERFTik7DQotCQkJCQkJZHdGbGFncyAmPSAofkFOTk9URkxBR19OT1ZJRVcpOw0KLQkJCQkJCWR3RmxhZ3MgfD0gQU5OT1RGTEFHX1BSSU5UOwkNCi0JCQkJCX0NCi0NCi0JCQkJCWlmIChkd0ZsYWdzICE9IHBXaWRnZXQtPkdldEZsYWdzKCkpDQotCQkJCQl7DQotCQkJCQkJcFdpZGdldC0+U2V0RmxhZ3MoZHdGbGFncyk7CQ0KLQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQ0KLQ0KLQkJCWlmIChiU2V0KQ0KLQkJCQlVcGRhdGVGb3JtRmllbGQocERvY3VtZW50LCBwRm9ybUZpZWxkLCBUUlVFLCBGQUxTRSwgVFJVRSk7CQ0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCWlmKG5Db250cm9sSW5kZXggPj0gcEZvcm1GaWVsZC0+Q291bnRDb250cm9scygpKSByZXR1cm47DQotCQkJaWYgKENQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCA9IHBGb3JtRmllbGQtPkdldENvbnRyb2wobkNvbnRyb2xJbmRleCkpDQotCQkJew0KLQkJCQlpZiAoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSBwSW50ZXJGb3JtLT5HZXRXaWRnZXQocEZvcm1Db250cm9sKSkNCi0JCQkJew0KLQkJCQkJRlhfRFdPUkQgZHdGbGFncyA9IHBXaWRnZXQtPkdldEZsYWdzKCk7DQotCQkJCQkNCi0JCQkJCWlmIChiKQ0KLQkJCQkJew0KLQkJCQkJCWR3RmxhZ3MgJj0gKH5BTk5PVEZMQUdfSU5WSVNJQkxFKTsNCi0JCQkJCQlkd0ZsYWdzICY9ICh+QU5OT1RGTEFHX05PVklFVyk7DQotCQkJCQkJZHdGbGFncyB8PSAoQU5OT1RGTEFHX0hJRERFTiB8IEFOTk9URkxBR19QUklOVCk7DQotCQkJCQl9DQotCQkJCQllbHNlDQotCQkJCQl7DQotCQkJCQkJZHdGbGFncyAmPSAofkFOTk9URkxBR19JTlZJU0lCTEUpOw0KLQkJCQkJCWR3RmxhZ3MgJj0gKH5BTk5PVEZMQUdfSElEREVOKTsNCi0JCQkJCQlkd0ZsYWdzICY9ICh+QU5OT1RGTEFHX05PVklFVyk7DQotCQkJCQkJZHdGbGFncyB8PSBBTk5PVEZMQUdfUFJJTlQ7CQ0KLQkJCQkJfQ0KLQ0KLQkJCQkJaWYgKGR3RmxhZ3MgIT0gcFdpZGdldC0+R2V0RmxhZ3MoKSkNCi0JCQkJCXsNCi0JCQkJCQlwV2lkZ2V0LT5TZXRGbGFncyhkd0ZsYWdzKTsJDQotCQkJCQkJVXBkYXRlRm9ybUNvbnRyb2wocERvY3VtZW50LCBwRm9ybUNvbnRyb2wsIFRSVUUsIEZBTFNFLCBUUlVFKTsJDQotCQkJCQl9DQotCQkJCX0NCi0JCQl9DQotCQl9DQotCX0NCi19DQotDQotRlhfQk9PTCBGaWVsZDo6aGlnaGxpZ2h0KE9CSl9QUk9QX1BBUkFNUykNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKHZwLklzU2V0dGluZygpKQ0KLQl7DQotCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJQ0ZYX0J5dGVTdHJpbmcgc3RyTW9kZTsNCi0JCXZwID4+IHN0ck1vZGU7DQotDQotCQlpZiAobV9iRGVsYXkpDQotCQl7DQotCQkJQWRkRGVsYXlfU3RyaW5nKEZQX0hJR0hMSUdIVCwgc3RyTW9kZSk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJRmllbGQ6OlNldEhpZ2hsaWdodChtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIHN0ck1vZGUpOw0KLQkJfQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOw0KLQkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0JCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsNCi0JCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9QVVNIQlVUVE9OKQ0KLQkJCXJldHVybiBGQUxTRTsNCi0NCi0JCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCA9IEdldFNtYXJ0RmllbGRDb250cm9sKHBGb3JtRmllbGQpOw0KLQkJaWYgKCFwRm9ybUNvbnRyb2wpIHJldHVybiBGQUxTRTsNCi0NCi0JCWludCBlSE0gPSBwRm9ybUNvbnRyb2wtPkdldEhpZ2hsaWdodGluZ01vZGUoKTsNCi0JCXN3aXRjaCAoZUhNKQ0KLQkJew0KLQkJY2FzZSBDUERGX0Zvcm1Db250cm9sOjpOb25lOg0KLQkJCXZwICA8PCAgKEZYX0xQQ1dTVFIpTCJub25lIjsNCi0JCQlicmVhazsNCi0JCWNhc2UgQ1BERl9Gb3JtQ29udHJvbDo6UHVzaDoNCi0JCQl2cCAgPDwgIChGWF9MUENXU1RSKUwicHVzaCI7DQotCQkJYnJlYWs7DQotCQljYXNlIENQREZfRm9ybUNvbnRyb2w6OkludmVydDoNCi0JCQl2cCAgPDwgIChGWF9MUENXU1RSKUwiaW52ZXJ0IjsNCi0JCQlicmVhazsNCi0JCWNhc2UgQ1BERl9Gb3JtQ29udHJvbDo6T3V0bGluZToNCi0JCQl2cCAgPDwgIChGWF9MUENXU1RSKUwib3V0bGluZSI7DQotCQkJYnJlYWs7DQotCQljYXNlIENQREZfRm9ybUNvbnRyb2w6OlRvZ2dsZToNCi0JCQkgdnAgIDw8ICAoRlhfTFBDV1NUUilMInRvZ2dsZSI7DQotCQkJIGJyZWFrOw0KLQkJfQ0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi12b2lkIEZpZWxkOjpTZXRIaWdobGlnaHQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyaW5nKQ0KLXsNCi0JLy9Ob3Qgc3VwcG9ydGVkLg0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjpsaW5lV2lkdGgoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7DQotDQotCQlpbnQgaVdpZHRoOw0KLQkJdnAgPj4gaVdpZHRoOw0KLQ0KLQkJaWYgKG1fYkRlbGF5KQ0KLQkJew0KLQkJCUFkZERlbGF5X0ludChGUF9MSU5FV0lEVEgsIGlXaWR0aCk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJRmllbGQ6OlNldExpbmVXaWR0aChtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIGlXaWR0aCk7DQotCQl9DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsNCi0JCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7DQotCQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOw0KLQkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotDQotCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBHZXRTbWFydEZpZWxkQ29udHJvbChwRm9ybUZpZWxkKTsNCi0JCWlmICghcEZvcm1Db250cm9sKSByZXR1cm4gRkFMU0U7DQotDQotCQlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopbV9wRG9jdW1lbnQtPkdldEludGVyRm9ybSgpOw0KLQkJQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7DQotDQotCQlpZighcEZvcm1GaWVsZC0+Q291bnRDb250cm9scygpKSByZXR1cm4gRkFMU0U7DQotDQotCQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IHBJbnRlckZvcm0tPkdldFdpZGdldChwRm9ybUZpZWxkLT5HZXRDb250cm9sKDApKTsNCi0JCWlmICghcFdpZGdldCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJdnAgPDwgKEZYX0lOVDMyKXBXaWRnZXQtPkdldEJvcmRlcldpZHRoKCk7DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OlNldExpbmVXaWR0aChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGludCBudW1iZXIpDQotew0KLQlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsNCi0JQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7DQotDQotCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5Ow0KLQlHZXRGb3JtRmllbGRzKHBEb2N1bWVudCwgc3dGaWVsZE5hbWUsIEZpZWxkQXJyYXkpOw0KLQ0KLQlmb3IgKGludCBpPTAsaXN6PUZpZWxkQXJyYXkuR2V0U2l6ZSgpOyBpPGlzejsgaSsrKQ0KLQl7DQotCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoaSk7DQotCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JCWlmIChuQ29udHJvbEluZGV4IDwgMCkNCi0JCXsNCi0JCQlGWF9CT09MIGJTZXQgPSBGQUxTRTsNCi0JCQlmb3IgKGludCBqPTAsanN6PXBGb3JtRmllbGQtPkNvdW50Q29udHJvbHMoKTsgajxqc3o7IGorKykNCi0JCQl7DQotCQkJCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCA9IHBGb3JtRmllbGQtPkdldENvbnRyb2woaik7DQotCQkJCUFTU0VSVChwRm9ybUNvbnRyb2wgIT0gTlVMTCk7DQotCQkJCQ0KLQkJCQlpZiAoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSBwSW50ZXJGb3JtLT5HZXRXaWRnZXQocEZvcm1Db250cm9sKSkNCi0JCQkJew0KLQkJCQkJaWYgKG51bWJlciAhPSBwV2lkZ2V0LT5HZXRCb3JkZXJXaWR0aCgpKQ0KLQkJCQkJew0KLQkJCQkJCXBXaWRnZXQtPlNldEJvcmRlcldpZHRoKG51bWJlcik7DQotCQkJCQkJYlNldCA9IFRSVUU7DQotCQkJCQl9DQotCQkJCX0NCi0JCQl9DQotCQkJaWYgKGJTZXQpIFVwZGF0ZUZvcm1GaWVsZChwRG9jdW1lbnQsIHBGb3JtRmllbGQsIFRSVUUsIFRSVUUsIFRSVUUpOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCWlmKG5Db250cm9sSW5kZXggPj0gcEZvcm1GaWVsZC0+Q291bnRDb250cm9scygpKSByZXR1cm47DQotCQkJaWYgKENQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCA9IHBGb3JtRmllbGQtPkdldENvbnRyb2wobkNvbnRyb2xJbmRleCkpDQotCQkJew0KLQkJCQlpZiAoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSBwSW50ZXJGb3JtLT5HZXRXaWRnZXQocEZvcm1Db250cm9sKSkNCi0JCQkJew0KLQkJCQkJaWYgKG51bWJlciAhPSBwV2lkZ2V0LT5HZXRCb3JkZXJXaWR0aCgpKQ0KLQkJCQkJew0KLQkJCQkJCXBXaWRnZXQtPlNldEJvcmRlcldpZHRoKG51bWJlcik7DQotCQkJCQkJVXBkYXRlRm9ybUNvbnRyb2wocERvY3VtZW50LCBwRm9ybUNvbnRyb2wsIFRSVUUsIFRSVUUsIFRSVUUpOw0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQl9DQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6Om11bHRpbGluZShPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmICh2cC5Jc1NldHRpbmcoKSkNCi0Jew0KLQkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsNCi0NCi0JCWJvb2wgYlZQOw0KLQkJdnAgPj4gYlZQOw0KLQ0KLQkJaWYgKG1fYkRlbGF5KQ0KLQkJew0KLQkJCUFkZERlbGF5X0Jvb2woRlBfTVVMVElMSU5FLCBiVlApOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCUZpZWxkOjpTZXRNdWx0aWxpbmUobV9wRG9jdW1lbnQsIG1fRmllbGROYW1lLCBtX25Gb3JtQ29udHJvbEluZGV4LCBiVlApOw0KLQkJfQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLCBGaWVsZEFycmF5KTsNCi0JCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7DQotDQotCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfVEVYVEZJRUxEKQ0KLQkJCXJldHVybiBGQUxTRTsNCi0NCi0JCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZEZsYWdzKCkgJiBGSUVMREZMQUdfTVVMVElMSU5FKQ0KLQkJCXZwIDw8IHRydWU7DQotCQllbHNlDQotCQkJdnAgPDwgZmFsc2U7DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OlNldE11bHRpbGluZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGJvb2wgYikNCi17DQotCS8vTm90IHN1cHBvcnRlZC4NCi19DQotDQotRlhfQk9PTCBGaWVsZDo6bXVsdGlwbGVTZWxlY3Rpb24oT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7DQotDQotCQlib29sIGJWUDsNCi0JCXZwID4+IGJWUDsNCi0NCi0JCWlmIChtX2JEZWxheSkNCi0JCXsNCi0JCQlBZGREZWxheV9Cb29sKEZQX01VTFRJUExFU0VMRUNUSU9OLCBiVlApOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCUZpZWxkOjpTZXRNdWx0aXBsZVNlbGVjdGlvbihtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIGJWUCk7DQotCQl9DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsNCi0JCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7DQotCQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOw0KLQkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotDQotCQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX0xJU1RCT1gpDQotCQkJcmV0dXJuIEZBTFNFOw0KLQ0KLQkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkRmxhZ3MoKSAmIEZJRUxERkxBR19NVUxUSVNFTEVDVCkNCi0JCQl2cCA8PCB0cnVlOw0KLQkJZWxzZQ0KLQkJCXZwIDw8IGZhbHNlOw0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi12b2lkIEZpZWxkOjpTZXRNdWx0aXBsZVNlbGVjdGlvbihDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGJvb2wgYikNCi17DQotCS8vTm90IHN1cHBvcnRlZC4NCi19DQotDQotRlhfQk9PTCBGaWVsZDo6bmFtZShPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlpZiAoIXZwLklzR2V0dGluZygpKSByZXR1cm4gRkFMU0U7DQotDQotCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5Ow0KLQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLCBGaWVsZEFycmF5KTsNCi0JaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0gICAJdnAgPDwgbV9GaWVsZE5hbWU7DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjpudW1JdGVtcyhPQkpfUFJPUF9QQVJBTVMpDQotewkNCi0JQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsIEZpZWxkQXJyYXkpOw0KLQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX0NPTUJPQk9YICYmDQotCQlwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfTElTVEJPWCkNCi0JCXJldHVybiBGQUxTRTsNCi0NCi0JaWYgKCF2cC5Jc0dldHRpbmcoKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQl2cCA8PCAoRlhfSU5UMzIpcEZvcm1GaWVsZC0+Q291bnRPcHRpb25zKCk7DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjpwYWdlKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCWlmICghdnAuSXNHZXR0aW5nKCkpIHJldHVybiBGQUxTRTsNCi0NCi0JQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsIEZpZWxkQXJyYXkpOw0KLQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCWlmICghcEZvcm1GaWVsZCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gKENQREZTREtfSW50ZXJGb3JtKiltX3BEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7DQotCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOw0KLQ0KLQlDRlhfUHRyQXJyYXkgd2lkZ2V0QXJyYXk7DQotCXBJbnRlckZvcm0tPkdldFdpZGdldHMocEZvcm1GaWVsZCwgd2lkZ2V0QXJyYXkpOw0KLQ0KLQlpZiAod2lkZ2V0QXJyYXkuR2V0U2l6ZSgpID4gMCkNCi0Jew0KLQkJQ0pTX0FycmF5IFBhZ2VBcnJheShtX2lzb2xhdGUpOw0KLQ0KLQkJZm9yIChpbnQgaT0wLHN6PXdpZGdldEFycmF5LkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQkJew0KLQkJCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gKENQREZTREtfV2lkZ2V0Kil3aWRnZXRBcnJheS5HZXRBdChpKTsNCi0JCQlBU1NFUlQocFdpZGdldCAhPSBOVUxMKTsNCi0NCi0JCQlDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcgPSBwV2lkZ2V0LT5HZXRQYWdlVmlldygpOw0KLQkJCWlmKCFwUGFnZVZpZXcpDQotCQkJCXJldHVybiBGQUxTRTsNCi0NCi0JCQlQYWdlQXJyYXkuU2V0RWxlbWVudChpLCBDSlNfVmFsdWUobV9pc29sYXRlLChGWF9JTlQzMilwUGFnZVZpZXctPkdldFBhZ2VJbmRleCgpKSk7DQotCQl9DQotDQotCQl2cCA8PCBQYWdlQXJyYXk7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQl2cCA8PCAoRlhfSU5UMzIpIC0xOw0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjpwYXNzd29yZChPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmICh2cC5Jc1NldHRpbmcoKSkNCi0Jew0KLQkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsNCi0NCi0JCWJvb2wgYlZQOw0KLQkJdnAgPj4gYlZQOw0KLQ0KLQkJaWYgKG1fYkRlbGF5KQ0KLQkJew0KLQkJCUFkZERlbGF5X0Jvb2woRlBfUEFTU1dPUkQsIGJWUCk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJRmllbGQ6OlNldFBhc3N3b3JkKG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgYlZQKTsNCi0JCX0JDQotCX0NCi0JZWxzZQ0KLQl7DQotCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsNCi0JCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7DQotCQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOw0KLQkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotDQotCQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX1RFWFRGSUVMRCkNCi0JCQlyZXR1cm4gRkFMU0U7DQotDQotCQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRGbGFncygpICYgRklFTERGTEFHX1BBU1NXT1JEKQ0KLQkJCXZwIDw8IHRydWU7DQotCQllbHNlDQotCQkJdnAgPDwgZmFsc2U7DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OlNldFBhc3N3b3JkKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgYm9vbCBiKQ0KLXsNCi0JLy9Ob3Qgc3VwcG9ydGVkLg0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjpwcmludChPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gKENQREZTREtfSW50ZXJGb3JtKiltX3BEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7DQotCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOw0KLQ0KLQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsNCi0JR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSwgRmllbGRBcnJheSk7DQotCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7DQotDQotCWlmICh2cC5Jc1NldHRpbmcoKSkNCi0Jew0KLQkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsNCi0NCi0JCWJvb2wgYlZQOw0KLQkJdnAgPj4gYlZQOw0KLQ0KLQkJZm9yIChpbnQgaT0wLGlzej1GaWVsZEFycmF5LkdldFNpemUoKTsgaTxpc3o7IGkrKykNCi0JCXsNCi0JCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoaSk7DQotCQkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotDQotCQkJaWYgKG1fbkZvcm1Db250cm9sSW5kZXggPCAwKQ0KLQkJCXsNCi0JCQkJRlhfQk9PTCBiU2V0ID0gRkFMU0U7DQotCQkJCWZvciAoaW50IGo9MCxqc3ogPSBwRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCk7IGo8anN6OyBqKyspDQotCQkJCXsNCi0JCQkJCWlmIChDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IHBJbnRlckZvcm0tPkdldFdpZGdldChwRm9ybUZpZWxkLT5HZXRDb250cm9sKGopKSkNCi0JCQkJCXsNCi0JCQkJCQlGWF9EV09SRCBkd0ZsYWdzID0gcFdpZGdldC0+R2V0RmxhZ3MoKTsNCi0JCQkJCQlpZiAoYlZQKQ0KLQkJCQkJCQlkd0ZsYWdzIHw9IEFOTk9URkxBR19QUklOVDsNCi0JCQkJCQllbHNlDQotCQkJCQkJCWR3RmxhZ3MgJj0gfkFOTk9URkxBR19QUklOVDsNCi0NCi0JCQkJCQlpZiAoZHdGbGFncyAhPSBwV2lkZ2V0LT5HZXRGbGFncygpKQ0KLQkJCQkJCXsNCi0JCQkJCQkJcFdpZGdldC0+U2V0RmxhZ3MoZHdGbGFncyk7DQotCQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJCX0NCi0JCQkJCX0NCi0JCQkJfQ0KLQ0KLQkJCQlpZiAoYlNldCkNCi0JCQkJCVVwZGF0ZUZvcm1GaWVsZChtX3BEb2N1bWVudCwgcEZvcm1GaWVsZCwgVFJVRSwgRkFMU0UsIFRSVUUpOw0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQlpZihtX25Gb3JtQ29udHJvbEluZGV4ID49IHBGb3JtRmllbGQtPkNvdW50Q29udHJvbHMoKSkgcmV0dXJuIEZBTFNFOw0KLQkJCQlpZiAoQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sID0gcEZvcm1GaWVsZC0+R2V0Q29udHJvbChtX25Gb3JtQ29udHJvbEluZGV4KSkNCi0JCQkJew0KLQkJCQkJaWYgKENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gcEludGVyRm9ybS0+R2V0V2lkZ2V0KHBGb3JtQ29udHJvbCkpDQotCQkJCQl7DQotCQkJCQkJRlhfRFdPUkQgZHdGbGFncyA9IHBXaWRnZXQtPkdldEZsYWdzKCk7DQotCQkJCQkJaWYgKGJWUCkNCi0JCQkJCQkJZHdGbGFncyB8PSBBTk5PVEZMQUdfUFJJTlQ7DQotCQkJCQkJZWxzZQ0KLQkJCQkJCQlkd0ZsYWdzICY9IH5BTk5PVEZMQUdfUFJJTlQ7DQotDQotCQkJCQkJaWYgKGR3RmxhZ3MgIT0gcFdpZGdldC0+R2V0RmxhZ3MoKSkNCi0JCQkJCQl7DQotCQkJCQkJCXBXaWRnZXQtPlNldEZsYWdzKGR3RmxhZ3MpOw0KLQkJCQkJCQlVcGRhdGVGb3JtQ29udHJvbChtX3BEb2N1bWVudCwgcEZvcm1GaWVsZC0+R2V0Q29udHJvbChtX25Gb3JtQ29udHJvbEluZGV4KSwgVFJVRSwgRkFMU0UsIFRSVUUpOw0KLQkJCQkJCX0NCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCX0NCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsNCi0JCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsNCi0JCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQkJDQotCQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IHBJbnRlckZvcm0tPkdldFdpZGdldChHZXRTbWFydEZpZWxkQ29udHJvbChwRm9ybUZpZWxkKSk7DQotCQlpZiAoIXBXaWRnZXQpIHJldHVybiBGQUxTRTsNCi0NCi0JCWlmIChwV2lkZ2V0LT5HZXRGbGFncygpICYgQU5OT1RGTEFHX1BSSU5UKQ0KLQkJCXZwIDw8IHRydWU7DQotCQllbHNlDQotCQkJdnAgPDwgZmFsc2U7DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OnJhZGlvc0luVW5pc29uKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7DQotCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7DQotDQotCWlmICh2cC5Jc1NldHRpbmcoKSkNCi0Jew0KLQkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsNCi0NCi0JCWJvb2wgYlZQOw0KLQkJdnAgPj4gYlZQOw0KLQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOw0KLQkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotDQotCQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX1JBRElPQlVUVE9OKQ0KLQkJCXJldHVybiBGQUxTRTsNCi0NCi0JCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZEZsYWdzKCkgJiBGSUVMREZMQUdfUkFESU9TSU5VTklTT04pDQotCQkJdnAgPDwgdHJ1ZTsNCi0JCWVsc2UNCi0JCQl2cCA8PCBmYWxzZTsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBGaWVsZDo6cmVhZG9ubHkoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsNCi0JR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsNCi0JaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0JaWYgKHZwLklzU2V0dGluZygpKQ0KLQl7DQotCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJYm9vbCBiVlA7DQotCQl2cCA+PiBiVlA7DQotDQotCX0NCi0JZWxzZQ0KLQl7DQotCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZEZsYWdzKCkgJiBGSUVMREZMQUdfUkVBRE9OTFkpDQotCQkJdnAgPDwgdHJ1ZTsNCi0JCWVsc2UNCi0JCQl2cCA8PCBmYWxzZTsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBGaWVsZDo6cmVjdChPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmICh2cC5Jc1NldHRpbmcoKSkNCi0Jew0KLQkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsNCi0JCWlmICghdnAuSXNBcnJheU9iamVjdCgpKXJldHVybiBGQUxTRTsNCi0NCi0JCUNKU19BcnJheSByY0FycmF5KG1faXNvbGF0ZSk7DQotCQl2cCA+PiByY0FycmF5Ow0KLQkJQ0pTX1ZhbHVlIFVwcGVyX0xlZnR4KG1faXNvbGF0ZSksIFVwcGVyX0xlZnR5KG1faXNvbGF0ZSksIExvd2VyX1JpZ2h0eChtX2lzb2xhdGUpLCBMb3dlcl9SaWdodHkobV9pc29sYXRlKTsNCi0JCXJjQXJyYXkuR2V0RWxlbWVudCgwLCBVcHBlcl9MZWZ0eCk7DQotCQlyY0FycmF5LkdldEVsZW1lbnQoMSwgVXBwZXJfTGVmdHkpOw0KLQkJcmNBcnJheS5HZXRFbGVtZW50KDIsIExvd2VyX1JpZ2h0eCk7DQotCQlyY0FycmF5LkdldEVsZW1lbnQoMywgTG93ZXJfUmlnaHR5KTsNCi0NCi0JCUZYX0ZMT0FUIHBBcnJheVs0XSA9IHswLjBmLDAuMGYsMC4wZiwwLjBmfTsNCi0JCXBBcnJheVswXSA9IChGWF9GTE9BVCkoRlhfSU5UMzIpVXBwZXJfTGVmdHg7DQotCQlwQXJyYXlbMV0gPSAoRlhfRkxPQVQpKEZYX0lOVDMyKUxvd2VyX1JpZ2h0eTsNCi0JCXBBcnJheVsyXSA9IChGWF9GTE9BVCkoRlhfSU5UMzIpTG93ZXJfUmlnaHR4Ow0KLQkJcEFycmF5WzNdID0gKEZYX0ZMT0FUKShGWF9JTlQzMilVcHBlcl9MZWZ0eTsNCi0NCi0JCUNQREZfUmVjdCBjclJlY3QocEFycmF5KTsNCi0NCi0JCWlmIChtX2JEZWxheSkNCi0JCXsNCi0JCQlBZGREZWxheV9SZWN0KEZQX1JFQ1QsIGNyUmVjdCk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJRmllbGQ6OlNldFJlY3QobV9wRG9jdW1lbnQsIG1fRmllbGROYW1lLCBtX25Gb3JtQ29udHJvbEluZGV4LCBjclJlY3QpOw0KLQkJfQkNCi0JfQ0KLQllbHNlDQotCXsNCi0JCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5Ow0KLQkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsNCi0JCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7DQotDQotCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gKENQREZTREtfSW50ZXJGb3JtKiltX3BEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7DQotCQlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsNCi0NCi0JCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gcEludGVyRm9ybS0+R2V0V2lkZ2V0KEdldFNtYXJ0RmllbGRDb250cm9sKHBGb3JtRmllbGQpKTsNCi0JCWlmICghcFdpZGdldCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJQ0ZYX0Zsb2F0UmVjdCBjclJlY3QgPSBwV2lkZ2V0LT5HZXRSZWN0KCk7DQotCQlDSlNfVmFsdWUgVXBwZXJfTGVmdHgobV9pc29sYXRlKSxVcHBlcl9MZWZ0eShtX2lzb2xhdGUpLExvd2VyX1JpZ2h0eChtX2lzb2xhdGUpLExvd2VyX1JpZ2h0eShtX2lzb2xhdGUpOw0KLQkJVXBwZXJfTGVmdHggPSAoRlhfSU5UMzIpY3JSZWN0LmxlZnQ7DQotCQlVcHBlcl9MZWZ0eSA9IChGWF9JTlQzMiljclJlY3QudG9wOw0KLQkJTG93ZXJfUmlnaHR4ID0gKEZYX0lOVDMyKWNyUmVjdC5yaWdodDsNCi0JCUxvd2VyX1JpZ2h0eSA9IChGWF9JTlQzMiljclJlY3QuYm90dG9tOw0KLQ0KLQkJQ0pTX0FycmF5IHJjQXJyYXkobV9pc29sYXRlKTsNCi0JCXJjQXJyYXkuU2V0RWxlbWVudCgwLFVwcGVyX0xlZnR4KTsNCi0JCXJjQXJyYXkuU2V0RWxlbWVudCgxLFVwcGVyX0xlZnR5KTsNCi0JCXJjQXJyYXkuU2V0RWxlbWVudCgyLExvd2VyX1JpZ2h0eCk7DQotCQlyY0FycmF5LlNldEVsZW1lbnQoMyxMb3dlcl9SaWdodHkpOw0KLQ0KLQkJdnAgIDw8ICByY0FycmF5OwkJCQ0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi12b2lkIEZpZWxkOjpTZXRSZWN0KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgY29uc3QgQ1BERl9SZWN0JiByZWN0KQ0KLXsNCi0JQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSAoQ1BERlNES19JbnRlckZvcm0qKXBEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7DQotCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOw0KLQ0KLQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsNCi0JR2V0Rm9ybUZpZWxkcyhwRG9jdW1lbnQsIHN3RmllbGROYW1lLCBGaWVsZEFycmF5KTsNCi0NCi0JZm9yIChpbnQgaT0wLGlzej1GaWVsZEFycmF5LkdldFNpemUoKTsgaTxpc3o7IGkrKykNCi0Jew0KLQkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KGkpOw0KLQkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotDQotCQlpZiAobkNvbnRyb2xJbmRleCA8IDApDQotCQl7DQotCQkJRlhfQk9PTCBiU2V0ID0gRkFMU0U7DQotCQkJZm9yIChpbnQgaT0wLCBzej1wRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCk7IGk8c3o7IGkrKykNCi0JCQl7DQotCQkJCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCA9IHBGb3JtRmllbGQtPkdldENvbnRyb2woaSk7DQotCQkJCUFTU0VSVChwRm9ybUNvbnRyb2wgIT0gTlVMTCk7DQotDQotCQkJCWlmIChDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IHBJbnRlckZvcm0tPkdldFdpZGdldChwRm9ybUNvbnRyb2wpKQ0KLQkJCQl7DQotCQkJCQlDUERGX1JlY3QgY3JSZWN0ID0gcmVjdDsNCi0NCi0JCQkJCUNQREZfUGFnZSogcFBERlBhZ2UgPSBwV2lkZ2V0LT5HZXRQREZQYWdlKCk7DQotCQkJCQlBU1NFUlQocFBERlBhZ2UgIT0gTlVMTCk7DQotDQotLy8gCQkJCQlDUERGX1BhZ2UqIHBQREZQYWdlID0gcFBhZ2UtPkdldFBhZ2UoKTsNCi0vLyAJCQkJCUFTU0VSVChwUERGUGFnZSAhPSBOVUxMKTsNCi0NCi0JCQkJCWNyUmVjdC5JbnRlcnNlY3QocFBERlBhZ2UtPkdldFBhZ2VCQm94KCkpOw0KLQ0KLQkJCQkJaWYgKCFjclJlY3QuSXNFbXB0eSgpKQ0KLQkJCQkJew0KLQkJCQkJCUNQREZfUmVjdCByY09sZCA9IHBXaWRnZXQtPkdldFJlY3QoKTsNCi0JCQkJCQlpZiAoY3JSZWN0LmxlZnQgIT0gcmNPbGQubGVmdCB8fA0KLQkJCQkJCQljclJlY3QucmlnaHQgIT0gcmNPbGQucmlnaHQgfHwNCi0JCQkJCQkJY3JSZWN0LnRvcCAhPSByY09sZC50b3AgfHwNCi0JCQkJCQkJY3JSZWN0LmJvdHRvbSAhPSByY09sZC5ib3R0b20pDQotCQkJCQkJew0KLQkJCQkJCQlwV2lkZ2V0LT5TZXRSZWN0KGNyUmVjdCk7DQotCQkJCQkJCWJTZXQgPSBUUlVFOw0KLQkJCQkJCX0NCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCX0NCi0NCi0JCQlpZiAoYlNldCkgVXBkYXRlRm9ybUZpZWxkKHBEb2N1bWVudCwgcEZvcm1GaWVsZCwgVFJVRSwgVFJVRSwgVFJVRSk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJaWYobkNvbnRyb2xJbmRleCA+PSBwRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCkpIHJldHVybjsNCi0JCQlpZiAoQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sID0gcEZvcm1GaWVsZC0+R2V0Q29udHJvbChuQ29udHJvbEluZGV4KSkNCi0JCQl7DQotCQkJCWlmIChDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IHBJbnRlckZvcm0tPkdldFdpZGdldChwRm9ybUNvbnRyb2wpKQ0KLQkJCQl7DQotCQkJCQlDUERGX1JlY3QgY3JSZWN0ID0gcmVjdDsNCi0JCQkJCQ0KLQkJCQkJQ1BERl9QYWdlKiBwUERGUGFnZSA9IHBXaWRnZXQtPkdldFBERlBhZ2UoKTsNCi0JCQkJCUFTU0VSVChwUERGUGFnZSAhPSBOVUxMKTsNCi0NCi0vLyAJCQkJCUNQREZfUGFnZSogcFBERlBhZ2UgPSBwUGFnZS0+R2V0UGFnZSgpOw0KLS8vIAkJCQkJQVNTRVJUKHBQREZQYWdlICE9IE5VTEwpOw0KLQ0KLQkJCQkJY3JSZWN0LkludGVyc2VjdChwUERGUGFnZS0+R2V0UGFnZUJCb3goKSk7DQotDQotCQkJCQlpZiAoIWNyUmVjdC5Jc0VtcHR5KCkpDQotCQkJCQl7DQotCQkJCQkJQ1BERl9SZWN0IHJjT2xkID0gcFdpZGdldC0+R2V0UmVjdCgpOw0KLQkJCQkJCWlmIChjclJlY3QubGVmdCAhPSByY09sZC5sZWZ0IHx8DQotCQkJCQkJCWNyUmVjdC5yaWdodCAhPSByY09sZC5yaWdodCB8fA0KLQkJCQkJCQljclJlY3QudG9wICE9IHJjT2xkLnRvcCB8fA0KLQkJCQkJCQljclJlY3QuYm90dG9tICE9IHJjT2xkLmJvdHRvbSkNCi0JCQkJCQl7DQotCQkJCQkJCXBXaWRnZXQtPlNldFJlY3QoY3JSZWN0KTsNCi0JCQkJCQkJVXBkYXRlRm9ybUNvbnRyb2wocERvY3VtZW50LCBwRm9ybUNvbnRyb2wsIFRSVUUsIFRSVUUsIFRSVUUpOw0KLQkJCQkJCX0NCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCX0NCi0JCX0NCi0JfQ0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjpyZXF1aXJlZChPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5Ow0KLQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOw0KLQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7DQotDQotDQotCQlib29sIGJWUDsNCi0JCXZwID4+IGJWUDsNCi0NCi0JfQ0KLQllbHNlDQotCXsNCi0JCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsNCi0JCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpID09IEZJRUxEVFlQRV9QVVNIQlVUVE9OKQ0KLQkJCXJldHVybiBGQUxTRTsNCi0NCi0JCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZEZsYWdzKCkgJiBGSUVMREZMQUdfUkVRVUlSRUQpDQotCQkJdnAgPDwgdHJ1ZTsNCi0JCWVsc2UNCi0JCQl2cCA8PCBmYWxzZTsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBGaWVsZDo6cmljaFRleHQoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7DQotDQotCQlib29sIGJWUDsNCi0JCXZwID4+IGJWUDsNCi0NCi0JCWlmIChtX2JEZWxheSkNCi0JCXsNCi0JCQlBZGREZWxheV9Cb29sKEZQX1JJQ0hURVhULCBiVlApOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCUZpZWxkOjpTZXRSaWNoVGV4dChtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIGJWUCk7DQotCQl9CQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOw0KLQkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0JCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsNCi0JCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9URVhURklFTEQpDQotCQkJcmV0dXJuIEZBTFNFOw0KLQ0KLQkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkRmxhZ3MoKSAmIEZJRUxERkxBR19SSUNIVEVYVCkNCi0JCQl2cCA8PCB0cnVlOw0KLQkJZWxzZQ0KLQkJCXZwIDw8IGZhbHNlOw0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi12b2lkIEZpZWxkOjpTZXRSaWNoVGV4dChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGJvb2wgYikNCi17DQotCS8vTm90IHN1cHBvcnRlZC4NCi19DQotDQotRlhfQk9PTCBGaWVsZDo6cmljaFZhbHVlKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCXJldHVybiBUUlVFOw0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7DQotCQk7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQk7DQotCX0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OlNldFJpY2hWYWx1ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgpDQotew0KLQkvL05vdCBzdXBwb3J0ZWQuDQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OnJvdGF0aW9uKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKHZwLklzU2V0dGluZygpKQ0KLQl7DQotCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJaW50IG5WUDsNCi0JCXZwID4+IG5WUDsNCi0NCi0JCWlmIChtX2JEZWxheSkNCi0JCXsNCi0JCQlBZGREZWxheV9JbnQoRlBfUk9UQVRJT04sIG5WUCk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJRmllbGQ6OlNldFJvdGF0aW9uKG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgblZQKTsNCi0JCX0JDQotCX0NCi0JZWxzZQ0KLQl7DQotCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsNCi0JCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7DQotCQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOw0KLQkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotDQotCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBHZXRTbWFydEZpZWxkQ29udHJvbChwRm9ybUZpZWxkKTsNCi0JCWlmICghcEZvcm1Db250cm9sKXJldHVybiBGQUxTRTsNCi0NCi0JCXZwIDw8IChGWF9JTlQzMilwRm9ybUNvbnRyb2wtPkdldFJvdGF0aW9uKCk7DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OlNldFJvdGF0aW9uKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgaW50IG51bWJlcikNCi17DQotCS8vTm90IHN1cHBvcnRlZC4NCi19DQotDQotRlhfQk9PTCBGaWVsZDo6c3Ryb2tlQ29sb3IoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7DQotDQotCQlpZiAoIXZwLklzQXJyYXlPYmplY3QoKSlyZXR1cm4gRkFMU0U7DQotDQotCQlDSlNfQXJyYXkgY3JBcnJheShtX2lzb2xhdGUpOw0KLQkJdnAgPj4gY3JBcnJheTsNCi0NCi0JCUNQV0xfQ29sb3IgY29sb3I7DQotCQljb2xvcjo6Q29udmVydEFycmF5VG9QV0xDb2xvcihjckFycmF5LCBjb2xvcik7DQotDQotCQlpZiAobV9iRGVsYXkpDQotCQl7DQotCQkJQWRkRGVsYXlfQ29sb3IoRlBfU1RST0tFQ09MT1IsIGNvbG9yKTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlGaWVsZDo6U2V0U3Ryb2tlQ29sb3IobV9wRG9jdW1lbnQsIG1fRmllbGROYW1lLCBtX25Gb3JtQ29udHJvbEluZGV4LCBjb2xvcik7DQotCQl9CQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOw0KLQkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0JCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsNCi0JCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQkJQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sID0gR2V0U21hcnRGaWVsZENvbnRyb2wocEZvcm1GaWVsZCk7DQotCQlpZiAoIXBGb3JtQ29udHJvbClyZXR1cm4gRkFMU0U7DQotDQotCQlpbnQgaUNvbG9yVHlwZTsNCi0JCXBGb3JtQ29udHJvbC0+R2V0Qm9yZGVyQ29sb3IoaUNvbG9yVHlwZSk7DQotDQotCQlDUFdMX0NvbG9yIGNvbG9yOw0KLQ0KLQkJaWYgKGlDb2xvclR5cGUgPT0gQ09MT1JUWVBFX1RSQU5TUEFSRU5UKQ0KLQkJew0KLQkJCWNvbG9yID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfVFJBTlNQQVJFTlQpOw0KLQkJfQ0KLQkJZWxzZSBpZiAoaUNvbG9yVHlwZSA9PSBDT0xPUlRZUEVfR1JBWSkNCi0JCXsNCi0JCQljb2xvciA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksIHBGb3JtQ29udHJvbC0+R2V0T3JpZ2luYWxCb3JkZXJDb2xvcigwKSk7DQotCQl9DQotCQllbHNlIGlmIChpQ29sb3JUeXBlID09IENPTE9SVFlQRV9SR0IpDQotCQl7DQotCQkJY29sb3IgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9SR0IsIHBGb3JtQ29udHJvbC0+R2V0T3JpZ2luYWxCb3JkZXJDb2xvcigwKSwNCi0JCQkJcEZvcm1Db250cm9sLT5HZXRPcmlnaW5hbEJvcmRlckNvbG9yKDEpLA0KLQkJCQlwRm9ybUNvbnRyb2wtPkdldE9yaWdpbmFsQm9yZGVyQ29sb3IoMikpOw0KLQkJfQ0KLQkJZWxzZSBpZiAoaUNvbG9yVHlwZSA9PSBDT0xPUlRZUEVfQ01ZSykNCi0JCXsNCi0JCQljb2xvciA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0NNWUssIHBGb3JtQ29udHJvbC0+R2V0T3JpZ2luYWxCb3JkZXJDb2xvcigwKSwNCi0JCQkJcEZvcm1Db250cm9sLT5HZXRPcmlnaW5hbEJvcmRlckNvbG9yKDEpLA0KLQkJCQlwRm9ybUNvbnRyb2wtPkdldE9yaWdpbmFsQm9yZGVyQ29sb3IoMiksDQotCQkJCXBGb3JtQ29udHJvbC0+R2V0T3JpZ2luYWxCb3JkZXJDb2xvcigzKSk7DQotCQl9DQotCQllbHNlDQotCQkJcmV0dXJuIEZBTFNFOw0KLQ0KLQkJQ0pTX0FycmF5IGNyQXJyYXkobV9pc29sYXRlKTsNCi0JCWNvbG9yOjpDb252ZXJ0UFdMQ29sb3JUb0FycmF5KGNvbG9yLCBjckFycmF5KTsNCi0gICAgICAgIHZwICA8PCAgY3JBcnJheTsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotdm9pZCBGaWVsZDo6U2V0U3Ryb2tlQ29sb3IoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBjb25zdCBDUFdMX0NvbG9yJiBjb2xvcikNCi17DQotCS8vTm90IHN1cHBvcnRlZC4NCi19DQotDQotRlhfQk9PTCBGaWVsZDo6c3R5bGUoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7DQotDQotCQlDRlhfQnl0ZVN0cmluZyBjc0JDYXB0aW9uOw0KLQkJdnAgPj4gY3NCQ2FwdGlvbjsNCi0NCi0JCWlmIChtX2JEZWxheSkNCi0JCXsNCi0JCQlBZGREZWxheV9TdHJpbmcoRlBfU1RZTEUsIGNzQkNhcHRpb24pOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCUZpZWxkOjpTZXRTdHlsZShtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIGNzQkNhcHRpb24pOw0KLQkJfQkNCi0JfQ0KLQllbHNlDQotCXsNCi0JCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5Ow0KLQkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsNCi0JCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7DQotDQotCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfUkFESU9CVVRUT04gJiYgDQotCQkJcEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX0NIRUNLQk9YKQ0KLQkJCXJldHVybiBGQUxTRTsNCi0NCi0JCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCA9IEdldFNtYXJ0RmllbGRDb250cm9sKHBGb3JtRmllbGQpOw0KLQkJaWYgKCFwRm9ybUNvbnRyb2wpIHJldHVybiBGQUxTRTsNCi0NCi0JCUNGWF9XaWRlU3RyaW5nIGNzV0NhcHRpb24gPSBwRm9ybUNvbnRyb2wtPkdldE5vcm1hbENhcHRpb24oKTsNCi0JCUNGWF9CeXRlU3RyaW5nIGNzQkNhcHRpb247DQotDQotCQlzd2l0Y2ggKGNzV0NhcHRpb25bMF0pDQotCQl7DQotCQkJY2FzZSBMJ2wnOg0KLQkJCQljc0JDYXB0aW9uID0gImNpcmNsZSI7DQotCQkJCWJyZWFrOw0KLQkJCWNhc2UgTCc4JzoNCi0JCQkJY3NCQ2FwdGlvbiA9ICJjcm9zcyI7DQotCQkJCWJyZWFrOw0KLQkJCWNhc2UgTCd1JzoNCi0JCQkJY3NCQ2FwdGlvbiA9ICJkaWFtb25kIjsNCi0JCQkJYnJlYWs7DQotCQkJY2FzZSBMJ24nOg0KLQkJCQljc0JDYXB0aW9uID0gInNxdWFyZSI7DQotCQkJCWJyZWFrOw0KLQkJCWNhc2UgTCdIJzoNCi0JCQkJY3NCQ2FwdGlvbiA9ICJzdGFyIjsNCi0JCQkJYnJlYWs7DQotCQkJZGVmYXVsdDogLy9MJzQnDQotCQkJCWNzQkNhcHRpb24gPSAiY2hlY2siOw0KLQkJCQlicmVhazsNCi0JCX0NCi0JCXZwIDw8IGNzQkNhcHRpb247DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OlNldFN0eWxlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgDQotCQkJCQkgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cmluZykNCi17DQotCS8vTm90IHN1cHBvcnRlZC4NCi19DQotDQotRlhfQk9PTCBGaWVsZDo6c3VibWl0TmFtZShPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBGaWVsZDo6dGV4dENvbG9yKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKHZwLklzU2V0dGluZygpKQ0KLQl7DQotCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJQ0pTX0FycmF5IGNyQXJyYXkobV9pc29sYXRlKTsNCi0JCWlmICghdnAuSXNBcnJheU9iamVjdCgpKXJldHVybiBGQUxTRTsNCi0JCXZwID4+IGNyQXJyYXk7DQotDQotCQlDUFdMX0NvbG9yIGNvbG9yOw0KLQkJY29sb3I6OkNvbnZlcnRBcnJheVRvUFdMQ29sb3IoY3JBcnJheSwgY29sb3IpOw0KLQ0KLQkJaWYgKG1fYkRlbGF5KQ0KLQkJew0KLQkJCUFkZERlbGF5X0NvbG9yKEZQX1RFWFRDT0xPUiwgY29sb3IpOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCUZpZWxkOjpTZXRUZXh0Q29sb3IobV9wRG9jdW1lbnQsIG1fRmllbGROYW1lLCBtX25Gb3JtQ29udHJvbEluZGV4LCBjb2xvcik7DQotCQl9CQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOw0KLQkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0JCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsNCi0JCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQkJQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sID0gR2V0U21hcnRGaWVsZENvbnRyb2wocEZvcm1GaWVsZCk7DQotCQlpZiAoIXBGb3JtQ29udHJvbClyZXR1cm4gRkFMU0U7DQotCQkNCi0JCWludCBpQ29sb3JUeXBlOw0KLQkJRlhfQVJHQiBjb2xvcjsNCi0JCUNQREZfRGVmYXVsdEFwcGVhcmFuY2UgRmllbGRBcHBlYXJhbmNlID0gcEZvcm1Db250cm9sLT5HZXREZWZhdWx0QXBwZWFyYW5jZSgpOw0KLQkJRmllbGRBcHBlYXJhbmNlLkdldENvbG9yKGNvbG9yLCBpQ29sb3JUeXBlKTsNCi0JCUZYX0lOVDMyIGEscixnLGI7DQotCQlBcmdiRGVjb2RlKGNvbG9yLCBhLCByLCBnLCBiKTsNCi0NCi0JCUNQV0xfQ29sb3IgY3JSZXQgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9SR0IsIHIgLyAyNTUuMGYsDQotCQkJCWcgLyAyNTUuMGYsDQotCQkJCWIgLyAyNTUuMGYpOw0KLQ0KLQkJaWYgKGlDb2xvclR5cGUgPT0gQ09MT1JUWVBFX1RSQU5TUEFSRU5UKQ0KLQkJCWNyUmV0ID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfVFJBTlNQQVJFTlQpOw0KLQ0KLQkJQ0pTX0FycmF5IGNyQXJyYXkobV9pc29sYXRlKTsNCi0JCWNvbG9yOjpDb252ZXJ0UFdMQ29sb3JUb0FycmF5KGNyUmV0LCBjckFycmF5KTsNCi0gICAgICAgIHZwICA8PCAgY3JBcnJheTsJCQ0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi12b2lkIEZpZWxkOjpTZXRUZXh0Q29sb3IoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBjb25zdCBDUFdMX0NvbG9yJiBjb2xvcikNCi17DQotCS8vTm90IHN1cHBvcnRlZC4NCi19DQotDQotRlhfQk9PTCBGaWVsZDo6dGV4dEZvbnQoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7DQotDQotCQlDRlhfQnl0ZVN0cmluZyBjc0ZvbnROYW1lOw0KLQkJdnAgPj4gY3NGb250TmFtZTsNCi0JCWlmIChjc0ZvbnROYW1lLklzRW1wdHkoKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJaWYgKG1fYkRlbGF5KQ0KLQkJew0KLQkJCUFkZERlbGF5X1N0cmluZyhGUF9URVhURk9OVCwgY3NGb250TmFtZSk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJRmllbGQ6OlNldFRleHRGb250KG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgY3NGb250TmFtZSk7DQotCQl9CQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOw0KLQkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0JCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsNCi0JCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQkJQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sID0gR2V0U21hcnRGaWVsZENvbnRyb2wocEZvcm1GaWVsZCk7DQotCQlpZiAoIXBGb3JtQ29udHJvbClyZXR1cm4gRkFMU0U7DQotDQotCQlpbnQgbkZpZWxkVHlwZSA9IHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpOw0KLQ0KLQkJaWYgKG5GaWVsZFR5cGUgPT0gRklFTERUWVBFX1BVU0hCVVRUT04gfHwgDQotCQkJbkZpZWxkVHlwZSA9PSBGSUVMRFRZUEVfQ09NQk9CT1ggfHwgDQotCQkJbkZpZWxkVHlwZSA9PSBGSUVMRFRZUEVfTElTVEJPWCB8fA0KLQkJCW5GaWVsZFR5cGUgPT0gRklFTERUWVBFX1RFWFRGSUVMRCkNCi0JCXsNCi0JCQlDUERGX0ZvbnQgKiBwRm9udCA9IHBGb3JtQ29udHJvbC0+R2V0RGVmYXVsdENvbnRyb2xGb250KCk7DQotCQkJaWYgKCFwRm9udCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQkJCXZwIDw8IHBGb250LT5HZXRCYXNlRm9udCgpOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJCXJldHVybiBGQUxTRTsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotdm9pZCBGaWVsZDo6U2V0VGV4dEZvbnQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyaW5nKQ0KLXsNCi0JLy9Ob3Qgc3VwcG9ydGVkLg0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjp0ZXh0U2l6ZShPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWlmICh2cC5Jc1NldHRpbmcoKSkNCi0Jew0KLQkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsNCi0NCi0JCWludCBuVlA7DQotCQl2cCA+PiBuVlA7DQotDQotCQlpZiAobV9iRGVsYXkpDQotCQl7DQotCQkJQWRkRGVsYXlfSW50KEZQX1RFWFRTSVpFLCBuVlApOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCUZpZWxkOjpTZXRUZXh0U2l6ZShtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIG5WUCk7DQotCQl9CQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOw0KLQkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0JCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsNCi0JCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQkJQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sID0gR2V0U21hcnRGaWVsZENvbnRyb2wocEZvcm1GaWVsZCk7DQotCQlpZiAoIXBGb3JtQ29udHJvbClyZXR1cm4gRkFMU0U7DQotDQotCQlDUERGX0RlZmF1bHRBcHBlYXJhbmNlIEZpZWxkQXBwZWFyYW5jZSA9IHBGb3JtQ29udHJvbC0+R2V0RGVmYXVsdEFwcGVhcmFuY2UoKTsNCi0NCi0JCUNGWF9CeXRlU3RyaW5nIGNzRm9udE5hbWVUYWc7DQotCQlGWF9GTE9BVCBmRm9udFNpemU7DQotCQlGaWVsZEFwcGVhcmFuY2UuR2V0Rm9udChjc0ZvbnROYW1lVGFnLGZGb250U2l6ZSk7DQotDQotCQl2cCA8PCAoaW50KWZGb250U2l6ZTsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotdm9pZCBGaWVsZDo6U2V0VGV4dFNpemUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBpbnQgbnVtYmVyKQ0KLXsNCi0JLy9Ob3Qgc3VwcG9ydGVkLg0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjp0eXBlKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKCF2cC5Jc0dldHRpbmcoKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsNCi0JR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsNCi0JaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0gCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsNCi0JQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotDQotCXN3aXRjaCAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkpDQotCXsNCi0JCWNhc2UgRklFTERUWVBFX1VOS05PV046DQotCQkJdnAgPDwgKEZYX0xQQ1dTVFIpTCJ1bmtub3duIjsNCi0JCQlicmVhazsNCi0JCWNhc2UgRklFTERUWVBFX1BVU0hCVVRUT046DQotCQkJdnAgPDwgKEZYX0xQQ1dTVFIpTCJidXR0b24iOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSBGSUVMRFRZUEVfQ0hFQ0tCT1g6DQotCQkJdnAgPDwgKEZYX0xQQ1dTVFIpTCJjaGVja2JveCI7DQotCQkJYnJlYWs7DQotCQljYXNlIEZJRUxEVFlQRV9SQURJT0JVVFRPTjoNCi0JCQl2cCA8PCAoRlhfTFBDV1NUUilMInJhZGlvYnV0dG9uIjsNCi0JCQlicmVhazsNCi0JCWNhc2UgRklFTERUWVBFX0NPTUJPQk9YOg0KLQkJCXZwIDw8IChGWF9MUENXU1RSKUwiY29tYm9ib3giOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSBGSUVMRFRZUEVfTElTVEJPWDoNCi0JCQl2cCA8PCAoRlhfTFBDV1NUUilMImxpc3Rib3giOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSBGSUVMRFRZUEVfVEVYVEZJRUxEOg0KLQkJCXZwIDw8IChGWF9MUENXU1RSKUwidGV4dCI7DQotCQkJYnJlYWs7DQotCQljYXNlIEZJRUxEVFlQRV9TSUdOQVRVUkU6DQotCQkJdnAgPDwgKEZYX0xQQ1dTVFIpTCJzaWduYXR1cmUiOw0KLQkJCWJyZWFrOw0KLQkJZGVmYXVsdCA6DQotCQkJdnAgPDwgKEZYX0xQQ1dTVFIpTCJ1bmtub3duIjsNCi0JCQlicmVhazsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBGaWVsZDo6dXNlck5hbWUoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLSAgCWlmICh2cC5Jc1NldHRpbmcoKSkNCi0Jew0KLQkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsNCi0NCi0JCUNGWF9XaWRlU3RyaW5nIHN3TmFtZTsNCi0JCXZwID4+IHN3TmFtZTsNCi0NCi0JCWlmIChtX2JEZWxheSkNCi0JCXsNCi0JCQlBZGREZWxheV9XaWRlU3RyaW5nKEZQX1VTRVJOQU1FLCBzd05hbWUpOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCUZpZWxkOjpTZXRVc2VyTmFtZShtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIHN3TmFtZSk7DQotCQl9CQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOw0KLQkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0gCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JCXZwIDw8IChDRlhfV2lkZVN0cmluZylwRm9ybUZpZWxkLT5HZXRBbHRlcm5hdGVOYW1lKCk7DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OlNldFVzZXJOYW1lKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cmluZykNCi17DQotCS8vTm90IHN1cHBvcnRlZC4NCi19DQotDQotRlhfQk9PTCBGaWVsZDo6dmFsdWUoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsJCQ0KLQkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsNCi0NCi0JCUNKU19XaWRlU3RyaW5nQXJyYXkgc3RyQXJyYXk7DQotDQotCQlpZiAodnAuSXNBcnJheU9iamVjdCgpKQ0KLQkJew0KLQkJCUNKU19BcnJheSBWYWx1ZUFycmF5KG1faXNvbGF0ZSk7DQotCQkJdnAuQ29udmVydFRvQXJyYXkoVmFsdWVBcnJheSk7DQotCQkJZm9yIChpbnQgaSA9IDAsc3ogPSBWYWx1ZUFycmF5LkdldExlbmd0aCgpOyBpIDwgc3o7IGkrKykNCi0JCQl7DQotCQkJCUNKU19WYWx1ZSBFbGVtZW50VmFsdWUobV9pc29sYXRlKTsNCi0JCQkJVmFsdWVBcnJheS5HZXRFbGVtZW50KGksIEVsZW1lbnRWYWx1ZSk7DQotCQkJCXN0ckFycmF5LkFkZChFbGVtZW50VmFsdWUub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKSk7DQotCQkJfQ0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCUNGWF9XaWRlU3RyaW5nIHN3VmFsdWU7DQotCQkJdnAgPj4gc3dWYWx1ZTsNCi0NCi0JCQlzdHJBcnJheS5BZGQoc3dWYWx1ZSk7DQotCQl9DQotDQotCQlpZiAobV9iRGVsYXkpDQotCQl7DQotCQkJQWRkRGVsYXlfV2lkZVN0cmluZ0FycmF5KEZQX1ZBTFVFLCBzdHJBcnJheSk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJRmllbGQ6OlNldFZhbHVlKG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgc3RyQXJyYXkpOw0KLQkJfQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOw0KLQkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0gCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0NCi0NCi0JCXN3aXRjaCAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkpDQotCQl7DQotCQljYXNlIEZJRUxEVFlQRV9QVVNIQlVUVE9OOg0KLQkJCXJldHVybiBGQUxTRTsNCi0JCWNhc2UgRklFTERUWVBFX0NPTUJPQk9YOg0KLQkJY2FzZSBGSUVMRFRZUEVfVEVYVEZJRUxEOg0KLQkJCXsNCi0JCQkJQ0ZYX1dpZGVTdHJpbmcgc3dWYWx1ZSA9IHBGb3JtRmllbGQtPkdldFZhbHVlKCk7DQotDQotCQkJCWRvdWJsZSBkUmV0Ow0KLQkJCQlGWF9CT09MIGJEb3Q7DQotCQkJCWlmIChDSlNfUHVibGljTWV0aG9kczo6Q29udmVydFN0cmluZ1RvTnVtYmVyKHN3VmFsdWUsZFJldCxiRG90KSkNCi0JCQkJew0KLQkJCQkJaWYgKGJEb3QpDQotCQkJCQkJdnAgPDwgZFJldDsNCi0JCQkJCWVsc2UNCi0JCQkJCQl2cCA8PCBkUmV0Ow0KLQkJCQl9DQotCQkJCWVsc2UNCi0JCQkJCXZwIDw8IHN3VmFsdWU7DQotCQkJfQ0KLQkJCWJyZWFrOw0KLQkJY2FzZSBGSUVMRFRZUEVfTElTVEJPWDoNCi0JCQl7DQotCQkJCWlmIChwRm9ybUZpZWxkLT5Db3VudFNlbGVjdGVkSXRlbXMoKSA+IDEpDQotCQkJCXsNCi0JCQkJCUNKU19BcnJheSBWYWx1ZUFycmF5KG1faXNvbGF0ZSk7DQotCQkJCQlDSlNfVmFsdWUgRWxlbWVudFZhbHVlKG1faXNvbGF0ZSk7DQotCQkJCQlpbnQgaUluZGV4Ow0KLQkJCQkJZm9yIChpbnQgaSA9IDAsIHN6ID0gcEZvcm1GaWVsZC0+Q291bnRTZWxlY3RlZEl0ZW1zKCk7IGkgPCBzejsgaSsrKQ0KLQkJCQkJew0KLQkJCQkJCWlJbmRleCA9IHBGb3JtRmllbGQtPkdldFNlbGVjdGVkSW5kZXgoaSk7DQotCQkJCQkJRWxlbWVudFZhbHVlID0gcEZvcm1GaWVsZC0+R2V0T3B0aW9uVmFsdWUoaUluZGV4KTsNCi0JCQkJCQlpZiAoRlhTWVNfd2NzbGVuKChGWF9MUENXU1RSKUVsZW1lbnRWYWx1ZS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpKSA9PSAwKQ0KLQkJCQkJCQlFbGVtZW50VmFsdWUgPSBwRm9ybUZpZWxkLT5HZXRPcHRpb25MYWJlbChpSW5kZXgpOw0KLQkJCQkJCVZhbHVlQXJyYXkuU2V0RWxlbWVudChpLCBFbGVtZW50VmFsdWUpOw0KLQkJCQkJfQ0KLQkJCQkJdnAgPDwgVmFsdWVBcnJheTsNCi0JCQkJfQ0KLQkJCQllbHNlDQotCQkJCXsNCi0JCQkJCUNGWF9XaWRlU3RyaW5nIHN3VmFsdWUgPSBwRm9ybUZpZWxkLT5HZXRWYWx1ZSgpOw0KLQkJCQkNCi0JCQkJCWRvdWJsZSBkUmV0Ow0KLQkJCQkJRlhfQk9PTCBiRG90Ow0KLQkJCQkJaWYgKENKU19QdWJsaWNNZXRob2RzOjpDb252ZXJ0U3RyaW5nVG9OdW1iZXIoc3dWYWx1ZSxkUmV0LGJEb3QpKQ0KLQkJCQkJew0KLQkJCQkJCWlmIChiRG90KQ0KLQkJCQkJCQl2cCA8PCBkUmV0Ow0KLQkJCQkJCWVsc2UNCi0JCQkJCQkJdnAgPDwgZFJldDsNCi0JCQkJCX0NCi0JCQkJCWVsc2UNCi0JCQkJCQl2cCA8PCBzd1ZhbHVlOwkNCi0JCQkJfQ0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWNhc2UgRklFTERUWVBFX0NIRUNLQk9YOg0KLQkJY2FzZSBGSUVMRFRZUEVfUkFESU9CVVRUT046DQotCQkJew0KLQkJCQlGWF9CT09MIGJGaW5kID0gRkFMU0U7DQotCQkJCWZvciAoaW50IGkgPSAwICwgc3ogPSBwRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCk7IGkgPCBzejsgaSsrKQ0KLQkJCQl7DQotCQkJCQlpZiAocEZvcm1GaWVsZC0+R2V0Q29udHJvbChpKS0+SXNDaGVja2VkKCkpDQotCQkJCQl7DQotCQkJCQkJQ0ZYX1dpZGVTdHJpbmcgc3dWYWx1ZSA9IHBGb3JtRmllbGQtPkdldENvbnRyb2woaSktPkdldEV4cG9ydFZhbHVlKCk7DQotCQkJCQkJDQotCQkJCQkJZG91YmxlIGRSZXQ7DQotCQkJCQkJRlhfQk9PTCBiRG90Ow0KLQkJCQkJCWlmIChDSlNfUHVibGljTWV0aG9kczo6Q29udmVydFN0cmluZ1RvTnVtYmVyKHN3VmFsdWUsZFJldCxiRG90KSkNCi0JCQkJCQl7DQotCQkJCQkJCWlmIChiRG90KQ0KLQkJCQkJCQkJdnAgPDwgZFJldDsNCi0JCQkJCQkJZWxzZQ0KLQkJCQkJCQkJdnAgPDwgZFJldDsNCi0JCQkJCQl9DQotCQkJCQkJZWxzZQ0KLQkJCQkJCQl2cCA8PCBzd1ZhbHVlOw0KLQ0KLQkJCQkJCWJGaW5kID0gVFJVRTsNCi0JCQkJCQlicmVhazsNCi0JCQkJCX0NCi0JCQkJCWVsc2UNCi0JCQkJCQljb250aW51ZTsNCi0JCQkJfQ0KLQkJCQlpZiAoIWJGaW5kKQ0KLQkJCQkJdnAgPDwgKEZYX0xQQ1dTVFIpTCJPZmYiOwkJCQkJDQotCQkJfQ0KLQkJCWJyZWFrOw0KLQkJZGVmYXVsdDoNCi0JCQl2cCA8PCBwRm9ybUZpZWxkLT5HZXRWYWx1ZSgpOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi12b2lkIEZpZWxkOjpTZXRWYWx1ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgDQotCQkJCQkgaW50IG5Db250cm9sSW5kZXgsIGNvbnN0IENKU19XaWRlU3RyaW5nQXJyYXkmIHN0ckFycmF5KQ0KLXsNCi0JQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKHN0ckFycmF5LkdldFNpemUoKSA8IDEpIHJldHVybjsNCi0NCi0JQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCUdldEZvcm1GaWVsZHMocERvY3VtZW50LCBzd0ZpZWxkTmFtZSwgRmllbGRBcnJheSk7DQotDQotCWZvciAoaW50IGk9MCxpc3o9RmllbGRBcnJheS5HZXRTaXplKCk7IGk8aXN6OyBpKyspDQotCXsNCi0JCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdChpKTsNCi0JCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQkJaWYgKHBGb3JtRmllbGQtPkdldEZ1bGxOYW1lKCkuQ29tcGFyZShzd0ZpZWxkTmFtZSkgIT0gMCkNCi0JCQljb250aW51ZTsNCi0NCi0JCXN3aXRjaCAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkpDQotCQl7DQotCQljYXNlIEZJRUxEVFlQRV9URVhURklFTEQ6DQotCQljYXNlIEZJRUxEVFlQRV9DT01CT0JPWDoNCi0JCQlpZiAocEZvcm1GaWVsZC0+R2V0VmFsdWUoKSAhPSBzdHJBcnJheS5HZXRBdCgwKSkNCi0JCQl7DQotCQkJCUNGWF9XaWRlU3RyaW5nIFdpZGVTdHJpbmcgPSBzdHJBcnJheS5HZXRBdCgwKTsNCi0JCQkJcEZvcm1GaWVsZC0+U2V0VmFsdWUoc3RyQXJyYXkuR2V0QXQoMCksIFRSVUUpOwkNCi0JCQkJVXBkYXRlRm9ybUZpZWxkKHBEb2N1bWVudCwgcEZvcm1GaWVsZCwgVFJVRSwgRkFMU0UsIFRSVUUpOw0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWNhc2UgRklFTERUWVBFX0NIRUNLQk9YOiAvL21hbnRpczogMDAwNDQ5Mw0KLQkJY2FzZSBGSUVMRFRZUEVfUkFESU9CVVRUT046DQotCQkJew0KLQkJCQlpZiAocEZvcm1GaWVsZC0+R2V0VmFsdWUoKSAhPSBzdHJBcnJheS5HZXRBdCgwKSkNCi0JCQkJew0KLQkJCQkJcEZvcm1GaWVsZC0+U2V0VmFsdWUoc3RyQXJyYXkuR2V0QXQoMCksIFRSVUUpOwkNCi0JCQkJCVVwZGF0ZUZvcm1GaWVsZChwRG9jdW1lbnQsIHBGb3JtRmllbGQsIFRSVUUsIEZBTFNFLCBUUlVFKTsNCi0JCQkJfQ0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWNhc2UgRklFTERUWVBFX0xJU1RCT1g6DQotCQkJew0KLQkJCQlGWF9CT09MIGJNb2RpZmllZCA9IEZBTFNFOw0KLQ0KLQkJCQlmb3IgKGludCBpPTAsc3o9c3RyQXJyYXkuR2V0U2l6ZSgpOyBpPHN6OyBpKyspDQotCQkJCXsNCi0JCQkJCWludCBpSW5kZXggPSBwRm9ybUZpZWxkLT5GaW5kT3B0aW9uKHN0ckFycmF5LkdldEF0KGkpKTsNCi0NCi0JCQkJCWlmICghcEZvcm1GaWVsZC0+SXNJdGVtU2VsZWN0ZWQoaUluZGV4KSkNCi0JCQkJCXsNCi0JCQkJCQliTW9kaWZpZWQgPSBUUlVFOw0KLQkJCQkJCWJyZWFrOw0KLQkJCQkJfQ0KLQkJCQl9DQotDQotCQkJCWlmIChiTW9kaWZpZWQpDQotCQkJCXsNCi0JCQkJCXBGb3JtRmllbGQtPkNsZWFyU2VsZWN0aW9uKFRSVUUpOw0KLQkJCQkJZm9yIChpbnQgaT0wLHN6PXN0ckFycmF5LkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQkJCQkJew0KLQkJCQkJCWludCBpSW5kZXggPSBwRm9ybUZpZWxkLT5GaW5kT3B0aW9uKHN0ckFycmF5LkdldEF0KGkpKTsNCi0JCQkJCQlwRm9ybUZpZWxkLT5TZXRJdGVtU2VsZWN0aW9uKGlJbmRleCwgVFJVRSwgVFJVRSk7DQotCQkJCQl9DQotDQotCQkJCQlVcGRhdGVGb3JtRmllbGQocERvY3VtZW50LCBwRm9ybUZpZWxkLCBUUlVFLCBGQUxTRSwgVFJVRSk7DQotCQkJCX0NCi0JCQl9DQotCQkJYnJlYWs7DQotCQlkZWZhdWx0OgkJCQkNCi0JCQlicmVhazsNCi0JCX0NCi0JfQ0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjp2YWx1ZUFzU3RyaW5nKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKCF2cC5Jc0dldHRpbmcoKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsNCi0JR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsNCi0JaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0gICAJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOw0KLQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpID09IEZJRUxEVFlQRV9QVVNIQlVUVE9OKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQ0KLQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgPT0gRklFTERUWVBFX0NIRUNLQk9YKQ0KLQl7DQotCQlpZighcEZvcm1GaWVsZC0+Q291bnRDb250cm9scygpKSByZXR1cm4gRkFMU0U7DQotDQotCQlpZiAocEZvcm1GaWVsZC0+R2V0Q29udHJvbCgwKS0+SXNDaGVja2VkKCkpDQotCQkJdnAgPDwgKEZYX0xQQ1dTVFIpTCJZZXMiOw0KLQkJZWxzZQ0KLQkJCXZwIDw8IChGWF9MUENXU1RSKUwiT2ZmIjsNCi0JfQ0KLQllbHNlIGlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSA9PSBGSUVMRFRZUEVfUkFESU9CVVRUT04gJiYgIShwRm9ybUZpZWxkLT5HZXRGaWVsZEZsYWdzKCkgJiBGSUVMREZMQUdfUkFESU9TSU5VTklTT04pKQ0KLQl7DQotCQlmb3IgKGludCBpPTAsIHN6PXBGb3JtRmllbGQtPkNvdW50Q29udHJvbHMoKTsgaTxzejsgaSsrKQ0KLQkJew0KLQkJCWlmIChwRm9ybUZpZWxkLT5HZXRDb250cm9sKGkpLT5Jc0NoZWNrZWQoKSkNCi0JCQl7DQotCQkJCXZwIDw8IChGWF9MUENXU1RSKXBGb3JtRmllbGQtPkdldENvbnRyb2woaSktPkdldEV4cG9ydFZhbHVlKCk7DQotCQkJCWJyZWFrOw0KLQkJCX0NCi0JCQllbHNlDQotCQkJCXZwIDw8IChGWF9MUENXU1RSKUwiT2ZmIjsNCi0JCX0NCi0JfQ0KLQllbHNlIGlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSA9PSBGSUVMRFRZUEVfTElTVEJPWCAmJiAocEZvcm1GaWVsZC0+Q291bnRTZWxlY3RlZEl0ZW1zKCkgPiAxKSkNCi0Jew0KLQkJdnAgPDwgKEZYX0xQQ1dTVFIpTCIiOw0KLQl9DQotCWVsc2UNCi0JCXZwIDw8IChGWF9MUENXU1RSKXBGb3JtRmllbGQtPkdldFZhbHVlKCk7DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1GWF9CT09MIEZpZWxkOjpicm93c2VGb3JGaWxlVG9TdWJtaXQoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5Ow0KLQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLCBGaWVsZEFycmF5KTsNCi0JaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0JQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOw0KLQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0gCUNQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAgPSBtX3BEb2N1bWVudC0+R2V0RW52KCk7DQotIAlBU1NFUlQocEFwcCAhPSBOVUxMKTsNCi0NCi0JaWYgKChwRm9ybUZpZWxkLT5HZXRGaWVsZEZsYWdzKCkgJiBGSUVMREZMQUdfRklMRVNFTEVDVCkgJiYgDQotCQkocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgPT0gRklFTERUWVBFX1RFWFRGSUVMRCkpDQotCXsJCQ0KLQkJQ0ZYX1dpZGVTdHJpbmcgd3NGaWxlTmFtZSA9IHBBcHAtPkpTX2ZpZWxkQnJvd3NlKCk7DQotCQlpZighd3NGaWxlTmFtZS5Jc0VtcHR5KCkpDQotCQl7DQotIAkJCXBGb3JtRmllbGQtPlNldFZhbHVlKHdzRmlsZU5hbWUpOw0KLSAJCQlVcGRhdGVGb3JtRmllbGQobV9wRG9jdW1lbnQsIHBGb3JtRmllbGQsIFRSVUUsIFRSVUUsIFRSVUUpOw0KLSAgICAgICAgIH0NCi0JfQ0KLQllbHNlIA0KLQkJcmV0dXJuIEZBTFNFOw0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotDQotRlhfQk9PTCBGaWVsZDo6YnV0dG9uR2V0Q2FwdGlvbihPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaW50IG5mYWNlID0gMDsNCi0JaW50IGlTaXplID0gcGFyYW1zLnNpemUoKTsNCi0JaWYgKCBpU2l6ZSA+PSAxKQ0KLQkJbmZhY2UgPSAoRlhfSU5UMzIpIHBhcmFtc1swXTsNCi0NCi0JQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7DQotCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7DQotDQotCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsNCi0JQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotCQ0KLQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX1BVU0hCVVRUT04pDQotCQlyZXR1cm4gRkFMU0U7DQotDQotCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCA9IEdldFNtYXJ0RmllbGRDb250cm9sKHBGb3JtRmllbGQpOw0KLQlpZiAoIXBGb3JtQ29udHJvbClyZXR1cm4gRkFMU0U7DQotCQ0KLQlpZiAobmZhY2UgPT0gMCkNCi0JCXZSZXQgPSBwRm9ybUNvbnRyb2wtPkdldE5vcm1hbENhcHRpb24oKTsNCi0JZWxzZSBpZiAobmZhY2UgPT0gMSkNCi0JCXZSZXQgPSBwRm9ybUNvbnRyb2wtPkdldERvd25DYXB0aW9uKCk7DQotCWVsc2UgaWYgKG5mYWNlID09IDIpDQotCQl2UmV0ID0gcEZvcm1Db250cm9sLT5HZXRSb2xsb3ZlckNhcHRpb24oKTsNCi0JZWxzZQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotLy8jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDgwMCkNCi0NCi1GWF9CT09MIEZpZWxkOjpidXR0b25HZXRJY29uKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpbnQgbmZhY2UgPSAwOw0KLQlpbnQgaVNpemUgPSBwYXJhbXMuc2l6ZSgpOw0KLQlpZiAoIGlTaXplID49IDEpDQotCQluZmFjZSA9IChGWF9JTlQzMikgcGFyYW1zWzBdOw0KLQkNCi0JQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7DQotCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7DQotDQotCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsNCi0JQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotCQ0KLQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX1BVU0hCVVRUT04pDQotCQlyZXR1cm4gRkFMU0U7DQotDQotCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCA9IEdldFNtYXJ0RmllbGRDb250cm9sKHBGb3JtRmllbGQpOw0KLQlpZiAoIXBGb3JtQ29udHJvbClyZXR1cm4gRkFMU0U7DQotDQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0NCi0JQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpOw0KLQlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7DQotCQ0KLQlKU0ZYT2JqZWN0IHBPYmogPSBKU19OZXdGeER5bmFtaWNPYmooKnBSdW50aW1lLCBwQ29udGV4dCwgSlNfR2V0T2JqRGVmbklEKCpwUnVudGltZSwgTCJJY29uIikpOw0KLQlBU1NFUlQocE9iai5Jc0VtcHR5KCkgPT0gRkFMU0UpOw0KLQkNCi0JQ0pTX0ljb24qIHBKU19JY29uID0gKENKU19JY29uKilKU19HZXRQcml2YXRlKHBPYmopOw0KLQlBU1NFUlQocEpTX0ljb24gIT0gTlVMTCk7DQotDQotCUljb24qIHBJY29uID0gKEljb24qKXBKU19JY29uLT5HZXRFbWJlZE9iamVjdCgpOw0KLQlBU1NFUlQocEljb24gIT0gTlVMTCk7DQotDQotCUNQREZfU3RyZWFtKiBwSWNvblN0cmVhbSA9IE5VTEw7DQotCWlmIChuZmFjZSA9PSAwKQ0KLQkJcEljb25TdHJlYW0gPSBwRm9ybUNvbnRyb2wtPkdldE5vcm1hbEljb24oKTsNCi0JZWxzZSBpZiAobmZhY2UgPT0gMSkNCi0JCXBJY29uU3RyZWFtID0gcEZvcm1Db250cm9sLT5HZXREb3duSWNvbigpOw0KLQllbHNlIGlmIChuZmFjZSA9PSAyKQ0KLQkJcEljb25TdHJlYW0gPSBwRm9ybUNvbnRyb2wtPkdldFJvbGxvdmVySWNvbigpOw0KLQllbHNlDQotCQlyZXR1cm4gRkFMU0U7DQotDQotCXBJY29uLT5TZXRTdHJlYW0ocEljb25TdHJlYW0pOw0KLQl2UmV0ID0gcEpTX0ljb247DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi0vLyNwcmFnbWEgd2FybmluZyhkZWZhdWx0OiA0ODAwKQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OmJ1dHRvbkltcG9ydEljb24oT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLSNpZiAwICANCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsNCi0JR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsNCi0JaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0JQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOw0KLQlpZiAoIXBGb3JtRmllbGQpcmV0dXJuIEZBTFNFOw0KLQ0KLQlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gbV9wRG9jdW1lbnQtPkdldEVudigpOw0KLQlBU1NFUlQocEVudik7DQotDQotCUNGWF9XaWRlU3RyaW5nIHNJY29uRmlsZU5hbWUgPSBwRW52LT5KU19maWVsZEJyb3dzZSgpOw0KLQlpZiAoc0ljb25GaWxlTmFtZS5Jc0VtcHR5KCkpIA0KLQl7DQotCQl2UmV0ID0gMTsNCi0JCXJldHVybiBUUlVFOw0KLQl9DQotDQotCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gKENQREZTREtfSW50ZXJGb3JtKiltX3BEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7DQotCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOw0KLQ0KLQlDUERGX1N0cmVhbSogcFN0cmVhbSA9IHBJbnRlckZvcm0tPkxvYWRJbWFnZUZyb21GaWxlKHNJY29uRmlsZU5hbWUpOw0KLQlpZiAoIXBTdHJlYW0pIA0KLQl7DQotCQl2UmV0ID0gLTE7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQ0KLQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBHZXRTbWFydEZpZWxkQ29udHJvbChwRm9ybUZpZWxkKTsNCi0JaWYgKCFwRm9ybUNvbnRyb2wpcmV0dXJuIEZBTFNFOw0KLQ0KLQlwRm9ybUNvbnRyb2wtPlNldE5vcm1hbEljb24ocFN0cmVhbSk7DQotCVVwZGF0ZUZvcm1Db250cm9sKG1fcERvY3VtZW50LCBwRm9ybUNvbnRyb2wsIFRSVUUsIFRSVUUsIFRSVUUpOw0KLQ0KLQl2UmV0ID0gMDsNCi0jZW5kaWYgLy8gMA0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBGaWVsZDo6YnV0dG9uU2V0Q2FwdGlvbihPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBGaWVsZDo6YnV0dG9uU2V0SWNvbihPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBGaWVsZDo6Y2hlY2tUaGlzQm94KE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlpbnQgaVNpemUgPSBwYXJhbXMuc2l6ZSgpOw0KLQlpbnQgbldpZGdldCA9IC0xOw0KLQlpZiAoIGlTaXplID49IDEpDQotCQluV2lkZ2V0PSAoRlhfSU5UMzIpIHBhcmFtc1swXTsNCi0JZWxzZQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQlGWF9CT09MIGJDaGVja2l0ID0gVFJVRTsNCi0JaWYgKCBpU2l6ZSA+PSAyKQ0KLQkJYkNoZWNraXQgPSBwYXJhbXNbMV07DQotDQotDQotCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5Ow0KLQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOw0KLQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQkNCi0JaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9DSEVDS0JPWCAmJiBwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfUkFESU9CVVRUT04pDQotCQlyZXR1cm4gRkFMU0U7CQ0KLQlpZihuV2lkZ2V0IDwwIHx8IG5XaWRnZXQgPj0gcEZvcm1GaWVsZC0+Q291bnRDb250cm9scygpKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgPT0gRklFTERUWVBFX1JBRElPQlVUVE9OKQ0KLQkJcEZvcm1GaWVsZC0+Q2hlY2tDb250cm9sKG5XaWRnZXQsIGJDaGVja2l0LCBUUlVFKTsNCi0JZWxzZQ0KLQkJcEZvcm1GaWVsZC0+Q2hlY2tDb250cm9sKG5XaWRnZXQsIGJDaGVja2l0LCBUUlVFKTsNCi0NCi0JVXBkYXRlRm9ybUZpZWxkKG1fcERvY3VtZW50LCBwRm9ybUZpZWxkLCBUUlVFLCBUUlVFLCBUUlVFKTsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OmNsZWFySXRlbXMoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBGaWVsZDo6ZGVmYXVsdElzQ2hlY2tlZChPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsNCi0NCi0JaW50IGlTaXplID0gcGFyYW1zLnNpemUoKTsNCi0JaW50IG5XaWRnZXQgPSAtMTsNCi0JaWYgKCBpU2l6ZSA+PSAxKQ0KLQkJbldpZGdldD0gKEZYX0lOVDMyKSBwYXJhbXNbMF07DQotCWVsc2UNCi0JCXJldHVybiBGQUxTRTsNCi0JLy9GWF9CT09MIGJJc0RlZmF1bHRDaGVja2VkID0gVFJVRTsNCi0JLy9pZiAoIGlTaXplID49IDIpDQotCS8vCWJJc0RlZmF1bHRDaGVja2VkID0gIHBhcmFtc1sxXTsNCi0NCi0JQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7DQotCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7DQotCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7DQotDQotCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsNCi0JQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7DQotDQotCWlmKG5XaWRnZXQgPDAgfHwgbldpZGdldCA+PSBwRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCkpDQotCXsNCi0JCXZSZXQgPSBGQUxTRTsNCi0JCXJldHVybiBGQUxTRTsNCi0JfQ0KLQlpZiAoKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpID09IEZJRUxEVFlQRV9DSEVDS0JPWCkNCi0JCXx8IChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSA9PSBGSUVMRFRZUEVfUkFESU9CVVRUT04pKQ0KLQl7DQotDQotCQl2UmV0ID0gVFJVRTsNCi0JfQ0KLQllbHNlDQotCQl2UmV0ID0gRkFMU0U7DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjpkZWxldGVJdGVtQXQoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotaW50IEpTX0NPTVBBUkVTVFJJTkcoQ0ZYX1dpZGVTdHJpbmcqIHBzMSwgQ0ZYX1dpZGVTdHJpbmcqIHBzMikNCi17DQotCUFTU0VSVChwczEgIT0gTlVMTCk7DQotCUFTU0VSVChwczIgIT0gTlVMTCk7DQotDQotCXJldHVybiBwczEtPkNvbXBhcmUoKnBzMik7DQotfQ0KLQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OmdldEFycmF5KE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsNCi0JR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsNCi0JaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0JQ0dXX0FycmF5VGVtcGxhdGU8Q0ZYX1dpZGVTdHJpbmcqPiBzd1NvcnQ7DQotDQotCWZvciAoaW50IGk9MCxzej1GaWVsZEFycmF5LkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQl7DQotCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoaSk7DQotCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JCXN3U29ydC5BZGQobmV3IENGWF9XaWRlU3RyaW5nKHBGb3JtRmllbGQtPkdldEZ1bGxOYW1lKCkpKTsNCi0JCQ0KLQl9DQotCXN3U29ydC5Tb3J0KEpTX0NPTVBBUkVTVFJJTkcpOw0KLQ0KLQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotCUNKU19SdW50aW1lKiBwUnVudGltZSA9IHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKTsNCi0JQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOw0KLQ0KLQlDSlNfQXJyYXkgRm9ybUZpZWxkQXJyYXkobV9pc29sYXRlKTsNCi0JZm9yIChpbnQgaj0wLGpzeiA9IHN3U29ydC5HZXRTaXplKCk7IGo8anN6OyBqKyspDQotCXsNCi0JCUNGWF9XaWRlU3RyaW5nKiBwU3RyID0gc3dTb3J0LkdldEF0KGopOw0KLQ0KLQkJSlNGWE9iamVjdCBwT2JqID0gSlNfTmV3RnhEeW5hbWljT2JqKCpwUnVudGltZSwgcENvbnRleHQsIEpTX0dldE9iakRlZm5JRCgqcFJ1bnRpbWUsIEwiRmllbGQiKSk7DQotCQlBU1NFUlQocE9iai5Jc0VtcHR5KCkgPT0gRkFMU0UpOw0KLQ0KLQkJQ0pTX0ZpZWxkKiBwSlNGaWVsZCA9IChDSlNfRmllbGQqKUpTX0dldFByaXZhdGUocE9iaik7DQotCQlBU1NFUlQocEpTRmllbGQgIT0gTlVMTCk7DQotDQotCQlGaWVsZCogcEZpZWxkID0gKEZpZWxkKilwSlNGaWVsZC0+R2V0RW1iZWRPYmplY3QoKTsgDQotCQlBU1NFUlQocEZpZWxkICE9IE5VTEwpOw0KLQ0KLQkJcEZpZWxkLT5BdHRhY2hGaWVsZCh0aGlzLT5tX3BKU0RvYywgKnBTdHIpOw0KLQkNCi0JCUNKU19WYWx1ZSBGb3JtRmllbGRWYWx1ZShtX2lzb2xhdGUpOw0KLQkJRm9ybUZpZWxkVmFsdWUgPSBwSlNGaWVsZDsNCi0JCUZvcm1GaWVsZEFycmF5LlNldEVsZW1lbnQoaiwgRm9ybUZpZWxkVmFsdWUpOw0KLQ0KLQkJZGVsZXRlIHBTdHI7DQotCX0NCi0NCi0JdlJldCA9IEZvcm1GaWVsZEFycmF5Ow0KLQlzd1NvcnQuUmVtb3ZlQWxsKCk7DQotCXJldHVybiBUUlVFOw0KLX0NCi0JDQotRlhfQk9PTCBGaWVsZDo6Z2V0SXRlbUF0KE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOw0KLQ0KLQlpbnQgbklkeCA9IC0xOw0KLQlpZiAocGFyYW1zLnNpemUoKSA+PTEpDQotCQluSWR4ID0gKEZYX0lOVDMyKSBwYXJhbXNbMF07DQotCUZYX0JPT0wgYkV4cG9ydCA9IFRSVUU7DQotCWludCBpU2l6ZSA9IHBhcmFtcy5zaXplKCk7DQotCWlmICggaVNpemUgPj0gMikNCi0Jew0KLQkJYkV4cG9ydCA9KEZYX0JPT0wpIHBhcmFtc1sxXTsNCi0JfQ0KLQ0KLQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsNCi0JR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsNCi0JaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsNCi0NCi0JQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOw0KLQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsNCi0NCi0JaWYgKChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSA9PSBGSUVMRFRZUEVfTElTVEJPWCkNCi0JCXx8IChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSA9PSBGSUVMRFRZUEVfQ09NQk9CT1gpKQ0KLQl7DQotCQlpZiAobklkeCA9PSAtMSB8fCBuSWR4ID4gcEZvcm1GaWVsZC0+Q291bnRPcHRpb25zKCkpDQotCQkJbklkeCA9IHBGb3JtRmllbGQtPkNvdW50T3B0aW9ucygpIC0xOw0KLQkJaWYgKGJFeHBvcnQpDQotCQl7DQotCQkJQ0ZYX1dpZGVTdHJpbmcgc3RydmFsID0gcEZvcm1GaWVsZC0+R2V0T3B0aW9uVmFsdWUobklkeCk7DQotCQkJaWYgKHN0cnZhbC5Jc0VtcHR5KCkpDQotCQkJCXZSZXQgPSBwRm9ybUZpZWxkLT5HZXRPcHRpb25MYWJlbChuSWR4KTsNCi0JCQllbHNlDQotCQkJCXZSZXQgPSBzdHJ2YWw7DQotCQl9DQotCQllbHNlDQotCQkJdlJldCA9IHBGb3JtRmllbGQtPkdldE9wdGlvbkxhYmVsKG5JZHgpOw0KLQl9DQotCWVsc2UNCi0JCXJldHVybiBGQUxTRTsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OmdldExvY2soT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6Omluc2VydEl0ZW1BdChPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjppc0JveENoZWNrZWQoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWludCBuSW5kZXggPSAtMTsNCi0JaWYgKHBhcmFtcy5zaXplKCkgPj0xKQ0KLQkJbkluZGV4ID0gKEZYX0lOVDMyKSBwYXJhbXNbMF07DQotDQotCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5Ow0KLQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOw0KLQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQlpZihuSW5kZXggPDAgfHwgbkluZGV4ID49IHBGb3JtRmllbGQtPkNvdW50Q29udHJvbHMoKSkNCi0Jew0KLQkJdlJldCA9IEZBTFNFOw0KLQkJcmV0dXJuIEZBTFNFOw0KLQl9DQotDQotCWlmICgocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgPT0gRklFTERUWVBFX0NIRUNLQk9YKQ0KLQkJfHwgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpID09IEZJRUxEVFlQRV9SQURJT0JVVFRPTikpDQotCXsNCi0JCWlmIChwRm9ybUZpZWxkLT5HZXRDb250cm9sKG5JbmRleCktPklzQ2hlY2tlZCgpICE9MCApDQotCQkJdlJldCA9IFRSVUU7DQotCQllbHNlDQotCQkJdlJldCA9IEZBTFNFOw0KLQl9DQotCWVsc2UNCi0JCXZSZXQgPSBGQUxTRTsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OmlzRGVmYXVsdENoZWNrZWQoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCWludCBuSW5kZXggPSAtMTsNCi0JaWYgKHBhcmFtcy5zaXplKCkgPj0xKQ0KLQkJbkluZGV4ID0gKEZYX0lOVDMyKSBwYXJhbXNbMF07DQotDQotCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5Ow0KLQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOw0KLQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQlpZihuSW5kZXggPDAgfHwgbkluZGV4ID49IHBGb3JtRmllbGQtPkNvdW50Q29udHJvbHMoKSkNCi0Jew0KLQkJdlJldCA9IEZBTFNFOw0KLQkJcmV0dXJuIEZBTFNFOw0KLQl9DQotCWlmICgocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgPT0gRklFTERUWVBFX0NIRUNLQk9YKQ0KLQkJfHwgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpID09IEZJRUxEVFlQRV9SQURJT0JVVFRPTikpDQotCXsNCi0JCWlmIChwRm9ybUZpZWxkLT5HZXRDb250cm9sKG5JbmRleCktPklzRGVmYXVsdENoZWNrZWQoKSAhPSAwKQ0KLQkJCXZSZXQgPSBUUlVFOw0KLQkJZWxzZQ0KLQkJCXZSZXQgPSBGQUxTRTsNCi0JfQ0KLQllbHNlDQotCQl2UmV0ID0gRkFMU0U7DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjpzZXRBY3Rpb24oT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBGaWVsZDo6c2V0Rm9jdXMoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7DQotDQotCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5Ow0KLQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOw0KLQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7DQotCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOw0KLQ0KLQlGWF9JTlQzMiBuQ291bnQgPSBwRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCk7DQotDQotCWlmIChuQ291bnQgPCAxKSByZXR1cm4gRkFMU0U7DQotDQotCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gKENQREZTREtfSW50ZXJGb3JtKiltX3BEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7DQotCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOw0KLQ0KLQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IE5VTEw7DQotCWlmIChuQ291bnQgPT0gMSkNCi0JewkNCi0JCXBXaWRnZXQgPSBwSW50ZXJGb3JtLT5HZXRXaWRnZXQocEZvcm1GaWVsZC0+R2V0Q29udHJvbCgwKSk7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gbV9wRG9jdW1lbnQtPkdldEVudigpOw0KLQkJQVNTRVJUKHBFbnYpOw0KLQkJQ1BERl9QYWdlKiBwUGFnZSA9IChDUERGX1BhZ2UqKXBFbnYtPkZGSV9HZXRDdXJyZW50UGFnZShtX3BEb2N1bWVudC0+R2V0RG9jdW1lbnQoKSk7DQotCQlpZighcFBhZ2UpDQotCQkJcmV0dXJuIEZBTFNFOw0KLQkJaWYgKENQREZTREtfUGFnZVZpZXcqIHBDdXJQYWdlVmlldyA9IG1fcERvY3VtZW50LT5HZXRQYWdlVmlldyhwUGFnZSkpDQotCQl7DQotCQkJZm9yIChGWF9JTlQzMiBpPTA7IGk8bkNvdW50OyBpKyspDQotCQkJew0KLQkJCQlpZiAoQ1BERlNES19XaWRnZXQqIHBUZW1wV2lkZ2V0ID0gIHBJbnRlckZvcm0tPkdldFdpZGdldChwRm9ybUZpZWxkLT5HZXRDb250cm9sKGkpKSkNCi0JCQkJewkJCQkNCi0JCQkJCWlmIChwVGVtcFdpZGdldC0+R2V0UERGUGFnZSgpID09IHBDdXJQYWdlVmlldy0+R2V0UERGUGFnZSgpKQ0KLQkJCQkJew0KLQkJCQkJCXBXaWRnZXQgPSBwVGVtcFdpZGdldDsNCi0JCQkJCQlicmVhazsNCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQlpZiAocFdpZGdldCkNCi0Jew0KLQkJbV9wRG9jdW1lbnQtPlNldEZvY3VzQW5ub3QocFdpZGdldCk7DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OnNldEl0ZW1zKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OnNldExvY2soT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OnNpZ25hdHVyZUdldE1vZGlmaWNhdGlvbnMoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgRmllbGQ6OnNpZ25hdHVyZUdldFNlZWRWYWx1ZShPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBGaWVsZDo6c2lnbmF0dXJlSW5mbyhPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBGaWVsZDo6c2lnbmF0dXJlU2V0U2VlZFZhbHVlKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjpzaWduYXR1cmVTaWduKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MIEZpZWxkOjpzaWduYXR1cmVWYWxpZGF0ZShPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBGaWVsZDo6c291cmNlKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCWlmICh2cC5Jc0dldHRpbmcoKSkNCi0Jew0KLQkJdnAgPDwgKENKU19PYmplY3QqKU5VTEw7DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gZGVsYXkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotDQotdm9pZCBGaWVsZDo6QWRkRGVsYXlfSW50KGVudW0gRklFTERfUFJPUCBwcm9wLCBGWF9JTlQzMiBuKQ0KLXsNCi0JQVNTRVJUKG1fcEpTRG9jICE9IE5VTEwpOw0KLQ0KLQlDSlNfRGVsYXlEYXRhKiBwTmV3RGF0YSA9IG5ldyBDSlNfRGVsYXlEYXRhOw0KLQlwTmV3RGF0YS0+c0ZpZWxkTmFtZSA9IG1fRmllbGROYW1lOw0KLQlwTmV3RGF0YS0+bkNvbnRyb2xJbmRleCA9IG1fbkZvcm1Db250cm9sSW5kZXg7DQotCXBOZXdEYXRhLT5lUHJvcCA9IHByb3A7DQotCXBOZXdEYXRhLT5udW0gPSBuOw0KLQ0KLQltX3BKU0RvYy0+QWRkRGVsYXlEYXRhKHBOZXdEYXRhKTsNCi19DQotDQotdm9pZCBGaWVsZDo6QWRkRGVsYXlfQm9vbChlbnVtIEZJRUxEX1BST1AgcHJvcCxib29sIGIpDQotew0KLQlBU1NFUlQobV9wSlNEb2MgIT0gTlVMTCk7DQotDQotCUNKU19EZWxheURhdGEqIHBOZXdEYXRhID0gbmV3IENKU19EZWxheURhdGE7DQotCXBOZXdEYXRhLT5zRmllbGROYW1lID0gbV9GaWVsZE5hbWU7DQotCXBOZXdEYXRhLT5uQ29udHJvbEluZGV4ID0gbV9uRm9ybUNvbnRyb2xJbmRleDsNCi0JcE5ld0RhdGEtPmVQcm9wID0gcHJvcDsNCi0JcE5ld0RhdGEtPmIgPSBiOw0KLQ0KLQltX3BKU0RvYy0+QWRkRGVsYXlEYXRhKHBOZXdEYXRhKTsNCi19DQotDQotdm9pZCBGaWVsZDo6QWRkRGVsYXlfU3RyaW5nKGVudW0gRklFTERfUFJPUCBwcm9wLCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyaW5nKQ0KLXsNCi0JQVNTRVJUKG1fcEpTRG9jICE9IE5VTEwpOw0KLQ0KLQlDSlNfRGVsYXlEYXRhKiBwTmV3RGF0YSA9IG5ldyBDSlNfRGVsYXlEYXRhOw0KLQlwTmV3RGF0YS0+c0ZpZWxkTmFtZSA9IG1fRmllbGROYW1lOw0KLQlwTmV3RGF0YS0+bkNvbnRyb2xJbmRleCA9IG1fbkZvcm1Db250cm9sSW5kZXg7DQotCXBOZXdEYXRhLT5lUHJvcCA9IHByb3A7DQotCXBOZXdEYXRhLT5zdHJpbmcgPSBzdHJpbmc7DQotDQotCW1fcEpTRG9jLT5BZGREZWxheURhdGEocE5ld0RhdGEpOw0KLX0NCi0NCi12b2lkIEZpZWxkOjpBZGREZWxheV9XaWRlU3RyaW5nKGVudW0gRklFTERfUFJPUCBwcm9wLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyaW5nKQ0KLXsNCi0JQVNTRVJUKG1fcEpTRG9jICE9IE5VTEwpOw0KLQ0KLQlDSlNfRGVsYXlEYXRhKiBwTmV3RGF0YSA9IG5ldyBDSlNfRGVsYXlEYXRhOw0KLQlwTmV3RGF0YS0+c0ZpZWxkTmFtZSA9IG1fRmllbGROYW1lOw0KLQlwTmV3RGF0YS0+bkNvbnRyb2xJbmRleCA9IG1fbkZvcm1Db250cm9sSW5kZXg7DQotCXBOZXdEYXRhLT5lUHJvcCA9IHByb3A7DQotCXBOZXdEYXRhLT53aWRlc3RyaW5nID0gc3RyaW5nOw0KLQ0KLQltX3BKU0RvYy0+QWRkRGVsYXlEYXRhKHBOZXdEYXRhKTsNCi19DQotDQotdm9pZCBGaWVsZDo6QWRkRGVsYXlfUmVjdChlbnVtIEZJRUxEX1BST1AgcHJvcCwgY29uc3QgQ1BERl9SZWN0JiByZWN0KQ0KLXsNCi0JQVNTRVJUKG1fcEpTRG9jICE9IE5VTEwpOw0KLQ0KLQlDSlNfRGVsYXlEYXRhKiBwTmV3RGF0YSA9IG5ldyBDSlNfRGVsYXlEYXRhOw0KLQlwTmV3RGF0YS0+c0ZpZWxkTmFtZSA9IG1fRmllbGROYW1lOw0KLQlwTmV3RGF0YS0+bkNvbnRyb2xJbmRleCA9IG1fbkZvcm1Db250cm9sSW5kZXg7DQotCXBOZXdEYXRhLT5lUHJvcCA9IHByb3A7DQotCXBOZXdEYXRhLT5yZWN0ID0gcmVjdDsNCi0NCi0JbV9wSlNEb2MtPkFkZERlbGF5RGF0YShwTmV3RGF0YSk7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OkFkZERlbGF5X0NvbG9yKGVudW0gRklFTERfUFJPUCBwcm9wLCBjb25zdCBDUFdMX0NvbG9yJiBjb2xvcikNCi17DQotCUFTU0VSVChtX3BKU0RvYyAhPSBOVUxMKTsNCi0NCi0JQ0pTX0RlbGF5RGF0YSogcE5ld0RhdGEgPSBuZXcgQ0pTX0RlbGF5RGF0YTsNCi0JcE5ld0RhdGEtPnNGaWVsZE5hbWUgPSBtX0ZpZWxkTmFtZTsNCi0JcE5ld0RhdGEtPm5Db250cm9sSW5kZXggPSBtX25Gb3JtQ29udHJvbEluZGV4Ow0KLQlwTmV3RGF0YS0+ZVByb3AgPSBwcm9wOw0KLQlwTmV3RGF0YS0+Y29sb3IgPSBjb2xvcjsNCi0NCi0JbV9wSlNEb2MtPkFkZERlbGF5RGF0YShwTmV3RGF0YSk7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OkFkZERlbGF5X1dvcmRBcnJheShlbnVtIEZJRUxEX1BST1AgcHJvcCwgY29uc3QgQ0ZYX0RXb3JkQXJyYXkmIGFycmF5KQ0KLXsNCi0JQVNTRVJUKG1fcEpTRG9jICE9IE5VTEwpOw0KLQ0KLQlDSlNfRGVsYXlEYXRhKiBwTmV3RGF0YSA9IG5ldyBDSlNfRGVsYXlEYXRhOw0KLQlwTmV3RGF0YS0+c0ZpZWxkTmFtZSA9IG1fRmllbGROYW1lOw0KLQlwTmV3RGF0YS0+bkNvbnRyb2xJbmRleCA9IG1fbkZvcm1Db250cm9sSW5kZXg7DQotCXBOZXdEYXRhLT5lUHJvcCA9IHByb3A7DQotDQotCWZvciAoaW50IGk9MCxzej1hcnJheS5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0JCXBOZXdEYXRhLT53b3JkYXJyYXkuQWRkKGFycmF5LkdldEF0KGkpKTsNCi0NCi0JbV9wSlNEb2MtPkFkZERlbGF5RGF0YShwTmV3RGF0YSk7DQotfQ0KLQ0KLXZvaWQgRmllbGQ6OkFkZERlbGF5X1dpZGVTdHJpbmdBcnJheShlbnVtIEZJRUxEX1BST1AgcHJvcCwgY29uc3QgQ0pTX1dpZGVTdHJpbmdBcnJheSYgYXJyYXkpDQotew0KLQlBU1NFUlQobV9wSlNEb2MgIT0gTlVMTCk7DQotDQotCUNKU19EZWxheURhdGEqIHBOZXdEYXRhID0gbmV3IENKU19EZWxheURhdGE7DQotCXBOZXdEYXRhLT5zRmllbGROYW1lID0gbV9GaWVsZE5hbWU7DQotCXBOZXdEYXRhLT5uQ29udHJvbEluZGV4ID0gbV9uRm9ybUNvbnRyb2xJbmRleDsNCi0JcE5ld0RhdGEtPmVQcm9wID0gcHJvcDsNCi0JZm9yIChpbnQgaT0wLHN6PWFycmF5LkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQkJcE5ld0RhdGEtPndpZGVzdHJpbmdhcnJheS5BZGQoYXJyYXkuR2V0QXQoaSkpOw0KLQ0KLQltX3BKU0RvYy0+QWRkRGVsYXlEYXRhKHBOZXdEYXRhKTsNCi19DQotDQotdm9pZCBGaWVsZDo6RG9EZWxheShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIENKU19EZWxheURhdGEqIHBEYXRhKQ0KLXsNCi0JQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsNCi0JQVNTRVJUKHBEYXRhICE9IE5VTEwpOw0KLQ0KLQlzd2l0Y2ggKHBEYXRhLT5lUHJvcCkNCi0Jew0KLQljYXNlIEZQX0FMSUdOTUVOVDoNCi0JCUZpZWxkOjpTZXRBbGlnbm1lbnQocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5zdHJpbmcpOw0KLQkJYnJlYWs7DQotCWNhc2UgRlBfQk9SREVSU1RZTEU6DQotCQlGaWVsZDo6U2V0Qm9yZGVyU3R5bGUocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5zdHJpbmcpOw0KLQkJYnJlYWs7DQotCWNhc2UgRlBfQlVUVE9OQUxJR05YOg0KLQkJRmllbGQ6OlNldEJ1dHRvbkFsaWduWChwRG9jdW1lbnQsIHBEYXRhLT5zRmllbGROYW1lLCBwRGF0YS0+bkNvbnRyb2xJbmRleCwgcERhdGEtPm51bSk7DQotCQlicmVhazsNCi0JY2FzZSBGUF9CVVRUT05BTElHTlk6DQotCQlGaWVsZDo6U2V0QnV0dG9uQWxpZ25ZKHBEb2N1bWVudCwgcERhdGEtPnNGaWVsZE5hbWUsIHBEYXRhLT5uQ29udHJvbEluZGV4LCBwRGF0YS0+bnVtKTsNCi0JCWJyZWFrOw0KLQljYXNlIEZQX0JVVFRPTkZJVEJPVU5EUzoNCi0JCUZpZWxkOjpTZXRCdXR0b25GaXRCb3VuZHMocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5iKTsNCi0JCWJyZWFrOw0KLQljYXNlIEZQX0JVVFRPTlBPU0lUSU9OOg0KLQkJRmllbGQ6OlNldEJ1dHRvblBvc2l0aW9uKHBEb2N1bWVudCwgcERhdGEtPnNGaWVsZE5hbWUsIHBEYXRhLT5uQ29udHJvbEluZGV4LCBwRGF0YS0+bnVtKTsNCi0JCWJyZWFrOw0KLQljYXNlIEZQX0JVVFRPTlNDQUxFSE9XOg0KLQkJRmllbGQ6OlNldEJ1dHRvblNjYWxlSG93KHBEb2N1bWVudCwgcERhdGEtPnNGaWVsZE5hbWUsIHBEYXRhLT5uQ29udHJvbEluZGV4LCBwRGF0YS0+bnVtKTsNCi0JCWJyZWFrOw0KLQljYXNlIEZQX0JVVFRPTlNDQUxFV0hFTjoNCi0JCUZpZWxkOjpTZXRCdXR0b25TY2FsZVdoZW4ocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5udW0pOw0KLQkJYnJlYWs7DQotCWNhc2UgRlBfQ0FMQ09SREVSSU5ERVg6DQotCQlGaWVsZDo6U2V0Q2FsY09yZGVySW5kZXgocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5udW0pOw0KLQkJYnJlYWs7DQotCWNhc2UgRlBfQ0hBUkxJTUlUOg0KLQkJRmllbGQ6OlNldENoYXJMaW1pdChwRG9jdW1lbnQsIHBEYXRhLT5zRmllbGROYW1lLCBwRGF0YS0+bkNvbnRyb2xJbmRleCwgcERhdGEtPm51bSk7DQotCQlicmVhazsNCi0JY2FzZSBGUF9DT01COg0KLQkJRmllbGQ6OlNldENvbWIocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5iKTsNCi0JCWJyZWFrOw0KLQljYXNlIEZQX0NPTU1JVE9OU0VMQ0hBTkdFOg0KLQkJRmllbGQ6OlNldENvbW1pdE9uU2VsQ2hhbmdlKHBEb2N1bWVudCwgcERhdGEtPnNGaWVsZE5hbWUsIHBEYXRhLT5uQ29udHJvbEluZGV4LCBwRGF0YS0+Yik7DQotCQlicmVhazsNCi0JY2FzZSBGUF9DVVJSRU5UVkFMVUVJTkRJQ0VTOg0KLQkJRmllbGQ6OlNldEN1cnJlbnRWYWx1ZUluZGljZXMocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT53b3JkYXJyYXkpOw0KLQkJYnJlYWs7DQotCWNhc2UgRlBfREVGQVVMVFZBTFVFOg0KLQkJRmllbGQ6OlNldERlZmF1bHRWYWx1ZShwRG9jdW1lbnQsIHBEYXRhLT5zRmllbGROYW1lLCBwRGF0YS0+bkNvbnRyb2xJbmRleCwgcERhdGEtPndpZGVzdHJpbmcpOw0KLQkJYnJlYWs7DQotCWNhc2UgRlBfRE9OT1RTQ1JPTEw6DQotCQlGaWVsZDo6U2V0RG9Ob3RTY3JvbGwocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5iKTsNCi0JCWJyZWFrOw0KLQljYXNlIEZQX0RJU1BMQVk6DQotCQlGaWVsZDo6U2V0RGlzcGxheShwRG9jdW1lbnQsIHBEYXRhLT5zRmllbGROYW1lLCBwRGF0YS0+bkNvbnRyb2xJbmRleCwgcERhdGEtPm51bSk7DQotCQlicmVhazsNCi0JY2FzZSBGUF9GSUxMQ09MT1I6DQotCQlGaWVsZDo6U2V0RmlsbENvbG9yKHBEb2N1bWVudCwgcERhdGEtPnNGaWVsZE5hbWUsIHBEYXRhLT5uQ29udHJvbEluZGV4LCBwRGF0YS0+Y29sb3IpOw0KLQkJYnJlYWs7DQotCWNhc2UgRlBfSElEREVOOg0KLQkJRmllbGQ6OlNldEhpZGRlbihwRG9jdW1lbnQsIHBEYXRhLT5zRmllbGROYW1lLCBwRGF0YS0+bkNvbnRyb2xJbmRleCwgcERhdGEtPmIpOw0KLQkJYnJlYWs7DQotCWNhc2UgRlBfSElHSExJR0hUOg0KLQkJRmllbGQ6OlNldEhpZ2hsaWdodChwRG9jdW1lbnQsIHBEYXRhLT5zRmllbGROYW1lLCBwRGF0YS0+bkNvbnRyb2xJbmRleCwgcERhdGEtPnN0cmluZyk7DQotCQlicmVhazsNCi0JY2FzZSBGUF9MSU5FV0lEVEg6DQotCQlGaWVsZDo6U2V0TGluZVdpZHRoKHBEb2N1bWVudCwgcERhdGEtPnNGaWVsZE5hbWUsIHBEYXRhLT5uQ29udHJvbEluZGV4LCBwRGF0YS0+bnVtKTsNCi0JCWJyZWFrOw0KLQljYXNlIEZQX01VTFRJTElORToNCi0JCUZpZWxkOjpTZXRNdWx0aWxpbmUocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5iKTsNCi0JCWJyZWFrOw0KLQljYXNlIEZQX01VTFRJUExFU0VMRUNUSU9OOg0KLQkJRmllbGQ6OlNldE11bHRpcGxlU2VsZWN0aW9uKHBEb2N1bWVudCwgcERhdGEtPnNGaWVsZE5hbWUsIHBEYXRhLT5uQ29udHJvbEluZGV4LCBwRGF0YS0+Yik7DQotCQlicmVhazsNCi0JY2FzZSBGUF9QQVNTV09SRDoNCi0JCUZpZWxkOjpTZXRQYXNzd29yZChwRG9jdW1lbnQsIHBEYXRhLT5zRmllbGROYW1lLCBwRGF0YS0+bkNvbnRyb2xJbmRleCwgcERhdGEtPmIpOw0KLQkJYnJlYWs7DQotCWNhc2UgRlBfUkVDVDoNCi0JCUZpZWxkOjpTZXRSZWN0KHBEb2N1bWVudCwgcERhdGEtPnNGaWVsZE5hbWUsIHBEYXRhLT5uQ29udHJvbEluZGV4LCBwRGF0YS0+cmVjdCk7DQotCQlicmVhazsNCi0JY2FzZSBGUF9SSUNIVEVYVDoNCi0JCUZpZWxkOjpTZXRSaWNoVGV4dChwRG9jdW1lbnQsIHBEYXRhLT5zRmllbGROYW1lLCBwRGF0YS0+bkNvbnRyb2xJbmRleCwgcERhdGEtPmIpOw0KLQkJYnJlYWs7DQotCWNhc2UgRlBfUklDSFZBTFVFOg0KLQkJYnJlYWs7DQotCWNhc2UgRlBfUk9UQVRJT046DQotCQlGaWVsZDo6U2V0Um90YXRpb24ocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5udW0pOw0KLQkJYnJlYWs7DQotCWNhc2UgRlBfU1RST0tFQ09MT1I6DQotCQlGaWVsZDo6U2V0U3Ryb2tlQ29sb3IocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5jb2xvcik7DQotCQlicmVhazsNCi0JY2FzZSBGUF9TVFlMRToNCi0JCUZpZWxkOjpTZXRTdHlsZShwRG9jdW1lbnQsIHBEYXRhLT5zRmllbGROYW1lLCBwRGF0YS0+bkNvbnRyb2xJbmRleCwgcERhdGEtPnN0cmluZyk7DQotCQlicmVhazsNCi0JY2FzZSBGUF9URVhUQ09MT1I6DQotCQlGaWVsZDo6U2V0VGV4dENvbG9yKHBEb2N1bWVudCwgcERhdGEtPnNGaWVsZE5hbWUsIHBEYXRhLT5uQ29udHJvbEluZGV4LCBwRGF0YS0+Y29sb3IpOw0KLQkJYnJlYWs7DQotCWNhc2UgRlBfVEVYVEZPTlQ6DQotCQlGaWVsZDo6U2V0VGV4dEZvbnQocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5zdHJpbmcpOw0KLQkJYnJlYWs7DQotCWNhc2UgRlBfVEVYVFNJWkU6DQotCQlGaWVsZDo6U2V0VGV4dFNpemUocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5udW0pOw0KLQkJYnJlYWs7DQotCWNhc2UgRlBfVVNFUk5BTUU6DQotCQlGaWVsZDo6U2V0VXNlck5hbWUocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT53aWRlc3RyaW5nKTsNCi0JCWJyZWFrOw0KLQljYXNlIEZQX1ZBTFVFOg0KLQkJRmllbGQ6OlNldFZhbHVlKHBEb2N1bWVudCwgcERhdGEtPnNGaWVsZE5hbWUsIHBEYXRhLT5uQ29udHJvbEluZGV4LCBwRGF0YS0+d2lkZXN0cmluZ2FycmF5KTsNCi0JCWJyZWFrOw0KLQl9DQotfQ0KLQ0KLSNkZWZpbmUgSlNfRklFTERfTUlOV0lEVEgJMQ0KLSNkZWZpbmUgSlNfRklFTERfTUlOSEVJR0hUCTENCi0NCi12b2lkIEZpZWxkOjpBZGRGaWVsZChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGludCBuUGFnZUluZGV4LCBpbnQgbkZpZWxkVHlwZSwNCi0JCQkJCQkJY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNOYW1lLCBjb25zdCBDUERGX1JlY3QmIHJjQ29vcmRzKQ0KLXsNCi0JLy9Ob3Qgc3VwcG9ydGVkLg0KLX0NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0phdmFTY3JpcHQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSUphdmFTY3JpcHQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRGVmaW5lLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX09iamVjdC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19WYWx1ZS5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9GaWVsZC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19FdmVudEhhbmRsZXIuaCIKKy8vI2luY2x1ZGUgIi4uL2luY2x1ZGUvSlNfUmVzTWdyLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0NvbnRleHQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfUnVudGltZS5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9Eb2N1bWVudC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9jb2xvci5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9QdWJsaWNNZXRob2RzLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0ljb24uaCIKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZpZWxkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQkVHSU5fSlNfU1RBVElDX0NPTlNUKENKU19GaWVsZCkKK0VORF9KU19TVEFUSUNfQ09OU1QoKQorCitCRUdJTl9KU19TVEFUSUNfUFJPUChDSlNfRmllbGQpCisJSlNfU1RBVElDX1BST1BfRU5UUlkoYWxpZ25tZW50KQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGJvcmRlclN0eWxlKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGJ1dHRvbkFsaWduWCkKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShidXR0b25BbGlnblkpCisJSlNfU1RBVElDX1BST1BfRU5UUlkoYnV0dG9uRml0Qm91bmRzKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGJ1dHRvblBvc2l0aW9uKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGJ1dHRvblNjYWxlSG93KQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGJ1dHRvblNjYWxlV2hlbikKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShjYWxjT3JkZXJJbmRleCkKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShjaGFyTGltaXQpCisJSlNfU1RBVElDX1BST1BfRU5UUlkoY29tYikKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShjb21taXRPblNlbENoYW5nZSkKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShjdXJyZW50VmFsdWVJbmRpY2VzKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGRlZmF1bHRTdHlsZSkKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShkZWZhdWx0VmFsdWUpCisJSlNfU1RBVElDX1BST1BfRU5UUlkoZG9Ob3RTY3JvbGwpCisJSlNfU1RBVElDX1BST1BfRU5UUlkoZG9Ob3RTcGVsbENoZWNrKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGRlbGF5KQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGRpc3BsYXkpCisJSlNfU1RBVElDX1BST1BfRU5UUlkoZG9jKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGVkaXRhYmxlKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGV4cG9ydFZhbHVlcykKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShoaWRkZW4pCisJSlNfU1RBVElDX1BST1BfRU5UUlkoZmlsZVNlbGVjdCkKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShmaWxsQ29sb3IpCisJSlNfU1RBVElDX1BST1BfRU5UUlkobGluZVdpZHRoKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGhpZ2hsaWdodCkKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShtdWx0aWxpbmUpCisJSlNfU1RBVElDX1BST1BfRU5UUlkobXVsdGlwbGVTZWxlY3Rpb24pCisJSlNfU1RBVElDX1BST1BfRU5UUlkobmFtZSkKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShudW1JdGVtcykKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShwYWdlKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHBhc3N3b3JkKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHByaW50KQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHJhZGlvc0luVW5pc29uKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHJlYWRvbmx5KQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHJlY3QpCisJSlNfU1RBVElDX1BST1BfRU5UUlkocmVxdWlyZWQpCisJSlNfU1RBVElDX1BST1BfRU5UUlkocmljaFRleHQpCisJSlNfU1RBVElDX1BST1BfRU5UUlkocmljaFZhbHVlKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHJvdGF0aW9uKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHN0cm9rZUNvbG9yKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHN0eWxlKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHN1Ym1pdE5hbWUpCisJSlNfU1RBVElDX1BST1BfRU5UUlkodGV4dENvbG9yKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHRleHRGb250KQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHRleHRTaXplKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHR5cGUpCisJSlNfU1RBVElDX1BST1BfRU5UUlkodXNlck5hbWUpCisJSlNfU1RBVElDX1BST1BfRU5UUlkodmFsdWUpCisJSlNfU1RBVElDX1BST1BfRU5UUlkodmFsdWVBc1N0cmluZykKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShzb3VyY2UpCitFTkRfSlNfU1RBVElDX1BST1AoKQorCitCRUdJTl9KU19TVEFUSUNfTUVUSE9EKENKU19GaWVsZCkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGJyb3dzZUZvckZpbGVUb1N1Ym1pdCwgICAgICAwKQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoYnV0dG9uR2V0Q2FwdGlvbiwgICAgICAgICAgIDEpCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShidXR0b25HZXRJY29uLCAgICAgICAgICAgICAgMSkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGJ1dHRvbkltcG9ydEljb24sICAgICAgICAgICAwKQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoYnV0dG9uU2V0Q2FwdGlvbiwgICAgICAgICAgIDIpCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShidXR0b25TZXRJY29uLCAgICAgICAgICAgICAgMikKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGNoZWNrVGhpc0JveCwgICAgICAgICAgICAgICAyKQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoY2xlYXJJdGVtcywgICAgICAgICAgICAgICAgIDApCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShkZWZhdWx0SXNDaGVja2VkLCAgICAgICAgICAgMikKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGRlbGV0ZUl0ZW1BdCwgICAgICAgICAgICAgICAxKQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZ2V0QXJyYXkgLCAgICAgICAgICAgICAgICAgIDApCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShnZXRJdGVtQXQsICAgICAgICAgICAgICAgICAgMCkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGdldExvY2ssICAgICAgICAgICAgICAgICAgICAwKQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoaW5zZXJ0SXRlbUF0LCAgICAgICAgICAgICAgIDApCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShpc0JveENoZWNrZWQsICAgICAgICAgICAgICAgMSkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGlzRGVmYXVsdENoZWNrZWQsICAgICAgICAgICAxKQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoc2V0QWN0aW9uLCAgICAgICAgICAgICAgICAgIDIpCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShzZXRGb2N1cywgICAgICAgICAgICAgICAgICAgMCkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKHNldEl0ZW1zLCAgICAgICAgICAgICAgICAgICAxKQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoc2V0TG9jaywgICAgICAgICAgICAgICAgICAgIDApCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShzaWduYXR1cmVHZXRNb2RpZmljYXRpb25zLCAgMCkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKHNpZ25hdHVyZUdldFNlZWRWYWx1ZSwgICAgICAwKQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoc2lnbmF0dXJlSW5mbywgICAgICAgICAgICAgIDApCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShzaWduYXR1cmVTZXRTZWVkVmFsdWUsICAgICAgMCkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKHNpZ25hdHVyZVNpZ24sICAgICAgICAgICAgICAwKQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoc2lnbmF0dXJlVmFsaWRhdGUsICAgICAgICAgIDApCitFTkRfSlNfU1RBVElDX01FVEhPRCgpCisKK0lNUExFTUVOVF9KU19DTEFTUyhDSlNfRmllbGQsIEZpZWxkKQorCitGWF9CT09MCUNKU19GaWVsZDo6SW5pdEluc3RhbmNlKElGWEpTX0NvbnRleHQqIGNjKQoreworCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7CisJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCisJRmllbGQqIHBGaWVsZCA9IChGaWVsZCopR2V0RW1iZWRPYmplY3QoKTsKKwlBU1NFUlQocEZpZWxkICE9IE5VTEwpOworCisJcEZpZWxkLT5TZXRJc29sYXRlKHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKS0+R2V0SXNvbGF0ZSgpKTsKKworCXJldHVybiBUUlVFOworfTsKKworRmllbGQ6OkZpZWxkKENKU19PYmplY3QqIHBKU09iamVjdCk6IENKU19FbWJlZE9iaihwSlNPYmplY3QpLAorCW1fcEpTRG9jKE5VTEwpLAorCW1fcERvY3VtZW50KE5VTEwpLAorCW1fbkZvcm1Db250cm9sSW5kZXgoLTEpLAorCW1fYkNhblNldChGQUxTRSksCisJbV9iRGVsYXkoRkFMU0UpLAorCW1faXNvbGF0ZShOVUxMKQoreworfQorCitGaWVsZDo6fkZpZWxkKCkKK3sKK30KKworLy9ub3RlOiBpQ29udHJvbE5vID0gLTEsIG1lYW5zIG5vdCBhIHdpZGdldC4KK3ZvaWQgRmllbGQ6OlBhcnNlRmllbGROYW1lKGNvbnN0IHN0ZDo6d3N0cmluZyAmc3RyRmllbGROYW1lUGFyc2VkLHN0ZDo6d3N0cmluZyAmc3RyRmllbGROYW1lLGludCAmIGlDb250cm9sTm8pCit7CisJaW50IGlTdGFydCA9IHN0ckZpZWxkTmFtZVBhcnNlZC5maW5kX2xhc3Rfb2YoTCcuJyk7CisJaWYgKGlTdGFydCA9PSAtMSkKKwl7CisJCXN0ckZpZWxkTmFtZSA9IHN0ckZpZWxkTmFtZVBhcnNlZDsKKwkJaUNvbnRyb2xObyA9IC0xOworCQlyZXR1cm47CisJfQorCXN0ZDo6d3N0cmluZyBzdWZmaXhhbCA9IHN0ckZpZWxkTmFtZVBhcnNlZC5zdWJzdHIoaVN0YXJ0KzEpOworCWlDb250cm9sTm8gPSBGWFNZU193dG9pKChGWF9MUENXU1RSKXN1ZmZpeGFsLmNfc3RyKCkpOworCWlmIChpQ29udHJvbE5vID09IDApCisJeworCQlpbnQgaVN0YXJ0OworCQl3aGlsZSgoaVN0YXJ0ID0gc3VmZml4YWwuZmluZF9sYXN0X29mKEwiICIpKSAhPSAtMSkKKwkJeworCQkJc3VmZml4YWwuZXJhc2UoaVN0YXJ0LDEpOworCQl9CisKKwkJaWYgKHN1ZmZpeGFsLmNvbXBhcmUoTCIwIikgIT0gMCkKKwkJeworCQkJc3RyRmllbGROYW1lID0gc3RyRmllbGROYW1lUGFyc2VkOworCQkJaUNvbnRyb2xObyA9IC0xOworCQkJcmV0dXJuOworCQl9CisKKwl9CisJc3RyRmllbGROYW1lID0gc3RyRmllbGROYW1lUGFyc2VkLnN1YnN0cigwLGlTdGFydCk7ICAgIAorfQorCitGWF9CT09MIEZpZWxkOjpBdHRhY2hGaWVsZChEb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgY3NGaWVsZE5hbWUpCit7CisJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsKKwltX3BKU0RvYyA9IHBEb2N1bWVudDsKKworCW1fcERvY3VtZW50ID0gcERvY3VtZW50LT5HZXRSZWFkZXJEb2MoKTsKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwltX2JDYW5TZXQgPSBtX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fRklMTF9GT1JNKSB8fCAKKwkJbV9wRG9jdW1lbnQtPkdldFBlcm1pc3Npb25zKEZQREZQRVJNX0FOTk9UX0ZPUk0pIHx8IAorCQltX3BEb2N1bWVudC0+R2V0UGVybWlzc2lvbnMoRlBERlBFUk1fTU9ESUZZKTsKKworCUNQREZTREtfSW50ZXJGb3JtKiBwUkRJbnRlckZvcm0gPSBtX3BEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7CisJQVNTRVJUKHBSREludGVyRm9ybSAhPSBOVUxMKTsKKworCUNQREZfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gcFJESW50ZXJGb3JtLT5HZXRJbnRlckZvcm0oKTsKKwlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsKKworCUNGWF9XaWRlU3RyaW5nIHN3RmllbGROYW1lVGVtcCA9IGNzRmllbGROYW1lOworCXN3RmllbGROYW1lVGVtcC5SZXBsYWNlKChGWF9MUENXU1RSKUwiLi4iLCAoRlhfTFBDV1NUUilMIi4iKTsKKworCWlmIChwSW50ZXJGb3JtLT5Db3VudEZpZWxkcyhzd0ZpZWxkTmFtZVRlbXApIDw9IDApCisJeworCQlzdGQ6OndzdHJpbmcgc3RyRmllbGROYW1lOworCQlpbnQgaUNvbnRyb2xObyA9IC0xOworCQlQYXJzZUZpZWxkTmFtZSgod2NoYXJfdCopKEZYX0xQQ1dTVFIpc3dGaWVsZE5hbWVUZW1wLCBzdHJGaWVsZE5hbWUsIGlDb250cm9sTm8pOworCQlpZiAoaUNvbnRyb2xObyA9PSAtMSkgcmV0dXJuIEZBTFNFOworCQkKKwkJbV9GaWVsZE5hbWUgPSBzdHJGaWVsZE5hbWUuY19zdHIoKTsKKwkJbV9uRm9ybUNvbnRyb2xJbmRleCA9IGlDb250cm9sTm87CisJCXJldHVybiBUUlVFOworCX0KKworCW1fRmllbGROYW1lID0gc3dGaWVsZE5hbWVUZW1wOworCW1fbkZvcm1Db250cm9sSW5kZXggPSAtMTsKKworCXJldHVybiBUUlVFOworfQorCit2b2lkIEZpZWxkOjpHZXRGb3JtRmllbGRzKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIGNzRmllbGROYW1lLCBDRlhfUHRyQXJyYXkmIEZpZWxkQXJyYXkpCit7CisJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsKKworCUNQREZTREtfSW50ZXJGb3JtKiBwUmVhZGVySW50ZXJGb3JtID0gcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsKKwlBU1NFUlQocFJlYWRlckludGVyRm9ybSAhPSBOVUxMKTsKKworCUNQREZfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gcFJlYWRlckludGVyRm9ybS0+R2V0SW50ZXJGb3JtKCk7CisJQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7CisKKwlBU1NFUlQoRmllbGRBcnJheS5HZXRTaXplKCkgPT0gMCk7CisKKwlmb3IgKGludCBpPTAsc3o9cEludGVyRm9ybS0+Q291bnRGaWVsZHMoY3NGaWVsZE5hbWUpOyBpPHN6OyBpKyspCisJeworCQlpZiAoQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSBwSW50ZXJGb3JtLT5HZXRGaWVsZChpLCBjc0ZpZWxkTmFtZSkpCisJCQlGaWVsZEFycmF5LkFkZCgodm9pZCopcEZvcm1GaWVsZCk7CisJfQorfQorCit2b2lkIEZpZWxkOjpHZXRGb3JtRmllbGRzKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBjc0ZpZWxkTmFtZSwgQ0ZYX1B0ckFycmF5JiBGaWVsZEFycmF5KQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCUZpZWxkOjpHZXRGb3JtRmllbGRzKG1fcERvY3VtZW50LCBjc0ZpZWxkTmFtZSwgRmllbGRBcnJheSk7Cit9CisKK3ZvaWQgRmllbGQ6OlVwZGF0ZUZvcm1GaWVsZChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkLCAKKwkJCQkJCQlGWF9CT09MIGJDaGFuZ2VNYXJrLCBGWF9CT09MIGJSZXNldEFQLCBGWF9CT09MIGJSZWZyZXNoKQoreworCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7CisJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsKKwlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsKKworCUNGWF9QdHJBcnJheSB3aWRnZXRzOworCXBJbnRlckZvcm0tPkdldFdpZGdldHMocEZvcm1GaWVsZCwgd2lkZ2V0cyk7CisKKwlpZiAoYlJlc2V0QVApCisJeworCQlpbnQgbkZpZWxkVHlwZSA9IHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpOworCQlpZiAobkZpZWxkVHlwZSA9PSBGSUVMRFRZUEVfQ09NQk9CT1ggfHwgbkZpZWxkVHlwZSA9PSBGSUVMRFRZUEVfVEVYVEZJRUxEKQorCQl7CisJCQlmb3IgKGludCBpPTAsc3o9d2lkZ2V0cy5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwkJCXsKKwkJCQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IChDUERGU0RLX1dpZGdldCopd2lkZ2V0cy5HZXRBdChpKTsKKwkJCQlBU1NFUlQocFdpZGdldCAhPSBOVUxMKTsKKworCQkJCUZYX0JPT0wgYkZvcm1hdGVkID0gRkFMU0U7CisJCQkJQ0ZYX1dpZGVTdHJpbmcgc1ZhbHVlID0gcFdpZGdldC0+T25Gb3JtYXQoMCwgYkZvcm1hdGVkKTsKKwkJCQlpZiAoYkZvcm1hdGVkKQorCQkJCQlwV2lkZ2V0LT5SZXNldEFwcGVhcmFuY2Uoc1ZhbHVlLCBGQUxTRSk7CisJCQkJZWxzZQorCQkJCQlwV2lkZ2V0LT5SZXNldEFwcGVhcmFuY2UoTlVMTCwgRkFMU0UpOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJZm9yIChpbnQgaT0wLHN6PXdpZGdldHMuR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJCQl7CisJCQkJQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSAoQ1BERlNES19XaWRnZXQqKXdpZGdldHMuR2V0QXQoaSk7CisJCQkJQVNTRVJUKHBXaWRnZXQgIT0gTlVMTCk7CisKKwkJCQlwV2lkZ2V0LT5SZXNldEFwcGVhcmFuY2UoTlVMTCwgRkFMU0UpOworCQkJfQorCQl9CisJfQorCisJaWYgKGJSZWZyZXNoKQorCXsKKwkJZm9yIChpbnQgaT0wLHN6PXdpZGdldHMuR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJCXsKKwkJCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gKENQREZTREtfV2lkZ2V0Kil3aWRnZXRzLkdldEF0KGkpOworCQkJQVNTRVJUKHBXaWRnZXQgIT0gTlVMTCk7CisJCQkKKwkJCUNQREZTREtfSW50ZXJGb3JtICogcEludGVyRm9ybSA9IHBXaWRnZXQtPkdldEludGVyRm9ybSgpOworCQkJQ1BERlNES19Eb2N1bWVudCogcERvYyA9IHBJbnRlckZvcm0tPkdldERvY3VtZW50KCk7CisvLyAJCQlDUmVhZGVyX1BhZ2UqIHBQYWdlID0gcFdpZGdldC0+R2V0UGFnZSgpOworIAkJCUFTU0VSVChwRG9jICE9IE5VTEwpOworCQkJcERvYy0+VXBkYXRlQWxsVmlld3MoTlVMTCwgcFdpZGdldCk7CisJCX0KKwl9CQkKKwkKKwlpZiAoYkNoYW5nZU1hcmspCisJCXBEb2N1bWVudC0+U2V0Q2hhbmdlTWFyaygpOworfQorCit2b2lkIEZpZWxkOjpVcGRhdGVGb3JtQ29udHJvbChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIENQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCwgCisJCQkJCQkJRlhfQk9PTCBiQ2hhbmdlTWFyaywgRlhfQk9PTCBiUmVzZXRBUCwgRlhfQk9PTCBiUmVmcmVzaCkKK3sKKwlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOworCUFTU0VSVChwRm9ybUNvbnRyb2wgIT0gTlVMTCk7CisKKwlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsKKwlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsKKworCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gcEludGVyRm9ybS0+R2V0V2lkZ2V0KHBGb3JtQ29udHJvbCk7CisJCisJaWYgKHBXaWRnZXQpCisJeworCQlpZiAoYlJlc2V0QVApCisJCXsKKwkJCWludCBuRmllbGRUeXBlID0gcFdpZGdldC0+R2V0RmllbGRUeXBlKCk7CisJCQlpZiAobkZpZWxkVHlwZSA9PSBGSUVMRFRZUEVfQ09NQk9CT1ggfHwgbkZpZWxkVHlwZSA9PSBGSUVMRFRZUEVfVEVYVEZJRUxEKQorCQkJeworCQkJCUZYX0JPT0wgYkZvcm1hdGVkID0gRkFMU0U7CisJCQkJQ0ZYX1dpZGVTdHJpbmcgc1ZhbHVlID0gcFdpZGdldC0+T25Gb3JtYXQoMCwgYkZvcm1hdGVkKTsKKwkJCQlpZiAoYkZvcm1hdGVkKQorCQkJCQlwV2lkZ2V0LT5SZXNldEFwcGVhcmFuY2Uoc1ZhbHVlLCBGQUxTRSk7CisJCQkJZWxzZQorCQkJCQlwV2lkZ2V0LT5SZXNldEFwcGVhcmFuY2UoTlVMTCwgRkFMU0UpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXBXaWRnZXQtPlJlc2V0QXBwZWFyYW5jZShOVUxMLCBGQUxTRSk7CisJCQl9CisJCX0KKworCQlpZiAoYlJlZnJlc2gpCisJCXsKKwkJCUNQREZTREtfSW50ZXJGb3JtICogcEludGVyRm9ybSA9IHBXaWRnZXQtPkdldEludGVyRm9ybSgpOworCQkJQ1BERlNES19Eb2N1bWVudCogcERvYyA9IHBJbnRlckZvcm0tPkdldERvY3VtZW50KCk7CisJCQlBU1NFUlQocERvYyAhPSBOVUxMKTsKKwkJCXBEb2MtPlVwZGF0ZUFsbFZpZXdzKE5VTEwsIHBXaWRnZXQpOworCQl9CisKKwl9CisKKwlpZiAoYkNoYW5nZU1hcmspCisJCXBEb2N1bWVudC0+U2V0Q2hhbmdlTWFyaygpOworfQorCitDUERGU0RLX1dpZGdldCogRmllbGQ6OkdldFdpZGdldChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIENQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCkKK3sKKwlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOworCUFTU0VSVChwRm9ybUNvbnRyb2wgIT0gTlVMTCk7CisKKwlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsKKwlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsKKworCXJldHVybiBwSW50ZXJGb3JtLT5HZXRXaWRnZXQocEZvcm1Db250cm9sKTsKK30KKworRlhfQk9PTCBGaWVsZDo6VmFsdWVJc09jY3VyKENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkLCBDRlhfV2lkZVN0cmluZyBjc09wdExhYmVsKQoreworCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCisJZm9yIChpbnQgaT0wLHN6ID0gcEZvcm1GaWVsZC0+Q291bnRPcHRpb25zKCk7IGkgPCBzejsgaSsrKQorCXsKKwkJaWYgKGNzT3B0TGFiZWwuQ29tcGFyZShwRm9ybUZpZWxkLT5HZXRPcHRpb25MYWJlbChpKSkgPT0gMCkKKwkJCXJldHVybiBUUlVFOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKworQ1BERl9Gb3JtQ29udHJvbCogRmllbGQ6OkdldFNtYXJ0RmllbGRDb250cm9sKENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkKQoreworCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCWlmKCFwRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCkgfHwgbV9uRm9ybUNvbnRyb2xJbmRleD49cEZvcm1GaWVsZC0+Q291bnRDb250cm9scygpKSByZXR1cm4gTlVMTDsKKworCWlmIChtX25Gb3JtQ29udHJvbEluZGV4PDApCisJCXJldHVybiBwRm9ybUZpZWxkLT5HZXRDb250cm9sKDApOworCWVsc2UKKwkJcmV0dXJuIHBGb3JtRmllbGQtPkdldENvbnRyb2wobV9uRm9ybUNvbnRyb2xJbmRleCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcHJvcGVydHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitGWF9CT09MIEZpZWxkOjphbGlnbm1lbnQoT0JKX1BST1BfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CisJCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7CisKKwkJQ0ZYX0J5dGVTdHJpbmcgYWxpZ25TdHI7CisJCXZwID4+IGFsaWduU3RyOworCisJCWlmIChtX2JEZWxheSkKKwkJeworCQkJQWRkRGVsYXlfU3RyaW5nKEZQX0FMSUdOTUVOVCwgYWxpZ25TdHIpOworCQl9CisJCWVsc2UKKwkJeworCQkJRmllbGQ6OlNldEFsaWdubWVudChtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIGFsaWduU3RyKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSwgRmllbGRBcnJheSk7CisJCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7CisKKwkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOworCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX1RFWFRGSUVMRCkKKwkJCXJldHVybiBGQUxTRTsKKworCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBHZXRTbWFydEZpZWxkQ29udHJvbChwRm9ybUZpZWxkKTsKKwkJaWYgKCFwRm9ybUNvbnRyb2wpcmV0dXJuIEZBTFNFOworCisJCXN3aXRjaCAocEZvcm1Db250cm9sLT5HZXRDb250cm9sQWxpZ25tZW50KCkpCisJCXsKKwkJCWNhc2UgMToKKwkJCQl2cCA8PCAoRlhfTFBDV1NUUilMImNlbnRlciI7CisJCQkJYnJlYWs7CisJCQljYXNlIDA6CisJCQkJdnAgPDwgKEZYX0xQQ1dTVFIpTCJsZWZ0IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQl2cCA8PCAoRlhfTFBDV1NUUilMInJpZ2h0IjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdnAgPDwgKEZYX0xQQ1dTVFIpTCIiOworCQl9CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgRmllbGQ6OlNldEFsaWdubWVudChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIAorCQkJCQkJIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHJpbmcpCit7CisJLy9Ob3Qgc3VwcG9ydGVkLgorfQorCitGWF9CT09MIEZpZWxkOjpib3JkZXJTdHlsZShPQkpfUFJPUF9QQVJBTVMpCit7CQorCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CisJCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7CisKKwkJQ0ZYX0J5dGVTdHJpbmcgc3RyVHlwZSA9ICIiOworCQl2cCA+PiBzdHJUeXBlOworCisJCWlmIChtX2JEZWxheSkKKwkJeworCQkJQWRkRGVsYXlfU3RyaW5nKEZQX0JPUkRFUlNUWUxFLCBzdHJUeXBlKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUZpZWxkOjpTZXRCb3JkZXJTdHlsZShtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIHN0clR5cGUpOworCQl9CisJfQorCWVsc2UKKwl7CisJCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLCBGaWVsZEFycmF5KTsKKwkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7CisJCWlmICghcEZvcm1GaWVsZCkgcmV0dXJuIEZBTFNFOworCisJCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gR2V0V2lkZ2V0KG1fcERvY3VtZW50LCBHZXRTbWFydEZpZWxkQ29udHJvbChwRm9ybUZpZWxkKSk7CisJCWlmICghcFdpZGdldCkgcmV0dXJuIEZBTFNFOworCisJCWludCBuQm9yZGVyc3R5bGUgPSBwV2lkZ2V0LT5HZXRCb3JkZXJTdHlsZSgpOworCisJCXN3aXRjaCAobkJvcmRlcnN0eWxlKQorCQl7CisJCQljYXNlIEJCU19TT0xJRDoKKwkJCQl2cCA8PCAoRlhfTFBDV1NUUilMInNvbGlkIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQkJTX0RBU0g6CisJCQkJdnAgPDwgKEZYX0xQQ1dTVFIpTCJkYXNoZWQiOworCQkJCWJyZWFrOworCQkJY2FzZSBCQlNfQkVWRUxFRDoKKwkJCQl2cCA8PCAoRlhfTFBDV1NUUilMImJldmVsZWQiOworCQkJCWJyZWFrOworCQkJY2FzZSBCQlNfSU5TRVQ6CisJCQkJdnAgPDwgKEZYX0xQQ1dTVFIpTCJpbnNldCI7CisJCQkJYnJlYWs7CisJCQljYXNlIEJCU19VTkRFUkxJTkU6CisJCQkJdnAgPDwgKEZYX0xQQ1dTVFIpTCJ1bmRlcmxpbmUiOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQl2cCA8PCAoRlhfTFBDV1NUUilMIiI7CisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKwordm9pZCBGaWVsZDo6U2V0Qm9yZGVyU3R5bGUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCAKKwkJCQkJCSAgIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzdHJpbmcpCit7CisJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsKKworCWludCBuQm9yZGVyU3R5bGUgPSAwOworCisJaWYgKHN0cmluZyA9PSAic29saWQiKQorCQluQm9yZGVyU3R5bGUgPSBCQlNfU09MSUQ7CisJZWxzZSBpZiAoc3RyaW5nID09ICJiZXZlbGVkIikKKwkJbkJvcmRlclN0eWxlID0gQkJTX0JFVkVMRUQ7CisJZWxzZSBpZiAoc3RyaW5nID09ICJkYXNoZWQiKQorCQluQm9yZGVyU3R5bGUgPSBCQlNfREFTSDsKKwllbHNlIGlmIChzdHJpbmcgPT0gImluc2V0IikKKwkJbkJvcmRlclN0eWxlID0gQkJTX0lOU0VUOworCWVsc2UgaWYgKHN0cmluZyA9PSAidW5kZXJsaW5lIikKKwkJbkJvcmRlclN0eWxlID0gQkJTX1VOREVSTElORTsKKwllbHNlIHJldHVybjsKKworCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCUdldEZvcm1GaWVsZHMocERvY3VtZW50LCBzd0ZpZWxkTmFtZSwgRmllbGRBcnJheSk7CisKKwlmb3IgKGludCBpPTAsaXN6PUZpZWxkQXJyYXkuR2V0U2l6ZSgpOyBpPGlzejsgaSsrKQorCXsKKwkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KGkpOworCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCQlpZiAobkNvbnRyb2xJbmRleCA8IDApCisJCXsKKwkJCUZYX0JPT0wgYlNldCA9IEZBTFNFOworCQkJZm9yIChpbnQgaj0wLGpzeiA9IHBGb3JtRmllbGQtPkNvdW50Q29udHJvbHMoKTsgajxqc3o7IGorKykKKwkJCXsKKwkJCQlpZiAoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSBHZXRXaWRnZXQocERvY3VtZW50LCBwRm9ybUZpZWxkLT5HZXRDb250cm9sKGopKSkKKwkJCQl7CisJCQkJCWlmIChwV2lkZ2V0LT5HZXRCb3JkZXJTdHlsZSgpICE9IG5Cb3JkZXJTdHlsZSkKKwkJCQkJeworCQkJCQkJcFdpZGdldC0+U2V0Qm9yZGVyU3R5bGUobkJvcmRlclN0eWxlKTsKKwkJCQkJCWJTZXQgPSBUUlVFOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJaWYgKGJTZXQpIFVwZGF0ZUZvcm1GaWVsZChwRG9jdW1lbnQsIHBGb3JtRmllbGQsIFRSVUUsIFRSVUUsIFRSVUUpOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYobkNvbnRyb2xJbmRleCA+PSBwRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCkpIHJldHVybjsKKwkJCWlmIChDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBwRm9ybUZpZWxkLT5HZXRDb250cm9sKG5Db250cm9sSW5kZXgpKQorCQkJeworCQkJCWlmIChDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IEdldFdpZGdldChwRG9jdW1lbnQsIHBGb3JtQ29udHJvbCkpCisJCQkJeworCQkJCQlpZiAocFdpZGdldC0+R2V0Qm9yZGVyU3R5bGUoKSAhPSBuQm9yZGVyU3R5bGUpCisJCQkJCXsKKwkJCQkJCXBXaWRnZXQtPlNldEJvcmRlclN0eWxlKG5Cb3JkZXJTdHlsZSk7CisJCQkJCQlVcGRhdGVGb3JtQ29udHJvbChwRG9jdW1lbnQsIHBGb3JtQ29udHJvbCwgVFJVRSwgVFJVRSwgVFJVRSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisKK0ZYX0JPT0wgRmllbGQ6OmJ1dHRvbkFsaWduWChPQkpfUFJPUF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKHZwLklzU2V0dGluZygpKQorCXsKKwkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsKKworCQlpbnQgblZQOworCQl2cCA+PiBuVlA7CisKKwkJaWYgKG1fYkRlbGF5KQorCQl7CisJCQlBZGREZWxheV9JbnQoRlBfQlVUVE9OQUxJR05YLCBuVlApOworCQl9CisJCWVsc2UKKwkJeworCQkJRmllbGQ6OlNldEJ1dHRvbkFsaWduWChtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIG5WUCk7CisJCX0KKwl9CisJZWxzZQorCXsJCQorCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsKKwkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7CisJCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCisJCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfUFVTSEJVVFRPTikKKwkJCXJldHVybiBGQUxTRTsKKworCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBHZXRTbWFydEZpZWxkQ29udHJvbChwRm9ybUZpZWxkKTsKKwkJaWYgKCFwRm9ybUNvbnRyb2wpcmV0dXJuIEZBTFNFOworCisJCUNQREZfSWNvbkZpdCBJY29uRml0ID0gcEZvcm1Db250cm9sLT5HZXRJY29uRml0KCk7CisKKwkJRlhfRkxPQVQgZkxlZnQsZkJvdHRvbTsKKwkJSWNvbkZpdC5HZXRJY29uUG9zaXRpb24oZkxlZnQsZkJvdHRvbSk7CisKKwkJdnAgPDwgKEZYX0lOVDMyKWZMZWZ0OworCX0KKworCXJldHVybiBUUlVFOworfQorCit2b2lkIEZpZWxkOjpTZXRCdXR0b25BbGlnblgoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBpbnQgbnVtYmVyKQoreworCS8vTm90IHN1cHBvcnRlZC4KK30KKworRlhfQk9PTCBGaWVsZDo6YnV0dG9uQWxpZ25ZKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAodnAuSXNTZXR0aW5nKCkpCisJeworCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOworCisJCWludCBuVlA7CisJCXZwID4+IG5WUDsKKworCQlpZiAobV9iRGVsYXkpCisJCXsKKwkJCUFkZERlbGF5X0ludChGUF9CVVRUT05BTElHTlksIG5WUCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlGaWVsZDo6U2V0QnV0dG9uQWxpZ25ZKG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgblZQKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsKKwkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7CisJCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCisJCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfUFVTSEJVVFRPTikKKwkJCXJldHVybiBGQUxTRTsKKworCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBHZXRTbWFydEZpZWxkQ29udHJvbChwRm9ybUZpZWxkKTsKKwkJaWYgKCFwRm9ybUNvbnRyb2wpcmV0dXJuIEZBTFNFOworCisJCUNQREZfSWNvbkZpdCBJY29uRml0ID0gcEZvcm1Db250cm9sLT5HZXRJY29uRml0KCk7CisKKwkJRlhfRkxPQVQgZkxlZnQsZkJvdHRvbTsKKwkJSWNvbkZpdC5HZXRJY29uUG9zaXRpb24oZkxlZnQsZkJvdHRvbSk7CisKKwkJdnAgPDwgIChGWF9JTlQzMilmQm90dG9tOworCX0KKworCXJldHVybiBUUlVFOworfQorCit2b2lkIEZpZWxkOjpTZXRCdXR0b25BbGlnblkoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBpbnQgbnVtYmVyKQoreworCS8vTm90IHN1cHBvcnRlZC4KK30KKworRlhfQk9PTCBGaWVsZDo6YnV0dG9uRml0Qm91bmRzKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAodnAuSXNTZXR0aW5nKCkpCisJeworCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOworCisJCWJvb2wgYlZQOworCQl2cCA+PiBiVlA7CisKKwkJaWYgKG1fYkRlbGF5KQorCQl7CisJCQlBZGREZWxheV9Cb29sKEZQX0JVVFRPTkZJVEJPVU5EUywgYlZQKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUZpZWxkOjpTZXRCdXR0b25GaXRCb3VuZHMobV9wRG9jdW1lbnQsIG1fRmllbGROYW1lLCBtX25Gb3JtQ29udHJvbEluZGV4LCBiVlApOworCQl9CisJfQorCWVsc2UKKwl7CisJCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOworCQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOworCisJCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9QVVNIQlVUVE9OKQorCQkJcmV0dXJuIEZBTFNFOworCisJCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCA9IEdldFNtYXJ0RmllbGRDb250cm9sKHBGb3JtRmllbGQpOworCQlpZiAoIXBGb3JtQ29udHJvbClyZXR1cm4gRkFMU0U7CisKKwkJQ1BERl9JY29uRml0IEljb25GaXQgPSBwRm9ybUNvbnRyb2wtPkdldEljb25GaXQoKTsKKwkJdnAgPDwgSWNvbkZpdC5HZXRGaXR0aW5nQm91bmRzKCk7CQkKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKwordm9pZCBGaWVsZDo6U2V0QnV0dG9uRml0Qm91bmRzKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgYm9vbCBiKQoreworCS8vTm90IHN1cHBvcnRlZC4KK30KKworRlhfQk9PTCBGaWVsZDo6YnV0dG9uUG9zaXRpb24oT0JKX1BST1BfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CisJCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7CisKKwkJaW50IG5WUDsKKwkJdnAgPj4gblZQOworCisJCWlmIChtX2JEZWxheSkKKwkJeworCQkJQWRkRGVsYXlfSW50KEZQX0JVVFRPTlBPU0lUSU9OLCBuVlApOworCQl9CisJCWVsc2UKKwkJeworCQkJRmllbGQ6OlNldEJ1dHRvblBvc2l0aW9uKG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgblZQKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsKKwkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7CisJCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCisJCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfUFVTSEJVVFRPTikKKwkJCXJldHVybiBGQUxTRTsKKworCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBHZXRTbWFydEZpZWxkQ29udHJvbChwRm9ybUZpZWxkKTsKKwkJaWYgKCFwRm9ybUNvbnRyb2wpcmV0dXJuIEZBTFNFOworCisJCXZwIDw8ICBwRm9ybUNvbnRyb2wtPkdldFRleHRQb3NpdGlvbigpOworCX0KKwlyZXR1cm4gVFJVRTsKK30KKwordm9pZCBGaWVsZDo6U2V0QnV0dG9uUG9zaXRpb24oQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBpbnQgbnVtYmVyKQoreworCS8vTm90IHN1cHBvcnRlZC4KK30KKworRlhfQk9PTCBGaWVsZDo6YnV0dG9uU2NhbGVIb3coT0JKX1BST1BfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CisJCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7CisKKwkJaW50IG5WUDsKKwkJdnAgPj4gblZQOworCisJCWlmIChtX2JEZWxheSkKKwkJeworCQkJQWRkRGVsYXlfSW50KEZQX0JVVFRPTlNDQUxFSE9XLCBuVlApOworCQl9CisJCWVsc2UKKwkJeworCQkJRmllbGQ6OlNldEJ1dHRvblNjYWxlSG93KG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgblZQKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSwgRmllbGRBcnJheSk7CisJCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7CisKKwkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOworCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX1BVU0hCVVRUT04pCisJCQlyZXR1cm4gRkFMU0U7CisKKwkJQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sID0gR2V0U21hcnRGaWVsZENvbnRyb2wocEZvcm1GaWVsZCk7CisJCWlmICghcEZvcm1Db250cm9sKXJldHVybiBGQUxTRTsKKworCQlDUERGX0ljb25GaXQgSWNvbkZpdCA9IHBGb3JtQ29udHJvbC0+R2V0SWNvbkZpdCgpOworCQlpZiAoSWNvbkZpdC5Jc1Byb3BvcnRpb25hbFNjYWxlKCkpCisJCQl2cCA8PCAoRlhfSU5UMzIpMDsKKwkJZWxzZQorCQkJdnAgPDwgKEZYX0lOVDMyKTE7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgRmllbGQ6OlNldEJ1dHRvblNjYWxlSG93KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgaW50IG51bWJlcikKK3sKKwkvL05vdCBzdXBwb3J0ZWQuCit9CisKK0ZYX0JPT0wgRmllbGQ6OmJ1dHRvblNjYWxlV2hlbihPQkpfUFJPUF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKHZwLklzU2V0dGluZygpKQorCXsKKwkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsKKworCQlpbnQgblZQOworCQl2cCA+PiBuVlA7CisKKwkJaWYgKG1fYkRlbGF5KQorCQl7CisJCQlBZGREZWxheV9JbnQoRlBfQlVUVE9OU0NBTEVXSEVOLCBuVlApOworCQl9CisJCWVsc2UKKwkJeworCQkJRmllbGQ6OlNldEJ1dHRvblNjYWxlV2hlbihtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIG5WUCk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7CisJCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7CisKKwkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKSBGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9QVVNIQlVUVE9OKQorCQkJcmV0dXJuIEZBTFNFOworCisJCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCA9IEdldFNtYXJ0RmllbGRDb250cm9sKHBGb3JtRmllbGQpOworCQlpZiAoIXBGb3JtQ29udHJvbCkgcmV0dXJuIEZBTFNFOworCisJCUNQREZfSWNvbkZpdCBJY29uRml0ID0gcEZvcm1Db250cm9sLT5HZXRJY29uRml0KCk7CisJCWludCBTY2FsZU0gPSBJY29uRml0LkdldFNjYWxlTWV0aG9kKCk7CisJCXN3aXRjaCAoU2NhbGVNKQorCQl7CisJCQljYXNlIENQREZfSWNvbkZpdDo6QWx3YXlzIDoKKwkJCQl2cCA8PCAgKEZYX0lOVDMyKSBDUERGX0ljb25GaXQ6OkFsd2F5czsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ1BERl9JY29uRml0OjpCaWdnZXIgOgorCQkJCXZwIDw8ICAoRlhfSU5UMzIpIENQREZfSWNvbkZpdDo6QmlnZ2VyOworCQkJCWJyZWFrOworCQkJY2FzZSBDUERGX0ljb25GaXQ6Ok5ldmVyIDoKKwkJCQl2cCA8PCAgKEZYX0lOVDMyKSBDUERGX0ljb25GaXQ6Ok5ldmVyOworCQkJCWJyZWFrOworCQkJY2FzZSBDUERGX0ljb25GaXQ6OlNtYWxsZXIgOgorCQkJCXZwIDw8ICAoRlhfSU5UMzIpIENQREZfSWNvbkZpdDo6U21hbGxlcjsKKwkJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBUUlVFOworfQorCit2b2lkIEZpZWxkOjpTZXRCdXR0b25TY2FsZVdoZW4oQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBpbnQgbnVtYmVyKQoreworCS8vTm90IHN1cHBvcnRlZC4KK30KKworRlhfQk9PTCBGaWVsZDo6Y2FsY09yZGVySW5kZXgoT0JKX1BST1BfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CQorCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOworCisJCWludCBuVlA7CisJCXZwID4+IG5WUDsKKworCQlpZiAobV9iRGVsYXkpCisJCXsKKwkJCUFkZERlbGF5X0ludChGUF9DQUxDT1JERVJJTkRFWCwgblZQKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUZpZWxkOjpTZXRDYWxjT3JkZXJJbmRleChtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIG5WUCk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsIEZpZWxkQXJyYXkpOworCQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOworCisJCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9DT01CT0JPWCAmJiBwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfVEVYVEZJRUxEKQorCQkJcmV0dXJuIEZBTFNFOworCisJCUNQREZTREtfSW50ZXJGb3JtKiBwUkRJbnRlckZvcm0gPSBtX3BEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7CisJCUFTU0VSVChwUkRJbnRlckZvcm0gIT0gTlVMTCk7CisKKwkJQ1BERl9JbnRlckZvcm0qIHBJbnRlckZvcm0gPSBwUkRJbnRlckZvcm0tPkdldEludGVyRm9ybSgpOworCQlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsKKworCQl2cCA8PCAoRlhfSU5UMzIpcEludGVyRm9ybS0+RmluZEZpZWxkSW5DYWxjdWxhdGlvbk9yZGVyKHBGb3JtRmllbGQpOworCX0KKworCXJldHVybiBUUlVFOworfQorCit2b2lkIEZpZWxkOjpTZXRDYWxjT3JkZXJJbmRleChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGludCBudW1iZXIpCit7CisJLy9Ob3Qgc3VwcG9ydGVkLgorfQorCitGWF9CT09MIEZpZWxkOjpjaGFyTGltaXQoT0JKX1BST1BfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CisJCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7CisKKwkJaW50IG5WUDsKKwkJdnAgPj4gblZQOworCisJCWlmIChtX2JEZWxheSkKKwkJeworCQkJQWRkRGVsYXlfSW50KEZQX0NIQVJMSU1JVCwgblZQKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUZpZWxkOjpTZXRDaGFyTGltaXQobV9wRG9jdW1lbnQsIG1fRmllbGROYW1lLCBtX25Gb3JtQ29udHJvbEluZGV4LCBuVlApOworCQl9CisJfQorCWVsc2UKKwl7CisJCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLCBGaWVsZEFycmF5KTsKKwkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7CisJCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCisJCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfVEVYVEZJRUxEKQorCQkJcmV0dXJuIEZBTFNFOworCisJCXZwIDw8IChGWF9JTlQzMilwRm9ybUZpZWxkLT5HZXRNYXhMZW4oKTsKKwl9CisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgRmllbGQ6OlNldENoYXJMaW1pdChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGludCBudW1iZXIpCit7CisJLy9Ob3Qgc3VwcG9ydGVkLgorfQorCitGWF9CT09MIEZpZWxkOjpjb21iKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAodnAuSXNTZXR0aW5nKCkpCisJeworCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOworCisJCWJvb2wgYlZQOworCQl2cCA+PiBiVlA7CisKKwkJaWYgKG1fYkRlbGF5KQorCQl7CisJCQlBZGREZWxheV9Cb29sKEZQX0NPTUIsIGJWUCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlGaWVsZDo6U2V0Q29tYihtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIGJWUCk7CisJCX0KKwl9CisJZWxzZQorCXsJCisJCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOworCQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOworCisJCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9URVhURklFTEQpCisJCQlyZXR1cm4gRkFMU0U7CisKKwkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkRmxhZ3MoKSAmIEZJRUxERkxBR19DT01CKQorCQkJdnAgPDwgdHJ1ZTsKKwkJZWxzZQorCQkJdnAgPDwgZmFsc2U7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgRmllbGQ6OlNldENvbWIoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBib29sIGIpCit7CisJLy9Ob3Qgc3VwcG9ydGVkLgorfQorCitGWF9CT09MIEZpZWxkOjpjb21taXRPblNlbENoYW5nZShPQkpfUFJPUF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKHZwLklzU2V0dGluZygpKQorCXsKKwkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsKKworCQlib29sIGJWUDsKKwkJdnAgPj4gYlZQOworCisJCWlmIChtX2JEZWxheSkKKwkJeworCQkJQWRkRGVsYXlfQm9vbChGUF9DT01NSVRPTlNFTENIQU5HRSwgYlZQKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUZpZWxkOjpTZXRDb21taXRPblNlbENoYW5nZShtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIGJWUCk7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7CisJCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7CisKKwkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOworCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX0NPTUJPQk9YICYmIHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9MSVNUQk9YKQorCQkJcmV0dXJuIEZBTFNFOworCisJCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZEZsYWdzKCkgJiBGSUVMREZMQUdfQ09NTUlUT05TRUxDSEFOR0UpCisJCQl2cCA8PCB0cnVlOworCQllbHNlCisJCQl2cCA8PCBmYWxzZTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKwordm9pZCBGaWVsZDo6U2V0Q29tbWl0T25TZWxDaGFuZ2UoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBib29sIGIpCit7CisJLy9Ob3Qgc3VwcG9ydGVkLgorfQorCitGWF9CT09MIEZpZWxkOjpjdXJyZW50VmFsdWVJbmRpY2VzKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAodnAuSXNTZXR0aW5nKCkpCisJeworCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOworCisJCUNGWF9EV29yZEFycmF5IGFycmF5OworCisJCWlmICh2cC5HZXRUeXBlKCkgPT0gVlRfbnVtYmVyKQorCQl7CisJCQlpbnQgaVNlbGVjdGluZyA9IDA7CisJCQl2cCA+PiBpU2VsZWN0aW5nOworCQkJYXJyYXkuQWRkKGlTZWxlY3RpbmcpOworCQl9CisJCWVsc2UgaWYgKHZwLklzQXJyYXlPYmplY3QoKSkKKwkJeworCQkJQ0pTX0FycmF5IFNlbEFycmF5KG1faXNvbGF0ZSk7CisJCQlDSlNfVmFsdWUgU2VsVmFsdWUobV9pc29sYXRlKTsKKwkJCWludCBpU2VsZWN0aW5nOworCQkJdnAgPj4gU2VsQXJyYXk7CisJCQlmb3IgKGludCBpPTAsc3o9U2VsQXJyYXkuR2V0TGVuZ3RoKCk7IGk8c3o7IGkrKykKKwkJCXsKKwkJCQlTZWxBcnJheS5HZXRFbGVtZW50KGksU2VsVmFsdWUpOworCQkJCWlTZWxlY3RpbmcgPSAoRlhfSU5UMzIpU2VsVmFsdWU7CisJCQkJYXJyYXkuQWRkKGlTZWxlY3RpbmcpOworCQkJfQorCQl9CisJCQorCQlpZiAobV9iRGVsYXkpCisJCXsKKwkJCUFkZERlbGF5X1dvcmRBcnJheShGUF9DVVJSRU5UVkFMVUVJTkRJQ0VTLCBhcnJheSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlGaWVsZDo6U2V0Q3VycmVudFZhbHVlSW5kaWNlcyhtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIGFycmF5KTsKKwkJfQorCX0KKwllbHNlCisJeworCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsKKwkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7CisJCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCisJCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfQ09NQk9CT1ggJiYgcEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX0xJU1RCT1gpCisJCQlyZXR1cm4gRkFMU0U7CisKKwkJaWYgKHBGb3JtRmllbGQtPkNvdW50U2VsZWN0ZWRJdGVtcygpID09IDEpCisJCQl2cCA8PCBwRm9ybUZpZWxkLT5HZXRTZWxlY3RlZEluZGV4KDApOworCQllbHNlIGlmIChwRm9ybUZpZWxkLT5Db3VudFNlbGVjdGVkSXRlbXMoKSA+IDEpCisJCXsKKwkJCUNKU19BcnJheSBTZWxBcnJheShtX2lzb2xhdGUpOworCQkJZm9yIChpbnQgaT0wLHN6PXBGb3JtRmllbGQtPkNvdW50U2VsZWN0ZWRJdGVtcygpOyBpPHN6OyBpKyspCisJCQl7CisJCQkJU2VsQXJyYXkuU2V0RWxlbWVudChpLCBDSlNfVmFsdWUobV9pc29sYXRlLHBGb3JtRmllbGQtPkdldFNlbGVjdGVkSW5kZXgoaSkpKTsKKwkJCX0KKwkJCXZwIDw8IFNlbEFycmF5OworCQl9CisJCWVsc2UKKwkJCXZwIDw8IC0xOworCX0KKworCXJldHVybiBUUlVFOworfQorCit2b2lkIEZpZWxkOjpTZXRDdXJyZW50VmFsdWVJbmRpY2VzKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgCisJCQkJCQkJCSAgIGNvbnN0IENGWF9EV29yZEFycmF5JiBhcnJheSkKK3sKKwlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOworCisJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJR2V0Rm9ybUZpZWxkcyhwRG9jdW1lbnQsIHN3RmllbGROYW1lLCBGaWVsZEFycmF5KTsKKworCWZvciAoaW50IGk9MCxpc3o9RmllbGRBcnJheS5HZXRTaXplKCk7IGk8aXN6OyBpKyspCisJeworCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoaSk7CisJCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCisJCWludCBuRmllbGRUeXBlID0gcEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCk7CisJCWlmIChuRmllbGRUeXBlID09IEZJRUxEVFlQRV9DT01CT0JPWCB8fCBuRmllbGRUeXBlID09IEZJRUxEVFlQRV9MSVNUQk9YKQorCQl7CisJCQlGWF9EV09SRCBkd0ZpZWxkRmxhZ3MgPSBwRm9ybUZpZWxkLT5HZXRGaWVsZEZsYWdzKCk7CisJCQlwRm9ybUZpZWxkLT5DbGVhclNlbGVjdGlvbihUUlVFKTsKKworCQkJZm9yIChpbnQgaT0wLHN6PWFycmF5LkdldFNpemUoKTsgaTxzejsgaSsrKQorCQkJeworCQkJCWlmIChpPjAgJiYgIShkd0ZpZWxkRmxhZ3MgJiAoMTw8MjEpKSkKKwkJCQl7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCWludCBpU2VsZWN0aW5nID0gKEZYX0lOVDMyKWFycmF5LkdldEF0KGkpOworCQkJCWlmIChpU2VsZWN0aW5nIDwgcEZvcm1GaWVsZC0+Q291bnRPcHRpb25zKCkgJiYgIXBGb3JtRmllbGQtPklzSXRlbVNlbGVjdGVkKGlTZWxlY3RpbmcpKQorCQkJCQlwRm9ybUZpZWxkLT5TZXRJdGVtU2VsZWN0aW9uKGlTZWxlY3RpbmcsIFRSVUUpOworCisJCQl9CisJCQlVcGRhdGVGb3JtRmllbGQocERvY3VtZW50LCBwRm9ybUZpZWxkLCBUUlVFLCBUUlVFLCBUUlVFKTsKKwkJfQorCX0KK30KKworRlhfQk9PTCBGaWVsZDo6ZGVmYXVsdFN0eWxlKE9CSl9QUk9QX1BBUkFNUykKK3sKKwkvLyBNUUcgc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQoSURTX1NUUklOR19OT1RTVVBQT1JUKTsKKwlyZXR1cm4gRkFMU0U7CisKKwlpZiAodnAuSXNTZXR0aW5nKCkpCisJeworCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOworCisJCTsJCQorCX0KKwllbHNlCisJeworCQk7CisJfQorCXJldHVybiBUUlVFOworfQorCit2b2lkIEZpZWxkOjpTZXREZWZhdWx0U3R5bGUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4KQoreworCS8vTm90IHN1cHBvcnRlZC4KK30KKworRlhfQk9PTCBGaWVsZDo6ZGVmYXVsdFZhbHVlKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAodnAuSXNTZXR0aW5nKCkpCisJeworCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOworCisJCUNGWF9XaWRlU3RyaW5nIFdpZGVTdHI7CisJCXZwID4+IFdpZGVTdHI7IAorCisJCWlmIChtX2JEZWxheSkKKwkJeworCQkJQWRkRGVsYXlfV2lkZVN0cmluZyhGUF9ERUZBVUxUVkFMVUUsIFdpZGVTdHIpOworCQl9CisJCWVsc2UKKwkJeworCQkJRmllbGQ6OlNldERlZmF1bHRWYWx1ZShtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIFdpZGVTdHIpOworCQl9CisJfQorCWVsc2UKKwl7CisJCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOworCQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOworCisJCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpID09IEZJRUxEVFlQRV9QVVNIQlVUVE9OIHx8IAorCQkJcEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgPT0gRklFTERUWVBFX1NJR05BVFVSRSkKKwkJCXJldHVybiBGQUxTRTsKKworCQl2cCA8PCBwRm9ybUZpZWxkLT5HZXREZWZhdWx0VmFsdWUoKTsKKwl9CisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgRmllbGQ6OlNldERlZmF1bHRWYWx1ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsCisJCQkJCQkJY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cmluZykKK3sKKwkvL05vdCBzdXBwb3J0ZWQuCit9CisKK0ZYX0JPT0wgRmllbGQ6OmRvTm90U2Nyb2xsKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAodnAuSXNTZXR0aW5nKCkpCisJeworCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOworCisJCWJvb2wgYlZQOworCQl2cCA+PiBiVlA7CisKKwkJaWYgKG1fYkRlbGF5KQorCQl7CisJCQlBZGREZWxheV9Cb29sKEZQX0RPTk9UU0NST0xMLCBiVlApOworCQl9CisJCWVsc2UKKwkJeworCQkJRmllbGQ6OlNldERvTm90U2Nyb2xsKG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgYlZQKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsKKwkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7CisJCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCisJCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfVEVYVEZJRUxEKQorCQkJcmV0dXJuIEZBTFNFOworCisJCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZEZsYWdzKCkgJiBGSUVMREZMQUdfRE9OT1RTQ1JPTEwpCisJCQl2cCA8PCB0cnVlOworCQllbHNlCisJCQl2cCA8PCBmYWxzZTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKwordm9pZCBGaWVsZDo6U2V0RG9Ob3RTY3JvbGwoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBib29sIGIpCit7CisJLy9Ob3Qgc3VwcG9ydGVkLgorfQorCitGWF9CT09MIEZpZWxkOjpkb05vdFNwZWxsQ2hlY2soT0JKX1BST1BfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CisJCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7CisKKwkJYm9vbCBiVlA7CisJCXZwID4+IGJWUDsKKwl9CisJZWxzZQorCXsKKwkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7CisJCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7CisKKwkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOworCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX1RFWFRGSUVMRCAmJiAKKwkJCXBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9DT01CT0JPWCkKKwkJCXJldHVybiBGQUxTRTsKKworCQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRGbGFncygpICYgRklFTERGTEFHX0RPTk9UU1BFTExDSEVDSykKKwkJCXZwIDw8IHRydWU7CisJCWVsc2UKKwkJCXZwIDw8IGZhbHNlOworCX0KKworCXJldHVybiBUUlVFOworfQorCit2b2lkIEZpZWxkOjpTZXREZWxheShGWF9CT09MIGJEZWxheSkKK3sKKwltX2JEZWxheSA9IGJEZWxheTsKKworCWlmICghbV9iRGVsYXkpCisJeworCQlpZiAobV9wSlNEb2MpCisJCQltX3BKU0RvYy0+RG9GaWVsZERlbGF5KG1fRmllbGROYW1lLCBtX25Gb3JtQ29udHJvbEluZGV4KTsKKwl9Cit9CisKK0ZYX0JPT0wgRmllbGQ6OmRlbGF5KE9CSl9QUk9QX1BBUkFNUykKK3sKKwlpZiAodnAuSXNTZXR0aW5nKCkpCisJeworCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOworCQkKKwkJYm9vbCBiVlA7CisJCXZwID4+IGJWUDsKKworCQlTZXREZWxheShiVlApOworCX0KKwllbHNlCisJeworCQl2cCA8PCBtX2JEZWxheTsKKwl9CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgRmllbGQ6OmRpc3BsYXkoT0JKX1BST1BfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CisJCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7CisKKwkJaW50IG5WUDsKKwkJdnAgPj4gblZQOwkKKworCQlpZiAobV9iRGVsYXkpCisJCXsKKwkJCUFkZERlbGF5X0ludChGUF9ESVNQTEFZLCBuVlApOworCQl9CisJCWVsc2UKKwkJeworCQkJRmllbGQ6OlNldERpc3BsYXkobV9wRG9jdW1lbnQsIG1fRmllbGROYW1lLCBtX25Gb3JtQ29udHJvbEluZGV4LCBuVlApOworCQl9CisJfQorCWVsc2UKKwl7CisJCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOworCQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOworCisJCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwkJQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSAoQ1BERlNES19JbnRlckZvcm0qKW1fcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsKKwkJQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7CisKKwkJQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSBwSW50ZXJGb3JtLT5HZXRXaWRnZXQoR2V0U21hcnRGaWVsZENvbnRyb2wocEZvcm1GaWVsZCkpOworCQlpZiAoIXBXaWRnZXQpcmV0dXJuIEZBTFNFOworCisJCUZYX0RXT1JEIGR3RmxhZyA9IHBXaWRnZXQtPkdldEZsYWdzKCk7CisKKwkJaWYgKEFOTk9URkxBR19JTlZJU0lCTEUgJiBkd0ZsYWcgfHwgQU5OT1RGTEFHX0hJRERFTiAmIGR3RmxhZykgCisJCXsKKwkJCXZwIDw8IChGWF9JTlQzMikxOworCQl9CisJCWVsc2UgCisJCXsKKwkJCWlmIChBTk5PVEZMQUdfUFJJTlQgJiBkd0ZsYWcpCisJCQl7CisJCQkJaWYgKEFOTk9URkxBR19OT1ZJRVcgJiBkd0ZsYWcpCisJCQkJeworCQkJCQl2cCA8PCAoRlhfSU5UMzIpMzsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJdnAgPDwgKEZYX0lOVDMyKTA7CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXZwIDw8IChGWF9JTlQzMikyOworCQkJfQkJCQkKKwkJfQorCX0KKworCXJldHVybiBUUlVFOworfQorCit2b2lkIEZpZWxkOjpTZXREaXNwbGF5KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgaW50IG51bWJlcikKK3sKKwlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOworCisJQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSAoQ1BERlNES19JbnRlckZvcm0qKXBEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7CisJQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7CisKKwlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwlHZXRGb3JtRmllbGRzKHBEb2N1bWVudCwgc3dGaWVsZE5hbWUsIEZpZWxkQXJyYXkpOworCisJZm9yIChpbnQgaT0wLGlzej1GaWVsZEFycmF5LkdldFNpemUoKTsgaTxpc3o7IGkrKykKKwl7CisJCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdChpKTsKKwkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwkJaWYgKG5Db250cm9sSW5kZXggPCAwKQorCQl7CisJCQlGWF9CT09MIGJTZXQgPSBGQUxTRTsKKwkJCWZvciAoaW50IGo9MCxqc3ogPSBwRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCk7IGo8anN6OyBqKyspCisJCQl7CisJCQkJQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sID0gcEZvcm1GaWVsZC0+R2V0Q29udHJvbChqKTsKKwkJCQlBU1NFUlQocEZvcm1Db250cm9sICE9IE5VTEwpOworCisJCQkJaWYgKENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gcEludGVyRm9ybS0+R2V0V2lkZ2V0KHBGb3JtQ29udHJvbCkpCisJCQkJeworCQkJCQlGWF9EV09SRCBkd0ZsYWcgPSBwV2lkZ2V0LT5HZXRGbGFncygpOworCQkJCQlzd2l0Y2ggKG51bWJlcikKKwkJCQkJeworCQkJCQljYXNlIDA6CisJCQkJCQlkd0ZsYWcgJj0gKH5BTk5PVEZMQUdfSU5WSVNJQkxFKTsKKwkJCQkJCWR3RmxhZyAmPSAofkFOTk9URkxBR19ISURERU4pOworCQkJCQkJZHdGbGFnICY9ICh+QU5OT1RGTEFHX05PVklFVyk7CisJCQkJCQlkd0ZsYWcgfD0gQU5OT1RGTEFHX1BSSU5UOwkJCQkJCQkKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDE6CisJCQkJCQlkd0ZsYWcgJj0gKH5BTk5PVEZMQUdfSU5WSVNJQkxFKTsKKwkJCQkJCWR3RmxhZyAmPSAofkFOTk9URkxBR19OT1ZJRVcpOworCQkJCQkJZHdGbGFnIHw9IChBTk5PVEZMQUdfSElEREVOIHwgQU5OT1RGTEFHX1BSSU5UKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDI6CisJCQkJCQlkd0ZsYWcgJj0gKH5BTk5PVEZMQUdfSU5WSVNJQkxFKTsKKwkJCQkJCWR3RmxhZyAmPSAofkFOTk9URkxBR19QUklOVCk7CisJCQkJCQlkd0ZsYWcgJj0gKH5BTk5PVEZMQUdfSElEREVOKTsKKwkJCQkJCWR3RmxhZyAmPSAofkFOTk9URkxBR19OT1ZJRVcpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgMzoKKwkJCQkJCWR3RmxhZyB8PSBBTk5PVEZMQUdfTk9WSUVXOworCQkJCQkJZHdGbGFnIHw9IEFOTk9URkxBR19QUklOVDsKKwkJCQkJCWR3RmxhZyAmPSAofkFOTk9URkxBR19ISURERU4pOworCQkJCQkJYnJlYWs7CisJCQkJCX0JCisKKwkJCQkJaWYgKGR3RmxhZyAhPSBwV2lkZ2V0LT5HZXRGbGFncygpKQorCQkJCQl7CisJCQkJCQlwV2lkZ2V0LT5TZXRGbGFncyhkd0ZsYWcpOworCQkJCQkJYlNldCA9IFRSVUU7CisJCQkJCX0KKwkJCQl9CisJCQl9CQkKKwkJCQorCQkJaWYgKGJTZXQpIFVwZGF0ZUZvcm1GaWVsZChwRG9jdW1lbnQsIHBGb3JtRmllbGQsIFRSVUUsIEZBTFNFLCBUUlVFKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmKG5Db250cm9sSW5kZXggPj0gcEZvcm1GaWVsZC0+Q291bnRDb250cm9scygpKSByZXR1cm47CisJCQlpZiAoQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sID0gcEZvcm1GaWVsZC0+R2V0Q29udHJvbChuQ29udHJvbEluZGV4KSkKKwkJCXsKKwkJCQlpZiAoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSBwSW50ZXJGb3JtLT5HZXRXaWRnZXQocEZvcm1Db250cm9sKSkKKwkJCQl7CisKKwkJCQkJRlhfRFdPUkQgZHdGbGFnID0gcFdpZGdldC0+R2V0RmxhZ3MoKTsKKwkJCQkJc3dpdGNoIChudW1iZXIpCisJCQkJCXsKKwkJCQkJY2FzZSAwOgorCQkJCQkJZHdGbGFnICY9ICh+QU5OT1RGTEFHX0lOVklTSUJMRSk7CisJCQkJCQlkd0ZsYWcgJj0gKH5BTk5PVEZMQUdfSElEREVOKTsKKwkJCQkJCWR3RmxhZyAmPSAofkFOTk9URkxBR19OT1ZJRVcpOworCQkJCQkJZHdGbGFnIHw9IEFOTk9URkxBR19QUklOVDsJCQkJCQkJCisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAxOgorCQkJCQkJZHdGbGFnICY9ICh+QU5OT1RGTEFHX0lOVklTSUJMRSk7CisJCQkJCQlkd0ZsYWcgJj0gKH5BTk5PVEZMQUdfTk9WSUVXKTsKKwkJCQkJCWR3RmxhZyB8PSAoQU5OT1RGTEFHX0hJRERFTiB8IEFOTk9URkxBR19QUklOVCk7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAyOgorCQkJCQkJZHdGbGFnICY9ICh+QU5OT1RGTEFHX0lOVklTSUJMRSk7CisJCQkJCQlkd0ZsYWcgJj0gKH5BTk5PVEZMQUdfUFJJTlQpOworCQkJCQkJZHdGbGFnICY9ICh+QU5OT1RGTEFHX0hJRERFTik7CisJCQkJCQlkd0ZsYWcgJj0gKH5BTk5PVEZMQUdfTk9WSUVXKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIDM6CisJCQkJCQlkd0ZsYWcgfD0gQU5OT1RGTEFHX05PVklFVzsKKwkJCQkJCWR3RmxhZyB8PSBBTk5PVEZMQUdfUFJJTlQ7CisJCQkJCQlkd0ZsYWcgJj0gKH5BTk5PVEZMQUdfSElEREVOKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CQorCQkJCQlpZiAoZHdGbGFnICE9IHBXaWRnZXQtPkdldEZsYWdzKCkpCisJCQkJCXsKKwkJCQkJCXBXaWRnZXQtPlNldEZsYWdzKGR3RmxhZyk7CisJCQkJCQlVcGRhdGVGb3JtQ29udHJvbChwRG9jdW1lbnQsIHBGb3JtQ29udHJvbCwgVFJVRSwgRkFMU0UsIFRSVUUpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorfQorCitGWF9CT09MIEZpZWxkOjpkb2MoT0JKX1BST1BfUEFSQU1TKQoreworCUFTU0VSVChtX3BKU0RvYyAhPSBOVUxMKTsKKworCWlmICghdnAuSXNHZXR0aW5nKCkpcmV0dXJuIEZBTFNFOworCisJdnAgPDwgKENKU19PYmplY3QqKSgqbV9wSlNEb2MpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgRmllbGQ6OmVkaXRhYmxlKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAodnAuSXNTZXR0aW5nKCkpCisJeworCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOworCisJCWJvb2wgYlZQOworCQl2cCA+PiBiVlA7CisKKwl9CisJZWxzZQorCXsKKwkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsIEZpZWxkQXJyYXkpOworCQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOworCisJCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9DT01CT0JPWCkKKwkJCXJldHVybiBGQUxTRTsKKworCQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRGbGFncygpICYgRklFTERGTEFHX0VESVQpCisJCQl2cCA8PCB0cnVlOworCQllbHNlCisJCQl2cCA8PCBmYWxzZTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBGaWVsZDo6ZXhwb3J0VmFsdWVzKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOworCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7CisKKwlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7CisJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX0NIRUNLQk9YICYmIAorCQlwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfUkFESU9CVVRUT04pCisJCXJldHVybiBGQUxTRTsKKworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CQorCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOworCQlpZiAoIXZwLklzQXJyYXlPYmplY3QoKSlyZXR1cm4gRkFMU0U7CisJfQorCWVsc2UKKwl7CisJCUNKU19BcnJheSBFeHBvcnRWYWx1c0FycmF5KG1faXNvbGF0ZSk7CisKKwkJaWYgKG1fbkZvcm1Db250cm9sSW5kZXggPCAwKQorCQl7CisJCQlmb3IgKGludCBpPTAsc3o9cEZvcm1GaWVsZC0+Q291bnRDb250cm9scygpOyBpPHN6OyBpKyspCisJCQl7CisJCQkJQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sID0gcEZvcm1GaWVsZC0+R2V0Q29udHJvbChpKTsKKwkJCQlBU1NFUlQocEZvcm1Db250cm9sICE9IE5VTEwpOworCisJCQkJRXhwb3J0VmFsdXNBcnJheS5TZXRFbGVtZW50KGksIENKU19WYWx1ZShtX2lzb2xhdGUsKEZYX0xQQ1dTVFIpcEZvcm1Db250cm9sLT5HZXRFeHBvcnRWYWx1ZSgpKSk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZihtX25Gb3JtQ29udHJvbEluZGV4ID49IHBGb3JtRmllbGQtPkNvdW50Q29udHJvbHMoKSkgcmV0dXJuIEZBTFNFOworCQkJQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sID0gcEZvcm1GaWVsZC0+R2V0Q29udHJvbChtX25Gb3JtQ29udHJvbEluZGV4KTsKKwkJCWlmICghcEZvcm1Db250cm9sKSByZXR1cm4gRkFMU0U7CisKKwkJCUV4cG9ydFZhbHVzQXJyYXkuU2V0RWxlbWVudCgwLCBDSlNfVmFsdWUobV9pc29sYXRlLChGWF9MUENXU1RSKXBGb3JtQ29udHJvbC0+R2V0RXhwb3J0VmFsdWUoKSkpOworCQl9CisKKwkJdnAgPDwgRXhwb3J0VmFsdXNBcnJheTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBGaWVsZDo6ZmlsZVNlbGVjdChPQkpfUFJPUF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSwgRmllbGRBcnJheSk7CisJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfVEVYVEZJRUxEKQorCQlyZXR1cm4gRkFMU0U7CisKKwlpZiAodnAuSXNTZXR0aW5nKCkpCisJeworCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOworCisJCWJvb2wgYlZQOworCQl2cCA+PiBiVlA7CisKKwl9CisJZWxzZQorCXsKKwkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkRmxhZ3MoKSAmIEZJRUxERkxBR19GSUxFU0VMRUNUKQorCQkJdnAgPDwgdHJ1ZTsKKwkJZWxzZQorCQkJdnAgPDwgZmFsc2U7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgRmllbGQ6OmZpbGxDb2xvcihPQkpfUFJPUF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJQ0pTX0FycmF5IGNyQXJyYXkobV9pc29sYXRlKTsKKworCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7CisJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CisJCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7CisJCWlmICghdnAuSXNBcnJheU9iamVjdCgpKSByZXR1cm4gRkFMU0U7CisKKwkJdnAgPj4gY3JBcnJheTsKKworCQlDUFdMX0NvbG9yIGNvbG9yOworCQljb2xvcjo6Q29udmVydEFycmF5VG9QV0xDb2xvcihjckFycmF5LCBjb2xvcik7CisKKwkJaWYgKG1fYkRlbGF5KQorCQl7CisJCQlBZGREZWxheV9Db2xvcihGUF9GSUxMQ09MT1IsIGNvbG9yKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUZpZWxkOjpTZXRGaWxsQ29sb3IobV9wRG9jdW1lbnQsIG1fRmllbGROYW1lLCBtX25Gb3JtQ29udHJvbEluZGV4LCBjb2xvcik7CisJCX0KKwl9CisJZWxzZQorCXsKKwkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOworCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBHZXRTbWFydEZpZWxkQ29udHJvbChwRm9ybUZpZWxkKTsKKwkJaWYgKCFwRm9ybUNvbnRyb2wpcmV0dXJuIEZBTFNFOworCisJCWludCBpQ29sb3JUeXBlOworCQlwRm9ybUNvbnRyb2wtPkdldEJhY2tncm91bmRDb2xvcihpQ29sb3JUeXBlKTsKKworCQlDUFdMX0NvbG9yIGNvbG9yOworCisJCWlmIChpQ29sb3JUeXBlID09IENPTE9SVFlQRV9UUkFOU1BBUkVOVCkKKwkJeworCQkJY29sb3IgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9UUkFOU1BBUkVOVCk7CisJCX0KKwkJZWxzZSBpZiAoaUNvbG9yVHlwZSA9PSBDT0xPUlRZUEVfR1JBWSkKKwkJeworCQkJY29sb3IgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLCBwRm9ybUNvbnRyb2wtPkdldE9yaWdpbmFsQmFja2dyb3VuZENvbG9yKDApKTsKKwkJfQorCQllbHNlIGlmIChpQ29sb3JUeXBlID09IENPTE9SVFlQRV9SR0IpCisJCXsKKwkJCWNvbG9yID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfUkdCLCBwRm9ybUNvbnRyb2wtPkdldE9yaWdpbmFsQmFja2dyb3VuZENvbG9yKDApLAorCQkJCXBGb3JtQ29udHJvbC0+R2V0T3JpZ2luYWxCYWNrZ3JvdW5kQ29sb3IoMSksCisJCQkJcEZvcm1Db250cm9sLT5HZXRPcmlnaW5hbEJhY2tncm91bmRDb2xvcigyKSk7CisJCX0KKwkJZWxzZSBpZiAoaUNvbG9yVHlwZSA9PSBDT0xPUlRZUEVfQ01ZSykKKwkJeworCQkJY29sb3IgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9DTVlLLCBwRm9ybUNvbnRyb2wtPkdldE9yaWdpbmFsQmFja2dyb3VuZENvbG9yKDApLAorCQkJCXBGb3JtQ29udHJvbC0+R2V0T3JpZ2luYWxCYWNrZ3JvdW5kQ29sb3IoMSksCisJCQkJcEZvcm1Db250cm9sLT5HZXRPcmlnaW5hbEJhY2tncm91bmRDb2xvcigyKSwKKwkJCQlwRm9ybUNvbnRyb2wtPkdldE9yaWdpbmFsQmFja2dyb3VuZENvbG9yKDMpKTsKKwkJfQorCQllbHNlCisJCQlyZXR1cm4gRkFMU0U7CisKKwkJY29sb3I6OkNvbnZlcnRQV0xDb2xvclRvQXJyYXkoY29sb3IsIGNyQXJyYXkpOworICAgICAgICB2cCAgPDwgIGNyQXJyYXk7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgRmllbGQ6OlNldEZpbGxDb2xvcihDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yKQoreworCS8vTm90IHN1cHBvcnRlZC4KK30KKworRlhfQk9PTCBGaWVsZDo6aGlkZGVuKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAodnAuSXNTZXR0aW5nKCkpCisJeworCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOworCisJCWJvb2wgYlZQOworCQl2cCA+PiBiVlA7CisKKwkJaWYgKG1fYkRlbGF5KQorCQl7CisJCQlBZGREZWxheV9Cb29sKEZQX0hJRERFTiwgYlZQKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUZpZWxkOjpTZXRIaWRkZW4obV9wRG9jdW1lbnQsIG1fRmllbGROYW1lLCBtX25Gb3JtQ29udHJvbEluZGV4LCBiVlApOworCQl9CisJfQorCWVsc2UKKwl7CisJCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOworCQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOworCisJCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwkJQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSAoQ1BERlNES19JbnRlckZvcm0qKW1fcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsKKwkJQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7CisKKwkJQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSBwSW50ZXJGb3JtLT5HZXRXaWRnZXQoR2V0U21hcnRGaWVsZENvbnRyb2wocEZvcm1GaWVsZCkpOworCQlpZiAoIXBXaWRnZXQpIHJldHVybiBGQUxTRTsKKworCQlGWF9EV09SRCBkd0ZsYWdzID0gcFdpZGdldC0+R2V0RmxhZ3MoKTsKKworCQlpZiAoQU5OT1RGTEFHX0lOVklTSUJMRSAmIGR3RmxhZ3MgfHwgQU5OT1RGTEFHX0hJRERFTiAmIGR3RmxhZ3MpIAorCQl7CisJCQl2cCA8PCB0cnVlOworCQl9CisJCWVsc2UgCisJCQl2cCA8PCBmYWxzZTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKwordm9pZCBGaWVsZDo6U2V0SGlkZGVuKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgYm9vbCBiKQoreworCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsKKwlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsKKworCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCUdldEZvcm1GaWVsZHMocERvY3VtZW50LCBzd0ZpZWxkTmFtZSwgRmllbGRBcnJheSk7CisKKwlmb3IgKGludCBpPTAsaXN6PUZpZWxkQXJyYXkuR2V0U2l6ZSgpOyBpPGlzejsgaSsrKQorCXsKKwkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KGkpOworCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCQlpZiAobkNvbnRyb2xJbmRleCA8IDApCisJCXsKKwkJCUZYX0JPT0wgYlNldCA9IEZBTFNFOworCQkJZm9yIChpbnQgaj0wLGpzeiA9IHBGb3JtRmllbGQtPkNvdW50Q29udHJvbHMoKTsgajxqc3o7IGorKykKKwkJCXsKKwkJCQlpZiAoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSBwSW50ZXJGb3JtLT5HZXRXaWRnZXQocEZvcm1GaWVsZC0+R2V0Q29udHJvbChqKSkpCisJCQkJewkJCQkJCisJCQkJCUZYX0RXT1JEIGR3RmxhZ3MgPSBwV2lkZ2V0LT5HZXRGbGFncygpOworCQkJCQkKKwkJCQkJaWYgKGIpCisJCQkJCXsKKwkJCQkJCWR3RmxhZ3MgJj0gKH5BTk5PVEZMQUdfSU5WSVNJQkxFKTsKKwkJCQkJCWR3RmxhZ3MgJj0gKH5BTk5PVEZMQUdfTk9WSUVXKTsKKwkJCQkJCWR3RmxhZ3MgfD0gKEFOTk9URkxBR19ISURERU4gfCBBTk5PVEZMQUdfUFJJTlQpOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJZHdGbGFncyAmPSAofkFOTk9URkxBR19JTlZJU0lCTEUpOworCQkJCQkJZHdGbGFncyAmPSAofkFOTk9URkxBR19ISURERU4pOworCQkJCQkJZHdGbGFncyAmPSAofkFOTk9URkxBR19OT1ZJRVcpOworCQkJCQkJZHdGbGFncyB8PSBBTk5PVEZMQUdfUFJJTlQ7CQorCQkJCQl9CisKKwkJCQkJaWYgKGR3RmxhZ3MgIT0gcFdpZGdldC0+R2V0RmxhZ3MoKSkKKwkJCQkJeworCQkJCQkJcFdpZGdldC0+U2V0RmxhZ3MoZHdGbGFncyk7CQorCQkJCQkJYlNldCA9IFRSVUU7CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWlmIChiU2V0KQorCQkJCVVwZGF0ZUZvcm1GaWVsZChwRG9jdW1lbnQsIHBGb3JtRmllbGQsIFRSVUUsIEZBTFNFLCBUUlVFKTsJCisJCX0KKwkJZWxzZQorCQl7CisJCQlpZihuQ29udHJvbEluZGV4ID49IHBGb3JtRmllbGQtPkNvdW50Q29udHJvbHMoKSkgcmV0dXJuOworCQkJaWYgKENQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCA9IHBGb3JtRmllbGQtPkdldENvbnRyb2wobkNvbnRyb2xJbmRleCkpCisJCQl7CisJCQkJaWYgKENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gcEludGVyRm9ybS0+R2V0V2lkZ2V0KHBGb3JtQ29udHJvbCkpCisJCQkJeworCQkJCQlGWF9EV09SRCBkd0ZsYWdzID0gcFdpZGdldC0+R2V0RmxhZ3MoKTsKKwkJCQkJCisJCQkJCWlmIChiKQorCQkJCQl7CisJCQkJCQlkd0ZsYWdzICY9ICh+QU5OT1RGTEFHX0lOVklTSUJMRSk7CisJCQkJCQlkd0ZsYWdzICY9ICh+QU5OT1RGTEFHX05PVklFVyk7CisJCQkJCQlkd0ZsYWdzIHw9IChBTk5PVEZMQUdfSElEREVOIHwgQU5OT1RGTEFHX1BSSU5UKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCWR3RmxhZ3MgJj0gKH5BTk5PVEZMQUdfSU5WSVNJQkxFKTsKKwkJCQkJCWR3RmxhZ3MgJj0gKH5BTk5PVEZMQUdfSElEREVOKTsKKwkJCQkJCWR3RmxhZ3MgJj0gKH5BTk5PVEZMQUdfTk9WSUVXKTsKKwkJCQkJCWR3RmxhZ3MgfD0gQU5OT1RGTEFHX1BSSU5UOwkKKwkJCQkJfQorCisJCQkJCWlmIChkd0ZsYWdzICE9IHBXaWRnZXQtPkdldEZsYWdzKCkpCisJCQkJCXsKKwkJCQkJCXBXaWRnZXQtPlNldEZsYWdzKGR3RmxhZ3MpOwkKKwkJCQkJCVVwZGF0ZUZvcm1Db250cm9sKHBEb2N1bWVudCwgcEZvcm1Db250cm9sLCBUUlVFLCBGQUxTRSwgVFJVRSk7CQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorfQorCitGWF9CT09MIEZpZWxkOjpoaWdobGlnaHQoT0JKX1BST1BfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CisJCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7CisKKwkJQ0ZYX0J5dGVTdHJpbmcgc3RyTW9kZTsKKwkJdnAgPj4gc3RyTW9kZTsKKworCQlpZiAobV9iRGVsYXkpCisJCXsKKwkJCUFkZERlbGF5X1N0cmluZyhGUF9ISUdITElHSFQsIHN0ck1vZGUpOworCQl9CisJCWVsc2UKKwkJeworCQkJRmllbGQ6OlNldEhpZ2hsaWdodChtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIHN0ck1vZGUpOworCQl9CisJfQorCWVsc2UKKwl7CisJCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOworCQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOworCisJCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9QVVNIQlVUVE9OKQorCQkJcmV0dXJuIEZBTFNFOworCisJCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCA9IEdldFNtYXJ0RmllbGRDb250cm9sKHBGb3JtRmllbGQpOworCQlpZiAoIXBGb3JtQ29udHJvbCkgcmV0dXJuIEZBTFNFOworCisJCWludCBlSE0gPSBwRm9ybUNvbnRyb2wtPkdldEhpZ2hsaWdodGluZ01vZGUoKTsKKwkJc3dpdGNoIChlSE0pCisJCXsKKwkJY2FzZSBDUERGX0Zvcm1Db250cm9sOjpOb25lOgorCQkJdnAgIDw8ICAoRlhfTFBDV1NUUilMIm5vbmUiOworCQkJYnJlYWs7CisJCWNhc2UgQ1BERl9Gb3JtQ29udHJvbDo6UHVzaDoKKwkJCXZwICA8PCAgKEZYX0xQQ1dTVFIpTCJwdXNoIjsKKwkJCWJyZWFrOworCQljYXNlIENQREZfRm9ybUNvbnRyb2w6OkludmVydDoKKwkJCXZwICA8PCAgKEZYX0xQQ1dTVFIpTCJpbnZlcnQiOworCQkJYnJlYWs7CisJCWNhc2UgQ1BERl9Gb3JtQ29udHJvbDo6T3V0bGluZToKKwkJCXZwICA8PCAgKEZYX0xQQ1dTVFIpTCJvdXRsaW5lIjsKKwkJCWJyZWFrOworCQljYXNlIENQREZfRm9ybUNvbnRyb2w6OlRvZ2dsZToKKwkJCSB2cCAgPDwgIChGWF9MUENXU1RSKUwidG9nZ2xlIjsKKwkJCSBicmVhazsKKwkJfQorCX0KKworCXJldHVybiBUUlVFOworfQorCit2b2lkIEZpZWxkOjpTZXRIaWdobGlnaHQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyaW5nKQoreworCS8vTm90IHN1cHBvcnRlZC4KK30KKworRlhfQk9PTCBGaWVsZDo6bGluZVdpZHRoKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAodnAuSXNTZXR0aW5nKCkpCisJeworCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOworCisJCWludCBpV2lkdGg7CisJCXZwID4+IGlXaWR0aDsKKworCQlpZiAobV9iRGVsYXkpCisJCXsKKwkJCUFkZERlbGF5X0ludChGUF9MSU5FV0lEVEgsIGlXaWR0aCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlGaWVsZDo6U2V0TGluZVdpZHRoKG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgaVdpZHRoKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsKKwkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7CisJCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCisJCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCA9IEdldFNtYXJ0RmllbGRDb250cm9sKHBGb3JtRmllbGQpOworCQlpZiAoIXBGb3JtQ29udHJvbCkgcmV0dXJuIEZBTFNFOworCisJCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gKENQREZTREtfSW50ZXJGb3JtKiltX3BEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7CisJCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOworCisJCWlmKCFwRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCkpIHJldHVybiBGQUxTRTsKKworCQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IHBJbnRlckZvcm0tPkdldFdpZGdldChwRm9ybUZpZWxkLT5HZXRDb250cm9sKDApKTsKKwkJaWYgKCFwV2lkZ2V0KSByZXR1cm4gRkFMU0U7CisKKwkJdnAgPDwgKEZYX0lOVDMyKXBXaWRnZXQtPkdldEJvcmRlcldpZHRoKCk7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgRmllbGQ6OlNldExpbmVXaWR0aChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGludCBudW1iZXIpCit7CisJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsKKworCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gKENQREZTREtfSW50ZXJGb3JtKilwRG9jdW1lbnQtPkdldEludGVyRm9ybSgpOworCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOworCisJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJR2V0Rm9ybUZpZWxkcyhwRG9jdW1lbnQsIHN3RmllbGROYW1lLCBGaWVsZEFycmF5KTsKKworCWZvciAoaW50IGk9MCxpc3o9RmllbGRBcnJheS5HZXRTaXplKCk7IGk8aXN6OyBpKyspCisJeworCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoaSk7CisJCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCisJCWlmIChuQ29udHJvbEluZGV4IDwgMCkKKwkJeworCQkJRlhfQk9PTCBiU2V0ID0gRkFMU0U7CisJCQlmb3IgKGludCBqPTAsanN6PXBGb3JtRmllbGQtPkNvdW50Q29udHJvbHMoKTsgajxqc3o7IGorKykKKwkJCXsKKwkJCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBwRm9ybUZpZWxkLT5HZXRDb250cm9sKGopOworCQkJCUFTU0VSVChwRm9ybUNvbnRyb2wgIT0gTlVMTCk7CisJCQkJCisJCQkJaWYgKENQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gcEludGVyRm9ybS0+R2V0V2lkZ2V0KHBGb3JtQ29udHJvbCkpCisJCQkJeworCQkJCQlpZiAobnVtYmVyICE9IHBXaWRnZXQtPkdldEJvcmRlcldpZHRoKCkpCisJCQkJCXsKKwkJCQkJCXBXaWRnZXQtPlNldEJvcmRlcldpZHRoKG51bWJlcik7CisJCQkJCQliU2V0ID0gVFJVRTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWlmIChiU2V0KSBVcGRhdGVGb3JtRmllbGQocERvY3VtZW50LCBwRm9ybUZpZWxkLCBUUlVFLCBUUlVFLCBUUlVFKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmKG5Db250cm9sSW5kZXggPj0gcEZvcm1GaWVsZC0+Q291bnRDb250cm9scygpKSByZXR1cm47CisJCQlpZiAoQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sID0gcEZvcm1GaWVsZC0+R2V0Q29udHJvbChuQ29udHJvbEluZGV4KSkKKwkJCXsKKwkJCQlpZiAoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSBwSW50ZXJGb3JtLT5HZXRXaWRnZXQocEZvcm1Db250cm9sKSkKKwkJCQl7CisJCQkJCWlmIChudW1iZXIgIT0gcFdpZGdldC0+R2V0Qm9yZGVyV2lkdGgoKSkKKwkJCQkJeworCQkJCQkJcFdpZGdldC0+U2V0Qm9yZGVyV2lkdGgobnVtYmVyKTsKKwkJCQkJCVVwZGF0ZUZvcm1Db250cm9sKHBEb2N1bWVudCwgcEZvcm1Db250cm9sLCBUUlVFLCBUUlVFLCBUUlVFKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KK30KKworRlhfQk9PTCBGaWVsZDo6bXVsdGlsaW5lKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAodnAuSXNTZXR0aW5nKCkpCisJeworCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOworCisJCWJvb2wgYlZQOworCQl2cCA+PiBiVlA7CisKKwkJaWYgKG1fYkRlbGF5KQorCQl7CisJCQlBZGREZWxheV9Cb29sKEZQX01VTFRJTElORSwgYlZQKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUZpZWxkOjpTZXRNdWx0aWxpbmUobV9wRG9jdW1lbnQsIG1fRmllbGROYW1lLCBtX25Gb3JtQ29udHJvbEluZGV4LCBiVlApOworCQl9CisJfQorCWVsc2UKKwl7CisJCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLCBGaWVsZEFycmF5KTsKKwkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7CisJCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCisJCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfVEVYVEZJRUxEKQorCQkJcmV0dXJuIEZBTFNFOworCisJCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZEZsYWdzKCkgJiBGSUVMREZMQUdfTVVMVElMSU5FKQorCQkJdnAgPDwgdHJ1ZTsKKwkJZWxzZQorCQkJdnAgPDwgZmFsc2U7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgRmllbGQ6OlNldE11bHRpbGluZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGJvb2wgYikKK3sKKwkvL05vdCBzdXBwb3J0ZWQuCit9CisKK0ZYX0JPT0wgRmllbGQ6Om11bHRpcGxlU2VsZWN0aW9uKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAodnAuSXNTZXR0aW5nKCkpCisJeworCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOworCisJCWJvb2wgYlZQOworCQl2cCA+PiBiVlA7CisKKwkJaWYgKG1fYkRlbGF5KQorCQl7CisJCQlBZGREZWxheV9Cb29sKEZQX01VTFRJUExFU0VMRUNUSU9OLCBiVlApOworCQl9CisJCWVsc2UKKwkJeworCQkJRmllbGQ6OlNldE11bHRpcGxlU2VsZWN0aW9uKG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgYlZQKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsKKwkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7CisJCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCisJCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfTElTVEJPWCkKKwkJCXJldHVybiBGQUxTRTsKKworCQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRGbGFncygpICYgRklFTERGTEFHX01VTFRJU0VMRUNUKQorCQkJdnAgPDwgdHJ1ZTsKKwkJZWxzZQorCQkJdnAgPDwgZmFsc2U7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgRmllbGQ6OlNldE11bHRpcGxlU2VsZWN0aW9uKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgYm9vbCBiKQoreworCS8vTm90IHN1cHBvcnRlZC4KK30KKworRlhfQk9PTCBGaWVsZDo6bmFtZShPQkpfUFJPUF9QQVJBTVMpCit7CisJaWYgKCF2cC5Jc0dldHRpbmcoKSkgcmV0dXJuIEZBTFNFOworCisJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSwgRmllbGRBcnJheSk7CisJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworICAgCXZwIDw8IG1fRmllbGROYW1lOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgRmllbGQ6Om51bUl0ZW1zKE9CSl9QUk9QX1BBUkFNUykKK3sJCisJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSwgRmllbGRBcnJheSk7CisJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfQ09NQk9CT1ggJiYKKwkJcEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX0xJU1RCT1gpCisJCXJldHVybiBGQUxTRTsKKworCWlmICghdnAuSXNHZXR0aW5nKCkpIHJldHVybiBGQUxTRTsKKworCXZwIDw8IChGWF9JTlQzMilwRm9ybUZpZWxkLT5Db3VudE9wdGlvbnMoKTsKKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIEZpZWxkOjpwYWdlKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlpZiAoIXZwLklzR2V0dGluZygpKSByZXR1cm4gRkFMU0U7CisKKwlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLCBGaWVsZEFycmF5KTsKKwlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOworCisJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOworCWlmICghcEZvcm1GaWVsZCkgcmV0dXJuIEZBTFNFOworCisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJQ1BERlNES19JbnRlckZvcm0qIHBJbnRlckZvcm0gPSAoQ1BERlNES19JbnRlckZvcm0qKW1fcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsKKwlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsKKworCUNGWF9QdHJBcnJheSB3aWRnZXRBcnJheTsKKwlwSW50ZXJGb3JtLT5HZXRXaWRnZXRzKHBGb3JtRmllbGQsIHdpZGdldEFycmF5KTsKKworCWlmICh3aWRnZXRBcnJheS5HZXRTaXplKCkgPiAwKQorCXsKKwkJQ0pTX0FycmF5IFBhZ2VBcnJheShtX2lzb2xhdGUpOworCisJCWZvciAoaW50IGk9MCxzej13aWRnZXRBcnJheS5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwkJeworCQkJQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSAoQ1BERlNES19XaWRnZXQqKXdpZGdldEFycmF5LkdldEF0KGkpOworCQkJQVNTRVJUKHBXaWRnZXQgIT0gTlVMTCk7CisKKwkJCUNQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyA9IHBXaWRnZXQtPkdldFBhZ2VWaWV3KCk7CisJCQlpZighcFBhZ2VWaWV3KQorCQkJCXJldHVybiBGQUxTRTsKKworCQkJUGFnZUFycmF5LlNldEVsZW1lbnQoaSwgQ0pTX1ZhbHVlKG1faXNvbGF0ZSwoRlhfSU5UMzIpcFBhZ2VWaWV3LT5HZXRQYWdlSW5kZXgoKSkpOworCQl9CisKKwkJdnAgPDwgUGFnZUFycmF5OworCX0KKwllbHNlCisJeworCQl2cCA8PCAoRlhfSU5UMzIpIC0xOworCX0KKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIEZpZWxkOjpwYXNzd29yZChPQkpfUFJPUF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKHZwLklzU2V0dGluZygpKQorCXsKKwkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsKKworCQlib29sIGJWUDsKKwkJdnAgPj4gYlZQOworCisJCWlmIChtX2JEZWxheSkKKwkJeworCQkJQWRkRGVsYXlfQm9vbChGUF9QQVNTV09SRCwgYlZQKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUZpZWxkOjpTZXRQYXNzd29yZChtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIGJWUCk7CisJCX0JCisJfQorCWVsc2UKKwl7CisJCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOworCQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOworCisJCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9URVhURklFTEQpCisJCQlyZXR1cm4gRkFMU0U7CisKKwkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkRmxhZ3MoKSAmIEZJRUxERkxBR19QQVNTV09SRCkKKwkJCXZwIDw8IHRydWU7CisJCWVsc2UKKwkJCXZwIDw8IGZhbHNlOworCX0KKworCXJldHVybiBUUlVFOworfQorCit2b2lkIEZpZWxkOjpTZXRQYXNzd29yZChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGJvb2wgYikKK3sKKwkvL05vdCBzdXBwb3J0ZWQuCit9CisKK0ZYX0JPT0wgRmllbGQ6OnByaW50KE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopbV9wRG9jdW1lbnQtPkdldEludGVyRm9ybSgpOworCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOworCisJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSwgRmllbGRBcnJheSk7CisJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CisJCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7CisKKwkJYm9vbCBiVlA7CisJCXZwID4+IGJWUDsKKworCQlmb3IgKGludCBpPTAsaXN6PUZpZWxkQXJyYXkuR2V0U2l6ZSgpOyBpPGlzejsgaSsrKQorCQl7CisJCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoaSk7CisJCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCQkJaWYgKG1fbkZvcm1Db250cm9sSW5kZXggPCAwKQorCQkJeworCQkJCUZYX0JPT0wgYlNldCA9IEZBTFNFOworCQkJCWZvciAoaW50IGo9MCxqc3ogPSBwRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCk7IGo8anN6OyBqKyspCisJCQkJeworCQkJCQlpZiAoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSBwSW50ZXJGb3JtLT5HZXRXaWRnZXQocEZvcm1GaWVsZC0+R2V0Q29udHJvbChqKSkpCisJCQkJCXsKKwkJCQkJCUZYX0RXT1JEIGR3RmxhZ3MgPSBwV2lkZ2V0LT5HZXRGbGFncygpOworCQkJCQkJaWYgKGJWUCkKKwkJCQkJCQlkd0ZsYWdzIHw9IEFOTk9URkxBR19QUklOVDsKKwkJCQkJCWVsc2UKKwkJCQkJCQlkd0ZsYWdzICY9IH5BTk5PVEZMQUdfUFJJTlQ7CisKKwkJCQkJCWlmIChkd0ZsYWdzICE9IHBXaWRnZXQtPkdldEZsYWdzKCkpCisJCQkJCQl7CisJCQkJCQkJcFdpZGdldC0+U2V0RmxhZ3MoZHdGbGFncyk7CisJCQkJCQkJYlNldCA9IFRSVUU7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisKKwkJCQlpZiAoYlNldCkKKwkJCQkJVXBkYXRlRm9ybUZpZWxkKG1fcERvY3VtZW50LCBwRm9ybUZpZWxkLCBUUlVFLCBGQUxTRSwgVFJVRSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWYobV9uRm9ybUNvbnRyb2xJbmRleCA+PSBwRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCkpIHJldHVybiBGQUxTRTsKKwkJCQlpZiAoQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sID0gcEZvcm1GaWVsZC0+R2V0Q29udHJvbChtX25Gb3JtQ29udHJvbEluZGV4KSkKKwkJCQl7CisJCQkJCWlmIChDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IHBJbnRlckZvcm0tPkdldFdpZGdldChwRm9ybUNvbnRyb2wpKQorCQkJCQl7CisJCQkJCQlGWF9EV09SRCBkd0ZsYWdzID0gcFdpZGdldC0+R2V0RmxhZ3MoKTsKKwkJCQkJCWlmIChiVlApCisJCQkJCQkJZHdGbGFncyB8PSBBTk5PVEZMQUdfUFJJTlQ7CisJCQkJCQllbHNlCisJCQkJCQkJZHdGbGFncyAmPSB+QU5OT1RGTEFHX1BSSU5UOworCisJCQkJCQlpZiAoZHdGbGFncyAhPSBwV2lkZ2V0LT5HZXRGbGFncygpKQorCQkJCQkJeworCQkJCQkJCXBXaWRnZXQtPlNldEZsYWdzKGR3RmxhZ3MpOworCQkJCQkJCVVwZGF0ZUZvcm1Db250cm9sKG1fcERvY3VtZW50LCBwRm9ybUZpZWxkLT5HZXRDb250cm9sKG1fbkZvcm1Db250cm9sSW5kZXgpLCBUUlVFLCBGQUxTRSwgVFJVRSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisJZWxzZQorCXsKKwkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOworCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKwkJCisJCUNQREZTREtfV2lkZ2V0KiBwV2lkZ2V0ID0gcEludGVyRm9ybS0+R2V0V2lkZ2V0KEdldFNtYXJ0RmllbGRDb250cm9sKHBGb3JtRmllbGQpKTsKKwkJaWYgKCFwV2lkZ2V0KSByZXR1cm4gRkFMU0U7CisKKwkJaWYgKHBXaWRnZXQtPkdldEZsYWdzKCkgJiBBTk5PVEZMQUdfUFJJTlQpCisJCQl2cCA8PCB0cnVlOworCQllbHNlCisJCQl2cCA8PCBmYWxzZTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBGaWVsZDo6cmFkaW9zSW5Vbmlzb24oT0JKX1BST1BfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7CisJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CisJCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7CisKKwkJYm9vbCBiVlA7CisJCXZwID4+IGJWUDsKKworCX0KKwllbHNlCisJeworCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7CisJCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCisJCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSAhPSBGSUVMRFRZUEVfUkFESU9CVVRUT04pCisJCQlyZXR1cm4gRkFMU0U7CisKKwkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkRmxhZ3MoKSAmIEZJRUxERkxBR19SQURJT1NJTlVOSVNPTikKKwkJCXZwIDw8IHRydWU7CisJCWVsc2UKKwkJCXZwIDw8IGZhbHNlOworCX0KKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIEZpZWxkOjpyZWFkb25seShPQkpfUFJPUF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsKKwlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOworCisJaWYgKHZwLklzU2V0dGluZygpKQorCXsKKwkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsKKworCQlib29sIGJWUDsKKwkJdnAgPj4gYlZQOworCisJfQorCWVsc2UKKwl7CisJCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkRmxhZ3MoKSAmIEZJRUxERkxBR19SRUFET05MWSkKKwkJCXZwIDw8IHRydWU7CisJCWVsc2UKKwkJCXZwIDw8IGZhbHNlOworCX0KKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIEZpZWxkOjpyZWN0KE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAodnAuSXNTZXR0aW5nKCkpCisJeworCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOworCQlpZiAoIXZwLklzQXJyYXlPYmplY3QoKSlyZXR1cm4gRkFMU0U7CisKKwkJQ0pTX0FycmF5IHJjQXJyYXkobV9pc29sYXRlKTsKKwkJdnAgPj4gcmNBcnJheTsKKwkJQ0pTX1ZhbHVlIFVwcGVyX0xlZnR4KG1faXNvbGF0ZSksIFVwcGVyX0xlZnR5KG1faXNvbGF0ZSksIExvd2VyX1JpZ2h0eChtX2lzb2xhdGUpLCBMb3dlcl9SaWdodHkobV9pc29sYXRlKTsKKwkJcmNBcnJheS5HZXRFbGVtZW50KDAsIFVwcGVyX0xlZnR4KTsKKwkJcmNBcnJheS5HZXRFbGVtZW50KDEsIFVwcGVyX0xlZnR5KTsKKwkJcmNBcnJheS5HZXRFbGVtZW50KDIsIExvd2VyX1JpZ2h0eCk7CisJCXJjQXJyYXkuR2V0RWxlbWVudCgzLCBMb3dlcl9SaWdodHkpOworCisJCUZYX0ZMT0FUIHBBcnJheVs0XSA9IHswLjBmLDAuMGYsMC4wZiwwLjBmfTsKKwkJcEFycmF5WzBdID0gKEZYX0ZMT0FUKShGWF9JTlQzMilVcHBlcl9MZWZ0eDsKKwkJcEFycmF5WzFdID0gKEZYX0ZMT0FUKShGWF9JTlQzMilMb3dlcl9SaWdodHk7CisJCXBBcnJheVsyXSA9IChGWF9GTE9BVCkoRlhfSU5UMzIpTG93ZXJfUmlnaHR4OworCQlwQXJyYXlbM10gPSAoRlhfRkxPQVQpKEZYX0lOVDMyKVVwcGVyX0xlZnR5OworCisJCUNQREZfUmVjdCBjclJlY3QocEFycmF5KTsKKworCQlpZiAobV9iRGVsYXkpCisJCXsKKwkJCUFkZERlbGF5X1JlY3QoRlBfUkVDVCwgY3JSZWN0KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUZpZWxkOjpTZXRSZWN0KG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgY3JSZWN0KTsKKwkJfQkKKwl9CisJZWxzZQorCXsKKwkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7CisJCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7CisKKwkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOworCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCQlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopbV9wRG9jdW1lbnQtPkdldEludGVyRm9ybSgpOworCQlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsKKworCQlDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IHBJbnRlckZvcm0tPkdldFdpZGdldChHZXRTbWFydEZpZWxkQ29udHJvbChwRm9ybUZpZWxkKSk7CisJCWlmICghcFdpZGdldCkgcmV0dXJuIEZBTFNFOworCisJCUNGWF9GbG9hdFJlY3QgY3JSZWN0ID0gcFdpZGdldC0+R2V0UmVjdCgpOworCQlDSlNfVmFsdWUgVXBwZXJfTGVmdHgobV9pc29sYXRlKSxVcHBlcl9MZWZ0eShtX2lzb2xhdGUpLExvd2VyX1JpZ2h0eChtX2lzb2xhdGUpLExvd2VyX1JpZ2h0eShtX2lzb2xhdGUpOworCQlVcHBlcl9MZWZ0eCA9IChGWF9JTlQzMiljclJlY3QubGVmdDsKKwkJVXBwZXJfTGVmdHkgPSAoRlhfSU5UMzIpY3JSZWN0LnRvcDsKKwkJTG93ZXJfUmlnaHR4ID0gKEZYX0lOVDMyKWNyUmVjdC5yaWdodDsKKwkJTG93ZXJfUmlnaHR5ID0gKEZYX0lOVDMyKWNyUmVjdC5ib3R0b207CisKKwkJQ0pTX0FycmF5IHJjQXJyYXkobV9pc29sYXRlKTsKKwkJcmNBcnJheS5TZXRFbGVtZW50KDAsVXBwZXJfTGVmdHgpOworCQlyY0FycmF5LlNldEVsZW1lbnQoMSxVcHBlcl9MZWZ0eSk7CisJCXJjQXJyYXkuU2V0RWxlbWVudCgyLExvd2VyX1JpZ2h0eCk7CisJCXJjQXJyYXkuU2V0RWxlbWVudCgzLExvd2VyX1JpZ2h0eSk7CisKKwkJdnAgIDw8ICByY0FycmF5OwkJCQorCX0KKworCXJldHVybiBUUlVFOworfQorCit2b2lkIEZpZWxkOjpTZXRSZWN0KENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgY29uc3QgQ1BERl9SZWN0JiByZWN0KQoreworCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopcERvY3VtZW50LT5HZXRJbnRlckZvcm0oKTsKKwlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsKKworCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCUdldEZvcm1GaWVsZHMocERvY3VtZW50LCBzd0ZpZWxkTmFtZSwgRmllbGRBcnJheSk7CisKKwlmb3IgKGludCBpPTAsaXN6PUZpZWxkQXJyYXkuR2V0U2l6ZSgpOyBpPGlzejsgaSsrKQorCXsKKwkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KGkpOworCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCQlpZiAobkNvbnRyb2xJbmRleCA8IDApCisJCXsKKwkJCUZYX0JPT0wgYlNldCA9IEZBTFNFOworCQkJZm9yIChpbnQgaT0wLCBzej1wRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCk7IGk8c3o7IGkrKykKKwkJCXsKKwkJCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBwRm9ybUZpZWxkLT5HZXRDb250cm9sKGkpOworCQkJCUFTU0VSVChwRm9ybUNvbnRyb2wgIT0gTlVMTCk7CisKKwkJCQlpZiAoQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSBwSW50ZXJGb3JtLT5HZXRXaWRnZXQocEZvcm1Db250cm9sKSkKKwkJCQl7CisJCQkJCUNQREZfUmVjdCBjclJlY3QgPSByZWN0OworCisJCQkJCUNQREZfUGFnZSogcFBERlBhZ2UgPSBwV2lkZ2V0LT5HZXRQREZQYWdlKCk7CisJCQkJCUFTU0VSVChwUERGUGFnZSAhPSBOVUxMKTsKKworLy8gCQkJCQlDUERGX1BhZ2UqIHBQREZQYWdlID0gcFBhZ2UtPkdldFBhZ2UoKTsKKy8vIAkJCQkJQVNTRVJUKHBQREZQYWdlICE9IE5VTEwpOworCisJCQkJCWNyUmVjdC5JbnRlcnNlY3QocFBERlBhZ2UtPkdldFBhZ2VCQm94KCkpOworCisJCQkJCWlmICghY3JSZWN0LklzRW1wdHkoKSkKKwkJCQkJeworCQkJCQkJQ1BERl9SZWN0IHJjT2xkID0gcFdpZGdldC0+R2V0UmVjdCgpOworCQkJCQkJaWYgKGNyUmVjdC5sZWZ0ICE9IHJjT2xkLmxlZnQgfHwKKwkJCQkJCQljclJlY3QucmlnaHQgIT0gcmNPbGQucmlnaHQgfHwKKwkJCQkJCQljclJlY3QudG9wICE9IHJjT2xkLnRvcCB8fAorCQkJCQkJCWNyUmVjdC5ib3R0b20gIT0gcmNPbGQuYm90dG9tKQorCQkJCQkJeworCQkJCQkJCXBXaWRnZXQtPlNldFJlY3QoY3JSZWN0KTsKKwkJCQkJCQliU2V0ID0gVFJVRTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKGJTZXQpIFVwZGF0ZUZvcm1GaWVsZChwRG9jdW1lbnQsIHBGb3JtRmllbGQsIFRSVUUsIFRSVUUsIFRSVUUpOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYobkNvbnRyb2xJbmRleCA+PSBwRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCkpIHJldHVybjsKKwkJCWlmIChDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBwRm9ybUZpZWxkLT5HZXRDb250cm9sKG5Db250cm9sSW5kZXgpKQorCQkJeworCQkJCWlmIChDUERGU0RLX1dpZGdldCogcFdpZGdldCA9IHBJbnRlckZvcm0tPkdldFdpZGdldChwRm9ybUNvbnRyb2wpKQorCQkJCXsKKwkJCQkJQ1BERl9SZWN0IGNyUmVjdCA9IHJlY3Q7CisJCQkJCQorCQkJCQlDUERGX1BhZ2UqIHBQREZQYWdlID0gcFdpZGdldC0+R2V0UERGUGFnZSgpOworCQkJCQlBU1NFUlQocFBERlBhZ2UgIT0gTlVMTCk7CisKKy8vIAkJCQkJQ1BERl9QYWdlKiBwUERGUGFnZSA9IHBQYWdlLT5HZXRQYWdlKCk7CisvLyAJCQkJCUFTU0VSVChwUERGUGFnZSAhPSBOVUxMKTsKKworCQkJCQljclJlY3QuSW50ZXJzZWN0KHBQREZQYWdlLT5HZXRQYWdlQkJveCgpKTsKKworCQkJCQlpZiAoIWNyUmVjdC5Jc0VtcHR5KCkpCisJCQkJCXsKKwkJCQkJCUNQREZfUmVjdCByY09sZCA9IHBXaWRnZXQtPkdldFJlY3QoKTsKKwkJCQkJCWlmIChjclJlY3QubGVmdCAhPSByY09sZC5sZWZ0IHx8CisJCQkJCQkJY3JSZWN0LnJpZ2h0ICE9IHJjT2xkLnJpZ2h0IHx8CisJCQkJCQkJY3JSZWN0LnRvcCAhPSByY09sZC50b3AgfHwKKwkJCQkJCQljclJlY3QuYm90dG9tICE9IHJjT2xkLmJvdHRvbSkKKwkJCQkJCXsKKwkJCQkJCQlwV2lkZ2V0LT5TZXRSZWN0KGNyUmVjdCk7CisJCQkJCQkJVXBkYXRlRm9ybUNvbnRyb2wocERvY3VtZW50LCBwRm9ybUNvbnRyb2wsIFRSVUUsIFRSVUUsIFRSVUUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorfQorCitGWF9CT09MIEZpZWxkOjpyZXF1aXJlZChPQkpfUFJPUF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsKKwlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOworCisJaWYgKHZwLklzU2V0dGluZygpKQorCXsKKwkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsKKworCisJCWJvb2wgYlZQOworCQl2cCA+PiBiVlA7CisKKwl9CisJZWxzZQorCXsKKwkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOworCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgPT0gRklFTERUWVBFX1BVU0hCVVRUT04pCisJCQlyZXR1cm4gRkFMU0U7CisKKwkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkRmxhZ3MoKSAmIEZJRUxERkxBR19SRVFVSVJFRCkKKwkJCXZwIDw8IHRydWU7CisJCWVsc2UKKwkJCXZwIDw8IGZhbHNlOworCX0KKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIEZpZWxkOjpyaWNoVGV4dChPQkpfUFJPUF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKHZwLklzU2V0dGluZygpKQorCXsKKwkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsKKworCQlib29sIGJWUDsKKwkJdnAgPj4gYlZQOworCisJCWlmIChtX2JEZWxheSkKKwkJeworCQkJQWRkRGVsYXlfQm9vbChGUF9SSUNIVEVYVCwgYlZQKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUZpZWxkOjpTZXRSaWNoVGV4dChtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIGJWUCk7CisJCX0JCisJfQorCWVsc2UKKwl7CisJCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOworCQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOworCisJCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9URVhURklFTEQpCisJCQlyZXR1cm4gRkFMU0U7CisKKwkJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkRmxhZ3MoKSAmIEZJRUxERkxBR19SSUNIVEVYVCkKKwkJCXZwIDw8IHRydWU7CisJCWVsc2UKKwkJCXZwIDw8IGZhbHNlOworCX0KKworCXJldHVybiBUUlVFOworfQorCit2b2lkIEZpZWxkOjpTZXRSaWNoVGV4dChDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGJvb2wgYikKK3sKKwkvL05vdCBzdXBwb3J0ZWQuCit9CisKK0ZYX0JPT0wgRmllbGQ6OnJpY2hWYWx1ZShPQkpfUFJPUF9QQVJBTVMpCit7CisJcmV0dXJuIFRSVUU7CisJaWYgKHZwLklzU2V0dGluZygpKQorCXsKKwkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsKKwkJOworCX0KKwllbHNlCisJeworCQk7CisJfQorCXJldHVybiBUUlVFOworfQorCit2b2lkIEZpZWxkOjpTZXRSaWNoVmFsdWUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4KQoreworCS8vTm90IHN1cHBvcnRlZC4KK30KKworRlhfQk9PTCBGaWVsZDo6cm90YXRpb24oT0JKX1BST1BfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CisJCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7CisKKwkJaW50IG5WUDsKKwkJdnAgPj4gblZQOworCisJCWlmIChtX2JEZWxheSkKKwkJeworCQkJQWRkRGVsYXlfSW50KEZQX1JPVEFUSU9OLCBuVlApOworCQl9CisJCWVsc2UKKwkJeworCQkJRmllbGQ6OlNldFJvdGF0aW9uKG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgblZQKTsKKwkJfQkKKwl9CisJZWxzZQorCXsKKwkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7CisJCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7CisKKwkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOworCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBHZXRTbWFydEZpZWxkQ29udHJvbChwRm9ybUZpZWxkKTsKKwkJaWYgKCFwRm9ybUNvbnRyb2wpcmV0dXJuIEZBTFNFOworCisJCXZwIDw8IChGWF9JTlQzMilwRm9ybUNvbnRyb2wtPkdldFJvdGF0aW9uKCk7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgRmllbGQ6OlNldFJvdGF0aW9uKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgaW50IG51bWJlcikKK3sKKwkvL05vdCBzdXBwb3J0ZWQuCit9CisKK0ZYX0JPT0wgRmllbGQ6OnN0cm9rZUNvbG9yKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAodnAuSXNTZXR0aW5nKCkpCisJeworCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOworCisJCWlmICghdnAuSXNBcnJheU9iamVjdCgpKXJldHVybiBGQUxTRTsKKworCQlDSlNfQXJyYXkgY3JBcnJheShtX2lzb2xhdGUpOworCQl2cCA+PiBjckFycmF5OworCisJCUNQV0xfQ29sb3IgY29sb3I7CisJCWNvbG9yOjpDb252ZXJ0QXJyYXlUb1BXTENvbG9yKGNyQXJyYXksIGNvbG9yKTsKKworCQlpZiAobV9iRGVsYXkpCisJCXsKKwkJCUFkZERlbGF5X0NvbG9yKEZQX1NUUk9LRUNPTE9SLCBjb2xvcik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlGaWVsZDo6U2V0U3Ryb2tlQ29sb3IobV9wRG9jdW1lbnQsIG1fRmllbGROYW1lLCBtX25Gb3JtQ29udHJvbEluZGV4LCBjb2xvcik7CisJCX0JCisJfQorCWVsc2UKKwl7CisJCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCQlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOworCQlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOworCisJCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwkJQ1BERl9Gb3JtQ29udHJvbCogcEZvcm1Db250cm9sID0gR2V0U21hcnRGaWVsZENvbnRyb2wocEZvcm1GaWVsZCk7CisJCWlmICghcEZvcm1Db250cm9sKXJldHVybiBGQUxTRTsKKworCQlpbnQgaUNvbG9yVHlwZTsKKwkJcEZvcm1Db250cm9sLT5HZXRCb3JkZXJDb2xvcihpQ29sb3JUeXBlKTsKKworCQlDUFdMX0NvbG9yIGNvbG9yOworCisJCWlmIChpQ29sb3JUeXBlID09IENPTE9SVFlQRV9UUkFOU1BBUkVOVCkKKwkJeworCQkJY29sb3IgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9UUkFOU1BBUkVOVCk7CisJCX0KKwkJZWxzZSBpZiAoaUNvbG9yVHlwZSA9PSBDT0xPUlRZUEVfR1JBWSkKKwkJeworCQkJY29sb3IgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLCBwRm9ybUNvbnRyb2wtPkdldE9yaWdpbmFsQm9yZGVyQ29sb3IoMCkpOworCQl9CisJCWVsc2UgaWYgKGlDb2xvclR5cGUgPT0gQ09MT1JUWVBFX1JHQikKKwkJeworCQkJY29sb3IgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9SR0IsIHBGb3JtQ29udHJvbC0+R2V0T3JpZ2luYWxCb3JkZXJDb2xvcigwKSwKKwkJCQlwRm9ybUNvbnRyb2wtPkdldE9yaWdpbmFsQm9yZGVyQ29sb3IoMSksCisJCQkJcEZvcm1Db250cm9sLT5HZXRPcmlnaW5hbEJvcmRlckNvbG9yKDIpKTsKKwkJfQorCQllbHNlIGlmIChpQ29sb3JUeXBlID09IENPTE9SVFlQRV9DTVlLKQorCQl7CisJCQljb2xvciA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0NNWUssIHBGb3JtQ29udHJvbC0+R2V0T3JpZ2luYWxCb3JkZXJDb2xvcigwKSwKKwkJCQlwRm9ybUNvbnRyb2wtPkdldE9yaWdpbmFsQm9yZGVyQ29sb3IoMSksCisJCQkJcEZvcm1Db250cm9sLT5HZXRPcmlnaW5hbEJvcmRlckNvbG9yKDIpLAorCQkJCXBGb3JtQ29udHJvbC0+R2V0T3JpZ2luYWxCb3JkZXJDb2xvcigzKSk7CisJCX0KKwkJZWxzZQorCQkJcmV0dXJuIEZBTFNFOworCisJCUNKU19BcnJheSBjckFycmF5KG1faXNvbGF0ZSk7CisJCWNvbG9yOjpDb252ZXJ0UFdMQ29sb3JUb0FycmF5KGNvbG9yLCBjckFycmF5KTsKKyAgICAgICAgdnAgIDw8ICBjckFycmF5OworCX0KKworCXJldHVybiBUUlVFOworfQorCit2b2lkIEZpZWxkOjpTZXRTdHJva2VDb2xvcihDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yKQoreworCS8vTm90IHN1cHBvcnRlZC4KK30KKworRlhfQk9PTCBGaWVsZDo6c3R5bGUoT0JKX1BST1BfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CisJCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7CisKKwkJQ0ZYX0J5dGVTdHJpbmcgY3NCQ2FwdGlvbjsKKwkJdnAgPj4gY3NCQ2FwdGlvbjsKKworCQlpZiAobV9iRGVsYXkpCisJCXsKKwkJCUFkZERlbGF5X1N0cmluZyhGUF9TVFlMRSwgY3NCQ2FwdGlvbik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlGaWVsZDo6U2V0U3R5bGUobV9wRG9jdW1lbnQsIG1fRmllbGROYW1lLCBtX25Gb3JtQ29udHJvbEluZGV4LCBjc0JDYXB0aW9uKTsKKwkJfQkKKwl9CisJZWxzZQorCXsKKwkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7CisJCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7CisKKwkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOworCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCQlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX1JBRElPQlVUVE9OICYmIAorCQkJcEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX0NIRUNLQk9YKQorCQkJcmV0dXJuIEZBTFNFOworCisJCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCA9IEdldFNtYXJ0RmllbGRDb250cm9sKHBGb3JtRmllbGQpOworCQlpZiAoIXBGb3JtQ29udHJvbCkgcmV0dXJuIEZBTFNFOworCisJCUNGWF9XaWRlU3RyaW5nIGNzV0NhcHRpb24gPSBwRm9ybUNvbnRyb2wtPkdldE5vcm1hbENhcHRpb24oKTsKKwkJQ0ZYX0J5dGVTdHJpbmcgY3NCQ2FwdGlvbjsKKworCQlzd2l0Y2ggKGNzV0NhcHRpb25bMF0pCisJCXsKKwkJCWNhc2UgTCdsJzoKKwkJCQljc0JDYXB0aW9uID0gImNpcmNsZSI7CisJCQkJYnJlYWs7CisJCQljYXNlIEwnOCc6CisJCQkJY3NCQ2FwdGlvbiA9ICJjcm9zcyI7CisJCQkJYnJlYWs7CisJCQljYXNlIEwndSc6CisJCQkJY3NCQ2FwdGlvbiA9ICJkaWFtb25kIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgTCduJzoKKwkJCQljc0JDYXB0aW9uID0gInNxdWFyZSI7CisJCQkJYnJlYWs7CisJCQljYXNlIEwnSCc6CisJCQkJY3NCQ2FwdGlvbiA9ICJzdGFyIjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6IC8vTCc0JworCQkJCWNzQkNhcHRpb24gPSAiY2hlY2siOworCQkJCWJyZWFrOworCQl9CisJCXZwIDw8IGNzQkNhcHRpb247CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQgRmllbGQ6OlNldFN0eWxlKENQREZTREtfRG9jdW1lbnQqIHBEb2N1bWVudCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN3RmllbGROYW1lLCBpbnQgbkNvbnRyb2xJbmRleCwgCisJCQkJCSBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyaW5nKQoreworCS8vTm90IHN1cHBvcnRlZC4KK30KKworRlhfQk9PTCBGaWVsZDo6c3VibWl0TmFtZShPQkpfUFJPUF9QQVJBTVMpCit7CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgRmllbGQ6OnRleHRDb2xvcihPQkpfUFJPUF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKHZwLklzU2V0dGluZygpKQorCXsKKwkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsKKworCQlDSlNfQXJyYXkgY3JBcnJheShtX2lzb2xhdGUpOworCQlpZiAoIXZwLklzQXJyYXlPYmplY3QoKSlyZXR1cm4gRkFMU0U7CisJCXZwID4+IGNyQXJyYXk7CisKKwkJQ1BXTF9Db2xvciBjb2xvcjsKKwkJY29sb3I6OkNvbnZlcnRBcnJheVRvUFdMQ29sb3IoY3JBcnJheSwgY29sb3IpOworCisJCWlmIChtX2JEZWxheSkKKwkJeworCQkJQWRkRGVsYXlfQ29sb3IoRlBfVEVYVENPTE9SLCBjb2xvcik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlGaWVsZDo6U2V0VGV4dENvbG9yKG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgY29sb3IpOworCQl9CQorCX0KKwllbHNlCisJeworCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsKKwkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7CisJCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCisJCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCA9IEdldFNtYXJ0RmllbGRDb250cm9sKHBGb3JtRmllbGQpOworCQlpZiAoIXBGb3JtQ29udHJvbClyZXR1cm4gRkFMU0U7CisJCQorCQlpbnQgaUNvbG9yVHlwZTsKKwkJRlhfQVJHQiBjb2xvcjsKKwkJQ1BERl9EZWZhdWx0QXBwZWFyYW5jZSBGaWVsZEFwcGVhcmFuY2UgPSBwRm9ybUNvbnRyb2wtPkdldERlZmF1bHRBcHBlYXJhbmNlKCk7CisJCUZpZWxkQXBwZWFyYW5jZS5HZXRDb2xvcihjb2xvciwgaUNvbG9yVHlwZSk7CisJCUZYX0lOVDMyIGEscixnLGI7CisJCUFyZ2JEZWNvZGUoY29sb3IsIGEsIHIsIGcsIGIpOworCisJCUNQV0xfQ29sb3IgY3JSZXQgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9SR0IsIHIgLyAyNTUuMGYsCisJCQkJZyAvIDI1NS4wZiwKKwkJCQliIC8gMjU1LjBmKTsKKworCQlpZiAoaUNvbG9yVHlwZSA9PSBDT0xPUlRZUEVfVFJBTlNQQVJFTlQpCisJCQljclJldCA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX1RSQU5TUEFSRU5UKTsKKworCQlDSlNfQXJyYXkgY3JBcnJheShtX2lzb2xhdGUpOworCQljb2xvcjo6Q29udmVydFBXTENvbG9yVG9BcnJheShjclJldCwgY3JBcnJheSk7CisgICAgICAgIHZwICA8PCAgY3JBcnJheTsJCQorCX0KKworCXJldHVybiBUUlVFOworfQorCit2b2lkIEZpZWxkOjpTZXRUZXh0Q29sb3IoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBjb25zdCBDUFdMX0NvbG9yJiBjb2xvcikKK3sKKwkvL05vdCBzdXBwb3J0ZWQuCit9CisKK0ZYX0JPT0wgRmllbGQ6OnRleHRGb250KE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAodnAuSXNTZXR0aW5nKCkpCisJeworCQlpZiAoIW1fYkNhblNldCkgcmV0dXJuIEZBTFNFOworCisJCUNGWF9CeXRlU3RyaW5nIGNzRm9udE5hbWU7CisJCXZwID4+IGNzRm9udE5hbWU7CisJCWlmIChjc0ZvbnROYW1lLklzRW1wdHkoKSkgcmV0dXJuIEZBTFNFOworCisJCWlmIChtX2JEZWxheSkKKwkJeworCQkJQWRkRGVsYXlfU3RyaW5nKEZQX1RFWFRGT05ULCBjc0ZvbnROYW1lKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUZpZWxkOjpTZXRUZXh0Rm9udChtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIGNzRm9udE5hbWUpOworCQl9CQorCX0KKwllbHNlCisJeworCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsKKwkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCQlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7CisJCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCisJCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCA9IEdldFNtYXJ0RmllbGRDb250cm9sKHBGb3JtRmllbGQpOworCQlpZiAoIXBGb3JtQ29udHJvbClyZXR1cm4gRkFMU0U7CisKKwkJaW50IG5GaWVsZFR5cGUgPSBwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKTsKKworCQlpZiAobkZpZWxkVHlwZSA9PSBGSUVMRFRZUEVfUFVTSEJVVFRPTiB8fCAKKwkJCW5GaWVsZFR5cGUgPT0gRklFTERUWVBFX0NPTUJPQk9YIHx8IAorCQkJbkZpZWxkVHlwZSA9PSBGSUVMRFRZUEVfTElTVEJPWCB8fAorCQkJbkZpZWxkVHlwZSA9PSBGSUVMRFRZUEVfVEVYVEZJRUxEKQorCQl7CisJCQlDUERGX0ZvbnQgKiBwRm9udCA9IHBGb3JtQ29udHJvbC0+R2V0RGVmYXVsdENvbnRyb2xGb250KCk7CisJCQlpZiAoIXBGb250KSByZXR1cm4gRkFMU0U7CisKKwkJCXZwIDw8IHBGb250LT5HZXRCYXNlRm9udCgpOworCQl9CisJCWVsc2UKKwkJCXJldHVybiBGQUxTRTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKwordm9pZCBGaWVsZDo6U2V0VGV4dEZvbnQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc3RyaW5nKQoreworCS8vTm90IHN1cHBvcnRlZC4KK30KKworRlhfQk9PTCBGaWVsZDo6dGV4dFNpemUoT0JKX1BST1BfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CisJCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7CisKKwkJaW50IG5WUDsKKwkJdnAgPj4gblZQOworCisJCWlmIChtX2JEZWxheSkKKwkJeworCQkJQWRkRGVsYXlfSW50KEZQX1RFWFRTSVpFLCBuVlApOworCQl9CisJCWVsc2UKKwkJeworCQkJRmllbGQ6OlNldFRleHRTaXplKG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgblZQKTsKKwkJfQkKKwl9CisJZWxzZQorCXsKKwkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7CisJCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7CisKKwkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOworCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCQlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBHZXRTbWFydEZpZWxkQ29udHJvbChwRm9ybUZpZWxkKTsKKwkJaWYgKCFwRm9ybUNvbnRyb2wpcmV0dXJuIEZBTFNFOworCisJCUNQREZfRGVmYXVsdEFwcGVhcmFuY2UgRmllbGRBcHBlYXJhbmNlID0gcEZvcm1Db250cm9sLT5HZXREZWZhdWx0QXBwZWFyYW5jZSgpOworCisJCUNGWF9CeXRlU3RyaW5nIGNzRm9udE5hbWVUYWc7CisJCUZYX0ZMT0FUIGZGb250U2l6ZTsKKwkJRmllbGRBcHBlYXJhbmNlLkdldEZvbnQoY3NGb250TmFtZVRhZyxmRm9udFNpemUpOworCisJCXZwIDw8IChpbnQpZkZvbnRTaXplOworCX0KKworCXJldHVybiBUUlVFOworfQorCit2b2lkIEZpZWxkOjpTZXRUZXh0U2l6ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgaW50IG5Db250cm9sSW5kZXgsIGludCBudW1iZXIpCit7CisJLy9Ob3Qgc3VwcG9ydGVkLgorfQorCitGWF9CT09MIEZpZWxkOjp0eXBlKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlpZiAoIXZwLklzR2V0dGluZygpKSByZXR1cm4gRkFMU0U7CisKKwlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOworCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7CisKKyAJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOworCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCisJc3dpdGNoIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSkKKwl7CisJCWNhc2UgRklFTERUWVBFX1VOS05PV046CisJCQl2cCA8PCAoRlhfTFBDV1NUUilMInVua25vd24iOworCQkJYnJlYWs7CisJCWNhc2UgRklFTERUWVBFX1BVU0hCVVRUT046CisJCQl2cCA8PCAoRlhfTFBDV1NUUilMImJ1dHRvbiI7CisJCQlicmVhazsKKwkJY2FzZSBGSUVMRFRZUEVfQ0hFQ0tCT1g6CisJCQl2cCA8PCAoRlhfTFBDV1NUUilMImNoZWNrYm94IjsKKwkJCWJyZWFrOworCQljYXNlIEZJRUxEVFlQRV9SQURJT0JVVFRPTjoKKwkJCXZwIDw8IChGWF9MUENXU1RSKUwicmFkaW9idXR0b24iOworCQkJYnJlYWs7CisJCWNhc2UgRklFTERUWVBFX0NPTUJPQk9YOgorCQkJdnAgPDwgKEZYX0xQQ1dTVFIpTCJjb21ib2JveCI7CisJCQlicmVhazsKKwkJY2FzZSBGSUVMRFRZUEVfTElTVEJPWDoKKwkJCXZwIDw8IChGWF9MUENXU1RSKUwibGlzdGJveCI7CisJCQlicmVhazsKKwkJY2FzZSBGSUVMRFRZUEVfVEVYVEZJRUxEOgorCQkJdnAgPDwgKEZYX0xQQ1dTVFIpTCJ0ZXh0IjsKKwkJCWJyZWFrOworCQljYXNlIEZJRUxEVFlQRV9TSUdOQVRVUkU6CisJCQl2cCA8PCAoRlhfTFBDV1NUUilMInNpZ25hdHVyZSI7CisJCQlicmVhazsKKwkJZGVmYXVsdCA6CisJCQl2cCA8PCAoRlhfTFBDV1NUUilMInVua25vd24iOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgRmllbGQ6OnVzZXJOYW1lKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKyAgCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CisJCWlmICghbV9iQ2FuU2V0KSByZXR1cm4gRkFMU0U7CisKKwkJQ0ZYX1dpZGVTdHJpbmcgc3dOYW1lOworCQl2cCA+PiBzd05hbWU7CisKKwkJaWYgKG1fYkRlbGF5KQorCQl7CisJCQlBZGREZWxheV9XaWRlU3RyaW5nKEZQX1VTRVJOQU1FLCBzd05hbWUpOworCQl9CisJCWVsc2UKKwkJeworCQkJRmllbGQ6OlNldFVzZXJOYW1lKG1fcERvY3VtZW50LCBtX0ZpZWxkTmFtZSwgbV9uRm9ybUNvbnRyb2xJbmRleCwgc3dOYW1lKTsKKwkJfQkKKwl9CisJZWxzZQorCXsKKwkJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7CisJCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7CisKKyAJCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwkJdnAgPDwgKENGWF9XaWRlU3RyaW5nKXBGb3JtRmllbGQtPkdldEFsdGVybmF0ZU5hbWUoKTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKwordm9pZCBGaWVsZDo6U2V0VXNlck5hbWUoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3dGaWVsZE5hbWUsIGludCBuQ29udHJvbEluZGV4LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyaW5nKQoreworCS8vTm90IHN1cHBvcnRlZC4KK30KKworRlhfQk9PTCBGaWVsZDo6dmFsdWUoT0JKX1BST1BfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CQkKKwkJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsKKworCQlDSlNfV2lkZVN0cmluZ0FycmF5IHN0ckFycmF5OworCisJCWlmICh2cC5Jc0FycmF5T2JqZWN0KCkpCisJCXsKKwkJCUNKU19BcnJheSBWYWx1ZUFycmF5KG1faXNvbGF0ZSk7CisJCQl2cC5Db252ZXJ0VG9BcnJheShWYWx1ZUFycmF5KTsKKwkJCWZvciAoaW50IGkgPSAwLHN6ID0gVmFsdWVBcnJheS5HZXRMZW5ndGgoKTsgaSA8IHN6OyBpKyspCisJCQl7CisJCQkJQ0pTX1ZhbHVlIEVsZW1lbnRWYWx1ZShtX2lzb2xhdGUpOworCQkJCVZhbHVlQXJyYXkuR2V0RWxlbWVudChpLCBFbGVtZW50VmFsdWUpOworCQkJCXN0ckFycmF5LkFkZChFbGVtZW50VmFsdWUub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKSk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlDRlhfV2lkZVN0cmluZyBzd1ZhbHVlOworCQkJdnAgPj4gc3dWYWx1ZTsKKworCQkJc3RyQXJyYXkuQWRkKHN3VmFsdWUpOworCQl9CisKKwkJaWYgKG1fYkRlbGF5KQorCQl7CisJCQlBZGREZWxheV9XaWRlU3RyaW5nQXJyYXkoRlBfVkFMVUUsIHN0ckFycmF5KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUZpZWxkOjpTZXRWYWx1ZShtX3BEb2N1bWVudCwgbV9GaWVsZE5hbWUsIG1fbkZvcm1Db250cm9sSW5kZXgsIHN0ckFycmF5KTsKKwkJfQorCX0KKwllbHNlCisJeworCQlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwkJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsKKwkJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworIAkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOworCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCisKKwkJc3dpdGNoIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSkKKwkJeworCQljYXNlIEZJRUxEVFlQRV9QVVNIQlVUVE9OOgorCQkJcmV0dXJuIEZBTFNFOworCQljYXNlIEZJRUxEVFlQRV9DT01CT0JPWDoKKwkJY2FzZSBGSUVMRFRZUEVfVEVYVEZJRUxEOgorCQkJeworCQkJCUNGWF9XaWRlU3RyaW5nIHN3VmFsdWUgPSBwRm9ybUZpZWxkLT5HZXRWYWx1ZSgpOworCisJCQkJZG91YmxlIGRSZXQ7CisJCQkJRlhfQk9PTCBiRG90OworCQkJCWlmIChDSlNfUHVibGljTWV0aG9kczo6Q29udmVydFN0cmluZ1RvTnVtYmVyKHN3VmFsdWUsZFJldCxiRG90KSkKKwkJCQl7CisJCQkJCWlmIChiRG90KQorCQkJCQkJdnAgPDwgZFJldDsKKwkJCQkJZWxzZQorCQkJCQkJdnAgPDwgZFJldDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCQl2cCA8PCBzd1ZhbHVlOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgRklFTERUWVBFX0xJU1RCT1g6CisJCQl7CisJCQkJaWYgKHBGb3JtRmllbGQtPkNvdW50U2VsZWN0ZWRJdGVtcygpID4gMSkKKwkJCQl7CisJCQkJCUNKU19BcnJheSBWYWx1ZUFycmF5KG1faXNvbGF0ZSk7CisJCQkJCUNKU19WYWx1ZSBFbGVtZW50VmFsdWUobV9pc29sYXRlKTsKKwkJCQkJaW50IGlJbmRleDsKKwkJCQkJZm9yIChpbnQgaSA9IDAsIHN6ID0gcEZvcm1GaWVsZC0+Q291bnRTZWxlY3RlZEl0ZW1zKCk7IGkgPCBzejsgaSsrKQorCQkJCQl7CisJCQkJCQlpSW5kZXggPSBwRm9ybUZpZWxkLT5HZXRTZWxlY3RlZEluZGV4KGkpOworCQkJCQkJRWxlbWVudFZhbHVlID0gcEZvcm1GaWVsZC0+R2V0T3B0aW9uVmFsdWUoaUluZGV4KTsKKwkJCQkJCWlmIChGWFNZU193Y3NsZW4oKEZYX0xQQ1dTVFIpRWxlbWVudFZhbHVlLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCkpID09IDApCisJCQkJCQkJRWxlbWVudFZhbHVlID0gcEZvcm1GaWVsZC0+R2V0T3B0aW9uTGFiZWwoaUluZGV4KTsKKwkJCQkJCVZhbHVlQXJyYXkuU2V0RWxlbWVudChpLCBFbGVtZW50VmFsdWUpOworCQkJCQl9CisJCQkJCXZwIDw8IFZhbHVlQXJyYXk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUNGWF9XaWRlU3RyaW5nIHN3VmFsdWUgPSBwRm9ybUZpZWxkLT5HZXRWYWx1ZSgpOworCQkJCQorCQkJCQlkb3VibGUgZFJldDsKKwkJCQkJRlhfQk9PTCBiRG90OworCQkJCQlpZiAoQ0pTX1B1YmxpY01ldGhvZHM6OkNvbnZlcnRTdHJpbmdUb051bWJlcihzd1ZhbHVlLGRSZXQsYkRvdCkpCisJCQkJCXsKKwkJCQkJCWlmIChiRG90KQorCQkJCQkJCXZwIDw8IGRSZXQ7CisJCQkJCQllbHNlCisJCQkJCQkJdnAgPDwgZFJldDsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCQl2cCA8PCBzd1ZhbHVlOwkKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBGSUVMRFRZUEVfQ0hFQ0tCT1g6CisJCWNhc2UgRklFTERUWVBFX1JBRElPQlVUVE9OOgorCQkJeworCQkJCUZYX0JPT0wgYkZpbmQgPSBGQUxTRTsKKwkJCQlmb3IgKGludCBpID0gMCAsIHN6ID0gcEZvcm1GaWVsZC0+Q291bnRDb250cm9scygpOyBpIDwgc3o7IGkrKykKKwkJCQl7CisJCQkJCWlmIChwRm9ybUZpZWxkLT5HZXRDb250cm9sKGkpLT5Jc0NoZWNrZWQoKSkKKwkJCQkJeworCQkJCQkJQ0ZYX1dpZGVTdHJpbmcgc3dWYWx1ZSA9IHBGb3JtRmllbGQtPkdldENvbnRyb2woaSktPkdldEV4cG9ydFZhbHVlKCk7CisJCQkJCQkKKwkJCQkJCWRvdWJsZSBkUmV0OworCQkJCQkJRlhfQk9PTCBiRG90OworCQkJCQkJaWYgKENKU19QdWJsaWNNZXRob2RzOjpDb252ZXJ0U3RyaW5nVG9OdW1iZXIoc3dWYWx1ZSxkUmV0LGJEb3QpKQorCQkJCQkJeworCQkJCQkJCWlmIChiRG90KQorCQkJCQkJCQl2cCA8PCBkUmV0OworCQkJCQkJCWVsc2UKKwkJCQkJCQkJdnAgPDwgZFJldDsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCQl2cCA8PCBzd1ZhbHVlOworCisJCQkJCQliRmluZCA9IFRSVUU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaWYgKCFiRmluZCkKKwkJCQkJdnAgPDwgKEZYX0xQQ1dTVFIpTCJPZmYiOwkJCQkJCisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXZwIDw8IHBGb3JtRmllbGQtPkdldFZhbHVlKCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBUUlVFOworfQorCit2b2lkIEZpZWxkOjpTZXRWYWx1ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jdW1lbnQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzd0ZpZWxkTmFtZSwgCisJCQkJCSBpbnQgbkNvbnRyb2xJbmRleCwgY29uc3QgQ0pTX1dpZGVTdHJpbmdBcnJheSYgc3RyQXJyYXkpCit7CisJQVNTRVJUKHBEb2N1bWVudCAhPSBOVUxMKTsKKworCWlmIChzdHJBcnJheS5HZXRTaXplKCkgPCAxKSByZXR1cm47CisKKwlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwlHZXRGb3JtRmllbGRzKHBEb2N1bWVudCwgc3dGaWVsZE5hbWUsIEZpZWxkQXJyYXkpOworCisJZm9yIChpbnQgaT0wLGlzej1GaWVsZEFycmF5LkdldFNpemUoKTsgaTxpc3o7IGkrKykKKwl7CisJCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdChpKTsKKwkJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwkJaWYgKHBGb3JtRmllbGQtPkdldEZ1bGxOYW1lKCkuQ29tcGFyZShzd0ZpZWxkTmFtZSkgIT0gMCkKKwkJCWNvbnRpbnVlOworCisJCXN3aXRjaCAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkpCisJCXsKKwkJY2FzZSBGSUVMRFRZUEVfVEVYVEZJRUxEOgorCQljYXNlIEZJRUxEVFlQRV9DT01CT0JPWDoKKwkJCWlmIChwRm9ybUZpZWxkLT5HZXRWYWx1ZSgpICE9IHN0ckFycmF5LkdldEF0KDApKQorCQkJeworCQkJCUNGWF9XaWRlU3RyaW5nIFdpZGVTdHJpbmcgPSBzdHJBcnJheS5HZXRBdCgwKTsKKwkJCQlwRm9ybUZpZWxkLT5TZXRWYWx1ZShzdHJBcnJheS5HZXRBdCgwKSwgVFJVRSk7CQorCQkJCVVwZGF0ZUZvcm1GaWVsZChwRG9jdW1lbnQsIHBGb3JtRmllbGQsIFRSVUUsIEZBTFNFLCBUUlVFKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEZJRUxEVFlQRV9DSEVDS0JPWDogLy9tYW50aXM6IDAwMDQ0OTMKKwkJY2FzZSBGSUVMRFRZUEVfUkFESU9CVVRUT046CisJCQl7CisJCQkJaWYgKHBGb3JtRmllbGQtPkdldFZhbHVlKCkgIT0gc3RyQXJyYXkuR2V0QXQoMCkpCisJCQkJeworCQkJCQlwRm9ybUZpZWxkLT5TZXRWYWx1ZShzdHJBcnJheS5HZXRBdCgwKSwgVFJVRSk7CQorCQkJCQlVcGRhdGVGb3JtRmllbGQocERvY3VtZW50LCBwRm9ybUZpZWxkLCBUUlVFLCBGQUxTRSwgVFJVRSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgRklFTERUWVBFX0xJU1RCT1g6CisJCQl7CisJCQkJRlhfQk9PTCBiTW9kaWZpZWQgPSBGQUxTRTsKKworCQkJCWZvciAoaW50IGk9MCxzej1zdHJBcnJheS5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwkJCQl7CisJCQkJCWludCBpSW5kZXggPSBwRm9ybUZpZWxkLT5GaW5kT3B0aW9uKHN0ckFycmF5LkdldEF0KGkpKTsKKworCQkJCQlpZiAoIXBGb3JtRmllbGQtPklzSXRlbVNlbGVjdGVkKGlJbmRleCkpCisJCQkJCXsKKwkJCQkJCWJNb2RpZmllZCA9IFRSVUU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKworCQkJCWlmIChiTW9kaWZpZWQpCisJCQkJeworCQkJCQlwRm9ybUZpZWxkLT5DbGVhclNlbGVjdGlvbihUUlVFKTsKKwkJCQkJZm9yIChpbnQgaT0wLHN6PXN0ckFycmF5LkdldFNpemUoKTsgaTxzejsgaSsrKQorCQkJCQl7CisJCQkJCQlpbnQgaUluZGV4ID0gcEZvcm1GaWVsZC0+RmluZE9wdGlvbihzdHJBcnJheS5HZXRBdChpKSk7CisJCQkJCQlwRm9ybUZpZWxkLT5TZXRJdGVtU2VsZWN0aW9uKGlJbmRleCwgVFJVRSwgVFJVRSk7CisJCQkJCX0KKworCQkJCQlVcGRhdGVGb3JtRmllbGQocERvY3VtZW50LCBwRm9ybUZpZWxkLCBUUlVFLCBGQUxTRSwgVFJVRSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CQkJCQorCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK0ZYX0JPT0wgRmllbGQ6OnZhbHVlQXNTdHJpbmcoT0JKX1BST1BfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCWlmICghdnAuSXNHZXR0aW5nKCkpIHJldHVybiBGQUxTRTsKKworCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7CisJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworICAgCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCWlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSA9PSBGSUVMRFRZUEVfUFVTSEJVVFRPTikKKwkJcmV0dXJuIEZBTFNFOworCisJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpID09IEZJRUxEVFlQRV9DSEVDS0JPWCkKKwl7CisJCWlmKCFwRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCkpIHJldHVybiBGQUxTRTsKKworCQlpZiAocEZvcm1GaWVsZC0+R2V0Q29udHJvbCgwKS0+SXNDaGVja2VkKCkpCisJCQl2cCA8PCAoRlhfTFBDV1NUUilMIlllcyI7CisJCWVsc2UKKwkJCXZwIDw8IChGWF9MUENXU1RSKUwiT2ZmIjsKKwl9CisJZWxzZSBpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgPT0gRklFTERUWVBFX1JBRElPQlVUVE9OICYmICEocEZvcm1GaWVsZC0+R2V0RmllbGRGbGFncygpICYgRklFTERGTEFHX1JBRElPU0lOVU5JU09OKSkKKwl7CisJCWZvciAoaW50IGk9MCwgc3o9cEZvcm1GaWVsZC0+Q291bnRDb250cm9scygpOyBpPHN6OyBpKyspCisJCXsKKwkJCWlmIChwRm9ybUZpZWxkLT5HZXRDb250cm9sKGkpLT5Jc0NoZWNrZWQoKSkKKwkJCXsKKwkJCQl2cCA8PCAoRlhfTFBDV1NUUilwRm9ybUZpZWxkLT5HZXRDb250cm9sKGkpLT5HZXRFeHBvcnRWYWx1ZSgpOworCQkJCWJyZWFrOworCQkJfQorCQkJZWxzZQorCQkJCXZwIDw8IChGWF9MUENXU1RSKUwiT2ZmIjsKKwkJfQorCX0KKwllbHNlIGlmIChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSA9PSBGSUVMRFRZUEVfTElTVEJPWCAmJiAocEZvcm1GaWVsZC0+Q291bnRTZWxlY3RlZEl0ZW1zKCkgPiAxKSkKKwl7CisJCXZwIDw8IChGWF9MUENXU1RSKUwiIjsKKwl9CisJZWxzZQorCQl2cCA8PCAoRlhfTFBDV1NUUilwRm9ybUZpZWxkLT5HZXRWYWx1ZSgpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitGWF9CT09MIEZpZWxkOjpicm93c2VGb3JGaWxlVG9TdWJtaXQoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSwgRmllbGRBcnJheSk7CisJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworIAlDUERGRG9jX0Vudmlyb25tZW50KiBwQXBwID0gbV9wRG9jdW1lbnQtPkdldEVudigpOworIAlBU1NFUlQocEFwcCAhPSBOVUxMKTsKKworCWlmICgocEZvcm1GaWVsZC0+R2V0RmllbGRGbGFncygpICYgRklFTERGTEFHX0ZJTEVTRUxFQ1QpICYmIAorCQkocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgPT0gRklFTERUWVBFX1RFWFRGSUVMRCkpCisJewkJCisJCUNGWF9XaWRlU3RyaW5nIHdzRmlsZU5hbWUgPSBwQXBwLT5KU19maWVsZEJyb3dzZSgpOworCQlpZighd3NGaWxlTmFtZS5Jc0VtcHR5KCkpCisJCXsKKyAJCQlwRm9ybUZpZWxkLT5TZXRWYWx1ZSh3c0ZpbGVOYW1lKTsKKyAJCQlVcGRhdGVGb3JtRmllbGQobV9wRG9jdW1lbnQsIHBGb3JtRmllbGQsIFRSVUUsIFRSVUUsIFRSVUUpOworICAgICAgICAgfQorCX0KKwllbHNlIAorCQlyZXR1cm4gRkFMU0U7CisKKwlyZXR1cm4gVFJVRTsKK30KKworCitGWF9CT09MIEZpZWxkOjpidXR0b25HZXRDYXB0aW9uKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCWludCBuZmFjZSA9IDA7CisJaW50IGlTaXplID0gcGFyYW1zLnNpemUoKTsKKwlpZiAoIGlTaXplID49IDEpCisJCW5mYWNlID0gKEZYX0lOVDMyKSBwYXJhbXNbMF07CisKKwlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOworCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7CisKKwlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7CisJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisJCisJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9QVVNIQlVUVE9OKQorCQlyZXR1cm4gRkFMU0U7CisKKwlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBHZXRTbWFydEZpZWxkQ29udHJvbChwRm9ybUZpZWxkKTsKKwlpZiAoIXBGb3JtQ29udHJvbClyZXR1cm4gRkFMU0U7CisJCisJaWYgKG5mYWNlID09IDApCisJCXZSZXQgPSBwRm9ybUNvbnRyb2wtPkdldE5vcm1hbENhcHRpb24oKTsKKwllbHNlIGlmIChuZmFjZSA9PSAxKQorCQl2UmV0ID0gcEZvcm1Db250cm9sLT5HZXREb3duQ2FwdGlvbigpOworCWVsc2UgaWYgKG5mYWNlID09IDIpCisJCXZSZXQgPSBwRm9ybUNvbnRyb2wtPkdldFJvbGxvdmVyQ2FwdGlvbigpOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8vI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ4MDApCisKK0ZYX0JPT0wgRmllbGQ6OmJ1dHRvbkdldEljb24oT0JKX01FVEhPRF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaW50IG5mYWNlID0gMDsKKwlpbnQgaVNpemUgPSBwYXJhbXMuc2l6ZSgpOworCWlmICggaVNpemUgPj0gMSkKKwkJbmZhY2UgPSAoRlhfSU5UMzIpIHBhcmFtc1swXTsKKwkKKwlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOworCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7CisKKwlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7CisJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisJCisJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9QVVNIQlVUVE9OKQorCQlyZXR1cm4gRkFMU0U7CisKKwlDUERGX0Zvcm1Db250cm9sKiBwRm9ybUNvbnRyb2wgPSBHZXRTbWFydEZpZWxkQ29udHJvbChwRm9ybUZpZWxkKTsKKwlpZiAoIXBGb3JtQ29udHJvbClyZXR1cm4gRkFMU0U7CisKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKworCUNKU19SdW50aW1lKiBwUnVudGltZSA9IHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKTsKKwlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7CisJCisJSlNGWE9iamVjdCBwT2JqID0gSlNfTmV3RnhEeW5hbWljT2JqKCpwUnVudGltZSwgcENvbnRleHQsIEpTX0dldE9iakRlZm5JRCgqcFJ1bnRpbWUsIEwiSWNvbiIpKTsKKwlBU1NFUlQocE9iai5Jc0VtcHR5KCkgPT0gRkFMU0UpOworCQorCUNKU19JY29uKiBwSlNfSWNvbiA9IChDSlNfSWNvbiopSlNfR2V0UHJpdmF0ZShwT2JqKTsKKwlBU1NFUlQocEpTX0ljb24gIT0gTlVMTCk7CisKKwlJY29uKiBwSWNvbiA9IChJY29uKilwSlNfSWNvbi0+R2V0RW1iZWRPYmplY3QoKTsKKwlBU1NFUlQocEljb24gIT0gTlVMTCk7CisKKwlDUERGX1N0cmVhbSogcEljb25TdHJlYW0gPSBOVUxMOworCWlmIChuZmFjZSA9PSAwKQorCQlwSWNvblN0cmVhbSA9IHBGb3JtQ29udHJvbC0+R2V0Tm9ybWFsSWNvbigpOworCWVsc2UgaWYgKG5mYWNlID09IDEpCisJCXBJY29uU3RyZWFtID0gcEZvcm1Db250cm9sLT5HZXREb3duSWNvbigpOworCWVsc2UgaWYgKG5mYWNlID09IDIpCisJCXBJY29uU3RyZWFtID0gcEZvcm1Db250cm9sLT5HZXRSb2xsb3Zlckljb24oKTsKKwllbHNlCisJCXJldHVybiBGQUxTRTsKKworCXBJY29uLT5TZXRTdHJlYW0ocEljb25TdHJlYW0pOworCXZSZXQgPSBwSlNfSWNvbjsKKworCXJldHVybiBUUlVFOworfQorCisvLyNwcmFnbWEgd2FybmluZyhkZWZhdWx0OiA0ODAwKQorCitGWF9CT09MIEZpZWxkOjpidXR0b25JbXBvcnRJY29uKE9CSl9NRVRIT0RfUEFSQU1TKQoreworI2lmIDAgIAorCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7CisJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwlpZiAoIXBGb3JtRmllbGQpcmV0dXJuIEZBTFNFOworCisJQ1BERkRvY19FbnZpcm9ubWVudCogcEVudiA9IG1fcERvY3VtZW50LT5HZXRFbnYoKTsKKwlBU1NFUlQocEVudik7CisKKwlDRlhfV2lkZVN0cmluZyBzSWNvbkZpbGVOYW1lID0gcEVudi0+SlNfZmllbGRCcm93c2UoKTsKKwlpZiAoc0ljb25GaWxlTmFtZS5Jc0VtcHR5KCkpIAorCXsKKwkJdlJldCA9IDE7CisJCXJldHVybiBUUlVFOworCX0KKworCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gKENQREZTREtfSW50ZXJGb3JtKiltX3BEb2N1bWVudC0+R2V0SW50ZXJGb3JtKCk7CisJQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7CisKKwlDUERGX1N0cmVhbSogcFN0cmVhbSA9IHBJbnRlckZvcm0tPkxvYWRJbWFnZUZyb21GaWxlKHNJY29uRmlsZU5hbWUpOworCWlmICghcFN0cmVhbSkgCisJeworCQl2UmV0ID0gLTE7CisJCXJldHVybiBUUlVFOworCX0KKworCUNQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ29udHJvbCA9IEdldFNtYXJ0RmllbGRDb250cm9sKHBGb3JtRmllbGQpOworCWlmICghcEZvcm1Db250cm9sKXJldHVybiBGQUxTRTsKKworCXBGb3JtQ29udHJvbC0+U2V0Tm9ybWFsSWNvbihwU3RyZWFtKTsKKwlVcGRhdGVGb3JtQ29udHJvbChtX3BEb2N1bWVudCwgcEZvcm1Db250cm9sLCBUUlVFLCBUUlVFLCBUUlVFKTsKKworCXZSZXQgPSAwOworI2VuZGlmIC8vIDAKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBGaWVsZDo6YnV0dG9uU2V0Q2FwdGlvbihPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wgRmllbGQ6OmJ1dHRvblNldEljb24oT0JKX01FVEhPRF9QQVJBTVMpCit7CisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIEZpZWxkOjpjaGVja1RoaXNCb3goT0JKX01FVEhPRF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsKKworCWludCBpU2l6ZSA9IHBhcmFtcy5zaXplKCk7CisJaW50IG5XaWRnZXQgPSAtMTsKKwlpZiAoIGlTaXplID49IDEpCisJCW5XaWRnZXQ9IChGWF9JTlQzMikgcGFyYW1zWzBdOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOworCUZYX0JPT0wgYkNoZWNraXQgPSBUUlVFOworCWlmICggaVNpemUgPj0gMikKKwkJYkNoZWNraXQgPSBwYXJhbXNbMV07CisKKworCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7CisJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKwkKKwlpZiAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgIT0gRklFTERUWVBFX0NIRUNLQk9YICYmIHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpICE9IEZJRUxEVFlQRV9SQURJT0JVVFRPTikKKwkJcmV0dXJuIEZBTFNFOwkKKwlpZihuV2lkZ2V0IDwwIHx8IG5XaWRnZXQgPj0gcEZvcm1GaWVsZC0+Q291bnRDb250cm9scygpKQorCQlyZXR1cm4gRkFMU0U7CisJaWYgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpID09IEZJRUxEVFlQRV9SQURJT0JVVFRPTikKKwkJcEZvcm1GaWVsZC0+Q2hlY2tDb250cm9sKG5XaWRnZXQsIGJDaGVja2l0LCBUUlVFKTsKKwllbHNlCisJCXBGb3JtRmllbGQtPkNoZWNrQ29udHJvbChuV2lkZ2V0LCBiQ2hlY2tpdCwgVFJVRSk7CisKKwlVcGRhdGVGb3JtRmllbGQobV9wRG9jdW1lbnQsIHBGb3JtRmllbGQsIFRSVUUsIFRSVUUsIFRSVUUpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgRmllbGQ6OmNsZWFySXRlbXMoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgRmllbGQ6OmRlZmF1bHRJc0NoZWNrZWQoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaWYgKCFtX2JDYW5TZXQpIHJldHVybiBGQUxTRTsKKworCWludCBpU2l6ZSA9IHBhcmFtcy5zaXplKCk7CisJaW50IG5XaWRnZXQgPSAtMTsKKwlpZiAoIGlTaXplID49IDEpCisJCW5XaWRnZXQ9IChGWF9JTlQzMikgcGFyYW1zWzBdOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOworCS8vRlhfQk9PTCBiSXNEZWZhdWx0Q2hlY2tlZCA9IFRSVUU7CisJLy9pZiAoIGlTaXplID49IDIpCisJLy8JYklzRGVmYXVsdENoZWNrZWQgPSAgcGFyYW1zWzFdOworCisJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsKKwlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOworCisJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOworCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCisJaWYobldpZGdldCA8MCB8fCBuV2lkZ2V0ID49IHBGb3JtRmllbGQtPkNvdW50Q29udHJvbHMoKSkKKwl7CisJCXZSZXQgPSBGQUxTRTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKwlpZiAoKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpID09IEZJRUxEVFlQRV9DSEVDS0JPWCkKKwkJfHwgKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpID09IEZJRUxEVFlQRV9SQURJT0JVVFRPTikpCisJeworCisJCXZSZXQgPSBUUlVFOworCX0KKwllbHNlCisJCXZSZXQgPSBGQUxTRTsKKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIEZpZWxkOjpkZWxldGVJdGVtQXQoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJcmV0dXJuIFRSVUU7Cit9CisKK2ludCBKU19DT01QQVJFU1RSSU5HKENGWF9XaWRlU3RyaW5nKiBwczEsIENGWF9XaWRlU3RyaW5nKiBwczIpCit7CisJQVNTRVJUKHBzMSAhPSBOVUxMKTsKKwlBU1NFUlQocHMyICE9IE5VTEwpOworCisJcmV0dXJuIHBzMS0+Q29tcGFyZSgqcHMyKTsKK30KKworCitGWF9CT09MIEZpZWxkOjpnZXRBcnJheShPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlBU1NFUlQobV9wRG9jdW1lbnQgIT0gTlVMTCk7CisKKwlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOworCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7CisKKwlDR1dfQXJyYXlUZW1wbGF0ZTxDRlhfV2lkZVN0cmluZyo+IHN3U29ydDsKKworCWZvciAoaW50IGk9MCxzej1GaWVsZEFycmF5LkdldFNpemUoKTsgaTxzejsgaSsrKQorCXsKKwkJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KGkpOworCQlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCQlzd1NvcnQuQWRkKG5ldyBDRlhfV2lkZVN0cmluZyhwRm9ybUZpZWxkLT5HZXRGdWxsTmFtZSgpKSk7CisJCQorCX0KKwlzd1NvcnQuU29ydChKU19DT01QQVJFU1RSSU5HKTsKKworCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7CisJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCUNKU19SdW50aW1lKiBwUnVudGltZSA9IHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKTsKKwlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7CisKKwlDSlNfQXJyYXkgRm9ybUZpZWxkQXJyYXkobV9pc29sYXRlKTsKKwlmb3IgKGludCBqPTAsanN6ID0gc3dTb3J0LkdldFNpemUoKTsgajxqc3o7IGorKykKKwl7CisJCUNGWF9XaWRlU3RyaW5nKiBwU3RyID0gc3dTb3J0LkdldEF0KGopOworCisJCUpTRlhPYmplY3QgcE9iaiA9IEpTX05ld0Z4RHluYW1pY09iaigqcFJ1bnRpbWUsIHBDb250ZXh0LCBKU19HZXRPYmpEZWZuSUQoKnBSdW50aW1lLCBMIkZpZWxkIikpOworCQlBU1NFUlQocE9iai5Jc0VtcHR5KCkgPT0gRkFMU0UpOworCisJCUNKU19GaWVsZCogcEpTRmllbGQgPSAoQ0pTX0ZpZWxkKilKU19HZXRQcml2YXRlKHBPYmopOworCQlBU1NFUlQocEpTRmllbGQgIT0gTlVMTCk7CisKKwkJRmllbGQqIHBGaWVsZCA9IChGaWVsZCopcEpTRmllbGQtPkdldEVtYmVkT2JqZWN0KCk7IAorCQlBU1NFUlQocEZpZWxkICE9IE5VTEwpOworCisJCXBGaWVsZC0+QXR0YWNoRmllbGQodGhpcy0+bV9wSlNEb2MsICpwU3RyKTsKKwkKKwkJQ0pTX1ZhbHVlIEZvcm1GaWVsZFZhbHVlKG1faXNvbGF0ZSk7CisJCUZvcm1GaWVsZFZhbHVlID0gcEpTRmllbGQ7CisJCUZvcm1GaWVsZEFycmF5LlNldEVsZW1lbnQoaiwgRm9ybUZpZWxkVmFsdWUpOworCisJCWRlbGV0ZSBwU3RyOworCX0KKworCXZSZXQgPSBGb3JtRmllbGRBcnJheTsKKwlzd1NvcnQuUmVtb3ZlQWxsKCk7CisJcmV0dXJuIFRSVUU7Cit9CisJCitGWF9CT09MIEZpZWxkOjpnZXRJdGVtQXQoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaW50IG5JZHggPSAtMTsKKwlpZiAocGFyYW1zLnNpemUoKSA+PTEpCisJCW5JZHggPSAoRlhfSU5UMzIpIHBhcmFtc1swXTsKKwlGWF9CT09MIGJFeHBvcnQgPSBUUlVFOworCWludCBpU2l6ZSA9IHBhcmFtcy5zaXplKCk7CisJaWYgKCBpU2l6ZSA+PSAyKQorCXsKKwkJYkV4cG9ydCA9KEZYX0JPT0wpIHBhcmFtc1sxXTsKKwl9CisKKwlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOworCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7CisKKwlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7CisJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwlpZiAoKHBGb3JtRmllbGQtPkdldEZpZWxkVHlwZSgpID09IEZJRUxEVFlQRV9MSVNUQk9YKQorCQl8fCAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgPT0gRklFTERUWVBFX0NPTUJPQk9YKSkKKwl7CisJCWlmIChuSWR4ID09IC0xIHx8IG5JZHggPiBwRm9ybUZpZWxkLT5Db3VudE9wdGlvbnMoKSkKKwkJCW5JZHggPSBwRm9ybUZpZWxkLT5Db3VudE9wdGlvbnMoKSAtMTsKKwkJaWYgKGJFeHBvcnQpCisJCXsKKwkJCUNGWF9XaWRlU3RyaW5nIHN0cnZhbCA9IHBGb3JtRmllbGQtPkdldE9wdGlvblZhbHVlKG5JZHgpOworCQkJaWYgKHN0cnZhbC5Jc0VtcHR5KCkpCisJCQkJdlJldCA9IHBGb3JtRmllbGQtPkdldE9wdGlvbkxhYmVsKG5JZHgpOworCQkJZWxzZQorCQkJCXZSZXQgPSBzdHJ2YWw7CisJCX0KKwkJZWxzZQorCQkJdlJldCA9IHBGb3JtRmllbGQtPkdldE9wdGlvbkxhYmVsKG5JZHgpOworCX0KKwllbHNlCisJCXJldHVybiBGQUxTRTsKKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIEZpZWxkOjpnZXRMb2NrKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBGaWVsZDo6aW5zZXJ0SXRlbUF0KE9CSl9NRVRIT0RfUEFSQU1TKQoreworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIEZpZWxkOjppc0JveENoZWNrZWQoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJQVNTRVJUKG1fcERvY3VtZW50ICE9IE5VTEwpOworCisJaW50IG5JbmRleCA9IC0xOworCWlmIChwYXJhbXMuc2l6ZSgpID49MSkKKwkJbkluZGV4ID0gKEZYX0lOVDMyKSBwYXJhbXNbMF07CisKKwlDRlhfUHRyQXJyYXkgRmllbGRBcnJheTsKKwlHZXRGb3JtRmllbGRzKG1fRmllbGROYW1lLEZpZWxkQXJyYXkpOworCWlmIChGaWVsZEFycmF5LkdldFNpemUoKSA8PSAwKSByZXR1cm4gRkFMU0U7CisKKwlDUERGX0Zvcm1GaWVsZCogcEZvcm1GaWVsZCA9IChDUERGX0Zvcm1GaWVsZCopRmllbGRBcnJheS5FbGVtZW50QXQoMCk7CisJQVNTRVJUKHBGb3JtRmllbGQgIT0gTlVMTCk7CisKKwlpZihuSW5kZXggPDAgfHwgbkluZGV4ID49IHBGb3JtRmllbGQtPkNvdW50Q29udHJvbHMoKSkKKwl7CisJCXZSZXQgPSBGQUxTRTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCWlmICgocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgPT0gRklFTERUWVBFX0NIRUNLQk9YKQorCQl8fCAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkgPT0gRklFTERUWVBFX1JBRElPQlVUVE9OKSkKKwl7CisJCWlmIChwRm9ybUZpZWxkLT5HZXRDb250cm9sKG5JbmRleCktPklzQ2hlY2tlZCgpICE9MCApCisJCQl2UmV0ID0gVFJVRTsKKwkJZWxzZQorCQkJdlJldCA9IEZBTFNFOworCX0KKwllbHNlCisJCXZSZXQgPSBGQUxTRTsKKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIEZpZWxkOjppc0RlZmF1bHRDaGVja2VkKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCWludCBuSW5kZXggPSAtMTsKKwlpZiAocGFyYW1zLnNpemUoKSA+PTEpCisJCW5JbmRleCA9IChGWF9JTlQzMikgcGFyYW1zWzBdOworCisJQ0ZYX1B0ckFycmF5IEZpZWxkQXJyYXk7CisJR2V0Rm9ybUZpZWxkcyhtX0ZpZWxkTmFtZSxGaWVsZEFycmF5KTsKKwlpZiAoRmllbGRBcnJheS5HZXRTaXplKCkgPD0gMCkgcmV0dXJuIEZBTFNFOworCisJQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSAoQ1BERl9Gb3JtRmllbGQqKUZpZWxkQXJyYXkuRWxlbWVudEF0KDApOworCUFTU0VSVChwRm9ybUZpZWxkICE9IE5VTEwpOworCisJaWYobkluZGV4IDwwIHx8IG5JbmRleCA+PSBwRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCkpCisJeworCQl2UmV0ID0gRkFMU0U7CisJCXJldHVybiBGQUxTRTsKKwl9CisJaWYgKChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSA9PSBGSUVMRFRZUEVfQ0hFQ0tCT1gpCisJCXx8IChwRm9ybUZpZWxkLT5HZXRGaWVsZFR5cGUoKSA9PSBGSUVMRFRZUEVfUkFESU9CVVRUT04pKQorCXsKKwkJaWYgKHBGb3JtRmllbGQtPkdldENvbnRyb2wobkluZGV4KS0+SXNEZWZhdWx0Q2hlY2tlZCgpICE9IDApCisJCQl2UmV0ID0gVFJVRTsKKwkJZWxzZQorCQkJdlJldCA9IEZBTFNFOworCX0KKwllbHNlCisJCXZSZXQgPSBGQUxTRTsKKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIEZpZWxkOjpzZXRBY3Rpb24oT0JKX01FVEhPRF9QQVJBTVMpCit7CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgRmllbGQ6OnNldEZvY3VzKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCUFTU0VSVChtX3BEb2N1bWVudCAhPSBOVUxMKTsKKworCUNGWF9QdHJBcnJheSBGaWVsZEFycmF5OworCUdldEZvcm1GaWVsZHMobV9GaWVsZE5hbWUsRmllbGRBcnJheSk7CisJaWYgKEZpZWxkQXJyYXkuR2V0U2l6ZSgpIDw9IDApIHJldHVybiBGQUxTRTsKKworCUNQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gKENQREZfRm9ybUZpZWxkKilGaWVsZEFycmF5LkVsZW1lbnRBdCgwKTsKKwlBU1NFUlQocEZvcm1GaWVsZCAhPSBOVUxMKTsKKworCUZYX0lOVDMyIG5Db3VudCA9IHBGb3JtRmllbGQtPkNvdW50Q29udHJvbHMoKTsKKworCWlmIChuQ291bnQgPCAxKSByZXR1cm4gRkFMU0U7CisKKwlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopbV9wRG9jdW1lbnQtPkdldEludGVyRm9ybSgpOworCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOworCisJQ1BERlNES19XaWRnZXQqIHBXaWRnZXQgPSBOVUxMOworCWlmIChuQ291bnQgPT0gMSkKKwl7CQorCQlwV2lkZ2V0ID0gcEludGVyRm9ybS0+R2V0V2lkZ2V0KHBGb3JtRmllbGQtPkdldENvbnRyb2woMCkpOworCX0KKwllbHNlCisJeworCQlDUERGRG9jX0Vudmlyb25tZW50KiBwRW52ID0gbV9wRG9jdW1lbnQtPkdldEVudigpOworCQlBU1NFUlQocEVudik7CisJCUNQREZfUGFnZSogcFBhZ2UgPSAoQ1BERl9QYWdlKilwRW52LT5GRklfR2V0Q3VycmVudFBhZ2UobV9wRG9jdW1lbnQtPkdldERvY3VtZW50KCkpOworCQlpZighcFBhZ2UpCisJCQlyZXR1cm4gRkFMU0U7CisJCWlmIChDUERGU0RLX1BhZ2VWaWV3KiBwQ3VyUGFnZVZpZXcgPSBtX3BEb2N1bWVudC0+R2V0UGFnZVZpZXcocFBhZ2UpKQorCQl7CisJCQlmb3IgKEZYX0lOVDMyIGk9MDsgaTxuQ291bnQ7IGkrKykKKwkJCXsKKwkJCQlpZiAoQ1BERlNES19XaWRnZXQqIHBUZW1wV2lkZ2V0ID0gIHBJbnRlckZvcm0tPkdldFdpZGdldChwRm9ybUZpZWxkLT5HZXRDb250cm9sKGkpKSkKKwkJCQl7CQkJCQorCQkJCQlpZiAocFRlbXBXaWRnZXQtPkdldFBERlBhZ2UoKSA9PSBwQ3VyUGFnZVZpZXctPkdldFBERlBhZ2UoKSkKKwkJCQkJeworCQkJCQkJcFdpZGdldCA9IHBUZW1wV2lkZ2V0OworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZiAocFdpZGdldCkKKwl7CisJCW1fcERvY3VtZW50LT5TZXRGb2N1c0Fubm90KHBXaWRnZXQpOworCX0KKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIEZpZWxkOjpzZXRJdGVtcyhPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBGaWVsZDo6c2V0TG9jayhPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wgRmllbGQ6OnNpZ25hdHVyZUdldE1vZGlmaWNhdGlvbnMoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIEZpZWxkOjpzaWduYXR1cmVHZXRTZWVkVmFsdWUoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIEZpZWxkOjpzaWduYXR1cmVJbmZvKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBGaWVsZDo6c2lnbmF0dXJlU2V0U2VlZFZhbHVlKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBGaWVsZDo6c2lnbmF0dXJlU2lnbihPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wgRmllbGQ6OnNpZ25hdHVyZVZhbGlkYXRlKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBGaWVsZDo6c291cmNlKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlpZiAodnAuSXNHZXR0aW5nKCkpCisJeworCQl2cCA8PCAoQ0pTX09iamVjdCopTlVMTDsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyBkZWxheSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordm9pZCBGaWVsZDo6QWRkRGVsYXlfSW50KGVudW0gRklFTERfUFJPUCBwcm9wLCBGWF9JTlQzMiBuKQoreworCUFTU0VSVChtX3BKU0RvYyAhPSBOVUxMKTsKKworCUNKU19EZWxheURhdGEqIHBOZXdEYXRhID0gbmV3IENKU19EZWxheURhdGE7CisJcE5ld0RhdGEtPnNGaWVsZE5hbWUgPSBtX0ZpZWxkTmFtZTsKKwlwTmV3RGF0YS0+bkNvbnRyb2xJbmRleCA9IG1fbkZvcm1Db250cm9sSW5kZXg7CisJcE5ld0RhdGEtPmVQcm9wID0gcHJvcDsKKwlwTmV3RGF0YS0+bnVtID0gbjsKKworCW1fcEpTRG9jLT5BZGREZWxheURhdGEocE5ld0RhdGEpOworfQorCit2b2lkIEZpZWxkOjpBZGREZWxheV9Cb29sKGVudW0gRklFTERfUFJPUCBwcm9wLGJvb2wgYikKK3sKKwlBU1NFUlQobV9wSlNEb2MgIT0gTlVMTCk7CisKKwlDSlNfRGVsYXlEYXRhKiBwTmV3RGF0YSA9IG5ldyBDSlNfRGVsYXlEYXRhOworCXBOZXdEYXRhLT5zRmllbGROYW1lID0gbV9GaWVsZE5hbWU7CisJcE5ld0RhdGEtPm5Db250cm9sSW5kZXggPSBtX25Gb3JtQ29udHJvbEluZGV4OworCXBOZXdEYXRhLT5lUHJvcCA9IHByb3A7CisJcE5ld0RhdGEtPmIgPSBiOworCisJbV9wSlNEb2MtPkFkZERlbGF5RGF0YShwTmV3RGF0YSk7Cit9CisKK3ZvaWQgRmllbGQ6OkFkZERlbGF5X1N0cmluZyhlbnVtIEZJRUxEX1BST1AgcHJvcCwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHN0cmluZykKK3sKKwlBU1NFUlQobV9wSlNEb2MgIT0gTlVMTCk7CisKKwlDSlNfRGVsYXlEYXRhKiBwTmV3RGF0YSA9IG5ldyBDSlNfRGVsYXlEYXRhOworCXBOZXdEYXRhLT5zRmllbGROYW1lID0gbV9GaWVsZE5hbWU7CisJcE5ld0RhdGEtPm5Db250cm9sSW5kZXggPSBtX25Gb3JtQ29udHJvbEluZGV4OworCXBOZXdEYXRhLT5lUHJvcCA9IHByb3A7CisJcE5ld0RhdGEtPnN0cmluZyA9IHN0cmluZzsKKworCW1fcEpTRG9jLT5BZGREZWxheURhdGEocE5ld0RhdGEpOworfQorCit2b2lkIEZpZWxkOjpBZGREZWxheV9XaWRlU3RyaW5nKGVudW0gRklFTERfUFJPUCBwcm9wLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyaW5nKQoreworCUFTU0VSVChtX3BKU0RvYyAhPSBOVUxMKTsKKworCUNKU19EZWxheURhdGEqIHBOZXdEYXRhID0gbmV3IENKU19EZWxheURhdGE7CisJcE5ld0RhdGEtPnNGaWVsZE5hbWUgPSBtX0ZpZWxkTmFtZTsKKwlwTmV3RGF0YS0+bkNvbnRyb2xJbmRleCA9IG1fbkZvcm1Db250cm9sSW5kZXg7CisJcE5ld0RhdGEtPmVQcm9wID0gcHJvcDsKKwlwTmV3RGF0YS0+d2lkZXN0cmluZyA9IHN0cmluZzsKKworCW1fcEpTRG9jLT5BZGREZWxheURhdGEocE5ld0RhdGEpOworfQorCit2b2lkIEZpZWxkOjpBZGREZWxheV9SZWN0KGVudW0gRklFTERfUFJPUCBwcm9wLCBjb25zdCBDUERGX1JlY3QmIHJlY3QpCit7CisJQVNTRVJUKG1fcEpTRG9jICE9IE5VTEwpOworCisJQ0pTX0RlbGF5RGF0YSogcE5ld0RhdGEgPSBuZXcgQ0pTX0RlbGF5RGF0YTsKKwlwTmV3RGF0YS0+c0ZpZWxkTmFtZSA9IG1fRmllbGROYW1lOworCXBOZXdEYXRhLT5uQ29udHJvbEluZGV4ID0gbV9uRm9ybUNvbnRyb2xJbmRleDsKKwlwTmV3RGF0YS0+ZVByb3AgPSBwcm9wOworCXBOZXdEYXRhLT5yZWN0ID0gcmVjdDsKKworCW1fcEpTRG9jLT5BZGREZWxheURhdGEocE5ld0RhdGEpOworfQorCit2b2lkIEZpZWxkOjpBZGREZWxheV9Db2xvcihlbnVtIEZJRUxEX1BST1AgcHJvcCwgY29uc3QgQ1BXTF9Db2xvciYgY29sb3IpCit7CisJQVNTRVJUKG1fcEpTRG9jICE9IE5VTEwpOworCisJQ0pTX0RlbGF5RGF0YSogcE5ld0RhdGEgPSBuZXcgQ0pTX0RlbGF5RGF0YTsKKwlwTmV3RGF0YS0+c0ZpZWxkTmFtZSA9IG1fRmllbGROYW1lOworCXBOZXdEYXRhLT5uQ29udHJvbEluZGV4ID0gbV9uRm9ybUNvbnRyb2xJbmRleDsKKwlwTmV3RGF0YS0+ZVByb3AgPSBwcm9wOworCXBOZXdEYXRhLT5jb2xvciA9IGNvbG9yOworCisJbV9wSlNEb2MtPkFkZERlbGF5RGF0YShwTmV3RGF0YSk7Cit9CisKK3ZvaWQgRmllbGQ6OkFkZERlbGF5X1dvcmRBcnJheShlbnVtIEZJRUxEX1BST1AgcHJvcCwgY29uc3QgQ0ZYX0RXb3JkQXJyYXkmIGFycmF5KQoreworCUFTU0VSVChtX3BKU0RvYyAhPSBOVUxMKTsKKworCUNKU19EZWxheURhdGEqIHBOZXdEYXRhID0gbmV3IENKU19EZWxheURhdGE7CisJcE5ld0RhdGEtPnNGaWVsZE5hbWUgPSBtX0ZpZWxkTmFtZTsKKwlwTmV3RGF0YS0+bkNvbnRyb2xJbmRleCA9IG1fbkZvcm1Db250cm9sSW5kZXg7CisJcE5ld0RhdGEtPmVQcm9wID0gcHJvcDsKKworCWZvciAoaW50IGk9MCxzej1hcnJheS5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwkJcE5ld0RhdGEtPndvcmRhcnJheS5BZGQoYXJyYXkuR2V0QXQoaSkpOworCisJbV9wSlNEb2MtPkFkZERlbGF5RGF0YShwTmV3RGF0YSk7Cit9CisKK3ZvaWQgRmllbGQ6OkFkZERlbGF5X1dpZGVTdHJpbmdBcnJheShlbnVtIEZJRUxEX1BST1AgcHJvcCwgY29uc3QgQ0pTX1dpZGVTdHJpbmdBcnJheSYgYXJyYXkpCit7CisJQVNTRVJUKG1fcEpTRG9jICE9IE5VTEwpOworCisJQ0pTX0RlbGF5RGF0YSogcE5ld0RhdGEgPSBuZXcgQ0pTX0RlbGF5RGF0YTsKKwlwTmV3RGF0YS0+c0ZpZWxkTmFtZSA9IG1fRmllbGROYW1lOworCXBOZXdEYXRhLT5uQ29udHJvbEluZGV4ID0gbV9uRm9ybUNvbnRyb2xJbmRleDsKKwlwTmV3RGF0YS0+ZVByb3AgPSBwcm9wOworCWZvciAoaW50IGk9MCxzej1hcnJheS5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwkJcE5ld0RhdGEtPndpZGVzdHJpbmdhcnJheS5BZGQoYXJyYXkuR2V0QXQoaSkpOworCisJbV9wSlNEb2MtPkFkZERlbGF5RGF0YShwTmV3RGF0YSk7Cit9CisKK3ZvaWQgRmllbGQ6OkRvRGVsYXkoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBDSlNfRGVsYXlEYXRhKiBwRGF0YSkKK3sKKwlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOworCUFTU0VSVChwRGF0YSAhPSBOVUxMKTsKKworCXN3aXRjaCAocERhdGEtPmVQcm9wKQorCXsKKwljYXNlIEZQX0FMSUdOTUVOVDoKKwkJRmllbGQ6OlNldEFsaWdubWVudChwRG9jdW1lbnQsIHBEYXRhLT5zRmllbGROYW1lLCBwRGF0YS0+bkNvbnRyb2xJbmRleCwgcERhdGEtPnN0cmluZyk7CisJCWJyZWFrOworCWNhc2UgRlBfQk9SREVSU1RZTEU6CisJCUZpZWxkOjpTZXRCb3JkZXJTdHlsZShwRG9jdW1lbnQsIHBEYXRhLT5zRmllbGROYW1lLCBwRGF0YS0+bkNvbnRyb2xJbmRleCwgcERhdGEtPnN0cmluZyk7CisJCWJyZWFrOworCWNhc2UgRlBfQlVUVE9OQUxJR05YOgorCQlGaWVsZDo6U2V0QnV0dG9uQWxpZ25YKHBEb2N1bWVudCwgcERhdGEtPnNGaWVsZE5hbWUsIHBEYXRhLT5uQ29udHJvbEluZGV4LCBwRGF0YS0+bnVtKTsKKwkJYnJlYWs7CisJY2FzZSBGUF9CVVRUT05BTElHTlk6CisJCUZpZWxkOjpTZXRCdXR0b25BbGlnblkocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5udW0pOworCQlicmVhazsKKwljYXNlIEZQX0JVVFRPTkZJVEJPVU5EUzoKKwkJRmllbGQ6OlNldEJ1dHRvbkZpdEJvdW5kcyhwRG9jdW1lbnQsIHBEYXRhLT5zRmllbGROYW1lLCBwRGF0YS0+bkNvbnRyb2xJbmRleCwgcERhdGEtPmIpOworCQlicmVhazsKKwljYXNlIEZQX0JVVFRPTlBPU0lUSU9OOgorCQlGaWVsZDo6U2V0QnV0dG9uUG9zaXRpb24ocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5udW0pOworCQlicmVhazsKKwljYXNlIEZQX0JVVFRPTlNDQUxFSE9XOgorCQlGaWVsZDo6U2V0QnV0dG9uU2NhbGVIb3cocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5udW0pOworCQlicmVhazsKKwljYXNlIEZQX0JVVFRPTlNDQUxFV0hFTjoKKwkJRmllbGQ6OlNldEJ1dHRvblNjYWxlV2hlbihwRG9jdW1lbnQsIHBEYXRhLT5zRmllbGROYW1lLCBwRGF0YS0+bkNvbnRyb2xJbmRleCwgcERhdGEtPm51bSk7CisJCWJyZWFrOworCWNhc2UgRlBfQ0FMQ09SREVSSU5ERVg6CisJCUZpZWxkOjpTZXRDYWxjT3JkZXJJbmRleChwRG9jdW1lbnQsIHBEYXRhLT5zRmllbGROYW1lLCBwRGF0YS0+bkNvbnRyb2xJbmRleCwgcERhdGEtPm51bSk7CisJCWJyZWFrOworCWNhc2UgRlBfQ0hBUkxJTUlUOgorCQlGaWVsZDo6U2V0Q2hhckxpbWl0KHBEb2N1bWVudCwgcERhdGEtPnNGaWVsZE5hbWUsIHBEYXRhLT5uQ29udHJvbEluZGV4LCBwRGF0YS0+bnVtKTsKKwkJYnJlYWs7CisJY2FzZSBGUF9DT01COgorCQlGaWVsZDo6U2V0Q29tYihwRG9jdW1lbnQsIHBEYXRhLT5zRmllbGROYW1lLCBwRGF0YS0+bkNvbnRyb2xJbmRleCwgcERhdGEtPmIpOworCQlicmVhazsKKwljYXNlIEZQX0NPTU1JVE9OU0VMQ0hBTkdFOgorCQlGaWVsZDo6U2V0Q29tbWl0T25TZWxDaGFuZ2UocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5iKTsKKwkJYnJlYWs7CisJY2FzZSBGUF9DVVJSRU5UVkFMVUVJTkRJQ0VTOgorCQlGaWVsZDo6U2V0Q3VycmVudFZhbHVlSW5kaWNlcyhwRG9jdW1lbnQsIHBEYXRhLT5zRmllbGROYW1lLCBwRGF0YS0+bkNvbnRyb2xJbmRleCwgcERhdGEtPndvcmRhcnJheSk7CisJCWJyZWFrOworCWNhc2UgRlBfREVGQVVMVFZBTFVFOgorCQlGaWVsZDo6U2V0RGVmYXVsdFZhbHVlKHBEb2N1bWVudCwgcERhdGEtPnNGaWVsZE5hbWUsIHBEYXRhLT5uQ29udHJvbEluZGV4LCBwRGF0YS0+d2lkZXN0cmluZyk7CisJCWJyZWFrOworCWNhc2UgRlBfRE9OT1RTQ1JPTEw6CisJCUZpZWxkOjpTZXREb05vdFNjcm9sbChwRG9jdW1lbnQsIHBEYXRhLT5zRmllbGROYW1lLCBwRGF0YS0+bkNvbnRyb2xJbmRleCwgcERhdGEtPmIpOworCQlicmVhazsKKwljYXNlIEZQX0RJU1BMQVk6CisJCUZpZWxkOjpTZXREaXNwbGF5KHBEb2N1bWVudCwgcERhdGEtPnNGaWVsZE5hbWUsIHBEYXRhLT5uQ29udHJvbEluZGV4LCBwRGF0YS0+bnVtKTsKKwkJYnJlYWs7CisJY2FzZSBGUF9GSUxMQ09MT1I6CisJCUZpZWxkOjpTZXRGaWxsQ29sb3IocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5jb2xvcik7CisJCWJyZWFrOworCWNhc2UgRlBfSElEREVOOgorCQlGaWVsZDo6U2V0SGlkZGVuKHBEb2N1bWVudCwgcERhdGEtPnNGaWVsZE5hbWUsIHBEYXRhLT5uQ29udHJvbEluZGV4LCBwRGF0YS0+Yik7CisJCWJyZWFrOworCWNhc2UgRlBfSElHSExJR0hUOgorCQlGaWVsZDo6U2V0SGlnaGxpZ2h0KHBEb2N1bWVudCwgcERhdGEtPnNGaWVsZE5hbWUsIHBEYXRhLT5uQ29udHJvbEluZGV4LCBwRGF0YS0+c3RyaW5nKTsKKwkJYnJlYWs7CisJY2FzZSBGUF9MSU5FV0lEVEg6CisJCUZpZWxkOjpTZXRMaW5lV2lkdGgocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5udW0pOworCQlicmVhazsKKwljYXNlIEZQX01VTFRJTElORToKKwkJRmllbGQ6OlNldE11bHRpbGluZShwRG9jdW1lbnQsIHBEYXRhLT5zRmllbGROYW1lLCBwRGF0YS0+bkNvbnRyb2xJbmRleCwgcERhdGEtPmIpOworCQlicmVhazsKKwljYXNlIEZQX01VTFRJUExFU0VMRUNUSU9OOgorCQlGaWVsZDo6U2V0TXVsdGlwbGVTZWxlY3Rpb24ocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5iKTsKKwkJYnJlYWs7CisJY2FzZSBGUF9QQVNTV09SRDoKKwkJRmllbGQ6OlNldFBhc3N3b3JkKHBEb2N1bWVudCwgcERhdGEtPnNGaWVsZE5hbWUsIHBEYXRhLT5uQ29udHJvbEluZGV4LCBwRGF0YS0+Yik7CisJCWJyZWFrOworCWNhc2UgRlBfUkVDVDoKKwkJRmllbGQ6OlNldFJlY3QocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5yZWN0KTsKKwkJYnJlYWs7CisJY2FzZSBGUF9SSUNIVEVYVDoKKwkJRmllbGQ6OlNldFJpY2hUZXh0KHBEb2N1bWVudCwgcERhdGEtPnNGaWVsZE5hbWUsIHBEYXRhLT5uQ29udHJvbEluZGV4LCBwRGF0YS0+Yik7CisJCWJyZWFrOworCWNhc2UgRlBfUklDSFZBTFVFOgorCQlicmVhazsKKwljYXNlIEZQX1JPVEFUSU9OOgorCQlGaWVsZDo6U2V0Um90YXRpb24ocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5udW0pOworCQlicmVhazsKKwljYXNlIEZQX1NUUk9LRUNPTE9SOgorCQlGaWVsZDo6U2V0U3Ryb2tlQ29sb3IocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5jb2xvcik7CisJCWJyZWFrOworCWNhc2UgRlBfU1RZTEU6CisJCUZpZWxkOjpTZXRTdHlsZShwRG9jdW1lbnQsIHBEYXRhLT5zRmllbGROYW1lLCBwRGF0YS0+bkNvbnRyb2xJbmRleCwgcERhdGEtPnN0cmluZyk7CisJCWJyZWFrOworCWNhc2UgRlBfVEVYVENPTE9SOgorCQlGaWVsZDo6U2V0VGV4dENvbG9yKHBEb2N1bWVudCwgcERhdGEtPnNGaWVsZE5hbWUsIHBEYXRhLT5uQ29udHJvbEluZGV4LCBwRGF0YS0+Y29sb3IpOworCQlicmVhazsKKwljYXNlIEZQX1RFWFRGT05UOgorCQlGaWVsZDo6U2V0VGV4dEZvbnQocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5zdHJpbmcpOworCQlicmVhazsKKwljYXNlIEZQX1RFWFRTSVpFOgorCQlGaWVsZDo6U2V0VGV4dFNpemUocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT5udW0pOworCQlicmVhazsKKwljYXNlIEZQX1VTRVJOQU1FOgorCQlGaWVsZDo6U2V0VXNlck5hbWUocERvY3VtZW50LCBwRGF0YS0+c0ZpZWxkTmFtZSwgcERhdGEtPm5Db250cm9sSW5kZXgsIHBEYXRhLT53aWRlc3RyaW5nKTsKKwkJYnJlYWs7CisJY2FzZSBGUF9WQUxVRToKKwkJRmllbGQ6OlNldFZhbHVlKHBEb2N1bWVudCwgcERhdGEtPnNGaWVsZE5hbWUsIHBEYXRhLT5uQ29udHJvbEluZGV4LCBwRGF0YS0+d2lkZXN0cmluZ2FycmF5KTsKKwkJYnJlYWs7CisJfQorfQorCisjZGVmaW5lIEpTX0ZJRUxEX01JTldJRFRICTEKKyNkZWZpbmUgSlNfRklFTERfTUlOSEVJR0hUCTEKKwordm9pZCBGaWVsZDo6QWRkRmllbGQoQ1BERlNES19Eb2N1bWVudCogcERvY3VtZW50LCBpbnQgblBhZ2VJbmRleCwgaW50IG5GaWVsZFR5cGUsCisJCQkJCQkJY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNOYW1lLCBjb25zdCBDUERGX1JlY3QmIHJjQ29vcmRzKQoreworCS8vTm90IHN1cHBvcnRlZC4KK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9JY29uLmNwcCBiL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvSWNvbi5jcHAKaW5kZXggNDE4ZmNkNS4uMjg2OTgwYyAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9JY29uLmNwcAorKysgYi9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L0ljb24uY3BwCkBAIC0xLDY3ICsxLDY3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0phdmFTY3JpcHQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0lKYXZhU2NyaXB0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19EZWZpbmUuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX09iamVjdC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfVmFsdWUuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0ljb24uaCINCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEljb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfSWNvbikNCi1FTkRfSlNfU1RBVElDX0NPTlNUKCkNCi0NCi1CRUdJTl9KU19TVEFUSUNfUFJPUChDSlNfSWNvbikNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkobmFtZSkNCi1FTkRfSlNfU1RBVElDX1BST1AoKQ0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19NRVRIT0QoQ0pTX0ljb24pIA0KLUVORF9KU19TVEFUSUNfTUVUSE9EKCkNCi0NCi1JTVBMRU1FTlRfSlNfQ0xBU1MoQ0pTX0ljb24sSWNvbikNCi0NCi1JY29uOjpJY29uKENKU19PYmplY3QqIHBKU09iamVjdCkgOiBDSlNfRW1iZWRPYmoocEpTT2JqZWN0KSwNCi0JbV9wSWNvblN0cmVhbShOVUxMKSwNCi0JbV9zd0ljb25OYW1lKEwiIikNCi17DQotfQ0KLQ0KLUljb246On5JY29uKCkNCi17DQotDQotfQ0KLQ0KLXZvaWQgSWNvbjo6U2V0U3RyZWFtKENQREZfU3RyZWFtKiBwSWNvblN0cmVhbSkNCi17DQotCWlmKHBJY29uU3RyZWFtKQ0KLQkJbV9wSWNvblN0cmVhbSA9IHBJY29uU3RyZWFtOw0KLX0NCi0NCi1DUERGX1N0cmVhbSogSWNvbjo6R2V0U3RyZWFtKCkNCi17DQotCXJldHVybiBtX3BJY29uU3RyZWFtOw0KLX0NCi0NCi12b2lkIEljb246OlNldEljb25OYW1lKENGWF9XaWRlU3RyaW5nIG5hbWUpDQotew0KLQltX3N3SWNvbk5hbWUgPSBuYW1lOw0KLX0NCi0NCi1DRlhfV2lkZVN0cmluZyBJY29uOjpHZXRJY29uTmFtZSgpDQotew0KLQlyZXR1cm4gbV9zd0ljb25OYW1lOw0KLX0NCi0NCi1GWF9CT09MIEljb246Om5hbWUoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JaWYoIXZwLklzR2V0dGluZygpKXJldHVybiBGQUxTRTsNCi0NCi0JdnAgPDwgbV9zd0ljb25OYW1lOw0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KYXZhU2NyaXB0LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0lKYXZhU2NyaXB0LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0RlZmluZS5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19PYmplY3QuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfVmFsdWUuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSWNvbi5oIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEljb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitCRUdJTl9KU19TVEFUSUNfQ09OU1QoQ0pTX0ljb24pCitFTkRfSlNfU1RBVElDX0NPTlNUKCkKKworQkVHSU5fSlNfU1RBVElDX1BST1AoQ0pTX0ljb24pCisJSlNfU1RBVElDX1BST1BfRU5UUlkobmFtZSkKK0VORF9KU19TVEFUSUNfUFJPUCgpCisKK0JFR0lOX0pTX1NUQVRJQ19NRVRIT0QoQ0pTX0ljb24pIAorRU5EX0pTX1NUQVRJQ19NRVRIT0QoKQorCitJTVBMRU1FTlRfSlNfQ0xBU1MoQ0pTX0ljb24sSWNvbikKKworSWNvbjo6SWNvbihDSlNfT2JqZWN0KiBwSlNPYmplY3QpIDogQ0pTX0VtYmVkT2JqKHBKU09iamVjdCksCisJbV9wSWNvblN0cmVhbShOVUxMKSwKKwltX3N3SWNvbk5hbWUoTCIiKQoreworfQorCitJY29uOjp+SWNvbigpCit7CisKK30KKwordm9pZCBJY29uOjpTZXRTdHJlYW0oQ1BERl9TdHJlYW0qIHBJY29uU3RyZWFtKQoreworCWlmKHBJY29uU3RyZWFtKQorCQltX3BJY29uU3RyZWFtID0gcEljb25TdHJlYW07Cit9CisKK0NQREZfU3RyZWFtKiBJY29uOjpHZXRTdHJlYW0oKQoreworCXJldHVybiBtX3BJY29uU3RyZWFtOworfQorCit2b2lkIEljb246OlNldEljb25OYW1lKENGWF9XaWRlU3RyaW5nIG5hbWUpCit7CisJbV9zd0ljb25OYW1lID0gbmFtZTsKK30KKworQ0ZYX1dpZGVTdHJpbmcgSWNvbjo6R2V0SWNvbk5hbWUoKQoreworCXJldHVybiBtX3N3SWNvbk5hbWU7Cit9CisKK0ZYX0JPT0wgSWNvbjo6bmFtZShPQkpfUFJPUF9QQVJBTVMpCit7CisJaWYoIXZwLklzR2V0dGluZygpKXJldHVybiBGQUxTRTsKKworCXZwIDw8IG1fc3dJY29uTmFtZTsKKwlyZXR1cm4gVFJVRTsKK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9KU19Db250ZXh0LmNwcCBiL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvSlNfQ29udGV4dC5jcHAKaW5kZXggYzBkNGUwOC4uZTM0ZmZiNSAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9KU19Db250ZXh0LmNwcAorKysgYi9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L0pTX0NvbnRleHQuY3BwCkBAIC0xLDM2NCArMSwzNjQgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSmF2YVNjcmlwdC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSUphdmFTY3JpcHQuaCINCi0vLyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfUmVzTWdyLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19Db250ZXh0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19FdmVudEhhbmRsZXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1J1bnRpbWUuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L3Jlc291cmNlLmgiDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0pTX0NvbnRleHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DSlNfQ29udGV4dDo6Q0pTX0NvbnRleHQoQ0pTX1J1bnRpbWUqIHBSdW50aW1lKSA6IAkNCi0JbV9wUnVudGltZShwUnVudGltZSksDQotCW1fYkJ1c3koRkFMU0UpLA0KLQltX2JNc2dCb3hFbmFibGUoVFJVRSkNCi17DQotCW1fcEV2ZW50SGFuZGxlciA9IG5ldyBDSlNfRXZlbnRIYW5kbGVyKHRoaXMpOw0KLX0NCi0NCi1DSlNfQ29udGV4dDo6fkNKU19Db250ZXh0KHZvaWQpDQotew0KLQlpZiAobV9wRXZlbnRIYW5kbGVyKQ0KLQl7DQotCQlkZWxldGUgbV9wRXZlbnRIYW5kbGVyOw0KLQkJbV9wRXZlbnRIYW5kbGVyID0gTlVMTDsNCi0JfQ0KLX0NCi0NCi1DUERGU0RLX0RvY3VtZW50KiBDSlNfQ29udGV4dDo6R2V0UmVhZGVyRG9jdW1lbnQoKQ0KLXsNCi0JQVNTRVJUKG1fcFJ1bnRpbWUgIT0gTlVMTCk7DQotDQotCXJldHVybiBtX3BSdW50aW1lLT5HZXRSZWFkZXJEb2N1bWVudCgpOw0KLX0NCi0NCi1DUERGRG9jX0Vudmlyb25tZW50KiBDSlNfQ29udGV4dDo6R2V0UmVhZGVyQXBwKCkNCi17DQotCUFTU0VSVChtX3BSdW50aW1lICE9IE5VTEwpOw0KLQkNCi0JcmV0dXJuIG1fcFJ1bnRpbWUtPkdldFJlYWRlckFwcCgpOw0KLX0NCi0NCi1GWF9CT09MIENKU19Db250ZXh0OjpEb0pvYihpbnQgbk1vZGUsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzY3JpcHQsIENGWF9XaWRlU3RyaW5nJiBpbmZvKQ0KLXsNCi0JaWYgKG1fYkJ1c3kpDQotCXsJCQ0KLQkJaW5mbyA9IEpTR2V0U3RyaW5nRnJvbUlEKHRoaXMsIElEU19TVFJJTkdfSlNCVVNZKTsNCi0JCXJldHVybiBGQUxTRTsNCi0JfQkNCi0NCi0JbV9iQnVzeSA9IFRSVUU7DQotDQotCUFTU0VSVChtX3BSdW50aW1lICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wRXZlbnRIYW5kbGVyLT5Jc1ZhbGlkKCkpOw0KLQ0KLQlpZiAoIW1fcFJ1bnRpbWUtPkFkZEV2ZW50VG9Mb29wKG1fcEV2ZW50SGFuZGxlci0+VGFyZ2V0TmFtZSgpLCBtX3BFdmVudEhhbmRsZXItPkV2ZW50VHlwZSgpKSkNCi0Jew0KLQkJaW5mbyA9IEpTR2V0U3RyaW5nRnJvbUlEKHRoaXMsIElEU19TVFJJTkdfSlNFVkVOVCk7DQotCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0NCi0JRlhKU0VyciBlcnJvciA9e05VTEwsTlVMTCwgMH07DQotCWludCBuUmV0ID0gMDsJDQotDQotCXRyeQ0KLQl7CQ0KLQkJaWYgKHNjcmlwdC5HZXRMZW5ndGgoKSA+IDApDQotCQl7DQotCQkJaWYgKG5Nb2RlID09IDApDQotCQkJewkJDQotCQkJCW5SZXQgPSBKU19FeGVjdXRlKCptX3BSdW50aW1lLCB0aGlzLCBzY3JpcHQsIHNjcmlwdC5HZXRMZW5ndGgoKSwgJmVycm9yKTsNCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJblJldCA9IEpTX1BhcnNlKCptX3BSdW50aW1lLCB0aGlzLCBzY3JpcHQsIHNjcmlwdC5HZXRMZW5ndGgoKSwgJmVycm9yKTsNCi0JCQl9DQotCQl9DQotDQotCQlpZiAoblJldCA8IDApDQotCQl7DQotCQkJQ0ZYX1dpZGVTdHJpbmcgc0xpbmU7DQotCQkJc0xpbmUuRm9ybWF0KChGWF9MUENXU1RSKUwiWyBMaW5lOiAlMDVkIHsgJXMgfSBdIDogJXMiLGVycm9yLmxpbm51bS0xLGVycm9yLnNyY2xpbmUsZXJyb3IubWVzc2FnZSk7DQotDQotLy8JCQlUUkFDRShMIi8qIC0tLS0tLS0tLS0tLS0tIEpTIEVycm9yIC0tLS0tLS0tLS0tLS0tICovXG4iKTsNCi0vLwkJCVRSQUNFKHNMaW5lKTsNCi0vLwkJCVRSQUNFKEwiXG4iKTsNCi0JCQkvL0NGWF9CeXRlU3RyaW5nIHNUZW1wID0gQ0ZYX0J5dGVTdHJpbmc6OkZyb21Vbmljb2RlKGVycm9yLm1lc3NhZ2UpOw0KLQkJCWluZm8gKz0gc0xpbmU7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJaW5mbyA9IEpTR2V0U3RyaW5nRnJvbUlEKHRoaXMsIElEU19TVFJJTkdfUlVOKTsNCi0JCX0JCQ0KLQ0KLQl9DQotCWNhdGNoICguLi4pDQotCXsNCi0JCWluZm8gPSBKU0dldFN0cmluZ0Zyb21JRCh0aGlzLCBJRFNfU1RSSU5HX1VOSEFORExFRCk7DQotCQluUmV0ID0gLTE7DQotCX0NCi0NCi0JbV9wUnVudGltZS0+UmVtb3ZlRXZlbnRJbkxvb3AobV9wRXZlbnRIYW5kbGVyLT5UYXJnZXROYW1lKCksIG1fcEV2ZW50SGFuZGxlci0+RXZlbnRUeXBlKCkpOw0KLQ0KLQltX3BFdmVudEhhbmRsZXItPkRlc3Ryb3koKTsNCi0JbV9iQnVzeSA9IEZBTFNFOwkNCi0NCi0JcmV0dXJuIG5SZXQgPj0gMDsNCi19DQotDQotRlhfQk9PTCBDSlNfQ29udGV4dDo6UnVuU2NyaXB0KGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzY3JpcHQsIENGWF9XaWRlU3RyaW5nJiBpbmZvKQ0KLXsNCi0Jdjg6Oklzb2xhdGU6OlNjb3BlIGlzb2xhdGVfc2NvcGUobV9wUnVudGltZS0+R2V0SXNvbGF0ZSgpKTsNCi0Jdjg6OkhhbmRsZVNjb3BlIGhhbmRsZV9zY29wZShtX3BSdW50aW1lLT5HZXRJc29sYXRlKCkpOw0KLQl2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBtX3BSdW50aW1lLT5OZXdKU0NvbnRleHQoKTsNCi0Jdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRfc2NvcGUoY29udGV4dCk7DQotDQotCXJldHVybiBEb0pvYigwLCBzY3JpcHQsIGluZm8pOw0KLX0NCi0NCi1GWF9CT09MIENKU19Db250ZXh0OjpDb21waWxlKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzY3JpcHQsIENGWF9XaWRlU3RyaW5nJiBpbmZvKQ0KLXsNCi0Jdjg6Oklzb2xhdGU6OlNjb3BlIGlzb2xhdGVfc2NvcGUobV9wUnVudGltZS0+R2V0SXNvbGF0ZSgpKTsNCi0Jdjg6OkhhbmRsZVNjb3BlIGhhbmRsZV9zY29wZShtX3BSdW50aW1lLT5HZXRJc29sYXRlKCkpOw0KLQl2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBtX3BSdW50aW1lLT5OZXdKU0NvbnRleHQoKTsNCi0Jdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRfc2NvcGUoY29udGV4dCk7DQotDQotCXJldHVybiBEb0pvYigxLCBzY3JpcHQsIGluZm8pOw0KLX0NCi0NCi12b2lkIENKU19Db250ZXh0OjpPbkFwcF9Jbml0KCkNCi17DQotCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7DQotCW1fcEV2ZW50SGFuZGxlci0+T25BcHBfSW5pdCgpOw0KLX0NCi0NCi12b2lkIENKU19Db250ZXh0OjpPbkRvY19PcGVuKENQREZTREtfRG9jdW1lbnQqIHBEb2MsIGNvbnN0IENGWF9XaWRlU3RyaW5nICZzdHJUYXJnZXROYW1lKQ0KLXsNCi0JQVNTRVJUKG1fcEV2ZW50SGFuZGxlciAhPSBOVUxMKTsNCi0JbV9wRXZlbnRIYW5kbGVyLT5PbkRvY19PcGVuKHBEb2Msc3RyVGFyZ2V0TmFtZSk7DQotfQ0KLQ0KLXZvaWQgQ0pTX0NvbnRleHQ6Ok9uRG9jX1dpbGxQcmludChDUERGU0RLX0RvY3VtZW50KiBwRG9jKQ0KLXsNCi0JQVNTRVJUKG1fcEV2ZW50SGFuZGxlciAhPSBOVUxMKTsNCi0JbV9wRXZlbnRIYW5kbGVyLT5PbkRvY19XaWxsUHJpbnQocERvYyk7DQotfQ0KLQ0KLXZvaWQgQ0pTX0NvbnRleHQ6Ok9uRG9jX0RpZFByaW50KENQREZTREtfRG9jdW1lbnQqIHBEb2MpDQotew0KLQlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOw0KLQltX3BFdmVudEhhbmRsZXItPk9uRG9jX0RpZFByaW50KHBEb2MpOw0KLX0NCi0NCi12b2lkIENKU19Db250ZXh0OjpPbkRvY19XaWxsU2F2ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jKQ0KLXsNCi0JQVNTRVJUKG1fcEV2ZW50SGFuZGxlciAhPSBOVUxMKTsNCi0JbV9wRXZlbnRIYW5kbGVyLT5PbkRvY19XaWxsU2F2ZShwRG9jKTsNCi19DQotDQotdm9pZCBDSlNfQ29udGV4dDo6T25Eb2NfRGlkU2F2ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jKQ0KLXsNCi0JQVNTRVJUKG1fcEV2ZW50SGFuZGxlciAhPSBOVUxMKTsNCi0JbV9wRXZlbnRIYW5kbGVyLT5PbkRvY19EaWRTYXZlKHBEb2MpOw0KLX0NCi0NCi12b2lkIENKU19Db250ZXh0OjpPbkRvY19XaWxsQ2xvc2UoQ1BERlNES19Eb2N1bWVudCogcERvYykNCi17DQotCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7DQotCW1fcEV2ZW50SGFuZGxlci0+T25Eb2NfV2lsbENsb3NlKHBEb2MpOw0KLX0NCi0NCi12b2lkIENKU19Db250ZXh0OjpPblBhZ2VfT3BlbihDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KQ0KLXsNCi0JQVNTRVJUKG1fcEV2ZW50SGFuZGxlciAhPSBOVUxMKTsNCi0JbV9wRXZlbnRIYW5kbGVyLT5PblBhZ2VfT3BlbihwVGFyZ2V0KTsNCi19DQotDQotdm9pZCBDSlNfQ29udGV4dDo6T25QYWdlX0Nsb3NlKENQREZTREtfRG9jdW1lbnQqIHBUYXJnZXQpDQotew0KLQlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOw0KLQltX3BFdmVudEhhbmRsZXItPk9uUGFnZV9DbG9zZShwVGFyZ2V0KTsNCi19DQotDQotdm9pZCBDSlNfQ29udGV4dDo6T25QYWdlX0luVmlldyhDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KQ0KLXsNCi0JQVNTRVJUKG1fcEV2ZW50SGFuZGxlciAhPSBOVUxMKTsNCi0JbV9wRXZlbnRIYW5kbGVyLT5PblBhZ2VfSW5WaWV3KHBUYXJnZXQpOw0KLX0NCi0NCi12b2lkIENKU19Db250ZXh0OjpPblBhZ2VfT3V0VmlldyhDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KQ0KLXsNCi0JQVNTRVJUKG1fcEV2ZW50SGFuZGxlciAhPSBOVUxMKTsNCi0JbV9wRXZlbnRIYW5kbGVyLT5PblBhZ2VfT3V0VmlldyhwVGFyZ2V0KTsNCi19DQotDQotdm9pZCBDSlNfQ29udGV4dDo6T25GaWVsZF9Nb3VzZURvd24oRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCAqcFRhcmdldCkNCi17DQotCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7DQotCW1fcEV2ZW50SGFuZGxlci0+T25GaWVsZF9Nb3VzZURvd24oYk1vZGlmaWVyLCBiU2hpZnQsIHBUYXJnZXQpOw0KLX0NCi0NCi12b2lkIENKU19Db250ZXh0OjpPbkZpZWxkX01vdXNlRW50ZXIoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCAqcFRhcmdldCkNCi17DQotCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7DQotCW1fcEV2ZW50SGFuZGxlci0+T25GaWVsZF9Nb3VzZUVudGVyKGJNb2RpZmllciwgYlNoaWZ0LCBwVGFyZ2V0KTsNCi19DQotDQotdm9pZCBDSlNfQ29udGV4dDo6T25GaWVsZF9Nb3VzZUV4aXQoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCAqcFRhcmdldCkNCi17DQotCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7DQotCW1fcEV2ZW50SGFuZGxlci0+T25GaWVsZF9Nb3VzZUV4aXQoYk1vZGlmaWVyLCBiU2hpZnQsIHBUYXJnZXQpOw0KLX0NCi0NCi12b2lkIENKU19Db250ZXh0OjpPbkZpZWxkX01vdXNlVXAoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCAqcFRhcmdldCkNCi17DQotCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7DQotCW1fcEV2ZW50SGFuZGxlci0+T25GaWVsZF9Nb3VzZVVwKGJNb2RpZmllciwgYlNoaWZ0LCBwVGFyZ2V0KTsNCi19DQotDQotdm9pZCBDSlNfQ29udGV4dDo6T25GaWVsZF9Gb2N1cyhGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkKiBwVGFyZ2V0LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgVmFsdWUpDQotew0KLQlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOw0KLQltX3BFdmVudEhhbmRsZXItPk9uRmllbGRfRm9jdXMoYk1vZGlmaWVyLCBiU2hpZnQsIHBUYXJnZXQsIFZhbHVlKTsNCi19DQotDQotdm9pZCBDSlNfQ29udGV4dDo6T25GaWVsZF9CbHVyKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBWYWx1ZSkNCi17DQotCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7DQotCW1fcEV2ZW50SGFuZGxlci0+T25GaWVsZF9CbHVyKGJNb2RpZmllciwgYlNoaWZ0LCBwVGFyZ2V0LCBWYWx1ZSk7DQotfQ0KLQ0KLXZvaWQgQ0pTX0NvbnRleHQ6Ok9uRmllbGRfQ2FsY3VsYXRlKENQREZfRm9ybUZpZWxkKiBwU291cmNlLCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCwgQ0ZYX1dpZGVTdHJpbmcmIFZhbHVlLCBGWF9CT09MJiBiUmMpDQotew0KLQlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOw0KLQltX3BFdmVudEhhbmRsZXItPk9uRmllbGRfQ2FsY3VsYXRlKHBTb3VyY2UsIHBUYXJnZXQsIFZhbHVlLCBiUmMpOw0KLX0NCi0NCi12b2lkIENKU19Db250ZXh0OjpPbkZpZWxkX0Zvcm1hdChpbnQgbkNvbW1pdEtleSwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIENGWF9XaWRlU3RyaW5nJiBWYWx1ZSwgRlhfQk9PTCBiV2lsbENvbW1pdCkNCi17DQotCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7DQotCW1fcEV2ZW50SGFuZGxlci0+T25GaWVsZF9Gb3JtYXQobkNvbW1pdEtleSwgcFRhcmdldCwgVmFsdWUsIGJXaWxsQ29tbWl0KTsNCi19DQotDQotDQotdm9pZCBDSlNfQ29udGV4dDo6T25GaWVsZF9LZXlzdHJva2UoaW50IG5Db21taXRLZXksIENGWF9XaWRlU3RyaW5nJiBzdHJDaGFuZ2UsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJDaGFuZ2VFeCwNCi0JCQkJCQkJCQlGWF9CT09MIGJLZXlEb3duLCBGWF9CT09MIGJNb2RpZmllciwgaW50ICZuU2VsRW5kLGludCAmblNlbFN0YXJ0LA0KLQkJCQkJCQkJCUZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCwgQ0ZYX1dpZGVTdHJpbmcmIFZhbHVlLA0KLQkJCQkJCQkJCUZYX0JPT0wgYldpbGxDb21taXQsIEZYX0JPT0wgYkZpZWxkRnVsbCwgRlhfQk9PTCYgYlJjKQ0KLXsNCi0JQVNTRVJUKG1fcEV2ZW50SGFuZGxlciAhPSBOVUxMKTsNCi0JbV9wRXZlbnRIYW5kbGVyLT5PbkZpZWxkX0tleXN0cm9rZShuQ29tbWl0S2V5LCBzdHJDaGFuZ2UsIHN0ckNoYW5nZUV4LCBiS2V5RG93biwNCi0JCWJNb2RpZmllciwgblNlbEVuZCwgblNlbFN0YXJ0LCBiU2hpZnQsIHBUYXJnZXQsIFZhbHVlLCBiV2lsbENvbW1pdCwgYkZpZWxkRnVsbCwgYlJjKTsNCi19DQotDQotdm9pZCBDSlNfQ29udGV4dDo6T25GaWVsZF9WYWxpZGF0ZShDRlhfV2lkZVN0cmluZyYgc3RyQ2hhbmdlLGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJDaGFuZ2VFeCwNCi0JCQkJCQkJCSAgIEZYX0JPT0wgYktleURvd24sIEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsDQotCQkJCQkJCQkgICBDRlhfV2lkZVN0cmluZyYgVmFsdWUsIEZYX0JPT0wmIGJSYykNCi17DQotCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7DQotCW1fcEV2ZW50SGFuZGxlci0+T25GaWVsZF9WYWxpZGF0ZShzdHJDaGFuZ2UsIHN0ckNoYW5nZUV4LCBiS2V5RG93biwgYk1vZGlmaWVyLCBiU2hpZnQsIHBUYXJnZXQsIFZhbHVlLCBiUmMpOw0KLX0NCi0NCi12b2lkIENKU19Db250ZXh0OjpPblNjcmVlbl9Gb2N1cyhGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pDQotew0KLQlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOw0KLQltX3BFdmVudEhhbmRsZXItPk9uU2NyZWVuX0ZvY3VzKGJNb2RpZmllciwgYlNoaWZ0LCBwU2NyZWVuKTsNCi19DQotDQotdm9pZCBDSlNfQ29udGV4dDo6T25TY3JlZW5fQmx1cihGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pDQotew0KLQlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOw0KLQltX3BFdmVudEhhbmRsZXItPk9uU2NyZWVuX0JsdXIoYk1vZGlmaWVyLCBiU2hpZnQsIHBTY3JlZW4pOw0KLX0NCi0NCi12b2lkIENKU19Db250ZXh0OjpPblNjcmVlbl9PcGVuKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikNCi17DQotCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7DQotCW1fcEV2ZW50SGFuZGxlci0+T25TY3JlZW5fT3BlbihiTW9kaWZpZXIsIGJTaGlmdCwgcFNjcmVlbik7DQotfQ0KLQ0KLXZvaWQgQ0pTX0NvbnRleHQ6Ok9uU2NyZWVuX0Nsb3NlKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikNCi17DQotCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7DQotCW1fcEV2ZW50SGFuZGxlci0+T25TY3JlZW5fQ2xvc2UoYk1vZGlmaWVyLCBiU2hpZnQsIHBTY3JlZW4pOw0KLX0NCi0NCi12b2lkIENKU19Db250ZXh0OjpPblNjcmVlbl9Nb3VzZURvd24oRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKQ0KLXsNCi0JQVNTRVJUKG1fcEV2ZW50SGFuZGxlciAhPSBOVUxMKTsNCi0JbV9wRXZlbnRIYW5kbGVyLT5PblNjcmVlbl9Nb3VzZURvd24oYk1vZGlmaWVyLCBiU2hpZnQsIHBTY3JlZW4pOw0KLX0NCi0NCi12b2lkIENKU19Db250ZXh0OjpPblNjcmVlbl9Nb3VzZVVwKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikNCi17DQotCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7DQotCW1fcEV2ZW50SGFuZGxlci0+T25TY3JlZW5fTW91c2VVcChiTW9kaWZpZXIsIGJTaGlmdCwgcFNjcmVlbik7DQotfQ0KLQ0KLXZvaWQgQ0pTX0NvbnRleHQ6Ok9uU2NyZWVuX01vdXNlRW50ZXIoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKQ0KLXsNCi0JQVNTRVJUKG1fcEV2ZW50SGFuZGxlciAhPSBOVUxMKTsNCi0JbV9wRXZlbnRIYW5kbGVyLT5PblNjcmVlbl9Nb3VzZUVudGVyKGJNb2RpZmllciwgYlNoaWZ0LCBwU2NyZWVuKTsNCi19DQotDQotdm9pZCBDSlNfQ29udGV4dDo6T25TY3JlZW5fTW91c2VFeGl0KEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikNCi17DQotCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7DQotCW1fcEV2ZW50SGFuZGxlci0+T25TY3JlZW5fTW91c2VFeGl0KGJNb2RpZmllciwgYlNoaWZ0LCBwU2NyZWVuKTsNCi19DQotDQotdm9pZCBDSlNfQ29udGV4dDo6T25TY3JlZW5fSW5WaWV3KEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikNCi17DQotCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7DQotCW1fcEV2ZW50SGFuZGxlci0+T25TY3JlZW5fSW5WaWV3KGJNb2RpZmllciwgYlNoaWZ0LCBwU2NyZWVuKTsNCi19DQotDQotdm9pZCBDSlNfQ29udGV4dDo6T25TY3JlZW5fT3V0VmlldyhGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pDQotew0KLQlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOw0KLQltX3BFdmVudEhhbmRsZXItPk9uU2NyZWVuX091dFZpZXcoYk1vZGlmaWVyLCBiU2hpZnQsIHBTY3JlZW4pOw0KLX0NCi0NCi12b2lkIENKU19Db250ZXh0OjpPbkJvb2ttYXJrX01vdXNlVXAoQ1BERl9Cb29rbWFyayogcEJvb2tNYXJrKQ0KLXsNCi0JQVNTRVJUKG1fcEV2ZW50SGFuZGxlciAhPSBOVUxMKTsNCi0JbV9wRXZlbnRIYW5kbGVyLT5PbkJvb2ttYXJrX01vdXNlVXAocEJvb2tNYXJrKTsNCi19DQotDQotdm9pZCBDSlNfQ29udGV4dDo6T25MaW5rX01vdXNlVXAoQ1BERlNES19Eb2N1bWVudCogcFRhcmdldCkNCi17DQotCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7DQotCW1fcEV2ZW50SGFuZGxlci0+T25MaW5rX01vdXNlVXAocFRhcmdldCk7DQotfQ0KLQ0KLXZvaWQgQ0pTX0NvbnRleHQ6Ok9uQ29uc29sZV9FeGVjKCkNCi17DQotCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7DQotCW1fcEV2ZW50SGFuZGxlci0+T25Db25zb2xlX0V4ZWMoKTsNCi19DQotDQotdm9pZCBDSlNfQ29udGV4dDo6T25FeHRlcm5hbF9FeGVjKCkNCi17DQotCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7DQotCW1fcEV2ZW50SGFuZGxlci0+T25FeHRlcm5hbF9FeGVjKCk7DQotfQ0KLQ0KLXZvaWQgQ0pTX0NvbnRleHQ6Ok9uQmF0Y2hFeGVjKENQREZTREtfRG9jdW1lbnQqIHBUYXJnZXQpDQotew0KLQlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOwkNCi0JbV9wRXZlbnRIYW5kbGVyLT5PbkJhdGNoRXhlYyhwVGFyZ2V0KTsNCi19DQotDQotdm9pZCBDSlNfQ29udGV4dDo6T25NZW51X0V4ZWMoQ1BERlNES19Eb2N1bWVudCogcFRhcmdldCxjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyVGFyZ2V0TmFtZSkNCi17DQotCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7DQotCW1fcEV2ZW50SGFuZGxlci0+T25NZW51X0V4ZWMocFRhcmdldCwgc3RyVGFyZ2V0TmFtZSk7DQotfQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSmF2YVNjcmlwdC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9JSmF2YVNjcmlwdC5oIgorLy8jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1Jlc01nci5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19Db250ZXh0LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0V2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19SdW50aW1lLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L3Jlc291cmNlLmgiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENKU19Db250ZXh0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0NKU19Db250ZXh0OjpDSlNfQ29udGV4dChDSlNfUnVudGltZSogcFJ1bnRpbWUpIDogCQorCW1fcFJ1bnRpbWUocFJ1bnRpbWUpLAorCW1fYkJ1c3koRkFMU0UpLAorCW1fYk1zZ0JveEVuYWJsZShUUlVFKQoreworCW1fcEV2ZW50SGFuZGxlciA9IG5ldyBDSlNfRXZlbnRIYW5kbGVyKHRoaXMpOworfQorCitDSlNfQ29udGV4dDo6fkNKU19Db250ZXh0KHZvaWQpCit7CisJaWYgKG1fcEV2ZW50SGFuZGxlcikKKwl7CisJCWRlbGV0ZSBtX3BFdmVudEhhbmRsZXI7CisJCW1fcEV2ZW50SGFuZGxlciA9IE5VTEw7CisJfQorfQorCitDUERGU0RLX0RvY3VtZW50KiBDSlNfQ29udGV4dDo6R2V0UmVhZGVyRG9jdW1lbnQoKQoreworCUFTU0VSVChtX3BSdW50aW1lICE9IE5VTEwpOworCisJcmV0dXJuIG1fcFJ1bnRpbWUtPkdldFJlYWRlckRvY3VtZW50KCk7Cit9CisKK0NQREZEb2NfRW52aXJvbm1lbnQqIENKU19Db250ZXh0OjpHZXRSZWFkZXJBcHAoKQoreworCUFTU0VSVChtX3BSdW50aW1lICE9IE5VTEwpOworCQorCXJldHVybiBtX3BSdW50aW1lLT5HZXRSZWFkZXJBcHAoKTsKK30KKworRlhfQk9PTCBDSlNfQ29udGV4dDo6RG9Kb2IoaW50IG5Nb2RlLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc2NyaXB0LCBDRlhfV2lkZVN0cmluZyYgaW5mbykKK3sKKwlpZiAobV9iQnVzeSkKKwl7CQkKKwkJaW5mbyA9IEpTR2V0U3RyaW5nRnJvbUlEKHRoaXMsIElEU19TVFJJTkdfSlNCVVNZKTsKKwkJcmV0dXJuIEZBTFNFOworCX0JCisKKwltX2JCdXN5ID0gVFJVRTsKKworCUFTU0VSVChtX3BSdW50aW1lICE9IE5VTEwpOworCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7CisJQVNTRVJUKG1fcEV2ZW50SGFuZGxlci0+SXNWYWxpZCgpKTsKKworCWlmICghbV9wUnVudGltZS0+QWRkRXZlbnRUb0xvb3AobV9wRXZlbnRIYW5kbGVyLT5UYXJnZXROYW1lKCksIG1fcEV2ZW50SGFuZGxlci0+RXZlbnRUeXBlKCkpKQorCXsKKwkJaW5mbyA9IEpTR2V0U3RyaW5nRnJvbUlEKHRoaXMsIElEU19TVFJJTkdfSlNFVkVOVCk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlGWEpTRXJyIGVycm9yID17TlVMTCxOVUxMLCAwfTsKKwlpbnQgblJldCA9IDA7CQorCisJdHJ5CisJewkKKwkJaWYgKHNjcmlwdC5HZXRMZW5ndGgoKSA+IDApCisJCXsKKwkJCWlmIChuTW9kZSA9PSAwKQorCQkJewkJCisJCQkJblJldCA9IEpTX0V4ZWN1dGUoKm1fcFJ1bnRpbWUsIHRoaXMsIHNjcmlwdCwgc2NyaXB0LkdldExlbmd0aCgpLCAmZXJyb3IpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCW5SZXQgPSBKU19QYXJzZSgqbV9wUnVudGltZSwgdGhpcywgc2NyaXB0LCBzY3JpcHQuR2V0TGVuZ3RoKCksICZlcnJvcik7CisJCQl9CisJCX0KKworCQlpZiAoblJldCA8IDApCisJCXsKKwkJCUNGWF9XaWRlU3RyaW5nIHNMaW5lOworCQkJc0xpbmUuRm9ybWF0KChGWF9MUENXU1RSKUwiWyBMaW5lOiAlMDVkIHsgJXMgfSBdIDogJXMiLGVycm9yLmxpbm51bS0xLGVycm9yLnNyY2xpbmUsZXJyb3IubWVzc2FnZSk7CisKKy8vCQkJVFJBQ0UoTCIvKiAtLS0tLS0tLS0tLS0tLSBKUyBFcnJvciAtLS0tLS0tLS0tLS0tLSAqL1xuIik7CisvLwkJCVRSQUNFKHNMaW5lKTsKKy8vCQkJVFJBQ0UoTCJcbiIpOworCQkJLy9DRlhfQnl0ZVN0cmluZyBzVGVtcCA9IENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShlcnJvci5tZXNzYWdlKTsKKwkJCWluZm8gKz0gc0xpbmU7CisJCX0KKwkJZWxzZQorCQl7CisJCQlpbmZvID0gSlNHZXRTdHJpbmdGcm9tSUQodGhpcywgSURTX1NUUklOR19SVU4pOworCQl9CQkKKworCX0KKwljYXRjaCAoLi4uKQorCXsKKwkJaW5mbyA9IEpTR2V0U3RyaW5nRnJvbUlEKHRoaXMsIElEU19TVFJJTkdfVU5IQU5ETEVEKTsKKwkJblJldCA9IC0xOworCX0KKworCW1fcFJ1bnRpbWUtPlJlbW92ZUV2ZW50SW5Mb29wKG1fcEV2ZW50SGFuZGxlci0+VGFyZ2V0TmFtZSgpLCBtX3BFdmVudEhhbmRsZXItPkV2ZW50VHlwZSgpKTsKKworCW1fcEV2ZW50SGFuZGxlci0+RGVzdHJveSgpOworCW1fYkJ1c3kgPSBGQUxTRTsJCisKKwlyZXR1cm4gblJldCA+PSAwOworfQorCitGWF9CT09MIENKU19Db250ZXh0OjpSdW5TY3JpcHQoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNjcmlwdCwgQ0ZYX1dpZGVTdHJpbmcmIGluZm8pCit7CisJdjg6Oklzb2xhdGU6OlNjb3BlIGlzb2xhdGVfc2NvcGUobV9wUnVudGltZS0+R2V0SXNvbGF0ZSgpKTsKKwl2ODo6SGFuZGxlU2NvcGUgaGFuZGxlX3Njb3BlKG1fcFJ1bnRpbWUtPkdldElzb2xhdGUoKSk7CisJdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gbV9wUnVudGltZS0+TmV3SlNDb250ZXh0KCk7CisJdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRfc2NvcGUoY29udGV4dCk7CisKKwlyZXR1cm4gRG9Kb2IoMCwgc2NyaXB0LCBpbmZvKTsKK30KKworRlhfQk9PTCBDSlNfQ29udGV4dDo6Q29tcGlsZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc2NyaXB0LCBDRlhfV2lkZVN0cmluZyYgaW5mbykKK3sKKwl2ODo6SXNvbGF0ZTo6U2NvcGUgaXNvbGF0ZV9zY29wZShtX3BSdW50aW1lLT5HZXRJc29sYXRlKCkpOworCXY4OjpIYW5kbGVTY29wZSBoYW5kbGVfc2NvcGUobV9wUnVudGltZS0+R2V0SXNvbGF0ZSgpKTsKKwl2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBtX3BSdW50aW1lLT5OZXdKU0NvbnRleHQoKTsKKwl2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dF9zY29wZShjb250ZXh0KTsKKworCXJldHVybiBEb0pvYigxLCBzY3JpcHQsIGluZm8pOworfQorCit2b2lkIENKU19Db250ZXh0OjpPbkFwcF9Jbml0KCkKK3sKKwlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOworCW1fcEV2ZW50SGFuZGxlci0+T25BcHBfSW5pdCgpOworfQorCit2b2lkIENKU19Db250ZXh0OjpPbkRvY19PcGVuKENQREZTREtfRG9jdW1lbnQqIHBEb2MsIGNvbnN0IENGWF9XaWRlU3RyaW5nICZzdHJUYXJnZXROYW1lKQoreworCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7CisJbV9wRXZlbnRIYW5kbGVyLT5PbkRvY19PcGVuKHBEb2Msc3RyVGFyZ2V0TmFtZSk7Cit9CisKK3ZvaWQgQ0pTX0NvbnRleHQ6Ok9uRG9jX1dpbGxQcmludChDUERGU0RLX0RvY3VtZW50KiBwRG9jKQoreworCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7CisJbV9wRXZlbnRIYW5kbGVyLT5PbkRvY19XaWxsUHJpbnQocERvYyk7Cit9CisKK3ZvaWQgQ0pTX0NvbnRleHQ6Ok9uRG9jX0RpZFByaW50KENQREZTREtfRG9jdW1lbnQqIHBEb2MpCit7CisJQVNTRVJUKG1fcEV2ZW50SGFuZGxlciAhPSBOVUxMKTsKKwltX3BFdmVudEhhbmRsZXItPk9uRG9jX0RpZFByaW50KHBEb2MpOworfQorCit2b2lkIENKU19Db250ZXh0OjpPbkRvY19XaWxsU2F2ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jKQoreworCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7CisJbV9wRXZlbnRIYW5kbGVyLT5PbkRvY19XaWxsU2F2ZShwRG9jKTsKK30KKwordm9pZCBDSlNfQ29udGV4dDo6T25Eb2NfRGlkU2F2ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jKQoreworCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7CisJbV9wRXZlbnRIYW5kbGVyLT5PbkRvY19EaWRTYXZlKHBEb2MpOworfQorCit2b2lkIENKU19Db250ZXh0OjpPbkRvY19XaWxsQ2xvc2UoQ1BERlNES19Eb2N1bWVudCogcERvYykKK3sKKwlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOworCW1fcEV2ZW50SGFuZGxlci0+T25Eb2NfV2lsbENsb3NlKHBEb2MpOworfQorCit2b2lkIENKU19Db250ZXh0OjpPblBhZ2VfT3BlbihDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KQoreworCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7CisJbV9wRXZlbnRIYW5kbGVyLT5PblBhZ2VfT3BlbihwVGFyZ2V0KTsKK30KKwordm9pZCBDSlNfQ29udGV4dDo6T25QYWdlX0Nsb3NlKENQREZTREtfRG9jdW1lbnQqIHBUYXJnZXQpCit7CisJQVNTRVJUKG1fcEV2ZW50SGFuZGxlciAhPSBOVUxMKTsKKwltX3BFdmVudEhhbmRsZXItPk9uUGFnZV9DbG9zZShwVGFyZ2V0KTsKK30KKwordm9pZCBDSlNfQ29udGV4dDo6T25QYWdlX0luVmlldyhDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KQoreworCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7CisJbV9wRXZlbnRIYW5kbGVyLT5PblBhZ2VfSW5WaWV3KHBUYXJnZXQpOworfQorCit2b2lkIENKU19Db250ZXh0OjpPblBhZ2VfT3V0VmlldyhDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KQoreworCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7CisJbV9wRXZlbnRIYW5kbGVyLT5PblBhZ2VfT3V0VmlldyhwVGFyZ2V0KTsKK30KKwordm9pZCBDSlNfQ29udGV4dDo6T25GaWVsZF9Nb3VzZURvd24oRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCAqcFRhcmdldCkKK3sKKwlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOworCW1fcEV2ZW50SGFuZGxlci0+T25GaWVsZF9Nb3VzZURvd24oYk1vZGlmaWVyLCBiU2hpZnQsIHBUYXJnZXQpOworfQorCit2b2lkIENKU19Db250ZXh0OjpPbkZpZWxkX01vdXNlRW50ZXIoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCAqcFRhcmdldCkKK3sKKwlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOworCW1fcEV2ZW50SGFuZGxlci0+T25GaWVsZF9Nb3VzZUVudGVyKGJNb2RpZmllciwgYlNoaWZ0LCBwVGFyZ2V0KTsKK30KKwordm9pZCBDSlNfQ29udGV4dDo6T25GaWVsZF9Nb3VzZUV4aXQoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCAqcFRhcmdldCkKK3sKKwlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOworCW1fcEV2ZW50SGFuZGxlci0+T25GaWVsZF9Nb3VzZUV4aXQoYk1vZGlmaWVyLCBiU2hpZnQsIHBUYXJnZXQpOworfQorCit2b2lkIENKU19Db250ZXh0OjpPbkZpZWxkX01vdXNlVXAoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCAqcFRhcmdldCkKK3sKKwlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOworCW1fcEV2ZW50SGFuZGxlci0+T25GaWVsZF9Nb3VzZVVwKGJNb2RpZmllciwgYlNoaWZ0LCBwVGFyZ2V0KTsKK30KKwordm9pZCBDSlNfQ29udGV4dDo6T25GaWVsZF9Gb2N1cyhGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkKiBwVGFyZ2V0LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgVmFsdWUpCit7CisJQVNTRVJUKG1fcEV2ZW50SGFuZGxlciAhPSBOVUxMKTsKKwltX3BFdmVudEhhbmRsZXItPk9uRmllbGRfRm9jdXMoYk1vZGlmaWVyLCBiU2hpZnQsIHBUYXJnZXQsIFZhbHVlKTsKK30KKwordm9pZCBDSlNfQ29udGV4dDo6T25GaWVsZF9CbHVyKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBWYWx1ZSkKK3sKKwlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOworCW1fcEV2ZW50SGFuZGxlci0+T25GaWVsZF9CbHVyKGJNb2RpZmllciwgYlNoaWZ0LCBwVGFyZ2V0LCBWYWx1ZSk7Cit9CisKK3ZvaWQgQ0pTX0NvbnRleHQ6Ok9uRmllbGRfQ2FsY3VsYXRlKENQREZfRm9ybUZpZWxkKiBwU291cmNlLCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCwgQ0ZYX1dpZGVTdHJpbmcmIFZhbHVlLCBGWF9CT09MJiBiUmMpCit7CisJQVNTRVJUKG1fcEV2ZW50SGFuZGxlciAhPSBOVUxMKTsKKwltX3BFdmVudEhhbmRsZXItPk9uRmllbGRfQ2FsY3VsYXRlKHBTb3VyY2UsIHBUYXJnZXQsIFZhbHVlLCBiUmMpOworfQorCit2b2lkIENKU19Db250ZXh0OjpPbkZpZWxkX0Zvcm1hdChpbnQgbkNvbW1pdEtleSwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsIENGWF9XaWRlU3RyaW5nJiBWYWx1ZSwgRlhfQk9PTCBiV2lsbENvbW1pdCkKK3sKKwlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOworCW1fcEV2ZW50SGFuZGxlci0+T25GaWVsZF9Gb3JtYXQobkNvbW1pdEtleSwgcFRhcmdldCwgVmFsdWUsIGJXaWxsQ29tbWl0KTsKK30KKworCit2b2lkIENKU19Db250ZXh0OjpPbkZpZWxkX0tleXN0cm9rZShpbnQgbkNvbW1pdEtleSwgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZUV4LAorCQkJCQkJCQkJRlhfQk9PTCBiS2V5RG93biwgRlhfQk9PTCBiTW9kaWZpZXIsIGludCAmblNlbEVuZCxpbnQgJm5TZWxTdGFydCwKKwkJCQkJCQkJCUZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCwgQ0ZYX1dpZGVTdHJpbmcmIFZhbHVlLAorCQkJCQkJCQkJRlhfQk9PTCBiV2lsbENvbW1pdCwgRlhfQk9PTCBiRmllbGRGdWxsLCBGWF9CT09MJiBiUmMpCit7CisJQVNTRVJUKG1fcEV2ZW50SGFuZGxlciAhPSBOVUxMKTsKKwltX3BFdmVudEhhbmRsZXItPk9uRmllbGRfS2V5c3Ryb2tlKG5Db21taXRLZXksIHN0ckNoYW5nZSwgc3RyQ2hhbmdlRXgsIGJLZXlEb3duLAorCQliTW9kaWZpZXIsIG5TZWxFbmQsIG5TZWxTdGFydCwgYlNoaWZ0LCBwVGFyZ2V0LCBWYWx1ZSwgYldpbGxDb21taXQsIGJGaWVsZEZ1bGwsIGJSYyk7Cit9CisKK3ZvaWQgQ0pTX0NvbnRleHQ6Ok9uRmllbGRfVmFsaWRhdGUoQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZSxjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyQ2hhbmdlRXgsCisJCQkJCQkJCSAgIEZYX0JPT0wgYktleURvd24sIEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsCisJCQkJCQkJCSAgIENGWF9XaWRlU3RyaW5nJiBWYWx1ZSwgRlhfQk9PTCYgYlJjKQoreworCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7CisJbV9wRXZlbnRIYW5kbGVyLT5PbkZpZWxkX1ZhbGlkYXRlKHN0ckNoYW5nZSwgc3RyQ2hhbmdlRXgsIGJLZXlEb3duLCBiTW9kaWZpZXIsIGJTaGlmdCwgcFRhcmdldCwgVmFsdWUsIGJSYyk7Cit9CisKK3ZvaWQgQ0pTX0NvbnRleHQ6Ok9uU2NyZWVuX0ZvY3VzKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikKK3sKKwlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOworCW1fcEV2ZW50SGFuZGxlci0+T25TY3JlZW5fRm9jdXMoYk1vZGlmaWVyLCBiU2hpZnQsIHBTY3JlZW4pOworfQorCit2b2lkIENKU19Db250ZXh0OjpPblNjcmVlbl9CbHVyKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikKK3sKKwlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOworCW1fcEV2ZW50SGFuZGxlci0+T25TY3JlZW5fQmx1cihiTW9kaWZpZXIsIGJTaGlmdCwgcFNjcmVlbik7Cit9CisKK3ZvaWQgQ0pTX0NvbnRleHQ6Ok9uU2NyZWVuX09wZW4oRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKQoreworCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7CisJbV9wRXZlbnRIYW5kbGVyLT5PblNjcmVlbl9PcGVuKGJNb2RpZmllciwgYlNoaWZ0LCBwU2NyZWVuKTsKK30KKwordm9pZCBDSlNfQ29udGV4dDo6T25TY3JlZW5fQ2xvc2UoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKQoreworCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7CisJbV9wRXZlbnRIYW5kbGVyLT5PblNjcmVlbl9DbG9zZShiTW9kaWZpZXIsIGJTaGlmdCwgcFNjcmVlbik7Cit9CisKK3ZvaWQgQ0pTX0NvbnRleHQ6Ok9uU2NyZWVuX01vdXNlRG93bihGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pCit7CisJQVNTRVJUKG1fcEV2ZW50SGFuZGxlciAhPSBOVUxMKTsKKwltX3BFdmVudEhhbmRsZXItPk9uU2NyZWVuX01vdXNlRG93bihiTW9kaWZpZXIsIGJTaGlmdCwgcFNjcmVlbik7Cit9CisKK3ZvaWQgQ0pTX0NvbnRleHQ6Ok9uU2NyZWVuX01vdXNlVXAoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKQoreworCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7CisJbV9wRXZlbnRIYW5kbGVyLT5PblNjcmVlbl9Nb3VzZVVwKGJNb2RpZmllciwgYlNoaWZ0LCBwU2NyZWVuKTsKK30KKwordm9pZCBDSlNfQ29udGV4dDo6T25TY3JlZW5fTW91c2VFbnRlcihGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pCit7CisJQVNTRVJUKG1fcEV2ZW50SGFuZGxlciAhPSBOVUxMKTsKKwltX3BFdmVudEhhbmRsZXItPk9uU2NyZWVuX01vdXNlRW50ZXIoYk1vZGlmaWVyLCBiU2hpZnQsIHBTY3JlZW4pOworfQorCit2b2lkIENKU19Db250ZXh0OjpPblNjcmVlbl9Nb3VzZUV4aXQoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKQoreworCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7CisJbV9wRXZlbnRIYW5kbGVyLT5PblNjcmVlbl9Nb3VzZUV4aXQoYk1vZGlmaWVyLCBiU2hpZnQsIHBTY3JlZW4pOworfQorCit2b2lkIENKU19Db250ZXh0OjpPblNjcmVlbl9JblZpZXcoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKQoreworCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7CisJbV9wRXZlbnRIYW5kbGVyLT5PblNjcmVlbl9JblZpZXcoYk1vZGlmaWVyLCBiU2hpZnQsIHBTY3JlZW4pOworfQorCit2b2lkIENKU19Db250ZXh0OjpPblNjcmVlbl9PdXRWaWV3KEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikKK3sKKwlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOworCW1fcEV2ZW50SGFuZGxlci0+T25TY3JlZW5fT3V0VmlldyhiTW9kaWZpZXIsIGJTaGlmdCwgcFNjcmVlbik7Cit9CisKK3ZvaWQgQ0pTX0NvbnRleHQ6Ok9uQm9va21hcmtfTW91c2VVcChDUERGX0Jvb2ttYXJrKiBwQm9va01hcmspCit7CisJQVNTRVJUKG1fcEV2ZW50SGFuZGxlciAhPSBOVUxMKTsKKwltX3BFdmVudEhhbmRsZXItPk9uQm9va21hcmtfTW91c2VVcChwQm9va01hcmspOworfQorCit2b2lkIENKU19Db250ZXh0OjpPbkxpbmtfTW91c2VVcChDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KQoreworCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7CisJbV9wRXZlbnRIYW5kbGVyLT5PbkxpbmtfTW91c2VVcChwVGFyZ2V0KTsKK30KKwordm9pZCBDSlNfQ29udGV4dDo6T25Db25zb2xlX0V4ZWMoKQoreworCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7CisJbV9wRXZlbnRIYW5kbGVyLT5PbkNvbnNvbGVfRXhlYygpOworfQorCit2b2lkIENKU19Db250ZXh0OjpPbkV4dGVybmFsX0V4ZWMoKQoreworCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7CisJbV9wRXZlbnRIYW5kbGVyLT5PbkV4dGVybmFsX0V4ZWMoKTsKK30KKwordm9pZCBDSlNfQ29udGV4dDo6T25CYXRjaEV4ZWMoQ1BERlNES19Eb2N1bWVudCogcFRhcmdldCkKK3sKKwlBU1NFUlQobV9wRXZlbnRIYW5kbGVyICE9IE5VTEwpOwkKKwltX3BFdmVudEhhbmRsZXItPk9uQmF0Y2hFeGVjKHBUYXJnZXQpOworfQorCit2b2lkIENKU19Db250ZXh0OjpPbk1lbnVfRXhlYyhDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0LGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJUYXJnZXROYW1lKQoreworCUFTU0VSVChtX3BFdmVudEhhbmRsZXIgIT0gTlVMTCk7CisJbV9wRXZlbnRIYW5kbGVyLT5Pbk1lbnVfRXhlYyhwVGFyZ2V0LCBzdHJUYXJnZXROYW1lKTsKK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9KU19FdmVudEhhbmRsZXIuY3BwIGIvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9KU19FdmVudEhhbmRsZXIuY3BwCmluZGV4IGNlNjllNmIuLjc2YzZkMzcgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvSlNfRXZlbnRIYW5kbGVyLmNwcAorKysgYi9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L0pTX0V2ZW50SGFuZGxlci5jcHAKQEAgLTEsNjc2ICsxLDY3NiBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KYXZhU2NyaXB0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9JSmF2YVNjcmlwdC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRXZlbnRIYW5kbGVyLmgiDQotLy8jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1Jlc01nci5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfQ29udGV4dC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfUnVudGltZS5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRGVmaW5lLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19PYmplY3QuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1ZhbHVlLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9Eb2N1bWVudC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvRmllbGQuaCINCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENKU19FdmVudEhhbmRsZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUNKU19FdmVudEhhbmRsZXI6OkNKU19FdmVudEhhbmRsZXIoQ0pTX0NvbnRleHQgKiBwQ29udGV4dCkJIDoNCi0JbV9wSlNDb250ZXh0KHBDb250ZXh0KSwNCi0JbV9lRXZlbnRUeXBlKEpFVF9VTktOT1dOKSwNCi0JbV9iVmFsaWQoRkFMU0UpLA0KLQltX3BXaWRlU3RyQ2hhbmdlKE5VTEwpLA0KLQltX25Db21taXRLZXkoLTEpLA0KLQltX2JLZXlEb3duKEZBTFNFKSwNCi0JbV9iTW9kaWZpZXIoRkFMU0UpLA0KLQltX2JTaGlmdChGQUxTRSksDQotCW1fcElTZWxFbmQoTlVMTCksDQotCW1fblNlbEVuZER1KDApLA0KLQltX3BJU2VsU3RhcnQoTlVMTCksDQotCW1fblNlbFN0YXJ0RHUoMCksDQotCW1fYldpbGxDb21taXQoRkFMU0UpLA0KLQltX3BWYWx1ZShOVUxMKSwNCi0JbV9iRmllbGRGdWxsKEZBTFNFKSwNCi0JbV9wYlJjKE5VTEwpLA0KLQltX2JSY0R1KEZBTFNFKSwNCi0JbV9wU291cmNlRG9jKE5VTEwpLA0KLQltX3BUYXJnZXRCb29rTWFyayhOVUxMKSwNCi0JbV9wVGFyZ2V0RG9jKE5VTEwpLA0KLQltX3BUYXJnZXRBbm5vdChOVUxMKQ0KLXsNCi19DQotDQotQ0pTX0V2ZW50SGFuZGxlcjo6fkNKU19FdmVudEhhbmRsZXIoKQ0KLXsNCi19DQotDQotdm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPbkFwcF9Jbml0KCkNCi17DQotCUluaXRpYWwoSkVUX0FQUF9JTklUKTsNCi19DQotDQotdm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPbkRvY19PcGVuKENQREZTREtfRG9jdW1lbnQqIHBEb2MsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJUYXJnZXROYW1lKQ0KLXsNCi0JSW5pdGlhbChKRVRfRE9DX09QRU4pOw0KLQ0KLQltX3BUYXJnZXREb2MgPSBwRG9jOw0KLQltX3N0clRhcmdldE5hbWUgPSBzdHJUYXJnZXROYW1lOwkNCi19DQotDQotdm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPbkRvY19XaWxsUHJpbnQoQ1BERlNES19Eb2N1bWVudCogcERvYykNCi17DQotCUluaXRpYWwoSkVUX0RPQ19XSUxMUFJJTlQpOw0KLQ0KLQltX3BUYXJnZXREb2MgPSBwRG9jOwkNCi19DQotDQotdm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPbkRvY19EaWRQcmludChDUERGU0RLX0RvY3VtZW50KiBwRG9jKQ0KLXsNCi0JSW5pdGlhbChKRVRfRE9DX0RJRFBSSU5UKTsNCi0JDQotCW1fcFRhcmdldERvYyA9IHBEb2M7CQkNCi19DQotDQotdm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPbkRvY19XaWxsU2F2ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jKQ0KLXsNCi0JSW5pdGlhbChKRVRfRE9DX1dJTExTQVZFKTsNCi0JbV9wVGFyZ2V0RG9jID0gcERvYzsJCQ0KLX0NCi0NCi12b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uRG9jX0RpZFNhdmUoQ1BERlNES19Eb2N1bWVudCogcERvYykNCi17DQotCUluaXRpYWwoSkVUX0RPQ19ESURTQVZFKTsJDQotCQ0KLQltX3BUYXJnZXREb2MgPSBwRG9jOwkNCi19DQotDQotdm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPbkRvY19XaWxsQ2xvc2UoQ1BERlNES19Eb2N1bWVudCogcERvYykNCi17DQotCUluaXRpYWwoSkVUX0RPQ19XSUxMQ0xPU0UpOw0KLQ0KLQltX3BUYXJnZXREb2MgPSBwRG9jOwkNCi19DQotDQotdm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPblBhZ2VfT3BlbihDUERGU0RLX0RvY3VtZW50KiBwRG9jKQ0KLXsNCi0JSW5pdGlhbChKRVRfUEFHRV9PUEVOKTsNCi0NCi0JbV9wVGFyZ2V0RG9jID0gcERvYzsNCi19DQotDQotdm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPblBhZ2VfQ2xvc2UoQ1BERlNES19Eb2N1bWVudCogcERvYykNCi17DQotCUluaXRpYWwoSkVUX1BBR0VfQ0xPU0UpOw0KLQkNCi0JbV9wVGFyZ2V0RG9jID0gcERvYzsNCi19DQotDQotdm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPblBhZ2VfSW5WaWV3KENQREZTREtfRG9jdW1lbnQqIHBEb2MpDQotew0KLQlJbml0aWFsKEpFVF9QQUdFX0lOVklFVyk7DQotCQ0KLQltX3BUYXJnZXREb2MgPSBwRG9jOw0KLX0NCi0NCi12b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uUGFnZV9PdXRWaWV3KENQREZTREtfRG9jdW1lbnQqIHBEb2MpDQotew0KLQlJbml0aWFsKEpFVF9QQUdFX09VVFZJRVcpOw0KLQkNCi0JbV9wVGFyZ2V0RG9jID0gcERvYzsNCi19DQotDQotdm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPbkZpZWxkX01vdXNlRW50ZXIoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCkNCi17DQotCUluaXRpYWwoSkVUX0ZJRUxEX01PVVNFRU5URVIpOw0KLQ0KLQltX2JNb2RpZmllciA9IGJNb2RpZmllcjsNCi0JbV9iU2hpZnQgPSBiU2hpZnQ7DQotDQotCUFTU0VSVChwVGFyZ2V0ICE9IE5VTEwpOw0KLQltX3N0clRhcmdldE5hbWUgPSBwVGFyZ2V0LT5HZXRGdWxsTmFtZSgpOw0KLX0NCi0NCi12b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uRmllbGRfTW91c2VFeGl0KEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQpDQotew0KLQlJbml0aWFsKEpFVF9GSUVMRF9NT1VTRUVYSVQpOw0KLQ0KLQltX2JNb2RpZmllciA9IGJNb2RpZmllcjsNCi0JbV9iU2hpZnQgPSBiU2hpZnQ7DQotCUFTU0VSVChwVGFyZ2V0ICE9IE5VTEwpOw0KLQltX3N0clRhcmdldE5hbWUgPSBwVGFyZ2V0LT5HZXRGdWxsTmFtZSgpOwkNCi19DQotDQotdm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPbkZpZWxkX01vdXNlRG93bihGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkKiBwVGFyZ2V0KQ0KLXsNCi0JSW5pdGlhbChKRVRfRklFTERfTU9VU0VET1dOKTsNCi0JbV9lRXZlbnRUeXBlID0gSkVUX0ZJRUxEX01PVVNFRE9XTjsNCi0JDQotCW1fYk1vZGlmaWVyID0gYk1vZGlmaWVyOw0KLQltX2JTaGlmdCA9IGJTaGlmdDsJDQotCUFTU0VSVChwVGFyZ2V0ICE9IE5VTEwpOw0KLQltX3N0clRhcmdldE5hbWUgPSBwVGFyZ2V0LT5HZXRGdWxsTmFtZSgpOw0KLX0NCi0NCi12b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uRmllbGRfTW91c2VVcChGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkKiBwVGFyZ2V0KQ0KLXsNCi0JSW5pdGlhbChKRVRfRklFTERfTU9VU0VVUCk7DQotDQotCW1fYk1vZGlmaWVyID0gYk1vZGlmaWVyOw0KLQltX2JTaGlmdCA9IGJTaGlmdDsNCi0JQVNTRVJUKHBUYXJnZXQgIT0gTlVMTCk7DQotCW1fc3RyVGFyZ2V0TmFtZSA9IHBUYXJnZXQtPkdldEZ1bGxOYW1lKCk7DQotfQ0KLQ0KLXZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6T25GaWVsZF9Gb2N1cyhGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkKiBwVGFyZ2V0LCANCi0JCQkJCQkJCQkgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIFZhbHVlKQ0KLXsNCi0JSW5pdGlhbChKRVRfRklFTERfRk9DVVMpOw0KLQ0KLQltX2JNb2RpZmllciA9IGJNb2RpZmllcjsNCi0JbV9iU2hpZnQgPSBiU2hpZnQ7ICANCi0JQVNTRVJUKHBUYXJnZXQgIT0gTlVMTCk7DQotCW1fc3RyVGFyZ2V0TmFtZSA9IHBUYXJnZXQtPkdldEZ1bGxOYW1lKCk7DQotCW1fcFZhbHVlID0gKENGWF9XaWRlU3RyaW5nKikmVmFsdWU7DQotfQ0KLQ0KLXZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6T25GaWVsZF9CbHVyKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsDQotCQkJCQkJCQkJY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIFZhbHVlKQ0KLXsNCi0JSW5pdGlhbChKRVRfRklFTERfQkxVUik7DQotDQotCW1fYk1vZGlmaWVyID0gYk1vZGlmaWVyOw0KLQltX2JTaGlmdCA9IGJTaGlmdDsNCi0JQVNTRVJUKHBUYXJnZXQgIT0gTlVMTCk7DQotCW1fc3RyVGFyZ2V0TmFtZSA9IHBUYXJnZXQtPkdldEZ1bGxOYW1lKCk7DQotCW1fcFZhbHVlID0gKENGWF9XaWRlU3RyaW5nKikmVmFsdWU7CQ0KLX0NCi0NCi12b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uRmllbGRfS2V5c3Ryb2tlKGludCBuQ29tbWl0S2V5LCBDRlhfV2lkZVN0cmluZyAmc3RyQ2hhbmdlLA0KLQkJCQkJCQkJCQkgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZUV4LCBGWF9CT09MIEtleURvd24sDQotCQkJCQkJCQkJCSBGWF9CT09MIGJNb2RpZmllciwgaW50JiBuU2VsRW5kLCBpbnQmIG5TZWxTdGFydCwNCi0JCQkJCQkJCQkJIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCwNCi0JCQkJCQkJCQkJIENGWF9XaWRlU3RyaW5nJiBWYWx1ZSwgRlhfQk9PTCBiV2lsbENvbW1pdCwNCi0JCQkJCQkJCQkJICBGWF9CT09MIGJGaWVsZEZ1bGwsIEZYX0JPT0wmIGJSYykNCi17DQotCUluaXRpYWwoSkVUX0ZJRUxEX0tFWVNUUk9LRSk7DQotCQ0KLQltX25Db21taXRLZXkgPSBuQ29tbWl0S2V5Ow0KLQltX3BXaWRlU3RyQ2hhbmdlID0gJnN0ckNoYW5nZTsNCi0JbV9XaWRlU3RyQ2hhbmdlRXggPSBzdHJDaGFuZ2VFeDsNCi0JbV9iS2V5RG93biA9IEtleURvd247DQotCW1fYk1vZGlmaWVyID0gYk1vZGlmaWVyOw0KLQltX3BJU2VsRW5kID0gJm5TZWxFbmQ7DQotCW1fcElTZWxTdGFydCA9ICZuU2VsU3RhcnQ7DQotCW1fYlNoaWZ0ID0gYlNoaWZ0OwkNCi0JQVNTRVJUKHBUYXJnZXQgIT0gTlVMTCk7DQotCW1fc3RyVGFyZ2V0TmFtZSA9IHBUYXJnZXQtPkdldEZ1bGxOYW1lKCk7DQotCW1fcFZhbHVlID0gJlZhbHVlOw0KLQltX2JXaWxsQ29tbWl0ID0gYldpbGxDb21taXQ7CQ0KLQltX3BiUmMgPSAmYlJjOw0KLQltX2JGaWVsZEZ1bGwgPSBiRmllbGRGdWxsOw0KLX0NCi0NCi12b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uRmllbGRfVmFsaWRhdGUoQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0ckNoYW5nZUV4LA0KLQkJCQkJCQkJCQlGWF9CT09MIGJLZXlEb3duLCBGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsDQotCQkJCQkJCQkJCUNQREZfRm9ybUZpZWxkKiBwVGFyZ2V0LCBDRlhfV2lkZVN0cmluZyYgVmFsdWUsIEZYX0JPT0wmIGJSYykNCi17DQotCUluaXRpYWwoSkVUX0ZJRUxEX1ZBTElEQVRFKTsNCi0JDQotCW1fcFdpZGVTdHJDaGFuZ2UgPSAmc3RyQ2hhbmdlOw0KLQltX1dpZGVTdHJDaGFuZ2VFeCA9IHN0ckNoYW5nZUV4OwkNCi0JbV9iS2V5RG93biA9IGJLZXlEb3duOw0KLQltX2JNb2RpZmllciA9IGJNb2RpZmllcjsNCi0JbV9iU2hpZnQgPSBiU2hpZnQ7DQotCUFTU0VSVChwVGFyZ2V0ICE9IE5VTEwpOw0KLQltX3N0clRhcmdldE5hbWUgPSBwVGFyZ2V0LT5HZXRGdWxsTmFtZSgpOw0KLQltX3BWYWx1ZSA9ICZWYWx1ZTsJDQotCW1fcGJSYyA9ICZiUmM7CQ0KLX0NCi0NCi12b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uRmllbGRfQ2FsY3VsYXRlKENQREZfRm9ybUZpZWxkKiBwU291cmNlLCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCwgDQotCQkJCQkJCQkJCSBDRlhfV2lkZVN0cmluZyYgVmFsdWUsIEZYX0JPT0wmIGJSYykNCi17DQotCUluaXRpYWwoSkVUX0ZJRUxEX0NBTENVTEFURSk7DQotDQotCWlmIChwU291cmNlKQ0KLQkJbV9zdHJTb3VyY2VOYW1lID0gcFNvdXJjZS0+R2V0RnVsbE5hbWUoKTsNCi0JQVNTRVJUKHBUYXJnZXQgIT0gTlVMTCk7DQotCW1fc3RyVGFyZ2V0TmFtZSA9IHBUYXJnZXQtPkdldEZ1bGxOYW1lKCk7DQotICAgIG1fcFZhbHVlID0gJlZhbHVlOw0KLQltX3BiUmMgPSAmYlJjOw0KLX0NCi0NCi12b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uRmllbGRfRm9ybWF0KGludCBuQ29tbWl0S2V5LCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCwNCi0JCQkJCQkJCQkgIENGWF9XaWRlU3RyaW5nJiBWYWx1ZSwgRlhfQk9PTCBiV2lsbENvbW1pdCkNCi17DQotCUluaXRpYWwoSkVUX0ZJRUxEX0ZPUk1BVCk7DQotCQ0KLQltX25Db21taXRLZXkgPSBuQ29tbWl0S2V5OwkgIA0KLQlBU1NFUlQocFRhcmdldCAhPSBOVUxMKTsNCi0JbV9zdHJUYXJnZXROYW1lID0gcFRhcmdldC0+R2V0RnVsbE5hbWUoKTsNCi0JbV9wVmFsdWUgPSAmVmFsdWU7DQotCW1fYldpbGxDb21taXQgPSBiV2lsbENvbW1pdDsNCi19DQotDQotdm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPblNjcmVlbl9Gb2N1cyhGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pDQotew0KLQlJbml0aWFsKEpFVF9TQ1JFRU5fRk9DVVMpOw0KLQ0KLQltX2JNb2RpZmllciA9IGJNb2RpZmllcjsNCi0JbV9iU2hpZnQgPSBiU2hpZnQ7DQotCW1fcFRhcmdldEFubm90ID0gcFNjcmVlbjsNCi19DQotDQotdm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPblNjcmVlbl9CbHVyKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikNCi17DQotCUluaXRpYWwoSkVUX1NDUkVFTl9CTFVSKTsNCi0NCi0JbV9iTW9kaWZpZXIgPSBiTW9kaWZpZXI7DQotCW1fYlNoaWZ0ID0gYlNoaWZ0Ow0KLQltX3BUYXJnZXRBbm5vdCA9IHBTY3JlZW47DQotfQ0KLQ0KLXZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6T25TY3JlZW5fT3BlbihGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pDQotew0KLQlJbml0aWFsKEpFVF9TQ1JFRU5fT1BFTik7DQotDQotCW1fYk1vZGlmaWVyID0gYk1vZGlmaWVyOw0KLQltX2JTaGlmdCA9IGJTaGlmdDsNCi0JbV9wVGFyZ2V0QW5ub3QgPSBwU2NyZWVuOw0KLX0NCi0NCi12b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uU2NyZWVuX0Nsb3NlKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikNCi17DQotCUluaXRpYWwoSkVUX1NDUkVFTl9DTE9TRSk7DQotDQotCW1fYk1vZGlmaWVyID0gYk1vZGlmaWVyOw0KLQltX2JTaGlmdCA9IGJTaGlmdDsNCi0JbV9wVGFyZ2V0QW5ub3QgPSBwU2NyZWVuOw0KLX0NCi0NCi12b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uU2NyZWVuX01vdXNlRG93bihGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pDQotew0KLQlJbml0aWFsKEpFVF9TQ1JFRU5fTU9VU0VET1dOKTsNCi0NCi0JbV9iTW9kaWZpZXIgPSBiTW9kaWZpZXI7DQotCW1fYlNoaWZ0ID0gYlNoaWZ0Ow0KLQltX3BUYXJnZXRBbm5vdCA9IHBTY3JlZW47DQotfQ0KLQ0KLXZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6T25TY3JlZW5fTW91c2VVcChGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pDQotew0KLQlJbml0aWFsKEpFVF9TQ1JFRU5fTU9VU0VVUCk7DQotDQotCW1fYk1vZGlmaWVyID0gYk1vZGlmaWVyOw0KLQltX2JTaGlmdCA9IGJTaGlmdDsNCi0JbV9wVGFyZ2V0QW5ub3QgPSBwU2NyZWVuOw0KLX0NCi0NCi12b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uU2NyZWVuX01vdXNlRW50ZXIoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKQ0KLXsNCi0JSW5pdGlhbChKRVRfU0NSRUVOX01PVVNFRU5URVIpOw0KLQ0KLQltX2JNb2RpZmllciA9IGJNb2RpZmllcjsNCi0JbV9iU2hpZnQgPSBiU2hpZnQ7DQotCW1fcFRhcmdldEFubm90ID0gcFNjcmVlbjsNCi19DQotDQotdm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPblNjcmVlbl9Nb3VzZUV4aXQoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKQ0KLXsNCi0JSW5pdGlhbChKRVRfU0NSRUVOX01PVVNFRVhJVCk7DQotDQotCW1fYk1vZGlmaWVyID0gYk1vZGlmaWVyOw0KLQltX2JTaGlmdCA9IGJTaGlmdDsNCi0JbV9wVGFyZ2V0QW5ub3QgPSBwU2NyZWVuOw0KLX0NCi0NCi12b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uU2NyZWVuX0luVmlldyhGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pDQotew0KLQlJbml0aWFsKEpFVF9TQ1JFRU5fSU5WSUVXKTsNCi0NCi0JbV9iTW9kaWZpZXIgPSBiTW9kaWZpZXI7DQotCW1fYlNoaWZ0ID0gYlNoaWZ0Ow0KLQltX3BUYXJnZXRBbm5vdCA9IHBTY3JlZW47DQotfQ0KLQ0KLXZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6T25TY3JlZW5fT3V0VmlldyhGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pDQotew0KLQlJbml0aWFsKEpFVF9TQ1JFRU5fT1VUVklFVyk7DQotDQotCW1fYk1vZGlmaWVyID0gYk1vZGlmaWVyOw0KLQltX2JTaGlmdCA9IGJTaGlmdDsNCi0JbV9wVGFyZ2V0QW5ub3QgPSBwU2NyZWVuOw0KLX0NCi0NCi12b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uTGlua19Nb3VzZVVwKENQREZTREtfRG9jdW1lbnQqIHBUYXJnZXQpDQotew0KLQlJbml0aWFsKEpFVF9MSU5LX01PVVNFVVApOw0KLQkNCi0JbV9wVGFyZ2V0RG9jID0gcFRhcmdldDsJDQotfQ0KLQ0KLXZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6T25Cb29rbWFya19Nb3VzZVVwKENQREZfQm9va21hcmsqIHBCb29rTWFyaykNCi17DQotCUluaXRpYWwoSkVUX0JPT0tNQVJLX01PVVNFVVApOw0KLQ0KLQltX3BUYXJnZXRCb29rTWFyayA9IHBCb29rTWFyazsJDQotfQ0KLQ0KLXZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6T25NZW51X0V4ZWMoQ1BERlNES19Eb2N1bWVudCogcFRhcmdldCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0clRhcmdldE5hbWUpDQotew0KLQlJbml0aWFsKEpFVF9NRU5VX0VYRUMpOw0KLQ0KLQltX3BUYXJnZXREb2MgPSBwVGFyZ2V0Ow0KLQltX3N0clRhcmdldE5hbWUgPSBzdHJUYXJnZXROYW1lOw0KLX0NCi0NCi12b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uRXh0ZXJuYWxfRXhlYygpDQotew0KLQlJbml0aWFsKEpFVF9FWFRFUk5BTF9FWEVDKTsNCi19DQotDQotdm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPbkJhdGNoRXhlYyhDUERGU0RLX0RvY3VtZW50KiBwVGFyZ2V0KQ0KLXsNCi0JSW5pdGlhbChKRVRfQkFUQ0hfRVhFQyk7DQotDQotCW1fcFRhcmdldERvYyA9IHBUYXJnZXQ7CQ0KLX0NCi0NCi12b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uQ29uc29sZV9FeGVjKCkNCi17DQotCUluaXRpYWwoSkVUX0NPTlNPTEVfRVhFQyk7DQotfQ0KLQ0KLQ0KLXZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6SW5pdGlhbChKU19FVkVOVF9UIHR5cGUpDQotew0KLQltX2VFdmVudFR5cGUgPSB0eXBlOw0KLQ0KLQltX3N0clRhcmdldE5hbWUgPSBMIiI7DQotCW1fc3RyU291cmNlTmFtZSA9IEwiIjsNCi0JbV9wV2lkZVN0ckNoYW5nZSA9IE5VTEw7DQotCW1fV2lkZVN0ckNoYW5nZUR1ID0gTCIiOw0KLQltX1dpZGVTdHJDaGFuZ2VFeCA9IEwiIjsNCi0JbV9uQ29tbWl0S2V5ID0gLTE7DQotCW1fYktleURvd24gPSBGQUxTRTsNCi0JbV9iTW9kaWZpZXIgPSBGQUxTRTsNCi0JbV9iU2hpZnQgPSBGQUxTRTsNCi0JbV9wSVNlbEVuZCA9IE5VTEw7DQotCW1fblNlbEVuZER1ID0gMDsNCi0JbV9wSVNlbFN0YXJ0ID0gTlVMTDsNCi0JbV9uU2VsU3RhcnREdSA9IDA7DQotCW1fYldpbGxDb21taXQgPSBGQUxTRTsNCi0JbV9wVmFsdWUgPSBOVUxMOw0KLQltX2JGaWVsZEZ1bGwgPSBGQUxTRTsNCi0JbV9wYlJjID0gTlVMTDsNCi0JbV9iUmNEdSA9IEZBTFNFOw0KLQ0KLQltX3BTb3VyY2VEb2MgPSBOVUxMOw0KLQltX3BUYXJnZXRCb29rTWFyayA9IE5VTEw7DQotCW1fcFRhcmdldERvYyA9IE5VTEw7DQotCW1fcFRhcmdldEFubm90ID0gTlVMTDsNCi0NCi0JbV9iVmFsaWQgPSBUUlVFOw0KLX0NCi0NCi12b2lkIENKU19FdmVudEhhbmRsZXI6OkRlc3Ryb3koKQ0KLXsNCi0JbV9iVmFsaWQgPSBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBDSlNfRXZlbnRIYW5kbGVyOjpJc1ZhbGlkKCkNCi17DQotCXJldHVybiBtX2JWYWxpZDsNCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgJiBDSlNfRXZlbnRIYW5kbGVyOjpDaGFuZ2UoKQ0KLXsNCi0JaWYgKG1fcFdpZGVTdHJDaGFuZ2UgIT0gTlVMTCkNCi0JCXJldHVybiAqbV9wV2lkZVN0ckNoYW5nZTsNCi0JZWxzZQ0KLQl7DQotCQlyZXR1cm4gbV9XaWRlU3RyQ2hhbmdlRHU7DQotCX0NCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgQ0pTX0V2ZW50SGFuZGxlcjo6Q2hhbmdlRXgoKQ0KLXsNCi0JcmV0dXJuIG1fV2lkZVN0ckNoYW5nZUV4Ow0KLX0NCi0NCi1pbnQgQ0pTX0V2ZW50SGFuZGxlcjo6Q29tbWl0S2V5KCkNCi17DQotCXJldHVybiBtX25Db21taXRLZXk7DQotfQ0KLQ0KLUZYX0JPT0wgQ0pTX0V2ZW50SGFuZGxlcjo6RmllbGRGdWxsKCkNCi17DQotCXJldHVybiBtX2JGaWVsZEZ1bGw7DQotfQ0KLQ0KLUZYX0JPT0wgQ0pTX0V2ZW50SGFuZGxlcjo6S2V5RG93bigpDQotew0KLQlyZXR1cm4gbV9iS2V5RG93bjsNCi19DQotDQotRlhfQk9PTCBDSlNfRXZlbnRIYW5kbGVyOjpNb2RpZmllcigpDQotew0KLQlyZXR1cm4gbV9iTW9kaWZpZXI7DQotfQ0KLQ0KLUZYX0xQQ1dTVFIgQ0pTX0V2ZW50SGFuZGxlcjo6TmFtZSgpDQotew0KLQlzd2l0Y2ggKG1fZUV2ZW50VHlwZSkNCi0Jew0KLQljYXNlIEpFVF9BUFBfSU5JVDoJCQlyZXR1cm4gKEZYX0xQQ1dTVFIpTCJJbml0IjsNCi0JY2FzZSBKRVRfQkFUQ0hfRVhFQzoJCXJldHVybiAoRlhfTFBDV1NUUilMIkV4ZWMiOw0KLQljYXNlIEpFVF9CT09LTUFSS19NT1VTRVVQOglyZXR1cm4gKEZYX0xQQ1dTVFIpTCJNb3VzZSBVcCI7DQotCWNhc2UgSkVUX0NPTlNPTEVfRVhFQzoJCXJldHVybiAoRlhfTFBDV1NUUilMIkV4ZWMiOw0KLQljYXNlIEpFVF9ET0NfRElEUFJJTlQ6CQlyZXR1cm4gKEZYX0xQQ1dTVFIpTCJEaWRQcmludCI7DQotCWNhc2UgSkVUX0RPQ19ESURTQVZFOgkJcmV0dXJuIChGWF9MUENXU1RSKUwiRGlkU2F2ZSI7DQotCWNhc2UgSkVUX0RPQ19PUEVOOgkJCXJldHVybiAoRlhfTFBDV1NUUilMIk9wZW4iOw0KLQljYXNlIEpFVF9ET0NfV0lMTENMT1NFOgkJcmV0dXJuIChGWF9MUENXU1RSKUwiV2lsbENsb3NlIjsNCi0JY2FzZSBKRVRfRE9DX1dJTExQUklOVDoJCXJldHVybiAoRlhfTFBDV1NUUilMIldpbGxQcmludCI7DQotCWNhc2UgSkVUX0RPQ19XSUxMU0FWRToJCXJldHVybiAoRlhfTFBDV1NUUilMIldpbGxTYXZlIjsNCi0JY2FzZSBKRVRfRVhURVJOQUxfRVhFQzoJCXJldHVybiAoRlhfTFBDV1NUUilMIkV4ZWMiOw0KLQljYXNlIEpFVF9GSUVMRF9GT0NVUzoJCQ0KLQljYXNlIEpFVF9TQ1JFRU5fRk9DVVM6CQlyZXR1cm4gKEZYX0xQQ1dTVFIpTCJGb2N1cyI7DQotCWNhc2UgSkVUX0ZJRUxEX0JMVVI6CQkNCi0JY2FzZSBKRVRfU0NSRUVOX0JMVVI6CQlyZXR1cm4gKEZYX0xQQ1dTVFIpTCJCbHVyIjsNCi0JY2FzZSBKRVRfRklFTERfTU9VU0VET1dOOg0KLQljYXNlIEpFVF9TQ1JFRU5fTU9VU0VET1dOOglyZXR1cm4gKEZYX0xQQ1dTVFIpTCJNb3VzZSBEb3duIjsNCi0JY2FzZSBKRVRfRklFTERfTU9VU0VVUDoJCQ0KLQljYXNlIEpFVF9TQ1JFRU5fTU9VU0VVUDoJcmV0dXJuIChGWF9MUENXU1RSKUwiTW91c2UgVXAiOw0KLQljYXNlIEpFVF9GSUVMRF9NT1VTRUVOVEVSOg0KLQljYXNlIEpFVF9TQ1JFRU5fTU9VU0VFTlRFUjoJcmV0dXJuIChGWF9MUENXU1RSKUwiTW91c2UgRW50ZXIiOw0KLQljYXNlIEpFVF9GSUVMRF9NT1VTRUVYSVQ6DQotCWNhc2UgSkVUX1NDUkVFTl9NT1VTRUVYSVQ6CXJldHVybiAoRlhfTFBDV1NUUilMIk1vdXNlIEV4aXQiOw0KLQljYXNlIEpFVF9GSUVMRF9DQUxDVUxBVEU6CXJldHVybiAoRlhfTFBDV1NUUilMIkNhbGN1bGF0ZSI7DQotCWNhc2UgSkVUX0ZJRUxEX0ZPUk1BVDoJCXJldHVybiAoRlhfTFBDV1NUUilMIkZvcm1hdCI7DQotCWNhc2UgSkVUX0ZJRUxEX0tFWVNUUk9LRToJcmV0dXJuIChGWF9MUENXU1RSKUwiS2V5c3Ryb2tlIjsNCi0JY2FzZSBKRVRfRklFTERfVkFMSURBVEU6CXJldHVybiAoRlhfTFBDV1NUUilMIlZhbGlkYXRlIjsNCi0JY2FzZSBKRVRfTElOS19NT1VTRVVQOgkJcmV0dXJuIChGWF9MUENXU1RSKUwiTW91c2UgVXAiOw0KLQljYXNlIEpFVF9NRU5VX0VYRUM6CQkJcmV0dXJuIChGWF9MUENXU1RSKUwiRXhlYyI7DQotCWNhc2UgSkVUX1BBR0VfT1BFTjoJCQ0KLQljYXNlIEpFVF9TQ1JFRU5fT1BFTjoJCXJldHVybiAoRlhfTFBDV1NUUilMIk9wZW4iOw0KLQljYXNlIEpFVF9QQUdFX0NMT1NFOg0KLQljYXNlIEpFVF9TQ1JFRU5fQ0xPU0U6CQlyZXR1cm4gKEZYX0xQQ1dTVFIpTCJDbG9zZSI7DQotCWNhc2UgSkVUX1NDUkVFTl9JTlZJRVc6CQ0KLQljYXNlIEpFVF9QQUdFX0lOVklFVzoJCXJldHVybiAoRlhfTFBDV1NUUilMIkluVmlldyI7DQotCWNhc2UgSkVUX1BBR0VfT1VUVklFVzoNCi0JY2FzZSBKRVRfU0NSRUVOX09VVFZJRVc6CXJldHVybiAoRlhfTFBDV1NUUilMIk91dFZpZXciOw0KLQlkZWZhdWx0Og0KLQkJcmV0dXJuIChGWF9MUENXU1RSKUwiIjsNCi0JfQ0KLQ0KLQlyZXR1cm4gKEZYX0xQQ1dTVFIpTCIiOw0KLX0NCi0NCi1GWF9MUENXU1RSIENKU19FdmVudEhhbmRsZXI6OlR5cGUoKQ0KLXsNCi0Jc3dpdGNoIChtX2VFdmVudFR5cGUpDQotCXsNCi0JY2FzZSBKRVRfQVBQX0lOSVQ6CQkJcmV0dXJuIChGWF9MUENXU1RSKUwiQXBwIjsNCi0JY2FzZSBKRVRfQkFUQ0hfRVhFQzoJCXJldHVybiAoRlhfTFBDV1NUUilMIkJhdGNoIjsNCi0JY2FzZSBKRVRfQk9PS01BUktfTU9VU0VVUDoJcmV0dXJuIChGWF9MUENXU1RSKUwiQm9va01hcmsiOwkNCi0JY2FzZSBKRVRfQ09OU09MRV9FWEVDOgkJcmV0dXJuIChGWF9MUENXU1RSKUwiQ29uc29sZSI7DQotCWNhc2UgSkVUX0RPQ19ESURQUklOVDoNCi0JY2FzZSBKRVRfRE9DX0RJRFNBVkU6DQotCWNhc2UgSkVUX0RPQ19PUEVOOg0KLQljYXNlIEpFVF9ET0NfV0lMTENMT1NFOg0KLQljYXNlIEpFVF9ET0NfV0lMTFBSSU5UOg0KLQljYXNlIEpFVF9ET0NfV0lMTFNBVkU6CQlyZXR1cm4gKEZYX0xQQ1dTVFIpTCJEb2MiOw0KLQljYXNlIEpFVF9FWFRFUk5BTF9FWEVDOgkJcmV0dXJuIChGWF9MUENXU1RSKUwiRXh0ZXJuYWwiOw0KLQljYXNlIEpFVF9GSUVMRF9CTFVSOg0KLQljYXNlIEpFVF9GSUVMRF9GT0NVUzoNCi0JY2FzZSBKRVRfRklFTERfTU9VU0VET1dOOg0KLQljYXNlIEpFVF9GSUVMRF9NT1VTRUVOVEVSOg0KLQljYXNlIEpFVF9GSUVMRF9NT1VTRUVYSVQ6DQotCWNhc2UgSkVUX0ZJRUxEX01PVVNFVVA6DQotCWNhc2UgSkVUX0ZJRUxEX0NBTENVTEFURToNCi0JY2FzZSBKRVRfRklFTERfRk9STUFUOg0KLQljYXNlIEpFVF9GSUVMRF9LRVlTVFJPS0U6DQotCWNhc2UgSkVUX0ZJRUxEX1ZBTElEQVRFOglyZXR1cm4gKEZYX0xQQ1dTVFIpTCJGaWVsZCI7DQotCWNhc2UgSkVUX1NDUkVFTl9GT0NVUzoNCi0JY2FzZSBKRVRfU0NSRUVOX0JMVVI6DQotCWNhc2UgSkVUX1NDUkVFTl9PUEVOOg0KLQljYXNlIEpFVF9TQ1JFRU5fQ0xPU0U6DQotCWNhc2UgSkVUX1NDUkVFTl9NT1VTRURPV046DQotCWNhc2UgSkVUX1NDUkVFTl9NT1VTRVVQOg0KLQljYXNlIEpFVF9TQ1JFRU5fTU9VU0VFTlRFUjoNCi0JY2FzZSBKRVRfU0NSRUVOX01PVVNFRVhJVDoNCi0JY2FzZSBKRVRfU0NSRUVOX0lOVklFVzoNCi0JY2FzZSBKRVRfU0NSRUVOX09VVFZJRVc6CXJldHVybiAoRlhfTFBDV1NUUilMIlNjcmVlbiI7DQotCWNhc2UgSkVUX0xJTktfTU9VU0VVUDoJCXJldHVybiAoRlhfTFBDV1NUUilMIkxpbmsiOwkNCi0JY2FzZSBKRVRfTUVOVV9FWEVDOgkJCXJldHVybiAoRlhfTFBDV1NUUilMIk1lbnUiOw0KLQljYXNlIEpFVF9QQUdFX09QRU46DQotCWNhc2UgSkVUX1BBR0VfQ0xPU0U6DQotCWNhc2UgSkVUX1BBR0VfSU5WSUVXOg0KLQljYXNlIEpFVF9QQUdFX09VVFZJRVc6cmV0dXJuIChGWF9MUENXU1RSKUwiUGFnZSI7DQotCWRlZmF1bHQ6DQotCQlyZXR1cm4gKEZYX0xQQ1dTVFIpTCIiOw0KLQl9DQotDQotCXJldHVybiAoRlhfTFBDV1NUUilMIiI7DQotfQ0KLQ0KLUZYX0JPT0wmIENKU19FdmVudEhhbmRsZXI6OlJjKCkNCi17DQotCWlmIChtX3BiUmMgIT0gTlVMTCkNCi0JCXJldHVybiAqbV9wYlJjOw0KLQllbHNlDQotCXsJICAgIA0KLQkJcmV0dXJuIG1fYlJjRHU7DQotCX0NCi19DQotDQotaW50ICYgQ0pTX0V2ZW50SGFuZGxlcjo6U2VsRW5kKCkNCi17DQotCWlmIChtX3BJU2VsRW5kICE9IE5VTEwpDQotCXsNCi0JCXJldHVybiAqbV9wSVNlbEVuZDsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCXJldHVybiBtX25TZWxFbmREdTsNCi0JfQ0KLX0NCi0NCi1pbnQgJiBDSlNfRXZlbnRIYW5kbGVyOjpTZWxTdGFydCgpDQotew0KLQlpZiAobV9wSVNlbFN0YXJ0ICE9IE5VTEwpDQotCQlyZXR1cm4gKiBtX3BJU2VsU3RhcnQ7DQotCWVsc2UNCi0Jew0KLQkJcmV0dXJuIG1fblNlbFN0YXJ0RHU7DQotCX0NCi19DQotDQotRlhfQk9PTCBDSlNfRXZlbnRIYW5kbGVyOjpTaGlmdCgpDQotew0KLQlyZXR1cm4gbV9iU2hpZnQ7DQotfQ0KLQ0KLUZpZWxkKiBDSlNfRXZlbnRIYW5kbGVyOjpTb3VyY2UoKQ0KLXsNCi0JQVNTRVJUKG1fcEpTQ29udGV4dCAhPSBOVUxMKTsNCi0NCi0JQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gbV9wSlNDb250ZXh0LT5HZXRKU1J1bnRpbWUoKTsNCi0NCi0JSlNGWE9iamVjdCAgcERvY09iaiA9IEpTX05ld0Z4RHluYW1pY09iaigqcFJ1bnRpbWUsIG1fcEpTQ29udGV4dCwgSlNfR2V0T2JqRGVmbklEKCpwUnVudGltZSwgTCJEb2N1bWVudCIpKTsNCi0JQVNTRVJUKHBEb2NPYmouSXNFbXB0eSgpID09IEZBTFNFKTsNCi0JSlNGWE9iamVjdCAgcEZpZWxkT2JqID0gSlNfTmV3RnhEeW5hbWljT2JqKCpwUnVudGltZSwgbV9wSlNDb250ZXh0LCBKU19HZXRPYmpEZWZuSUQoKnBSdW50aW1lLCBMIkZpZWxkIikpOw0KLQlBU1NFUlQocEZpZWxkT2JqLklzRW1wdHkoKSA9PSBGQUxTRSk7DQotDQotCUNKU19Eb2N1bWVudCogcEpTRG9jdW1lbnQgPSAoQ0pTX0RvY3VtZW50KilKU19HZXRQcml2YXRlKHBEb2NPYmopOw0KLQlBU1NFUlQocEpTRG9jdW1lbnQgIT0gTlVMTCk7DQotCURvY3VtZW50KiBwRG9jdW1lbnQgPSAoRG9jdW1lbnQqKXBKU0RvY3VtZW50LT5HZXRFbWJlZE9iamVjdCgpOw0KLQlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOw0KLSAJaWYgKG1fcFRhcmdldERvYyAhPSBOVUxMKQ0KLSAJCXBEb2N1bWVudC0+QXR0YWNoRG9jKG1fcFRhcmdldERvYyk7DQotIAllbHNlDQotIAkJcERvY3VtZW50LT5BdHRhY2hEb2MobV9wSlNDb250ZXh0LT5HZXRSZWFkZXJEb2N1bWVudCgpKTsNCi0JDQotCS8vaWYgKG1fcFNvdXJjZUZpZWxkID09IE5VTEwpDQotCS8vCXJldHVybiBOVUxMOw0KLQkvL0NSQU9fV2lkZ2V0ICpwV2lkZ2V0ID0gSUJDTF9XaWRnZXQ6OkdldFdpZGdldChtX3BTb3VyY2VGaWVsZCk7DQotCS8vQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSBwV2lkZ2V0LT5HZXRGb3JtRmllbGQoKTsNCi0JLy9BU1NFUlQocEZvcm1GaWVsZCk7DQotCS8vQ0ZYX1dpZGVTdHJpbmcgY3NGaWVsZE5hbWUgPSBwRm9ybUZpZWxkLT5HZXRGdWxsTmFtZSgpOw0KLQlDSlNfRmllbGQgKiBwSlNGaWVsZCA9IChDSlNfRmllbGQqKUpTX0dldFByaXZhdGUocEZpZWxkT2JqKTsNCi0JQVNTRVJUKHBKU0ZpZWxkICE9IE5VTEwpOw0KLQlGaWVsZCAqIHBGaWVsZCA9IChGaWVsZCAqKXBKU0ZpZWxkLT5HZXRFbWJlZE9iamVjdCgpOyANCi0JQVNTRVJUKHBGaWVsZCAhPSBOVUxMKTsNCi0JcEZpZWxkLT5BdHRhY2hGaWVsZChwRG9jdW1lbnQsIG1fc3RyU291cmNlTmFtZSk7DQotCXJldHVybiBwRmllbGQ7CQ0KLX0NCi0NCi1GaWVsZCogQ0pTX0V2ZW50SGFuZGxlcjo6VGFyZ2V0X0ZpZWxkKCkNCi17DQotCUFTU0VSVChtX3BKU0NvbnRleHQgIT0gTlVMTCk7DQotDQotCUNKU19SdW50aW1lKiBwUnVudGltZSA9IG1fcEpTQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7DQotDQotCUpTRlhPYmplY3QgcERvY09iaiA9IEpTX05ld0Z4RHluYW1pY09iaigqcFJ1bnRpbWUsIG1fcEpTQ29udGV4dCwgSlNfR2V0T2JqRGVmbklEKCpwUnVudGltZSwgTCJEb2N1bWVudCIpKTsNCi0JQVNTRVJUKHBEb2NPYmouSXNFbXB0eSgpID09IEZBTFNFKTsNCi0JSlNGWE9iamVjdCBwRmllbGRPYmogPSBKU19OZXdGeER5bmFtaWNPYmooKnBSdW50aW1lLCBtX3BKU0NvbnRleHQsIEpTX0dldE9iakRlZm5JRCgqcFJ1bnRpbWUsIEwiRmllbGQiKSk7DQotCUFTU0VSVChwRmllbGRPYmouSXNFbXB0eSgpID09IEZBTFNFKTsNCi0NCi0JQ0pTX0RvY3VtZW50KiBwSlNEb2N1bWVudCA9IChDSlNfRG9jdW1lbnQqKUpTX0dldFByaXZhdGUocERvY09iaik7DQotCUFTU0VSVChwSlNEb2N1bWVudCAhPSBOVUxMKTsNCi0JRG9jdW1lbnQqIHBEb2N1bWVudCA9IChEb2N1bWVudCopcEpTRG9jdW1lbnQtPkdldEVtYmVkT2JqZWN0KCk7DQotIAlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOw0KLSAJaWYgKG1fcFRhcmdldERvYyAhPSBOVUxMKQ0KLSAJCXBEb2N1bWVudC0+QXR0YWNoRG9jKG1fcFRhcmdldERvYyk7DQotIAllbHNlDQotIAkJcERvY3VtZW50LT5BdHRhY2hEb2MobV9wSlNDb250ZXh0LT5HZXRSZWFkZXJEb2N1bWVudCgpKTsNCi0JDQotCUNKU19GaWVsZCogcEpTRmllbGQgPSAoQ0pTX0ZpZWxkKilKU19HZXRQcml2YXRlKHBGaWVsZE9iaik7DQotCUFTU0VSVChwSlNGaWVsZCAhPSBOVUxMKTsNCi0NCi0JRmllbGQqIHBGaWVsZCA9IChGaWVsZCAqKXBKU0ZpZWxkLT5HZXRFbWJlZE9iamVjdCgpOyANCi0JQVNTRVJUKHBGaWVsZCAhPSBOVUxMKTsNCi0NCi0JcEZpZWxkLT5BdHRhY2hGaWVsZChwRG9jdW1lbnQsIG1fc3RyVGFyZ2V0TmFtZSk7DQotCXJldHVybiBwRmllbGQ7CQ0KLX0NCi0NCi1DRlhfV2lkZVN0cmluZyYgQ0pTX0V2ZW50SGFuZGxlcjo6VmFsdWUoKQ0KLXsNCi0JcmV0dXJuICptX3BWYWx1ZTsNCi19DQotDQotRlhfQk9PTCBDSlNfRXZlbnRIYW5kbGVyOjpXaWxsQ29tbWl0KCkNCi17DQotCXJldHVybiBtX2JXaWxsQ29tbWl0Ow0KLX0NCi0NCi1DRlhfV2lkZVN0cmluZyBDSlNfRXZlbnRIYW5kbGVyOjpUYXJnZXROYW1lKCkNCi17DQotCXJldHVybiBtX3N0clRhcmdldE5hbWU7DQotfQ0KLQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSmF2YVNjcmlwdC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9JSmF2YVNjcmlwdC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19FdmVudEhhbmRsZXIuaCIKKy8vI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19SZXNNZ3IuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfQ29udGV4dC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19SdW50aW1lLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0RlZmluZS5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19PYmplY3QuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfVmFsdWUuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvRG9jdW1lbnQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvRmllbGQuaCIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDSlNfRXZlbnRIYW5kbGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ0pTX0V2ZW50SGFuZGxlcjo6Q0pTX0V2ZW50SGFuZGxlcihDSlNfQ29udGV4dCAqIHBDb250ZXh0KQkgOgorCW1fcEpTQ29udGV4dChwQ29udGV4dCksCisJbV9lRXZlbnRUeXBlKEpFVF9VTktOT1dOKSwKKwltX2JWYWxpZChGQUxTRSksCisJbV9wV2lkZVN0ckNoYW5nZShOVUxMKSwKKwltX25Db21taXRLZXkoLTEpLAorCW1fYktleURvd24oRkFMU0UpLAorCW1fYk1vZGlmaWVyKEZBTFNFKSwKKwltX2JTaGlmdChGQUxTRSksCisJbV9wSVNlbEVuZChOVUxMKSwKKwltX25TZWxFbmREdSgwKSwKKwltX3BJU2VsU3RhcnQoTlVMTCksCisJbV9uU2VsU3RhcnREdSgwKSwKKwltX2JXaWxsQ29tbWl0KEZBTFNFKSwKKwltX3BWYWx1ZShOVUxMKSwKKwltX2JGaWVsZEZ1bGwoRkFMU0UpLAorCW1fcGJSYyhOVUxMKSwKKwltX2JSY0R1KEZBTFNFKSwKKwltX3BTb3VyY2VEb2MoTlVMTCksCisJbV9wVGFyZ2V0Qm9va01hcmsoTlVMTCksCisJbV9wVGFyZ2V0RG9jKE5VTEwpLAorCW1fcFRhcmdldEFubm90KE5VTEwpCit7Cit9CisKK0NKU19FdmVudEhhbmRsZXI6On5DSlNfRXZlbnRIYW5kbGVyKCkKK3sKK30KKwordm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPbkFwcF9Jbml0KCkKK3sKKwlJbml0aWFsKEpFVF9BUFBfSU5JVCk7Cit9CisKK3ZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6T25Eb2NfT3BlbihDUERGU0RLX0RvY3VtZW50KiBwRG9jLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyVGFyZ2V0TmFtZSkKK3sKKwlJbml0aWFsKEpFVF9ET0NfT1BFTik7CisKKwltX3BUYXJnZXREb2MgPSBwRG9jOworCW1fc3RyVGFyZ2V0TmFtZSA9IHN0clRhcmdldE5hbWU7CQorfQorCit2b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uRG9jX1dpbGxQcmludChDUERGU0RLX0RvY3VtZW50KiBwRG9jKQoreworCUluaXRpYWwoSkVUX0RPQ19XSUxMUFJJTlQpOworCisJbV9wVGFyZ2V0RG9jID0gcERvYzsJCit9CisKK3ZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6T25Eb2NfRGlkUHJpbnQoQ1BERlNES19Eb2N1bWVudCogcERvYykKK3sKKwlJbml0aWFsKEpFVF9ET0NfRElEUFJJTlQpOworCQorCW1fcFRhcmdldERvYyA9IHBEb2M7CQkKK30KKwordm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPbkRvY19XaWxsU2F2ZShDUERGU0RLX0RvY3VtZW50KiBwRG9jKQoreworCUluaXRpYWwoSkVUX0RPQ19XSUxMU0FWRSk7CisJbV9wVGFyZ2V0RG9jID0gcERvYzsJCQorfQorCit2b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uRG9jX0RpZFNhdmUoQ1BERlNES19Eb2N1bWVudCogcERvYykKK3sKKwlJbml0aWFsKEpFVF9ET0NfRElEU0FWRSk7CQorCQorCW1fcFRhcmdldERvYyA9IHBEb2M7CQorfQorCit2b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uRG9jX1dpbGxDbG9zZShDUERGU0RLX0RvY3VtZW50KiBwRG9jKQoreworCUluaXRpYWwoSkVUX0RPQ19XSUxMQ0xPU0UpOworCisJbV9wVGFyZ2V0RG9jID0gcERvYzsJCit9CisKK3ZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6T25QYWdlX09wZW4oQ1BERlNES19Eb2N1bWVudCogcERvYykKK3sKKwlJbml0aWFsKEpFVF9QQUdFX09QRU4pOworCisJbV9wVGFyZ2V0RG9jID0gcERvYzsKK30KKwordm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPblBhZ2VfQ2xvc2UoQ1BERlNES19Eb2N1bWVudCogcERvYykKK3sKKwlJbml0aWFsKEpFVF9QQUdFX0NMT1NFKTsKKwkKKwltX3BUYXJnZXREb2MgPSBwRG9jOworfQorCit2b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uUGFnZV9JblZpZXcoQ1BERlNES19Eb2N1bWVudCogcERvYykKK3sKKwlJbml0aWFsKEpFVF9QQUdFX0lOVklFVyk7CisJCisJbV9wVGFyZ2V0RG9jID0gcERvYzsKK30KKwordm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPblBhZ2VfT3V0VmlldyhDUERGU0RLX0RvY3VtZW50KiBwRG9jKQoreworCUluaXRpYWwoSkVUX1BBR0VfT1VUVklFVyk7CisJCisJbV9wVGFyZ2V0RG9jID0gcERvYzsKK30KKwordm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPbkZpZWxkX01vdXNlRW50ZXIoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCkKK3sKKwlJbml0aWFsKEpFVF9GSUVMRF9NT1VTRUVOVEVSKTsKKworCW1fYk1vZGlmaWVyID0gYk1vZGlmaWVyOworCW1fYlNoaWZ0ID0gYlNoaWZ0OworCisJQVNTRVJUKHBUYXJnZXQgIT0gTlVMTCk7CisJbV9zdHJUYXJnZXROYW1lID0gcFRhcmdldC0+R2V0RnVsbE5hbWUoKTsKK30KKwordm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPbkZpZWxkX01vdXNlRXhpdChGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkKiBwVGFyZ2V0KQoreworCUluaXRpYWwoSkVUX0ZJRUxEX01PVVNFRVhJVCk7CisKKwltX2JNb2RpZmllciA9IGJNb2RpZmllcjsKKwltX2JTaGlmdCA9IGJTaGlmdDsKKwlBU1NFUlQocFRhcmdldCAhPSBOVUxMKTsKKwltX3N0clRhcmdldE5hbWUgPSBwVGFyZ2V0LT5HZXRGdWxsTmFtZSgpOwkKK30KKwordm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPbkZpZWxkX01vdXNlRG93bihGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkKiBwVGFyZ2V0KQoreworCUluaXRpYWwoSkVUX0ZJRUxEX01PVVNFRE9XTik7CisJbV9lRXZlbnRUeXBlID0gSkVUX0ZJRUxEX01PVVNFRE9XTjsKKwkKKwltX2JNb2RpZmllciA9IGJNb2RpZmllcjsKKwltX2JTaGlmdCA9IGJTaGlmdDsJCisJQVNTRVJUKHBUYXJnZXQgIT0gTlVMTCk7CisJbV9zdHJUYXJnZXROYW1lID0gcFRhcmdldC0+R2V0RnVsbE5hbWUoKTsKK30KKwordm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPbkZpZWxkX01vdXNlVXAoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCkKK3sKKwlJbml0aWFsKEpFVF9GSUVMRF9NT1VTRVVQKTsKKworCW1fYk1vZGlmaWVyID0gYk1vZGlmaWVyOworCW1fYlNoaWZ0ID0gYlNoaWZ0OworCUFTU0VSVChwVGFyZ2V0ICE9IE5VTEwpOworCW1fc3RyVGFyZ2V0TmFtZSA9IHBUYXJnZXQtPkdldEZ1bGxOYW1lKCk7Cit9CisKK3ZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6T25GaWVsZF9Gb2N1cyhGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZfRm9ybUZpZWxkKiBwVGFyZ2V0LCAKKwkJCQkJCQkJCSBjb25zdCBDRlhfV2lkZVN0cmluZyYgVmFsdWUpCit7CisJSW5pdGlhbChKRVRfRklFTERfRk9DVVMpOworCisJbV9iTW9kaWZpZXIgPSBiTW9kaWZpZXI7CisJbV9iU2hpZnQgPSBiU2hpZnQ7ICAKKwlBU1NFUlQocFRhcmdldCAhPSBOVUxMKTsKKwltX3N0clRhcmdldE5hbWUgPSBwVGFyZ2V0LT5HZXRGdWxsTmFtZSgpOworCW1fcFZhbHVlID0gKENGWF9XaWRlU3RyaW5nKikmVmFsdWU7Cit9CisKK3ZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6T25GaWVsZF9CbHVyKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERl9Gb3JtRmllbGQqIHBUYXJnZXQsCisJCQkJCQkJCQljb25zdCBDRlhfV2lkZVN0cmluZyYgVmFsdWUpCit7CisJSW5pdGlhbChKRVRfRklFTERfQkxVUik7CisKKwltX2JNb2RpZmllciA9IGJNb2RpZmllcjsKKwltX2JTaGlmdCA9IGJTaGlmdDsKKwlBU1NFUlQocFRhcmdldCAhPSBOVUxMKTsKKwltX3N0clRhcmdldE5hbWUgPSBwVGFyZ2V0LT5HZXRGdWxsTmFtZSgpOworCW1fcFZhbHVlID0gKENGWF9XaWRlU3RyaW5nKikmVmFsdWU7CQorfQorCit2b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uRmllbGRfS2V5c3Ryb2tlKGludCBuQ29tbWl0S2V5LCBDRlhfV2lkZVN0cmluZyAmc3RyQ2hhbmdlLAorCQkJCQkJCQkJCSBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyQ2hhbmdlRXgsIEZYX0JPT0wgS2V5RG93biwKKwkJCQkJCQkJCQkgRlhfQk9PTCBiTW9kaWZpZXIsIGludCYgblNlbEVuZCwgaW50JiBuU2VsU3RhcnQsCisJCQkJCQkJCQkJIEZYX0JPT0wgYlNoaWZ0LCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCwKKwkJCQkJCQkJCQkgQ0ZYX1dpZGVTdHJpbmcmIFZhbHVlLCBGWF9CT09MIGJXaWxsQ29tbWl0LAorCQkJCQkJCQkJCSAgRlhfQk9PTCBiRmllbGRGdWxsLCBGWF9CT09MJiBiUmMpCit7CisJSW5pdGlhbChKRVRfRklFTERfS0VZU1RST0tFKTsKKwkKKwltX25Db21taXRLZXkgPSBuQ29tbWl0S2V5OworCW1fcFdpZGVTdHJDaGFuZ2UgPSAmc3RyQ2hhbmdlOworCW1fV2lkZVN0ckNoYW5nZUV4ID0gc3RyQ2hhbmdlRXg7CisJbV9iS2V5RG93biA9IEtleURvd247CisJbV9iTW9kaWZpZXIgPSBiTW9kaWZpZXI7CisJbV9wSVNlbEVuZCA9ICZuU2VsRW5kOworCW1fcElTZWxTdGFydCA9ICZuU2VsU3RhcnQ7CisJbV9iU2hpZnQgPSBiU2hpZnQ7CQorCUFTU0VSVChwVGFyZ2V0ICE9IE5VTEwpOworCW1fc3RyVGFyZ2V0TmFtZSA9IHBUYXJnZXQtPkdldEZ1bGxOYW1lKCk7CisJbV9wVmFsdWUgPSAmVmFsdWU7CisJbV9iV2lsbENvbW1pdCA9IGJXaWxsQ29tbWl0OwkKKwltX3BiUmMgPSAmYlJjOworCW1fYkZpZWxkRnVsbCA9IGJGaWVsZEZ1bGw7Cit9CisKK3ZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6T25GaWVsZF9WYWxpZGF0ZShDRlhfV2lkZVN0cmluZyYgc3RyQ2hhbmdlLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyQ2hhbmdlRXgsCisJCQkJCQkJCQkJRlhfQk9PTCBiS2V5RG93biwgRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LAorCQkJCQkJCQkJCUNQREZfRm9ybUZpZWxkKiBwVGFyZ2V0LCBDRlhfV2lkZVN0cmluZyYgVmFsdWUsIEZYX0JPT0wmIGJSYykKK3sKKwlJbml0aWFsKEpFVF9GSUVMRF9WQUxJREFURSk7CisJCisJbV9wV2lkZVN0ckNoYW5nZSA9ICZzdHJDaGFuZ2U7CisJbV9XaWRlU3RyQ2hhbmdlRXggPSBzdHJDaGFuZ2VFeDsJCisJbV9iS2V5RG93biA9IGJLZXlEb3duOworCW1fYk1vZGlmaWVyID0gYk1vZGlmaWVyOworCW1fYlNoaWZ0ID0gYlNoaWZ0OworCUFTU0VSVChwVGFyZ2V0ICE9IE5VTEwpOworCW1fc3RyVGFyZ2V0TmFtZSA9IHBUYXJnZXQtPkdldEZ1bGxOYW1lKCk7CisJbV9wVmFsdWUgPSAmVmFsdWU7CQorCW1fcGJSYyA9ICZiUmM7CQorfQorCit2b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uRmllbGRfQ2FsY3VsYXRlKENQREZfRm9ybUZpZWxkKiBwU291cmNlLCBDUERGX0Zvcm1GaWVsZCogcFRhcmdldCwgCisJCQkJCQkJCQkJIENGWF9XaWRlU3RyaW5nJiBWYWx1ZSwgRlhfQk9PTCYgYlJjKQoreworCUluaXRpYWwoSkVUX0ZJRUxEX0NBTENVTEFURSk7CisKKwlpZiAocFNvdXJjZSkKKwkJbV9zdHJTb3VyY2VOYW1lID0gcFNvdXJjZS0+R2V0RnVsbE5hbWUoKTsKKwlBU1NFUlQocFRhcmdldCAhPSBOVUxMKTsKKwltX3N0clRhcmdldE5hbWUgPSBwVGFyZ2V0LT5HZXRGdWxsTmFtZSgpOworICAgIG1fcFZhbHVlID0gJlZhbHVlOworCW1fcGJSYyA9ICZiUmM7Cit9CisKK3ZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6T25GaWVsZF9Gb3JtYXQoaW50IG5Db21taXRLZXksIENQREZfRm9ybUZpZWxkKiBwVGFyZ2V0LAorCQkJCQkJCQkJICBDRlhfV2lkZVN0cmluZyYgVmFsdWUsIEZYX0JPT0wgYldpbGxDb21taXQpCit7CisJSW5pdGlhbChKRVRfRklFTERfRk9STUFUKTsKKwkKKwltX25Db21taXRLZXkgPSBuQ29tbWl0S2V5OwkgIAorCUFTU0VSVChwVGFyZ2V0ICE9IE5VTEwpOworCW1fc3RyVGFyZ2V0TmFtZSA9IHBUYXJnZXQtPkdldEZ1bGxOYW1lKCk7CisJbV9wVmFsdWUgPSAmVmFsdWU7CisJbV9iV2lsbENvbW1pdCA9IGJXaWxsQ29tbWl0OworfQorCit2b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uU2NyZWVuX0ZvY3VzKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikKK3sKKwlJbml0aWFsKEpFVF9TQ1JFRU5fRk9DVVMpOworCisJbV9iTW9kaWZpZXIgPSBiTW9kaWZpZXI7CisJbV9iU2hpZnQgPSBiU2hpZnQ7CisJbV9wVGFyZ2V0QW5ub3QgPSBwU2NyZWVuOworfQorCit2b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uU2NyZWVuX0JsdXIoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKQoreworCUluaXRpYWwoSkVUX1NDUkVFTl9CTFVSKTsKKworCW1fYk1vZGlmaWVyID0gYk1vZGlmaWVyOworCW1fYlNoaWZ0ID0gYlNoaWZ0OworCW1fcFRhcmdldEFubm90ID0gcFNjcmVlbjsKK30KKwordm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPblNjcmVlbl9PcGVuKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikKK3sKKwlJbml0aWFsKEpFVF9TQ1JFRU5fT1BFTik7CisKKwltX2JNb2RpZmllciA9IGJNb2RpZmllcjsKKwltX2JTaGlmdCA9IGJTaGlmdDsKKwltX3BUYXJnZXRBbm5vdCA9IHBTY3JlZW47Cit9CisKK3ZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6T25TY3JlZW5fQ2xvc2UoRlhfQk9PTCBiTW9kaWZpZXIsIEZYX0JPT0wgYlNoaWZ0LCBDUERGU0RLX0Fubm90KiBwU2NyZWVuKQoreworCUluaXRpYWwoSkVUX1NDUkVFTl9DTE9TRSk7CisKKwltX2JNb2RpZmllciA9IGJNb2RpZmllcjsKKwltX2JTaGlmdCA9IGJTaGlmdDsKKwltX3BUYXJnZXRBbm5vdCA9IHBTY3JlZW47Cit9CisKK3ZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6T25TY3JlZW5fTW91c2VEb3duKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikKK3sKKwlJbml0aWFsKEpFVF9TQ1JFRU5fTU9VU0VET1dOKTsKKworCW1fYk1vZGlmaWVyID0gYk1vZGlmaWVyOworCW1fYlNoaWZ0ID0gYlNoaWZ0OworCW1fcFRhcmdldEFubm90ID0gcFNjcmVlbjsKK30KKwordm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPblNjcmVlbl9Nb3VzZVVwKEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikKK3sKKwlJbml0aWFsKEpFVF9TQ1JFRU5fTU9VU0VVUCk7CisKKwltX2JNb2RpZmllciA9IGJNb2RpZmllcjsKKwltX2JTaGlmdCA9IGJTaGlmdDsKKwltX3BUYXJnZXRBbm5vdCA9IHBTY3JlZW47Cit9CisKK3ZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6T25TY3JlZW5fTW91c2VFbnRlcihGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pCit7CisJSW5pdGlhbChKRVRfU0NSRUVOX01PVVNFRU5URVIpOworCisJbV9iTW9kaWZpZXIgPSBiTW9kaWZpZXI7CisJbV9iU2hpZnQgPSBiU2hpZnQ7CisJbV9wVGFyZ2V0QW5ub3QgPSBwU2NyZWVuOworfQorCit2b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uU2NyZWVuX01vdXNlRXhpdChGWF9CT09MIGJNb2RpZmllciwgRlhfQk9PTCBiU2hpZnQsIENQREZTREtfQW5ub3QqIHBTY3JlZW4pCit7CisJSW5pdGlhbChKRVRfU0NSRUVOX01PVVNFRVhJVCk7CisKKwltX2JNb2RpZmllciA9IGJNb2RpZmllcjsKKwltX2JTaGlmdCA9IGJTaGlmdDsKKwltX3BUYXJnZXRBbm5vdCA9IHBTY3JlZW47Cit9CisKK3ZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6T25TY3JlZW5fSW5WaWV3KEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikKK3sKKwlJbml0aWFsKEpFVF9TQ1JFRU5fSU5WSUVXKTsKKworCW1fYk1vZGlmaWVyID0gYk1vZGlmaWVyOworCW1fYlNoaWZ0ID0gYlNoaWZ0OworCW1fcFRhcmdldEFubm90ID0gcFNjcmVlbjsKK30KKwordm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPblNjcmVlbl9PdXRWaWV3KEZYX0JPT0wgYk1vZGlmaWVyLCBGWF9CT09MIGJTaGlmdCwgQ1BERlNES19Bbm5vdCogcFNjcmVlbikKK3sKKwlJbml0aWFsKEpFVF9TQ1JFRU5fT1VUVklFVyk7CisKKwltX2JNb2RpZmllciA9IGJNb2RpZmllcjsKKwltX2JTaGlmdCA9IGJTaGlmdDsKKwltX3BUYXJnZXRBbm5vdCA9IHBTY3JlZW47Cit9CisKK3ZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6T25MaW5rX01vdXNlVXAoQ1BERlNES19Eb2N1bWVudCogcFRhcmdldCkKK3sKKwlJbml0aWFsKEpFVF9MSU5LX01PVVNFVVApOworCQorCW1fcFRhcmdldERvYyA9IHBUYXJnZXQ7CQorfQorCit2b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uQm9va21hcmtfTW91c2VVcChDUERGX0Jvb2ttYXJrKiBwQm9va01hcmspCit7CisJSW5pdGlhbChKRVRfQk9PS01BUktfTU9VU0VVUCk7CisKKwltX3BUYXJnZXRCb29rTWFyayA9IHBCb29rTWFyazsJCit9CisKK3ZvaWQgQ0pTX0V2ZW50SGFuZGxlcjo6T25NZW51X0V4ZWMoQ1BERlNES19Eb2N1bWVudCogcFRhcmdldCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0clRhcmdldE5hbWUpCit7CisJSW5pdGlhbChKRVRfTUVOVV9FWEVDKTsKKworCW1fcFRhcmdldERvYyA9IHBUYXJnZXQ7CisJbV9zdHJUYXJnZXROYW1lID0gc3RyVGFyZ2V0TmFtZTsKK30KKwordm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPbkV4dGVybmFsX0V4ZWMoKQoreworCUluaXRpYWwoSkVUX0VYVEVSTkFMX0VYRUMpOworfQorCit2b2lkIENKU19FdmVudEhhbmRsZXI6Ok9uQmF0Y2hFeGVjKENQREZTREtfRG9jdW1lbnQqIHBUYXJnZXQpCit7CisJSW5pdGlhbChKRVRfQkFUQ0hfRVhFQyk7CisKKwltX3BUYXJnZXREb2MgPSBwVGFyZ2V0OwkKK30KKwordm9pZCBDSlNfRXZlbnRIYW5kbGVyOjpPbkNvbnNvbGVfRXhlYygpCit7CisJSW5pdGlhbChKRVRfQ09OU09MRV9FWEVDKTsKK30KKworCit2b2lkIENKU19FdmVudEhhbmRsZXI6OkluaXRpYWwoSlNfRVZFTlRfVCB0eXBlKQoreworCW1fZUV2ZW50VHlwZSA9IHR5cGU7CisKKwltX3N0clRhcmdldE5hbWUgPSBMIiI7CisJbV9zdHJTb3VyY2VOYW1lID0gTCIiOworCW1fcFdpZGVTdHJDaGFuZ2UgPSBOVUxMOworCW1fV2lkZVN0ckNoYW5nZUR1ID0gTCIiOworCW1fV2lkZVN0ckNoYW5nZUV4ID0gTCIiOworCW1fbkNvbW1pdEtleSA9IC0xOworCW1fYktleURvd24gPSBGQUxTRTsKKwltX2JNb2RpZmllciA9IEZBTFNFOworCW1fYlNoaWZ0ID0gRkFMU0U7CisJbV9wSVNlbEVuZCA9IE5VTEw7CisJbV9uU2VsRW5kRHUgPSAwOworCW1fcElTZWxTdGFydCA9IE5VTEw7CisJbV9uU2VsU3RhcnREdSA9IDA7CisJbV9iV2lsbENvbW1pdCA9IEZBTFNFOworCW1fcFZhbHVlID0gTlVMTDsKKwltX2JGaWVsZEZ1bGwgPSBGQUxTRTsKKwltX3BiUmMgPSBOVUxMOworCW1fYlJjRHUgPSBGQUxTRTsKKworCW1fcFNvdXJjZURvYyA9IE5VTEw7CisJbV9wVGFyZ2V0Qm9va01hcmsgPSBOVUxMOworCW1fcFRhcmdldERvYyA9IE5VTEw7CisJbV9wVGFyZ2V0QW5ub3QgPSBOVUxMOworCisJbV9iVmFsaWQgPSBUUlVFOworfQorCit2b2lkIENKU19FdmVudEhhbmRsZXI6OkRlc3Ryb3koKQoreworCW1fYlZhbGlkID0gRkFMU0U7Cit9CisKK0ZYX0JPT0wgQ0pTX0V2ZW50SGFuZGxlcjo6SXNWYWxpZCgpCit7CisJcmV0dXJuIG1fYlZhbGlkOworfQorCitDRlhfV2lkZVN0cmluZyAmIENKU19FdmVudEhhbmRsZXI6OkNoYW5nZSgpCit7CisJaWYgKG1fcFdpZGVTdHJDaGFuZ2UgIT0gTlVMTCkKKwkJcmV0dXJuICptX3BXaWRlU3RyQ2hhbmdlOworCWVsc2UKKwl7CisJCXJldHVybiBtX1dpZGVTdHJDaGFuZ2VEdTsKKwl9Cit9CisKK0NGWF9XaWRlU3RyaW5nIENKU19FdmVudEhhbmRsZXI6OkNoYW5nZUV4KCkKK3sKKwlyZXR1cm4gbV9XaWRlU3RyQ2hhbmdlRXg7Cit9CisKK2ludCBDSlNfRXZlbnRIYW5kbGVyOjpDb21taXRLZXkoKQoreworCXJldHVybiBtX25Db21taXRLZXk7Cit9CisKK0ZYX0JPT0wgQ0pTX0V2ZW50SGFuZGxlcjo6RmllbGRGdWxsKCkKK3sKKwlyZXR1cm4gbV9iRmllbGRGdWxsOworfQorCitGWF9CT09MIENKU19FdmVudEhhbmRsZXI6OktleURvd24oKQoreworCXJldHVybiBtX2JLZXlEb3duOworfQorCitGWF9CT09MIENKU19FdmVudEhhbmRsZXI6Ok1vZGlmaWVyKCkKK3sKKwlyZXR1cm4gbV9iTW9kaWZpZXI7Cit9CisKK0ZYX0xQQ1dTVFIgQ0pTX0V2ZW50SGFuZGxlcjo6TmFtZSgpCit7CisJc3dpdGNoIChtX2VFdmVudFR5cGUpCisJeworCWNhc2UgSkVUX0FQUF9JTklUOgkJCXJldHVybiAoRlhfTFBDV1NUUilMIkluaXQiOworCWNhc2UgSkVUX0JBVENIX0VYRUM6CQlyZXR1cm4gKEZYX0xQQ1dTVFIpTCJFeGVjIjsKKwljYXNlIEpFVF9CT09LTUFSS19NT1VTRVVQOglyZXR1cm4gKEZYX0xQQ1dTVFIpTCJNb3VzZSBVcCI7CisJY2FzZSBKRVRfQ09OU09MRV9FWEVDOgkJcmV0dXJuIChGWF9MUENXU1RSKUwiRXhlYyI7CisJY2FzZSBKRVRfRE9DX0RJRFBSSU5UOgkJcmV0dXJuIChGWF9MUENXU1RSKUwiRGlkUHJpbnQiOworCWNhc2UgSkVUX0RPQ19ESURTQVZFOgkJcmV0dXJuIChGWF9MUENXU1RSKUwiRGlkU2F2ZSI7CisJY2FzZSBKRVRfRE9DX09QRU46CQkJcmV0dXJuIChGWF9MUENXU1RSKUwiT3BlbiI7CisJY2FzZSBKRVRfRE9DX1dJTExDTE9TRToJCXJldHVybiAoRlhfTFBDV1NUUilMIldpbGxDbG9zZSI7CisJY2FzZSBKRVRfRE9DX1dJTExQUklOVDoJCXJldHVybiAoRlhfTFBDV1NUUilMIldpbGxQcmludCI7CisJY2FzZSBKRVRfRE9DX1dJTExTQVZFOgkJcmV0dXJuIChGWF9MUENXU1RSKUwiV2lsbFNhdmUiOworCWNhc2UgSkVUX0VYVEVSTkFMX0VYRUM6CQlyZXR1cm4gKEZYX0xQQ1dTVFIpTCJFeGVjIjsKKwljYXNlIEpFVF9GSUVMRF9GT0NVUzoJCQorCWNhc2UgSkVUX1NDUkVFTl9GT0NVUzoJCXJldHVybiAoRlhfTFBDV1NUUilMIkZvY3VzIjsKKwljYXNlIEpFVF9GSUVMRF9CTFVSOgkJCisJY2FzZSBKRVRfU0NSRUVOX0JMVVI6CQlyZXR1cm4gKEZYX0xQQ1dTVFIpTCJCbHVyIjsKKwljYXNlIEpFVF9GSUVMRF9NT1VTRURPV046CisJY2FzZSBKRVRfU0NSRUVOX01PVVNFRE9XTjoJcmV0dXJuIChGWF9MUENXU1RSKUwiTW91c2UgRG93biI7CisJY2FzZSBKRVRfRklFTERfTU9VU0VVUDoJCQorCWNhc2UgSkVUX1NDUkVFTl9NT1VTRVVQOglyZXR1cm4gKEZYX0xQQ1dTVFIpTCJNb3VzZSBVcCI7CisJY2FzZSBKRVRfRklFTERfTU9VU0VFTlRFUjoKKwljYXNlIEpFVF9TQ1JFRU5fTU9VU0VFTlRFUjoJcmV0dXJuIChGWF9MUENXU1RSKUwiTW91c2UgRW50ZXIiOworCWNhc2UgSkVUX0ZJRUxEX01PVVNFRVhJVDoKKwljYXNlIEpFVF9TQ1JFRU5fTU9VU0VFWElUOglyZXR1cm4gKEZYX0xQQ1dTVFIpTCJNb3VzZSBFeGl0IjsKKwljYXNlIEpFVF9GSUVMRF9DQUxDVUxBVEU6CXJldHVybiAoRlhfTFBDV1NUUilMIkNhbGN1bGF0ZSI7CisJY2FzZSBKRVRfRklFTERfRk9STUFUOgkJcmV0dXJuIChGWF9MUENXU1RSKUwiRm9ybWF0IjsKKwljYXNlIEpFVF9GSUVMRF9LRVlTVFJPS0U6CXJldHVybiAoRlhfTFBDV1NUUilMIktleXN0cm9rZSI7CisJY2FzZSBKRVRfRklFTERfVkFMSURBVEU6CXJldHVybiAoRlhfTFBDV1NUUilMIlZhbGlkYXRlIjsKKwljYXNlIEpFVF9MSU5LX01PVVNFVVA6CQlyZXR1cm4gKEZYX0xQQ1dTVFIpTCJNb3VzZSBVcCI7CisJY2FzZSBKRVRfTUVOVV9FWEVDOgkJCXJldHVybiAoRlhfTFBDV1NUUilMIkV4ZWMiOworCWNhc2UgSkVUX1BBR0VfT1BFTjoJCQorCWNhc2UgSkVUX1NDUkVFTl9PUEVOOgkJcmV0dXJuIChGWF9MUENXU1RSKUwiT3BlbiI7CisJY2FzZSBKRVRfUEFHRV9DTE9TRToKKwljYXNlIEpFVF9TQ1JFRU5fQ0xPU0U6CQlyZXR1cm4gKEZYX0xQQ1dTVFIpTCJDbG9zZSI7CisJY2FzZSBKRVRfU0NSRUVOX0lOVklFVzoJCisJY2FzZSBKRVRfUEFHRV9JTlZJRVc6CQlyZXR1cm4gKEZYX0xQQ1dTVFIpTCJJblZpZXciOworCWNhc2UgSkVUX1BBR0VfT1VUVklFVzoKKwljYXNlIEpFVF9TQ1JFRU5fT1VUVklFVzoJcmV0dXJuIChGWF9MUENXU1RSKUwiT3V0VmlldyI7CisJZGVmYXVsdDoKKwkJcmV0dXJuIChGWF9MUENXU1RSKUwiIjsKKwl9CisKKwlyZXR1cm4gKEZYX0xQQ1dTVFIpTCIiOworfQorCitGWF9MUENXU1RSIENKU19FdmVudEhhbmRsZXI6OlR5cGUoKQoreworCXN3aXRjaCAobV9lRXZlbnRUeXBlKQorCXsKKwljYXNlIEpFVF9BUFBfSU5JVDoJCQlyZXR1cm4gKEZYX0xQQ1dTVFIpTCJBcHAiOworCWNhc2UgSkVUX0JBVENIX0VYRUM6CQlyZXR1cm4gKEZYX0xQQ1dTVFIpTCJCYXRjaCI7CisJY2FzZSBKRVRfQk9PS01BUktfTU9VU0VVUDoJcmV0dXJuIChGWF9MUENXU1RSKUwiQm9va01hcmsiOwkKKwljYXNlIEpFVF9DT05TT0xFX0VYRUM6CQlyZXR1cm4gKEZYX0xQQ1dTVFIpTCJDb25zb2xlIjsKKwljYXNlIEpFVF9ET0NfRElEUFJJTlQ6CisJY2FzZSBKRVRfRE9DX0RJRFNBVkU6CisJY2FzZSBKRVRfRE9DX09QRU46CisJY2FzZSBKRVRfRE9DX1dJTExDTE9TRToKKwljYXNlIEpFVF9ET0NfV0lMTFBSSU5UOgorCWNhc2UgSkVUX0RPQ19XSUxMU0FWRToJCXJldHVybiAoRlhfTFBDV1NUUilMIkRvYyI7CisJY2FzZSBKRVRfRVhURVJOQUxfRVhFQzoJCXJldHVybiAoRlhfTFBDV1NUUilMIkV4dGVybmFsIjsKKwljYXNlIEpFVF9GSUVMRF9CTFVSOgorCWNhc2UgSkVUX0ZJRUxEX0ZPQ1VTOgorCWNhc2UgSkVUX0ZJRUxEX01PVVNFRE9XTjoKKwljYXNlIEpFVF9GSUVMRF9NT1VTRUVOVEVSOgorCWNhc2UgSkVUX0ZJRUxEX01PVVNFRVhJVDoKKwljYXNlIEpFVF9GSUVMRF9NT1VTRVVQOgorCWNhc2UgSkVUX0ZJRUxEX0NBTENVTEFURToKKwljYXNlIEpFVF9GSUVMRF9GT1JNQVQ6CisJY2FzZSBKRVRfRklFTERfS0VZU1RST0tFOgorCWNhc2UgSkVUX0ZJRUxEX1ZBTElEQVRFOglyZXR1cm4gKEZYX0xQQ1dTVFIpTCJGaWVsZCI7CisJY2FzZSBKRVRfU0NSRUVOX0ZPQ1VTOgorCWNhc2UgSkVUX1NDUkVFTl9CTFVSOgorCWNhc2UgSkVUX1NDUkVFTl9PUEVOOgorCWNhc2UgSkVUX1NDUkVFTl9DTE9TRToKKwljYXNlIEpFVF9TQ1JFRU5fTU9VU0VET1dOOgorCWNhc2UgSkVUX1NDUkVFTl9NT1VTRVVQOgorCWNhc2UgSkVUX1NDUkVFTl9NT1VTRUVOVEVSOgorCWNhc2UgSkVUX1NDUkVFTl9NT1VTRUVYSVQ6CisJY2FzZSBKRVRfU0NSRUVOX0lOVklFVzoKKwljYXNlIEpFVF9TQ1JFRU5fT1VUVklFVzoJcmV0dXJuIChGWF9MUENXU1RSKUwiU2NyZWVuIjsKKwljYXNlIEpFVF9MSU5LX01PVVNFVVA6CQlyZXR1cm4gKEZYX0xQQ1dTVFIpTCJMaW5rIjsJCisJY2FzZSBKRVRfTUVOVV9FWEVDOgkJCXJldHVybiAoRlhfTFBDV1NUUilMIk1lbnUiOworCWNhc2UgSkVUX1BBR0VfT1BFTjoKKwljYXNlIEpFVF9QQUdFX0NMT1NFOgorCWNhc2UgSkVUX1BBR0VfSU5WSUVXOgorCWNhc2UgSkVUX1BBR0VfT1VUVklFVzpyZXR1cm4gKEZYX0xQQ1dTVFIpTCJQYWdlIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gKEZYX0xQQ1dTVFIpTCIiOworCX0KKworCXJldHVybiAoRlhfTFBDV1NUUilMIiI7Cit9CisKK0ZYX0JPT0wmIENKU19FdmVudEhhbmRsZXI6OlJjKCkKK3sKKwlpZiAobV9wYlJjICE9IE5VTEwpCisJCXJldHVybiAqbV9wYlJjOworCWVsc2UKKwl7CSAgICAKKwkJcmV0dXJuIG1fYlJjRHU7CisJfQorfQorCitpbnQgJiBDSlNfRXZlbnRIYW5kbGVyOjpTZWxFbmQoKQoreworCWlmIChtX3BJU2VsRW5kICE9IE5VTEwpCisJeworCQlyZXR1cm4gKm1fcElTZWxFbmQ7CisJfQorCWVsc2UKKwl7CisJCXJldHVybiBtX25TZWxFbmREdTsKKwl9Cit9CisKK2ludCAmIENKU19FdmVudEhhbmRsZXI6OlNlbFN0YXJ0KCkKK3sKKwlpZiAobV9wSVNlbFN0YXJ0ICE9IE5VTEwpCisJCXJldHVybiAqIG1fcElTZWxTdGFydDsKKwllbHNlCisJeworCQlyZXR1cm4gbV9uU2VsU3RhcnREdTsKKwl9Cit9CisKK0ZYX0JPT0wgQ0pTX0V2ZW50SGFuZGxlcjo6U2hpZnQoKQoreworCXJldHVybiBtX2JTaGlmdDsKK30KKworRmllbGQqIENKU19FdmVudEhhbmRsZXI6OlNvdXJjZSgpCit7CisJQVNTRVJUKG1fcEpTQ29udGV4dCAhPSBOVUxMKTsKKworCUNKU19SdW50aW1lKiBwUnVudGltZSA9IG1fcEpTQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7CisKKwlKU0ZYT2JqZWN0ICBwRG9jT2JqID0gSlNfTmV3RnhEeW5hbWljT2JqKCpwUnVudGltZSwgbV9wSlNDb250ZXh0LCBKU19HZXRPYmpEZWZuSUQoKnBSdW50aW1lLCBMIkRvY3VtZW50IikpOworCUFTU0VSVChwRG9jT2JqLklzRW1wdHkoKSA9PSBGQUxTRSk7CisJSlNGWE9iamVjdCAgcEZpZWxkT2JqID0gSlNfTmV3RnhEeW5hbWljT2JqKCpwUnVudGltZSwgbV9wSlNDb250ZXh0LCBKU19HZXRPYmpEZWZuSUQoKnBSdW50aW1lLCBMIkZpZWxkIikpOworCUFTU0VSVChwRmllbGRPYmouSXNFbXB0eSgpID09IEZBTFNFKTsKKworCUNKU19Eb2N1bWVudCogcEpTRG9jdW1lbnQgPSAoQ0pTX0RvY3VtZW50KilKU19HZXRQcml2YXRlKHBEb2NPYmopOworCUFTU0VSVChwSlNEb2N1bWVudCAhPSBOVUxMKTsKKwlEb2N1bWVudCogcERvY3VtZW50ID0gKERvY3VtZW50KilwSlNEb2N1bWVudC0+R2V0RW1iZWRPYmplY3QoKTsKKwlBU1NFUlQocERvY3VtZW50ICE9IE5VTEwpOworIAlpZiAobV9wVGFyZ2V0RG9jICE9IE5VTEwpCisgCQlwRG9jdW1lbnQtPkF0dGFjaERvYyhtX3BUYXJnZXREb2MpOworIAllbHNlCisgCQlwRG9jdW1lbnQtPkF0dGFjaERvYyhtX3BKU0NvbnRleHQtPkdldFJlYWRlckRvY3VtZW50KCkpOworCQorCS8vaWYgKG1fcFNvdXJjZUZpZWxkID09IE5VTEwpCisJLy8JcmV0dXJuIE5VTEw7CisJLy9DUkFPX1dpZGdldCAqcFdpZGdldCA9IElCQ0xfV2lkZ2V0OjpHZXRXaWRnZXQobV9wU291cmNlRmllbGQpOworCS8vQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSBwV2lkZ2V0LT5HZXRGb3JtRmllbGQoKTsKKwkvL0FTU0VSVChwRm9ybUZpZWxkKTsKKwkvL0NGWF9XaWRlU3RyaW5nIGNzRmllbGROYW1lID0gcEZvcm1GaWVsZC0+R2V0RnVsbE5hbWUoKTsKKwlDSlNfRmllbGQgKiBwSlNGaWVsZCA9IChDSlNfRmllbGQqKUpTX0dldFByaXZhdGUocEZpZWxkT2JqKTsKKwlBU1NFUlQocEpTRmllbGQgIT0gTlVMTCk7CisJRmllbGQgKiBwRmllbGQgPSAoRmllbGQgKilwSlNGaWVsZC0+R2V0RW1iZWRPYmplY3QoKTsgCisJQVNTRVJUKHBGaWVsZCAhPSBOVUxMKTsKKwlwRmllbGQtPkF0dGFjaEZpZWxkKHBEb2N1bWVudCwgbV9zdHJTb3VyY2VOYW1lKTsKKwlyZXR1cm4gcEZpZWxkOwkKK30KKworRmllbGQqIENKU19FdmVudEhhbmRsZXI6OlRhcmdldF9GaWVsZCgpCit7CisJQVNTRVJUKG1fcEpTQ29udGV4dCAhPSBOVUxMKTsKKworCUNKU19SdW50aW1lKiBwUnVudGltZSA9IG1fcEpTQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7CisKKwlKU0ZYT2JqZWN0IHBEb2NPYmogPSBKU19OZXdGeER5bmFtaWNPYmooKnBSdW50aW1lLCBtX3BKU0NvbnRleHQsIEpTX0dldE9iakRlZm5JRCgqcFJ1bnRpbWUsIEwiRG9jdW1lbnQiKSk7CisJQVNTRVJUKHBEb2NPYmouSXNFbXB0eSgpID09IEZBTFNFKTsKKwlKU0ZYT2JqZWN0IHBGaWVsZE9iaiA9IEpTX05ld0Z4RHluYW1pY09iaigqcFJ1bnRpbWUsIG1fcEpTQ29udGV4dCwgSlNfR2V0T2JqRGVmbklEKCpwUnVudGltZSwgTCJGaWVsZCIpKTsKKwlBU1NFUlQocEZpZWxkT2JqLklzRW1wdHkoKSA9PSBGQUxTRSk7CisKKwlDSlNfRG9jdW1lbnQqIHBKU0RvY3VtZW50ID0gKENKU19Eb2N1bWVudCopSlNfR2V0UHJpdmF0ZShwRG9jT2JqKTsKKwlBU1NFUlQocEpTRG9jdW1lbnQgIT0gTlVMTCk7CisJRG9jdW1lbnQqIHBEb2N1bWVudCA9IChEb2N1bWVudCopcEpTRG9jdW1lbnQtPkdldEVtYmVkT2JqZWN0KCk7CisgCUFTU0VSVChwRG9jdW1lbnQgIT0gTlVMTCk7CisgCWlmIChtX3BUYXJnZXREb2MgIT0gTlVMTCkKKyAJCXBEb2N1bWVudC0+QXR0YWNoRG9jKG1fcFRhcmdldERvYyk7CisgCWVsc2UKKyAJCXBEb2N1bWVudC0+QXR0YWNoRG9jKG1fcEpTQ29udGV4dC0+R2V0UmVhZGVyRG9jdW1lbnQoKSk7CisJCisJQ0pTX0ZpZWxkKiBwSlNGaWVsZCA9IChDSlNfRmllbGQqKUpTX0dldFByaXZhdGUocEZpZWxkT2JqKTsKKwlBU1NFUlQocEpTRmllbGQgIT0gTlVMTCk7CisKKwlGaWVsZCogcEZpZWxkID0gKEZpZWxkICopcEpTRmllbGQtPkdldEVtYmVkT2JqZWN0KCk7IAorCUFTU0VSVChwRmllbGQgIT0gTlVMTCk7CisKKwlwRmllbGQtPkF0dGFjaEZpZWxkKHBEb2N1bWVudCwgbV9zdHJUYXJnZXROYW1lKTsKKwlyZXR1cm4gcEZpZWxkOwkKK30KKworQ0ZYX1dpZGVTdHJpbmcmIENKU19FdmVudEhhbmRsZXI6OlZhbHVlKCkKK3sKKwlyZXR1cm4gKm1fcFZhbHVlOworfQorCitGWF9CT09MIENKU19FdmVudEhhbmRsZXI6OldpbGxDb21taXQoKQoreworCXJldHVybiBtX2JXaWxsQ29tbWl0OworfQorCitDRlhfV2lkZVN0cmluZyBDSlNfRXZlbnRIYW5kbGVyOjpUYXJnZXROYW1lKCkKK3sKKwlyZXR1cm4gbV9zdHJUYXJnZXROYW1lOworfQorCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvSlNfR2xvYmFsRGF0YS5jcHAgYi9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L0pTX0dsb2JhbERhdGEuY3BwCmluZGV4IDk3YmJhOGQuLjIyMDc3MjYgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvSlNfR2xvYmFsRGF0YS5jcHAKKysrIGIvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9KU19HbG9iYWxEYXRhLmNwcApAQCAtMSw1ODEgKzEsNTgxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0phdmFTY3JpcHQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0lKYXZhU2NyaXB0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19HbG9iYWxEYXRhLmgiDQotDQotI2RlZmluZSBKU19NQVhHTE9CQUxEQVRBCQkJKDEwMjQgKiA0IC0gOCkNCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0pTX0dsb2JhbFZhcmlhYmxlQXJyYXkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ0pTX0dsb2JhbFZhcmlhYmxlQXJyYXk6OkNKU19HbG9iYWxWYXJpYWJsZUFycmF5KCkNCi17DQotfQ0KLQ0KLUNKU19HbG9iYWxWYXJpYWJsZUFycmF5Ojp+Q0pTX0dsb2JhbFZhcmlhYmxlQXJyYXkoKQ0KLXsNCi0JRW1wdHkoKTsNCi19DQotDQotdm9pZCBDSlNfR2xvYmFsVmFyaWFibGVBcnJheTo6Q29weShjb25zdCBDSlNfR2xvYmFsVmFyaWFibGVBcnJheSYgYXJyYXkpDQotew0KLQlFbXB0eSgpOw0KLQlmb3IgKGludCBpPTAsc3o9YXJyYXkuQ291bnQoKTsgaTxzejsgaSsrKQ0KLQl7DQotCQlDSlNfS2V5VmFsdWUqIHBPbGRPYmpEYXRhID0gYXJyYXkuR2V0QXQoaSk7DQotCQlBU1NFUlQocE9sZE9iakRhdGEgIT0gTlVMTCk7DQotDQotCQlzd2l0Y2ggKHBPbGRPYmpEYXRhLT5uVHlwZSkNCi0JCXsNCi0JCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX05VTUJFUjoNCi0JCQl7DQotCQkJCUNKU19LZXlWYWx1ZSogcE5ld09iakRhdGEgPSBuZXcgQ0pTX0tleVZhbHVlOw0KLQkJCQlwTmV3T2JqRGF0YS0+c0tleSA9IHBPbGRPYmpEYXRhLT5zS2V5Ow0KLQkJCQlwTmV3T2JqRGF0YS0+blR5cGUgPSBwT2xkT2JqRGF0YS0+blR5cGU7DQotCQkJCXBOZXdPYmpEYXRhLT5kRGF0YSA9IHBPbGRPYmpEYXRhLT5kRGF0YTsNCi0JCQkJQWRkKHBOZXdPYmpEYXRhKTsNCi0JCQl9DQotCQkJYnJlYWs7DQotCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9CT09MRUFOOg0KLQkJCXsNCi0JCQkJQ0pTX0tleVZhbHVlKiBwTmV3T2JqRGF0YSA9IG5ldyBDSlNfS2V5VmFsdWU7DQotCQkJCXBOZXdPYmpEYXRhLT5zS2V5ID0gcE9sZE9iakRhdGEtPnNLZXk7DQotCQkJCXBOZXdPYmpEYXRhLT5uVHlwZSA9IHBPbGRPYmpEYXRhLT5uVHlwZTsNCi0JCQkJcE5ld09iakRhdGEtPmJEYXRhID0gcE9sZE9iakRhdGEtPmJEYXRhOw0KLQkJCQlBZGQocE5ld09iakRhdGEpOw0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX1NUUklORzoNCi0JCQl7DQotCQkJCUNKU19LZXlWYWx1ZSogcE5ld09iakRhdGEgPSBuZXcgQ0pTX0tleVZhbHVlOw0KLQkJCQlwTmV3T2JqRGF0YS0+c0tleSA9IHBPbGRPYmpEYXRhLT5zS2V5Ow0KLQkJCQlwTmV3T2JqRGF0YS0+blR5cGUgPSBwT2xkT2JqRGF0YS0+blR5cGU7DQotCQkJCXBOZXdPYmpEYXRhLT5zRGF0YSA9IHBPbGRPYmpEYXRhLT5zRGF0YTsNCi0JCQkJQWRkKHBOZXdPYmpEYXRhKTsNCi0JCQl9DQotCQkJYnJlYWs7DQotCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9PQkpFQ1Q6DQotCQkJew0KLQkJCQlDSlNfS2V5VmFsdWUqIHBOZXdPYmpEYXRhID0gbmV3IENKU19LZXlWYWx1ZTsNCi0JCQkJcE5ld09iakRhdGEtPnNLZXkgPSBwT2xkT2JqRGF0YS0+c0tleTsNCi0JCQkJcE5ld09iakRhdGEtPm5UeXBlID0gcE9sZE9iakRhdGEtPm5UeXBlOw0KLQkJCQlwTmV3T2JqRGF0YS0+b2JqRGF0YS5Db3B5KHBPbGRPYmpEYXRhLT5vYmpEYXRhKTsNCi0JCQkJQWRkKHBOZXdPYmpEYXRhKTsNCi0JCQl9DQotCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9OVUxMOg0KLQkJCXsNCi0JCQkJQ0pTX0tleVZhbHVlKiBwTmV3T2JqRGF0YSA9IG5ldyBDSlNfS2V5VmFsdWU7DQotCQkJCXBOZXdPYmpEYXRhLT5zS2V5ID0gcE9sZE9iakRhdGEtPnNLZXk7DQotCQkJCXBOZXdPYmpEYXRhLT5uVHlwZSA9IHBPbGRPYmpEYXRhLT5uVHlwZTsNCi0JCQkJQWRkKHBOZXdPYmpEYXRhKTsNCi0JCQl9DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBDSlNfR2xvYmFsVmFyaWFibGVBcnJheTo6QWRkKENKU19LZXlWYWx1ZSogcCkNCi17DQotCWFycmF5LkFkZChwKTsNCi19DQotDQotaW50IENKU19HbG9iYWxWYXJpYWJsZUFycmF5OjpDb3VudCgpIGNvbnN0DQotew0KLQlyZXR1cm4gYXJyYXkuR2V0U2l6ZSgpOw0KLX0NCi0NCi1DSlNfS2V5VmFsdWUqIENKU19HbG9iYWxWYXJpYWJsZUFycmF5OjpHZXRBdChpbnQgaW5kZXgpIGNvbnN0DQotew0KLQlyZXR1cm4gYXJyYXkuR2V0QXQoaW5kZXgpOw0KLX0NCi0NCi12b2lkIENKU19HbG9iYWxWYXJpYWJsZUFycmF5OjpFbXB0eSgpDQotew0KLQlmb3IgKGludCBpPTAsc3o9YXJyYXkuR2V0U2l6ZSgpOyBpPHN6OyBpKyspDQotCQlkZWxldGUgYXJyYXkuR2V0QXQoaSk7DQotCWFycmF5LlJlbW92ZUFsbCgpOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDSlNfR2xvYmFsRGF0YSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLSNkZWZpbmUgUkVBREVSX0pTX0dMT0JBTERBVEFfRklMRU5BTUUJCQkJTCJSZWFkZXJfSnNHbG9iYWwuRGF0YSINCi0jZGVmaW5lIFBIQU5UT01fSlNfR0xPQkFMREFUQV9GSUxFTkFNRQkJCQlMIlBoYW50b21fSnNHbG9iYWwuRGF0YSINCi0jZGVmaW5lIFNES19KU19HTE9CQUxEQVRBX0ZJTEVOQU1FCQkJCQlMIlNES19Kc0dsb2JhbC5EYXRhIg0KLQ0KLXN0YXRpYyBjb25zdCBGWF9CWVRFIEpTX1JDNEtFWVtdID0gezB4MTksMHhhOCwweGU4LDB4MDEsMHhmNiwweGE4LDB4YjYsMHg0ZCwweDgyLDB4MDQsDQotCQkJCQkJCTB4NDUsMHg2ZCwweGI0LDB4Y2YsMHhkNywweDc3LDB4NjcsMHhmOSwweDc1LDB4OWYsDQotCQkJCQkJCTB4ZjAsMHhlMCwweDFlLDB4NTEsMHhlZSwweDQ2LDB4ZmQsMHgwYiwweGM5LDB4OTMsDQotCQkJCQkJCTB4MjUsMHg1NSwweDRhLDB4ZWUsMHhlMCwweDE2LDB4ZDAsMHhkZiwweDhjLDB4ZmEsDQotCQkJCQkJCTB4MmEsMHhhOSwweDQ5LDB4ZmQsMHg5NywweDFjLDB4MGUsMHgyMiwweDEzLDB4MjgsDQotCQkJCQkJCTB4N2MsMHhhZiwweGM0LDB4ZmMsMHg5YywweDEyLDB4NjUsMHg4YywweDRlLDB4NWIsDQotCQkJCQkJCTB4MDQsMHg3NSwweDg5LDB4YzksMHhiMSwweGVkLDB4NTAsMHhjYSwweDk2LDB4NmYsDQotCQkJCQkJCTB4MWEsMHg3YSwweGZlLDB4NTgsMHg1ZCwweGVjLDB4MTksMHg0YSwweGY2LDB4MzUsDQotCQkJCQkJCTB4NmEsMHg5NywweDE0LDB4MDAsMHgwZSwweGQwLDB4NmIsMHhiYiwweGQ1LDB4NzUsDQotCQkJCQkJCTB4NTUsMHg4YiwweDZlLDB4NmIsMHgxOSwweGEwLDB4ZjgsMHg3NywweGQ1LDB4YTMNCi0JCQkJCQkJfTsNCi0NCi1DSlNfR2xvYmFsRGF0YTo6Q0pTX0dsb2JhbERhdGEoQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCkgOiBtX3BBcHAocEFwcCkNCi17DQotLy8gCUlCYXNlQW5ub3QqIHBCYXNlQW5ub3QgPSBJQmFzZUFubm90OjpHZXRCYXNlQW5ub3QobV9wQXBwKTsNCi0vLyAJQVNTRVJUKHBCYXNlQW5ub3QgIT0gTlVMTCk7DQotLy8gDQotLy8gCW1fc0ZpbGVQYXRoID0gcEJhc2VBbm5vdC0+R2V0VXNlclBhdGgoKTsNCi0JbV9zRmlsZVBhdGggKz0gU0RLX0pTX0dMT0JBTERBVEFfRklMRU5BTUU7DQotDQotCUxvYWRHbG9iYWxQZXJzaXN0ZW50VmFyaWFibGVzKCk7DQotfQ0KLQ0KLUNKU19HbG9iYWxEYXRhOjp+Q0pTX0dsb2JhbERhdGEoKQ0KLXsNCi0JU2F2ZUdsb2JhbFBlcnNpc2l0ZW50VmFyaWFibGVzKCk7DQotDQotCWZvciAoaW50IGk9MCxzej1tX2FycmF5R2xvYmFsRGF0YS5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0JCWRlbGV0ZSBtX2FycmF5R2xvYmFsRGF0YS5HZXRBdChpKTsNCi0NCi0JbV9hcnJheUdsb2JhbERhdGEuUmVtb3ZlQWxsKCk7DQotfQ0KLQ0KLWludAlDSlNfR2xvYmFsRGF0YTo6RmluZEdsb2JhbFZhcmlhYmxlKEZYX0xQQ1NUUiBwcm9wbmFtZSkNCi17DQotCUFTU0VSVChwcm9wbmFtZSAhPSBOVUxMKTsNCi0NCi0JaW50IG5SZXQgPSAtMTsNCi0NCi0JZm9yIChpbnQgaT0wLHN6PW1fYXJyYXlHbG9iYWxEYXRhLkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQl7DQotCQlDSlNfR2xvYmFsRGF0YV9FbGVtZW50KiBwVGVtcCA9IG1fYXJyYXlHbG9iYWxEYXRhLkdldEF0KGkpOw0KLQkJaWYgKHBUZW1wLT5kYXRhLnNLZXlbMF0gPT0gKnByb3BuYW1lICYmIHBUZW1wLT5kYXRhLnNLZXkgPT0gcHJvcG5hbWUpDQotCQl7DQotCQkJblJldCA9IGk7DQotCQkJYnJlYWs7DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIG5SZXQ7DQotfQ0KLQ0KLUNKU19HbG9iYWxEYXRhX0VsZW1lbnQqIENKU19HbG9iYWxEYXRhOjpHZXRHbG9iYWxWYXJpYWJsZShGWF9MUENTVFIgcHJvcG5hbWUpDQotew0KLQlBU1NFUlQocHJvcG5hbWUgIT0gTlVMTCk7DQotDQotCWludAluRmluZCA9IEZpbmRHbG9iYWxWYXJpYWJsZShwcm9wbmFtZSk7DQotDQotCWlmIChuRmluZCA+PSAwKQ0KLQkJcmV0dXJuIG1fYXJyYXlHbG9iYWxEYXRhLkdldEF0KG5GaW5kKTsNCi0JZWxzZQ0KLQkJcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLXZvaWQgQ0pTX0dsb2JhbERhdGE6OlNldEdsb2JhbFZhcmlhYmxlTnVtYmVyKEZYX0xQQ1NUUiBwcm9wbmFtZSwgZG91YmxlIGREYXRhKQ0KLXsNCi0JQVNTRVJUKHByb3BuYW1lICE9IE5VTEwpOw0KLQlDRlhfQnl0ZVN0cmluZyBzUHJvcE5hbWUgPSBwcm9wbmFtZTsNCi0NCi0Jc1Byb3BOYW1lLlRyaW1MZWZ0KCk7DQotCXNQcm9wTmFtZS5UcmltUmlnaHQoKTsNCi0NCi0JaWYgKHNQcm9wTmFtZS5HZXRMZW5ndGgoKSA9PSAwKSByZXR1cm47DQotDQotCWlmIChDSlNfR2xvYmFsRGF0YV9FbGVtZW50KiBwRGF0YSA9IEdldEdsb2JhbFZhcmlhYmxlKHNQcm9wTmFtZSkpDQotCXsNCi0JCXBEYXRhLT5kYXRhLm5UeXBlID0gSlNfR0xPQkFMREFUQV9UWVBFX05VTUJFUjsNCi0JCXBEYXRhLT5kYXRhLmREYXRhID0gZERhdGE7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlDSlNfR2xvYmFsRGF0YV9FbGVtZW50KiBwTmV3RGF0YSA9IG5ldyBDSlNfR2xvYmFsRGF0YV9FbGVtZW50Ow0KLQkJcE5ld0RhdGEtPmRhdGEuc0tleSA9IHNQcm9wTmFtZTsNCi0JCXBOZXdEYXRhLT5kYXRhLm5UeXBlID0gSlNfR0xPQkFMREFUQV9UWVBFX05VTUJFUjsNCi0JCXBOZXdEYXRhLT5kYXRhLmREYXRhID0gZERhdGE7DQotDQotCQltX2FycmF5R2xvYmFsRGF0YS5BZGQocE5ld0RhdGEpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0pTX0dsb2JhbERhdGE6OlNldEdsb2JhbFZhcmlhYmxlQm9vbGVhbihGWF9MUENTVFIgcHJvcG5hbWUsIGJvb2wgYkRhdGEpDQotew0KLQlBU1NFUlQocHJvcG5hbWUgIT0gTlVMTCk7DQotCUNGWF9CeXRlU3RyaW5nIHNQcm9wTmFtZSA9IHByb3BuYW1lOw0KLQ0KLQlzUHJvcE5hbWUuVHJpbUxlZnQoKTsNCi0Jc1Byb3BOYW1lLlRyaW1SaWdodCgpOw0KLQ0KLQlpZiAoc1Byb3BOYW1lLkdldExlbmd0aCgpID09IDApIHJldHVybjsNCi0NCi0JaWYgKENKU19HbG9iYWxEYXRhX0VsZW1lbnQqIHBEYXRhID0gR2V0R2xvYmFsVmFyaWFibGUoc1Byb3BOYW1lKSkNCi0Jew0KLQkJcERhdGEtPmRhdGEublR5cGUgPSBKU19HTE9CQUxEQVRBX1RZUEVfQk9PTEVBTjsNCi0JCXBEYXRhLT5kYXRhLmJEYXRhID0gYkRhdGE7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlDSlNfR2xvYmFsRGF0YV9FbGVtZW50KiBwTmV3RGF0YSA9IG5ldyBDSlNfR2xvYmFsRGF0YV9FbGVtZW50Ow0KLQkJcE5ld0RhdGEtPmRhdGEuc0tleSA9IHNQcm9wTmFtZTsNCi0JCXBOZXdEYXRhLT5kYXRhLm5UeXBlID0gSlNfR0xPQkFMREFUQV9UWVBFX0JPT0xFQU47DQotCQlwTmV3RGF0YS0+ZGF0YS5iRGF0YSA9IGJEYXRhOw0KLQ0KLQkJbV9hcnJheUdsb2JhbERhdGEuQWRkKHBOZXdEYXRhKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENKU19HbG9iYWxEYXRhOjpTZXRHbG9iYWxWYXJpYWJsZVN0cmluZyhGWF9MUENTVFIgcHJvcG5hbWUsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzRGF0YSkNCi17DQotCUFTU0VSVChwcm9wbmFtZSAhPSBOVUxMKTsNCi0JQ0ZYX0J5dGVTdHJpbmcgc1Byb3BOYW1lID0gcHJvcG5hbWU7DQotDQotCXNQcm9wTmFtZS5UcmltTGVmdCgpOw0KLQlzUHJvcE5hbWUuVHJpbVJpZ2h0KCk7DQotDQotCWlmIChzUHJvcE5hbWUuR2V0TGVuZ3RoKCkgPT0gMCkgcmV0dXJuOw0KLQ0KLQlpZiAoQ0pTX0dsb2JhbERhdGFfRWxlbWVudCogcERhdGEgPSBHZXRHbG9iYWxWYXJpYWJsZShzUHJvcE5hbWUpKQ0KLQl7DQotCQlwRGF0YS0+ZGF0YS5uVHlwZSA9IEpTX0dMT0JBTERBVEFfVFlQRV9TVFJJTkc7DQotCQlwRGF0YS0+ZGF0YS5zRGF0YSA9IHNEYXRhOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ0pTX0dsb2JhbERhdGFfRWxlbWVudCogcE5ld0RhdGEgPSBuZXcgQ0pTX0dsb2JhbERhdGFfRWxlbWVudDsNCi0JCXBOZXdEYXRhLT5kYXRhLnNLZXkgPSBzUHJvcE5hbWU7DQotCQlwTmV3RGF0YS0+ZGF0YS5uVHlwZSA9IEpTX0dMT0JBTERBVEFfVFlQRV9TVFJJTkc7DQotCQlwTmV3RGF0YS0+ZGF0YS5zRGF0YSA9IHNEYXRhOw0KLQ0KLQkJbV9hcnJheUdsb2JhbERhdGEuQWRkKHBOZXdEYXRhKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENKU19HbG9iYWxEYXRhOjpTZXRHbG9iYWxWYXJpYWJsZU9iamVjdChGWF9MUENTVFIgcHJvcG5hbWUsIGNvbnN0IENKU19HbG9iYWxWYXJpYWJsZUFycmF5JiBhcnJheSkNCi17DQotCUFTU0VSVChwcm9wbmFtZSAhPSBOVUxMKTsNCi0JQ0ZYX0J5dGVTdHJpbmcgc1Byb3BOYW1lID0gcHJvcG5hbWU7DQotDQotCXNQcm9wTmFtZS5UcmltTGVmdCgpOw0KLQlzUHJvcE5hbWUuVHJpbVJpZ2h0KCk7DQotDQotCWlmIChzUHJvcE5hbWUuR2V0TGVuZ3RoKCkgPT0gMCkgcmV0dXJuOw0KLQ0KLQlpZiAoQ0pTX0dsb2JhbERhdGFfRWxlbWVudCogcERhdGEgPSBHZXRHbG9iYWxWYXJpYWJsZShzUHJvcE5hbWUpKQ0KLQl7DQotCQlwRGF0YS0+ZGF0YS5uVHlwZSA9IEpTX0dMT0JBTERBVEFfVFlQRV9PQkpFQ1Q7DQotCQlwRGF0YS0+ZGF0YS5vYmpEYXRhLkNvcHkoYXJyYXkpOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJQ0pTX0dsb2JhbERhdGFfRWxlbWVudCogcE5ld0RhdGEgPSBuZXcgQ0pTX0dsb2JhbERhdGFfRWxlbWVudDsNCi0JCXBOZXdEYXRhLT5kYXRhLnNLZXkgPSBzUHJvcE5hbWU7DQotCQlwTmV3RGF0YS0+ZGF0YS5uVHlwZSA9IEpTX0dMT0JBTERBVEFfVFlQRV9PQkpFQ1Q7DQotCQlwTmV3RGF0YS0+ZGF0YS5vYmpEYXRhLkNvcHkoYXJyYXkpOw0KLQkJDQotCQltX2FycmF5R2xvYmFsRGF0YS5BZGQocE5ld0RhdGEpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0pTX0dsb2JhbERhdGE6OlNldEdsb2JhbFZhcmlhYmxlTnVsbChGWF9MUENTVFIgcHJvcG5hbWUpDQotew0KLQlBU1NFUlQocHJvcG5hbWUgIT0gTlVMTCk7DQotCUNGWF9CeXRlU3RyaW5nIHNQcm9wTmFtZSA9IHByb3BuYW1lOw0KLQkNCi0Jc1Byb3BOYW1lLlRyaW1MZWZ0KCk7DQotCXNQcm9wTmFtZS5UcmltUmlnaHQoKTsNCi0JDQotCWlmIChzUHJvcE5hbWUuR2V0TGVuZ3RoKCkgPT0gMCkgcmV0dXJuOw0KLQkNCi0JaWYgKENKU19HbG9iYWxEYXRhX0VsZW1lbnQqIHBEYXRhID0gR2V0R2xvYmFsVmFyaWFibGUoc1Byb3BOYW1lKSkNCi0Jew0KLQkJcERhdGEtPmRhdGEublR5cGUgPSBKU19HTE9CQUxEQVRBX1RZUEVfTlVMTDsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCUNKU19HbG9iYWxEYXRhX0VsZW1lbnQqIHBOZXdEYXRhID0gbmV3IENKU19HbG9iYWxEYXRhX0VsZW1lbnQ7DQotCQlwTmV3RGF0YS0+ZGF0YS5zS2V5ID0gc1Byb3BOYW1lOw0KLQkJcE5ld0RhdGEtPmRhdGEublR5cGUgPSBKU19HTE9CQUxEQVRBX1RZUEVfTlVMTDsNCi0JCQ0KLQkJbV9hcnJheUdsb2JhbERhdGEuQWRkKHBOZXdEYXRhKTsNCi0JfQ0KLX0NCi0NCi1GWF9CT09MIENKU19HbG9iYWxEYXRhOjpTZXRHbG9iYWxWYXJpYWJsZVBlcnNpc3RlbnQoRlhfTFBDU1RSIHByb3BuYW1lLCBGWF9CT09MIGJQZXJzaXN0ZW50KQ0KLXsNCi0JQVNTRVJUKHByb3BuYW1lICE9IE5VTEwpOw0KLQlDRlhfQnl0ZVN0cmluZyBzUHJvcE5hbWUgPSBwcm9wbmFtZTsNCi0NCi0Jc1Byb3BOYW1lLlRyaW1MZWZ0KCk7DQotCXNQcm9wTmFtZS5UcmltUmlnaHQoKTsNCi0NCi0JaWYgKHNQcm9wTmFtZS5HZXRMZW5ndGgoKSA9PSAwKSByZXR1cm4gRkFMU0U7DQotDQotCWlmIChDSlNfR2xvYmFsRGF0YV9FbGVtZW50KiBwRGF0YSA9IEdldEdsb2JhbFZhcmlhYmxlKHNQcm9wTmFtZSkpDQotCXsNCi0JCXBEYXRhLT5iUGVyc2lzdGVudCA9IGJQZXJzaXN0ZW50Ow0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MIENKU19HbG9iYWxEYXRhOjpEZWxldGVHbG9iYWxWYXJpYWJsZShGWF9MUENTVFIgcHJvcG5hbWUpDQotew0KLQlBU1NFUlQocHJvcG5hbWUgIT0gTlVMTCk7DQotCUNGWF9CeXRlU3RyaW5nIHNQcm9wTmFtZSA9IHByb3BuYW1lOw0KLQ0KLQlzUHJvcE5hbWUuVHJpbUxlZnQoKTsNCi0Jc1Byb3BOYW1lLlRyaW1SaWdodCgpOw0KLQ0KLQlpZiAoc1Byb3BOYW1lLkdldExlbmd0aCgpID09IDApIHJldHVybiBGQUxTRTsNCi0NCi0JaW50CW5GaW5kID0gRmluZEdsb2JhbFZhcmlhYmxlKHNQcm9wTmFtZSk7DQotDQotCWlmIChuRmluZCA+PSAwKQ0KLQl7DQotCQlkZWxldGUgbV9hcnJheUdsb2JhbERhdGEuR2V0QXQobkZpbmQpOw0KLQkJbV9hcnJheUdsb2JhbERhdGEuUmVtb3ZlQXQobkZpbmQpOw0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9JTlQzMiBDSlNfR2xvYmFsRGF0YTo6R2V0U2l6ZSgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9hcnJheUdsb2JhbERhdGEuR2V0U2l6ZSgpOw0KLX0NCi0NCi1DSlNfR2xvYmFsRGF0YV9FbGVtZW50KiBDSlNfR2xvYmFsRGF0YTo6R2V0QXQoaW50IGluZGV4KSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fYXJyYXlHbG9iYWxEYXRhLkdldEF0KGluZGV4KTsNCi19DQotDQotdm9pZCBDSlNfR2xvYmFsRGF0YTo6TG9hZEdsb2JhbFBlcnNpc3RlbnRWYXJpYWJsZXMoKQ0KLXsNCi0JRlhfTFBCWVRFIHBCdWZmZXIgPSBOVUxMOw0KLQlGWF9JTlQzMiBuTGVuZ3RoID0gMDsNCi0NCi0JTG9hZEZpbGVCdWZmZXIobV9zRmlsZVBhdGgsIHBCdWZmZXIsIG5MZW5ndGgpOw0KLQ0KLQlDUllQVF9BcmNGb3VyQ3J5cHRCbG9jayhwQnVmZmVyLCBuTGVuZ3RoLCBKU19SQzRLRVksIHNpemVvZihKU19SQzRLRVkpKTsNCi0NCi0JaWYgKHBCdWZmZXIpDQotCXsNCi0JCUZYX0xQQllURSBwID0gcEJ1ZmZlcjsNCi0JCUZYX1dPUkQgd1R5cGUgPSAqKChGWF9XT1JEKilwKTsNCi0JCXAgKz0gc2l6ZW9mKEZYX1dPUkQpOw0KLQ0KLQkJLy9GWF9XT1JEIHdUZW1wID0gKEZYX1dPUkQpKCgnWCcgPDwgOCkgfCAnRicpOw0KLQ0KLQkJaWYgKHdUeXBlID09IChGWF9XT1JEKSgoJ1gnIDw8IDgpIHwgJ0YnKSkNCi0JCXsNCi0JCQlGWF9XT1JEIHdWZXJzaW9uID0gKigoRlhfV09SRCopcCk7DQotCQkJcCArPSBzaXplb2YoRlhfV09SRCk7DQotDQotCQkJQVNTRVJUKHdWZXJzaW9uIDw9IDIpOw0KLQ0KLQkJCUZYX0RXT1JEIGR3Q291bnQgPSAqKChGWF9EV09SRCopcCk7DQotCQkJcCArPSBzaXplb2YoRlhfRFdPUkQpOw0KLQ0KLQkJCUZYX0RXT1JEIGR3U2l6ZSA9ICooKEZYX0RXT1JEKilwKTsNCi0JCQlwICs9IHNpemVvZihGWF9EV09SRCk7DQotDQotCQkJaWYgKGR3U2l6ZSA9PSBuTGVuZ3RoIC0gc2l6ZW9mKEZYX1dPUkQpICogMiAtIHNpemVvZihGWF9EV09SRCkqIDIpDQotCQkJew0KLQkJCQlmb3IgKEZYX0lOVDMyIGk9MCxzej1kd0NvdW50OyBpPHN6OyBpKyspDQotCQkJCXsNCi0JCQkJCWlmIChwID4gcEJ1ZmZlciArIG5MZW5ndGgpDQotCQkJCQkJYnJlYWs7DQotDQotCQkJCQlGWF9EV09SRCBkd05hbWVMZW4gPSAqKChGWF9EV09SRCopcCk7DQotCQkJCQlwICs9IHNpemVvZihGWF9EV09SRCk7DQotDQotCQkJCQlpZiAocCArIGR3TmFtZUxlbiA+IHBCdWZmZXIgKyBuTGVuZ3RoKQ0KLQkJCQkJCWJyZWFrOw0KLQ0KLQkJCQkJQ0ZYX0J5dGVTdHJpbmcgc0VudHJ5ID0gQ0ZYX0J5dGVTdHJpbmcocCwgZHdOYW1lTGVuKTsNCi0JCQkJCXAgKz0gc2l6ZW9mKGNoYXIpICogZHdOYW1lTGVuOw0KLQ0KLQkJCQkJRlhfV09SRCB3RGF0YVR5cGUgPSAqKChGWF9XT1JEKilwKTsNCi0JCQkJCXAgKz0gc2l6ZW9mKEZYX1dPUkQpOw0KLQ0KLQkJCQkJc3dpdGNoICh3RGF0YVR5cGUpDQotCQkJCQl7DQotCQkJCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9OVU1CRVI6DQotCQkJCQkJew0KLQkJCQkJCQlkb3VibGUgZERhdGEgPSAwOw0KLQkJCQkJCQlzd2l0Y2ggKHdWZXJzaW9uKQ0KLQkJCQkJCQl7DQotCQkJCQkJCWNhc2UgMToNCi0JCQkJCQkJCXsNCi0JCQkJCQkJCQlGWF9EV09SRCBkd0RhdGEgPSAqKChGWF9EV09SRCopcCk7DQotCQkJCQkJCQkJcCArPSBzaXplb2YoRlhfRFdPUkQpOw0KLQkJCQkJCQkJCWREYXRhID0gZHdEYXRhOw0KLQkJCQkJCQkJfQ0KLQkJCQkJCQkJYnJlYWs7DQotCQkJCQkJCWNhc2UgMjoNCi0JCQkJCQkJCXsNCi0JCQkJCQkJCQlkRGF0YSA9ICooKGRvdWJsZSopcCk7DQotCQkJCQkJCQkJcCArPSBzaXplb2YoZG91YmxlKTsNCi0JCQkJCQkJCX0NCi0JCQkJCQkJCWJyZWFrOw0KLQkJCQkJCQl9DQotCQkJCQkJCVNldEdsb2JhbFZhcmlhYmxlTnVtYmVyKHNFbnRyeSwgZERhdGEpOw0KLQkJCQkJCQlTZXRHbG9iYWxWYXJpYWJsZVBlcnNpc3RlbnQoc0VudHJ5LCBUUlVFKTsNCi0JCQkJCQl9DQotCQkJCQkJYnJlYWs7DQotCQkJCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9CT09MRUFOOg0KLQkJCQkJCXsNCi0JCQkJCQkJRlhfV09SRCB3RGF0YSA9ICooKEZYX1dPUkQqKXApOw0KLQkJCQkJCQlwICs9IHNpemVvZihGWF9XT1JEKTsNCi0JCQkJCQkJU2V0R2xvYmFsVmFyaWFibGVCb29sZWFuKHNFbnRyeSwgKGJvb2wpKHdEYXRhID09IDEpKTsNCi0JCQkJCQkJU2V0R2xvYmFsVmFyaWFibGVQZXJzaXN0ZW50KHNFbnRyeSwgVFJVRSk7DQotCQkJCQkJfQ0KLQkJCQkJCWJyZWFrOw0KLQkJCQkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfU1RSSU5HOg0KLQkJCQkJCXsNCi0JCQkJCQkJRlhfRFdPUkQgZHdMZW5ndGggPSAqKChGWF9EV09SRCopcCk7DQotCQkJCQkJCXAgKz0gc2l6ZW9mKEZYX0RXT1JEKTsNCi0NCi0JCQkJCQkJaWYgKHAgKyBkd0xlbmd0aCA+IHBCdWZmZXIgKyBuTGVuZ3RoKQ0KLQkJCQkJCQkJYnJlYWs7DQotDQotCQkJCQkJCVNldEdsb2JhbFZhcmlhYmxlU3RyaW5nKHNFbnRyeSwgQ0ZYX0J5dGVTdHJpbmcocCwgZHdMZW5ndGgpKTsNCi0JCQkJCQkJU2V0R2xvYmFsVmFyaWFibGVQZXJzaXN0ZW50KHNFbnRyeSwgVFJVRSk7DQotCQkJCQkJCXAgKz0gc2l6ZW9mKGNoYXIpICogZHdMZW5ndGg7DQotCQkJCQkJfQ0KLQkJCQkJCWJyZWFrOw0KLQkJCQkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfTlVMTDoNCi0JCQkJCQl7DQotCQkJCQkJCVNldEdsb2JhbFZhcmlhYmxlTnVsbChzRW50cnkpOw0KLQkJCQkJCQlTZXRHbG9iYWxWYXJpYWJsZVBlcnNpc3RlbnQoc0VudHJ5LCBUUlVFKTsNCi0JCQkJCQl9DQotCQkJCQl9DQotCQkJCX0NCi0JCQl9DQotCQl9DQotCQlGWF9GcmVlKHBCdWZmZXIpOw0KLQl9DQotfQ0KLQ0KLS8qDQotc3RydWN0IGpzX2dsb2JhbF9kYXRhZmlsZV9oZWFkZXINCi17DQotCUZYX1dPUkQgdHlwZTsgLy9GWCAoJ1gnIDw8IDgpIHwgJ0YnDQotCUZYX1dPUkQgdmVyc2lvbjsgLy8xLjANCi0JRlhfRFdPUkQgZGF0YWNvdW50Ow0KLX07DQotc3RydWN0IGpzX2dsb2JhbF9kYXRhZmlsZV9kYXRhDQotew0KLQlGWF9XT1JEIHR5cGU7DQotCUZYX0RXT1JEIG5EYXRhOw0KLQlGWF9XT1JEIGJEYXRhOw0KLQlGWF9EV09SRCBuU3RyTGVuOw0KLQljaGFyKiBwU3RyOw0KLX07DQotKi8NCi0NCi12b2lkIENKU19HbG9iYWxEYXRhOjpTYXZlR2xvYmFsUGVyc2lzaXRlbnRWYXJpYWJsZXMoKQ0KLXsNCi0JRlhfRFdPUkQgbkNvdW50ID0gMDsNCi0JQ0ZYX0JpbmFyeUJ1ZiBzRGF0YTsNCi0NCi0JZm9yIChpbnQgaT0wLHN6PW1fYXJyYXlHbG9iYWxEYXRhLkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQl7DQotCQlDSlNfR2xvYmFsRGF0YV9FbGVtZW50KiBwRWxlbWVudCA9IG1fYXJyYXlHbG9iYWxEYXRhLkdldEF0KGkpOw0KLQkJQVNTRVJUKHBFbGVtZW50ICE9IE5VTEwpOw0KLQ0KLQkJaWYgKHBFbGVtZW50LT5iUGVyc2lzdGVudCkNCi0JCXsNCi0JCQlDRlhfQmluYXJ5QnVmIHNFbGVtZW50Ow0KLQkJCU1ha2VCeXRlU3RyaW5nKHBFbGVtZW50LT5kYXRhLnNLZXksICZwRWxlbWVudC0+ZGF0YSwgc0VsZW1lbnQpOw0KLQ0KLQkJCWlmIChzRGF0YS5HZXRTaXplKCkgKyBzRWxlbWVudC5HZXRTaXplKCkgPiBKU19NQVhHTE9CQUxEQVRBKQ0KLQkJCQlicmVhazsNCi0NCi0JCQlzRGF0YS5BcHBlbmRCbG9jayhzRWxlbWVudC5HZXRCdWZmZXIoKSwgc0VsZW1lbnQuR2V0U2l6ZSgpKTsNCi0JCQluQ291bnQrKzsNCi0JCX0NCi0JfQ0KLQ0KLQlDRlhfQmluYXJ5QnVmIHNGaWxlOw0KLQ0KLQlGWF9XT1JEIHdUeXBlID0gKEZYX1dPUkQpKCgnWCcgPDwgOCkgfCAnRicpOw0KLQlzRmlsZS5BcHBlbmRCbG9jaygmd1R5cGUsIHNpemVvZihGWF9XT1JEKSk7DQotCUZYX1dPUkQgd1ZlcnNpb24gPSAyOw0KLQlzRmlsZS5BcHBlbmRCbG9jaygmd1ZlcnNpb24sIHNpemVvZihGWF9XT1JEKSk7DQotCXNGaWxlLkFwcGVuZEJsb2NrKCZuQ291bnQsIHNpemVvZihGWF9EV09SRCkpOw0KLQlGWF9EV09SRCBkd1NpemUgPSBzRGF0YS5HZXRTaXplKCk7DQotCXNGaWxlLkFwcGVuZEJsb2NrKCZkd1NpemUsIHNpemVvZihGWF9EV09SRCkpOw0KLQ0KLQlzRmlsZS5BcHBlbmRCbG9jayhzRGF0YS5HZXRCdWZmZXIoKSwgc0RhdGEuR2V0U2l6ZSgpKTsNCi0NCi0JQ1JZUFRfQXJjRm91ckNyeXB0QmxvY2soc0ZpbGUuR2V0QnVmZmVyKCksIHNGaWxlLkdldFNpemUoKSwgSlNfUkM0S0VZLCBzaXplb2YoSlNfUkM0S0VZKSk7DQotCVdyaXRlRmlsZUJ1ZmZlcihtX3NGaWxlUGF0aCwgKEZYX0xQQ1NUUilzRmlsZS5HZXRCdWZmZXIoKSwgc0ZpbGUuR2V0U2l6ZSgpKTsNCi19DQotDQotdm9pZCBDSlNfR2xvYmFsRGF0YTo6TG9hZEZpbGVCdWZmZXIoRlhfTFBDV1NUUiBzRmlsZVBhdGgsIEZYX0xQQllURSYgcEJ1ZmZlciwgRlhfSU5UMzImIG5MZW5ndGgpDQotew0KLS8vVW5TdXBwb3J0Lg0KLX0NCi0NCi12b2lkIENKU19HbG9iYWxEYXRhOjpXcml0ZUZpbGVCdWZmZXIoRlhfTFBDV1NUUiBzRmlsZVBhdGgsIEZYX0xQQ1NUUiBwQnVmZmVyLCBGWF9JTlQzMiBuTGVuZ3RoKQ0KLXsNCi0vL1VuU3VwcG9ydC4NCi19DQotDQotdm9pZCBDSlNfR2xvYmFsRGF0YTo6TWFrZUJ5dGVTdHJpbmcoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIG5hbWUsIENKU19LZXlWYWx1ZSogcERhdGEsIENGWF9CaW5hcnlCdWYmIHNEYXRhKQ0KLXsNCi0JQVNTRVJUKHBEYXRhICE9IE5VTEwpOw0KLQ0KLQlGWF9XT1JEIHdUeXBlID0gKEZYX1dPUkQpcERhdGEtPm5UeXBlOw0KLQ0KLQlzd2l0Y2ggKHdUeXBlKQ0KLQl7DQotCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX05VTUJFUjoNCi0JCXsNCi0JCQlGWF9EV09SRCBkd05hbWVMZW4gPSAoRlhfRFdPUkQpbmFtZS5HZXRMZW5ndGgoKTsNCi0JCQlzRGF0YS5BcHBlbmRCbG9jaygmZHdOYW1lTGVuLCBzaXplb2YoRlhfRFdPUkQpKTsNCi0JCQlzRGF0YS5BcHBlbmRTdHJpbmcobmFtZSk7DQotDQotCQkJc0RhdGEuQXBwZW5kQmxvY2soJndUeXBlLCBzaXplb2YoRlhfV09SRCkpOw0KLQkJCWRvdWJsZSBkRGF0YSA9IHBEYXRhLT5kRGF0YTsNCi0JCQlzRGF0YS5BcHBlbmRCbG9jaygmZERhdGEsIHNpemVvZihkb3VibGUpKTsNCi0JCX0NCi0JCWJyZWFrOw0KLQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9CT09MRUFOOg0KLQkJew0KLQkJCUZYX0RXT1JEIGR3TmFtZUxlbiA9IChGWF9EV09SRCluYW1lLkdldExlbmd0aCgpOw0KLQkJCXNEYXRhLkFwcGVuZEJsb2NrKCZkd05hbWVMZW4sIHNpemVvZihGWF9EV09SRCkpOw0KLQkJCXNEYXRhLkFwcGVuZFN0cmluZyhuYW1lKTsNCi0NCi0JCQlzRGF0YS5BcHBlbmRCbG9jaygmd1R5cGUsIHNpemVvZihGWF9XT1JEKSk7DQotCQkJRlhfV09SRCB3RGF0YSA9IChGWF9XT1JEKXBEYXRhLT5iRGF0YTsNCi0JCQlzRGF0YS5BcHBlbmRCbG9jaygmd0RhdGEsIHNpemVvZihGWF9XT1JEKSk7DQotCQl9DQotCQlicmVhazsNCi0JY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfU1RSSU5HOg0KLQkJew0KLQkJCUZYX0RXT1JEIGR3TmFtZUxlbiA9IChGWF9EV09SRCluYW1lLkdldExlbmd0aCgpOw0KLQkJCXNEYXRhLkFwcGVuZEJsb2NrKCZkd05hbWVMZW4sIHNpemVvZihGWF9EV09SRCkpOw0KLQkJCXNEYXRhLkFwcGVuZFN0cmluZyhuYW1lKTsNCi0NCi0JCQlzRGF0YS5BcHBlbmRCbG9jaygmd1R5cGUsIHNpemVvZihGWF9XT1JEKSk7DQotDQotCQkJRlhfRFdPUkQgZHdEYXRhTGVuID0gKEZYX0RXT1JEKXBEYXRhLT5zRGF0YS5HZXRMZW5ndGgoKTsNCi0JCQlzRGF0YS5BcHBlbmRCbG9jaygmZHdEYXRhTGVuLCBzaXplb2YoRlhfRFdPUkQpKTsNCi0JCQlzRGF0YS5BcHBlbmRTdHJpbmcocERhdGEtPnNEYXRhKTsNCi0JCX0NCi0JCWJyZWFrOw0KLQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9OVUxMOg0KLQkJew0KLQkJCUZYX0RXT1JEIGR3TmFtZUxlbiA9IChGWF9EV09SRCluYW1lLkdldExlbmd0aCgpOw0KLQkJCXNEYXRhLkFwcGVuZEJsb2NrKCZkd05hbWVMZW4sIHNpemVvZihGWF9EV09SRCkpOw0KLQkJCXNEYXRhLkFwcGVuZFN0cmluZyhuYW1lKTsNCi0NCi0JCQlzRGF0YS5BcHBlbmRCbG9jaygmd1R5cGUsIHNpemVvZihGWF9EV09SRCkpOw0KLQkJfQ0KLQkJYnJlYWs7DQotCWRlZmF1bHQ6DQotCQlicmVhazsNCi0JfQ0KLX0NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0phdmFTY3JpcHQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSUphdmFTY3JpcHQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfR2xvYmFsRGF0YS5oIgorCisjZGVmaW5lIEpTX01BWEdMT0JBTERBVEEJCQkoMTAyNCAqIDQgLSA4KQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0pTX0dsb2JhbFZhcmlhYmxlQXJyYXkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0NKU19HbG9iYWxWYXJpYWJsZUFycmF5OjpDSlNfR2xvYmFsVmFyaWFibGVBcnJheSgpCit7Cit9CisKK0NKU19HbG9iYWxWYXJpYWJsZUFycmF5Ojp+Q0pTX0dsb2JhbFZhcmlhYmxlQXJyYXkoKQoreworCUVtcHR5KCk7Cit9CisKK3ZvaWQgQ0pTX0dsb2JhbFZhcmlhYmxlQXJyYXk6OkNvcHkoY29uc3QgQ0pTX0dsb2JhbFZhcmlhYmxlQXJyYXkmIGFycmF5KQoreworCUVtcHR5KCk7CisJZm9yIChpbnQgaT0wLHN6PWFycmF5LkNvdW50KCk7IGk8c3o7IGkrKykKKwl7CisJCUNKU19LZXlWYWx1ZSogcE9sZE9iakRhdGEgPSBhcnJheS5HZXRBdChpKTsKKwkJQVNTRVJUKHBPbGRPYmpEYXRhICE9IE5VTEwpOworCisJCXN3aXRjaCAocE9sZE9iakRhdGEtPm5UeXBlKQorCQl7CisJCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX05VTUJFUjoKKwkJCXsKKwkJCQlDSlNfS2V5VmFsdWUqIHBOZXdPYmpEYXRhID0gbmV3IENKU19LZXlWYWx1ZTsKKwkJCQlwTmV3T2JqRGF0YS0+c0tleSA9IHBPbGRPYmpEYXRhLT5zS2V5OworCQkJCXBOZXdPYmpEYXRhLT5uVHlwZSA9IHBPbGRPYmpEYXRhLT5uVHlwZTsKKwkJCQlwTmV3T2JqRGF0YS0+ZERhdGEgPSBwT2xkT2JqRGF0YS0+ZERhdGE7CisJCQkJQWRkKHBOZXdPYmpEYXRhKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9CT09MRUFOOgorCQkJeworCQkJCUNKU19LZXlWYWx1ZSogcE5ld09iakRhdGEgPSBuZXcgQ0pTX0tleVZhbHVlOworCQkJCXBOZXdPYmpEYXRhLT5zS2V5ID0gcE9sZE9iakRhdGEtPnNLZXk7CisJCQkJcE5ld09iakRhdGEtPm5UeXBlID0gcE9sZE9iakRhdGEtPm5UeXBlOworCQkJCXBOZXdPYmpEYXRhLT5iRGF0YSA9IHBPbGRPYmpEYXRhLT5iRGF0YTsKKwkJCQlBZGQocE5ld09iakRhdGEpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX1NUUklORzoKKwkJCXsKKwkJCQlDSlNfS2V5VmFsdWUqIHBOZXdPYmpEYXRhID0gbmV3IENKU19LZXlWYWx1ZTsKKwkJCQlwTmV3T2JqRGF0YS0+c0tleSA9IHBPbGRPYmpEYXRhLT5zS2V5OworCQkJCXBOZXdPYmpEYXRhLT5uVHlwZSA9IHBPbGRPYmpEYXRhLT5uVHlwZTsKKwkJCQlwTmV3T2JqRGF0YS0+c0RhdGEgPSBwT2xkT2JqRGF0YS0+c0RhdGE7CisJCQkJQWRkKHBOZXdPYmpEYXRhKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9PQkpFQ1Q6CisJCQl7CisJCQkJQ0pTX0tleVZhbHVlKiBwTmV3T2JqRGF0YSA9IG5ldyBDSlNfS2V5VmFsdWU7CisJCQkJcE5ld09iakRhdGEtPnNLZXkgPSBwT2xkT2JqRGF0YS0+c0tleTsKKwkJCQlwTmV3T2JqRGF0YS0+blR5cGUgPSBwT2xkT2JqRGF0YS0+blR5cGU7CisJCQkJcE5ld09iakRhdGEtPm9iakRhdGEuQ29weShwT2xkT2JqRGF0YS0+b2JqRGF0YSk7CisJCQkJQWRkKHBOZXdPYmpEYXRhKTsKKwkJCX0KKwkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfTlVMTDoKKwkJCXsKKwkJCQlDSlNfS2V5VmFsdWUqIHBOZXdPYmpEYXRhID0gbmV3IENKU19LZXlWYWx1ZTsKKwkJCQlwTmV3T2JqRGF0YS0+c0tleSA9IHBPbGRPYmpEYXRhLT5zS2V5OworCQkJCXBOZXdPYmpEYXRhLT5uVHlwZSA9IHBPbGRPYmpEYXRhLT5uVHlwZTsKKwkJCQlBZGQocE5ld09iakRhdGEpOworCQkJfQorCQl9CisJfQorfQorCit2b2lkIENKU19HbG9iYWxWYXJpYWJsZUFycmF5OjpBZGQoQ0pTX0tleVZhbHVlKiBwKQoreworCWFycmF5LkFkZChwKTsKK30KKworaW50IENKU19HbG9iYWxWYXJpYWJsZUFycmF5OjpDb3VudCgpIGNvbnN0Cit7CisJcmV0dXJuIGFycmF5LkdldFNpemUoKTsKK30KKworQ0pTX0tleVZhbHVlKiBDSlNfR2xvYmFsVmFyaWFibGVBcnJheTo6R2V0QXQoaW50IGluZGV4KSBjb25zdAoreworCXJldHVybiBhcnJheS5HZXRBdChpbmRleCk7Cit9CisKK3ZvaWQgQ0pTX0dsb2JhbFZhcmlhYmxlQXJyYXk6OkVtcHR5KCkKK3sKKwlmb3IgKGludCBpPTAsc3o9YXJyYXkuR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJCWRlbGV0ZSBhcnJheS5HZXRBdChpKTsKKwlhcnJheS5SZW1vdmVBbGwoKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0pTX0dsb2JhbERhdGEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBSRUFERVJfSlNfR0xPQkFMREFUQV9GSUxFTkFNRQkJCQlMIlJlYWRlcl9Kc0dsb2JhbC5EYXRhIgorI2RlZmluZSBQSEFOVE9NX0pTX0dMT0JBTERBVEFfRklMRU5BTUUJCQkJTCJQaGFudG9tX0pzR2xvYmFsLkRhdGEiCisjZGVmaW5lIFNES19KU19HTE9CQUxEQVRBX0ZJTEVOQU1FCQkJCQlMIlNES19Kc0dsb2JhbC5EYXRhIgorCitzdGF0aWMgY29uc3QgRlhfQllURSBKU19SQzRLRVlbXSA9IHsweDE5LDB4YTgsMHhlOCwweDAxLDB4ZjYsMHhhOCwweGI2LDB4NGQsMHg4MiwweDA0LAorCQkJCQkJCTB4NDUsMHg2ZCwweGI0LDB4Y2YsMHhkNywweDc3LDB4NjcsMHhmOSwweDc1LDB4OWYsCisJCQkJCQkJMHhmMCwweGUwLDB4MWUsMHg1MSwweGVlLDB4NDYsMHhmZCwweDBiLDB4YzksMHg5MywKKwkJCQkJCQkweDI1LDB4NTUsMHg0YSwweGVlLDB4ZTAsMHgxNiwweGQwLDB4ZGYsMHg4YywweGZhLAorCQkJCQkJCTB4MmEsMHhhOSwweDQ5LDB4ZmQsMHg5NywweDFjLDB4MGUsMHgyMiwweDEzLDB4MjgsCisJCQkJCQkJMHg3YywweGFmLDB4YzQsMHhmYywweDljLDB4MTIsMHg2NSwweDhjLDB4NGUsMHg1YiwKKwkJCQkJCQkweDA0LDB4NzUsMHg4OSwweGM5LDB4YjEsMHhlZCwweDUwLDB4Y2EsMHg5NiwweDZmLAorCQkJCQkJCTB4MWEsMHg3YSwweGZlLDB4NTgsMHg1ZCwweGVjLDB4MTksMHg0YSwweGY2LDB4MzUsCisJCQkJCQkJMHg2YSwweDk3LDB4MTQsMHgwMCwweDBlLDB4ZDAsMHg2YiwweGJiLDB4ZDUsMHg3NSwKKwkJCQkJCQkweDU1LDB4OGIsMHg2ZSwweDZiLDB4MTksMHhhMCwweGY4LDB4NzcsMHhkNSwweGEzCisJCQkJCQkJfTsKKworQ0pTX0dsb2JhbERhdGE6OkNKU19HbG9iYWxEYXRhKENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHApIDogbV9wQXBwKHBBcHApCit7CisvLyAJSUJhc2VBbm5vdCogcEJhc2VBbm5vdCA9IElCYXNlQW5ub3Q6OkdldEJhc2VBbm5vdChtX3BBcHApOworLy8gCUFTU0VSVChwQmFzZUFubm90ICE9IE5VTEwpOworLy8gCisvLyAJbV9zRmlsZVBhdGggPSBwQmFzZUFubm90LT5HZXRVc2VyUGF0aCgpOworCW1fc0ZpbGVQYXRoICs9IFNES19KU19HTE9CQUxEQVRBX0ZJTEVOQU1FOworCisJTG9hZEdsb2JhbFBlcnNpc3RlbnRWYXJpYWJsZXMoKTsKK30KKworQ0pTX0dsb2JhbERhdGE6On5DSlNfR2xvYmFsRGF0YSgpCit7CisJU2F2ZUdsb2JhbFBlcnNpc2l0ZW50VmFyaWFibGVzKCk7CisKKwlmb3IgKGludCBpPTAsc3o9bV9hcnJheUdsb2JhbERhdGEuR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJCWRlbGV0ZSBtX2FycmF5R2xvYmFsRGF0YS5HZXRBdChpKTsKKworCW1fYXJyYXlHbG9iYWxEYXRhLlJlbW92ZUFsbCgpOworfQorCitpbnQJQ0pTX0dsb2JhbERhdGE6OkZpbmRHbG9iYWxWYXJpYWJsZShGWF9MUENTVFIgcHJvcG5hbWUpCit7CisJQVNTRVJUKHByb3BuYW1lICE9IE5VTEwpOworCisJaW50IG5SZXQgPSAtMTsKKworCWZvciAoaW50IGk9MCxzej1tX2FycmF5R2xvYmFsRGF0YS5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwl7CisJCUNKU19HbG9iYWxEYXRhX0VsZW1lbnQqIHBUZW1wID0gbV9hcnJheUdsb2JhbERhdGEuR2V0QXQoaSk7CisJCWlmIChwVGVtcC0+ZGF0YS5zS2V5WzBdID09ICpwcm9wbmFtZSAmJiBwVGVtcC0+ZGF0YS5zS2V5ID09IHByb3BuYW1lKQorCQl7CisJCQluUmV0ID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIG5SZXQ7Cit9CisKK0NKU19HbG9iYWxEYXRhX0VsZW1lbnQqIENKU19HbG9iYWxEYXRhOjpHZXRHbG9iYWxWYXJpYWJsZShGWF9MUENTVFIgcHJvcG5hbWUpCit7CisJQVNTRVJUKHByb3BuYW1lICE9IE5VTEwpOworCisJaW50CW5GaW5kID0gRmluZEdsb2JhbFZhcmlhYmxlKHByb3BuYW1lKTsKKworCWlmIChuRmluZCA+PSAwKQorCQlyZXR1cm4gbV9hcnJheUdsb2JhbERhdGEuR2V0QXQobkZpbmQpOworCWVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgQ0pTX0dsb2JhbERhdGE6OlNldEdsb2JhbFZhcmlhYmxlTnVtYmVyKEZYX0xQQ1NUUiBwcm9wbmFtZSwgZG91YmxlIGREYXRhKQoreworCUFTU0VSVChwcm9wbmFtZSAhPSBOVUxMKTsKKwlDRlhfQnl0ZVN0cmluZyBzUHJvcE5hbWUgPSBwcm9wbmFtZTsKKworCXNQcm9wTmFtZS5UcmltTGVmdCgpOworCXNQcm9wTmFtZS5UcmltUmlnaHQoKTsKKworCWlmIChzUHJvcE5hbWUuR2V0TGVuZ3RoKCkgPT0gMCkgcmV0dXJuOworCisJaWYgKENKU19HbG9iYWxEYXRhX0VsZW1lbnQqIHBEYXRhID0gR2V0R2xvYmFsVmFyaWFibGUoc1Byb3BOYW1lKSkKKwl7CisJCXBEYXRhLT5kYXRhLm5UeXBlID0gSlNfR0xPQkFMREFUQV9UWVBFX05VTUJFUjsKKwkJcERhdGEtPmRhdGEuZERhdGEgPSBkRGF0YTsKKwl9CisJZWxzZQorCXsKKwkJQ0pTX0dsb2JhbERhdGFfRWxlbWVudCogcE5ld0RhdGEgPSBuZXcgQ0pTX0dsb2JhbERhdGFfRWxlbWVudDsKKwkJcE5ld0RhdGEtPmRhdGEuc0tleSA9IHNQcm9wTmFtZTsKKwkJcE5ld0RhdGEtPmRhdGEublR5cGUgPSBKU19HTE9CQUxEQVRBX1RZUEVfTlVNQkVSOworCQlwTmV3RGF0YS0+ZGF0YS5kRGF0YSA9IGREYXRhOworCisJCW1fYXJyYXlHbG9iYWxEYXRhLkFkZChwTmV3RGF0YSk7CisJfQorfQorCit2b2lkIENKU19HbG9iYWxEYXRhOjpTZXRHbG9iYWxWYXJpYWJsZUJvb2xlYW4oRlhfTFBDU1RSIHByb3BuYW1lLCBib29sIGJEYXRhKQoreworCUFTU0VSVChwcm9wbmFtZSAhPSBOVUxMKTsKKwlDRlhfQnl0ZVN0cmluZyBzUHJvcE5hbWUgPSBwcm9wbmFtZTsKKworCXNQcm9wTmFtZS5UcmltTGVmdCgpOworCXNQcm9wTmFtZS5UcmltUmlnaHQoKTsKKworCWlmIChzUHJvcE5hbWUuR2V0TGVuZ3RoKCkgPT0gMCkgcmV0dXJuOworCisJaWYgKENKU19HbG9iYWxEYXRhX0VsZW1lbnQqIHBEYXRhID0gR2V0R2xvYmFsVmFyaWFibGUoc1Byb3BOYW1lKSkKKwl7CisJCXBEYXRhLT5kYXRhLm5UeXBlID0gSlNfR0xPQkFMREFUQV9UWVBFX0JPT0xFQU47CisJCXBEYXRhLT5kYXRhLmJEYXRhID0gYkRhdGE7CisJfQorCWVsc2UKKwl7CisJCUNKU19HbG9iYWxEYXRhX0VsZW1lbnQqIHBOZXdEYXRhID0gbmV3IENKU19HbG9iYWxEYXRhX0VsZW1lbnQ7CisJCXBOZXdEYXRhLT5kYXRhLnNLZXkgPSBzUHJvcE5hbWU7CisJCXBOZXdEYXRhLT5kYXRhLm5UeXBlID0gSlNfR0xPQkFMREFUQV9UWVBFX0JPT0xFQU47CisJCXBOZXdEYXRhLT5kYXRhLmJEYXRhID0gYkRhdGE7CisKKwkJbV9hcnJheUdsb2JhbERhdGEuQWRkKHBOZXdEYXRhKTsKKwl9Cit9CisKK3ZvaWQgQ0pTX0dsb2JhbERhdGE6OlNldEdsb2JhbFZhcmlhYmxlU3RyaW5nKEZYX0xQQ1NUUiBwcm9wbmFtZSwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNEYXRhKQoreworCUFTU0VSVChwcm9wbmFtZSAhPSBOVUxMKTsKKwlDRlhfQnl0ZVN0cmluZyBzUHJvcE5hbWUgPSBwcm9wbmFtZTsKKworCXNQcm9wTmFtZS5UcmltTGVmdCgpOworCXNQcm9wTmFtZS5UcmltUmlnaHQoKTsKKworCWlmIChzUHJvcE5hbWUuR2V0TGVuZ3RoKCkgPT0gMCkgcmV0dXJuOworCisJaWYgKENKU19HbG9iYWxEYXRhX0VsZW1lbnQqIHBEYXRhID0gR2V0R2xvYmFsVmFyaWFibGUoc1Byb3BOYW1lKSkKKwl7CisJCXBEYXRhLT5kYXRhLm5UeXBlID0gSlNfR0xPQkFMREFUQV9UWVBFX1NUUklORzsKKwkJcERhdGEtPmRhdGEuc0RhdGEgPSBzRGF0YTsKKwl9CisJZWxzZQorCXsKKwkJQ0pTX0dsb2JhbERhdGFfRWxlbWVudCogcE5ld0RhdGEgPSBuZXcgQ0pTX0dsb2JhbERhdGFfRWxlbWVudDsKKwkJcE5ld0RhdGEtPmRhdGEuc0tleSA9IHNQcm9wTmFtZTsKKwkJcE5ld0RhdGEtPmRhdGEublR5cGUgPSBKU19HTE9CQUxEQVRBX1RZUEVfU1RSSU5HOworCQlwTmV3RGF0YS0+ZGF0YS5zRGF0YSA9IHNEYXRhOworCisJCW1fYXJyYXlHbG9iYWxEYXRhLkFkZChwTmV3RGF0YSk7CisJfQorfQorCit2b2lkIENKU19HbG9iYWxEYXRhOjpTZXRHbG9iYWxWYXJpYWJsZU9iamVjdChGWF9MUENTVFIgcHJvcG5hbWUsIGNvbnN0IENKU19HbG9iYWxWYXJpYWJsZUFycmF5JiBhcnJheSkKK3sKKwlBU1NFUlQocHJvcG5hbWUgIT0gTlVMTCk7CisJQ0ZYX0J5dGVTdHJpbmcgc1Byb3BOYW1lID0gcHJvcG5hbWU7CisKKwlzUHJvcE5hbWUuVHJpbUxlZnQoKTsKKwlzUHJvcE5hbWUuVHJpbVJpZ2h0KCk7CisKKwlpZiAoc1Byb3BOYW1lLkdldExlbmd0aCgpID09IDApIHJldHVybjsKKworCWlmIChDSlNfR2xvYmFsRGF0YV9FbGVtZW50KiBwRGF0YSA9IEdldEdsb2JhbFZhcmlhYmxlKHNQcm9wTmFtZSkpCisJeworCQlwRGF0YS0+ZGF0YS5uVHlwZSA9IEpTX0dMT0JBTERBVEFfVFlQRV9PQkpFQ1Q7CisJCXBEYXRhLT5kYXRhLm9iakRhdGEuQ29weShhcnJheSk7CisJfQorCWVsc2UKKwl7CisJCUNKU19HbG9iYWxEYXRhX0VsZW1lbnQqIHBOZXdEYXRhID0gbmV3IENKU19HbG9iYWxEYXRhX0VsZW1lbnQ7CisJCXBOZXdEYXRhLT5kYXRhLnNLZXkgPSBzUHJvcE5hbWU7CisJCXBOZXdEYXRhLT5kYXRhLm5UeXBlID0gSlNfR0xPQkFMREFUQV9UWVBFX09CSkVDVDsKKwkJcE5ld0RhdGEtPmRhdGEub2JqRGF0YS5Db3B5KGFycmF5KTsKKwkJCisJCW1fYXJyYXlHbG9iYWxEYXRhLkFkZChwTmV3RGF0YSk7CisJfQorfQorCit2b2lkIENKU19HbG9iYWxEYXRhOjpTZXRHbG9iYWxWYXJpYWJsZU51bGwoRlhfTFBDU1RSIHByb3BuYW1lKQoreworCUFTU0VSVChwcm9wbmFtZSAhPSBOVUxMKTsKKwlDRlhfQnl0ZVN0cmluZyBzUHJvcE5hbWUgPSBwcm9wbmFtZTsKKwkKKwlzUHJvcE5hbWUuVHJpbUxlZnQoKTsKKwlzUHJvcE5hbWUuVHJpbVJpZ2h0KCk7CisJCisJaWYgKHNQcm9wTmFtZS5HZXRMZW5ndGgoKSA9PSAwKSByZXR1cm47CisJCisJaWYgKENKU19HbG9iYWxEYXRhX0VsZW1lbnQqIHBEYXRhID0gR2V0R2xvYmFsVmFyaWFibGUoc1Byb3BOYW1lKSkKKwl7CisJCXBEYXRhLT5kYXRhLm5UeXBlID0gSlNfR0xPQkFMREFUQV9UWVBFX05VTEw7CisJfQorCWVsc2UKKwl7CisJCUNKU19HbG9iYWxEYXRhX0VsZW1lbnQqIHBOZXdEYXRhID0gbmV3IENKU19HbG9iYWxEYXRhX0VsZW1lbnQ7CisJCXBOZXdEYXRhLT5kYXRhLnNLZXkgPSBzUHJvcE5hbWU7CisJCXBOZXdEYXRhLT5kYXRhLm5UeXBlID0gSlNfR0xPQkFMREFUQV9UWVBFX05VTEw7CisJCQorCQltX2FycmF5R2xvYmFsRGF0YS5BZGQocE5ld0RhdGEpOworCX0KK30KKworRlhfQk9PTCBDSlNfR2xvYmFsRGF0YTo6U2V0R2xvYmFsVmFyaWFibGVQZXJzaXN0ZW50KEZYX0xQQ1NUUiBwcm9wbmFtZSwgRlhfQk9PTCBiUGVyc2lzdGVudCkKK3sKKwlBU1NFUlQocHJvcG5hbWUgIT0gTlVMTCk7CisJQ0ZYX0J5dGVTdHJpbmcgc1Byb3BOYW1lID0gcHJvcG5hbWU7CisKKwlzUHJvcE5hbWUuVHJpbUxlZnQoKTsKKwlzUHJvcE5hbWUuVHJpbVJpZ2h0KCk7CisKKwlpZiAoc1Byb3BOYW1lLkdldExlbmd0aCgpID09IDApIHJldHVybiBGQUxTRTsKKworCWlmIChDSlNfR2xvYmFsRGF0YV9FbGVtZW50KiBwRGF0YSA9IEdldEdsb2JhbFZhcmlhYmxlKHNQcm9wTmFtZSkpCisJeworCQlwRGF0YS0+YlBlcnNpc3RlbnQgPSBiUGVyc2lzdGVudDsKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIENKU19HbG9iYWxEYXRhOjpEZWxldGVHbG9iYWxWYXJpYWJsZShGWF9MUENTVFIgcHJvcG5hbWUpCit7CisJQVNTRVJUKHByb3BuYW1lICE9IE5VTEwpOworCUNGWF9CeXRlU3RyaW5nIHNQcm9wTmFtZSA9IHByb3BuYW1lOworCisJc1Byb3BOYW1lLlRyaW1MZWZ0KCk7CisJc1Byb3BOYW1lLlRyaW1SaWdodCgpOworCisJaWYgKHNQcm9wTmFtZS5HZXRMZW5ndGgoKSA9PSAwKSByZXR1cm4gRkFMU0U7CisKKwlpbnQJbkZpbmQgPSBGaW5kR2xvYmFsVmFyaWFibGUoc1Byb3BOYW1lKTsKKworCWlmIChuRmluZCA+PSAwKQorCXsKKwkJZGVsZXRlIG1fYXJyYXlHbG9iYWxEYXRhLkdldEF0KG5GaW5kKTsKKwkJbV9hcnJheUdsb2JhbERhdGEuUmVtb3ZlQXQobkZpbmQpOworCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0lOVDMyIENKU19HbG9iYWxEYXRhOjpHZXRTaXplKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9hcnJheUdsb2JhbERhdGEuR2V0U2l6ZSgpOworfQorCitDSlNfR2xvYmFsRGF0YV9FbGVtZW50KiBDSlNfR2xvYmFsRGF0YTo6R2V0QXQoaW50IGluZGV4KSBjb25zdAoreworCXJldHVybiBtX2FycmF5R2xvYmFsRGF0YS5HZXRBdChpbmRleCk7Cit9CisKK3ZvaWQgQ0pTX0dsb2JhbERhdGE6OkxvYWRHbG9iYWxQZXJzaXN0ZW50VmFyaWFibGVzKCkKK3sKKwlGWF9MUEJZVEUgcEJ1ZmZlciA9IE5VTEw7CisJRlhfSU5UMzIgbkxlbmd0aCA9IDA7CisKKwlMb2FkRmlsZUJ1ZmZlcihtX3NGaWxlUGF0aCwgcEJ1ZmZlciwgbkxlbmd0aCk7CisKKwlDUllQVF9BcmNGb3VyQ3J5cHRCbG9jayhwQnVmZmVyLCBuTGVuZ3RoLCBKU19SQzRLRVksIHNpemVvZihKU19SQzRLRVkpKTsKKworCWlmIChwQnVmZmVyKQorCXsKKwkJRlhfTFBCWVRFIHAgPSBwQnVmZmVyOworCQlGWF9XT1JEIHdUeXBlID0gKigoRlhfV09SRCopcCk7CisJCXAgKz0gc2l6ZW9mKEZYX1dPUkQpOworCisJCS8vRlhfV09SRCB3VGVtcCA9IChGWF9XT1JEKSgoJ1gnIDw8IDgpIHwgJ0YnKTsKKworCQlpZiAod1R5cGUgPT0gKEZYX1dPUkQpKCgnWCcgPDwgOCkgfCAnRicpKQorCQl7CisJCQlGWF9XT1JEIHdWZXJzaW9uID0gKigoRlhfV09SRCopcCk7CisJCQlwICs9IHNpemVvZihGWF9XT1JEKTsKKworCQkJQVNTRVJUKHdWZXJzaW9uIDw9IDIpOworCisJCQlGWF9EV09SRCBkd0NvdW50ID0gKigoRlhfRFdPUkQqKXApOworCQkJcCArPSBzaXplb2YoRlhfRFdPUkQpOworCisJCQlGWF9EV09SRCBkd1NpemUgPSAqKChGWF9EV09SRCopcCk7CisJCQlwICs9IHNpemVvZihGWF9EV09SRCk7CisKKwkJCWlmIChkd1NpemUgPT0gbkxlbmd0aCAtIHNpemVvZihGWF9XT1JEKSAqIDIgLSBzaXplb2YoRlhfRFdPUkQpKiAyKQorCQkJeworCQkJCWZvciAoRlhfSU5UMzIgaT0wLHN6PWR3Q291bnQ7IGk8c3o7IGkrKykKKwkJCQl7CisJCQkJCWlmIChwID4gcEJ1ZmZlciArIG5MZW5ndGgpCisJCQkJCQlicmVhazsKKworCQkJCQlGWF9EV09SRCBkd05hbWVMZW4gPSAqKChGWF9EV09SRCopcCk7CisJCQkJCXAgKz0gc2l6ZW9mKEZYX0RXT1JEKTsKKworCQkJCQlpZiAocCArIGR3TmFtZUxlbiA+IHBCdWZmZXIgKyBuTGVuZ3RoKQorCQkJCQkJYnJlYWs7CisKKwkJCQkJQ0ZYX0J5dGVTdHJpbmcgc0VudHJ5ID0gQ0ZYX0J5dGVTdHJpbmcocCwgZHdOYW1lTGVuKTsKKwkJCQkJcCArPSBzaXplb2YoY2hhcikgKiBkd05hbWVMZW47CisKKwkJCQkJRlhfV09SRCB3RGF0YVR5cGUgPSAqKChGWF9XT1JEKilwKTsKKwkJCQkJcCArPSBzaXplb2YoRlhfV09SRCk7CisKKwkJCQkJc3dpdGNoICh3RGF0YVR5cGUpCisJCQkJCXsKKwkJCQkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfTlVNQkVSOgorCQkJCQkJeworCQkJCQkJCWRvdWJsZSBkRGF0YSA9IDA7CisJCQkJCQkJc3dpdGNoICh3VmVyc2lvbikKKwkJCQkJCQl7CisJCQkJCQkJY2FzZSAxOgorCQkJCQkJCQl7CisJCQkJCQkJCQlGWF9EV09SRCBkd0RhdGEgPSAqKChGWF9EV09SRCopcCk7CisJCQkJCQkJCQlwICs9IHNpemVvZihGWF9EV09SRCk7CisJCQkJCQkJCQlkRGF0YSA9IGR3RGF0YTsKKwkJCQkJCQkJfQorCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlIDI6CisJCQkJCQkJCXsKKwkJCQkJCQkJCWREYXRhID0gKigoZG91YmxlKilwKTsKKwkJCQkJCQkJCXAgKz0gc2l6ZW9mKGRvdWJsZSk7CisJCQkJCQkJCX0KKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQorCQkJCQkJCVNldEdsb2JhbFZhcmlhYmxlTnVtYmVyKHNFbnRyeSwgZERhdGEpOworCQkJCQkJCVNldEdsb2JhbFZhcmlhYmxlUGVyc2lzdGVudChzRW50cnksIFRSVUUpOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX0JPT0xFQU46CisJCQkJCQl7CisJCQkJCQkJRlhfV09SRCB3RGF0YSA9ICooKEZYX1dPUkQqKXApOworCQkJCQkJCXAgKz0gc2l6ZW9mKEZYX1dPUkQpOworCQkJCQkJCVNldEdsb2JhbFZhcmlhYmxlQm9vbGVhbihzRW50cnksIChib29sKSh3RGF0YSA9PSAxKSk7CisJCQkJCQkJU2V0R2xvYmFsVmFyaWFibGVQZXJzaXN0ZW50KHNFbnRyeSwgVFJVRSk7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfU1RSSU5HOgorCQkJCQkJeworCQkJCQkJCUZYX0RXT1JEIGR3TGVuZ3RoID0gKigoRlhfRFdPUkQqKXApOworCQkJCQkJCXAgKz0gc2l6ZW9mKEZYX0RXT1JEKTsKKworCQkJCQkJCWlmIChwICsgZHdMZW5ndGggPiBwQnVmZmVyICsgbkxlbmd0aCkKKwkJCQkJCQkJYnJlYWs7CisKKwkJCQkJCQlTZXRHbG9iYWxWYXJpYWJsZVN0cmluZyhzRW50cnksIENGWF9CeXRlU3RyaW5nKHAsIGR3TGVuZ3RoKSk7CisJCQkJCQkJU2V0R2xvYmFsVmFyaWFibGVQZXJzaXN0ZW50KHNFbnRyeSwgVFJVRSk7CisJCQkJCQkJcCArPSBzaXplb2YoY2hhcikgKiBkd0xlbmd0aDsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9OVUxMOgorCQkJCQkJeworCQkJCQkJCVNldEdsb2JhbFZhcmlhYmxlTnVsbChzRW50cnkpOworCQkJCQkJCVNldEdsb2JhbFZhcmlhYmxlUGVyc2lzdGVudChzRW50cnksIFRSVUUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCUZYX0ZyZWUocEJ1ZmZlcik7CisJfQorfQorCisvKgorc3RydWN0IGpzX2dsb2JhbF9kYXRhZmlsZV9oZWFkZXIKK3sKKwlGWF9XT1JEIHR5cGU7IC8vRlggKCdYJyA8PCA4KSB8ICdGJworCUZYX1dPUkQgdmVyc2lvbjsgLy8xLjAKKwlGWF9EV09SRCBkYXRhY291bnQ7Cit9Oworc3RydWN0IGpzX2dsb2JhbF9kYXRhZmlsZV9kYXRhCit7CisJRlhfV09SRCB0eXBlOworCUZYX0RXT1JEIG5EYXRhOworCUZYX1dPUkQgYkRhdGE7CisJRlhfRFdPUkQgblN0ckxlbjsKKwljaGFyKiBwU3RyOworfTsKKyovCisKK3ZvaWQgQ0pTX0dsb2JhbERhdGE6OlNhdmVHbG9iYWxQZXJzaXNpdGVudFZhcmlhYmxlcygpCit7CisJRlhfRFdPUkQgbkNvdW50ID0gMDsKKwlDRlhfQmluYXJ5QnVmIHNEYXRhOworCisJZm9yIChpbnQgaT0wLHN6PW1fYXJyYXlHbG9iYWxEYXRhLkdldFNpemUoKTsgaTxzejsgaSsrKQorCXsKKwkJQ0pTX0dsb2JhbERhdGFfRWxlbWVudCogcEVsZW1lbnQgPSBtX2FycmF5R2xvYmFsRGF0YS5HZXRBdChpKTsKKwkJQVNTRVJUKHBFbGVtZW50ICE9IE5VTEwpOworCisJCWlmIChwRWxlbWVudC0+YlBlcnNpc3RlbnQpCisJCXsKKwkJCUNGWF9CaW5hcnlCdWYgc0VsZW1lbnQ7CisJCQlNYWtlQnl0ZVN0cmluZyhwRWxlbWVudC0+ZGF0YS5zS2V5LCAmcEVsZW1lbnQtPmRhdGEsIHNFbGVtZW50KTsKKworCQkJaWYgKHNEYXRhLkdldFNpemUoKSArIHNFbGVtZW50LkdldFNpemUoKSA+IEpTX01BWEdMT0JBTERBVEEpCisJCQkJYnJlYWs7CisKKwkJCXNEYXRhLkFwcGVuZEJsb2NrKHNFbGVtZW50LkdldEJ1ZmZlcigpLCBzRWxlbWVudC5HZXRTaXplKCkpOworCQkJbkNvdW50Kys7CisJCX0KKwl9CisKKwlDRlhfQmluYXJ5QnVmIHNGaWxlOworCisJRlhfV09SRCB3VHlwZSA9IChGWF9XT1JEKSgoJ1gnIDw8IDgpIHwgJ0YnKTsKKwlzRmlsZS5BcHBlbmRCbG9jaygmd1R5cGUsIHNpemVvZihGWF9XT1JEKSk7CisJRlhfV09SRCB3VmVyc2lvbiA9IDI7CisJc0ZpbGUuQXBwZW5kQmxvY2soJndWZXJzaW9uLCBzaXplb2YoRlhfV09SRCkpOworCXNGaWxlLkFwcGVuZEJsb2NrKCZuQ291bnQsIHNpemVvZihGWF9EV09SRCkpOworCUZYX0RXT1JEIGR3U2l6ZSA9IHNEYXRhLkdldFNpemUoKTsKKwlzRmlsZS5BcHBlbmRCbG9jaygmZHdTaXplLCBzaXplb2YoRlhfRFdPUkQpKTsKKworCXNGaWxlLkFwcGVuZEJsb2NrKHNEYXRhLkdldEJ1ZmZlcigpLCBzRGF0YS5HZXRTaXplKCkpOworCisJQ1JZUFRfQXJjRm91ckNyeXB0QmxvY2soc0ZpbGUuR2V0QnVmZmVyKCksIHNGaWxlLkdldFNpemUoKSwgSlNfUkM0S0VZLCBzaXplb2YoSlNfUkM0S0VZKSk7CisJV3JpdGVGaWxlQnVmZmVyKG1fc0ZpbGVQYXRoLCAoRlhfTFBDU1RSKXNGaWxlLkdldEJ1ZmZlcigpLCBzRmlsZS5HZXRTaXplKCkpOworfQorCit2b2lkIENKU19HbG9iYWxEYXRhOjpMb2FkRmlsZUJ1ZmZlcihGWF9MUENXU1RSIHNGaWxlUGF0aCwgRlhfTFBCWVRFJiBwQnVmZmVyLCBGWF9JTlQzMiYgbkxlbmd0aCkKK3sKKy8vVW5TdXBwb3J0LgorfQorCit2b2lkIENKU19HbG9iYWxEYXRhOjpXcml0ZUZpbGVCdWZmZXIoRlhfTFBDV1NUUiBzRmlsZVBhdGgsIEZYX0xQQ1NUUiBwQnVmZmVyLCBGWF9JTlQzMiBuTGVuZ3RoKQoreworLy9VblN1cHBvcnQuCit9CisKK3ZvaWQgQ0pTX0dsb2JhbERhdGE6Ok1ha2VCeXRlU3RyaW5nKGNvbnN0IENGWF9CeXRlU3RyaW5nJiBuYW1lLCBDSlNfS2V5VmFsdWUqIHBEYXRhLCBDRlhfQmluYXJ5QnVmJiBzRGF0YSkKK3sKKwlBU1NFUlQocERhdGEgIT0gTlVMTCk7CisKKwlGWF9XT1JEIHdUeXBlID0gKEZYX1dPUkQpcERhdGEtPm5UeXBlOworCisJc3dpdGNoICh3VHlwZSkKKwl7CisJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfTlVNQkVSOgorCQl7CisJCQlGWF9EV09SRCBkd05hbWVMZW4gPSAoRlhfRFdPUkQpbmFtZS5HZXRMZW5ndGgoKTsKKwkJCXNEYXRhLkFwcGVuZEJsb2NrKCZkd05hbWVMZW4sIHNpemVvZihGWF9EV09SRCkpOworCQkJc0RhdGEuQXBwZW5kU3RyaW5nKG5hbWUpOworCisJCQlzRGF0YS5BcHBlbmRCbG9jaygmd1R5cGUsIHNpemVvZihGWF9XT1JEKSk7CisJCQlkb3VibGUgZERhdGEgPSBwRGF0YS0+ZERhdGE7CisJCQlzRGF0YS5BcHBlbmRCbG9jaygmZERhdGEsIHNpemVvZihkb3VibGUpKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9CT09MRUFOOgorCQl7CisJCQlGWF9EV09SRCBkd05hbWVMZW4gPSAoRlhfRFdPUkQpbmFtZS5HZXRMZW5ndGgoKTsKKwkJCXNEYXRhLkFwcGVuZEJsb2NrKCZkd05hbWVMZW4sIHNpemVvZihGWF9EV09SRCkpOworCQkJc0RhdGEuQXBwZW5kU3RyaW5nKG5hbWUpOworCisJCQlzRGF0YS5BcHBlbmRCbG9jaygmd1R5cGUsIHNpemVvZihGWF9XT1JEKSk7CisJCQlGWF9XT1JEIHdEYXRhID0gKEZYX1dPUkQpcERhdGEtPmJEYXRhOworCQkJc0RhdGEuQXBwZW5kQmxvY2soJndEYXRhLCBzaXplb2YoRlhfV09SRCkpOworCQl9CisJCWJyZWFrOworCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX1NUUklORzoKKwkJeworCQkJRlhfRFdPUkQgZHdOYW1lTGVuID0gKEZYX0RXT1JEKW5hbWUuR2V0TGVuZ3RoKCk7CisJCQlzRGF0YS5BcHBlbmRCbG9jaygmZHdOYW1lTGVuLCBzaXplb2YoRlhfRFdPUkQpKTsKKwkJCXNEYXRhLkFwcGVuZFN0cmluZyhuYW1lKTsKKworCQkJc0RhdGEuQXBwZW5kQmxvY2soJndUeXBlLCBzaXplb2YoRlhfV09SRCkpOworCisJCQlGWF9EV09SRCBkd0RhdGFMZW4gPSAoRlhfRFdPUkQpcERhdGEtPnNEYXRhLkdldExlbmd0aCgpOworCQkJc0RhdGEuQXBwZW5kQmxvY2soJmR3RGF0YUxlbiwgc2l6ZW9mKEZYX0RXT1JEKSk7CisJCQlzRGF0YS5BcHBlbmRTdHJpbmcocERhdGEtPnNEYXRhKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9OVUxMOgorCQl7CisJCQlGWF9EV09SRCBkd05hbWVMZW4gPSAoRlhfRFdPUkQpbmFtZS5HZXRMZW5ndGgoKTsKKwkJCXNEYXRhLkFwcGVuZEJsb2NrKCZkd05hbWVMZW4sIHNpemVvZihGWF9EV09SRCkpOworCQkJc0RhdGEuQXBwZW5kU3RyaW5nKG5hbWUpOworCisJCQlzRGF0YS5BcHBlbmRCbG9jaygmd1R5cGUsIHNpemVvZihGWF9EV09SRCkpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9KU19PYmplY3QuY3BwIGIvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9KU19PYmplY3QuY3BwCmluZGV4IDM4MzBiMmEuLjNiNzc3NGQgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvSlNfT2JqZWN0LmNwcAorKysgYi9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L0pTX09iamVjdC5jcHAKQEAgLTEsMTQ1ICsxLDE0NSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KYXZhU2NyaXB0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9JSmF2YVNjcmlwdC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRGVmaW5lLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19PYmplY3QuaCINCi0vLyAjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX01zZ0JveC5oIg0KLS8vICNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfUmVzTWdyLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19Db250ZXh0LmgiDQotDQotaW50IEZYSlNfTXNnQm94KENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldywgRlhfTFBDV1NUUiBzd01zZywgRlhfTFBDV1NUUiBzd1RpdGxlLCBGWF9VSU5UIG5UeXBlLCBGWF9VSU5UIG5JY29uKQ0KLXsNCi0JaW50IG5SZXQgPSAwOw0KLQ0KLQlpZihwQXBwKQ0KLQl7DQotCQlDUERGU0RLX0RvY3VtZW50KiBwRG9jID0gcEFwcC0+R2V0Q3VycmVudERvYygpOw0KLQkJaWYocERvYykNCi0JCQlwRG9jLT5LaWxsRm9jdXNBbm5vdCgpOw0KLQkJblJldCA9IHBBcHAtPkpTX2FwcEFsZXJ0KHN3TXNnLCBzd1RpdGxlLCBuVHlwZSwgbkljb24pOw0KLQl9DQotDQotCXJldHVybiBuUmV0Ow0KLX0NCi0NCi1DUERGU0RLX1BhZ2VWaWV3KiBGWEpTX0dldFBhZ2VWaWV3KElGWEpTX0NvbnRleHQqIGNjKQ0KLXsNCi0JaWYgKENKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjKQ0KLQl7DQotCQlpZiAocENvbnRleHQtPkdldFJlYWRlckRvY3VtZW50KCkpDQotCQkJcmV0dXJuIE5VTEw7DQotCX0NCi0JcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ0pTX0VtYmVkT2JqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUNKU19FbWJlZE9iajo6Q0pTX0VtYmVkT2JqKENKU19PYmplY3QqIHBKU09iamVjdCkgOiANCi0JbV9wSlNPYmplY3QocEpTT2JqZWN0KQ0KLXsNCi19DQotDQotQ0pTX0VtYmVkT2JqOjp+Q0pTX0VtYmVkT2JqKCkNCi17DQotCW1fcEpTT2JqZWN0ID0gTlVMTDsNCi0NCi19DQotDQotQ1BERlNES19QYWdlVmlldyogQ0pTX0VtYmVkT2JqOjpKU0dldFBhZ2VWaWV3KElGWEpTX0NvbnRleHQqIGNjKQ0KLXsNCi0JcmV0dXJuIEZYSlNfR2V0UGFnZVZpZXcoY2MpOw0KLX0NCi0NCi1pbnQgQ0pTX0VtYmVkT2JqOjpNc2dCb3goQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LEZYX0xQQ1dTVFIgc3dNc2csRlhfTFBDV1NUUiBzd1RpdGxlLEZYX1VJTlQgblR5cGUsRlhfVUlOVCBuSWNvbikNCi17DQotCXJldHVybiBGWEpTX01zZ0JveChwQXBwLCBwUGFnZVZpZXcsIHN3TXNnLCBzd1RpdGxlLCBuVHlwZSwgbkljb24pOw0KLX0NCi0NCi12b2lkIENKU19FbWJlZE9iajo6QWxlcnQoQ0pTX0NvbnRleHQqIHBDb250ZXh0LCBGWF9MUENXU1RSIHN3TXNnKQ0KLXsNCi0JQ0pTX09iamVjdDo6QWxlcnQocENvbnRleHQsIHN3TXNnKTsNCi19DQotDQotQ0pTX1RpbWVyKiBDSlNfRW1iZWRPYmo6OkJlZ2luVGltZXIoQ1BERkRvY19FbnZpcm9ubWVudCAqIHBBcHAsRlhfVUlOVCBuRWxhcHNlKQ0KLXsNCi0JQ0pTX1RpbWVyKiBwVGltZXIgPSBuZXcgQ0pTX1RpbWVyKHRoaXMscEFwcCk7DQotCXBUaW1lci0+U2V0SlNUaW1lcihuRWxhcHNlKTsNCi0JDQotCXJldHVybiBwVGltZXI7DQotfQ0KLQ0KLXZvaWQgQ0pTX0VtYmVkT2JqOjpFbmRUaW1lcihDSlNfVGltZXIqIHBUaW1lcikNCi17DQotCUFTU0VSVChwVGltZXIgIT0gTlVMTCk7DQotCXBUaW1lci0+S2lsbEpTVGltZXIoKTsNCi0JZGVsZXRlIHBUaW1lcjsNCi19DQotDQotRlhfQk9PTAlDSlNfRW1iZWRPYmo6OklzU2FmZU1vZGUoSUZYSlNfQ29udGV4dCogY2MpDQotew0KLQlBU1NFUlQoY2MgIT0gTlVMTCk7DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENKU19PYmplY3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotdm9pZCAgRnJlZU9iamVjdChjb25zdCB2ODo6V2Vha0NhbGxiYWNrRGF0YTx2ODo6T2JqZWN0LCBDSlNfT2JqZWN0PiYgZGF0YSkNCi17DQotCUNKU19PYmplY3QqIHBKU09iaiAgPSBkYXRhLkdldFBhcmFtZXRlcigpOw0KLQlpZihwSlNPYmopDQotCXsNCi0JCXBKU09iai0+RXhpdEluc3RhbmNlKCk7DQotCQlkZWxldGUgcEpTT2JqOw0KLQl9DQotCXY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmogPSBkYXRhLkdldFZhbHVlKCk7DQotCUpTX0ZyZWVQcml2YXRlKG9iaik7DQotfQ0KLQ0KLUNKU19PYmplY3Q6OkNKU19PYmplY3QoSlNGWE9iamVjdCBwT2JqZWN0KSA6bV9wRW1iZWRPYmooTlVMTCkNCi17DQotCXY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IHBPYmplY3QtPkNyZWF0aW9uQ29udGV4dCgpOw0KLQltX3BJc29sYXRlID0gY29udGV4dC0+R2V0SXNvbGF0ZSgpOw0KLQltX3BPYmplY3QuUmVzZXQobV9wSXNvbGF0ZSwgcE9iamVjdCk7DQotfTsNCi0NCi1DSlNfT2JqZWN0Ojp+Q0pTX09iamVjdCh2b2lkKQ0KLXsNCi0JZGVsZXRlIG1fcEVtYmVkT2JqOw0KLQltX3BFbWJlZE9iaiA9IE5VTEw7DQotDQotCW1fcE9iamVjdC5SZXNldCgpOw0KLX07DQotDQotdm9pZAlDSlNfT2JqZWN0OjpNYWtlV2VhaygpDQotew0KLQltX3BPYmplY3QuU2V0V2Vhayh0aGlzLCBGcmVlT2JqZWN0KTsNCi19DQotDQotQ1BERlNES19QYWdlVmlldyogQ0pTX09iamVjdDo6SlNHZXRQYWdlVmlldyhJRlhKU19Db250ZXh0KiBjYykNCi17DQotCXJldHVybiBGWEpTX0dldFBhZ2VWaWV3KGNjKTsNCi19DQotDQotaW50IENKU19PYmplY3Q6Ok1zZ0JveChDUERGRG9jX0Vudmlyb25tZW50KiBwQXBwLCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0xQQ1dTVFIgc3dNc2csIEZYX0xQQ1dTVFIgc3dUaXRsZSwgRlhfVUlOVCBuVHlwZSwgRlhfVUlOVCBuSWNvbikNCi17DQotCXJldHVybiBGWEpTX01zZ0JveChwQXBwLCBwUGFnZVZpZXcsIHN3TXNnLCBzd1RpdGxlLCBuVHlwZSwgbkljb24pOw0KLX0NCi0NCi12b2lkIENKU19PYmplY3Q6OkFsZXJ0KENKU19Db250ZXh0KiBwQ29udGV4dCwgRlhfTFBDV1NUUiBzd01zZykNCi17DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0NCi0JaWYgKHBDb250ZXh0LT5Jc01zZ0JveEVuYWJsZWQoKSkNCi0Jew0KLQkJQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCA9IHBDb250ZXh0LT5HZXRSZWFkZXJBcHAoKTsNCi0JCWlmKHBBcHApDQotCQkJcEFwcC0+SlNfYXBwQWxlcnQoc3dNc2csIE5VTEwsIDAsIDMpOw0KLQl9DQotfQ0KLQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSmF2YVNjcmlwdC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9JSmF2YVNjcmlwdC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19EZWZpbmUuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfT2JqZWN0LmgiCisvLyAjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX01zZ0JveC5oIgorLy8gI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19SZXNNZ3IuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfQ29udGV4dC5oIgorCitpbnQgRlhKU19Nc2dCb3goQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCwgQ1BERlNES19QYWdlVmlldyogcFBhZ2VWaWV3LCBGWF9MUENXU1RSIHN3TXNnLCBGWF9MUENXU1RSIHN3VGl0bGUsIEZYX1VJTlQgblR5cGUsIEZYX1VJTlQgbkljb24pCit7CisJaW50IG5SZXQgPSAwOworCisJaWYocEFwcCkKKwl7CisJCUNQREZTREtfRG9jdW1lbnQqIHBEb2MgPSBwQXBwLT5HZXRDdXJyZW50RG9jKCk7CisJCWlmKHBEb2MpCisJCQlwRG9jLT5LaWxsRm9jdXNBbm5vdCgpOworCQluUmV0ID0gcEFwcC0+SlNfYXBwQWxlcnQoc3dNc2csIHN3VGl0bGUsIG5UeXBlLCBuSWNvbik7CisJfQorCisJcmV0dXJuIG5SZXQ7Cit9CisKK0NQREZTREtfUGFnZVZpZXcqIEZYSlNfR2V0UGFnZVZpZXcoSUZYSlNfQ29udGV4dCogY2MpCit7CisJaWYgKENKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjKQorCXsKKwkJaWYgKHBDb250ZXh0LT5HZXRSZWFkZXJEb2N1bWVudCgpKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENKU19FbWJlZE9iaiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ0pTX0VtYmVkT2JqOjpDSlNfRW1iZWRPYmooQ0pTX09iamVjdCogcEpTT2JqZWN0KSA6IAorCW1fcEpTT2JqZWN0KHBKU09iamVjdCkKK3sKK30KKworQ0pTX0VtYmVkT2JqOjp+Q0pTX0VtYmVkT2JqKCkKK3sKKwltX3BKU09iamVjdCA9IE5VTEw7CisKK30KKworQ1BERlNES19QYWdlVmlldyogQ0pTX0VtYmVkT2JqOjpKU0dldFBhZ2VWaWV3KElGWEpTX0NvbnRleHQqIGNjKQoreworCXJldHVybiBGWEpTX0dldFBhZ2VWaWV3KGNjKTsKK30KKworaW50IENKU19FbWJlZE9iajo6TXNnQm94KENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAsIENQREZTREtfUGFnZVZpZXcqIHBQYWdlVmlldyxGWF9MUENXU1RSIHN3TXNnLEZYX0xQQ1dTVFIgc3dUaXRsZSxGWF9VSU5UIG5UeXBlLEZYX1VJTlQgbkljb24pCit7CisJcmV0dXJuIEZYSlNfTXNnQm94KHBBcHAsIHBQYWdlVmlldywgc3dNc2csIHN3VGl0bGUsIG5UeXBlLCBuSWNvbik7Cit9CisKK3ZvaWQgQ0pTX0VtYmVkT2JqOjpBbGVydChDSlNfQ29udGV4dCogcENvbnRleHQsIEZYX0xQQ1dTVFIgc3dNc2cpCit7CisJQ0pTX09iamVjdDo6QWxlcnQocENvbnRleHQsIHN3TXNnKTsKK30KKworQ0pTX1RpbWVyKiBDSlNfRW1iZWRPYmo6OkJlZ2luVGltZXIoQ1BERkRvY19FbnZpcm9ubWVudCAqIHBBcHAsRlhfVUlOVCBuRWxhcHNlKQoreworCUNKU19UaW1lciogcFRpbWVyID0gbmV3IENKU19UaW1lcih0aGlzLHBBcHApOworCXBUaW1lci0+U2V0SlNUaW1lcihuRWxhcHNlKTsKKwkKKwlyZXR1cm4gcFRpbWVyOworfQorCit2b2lkIENKU19FbWJlZE9iajo6RW5kVGltZXIoQ0pTX1RpbWVyKiBwVGltZXIpCit7CisJQVNTRVJUKHBUaW1lciAhPSBOVUxMKTsKKwlwVGltZXItPktpbGxKU1RpbWVyKCk7CisJZGVsZXRlIHBUaW1lcjsKK30KKworRlhfQk9PTAlDSlNfRW1iZWRPYmo6OklzU2FmZU1vZGUoSUZYSlNfQ29udGV4dCogY2MpCit7CisJQVNTRVJUKGNjICE9IE5VTEwpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ0pTX09iamVjdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3ZvaWQgIEZyZWVPYmplY3QoY29uc3Qgdjg6OldlYWtDYWxsYmFja0RhdGE8djg6Ok9iamVjdCwgQ0pTX09iamVjdD4mIGRhdGEpCit7CisJQ0pTX09iamVjdCogcEpTT2JqICA9IGRhdGEuR2V0UGFyYW1ldGVyKCk7CisJaWYocEpTT2JqKQorCXsKKwkJcEpTT2JqLT5FeGl0SW5zdGFuY2UoKTsKKwkJZGVsZXRlIHBKU09iajsKKwl9CisJdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iaiA9IGRhdGEuR2V0VmFsdWUoKTsKKwlKU19GcmVlUHJpdmF0ZShvYmopOworfQorCitDSlNfT2JqZWN0OjpDSlNfT2JqZWN0KEpTRlhPYmplY3QgcE9iamVjdCkgOm1fcEVtYmVkT2JqKE5VTEwpCit7CisJdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gcE9iamVjdC0+Q3JlYXRpb25Db250ZXh0KCk7CisJbV9wSXNvbGF0ZSA9IGNvbnRleHQtPkdldElzb2xhdGUoKTsKKwltX3BPYmplY3QuUmVzZXQobV9wSXNvbGF0ZSwgcE9iamVjdCk7Cit9OworCitDSlNfT2JqZWN0Ojp+Q0pTX09iamVjdCh2b2lkKQoreworCWRlbGV0ZSBtX3BFbWJlZE9iajsKKwltX3BFbWJlZE9iaiA9IE5VTEw7CisKKwltX3BPYmplY3QuUmVzZXQoKTsKK307CisKK3ZvaWQJQ0pTX09iamVjdDo6TWFrZVdlYWsoKQoreworCW1fcE9iamVjdC5TZXRXZWFrKHRoaXMsIEZyZWVPYmplY3QpOworfQorCitDUERGU0RLX1BhZ2VWaWV3KiBDSlNfT2JqZWN0OjpKU0dldFBhZ2VWaWV3KElGWEpTX0NvbnRleHQqIGNjKQoreworCXJldHVybiBGWEpTX0dldFBhZ2VWaWV3KGNjKTsKK30KKworaW50IENKU19PYmplY3Q6Ok1zZ0JveChDUERGRG9jX0Vudmlyb25tZW50KiBwQXBwLCBDUERGU0RLX1BhZ2VWaWV3KiBwUGFnZVZpZXcsIEZYX0xQQ1dTVFIgc3dNc2csIEZYX0xQQ1dTVFIgc3dUaXRsZSwgRlhfVUlOVCBuVHlwZSwgRlhfVUlOVCBuSWNvbikKK3sKKwlyZXR1cm4gRlhKU19Nc2dCb3gocEFwcCwgcFBhZ2VWaWV3LCBzd01zZywgc3dUaXRsZSwgblR5cGUsIG5JY29uKTsKK30KKwordm9pZCBDSlNfT2JqZWN0OjpBbGVydChDSlNfQ29udGV4dCogcENvbnRleHQsIEZYX0xQQ1dTVFIgc3dNc2cpCit7CisJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCisJaWYgKHBDb250ZXh0LT5Jc01zZ0JveEVuYWJsZWQoKSkKKwl7CisJCUNQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAgPSBwQ29udGV4dC0+R2V0UmVhZGVyQXBwKCk7CisJCWlmKHBBcHApCisJCQlwQXBwLT5KU19hcHBBbGVydChzd01zZywgTlVMTCwgMCwgMyk7CisJfQorfQorCisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvSlNfUnVudGltZS5jcHAgYi9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L0pTX1J1bnRpbWUuY3BwCmluZGV4IDc3Nzk2NDMuLmM3YTkyZWIgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvSlNfUnVudGltZS5jcHAKKysrIGIvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9KU19SdW50aW1lLmNwcApAQCAtMSw0NzAgKzEsNDcwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0phdmFTY3JpcHQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0lKYXZhU2NyaXB0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19FdmVudEhhbmRsZXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1J1bnRpbWUuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0NvbnRleHQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0RlZmluZS5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfT2JqZWN0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19WYWx1ZS5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvRG9jdW1lbnQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L2FwcC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvY29sb3IuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0NvbnN0cy5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvRG9jdW1lbnQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L2V2ZW50LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9GaWVsZC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSWNvbi5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvUHVibGljTWV0aG9kcy5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvcmVwb3J0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC91dGlsLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19HbG9iYWxEYXRhLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9nbG9iYWwuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L2NvbnNvbGUuaCINCi0NCi1DSlNfUnVudGltZUZhY3Rvcnk6On5DSlNfUnVudGltZUZhY3RvcnkoKQ0KLXsNCi19DQotDQotSUZYSlNfUnVudGltZSoJCQkJCUNKU19SdW50aW1lRmFjdG9yeTo6TmV3SlNSdW50aW1lKENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHApDQotew0KLQlpZiAoIW1fYkluaXQpDQotCXsNCi0JCUpTX0luaXRpYWwoKTsNCi0JCQ0KLQkJbV9iSW5pdCA9IFRSVUU7DQotCX0NCi0JcmV0dXJuIG5ldyBDSlNfUnVudGltZShwQXBwKTsNCi19DQotdm9pZAkJCQkJCQlDSlNfUnVudGltZUZhY3Rvcnk6OkFkZFJlZigpDQotew0KLQkvL3RvIGRvLlNob3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBhdG9tIG1hbmlwdWxhdGlvbi4NCi0JbV9uUmVmKys7DQotfQ0KLXZvaWQJCQkJCQkJQ0pTX1J1bnRpbWVGYWN0b3J5OjpSZWxlYXNlKCkNCi17CQ0KLQlpZihtX2JJbml0KQ0KLQl7DQotCQkvL3RvIGRvLlNob3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBhdG9tIG1hbmlwdWxhdGlvbi4NCi0JCWlmICgtLW1fblJlZiA9PSAwKQ0KLQkJew0KLQkJCUpTX1JlbGVhc2UoKTsNCi0JCQlSZWxlYXNlR2xvYmFsRGF0YSgpOw0KLQkJCW1fYkluaXQgPSBGQUxTRTsNCi0JCX0NCi0JfQ0KLX0NCi0NCi12b2lkCQkJCQkJCUNKU19SdW50aW1lRmFjdG9yeTo6RGVsZXRlSlNSdW50aW1lKElGWEpTX1J1bnRpbWUqIHBSdW50aW1lKQ0KLXsNCi0JaWYocFJ1bnRpbWUpDQotCQlkZWxldGUgKENKU19SdW50aW1lKilwUnVudGltZTsNCi19DQotDQotQ0pTX0dsb2JhbERhdGEqCUNKU19SdW50aW1lRmFjdG9yeTo6TmV3R2xvYmFsRGF0YShDUERGRG9jX0Vudmlyb25tZW50KiBwQXBwKQ0KLXsNCi0JaWYgKG1fcEdsb2JhbERhdGEpDQotCXsNCi0JCW1fbkdsb2JhbERhdGFDb3VudCsrOw0KLQkJcmV0dXJuIG1fcEdsb2JhbERhdGE7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQltX25HbG9iYWxEYXRhQ291bnQgPSAxOw0KLQkJbV9wR2xvYmFsRGF0YSA9IG5ldyBDSlNfR2xvYmFsRGF0YShwQXBwKTsNCi0JCXJldHVybiBtX3BHbG9iYWxEYXRhOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ0pTX1J1bnRpbWVGYWN0b3J5OjpSZWxlYXNlR2xvYmFsRGF0YSgpDQotew0KLQltX25HbG9iYWxEYXRhQ291bnQtLTsNCi0JDQotCWlmIChtX25HbG9iYWxEYXRhQ291bnQgPD0gMCkNCi0Jew0KLSAJCWRlbGV0ZSBtX3BHbG9iYWxEYXRhOw0KLSAJCW1fcEdsb2JhbERhdGEgPSBOVUxMOw0KLQl9DQotfQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDSlNfUnVudGltZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DSlNfUnVudGltZTo6Q0pTX1J1bnRpbWUoQ1BERkRvY19FbnZpcm9ubWVudCAqIHBBcHApIDogDQotCW1fcEFwcChwQXBwKSwNCi0JbV9wRG9jdW1lbnQoTlVMTCksDQotCW1fcEZpZWxkRXZlbnRQYXRoKE5VTEwpLA0KLQltX2JCbG9ja2luZyhGQUxTRSksDQotCW1fYlJlZ2lzdGVyZWQoRkFMU0UpDQotew0KLQltX2lzb2xhdGUgPSB2ODo6SXNvbGF0ZTo6TmV3KCk7DQotCS8vbV9pc29sYXRlLT5FbnRlcigpOw0KLQ0KLQlJbml0SlNPYmplY3RzKCk7DQotDQotCUNKU19Db250ZXh0ICogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKU5ld0NvbnRleHQoKTsNCi0JSlNfSW5pdGlhbFJ1bnRpbWUoKnRoaXMsIHRoaXMsIHBDb250ZXh0LCBtX2NvbnRleHQpOw0KLQlSZWxlYXNlQ29udGV4dChwQ29udGV4dCk7DQotfQ0KLQ0KLUNKU19SdW50aW1lOjp+Q0pTX1J1bnRpbWUoKQ0KLXsNCi0JZm9yIChpbnQgaT0wLCBzej1tX0NvbnRleHRBcnJheS5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0JCWRlbGV0ZSBtX0NvbnRleHRBcnJheS5HZXRBdChpKTsNCi0NCi0JbV9Db250ZXh0QXJyYXkuUmVtb3ZlQWxsKCk7DQotDQotCUpTX1JlbGVhc2VSdW50aW1lKCp0aGlzLCBtX2NvbnRleHQpOw0KLQ0KLQlSZW1vdmVFdmVudHNJbkxvb3AobV9wRmllbGRFdmVudFBhdGgpOw0KLQ0KLQltX3BBcHAgPSBOVUxMOw0KLQltX3BEb2N1bWVudCA9IE5VTEw7DQotCW1fcEZpZWxkRXZlbnRQYXRoID0gTlVMTDsNCi0JbV9jb250ZXh0LlJlc2V0KCk7DQotDQotCS8vbV9pc29sYXRlLT5FeGl0KCk7DQotCW1faXNvbGF0ZS0+RGlzcG9zZSgpOw0KLX0NCi0NCi1GWF9CT09MIENKU19SdW50aW1lOjpJbml0SlNPYmplY3RzKCkNCi17DQotCXY4OjpJc29sYXRlOjpTY29wZSBpc29sYXRlX3Njb3BlKEdldElzb2xhdGUoKSk7DQotCXY4OjpIYW5kbGVTY29wZSBoYW5kbGVfc2NvcGUoR2V0SXNvbGF0ZSgpKTsNCi0Jdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpDb250ZXh0OjpOZXcoR2V0SXNvbGF0ZSgpKTsNCi0Jdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRfc2NvcGUoY29udGV4dCk7DQotCS8vMCAtIDgNCi0JaWYgKENKU19Cb3JkZXI6OkluaXQoKnRoaXMsIEpTX1NUQVRJQykgPCAwKSByZXR1cm4gRkFMU0U7DQotCWlmIChDSlNfRGlzcGxheTo6SW5pdCgqdGhpcywgSlNfU1RBVElDKSA8IDApIHJldHVybiBGQUxTRTsNCi0JaWYgKENKU19Gb250OjpJbml0KCp0aGlzLCBKU19TVEFUSUMpIDwgMCkgcmV0dXJuIEZBTFNFOw0KLQlpZiAoQ0pTX0hpZ2hsaWdodDo6SW5pdCgqdGhpcywgSlNfU1RBVElDKSA8IDApIHJldHVybiBGQUxTRTsNCi0JaWYgKENKU19Qb3NpdGlvbjo6SW5pdCgqdGhpcywgSlNfU1RBVElDKSA8IDApIHJldHVybiBGQUxTRTsNCi0JaWYgKENKU19TY2FsZUhvdzo6SW5pdCgqdGhpcywgSlNfU1RBVElDKSA8IDApIHJldHVybiBGQUxTRTsNCi0JaWYgKENKU19TY2FsZVdoZW46OkluaXQoKnRoaXMsIEpTX1NUQVRJQykgPCAwKSByZXR1cm4gRkFMU0U7DQotCWlmIChDSlNfU3R5bGU6OkluaXQoKnRoaXMsIEpTX1NUQVRJQykgPCAwKSByZXR1cm4gRkFMU0U7CQ0KLQlpZiAoQ0pTX1pvb210eXBlOjpJbml0KCp0aGlzLCBKU19TVEFUSUMpIDwgMCkgcmV0dXJuIEZBTFNFOwkNCi0NCi0JLy85IC0gMTENCi0JaWYgKENKU19BcHA6OkluaXQoKnRoaXMsIEpTX1NUQVRJQykgPCAwKSByZXR1cm4gRkFMU0U7DQotCWlmIChDSlNfQ29sb3I6OkluaXQoKnRoaXMsIEpTX1NUQVRJQykgPCAwKSByZXR1cm4gRkFMU0U7ICAgDQotCWlmIChDSlNfQ29uc29sZTo6SW5pdCgqdGhpcywgSlNfU1RBVElDKSA8IDApIHJldHVybiBGQUxTRTsNCi0NCi0JLy8xMiAtIDE0DQotCWlmIChDSlNfRG9jdW1lbnQ6OkluaXQoKnRoaXMsIEpTX0RZTkFNSUMpIDwgMCkgcmV0dXJuIEZBTFNFOyAgDQotCWlmIChDSlNfRXZlbnQ6OkluaXQoKnRoaXMsIEpTX1NUQVRJQykgPCAwKSByZXR1cm4gRkFMU0U7CQkNCi0JaWYgKENKU19GaWVsZDo6SW5pdCgqdGhpcywgSlNfRFlOQU1JQykgPCAwKSByZXR1cm4gRkFMU0U7ICAgIA0KLQ0KLQkvLzE1IC0gMTcNCi0JaWYgKENKU19HbG9iYWw6OkluaXQoKnRoaXMsIEpTX1NUQVRJQykgPCAwKSByZXR1cm4gRkFMU0U7CQkNCi0JaWYgKENKU19JY29uOjpJbml0KCp0aGlzLCBKU19EWU5BTUlDKSA8IDApIHJldHVybiBGQUxTRTsNCi0JaWYgKENKU19VdGlsOjpJbml0KCp0aGlzLCBKU19TVEFUSUMpIDwgMCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlpZiAoQ0pTX1B1YmxpY01ldGhvZHM6OkluaXQoKnRoaXMpIDwgMCkgcmV0dXJuIEZBTFNFOw0KLQlpZiAoQ0pTX0dsb2JhbENvbnN0czo6SW5pdCgqdGhpcykgPCAwKSByZXR1cm4gRkFMU0U7DQotCWlmIChDSlNfR2xvYmFsQXJyYXlzOjpJbml0KCp0aGlzKSA8IDApIHJldHVybiBGQUxTRTsNCi0NCi0JaWYgKENKU19UaW1lck9iajo6SW5pdCgqdGhpcywgSlNfRFlOQU1JQykgPCAwKSByZXR1cm4gRkFMU0U7DQotCWlmIChDSlNfUHJpbnRQYXJhbXNPYmo6OkluaXQoKnRoaXMsIEpTX0RZTkFNSUMpIDwwKSByZXR1cm4gRkFMU0U7DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1JRlhKU19Db250ZXh0KiBDSlNfUnVudGltZTo6TmV3Q29udGV4dCgpDQotew0KLQlDSlNfQ29udGV4dCAqIHAgPSBuZXcgQ0pTX0NvbnRleHQodGhpcyk7DQotCW1fQ29udGV4dEFycmF5LkFkZChwKTsNCi0JcmV0dXJuIHA7DQotfQ0KLQ0KLXZvaWQgQ0pTX1J1bnRpbWU6OlJlbGVhc2VDb250ZXh0KElGWEpTX0NvbnRleHQgKiBwQ29udGV4dCkNCi17DQotCUNKU19Db250ZXh0KiBwSlNDb250ZXh0ID0gKENKU19Db250ZXh0KilwQ29udGV4dDsNCi0NCi0JZm9yIChpbnQgaT0wLCBzej1tX0NvbnRleHRBcnJheS5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJaWYgKHBKU0NvbnRleHQgPT0gbV9Db250ZXh0QXJyYXkuR2V0QXQoaSkpDQotCQl7DQotCQkJZGVsZXRlIHBKU0NvbnRleHQ7DQotCQkJbV9Db250ZXh0QXJyYXkuUmVtb3ZlQXQoaSk7DQotCQkJYnJlYWs7DQotCQl9DQotCX0NCi19DQotDQotSUZYSlNfQ29udGV4dCoJQ0pTX1J1bnRpbWU6OkdldEN1cnJlbnRDb250ZXh0KCkNCi17DQotCWlmKCFtX0NvbnRleHRBcnJheS5HZXRTaXplKCkpDQotCQlyZXR1cm4gTlVMTDsNCi0JcmV0dXJuIG1fQ29udGV4dEFycmF5LkdldEF0KG1fQ29udGV4dEFycmF5LkdldFNpemUoKS0xKTsNCi19DQotDQotdm9pZCBDSlNfUnVudGltZTo6U2V0UmVhZGVyRG9jdW1lbnQoQ1BERlNES19Eb2N1bWVudCogcFJlYWRlckRvYykNCi17DQotCWlmIChtX3BEb2N1bWVudCAhPSBwUmVhZGVyRG9jKQ0KLQl7DQotCQl2ODo6SXNvbGF0ZTo6U2NvcGUgaXNvbGF0ZV9zY29wZShtX2lzb2xhdGUpOw0KLQkJdjg6OkhhbmRsZVNjb3BlIGhhbmRsZV9zY29wZShtX2lzb2xhdGUpOw0KLQkJdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID12ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcobV9pc29sYXRlLCBtX2NvbnRleHQpOw0KLQkJdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRfc2NvcGUoY29udGV4dCk7DQotDQotCQltX3BEb2N1bWVudCA9IHBSZWFkZXJEb2M7DQotDQotCQlpZiAocFJlYWRlckRvYykNCi0JCXsNCi0JCQlKU09iamVjdCBwVGhpcyA9IEpTX0dldFRoaXNPYmooKnRoaXMpOw0KLQkJCWlmKCFwVGhpcy5Jc0VtcHR5KCkpDQotCQkJew0KLQkJCQlpZiAoSlNfR2V0T2JqRGVmbklEKHBUaGlzKSA9PSBKU19HZXRPYmpEZWZuSUQoKnRoaXMsIEwiRG9jdW1lbnQiKSkNCi0JCQkJew0KLQkJCQkJaWYgKENKU19Eb2N1bWVudCogcEpTRG9jdW1lbnQgPSAoQ0pTX0RvY3VtZW50KilKU19HZXRQcml2YXRlKHBUaGlzKSkNCi0JCQkJCXsNCi0JCQkJCQlpZiAoRG9jdW1lbnQgKiBwRG9jdW1lbnQgPSAoRG9jdW1lbnQqKXBKU0RvY3VtZW50LT5HZXRFbWJlZE9iamVjdCgpKQ0KLQkJCQkJCQlwRG9jdW1lbnQtPkF0dGFjaERvYyhwUmVhZGVyRG9jKTsNCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCX0NCi0JCQlKU19TZXRUaGlzT2JqKCp0aGlzLCBKU19HZXRPYmpEZWZuSUQoKnRoaXMsIEwiRG9jdW1lbnQiKSk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJSlNfU2V0VGhpc09iaigqdGhpcywgSlNfR2V0T2JqRGVmbklEKCp0aGlzLCBMImFwcCIpKTsNCi0JCX0NCi0JfQ0KLX0NCi0NCi1GWF9CT09MCUNKU19SdW50aW1lOjpBZGRFdmVudFRvTG9vcChjb25zdCBDRlhfV2lkZVN0cmluZyYgc1RhcmdldE5hbWUsIEpTX0VWRU5UX1QgZUV2ZW50VHlwZSkNCi17DQotCWlmIChtX3BGaWVsZEV2ZW50UGF0aCA9PSBOVUxMKQ0KLQl7DQotCQltX3BGaWVsZEV2ZW50UGF0aCA9IG5ldyBDSlNfRmllbGRFdmVudDsNCi0JCW1fcEZpZWxkRXZlbnRQYXRoLT5zVGFyZ2V0TmFtZSA9IHNUYXJnZXROYW1lOw0KLQkJbV9wRmllbGRFdmVudFBhdGgtPmVFdmVudFR5cGUgPSBlRXZlbnRUeXBlOw0KLQkJbV9wRmllbGRFdmVudFBhdGgtPnBOZXh0ID0gTlVMTDsNCi0NCi0JCXJldHVybiBUUlVFOw0KLQl9DQotDQotCS8vdG8gc2VhcmNoDQotCUNKU19GaWVsZEV2ZW50KiBwID0gbV9wRmllbGRFdmVudFBhdGg7DQotCUNKU19GaWVsZEV2ZW50KiBwTGFzdCA9IG1fcEZpZWxkRXZlbnRQYXRoOw0KLQl3aGlsZSAocCkNCi0Jew0KLQkJaWYgKHAtPmVFdmVudFR5cGUgPT0gZUV2ZW50VHlwZSAmJiBwLT5zVGFyZ2V0TmFtZSA9PSBzVGFyZ2V0TmFtZSkNCi0JCQlyZXR1cm4gRkFMU0U7DQotDQotCQlwTGFzdCA9IHA7DQotCQlwID0gcC0+cE5leHQ7DQotCX0NCi0NCi0JLy90byBhZGQNCi0JQ0pTX0ZpZWxkRXZlbnQqIHBOZXcgPSBuZXcgQ0pTX0ZpZWxkRXZlbnQ7DQotCXBOZXctPnNUYXJnZXROYW1lID0gc1RhcmdldE5hbWU7DQotCXBOZXctPmVFdmVudFR5cGUgPSBlRXZlbnRUeXBlOw0KLQlwTmV3LT5wTmV4dCA9IE5VTEw7DQotDQotCXBMYXN0LT5wTmV4dCA9IHBOZXc7DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi12b2lkIENKU19SdW50aW1lOjpSZW1vdmVFdmVudEluTG9vcChjb25zdCBDRlhfV2lkZVN0cmluZyYgc1RhcmdldE5hbWUsIEpTX0VWRU5UX1QgZUV2ZW50VHlwZSkNCi17DQotCUZYX0JPT0wgYkZpbmQgPSBGQUxTRTsNCi0NCi0JQ0pTX0ZpZWxkRXZlbnQqIHAgPSBtX3BGaWVsZEV2ZW50UGF0aDsNCi0JQ0pTX0ZpZWxkRXZlbnQqIHBMYXN0ID0gTlVMTDsNCi0Jd2hpbGUgKHApDQotCXsNCi0JCWlmIChwLT5lRXZlbnRUeXBlID09IGVFdmVudFR5cGUgJiYgcC0+c1RhcmdldE5hbWUgPT0gc1RhcmdldE5hbWUpDQotCQl7DQotCQkJYkZpbmQgPSBUUlVFOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQ0KLQkJcExhc3QgPSBwOw0KLQkJcCA9IHAtPnBOZXh0Ow0KLQl9DQotDQotCWlmIChiRmluZCkNCi0Jew0KLQkJUmVtb3ZlRXZlbnRzSW5Mb29wKHApOw0KLQ0KLQkJaWYgKHAgPT0gbV9wRmllbGRFdmVudFBhdGgpDQotCQkJbV9wRmllbGRFdmVudFBhdGggPSBOVUxMOw0KLQ0KLQkJaWYgKHBMYXN0KQ0KLQkJCXBMYXN0LT5wTmV4dCA9IE5VTEw7DQotCX0NCi19DQotDQotdm9pZCBDSlNfUnVudGltZTo6UmVtb3ZlRXZlbnRzSW5Mb29wKENKU19GaWVsZEV2ZW50KiBwU3RhcnQpDQotew0KLQlDSlNfRmllbGRFdmVudCogcCA9IHBTdGFydDsNCi0NCi0Jd2hpbGUgKHApDQotCXsNCi0JCUNKU19GaWVsZEV2ZW50KiBwT2xkID0gcDsNCi0JCXAgPSBwT2xkLT5wTmV4dDsNCi0NCi0JCWRlbGV0ZSBwT2xkOw0KLQl9DQotfQ0KLQ0KLXY4OjpIYW5kbGU8djg6OkNvbnRleHQ+CUNKU19SdW50aW1lOjpOZXdKU0NvbnRleHQoKQ0KLXsNCi0JcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhtX2lzb2xhdGUsIG1fY29udGV4dCk7DQotfQ0KLQ0KLUNGWF9XaWRlU3RyaW5nIENoYW5nZU9iak5hbWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cikNCi17DQotCUNGWF9XaWRlU3RyaW5nIHNSZXQgPSBzdHI7DQotCXNSZXQuUmVwbGFjZSgoRlhfTFBDV1NUUilMIl8iLCAoRlhfTFBDV1NUUilMIi4iKTsNCi0JcmV0dXJuIHNSZXQ7DQotfQ0KLQ0KLXZvaWQgQ0pTX1J1bnRpbWU6OkdldE9iamVjdE5hbWVzKENGWF9XaWRlU3RyaW5nQXJyYXkmIGFycmF5KQ0KLXsNCi0JYXJyYXkuUmVtb3ZlQWxsKCk7DQotDQotCWFycmF5LkFkZChDSlNfQm9yZGVyOjptX3BDbGFzc05hbWUpOw0KLQlhcnJheS5BZGQoQ0pTX0Rpc3BsYXk6Om1fcENsYXNzTmFtZSk7DQotCWFycmF5LkFkZChDSlNfRm9udDo6bV9wQ2xhc3NOYW1lKTsNCi0JYXJyYXkuQWRkKENKU19IaWdobGlnaHQ6Om1fcENsYXNzTmFtZSk7DQotCWFycmF5LkFkZChDSlNfUG9zaXRpb246Om1fcENsYXNzTmFtZSk7DQotCWFycmF5LkFkZChDSlNfU2NhbGVIb3c6Om1fcENsYXNzTmFtZSk7DQotCWFycmF5LkFkZChDSlNfU2NhbGVXaGVuOjptX3BDbGFzc05hbWUpOw0KLQlhcnJheS5BZGQoQ0pTX1N0eWxlOjptX3BDbGFzc05hbWUpOw0KLQlhcnJheS5BZGQoQ0pTX1pvb210eXBlOjptX3BDbGFzc05hbWUpOw0KLQ0KLQlhcnJheS5BZGQoQ0pTX0FwcDo6bV9wQ2xhc3NOYW1lKTsNCi0JYXJyYXkuQWRkKChGWF9MUENXU1RSKSJ0aGlzIik7IA0KLQlhcnJheS5BZGQoQ0pTX0V2ZW50OjptX3BDbGFzc05hbWUpOwkNCi0NCi0JYXJyYXkuQWRkKENKU19HbG9iYWw6Om1fcENsYXNzTmFtZSk7CQ0KLQlhcnJheS5BZGQoQ0pTX1V0aWw6Om1fcENsYXNzTmFtZSk7DQotfQ0KLQ0KLXZvaWQgQ0pTX1J1bnRpbWU6OkdldE9iamVjdENvbnN0cyhjb25zdCBDRlhfV2lkZVN0cmluZyYgc09iak5hbWUsIENGWF9XaWRlU3RyaW5nQXJyYXkmIGFycmF5KQ0KLXsNCi0JSlNDb25zdFNwZWMqIHBDb25zdHMgPSBOVUxMOw0KLQlpbnQgblNpemUgPSAwOw0KLQ0KLQlpZiAoc09iak5hbWUgPT0gQ0pTX0JvcmRlcjo6bV9wQ2xhc3NOYW1lKQ0KLQkJQ0pTX0JvcmRlcjo6R2V0Q29uc3RzKHBDb25zdHMsIG5TaXplKTsNCi0JZWxzZSBpZiAoc09iak5hbWUgPT0gQ0pTX0Rpc3BsYXk6Om1fcENsYXNzTmFtZSkNCi0JCUNKU19EaXNwbGF5OjpHZXRDb25zdHMocENvbnN0cywgblNpemUpOw0KLQllbHNlIGlmIChzT2JqTmFtZSA9PSBDSlNfRm9udDo6bV9wQ2xhc3NOYW1lKQ0KLQkJQ0pTX0ZvbnQ6OkdldENvbnN0cyhwQ29uc3RzLCBuU2l6ZSk7DQotCWVsc2UgaWYgKHNPYmpOYW1lID09IENKU19IaWdobGlnaHQ6Om1fcENsYXNzTmFtZSkNCi0JCUNKU19IaWdobGlnaHQ6OkdldENvbnN0cyhwQ29uc3RzLCBuU2l6ZSk7DQotCWVsc2UgaWYgKHNPYmpOYW1lID09IENKU19Qb3NpdGlvbjo6bV9wQ2xhc3NOYW1lKQ0KLQkJQ0pTX1Bvc2l0aW9uOjpHZXRDb25zdHMocENvbnN0cywgblNpemUpOw0KLQllbHNlIGlmIChzT2JqTmFtZSA9PSBDSlNfU2NhbGVIb3c6Om1fcENsYXNzTmFtZSkNCi0JCUNKU19TY2FsZUhvdzo6R2V0Q29uc3RzKHBDb25zdHMsIG5TaXplKTsNCi0JZWxzZSBpZiAoc09iak5hbWUgPT0gQ0pTX1NjYWxlV2hlbjo6bV9wQ2xhc3NOYW1lKQ0KLQkJQ0pTX1NjYWxlV2hlbjo6R2V0Q29uc3RzKHBDb25zdHMsIG5TaXplKTsNCi0JZWxzZSBpZiAoc09iak5hbWUgPT0gQ0pTX1N0eWxlOjptX3BDbGFzc05hbWUpDQotCQlDSlNfU3R5bGU6OkdldENvbnN0cyhwQ29uc3RzLCBuU2l6ZSk7DQotCWVsc2UgaWYgKHNPYmpOYW1lID09IENKU19ab29tdHlwZTo6bV9wQ2xhc3NOYW1lKQ0KLQkJQ0pTX1pvb210eXBlOjpHZXRDb25zdHMocENvbnN0cywgblNpemUpOw0KLQ0KLQllbHNlIGlmIChzT2JqTmFtZSA9PSBDSlNfQXBwOjptX3BDbGFzc05hbWUpDQotCQlDSlNfQXBwOjpHZXRDb25zdHMocENvbnN0cywgblNpemUpOw0KLQllbHNlIGlmIChzT2JqTmFtZSA9PSBDSlNfQ29sb3I6Om1fcENsYXNzTmFtZSkNCi0JCUNKU19Db2xvcjo6R2V0Q29uc3RzKHBDb25zdHMsIG5TaXplKTsJDQotDQotCWVsc2UgaWYgKHNPYmpOYW1lID09IEwidGhpcyIpIA0KLQl7DQotCQlpZiAoR2V0UmVhZGVyRG9jdW1lbnQoKSkNCi0JCQlDSlNfRG9jdW1lbnQ6OkdldENvbnN0cyhwQ29uc3RzLCBuU2l6ZSk7DQotCQllbHNlIA0KLQkJCUNKU19BcHA6OkdldENvbnN0cyhwQ29uc3RzLCBuU2l6ZSk7DQotCX0NCi0NCi0JaWYgKHNPYmpOYW1lID09IENKU19FdmVudDo6bV9wQ2xhc3NOYW1lKQ0KLQkJQ0pTX0V2ZW50OjpHZXRDb25zdHMocENvbnN0cywgblNpemUpOwkNCi0JZWxzZSBpZiAoc09iak5hbWUgPT0gQ0pTX0ZpZWxkOjptX3BDbGFzc05hbWUpDQotCQlDSlNfRmllbGQ6OkdldENvbnN0cyhwQ29uc3RzLCBuU2l6ZSk7CQ0KLQllbHNlIGlmIChzT2JqTmFtZSA9PSBDSlNfR2xvYmFsOjptX3BDbGFzc05hbWUpDQotCQlDSlNfR2xvYmFsOjpHZXRDb25zdHMocENvbnN0cywgblNpemUpOwkNCi0JZWxzZSBpZiAoc09iak5hbWUgPT0gQ0pTX1V0aWw6Om1fcENsYXNzTmFtZSkNCi0JCUNKU19VdGlsOjpHZXRDb25zdHMocENvbnN0cywgblNpemUpOw0KLQ0KLQlmb3IgKGludCBpPTA7IGk8blNpemU7IGkrKykNCi0JCWFycmF5LkFkZChwQ29uc3RzW2ldLnBOYW1lKTsNCi19DQotDQotdm9pZCBDSlNfUnVudGltZTo6R2V0T2JqZWN0UHJvcHMoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNPYmpOYW1lLCBDRlhfV2lkZVN0cmluZ0FycmF5JiBhcnJheSkNCi17DQotCUpTUHJvcGVydHlTcGVjKiBwUHJvcGVydGllcyA9IE5VTEw7DQotCWludCBuU2l6ZSA9IDA7DQotDQotIAlpZiAoc09iak5hbWUgPT0gQ0pTX0FwcDo6bV9wQ2xhc3NOYW1lKQ0KLQkJQ0pTX0FwcDo6R2V0UHJvcGVydGllcyhwUHJvcGVydGllcywgblNpemUpOw0KLQllbHNlIGlmIChzT2JqTmFtZSA9PSBDSlNfQ29sb3I6Om1fcENsYXNzTmFtZSkNCi0JCUNKU19Db2xvcjo6R2V0UHJvcGVydGllcyhwUHJvcGVydGllcywgblNpemUpOyANCi0JZWxzZSBpZiAoc09iak5hbWUgPT0gTCJ0aGlzIikNCi0Jew0KLQkJaWYgKEdldFJlYWRlckRvY3VtZW50KCkpDQotCQkJQ0pTX0RvY3VtZW50OjpHZXRQcm9wZXJ0aWVzKHBQcm9wZXJ0aWVzLCBuU2l6ZSk7DQotCQllbHNlCQ0KLQkJCUNKU19BcHA6OkdldFByb3BlcnRpZXMocFByb3BlcnRpZXMsIG5TaXplKTsNCi0JfQ0KLQllbHNlIGlmIChzT2JqTmFtZSA9PSBDSlNfRXZlbnQ6Om1fcENsYXNzTmFtZSkNCi0JCUNKU19FdmVudDo6R2V0UHJvcGVydGllcyhwUHJvcGVydGllcywgblNpemUpOwkNCi0JZWxzZSBpZiAoc09iak5hbWUgPT0gQ0pTX0ZpZWxkOjptX3BDbGFzc05hbWUpDQotCQlDSlNfRmllbGQ6OkdldFByb3BlcnRpZXMocFByb3BlcnRpZXMsIG5TaXplKTsJDQotCWVsc2UgaWYgKHNPYmpOYW1lID09IENKU19HbG9iYWw6Om1fcENsYXNzTmFtZSkNCi0JCUNKU19HbG9iYWw6OkdldFByb3BlcnRpZXMocFByb3BlcnRpZXMsIG5TaXplKTsJDQotCWVsc2UgaWYgKHNPYmpOYW1lID09IENKU19VdGlsOjptX3BDbGFzc05hbWUpDQotCQlDSlNfVXRpbDo6R2V0UHJvcGVydGllcyhwUHJvcGVydGllcywgblNpemUpOw0KLQ0KLQlmb3IgKGludCBpPTA7IGk8blNpemU7IGkrKykNCi0JCWFycmF5LkFkZChwUHJvcGVydGllc1tpXS5wTmFtZSk7DQotfQ0KLQ0KLXZvaWQgQ0pTX1J1bnRpbWU6OkdldE9iamVjdE1ldGhvZHMoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNPYmpOYW1lLCBDRlhfV2lkZVN0cmluZ0FycmF5JiBhcnJheSkNCi17DQotCUpTTWV0aG9kU3BlYyogcE1ldGhvZHMgPSBOVUxMOw0KLQlpbnQgblNpemUgPSAwOw0KLQ0KLSAJIGlmIChzT2JqTmFtZSA9PSBDSlNfQXBwOjptX3BDbGFzc05hbWUpDQotCQlDSlNfQXBwOjpHZXRNZXRob2RzKHBNZXRob2RzLCBuU2l6ZSk7DQotCWVsc2UgaWYgKHNPYmpOYW1lID09IENKU19Db2xvcjo6bV9wQ2xhc3NOYW1lKQ0KLQkJQ0pTX0NvbG9yOjpHZXRNZXRob2RzKHBNZXRob2RzLCBuU2l6ZSk7CQ0KLQllbHNlIGlmIChzT2JqTmFtZSA9PSBMInRoaXMiKSANCi0Jew0KLQkJaWYgKEdldFJlYWRlckRvY3VtZW50KCkpDQotCQkJQ0pTX0RvY3VtZW50OjpHZXRNZXRob2RzKHBNZXRob2RzLCBuU2l6ZSk7DQotCQllbHNlCQ0KLQkJCUNKU19BcHA6OkdldE1ldGhvZHMocE1ldGhvZHMsIG5TaXplKTsNCi0JfQ0KLQllbHNlIGlmIChzT2JqTmFtZSA9PSBDSlNfRXZlbnQ6Om1fcENsYXNzTmFtZSkNCi0JCUNKU19FdmVudDo6R2V0TWV0aG9kcyhwTWV0aG9kcywgblNpemUpOwkNCi0JZWxzZSBpZiAoc09iak5hbWUgPT0gQ0pTX0ZpZWxkOjptX3BDbGFzc05hbWUpDQotCQlDSlNfRmllbGQ6OkdldE1ldGhvZHMocE1ldGhvZHMsIG5TaXplKTsJDQotCWVsc2UgaWYgKHNPYmpOYW1lID09IENKU19HbG9iYWw6Om1fcENsYXNzTmFtZSkNCi0JCUNKU19HbG9iYWw6OkdldE1ldGhvZHMocE1ldGhvZHMsIG5TaXplKTsJDQotCWVsc2UgaWYgKHNPYmpOYW1lID09IENKU19VdGlsOjptX3BDbGFzc05hbWUpDQotCQlDSlNfVXRpbDo6R2V0TWV0aG9kcyhwTWV0aG9kcywgblNpemUpOw0KLQ0KLQlmb3IgKGludCBpPTA7IGk8blNpemU7IGkrKykNCi0JCWFycmF5LkFkZChwTWV0aG9kc1tpXS5wTmFtZSk7DQotfQ0KLQ0KLUZYX0JPT0wgIENKU19SdW50aW1lOjpJc0VudGVyZWQoKQ0KLXsNCi0JcmV0dXJuIHY4OjpJc29sYXRlOjpHZXRDdXJyZW50KCkgPT0gbV9pc29sYXRlOw0KLX0NCi12b2lkCUNKU19SdW50aW1lOjpFeGl0KCkNCi17DQotCWlmKG1faXNvbGF0ZSkgbV9pc29sYXRlLT5FeGl0KCk7DQotfQ0KLXZvaWQJQ0pTX1J1bnRpbWU6OkVudGVyKCkNCi17DQotCWlmKG1faXNvbGF0ZSkgbV9pc29sYXRlLT5FbnRlcigpOw0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0phdmFTY3JpcHQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSUphdmFTY3JpcHQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1J1bnRpbWUuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfQ29udGV4dC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19EZWZpbmUuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfT2JqZWN0LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1ZhbHVlLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0RvY3VtZW50LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L2FwcC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9jb2xvci5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9Db25zdHMuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvRG9jdW1lbnQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvZXZlbnQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvRmllbGQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSWNvbi5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9QdWJsaWNNZXRob2RzLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L3JlcG9ydC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC91dGlsLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvZ2xvYmFsLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L2NvbnNvbGUuaCIKKworQ0pTX1J1bnRpbWVGYWN0b3J5Ojp+Q0pTX1J1bnRpbWVGYWN0b3J5KCkKK3sKK30KKworSUZYSlNfUnVudGltZSoJCQkJCUNKU19SdW50aW1lRmFjdG9yeTo6TmV3SlNSdW50aW1lKENQREZEb2NfRW52aXJvbm1lbnQqIHBBcHApCit7CisJaWYgKCFtX2JJbml0KQorCXsKKwkJSlNfSW5pdGlhbCgpOworCQkKKwkJbV9iSW5pdCA9IFRSVUU7CisJfQorCXJldHVybiBuZXcgQ0pTX1J1bnRpbWUocEFwcCk7Cit9Cit2b2lkCQkJCQkJCUNKU19SdW50aW1lRmFjdG9yeTo6QWRkUmVmKCkKK3sKKwkvL3RvIGRvLlNob3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBhdG9tIG1hbmlwdWxhdGlvbi4KKwltX25SZWYrKzsKK30KK3ZvaWQJCQkJCQkJQ0pTX1J1bnRpbWVGYWN0b3J5OjpSZWxlYXNlKCkKK3sJCisJaWYobV9iSW5pdCkKKwl7CisJCS8vdG8gZG8uU2hvdWxkIGJlIGltcGxlbWVudGVkIGFzIGF0b20gbWFuaXB1bGF0aW9uLgorCQlpZiAoLS1tX25SZWYgPT0gMCkKKwkJeworCQkJSlNfUmVsZWFzZSgpOworCQkJUmVsZWFzZUdsb2JhbERhdGEoKTsKKwkJCW1fYkluaXQgPSBGQUxTRTsKKwkJfQorCX0KK30KKwordm9pZAkJCQkJCQlDSlNfUnVudGltZUZhY3Rvcnk6OkRlbGV0ZUpTUnVudGltZShJRlhKU19SdW50aW1lKiBwUnVudGltZSkKK3sKKwlpZihwUnVudGltZSkKKwkJZGVsZXRlIChDSlNfUnVudGltZSopcFJ1bnRpbWU7Cit9CisKK0NKU19HbG9iYWxEYXRhKglDSlNfUnVudGltZUZhY3Rvcnk6Ok5ld0dsb2JhbERhdGEoQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCkKK3sKKwlpZiAobV9wR2xvYmFsRGF0YSkKKwl7CisJCW1fbkdsb2JhbERhdGFDb3VudCsrOworCQlyZXR1cm4gbV9wR2xvYmFsRGF0YTsKKwl9CisJZWxzZQorCXsKKwkJbV9uR2xvYmFsRGF0YUNvdW50ID0gMTsKKwkJbV9wR2xvYmFsRGF0YSA9IG5ldyBDSlNfR2xvYmFsRGF0YShwQXBwKTsKKwkJcmV0dXJuIG1fcEdsb2JhbERhdGE7CisJfQorfQorCit2b2lkIENKU19SdW50aW1lRmFjdG9yeTo6UmVsZWFzZUdsb2JhbERhdGEoKQoreworCW1fbkdsb2JhbERhdGFDb3VudC0tOworCQorCWlmIChtX25HbG9iYWxEYXRhQ291bnQgPD0gMCkKKwl7CisgCQlkZWxldGUgbV9wR2xvYmFsRGF0YTsKKyAJCW1fcEdsb2JhbERhdGEgPSBOVUxMOworCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENKU19SdW50aW1lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDSlNfUnVudGltZTo6Q0pTX1J1bnRpbWUoQ1BERkRvY19FbnZpcm9ubWVudCAqIHBBcHApIDogCisJbV9wQXBwKHBBcHApLAorCW1fcERvY3VtZW50KE5VTEwpLAorCW1fcEZpZWxkRXZlbnRQYXRoKE5VTEwpLAorCW1fYkJsb2NraW5nKEZBTFNFKSwKKwltX2JSZWdpc3RlcmVkKEZBTFNFKQoreworCW1faXNvbGF0ZSA9IHY4OjpJc29sYXRlOjpOZXcoKTsKKwkvL21faXNvbGF0ZS0+RW50ZXIoKTsKKworCUluaXRKU09iamVjdHMoKTsKKworCUNKU19Db250ZXh0ICogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKU5ld0NvbnRleHQoKTsKKwlKU19Jbml0aWFsUnVudGltZSgqdGhpcywgdGhpcywgcENvbnRleHQsIG1fY29udGV4dCk7CisJUmVsZWFzZUNvbnRleHQocENvbnRleHQpOworfQorCitDSlNfUnVudGltZTo6fkNKU19SdW50aW1lKCkKK3sKKwlmb3IgKGludCBpPTAsIHN6PW1fQ29udGV4dEFycmF5LkdldFNpemUoKTsgaTxzejsgaSsrKQorCQlkZWxldGUgbV9Db250ZXh0QXJyYXkuR2V0QXQoaSk7CisKKwltX0NvbnRleHRBcnJheS5SZW1vdmVBbGwoKTsKKworCUpTX1JlbGVhc2VSdW50aW1lKCp0aGlzLCBtX2NvbnRleHQpOworCisJUmVtb3ZlRXZlbnRzSW5Mb29wKG1fcEZpZWxkRXZlbnRQYXRoKTsKKworCW1fcEFwcCA9IE5VTEw7CisJbV9wRG9jdW1lbnQgPSBOVUxMOworCW1fcEZpZWxkRXZlbnRQYXRoID0gTlVMTDsKKwltX2NvbnRleHQuUmVzZXQoKTsKKworCS8vbV9pc29sYXRlLT5FeGl0KCk7CisJbV9pc29sYXRlLT5EaXNwb3NlKCk7Cit9CisKK0ZYX0JPT0wgQ0pTX1J1bnRpbWU6OkluaXRKU09iamVjdHMoKQoreworCXY4OjpJc29sYXRlOjpTY29wZSBpc29sYXRlX3Njb3BlKEdldElzb2xhdGUoKSk7CisJdjg6OkhhbmRsZVNjb3BlIGhhbmRsZV9zY29wZShHZXRJc29sYXRlKCkpOworCXY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSB2ODo6Q29udGV4dDo6TmV3KEdldElzb2xhdGUoKSk7CisJdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRfc2NvcGUoY29udGV4dCk7CisJLy8wIC0gOAorCWlmIChDSlNfQm9yZGVyOjpJbml0KCp0aGlzLCBKU19TVEFUSUMpIDwgMCkgcmV0dXJuIEZBTFNFOworCWlmIChDSlNfRGlzcGxheTo6SW5pdCgqdGhpcywgSlNfU1RBVElDKSA8IDApIHJldHVybiBGQUxTRTsKKwlpZiAoQ0pTX0ZvbnQ6OkluaXQoKnRoaXMsIEpTX1NUQVRJQykgPCAwKSByZXR1cm4gRkFMU0U7CisJaWYgKENKU19IaWdobGlnaHQ6OkluaXQoKnRoaXMsIEpTX1NUQVRJQykgPCAwKSByZXR1cm4gRkFMU0U7CisJaWYgKENKU19Qb3NpdGlvbjo6SW5pdCgqdGhpcywgSlNfU1RBVElDKSA8IDApIHJldHVybiBGQUxTRTsKKwlpZiAoQ0pTX1NjYWxlSG93OjpJbml0KCp0aGlzLCBKU19TVEFUSUMpIDwgMCkgcmV0dXJuIEZBTFNFOworCWlmIChDSlNfU2NhbGVXaGVuOjpJbml0KCp0aGlzLCBKU19TVEFUSUMpIDwgMCkgcmV0dXJuIEZBTFNFOworCWlmIChDSlNfU3R5bGU6OkluaXQoKnRoaXMsIEpTX1NUQVRJQykgPCAwKSByZXR1cm4gRkFMU0U7CQorCWlmIChDSlNfWm9vbXR5cGU6OkluaXQoKnRoaXMsIEpTX1NUQVRJQykgPCAwKSByZXR1cm4gRkFMU0U7CQorCisJLy85IC0gMTEKKwlpZiAoQ0pTX0FwcDo6SW5pdCgqdGhpcywgSlNfU1RBVElDKSA8IDApIHJldHVybiBGQUxTRTsKKwlpZiAoQ0pTX0NvbG9yOjpJbml0KCp0aGlzLCBKU19TVEFUSUMpIDwgMCkgcmV0dXJuIEZBTFNFOyAgIAorCWlmIChDSlNfQ29uc29sZTo6SW5pdCgqdGhpcywgSlNfU1RBVElDKSA8IDApIHJldHVybiBGQUxTRTsKKworCS8vMTIgLSAxNAorCWlmIChDSlNfRG9jdW1lbnQ6OkluaXQoKnRoaXMsIEpTX0RZTkFNSUMpIDwgMCkgcmV0dXJuIEZBTFNFOyAgCisJaWYgKENKU19FdmVudDo6SW5pdCgqdGhpcywgSlNfU1RBVElDKSA8IDApIHJldHVybiBGQUxTRTsJCQorCWlmIChDSlNfRmllbGQ6OkluaXQoKnRoaXMsIEpTX0RZTkFNSUMpIDwgMCkgcmV0dXJuIEZBTFNFOyAgICAKKworCS8vMTUgLSAxNworCWlmIChDSlNfR2xvYmFsOjpJbml0KCp0aGlzLCBKU19TVEFUSUMpIDwgMCkgcmV0dXJuIEZBTFNFOwkJCisJaWYgKENKU19JY29uOjpJbml0KCp0aGlzLCBKU19EWU5BTUlDKSA8IDApIHJldHVybiBGQUxTRTsKKwlpZiAoQ0pTX1V0aWw6OkluaXQoKnRoaXMsIEpTX1NUQVRJQykgPCAwKSByZXR1cm4gRkFMU0U7CisKKwlpZiAoQ0pTX1B1YmxpY01ldGhvZHM6OkluaXQoKnRoaXMpIDwgMCkgcmV0dXJuIEZBTFNFOworCWlmIChDSlNfR2xvYmFsQ29uc3RzOjpJbml0KCp0aGlzKSA8IDApIHJldHVybiBGQUxTRTsKKwlpZiAoQ0pTX0dsb2JhbEFycmF5czo6SW5pdCgqdGhpcykgPCAwKSByZXR1cm4gRkFMU0U7CisKKwlpZiAoQ0pTX1RpbWVyT2JqOjpJbml0KCp0aGlzLCBKU19EWU5BTUlDKSA8IDApIHJldHVybiBGQUxTRTsKKwlpZiAoQ0pTX1ByaW50UGFyYW1zT2JqOjpJbml0KCp0aGlzLCBKU19EWU5BTUlDKSA8MCkgcmV0dXJuIEZBTFNFOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0lGWEpTX0NvbnRleHQqIENKU19SdW50aW1lOjpOZXdDb250ZXh0KCkKK3sKKwlDSlNfQ29udGV4dCAqIHAgPSBuZXcgQ0pTX0NvbnRleHQodGhpcyk7CisJbV9Db250ZXh0QXJyYXkuQWRkKHApOworCXJldHVybiBwOworfQorCit2b2lkIENKU19SdW50aW1lOjpSZWxlYXNlQ29udGV4dChJRlhKU19Db250ZXh0ICogcENvbnRleHQpCit7CisJQ0pTX0NvbnRleHQqIHBKU0NvbnRleHQgPSAoQ0pTX0NvbnRleHQqKXBDb250ZXh0OworCisJZm9yIChpbnQgaT0wLCBzej1tX0NvbnRleHRBcnJheS5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwl7CisJCWlmIChwSlNDb250ZXh0ID09IG1fQ29udGV4dEFycmF5LkdldEF0KGkpKQorCQl7CisJCQlkZWxldGUgcEpTQ29udGV4dDsKKwkJCW1fQ29udGV4dEFycmF5LlJlbW92ZUF0KGkpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK0lGWEpTX0NvbnRleHQqCUNKU19SdW50aW1lOjpHZXRDdXJyZW50Q29udGV4dCgpCit7CisJaWYoIW1fQ29udGV4dEFycmF5LkdldFNpemUoKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIG1fQ29udGV4dEFycmF5LkdldEF0KG1fQ29udGV4dEFycmF5LkdldFNpemUoKS0xKTsKK30KKwordm9pZCBDSlNfUnVudGltZTo6U2V0UmVhZGVyRG9jdW1lbnQoQ1BERlNES19Eb2N1bWVudCogcFJlYWRlckRvYykKK3sKKwlpZiAobV9wRG9jdW1lbnQgIT0gcFJlYWRlckRvYykKKwl7CisJCXY4OjpJc29sYXRlOjpTY29wZSBpc29sYXRlX3Njb3BlKG1faXNvbGF0ZSk7CisJCXY4OjpIYW5kbGVTY29wZSBoYW5kbGVfc2NvcGUobV9pc29sYXRlKTsKKwkJdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID12ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcobV9pc29sYXRlLCBtX2NvbnRleHQpOworCQl2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dF9zY29wZShjb250ZXh0KTsKKworCQltX3BEb2N1bWVudCA9IHBSZWFkZXJEb2M7CisKKwkJaWYgKHBSZWFkZXJEb2MpCisJCXsKKwkJCUpTT2JqZWN0IHBUaGlzID0gSlNfR2V0VGhpc09iaigqdGhpcyk7CisJCQlpZighcFRoaXMuSXNFbXB0eSgpKQorCQkJeworCQkJCWlmIChKU19HZXRPYmpEZWZuSUQocFRoaXMpID09IEpTX0dldE9iakRlZm5JRCgqdGhpcywgTCJEb2N1bWVudCIpKQorCQkJCXsKKwkJCQkJaWYgKENKU19Eb2N1bWVudCogcEpTRG9jdW1lbnQgPSAoQ0pTX0RvY3VtZW50KilKU19HZXRQcml2YXRlKHBUaGlzKSkKKwkJCQkJeworCQkJCQkJaWYgKERvY3VtZW50ICogcERvY3VtZW50ID0gKERvY3VtZW50KilwSlNEb2N1bWVudC0+R2V0RW1iZWRPYmplY3QoKSkKKwkJCQkJCQlwRG9jdW1lbnQtPkF0dGFjaERvYyhwUmVhZGVyRG9jKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCUpTX1NldFRoaXNPYmooKnRoaXMsIEpTX0dldE9iakRlZm5JRCgqdGhpcywgTCJEb2N1bWVudCIpKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUpTX1NldFRoaXNPYmooKnRoaXMsIEpTX0dldE9iakRlZm5JRCgqdGhpcywgTCJhcHAiKSk7CisJCX0KKwl9Cit9CisKK0ZYX0JPT0wJQ0pTX1J1bnRpbWU6OkFkZEV2ZW50VG9Mb29wKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzVGFyZ2V0TmFtZSwgSlNfRVZFTlRfVCBlRXZlbnRUeXBlKQoreworCWlmIChtX3BGaWVsZEV2ZW50UGF0aCA9PSBOVUxMKQorCXsKKwkJbV9wRmllbGRFdmVudFBhdGggPSBuZXcgQ0pTX0ZpZWxkRXZlbnQ7CisJCW1fcEZpZWxkRXZlbnRQYXRoLT5zVGFyZ2V0TmFtZSA9IHNUYXJnZXROYW1lOworCQltX3BGaWVsZEV2ZW50UGF0aC0+ZUV2ZW50VHlwZSA9IGVFdmVudFR5cGU7CisJCW1fcEZpZWxkRXZlbnRQYXRoLT5wTmV4dCA9IE5VTEw7CisKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJLy90byBzZWFyY2gKKwlDSlNfRmllbGRFdmVudCogcCA9IG1fcEZpZWxkRXZlbnRQYXRoOworCUNKU19GaWVsZEV2ZW50KiBwTGFzdCA9IG1fcEZpZWxkRXZlbnRQYXRoOworCXdoaWxlIChwKQorCXsKKwkJaWYgKHAtPmVFdmVudFR5cGUgPT0gZUV2ZW50VHlwZSAmJiBwLT5zVGFyZ2V0TmFtZSA9PSBzVGFyZ2V0TmFtZSkKKwkJCXJldHVybiBGQUxTRTsKKworCQlwTGFzdCA9IHA7CisJCXAgPSBwLT5wTmV4dDsKKwl9CisKKwkvL3RvIGFkZAorCUNKU19GaWVsZEV2ZW50KiBwTmV3ID0gbmV3IENKU19GaWVsZEV2ZW50OworCXBOZXctPnNUYXJnZXROYW1lID0gc1RhcmdldE5hbWU7CisJcE5ldy0+ZUV2ZW50VHlwZSA9IGVFdmVudFR5cGU7CisJcE5ldy0+cE5leHQgPSBOVUxMOworCisJcExhc3QtPnBOZXh0ID0gcE5ldzsKKworCXJldHVybiBUUlVFOworfQorCit2b2lkIENKU19SdW50aW1lOjpSZW1vdmVFdmVudEluTG9vcChjb25zdCBDRlhfV2lkZVN0cmluZyYgc1RhcmdldE5hbWUsIEpTX0VWRU5UX1QgZUV2ZW50VHlwZSkKK3sKKwlGWF9CT09MIGJGaW5kID0gRkFMU0U7CisKKwlDSlNfRmllbGRFdmVudCogcCA9IG1fcEZpZWxkRXZlbnRQYXRoOworCUNKU19GaWVsZEV2ZW50KiBwTGFzdCA9IE5VTEw7CisJd2hpbGUgKHApCisJeworCQlpZiAocC0+ZUV2ZW50VHlwZSA9PSBlRXZlbnRUeXBlICYmIHAtPnNUYXJnZXROYW1lID09IHNUYXJnZXROYW1lKQorCQl7CisJCQliRmluZCA9IFRSVUU7CisJCQlicmVhazsKKwkJfQorCisJCXBMYXN0ID0gcDsKKwkJcCA9IHAtPnBOZXh0OworCX0KKworCWlmIChiRmluZCkKKwl7CisJCVJlbW92ZUV2ZW50c0luTG9vcChwKTsKKworCQlpZiAocCA9PSBtX3BGaWVsZEV2ZW50UGF0aCkKKwkJCW1fcEZpZWxkRXZlbnRQYXRoID0gTlVMTDsKKworCQlpZiAocExhc3QpCisJCQlwTGFzdC0+cE5leHQgPSBOVUxMOworCX0KK30KKwordm9pZCBDSlNfUnVudGltZTo6UmVtb3ZlRXZlbnRzSW5Mb29wKENKU19GaWVsZEV2ZW50KiBwU3RhcnQpCit7CisJQ0pTX0ZpZWxkRXZlbnQqIHAgPSBwU3RhcnQ7CisKKwl3aGlsZSAocCkKKwl7CisJCUNKU19GaWVsZEV2ZW50KiBwT2xkID0gcDsKKwkJcCA9IHBPbGQtPnBOZXh0OworCisJCWRlbGV0ZSBwT2xkOworCX0KK30KKwordjg6OkhhbmRsZTx2ODo6Q29udGV4dD4JQ0pTX1J1bnRpbWU6Ok5ld0pTQ29udGV4dCgpCit7CisJcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhtX2lzb2xhdGUsIG1fY29udGV4dCk7Cit9CisKK0NGWF9XaWRlU3RyaW5nIENoYW5nZU9iak5hbWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cikKK3sKKwlDRlhfV2lkZVN0cmluZyBzUmV0ID0gc3RyOworCXNSZXQuUmVwbGFjZSgoRlhfTFBDV1NUUilMIl8iLCAoRlhfTFBDV1NUUilMIi4iKTsKKwlyZXR1cm4gc1JldDsKK30KKwordm9pZCBDSlNfUnVudGltZTo6R2V0T2JqZWN0TmFtZXMoQ0ZYX1dpZGVTdHJpbmdBcnJheSYgYXJyYXkpCit7CisJYXJyYXkuUmVtb3ZlQWxsKCk7CisKKwlhcnJheS5BZGQoQ0pTX0JvcmRlcjo6bV9wQ2xhc3NOYW1lKTsKKwlhcnJheS5BZGQoQ0pTX0Rpc3BsYXk6Om1fcENsYXNzTmFtZSk7CisJYXJyYXkuQWRkKENKU19Gb250OjptX3BDbGFzc05hbWUpOworCWFycmF5LkFkZChDSlNfSGlnaGxpZ2h0OjptX3BDbGFzc05hbWUpOworCWFycmF5LkFkZChDSlNfUG9zaXRpb246Om1fcENsYXNzTmFtZSk7CisJYXJyYXkuQWRkKENKU19TY2FsZUhvdzo6bV9wQ2xhc3NOYW1lKTsKKwlhcnJheS5BZGQoQ0pTX1NjYWxlV2hlbjo6bV9wQ2xhc3NOYW1lKTsKKwlhcnJheS5BZGQoQ0pTX1N0eWxlOjptX3BDbGFzc05hbWUpOworCWFycmF5LkFkZChDSlNfWm9vbXR5cGU6Om1fcENsYXNzTmFtZSk7CisKKwlhcnJheS5BZGQoQ0pTX0FwcDo6bV9wQ2xhc3NOYW1lKTsKKwlhcnJheS5BZGQoKEZYX0xQQ1dTVFIpInRoaXMiKTsgCisJYXJyYXkuQWRkKENKU19FdmVudDo6bV9wQ2xhc3NOYW1lKTsJCisKKwlhcnJheS5BZGQoQ0pTX0dsb2JhbDo6bV9wQ2xhc3NOYW1lKTsJCisJYXJyYXkuQWRkKENKU19VdGlsOjptX3BDbGFzc05hbWUpOworfQorCit2b2lkIENKU19SdW50aW1lOjpHZXRPYmplY3RDb25zdHMoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNPYmpOYW1lLCBDRlhfV2lkZVN0cmluZ0FycmF5JiBhcnJheSkKK3sKKwlKU0NvbnN0U3BlYyogcENvbnN0cyA9IE5VTEw7CisJaW50IG5TaXplID0gMDsKKworCWlmIChzT2JqTmFtZSA9PSBDSlNfQm9yZGVyOjptX3BDbGFzc05hbWUpCisJCUNKU19Cb3JkZXI6OkdldENvbnN0cyhwQ29uc3RzLCBuU2l6ZSk7CisJZWxzZSBpZiAoc09iak5hbWUgPT0gQ0pTX0Rpc3BsYXk6Om1fcENsYXNzTmFtZSkKKwkJQ0pTX0Rpc3BsYXk6OkdldENvbnN0cyhwQ29uc3RzLCBuU2l6ZSk7CisJZWxzZSBpZiAoc09iak5hbWUgPT0gQ0pTX0ZvbnQ6Om1fcENsYXNzTmFtZSkKKwkJQ0pTX0ZvbnQ6OkdldENvbnN0cyhwQ29uc3RzLCBuU2l6ZSk7CisJZWxzZSBpZiAoc09iak5hbWUgPT0gQ0pTX0hpZ2hsaWdodDo6bV9wQ2xhc3NOYW1lKQorCQlDSlNfSGlnaGxpZ2h0OjpHZXRDb25zdHMocENvbnN0cywgblNpemUpOworCWVsc2UgaWYgKHNPYmpOYW1lID09IENKU19Qb3NpdGlvbjo6bV9wQ2xhc3NOYW1lKQorCQlDSlNfUG9zaXRpb246OkdldENvbnN0cyhwQ29uc3RzLCBuU2l6ZSk7CisJZWxzZSBpZiAoc09iak5hbWUgPT0gQ0pTX1NjYWxlSG93OjptX3BDbGFzc05hbWUpCisJCUNKU19TY2FsZUhvdzo6R2V0Q29uc3RzKHBDb25zdHMsIG5TaXplKTsKKwllbHNlIGlmIChzT2JqTmFtZSA9PSBDSlNfU2NhbGVXaGVuOjptX3BDbGFzc05hbWUpCisJCUNKU19TY2FsZVdoZW46OkdldENvbnN0cyhwQ29uc3RzLCBuU2l6ZSk7CisJZWxzZSBpZiAoc09iak5hbWUgPT0gQ0pTX1N0eWxlOjptX3BDbGFzc05hbWUpCisJCUNKU19TdHlsZTo6R2V0Q29uc3RzKHBDb25zdHMsIG5TaXplKTsKKwllbHNlIGlmIChzT2JqTmFtZSA9PSBDSlNfWm9vbXR5cGU6Om1fcENsYXNzTmFtZSkKKwkJQ0pTX1pvb210eXBlOjpHZXRDb25zdHMocENvbnN0cywgblNpemUpOworCisJZWxzZSBpZiAoc09iak5hbWUgPT0gQ0pTX0FwcDo6bV9wQ2xhc3NOYW1lKQorCQlDSlNfQXBwOjpHZXRDb25zdHMocENvbnN0cywgblNpemUpOworCWVsc2UgaWYgKHNPYmpOYW1lID09IENKU19Db2xvcjo6bV9wQ2xhc3NOYW1lKQorCQlDSlNfQ29sb3I6OkdldENvbnN0cyhwQ29uc3RzLCBuU2l6ZSk7CQorCisJZWxzZSBpZiAoc09iak5hbWUgPT0gTCJ0aGlzIikgCisJeworCQlpZiAoR2V0UmVhZGVyRG9jdW1lbnQoKSkKKwkJCUNKU19Eb2N1bWVudDo6R2V0Q29uc3RzKHBDb25zdHMsIG5TaXplKTsKKwkJZWxzZSAKKwkJCUNKU19BcHA6OkdldENvbnN0cyhwQ29uc3RzLCBuU2l6ZSk7CisJfQorCisJaWYgKHNPYmpOYW1lID09IENKU19FdmVudDo6bV9wQ2xhc3NOYW1lKQorCQlDSlNfRXZlbnQ6OkdldENvbnN0cyhwQ29uc3RzLCBuU2l6ZSk7CQorCWVsc2UgaWYgKHNPYmpOYW1lID09IENKU19GaWVsZDo6bV9wQ2xhc3NOYW1lKQorCQlDSlNfRmllbGQ6OkdldENvbnN0cyhwQ29uc3RzLCBuU2l6ZSk7CQorCWVsc2UgaWYgKHNPYmpOYW1lID09IENKU19HbG9iYWw6Om1fcENsYXNzTmFtZSkKKwkJQ0pTX0dsb2JhbDo6R2V0Q29uc3RzKHBDb25zdHMsIG5TaXplKTsJCisJZWxzZSBpZiAoc09iak5hbWUgPT0gQ0pTX1V0aWw6Om1fcENsYXNzTmFtZSkKKwkJQ0pTX1V0aWw6OkdldENvbnN0cyhwQ29uc3RzLCBuU2l6ZSk7CisKKwlmb3IgKGludCBpPTA7IGk8blNpemU7IGkrKykKKwkJYXJyYXkuQWRkKHBDb25zdHNbaV0ucE5hbWUpOworfQorCit2b2lkIENKU19SdW50aW1lOjpHZXRPYmplY3RQcm9wcyhjb25zdCBDRlhfV2lkZVN0cmluZyYgc09iak5hbWUsIENGWF9XaWRlU3RyaW5nQXJyYXkmIGFycmF5KQoreworCUpTUHJvcGVydHlTcGVjKiBwUHJvcGVydGllcyA9IE5VTEw7CisJaW50IG5TaXplID0gMDsKKworIAlpZiAoc09iak5hbWUgPT0gQ0pTX0FwcDo6bV9wQ2xhc3NOYW1lKQorCQlDSlNfQXBwOjpHZXRQcm9wZXJ0aWVzKHBQcm9wZXJ0aWVzLCBuU2l6ZSk7CisJZWxzZSBpZiAoc09iak5hbWUgPT0gQ0pTX0NvbG9yOjptX3BDbGFzc05hbWUpCisJCUNKU19Db2xvcjo6R2V0UHJvcGVydGllcyhwUHJvcGVydGllcywgblNpemUpOyAKKwllbHNlIGlmIChzT2JqTmFtZSA9PSBMInRoaXMiKQorCXsKKwkJaWYgKEdldFJlYWRlckRvY3VtZW50KCkpCisJCQlDSlNfRG9jdW1lbnQ6OkdldFByb3BlcnRpZXMocFByb3BlcnRpZXMsIG5TaXplKTsKKwkJZWxzZQkKKwkJCUNKU19BcHA6OkdldFByb3BlcnRpZXMocFByb3BlcnRpZXMsIG5TaXplKTsKKwl9CisJZWxzZSBpZiAoc09iak5hbWUgPT0gQ0pTX0V2ZW50OjptX3BDbGFzc05hbWUpCisJCUNKU19FdmVudDo6R2V0UHJvcGVydGllcyhwUHJvcGVydGllcywgblNpemUpOwkKKwllbHNlIGlmIChzT2JqTmFtZSA9PSBDSlNfRmllbGQ6Om1fcENsYXNzTmFtZSkKKwkJQ0pTX0ZpZWxkOjpHZXRQcm9wZXJ0aWVzKHBQcm9wZXJ0aWVzLCBuU2l6ZSk7CQorCWVsc2UgaWYgKHNPYmpOYW1lID09IENKU19HbG9iYWw6Om1fcENsYXNzTmFtZSkKKwkJQ0pTX0dsb2JhbDo6R2V0UHJvcGVydGllcyhwUHJvcGVydGllcywgblNpemUpOwkKKwllbHNlIGlmIChzT2JqTmFtZSA9PSBDSlNfVXRpbDo6bV9wQ2xhc3NOYW1lKQorCQlDSlNfVXRpbDo6R2V0UHJvcGVydGllcyhwUHJvcGVydGllcywgblNpemUpOworCisJZm9yIChpbnQgaT0wOyBpPG5TaXplOyBpKyspCisJCWFycmF5LkFkZChwUHJvcGVydGllc1tpXS5wTmFtZSk7Cit9CisKK3ZvaWQgQ0pTX1J1bnRpbWU6OkdldE9iamVjdE1ldGhvZHMoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNPYmpOYW1lLCBDRlhfV2lkZVN0cmluZ0FycmF5JiBhcnJheSkKK3sKKwlKU01ldGhvZFNwZWMqIHBNZXRob2RzID0gTlVMTDsKKwlpbnQgblNpemUgPSAwOworCisgCSBpZiAoc09iak5hbWUgPT0gQ0pTX0FwcDo6bV9wQ2xhc3NOYW1lKQorCQlDSlNfQXBwOjpHZXRNZXRob2RzKHBNZXRob2RzLCBuU2l6ZSk7CisJZWxzZSBpZiAoc09iak5hbWUgPT0gQ0pTX0NvbG9yOjptX3BDbGFzc05hbWUpCisJCUNKU19Db2xvcjo6R2V0TWV0aG9kcyhwTWV0aG9kcywgblNpemUpOwkKKwllbHNlIGlmIChzT2JqTmFtZSA9PSBMInRoaXMiKSAKKwl7CisJCWlmIChHZXRSZWFkZXJEb2N1bWVudCgpKQorCQkJQ0pTX0RvY3VtZW50OjpHZXRNZXRob2RzKHBNZXRob2RzLCBuU2l6ZSk7CisJCWVsc2UJCisJCQlDSlNfQXBwOjpHZXRNZXRob2RzKHBNZXRob2RzLCBuU2l6ZSk7CisJfQorCWVsc2UgaWYgKHNPYmpOYW1lID09IENKU19FdmVudDo6bV9wQ2xhc3NOYW1lKQorCQlDSlNfRXZlbnQ6OkdldE1ldGhvZHMocE1ldGhvZHMsIG5TaXplKTsJCisJZWxzZSBpZiAoc09iak5hbWUgPT0gQ0pTX0ZpZWxkOjptX3BDbGFzc05hbWUpCisJCUNKU19GaWVsZDo6R2V0TWV0aG9kcyhwTWV0aG9kcywgblNpemUpOwkKKwllbHNlIGlmIChzT2JqTmFtZSA9PSBDSlNfR2xvYmFsOjptX3BDbGFzc05hbWUpCisJCUNKU19HbG9iYWw6OkdldE1ldGhvZHMocE1ldGhvZHMsIG5TaXplKTsJCisJZWxzZSBpZiAoc09iak5hbWUgPT0gQ0pTX1V0aWw6Om1fcENsYXNzTmFtZSkKKwkJQ0pTX1V0aWw6OkdldE1ldGhvZHMocE1ldGhvZHMsIG5TaXplKTsKKworCWZvciAoaW50IGk9MDsgaTxuU2l6ZTsgaSsrKQorCQlhcnJheS5BZGQocE1ldGhvZHNbaV0ucE5hbWUpOworfQorCitGWF9CT09MICBDSlNfUnVudGltZTo6SXNFbnRlcmVkKCkKK3sKKwlyZXR1cm4gdjg6Oklzb2xhdGU6OkdldEN1cnJlbnQoKSA9PSBtX2lzb2xhdGU7Cit9Cit2b2lkCUNKU19SdW50aW1lOjpFeGl0KCkKK3sKKwlpZihtX2lzb2xhdGUpIG1faXNvbGF0ZS0+RXhpdCgpOworfQordm9pZAlDSlNfUnVudGltZTo6RW50ZXIoKQoreworCWlmKG1faXNvbGF0ZSkgbV9pc29sYXRlLT5FbnRlcigpOworfQpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9KU19WYWx1ZS5jcHAgYi9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L0pTX1ZhbHVlLmNwcAppbmRleCAwMzdmNjE4Li4wMjE3ZWExIDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L0pTX1ZhbHVlLmNwcAorKysgYi9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L0pTX1ZhbHVlLmNwcApAQCAtMSw2NDMgKzEsNjQzIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0phdmFTY3JpcHQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0RlZmluZS5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfT2JqZWN0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19WYWx1ZS5oIg0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ0pTX1ZhbHVlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DSlNfVmFsdWU6OkNKU19WYWx1ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkgOiBtX2lzb2xhdGUoaXNvbGF0ZSksbV9lVHlwZShWVF91bmtub3duKQ0KLXsNCi19DQotQ0pTX1ZhbHVlOjpDSlNfVmFsdWUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwVmFsdWUsRlhKU1ZBTFVFVFlQRSB0KSA6bV9pc29sYXRlKGlzb2xhdGUpLCBtX3BWYWx1ZShwVmFsdWUpICwgbV9lVHlwZSh0KQ0KLXsNCi19DQotDQotQ0pTX1ZhbHVlOjpDSlNfVmFsdWUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIGNvbnN0IGludCAmaVZhbHVlKTptX2lzb2xhdGUoaXNvbGF0ZSkNCi17DQotCW9wZXJhdG9yID0oaVZhbHVlKTsNCi19DQotDQotQ0pTX1ZhbHVlOjpDSlNfVmFsdWUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIGNvbnN0IGJvb2wgJmJWYWx1ZSk6bV9pc29sYXRlKGlzb2xhdGUpDQotew0KLQlvcGVyYXRvciA9KGJWYWx1ZSk7DQotfQ0KLQ0KLUNKU19WYWx1ZTo6Q0pTX1ZhbHVlKHY4OjpJc29sYXRlKiBpc29sYXRlLCBjb25zdCBmbG9hdCAmZlZhbHVlKTptX2lzb2xhdGUoaXNvbGF0ZSkNCi17DQotCW9wZXJhdG9yID0oZlZhbHVlKTsNCi19DQotDQotQ0pTX1ZhbHVlOjpDSlNfVmFsdWUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIGNvbnN0IGRvdWJsZSAmZFZhbHVlKTptX2lzb2xhdGUoaXNvbGF0ZSkgDQotew0KLQlvcGVyYXRvciA9KGRWYWx1ZSk7DQotfQ0KLQ0KLUNKU19WYWx1ZTo6Q0pTX1ZhbHVlKHY4OjpJc29sYXRlKiBpc29sYXRlLCBKU0ZYT2JqZWN0ICBwSnNPYmopOm1faXNvbGF0ZShpc29sYXRlKSANCi17DQotCW9wZXJhdG9yID0ocEpzT2JqKTsNCi19DQotDQotQ0pTX1ZhbHVlOjpDSlNfVmFsdWUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIENKU19PYmplY3QgKiBwSnNPYmopOm1faXNvbGF0ZShpc29sYXRlKSANCi17DQotCW9wZXJhdG9yID0ocEpzT2JqKTsNCi19DQotDQotQ0pTX1ZhbHVlOjpDSlNfVmFsdWUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIEZYX0xQQ1dTVFIgcFdzdHIpOm1faXNvbGF0ZShpc29sYXRlKSANCi17DQotCW9wZXJhdG9yID0ocFdzdHIpOw0KLX0NCi0NCi1DSlNfVmFsdWU6OkNKU19WYWx1ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgRlhfTFBDU1RSIHBTdHIpOm1faXNvbGF0ZShpc29sYXRlKSANCi17DQotCW9wZXJhdG9yID0gKHBTdHIpOw0KLX0NCi0NCi1DSlNfVmFsdWU6OkNKU19WYWx1ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgQ0pTX0FycmF5JiBhcnJheSk6bV9pc29sYXRlKGlzb2xhdGUpIA0KLXsNCi0Jb3BlcmF0b3IgPSAoYXJyYXkpOw0KLX0NCi0NCi1DSlNfVmFsdWU6On5DSlNfVmFsdWUoKQ0KLXsNCi19DQotDQotdm9pZCBDSlNfVmFsdWU6OkF0dGFjaCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcFZhbHVlLEZYSlNWQUxVRVRZUEUgdCkNCi17DQotCW1fcFZhbHVlID0gcFZhbHVlOw0KLQltX2VUeXBlID0gdDsNCi19DQotDQotdm9pZCBDSlNfVmFsdWU6OkF0dGFjaChDSlNfVmFsdWUgKnBWYWx1ZSkNCi17DQotCWlmIChwVmFsdWUpDQotCQlBdHRhY2gocFZhbHVlLT5Ub0pTVmFsdWUoKSxwVmFsdWUtPkdldFR5cGUoKSk7DQotfQ0KLQ0KLXZvaWQgQ0pTX1ZhbHVlOjpEZXRhY2goKQ0KLXsNCi0JbV9wVmFsdWUgPSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsNCi0JbV9lVHlwZSA9IFZUX3Vua25vd247DQotfQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DSlNfVmFsdWU6Om9wZXJhdG9yIGludCgpIGNvbnN0DQotew0KLQ0KLQlyZXR1cm4gSlNfVG9JbnQzMihtX3BWYWx1ZSk7DQotDQotfQ0KLQ0KLUNKU19WYWx1ZTo6b3BlcmF0b3IgYm9vbCgpIGNvbnN0DQotew0KLQ0KLQlyZXR1cm4gSlNfVG9Cb29sZWFuKG1fcFZhbHVlKTsNCi0JDQotfQ0KLQ0KLUNKU19WYWx1ZTo6b3BlcmF0b3IgZG91YmxlKCkgY29uc3QNCi17DQotDQotCXJldHVybiBKU19Ub051bWJlcihtX3BWYWx1ZSk7DQotCQ0KLX0NCi0NCi1DSlNfVmFsdWU6Om9wZXJhdG9yIGZsb2F0KCkgY29uc3QNCi17DQotDQotCXJldHVybiAoZmxvYXQpSlNfVG9OdW1iZXIobV9wVmFsdWUpOw0KLQ0KLX0NCi0NCi1DSlNfVmFsdWU6Om9wZXJhdG9yIENKU19PYmplY3QgKigpIGNvbnN0DQotew0KLQ0KLQl2ODo6SGFuZGxlPHY4OjpPYmplY3Q+CXBPYmogPSBKU19Ub09iamVjdChtX3BWYWx1ZSk7DQotCXJldHVybiAoQ0pTX09iamVjdCopSlNfR2V0UHJpdmF0ZShtX2lzb2xhdGUsIHBPYmopOw0KLX0NCi0NCi1DSlNfVmFsdWU6Om9wZXJhdG9yIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSBjb25zdA0KLXsNCi0JcmV0dXJuIEpTX1RvT2JqZWN0KG1fcFZhbHVlKTsNCi19DQotDQotQ0pTX1ZhbHVlOjpvcGVyYXRvciBDRlhfV2lkZVN0cmluZygpIGNvbnN0DQotew0KLQlyZXR1cm4gSlNfVG9TdHJpbmcobV9wVmFsdWUpOw0KLX0NCi0NCi1DSlNfVmFsdWU6Om9wZXJhdG9yIENGWF9CeXRlU3RyaW5nKCkgY29uc3QNCi17DQotCXJldHVybiBDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUob3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKSk7DQotfQ0KLQ0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBDSlNfVmFsdWU6OlRvSlNWYWx1ZSgpDQotew0KLQlyZXR1cm4gbV9wVmFsdWU7DQotfQ0KLQ0KLQ0KLUNKU19WYWx1ZTo6b3BlcmF0b3Igdjg6OkhhbmRsZTx2ODo6QXJyYXk+KCkgY29uc3QNCi17DQotCWlmIChJc0FycmF5T2JqZWN0KCkpDQotCQlyZXR1cm4gdjg6OkhhbmRsZTx2ODo6QXJyYXk+OjpDYXN0KEpTX1RvT2JqZWN0KG1fcFZhbHVlKSk7DQotCXJldHVybiB2ODo6SGFuZGxlPHY4OjpBcnJheT4oKTsNCi19DQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLXZvaWQgQ0pTX1ZhbHVlOjpvcGVyYXRvciA9KGludCBpVmFsdWUpDQotew0KLQltX3BWYWx1ZSA9IEpTX05ld051bWJlcihtX2lzb2xhdGUsIGlWYWx1ZSk7DQotDQotCW1fZVR5cGUgPSBWVF9udW1iZXI7DQotfQ0KLQ0KLXZvaWQgQ0pTX1ZhbHVlOjpvcGVyYXRvciA9KGJvb2wgYlZhbHVlKQ0KLXsNCi0JbV9wVmFsdWUgPSBKU19OZXdCb29sZWFuKG1faXNvbGF0ZSwgYlZhbHVlKTsNCi0NCi0JbV9lVHlwZSA9IFZUX2Jvb2xlYW47DQotfQ0KLQ0KLXZvaWQgQ0pTX1ZhbHVlOjpvcGVyYXRvciA9KGRvdWJsZSBkVmFsdWUpDQotew0KLQltX3BWYWx1ZSA9IEpTX05ld051bWJlcihtX2lzb2xhdGUsZFZhbHVlKTsNCi0NCi0JbV9lVHlwZSA9IFZUX251bWJlcjsNCi19DQotDQotdm9pZCBDSlNfVmFsdWU6Om9wZXJhdG9yID0gKGZsb2F0IGZWYWx1ZSkNCi17DQotCW1fcFZhbHVlID0gSlNfTmV3TnVtYmVyKG1faXNvbGF0ZSxmVmFsdWUpOw0KLQltX2VUeXBlID0gVlRfbnVtYmVyOw0KLX0NCi0NCi12b2lkIENKU19WYWx1ZTo6b3BlcmF0b3IgPSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHBPYmopDQotew0KLQ0KLQltX3BWYWx1ZSA9IEpTX05ld09iamVjdChtX2lzb2xhdGUscE9iaik7DQotDQotCW1fZVR5cGUgPSBWVF9meG9iamVjdDsNCi19DQotDQotdm9pZCBDSlNfVmFsdWU6Om9wZXJhdG9yID0oQ0pTX09iamVjdCAqIHBPYmopDQotew0KLQlpZiAocE9iaikNCi0JCW9wZXJhdG9yID0gKChKU0ZYT2JqZWN0KSpwT2JqKTsNCi19DQotDQotdm9pZCBDSlNfVmFsdWU6Om9wZXJhdG9yID0oRlhfTFBDV1NUUiBwV3N0cikNCi17DQotCW1fcFZhbHVlID0gSlNfTmV3U3RyaW5nKG1faXNvbGF0ZSwod2NoYXJfdCAqKXBXc3RyKTsNCi0NCi0JbV9lVHlwZSA9IFZUX3N0cmluZzsNCi19DQotDQotdm9pZCBDSlNfVmFsdWU6OlNldE51bGwoKQ0KLXsNCi0JbV9wVmFsdWUgPSBKU19OZXdOdWxsKCk7DQotDQotCW1fZVR5cGUgPSBWVF9udWxsOw0KLX0NCi0NCi12b2lkIENKU19WYWx1ZTo6b3BlcmF0b3IgPSAoRlhfTFBDU1RSIHBTdHIpDQotewkNCi0Jb3BlcmF0b3IgPSAoQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChwU3RyKSk7DQotfQ0KLQ0KLXZvaWQgQ0pTX1ZhbHVlOjpvcGVyYXRvciA9IChDSlNfQXJyYXkgJiBhcnJheSkNCi17DQotCW1fcFZhbHVlID0gSlNfTmV3T2JqZWN0MihtX2lzb2xhdGUsKHY4OjpIYW5kbGU8djg6OkFycmF5PilhcnJheSk7DQotDQotCW1fZVR5cGUgPSBWVF9vYmplY3Q7DQotfQ0KLQ0KLXZvaWQgQ0pTX1ZhbHVlOjpvcGVyYXRvciA9IChDSlNfRGF0ZSAmIGRhdGUpDQotew0KLQltX3BWYWx1ZSA9IEpTX05ld0RhdGUobV9pc29sYXRlLCAoZG91YmxlKWRhdGUpOw0KLQ0KLQltX2VUeXBlID0gVlRfZGF0ZTsNCi19DQotDQotdm9pZCBDSlNfVmFsdWU6Om9wZXJhdG9yID0gKENKU19WYWx1ZSB2YWx1ZSkNCi17DQotCW1fcFZhbHVlID0gdmFsdWUuVG9KU1ZhbHVlKCk7DQotDQotCW1fZVR5cGUgPSB2YWx1ZS5tX2VUeXBlOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotRlhKU1ZBTFVFVFlQRSBDSlNfVmFsdWU6OkdldFR5cGUoKSBjb25zdA0KLXsNCi0JaWYobV9wVmFsdWUuSXNFbXB0eSgpKSByZXR1cm4gVlRfdW5rbm93bjsNCi0JaWYobV9wVmFsdWUtPklzU3RyaW5nKCkpIHJldHVybiBWVF9zdHJpbmc7DQotCWlmKG1fcFZhbHVlLT5Jc051bWJlcigpKSByZXR1cm4gVlRfbnVtYmVyOw0KLQlpZihtX3BWYWx1ZS0+SXNCb29sZWFuKCkpIHJldHVybiBWVF9ib29sZWFuOw0KLQlpZihtX3BWYWx1ZS0+SXNEYXRlKCkpIHJldHVybiBWVF9kYXRlOw0KLQlpZihtX3BWYWx1ZS0+SXNPYmplY3QoKSkgcmV0dXJuIFZUX29iamVjdDsNCi0JaWYobV9wVmFsdWUtPklzTnVsbCgpKSByZXR1cm4gVlRfbnVsbDsNCi0JaWYobV9wVmFsdWUtPklzVW5kZWZpbmVkKCkpIHJldHVybiBWVF91bmRlZmluZWQ7DQotCXJldHVybiBWVF91bmtub3duOw0KLX0NCi0NCi1GWF9CT09MIENKU19WYWx1ZTo6SXNBcnJheU9iamVjdCgpIGNvbnN0IA0KLXsNCi0JaWYobV9wVmFsdWUuSXNFbXB0eSgpKSByZXR1cm4gRkFMU0U7DQotCXJldHVybiBtX3BWYWx1ZS0+SXNBcnJheSgpOw0KLX0NCi0NCi1GWF9CT09MIENKU19WYWx1ZTo6SXNEYXRlT2JqZWN0KCkgY29uc3QNCi17DQotCWlmKG1fcFZhbHVlLklzRW1wdHkoKSkgcmV0dXJuIEZBTFNFOw0KLQlyZXR1cm4gbV9wVmFsdWUtPklzRGF0ZSgpOw0KLX0NCi0NCi0vL0NKU19WYWx1ZTo6b3BlcmF0b3IgQ0pTX0FycmF5KCkNCi1GWF9CT09MIENKU19WYWx1ZTo6Q29udmVydFRvQXJyYXkoQ0pTX0FycmF5ICZhcnJheSkgY29uc3QNCi17DQotCWlmIChJc0FycmF5T2JqZWN0KCkpDQotCXsNCi0JCWFycmF5LkF0dGFjaChKU19Ub0FycmF5KG1fcFZhbHVlKSk7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgQ0pTX1ZhbHVlOjpDb252ZXJ0VG9EYXRlKENKU19EYXRlICZkYXRlKSBjb25zdA0KLXsNCi0vLyAJaWYgKEdldFR5cGUoKSA9PSBWVF9kYXRlKQ0KLS8vIAl7DQotLy8gCQlkYXRlID0gKGRvdWJsZSkoKnRoaXMpOw0KLS8vIAkJcmV0dXJuIFRSVUU7DQotLy8gCX0NCi0NCi0JaWYgKElzRGF0ZU9iamVjdCgpKQ0KLQl7DQotCQlkYXRlLkF0dGFjaChtX3BWYWx1ZSk7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7CQ0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENKU19Qcm9wVmFsdWUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUNKU19Qcm9wVmFsdWU6OkNKU19Qcm9wVmFsdWUoY29uc3QgQ0pTX1ZhbHVlICZ2YWx1ZSkgOiANCi0JQ0pTX1ZhbHVlKHZhbHVlKSwNCi0JbV9iSXNTZXR0aW5nKDApDQotew0KLX0NCi0NCi1DSlNfUHJvcFZhbHVlOjpDSlNfUHJvcFZhbHVlKHY4OjpJc29sYXRlKiBpc29sYXRlKSA6IENKU19WYWx1ZShpc29sYXRlKSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2JJc1NldHRpbmcoMCkNCi17DQotfQ0KLQ0KLUNKU19Qcm9wVmFsdWU6On5DSlNfUHJvcFZhbHVlKCkNCi17DQotfQ0KLQ0KLUZYX0JPT0wgQ0pTX1Byb3BWYWx1ZTo6SXNTZXR0aW5nKCkNCi17DQotCXJldHVybiBtX2JJc1NldHRpbmc7DQotfQ0KLQ0KLUZYX0JPT0wgQ0pTX1Byb3BWYWx1ZTo6SXNHZXR0aW5nKCkNCi17DQotCXJldHVybiAhbV9iSXNTZXR0aW5nOw0KLX0NCi0NCi12b2lkIENKU19Qcm9wVmFsdWU6Om9wZXJhdG9yIDw8KGludCBpVmFsdWUpDQotew0KLQlBU1NFUlQoIW1fYklzU2V0dGluZyk7DQotCUNKU19WYWx1ZTo6b3BlcmF0b3IgPShpVmFsdWUpOw0KLX0NCi0NCi12b2lkIENKU19Qcm9wVmFsdWU6Om9wZXJhdG9yID4+KGludCAmIGlWYWx1ZSkgY29uc3QNCi17DQotCUFTU0VSVChtX2JJc1NldHRpbmcpOw0KLQlpVmFsdWUgPSBDSlNfVmFsdWU6Om9wZXJhdG9yIGludCgpOw0KLX0NCi0NCi0NCi12b2lkIENKU19Qcm9wVmFsdWU6Om9wZXJhdG9yIDw8KGJvb2wgYlZhbHVlKQ0KLXsNCi0JQVNTRVJUKCFtX2JJc1NldHRpbmcpOw0KLQlDSlNfVmFsdWU6Om9wZXJhdG9yID0oYlZhbHVlKTsNCi19DQotDQotdm9pZCBDSlNfUHJvcFZhbHVlOjpvcGVyYXRvciA+Pihib29sICZiVmFsdWUpIGNvbnN0DQotew0KLQlBU1NFUlQobV9iSXNTZXR0aW5nKTsNCi0JYlZhbHVlID0gQ0pTX1ZhbHVlOjpvcGVyYXRvciBib29sKCk7DQotDQotfQ0KLQ0KLXZvaWQgQ0pTX1Byb3BWYWx1ZTo6b3BlcmF0b3IgPDwoZG91YmxlIGRWYWx1ZSkNCi17DQotCUFTU0VSVCghbV9iSXNTZXR0aW5nKTsNCi0JQ0pTX1ZhbHVlOjpvcGVyYXRvciA9KGRWYWx1ZSk7DQotfQ0KLQ0KLXZvaWQgQ0pTX1Byb3BWYWx1ZTo6b3BlcmF0b3IgPj4oZG91YmxlICZkVmFsdWUpIGNvbnN0DQotew0KLQlBU1NFUlQobV9iSXNTZXR0aW5nKTsNCi0JZFZhbHVlID0gQ0pTX1ZhbHVlOjpvcGVyYXRvciBkb3VibGUoKTsNCi19DQotDQotdm9pZCBDSlNfUHJvcFZhbHVlOjpvcGVyYXRvciA8PChDSlNfT2JqZWN0ICpwT2JqKQ0KLXsNCi0JQVNTRVJUKCFtX2JJc1NldHRpbmcpOw0KLQlDSlNfVmFsdWU6Om9wZXJhdG9yID0gKHBPYmopOw0KLX0NCi0NCi12b2lkIENKU19Qcm9wVmFsdWU6Om9wZXJhdG9yID4+KENKU19PYmplY3QgKiZwcE9iaikgY29uc3QNCi17DQotCUFTU0VSVChtX2JJc1NldHRpbmcpOw0KLQlwcE9iaiA9IENKU19WYWx1ZTo6b3BlcmF0b3IgQ0pTX09iamVjdCAqKCk7DQotfQ0KLQ0KLXZvaWQgQ0pTX1Byb3BWYWx1ZTo6b3BlcmF0b3I8PChKU0ZYT2JqZWN0IHBPYmopDQotew0KLQlBU1NFUlQoIW1fYklzU2V0dGluZyk7DQotCUNKU19WYWx1ZTo6b3BlcmF0b3IgPSAocE9iaik7DQotfQ0KLQ0KLXZvaWQgQ0pTX1Byb3BWYWx1ZTo6b3BlcmF0b3I+PihKU0ZYT2JqZWN0ICZwcE9iaikgY29uc3QNCi17DQotCUFTU0VSVChtX2JJc1NldHRpbmcpOw0KLQlwcE9iaiA9IENKU19WYWx1ZTo6b3BlcmF0b3IgSlNGWE9iamVjdCAoKTsNCi19DQotDQotDQotdm9pZCBDSlNfUHJvcFZhbHVlOjpTdGFydFNldHRpbmcoKQ0KLXsNCi0JbV9iSXNTZXR0aW5nID0gMTsNCi19DQotDQotdm9pZCBDSlNfUHJvcFZhbHVlOjpTdGFydEdldHRpbmcoKQ0KLXsNCi0JbV9iSXNTZXR0aW5nID0gMDsNCi19DQotdm9pZCBDSlNfUHJvcFZhbHVlOjpvcGVyYXRvciA8PChDRlhfQnl0ZVN0cmluZyBzdHJpbmcpDQotew0KLQlBU1NFUlQoIW1fYklzU2V0dGluZyk7DQotCUNKU19WYWx1ZTo6b3BlcmF0b3IgPSgoRlhfTFBDU1RSKXN0cmluZyk7DQotfQ0KLQ0KLXZvaWQgQ0pTX1Byb3BWYWx1ZTo6b3BlcmF0b3IgPj4oQ0ZYX0J5dGVTdHJpbmcgJnN0cmluZykgY29uc3QNCi17DQotCUFTU0VSVChtX2JJc1NldHRpbmcpOw0KLQlzdHJpbmcgPSBDSlNfVmFsdWU6Om9wZXJhdG9yIENGWF9CeXRlU3RyaW5nKCk7DQotfQ0KLQ0KLXZvaWQgQ0pTX1Byb3BWYWx1ZTo6b3BlcmF0b3IgPDwoRlhfTFBDV1NUUiBjX3N0cmluZykNCi17DQotCUFTU0VSVCghbV9iSXNTZXR0aW5nKTsNCi0JQ0pTX1ZhbHVlOjpvcGVyYXRvciA9KGNfc3RyaW5nKTsNCi19DQotDQotdm9pZCBDSlNfUHJvcFZhbHVlOjpvcGVyYXRvciA+PihDRlhfV2lkZVN0cmluZyAmd2lkZV9zdHJpbmcpIGNvbnN0DQotew0KLQlBU1NFUlQobV9iSXNTZXR0aW5nKTsNCi0Jd2lkZV9zdHJpbmcgPSBDSlNfVmFsdWU6Om9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7DQotfQ0KLQ0KLXZvaWQgQ0pTX1Byb3BWYWx1ZTo6b3BlcmF0b3IgPDwoQ0ZYX1dpZGVTdHJpbmcgd2lkZV9zdHJpbmcpDQotew0KLQlBU1NFUlQoIW1fYklzU2V0dGluZyk7DQotCUNKU19WYWx1ZTo6b3BlcmF0b3IgPSAod2lkZV9zdHJpbmcpOw0KLX0NCi0NCi12b2lkIENKU19Qcm9wVmFsdWU6Om9wZXJhdG9yID4+KENKU19BcnJheSAmYXJyYXkpIGNvbnN0DQotew0KLQlBU1NFUlQobV9iSXNTZXR0aW5nKTsNCi0JQ29udmVydFRvQXJyYXkoYXJyYXkpOw0KLX0NCi0NCi12b2lkIENKU19Qcm9wVmFsdWU6Om9wZXJhdG9yIDw8KENKU19BcnJheSAmYXJyYXkpDQotew0KLQlBU1NFUlQoIW1fYklzU2V0dGluZyk7DQotCUNKU19WYWx1ZTo6b3BlcmF0b3I9KGFycmF5KTsNCi19DQotDQotdm9pZCBDSlNfUHJvcFZhbHVlOjpvcGVyYXRvcj4+KENKU19EYXRlICZkYXRlKSBjb25zdA0KLXsNCi0JQVNTRVJUKG1fYklzU2V0dGluZyk7DQotCUNvbnZlcnRUb0RhdGUoZGF0ZSk7DQotfQ0KLQ0KLXZvaWQgQ0pTX1Byb3BWYWx1ZTo6b3BlcmF0b3I8PChDSlNfRGF0ZSAmZGF0ZSkNCi17DQotCUFTU0VSVCghbV9iSXNTZXR0aW5nKTsNCi0JQ0pTX1ZhbHVlOjpvcGVyYXRvcj0oZGF0ZSk7DQotfQ0KLQ0KLUNKU19Qcm9wVmFsdWU6Om9wZXJhdG9yIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9wVmFsdWU7DQotfQ0KLQ0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gQ0pTX0FycmF5ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQotQ0pTX0FycmF5OjpDSlNfQXJyYXkodjg6Oklzb2xhdGUqIGlzb2xhdGUpOm1faXNvbGF0ZShpc29sYXRlKQ0KLXsNCi19DQotDQotQ0pTX0FycmF5Ojp+Q0pTX0FycmF5KCkNCi17CQkNCi19DQotDQotdm9pZCBDSlNfQXJyYXk6OkF0dGFjaCh2ODo6SGFuZGxlPHY4OjpBcnJheT4gcEFycmF5KQ0KLXsNCi0JbV9wQXJyYXkgPSBwQXJyYXk7DQotfQ0KLQ0KLUZYX0JPT0wgQ0pTX0FycmF5OjpJc0F0dGFjaGVkKCkNCi17DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotdm9pZCBDSlNfQXJyYXk6OkdldEVsZW1lbnQodW5zaWduZWQgaW5kZXgsQ0pTX1ZhbHVlICZ2YWx1ZSkNCi17DQotCWlmIChtX3BBcnJheS5Jc0VtcHR5KCkpDQotCQlyZXR1cm47DQotCXY4OjpIYW5kbGU8djg6OlZhbHVlPiAgcCA9IEpTX0dldEFycmF5RWxlbW5ldChtX3BBcnJheSxpbmRleCk7DQotCXZhbHVlLkF0dGFjaChwLFZUX29iamVjdCk7DQotfQ0KLQ0KLXZvaWQgQ0pTX0FycmF5OjpTZXRFbGVtZW50KHVuc2lnbmVkIGluZGV4LENKU19WYWx1ZSB2YWx1ZSkNCi17DQotCWlmIChtX3BBcnJheS5Jc0VtcHR5KCkpDQotCQltX3BBcnJheSA9IEpTX05ld0FycmF5KG1faXNvbGF0ZSk7DQotDQotCUpTX1B1dEFycmF5RWxlbWVudChtX3BBcnJheSxpbmRleCx2YWx1ZS5Ub0pTVmFsdWUoKSx2YWx1ZS5HZXRUeXBlKCkpOw0KLX0NCi0NCi1pbnQgQ0pTX0FycmF5OjpHZXRMZW5ndGgoKQ0KLXsNCi0JaWYgKG1fcEFycmF5LklzRW1wdHkoKSkNCi0JCXJldHVybiAwOw0KLQlyZXR1cm4gSlNfR2V0QXJyYXlMZW5ndGgobV9wQXJyYXkpOw0KLX0NCi0NCi1DSlNfQXJyYXk6OiBvcGVyYXRvciB2ODo6SGFuZGxlPHY4OjpBcnJheT4oKQ0KLXsNCi0JaWYgKG1fcEFycmF5LklzRW1wdHkoKSkNCi0JCW1fcEFycmF5ID0gSlNfTmV3QXJyYXkobV9pc29sYXRlKTsNCi0NCi0JcmV0dXJuIG1fcEFycmF5Ow0KLX0NCi0NCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENKU19EYXRlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQotDQotQ0pTX0RhdGU6OkNKU19EYXRlKHY4OjpJc29sYXRlKiBpc29sYXRlKSA6bV9pc29sYXRlKGlzb2xhdGUpDQotew0KLX0NCi0NCi1DSlNfRGF0ZTo6Q0pTX0RhdGUodjg6Oklzb2xhdGUqIGlzb2xhdGUsZG91YmxlIGRNc2VjX3RpbWUpIA0KLXsNCi0JbV9pc29sYXRlID0gaXNvbGF0ZTsNCi0JbV9wRGF0ZSA9IEpTX05ld0RhdGUoaXNvbGF0ZSxkTXNlY190aW1lKTsJCQ0KLX0NCi0NCi1DSlNfRGF0ZTo6Q0pTX0RhdGUodjg6Oklzb2xhdGUqIGlzb2xhdGUsaW50IHllYXIsIGludCBtb24sIGludCBkYXksaW50IGhvdXIsIGludCBtaW4sIGludCBzZWMpIA0KLXsNCi0JbV9pc29sYXRlID0gaXNvbGF0ZTsNCi0JbV9wRGF0ZSA9IEpTX05ld0RhdGUoaXNvbGF0ZSxNYWtlRGF0ZSh5ZWFyLG1vbixkYXksaG91cixtaW4sc2VjLDApKTsJDQotfQ0KLQ0KLWRvdWJsZSBDSlNfRGF0ZTo6TWFrZURhdGUoaW50IHllYXIsIGludCBtb24sIGludCBkYXksaW50IGhvdXIsIGludCBtaW4sIGludCBzZWMsaW50IG1zKQ0KLXsNCi0JcmV0dXJuIEpTX01ha2VEYXRlKEpTX01ha2VEYXkoeWVhcixtb24sZGF5KSwgSlNfTWFrZVRpbWUoaG91cixtaW4sc2VjLG1zKSk7DQotfQ0KLQ0KLUNKU19EYXRlOjp+Q0pTX0RhdGUoKQ0KLXsNCi19DQotDQotRlhfQk9PTAlDSlNfRGF0ZTo6SXNWYWxpZERhdGUoKQ0KLXsNCi0JaWYobV9wRGF0ZS5Jc0VtcHR5KCkpIHJldHVybiBGQUxTRTsNCi0JcmV0dXJuICFKU19Qb3J0SXNOYW4oSlNfVG9OdW1iZXIobV9wRGF0ZSkpOw0KLX0NCi0NCi12b2lkIENKU19EYXRlOjpBdHRhY2godjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBEYXRlKQ0KLXsNCi0JbV9wRGF0ZSA9IHBEYXRlOw0KLX0NCi0NCi1pbnQgQ0pTX0RhdGU6OkdldFllYXIoKQ0KLXsNCi0JaWYgKElzVmFsaWREYXRlKCkpDQotCQlyZXR1cm4gSlNfR2V0WWVhckZyb21UaW1lKEpTX0xvY2FsVGltZShKU19Ub051bWJlcihtX3BEYXRlKSkpOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotdm9pZCBDSlNfRGF0ZTo6U2V0WWVhcihpbnQgaVllYXIpDQotew0KLQlkb3VibGUgZGF0ZSA9IE1ha2VEYXRlKGlZZWFyLEdldE1vbnRoKCksR2V0RGF5KCksR2V0SG91cnMoKSxHZXRNaW51dGVzKCksR2V0U2Vjb25kcygpLDApOw0KLQlKU19WYWx1ZUNvcHkobV9wRGF0ZSwgSlNfTmV3RGF0ZShtX2lzb2xhdGUsZGF0ZSkpOw0KLX0NCi0NCi1pbnQgQ0pTX0RhdGU6OkdldE1vbnRoKCkNCi17DQotCWlmIChJc1ZhbGlkRGF0ZSgpKQ0KLQkJcmV0dXJuIEpTX0dldE1vbnRoRnJvbVRpbWUoSlNfTG9jYWxUaW1lKEpTX1RvTnVtYmVyKG1fcERhdGUpKSk7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi12b2lkIENKU19EYXRlOjpTZXRNb250aChpbnQgaU1vbnRoKQ0KLXsNCi0NCi0JZG91YmxlIGRhdGUgPSBNYWtlRGF0ZShHZXRZZWFyKCksaU1vbnRoLEdldERheSgpLEdldEhvdXJzKCksR2V0TWludXRlcygpLEdldFNlY29uZHMoKSwwKTsNCi0JSlNfVmFsdWVDb3B5KG1fcERhdGUsIEpTX05ld0RhdGUobV9pc29sYXRlLGRhdGUpKTsNCi0NCi19DQotDQotaW50IENKU19EYXRlOjpHZXREYXkoKQ0KLXsNCi0JaWYgKElzVmFsaWREYXRlKCkpDQotCQlyZXR1cm4gSlNfR2V0RGF5RnJvbVRpbWUoSlNfTG9jYWxUaW1lKEpTX1RvTnVtYmVyKG1fcERhdGUpKSk7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi12b2lkIENKU19EYXRlOjpTZXREYXkoaW50IGlEYXkpDQotew0KLQ0KLQlkb3VibGUgZGF0ZSA9IE1ha2VEYXRlKEdldFllYXIoKSxHZXRNb250aCgpLGlEYXksR2V0SG91cnMoKSxHZXRNaW51dGVzKCksR2V0U2Vjb25kcygpLDApOw0KLQlKU19WYWx1ZUNvcHkobV9wRGF0ZSxKU19OZXdEYXRlKG1faXNvbGF0ZSxkYXRlKSk7DQotDQotfQ0KLQ0KLWludCBDSlNfRGF0ZTo6R2V0SG91cnMoKQ0KLXsNCi0JaWYgKElzVmFsaWREYXRlKCkpDQotCQlyZXR1cm4gSlNfR2V0SG91ckZyb21UaW1lKEpTX0xvY2FsVGltZShKU19Ub051bWJlcihtX3BEYXRlKSkpOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotdm9pZCBDSlNfRGF0ZTo6U2V0SG91cnMoaW50IGlIb3VycykNCi17DQotCWRvdWJsZSBkYXRlID0gTWFrZURhdGUoR2V0WWVhcigpLEdldE1vbnRoKCksR2V0RGF5KCksaUhvdXJzLEdldE1pbnV0ZXMoKSxHZXRTZWNvbmRzKCksMCk7DQotCUpTX1ZhbHVlQ29weShtX3BEYXRlLEpTX05ld0RhdGUobV9pc29sYXRlLGRhdGUpKTsNCi19DQotDQotaW50IENKU19EYXRlOjpHZXRNaW51dGVzKCkNCi17DQotCWlmIChJc1ZhbGlkRGF0ZSgpKQ0KLQkJcmV0dXJuIEpTX0dldE1pbkZyb21UaW1lKEpTX0xvY2FsVGltZShKU19Ub051bWJlcihtX3BEYXRlKSkpOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotdm9pZCBDSlNfRGF0ZTo6U2V0TWludXRlcyhpbnQgbWludXRlcykNCi17DQotCWRvdWJsZSBkYXRlID0gTWFrZURhdGUoR2V0WWVhcigpLEdldE1vbnRoKCksR2V0RGF5KCksR2V0SG91cnMoKSxtaW51dGVzLEdldFNlY29uZHMoKSwwKTsNCi0JSlNfVmFsdWVDb3B5KG1fcERhdGUsSlNfTmV3RGF0ZShtX2lzb2xhdGUsZGF0ZSkpOw0KLX0NCi0NCi1pbnQgQ0pTX0RhdGU6OkdldFNlY29uZHMoKQ0KLXsNCi0JaWYgKElzVmFsaWREYXRlKCkpDQotCQlyZXR1cm4gSlNfR2V0U2VjRnJvbVRpbWUoSlNfTG9jYWxUaW1lKEpTX1RvTnVtYmVyKG1fcERhdGUpKSk7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi12b2lkIENKU19EYXRlOjpTZXRTZWNvbmRzKGludCBzZWNvbmRzKQ0KLXsNCi0JZG91YmxlIGRhdGUgPSBNYWtlRGF0ZShHZXRZZWFyKCksR2V0TW9udGgoKSxHZXREYXkoKSxHZXRIb3VycygpLEdldE1pbnV0ZXMoKSxzZWNvbmRzLDApOw0KLQlKU19WYWx1ZUNvcHkobV9wRGF0ZSxKU19OZXdEYXRlKG1faXNvbGF0ZSxkYXRlKSk7DQotfQ0KLQ0KLUNKU19EYXRlOjpvcGVyYXRvciB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKQ0KLXsNCi0JcmV0dXJuIG1fcERhdGU7DQotfQ0KLQ0KLUNKU19EYXRlOjpvcGVyYXRvciBkb3VibGUoKSBjb25zdA0KLXsNCi0JaWYobV9wRGF0ZS5Jc0VtcHR5KCkpDQotCQlyZXR1cm4gMC4wOw0KLQlyZXR1cm4gSlNfVG9OdW1iZXIobV9wRGF0ZSk7DQotfQ0KLQ0KLUNGWF9XaWRlU3RyaW5nIENKU19EYXRlOjpUb1N0cmluZygpIGNvbnN0DQotew0KLQlpZihtX3BEYXRlLklzRW1wdHkoKSkNCi0JCXJldHVybiBMIiI7DQotCXJldHVybiBKU19Ub1N0cmluZyhtX3BEYXRlKTsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KYXZhU2NyaXB0LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0RlZmluZS5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19PYmplY3QuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfVmFsdWUuaCIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDSlNfVmFsdWUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDSlNfVmFsdWU6OkNKU19WYWx1ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkgOiBtX2lzb2xhdGUoaXNvbGF0ZSksbV9lVHlwZShWVF91bmtub3duKQoreworfQorQ0pTX1ZhbHVlOjpDSlNfVmFsdWUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwVmFsdWUsRlhKU1ZBTFVFVFlQRSB0KSA6bV9pc29sYXRlKGlzb2xhdGUpLCBtX3BWYWx1ZShwVmFsdWUpICwgbV9lVHlwZSh0KQoreworfQorCitDSlNfVmFsdWU6OkNKU19WYWx1ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgY29uc3QgaW50ICZpVmFsdWUpOm1faXNvbGF0ZShpc29sYXRlKQoreworCW9wZXJhdG9yID0oaVZhbHVlKTsKK30KKworQ0pTX1ZhbHVlOjpDSlNfVmFsdWUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIGNvbnN0IGJvb2wgJmJWYWx1ZSk6bV9pc29sYXRlKGlzb2xhdGUpCit7CisJb3BlcmF0b3IgPShiVmFsdWUpOworfQorCitDSlNfVmFsdWU6OkNKU19WYWx1ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgY29uc3QgZmxvYXQgJmZWYWx1ZSk6bV9pc29sYXRlKGlzb2xhdGUpCit7CisJb3BlcmF0b3IgPShmVmFsdWUpOworfQorCitDSlNfVmFsdWU6OkNKU19WYWx1ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgY29uc3QgZG91YmxlICZkVmFsdWUpOm1faXNvbGF0ZShpc29sYXRlKSAKK3sKKwlvcGVyYXRvciA9KGRWYWx1ZSk7Cit9CisKK0NKU19WYWx1ZTo6Q0pTX1ZhbHVlKHY4OjpJc29sYXRlKiBpc29sYXRlLCBKU0ZYT2JqZWN0ICBwSnNPYmopOm1faXNvbGF0ZShpc29sYXRlKSAKK3sKKwlvcGVyYXRvciA9KHBKc09iaik7Cit9CisKK0NKU19WYWx1ZTo6Q0pTX1ZhbHVlKHY4OjpJc29sYXRlKiBpc29sYXRlLCBDSlNfT2JqZWN0ICogcEpzT2JqKTptX2lzb2xhdGUoaXNvbGF0ZSkgCit7CisJb3BlcmF0b3IgPShwSnNPYmopOworfQorCitDSlNfVmFsdWU6OkNKU19WYWx1ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgRlhfTFBDV1NUUiBwV3N0cik6bV9pc29sYXRlKGlzb2xhdGUpIAoreworCW9wZXJhdG9yID0ocFdzdHIpOworfQorCitDSlNfVmFsdWU6OkNKU19WYWx1ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgRlhfTFBDU1RSIHBTdHIpOm1faXNvbGF0ZShpc29sYXRlKSAKK3sKKwlvcGVyYXRvciA9IChwU3RyKTsKK30KKworQ0pTX1ZhbHVlOjpDSlNfVmFsdWUodjg6Oklzb2xhdGUqIGlzb2xhdGUsIENKU19BcnJheSYgYXJyYXkpOm1faXNvbGF0ZShpc29sYXRlKSAKK3sKKwlvcGVyYXRvciA9IChhcnJheSk7Cit9CisKK0NKU19WYWx1ZTo6fkNKU19WYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ0pTX1ZhbHVlOjpBdHRhY2godjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBWYWx1ZSxGWEpTVkFMVUVUWVBFIHQpCit7CisJbV9wVmFsdWUgPSBwVmFsdWU7CisJbV9lVHlwZSA9IHQ7Cit9CisKK3ZvaWQgQ0pTX1ZhbHVlOjpBdHRhY2goQ0pTX1ZhbHVlICpwVmFsdWUpCit7CisJaWYgKHBWYWx1ZSkKKwkJQXR0YWNoKHBWYWx1ZS0+VG9KU1ZhbHVlKCkscFZhbHVlLT5HZXRUeXBlKCkpOworfQorCit2b2lkIENKU19WYWx1ZTo6RGV0YWNoKCkKK3sKKwltX3BWYWx1ZSA9IHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworCW1fZVR5cGUgPSBWVF91bmtub3duOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0NKU19WYWx1ZTo6b3BlcmF0b3IgaW50KCkgY29uc3QKK3sKKworCXJldHVybiBKU19Ub0ludDMyKG1fcFZhbHVlKTsKKworfQorCitDSlNfVmFsdWU6Om9wZXJhdG9yIGJvb2woKSBjb25zdAoreworCisJcmV0dXJuIEpTX1RvQm9vbGVhbihtX3BWYWx1ZSk7CisJCit9CisKK0NKU19WYWx1ZTo6b3BlcmF0b3IgZG91YmxlKCkgY29uc3QKK3sKKworCXJldHVybiBKU19Ub051bWJlcihtX3BWYWx1ZSk7CisJCit9CisKK0NKU19WYWx1ZTo6b3BlcmF0b3IgZmxvYXQoKSBjb25zdAoreworCisJcmV0dXJuIChmbG9hdClKU19Ub051bWJlcihtX3BWYWx1ZSk7CisKK30KKworQ0pTX1ZhbHVlOjpvcGVyYXRvciBDSlNfT2JqZWN0ICooKSBjb25zdAoreworCisJdjg6OkhhbmRsZTx2ODo6T2JqZWN0PglwT2JqID0gSlNfVG9PYmplY3QobV9wVmFsdWUpOworCXJldHVybiAoQ0pTX09iamVjdCopSlNfR2V0UHJpdmF0ZShtX2lzb2xhdGUsIHBPYmopOworfQorCitDSlNfVmFsdWU6Om9wZXJhdG9yIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSBjb25zdAoreworCXJldHVybiBKU19Ub09iamVjdChtX3BWYWx1ZSk7Cit9CisKK0NKU19WYWx1ZTo6b3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKSBjb25zdAoreworCXJldHVybiBKU19Ub1N0cmluZyhtX3BWYWx1ZSk7Cit9CisKK0NKU19WYWx1ZTo6b3BlcmF0b3IgQ0ZYX0J5dGVTdHJpbmcoKSBjb25zdAoreworCXJldHVybiBDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUob3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKSk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBDSlNfVmFsdWU6OlRvSlNWYWx1ZSgpCit7CisJcmV0dXJuIG1fcFZhbHVlOworfQorCisKK0NKU19WYWx1ZTo6b3BlcmF0b3Igdjg6OkhhbmRsZTx2ODo6QXJyYXk+KCkgY29uc3QKK3sKKwlpZiAoSXNBcnJheU9iamVjdCgpKQorCQlyZXR1cm4gdjg6OkhhbmRsZTx2ODo6QXJyYXk+OjpDYXN0KEpTX1RvT2JqZWN0KG1fcFZhbHVlKSk7CisJcmV0dXJuIHY4OjpIYW5kbGU8djg6OkFycmF5PigpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3ZvaWQgQ0pTX1ZhbHVlOjpvcGVyYXRvciA9KGludCBpVmFsdWUpCit7CisJbV9wVmFsdWUgPSBKU19OZXdOdW1iZXIobV9pc29sYXRlLCBpVmFsdWUpOworCisJbV9lVHlwZSA9IFZUX251bWJlcjsKK30KKwordm9pZCBDSlNfVmFsdWU6Om9wZXJhdG9yID0oYm9vbCBiVmFsdWUpCit7CisJbV9wVmFsdWUgPSBKU19OZXdCb29sZWFuKG1faXNvbGF0ZSwgYlZhbHVlKTsKKworCW1fZVR5cGUgPSBWVF9ib29sZWFuOworfQorCit2b2lkIENKU19WYWx1ZTo6b3BlcmF0b3IgPShkb3VibGUgZFZhbHVlKQoreworCW1fcFZhbHVlID0gSlNfTmV3TnVtYmVyKG1faXNvbGF0ZSxkVmFsdWUpOworCisJbV9lVHlwZSA9IFZUX251bWJlcjsKK30KKwordm9pZCBDSlNfVmFsdWU6Om9wZXJhdG9yID0gKGZsb2F0IGZWYWx1ZSkKK3sKKwltX3BWYWx1ZSA9IEpTX05ld051bWJlcihtX2lzb2xhdGUsZlZhbHVlKTsKKwltX2VUeXBlID0gVlRfbnVtYmVyOworfQorCit2b2lkIENKU19WYWx1ZTo6b3BlcmF0b3IgPSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHBPYmopCit7CisKKwltX3BWYWx1ZSA9IEpTX05ld09iamVjdChtX2lzb2xhdGUscE9iaik7CisKKwltX2VUeXBlID0gVlRfZnhvYmplY3Q7Cit9CisKK3ZvaWQgQ0pTX1ZhbHVlOjpvcGVyYXRvciA9KENKU19PYmplY3QgKiBwT2JqKQoreworCWlmIChwT2JqKQorCQlvcGVyYXRvciA9ICgoSlNGWE9iamVjdCkqcE9iaik7Cit9CisKK3ZvaWQgQ0pTX1ZhbHVlOjpvcGVyYXRvciA9KEZYX0xQQ1dTVFIgcFdzdHIpCit7CisJbV9wVmFsdWUgPSBKU19OZXdTdHJpbmcobV9pc29sYXRlLCh3Y2hhcl90ICopcFdzdHIpOworCisJbV9lVHlwZSA9IFZUX3N0cmluZzsKK30KKwordm9pZCBDSlNfVmFsdWU6OlNldE51bGwoKQoreworCW1fcFZhbHVlID0gSlNfTmV3TnVsbCgpOworCisJbV9lVHlwZSA9IFZUX251bGw7Cit9CisKK3ZvaWQgQ0pTX1ZhbHVlOjpvcGVyYXRvciA9IChGWF9MUENTVFIgcFN0cikKK3sJCisJb3BlcmF0b3IgPSAoQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChwU3RyKSk7Cit9CisKK3ZvaWQgQ0pTX1ZhbHVlOjpvcGVyYXRvciA9IChDSlNfQXJyYXkgJiBhcnJheSkKK3sKKwltX3BWYWx1ZSA9IEpTX05ld09iamVjdDIobV9pc29sYXRlLCh2ODo6SGFuZGxlPHY4OjpBcnJheT4pYXJyYXkpOworCisJbV9lVHlwZSA9IFZUX29iamVjdDsKK30KKwordm9pZCBDSlNfVmFsdWU6Om9wZXJhdG9yID0gKENKU19EYXRlICYgZGF0ZSkKK3sKKwltX3BWYWx1ZSA9IEpTX05ld0RhdGUobV9pc29sYXRlLCAoZG91YmxlKWRhdGUpOworCisJbV9lVHlwZSA9IFZUX2RhdGU7Cit9CisKK3ZvaWQgQ0pTX1ZhbHVlOjpvcGVyYXRvciA9IChDSlNfVmFsdWUgdmFsdWUpCit7CisJbV9wVmFsdWUgPSB2YWx1ZS5Ub0pTVmFsdWUoKTsKKworCW1fZVR5cGUgPSB2YWx1ZS5tX2VUeXBlOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0ZYSlNWQUxVRVRZUEUgQ0pTX1ZhbHVlOjpHZXRUeXBlKCkgY29uc3QKK3sKKwlpZihtX3BWYWx1ZS5Jc0VtcHR5KCkpIHJldHVybiBWVF91bmtub3duOworCWlmKG1fcFZhbHVlLT5Jc1N0cmluZygpKSByZXR1cm4gVlRfc3RyaW5nOworCWlmKG1fcFZhbHVlLT5Jc051bWJlcigpKSByZXR1cm4gVlRfbnVtYmVyOworCWlmKG1fcFZhbHVlLT5Jc0Jvb2xlYW4oKSkgcmV0dXJuIFZUX2Jvb2xlYW47CisJaWYobV9wVmFsdWUtPklzRGF0ZSgpKSByZXR1cm4gVlRfZGF0ZTsKKwlpZihtX3BWYWx1ZS0+SXNPYmplY3QoKSkgcmV0dXJuIFZUX29iamVjdDsKKwlpZihtX3BWYWx1ZS0+SXNOdWxsKCkpIHJldHVybiBWVF9udWxsOworCWlmKG1fcFZhbHVlLT5Jc1VuZGVmaW5lZCgpKSByZXR1cm4gVlRfdW5kZWZpbmVkOworCXJldHVybiBWVF91bmtub3duOworfQorCitGWF9CT09MIENKU19WYWx1ZTo6SXNBcnJheU9iamVjdCgpIGNvbnN0IAoreworCWlmKG1fcFZhbHVlLklzRW1wdHkoKSkgcmV0dXJuIEZBTFNFOworCXJldHVybiBtX3BWYWx1ZS0+SXNBcnJheSgpOworfQorCitGWF9CT09MIENKU19WYWx1ZTo6SXNEYXRlT2JqZWN0KCkgY29uc3QKK3sKKwlpZihtX3BWYWx1ZS5Jc0VtcHR5KCkpIHJldHVybiBGQUxTRTsKKwlyZXR1cm4gbV9wVmFsdWUtPklzRGF0ZSgpOworfQorCisvL0NKU19WYWx1ZTo6b3BlcmF0b3IgQ0pTX0FycmF5KCkKK0ZYX0JPT0wgQ0pTX1ZhbHVlOjpDb252ZXJ0VG9BcnJheShDSlNfQXJyYXkgJmFycmF5KSBjb25zdAoreworCWlmIChJc0FycmF5T2JqZWN0KCkpCisJeworCQlhcnJheS5BdHRhY2goSlNfVG9BcnJheShtX3BWYWx1ZSkpOworCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wgQ0pTX1ZhbHVlOjpDb252ZXJ0VG9EYXRlKENKU19EYXRlICZkYXRlKSBjb25zdAoreworLy8gCWlmIChHZXRUeXBlKCkgPT0gVlRfZGF0ZSkKKy8vIAl7CisvLyAJCWRhdGUgPSAoZG91YmxlKSgqdGhpcyk7CisvLyAJCXJldHVybiBUUlVFOworLy8gCX0KKworCWlmIChJc0RhdGVPYmplY3QoKSkKKwl7CisJCWRhdGUuQXR0YWNoKG1fcFZhbHVlKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJcmV0dXJuIEZBTFNFOwkKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDSlNfUHJvcFZhbHVlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ0pTX1Byb3BWYWx1ZTo6Q0pTX1Byb3BWYWx1ZShjb25zdCBDSlNfVmFsdWUgJnZhbHVlKSA6IAorCUNKU19WYWx1ZSh2YWx1ZSksCisJbV9iSXNTZXR0aW5nKDApCit7Cit9CisKK0NKU19Qcm9wVmFsdWU6OkNKU19Qcm9wVmFsdWUodjg6Oklzb2xhdGUqIGlzb2xhdGUpIDogQ0pTX1ZhbHVlKGlzb2xhdGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9iSXNTZXR0aW5nKDApCit7Cit9CisKK0NKU19Qcm9wVmFsdWU6On5DSlNfUHJvcFZhbHVlKCkKK3sKK30KKworRlhfQk9PTCBDSlNfUHJvcFZhbHVlOjpJc1NldHRpbmcoKQoreworCXJldHVybiBtX2JJc1NldHRpbmc7Cit9CisKK0ZYX0JPT0wgQ0pTX1Byb3BWYWx1ZTo6SXNHZXR0aW5nKCkKK3sKKwlyZXR1cm4gIW1fYklzU2V0dGluZzsKK30KKwordm9pZCBDSlNfUHJvcFZhbHVlOjpvcGVyYXRvciA8PChpbnQgaVZhbHVlKQoreworCUFTU0VSVCghbV9iSXNTZXR0aW5nKTsKKwlDSlNfVmFsdWU6Om9wZXJhdG9yID0oaVZhbHVlKTsKK30KKwordm9pZCBDSlNfUHJvcFZhbHVlOjpvcGVyYXRvciA+PihpbnQgJiBpVmFsdWUpIGNvbnN0Cit7CisJQVNTRVJUKG1fYklzU2V0dGluZyk7CisJaVZhbHVlID0gQ0pTX1ZhbHVlOjpvcGVyYXRvciBpbnQoKTsKK30KKworCit2b2lkIENKU19Qcm9wVmFsdWU6Om9wZXJhdG9yIDw8KGJvb2wgYlZhbHVlKQoreworCUFTU0VSVCghbV9iSXNTZXR0aW5nKTsKKwlDSlNfVmFsdWU6Om9wZXJhdG9yID0oYlZhbHVlKTsKK30KKwordm9pZCBDSlNfUHJvcFZhbHVlOjpvcGVyYXRvciA+Pihib29sICZiVmFsdWUpIGNvbnN0Cit7CisJQVNTRVJUKG1fYklzU2V0dGluZyk7CisJYlZhbHVlID0gQ0pTX1ZhbHVlOjpvcGVyYXRvciBib29sKCk7CisKK30KKwordm9pZCBDSlNfUHJvcFZhbHVlOjpvcGVyYXRvciA8PChkb3VibGUgZFZhbHVlKQoreworCUFTU0VSVCghbV9iSXNTZXR0aW5nKTsKKwlDSlNfVmFsdWU6Om9wZXJhdG9yID0oZFZhbHVlKTsKK30KKwordm9pZCBDSlNfUHJvcFZhbHVlOjpvcGVyYXRvciA+Pihkb3VibGUgJmRWYWx1ZSkgY29uc3QKK3sKKwlBU1NFUlQobV9iSXNTZXR0aW5nKTsKKwlkVmFsdWUgPSBDSlNfVmFsdWU6Om9wZXJhdG9yIGRvdWJsZSgpOworfQorCit2b2lkIENKU19Qcm9wVmFsdWU6Om9wZXJhdG9yIDw8KENKU19PYmplY3QgKnBPYmopCit7CisJQVNTRVJUKCFtX2JJc1NldHRpbmcpOworCUNKU19WYWx1ZTo6b3BlcmF0b3IgPSAocE9iaik7Cit9CisKK3ZvaWQgQ0pTX1Byb3BWYWx1ZTo6b3BlcmF0b3IgPj4oQ0pTX09iamVjdCAqJnBwT2JqKSBjb25zdAoreworCUFTU0VSVChtX2JJc1NldHRpbmcpOworCXBwT2JqID0gQ0pTX1ZhbHVlOjpvcGVyYXRvciBDSlNfT2JqZWN0ICooKTsKK30KKwordm9pZCBDSlNfUHJvcFZhbHVlOjpvcGVyYXRvcjw8KEpTRlhPYmplY3QgcE9iaikKK3sKKwlBU1NFUlQoIW1fYklzU2V0dGluZyk7CisJQ0pTX1ZhbHVlOjpvcGVyYXRvciA9IChwT2JqKTsKK30KKwordm9pZCBDSlNfUHJvcFZhbHVlOjpvcGVyYXRvcj4+KEpTRlhPYmplY3QgJnBwT2JqKSBjb25zdAoreworCUFTU0VSVChtX2JJc1NldHRpbmcpOworCXBwT2JqID0gQ0pTX1ZhbHVlOjpvcGVyYXRvciBKU0ZYT2JqZWN0ICgpOworfQorCisKK3ZvaWQgQ0pTX1Byb3BWYWx1ZTo6U3RhcnRTZXR0aW5nKCkKK3sKKwltX2JJc1NldHRpbmcgPSAxOworfQorCit2b2lkIENKU19Qcm9wVmFsdWU6OlN0YXJ0R2V0dGluZygpCit7CisJbV9iSXNTZXR0aW5nID0gMDsKK30KK3ZvaWQgQ0pTX1Byb3BWYWx1ZTo6b3BlcmF0b3IgPDwoQ0ZYX0J5dGVTdHJpbmcgc3RyaW5nKQoreworCUFTU0VSVCghbV9iSXNTZXR0aW5nKTsKKwlDSlNfVmFsdWU6Om9wZXJhdG9yID0oKEZYX0xQQ1NUUilzdHJpbmcpOworfQorCit2b2lkIENKU19Qcm9wVmFsdWU6Om9wZXJhdG9yID4+KENGWF9CeXRlU3RyaW5nICZzdHJpbmcpIGNvbnN0Cit7CisJQVNTRVJUKG1fYklzU2V0dGluZyk7CisJc3RyaW5nID0gQ0pTX1ZhbHVlOjpvcGVyYXRvciBDRlhfQnl0ZVN0cmluZygpOworfQorCit2b2lkIENKU19Qcm9wVmFsdWU6Om9wZXJhdG9yIDw8KEZYX0xQQ1dTVFIgY19zdHJpbmcpCit7CisJQVNTRVJUKCFtX2JJc1NldHRpbmcpOworCUNKU19WYWx1ZTo6b3BlcmF0b3IgPShjX3N0cmluZyk7Cit9CisKK3ZvaWQgQ0pTX1Byb3BWYWx1ZTo6b3BlcmF0b3IgPj4oQ0ZYX1dpZGVTdHJpbmcgJndpZGVfc3RyaW5nKSBjb25zdAoreworCUFTU0VSVChtX2JJc1NldHRpbmcpOworCXdpZGVfc3RyaW5nID0gQ0pTX1ZhbHVlOjpvcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOworfQorCit2b2lkIENKU19Qcm9wVmFsdWU6Om9wZXJhdG9yIDw8KENGWF9XaWRlU3RyaW5nIHdpZGVfc3RyaW5nKQoreworCUFTU0VSVCghbV9iSXNTZXR0aW5nKTsKKwlDSlNfVmFsdWU6Om9wZXJhdG9yID0gKHdpZGVfc3RyaW5nKTsKK30KKwordm9pZCBDSlNfUHJvcFZhbHVlOjpvcGVyYXRvciA+PihDSlNfQXJyYXkgJmFycmF5KSBjb25zdAoreworCUFTU0VSVChtX2JJc1NldHRpbmcpOworCUNvbnZlcnRUb0FycmF5KGFycmF5KTsKK30KKwordm9pZCBDSlNfUHJvcFZhbHVlOjpvcGVyYXRvciA8PChDSlNfQXJyYXkgJmFycmF5KQoreworCUFTU0VSVCghbV9iSXNTZXR0aW5nKTsKKwlDSlNfVmFsdWU6Om9wZXJhdG9yPShhcnJheSk7Cit9CisKK3ZvaWQgQ0pTX1Byb3BWYWx1ZTo6b3BlcmF0b3I+PihDSlNfRGF0ZSAmZGF0ZSkgY29uc3QKK3sKKwlBU1NFUlQobV9iSXNTZXR0aW5nKTsKKwlDb252ZXJ0VG9EYXRlKGRhdGUpOworfQorCit2b2lkIENKU19Qcm9wVmFsdWU6Om9wZXJhdG9yPDwoQ0pTX0RhdGUgJmRhdGUpCit7CisJQVNTRVJUKCFtX2JJc1NldHRpbmcpOworCUNKU19WYWx1ZTo6b3BlcmF0b3I9KGRhdGUpOworfQorCitDSlNfUHJvcFZhbHVlOjpvcGVyYXRvciB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSBjb25zdAoreworCXJldHVybiBtX3BWYWx1ZTsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBDSlNfQXJyYXkgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK0NKU19BcnJheTo6Q0pTX0FycmF5KHY4OjpJc29sYXRlKiBpc29sYXRlKTptX2lzb2xhdGUoaXNvbGF0ZSkKK3sKK30KKworQ0pTX0FycmF5Ojp+Q0pTX0FycmF5KCkKK3sJCQorfQorCit2b2lkIENKU19BcnJheTo6QXR0YWNoKHY4OjpIYW5kbGU8djg6OkFycmF5PiBwQXJyYXkpCit7CisJbV9wQXJyYXkgPSBwQXJyYXk7Cit9CisKK0ZYX0JPT0wgQ0pTX0FycmF5OjpJc0F0dGFjaGVkKCkKK3sKKwlyZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgQ0pTX0FycmF5OjpHZXRFbGVtZW50KHVuc2lnbmVkIGluZGV4LENKU19WYWx1ZSAmdmFsdWUpCit7CisJaWYgKG1fcEFycmF5LklzRW1wdHkoKSkKKwkJcmV0dXJuOworCXY4OjpIYW5kbGU8djg6OlZhbHVlPiAgcCA9IEpTX0dldEFycmF5RWxlbW5ldChtX3BBcnJheSxpbmRleCk7CisJdmFsdWUuQXR0YWNoKHAsVlRfb2JqZWN0KTsKK30KKwordm9pZCBDSlNfQXJyYXk6OlNldEVsZW1lbnQodW5zaWduZWQgaW5kZXgsQ0pTX1ZhbHVlIHZhbHVlKQoreworCWlmIChtX3BBcnJheS5Jc0VtcHR5KCkpCisJCW1fcEFycmF5ID0gSlNfTmV3QXJyYXkobV9pc29sYXRlKTsKKworCUpTX1B1dEFycmF5RWxlbWVudChtX3BBcnJheSxpbmRleCx2YWx1ZS5Ub0pTVmFsdWUoKSx2YWx1ZS5HZXRUeXBlKCkpOworfQorCitpbnQgQ0pTX0FycmF5OjpHZXRMZW5ndGgoKQoreworCWlmIChtX3BBcnJheS5Jc0VtcHR5KCkpCisJCXJldHVybiAwOworCXJldHVybiBKU19HZXRBcnJheUxlbmd0aChtX3BBcnJheSk7Cit9CisKK0NKU19BcnJheTo6IG9wZXJhdG9yIHY4OjpIYW5kbGU8djg6OkFycmF5PigpCit7CisJaWYgKG1fcEFycmF5LklzRW1wdHkoKSkKKwkJbV9wQXJyYXkgPSBKU19OZXdBcnJheShtX2lzb2xhdGUpOworCisJcmV0dXJuIG1fcEFycmF5OworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IENKU19EYXRlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKK0NKU19EYXRlOjpDSlNfRGF0ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkgOm1faXNvbGF0ZShpc29sYXRlKQoreworfQorCitDSlNfRGF0ZTo6Q0pTX0RhdGUodjg6Oklzb2xhdGUqIGlzb2xhdGUsZG91YmxlIGRNc2VjX3RpbWUpIAoreworCW1faXNvbGF0ZSA9IGlzb2xhdGU7CisJbV9wRGF0ZSA9IEpTX05ld0RhdGUoaXNvbGF0ZSxkTXNlY190aW1lKTsJCQorfQorCitDSlNfRGF0ZTo6Q0pTX0RhdGUodjg6Oklzb2xhdGUqIGlzb2xhdGUsaW50IHllYXIsIGludCBtb24sIGludCBkYXksaW50IGhvdXIsIGludCBtaW4sIGludCBzZWMpIAoreworCW1faXNvbGF0ZSA9IGlzb2xhdGU7CisJbV9wRGF0ZSA9IEpTX05ld0RhdGUoaXNvbGF0ZSxNYWtlRGF0ZSh5ZWFyLG1vbixkYXksaG91cixtaW4sc2VjLDApKTsJCit9CisKK2RvdWJsZSBDSlNfRGF0ZTo6TWFrZURhdGUoaW50IHllYXIsIGludCBtb24sIGludCBkYXksaW50IGhvdXIsIGludCBtaW4sIGludCBzZWMsaW50IG1zKQoreworCXJldHVybiBKU19NYWtlRGF0ZShKU19NYWtlRGF5KHllYXIsbW9uLGRheSksIEpTX01ha2VUaW1lKGhvdXIsbWluLHNlYyxtcykpOworfQorCitDSlNfRGF0ZTo6fkNKU19EYXRlKCkKK3sKK30KKworRlhfQk9PTAlDSlNfRGF0ZTo6SXNWYWxpZERhdGUoKQoreworCWlmKG1fcERhdGUuSXNFbXB0eSgpKSByZXR1cm4gRkFMU0U7CisJcmV0dXJuICFKU19Qb3J0SXNOYW4oSlNfVG9OdW1iZXIobV9wRGF0ZSkpOworfQorCit2b2lkIENKU19EYXRlOjpBdHRhY2godjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBEYXRlKQoreworCW1fcERhdGUgPSBwRGF0ZTsKK30KKworaW50IENKU19EYXRlOjpHZXRZZWFyKCkKK3sKKwlpZiAoSXNWYWxpZERhdGUoKSkKKwkJcmV0dXJuIEpTX0dldFllYXJGcm9tVGltZShKU19Mb2NhbFRpbWUoSlNfVG9OdW1iZXIobV9wRGF0ZSkpKTsKKworCXJldHVybiAwOworfQorCit2b2lkIENKU19EYXRlOjpTZXRZZWFyKGludCBpWWVhcikKK3sKKwlkb3VibGUgZGF0ZSA9IE1ha2VEYXRlKGlZZWFyLEdldE1vbnRoKCksR2V0RGF5KCksR2V0SG91cnMoKSxHZXRNaW51dGVzKCksR2V0U2Vjb25kcygpLDApOworCUpTX1ZhbHVlQ29weShtX3BEYXRlLCBKU19OZXdEYXRlKG1faXNvbGF0ZSxkYXRlKSk7Cit9CisKK2ludCBDSlNfRGF0ZTo6R2V0TW9udGgoKQoreworCWlmIChJc1ZhbGlkRGF0ZSgpKQorCQlyZXR1cm4gSlNfR2V0TW9udGhGcm9tVGltZShKU19Mb2NhbFRpbWUoSlNfVG9OdW1iZXIobV9wRGF0ZSkpKTsKKworCXJldHVybiAwOworfQorCit2b2lkIENKU19EYXRlOjpTZXRNb250aChpbnQgaU1vbnRoKQoreworCisJZG91YmxlIGRhdGUgPSBNYWtlRGF0ZShHZXRZZWFyKCksaU1vbnRoLEdldERheSgpLEdldEhvdXJzKCksR2V0TWludXRlcygpLEdldFNlY29uZHMoKSwwKTsKKwlKU19WYWx1ZUNvcHkobV9wRGF0ZSwgSlNfTmV3RGF0ZShtX2lzb2xhdGUsZGF0ZSkpOworCit9CisKK2ludCBDSlNfRGF0ZTo6R2V0RGF5KCkKK3sKKwlpZiAoSXNWYWxpZERhdGUoKSkKKwkJcmV0dXJuIEpTX0dldERheUZyb21UaW1lKEpTX0xvY2FsVGltZShKU19Ub051bWJlcihtX3BEYXRlKSkpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ0pTX0RhdGU6OlNldERheShpbnQgaURheSkKK3sKKworCWRvdWJsZSBkYXRlID0gTWFrZURhdGUoR2V0WWVhcigpLEdldE1vbnRoKCksaURheSxHZXRIb3VycygpLEdldE1pbnV0ZXMoKSxHZXRTZWNvbmRzKCksMCk7CisJSlNfVmFsdWVDb3B5KG1fcERhdGUsSlNfTmV3RGF0ZShtX2lzb2xhdGUsZGF0ZSkpOworCit9CisKK2ludCBDSlNfRGF0ZTo6R2V0SG91cnMoKQoreworCWlmIChJc1ZhbGlkRGF0ZSgpKQorCQlyZXR1cm4gSlNfR2V0SG91ckZyb21UaW1lKEpTX0xvY2FsVGltZShKU19Ub051bWJlcihtX3BEYXRlKSkpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ0pTX0RhdGU6OlNldEhvdXJzKGludCBpSG91cnMpCit7CisJZG91YmxlIGRhdGUgPSBNYWtlRGF0ZShHZXRZZWFyKCksR2V0TW9udGgoKSxHZXREYXkoKSxpSG91cnMsR2V0TWludXRlcygpLEdldFNlY29uZHMoKSwwKTsKKwlKU19WYWx1ZUNvcHkobV9wRGF0ZSxKU19OZXdEYXRlKG1faXNvbGF0ZSxkYXRlKSk7Cit9CisKK2ludCBDSlNfRGF0ZTo6R2V0TWludXRlcygpCit7CisJaWYgKElzVmFsaWREYXRlKCkpCisJCXJldHVybiBKU19HZXRNaW5Gcm9tVGltZShKU19Mb2NhbFRpbWUoSlNfVG9OdW1iZXIobV9wRGF0ZSkpKTsKKworCXJldHVybiAwOworfQorCit2b2lkIENKU19EYXRlOjpTZXRNaW51dGVzKGludCBtaW51dGVzKQoreworCWRvdWJsZSBkYXRlID0gTWFrZURhdGUoR2V0WWVhcigpLEdldE1vbnRoKCksR2V0RGF5KCksR2V0SG91cnMoKSxtaW51dGVzLEdldFNlY29uZHMoKSwwKTsKKwlKU19WYWx1ZUNvcHkobV9wRGF0ZSxKU19OZXdEYXRlKG1faXNvbGF0ZSxkYXRlKSk7Cit9CisKK2ludCBDSlNfRGF0ZTo6R2V0U2Vjb25kcygpCit7CisJaWYgKElzVmFsaWREYXRlKCkpCisJCXJldHVybiBKU19HZXRTZWNGcm9tVGltZShKU19Mb2NhbFRpbWUoSlNfVG9OdW1iZXIobV9wRGF0ZSkpKTsKKworCXJldHVybiAwOworfQorCit2b2lkIENKU19EYXRlOjpTZXRTZWNvbmRzKGludCBzZWNvbmRzKQoreworCWRvdWJsZSBkYXRlID0gTWFrZURhdGUoR2V0WWVhcigpLEdldE1vbnRoKCksR2V0RGF5KCksR2V0SG91cnMoKSxHZXRNaW51dGVzKCksc2Vjb25kcywwKTsKKwlKU19WYWx1ZUNvcHkobV9wRGF0ZSxKU19OZXdEYXRlKG1faXNvbGF0ZSxkYXRlKSk7Cit9CisKK0NKU19EYXRlOjpvcGVyYXRvciB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKQoreworCXJldHVybiBtX3BEYXRlOworfQorCitDSlNfRGF0ZTo6b3BlcmF0b3IgZG91YmxlKCkgY29uc3QKK3sKKwlpZihtX3BEYXRlLklzRW1wdHkoKSkKKwkJcmV0dXJuIDAuMDsKKwlyZXR1cm4gSlNfVG9OdW1iZXIobV9wRGF0ZSk7Cit9CisKK0NGWF9XaWRlU3RyaW5nIENKU19EYXRlOjpUb1N0cmluZygpIGNvbnN0Cit7CisJaWYobV9wRGF0ZS5Jc0VtcHR5KCkpCisJCXJldHVybiBMIiI7CisJcmV0dXJuIEpTX1RvU3RyaW5nKG1fcERhdGUpOworfQpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9QdWJsaWNNZXRob2RzLmNwcCBiL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvUHVibGljTWV0aG9kcy5jcHAKaW5kZXggYzM5YzhhMC4uYmQ0YWNhZSAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9QdWJsaWNNZXRob2RzLmNwcAorKysgYi9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L1B1YmxpY01ldGhvZHMuY3BwCkBAIC0xLDIzMzUgKzEsMjMzNSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KYXZhU2NyaXB0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9JSmF2YVNjcmlwdC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRGVmaW5lLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19PYmplY3QuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1ZhbHVlLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9QdWJsaWNNZXRob2RzLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19FdmVudEhhbmRsZXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L3Jlc291cmNlLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19Db250ZXh0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19WYWx1ZS5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvdXRpbC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvRmllbGQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L2NvbG9yLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19SdW50aW1lLmgiDQotDQotc3RhdGljIHY4OjpJc29sYXRlKiBHZXRJc29sYXRlKElGWEpTX0NvbnRleHQqIGNjKQ0KLXsNCi0JQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0ICopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0NCi0JQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpOw0KLQlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7DQotDQotCXJldHVybiBwUnVudGltZS0+R2V0SXNvbGF0ZSgpOw0KLX0NCi0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDSlNfUHVibGljTWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLSNkZWZpbmUgRE9VQkxFX0NPUlJFQ1QJMC4wMDAwMDAwMDAwMDAwMDENCi0NCi1CRUdJTl9KU19TVEFUSUNfR0xPQkFMX0ZVTihDSlNfUHVibGljTWV0aG9kcykNCi0JSlNfU1RBVElDX0dMT0JBTF9GVU5fRU5UUlkoQUZOdW1iZXJfRm9ybWF0LDYpDQotCUpTX1NUQVRJQ19HTE9CQUxfRlVOX0VOVFJZKEFGTnVtYmVyX0tleXN0cm9rZSw2KQ0KLQlKU19TVEFUSUNfR0xPQkFMX0ZVTl9FTlRSWShBRlBlcmNlbnRfRm9ybWF0LDIpDQotCUpTX1NUQVRJQ19HTE9CQUxfRlVOX0VOVFJZKEFGUGVyY2VudF9LZXlzdHJva2UsMikNCi0JSlNfU1RBVElDX0dMT0JBTF9GVU5fRU5UUlkoQUZEYXRlX0Zvcm1hdEV4LDEpDQotCUpTX1NUQVRJQ19HTE9CQUxfRlVOX0VOVFJZKEFGRGF0ZV9LZXlzdHJva2VFeCwxKQ0KLQlKU19TVEFUSUNfR0xPQkFMX0ZVTl9FTlRSWShBRkRhdGVfRm9ybWF0LDEpDQotCUpTX1NUQVRJQ19HTE9CQUxfRlVOX0VOVFJZKEFGRGF0ZV9LZXlzdHJva2UsMSkNCi0JSlNfU1RBVElDX0dMT0JBTF9GVU5fRU5UUlkoQUZUaW1lX0Zvcm1hdEV4LDEpDQotCUpTX1NUQVRJQ19HTE9CQUxfRlVOX0VOVFJZKEFGVGltZV9LZXlzdHJva2VFeCwxKQ0KLQlKU19TVEFUSUNfR0xPQkFMX0ZVTl9FTlRSWShBRlRpbWVfRm9ybWF0LDEpDQotCUpTX1NUQVRJQ19HTE9CQUxfRlVOX0VOVFJZKEFGVGltZV9LZXlzdHJva2UsMSkNCi0JSlNfU1RBVElDX0dMT0JBTF9GVU5fRU5UUlkoQUZTcGVjaWFsX0Zvcm1hdCwxKQ0KLQlKU19TVEFUSUNfR0xPQkFMX0ZVTl9FTlRSWShBRlNwZWNpYWxfS2V5c3Ryb2tlLDEpDQotCUpTX1NUQVRJQ19HTE9CQUxfRlVOX0VOVFJZKEFGU3BlY2lhbF9LZXlzdHJva2VFeCwxKQ0KLQlKU19TVEFUSUNfR0xPQkFMX0ZVTl9FTlRSWShBRlNpbXBsZSwzKQ0KLQlKU19TVEFUSUNfR0xPQkFMX0ZVTl9FTlRSWShBRk1ha2VOdW1iZXIsMSkNCi0JSlNfU1RBVElDX0dMT0JBTF9GVU5fRU5UUlkoQUZTaW1wbGVfQ2FsY3VsYXRlLDIpDQotCUpTX1NUQVRJQ19HTE9CQUxfRlVOX0VOVFJZKEFGUmFuZ2VfVmFsaWRhdGUsNCkNCi0JSlNfU1RBVElDX0dMT0JBTF9GVU5fRU5UUlkoQUZNZXJnZUNoYW5nZSwxKQ0KLQlKU19TVEFUSUNfR0xPQkFMX0ZVTl9FTlRSWShBRlBhcnNlRGF0ZUV4LDIpDQotCUpTX1NUQVRJQ19HTE9CQUxfRlVOX0VOVFJZKEFGRXh0cmFjdE51bXMsMSkNCi1FTkRfSlNfU1RBVElDX0dMT0JBTF9GVU4oKQ0KLQ0KLUlNUExFTUVOVF9KU19TVEFUSUNfR0xPQkFMX0ZVTihDSlNfUHVibGljTWV0aG9kcykNCi0NCi1zdHJ1Y3Qgc3RydV9UYkNvbnZlcnQNCi17DQotCUZYX0xQQ1NUUiBscHN6SlNNYXJrOw0KLQlGWF9MUENTVFIgbHBzekNwcE1hcms7DQotfTsNCi0NCi1zdGF0aWMgY29uc3Qgc3RydV9UYkNvbnZlcnQgZmNUYWJsZVtdID0geyJtbW1tIiwiJUIiLA0KLQkibW1tIiwgIiViIiwNCi0JIm1tIiwgICIlbSIsDQotCS8vIm0iDQotCSJkZGRkIiwiJUEiLA0KLQkiZGRkIiwgIiVhIiwNCi0JImRkIiwgICIlZCIsDQotCS8vImQiLCAgICIldyIsDQotCSJ5eXl5IiwiJVkiLA0KLQkieXkiLCAgIiV5IiwNCi0JIkhIIiwgICIlSCIsDQotCS8vIkgiDQotCSJoaCIsICAiJUkiLA0KLQkvLyJoIg0KLQkiTU0iLCAgIiVNIiwNCi0JLy8iTSINCi0JInNzIiwgICIlUyIsDQotCS8vInMNCi0JInR0IiwgICIlcCINCi0JLy8idCINCi19Ow0KLQ0KLXN0YXRpYyBGWF9MUENXU1RSIG1vbnRoc1tdID0NCi17DQotCShGWF9MUENXU1RSKUwiSmFuIiwgKEZYX0xQQ1dTVFIpTCJGZWIiLCAoRlhfTFBDV1NUUilMIk1hciIsIChGWF9MUENXU1RSKUwiQXByIiwgKEZYX0xQQ1dTVFIpTCJNYXkiLCAoRlhfTFBDV1NUUilMIkp1biIsIChGWF9MUENXU1RSKUwiSnVsIiwgKEZYX0xQQ1dTVFIpTCJBdWciLCAoRlhfTFBDV1NUUilMIlNlcCIsIChGWF9MUENXU1RSKUwiT2N0IiwgKEZYX0xQQ1dTVFIpTCJOb3YiLCAoRlhfTFBDV1NUUilMIkRlYyINCi19Ow0KLQ0KLXN0YXRpYyBGWF9MUENXU1RSIGZ1bGxtb250aHNbXSA9IA0KLXsgDQotCShGWF9MUENXU1RSKUwiSmFudWFyeSIsIChGWF9MUENXU1RSKUwiRmVicnVhcnkiLCAoRlhfTFBDV1NUUilMIk1hcmNoIiwgKEZYX0xQQ1dTVFIpTCJBcHJpbCIsIChGWF9MUENXU1RSKUwiTWF5IiwgKEZYX0xQQ1dTVFIpTCJKdW5lIiwgKEZYX0xQQ1dTVFIpTCJKdWx5IiwgKEZYX0xQQ1dTVFIpTCJBdWd1c3QiLCAoRlhfTFBDV1NUUilMIlNlcHRlbWJlciIsIChGWF9MUENXU1RSKUwiT2N0b2JlciIsIChGWF9MUENXU1RSKUwiTm92ZW1iZXIiLCAoRlhfTFBDV1NUUilMIkRlY2VtYmVyIiANCi19Ow0KLQ0KLUZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6OklzTnVtYmVyKEZYX0xQQ1dTVFIgc3RyaW5nKQ0KLXsNCi0JQ0ZYX1dpZGVTdHJpbmcgc1RyaW0gPSBTdHJUcmltKHN0cmluZyk7DQotCUZYX0xQQ1dTVFIgcFRyaW0gPSBzVHJpbTsNCi0JRlhfTFBDV1NUUiBwID0gcFRyaW07DQotDQotDQotCUZYX0JPT0wgYkRvdCA9IEZBTFNFOw0KLQlGWF9CT09MIGJLWEpTID0gRkFMU0U7DQotDQotCXdjaGFyX3QgYzsNCi0Jd2hpbGUgKChjID0gKnApKQ0KLQl7DQotCQlpZiAoYyA9PSAnLicgfHwgYyA9PSAnLCcpDQotCQl7DQotCQkJaWYgKGJEb3QpIHJldHVybiBGQUxTRTsNCi0JCQliRG90ID0gVFJVRTsNCi0JCX0NCi0JCWVsc2UgaWYgKGMgPT0gJy0nIHx8IGMgPT0gJysnKQ0KLQkJew0KLQkJCWlmIChwICE9IHBUcmltKQ0KLQkJCQlyZXR1cm4gRkFMU0U7DQotCQl9DQotCQllbHNlIGlmIChjID09ICdlJyB8fCBjID09ICdFJykNCi0JCXsNCi0JCQlpZiAoYktYSlMpIHJldHVybiBGQUxTRTsNCi0NCi0JCQlwKys7DQotCQkJYyA9ICpwOw0KLQkJCWlmIChjID09ICcrJyB8fCBjID09ICctJykNCi0JCQl7DQotCQkJCWJLWEpTID0gVFJVRTsNCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJcmV0dXJuIEZBTFNFOw0KLQkJCX0NCi0JCX0NCi0JCWVsc2UgaWYgKCFJc0RpZ2l0KGMpKQ0KLQkJew0KLQkJCXJldHVybiBGQUxTRTsNCi0JCX0NCi0JCXArKzsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBDSlNfUHVibGljTWV0aG9kczo6SXNEaWdpdCh3Y2hhcl90IGNoKQ0KLXsNCi0JcmV0dXJuIChjaCA+PSBMJzAnICYmIGNoIDw9IEwnOScpOw0KLX0NCi0NCi1GWF9CT09MIENKU19QdWJsaWNNZXRob2RzOjpJc0RpZ2l0KGNoYXIgY2gpDQotew0KLQlyZXR1cm4gKGNoID49ICcwJyAmJiBjaCA8PSAnOScpOw0KLX0NCi0NCi1GWF9CT09MIENKU19QdWJsaWNNZXRob2RzOjpJc0FscGhhYmV0aWMod2NoYXJfdCBjaCkNCi17DQotCXJldHVybiAoKGNoID49IEwnYScgJiYgY2ggPD0gTCd6JykgfHwgKGNoID49IEwnQScgJiYgY2ggPD0gTCdaJykpOw0KLX0NCi0NCi1GWF9CT09MIENKU19QdWJsaWNNZXRob2RzOjpJc0FscGhhTnVtZXJpYyh3Y2hhcl90IGNoKQ0KLXsNCi0JcmV0dXJuIChJc0RpZ2l0KGNoKSB8fCBJc0FscGhhYmV0aWMoY2gpKTsNCi19DQotDQotRlhfQk9PTCBDSlNfUHVibGljTWV0aG9kczo6bWFza1NhdGlzZmllZCh3Y2hhcl90IGNfQ2hhbmdlLHdjaGFyX3QgY19NYXNrKQ0KLXsNCi0Jc3dpdGNoIChjX01hc2spDQotCXsNCi0JY2FzZSBMJzknOg0KLSAgICAgICAgcmV0dXJuIElzRGlnaXQoY19DaGFuZ2UpOwkJDQotICAgIGNhc2UgTCdBJzoNCi0gICAgICAgIHJldHVybiBJc0FscGhhYmV0aWMoY19DaGFuZ2UpOwkJDQotICAgIGNhc2UgTCdPJzoNCi0gICAgICAgIHJldHVybiBJc0FscGhhTnVtZXJpYyhjX0NoYW5nZSk7CQkNCi0gICAgY2FzZSBMJ1gnOg0KLSAgICAgICAgcmV0dXJuIFRSVUU7CQkNCi0JZGVmYXVsdDoNCi0gICAgICAgIHJldHVybiAoY19DaGFuZ2UgPT0gY19NYXNrKTsNCi0JfQ0KLX0NCi0NCi1GWF9CT09MIENKU19QdWJsaWNNZXRob2RzOjppc1Jlc2VydmVkTWFza0NoYXIod2NoYXJfdCBjaCkNCi17DQotCXJldHVybiBjaCA9PSBMJzknIHx8IGNoID09IEwnQScgfHwgY2ggPT0gTCdPJyB8fCBjaCA9PSBMJ1gnOw0KLX0NCi0NCi1kb3VibGUgQ0pTX1B1YmxpY01ldGhvZHM6OkFGX1NpbXBsZShGWF9MUENXU1RSIHNGdWN0aW9uLCBkb3VibGUgZFZhbHVlMSwgZG91YmxlIGRWYWx1ZTIpDQotew0KLQlpZiAoRlhTWVNfd2NzaWNtcChzRnVjdGlvbiwoRlhfTFBDV1NUUilMIkFWRyIpID09IDAgfHwgRlhTWVNfd2NzaWNtcChzRnVjdGlvbiwoRlhfTFBDV1NUUilMIlNVTSIpID09IDApDQotCXsNCi0JCXJldHVybiBkVmFsdWUxICsgZFZhbHVlMjsNCi0JfQ0KLQllbHNlIGlmIChGWFNZU193Y3NpY21wKHNGdWN0aW9uLCAoRlhfTFBDV1NUUilMIlBSRCIpID09IDApDQotCXsNCi0JCXJldHVybiBkVmFsdWUxICogZFZhbHVlMjsNCi0JfQ0KLQllbHNlIGlmIChGWFNZU193Y3NpY21wKHNGdWN0aW9uLChGWF9MUENXU1RSKUwiTUlOIikgPT0gMCkNCi0Jew0KLQkJcmV0dXJuIEZYX01JTihkVmFsdWUxLCBkVmFsdWUyKTsNCi0JfQ0KLQllbHNlIGlmIChGWFNZU193Y3NpY21wKHNGdWN0aW9uLChGWF9MUENXU1RSKUwiTUFYIikgPT0gMCkNCi0Jew0KLQkJcmV0dXJuIEZYX01BWChkVmFsdWUxLCBkVmFsdWUyKTsNCi0JfQ0KLQ0KLQlyZXR1cm4gZFZhbHVlMTsNCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgQ0pTX1B1YmxpY01ldGhvZHM6OlN0ckxUcmltKEZYX0xQQ1dTVFIgcFN0cikNCi17DQotCXdoaWxlICgqcFN0ciAmJiAqcFN0ciA9PSBMJyAnKSBwU3RyKys7DQotDQotCXJldHVybiBwU3RyOw0KLX0NCi0NCi1DRlhfV2lkZVN0cmluZyBDSlNfUHVibGljTWV0aG9kczo6U3RyUlRyaW0oRlhfTFBDV1NUUiBwU3RyKQ0KLXsNCi0JRlhfTFBDV1NUUiBwID0gcFN0cjsNCi0NCi0Jd2hpbGUgKCpwKSBwKys7DQotCXAtLTsNCi0JaWYgKHAgPj0gcFN0cikNCi0JewkJDQotCQl3aGlsZSAoKnAgJiYgKnAgPT0gTCcgJykgcC0tOw0KLQkJcCsrOw0KLQkJcmV0dXJuIENGWF9XaWRlU3RyaW5nKHBTdHIscC1wU3RyKTsNCi0JfQ0KLQlyZXR1cm4gTCIiOw0KLX0NCi0NCi1DRlhfV2lkZVN0cmluZyBDSlNfUHVibGljTWV0aG9kczo6U3RyVHJpbShGWF9MUENXU1RSIHBTdHIpDQotew0KLQlyZXR1cm4gU3RyUlRyaW0oU3RyTFRyaW0ocFN0cikpOw0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDSlNfUHVibGljTWV0aG9kczo6U3RyTFRyaW0oRlhfTFBDU1RSIHBTdHIpDQotew0KLQl3aGlsZSAoKnBTdHIgJiYgKnBTdHIgPT0gJyAnKSBwU3RyKys7DQotDQotICAgIHJldHVybiBwU3RyOw0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDSlNfUHVibGljTWV0aG9kczo6U3RyUlRyaW0oRlhfTFBDU1RSIHBTdHIpDQotew0KLQlGWF9MUENTVFIgcCA9IHBTdHI7DQotDQotCXdoaWxlICgqcCkgcCsrOw0KLQlwLS07DQotCWlmIChwID49IHBTdHIpDQotCXsJCQ0KLQkJd2hpbGUgKCpwICYmICpwID09ICcgJykgcC0tOw0KLQkJcCsrOw0KLQkJcmV0dXJuIENGWF9CeXRlU3RyaW5nKHBTdHIscC1wU3RyKTsNCi0JfQ0KLQlyZXR1cm4gIiI7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENKU19QdWJsaWNNZXRob2RzOjpTdHJUcmltKEZYX0xQQ1NUUiBwU3RyKQ0KLXsNCi0JcmV0dXJuIFN0clJUcmltKFN0ckxUcmltKHBTdHIpKTsNCi19DQotDQotZG91YmxlIENKU19QdWJsaWNNZXRob2RzOjpQYXJzZU51bWJlcihGWF9MUENXU1RSIHN3U291cmNlLCBGWF9CT09MJiBiQWxsRGlnaXRzLCBGWF9CT09MJiBiRG90LCBGWF9CT09MJiBiU2lnbiwgRlhfQk9PTCYgYktYSlMpDQotew0KLQliRG90ID0gRkFMU0U7DQotCWJTaWduID0gRkFMU0U7DQotCWJLWEpTID0gRkFMU0U7DQotDQotCUZYX0JPT0wgYkRpZ2l0RXhpc3QgPSBGQUxTRTsNCi0NCi0JRlhfTFBDV1NUUiBwID0gc3dTb3VyY2U7DQotCXdjaGFyX3QgYzsNCi0NCi0JRlhfTFBDV1NUUiBwU3RhcnQgPSBOVUxMOw0KLQlGWF9MUENXU1RSIHBFbmQgPSBOVUxMOw0KLQ0KLQl3aGlsZSAoKGMgPSAqcCkpDQotCXsNCi0JCWlmICghcFN0YXJ0ICYmIGMgIT0gTCcgJykNCi0JCXsNCi0JCQlwU3RhcnQgPSBwOw0KLQkJfQ0KLQ0KLQkJcEVuZCA9IHA7DQotCQlwKys7DQotCX0NCi0NCi0JaWYgKCFwU3RhcnQpDQotCXsNCi0JCWJBbGxEaWdpdHMgPSBGQUxTRTsNCi0JCXJldHVybiAwOw0KLQl9DQotDQotCXdoaWxlIChwRW5kICE9IHBTdGFydCkNCi0Jew0KLQkJaWYgKCpwRW5kID09IEwnICcpDQotCQkJcEVuZCAtLTsNCi0JCWVsc2UNCi0JCQlicmVhazsNCi0JfQ0KLQ0KLQlkb3VibGUgZFJldCA9IDA7DQotCXAgPSBwU3RhcnQ7DQotCWJBbGxEaWdpdHMgPSBUUlVFOw0KLQlDRlhfV2lkZVN0cmluZyBzd0RpZ2l0czsNCi0NCi0Jd2hpbGUgKHAgPD0gcEVuZCkNCi0JewkNCi0JCWMgPSAqcDsNCi0NCi0JCWlmIChJc0RpZ2l0KGMpKQ0KLQkJew0KLQkJCXN3RGlnaXRzICs9IGM7DQotCQkJYkRpZ2l0RXhpc3QgPSBUUlVFOw0KLQkJfQ0KLQkJZWxzZSANCi0JCXsNCi0JCQlzd2l0Y2ggKGMpDQotCQkJew0KLQkJCWNhc2UgTCcgJzoNCi0JCQkJYkFsbERpZ2l0cyA9IEZBTFNFOw0KLQkJCQlicmVhazsNCi0JCQljYXNlIEwnLic6DQotCQkJY2FzZSBMJywnOg0KLQkJCQlpZiAoIWJEb3QpDQotCQkJCXsNCi0JCQkJCWlmIChiRGlnaXRFeGlzdCkNCi0JCQkJCXsNCi0JCQkJCQlzd0RpZ2l0cyArPSBMJy4nOw0KLQkJCQkJfQ0KLQkJCQkJZWxzZQ0KLQkJCQkJew0KLQkJCQkJCXN3RGlnaXRzICs9IEwnMCc7DQotCQkJCQkJc3dEaWdpdHMgKz0gTCcuJzsNCi0JCQkJCQliRGlnaXRFeGlzdCA9IFRSVUU7DQotCQkJCQl9DQotDQotCQkJCQliRG90ID0gVFJVRTsNCi0JCQkJCWJyZWFrOw0KLQkJCQl9DQotCQkJY2FzZSAnZSc6DQotCQkJY2FzZSAnRSc6DQotCQkJCWlmICghYktYSlMpDQotCQkJCXsNCi0JCQkJCXArKzsNCi0JCQkJCWMgPSAqcDsNCi0JCQkJCWlmIChjID09ICcrJyB8fCBjID09ICctJykNCi0JCQkJCXsNCi0JCQkJCQliS1hKUyA9IFRSVUU7DQotCQkJCQkJc3dEaWdpdHMgKz0gJ2UnOw0KLQkJCQkJCXN3RGlnaXRzICs9IGM7DQotCQkJCQl9DQotCQkJCQlicmVhazsNCi0JCQkJfQ0KLQkJCWNhc2UgTCctJzoNCi0JCQkJaWYgKCFiRGlnaXRFeGlzdCAmJiAhYlNpZ24pDQotCQkJCXsNCi0JCQkJCXN3RGlnaXRzICs9IGM7DQotCQkJCQliU2lnbiA9IFRSVUU7DQotCQkJCQlicmVhazsNCi0JCQkJfQ0KLQkJCWRlZmF1bHQ6DQotCQkJCWJBbGxEaWdpdHMgPSBGQUxTRTsNCi0NCi0JCQkJaWYgKHAgIT0gcFN0YXJ0ICYmICFiRG90ICYmIGJEaWdpdEV4aXN0KQ0KLQkJCQl7DQotCQkJCQlzd0RpZ2l0cyArPSBMJy4nOw0KLQkJCQkJYkRvdCA9IFRSVUU7DQotCQkJCX0NCi0JCQkJZWxzZQ0KLQkJCQl7DQotCQkJCQliRG90ID0gRkFMU0U7DQotCQkJCQliRGlnaXRFeGlzdCA9IEZBTFNFOw0KLQkJCQkJc3dEaWdpdHMgPSBMIiI7DQotCQkJCX0NCi0JCQkJYnJlYWs7DQotCQkJfQ0KLQkJfQ0KLQ0KLQkJcCsrOw0KLQl9DQotDQotCWlmIChzd0RpZ2l0cy5HZXRMZW5ndGgoKSA+IDAgJiYgc3dEaWdpdHMuR2V0TGVuZ3RoKCkgPCAxNykNCi0Jew0KLQkJQ0ZYX0J5dGVTdHJpbmcgc0RpZ2l0cyA9IHN3RGlnaXRzLlVURjhFbmNvZGUoKTsNCi0NCi0JCWlmIChiS1hKUykNCi0JCXsNCi0JCQlkUmV0ID0gYXRvZihzRGlnaXRzKTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlpZiAoYkRvdCkNCi0JCQl7DQotCQkJCWNoYXIqIHBTdG9wU3RyaW5nOw0KLQkJCQlkUmV0ID0gOjpzdHJ0b2Qoc0RpZ2l0cywgJnBTdG9wU3RyaW5nKTsNCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJZFJldCA9IGF0b2woc0RpZ2l0cyk7DQotCQkJfQ0KLQkJfQ0KLQ0KLQl9DQotDQotCXJldHVybiBkUmV0Ow0KLX0NCi0NCi1kb3VibGUgQ0pTX1B1YmxpY01ldGhvZHM6OlBhcnNlU3RyaW5nVG9OdW1iZXIoRlhfTFBDV1NUUiBzd1NvdXJjZSkNCi17DQotCUZYX0JPT0wgYkFsbERpZ2l0cyA9IEZBTFNFOw0KLQlGWF9CT09MIGJEb3QgPSBGQUxTRTsNCi0JRlhfQk9PTCBiU2lnbiA9IEZBTFNFOw0KLQlGWF9CT09MIGJLWEpTID0gRkFMU0U7DQotDQotCXJldHVybiBQYXJzZU51bWJlcihzd1NvdXJjZSwgYkFsbERpZ2l0cywgYkRvdCwgYlNpZ24sIGJLWEpTKTsNCi19DQotDQotRlhfQk9PTAlDSlNfUHVibGljTWV0aG9kczo6Q29udmVydFN0cmluZ1RvTnVtYmVyKEZYX0xQQ1dTVFIgc3dTb3VyY2UsIGRvdWJsZSAmIGRSZXQsIEZYX0JPT0wgJiBiRG90KQ0KLXsNCi0JRlhfQk9PTCBiQWxsRGlnaXRzID0gRkFMU0U7DQotCUZYX0JPT0wgYlNpZ24gPSBGQUxTRTsNCi0JRlhfQk9PTCBiS1hKUyA9IEZBTFNFOw0KLQ0KLQlkUmV0ID0gUGFyc2VOdW1iZXIoc3dTb3VyY2UsIGJBbGxEaWdpdHMsIGJEb3QsIGJTaWduLCBiS1hKUyk7DQotDQotCXJldHVybiBiQWxsRGlnaXRzOw0KLX0NCi0NCi1DSlNfQXJyYXkgQ0pTX1B1YmxpY01ldGhvZHM6OkFGX01ha2VBcnJheUZyb21MaXN0KHY4OjpJc29sYXRlKiBpc29sYXRlLCBDSlNfVmFsdWUgdmFsKQ0KLXsNCi0JQ0pTX0FycmF5IFN0ckFycmF5KGlzb2xhdGUpOw0KLQlpZih2YWwuSXNBcnJheU9iamVjdCgpKQ0KLQl7DQotCQl2YWwuQ29udmVydFRvQXJyYXkoU3RyQXJyYXkpOw0KLQkJcmV0dXJuIFN0ckFycmF5Ow0KLQl9DQotCUNGWF9XaWRlU3RyaW5nIHdzU3RyID0gdmFsLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7DQotCUNGWF9CeXRlU3RyaW5nIHQgPSBDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUod3NTdHIpOw0KLQljb25zdCBjaGFyICogcCA9IChjb25zdCBjaGFyICopdDsNCi0NCi0NCi0JaW50IGNoID0gJywnIDsNCi0JaW50IG5JbmRleCA9IDA7DQotDQotCXdoaWxlICgqcCkNCi0Jew0KLQkJY29uc3QgY2hhciAqIHBUZW1wID0gc3RyY2hyKHAsIGNoKTsNCi0JCWlmIChwVGVtcCA9PSBOVUxMKQ0KLQkJew0KLQkJCVN0ckFycmF5LlNldEVsZW1lbnQobkluZGV4LCBDSlNfVmFsdWUoaXNvbGF0ZSwoRlhfTFBDU1RSKVN0clRyaW0ocCkpKTsNCi0JCQlicmVhazsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQljaGFyICogcFN1YiA9IG5ldyBjaGFyW3BUZW1wIC0gcCArIDFdOw0KLQkJCXN0cm5jcHkocFN1YiwgcCwgcFRlbXAgLSBwKTsNCi0JCQkqKHBTdWIgKyAocFRlbXAgLSBwKSkgPSAnXDAnOw0KLQ0KLQkJCVN0ckFycmF5LlNldEVsZW1lbnQobkluZGV4LCBDSlNfVmFsdWUoaXNvbGF0ZSwoRlhfTFBDU1RSKVN0clRyaW0ocFN1YikpKTsNCi0JCQlkZWxldGUgW11wU3ViOw0KLQkJCQ0KLQkJCW5JbmRleCArKzsNCi0JCQlwID0gKytwVGVtcDsNCi0JCX0NCi0JCQ0KLQl9DQotCXJldHVybiBTdHJBcnJheTsNCi19DQotDQotaW50IENKU19QdWJsaWNNZXRob2RzOjpQYXJzZVN0cmluZ0ludGVnZXIoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cmluZyxpbnQgblN0YXJ0LGludCYgblNraXAsIGludCBuTWF4U3RlcCkNCi17DQotCWludCBuUmV0ID0gMDsNCi0JblNraXAgPSAwOw0KLQlmb3IgKGludCBpPW5TdGFydCwgc3o9c3RyaW5nLkdldExlbmd0aCgpOyBpIDwgc3o7IGkrKykNCi0Jew0KLQkJaWYgKGktblN0YXJ0ID4gMTApDQotCQkJYnJlYWs7DQotDQotCQlGWF9XQ0hBUiBjID0gc3RyaW5nLkdldEF0KGkpOw0KLQkJaWYgKElzRGlnaXQoKHdjaGFyX3QpYykpDQotCQl7DQotCQkJblJldCA9IG5SZXQgKiAxMCArIChjIC0gJzAnKTsNCi0JCQluU2tpcCA9IGkgLSBuU3RhcnQgKyAxOw0KLQkJCWlmIChuU2tpcCA+PSBuTWF4U3RlcCkgDQotCQkJCWJyZWFrOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJCWJyZWFrOw0KLQl9DQotDQotCXJldHVybiBuUmV0Ow0KLX0NCi0NCi1DRlhfV2lkZVN0cmluZyBDSlNfUHVibGljTWV0aG9kczo6UGFyc2VTdHJpbmdTdHJpbmcoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cmluZywgaW50IG5TdGFydCwgaW50JiBuU2tpcCkNCi17DQotCUNGWF9XaWRlU3RyaW5nIHN3UmV0Ow0KLQluU2tpcCA9IDA7DQotCWZvciAoaW50IGk9blN0YXJ0LCBzej1zdHJpbmcuR2V0TGVuZ3RoKCk7IGkgPCBzejsgaSsrKQ0KLQl7DQotCQlGWF9XQ0hBUiBjID0gc3RyaW5nLkdldEF0KGkpOw0KLQkJaWYgKChjID49IEwnYScgJiYgYyA8PSBMJ3onKSB8fCAoYyA+PSBMJ0EnICYmIGMgPD0gTCdaJykpDQotCQl7DQotCQkJc3dSZXQgKz0gYzsNCi0JCQluU2tpcCA9IGkgLSBuU3RhcnQgKyAxOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJCWJyZWFrOw0KLQl9DQotDQotCXJldHVybiBzd1JldDsNCi19DQotDQotZG91YmxlIENKU19QdWJsaWNNZXRob2RzOjpQYXJzZU5vcm1hbERhdGUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJiB2YWx1ZSwgRlhfQk9PTCYgYldyb25nRm9ybWF0KQ0KLXsNCi0JZG91YmxlIGR0ID0gSlNfR2V0RGF0ZVRpbWUoKTsNCi0NCi0JaW50IG5ZZWFyID0gSlNfR2V0WWVhckZyb21UaW1lKGR0KTsNCi0JaW50IG5Nb250aCA9IEpTX0dldE1vbnRoRnJvbVRpbWUoZHQpICsgMTsNCi0JaW50IG5EYXkgPSBKU19HZXREYXlGcm9tVGltZShkdCk7DQotCWludCBuSG91ciA9IEpTX0dldEhvdXJGcm9tVGltZShkdCk7DQotCWludCBuTWluID0gSlNfR2V0TWluRnJvbVRpbWUoZHQpOw0KLQlpbnQgblNlYyA9IEpTX0dldFNlY0Zyb21UaW1lKGR0KTsNCi0NCi0JaW50IG51bWJlclszXTsNCi0NCi0JaW50IG5Ta2lwID0gMDsNCi0JaW50IG5MZW4gPSB2YWx1ZS5HZXRMZW5ndGgoKTsNCi0JaW50IG5JbmRleCA9IDA7DQotCWludCBpID0gMDsNCi0Jd2hpbGUgKGkgPCBuTGVuKQ0KLQl7DQotCQlpZiAobkluZGV4ID4gMikgYnJlYWs7DQotDQotCQlGWF9XQ0hBUiBjID0gdmFsdWUuR2V0QXQoaSk7DQotCQlpZiAoSXNEaWdpdCgod2NoYXJfdCljKSkNCi0JCXsNCi0JCQludW1iZXJbbkluZGV4KytdID0gUGFyc2VTdHJpbmdJbnRlZ2VyKHZhbHVlLCBpLCBuU2tpcCwgNCk7DQotCQkJaSArPSBuU2tpcDsJCQkNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlpICsrOw0KLQkJfQ0KLQl9DQotDQotCWlmIChuSW5kZXggPT0gMikNCi0Jew0KLQkJLy8gY2FzZTI6IG1vbnRoL2RheQ0KLQkJLy8gY2FzZTM6IGRheS9tb250aA0KLQkJaWYgKChudW1iZXJbMF0gPj0gMSAmJiBudW1iZXJbMF0gPD0gMTIpICYmIChudW1iZXJbMV0gPj0gMSAmJiBudW1iZXJbMV0gPD0gMzEpKQ0KLQkJew0KLQkJCW5Nb250aCA9IG51bWJlclswXTsNCi0JCQluRGF5ID0gbnVtYmVyWzFdOw0KLQkJfQ0KLQkJZWxzZSBpZiAoKG51bWJlclswXSA+PSAxICYmIG51bWJlclswXSA8PSAzMSkgJiYgKG51bWJlclsxXSA+PSAxICYmIG51bWJlclsxXSA8PSAxMikpDQotCQl7DQotCQkJbkRheSA9IG51bWJlclswXTsNCi0JCQluTW9udGggPSBudW1iZXJbMV07DQotCQl9DQotDQotCQliV3JvbmdGb3JtYXQgPSBGQUxTRTsNCi0JfQ0KLQllbHNlIGlmIChuSW5kZXggPT0gMykNCi0Jew0KLQkJLy8gY2FzZTE6IHllYXIvbW9udGgvZGF5DQotCQkvLyBjYXNlMjogbW9udGgvZGF5L3llYXINCi0JCS8vIGNhc2UzOiBkYXkvbW9udGgveWVhcg0KLQ0KLQkJaWYgKG51bWJlclswXSA+IDEyICYmIChudW1iZXJbMV0gPj0gMSAmJiBudW1iZXJbMV0gPD0gMTIpICYmIChudW1iZXJbMl0gPj0gMSAmJiBudW1iZXJbMl0gPD0gMzEpKQ0KLQkJew0KLQkJCW5ZZWFyID0gbnVtYmVyWzBdOw0KLQkJCW5Nb250aCA9IG51bWJlclsxXTsNCi0JCQluRGF5ID0gbnVtYmVyWzJdOw0KLQkJfQ0KLQkJZWxzZSBpZiAoKG51bWJlclswXSA+PSAxICYmIG51bWJlclswXSA8PSAxMikgJiYgKG51bWJlclsxXSA+PSAxICYmIG51bWJlclsxXSA8PSAzMSkgJiYgbnVtYmVyWzJdID4gMzEpDQotCQl7DQotCQkJbk1vbnRoID0gbnVtYmVyWzBdOw0KLQkJCW5EYXkgPSBudW1iZXJbMV07DQotCQkJblllYXIgPSBudW1iZXJbMl07DQotCQl9DQotCQllbHNlIGlmICgobnVtYmVyWzBdID49IDEgJiYgbnVtYmVyWzBdIDw9IDMxKSAmJiAobnVtYmVyWzFdID49IDEgJiYgbnVtYmVyWzFdIDw9IDEyKSAmJiBudW1iZXJbMl0gPiAzMSkNCi0JCXsNCi0JCQluRGF5ID0gbnVtYmVyWzBdOw0KLQkJCW5Nb250aCA9IG51bWJlclsxXTsNCi0JCQluWWVhciA9IG51bWJlclsyXTsNCi0JCX0NCi0NCi0JCWJXcm9uZ0Zvcm1hdCA9IEZBTFNFOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJYldyb25nRm9ybWF0ID0gVFJVRTsNCi0JCXJldHVybiBkdDsNCi0JfQ0KLQ0KLQlDRlhfV2lkZVN0cmluZyBzd1RlbXA7DQotCXN3VGVtcC5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlZC8lZC8lZCAlZDolZDolZCIsbk1vbnRoLG5EYXksblllYXIsbkhvdXIsbk1pbixuU2VjKTsNCi0JcmV0dXJuIEpTX0RhdGVQYXJzZShzd1RlbXApOw0KLX0NCi0NCi1kb3VibGUgQ0pTX1B1YmxpY01ldGhvZHM6Ok1ha2VSZWd1bGFyRGF0ZShjb25zdCBDRlhfV2lkZVN0cmluZyAmIHZhbHVlLCBjb25zdCBDRlhfV2lkZVN0cmluZyAmIGZvcm1hdCwgRlhfQk9PTCYgYldyb25nRm9ybWF0KQ0KLXsNCi0JZG91YmxlIGR0ID0gSlNfR2V0RGF0ZVRpbWUoKTsNCi0NCi0JaWYgKGZvcm1hdC5Jc0VtcHR5KCkgfHwgdmFsdWUuSXNFbXB0eSgpKQ0KLQkJcmV0dXJuIGR0Ow0KLQ0KLQlpbnQgblllYXIgPSBKU19HZXRZZWFyRnJvbVRpbWUoZHQpOw0KLQlpbnQgbk1vbnRoID0gSlNfR2V0TW9udGhGcm9tVGltZShkdCkgKyAxOw0KLQlpbnQgbkRheSA9IEpTX0dldERheUZyb21UaW1lKGR0KTsNCi0JaW50IG5Ib3VyID0gSlNfR2V0SG91ckZyb21UaW1lKGR0KTsNCi0JaW50IG5NaW4gPSBKU19HZXRNaW5Gcm9tVGltZShkdCk7DQotCWludCBuU2VjID0gSlNfR2V0U2VjRnJvbVRpbWUoZHQpOw0KLQ0KLQlpbnQgblllYXJTdWIgPSA5OTsgLy9uWWVhciAtIDIwMDA7DQotDQotCUZYX0JPT0wgYlBtID0gRkFMU0U7DQotCUZYX0JPT0wgYkV4aXQgPSBGQUxTRTsNCi0JYldyb25nRm9ybWF0ID0gRkFMU0U7DQotCQ0KLQlpbnQgaT0wOw0KLQlpbnQgaj0wOw0KLQ0KLQl3aGlsZSAoaSA8IGZvcm1hdC5HZXRMZW5ndGgoKSkNCi0Jew0KLQkJaWYgKGJFeGl0KSBicmVhazsNCi0NCi0JCUZYX1dDSEFSIGMgPSBmb3JtYXQuR2V0QXQoaSk7CQkNCi0JCXN3aXRjaCAoYykNCi0JCXsNCi0JCQljYXNlICc6JzoNCi0JCQljYXNlICcuJzoNCi0JCQljYXNlICctJzoNCi0JCQljYXNlICdcXCc6DQotCQkJY2FzZSAnLyc6DQotCQkJCWkrKzsNCi0JCQkJaisrOw0KLQkJCQlicmVhazsNCi0JCQkJDQotCQkJY2FzZSAneSc6DQotCQkJY2FzZSAnbSc6DQotCQkJY2FzZSAnZCc6DQotCQkJY2FzZSAnSCc6DQotCQkJY2FzZSAnaCc6DQotCQkJY2FzZSAnTSc6DQotCQkJY2FzZSAncyc6DQotCQkJY2FzZSAndCc6DQotCQkJCXsNCi0JCQkJCWludCBvbGRqID0gajsNCi0JCQkJCWludCBuU2tpcCA9IDA7DQotDQotCQkJCQlpZiAoZm9ybWF0LkdldEF0KGkrMSkgIT0gYykNCi0JCQkJCXsNCi0JCQkJCQlzd2l0Y2ggKGMpDQotCQkJCQkJew0KLQkJCQkJCQljYXNlICd5JzoNCi0JCQkJCQkJCWkrKzsNCi0JCQkJCQkJCWorKzsNCi0JCQkJCQkJCWJyZWFrOw0KLQkJCQkJCQljYXNlICdtJzoNCi0JCQkJCQkJCW5Nb250aCA9IFBhcnNlU3RyaW5nSW50ZWdlcih2YWx1ZSwgaiwgblNraXAsIDIpOw0KLQkJCQkJCQkJaSsrOw0KLQkJCQkJCQkJaiArPSBuU2tpcDsNCi0JCQkJCQkJCWJyZWFrOw0KLQkJCQkJCQljYXNlICdkJzoNCi0JCQkJCQkJCW5EYXkgPSBQYXJzZVN0cmluZ0ludGVnZXIodmFsdWUsIGosIG5Ta2lwLCAyKTsNCi0JCQkJCQkJCWkrKzsNCi0JCQkJCQkJCWogKz0gblNraXA7DQotCQkJCQkJCQlicmVhazsNCi0JCQkJCQkJY2FzZSAnSCc6DQotCQkJCQkJCQluSG91ciA9IFBhcnNlU3RyaW5nSW50ZWdlcih2YWx1ZSwgaiwgblNraXAsIDIpOw0KLQkJCQkJCQkJaSsrOw0KLQkJCQkJCQkJaiArPSBuU2tpcDsNCi0JCQkJCQkJCWJyZWFrOw0KLQkJCQkJCQljYXNlICdoJzoNCi0JCQkJCQkJCW5Ib3VyID0gUGFyc2VTdHJpbmdJbnRlZ2VyKHZhbHVlLCBqLCBuU2tpcCwgMik7DQotCQkJCQkJCQlpKys7DQotCQkJCQkJCQlqICs9IG5Ta2lwOw0KLQkJCQkJCQkJYnJlYWs7DQotCQkJCQkJCWNhc2UgJ00nOg0KLQkJCQkJCQkJbk1pbiA9IFBhcnNlU3RyaW5nSW50ZWdlcih2YWx1ZSwgaiwgblNraXAsIDIpOw0KLQkJCQkJCQkJaSsrOw0KLQkJCQkJCQkJaiArPSBuU2tpcDsNCi0JCQkJCQkJCWJyZWFrOw0KLQkJCQkJCQljYXNlICdzJzoNCi0JCQkJCQkJCW5TZWMgPSBQYXJzZVN0cmluZ0ludGVnZXIodmFsdWUsIGosIG5Ta2lwLCAyKTsNCi0JCQkJCQkJCWkrKzsNCi0JCQkJCQkJCWogKz0gblNraXA7DQotCQkJCQkJCQlicmVhazsNCi0JCQkJCQkJY2FzZSAndCc6DQotCQkJCQkJCQliUG0gPSB2YWx1ZS5HZXRBdChpKSA9PSAncCc7DQotCQkJCQkJCQlpKys7DQotCQkJCQkJCQlqKys7DQotCQkJCQkJCQlicmVhazsNCi0JCQkJCQl9CQkJCQkNCi0JCQkJCX0NCi0JCQkJCWVsc2UgaWYgKGZvcm1hdC5HZXRBdChpKzEpID09IGMgJiYgZm9ybWF0LkdldEF0KGkrMikgIT0gYykNCi0JCQkJCXsNCi0JCQkJCQlzd2l0Y2ggKGMpDQotCQkJCQkJew0KLQkJCQkJCQljYXNlICd5JzoNCi0JCQkJCQkJCW5ZZWFyID0gUGFyc2VTdHJpbmdJbnRlZ2VyKHZhbHVlLCBqLCBuU2tpcCwgNCk7DQotCQkJCQkJCQlpICs9IDI7DQotCQkJCQkJCQlqICs9IG5Ta2lwOw0KLQkJCQkJCQkJYnJlYWs7DQotCQkJCQkJCWNhc2UgJ20nOg0KLQkJCQkJCQkJbk1vbnRoID0gUGFyc2VTdHJpbmdJbnRlZ2VyKHZhbHVlLCBqLCBuU2tpcCwgMik7DQotCQkJCQkJCQlpICs9IDI7DQotCQkJCQkJCQlqICs9IG5Ta2lwOw0KLQkJCQkJCQkJYnJlYWs7DQotCQkJCQkJCWNhc2UgJ2QnOg0KLQkJCQkJCQkJbkRheSA9IFBhcnNlU3RyaW5nSW50ZWdlcih2YWx1ZSwgaiwgblNraXAsIDIpOw0KLQkJCQkJCQkJaSArPSAyOw0KLQkJCQkJCQkJaiArPSBuU2tpcDsNCi0JCQkJCQkJCWJyZWFrOw0KLQkJCQkJCQljYXNlICdIJzoNCi0JCQkJCQkJCW5Ib3VyID0gUGFyc2VTdHJpbmdJbnRlZ2VyKHZhbHVlLCBqLCBuU2tpcCwgMik7DQotCQkJCQkJCQlpICs9IDI7DQotCQkJCQkJCQlqICs9IG5Ta2lwOw0KLQkJCQkJCQkJYnJlYWs7DQotCQkJCQkJCWNhc2UgJ2gnOg0KLQkJCQkJCQkJbkhvdXIgPSBQYXJzZVN0cmluZ0ludGVnZXIodmFsdWUsIGosIG5Ta2lwLCAyKTsNCi0JCQkJCQkJCWkgKz0gMjsNCi0JCQkJCQkJCWogKz0gblNraXA7DQotCQkJCQkJCQlicmVhazsNCi0JCQkJCQkJY2FzZSAnTSc6DQotCQkJCQkJCQluTWluID0gUGFyc2VTdHJpbmdJbnRlZ2VyKHZhbHVlLCBqLCBuU2tpcCwgMik7DQotCQkJCQkJCQlpICs9IDI7DQotCQkJCQkJCQlqICs9IG5Ta2lwOw0KLQkJCQkJCQkJYnJlYWs7DQotCQkJCQkJCWNhc2UgJ3MnOg0KLQkJCQkJCQkJblNlYyA9IFBhcnNlU3RyaW5nSW50ZWdlcih2YWx1ZSwgaiwgblNraXAsIDIpOw0KLQkJCQkJCQkJaSArPSAyOw0KLQkJCQkJCQkJaiArPSBuU2tpcDsNCi0JCQkJCQkJCWJyZWFrOw0KLQkJCQkJCQljYXNlICd0JzoNCi0JCQkJCQkJCWJQbSA9ICh2YWx1ZS5HZXRBdChqKSA9PSAncCcgJiYgdmFsdWUuR2V0QXQoaisxKSA9PSAnbScpOw0KLQkJCQkJCQkJaSArPSAyOw0KLQkJCQkJCQkJaiArPSAyOw0KLQkJCQkJCQkJYnJlYWs7DQotCQkJCQkJfQ0KLQkJCQkJfQ0KLQkJCQkJZWxzZSBpZiAoZm9ybWF0LkdldEF0KGkrMSkgPT0gYyAmJiBmb3JtYXQuR2V0QXQoaSsyKSA9PSBjICYmIGZvcm1hdC5HZXRBdChpKzMpICE9IGMpDQotCQkJCQl7DQotCQkJCQkJc3dpdGNoIChjKQ0KLQkJCQkJCXsNCi0JCQkJCQkJY2FzZSAnbSc6DQotCQkJCQkJCQl7DQotCQkJCQkJCQkJQ0ZYX1dpZGVTdHJpbmcgc01vbnRoID0gUGFyc2VTdHJpbmdTdHJpbmcodmFsdWUsIGosIG5Ta2lwKTsNCi0JCQkJCQkJCQlGWF9CT09MIGJGaW5kID0gRkFMU0U7DQotCQkJCQkJCQkJZm9yIChpbnQgbSA9IDA7IG0gPCAxMjsgbSsrKQ0KLQkJCQkJCQkJCXsNCi0JCQkJCQkJCQkJaWYgKHNNb250aC5Db21wYXJlTm9DYXNlKG1vbnRoc1ttXSkgPT0gMCkNCi0JCQkJCQkJCQkJew0KLQkJCQkJCQkJCQkJbk1vbnRoID0gbSArIDE7DQotCQkJCQkJCQkJCQlpKz0zOw0KLQkJCQkJCQkJCQkJais9blNraXA7DQotCQkJCQkJCQkJCQliRmluZCA9IFRSVUU7DQotCQkJCQkJCQkJCQlicmVhazsNCi0JCQkJCQkJCQkJfQ0KLQkJCQkJCQkJCX0NCi0JCQkJCQkJCQkNCi0JCQkJCQkJCQlpZiAoIWJGaW5kKQ0KLQkJCQkJCQkJCXsNCi0JCQkJCQkJCQkJbk1vbnRoID0gUGFyc2VTdHJpbmdJbnRlZ2VyKHZhbHVlLCBqLCBuU2tpcCwgMyk7DQotCQkJCQkJCQkJCWkrPTM7DQotCQkJCQkJCQkJCWogKz0gblNraXA7DQotCQkJCQkJCQkJfQ0KLQkJCQkJCQkJfQ0KLQkJCQkJCQkJYnJlYWs7DQotCQkJCQkJCWNhc2UgJ3knOg0KLQkJCQkJCQkJYnJlYWs7DQotCQkJCQkJCWRlZmF1bHQ6DQotCQkJCQkJCQlpKz0zOw0KLQkJCQkJCQkJais9MzsNCi0JCQkJCQkJCWJyZWFrOw0KLQkJCQkJCX0NCi0JCQkJCX0NCi0JCQkJCWVsc2UgaWYgKGZvcm1hdC5HZXRBdChpKzEpID09IGMgJiYgZm9ybWF0LkdldEF0KGkrMikgPT0gYyAmJiBmb3JtYXQuR2V0QXQoaSszKSA9PSBjICYmIGZvcm1hdC5HZXRBdChpKzQpICE9IGMpDQotCQkJCQl7DQotCQkJCQkJc3dpdGNoIChjKQ0KLQkJCQkJCXsNCi0NCi0NCi0JCQkJCQkJY2FzZSAneSc6DQotCQkJCQkJCQluWWVhciA9IFBhcnNlU3RyaW5nSW50ZWdlcih2YWx1ZSwgaiwgblNraXAsIDQpOw0KLQkJCQkJCQkJaiArPSBuU2tpcDsNCi0JCQkJCQkJCWkgKz0gNDsNCi0JCQkJCQkJCWJyZWFrOw0KLQkJCQkJCQljYXNlICdtJzoNCi0JCQkJCQkJCXsNCi0JCQkJCQkJCQlGWF9CT09MIGJGaW5kID0gRkFMU0U7DQotDQotCQkJCQkJCQkJQ0ZYX1dpZGVTdHJpbmcgc01vbnRoID0gUGFyc2VTdHJpbmdTdHJpbmcodmFsdWUsIGosIG5Ta2lwKTsNCi0JCQkJCQkJCQlzTW9udGguTWFrZUxvd2VyKCk7DQotDQotCQkJCQkJCQkJZm9yIChpbnQgbSA9IDA7IG0gPCAxMjsgbSsrKQ0KLQkJCQkJCQkJCXsNCi0JCQkJCQkJCQkJQ0ZYX1dpZGVTdHJpbmcgc0Z1bGxNb250aHMgPSBmdWxsbW9udGhzW21dOw0KLQkJCQkJCQkJCQlzRnVsbE1vbnRocy5NYWtlTG93ZXIoKTsNCi0NCi0JCQkJCQkJCQkJaWYgKHNGdWxsTW9udGhzLkZpbmQoc01vbnRoLCAwKSAhPSAtMSkNCi0JCQkJCQkJCQkJew0KLQkJCQkJCQkJCQkJbk1vbnRoID0gbSArIDE7DQotCQkJCQkJCQkJCQlpICs9IDQ7DQotCQkJCQkJCQkJCQlqICs9IG5Ta2lwOw0KLQkJCQkJCQkJCQkJYkZpbmQgPSBUUlVFOw0KLQkJCQkJCQkJCQkJYnJlYWs7DQotCQkJCQkJCQkJCX0NCi0JCQkJCQkJCQl9DQotCQkJCQkJCQkJDQotCQkJCQkJCQkJaWYgKCFiRmluZCkNCi0JCQkJCQkJCQl7DQotCQkJCQkJCQkJCW5Nb250aCA9IFBhcnNlU3RyaW5nSW50ZWdlcih2YWx1ZSwgaiwgblNraXAsIDQpOw0KLQkJCQkJCQkJCQlpKz00Ow0KLQkJCQkJCQkJCQlqICs9IG5Ta2lwOw0KLQkJCQkJCQkJCX0NCi0JCQkJCQkJCX0NCi0JCQkJCQkJCWJyZWFrOw0KLQkJCQkJCQlkZWZhdWx0Og0KLQkJCQkJCQkJaSArPSA0Ow0KLQkJCQkJCQkJaiArPSA0Ow0KLQkJCQkJCQkJYnJlYWs7DQotCQkJCQkJfQkJCQkJDQotCQkJCQl9DQotCQkJCQllbHNlDQotCQkJCQl7DQotCQkJCQkJaWYgKGZvcm1hdC5HZXRBdChpKSAhPSB2YWx1ZS5HZXRBdChqKSkNCi0JCQkJCQl7DQotCQkJCQkJCWJXcm9uZ0Zvcm1hdCA9IFRSVUU7DQotCQkJCQkJCWJFeGl0ID0gVFJVRTsNCi0JCQkJCQl9DQotCQkJCQkJaSsrOw0KLQkJCQkJCWorKzsNCi0JCQkJCX0NCi0JCQkJCQ0KLQkJCQkJaWYgKG9sZGogPT0gaikNCi0JCQkJCXsNCi0JCQkJCQliV3JvbmdGb3JtYXQgPSBUUlVFOw0KLQkJCQkJCWJFeGl0ID0gVFJVRTsNCi0JCQkJCX0NCi0JCQkJfQ0KLQ0KLQkJCQlicmVhazsJCQkNCi0JCQlkZWZhdWx0Og0KLQkJCQlpZiAodmFsdWUuR2V0TGVuZ3RoKCkgPD0gaikNCi0JCQkJew0KLQkJCQkJYkV4aXQgPSBUUlVFOw0KLQkJCQl9DQotCQkJCWVsc2UgaWYgKGZvcm1hdC5HZXRBdChpKSAhPSB2YWx1ZS5HZXRBdChqKSkNCi0JCQkJew0KLQkJCQkJYldyb25nRm9ybWF0ID0gVFJVRTsNCi0JCQkJCWJFeGl0ID0gVFJVRTsNCi0JCQkJfQ0KLQ0KLQkJCQlpKys7DQotCQkJCWorKzsNCi0JCQkJYnJlYWs7DQotCQl9CQkNCi0JfQ0KLQ0KLQlpZiAoYlBtKSBuSG91ciArPSAxMjsNCi0NCi0JaWYgKG5ZZWFyID49IDAgJiYgblllYXIgPD0gblllYXJTdWIpDQotCQluWWVhciArPSAyMDAwOw0KLQ0KLQlpZiAobk1vbnRoIDwgMSB8fCBuTW9udGggPiAxMikNCi0JCWJXcm9uZ0Zvcm1hdCA9IFRSVUU7DQotDQotCWlmIChuRGF5IDwgMSB8fCBuRGF5ID4gMzEpDQotCQliV3JvbmdGb3JtYXQgPSBUUlVFOw0KLQ0KLQlpZiAobkhvdXIgPCAwIHx8IG5Ib3VyID4gMjQpDQotCQliV3JvbmdGb3JtYXQgPSBUUlVFOw0KLQ0KLQlpZiAobk1pbiA8IDAgfHwgbk1pbiA+IDYwKQ0KLQkJYldyb25nRm9ybWF0ID0gVFJVRTsNCi0NCi0JaWYgKG5TZWMgPCAwIHx8IG5TZWMgPiA2MCkNCi0JCWJXcm9uZ0Zvcm1hdCA9IFRSVUU7DQotDQotCWRvdWJsZSBkUmV0ID0gMDsNCi0NCi0JaWYgKGJXcm9uZ0Zvcm1hdCkNCi0Jew0KLQkJZFJldCA9IFBhcnNlTm9ybWFsRGF0ZSh2YWx1ZSwgYldyb25nRm9ybWF0KTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCWRSZXQgPSBKU19NYWtlRGF0ZShKU19NYWtlRGF5KG5ZZWFyLG5Nb250aCAtIDEsbkRheSksSlNfTWFrZVRpbWUobkhvdXIsIG5NaW4sIG5TZWMsIDApKTsNCi0NCi0JCWlmIChKU19Qb3J0SXNOYW4oZFJldCkpDQotCQl7DQotCQkJZFJldCA9IEpTX0RhdGVQYXJzZSh2YWx1ZSk7DQotCQl9DQotCX0NCi0NCi0JaWYgKEpTX1BvcnRJc05hbihkUmV0KSkNCi0Jew0KLQkJZFJldCA9IFBhcnNlTm9ybWFsRGF0ZSh2YWx1ZSwgYldyb25nRm9ybWF0KTsNCi0JfQ0KLQ0KLQlyZXR1cm4gZFJldDsNCi0NCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgQ0pTX1B1YmxpY01ldGhvZHM6Ok1ha2VGb3JtYXREYXRlKGRvdWJsZSBkRGF0ZSwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJiBmb3JtYXQpDQotew0KLQlDRlhfV2lkZVN0cmluZyBzUmV0ID0gTCIiLHNQYXJ0ID0gTCIiOw0KLQ0KLQlpbnQgblllYXIgPSBKU19HZXRZZWFyRnJvbVRpbWUoZERhdGUpOw0KLQlpbnQgbk1vbnRoID0gSlNfR2V0TW9udGhGcm9tVGltZShkRGF0ZSkgKyAxOw0KLQlpbnQgbkRheSA9IEpTX0dldERheUZyb21UaW1lKGREYXRlKTsNCi0JaW50IG5Ib3VyID0gSlNfR2V0SG91ckZyb21UaW1lKGREYXRlKTsNCi0JaW50IG5NaW4gPSBKU19HZXRNaW5Gcm9tVGltZShkRGF0ZSk7DQotCWludCBuU2VjID0gSlNfR2V0U2VjRnJvbVRpbWUoZERhdGUpOw0KLQ0KLQlpbnQgaSA9IDA7DQotCUZYX1dDSEFSIGM7DQotCXdoaWxlIChpIDwgZm9ybWF0LkdldExlbmd0aCgpKQ0KLQl7DQotCQljID0gZm9ybWF0LkdldEF0KGkpOw0KLQkJc1BhcnQgPSBMIiI7DQotCQlzd2l0Y2ggKGMpDQotCQl7DQotCQkJY2FzZSAneSc6DQotCQkJY2FzZSAnbSc6DQotCQkJY2FzZSAnZCc6DQotCQkJY2FzZSAnSCc6DQotCQkJY2FzZSAnaCc6DQotCQkJY2FzZSAnTSc6DQotCQkJY2FzZSAncyc6DQotCQkJY2FzZSAndCc6DQotCQkJCWlmIChmb3JtYXQuR2V0QXQoaSsxKSAhPSBjKQ0KLQkJCQl7DQotCQkJCQlzd2l0Y2ggKGMpDQotCQkJCQl7DQotCQkJCQkJY2FzZSAneSc6DQotCQkJCQkJCXNQYXJ0ICs9IGM7DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCWNhc2UgJ20nOg0KLQkJCQkJCQlzUGFydC5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlZCIsbk1vbnRoKTsNCi0JCQkJCQkJYnJlYWs7DQotCQkJCQkJY2FzZSAnZCc6DQotCQkJCQkJCXNQYXJ0LkZvcm1hdCgoRlhfTFBDV1NUUilMIiVkIixuRGF5KTsNCi0JCQkJCQkJYnJlYWs7DQotCQkJCQkJY2FzZSAnSCc6DQotCQkJCQkJCXNQYXJ0LkZvcm1hdCgoRlhfTFBDV1NUUilMIiVkIixuSG91cik7DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCWNhc2UgJ2gnOg0KLQkJCQkJCQlzUGFydC5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlZCIsbkhvdXI+MTI/bkhvdXIgLSAxMjpuSG91cik7DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCWNhc2UgJ00nOg0KLQkJCQkJCQlzUGFydC5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlZCIsbk1pbik7DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCWNhc2UgJ3MnOg0KLQkJCQkJCQlzUGFydC5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlZCIsblNlYyk7DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCWNhc2UgJ3QnOgkJCQkNCi0JCQkJCQkJc1BhcnQgKz0gbkhvdXI+MTI/J3AnOidhJzsNCi0JCQkJCQkJYnJlYWs7DQotCQkJCQl9CQkJCQkNCi0JCQkJCWkrKzsNCi0JCQkJfQ0KLQkJCQllbHNlIGlmIChmb3JtYXQuR2V0QXQoaSsxKSA9PSBjICYmIGZvcm1hdC5HZXRBdChpKzIpICE9IGMpDQotCQkJCXsNCi0JCQkJCXN3aXRjaCAoYykNCi0JCQkJCXsNCi0JCQkJCQljYXNlICd5JzoNCi0JCQkJCQkJc1BhcnQuRm9ybWF0KChGWF9MUENXU1RSKUwiJTAyZCIsblllYXIgLSAoblllYXIgLyAxMDApICogMTAwKTsNCi0JCQkJCQkJYnJlYWs7DQotCQkJCQkJY2FzZSAnbSc6DQotCQkJCQkJCXNQYXJ0LkZvcm1hdCgoRlhfTFBDV1NUUilMIiUwMmQiLG5Nb250aCk7DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCWNhc2UgJ2QnOg0KLQkJCQkJCQlzUGFydC5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlMDJkIixuRGF5KTsNCi0JCQkJCQkJYnJlYWs7DQotCQkJCQkJY2FzZSAnSCc6DQotCQkJCQkJCXNQYXJ0LkZvcm1hdCgoRlhfTFBDV1NUUilMIiUwMmQiLG5Ib3VyKTsNCi0JCQkJCQkJYnJlYWs7DQotCQkJCQkJY2FzZSAnaCc6DQotCQkJCQkJCXNQYXJ0LkZvcm1hdCgoRlhfTFBDV1NUUilMIiUwMmQiLG5Ib3VyPjEyP25Ib3VyIC0gMTI6bkhvdXIpOw0KLQkJCQkJCQlicmVhazsNCi0JCQkJCQljYXNlICdNJzoNCi0JCQkJCQkJc1BhcnQuRm9ybWF0KChGWF9MUENXU1RSKUwiJTAyZCIsbk1pbik7DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCWNhc2UgJ3MnOg0KLQkJCQkJCQlzUGFydC5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlMDJkIixuU2VjKTsNCi0JCQkJCQkJYnJlYWs7DQotCQkJCQkJY2FzZSAndCc6CQkJCQkJCQ0KLQkJCQkJCQlzUGFydCA9IG5Ib3VyPjEyPyAoRlhfTFBDV1NUUilMInBtIjogKEZYX0xQQ1dTVFIpTCJhbSI7DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJfQkJCQ0KLQkJCQkJaSs9MjsNCi0JCQkJfQ0KLQkJCQllbHNlIGlmIChmb3JtYXQuR2V0QXQoaSsxKSA9PSBjICYmIGZvcm1hdC5HZXRBdChpKzIpID09IGMgJiYgZm9ybWF0LkdldEF0KGkrMykgIT0gYykNCi0JCQkJewkJDQotCQkJCQlzd2l0Y2ggKGMpDQotCQkJCQl7DQotCQkJCQkJY2FzZSAnbSc6DQotCQkJCQkJCWkrPTM7DQotCQkJCQkJCWlmIChuTW9udGggPiAwJiZuTW9udGggPD0gMTIpDQotCQkJCQkJCQlzUGFydCArPSBtb250aHNbbk1vbnRoIC0gMV07DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCWRlZmF1bHQ6DQotCQkJCQkJCWkrPTM7DQotCQkJCQkJCXNQYXJ0ICs9IGM7DQotCQkJCQkJCXNQYXJ0ICs9IGM7DQotCQkJCQkJCXNQYXJ0ICs9IGM7DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJfQkJCQkJDQotCQkJCX0NCi0JCQkJZWxzZSBpZiAoZm9ybWF0LkdldEF0KGkrMSkgPT0gYyAmJiBmb3JtYXQuR2V0QXQoaSsyKSA9PSBjICYmIGZvcm1hdC5HZXRBdChpKzMpID09IGMgJiYgZm9ybWF0LkdldEF0KGkrNCkgIT0gYykNCi0JCQkJew0KLQkJCQkJc3dpdGNoIChjKQ0KLQkJCQkJew0KLQkJCQkJCWNhc2UgJ3knOg0KLQkJCQkJCQlzUGFydC5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlMDRkIixuWWVhcik7DQotCQkJCQkJCWkgKz0gNDsNCi0JCQkJCQkJYnJlYWs7CQ0KLQkJCQkJCWNhc2UgJ20nOg0KLQkJCQkJCQlpKz00Ow0KLQkJCQkJCQlpZiAobk1vbnRoID4gMCYmbk1vbnRoIDw9IDEyKQ0KLQkJCQkJCQkJc1BhcnQgKz0gZnVsbG1vbnRoc1tuTW9udGggLSAxXTsNCi0JCQkJCQkJYnJlYWs7DQotCQkJCQkJZGVmYXVsdDoNCi0JCQkJCQkJaSArPSA0Ow0KLQkJCQkJCQlzUGFydCArPSBjOw0KLQkJCQkJCQlzUGFydCArPSBjOw0KLQkJCQkJCQlzUGFydCArPSBjOw0KLQkJCQkJCQlzUGFydCArPSBjOw0KLQkJCQkJCQlicmVhazsNCi0JCQkJCX0JCQkJCQ0KLQkJCQl9DQotCQkJCWVsc2UNCi0JCQkJew0KLQkJCQkJaSsrOw0KLQkJCQkJc1BhcnQgKz0gYzsNCi0JCQkJfQ0KLQkJCQlicmVhazsJCQkNCi0JCQlkZWZhdWx0Og0KLQkJCQlpKys7DQotCQkJCXNQYXJ0ICs9IGM7DQotCQkJCWJyZWFrOw0KLQkJfQ0KLQkJDQotCQlzUmV0ICs9IHNQYXJ0Ow0KLQl9DQotDQotCXJldHVybiBzUmV0Ow0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLS8vZnVuY3Rpb24gQUZOdW1iZXJfRm9ybWF0KG5EZWMsIHNlcFN0eWxlLCBuZWdTdHlsZSwgY3VyclN0eWxlLCBzdHJDdXJyZW5jeSwgYkN1cnJlbmN5UHJlcGVuZCkNCi1GWF9CT09MIENKU19QdWJsaWNNZXRob2RzOjpBRk51bWJlcl9Gb3JtYXQoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLSNpZiBfRlhfT1NfICE9IF9GWF9BTkRST0lEXw0KLQl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDo6R2V0SXNvbGF0ZShjYyk7DQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotCUNKU19FdmVudEhhbmRsZXIqIHBFdmVudCA9IHBDb250ZXh0LT5HZXRFdmVudEhhbmRsZXIoKTsNCi0JQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKHBhcmFtcy5zaXplKCkgIT0gNikNCi0Jew0KLQkJc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQocENvbnRleHQsIElEU19TVFJJTkdfSlNQQVJBTUVSUk9SKTsNCi0JCXJldHVybiBGQUxTRTsNCi0JfQ0KLQlpZighcEV2ZW50LT5tX3BWYWx1ZSkNCi0JCXJldHVybiBGQUxTRTsNCi0JQ0ZYX1dpZGVTdHJpbmcmIFZhbHVlID0gcEV2ZW50LT5WYWx1ZSgpOwkNCi0JQ0ZYX0J5dGVTdHJpbmcgc3RyVmFsdWUgPSBTdHJUcmltKENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShWYWx1ZSkpOw0KLQkNCi0JaWYgKHN0clZhbHVlLklzRW1wdHkoKSkgcmV0dXJuIFRSVUU7DQotCQ0KLQlpbnQgaURlYyA9IHBhcmFtc1swXTsNCi0JaW50IGlTZXBTdHlsZSA9IHBhcmFtc1sxXTsNCi0JaW50IGlOZWdTdHlsZSA9IHBhcmFtc1syXTsNCi0JaW50IGljdXJyU3R5bGUgPSBwYXJhbXNbM107IC8vaXQncyBubyB1c2UhDQotCXN0ZDo6d3N0cmluZyB3c3RyQ3VycmVuY3kocGFyYW1zWzRdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCkpOw0KLQlGWF9CT09MIGJDdXJyZW5jeVByZXBlbmQgPSBwYXJhbXNbNV07DQotCQ0KLQlpZiAoaURlYyA8IDApIGlEZWMgPSAtaURlYzsNCi0JDQotCWlmIChpU2VwU3R5bGUgPCAwIHx8IGlTZXBTdHlsZSA+IDMpDQotCQlpU2VwU3R5bGUgPSAwOw0KLQkNCi0JaWYgKGlOZWdTdHlsZSA8IDAgfHwgaU5lZ1N0eWxlID4gMykNCi0JCWlOZWdTdHlsZSA9IDA7DQotCQ0KLQkNCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotCS8vZm9yIHByb2Nlc3NpbmcgZGVjaW1hbCBwbGFjZXMNCi0Jc3RyVmFsdWUuUmVwbGFjZSgiLCIsICIuIik7DQotCWRvdWJsZSBkVmFsdWUgPSBhdG9mKHN0clZhbHVlKTsNCi0JaWYgKGlEZWMgPiAwKQ0KLQkJZFZhbHVlICs9IERPVUJMRV9DT1JSRUNUOy8vDQotCQkgICAgDQotCWludCBpRGVjMjsNCi0JRlhfQk9PTCBiTmFnYXRpdmUgPSBGQUxTRTsNCi0NCi0Jc3RyVmFsdWUgPSBmY3Z0KGRWYWx1ZSxpRGVjLCZpRGVjMiwmYk5hZ2F0aXZlKTsNCi0JaWYgKHN0clZhbHVlLklzRW1wdHkoKSkNCi0Jew0KLQkJZFZhbHVlID0gMDsNCi0JCXN0clZhbHVlID0gZmN2dChkVmFsdWUsaURlYywmaURlYzIsJmJOYWdhdGl2ZSk7DQotCQlpZiAoc3RyVmFsdWUuSXNFbXB0eSgpKQ0KLQkJew0KLQkJCXN0clZhbHVlID0gIjAiOw0KLQkJCWlEZWMyID0gMTsNCi0JCX0NCi0NCi0JfQ0KLQ0KLQlpZiAoaURlYzIgPCAwKQ0KLQl7DQotCQlmb3IgKGludCBpTnVtID0gMDtpTnVtIDwgYWJzKGlEZWMyKTtpTnVtKyspDQotCQl7DQotCQkJc3RyVmFsdWUgPSAiMCIgKyBzdHJWYWx1ZTsNCi0JCX0NCi0JCWlEZWMyID0gMDsNCi0JCQ0KLQl9DQotCWludCBpTWF4ID0gc3RyVmFsdWUuR2V0TGVuZ3RoKCk7DQotCWlmIChpRGVjMiA+IGlNYXgpDQotCXsNCi0JCWZvciAoaW50IGlOdW0gPSAwO2lOdW0gPD0gaURlYzIgLSBpTWF4IDtpTnVtKyspDQotCQl7DQotCQkJc3RyVmFsdWUgKz0gIjAiOw0KLQkJfQ0KLQkJaU1heCA9IGlEZWMyKzE7CQkJDQotCX0NCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLSAgICAvL2ZvciBwcm9jZXNzaW5nIHNlcGVyYXRvciBzdHlsZQ0KLQlpZiAoaURlYzIgPCBpTWF4KQ0KLQl7DQotCQlpZiAoaVNlcFN0eWxlID09IDAgfHwgaVNlcFN0eWxlID09IDEpDQotCQl7DQotCQkJc3RyVmFsdWUuSW5zZXJ0KGlEZWMyLCAnLicpOw0KLQkJCWlNYXgrKzsNCi0JCX0NCi0JCWVsc2UgaWYgKGlTZXBTdHlsZSA9PSAyIHx8IGlTZXBTdHlsZSA9PSAzKQ0KLQkJew0KLQkJCXN0clZhbHVlLkluc2VydChpRGVjMiwgJywnKTsNCi0JCQlpTWF4Kys7DQotCQl9DQotCQkNCi0JCWlmIChpRGVjMiA9PSAwKQ0KLQkJCXN0clZhbHVlLkluc2VydChpRGVjMiwgJzAnKTsNCi0JfQ0KLQlpZiAoaVNlcFN0eWxlID09IDAgfHwgaVNlcFN0eWxlID09IDIpDQotCXsNCi0JCWNoYXIgY1NlcGVyYXRvcjsNCi0JCWlmIChpU2VwU3R5bGUgPT0gMCkNCi0JCQljU2VwZXJhdG9yID0gJywnOw0KLQkJZWxzZQ0KLQkJCWNTZXBlcmF0b3IgPSAnLic7DQotCQkNCi0JCWludCBpRGVjUG9zaXRpdmUsaURlY05hZ2F0aXZlOw0KLQkJaURlY1Bvc2l0aXZlID0gaURlYzI7DQotCQlpRGVjTmFnYXRpdmUgPSBpRGVjMjsJCQ0KLQkJDQotCQlmb3IgKGlEZWNQb3NpdGl2ZSA9IGlEZWMyIC0zOyBpRGVjUG9zaXRpdmUgPiAwO2lEZWNQb3NpdGl2ZSAtPSAzKQ0KLQkJew0KLQkJCXN0clZhbHVlLkluc2VydChpRGVjUG9zaXRpdmUsIGNTZXBlcmF0b3IpOw0KLQkJCWlNYXgrKzsNCi0JCX0NCi0JfQ0KLQkNCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLSAgICAvL2ZvciBwcm9jZXNzaW5nIGN1cnJlbmN5IHN0cmluZw0KLQ0KLQlWYWx1ZSA9IENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoc3RyVmFsdWUpOw0KLQkNCi0Jc3RkOjp3c3RyaW5nIHN0clZhbHVlMihWYWx1ZSk7DQotDQotCWlmIChiQ3VycmVuY3lQcmVwZW5kKQ0KLQkJc3RyVmFsdWUyID0gd3N0ckN1cnJlbmN5ICsgc3RyVmFsdWUyOw0KLQllbHNlDQotCQlzdHJWYWx1ZTIgPSBzdHJWYWx1ZTIgKyB3c3RyQ3VycmVuY3k7DQotCQ0KLQkNCi0JDQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi0JLy9mb3IgcHJvY2Vzc2luZyBuZWdhdGl2ZSBzdHlsZQ0KLQlpZiAoYk5hZ2F0aXZlKQ0KLQl7DQotCQlpZiAoaU5lZ1N0eWxlID09IDApDQotCQl7DQotCQkJc3RyVmFsdWUyLmluc2VydCgwLEwiLSIpOw0KLQkJfQ0KLQkJaWYgKGlOZWdTdHlsZSA9PSAyIHx8IGlOZWdTdHlsZSA9PSAzKQ0KLQkJew0KLQkJCXN0clZhbHVlMi5pbnNlcnQoMCxMIigiKTsNCi0JCQlzdHJWYWx1ZTIuaW5zZXJ0KHN0clZhbHVlMi5sZW5ndGgoKSxMIikiKTsNCi0JCX0NCi0JCWlmIChpTmVnU3R5bGUgPT0gMSB8fCBpTmVnU3R5bGUgPT0gMykNCi0JCXsNCi0JCQlpZiAoRmllbGQgKiBmVGFyZ2V0ID0gcEV2ZW50LT5UYXJnZXRfRmllbGQoKSkNCi0JCQl7DQotCQkJCUNKU19BcnJheSBhckNvbG9yKGlzb2xhdGUpOw0KLQkJCQlDSlNfVmFsdWUgdkNvbEVsbShpc29sYXRlKTsNCi0JCQkJdkNvbEVsbSA9IEwiUkdCIjsNCi0JCQkJYXJDb2xvci5TZXRFbGVtZW50KDAsdkNvbEVsbSk7DQotCQkJCXZDb2xFbG0gPSAxOw0KLQkJCQlhckNvbG9yLlNldEVsZW1lbnQoMSx2Q29sRWxtKTsNCi0JCQkJdkNvbEVsbSA9IDA7DQotCQkJCWFyQ29sb3IuU2V0RWxlbWVudCgyLHZDb2xFbG0pOw0KLQkJCQkNCi0JCQkJYXJDb2xvci5TZXRFbGVtZW50KDMsdkNvbEVsbSk7DQotCQkJCQ0KLQkJCQlDSlNfUHJvcFZhbHVlIHZQcm9wKGlzb2xhdGUpOw0KLQkJCQl2UHJvcC5TdGFydEdldHRpbmcoKTsNCi0JCQkJdlByb3A8PGFyQ29sb3I7DQotCQkJCXZQcm9wLlN0YXJ0U2V0dGluZygpOw0KLQkJCQlmVGFyZ2V0LT50ZXh0Q29sb3IoY2MsdlByb3Asc0Vycm9yKTsvLyByZWQNCi0JCQl9DQotCQl9DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlpZiAoaU5lZ1N0eWxlID09IDEgfHwgaU5lZ1N0eWxlID09IDMpDQotCQl7DQotCQkJaWYgKEZpZWxkICpmVGFyZ2V0ID0gcEV2ZW50LT5UYXJnZXRfRmllbGQoKSkNCi0JCQl7DQotCQkJCUNKU19BcnJheSBhckNvbG9yKGlzb2xhdGUpOw0KLQkJCQlDSlNfVmFsdWUgdkNvbEVsbShpc29sYXRlKTsNCi0JCQkJdkNvbEVsbSA9IEwiUkdCIjsNCi0JCQkJYXJDb2xvci5TZXRFbGVtZW50KDAsdkNvbEVsbSk7DQotCQkJCXZDb2xFbG0gPSAwOw0KLQkJCQlhckNvbG9yLlNldEVsZW1lbnQoMSx2Q29sRWxtKTsNCi0JCQkJYXJDb2xvci5TZXRFbGVtZW50KDIsdkNvbEVsbSk7DQotCQkJCWFyQ29sb3IuU2V0RWxlbWVudCgzLHZDb2xFbG0pOw0KLQkJCQkNCi0JCQkJQ0pTX1Byb3BWYWx1ZSB2UHJvcChpc29sYXRlKTsNCi0JCQkJdlByb3AuU3RhcnRHZXR0aW5nKCk7DQotCQkJCWZUYXJnZXQtPnRleHRDb2xvcihjYyx2UHJvcCxzRXJyb3IpOw0KLQkJCQkNCi0JCQkJQ0pTX0FycmF5IGFQcm9wKGlzb2xhdGUpOw0KLQkJCQl2UHJvcC5Db252ZXJ0VG9BcnJheShhUHJvcCk7DQotDQotCQkJCUNQV0xfQ29sb3IgY3JQcm9wOw0KLQkJCQlDUFdMX0NvbG9yIGNyQ29sb3I7DQotCQkJCWNvbG9yOjpDb252ZXJ0QXJyYXlUb1BXTENvbG9yKGFQcm9wLCBjclByb3ApOw0KLQkJCQljb2xvcjo6Q29udmVydEFycmF5VG9QV0xDb2xvcihhckNvbG9yLCBjckNvbG9yKTsNCi0NCi0JCQkJaWYgKGNyQ29sb3IgIT0gY3JQcm9wKQ0KLQkJCQl7DQotCQkJCQlDSlNfUHJvcFZhbHVlIHZQcm9wMihpc29sYXRlKTsNCi0JCQkJCXZQcm9wMi5TdGFydEdldHRpbmcoKTsNCi0JCQkJCXZQcm9wMjw8YXJDb2xvcjsNCi0JCQkJCXZQcm9wMi5TdGFydFNldHRpbmcoKTsNCi0gICAgIAkJCQlmVGFyZ2V0LT50ZXh0Q29sb3IoY2MsdlByb3AyLHNFcnJvcik7DQotCQkJCX0NCi0JCQl9DQotCQl9DQotCX0NCi0JVmFsdWUgPSBzdHJWYWx1ZTIuY19zdHIoKTsNCi0jZW5kaWYNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLS8vZnVuY3Rpb24gQUZOdW1iZXJfS2V5c3Ryb2tlKG5EZWMsIHNlcFN0eWxlLCBuZWdTdHlsZSwgY3VyclN0eWxlLCBzdHJDdXJyZW5jeSwgYkN1cnJlbmN5UHJlcGVuZCkNCi1GWF9CT09MIENKU19QdWJsaWNNZXRob2RzOjpBRk51bWJlcl9LZXlzdHJva2UoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQgKiljYzsNCi0JQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOw0KLQlDSlNfRXZlbnRIYW5kbGVyKiBwRXZlbnQgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7DQotCUFTU0VSVChwRXZlbnQgIT0gTlVMTCk7DQotCQ0KLQlpZihwYXJhbXMuc2l6ZSgpIDwgMikNCi0JCXJldHVybiBGQUxTRTsNCi0JaW50IGlTZXBTdHlsZSA9IHBhcmFtc1sxXTsNCi0JDQotCWlmIChpU2VwU3R5bGUgPCAwIHx8IGlTZXBTdHlsZSA+IDMpDQotCQlpU2VwU3R5bGUgPSAwOw0KLQlpZighcEV2ZW50LT5tX3BWYWx1ZSkNCi0JCXJldHVybiBGQUxTRTsNCi0JQ0ZYX1dpZGVTdHJpbmcgJiB2YWwgPSBwRXZlbnQtPlZhbHVlKCk7CQ0KLQlDRlhfV2lkZVN0cmluZyAmIHdfc3RyQ2hhbmdlID0gcEV2ZW50LT5DaGFuZ2UoKTsNCi0gICAgQ0ZYX1dpZGVTdHJpbmcgd19zdHJWYWx1ZSA9IHZhbDsNCi0NCi0JaWYgKHBFdmVudC0+V2lsbENvbW1pdCgpKQ0KLQl7DQotCQlDRlhfV2lkZVN0cmluZyB3c3RyQ2hhbmdlID0gd19zdHJDaGFuZ2U7DQotCQlDRlhfV2lkZVN0cmluZyB3c3RyVmFsdWUgPSBTdHJMVHJpbSh3X3N0clZhbHVlKTsNCi0JCWlmICh3c3RyVmFsdWUuSXNFbXB0eSgpKQ0KLQkJCXJldHVybiBUUlVFOw0KLQkJDQotCQlDRlhfV2lkZVN0cmluZyBzd1RlbXAgPSB3c3RyVmFsdWU7DQotCQlzd1RlbXAuUmVwbGFjZSgoRlhfTFBDV1NUUilMIiwiLCAoRlhfTFBDV1NUUilMIi4iKTsNCi0JCWlmICghSXNOdW1iZXIoc3dUZW1wKSkgLy8hKElzTnVtYmVyKHdzdHJDaGFuZ2UpICYmIA0KLQkJew0KLQkJCXBFdmVudC0+UmMoKSA9IEZBTFNFOw0KLQkJCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTQUZOVU1CRVJfS0VZU1RST0tFKTsNCi0JCQlBbGVydChwQ29udGV4dCwgc0Vycm9yKTsNCi0JCQlyZXR1cm4gVFJVRTsNCi0JCX0NCi0JCXJldHVybiBUUlVFOyAvLyBpdCBoYXBwZW5zIGFmdGVyIHRoZSBsYXN0IGtleXN0cm9rZSBhbmQgYmVmb3JlIHZhbGlkYXRpbmcsDQotCX0NCi0JDQotCXN0ZDo6d3N0cmluZyB3X3N0clZhbHVlMiAod19zdHJWYWx1ZSk7DQotCXN0ZDo6d3N0cmluZyB3X3N0ckNoYW5nZTIod19zdHJDaGFuZ2UpOw0KLQkNCi0Jc3RkOjp3c3RyaW5nIHdfc3RyU2VsZWN0ZWQ7DQotCWlmKC0xICE9IHBFdmVudC0+U2VsU3RhcnQoKSkNCi0JCXdfc3RyU2VsZWN0ZWQgPSB3X3N0clZhbHVlMi5zdWJzdHIocEV2ZW50LT5TZWxTdGFydCgpLChwRXZlbnQtPlNlbEVuZCgpIC0gcEV2ZW50LT5TZWxTdGFydCgpKSk7DQotCUZYX0JPT0wgYkhhc1NpZ24gPSAod19zdHJWYWx1ZTIuZmluZCgnLScpICE9IC0xKSAmJiAod19zdHJTZWxlY3RlZC5maW5kKCctJykgPT0gLTEpOw0KLQlpZiAoYkhhc1NpZ24pDQotCXsNCi0JCS8vY2FuJ3QgaW5zZXJ0ICJjaGFuZ2UiIGluIGZyb250IHRvIHNpZ24gcG9zdGlvbi4NCi0JCWlmIChwRXZlbnQtPlNlbFN0YXJ0KCkgPT0gMCkNCi0JCXsNCi0gICAgICAgICAgICBGWF9CT09MICZiUmMgPSBwRXZlbnQtPlJjKCk7DQotCQkJYlJjID0gRkFMU0U7DQotCQkJcmV0dXJuIFRSVUU7DQotCQl9DQotCX0NCi0NCi0JY2hhciBjU2VwID0gTCcuJzsNCi0NCi0Jc3dpdGNoIChpU2VwU3R5bGUpDQotCXsNCi0JY2FzZSAwOg0KLQljYXNlIDE6DQotCQljU2VwID0gTCcuJzsNCi0JCWJyZWFrOw0KLQljYXNlIDI6DQotCWNhc2UgMzoNCi0JCWNTZXAgPSBMJywnOw0KLQkJYnJlYWs7DQotCX0NCi0JDQotCUZYX0JPT0wgYkhhc1NlcCA9ICh3X3N0clZhbHVlMi5maW5kKGNTZXApICE9IC0xKTsNCi0JZm9yIChzdGQ6OndzdHJpbmc6Oml0ZXJhdG9yIGl0ID0gd19zdHJDaGFuZ2UyLmJlZ2luKCk7IGl0ICE9IHdfc3RyQ2hhbmdlMi5lbmQoKTsgaXQrKykNCi0Jew0KLQkJaWYgKCppdCA9PSBjU2VwKQ0KLQkJew0KLQkJCWlmIChiSGFzU2VwKQ0KLQkJCXsNCi0JCQkJRlhfQk9PTCAmYlJjID0gcEV2ZW50LT5SYygpOw0KLQkJCQliUmMgPSBGQUxTRTsNCi0JCQkJcmV0dXJuIFRSVUU7DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCWJIYXNTZXAgPSBUUlVFOw0KLQkJCQljb250aW51ZTsNCi0JCQl9DQotCQl9DQotCQlpZiAoKml0ID09IEwnLScpDQotCQl7DQotCQkJaWYgKGJIYXNTaWduKQ0KLQkJCXsNCi0JCQkJRlhfQk9PTCAmYlJjID0gcEV2ZW50LT5SYygpOw0KLQkJCQliUmMgPSBGQUxTRTsNCi0JCQkJcmV0dXJuIFRSVUU7DQotCQkJfQ0KLQkJCWVsc2UgaWYgKGl0ICE9IHdfc3RyQ2hhbmdlMi5iZWdpbigpKSAvL3NpZ24ncyBwb3NpdGlvbiBpcyBub3QgY29ycmVjdA0KLQkJCXsNCi0JCQkJRlhfQk9PTCAmYlJjID0gcEV2ZW50LT5SYygpOw0KLQkJCQliUmMgPSBGQUxTRTsNCi0JCQkJcmV0dXJuIFRSVUU7DQotCQkJfQ0KLQkJCWVsc2UgaWYgKHBFdmVudC0+U2VsU3RhcnQoKSAhPSAwKQ0KLQkJCXsNCi0JCQkJRlhfQk9PTCAmYlJjID0gcEV2ZW50LT5SYygpOw0KLQkJCQliUmMgPSBGQUxTRTsNCi0JCQkJcmV0dXJuIFRSVUU7DQotCQkJfQ0KLQkJCWJIYXNTaWduID0gVFJVRTsNCi0JCQljb250aW51ZTsNCi0JCX0NCi0JCQ0KLQkJaWYgKCFJc0RpZ2l0KCppdCkpDQotCQl7CQkJDQotCQkJRlhfQk9PTCAmYlJjID0gcEV2ZW50LT5SYygpOw0KLQkJCWJSYyA9IEZBTFNFOw0KLQkJCXJldHVybiBUUlVFOw0KLQkJfQ0KLQl9DQotCQ0KLQkNCi0Jc3RkOjp3c3RyaW5nIHdfcHJlZml4ID0gd19zdHJWYWx1ZTIuc3Vic3RyKDAscEV2ZW50LT5TZWxTdGFydCgpKTsNCi0Jc3RkOjp3c3RyaW5nIHdfcG9zdGZpeDsNCi0JaWYgKHBFdmVudC0+U2VsRW5kKCk8KGludCl3X3N0clZhbHVlMi5sZW5ndGgoKSkNCi0JCXdfcG9zdGZpeCAgPSB3X3N0clZhbHVlMi5zdWJzdHIocEV2ZW50LT5TZWxFbmQoKSk7DQotCXdfc3RyVmFsdWUyID0gd19wcmVmaXggKyB3X3N0ckNoYW5nZTIgKyB3X3Bvc3RmaXg7DQotCXdfc3RyVmFsdWUgPSB3X3N0clZhbHVlMi5jX3N0cigpOw0KLQl2YWwgPSB3X3N0clZhbHVlOw0KLQlyZXR1cm4gVFJVRTsJCQ0KLQkNCi19DQotDQotLy9mdW5jdGlvbiBBRlBlcmNlbnRfRm9ybWF0KG5EZWMsIHNlcFN0eWxlKQ0KLUZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6OkFGUGVyY2VudF9Gb3JtYXQoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLSNpZiBfRlhfT1NfICE9IF9GWF9BTkRST0lEXw0KLQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQgKiljYzsNCi0JQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOw0KLQlDSlNfRXZlbnRIYW5kbGVyKiBwRXZlbnQgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7DQotCUFTU0VSVChwRXZlbnQgIT0gTlVMTCk7DQotDQotICAgIGlmIChwYXJhbXMuc2l6ZSgpICE9IDIpDQotCXsNCi0JCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7DQotCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0JaWYoIXBFdmVudC0+bV9wVmFsdWUpDQotCQlyZXR1cm4gRkFMU0U7DQotCUNGWF9XaWRlU3RyaW5nJiBWYWx1ZSA9IHBFdmVudC0+VmFsdWUoKTsNCi0JDQotLy8gICAgIEhXTkQgaE1haW5GcmFtZSA9IE5VTEw7DQotLy8gCQ0KLS8vIAlDUERGU0RLX0Zvcm1GaWxsQXBwICpwQXBwID0gcENvbnRleHQtPkdldFJlYWRlckFwcCgpOw0KLS8vIAlBU1NFUlQocEFwcCk7DQotLy8gCWhNYWluRnJhbWUgPSBwQXBwLT5HZXRNYWluRnJhbWVXbmQoKTsNCi0JCQ0KLQlDRlhfQnl0ZVN0cmluZyBzdHJWYWx1ZSA9IFN0clRyaW0oQ0ZYX0J5dGVTdHJpbmc6OkZyb21Vbmljb2RlKFZhbHVlKSk7DQotCQ0KLQlpZiAoc3RyVmFsdWUuSXNFbXB0eSgpKQ0KLQkJcmV0dXJuIFRSVUU7DQotCQ0KLQlpbnQgaURlYyA9IHBhcmFtc1swXTsNCi0JaW50IGlTZXBTdHlsZSA9IHBhcmFtc1sxXTsNCi0JDQotCS8vQVNTRVJUKGlEZWMgPiAwKTsNCi0JaWYgKGlEZWMgPCAwKQ0KLQkJaURlYyA9IC1pRGVjOw0KLQkNCi0JaWYgKGlTZXBTdHlsZSA8IDAgfHwgaVNlcFN0eWxlID4gMykNCi0JCWlTZXBTdHlsZSA9IDA7DQotCQ0KLQkNCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotCS8vZm9yIHByb2Nlc3NpbmcgZGVjaW1hbCBwbGFjZXMNCi0JZG91YmxlIGRWYWx1ZSA9IGF0b2Yoc3RyVmFsdWUpOw0KLQlkVmFsdWUgKj0gMTAwOw0KLQlpZiAoaURlYyA+IDApDQotCQlkVmFsdWUgKz0gRE9VQkxFX0NPUlJFQ1Q7Ly/Qo9X9DQotDQotCWludCBpRGVjMjsNCi0JRlhfQk9PTCBiTmFnYXRpdmUgPSBGQUxTRTsNCi0Jc3RyVmFsdWUgPSBmY3Z0KGRWYWx1ZSxpRGVjLCZpRGVjMiwmYk5hZ2F0aXZlKTsNCi0gICAgaWYgKHN0clZhbHVlLklzRW1wdHkoKSkNCi0Jew0KLQkJZFZhbHVlID0gMDsNCi0JCXN0clZhbHVlID0gZmN2dChkVmFsdWUsaURlYywmaURlYzIsJmJOYWdhdGl2ZSk7DQotCX0NCi0NCi0JaWYgKGlEZWMyIDwgMCkNCi0Jew0KLQkJZm9yIChpbnQgaU51bSA9IDA7IGlOdW0gPCBhYnMoaURlYzIpOyBpTnVtKyspDQotCQl7DQotCQkJc3RyVmFsdWUgPSAiMCIgKyBzdHJWYWx1ZTsNCi0JCX0NCi0JCWlEZWMyID0gMDsNCi0JCQ0KLQl9DQotCWludCBpTWF4ID0gc3RyVmFsdWUuR2V0TGVuZ3RoKCk7DQotCWlmIChpRGVjMiA+IGlNYXgpDQotCXsNCi0JCWZvciAoaW50IGlOdW0gPSAwOyBpTnVtIDw9IGlEZWMyIC0gaU1heDsgaU51bSsrKQ0KLQkJew0KLQkJCXN0clZhbHVlICs9ICIwIjsNCi0JCX0NCi0JCWlNYXggPSBpRGVjMisxOwkJCQ0KLQl9DQotCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi0gICAgLy9mb3IgcHJvY2Vzc2luZyBzZXBlcmF0b3Igc3R5bGUNCi0JaWYgKGlEZWMyIDwgaU1heCkNCi0Jew0KLQkJaWYgKGlTZXBTdHlsZSA9PSAwIHx8IGlTZXBTdHlsZSA9PSAxKQ0KLQkJew0KLQkJCXN0clZhbHVlLkluc2VydChpRGVjMiwgJy4nKTsNCi0JCQlpTWF4Kys7DQotCQl9DQotCQllbHNlIGlmIChpU2VwU3R5bGUgPT0gMiB8fCBpU2VwU3R5bGUgPT0gMykNCi0JCXsNCi0JCQlzdHJWYWx1ZS5JbnNlcnQoaURlYzIsICcsJyk7DQotCQkJaU1heCsrOw0KLQkJfQ0KLQkJDQotCQlpZiAoaURlYzIgPT0gMCkNCi0JCQlzdHJWYWx1ZS5JbnNlcnQoaURlYzIsICcwJyk7DQotCX0NCi0JaWYgKGlTZXBTdHlsZSA9PSAwIHx8IGlTZXBTdHlsZSA9PSAyKQ0KLQl7DQotCQljaGFyIGNTZXBlcmF0b3I7DQotCQlpZiAoaVNlcFN0eWxlID09IDApDQotCQkJY1NlcGVyYXRvciA9ICcsJzsNCi0JCWVsc2UNCi0JCQljU2VwZXJhdG9yID0gJy4nOw0KLQkJDQotCQlpbnQgaURlY1Bvc2l0aXZlLGlEZWNOYWdhdGl2ZTsNCi0JCWlEZWNQb3NpdGl2ZSA9IGlEZWMyOw0KLQkJaURlY05hZ2F0aXZlID0gaURlYzI7DQotCQkJDQotCQlmb3IgKGlEZWNQb3NpdGl2ZSA9IGlEZWMyIC0zOyBpRGVjUG9zaXRpdmUgPiAwOyBpRGVjUG9zaXRpdmUgLT0gMykNCi0JCXsNCi0JCQlzdHJWYWx1ZS5JbnNlcnQoaURlY1Bvc2l0aXZlLGNTZXBlcmF0b3IpOw0KLQkJCWlNYXgrKzsNCi0JCX0NCi0JfQ0KLQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLQkvL25hZ2F0aXZlIG1hcmsNCi0JaWYoYk5hZ2F0aXZlKQ0KLQkJc3RyVmFsdWUgPSAiLSIgKyBzdHJWYWx1ZTsNCi0Jc3RyVmFsdWUgKz0gIiUiOw0KLQlWYWx1ZSA9IENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoc3RyVmFsdWUpOw0KLSNlbmRpZg0KLQlyZXR1cm4gVFJVRTsNCi19DQotLy9BRlBlcmNlbnRfS2V5c3Ryb2tlKG5EZWMsIHNlcFN0eWxlKQ0KLUZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6OkFGUGVyY2VudF9LZXlzdHJva2UoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlyZXR1cm4gQUZOdW1iZXJfS2V5c3Ryb2tlKGNjLHBhcmFtcyx2UmV0LHNFcnJvcik7DQotfQ0KLQ0KLS8vZnVuY3Rpb24gQUZEYXRlX0Zvcm1hdEV4KGNGb3JtYXQpDQotRlhfQk9PTCBDSlNfUHVibGljTWV0aG9kczo6QUZEYXRlX0Zvcm1hdEV4KE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0ICopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0JQ0pTX0V2ZW50SGFuZGxlciogcEV2ZW50ID0gcENvbnRleHQtPkdldEV2ZW50SGFuZGxlcigpOw0KLQlBU1NFUlQocEV2ZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAocGFyYW1zLnNpemUoKSAhPSAxKQ0KLQl7DQotCQlzRXJyb3IgPSBKU0dldFN0cmluZ0Zyb21JRChwQ29udGV4dCwgSURTX1NUUklOR19KU1BBUkFNRVJST1IpOw0KLQkJcmV0dXJuIEZBTFNFOw0KLQl9CQ0KLQlpZighcEV2ZW50LT5tX3BWYWx1ZSkNCi0JCXJldHVybiBGQUxTRTsNCi0JQ0ZYX1dpZGVTdHJpbmcmIHZhbCA9IHBFdmVudC0+VmFsdWUoKTsNCi0JDQotCUNGWF9XaWRlU3RyaW5nIHN0clZhbHVlID0gdmFsOwkNCi0JaWYgKHN0clZhbHVlLklzRW1wdHkoKSkgcmV0dXJuIFRSVUU7CQkNCi0NCi0JQ0ZYX1dpZGVTdHJpbmcgc0Zvcm1hdCA9IHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOw0KLQ0KLQlGWF9CT09MIGJXcm9uZ0Zvcm1hdCA9IEZBTFNFOw0KLQlkb3VibGUgZERhdGUgPSAwLjBmOw0KLQ0KLQlpZihzdHJWYWx1ZS5GaW5kKEwiR01UIikgIT0gLTEpDQotCXsNCi0JCS8vZm9yIEdNVCBmb3JtYXQgdGltZQ0KLQkJLy9zdWNoIGFzICJUdWUgQXVnIDExIDE0OjI0OjE2IEdNVCswODAwMjAwOSINCi0JCWREYXRlID0gTWFrZUludGVyRGF0ZShzdHJWYWx1ZSk7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlkRGF0ZSA9IE1ha2VSZWd1bGFyRGF0ZShzdHJWYWx1ZSxzRm9ybWF0LGJXcm9uZ0Zvcm1hdCk7DQotCX0NCi0NCi0JaWYgKEpTX1BvcnRJc05hbihkRGF0ZSkpDQotCXsNCi0JCUNGWF9XaWRlU3RyaW5nIHN3TXNnOw0KLQkJc3dNc2cuRm9ybWF0KEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSU0VEQVRFKSwgKEZYX0xQQ1dTVFIpc0Zvcm1hdCk7DQotCQlBbGVydChwQ29udGV4dCwgc3dNc2cpOw0KLQkJcmV0dXJuIEZBTFNFOw0KLQl9DQotCQ0KLQl2YWwgPSAgTWFrZUZvcm1hdERhdGUoZERhdGUsc0Zvcm1hdCk7DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1kb3VibGUgQ0pTX1B1YmxpY01ldGhvZHM6Ok1ha2VJbnRlckRhdGUoQ0ZYX1dpZGVTdHJpbmcgc3RyVmFsdWUpDQotew0KLQlpbnQgbkhvdXI7DQotCWludCBuTWluOw0KLQlpbnQgblNlYzsNCi0JaW50IG5ZZWFyOw0KLQlpbnQgbk1vbnRoOw0KLQlpbnQgbkRheTsNCi0NCi0JQ0ZYX1dpZGVTdHJpbmdBcnJheSB3c0FycmF5Ow0KLQlDRlhfV2lkZVN0cmluZyBzTW9udGggPSBMIiI7DQotCUNGWF9XaWRlU3RyaW5nIHNUZW1wID0gTCIiOw0KLQlpbnQgblNpemUgPSBzdHJWYWx1ZS5HZXRMZW5ndGgoKTsNCi0NCi0JZm9yKGludCBpID0gMDsgaSA8IG5TaXplOyBpKyspDQotCXsNCi0JCUZYX1dDSEFSIGMgPSBzdHJWYWx1ZS5HZXRBdChpKTsNCi0JCWlmKGMgPT0gTCcgJyB8fCBjID09IEwnOicpDQotCQl7CQ0KLQkJCXdzQXJyYXkuQWRkKHNUZW1wKTsNCi0JCQlzVGVtcCA9IEwiIjsNCi0JCQljb250aW51ZTsNCi0JCX0NCi0NCi0JCXNUZW1wICs9IGM7DQotCX0NCi0JDQotCXdzQXJyYXkuQWRkKHNUZW1wKTsNCi0JaWYod3NBcnJheS5HZXRTaXplKCkgIT0gOClyZXR1cm4gMDsNCi0NCi0Jc1RlbXAgPSB3c0FycmF5WzFdOw0KLQlpZihzVGVtcC5Db21wYXJlKEwiSmFuIikgPT0gMCkgbk1vbnRoID0gMTsNCi0JaWYoc1RlbXAuQ29tcGFyZShMIkZlYiIpID09IDApIG5Nb250aCA9IDI7DQotCWlmKHNUZW1wLkNvbXBhcmUoTCJNYXIiKSA9PSAwKSBuTW9udGggPSAzOw0KLQlpZihzVGVtcC5Db21wYXJlKEwiQXByIikgPT0gMCkgbk1vbnRoID0gNDsNCi0JaWYoc1RlbXAuQ29tcGFyZShMIk1heSIpID09IDApIG5Nb250aCA9IDU7DQotCWlmKHNUZW1wLkNvbXBhcmUoTCJKdW4iKSA9PSAwKSBuTW9udGggPSA2Ow0KLQlpZihzVGVtcC5Db21wYXJlKEwiSnVsIikgPT0gMCkgbk1vbnRoID0gNzsNCi0JaWYoc1RlbXAuQ29tcGFyZShMIkF1ZyIpID09IDApIG5Nb250aCA9IDg7DQotCWlmKHNUZW1wLkNvbXBhcmUoTCJTZXAiKSA9PSAwKSBuTW9udGggPSA5Ow0KLQlpZihzVGVtcC5Db21wYXJlKEwiT2N0IikgPT0gMCkgbk1vbnRoID0gMTA7DQotCWlmKHNUZW1wLkNvbXBhcmUoTCJOb3YiKSA9PSAwKSBuTW9udGggPSAxMTsNCi0JaWYoc1RlbXAuQ29tcGFyZShMIkRlYyIpID09IDApIG5Nb250aCA9IDEyOw0KLQ0KLQluRGF5ID0gKGludClQYXJzZVN0cmluZ1RvTnVtYmVyKHdzQXJyYXlbMl0pOw0KLQluSG91ciA9IChpbnQpUGFyc2VTdHJpbmdUb051bWJlcih3c0FycmF5WzNdKTsNCi0Jbk1pbiA9IChpbnQpUGFyc2VTdHJpbmdUb051bWJlcih3c0FycmF5WzRdKTsNCi0JblNlYyA9IChpbnQpUGFyc2VTdHJpbmdUb051bWJlcih3c0FycmF5WzVdKTsNCi0JblllYXIgPSAoaW50KVBhcnNlU3RyaW5nVG9OdW1iZXIod3NBcnJheVs3XSk7DQotDQotCWRvdWJsZSBkUmV0ID0gSlNfTWFrZURhdGUoSlNfTWFrZURheShuWWVhcixuTW9udGggLSAxLG5EYXkpLEpTX01ha2VUaW1lKG5Ib3VyLCBuTWluLCBuU2VjLCAwKSk7DQotDQotCWlmIChKU19Qb3J0SXNOYW4oZFJldCkpDQotCXsNCi0JCWRSZXQgPSBKU19EYXRlUGFyc2Uoc3RyVmFsdWUpOw0KLQl9DQotCQ0KLQlyZXR1cm4gZFJldDsNCi19DQotDQotLy9BRkRhdGVfS2V5c3Ryb2tlRXgoY0Zvcm1hdCkNCi1GWF9CT09MIENKU19QdWJsaWNNZXRob2RzOjpBRkRhdGVfS2V5c3Ryb2tlRXgoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQgKiljYzsNCi0JQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOw0KLQlDSlNfRXZlbnRIYW5kbGVyKiBwRXZlbnQgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7DQotCUFTU0VSVChwRXZlbnQgIT0gTlVMTCk7DQotDQotCWlmIChwYXJhbXMuc2l6ZSgpICE9IDEpDQotCXsNCi0JCXNFcnJvciA9IEwiQUZEYXRlX0tleXN0cm9rZUV4J3MgcGFyYW1ldGVycycgc2l6ZSByIG5vdCBjb3JyZWN0IjsNCi0JCXJldHVybiBGQUxTRTsNCi0JfQkNCi0JDQotCWlmIChwRXZlbnQtPldpbGxDb21taXQoKSkNCi0Jew0KLQkJaWYoIXBFdmVudC0+bV9wVmFsdWUpDQotCQkJcmV0dXJuIEZBTFNFOw0KLQkJQ0ZYX1dpZGVTdHJpbmcgc3RyVmFsdWUgPSBwRXZlbnQtPlZhbHVlKCk7DQotCQlpZiAoc3RyVmFsdWUuSXNFbXB0eSgpKSByZXR1cm4gVFJVRTsNCi0NCi0JCUNGWF9XaWRlU3RyaW5nIHNGb3JtYXQgPSBwYXJhbXNbMF0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsNCi0NCi0JCUZYX0JPT0wgYldyb25nRm9ybWF0ID0gRkFMU0U7DQotCQlkb3VibGUgZFJldCA9IE1ha2VSZWd1bGFyRGF0ZShzdHJWYWx1ZSxzRm9ybWF0LGJXcm9uZ0Zvcm1hdCk7DQotCQlpZiAoYldyb25nRm9ybWF0IHx8IEpTX1BvcnRJc05hbihkUmV0KSkNCi0JCXsNCi0JCQlDRlhfV2lkZVN0cmluZyBzd01zZzsNCi0JCQlzd01zZy5Gb3JtYXQoSlNHZXRTdHJpbmdGcm9tSUQocENvbnRleHQsIElEU19TVFJJTkdfSlNQQVJTRURBVEUpLCAoRlhfTFBDV1NUUilzRm9ybWF0KTsNCi0JCQlBbGVydChwQ29udGV4dCwgc3dNc2cpOw0KLQkJCXBFdmVudC0+UmMoKSA9IEZBTFNFOw0KLQkJCXJldHVybiBUUlVFOw0KLQkJfQ0KLQl9DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIENKU19QdWJsaWNNZXRob2RzOjpBRkRhdGVfRm9ybWF0KE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0Jdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSA6OkdldElzb2xhdGUoY2MpOw0KLQ0KLQlpZiAocGFyYW1zLnNpemUoKSAhPSAxKQ0KLQl7DQotCQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOw0KLQkJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOw0KLQ0KLQkJc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQocENvbnRleHQsIElEU19TVFJJTkdfSlNQQVJBTUVSUk9SKTsNCi0JCXJldHVybiBGQUxTRTsNCi0JfQ0KLQ0KLQlpbnQgaUluZGV4ID0gcGFyYW1zWzBdOw0KLQlGWF9MUENXU1RSIGNGb3JtYXRzW10gPSAgeyhGWF9MUENXU1RSKUwibS9kIiwgKEZYX0xQQ1dTVFIpTCJtL2QveXkiLCAoRlhfTFBDV1NUUilMIm1tL2RkL3l5IiwgKEZYX0xQQ1dTVFIpTCJtbS95eSIsIChGWF9MUENXU1RSKUwiZC1tbW0iLCAoRlhfTFBDV1NUUilMImQtbW1tLXl5IiwgKEZYX0xQQ1dTVFIpTCJkZC1tbW0teXkiLA0KLQkJKEZYX0xQQ1dTVFIpTCJ5eS1tbS1kZCIsIChGWF9MUENXU1RSKUwibW1tLXl5IiwgKEZYX0xQQ1dTVFIpTCJtbW1tLXl5IiwgKEZYX0xQQ1dTVFIpTCJtbW0gZCwgeXl5eSIsIChGWF9MUENXU1RSKUwibW1tbSBkLCB5eXl5IiwNCi0JCShGWF9MUENXU1RSKUwibS9kL3l5IGg6TU0gdHQiLCAoRlhfTFBDV1NUUilMIm0vZC95eSBISDpNTSIgfTsNCi0NCi0JQVNTRVJUKGlJbmRleCA8IHNpemVvZihjRm9ybWF0cykvc2l6ZW9mKEZYX0xQQ1dTVFIpKTsNCi0NCi0JaWYgKGlJbmRleCA8IDApDQotCQlpSW5kZXggPSAwOw0KLQlpZiAoaUluZGV4ID49IHNpemVvZihjRm9ybWF0cykvc2l6ZW9mKEZYX0xQQ1dTVFIpKQ0KLQkJaUluZGV4ID0gMDsNCi0JQ0pTX1BhcmFtZXRlcnMgbmV3UGFyYW1zOw0KLQlDSlNfVmFsdWUgdmFsKGlzb2xhdGUsY0Zvcm1hdHNbaUluZGV4XSk7DQotCW5ld1BhcmFtcy5wdXNoX2JhY2sodmFsKTsNCi0JcmV0dXJuIEFGRGF0ZV9Gb3JtYXRFeChjYyxuZXdQYXJhbXMsdlJldCxzRXJyb3IpOw0KLX0NCi0NCi0vL0FGRGF0ZV9LZXlzdHJva2VFeChjRm9ybWF0KQ0KLUZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6OkFGRGF0ZV9LZXlzdHJva2UoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDo6R2V0SXNvbGF0ZShjYyk7DQotDQotCWlmIChwYXJhbXMuc2l6ZSgpICE9IDEpDQotCXsNCi0JCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotDQotCQlzRXJyb3IgPSBKU0dldFN0cmluZ0Zyb21JRChwQ29udGV4dCwgSURTX1NUUklOR19KU1BBUkFNRVJST1IpOw0KLQkJcmV0dXJuIEZBTFNFOw0KLQl9DQotDQotCWludCBpSW5kZXggPSBwYXJhbXNbMF07DQotCUZYX0xQQ1dTVFIgY0Zvcm1hdHNbXSA9ICB7KEZYX0xQQ1dTVFIpTCJtL2QiLCAoRlhfTFBDV1NUUilMIm0vZC95eSIsIChGWF9MUENXU1RSKUwibW0vZGQveXkiLCAoRlhfTFBDV1NUUilMIm1tL3l5IiwgKEZYX0xQQ1dTVFIpTCJkLW1tbSIsIChGWF9MUENXU1RSKUwiZC1tbW0teXkiLCAoRlhfTFBDV1NUUilMImRkLW1tbS15eSIsDQotCQkoRlhfTFBDV1NUUilMInl5LW1tLWRkIiwgKEZYX0xQQ1dTVFIpTCJtbW0teXkiLCAoRlhfTFBDV1NUUilMIm1tbW0teXkiLCAoRlhfTFBDV1NUUilMIm1tbSBkLCB5eXl5IiwgKEZYX0xQQ1dTVFIpTCJtbW1tIGQsIHl5eXkiLA0KLQkJKEZYX0xQQ1dTVFIpTCJtL2QveXkgaDpNTSB0dCIsIChGWF9MUENXU1RSKUwibS9kL3l5IEhIOk1NIiB9Ow0KLQ0KLQlBU1NFUlQoaUluZGV4PHNpemVvZihjRm9ybWF0cykvc2l6ZW9mKEZYX0xQQ1dTVFIpKTsNCi0NCi0JaWYgKGlJbmRleCA8IDApDQotCQlpSW5kZXggPSAwOw0KLQlpZiAoaUluZGV4ID49IHNpemVvZihjRm9ybWF0cykvc2l6ZW9mKEZYX0xQQ1dTVFIpKQ0KLQkJaUluZGV4ID0gMDsNCi0JQ0pTX1BhcmFtZXRlcnMgbmV3UGFyYW1zOw0KLQlDSlNfVmFsdWUgdmFsKGlzb2xhdGUsY0Zvcm1hdHNbaUluZGV4XSk7DQotCW5ld1BhcmFtcy5wdXNoX2JhY2sodmFsKTsNCi0JcmV0dXJuIEFGRGF0ZV9LZXlzdHJva2VFeChjYyxuZXdQYXJhbXMsdlJldCxzRXJyb3IpOw0KLX0NCi0NCi0vL2Z1bmN0aW9uIEFGVGltZV9Gb3JtYXQocHRmKQ0KLUZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6OkFGVGltZV9Gb3JtYXQoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDo6R2V0SXNvbGF0ZShjYyk7DQotDQotCWlmIChwYXJhbXMuc2l6ZSgpICE9IDEpDQotCXsNCi0JCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotCQlzRXJyb3IgPSBKU0dldFN0cmluZ0Zyb21JRChwQ29udGV4dCwgSURTX1NUUklOR19KU1BBUkFNRVJST1IpOw0KLQkJcmV0dXJuIEZBTFNFOw0KLQl9DQotDQotCWludCBpSW5kZXggPSBwYXJhbXNbMF07DQotCUZYX0xQQ1dTVFIgY0Zvcm1hdHNbXSA9IHsoRlhfTFBDV1NUUilMIkhIOk1NIiwgKEZYX0xQQ1dTVFIpTCJoOk1NIHR0IiwgKEZYX0xQQ1dTVFIpTCJISDpNTTpzcyIsIChGWF9MUENXU1RSKUwiaDpNTTpzcyB0dCJ9Ow0KLQ0KLQlBU1NFUlQoaUluZGV4PHNpemVvZihjRm9ybWF0cykvc2l6ZW9mKEZYX0xQQ1dTVFIpKTsNCi0NCi0JaWYgKGlJbmRleCA8IDApDQotCQlpSW5kZXggPSAwOw0KLQlpZiAoaUluZGV4ID49IHNpemVvZihjRm9ybWF0cykvc2l6ZW9mKEZYX0xQQ1dTVFIpKQ0KLQkJaUluZGV4ID0gMDsNCi0JQ0pTX1BhcmFtZXRlcnMgbmV3UGFyYW1zOw0KLQlDSlNfVmFsdWUgdmFsKGlzb2xhdGUsY0Zvcm1hdHNbaUluZGV4XSk7DQotCW5ld1BhcmFtcy5wdXNoX2JhY2sodmFsKTsNCi0JcmV0dXJuIEFGRGF0ZV9Gb3JtYXRFeChjYyxuZXdQYXJhbXMsdlJldCxzRXJyb3IpOw0KLX0NCi0NCi1GWF9CT09MIENKU19QdWJsaWNNZXRob2RzOjpBRlRpbWVfS2V5c3Ryb2tlKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0Jdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSA6OkdldElzb2xhdGUoY2MpOw0KLQlpZiAocGFyYW1zLnNpemUoKSAhPSAxKQ0KLQl7DQotCQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOw0KLQkJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOw0KLQkJc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQocENvbnRleHQsIElEU19TVFJJTkdfSlNQQVJBTUVSUk9SKTsNCi0JCXJldHVybiBGQUxTRTsNCi0JfQ0KLQ0KLQlpbnQgaUluZGV4ID0gcGFyYW1zWzBdOw0KLQlGWF9MUENXU1RSIGNGb3JtYXRzW10gPSB7KEZYX0xQQ1dTVFIpTCJISDpNTSIsIChGWF9MUENXU1RSKUwiaDpNTSB0dCIsIChGWF9MUENXU1RSKUwiSEg6TU06c3MiLCAoRlhfTFBDV1NUUilMImg6TU06c3MgdHQifTsNCi0NCi0JQVNTRVJUKGlJbmRleDxzaXplb2YoY0Zvcm1hdHMpL3NpemVvZihGWF9MUENXU1RSKSk7DQotDQotCWlmIChpSW5kZXggPCAwKQ0KLQkJaUluZGV4ID0gMDsNCi0JaWYgKGlJbmRleCA+PSBzaXplb2YoY0Zvcm1hdHMpL3NpemVvZihGWF9MUENXU1RSKSkNCi0JCWlJbmRleCA9IDA7DQotCUNKU19QYXJhbWV0ZXJzIG5ld1BhcmFtczsNCi0JQ0pTX1ZhbHVlIHZhbChpc29sYXRlLGNGb3JtYXRzW2lJbmRleF0pOw0KLQluZXdQYXJhbXMucHVzaF9iYWNrKHZhbCk7DQotCXJldHVybiBBRkRhdGVfS2V5c3Ryb2tlRXgoY2MsbmV3UGFyYW1zLHZSZXQsc0Vycm9yKTsNCi19DQotDQotRlhfQk9PTCBDSlNfUHVibGljTWV0aG9kczo6QUZUaW1lX0Zvcm1hdEV4KE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JcmV0dXJuIEFGRGF0ZV9Gb3JtYXRFeChjYyxwYXJhbXMsdlJldCxzRXJyb3IpOw0KLX0NCi0NCi1GWF9CT09MIENKU19QdWJsaWNNZXRob2RzOjpBRlRpbWVfS2V5c3Ryb2tlRXgoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlyZXR1cm4gQUZEYXRlX0tleXN0cm9rZUV4KGNjLHBhcmFtcyx2UmV0LHNFcnJvcik7DQotfQ0KLQ0KLS8vZnVuY3Rpb24gQUZTcGVjaWFsX0Zvcm1hdChwc2YpDQotRlhfQk9PTCBDSlNfUHVibGljTWV0aG9kczo6QUZTcGVjaWFsX0Zvcm1hdChPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotDQotCWlmIChwYXJhbXMuc2l6ZSgpICE9IDEpDQotCXsNCi0JCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7DQotCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0NCi0Jc3RkOjpzdHJpbmcgY0Zvcm1hdDsNCi0JaW50IGlJbmRleCA9IHBhcmFtc1swXTsNCi0NCi0JQ0pTX0V2ZW50SGFuZGxlciogcEV2ZW50ID0gcENvbnRleHQtPkdldEV2ZW50SGFuZGxlcigpOw0KLQlBU1NFUlQocEV2ZW50ICE9IE5VTEwpOw0KLQ0KLQlpZighcEV2ZW50LT5tX3BWYWx1ZSkNCi0JCXJldHVybiBGQUxTRTsNCi0JQ0ZYX1dpZGVTdHJpbmcmIFZhbHVlID0gcEV2ZW50LT5WYWx1ZSgpOwkNCi0Jc3RkOjpzdHJpbmcgc3RyU3JjID0gKEZYX0xQQ1NUUilDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUoVmFsdWUpOw0KLQkNCi0Jc3dpdGNoIChpSW5kZXgpIA0KLQl7DQotCWNhc2UgMDogICAgICAgICAgICAgICAgICAgICAgICAgDQotCQljRm9ybWF0ID0gIjk5OTk5IjsNCi0JCWJyZWFrOw0KLQljYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgIA0KLQkJY0Zvcm1hdCA9ICI5OTk5OS05OTk5IjsNCi0JCWJyZWFrOw0KLQljYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgICAgIA0KLQkJew0KLQkJCXN0ZDo6c3RyaW5nIE51bWJlclN0cjsNCi0JCQl1dGlsOjpwcmludHgoIjk5OTk5OTk5OTkiLCBzdHJTcmMsTnVtYmVyU3RyKTsgDQotCQkJaWYgKE51bWJlclN0ci5sZW5ndGgoKSA+PSAxMCApDQotCQkJCWNGb3JtYXQgPSAiKDk5OSkgOTk5LTk5OTkiOw0KLQkJCWVsc2UgDQotCQkJCWNGb3JtYXQgPSAiOTk5LTk5OTkiOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQljYXNlIDM6DQotCQljRm9ybWF0ID0gIjk5OS05OS05OTk5IjsNCi0JCWJyZWFrOw0KLQl9DQotCQ0KLQlzdGQ6OnN0cmluZyBzdHJEZXM7DQotCXV0aWw6OnByaW50eChjRm9ybWF0LHN0clNyYyxzdHJEZXMpOw0KLQlWYWx1ZSA9IENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoc3RyRGVzLmNfc3RyKCkpOw0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotDQotLy9mdW5jdGlvbiBBRlNwZWNpYWxfS2V5c3Ryb2tlRXgobWFzaykNCi1GWF9CT09MIENKU19QdWJsaWNNZXRob2RzOjpBRlNwZWNpYWxfS2V5c3Ryb2tlRXgoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQgKiljYzsNCi0JQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOw0KLQlDSlNfRXZlbnRIYW5kbGVyKiBwRXZlbnQgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7DQotDQotCUFTU0VSVChwRXZlbnQgIT0gTlVMTCk7DQotDQotCWlmIChwYXJhbXMuc2l6ZSgpIDwgMSkNCi0Jew0KLQkJc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQocENvbnRleHQsIElEU19TVFJJTkdfSlNQQVJBTUVSUk9SKTsNCi0JCXJldHVybiBGQUxTRTsNCi0JfQ0KLQ0KLQlpZighcEV2ZW50LT5tX3BWYWx1ZSkNCi0JCXJldHVybiBGQUxTRTsNCi0JQ0ZYX1dpZGVTdHJpbmcmIHZhbEV2ZW50ID0gcEV2ZW50LT5WYWx1ZSgpOw0KLQ0KLQlDRlhfV2lkZVN0cmluZyB3c3RyTWFzayA9IHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOw0KLQlpZiAod3N0ck1hc2suSXNFbXB0eSgpKSByZXR1cm4gVFJVRTsNCi0JDQotCXN0ZDo6d3N0cmluZyB3c3RyVmFsdWUodmFsRXZlbnQpOw0KLQkNCi0JaWYgKHBFdmVudC0+V2lsbENvbW1pdCgpKQ0KLQl7DQotCQlpZiAod3N0clZhbHVlLmVtcHR5KCkpDQotCQkJcmV0dXJuIFRSVUU7DQotCQlpbnQgaUluZGV4TWFzayA9IDA7DQotCQlmb3IgKHN0ZDo6d3N0cmluZzo6aXRlcmF0b3IgaXQgPSB3c3RyVmFsdWUuYmVnaW4oKTsgaXQgIT0gd3N0clZhbHVlLmVuZCgpOyBpdCsrKQ0KLQkJew0KLQkJCXdjaGFyX3Qgd19WYWx1ZSA9ICppdDsNCi0gICAgICAgICAgICBpZiAoIW1hc2tTYXRpc2ZpZWQod19WYWx1ZSx3c3RyTWFza1tpSW5kZXhNYXNrXSkpDQotCQkJCWJyZWFrOw0KLQkJCWlJbmRleE1hc2srKzsNCi0JCX0NCi0NCi0JCWlmIChpSW5kZXhNYXNrICE9IHdzdHJNYXNrLkdldExlbmd0aCgpIHx8IChpSW5kZXhNYXNrICE9IHdzdHJWYWx1ZS5zaXplKCkgJiYgd3N0ck1hc2suR2V0TGVuZ3RoKCkgIT0gMCkpDQotCQl7DQotCQkJQWxlcnQocENvbnRleHQsIEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTQUZOVU1CRVJfS0VZU1RST0tFKSk7DQotCQkJcEV2ZW50LT5SYygpID0gRkFMU0U7DQotCQl9DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQ0KLQkNCi0JQ0ZYX1dpZGVTdHJpbmcgJndpZGVDaGFuZ2UgPSBwRXZlbnQtPkNoYW5nZSgpOw0KLQlzdGQ6OndzdHJpbmcgd0NoYW5nZSh3aWRlQ2hhbmdlKTsNCi0JDQotCWlmICh3Q2hhbmdlLmVtcHR5KCkpDQotCQlyZXR1cm4gVFJVRTsNCi0gICAgaW50IGlJbmRleE1hc2sgPSBwRXZlbnQtPlNlbFN0YXJ0KCk7DQotCS8vaUluZGV4TWFzaysrOw0KLQkNCi0JDQotCWlmICh3c3RyVmFsdWUubGVuZ3RoKCkgLSAocEV2ZW50LT5TZWxFbmQoKS1wRXZlbnQtPlNlbFN0YXJ0KCkpICsgd0NoYW5nZS5sZW5ndGgoKSA+IChGWF9EV09SRCl3c3RyTWFzay5HZXRMZW5ndGgoKSkNCi0Jew0KLQkJQWxlcnQocENvbnRleHQsIEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1fVE9PTE9ORykpOw0KLQkJcEV2ZW50LT5SYygpID0gRkFMU0U7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQkNCi0JDQotCWlmIChpSW5kZXhNYXNrID49IHdzdHJNYXNrLkdldExlbmd0aCgpICYmICghd0NoYW5nZS5lbXB0eSgpKSkNCi0Jew0KLQkJQWxlcnQocENvbnRleHQsIEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1fVE9PTE9ORykpOw0KLQkJcEV2ZW50LT5SYygpID0gRkFMU0U7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQkNCi0JZm9yIChzdGQ6OndzdHJpbmc6Oml0ZXJhdG9yIGl0ID0gd0NoYW5nZS5iZWdpbigpOyBpdCAhPSB3Q2hhbmdlLmVuZCgpOyBpdCsrKQ0KLQl7DQotCQlpZiAoaUluZGV4TWFzayA+PSB3c3RyTWFzay5HZXRMZW5ndGgoKSkNCi0JCXsNCi0JCQlBbGVydChwQ29udGV4dCwgSlNHZXRTdHJpbmdGcm9tSUQocENvbnRleHQsIElEU19TVFJJTkdfSlNQQVJBTV9UT09MT05HKSk7DQotCQkJcEV2ZW50LT5SYygpID0gRkFMU0U7DQotCQkJcmV0dXJuIFRSVUU7DQotCQl9DQotCQl3Y2hhcl90IHdfTWFzayA9IHdzdHJNYXNrW2lJbmRleE1hc2tdOw0KLQkJaWYgKCFpc1Jlc2VydmVkTWFza0NoYXIod19NYXNrKSkNCi0JCXsNCi0JCQkvL3dDaGFuZ2UuaW5zZXJ0KGl0LHdfTWFzayk7CQkJCQ0KLQkJCSppdCA9IHdfTWFzazsNCi0JCX0NCi0JCXdjaGFyX3Qgd19DaGFuZ2UgPSAqaXQ7DQotCQkNCi0gICAgICAgIGlmICghbWFza1NhdGlzZmllZCh3X0NoYW5nZSx3X01hc2spKQ0KLQkJew0KLQkJCXBFdmVudC0+UmMoKSA9IEZBTFNFOw0KLQkJCXJldHVybiBUUlVFOw0KLQkJfQ0KLQkJaUluZGV4TWFzaysrOw0KLQl9DQotCQ0KLQl3aWRlQ2hhbmdlID0gd0NoYW5nZS5jX3N0cigpOwkNCi0JDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi0NCi0vL2Z1bmN0aW9uIEFGU3BlY2lhbF9LZXlzdHJva2UocHNmKQ0KLUZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6OkFGU3BlY2lhbF9LZXlzdHJva2UoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDo6R2V0SXNvbGF0ZShjYyk7DQotDQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotCUNKU19FdmVudEhhbmRsZXIqIHBFdmVudCA9IHBDb250ZXh0LT5HZXRFdmVudEhhbmRsZXIoKTsNCi0JQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKHBhcmFtcy5zaXplKCkgIT0gMSkNCi0Jew0KLQkJc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQocENvbnRleHQsIElEU19TVFJJTkdfSlNQQVJBTUVSUk9SKTsNCi0JCXJldHVybiBGQUxTRTsNCi0JfQ0KLQ0KLQlzdGQ6OnN0cmluZyBjRm9ybWF0Ow0KLQlpbnQgaUluZGV4ID0gKGludClwYXJhbXNbMF07CQ0KLQ0KLQlpZighcEV2ZW50LT5tX3BWYWx1ZSkNCi0JCXJldHVybiBGQUxTRTsNCi0JLy9DSlNfVmFsdWUgdmFsID0gcEV2ZW50LT5WYWx1ZSgpOw0KLQlDRlhfV2lkZVN0cmluZyYgdmFsID0gcEV2ZW50LT5WYWx1ZSgpOw0KLQlzdGQ6OnN0cmluZyBzdHJTcmMgPSAoRlhfTFBDU1RSKUNGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZSh2YWwpOw0KLQlzdGQ6OndzdHJpbmcgd3N0ckNoYW5nZShwRXZlbnQtPkNoYW5nZSgpKTsNCi0JDQotCXN3aXRjaCAoaUluZGV4KSANCi0Jew0KLQljYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAgIA0KLQkJY0Zvcm1hdCA9ICI5OTk5OSI7DQotCQlicmVhazsNCi0JY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICANCi0JCS8vY0Zvcm1hdCA9ICI5OTk5OS05OTk5IjsNCi0JCWNGb3JtYXQgPSAiOTk5OTk5OTk5IjsNCi0JCWJyZWFrOw0KLQljYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgICAgIA0KLQkJew0KLQkJCXN0ZDo6c3RyaW5nIE51bWJlclN0cjsNCi0JCQl1dGlsOjpwcmludHgoIjk5OTk5OTk5OTkiLCBzdHJTcmMsTnVtYmVyU3RyKTsgDQotCQkJaWYgKHN0clNyYy5sZW5ndGgoKSArIHdzdHJDaGFuZ2UubGVuZ3RoKCkgPiA3ICkNCi0JCQkJLy9jRm9ybWF0ID0gIig5OTkpIDk5OS05OTk5IjsNCi0JCQkJY0Zvcm1hdCA9ICI5OTk5OTk5OTk5IjsNCi0JCQllbHNlIA0KLQkJCQkvL2NGb3JtYXQgPSAiOTk5LTk5OTkiOw0KLQkJCQljRm9ybWF0ID0gIjk5OTk5OTkiOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQljYXNlIDM6DQotCQkvL2NGb3JtYXQgPSAiOTk5LTk5LTk5OTkiOw0KLQkJY0Zvcm1hdCA9ICI5OTk5OTk5OTkiOw0KLQkJYnJlYWs7DQotCX0NCi0gICAgDQotCUNKU19QYXJhbWV0ZXJzIHBhcmFtczI7DQotCUNKU19WYWx1ZSB2TWFzayhpc29sYXRlLCBjRm9ybWF0LmNfc3RyKCkpOw0KLQlwYXJhbXMyLnB1c2hfYmFjayh2TWFzayk7DQotCQ0KLSAgICByZXR1cm4gQUZTcGVjaWFsX0tleXN0cm9rZUV4KGNjLHBhcmFtczIsdlJldCxzRXJyb3IpOw0KLX0NCi0NCi1GWF9CT09MIENKU19QdWJsaWNNZXRob2RzOjpBRk1lcmdlQ2hhbmdlKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0ICopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0JQ0pTX0V2ZW50SGFuZGxlciogcEV2ZW50SGFuZGxlciA9IHBDb250ZXh0LT5HZXRFdmVudEhhbmRsZXIoKTsNCi0JQVNTRVJUKHBFdmVudEhhbmRsZXIgIT0gTlVMTCk7DQotDQotCWlmIChwYXJhbXMuc2l6ZSgpICE9IDEpDQotCXsNCi0JCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7DQotCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0NCi0JQ0ZYX1dpZGVTdHJpbmcgc3dWYWx1ZTsNCi0JaWYgKHBFdmVudEhhbmRsZXItPm1fcFZhbHVlICE9IE5VTEwpDQotCQlzd1ZhbHVlID0gcEV2ZW50SGFuZGxlci0+VmFsdWUoKTsNCi0NCi0JaWYgKHBFdmVudEhhbmRsZXItPldpbGxDb21taXQoKSkNCi0Jew0KLQkJdlJldCA9IHN3VmFsdWU7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQ0KLQlDRlhfV2lkZVN0cmluZyBwcmVmaXgscG9zdGZpeDsNCi0NCi0JaWYgKHBFdmVudEhhbmRsZXItPlNlbFN0YXJ0KCkgPj0gMCkNCi0JCXByZWZpeCA9IHN3VmFsdWUuTWlkKDAscEV2ZW50SGFuZGxlci0+U2VsU3RhcnQoKSk7DQotCWVsc2UNCi0JCXByZWZpeCA9IEwiIjsNCi0NCi0NCi0JaWYgKHBFdmVudEhhbmRsZXItPlNlbEVuZCgpID49IDAgJiYgcEV2ZW50SGFuZGxlci0+U2VsRW5kKCkgPD0gc3dWYWx1ZS5HZXRMZW5ndGgoKSkNCi0JCXBvc3RmaXggPSBzd1ZhbHVlLk1pZChwRXZlbnRIYW5kbGVyLT5TZWxFbmQoKSwgc3dWYWx1ZS5HZXRMZW5ndGgoKSAtIHBFdmVudEhhbmRsZXItPlNlbEVuZCgpKTsNCi0JZWxzZSBwb3N0Zml4ID0gTCIiOw0KLQ0KLQl2UmV0ID0gcHJlZml4ICsgcEV2ZW50SGFuZGxlci0+Q2hhbmdlKCkgKyBwb3N0Zml4Ow0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBDSlNfUHVibGljTWV0aG9kczo6QUZQYXJzZURhdGVFeChPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotDQotCWlmIChwYXJhbXMuc2l6ZSgpICE9IDIpDQotCXsNCi0JCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7DQotCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0NCi0JQ0ZYX1dpZGVTdHJpbmcgc1ZhbHVlID0gcGFyYW1zWzBdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7DQotCUNGWF9XaWRlU3RyaW5nIHNGb3JtYXQgPSBwYXJhbXNbMV0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsNCi0NCi0JRlhfQk9PTCBiV3JvbmdGb3JtYXQgPSBGQUxTRTsNCi0JZG91YmxlIGREYXRlID0gTWFrZVJlZ3VsYXJEYXRlKHNWYWx1ZSxzRm9ybWF0LGJXcm9uZ0Zvcm1hdCk7DQotDQotCWlmIChKU19Qb3J0SXNOYW4oZERhdGUpKQ0KLQl7DQotCQlDRlhfV2lkZVN0cmluZyBzd01zZzsNCi0JCXN3TXNnLkZvcm1hdChKU0dldFN0cmluZ0Zyb21JRChwQ29udGV4dCwgSURTX1NUUklOR19KU1BBUlNFREFURSksIChGWF9MUENXU1RSKXNGb3JtYXQpOw0KLQkJQWxlcnQoKENKU19Db250ZXh0ICopY2MsIHN3TXNnKTsNCi0JCXJldHVybiBGQUxTRTsNCi0JfQ0KLQkNCi0JdlJldCA9IGREYXRlOw0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBDSlNfUHVibGljTWV0aG9kczo6QUZTaW1wbGUoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlpZiAocGFyYW1zLnNpemUoKSAhPSAzKQ0KLQl7DQotCQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQgKiljYzsNCi0JCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0NCi0JCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7DQotCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0NCi0JdlJldCA9IChkb3VibGUpQUZfU2ltcGxlKHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpLCAoZG91YmxlKXBhcmFtc1sxXSwgKGRvdWJsZSlwYXJhbXNbMl0pOw0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBDSlNfUHVibGljTWV0aG9kczo6QUZNYWtlTnVtYmVyKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JaWYgKHBhcmFtcy5zaXplKCkgIT0gMSkNCi0Jew0KLQkJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0ICopY2M7DQotCQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotDQotCQlzRXJyb3IgPSBKU0dldFN0cmluZ0Zyb21JRChwQ29udGV4dCwgSURTX1NUUklOR19KU1BBUkFNRVJST1IpOw0KLQkJcmV0dXJuIEZBTFNFOw0KLQl9DQotICAgIHZSZXQgPSBQYXJzZVN0cmluZ1RvTnVtYmVyKHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpKTsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6OkFGU2ltcGxlX0NhbGN1bGF0ZShPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCXY4OjpJc29sYXRlKiBpc29sYXRlID0gOjpHZXRJc29sYXRlKGNjKTsNCi0NCi0JQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0ICopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0NCi0JaWYgKHBhcmFtcy5zaXplKCkgIT0gMikNCi0Jew0KLQkJc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQocENvbnRleHQsIElEU19TVFJJTkdfSlNQQVJBTUVSUk9SKTsNCi0JCXJldHVybiBGQUxTRTsNCi0JfQ0KLQ0KLQlDSlNfVmFsdWUgcGFyYW1zMSA9IHBhcmFtc1sxXTsNCi0NCi0JaWYgKCFwYXJhbXMxLklzQXJyYXlPYmplY3QoKSAmJiBwYXJhbXMxLkdldFR5cGUoKSAhPSBWVF9zdHJpbmcpDQotCXsNCi0JCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7DQotCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0JDQotCUNQREZTREtfRG9jdW1lbnQqIHBSZWFkZXJEb2MgPSBwQ29udGV4dC0+R2V0UmVhZGVyRG9jdW1lbnQoKTsNCi0gICAgQVNTRVJUKHBSZWFkZXJEb2MgIT0gTlVMTCk7DQotDQotCUNQREZTREtfSW50ZXJGb3JtKiBwUmVhZGVySW50ZXJGb3JtID0gcFJlYWRlckRvYy0+R2V0SW50ZXJGb3JtKCk7DQotCUFTU0VSVChwUmVhZGVySW50ZXJGb3JtICE9IE5VTEwpOw0KLQ0KLQlDUERGX0ludGVyRm9ybSogcEludGVyRm9ybSA9IHBSZWFkZXJJbnRlckZvcm0tPkdldEludGVyRm9ybSgpOw0KLQlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsNCi0NCi0JZG91YmxlIGRWYWx1ZTsNCi0JQ0ZYX1dpZGVTdHJpbmcgc0Z1bmN0aW9uID0gcGFyYW1zWzBdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7DQotCWlmICh3Y3NjbXAoc0Z1bmN0aW9uLCBMIlBSRCIpID09IDApDQotICAgIAlkVmFsdWUgPSAxLjA7DQotCWVsc2UNCi0JCWRWYWx1ZSA9IDAuMDsNCi0NCi0JQ0pTX0FycmF5IEZpZWxkTmFtZUFycmF5ID0gQUZfTWFrZUFycmF5RnJvbUxpc3QoaXNvbGF0ZSxwYXJhbXMxKTsNCi0NCi0JaW50IG5GaWVsZHNDb3VudCA9IDA7DQotDQotCWZvciAoaW50IGk9MCxpc3o9RmllbGROYW1lQXJyYXkuR2V0TGVuZ3RoKCk7IGk8aXN6OyBpKyspDQotCXsNCi0JCUNKU19WYWx1ZSBqc1ZhbHVlKGlzb2xhdGUpOw0KLQkJRmllbGROYW1lQXJyYXkuR2V0RWxlbWVudChpLGpzVmFsdWUpOw0KLSAgICAgICAgQ0ZYX1dpZGVTdHJpbmcgd3NGaWVsZE5hbWUgPSBqc1ZhbHVlLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7DQotDQotICAgICAgICBmb3IgKGludCBqPTAsanN6PXBJbnRlckZvcm0tPkNvdW50RmllbGRzKHdzRmllbGROYW1lKTsgajxqc3o7IGorKykNCi0JCXsNCi0JCQlpZiAoQ1BERl9Gb3JtRmllbGQqIHBGb3JtRmllbGQgPSBwSW50ZXJGb3JtLT5HZXRGaWVsZChqLCB3c0ZpZWxkTmFtZSkpDQotCQkJew0KLQkJCQlkb3VibGUgZFRlbXAgPSAwLjA7DQotDQotCQkJCXN3aXRjaCAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkpDQotCQkJCXsNCi0JCQkJY2FzZSBGSUVMRFRZUEVfVEVYVEZJRUxEOg0KLQkJCQljYXNlIEZJRUxEVFlQRV9DT01CT0JPWDoNCi0JCQkJCXsNCi0JCQkJCQlkVGVtcCA9IFBhcnNlU3RyaW5nVG9OdW1iZXIocEZvcm1GaWVsZC0+R2V0VmFsdWUoKSk7DQotCQkJCQkJYnJlYWs7DQotCQkJCQl9DQotCQkJCWNhc2UgRklFTERUWVBFX1BVU0hCVVRUT046DQotCQkJCQl7DQotCQkJCQkJZFRlbXAgPSAwLjA7DQotCQkJCQkJYnJlYWs7DQotCQkJCQl9DQotCQkJCWNhc2UgRklFTERUWVBFX0NIRUNLQk9YOg0KLQkJCQljYXNlIEZJRUxEVFlQRV9SQURJT0JVVFRPTjoNCi0JCQkJCXsNCi0JCQkJCQlkVGVtcCA9IDAuMDsNCi0JCQkJCQlmb3IgKGludCBjPTAsY3N6PXBGb3JtRmllbGQtPkNvdW50Q29udHJvbHMoKTsgYzxjc3o7IGMrKykNCi0JCQkJCQl7DQotCQkJCQkJCWlmIChDUERGX0Zvcm1Db250cm9sKiBwRm9ybUN0cmwgPSBwRm9ybUZpZWxkLT5HZXRDb250cm9sKGMpKQ0KLQkJCQkJCQl7DQotCQkJCQkJCQlpZiAocEZvcm1DdHJsLT5Jc0NoZWNrZWQoKSkNCi0JCQkJCQkJCXsNCi0JCQkJCQkJCQlkVGVtcCArPSBQYXJzZVN0cmluZ1RvTnVtYmVyKHBGb3JtQ3RybC0+R2V0RXhwb3J0VmFsdWUoKSk7DQotCQkJCQkJCQkJYnJlYWs7DQotCQkJCQkJCQl9DQotCQkJCQkJCQllbHNlDQotCQkJCQkJCQkJY29udGludWU7DQotCQkJCQkJCX0NCi0JCQkJCQl9DQotCQkJCQkJYnJlYWs7DQotCQkJCQl9DQotCQkJCWNhc2UgRklFTERUWVBFX0xJU1RCT1g6DQotCQkJCQl7DQotCQkJCQkJZFRlbXAgPSAwLjA7DQotCQkJCQkJaWYgKHBGb3JtRmllbGQtPkNvdW50U2VsZWN0ZWRJdGVtcygpID4gMSkNCi0JCQkJCQkJYnJlYWs7DQotCQkJCQkJZWxzZQ0KLQkJCQkJCXsNCi0JCQkJCQkJZFRlbXAgPSBQYXJzZVN0cmluZ1RvTnVtYmVyKHBGb3JtRmllbGQtPkdldFZhbHVlKCkpOw0KLQkJCQkJCQlicmVhazsNCi0JCQkJCQl9DQotCQkJCQl9DQotCQkJCWRlZmF1bHQ6DQotCQkJCQlicmVhazsNCi0JCQkJfQ0KLQ0KLQkJCQlpZiAoaSA9PSAwICYmIGogPT0gMCAmJiAod2NzY21wKHNGdW5jdGlvbixMIk1JTiIpID09IDAgfHwgd2NzY21wKHNGdW5jdGlvbiwgTCJNQVgiKSA9PSAwKSkNCi0JCQkJCWRWYWx1ZSA9IGRUZW1wOw0KLQ0KLQkJCQlkVmFsdWUgPSBBRl9TaW1wbGUoc0Z1bmN0aW9uLCBkVmFsdWUsIGRUZW1wKTsNCi0NCi0JCQkJbkZpZWxkc0NvdW50Kys7DQotCQkJfQ0KLQkJfQ0KLQl9DQotDQotCWlmICh3Y3NjbXAoc0Z1bmN0aW9uLCBMIkFWRyIpID09IDAgJiYgbkZpZWxkc0NvdW50ID4gMCkNCi0JCWRWYWx1ZSAvPSBuRmllbGRzQ291bnQ7DQotDQotCWRWYWx1ZSA9IChkb3VibGUpZmxvb3IoZFZhbHVlICogRlhTWVNfcG93KChkb3VibGUpMTAsKGRvdWJsZSk2KSArIDAuNDkpIC8gRlhTWVNfcG93KChkb3VibGUpMTAsKGRvdWJsZSk2KTsNCi0JQ0pTX1ZhbHVlIGpzVmFsdWUoaXNvbGF0ZSxkVmFsdWUpOw0KLQlpZigoQ0pTX0V2ZW50SGFuZGxlciopcENvbnRleHQtPkdldEV2ZW50SGFuZGxlcigpLT5tX3BWYWx1ZSkNCi0JCSgoQ0pTX0V2ZW50SGFuZGxlciopcENvbnRleHQtPkdldEV2ZW50SGFuZGxlcigpKS0+VmFsdWUoKSA9IGpzVmFsdWU7DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi0vKiBUaGlzIGZ1bmN0aW9uIHZhbGlkYXRlcyB0aGUgY3VycmVudCBldmVudCB0byBlbnN1cmUgdGhhdCBpdHMgdmFsdWUgaXMgDQotKiogd2l0aGluIHRoZSBzcGVjaWZpZWQgcmFuZ2UuICovDQotDQotRlhfQk9PTCBDSlNfUHVibGljTWV0aG9kczo6QUZSYW5nZV9WYWxpZGF0ZShPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotCUNKU19FdmVudEhhbmRsZXIqIHBFdmVudCA9IHBDb250ZXh0LT5HZXRFdmVudEhhbmRsZXIoKTsNCi0JQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKHBhcmFtcy5zaXplKCkgIT0gNCkgDQotCXsNCi0JCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7DQotCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0NCi0JaWYoIXBFdmVudC0+bV9wVmFsdWUpDQotCQlyZXR1cm4gRkFMU0U7DQotCWlmIChwRXZlbnQtPlZhbHVlKCkuSXNFbXB0eSgpICkNCi0JCXJldHVybiBUUlVFOw0KLQlkb3VibGUgZEVlbnRWYWx1ZSA9IGF0b2YoQ0ZYX0J5dGVTdHJpbmc6OkZyb21Vbmljb2RlKHBFdmVudC0+VmFsdWUoKSkpOw0KLQlGWF9CT09MIGJHcmVhdGVyVGhhbiwgYkxlc3NUaGFuOw0KLQlkb3VibGUgIGRHcmVhdGVyVGhhbiwgZExlc3NUaGFuOw0KLSAgICBiR3JlYXRlclRoYW4gPSAoRlhfQk9PTClwYXJhbXNbMF07DQotCUNGWF9XaWRlU3RyaW5nIHN3TXNnOw0KLQlkR3JlYXRlclRoYW4gPSAoZG91YmxlKXBhcmFtc1sxXTsNCi0JYkxlc3NUaGFuID0gKEZYX0JPT0wpcGFyYW1zWzJdOw0KLQlkTGVzc1RoYW4gPSAoZG91YmxlKXBhcmFtc1szXTsNCi0NCi0JaWYgKGJHcmVhdGVyVGhhbiAmJiBiTGVzc1RoYW4pDQotCXsNCi0JCWlmIChkRWVudFZhbHVlIDwgZEdyZWF0ZXJUaGFuIHx8IGRFZW50VmFsdWUgPiBkTGVzc1RoYW4pDQotCQkJc3dNc2cuRm9ybWF0KEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUkFOR0UxKSwoRlhfTFBDV1NUUilwYXJhbXNbMV0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKSwgKEZYX0xQQ1dTVFIpcGFyYW1zWzNdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCkpOw0KLQl9DQotCWVsc2UgaWYgKGJHcmVhdGVyVGhhbikNCi0Jew0KLQkJaWYgKGRFZW50VmFsdWUgPCBkR3JlYXRlclRoYW4pDQotCQkJc3dNc2cuRm9ybWF0KEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUkFOR0UyKSwgKEZYX0xQQ1dTVFIpcGFyYW1zWzFdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCkpOw0KLQl9DQotCWVsc2UgaWYgKGJMZXNzVGhhbikNCi0Jew0KLQkJaWYgKGRFZW50VmFsdWUgPiBkTGVzc1RoYW4pDQotCQkJc3dNc2cuRm9ybWF0KEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUkFOR0UzKSwgKEZYX0xQQ1dTVFIpcGFyYW1zWzNdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCkpOw0KLQl9DQotDQotCWlmICghc3dNc2cuSXNFbXB0eSgpKQ0KLQl7DQotCQlBbGVydChwQ29udGV4dCwgc3dNc2cpOw0KLQkJcEV2ZW50LT5SYygpID0gRkFMU0U7DQotCX0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6OkFGRXh0cmFjdE51bXMoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDo6R2V0SXNvbGF0ZShjYyk7DQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0NCi0JaWYgKHBhcmFtcy5zaXplKCkgIT0gMSkgDQotCXsNCi0JCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7DQotCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0NCi0JQ0pTX0FycmF5IG51bXMoaXNvbGF0ZSk7DQotDQotCUNGWF9XaWRlU3RyaW5nIHN0ciA9IHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOw0KLQlDRlhfV2lkZVN0cmluZyBzUGFydDsNCi0NCi0JaWYgKHN0ci5HZXRBdCgwKSA9PSBMJy4nIHx8IHN0ci5HZXRBdCgwKSA9PSBMJywnKQ0KLQkJc3RyID0gTCIwIiArIHN0cjsNCi0NCi0JaW50IG5JbmRleCA9IDA7DQotCWZvciAoaW50IGk9MCwgc3o9c3RyLkdldExlbmd0aCgpOyBpPHN6OyBpKyspDQotCXsNCi0JCUZYX1dDSEFSIHdjID0gc3RyLkdldEF0KGkpOw0KLQkJaWYgKElzRGlnaXQoKHdjaGFyX3Qpd2MpKQ0KLQkJew0KLQkJCXNQYXJ0ICs9IHdjOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCWlmIChzUGFydC5HZXRMZW5ndGgoKSA+IDApDQotCQkJew0KLQkJCQludW1zLlNldEVsZW1lbnQobkluZGV4LENKU19WYWx1ZShpc29sYXRlLChGWF9MUENXU1RSKXNQYXJ0KSk7DQotCQkJCXNQYXJ0ID0gTCIiOw0KLQkJCQluSW5kZXggKys7DQotCQkJfQ0KLQkJfQ0KLQl9DQotDQotCWlmIChzUGFydC5HZXRMZW5ndGgoKSA+IDApDQotCXsNCi0JCW51bXMuU2V0RWxlbWVudChuSW5kZXgsQ0pTX1ZhbHVlKGlzb2xhdGUsKEZYX0xQQ1dTVFIpc1BhcnQpKTsJDQotCX0NCi0NCi0JaWYgKG51bXMuR2V0TGVuZ3RoKCkgPiAwKQ0KLQkJdlJldCA9IG51bXM7DQotCWVsc2UNCi0JCXZSZXQuU2V0TnVsbCgpOw0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KYXZhU2NyaXB0LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0lKYXZhU2NyaXB0LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0RlZmluZS5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19PYmplY3QuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfVmFsdWUuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvUHVibGljTWV0aG9kcy5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19FdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvcmVzb3VyY2UuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfQ29udGV4dC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19WYWx1ZS5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC91dGlsLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0ZpZWxkLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L2NvbG9yLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1J1bnRpbWUuaCIKKworc3RhdGljIHY4OjpJc29sYXRlKiBHZXRJc29sYXRlKElGWEpTX0NvbnRleHQqIGNjKQoreworCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKworCUNKU19SdW50aW1lKiBwUnVudGltZSA9IHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKTsKKwlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7CisKKwlyZXR1cm4gcFJ1bnRpbWUtPkdldElzb2xhdGUoKTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDSlNfUHVibGljTWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIERPVUJMRV9DT1JSRUNUCTAuMDAwMDAwMDAwMDAwMDAxCisKK0JFR0lOX0pTX1NUQVRJQ19HTE9CQUxfRlVOKENKU19QdWJsaWNNZXRob2RzKQorCUpTX1NUQVRJQ19HTE9CQUxfRlVOX0VOVFJZKEFGTnVtYmVyX0Zvcm1hdCw2KQorCUpTX1NUQVRJQ19HTE9CQUxfRlVOX0VOVFJZKEFGTnVtYmVyX0tleXN0cm9rZSw2KQorCUpTX1NUQVRJQ19HTE9CQUxfRlVOX0VOVFJZKEFGUGVyY2VudF9Gb3JtYXQsMikKKwlKU19TVEFUSUNfR0xPQkFMX0ZVTl9FTlRSWShBRlBlcmNlbnRfS2V5c3Ryb2tlLDIpCisJSlNfU1RBVElDX0dMT0JBTF9GVU5fRU5UUlkoQUZEYXRlX0Zvcm1hdEV4LDEpCisJSlNfU1RBVElDX0dMT0JBTF9GVU5fRU5UUlkoQUZEYXRlX0tleXN0cm9rZUV4LDEpCisJSlNfU1RBVElDX0dMT0JBTF9GVU5fRU5UUlkoQUZEYXRlX0Zvcm1hdCwxKQorCUpTX1NUQVRJQ19HTE9CQUxfRlVOX0VOVFJZKEFGRGF0ZV9LZXlzdHJva2UsMSkKKwlKU19TVEFUSUNfR0xPQkFMX0ZVTl9FTlRSWShBRlRpbWVfRm9ybWF0RXgsMSkKKwlKU19TVEFUSUNfR0xPQkFMX0ZVTl9FTlRSWShBRlRpbWVfS2V5c3Ryb2tlRXgsMSkKKwlKU19TVEFUSUNfR0xPQkFMX0ZVTl9FTlRSWShBRlRpbWVfRm9ybWF0LDEpCisJSlNfU1RBVElDX0dMT0JBTF9GVU5fRU5UUlkoQUZUaW1lX0tleXN0cm9rZSwxKQorCUpTX1NUQVRJQ19HTE9CQUxfRlVOX0VOVFJZKEFGU3BlY2lhbF9Gb3JtYXQsMSkKKwlKU19TVEFUSUNfR0xPQkFMX0ZVTl9FTlRSWShBRlNwZWNpYWxfS2V5c3Ryb2tlLDEpCisJSlNfU1RBVElDX0dMT0JBTF9GVU5fRU5UUlkoQUZTcGVjaWFsX0tleXN0cm9rZUV4LDEpCisJSlNfU1RBVElDX0dMT0JBTF9GVU5fRU5UUlkoQUZTaW1wbGUsMykKKwlKU19TVEFUSUNfR0xPQkFMX0ZVTl9FTlRSWShBRk1ha2VOdW1iZXIsMSkKKwlKU19TVEFUSUNfR0xPQkFMX0ZVTl9FTlRSWShBRlNpbXBsZV9DYWxjdWxhdGUsMikKKwlKU19TVEFUSUNfR0xPQkFMX0ZVTl9FTlRSWShBRlJhbmdlX1ZhbGlkYXRlLDQpCisJSlNfU1RBVElDX0dMT0JBTF9GVU5fRU5UUlkoQUZNZXJnZUNoYW5nZSwxKQorCUpTX1NUQVRJQ19HTE9CQUxfRlVOX0VOVFJZKEFGUGFyc2VEYXRlRXgsMikKKwlKU19TVEFUSUNfR0xPQkFMX0ZVTl9FTlRSWShBRkV4dHJhY3ROdW1zLDEpCitFTkRfSlNfU1RBVElDX0dMT0JBTF9GVU4oKQorCitJTVBMRU1FTlRfSlNfU1RBVElDX0dMT0JBTF9GVU4oQ0pTX1B1YmxpY01ldGhvZHMpCisKK3N0cnVjdCBzdHJ1X1RiQ29udmVydAoreworCUZYX0xQQ1NUUiBscHN6SlNNYXJrOworCUZYX0xQQ1NUUiBscHN6Q3BwTWFyazsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1X1RiQ29udmVydCBmY1RhYmxlW10gPSB7Im1tbW0iLCIlQiIsCisJIm1tbSIsICIlYiIsCisJIm1tIiwgICIlbSIsCisJLy8ibSIKKwkiZGRkZCIsIiVBIiwKKwkiZGRkIiwgIiVhIiwKKwkiZGQiLCAgIiVkIiwKKwkvLyJkIiwgICAiJXciLAorCSJ5eXl5IiwiJVkiLAorCSJ5eSIsICAiJXkiLAorCSJISCIsICAiJUgiLAorCS8vIkgiCisJImhoIiwgICIlSSIsCisJLy8iaCIKKwkiTU0iLCAgIiVNIiwKKwkvLyJNIgorCSJzcyIsICAiJVMiLAorCS8vInMKKwkidHQiLCAgIiVwIgorCS8vInQiCit9OworCitzdGF0aWMgRlhfTFBDV1NUUiBtb250aHNbXSA9Cit7CisJKEZYX0xQQ1dTVFIpTCJKYW4iLCAoRlhfTFBDV1NUUilMIkZlYiIsIChGWF9MUENXU1RSKUwiTWFyIiwgKEZYX0xQQ1dTVFIpTCJBcHIiLCAoRlhfTFBDV1NUUilMIk1heSIsIChGWF9MUENXU1RSKUwiSnVuIiwgKEZYX0xQQ1dTVFIpTCJKdWwiLCAoRlhfTFBDV1NUUilMIkF1ZyIsIChGWF9MUENXU1RSKUwiU2VwIiwgKEZYX0xQQ1dTVFIpTCJPY3QiLCAoRlhfTFBDV1NUUilMIk5vdiIsIChGWF9MUENXU1RSKUwiRGVjIgorfTsKKworc3RhdGljIEZYX0xQQ1dTVFIgZnVsbG1vbnRoc1tdID0gCit7IAorCShGWF9MUENXU1RSKUwiSmFudWFyeSIsIChGWF9MUENXU1RSKUwiRmVicnVhcnkiLCAoRlhfTFBDV1NUUilMIk1hcmNoIiwgKEZYX0xQQ1dTVFIpTCJBcHJpbCIsIChGWF9MUENXU1RSKUwiTWF5IiwgKEZYX0xQQ1dTVFIpTCJKdW5lIiwgKEZYX0xQQ1dTVFIpTCJKdWx5IiwgKEZYX0xQQ1dTVFIpTCJBdWd1c3QiLCAoRlhfTFBDV1NUUilMIlNlcHRlbWJlciIsIChGWF9MUENXU1RSKUwiT2N0b2JlciIsIChGWF9MUENXU1RSKUwiTm92ZW1iZXIiLCAoRlhfTFBDV1NUUilMIkRlY2VtYmVyIiAKK307CisKK0ZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6OklzTnVtYmVyKEZYX0xQQ1dTVFIgc3RyaW5nKQoreworCUNGWF9XaWRlU3RyaW5nIHNUcmltID0gU3RyVHJpbShzdHJpbmcpOworCUZYX0xQQ1dTVFIgcFRyaW0gPSBzVHJpbTsKKwlGWF9MUENXU1RSIHAgPSBwVHJpbTsKKworCisJRlhfQk9PTCBiRG90ID0gRkFMU0U7CisJRlhfQk9PTCBiS1hKUyA9IEZBTFNFOworCisJd2NoYXJfdCBjOworCXdoaWxlICgoYyA9ICpwKSkKKwl7CisJCWlmIChjID09ICcuJyB8fCBjID09ICcsJykKKwkJeworCQkJaWYgKGJEb3QpIHJldHVybiBGQUxTRTsKKwkJCWJEb3QgPSBUUlVFOworCQl9CisJCWVsc2UgaWYgKGMgPT0gJy0nIHx8IGMgPT0gJysnKQorCQl7CisJCQlpZiAocCAhPSBwVHJpbSkKKwkJCQlyZXR1cm4gRkFMU0U7CisJCX0KKwkJZWxzZSBpZiAoYyA9PSAnZScgfHwgYyA9PSAnRScpCisJCXsKKwkJCWlmIChiS1hKUykgcmV0dXJuIEZBTFNFOworCisJCQlwKys7CisJCQljID0gKnA7CisJCQlpZiAoYyA9PSAnKycgfHwgYyA9PSAnLScpCisJCQl7CisJCQkJYktYSlMgPSBUUlVFOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXJldHVybiBGQUxTRTsKKwkJCX0KKwkJfQorCQllbHNlIGlmICghSXNEaWdpdChjKSkKKwkJeworCQkJcmV0dXJuIEZBTFNFOworCQl9CisJCXArKzsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBDSlNfUHVibGljTWV0aG9kczo6SXNEaWdpdCh3Y2hhcl90IGNoKQoreworCXJldHVybiAoY2ggPj0gTCcwJyAmJiBjaCA8PSBMJzknKTsKK30KKworRlhfQk9PTCBDSlNfUHVibGljTWV0aG9kczo6SXNEaWdpdChjaGFyIGNoKQoreworCXJldHVybiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jyk7Cit9CisKK0ZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6OklzQWxwaGFiZXRpYyh3Y2hhcl90IGNoKQoreworCXJldHVybiAoKGNoID49IEwnYScgJiYgY2ggPD0gTCd6JykgfHwgKGNoID49IEwnQScgJiYgY2ggPD0gTCdaJykpOworfQorCitGWF9CT09MIENKU19QdWJsaWNNZXRob2RzOjpJc0FscGhhTnVtZXJpYyh3Y2hhcl90IGNoKQoreworCXJldHVybiAoSXNEaWdpdChjaCkgfHwgSXNBbHBoYWJldGljKGNoKSk7Cit9CisKK0ZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6Om1hc2tTYXRpc2ZpZWQod2NoYXJfdCBjX0NoYW5nZSx3Y2hhcl90IGNfTWFzaykKK3sKKwlzd2l0Y2ggKGNfTWFzaykKKwl7CisJY2FzZSBMJzknOgorICAgICAgICByZXR1cm4gSXNEaWdpdChjX0NoYW5nZSk7CQkKKyAgICBjYXNlIEwnQSc6CisgICAgICAgIHJldHVybiBJc0FscGhhYmV0aWMoY19DaGFuZ2UpOwkJCisgICAgY2FzZSBMJ08nOgorICAgICAgICByZXR1cm4gSXNBbHBoYU51bWVyaWMoY19DaGFuZ2UpOwkJCisgICAgY2FzZSBMJ1gnOgorICAgICAgICByZXR1cm4gVFJVRTsJCQorCWRlZmF1bHQ6CisgICAgICAgIHJldHVybiAoY19DaGFuZ2UgPT0gY19NYXNrKTsKKwl9Cit9CisKK0ZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6OmlzUmVzZXJ2ZWRNYXNrQ2hhcih3Y2hhcl90IGNoKQoreworCXJldHVybiBjaCA9PSBMJzknIHx8IGNoID09IEwnQScgfHwgY2ggPT0gTCdPJyB8fCBjaCA9PSBMJ1gnOworfQorCitkb3VibGUgQ0pTX1B1YmxpY01ldGhvZHM6OkFGX1NpbXBsZShGWF9MUENXU1RSIHNGdWN0aW9uLCBkb3VibGUgZFZhbHVlMSwgZG91YmxlIGRWYWx1ZTIpCit7CisJaWYgKEZYU1lTX3djc2ljbXAoc0Z1Y3Rpb24sKEZYX0xQQ1dTVFIpTCJBVkciKSA9PSAwIHx8IEZYU1lTX3djc2ljbXAoc0Z1Y3Rpb24sKEZYX0xQQ1dTVFIpTCJTVU0iKSA9PSAwKQorCXsKKwkJcmV0dXJuIGRWYWx1ZTEgKyBkVmFsdWUyOworCX0KKwllbHNlIGlmIChGWFNZU193Y3NpY21wKHNGdWN0aW9uLCAoRlhfTFBDV1NUUilMIlBSRCIpID09IDApCisJeworCQlyZXR1cm4gZFZhbHVlMSAqIGRWYWx1ZTI7CisJfQorCWVsc2UgaWYgKEZYU1lTX3djc2ljbXAoc0Z1Y3Rpb24sKEZYX0xQQ1dTVFIpTCJNSU4iKSA9PSAwKQorCXsKKwkJcmV0dXJuIEZYX01JTihkVmFsdWUxLCBkVmFsdWUyKTsKKwl9CisJZWxzZSBpZiAoRlhTWVNfd2NzaWNtcChzRnVjdGlvbiwoRlhfTFBDV1NUUilMIk1BWCIpID09IDApCisJeworCQlyZXR1cm4gRlhfTUFYKGRWYWx1ZTEsIGRWYWx1ZTIpOworCX0KKworCXJldHVybiBkVmFsdWUxOworfQorCitDRlhfV2lkZVN0cmluZyBDSlNfUHVibGljTWV0aG9kczo6U3RyTFRyaW0oRlhfTFBDV1NUUiBwU3RyKQoreworCXdoaWxlICgqcFN0ciAmJiAqcFN0ciA9PSBMJyAnKSBwU3RyKys7CisKKwlyZXR1cm4gcFN0cjsKK30KKworQ0ZYX1dpZGVTdHJpbmcgQ0pTX1B1YmxpY01ldGhvZHM6OlN0clJUcmltKEZYX0xQQ1dTVFIgcFN0cikKK3sKKwlGWF9MUENXU1RSIHAgPSBwU3RyOworCisJd2hpbGUgKCpwKSBwKys7CisJcC0tOworCWlmIChwID49IHBTdHIpCisJewkJCisJCXdoaWxlICgqcCAmJiAqcCA9PSBMJyAnKSBwLS07CisJCXArKzsKKwkJcmV0dXJuIENGWF9XaWRlU3RyaW5nKHBTdHIscC1wU3RyKTsKKwl9CisJcmV0dXJuIEwiIjsKK30KKworQ0ZYX1dpZGVTdHJpbmcgQ0pTX1B1YmxpY01ldGhvZHM6OlN0clRyaW0oRlhfTFBDV1NUUiBwU3RyKQoreworCXJldHVybiBTdHJSVHJpbShTdHJMVHJpbShwU3RyKSk7Cit9CisKK0NGWF9CeXRlU3RyaW5nIENKU19QdWJsaWNNZXRob2RzOjpTdHJMVHJpbShGWF9MUENTVFIgcFN0cikKK3sKKwl3aGlsZSAoKnBTdHIgJiYgKnBTdHIgPT0gJyAnKSBwU3RyKys7CisKKyAgICByZXR1cm4gcFN0cjsKK30KKworQ0ZYX0J5dGVTdHJpbmcgQ0pTX1B1YmxpY01ldGhvZHM6OlN0clJUcmltKEZYX0xQQ1NUUiBwU3RyKQoreworCUZYX0xQQ1NUUiBwID0gcFN0cjsKKworCXdoaWxlICgqcCkgcCsrOworCXAtLTsKKwlpZiAocCA+PSBwU3RyKQorCXsJCQorCQl3aGlsZSAoKnAgJiYgKnAgPT0gJyAnKSBwLS07CisJCXArKzsKKwkJcmV0dXJuIENGWF9CeXRlU3RyaW5nKHBTdHIscC1wU3RyKTsKKwl9CisJcmV0dXJuICIiOworfQorCitDRlhfQnl0ZVN0cmluZyBDSlNfUHVibGljTWV0aG9kczo6U3RyVHJpbShGWF9MUENTVFIgcFN0cikKK3sKKwlyZXR1cm4gU3RyUlRyaW0oU3RyTFRyaW0ocFN0cikpOworfQorCitkb3VibGUgQ0pTX1B1YmxpY01ldGhvZHM6OlBhcnNlTnVtYmVyKEZYX0xQQ1dTVFIgc3dTb3VyY2UsIEZYX0JPT0wmIGJBbGxEaWdpdHMsIEZYX0JPT0wmIGJEb3QsIEZYX0JPT0wmIGJTaWduLCBGWF9CT09MJiBiS1hKUykKK3sKKwliRG90ID0gRkFMU0U7CisJYlNpZ24gPSBGQUxTRTsKKwliS1hKUyA9IEZBTFNFOworCisJRlhfQk9PTCBiRGlnaXRFeGlzdCA9IEZBTFNFOworCisJRlhfTFBDV1NUUiBwID0gc3dTb3VyY2U7CisJd2NoYXJfdCBjOworCisJRlhfTFBDV1NUUiBwU3RhcnQgPSBOVUxMOworCUZYX0xQQ1dTVFIgcEVuZCA9IE5VTEw7CisKKwl3aGlsZSAoKGMgPSAqcCkpCisJeworCQlpZiAoIXBTdGFydCAmJiBjICE9IEwnICcpCisJCXsKKwkJCXBTdGFydCA9IHA7CisJCX0KKworCQlwRW5kID0gcDsKKwkJcCsrOworCX0KKworCWlmICghcFN0YXJ0KQorCXsKKwkJYkFsbERpZ2l0cyA9IEZBTFNFOworCQlyZXR1cm4gMDsKKwl9CisKKwl3aGlsZSAocEVuZCAhPSBwU3RhcnQpCisJeworCQlpZiAoKnBFbmQgPT0gTCcgJykKKwkJCXBFbmQgLS07CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCWRvdWJsZSBkUmV0ID0gMDsKKwlwID0gcFN0YXJ0OworCWJBbGxEaWdpdHMgPSBUUlVFOworCUNGWF9XaWRlU3RyaW5nIHN3RGlnaXRzOworCisJd2hpbGUgKHAgPD0gcEVuZCkKKwl7CQorCQljID0gKnA7CisKKwkJaWYgKElzRGlnaXQoYykpCisJCXsKKwkJCXN3RGlnaXRzICs9IGM7CisJCQliRGlnaXRFeGlzdCA9IFRSVUU7CisJCX0KKwkJZWxzZSAKKwkJeworCQkJc3dpdGNoIChjKQorCQkJeworCQkJY2FzZSBMJyAnOgorCQkJCWJBbGxEaWdpdHMgPSBGQUxTRTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTCcuJzoKKwkJCWNhc2UgTCcsJzoKKwkJCQlpZiAoIWJEb3QpCisJCQkJeworCQkJCQlpZiAoYkRpZ2l0RXhpc3QpCisJCQkJCXsKKwkJCQkJCXN3RGlnaXRzICs9IEwnLic7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlzd0RpZ2l0cyArPSBMJzAnOworCQkJCQkJc3dEaWdpdHMgKz0gTCcuJzsKKwkJCQkJCWJEaWdpdEV4aXN0ID0gVFJVRTsKKwkJCQkJfQorCisJCQkJCWJEb3QgPSBUUlVFOworCQkJCQlicmVhazsKKwkJCQl9CisJCQljYXNlICdlJzoKKwkJCWNhc2UgJ0UnOgorCQkJCWlmICghYktYSlMpCisJCQkJeworCQkJCQlwKys7CisJCQkJCWMgPSAqcDsKKwkJCQkJaWYgKGMgPT0gJysnIHx8IGMgPT0gJy0nKQorCQkJCQl7CisJCQkJCQliS1hKUyA9IFRSVUU7CisJCQkJCQlzd0RpZ2l0cyArPSAnZSc7CisJCQkJCQlzd0RpZ2l0cyArPSBjOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCWNhc2UgTCctJzoKKwkJCQlpZiAoIWJEaWdpdEV4aXN0ICYmICFiU2lnbikKKwkJCQl7CisJCQkJCXN3RGlnaXRzICs9IGM7CisJCQkJCWJTaWduID0gVFJVRTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJZGVmYXVsdDoKKwkJCQliQWxsRGlnaXRzID0gRkFMU0U7CisKKwkJCQlpZiAocCAhPSBwU3RhcnQgJiYgIWJEb3QgJiYgYkRpZ2l0RXhpc3QpCisJCQkJeworCQkJCQlzd0RpZ2l0cyArPSBMJy4nOworCQkJCQliRG90ID0gVFJVRTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJYkRvdCA9IEZBTFNFOworCQkJCQliRGlnaXRFeGlzdCA9IEZBTFNFOworCQkJCQlzd0RpZ2l0cyA9IEwiIjsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlwKys7CisJfQorCisJaWYgKHN3RGlnaXRzLkdldExlbmd0aCgpID4gMCAmJiBzd0RpZ2l0cy5HZXRMZW5ndGgoKSA8IDE3KQorCXsKKwkJQ0ZYX0J5dGVTdHJpbmcgc0RpZ2l0cyA9IHN3RGlnaXRzLlVURjhFbmNvZGUoKTsKKworCQlpZiAoYktYSlMpCisJCXsKKwkJCWRSZXQgPSBhdG9mKHNEaWdpdHMpOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKGJEb3QpCisJCQl7CisJCQkJY2hhciogcFN0b3BTdHJpbmc7CisJCQkJZFJldCA9IDo6c3RydG9kKHNEaWdpdHMsICZwU3RvcFN0cmluZyk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJZFJldCA9IGF0b2woc0RpZ2l0cyk7CisJCQl9CisJCX0KKworCX0KKworCXJldHVybiBkUmV0OworfQorCitkb3VibGUgQ0pTX1B1YmxpY01ldGhvZHM6OlBhcnNlU3RyaW5nVG9OdW1iZXIoRlhfTFBDV1NUUiBzd1NvdXJjZSkKK3sKKwlGWF9CT09MIGJBbGxEaWdpdHMgPSBGQUxTRTsKKwlGWF9CT09MIGJEb3QgPSBGQUxTRTsKKwlGWF9CT09MIGJTaWduID0gRkFMU0U7CisJRlhfQk9PTCBiS1hKUyA9IEZBTFNFOworCisJcmV0dXJuIFBhcnNlTnVtYmVyKHN3U291cmNlLCBiQWxsRGlnaXRzLCBiRG90LCBiU2lnbiwgYktYSlMpOworfQorCitGWF9CT09MCUNKU19QdWJsaWNNZXRob2RzOjpDb252ZXJ0U3RyaW5nVG9OdW1iZXIoRlhfTFBDV1NUUiBzd1NvdXJjZSwgZG91YmxlICYgZFJldCwgRlhfQk9PTCAmIGJEb3QpCit7CisJRlhfQk9PTCBiQWxsRGlnaXRzID0gRkFMU0U7CisJRlhfQk9PTCBiU2lnbiA9IEZBTFNFOworCUZYX0JPT0wgYktYSlMgPSBGQUxTRTsKKworCWRSZXQgPSBQYXJzZU51bWJlcihzd1NvdXJjZSwgYkFsbERpZ2l0cywgYkRvdCwgYlNpZ24sIGJLWEpTKTsKKworCXJldHVybiBiQWxsRGlnaXRzOworfQorCitDSlNfQXJyYXkgQ0pTX1B1YmxpY01ldGhvZHM6OkFGX01ha2VBcnJheUZyb21MaXN0KHY4OjpJc29sYXRlKiBpc29sYXRlLCBDSlNfVmFsdWUgdmFsKQoreworCUNKU19BcnJheSBTdHJBcnJheShpc29sYXRlKTsKKwlpZih2YWwuSXNBcnJheU9iamVjdCgpKQorCXsKKwkJdmFsLkNvbnZlcnRUb0FycmF5KFN0ckFycmF5KTsKKwkJcmV0dXJuIFN0ckFycmF5OworCX0KKwlDRlhfV2lkZVN0cmluZyB3c1N0ciA9IHZhbC5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOworCUNGWF9CeXRlU3RyaW5nIHQgPSBDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUod3NTdHIpOworCWNvbnN0IGNoYXIgKiBwID0gKGNvbnN0IGNoYXIgKil0OworCisKKwlpbnQgY2ggPSAnLCcgOworCWludCBuSW5kZXggPSAwOworCisJd2hpbGUgKCpwKQorCXsKKwkJY29uc3QgY2hhciAqIHBUZW1wID0gc3RyY2hyKHAsIGNoKTsKKwkJaWYgKHBUZW1wID09IE5VTEwpCisJCXsKKwkJCVN0ckFycmF5LlNldEVsZW1lbnQobkluZGV4LCBDSlNfVmFsdWUoaXNvbGF0ZSwoRlhfTFBDU1RSKVN0clRyaW0ocCkpKTsKKwkJCWJyZWFrOworCQl9CisJCWVsc2UKKwkJeworCQkJY2hhciAqIHBTdWIgPSBuZXcgY2hhcltwVGVtcCAtIHAgKyAxXTsKKwkJCXN0cm5jcHkocFN1YiwgcCwgcFRlbXAgLSBwKTsKKwkJCSoocFN1YiArIChwVGVtcCAtIHApKSA9ICdcMCc7CisKKwkJCVN0ckFycmF5LlNldEVsZW1lbnQobkluZGV4LCBDSlNfVmFsdWUoaXNvbGF0ZSwoRlhfTFBDU1RSKVN0clRyaW0ocFN1YikpKTsKKwkJCWRlbGV0ZSBbXXBTdWI7CisJCQkKKwkJCW5JbmRleCArKzsKKwkJCXAgPSArK3BUZW1wOworCQl9CisJCQorCX0KKwlyZXR1cm4gU3RyQXJyYXk7Cit9CisKK2ludCBDSlNfUHVibGljTWV0aG9kczo6UGFyc2VTdHJpbmdJbnRlZ2VyKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJpbmcsaW50IG5TdGFydCxpbnQmIG5Ta2lwLCBpbnQgbk1heFN0ZXApCit7CisJaW50IG5SZXQgPSAwOworCW5Ta2lwID0gMDsKKwlmb3IgKGludCBpPW5TdGFydCwgc3o9c3RyaW5nLkdldExlbmd0aCgpOyBpIDwgc3o7IGkrKykKKwl7CisJCWlmIChpLW5TdGFydCA+IDEwKQorCQkJYnJlYWs7CisKKwkJRlhfV0NIQVIgYyA9IHN0cmluZy5HZXRBdChpKTsKKwkJaWYgKElzRGlnaXQoKHdjaGFyX3QpYykpCisJCXsKKwkJCW5SZXQgPSBuUmV0ICogMTAgKyAoYyAtICcwJyk7CisJCQluU2tpcCA9IGkgLSBuU3RhcnQgKyAxOworCQkJaWYgKG5Ta2lwID49IG5NYXhTdGVwKSAKKwkJCQlicmVhazsKKwkJfQorCQllbHNlCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gblJldDsKK30KKworQ0ZYX1dpZGVTdHJpbmcgQ0pTX1B1YmxpY01ldGhvZHM6OlBhcnNlU3RyaW5nU3RyaW5nKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJpbmcsIGludCBuU3RhcnQsIGludCYgblNraXApCit7CisJQ0ZYX1dpZGVTdHJpbmcgc3dSZXQ7CisJblNraXAgPSAwOworCWZvciAoaW50IGk9blN0YXJ0LCBzej1zdHJpbmcuR2V0TGVuZ3RoKCk7IGkgPCBzejsgaSsrKQorCXsKKwkJRlhfV0NIQVIgYyA9IHN0cmluZy5HZXRBdChpKTsKKwkJaWYgKChjID49IEwnYScgJiYgYyA8PSBMJ3onKSB8fCAoYyA+PSBMJ0EnICYmIGMgPD0gTCdaJykpCisJCXsKKwkJCXN3UmV0ICs9IGM7CisJCQluU2tpcCA9IGkgLSBuU3RhcnQgKyAxOworCQl9CisJCWVsc2UKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBzd1JldDsKK30KKworZG91YmxlIENKU19QdWJsaWNNZXRob2RzOjpQYXJzZU5vcm1hbERhdGUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJiB2YWx1ZSwgRlhfQk9PTCYgYldyb25nRm9ybWF0KQoreworCWRvdWJsZSBkdCA9IEpTX0dldERhdGVUaW1lKCk7CisKKwlpbnQgblllYXIgPSBKU19HZXRZZWFyRnJvbVRpbWUoZHQpOworCWludCBuTW9udGggPSBKU19HZXRNb250aEZyb21UaW1lKGR0KSArIDE7CisJaW50IG5EYXkgPSBKU19HZXREYXlGcm9tVGltZShkdCk7CisJaW50IG5Ib3VyID0gSlNfR2V0SG91ckZyb21UaW1lKGR0KTsKKwlpbnQgbk1pbiA9IEpTX0dldE1pbkZyb21UaW1lKGR0KTsKKwlpbnQgblNlYyA9IEpTX0dldFNlY0Zyb21UaW1lKGR0KTsKKworCWludCBudW1iZXJbM107CisKKwlpbnQgblNraXAgPSAwOworCWludCBuTGVuID0gdmFsdWUuR2V0TGVuZ3RoKCk7CisJaW50IG5JbmRleCA9IDA7CisJaW50IGkgPSAwOworCXdoaWxlIChpIDwgbkxlbikKKwl7CisJCWlmIChuSW5kZXggPiAyKSBicmVhazsKKworCQlGWF9XQ0hBUiBjID0gdmFsdWUuR2V0QXQoaSk7CisJCWlmIChJc0RpZ2l0KCh3Y2hhcl90KWMpKQorCQl7CisJCQludW1iZXJbbkluZGV4KytdID0gUGFyc2VTdHJpbmdJbnRlZ2VyKHZhbHVlLCBpLCBuU2tpcCwgNCk7CisJCQlpICs9IG5Ta2lwOwkJCQorCQl9CisJCWVsc2UKKwkJeworCQkJaSArKzsKKwkJfQorCX0KKworCWlmIChuSW5kZXggPT0gMikKKwl7CisJCS8vIGNhc2UyOiBtb250aC9kYXkKKwkJLy8gY2FzZTM6IGRheS9tb250aAorCQlpZiAoKG51bWJlclswXSA+PSAxICYmIG51bWJlclswXSA8PSAxMikgJiYgKG51bWJlclsxXSA+PSAxICYmIG51bWJlclsxXSA8PSAzMSkpCisJCXsKKwkJCW5Nb250aCA9IG51bWJlclswXTsKKwkJCW5EYXkgPSBudW1iZXJbMV07CisJCX0KKwkJZWxzZSBpZiAoKG51bWJlclswXSA+PSAxICYmIG51bWJlclswXSA8PSAzMSkgJiYgKG51bWJlclsxXSA+PSAxICYmIG51bWJlclsxXSA8PSAxMikpCisJCXsKKwkJCW5EYXkgPSBudW1iZXJbMF07CisJCQluTW9udGggPSBudW1iZXJbMV07CisJCX0KKworCQliV3JvbmdGb3JtYXQgPSBGQUxTRTsKKwl9CisJZWxzZSBpZiAobkluZGV4ID09IDMpCisJeworCQkvLyBjYXNlMTogeWVhci9tb250aC9kYXkKKwkJLy8gY2FzZTI6IG1vbnRoL2RheS95ZWFyCisJCS8vIGNhc2UzOiBkYXkvbW9udGgveWVhcgorCisJCWlmIChudW1iZXJbMF0gPiAxMiAmJiAobnVtYmVyWzFdID49IDEgJiYgbnVtYmVyWzFdIDw9IDEyKSAmJiAobnVtYmVyWzJdID49IDEgJiYgbnVtYmVyWzJdIDw9IDMxKSkKKwkJeworCQkJblllYXIgPSBudW1iZXJbMF07CisJCQluTW9udGggPSBudW1iZXJbMV07CisJCQluRGF5ID0gbnVtYmVyWzJdOworCQl9CisJCWVsc2UgaWYgKChudW1iZXJbMF0gPj0gMSAmJiBudW1iZXJbMF0gPD0gMTIpICYmIChudW1iZXJbMV0gPj0gMSAmJiBudW1iZXJbMV0gPD0gMzEpICYmIG51bWJlclsyXSA+IDMxKQorCQl7CisJCQluTW9udGggPSBudW1iZXJbMF07CisJCQluRGF5ID0gbnVtYmVyWzFdOworCQkJblllYXIgPSBudW1iZXJbMl07CisJCX0KKwkJZWxzZSBpZiAoKG51bWJlclswXSA+PSAxICYmIG51bWJlclswXSA8PSAzMSkgJiYgKG51bWJlclsxXSA+PSAxICYmIG51bWJlclsxXSA8PSAxMikgJiYgbnVtYmVyWzJdID4gMzEpCisJCXsKKwkJCW5EYXkgPSBudW1iZXJbMF07CisJCQluTW9udGggPSBudW1iZXJbMV07CisJCQluWWVhciA9IG51bWJlclsyXTsKKwkJfQorCisJCWJXcm9uZ0Zvcm1hdCA9IEZBTFNFOworCX0KKwllbHNlCisJeworCQliV3JvbmdGb3JtYXQgPSBUUlVFOworCQlyZXR1cm4gZHQ7CisJfQorCisJQ0ZYX1dpZGVTdHJpbmcgc3dUZW1wOworCXN3VGVtcC5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlZC8lZC8lZCAlZDolZDolZCIsbk1vbnRoLG5EYXksblllYXIsbkhvdXIsbk1pbixuU2VjKTsKKwlyZXR1cm4gSlNfRGF0ZVBhcnNlKHN3VGVtcCk7Cit9CisKK2RvdWJsZSBDSlNfUHVibGljTWV0aG9kczo6TWFrZVJlZ3VsYXJEYXRlKGNvbnN0IENGWF9XaWRlU3RyaW5nICYgdmFsdWUsIGNvbnN0IENGWF9XaWRlU3RyaW5nICYgZm9ybWF0LCBGWF9CT09MJiBiV3JvbmdGb3JtYXQpCit7CisJZG91YmxlIGR0ID0gSlNfR2V0RGF0ZVRpbWUoKTsKKworCWlmIChmb3JtYXQuSXNFbXB0eSgpIHx8IHZhbHVlLklzRW1wdHkoKSkKKwkJcmV0dXJuIGR0OworCisJaW50IG5ZZWFyID0gSlNfR2V0WWVhckZyb21UaW1lKGR0KTsKKwlpbnQgbk1vbnRoID0gSlNfR2V0TW9udGhGcm9tVGltZShkdCkgKyAxOworCWludCBuRGF5ID0gSlNfR2V0RGF5RnJvbVRpbWUoZHQpOworCWludCBuSG91ciA9IEpTX0dldEhvdXJGcm9tVGltZShkdCk7CisJaW50IG5NaW4gPSBKU19HZXRNaW5Gcm9tVGltZShkdCk7CisJaW50IG5TZWMgPSBKU19HZXRTZWNGcm9tVGltZShkdCk7CisKKwlpbnQgblllYXJTdWIgPSA5OTsgLy9uWWVhciAtIDIwMDA7CisKKwlGWF9CT09MIGJQbSA9IEZBTFNFOworCUZYX0JPT0wgYkV4aXQgPSBGQUxTRTsKKwliV3JvbmdGb3JtYXQgPSBGQUxTRTsKKwkKKwlpbnQgaT0wOworCWludCBqPTA7CisKKwl3aGlsZSAoaSA8IGZvcm1hdC5HZXRMZW5ndGgoKSkKKwl7CisJCWlmIChiRXhpdCkgYnJlYWs7CisKKwkJRlhfV0NIQVIgYyA9IGZvcm1hdC5HZXRBdChpKTsJCQorCQlzd2l0Y2ggKGMpCisJCXsKKwkJCWNhc2UgJzonOgorCQkJY2FzZSAnLic6CisJCQljYXNlICctJzoKKwkJCWNhc2UgJ1xcJzoKKwkJCWNhc2UgJy8nOgorCQkJCWkrKzsKKwkJCQlqKys7CisJCQkJYnJlYWs7CisJCQkJCisJCQljYXNlICd5JzoKKwkJCWNhc2UgJ20nOgorCQkJY2FzZSAnZCc6CisJCQljYXNlICdIJzoKKwkJCWNhc2UgJ2gnOgorCQkJY2FzZSAnTSc6CisJCQljYXNlICdzJzoKKwkJCWNhc2UgJ3QnOgorCQkJCXsKKwkJCQkJaW50IG9sZGogPSBqOworCQkJCQlpbnQgblNraXAgPSAwOworCisJCQkJCWlmIChmb3JtYXQuR2V0QXQoaSsxKSAhPSBjKQorCQkJCQl7CisJCQkJCQlzd2l0Y2ggKGMpCisJCQkJCQl7CisJCQkJCQkJY2FzZSAneSc6CisJCQkJCQkJCWkrKzsKKwkJCQkJCQkJaisrOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlICdtJzoKKwkJCQkJCQkJbk1vbnRoID0gUGFyc2VTdHJpbmdJbnRlZ2VyKHZhbHVlLCBqLCBuU2tpcCwgMik7CisJCQkJCQkJCWkrKzsKKwkJCQkJCQkJaiArPSBuU2tpcDsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSAnZCc6CisJCQkJCQkJCW5EYXkgPSBQYXJzZVN0cmluZ0ludGVnZXIodmFsdWUsIGosIG5Ta2lwLCAyKTsKKwkJCQkJCQkJaSsrOworCQkJCQkJCQlqICs9IG5Ta2lwOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlICdIJzoKKwkJCQkJCQkJbkhvdXIgPSBQYXJzZVN0cmluZ0ludGVnZXIodmFsdWUsIGosIG5Ta2lwLCAyKTsKKwkJCQkJCQkJaSsrOworCQkJCQkJCQlqICs9IG5Ta2lwOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlICdoJzoKKwkJCQkJCQkJbkhvdXIgPSBQYXJzZVN0cmluZ0ludGVnZXIodmFsdWUsIGosIG5Ta2lwLCAyKTsKKwkJCQkJCQkJaSsrOworCQkJCQkJCQlqICs9IG5Ta2lwOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlICdNJzoKKwkJCQkJCQkJbk1pbiA9IFBhcnNlU3RyaW5nSW50ZWdlcih2YWx1ZSwgaiwgblNraXAsIDIpOworCQkJCQkJCQlpKys7CisJCQkJCQkJCWogKz0gblNraXA7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgJ3MnOgorCQkJCQkJCQluU2VjID0gUGFyc2VTdHJpbmdJbnRlZ2VyKHZhbHVlLCBqLCBuU2tpcCwgMik7CisJCQkJCQkJCWkrKzsKKwkJCQkJCQkJaiArPSBuU2tpcDsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSAndCc6CisJCQkJCQkJCWJQbSA9IHZhbHVlLkdldEF0KGkpID09ICdwJzsKKwkJCQkJCQkJaSsrOworCQkJCQkJCQlqKys7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJfQkJCQkJCisJCQkJCX0KKwkJCQkJZWxzZSBpZiAoZm9ybWF0LkdldEF0KGkrMSkgPT0gYyAmJiBmb3JtYXQuR2V0QXQoaSsyKSAhPSBjKQorCQkJCQl7CisJCQkJCQlzd2l0Y2ggKGMpCisJCQkJCQl7CisJCQkJCQkJY2FzZSAneSc6CisJCQkJCQkJCW5ZZWFyID0gUGFyc2VTdHJpbmdJbnRlZ2VyKHZhbHVlLCBqLCBuU2tpcCwgNCk7CisJCQkJCQkJCWkgKz0gMjsKKwkJCQkJCQkJaiArPSBuU2tpcDsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSAnbSc6CisJCQkJCQkJCW5Nb250aCA9IFBhcnNlU3RyaW5nSW50ZWdlcih2YWx1ZSwgaiwgblNraXAsIDIpOworCQkJCQkJCQlpICs9IDI7CisJCQkJCQkJCWogKz0gblNraXA7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgJ2QnOgorCQkJCQkJCQluRGF5ID0gUGFyc2VTdHJpbmdJbnRlZ2VyKHZhbHVlLCBqLCBuU2tpcCwgMik7CisJCQkJCQkJCWkgKz0gMjsKKwkJCQkJCQkJaiArPSBuU2tpcDsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSAnSCc6CisJCQkJCQkJCW5Ib3VyID0gUGFyc2VTdHJpbmdJbnRlZ2VyKHZhbHVlLCBqLCBuU2tpcCwgMik7CisJCQkJCQkJCWkgKz0gMjsKKwkJCQkJCQkJaiArPSBuU2tpcDsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSAnaCc6CisJCQkJCQkJCW5Ib3VyID0gUGFyc2VTdHJpbmdJbnRlZ2VyKHZhbHVlLCBqLCBuU2tpcCwgMik7CisJCQkJCQkJCWkgKz0gMjsKKwkJCQkJCQkJaiArPSBuU2tpcDsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSAnTSc6CisJCQkJCQkJCW5NaW4gPSBQYXJzZVN0cmluZ0ludGVnZXIodmFsdWUsIGosIG5Ta2lwLCAyKTsKKwkJCQkJCQkJaSArPSAyOworCQkJCQkJCQlqICs9IG5Ta2lwOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlICdzJzoKKwkJCQkJCQkJblNlYyA9IFBhcnNlU3RyaW5nSW50ZWdlcih2YWx1ZSwgaiwgblNraXAsIDIpOworCQkJCQkJCQlpICs9IDI7CisJCQkJCQkJCWogKz0gblNraXA7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgJ3QnOgorCQkJCQkJCQliUG0gPSAodmFsdWUuR2V0QXQoaikgPT0gJ3AnICYmIHZhbHVlLkdldEF0KGorMSkgPT0gJ20nKTsKKwkJCQkJCQkJaSArPSAyOworCQkJCQkJCQlqICs9IDI7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2UgaWYgKGZvcm1hdC5HZXRBdChpKzEpID09IGMgJiYgZm9ybWF0LkdldEF0KGkrMikgPT0gYyAmJiBmb3JtYXQuR2V0QXQoaSszKSAhPSBjKQorCQkJCQl7CisJCQkJCQlzd2l0Y2ggKGMpCisJCQkJCQl7CisJCQkJCQkJY2FzZSAnbSc6CisJCQkJCQkJCXsKKwkJCQkJCQkJCUNGWF9XaWRlU3RyaW5nIHNNb250aCA9IFBhcnNlU3RyaW5nU3RyaW5nKHZhbHVlLCBqLCBuU2tpcCk7CisJCQkJCQkJCQlGWF9CT09MIGJGaW5kID0gRkFMU0U7CisJCQkJCQkJCQlmb3IgKGludCBtID0gMDsgbSA8IDEyOyBtKyspCisJCQkJCQkJCQl7CisJCQkJCQkJCQkJaWYgKHNNb250aC5Db21wYXJlTm9DYXNlKG1vbnRoc1ttXSkgPT0gMCkKKwkJCQkJCQkJCQl7CisJCQkJCQkJCQkJCW5Nb250aCA9IG0gKyAxOworCQkJCQkJCQkJCQlpKz0zOworCQkJCQkJCQkJCQlqKz1uU2tpcDsKKwkJCQkJCQkJCQkJYkZpbmQgPSBUUlVFOworCQkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCQkKKwkJCQkJCQkJCWlmICghYkZpbmQpCisJCQkJCQkJCQl7CisJCQkJCQkJCQkJbk1vbnRoID0gUGFyc2VTdHJpbmdJbnRlZ2VyKHZhbHVlLCBqLCBuU2tpcCwgMyk7CisJCQkJCQkJCQkJaSs9MzsKKwkJCQkJCQkJCQlqICs9IG5Ta2lwOworCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgJ3knOgorCQkJCQkJCQlicmVhazsKKwkJCQkJCQlkZWZhdWx0OgorCQkJCQkJCQlpKz0zOworCQkJCQkJCQlqKz0zOworCQkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQllbHNlIGlmIChmb3JtYXQuR2V0QXQoaSsxKSA9PSBjICYmIGZvcm1hdC5HZXRBdChpKzIpID09IGMgJiYgZm9ybWF0LkdldEF0KGkrMykgPT0gYyAmJiBmb3JtYXQuR2V0QXQoaSs0KSAhPSBjKQorCQkJCQl7CisJCQkJCQlzd2l0Y2ggKGMpCisJCQkJCQl7CisKKworCQkJCQkJCWNhc2UgJ3knOgorCQkJCQkJCQluWWVhciA9IFBhcnNlU3RyaW5nSW50ZWdlcih2YWx1ZSwgaiwgblNraXAsIDQpOworCQkJCQkJCQlqICs9IG5Ta2lwOworCQkJCQkJCQlpICs9IDQ7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgJ20nOgorCQkJCQkJCQl7CisJCQkJCQkJCQlGWF9CT09MIGJGaW5kID0gRkFMU0U7CisKKwkJCQkJCQkJCUNGWF9XaWRlU3RyaW5nIHNNb250aCA9IFBhcnNlU3RyaW5nU3RyaW5nKHZhbHVlLCBqLCBuU2tpcCk7CisJCQkJCQkJCQlzTW9udGguTWFrZUxvd2VyKCk7CisKKwkJCQkJCQkJCWZvciAoaW50IG0gPSAwOyBtIDwgMTI7IG0rKykKKwkJCQkJCQkJCXsKKwkJCQkJCQkJCQlDRlhfV2lkZVN0cmluZyBzRnVsbE1vbnRocyA9IGZ1bGxtb250aHNbbV07CisJCQkJCQkJCQkJc0Z1bGxNb250aHMuTWFrZUxvd2VyKCk7CisKKwkJCQkJCQkJCQlpZiAoc0Z1bGxNb250aHMuRmluZChzTW9udGgsIDApICE9IC0xKQorCQkJCQkJCQkJCXsKKwkJCQkJCQkJCQkJbk1vbnRoID0gbSArIDE7CisJCQkJCQkJCQkJCWkgKz0gNDsKKwkJCQkJCQkJCQkJaiArPSBuU2tpcDsKKwkJCQkJCQkJCQkJYkZpbmQgPSBUUlVFOworCQkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJCQl9CisJCQkJCQkJCQl9CisJCQkJCQkJCQkKKwkJCQkJCQkJCWlmICghYkZpbmQpCisJCQkJCQkJCQl7CisJCQkJCQkJCQkJbk1vbnRoID0gUGFyc2VTdHJpbmdJbnRlZ2VyKHZhbHVlLCBqLCBuU2tpcCwgNCk7CisJCQkJCQkJCQkJaSs9NDsKKwkJCQkJCQkJCQlqICs9IG5Ta2lwOworCQkJCQkJCQkJfQorCQkJCQkJCQl9CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJCWkgKz0gNDsKKwkJCQkJCQkJaiArPSA0OworCQkJCQkJCQlicmVhazsKKwkJCQkJCX0JCQkJCQorCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJaWYgKGZvcm1hdC5HZXRBdChpKSAhPSB2YWx1ZS5HZXRBdChqKSkKKwkJCQkJCXsKKwkJCQkJCQliV3JvbmdGb3JtYXQgPSBUUlVFOworCQkJCQkJCWJFeGl0ID0gVFJVRTsKKwkJCQkJCX0KKwkJCQkJCWkrKzsKKwkJCQkJCWorKzsKKwkJCQkJfQorCQkJCQkKKwkJCQkJaWYgKG9sZGogPT0gaikKKwkJCQkJeworCQkJCQkJYldyb25nRm9ybWF0ID0gVFJVRTsKKwkJCQkJCWJFeGl0ID0gVFJVRTsKKwkJCQkJfQorCQkJCX0KKworCQkJCWJyZWFrOwkJCQorCQkJZGVmYXVsdDoKKwkJCQlpZiAodmFsdWUuR2V0TGVuZ3RoKCkgPD0gaikKKwkJCQl7CisJCQkJCWJFeGl0ID0gVFJVRTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoZm9ybWF0LkdldEF0KGkpICE9IHZhbHVlLkdldEF0KGopKQorCQkJCXsKKwkJCQkJYldyb25nRm9ybWF0ID0gVFJVRTsKKwkJCQkJYkV4aXQgPSBUUlVFOworCQkJCX0KKworCQkJCWkrKzsKKwkJCQlqKys7CisJCQkJYnJlYWs7CisJCX0JCQorCX0KKworCWlmIChiUG0pIG5Ib3VyICs9IDEyOworCisJaWYgKG5ZZWFyID49IDAgJiYgblllYXIgPD0gblllYXJTdWIpCisJCW5ZZWFyICs9IDIwMDA7CisKKwlpZiAobk1vbnRoIDwgMSB8fCBuTW9udGggPiAxMikKKwkJYldyb25nRm9ybWF0ID0gVFJVRTsKKworCWlmIChuRGF5IDwgMSB8fCBuRGF5ID4gMzEpCisJCWJXcm9uZ0Zvcm1hdCA9IFRSVUU7CisKKwlpZiAobkhvdXIgPCAwIHx8IG5Ib3VyID4gMjQpCisJCWJXcm9uZ0Zvcm1hdCA9IFRSVUU7CisKKwlpZiAobk1pbiA8IDAgfHwgbk1pbiA+IDYwKQorCQliV3JvbmdGb3JtYXQgPSBUUlVFOworCisJaWYgKG5TZWMgPCAwIHx8IG5TZWMgPiA2MCkKKwkJYldyb25nRm9ybWF0ID0gVFJVRTsKKworCWRvdWJsZSBkUmV0ID0gMDsKKworCWlmIChiV3JvbmdGb3JtYXQpCisJeworCQlkUmV0ID0gUGFyc2VOb3JtYWxEYXRlKHZhbHVlLCBiV3JvbmdGb3JtYXQpOworCX0KKwllbHNlCisJeworCQlkUmV0ID0gSlNfTWFrZURhdGUoSlNfTWFrZURheShuWWVhcixuTW9udGggLSAxLG5EYXkpLEpTX01ha2VUaW1lKG5Ib3VyLCBuTWluLCBuU2VjLCAwKSk7CisKKwkJaWYgKEpTX1BvcnRJc05hbihkUmV0KSkKKwkJeworCQkJZFJldCA9IEpTX0RhdGVQYXJzZSh2YWx1ZSk7CisJCX0KKwl9CisKKwlpZiAoSlNfUG9ydElzTmFuKGRSZXQpKQorCXsKKwkJZFJldCA9IFBhcnNlTm9ybWFsRGF0ZSh2YWx1ZSwgYldyb25nRm9ybWF0KTsKKwl9CisKKwlyZXR1cm4gZFJldDsKKworfQorCitDRlhfV2lkZVN0cmluZyBDSlNfUHVibGljTWV0aG9kczo6TWFrZUZvcm1hdERhdGUoZG91YmxlIGREYXRlLCBjb25zdCBDRlhfV2lkZVN0cmluZyAmIGZvcm1hdCkKK3sKKwlDRlhfV2lkZVN0cmluZyBzUmV0ID0gTCIiLHNQYXJ0ID0gTCIiOworCisJaW50IG5ZZWFyID0gSlNfR2V0WWVhckZyb21UaW1lKGREYXRlKTsKKwlpbnQgbk1vbnRoID0gSlNfR2V0TW9udGhGcm9tVGltZShkRGF0ZSkgKyAxOworCWludCBuRGF5ID0gSlNfR2V0RGF5RnJvbVRpbWUoZERhdGUpOworCWludCBuSG91ciA9IEpTX0dldEhvdXJGcm9tVGltZShkRGF0ZSk7CisJaW50IG5NaW4gPSBKU19HZXRNaW5Gcm9tVGltZShkRGF0ZSk7CisJaW50IG5TZWMgPSBKU19HZXRTZWNGcm9tVGltZShkRGF0ZSk7CisKKwlpbnQgaSA9IDA7CisJRlhfV0NIQVIgYzsKKwl3aGlsZSAoaSA8IGZvcm1hdC5HZXRMZW5ndGgoKSkKKwl7CisJCWMgPSBmb3JtYXQuR2V0QXQoaSk7CisJCXNQYXJ0ID0gTCIiOworCQlzd2l0Y2ggKGMpCisJCXsKKwkJCWNhc2UgJ3knOgorCQkJY2FzZSAnbSc6CisJCQljYXNlICdkJzoKKwkJCWNhc2UgJ0gnOgorCQkJY2FzZSAnaCc6CisJCQljYXNlICdNJzoKKwkJCWNhc2UgJ3MnOgorCQkJY2FzZSAndCc6CisJCQkJaWYgKGZvcm1hdC5HZXRBdChpKzEpICE9IGMpCisJCQkJeworCQkJCQlzd2l0Y2ggKGMpCisJCQkJCXsKKwkJCQkJCWNhc2UgJ3knOgorCQkJCQkJCXNQYXJ0ICs9IGM7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlICdtJzoKKwkJCQkJCQlzUGFydC5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlZCIsbk1vbnRoKTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgJ2QnOgorCQkJCQkJCXNQYXJ0LkZvcm1hdCgoRlhfTFBDV1NUUilMIiVkIixuRGF5KTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgJ0gnOgorCQkJCQkJCXNQYXJ0LkZvcm1hdCgoRlhfTFBDV1NUUilMIiVkIixuSG91cik7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlICdoJzoKKwkJCQkJCQlzUGFydC5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlZCIsbkhvdXI+MTI/bkhvdXIgLSAxMjpuSG91cik7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlICdNJzoKKwkJCQkJCQlzUGFydC5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlZCIsbk1pbik7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlICdzJzoKKwkJCQkJCQlzUGFydC5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlZCIsblNlYyk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlICd0JzoJCQkJCisJCQkJCQkJc1BhcnQgKz0gbkhvdXI+MTI/J3AnOidhJzsKKwkJCQkJCQlicmVhazsKKwkJCQkJfQkJCQkJCisJCQkJCWkrKzsKKwkJCQl9CisJCQkJZWxzZSBpZiAoZm9ybWF0LkdldEF0KGkrMSkgPT0gYyAmJiBmb3JtYXQuR2V0QXQoaSsyKSAhPSBjKQorCQkJCXsKKwkJCQkJc3dpdGNoIChjKQorCQkJCQl7CisJCQkJCQljYXNlICd5JzoKKwkJCQkJCQlzUGFydC5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlMDJkIixuWWVhciAtIChuWWVhciAvIDEwMCkgKiAxMDApOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSAnbSc6CisJCQkJCQkJc1BhcnQuRm9ybWF0KChGWF9MUENXU1RSKUwiJTAyZCIsbk1vbnRoKTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgJ2QnOgorCQkJCQkJCXNQYXJ0LkZvcm1hdCgoRlhfTFBDV1NUUilMIiUwMmQiLG5EYXkpOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSAnSCc6CisJCQkJCQkJc1BhcnQuRm9ybWF0KChGWF9MUENXU1RSKUwiJTAyZCIsbkhvdXIpOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSAnaCc6CisJCQkJCQkJc1BhcnQuRm9ybWF0KChGWF9MUENXU1RSKUwiJTAyZCIsbkhvdXI+MTI/bkhvdXIgLSAxMjpuSG91cik7CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlICdNJzoKKwkJCQkJCQlzUGFydC5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlMDJkIixuTWluKTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgJ3MnOgorCQkJCQkJCXNQYXJ0LkZvcm1hdCgoRlhfTFBDV1NUUilMIiUwMmQiLG5TZWMpOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSAndCc6CQkJCQkJCQorCQkJCQkJCXNQYXJ0ID0gbkhvdXI+MTI/IChGWF9MUENXU1RSKUwicG0iOiAoRlhfTFBDV1NUUilMImFtIjsKKwkJCQkJCQlicmVhazsKKwkJCQkJfQkJCQorCQkJCQlpKz0yOworCQkJCX0KKwkJCQllbHNlIGlmIChmb3JtYXQuR2V0QXQoaSsxKSA9PSBjICYmIGZvcm1hdC5HZXRBdChpKzIpID09IGMgJiYgZm9ybWF0LkdldEF0KGkrMykgIT0gYykKKwkJCQl7CQkKKwkJCQkJc3dpdGNoIChjKQorCQkJCQl7CisJCQkJCQljYXNlICdtJzoKKwkJCQkJCQlpKz0zOworCQkJCQkJCWlmIChuTW9udGggPiAwJiZuTW9udGggPD0gMTIpCisJCQkJCQkJCXNQYXJ0ICs9IG1vbnRoc1tuTW9udGggLSAxXTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJaSs9MzsKKwkJCQkJCQlzUGFydCArPSBjOworCQkJCQkJCXNQYXJ0ICs9IGM7CisJCQkJCQkJc1BhcnQgKz0gYzsKKwkJCQkJCQlicmVhazsKKwkJCQkJfQkJCQkJCisJCQkJfQorCQkJCWVsc2UgaWYgKGZvcm1hdC5HZXRBdChpKzEpID09IGMgJiYgZm9ybWF0LkdldEF0KGkrMikgPT0gYyAmJiBmb3JtYXQuR2V0QXQoaSszKSA9PSBjICYmIGZvcm1hdC5HZXRBdChpKzQpICE9IGMpCisJCQkJeworCQkJCQlzd2l0Y2ggKGMpCisJCQkJCXsKKwkJCQkJCWNhc2UgJ3knOgorCQkJCQkJCXNQYXJ0LkZvcm1hdCgoRlhfTFBDV1NUUilMIiUwNGQiLG5ZZWFyKTsKKwkJCQkJCQlpICs9IDQ7CisJCQkJCQkJYnJlYWs7CQorCQkJCQkJY2FzZSAnbSc6CisJCQkJCQkJaSs9NDsKKwkJCQkJCQlpZiAobk1vbnRoID4gMCYmbk1vbnRoIDw9IDEyKQorCQkJCQkJCQlzUGFydCArPSBmdWxsbW9udGhzW25Nb250aCAtIDFdOworCQkJCQkJCWJyZWFrOworCQkJCQkJZGVmYXVsdDoKKwkJCQkJCQlpICs9IDQ7CisJCQkJCQkJc1BhcnQgKz0gYzsKKwkJCQkJCQlzUGFydCArPSBjOworCQkJCQkJCXNQYXJ0ICs9IGM7CisJCQkJCQkJc1BhcnQgKz0gYzsKKwkJCQkJCQlicmVhazsKKwkJCQkJfQkJCQkJCisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWkrKzsKKwkJCQkJc1BhcnQgKz0gYzsKKwkJCQl9CisJCQkJYnJlYWs7CQkJCisJCQlkZWZhdWx0OgorCQkJCWkrKzsKKwkJCQlzUGFydCArPSBjOworCQkJCWJyZWFrOworCQl9CisJCQorCQlzUmV0ICs9IHNQYXJ0OworCX0KKworCXJldHVybiBzUmV0OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvL2Z1bmN0aW9uIEFGTnVtYmVyX0Zvcm1hdChuRGVjLCBzZXBTdHlsZSwgbmVnU3R5bGUsIGN1cnJTdHlsZSwgc3RyQ3VycmVuY3ksIGJDdXJyZW5jeVByZXBlbmQpCitGWF9CT09MIENKU19QdWJsaWNNZXRob2RzOjpBRk51bWJlcl9Gb3JtYXQoT0JKX01FVEhPRF9QQVJBTVMpCit7CisjaWYgX0ZYX09TXyAhPSBfRlhfQU5EUk9JRF8KKwl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDo6R2V0SXNvbGF0ZShjYyk7CisJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0ICopY2M7CisJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCUNKU19FdmVudEhhbmRsZXIqIHBFdmVudCA9IHBDb250ZXh0LT5HZXRFdmVudEhhbmRsZXIoKTsKKwlBU1NFUlQocEV2ZW50ICE9IE5VTEwpOworCisJaWYgKHBhcmFtcy5zaXplKCkgIT0gNikKKwl7CisJCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7CisJCXJldHVybiBGQUxTRTsKKwl9CisJaWYoIXBFdmVudC0+bV9wVmFsdWUpCisJCXJldHVybiBGQUxTRTsKKwlDRlhfV2lkZVN0cmluZyYgVmFsdWUgPSBwRXZlbnQtPlZhbHVlKCk7CQorCUNGWF9CeXRlU3RyaW5nIHN0clZhbHVlID0gU3RyVHJpbShDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUoVmFsdWUpKTsKKwkKKwlpZiAoc3RyVmFsdWUuSXNFbXB0eSgpKSByZXR1cm4gVFJVRTsKKwkKKwlpbnQgaURlYyA9IHBhcmFtc1swXTsKKwlpbnQgaVNlcFN0eWxlID0gcGFyYW1zWzFdOworCWludCBpTmVnU3R5bGUgPSBwYXJhbXNbMl07CisJaW50IGljdXJyU3R5bGUgPSBwYXJhbXNbM107IC8vaXQncyBubyB1c2UhCisJc3RkOjp3c3RyaW5nIHdzdHJDdXJyZW5jeShwYXJhbXNbNF0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKSk7CisJRlhfQk9PTCBiQ3VycmVuY3lQcmVwZW5kID0gcGFyYW1zWzVdOworCQorCWlmIChpRGVjIDwgMCkgaURlYyA9IC1pRGVjOworCQorCWlmIChpU2VwU3R5bGUgPCAwIHx8IGlTZXBTdHlsZSA+IDMpCisJCWlTZXBTdHlsZSA9IDA7CisJCisJaWYgKGlOZWdTdHlsZSA8IDAgfHwgaU5lZ1N0eWxlID4gMykKKwkJaU5lZ1N0eWxlID0gMDsKKwkKKwkKKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkvL2ZvciBwcm9jZXNzaW5nIGRlY2ltYWwgcGxhY2VzCisJc3RyVmFsdWUuUmVwbGFjZSgiLCIsICIuIik7CisJZG91YmxlIGRWYWx1ZSA9IGF0b2Yoc3RyVmFsdWUpOworCWlmIChpRGVjID4gMCkKKwkJZFZhbHVlICs9IERPVUJMRV9DT1JSRUNUOy8vCisJCSAgICAKKwlpbnQgaURlYzI7CisJRlhfQk9PTCBiTmFnYXRpdmUgPSBGQUxTRTsKKworCXN0clZhbHVlID0gZmN2dChkVmFsdWUsaURlYywmaURlYzIsJmJOYWdhdGl2ZSk7CisJaWYgKHN0clZhbHVlLklzRW1wdHkoKSkKKwl7CisJCWRWYWx1ZSA9IDA7CisJCXN0clZhbHVlID0gZmN2dChkVmFsdWUsaURlYywmaURlYzIsJmJOYWdhdGl2ZSk7CisJCWlmIChzdHJWYWx1ZS5Jc0VtcHR5KCkpCisJCXsKKwkJCXN0clZhbHVlID0gIjAiOworCQkJaURlYzIgPSAxOworCQl9CisKKwl9CisKKwlpZiAoaURlYzIgPCAwKQorCXsKKwkJZm9yIChpbnQgaU51bSA9IDA7aU51bSA8IGFicyhpRGVjMik7aU51bSsrKQorCQl7CisJCQlzdHJWYWx1ZSA9ICIwIiArIHN0clZhbHVlOworCQl9CisJCWlEZWMyID0gMDsKKwkJCisJfQorCWludCBpTWF4ID0gc3RyVmFsdWUuR2V0TGVuZ3RoKCk7CisJaWYgKGlEZWMyID4gaU1heCkKKwl7CisJCWZvciAoaW50IGlOdW0gPSAwO2lOdW0gPD0gaURlYzIgLSBpTWF4IDtpTnVtKyspCisJCXsKKwkJCXN0clZhbHVlICs9ICIwIjsKKwkJfQorCQlpTWF4ID0gaURlYzIrMTsJCQkKKwl9CisJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vZm9yIHByb2Nlc3Npbmcgc2VwZXJhdG9yIHN0eWxlCisJaWYgKGlEZWMyIDwgaU1heCkKKwl7CisJCWlmIChpU2VwU3R5bGUgPT0gMCB8fCBpU2VwU3R5bGUgPT0gMSkKKwkJeworCQkJc3RyVmFsdWUuSW5zZXJ0KGlEZWMyLCAnLicpOworCQkJaU1heCsrOworCQl9CisJCWVsc2UgaWYgKGlTZXBTdHlsZSA9PSAyIHx8IGlTZXBTdHlsZSA9PSAzKQorCQl7CisJCQlzdHJWYWx1ZS5JbnNlcnQoaURlYzIsICcsJyk7CisJCQlpTWF4Kys7CisJCX0KKwkJCisJCWlmIChpRGVjMiA9PSAwKQorCQkJc3RyVmFsdWUuSW5zZXJ0KGlEZWMyLCAnMCcpOworCX0KKwlpZiAoaVNlcFN0eWxlID09IDAgfHwgaVNlcFN0eWxlID09IDIpCisJeworCQljaGFyIGNTZXBlcmF0b3I7CisJCWlmIChpU2VwU3R5bGUgPT0gMCkKKwkJCWNTZXBlcmF0b3IgPSAnLCc7CisJCWVsc2UKKwkJCWNTZXBlcmF0b3IgPSAnLic7CisJCQorCQlpbnQgaURlY1Bvc2l0aXZlLGlEZWNOYWdhdGl2ZTsKKwkJaURlY1Bvc2l0aXZlID0gaURlYzI7CisJCWlEZWNOYWdhdGl2ZSA9IGlEZWMyOwkJCisJCQorCQlmb3IgKGlEZWNQb3NpdGl2ZSA9IGlEZWMyIC0zOyBpRGVjUG9zaXRpdmUgPiAwO2lEZWNQb3NpdGl2ZSAtPSAzKQorCQl7CisJCQlzdHJWYWx1ZS5JbnNlcnQoaURlY1Bvc2l0aXZlLCBjU2VwZXJhdG9yKTsKKwkJCWlNYXgrKzsKKwkJfQorCX0KKwkKKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy9mb3IgcHJvY2Vzc2luZyBjdXJyZW5jeSBzdHJpbmcKKworCVZhbHVlID0gQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChzdHJWYWx1ZSk7CisJCisJc3RkOjp3c3RyaW5nIHN0clZhbHVlMihWYWx1ZSk7CisKKwlpZiAoYkN1cnJlbmN5UHJlcGVuZCkKKwkJc3RyVmFsdWUyID0gd3N0ckN1cnJlbmN5ICsgc3RyVmFsdWUyOworCWVsc2UKKwkJc3RyVmFsdWUyID0gc3RyVmFsdWUyICsgd3N0ckN1cnJlbmN5OworCQorCQorCQorCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwkvL2ZvciBwcm9jZXNzaW5nIG5lZ2F0aXZlIHN0eWxlCisJaWYgKGJOYWdhdGl2ZSkKKwl7CisJCWlmIChpTmVnU3R5bGUgPT0gMCkKKwkJeworCQkJc3RyVmFsdWUyLmluc2VydCgwLEwiLSIpOworCQl9CisJCWlmIChpTmVnU3R5bGUgPT0gMiB8fCBpTmVnU3R5bGUgPT0gMykKKwkJeworCQkJc3RyVmFsdWUyLmluc2VydCgwLEwiKCIpOworCQkJc3RyVmFsdWUyLmluc2VydChzdHJWYWx1ZTIubGVuZ3RoKCksTCIpIik7CisJCX0KKwkJaWYgKGlOZWdTdHlsZSA9PSAxIHx8IGlOZWdTdHlsZSA9PSAzKQorCQl7CisJCQlpZiAoRmllbGQgKiBmVGFyZ2V0ID0gcEV2ZW50LT5UYXJnZXRfRmllbGQoKSkKKwkJCXsKKwkJCQlDSlNfQXJyYXkgYXJDb2xvcihpc29sYXRlKTsKKwkJCQlDSlNfVmFsdWUgdkNvbEVsbShpc29sYXRlKTsKKwkJCQl2Q29sRWxtID0gTCJSR0IiOworCQkJCWFyQ29sb3IuU2V0RWxlbWVudCgwLHZDb2xFbG0pOworCQkJCXZDb2xFbG0gPSAxOworCQkJCWFyQ29sb3IuU2V0RWxlbWVudCgxLHZDb2xFbG0pOworCQkJCXZDb2xFbG0gPSAwOworCQkJCWFyQ29sb3IuU2V0RWxlbWVudCgyLHZDb2xFbG0pOworCQkJCQorCQkJCWFyQ29sb3IuU2V0RWxlbWVudCgzLHZDb2xFbG0pOworCQkJCQorCQkJCUNKU19Qcm9wVmFsdWUgdlByb3AoaXNvbGF0ZSk7CisJCQkJdlByb3AuU3RhcnRHZXR0aW5nKCk7CisJCQkJdlByb3A8PGFyQ29sb3I7CisJCQkJdlByb3AuU3RhcnRTZXR0aW5nKCk7CisJCQkJZlRhcmdldC0+dGV4dENvbG9yKGNjLHZQcm9wLHNFcnJvcik7Ly8gcmVkCisJCQl9CisJCX0KKwl9CisJZWxzZQorCXsKKwkJaWYgKGlOZWdTdHlsZSA9PSAxIHx8IGlOZWdTdHlsZSA9PSAzKQorCQl7CisJCQlpZiAoRmllbGQgKmZUYXJnZXQgPSBwRXZlbnQtPlRhcmdldF9GaWVsZCgpKQorCQkJeworCQkJCUNKU19BcnJheSBhckNvbG9yKGlzb2xhdGUpOworCQkJCUNKU19WYWx1ZSB2Q29sRWxtKGlzb2xhdGUpOworCQkJCXZDb2xFbG0gPSBMIlJHQiI7CisJCQkJYXJDb2xvci5TZXRFbGVtZW50KDAsdkNvbEVsbSk7CisJCQkJdkNvbEVsbSA9IDA7CisJCQkJYXJDb2xvci5TZXRFbGVtZW50KDEsdkNvbEVsbSk7CisJCQkJYXJDb2xvci5TZXRFbGVtZW50KDIsdkNvbEVsbSk7CisJCQkJYXJDb2xvci5TZXRFbGVtZW50KDMsdkNvbEVsbSk7CisJCQkJCisJCQkJQ0pTX1Byb3BWYWx1ZSB2UHJvcChpc29sYXRlKTsKKwkJCQl2UHJvcC5TdGFydEdldHRpbmcoKTsKKwkJCQlmVGFyZ2V0LT50ZXh0Q29sb3IoY2MsdlByb3Asc0Vycm9yKTsKKwkJCQkKKwkJCQlDSlNfQXJyYXkgYVByb3AoaXNvbGF0ZSk7CisJCQkJdlByb3AuQ29udmVydFRvQXJyYXkoYVByb3ApOworCisJCQkJQ1BXTF9Db2xvciBjclByb3A7CisJCQkJQ1BXTF9Db2xvciBjckNvbG9yOworCQkJCWNvbG9yOjpDb252ZXJ0QXJyYXlUb1BXTENvbG9yKGFQcm9wLCBjclByb3ApOworCQkJCWNvbG9yOjpDb252ZXJ0QXJyYXlUb1BXTENvbG9yKGFyQ29sb3IsIGNyQ29sb3IpOworCisJCQkJaWYgKGNyQ29sb3IgIT0gY3JQcm9wKQorCQkJCXsKKwkJCQkJQ0pTX1Byb3BWYWx1ZSB2UHJvcDIoaXNvbGF0ZSk7CisJCQkJCXZQcm9wMi5TdGFydEdldHRpbmcoKTsKKwkJCQkJdlByb3AyPDxhckNvbG9yOworCQkJCQl2UHJvcDIuU3RhcnRTZXR0aW5nKCk7CisgICAgIAkJCQlmVGFyZ2V0LT50ZXh0Q29sb3IoY2MsdlByb3AyLHNFcnJvcik7CisJCQkJfQorCQkJfQorCQl9CisJfQorCVZhbHVlID0gc3RyVmFsdWUyLmNfc3RyKCk7CisjZW5kaWYKKwlyZXR1cm4gVFJVRTsKK30KKworLy9mdW5jdGlvbiBBRk51bWJlcl9LZXlzdHJva2UobkRlYywgc2VwU3R5bGUsIG5lZ1N0eWxlLCBjdXJyU3R5bGUsIHN0ckN1cnJlbmN5LCBiQ3VycmVuY3lQcmVwZW5kKQorRlhfQk9PTCBDSlNfUHVibGljTWV0aG9kczo6QUZOdW1iZXJfS2V5c3Ryb2tlKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwlDSlNfRXZlbnRIYW5kbGVyKiBwRXZlbnQgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7CisJQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsKKwkKKwlpZihwYXJhbXMuc2l6ZSgpIDwgMikKKwkJcmV0dXJuIEZBTFNFOworCWludCBpU2VwU3R5bGUgPSBwYXJhbXNbMV07CisJCisJaWYgKGlTZXBTdHlsZSA8IDAgfHwgaVNlcFN0eWxlID4gMykKKwkJaVNlcFN0eWxlID0gMDsKKwlpZighcEV2ZW50LT5tX3BWYWx1ZSkKKwkJcmV0dXJuIEZBTFNFOworCUNGWF9XaWRlU3RyaW5nICYgdmFsID0gcEV2ZW50LT5WYWx1ZSgpOwkKKwlDRlhfV2lkZVN0cmluZyAmIHdfc3RyQ2hhbmdlID0gcEV2ZW50LT5DaGFuZ2UoKTsKKyAgICBDRlhfV2lkZVN0cmluZyB3X3N0clZhbHVlID0gdmFsOworCisJaWYgKHBFdmVudC0+V2lsbENvbW1pdCgpKQorCXsKKwkJQ0ZYX1dpZGVTdHJpbmcgd3N0ckNoYW5nZSA9IHdfc3RyQ2hhbmdlOworCQlDRlhfV2lkZVN0cmluZyB3c3RyVmFsdWUgPSBTdHJMVHJpbSh3X3N0clZhbHVlKTsKKwkJaWYgKHdzdHJWYWx1ZS5Jc0VtcHR5KCkpCisJCQlyZXR1cm4gVFJVRTsKKwkJCisJCUNGWF9XaWRlU3RyaW5nIHN3VGVtcCA9IHdzdHJWYWx1ZTsKKwkJc3dUZW1wLlJlcGxhY2UoKEZYX0xQQ1dTVFIpTCIsIiwgKEZYX0xQQ1dTVFIpTCIuIik7CisJCWlmICghSXNOdW1iZXIoc3dUZW1wKSkgLy8hKElzTnVtYmVyKHdzdHJDaGFuZ2UpICYmIAorCQl7CisJCQlwRXZlbnQtPlJjKCkgPSBGQUxTRTsKKwkJCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTQUZOVU1CRVJfS0VZU1RST0tFKTsKKwkJCUFsZXJ0KHBDb250ZXh0LCBzRXJyb3IpOworCQkJcmV0dXJuIFRSVUU7CisJCX0KKwkJcmV0dXJuIFRSVUU7IC8vIGl0IGhhcHBlbnMgYWZ0ZXIgdGhlIGxhc3Qga2V5c3Ryb2tlIGFuZCBiZWZvcmUgdmFsaWRhdGluZywKKwl9CisJCisJc3RkOjp3c3RyaW5nIHdfc3RyVmFsdWUyICh3X3N0clZhbHVlKTsKKwlzdGQ6OndzdHJpbmcgd19zdHJDaGFuZ2UyKHdfc3RyQ2hhbmdlKTsKKwkKKwlzdGQ6OndzdHJpbmcgd19zdHJTZWxlY3RlZDsKKwlpZigtMSAhPSBwRXZlbnQtPlNlbFN0YXJ0KCkpCisJCXdfc3RyU2VsZWN0ZWQgPSB3X3N0clZhbHVlMi5zdWJzdHIocEV2ZW50LT5TZWxTdGFydCgpLChwRXZlbnQtPlNlbEVuZCgpIC0gcEV2ZW50LT5TZWxTdGFydCgpKSk7CisJRlhfQk9PTCBiSGFzU2lnbiA9ICh3X3N0clZhbHVlMi5maW5kKCctJykgIT0gLTEpICYmICh3X3N0clNlbGVjdGVkLmZpbmQoJy0nKSA9PSAtMSk7CisJaWYgKGJIYXNTaWduKQorCXsKKwkJLy9jYW4ndCBpbnNlcnQgImNoYW5nZSIgaW4gZnJvbnQgdG8gc2lnbiBwb3N0aW9uLgorCQlpZiAocEV2ZW50LT5TZWxTdGFydCgpID09IDApCisJCXsKKyAgICAgICAgICAgIEZYX0JPT0wgJmJSYyA9IHBFdmVudC0+UmMoKTsKKwkJCWJSYyA9IEZBTFNFOworCQkJcmV0dXJuIFRSVUU7CisJCX0KKwl9CisKKwljaGFyIGNTZXAgPSBMJy4nOworCisJc3dpdGNoIChpU2VwU3R5bGUpCisJeworCWNhc2UgMDoKKwljYXNlIDE6CisJCWNTZXAgPSBMJy4nOworCQlicmVhazsKKwljYXNlIDI6CisJY2FzZSAzOgorCQljU2VwID0gTCcsJzsKKwkJYnJlYWs7CisJfQorCQorCUZYX0JPT0wgYkhhc1NlcCA9ICh3X3N0clZhbHVlMi5maW5kKGNTZXApICE9IC0xKTsKKwlmb3IgKHN0ZDo6d3N0cmluZzo6aXRlcmF0b3IgaXQgPSB3X3N0ckNoYW5nZTIuYmVnaW4oKTsgaXQgIT0gd19zdHJDaGFuZ2UyLmVuZCgpOyBpdCsrKQorCXsKKwkJaWYgKCppdCA9PSBjU2VwKQorCQl7CisJCQlpZiAoYkhhc1NlcCkKKwkJCXsKKwkJCQlGWF9CT09MICZiUmMgPSBwRXZlbnQtPlJjKCk7CisJCQkJYlJjID0gRkFMU0U7CisJCQkJcmV0dXJuIFRSVUU7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJYkhhc1NlcCA9IFRSVUU7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJaWYgKCppdCA9PSBMJy0nKQorCQl7CisJCQlpZiAoYkhhc1NpZ24pCisJCQl7CisJCQkJRlhfQk9PTCAmYlJjID0gcEV2ZW50LT5SYygpOworCQkJCWJSYyA9IEZBTFNFOworCQkJCXJldHVybiBUUlVFOworCQkJfQorCQkJZWxzZSBpZiAoaXQgIT0gd19zdHJDaGFuZ2UyLmJlZ2luKCkpIC8vc2lnbidzIHBvc2l0aW9uIGlzIG5vdCBjb3JyZWN0CisJCQl7CisJCQkJRlhfQk9PTCAmYlJjID0gcEV2ZW50LT5SYygpOworCQkJCWJSYyA9IEZBTFNFOworCQkJCXJldHVybiBUUlVFOworCQkJfQorCQkJZWxzZSBpZiAocEV2ZW50LT5TZWxTdGFydCgpICE9IDApCisJCQl7CisJCQkJRlhfQk9PTCAmYlJjID0gcEV2ZW50LT5SYygpOworCQkJCWJSYyA9IEZBTFNFOworCQkJCXJldHVybiBUUlVFOworCQkJfQorCQkJYkhhc1NpZ24gPSBUUlVFOworCQkJY29udGludWU7CisJCX0KKwkJCisJCWlmICghSXNEaWdpdCgqaXQpKQorCQl7CQkJCisJCQlGWF9CT09MICZiUmMgPSBwRXZlbnQtPlJjKCk7CisJCQliUmMgPSBGQUxTRTsKKwkJCXJldHVybiBUUlVFOworCQl9CisJfQorCQorCQorCXN0ZDo6d3N0cmluZyB3X3ByZWZpeCA9IHdfc3RyVmFsdWUyLnN1YnN0cigwLHBFdmVudC0+U2VsU3RhcnQoKSk7CisJc3RkOjp3c3RyaW5nIHdfcG9zdGZpeDsKKwlpZiAocEV2ZW50LT5TZWxFbmQoKTwoaW50KXdfc3RyVmFsdWUyLmxlbmd0aCgpKQorCQl3X3Bvc3RmaXggID0gd19zdHJWYWx1ZTIuc3Vic3RyKHBFdmVudC0+U2VsRW5kKCkpOworCXdfc3RyVmFsdWUyID0gd19wcmVmaXggKyB3X3N0ckNoYW5nZTIgKyB3X3Bvc3RmaXg7CisJd19zdHJWYWx1ZSA9IHdfc3RyVmFsdWUyLmNfc3RyKCk7CisJdmFsID0gd19zdHJWYWx1ZTsKKwlyZXR1cm4gVFJVRTsJCQorCQorfQorCisvL2Z1bmN0aW9uIEFGUGVyY2VudF9Gb3JtYXQobkRlYywgc2VwU3R5bGUpCitGWF9CT09MIENKU19QdWJsaWNNZXRob2RzOjpBRlBlcmNlbnRfRm9ybWF0KE9CSl9NRVRIT0RfUEFSQU1TKQoreworI2lmIF9GWF9PU18gIT0gX0ZYX0FORFJPSURfCisJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0ICopY2M7CisJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCUNKU19FdmVudEhhbmRsZXIqIHBFdmVudCA9IHBDb250ZXh0LT5HZXRFdmVudEhhbmRsZXIoKTsKKwlBU1NFUlQocEV2ZW50ICE9IE5VTEwpOworCisgICAgaWYgKHBhcmFtcy5zaXplKCkgIT0gMikKKwl7CisJCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7CisJCXJldHVybiBGQUxTRTsKKwl9CisJaWYoIXBFdmVudC0+bV9wVmFsdWUpCisJCXJldHVybiBGQUxTRTsKKwlDRlhfV2lkZVN0cmluZyYgVmFsdWUgPSBwRXZlbnQtPlZhbHVlKCk7CisJCisvLyAgICAgSFdORCBoTWFpbkZyYW1lID0gTlVMTDsKKy8vIAkKKy8vIAlDUERGU0RLX0Zvcm1GaWxsQXBwICpwQXBwID0gcENvbnRleHQtPkdldFJlYWRlckFwcCgpOworLy8gCUFTU0VSVChwQXBwKTsKKy8vIAloTWFpbkZyYW1lID0gcEFwcC0+R2V0TWFpbkZyYW1lV25kKCk7CisJCQorCUNGWF9CeXRlU3RyaW5nIHN0clZhbHVlID0gU3RyVHJpbShDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUoVmFsdWUpKTsKKwkKKwlpZiAoc3RyVmFsdWUuSXNFbXB0eSgpKQorCQlyZXR1cm4gVFJVRTsKKwkKKwlpbnQgaURlYyA9IHBhcmFtc1swXTsKKwlpbnQgaVNlcFN0eWxlID0gcGFyYW1zWzFdOworCQorCS8vQVNTRVJUKGlEZWMgPiAwKTsKKwlpZiAoaURlYyA8IDApCisJCWlEZWMgPSAtaURlYzsKKwkKKwlpZiAoaVNlcFN0eWxlIDwgMCB8fCBpU2VwU3R5bGUgPiAzKQorCQlpU2VwU3R5bGUgPSAwOworCQorCQorCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCS8vZm9yIHByb2Nlc3NpbmcgZGVjaW1hbCBwbGFjZXMKKwlkb3VibGUgZFZhbHVlID0gYXRvZihzdHJWYWx1ZSk7CisJZFZhbHVlICo9IDEwMDsKKwlpZiAoaURlYyA+IDApCisJCWRWYWx1ZSArPSBET1VCTEVfQ09SUkVDVDsvL9Cj1f0KKworCWludCBpRGVjMjsKKwlGWF9CT09MIGJOYWdhdGl2ZSA9IEZBTFNFOworCXN0clZhbHVlID0gZmN2dChkVmFsdWUsaURlYywmaURlYzIsJmJOYWdhdGl2ZSk7CisgICAgaWYgKHN0clZhbHVlLklzRW1wdHkoKSkKKwl7CisJCWRWYWx1ZSA9IDA7CisJCXN0clZhbHVlID0gZmN2dChkVmFsdWUsaURlYywmaURlYzIsJmJOYWdhdGl2ZSk7CisJfQorCisJaWYgKGlEZWMyIDwgMCkKKwl7CisJCWZvciAoaW50IGlOdW0gPSAwOyBpTnVtIDwgYWJzKGlEZWMyKTsgaU51bSsrKQorCQl7CisJCQlzdHJWYWx1ZSA9ICIwIiArIHN0clZhbHVlOworCQl9CisJCWlEZWMyID0gMDsKKwkJCisJfQorCWludCBpTWF4ID0gc3RyVmFsdWUuR2V0TGVuZ3RoKCk7CisJaWYgKGlEZWMyID4gaU1heCkKKwl7CisJCWZvciAoaW50IGlOdW0gPSAwOyBpTnVtIDw9IGlEZWMyIC0gaU1heDsgaU51bSsrKQorCQl7CisJCQlzdHJWYWx1ZSArPSAiMCI7CisJCX0KKwkJaU1heCA9IGlEZWMyKzE7CQkJCisJfQorCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvL2ZvciBwcm9jZXNzaW5nIHNlcGVyYXRvciBzdHlsZQorCWlmIChpRGVjMiA8IGlNYXgpCisJeworCQlpZiAoaVNlcFN0eWxlID09IDAgfHwgaVNlcFN0eWxlID09IDEpCisJCXsKKwkJCXN0clZhbHVlLkluc2VydChpRGVjMiwgJy4nKTsKKwkJCWlNYXgrKzsKKwkJfQorCQllbHNlIGlmIChpU2VwU3R5bGUgPT0gMiB8fCBpU2VwU3R5bGUgPT0gMykKKwkJeworCQkJc3RyVmFsdWUuSW5zZXJ0KGlEZWMyLCAnLCcpOworCQkJaU1heCsrOworCQl9CisJCQorCQlpZiAoaURlYzIgPT0gMCkKKwkJCXN0clZhbHVlLkluc2VydChpRGVjMiwgJzAnKTsKKwl9CisJaWYgKGlTZXBTdHlsZSA9PSAwIHx8IGlTZXBTdHlsZSA9PSAyKQorCXsKKwkJY2hhciBjU2VwZXJhdG9yOworCQlpZiAoaVNlcFN0eWxlID09IDApCisJCQljU2VwZXJhdG9yID0gJywnOworCQllbHNlCisJCQljU2VwZXJhdG9yID0gJy4nOworCQkKKwkJaW50IGlEZWNQb3NpdGl2ZSxpRGVjTmFnYXRpdmU7CisJCWlEZWNQb3NpdGl2ZSA9IGlEZWMyOworCQlpRGVjTmFnYXRpdmUgPSBpRGVjMjsKKwkJCQorCQlmb3IgKGlEZWNQb3NpdGl2ZSA9IGlEZWMyIC0zOyBpRGVjUG9zaXRpdmUgPiAwOyBpRGVjUG9zaXRpdmUgLT0gMykKKwkJeworCQkJc3RyVmFsdWUuSW5zZXJ0KGlEZWNQb3NpdGl2ZSxjU2VwZXJhdG9yKTsKKwkJCWlNYXgrKzsKKwkJfQorCX0KKwkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCS8vbmFnYXRpdmUgbWFyaworCWlmKGJOYWdhdGl2ZSkKKwkJc3RyVmFsdWUgPSAiLSIgKyBzdHJWYWx1ZTsKKwlzdHJWYWx1ZSArPSAiJSI7CisJVmFsdWUgPSBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKHN0clZhbHVlKTsKKyNlbmRpZgorCXJldHVybiBUUlVFOworfQorLy9BRlBlcmNlbnRfS2V5c3Ryb2tlKG5EZWMsIHNlcFN0eWxlKQorRlhfQk9PTCBDSlNfUHVibGljTWV0aG9kczo6QUZQZXJjZW50X0tleXN0cm9rZShPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlyZXR1cm4gQUZOdW1iZXJfS2V5c3Ryb2tlKGNjLHBhcmFtcyx2UmV0LHNFcnJvcik7Cit9CisKKy8vZnVuY3Rpb24gQUZEYXRlX0Zvcm1hdEV4KGNGb3JtYXQpCitGWF9CT09MIENKU19QdWJsaWNNZXRob2RzOjpBRkRhdGVfRm9ybWF0RXgoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0ICopY2M7CisJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCUNKU19FdmVudEhhbmRsZXIqIHBFdmVudCA9IHBDb250ZXh0LT5HZXRFdmVudEhhbmRsZXIoKTsKKwlBU1NFUlQocEV2ZW50ICE9IE5VTEwpOworCisJaWYgKHBhcmFtcy5zaXplKCkgIT0gMSkKKwl7CisJCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7CisJCXJldHVybiBGQUxTRTsKKwl9CQorCWlmKCFwRXZlbnQtPm1fcFZhbHVlKQorCQlyZXR1cm4gRkFMU0U7CisJQ0ZYX1dpZGVTdHJpbmcmIHZhbCA9IHBFdmVudC0+VmFsdWUoKTsKKwkKKwlDRlhfV2lkZVN0cmluZyBzdHJWYWx1ZSA9IHZhbDsJCisJaWYgKHN0clZhbHVlLklzRW1wdHkoKSkgcmV0dXJuIFRSVUU7CQkKKworCUNGWF9XaWRlU3RyaW5nIHNGb3JtYXQgPSBwYXJhbXNbMF0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsKKworCUZYX0JPT0wgYldyb25nRm9ybWF0ID0gRkFMU0U7CisJZG91YmxlIGREYXRlID0gMC4wZjsKKworCWlmKHN0clZhbHVlLkZpbmQoTCJHTVQiKSAhPSAtMSkKKwl7CisJCS8vZm9yIEdNVCBmb3JtYXQgdGltZQorCQkvL3N1Y2ggYXMgIlR1ZSBBdWcgMTEgMTQ6MjQ6MTYgR01UKzA4MDAyMDA5IgorCQlkRGF0ZSA9IE1ha2VJbnRlckRhdGUoc3RyVmFsdWUpOworCX0KKwllbHNlCisJeworCQlkRGF0ZSA9IE1ha2VSZWd1bGFyRGF0ZShzdHJWYWx1ZSxzRm9ybWF0LGJXcm9uZ0Zvcm1hdCk7CisJfQorCisJaWYgKEpTX1BvcnRJc05hbihkRGF0ZSkpCisJeworCQlDRlhfV2lkZVN0cmluZyBzd01zZzsKKwkJc3dNc2cuRm9ybWF0KEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSU0VEQVRFKSwgKEZYX0xQQ1dTVFIpc0Zvcm1hdCk7CisJCUFsZXJ0KHBDb250ZXh0LCBzd01zZyk7CisJCXJldHVybiBGQUxTRTsKKwl9CisJCisJdmFsID0gIE1ha2VGb3JtYXREYXRlKGREYXRlLHNGb3JtYXQpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK2RvdWJsZSBDSlNfUHVibGljTWV0aG9kczo6TWFrZUludGVyRGF0ZShDRlhfV2lkZVN0cmluZyBzdHJWYWx1ZSkKK3sKKwlpbnQgbkhvdXI7CisJaW50IG5NaW47CisJaW50IG5TZWM7CisJaW50IG5ZZWFyOworCWludCBuTW9udGg7CisJaW50IG5EYXk7CisKKwlDRlhfV2lkZVN0cmluZ0FycmF5IHdzQXJyYXk7CisJQ0ZYX1dpZGVTdHJpbmcgc01vbnRoID0gTCIiOworCUNGWF9XaWRlU3RyaW5nIHNUZW1wID0gTCIiOworCWludCBuU2l6ZSA9IHN0clZhbHVlLkdldExlbmd0aCgpOworCisJZm9yKGludCBpID0gMDsgaSA8IG5TaXplOyBpKyspCisJeworCQlGWF9XQ0hBUiBjID0gc3RyVmFsdWUuR2V0QXQoaSk7CisJCWlmKGMgPT0gTCcgJyB8fCBjID09IEwnOicpCisJCXsJCisJCQl3c0FycmF5LkFkZChzVGVtcCk7CisJCQlzVGVtcCA9IEwiIjsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc1RlbXAgKz0gYzsKKwl9CisJCisJd3NBcnJheS5BZGQoc1RlbXApOworCWlmKHdzQXJyYXkuR2V0U2l6ZSgpICE9IDgpcmV0dXJuIDA7CisKKwlzVGVtcCA9IHdzQXJyYXlbMV07CisJaWYoc1RlbXAuQ29tcGFyZShMIkphbiIpID09IDApIG5Nb250aCA9IDE7CisJaWYoc1RlbXAuQ29tcGFyZShMIkZlYiIpID09IDApIG5Nb250aCA9IDI7CisJaWYoc1RlbXAuQ29tcGFyZShMIk1hciIpID09IDApIG5Nb250aCA9IDM7CisJaWYoc1RlbXAuQ29tcGFyZShMIkFwciIpID09IDApIG5Nb250aCA9IDQ7CisJaWYoc1RlbXAuQ29tcGFyZShMIk1heSIpID09IDApIG5Nb250aCA9IDU7CisJaWYoc1RlbXAuQ29tcGFyZShMIkp1biIpID09IDApIG5Nb250aCA9IDY7CisJaWYoc1RlbXAuQ29tcGFyZShMIkp1bCIpID09IDApIG5Nb250aCA9IDc7CisJaWYoc1RlbXAuQ29tcGFyZShMIkF1ZyIpID09IDApIG5Nb250aCA9IDg7CisJaWYoc1RlbXAuQ29tcGFyZShMIlNlcCIpID09IDApIG5Nb250aCA9IDk7CisJaWYoc1RlbXAuQ29tcGFyZShMIk9jdCIpID09IDApIG5Nb250aCA9IDEwOworCWlmKHNUZW1wLkNvbXBhcmUoTCJOb3YiKSA9PSAwKSBuTW9udGggPSAxMTsKKwlpZihzVGVtcC5Db21wYXJlKEwiRGVjIikgPT0gMCkgbk1vbnRoID0gMTI7CisKKwluRGF5ID0gKGludClQYXJzZVN0cmluZ1RvTnVtYmVyKHdzQXJyYXlbMl0pOworCW5Ib3VyID0gKGludClQYXJzZVN0cmluZ1RvTnVtYmVyKHdzQXJyYXlbM10pOworCW5NaW4gPSAoaW50KVBhcnNlU3RyaW5nVG9OdW1iZXIod3NBcnJheVs0XSk7CisJblNlYyA9IChpbnQpUGFyc2VTdHJpbmdUb051bWJlcih3c0FycmF5WzVdKTsKKwluWWVhciA9IChpbnQpUGFyc2VTdHJpbmdUb051bWJlcih3c0FycmF5WzddKTsKKworCWRvdWJsZSBkUmV0ID0gSlNfTWFrZURhdGUoSlNfTWFrZURheShuWWVhcixuTW9udGggLSAxLG5EYXkpLEpTX01ha2VUaW1lKG5Ib3VyLCBuTWluLCBuU2VjLCAwKSk7CisKKwlpZiAoSlNfUG9ydElzTmFuKGRSZXQpKQorCXsKKwkJZFJldCA9IEpTX0RhdGVQYXJzZShzdHJWYWx1ZSk7CisJfQorCQorCXJldHVybiBkUmV0OworfQorCisvL0FGRGF0ZV9LZXlzdHJva2VFeChjRm9ybWF0KQorRlhfQk9PTCBDSlNfUHVibGljTWV0aG9kczo6QUZEYXRlX0tleXN0cm9rZUV4KE9CSl9NRVRIT0RfUEFSQU1TKQoreworCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwlDSlNfRXZlbnRIYW5kbGVyKiBwRXZlbnQgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7CisJQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsKKworCWlmIChwYXJhbXMuc2l6ZSgpICE9IDEpCisJeworCQlzRXJyb3IgPSBMIkFGRGF0ZV9LZXlzdHJva2VFeCdzIHBhcmFtZXRlcnMnIHNpemUgciBub3QgY29ycmVjdCI7CisJCXJldHVybiBGQUxTRTsKKwl9CQorCQorCWlmIChwRXZlbnQtPldpbGxDb21taXQoKSkKKwl7CisJCWlmKCFwRXZlbnQtPm1fcFZhbHVlKQorCQkJcmV0dXJuIEZBTFNFOworCQlDRlhfV2lkZVN0cmluZyBzdHJWYWx1ZSA9IHBFdmVudC0+VmFsdWUoKTsKKwkJaWYgKHN0clZhbHVlLklzRW1wdHkoKSkgcmV0dXJuIFRSVUU7CisKKwkJQ0ZYX1dpZGVTdHJpbmcgc0Zvcm1hdCA9IHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOworCisJCUZYX0JPT0wgYldyb25nRm9ybWF0ID0gRkFMU0U7CisJCWRvdWJsZSBkUmV0ID0gTWFrZVJlZ3VsYXJEYXRlKHN0clZhbHVlLHNGb3JtYXQsYldyb25nRm9ybWF0KTsKKwkJaWYgKGJXcm9uZ0Zvcm1hdCB8fCBKU19Qb3J0SXNOYW4oZFJldCkpCisJCXsKKwkJCUNGWF9XaWRlU3RyaW5nIHN3TXNnOworCQkJc3dNc2cuRm9ybWF0KEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSU0VEQVRFKSwgKEZYX0xQQ1dTVFIpc0Zvcm1hdCk7CisJCQlBbGVydChwQ29udGV4dCwgc3dNc2cpOworCQkJcEV2ZW50LT5SYygpID0gRkFMU0U7CisJCQlyZXR1cm4gVFJVRTsKKwkJfQorCX0KKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBDSlNfUHVibGljTWV0aG9kczo6QUZEYXRlX0Zvcm1hdChPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDo6R2V0SXNvbGF0ZShjYyk7CisKKwlpZiAocGFyYW1zLnNpemUoKSAhPSAxKQorCXsKKwkJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0KiljYzsKKwkJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCisJCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlpbnQgaUluZGV4ID0gcGFyYW1zWzBdOworCUZYX0xQQ1dTVFIgY0Zvcm1hdHNbXSA9ICB7KEZYX0xQQ1dTVFIpTCJtL2QiLCAoRlhfTFBDV1NUUilMIm0vZC95eSIsIChGWF9MUENXU1RSKUwibW0vZGQveXkiLCAoRlhfTFBDV1NUUilMIm1tL3l5IiwgKEZYX0xQQ1dTVFIpTCJkLW1tbSIsIChGWF9MUENXU1RSKUwiZC1tbW0teXkiLCAoRlhfTFBDV1NUUilMImRkLW1tbS15eSIsCisJCShGWF9MUENXU1RSKUwieXktbW0tZGQiLCAoRlhfTFBDV1NUUilMIm1tbS15eSIsIChGWF9MUENXU1RSKUwibW1tbS15eSIsIChGWF9MUENXU1RSKUwibW1tIGQsIHl5eXkiLCAoRlhfTFBDV1NUUilMIm1tbW0gZCwgeXl5eSIsCisJCShGWF9MUENXU1RSKUwibS9kL3l5IGg6TU0gdHQiLCAoRlhfTFBDV1NUUilMIm0vZC95eSBISDpNTSIgfTsKKworCUFTU0VSVChpSW5kZXggPCBzaXplb2YoY0Zvcm1hdHMpL3NpemVvZihGWF9MUENXU1RSKSk7CisKKwlpZiAoaUluZGV4IDwgMCkKKwkJaUluZGV4ID0gMDsKKwlpZiAoaUluZGV4ID49IHNpemVvZihjRm9ybWF0cykvc2l6ZW9mKEZYX0xQQ1dTVFIpKQorCQlpSW5kZXggPSAwOworCUNKU19QYXJhbWV0ZXJzIG5ld1BhcmFtczsKKwlDSlNfVmFsdWUgdmFsKGlzb2xhdGUsY0Zvcm1hdHNbaUluZGV4XSk7CisJbmV3UGFyYW1zLnB1c2hfYmFjayh2YWwpOworCXJldHVybiBBRkRhdGVfRm9ybWF0RXgoY2MsbmV3UGFyYW1zLHZSZXQsc0Vycm9yKTsKK30KKworLy9BRkRhdGVfS2V5c3Ryb2tlRXgoY0Zvcm1hdCkKK0ZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6OkFGRGF0ZV9LZXlzdHJva2UoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSA6OkdldElzb2xhdGUoY2MpOworCisJaWYgKHBhcmFtcy5zaXplKCkgIT0gMSkKKwl7CisJCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7CisJCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKworCQlzRXJyb3IgPSBKU0dldFN0cmluZ0Zyb21JRChwQ29udGV4dCwgSURTX1NUUklOR19KU1BBUkFNRVJST1IpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJaW50IGlJbmRleCA9IHBhcmFtc1swXTsKKwlGWF9MUENXU1RSIGNGb3JtYXRzW10gPSAgeyhGWF9MUENXU1RSKUwibS9kIiwgKEZYX0xQQ1dTVFIpTCJtL2QveXkiLCAoRlhfTFBDV1NUUilMIm1tL2RkL3l5IiwgKEZYX0xQQ1dTVFIpTCJtbS95eSIsIChGWF9MUENXU1RSKUwiZC1tbW0iLCAoRlhfTFBDV1NUUilMImQtbW1tLXl5IiwgKEZYX0xQQ1dTVFIpTCJkZC1tbW0teXkiLAorCQkoRlhfTFBDV1NUUilMInl5LW1tLWRkIiwgKEZYX0xQQ1dTVFIpTCJtbW0teXkiLCAoRlhfTFBDV1NUUilMIm1tbW0teXkiLCAoRlhfTFBDV1NUUilMIm1tbSBkLCB5eXl5IiwgKEZYX0xQQ1dTVFIpTCJtbW1tIGQsIHl5eXkiLAorCQkoRlhfTFBDV1NUUilMIm0vZC95eSBoOk1NIHR0IiwgKEZYX0xQQ1dTVFIpTCJtL2QveXkgSEg6TU0iIH07CisKKwlBU1NFUlQoaUluZGV4PHNpemVvZihjRm9ybWF0cykvc2l6ZW9mKEZYX0xQQ1dTVFIpKTsKKworCWlmIChpSW5kZXggPCAwKQorCQlpSW5kZXggPSAwOworCWlmIChpSW5kZXggPj0gc2l6ZW9mKGNGb3JtYXRzKS9zaXplb2YoRlhfTFBDV1NUUikpCisJCWlJbmRleCA9IDA7CisJQ0pTX1BhcmFtZXRlcnMgbmV3UGFyYW1zOworCUNKU19WYWx1ZSB2YWwoaXNvbGF0ZSxjRm9ybWF0c1tpSW5kZXhdKTsKKwluZXdQYXJhbXMucHVzaF9iYWNrKHZhbCk7CisJcmV0dXJuIEFGRGF0ZV9LZXlzdHJva2VFeChjYyxuZXdQYXJhbXMsdlJldCxzRXJyb3IpOworfQorCisvL2Z1bmN0aW9uIEFGVGltZV9Gb3JtYXQocHRmKQorRlhfQk9PTCBDSlNfUHVibGljTWV0aG9kczo6QUZUaW1lX0Zvcm1hdChPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDo6R2V0SXNvbGF0ZShjYyk7CisKKwlpZiAocGFyYW1zLnNpemUoKSAhPSAxKQorCXsKKwkJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0KiljYzsKKwkJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCQlzRXJyb3IgPSBKU0dldFN0cmluZ0Zyb21JRChwQ29udGV4dCwgSURTX1NUUklOR19KU1BBUkFNRVJST1IpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJaW50IGlJbmRleCA9IHBhcmFtc1swXTsKKwlGWF9MUENXU1RSIGNGb3JtYXRzW10gPSB7KEZYX0xQQ1dTVFIpTCJISDpNTSIsIChGWF9MUENXU1RSKUwiaDpNTSB0dCIsIChGWF9MUENXU1RSKUwiSEg6TU06c3MiLCAoRlhfTFBDV1NUUilMImg6TU06c3MgdHQifTsKKworCUFTU0VSVChpSW5kZXg8c2l6ZW9mKGNGb3JtYXRzKS9zaXplb2YoRlhfTFBDV1NUUikpOworCisJaWYgKGlJbmRleCA8IDApCisJCWlJbmRleCA9IDA7CisJaWYgKGlJbmRleCA+PSBzaXplb2YoY0Zvcm1hdHMpL3NpemVvZihGWF9MUENXU1RSKSkKKwkJaUluZGV4ID0gMDsKKwlDSlNfUGFyYW1ldGVycyBuZXdQYXJhbXM7CisJQ0pTX1ZhbHVlIHZhbChpc29sYXRlLGNGb3JtYXRzW2lJbmRleF0pOworCW5ld1BhcmFtcy5wdXNoX2JhY2sodmFsKTsKKwlyZXR1cm4gQUZEYXRlX0Zvcm1hdEV4KGNjLG5ld1BhcmFtcyx2UmV0LHNFcnJvcik7Cit9CisKK0ZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6OkFGVGltZV9LZXlzdHJva2UoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSA6OkdldElzb2xhdGUoY2MpOworCWlmIChwYXJhbXMuc2l6ZSgpICE9IDEpCisJeworCQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOworCQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7CisJCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlpbnQgaUluZGV4ID0gcGFyYW1zWzBdOworCUZYX0xQQ1dTVFIgY0Zvcm1hdHNbXSA9IHsoRlhfTFBDV1NUUilMIkhIOk1NIiwgKEZYX0xQQ1dTVFIpTCJoOk1NIHR0IiwgKEZYX0xQQ1dTVFIpTCJISDpNTTpzcyIsIChGWF9MUENXU1RSKUwiaDpNTTpzcyB0dCJ9OworCisJQVNTRVJUKGlJbmRleDxzaXplb2YoY0Zvcm1hdHMpL3NpemVvZihGWF9MUENXU1RSKSk7CisKKwlpZiAoaUluZGV4IDwgMCkKKwkJaUluZGV4ID0gMDsKKwlpZiAoaUluZGV4ID49IHNpemVvZihjRm9ybWF0cykvc2l6ZW9mKEZYX0xQQ1dTVFIpKQorCQlpSW5kZXggPSAwOworCUNKU19QYXJhbWV0ZXJzIG5ld1BhcmFtczsKKwlDSlNfVmFsdWUgdmFsKGlzb2xhdGUsY0Zvcm1hdHNbaUluZGV4XSk7CisJbmV3UGFyYW1zLnB1c2hfYmFjayh2YWwpOworCXJldHVybiBBRkRhdGVfS2V5c3Ryb2tlRXgoY2MsbmV3UGFyYW1zLHZSZXQsc0Vycm9yKTsKK30KKworRlhfQk9PTCBDSlNfUHVibGljTWV0aG9kczo6QUZUaW1lX0Zvcm1hdEV4KE9CSl9NRVRIT0RfUEFSQU1TKQoreworCXJldHVybiBBRkRhdGVfRm9ybWF0RXgoY2MscGFyYW1zLHZSZXQsc0Vycm9yKTsKK30KKworRlhfQk9PTCBDSlNfUHVibGljTWV0aG9kczo6QUZUaW1lX0tleXN0cm9rZUV4KE9CSl9NRVRIT0RfUEFSQU1TKQoreworCXJldHVybiBBRkRhdGVfS2V5c3Ryb2tlRXgoY2MscGFyYW1zLHZSZXQsc0Vycm9yKTsKK30KKworLy9mdW5jdGlvbiBBRlNwZWNpYWxfRm9ybWF0KHBzZikKK0ZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6OkFGU3BlY2lhbF9Gb3JtYXQoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0ICopY2M7CisJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCisJaWYgKHBhcmFtcy5zaXplKCkgIT0gMSkKKwl7CisJCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlzdGQ6OnN0cmluZyBjRm9ybWF0OworCWludCBpSW5kZXggPSBwYXJhbXNbMF07CisKKwlDSlNfRXZlbnRIYW5kbGVyKiBwRXZlbnQgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7CisJQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsKKworCWlmKCFwRXZlbnQtPm1fcFZhbHVlKQorCQlyZXR1cm4gRkFMU0U7CisJQ0ZYX1dpZGVTdHJpbmcmIFZhbHVlID0gcEV2ZW50LT5WYWx1ZSgpOwkKKwlzdGQ6OnN0cmluZyBzdHJTcmMgPSAoRlhfTFBDU1RSKUNGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShWYWx1ZSk7CisJCisJc3dpdGNoIChpSW5kZXgpIAorCXsKKwljYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAgIAorCQljRm9ybWF0ID0gIjk5OTk5IjsKKwkJYnJlYWs7CisJY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAKKwkJY0Zvcm1hdCA9ICI5OTk5OS05OTk5IjsKKwkJYnJlYWs7CisJY2FzZSAyOiAgICAgICAgICAgICAgICAgICAgICAgICAKKwkJeworCQkJc3RkOjpzdHJpbmcgTnVtYmVyU3RyOworCQkJdXRpbDo6cHJpbnR4KCI5OTk5OTk5OTk5Iiwgc3RyU3JjLE51bWJlclN0cik7IAorCQkJaWYgKE51bWJlclN0ci5sZW5ndGgoKSA+PSAxMCApCisJCQkJY0Zvcm1hdCA9ICIoOTk5KSA5OTktOTk5OSI7CisJCQllbHNlIAorCQkJCWNGb3JtYXQgPSAiOTk5LTk5OTkiOworCQkJYnJlYWs7CisJCX0KKwljYXNlIDM6CisJCWNGb3JtYXQgPSAiOTk5LTk5LTk5OTkiOworCQlicmVhazsKKwl9CisJCisJc3RkOjpzdHJpbmcgc3RyRGVzOworCXV0aWw6OnByaW50eChjRm9ybWF0LHN0clNyYyxzdHJEZXMpOworCVZhbHVlID0gQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChzdHJEZXMuY19zdHIoKSk7CisJcmV0dXJuIFRSVUU7Cit9CisKKworLy9mdW5jdGlvbiBBRlNwZWNpYWxfS2V5c3Ryb2tlRXgobWFzaykKK0ZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6OkFGU3BlY2lhbF9LZXlzdHJva2VFeChPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQgKiljYzsKKwlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7CisJQ0pTX0V2ZW50SGFuZGxlciogcEV2ZW50ID0gcENvbnRleHQtPkdldEV2ZW50SGFuZGxlcigpOworCisJQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsKKworCWlmIChwYXJhbXMuc2l6ZSgpIDwgMSkKKwl7CisJCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlpZighcEV2ZW50LT5tX3BWYWx1ZSkKKwkJcmV0dXJuIEZBTFNFOworCUNGWF9XaWRlU3RyaW5nJiB2YWxFdmVudCA9IHBFdmVudC0+VmFsdWUoKTsKKworCUNGWF9XaWRlU3RyaW5nIHdzdHJNYXNrID0gcGFyYW1zWzBdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7CisJaWYgKHdzdHJNYXNrLklzRW1wdHkoKSkgcmV0dXJuIFRSVUU7CisJCisJc3RkOjp3c3RyaW5nIHdzdHJWYWx1ZSh2YWxFdmVudCk7CisJCisJaWYgKHBFdmVudC0+V2lsbENvbW1pdCgpKQorCXsKKwkJaWYgKHdzdHJWYWx1ZS5lbXB0eSgpKQorCQkJcmV0dXJuIFRSVUU7CisJCWludCBpSW5kZXhNYXNrID0gMDsKKwkJZm9yIChzdGQ6OndzdHJpbmc6Oml0ZXJhdG9yIGl0ID0gd3N0clZhbHVlLmJlZ2luKCk7IGl0ICE9IHdzdHJWYWx1ZS5lbmQoKTsgaXQrKykKKwkJeworCQkJd2NoYXJfdCB3X1ZhbHVlID0gKml0OworICAgICAgICAgICAgaWYgKCFtYXNrU2F0aXNmaWVkKHdfVmFsdWUsd3N0ck1hc2tbaUluZGV4TWFza10pKQorCQkJCWJyZWFrOworCQkJaUluZGV4TWFzaysrOworCQl9CisKKwkJaWYgKGlJbmRleE1hc2sgIT0gd3N0ck1hc2suR2V0TGVuZ3RoKCkgfHwgKGlJbmRleE1hc2sgIT0gd3N0clZhbHVlLnNpemUoKSAmJiB3c3RyTWFzay5HZXRMZW5ndGgoKSAhPSAwKSkKKwkJeworCQkJQWxlcnQocENvbnRleHQsIEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTQUZOVU1CRVJfS0VZU1RST0tFKSk7CisJCQlwRXZlbnQtPlJjKCkgPSBGQUxTRTsKKwkJfQorCQlyZXR1cm4gVFJVRTsKKwl9CisKKwkKKwlDRlhfV2lkZVN0cmluZyAmd2lkZUNoYW5nZSA9IHBFdmVudC0+Q2hhbmdlKCk7CisJc3RkOjp3c3RyaW5nIHdDaGFuZ2Uod2lkZUNoYW5nZSk7CisJCisJaWYgKHdDaGFuZ2UuZW1wdHkoKSkKKwkJcmV0dXJuIFRSVUU7CisgICAgaW50IGlJbmRleE1hc2sgPSBwRXZlbnQtPlNlbFN0YXJ0KCk7CisJLy9pSW5kZXhNYXNrKys7CisJCisJCisJaWYgKHdzdHJWYWx1ZS5sZW5ndGgoKSAtIChwRXZlbnQtPlNlbEVuZCgpLXBFdmVudC0+U2VsU3RhcnQoKSkgKyB3Q2hhbmdlLmxlbmd0aCgpID4gKEZYX0RXT1JEKXdzdHJNYXNrLkdldExlbmd0aCgpKQorCXsKKwkJQWxlcnQocENvbnRleHQsIEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1fVE9PTE9ORykpOworCQlwRXZlbnQtPlJjKCkgPSBGQUxTRTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCQorCQorCWlmIChpSW5kZXhNYXNrID49IHdzdHJNYXNrLkdldExlbmd0aCgpICYmICghd0NoYW5nZS5lbXB0eSgpKSkKKwl7CisJCUFsZXJ0KHBDb250ZXh0LCBKU0dldFN0cmluZ0Zyb21JRChwQ29udGV4dCwgSURTX1NUUklOR19KU1BBUkFNX1RPT0xPTkcpKTsKKwkJcEV2ZW50LT5SYygpID0gRkFMU0U7CisJCXJldHVybiBUUlVFOworCX0KKwkKKwlmb3IgKHN0ZDo6d3N0cmluZzo6aXRlcmF0b3IgaXQgPSB3Q2hhbmdlLmJlZ2luKCk7IGl0ICE9IHdDaGFuZ2UuZW5kKCk7IGl0KyspCisJeworCQlpZiAoaUluZGV4TWFzayA+PSB3c3RyTWFzay5HZXRMZW5ndGgoKSkKKwkJeworCQkJQWxlcnQocENvbnRleHQsIEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1fVE9PTE9ORykpOworCQkJcEV2ZW50LT5SYygpID0gRkFMU0U7CisJCQlyZXR1cm4gVFJVRTsKKwkJfQorCQl3Y2hhcl90IHdfTWFzayA9IHdzdHJNYXNrW2lJbmRleE1hc2tdOworCQlpZiAoIWlzUmVzZXJ2ZWRNYXNrQ2hhcih3X01hc2spKQorCQl7CisJCQkvL3dDaGFuZ2UuaW5zZXJ0KGl0LHdfTWFzayk7CQkJCQorCQkJKml0ID0gd19NYXNrOworCQl9CisJCXdjaGFyX3Qgd19DaGFuZ2UgPSAqaXQ7CisJCQorICAgICAgICBpZiAoIW1hc2tTYXRpc2ZpZWQod19DaGFuZ2Usd19NYXNrKSkKKwkJeworCQkJcEV2ZW50LT5SYygpID0gRkFMU0U7CisJCQlyZXR1cm4gVFJVRTsKKwkJfQorCQlpSW5kZXhNYXNrKys7CisJfQorCQorCXdpZGVDaGFuZ2UgPSB3Q2hhbmdlLmNfc3RyKCk7CQorCQorCXJldHVybiBUUlVFOworfQorCisKKy8vZnVuY3Rpb24gQUZTcGVjaWFsX0tleXN0cm9rZShwc2YpCitGWF9CT09MIENKU19QdWJsaWNNZXRob2RzOjpBRlNwZWNpYWxfS2V5c3Ryb2tlKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCXY4OjpJc29sYXRlKiBpc29sYXRlID0gOjpHZXRJc29sYXRlKGNjKTsKKworCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwlDSlNfRXZlbnRIYW5kbGVyKiBwRXZlbnQgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7CisJQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsKKworCWlmIChwYXJhbXMuc2l6ZSgpICE9IDEpCisJeworCQlzRXJyb3IgPSBKU0dldFN0cmluZ0Zyb21JRChwQ29udGV4dCwgSURTX1NUUklOR19KU1BBUkFNRVJST1IpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJc3RkOjpzdHJpbmcgY0Zvcm1hdDsKKwlpbnQgaUluZGV4ID0gKGludClwYXJhbXNbMF07CQorCisJaWYoIXBFdmVudC0+bV9wVmFsdWUpCisJCXJldHVybiBGQUxTRTsKKwkvL0NKU19WYWx1ZSB2YWwgPSBwRXZlbnQtPlZhbHVlKCk7CisJQ0ZYX1dpZGVTdHJpbmcmIHZhbCA9IHBFdmVudC0+VmFsdWUoKTsKKwlzdGQ6OnN0cmluZyBzdHJTcmMgPSAoRlhfTFBDU1RSKUNGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZSh2YWwpOworCXN0ZDo6d3N0cmluZyB3c3RyQ2hhbmdlKHBFdmVudC0+Q2hhbmdlKCkpOworCQorCXN3aXRjaCAoaUluZGV4KSAKKwl7CisJY2FzZSAwOiAgICAgICAgICAgICAgICAgICAgICAgICAKKwkJY0Zvcm1hdCA9ICI5OTk5OSI7CisJCWJyZWFrOworCWNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgCisJCS8vY0Zvcm1hdCA9ICI5OTk5OS05OTk5IjsKKwkJY0Zvcm1hdCA9ICI5OTk5OTk5OTkiOworCQlicmVhazsKKwljYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgICAgIAorCQl7CisJCQlzdGQ6OnN0cmluZyBOdW1iZXJTdHI7CisJCQl1dGlsOjpwcmludHgoIjk5OTk5OTk5OTkiLCBzdHJTcmMsTnVtYmVyU3RyKTsgCisJCQlpZiAoc3RyU3JjLmxlbmd0aCgpICsgd3N0ckNoYW5nZS5sZW5ndGgoKSA+IDcgKQorCQkJCS8vY0Zvcm1hdCA9ICIoOTk5KSA5OTktOTk5OSI7CisJCQkJY0Zvcm1hdCA9ICI5OTk5OTk5OTk5IjsKKwkJCWVsc2UgCisJCQkJLy9jRm9ybWF0ID0gIjk5OS05OTk5IjsKKwkJCQljRm9ybWF0ID0gIjk5OTk5OTkiOworCQkJYnJlYWs7CisJCX0KKwljYXNlIDM6CisJCS8vY0Zvcm1hdCA9ICI5OTktOTktOTk5OSI7CisJCWNGb3JtYXQgPSAiOTk5OTk5OTk5IjsKKwkJYnJlYWs7CisJfQorICAgIAorCUNKU19QYXJhbWV0ZXJzIHBhcmFtczI7CisJQ0pTX1ZhbHVlIHZNYXNrKGlzb2xhdGUsIGNGb3JtYXQuY19zdHIoKSk7CisJcGFyYW1zMi5wdXNoX2JhY2sodk1hc2spOworCQorICAgIHJldHVybiBBRlNwZWNpYWxfS2V5c3Ryb2tlRXgoY2MscGFyYW1zMix2UmV0LHNFcnJvcik7Cit9CisKK0ZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6OkFGTWVyZ2VDaGFuZ2UoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0ICopY2M7CisJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCUNKU19FdmVudEhhbmRsZXIqIHBFdmVudEhhbmRsZXIgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7CisJQVNTRVJUKHBFdmVudEhhbmRsZXIgIT0gTlVMTCk7CisKKwlpZiAocGFyYW1zLnNpemUoKSAhPSAxKQorCXsKKwkJc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQocENvbnRleHQsIElEU19TVFJJTkdfSlNQQVJBTUVSUk9SKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCUNGWF9XaWRlU3RyaW5nIHN3VmFsdWU7CisJaWYgKHBFdmVudEhhbmRsZXItPm1fcFZhbHVlICE9IE5VTEwpCisJCXN3VmFsdWUgPSBwRXZlbnRIYW5kbGVyLT5WYWx1ZSgpOworCisJaWYgKHBFdmVudEhhbmRsZXItPldpbGxDb21taXQoKSkKKwl7CisJCXZSZXQgPSBzd1ZhbHVlOworCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlDRlhfV2lkZVN0cmluZyBwcmVmaXgscG9zdGZpeDsKKworCWlmIChwRXZlbnRIYW5kbGVyLT5TZWxTdGFydCgpID49IDApCisJCXByZWZpeCA9IHN3VmFsdWUuTWlkKDAscEV2ZW50SGFuZGxlci0+U2VsU3RhcnQoKSk7CisJZWxzZQorCQlwcmVmaXggPSBMIiI7CisKKworCWlmIChwRXZlbnRIYW5kbGVyLT5TZWxFbmQoKSA+PSAwICYmIHBFdmVudEhhbmRsZXItPlNlbEVuZCgpIDw9IHN3VmFsdWUuR2V0TGVuZ3RoKCkpCisJCXBvc3RmaXggPSBzd1ZhbHVlLk1pZChwRXZlbnRIYW5kbGVyLT5TZWxFbmQoKSwgc3dWYWx1ZS5HZXRMZW5ndGgoKSAtIHBFdmVudEhhbmRsZXItPlNlbEVuZCgpKTsKKwllbHNlIHBvc3RmaXggPSBMIiI7CisKKwl2UmV0ID0gcHJlZml4ICsgcEV2ZW50SGFuZGxlci0+Q2hhbmdlKCkgKyBwb3N0Zml4OworCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6OkFGUGFyc2VEYXRlRXgoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0ICopY2M7CisJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCisJaWYgKHBhcmFtcy5zaXplKCkgIT0gMikKKwl7CisJCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlDRlhfV2lkZVN0cmluZyBzVmFsdWUgPSBwYXJhbXNbMF0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsKKwlDRlhfV2lkZVN0cmluZyBzRm9ybWF0ID0gcGFyYW1zWzFdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7CisKKwlGWF9CT09MIGJXcm9uZ0Zvcm1hdCA9IEZBTFNFOworCWRvdWJsZSBkRGF0ZSA9IE1ha2VSZWd1bGFyRGF0ZShzVmFsdWUsc0Zvcm1hdCxiV3JvbmdGb3JtYXQpOworCisJaWYgKEpTX1BvcnRJc05hbihkRGF0ZSkpCisJeworCQlDRlhfV2lkZVN0cmluZyBzd01zZzsKKwkJc3dNc2cuRm9ybWF0KEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSU0VEQVRFKSwgKEZYX0xQQ1dTVFIpc0Zvcm1hdCk7CisJCUFsZXJ0KChDSlNfQ29udGV4dCAqKWNjLCBzd01zZyk7CisJCXJldHVybiBGQUxTRTsKKwl9CisJCisJdlJldCA9IGREYXRlOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6OkFGU2ltcGxlKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCWlmIChwYXJhbXMuc2l6ZSgpICE9IDMpCisJeworCQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQgKiljYzsKKwkJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCisJCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwl2UmV0ID0gKGRvdWJsZSlBRl9TaW1wbGUocGFyYW1zWzBdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCksIChkb3VibGUpcGFyYW1zWzFdLCAoZG91YmxlKXBhcmFtc1syXSk7CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6OkFGTWFrZU51bWJlcihPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlpZiAocGFyYW1zLnNpemUoKSAhPSAxKQorCXsKKwkJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0ICopY2M7CisJCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKworCQlzRXJyb3IgPSBKU0dldFN0cmluZ0Zyb21JRChwQ29udGV4dCwgSURTX1NUUklOR19KU1BBUkFNRVJST1IpOworCQlyZXR1cm4gRkFMU0U7CisJfQorICAgIHZSZXQgPSBQYXJzZVN0cmluZ1RvTnVtYmVyKHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpKTsKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBDSlNfUHVibGljTWV0aG9kczo6QUZTaW1wbGVfQ2FsY3VsYXRlKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCXY4OjpJc29sYXRlKiBpc29sYXRlID0gOjpHZXRJc29sYXRlKGNjKTsKKworCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKworCWlmIChwYXJhbXMuc2l6ZSgpICE9IDIpCisJeworCQlzRXJyb3IgPSBKU0dldFN0cmluZ0Zyb21JRChwQ29udGV4dCwgSURTX1NUUklOR19KU1BBUkFNRVJST1IpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJQ0pTX1ZhbHVlIHBhcmFtczEgPSBwYXJhbXNbMV07CisKKwlpZiAoIXBhcmFtczEuSXNBcnJheU9iamVjdCgpICYmIHBhcmFtczEuR2V0VHlwZSgpICE9IFZUX3N0cmluZykKKwl7CisJCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7CisJCXJldHVybiBGQUxTRTsKKwl9CisJCisJQ1BERlNES19Eb2N1bWVudCogcFJlYWRlckRvYyA9IHBDb250ZXh0LT5HZXRSZWFkZXJEb2N1bWVudCgpOworICAgIEFTU0VSVChwUmVhZGVyRG9jICE9IE5VTEwpOworCisJQ1BERlNES19JbnRlckZvcm0qIHBSZWFkZXJJbnRlckZvcm0gPSBwUmVhZGVyRG9jLT5HZXRJbnRlckZvcm0oKTsKKwlBU1NFUlQocFJlYWRlckludGVyRm9ybSAhPSBOVUxMKTsKKworCUNQREZfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gcFJlYWRlckludGVyRm9ybS0+R2V0SW50ZXJGb3JtKCk7CisJQVNTRVJUKHBJbnRlckZvcm0gIT0gTlVMTCk7CisKKwlkb3VibGUgZFZhbHVlOworCUNGWF9XaWRlU3RyaW5nIHNGdW5jdGlvbiA9IHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOworCWlmICh3Y3NjbXAoc0Z1bmN0aW9uLCBMIlBSRCIpID09IDApCisgICAgCWRWYWx1ZSA9IDEuMDsKKwllbHNlCisJCWRWYWx1ZSA9IDAuMDsKKworCUNKU19BcnJheSBGaWVsZE5hbWVBcnJheSA9IEFGX01ha2VBcnJheUZyb21MaXN0KGlzb2xhdGUscGFyYW1zMSk7CisKKwlpbnQgbkZpZWxkc0NvdW50ID0gMDsKKworCWZvciAoaW50IGk9MCxpc3o9RmllbGROYW1lQXJyYXkuR2V0TGVuZ3RoKCk7IGk8aXN6OyBpKyspCisJeworCQlDSlNfVmFsdWUganNWYWx1ZShpc29sYXRlKTsKKwkJRmllbGROYW1lQXJyYXkuR2V0RWxlbWVudChpLGpzVmFsdWUpOworICAgICAgICBDRlhfV2lkZVN0cmluZyB3c0ZpZWxkTmFtZSA9IGpzVmFsdWUub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsKKworICAgICAgICBmb3IgKGludCBqPTAsanN6PXBJbnRlckZvcm0tPkNvdW50RmllbGRzKHdzRmllbGROYW1lKTsgajxqc3o7IGorKykKKwkJeworCQkJaWYgKENQREZfRm9ybUZpZWxkKiBwRm9ybUZpZWxkID0gcEludGVyRm9ybS0+R2V0RmllbGQoaiwgd3NGaWVsZE5hbWUpKQorCQkJeworCQkJCWRvdWJsZSBkVGVtcCA9IDAuMDsKKworCQkJCXN3aXRjaCAocEZvcm1GaWVsZC0+R2V0RmllbGRUeXBlKCkpCisJCQkJeworCQkJCWNhc2UgRklFTERUWVBFX1RFWFRGSUVMRDoKKwkJCQljYXNlIEZJRUxEVFlQRV9DT01CT0JPWDoKKwkJCQkJeworCQkJCQkJZFRlbXAgPSBQYXJzZVN0cmluZ1RvTnVtYmVyKHBGb3JtRmllbGQtPkdldFZhbHVlKCkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQljYXNlIEZJRUxEVFlQRV9QVVNIQlVUVE9OOgorCQkJCQl7CisJCQkJCQlkVGVtcCA9IDAuMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJY2FzZSBGSUVMRFRZUEVfQ0hFQ0tCT1g6CisJCQkJY2FzZSBGSUVMRFRZUEVfUkFESU9CVVRUT046CisJCQkJCXsKKwkJCQkJCWRUZW1wID0gMC4wOworCQkJCQkJZm9yIChpbnQgYz0wLGNzej1wRm9ybUZpZWxkLT5Db3VudENvbnRyb2xzKCk7IGM8Y3N6OyBjKyspCisJCQkJCQl7CisJCQkJCQkJaWYgKENQREZfRm9ybUNvbnRyb2wqIHBGb3JtQ3RybCA9IHBGb3JtRmllbGQtPkdldENvbnRyb2woYykpCisJCQkJCQkJeworCQkJCQkJCQlpZiAocEZvcm1DdHJsLT5Jc0NoZWNrZWQoKSkKKwkJCQkJCQkJeworCQkJCQkJCQkJZFRlbXAgKz0gUGFyc2VTdHJpbmdUb051bWJlcihwRm9ybUN0cmwtPkdldEV4cG9ydFZhbHVlKCkpOworCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCX0KKwkJCQkJCQkJZWxzZQorCQkJCQkJCQkJY29udGludWU7CisJCQkJCQkJfQorCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQljYXNlIEZJRUxEVFlQRV9MSVNUQk9YOgorCQkJCQl7CisJCQkJCQlkVGVtcCA9IDAuMDsKKwkJCQkJCWlmIChwRm9ybUZpZWxkLT5Db3VudFNlbGVjdGVkSXRlbXMoKSA+IDEpCisJCQkJCQkJYnJlYWs7CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJZFRlbXAgPSBQYXJzZVN0cmluZ1RvTnVtYmVyKHBGb3JtRmllbGQtPkdldFZhbHVlKCkpOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJaWYgKGkgPT0gMCAmJiBqID09IDAgJiYgKHdjc2NtcChzRnVuY3Rpb24sTCJNSU4iKSA9PSAwIHx8IHdjc2NtcChzRnVuY3Rpb24sIEwiTUFYIikgPT0gMCkpCisJCQkJCWRWYWx1ZSA9IGRUZW1wOworCisJCQkJZFZhbHVlID0gQUZfU2ltcGxlKHNGdW5jdGlvbiwgZFZhbHVlLCBkVGVtcCk7CisKKwkJCQluRmllbGRzQ291bnQrKzsKKwkJCX0KKwkJfQorCX0KKworCWlmICh3Y3NjbXAoc0Z1bmN0aW9uLCBMIkFWRyIpID09IDAgJiYgbkZpZWxkc0NvdW50ID4gMCkKKwkJZFZhbHVlIC89IG5GaWVsZHNDb3VudDsKKworCWRWYWx1ZSA9IChkb3VibGUpZmxvb3IoZFZhbHVlICogRlhTWVNfcG93KChkb3VibGUpMTAsKGRvdWJsZSk2KSArIDAuNDkpIC8gRlhTWVNfcG93KChkb3VibGUpMTAsKGRvdWJsZSk2KTsKKwlDSlNfVmFsdWUganNWYWx1ZShpc29sYXRlLGRWYWx1ZSk7CisJaWYoKENKU19FdmVudEhhbmRsZXIqKXBDb250ZXh0LT5HZXRFdmVudEhhbmRsZXIoKS0+bV9wVmFsdWUpCisJCSgoQ0pTX0V2ZW50SGFuZGxlciopcENvbnRleHQtPkdldEV2ZW50SGFuZGxlcigpKS0+VmFsdWUoKSA9IGpzVmFsdWU7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyogVGhpcyBmdW5jdGlvbiB2YWxpZGF0ZXMgdGhlIGN1cnJlbnQgZXZlbnQgdG8gZW5zdXJlIHRoYXQgaXRzIHZhbHVlIGlzIAorKiogd2l0aGluIHRoZSBzcGVjaWZpZWQgcmFuZ2UuICovCisKK0ZYX0JPT0wgQ0pTX1B1YmxpY01ldGhvZHM6OkFGUmFuZ2VfVmFsaWRhdGUoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0ICopY2M7CisJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCUNKU19FdmVudEhhbmRsZXIqIHBFdmVudCA9IHBDb250ZXh0LT5HZXRFdmVudEhhbmRsZXIoKTsKKwlBU1NFUlQocEV2ZW50ICE9IE5VTEwpOworCisJaWYgKHBhcmFtcy5zaXplKCkgIT0gNCkgCisJeworCQlzRXJyb3IgPSBKU0dldFN0cmluZ0Zyb21JRChwQ29udGV4dCwgSURTX1NUUklOR19KU1BBUkFNRVJST1IpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJaWYoIXBFdmVudC0+bV9wVmFsdWUpCisJCXJldHVybiBGQUxTRTsKKwlpZiAocEV2ZW50LT5WYWx1ZSgpLklzRW1wdHkoKSApCisJCXJldHVybiBUUlVFOworCWRvdWJsZSBkRWVudFZhbHVlID0gYXRvZihDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUocEV2ZW50LT5WYWx1ZSgpKSk7CisJRlhfQk9PTCBiR3JlYXRlclRoYW4sIGJMZXNzVGhhbjsKKwlkb3VibGUgIGRHcmVhdGVyVGhhbiwgZExlc3NUaGFuOworICAgIGJHcmVhdGVyVGhhbiA9IChGWF9CT09MKXBhcmFtc1swXTsKKwlDRlhfV2lkZVN0cmluZyBzd01zZzsKKwlkR3JlYXRlclRoYW4gPSAoZG91YmxlKXBhcmFtc1sxXTsKKwliTGVzc1RoYW4gPSAoRlhfQk9PTClwYXJhbXNbMl07CisJZExlc3NUaGFuID0gKGRvdWJsZSlwYXJhbXNbM107CisKKwlpZiAoYkdyZWF0ZXJUaGFuICYmIGJMZXNzVGhhbikKKwl7CisJCWlmIChkRWVudFZhbHVlIDwgZEdyZWF0ZXJUaGFuIHx8IGRFZW50VmFsdWUgPiBkTGVzc1RoYW4pCisJCQlzd01zZy5Gb3JtYXQoSlNHZXRTdHJpbmdGcm9tSUQocENvbnRleHQsIElEU19TVFJJTkdfSlNSQU5HRTEpLChGWF9MUENXU1RSKXBhcmFtc1sxXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpLCAoRlhfTFBDV1NUUilwYXJhbXNbM10ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKSk7CisJfQorCWVsc2UgaWYgKGJHcmVhdGVyVGhhbikKKwl7CisJCWlmIChkRWVudFZhbHVlIDwgZEdyZWF0ZXJUaGFuKQorCQkJc3dNc2cuRm9ybWF0KEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUkFOR0UyKSwgKEZYX0xQQ1dTVFIpcGFyYW1zWzFdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCkpOworCX0KKwllbHNlIGlmIChiTGVzc1RoYW4pCisJeworCQlpZiAoZEVlbnRWYWx1ZSA+IGRMZXNzVGhhbikKKwkJCXN3TXNnLkZvcm1hdChKU0dldFN0cmluZ0Zyb21JRChwQ29udGV4dCwgSURTX1NUUklOR19KU1JBTkdFMyksIChGWF9MUENXU1RSKXBhcmFtc1szXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpKTsKKwl9CisKKwlpZiAoIXN3TXNnLklzRW1wdHkoKSkKKwl7CisJCUFsZXJ0KHBDb250ZXh0LCBzd01zZyk7CisJCXBFdmVudC0+UmMoKSA9IEZBTFNFOworCX0KKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBDSlNfUHVibGljTWV0aG9kczo6QUZFeHRyYWN0TnVtcyhPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDo6R2V0SXNvbGF0ZShjYyk7CisJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0KiljYzsKKwlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7CisKKwlpZiAocGFyYW1zLnNpemUoKSAhPSAxKSAKKwl7CisJCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKHBDb250ZXh0LCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlDSlNfQXJyYXkgbnVtcyhpc29sYXRlKTsKKworCUNGWF9XaWRlU3RyaW5nIHN0ciA9IHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOworCUNGWF9XaWRlU3RyaW5nIHNQYXJ0OworCisJaWYgKHN0ci5HZXRBdCgwKSA9PSBMJy4nIHx8IHN0ci5HZXRBdCgwKSA9PSBMJywnKQorCQlzdHIgPSBMIjAiICsgc3RyOworCisJaW50IG5JbmRleCA9IDA7CisJZm9yIChpbnQgaT0wLCBzej1zdHIuR2V0TGVuZ3RoKCk7IGk8c3o7IGkrKykKKwl7CisJCUZYX1dDSEFSIHdjID0gc3RyLkdldEF0KGkpOworCQlpZiAoSXNEaWdpdCgod2NoYXJfdCl3YykpCisJCXsKKwkJCXNQYXJ0ICs9IHdjOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKHNQYXJ0LkdldExlbmd0aCgpID4gMCkKKwkJCXsKKwkJCQludW1zLlNldEVsZW1lbnQobkluZGV4LENKU19WYWx1ZShpc29sYXRlLChGWF9MUENXU1RSKXNQYXJ0KSk7CisJCQkJc1BhcnQgPSBMIiI7CisJCQkJbkluZGV4ICsrOworCQkJfQorCQl9CisJfQorCisJaWYgKHNQYXJ0LkdldExlbmd0aCgpID4gMCkKKwl7CisJCW51bXMuU2V0RWxlbWVudChuSW5kZXgsQ0pTX1ZhbHVlKGlzb2xhdGUsKEZYX0xQQ1dTVFIpc1BhcnQpKTsJCisJfQorCisJaWYgKG51bXMuR2V0TGVuZ3RoKCkgPiAwKQorCQl2UmV0ID0gbnVtczsKKwllbHNlCisJCXZSZXQuU2V0TnVsbCgpOworCisJcmV0dXJuIFRSVUU7Cit9CmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L2FwcC5jcHAgYi9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L2FwcC5jcHAKaW5kZXggYzFlZjc2Yy4uYTNlNjFjMCAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9hcHAuY3BwCisrKyBiL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvYXBwLmNwcApAQCAtMSwxMTM0ICsxLDExMzQgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSmF2YVNjcmlwdC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSUphdmFTY3JpcHQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0RlZmluZS5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfT2JqZWN0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19WYWx1ZS5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvYXBwLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19FdmVudEhhbmRsZXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L3Jlc291cmNlLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19Db250ZXh0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19SdW50aW1lLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9Eb2N1bWVudC5oIg0KLQ0KLQ0KLXN0YXRpYyB2ODo6SXNvbGF0ZSogR2V0SXNvbGF0ZShJRlhKU19Db250ZXh0KiBjYykNCi17DQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotDQotCUNKU19SdW50aW1lKiBwUnVudGltZSA9IHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKTsNCi0JQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOw0KLQ0KLQlyZXR1cm4gcFJ1bnRpbWUtPkdldElzb2xhdGUoKTsNCi19DQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUaW1lck9iaiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQkVHSU5fSlNfU1RBVElDX0NPTlNUKENKU19UaW1lck9iaikNCi1FTkRfSlNfU1RBVElDX0NPTlNUKCkNCi0NCi1CRUdJTl9KU19TVEFUSUNfUFJPUChDSlNfVGltZXJPYmopDQotRU5EX0pTX1NUQVRJQ19QUk9QKCkNCi0NCi1CRUdJTl9KU19TVEFUSUNfTUVUSE9EKENKU19UaW1lck9iaikNCi1FTkRfSlNfU1RBVElDX01FVEhPRCgpDQotDQotSU1QTEVNRU5UX0pTX0NMQVNTKENKU19UaW1lck9iaiwgVGltZXJPYmopDQotDQotVGltZXJPYmo6OlRpbWVyT2JqKENKU19PYmplY3QqIHBKU09iamVjdCkNCi06IENKU19FbWJlZE9iaihwSlNPYmplY3QpLA0KLW1fcFRpbWVyKE5VTEwpDQotew0KLQkNCi19DQotDQotVGltZXJPYmo6On5UaW1lck9iaigpDQotew0KLX0NCi0NCi12b2lkIFRpbWVyT2JqOjpTZXRUaW1lcihDSlNfVGltZXIqIHBUaW1lcikNCi17DQotCW1fcFRpbWVyID0gcFRpbWVyOw0KLX0NCi0NCi1DSlNfVGltZXIqIFRpbWVyT2JqOjpHZXRUaW1lcigpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9wVGltZXI7DQotfQ0KLQ0KLSNkZWZpbmUgSlNfU1RSX1ZJRVdFUlRZUEVfUkVBREVSCQlMIlJlYWRlciINCi0jZGVmaW5lIEpTX1NUUl9WSUVXRVJUWVBFX1NUQU5EQVJECQlMIkV4Y2hhbmdlIg0KLSNkZWZpbmUgSlNfU1RSX1ZJRVdFUlZBUklBVElPTgkJCUwiRnVsbCINCi0jZGVmaW5lIEpTX1NUUl9QTEFURk9STQkJCQkJTCJXSU4iDQotI2RlZmluZSBKU19TVFJfTEFOR1VBTkdFCQkJCUwiRU5VIg0KLSNkZWZpbmUgSlNfU1RSX1ZJRVdFUlZFUlNJT04JCQk4DQotI2RlZmluZSBKU19OVU1fRk9STVNWRVJTSU9OCQkJCTcNCi0NCi0jZGVmaW5lIEpTX0ZJTEVQQVRIX01BWExFTgkJCQkyMDAwDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBhcHAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfQXBwKQ0KLUVORF9KU19TVEFUSUNfQ09OU1QoKQ0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19QUk9QKENKU19BcHApDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGFjdGl2ZURvY3MpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGNhbGN1bGF0ZSkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkoZm9ybXNWZXJzaW9uKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShmcykNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkoZnVsbHNjcmVlbikNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkobGFuZ3VhZ2UpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKG1lZGlhKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShwbGF0Zm9ybSkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkocnVudGltZUhpZ2hsaWdodCkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkodmlld2VyVHlwZSkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkodmlld2VyVmFyaWF0aW9uKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWSh2aWV3ZXJWZXJzaW9uKQkNCi1FTkRfSlNfU1RBVElDX1BST1AoKQ0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19NRVRIT0QoQ0pTX0FwcCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShhbGVydCwgNikNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShiZWVwLCAxKQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGJyb3dzZUZvckRvYywgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShjbGVhckludGVydmFsLCAxKQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGNsZWFyVGltZU91dCwgMSkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShleGVjRGlhbG9nLCAzKQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGV4ZWNNZW51SXRlbSwgIDEpDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZmluZENvbXBvbmVudCwgMSkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShnb0JhY2ssIDApDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZ29Gb3J3YXJkLCAwKQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGxhdW5jaFVSTCwgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShtYWlsTXNnLCAwKQkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShuZXdGREYsIDApDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkobmV3RG9jLCAwKQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKG9wZW5Eb2MsIDApDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkob3BlbkZERiwgNSkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShwb3BVcE1lbnVFeCwgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShwb3BVcE1lbnUsIDApDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkocmVzcG9uc2UsIDApDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoc2V0SW50ZXJ2YWwsIDIpDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoc2V0VGltZU91dCwgMikNCi1FTkRfSlNfU1RBVElDX01FVEhPRCgpDQotDQotSU1QTEVNRU5UX0pTX0NMQVNTKENKU19BcHAsYXBwKQ0KLQ0KLWFwcDo6YXBwKENKU19PYmplY3QgKiBwSlNPYmplY3QpIDogQ0pTX0VtYmVkT2JqKHBKU09iamVjdCkgLA0KLQltX2JDYWxjdWxhdGUodHJ1ZSksDQotCW1fcFJ1bnRpbWUoTlVMTCksDQotCW1fYlJ1bnRpbWVIaWdoTGlnaHQoZmFsc2UpDQotLy8JbV9wTWVudUhlYWQoTlVMTCkNCi17DQotfQ0KLQ0KLWFwcDo6fmFwcCh2b2lkKQ0KLXsNCi0JZm9yIChpbnQgaT0wLHN6PW1fYVRpbWVyLkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQkJZGVsZXRlIG1fYVRpbWVyW2ldOw0KLQ0KLQltX2FUaW1lci5SZW1vdmVBbGwoKTsNCi19DQotDQotRlhfQk9PTCBhcHA6OmFjdGl2ZURvY3MoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JaWYgKHZwLklzR2V0dGluZygpKQ0KLQl7DQotDQotCQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQgKiljYzsNCi0JCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0JCQ0KLQkJQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCA9IHBDb250ZXh0LT5HZXRSZWFkZXJBcHAoKTsNCi0JCUFTU0VSVChwQXBwICE9IE5VTEwpOw0KLQ0KLQkJQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpOw0KLQkJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOw0KLQkJDQotCQlDUERGU0RLX0RvY3VtZW50KiBwQ3VyRG9jID0gcENvbnRleHQtPkdldFJlYWRlckRvY3VtZW50KCk7DQotCQkNCi0JCUNKU19BcnJheSBhRG9jcyhwUnVudGltZS0+R2V0SXNvbGF0ZSgpKTsNCi0vLwkJaW50IGlOdW1Eb2NzID0gcEFwcC0+Q291bnREb2N1bWVudHMoKTsNCi0JCQ0KLS8vIAkJZm9yKGludCBpSW5kZXggPSAwOyBpSW5kZXg8aU51bURvY3M7IGlJbmRleCsrKQ0KLS8vIAkJew0KLQkJCUNQREZTREtfRG9jdW1lbnQqIHBEb2MgPSBwQXBwLT5HZXRDdXJyZW50RG9jKCk7DQotCQkJaWYgKHBEb2MpDQotCQkJew0KLQkJCQlDSlNfRG9jdW1lbnQgKiBwSlNEb2N1bWVudCA9IE5VTEw7DQotCQkJCQ0KLQkJCQlpZiAocERvYyA9PSBwQ3VyRG9jKQ0KLQkJCQl7DQotCQkJCQlKU0ZYT2JqZWN0IHBPYmogPSBKU19HZXRUaGlzT2JqKCpwUnVudGltZSk7DQotCQkJCQkNCi0JCQkJCWlmIChKU19HZXRPYmpEZWZuSUQocE9iaikgPT0gSlNfR2V0T2JqRGVmbklEKCpwUnVudGltZSwgTCJEb2N1bWVudCIpKQ0KLQkJCQkJew0KLQkJCQkJCXBKU0RvY3VtZW50ID0gKENKU19Eb2N1bWVudCopSlNfR2V0UHJpdmF0ZShwUnVudGltZS0+R2V0SXNvbGF0ZSgpLHBPYmopOw0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJCWVsc2UNCi0JCQkJew0KLQkJCQkJSlNGWE9iamVjdCBwT2JqID0gSlNfTmV3RnhEeW5hbWljT2JqKCpwUnVudGltZSwgcENvbnRleHQsIEpTX0dldE9iakRlZm5JRCgqcFJ1bnRpbWUsTCJEb2N1bWVudCIpKTsNCi0JCQkJCXBKU0RvY3VtZW50ID0gKENKU19Eb2N1bWVudCopSlNfR2V0UHJpdmF0ZShwUnVudGltZS0+R2V0SXNvbGF0ZSgpLHBPYmopOw0KLQkJCQkJQVNTRVJUKHBKU0RvY3VtZW50ICE9IE5VTEwpOw0KLQkJCQkJDQotCQkJCQkNCi0JCQkJCS8vCQkJcERvY3VtZW50LT5BdHRhY2hEb2MocERvYyk7DQotCQkJCX0NCi0JCQkJDQotCQkJCWFEb2NzLlNldEVsZW1lbnQoMCxDSlNfVmFsdWUocFJ1bnRpbWUtPkdldElzb2xhdGUoKSxwSlNEb2N1bWVudCkpOw0KLQkJCX0NCi0JLy8JCX0NCi0JCQ0KLQkJaWYgKGFEb2NzLkdldExlbmd0aCgpID4gMCkNCi0JCQl2cCA8PCBhRG9jczsNCi0JCWVsc2UNCi0JCQl2cC5TZXROdWxsKCk7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgYXBwOjpjYWxjdWxhdGUoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JaWYgKHZwLklzU2V0dGluZygpKQ0KLQl7DQotCQlib29sIGJWUDsNCi0JCXZwID4+IGJWUDsNCi0JCW1fYkNhbGN1bGF0ZSA9IChGWF9CT09MKWJWUDsNCi0NCi0JCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotCQkNCi0JCUNQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAgPSBwQ29udGV4dC0+R2V0UmVhZGVyQXBwKCk7DQotCQlBU1NFUlQocEFwcCAhPSBOVUxMKTsNCi0JCQ0KLQkJQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpOw0KLQkJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOw0KLQ0KLQkJQ0pTX0FycmF5IGFEb2NzKHBSdW50aW1lLT5HZXRJc29sYXRlKCkpOw0KLS8vIAkJaW50IGlOdW1Eb2NzID0gcEFwcC0+Q291bnREb2N1bWVudHMoKTsNCi0vLyAJCQ0KLS8vIAkJZm9yIChpbnQgaUluZGV4ID0gMDtpSW5kZXggPCBpTnVtRG9jczsgaUluZGV4KyspDQotLy8gCQl7DQotCQkJaWYgKENQREZTREtfRG9jdW1lbnQqIHBEb2MgPSBwQXBwLT5HZXRDdXJyZW50RG9jKCkpDQotCQkJew0KLQkJCQlDUERGU0RLX0ludGVyRm9ybSogcEludGVyRm9ybSA9IChDUERGU0RLX0ludGVyRm9ybSopcERvYy0+R2V0SW50ZXJGb3JtKCk7DQotCQkJCUFTU0VSVChwSW50ZXJGb3JtICE9IE5VTEwpOw0KLQkJCQlwSW50ZXJGb3JtLT5FbmFibGVDYWxjdWxhdGUoKEZYX0JPT0wpbV9iQ2FsY3VsYXRlKTsNCi0JCQl9CQkJDQotLy8JCX0NCi0JfQ0KLQllbHNlDQotCXsNCi0JCXZwIDw8IChib29sKW1fYkNhbGN1bGF0ZTsNCi0JfQ0KLQkNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgYXBwOjpmb3Jtc1ZlcnNpb24oT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JaWYgKHZwLklzR2V0dGluZygpKQ0KLQl7DQotCQl2cCA8PCBKU19OVU1fRk9STVNWRVJTSU9OOw0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0JDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBhcHA6OnZpZXdlclR5cGUoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0NCi0NCi0JDQotCQ0KLQkNCi0NCi0JaWYgKHZwLklzR2V0dGluZygpKQ0KLQl7DQotLy8gCQlpZiAocEFwcC0+R2V0QXBwTmFtZSgpID09IFBIQU5UT00pDQotLy8gCQkJdnAgPDwgSlNfU1RSX1ZJRVdFUlRZUEVfU1RBTkRBUkQ7DQotLy8gCQllbHNlDQotLy8gCQkJdnAgPDwgSlNfU1RSX1ZJRVdFUlRZUEVfUkVBREVSOw0KLQkJdnAgPDwgTCJ1bmtub3duIjsNCi0NCi0JCS8vdnAgPDwgcEFwcC0+R2V0QXBwVGl0bGUoKTsNCi0JCXJldHVybiBUUlVFOw0KLQl9DQotCQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgYXBwOjp2aWV3ZXJWYXJpYXRpb24oT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JaWYgKHZwLklzR2V0dGluZygpKQ0KLQl7DQotCQl2cCA8PCBKU19TVFJfVklFV0VSVkFSSUFUSU9OOw0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0JDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBhcHA6OnZpZXdlclZlcnNpb24oT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JaWYgKHZwLklzR2V0dGluZygpKQ0KLQl7DQotCQl2cCA8PCBKU19TVFJfVklFV0VSVkVSU0lPTjsNCi0JCXJldHVybiBUUlVFOw0KLQl9DQotCQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgYXBwOjpwbGF0Zm9ybShPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlpZiAodnAuSXNHZXR0aW5nKCkpDQotCXsNCi0JCXZwIDw8IEpTX1NUUl9QTEFURk9STTsNCi0JCXJldHVybiBUUlVFOw0KLQl9DQotCQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgYXBwOjpsYW5ndWFnZShPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlpZiAodnAuSXNHZXR0aW5nKCkpDQotCXsNCi0JCXZwIDw8IEpTX1NUUl9MQU5HVUFOR0U7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQkNCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi0vL2NyZWF0ZXMgYSBuZXcgZmRmIG9iamVjdCB0aGF0IGNvbnRhaW5zIG5vIGRhdGENCi0vL2NvbW1lbnQ6IG5lZWQgcmVhZGVyIHN1cHBvcnQNCi0vL25vdGU6DQotLy9DRkRGX0RvY3VtZW50ICogQ1BERkRvY19FbnZpcm9ubWVudDo6TmV3RkRGKCk7DQotRlhfQk9PTCBhcHA6Om5ld0ZERihPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCXJldHVybiBUUlVFOw0KLX0NCi0vL29wZW5zIGEgc3BlY2lmaWVkIHBkZiBkb2N1bWVudCBhbmQgcmV0dXJucyBpdHMgZG9jdW1lbnQgb2JqZWN0DQotLy9jb21tZW50Om5lZWQgcmVhZGVyIHN1cHBvcnQNCi0vL25vdGU6IGFzIGRlZmluZWQgaW4ganMgcmVmZXJlbmNlLCB0aGUgcHJvdG8gb2YgdGhpcyBmdW5jdGlvbidzIGZvdXJ0aCBwYXJtZXRlcnMsIGhvdyBvbGQgYW4gZmRmIGRvY3VtZW50IHdoaWxlIGRvIG5vdCBzaG93IGl0Lg0KLS8vQ0ZERl9Eb2N1bWVudCAqIENQREZEb2NfRW52aXJvbm1lbnQ6Ok9wZW5GREYoc3RyaW5nIHN0clBhdGgsYm9vbCBiVXNlckNvbnYpOw0KLQ0KLUZYX0JPT0wgYXBwOjpvcGVuRkRGKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgYXBwOjphbGVydChPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCWludCBpU2l6ZSA9IHBhcmFtcy5zaXplKCk7DQotCWlmIChpU2l6ZSA8IDEpDQotCQlyZXR1cm4gRkFMU0U7DQotDQotCUNGWF9XaWRlU3RyaW5nIHN3TXNnID0gTCIiOw0KLQlDRlhfV2lkZVN0cmluZyBzd1RpdGxlID0gTCIiOw0KLQlpbnQgaUljb24gPSAwOw0KLQlpbnQgaVR5cGUgPSAwOw0KLQ0KLQl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IEdldElzb2xhdGUoY2MpOw0KLQ0KLQlpZiAoaVNpemUgPT0gMSkNCi0Jew0KLQkJaWYgKHBhcmFtc1swXS5HZXRUeXBlKCkgPT0gVlRfb2JqZWN0KQ0KLQkJew0KLQkJCUpTT2JqZWN0IHBPYmogPSBwYXJhbXNbMF07DQotCQkJew0KLQkJCQl2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLCBwT2JqLCBMImNNc2ciKTsNCi0JCQkJc3dNc2cgPSBDSlNfVmFsdWUoaXNvbGF0ZSxwVmFsdWUsVlRfdW5rbm93bikub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsNCi0NCi0JCQkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosTCJjVGl0bGUiKTsNCi0JCQkJc3dUaXRsZSA9IENKU19WYWx1ZShpc29sYXRlLCBwVmFsdWUsVlRfdW5rbm93bikub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsNCi0NCi0JCQkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosTCJuSWNvbiIpOw0KLQkJCQlpSWNvbiA9IChpbnQpQ0pTX1ZhbHVlKGlzb2xhdGUscFZhbHVlLFZUX3Vua25vd24pOw0KLQ0KLQkJCQlwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaixMIm5UeXBlIik7DQotCQkJCWlUeXBlID0gKGludClDSlNfVmFsdWUoaXNvbGF0ZSxwVmFsdWUsVlRfdW5rbm93bik7DQotCQkJfQ0KLQ0KLQkJCWlmIChzd01zZyA9PSBMIiIpDQotCQkJew0KLQkJCQlDSlNfQXJyYXkgY2FycmF5KGlzb2xhdGUpOw0KLQkJCQlpZiAocGFyYW1zWzBdLkNvbnZlcnRUb0FycmF5KGNhcnJheSkpDQotCQkJCXsNCi0JCQkJCWludCBpTGVudGggPSBjYXJyYXkuR2V0TGVuZ3RoKCk7DQotCQkJCQlDSlNfVmFsdWUqIHBWYWx1ZSA9IG5ldyBDSlNfVmFsdWUoaXNvbGF0ZSk7DQotLy8JCQkJCWlmIChpTGVudGggPT0gMSkNCi0vLwkJCQkJCXBWYWx1ZSA9IG5ldyBDSlNfVmFsdWUoaXNvbGF0ZSk7DQotLy8gCQkJCQllbHNlIGlmIChpTGVudGggPiAxKQ0KLS8vIAkJCQkJCXBWYWx1ZSA9IG5ldyBDSlNfVmFsdWVbaUxlbnRoXTsNCi0NCi0JCQkJCWZvcihpbnQgaSA9IDA7IGkgPCBpTGVudGg7IGkrKykNCi0JCQkJCXsNCi0JCQkJCQljYXJyYXkuR2V0RWxlbWVudChpLCAqcFZhbHVlKTsNCi0JCQkJCQlzd01zZyArPSAoKnBWYWx1ZSkub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsNCi0JCQkJCQlpZiAoaSA8IGlMZW50aCAtIDEpDQotCQkJCQkJCXN3TXNnICs9IEwiLCAgIjsNCi0JCQkJCX0NCi0NCi0JCQkJCWlmKHBWYWx1ZSkgZGVsZXRlIHBWYWx1ZTsNCi0vLyAJCQkJCWlmICgoaUxlbnRoID4gMSkgJiYgcFZhbHVlKQ0KLS8vIAkJCQkJew0KLS8vIAkJCQkJCWRlbGV0ZVtdcFZhbHVlOw0KLS8vIAkJCQkJCXBWYWx1ZSA9IE5VTEw7DQotLy8gCQkJCQl9DQotLy8gCQkJCQllbHNlIGlmICgoaUxlbnRoID09IDEpICYmIHBWYWx1ZSkNCi0vLyAJCQkJCXsNCi0vLyAJCQkJCQlkZWxldGUgcFZhbHVlOw0KLS8vIAkJCQkJCXBWYWx1ZSA9IE5VTEw7DQotLy8gCQkJCQl9DQotCQkJCX0NCi0JCQl9DQotDQotCQkJaWYgKHN3VGl0bGUgPT0gTCIiKQ0KLQkJCQlzd1RpdGxlID0gSlNHZXRTdHJpbmdGcm9tSUQoKENKU19Db250ZXh0KiljYywgSURTX1NUUklOR19KU0FMRVJUKTsNCi0JCX0NCi0JCWVsc2UgaWYgKHBhcmFtc1swXS5HZXRUeXBlKCkgPT0gVlRfYm9vbGVhbikNCi0JCXsNCi0JCQlGWF9CT09MIGJHZXQgPSAoRlhfQk9PTClwYXJhbXNbMF07DQotCQkJaWYgKGJHZXQpDQotCQkJCXN3TXNnID0gTCJ0cnVlIjsNCi0JCQllbHNlDQotCQkJCXN3TXNnID0gTCJmYWxzZSI7DQotDQotCQkJc3dUaXRsZSA9IEpTR2V0U3RyaW5nRnJvbUlEKChDSlNfQ29udGV4dCopY2MsIElEU19TVFJJTkdfSlNBTEVSVCk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJc3dNc2cgPSBwYXJhbXNbMF07DQotCQkJc3dUaXRsZSA9IEpTR2V0U3RyaW5nRnJvbUlEKChDSlNfQ29udGV4dCopY2MsIElEU19TVFJJTkdfSlNBTEVSVCk7DQotCQl9DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlpZiAocGFyYW1zWzBdLkdldFR5cGUoKSA9PSBWVF9ib29sZWFuKQ0KLQkJew0KLQkJCUZYX0JPT0wgYkdldCA9IChGWF9CT09MKXBhcmFtc1swXTsNCi0JCQlpZiAoYkdldCkNCi0JCQkJc3dNc2cgPSBMInRydWUiOw0KLQkJCWVsc2UNCi0JCQkJc3dNc2cgPSBMImZhbHNlIjsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlzd01zZyA9IHBhcmFtc1swXTsNCi0JCX0NCi0JCXN3VGl0bGUgPSBKU0dldFN0cmluZ0Zyb21JRCgoQ0pTX0NvbnRleHQqKWNjLCBJRFNfU1RSSU5HX0pTQUxFUlQpOw0KLQkJDQotCQlmb3IoaW50IGkgPSAxO2k8aVNpemU7aSsrKQ0KLQkJew0KLQkJCWlmIChpID09IDEpDQotCQkJCWlJY29uID0gaW50KHBhcmFtc1tpXSk7DQotCQkJaWYgKGkgPT0gMikNCi0JCQkJaVR5cGUgPSBpbnQocGFyYW1zW2ldKTsNCi0JCQlpZiAoaSA9PSAzKQ0KLQkJCQlzd1RpdGxlID0gcGFyYW1zW2ldOwkJCQ0KLQkJfQ0KLQl9DQotDQotDQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0JQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpOw0KLQlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7DQotCXBSdW50aW1lLT5CZWdpbkJsb2NrKCk7DQotCXZSZXQgPSBNc2dCb3gocFJ1bnRpbWUtPkdldFJlYWRlckFwcCgpLCBKU0dldFBhZ2VWaWV3KGNjKSxzd01zZyxzd1RpdGxlLGlUeXBlLGlJY29uKTsNCi0JcFJ1bnRpbWUtPkVuZEJsb2NrKCk7DQotCQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotDQotRlhfQk9PTCBhcHA6OmJlZXAoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlpZiAocGFyYW1zLnNpemUoKSA9PSAxKQ0KLQl7DQotCQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOw0KLQkJQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpOw0KLQkJQ1BERkRvY19FbnZpcm9ubWVudCAqIHBFbnYgPSBwUnVudGltZS0+R2V0UmVhZGVyQXBwKCk7DQotCQlwRW52LT5KU19hcHBCZWVwKChpbnQpcGFyYW1zWzBdKTsNCi0NCi0JCXJldHVybiBUUlVFOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQoKENKU19Db250ZXh0KiljYywgSURTX1NUUklOR19KU1BBUkFNRVJST1IpOw0KLQkJcmV0dXJuIEZBTFNFOw0KLQl9DQotfQ0KLQ0KLUZYX0JPT0wgYXBwOjpmaW5kQ29tcG9uZW50KE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgYXBwOjpwb3BVcE1lbnVFeChPQkpfTUVUSE9EX1BBUkFNUykNCi17CQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgYXBwOjpmcyhPQkpfUFJPUF9QQVJBTVMpDQotew0KLSNpZmRlZiBGT1hJVF9DSFJPTUVfQlVJTEQNCi0JcmV0dXJuIEZBTFNFOw0KLSNlbHNlDQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0JQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpOw0KLQlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7DQotDQotCWlmICh2cC5Jc0dldHRpbmcoKSkNCi0Jew0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLSNlbmRpZg0KLX0NCi0NCi1GWF9CT09MIGFwcDo6c2V0SW50ZXJ2YWwoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlpZiAocGFyYW1zLnNpemUoKSA+IDIgfHwgcGFyYW1zLnNpemUoKSA9PSAwKSANCi0Jew0KLQkJc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQoKENKU19Db250ZXh0KiljYywgSURTX1NUUklOR19KU1BBUkFNRVJST1IpOwkNCi0JCXJldHVybiBGQUxTRTsNCi0JfQ0KLQkNCi0JQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0KiljYzsNCi0JQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOw0KLQlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7DQotCUFTU0VSVChwUnVudGltZSAhPSBOVUxMKTsNCi0NCi0JQ0ZYX1dpZGVTdHJpbmcgc2NyaXB0ID0gcGFyYW1zLnNpemUoKSA+IDAgPyAgKEZYX0xQQ1dTVFIpKHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpKSA6IChGWF9MUENXU1RSKUwiIjsNCi0JaWYgKHNjcmlwdC5Jc0VtcHR5KCkpIA0KLQl7DQotCQlzRXJyb3IgPSBKU0dldFN0cmluZ0Zyb21JRCgoQ0pTX0NvbnRleHQqKWNjLCBJRFNfU1RSSU5HX0pTQUZOVU1CRVJfS0VZU1RST0tFKTsNCi0JCXJldHVybiBUUlVFOw0KLQl9DQotDQotCUZYX0RXT1JEIGR3SW50ZXJ2YWwgPSBwYXJhbXMuc2l6ZSgpID4gMSA/IChpbnQpcGFyYW1zWzFdIDogMTAwMDsNCi0JDQotCUNQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAgPSBwUnVudGltZS0+R2V0UmVhZGVyQXBwKCk7DQotCUFTU0VSVChwQXBwKTsNCi0JQ0pTX1RpbWVyKiBwVGltZXIgPSBuZXcgQ0pTX1RpbWVyKHRoaXMsIHBBcHApOw0KLQltX2FUaW1lci5BZGQocFRpbWVyKTsNCi0NCi0JcFRpbWVyLT5TZXRUeXBlKDApOw0KLQlwVGltZXItPlNldFJ1bnRpbWUocFJ1bnRpbWUpOw0KLQlwVGltZXItPlNldEpTY3JpcHQoc2NyaXB0KTsNCi0JcFRpbWVyLT5TZXRUaW1lT3V0KDApOw0KLS8vCXBUaW1lci0+U2V0U3RhcnRUaW1lKEdldFRpY2tDb3VudCgpKTsNCi0JcFRpbWVyLT5TZXRKU1RpbWVyKGR3SW50ZXJ2YWwpOw0KLQkNCi0JSlNGWE9iamVjdCBwUmV0T2JqID0gSlNfTmV3RnhEeW5hbWljT2JqKCpwUnVudGltZSwgcENvbnRleHQsIEpTX0dldE9iakRlZm5JRCgqcFJ1bnRpbWUsIEwiVGltZXJPYmoiKSk7DQotCQ0KLQlDSlNfVGltZXJPYmoqIHBKU19UaW1lck9iaiA9IChDSlNfVGltZXJPYmoqKUpTX0dldFByaXZhdGUocFJ1bnRpbWUtPkdldElzb2xhdGUoKSxwUmV0T2JqKTsNCi0JQVNTRVJUKHBKU19UaW1lck9iaiAhPSBOVUxMKTsNCi0JDQotCVRpbWVyT2JqKiBwVGltZXJPYmogPSAoVGltZXJPYmoqKXBKU19UaW1lck9iai0+R2V0RW1iZWRPYmplY3QoKTsNCi0JQVNTRVJUKHBUaW1lck9iaiAhPSBOVUxMKTsNCi0JDQotCXBUaW1lck9iai0+U2V0VGltZXIocFRpbWVyKTsgDQotCQ0KLQl2UmV0ID0gcFJldE9iajsNCi0JDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIGFwcDo6c2V0VGltZU91dChPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCWlmIChwYXJhbXMuc2l6ZSgpID4gMiB8fCBwYXJhbXMuc2l6ZSgpID09IDApDQotCXsNCi0JCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKChDSlNfQ29udGV4dCopY2MsIElEU19TVFJJTkdfSlNQQVJBTUVSUk9SKTsJDQotCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0JDQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0JQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpOw0KLQlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7DQotCQ0KLQlDRlhfV2lkZVN0cmluZyBzY3JpcHQgPSBwYXJhbXMuc2l6ZSgpID4gMCA/ICAoRlhfTFBDV1NUUikocGFyYW1zWzBdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCkpIDogKEZYX0xQQ1dTVFIpTCIiOw0KLQlpZiAoc2NyaXB0LklzRW1wdHkoKSkgDQotCXsNCi0JCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKChDSlNfQ29udGV4dCopY2MsIElEU19TVFJJTkdfSlNBRk5VTUJFUl9LRVlTVFJPS0UpOw0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0JDQotCUZYX0RXT1JEIGR3VGltZU91dCA9IHBhcmFtcy5zaXplKCkgPiAxID8gKGludClwYXJhbXNbMV0gOiAxMDAwOw0KLQkNCi0JQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCA9IHBSdW50aW1lLT5HZXRSZWFkZXJBcHAoKTsNCi0JQVNTRVJUKHBBcHApOw0KLQlDSlNfVGltZXIqIHBUaW1lciA9IG5ldyBDSlNfVGltZXIodGhpcywgcEFwcCk7DQotCW1fYVRpbWVyLkFkZChwVGltZXIpOw0KLQkNCi0JcFRpbWVyLT5TZXRUeXBlKDEpOw0KLQlwVGltZXItPlNldFJ1bnRpbWUocFJ1bnRpbWUpOw0KLQlwVGltZXItPlNldEpTY3JpcHQoc2NyaXB0KTsNCi0JcFRpbWVyLT5TZXRUaW1lT3V0KGR3VGltZU91dCk7DQotLy8JcFRpbWVyLT5TZXRTdGFydFRpbWUoR2V0VGlja0NvdW50KCkpOw0KLS8vCXBUaW1lci0+U2V0SlNUaW1lcigxMDAwKTsNCi0JcFRpbWVyLT5TZXRKU1RpbWVyKGR3VGltZU91dCk7DQotCQ0KLQlKU0ZYT2JqZWN0IHBSZXRPYmogPSBKU19OZXdGeER5bmFtaWNPYmooKnBSdW50aW1lLCBwQ29udGV4dCwgSlNfR2V0T2JqRGVmbklEKCpwUnVudGltZSwgTCJUaW1lck9iaiIpKTsNCi0vLwlBU1NFUlQocFJldE9iaiAhPSBOVUxMKTsNCi0JDQotCUNKU19UaW1lck9iaiogcEpTX1RpbWVyT2JqID0gKENKU19UaW1lck9iaiopSlNfR2V0UHJpdmF0ZShwUnVudGltZS0+R2V0SXNvbGF0ZSgpLHBSZXRPYmopOw0KLQlBU1NFUlQocEpTX1RpbWVyT2JqICE9IE5VTEwpOw0KLQkNCi0JVGltZXJPYmoqIHBUaW1lck9iaiA9IChUaW1lck9iaiopcEpTX1RpbWVyT2JqLT5HZXRFbWJlZE9iamVjdCgpOw0KLQlBU1NFUlQocFRpbWVyT2JqICE9IE5VTEwpOw0KLQkNCi0JcFRpbWVyT2JqLT5TZXRUaW1lcihwVGltZXIpOyANCi0JDQotCXZSZXQgPSBwUmV0T2JqOw0KLQkNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgYXBwOjpjbGVhclRpbWVPdXQoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotCUNKU19SdW50aW1lKiBwUnVudGltZSA9IHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKTsNCi0JQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOw0KLQkNCi0JaWYgKHBhcmFtcy5zaXplKCkgIT0gMSkNCi0Jew0KLQkJc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQoKENKU19Db250ZXh0KiljYywgSURTX1NUUklOR19KU1BBUkFNRVJST1IpOwkNCi0JCXJldHVybiBGQUxTRTsNCi0JfQ0KLQkNCi0JaWYgKHBhcmFtc1swXS5HZXRUeXBlKCkgPT0gVlRfZnhvYmplY3QpDQotCXsNCi0JCUpTRlhPYmplY3QgcE9iaiA9IChKU0ZYT2JqZWN0KXBhcmFtc1swXTsNCi0JCXsNCi0JCQlpZiAoSlNfR2V0T2JqRGVmbklEKHBPYmopID09IEpTX0dldE9iakRlZm5JRCgqcFJ1bnRpbWUsIEwiVGltZXJPYmoiKSkNCi0JCQl7DQotCQkJCWlmIChDSlNfT2JqZWN0KiBwSlNPYmogPSAoQ0pTX09iamVjdCopcGFyYW1zWzBdKQ0KLQkJCQl7DQotCQkJCQlpZiAoVGltZXJPYmoqIHBUaW1lck9iaiA9IChUaW1lck9iaiopcEpTT2JqLT5HZXRFbWJlZE9iamVjdCgpKQ0KLQkJCQkJew0KLQkJCQkJCWlmIChDSlNfVGltZXIqIHBUaW1lciA9IHBUaW1lck9iai0+R2V0VGltZXIoKSkNCi0JCQkJCQl7DQotCQkJCQkJCXBUaW1lci0+S2lsbEpTVGltZXIoKTsNCi0JCQkJCQkJDQotCQkJCQkJCWZvciAoaW50IGk9MCxzej1tX2FUaW1lci5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0JCQkJCQkJew0KLQkJCQkJCQkJaWYgKG1fYVRpbWVyW2ldID09IHBUaW1lcikNCi0JCQkJCQkJCXsNCi0JCQkJCQkJCQltX2FUaW1lci5SZW1vdmVBdChpKTsNCi0JCQkJCQkJCQlicmVhazsNCi0JCQkJCQkJCX0NCi0JCQkJCQkJfQ0KLQkJCQkJCQkNCi0JCQkJCQkJZGVsZXRlIHBUaW1lcjsNCi0JCQkJCQkJcFRpbWVyT2JqLT5TZXRUaW1lcihOVUxMKTsNCi0JCQkJCQl9DQotCQkJCQl9DQotCQkJCX0NCi0JCQl9DQotCQl9DQotCX0NCi0JDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIGFwcDo6Y2xlYXJJbnRlcnZhbChPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0JQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpOw0KLQlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7DQotDQotCWlmIChwYXJhbXMuc2l6ZSgpICE9IDEpDQotCXsNCi0JCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKChDSlNfQ29udGV4dCopY2MsIElEU19TVFJJTkdfSlNQQVJBTUVSUk9SKTsJDQotCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0JDQotCWlmIChwYXJhbXNbMF0uR2V0VHlwZSgpID09IFZUX2Z4b2JqZWN0KQ0KLQl7DQotCQlKU0ZYT2JqZWN0IHBPYmogPSAoSlNGWE9iamVjdClwYXJhbXNbMF07DQotCQl7DQotCQkJaWYgKEpTX0dldE9iakRlZm5JRChwT2JqKSA9PSBKU19HZXRPYmpEZWZuSUQoKnBSdW50aW1lLCBMIlRpbWVyT2JqIikpDQotCQkJew0KLQkJCQlpZiAoQ0pTX09iamVjdCogcEpTT2JqID0gKENKU19PYmplY3QqKXBhcmFtc1swXSkNCi0JCQkJew0KLQkJCQkJaWYgKFRpbWVyT2JqKiBwVGltZXJPYmogPSAoVGltZXJPYmoqKXBKU09iai0+R2V0RW1iZWRPYmplY3QoKSkNCi0JCQkJCXsNCi0JCQkJCQlpZiAoQ0pTX1RpbWVyKiBwVGltZXIgPSBwVGltZXJPYmotPkdldFRpbWVyKCkpDQotCQkJCQkJew0KLQkJCQkJCQlwVGltZXItPktpbGxKU1RpbWVyKCk7DQotCQkJCQkJCQ0KLQkJCQkJCQlmb3IgKGludCBpPTAsc3o9bV9hVGltZXIuR2V0U2l6ZSgpOyBpPHN6OyBpKyspDQotCQkJCQkJCXsNCi0JCQkJCQkJCWlmIChtX2FUaW1lcltpXSA9PSBwVGltZXIpDQotCQkJCQkJCQl7DQotCQkJCQkJCQkJbV9hVGltZXIuUmVtb3ZlQXQoaSk7DQotCQkJCQkJCQkJYnJlYWs7DQotCQkJCQkJCQl9DQotCQkJCQkJCX0NCi0JCQkJCQkJDQotCQkJCQkJCWRlbGV0ZSBwVGltZXI7DQotCQkJCQkJCXBUaW1lck9iai0+U2V0VGltZXIoTlVMTCk7DQotCQkJCQkJfQ0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQl9DQotCQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBhcHA6OmV4ZWNNZW51SXRlbShPQkpfTUVUSE9EX1BBUkFNUykNCi17CQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLXZvaWQgYXBwOjpUaW1lclByb2MoQ0pTX1RpbWVyKiBwVGltZXIpDQotew0KLQlBU1NFUlQocFRpbWVyICE9IE5VTEwpOw0KLQ0KLQlzd2l0Y2ggKHBUaW1lci0+R2V0VHlwZSgpKQ0KLQl7DQotCWNhc2UgMDogLy9pbnRlcnZhbA0KLQkJUnVuSnNTY3JpcHQocFRpbWVyLT5HZXRSdW50aW1lKCksIHBUaW1lci0+R2V0SlNjcmlwdCgpKTsNCi0JCWJyZWFrOw0KLQljYXNlIDE6DQotCQlpZiAocFRpbWVyLT5HZXRUaW1lT3V0KCkgPiAwKQ0KLQkJew0KLQkJCVJ1bkpzU2NyaXB0KHBUaW1lci0+R2V0UnVudGltZSgpLCBwVGltZXItPkdldEpTY3JpcHQoKSk7DQotCQkJcFRpbWVyLT5LaWxsSlNUaW1lcigpOw0KLQkJfQ0KLQkJYnJlYWs7DQotCX0NCi0JDQotfQ0KLQ0KLXZvaWQgYXBwOjpSdW5Kc1NjcmlwdChDSlNfUnVudGltZSogcFJ1bnRpbWUsY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHdzU2NyaXB0KQ0KLXsNCi0JQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOw0KLQ0KLQlpZiAoIXBSdW50aW1lLT5Jc0Jsb2NraW5nKCkpDQotCXsNCi0JCUlGWEpTX0NvbnRleHQqIHBDb250ZXh0ID0gcFJ1bnRpbWUtPk5ld0NvbnRleHQoKTsNCi0JCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0JCXBDb250ZXh0LT5PbkV4dGVybmFsX0V4ZWMoKTsNCi0JCUNGWF9XaWRlU3RyaW5nIHd0SW5mbzsNCi0JCXBDb250ZXh0LT5SdW5TY3JpcHQod3NTY3JpcHQsd3RJbmZvKTsNCi0JCXBSdW50aW1lLT5SZWxlYXNlQ29udGV4dChwQ29udGV4dCk7DQotCX0NCi19DQotDQotRlhfQk9PTCBhcHA6OmdvQmFjayhPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotDQotDQotCQ0KLQkNCi0JDQotCQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBhcHA6OmdvRm9yd2FyZChPQkpfTUVUSE9EX1BBUkFNUykNCi17CQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBhcHA6Om1haWxNc2coT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotDQotCXY4OjpJc29sYXRlKiBpc29sYXRlID0gR2V0SXNvbGF0ZShjYyk7DQotDQotCUZYX0JPT0wgYlVJID0gVFJVRTsNCi0JQ0ZYX1dpZGVTdHJpbmcgY1RvID0gTCIiOw0KLQlDRlhfV2lkZVN0cmluZyBjQ2MgPSBMIiI7DQotCUNGWF9XaWRlU3RyaW5nIGNCY2MgPSBMIiI7DQotCUNGWF9XaWRlU3RyaW5nIGNTdWJqZWN0ID0gTCIiOw0KLQlDRlhfV2lkZVN0cmluZyBjTXNnID0gTCIiOw0KLQlpZihwYXJhbXMuc2l6ZSgpIDwgMikNCi0JCXJldHVybiBGQUxTRTsNCi0NCi0JYlVJID0gcGFyYW1zLnNpemUoKT49MT8oaW50KXBhcmFtc1swXTpUUlVFOw0KLQljVG8gPSBwYXJhbXMuc2l6ZSgpPj0yPyhjb25zdCB3Y2hhcl90KikoRlhfTFBDV1NUUilwYXJhbXNbMV0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTpMIiI7DQotCWNDYyA9IHBhcmFtcy5zaXplKCk+PTM/KGNvbnN0IHdjaGFyX3QqKShGWF9MUENXU1RSKXBhcmFtc1syXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOkwiIjsNCi0JY0JjYyA9IHBhcmFtcy5zaXplKCk+PTQ/KGNvbnN0IHdjaGFyX3QqKShGWF9MUENXU1RSKXBhcmFtc1szXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOkwiIjsNCi0JY1N1YmplY3QgPSBwYXJhbXMuc2l6ZSgpPj01Pyhjb25zdCB3Y2hhcl90KikoRlhfTFBDV1NUUilwYXJhbXNbNF0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTpMIiI7DQotCWNNc2cgPSBwYXJhbXMuc2l6ZSgpPj02Pyhjb25zdCB3Y2hhcl90KikoRlhfTFBDV1NUUilwYXJhbXNbNV0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTpMIiI7CQkNCi0NCi0NCi0JaWYgKHBhcmFtc1swXS5HZXRUeXBlKCkgPT0gVlRfb2JqZWN0KQ0KLQl7DQotCQlKU09iamVjdCBwT2JqID0gKEpTT2JqZWN0KXBhcmFtc1swXTsNCi0NCi0JCXY4OjpIYW5kbGU8djg6OlZhbHVlPiBwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaiwgTCJiVUkiKTsNCi0JCQliVUkgPSAoaW50KUNKU19WYWx1ZShpc29sYXRlLHBWYWx1ZSxHRVRfVkFMVUVfVFlQRShwVmFsdWUpKTsNCi0NCi0JCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSwgcE9iaiwgTCJjVG8iKTsNCi0JCQljVG8gPSBDSlNfVmFsdWUoaXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSkub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsNCi0NCi0JCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLCBMImNDYyIpOw0KLQkJCWNDYyA9IENKU19WYWx1ZShpc29sYXRlLHBWYWx1ZSxHRVRfVkFMVUVfVFlQRShwVmFsdWUpKS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOw0KLQ0KLQkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwiY0JjYyIpOw0KLQkJCWNCY2MgPSBDSlNfVmFsdWUoaXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSkub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsNCi0NCi0JCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLCBMImNTdWJqZWN0Iik7DQotCQkJY1N1YmplY3QgPSBDSlNfVmFsdWUoaXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSkub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsNCi0NCi0JCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLCBMImNNc2ciKTsNCi0JCQljTXNnID0gQ0pTX1ZhbHVlKGlzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7DQotCX0NCi0JDQotCQ0KLQ0KLQlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7DQotCUFTU0VSVChwUnVudGltZSAhPSBOVUxMKTsNCi0NCi0JQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCA9IHBDb250ZXh0LT5HZXRSZWFkZXJBcHAoKTsNCi0JQVNTRVJUKHBBcHAgIT0gTlVMTCk7DQotDQotCXBSdW50aW1lLT5CZWdpbkJsb2NrKCk7DQotCXBBcHAtPkpTX2RvY21haWxGb3JtKE5VTEwsIDAsIGJVSSwgKEZYX0xQQ1dTVFIpY1RvLCAoRlhfTFBDV1NUUiljU3ViamVjdCwgKEZYX0xQQ1dTVFIpY0NjLCAoRlhfTFBDV1NUUiljQmNjLCAoRlhfTFBDV1NUUiljTXNnKTsNCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi0JcFJ1bnRpbWUtPkVuZEJsb2NrKCk7DQotDQotCS8vcmV0dXJuIGJSZXQ7DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBhcHA6OmxhdW5jaFVSTChPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCWlmIChJc1NhZmVNb2RlKGNjKSkgcmV0dXJuIFRSVUU7DQotDQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0NCi0JDQotDQotDQotCUNGWF9XaWRlU3RyaW5nIHN3VVJMID0gcGFyYW1zWzBdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7DQotDQotCUNKU19SdW50aW1lKiBwUnVudGltZSA9IHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKTsNCi0JQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOw0KLQ0KLQlwUnVudGltZS0+QmVnaW5CbG9jaygpOw0KLS8vCUZYX0JPT0wgYlJldCA9IHBBcHAtPk9wZW5VUkwoc3dVUkwpOw0KLQlwUnVudGltZS0+RW5kQmxvY2soKTsNCi0NCi0vLwlyZXR1cm4gYlJldDsNCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MIGFwcDo6cnVudGltZUhpZ2hsaWdodChPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCXZwPj5tX2JSdW50aW1lSGlnaExpZ2h0Ow0KLQl9DQotCWVsc2UNCi0Jew0KLQkJdnA8PG1fYlJ1bnRpbWVIaWdoTGlnaHQ7DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgYXBwOjpmdWxsc2NyZWVuKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBhcHA6OnBvcFVwTWVudShPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotDQotRlhfQk9PTCBhcHA6OmJyb3dzZUZvckRvYyhPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCS8vVGhpcyBtZXRob2QgbWF5IHRyaWdnZXIgYSAiZmlsZSBzYXZlIiBkaWFsb2csd2hpbGUgZW5hYmxlIHVzZXIgdG8gc2F2ZSBjb250ZW50cyBvZiB0aGUgZG9jdW1lbnQuDQotCS8vU3VjaCBhY3Rpb24gaXMgY29uc2lkZXJlZCB0byBiZSB1bnNhZmUuDQotCWlmIChJc1NhZmVNb2RlKGNjKSkgcmV0dXJuIFRSVUU7DQotDQotCXY4OjpJc29sYXRlKiBpc29sYXRlID0gR2V0SXNvbGF0ZShjYyk7DQotDQotCWJvb2wgYlNhdmUgPSBmYWxzZTsNCi0JQ0ZYX0J5dGVTdHJpbmcgY0ZpbGVuYW1lSW5pdCA9IENGWF9CeXRlU3RyaW5nKCk7DQotCUNGWF9CeXRlU3RyaW5nIGNGU0luaXQgPSBDRlhfQnl0ZVN0cmluZygpOw0KLQ0KLQlpZihwYXJhbXMuc2l6ZSgpPjAgJiYgKHBhcmFtc1swXS5HZXRUeXBlKCkgPT0gVlRfb2JqZWN0KSkNCi0Jew0KLQkJSlNPYmplY3QgcE9iaiA9IChKU09iamVjdCApcGFyYW1zWzBdOw0KLQ0KLSAJCXY4OjpIYW5kbGU8djg6OlZhbHVlPiBwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaixMImJTYXZlIik7DQotIAkJCWJTYXZlID0gKGJvb2wpQ0pTX1ZhbHVlKGlzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpOw0KLSAJCQ0KLQkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLCBwT2JqLEwiY0ZpbGVuYW1lSW5pdCIpOw0KLQkJew0KLQkJCUNKU19WYWx1ZSB0ID0gQ0pTX1ZhbHVlKGlzb2xhdGUsIHBWYWx1ZSwgR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSk7DQotIAkJCWNGaWxlbmFtZUluaXQgPSB0Lm9wZXJhdG9yIENGWF9CeXRlU3RyaW5nKCk7DQotCQl9DQotIAkJDQotCQlwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaixMImNGU0luaXQiKTsNCi0JCXsNCi0JCQlDSlNfVmFsdWUgdCA9IENKU19WYWx1ZShpc29sYXRlLCBwVmFsdWUsIEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpOw0KLQkJCWNGU0luaXQgPSB0Lm9wZXJhdG9yIENGWF9CeXRlU3RyaW5nKCk7DQotCQl9DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlpZihwYXJhbXMuc2l6ZSgpID49IDEpDQotCQl7DQotCQkJYlNhdmUgPSAoYm9vbClwYXJhbXNbMF07DQotCQl9DQotCQlpZihwYXJhbXMuc2l6ZSgpID49IDIpDQotCQl7DQotCQkJQ0pTX1ZhbHVlIHQgPSBwYXJhbXNbMV07DQotCQkJY0ZpbGVuYW1lSW5pdCA9IHQub3BlcmF0b3IgQ0ZYX0J5dGVTdHJpbmcoKTsNCi0JCX0NCi0JCWlmKHBhcmFtcy5zaXplKCkgPj0gMykNCi0JCXsNCi0JCQlDSlNfVmFsdWUgdCA9IHBhcmFtc1syXTsNCi0JCQljRlNJbml0ID0gdC5vcGVyYXRvciBDRlhfQnl0ZVN0cmluZygpOw0KLQkJfQ0KLQl9DQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotCQ0KLQlDUERGRG9jX0Vudmlyb25tZW50KiBwQXBwID0gcENvbnRleHQtPkdldFJlYWRlckFwcCgpOw0KLQlBU1NFUlQocEFwcCAhPSBOVUxMKTsNCi0NCi0JQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpOw0KLQlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7DQotDQotCUNGWF9XaWRlU3RyaW5nIHdzRmlsZU5hbWVJbml0ID0gQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChjRmlsZW5hbWVJbml0KTsNCi0JQ0ZYX1dpZGVTdHJpbmcgd3NGU0luaXQgPSBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKGNGU0luaXQpOw0KLQlDRlhfV2lkZVN0cmluZyB3c0ZpbGVQYXRoID0gcEFwcC0+SlNfYXBwYnJvd3NlRm9yRG9jKGJTYXZlLCB3c0ZpbGVOYW1lSW5pdCk7DQotCWlmKHdzRmlsZVBhdGguSXNFbXB0eSgpKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQ0KLQlKU0ZYT2JqZWN0IHBSZXRPYmogPSBKU19OZXdGeER5bmFtaWNPYmooKnBSdW50aW1lLCBwQ29udGV4dCwgLTEpOw0KLQ0KLQlKU19QdXRPYmplY3RTdHJpbmcoaXNvbGF0ZSxwUmV0T2JqLCBMImNQYXRoIiwgU3lzUGF0aFRvUERGUGF0aCh3c0ZpbGVQYXRoKSk7CQ0KLQlKU19QdXRPYmplY3RTdHJpbmcoaXNvbGF0ZSxwUmV0T2JqLCBMImNVUkwiLCBTeXNQYXRoVG9QREZQYXRoKHdzRmlsZVBhdGgpKTsNCi0NCi0JaWYgKCFjRlNJbml0LklzRW1wdHkoKSkNCi0Jew0KLQkJSlNfUHV0T2JqZWN0U3RyaW5nKGlzb2xhdGUscFJldE9iaiwgTCJjRlMiLCBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKGNGU0luaXQuR2V0QnVmZmVyKGNGU0luaXQuR2V0TGVuZ3RoKCkpKSk7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlKU19QdXRPYmplY3RTdHJpbmcoaXNvbGF0ZSxwUmV0T2JqLCBMImNGUyIsIENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoIkRPUyIpKTsNCi0JfQ0KLQkNCi0JdlJldCA9ICBwUmV0T2JqOw0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgYXBwOjpTeXNQYXRoVG9QREZQYXRoKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzT2xkUGF0aCkNCi17DQotCUNGWF9XaWRlU3RyaW5nIHNSZXQgPSBMIi8iOw0KLQkNCi0JZm9yIChpbnQgaT0wLHN6PXNPbGRQYXRoLkdldExlbmd0aCgpOyBpPHN6OyBpKyspDQotCXsNCi0JCXdjaGFyX3QgYyA9IHNPbGRQYXRoLkdldEF0KGkpOw0KLQkJaWYgKGMgPT0gTCc6JykNCi0JCXsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlpZiAoYyA9PSBMJ1xcJykNCi0JCQl7DQotCQkJCXNSZXQgKz0gTCIvIjsNCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJc1JldCArPSBjOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQkNCi0JcmV0dXJuIHNSZXQ7DQotfQ0KLQ0KLUNGWF9XaWRlU3RyaW5nIGFwcDo6UERGUGF0aFRvU3lzUGF0aChjb25zdCBDRlhfV2lkZVN0cmluZyYgc09sZFBhdGgpDQotew0KLQkvL3N0ckxQYXRoID0gIkQ6XHRlbXBvcmF5LmZkZiI7DQotCUNGWF9XaWRlU3RyaW5nIHN0ck9QYXRoID0gc09sZFBhdGg7DQotCXN0ck9QYXRoLlRyaW1MZWZ0KCk7DQotCXN0ck9QYXRoLlRyaW1SaWdodCgpOw0KLQkNCi0JaWYgKHN0ck9QYXRoLkdldEF0KDApID09IEwnLycgJiYgc3RyT1BhdGguR2V0QXQoMikgPT0gTCcvJykNCi0Jew0KLQkJd2NoYXJfdCBjX0RyaXZlID0gc3RyT1BhdGguR2V0QXQoMSk7DQotCQlpZiAoKGNfRHJpdmUgPj0gTCdhJyAmJiBjX0RyaXZlIDw9IEwneicgKXx8KCBjX0RyaXZlID49IEwnQScgJiYgY19Ecml2ZSA8PSBMJ1onKSkNCi0JCXsNCi0JCQlzdHJPUGF0aC5SZXBsYWNlKChGWF9MUENXU1RSKUwiLyIsKEZYX0xQQ1dTVFIpTCJcXCIpOw0KLQkJCS8vc3RyT1BhdGguU2V0QXQoMCwnJyk7DQotCQkJc3RyT1BhdGguSW5zZXJ0KDIsJzonKTsNCi0JCQlzdHJPUGF0aC5EZWxldGUoMCk7DQotCQl9DQotCX0NCi0JDQotCXJldHVybiBzdHJPUGF0aDsNCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgYXBwOjpSZWxhdGl2ZVBhdGhUb1N5c1BhdGgoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNPbGRQYXRoLCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc0ZpbGVQYXRoKQ0KLXsNCi0vLwlpZiAoIVBhdGhJc1JlbGF0aXZlKHNPbGRQYXRoKSkgcmV0dXJuIHNPbGRQYXRoOw0KLQkNCi0JaW50IG5TcGxpdCA9IDA7DQotCWZvciAoaW50IGk9c0ZpbGVQYXRoLkdldExlbmd0aCgpLTE7IGk+PTA7IGktLSkNCi0Jew0KLQkJaWYgKHNGaWxlUGF0aFtpXSA9PSAnXFwnIHx8IHNGaWxlUGF0aFtpXSA9PSAnLycpDQotCQl7DQotCQkJblNwbGl0ID0gaTsNCi0JCQlicmVhazsNCi0JCX0NCi0JfQ0KLQkNCi0JcmV0dXJuIHNGaWxlUGF0aC5MZWZ0KG5TcGxpdCsxKSArIHNPbGRQYXRoOw0KLX0NCi0NCi1GWF9CT09MIGFwcDo6bmV3RG9jKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MIGFwcDo6b3BlbkRvYyhPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTCBhcHA6OnJlc3BvbnNlKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JQ0ZYX1dpZGVTdHJpbmcgc3dRdWVzdGlvbiA9IEwiIjsNCi0JQ0ZYX1dpZGVTdHJpbmcgc3dMYWJlbCA9IEwiIjsNCi0jaWZuZGVmIEZPWElUX0NIUk9NRV9CVUlMRA0KLQlDRlhfV2lkZVN0cmluZyBzd1RpdGxlID0gTCJGb3hpdCI7DQotI2Vsc2UNCi0JQ0ZYX1dpZGVTdHJpbmcgc3dUaXRsZSA9IEwiUERGIjsNCi0jZW5kaWYNCi0JQ0ZYX1dpZGVTdHJpbmcgc3dEZWZhdWx0ID0gTCIiOw0KLQlDRlhfV2lkZVN0cmluZyBzd1Jlc3BvbnNlID0gTCIiOw0KLQlib29sIGJQYXNzV29yZCA9IGZhbHNlOw0KLQkNCi0Jdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBHZXRJc29sYXRlKGNjKTsNCi0JDQotCWludCBpTGVuZ3RoID0gcGFyYW1zLnNpemUoKTsJDQotCWlmIChpTGVuZ3RoID4gMCAmJiBwYXJhbXNbMF0uR2V0VHlwZSgpID09IFZUX29iamVjdCkNCi0Jew0KLQkJDQotCQlKU09iamVjdCBwT2JqID0gKEpTT2JqZWN0IClwYXJhbXNbMF07DQotCQl2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosTCJjUXVlc3Rpb24iKTsNCi0JCQlzd1F1ZXN0aW9uID0gQ0pTX1ZhbHVlKGlzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7DQotDQotCQlwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaixMImNUaXRsZSIpOw0KLQkJCXN3VGl0bGUgPSBDSlNfVmFsdWUoaXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSkub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsNCi0NCi0JCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLEwiY0RlZmF1bHQiKTsNCi0JCQlzd0RlZmF1bHQgPSBDSlNfVmFsdWUoaXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSkub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsNCi0NCi0JCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLEwiY0xhYmVsIik7DQotCQkJc3dMYWJlbCA9IENKU19WYWx1ZShpc29sYXRlLHBWYWx1ZSxHRVRfVkFMVUVfVFlQRShwVmFsdWUpKS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOw0KLQ0KLQkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosTCJiUGFzc3dvcmQiKTsNCi0JCQliUGFzc1dvcmQgPSAoYm9vbClDSlNfVmFsdWUoaXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSk7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQlzd2l0Y2goaUxlbmd0aCkNCi0JCXsNCi0JCWNhc2UgMToNCi0JCQlzd1F1ZXN0aW9uID0gcGFyYW1zWzBdOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSAyOg0KLQkJCXN3UXVlc3Rpb24gPSBwYXJhbXNbMF07DQotCQkJc3dUaXRsZSA9IHBhcmFtc1sxXTsNCi0JCQlicmVhazsNCi0JCWNhc2UgMzoNCi0JCQlzd1F1ZXN0aW9uID0gcGFyYW1zWzBdOw0KLQkJCXN3VGl0bGUgPSBwYXJhbXNbMV07DQotCQkJc3dEZWZhdWx0ID0gcGFyYW1zWzJdOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSA0Og0KLQkJCXN3UXVlc3Rpb24gPSBwYXJhbXNbMF07DQotCQkJc3dUaXRsZSA9IHBhcmFtc1sxXTsNCi0JCQlzd0RlZmF1bHQgPSBwYXJhbXNbMl07DQotCQkJYlBhc3NXb3JkID0gcGFyYW1zWzNdOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSA1Og0KLQkJCXN3UXVlc3Rpb24gPSBwYXJhbXNbMF07DQotCQkJc3dUaXRsZSA9IHBhcmFtc1sxXTsNCi0JCQlzd0RlZmF1bHQgPSBwYXJhbXNbMl07DQotCQkJYlBhc3NXb3JkID0gcGFyYW1zWzNdOw0KLQkJCXN3TGFiZWwgPSBwYXJhbXNbNF07DQotCQkJYnJlYWs7DQotCQlkZWZhdWx0Og0KLQkJCWJyZWFrOw0KLQkJfQ0KLQl9DQotDQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjOw0KLSAJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOw0KLQ0KLQlDUERGRG9jX0Vudmlyb25tZW50KiBwQXBwID0gcENvbnRleHQtPkdldFJlYWRlckFwcCgpOw0KLSAJQVNTRVJUKHBBcHAgIT0gTlVMTCk7DQotCWludCBuTGVuZ3RoID0gMjA0ODsNCi0JY2hhciogcEJ1ZmYgPSBuZXcgY2hhcltuTGVuZ3RoXTsNCi0Jbkxlbmd0aCA9IHBBcHAtPkpTX2FwcFJlc3BvbnNlKHN3UXVlc3Rpb24sIHN3VGl0bGUsIHN3RGVmYXVsdCwgc3dMYWJlbCwgYlBhc3NXb3JkLCBwQnVmZiwgbkxlbmd0aCk7DQotCWlmKG5MZW5ndGg8PTApDQotCXsNCi0JCXZSZXQuU2V0TnVsbCgpOw0KLQkJcmV0dXJuIEZBTFNFOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJbkxlbmd0aCA9IG5MZW5ndGg+MjA0Nj8yMDQ2Om5MZW5ndGg7DQotICAgIHBCdWZmW25MZW5ndGhdID0gMDsNCi0gICAgcEJ1ZmZbbkxlbmd0aCsxXSA9IDA7DQotCQlzd1Jlc3BvbnNlID0gQ0ZYX1dpZGVTdHJpbmc6OkZyb21VVEYxNkxFKCh1bnNpZ25lZCBzaG9ydCopcEJ1ZmYsIG5MZW5ndGgpOw0KLQkJdlJldCA9IHN3UmVzcG9uc2U7DQotCX0NCi0JZGVsZXRlW10gcEJ1ZmY7DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIGFwcDo6bWVkaWEoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MIGFwcDo6ZXhlY0RpYWxvZyhPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0phdmFTY3JpcHQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSUphdmFTY3JpcHQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRGVmaW5lLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX09iamVjdC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19WYWx1ZS5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9hcHAuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L3Jlc291cmNlLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0NvbnRleHQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfUnVudGltZS5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9Eb2N1bWVudC5oIgorCisKK3N0YXRpYyB2ODo6SXNvbGF0ZSogR2V0SXNvbGF0ZShJRlhKU19Db250ZXh0KiBjYykKK3sKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQgKiljYzsKKwlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7CisKKwlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7CisJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOworCisJcmV0dXJuIHBSdW50aW1lLT5HZXRJc29sYXRlKCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGltZXJPYmogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitCRUdJTl9KU19TVEFUSUNfQ09OU1QoQ0pTX1RpbWVyT2JqKQorRU5EX0pTX1NUQVRJQ19DT05TVCgpCisKK0JFR0lOX0pTX1NUQVRJQ19QUk9QKENKU19UaW1lck9iaikKK0VORF9KU19TVEFUSUNfUFJPUCgpCisKK0JFR0lOX0pTX1NUQVRJQ19NRVRIT0QoQ0pTX1RpbWVyT2JqKQorRU5EX0pTX1NUQVRJQ19NRVRIT0QoKQorCitJTVBMRU1FTlRfSlNfQ0xBU1MoQ0pTX1RpbWVyT2JqLCBUaW1lck9iaikKKworVGltZXJPYmo6OlRpbWVyT2JqKENKU19PYmplY3QqIHBKU09iamVjdCkKKzogQ0pTX0VtYmVkT2JqKHBKU09iamVjdCksCittX3BUaW1lcihOVUxMKQoreworCQorfQorCitUaW1lck9iajo6flRpbWVyT2JqKCkKK3sKK30KKwordm9pZCBUaW1lck9iajo6U2V0VGltZXIoQ0pTX1RpbWVyKiBwVGltZXIpCit7CisJbV9wVGltZXIgPSBwVGltZXI7Cit9CisKK0NKU19UaW1lciogVGltZXJPYmo6OkdldFRpbWVyKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9wVGltZXI7Cit9CisKKyNkZWZpbmUgSlNfU1RSX1ZJRVdFUlRZUEVfUkVBREVSCQlMIlJlYWRlciIKKyNkZWZpbmUgSlNfU1RSX1ZJRVdFUlRZUEVfU1RBTkRBUkQJCUwiRXhjaGFuZ2UiCisjZGVmaW5lIEpTX1NUUl9WSUVXRVJWQVJJQVRJT04JCQlMIkZ1bGwiCisjZGVmaW5lIEpTX1NUUl9QTEFURk9STQkJCQkJTCJXSU4iCisjZGVmaW5lIEpTX1NUUl9MQU5HVUFOR0UJCQkJTCJFTlUiCisjZGVmaW5lIEpTX1NUUl9WSUVXRVJWRVJTSU9OCQkJOAorI2RlZmluZSBKU19OVU1fRk9STVNWRVJTSU9OCQkJCTcKKworI2RlZmluZSBKU19GSUxFUEFUSF9NQVhMRU4JCQkJMjAwMAorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGFwcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0JFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfQXBwKQorRU5EX0pTX1NUQVRJQ19DT05TVCgpCisKK0JFR0lOX0pTX1NUQVRJQ19QUk9QKENKU19BcHApCisJSlNfU1RBVElDX1BST1BfRU5UUlkoYWN0aXZlRG9jcykKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShjYWxjdWxhdGUpCisJSlNfU1RBVElDX1BST1BfRU5UUlkoZm9ybXNWZXJzaW9uKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGZzKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGZ1bGxzY3JlZW4pCisJSlNfU1RBVElDX1BST1BfRU5UUlkobGFuZ3VhZ2UpCisJSlNfU1RBVElDX1BST1BfRU5UUlkobWVkaWEpCisJSlNfU1RBVElDX1BST1BfRU5UUlkocGxhdGZvcm0pCisJSlNfU1RBVElDX1BST1BfRU5UUlkocnVudGltZUhpZ2hsaWdodCkKKwlKU19TVEFUSUNfUFJPUF9FTlRSWSh2aWV3ZXJUeXBlKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHZpZXdlclZhcmlhdGlvbikKKwlKU19TVEFUSUNfUFJPUF9FTlRSWSh2aWV3ZXJWZXJzaW9uKQkKK0VORF9KU19TVEFUSUNfUFJPUCgpCisKK0JFR0lOX0pTX1NUQVRJQ19NRVRIT0QoQ0pTX0FwcCkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGFsZXJ0LCA2KQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoYmVlcCwgMSkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGJyb3dzZUZvckRvYywgMCkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGNsZWFySW50ZXJ2YWwsIDEpCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShjbGVhclRpbWVPdXQsIDEpCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShleGVjRGlhbG9nLCAzKQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZXhlY01lbnVJdGVtLCAgMSkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGZpbmRDb21wb25lbnQsIDEpCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShnb0JhY2ssIDApCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShnb0ZvcndhcmQsIDApCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShsYXVuY2hVUkwsIDApCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShtYWlsTXNnLCAwKQkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKG5ld0ZERiwgMCkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKG5ld0RvYywgMCkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKG9wZW5Eb2MsIDApCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShvcGVuRkRGLCA1KQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkocG9wVXBNZW51RXgsIDApCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShwb3BVcE1lbnUsIDApCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShyZXNwb25zZSwgMCkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKHNldEludGVydmFsLCAyKQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoc2V0VGltZU91dCwgMikKK0VORF9KU19TVEFUSUNfTUVUSE9EKCkKKworSU1QTEVNRU5UX0pTX0NMQVNTKENKU19BcHAsYXBwKQorCithcHA6OmFwcChDSlNfT2JqZWN0ICogcEpTT2JqZWN0KSA6IENKU19FbWJlZE9iaihwSlNPYmplY3QpICwKKwltX2JDYWxjdWxhdGUodHJ1ZSksCisJbV9wUnVudGltZShOVUxMKSwKKwltX2JSdW50aW1lSGlnaExpZ2h0KGZhbHNlKQorLy8JbV9wTWVudUhlYWQoTlVMTCkKK3sKK30KKworYXBwOjp+YXBwKHZvaWQpCit7CisJZm9yIChpbnQgaT0wLHN6PW1fYVRpbWVyLkdldFNpemUoKTsgaTxzejsgaSsrKQorCQlkZWxldGUgbV9hVGltZXJbaV07CisKKwltX2FUaW1lci5SZW1vdmVBbGwoKTsKK30KKworRlhfQk9PTCBhcHA6OmFjdGl2ZURvY3MoT0JKX1BST1BfUEFSQU1TKQoreworCWlmICh2cC5Jc0dldHRpbmcoKSkKKwl7CisKKwkJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0ICopY2M7CisJCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwkJCisJCUNQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAgPSBwQ29udGV4dC0+R2V0UmVhZGVyQXBwKCk7CisJCUFTU0VSVChwQXBwICE9IE5VTEwpOworCisJCUNKU19SdW50aW1lKiBwUnVudGltZSA9IHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKTsKKwkJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOworCQkKKwkJQ1BERlNES19Eb2N1bWVudCogcEN1ckRvYyA9IHBDb250ZXh0LT5HZXRSZWFkZXJEb2N1bWVudCgpOworCQkKKwkJQ0pTX0FycmF5IGFEb2NzKHBSdW50aW1lLT5HZXRJc29sYXRlKCkpOworLy8JCWludCBpTnVtRG9jcyA9IHBBcHAtPkNvdW50RG9jdW1lbnRzKCk7CisJCQorLy8gCQlmb3IoaW50IGlJbmRleCA9IDA7IGlJbmRleDxpTnVtRG9jczsgaUluZGV4KyspCisvLyAJCXsKKwkJCUNQREZTREtfRG9jdW1lbnQqIHBEb2MgPSBwQXBwLT5HZXRDdXJyZW50RG9jKCk7CisJCQlpZiAocERvYykKKwkJCXsKKwkJCQlDSlNfRG9jdW1lbnQgKiBwSlNEb2N1bWVudCA9IE5VTEw7CisJCQkJCisJCQkJaWYgKHBEb2MgPT0gcEN1ckRvYykKKwkJCQl7CisJCQkJCUpTRlhPYmplY3QgcE9iaiA9IEpTX0dldFRoaXNPYmooKnBSdW50aW1lKTsKKwkJCQkJCisJCQkJCWlmIChKU19HZXRPYmpEZWZuSUQocE9iaikgPT0gSlNfR2V0T2JqRGVmbklEKCpwUnVudGltZSwgTCJEb2N1bWVudCIpKQorCQkJCQl7CisJCQkJCQlwSlNEb2N1bWVudCA9IChDSlNfRG9jdW1lbnQqKUpTX0dldFByaXZhdGUocFJ1bnRpbWUtPkdldElzb2xhdGUoKSxwT2JqKTsKKwkJCQkJfQorCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlKU0ZYT2JqZWN0IHBPYmogPSBKU19OZXdGeER5bmFtaWNPYmooKnBSdW50aW1lLCBwQ29udGV4dCwgSlNfR2V0T2JqRGVmbklEKCpwUnVudGltZSxMIkRvY3VtZW50IikpOworCQkJCQlwSlNEb2N1bWVudCA9IChDSlNfRG9jdW1lbnQqKUpTX0dldFByaXZhdGUocFJ1bnRpbWUtPkdldElzb2xhdGUoKSxwT2JqKTsKKwkJCQkJQVNTRVJUKHBKU0RvY3VtZW50ICE9IE5VTEwpOworCQkJCQkKKwkJCQkJCisJCQkJCS8vCQkJcERvY3VtZW50LT5BdHRhY2hEb2MocERvYyk7CisJCQkJfQorCQkJCQorCQkJCWFEb2NzLlNldEVsZW1lbnQoMCxDSlNfVmFsdWUocFJ1bnRpbWUtPkdldElzb2xhdGUoKSxwSlNEb2N1bWVudCkpOworCQkJfQorCS8vCQl9CisJCQorCQlpZiAoYURvY3MuR2V0TGVuZ3RoKCkgPiAwKQorCQkJdnAgPDwgYURvY3M7CisJCWVsc2UKKwkJCXZwLlNldE51bGwoKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBhcHA6OmNhbGN1bGF0ZShPQkpfUFJPUF9QQVJBTVMpCit7CisJaWYgKHZwLklzU2V0dGluZygpKQorCXsKKwkJYm9vbCBiVlA7CisJCXZwID4+IGJWUDsKKwkJbV9iQ2FsY3VsYXRlID0gKEZYX0JPT0wpYlZQOworCisJCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7CisJCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwkJCisJCUNQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAgPSBwQ29udGV4dC0+R2V0UmVhZGVyQXBwKCk7CisJCUFTU0VSVChwQXBwICE9IE5VTEwpOworCQkKKwkJQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpOworCQlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7CisKKwkJQ0pTX0FycmF5IGFEb2NzKHBSdW50aW1lLT5HZXRJc29sYXRlKCkpOworLy8gCQlpbnQgaU51bURvY3MgPSBwQXBwLT5Db3VudERvY3VtZW50cygpOworLy8gCQkKKy8vIAkJZm9yIChpbnQgaUluZGV4ID0gMDtpSW5kZXggPCBpTnVtRG9jczsgaUluZGV4KyspCisvLyAJCXsKKwkJCWlmIChDUERGU0RLX0RvY3VtZW50KiBwRG9jID0gcEFwcC0+R2V0Q3VycmVudERvYygpKQorCQkJeworCQkJCUNQREZTREtfSW50ZXJGb3JtKiBwSW50ZXJGb3JtID0gKENQREZTREtfSW50ZXJGb3JtKilwRG9jLT5HZXRJbnRlckZvcm0oKTsKKwkJCQlBU1NFUlQocEludGVyRm9ybSAhPSBOVUxMKTsKKwkJCQlwSW50ZXJGb3JtLT5FbmFibGVDYWxjdWxhdGUoKEZYX0JPT0wpbV9iQ2FsY3VsYXRlKTsKKwkJCX0JCQkKKy8vCQl9CisJfQorCWVsc2UKKwl7CisJCXZwIDw8IChib29sKW1fYkNhbGN1bGF0ZTsKKwl9CisJCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgYXBwOjpmb3Jtc1ZlcnNpb24oT0JKX1BST1BfUEFSQU1TKQoreworCWlmICh2cC5Jc0dldHRpbmcoKSkKKwl7CisJCXZwIDw8IEpTX05VTV9GT1JNU1ZFUlNJT047CisJCXJldHVybiBUUlVFOworCX0KKwkKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wgYXBwOjp2aWV3ZXJUeXBlKE9CSl9QUk9QX1BBUkFNUykKK3sKKworCisJCisJCisJCisKKwlpZiAodnAuSXNHZXR0aW5nKCkpCisJeworLy8gCQlpZiAocEFwcC0+R2V0QXBwTmFtZSgpID09IFBIQU5UT00pCisvLyAJCQl2cCA8PCBKU19TVFJfVklFV0VSVFlQRV9TVEFOREFSRDsKKy8vIAkJZWxzZQorLy8gCQkJdnAgPDwgSlNfU1RSX1ZJRVdFUlRZUEVfUkVBREVSOworCQl2cCA8PCBMInVua25vd24iOworCisJCS8vdnAgPDwgcEFwcC0+R2V0QXBwVGl0bGUoKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCQorCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBhcHA6OnZpZXdlclZhcmlhdGlvbihPQkpfUFJPUF9QQVJBTVMpCit7CisJaWYgKHZwLklzR2V0dGluZygpKQorCXsKKwkJdnAgPDwgSlNfU1RSX1ZJRVdFUlZBUklBVElPTjsKKwkJcmV0dXJuIFRSVUU7CisJfQorCQorCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBhcHA6OnZpZXdlclZlcnNpb24oT0JKX1BST1BfUEFSQU1TKQoreworCWlmICh2cC5Jc0dldHRpbmcoKSkKKwl7CisJCXZwIDw8IEpTX1NUUl9WSUVXRVJWRVJTSU9OOworCQlyZXR1cm4gVFJVRTsKKwl9CisJCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIGFwcDo6cGxhdGZvcm0oT0JKX1BST1BfUEFSQU1TKQoreworCWlmICh2cC5Jc0dldHRpbmcoKSkKKwl7CisJCXZwIDw8IEpTX1NUUl9QTEFURk9STTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCQorCXJldHVybiBGQUxTRTsKK30KKworRlhfQk9PTCBhcHA6Omxhbmd1YWdlKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlpZiAodnAuSXNHZXR0aW5nKCkpCisJeworCQl2cCA8PCBKU19TVFJfTEFOR1VBTkdFOworCQlyZXR1cm4gVFJVRTsKKwl9CisJCisJcmV0dXJuIEZBTFNFOworfQorCisvL2NyZWF0ZXMgYSBuZXcgZmRmIG9iamVjdCB0aGF0IGNvbnRhaW5zIG5vIGRhdGEKKy8vY29tbWVudDogbmVlZCByZWFkZXIgc3VwcG9ydAorLy9ub3RlOgorLy9DRkRGX0RvY3VtZW50ICogQ1BERkRvY19FbnZpcm9ubWVudDo6TmV3RkRGKCk7CitGWF9CT09MIGFwcDo6bmV3RkRGKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCXJldHVybiBUUlVFOworfQorLy9vcGVucyBhIHNwZWNpZmllZCBwZGYgZG9jdW1lbnQgYW5kIHJldHVybnMgaXRzIGRvY3VtZW50IG9iamVjdAorLy9jb21tZW50Om5lZWQgcmVhZGVyIHN1cHBvcnQKKy8vbm90ZTogYXMgZGVmaW5lZCBpbiBqcyByZWZlcmVuY2UsIHRoZSBwcm90byBvZiB0aGlzIGZ1bmN0aW9uJ3MgZm91cnRoIHBhcm1ldGVycywgaG93IG9sZCBhbiBmZGYgZG9jdW1lbnQgd2hpbGUgZG8gbm90IHNob3cgaXQuCisvL0NGREZfRG9jdW1lbnQgKiBDUERGRG9jX0Vudmlyb25tZW50OjpPcGVuRkRGKHN0cmluZyBzdHJQYXRoLGJvb2wgYlVzZXJDb252KTsKKworRlhfQk9PTCBhcHA6Om9wZW5GREYoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgYXBwOjphbGVydChPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlpbnQgaVNpemUgPSBwYXJhbXMuc2l6ZSgpOworCWlmIChpU2l6ZSA8IDEpCisJCXJldHVybiBGQUxTRTsKKworCUNGWF9XaWRlU3RyaW5nIHN3TXNnID0gTCIiOworCUNGWF9XaWRlU3RyaW5nIHN3VGl0bGUgPSBMIiI7CisJaW50IGlJY29uID0gMDsKKwlpbnQgaVR5cGUgPSAwOworCisJdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBHZXRJc29sYXRlKGNjKTsKKworCWlmIChpU2l6ZSA9PSAxKQorCXsKKwkJaWYgKHBhcmFtc1swXS5HZXRUeXBlKCkgPT0gVlRfb2JqZWN0KQorCQl7CisJCQlKU09iamVjdCBwT2JqID0gcGFyYW1zWzBdOworCQkJeworCQkJCXY4OjpIYW5kbGU8djg6OlZhbHVlPiBwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUsIHBPYmosIEwiY01zZyIpOworCQkJCXN3TXNnID0gQ0pTX1ZhbHVlKGlzb2xhdGUscFZhbHVlLFZUX3Vua25vd24pLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7CisKKwkJCQlwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaixMImNUaXRsZSIpOworCQkJCXN3VGl0bGUgPSBDSlNfVmFsdWUoaXNvbGF0ZSwgcFZhbHVlLFZUX3Vua25vd24pLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7CisKKwkJCQlwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaixMIm5JY29uIik7CisJCQkJaUljb24gPSAoaW50KUNKU19WYWx1ZShpc29sYXRlLHBWYWx1ZSxWVF91bmtub3duKTsKKworCQkJCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLEwiblR5cGUiKTsKKwkJCQlpVHlwZSA9IChpbnQpQ0pTX1ZhbHVlKGlzb2xhdGUscFZhbHVlLFZUX3Vua25vd24pOworCQkJfQorCisJCQlpZiAoc3dNc2cgPT0gTCIiKQorCQkJeworCQkJCUNKU19BcnJheSBjYXJyYXkoaXNvbGF0ZSk7CisJCQkJaWYgKHBhcmFtc1swXS5Db252ZXJ0VG9BcnJheShjYXJyYXkpKQorCQkJCXsKKwkJCQkJaW50IGlMZW50aCA9IGNhcnJheS5HZXRMZW5ndGgoKTsKKwkJCQkJQ0pTX1ZhbHVlKiBwVmFsdWUgPSBuZXcgQ0pTX1ZhbHVlKGlzb2xhdGUpOworLy8JCQkJCWlmIChpTGVudGggPT0gMSkKKy8vCQkJCQkJcFZhbHVlID0gbmV3IENKU19WYWx1ZShpc29sYXRlKTsKKy8vIAkJCQkJZWxzZSBpZiAoaUxlbnRoID4gMSkKKy8vIAkJCQkJCXBWYWx1ZSA9IG5ldyBDSlNfVmFsdWVbaUxlbnRoXTsKKworCQkJCQlmb3IoaW50IGkgPSAwOyBpIDwgaUxlbnRoOyBpKyspCisJCQkJCXsKKwkJCQkJCWNhcnJheS5HZXRFbGVtZW50KGksICpwVmFsdWUpOworCQkJCQkJc3dNc2cgKz0gKCpwVmFsdWUpLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7CisJCQkJCQlpZiAoaSA8IGlMZW50aCAtIDEpCisJCQkJCQkJc3dNc2cgKz0gTCIsICAiOworCQkJCQl9CisKKwkJCQkJaWYocFZhbHVlKSBkZWxldGUgcFZhbHVlOworLy8gCQkJCQlpZiAoKGlMZW50aCA+IDEpICYmIHBWYWx1ZSkKKy8vIAkJCQkJeworLy8gCQkJCQkJZGVsZXRlW11wVmFsdWU7CisvLyAJCQkJCQlwVmFsdWUgPSBOVUxMOworLy8gCQkJCQl9CisvLyAJCQkJCWVsc2UgaWYgKChpTGVudGggPT0gMSkgJiYgcFZhbHVlKQorLy8gCQkJCQl7CisvLyAJCQkJCQlkZWxldGUgcFZhbHVlOworLy8gCQkJCQkJcFZhbHVlID0gTlVMTDsKKy8vIAkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKHN3VGl0bGUgPT0gTCIiKQorCQkJCXN3VGl0bGUgPSBKU0dldFN0cmluZ0Zyb21JRCgoQ0pTX0NvbnRleHQqKWNjLCBJRFNfU1RSSU5HX0pTQUxFUlQpOworCQl9CisJCWVsc2UgaWYgKHBhcmFtc1swXS5HZXRUeXBlKCkgPT0gVlRfYm9vbGVhbikKKwkJeworCQkJRlhfQk9PTCBiR2V0ID0gKEZYX0JPT0wpcGFyYW1zWzBdOworCQkJaWYgKGJHZXQpCisJCQkJc3dNc2cgPSBMInRydWUiOworCQkJZWxzZQorCQkJCXN3TXNnID0gTCJmYWxzZSI7CisKKwkJCXN3VGl0bGUgPSBKU0dldFN0cmluZ0Zyb21JRCgoQ0pTX0NvbnRleHQqKWNjLCBJRFNfU1RSSU5HX0pTQUxFUlQpOworCQl9CisJCWVsc2UKKwkJeworCQkJc3dNc2cgPSBwYXJhbXNbMF07CisJCQlzd1RpdGxlID0gSlNHZXRTdHJpbmdGcm9tSUQoKENKU19Db250ZXh0KiljYywgSURTX1NUUklOR19KU0FMRVJUKTsKKwkJfQorCX0KKwllbHNlCisJeworCQlpZiAocGFyYW1zWzBdLkdldFR5cGUoKSA9PSBWVF9ib29sZWFuKQorCQl7CisJCQlGWF9CT09MIGJHZXQgPSAoRlhfQk9PTClwYXJhbXNbMF07CisJCQlpZiAoYkdldCkKKwkJCQlzd01zZyA9IEwidHJ1ZSI7CisJCQllbHNlCisJCQkJc3dNc2cgPSBMImZhbHNlIjsKKwkJfQorCQllbHNlCisJCXsKKwkJCXN3TXNnID0gcGFyYW1zWzBdOworCQl9CisJCXN3VGl0bGUgPSBKU0dldFN0cmluZ0Zyb21JRCgoQ0pTX0NvbnRleHQqKWNjLCBJRFNfU1RSSU5HX0pTQUxFUlQpOworCQkKKwkJZm9yKGludCBpID0gMTtpPGlTaXplO2krKykKKwkJeworCQkJaWYgKGkgPT0gMSkKKwkJCQlpSWNvbiA9IGludChwYXJhbXNbaV0pOworCQkJaWYgKGkgPT0gMikKKwkJCQlpVHlwZSA9IGludChwYXJhbXNbaV0pOworCQkJaWYgKGkgPT0gMykKKwkJCQlzd1RpdGxlID0gcGFyYW1zW2ldOwkJCQorCQl9CisJfQorCisKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7CisJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOworCXBSdW50aW1lLT5CZWdpbkJsb2NrKCk7CisJdlJldCA9IE1zZ0JveChwUnVudGltZS0+R2V0UmVhZGVyQXBwKCksIEpTR2V0UGFnZVZpZXcoY2MpLHN3TXNnLHN3VGl0bGUsaVR5cGUsaUljb24pOworCXBSdW50aW1lLT5FbmRCbG9jaygpOworCQorCXJldHVybiBUUlVFOworfQorCisKK0ZYX0JPT0wgYXBwOjpiZWVwKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCWlmIChwYXJhbXMuc2l6ZSgpID09IDEpCisJeworCQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOworCQlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7CisJCUNQREZEb2NfRW52aXJvbm1lbnQgKiBwRW52ID0gcFJ1bnRpbWUtPkdldFJlYWRlckFwcCgpOworCQlwRW52LT5KU19hcHBCZWVwKChpbnQpcGFyYW1zWzBdKTsKKworCQlyZXR1cm4gVFJVRTsKKwl9CisJZWxzZQorCXsKKwkJc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQoKENKU19Db250ZXh0KiljYywgSURTX1NUUklOR19KU1BBUkFNRVJST1IpOworCQlyZXR1cm4gRkFMU0U7CisJfQorfQorCitGWF9CT09MIGFwcDo6ZmluZENvbXBvbmVudChPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBhcHA6OnBvcFVwTWVudUV4KE9CSl9NRVRIT0RfUEFSQU1TKQorewkKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wgYXBwOjpmcyhPQkpfUFJPUF9QQVJBTVMpCit7CisjaWZkZWYgRk9YSVRfQ0hST01FX0JVSUxECisJcmV0dXJuIEZBTFNFOworI2Vsc2UKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7CisJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOworCisJaWYgKHZwLklzR2V0dGluZygpKQorCXsKKwkJcmV0dXJuIFRSVUU7CisJfQorCWVsc2UKKwl7CisJCXJldHVybiBUUlVFOworCX0KKyNlbmRpZgorfQorCitGWF9CT09MIGFwcDo6c2V0SW50ZXJ2YWwoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJaWYgKHBhcmFtcy5zaXplKCkgPiAyIHx8IHBhcmFtcy5zaXplKCkgPT0gMCkgCisJeworCQlzRXJyb3IgPSBKU0dldFN0cmluZ0Zyb21JRCgoQ0pTX0NvbnRleHQqKWNjLCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7CQorCQlyZXR1cm4gRkFMU0U7CisJfQorCQorCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7CisJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCUNKU19SdW50aW1lKiBwUnVudGltZSA9IHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKTsKKwlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7CisKKwlDRlhfV2lkZVN0cmluZyBzY3JpcHQgPSBwYXJhbXMuc2l6ZSgpID4gMCA/ICAoRlhfTFBDV1NUUikocGFyYW1zWzBdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCkpIDogKEZYX0xQQ1dTVFIpTCIiOworCWlmIChzY3JpcHQuSXNFbXB0eSgpKSAKKwl7CisJCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKChDSlNfQ29udGV4dCopY2MsIElEU19TVFJJTkdfSlNBRk5VTUJFUl9LRVlTVFJPS0UpOworCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlGWF9EV09SRCBkd0ludGVydmFsID0gcGFyYW1zLnNpemUoKSA+IDEgPyAoaW50KXBhcmFtc1sxXSA6IDEwMDA7CisJCisJQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCA9IHBSdW50aW1lLT5HZXRSZWFkZXJBcHAoKTsKKwlBU1NFUlQocEFwcCk7CisJQ0pTX1RpbWVyKiBwVGltZXIgPSBuZXcgQ0pTX1RpbWVyKHRoaXMsIHBBcHApOworCW1fYVRpbWVyLkFkZChwVGltZXIpOworCisJcFRpbWVyLT5TZXRUeXBlKDApOworCXBUaW1lci0+U2V0UnVudGltZShwUnVudGltZSk7CisJcFRpbWVyLT5TZXRKU2NyaXB0KHNjcmlwdCk7CisJcFRpbWVyLT5TZXRUaW1lT3V0KDApOworLy8JcFRpbWVyLT5TZXRTdGFydFRpbWUoR2V0VGlja0NvdW50KCkpOworCXBUaW1lci0+U2V0SlNUaW1lcihkd0ludGVydmFsKTsKKwkKKwlKU0ZYT2JqZWN0IHBSZXRPYmogPSBKU19OZXdGeER5bmFtaWNPYmooKnBSdW50aW1lLCBwQ29udGV4dCwgSlNfR2V0T2JqRGVmbklEKCpwUnVudGltZSwgTCJUaW1lck9iaiIpKTsKKwkKKwlDSlNfVGltZXJPYmoqIHBKU19UaW1lck9iaiA9IChDSlNfVGltZXJPYmoqKUpTX0dldFByaXZhdGUocFJ1bnRpbWUtPkdldElzb2xhdGUoKSxwUmV0T2JqKTsKKwlBU1NFUlQocEpTX1RpbWVyT2JqICE9IE5VTEwpOworCQorCVRpbWVyT2JqKiBwVGltZXJPYmogPSAoVGltZXJPYmoqKXBKU19UaW1lck9iai0+R2V0RW1iZWRPYmplY3QoKTsKKwlBU1NFUlQocFRpbWVyT2JqICE9IE5VTEwpOworCQorCXBUaW1lck9iai0+U2V0VGltZXIocFRpbWVyKTsgCisJCisJdlJldCA9IHBSZXRPYmo7CisJCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgYXBwOjpzZXRUaW1lT3V0KE9CSl9NRVRIT0RfUEFSQU1TKQoreworCWlmIChwYXJhbXMuc2l6ZSgpID4gMiB8fCBwYXJhbXMuc2l6ZSgpID09IDApCisJeworCQlzRXJyb3IgPSBKU0dldFN0cmluZ0Zyb21JRCgoQ0pTX0NvbnRleHQqKWNjLCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7CQorCQlyZXR1cm4gRkFMU0U7CisJfQorCQorCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7CisJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCUNKU19SdW50aW1lKiBwUnVudGltZSA9IHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKTsKKwlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7CisJCisJQ0ZYX1dpZGVTdHJpbmcgc2NyaXB0ID0gcGFyYW1zLnNpemUoKSA+IDAgPyAgKEZYX0xQQ1dTVFIpKHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpKSA6IChGWF9MUENXU1RSKUwiIjsKKwlpZiAoc2NyaXB0LklzRW1wdHkoKSkgCisJeworCQlzRXJyb3IgPSBKU0dldFN0cmluZ0Zyb21JRCgoQ0pTX0NvbnRleHQqKWNjLCBJRFNfU1RSSU5HX0pTQUZOVU1CRVJfS0VZU1RST0tFKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCQorCUZYX0RXT1JEIGR3VGltZU91dCA9IHBhcmFtcy5zaXplKCkgPiAxID8gKGludClwYXJhbXNbMV0gOiAxMDAwOworCQorCUNQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAgPSBwUnVudGltZS0+R2V0UmVhZGVyQXBwKCk7CisJQVNTRVJUKHBBcHApOworCUNKU19UaW1lciogcFRpbWVyID0gbmV3IENKU19UaW1lcih0aGlzLCBwQXBwKTsKKwltX2FUaW1lci5BZGQocFRpbWVyKTsKKwkKKwlwVGltZXItPlNldFR5cGUoMSk7CisJcFRpbWVyLT5TZXRSdW50aW1lKHBSdW50aW1lKTsKKwlwVGltZXItPlNldEpTY3JpcHQoc2NyaXB0KTsKKwlwVGltZXItPlNldFRpbWVPdXQoZHdUaW1lT3V0KTsKKy8vCXBUaW1lci0+U2V0U3RhcnRUaW1lKEdldFRpY2tDb3VudCgpKTsKKy8vCXBUaW1lci0+U2V0SlNUaW1lcigxMDAwKTsKKwlwVGltZXItPlNldEpTVGltZXIoZHdUaW1lT3V0KTsKKwkKKwlKU0ZYT2JqZWN0IHBSZXRPYmogPSBKU19OZXdGeER5bmFtaWNPYmooKnBSdW50aW1lLCBwQ29udGV4dCwgSlNfR2V0T2JqRGVmbklEKCpwUnVudGltZSwgTCJUaW1lck9iaiIpKTsKKy8vCUFTU0VSVChwUmV0T2JqICE9IE5VTEwpOworCQorCUNKU19UaW1lck9iaiogcEpTX1RpbWVyT2JqID0gKENKU19UaW1lck9iaiopSlNfR2V0UHJpdmF0ZShwUnVudGltZS0+R2V0SXNvbGF0ZSgpLHBSZXRPYmopOworCUFTU0VSVChwSlNfVGltZXJPYmogIT0gTlVMTCk7CisJCisJVGltZXJPYmoqIHBUaW1lck9iaiA9IChUaW1lck9iaiopcEpTX1RpbWVyT2JqLT5HZXRFbWJlZE9iamVjdCgpOworCUFTU0VSVChwVGltZXJPYmogIT0gTlVMTCk7CisJCisJcFRpbWVyT2JqLT5TZXRUaW1lcihwVGltZXIpOyAKKwkKKwl2UmV0ID0gcFJldE9iajsKKwkKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBhcHA6OmNsZWFyVGltZU91dChPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7CisJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOworCQorCWlmIChwYXJhbXMuc2l6ZSgpICE9IDEpCisJeworCQlzRXJyb3IgPSBKU0dldFN0cmluZ0Zyb21JRCgoQ0pTX0NvbnRleHQqKWNjLCBJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7CQorCQlyZXR1cm4gRkFMU0U7CisJfQorCQorCWlmIChwYXJhbXNbMF0uR2V0VHlwZSgpID09IFZUX2Z4b2JqZWN0KQorCXsKKwkJSlNGWE9iamVjdCBwT2JqID0gKEpTRlhPYmplY3QpcGFyYW1zWzBdOworCQl7CisJCQlpZiAoSlNfR2V0T2JqRGVmbklEKHBPYmopID09IEpTX0dldE9iakRlZm5JRCgqcFJ1bnRpbWUsIEwiVGltZXJPYmoiKSkKKwkJCXsKKwkJCQlpZiAoQ0pTX09iamVjdCogcEpTT2JqID0gKENKU19PYmplY3QqKXBhcmFtc1swXSkKKwkJCQl7CisJCQkJCWlmIChUaW1lck9iaiogcFRpbWVyT2JqID0gKFRpbWVyT2JqKilwSlNPYmotPkdldEVtYmVkT2JqZWN0KCkpCisJCQkJCXsKKwkJCQkJCWlmIChDSlNfVGltZXIqIHBUaW1lciA9IHBUaW1lck9iai0+R2V0VGltZXIoKSkKKwkJCQkJCXsKKwkJCQkJCQlwVGltZXItPktpbGxKU1RpbWVyKCk7CisJCQkJCQkJCisJCQkJCQkJZm9yIChpbnQgaT0wLHN6PW1fYVRpbWVyLkdldFNpemUoKTsgaTxzejsgaSsrKQorCQkJCQkJCXsKKwkJCQkJCQkJaWYgKG1fYVRpbWVyW2ldID09IHBUaW1lcikKKwkJCQkJCQkJeworCQkJCQkJCQkJbV9hVGltZXIuUmVtb3ZlQXQoaSk7CisJCQkJCQkJCQlicmVhazsKKwkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCQkKKwkJCQkJCQlkZWxldGUgcFRpbWVyOworCQkJCQkJCXBUaW1lck9iai0+U2V0VGltZXIoTlVMTCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgYXBwOjpjbGVhckludGVydmFsKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7CisJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCUNKU19SdW50aW1lKiBwUnVudGltZSA9IHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKTsKKwlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7CisKKwlpZiAocGFyYW1zLnNpemUoKSAhPSAxKQorCXsKKwkJc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQoKENKU19Db250ZXh0KiljYywgSURTX1NUUklOR19KU1BBUkFNRVJST1IpOwkKKwkJcmV0dXJuIEZBTFNFOworCX0KKwkKKwlpZiAocGFyYW1zWzBdLkdldFR5cGUoKSA9PSBWVF9meG9iamVjdCkKKwl7CisJCUpTRlhPYmplY3QgcE9iaiA9IChKU0ZYT2JqZWN0KXBhcmFtc1swXTsKKwkJeworCQkJaWYgKEpTX0dldE9iakRlZm5JRChwT2JqKSA9PSBKU19HZXRPYmpEZWZuSUQoKnBSdW50aW1lLCBMIlRpbWVyT2JqIikpCisJCQl7CisJCQkJaWYgKENKU19PYmplY3QqIHBKU09iaiA9IChDSlNfT2JqZWN0KilwYXJhbXNbMF0pCisJCQkJeworCQkJCQlpZiAoVGltZXJPYmoqIHBUaW1lck9iaiA9IChUaW1lck9iaiopcEpTT2JqLT5HZXRFbWJlZE9iamVjdCgpKQorCQkJCQl7CisJCQkJCQlpZiAoQ0pTX1RpbWVyKiBwVGltZXIgPSBwVGltZXJPYmotPkdldFRpbWVyKCkpCisJCQkJCQl7CisJCQkJCQkJcFRpbWVyLT5LaWxsSlNUaW1lcigpOworCQkJCQkJCQorCQkJCQkJCWZvciAoaW50IGk9MCxzej1tX2FUaW1lci5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwkJCQkJCQl7CisJCQkJCQkJCWlmIChtX2FUaW1lcltpXSA9PSBwVGltZXIpCisJCQkJCQkJCXsKKwkJCQkJCQkJCW1fYVRpbWVyLlJlbW92ZUF0KGkpOworCQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJCisJCQkJCQkJZGVsZXRlIHBUaW1lcjsKKwkJCQkJCQlwVGltZXJPYmotPlNldFRpbWVyKE5VTEwpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCQorCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIGFwcDo6ZXhlY01lbnVJdGVtKE9CSl9NRVRIT0RfUEFSQU1TKQorewkKKwlyZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgYXBwOjpUaW1lclByb2MoQ0pTX1RpbWVyKiBwVGltZXIpCit7CisJQVNTRVJUKHBUaW1lciAhPSBOVUxMKTsKKworCXN3aXRjaCAocFRpbWVyLT5HZXRUeXBlKCkpCisJeworCWNhc2UgMDogLy9pbnRlcnZhbAorCQlSdW5Kc1NjcmlwdChwVGltZXItPkdldFJ1bnRpbWUoKSwgcFRpbWVyLT5HZXRKU2NyaXB0KCkpOworCQlicmVhazsKKwljYXNlIDE6CisJCWlmIChwVGltZXItPkdldFRpbWVPdXQoKSA+IDApCisJCXsKKwkJCVJ1bkpzU2NyaXB0KHBUaW1lci0+R2V0UnVudGltZSgpLCBwVGltZXItPkdldEpTY3JpcHQoKSk7CisJCQlwVGltZXItPktpbGxKU1RpbWVyKCk7CisJCX0KKwkJYnJlYWs7CisJfQorCQorfQorCit2b2lkIGFwcDo6UnVuSnNTY3JpcHQoQ0pTX1J1bnRpbWUqIHBSdW50aW1lLGNvbnN0IENGWF9XaWRlU3RyaW5nJiB3c1NjcmlwdCkKK3sKKwlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7CisKKwlpZiAoIXBSdW50aW1lLT5Jc0Jsb2NraW5nKCkpCisJeworCQlJRlhKU19Db250ZXh0KiBwQ29udGV4dCA9IHBSdW50aW1lLT5OZXdDb250ZXh0KCk7CisJCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwkJcENvbnRleHQtPk9uRXh0ZXJuYWxfRXhlYygpOworCQlDRlhfV2lkZVN0cmluZyB3dEluZm87CisJCXBDb250ZXh0LT5SdW5TY3JpcHQod3NTY3JpcHQsd3RJbmZvKTsKKwkJcFJ1bnRpbWUtPlJlbGVhc2VDb250ZXh0KHBDb250ZXh0KTsKKwl9Cit9CisKK0ZYX0JPT0wgYXBwOjpnb0JhY2soT0JKX01FVEhPRF9QQVJBTVMpCit7CisKKworCQorCQorCQorCQorCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIGFwcDo6Z29Gb3J3YXJkKE9CSl9NRVRIT0RfUEFSQU1TKQorewkKKworCisKKworCisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBhcHA6Om1haWxNc2coT0JKX01FVEhPRF9QQVJBTVMpCit7CisJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0KiljYzsKKwlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7CisKKwl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IEdldElzb2xhdGUoY2MpOworCisJRlhfQk9PTCBiVUkgPSBUUlVFOworCUNGWF9XaWRlU3RyaW5nIGNUbyA9IEwiIjsKKwlDRlhfV2lkZVN0cmluZyBjQ2MgPSBMIiI7CisJQ0ZYX1dpZGVTdHJpbmcgY0JjYyA9IEwiIjsKKwlDRlhfV2lkZVN0cmluZyBjU3ViamVjdCA9IEwiIjsKKwlDRlhfV2lkZVN0cmluZyBjTXNnID0gTCIiOworCWlmKHBhcmFtcy5zaXplKCkgPCAyKQorCQlyZXR1cm4gRkFMU0U7CisKKwliVUkgPSBwYXJhbXMuc2l6ZSgpPj0xPyhpbnQpcGFyYW1zWzBdOlRSVUU7CisJY1RvID0gcGFyYW1zLnNpemUoKT49Mj8oY29uc3Qgd2NoYXJfdCopKEZYX0xQQ1dTVFIpcGFyYW1zWzFdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk6TCIiOworCWNDYyA9IHBhcmFtcy5zaXplKCk+PTM/KGNvbnN0IHdjaGFyX3QqKShGWF9MUENXU1RSKXBhcmFtc1syXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOkwiIjsKKwljQmNjID0gcGFyYW1zLnNpemUoKT49ND8oY29uc3Qgd2NoYXJfdCopKEZYX0xQQ1dTVFIpcGFyYW1zWzNdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk6TCIiOworCWNTdWJqZWN0ID0gcGFyYW1zLnNpemUoKT49NT8oY29uc3Qgd2NoYXJfdCopKEZYX0xQQ1dTVFIpcGFyYW1zWzRdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk6TCIiOworCWNNc2cgPSBwYXJhbXMuc2l6ZSgpPj02Pyhjb25zdCB3Y2hhcl90KikoRlhfTFBDV1NUUilwYXJhbXNbNV0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTpMIiI7CQkKKworCisJaWYgKHBhcmFtc1swXS5HZXRUeXBlKCkgPT0gVlRfb2JqZWN0KQorCXsKKwkJSlNPYmplY3QgcE9iaiA9IChKU09iamVjdClwYXJhbXNbMF07CisKKwkJdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLCBMImJVSSIpOworCQkJYlVJID0gKGludClDSlNfVmFsdWUoaXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSk7CisKKwkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLCBwT2JqLCBMImNUbyIpOworCQkJY1RvID0gQ0pTX1ZhbHVlKGlzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7CisKKwkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwiY0NjIik7CisJCQljQ2MgPSBDSlNfVmFsdWUoaXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSkub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsKKworCQlwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaiwgTCJjQmNjIik7CisJCQljQmNjID0gQ0pTX1ZhbHVlKGlzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7CisKKwkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwiY1N1YmplY3QiKTsKKwkJCWNTdWJqZWN0ID0gQ0pTX1ZhbHVlKGlzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7CisKKwkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosIEwiY01zZyIpOworCQkJY01zZyA9IENKU19WYWx1ZShpc29sYXRlLHBWYWx1ZSxHRVRfVkFMVUVfVFlQRShwVmFsdWUpKS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOworCX0KKwkKKwkKKworCUNKU19SdW50aW1lKiBwUnVudGltZSA9IHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKTsKKwlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7CisKKwlDUERGRG9jX0Vudmlyb25tZW50KiBwQXBwID0gcENvbnRleHQtPkdldFJlYWRlckFwcCgpOworCUFTU0VSVChwQXBwICE9IE5VTEwpOworCisJcFJ1bnRpbWUtPkJlZ2luQmxvY2soKTsKKwlwQXBwLT5KU19kb2NtYWlsRm9ybShOVUxMLCAwLCBiVUksIChGWF9MUENXU1RSKWNUbywgKEZYX0xQQ1dTVFIpY1N1YmplY3QsIChGWF9MUENXU1RSKWNDYywgKEZYX0xQQ1dTVFIpY0JjYywgKEZYX0xQQ1dTVFIpY01zZyk7CisJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwlwUnVudGltZS0+RW5kQmxvY2soKTsKKworCS8vcmV0dXJuIGJSZXQ7CisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIGFwcDo6bGF1bmNoVVJMKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCWlmIChJc1NhZmVNb2RlKGNjKSkgcmV0dXJuIFRSVUU7CisKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKworCQorCisKKwlDRlhfV2lkZVN0cmluZyBzd1VSTCA9IHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOworCisJQ0pTX1J1bnRpbWUqIHBSdW50aW1lID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpOworCUFTU0VSVChwUnVudGltZSAhPSBOVUxMKTsKKworCXBSdW50aW1lLT5CZWdpbkJsb2NrKCk7CisvLwlGWF9CT09MIGJSZXQgPSBwQXBwLT5PcGVuVVJMKHN3VVJMKTsKKwlwUnVudGltZS0+RW5kQmxvY2soKTsKKworLy8JcmV0dXJuIGJSZXQ7CisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIGFwcDo6cnVudGltZUhpZ2hsaWdodChPQkpfUFJPUF9QQVJBTVMpCit7CisJaWYgKHZwLklzU2V0dGluZygpKQorCXsKKwkJdnA+Pm1fYlJ1bnRpbWVIaWdoTGlnaHQ7CisJfQorCWVsc2UKKwl7CisJCXZwPDxtX2JSdW50aW1lSGlnaExpZ2h0OworCX0KKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIGFwcDo6ZnVsbHNjcmVlbihPQkpfUFJPUF9QQVJBTVMpCit7CisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIGFwcDo6cG9wVXBNZW51KE9CSl9NRVRIT0RfUEFSQU1TKQoreworCXJldHVybiBGQUxTRTsKK30KKworCitGWF9CT09MIGFwcDo6YnJvd3NlRm9yRG9jKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCS8vVGhpcyBtZXRob2QgbWF5IHRyaWdnZXIgYSAiZmlsZSBzYXZlIiBkaWFsb2csd2hpbGUgZW5hYmxlIHVzZXIgdG8gc2F2ZSBjb250ZW50cyBvZiB0aGUgZG9jdW1lbnQuCisJLy9TdWNoIGFjdGlvbiBpcyBjb25zaWRlcmVkIHRvIGJlIHVuc2FmZS4KKwlpZiAoSXNTYWZlTW9kZShjYykpIHJldHVybiBUUlVFOworCisJdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBHZXRJc29sYXRlKGNjKTsKKworCWJvb2wgYlNhdmUgPSBmYWxzZTsKKwlDRlhfQnl0ZVN0cmluZyBjRmlsZW5hbWVJbml0ID0gQ0ZYX0J5dGVTdHJpbmcoKTsKKwlDRlhfQnl0ZVN0cmluZyBjRlNJbml0ID0gQ0ZYX0J5dGVTdHJpbmcoKTsKKworCWlmKHBhcmFtcy5zaXplKCk+MCAmJiAocGFyYW1zWzBdLkdldFR5cGUoKSA9PSBWVF9vYmplY3QpKQorCXsKKwkJSlNPYmplY3QgcE9iaiA9IChKU09iamVjdCApcGFyYW1zWzBdOworCisgCQl2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosTCJiU2F2ZSIpOworIAkJCWJTYXZlID0gKGJvb2wpQ0pTX1ZhbHVlKGlzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpOworIAkJCisJCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSwgcE9iaixMImNGaWxlbmFtZUluaXQiKTsKKwkJeworCQkJQ0pTX1ZhbHVlIHQgPSBDSlNfVmFsdWUoaXNvbGF0ZSwgcFZhbHVlLCBHRVRfVkFMVUVfVFlQRShwVmFsdWUpKTsKKyAJCQljRmlsZW5hbWVJbml0ID0gdC5vcGVyYXRvciBDRlhfQnl0ZVN0cmluZygpOworCQl9CisgCQkKKwkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosTCJjRlNJbml0Iik7CisJCXsKKwkJCUNKU19WYWx1ZSB0ID0gQ0pTX1ZhbHVlKGlzb2xhdGUsIHBWYWx1ZSwgR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSk7CisJCQljRlNJbml0ID0gdC5vcGVyYXRvciBDRlhfQnl0ZVN0cmluZygpOworCQl9CisJfQorCWVsc2UKKwl7CisJCWlmKHBhcmFtcy5zaXplKCkgPj0gMSkKKwkJeworCQkJYlNhdmUgPSAoYm9vbClwYXJhbXNbMF07CisJCX0KKwkJaWYocGFyYW1zLnNpemUoKSA+PSAyKQorCQl7CisJCQlDSlNfVmFsdWUgdCA9IHBhcmFtc1sxXTsKKwkJCWNGaWxlbmFtZUluaXQgPSB0Lm9wZXJhdG9yIENGWF9CeXRlU3RyaW5nKCk7CisJCX0KKwkJaWYocGFyYW1zLnNpemUoKSA+PSAzKQorCQl7CisJCQlDSlNfVmFsdWUgdCA9IHBhcmFtc1syXTsKKwkJCWNGU0luaXQgPSB0Lm9wZXJhdG9yIENGWF9CeXRlU3RyaW5nKCk7CisJCX0KKwl9CisJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0ICopY2M7CisJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCQorCUNQREZEb2NfRW52aXJvbm1lbnQqIHBBcHAgPSBwQ29udGV4dC0+R2V0UmVhZGVyQXBwKCk7CisJQVNTRVJUKHBBcHAgIT0gTlVMTCk7CisKKwlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7CisJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOworCisJQ0ZYX1dpZGVTdHJpbmcgd3NGaWxlTmFtZUluaXQgPSBDRlhfV2lkZVN0cmluZzo6RnJvbUxvY2FsKGNGaWxlbmFtZUluaXQpOworCUNGWF9XaWRlU3RyaW5nIHdzRlNJbml0ID0gQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChjRlNJbml0KTsKKwlDRlhfV2lkZVN0cmluZyB3c0ZpbGVQYXRoID0gcEFwcC0+SlNfYXBwYnJvd3NlRm9yRG9jKGJTYXZlLCB3c0ZpbGVOYW1lSW5pdCk7CisJaWYod3NGaWxlUGF0aC5Jc0VtcHR5KCkpCisJCXJldHVybiBGQUxTRTsKKworCUpTRlhPYmplY3QgcFJldE9iaiA9IEpTX05ld0Z4RHluYW1pY09iaigqcFJ1bnRpbWUsIHBDb250ZXh0LCAtMSk7CisKKwlKU19QdXRPYmplY3RTdHJpbmcoaXNvbGF0ZSxwUmV0T2JqLCBMImNQYXRoIiwgU3lzUGF0aFRvUERGUGF0aCh3c0ZpbGVQYXRoKSk7CQorCUpTX1B1dE9iamVjdFN0cmluZyhpc29sYXRlLHBSZXRPYmosIEwiY1VSTCIsIFN5c1BhdGhUb1BERlBhdGgod3NGaWxlUGF0aCkpOworCisJaWYgKCFjRlNJbml0LklzRW1wdHkoKSkKKwl7CisJCUpTX1B1dE9iamVjdFN0cmluZyhpc29sYXRlLHBSZXRPYmosIEwiY0ZTIiwgQ0ZYX1dpZGVTdHJpbmc6OkZyb21Mb2NhbChjRlNJbml0LkdldEJ1ZmZlcihjRlNJbml0LkdldExlbmd0aCgpKSkpOworCX0KKwllbHNlCisJeworCQlKU19QdXRPYmplY3RTdHJpbmcoaXNvbGF0ZSxwUmV0T2JqLCBMImNGUyIsIENGWF9XaWRlU3RyaW5nOjpGcm9tTG9jYWwoIkRPUyIpKTsKKwl9CisJCisJdlJldCA9ICBwUmV0T2JqOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0NGWF9XaWRlU3RyaW5nIGFwcDo6U3lzUGF0aFRvUERGUGF0aChjb25zdCBDRlhfV2lkZVN0cmluZyYgc09sZFBhdGgpCit7CisJQ0ZYX1dpZGVTdHJpbmcgc1JldCA9IEwiLyI7CisJCisJZm9yIChpbnQgaT0wLHN6PXNPbGRQYXRoLkdldExlbmd0aCgpOyBpPHN6OyBpKyspCisJeworCQl3Y2hhcl90IGMgPSBzT2xkUGF0aC5HZXRBdChpKTsKKwkJaWYgKGMgPT0gTCc6JykKKwkJeworCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKGMgPT0gTCdcXCcpCisJCQl7CisJCQkJc1JldCArPSBMIi8iOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXNSZXQgKz0gYzsKKwkJCX0KKwkJfQorCX0KKwkKKwlyZXR1cm4gc1JldDsKK30KKworQ0ZYX1dpZGVTdHJpbmcgYXBwOjpQREZQYXRoVG9TeXNQYXRoKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzT2xkUGF0aCkKK3sKKwkvL3N0ckxQYXRoID0gIkQ6XHRlbXBvcmF5LmZkZiI7CisJQ0ZYX1dpZGVTdHJpbmcgc3RyT1BhdGggPSBzT2xkUGF0aDsKKwlzdHJPUGF0aC5UcmltTGVmdCgpOworCXN0ck9QYXRoLlRyaW1SaWdodCgpOworCQorCWlmIChzdHJPUGF0aC5HZXRBdCgwKSA9PSBMJy8nICYmIHN0ck9QYXRoLkdldEF0KDIpID09IEwnLycpCisJeworCQl3Y2hhcl90IGNfRHJpdmUgPSBzdHJPUGF0aC5HZXRBdCgxKTsKKwkJaWYgKChjX0RyaXZlID49IEwnYScgJiYgY19Ecml2ZSA8PSBMJ3onICl8fCggY19Ecml2ZSA+PSBMJ0EnICYmIGNfRHJpdmUgPD0gTCdaJykpCisJCXsKKwkJCXN0ck9QYXRoLlJlcGxhY2UoKEZYX0xQQ1dTVFIpTCIvIiwoRlhfTFBDV1NUUilMIlxcIik7CisJCQkvL3N0ck9QYXRoLlNldEF0KDAsJycpOworCQkJc3RyT1BhdGguSW5zZXJ0KDIsJzonKTsKKwkJCXN0ck9QYXRoLkRlbGV0ZSgwKTsKKwkJfQorCX0KKwkKKwlyZXR1cm4gc3RyT1BhdGg7Cit9CisKK0NGWF9XaWRlU3RyaW5nIGFwcDo6UmVsYXRpdmVQYXRoVG9TeXNQYXRoKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzT2xkUGF0aCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNGaWxlUGF0aCkKK3sKKy8vCWlmICghUGF0aElzUmVsYXRpdmUoc09sZFBhdGgpKSByZXR1cm4gc09sZFBhdGg7CisJCisJaW50IG5TcGxpdCA9IDA7CisJZm9yIChpbnQgaT1zRmlsZVBhdGguR2V0TGVuZ3RoKCktMTsgaT49MDsgaS0tKQorCXsKKwkJaWYgKHNGaWxlUGF0aFtpXSA9PSAnXFwnIHx8IHNGaWxlUGF0aFtpXSA9PSAnLycpCisJCXsKKwkJCW5TcGxpdCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKwkKKwlyZXR1cm4gc0ZpbGVQYXRoLkxlZnQoblNwbGl0KzEpICsgc09sZFBhdGg7Cit9CisKK0ZYX0JPT0wgYXBwOjpuZXdEb2MoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIGFwcDo6b3BlbkRvYyhPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wgYXBwOjpyZXNwb25zZShPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlDRlhfV2lkZVN0cmluZyBzd1F1ZXN0aW9uID0gTCIiOworCUNGWF9XaWRlU3RyaW5nIHN3TGFiZWwgPSBMIiI7CisjaWZuZGVmIEZPWElUX0NIUk9NRV9CVUlMRAorCUNGWF9XaWRlU3RyaW5nIHN3VGl0bGUgPSBMIkZveGl0IjsKKyNlbHNlCisJQ0ZYX1dpZGVTdHJpbmcgc3dUaXRsZSA9IEwiUERGIjsKKyNlbmRpZgorCUNGWF9XaWRlU3RyaW5nIHN3RGVmYXVsdCA9IEwiIjsKKwlDRlhfV2lkZVN0cmluZyBzd1Jlc3BvbnNlID0gTCIiOworCWJvb2wgYlBhc3NXb3JkID0gZmFsc2U7CisJCisJdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBHZXRJc29sYXRlKGNjKTsKKwkKKwlpbnQgaUxlbmd0aCA9IHBhcmFtcy5zaXplKCk7CQorCWlmIChpTGVuZ3RoID4gMCAmJiBwYXJhbXNbMF0uR2V0VHlwZSgpID09IFZUX29iamVjdCkKKwl7CisJCQorCQlKU09iamVjdCBwT2JqID0gKEpTT2JqZWN0IClwYXJhbXNbMF07CisJCXY4OjpIYW5kbGU8djg6OlZhbHVlPiBwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaixMImNRdWVzdGlvbiIpOworCQkJc3dRdWVzdGlvbiA9IENKU19WYWx1ZShpc29sYXRlLHBWYWx1ZSxHRVRfVkFMVUVfVFlQRShwVmFsdWUpKS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOworCisJCXBWYWx1ZSA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSxwT2JqLEwiY1RpdGxlIik7CisJCQlzd1RpdGxlID0gQ0pTX1ZhbHVlKGlzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7CisKKwkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosTCJjRGVmYXVsdCIpOworCQkJc3dEZWZhdWx0ID0gQ0pTX1ZhbHVlKGlzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCk7CisKKwkJcFZhbHVlID0gSlNfR2V0T2JqZWN0RWxlbWVudChpc29sYXRlLHBPYmosTCJjTGFiZWwiKTsKKwkJCXN3TGFiZWwgPSBDSlNfVmFsdWUoaXNvbGF0ZSxwVmFsdWUsR0VUX1ZBTFVFX1RZUEUocFZhbHVlKSkub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsKKworCQlwVmFsdWUgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUscE9iaixMImJQYXNzd29yZCIpOworCQkJYlBhc3NXb3JkID0gKGJvb2wpQ0pTX1ZhbHVlKGlzb2xhdGUscFZhbHVlLEdFVF9WQUxVRV9UWVBFKHBWYWx1ZSkpOworCX0KKwllbHNlCisJeworCQlzd2l0Y2goaUxlbmd0aCkKKwkJeworCQljYXNlIDE6CisJCQlzd1F1ZXN0aW9uID0gcGFyYW1zWzBdOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXN3UXVlc3Rpb24gPSBwYXJhbXNbMF07CisJCQlzd1RpdGxlID0gcGFyYW1zWzFdOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXN3UXVlc3Rpb24gPSBwYXJhbXNbMF07CisJCQlzd1RpdGxlID0gcGFyYW1zWzFdOworCQkJc3dEZWZhdWx0ID0gcGFyYW1zWzJdOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCXN3UXVlc3Rpb24gPSBwYXJhbXNbMF07CisJCQlzd1RpdGxlID0gcGFyYW1zWzFdOworCQkJc3dEZWZhdWx0ID0gcGFyYW1zWzJdOworCQkJYlBhc3NXb3JkID0gcGFyYW1zWzNdOworCQkJYnJlYWs7CisJCWNhc2UgNToKKwkJCXN3UXVlc3Rpb24gPSBwYXJhbXNbMF07CisJCQlzd1RpdGxlID0gcGFyYW1zWzFdOworCQkJc3dEZWZhdWx0ID0gcGFyYW1zWzJdOworCQkJYlBhc3NXb3JkID0gcGFyYW1zWzNdOworCQkJc3dMYWJlbCA9IHBhcmFtc1s0XTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQgKiljYzsKKyAJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCisJQ1BERkRvY19FbnZpcm9ubWVudCogcEFwcCA9IHBDb250ZXh0LT5HZXRSZWFkZXJBcHAoKTsKKyAJQVNTRVJUKHBBcHAgIT0gTlVMTCk7CisJaW50IG5MZW5ndGggPSAyMDQ4OworCWNoYXIqIHBCdWZmID0gbmV3IGNoYXJbbkxlbmd0aF07CisJbkxlbmd0aCA9IHBBcHAtPkpTX2FwcFJlc3BvbnNlKHN3UXVlc3Rpb24sIHN3VGl0bGUsIHN3RGVmYXVsdCwgc3dMYWJlbCwgYlBhc3NXb3JkLCBwQnVmZiwgbkxlbmd0aCk7CisJaWYobkxlbmd0aDw9MCkKKwl7CisJCXZSZXQuU2V0TnVsbCgpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCWVsc2UKKwl7CisJCW5MZW5ndGggPSBuTGVuZ3RoPjIwNDY/MjA0NjpuTGVuZ3RoOworICAgIHBCdWZmW25MZW5ndGhdID0gMDsKKyAgICBwQnVmZltuTGVuZ3RoKzFdID0gMDsKKwkJc3dSZXNwb25zZSA9IENGWF9XaWRlU3RyaW5nOjpGcm9tVVRGMTZMRSgodW5zaWduZWQgc2hvcnQqKXBCdWZmLCBuTGVuZ3RoKTsKKwkJdlJldCA9IHN3UmVzcG9uc2U7CisJfQorCWRlbGV0ZVtdIHBCdWZmOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgYXBwOjptZWRpYShPQkpfUFJPUF9QQVJBTVMpCit7CisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIGFwcDo6ZXhlY0RpYWxvZyhPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlyZXR1cm4gVFJVRTsKK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9jb2xvci5jcHAgYi9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L2NvbG9yLmNwcAppbmRleCBkZTVhNTNmLi4zODQxNzA2IDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L2NvbG9yLmNwcAorKysgYi9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L2NvbG9yLmNwcApAQCAtMSwyNTMgKzEsMjUzIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0phdmFTY3JpcHQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0lKYXZhU2NyaXB0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19EZWZpbmUuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX09iamVjdC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfVmFsdWUuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L2NvbG9yLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19FdmVudEhhbmRsZXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0NvbnRleHQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1J1bnRpbWUuaCINCi0NCi1zdGF0aWMgdjg6Oklzb2xhdGUqIEdldElzb2xhdGUoSUZYSlNfQ29udGV4dCogY2MpDQotew0KLQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQgKiljYzsNCi0JQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOw0KLQ0KLQlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7DQotCUFTU0VSVChwUnVudGltZSAhPSBOVUxMKTsNCi0NCi0JcmV0dXJuIHBSdW50aW1lLT5HZXRJc29sYXRlKCk7DQotfQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNvbG9yIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQkVHSU5fSlNfU1RBVElDX0NPTlNUKENKU19Db2xvcikNCi1FTkRfSlNfU1RBVElDX0NPTlNUKCkNCi0NCi1CRUdJTl9KU19TVEFUSUNfUFJPUChDSlNfQ29sb3IpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGJsYWNrKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShibHVlKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShjeWFuKQkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkoZGtHcmF5KQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShncmF5KQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShncmVlbikNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkobHRHcmF5KQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShtYWdlbnRhKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShyZWQpCQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWSh0cmFuc3BhcmVudCkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkod2hpdGUpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHllbGxvdykNCi1FTkRfSlNfU1RBVElDX1BST1AoKQ0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19NRVRIT0QoQ0pTX0NvbG9yKQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGNvbnZlcnQsIDIpDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZXF1YWwsIDIpDQotRU5EX0pTX1NUQVRJQ19NRVRIT0QoKQ0KLQ0KLUlNUExFTUVOVF9KU19DTEFTUyhDSlNfQ29sb3IsY29sb3IpDQotDQotY29sb3I6OmNvbG9yKENKU19PYmplY3QqIHBKU09iamVjdCk6IENKU19FbWJlZE9iaihwSlNPYmplY3QpDQotew0KLQltX2NyVHJhbnNwYXJlbnQgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9UUkFOU1BBUkVOVCk7DQotCW1fY3JCbGFjayA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksIDApOw0KLQltX2NyV2hpdGUgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLCAxKTsNCi0JbV9jclJlZCA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX1JHQiwgMSwgMCAsMCk7DQotCW1fY3JHcmVlbiA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX1JHQiwgMCwgMSAsMCk7DQotCW1fY3JCbHVlID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfUkdCLCAwLCAwICwxKTsNCi0JbV9jckN5YW4gPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9DTVlLLCAxLCAwICwwLCAwKTsNCi0JbV9jck1hZ2VudGEgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9DTVlLLCAwLCAxICwwLCAwKTsNCi0JbV9jclllbGxvdyA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0NNWUssIDAsIDAgLDEsIDApOw0KLQltX2NyREtHcmF5ID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwgMC4yNSk7DQotCW1fY3JHcmF5ID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwgMC41KTsNCi0JbV9jckxUR3JheSA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksIDAuNzUpOw0KLX0NCi0NCi1jb2xvcjo6fmNvbG9yKHZvaWQpDQotew0KLX0NCi0NCi12b2lkIGNvbG9yOjpDb252ZXJ0UFdMQ29sb3JUb0FycmF5KGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yLCBDSlNfQXJyYXkmIGFycmF5KQ0KLXsNCi0Jc3dpdGNoIChjb2xvci5uQ29sb3JUeXBlKQ0KLQl7DQotCWNhc2UgQ09MT1JUWVBFX1RSQU5TUEFSRU5UOg0KLQkJYXJyYXkuU2V0RWxlbWVudCgwLCBDSlNfVmFsdWUoYXJyYXkuR2V0SXNvbGF0ZSgpLCAiVCIpKTsNCi0JCWJyZWFrOw0KLQljYXNlIENPTE9SVFlQRV9HUkFZOg0KLQkJYXJyYXkuU2V0RWxlbWVudCgwLCBDSlNfVmFsdWUoYXJyYXkuR2V0SXNvbGF0ZSgpLCJHIikpOw0KLQkJYXJyYXkuU2V0RWxlbWVudCgxLCBDSlNfVmFsdWUoYXJyYXkuR2V0SXNvbGF0ZSgpLGNvbG9yLmZDb2xvcjEpKTsNCi0JCWJyZWFrOw0KLQljYXNlIENPTE9SVFlQRV9SR0I6DQotCQlhcnJheS5TZXRFbGVtZW50KDAsIENKU19WYWx1ZShhcnJheS5HZXRJc29sYXRlKCksIlJHQiIpKTsNCi0JCWFycmF5LlNldEVsZW1lbnQoMSwgQ0pTX1ZhbHVlKGFycmF5LkdldElzb2xhdGUoKSxjb2xvci5mQ29sb3IxKSk7DQotCQlhcnJheS5TZXRFbGVtZW50KDIsIENKU19WYWx1ZShhcnJheS5HZXRJc29sYXRlKCksY29sb3IuZkNvbG9yMikpOw0KLQkJYXJyYXkuU2V0RWxlbWVudCgzLCBDSlNfVmFsdWUoYXJyYXkuR2V0SXNvbGF0ZSgpLGNvbG9yLmZDb2xvcjMpKTsNCi0JCWJyZWFrOw0KLQljYXNlIENPTE9SVFlQRV9DTVlLOg0KLQkJYXJyYXkuU2V0RWxlbWVudCgwLCBDSlNfVmFsdWUoYXJyYXkuR2V0SXNvbGF0ZSgpLCJDTVlLIikpOw0KLQkJYXJyYXkuU2V0RWxlbWVudCgxLCBDSlNfVmFsdWUoYXJyYXkuR2V0SXNvbGF0ZSgpLGNvbG9yLmZDb2xvcjEpKTsNCi0JCWFycmF5LlNldEVsZW1lbnQoMiwgQ0pTX1ZhbHVlKGFycmF5LkdldElzb2xhdGUoKSxjb2xvci5mQ29sb3IyKSk7DQotCQlhcnJheS5TZXRFbGVtZW50KDMsIENKU19WYWx1ZShhcnJheS5HZXRJc29sYXRlKCksY29sb3IuZkNvbG9yMykpOw0KLQkJYXJyYXkuU2V0RWxlbWVudCg0LCBDSlNfVmFsdWUoYXJyYXkuR2V0SXNvbGF0ZSgpLGNvbG9yLmZDb2xvcjQpKTsNCi0JCWJyZWFrOw0KLQl9DQotfQ0KLQ0KLXZvaWQgY29sb3I6OkNvbnZlcnRBcnJheVRvUFdMQ29sb3IoQ0pTX0FycmF5JiBhcnJheSwgQ1BXTF9Db2xvciYgY29sb3IpDQotew0KLQlpbnQgbkFycmF5TGVuID0gYXJyYXkuR2V0TGVuZ3RoKCk7DQotCWlmIChuQXJyYXlMZW4gPCAxKSByZXR1cm47DQotDQotCUNKU19WYWx1ZSB2YWx1ZShhcnJheS5HZXRJc29sYXRlKCkpOw0KLQlDRlhfQnl0ZVN0cmluZyBzU3BhY2U7DQotCWFycmF5LkdldEVsZW1lbnQoMCwgdmFsdWUpOw0KLQlzU3BhY2UgPSB2YWx1ZTsNCi0NCi0JZG91YmxlIGQxID0gMDsNCi0JZG91YmxlIGQyID0gMDsNCi0JZG91YmxlIGQzID0gMDsNCi0JZG91YmxlIGQ0ID0gMDsNCi0NCi0JaWYgKG5BcnJheUxlbiA+IDEpDQotCXsNCi0JCWFycmF5LkdldEVsZW1lbnQoMSwgdmFsdWUpOw0KLQkJZDEgPSB2YWx1ZTsNCi0JfQ0KLQ0KLQlpZiAobkFycmF5TGVuID4gMikNCi0Jew0KLQkJYXJyYXkuR2V0RWxlbWVudCgyLCB2YWx1ZSk7DQotCQlkMiA9IHZhbHVlOw0KLQl9DQotDQotCWlmIChuQXJyYXlMZW4gPiAzKQ0KLQl7DQotCQlhcnJheS5HZXRFbGVtZW50KDMsIHZhbHVlKTsNCi0JCWQzID0gdmFsdWU7DQotCX0NCi0NCi0JaWYgKG5BcnJheUxlbiA+IDQpDQotCXsNCi0JCWFycmF5LkdldEVsZW1lbnQoNCwgdmFsdWUpOw0KLQkJZDQgPSB2YWx1ZTsNCi0JfQ0KLQ0KLQlpZiAoc1NwYWNlID09ICJUIikNCi0Jew0KLQkJY29sb3IgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9UUkFOU1BBUkVOVCk7DQotCX0NCi0JZWxzZSBpZiAoc1NwYWNlID09ICJHIikNCi0Jew0KLQkJY29sb3IgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLCAoRlhfRkxPQVQpZDEpOw0KLQl9DQotCWVsc2UgaWYgKHNTcGFjZSA9PSAiUkdCIikNCi0Jew0KLQkJY29sb3IgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9SR0IsIChGWF9GTE9BVClkMSwgKEZYX0ZMT0FUKWQyLCAoRlhfRkxPQVQpZDMpOw0KLQl9DQotCWVsc2UgaWYgKHNTcGFjZSA9PSAiQ01ZSyIpDQotCXsNCi0JCWNvbG9yID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfQ01ZSywgKEZYX0ZMT0FUKWQxLCAoRlhfRkxPQVQpZDIsIChGWF9GTE9BVClkMywgKEZYX0ZMT0FUKWQ0KTsNCi0JfQ0KLX0NCi0NCi0jZGVmaW5lIEpTX0lNUExFTUVOVF9DT0xPUlBST1AocHJvcCwgdmFyKVwNCi1GWF9CT09MIGNvbG9yOjpwcm9wKE9CSl9QUk9QX1BBUkFNUylcDQote1wNCi0JQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0KiljYztcDQotCXY4OjpJc29sYXRlKiBpc29sYXRlID0gcENvbnRleHQtPkdldEpTUnVudGltZSgpLT5HZXRJc29sYXRlKCk7XA0KLQlpZiAodnAuSXNHZXR0aW5nKCkpXA0KLQl7XA0KLQkJQ0pTX0FycmF5IGFycmF5KGlzb2xhdGUpO1wNCi0JCUNvbnZlcnRQV0xDb2xvclRvQXJyYXkodmFyLCBhcnJheSk7XA0KLQkJdnAgPDwgYXJyYXk7XA0KLQl9XA0KLQllbHNlXA0KLQl7XA0KLQkJQ0pTX0FycmF5IGFycmF5KGlzb2xhdGUpO1wNCi0JCWlmICghdnAuQ29udmVydFRvQXJyYXkoYXJyYXkpKSByZXR1cm4gRkFMU0U7XA0KLQkJQ29udmVydEFycmF5VG9QV0xDb2xvcihhcnJheSwgdmFyKTtcDQotCX1cDQotCXJldHVybiBUUlVFO1wNCi19DQotDQotSlNfSU1QTEVNRU5UX0NPTE9SUFJPUCh0cmFuc3BhcmVudCwgbV9jclRyYW5zcGFyZW50KQ0KLUpTX0lNUExFTUVOVF9DT0xPUlBST1AoYmxhY2ssIG1fY3JCbGFjaykNCi1KU19JTVBMRU1FTlRfQ09MT1JQUk9QKHdoaXRlLCBtX2NyV2hpdGUpDQotSlNfSU1QTEVNRU5UX0NPTE9SUFJPUChyZWQsIG1fY3JSZWQpDQotSlNfSU1QTEVNRU5UX0NPTE9SUFJPUChncmVlbiwgbV9jckdyZWVuKQ0KLUpTX0lNUExFTUVOVF9DT0xPUlBST1AoYmx1ZSwgbV9jckJsdWUpDQotSlNfSU1QTEVNRU5UX0NPTE9SUFJPUChjeWFuLCBtX2NyQ3lhbikNCi1KU19JTVBMRU1FTlRfQ09MT1JQUk9QKG1hZ2VudGEsIG1fY3JNYWdlbnRhKQ0KLUpTX0lNUExFTUVOVF9DT0xPUlBST1AoeWVsbG93LCBtX2NyWWVsbG93KQ0KLUpTX0lNUExFTUVOVF9DT0xPUlBST1AoZGtHcmF5LCBtX2NyREtHcmF5KQ0KLUpTX0lNUExFTUVOVF9DT0xPUlBST1AoZ3JheSwgbV9jckdyYXkpDQotSlNfSU1QTEVNRU5UX0NPTE9SUFJPUChsdEdyYXksIG1fY3JMVEdyYXkpDQotDQotRlhfQk9PTCBjb2xvcjo6Y29udmVydChPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCXY4OjpJc29sYXRlKiBpc29sYXRlID0gR2V0SXNvbGF0ZShjYyk7DQotCWludCBpU2l6ZSA9IHBhcmFtcy5zaXplKCk7DQotCWlmIChpU2l6ZSA8IDIpIHJldHVybiBGQUxTRTsNCi0JQ0pTX0FycmF5IGFTb3VyY2UoaXNvbGF0ZSk7DQotCWlmICghcGFyYW1zWzBdLkNvbnZlcnRUb0FycmF5KGFTb3VyY2UpKSByZXR1cm4gRkFMU0U7DQotDQotCUNQV0xfQ29sb3IgY3JTb3VyY2U7DQotCUNvbnZlcnRBcnJheVRvUFdMQ29sb3IoYVNvdXJjZSwgY3JTb3VyY2UpOw0KLQ0KLQlDRlhfQnl0ZVN0cmluZyBzRGVzdFNwYWNlID0gcGFyYW1zWzFdOw0KLQ0KLQlpbnQgbkNvbG9yVHlwZSA9IENPTE9SVFlQRV9UUkFOU1BBUkVOVDsNCi0JDQotCWlmIChzRGVzdFNwYWNlID09ICJUIikNCi0Jew0KLQkJbkNvbG9yVHlwZSA9IENPTE9SVFlQRV9UUkFOU1BBUkVOVDsNCi0JfQ0KLQllbHNlIGlmIChzRGVzdFNwYWNlID09ICJHIikNCi0Jew0KLQkJbkNvbG9yVHlwZSA9IENPTE9SVFlQRV9HUkFZOw0KLQl9DQotCWVsc2UgaWYgKHNEZXN0U3BhY2UgPT0gIlJHQiIpDQotCXsNCi0JCW5Db2xvclR5cGUgPSBDT0xPUlRZUEVfUkdCOw0KLQl9DQotCWVsc2UgaWYgKHNEZXN0U3BhY2UgPT0gIkNNWUsiKQ0KLQl7DQotCQluQ29sb3JUeXBlID0gQ09MT1JUWVBFX0NNWUs7DQotCX0NCi0NCi0JQ0pTX0FycmF5IGFEZXN0KGlzb2xhdGUpOw0KLQlDUFdMX0NvbG9yIGNyRGVzdCA9IGNyU291cmNlOw0KLQljckRlc3QuQ29udmVydENvbG9yVHlwZShuQ29sb3JUeXBlKTsNCi0JQ29udmVydFBXTENvbG9yVG9BcnJheShjckRlc3QsIGFEZXN0KTsNCi0JdlJldCA9IGFEZXN0Ow0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBjb2xvcjo6ZXF1YWwoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IEdldElzb2xhdGUoY2MpOw0KLQlpZiAocGFyYW1zLnNpemUoKSA8IDIpIHJldHVybiBGQUxTRTsNCi0NCi0JQ0pTX0FycmF5IGFycmF5MShpc29sYXRlKSwgYXJyYXkyKGlzb2xhdGUpOw0KLQ0KLQlpZiAoIXBhcmFtc1swXS5Db252ZXJ0VG9BcnJheShhcnJheTEpKSByZXR1cm4gRkFMU0U7DQotCWlmICghcGFyYW1zWzFdLkNvbnZlcnRUb0FycmF5KGFycmF5MikpIHJldHVybiBGQUxTRTsNCi0NCi0JQ1BXTF9Db2xvciBjb2xvcjE7DQotCUNQV0xfQ29sb3IgY29sb3IyOw0KLQ0KLQlDb252ZXJ0QXJyYXlUb1BXTENvbG9yKGFycmF5MSwgY29sb3IxKTsNCi0JQ29udmVydEFycmF5VG9QV0xDb2xvcihhcnJheTIsIGNvbG9yMik7DQotDQotCWNvbG9yMS5Db252ZXJ0Q29sb3JUeXBlKGNvbG9yMi5uQ29sb3JUeXBlKTsNCi0NCi0JdlJldCA9IGNvbG9yMSA9PSBjb2xvcjI7DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0phdmFTY3JpcHQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSUphdmFTY3JpcHQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRGVmaW5lLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX09iamVjdC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19WYWx1ZS5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9jb2xvci5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19FdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfQ29udGV4dC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19SdW50aW1lLmgiCisKK3N0YXRpYyB2ODo6SXNvbGF0ZSogR2V0SXNvbGF0ZShJRlhKU19Db250ZXh0KiBjYykKK3sKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQgKiljYzsKKwlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7CisKKwlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7CisJQVNTRVJUKHBSdW50aW1lICE9IE5VTEwpOworCisJcmV0dXJuIHBSdW50aW1lLT5HZXRJc29sYXRlKCk7Cit9CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjb2xvciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitCRUdJTl9KU19TVEFUSUNfQ09OU1QoQ0pTX0NvbG9yKQorRU5EX0pTX1NUQVRJQ19DT05TVCgpCisKK0JFR0lOX0pTX1NUQVRJQ19QUk9QKENKU19Db2xvcikKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShibGFjaykKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShibHVlKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGN5YW4pCQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGRrR3JheSkKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShncmF5KQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGdyZWVuKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGx0R3JheSkKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShtYWdlbnRhKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHJlZCkJCisJSlNfU1RBVElDX1BST1BfRU5UUlkodHJhbnNwYXJlbnQpCisJSlNfU1RBVElDX1BST1BfRU5UUlkod2hpdGUpCisJSlNfU1RBVElDX1BST1BfRU5UUlkoeWVsbG93KQorRU5EX0pTX1NUQVRJQ19QUk9QKCkKKworQkVHSU5fSlNfU1RBVElDX01FVEhPRChDSlNfQ29sb3IpCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShjb252ZXJ0LCAyKQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoZXF1YWwsIDIpCitFTkRfSlNfU1RBVElDX01FVEhPRCgpCisKK0lNUExFTUVOVF9KU19DTEFTUyhDSlNfQ29sb3IsY29sb3IpCisKK2NvbG9yOjpjb2xvcihDSlNfT2JqZWN0KiBwSlNPYmplY3QpOiBDSlNfRW1iZWRPYmoocEpTT2JqZWN0KQoreworCW1fY3JUcmFuc3BhcmVudCA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX1RSQU5TUEFSRU5UKTsKKwltX2NyQmxhY2sgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLCAwKTsKKwltX2NyV2hpdGUgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLCAxKTsKKwltX2NyUmVkID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfUkdCLCAxLCAwICwwKTsKKwltX2NyR3JlZW4gPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9SR0IsIDAsIDEgLDApOworCW1fY3JCbHVlID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfUkdCLCAwLCAwICwxKTsKKwltX2NyQ3lhbiA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0NNWUssIDEsIDAgLDAsIDApOworCW1fY3JNYWdlbnRhID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfQ01ZSywgMCwgMSAsMCwgMCk7CisJbV9jclllbGxvdyA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0NNWUssIDAsIDAgLDEsIDApOworCW1fY3JES0dyYXkgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLCAwLjI1KTsKKwltX2NyR3JheSA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksIDAuNSk7CisJbV9jckxUR3JheSA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksIDAuNzUpOworfQorCitjb2xvcjo6fmNvbG9yKHZvaWQpCit7Cit9CisKK3ZvaWQgY29sb3I6OkNvbnZlcnRQV0xDb2xvclRvQXJyYXkoY29uc3QgQ1BXTF9Db2xvciYgY29sb3IsIENKU19BcnJheSYgYXJyYXkpCit7CisJc3dpdGNoIChjb2xvci5uQ29sb3JUeXBlKQorCXsKKwljYXNlIENPTE9SVFlQRV9UUkFOU1BBUkVOVDoKKwkJYXJyYXkuU2V0RWxlbWVudCgwLCBDSlNfVmFsdWUoYXJyYXkuR2V0SXNvbGF0ZSgpLCAiVCIpKTsKKwkJYnJlYWs7CisJY2FzZSBDT0xPUlRZUEVfR1JBWToKKwkJYXJyYXkuU2V0RWxlbWVudCgwLCBDSlNfVmFsdWUoYXJyYXkuR2V0SXNvbGF0ZSgpLCJHIikpOworCQlhcnJheS5TZXRFbGVtZW50KDEsIENKU19WYWx1ZShhcnJheS5HZXRJc29sYXRlKCksY29sb3IuZkNvbG9yMSkpOworCQlicmVhazsKKwljYXNlIENPTE9SVFlQRV9SR0I6CisJCWFycmF5LlNldEVsZW1lbnQoMCwgQ0pTX1ZhbHVlKGFycmF5LkdldElzb2xhdGUoKSwiUkdCIikpOworCQlhcnJheS5TZXRFbGVtZW50KDEsIENKU19WYWx1ZShhcnJheS5HZXRJc29sYXRlKCksY29sb3IuZkNvbG9yMSkpOworCQlhcnJheS5TZXRFbGVtZW50KDIsIENKU19WYWx1ZShhcnJheS5HZXRJc29sYXRlKCksY29sb3IuZkNvbG9yMikpOworCQlhcnJheS5TZXRFbGVtZW50KDMsIENKU19WYWx1ZShhcnJheS5HZXRJc29sYXRlKCksY29sb3IuZkNvbG9yMykpOworCQlicmVhazsKKwljYXNlIENPTE9SVFlQRV9DTVlLOgorCQlhcnJheS5TZXRFbGVtZW50KDAsIENKU19WYWx1ZShhcnJheS5HZXRJc29sYXRlKCksIkNNWUsiKSk7CisJCWFycmF5LlNldEVsZW1lbnQoMSwgQ0pTX1ZhbHVlKGFycmF5LkdldElzb2xhdGUoKSxjb2xvci5mQ29sb3IxKSk7CisJCWFycmF5LlNldEVsZW1lbnQoMiwgQ0pTX1ZhbHVlKGFycmF5LkdldElzb2xhdGUoKSxjb2xvci5mQ29sb3IyKSk7CisJCWFycmF5LlNldEVsZW1lbnQoMywgQ0pTX1ZhbHVlKGFycmF5LkdldElzb2xhdGUoKSxjb2xvci5mQ29sb3IzKSk7CisJCWFycmF5LlNldEVsZW1lbnQoNCwgQ0pTX1ZhbHVlKGFycmF5LkdldElzb2xhdGUoKSxjb2xvci5mQ29sb3I0KSk7CisJCWJyZWFrOworCX0KK30KKwordm9pZCBjb2xvcjo6Q29udmVydEFycmF5VG9QV0xDb2xvcihDSlNfQXJyYXkmIGFycmF5LCBDUFdMX0NvbG9yJiBjb2xvcikKK3sKKwlpbnQgbkFycmF5TGVuID0gYXJyYXkuR2V0TGVuZ3RoKCk7CisJaWYgKG5BcnJheUxlbiA8IDEpIHJldHVybjsKKworCUNKU19WYWx1ZSB2YWx1ZShhcnJheS5HZXRJc29sYXRlKCkpOworCUNGWF9CeXRlU3RyaW5nIHNTcGFjZTsKKwlhcnJheS5HZXRFbGVtZW50KDAsIHZhbHVlKTsKKwlzU3BhY2UgPSB2YWx1ZTsKKworCWRvdWJsZSBkMSA9IDA7CisJZG91YmxlIGQyID0gMDsKKwlkb3VibGUgZDMgPSAwOworCWRvdWJsZSBkNCA9IDA7CisKKwlpZiAobkFycmF5TGVuID4gMSkKKwl7CisJCWFycmF5LkdldEVsZW1lbnQoMSwgdmFsdWUpOworCQlkMSA9IHZhbHVlOworCX0KKworCWlmIChuQXJyYXlMZW4gPiAyKQorCXsKKwkJYXJyYXkuR2V0RWxlbWVudCgyLCB2YWx1ZSk7CisJCWQyID0gdmFsdWU7CisJfQorCisJaWYgKG5BcnJheUxlbiA+IDMpCisJeworCQlhcnJheS5HZXRFbGVtZW50KDMsIHZhbHVlKTsKKwkJZDMgPSB2YWx1ZTsKKwl9CisKKwlpZiAobkFycmF5TGVuID4gNCkKKwl7CisJCWFycmF5LkdldEVsZW1lbnQoNCwgdmFsdWUpOworCQlkNCA9IHZhbHVlOworCX0KKworCWlmIChzU3BhY2UgPT0gIlQiKQorCXsKKwkJY29sb3IgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9UUkFOU1BBUkVOVCk7CisJfQorCWVsc2UgaWYgKHNTcGFjZSA9PSAiRyIpCisJeworCQljb2xvciA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksIChGWF9GTE9BVClkMSk7CisJfQorCWVsc2UgaWYgKHNTcGFjZSA9PSAiUkdCIikKKwl7CisJCWNvbG9yID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfUkdCLCAoRlhfRkxPQVQpZDEsIChGWF9GTE9BVClkMiwgKEZYX0ZMT0FUKWQzKTsKKwl9CisJZWxzZSBpZiAoc1NwYWNlID09ICJDTVlLIikKKwl7CisJCWNvbG9yID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfQ01ZSywgKEZYX0ZMT0FUKWQxLCAoRlhfRkxPQVQpZDIsIChGWF9GTE9BVClkMywgKEZYX0ZMT0FUKWQ0KTsKKwl9Cit9CisKKyNkZWZpbmUgSlNfSU1QTEVNRU5UX0NPTE9SUFJPUChwcm9wLCB2YXIpXAorRlhfQk9PTCBjb2xvcjo6cHJvcChPQkpfUFJPUF9QQVJBTVMpXAore1wKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjO1wKKwl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKS0+R2V0SXNvbGF0ZSgpO1wKKwlpZiAodnAuSXNHZXR0aW5nKCkpXAorCXtcCisJCUNKU19BcnJheSBhcnJheShpc29sYXRlKTtcCisJCUNvbnZlcnRQV0xDb2xvclRvQXJyYXkodmFyLCBhcnJheSk7XAorCQl2cCA8PCBhcnJheTtcCisJfVwKKwllbHNlXAorCXtcCisJCUNKU19BcnJheSBhcnJheShpc29sYXRlKTtcCisJCWlmICghdnAuQ29udmVydFRvQXJyYXkoYXJyYXkpKSByZXR1cm4gRkFMU0U7XAorCQlDb252ZXJ0QXJyYXlUb1BXTENvbG9yKGFycmF5LCB2YXIpO1wKKwl9XAorCXJldHVybiBUUlVFO1wKK30KKworSlNfSU1QTEVNRU5UX0NPTE9SUFJPUCh0cmFuc3BhcmVudCwgbV9jclRyYW5zcGFyZW50KQorSlNfSU1QTEVNRU5UX0NPTE9SUFJPUChibGFjaywgbV9jckJsYWNrKQorSlNfSU1QTEVNRU5UX0NPTE9SUFJPUCh3aGl0ZSwgbV9jcldoaXRlKQorSlNfSU1QTEVNRU5UX0NPTE9SUFJPUChyZWQsIG1fY3JSZWQpCitKU19JTVBMRU1FTlRfQ09MT1JQUk9QKGdyZWVuLCBtX2NyR3JlZW4pCitKU19JTVBMRU1FTlRfQ09MT1JQUk9QKGJsdWUsIG1fY3JCbHVlKQorSlNfSU1QTEVNRU5UX0NPTE9SUFJPUChjeWFuLCBtX2NyQ3lhbikKK0pTX0lNUExFTUVOVF9DT0xPUlBST1AobWFnZW50YSwgbV9jck1hZ2VudGEpCitKU19JTVBMRU1FTlRfQ09MT1JQUk9QKHllbGxvdywgbV9jclllbGxvdykKK0pTX0lNUExFTUVOVF9DT0xPUlBST1AoZGtHcmF5LCBtX2NyREtHcmF5KQorSlNfSU1QTEVNRU5UX0NPTE9SUFJPUChncmF5LCBtX2NyR3JheSkKK0pTX0lNUExFTUVOVF9DT0xPUlBST1AobHRHcmF5LCBtX2NyTFRHcmF5KQorCitGWF9CT09MIGNvbG9yOjpjb252ZXJ0KE9CSl9NRVRIT0RfUEFSQU1TKQoreworCXY4OjpJc29sYXRlKiBpc29sYXRlID0gR2V0SXNvbGF0ZShjYyk7CisJaW50IGlTaXplID0gcGFyYW1zLnNpemUoKTsKKwlpZiAoaVNpemUgPCAyKSByZXR1cm4gRkFMU0U7CisJQ0pTX0FycmF5IGFTb3VyY2UoaXNvbGF0ZSk7CisJaWYgKCFwYXJhbXNbMF0uQ29udmVydFRvQXJyYXkoYVNvdXJjZSkpIHJldHVybiBGQUxTRTsKKworCUNQV0xfQ29sb3IgY3JTb3VyY2U7CisJQ29udmVydEFycmF5VG9QV0xDb2xvcihhU291cmNlLCBjclNvdXJjZSk7CisKKwlDRlhfQnl0ZVN0cmluZyBzRGVzdFNwYWNlID0gcGFyYW1zWzFdOworCisJaW50IG5Db2xvclR5cGUgPSBDT0xPUlRZUEVfVFJBTlNQQVJFTlQ7CisJCisJaWYgKHNEZXN0U3BhY2UgPT0gIlQiKQorCXsKKwkJbkNvbG9yVHlwZSA9IENPTE9SVFlQRV9UUkFOU1BBUkVOVDsKKwl9CisJZWxzZSBpZiAoc0Rlc3RTcGFjZSA9PSAiRyIpCisJeworCQluQ29sb3JUeXBlID0gQ09MT1JUWVBFX0dSQVk7CisJfQorCWVsc2UgaWYgKHNEZXN0U3BhY2UgPT0gIlJHQiIpCisJeworCQluQ29sb3JUeXBlID0gQ09MT1JUWVBFX1JHQjsKKwl9CisJZWxzZSBpZiAoc0Rlc3RTcGFjZSA9PSAiQ01ZSyIpCisJeworCQluQ29sb3JUeXBlID0gQ09MT1JUWVBFX0NNWUs7CisJfQorCisJQ0pTX0FycmF5IGFEZXN0KGlzb2xhdGUpOworCUNQV0xfQ29sb3IgY3JEZXN0ID0gY3JTb3VyY2U7CisJY3JEZXN0LkNvbnZlcnRDb2xvclR5cGUobkNvbG9yVHlwZSk7CisJQ29udmVydFBXTENvbG9yVG9BcnJheShjckRlc3QsIGFEZXN0KTsKKwl2UmV0ID0gYURlc3Q7CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBjb2xvcjo6ZXF1YWwoT0JKX01FVEhPRF9QQVJBTVMpCit7CisJdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBHZXRJc29sYXRlKGNjKTsKKwlpZiAocGFyYW1zLnNpemUoKSA8IDIpIHJldHVybiBGQUxTRTsKKworCUNKU19BcnJheSBhcnJheTEoaXNvbGF0ZSksIGFycmF5Mihpc29sYXRlKTsKKworCWlmICghcGFyYW1zWzBdLkNvbnZlcnRUb0FycmF5KGFycmF5MSkpIHJldHVybiBGQUxTRTsKKwlpZiAoIXBhcmFtc1sxXS5Db252ZXJ0VG9BcnJheShhcnJheTIpKSByZXR1cm4gRkFMU0U7CisKKwlDUFdMX0NvbG9yIGNvbG9yMTsKKwlDUFdMX0NvbG9yIGNvbG9yMjsKKworCUNvbnZlcnRBcnJheVRvUFdMQ29sb3IoYXJyYXkxLCBjb2xvcjEpOworCUNvbnZlcnRBcnJheVRvUFdMQ29sb3IoYXJyYXkyLCBjb2xvcjIpOworCisJY29sb3IxLkNvbnZlcnRDb2xvclR5cGUoY29sb3IyLm5Db2xvclR5cGUpOworCisJdlJldCA9IGNvbG9yMSA9PSBjb2xvcjI7CisJcmV0dXJuIFRSVUU7Cit9CisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvY29uc29sZS5jcHAgYi9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L2NvbnNvbGUuY3BwCmluZGV4IDI1ZTU1NTkuLjM1MGI0ZTEgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvY29uc29sZS5jcHAKKysrIGIvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9jb25zb2xlLmNwcApAQCAtMSw3OCArMSw3OCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KYXZhU2NyaXB0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9JSmF2YVNjcmlwdC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRGVmaW5lLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19PYmplY3QuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1ZhbHVlLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9jb25zb2xlLmgiDQotLy8jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX01vZHVsZS5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRXZlbnRIYW5kbGVyLmgiDQotLy8jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1Jlc01nci5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfQ29udGV4dC5oIg0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjb25zb2xlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfQ29uc29sZSkNCi1FTkRfSlNfU1RBVElDX0NPTlNUKCkNCi0NCi1CRUdJTl9KU19TVEFUSUNfUFJPUChDSlNfQ29uc29sZSkNCi1FTkRfSlNfU1RBVElDX1BST1AoKQ0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19NRVRIT0QoQ0pTX0NvbnNvbGUpDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoY2xlYXIsIDApDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoaGlkZSwgMCkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWShwcmludGxuLCAxKQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKHNob3csIDApDQotRU5EX0pTX1NUQVRJQ19NRVRIT0QoKQ0KLQ0KLUlNUExFTUVOVF9KU19DTEFTUyhDSlNfQ29uc29sZSxjb25zb2xlKQ0KLQ0KLSNkZWZpbmUgTUFYQ09OU09MRUNPTlRFTlRTCQkJMTAwMDANCi0NCi1jb25zb2xlOjpjb25zb2xlKENKU19PYmplY3QqIHBKU09iamVjdCk6IENKU19FbWJlZE9iaihwSlNPYmplY3QpDQotew0KLX0NCi0NCi1jb25zb2xlOjp+Y29uc29sZSgpDQotew0KLX0NCi0NCi1GWF9CT09MIGNvbnNvbGU6OmNsZWFyKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0NCi0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgY29uc29sZTo6aGlkZShPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotDQotDQotCQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBjb25zb2xlOjpwcmludGxuKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JaWYgKHBhcmFtcy5zaXplKCkgPCAxKQ0KLQl7DQotCQlyZXR1cm4gRkFMU0U7DQotCX0NCi0gIA0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBjb25zb2xlOjpzaG93KE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSmF2YVNjcmlwdC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9JSmF2YVNjcmlwdC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19EZWZpbmUuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfT2JqZWN0LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1ZhbHVlLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L2NvbnNvbGUuaCIKKy8vI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19Nb2R1bGUuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRXZlbnRIYW5kbGVyLmgiCisvLyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfUmVzTWdyLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0NvbnRleHQuaCIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNvbnNvbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0JFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfQ29uc29sZSkKK0VORF9KU19TVEFUSUNfQ09OU1QoKQorCitCRUdJTl9KU19TVEFUSUNfUFJPUChDSlNfQ29uc29sZSkKK0VORF9KU19TVEFUSUNfUFJPUCgpCisKK0JFR0lOX0pTX1NUQVRJQ19NRVRIT0QoQ0pTX0NvbnNvbGUpCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShjbGVhciwgMCkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGhpZGUsIDApCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShwcmludGxuLCAxKQorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoc2hvdywgMCkKK0VORF9KU19TVEFUSUNfTUVUSE9EKCkKKworSU1QTEVNRU5UX0pTX0NMQVNTKENKU19Db25zb2xlLGNvbnNvbGUpCisKKyNkZWZpbmUgTUFYQ09OU09MRUNPTlRFTlRTCQkJMTAwMDAKKworY29uc29sZTo6Y29uc29sZShDSlNfT2JqZWN0KiBwSlNPYmplY3QpOiBDSlNfRW1iZWRPYmoocEpTT2JqZWN0KQoreworfQorCitjb25zb2xlOjp+Y29uc29sZSgpCit7Cit9CisKK0ZYX0JPT0wgY29uc29sZTo6Y2xlYXIoT0JKX01FVEhPRF9QQVJBTVMpCit7CisKKworCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgY29uc29sZTo6aGlkZShPQkpfTUVUSE9EX1BBUkFNUykKK3sKKworCisJCisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBjb25zb2xlOjpwcmludGxuKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCWlmIChwYXJhbXMuc2l6ZSgpIDwgMSkKKwl7CisJCXJldHVybiBGQUxTRTsKKwl9CisgIAorCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIGNvbnNvbGU6OnNob3coT0JKX01FVEhPRF9QQVJBTVMpCit7CisJcmV0dXJuIFRSVUU7Cit9CisKKworCmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L2V2ZW50LmNwcCBiL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvZXZlbnQuY3BwCmluZGV4IDkxNjhhMmUuLjUxODg3NjUgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvZXZlbnQuY3BwCisrKyBiL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvZXZlbnQuY3BwCkBAIC0xLDM3OSArMSwzNzkgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSmF2YVNjcmlwdC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSUphdmFTY3JpcHQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0RlZmluZS5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfT2JqZWN0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19WYWx1ZS5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRXZlbnRIYW5kbGVyLmgiDQotLy8jaW5jbHVkZSAiLi4vaW5jbHVkZS9KU19SZXNNZ3IuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0NvbnRleHQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L2V2ZW50LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9GaWVsZC5oIg0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGV2ZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQkVHSU5fSlNfU1RBVElDX0NPTlNUKENKU19FdmVudCkNCi1FTkRfSlNfU1RBVElDX0NPTlNUKCkNCi0NCi1CRUdJTl9KU19TVEFUSUNfUFJPUChDSlNfRXZlbnQpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGNoYW5nZSkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkoY2hhbmdlRXgpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGNvbW1pdEtleSkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkoZmllbGRGdWxsKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShrZXlEb3duKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShtb2RpZmllcikNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkobmFtZSkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkocmMpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHJpY2hDaGFuZ2UpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHJpY2hDaGFuZ2VFeCkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkocmljaFZhbHVlKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShzZWxFbmQpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHNlbFN0YXJ0KQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWShzaGlmdCkNCi0JSlNfU1RBVElDX1BST1BfRU5UUlkoc291cmNlKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWSh0YXJnZXQpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHRhcmdldE5hbWUpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHR5cGUpDQotCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHZhbHVlKQ0KLQlKU19TVEFUSUNfUFJPUF9FTlRSWSh3aWxsQ29tbWl0KQ0KLUVORF9KU19TVEFUSUNfUFJPUCgpDQotDQotQkVHSU5fSlNfU1RBVElDX01FVEhPRChDSlNfRXZlbnQpICANCi1FTkRfSlNfU1RBVElDX01FVEhPRCgpDQotDQotSU1QTEVNRU5UX0pTX0NMQVNTKENKU19FdmVudCxldmVudCkNCi0NCi1ldmVudDo6ZXZlbnQoQ0pTX09iamVjdCAqIHBKc09iamVjdCkgOiBDSlNfRW1iZWRPYmoocEpzT2JqZWN0KSAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KLXsNCi19DQotDQotZXZlbnQ6On5ldmVudCh2b2lkKQ0KLXsNCi19DQotDQotRlhfQk9PTCBldmVudDo6Y2hhbmdlKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0JQ0pTX0V2ZW50SGFuZGxlciogcEV2ZW50ID0gcENvbnRleHQtPkdldEV2ZW50SGFuZGxlcigpOw0KLQlBU1NFUlQocEV2ZW50ICE9IE5VTEwpOw0KLQ0KLQlDRlhfV2lkZVN0cmluZyAmd0NoYW5nZSA9IHBFdmVudC0+Q2hhbmdlKCk7DQotCWlmICh2cC5Jc1NldHRpbmcoKSkNCi0Jew0KLQkJaWYgKHZwLkdldFR5cGUoKSA9PSBWVF9zdHJpbmcpDQotCQkJdnAgPj4gd0NoYW5nZTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCXZwIDw8IHdDaGFuZ2U7DQotCX0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgZXZlbnQ6OmNoYW5nZUV4KE9CSl9QUk9QX1BBUkFNUykNCi17DQotCWlmICghdnAuSXNHZXR0aW5nKCkpcmV0dXJuIEZBTFNFOw0KLQ0KLQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotCUNKU19FdmVudEhhbmRsZXIqIHBFdmVudCA9IHBDb250ZXh0LT5HZXRFdmVudEhhbmRsZXIoKTsNCi0JQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsNCi0NCi0JdnAgPDwgcEV2ZW50LT5DaGFuZ2VFeCgpOw0KLQlyZXR1cm4gVFJVRTsJDQotfQ0KLQ0KLUZYX0JPT0wgZXZlbnQ6OmNvbW1pdEtleShPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlpZiAoIXZwLklzR2V0dGluZygpKXJldHVybiBGQUxTRTsNCi0NCi0JQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0KiljYzsNCi0JQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOw0KLQlDSlNfRXZlbnRIYW5kbGVyKiBwRXZlbnQgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7DQotCUFTU0VSVChwRXZlbnQgIT0gTlVMTCk7DQotDQotCXZwIDw8IHBFdmVudC0+Q29tbWl0S2V5KCk7DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIGV2ZW50OjpmaWVsZEZ1bGwoT0JKX1BST1BfUEFSQU1TKQ0KLXsJDQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0JQ0pTX0V2ZW50SGFuZGxlciogcEV2ZW50ID0gcENvbnRleHQtPkdldEV2ZW50SGFuZGxlcigpOw0KLQlBU1NFUlQocEV2ZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAoIXZwLklzR2V0dGluZygpICYmIHdjc2NtcCgoY29uc3Qgd2NoYXJfdCopcEV2ZW50LT5OYW1lKCksTCJLZXlzdHJva2UiKSAhPSAwKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQ0KLQlpZiAocEV2ZW50LT5GaWVsZEZ1bGwoKSkNCi0JCXZwIDw8IFRSVUU7DQotCWVsc2UNCi0JCXZwIDw8IEZBTFNFOw0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBldmVudDo6a2V5RG93bihPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlpZiAoIXZwLklzR2V0dGluZygpKXJldHVybiBGQUxTRTsNCi0NCi0JQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0KiljYzsNCi0JQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOw0KLQlDSlNfRXZlbnRIYW5kbGVyKiBwRXZlbnQgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7DQotCUFTU0VSVChwRXZlbnQgIT0gTlVMTCk7DQotDQotCWlmIChwRXZlbnQtPktleURvd24oKSkNCi0JCXZwIDw8IFRSVUU7DQotCWVsc2UNCi0JCXZwIDw8IEZBTFNFOw0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBldmVudDo6bW9kaWZpZXIoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JaWYgKCF2cC5Jc0dldHRpbmcoKSlyZXR1cm4gRkFMU0U7DQotDQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0JQ0pTX0V2ZW50SGFuZGxlciogcEV2ZW50ID0gcENvbnRleHQtPkdldEV2ZW50SGFuZGxlcigpOw0KLQlBU1NFUlQocEV2ZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAocEV2ZW50LT5Nb2RpZmllcigpKQ0KLQkJdnAgPDwgVFJVRTsNCi0JZWxzZQ0KLQkJdnAgPDwgRkFMU0U7DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIGV2ZW50OjpuYW1lKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCWlmICghdnAuSXNHZXR0aW5nKCkpcmV0dXJuIEZBTFNFOw0KLQ0KLQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotCUNKU19FdmVudEhhbmRsZXIqIHBFdmVudCA9IHBDb250ZXh0LT5HZXRFdmVudEhhbmRsZXIoKTsNCi0JQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsNCi0NCi0JdnAgPDwgcEV2ZW50LT5OYW1lKCk7DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIGV2ZW50OjpyYyhPQkpfUFJPUF9QQVJBTVMpDQotew0KLQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotCUNKU19FdmVudEhhbmRsZXIqIHBFdmVudCA9IHBDb250ZXh0LT5HZXRFdmVudEhhbmRsZXIoKTsNCi0JQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsNCi0NCi0gICAgRlhfQk9PTCAmYlJjID0gcEV2ZW50LT5SYygpOw0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCXZwPj5iUmM7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQl2cDw8YlJjOw0KLQl9DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIGV2ZW50OjpyaWNoQ2hhbmdlKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCXJldHVybiBUUlVFOw0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCTsNCi0JfQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBldmVudDo6cmljaENoYW5nZUV4KE9CSl9QUk9QX1BBUkFNUykNCi17DQotCXJldHVybiBUUlVFOw0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCTsNCi0JfQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotDQotRlhfQk9PTCBldmVudDo6cmljaFZhbHVlKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCXJldHVybiBUUlVFOw0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCTsNCi0JfQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBldmVudDo6c2VsRW5kKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0JQ0pTX0V2ZW50SGFuZGxlciogcEV2ZW50ID0gcENvbnRleHQtPkdldEV2ZW50SGFuZGxlcigpOw0KLQlBU1NFUlQocEV2ZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAod2NzY21wKChjb25zdCB3Y2hhcl90KilwRXZlbnQtPk5hbWUoKSxMIktleXN0cm9rZSIpICE9IDApDQotCXsNCi0JCXJldHVybiBUUlVFOw0KLQl9DQotDQotCWludCAmaVNlbEVuZCA9IHBFdmVudC0+U2VsRW5kKCk7DQotCWlmICh2cC5Jc1NldHRpbmcoKSkNCi0Jew0KLQkJdnAgPj4gaVNlbEVuZDsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCXZwIDw8IGlTZWxFbmQ7DQotCX0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgZXZlbnQ6OnNlbFN0YXJ0KE9CSl9QUk9QX1BBUkFNUykNCi17CQ0KLQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotCUNKU19FdmVudEhhbmRsZXIqIHBFdmVudCA9IHBDb250ZXh0LT5HZXRFdmVudEhhbmRsZXIoKTsNCi0JQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKHdjc2NtcCgoY29uc3Qgd2NoYXJfdCopcEV2ZW50LT5OYW1lKCksTCJLZXlzdHJva2UiKSAhPSAwKQ0KLQl7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQlpbnQgJmlTZWxTdGFydCA9IHBFdmVudC0+U2VsU3RhcnQoKTsNCi0JaWYgKHZwLklzU2V0dGluZygpKQ0KLQl7DQotCQl2cCA+PiBpU2VsU3RhcnQ7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQl2cCA8PCBpU2VsU3RhcnQ7DQotCX0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgZXZlbnQ6OnNoaWZ0KE9CSl9QUk9QX1BBUkFNUykNCi17DQotCWlmICghdnAuSXNHZXR0aW5nKCkpcmV0dXJuIEZBTFNFOw0KLQ0KLQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotCUNKU19FdmVudEhhbmRsZXIqIHBFdmVudCA9IHBDb250ZXh0LT5HZXRFdmVudEhhbmRsZXIoKTsNCi0JQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKHBFdmVudC0+U2hpZnQoKSkNCi0JCXZwIDw8IFRSVUU7DQotCWVsc2UNCi0JCXZwIDw8IEZBTFNFOw0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBldmVudDo6c291cmNlKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCWlmICghdnAuSXNHZXR0aW5nKCkpcmV0dXJuIEZBTFNFOwkNCi0NCi0JQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0KiljYzsNCi0JQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOw0KLQlDSlNfRXZlbnRIYW5kbGVyKiBwRXZlbnQgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7DQotCUFTU0VSVChwRXZlbnQgIT0gTlVMTCk7DQotDQotCXZwIDw8IHBFdmVudC0+U291cmNlKCktPkdldEpTT2JqZWN0KCk7DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIGV2ZW50Ojp0YXJnZXQoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JaWYgKCF2cC5Jc0dldHRpbmcoKSlyZXR1cm4gRkFMU0U7DQotDQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0JQ0pTX0V2ZW50SGFuZGxlciogcEV2ZW50ID0gcENvbnRleHQtPkdldEV2ZW50SGFuZGxlcigpOw0KLQlBU1NFUlQocEV2ZW50ICE9IE5VTEwpOw0KLQ0KLQl2cDw8cEV2ZW50LT5UYXJnZXRfRmllbGQoKS0+R2V0SlNPYmplY3QoKTsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgZXZlbnQ6OnRhcmdldE5hbWUoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JaWYgKCF2cC5Jc0dldHRpbmcoKSlyZXR1cm4gRkFMU0U7DQotDQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0JQ0pTX0V2ZW50SGFuZGxlciogcEV2ZW50ID0gcENvbnRleHQtPkdldEV2ZW50SGFuZGxlcigpOw0KLQlBU1NFUlQocEV2ZW50ICE9IE5VTEwpOw0KLQ0KLQl2cCA8PCBwRXZlbnQtPlRhcmdldE5hbWUoKTsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgZXZlbnQ6OnR5cGUoT0JKX1BST1BfUEFSQU1TKQ0KLXsNCi0JaWYgKCF2cC5Jc0dldHRpbmcoKSlyZXR1cm4gRkFMU0U7DQotDQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0JQ0pTX0V2ZW50SGFuZGxlciogcEV2ZW50ID0gcENvbnRleHQtPkdldEV2ZW50SGFuZGxlcigpOw0KLQlBU1NFUlQocEV2ZW50ICE9IE5VTEwpOw0KLQ0KLQl2cCA8PCBwRXZlbnQtPlR5cGUoKTsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgZXZlbnQ6OnZhbHVlKE9CSl9QUk9QX1BBUkFNUykNCi17DQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0JQ0pTX0V2ZW50SGFuZGxlciogcEV2ZW50ID0gcENvbnRleHQtPkdldEV2ZW50SGFuZGxlcigpOw0KLQlBU1NFUlQocEV2ZW50ICE9IE5VTEwpOw0KLQ0KLQlpZiAod2NzY21wKChjb25zdCB3Y2hhcl90KilwRXZlbnQtPlR5cGUoKSxMIkZpZWxkIikgIT0gMCkNCi0JCXJldHVybiBGQUxTRTsNCi0JaWYoIXBFdmVudC0+bV9wVmFsdWUpDQotCQlyZXR1cm4gRkFMU0U7DQotCUNGWF9XaWRlU3RyaW5nICYgdmFsID0gcEV2ZW50LT5WYWx1ZSgpOw0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCXZhbCA9IHZwOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJdnAgPDwgdmFsOw0KLQl9DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIGV2ZW50Ojp3aWxsQ29tbWl0KE9CSl9QUk9QX1BBUkFNUykNCi17DQotCWlmICghdnAuSXNHZXR0aW5nKCkpcmV0dXJuIEZBTFNFOw0KLQ0KLQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOw0KLQlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7DQotCUNKU19FdmVudEhhbmRsZXIqIHBFdmVudCA9IHBDb250ZXh0LT5HZXRFdmVudEhhbmRsZXIoKTsNCi0JQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsNCi0NCi0JaWYgKHBFdmVudC0+V2lsbENvbW1pdCgpKQ0KLQkJdnAgPDwgVFJVRTsNCi0JZWxzZQ0KLQkJdnAgPDwgRkFMU0U7DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0phdmFTY3JpcHQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSUphdmFTY3JpcHQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRGVmaW5lLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX09iamVjdC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19WYWx1ZS5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19FdmVudEhhbmRsZXIuaCIKKy8vI2luY2x1ZGUgIi4uL2luY2x1ZGUvSlNfUmVzTWdyLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0NvbnRleHQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvZXZlbnQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvRmllbGQuaCIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZXZlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQkVHSU5fSlNfU1RBVElDX0NPTlNUKENKU19FdmVudCkKK0VORF9KU19TVEFUSUNfQ09OU1QoKQorCitCRUdJTl9KU19TVEFUSUNfUFJPUChDSlNfRXZlbnQpCisJSlNfU1RBVElDX1BST1BfRU5UUlkoY2hhbmdlKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGNoYW5nZUV4KQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKGNvbW1pdEtleSkKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShmaWVsZEZ1bGwpCisJSlNfU1RBVElDX1BST1BfRU5UUlkoa2V5RG93bikKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShtb2RpZmllcikKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShuYW1lKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHJjKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHJpY2hDaGFuZ2UpCisJSlNfU1RBVElDX1BST1BfRU5UUlkocmljaENoYW5nZUV4KQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHJpY2hWYWx1ZSkKKwlKU19TVEFUSUNfUFJPUF9FTlRSWShzZWxFbmQpCisJSlNfU1RBVElDX1BST1BfRU5UUlkoc2VsU3RhcnQpCisJSlNfU1RBVElDX1BST1BfRU5UUlkoc2hpZnQpCisJSlNfU1RBVElDX1BST1BfRU5UUlkoc291cmNlKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHRhcmdldCkKKwlKU19TVEFUSUNfUFJPUF9FTlRSWSh0YXJnZXROYW1lKQorCUpTX1NUQVRJQ19QUk9QX0VOVFJZKHR5cGUpCisJSlNfU1RBVElDX1BST1BfRU5UUlkodmFsdWUpCisJSlNfU1RBVElDX1BST1BfRU5UUlkod2lsbENvbW1pdCkKK0VORF9KU19TVEFUSUNfUFJPUCgpCisKK0JFR0lOX0pTX1NUQVRJQ19NRVRIT0QoQ0pTX0V2ZW50KSAgCitFTkRfSlNfU1RBVElDX01FVEhPRCgpCisKK0lNUExFTUVOVF9KU19DTEFTUyhDSlNfRXZlbnQsZXZlbnQpCisKK2V2ZW50OjpldmVudChDSlNfT2JqZWN0ICogcEpzT2JqZWN0KSA6IENKU19FbWJlZE9iaihwSnNPYmplY3QpICAgICAgICAgICAgICAgICAgICAgICAgICAgCit7Cit9CisKK2V2ZW50Ojp+ZXZlbnQodm9pZCkKK3sKK30KKworRlhfQk9PTCBldmVudDo6Y2hhbmdlKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwlDSlNfRXZlbnRIYW5kbGVyKiBwRXZlbnQgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7CisJQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsKKworCUNGWF9XaWRlU3RyaW5nICZ3Q2hhbmdlID0gcEV2ZW50LT5DaGFuZ2UoKTsKKwlpZiAodnAuSXNTZXR0aW5nKCkpCisJeworCQlpZiAodnAuR2V0VHlwZSgpID09IFZUX3N0cmluZykKKwkJCXZwID4+IHdDaGFuZ2U7CisJfQorCWVsc2UKKwl7CisJCXZwIDw8IHdDaGFuZ2U7CisJfQorCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIGV2ZW50OjpjaGFuZ2VFeChPQkpfUFJPUF9QQVJBTVMpCit7CisJaWYgKCF2cC5Jc0dldHRpbmcoKSlyZXR1cm4gRkFMU0U7CisKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwlDSlNfRXZlbnRIYW5kbGVyKiBwRXZlbnQgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7CisJQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsKKworCXZwIDw8IHBFdmVudC0+Q2hhbmdlRXgoKTsKKwlyZXR1cm4gVFJVRTsJCit9CisKK0ZYX0JPT0wgZXZlbnQ6OmNvbW1pdEtleShPQkpfUFJPUF9QQVJBTVMpCit7CisJaWYgKCF2cC5Jc0dldHRpbmcoKSlyZXR1cm4gRkFMU0U7CisKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwlDSlNfRXZlbnRIYW5kbGVyKiBwRXZlbnQgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7CisJQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsKKworCXZwIDw8IHBFdmVudC0+Q29tbWl0S2V5KCk7CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgZXZlbnQ6OmZpZWxkRnVsbChPQkpfUFJPUF9QQVJBTVMpCit7CQorCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7CisJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCUNKU19FdmVudEhhbmRsZXIqIHBFdmVudCA9IHBDb250ZXh0LT5HZXRFdmVudEhhbmRsZXIoKTsKKwlBU1NFUlQocEV2ZW50ICE9IE5VTEwpOworCisJaWYgKCF2cC5Jc0dldHRpbmcoKSAmJiB3Y3NjbXAoKGNvbnN0IHdjaGFyX3QqKXBFdmVudC0+TmFtZSgpLEwiS2V5c3Ryb2tlIikgIT0gMCkKKwkJcmV0dXJuIEZBTFNFOworCisJaWYgKHBFdmVudC0+RmllbGRGdWxsKCkpCisJCXZwIDw8IFRSVUU7CisJZWxzZQorCQl2cCA8PCBGQUxTRTsKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBldmVudDo6a2V5RG93bihPQkpfUFJPUF9QQVJBTVMpCit7CisJaWYgKCF2cC5Jc0dldHRpbmcoKSlyZXR1cm4gRkFMU0U7CisKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwlDSlNfRXZlbnRIYW5kbGVyKiBwRXZlbnQgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7CisJQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsKKworCWlmIChwRXZlbnQtPktleURvd24oKSkKKwkJdnAgPDwgVFJVRTsKKwllbHNlCisJCXZwIDw8IEZBTFNFOworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIGV2ZW50Ojptb2RpZmllcihPQkpfUFJPUF9QQVJBTVMpCit7CisJaWYgKCF2cC5Jc0dldHRpbmcoKSlyZXR1cm4gRkFMU0U7CisKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwlDSlNfRXZlbnRIYW5kbGVyKiBwRXZlbnQgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7CisJQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsKKworCWlmIChwRXZlbnQtPk1vZGlmaWVyKCkpCisJCXZwIDw8IFRSVUU7CisJZWxzZQorCQl2cCA8PCBGQUxTRTsKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBldmVudDo6bmFtZShPQkpfUFJPUF9QQVJBTVMpCit7CisJaWYgKCF2cC5Jc0dldHRpbmcoKSlyZXR1cm4gRkFMU0U7CisKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwlDSlNfRXZlbnRIYW5kbGVyKiBwRXZlbnQgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7CisJQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsKKworCXZwIDw8IHBFdmVudC0+TmFtZSgpOworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIGV2ZW50OjpyYyhPQkpfUFJPUF9QQVJBTVMpCit7CisJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0KiljYzsKKwlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7CisJQ0pTX0V2ZW50SGFuZGxlciogcEV2ZW50ID0gcENvbnRleHQtPkdldEV2ZW50SGFuZGxlcigpOworCUFTU0VSVChwRXZlbnQgIT0gTlVMTCk7CisKKyAgICBGWF9CT09MICZiUmMgPSBwRXZlbnQtPlJjKCk7CisJaWYgKHZwLklzU2V0dGluZygpKQorCXsKKwkJdnA+PmJSYzsKKwl9CisJZWxzZQorCXsKKwkJdnA8PGJSYzsKKwl9CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgZXZlbnQ6OnJpY2hDaGFuZ2UoT0JKX1BST1BfUEFSQU1TKQoreworCXJldHVybiBUUlVFOworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CisJfQorCWVsc2UKKwl7CisJCTsKKwl9CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgZXZlbnQ6OnJpY2hDaGFuZ2VFeChPQkpfUFJPUF9QQVJBTVMpCit7CisJcmV0dXJuIFRSVUU7CisJaWYgKHZwLklzU2V0dGluZygpKQorCXsKKwl9CisJZWxzZQorCXsKKwkJOworCX0KKwlyZXR1cm4gVFJVRTsKK30KKworCitGWF9CT09MIGV2ZW50OjpyaWNoVmFsdWUoT0JKX1BST1BfUEFSQU1TKQoreworCXJldHVybiBUUlVFOworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CisJfQorCWVsc2UKKwl7CisJCTsKKwl9CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgZXZlbnQ6OnNlbEVuZChPQkpfUFJPUF9QQVJBTVMpCit7CisJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0KiljYzsKKwlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7CisJQ0pTX0V2ZW50SGFuZGxlciogcEV2ZW50ID0gcENvbnRleHQtPkdldEV2ZW50SGFuZGxlcigpOworCUFTU0VSVChwRXZlbnQgIT0gTlVMTCk7CisKKwlpZiAod2NzY21wKChjb25zdCB3Y2hhcl90KilwRXZlbnQtPk5hbWUoKSxMIktleXN0cm9rZSIpICE9IDApCisJeworCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlpbnQgJmlTZWxFbmQgPSBwRXZlbnQtPlNlbEVuZCgpOworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CisJCXZwID4+IGlTZWxFbmQ7CisJfQorCWVsc2UKKwl7CisJCXZwIDw8IGlTZWxFbmQ7CisJfQorCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIGV2ZW50OjpzZWxTdGFydChPQkpfUFJPUF9QQVJBTVMpCit7CQorCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7CisJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCUNKU19FdmVudEhhbmRsZXIqIHBFdmVudCA9IHBDb250ZXh0LT5HZXRFdmVudEhhbmRsZXIoKTsKKwlBU1NFUlQocEV2ZW50ICE9IE5VTEwpOworCisJaWYgKHdjc2NtcCgoY29uc3Qgd2NoYXJfdCopcEV2ZW50LT5OYW1lKCksTCJLZXlzdHJva2UiKSAhPSAwKQorCXsKKwkJcmV0dXJuIFRSVUU7CisJfQorCWludCAmaVNlbFN0YXJ0ID0gcEV2ZW50LT5TZWxTdGFydCgpOworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CisJCXZwID4+IGlTZWxTdGFydDsKKwl9CisJZWxzZQorCXsKKwkJdnAgPDwgaVNlbFN0YXJ0OworCX0KKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBldmVudDo6c2hpZnQoT0JKX1BST1BfUEFSQU1TKQoreworCWlmICghdnAuSXNHZXR0aW5nKCkpcmV0dXJuIEZBTFNFOworCisJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0KiljYzsKKwlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7CisJQ0pTX0V2ZW50SGFuZGxlciogcEV2ZW50ID0gcENvbnRleHQtPkdldEV2ZW50SGFuZGxlcigpOworCUFTU0VSVChwRXZlbnQgIT0gTlVMTCk7CisKKwlpZiAocEV2ZW50LT5TaGlmdCgpKQorCQl2cCA8PCBUUlVFOworCWVsc2UKKwkJdnAgPDwgRkFMU0U7CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgZXZlbnQ6OnNvdXJjZShPQkpfUFJPUF9QQVJBTVMpCit7CisJaWYgKCF2cC5Jc0dldHRpbmcoKSlyZXR1cm4gRkFMU0U7CQorCisJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0KiljYzsKKwlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7CisJQ0pTX0V2ZW50SGFuZGxlciogcEV2ZW50ID0gcENvbnRleHQtPkdldEV2ZW50SGFuZGxlcigpOworCUFTU0VSVChwRXZlbnQgIT0gTlVMTCk7CisKKwl2cCA8PCBwRXZlbnQtPlNvdXJjZSgpLT5HZXRKU09iamVjdCgpOworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIGV2ZW50Ojp0YXJnZXQoT0JKX1BST1BfUEFSQU1TKQoreworCWlmICghdnAuSXNHZXR0aW5nKCkpcmV0dXJuIEZBTFNFOworCisJQ0pTX0NvbnRleHQqIHBDb250ZXh0ID0gKENKU19Db250ZXh0KiljYzsKKwlBU1NFUlQocENvbnRleHQgIT0gTlVMTCk7CisJQ0pTX0V2ZW50SGFuZGxlciogcEV2ZW50ID0gcENvbnRleHQtPkdldEV2ZW50SGFuZGxlcigpOworCUFTU0VSVChwRXZlbnQgIT0gTlVMTCk7CisKKwl2cDw8cEV2ZW50LT5UYXJnZXRfRmllbGQoKS0+R2V0SlNPYmplY3QoKTsKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBldmVudDo6dGFyZ2V0TmFtZShPQkpfUFJPUF9QQVJBTVMpCit7CisJaWYgKCF2cC5Jc0dldHRpbmcoKSlyZXR1cm4gRkFMU0U7CisKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwlDSlNfRXZlbnRIYW5kbGVyKiBwRXZlbnQgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7CisJQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsKKworCXZwIDw8IHBFdmVudC0+VGFyZ2V0TmFtZSgpOworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIGV2ZW50Ojp0eXBlKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlpZiAoIXZwLklzR2V0dGluZygpKXJldHVybiBGQUxTRTsKKworCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7CisJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCUNKU19FdmVudEhhbmRsZXIqIHBFdmVudCA9IHBDb250ZXh0LT5HZXRFdmVudEhhbmRsZXIoKTsKKwlBU1NFUlQocEV2ZW50ICE9IE5VTEwpOworCisJdnAgPDwgcEV2ZW50LT5UeXBlKCk7CisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgZXZlbnQ6OnZhbHVlKE9CSl9QUk9QX1BBUkFNUykKK3sKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwlDSlNfRXZlbnRIYW5kbGVyKiBwRXZlbnQgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7CisJQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsKKworCWlmICh3Y3NjbXAoKGNvbnN0IHdjaGFyX3QqKXBFdmVudC0+VHlwZSgpLEwiRmllbGQiKSAhPSAwKQorCQlyZXR1cm4gRkFMU0U7CisJaWYoIXBFdmVudC0+bV9wVmFsdWUpCisJCXJldHVybiBGQUxTRTsKKwlDRlhfV2lkZVN0cmluZyAmIHZhbCA9IHBFdmVudC0+VmFsdWUoKTsKKwlpZiAodnAuSXNTZXR0aW5nKCkpCisJeworCQl2YWwgPSB2cDsKKwl9CisJZWxzZQorCXsKKwkJdnAgPDwgdmFsOworCX0KKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBldmVudDo6d2lsbENvbW1pdChPQkpfUFJPUF9QQVJBTVMpCit7CisJaWYgKCF2cC5Jc0dldHRpbmcoKSlyZXR1cm4gRkFMU0U7CisKKwlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKwlDSlNfRXZlbnRIYW5kbGVyKiBwRXZlbnQgPSBwQ29udGV4dC0+R2V0RXZlbnRIYW5kbGVyKCk7CisJQVNTRVJUKHBFdmVudCAhPSBOVUxMKTsKKworCWlmIChwRXZlbnQtPldpbGxDb21taXQoKSkKKwkJdnAgPDwgVFJVRTsKKwllbHNlCisJCXZwIDw8IEZBTFNFOworCXJldHVybiBUUlVFOworfQorCmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L2dsb2JhbC5jcHAgYi9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L2dsb2JhbC5jcHAKaW5kZXggOTg0YmE1NS4uMjk1YThkNCAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9nbG9iYWwuY3BwCisrKyBiL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvZ2xvYmFsLmNwcApAQCAtMSw1NTAgKzEsNTUwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0phdmFTY3JpcHQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0lKYXZhU2NyaXB0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19EZWZpbmUuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX09iamVjdC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfVmFsdWUuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0dsb2JhbERhdGEuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L2dsb2JhbC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRXZlbnRIYW5kbGVyLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19Db250ZXh0LmgiDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBnbG9iYWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfR2xvYmFsKQ0KLUVORF9KU19TVEFUSUNfQ09OU1QoKQ0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19QUk9QKENKU19HbG9iYWwpDQotRU5EX0pTX1NUQVRJQ19QUk9QKCkNCi0NCi1CRUdJTl9KU19TVEFUSUNfTUVUSE9EKENKU19HbG9iYWwpDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoc2V0UGVyc2lzdGVudCwgMikNCi1FTkRfSlNfU1RBVElDX01FVEhPRCgpDQotDQotSU1QTEVNRU5UX1NQRUNJQUxfSlNfQ0xBU1MoQ0pTX0dsb2JhbCwgZ2xvYmFsX2FsdGVybmF0ZSwgZ2xvYmFsKTsNCi0NCi1GWF9CT09MCUNKU19HbG9iYWw6OkluaXRJbnN0YW5jZShJRlhKU19Db250ZXh0KiBjYykNCi17DQotCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7DQotCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsNCi0NCi0JZ2xvYmFsX2FsdGVybmF0ZSogcEdsb2JhbCA9IChnbG9iYWxfYWx0ZXJuYXRlKilHZXRFbWJlZE9iamVjdCgpOw0KLQlBU1NFUlQocEdsb2JhbCAhPSBOVUxMKTsNCi0JDQotCXBHbG9iYWwtPkluaXRpYWwocENvbnRleHQtPkdldFJlYWRlckFwcCgpKTsNCi0JDQotCXJldHVybiBUUlVFOw0KLX07DQotDQotZ2xvYmFsX2FsdGVybmF0ZTo6Z2xvYmFsX2FsdGVybmF0ZShDSlNfT2JqZWN0KiBwSlNPYmplY3QpDQotCTogQ0pTX0VtYmVkT2JqKHBKU09iamVjdCksDQotCW1fcEFwcChOVUxMKQ0KLXsNCi19DQotDQotZ2xvYmFsX2FsdGVybmF0ZTo6fmdsb2JhbF9hbHRlcm5hdGUodm9pZCkNCi17DQotCUFTU0VSVChtX3BBcHAgIT0gTlVMTCk7DQotDQotLy8JQ29tbWl0R2xvYmFsUGVyc2lzaXRlbnRWYXJpYWJsZXMoKTsNCi0JRGVzdHJveUdsb2JhbFBlcnNpc2l0ZW50VmFyaWFibGVzKCk7DQotDQotCUNKU19SdW50aW1lRmFjdG9yeSogcEZhY3RvcnkgPSBtX3BBcHAtPm1fcEpTUnVudGltZUZhY3Rvcnk7DQotCUFTU0VSVChwRmFjdG9yeSk7DQotDQotCXBGYWN0b3J5LT5SZWxlYXNlR2xvYmFsRGF0YSgpOw0KLX0NCi0gIA0KLXZvaWQgZ2xvYmFsX2FsdGVybmF0ZTo6SW5pdGlhbChDUERGRG9jX0Vudmlyb25tZW50KiBwQXBwKQ0KLXsNCi0JbV9wQXBwID0gcEFwcDsNCi0NCi0JQ0pTX1J1bnRpbWVGYWN0b3J5KiBwRmFjdG9yeSA9IHBBcHAtPm1fcEpTUnVudGltZUZhY3Rvcnk7DQotCUFTU0VSVChwRmFjdG9yeSk7DQotCW1fcEdsb2JhbERhdGEgPSBwRmFjdG9yeS0+TmV3R2xvYmFsRGF0YShwQXBwKTsNCi0JVXBkYXRlR2xvYmFsUGVyc2lzdGVudFZhcmlhYmxlcygpOw0KLX0NCi0NCi1GWF9CT09MCWdsb2JhbF9hbHRlcm5hdGU6OlF1ZXJ5UHJvcGVydHkoRlhfTFBDV1NUUiBwcm9wbmFtZSkNCi17DQotCXJldHVybiBDRlhfV2lkZVN0cmluZyhwcm9wbmFtZSkgIT0gTCJzZXRQZXJzaXN0ZW50IjsNCi19DQotDQotRlhfQk9PTAlnbG9iYWxfYWx0ZXJuYXRlOjpEZWxQcm9wZXJ0eShJRlhKU19Db250ZXh0KiBjYywgRlhfTFBDV1NUUiBwcm9wbmFtZSwgSlNfRXJyb3JTdHJpbmcmIHNFcnJvcikNCi17DQotCWpzX2dsb2JhbF9kYXRhKiBwRGF0YSA9IE5VTEw7DQotCUNGWF9CeXRlU3RyaW5nIHNQcm9wTmFtZSA9IENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShwcm9wbmFtZSk7DQotDQotCWlmIChtX21hcEdsb2JhbC5Mb29rdXAoc1Byb3BOYW1lLCAoRlhfTFBWT0lEJilwRGF0YSkpDQotCXsNCi0JCXBEYXRhLT5iRGVsZXRlZCA9IFRSVUU7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgZ2xvYmFsX2FsdGVybmF0ZTo6RG9Qcm9wZXJ0eShJRlhKU19Db250ZXh0KiBjYywgRlhfTFBDV1NUUiBwcm9wbmFtZSwgQ0pTX1Byb3BWYWx1ZSYgdnAsIEpTX0Vycm9yU3RyaW5nJiBzRXJyb3IpDQotew0KLQlpZiAodnAuSXNTZXR0aW5nKCkpDQotCXsNCi0JCUNGWF9CeXRlU3RyaW5nIHNQcm9wTmFtZSA9IENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShwcm9wbmFtZSk7DQotCQlzd2l0Y2ggKHZwLkdldFR5cGUoKSkNCi0JCXsNCi0JCWNhc2UgVlRfbnVtYmVyOg0KLQkJCXsNCi0JCQkJZG91YmxlIGREYXRhOw0KLQkJCQl2cCA+PiBkRGF0YTsNCi0JCQkJcmV0dXJuIFNldEdsb2JhbFZhcmlhYmxlcyhzUHJvcE5hbWUsIEpTX0dMT0JBTERBVEFfVFlQRV9OVU1CRVIsIGREYXRhLCBmYWxzZSwgIiIsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgRkFMU0UpOw0KLQkJCX0NCi0JCWNhc2UgVlRfYm9vbGVhbjoNCi0JCQl7DQotCQkJCWJvb2wgYkRhdGE7DQotCQkJCXZwID4+IGJEYXRhOw0KLQkJCQlyZXR1cm4gU2V0R2xvYmFsVmFyaWFibGVzKHNQcm9wTmFtZSwgSlNfR0xPQkFMREFUQV9UWVBFX0JPT0xFQU4sIDAsIChib29sKXZwLCAiIiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBGQUxTRSk7DQotCQkJfQ0KLQkJY2FzZSBWVF9zdHJpbmc6DQotCQkJew0KLQkJCQlDRlhfQnl0ZVN0cmluZyBzRGF0YTsNCi0JCQkJdnAgPj4gc0RhdGE7DQotCQkJCXJldHVybiBTZXRHbG9iYWxWYXJpYWJsZXMoc1Byb3BOYW1lLCBKU19HTE9CQUxEQVRBX1RZUEVfU1RSSU5HLCAwLCBmYWxzZSwgc0RhdGEsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgRkFMU0UpOw0KLQkJCX0NCi0JCWNhc2UgVlRfb2JqZWN0Og0KLQkJCXsNCi0JCQkJSlNPYmplY3QgcERhdGEgPSAoSlNPYmplY3QpdnA7DQotCQkJCXJldHVybiBTZXRHbG9iYWxWYXJpYWJsZXMoc1Byb3BOYW1lLCBKU19HTE9CQUxEQVRBX1RZUEVfT0JKRUNULCAwLCBmYWxzZSwgIiIsIHBEYXRhLCBGQUxTRSk7DQotLy8gCQkJCWVsc2UNCi0vLyAJCQkJew0KLS8vIAkJCQkJaWYgKHZwLklzQXJyYXlPYmplY3QoKSkNCi0vLyAJCQkJCXsNCi0vLyAJCQkJCQlDSlNfQXJyYXkgYXJyYXk7DQotLy8gCQkJCQkJdnAuQ29udmVydFRvQXJyYXkoYXJyYXkpOw0KLS8vIAkJCQkJCXJldHVybiBTZXRHbG9iYWxWYXJpYWJsZXMoc1Byb3BOYW1lLCBKU19HTE9CQUxEQVRBX1RZUEVfT0JKRUNULCAwLCBmYWxzZSwgIiIsIA0KLS8vIAkJCQkJCQkoRG9iamVjdCopKERhcnJheSopYXJyYXksIEZBTFNFKTsNCi0vLyAJCQkJCX0NCi0vLyAJCQkJCWVsc2UNCi0vLyAJCQkJCQlyZXR1cm4gRkFMU0U7DQotLy8gCQkJCX0NCi0JCQl9DQotCQljYXNlIFZUX251bGw6DQotCQkJew0KLQkJCQlyZXR1cm4gU2V0R2xvYmFsVmFyaWFibGVzKHNQcm9wTmFtZSwgSlNfR0xPQkFMREFUQV9UWVBFX05VTEwsIDAsIGZhbHNlLCAiIiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBGQUxTRSk7DQotCQkJfQ0KLQkJY2FzZSBWVF91bmRlZmluZWQ6DQotCQkJew0KLQkJCQlEZWxQcm9wZXJ0eShjYywgcHJvcG5hbWUsIHNFcnJvcik7DQotCQkJCXJldHVybiBUUlVFOw0KLQkJCX0NCi0JCWRlZmF1bHQ6DQotCQkJcmV0dXJuIEZBTFNFOw0KLQkJfQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJanNfZ2xvYmFsX2RhdGEqIHBEYXRhID0gTlVMTDsNCi0JCUNGWF9CeXRlU3RyaW5nIHNQcm9wTmFtZSA9IENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShwcm9wbmFtZSk7DQotDQotCQlpZiAobV9tYXBHbG9iYWwuTG9va3VwKHNQcm9wTmFtZSwgKEZYX0xQVk9JRCYpcERhdGEpKQ0KLQkJew0KLQkJCWlmIChwRGF0YSkNCi0JCQl7DQotCQkJCWlmICghcERhdGEtPmJEZWxldGVkKQ0KLQkJCQl7DQotCQkJCQlzd2l0Y2ggKHBEYXRhLT5uVHlwZSkNCi0JCQkJCXsNCi0JCQkJCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX05VTUJFUjoNCi0JCQkJCQl2cCA8PCBwRGF0YS0+ZERhdGE7DQotCQkJCQkJYnJlYWs7DQotCQkJCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9CT09MRUFOOg0KLQkJCQkJCXZwIDw8IHBEYXRhLT5iRGF0YTsNCi0JCQkJCQlicmVhazsNCi0JCQkJCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX1NUUklORzoNCi0JCQkJCQl2cCA8PCBwRGF0YS0+c0RhdGE7DQotCQkJCQkJYnJlYWs7DQotCQkJCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9PQkpFQ1Q6DQotCQkJCQkJew0KLQkJCQkJCQl2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iaiA9IHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6TmV3KHZwLkdldElzb2xhdGUoKSxwRGF0YS0+cERhdGEpOw0KLQkJCQkJCQl2cCA8PCBvYmo7DQotCQkJCQkJCWJyZWFrOw0KLQkJCQkJCX0NCi0JCQkJCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX05VTEw6DQotCQkJCQkJdnAuU2V0TnVsbCgpOw0KLQkJCQkJCWJyZWFrOw0KLQkJCQkJZGVmYXVsdDoNCi0JCQkJCQlyZXR1cm4gRkFMU0U7DQotCQkJCQl9DQotCQkJCQlyZXR1cm4gVFJVRTsNCi0JCQkJfQ0KLQkJCQllbHNlDQotCQkJCXsNCi0JCQkJCXJldHVybiBUUlVFOw0KLQkJCQl9DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCXZwLlNldE51bGwoKTsNCi0JCQkJcmV0dXJuIFRSVUU7DQotCQkJfQ0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCXZwLlNldE51bGwoKTsNCi0JCQlyZXR1cm4gVFJVRTsNCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgZ2xvYmFsX2FsdGVybmF0ZTo6c2V0UGVyc2lzdGVudChPQkpfTUVUSE9EX1BBUkFNUykNCi17DQotCWlmIChwYXJhbXMuc2l6ZSgpICE9IDIpDQotCXsNCi0JCS8vc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQoSURTX1NUUklOR19KU1BBUkFNRVJST1IpOwkNCi0JCXJldHVybiBGQUxTRTsNCi0JfQ0KLQ0KLQlDRlhfQnl0ZVN0cmluZyBzTmFtZSA9IHBhcmFtc1swXTsNCi0NCi0JanNfZ2xvYmFsX2RhdGEqIHBEYXRhID0gTlVMTDsNCi0JaWYgKG1fbWFwR2xvYmFsLkxvb2t1cChzTmFtZSwgKEZYX0xQVk9JRCYpcERhdGEpKQ0KLQl7DQotCQlpZiAocERhdGEgJiYgIXBEYXRhLT5iRGVsZXRlZCkNCi0JCXsNCi0JCQlwRGF0YS0+YlBlcnNpc3RlbnQgPSAoYm9vbClwYXJhbXNbMV07DQotCQkJcmV0dXJuIFRSVUU7DQotCQl9DQotCX0NCi0NCi0JLy9zRXJyb3IgPSBKU0dldFN0cmluZ0Zyb21JRChJRFNfSlNQQVJBTV9JTkNPUlJFQ1QpOwkNCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi12b2lkIGdsb2JhbF9hbHRlcm5hdGU6OlVwZGF0ZUdsb2JhbFBlcnNpc3RlbnRWYXJpYWJsZXMoKQ0KLXsNCi0JQVNTRVJUKG1fcEdsb2JhbERhdGEgIT0gTlVMTCk7DQotDQotCWZvciAoaW50IGk9MCxzej1tX3BHbG9iYWxEYXRhLT5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJQ0pTX0dsb2JhbERhdGFfRWxlbWVudCogcERhdGEgPSBtX3BHbG9iYWxEYXRhLT5HZXRBdChpKTsNCi0JCUFTU0VSVChwRGF0YSAhPSBOVUxMKTsNCi0NCi0JCXN3aXRjaCAocERhdGEtPmRhdGEublR5cGUpDQotCQl7DQotCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9OVU1CRVI6DQotCQkJdGhpcy0+U2V0R2xvYmFsVmFyaWFibGVzKHBEYXRhLT5kYXRhLnNLZXksIEpTX0dMT0JBTERBVEFfVFlQRV9OVU1CRVIsIHBEYXRhLT5kYXRhLmREYXRhLCBmYWxzZSwgIiIsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgcERhdGEtPmJQZXJzaXN0ZW50ID09IDEpOw0KLQkJCUpTX1B1dE9iamVjdE51bWJlcihOVUxMLChKU0ZYT2JqZWN0KSgqbV9wSlNPYmplY3QpLA0KLQkJCQlwRGF0YS0+ZGF0YS5zS2V5LlVURjhEZWNvZGUoKSwgcERhdGEtPmRhdGEuZERhdGEpOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfQk9PTEVBTjoNCi0JCQl0aGlzLT5TZXRHbG9iYWxWYXJpYWJsZXMocERhdGEtPmRhdGEuc0tleSwgSlNfR0xPQkFMREFUQV9UWVBFX0JPT0xFQU4sIDAsIChib29sKShwRGF0YS0+ZGF0YS5iRGF0YSA9PSAxKSwgIiIsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgcERhdGEtPmJQZXJzaXN0ZW50ID09IDEpOw0KLQkJCUpTX1B1dE9iamVjdEJvb2xlYW4oTlVMTCwoSlNGWE9iamVjdCkoKm1fcEpTT2JqZWN0KSwNCi0JCQkJcERhdGEtPmRhdGEuc0tleS5VVEY4RGVjb2RlKCksIChib29sKShwRGF0YS0+ZGF0YS5iRGF0YSA9PSAxKSk7DQotCQkJYnJlYWs7DQotCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9TVFJJTkc6DQotCQkJdGhpcy0+U2V0R2xvYmFsVmFyaWFibGVzKHBEYXRhLT5kYXRhLnNLZXksIEpTX0dMT0JBTERBVEFfVFlQRV9TVFJJTkcsIDAsIGZhbHNlLCBwRGF0YS0+ZGF0YS5zRGF0YSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBwRGF0YS0+YlBlcnNpc3RlbnQgPT0gMSk7DQotCQkJSlNfUHV0T2JqZWN0U3RyaW5nKE5VTEwsKEpTRlhPYmplY3QpKCptX3BKU09iamVjdCksDQotCQkJCXBEYXRhLT5kYXRhLnNLZXkuVVRGOERlY29kZSgpLCANCi0JCQkJcERhdGEtPmRhdGEuc0RhdGEuVVRGOERlY29kZSgpKTsNCi0JCQlicmVhazsNCi0JCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX09CSkVDVDoNCi0JCQl7DQotCQkJCUlKU19SdW50aW1lKiBwUnVudGltZSA9IEpTX0dldFJ1bnRpbWUoKEpTRlhPYmplY3QpKCptX3BKU09iamVjdCkpOw0KLQkJCQl2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHBPYmogPSBKU19OZXdGeER5bmFtaWNPYmoocFJ1bnRpbWUsIE5VTEwsIC0xKTsNCi0NCi0JCQkJUHV0T2JqZWN0UHJvcGVydHkocE9iaiwgJnBEYXRhLT5kYXRhKTsNCi0NCi0JCQkJdGhpcy0+U2V0R2xvYmFsVmFyaWFibGVzKHBEYXRhLT5kYXRhLnNLZXksIEpTX0dMT0JBTERBVEFfVFlQRV9PQkpFQ1QsIDAsIGZhbHNlLCAiIiwgDQotCQkJCQkoSlNPYmplY3QpcE9iaiwgcERhdGEtPmJQZXJzaXN0ZW50ID09IDEpOw0KLQkJCQlKU19QdXRPYmplY3RPYmplY3QoTlVMTCwoSlNGWE9iamVjdCkoKm1fcEpTT2JqZWN0KSwNCi0JCQkJCXBEYXRhLT5kYXRhLnNLZXkuVVRGOERlY29kZSgpLCAoSlNPYmplY3QpcE9iaik7DQotCQkJfQ0KLQkJCWJyZWFrOw0KLQkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfTlVMTDoNCi0JCQl0aGlzLT5TZXRHbG9iYWxWYXJpYWJsZXMocERhdGEtPmRhdGEuc0tleSwgSlNfR0xPQkFMREFUQV9UWVBFX05VTEwsIDAsIGZhbHNlLCAiIiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBwRGF0YS0+YlBlcnNpc3RlbnQgPT0gMSk7DQotCQkJSlNfUHV0T2JqZWN0TnVsbChOVUxMLChKU0ZYT2JqZWN0KSgqbV9wSlNPYmplY3QpLA0KLQkJCQlwRGF0YS0+ZGF0YS5zS2V5LlVURjhEZWNvZGUoKSk7DQotCQkJYnJlYWs7DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBnbG9iYWxfYWx0ZXJuYXRlOjpDb21taXRHbG9iYWxQZXJzaXNpdGVudFZhcmlhYmxlcygpDQotew0KLQlBU1NFUlQobV9wR2xvYmFsRGF0YSAhPSBOVUxMKTsNCi0NCi0JRlhfUE9TSVRJT04JIHBvcyA9IG1fbWFwR2xvYmFsLkdldFN0YXJ0UG9zaXRpb24oKTsNCi0Jd2hpbGUgKHBvcykNCi0Jew0KLQkJQ0ZYX0J5dGVTdHJpbmcgbmFtZTsgDQotCQlqc19nbG9iYWxfZGF0YSogcERhdGEgPSBOVUxMOw0KLQkJbV9tYXBHbG9iYWwuR2V0TmV4dEFzc29jKHBvcywgbmFtZSwgKEZYX0xQVk9JRCYpcERhdGEpOw0KLQkJDQotCQlpZiAocERhdGEpDQotCQl7DQotCQkJaWYgKHBEYXRhLT5iRGVsZXRlZCkNCi0JCQl7DQotCQkJCW1fcEdsb2JhbERhdGEtPkRlbGV0ZUdsb2JhbFZhcmlhYmxlKG5hbWUpOw0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQlzd2l0Y2ggKHBEYXRhLT5uVHlwZSkNCi0JCQkJew0KLQkJCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9OVU1CRVI6DQotCQkJCQltX3BHbG9iYWxEYXRhLT5TZXRHbG9iYWxWYXJpYWJsZU51bWJlcihuYW1lLCBwRGF0YS0+ZERhdGEpOw0KLQkJCQkJbV9wR2xvYmFsRGF0YS0+U2V0R2xvYmFsVmFyaWFibGVQZXJzaXN0ZW50KG5hbWUsIHBEYXRhLT5iUGVyc2lzdGVudCk7DQotCQkJCQlicmVhazsNCi0JCQkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfQk9PTEVBTjoNCi0JCQkJCW1fcEdsb2JhbERhdGEtPlNldEdsb2JhbFZhcmlhYmxlQm9vbGVhbihuYW1lLCBwRGF0YS0+YkRhdGEpOw0KLQkJCQkJbV9wR2xvYmFsRGF0YS0+U2V0R2xvYmFsVmFyaWFibGVQZXJzaXN0ZW50KG5hbWUsIHBEYXRhLT5iUGVyc2lzdGVudCk7DQotCQkJCQlicmVhazsNCi0JCQkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfU1RSSU5HOg0KLQkJCQkJbV9wR2xvYmFsRGF0YS0+U2V0R2xvYmFsVmFyaWFibGVTdHJpbmcobmFtZSwgcERhdGEtPnNEYXRhKTsNCi0JCQkJCW1fcEdsb2JhbERhdGEtPlNldEdsb2JhbFZhcmlhYmxlUGVyc2lzdGVudChuYW1lLCBwRGF0YS0+YlBlcnNpc3RlbnQpOw0KLQkJCQkJYnJlYWs7DQotCQkJCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX09CSkVDVDoNCi0JCQkJCS8vaWYgKHBEYXRhLT5wRGF0YSkNCi0JCQkJCXsNCi0JCQkJCQlDSlNfR2xvYmFsVmFyaWFibGVBcnJheSBhcnJheTsNCi0JCQkJCQl2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iaiA9IHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6TmV3KEdldEpTT2JqZWN0KCktPkdldElzb2xhdGUoKSxwRGF0YS0+cERhdGEpOw0KLQkJCQkJCU9iamVjdFRvQXJyYXkob2JqLCBhcnJheSk7DQotCQkJCQkJbV9wR2xvYmFsRGF0YS0+U2V0R2xvYmFsVmFyaWFibGVPYmplY3QobmFtZSwgYXJyYXkpOw0KLQkJCQkJCW1fcEdsb2JhbERhdGEtPlNldEdsb2JhbFZhcmlhYmxlUGVyc2lzdGVudChuYW1lLCBwRGF0YS0+YlBlcnNpc3RlbnQpOw0KLQkJCQkJfQ0KLQkJCQkJYnJlYWs7DQotCQkJCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX05VTEw6DQotCQkJCQltX3BHbG9iYWxEYXRhLT5TZXRHbG9iYWxWYXJpYWJsZU51bGwobmFtZSk7DQotCQkJCQltX3BHbG9iYWxEYXRhLT5TZXRHbG9iYWxWYXJpYWJsZVBlcnNpc3RlbnQobmFtZSwgcERhdGEtPmJQZXJzaXN0ZW50KTsNCi0JCQkJCWJyZWFrOw0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgZ2xvYmFsX2FsdGVybmF0ZTo6T2JqZWN0VG9BcnJheSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHBPYmosIENKU19HbG9iYWxWYXJpYWJsZUFycmF5JiBhcnJheSkNCi17DQotCXY4OjpIYW5kbGU8djg6OkFycmF5PiBwS2V5TGlzdCA9IEpTX0dldE9iamVjdEVsZW1lbnROYW1lcyhwT2JqKTsNCi0JaW50CW5PYmpFbGVtZW50cyA9IHBLZXlMaXN0LT5MZW5ndGgoKTsNCi0NCi0Jdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gcE9iai0+Q3JlYXRpb25Db250ZXh0KCk7DQotCXY4OjpJc29sYXRlKiBpc29sYXRlID0gY29udGV4dC0+R2V0SXNvbGF0ZSgpOw0KLQ0KLQlmb3IgKGludCBpPTA7IGk8bk9iakVsZW1lbnRzOyBpKyspDQotCXsNCi0JCQ0KLQkJQ0ZYX1dpZGVTdHJpbmcgd3MgPSBKU19Ub1N0cmluZyhKU19HZXRBcnJheUVsZW1uZXQocEtleUxpc3QsIGkpKTsNCi0JCUNGWF9CeXRlU3RyaW5nIHNLZXkgPSB3cy5VVEY4RW5jb2RlKCk7DQotDQotCQl2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdiA9IEpTX0dldE9iamVjdEVsZW1lbnQoaXNvbGF0ZSwgcE9iaiwgKGNvbnN0IHdjaGFyX3QqKShGWF9MUENXU1RSKXdzKTsNCi0JCUZYSlNWQUxVRVRZUEUgdnQgPSBHRVRfVkFMVUVfVFlQRSh2KTsNCi0JCXN3aXRjaCAodnQpDQotCQl7DQotCQljYXNlIFZUX251bWJlcjoNCi0JCQl7DQotCQkJCUNKU19LZXlWYWx1ZSogcE9iakVsZW1lbnQgPSBuZXcgQ0pTX0tleVZhbHVlOw0KLQkJCQlwT2JqRWxlbWVudC0+blR5cGUgPSBKU19HTE9CQUxEQVRBX1RZUEVfTlVNQkVSOw0KLQkJCQlwT2JqRWxlbWVudC0+c0tleSA9IHNLZXk7DQotCQkJCXBPYmpFbGVtZW50LT5kRGF0YSA9IEpTX1RvTnVtYmVyKHYpOw0KLQkJCQlhcnJheS5BZGQocE9iakVsZW1lbnQpOw0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWNhc2UgVlRfYm9vbGVhbjoNCi0JCQl7DQotCQkJCUNKU19LZXlWYWx1ZSogcE9iakVsZW1lbnQgPSBuZXcgQ0pTX0tleVZhbHVlOw0KLQkJCQlwT2JqRWxlbWVudC0+blR5cGUgPSBKU19HTE9CQUxEQVRBX1RZUEVfQk9PTEVBTjsNCi0JCQkJcE9iakVsZW1lbnQtPnNLZXkgPSBzS2V5Ow0KLQkJCQlwT2JqRWxlbWVudC0+ZERhdGEgPSBKU19Ub0Jvb2xlYW4odik7DQotCQkJCWFycmF5LkFkZChwT2JqRWxlbWVudCk7DQotCQkJfQ0KLQkJCWJyZWFrOw0KLQkJY2FzZSBWVF9zdHJpbmc6DQotCQkJew0KLQkJCQlDRlhfQnl0ZVN0cmluZyBzVmFsdWUgPSBDSlNfVmFsdWUoaXNvbGF0ZSwgdiwgVlRfc3RyaW5nKTsNCi0JCQkJQ0pTX0tleVZhbHVlKiBwT2JqRWxlbWVudCA9IG5ldyBDSlNfS2V5VmFsdWU7DQotCQkJCXBPYmpFbGVtZW50LT5uVHlwZSA9IEpTX0dMT0JBTERBVEFfVFlQRV9TVFJJTkc7DQotCQkJCXBPYmpFbGVtZW50LT5zS2V5ID0gc0tleTsNCi0JCQkJcE9iakVsZW1lbnQtPnNEYXRhID0gc1ZhbHVlOw0KLQkJCQlhcnJheS5BZGQocE9iakVsZW1lbnQpOw0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWNhc2UgVlRfb2JqZWN0Og0KLQkJCXsNCi0JCQkJQ0pTX0tleVZhbHVlKiBwT2JqRWxlbWVudCA9IG5ldyBDSlNfS2V5VmFsdWU7DQotCQkJCXBPYmpFbGVtZW50LT5uVHlwZSA9IEpTX0dMT0JBTERBVEFfVFlQRV9PQkpFQ1Q7DQotCQkJCXBPYmpFbGVtZW50LT5zS2V5ID0gc0tleTsNCi0JCQkJT2JqZWN0VG9BcnJheShKU19Ub09iamVjdCh2KSwgcE9iakVsZW1lbnQtPm9iakRhdGEpOw0KLQkJCQlhcnJheS5BZGQocE9iakVsZW1lbnQpOw0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWNhc2UgVlRfbnVsbDoNCi0JCQl7DQotCQkJCUNKU19LZXlWYWx1ZSogcE9iakVsZW1lbnQgPSBuZXcgQ0pTX0tleVZhbHVlOw0KLQkJCQlwT2JqRWxlbWVudC0+blR5cGUgPSBKU19HTE9CQUxEQVRBX1RZUEVfTlVMTDsNCi0JCQkJcE9iakVsZW1lbnQtPnNLZXkgPSBzS2V5Ow0KLQkJCQlhcnJheS5BZGQocE9iakVsZW1lbnQpOw0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWRlZmF1bHQ6DQotCQkJYnJlYWs7DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBnbG9iYWxfYWx0ZXJuYXRlOjpQdXRPYmplY3RQcm9wZXJ0eSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHBPYmosIENKU19LZXlWYWx1ZSogcERhdGEpDQotew0KLQlBU1NFUlQocERhdGEgIT0gTlVMTCk7DQotDQotCWZvciAoaW50IGk9MCxzej1wRGF0YS0+b2JqRGF0YS5Db3VudCgpOyBpPHN6OyBpKyspDQotCXsNCi0JCUNKU19LZXlWYWx1ZSogcE9iakRhdGEgPSBwRGF0YS0+b2JqRGF0YS5HZXRBdChpKTsNCi0JCUFTU0VSVChwT2JqRGF0YSAhPSBOVUxMKTsNCi0NCi0JCXN3aXRjaCAocE9iakRhdGEtPm5UeXBlKQ0KLQkJew0KLQkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfTlVNQkVSOg0KLQkJCUpTX1B1dE9iamVjdE51bWJlcihOVUxMLChKU09iamVjdClwT2JqLCBwT2JqRGF0YS0+c0tleS5VVEY4RGVjb2RlKCksIHBPYmpEYXRhLT5kRGF0YSk7DQotCQkJYnJlYWs7DQotCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9CT09MRUFOOg0KLQkJCUpTX1B1dE9iamVjdEJvb2xlYW4oTlVMTCwoSlNPYmplY3QpcE9iaiwgcE9iakRhdGEtPnNLZXkuVVRGOERlY29kZSgpLCAoYm9vbCkocE9iakRhdGEtPmJEYXRhID09IDEpKTsNCi0JCQlicmVhazsNCi0JCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX1NUUklORzoNCi0JCQlKU19QdXRPYmplY3RTdHJpbmcoTlVMTCwoSlNPYmplY3QpcE9iaiwgcE9iakRhdGEtPnNLZXkuVVRGOERlY29kZSgpLCBwT2JqRGF0YS0+c0RhdGEuVVRGOERlY29kZSgpKTsNCi0JCQlicmVhazsNCi0JCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX09CSkVDVDoNCi0JCQl7DQotCQkJCUlKU19SdW50aW1lKiBwUnVudGltZSA9IEpTX0dldFJ1bnRpbWUoKEpTRlhPYmplY3QpKCptX3BKU09iamVjdCkpOw0KLQkJCQl2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHBOZXdPYmogPSBKU19OZXdGeER5bmFtaWNPYmoocFJ1bnRpbWUsIE5VTEwsIC0xKTsNCi0JCQkJUHV0T2JqZWN0UHJvcGVydHkocE5ld09iaiwgcE9iakRhdGEpOw0KLQkJCQlKU19QdXRPYmplY3RPYmplY3QoTlVMTCwgKEpTT2JqZWN0KXBPYmosIHBPYmpEYXRhLT5zS2V5LlVURjhEZWNvZGUoKSwgKEpTT2JqZWN0KXBOZXdPYmopOw0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX05VTEw6DQotCQkJSlNfUHV0T2JqZWN0TnVsbChOVUxMLChKU09iamVjdClwT2JqLCBwT2JqRGF0YS0+c0tleS5VVEY4RGVjb2RlKCkpOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgZ2xvYmFsX2FsdGVybmF0ZTo6RGVzdHJveUdsb2JhbFBlcnNpc2l0ZW50VmFyaWFibGVzKCkNCi17DQotCUZYX1BPU0lUSU9OCSBwb3MgPSBtX21hcEdsb2JhbC5HZXRTdGFydFBvc2l0aW9uKCk7DQotCXdoaWxlIChwb3MpDQotCXsNCi0JCUNGWF9CeXRlU3RyaW5nIG5hbWU7IA0KLQkJanNfZ2xvYmFsX2RhdGEqIHBEYXRhID0gTlVMTDsNCi0JCW1fbWFwR2xvYmFsLkdldE5leHRBc3NvYyhwb3MsIG5hbWUsIChGWF9MUFZPSUQmKXBEYXRhKTsNCi0JCWRlbGV0ZSBwRGF0YTsNCi0JfQ0KLQ0KLQltX21hcEdsb2JhbC5SZW1vdmVBbGwoKTsNCi19DQotDQotDQotRlhfQk9PTCBnbG9iYWxfYWx0ZXJuYXRlOjpTZXRHbG9iYWxWYXJpYWJsZXMoRlhfTFBDU1RSIHByb3BuYW1lLCBpbnQgblR5cGUsIA0KLQkJCQlkb3VibGUgZERhdGEsIGJvb2wgYkRhdGEsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzRGF0YSwgSlNPYmplY3QgcERhdGEsIGJvb2wgYkRlZmF1bHRQZXJzaXN0ZW50KQ0KLXsNCi0JaWYgKHByb3BuYW1lID09IE5VTEwpIHJldHVybiBGQUxTRTsNCi0NCi0JanNfZ2xvYmFsX2RhdGEqIHBUZW1wID0gTlVMTDsNCi0JbV9tYXBHbG9iYWwuTG9va3VwKHByb3BuYW1lLCAoRlhfTFBWT0lEJilwVGVtcCk7DQotDQotCWlmIChwVGVtcCkNCi0Jew0KLQkJaWYgKHBUZW1wLT5iRGVsZXRlZCB8fCBwVGVtcC0+blR5cGUgIT0gblR5cGUpDQotCQl7DQotCQkJcFRlbXAtPmREYXRhID0gMDsNCi0JCQlwVGVtcC0+YkRhdGEgPSAwOw0KLQkJCXBUZW1wLT5zRGF0YSA9ICIiOw0KLQkJCXBUZW1wLT5uVHlwZSA9IG5UeXBlOw0KLQkJfQ0KLQ0KLQkJcFRlbXAtPmJEZWxldGVkID0gRkFMU0U7DQotDQotCQlzd2l0Y2ggKG5UeXBlKQ0KLQkJew0KLQkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfTlVNQkVSOg0KLQkJCXsNCi0JCQkJcFRlbXAtPmREYXRhID0gZERhdGE7DQotCQkJfQ0KLQkJCWJyZWFrOw0KLQkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfQk9PTEVBTjoNCi0JCQl7DQotCQkJCXBUZW1wLT5iRGF0YSA9IGJEYXRhOw0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX1NUUklORzoNCi0JCQl7DQotCQkJCXBUZW1wLT5zRGF0YSA9IHNEYXRhOw0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX09CSkVDVDoNCi0JCQl7DQotCQkJCXBUZW1wLT5wRGF0YS5SZXNldChKU19HZXRSdW50aW1lKHBEYXRhKSwgcERhdGEpOw0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX05VTEw6DQotCQkJYnJlYWs7DQotCQlkZWZhdWx0Og0KLQkJCXJldHVybiBGQUxTRTsNCi0JCX0JDQotDQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQ0KLQlqc19nbG9iYWxfZGF0YSogcE5ld0RhdGEgPSBOVUxMOw0KLQ0KLQlzd2l0Y2ggKG5UeXBlKQ0KLQl7DQotCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX05VTUJFUjoNCi0JCXsNCi0JCQlwTmV3RGF0YSA9IG5ldyBqc19nbG9iYWxfZGF0YTsNCi0JCQlwTmV3RGF0YS0+blR5cGUgPSBKU19HTE9CQUxEQVRBX1RZUEVfTlVNQkVSOw0KLQkJCXBOZXdEYXRhLT5kRGF0YSA9IGREYXRhOw0KLQkJCXBOZXdEYXRhLT5iUGVyc2lzdGVudCA9IGJEZWZhdWx0UGVyc2lzdGVudDsNCi0JCX0NCi0JCWJyZWFrOw0KLQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9CT09MRUFOOg0KLQkJew0KLQkJCXBOZXdEYXRhID0gbmV3IGpzX2dsb2JhbF9kYXRhOw0KLQkJCXBOZXdEYXRhLT5uVHlwZSA9IEpTX0dMT0JBTERBVEFfVFlQRV9CT09MRUFOOw0KLQkJCXBOZXdEYXRhLT5iRGF0YSA9IGJEYXRhOw0KLQkJCXBOZXdEYXRhLT5iUGVyc2lzdGVudCA9IGJEZWZhdWx0UGVyc2lzdGVudDsNCi0JCX0NCi0JCWJyZWFrOw0KLQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9TVFJJTkc6DQotCQl7DQotCQkJcE5ld0RhdGEgPSBuZXcganNfZ2xvYmFsX2RhdGE7DQotCQkJcE5ld0RhdGEtPm5UeXBlID0gSlNfR0xPQkFMREFUQV9UWVBFX1NUUklORzsNCi0JCQlwTmV3RGF0YS0+c0RhdGEgPSBzRGF0YTsNCi0JCQlwTmV3RGF0YS0+YlBlcnNpc3RlbnQgPSBiRGVmYXVsdFBlcnNpc3RlbnQ7DQotCQl9DQotCQlicmVhazsNCi0JY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfT0JKRUNUOg0KLQkJew0KLQkJCXBOZXdEYXRhID0gbmV3IGpzX2dsb2JhbF9kYXRhOw0KLQkJCXBOZXdEYXRhLT5uVHlwZSA9IEpTX0dMT0JBTERBVEFfVFlQRV9PQkpFQ1Q7DQotCQkJcE5ld0RhdGEtPnBEYXRhLlJlc2V0KEpTX0dldFJ1bnRpbWUocERhdGEpLCBwRGF0YSk7DQotCQkJcE5ld0RhdGEtPmJQZXJzaXN0ZW50ID0gYkRlZmF1bHRQZXJzaXN0ZW50Ow0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX05VTEw6DQotCQl7DQotCQkJcE5ld0RhdGEgPSBuZXcganNfZ2xvYmFsX2RhdGE7DQotCQkJcE5ld0RhdGEtPm5UeXBlID0gSlNfR0xPQkFMREFUQV9UWVBFX05VTEw7DQotCQkJcE5ld0RhdGEtPmJQZXJzaXN0ZW50ID0gYkRlZmF1bHRQZXJzaXN0ZW50Ow0KLQkJfQ0KLQkJYnJlYWs7DQotCWRlZmF1bHQ6DQotCQlyZXR1cm4gRkFMU0U7DQotCX0JDQotDQotCW1fbWFwR2xvYmFsLlNldEF0KHByb3BuYW1lLCAoRlhfTFBWT0lEKXBOZXdEYXRhKTsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSmF2YVNjcmlwdC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9JSmF2YVNjcmlwdC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19EZWZpbmUuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfT2JqZWN0LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1ZhbHVlLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0dsb2JhbERhdGEuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvZ2xvYmFsLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0V2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19Db250ZXh0LmgiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZ2xvYmFsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQkVHSU5fSlNfU1RBVElDX0NPTlNUKENKU19HbG9iYWwpCitFTkRfSlNfU1RBVElDX0NPTlNUKCkKKworQkVHSU5fSlNfU1RBVElDX1BST1AoQ0pTX0dsb2JhbCkKK0VORF9KU19TVEFUSUNfUFJPUCgpCisKK0JFR0lOX0pTX1NUQVRJQ19NRVRIT0QoQ0pTX0dsb2JhbCkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKHNldFBlcnNpc3RlbnQsIDIpCitFTkRfSlNfU1RBVElDX01FVEhPRCgpCisKK0lNUExFTUVOVF9TUEVDSUFMX0pTX0NMQVNTKENKU19HbG9iYWwsIGdsb2JhbF9hbHRlcm5hdGUsIGdsb2JhbCk7CisKK0ZYX0JPT0wJQ0pTX0dsb2JhbDo6SW5pdEluc3RhbmNlKElGWEpTX0NvbnRleHQqIGNjKQoreworCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCopY2M7CisJQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOworCisJZ2xvYmFsX2FsdGVybmF0ZSogcEdsb2JhbCA9IChnbG9iYWxfYWx0ZXJuYXRlKilHZXRFbWJlZE9iamVjdCgpOworCUFTU0VSVChwR2xvYmFsICE9IE5VTEwpOworCQorCXBHbG9iYWwtPkluaXRpYWwocENvbnRleHQtPkdldFJlYWRlckFwcCgpKTsKKwkKKwlyZXR1cm4gVFJVRTsKK307CisKK2dsb2JhbF9hbHRlcm5hdGU6Omdsb2JhbF9hbHRlcm5hdGUoQ0pTX09iamVjdCogcEpTT2JqZWN0KQorCTogQ0pTX0VtYmVkT2JqKHBKU09iamVjdCksCisJbV9wQXBwKE5VTEwpCit7Cit9CisKK2dsb2JhbF9hbHRlcm5hdGU6On5nbG9iYWxfYWx0ZXJuYXRlKHZvaWQpCit7CisJQVNTRVJUKG1fcEFwcCAhPSBOVUxMKTsKKworLy8JQ29tbWl0R2xvYmFsUGVyc2lzaXRlbnRWYXJpYWJsZXMoKTsKKwlEZXN0cm95R2xvYmFsUGVyc2lzaXRlbnRWYXJpYWJsZXMoKTsKKworCUNKU19SdW50aW1lRmFjdG9yeSogcEZhY3RvcnkgPSBtX3BBcHAtPm1fcEpTUnVudGltZUZhY3Rvcnk7CisJQVNTRVJUKHBGYWN0b3J5KTsKKworCXBGYWN0b3J5LT5SZWxlYXNlR2xvYmFsRGF0YSgpOworfQorICAKK3ZvaWQgZ2xvYmFsX2FsdGVybmF0ZTo6SW5pdGlhbChDUERGRG9jX0Vudmlyb25tZW50KiBwQXBwKQoreworCW1fcEFwcCA9IHBBcHA7CisKKwlDSlNfUnVudGltZUZhY3RvcnkqIHBGYWN0b3J5ID0gcEFwcC0+bV9wSlNSdW50aW1lRmFjdG9yeTsKKwlBU1NFUlQocEZhY3RvcnkpOworCW1fcEdsb2JhbERhdGEgPSBwRmFjdG9yeS0+TmV3R2xvYmFsRGF0YShwQXBwKTsKKwlVcGRhdGVHbG9iYWxQZXJzaXN0ZW50VmFyaWFibGVzKCk7Cit9CisKK0ZYX0JPT0wJZ2xvYmFsX2FsdGVybmF0ZTo6UXVlcnlQcm9wZXJ0eShGWF9MUENXU1RSIHByb3BuYW1lKQoreworCXJldHVybiBDRlhfV2lkZVN0cmluZyhwcm9wbmFtZSkgIT0gTCJzZXRQZXJzaXN0ZW50IjsKK30KKworRlhfQk9PTAlnbG9iYWxfYWx0ZXJuYXRlOjpEZWxQcm9wZXJ0eShJRlhKU19Db250ZXh0KiBjYywgRlhfTFBDV1NUUiBwcm9wbmFtZSwgSlNfRXJyb3JTdHJpbmcmIHNFcnJvcikKK3sKKwlqc19nbG9iYWxfZGF0YSogcERhdGEgPSBOVUxMOworCUNGWF9CeXRlU3RyaW5nIHNQcm9wTmFtZSA9IENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShwcm9wbmFtZSk7CisKKwlpZiAobV9tYXBHbG9iYWwuTG9va3VwKHNQcm9wTmFtZSwgKEZYX0xQVk9JRCYpcERhdGEpKQorCXsKKwkJcERhdGEtPmJEZWxldGVkID0gVFJVRTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIGdsb2JhbF9hbHRlcm5hdGU6OkRvUHJvcGVydHkoSUZYSlNfQ29udGV4dCogY2MsIEZYX0xQQ1dTVFIgcHJvcG5hbWUsIENKU19Qcm9wVmFsdWUmIHZwLCBKU19FcnJvclN0cmluZyYgc0Vycm9yKQoreworCWlmICh2cC5Jc1NldHRpbmcoKSkKKwl7CisJCUNGWF9CeXRlU3RyaW5nIHNQcm9wTmFtZSA9IENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShwcm9wbmFtZSk7CisJCXN3aXRjaCAodnAuR2V0VHlwZSgpKQorCQl7CisJCWNhc2UgVlRfbnVtYmVyOgorCQkJeworCQkJCWRvdWJsZSBkRGF0YTsKKwkJCQl2cCA+PiBkRGF0YTsKKwkJCQlyZXR1cm4gU2V0R2xvYmFsVmFyaWFibGVzKHNQcm9wTmFtZSwgSlNfR0xPQkFMREFUQV9UWVBFX05VTUJFUiwgZERhdGEsIGZhbHNlLCAiIiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBGQUxTRSk7CisJCQl9CisJCWNhc2UgVlRfYm9vbGVhbjoKKwkJCXsKKwkJCQlib29sIGJEYXRhOworCQkJCXZwID4+IGJEYXRhOworCQkJCXJldHVybiBTZXRHbG9iYWxWYXJpYWJsZXMoc1Byb3BOYW1lLCBKU19HTE9CQUxEQVRBX1RZUEVfQk9PTEVBTiwgMCwgKGJvb2wpdnAsICIiLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIEZBTFNFKTsKKwkJCX0KKwkJY2FzZSBWVF9zdHJpbmc6CisJCQl7CisJCQkJQ0ZYX0J5dGVTdHJpbmcgc0RhdGE7CisJCQkJdnAgPj4gc0RhdGE7CisJCQkJcmV0dXJuIFNldEdsb2JhbFZhcmlhYmxlcyhzUHJvcE5hbWUsIEpTX0dMT0JBTERBVEFfVFlQRV9TVFJJTkcsIDAsIGZhbHNlLCBzRGF0YSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCBGQUxTRSk7CisJCQl9CisJCWNhc2UgVlRfb2JqZWN0OgorCQkJeworCQkJCUpTT2JqZWN0IHBEYXRhID0gKEpTT2JqZWN0KXZwOworCQkJCXJldHVybiBTZXRHbG9iYWxWYXJpYWJsZXMoc1Byb3BOYW1lLCBKU19HTE9CQUxEQVRBX1RZUEVfT0JKRUNULCAwLCBmYWxzZSwgIiIsIHBEYXRhLCBGQUxTRSk7CisvLyAJCQkJZWxzZQorLy8gCQkJCXsKKy8vIAkJCQkJaWYgKHZwLklzQXJyYXlPYmplY3QoKSkKKy8vIAkJCQkJeworLy8gCQkJCQkJQ0pTX0FycmF5IGFycmF5OworLy8gCQkJCQkJdnAuQ29udmVydFRvQXJyYXkoYXJyYXkpOworLy8gCQkJCQkJcmV0dXJuIFNldEdsb2JhbFZhcmlhYmxlcyhzUHJvcE5hbWUsIEpTX0dMT0JBTERBVEFfVFlQRV9PQkpFQ1QsIDAsIGZhbHNlLCAiIiwgCisvLyAJCQkJCQkJKERvYmplY3QqKShEYXJyYXkqKWFycmF5LCBGQUxTRSk7CisvLyAJCQkJCX0KKy8vIAkJCQkJZWxzZQorLy8gCQkJCQkJcmV0dXJuIEZBTFNFOworLy8gCQkJCX0KKwkJCX0KKwkJY2FzZSBWVF9udWxsOgorCQkJeworCQkJCXJldHVybiBTZXRHbG9iYWxWYXJpYWJsZXMoc1Byb3BOYW1lLCBKU19HTE9CQUxEQVRBX1RZUEVfTlVMTCwgMCwgZmFsc2UsICIiLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIEZBTFNFKTsKKwkJCX0KKwkJY2FzZSBWVF91bmRlZmluZWQ6CisJCQl7CisJCQkJRGVsUHJvcGVydHkoY2MsIHByb3BuYW1lLCBzRXJyb3IpOworCQkJCXJldHVybiBUUlVFOworCQkJfQorCQlkZWZhdWx0OgorCQkJcmV0dXJuIEZBTFNFOworCQl9CisJfQorCWVsc2UKKwl7CisJCWpzX2dsb2JhbF9kYXRhKiBwRGF0YSA9IE5VTEw7CisJCUNGWF9CeXRlU3RyaW5nIHNQcm9wTmFtZSA9IENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShwcm9wbmFtZSk7CisKKwkJaWYgKG1fbWFwR2xvYmFsLkxvb2t1cChzUHJvcE5hbWUsIChGWF9MUFZPSUQmKXBEYXRhKSkKKwkJeworCQkJaWYgKHBEYXRhKQorCQkJeworCQkJCWlmICghcERhdGEtPmJEZWxldGVkKQorCQkJCXsKKwkJCQkJc3dpdGNoIChwRGF0YS0+blR5cGUpCisJCQkJCXsKKwkJCQkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfTlVNQkVSOgorCQkJCQkJdnAgPDwgcERhdGEtPmREYXRhOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX0JPT0xFQU46CisJCQkJCQl2cCA8PCBwRGF0YS0+YkRhdGE7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfU1RSSU5HOgorCQkJCQkJdnAgPDwgcERhdGEtPnNEYXRhOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX09CSkVDVDoKKwkJCQkJCXsKKwkJCQkJCQl2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iaiA9IHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6TmV3KHZwLkdldElzb2xhdGUoKSxwRGF0YS0+cERhdGEpOworCQkJCQkJCXZwIDw8IG9iajsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfTlVMTDoKKwkJCQkJCXZwLlNldE51bGwoKTsKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJcmV0dXJuIEZBTFNFOworCQkJCQl9CisJCQkJCXJldHVybiBUUlVFOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlyZXR1cm4gVFJVRTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJdnAuU2V0TnVsbCgpOworCQkJCXJldHVybiBUUlVFOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJdnAuU2V0TnVsbCgpOworCQkJcmV0dXJuIFRSVUU7CisJCX0KKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wgZ2xvYmFsX2FsdGVybmF0ZTo6c2V0UGVyc2lzdGVudChPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlpZiAocGFyYW1zLnNpemUoKSAhPSAyKQorCXsKKwkJLy9zRXJyb3IgPSBKU0dldFN0cmluZ0Zyb21JRChJRFNfU1RSSU5HX0pTUEFSQU1FUlJPUik7CQorCQlyZXR1cm4gRkFMU0U7CisJfQorCisJQ0ZYX0J5dGVTdHJpbmcgc05hbWUgPSBwYXJhbXNbMF07CisKKwlqc19nbG9iYWxfZGF0YSogcERhdGEgPSBOVUxMOworCWlmIChtX21hcEdsb2JhbC5Mb29rdXAoc05hbWUsIChGWF9MUFZPSUQmKXBEYXRhKSkKKwl7CisJCWlmIChwRGF0YSAmJiAhcERhdGEtPmJEZWxldGVkKQorCQl7CisJCQlwRGF0YS0+YlBlcnNpc3RlbnQgPSAoYm9vbClwYXJhbXNbMV07CisJCQlyZXR1cm4gVFJVRTsKKwkJfQorCX0KKworCS8vc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQoSURTX0pTUEFSQU1fSU5DT1JSRUNUKTsJCisJcmV0dXJuIEZBTFNFOworfQorCit2b2lkIGdsb2JhbF9hbHRlcm5hdGU6OlVwZGF0ZUdsb2JhbFBlcnNpc3RlbnRWYXJpYWJsZXMoKQoreworCUFTU0VSVChtX3BHbG9iYWxEYXRhICE9IE5VTEwpOworCisJZm9yIChpbnQgaT0wLHN6PW1fcEdsb2JhbERhdGEtPkdldFNpemUoKTsgaTxzejsgaSsrKQorCXsKKwkJQ0pTX0dsb2JhbERhdGFfRWxlbWVudCogcERhdGEgPSBtX3BHbG9iYWxEYXRhLT5HZXRBdChpKTsKKwkJQVNTRVJUKHBEYXRhICE9IE5VTEwpOworCisJCXN3aXRjaCAocERhdGEtPmRhdGEublR5cGUpCisJCXsKKwkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfTlVNQkVSOgorCQkJdGhpcy0+U2V0R2xvYmFsVmFyaWFibGVzKHBEYXRhLT5kYXRhLnNLZXksIEpTX0dMT0JBTERBVEFfVFlQRV9OVU1CRVIsIHBEYXRhLT5kYXRhLmREYXRhLCBmYWxzZSwgIiIsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgcERhdGEtPmJQZXJzaXN0ZW50ID09IDEpOworCQkJSlNfUHV0T2JqZWN0TnVtYmVyKE5VTEwsKEpTRlhPYmplY3QpKCptX3BKU09iamVjdCksCisJCQkJcERhdGEtPmRhdGEuc0tleS5VVEY4RGVjb2RlKCksIHBEYXRhLT5kYXRhLmREYXRhKTsKKwkJCWJyZWFrOworCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9CT09MRUFOOgorCQkJdGhpcy0+U2V0R2xvYmFsVmFyaWFibGVzKHBEYXRhLT5kYXRhLnNLZXksIEpTX0dMT0JBTERBVEFfVFlQRV9CT09MRUFOLCAwLCAoYm9vbCkocERhdGEtPmRhdGEuYkRhdGEgPT0gMSksICIiLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHBEYXRhLT5iUGVyc2lzdGVudCA9PSAxKTsKKwkJCUpTX1B1dE9iamVjdEJvb2xlYW4oTlVMTCwoSlNGWE9iamVjdCkoKm1fcEpTT2JqZWN0KSwKKwkJCQlwRGF0YS0+ZGF0YS5zS2V5LlVURjhEZWNvZGUoKSwgKGJvb2wpKHBEYXRhLT5kYXRhLmJEYXRhID09IDEpKTsKKwkJCWJyZWFrOworCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9TVFJJTkc6CisJCQl0aGlzLT5TZXRHbG9iYWxWYXJpYWJsZXMocERhdGEtPmRhdGEuc0tleSwgSlNfR0xPQkFMREFUQV9UWVBFX1NUUklORywgMCwgZmFsc2UsIHBEYXRhLT5kYXRhLnNEYXRhLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHBEYXRhLT5iUGVyc2lzdGVudCA9PSAxKTsKKwkJCUpTX1B1dE9iamVjdFN0cmluZyhOVUxMLChKU0ZYT2JqZWN0KSgqbV9wSlNPYmplY3QpLAorCQkJCXBEYXRhLT5kYXRhLnNLZXkuVVRGOERlY29kZSgpLCAKKwkJCQlwRGF0YS0+ZGF0YS5zRGF0YS5VVEY4RGVjb2RlKCkpOworCQkJYnJlYWs7CisJCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX09CSkVDVDoKKwkJCXsKKwkJCQlJSlNfUnVudGltZSogcFJ1bnRpbWUgPSBKU19HZXRSdW50aW1lKChKU0ZYT2JqZWN0KSgqbV9wSlNPYmplY3QpKTsKKwkJCQl2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHBPYmogPSBKU19OZXdGeER5bmFtaWNPYmoocFJ1bnRpbWUsIE5VTEwsIC0xKTsKKworCQkJCVB1dE9iamVjdFByb3BlcnR5KHBPYmosICZwRGF0YS0+ZGF0YSk7CisKKwkJCQl0aGlzLT5TZXRHbG9iYWxWYXJpYWJsZXMocERhdGEtPmRhdGEuc0tleSwgSlNfR0xPQkFMREFUQV9UWVBFX09CSkVDVCwgMCwgZmFsc2UsICIiLCAKKwkJCQkJKEpTT2JqZWN0KXBPYmosIHBEYXRhLT5iUGVyc2lzdGVudCA9PSAxKTsKKwkJCQlKU19QdXRPYmplY3RPYmplY3QoTlVMTCwoSlNGWE9iamVjdCkoKm1fcEpTT2JqZWN0KSwKKwkJCQkJcERhdGEtPmRhdGEuc0tleS5VVEY4RGVjb2RlKCksIChKU09iamVjdClwT2JqKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9OVUxMOgorCQkJdGhpcy0+U2V0R2xvYmFsVmFyaWFibGVzKHBEYXRhLT5kYXRhLnNLZXksIEpTX0dMT0JBTERBVEFfVFlQRV9OVUxMLCAwLCBmYWxzZSwgIiIsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgcERhdGEtPmJQZXJzaXN0ZW50ID09IDEpOworCQkJSlNfUHV0T2JqZWN0TnVsbChOVUxMLChKU0ZYT2JqZWN0KSgqbV9wSlNPYmplY3QpLAorCQkJCXBEYXRhLT5kYXRhLnNLZXkuVVRGOERlY29kZSgpKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCit2b2lkIGdsb2JhbF9hbHRlcm5hdGU6OkNvbW1pdEdsb2JhbFBlcnNpc2l0ZW50VmFyaWFibGVzKCkKK3sKKwlBU1NFUlQobV9wR2xvYmFsRGF0YSAhPSBOVUxMKTsKKworCUZYX1BPU0lUSU9OCSBwb3MgPSBtX21hcEdsb2JhbC5HZXRTdGFydFBvc2l0aW9uKCk7CisJd2hpbGUgKHBvcykKKwl7CisJCUNGWF9CeXRlU3RyaW5nIG5hbWU7IAorCQlqc19nbG9iYWxfZGF0YSogcERhdGEgPSBOVUxMOworCQltX21hcEdsb2JhbC5HZXROZXh0QXNzb2MocG9zLCBuYW1lLCAoRlhfTFBWT0lEJilwRGF0YSk7CisJCQorCQlpZiAocERhdGEpCisJCXsKKwkJCWlmIChwRGF0YS0+YkRlbGV0ZWQpCisJCQl7CisJCQkJbV9wR2xvYmFsRGF0YS0+RGVsZXRlR2xvYmFsVmFyaWFibGUobmFtZSk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJc3dpdGNoIChwRGF0YS0+blR5cGUpCisJCQkJeworCQkJCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX05VTUJFUjoKKwkJCQkJbV9wR2xvYmFsRGF0YS0+U2V0R2xvYmFsVmFyaWFibGVOdW1iZXIobmFtZSwgcERhdGEtPmREYXRhKTsKKwkJCQkJbV9wR2xvYmFsRGF0YS0+U2V0R2xvYmFsVmFyaWFibGVQZXJzaXN0ZW50KG5hbWUsIHBEYXRhLT5iUGVyc2lzdGVudCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX0JPT0xFQU46CisJCQkJCW1fcEdsb2JhbERhdGEtPlNldEdsb2JhbFZhcmlhYmxlQm9vbGVhbihuYW1lLCBwRGF0YS0+YkRhdGEpOworCQkJCQltX3BHbG9iYWxEYXRhLT5TZXRHbG9iYWxWYXJpYWJsZVBlcnNpc3RlbnQobmFtZSwgcERhdGEtPmJQZXJzaXN0ZW50KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfU1RSSU5HOgorCQkJCQltX3BHbG9iYWxEYXRhLT5TZXRHbG9iYWxWYXJpYWJsZVN0cmluZyhuYW1lLCBwRGF0YS0+c0RhdGEpOworCQkJCQltX3BHbG9iYWxEYXRhLT5TZXRHbG9iYWxWYXJpYWJsZVBlcnNpc3RlbnQobmFtZSwgcERhdGEtPmJQZXJzaXN0ZW50KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfT0JKRUNUOgorCQkJCQkvL2lmIChwRGF0YS0+cERhdGEpCisJCQkJCXsKKwkJCQkJCUNKU19HbG9iYWxWYXJpYWJsZUFycmF5IGFycmF5OworCQkJCQkJdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmogPSB2ODo6TG9jYWw8djg6Ok9iamVjdD46Ok5ldyhHZXRKU09iamVjdCgpLT5HZXRJc29sYXRlKCkscERhdGEtPnBEYXRhKTsKKwkJCQkJCU9iamVjdFRvQXJyYXkob2JqLCBhcnJheSk7CisJCQkJCQltX3BHbG9iYWxEYXRhLT5TZXRHbG9iYWxWYXJpYWJsZU9iamVjdChuYW1lLCBhcnJheSk7CisJCQkJCQltX3BHbG9iYWxEYXRhLT5TZXRHbG9iYWxWYXJpYWJsZVBlcnNpc3RlbnQobmFtZSwgcERhdGEtPmJQZXJzaXN0ZW50KTsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9OVUxMOgorCQkJCQltX3BHbG9iYWxEYXRhLT5TZXRHbG9iYWxWYXJpYWJsZU51bGwobmFtZSk7CisJCQkJCW1fcEdsb2JhbERhdGEtPlNldEdsb2JhbFZhcmlhYmxlUGVyc2lzdGVudChuYW1lLCBwRGF0YS0+YlBlcnNpc3RlbnQpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQgZ2xvYmFsX2FsdGVybmF0ZTo6T2JqZWN0VG9BcnJheSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHBPYmosIENKU19HbG9iYWxWYXJpYWJsZUFycmF5JiBhcnJheSkKK3sKKwl2ODo6SGFuZGxlPHY4OjpBcnJheT4gcEtleUxpc3QgPSBKU19HZXRPYmplY3RFbGVtZW50TmFtZXMocE9iaik7CisJaW50CW5PYmpFbGVtZW50cyA9IHBLZXlMaXN0LT5MZW5ndGgoKTsKKworCXY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4dCA9IHBPYmotPkNyZWF0aW9uQ29udGV4dCgpOworCXY4OjpJc29sYXRlKiBpc29sYXRlID0gY29udGV4dC0+R2V0SXNvbGF0ZSgpOworCisJZm9yIChpbnQgaT0wOyBpPG5PYmpFbGVtZW50czsgaSsrKQorCXsKKwkJCisJCUNGWF9XaWRlU3RyaW5nIHdzID0gSlNfVG9TdHJpbmcoSlNfR2V0QXJyYXlFbGVtbmV0KHBLZXlMaXN0LCBpKSk7CisJCUNGWF9CeXRlU3RyaW5nIHNLZXkgPSB3cy5VVEY4RW5jb2RlKCk7CisKKwkJdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHYgPSBKU19HZXRPYmplY3RFbGVtZW50KGlzb2xhdGUsIHBPYmosIChjb25zdCB3Y2hhcl90KikoRlhfTFBDV1NUUil3cyk7CisJCUZYSlNWQUxVRVRZUEUgdnQgPSBHRVRfVkFMVUVfVFlQRSh2KTsKKwkJc3dpdGNoICh2dCkKKwkJeworCQljYXNlIFZUX251bWJlcjoKKwkJCXsKKwkJCQlDSlNfS2V5VmFsdWUqIHBPYmpFbGVtZW50ID0gbmV3IENKU19LZXlWYWx1ZTsKKwkJCQlwT2JqRWxlbWVudC0+blR5cGUgPSBKU19HTE9CQUxEQVRBX1RZUEVfTlVNQkVSOworCQkJCXBPYmpFbGVtZW50LT5zS2V5ID0gc0tleTsKKwkJCQlwT2JqRWxlbWVudC0+ZERhdGEgPSBKU19Ub051bWJlcih2KTsKKwkJCQlhcnJheS5BZGQocE9iakVsZW1lbnQpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVlRfYm9vbGVhbjoKKwkJCXsKKwkJCQlDSlNfS2V5VmFsdWUqIHBPYmpFbGVtZW50ID0gbmV3IENKU19LZXlWYWx1ZTsKKwkJCQlwT2JqRWxlbWVudC0+blR5cGUgPSBKU19HTE9CQUxEQVRBX1RZUEVfQk9PTEVBTjsKKwkJCQlwT2JqRWxlbWVudC0+c0tleSA9IHNLZXk7CisJCQkJcE9iakVsZW1lbnQtPmREYXRhID0gSlNfVG9Cb29sZWFuKHYpOworCQkJCWFycmF5LkFkZChwT2JqRWxlbWVudCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBWVF9zdHJpbmc6CisJCQl7CisJCQkJQ0ZYX0J5dGVTdHJpbmcgc1ZhbHVlID0gQ0pTX1ZhbHVlKGlzb2xhdGUsIHYsIFZUX3N0cmluZyk7CisJCQkJQ0pTX0tleVZhbHVlKiBwT2JqRWxlbWVudCA9IG5ldyBDSlNfS2V5VmFsdWU7CisJCQkJcE9iakVsZW1lbnQtPm5UeXBlID0gSlNfR0xPQkFMREFUQV9UWVBFX1NUUklORzsKKwkJCQlwT2JqRWxlbWVudC0+c0tleSA9IHNLZXk7CisJCQkJcE9iakVsZW1lbnQtPnNEYXRhID0gc1ZhbHVlOworCQkJCWFycmF5LkFkZChwT2JqRWxlbWVudCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBWVF9vYmplY3Q6CisJCQl7CisJCQkJQ0pTX0tleVZhbHVlKiBwT2JqRWxlbWVudCA9IG5ldyBDSlNfS2V5VmFsdWU7CisJCQkJcE9iakVsZW1lbnQtPm5UeXBlID0gSlNfR0xPQkFMREFUQV9UWVBFX09CSkVDVDsKKwkJCQlwT2JqRWxlbWVudC0+c0tleSA9IHNLZXk7CisJCQkJT2JqZWN0VG9BcnJheShKU19Ub09iamVjdCh2KSwgcE9iakVsZW1lbnQtPm9iakRhdGEpOworCQkJCWFycmF5LkFkZChwT2JqRWxlbWVudCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBWVF9udWxsOgorCQkJeworCQkJCUNKU19LZXlWYWx1ZSogcE9iakVsZW1lbnQgPSBuZXcgQ0pTX0tleVZhbHVlOworCQkJCXBPYmpFbGVtZW50LT5uVHlwZSA9IEpTX0dMT0JBTERBVEFfVFlQRV9OVUxMOworCQkJCXBPYmpFbGVtZW50LT5zS2V5ID0gc0tleTsKKwkJCQlhcnJheS5BZGQocE9iakVsZW1lbnQpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KK30KKwordm9pZCBnbG9iYWxfYWx0ZXJuYXRlOjpQdXRPYmplY3RQcm9wZXJ0eSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHBPYmosIENKU19LZXlWYWx1ZSogcERhdGEpCit7CisJQVNTRVJUKHBEYXRhICE9IE5VTEwpOworCisJZm9yIChpbnQgaT0wLHN6PXBEYXRhLT5vYmpEYXRhLkNvdW50KCk7IGk8c3o7IGkrKykKKwl7CisJCUNKU19LZXlWYWx1ZSogcE9iakRhdGEgPSBwRGF0YS0+b2JqRGF0YS5HZXRBdChpKTsKKwkJQVNTRVJUKHBPYmpEYXRhICE9IE5VTEwpOworCisJCXN3aXRjaCAocE9iakRhdGEtPm5UeXBlKQorCQl7CisJCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX05VTUJFUjoKKwkJCUpTX1B1dE9iamVjdE51bWJlcihOVUxMLChKU09iamVjdClwT2JqLCBwT2JqRGF0YS0+c0tleS5VVEY4RGVjb2RlKCksIHBPYmpEYXRhLT5kRGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfQk9PTEVBTjoKKwkJCUpTX1B1dE9iamVjdEJvb2xlYW4oTlVMTCwoSlNPYmplY3QpcE9iaiwgcE9iakRhdGEtPnNLZXkuVVRGOERlY29kZSgpLCAoYm9vbCkocE9iakRhdGEtPmJEYXRhID09IDEpKTsKKwkJCWJyZWFrOworCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9TVFJJTkc6CisJCQlKU19QdXRPYmplY3RTdHJpbmcoTlVMTCwoSlNPYmplY3QpcE9iaiwgcE9iakRhdGEtPnNLZXkuVVRGOERlY29kZSgpLCBwT2JqRGF0YS0+c0RhdGEuVVRGOERlY29kZSgpKTsKKwkJCWJyZWFrOworCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9PQkpFQ1Q6CisJCQl7CisJCQkJSUpTX1J1bnRpbWUqIHBSdW50aW1lID0gSlNfR2V0UnVudGltZSgoSlNGWE9iamVjdCkoKm1fcEpTT2JqZWN0KSk7CisJCQkJdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBwTmV3T2JqID0gSlNfTmV3RnhEeW5hbWljT2JqKHBSdW50aW1lLCBOVUxMLCAtMSk7CisJCQkJUHV0T2JqZWN0UHJvcGVydHkocE5ld09iaiwgcE9iakRhdGEpOworCQkJCUpTX1B1dE9iamVjdE9iamVjdChOVUxMLCAoSlNPYmplY3QpcE9iaiwgcE9iakRhdGEtPnNLZXkuVVRGOERlY29kZSgpLCAoSlNPYmplY3QpcE5ld09iaik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfTlVMTDoKKwkJCUpTX1B1dE9iamVjdE51bGwoTlVMTCwoSlNPYmplY3QpcE9iaiwgcE9iakRhdGEtPnNLZXkuVVRGOERlY29kZSgpKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCit2b2lkIGdsb2JhbF9hbHRlcm5hdGU6OkRlc3Ryb3lHbG9iYWxQZXJzaXNpdGVudFZhcmlhYmxlcygpCit7CisJRlhfUE9TSVRJT04JIHBvcyA9IG1fbWFwR2xvYmFsLkdldFN0YXJ0UG9zaXRpb24oKTsKKwl3aGlsZSAocG9zKQorCXsKKwkJQ0ZYX0J5dGVTdHJpbmcgbmFtZTsgCisJCWpzX2dsb2JhbF9kYXRhKiBwRGF0YSA9IE5VTEw7CisJCW1fbWFwR2xvYmFsLkdldE5leHRBc3NvYyhwb3MsIG5hbWUsIChGWF9MUFZPSUQmKXBEYXRhKTsKKwkJZGVsZXRlIHBEYXRhOworCX0KKworCW1fbWFwR2xvYmFsLlJlbW92ZUFsbCgpOworfQorCisKK0ZYX0JPT0wgZ2xvYmFsX2FsdGVybmF0ZTo6U2V0R2xvYmFsVmFyaWFibGVzKEZYX0xQQ1NUUiBwcm9wbmFtZSwgaW50IG5UeXBlLCAKKwkJCQlkb3VibGUgZERhdGEsIGJvb2wgYkRhdGEsIGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzRGF0YSwgSlNPYmplY3QgcERhdGEsIGJvb2wgYkRlZmF1bHRQZXJzaXN0ZW50KQoreworCWlmIChwcm9wbmFtZSA9PSBOVUxMKSByZXR1cm4gRkFMU0U7CisKKwlqc19nbG9iYWxfZGF0YSogcFRlbXAgPSBOVUxMOworCW1fbWFwR2xvYmFsLkxvb2t1cChwcm9wbmFtZSwgKEZYX0xQVk9JRCYpcFRlbXApOworCisJaWYgKHBUZW1wKQorCXsKKwkJaWYgKHBUZW1wLT5iRGVsZXRlZCB8fCBwVGVtcC0+blR5cGUgIT0gblR5cGUpCisJCXsKKwkJCXBUZW1wLT5kRGF0YSA9IDA7CisJCQlwVGVtcC0+YkRhdGEgPSAwOworCQkJcFRlbXAtPnNEYXRhID0gIiI7CisJCQlwVGVtcC0+blR5cGUgPSBuVHlwZTsKKwkJfQorCisJCXBUZW1wLT5iRGVsZXRlZCA9IEZBTFNFOworCisJCXN3aXRjaCAoblR5cGUpCisJCXsKKwkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfTlVNQkVSOgorCQkJeworCQkJCXBUZW1wLT5kRGF0YSA9IGREYXRhOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX0JPT0xFQU46CisJCQl7CisJCQkJcFRlbXAtPmJEYXRhID0gYkRhdGE7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfU1RSSU5HOgorCQkJeworCQkJCXBUZW1wLT5zRGF0YSA9IHNEYXRhOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX09CSkVDVDoKKwkJCXsKKwkJCQlwVGVtcC0+cERhdGEuUmVzZXQoSlNfR2V0UnVudGltZShwRGF0YSksIHBEYXRhKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9OVUxMOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gRkFMU0U7CisJCX0JCisKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJanNfZ2xvYmFsX2RhdGEqIHBOZXdEYXRhID0gTlVMTDsKKworCXN3aXRjaCAoblR5cGUpCisJeworCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX05VTUJFUjoKKwkJeworCQkJcE5ld0RhdGEgPSBuZXcganNfZ2xvYmFsX2RhdGE7CisJCQlwTmV3RGF0YS0+blR5cGUgPSBKU19HTE9CQUxEQVRBX1RZUEVfTlVNQkVSOworCQkJcE5ld0RhdGEtPmREYXRhID0gZERhdGE7CisJCQlwTmV3RGF0YS0+YlBlcnNpc3RlbnQgPSBiRGVmYXVsdFBlcnNpc3RlbnQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfQk9PTEVBTjoKKwkJeworCQkJcE5ld0RhdGEgPSBuZXcganNfZ2xvYmFsX2RhdGE7CisJCQlwTmV3RGF0YS0+blR5cGUgPSBKU19HTE9CQUxEQVRBX1RZUEVfQk9PTEVBTjsKKwkJCXBOZXdEYXRhLT5iRGF0YSA9IGJEYXRhOworCQkJcE5ld0RhdGEtPmJQZXJzaXN0ZW50ID0gYkRlZmF1bHRQZXJzaXN0ZW50OworCQl9CisJCWJyZWFrOworCWNhc2UgSlNfR0xPQkFMREFUQV9UWVBFX1NUUklORzoKKwkJeworCQkJcE5ld0RhdGEgPSBuZXcganNfZ2xvYmFsX2RhdGE7CisJCQlwTmV3RGF0YS0+blR5cGUgPSBKU19HTE9CQUxEQVRBX1RZUEVfU1RSSU5HOworCQkJcE5ld0RhdGEtPnNEYXRhID0gc0RhdGE7CisJCQlwTmV3RGF0YS0+YlBlcnNpc3RlbnQgPSBiRGVmYXVsdFBlcnNpc3RlbnQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBKU19HTE9CQUxEQVRBX1RZUEVfT0JKRUNUOgorCQl7CisJCQlwTmV3RGF0YSA9IG5ldyBqc19nbG9iYWxfZGF0YTsKKwkJCXBOZXdEYXRhLT5uVHlwZSA9IEpTX0dMT0JBTERBVEFfVFlQRV9PQkpFQ1Q7CisJCQlwTmV3RGF0YS0+cERhdGEuUmVzZXQoSlNfR2V0UnVudGltZShwRGF0YSksIHBEYXRhKTsKKwkJCXBOZXdEYXRhLT5iUGVyc2lzdGVudCA9IGJEZWZhdWx0UGVyc2lzdGVudDsKKwkJfQorCQlicmVhazsKKwljYXNlIEpTX0dMT0JBTERBVEFfVFlQRV9OVUxMOgorCQl7CisJCQlwTmV3RGF0YSA9IG5ldyBqc19nbG9iYWxfZGF0YTsKKwkJCXBOZXdEYXRhLT5uVHlwZSA9IEpTX0dMT0JBTERBVEFfVFlQRV9OVUxMOworCQkJcE5ld0RhdGEtPmJQZXJzaXN0ZW50ID0gYkRlZmF1bHRQZXJzaXN0ZW50OworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBGQUxTRTsKKwl9CQorCisJbV9tYXBHbG9iYWwuU2V0QXQocHJvcG5hbWUsIChGWF9MUFZPSUQpcE5ld0RhdGEpOworCisJcmV0dXJuIFRSVUU7Cit9CmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L3JlcG9ydC5jcHAgYi9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L3JlcG9ydC5jcHAKaW5kZXggNTA2M2M2OC4uOWNiOWRhNSAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvamF2YXNjcmlwdC9yZXBvcnQuY3BwCisrKyBiL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvcmVwb3J0LmNwcApAQCAtMSw1MCArMSw1MCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KYXZhU2NyaXB0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9JSmF2YVNjcmlwdC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRGVmaW5lLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19PYmplY3QuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1ZhbHVlLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9yZXBvcnQuaCINCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQkVHSU5fSlNfU1RBVElDX0NPTlNUKENKU19SZXBvcnQpDQotRU5EX0pTX1NUQVRJQ19DT05TVCgpDQotDQotQkVHSU5fSlNfU1RBVElDX1BST1AoQ0pTX1JlcG9ydCkNCi1FTkRfSlNfU1RBVElDX1BST1AoKQ0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19NRVRIT0QoQ0pTX1JlcG9ydCkgDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoc2F2ZSwgMSkNCi0JSlNfU1RBVElDX01FVEhPRF9FTlRSWSh3cml0ZVRleHQsMSkNCi1FTkRfSlNfU1RBVElDX01FVEhPRCgpDQotDQotSU1QTEVNRU5UX0pTX0NMQVNTKENKU19SZXBvcnQsIFJlcG9ydCkNCi0JDQotUmVwb3J0OjpSZXBvcnQoQ0pTX09iamVjdCogcEpTT2JqZWN0KSA6IENKU19FbWJlZE9iaihwSlNPYmplY3QpDQotew0KLQ0KLX0NCi0NCi1SZXBvcnQ6On5SZXBvcnQoKQ0KLXsNCi0JDQotfQ0KLQ0KLUZYX0JPT0wgUmVwb3J0Ojp3cml0ZVRleHQoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlpZiAoSXNTYWZlTW9kZShjYykpIHJldHVybiBUUlVFOw0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBSZXBvcnQ6OnNhdmUoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlpZiAoSXNTYWZlTW9kZShjYykpIHJldHVybiBUUlVFOw0KLQlyZXR1cm4gVFJVRTsJDQotfQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSmF2YVNjcmlwdC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9JSmF2YVNjcmlwdC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19EZWZpbmUuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfT2JqZWN0LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1ZhbHVlLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L3JlcG9ydC5oIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0JFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfUmVwb3J0KQorRU5EX0pTX1NUQVRJQ19DT05TVCgpCisKK0JFR0lOX0pTX1NUQVRJQ19QUk9QKENKU19SZXBvcnQpCitFTkRfSlNfU1RBVElDX1BST1AoKQorCitCRUdJTl9KU19TVEFUSUNfTUVUSE9EKENKU19SZXBvcnQpIAorCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkoc2F2ZSwgMSkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKHdyaXRlVGV4dCwxKQorRU5EX0pTX1NUQVRJQ19NRVRIT0QoKQorCitJTVBMRU1FTlRfSlNfQ0xBU1MoQ0pTX1JlcG9ydCwgUmVwb3J0KQorCQorUmVwb3J0OjpSZXBvcnQoQ0pTX09iamVjdCogcEpTT2JqZWN0KSA6IENKU19FbWJlZE9iaihwSlNPYmplY3QpCit7CisKK30KKworUmVwb3J0Ojp+UmVwb3J0KCkKK3sKKwkKK30KKworRlhfQk9PTCBSZXBvcnQ6OndyaXRlVGV4dChPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlpZiAoSXNTYWZlTW9kZShjYykpIHJldHVybiBUUlVFOworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIFJlcG9ydDo6c2F2ZShPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlpZiAoSXNTYWZlTW9kZShjYykpIHJldHVybiBUUlVFOworCXJldHVybiBUUlVFOwkKK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvamF2YXNjcmlwdC91dGlsLmNwcCBiL2ZwZGZzZGsvc3JjL2phdmFzY3JpcHQvdXRpbC5jcHAKaW5kZXggYjczMDNhNy4uYmFmZGIyMiAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvamF2YXNjcmlwdC91dGlsLmNwcAorKysgYi9mcGRmc2RrL3NyYy9qYXZhc2NyaXB0L3V0aWwuY3BwCkBAIC0xLDY0OSArMSw2NDkgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSmF2YVNjcmlwdC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSUphdmFTY3JpcHQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0RlZmluZS5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfT2JqZWN0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19WYWx1ZS5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvdXRpbC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvUHVibGljTWV0aG9kcy5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvcmVzb3VyY2UuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0NvbnRleHQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0V2ZW50SGFuZGxlci5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfUnVudGltZS5oIg0KLQ0KLSNpZiBfRlhfT1NfICA9PSBfRlhfQU5EUk9JRF8NCi0jaW5jbHVkZSA8Y3R5cGUuaD4NCi0jZW5kaWYNCi0NCi1zdGF0aWMgdjg6Oklzb2xhdGUqIEdldElzb2xhdGUoSUZYSlNfQ29udGV4dCogY2MpDQotew0KLQlDSlNfQ29udGV4dCogcENvbnRleHQgPSAoQ0pTX0NvbnRleHQgKiljYzsNCi0JQVNTRVJUKHBDb250ZXh0ICE9IE5VTEwpOw0KLQ0KLQlDSlNfUnVudGltZSogcFJ1bnRpbWUgPSBwQ29udGV4dC0+R2V0SlNSdW50aW1lKCk7DQotCUFTU0VSVChwUnVudGltZSAhPSBOVUxMKTsNCi0NCi0JcmV0dXJuIHBSdW50aW1lLT5HZXRJc29sYXRlKCk7DQotfQ0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19DT05TVChDSlNfVXRpbCkNCi1FTkRfSlNfU1RBVElDX0NPTlNUKCkNCi0NCi1CRUdJTl9KU19TVEFUSUNfUFJPUChDSlNfVXRpbCkNCi1FTkRfSlNfU1RBVElDX1BST1AoKQ0KLQ0KLUJFR0lOX0pTX1NUQVRJQ19NRVRIT0QoQ0pTX1V0aWwpDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkocHJpbnRkLCAzKQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKHByaW50ZiwgMjApDQotCUpTX1NUQVRJQ19NRVRIT0RfRU5UUlkocHJpbnR4LCAyKQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKHNjYW5kLCAyKQ0KLQlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGJ5dGVUb0NoYXIsIDEpDQotRU5EX0pTX1NUQVRJQ19NRVRIT0QoKQ0KLQ0KLUlNUExFTUVOVF9KU19DTEFTUyhDSlNfVXRpbCx1dGlsKQ0KLQ0KLXV0aWw6OnV0aWwoQ0pTX09iamVjdCAqcEpTT2JqZWN0KSA6IENKU19FbWJlZE9iaihwSlNPYmplY3QpDQotew0KLX0NCi0NCi11dGlsOjp+dXRpbCh2b2lkKQ0KLXsNCi19DQotDQotDQotc3RydWN0IHN0cnVfVGJDb252ZXJ0DQotew0KLQlGWF9MUENXU1RSIGxwc3pKU01hcms7DQotCUZYX0xQQ1dTVFIgbHBzekNwcE1hcms7DQotfTsNCi0NCi1jb25zdCBzdHJ1X1RiQ29udmVydCBmY1RhYmxlW10gPSB7DQotCShGWF9MUENXU1RSKUwibW1tbSIsIChGWF9MUENXU1RSKUwiJUIiLA0KLQkoRlhfTFBDV1NUUilMIm1tbSIsIChGWF9MUENXU1RSKUwiJWIiLA0KLQkoRlhfTFBDV1NUUilMIm1tIiwgIChGWF9MUENXU1RSKUwiJW0iLA0KLQkvLyJtIg0KLQkoRlhfTFBDV1NUUilMImRkZGQiLCAoRlhfTFBDV1NUUilMIiVBIiwNCi0JKEZYX0xQQ1dTVFIpTCJkZGQiLCAoRlhfTFBDV1NUUilMIiVhIiwNCi0JKEZYX0xQQ1dTVFIpTCJkZCIsICAoRlhfTFBDV1NUUilMIiVkIiwNCi0JLy8iZCIsICAgIiV3IiwNCi0JKEZYX0xQQ1dTVFIpTCJ5eXl5IiwgKEZYX0xQQ1dTVFIpTCIlWSIsDQotCShGWF9MUENXU1RSKUwieXkiLCAgKEZYX0xQQ1dTVFIpTCIleSIsDQotCShGWF9MUENXU1RSKUwiSEgiLCAgKEZYX0xQQ1dTVFIpTCIlSCIsDQotCS8vIkgiDQotCShGWF9MUENXU1RSKUwiaGgiLCAgKEZYX0xQQ1dTVFIpTCIlSSIsDQotCS8vImgiDQotCShGWF9MUENXU1RSKUwiTU0iLCAgKEZYX0xQQ1dTVFIpTCIlTSIsDQotCS8vIk0iDQotCShGWF9MUENXU1RSKUwic3MiLCAgKEZYX0xQQ1dTVFIpTCIlUyIsDQotCS8vInMNCi0JKEZYX0xQQ1dTVFIpTCJUVCIsICAoRlhfTFBDV1NUUilMIiVwIiwNCi0JLy8idCINCi0jaWYgZGVmaW5lZChfV0lOMzIpDQotCShGWF9MUENXU1RSKUwidHQiLCAgKEZYX0xQQ1dTVFIpTCIlcCIsDQotCShGWF9MUENXU1RSKUwiaCIsICAoRlhfTFBDV1NUUilMIiUjSSIsDQotI2Vsc2UNCi0JKEZYX0xQQ1dTVFIpTCJ0dCIsICAoRlhfTFBDV1NUUilMIiVQIiwNCi0JKEZYX0xQQ1dTVFIpTCJoIiwgIChGWF9MUENXU1RSKUwiJWwiLA0KLSNlbmRpZg0KLX07DQotDQotI2RlZmluZSBVVElMX0lOVAkJCTANCi0jZGVmaW5lIFVUSUxfRE9VQkxFCQkJMQ0KLSNkZWZpbmUgVVRJTF9TVFJJTkcJCQkyDQotDQotaW50IHV0aWw6OlBhcnN0RGF0YVR5cGUoc3RkOjp3c3RyaW5nKiBzRm9ybWF0KQ0KLXsNCi0gICAgICAgIHNpemVfdCBpID0gMDsNCi0JYm9vbCBiUGVyY2VudCA9IEZBTFNFOw0KLQlmb3IgKGk9MDsgaTxzRm9ybWF0LT5sZW5ndGgoKTsgKytpKQ0KLQl7DQotCQl3Y2hhcl90IGMgPSAoKnNGb3JtYXQpW2ldOw0KLQkJaWYgKGMgPT0gTCclJykNCi0JCXsNCi0JCQliUGVyY2VudCA9IHRydWU7DQotCQkJY29udGludWU7DQotCQl9DQotDQotCQlpZiAoYlBlcmNlbnQpDQotCQl7DQotCQkJaWYgKGMgPT0gTCdjJyB8fCBjID09IEwnQycgfHwgYyA9PSBMJ2QnIHx8IGMgPT0gTCdpJyB8fCBjID09IEwnbycgfHwgYyA9PSBMJ3UnIHx8IGMgPT0gTCd4JyB8fCBjID09IEwnWCcpDQotCQkJew0KLQkJCQlyZXR1cm4gVVRJTF9JTlQ7DQotCQkJfQ0KLQkJCWVsc2UgaWYgKGMgPT0gTCdlJyB8fCBjID09IEwnRScgfHwgYyA9PSBMJ2YnIHx8IGMgPT0gTCdnJyB8fCBjID09IEwnRycpDQotCQkJew0KLQkJCQlyZXR1cm4gVVRJTF9ET1VCTEU7DQotCQkJfQ0KLQkJCWVsc2UgaWYgKGMgPT0gTCdzJyB8fCBjID09IEwnUycpDQotCQkJew0KLQkJCQkvLyBNYXAgcyB0byBTIHNpbmNlIHdlIGFsd2F5cyBkZWFsIGludGVybmFsbHkNCi0JCQkJLy8gd2l0aCB3Y2hhcl90IHN0cmluZ3MuDQotCQkJCSgqc0Zvcm1hdClbaV0gPSBMJ1MnOw0KLQkJCQlyZXR1cm4gVVRJTF9TVFJJTkc7DQotCQkJfQ0KLQkJCWVsc2UgaWYgKGMgPT0gTCcuJyB8fCBjID09IEwnKycgfHwgYyA9PSBMJy0nIHx8IGMgPT0gTCcjJyB8fCBjID09IEwnICcgfHwgQ0pTX1B1YmxpY01ldGhvZHM6OklzRGlnaXQoYykpDQotCQkJew0KLQkJCQljb250aW51ZTsNCi0JCQl9DQotCQkJZWxzZSBicmVhazsNCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gLTE7DQotfQ0KLQ0KLUZYX0JPT0wgdXRpbDo6cHJpbnRmKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JaW50IGlTaXplID0gcGFyYW1zLnNpemUoKTsNCi0JaWYgKGlTaXplIDwgMSkNCi0JCXJldHVybiBGQUxTRTsNCi0Jc3RkOjp3c3RyaW5nICBjX0NvbnZDaGFyKChjb25zdCB3Y2hhcl90KikoRlhfTFBDV1NUUilwYXJhbXNbMF0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKSk7DQotCXN0ZDo6dmVjdG9yPHN0ZDo6d3N0cmluZz4gY19zdHJDb252ZXJzOw0KLQlpbnQgaU9mZnNldCA9IDA7DQotCWludCBpT2ZmZW5kID0gMDsNCi0JY19Db252Q2hhci5pbnNlcnQoY19Db252Q2hhci5iZWdpbigpLEwnUycpOw0KLQl3aGlsZShpT2Zmc2V0ICE9IC0xKQ0KLQl7DQotCQlpT2ZmZW5kID0gY19Db252Q2hhci5maW5kKEwiJSIsaU9mZnNldCsxKTsNCi0JCXN0ZDo6d3N0cmluZyBzdHJTdWI7DQotCQlpZiAoaU9mZmVuZCA9PSAtMSkNCi0JCQlzdHJTdWIgPSBjX0NvbnZDaGFyLnN1YnN0cihpT2Zmc2V0KTsJCQkNCi0JCWVsc2UNCi0JCQlzdHJTdWIgPSBjX0NvbnZDaGFyLnN1YnN0cihpT2Zmc2V0ICxpT2ZmZW5kIC0gaU9mZnNldCk7DQotCQljX3N0ckNvbnZlcnMucHVzaF9iYWNrKHN0clN1Yik7DQotCQlpT2Zmc2V0ID0gaU9mZmVuZCA7DQotCX0NCi0NCi0Jc3RkOjp3c3RyaW5nIGNfc3RyUmVzdWx0Ow0KLQ0KLQkvL2ZvcihpbnQgaUluZGV4ID0gMTtpSW5kZXggPCBwYXJhbXMuc2l6ZSgpO2lJbmRleCsrKQ0KLQlzdGQ6OndzdHJpbmcgY19zdHJGb3JtYXQ7DQotCWZvcihpbnQgaUluZGV4ID0gMDtpSW5kZXggPCAoaW50KWNfc3RyQ29udmVycy5zaXplKCk7aUluZGV4KyspDQotCXsNCi0JCWNfc3RyRm9ybWF0ID0gY19zdHJDb252ZXJzW2lJbmRleF07DQotCQlpZiAoaUluZGV4ID09IDApDQotCQl7DQotCQkJY19zdHJSZXN1bHQgPSBjX3N0ckZvcm1hdDsNCi0JCQljb250aW51ZTsNCi0JCX0NCi0NCi0NCi0JCUNGWF9XaWRlU3RyaW5nIHN0clNlZ21lbnQ7DQotCQlpZiAoaUluZGV4ID49IGlTaXplKSB7DQotCQkJY19zdHJSZXN1bHQgKz0gY19zdHJGb3JtYXQ7DQotCQkJY29udGludWU7DQotCQl9DQotDQotCQlzd2l0Y2ggKFBhcnN0RGF0YVR5cGUoJmNfc3RyRm9ybWF0KSkNCi0JCXsNCi0JCQljYXNlIFVUSUxfSU5UOg0KLQkJCQlzdHJTZWdtZW50LkZvcm1hdCgoRlhfTFBDV1NUUiljX3N0ckZvcm1hdC5jX3N0cigpLChpbnQpcGFyYW1zW2lJbmRleF0pOw0KLQkJCQlicmVhazsNCi0JCQljYXNlIFVUSUxfRE9VQkxFOg0KLQkJCQlzdHJTZWdtZW50LkZvcm1hdCgoRlhfTFBDV1NUUiljX3N0ckZvcm1hdC5jX3N0cigpLChkb3VibGUpcGFyYW1zW2lJbmRleF0pOw0KLQkJCQlicmVhazsNCi0JCQljYXNlIFVUSUxfU1RSSU5HOg0KLQkJCQlzdHJTZWdtZW50LkZvcm1hdCgoRlhfTFBDV1NUUiljX3N0ckZvcm1hdC5jX3N0cigpLChGWF9MUENXU1RSKXBhcmFtc1tpSW5kZXhdLm9wZXJhdG9yIENGWF9XaWRlU3RyaW5nKCkpOw0KLQkJCQlicmVhazsNCi0JCQlkZWZhdWx0Og0KLQkJCQlzdHJTZWdtZW50LkZvcm1hdCgoRlhfTFBDV1NUUilMIiVTIiwgKEZYX0xQQ1dTVFIpY19zdHJGb3JtYXQuY19zdHIoKSk7DQotCQkJCWJyZWFrOw0KLQkJfQ0KLQkJY19zdHJSZXN1bHQgKz0gKHdjaGFyX3QqKXN0clNlZ21lbnQuR2V0QnVmZmVyKHN0clNlZ21lbnQuR2V0TGVuZ3RoKCkrMSk7DQotCX0NCi0NCi0JY19zdHJSZXN1bHQuZXJhc2UoY19zdHJSZXN1bHQuYmVnaW4oKSk7DQotCXZSZXQgPSAoRlhfTFBDV1NUUiljX3N0clJlc3VsdC5jX3N0cigpOw0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCB1dGlsOjpwcmludGQoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IEdldElzb2xhdGUoY2MpOw0KLQ0KLQlpbnQgaVNpemUgPSBwYXJhbXMuc2l6ZSgpOw0KLQlpZiAoaVNpemUgPCAyKQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQ0KLQlDSlNfVmFsdWUgcDEoaXNvbGF0ZSk7DQotCXAxID0gcGFyYW1zWzBdOw0KLQ0KLQlDSlNfVmFsdWUgcDIgPSBwYXJhbXNbMV07DQotCUNKU19EYXRlIGpzRGF0ZShpc29sYXRlKTsNCi0JaWYgKCFwMi5Db252ZXJ0VG9EYXRlKGpzRGF0ZSkpDQotCXsNCi0JCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKChDSlNfQ29udGV4dCopY2MsIElEU19TVFJJTkdfSlNQUklOVDEpOw0KLQkJcmV0dXJuIEZBTFNFOw0KLQl9DQotDQotCWlmICghanNEYXRlLklzVmFsaWREYXRlKCkpDQotCXsNCi0JCXNFcnJvciA9IEpTR2V0U3RyaW5nRnJvbUlEKChDSlNfQ29udGV4dCopY2MsIElEU19TVFJJTkdfSlNQUklOVDIpOw0KLQkJcmV0dXJuIEZBTFNFOw0KLQl9DQotDQotCWlmIChwMS5HZXRUeXBlKCkgPT0gVlRfbnVtYmVyKQ0KLQl7DQotCQlpbnQgbkZvcm1hdCA9IHAxOw0KLQ0KLQkJQ0ZYX1dpZGVTdHJpbmcgc3dSZXN1bHQ7DQotDQotCQlzd2l0Y2ggKG5Gb3JtYXQpDQotCQl7DQotCQljYXNlIDA6DQotCQkJc3dSZXN1bHQuRm9ybWF0KChGWF9MUENXU1RSKUwiRDolMDRkJTAyZCUwMmQlMDJkJTAyZCUwMmQiLCANCi0JCQkJanNEYXRlLkdldFllYXIoKSwNCi0JCQkJanNEYXRlLkdldE1vbnRoKCkgKyAxLA0KLQkJCQlqc0RhdGUuR2V0RGF5KCksDQotCQkJCWpzRGF0ZS5HZXRIb3VycygpLA0KLQkJCQlqc0RhdGUuR2V0TWludXRlcygpLA0KLQkJCQlqc0RhdGUuR2V0U2Vjb25kcygpKTsNCi0JCQlicmVhazsNCi0JCWNhc2UgMToNCi0JCQlzd1Jlc3VsdC5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlMDRkLiUwMmQuJTAyZCAlMDJkOiUwMmQ6JTAyZCIsIA0KLQkJCQlqc0RhdGUuR2V0WWVhcigpLA0KLQkJCQlqc0RhdGUuR2V0TW9udGgoKSArIDEsDQotCQkJCWpzRGF0ZS5HZXREYXkoKSwNCi0JCQkJanNEYXRlLkdldEhvdXJzKCksDQotCQkJCWpzRGF0ZS5HZXRNaW51dGVzKCksDQotCQkJCWpzRGF0ZS5HZXRTZWNvbmRzKCkpOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSAyOg0KLQkJCXN3UmVzdWx0LkZvcm1hdCgoRlhfTFBDV1NUUilMIiUwNGQvJTAyZC8lMDJkICUwMmQ6JTAyZDolMDJkIiwgDQotCQkJCWpzRGF0ZS5HZXRZZWFyKCksDQotCQkJCWpzRGF0ZS5HZXRNb250aCgpICsgMSwNCi0JCQkJanNEYXRlLkdldERheSgpLA0KLQkJCQlqc0RhdGUuR2V0SG91cnMoKSwNCi0JCQkJanNEYXRlLkdldE1pbnV0ZXMoKSwNCi0JCQkJanNEYXRlLkdldFNlY29uZHMoKSk7DQotCQkJYnJlYWs7DQotCQlkZWZhdWx0Og0KLQkJCXJldHVybiBGQUxTRTsNCi0JCX0NCi0NCi0JCXZSZXQgPSBzd1Jlc3VsdDsNCi0JCXJldHVybiBUUlVFOw0KLQl9DQotCWVsc2UgaWYgKHAxLkdldFR5cGUoKSA9PSBWVF9zdHJpbmcpDQotCXsNCi0JCXN0ZDo6YmFzaWNfc3RyaW5nPHdjaGFyX3Q+IGNGb3JtYXQgPSAod2NoYXJfdCopKEZYX0xQQ1dTVFIpcDEub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsJCQ0KLQ0KLQkJYm9vbCBiWEZBUGljdHVyZSA9IGZhbHNlOw0KLQkJaWYgKGlTaXplID4gMikNCi0JCXsNCi0JCQkvL0NKU19WYWx1ZSB2YWx1ZTsNCi0JCQliWEZBUGljdHVyZSA9IHBhcmFtc1syXTsNCi0JCX0NCi0NCi0JCWlmIChiWEZBUGljdHVyZSkNCi0JCXsNCi0JCQlyZXR1cm4gRkFMU0U7IC8vY3VycmVudGx5LCBpdCBkb2Vzbid0IHN1cHBvcnQgWEZBUGljdHVyZS4NCi0JCX0NCi0NCi0gICAgICAgIGludCBpSW5kZXg7DQotCQlmb3IoaUluZGV4ID0gMDtpSW5kZXg8c2l6ZW9mKGZjVGFibGUpL3NpemVvZihzdHJ1X1RiQ29udmVydCk7aUluZGV4KyspDQotCQl7DQotCQkJaW50IGlTdGFydCA9IDA7DQotCQkJaW50IGlFbmQ7DQotCQkJd2hpbGUoKGlFbmQgPSBjRm9ybWF0LmZpbmQoKENGWF9XaWRlU3RyaW5nKWZjVGFibGVbaUluZGV4XS5scHN6SlNNYXJrLCBpU3RhcnQpKSAhPSAtMSkNCi0JCQl7DQotCQkJCWNGb3JtYXQucmVwbGFjZShpRW5kLCBGWFNZU193Y3NsZW4oZmNUYWJsZVtpSW5kZXhdLmxwc3pKU01hcmspLCAoQ0ZYX1dpZGVTdHJpbmcpZmNUYWJsZVtpSW5kZXhdLmxwc3pDcHBNYXJrKTsNCi0JCQkJaVN0YXJ0ID0gaUVuZDsNCi0JCQl9DQotCQl9DQotDQotCQlpbnQgaVllYXIsaU1vbnRoLGlEYXksaUhvdXIsaU1pbixpU2VjOw0KLQkJaVllYXIgPSBqc0RhdGUuR2V0WWVhcigpOw0KLQkJaU1vbnRoID0ganNEYXRlLkdldE1vbnRoKCk7DQotCQlpRGF5ID0ganNEYXRlLkdldERheSgpOw0KLQkJaUhvdXIgPSBqc0RhdGUuR2V0SG91cnMoKTsNCi0JCWlNaW4gPSBqc0RhdGUuR2V0TWludXRlcygpOw0KLQkJaVNlYyA9IGpzRGF0ZS5HZXRTZWNvbmRzKCk7DQotDQotCQlzdHJ1Y3QgdG0gdGltZSA9IHswfTsNCi0JCXRpbWUudG1feWVhciA9IGlZZWFyLTE5MDA7DQotCQl0aW1lLnRtX21vbiA9IGlNb250aDsNCi0JCXRpbWUudG1fbWRheSA9IGlEYXk7DQotCQl0aW1lLnRtX2hvdXIgPSBpSG91cjsNCi0JCXRpbWUudG1fbWluID0gaU1pbjsNCi0JCXRpbWUudG1fc2VjID0gaVNlYzsNCi0JCS8vQ09sZURhdGVUaW1lIGNwcFRtKGlZZWFyLGlNb250aCsxLGlEYXksaUhvdXIsaU1pbixpU2VjKTsNCi0JCS8vQ1N0cmluZyBzdHJGb3JtYXQgPSBjcHBUbS5Gb3JtYXQoY0Zvcm1hdC5jX3N0cigpKTsNCi0NCi0JCXN0cnVjdCBzdHJ1X1RiQ29udmVydEFkDQotCQl7DQotCQkJRlhfTFBDV1NUUiBscHN6SlNNYXJrOw0KLQkJCWludCAgICAgaVZhbHVlOw0KLQkJfTsNCi0NCi0JCXN0cnVfVGJDb252ZXJ0QWQgY1RhYmxlQWRbXSA9ew0KLQkJCShGWF9MUENXU1RSKUwibSIsIGlNb250aCsxLA0KLQkJCQkoRlhfTFBDV1NUUilMImQiLCBpRGF5LA0KLQkJCQkoRlhfTFBDV1NUUilMIkgiLCBpSG91ciwNCi0JCQkJKEZYX0xQQ1dTVFIpTCJoIiwgaUhvdXI+MTI/aUhvdXItMTI6aUhvdXIsDQotCQkJCShGWF9MUENXU1RSKUwiTSIsIGlNaW4sDQotCQkJCShGWF9MUENXU1RSKUwicyIsIGlTZWMNCi0JCX07DQotDQotCQkvL2NGb3JtYXQgPSBzdHJGb3JtYXQuR2V0QnVmZmVyKHN0ckZvcm1hdC5HZXRMZW5ndGgoKSsxKTsNCi0JCWZvcihpSW5kZXggPSAwO2lJbmRleDxzaXplb2YoY1RhYmxlQWQpL3NpemVvZihzdHJ1X1RiQ29udmVydEFkKTtpSW5kZXgrKykNCi0JCXsNCi0JCQl3Y2hhcl90IHRzelZhbHVlWzEwXTsNCi0JCQkvL19pdG90KGNUYWJsZUFkW2lJbmRleF0uaVZhbHVlLHRzelZhbHVlLDEwKTsNCi0JCQlDRlhfV2lkZVN0cmluZyBzVmFsdWU7DQotCQkJc1ZhbHVlLkZvcm1hdCgoRlhfTFBDV1NUUilMIiVkIixjVGFibGVBZFtpSW5kZXhdLmlWYWx1ZSk7DQotCQkJbWVtY3B5KHRzelZhbHVlLCAod2NoYXJfdCAqKXNWYWx1ZS5HZXRCdWZmZXIoc1ZhbHVlLkdldExlbmd0aCgpKzEpLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc1ZhbHVlLkdldExlbmd0aCgpKzEpKnNpemVvZih3Y2hhcl90KSk7DQotDQotCQkJLy9zdHJGb3JtYXQuUmVwbGFjZShjVGFibGVBZFtpSW5kZXhdLmxwc3pKU01hcmssIiVkIik7DQotCQkJLy9zdHJGb3JtYXQuRm9ybWF0KHN0ckZvcm1hdCxjVGFibGVBZFtpSW5kZXhdLmlWYWx1ZSk7DQotCQkJaW50IGlTdGFydCA9IDA7DQotCQkJaW50IGlFbmQ7DQotCQkJd2hpbGUoKGlFbmQgPSBjRm9ybWF0LmZpbmQoKENGWF9XaWRlU3RyaW5nKWNUYWJsZUFkW2lJbmRleF0ubHBzekpTTWFyayxpU3RhcnQpKSAhPSAtMSkNCi0JCQl7DQotCQkJCWlmIChpRW5kID4gMCkNCi0JCQkJew0KLQkJCQkJaWYgKGNGb3JtYXRbaUVuZC0xXSA9PSBMJyUnKQ0KLQkJCQkJew0KLQkJCQkJCWlTdGFydCA9IGlFbmQrMTsNCi0JCQkJCQljb250aW51ZTsNCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCQljRm9ybWF0LnJlcGxhY2UoaUVuZCwgRlhTWVNfd2NzbGVuKGNUYWJsZUFkW2lJbmRleF0ubHBzekpTTWFyayksIHRzelZhbHVlKTsNCi0JCQkJaVN0YXJ0ID0gaUVuZDsNCi0JCQl9DQotCQl9DQotDQotCQlDRlhfV2lkZVN0cmluZyBzdHJGb3JtYXQ7DQotLy8JCXN0ckZvcm1hdC5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlZCwlZCwlZCwlZCwlZCwlZCIsaVllYXIsIGlNb250aCwgaURheSwgaUhvdXIsIGlNaW4sIGlTZWMpOw0KLS8vCQlDU3RyaW5nIHN0ckZvcm1hdCA9IGNwcFRtLkZvcm1hdChjRm9ybWF0LmNfc3RyKCkpOw0KLQkJd2NoYXJfdCBidWZbNjRdID0gezB9Ow0KLQkJc3RyRm9ybWF0ID0gd2NzZnRpbWUoYnVmLCA2NCwgY0Zvcm1hdC5jX3N0cigpLCAmdGltZSk7DQotCQljRm9ybWF0ID0gYnVmOw0KLQkJdlJldCA9IChGWF9MUENXU1RSKWNGb3JtYXQuY19zdHIoKTsNCi0JCS8vcnRSZXQgPSBzdHJGb3JtYXQuR2V0QnVmZmVyKHN0ckZvcm1hdC5HZXRMZW5ndGgoKSsxKTsNCi0JCXJldHVybiBUUlVFOw0KLQl9DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotdm9pZCB1dGlsOjpwcmludGQoY29uc3Qgc3RkOjp3c3RyaW5nICZjRm9ybWF0MiwgQ0pTX0RhdGUganNEYXRlLCBib29sIGJYRkFQaWN0dXJlLCBzdGQ6OndzdHJpbmcgJmNQdXJwb3NlKQ0KLXsNCi0Jc3RkOjp3c3RyaW5nIGNGb3JtYXQgPSBjRm9ybWF0MjsNCi0JICAgIA0KLQlpZiAoYlhGQVBpY3R1cmUpDQotCXsNCi0JCXJldHVybiA7IC8vY3VycmVudGx5LCBpdCBkb2Vzbid0IHN1cHBvcnQgWEZBUGljdHVyZS4NCi0JfQ0KLQ0KLSAgICBpbnQgaUluZGV4Ow0KLQlmb3IoaUluZGV4ID0gMDtpSW5kZXg8c2l6ZW9mKGZjVGFibGUpL3NpemVvZihzdHJ1X1RiQ29udmVydCk7aUluZGV4KyspDQotCXsNCi0JCWludCBpU3RhcnQgPSAwOw0KLQkJaW50IGlFbmQ7DQotCQl3aGlsZSgoaUVuZCA9IGNGb3JtYXQuZmluZCgoQ0ZYX1dpZGVTdHJpbmcpZmNUYWJsZVtpSW5kZXhdLmxwc3pKU01hcmssaVN0YXJ0KSkgIT0gLTEpDQotCQl7DQotCQkJY0Zvcm1hdC5yZXBsYWNlKGlFbmQsRlhTWVNfd2NzbGVuKGZjVGFibGVbaUluZGV4XS5scHN6SlNNYXJrKSwgKENGWF9XaWRlU3RyaW5nKWZjVGFibGVbaUluZGV4XS5scHN6Q3BwTWFyayk7DQotCQkJaVN0YXJ0ID0gaUVuZDsNCi0JCX0NCi0JfQ0KLQ0KLQlpbnQgaVllYXIsaU1vbnRoLGlEYXksaUhvdXIsaU1pbixpU2VjOw0KLQlpWWVhciA9IGpzRGF0ZS5HZXRZZWFyKCk7DQotCWlNb250aCA9IGpzRGF0ZS5HZXRNb250aCgpOw0KLQlpRGF5ID0ganNEYXRlLkdldERheSgpOw0KLQlpSG91ciA9IGpzRGF0ZS5HZXRIb3VycygpOw0KLQlpTWluID0ganNEYXRlLkdldE1pbnV0ZXMoKTsNCi0JaVNlYyA9IGpzRGF0ZS5HZXRTZWNvbmRzKCk7DQotDQotCXN0cnVjdCB0bSB0aW1lID0gezB9Ow0KLQl0aW1lLnRtX3llYXIgPSBpWWVhci0xOTAwOw0KLQl0aW1lLnRtX21vbiA9IGlNb250aDsNCi0JdGltZS50bV9tZGF5ID0gaURheTsNCi0JdGltZS50bV9ob3VyID0gaUhvdXI7DQotCXRpbWUudG1fbWluID0gaU1pbjsNCi0JdGltZS50bV9zZWMgPSBpU2VjOw0KLS8vCUNPbGVEYXRlVGltZSBjcHBUbShpWWVhcixpTW9udGgrMSxpRGF5LGlIb3VyLGlNaW4saVNlYyk7DQotCS8vQ1N0cmluZyBzdHJGb3JtYXQgPSBjcHBUbS5Gb3JtYXQoY0Zvcm1hdC5jX3N0cigpKTsNCi0NCi0Jc3RydWN0IHN0cnVfVGJDb252ZXJ0QWQNCi0Jew0KLQkJRlhfTFBDV1NUUiBscHN6SlNNYXJrOw0KLQkJaW50ICAgICBpVmFsdWU7DQotCX07DQotDQotCXN0cnVfVGJDb252ZXJ0QWQgY1RhYmxlQWRbXSA9ew0KLQkJKEZYX0xQQ1dTVFIpTCJtIiwgaU1vbnRoKzEsDQotCQkJKEZYX0xQQ1dTVFIpTCJkIiwgaURheSwNCi0JCQkoRlhfTFBDV1NUUilMIkgiLCBpSG91ciwNCi0JCQkoRlhfTFBDV1NUUilMImgiLCBpSG91cj4xMj9pSG91ci0xMjppSG91ciwNCi0JCQkoRlhfTFBDV1NUUilMIk0iLCBpTWluLA0KLQkJCShGWF9MUENXU1RSKUwicyIsIGlTZWMNCi0JfTsNCi0NCi0JLy9jRm9ybWF0ID0gc3RyRm9ybWF0LkdldEJ1ZmZlcihzdHJGb3JtYXQuR2V0TGVuZ3RoKCkrMSk7DQotCWZvcihpSW5kZXggPSAwO2lJbmRleDxzaXplb2YoY1RhYmxlQWQpL3NpemVvZihzdHJ1X1RiQ29udmVydEFkKTtpSW5kZXgrKykNCi0Jew0KLQkJd2NoYXJfdCB0c3pWYWx1ZVsxMF07DQotCQkvL19pdG90KGNUYWJsZUFkW2lJbmRleF0uaVZhbHVlLHRzelZhbHVlLDEwKTsNCi0JCUNGWF9XaWRlU3RyaW5nIHNWYWx1ZTsNCi0JCXNWYWx1ZS5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlZCIsY1RhYmxlQWRbaUluZGV4XS5pVmFsdWUpOw0KLQkJbWVtY3B5KHRzelZhbHVlLCAod2NoYXJfdCAqKXNWYWx1ZS5HZXRCdWZmZXIoc1ZhbHVlLkdldExlbmd0aCgpKzEpLHNWYWx1ZS5HZXRMZW5ndGgoKSpzaXplb2Yod2NoYXJfdCkpOw0KLQ0KLQ0KLQkJLy9zdHJGb3JtYXQuUmVwbGFjZShjVGFibGVBZFtpSW5kZXhdLmxwc3pKU01hcmssIiVkIik7DQotCQkvL3N0ckZvcm1hdC5Gb3JtYXQoc3RyRm9ybWF0LGNUYWJsZUFkW2lJbmRleF0uaVZhbHVlKTsNCi0JCWludCBpU3RhcnQgPSAwOw0KLQkJaW50IGlFbmQ7DQotCQl3aGlsZSgoaUVuZCA9IGNGb3JtYXQuZmluZCgoQ0ZYX1dpZGVTdHJpbmcpY1RhYmxlQWRbaUluZGV4XS5scHN6SlNNYXJrLGlTdGFydCkpICE9IC0xKQ0KLQkJew0KLQkJCWlmIChpRW5kID4gMCkNCi0JCQl7DQotCQkJCWlmIChjRm9ybWF0W2lFbmQtMV0gPT0gTCclJykNCi0JCQkJew0KLQkJCQkJaVN0YXJ0ID0gaUVuZCsxOw0KLQkJCQkJY29udGludWU7DQotCQkJCX0NCi0JCQl9DQotCQkJY0Zvcm1hdC5yZXBsYWNlKGlFbmQsRlhTWVNfd2NzbGVuKGNUYWJsZUFkW2lJbmRleF0ubHBzekpTTWFyayksdHN6VmFsdWUpOw0KLQkJCWlTdGFydCA9IGlFbmQ7DQotCQl9DQotCX0NCi0NCi0JCUNGWF9XaWRlU3RyaW5nIHN0ckZvcm1hdDsNCi0vLwkJc3RyRm9ybWF0LkZvcm1hdCgoRlhfTFBDV1NUUilMIiVkLCVkLCVkLCVkLCVkLCVkIixpWWVhciwgaU1vbnRoLCBpRGF5LCBpSG91ciwgaU1pbiwgaVNlYyk7DQotLy8JCUNTdHJpbmcgc3RyRm9ybWF0ID0gY3BwVG0uRm9ybWF0KGNGb3JtYXQuY19zdHIoKSk7DQotCQl3Y2hhcl90IGJ1Zls2NF0gPSB7MH07DQotCQlzdHJGb3JtYXQgPSB3Y3NmdGltZShidWYsIDY0LCBjRm9ybWF0LmNfc3RyKCksICZ0aW1lKTsNCi0JCWNGb3JtYXQgPSBidWY7DQotCQljUHVycG9zZSA9IGNGb3JtYXQ7DQotfQ0KLQ0KLUZYX0JPT0wgdXRpbDo6cHJpbnR4KE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0JaW50IGlTaXplID0gcGFyYW1zLnNpemUoKTsNCi0JaWYgKGlTaXplPDIpDQotCQlyZXR1cm4gRkFMU0U7DQotCUNGWF9XaWRlU3RyaW5nIHNGb3JtYXQgPSBwYXJhbXNbMF0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsNCi0JQ0ZYX1dpZGVTdHJpbmcgc1NvdXJjZSA9IHBhcmFtc1sxXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOw0KLQlzdGQ6OnN0cmluZyBjRm9ybWF0ID0gKEZYX0xQQ1NUUilDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUoc0Zvcm1hdCk7DQotCXN0ZDo6c3RyaW5nIGNTb3VyY2UgPSAoRlhfTFBDU1RSKUNGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShzU291cmNlKTsNCi0Jc3RkOjpzdHJpbmcgY0Rlc3Q7DQotCXByaW50eChjRm9ybWF0LGNTb3VyY2UsY0Rlc3QpOw0KLQl2UmV0ID0gY0Rlc3QuY19zdHIoKTsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgdXRpbDo6cHJpbnR4KGNvbnN0IHN0ZDo6c3RyaW5nICZjRm9ybWF0LGNvbnN0IHN0ZDo6c3RyaW5nICZjU291cmNlMixzdGQ6OnN0cmluZyAmY1B1cnBvc2UpDQotew0KLQlzdGQ6OnN0cmluZyBjU291cmNlKGNTb3VyY2UyKTsNCi0JaWYgKCFjUHVycG9zZS5lbXB0eSgpKQ0KLQkJLy9jUHVycG9zZS5jbGVhcigpOw0KLQkJY1B1cnBvc2UuZXJhc2UoKTsNCi0JaW50IGl0U291cmNlID0gMDsNCi0JaW50IGlTaXplID0gY1NvdXJjZS5zaXplKCk7DQotCWZvcihpbnQgaUluZGV4ID0gMDsgaUluZGV4IDwgKGludCljRm9ybWF0LnNpemUoKSAmJiBpdFNvdXJjZTxpU2l6ZTsgaUluZGV4KyspDQotCXsNCi0JCWNoYXIgbGV0dGVyID0gY0Zvcm1hdFtpSW5kZXhdOw0KLQkJc3dpdGNoKGxldHRlcikNCi0JCXsNCi0JCWNhc2UgJz8nOg0KLQkJCS8vY1B1cnBvc2UucHVzaF9iYWNrKGNTb3VyY2VbaXRTb3VyY2VdKTsNCi0JCQljUHVycG9zZSArPSBjU291cmNlW2l0U291cmNlXTsNCi0JCQlpdFNvdXJjZSsrOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSAnWCc6DQotCQkJew0KLQkJCQl3aGlsZShpdFNvdXJjZSA8IGlTaXplKQ0KLQkJCQl7DQotCQkJCQlpZiAoKGNTb3VyY2VbaXRTb3VyY2VdPj0nMCcmJmNTb3VyY2VbaXRTb3VyY2VdPD0nOScpIHx8IChjU291cmNlW2l0U291cmNlXT49J2EnICYmIGNTb3VyY2VbaXRTb3VyY2VdPD0neicpIHx8IChjU291cmNlW2l0U291cmNlXT49J0EnICYmIGNTb3VyY2VbaXRTb3VyY2VdPD0nWicpKQ0KLQkJCQkJew0KLQkJCQkJCS8vY1B1cnBvc2UucHVzaF9iYWNrKGNTb3VyY2VbaXRTb3VyY2VdKTsNCi0JCQkJCQljUHVycG9zZSArPSBjU291cmNlW2l0U291cmNlXTsNCi0JCQkJCQlpdFNvdXJjZSsrOw0KLQkJCQkJCWJyZWFrOw0KLQkJCQkJfQ0KLQkJCQkJaXRTb3VyY2UrKzsNCi0JCQkJfQ0KLQkJCQlicmVhazsNCi0JCQl9DQotCQkJYnJlYWs7DQotCQljYXNlICdBJzoNCi0JCQl7DQotCQkJCXdoaWxlKGl0U291cmNlIDwgaVNpemUpDQotCQkJCXsNCi0JCQkJCWlmICgoY1NvdXJjZVtpdFNvdXJjZV0+PSdhJyAmJiBjU291cmNlW2l0U291cmNlXTw9J3onKSB8fCAoY1NvdXJjZVtpdFNvdXJjZV0+PSdBJyAmJiBjU291cmNlW2l0U291cmNlXTw9J1onKSkNCi0JCQkJCXsNCi0JCQkJCQkvL2NQdXJwb3NlLnB1c2hfYmFjayhjU291cmNlW2l0U291cmNlXSk7DQotCQkJCQkJY1B1cnBvc2UgKz0gY1NvdXJjZVtpdFNvdXJjZV07DQotCQkJCQkJaXRTb3VyY2UrKzsNCi0JCQkJCQlicmVhazsNCi0JCQkJCX0NCi0JCQkJCWl0U291cmNlKys7DQotCQkJCX0NCi0JCQkJYnJlYWs7DQotCQkJfQ0KLQkJCWJyZWFrOw0KLQkJY2FzZSAnOSc6DQotCQkJew0KLQkJCQl3aGlsZShpdFNvdXJjZSA8IGlTaXplKQ0KLQkJCQl7DQotCQkJCQlpZiAoY1NvdXJjZVtpdFNvdXJjZV0+PScwJyYmY1NvdXJjZVtpdFNvdXJjZV08PSc5JykNCi0JCQkJCXsNCi0JCQkJCQkvL2NQdXJwb3NlLnB1c2hfYmFjayhjU291cmNlW2l0U291cmNlXSk7DQotCQkJCQkJY1B1cnBvc2UgKz0gY1NvdXJjZVtpdFNvdXJjZV07DQotCQkJCQkJaXRTb3VyY2UrKzsNCi0JCQkJCQlicmVhazsNCi0JCQkJCX0NCi0JCQkJCWl0U291cmNlKys7DQotCQkJCX0NCi0JCQkJYnJlYWs7DQotCQkJfQ0KLQkJY2FzZSAnKic6DQotCQkJew0KLQkJCQljUHVycG9zZS5hcHBlbmQoY1NvdXJjZSxpdFNvdXJjZSxpU2l6ZS1pdFNvdXJjZSk7DQotCQkJCWl0U291cmNlID0gaVNpemUtMTsNCi0JCQkJYnJlYWs7DQotCQkJfQ0KLQkJY2FzZSAnXFwnOg0KLQkJCWJyZWFrOw0KLQkJY2FzZSAnPic6DQotCQkJew0KLQkJCQlmb3Ioc3RkOjpzdHJpbmc6Oml0ZXJhdG9yIGl0ID0gY1NvdXJjZS5iZWdpbigpO2l0ICE9IGNTb3VyY2UuZW5kKCk7IGl0KyspDQotCQkJCXsNCi0JCQkJCSppdCA9IHRvdXBwZXIoKml0KTsNCi0JCQkJfQ0KLQkJCQlicmVhazsNCi0JCQl9DQotCQljYXNlICc8JzoNCi0JCQl7DQotCQkJCWZvcihzdGQ6OnN0cmluZzo6aXRlcmF0b3IgaXQgPSBjU291cmNlLmJlZ2luKCk7aXQgIT0gY1NvdXJjZS5lbmQoKTsgaXQrKykNCi0JCQkJew0KLQkJCQkJKml0ID0gdG9sb3dlcigqaXQpOw0KLQkJCQl9DQotCQkJCWJyZWFrOw0KLQkJCX0NCi0JCWNhc2UgJz0nOg0KLQkJCWJyZWFrOw0KLQkJZGVmYXVsdDoNCi0JCQkvL2NQdXJwb3NlLnB1c2hfYmFjayhsZXR0ZXIpOw0KLQkJCWNQdXJwb3NlICs9IGxldHRlcjsNCi0JCQlicmVhazsNCi0JCX0NCi0JfQ0KLX0NCi0NCi1GWF9CT09MIHV0aWw6OnNjYW5kKE9CSl9NRVRIT0RfUEFSQU1TKQ0KLXsNCi0Jdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSBHZXRJc29sYXRlKGNjKTsNCi0JaW50IGlTaXplID0gcGFyYW1zLnNpemUoKTsNCi0JaWYgKGlTaXplIDwgMikNCi0JCXJldHVybiBGQUxTRTsNCi0JQ0ZYX1dpZGVTdHJpbmcgc0Zvcm1hdCA9IHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOw0KLQlDRlhfV2lkZVN0cmluZyBzRGF0ZSA9IHBhcmFtc1sxXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOw0KLQ0KLQlkb3VibGUgZERhdGUgPSBKU19HZXREYXRlVGltZSgpOw0KLQlpZiAoc0RhdGUuR2V0TGVuZ3RoKCkgPiAwKQ0KLQl7DQotCQlGWF9CT09MIGJXcm9uZ0Zvcm1hdCA9IEZBTFNFOw0KLQkJZERhdGUgPSBDSlNfUHVibGljTWV0aG9kczo6TWFrZVJlZ3VsYXJEYXRlKHNEYXRlLHNGb3JtYXQsYldyb25nRm9ybWF0KTsNCi0JfQkNCi0JDQotCWlmICghSlNfUG9ydElzTmFuKGREYXRlKSkNCi0Jew0KLQkJQ0pTX0RhdGUgZGF0ZShpc29sYXRlLGREYXRlKTsNCi0JCXZSZXQgPSBkYXRlOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJdlJldC5TZXROdWxsKCk7DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0lOVDY0IEZYX2F0b2k2NChjb25zdCBjaGFyICpucHRyKQ0KLXsNCi0gICAgICAgIGludCBjOyAgICAgICAgICAgICAgLyogY3VycmVudCBjaGFyICovDQotICAgICAgICBGWF9JTlQ2NCB0b3RhbDsgICAgICAvKiBjdXJyZW50IHRvdGFsICovDQotICAgICAgICBpbnQgc2lnbjsgICAgICAgICAgIC8qIGlmICctJywgdGhlbiBuZWdhdGl2ZSwgb3RoZXJ3aXNlIHBvc2l0aXZlICovDQotDQotICAgICAgICAvKiBza2lwIHdoaXRlc3BhY2UgKi8NCi0gICAgICAgIHdoaWxlICggaXNzcGFjZSgoaW50KSh1bnNpZ25lZCBjaGFyKSpucHRyKSApDQotICAgICAgICAgICAgKytucHRyOw0KLQ0KLSAgICAgICAgYyA9IChpbnQpKHVuc2lnbmVkIGNoYXIpKm5wdHIrKzsNCi0gICAgICAgIHNpZ24gPSBjOyAgICAgICAgICAgLyogc2F2ZSBzaWduIGluZGljYXRpb24gKi8NCi0gICAgICAgIGlmIChjID09ICctJyB8fCBjID09ICcrJykNCi0gICAgICAgICAgICBjID0gKGludCkodW5zaWduZWQgY2hhcikqbnB0cisrOyAgICAvKiBza2lwIHNpZ24gKi8NCi0NCi0gICAgICAgIHRvdGFsID0gMDsNCi0NCi0gICAgICAgIHdoaWxlIChpc2RpZ2l0KGMpKSB7DQotICAgICAgICAgICAgdG90YWwgPSAxMCAqIHRvdGFsICsgKGMgLSAnMCcpOyAgICAgLyogYWNjdW11bGF0ZSBkaWdpdCAqLw0KLSAgICAgICAgICAgIGMgPSAoaW50KSh1bnNpZ25lZCBjaGFyKSpucHRyKys7ICAgIC8qIGdldCBuZXh0IGNoYXIgKi8NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIGlmIChzaWduID09ICctJykNCi0gICAgICAgICAgICByZXR1cm4gLXRvdGFsOw0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgIHJldHVybiB0b3RhbDsgICAvKiByZXR1cm4gcmVzdWx0LCBuZWdhdGVkIGlmIG5lY2Vzc2FyeSAqLw0KLX0NCi0NCi1GWF9CT09MIHV0aWw6OmJ5dGVUb0NoYXIoT0JKX01FVEhPRF9QQVJBTVMpDQotew0KLQlpbnQgaVNpemUgPSBwYXJhbXMuc2l6ZSgpOw0KLQlpZiAoaVNpemUgPT0gMCkNCi0JCXJldHVybiBGQUxTRTsNCi0JaW50IG5CeXRlID0gKGludClwYXJhbXNbMF07DQotCXVuc2lnbmVkIGNoYXIgY0J5dGUgPSAodW5zaWduZWQgY2hhciluQnl0ZTsNCi0JQ0ZYX1dpZGVTdHJpbmcgY3NWYWx1ZTsNCi0JY3NWYWx1ZS5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlYyIsIGNCeXRlKTsNCi0JdlJldCA9IGNzVmFsdWU7IA0KLQlyZXR1cm4gVFJVRTsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KYXZhU2NyaXB0LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0lKYXZhU2NyaXB0LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0RlZmluZS5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9KU19PYmplY3QuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfVmFsdWUuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvdXRpbC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvamF2YXNjcmlwdC9QdWJsaWNNZXRob2RzLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L3Jlc291cmNlLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX0NvbnRleHQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL2phdmFzY3JpcHQvSlNfRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9qYXZhc2NyaXB0L0pTX1J1bnRpbWUuaCIKKworI2lmIF9GWF9PU18gID09IF9GWF9BTkRST0lEXworI2luY2x1ZGUgPGN0eXBlLmg+CisjZW5kaWYKKworc3RhdGljIHY4OjpJc29sYXRlKiBHZXRJc29sYXRlKElGWEpTX0NvbnRleHQqIGNjKQoreworCUNKU19Db250ZXh0KiBwQ29udGV4dCA9IChDSlNfQ29udGV4dCAqKWNjOworCUFTU0VSVChwQ29udGV4dCAhPSBOVUxMKTsKKworCUNKU19SdW50aW1lKiBwUnVudGltZSA9IHBDb250ZXh0LT5HZXRKU1J1bnRpbWUoKTsKKwlBU1NFUlQocFJ1bnRpbWUgIT0gTlVMTCk7CisKKwlyZXR1cm4gcFJ1bnRpbWUtPkdldElzb2xhdGUoKTsKK30KKworQkVHSU5fSlNfU1RBVElDX0NPTlNUKENKU19VdGlsKQorRU5EX0pTX1NUQVRJQ19DT05TVCgpCisKK0JFR0lOX0pTX1NUQVRJQ19QUk9QKENKU19VdGlsKQorRU5EX0pTX1NUQVRJQ19QUk9QKCkKKworQkVHSU5fSlNfU1RBVElDX01FVEhPRChDSlNfVXRpbCkKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKHByaW50ZCwgMykKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKHByaW50ZiwgMjApCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShwcmludHgsIDIpCisJSlNfU1RBVElDX01FVEhPRF9FTlRSWShzY2FuZCwgMikKKwlKU19TVEFUSUNfTUVUSE9EX0VOVFJZKGJ5dGVUb0NoYXIsIDEpCitFTkRfSlNfU1RBVElDX01FVEhPRCgpCisKK0lNUExFTUVOVF9KU19DTEFTUyhDSlNfVXRpbCx1dGlsKQorCit1dGlsOjp1dGlsKENKU19PYmplY3QgKnBKU09iamVjdCkgOiBDSlNfRW1iZWRPYmoocEpTT2JqZWN0KQoreworfQorCit1dGlsOjp+dXRpbCh2b2lkKQoreworfQorCisKK3N0cnVjdCBzdHJ1X1RiQ29udmVydAoreworCUZYX0xQQ1dTVFIgbHBzekpTTWFyazsKKwlGWF9MUENXU1RSIGxwc3pDcHBNYXJrOworfTsKKworY29uc3Qgc3RydV9UYkNvbnZlcnQgZmNUYWJsZVtdID0geworCShGWF9MUENXU1RSKUwibW1tbSIsIChGWF9MUENXU1RSKUwiJUIiLAorCShGWF9MUENXU1RSKUwibW1tIiwgKEZYX0xQQ1dTVFIpTCIlYiIsCisJKEZYX0xQQ1dTVFIpTCJtbSIsICAoRlhfTFBDV1NUUilMIiVtIiwKKwkvLyJtIgorCShGWF9MUENXU1RSKUwiZGRkZCIsIChGWF9MUENXU1RSKUwiJUEiLAorCShGWF9MUENXU1RSKUwiZGRkIiwgKEZYX0xQQ1dTVFIpTCIlYSIsCisJKEZYX0xQQ1dTVFIpTCJkZCIsICAoRlhfTFBDV1NUUilMIiVkIiwKKwkvLyJkIiwgICAiJXciLAorCShGWF9MUENXU1RSKUwieXl5eSIsIChGWF9MUENXU1RSKUwiJVkiLAorCShGWF9MUENXU1RSKUwieXkiLCAgKEZYX0xQQ1dTVFIpTCIleSIsCisJKEZYX0xQQ1dTVFIpTCJISCIsICAoRlhfTFBDV1NUUilMIiVIIiwKKwkvLyJIIgorCShGWF9MUENXU1RSKUwiaGgiLCAgKEZYX0xQQ1dTVFIpTCIlSSIsCisJLy8iaCIKKwkoRlhfTFBDV1NUUilMIk1NIiwgIChGWF9MUENXU1RSKUwiJU0iLAorCS8vIk0iCisJKEZYX0xQQ1dTVFIpTCJzcyIsICAoRlhfTFBDV1NUUilMIiVTIiwKKwkvLyJzCisJKEZYX0xQQ1dTVFIpTCJUVCIsICAoRlhfTFBDV1NUUilMIiVwIiwKKwkvLyJ0IgorI2lmIGRlZmluZWQoX1dJTjMyKQorCShGWF9MUENXU1RSKUwidHQiLCAgKEZYX0xQQ1dTVFIpTCIlcCIsCisJKEZYX0xQQ1dTVFIpTCJoIiwgIChGWF9MUENXU1RSKUwiJSNJIiwKKyNlbHNlCisJKEZYX0xQQ1dTVFIpTCJ0dCIsICAoRlhfTFBDV1NUUilMIiVQIiwKKwkoRlhfTFBDV1NUUilMImgiLCAgKEZYX0xQQ1dTVFIpTCIlbCIsCisjZW5kaWYKK307CisKKyNkZWZpbmUgVVRJTF9JTlQJCQkwCisjZGVmaW5lIFVUSUxfRE9VQkxFCQkJMQorI2RlZmluZSBVVElMX1NUUklORwkJCTIKKworaW50IHV0aWw6OlBhcnN0RGF0YVR5cGUoc3RkOjp3c3RyaW5nKiBzRm9ybWF0KQoreworICAgICAgICBzaXplX3QgaSA9IDA7CisJYm9vbCBiUGVyY2VudCA9IEZBTFNFOworCWZvciAoaT0wOyBpPHNGb3JtYXQtPmxlbmd0aCgpOyArK2kpCisJeworCQl3Y2hhcl90IGMgPSAoKnNGb3JtYXQpW2ldOworCQlpZiAoYyA9PSBMJyUnKQorCQl7CisJCQliUGVyY2VudCA9IHRydWU7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChiUGVyY2VudCkKKwkJeworCQkJaWYgKGMgPT0gTCdjJyB8fCBjID09IEwnQycgfHwgYyA9PSBMJ2QnIHx8IGMgPT0gTCdpJyB8fCBjID09IEwnbycgfHwgYyA9PSBMJ3UnIHx8IGMgPT0gTCd4JyB8fCBjID09IEwnWCcpCisJCQl7CisJCQkJcmV0dXJuIFVUSUxfSU5UOworCQkJfQorCQkJZWxzZSBpZiAoYyA9PSBMJ2UnIHx8IGMgPT0gTCdFJyB8fCBjID09IEwnZicgfHwgYyA9PSBMJ2cnIHx8IGMgPT0gTCdHJykKKwkJCXsKKwkJCQlyZXR1cm4gVVRJTF9ET1VCTEU7CisJCQl9CisJCQllbHNlIGlmIChjID09IEwncycgfHwgYyA9PSBMJ1MnKQorCQkJeworCQkJCS8vIE1hcCBzIHRvIFMgc2luY2Ugd2UgYWx3YXlzIGRlYWwgaW50ZXJuYWxseQorCQkJCS8vIHdpdGggd2NoYXJfdCBzdHJpbmdzLgorCQkJCSgqc0Zvcm1hdClbaV0gPSBMJ1MnOworCQkJCXJldHVybiBVVElMX1NUUklORzsKKwkJCX0KKwkJCWVsc2UgaWYgKGMgPT0gTCcuJyB8fCBjID09IEwnKycgfHwgYyA9PSBMJy0nIHx8IGMgPT0gTCcjJyB8fCBjID09IEwnICcgfHwgQ0pTX1B1YmxpY01ldGhvZHM6OklzRGlnaXQoYykpCisJCQl7CisJCQkJY29udGludWU7CisJCQl9CisJCQllbHNlIGJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIC0xOworfQorCitGWF9CT09MIHV0aWw6OnByaW50ZihPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlpbnQgaVNpemUgPSBwYXJhbXMuc2l6ZSgpOworCWlmIChpU2l6ZSA8IDEpCisJCXJldHVybiBGQUxTRTsKKwlzdGQ6OndzdHJpbmcgIGNfQ29udkNoYXIoKGNvbnN0IHdjaGFyX3QqKShGWF9MUENXU1RSKXBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpKTsKKwlzdGQ6OnZlY3RvcjxzdGQ6OndzdHJpbmc+IGNfc3RyQ29udmVyczsKKwlpbnQgaU9mZnNldCA9IDA7CisJaW50IGlPZmZlbmQgPSAwOworCWNfQ29udkNoYXIuaW5zZXJ0KGNfQ29udkNoYXIuYmVnaW4oKSxMJ1MnKTsKKwl3aGlsZShpT2Zmc2V0ICE9IC0xKQorCXsKKwkJaU9mZmVuZCA9IGNfQ29udkNoYXIuZmluZChMIiUiLGlPZmZzZXQrMSk7CisJCXN0ZDo6d3N0cmluZyBzdHJTdWI7CisJCWlmIChpT2ZmZW5kID09IC0xKQorCQkJc3RyU3ViID0gY19Db252Q2hhci5zdWJzdHIoaU9mZnNldCk7CQkJCisJCWVsc2UKKwkJCXN0clN1YiA9IGNfQ29udkNoYXIuc3Vic3RyKGlPZmZzZXQgLGlPZmZlbmQgLSBpT2Zmc2V0KTsKKwkJY19zdHJDb252ZXJzLnB1c2hfYmFjayhzdHJTdWIpOworCQlpT2Zmc2V0ID0gaU9mZmVuZCA7CisJfQorCisJc3RkOjp3c3RyaW5nIGNfc3RyUmVzdWx0OworCisJLy9mb3IoaW50IGlJbmRleCA9IDE7aUluZGV4IDwgcGFyYW1zLnNpemUoKTtpSW5kZXgrKykKKwlzdGQ6OndzdHJpbmcgY19zdHJGb3JtYXQ7CisJZm9yKGludCBpSW5kZXggPSAwO2lJbmRleCA8IChpbnQpY19zdHJDb252ZXJzLnNpemUoKTtpSW5kZXgrKykKKwl7CisJCWNfc3RyRm9ybWF0ID0gY19zdHJDb252ZXJzW2lJbmRleF07CisJCWlmIChpSW5kZXggPT0gMCkKKwkJeworCQkJY19zdHJSZXN1bHQgPSBjX3N0ckZvcm1hdDsKKwkJCWNvbnRpbnVlOworCQl9CisKKworCQlDRlhfV2lkZVN0cmluZyBzdHJTZWdtZW50OworCQlpZiAoaUluZGV4ID49IGlTaXplKSB7CisJCQljX3N0clJlc3VsdCArPSBjX3N0ckZvcm1hdDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3dpdGNoIChQYXJzdERhdGFUeXBlKCZjX3N0ckZvcm1hdCkpCisJCXsKKwkJCWNhc2UgVVRJTF9JTlQ6CisJCQkJc3RyU2VnbWVudC5Gb3JtYXQoKEZYX0xQQ1dTVFIpY19zdHJGb3JtYXQuY19zdHIoKSwoaW50KXBhcmFtc1tpSW5kZXhdKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVVRJTF9ET1VCTEU6CisJCQkJc3RyU2VnbWVudC5Gb3JtYXQoKEZYX0xQQ1dTVFIpY19zdHJGb3JtYXQuY19zdHIoKSwoZG91YmxlKXBhcmFtc1tpSW5kZXhdKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVVRJTF9TVFJJTkc6CisJCQkJc3RyU2VnbWVudC5Gb3JtYXQoKEZYX0xQQ1dTVFIpY19zdHJGb3JtYXQuY19zdHIoKSwoRlhfTFBDV1NUUilwYXJhbXNbaUluZGV4XS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJc3RyU2VnbWVudC5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlUyIsIChGWF9MUENXU1RSKWNfc3RyRm9ybWF0LmNfc3RyKCkpOworCQkJCWJyZWFrOworCQl9CisJCWNfc3RyUmVzdWx0ICs9ICh3Y2hhcl90KilzdHJTZWdtZW50LkdldEJ1ZmZlcihzdHJTZWdtZW50LkdldExlbmd0aCgpKzEpOworCX0KKworCWNfc3RyUmVzdWx0LmVyYXNlKGNfc3RyUmVzdWx0LmJlZ2luKCkpOworCXZSZXQgPSAoRlhfTFBDV1NUUiljX3N0clJlc3VsdC5jX3N0cigpOworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIHV0aWw6OnByaW50ZChPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IEdldElzb2xhdGUoY2MpOworCisJaW50IGlTaXplID0gcGFyYW1zLnNpemUoKTsKKwlpZiAoaVNpemUgPCAyKQorCQlyZXR1cm4gRkFMU0U7CisKKwlDSlNfVmFsdWUgcDEoaXNvbGF0ZSk7CisJcDEgPSBwYXJhbXNbMF07CisKKwlDSlNfVmFsdWUgcDIgPSBwYXJhbXNbMV07CisJQ0pTX0RhdGUganNEYXRlKGlzb2xhdGUpOworCWlmICghcDIuQ29udmVydFRvRGF0ZShqc0RhdGUpKQorCXsKKwkJc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQoKENKU19Db250ZXh0KiljYywgSURTX1NUUklOR19KU1BSSU5UMSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlpZiAoIWpzRGF0ZS5Jc1ZhbGlkRGF0ZSgpKQorCXsKKwkJc0Vycm9yID0gSlNHZXRTdHJpbmdGcm9tSUQoKENKU19Db250ZXh0KiljYywgSURTX1NUUklOR19KU1BSSU5UMik7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlpZiAocDEuR2V0VHlwZSgpID09IFZUX251bWJlcikKKwl7CisJCWludCBuRm9ybWF0ID0gcDE7CisKKwkJQ0ZYX1dpZGVTdHJpbmcgc3dSZXN1bHQ7CisKKwkJc3dpdGNoIChuRm9ybWF0KQorCQl7CisJCWNhc2UgMDoKKwkJCXN3UmVzdWx0LkZvcm1hdCgoRlhfTFBDV1NUUilMIkQ6JTA0ZCUwMmQlMDJkJTAyZCUwMmQlMDJkIiwgCisJCQkJanNEYXRlLkdldFllYXIoKSwKKwkJCQlqc0RhdGUuR2V0TW9udGgoKSArIDEsCisJCQkJanNEYXRlLkdldERheSgpLAorCQkJCWpzRGF0ZS5HZXRIb3VycygpLAorCQkJCWpzRGF0ZS5HZXRNaW51dGVzKCksCisJCQkJanNEYXRlLkdldFNlY29uZHMoKSk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJc3dSZXN1bHQuRm9ybWF0KChGWF9MUENXU1RSKUwiJTA0ZC4lMDJkLiUwMmQgJTAyZDolMDJkOiUwMmQiLCAKKwkJCQlqc0RhdGUuR2V0WWVhcigpLAorCQkJCWpzRGF0ZS5HZXRNb250aCgpICsgMSwKKwkJCQlqc0RhdGUuR2V0RGF5KCksCisJCQkJanNEYXRlLkdldEhvdXJzKCksCisJCQkJanNEYXRlLkdldE1pbnV0ZXMoKSwKKwkJCQlqc0RhdGUuR2V0U2Vjb25kcygpKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlzd1Jlc3VsdC5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlMDRkLyUwMmQvJTAyZCAlMDJkOiUwMmQ6JTAyZCIsIAorCQkJCWpzRGF0ZS5HZXRZZWFyKCksCisJCQkJanNEYXRlLkdldE1vbnRoKCkgKyAxLAorCQkJCWpzRGF0ZS5HZXREYXkoKSwKKwkJCQlqc0RhdGUuR2V0SG91cnMoKSwKKwkJCQlqc0RhdGUuR2V0TWludXRlcygpLAorCQkJCWpzRGF0ZS5HZXRTZWNvbmRzKCkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gRkFMU0U7CisJCX0KKworCQl2UmV0ID0gc3dSZXN1bHQ7CisJCXJldHVybiBUUlVFOworCX0KKwllbHNlIGlmIChwMS5HZXRUeXBlKCkgPT0gVlRfc3RyaW5nKQorCXsKKwkJc3RkOjpiYXNpY19zdHJpbmc8d2NoYXJfdD4gY0Zvcm1hdCA9ICh3Y2hhcl90KikoRlhfTFBDV1NUUilwMS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOwkJCisKKwkJYm9vbCBiWEZBUGljdHVyZSA9IGZhbHNlOworCQlpZiAoaVNpemUgPiAyKQorCQl7CisJCQkvL0NKU19WYWx1ZSB2YWx1ZTsKKwkJCWJYRkFQaWN0dXJlID0gcGFyYW1zWzJdOworCQl9CisKKwkJaWYgKGJYRkFQaWN0dXJlKQorCQl7CisJCQlyZXR1cm4gRkFMU0U7IC8vY3VycmVudGx5LCBpdCBkb2Vzbid0IHN1cHBvcnQgWEZBUGljdHVyZS4KKwkJfQorCisgICAgICAgIGludCBpSW5kZXg7CisJCWZvcihpSW5kZXggPSAwO2lJbmRleDxzaXplb2YoZmNUYWJsZSkvc2l6ZW9mKHN0cnVfVGJDb252ZXJ0KTtpSW5kZXgrKykKKwkJeworCQkJaW50IGlTdGFydCA9IDA7CisJCQlpbnQgaUVuZDsKKwkJCXdoaWxlKChpRW5kID0gY0Zvcm1hdC5maW5kKChDRlhfV2lkZVN0cmluZylmY1RhYmxlW2lJbmRleF0ubHBzekpTTWFyaywgaVN0YXJ0KSkgIT0gLTEpCisJCQl7CisJCQkJY0Zvcm1hdC5yZXBsYWNlKGlFbmQsIEZYU1lTX3djc2xlbihmY1RhYmxlW2lJbmRleF0ubHBzekpTTWFyayksIChDRlhfV2lkZVN0cmluZylmY1RhYmxlW2lJbmRleF0ubHBzekNwcE1hcmspOworCQkJCWlTdGFydCA9IGlFbmQ7CisJCQl9CisJCX0KKworCQlpbnQgaVllYXIsaU1vbnRoLGlEYXksaUhvdXIsaU1pbixpU2VjOworCQlpWWVhciA9IGpzRGF0ZS5HZXRZZWFyKCk7CisJCWlNb250aCA9IGpzRGF0ZS5HZXRNb250aCgpOworCQlpRGF5ID0ganNEYXRlLkdldERheSgpOworCQlpSG91ciA9IGpzRGF0ZS5HZXRIb3VycygpOworCQlpTWluID0ganNEYXRlLkdldE1pbnV0ZXMoKTsKKwkJaVNlYyA9IGpzRGF0ZS5HZXRTZWNvbmRzKCk7CisKKwkJc3RydWN0IHRtIHRpbWUgPSB7MH07CisJCXRpbWUudG1feWVhciA9IGlZZWFyLTE5MDA7CisJCXRpbWUudG1fbW9uID0gaU1vbnRoOworCQl0aW1lLnRtX21kYXkgPSBpRGF5OworCQl0aW1lLnRtX2hvdXIgPSBpSG91cjsKKwkJdGltZS50bV9taW4gPSBpTWluOworCQl0aW1lLnRtX3NlYyA9IGlTZWM7CisJCS8vQ09sZURhdGVUaW1lIGNwcFRtKGlZZWFyLGlNb250aCsxLGlEYXksaUhvdXIsaU1pbixpU2VjKTsKKwkJLy9DU3RyaW5nIHN0ckZvcm1hdCA9IGNwcFRtLkZvcm1hdChjRm9ybWF0LmNfc3RyKCkpOworCisJCXN0cnVjdCBzdHJ1X1RiQ29udmVydEFkCisJCXsKKwkJCUZYX0xQQ1dTVFIgbHBzekpTTWFyazsKKwkJCWludCAgICAgaVZhbHVlOworCQl9OworCisJCXN0cnVfVGJDb252ZXJ0QWQgY1RhYmxlQWRbXSA9eworCQkJKEZYX0xQQ1dTVFIpTCJtIiwgaU1vbnRoKzEsCisJCQkJKEZYX0xQQ1dTVFIpTCJkIiwgaURheSwKKwkJCQkoRlhfTFBDV1NUUilMIkgiLCBpSG91ciwKKwkJCQkoRlhfTFBDV1NUUilMImgiLCBpSG91cj4xMj9pSG91ci0xMjppSG91ciwKKwkJCQkoRlhfTFBDV1NUUilMIk0iLCBpTWluLAorCQkJCShGWF9MUENXU1RSKUwicyIsIGlTZWMKKwkJfTsKKworCQkvL2NGb3JtYXQgPSBzdHJGb3JtYXQuR2V0QnVmZmVyKHN0ckZvcm1hdC5HZXRMZW5ndGgoKSsxKTsKKwkJZm9yKGlJbmRleCA9IDA7aUluZGV4PHNpemVvZihjVGFibGVBZCkvc2l6ZW9mKHN0cnVfVGJDb252ZXJ0QWQpO2lJbmRleCsrKQorCQl7CisJCQl3Y2hhcl90IHRzelZhbHVlWzEwXTsKKwkJCS8vX2l0b3QoY1RhYmxlQWRbaUluZGV4XS5pVmFsdWUsdHN6VmFsdWUsMTApOworCQkJQ0ZYX1dpZGVTdHJpbmcgc1ZhbHVlOworCQkJc1ZhbHVlLkZvcm1hdCgoRlhfTFBDV1NUUilMIiVkIixjVGFibGVBZFtpSW5kZXhdLmlWYWx1ZSk7CisJCQltZW1jcHkodHN6VmFsdWUsICh3Y2hhcl90ICopc1ZhbHVlLkdldEJ1ZmZlcihzVmFsdWUuR2V0TGVuZ3RoKCkrMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNWYWx1ZS5HZXRMZW5ndGgoKSsxKSpzaXplb2Yod2NoYXJfdCkpOworCisJCQkvL3N0ckZvcm1hdC5SZXBsYWNlKGNUYWJsZUFkW2lJbmRleF0ubHBzekpTTWFyaywiJWQiKTsKKwkJCS8vc3RyRm9ybWF0LkZvcm1hdChzdHJGb3JtYXQsY1RhYmxlQWRbaUluZGV4XS5pVmFsdWUpOworCQkJaW50IGlTdGFydCA9IDA7CisJCQlpbnQgaUVuZDsKKwkJCXdoaWxlKChpRW5kID0gY0Zvcm1hdC5maW5kKChDRlhfV2lkZVN0cmluZyljVGFibGVBZFtpSW5kZXhdLmxwc3pKU01hcmssaVN0YXJ0KSkgIT0gLTEpCisJCQl7CisJCQkJaWYgKGlFbmQgPiAwKQorCQkJCXsKKwkJCQkJaWYgKGNGb3JtYXRbaUVuZC0xXSA9PSBMJyUnKQorCQkJCQl7CisJCQkJCQlpU3RhcnQgPSBpRW5kKzE7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCX0KKwkJCQljRm9ybWF0LnJlcGxhY2UoaUVuZCwgRlhTWVNfd2NzbGVuKGNUYWJsZUFkW2lJbmRleF0ubHBzekpTTWFyayksIHRzelZhbHVlKTsKKwkJCQlpU3RhcnQgPSBpRW5kOworCQkJfQorCQl9CisKKwkJQ0ZYX1dpZGVTdHJpbmcgc3RyRm9ybWF0OworLy8JCXN0ckZvcm1hdC5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlZCwlZCwlZCwlZCwlZCwlZCIsaVllYXIsIGlNb250aCwgaURheSwgaUhvdXIsIGlNaW4sIGlTZWMpOworLy8JCUNTdHJpbmcgc3RyRm9ybWF0ID0gY3BwVG0uRm9ybWF0KGNGb3JtYXQuY19zdHIoKSk7CisJCXdjaGFyX3QgYnVmWzY0XSA9IHswfTsKKwkJc3RyRm9ybWF0ID0gd2NzZnRpbWUoYnVmLCA2NCwgY0Zvcm1hdC5jX3N0cigpLCAmdGltZSk7CisJCWNGb3JtYXQgPSBidWY7CisJCXZSZXQgPSAoRlhfTFBDV1NUUiljRm9ybWF0LmNfc3RyKCk7CisJCS8vcnRSZXQgPSBzdHJGb3JtYXQuR2V0QnVmZmVyKHN0ckZvcm1hdC5HZXRMZW5ndGgoKSsxKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCXJldHVybiBGQUxTRTsKK30KKwordm9pZCB1dGlsOjpwcmludGQoY29uc3Qgc3RkOjp3c3RyaW5nICZjRm9ybWF0MiwgQ0pTX0RhdGUganNEYXRlLCBib29sIGJYRkFQaWN0dXJlLCBzdGQ6OndzdHJpbmcgJmNQdXJwb3NlKQoreworCXN0ZDo6d3N0cmluZyBjRm9ybWF0ID0gY0Zvcm1hdDI7CisJICAgIAorCWlmIChiWEZBUGljdHVyZSkKKwl7CisJCXJldHVybiA7IC8vY3VycmVudGx5LCBpdCBkb2Vzbid0IHN1cHBvcnQgWEZBUGljdHVyZS4KKwl9CisKKyAgICBpbnQgaUluZGV4OworCWZvcihpSW5kZXggPSAwO2lJbmRleDxzaXplb2YoZmNUYWJsZSkvc2l6ZW9mKHN0cnVfVGJDb252ZXJ0KTtpSW5kZXgrKykKKwl7CisJCWludCBpU3RhcnQgPSAwOworCQlpbnQgaUVuZDsKKwkJd2hpbGUoKGlFbmQgPSBjRm9ybWF0LmZpbmQoKENGWF9XaWRlU3RyaW5nKWZjVGFibGVbaUluZGV4XS5scHN6SlNNYXJrLGlTdGFydCkpICE9IC0xKQorCQl7CisJCQljRm9ybWF0LnJlcGxhY2UoaUVuZCxGWFNZU193Y3NsZW4oZmNUYWJsZVtpSW5kZXhdLmxwc3pKU01hcmspLCAoQ0ZYX1dpZGVTdHJpbmcpZmNUYWJsZVtpSW5kZXhdLmxwc3pDcHBNYXJrKTsKKwkJCWlTdGFydCA9IGlFbmQ7CisJCX0KKwl9CisKKwlpbnQgaVllYXIsaU1vbnRoLGlEYXksaUhvdXIsaU1pbixpU2VjOworCWlZZWFyID0ganNEYXRlLkdldFllYXIoKTsKKwlpTW9udGggPSBqc0RhdGUuR2V0TW9udGgoKTsKKwlpRGF5ID0ganNEYXRlLkdldERheSgpOworCWlIb3VyID0ganNEYXRlLkdldEhvdXJzKCk7CisJaU1pbiA9IGpzRGF0ZS5HZXRNaW51dGVzKCk7CisJaVNlYyA9IGpzRGF0ZS5HZXRTZWNvbmRzKCk7CisKKwlzdHJ1Y3QgdG0gdGltZSA9IHswfTsKKwl0aW1lLnRtX3llYXIgPSBpWWVhci0xOTAwOworCXRpbWUudG1fbW9uID0gaU1vbnRoOworCXRpbWUudG1fbWRheSA9IGlEYXk7CisJdGltZS50bV9ob3VyID0gaUhvdXI7CisJdGltZS50bV9taW4gPSBpTWluOworCXRpbWUudG1fc2VjID0gaVNlYzsKKy8vCUNPbGVEYXRlVGltZSBjcHBUbShpWWVhcixpTW9udGgrMSxpRGF5LGlIb3VyLGlNaW4saVNlYyk7CisJLy9DU3RyaW5nIHN0ckZvcm1hdCA9IGNwcFRtLkZvcm1hdChjRm9ybWF0LmNfc3RyKCkpOworCisJc3RydWN0IHN0cnVfVGJDb252ZXJ0QWQKKwl7CisJCUZYX0xQQ1dTVFIgbHBzekpTTWFyazsKKwkJaW50ICAgICBpVmFsdWU7CisJfTsKKworCXN0cnVfVGJDb252ZXJ0QWQgY1RhYmxlQWRbXSA9eworCQkoRlhfTFBDV1NUUilMIm0iLCBpTW9udGgrMSwKKwkJCShGWF9MUENXU1RSKUwiZCIsIGlEYXksCisJCQkoRlhfTFBDV1NUUilMIkgiLCBpSG91ciwKKwkJCShGWF9MUENXU1RSKUwiaCIsIGlIb3VyPjEyP2lIb3VyLTEyOmlIb3VyLAorCQkJKEZYX0xQQ1dTVFIpTCJNIiwgaU1pbiwKKwkJCShGWF9MUENXU1RSKUwicyIsIGlTZWMKKwl9OworCisJLy9jRm9ybWF0ID0gc3RyRm9ybWF0LkdldEJ1ZmZlcihzdHJGb3JtYXQuR2V0TGVuZ3RoKCkrMSk7CisJZm9yKGlJbmRleCA9IDA7aUluZGV4PHNpemVvZihjVGFibGVBZCkvc2l6ZW9mKHN0cnVfVGJDb252ZXJ0QWQpO2lJbmRleCsrKQorCXsKKwkJd2NoYXJfdCB0c3pWYWx1ZVsxMF07CisJCS8vX2l0b3QoY1RhYmxlQWRbaUluZGV4XS5pVmFsdWUsdHN6VmFsdWUsMTApOworCQlDRlhfV2lkZVN0cmluZyBzVmFsdWU7CisJCXNWYWx1ZS5Gb3JtYXQoKEZYX0xQQ1dTVFIpTCIlZCIsY1RhYmxlQWRbaUluZGV4XS5pVmFsdWUpOworCQltZW1jcHkodHN6VmFsdWUsICh3Y2hhcl90ICopc1ZhbHVlLkdldEJ1ZmZlcihzVmFsdWUuR2V0TGVuZ3RoKCkrMSksc1ZhbHVlLkdldExlbmd0aCgpKnNpemVvZih3Y2hhcl90KSk7CisKKworCQkvL3N0ckZvcm1hdC5SZXBsYWNlKGNUYWJsZUFkW2lJbmRleF0ubHBzekpTTWFyaywiJWQiKTsKKwkJLy9zdHJGb3JtYXQuRm9ybWF0KHN0ckZvcm1hdCxjVGFibGVBZFtpSW5kZXhdLmlWYWx1ZSk7CisJCWludCBpU3RhcnQgPSAwOworCQlpbnQgaUVuZDsKKwkJd2hpbGUoKGlFbmQgPSBjRm9ybWF0LmZpbmQoKENGWF9XaWRlU3RyaW5nKWNUYWJsZUFkW2lJbmRleF0ubHBzekpTTWFyayxpU3RhcnQpKSAhPSAtMSkKKwkJeworCQkJaWYgKGlFbmQgPiAwKQorCQkJeworCQkJCWlmIChjRm9ybWF0W2lFbmQtMV0gPT0gTCclJykKKwkJCQl7CisJCQkJCWlTdGFydCA9IGlFbmQrMTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJY0Zvcm1hdC5yZXBsYWNlKGlFbmQsRlhTWVNfd2NzbGVuKGNUYWJsZUFkW2lJbmRleF0ubHBzekpTTWFyayksdHN6VmFsdWUpOworCQkJaVN0YXJ0ID0gaUVuZDsKKwkJfQorCX0KKworCQlDRlhfV2lkZVN0cmluZyBzdHJGb3JtYXQ7CisvLwkJc3RyRm9ybWF0LkZvcm1hdCgoRlhfTFBDV1NUUilMIiVkLCVkLCVkLCVkLCVkLCVkIixpWWVhciwgaU1vbnRoLCBpRGF5LCBpSG91ciwgaU1pbiwgaVNlYyk7CisvLwkJQ1N0cmluZyBzdHJGb3JtYXQgPSBjcHBUbS5Gb3JtYXQoY0Zvcm1hdC5jX3N0cigpKTsKKwkJd2NoYXJfdCBidWZbNjRdID0gezB9OworCQlzdHJGb3JtYXQgPSB3Y3NmdGltZShidWYsIDY0LCBjRm9ybWF0LmNfc3RyKCksICZ0aW1lKTsKKwkJY0Zvcm1hdCA9IGJ1ZjsKKwkJY1B1cnBvc2UgPSBjRm9ybWF0OworfQorCitGWF9CT09MIHV0aWw6OnByaW50eChPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwlpbnQgaVNpemUgPSBwYXJhbXMuc2l6ZSgpOworCWlmIChpU2l6ZTwyKQorCQlyZXR1cm4gRkFMU0U7CisJQ0ZYX1dpZGVTdHJpbmcgc0Zvcm1hdCA9IHBhcmFtc1swXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOworCUNGWF9XaWRlU3RyaW5nIHNTb3VyY2UgPSBwYXJhbXNbMV0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsKKwlzdGQ6OnN0cmluZyBjRm9ybWF0ID0gKEZYX0xQQ1NUUilDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUoc0Zvcm1hdCk7CisJc3RkOjpzdHJpbmcgY1NvdXJjZSA9IChGWF9MUENTVFIpQ0ZYX0J5dGVTdHJpbmc6OkZyb21Vbmljb2RlKHNTb3VyY2UpOworCXN0ZDo6c3RyaW5nIGNEZXN0OworCXByaW50eChjRm9ybWF0LGNTb3VyY2UsY0Rlc3QpOworCXZSZXQgPSBjRGVzdC5jX3N0cigpOworCXJldHVybiBUUlVFOworfQorCit2b2lkIHV0aWw6OnByaW50eChjb25zdCBzdGQ6OnN0cmluZyAmY0Zvcm1hdCxjb25zdCBzdGQ6OnN0cmluZyAmY1NvdXJjZTIsc3RkOjpzdHJpbmcgJmNQdXJwb3NlKQoreworCXN0ZDo6c3RyaW5nIGNTb3VyY2UoY1NvdXJjZTIpOworCWlmICghY1B1cnBvc2UuZW1wdHkoKSkKKwkJLy9jUHVycG9zZS5jbGVhcigpOworCQljUHVycG9zZS5lcmFzZSgpOworCWludCBpdFNvdXJjZSA9IDA7CisJaW50IGlTaXplID0gY1NvdXJjZS5zaXplKCk7CisJZm9yKGludCBpSW5kZXggPSAwOyBpSW5kZXggPCAoaW50KWNGb3JtYXQuc2l6ZSgpICYmIGl0U291cmNlPGlTaXplOyBpSW5kZXgrKykKKwl7CisJCWNoYXIgbGV0dGVyID0gY0Zvcm1hdFtpSW5kZXhdOworCQlzd2l0Y2gobGV0dGVyKQorCQl7CisJCWNhc2UgJz8nOgorCQkJLy9jUHVycG9zZS5wdXNoX2JhY2soY1NvdXJjZVtpdFNvdXJjZV0pOworCQkJY1B1cnBvc2UgKz0gY1NvdXJjZVtpdFNvdXJjZV07CisJCQlpdFNvdXJjZSsrOworCQkJYnJlYWs7CisJCWNhc2UgJ1gnOgorCQkJeworCQkJCXdoaWxlKGl0U291cmNlIDwgaVNpemUpCisJCQkJeworCQkJCQlpZiAoKGNTb3VyY2VbaXRTb3VyY2VdPj0nMCcmJmNTb3VyY2VbaXRTb3VyY2VdPD0nOScpIHx8IChjU291cmNlW2l0U291cmNlXT49J2EnICYmIGNTb3VyY2VbaXRTb3VyY2VdPD0neicpIHx8IChjU291cmNlW2l0U291cmNlXT49J0EnICYmIGNTb3VyY2VbaXRTb3VyY2VdPD0nWicpKQorCQkJCQl7CisJCQkJCQkvL2NQdXJwb3NlLnB1c2hfYmFjayhjU291cmNlW2l0U291cmNlXSk7CisJCQkJCQljUHVycG9zZSArPSBjU291cmNlW2l0U291cmNlXTsKKwkJCQkJCWl0U291cmNlKys7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlpdFNvdXJjZSsrOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdBJzoKKwkJCXsKKwkJCQl3aGlsZShpdFNvdXJjZSA8IGlTaXplKQorCQkJCXsKKwkJCQkJaWYgKChjU291cmNlW2l0U291cmNlXT49J2EnICYmIGNTb3VyY2VbaXRTb3VyY2VdPD0neicpIHx8IChjU291cmNlW2l0U291cmNlXT49J0EnICYmIGNTb3VyY2VbaXRTb3VyY2VdPD0nWicpKQorCQkJCQl7CisJCQkJCQkvL2NQdXJwb3NlLnB1c2hfYmFjayhjU291cmNlW2l0U291cmNlXSk7CisJCQkJCQljUHVycG9zZSArPSBjU291cmNlW2l0U291cmNlXTsKKwkJCQkJCWl0U291cmNlKys7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlpdFNvdXJjZSsrOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICc5JzoKKwkJCXsKKwkJCQl3aGlsZShpdFNvdXJjZSA8IGlTaXplKQorCQkJCXsKKwkJCQkJaWYgKGNTb3VyY2VbaXRTb3VyY2VdPj0nMCcmJmNTb3VyY2VbaXRTb3VyY2VdPD0nOScpCisJCQkJCXsKKwkJCQkJCS8vY1B1cnBvc2UucHVzaF9iYWNrKGNTb3VyY2VbaXRTb3VyY2VdKTsKKwkJCQkJCWNQdXJwb3NlICs9IGNTb3VyY2VbaXRTb3VyY2VdOworCQkJCQkJaXRTb3VyY2UrKzsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWl0U291cmNlKys7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQljYXNlICcqJzoKKwkJCXsKKwkJCQljUHVycG9zZS5hcHBlbmQoY1NvdXJjZSxpdFNvdXJjZSxpU2l6ZS1pdFNvdXJjZSk7CisJCQkJaXRTb3VyY2UgPSBpU2l6ZS0xOworCQkJCWJyZWFrOworCQkJfQorCQljYXNlICdcXCc6CisJCQlicmVhazsKKwkJY2FzZSAnPic6CisJCQl7CisJCQkJZm9yKHN0ZDo6c3RyaW5nOjppdGVyYXRvciBpdCA9IGNTb3VyY2UuYmVnaW4oKTtpdCAhPSBjU291cmNlLmVuZCgpOyBpdCsrKQorCQkJCXsKKwkJCQkJKml0ID0gdG91cHBlcigqaXQpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSAnPCc6CisJCQl7CisJCQkJZm9yKHN0ZDo6c3RyaW5nOjppdGVyYXRvciBpdCA9IGNTb3VyY2UuYmVnaW4oKTtpdCAhPSBjU291cmNlLmVuZCgpOyBpdCsrKQorCQkJCXsKKwkJCQkJKml0ID0gdG9sb3dlcigqaXQpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJY2FzZSAnPSc6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8vY1B1cnBvc2UucHVzaF9iYWNrKGxldHRlcik7CisJCQljUHVycG9zZSArPSBsZXR0ZXI7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworRlhfQk9PTCB1dGlsOjpzY2FuZChPQkpfTUVUSE9EX1BBUkFNUykKK3sKKwl2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IEdldElzb2xhdGUoY2MpOworCWludCBpU2l6ZSA9IHBhcmFtcy5zaXplKCk7CisJaWYgKGlTaXplIDwgMikKKwkJcmV0dXJuIEZBTFNFOworCUNGWF9XaWRlU3RyaW5nIHNGb3JtYXQgPSBwYXJhbXNbMF0ub3BlcmF0b3IgQ0ZYX1dpZGVTdHJpbmcoKTsKKwlDRlhfV2lkZVN0cmluZyBzRGF0ZSA9IHBhcmFtc1sxXS5vcGVyYXRvciBDRlhfV2lkZVN0cmluZygpOworCisJZG91YmxlIGREYXRlID0gSlNfR2V0RGF0ZVRpbWUoKTsKKwlpZiAoc0RhdGUuR2V0TGVuZ3RoKCkgPiAwKQorCXsKKwkJRlhfQk9PTCBiV3JvbmdGb3JtYXQgPSBGQUxTRTsKKwkJZERhdGUgPSBDSlNfUHVibGljTWV0aG9kczo6TWFrZVJlZ3VsYXJEYXRlKHNEYXRlLHNGb3JtYXQsYldyb25nRm9ybWF0KTsKKwl9CQorCQorCWlmICghSlNfUG9ydElzTmFuKGREYXRlKSkKKwl7CisJCUNKU19EYXRlIGRhdGUoaXNvbGF0ZSxkRGF0ZSk7CisJCXZSZXQgPSBkYXRlOworCX0KKwllbHNlCisJeworCQl2UmV0LlNldE51bGwoKTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfSU5UNjQgRlhfYXRvaTY0KGNvbnN0IGNoYXIgKm5wdHIpCit7CisgICAgICAgIGludCBjOyAgICAgICAgICAgICAgLyogY3VycmVudCBjaGFyICovCisgICAgICAgIEZYX0lOVDY0IHRvdGFsOyAgICAgIC8qIGN1cnJlbnQgdG90YWwgKi8KKyAgICAgICAgaW50IHNpZ247ICAgICAgICAgICAvKiBpZiAnLScsIHRoZW4gbmVnYXRpdmUsIG90aGVyd2lzZSBwb3NpdGl2ZSAqLworCisgICAgICAgIC8qIHNraXAgd2hpdGVzcGFjZSAqLworICAgICAgICB3aGlsZSAoIGlzc3BhY2UoKGludCkodW5zaWduZWQgY2hhcikqbnB0cikgKQorICAgICAgICAgICAgKytucHRyOworCisgICAgICAgIGMgPSAoaW50KSh1bnNpZ25lZCBjaGFyKSpucHRyKys7CisgICAgICAgIHNpZ24gPSBjOyAgICAgICAgICAgLyogc2F2ZSBzaWduIGluZGljYXRpb24gKi8KKyAgICAgICAgaWYgKGMgPT0gJy0nIHx8IGMgPT0gJysnKQorICAgICAgICAgICAgYyA9IChpbnQpKHVuc2lnbmVkIGNoYXIpKm5wdHIrKzsgICAgLyogc2tpcCBzaWduICovCisKKyAgICAgICAgdG90YWwgPSAwOworCisgICAgICAgIHdoaWxlIChpc2RpZ2l0KGMpKSB7CisgICAgICAgICAgICB0b3RhbCA9IDEwICogdG90YWwgKyAoYyAtICcwJyk7ICAgICAvKiBhY2N1bXVsYXRlIGRpZ2l0ICovCisgICAgICAgICAgICBjID0gKGludCkodW5zaWduZWQgY2hhcikqbnB0cisrOyAgICAvKiBnZXQgbmV4dCBjaGFyICovCisgICAgICAgIH0KKworICAgICAgICBpZiAoc2lnbiA9PSAnLScpCisgICAgICAgICAgICByZXR1cm4gLXRvdGFsOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gdG90YWw7ICAgLyogcmV0dXJuIHJlc3VsdCwgbmVnYXRlZCBpZiBuZWNlc3NhcnkgKi8KK30KKworRlhfQk9PTCB1dGlsOjpieXRlVG9DaGFyKE9CSl9NRVRIT0RfUEFSQU1TKQoreworCWludCBpU2l6ZSA9IHBhcmFtcy5zaXplKCk7CisJaWYgKGlTaXplID09IDApCisJCXJldHVybiBGQUxTRTsKKwlpbnQgbkJ5dGUgPSAoaW50KXBhcmFtc1swXTsKKwl1bnNpZ25lZCBjaGFyIGNCeXRlID0gKHVuc2lnbmVkIGNoYXIpbkJ5dGU7CisJQ0ZYX1dpZGVTdHJpbmcgY3NWYWx1ZTsKKwljc1ZhbHVlLkZvcm1hdCgoRlhfTFBDV1NUUilMIiVjIiwgY0J5dGUpOworCXZSZXQgPSBjc1ZhbHVlOyAKKwlyZXR1cm4gVFJVRTsKK30KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfQnV0dG9uLmNwcCBiL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfQnV0dG9uLmNwcAppbmRleCBjNzFlNWNjOC4uZjk1NDY5YSAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9CdXR0b24uY3BwCisrKyBiL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfQnV0dG9uLmNwcApAQCAtMSw1MyArMSw1MyBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BERldpbmRvdy5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfV25kLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9CdXR0b24uaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1V0aWxzLmgiDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX0J1dHRvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ1BXTF9CdXR0b246OkNQV0xfQnV0dG9uKCkgOg0KLQltX2JNb3VzZURvd24oRkFMU0UpDQotew0KLX0NCi0NCi1DUFdMX0J1dHRvbjo6fkNQV0xfQnV0dG9uKCkNCi17DQotLy8JUFdMX1RSQUNFKCJ+Q1BXTF9CdXR0b25cbiIpOw0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDUFdMX0J1dHRvbjo6R2V0Q2xhc3NOYW1lKCkgY29uc3QNCi17DQotCXJldHVybiAiQ1BXTF9CdXR0b24iOw0KLX0NCi0NCi12b2lkIENQV0xfQnV0dG9uOjpPbkNyZWF0ZShQV0xfQ1JFQVRFUEFSQU0gJiBjcCkNCi17DQotCWNwLmVDdXJzb3JUeXBlID0gRlhDVF9IQU5EOw0KLX0NCi0NCi1GWF9CT09MIENQV0xfQnV0dG9uOjpPbkxCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlDUFdMX1duZDo6T25MQnV0dG9uRG93bihwb2ludCwgbkZsYWcpOw0KLQ0KLQltX2JNb3VzZURvd24gPSBUUlVFOw0KLQlTZXRDYXB0dXJlKCk7DQotCQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBDUFdMX0J1dHRvbjo6T25MQnV0dG9uVXAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZykNCi17DQotCUNQV0xfV25kOjpPbkxCdXR0b25VcChwb2ludCwgbkZsYWcpOw0KLQ0KLQlSZWxlYXNlQ2FwdHVyZSgpOw0KLQltX2JNb3VzZURvd24gPSBGQUxTRTsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QREZXaW5kb3cuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfV25kLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0J1dHRvbi5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9VdGlscy5oIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfQnV0dG9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ1BXTF9CdXR0b246OkNQV0xfQnV0dG9uKCkgOgorCW1fYk1vdXNlRG93bihGQUxTRSkKK3sKK30KKworQ1BXTF9CdXR0b246On5DUFdMX0J1dHRvbigpCit7CisvLwlQV0xfVFJBQ0UoIn5DUFdMX0J1dHRvblxuIik7Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQV0xfQnV0dG9uOjpHZXRDbGFzc05hbWUoKSBjb25zdAoreworCXJldHVybiAiQ1BXTF9CdXR0b24iOworfQorCit2b2lkIENQV0xfQnV0dG9uOjpPbkNyZWF0ZShQV0xfQ1JFQVRFUEFSQU0gJiBjcCkKK3sKKwljcC5lQ3Vyc29yVHlwZSA9IEZYQ1RfSEFORDsKK30KKworRlhfQk9PTCBDUFdMX0J1dHRvbjo6T25MQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKQoreworCUNQV0xfV25kOjpPbkxCdXR0b25Eb3duKHBvaW50LCBuRmxhZyk7CisKKwltX2JNb3VzZURvd24gPSBUUlVFOworCVNldENhcHR1cmUoKTsKKwkKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBDUFdMX0J1dHRvbjo6T25MQnV0dG9uVXAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZykKK3sKKwlDUFdMX1duZDo6T25MQnV0dG9uVXAocG9pbnQsIG5GbGFnKTsKKworCVJlbGVhc2VDYXB0dXJlKCk7CisJbV9iTW91c2VEb3duID0gRkFMU0U7CisKKwlyZXR1cm4gVFJVRTsKK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9DYXJldC5jcHAgYi9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX0NhcmV0LmNwcAppbmRleCBlNTQ1MzhlLi5jZGM3ZDU3IDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX0NhcmV0LmNwcAorKysgYi9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX0NhcmV0LmNwcApAQCAtMSwxOTcgKzEsMTk3IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUERGV2luZG93LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9XbmQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0NhcmV0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9VdGlscy5oIg0KLQ0KLSNkZWZpbmUgUFdMX0NBUkVUX0ZMQVNISU5URVJWQUwJCTUwMA0KLQ0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCi0vLyBDb25zdHJ1Y3Rpb24vRGVzdHJ1Y3Rpb24NCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQotDQotQ1BXTF9DYXJldDo6Q1BXTF9DYXJldCgpIDoNCi0JbV9iRmxhc2goRkFMU0UpLA0KLQltX3B0SGVhZCgwLDApLA0KLQltX3B0Rm9vdCgwLDApLA0KLQltX2ZXaWR0aCgwLjRmKSwNCi0JbV9uRGVsYXkoMCkNCi17DQotfQ0KLQ0KLUNQV0xfQ2FyZXQ6On5DUFdMX0NhcmV0KCkNCi17DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfQ2FyZXQ6OkdldENsYXNzTmFtZSgpIGNvbnN0DQotew0KLQlyZXR1cm4gIkNQV0xfQ2FyZXQiOw0KLX0NCi0NCi12b2lkIENQV0xfQ2FyZXQ6OkdldFRoaXNBcHBlYXJhbmNlU3RyZWFtKENGWF9CeXRlVGV4dEJ1ZiAmIHNBcHBTdHJlYW0pDQotew0KLQlHZXRDYXJldEFwcChzQXBwU3RyZWFtLENQREZfUG9pbnQoMC4wZiwwLjBmKSk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9DYXJldDo6RHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpDQotew0KLQlpZiAoSXNWaXNpYmxlKCkgJiYgbV9iRmxhc2gpDQotCXsNCi0JCUNQREZfUmVjdCByY1JlY3QgPSBHZXRDYXJldFJlY3QoKTsNCi0JCUNQREZfUmVjdCByY0NsaXAgPSBHZXRDbGlwUmVjdCgpOw0KLQ0KLQkJQ0ZYX1BhdGhEYXRhIHBhdGg7DQotDQotCQlwYXRoLlNldFBvaW50Q291bnQoMik7DQotCQkNCi0JCUZYX0ZMT0FUIGZDYXJldFggPSByY1JlY3QubGVmdCArIG1fZldpZHRoICogMC41ZjsNCi0JCUZYX0ZMT0FUIGZDYXJldFRvcCA9IHJjUmVjdC50b3A7DQotCQlGWF9GTE9BVCBmQ2FyZXRCb3R0b20gPSByY1JlY3QuYm90dG9tOw0KLQ0KLQkJaWYgKCFyY0NsaXAuSXNFbXB0eSgpKQ0KLQkJew0KLQkJCXJjUmVjdC5JbnRlcnNlY3QocmNDbGlwKTsNCi0JCQlpZiAoIXJjUmVjdC5Jc0VtcHR5KCkpDQotCQkJew0KLQkJCQlmQ2FyZXRUb3AgPSByY1JlY3QudG9wOw0KLQkJCQlmQ2FyZXRCb3R0b20gPSByY1JlY3QuYm90dG9tOw0KLQkJCQlwYXRoLlNldFBvaW50KDAsIGZDYXJldFgsIGZDYXJldEJvdHRvbSwgRlhQVF9NT1ZFVE8pOw0KLQkJCQlwYXRoLlNldFBvaW50KDEsIGZDYXJldFgsIGZDYXJldFRvcCwgRlhQVF9MSU5FVE8pOw0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQlyZXR1cm47DQotCQkJfQ0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCXBhdGguU2V0UG9pbnQoMCwgZkNhcmV0WCwgZkNhcmV0Qm90dG9tLCBGWFBUX01PVkVUTyk7DQotCQkJcGF0aC5TZXRQb2ludCgxLCBmQ2FyZXRYLCBmQ2FyZXRUb3AsIEZYUFRfTElORVRPKTsNCi0JCX0NCi0NCi0JCUNGWF9HcmFwaFN0YXRlRGF0YSBnc2Q7DQotCQlnc2QubV9MaW5lV2lkdGggPSBtX2ZXaWR0aDsNCi0NCi0JCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoLCBwVXNlcjJEZXZpY2UsICZnc2QsMCwgIEFyZ2JFbmNvZGUoMjU1LDAsMCwwKSwgRlhGSUxMX0FMVEVSTkFURSk7DQotCX0NCi19DQotDQotdm9pZCBDUFdMX0NhcmV0OjpHZXRDYXJldEFwcChDRlhfQnl0ZVRleHRCdWYgJiBzQXBwU3RyZWFtLGNvbnN0IENQREZfUG9pbnQgJiBwdE9mZnNldCkNCi17DQotCWlmIChJc1Zpc2libGUoKSAmJiBtX2JGbGFzaCkNCi0JewkNCi0JCUNGWF9CeXRlVGV4dEJ1ZiBzQ2FyZXQ7DQotDQotCQlDUERGX1JlY3QgcmNSZWN0ID0gR2V0Q2FyZXRSZWN0KCk7DQotCQlDUERGX1JlY3QgcmNDbGlwID0gR2V0Q2xpcFJlY3QoKTsNCi0NCi0JCXJjUmVjdCA9IENQV0xfVXRpbHM6Ok9mZnNldFJlY3QocmNSZWN0LHB0T2Zmc2V0LngscHRPZmZzZXQueSk7DQotCQlyY0NsaXAgPSBDUFdMX1V0aWxzOjpPZmZzZXRSZWN0KHJjQ2xpcCxwdE9mZnNldC54LHB0T2Zmc2V0LnkpOw0KLQ0KLQkJc0NhcmV0IDw8ICJxXG4iOw0KLQkJaWYgKCFyY0NsaXAuSXNFbXB0eSgpKQ0KLQkJew0KLQkJCXNDYXJldCA8PCByY0NsaXAubGVmdCA8PCAiICIgPDwgcmNDbGlwLmJvdHRvbSArIDIuNWYgPDwgIiAiIA0KLQkJCQk8PCByY0NsaXAucmlnaHQgLSByY0NsaXAubGVmdCA8PCAiICIgPDwgcmNDbGlwLnRvcCAtIHJjQ2xpcC5ib3R0b20gLSA0LjVmIDw8ICIgcmUgVyBuXG4iOw0KLQkJfQ0KLQkJc0NhcmV0IDw8IG1fZldpZHRoIDw8ICIgd1xuMCBHXG4iOw0KLQkJc0NhcmV0IDw8IHJjUmVjdC5sZWZ0ICsgbV9mV2lkdGgvMiA8PCAiICIgPDwgcmNSZWN0LmJvdHRvbSA8PCAiIG1cbiI7DQotCQlzQ2FyZXQgPDwgcmNSZWN0LmxlZnQgKyBtX2ZXaWR0aC8yIDw8ICIgIiA8PCByY1JlY3QudG9wIDw8ICIgbCBTXG5RXG4iOwkNCi0NCi0JCXNBcHBTdHJlYW0gPDwgc0NhcmV0OwkNCi0JfQ0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDUFdMX0NhcmV0OjpHZXRDYXJldEFwcGVhcmFuY2VTdHJlYW0oY29uc3QgQ1BERl9Qb2ludCAmIHB0T2Zmc2V0KQ0KLXsNCi0JQ0ZYX0J5dGVUZXh0QnVmIHNDYXJldDsNCi0JR2V0Q2FyZXRBcHAoc0NhcmV0LHB0T2Zmc2V0KTsNCi0JcmV0dXJuIHNDYXJldC5HZXRCeXRlU3RyaW5nKCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9DYXJldDo6VGltZXJQcm9jKCkNCi17DQotCWlmIChtX25EZWxheSA+IDApDQotCXsNCi0JCW1fbkRlbGF5LS07CQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJbV9iRmxhc2ggPSAhbV9iRmxhc2g7DQotCQlJbnZhbGlkYXRlUmVjdCgpOw0KLQl9DQotfQ0KLQ0KLUNQREZfUmVjdCBDUFdMX0NhcmV0OjpHZXRDYXJldFJlY3QoKSBjb25zdA0KLXsNCi0JcmV0dXJuIENQREZfUmVjdChtX3B0Rm9vdC54LA0KLQkJCW1fcHRGb290LnksDQotCQkJbV9wdEhlYWQueCArIHRoaXMtPm1fZldpZHRoLA0KLQkJCW1fcHRIZWFkLnkpOw0KLX0NCi0NCi12b2lkIENQV0xfQ2FyZXQ6OlNldENhcmV0KEZYX0JPT0wgYlZpc2libGUsIGNvbnN0IENQREZfUG9pbnQgJiBwdEhlYWQsIGNvbnN0IENQREZfUG9pbnQgJiBwdEZvb3QpDQotew0KLQlpZiAoYlZpc2libGUpDQotCXsJDQotCQlpZiAoSXNWaXNpYmxlKCkpDQotCQl7DQotCQkJaWYgKG1fcHRIZWFkLnggIT0gcHRIZWFkLnggfHwgbV9wdEhlYWQueSAhPSBwdEhlYWQueSB8fCANCi0JCQkJCW1fcHRGb290LnggIT0gcHRGb290LnggfHwgbV9wdEZvb3QueSAhPSBwdEZvb3QueSkNCi0JCQl7DQotCQkJCXRoaXMtPm1fcHRIZWFkID0gcHRIZWFkOw0KLQkJCQl0aGlzLT5tX3B0Rm9vdCA9IHB0Rm9vdDsNCi0NCi0JCQkJbV9iRmxhc2ggPSBUUlVFOw0KLQkJCQkvL01vdmUoR2V0Q2FyZXRSZWN0KCksRkFMU0UsVFJVRSk7DQotCQkJCU1vdmUobV9yY0ludmFsaWQsIEZBTFNFLCBUUlVFKTsNCi0JCQl9DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJdGhpcy0+bV9wdEhlYWQgPSBwdEhlYWQ7DQotCQkJdGhpcy0+bV9wdEZvb3QgPSBwdEZvb3Q7DQotDQotCQkJRW5kVGltZXIoKTsNCi0JCQlCZWdpblRpbWVyKFBXTF9DQVJFVF9GTEFTSElOVEVSVkFMKTsNCi0JCQkNCi0JCQlDUFdMX1duZDo6U2V0VmlzaWJsZShUUlVFKTsNCi0JCQltX2JGbGFzaCA9IFRSVUU7DQotDQotCQkJLy9Nb3ZlKEdldENhcmV0UmVjdCgpLEZBTFNFLFRSVUUpOwkNCi0JCQlNb3ZlKG1fcmNJbnZhbGlkLCBGQUxTRSwgVFJVRSk7DQotCQl9CQkNCi0JfQ0KLQllbHNlDQotCXsNCi0JCXRoaXMtPm1fcHRIZWFkID0gQ1BERl9Qb2ludCgwLDApOw0KLQkJdGhpcy0+bV9wdEZvb3QgPSBDUERGX1BvaW50KDAsMCk7DQotDQotCQltX2JGbGFzaCA9IEZBTFNFOw0KLQkJaWYgKElzVmlzaWJsZSgpKQ0KLQkJew0KLQkJCUVuZFRpbWVyKCk7DQotCQkJQ1BXTF9XbmQ6OlNldFZpc2libGUoRkFMU0UpOw0KLQkJfQkJDQotCX0NCi19DQotDQotdm9pZCBDUFdMX0NhcmV0OjpJbnZhbGlkYXRlUmVjdChDUERGX1JlY3QgKiBwUmVjdCkNCi17DQotCWlmIChwUmVjdCkNCi0Jew0KLQkJQ1BERl9SZWN0IHJjUmVmcmVzaCA9IENQV0xfVXRpbHM6OkluZmxhdGVSZWN0KCpwUmVjdCwwLjVmKTsNCi0JCXJjUmVmcmVzaC50b3AgKz0gMTsNCi0JCXJjUmVmcmVzaC5ib3R0b20gLT0gMTsJDQotCQkNCi0JCUNQV0xfV25kOjpJbnZhbGlkYXRlUmVjdCgmcmNSZWZyZXNoKTsNCi0JfQ0KLQllbHNlDQotCQlDUFdMX1duZDo6SW52YWxpZGF0ZVJlY3QocFJlY3QpOw0KLX0NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUERGV2luZG93LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1duZC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9DYXJldC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9VdGlscy5oIgorCisjZGVmaW5lIFBXTF9DQVJFVF9GTEFTSElOVEVSVkFMCQk1MDAKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gQ29uc3RydWN0aW9uL0Rlc3RydWN0aW9uCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK0NQV0xfQ2FyZXQ6OkNQV0xfQ2FyZXQoKSA6CisJbV9iRmxhc2goRkFMU0UpLAorCW1fcHRIZWFkKDAsMCksCisJbV9wdEZvb3QoMCwwKSwKKwltX2ZXaWR0aCgwLjRmKSwKKwltX25EZWxheSgwKQoreworfQorCitDUFdMX0NhcmV0Ojp+Q1BXTF9DYXJldCgpCit7Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQV0xfQ2FyZXQ6OkdldENsYXNzTmFtZSgpIGNvbnN0Cit7CisJcmV0dXJuICJDUFdMX0NhcmV0IjsKK30KKwordm9pZCBDUFdMX0NhcmV0OjpHZXRUaGlzQXBwZWFyYW5jZVN0cmVhbShDRlhfQnl0ZVRleHRCdWYgJiBzQXBwU3RyZWFtKQoreworCUdldENhcmV0QXBwKHNBcHBTdHJlYW0sQ1BERl9Qb2ludCgwLjBmLDAuMGYpKTsKK30KKwordm9pZCBDUFdMX0NhcmV0OjpEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSkKK3sKKwlpZiAoSXNWaXNpYmxlKCkgJiYgbV9iRmxhc2gpCisJeworCQlDUERGX1JlY3QgcmNSZWN0ID0gR2V0Q2FyZXRSZWN0KCk7CisJCUNQREZfUmVjdCByY0NsaXAgPSBHZXRDbGlwUmVjdCgpOworCisJCUNGWF9QYXRoRGF0YSBwYXRoOworCisJCXBhdGguU2V0UG9pbnRDb3VudCgyKTsKKwkJCisJCUZYX0ZMT0FUIGZDYXJldFggPSByY1JlY3QubGVmdCArIG1fZldpZHRoICogMC41ZjsKKwkJRlhfRkxPQVQgZkNhcmV0VG9wID0gcmNSZWN0LnRvcDsKKwkJRlhfRkxPQVQgZkNhcmV0Qm90dG9tID0gcmNSZWN0LmJvdHRvbTsKKworCQlpZiAoIXJjQ2xpcC5Jc0VtcHR5KCkpCisJCXsKKwkJCXJjUmVjdC5JbnRlcnNlY3QocmNDbGlwKTsKKwkJCWlmICghcmNSZWN0LklzRW1wdHkoKSkKKwkJCXsKKwkJCQlmQ2FyZXRUb3AgPSByY1JlY3QudG9wOworCQkJCWZDYXJldEJvdHRvbSA9IHJjUmVjdC5ib3R0b207CisJCQkJcGF0aC5TZXRQb2ludCgwLCBmQ2FyZXRYLCBmQ2FyZXRCb3R0b20sIEZYUFRfTU9WRVRPKTsKKwkJCQlwYXRoLlNldFBvaW50KDEsIGZDYXJldFgsIGZDYXJldFRvcCwgRlhQVF9MSU5FVE8pOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQllbHNlCisJCXsKKwkJCXBhdGguU2V0UG9pbnQoMCwgZkNhcmV0WCwgZkNhcmV0Qm90dG9tLCBGWFBUX01PVkVUTyk7CisJCQlwYXRoLlNldFBvaW50KDEsIGZDYXJldFgsIGZDYXJldFRvcCwgRlhQVF9MSU5FVE8pOworCQl9CisKKwkJQ0ZYX0dyYXBoU3RhdGVEYXRhIGdzZDsKKwkJZ3NkLm1fTGluZVdpZHRoID0gbV9mV2lkdGg7CisKKwkJcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgJmdzZCwwLCAgQXJnYkVuY29kZSgyNTUsMCwwLDApLCBGWEZJTExfQUxURVJOQVRFKTsKKwl9Cit9CisKK3ZvaWQgQ1BXTF9DYXJldDo6R2V0Q2FyZXRBcHAoQ0ZYX0J5dGVUZXh0QnVmICYgc0FwcFN0cmVhbSxjb25zdCBDUERGX1BvaW50ICYgcHRPZmZzZXQpCit7CisJaWYgKElzVmlzaWJsZSgpICYmIG1fYkZsYXNoKQorCXsJCisJCUNGWF9CeXRlVGV4dEJ1ZiBzQ2FyZXQ7CisKKwkJQ1BERl9SZWN0IHJjUmVjdCA9IEdldENhcmV0UmVjdCgpOworCQlDUERGX1JlY3QgcmNDbGlwID0gR2V0Q2xpcFJlY3QoKTsKKworCQlyY1JlY3QgPSBDUFdMX1V0aWxzOjpPZmZzZXRSZWN0KHJjUmVjdCxwdE9mZnNldC54LHB0T2Zmc2V0LnkpOworCQlyY0NsaXAgPSBDUFdMX1V0aWxzOjpPZmZzZXRSZWN0KHJjQ2xpcCxwdE9mZnNldC54LHB0T2Zmc2V0LnkpOworCisJCXNDYXJldCA8PCAicVxuIjsKKwkJaWYgKCFyY0NsaXAuSXNFbXB0eSgpKQorCQl7CisJCQlzQ2FyZXQgPDwgcmNDbGlwLmxlZnQgPDwgIiAiIDw8IHJjQ2xpcC5ib3R0b20gKyAyLjVmIDw8ICIgIiAKKwkJCQk8PCByY0NsaXAucmlnaHQgLSByY0NsaXAubGVmdCA8PCAiICIgPDwgcmNDbGlwLnRvcCAtIHJjQ2xpcC5ib3R0b20gLSA0LjVmIDw8ICIgcmUgVyBuXG4iOworCQl9CisJCXNDYXJldCA8PCBtX2ZXaWR0aCA8PCAiIHdcbjAgR1xuIjsKKwkJc0NhcmV0IDw8IHJjUmVjdC5sZWZ0ICsgbV9mV2lkdGgvMiA8PCAiICIgPDwgcmNSZWN0LmJvdHRvbSA8PCAiIG1cbiI7CisJCXNDYXJldCA8PCByY1JlY3QubGVmdCArIG1fZldpZHRoLzIgPDwgIiAiIDw8IHJjUmVjdC50b3AgPDwgIiBsIFNcblFcbiI7CQorCisJCXNBcHBTdHJlYW0gPDwgc0NhcmV0OwkKKwl9Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQV0xfQ2FyZXQ6OkdldENhcmV0QXBwZWFyYW5jZVN0cmVhbShjb25zdCBDUERGX1BvaW50ICYgcHRPZmZzZXQpCit7CisJQ0ZYX0J5dGVUZXh0QnVmIHNDYXJldDsKKwlHZXRDYXJldEFwcChzQ2FyZXQscHRPZmZzZXQpOworCXJldHVybiBzQ2FyZXQuR2V0Qnl0ZVN0cmluZygpOworfQorCit2b2lkIENQV0xfQ2FyZXQ6OlRpbWVyUHJvYygpCit7CisJaWYgKG1fbkRlbGF5ID4gMCkKKwl7CisJCW1fbkRlbGF5LS07CQorCX0KKwllbHNlCisJeworCQltX2JGbGFzaCA9ICFtX2JGbGFzaDsKKwkJSW52YWxpZGF0ZVJlY3QoKTsKKwl9Cit9CisKK0NQREZfUmVjdCBDUFdMX0NhcmV0OjpHZXRDYXJldFJlY3QoKSBjb25zdAoreworCXJldHVybiBDUERGX1JlY3QobV9wdEZvb3QueCwKKwkJCW1fcHRGb290LnksCisJCQltX3B0SGVhZC54ICsgdGhpcy0+bV9mV2lkdGgsCisJCQltX3B0SGVhZC55KTsKK30KKwordm9pZCBDUFdMX0NhcmV0OjpTZXRDYXJldChGWF9CT09MIGJWaXNpYmxlLCBjb25zdCBDUERGX1BvaW50ICYgcHRIZWFkLCBjb25zdCBDUERGX1BvaW50ICYgcHRGb290KQoreworCWlmIChiVmlzaWJsZSkKKwl7CQorCQlpZiAoSXNWaXNpYmxlKCkpCisJCXsKKwkJCWlmIChtX3B0SGVhZC54ICE9IHB0SGVhZC54IHx8IG1fcHRIZWFkLnkgIT0gcHRIZWFkLnkgfHwgCisJCQkJCW1fcHRGb290LnggIT0gcHRGb290LnggfHwgbV9wdEZvb3QueSAhPSBwdEZvb3QueSkKKwkJCXsKKwkJCQl0aGlzLT5tX3B0SGVhZCA9IHB0SGVhZDsKKwkJCQl0aGlzLT5tX3B0Rm9vdCA9IHB0Rm9vdDsKKworCQkJCW1fYkZsYXNoID0gVFJVRTsKKwkJCQkvL01vdmUoR2V0Q2FyZXRSZWN0KCksRkFMU0UsVFJVRSk7CisJCQkJTW92ZShtX3JjSW52YWxpZCwgRkFMU0UsIFRSVUUpOworCQkJfQorCQl9CisJCWVsc2UKKwkJeworCQkJdGhpcy0+bV9wdEhlYWQgPSBwdEhlYWQ7CisJCQl0aGlzLT5tX3B0Rm9vdCA9IHB0Rm9vdDsKKworCQkJRW5kVGltZXIoKTsKKwkJCUJlZ2luVGltZXIoUFdMX0NBUkVUX0ZMQVNISU5URVJWQUwpOworCQkJCisJCQlDUFdMX1duZDo6U2V0VmlzaWJsZShUUlVFKTsKKwkJCW1fYkZsYXNoID0gVFJVRTsKKworCQkJLy9Nb3ZlKEdldENhcmV0UmVjdCgpLEZBTFNFLFRSVUUpOwkKKwkJCU1vdmUobV9yY0ludmFsaWQsIEZBTFNFLCBUUlVFKTsKKwkJfQkJCisJfQorCWVsc2UKKwl7CisJCXRoaXMtPm1fcHRIZWFkID0gQ1BERl9Qb2ludCgwLDApOworCQl0aGlzLT5tX3B0Rm9vdCA9IENQREZfUG9pbnQoMCwwKTsKKworCQltX2JGbGFzaCA9IEZBTFNFOworCQlpZiAoSXNWaXNpYmxlKCkpCisJCXsKKwkJCUVuZFRpbWVyKCk7CisJCQlDUFdMX1duZDo6U2V0VmlzaWJsZShGQUxTRSk7CisJCX0JCQorCX0KK30KKwordm9pZCBDUFdMX0NhcmV0OjpJbnZhbGlkYXRlUmVjdChDUERGX1JlY3QgKiBwUmVjdCkKK3sKKwlpZiAocFJlY3QpCisJeworCQlDUERGX1JlY3QgcmNSZWZyZXNoID0gQ1BXTF9VdGlsczo6SW5mbGF0ZVJlY3QoKnBSZWN0LDAuNWYpOworCQlyY1JlZnJlc2gudG9wICs9IDE7CisJCXJjUmVmcmVzaC5ib3R0b20gLT0gMTsJCisJCQorCQlDUFdMX1duZDo6SW52YWxpZGF0ZVJlY3QoJnJjUmVmcmVzaCk7CisJfQorCWVsc2UKKwkJQ1BXTF9XbmQ6OkludmFsaWRhdGVSZWN0KHBSZWN0KTsKK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9Db21ib0JveC5jcHAgYi9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX0NvbWJvQm94LmNwcAppbmRleCA3NjUwYTIzLi4wMjA3NjVhIDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX0NvbWJvQm94LmNwcAorKysgYi9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX0NvbWJvQm94LmNwcApAQCAtMSw2NjIgKzEsNjYyIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUERGV2luZG93LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9XbmQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0VkaXRDdHJsLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9FZGl0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9MaXN0Qm94LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9Db21ib0JveC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfVXRpbHMuaCINCi0NCi0jZGVmaW5lIFBXTENCX0RFRkFVTFRGT05UU0laRSAgMTIuMGYNCi0NCi0jZGVmaW5lIElzRmxvYXRaZXJvKGYpCQkJCQkJKChmKSA8IDAuMDAwMSAmJiAoZikgPiAtMC4wMDAxKQ0KLSNkZWZpbmUgSXNGbG9hdEJpZ2dlcihmYSxmYikJCQkJKChmYSkgPiAoZmIpICYmICFJc0Zsb2F0WmVybygoZmEpIC0gKGZiKSkpDQotI2RlZmluZSBJc0Zsb2F0U21hbGxlcihmYSxmYikJCQkJKChmYSkgPCAoZmIpICYmICFJc0Zsb2F0WmVybygoZmEpIC0gKGZiKSkpDQotI2RlZmluZSBJc0Zsb2F0RXF1YWwoZmEsZmIpCQkJCQlJc0Zsb2F0WmVybygoZmEpLShmYikpDQotDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX0NCTGlzdEJveCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotRlhfQk9PTAlDUFdMX0NCTGlzdEJveDo6T25MQnV0dG9uVXAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZykNCi17DQotCUNQV0xfV25kOjpPbkxCdXR0b25VcChwb2ludCxuRmxhZyk7DQotDQotCWlmIChtX2JNb3VzZURvd24pDQotCXsNCi0JCVJlbGVhc2VDYXB0dXJlKCk7DQotCQltX2JNb3VzZURvd24gPSBGQUxTRTsJDQotDQotCQlpZiAodGhpcy0+Q2xpZW50SGl0VGVzdChwb2ludCkpDQotCQl7DQotCQkJaWYgKENQV0xfV25kICogcFBhcmVudCA9IEdldFBhcmVudFdpbmRvdygpKQ0KLQkJCXsNCi0JCQkJcFBhcmVudC0+T25Ob3RpZnkodGhpcyxQTk1fTEJVVFRPTlVQLDAsUFdMX01BS0VEV09SRChwb2ludC54LHBvaW50LnkpKTsJCQkNCi0JCQl9DQotCQkNCi0JCQlGWF9CT09MIGJFeGl0ID0gRkFMU0U7DQotCQkJT25Ob3RpZnlTZWxDaGFuZ2VkKEZBTFNFLGJFeGl0LCBuRmxhZyk7DQotCQkJaWYgKGJFeGl0KSByZXR1cm4gRkFMU0U7DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9DQkxpc3RCb3g6Ok9uS2V5RG93bihGWF9XT1JEIG5DaGFyLCBGWF9CT09MICYgYkV4aXQsIEZYX0RXT1JEIG5GbGFnKQ0KLXsNCi0JaWYgKCFtX3BMaXN0KSByZXR1cm4gRkFMU0U7DQotDQotCXN3aXRjaCAobkNoYXIpDQotCXsNCi0JZGVmYXVsdDoNCi0JCXJldHVybiBGQUxTRTsNCi0JY2FzZSBGV0xfVktFWV9VcDoNCi0JY2FzZSBGV0xfVktFWV9Eb3duOg0KLQljYXNlIEZXTF9WS0VZX0hvbWU6DQotCWNhc2UgRldMX1ZLRVlfTGVmdDoNCi0JY2FzZSBGV0xfVktFWV9FbmQ6DQotCWNhc2UgRldMX1ZLRVlfUmlnaHQ6DQotCQlicmVhazsJDQotCX0NCi0NCi0Jc3dpdGNoIChuQ2hhcikNCi0Jew0KLQljYXNlIEZXTF9WS0VZX1VwOg0KLQkJbV9wTGlzdC0+T25WS19VUChJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpOw0KLQkJYnJlYWs7DQotCWNhc2UgRldMX1ZLRVlfRG93bjoNCi0JCW1fcExpc3QtPk9uVktfRE9XTihJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpOw0KLQkJYnJlYWs7DQotCWNhc2UgRldMX1ZLRVlfSG9tZToNCi0JCW1fcExpc3QtPk9uVktfSE9NRShJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpOw0KLQkJYnJlYWs7DQotCWNhc2UgRldMX1ZLRVlfTGVmdDoNCi0JCW1fcExpc3QtPk9uVktfTEVGVChJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpOw0KLQkJYnJlYWs7DQotCWNhc2UgRldMX1ZLRVlfRW5kOg0KLQkJbV9wTGlzdC0+T25WS19FTkQoSXNTSElGVHByZXNzZWQobkZsYWcpLElzQ1RSTHByZXNzZWQobkZsYWcpKTsNCi0JCWJyZWFrOw0KLQljYXNlIEZXTF9WS0VZX1JpZ2h0Og0KLQkJbV9wTGlzdC0+T25WS19SSUdIVChJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpOw0KLQkJYnJlYWs7DQotCWNhc2UgRldMX1ZLRVlfRGVsZXRlOg0KLQkJYnJlYWs7DQotCX0NCi0NCi0JT25Ob3RpZnlTZWxDaGFuZ2VkKFRSVUUsYkV4aXQsIG5GbGFnKTsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wJQ1BXTF9DQkxpc3RCb3g6Ok9uQ2hhcihGWF9XT1JEIG5DaGFyLCBGWF9CT09MICYgYkV4aXQsIEZYX0RXT1JEIG5GbGFnKQ0KLXsNCi0JaWYgKCFtX3BMaXN0KSByZXR1cm4gRkFMU0U7DQotDQotCWlmICghbV9wTGlzdC0+T25DaGFyKG5DaGFyLElzU0hJRlRwcmVzc2VkKG5GbGFnKSxJc0NUUkxwcmVzc2VkKG5GbGFnKSkpIHJldHVybiBGQUxTRTsNCi0NCi0JaWYgKENQV0xfQ29tYm9Cb3gqIHBDb21ib0JveCA9IChDUFdMX0NvbWJvQm94KilHZXRQYXJlbnRXaW5kb3coKSkNCi0Jew0KLQkJcENvbWJvQm94LT5TZXRTZWxlY3RUZXh0KCk7DQotCX0NCi0NCi0JT25Ob3RpZnlTZWxDaGFuZ2VkKFRSVUUsYkV4aXQsbkZsYWcpOw0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX0NCQnV0dG9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi12b2lkIENQV0xfQ0JCdXR0b246OkdldFRoaXNBcHBlYXJhbmNlU3RyZWFtKENGWF9CeXRlVGV4dEJ1ZiAmIHNBcHBTdHJlYW0pDQotew0KLQlDUFdMX1duZDo6R2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oc0FwcFN0cmVhbSk7DQotCQ0KLQlDUERGX1JlY3QgcmVjdFduZCA9IENQV0xfV25kOjpHZXRXaW5kb3dSZWN0KCk7DQotCQ0KLQlpZiAoSXNWaXNpYmxlKCkgJiYgIXJlY3RXbmQuSXNFbXB0eSgpKQ0KLQl7DQotCQlDRlhfQnl0ZVRleHRCdWYgc0J1dHRvbjsJDQotDQotCQlDUERGX1BvaW50IHB0Q2VudGVyID0gdGhpcy0+R2V0Q2VudGVyUG9pbnQoKTsNCi0NCi0JCUNQREZfUG9pbnQgcHQxKHB0Q2VudGVyLnggLSBQV0xfQ0JCVVRUT05fVFJJQU5HTEVfSEFMRkxFTixwdENlbnRlci55ICsgUFdMX0NCQlVUVE9OX1RSSUFOR0xFX0hBTEZMRU4gKiAwLjVmKTsNCi0JCUNQREZfUG9pbnQgcHQyKHB0Q2VudGVyLnggKyBQV0xfQ0JCVVRUT05fVFJJQU5HTEVfSEFMRkxFTixwdENlbnRlci55ICsgUFdMX0NCQlVUVE9OX1RSSUFOR0xFX0hBTEZMRU4gKiAwLjVmKTsNCi0JCUNQREZfUG9pbnQgcHQzKHB0Q2VudGVyLngscHRDZW50ZXIueSAtIFBXTF9DQkJVVFRPTl9UUklBTkdMRV9IQUxGTEVOICogMC41Zik7DQotDQotCQlpZiAoSXNGbG9hdEJpZ2dlcihyZWN0V25kLnJpZ2h0IC0gcmVjdFduZC5sZWZ0LFBXTF9DQkJVVFRPTl9UUklBTkdMRV9IQUxGTEVOICogMikNCi0JCQkmJg0KLQkJCUlzRmxvYXRCaWdnZXIocmVjdFduZC50b3AgLSByZWN0V25kLmJvdHRvbSxQV0xfQ0JCVVRUT05fVFJJQU5HTEVfSEFMRkxFTikNCi0JCQkpDQotCQl7DQotCQkJc0J1dHRvbiA8PCAiMCBnXG4iOw0KLQkJCXNCdXR0b24gPDwgcHQxLnggPDwgIiAiIDw8IHB0MS55IDw8ICIgbVxuIjsNCi0JCQlzQnV0dG9uIDw8IHB0Mi54IDw8ICIgIiA8PCBwdDIueSA8PCAiIGxcbiI7DQotCQkJc0J1dHRvbiA8PCBwdDMueCA8PCAiICIgPDwgcHQzLnkgPDwgIiBsXG4iOw0KLQkJCXNCdXR0b24gPDwgcHQxLnggPDwgIiAiIDw8IHB0MS55IDw8ICIgbCBmXG4iOw0KLQ0KLQkJCXNBcHBTdHJlYW0gPDwgInFcbiIgPDwgc0J1dHRvbiA8PCAiUVxuIjsNCi0JCX0JDQotCX0NCi19DQotDQotdm9pZCBDUFdMX0NCQnV0dG9uOjpEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSkNCi17DQotCUNQV0xfV25kOjpEcmF3VGhpc0FwcGVhcmFuY2UocERldmljZSxwVXNlcjJEZXZpY2UpOw0KLQ0KLQlDUERGX1JlY3QgcmVjdFduZCA9IENQV0xfV25kOjpHZXRXaW5kb3dSZWN0KCk7DQotCQ0KLQlpZiAoSXNWaXNpYmxlKCkgJiYgIXJlY3RXbmQuSXNFbXB0eSgpKQ0KLQl7DQotCQlDUERGX1BvaW50IHB0Q2VudGVyID0gdGhpcy0+R2V0Q2VudGVyUG9pbnQoKTsNCi0NCi0JCUNQREZfUG9pbnQgcHQxKHB0Q2VudGVyLnggLSBQV0xfQ0JCVVRUT05fVFJJQU5HTEVfSEFMRkxFTixwdENlbnRlci55ICsgUFdMX0NCQlVUVE9OX1RSSUFOR0xFX0hBTEZMRU4gKiAwLjVmKTsNCi0JCUNQREZfUG9pbnQgcHQyKHB0Q2VudGVyLnggKyBQV0xfQ0JCVVRUT05fVFJJQU5HTEVfSEFMRkxFTixwdENlbnRlci55ICsgUFdMX0NCQlVUVE9OX1RSSUFOR0xFX0hBTEZMRU4gKiAwLjVmKTsNCi0JCUNQREZfUG9pbnQgcHQzKHB0Q2VudGVyLngscHRDZW50ZXIueSAtIFBXTF9DQkJVVFRPTl9UUklBTkdMRV9IQUxGTEVOICogMC41Zik7DQotDQotCQlpZiAoSXNGbG9hdEJpZ2dlcihyZWN0V25kLnJpZ2h0IC0gcmVjdFduZC5sZWZ0LFBXTF9DQkJVVFRPTl9UUklBTkdMRV9IQUxGTEVOICogMikNCi0JCQkmJg0KLQkJCUlzRmxvYXRCaWdnZXIocmVjdFduZC50b3AgLSByZWN0V25kLmJvdHRvbSxQV0xfQ0JCVVRUT05fVFJJQU5HTEVfSEFMRkxFTikNCi0JCQkpDQotCQl7DQotCQkJQ0ZYX1BhdGhEYXRhIHBhdGg7DQotDQotCQkJcGF0aC5TZXRQb2ludENvdW50KDQpOw0KLQkJCXBhdGguU2V0UG9pbnQoMCwgcHQxLngsIHB0MS55LCBGWFBUX01PVkVUTyk7DQotCQkJcGF0aC5TZXRQb2ludCgxLCBwdDIueCwgcHQyLnksIEZYUFRfTElORVRPKTsNCi0JCQlwYXRoLlNldFBvaW50KDIsIHB0My54LCBwdDMueSwgRlhQVF9MSU5FVE8pOw0KLQkJCXBhdGguU2V0UG9pbnQoMywgcHQxLngsIHB0MS55LCBGWFBUX0xJTkVUTyk7DQotDQotCQkJcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgTlVMTCwgDQotCQkJCUNQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKFBXTF9ERUZBVUxUX0JMQUNLQ09MT1IsR2V0VHJhbnNwYXJlbmN5KCkpLCANCi0JCQkJMCwgRlhGSUxMX0FMVEVSTkFURSk7DQotCQl9DQotCX0NCi19DQotDQotRlhfQk9PTAlDUFdMX0NCQnV0dG9uOjpPbkxCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlDUFdMX1duZDo6T25MQnV0dG9uRG93bihwb2ludCxuRmxhZyk7DQotDQotCVNldENhcHR1cmUoKTsNCi0NCi0JaWYgKENQV0xfV25kICogcFBhcmVudCA9IEdldFBhcmVudFdpbmRvdygpKQ0KLQl7CQkNCi0JCXBQYXJlbnQtPk9uTm90aWZ5KHRoaXMsUE5NX0xCVVRUT05ET1dOLDAsUFdMX01BS0VEV09SRChwb2ludC54LHBvaW50LnkpKTsNCi0JfQ0KLQkNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wJQ1BXTF9DQkJ1dHRvbjo6T25MQnV0dG9uVXAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZykNCi17DQotCUNQV0xfV25kOjpPbkxCdXR0b25VcChwb2ludCwgbkZsYWcpOw0KLQ0KLQlSZWxlYXNlQ2FwdHVyZSgpOw0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX0NvbWJvQm94IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DUFdMX0NvbWJvQm94OjpDUFdMX0NvbWJvQm94KCkgOiBtX3BFZGl0KE5VTEwpLA0KLQltX3BCdXR0b24oTlVMTCksDQotCW1fcExpc3QoTlVMTCksDQotCW1fYlBvcHVwKEZBTFNFKSwNCi0JbV9uUG9wdXBXaGVyZSgwKSwNCi0JbV9uU2VsZWN0SXRlbSgtMSksDQotCW1fcEZpbGxlck5vdGlmeShOVUxMKQ0KLXsNCi19DQotDQotQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9Db21ib0JveDo6R2V0Q2xhc3NOYW1lKCkgY29uc3QNCi17DQotCXJldHVybiAiQ1BXTF9Db21ib0JveCI7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Db21ib0JveDo6T25DcmVhdGUoUFdMX0NSRUFURVBBUkFNICYgY3ApDQotew0KLQljcC5kd0ZsYWdzICY9IH5QV1NfSFNDUk9MTDsNCi0JY3AuZHdGbGFncyAmPSB+UFdTX1ZTQ1JPTEw7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Db21ib0JveDo6U2V0Rm9jdXMoKQ0KLXsNCi0JaWYgKG1fcEVkaXQpDQotCQltX3BFZGl0LT5TZXRGb2N1cygpOw0KLX0NCi0NCi12b2lkIENQV0xfQ29tYm9Cb3g6OktpbGxGb2N1cygpDQotew0KLQlTZXRQb3B1cChGQUxTRSk7DQotCUNQV0xfV25kOjpLaWxsRm9jdXMoKTsNCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgQ1BXTF9Db21ib0JveDo6R2V0VGV4dCgpIGNvbnN0DQotew0KLQlpZiAobV9wRWRpdCkNCi0Jew0KLQkJcmV0dXJuIG1fcEVkaXQtPkdldFRleHQoKTsNCi0JfQ0KLQlyZXR1cm4gQ0ZYX1dpZGVTdHJpbmcoKTsNCi19DQotDQotdm9pZCBDUFdMX0NvbWJvQm94OjpTZXRUZXh0KEZYX0xQQ1dTVFIgdGV4dCkNCi17DQotCWlmIChtX3BFZGl0KQ0KLQkJbV9wRWRpdC0+U2V0VGV4dCh0ZXh0KTsNCi19DQotDQotdm9pZCBDUFdMX0NvbWJvQm94OjpBZGRTdHJpbmcoRlhfTFBDV1NUUiBzdHJpbmcpDQotew0KLQlpZiAobV9wTGlzdCkNCi0JCW1fcExpc3QtPkFkZFN0cmluZyhzdHJpbmcpOw0KLX0NCi0NCi1GWF9JTlQzMiBDUFdMX0NvbWJvQm94OjpHZXRTZWxlY3QoKSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fblNlbGVjdEl0ZW07DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Db21ib0JveDo6U2V0U2VsZWN0KEZYX0lOVDMyIG5JdGVtSW5kZXgpDQotew0KLQlpZiAobV9wTGlzdCkNCi0JCW1fcExpc3QtPlNlbGVjdChuSXRlbUluZGV4KTsNCi0NCi0JbV9wRWRpdC0+U2V0VGV4dChtX3BMaXN0LT5HZXRUZXh0KCkpOw0KLQ0KLQltX25TZWxlY3RJdGVtID0gbkl0ZW1JbmRleDsNCi19DQotDQotdm9pZCBDUFdMX0NvbWJvQm94OjpTZXRFZGl0U2VsKEZYX0lOVDMyIG5TdGFydENoYXIsRlhfSU5UMzIgbkVuZENoYXIpDQotew0KLQlpZiAobV9wRWRpdCkNCi0Jew0KLQkJbV9wRWRpdC0+U2V0U2VsKG5TdGFydENoYXIsbkVuZENoYXIpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Db21ib0JveDo6R2V0RWRpdFNlbChGWF9JTlQzMiAmIG5TdGFydENoYXIsIEZYX0lOVDMyICYgbkVuZENoYXIpIGNvbnN0DQotew0KLQluU3RhcnRDaGFyID0gLTE7DQotCW5FbmRDaGFyID0gLTE7DQotDQotCWlmIChtX3BFZGl0KQ0KLQl7DQotCQltX3BFZGl0LT5HZXRTZWwoblN0YXJ0Q2hhcixuRW5kQ2hhcik7DQotCX0NCi19DQotDQotdm9pZCBDUFdMX0NvbWJvQm94OjpDbGVhcigpDQotew0KLQlpZiAobV9wRWRpdCkNCi0Jew0KLQkJbV9wRWRpdC0+Q2xlYXIoKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENQV0xfQ29tYm9Cb3g6OkNyZWF0ZUNoaWxkV25kKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKQ0KLXsNCi0JQ3JlYXRlRWRpdChjcCk7DQotCUNyZWF0ZUJ1dHRvbihjcCk7DQotCUNyZWF0ZUxpc3RCb3goY3ApOw0KLX0NCi0NCi12b2lkIENQV0xfQ29tYm9Cb3g6OkNyZWF0ZUVkaXQoY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApDQotew0KLQlpZiAoIW1fcEVkaXQpDQotCXsNCi0JCW1fcEVkaXQgPSBuZXcgQ1BXTF9DQkVkaXQ7DQotCQltX3BFZGl0LT5BdHRhY2hGRkxEYXRhKG1fcEZvcm1GaWxsZXIpOw0KLQ0KLQkJUFdMX0NSRUFURVBBUkFNIGVjcCA9IGNwOw0KLQkJZWNwLnBQYXJlbnRXbmQgPSB0aGlzOw0KLQkJZWNwLmR3RmxhZ3MgPSAgUFdTX1ZJU0lCTEUgfCBQV1NfQ0hJTEQgfCBQV1NfQk9SREVSIHwgUEVTX0NFTlRFUiB8IFBFU19BVVRPU0NST0xMIHwgUEVTX1VORE87DQotDQotCQlpZiAoSGFzRmxhZyhQV1NfQVVUT0ZPTlRTSVpFKSkNCi0JCQllY3AuZHdGbGFncyB8PSBQV1NfQVVUT0ZPTlRTSVpFOw0KLQ0KLQkJaWYgKCFIYXNGbGFnKFBDQlNfQUxMT1dDVVNUT01URVhUKSkNCi0JCQllY3AuZHdGbGFncyB8PSBQV1NfUkVBRE9OTFk7DQotDQotCQllY3AucmNSZWN0V25kID0gQ1BERl9SZWN0KDAsMCwwLDApOw0KLQkJZWNwLmR3Qm9yZGVyV2lkdGggPSAwOw0KLQkJZWNwLm5Cb3JkZXJTdHlsZSA9IFBCU19TT0xJRDsNCi0NCi0JCW1fcEVkaXQtPkNyZWF0ZShlY3ApOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Db21ib0JveDo6Q3JlYXRlQnV0dG9uKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKQ0KLXsNCi0JaWYgKCFtX3BCdXR0b24pDQotCXsNCi0JCW1fcEJ1dHRvbiA9IG5ldyBDUFdMX0NCQnV0dG9uOwkNCi0NCi0JCVBXTF9DUkVBVEVQQVJBTSBiY3AgPSBjcDsNCi0JCWJjcC5wUGFyZW50V25kID0gdGhpczsNCi0JCWJjcC5kd0ZsYWdzID0gUFdTX1ZJU0lCTEUgfCBQV1NfQ0hJTEQgfCBQV1NfQk9SREVSIHwgUFdTX0JBQ0tHUk9VTkQ7CQ0KLQkJYmNwLnNCYWNrZ3JvdW5kQ29sb3IgPSBQV0xfU0NST0xMQkFSX0JLQ09MT1I7DQotCQliY3Auc0JvcmRlckNvbG9yID0gUFdMX0RFRkFVTFRfQkxBQ0tDT0xPUjsNCi0JCWJjcC5kd0JvcmRlcldpZHRoID0gMjsNCi0JCWJjcC5uQm9yZGVyU3R5bGUgPSBQQlNfQkVWRUxFRDsNCi0JCWJjcC5lQ3Vyc29yVHlwZSA9IEZYQ1RfQVJST1c7DQotDQotCQltX3BCdXR0b24tPkNyZWF0ZShiY3ApOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Db21ib0JveDo6Q3JlYXRlTGlzdEJveChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCkNCi17DQotCWlmICghbV9wTGlzdCkNCi0Jew0KLQkJbV9wTGlzdCA9IG5ldyBDUFdMX0NCTGlzdEJveDsNCi0JCW1fcExpc3QtPkF0dGFjaEZGTERhdGEobV9wRm9ybUZpbGxlcik7DQotCQlQV0xfQ1JFQVRFUEFSQU0gbGNwID0gY3A7DQotCQlsY3AucFBhcmVudFduZCA9IHRoaXM7DQotCQlsY3AuZHdGbGFncyA9IFBXU19DSElMRCB8IFBXU19CT1JERVIgfCBQV1NfQkFDS0dST1VORCB8IFBMQlNfSE9WRVJTRUwgfCBQV1NfVlNDUk9MTDsNCi0JCWxjcC5uQm9yZGVyU3R5bGUgPSBQQlNfU09MSUQ7DQotCQlsY3AuZHdCb3JkZXJXaWR0aCA9IDE7DQotCQlsY3AuZUN1cnNvclR5cGUgPSBGWENUX0FSUk9XOw0KLQkJbGNwLnJjUmVjdFduZCA9IENQREZfUmVjdCgwLDAsMCwwKTsNCi0NCi0JCWlmIChjcC5kd0ZsYWdzICYgUFdTX0FVVE9GT05UU0laRSkNCi0JCQlsY3AuZkZvbnRTaXplID0gUFdMQ0JfREVGQVVMVEZPTlRTSVpFOw0KLQkJZWxzZQ0KLQkJCWxjcC5mRm9udFNpemUgPSBjcC5mRm9udFNpemU7DQotDQotCQlpZiAoY3Auc0JvcmRlckNvbG9yLm5Db2xvclR5cGUgPT0gQ09MT1JUWVBFX1RSQU5TUEFSRU5UKQ0KLQkJCWxjcC5zQm9yZGVyQ29sb3IgPSBQV0xfREVGQVVMVF9CTEFDS0NPTE9SOw0KLQ0KLQkJaWYgKGNwLnNCYWNrZ3JvdW5kQ29sb3IubkNvbG9yVHlwZSA9PSBDT0xPUlRZUEVfVFJBTlNQQVJFTlQpDQotCQkJbGNwLnNCYWNrZ3JvdW5kQ29sb3IgPSBQV0xfREVGQVVMVF9XSElURUNPTE9SOwkJDQotDQotCQltX3BMaXN0LT5DcmVhdGUobGNwKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENQV0xfQ29tYm9Cb3g6OlJlUG9zQ2hpbGRXbmQoKQ0KLXsNCi0JQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOw0KLQ0KLQlpZiAobV9iUG9wdXApDQotCXsNCi0JCUNQREZfUmVjdCByY2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOw0KLQkJQ1BERl9SZWN0IHJjQnV0dG9uID0gcmNsaWVudDsNCi0JCUNQREZfUmVjdCByY0VkaXQgPSByY0NsaWVudDsNCi0JCUNQREZfUmVjdCByY0xpc3QgPSBDUFdMX1duZDo6R2V0V2luZG93UmVjdCgpOw0KLQ0KLQkJRlhfRkxPQVQgZk9sZFdpbmRvd0hlaWdodCA9IG1fcmNPbGRXaW5kb3cuSGVpZ2h0KCk7DQotCQlGWF9GTE9BVCBmT2xkQ2xpZW50SGVpZ2h0ID0gZk9sZFdpbmRvd0hlaWdodCAtIEdldEJvcmRlcldpZHRoKCkgKiAyOw0KLQkJDQotCQlzd2l0Y2ggKG1fblBvcHVwV2hlcmUpDQotCQl7DQotCQljYXNlIDA6DQotCQkJcmNCdXR0b24ubGVmdCA9IHJjQnV0dG9uLnJpZ2h0IC0gUFdMX0NPTUJPQk9YX0JVVFRPTl9XSURUSDsNCi0NCi0JCQlpZiAocmNCdXR0b24ubGVmdCA8IHJjbGllbnQubGVmdCkNCi0JCQkJcmNCdXR0b24ubGVmdCA9IHJjbGllbnQubGVmdDsNCi0JCQkNCi0JCQlyY0J1dHRvbi5ib3R0b20gPSByY0J1dHRvbi50b3AgLSBmT2xkQ2xpZW50SGVpZ2h0Ow0KLQ0KLQkJCXJjRWRpdC5yaWdodCA9IHJjQnV0dG9uLmxlZnQgLSAxLjBmOw0KLQ0KLQkJCWlmIChyY0VkaXQubGVmdCA8IHJjbGllbnQubGVmdCkNCi0JCQkJcmNFZGl0LmxlZnQgPSByY2xpZW50LmxlZnQ7DQotDQotCQkJaWYgKHJjRWRpdC5yaWdodCA8IHJjRWRpdC5sZWZ0KQ0KLQkJCQlyY0VkaXQucmlnaHQgPSByY0VkaXQubGVmdDsNCi0NCi0JCQlyY0VkaXQuYm90dG9tID0gcmNFZGl0LnRvcCAtIGZPbGRDbGllbnRIZWlnaHQ7DQotDQotCQkJcmNMaXN0LnRvcCAtPSBmT2xkV2luZG93SGVpZ2h0Ow0KLQ0KLQkJCWJyZWFrOw0KLQkJY2FzZSAxOg0KLQkJCXJjQnV0dG9uLmxlZnQgPSByY0J1dHRvbi5yaWdodCAtIFBXTF9DT01CT0JPWF9CVVRUT05fV0lEVEg7DQotDQotCQkJaWYgKHJjQnV0dG9uLmxlZnQgPCByY2xpZW50LmxlZnQpDQotCQkJCXJjQnV0dG9uLmxlZnQgPSByY2xpZW50LmxlZnQ7DQotCQkJDQotCQkJcmNCdXR0b24udG9wID0gcmNCdXR0b24uYm90dG9tICsgZk9sZENsaWVudEhlaWdodDsNCi0NCi0JCQlyY0VkaXQucmlnaHQgPSByY0J1dHRvbi5sZWZ0IC0gMS4wZjsNCi0NCi0JCQlpZiAocmNFZGl0LmxlZnQgPCByY2xpZW50LmxlZnQpDQotCQkJCXJjRWRpdC5sZWZ0ID0gcmNsaWVudC5sZWZ0Ow0KLQ0KLQkJCWlmIChyY0VkaXQucmlnaHQgPCByY0VkaXQubGVmdCkNCi0JCQkJcmNFZGl0LnJpZ2h0ID0gcmNFZGl0LmxlZnQ7DQotDQotCQkJcmNFZGl0LnRvcCA9IHJjRWRpdC5ib3R0b20gKyBmT2xkQ2xpZW50SGVpZ2h0Ow0KLQ0KLQkJCXJjTGlzdC5ib3R0b20gKz0gZk9sZFdpbmRvd0hlaWdodDsNCi0NCi0JCQlicmVhazsNCi0JCX0JCQ0KLQ0KLQkJaWYgKG1fcEJ1dHRvbikNCi0JCQltX3BCdXR0b24tPk1vdmUocmNCdXR0b24sVFJVRSxGQUxTRSk7DQotDQotCQlpZiAobV9wRWRpdCkNCi0JCQltX3BFZGl0LT5Nb3ZlKHJjRWRpdCxUUlVFLEZBTFNFKTsNCi0NCi0JCWlmIChtX3BMaXN0KQ0KLQkJew0KLQkJCW1fcExpc3QtPlNldFZpc2libGUoVFJVRSk7CQkJDQotCQkJbV9wTGlzdC0+TW92ZShyY0xpc3QsVFJVRSxGQUxTRSk7DQotCQkJbV9wTGlzdC0+U2Nyb2xsVG9MaXN0SXRlbShtX25TZWxlY3RJdGVtKTsNCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsJCQ0KLQkJQ1BERl9SZWN0IHJjQnV0dG9uID0gcmNDbGllbnQ7DQotDQotCQlyY0J1dHRvbi5sZWZ0ID0gcmNCdXR0b24ucmlnaHQgLSBQV0xfQ09NQk9CT1hfQlVUVE9OX1dJRFRIOwkNCi0JCQ0KLQkJaWYgKHJjQnV0dG9uLmxlZnQgPCByY0NsaWVudC5sZWZ0KQ0KLQkJCXJjQnV0dG9uLmxlZnQgPSByY0NsaWVudC5sZWZ0Ow0KLQ0KLQkJaWYgKG1fcEJ1dHRvbikNCi0JCQltX3BCdXR0b24tPk1vdmUocmNCdXR0b24sVFJVRSxGQUxTRSk7DQotDQotCQlDUERGX1JlY3QgcmNFZGl0ID0gcmNDbGllbnQ7DQotCQlyY0VkaXQucmlnaHQgPSByY0J1dHRvbi5sZWZ0IC0gMS4wZjsNCi0NCi0JCWlmIChyY0VkaXQubGVmdCA8IHJjQ2xpZW50LmxlZnQpDQotCQkJcmNFZGl0LmxlZnQgPSByY0NsaWVudC5sZWZ0Ow0KLQ0KLQkJaWYgKHJjRWRpdC5yaWdodCA8IHJjRWRpdC5sZWZ0KQ0KLQkJCXJjRWRpdC5yaWdodCA9IHJjRWRpdC5sZWZ0Ow0KLQ0KLQkJaWYgKG1fcEVkaXQpDQotCQkJbV9wRWRpdC0+TW92ZShyY0VkaXQsVFJVRSxGQUxTRSk7DQotDQotCQlpZiAobV9wTGlzdCkNCi0JCQltX3BMaXN0LT5TZXRWaXNpYmxlKEZBTFNFKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENQV0xfQ29tYm9Cb3g6OlNlbGVjdEFsbCgpDQotew0KLQlpZiAobV9wRWRpdCAmJiBIYXNGbGFnKFBDQlNfQUxMT1dDVVNUT01URVhUKSkNCi0JCW1fcEVkaXQtPlNlbGVjdEFsbCgpOw0KLX0NCi0NCi1DUERGX1JlY3QgQ1BXTF9Db21ib0JveDo6R2V0Rm9jdXNSZWN0KCkgY29uc3QNCi17DQotCXJldHVybiBDUERGX1JlY3QoKTsNCi19DQotDQotdm9pZCBDUFdMX0NvbWJvQm94OjpTZXRQb3B1cChGWF9CT09MIGJQb3B1cCkNCi17DQotCWlmICghbV9wTGlzdCkgcmV0dXJuOw0KLQlpZiAoYlBvcHVwID09IG1fYlBvcHVwKSByZXR1cm47DQotCUZYX0ZMT0FUIGZMaXN0SGVpZ2h0ID0gbV9wTGlzdC0+R2V0Q29udGVudFJlY3QoKS5IZWlnaHQoKTsNCi0JaWYgKCFJc0Zsb2F0QmlnZ2VyKGZMaXN0SGVpZ2h0LDAuMGYpKSByZXR1cm47DQotDQotCWlmIChiUG9wdXApDQotCXsNCi0JCWlmIChtX3BGaWxsZXJOb3RpZnkpDQotCQl7DQotCQkJRlhfSU5UMzIgbldoZXJlID0gMDsNCi0JCQlGWF9GTE9BVCBmUG9wdXBSZXQgPSAwLjBmOw0KLQkJCUZYX0ZMT0FUIGZQb3B1cE1pbiA9IDAuMGY7DQotCQkJaWYgKG1fcExpc3QtPkdldENvdW50KCkgPiAzKQ0KLQkJCQlmUG9wdXBNaW4gPSBtX3BMaXN0LT5HZXRGaXJzdEhlaWdodCgpICogMyArIG1fcExpc3QtPkdldEJvcmRlcldpZHRoKCkgKiAyOw0KLQkJCUZYX0ZMT0FUIGZQb3B1cE1heCA9IGZMaXN0SGVpZ2h0ICsgbV9wTGlzdC0+R2V0Qm9yZGVyV2lkdGgoKSAqIDI7DQotCQkJbV9wRmlsbGVyTm90aWZ5LT5RdWVyeVdoZXJlUG9wdXAoR2V0QXR0YWNoZWREYXRhKCksIGZQb3B1cE1pbixmUG9wdXBNYXgsbldoZXJlLGZQb3B1cFJldCk7DQotDQotCQkJaWYgKElzRmxvYXRCaWdnZXIoZlBvcHVwUmV0LDAuMGYpKQ0KLQkJCXsNCi0JCQkJbV9iUG9wdXAgPSBiUG9wdXA7DQotDQotCQkJCUNQREZfUmVjdCByY1dpbmRvdyA9IENQV0xfV25kOjpHZXRXaW5kb3dSZWN0KCk7DQotCQkJCW1fcmNPbGRXaW5kb3cgPSByY1dpbmRvdzsNCi0JCQkJc3dpdGNoIChuV2hlcmUpDQotCQkJCXsNCi0JCQkJZGVmYXVsdDoNCi0JCQkJY2FzZSAwOg0KLQkJCQkJcmNXaW5kb3cuYm90dG9tIC09IGZQb3B1cFJldDsNCi0JCQkJCWJyZWFrOw0KLQkJCQljYXNlIDE6DQotCQkJCQlyY1dpbmRvdy50b3AgKz0gZlBvcHVwUmV0Ow0KLQkJCQkJYnJlYWs7DQotCQkJCX0NCi0JCQkJDQotCQkJCW1fblBvcHVwV2hlcmUgPSBuV2hlcmU7DQotCQkJCU1vdmUocmNXaW5kb3csIFRSVUUsIFRSVUUpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsNCi0JCW1fYlBvcHVwID0gYlBvcHVwOw0KLQkJTW92ZShtX3JjT2xkV2luZG93LCBUUlVFLCBUUlVFKTsNCi0JfQ0KLX0NCi0NCi1GWF9CT09MIENQV0xfQ29tYm9Cb3g6Ok9uS2V5RG93bihGWF9XT1JEIG5DaGFyLCBGWF9EV09SRCBuRmxhZykNCi17DQotCWlmICghbV9wTGlzdCkgcmV0dXJuIEZBTFNFOw0KLQlpZiAoIW1fcEVkaXQpIHJldHVybiBGQUxTRTsNCi0NCi0JbV9uU2VsZWN0SXRlbSA9IC0xOw0KLQ0KLQlzd2l0Y2ggKG5DaGFyKQ0KLQl7DQotCWNhc2UgRldMX1ZLRVlfVXA6DQotCQlpZiAobV9wTGlzdC0+R2V0Q3VyU2VsKCkgPiAwKQ0KLQkJew0KLQkJCUZYX0JPT0wgYkV4aXQgPSBGQUxTRTsNCi0JCQlpZiAobV9wTGlzdC0+T25LZXlEb3duKG5DaGFyLGJFeGl0LG5GbGFnKSkNCi0JCQl7DQotCQkJCWlmIChiRXhpdCkgcmV0dXJuIEZBTFNFOw0KLQkJCQlTZXRTZWxlY3RUZXh0KCk7CQkJCQ0KLQkJCX0NCi0JCX0NCi0JCXJldHVybiBUUlVFOw0KLQljYXNlIEZXTF9WS0VZX0Rvd246DQotCQlpZiAobV9wTGlzdC0+R2V0Q3VyU2VsKCkgPCBtX3BMaXN0LT5HZXRDb3VudCgpIC0gMSkNCi0JCXsNCi0JCQlGWF9CT09MIGJFeGl0ID0gRkFMU0U7DQotCQkJaWYgKG1fcExpc3QtPk9uS2V5RG93bihuQ2hhcixiRXhpdCxuRmxhZykpDQotCQkJew0KLQkJCQlpZiAoYkV4aXQpIHJldHVybiBGQUxTRTsNCi0JCQkJU2V0U2VsZWN0VGV4dCgpOwkJCQkNCi0JCQl9DQotCQl9DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQ0KLQlpZiAoSGFzRmxhZyhQQ0JTX0FMTE9XQ1VTVE9NVEVYVCkpDQotCQlyZXR1cm4gbV9wRWRpdC0+T25LZXlEb3duKG5DaGFyLG5GbGFnKTsNCi0JZWxzZQ0KLQkJcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MIENQV0xfQ29tYm9Cb3g6Ok9uQ2hhcihGWF9XT1JEIG5DaGFyLCBGWF9EV09SRCBuRmxhZykNCi17DQotCWlmICghbV9wTGlzdCkgcmV0dXJuIEZBTFNFOw0KLQlpZiAoIW1fcEVkaXQpIHJldHVybiBGQUxTRTsNCi0NCi0JbV9uU2VsZWN0SXRlbSA9IC0xOw0KLQlGWF9CT09MIGJFeGl0ID0gRkFMU0U7DQotDQotCWlmIChIYXNGbGFnKFBDQlNfQUxMT1dDVVNUT01URVhUKSkNCi0Jew0KLQkJcmV0dXJuIG1fcEVkaXQtPk9uQ2hhcihuQ2hhcixuRmxhZyk7CQkJDQotCX0NCi0JZWxzZQ0KLQl7DQotCQlpZiAobV9wTGlzdC0+T25DaGFyKG5DaGFyLGJFeGl0LG5GbGFnKSkNCi0JCXsNCi0JCQlyZXR1cm4gYkV4aXQ7DQotCQl9DQotCQllbHNlDQotCQkJcmV0dXJuIEZBTFNFOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Db21ib0JveDo6T25Ob3RpZnkoQ1BXTF9XbmQqIHBXbmQsIEZYX0RXT1JEIG1zZywgRlhfSU5UUFRSIHdQYXJhbSwgRlhfSU5UUFRSIGxQYXJhbSkNCi17DQotCXN3aXRjaCAobXNnKQ0KLQl7DQotCWNhc2UgUE5NX0xCVVRUT05ET1dOOg0KLQkJaWYgKHBXbmQgPT0gbV9wQnV0dG9uKQ0KLQkJew0KLQkJCVNldFBvcHVwKCFtX2JQb3B1cCk7DQotCQkJcmV0dXJuOw0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgUE5NX0xCVVRUT05VUDoNCi0JCWlmIChtX3BFZGl0ICYmIG1fcExpc3QpDQotCQl7DQotCQkJaWYgKHBXbmQgPT0gbV9wTGlzdCkNCi0JCQl7CQkJDQotCQkJCVNldFNlbGVjdFRleHQoKTsNCi0JCQkJU2VsZWN0QWxsKCk7DQotCQkJCW1fcEVkaXQtPlNldEZvY3VzKCk7DQotCQkJCVNldFBvcHVwKEZBTFNFKTsNCi0JCQkJcmV0dXJuOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQlDUFdMX1duZDo6T25Ob3RpZnkocFduZCxtc2csd1BhcmFtLGxQYXJhbSk7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9Db21ib0JveDo6SXNQb3B1cCgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9iUG9wdXA7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Db21ib0JveDo6U2V0U2VsZWN0VGV4dCgpDQotew0KLQlDRlhfV2lkZVN0cmluZyBzd1RleHQgPSBtX3BMaXN0LT5HZXRUZXh0KCk7DQotCW1fcEVkaXQtPlNlbGVjdEFsbCgpOw0KLQltX3BFZGl0LT5SZXBsYWNlU2VsKG1fcExpc3QtPkdldFRleHQoKSk7DQotCW1fcEVkaXQtPlNlbGVjdEFsbCgpOw0KLQ0KLQltX25TZWxlY3RJdGVtID0gbV9wTGlzdC0+R2V0Q3VyU2VsKCk7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9Db21ib0JveDo6SXNNb2RpZmllZCgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9wRWRpdC0+SXNNb2RpZmllZCgpOw0KLX0NCi0NCi12b2lkIENQV0xfQ29tYm9Cb3g6OlNldEZpbGxlck5vdGlmeShJUFdMX0ZpbGxlcl9Ob3RpZnkqIHBOb3RpZnkpDQotew0KLQkgbV9wRmlsbGVyTm90aWZ5ID0gcE5vdGlmeTsNCi0NCi0JIGlmIChtX3BFZGl0KQ0KLQkJIG1fcEVkaXQtPlNldEZpbGxlck5vdGlmeShwTm90aWZ5KTsNCi0NCi0JIGlmIChtX3BMaXN0KQ0KLQkJIG1fcExpc3QtPlNldEZpbGxlck5vdGlmeShwTm90aWZ5KTsNCi19DQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BERldpbmRvdy5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9XbmQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfRWRpdEN0cmwuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfRWRpdC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9MaXN0Qm94LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0NvbWJvQm94LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1V0aWxzLmgiCisKKyNkZWZpbmUgUFdMQ0JfREVGQVVMVEZPTlRTSVpFICAxMi4wZgorCisjZGVmaW5lIElzRmxvYXRaZXJvKGYpCQkJCQkJKChmKSA8IDAuMDAwMSAmJiAoZikgPiAtMC4wMDAxKQorI2RlZmluZSBJc0Zsb2F0QmlnZ2VyKGZhLGZiKQkJCQkoKGZhKSA+IChmYikgJiYgIUlzRmxvYXRaZXJvKChmYSkgLSAoZmIpKSkKKyNkZWZpbmUgSXNGbG9hdFNtYWxsZXIoZmEsZmIpCQkJCSgoZmEpIDwgKGZiKSAmJiAhSXNGbG9hdFplcm8oKGZhKSAtIChmYikpKQorI2RlZmluZSBJc0Zsb2F0RXF1YWwoZmEsZmIpCQkJCQlJc0Zsb2F0WmVybygoZmEpLShmYikpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX0NCTGlzdEJveCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0ZYX0JPT0wJQ1BXTF9DQkxpc3RCb3g6Ok9uTEJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpCit7CisJQ1BXTF9XbmQ6Ok9uTEJ1dHRvblVwKHBvaW50LG5GbGFnKTsKKworCWlmIChtX2JNb3VzZURvd24pCisJeworCQlSZWxlYXNlQ2FwdHVyZSgpOworCQltX2JNb3VzZURvd24gPSBGQUxTRTsJCisKKwkJaWYgKHRoaXMtPkNsaWVudEhpdFRlc3QocG9pbnQpKQorCQl7CisJCQlpZiAoQ1BXTF9XbmQgKiBwUGFyZW50ID0gR2V0UGFyZW50V2luZG93KCkpCisJCQl7CisJCQkJcFBhcmVudC0+T25Ob3RpZnkodGhpcyxQTk1fTEJVVFRPTlVQLDAsUFdMX01BS0VEV09SRChwb2ludC54LHBvaW50LnkpKTsJCQkKKwkJCX0KKwkJCisJCQlGWF9CT09MIGJFeGl0ID0gRkFMU0U7CisJCQlPbk5vdGlmeVNlbENoYW5nZWQoRkFMU0UsYkV4aXQsIG5GbGFnKTsKKwkJCWlmIChiRXhpdCkgcmV0dXJuIEZBTFNFOworCQl9CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgQ1BXTF9DQkxpc3RCb3g6Ok9uS2V5RG93bihGWF9XT1JEIG5DaGFyLCBGWF9CT09MICYgYkV4aXQsIEZYX0RXT1JEIG5GbGFnKQoreworCWlmICghbV9wTGlzdCkgcmV0dXJuIEZBTFNFOworCisJc3dpdGNoIChuQ2hhcikKKwl7CisJZGVmYXVsdDoKKwkJcmV0dXJuIEZBTFNFOworCWNhc2UgRldMX1ZLRVlfVXA6CisJY2FzZSBGV0xfVktFWV9Eb3duOgorCWNhc2UgRldMX1ZLRVlfSG9tZToKKwljYXNlIEZXTF9WS0VZX0xlZnQ6CisJY2FzZSBGV0xfVktFWV9FbmQ6CisJY2FzZSBGV0xfVktFWV9SaWdodDoKKwkJYnJlYWs7CQorCX0KKworCXN3aXRjaCAobkNoYXIpCisJeworCWNhc2UgRldMX1ZLRVlfVXA6CisJCW1fcExpc3QtPk9uVktfVVAoSXNTSElGVHByZXNzZWQobkZsYWcpLElzQ1RSTHByZXNzZWQobkZsYWcpKTsKKwkJYnJlYWs7CisJY2FzZSBGV0xfVktFWV9Eb3duOgorCQltX3BMaXN0LT5PblZLX0RPV04oSXNTSElGVHByZXNzZWQobkZsYWcpLElzQ1RSTHByZXNzZWQobkZsYWcpKTsKKwkJYnJlYWs7CisJY2FzZSBGV0xfVktFWV9Ib21lOgorCQltX3BMaXN0LT5PblZLX0hPTUUoSXNTSElGVHByZXNzZWQobkZsYWcpLElzQ1RSTHByZXNzZWQobkZsYWcpKTsKKwkJYnJlYWs7CisJY2FzZSBGV0xfVktFWV9MZWZ0OgorCQltX3BMaXN0LT5PblZLX0xFRlQoSXNTSElGVHByZXNzZWQobkZsYWcpLElzQ1RSTHByZXNzZWQobkZsYWcpKTsKKwkJYnJlYWs7CisJY2FzZSBGV0xfVktFWV9FbmQ6CisJCW1fcExpc3QtPk9uVktfRU5EKElzU0hJRlRwcmVzc2VkKG5GbGFnKSxJc0NUUkxwcmVzc2VkKG5GbGFnKSk7CisJCWJyZWFrOworCWNhc2UgRldMX1ZLRVlfUmlnaHQ6CisJCW1fcExpc3QtPk9uVktfUklHSFQoSXNTSElGVHByZXNzZWQobkZsYWcpLElzQ1RSTHByZXNzZWQobkZsYWcpKTsKKwkJYnJlYWs7CisJY2FzZSBGV0xfVktFWV9EZWxldGU6CisJCWJyZWFrOworCX0KKworCU9uTm90aWZ5U2VsQ2hhbmdlZChUUlVFLGJFeGl0LCBuRmxhZyk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTAlDUFdMX0NCTGlzdEJveDo6T25DaGFyKEZYX1dPUkQgbkNoYXIsIEZYX0JPT0wgJiBiRXhpdCwgRlhfRFdPUkQgbkZsYWcpCit7CisJaWYgKCFtX3BMaXN0KSByZXR1cm4gRkFMU0U7CisKKwlpZiAoIW1fcExpc3QtPk9uQ2hhcihuQ2hhcixJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpKSByZXR1cm4gRkFMU0U7CisKKwlpZiAoQ1BXTF9Db21ib0JveCogcENvbWJvQm94ID0gKENQV0xfQ29tYm9Cb3gqKUdldFBhcmVudFdpbmRvdygpKQorCXsKKwkJcENvbWJvQm94LT5TZXRTZWxlY3RUZXh0KCk7CisJfQorCisJT25Ob3RpZnlTZWxDaGFuZ2VkKFRSVUUsYkV4aXQsbkZsYWcpOworCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9DQkJ1dHRvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3ZvaWQgQ1BXTF9DQkJ1dHRvbjo6R2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oQ0ZYX0J5dGVUZXh0QnVmICYgc0FwcFN0cmVhbSkKK3sKKwlDUFdMX1duZDo6R2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oc0FwcFN0cmVhbSk7CisJCisJQ1BERl9SZWN0IHJlY3RXbmQgPSBDUFdMX1duZDo6R2V0V2luZG93UmVjdCgpOworCQorCWlmIChJc1Zpc2libGUoKSAmJiAhcmVjdFduZC5Jc0VtcHR5KCkpCisJeworCQlDRlhfQnl0ZVRleHRCdWYgc0J1dHRvbjsJCisKKwkJQ1BERl9Qb2ludCBwdENlbnRlciA9IHRoaXMtPkdldENlbnRlclBvaW50KCk7CisKKwkJQ1BERl9Qb2ludCBwdDEocHRDZW50ZXIueCAtIFBXTF9DQkJVVFRPTl9UUklBTkdMRV9IQUxGTEVOLHB0Q2VudGVyLnkgKyBQV0xfQ0JCVVRUT05fVFJJQU5HTEVfSEFMRkxFTiAqIDAuNWYpOworCQlDUERGX1BvaW50IHB0MihwdENlbnRlci54ICsgUFdMX0NCQlVUVE9OX1RSSUFOR0xFX0hBTEZMRU4scHRDZW50ZXIueSArIFBXTF9DQkJVVFRPTl9UUklBTkdMRV9IQUxGTEVOICogMC41Zik7CisJCUNQREZfUG9pbnQgcHQzKHB0Q2VudGVyLngscHRDZW50ZXIueSAtIFBXTF9DQkJVVFRPTl9UUklBTkdMRV9IQUxGTEVOICogMC41Zik7CisKKwkJaWYgKElzRmxvYXRCaWdnZXIocmVjdFduZC5yaWdodCAtIHJlY3RXbmQubGVmdCxQV0xfQ0JCVVRUT05fVFJJQU5HTEVfSEFMRkxFTiAqIDIpCisJCQkmJgorCQkJSXNGbG9hdEJpZ2dlcihyZWN0V25kLnRvcCAtIHJlY3RXbmQuYm90dG9tLFBXTF9DQkJVVFRPTl9UUklBTkdMRV9IQUxGTEVOKQorCQkJKQorCQl7CisJCQlzQnV0dG9uIDw8ICIwIGdcbiI7CisJCQlzQnV0dG9uIDw8IHB0MS54IDw8ICIgIiA8PCBwdDEueSA8PCAiIG1cbiI7CisJCQlzQnV0dG9uIDw8IHB0Mi54IDw8ICIgIiA8PCBwdDIueSA8PCAiIGxcbiI7CisJCQlzQnV0dG9uIDw8IHB0My54IDw8ICIgIiA8PCBwdDMueSA8PCAiIGxcbiI7CisJCQlzQnV0dG9uIDw8IHB0MS54IDw8ICIgIiA8PCBwdDEueSA8PCAiIGwgZlxuIjsKKworCQkJc0FwcFN0cmVhbSA8PCAicVxuIiA8PCBzQnV0dG9uIDw8ICJRXG4iOworCQl9CQorCX0KK30KKwordm9pZCBDUFdMX0NCQnV0dG9uOjpEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSkKK3sKKwlDUFdMX1duZDo6RHJhd1RoaXNBcHBlYXJhbmNlKHBEZXZpY2UscFVzZXIyRGV2aWNlKTsKKworCUNQREZfUmVjdCByZWN0V25kID0gQ1BXTF9XbmQ6OkdldFdpbmRvd1JlY3QoKTsKKwkKKwlpZiAoSXNWaXNpYmxlKCkgJiYgIXJlY3RXbmQuSXNFbXB0eSgpKQorCXsKKwkJQ1BERl9Qb2ludCBwdENlbnRlciA9IHRoaXMtPkdldENlbnRlclBvaW50KCk7CisKKwkJQ1BERl9Qb2ludCBwdDEocHRDZW50ZXIueCAtIFBXTF9DQkJVVFRPTl9UUklBTkdMRV9IQUxGTEVOLHB0Q2VudGVyLnkgKyBQV0xfQ0JCVVRUT05fVFJJQU5HTEVfSEFMRkxFTiAqIDAuNWYpOworCQlDUERGX1BvaW50IHB0MihwdENlbnRlci54ICsgUFdMX0NCQlVUVE9OX1RSSUFOR0xFX0hBTEZMRU4scHRDZW50ZXIueSArIFBXTF9DQkJVVFRPTl9UUklBTkdMRV9IQUxGTEVOICogMC41Zik7CisJCUNQREZfUG9pbnQgcHQzKHB0Q2VudGVyLngscHRDZW50ZXIueSAtIFBXTF9DQkJVVFRPTl9UUklBTkdMRV9IQUxGTEVOICogMC41Zik7CisKKwkJaWYgKElzRmxvYXRCaWdnZXIocmVjdFduZC5yaWdodCAtIHJlY3RXbmQubGVmdCxQV0xfQ0JCVVRUT05fVFJJQU5HTEVfSEFMRkxFTiAqIDIpCisJCQkmJgorCQkJSXNGbG9hdEJpZ2dlcihyZWN0V25kLnRvcCAtIHJlY3RXbmQuYm90dG9tLFBXTF9DQkJVVFRPTl9UUklBTkdMRV9IQUxGTEVOKQorCQkJKQorCQl7CisJCQlDRlhfUGF0aERhdGEgcGF0aDsKKworCQkJcGF0aC5TZXRQb2ludENvdW50KDQpOworCQkJcGF0aC5TZXRQb2ludCgwLCBwdDEueCwgcHQxLnksIEZYUFRfTU9WRVRPKTsKKwkJCXBhdGguU2V0UG9pbnQoMSwgcHQyLngsIHB0Mi55LCBGWFBUX0xJTkVUTyk7CisJCQlwYXRoLlNldFBvaW50KDIsIHB0My54LCBwdDMueSwgRlhQVF9MSU5FVE8pOworCQkJcGF0aC5TZXRQb2ludCgzLCBwdDEueCwgcHQxLnksIEZYUFRfTElORVRPKTsKKworCQkJcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgTlVMTCwgCisJCQkJQ1BXTF9VdGlsczo6UFdMQ29sb3JUb0ZYQ29sb3IoUFdMX0RFRkFVTFRfQkxBQ0tDT0xPUixHZXRUcmFuc3BhcmVuY3koKSksIAorCQkJCTAsIEZYRklMTF9BTFRFUk5BVEUpOworCQl9CisJfQorfQorCitGWF9CT09MCUNQV0xfQ0JCdXR0b246Ok9uTEJ1dHRvbkRvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZykKK3sKKwlDUFdMX1duZDo6T25MQnV0dG9uRG93bihwb2ludCxuRmxhZyk7CisKKwlTZXRDYXB0dXJlKCk7CisKKwlpZiAoQ1BXTF9XbmQgKiBwUGFyZW50ID0gR2V0UGFyZW50V2luZG93KCkpCisJewkJCisJCXBQYXJlbnQtPk9uTm90aWZ5KHRoaXMsUE5NX0xCVVRUT05ET1dOLDAsUFdMX01BS0VEV09SRChwb2ludC54LHBvaW50LnkpKTsKKwl9CisJCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wJQ1BXTF9DQkJ1dHRvbjo6T25MQnV0dG9uVXAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZykKK3sKKwlDUFdMX1duZDo6T25MQnV0dG9uVXAocG9pbnQsIG5GbGFnKTsKKworCVJlbGVhc2VDYXB0dXJlKCk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX0NvbWJvQm94IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ1BXTF9Db21ib0JveDo6Q1BXTF9Db21ib0JveCgpIDogbV9wRWRpdChOVUxMKSwKKwltX3BCdXR0b24oTlVMTCksCisJbV9wTGlzdChOVUxMKSwKKwltX2JQb3B1cChGQUxTRSksCisJbV9uUG9wdXBXaGVyZSgwKSwKKwltX25TZWxlY3RJdGVtKC0xKSwKKwltX3BGaWxsZXJOb3RpZnkoTlVMTCkKK3sKK30KKworQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9Db21ib0JveDo6R2V0Q2xhc3NOYW1lKCkgY29uc3QKK3sKKwlyZXR1cm4gIkNQV0xfQ29tYm9Cb3giOworfQorCit2b2lkIENQV0xfQ29tYm9Cb3g6Ok9uQ3JlYXRlKFBXTF9DUkVBVEVQQVJBTSAmIGNwKQoreworCWNwLmR3RmxhZ3MgJj0gflBXU19IU0NST0xMOworCWNwLmR3RmxhZ3MgJj0gflBXU19WU0NST0xMOworfQorCit2b2lkIENQV0xfQ29tYm9Cb3g6OlNldEZvY3VzKCkKK3sKKwlpZiAobV9wRWRpdCkKKwkJbV9wRWRpdC0+U2V0Rm9jdXMoKTsKK30KKwordm9pZCBDUFdMX0NvbWJvQm94OjpLaWxsRm9jdXMoKQoreworCVNldFBvcHVwKEZBTFNFKTsKKwlDUFdMX1duZDo6S2lsbEZvY3VzKCk7Cit9CisKK0NGWF9XaWRlU3RyaW5nIENQV0xfQ29tYm9Cb3g6OkdldFRleHQoKSBjb25zdAoreworCWlmIChtX3BFZGl0KQorCXsKKwkJcmV0dXJuIG1fcEVkaXQtPkdldFRleHQoKTsKKwl9CisJcmV0dXJuIENGWF9XaWRlU3RyaW5nKCk7Cit9CisKK3ZvaWQgQ1BXTF9Db21ib0JveDo6U2V0VGV4dChGWF9MUENXU1RSIHRleHQpCit7CisJaWYgKG1fcEVkaXQpCisJCW1fcEVkaXQtPlNldFRleHQodGV4dCk7Cit9CisKK3ZvaWQgQ1BXTF9Db21ib0JveDo6QWRkU3RyaW5nKEZYX0xQQ1dTVFIgc3RyaW5nKQoreworCWlmIChtX3BMaXN0KQorCQltX3BMaXN0LT5BZGRTdHJpbmcoc3RyaW5nKTsKK30KKworRlhfSU5UMzIgQ1BXTF9Db21ib0JveDo6R2V0U2VsZWN0KCkgY29uc3QKK3sKKwlyZXR1cm4gbV9uU2VsZWN0SXRlbTsKK30KKwordm9pZCBDUFdMX0NvbWJvQm94OjpTZXRTZWxlY3QoRlhfSU5UMzIgbkl0ZW1JbmRleCkKK3sKKwlpZiAobV9wTGlzdCkKKwkJbV9wTGlzdC0+U2VsZWN0KG5JdGVtSW5kZXgpOworCisJbV9wRWRpdC0+U2V0VGV4dChtX3BMaXN0LT5HZXRUZXh0KCkpOworCisJbV9uU2VsZWN0SXRlbSA9IG5JdGVtSW5kZXg7Cit9CisKK3ZvaWQgQ1BXTF9Db21ib0JveDo6U2V0RWRpdFNlbChGWF9JTlQzMiBuU3RhcnRDaGFyLEZYX0lOVDMyIG5FbmRDaGFyKQoreworCWlmIChtX3BFZGl0KQorCXsKKwkJbV9wRWRpdC0+U2V0U2VsKG5TdGFydENoYXIsbkVuZENoYXIpOworCX0KK30KKwordm9pZCBDUFdMX0NvbWJvQm94OjpHZXRFZGl0U2VsKEZYX0lOVDMyICYgblN0YXJ0Q2hhciwgRlhfSU5UMzIgJiBuRW5kQ2hhcikgY29uc3QKK3sKKwluU3RhcnRDaGFyID0gLTE7CisJbkVuZENoYXIgPSAtMTsKKworCWlmIChtX3BFZGl0KQorCXsKKwkJbV9wRWRpdC0+R2V0U2VsKG5TdGFydENoYXIsbkVuZENoYXIpOworCX0KK30KKwordm9pZCBDUFdMX0NvbWJvQm94OjpDbGVhcigpCit7CisJaWYgKG1fcEVkaXQpCisJeworCQltX3BFZGl0LT5DbGVhcigpOworCX0KK30KKwordm9pZCBDUFdMX0NvbWJvQm94OjpDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCkKK3sKKwlDcmVhdGVFZGl0KGNwKTsKKwlDcmVhdGVCdXR0b24oY3ApOworCUNyZWF0ZUxpc3RCb3goY3ApOworfQorCit2b2lkIENQV0xfQ29tYm9Cb3g6OkNyZWF0ZUVkaXQoY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApCit7CisJaWYgKCFtX3BFZGl0KQorCXsKKwkJbV9wRWRpdCA9IG5ldyBDUFdMX0NCRWRpdDsKKwkJbV9wRWRpdC0+QXR0YWNoRkZMRGF0YShtX3BGb3JtRmlsbGVyKTsKKworCQlQV0xfQ1JFQVRFUEFSQU0gZWNwID0gY3A7CisJCWVjcC5wUGFyZW50V25kID0gdGhpczsKKwkJZWNwLmR3RmxhZ3MgPSAgUFdTX1ZJU0lCTEUgfCBQV1NfQ0hJTEQgfCBQV1NfQk9SREVSIHwgUEVTX0NFTlRFUiB8IFBFU19BVVRPU0NST0xMIHwgUEVTX1VORE87CisKKwkJaWYgKEhhc0ZsYWcoUFdTX0FVVE9GT05UU0laRSkpCisJCQllY3AuZHdGbGFncyB8PSBQV1NfQVVUT0ZPTlRTSVpFOworCisJCWlmICghSGFzRmxhZyhQQ0JTX0FMTE9XQ1VTVE9NVEVYVCkpCisJCQllY3AuZHdGbGFncyB8PSBQV1NfUkVBRE9OTFk7CisKKwkJZWNwLnJjUmVjdFduZCA9IENQREZfUmVjdCgwLDAsMCwwKTsKKwkJZWNwLmR3Qm9yZGVyV2lkdGggPSAwOworCQllY3AubkJvcmRlclN0eWxlID0gUEJTX1NPTElEOworCisJCW1fcEVkaXQtPkNyZWF0ZShlY3ApOworCX0KK30KKwordm9pZCBDUFdMX0NvbWJvQm94OjpDcmVhdGVCdXR0b24oY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApCit7CisJaWYgKCFtX3BCdXR0b24pCisJeworCQltX3BCdXR0b24gPSBuZXcgQ1BXTF9DQkJ1dHRvbjsJCisKKwkJUFdMX0NSRUFURVBBUkFNIGJjcCA9IGNwOworCQliY3AucFBhcmVudFduZCA9IHRoaXM7CisJCWJjcC5kd0ZsYWdzID0gUFdTX1ZJU0lCTEUgfCBQV1NfQ0hJTEQgfCBQV1NfQk9SREVSIHwgUFdTX0JBQ0tHUk9VTkQ7CQorCQliY3Auc0JhY2tncm91bmRDb2xvciA9IFBXTF9TQ1JPTExCQVJfQktDT0xPUjsKKwkJYmNwLnNCb3JkZXJDb2xvciA9IFBXTF9ERUZBVUxUX0JMQUNLQ09MT1I7CisJCWJjcC5kd0JvcmRlcldpZHRoID0gMjsKKwkJYmNwLm5Cb3JkZXJTdHlsZSA9IFBCU19CRVZFTEVEOworCQliY3AuZUN1cnNvclR5cGUgPSBGWENUX0FSUk9XOworCisJCW1fcEJ1dHRvbi0+Q3JlYXRlKGJjcCk7CisJfQorfQorCit2b2lkIENQV0xfQ29tYm9Cb3g6OkNyZWF0ZUxpc3RCb3goY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApCit7CisJaWYgKCFtX3BMaXN0KQorCXsKKwkJbV9wTGlzdCA9IG5ldyBDUFdMX0NCTGlzdEJveDsKKwkJbV9wTGlzdC0+QXR0YWNoRkZMRGF0YShtX3BGb3JtRmlsbGVyKTsKKwkJUFdMX0NSRUFURVBBUkFNIGxjcCA9IGNwOworCQlsY3AucFBhcmVudFduZCA9IHRoaXM7CisJCWxjcC5kd0ZsYWdzID0gUFdTX0NISUxEIHwgUFdTX0JPUkRFUiB8IFBXU19CQUNLR1JPVU5EIHwgUExCU19IT1ZFUlNFTCB8IFBXU19WU0NST0xMOworCQlsY3AubkJvcmRlclN0eWxlID0gUEJTX1NPTElEOworCQlsY3AuZHdCb3JkZXJXaWR0aCA9IDE7CisJCWxjcC5lQ3Vyc29yVHlwZSA9IEZYQ1RfQVJST1c7CisJCWxjcC5yY1JlY3RXbmQgPSBDUERGX1JlY3QoMCwwLDAsMCk7CisKKwkJaWYgKGNwLmR3RmxhZ3MgJiBQV1NfQVVUT0ZPTlRTSVpFKQorCQkJbGNwLmZGb250U2l6ZSA9IFBXTENCX0RFRkFVTFRGT05UU0laRTsKKwkJZWxzZQorCQkJbGNwLmZGb250U2l6ZSA9IGNwLmZGb250U2l6ZTsKKworCQlpZiAoY3Auc0JvcmRlckNvbG9yLm5Db2xvclR5cGUgPT0gQ09MT1JUWVBFX1RSQU5TUEFSRU5UKQorCQkJbGNwLnNCb3JkZXJDb2xvciA9IFBXTF9ERUZBVUxUX0JMQUNLQ09MT1I7CisKKwkJaWYgKGNwLnNCYWNrZ3JvdW5kQ29sb3IubkNvbG9yVHlwZSA9PSBDT0xPUlRZUEVfVFJBTlNQQVJFTlQpCisJCQlsY3Auc0JhY2tncm91bmRDb2xvciA9IFBXTF9ERUZBVUxUX1dISVRFQ09MT1I7CQkKKworCQltX3BMaXN0LT5DcmVhdGUobGNwKTsKKwl9Cit9CisKK3ZvaWQgQ1BXTF9Db21ib0JveDo6UmVQb3NDaGlsZFduZCgpCit7CisJQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOworCisJaWYgKG1fYlBvcHVwKQorCXsKKwkJQ1BERl9SZWN0IHJjbGllbnQgPSBHZXRDbGllbnRSZWN0KCk7CisJCUNQREZfUmVjdCByY0J1dHRvbiA9IHJjbGllbnQ7CisJCUNQREZfUmVjdCByY0VkaXQgPSByY0NsaWVudDsKKwkJQ1BERl9SZWN0IHJjTGlzdCA9IENQV0xfV25kOjpHZXRXaW5kb3dSZWN0KCk7CisKKwkJRlhfRkxPQVQgZk9sZFdpbmRvd0hlaWdodCA9IG1fcmNPbGRXaW5kb3cuSGVpZ2h0KCk7CisJCUZYX0ZMT0FUIGZPbGRDbGllbnRIZWlnaHQgPSBmT2xkV2luZG93SGVpZ2h0IC0gR2V0Qm9yZGVyV2lkdGgoKSAqIDI7CisJCQorCQlzd2l0Y2ggKG1fblBvcHVwV2hlcmUpCisJCXsKKwkJY2FzZSAwOgorCQkJcmNCdXR0b24ubGVmdCA9IHJjQnV0dG9uLnJpZ2h0IC0gUFdMX0NPTUJPQk9YX0JVVFRPTl9XSURUSDsKKworCQkJaWYgKHJjQnV0dG9uLmxlZnQgPCByY2xpZW50LmxlZnQpCisJCQkJcmNCdXR0b24ubGVmdCA9IHJjbGllbnQubGVmdDsKKwkJCQorCQkJcmNCdXR0b24uYm90dG9tID0gcmNCdXR0b24udG9wIC0gZk9sZENsaWVudEhlaWdodDsKKworCQkJcmNFZGl0LnJpZ2h0ID0gcmNCdXR0b24ubGVmdCAtIDEuMGY7CisKKwkJCWlmIChyY0VkaXQubGVmdCA8IHJjbGllbnQubGVmdCkKKwkJCQlyY0VkaXQubGVmdCA9IHJjbGllbnQubGVmdDsKKworCQkJaWYgKHJjRWRpdC5yaWdodCA8IHJjRWRpdC5sZWZ0KQorCQkJCXJjRWRpdC5yaWdodCA9IHJjRWRpdC5sZWZ0OworCisJCQlyY0VkaXQuYm90dG9tID0gcmNFZGl0LnRvcCAtIGZPbGRDbGllbnRIZWlnaHQ7CisKKwkJCXJjTGlzdC50b3AgLT0gZk9sZFdpbmRvd0hlaWdodDsKKworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXJjQnV0dG9uLmxlZnQgPSByY0J1dHRvbi5yaWdodCAtIFBXTF9DT01CT0JPWF9CVVRUT05fV0lEVEg7CisKKwkJCWlmIChyY0J1dHRvbi5sZWZ0IDwgcmNsaWVudC5sZWZ0KQorCQkJCXJjQnV0dG9uLmxlZnQgPSByY2xpZW50LmxlZnQ7CisJCQkKKwkJCXJjQnV0dG9uLnRvcCA9IHJjQnV0dG9uLmJvdHRvbSArIGZPbGRDbGllbnRIZWlnaHQ7CisKKwkJCXJjRWRpdC5yaWdodCA9IHJjQnV0dG9uLmxlZnQgLSAxLjBmOworCisJCQlpZiAocmNFZGl0LmxlZnQgPCByY2xpZW50LmxlZnQpCisJCQkJcmNFZGl0LmxlZnQgPSByY2xpZW50LmxlZnQ7CisKKwkJCWlmIChyY0VkaXQucmlnaHQgPCByY0VkaXQubGVmdCkKKwkJCQlyY0VkaXQucmlnaHQgPSByY0VkaXQubGVmdDsKKworCQkJcmNFZGl0LnRvcCA9IHJjRWRpdC5ib3R0b20gKyBmT2xkQ2xpZW50SGVpZ2h0OworCisJCQlyY0xpc3QuYm90dG9tICs9IGZPbGRXaW5kb3dIZWlnaHQ7CisKKwkJCWJyZWFrOworCQl9CQkKKworCQlpZiAobV9wQnV0dG9uKQorCQkJbV9wQnV0dG9uLT5Nb3ZlKHJjQnV0dG9uLFRSVUUsRkFMU0UpOworCisJCWlmIChtX3BFZGl0KQorCQkJbV9wRWRpdC0+TW92ZShyY0VkaXQsVFJVRSxGQUxTRSk7CisKKwkJaWYgKG1fcExpc3QpCisJCXsKKwkJCW1fcExpc3QtPlNldFZpc2libGUoVFJVRSk7CQkJCisJCQltX3BMaXN0LT5Nb3ZlKHJjTGlzdCxUUlVFLEZBTFNFKTsKKwkJCW1fcExpc3QtPlNjcm9sbFRvTGlzdEl0ZW0obV9uU2VsZWN0SXRlbSk7CisJCX0KKwl9CisJZWxzZQorCXsJCQorCQlDUERGX1JlY3QgcmNCdXR0b24gPSByY0NsaWVudDsKKworCQlyY0J1dHRvbi5sZWZ0ID0gcmNCdXR0b24ucmlnaHQgLSBQV0xfQ09NQk9CT1hfQlVUVE9OX1dJRFRIOwkKKwkJCisJCWlmIChyY0J1dHRvbi5sZWZ0IDwgcmNDbGllbnQubGVmdCkKKwkJCXJjQnV0dG9uLmxlZnQgPSByY0NsaWVudC5sZWZ0OworCisJCWlmIChtX3BCdXR0b24pCisJCQltX3BCdXR0b24tPk1vdmUocmNCdXR0b24sVFJVRSxGQUxTRSk7CisKKwkJQ1BERl9SZWN0IHJjRWRpdCA9IHJjQ2xpZW50OworCQlyY0VkaXQucmlnaHQgPSByY0J1dHRvbi5sZWZ0IC0gMS4wZjsKKworCQlpZiAocmNFZGl0LmxlZnQgPCByY0NsaWVudC5sZWZ0KQorCQkJcmNFZGl0LmxlZnQgPSByY0NsaWVudC5sZWZ0OworCisJCWlmIChyY0VkaXQucmlnaHQgPCByY0VkaXQubGVmdCkKKwkJCXJjRWRpdC5yaWdodCA9IHJjRWRpdC5sZWZ0OworCisJCWlmIChtX3BFZGl0KQorCQkJbV9wRWRpdC0+TW92ZShyY0VkaXQsVFJVRSxGQUxTRSk7CisKKwkJaWYgKG1fcExpc3QpCisJCQltX3BMaXN0LT5TZXRWaXNpYmxlKEZBTFNFKTsKKwl9Cit9CisKK3ZvaWQgQ1BXTF9Db21ib0JveDo6U2VsZWN0QWxsKCkKK3sKKwlpZiAobV9wRWRpdCAmJiBIYXNGbGFnKFBDQlNfQUxMT1dDVVNUT01URVhUKSkKKwkJbV9wRWRpdC0+U2VsZWN0QWxsKCk7Cit9CisKK0NQREZfUmVjdCBDUFdMX0NvbWJvQm94OjpHZXRGb2N1c1JlY3QoKSBjb25zdAoreworCXJldHVybiBDUERGX1JlY3QoKTsKK30KKwordm9pZCBDUFdMX0NvbWJvQm94OjpTZXRQb3B1cChGWF9CT09MIGJQb3B1cCkKK3sKKwlpZiAoIW1fcExpc3QpIHJldHVybjsKKwlpZiAoYlBvcHVwID09IG1fYlBvcHVwKSByZXR1cm47CisJRlhfRkxPQVQgZkxpc3RIZWlnaHQgPSBtX3BMaXN0LT5HZXRDb250ZW50UmVjdCgpLkhlaWdodCgpOworCWlmICghSXNGbG9hdEJpZ2dlcihmTGlzdEhlaWdodCwwLjBmKSkgcmV0dXJuOworCisJaWYgKGJQb3B1cCkKKwl7CisJCWlmIChtX3BGaWxsZXJOb3RpZnkpCisJCXsKKwkJCUZYX0lOVDMyIG5XaGVyZSA9IDA7CisJCQlGWF9GTE9BVCBmUG9wdXBSZXQgPSAwLjBmOworCQkJRlhfRkxPQVQgZlBvcHVwTWluID0gMC4wZjsKKwkJCWlmIChtX3BMaXN0LT5HZXRDb3VudCgpID4gMykKKwkJCQlmUG9wdXBNaW4gPSBtX3BMaXN0LT5HZXRGaXJzdEhlaWdodCgpICogMyArIG1fcExpc3QtPkdldEJvcmRlcldpZHRoKCkgKiAyOworCQkJRlhfRkxPQVQgZlBvcHVwTWF4ID0gZkxpc3RIZWlnaHQgKyBtX3BMaXN0LT5HZXRCb3JkZXJXaWR0aCgpICogMjsKKwkJCW1fcEZpbGxlck5vdGlmeS0+UXVlcnlXaGVyZVBvcHVwKEdldEF0dGFjaGVkRGF0YSgpLCBmUG9wdXBNaW4sZlBvcHVwTWF4LG5XaGVyZSxmUG9wdXBSZXQpOworCisJCQlpZiAoSXNGbG9hdEJpZ2dlcihmUG9wdXBSZXQsMC4wZikpCisJCQl7CisJCQkJbV9iUG9wdXAgPSBiUG9wdXA7CisKKwkJCQlDUERGX1JlY3QgcmNXaW5kb3cgPSBDUFdMX1duZDo6R2V0V2luZG93UmVjdCgpOworCQkJCW1fcmNPbGRXaW5kb3cgPSByY1dpbmRvdzsKKwkJCQlzd2l0Y2ggKG5XaGVyZSkKKwkJCQl7CisJCQkJZGVmYXVsdDoKKwkJCQljYXNlIDA6CisJCQkJCXJjV2luZG93LmJvdHRvbSAtPSBmUG9wdXBSZXQ7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMToKKwkJCQkJcmNXaW5kb3cudG9wICs9IGZQb3B1cFJldDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCQorCQkJCW1fblBvcHVwV2hlcmUgPSBuV2hlcmU7CisJCQkJTW92ZShyY1dpbmRvdywgVFJVRSwgVFJVRSk7CisJCQl9CisJCX0KKwl9CisJZWxzZQorCXsKKwkJbV9iUG9wdXAgPSBiUG9wdXA7CisJCU1vdmUobV9yY09sZFdpbmRvdywgVFJVRSwgVFJVRSk7CisJfQorfQorCitGWF9CT09MIENQV0xfQ29tYm9Cb3g6Ok9uS2V5RG93bihGWF9XT1JEIG5DaGFyLCBGWF9EV09SRCBuRmxhZykKK3sKKwlpZiAoIW1fcExpc3QpIHJldHVybiBGQUxTRTsKKwlpZiAoIW1fcEVkaXQpIHJldHVybiBGQUxTRTsKKworCW1fblNlbGVjdEl0ZW0gPSAtMTsKKworCXN3aXRjaCAobkNoYXIpCisJeworCWNhc2UgRldMX1ZLRVlfVXA6CisJCWlmIChtX3BMaXN0LT5HZXRDdXJTZWwoKSA+IDApCisJCXsKKwkJCUZYX0JPT0wgYkV4aXQgPSBGQUxTRTsKKwkJCWlmIChtX3BMaXN0LT5PbktleURvd24obkNoYXIsYkV4aXQsbkZsYWcpKQorCQkJeworCQkJCWlmIChiRXhpdCkgcmV0dXJuIEZBTFNFOworCQkJCVNldFNlbGVjdFRleHQoKTsJCQkJCisJCQl9CisJCX0KKwkJcmV0dXJuIFRSVUU7CisJY2FzZSBGV0xfVktFWV9Eb3duOgorCQlpZiAobV9wTGlzdC0+R2V0Q3VyU2VsKCkgPCBtX3BMaXN0LT5HZXRDb3VudCgpIC0gMSkKKwkJeworCQkJRlhfQk9PTCBiRXhpdCA9IEZBTFNFOworCQkJaWYgKG1fcExpc3QtPk9uS2V5RG93bihuQ2hhcixiRXhpdCxuRmxhZykpCisJCQl7CisJCQkJaWYgKGJFeGl0KSByZXR1cm4gRkFMU0U7CisJCQkJU2V0U2VsZWN0VGV4dCgpOwkJCQkKKwkJCX0KKwkJfQorCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlpZiAoSGFzRmxhZyhQQ0JTX0FMTE9XQ1VTVE9NVEVYVCkpCisJCXJldHVybiBtX3BFZGl0LT5PbktleURvd24obkNoYXIsbkZsYWcpOworCWVsc2UKKwkJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MIENQV0xfQ29tYm9Cb3g6Ok9uQ2hhcihGWF9XT1JEIG5DaGFyLCBGWF9EV09SRCBuRmxhZykKK3sKKwlpZiAoIW1fcExpc3QpIHJldHVybiBGQUxTRTsKKwlpZiAoIW1fcEVkaXQpIHJldHVybiBGQUxTRTsKKworCW1fblNlbGVjdEl0ZW0gPSAtMTsKKwlGWF9CT09MIGJFeGl0ID0gRkFMU0U7CisKKwlpZiAoSGFzRmxhZyhQQ0JTX0FMTE9XQ1VTVE9NVEVYVCkpCisJeworCQlyZXR1cm4gbV9wRWRpdC0+T25DaGFyKG5DaGFyLG5GbGFnKTsJCQkKKwl9CisJZWxzZQorCXsKKwkJaWYgKG1fcExpc3QtPk9uQ2hhcihuQ2hhcixiRXhpdCxuRmxhZykpCisJCXsKKwkJCXJldHVybiBiRXhpdDsKKwkJfQorCQllbHNlCisJCQlyZXR1cm4gRkFMU0U7CisJfQorfQorCit2b2lkIENQV0xfQ29tYm9Cb3g6Ok9uTm90aWZ5KENQV0xfV25kKiBwV25kLCBGWF9EV09SRCBtc2csIEZYX0lOVFBUUiB3UGFyYW0sIEZYX0lOVFBUUiBsUGFyYW0pCit7CisJc3dpdGNoIChtc2cpCisJeworCWNhc2UgUE5NX0xCVVRUT05ET1dOOgorCQlpZiAocFduZCA9PSBtX3BCdXR0b24pCisJCXsKKwkJCVNldFBvcHVwKCFtX2JQb3B1cCk7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQTk1fTEJVVFRPTlVQOgorCQlpZiAobV9wRWRpdCAmJiBtX3BMaXN0KQorCQl7CisJCQlpZiAocFduZCA9PSBtX3BMaXN0KQorCQkJewkJCQorCQkJCVNldFNlbGVjdFRleHQoKTsKKwkJCQlTZWxlY3RBbGwoKTsKKwkJCQltX3BFZGl0LT5TZXRGb2N1cygpOworCQkJCVNldFBvcHVwKEZBTFNFKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwl9CisKKwlDUFdMX1duZDo6T25Ob3RpZnkocFduZCxtc2csd1BhcmFtLGxQYXJhbSk7Cit9CisKK0ZYX0JPT0wgQ1BXTF9Db21ib0JveDo6SXNQb3B1cCgpIGNvbnN0Cit7CisJcmV0dXJuIG1fYlBvcHVwOworfQorCit2b2lkIENQV0xfQ29tYm9Cb3g6OlNldFNlbGVjdFRleHQoKQoreworCUNGWF9XaWRlU3RyaW5nIHN3VGV4dCA9IG1fcExpc3QtPkdldFRleHQoKTsKKwltX3BFZGl0LT5TZWxlY3RBbGwoKTsKKwltX3BFZGl0LT5SZXBsYWNlU2VsKG1fcExpc3QtPkdldFRleHQoKSk7CisJbV9wRWRpdC0+U2VsZWN0QWxsKCk7CisKKwltX25TZWxlY3RJdGVtID0gbV9wTGlzdC0+R2V0Q3VyU2VsKCk7Cit9CisKK0ZYX0JPT0wgQ1BXTF9Db21ib0JveDo6SXNNb2RpZmllZCgpIGNvbnN0Cit7CisJcmV0dXJuIG1fcEVkaXQtPklzTW9kaWZpZWQoKTsKK30KKwordm9pZCBDUFdMX0NvbWJvQm94OjpTZXRGaWxsZXJOb3RpZnkoSVBXTF9GaWxsZXJfTm90aWZ5KiBwTm90aWZ5KQoreworCSBtX3BGaWxsZXJOb3RpZnkgPSBwTm90aWZ5OworCisJIGlmIChtX3BFZGl0KQorCQkgbV9wRWRpdC0+U2V0RmlsbGVyTm90aWZ5KHBOb3RpZnkpOworCisJIGlmIChtX3BMaXN0KQorCQkgbV9wTGlzdC0+U2V0RmlsbGVyTm90aWZ5KHBOb3RpZnkpOworfQorCmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX0VkaXQuY3BwIGIvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9FZGl0LmNwcAppbmRleCA4N2RkZDg3Li5kZjU5YzJjIDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX0VkaXQuY3BwCisrKyBiL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfRWRpdC5jcHAKQEAgLTEsMTMxNiArMSwxMzE2IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUERGV2luZG93LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9XbmQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0VkaXRDdHJsLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9FZGl0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9TY3JvbGxCYXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1V0aWxzLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9DYXJldC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfRm9udE1hcC5oIg0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9FZGl0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUNQV0xfRWRpdDo6Q1BXTF9FZGl0KCkgOiBtX3BGaWxsZXJOb3RpZnkoTlVMTCksIA0KLQltX3BTcGVsbENoZWNrKE5VTEwpLA0KLQltX2JGb2N1cyhGQUxTRSkNCi17DQotCW1fcEZvcm1GaWxsZXIgPSBOVUxMOw0KLX0NCi0NCi1DUFdMX0VkaXQ6On5DUFdMX0VkaXQoKQ0KLXsNCi0JQVNTRVJUKG1fYkZvY3VzID09IEZBTFNFKTsNCi19DQotDQotQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9FZGl0OjpHZXRDbGFzc05hbWUoKSBjb25zdA0KLXsNCi0JcmV0dXJuIFBXTF9DTEFTU05BTUVfRURJVDsNCi19DQotDQotdm9pZCBDUFdMX0VkaXQ6Ok9uRGVzdHJveSgpDQotew0KLX0NCi0NCi12b2lkIENQV0xfRWRpdDo6U2V0VGV4dChGWF9MUENXU1RSIGNzVGV4dCkNCi17DQotCUNGWF9XaWRlU3RyaW5nIHN3VGV4dCA9IGNzVGV4dDsNCi0NCi0JaWYgKEhhc0ZsYWcoUEVTX1JJQ0gpKQ0KLQl7CQkNCi0JCUNGWF9CeXRlU3RyaW5nIHNWYWx1ZSA9IENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShzd1RleHQpOw0KLQkJDQotCQlpZiAoQ1hNTF9FbGVtZW50ICogcFhNTCA9IENYTUxfRWxlbWVudDo6UGFyc2UoKEZYX0xQQ1NUUilzVmFsdWUsc1ZhbHVlLkdldExlbmd0aCgpKSkNCi0JCXsNCi0JCQlGWF9JTlQzMiBuQ291bnQgPSBwWE1MLT5Db3VudENoaWxkcmVuKCk7DQotCQkJRlhfQk9PTCBiRmlyc3QgPSBUUlVFOw0KLQ0KLQkJCXN3VGV4dC5FbXB0eSgpOw0KLQ0KLQkJCWZvciAoRlhfSU5UMzIgaT0wOyBpPG5Db3VudDsgaSsrKQ0KLQkJCXsNCi0JCQkJaWYgKENYTUxfRWxlbWVudCAqIHBTdWJFbGVtZW50ID0gcFhNTC0+R2V0RWxlbWVudChpKSkNCi0JCQkJew0KLQkJCQkJQ0ZYX0J5dGVTdHJpbmcgdGFnPXBTdWJFbGVtZW50LT5HZXRUYWdOYW1lKCk7DQotCQkgICAJCQlpZiAodGFnLkVxdWFsTm9DYXNlKCJwIikpDQotCQkJCQl7DQotCQkJCQkJaW50IG5DaGlsZCA9IHBTdWJFbGVtZW50LT5Db3VudENoaWxkcmVuKCk7DQotCQkJCQkJQ0ZYX1dpZGVTdHJpbmcgc3dTZWN0aW9uOw0KLQkJCQkJCWZvcihGWF9JTlQzMiBqPTA7IGo8bkNoaWxkOyBqKyspDQotCQkJCQkJew0KLQkJCQkJCQlzd1NlY3Rpb24gKz0gcFN1YkVsZW1lbnQtPkdldENvbnRlbnQoaik7DQotCQkJCQkJfQ0KLQkJCQkJCQ0KLQkJCQkJCWlmIChiRmlyc3QpYkZpcnN0ID0gRkFMU0U7DQotCQkJCQkJZWxzZQ0KLQkJCQkJCQlzd1RleHQgKz0gRldMX1ZLRVlfUmV0dXJuOw0KLQkJCQkJCXN3VGV4dCArPSBzd1NlY3Rpb247DQotCQkJCQl9DQotCQkJCX0NCi0JCQl9DQotDQotCQkJZGVsZXRlIHBYTUw7DQotCQl9DQotCX0JDQotDQotCW1fcEVkaXQtPlNldFRleHQoc3dUZXh0KTsNCi19DQotDQotdm9pZCBDUFdMX0VkaXQ6OlJlUG9zQ2hpbGRXbmQoKQ0KLXsNCi0JaWYgKENQV0xfU2Nyb2xsQmFyICogcFZTQiA9IHRoaXMtPkdldFZTY3JvbGxCYXIoKSkNCi0Jew0KLQkJLy9pZiAocFZTQi0+SXNWaXNpYmxlKCkpDQotCQl7DQotCQkJQ1BERl9SZWN0IHJjV2luZG93ID0gbV9yY09sZFdpbmRvdzsJCQ0KLQkJCUNQREZfUmVjdCByY1ZTY3JvbGwgPSBDUERGX1JlY3QocmNXaW5kb3cucmlnaHQsDQotCQkJCQkJCQlyY1dpbmRvdy5ib3R0b20sDQotCQkJCQkJCQlyY1dpbmRvdy5yaWdodCArIFBXTF9TQ1JPTExCQVJfV0lEVEgsDQotCQkJCQkJCQlyY1dpbmRvdy50b3ApOw0KLQkJCXBWU0ItPk1vdmUocmNWU2Nyb2xsLCBUUlVFLCBGQUxTRSk7DQotCQl9DQotCX0NCi0NCi0JaWYgKG1fcEVkaXRDYXJldCAmJiAhSGFzRmxhZyhQRVNfVEVYVE9WRVJGTE9XKSkNCi0JCW1fcEVkaXRDYXJldC0+U2V0Q2xpcFJlY3QoQ1BXTF9VdGlsczo6SW5mbGF0ZVJlY3QoR2V0Q2xpZW50UmVjdCgpLDEuMGYpKTsgLy8rMSBmb3IgY2FyZXQgYmVzaWRlIGJvcmRlcg0KLQ0KLQlDUFdMX0VkaXRDdHJsOjpSZVBvc0NoaWxkV25kKCk7DQotfQ0KLQ0KLUNQREZfUmVjdCBDUFdMX0VkaXQ6OkdldENsaWVudFJlY3QoKSBjb25zdA0KLXsNCi0JQ1BERl9SZWN0IHJjQ2xpZW50ID0gQ1BXTF9VdGlsczo6RGVmbGF0ZVJlY3QoR2V0V2luZG93UmVjdCgpLChGWF9GTE9BVCkoR2V0Qm9yZGVyV2lkdGgoKStHZXRJbm5lckJvcmRlcldpZHRoKCkpKTsNCi0JDQotCWlmIChDUFdMX1Njcm9sbEJhciAqIHBWU0IgPSB0aGlzLT5HZXRWU2Nyb2xsQmFyKCkpDQotCXsNCi0JCWlmIChwVlNCLT5Jc1Zpc2libGUoKSkNCi0JCXsNCi0JCQlyY0NsaWVudC5yaWdodCAtPSBQV0xfU0NST0xMQkFSX1dJRFRIOw0KLQkJfQ0KLQl9DQotDQotCXJldHVybiByY0NsaWVudDsNCi19DQotDQotdm9pZCBDUFdMX0VkaXQ6OlNldEFsaWduRm9ybWF0SChQV0xfRURJVF9BTElHTkZPUk1BVF9IIG5Gb3JtYXQsIEZYX0JPT0wgYlBhaW50LyogPSBUUlVFKi8pDQotew0KLQltX3BFZGl0LT5TZXRBbGlnbm1lbnRIKChGWF9JTlQzMiluRm9ybWF0LCBiUGFpbnQpOw0KLX0NCi0NCi12b2lkIENQV0xfRWRpdDo6U2V0QWxpZ25Gb3JtYXRWKFBXTF9FRElUX0FMSUdORk9STUFUX1YgbkZvcm1hdCwgRlhfQk9PTCBiUGFpbnQvKiA9IFRSVUUqLykNCi17DQotCW1fcEVkaXQtPlNldEFsaWdubWVudFYoKEZYX0lOVDMyKW5Gb3JtYXQsIGJQYWludCk7DQotfQ0KLQ0KLUZYX0JPT0wJQ1BXTF9FZGl0OjpDYW5TZWxlY3RBbGwoKSBjb25zdA0KLXsNCi0JcmV0dXJuICBHZXRTZWxlY3RXb3JkUmFuZ2UoKSAhPSBtX3BFZGl0LT5HZXRXaG9sZVdvcmRSYW5nZSgpOw0KLX0NCi0NCi1GWF9CT09MCUNQV0xfRWRpdDo6Q2FuQ2xlYXIoKSBjb25zdA0KLXsNCi0JcmV0dXJuICFJc1JlYWRPbmx5KCkgJiYgbV9wRWRpdC0+SXNTZWxlY3RlZCgpOw0KLX0NCi0NCi1GWF9CT09MCUNQV0xfRWRpdDo6Q2FuQ29weSgpIGNvbnN0DQotew0KLQlyZXR1cm4gCSFIYXNGbGFnKFBFU19QQVNTV09SRCkgJiYgIUhhc0ZsYWcoUEVTX05PUkVBRCkgJiYgbV9wRWRpdC0+SXNTZWxlY3RlZCgpOw0KLX0NCi0NCi1GWF9CT09MCUNQV0xfRWRpdDo6Q2FuQ3V0KCkgY29uc3QNCi17DQotCXJldHVybiAJQ2FuQ29weSgpICYmICFJc1JlYWRPbmx5KCk7DQotfQ0KLQ0KLUZYX0JPT0wJQ1BXTF9FZGl0OjpDYW5QYXN0ZSgpIGNvbnN0DQotew0KLQlpZiAoSXNSZWFkT25seSgpKSByZXR1cm4gRkFMU0U7DQotDQotCUNGWF9XaWRlU3RyaW5nIHN3Q2xpcGJvYXJkOw0KLQlpZiAoSUZYX1N5c3RlbUhhbmRsZXIqIHBTSCA9IEdldFN5c3RlbUhhbmRsZXIoKSkNCi0JCXN3Q2xpcGJvYXJkID0gcFNILT5HZXRDbGlwYm9hcmRUZXh0KEdldEF0dGFjaGVkSFduZCgpKTsNCi0NCi0JcmV0dXJuICFzd0NsaXBib2FyZC5Jc0VtcHR5KCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9FZGl0OjpDb3B5VGV4dCgpDQotew0KLQlpZiAoIUNhbkNvcHkoKSkgcmV0dXJuOw0KLQ0KLQlDRlhfV2lkZVN0cmluZyBzdHIgPSBtX3BFZGl0LT5HZXRTZWxUZXh0KCk7DQotDQotCWlmIChJRlhfU3lzdGVtSGFuZGxlciogcFNIID0gR2V0U3lzdGVtSGFuZGxlcigpKQ0KLQkJcFNILT5TZXRDbGlwYm9hcmRUZXh0KEdldEF0dGFjaGVkSFduZCgpLCBzdHIpOw0KLX0NCi0NCi12b2lkIENQV0xfRWRpdDo6UGFzdGVUZXh0KCkNCi17DQotCWlmICghQ2FuUGFzdGUoKSkgcmV0dXJuOw0KLQ0KLQlDRlhfV2lkZVN0cmluZyBzd0NsaXBib2FyZDsNCi0JaWYgKElGWF9TeXN0ZW1IYW5kbGVyKiBwU0ggPSBHZXRTeXN0ZW1IYW5kbGVyKCkpDQotCQlzd0NsaXBib2FyZCA9IHBTSC0+R2V0Q2xpcGJvYXJkVGV4dChHZXRBdHRhY2hlZEhXbmQoKSk7DQotDQotCWlmIChtX3BGaWxsZXJOb3RpZnkpDQotCXsNCi0JCUZYX0JPT0wgYlJDID0gVFJVRTsNCi0JCUZYX0JPT0wgYkV4aXQgPSBGQUxTRTsNCi0JCUNGWF9XaWRlU3RyaW5nIHN0ckNoYW5nZUV4Ow0KLQkJaW50IG5TZWxTdGFydCA9IDA7DQotCQlpbnQgblNlbEVuZCA9IDA7DQotCQlHZXRTZWwoblNlbFN0YXJ0LCBuU2VsRW5kKTsNCi0JCW1fcEZpbGxlck5vdGlmeS0+T25CZWZvcmVLZXlTdHJva2UoVFJVRSwgR2V0QXR0YWNoZWREYXRhKCksIDAgLCBzd0NsaXBib2FyZCwgc3RyQ2hhbmdlRXgsIG5TZWxTdGFydCwgblNlbEVuZCwgVFJVRSwgYlJDLCBiRXhpdCwgMCk7DQotCQlpZiAoIWJSQykgcmV0dXJuOw0KLQkJaWYgKGJFeGl0KSByZXR1cm47DQotCX0NCi0NCi0JaWYgKHN3Q2xpcGJvYXJkLkdldExlbmd0aCgpID4gMCkNCi0Jew0KLQkJQ2xlYXIoKTsNCi0JCUluc2VydFRleHQoc3dDbGlwYm9hcmQpOw0KLQl9DQotDQotCWlmIChtX3BGaWxsZXJOb3RpZnkpDQotCXsNCi0JCUZYX0JPT0wgYkV4aXQgPSBGQUxTRTsNCi0JCW1fcEZpbGxlck5vdGlmeS0+T25BZnRlcktleVN0cm9rZShUUlVFLCBHZXRBdHRhY2hlZERhdGEoKSwgYkV4aXQsMCk7DQotCQlpZiAoYkV4aXQpIHJldHVybjsNCi0JfQ0KLX0NCi0NCi12b2lkIENQV0xfRWRpdDo6Q3V0VGV4dCgpDQotew0KLQlpZiAoIUNhbkN1dCgpKSByZXR1cm47DQotDQotCUNGWF9XaWRlU3RyaW5nIHN0ciA9IG1fcEVkaXQtPkdldFNlbFRleHQoKTsNCi0NCi0JaWYgKElGWF9TeXN0ZW1IYW5kbGVyKiBwU0ggPSBHZXRTeXN0ZW1IYW5kbGVyKCkpDQotCQlwU0gtPlNldENsaXBib2FyZFRleHQoR2V0QXR0YWNoZWRIV25kKCksIHN0cik7DQotDQotCW1fcEVkaXQtPkNsZWFyKCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9FZGl0OjpPbkNyZWF0ZWQoKQ0KLXsNCi0JQ1BXTF9FZGl0Q3RybDo6T25DcmVhdGVkKCk7DQotDQotCWlmIChDUFdMX1Njcm9sbEJhciAqIHBTY3JvbGwgPSBHZXRWU2Nyb2xsQmFyKCkpDQotCXsNCi0JCXBTY3JvbGwtPlJlbW92ZUZsYWcoUFdTX0FVVE9UUkFOU1BBUkVOVCk7DQotCQlwU2Nyb2xsLT5TZXRUcmFuc3BhcmVuY3koMjU1KTsNCi0JfQ0KLQ0KLQlTZXRQYXJhbUJ5RmxhZygpOw0KLQ0KLQltX3JjT2xkV2luZG93ID0gR2V0V2luZG93UmVjdCgpOw0KLQ0KLQltX3BFZGl0LT5TZXRPcHJOb3RpZnkodGhpcyk7DQotCW1fcEVkaXQtPkVuYWJsZU9wck5vdGlmeShUUlVFKTsNCi19DQotDQotdm9pZCBDUFdMX0VkaXQ6OlNldFBhcmFtQnlGbGFnKCkNCi17CQ0KLQlpZiAoSGFzRmxhZyhQRVNfUklHSFQpKQ0KLQl7DQotCQltX3BFZGl0LT5TZXRBbGlnbm1lbnRIKDIsIEZBTFNFKTsNCi0JfQ0KLQllbHNlIGlmIChIYXNGbGFnKFBFU19NSURETEUpKQ0KLQl7DQotCQltX3BFZGl0LT5TZXRBbGlnbm1lbnRIKDEsIEZBTFNFKTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCW1fcEVkaXQtPlNldEFsaWdubWVudEgoMCwgRkFMU0UpOw0KLQl9DQotDQotCWlmIChIYXNGbGFnKFBFU19CT1RUT00pKQ0KLQl7DQotCQltX3BFZGl0LT5TZXRBbGlnbm1lbnRWKDIsIEZBTFNFKTsNCi0JfQ0KLQllbHNlIGlmIChIYXNGbGFnKFBFU19DRU5URVIpKQ0KLQl7DQotCQltX3BFZGl0LT5TZXRBbGlnbm1lbnRWKDEsIEZBTFNFKTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCW1fcEVkaXQtPlNldEFsaWdubWVudFYoMCwgRkFMU0UpOw0KLQl9DQotDQotCWlmIChIYXNGbGFnKFBFU19QQVNTV09SRCkpDQotCXsNCi0JCW1fcEVkaXQtPlNldFBhc3N3b3JkQ2hhcignKicsIEZBTFNFKTsNCi0JfQ0KLQ0KLQltX3BFZGl0LT5TZXRNdWx0aUxpbmUoSGFzRmxhZyhQRVNfTVVMVElMSU5FKSwgRkFMU0UpOw0KLQltX3BFZGl0LT5TZXRBdXRvUmV0dXJuKEhhc0ZsYWcoUEVTX0FVVE9SRVRVUk4pLCBGQUxTRSk7DQotCW1fcEVkaXQtPlNldEF1dG9Gb250U2l6ZShIYXNGbGFnKFBXU19BVVRPRk9OVFNJWkUpLCBGQUxTRSk7DQotCW1fcEVkaXQtPlNldEF1dG9TY3JvbGwoSGFzRmxhZyhQRVNfQVVUT1NDUk9MTCksIEZBTFNFKTsNCi0JbV9wRWRpdC0+RW5hYmxlVW5kbyhIYXNGbGFnKFBFU19VTkRPKSk7DQotDQotCWlmIChIYXNGbGFnKFBFU19URVhUT1ZFUkZMT1cpKQ0KLQl7DQotCQlTZXRDbGlwUmVjdChDUERGX1JlY3QoMC4wZiwwLjBmLDAuMGYsMC4wZikpOw0KLQkJbV9wRWRpdC0+U2V0VGV4dE92ZXJmbG93KFRSVUUsIEZBTFNFKTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCWlmIChtX3BFZGl0Q2FyZXQpDQotCQl7DQotCQkJbV9wRWRpdENhcmV0LT5TZXRDbGlwUmVjdChDUFdMX1V0aWxzOjpJbmZsYXRlUmVjdChHZXRDbGllbnRSZWN0KCksMS4wZikpOyAvLysxIGZvciBjYXJldCBiZXNpZGUgYm9yZGVyDQotCQl9DQotCX0NCi0NCi0JaWYgKEhhc0ZsYWcoUEVTX1NQRUxMQ0hFQ0spKQ0KLQl7DQotCQltX3BTcGVsbENoZWNrID0gR2V0Q3JlYXRpb25QYXJhbSgpLnBTcGVsbENoZWNrOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9FZGl0OjpHZXRUaGlzQXBwZWFyYW5jZVN0cmVhbShDRlhfQnl0ZVRleHRCdWYgJiBzQXBwU3RyZWFtKQ0KLXsNCi0JQ1BXTF9XbmQ6OkdldFRoaXNBcHBlYXJhbmNlU3RyZWFtKHNBcHBTdHJlYW0pOw0KLQ0KLQlDUERGX1JlY3QgcmNDbGllbnQgPSBHZXRDbGllbnRSZWN0KCk7DQotCUNGWF9CeXRlVGV4dEJ1ZiBzTGluZTsNCi0NCi0JRlhfSU5UMzIgbkNoYXJBcnJheSA9IG1fcEVkaXQtPkdldENoYXJBcnJheSgpOw0KLQ0KLQlpZiAobkNoYXJBcnJheSA+IDApDQotCXsNCi0JCXN3aXRjaCAoR2V0Qm9yZGVyU3R5bGUoKSkNCi0JCXsNCi0JCWNhc2UgUEJTX1NPTElEOg0KLQkJCXsNCi0JCQkJc0xpbmUgPDwgInFcbiIgPDwgR2V0Qm9yZGVyV2lkdGgoKSA8PCAiIHdcbiIgDQotCQkJCQk8PCBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShHZXRCb3JkZXJDb2xvcigpLEZBTFNFKSA8PCAiIDIgSiAwIGpcbiI7CQkJCQkNCi0NCi0JCQkJZm9yIChGWF9JTlQzMiBpPTE7aTxuQ2hhckFycmF5O2krKykNCi0JCQkJew0KLQkJCQkJc0xpbmUgPDwgcmNDbGllbnQubGVmdCArICgocmNDbGllbnQucmlnaHQgLSByY0NsaWVudC5sZWZ0KS9uQ2hhckFycmF5KSppIDw8ICIgIg0KLQkJCQkJCTw8IHJjQ2xpZW50LmJvdHRvbSA8PCAiIG1cbiINCi0JCQkJCQk8PCByY0NsaWVudC5sZWZ0ICsgKChyY0NsaWVudC5yaWdodCAtIHJjQ2xpZW50LmxlZnQpL25DaGFyQXJyYXkpKmkgPDwgIiAiDQotCQkJCQkJPDwgcmNDbGllbnQudG9wIDw8ICIgbCBTXG4iOwkJCQkJCQ0KLQkJCQl9DQotDQotCQkJCXNMaW5lIDw8ICJRXG4iOwkJCQkJDQotCQkJfQ0KLQkJCWJyZWFrOyANCi0JCWNhc2UgUEJTX0RBU0g6DQotCQkJew0KLQkJCQlzTGluZSA8PCAicVxuIiA8PCBHZXRCb3JkZXJXaWR0aCgpIDw8ICIgd1xuIiANCi0JCQkJCTw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKEdldEJvcmRlckNvbG9yKCksRkFMU0UpIDw8ICIgMiBKIDAgalxuIg0KLQkJCQkJPDwgIlsiIDw8IEdldEJvcmRlckRhc2goKS5uRGFzaCA8PCAiICIgDQotCQkJCQk8PCBHZXRCb3JkZXJEYXNoKCkubkdhcCA8PCAiXSAiIA0KLQkJCQkJPDwgR2V0Qm9yZGVyRGFzaCgpLm5QaGFzZSA8PCAiIGRcbiI7DQotDQotCQkJCWZvciAoRlhfSU5UMzIgaT0xO2k8bkNoYXJBcnJheTtpKyspCQkJCQkNCi0JCQkJew0KLQkJCQkJc0xpbmUgPDwgcmNDbGllbnQubGVmdCArICgocmNDbGllbnQucmlnaHQgLSByY0NsaWVudC5sZWZ0KS9uQ2hhckFycmF5KSppIDw8ICIgIg0KLQkJCQkJCTw8IHJjQ2xpZW50LmJvdHRvbSA8PCAiIG1cbiINCi0JCQkJCQk8PCByY0NsaWVudC5sZWZ0ICsgKChyY0NsaWVudC5yaWdodCAtIHJjQ2xpZW50LmxlZnQpL25DaGFyQXJyYXkpKmkgPDwgIiAiDQotCQkJCQkJPDwgcmNDbGllbnQudG9wIDw8ICIgbCBTXG4iOwkNCi0JCQkJfQ0KLQ0KLQkJCQlzTGluZSA8PCAiUVxuIjsNCi0JCQl9DQotCQkJYnJlYWs7DQotCQl9CQkNCi0JfQ0KLQ0KLQlzQXBwU3RyZWFtIDw8IHNMaW5lOw0KLQ0KLQlDRlhfQnl0ZVRleHRCdWYgc1RleHQ7DQotDQotCUNQREZfUG9pbnQgcHRPZmZzZXQgPSBDUERGX1BvaW50KDAuMGYsMC4wZik7DQotDQotCUNQVlRfV29yZFJhbmdlIHdyV2hvbGUgPSBtX3BFZGl0LT5HZXRXaG9sZVdvcmRSYW5nZSgpOw0KLQlDUFZUX1dvcmRSYW5nZSB3clNlbGVjdCA9IEdldFNlbGVjdFdvcmRSYW5nZSgpOw0KLQlDUFZUX1dvcmRSYW5nZSB3clZpc2libGUgPSAoSGFzRmxhZyhQRVNfVEVYVE9WRVJGTE9XKSA/IHdyV2hvbGUgOiBtX3BFZGl0LT5HZXRWaXNpYmxlV29yZFJhbmdlKCkpOw0KLQlDUFZUX1dvcmRSYW5nZSB3clNlbEJlZm9yZSh3cldob2xlLkJlZ2luUG9zLHdyU2VsZWN0LkJlZ2luUG9zKTsNCi0JQ1BWVF9Xb3JkUmFuZ2Ugd3JTZWxBZnRlcih3clNlbGVjdC5FbmRQb3Msd3JXaG9sZS5FbmRQb3MpOw0KLQ0KLQlDUFZUX1dvcmRSYW5nZSB3clRlbXAgPSBDUFdMX1V0aWxzOjpPdmVybGFwV29yZFJhbmdlKEdldFNlbGVjdFdvcmRSYW5nZSgpLHdyVmlzaWJsZSk7DQotCUNGWF9CeXRlU3RyaW5nIHNFZGl0U2VsID0gQ1BXTF9VdGlsczo6R2V0RWRpdFNlbEFwcFN0cmVhbShtX3BFZGl0LCBwdE9mZnNldCwNCi0JCQkmd3JUZW1wKTsNCi0NCi0JaWYgKHNFZGl0U2VsLkdldExlbmd0aCgpID4gMCkNCi0JCXNUZXh0IDw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKFBXTF9ERUZBVUxUX1NFTEJBQ0tDT0xPUikgPDwgc0VkaXRTZWwgOw0KLQ0KLQl3clRlbXAgPSBDUFdMX1V0aWxzOjpPdmVybGFwV29yZFJhbmdlKHdyVmlzaWJsZSx3clNlbEJlZm9yZSk7DQotCUNGWF9CeXRlU3RyaW5nIHNFZGl0QmVmb3JlID0gQ1BXTF9VdGlsczo6R2V0RWRpdEFwcFN0cmVhbShtX3BFZGl0LCBwdE9mZnNldCwgIA0KLQkJCSZ3clRlbXAsICFIYXNGbGFnKFBFU19DSEFSQVJSQVkpLCBtX3BFZGl0LT5HZXRQYXNzd29yZENoYXIoKSk7CQkJDQotDQotCWlmIChzRWRpdEJlZm9yZS5HZXRMZW5ndGgoKSA+IDApDQotCQlzVGV4dCA8PCAiQlRcbiIgPDwgQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oR2V0VGV4dENvbG9yKCkpIDw8IHNFZGl0QmVmb3JlIDw8ICJFVFxuIjsNCi0NCi0Jd3JUZW1wID0gQ1BXTF9VdGlsczo6T3ZlcmxhcFdvcmRSYW5nZSh3clZpc2libGUsd3JTZWxlY3QpOw0KLQlDRlhfQnl0ZVN0cmluZyBzRWRpdE1pZCA9IENQV0xfVXRpbHM6OkdldEVkaXRBcHBTdHJlYW0obV9wRWRpdCwgcHRPZmZzZXQsIA0KLQkJCSZ3clRlbXAsICFIYXNGbGFnKFBFU19DSEFSQVJSQVkpLCBtX3BFZGl0LT5HZXRQYXNzd29yZENoYXIoKSk7CQkJDQotDQotCWlmIChzRWRpdE1pZC5HZXRMZW5ndGgoKSA+IDApDQotCQlzVGV4dCA8PCAiQlRcbiIgPDwgQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwxKSkgPDwgc0VkaXRNaWQgPDwgIkVUXG4iOw0KLQ0KLQl3clRlbXAgPSBDUFdMX1V0aWxzOjpPdmVybGFwV29yZFJhbmdlKHdyVmlzaWJsZSx3clNlbEFmdGVyKTsNCi0JQ0ZYX0J5dGVTdHJpbmcgc0VkaXRBZnRlciA9IENQV0xfVXRpbHM6OkdldEVkaXRBcHBTdHJlYW0obV9wRWRpdCwgcHRPZmZzZXQsIA0KLQkJCSZ3clRlbXAsICFIYXNGbGFnKFBFU19DSEFSQVJSQVkpLCBtX3BFZGl0LT5HZXRQYXNzd29yZENoYXIoKSk7CQkJDQotDQotCWlmIChzRWRpdEFmdGVyLkdldExlbmd0aCgpID4gMCkNCi0JCXNUZXh0IDw8ICJCVFxuIiA8PCBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShHZXRUZXh0Q29sb3IoKSkgPDwgc0VkaXRBZnRlcjw8ICJFVFxuIjsNCi0NCi0JaWYgKEhhc0ZsYWcoUEVTX1NQRUxMQ0hFQ0spKQ0KLQl7DQotCQlDRlhfQnl0ZVN0cmluZyBzU3BlbGxDaGVjayA9IENQV0xfVXRpbHM6OkdldFNwZWxsQ2hlY2tBcHBTdHJlYW0obV9wRWRpdCwgbV9wU3BlbGxDaGVjaywgcHRPZmZzZXQsICZ3clZpc2libGUpOw0KLQkJaWYgKHNTcGVsbENoZWNrLkdldExlbmd0aCgpID4gMCkNCi0JCQlzVGV4dCA8PCBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShDUFdMX0NvbG9yKENPTE9SVFlQRV9SR0IsMSwwLDApLEZBTFNFKSA8PCBzU3BlbGxDaGVjazsNCi0JfQ0KLQ0KLQlpZiAoc1RleHQuR2V0TGVuZ3RoKCkgPiAwKQ0KLQl7DQotCQlDUERGX1JlY3QgcmNDbGllbnQgPSB0aGlzLT5HZXRDbGllbnRSZWN0KCk7DQotCQlzQXBwU3RyZWFtIDw8ICJxXG4vVHggQk1DXG4iOw0KLQkJDQotCQlpZiAoIUhhc0ZsYWcoUEVTX1RFWFRPVkVSRkxPVykpDQotCQkJc0FwcFN0cmVhbSA8PCByY0NsaWVudC5sZWZ0IDw8ICIgIiA8PCByY0NsaWVudC5ib3R0b20gPDwgIiAiDQotCQkJCTw8IHJjQ2xpZW50LnJpZ2h0IC0gcmNDbGllbnQubGVmdCA8PCAiICIgPDwgcmNDbGllbnQudG9wIC0gcmNDbGllbnQuYm90dG9tIDw8ICIgcmUgVyBuXG4iOw0KLQ0KLQkJc0FwcFN0cmVhbSA8PCBzVGV4dDsNCi0NCi0JCXNBcHBTdHJlYW0gPDwgIkVNQ1xuUVxuIjsNCi0JfQ0KLX0NCi0NCi12b2lkIENQV0xfRWRpdDo6RHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpDQotew0KLQlDUFdMX1duZDo6RHJhd1RoaXNBcHBlYXJhbmNlKHBEZXZpY2UscFVzZXIyRGV2aWNlKTsNCi0NCi0JQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOw0KLQlDRlhfQnl0ZVRleHRCdWYgc0xpbmU7DQotDQotCUZYX0lOVDMyIG5DaGFyQXJyYXkgPSBtX3BFZGl0LT5HZXRDaGFyQXJyYXkoKTsNCi0NCi0JaWYgKG5DaGFyQXJyYXkgPiAwKQ0KLQl7DQotCQlzd2l0Y2ggKEdldEJvcmRlclN0eWxlKCkpDQotCQl7DQotCQljYXNlIFBCU19TT0xJRDoNCi0JCQl7DQotCQkJCUNGWF9HcmFwaFN0YXRlRGF0YSBnc2Q7DQotCQkJCWdzZC5tX0xpbmVXaWR0aCA9IChGWF9GTE9BVClHZXRCb3JkZXJXaWR0aCgpOw0KLQ0KLQkJCQlDRlhfUGF0aERhdGEgcGF0aDsNCi0JCQkJcGF0aC5TZXRQb2ludENvdW50KChuQ2hhckFycmF5LTEpKjIpOw0KLQkJCQkNCi0JCQkJZm9yIChGWF9JTlQzMiBpPTA7IGk8bkNoYXJBcnJheS0xOyBpKyspDQotCQkJCXsJCQkJCQ0KLQkJCQkJcGF0aC5TZXRQb2ludChpKjIsIHJjQ2xpZW50LmxlZnQgKyAoKHJjQ2xpZW50LnJpZ2h0IC0gcmNDbGllbnQubGVmdCkvbkNoYXJBcnJheSkqKGkrMSksIA0KLQkJCQkJCXJjQ2xpZW50LmJvdHRvbSwgRlhQVF9NT1ZFVE8pOw0KLQkJCQkJcGF0aC5TZXRQb2ludChpKjIrMSwgcmNDbGllbnQubGVmdCArICgocmNDbGllbnQucmlnaHQgLSByY0NsaWVudC5sZWZ0KS9uQ2hhckFycmF5KSooaSsxKSwNCi0JCQkJCQlyY0NsaWVudC50b3AsIEZYUFRfTElORVRPKTsJCQkJCQkJCQkJCQ0KLQkJCQl9CQkJDQotCQkJCWlmIChwYXRoLkdldFBvaW50Q291bnQoKSA+IDApDQotCQkJCQlwRGV2aWNlLT5EcmF3UGF0aCgmcGF0aCwgcFVzZXIyRGV2aWNlLCAmZ3NkLDAsICANCi0JCQkJCQlDUFdMX1V0aWxzOjpQV0xDb2xvclRvRlhDb2xvcihHZXRCb3JkZXJDb2xvcigpLDI1NSksIEZYRklMTF9BTFRFUk5BVEUpOw0KLQkJCX0NCi0JCQlicmVhazsgDQotCQljYXNlIFBCU19EQVNIOg0KLQkJCXsNCi0JCQkJQ0ZYX0dyYXBoU3RhdGVEYXRhIGdzZDsNCi0JCQkJZ3NkLm1fTGluZVdpZHRoID0gKEZYX0ZMT0FUKUdldEJvcmRlcldpZHRoKCk7DQotDQotCQkJCWdzZC5TZXREYXNoQ291bnQoMik7DQotCQkJCWdzZC5tX0Rhc2hBcnJheVswXSA9IChGWF9GTE9BVClHZXRCb3JkZXJEYXNoKCkubkRhc2g7DQotCQkJCWdzZC5tX0Rhc2hBcnJheVsxXSA9IChGWF9GTE9BVClHZXRCb3JkZXJEYXNoKCkubkdhcDsNCi0JCQkJZ3NkLm1fRGFzaFBoYXNlID0gKEZYX0ZMT0FUKUdldEJvcmRlckRhc2goKS5uUGhhc2U7DQotDQotCQkJCUNGWF9QYXRoRGF0YSBwYXRoOw0KLQkJCQlwYXRoLlNldFBvaW50Q291bnQoKG5DaGFyQXJyYXktMSkqMik7DQotCQkJCQ0KLQkJCQlmb3IgKEZYX0lOVDMyIGk9MDsgaTxuQ2hhckFycmF5LTE7IGkrKykNCi0JCQkJewkJCQkJDQotCQkJCQlwYXRoLlNldFBvaW50KGkqMiwgcmNDbGllbnQubGVmdCArICgocmNDbGllbnQucmlnaHQgLSByY0NsaWVudC5sZWZ0KS9uQ2hhckFycmF5KSooaSsxKSwgDQotCQkJCQkJcmNDbGllbnQuYm90dG9tLCBGWFBUX01PVkVUTyk7DQotCQkJCQlwYXRoLlNldFBvaW50KGkqMisxLCByY0NsaWVudC5sZWZ0ICsgKChyY0NsaWVudC5yaWdodCAtIHJjQ2xpZW50LmxlZnQpL25DaGFyQXJyYXkpKihpKzEpLA0KLQkJCQkJCXJjQ2xpZW50LnRvcCwgRlhQVF9MSU5FVE8pOwkJCQkJCQkJCQkJDQotCQkJCX0JCQ0KLQkJCQlpZiAocGF0aC5HZXRQb2ludENvdW50KCkgPiAwKQ0KLQkJCQkJcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgJmdzZCwwLCAgDQotCQkJCQkJQ1BXTF9VdGlsczo6UFdMQ29sb3JUb0ZYQ29sb3IoR2V0Qm9yZGVyQ29sb3IoKSwyNTUpLCBGWEZJTExfQUxURVJOQVRFKTsNCi0JCQl9DQotCQkJYnJlYWs7DQotCQl9CQkNCi0JfQ0KLQ0KLQlDUERGX1JlY3QgcmNDbGlwOw0KLQlDUFZUX1dvcmRSYW5nZSB3clJhbmdlID0gbV9wRWRpdC0+R2V0VmlzaWJsZVdvcmRSYW5nZSgpOw0KLQlDUFZUX1dvcmRSYW5nZSogcFJhbmdlID0gTlVMTDsNCi0NCi0JaWYgKCFIYXNGbGFnKFBFU19URVhUT1ZFUkZMT1cpKQ0KLQl7DQotCQlyY0NsaXAgPSBHZXRDbGllbnRSZWN0KCk7DQotCQlwUmFuZ2UgPSAmd3JSYW5nZTsNCi0JfQ0KLUlGWF9TeXN0ZW1IYW5kbGVyKiBwU3lzSGFuZGxlciA9IEdldFN5c3RlbUhhbmRsZXIoKTsNCi0JSUZYX0VkaXQ6OkRyYXdFZGl0KHBEZXZpY2UscFVzZXIyRGV2aWNlLG1fcEVkaXQsDQotCQlDUFdMX1V0aWxzOjpQV0xDb2xvclRvRlhDb2xvcihHZXRUZXh0Q29sb3IoKSx0aGlzLT5HZXRUcmFuc3BhcmVuY3koKSksDQotCQlDUFdMX1V0aWxzOjpQV0xDb2xvclRvRlhDb2xvcihHZXRUZXh0U3Ryb2tlQ29sb3IoKSx0aGlzLT5HZXRUcmFuc3BhcmVuY3koKSksDQotCQlyY0NsaXAsQ1BERl9Qb2ludCgwLjBmLDAuMGYpLHBSYW5nZSwgcFN5c0hhbmRsZXIsIG1fcEZvcm1GaWxsZXIpOw0KLQ0KLQlpZiAoSGFzRmxhZyhQRVNfU1BFTExDSEVDSykpDQotCXsNCi0JCUNQV0xfVXRpbHM6OkRyYXdFZGl0U3BlbGxDaGVjayhwRGV2aWNlLHBVc2VyMkRldmljZSxtX3BFZGl0LHJjQ2xpcCwNCi0JCQlDUERGX1BvaW50KDAuMGYsMC4wZikscFJhbmdlLCB0aGlzLT5HZXRDcmVhdGlvblBhcmFtKCkucFNwZWxsQ2hlY2spOw0KLQl9DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9FZGl0OjpPbkxCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlDUFdMX1duZDo6T25MQnV0dG9uRG93bihwb2ludCxuRmxhZyk7DQotDQotCWlmIChIYXNGbGFnKFBFU19URVhUT1ZFUkZMT1cpIHx8IENsaWVudEhpdFRlc3QocG9pbnQpKQ0KLQl7DQotCQlpZiAobV9iTW91c2VEb3duKQ0KLQkJCXRoaXMtPkludmFsaWRhdGVSZWN0KCk7DQotDQotCQltX2JNb3VzZURvd24gPSBUUlVFOwkJDQotCQlTZXRDYXB0dXJlKCk7DQotDQotCQltX3BFZGl0LT5Pbk1vdXNlRG93bihwb2ludCxJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpOw0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MCUNQV0xfRWRpdDo6T25MQnV0dG9uRGJsQ2xrKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlDUFdMX1duZDo6T25MQnV0dG9uRGJsQ2xrKHBvaW50LCBuRmxhZyk7DQotDQotCWlmIChIYXNGbGFnKFBFU19URVhUT1ZFUkZMT1cpIHx8IENsaWVudEhpdFRlc3QocG9pbnQpKQ0KLQl7DQotCQltX3BFZGl0LT5TZWxlY3RBbGwoKTsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotI2RlZmluZSBXTV9QV0xFRElUX1VORE8JCQkJCTB4MDENCi0jZGVmaW5lIFdNX1BXTEVESVRfUkVETwkJCQkJMHgwMg0KLSNkZWZpbmUgV01fUFdMRURJVF9DVVQJCQkJCTB4MDMNCi0jZGVmaW5lIFdNX1BXTEVESVRfQ09QWQkJCQkJMHgwNA0KLSNkZWZpbmUgV01fUFdMRURJVF9QQVNURQkJCQkweDA1DQotI2RlZmluZSBXTV9QV0xFRElUX0RFTEVURQkJCQkweDA2DQotI2RlZmluZSBXTV9QV0xFRElUX1NFTEVDVEFMTAkJCTB4MDcNCi0jZGVmaW5lIFdNX1BXTEVESVRfU1VHR0VTVAkJCQkweDA4DQotDQotRlhfQk9PTCBDUFdMX0VkaXQ6Ok9uUkJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlpZiAobV9iTW91c2VEb3duKSByZXR1cm4gRkFMU0U7DQotDQotCUNQV0xfV25kOjpPblJCdXR0b25VcChwb2ludCwgbkZsYWcpOw0KLQkNCi0JaWYgKCFIYXNGbGFnKFBFU19URVhUT1ZFUkZMT1cpICYmICFDbGllbnRIaXRUZXN0KHBvaW50KSkgcmV0dXJuIFRSVUU7DQotDQotCUlGWF9TeXN0ZW1IYW5kbGVyKiBwU0ggPSBHZXRTeXN0ZW1IYW5kbGVyKCk7DQotCWlmICghcFNIKSByZXR1cm4gRkFMU0U7DQotDQotCXRoaXMtPlNldEZvY3VzKCk7DQotDQotCUNQVlRfV29yZFJhbmdlIHdyTGF0aW4gPSBHZXRMYXRpbldvcmRzUmFuZ2UocG9pbnQpOw0KLQlDRlhfV2lkZVN0cmluZyBzd0xhdGluID0gbV9wRWRpdC0+R2V0UmFuZ2VUZXh0KHdyTGF0aW4pOw0KLQ0KLQlGWF9ITUVOVSBoUG9wdXAgPSBwU0gtPkNyZWF0ZVBvcHVwTWVudSgpOw0KLQlpZiAoIWhQb3B1cCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlDRlhfQnl0ZVN0cmluZ0FycmF5IHNTdWdnZXN0V29yZHM7DQotCUNQREZfUG9pbnQgcHRQb3B1cCA9IHBvaW50Ow0KLQ0KLQlpZiAoIUlzUmVhZE9ubHkoKSkNCi0Jew0KLQkJaWYgKEhhc0ZsYWcoUEVTX1NQRUxMQ0hFQ0spICYmICFzd0xhdGluLklzRW1wdHkoKSkNCi0JCXsNCi0JCQlpZiAobV9wU3BlbGxDaGVjaykNCi0JCQl7DQotCQkJCUNGWF9CeXRlU3RyaW5nIHNMYXRpbiA9IENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShzd0xhdGluKTsNCi0NCi0JCQkJaWYgKCFtX3BTcGVsbENoZWNrLT5DaGVja1dvcmQoc0xhdGluKSkNCi0JCQkJewkJCQkJCQ0KLQkJCQkJbV9wU3BlbGxDaGVjay0+U3VnZ2VzdFdvcmRzKHNMYXRpbixzU3VnZ2VzdFdvcmRzKTsNCi0NCi0JCQkJCUZYX0lOVDMyIG5TdWdnZXN0ID0gc1N1Z2dlc3RXb3Jkcy5HZXRTaXplKCk7DQotDQotCQkJCQlmb3IgKEZYX0lOVDMyIG5Xb3JkPTA7IG5Xb3JkPG5TdWdnZXN0OyBuV29yZCsrKQ0KLQkJCQkJewkNCi0JCQkJCQlwU0gtPkFwcGVuZE1lbnVJdGVtKGhQb3B1cCwgV01fUFdMRURJVF9TVUdHRVNUK25Xb3JkLCBzU3VnZ2VzdFdvcmRzW25Xb3JkXS5VVEY4RGVjb2RlKCkpOw0KLQkJCQkJfQ0KLQ0KLQkJCQkJaWYgKG5TdWdnZXN0ID4gMCkNCi0JCQkJCQlwU0gtPkFwcGVuZE1lbnVJdGVtKGhQb3B1cCwgMCwgTCIiKTsNCi0NCi0JCQkJCXB0UG9wdXAgPSBHZXRXb3JkUmlnaHRCb3R0b21Qb2ludCh3ckxhdGluLkVuZFBvcyk7DQotCQkJCX0NCi0JCQl9DQotCQl9DQotCX0NCi0NCi0JSVBXTF9Qcm92aWRlciogcFByb3ZpZGVyID0gdGhpcy0+R2V0UHJvdmlkZXIoKTsNCi0NCi0JaWYgKEhhc0ZsYWcoUEVTX1VORE8pKQ0KLQl7DQotCQlwU0gtPkFwcGVuZE1lbnVJdGVtKGhQb3B1cCwgV01fUFdMRURJVF9VTkRPLCANCi0JCQlwUHJvdmlkZXIgPyBwUHJvdmlkZXItPkxvYWRQb3B1cE1lbnVTdHJpbmcoMCkgOiBMIiZVbmRvIik7DQotCQlwU0gtPkFwcGVuZE1lbnVJdGVtKGhQb3B1cCwgV01fUFdMRURJVF9SRURPLA0KLQkJCXBQcm92aWRlciA/IHBQcm92aWRlci0+TG9hZFBvcHVwTWVudVN0cmluZygxKSA6IEwiJlJlZG8iKTsNCi0JCXBTSC0+QXBwZW5kTWVudUl0ZW0oaFBvcHVwLCAwLCBMIiIpOw0KLQ0KLQkJaWYgKCFtX3BFZGl0LT5DYW5VbmRvKCkpDQotCQkJcFNILT5FbmFibGVNZW51SXRlbShoUG9wdXAsIFdNX1BXTEVESVRfVU5ETywgRkFMU0UpOw0KLQkJaWYgKCFtX3BFZGl0LT5DYW5SZWRvKCkpDQotCQkJcFNILT5FbmFibGVNZW51SXRlbShoUG9wdXAsIFdNX1BXTEVESVRfUkVETywgRkFMU0UpOw0KLQl9DQotDQotCXBTSC0+QXBwZW5kTWVudUl0ZW0oaFBvcHVwLCBXTV9QV0xFRElUX0NVVCwgDQotCQlwUHJvdmlkZXIgPyBwUHJvdmlkZXItPkxvYWRQb3B1cE1lbnVTdHJpbmcoMikgOiBMIkN1JnQiKTsNCi0JcFNILT5BcHBlbmRNZW51SXRlbShoUG9wdXAsIFdNX1BXTEVESVRfQ09QWSwgDQotCQlwUHJvdmlkZXIgPyBwUHJvdmlkZXItPkxvYWRQb3B1cE1lbnVTdHJpbmcoMykgOiBMIiZDb3B5Iik7DQotCXBTSC0+QXBwZW5kTWVudUl0ZW0oaFBvcHVwLCBXTV9QV0xFRElUX1BBU1RFLCANCi0JCXBQcm92aWRlciA/IHBQcm92aWRlci0+TG9hZFBvcHVwTWVudVN0cmluZyg0KSA6IEwiJlBhc3RlIik7DQotCXBTSC0+QXBwZW5kTWVudUl0ZW0oaFBvcHVwLCBXTV9QV0xFRElUX0RFTEVURSwgDQotCQlwUHJvdmlkZXIgPyBwUHJvdmlkZXItPkxvYWRQb3B1cE1lbnVTdHJpbmcoNSkgOiBMIiZEZWxldGUiKTsNCi0NCi0JQ0ZYX1dpZGVTdHJpbmcgc3dUZXh0ID0gcFNILT5HZXRDbGlwYm9hcmRUZXh0KHRoaXMtPkdldEF0dGFjaGVkSFduZCgpKTsNCi0JaWYgKHN3VGV4dC5Jc0VtcHR5KCkpDQotCQlwU0gtPkVuYWJsZU1lbnVJdGVtKGhQb3B1cCwgV01fUFdMRURJVF9QQVNURSwgRkFMU0UpOw0KLQ0KLQlpZiAoIW1fcEVkaXQtPklzU2VsZWN0ZWQoKSkNCi0Jew0KLQkJcFNILT5FbmFibGVNZW51SXRlbShoUG9wdXAsIFdNX1BXTEVESVRfQ1VULCBGQUxTRSk7DQotCQlwU0gtPkVuYWJsZU1lbnVJdGVtKGhQb3B1cCwgV01fUFdMRURJVF9DT1BZLCBGQUxTRSk7DQotCQlwU0gtPkVuYWJsZU1lbnVJdGVtKGhQb3B1cCwgV01fUFdMRURJVF9ERUxFVEUsIEZBTFNFKTsNCi0JfQ0KLQ0KLQlpZiAoSXNSZWFkT25seSgpKQ0KLQl7DQotCQlwU0gtPkVuYWJsZU1lbnVJdGVtKGhQb3B1cCwgV01fUFdMRURJVF9DVVQsIEZBTFNFKTsNCi0JCXBTSC0+RW5hYmxlTWVudUl0ZW0oaFBvcHVwLCBXTV9QV0xFRElUX0RFTEVURSwgRkFMU0UpOw0KLQkJcFNILT5FbmFibGVNZW51SXRlbShoUG9wdXAsIFdNX1BXTEVESVRfUEFTVEUsIEZBTFNFKTsJCQkNCi0JfQ0KLQ0KLQlpZiAoSGFzRmxhZyhQRVNfUEFTU1dPUkQpKQ0KLQl7DQotCQlwU0gtPkVuYWJsZU1lbnVJdGVtKGhQb3B1cCwgV01fUFdMRURJVF9DVVQsIEZBTFNFKTsNCi0JCXBTSC0+RW5hYmxlTWVudUl0ZW0oaFBvcHVwLCBXTV9QV0xFRElUX0NPUFksIEZBTFNFKTsNCi0JfQ0KLQ0KLQlpZiAoSGFzRmxhZyhQRVNfTk9SRUFEKSkNCi0Jew0KLQkJcFNILT5FbmFibGVNZW51SXRlbShoUG9wdXAsIFdNX1BXTEVESVRfQ1VULCBGQUxTRSk7DQotCQlwU0gtPkVuYWJsZU1lbnVJdGVtKGhQb3B1cCwgV01fUFdMRURJVF9DT1BZLCBGQUxTRSk7DQotCX0NCi0NCi0JcFNILT5BcHBlbmRNZW51SXRlbShoUG9wdXAsIDAsIEwiIik7DQotCXBTSC0+QXBwZW5kTWVudUl0ZW0oaFBvcHVwLCBXTV9QV0xFRElUX1NFTEVDVEFMTCwNCi0JCXBQcm92aWRlciA/IHBQcm92aWRlci0+TG9hZFBvcHVwTWVudVN0cmluZyg2KSA6IEwiJlNlbGVjdCBBbGwiKTsNCi0NCi0JaWYgKG1fcEVkaXQtPkdldFRvdGFsV29yZHMoKSA9PSAwKQ0KLQl7DQotCQlwU0gtPkVuYWJsZU1lbnVJdGVtKGhQb3B1cCwgV01fUFdMRURJVF9TRUxFQ1RBTEwsIEZBTFNFKTsNCi0JfQ0KLQ0KLQlGWF9JTlQzMiB4LCB5Ow0KLQlQV0x0b1duZChwdFBvcHVwLCB4LCB5KTsNCi0JcFNILT5DbGllbnRUb1NjcmVlbihHZXRBdHRhY2hlZEhXbmQoKSwgeCwgeSk7DQotCXBTSC0+U2V0Q3Vyc29yKEZYQ1RfQVJST1cpOw0KLQlGWF9JTlQzMiBuQ21kID0gcFNILT5UcmFja1BvcHVwTWVudShoUG9wdXAsDQotCQkJCQkgeCwNCi0JCQkJCSB5LA0KLQkJCQkJIEdldEF0dGFjaGVkSFduZCgpKTsNCi0NCi0NCi0Jc3dpdGNoIChuQ21kKQ0KLQl7DQotCWNhc2UgV01fUFdMRURJVF9VTkRPOg0KLQkJVW5kbygpOw0KLQkJYnJlYWs7DQotCWNhc2UgV01fUFdMRURJVF9SRURPOg0KLQkJUmVkbygpOw0KLQkJYnJlYWs7DQotCWNhc2UgV01fUFdMRURJVF9DVVQ6DQotCQl0aGlzLT5DdXRUZXh0KCk7DQotCQlicmVhazsNCi0JY2FzZSBXTV9QV0xFRElUX0NPUFk6DQotCQl0aGlzLT5Db3B5VGV4dCgpOw0KLQkJYnJlYWs7DQotCWNhc2UgV01fUFdMRURJVF9QQVNURToNCi0JCXRoaXMtPlBhc3RlVGV4dCgpOw0KLQkJYnJlYWs7DQotCWNhc2UgV01fUFdMRURJVF9ERUxFVEU6DQotCQl0aGlzLT5DbGVhcigpOw0KLQkJYnJlYWs7DQotCWNhc2UgV01fUFdMRURJVF9TRUxFQ1RBTEw6DQotCQl0aGlzLT5TZWxlY3RBbGwoKTsNCi0JCWJyZWFrOw0KLQljYXNlIFdNX1BXTEVESVRfU1VHR0VTVCArIDA6DQotCQlTZXRTZWwobV9wRWRpdC0+V29yZFBsYWNlVG9Xb3JkSW5kZXgod3JMYXRpbi5CZWdpblBvcyksbV9wRWRpdC0+V29yZFBsYWNlVG9Xb3JkSW5kZXgod3JMYXRpbi5FbmRQb3MpKTsNCi0JCVJlcGxhY2VTZWwoc1N1Z2dlc3RXb3Jkc1swXS5VVEY4RGVjb2RlKCkpOw0KLQkJYnJlYWs7DQotCWNhc2UgV01fUFdMRURJVF9TVUdHRVNUICsgMToNCi0JCVNldFNlbChtX3BFZGl0LT5Xb3JkUGxhY2VUb1dvcmRJbmRleCh3ckxhdGluLkJlZ2luUG9zKSxtX3BFZGl0LT5Xb3JkUGxhY2VUb1dvcmRJbmRleCh3ckxhdGluLkVuZFBvcykpOw0KLQkJUmVwbGFjZVNlbChzU3VnZ2VzdFdvcmRzWzFdLlVURjhEZWNvZGUoKSk7DQotCQlicmVhazsNCi0JY2FzZSBXTV9QV0xFRElUX1NVR0dFU1QgKyAyOg0KLQkJU2V0U2VsKG1fcEVkaXQtPldvcmRQbGFjZVRvV29yZEluZGV4KHdyTGF0aW4uQmVnaW5Qb3MpLG1fcEVkaXQtPldvcmRQbGFjZVRvV29yZEluZGV4KHdyTGF0aW4uRW5kUG9zKSk7DQotCQlSZXBsYWNlU2VsKHNTdWdnZXN0V29yZHNbMl0uVVRGOERlY29kZSgpKTsNCi0JCWJyZWFrOw0KLQljYXNlIFdNX1BXTEVESVRfU1VHR0VTVCArIDM6DQotCQlTZXRTZWwobV9wRWRpdC0+V29yZFBsYWNlVG9Xb3JkSW5kZXgod3JMYXRpbi5CZWdpblBvcyksbV9wRWRpdC0+V29yZFBsYWNlVG9Xb3JkSW5kZXgod3JMYXRpbi5FbmRQb3MpKTsNCi0JCVJlcGxhY2VTZWwoc1N1Z2dlc3RXb3Jkc1szXS5VVEY4RGVjb2RlKCkpOw0KLQkJYnJlYWs7DQotCWNhc2UgV01fUFdMRURJVF9TVUdHRVNUICsgNDoJCQ0KLQkJU2V0U2VsKG1fcEVkaXQtPldvcmRQbGFjZVRvV29yZEluZGV4KHdyTGF0aW4uQmVnaW5Qb3MpLG1fcEVkaXQtPldvcmRQbGFjZVRvV29yZEluZGV4KHdyTGF0aW4uRW5kUG9zKSk7DQotCQlSZXBsYWNlU2VsKHNTdWdnZXN0V29yZHNbNF0uVVRGOERlY29kZSgpKTsNCi0JCWJyZWFrOw0KLQlkZWZhdWx0Og0KLQkJYnJlYWs7DQotCX0NCi0NCi0JcFNILT5EZXN0cm95TWVudShoUG9wdXApOw0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotdm9pZCBDUFdMX0VkaXQ6Ok9uU2V0Rm9jdXMoKQ0KLXsNCi0JU2V0RWRpdENhcmV0KFRSVUUpOw0KLQ0KLQlpZiAoIUlzUmVhZE9ubHkoKSkNCi0Jew0KLQkJaWYgKElQV0xfRm9jdXNIYW5kbGVyKiBwRm9jdXNIYW5kbGVyID0gR2V0Rm9jdXNIYW5kbGVyKCkpDQotCQkJcEZvY3VzSGFuZGxlci0+T25TZXRGb2N1cyh0aGlzKTsNCi0JfQ0KLQ0KLQltX2JGb2N1cyA9IFRSVUU7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9FZGl0OjpPbktpbGxGb2N1cygpDQotew0KLQlTaG93VlNjcm9sbEJhcihGQUxTRSk7DQotCQ0KLQltX3BFZGl0LT5TZWxlY3ROb25lKCk7DQotCVNldENhcmV0KEZBTFNFLCBDUERGX1BvaW50KDAuMGYsMC4wZiksIENQREZfUG9pbnQoMC4wZiwwLjBmKSk7DQotCQ0KLQlTZXRDaGFyU2V0KDApOw0KLQ0KLQlpZiAoIUlzUmVhZE9ubHkoKSkNCi0Jew0KLQkJaWYgKElQV0xfRm9jdXNIYW5kbGVyKiBwRm9jdXNIYW5kbGVyID0gR2V0Rm9jdXNIYW5kbGVyKCkpDQotCQkJcEZvY3VzSGFuZGxlci0+T25LaWxsRm9jdXModGhpcyk7DQotCX0NCi0NCi0JbV9iRm9jdXMgPSBGQUxTRTsNCi19DQotDQotdm9pZCBDUFdMX0VkaXQ6OlNldEhvcnpTY2FsZShGWF9JTlQzMiBuSG9yelNjYWxlLCBGWF9CT09MIGJQYWludC8qID0gVFJVRSovKQ0KLXsNCi0JbV9wRWRpdC0+U2V0SG9yelNjYWxlKG5Ib3J6U2NhbGUsIGJQYWludCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9FZGl0OjpTZXRDaGFyU3BhY2UoRlhfRkxPQVQgZkNoYXJTcGFjZSwgRlhfQk9PTCBiUGFpbnQvKiA9IFRSVUUqLykNCi17DQotCW1fcEVkaXQtPlNldENoYXJTcGFjZShmQ2hhclNwYWNlLCBiUGFpbnQpOw0KLX0NCi0NCi12b2lkIENQV0xfRWRpdDo6U2V0TGluZUxlYWRpbmcoRlhfRkxPQVQgZkxpbmVMZWFkaW5nLCBGWF9CT09MIGJQYWludC8qID0gVFJVRSovKQ0KLXsNCi0JbV9wRWRpdC0+U2V0TGluZUxlYWRpbmcoZkxpbmVMZWFkaW5nLCBiUGFpbnQpOw0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDUFdMX0VkaXQ6OkdldFNlbGVjdEFwcGVhcmFuY2VTdHJlYW0oY29uc3QgQ1BERl9Qb2ludCAmIHB0T2Zmc2V0KSBjb25zdA0KLXsNCi0JQ1BWVF9Xb3JkUmFuZ2Ugd3IgPSBHZXRTZWxlY3RXb3JkUmFuZ2UoKTsNCi0JcmV0dXJuIENQV0xfVXRpbHM6OkdldEVkaXRTZWxBcHBTdHJlYW0obV9wRWRpdCxwdE9mZnNldCwmd3IpOw0KLX0NCi0NCi1DUFZUX1dvcmRSYW5nZSBDUFdMX0VkaXQ6OkdldFNlbGVjdFdvcmRSYW5nZSgpIGNvbnN0DQotew0KLQlpZiAobV9wRWRpdC0+SXNTZWxlY3RlZCgpKQ0KLQl7DQotCQlGWF9JTlQzMiBuU3RhcnQgPSAtMTsNCi0JCUZYX0lOVDMyIG5FbmQgPSAtMTsNCi0NCi0JCW1fcEVkaXQtPkdldFNlbChuU3RhcnQsIG5FbmQpOw0KLQ0KLQkJQ1BWVF9Xb3JkUGxhY2Ugd3BTdGFydCA9IG1fcEVkaXQtPldvcmRJbmRleFRvV29yZFBsYWNlKG5TdGFydCk7DQotCQlDUFZUX1dvcmRQbGFjZSB3cEVuZCA9IG1fcEVkaXQtPldvcmRJbmRleFRvV29yZFBsYWNlKG5FbmQpOw0KLQ0KLQkJcmV0dXJuIENQVlRfV29yZFJhbmdlKHdwU3RhcnQsd3BFbmQpOw0KLQl9DQotDQotCXJldHVybiBDUFZUX1dvcmRSYW5nZSgpOw0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDUFdMX0VkaXQ6OkdldFRleHRBcHBlYXJhbmNlU3RyZWFtKGNvbnN0IENQREZfUG9pbnQgJiBwdE9mZnNldCkgY29uc3QNCi17DQotCUNGWF9CeXRlVGV4dEJ1ZiBzUmV0Ow0KLQlDRlhfQnl0ZVN0cmluZyBzRWRpdCA9IENQV0xfVXRpbHM6OkdldEVkaXRBcHBTdHJlYW0obV9wRWRpdCxwdE9mZnNldCk7DQotCQ0KLQlpZiAoc0VkaXQuR2V0TGVuZ3RoKCkgPiAwKQ0KLQl7DQotCQlzUmV0IDw8ICJCVFxuIiA8PCBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShHZXRUZXh0Q29sb3IoKSkgPDwgc0VkaXQgPDwgIkVUXG4iOw0KLQl9DQotDQotCXJldHVybiBzUmV0LkdldEJ5dGVTdHJpbmcoKTsNCi19DQotDQotQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9FZGl0OjpHZXRDYXJldEFwcGVhcmFuY2VTdHJlYW0oY29uc3QgQ1BERl9Qb2ludCAmIHB0T2Zmc2V0KSBjb25zdA0KLXsNCi0JaWYgKG1fcEVkaXRDYXJldCkNCi0JCXJldHVybiBtX3BFZGl0Q2FyZXQtPkdldENhcmV0QXBwZWFyYW5jZVN0cmVhbShwdE9mZnNldCk7DQotDQotCXJldHVybiBDRlhfQnl0ZVN0cmluZygpOw0KLX0NCi0NCi1DUERGX1BvaW50IENQV0xfRWRpdDo6R2V0V29yZFJpZ2h0Qm90dG9tUG9pbnQoY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHdwV29yZCkNCi17DQotCUNQREZfUG9pbnQgcHQoMC4wZiwgMC4wZik7DQotDQotCWlmIChJRlhfRWRpdF9JdGVyYXRvciAqIHBJdGVyYXRvciA9IG1fcEVkaXQtPkdldEl0ZXJhdG9yKCkpDQotCXsNCi0JCUNQVlRfV29yZFBsYWNlIHdwT2xkID0gcEl0ZXJhdG9yLT5HZXRBdCgpOw0KLQkJcEl0ZXJhdG9yLT5TZXRBdCh3cFdvcmQpOw0KLQkJQ1BWVF9Xb3JkIHdvcmQ7DQotCQlpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmQpKQ0KLQkJew0KLQkJCXB0ID0gQ1BERl9Qb2ludCh3b3JkLnB0V29yZC54ICsgd29yZC5mV2lkdGgsIHdvcmQucHRXb3JkLnkgKyB3b3JkLmZEZXNjZW50KTsNCi0JCX0NCi0NCi0JCXBJdGVyYXRvci0+U2V0QXQod3BPbGQpOw0KLQl9DQotDQotCXJldHVybiBwdDsNCi19DQotDQotRlhfQk9PTAlDUFdMX0VkaXQ6OklzVGV4dEZ1bGwoKSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fcEVkaXQtPklzVGV4dEZ1bGwoKTsNCi19DQotDQotRlhfRkxPQVQgQ1BXTF9FZGl0OjpHZXRDaGFyQXJyYXlBdXRvRm9udFNpemUoQ1BERl9Gb250KiBwRm9udCwgY29uc3QgQ1BERl9SZWN0JiByY1BsYXRlLCBGWF9JTlQzMiBuQ2hhckFycmF5KQ0KLXsNCi0JaWYgKHBGb250ICYmICFwRm9udC0+SXNTdGFuZGFyZEZvbnQoKSkNCi0Jew0KLQkJRlhfUkVDVCByY0JCb3g7DQotCQlwRm9udC0+R2V0Rm9udEJCb3gocmNCQm94KTsNCi0NCi0JCUNQREZfUmVjdCByY0NlbGwgPSByY1BsYXRlOw0KLQkJRlhfRkxPQVQgeGRpdiA9IHJjQ2VsbC5XaWR0aCgpIC8gbkNoYXJBcnJheSAqIDEwMDAuMGYgLyByY0JCb3guV2lkdGgoKTsNCi0JCUZYX0ZMT0FUIHlkaXYgPSAtIHJjQ2VsbC5IZWlnaHQoKSAqIDEwMDAuMGYgLyByY0JCb3guSGVpZ2h0KCk7DQotDQotCQlyZXR1cm4geGRpdiA8IHlkaXYgPyB4ZGl2IDogeWRpdjsNCi0JfQ0KLQ0KLQlyZXR1cm4gMC4wZjsNCi19DQotDQotdm9pZCBDUFdMX0VkaXQ6OlNldENoYXJBcnJheShGWF9JTlQzMiBuQ2hhckFycmF5KQ0KLXsNCi0JaWYgKEhhc0ZsYWcoUEVTX0NIQVJBUlJBWSkgJiYgbkNoYXJBcnJheSA+IDApDQotCXsNCi0JCW1fcEVkaXQtPlNldENoYXJBcnJheShuQ2hhckFycmF5KTsJDQotCQltX3BFZGl0LT5TZXRUZXh0T3ZlcmZsb3coVFJVRSk7DQotDQotCQlpZiAoSGFzRmxhZyhQV1NfQVVUT0ZPTlRTSVpFKSkNCi0JCXsNCi0JCQlpZiAoSUZYX0VkaXRfRm9udE1hcCogcEZvbnRNYXAgPSB0aGlzLT5HZXRGb250TWFwKCkpDQotCQkJew0KLQkJCQlGWF9GTE9BVCBmRm9udFNpemUgPSBHZXRDaGFyQXJyYXlBdXRvRm9udFNpemUocEZvbnRNYXAtPkdldFBERkZvbnQoMCksIEdldENsaWVudFJlY3QoKSwgbkNoYXJBcnJheSk7DQotCQkJCWlmIChmRm9udFNpemUgPiAwLjBmKQ0KLQkJCQl7DQotCQkJCQltX3BFZGl0LT5TZXRBdXRvRm9udFNpemUoRkFMU0UpOw0KLQkJCQkJbV9wRWRpdC0+U2V0Rm9udFNpemUoZkZvbnRTaXplKTsNCi0JCQkJfQ0KLQkJCX0NCi0JCX0NCi0JfQ0KLX0NCi0NCi12b2lkIENQV0xfRWRpdDo6U2V0TGltaXRDaGFyKEZYX0lOVDMyIG5MaW1pdENoYXIpDQotew0KLQltX3BFZGl0LT5TZXRMaW1pdENoYXIobkxpbWl0Q2hhcik7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9FZGl0OjpSZXBsYWNlU2VsKEZYX0xQQ1dTVFIgY3NUZXh0KQ0KLXsNCi0JbV9wRWRpdC0+Q2xlYXIoKTsNCi0JbV9wRWRpdC0+SW5zZXJ0VGV4dChjc1RleHQpOw0KLX0NCi0NCi1DUERGX1JlY3QgQ1BXTF9FZGl0OjpHZXRGb2N1c1JlY3QoKSBjb25zdA0KLXsNCi0JcmV0dXJuIENQREZfUmVjdCgpOw0KLX0NCi0NCi12b2lkIENQV0xfRWRpdDo6U2hvd1ZTY3JvbGxCYXIoRlhfQk9PTCBiU2hvdykNCi17DQotCWlmIChDUFdMX1Njcm9sbEJhciAqIHBTY3JvbGwgPSBHZXRWU2Nyb2xsQmFyKCkpDQotCXsNCi0JCWlmIChiU2hvdykNCi0JCXsNCi0JCQlpZiAoIXBTY3JvbGwtPklzVmlzaWJsZSgpKQ0KLQkJCXsNCi0JCQkJcFNjcm9sbC0+U2V0VmlzaWJsZShUUlVFKTsNCi0JCQkJQ1BERl9SZWN0IHJjV2luZG93ID0gR2V0V2luZG93UmVjdCgpOw0KLQkJCQltX3JjT2xkV2luZG93ID0gcmNXaW5kb3c7DQotCQkJCXJjV2luZG93LnJpZ2h0ICs9IFBXTF9TQ1JPTExCQVJfV0lEVEg7CQkJDQotCQkJCU1vdmUocmNXaW5kb3csIFRSVUUsIFRSVUUpOw0KLQkJCX0NCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlpZiAocFNjcm9sbC0+SXNWaXNpYmxlKCkpDQotCQkJew0KLQkJCQlwU2Nyb2xsLT5TZXRWaXNpYmxlKEZBTFNFKTsNCi0JCQkJTW92ZShtX3JjT2xkV2luZG93LCBUUlVFLCBUUlVFKTsNCi0JCQl9CQ0KLQkJfQ0KLQl9DQotfQ0KLQ0KLUZYX0JPT0wJQ1BXTF9FZGl0OjpJc1ZTY3JvbGxCYXJWaXNpYmxlKCkgY29uc3QNCi17DQotCWlmIChDUFdMX1Njcm9sbEJhciAqIHBTY3JvbGwgPSBHZXRWU2Nyb2xsQmFyKCkpDQotCXsNCi0JCXJldHVybiBwU2Nyb2xsLT5Jc1Zpc2libGUoKTsNCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9FZGl0OjpFbmFibGVTcGVsbENoZWNrKEZYX0JPT0wgYkVuYWJsZWQpDQotew0KLQlpZiAoYkVuYWJsZWQpDQotCQlBZGRGbGFnKFBFU19TUEVMTENIRUNLKTsNCi0JZWxzZQ0KLQkJUmVtb3ZlRmxhZyhQRVNfU1BFTExDSEVDSyk7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9FZGl0OjpPbktleURvd24oRlhfV09SRCBuQ2hhciwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlpZiAobV9iTW91c2VEb3duKSByZXR1cm4gVFJVRTsNCi0NCi0JaWYgKG5DaGFyID09IEZXTF9WS0VZX0RlbGV0ZSkNCi0Jew0KLQkJaWYgKG1fcEZpbGxlck5vdGlmeSkNCi0JCXsNCi0JCQlGWF9CT09MIGJSQyA9IFRSVUU7DQotCQkJRlhfQk9PTCBiRXhpdCA9IEZBTFNFOw0KLQkJCUNGWF9XaWRlU3RyaW5nIHN0ckNoYW5nZTsNCi0JCQlDRlhfV2lkZVN0cmluZyBzdHJDaGFuZ2VFeDsNCi0NCi0JCQlpbnQgblNlbFN0YXJ0ID0gMDsNCi0JCQlpbnQgblNlbEVuZCA9IDA7DQotCQkJR2V0U2VsKG5TZWxTdGFydCwgblNlbEVuZCk7DQotDQotCQkJaWYgKG5TZWxTdGFydCA9PSBuU2VsRW5kKQ0KLQkJCQluU2VsRW5kID0gblNlbFN0YXJ0ICsgMTsNCi0JCQltX3BGaWxsZXJOb3RpZnktPk9uQmVmb3JlS2V5U3Ryb2tlKFRSVUUsIEdldEF0dGFjaGVkRGF0YSgpLCBGV0xfVktFWV9EZWxldGUsIHN0ckNoYW5nZSwgc3RyQ2hhbmdlRXgsIG5TZWxTdGFydCwgblNlbEVuZCwgVFJVRSwgYlJDLCBiRXhpdCwgbkZsYWcpOw0KLQkJCWlmICghYlJDKSByZXR1cm4gRkFMU0U7CQkJCQ0KLQkJCWlmIChiRXhpdCkgcmV0dXJuIEZBTFNFOw0KLQkJfQ0KLQl9DQotDQotCUZYX0JPT0wgYlJldCA9IENQV0xfRWRpdEN0cmw6Ok9uS2V5RG93bihuQ2hhciwgIG5GbGFnKTsNCi0NCi0JaWYgKG5DaGFyID09IEZXTF9WS0VZX0RlbGV0ZSkNCi0Jew0KLQkJaWYgKG1fcEZpbGxlck5vdGlmeSkNCi0JCXsNCi0JCQlGWF9CT09MIGJFeGl0ID0gRkFMU0U7DQotCQkJbV9wRmlsbGVyTm90aWZ5LT5PbkFmdGVyS2V5U3Ryb2tlKFRSVUUsIEdldEF0dGFjaGVkRGF0YSgpLCBiRXhpdCxuRmxhZyk7DQotCQkJaWYgKGJFeGl0KSByZXR1cm4gRkFMU0U7DQotCQl9DQotCX0NCi0NCi0JLy9JbiBjYXNlIG9mIGltcGxlbWVudGF0aW9uIHN3YWxsb3cgdGhlIE9uS2V5RG93biBldmVudC4NCi0JaWYoSXNQcm9jZWVkdG9PbkNoYXIobkNoYXIsIG5GbGFnKSkNCi0JCQlyZXR1cm4gVFJVRTsNCi0NCi0JcmV0dXJuIGJSZXQ7DQotfQ0KLQ0KLS8qKg0KLSpJbiBjYXNlIG9mIGltcGxlbWVudGF0aW9uIHN3YWxsb3cgdGhlIE9uS2V5RG93biBldmVudC4gDQotKklmIHRoZSBldmVudCBpcyBzd2FsbG93ZWQsIGltcGxlbWVudGF0aW9uIG1heSBkbyBvdGhlciB1bmV4cGVjdGVkIHRoaW5ncywgd2hpY2ggaXMgbm90IHRoZSBjb250cm9sIG1lYW5zIHRvIGRvLg0KLSovDQotRlhfQk9PTCBDUFdMX0VkaXQ6OklzUHJvY2VlZHRvT25DaGFyKEZYX1dPUkQgbktleUNvZGUsIEZYX0RXT1JEIG5GbGFnKQ0KLXsNCi0NCi0JRlhfQk9PTCBiQ3RybCA9IElzQ1RSTHByZXNzZWQobkZsYWcpOw0KLQlGWF9CT09MIGJBbHQgPSBJc0FMVHByZXNzZWQobkZsYWcpOw0KLQlpZihiQ3RybCAmJiAhYkFsdCkNCi0Jew0KLQkvL2hvdCBrZXlzIGZvciBlZGl0IGNvbnRyb2wuCQ0KLQkJc3dpdGNoKG5LZXlDb2RlKQ0KLQkJew0KLQkJY2FzZSAnQyc6DQotCQljYXNlICdWJzoNCi0JCWNhc2UgJ1gnOg0KLQkJY2FzZSAnQSc6DQotCQljYXNlICdaJzoNCi0JCQlyZXR1cm4gVFJVRTsNCi0JCWRlZmF1bHQ6DQotCQkJYnJlYWs7DQotCQl9DQotCX0NCi0JLy9jb250cm9sIGNoYXJhY3RlcnMuDQotCXN3aXRjaChuS2V5Q29kZSkNCi0Jew0KLQljYXNlIEZXTF9WS0VZX0VzY2FwZToNCi0JY2FzZSBGV0xfVktFWV9CYWNrOg0KLQljYXNlIEZXTF9WS0VZX1JldHVybjoNCi0JY2FzZSBGV0xfVktFWV9TcGFjZToNCi0JCXJldHVybiBUUlVFOw0KLQlkZWZhdWx0Og0KLQkJYnJlYWs7DQotCX0NCi0JcmV0dXJuIEZBTFNFOw0KLQ0KLX0NCi0NCi1GWF9CT09MIENQV0xfRWRpdDo6T25DaGFyKEZYX1dPUkQgbkNoYXIsIEZYX0RXT1JEIG5GbGFnKQ0KLXsNCi0JaWYgKG1fYk1vdXNlRG93bikgcmV0dXJuIFRSVUU7DQotDQotCUZYX0JPT0wgYlJDID0gVFJVRTsNCi0JRlhfQk9PTCBiRXhpdCA9IEZBTFNFOw0KLQ0KLQlGWF9CT09MIGJDdHJsID0gSXNDVFJMcHJlc3NlZChuRmxhZyk7DQotCWlmICghYkN0cmwpDQotCXsNCi0JCWlmIChtX3BGaWxsZXJOb3RpZnkpDQotCQl7DQotCQkJQ0ZYX1dpZGVTdHJpbmcgc3dDaGFuZ2U7DQotCQkJRlhfSU5UMzIgbktleUNvZGU7DQotDQotCQkJaW50IG5TZWxTdGFydCA9IDA7DQotCQkJaW50IG5TZWxFbmQgPSAwOw0KLQkJCUdldFNlbChuU2VsU3RhcnQsIG5TZWxFbmQpOw0KLQ0KLQkJCXN3aXRjaCAobkNoYXIpDQotCQkJew0KLQkJCWNhc2UgRldMX1ZLRVlfQmFjazoNCi0JCQkJbktleUNvZGUgPSBuQ2hhcjsNCi0JCQkJaWYgKG5TZWxTdGFydCA9PSBuU2VsRW5kKQ0KLQkJCQkJblNlbFN0YXJ0ID0gblNlbEVuZCAtIDE7DQotCQkJCWJyZWFrOw0KLQkJCWNhc2UgRldMX1ZLRVlfUmV0dXJuOg0KLQkJCQluS2V5Q29kZSA9IG5DaGFyOw0KLQkJCQlicmVhazsNCi0JCQlkZWZhdWx0Og0KLQkJCQluS2V5Q29kZSA9IDA7DQotCQkJCXN3Q2hhbmdlICs9IG5DaGFyOw0KLQkJCQlicmVhazsNCi0JCQl9DQotCQkNCi0JCQlDRlhfV2lkZVN0cmluZyBzdHJDaGFuZ2VFeDsNCi0JCQltX3BGaWxsZXJOb3RpZnktPk9uQmVmb3JlS2V5U3Ryb2tlKFRSVUUsIEdldEF0dGFjaGVkRGF0YSgpLCBuS2V5Q29kZSwgc3dDaGFuZ2UsIHN0ckNoYW5nZUV4LCBuU2VsU3RhcnQsIG5TZWxFbmQsIFRSVUUsIGJSQywgYkV4aXQsIG5GbGFnKTsNCi0JCX0NCi0JfQ0KLQ0KLQlpZiAoIWJSQykgcmV0dXJuIFRSVUU7DQotCWlmIChiRXhpdCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlpZiAoSUZYX0VkaXRfRm9udE1hcCAqIHBGb250TWFwID0gR2V0Rm9udE1hcCgpKQ0KLQl7DQotCQlGWF9JTlQzMiBuT2xkQ2hhclNldCA9IEdldENoYXJTZXQoKTsNCi0JCUZYX0lOVDMyIG5OZXdDaGFyU2V0ID0gcEZvbnRNYXAtPkNoYXJTZXRGcm9tVW5pY29kZShuQ2hhciwgREVGQVVMVF9DSEFSU0VUKTsNCi0JCWlmKG5PbGRDaGFyU2V0ICE9IG5OZXdDaGFyU2V0KQ0KLQkJew0KLQkJCVNldENoYXJTZXQobk5ld0NoYXJTZXQpOw0KLQkJfQ0KLQl9DQotCUZYX0JPT0wgYlJldCA9IENQV0xfRWRpdEN0cmw6Ok9uQ2hhcihuQ2hhcixuRmxhZyk7DQotDQotCWlmICghYkN0cmwpDQotCXsNCi0JCWlmIChtX3BGaWxsZXJOb3RpZnkpDQotCQl7DQotCQkJbV9wRmlsbGVyTm90aWZ5LT5PbkFmdGVyS2V5U3Ryb2tlKFRSVUUsIEdldEF0dGFjaGVkRGF0YSgpLCBiRXhpdCxuRmxhZyk7DQotCQkJaWYgKGJFeGl0KSByZXR1cm4gRkFMU0U7DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIGJSZXQ7DQotfQ0KLQ0KLUZYX0JPT0wJQ1BXTF9FZGl0OjpPbk1vdXNlV2hlZWwoc2hvcnQgekRlbHRhLCBjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKQ0KLXsNCi0JaWYgKEhhc0ZsYWcoUEVTX01VTFRJTElORSkpDQotCXsNCi0JCUNQREZfUG9pbnQgcHRTY3JvbGwgPSBHZXRTY3JvbGxQb3MoKTsNCi0NCi0JCWlmICh6RGVsdGEgPiAwKQ0KLQkJew0KLQkJCXB0U2Nyb2xsLnkgKz0gdGhpcy0+R2V0Rm9udFNpemUoKTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlwdFNjcm9sbC55IC09IHRoaXMtPkdldEZvbnRTaXplKCk7DQotCQl9DQotCQl0aGlzLT5TZXRTY3JvbGxQb3MocHRTY3JvbGwpOw0KLQ0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi12b2lkIENQV0xfRWRpdDo6T25JbnNlcnRSZXR1cm4oY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgb2xkcGxhY2UpDQotew0KLQlpZiAoSGFzRmxhZyhQRVNfU1BFTExDSEVDSykpDQotCXsNCi0JCW1fcEVkaXQtPlJlZnJlc2hXb3JkUmFuZ2UoQ29tYmluZVdvcmRSYW5nZShHZXRMYXRpbldvcmRzUmFuZ2Uob2xkcGxhY2UpLEdldExhdGluV29yZHNSYW5nZShwbGFjZSkpKTsNCi0JfQ0KLQ0KLQlpZiAobV9wRWRpdE5vdGlmeSkNCi0Jew0KLQkJbV9wRWRpdE5vdGlmeS0+T25JbnNlcnRSZXR1cm4ocGxhY2UsIG9sZHBsYWNlKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENQV0xfRWRpdDo6T25CYWNrU3BhY2UoY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgb2xkcGxhY2UpDQotew0KLQlpZiAoSGFzRmxhZyhQRVNfU1BFTExDSEVDSykpDQotCXsNCi0JCW1fcEVkaXQtPlJlZnJlc2hXb3JkUmFuZ2UoQ29tYmluZVdvcmRSYW5nZShHZXRMYXRpbldvcmRzUmFuZ2Uob2xkcGxhY2UpLEdldExhdGluV29yZHNSYW5nZShwbGFjZSkpKTsNCi0JfQ0KLQ0KLQlpZiAobV9wRWRpdE5vdGlmeSkNCi0Jew0KLQkJbV9wRWRpdE5vdGlmeS0+T25CYWNrU3BhY2UocGxhY2UsIG9sZHBsYWNlKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENQV0xfRWRpdDo6T25EZWxldGUoY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgb2xkcGxhY2UpDQotew0KLQlpZiAoSGFzRmxhZyhQRVNfU1BFTExDSEVDSykpDQotCXsNCi0JCW1fcEVkaXQtPlJlZnJlc2hXb3JkUmFuZ2UoQ29tYmluZVdvcmRSYW5nZShHZXRMYXRpbldvcmRzUmFuZ2Uob2xkcGxhY2UpLEdldExhdGluV29yZHNSYW5nZShwbGFjZSkpKTsNCi0JfQ0KLQ0KLQlpZiAobV9wRWRpdE5vdGlmeSkNCi0Jew0KLQkJbV9wRWRpdE5vdGlmeS0+T25EZWxldGUocGxhY2UsIG9sZHBsYWNlKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENQV0xfRWRpdDo6T25DbGVhcihjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlJiBvbGRwbGFjZSkNCi17DQotCWlmIChIYXNGbGFnKFBFU19TUEVMTENIRUNLKSkNCi0Jew0KLQkJbV9wRWRpdC0+UmVmcmVzaFdvcmRSYW5nZShDb21iaW5lV29yZFJhbmdlKEdldExhdGluV29yZHNSYW5nZShvbGRwbGFjZSksR2V0TGF0aW5Xb3Jkc1JhbmdlKHBsYWNlKSkpOw0KLQl9DQotDQotCWlmIChtX3BFZGl0Tm90aWZ5KQ0KLQl7DQotCQltX3BFZGl0Tm90aWZ5LT5PbkNsZWFyKHBsYWNlLCBvbGRwbGFjZSk7DQotCX0NCi19DQotDQotdm9pZCBDUFdMX0VkaXQ6Ok9uSW5zZXJ0V29yZChjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlJiBvbGRwbGFjZSkNCi17DQotCWlmIChIYXNGbGFnKFBFU19TUEVMTENIRUNLKSkNCi0Jew0KLQkJbV9wRWRpdC0+UmVmcmVzaFdvcmRSYW5nZShDb21iaW5lV29yZFJhbmdlKEdldExhdGluV29yZHNSYW5nZShvbGRwbGFjZSksR2V0TGF0aW5Xb3Jkc1JhbmdlKHBsYWNlKSkpOw0KLQl9DQotDQotCWlmIChtX3BFZGl0Tm90aWZ5KQ0KLQl7DQotCQltX3BFZGl0Tm90aWZ5LT5Pbkluc2VydFdvcmQocGxhY2UsIG9sZHBsYWNlKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENQV0xfRWRpdDo6T25TZXRUZXh0KGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIG9sZHBsYWNlKQ0KLXsNCi19DQotDQotdm9pZCBDUFdMX0VkaXQ6Ok9uSW5zZXJ0VGV4dChjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlJiBvbGRwbGFjZSkNCi17DQotCWlmIChIYXNGbGFnKFBFU19TUEVMTENIRUNLKSkNCi0Jew0KLQkJbV9wRWRpdC0+UmVmcmVzaFdvcmRSYW5nZShDb21iaW5lV29yZFJhbmdlKEdldExhdGluV29yZHNSYW5nZShvbGRwbGFjZSksR2V0TGF0aW5Xb3Jkc1JhbmdlKHBsYWNlKSkpOw0KLQl9DQotDQotCWlmIChtX3BFZGl0Tm90aWZ5KQ0KLQl7DQotCQltX3BFZGl0Tm90aWZ5LT5Pbkluc2VydFRleHQocGxhY2UsIG9sZHBsYWNlKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENQV0xfRWRpdDo6T25BZGRVbmRvKElGWF9FZGl0X1VuZG9JdGVtKiBwVW5kb0l0ZW0pDQotew0KLQlpZiAobV9wRWRpdE5vdGlmeSkNCi0Jew0KLQkJbV9wRWRpdE5vdGlmeS0+T25BZGRVbmRvKHRoaXMpOw0KLQl9DQotfQ0KLQ0KLUNQVlRfV29yZFJhbmdlIENQV0xfRWRpdDo6Q29tYmluZVdvcmRSYW5nZShjb25zdCBDUFZUX1dvcmRSYW5nZSYgd3IxLCBjb25zdCBDUFZUX1dvcmRSYW5nZSYgd3IyKQ0KLXsNCi0JQ1BWVF9Xb3JkUmFuZ2Ugd3JSZXQ7DQotDQotCWlmICh3cjEuQmVnaW5Qb3MuV29yZENtcCh3cjIuQmVnaW5Qb3MpIDwgMCkNCi0Jew0KLQkJd3JSZXQuQmVnaW5Qb3MgPSB3cjEuQmVnaW5Qb3M7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQl3clJldC5CZWdpblBvcyA9IHdyMi5CZWdpblBvczsNCi0JfQ0KLQ0KLQlpZiAod3IxLkVuZFBvcy5Xb3JkQ21wKHdyMi5FbmRQb3MpIDwgMCkNCi0Jew0KLQkJd3JSZXQuRW5kUG9zID0gd3IyLkVuZFBvczsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCXdyUmV0LkVuZFBvcyA9IHdyMS5FbmRQb3M7DQotCX0NCi0NCi0JcmV0dXJuIHdyUmV0Ow0KLX0NCi0NCi1DUFZUX1dvcmRSYW5nZSBDUFdMX0VkaXQ6OkdldExhdGluV29yZHNSYW5nZShjb25zdCBDUERGX1BvaW50JiBwb2ludCkgY29uc3QNCi17DQotCXJldHVybiBHZXRTYW1lV29yZHNSYW5nZShtX3BFZGl0LT5TZWFyY2hXb3JkUGxhY2UocG9pbnQpLCBUUlVFLCBGQUxTRSk7DQotfQ0KLQ0KLUNQVlRfV29yZFJhbmdlIENQV0xfRWRpdDo6R2V0TGF0aW5Xb3Jkc1JhbmdlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0DQotew0KLQlyZXR1cm4gR2V0U2FtZVdvcmRzUmFuZ2UocGxhY2UsIFRSVUUsIEZBTFNFKTsNCi19DQotDQotQ1BWVF9Xb3JkUmFuZ2UgQ1BXTF9FZGl0OjpHZXRBcmFiaWNXb3Jkc1JhbmdlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0DQotew0KLQlyZXR1cm4gR2V0U2FtZVdvcmRzUmFuZ2UocGxhY2UsIEZBTFNFLCBUUlVFKTsNCi19DQotDQotI2RlZmluZSBQV0xfSVNBUkFCSUNXT1JEKHdvcmQpICgod29yZCA+PSAweDA2MDAgJiYgd29yZCA8PSAweDA2RkYpIHx8ICh3b3JkID49IDB4RkI1MCAmJiB3b3JkIDw9IDB4RkVGQykpDQotDQotQ1BWVF9Xb3JkUmFuZ2UgQ1BXTF9FZGl0OjpHZXRTYW1lV29yZHNSYW5nZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBGWF9CT09MIGJMYXRpbiwgRlhfQk9PTCBiQXJhYmljKSBjb25zdA0KLXsNCi0JQ1BWVF9Xb3JkUmFuZ2UgcmFuZ2U7DQotDQotCWlmIChJRlhfRWRpdF9JdGVyYXRvciogcEl0ZXJhdG9yID0gbV9wRWRpdC0+R2V0SXRlcmF0b3IoKSkNCi0Jew0KLQkJQ1BWVF9Xb3JkIHdvcmRpbmZvOwkNCi0JCUNQVlRfV29yZFBsYWNlIHdwU3RhcnQocGxhY2UpLHdwRW5kKHBsYWNlKTsJCQkNCi0JCXBJdGVyYXRvci0+U2V0QXQocGxhY2UpOwkJCQ0KLQkJDQotCQlpZiAoYkxhdGluKQ0KLQkJew0KLQkJCXdoaWxlIChwSXRlcmF0b3ItPk5leHRXb3JkKCkpDQotCQkJew0KLQkJCQlpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmRpbmZvKSAmJiBGWF9FRElUX0lTTEFUSU5XT1JEKHdvcmRpbmZvLldvcmQpKQ0KLQkJCQl7DQotCQkJCQl3cEVuZCA9IHBJdGVyYXRvci0+R2V0QXQoKTsNCi0JCQkJCWNvbnRpbnVlOw0KLQkJCQl9DQotCQkJCWVsc2UgDQotCQkJCQlicmVhazsNCi0JCQl9Ow0KLQkJfQ0KLQkJZWxzZSBpZiAoYkFyYWJpYykNCi0JCXsNCi0JCQl3aGlsZSAocEl0ZXJhdG9yLT5OZXh0V29yZCgpKQ0KLQkJCXsNCi0JCQkJaWYgKHBJdGVyYXRvci0+R2V0V29yZCh3b3JkaW5mbykgJiYgUFdMX0lTQVJBQklDV09SRCh3b3JkaW5mby5Xb3JkKSkNCi0JCQkJew0KLQkJCQkJd3BFbmQgPSBwSXRlcmF0b3ItPkdldEF0KCk7DQotCQkJCQljb250aW51ZTsNCi0JCQkJfQ0KLQkJCQllbHNlIA0KLQkJCQkJYnJlYWs7DQotCQkJfTsNCi0JCX0NCi0NCi0JCXBJdGVyYXRvci0+U2V0QXQocGxhY2UpOw0KLQ0KLQkJaWYgKGJMYXRpbikNCi0JCXsNCi0JCQlkbw0KLQkJCXsNCi0JCQkJaWYgKHBJdGVyYXRvci0+R2V0V29yZCh3b3JkaW5mbykgJiYgRlhfRURJVF9JU0xBVElOV09SRCh3b3JkaW5mby5Xb3JkKSkNCi0JCQkJewkJCQkJDQotCQkJCQljb250aW51ZTsNCi0JCQkJfQ0KLQkJCQllbHNlDQotCQkJCXsNCi0JCQkJCXdwU3RhcnQgPSBwSXRlcmF0b3ItPkdldEF0KCk7DQotCQkJCQlicmVhazsNCi0JCQkJfQ0KLQkJCX0NCi0JCQl3aGlsZSAocEl0ZXJhdG9yLT5QcmV2V29yZCgpKTsNCi0JCX0NCi0JCWVsc2UgaWYgKGJBcmFiaWMpDQotCQl7DQotCQkJZG8NCi0JCQl7DQotCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZGluZm8pICYmIFBXTF9JU0FSQUJJQ1dPUkQod29yZGluZm8uV29yZCkpDQotCQkJCXsJCQkJCQ0KLQkJCQkJY29udGludWU7DQotCQkJCX0NCi0JCQkJZWxzZQ0KLQkJCQl7DQotCQkJCQl3cFN0YXJ0ID0gcEl0ZXJhdG9yLT5HZXRBdCgpOw0KLQkJCQkJYnJlYWs7DQotCQkJCX0NCi0JCQl9DQotCQkJd2hpbGUgKHBJdGVyYXRvci0+UHJldldvcmQoKSk7DQotCQl9DQotDQotCQlyYW5nZS5TZXQod3BTdGFydCx3cEVuZCk7DQotCX0JDQotDQotCXJldHVybiByYW5nZTsNCi19DQotDQotdm9pZCBDUFdMX0VkaXQ6OkFqdXN0QXJhYmljV29yZHMoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UmIHdyKQ0KLXsNCi19DQotDQotdm9pZCBDUFdMX0VkaXQ6OkdlbmVyYXRlUGFnZU9iamVjdHMoQ1BERl9QYWdlT2JqZWN0cyogcFBhZ2VPYmplY3RzLCANCi0JCQkJCQkJCQkJY29uc3QgQ1BERl9Qb2ludCYgcHRPZmZzZXQsIENGWF9BcnJheVRlbXBsYXRlPENQREZfVGV4dE9iamVjdCo+JiBPYmpBcnJheSkNCi17DQotCUlGWF9FZGl0OjpHZW5lcmF0ZVBhZ2VPYmplY3RzKHBQYWdlT2JqZWN0cywgbV9wRWRpdCwgcHRPZmZzZXQsIE5VTEwsIENQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKEdldFRleHRDb2xvcigpLEdldFRyYW5zcGFyZW5jeSgpKSwgT2JqQXJyYXkpOw0KLX0NCi0NCi12b2lkIENQV0xfRWRpdDo6R2VuZXJhdGVQYWdlT2JqZWN0cyhDUERGX1BhZ2VPYmplY3RzKiBwUGFnZU9iamVjdHMsIA0KLQkJCQkJCQkJCWNvbnN0IENQREZfUG9pbnQmIHB0T2Zmc2V0KQ0KLXsNCi0JQ0ZYX0FycmF5VGVtcGxhdGU8Q1BERl9UZXh0T2JqZWN0Kj4gT2JqQXJyYXk7DQotCUlGWF9FZGl0OjpHZW5lcmF0ZVBhZ2VPYmplY3RzKHBQYWdlT2JqZWN0cywgbV9wRWRpdCwgcHRPZmZzZXQsIE5VTEwsIENQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKEdldFRleHRDb2xvcigpLEdldFRyYW5zcGFyZW5jeSgpKSwgT2JqQXJyYXkpOw0KLX0NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUERGV2luZG93LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1duZC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9FZGl0Q3RybC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9FZGl0LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1Njcm9sbEJhci5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9VdGlscy5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9DYXJldC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9Gb250TWFwLmgiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9FZGl0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDUFdMX0VkaXQ6OkNQV0xfRWRpdCgpIDogbV9wRmlsbGVyTm90aWZ5KE5VTEwpLCAKKwltX3BTcGVsbENoZWNrKE5VTEwpLAorCW1fYkZvY3VzKEZBTFNFKQoreworCW1fcEZvcm1GaWxsZXIgPSBOVUxMOworfQorCitDUFdMX0VkaXQ6On5DUFdMX0VkaXQoKQoreworCUFTU0VSVChtX2JGb2N1cyA9PSBGQUxTRSk7Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQV0xfRWRpdDo6R2V0Q2xhc3NOYW1lKCkgY29uc3QKK3sKKwlyZXR1cm4gUFdMX0NMQVNTTkFNRV9FRElUOworfQorCit2b2lkIENQV0xfRWRpdDo6T25EZXN0cm95KCkKK3sKK30KKwordm9pZCBDUFdMX0VkaXQ6OlNldFRleHQoRlhfTFBDV1NUUiBjc1RleHQpCit7CisJQ0ZYX1dpZGVTdHJpbmcgc3dUZXh0ID0gY3NUZXh0OworCisJaWYgKEhhc0ZsYWcoUEVTX1JJQ0gpKQorCXsJCQorCQlDRlhfQnl0ZVN0cmluZyBzVmFsdWUgPSBDRlhfQnl0ZVN0cmluZzo6RnJvbVVuaWNvZGUoc3dUZXh0KTsKKwkJCisJCWlmIChDWE1MX0VsZW1lbnQgKiBwWE1MID0gQ1hNTF9FbGVtZW50OjpQYXJzZSgoRlhfTFBDU1RSKXNWYWx1ZSxzVmFsdWUuR2V0TGVuZ3RoKCkpKQorCQl7CisJCQlGWF9JTlQzMiBuQ291bnQgPSBwWE1MLT5Db3VudENoaWxkcmVuKCk7CisJCQlGWF9CT09MIGJGaXJzdCA9IFRSVUU7CisKKwkJCXN3VGV4dC5FbXB0eSgpOworCisJCQlmb3IgKEZYX0lOVDMyIGk9MDsgaTxuQ291bnQ7IGkrKykKKwkJCXsKKwkJCQlpZiAoQ1hNTF9FbGVtZW50ICogcFN1YkVsZW1lbnQgPSBwWE1MLT5HZXRFbGVtZW50KGkpKQorCQkJCXsKKwkJCQkJQ0ZYX0J5dGVTdHJpbmcgdGFnPXBTdWJFbGVtZW50LT5HZXRUYWdOYW1lKCk7CisJCSAgIAkJCWlmICh0YWcuRXF1YWxOb0Nhc2UoInAiKSkKKwkJCQkJeworCQkJCQkJaW50IG5DaGlsZCA9IHBTdWJFbGVtZW50LT5Db3VudENoaWxkcmVuKCk7CisJCQkJCQlDRlhfV2lkZVN0cmluZyBzd1NlY3Rpb247CisJCQkJCQlmb3IoRlhfSU5UMzIgaj0wOyBqPG5DaGlsZDsgaisrKQorCQkJCQkJeworCQkJCQkJCXN3U2VjdGlvbiArPSBwU3ViRWxlbWVudC0+R2V0Q29udGVudChqKTsKKwkJCQkJCX0KKwkJCQkJCQorCQkJCQkJaWYgKGJGaXJzdCliRmlyc3QgPSBGQUxTRTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlzd1RleHQgKz0gRldMX1ZLRVlfUmV0dXJuOworCQkJCQkJc3dUZXh0ICs9IHN3U2VjdGlvbjsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJZGVsZXRlIHBYTUw7CisJCX0KKwl9CQorCisJbV9wRWRpdC0+U2V0VGV4dChzd1RleHQpOworfQorCit2b2lkIENQV0xfRWRpdDo6UmVQb3NDaGlsZFduZCgpCit7CisJaWYgKENQV0xfU2Nyb2xsQmFyICogcFZTQiA9IHRoaXMtPkdldFZTY3JvbGxCYXIoKSkKKwl7CisJCS8vaWYgKHBWU0ItPklzVmlzaWJsZSgpKQorCQl7CisJCQlDUERGX1JlY3QgcmNXaW5kb3cgPSBtX3JjT2xkV2luZG93OwkJCisJCQlDUERGX1JlY3QgcmNWU2Nyb2xsID0gQ1BERl9SZWN0KHJjV2luZG93LnJpZ2h0LAorCQkJCQkJCQlyY1dpbmRvdy5ib3R0b20sCisJCQkJCQkJCXJjV2luZG93LnJpZ2h0ICsgUFdMX1NDUk9MTEJBUl9XSURUSCwKKwkJCQkJCQkJcmNXaW5kb3cudG9wKTsKKwkJCXBWU0ItPk1vdmUocmNWU2Nyb2xsLCBUUlVFLCBGQUxTRSk7CisJCX0KKwl9CisKKwlpZiAobV9wRWRpdENhcmV0ICYmICFIYXNGbGFnKFBFU19URVhUT1ZFUkZMT1cpKQorCQltX3BFZGl0Q2FyZXQtPlNldENsaXBSZWN0KENQV0xfVXRpbHM6OkluZmxhdGVSZWN0KEdldENsaWVudFJlY3QoKSwxLjBmKSk7IC8vKzEgZm9yIGNhcmV0IGJlc2lkZSBib3JkZXIKKworCUNQV0xfRWRpdEN0cmw6OlJlUG9zQ2hpbGRXbmQoKTsKK30KKworQ1BERl9SZWN0IENQV0xfRWRpdDo6R2V0Q2xpZW50UmVjdCgpIGNvbnN0Cit7CisJQ1BERl9SZWN0IHJjQ2xpZW50ID0gQ1BXTF9VdGlsczo6RGVmbGF0ZVJlY3QoR2V0V2luZG93UmVjdCgpLChGWF9GTE9BVCkoR2V0Qm9yZGVyV2lkdGgoKStHZXRJbm5lckJvcmRlcldpZHRoKCkpKTsKKwkKKwlpZiAoQ1BXTF9TY3JvbGxCYXIgKiBwVlNCID0gdGhpcy0+R2V0VlNjcm9sbEJhcigpKQorCXsKKwkJaWYgKHBWU0ItPklzVmlzaWJsZSgpKQorCQl7CisJCQlyY0NsaWVudC5yaWdodCAtPSBQV0xfU0NST0xMQkFSX1dJRFRIOworCQl9CisJfQorCisJcmV0dXJuIHJjQ2xpZW50OworfQorCit2b2lkIENQV0xfRWRpdDo6U2V0QWxpZ25Gb3JtYXRIKFBXTF9FRElUX0FMSUdORk9STUFUX0ggbkZvcm1hdCwgRlhfQk9PTCBiUGFpbnQvKiA9IFRSVUUqLykKK3sKKwltX3BFZGl0LT5TZXRBbGlnbm1lbnRIKChGWF9JTlQzMiluRm9ybWF0LCBiUGFpbnQpOworfQorCit2b2lkIENQV0xfRWRpdDo6U2V0QWxpZ25Gb3JtYXRWKFBXTF9FRElUX0FMSUdORk9STUFUX1YgbkZvcm1hdCwgRlhfQk9PTCBiUGFpbnQvKiA9IFRSVUUqLykKK3sKKwltX3BFZGl0LT5TZXRBbGlnbm1lbnRWKChGWF9JTlQzMiluRm9ybWF0LCBiUGFpbnQpOworfQorCitGWF9CT09MCUNQV0xfRWRpdDo6Q2FuU2VsZWN0QWxsKCkgY29uc3QKK3sKKwlyZXR1cm4gIEdldFNlbGVjdFdvcmRSYW5nZSgpICE9IG1fcEVkaXQtPkdldFdob2xlV29yZFJhbmdlKCk7Cit9CisKK0ZYX0JPT0wJQ1BXTF9FZGl0OjpDYW5DbGVhcigpIGNvbnN0Cit7CisJcmV0dXJuICFJc1JlYWRPbmx5KCkgJiYgbV9wRWRpdC0+SXNTZWxlY3RlZCgpOworfQorCitGWF9CT09MCUNQV0xfRWRpdDo6Q2FuQ29weSgpIGNvbnN0Cit7CisJcmV0dXJuIAkhSGFzRmxhZyhQRVNfUEFTU1dPUkQpICYmICFIYXNGbGFnKFBFU19OT1JFQUQpICYmIG1fcEVkaXQtPklzU2VsZWN0ZWQoKTsKK30KKworRlhfQk9PTAlDUFdMX0VkaXQ6OkNhbkN1dCgpIGNvbnN0Cit7CisJcmV0dXJuIAlDYW5Db3B5KCkgJiYgIUlzUmVhZE9ubHkoKTsKK30KKworRlhfQk9PTAlDUFdMX0VkaXQ6OkNhblBhc3RlKCkgY29uc3QKK3sKKwlpZiAoSXNSZWFkT25seSgpKSByZXR1cm4gRkFMU0U7CisKKwlDRlhfV2lkZVN0cmluZyBzd0NsaXBib2FyZDsKKwlpZiAoSUZYX1N5c3RlbUhhbmRsZXIqIHBTSCA9IEdldFN5c3RlbUhhbmRsZXIoKSkKKwkJc3dDbGlwYm9hcmQgPSBwU0gtPkdldENsaXBib2FyZFRleHQoR2V0QXR0YWNoZWRIV25kKCkpOworCisJcmV0dXJuICFzd0NsaXBib2FyZC5Jc0VtcHR5KCk7Cit9CisKK3ZvaWQgQ1BXTF9FZGl0OjpDb3B5VGV4dCgpCit7CisJaWYgKCFDYW5Db3B5KCkpIHJldHVybjsKKworCUNGWF9XaWRlU3RyaW5nIHN0ciA9IG1fcEVkaXQtPkdldFNlbFRleHQoKTsKKworCWlmIChJRlhfU3lzdGVtSGFuZGxlciogcFNIID0gR2V0U3lzdGVtSGFuZGxlcigpKQorCQlwU0gtPlNldENsaXBib2FyZFRleHQoR2V0QXR0YWNoZWRIV25kKCksIHN0cik7Cit9CisKK3ZvaWQgQ1BXTF9FZGl0OjpQYXN0ZVRleHQoKQoreworCWlmICghQ2FuUGFzdGUoKSkgcmV0dXJuOworCisJQ0ZYX1dpZGVTdHJpbmcgc3dDbGlwYm9hcmQ7CisJaWYgKElGWF9TeXN0ZW1IYW5kbGVyKiBwU0ggPSBHZXRTeXN0ZW1IYW5kbGVyKCkpCisJCXN3Q2xpcGJvYXJkID0gcFNILT5HZXRDbGlwYm9hcmRUZXh0KEdldEF0dGFjaGVkSFduZCgpKTsKKworCWlmIChtX3BGaWxsZXJOb3RpZnkpCisJeworCQlGWF9CT09MIGJSQyA9IFRSVUU7CisJCUZYX0JPT0wgYkV4aXQgPSBGQUxTRTsKKwkJQ0ZYX1dpZGVTdHJpbmcgc3RyQ2hhbmdlRXg7CisJCWludCBuU2VsU3RhcnQgPSAwOworCQlpbnQgblNlbEVuZCA9IDA7CisJCUdldFNlbChuU2VsU3RhcnQsIG5TZWxFbmQpOworCQltX3BGaWxsZXJOb3RpZnktPk9uQmVmb3JlS2V5U3Ryb2tlKFRSVUUsIEdldEF0dGFjaGVkRGF0YSgpLCAwICwgc3dDbGlwYm9hcmQsIHN0ckNoYW5nZUV4LCBuU2VsU3RhcnQsIG5TZWxFbmQsIFRSVUUsIGJSQywgYkV4aXQsIDApOworCQlpZiAoIWJSQykgcmV0dXJuOworCQlpZiAoYkV4aXQpIHJldHVybjsKKwl9CisKKwlpZiAoc3dDbGlwYm9hcmQuR2V0TGVuZ3RoKCkgPiAwKQorCXsKKwkJQ2xlYXIoKTsKKwkJSW5zZXJ0VGV4dChzd0NsaXBib2FyZCk7CisJfQorCisJaWYgKG1fcEZpbGxlck5vdGlmeSkKKwl7CisJCUZYX0JPT0wgYkV4aXQgPSBGQUxTRTsKKwkJbV9wRmlsbGVyTm90aWZ5LT5PbkFmdGVyS2V5U3Ryb2tlKFRSVUUsIEdldEF0dGFjaGVkRGF0YSgpLCBiRXhpdCwwKTsKKwkJaWYgKGJFeGl0KSByZXR1cm47CisJfQorfQorCit2b2lkIENQV0xfRWRpdDo6Q3V0VGV4dCgpCit7CisJaWYgKCFDYW5DdXQoKSkgcmV0dXJuOworCisJQ0ZYX1dpZGVTdHJpbmcgc3RyID0gbV9wRWRpdC0+R2V0U2VsVGV4dCgpOworCisJaWYgKElGWF9TeXN0ZW1IYW5kbGVyKiBwU0ggPSBHZXRTeXN0ZW1IYW5kbGVyKCkpCisJCXBTSC0+U2V0Q2xpcGJvYXJkVGV4dChHZXRBdHRhY2hlZEhXbmQoKSwgc3RyKTsKKworCW1fcEVkaXQtPkNsZWFyKCk7Cit9CisKK3ZvaWQgQ1BXTF9FZGl0OjpPbkNyZWF0ZWQoKQoreworCUNQV0xfRWRpdEN0cmw6Ok9uQ3JlYXRlZCgpOworCisJaWYgKENQV0xfU2Nyb2xsQmFyICogcFNjcm9sbCA9IEdldFZTY3JvbGxCYXIoKSkKKwl7CisJCXBTY3JvbGwtPlJlbW92ZUZsYWcoUFdTX0FVVE9UUkFOU1BBUkVOVCk7CisJCXBTY3JvbGwtPlNldFRyYW5zcGFyZW5jeSgyNTUpOworCX0KKworCVNldFBhcmFtQnlGbGFnKCk7CisKKwltX3JjT2xkV2luZG93ID0gR2V0V2luZG93UmVjdCgpOworCisJbV9wRWRpdC0+U2V0T3ByTm90aWZ5KHRoaXMpOworCW1fcEVkaXQtPkVuYWJsZU9wck5vdGlmeShUUlVFKTsKK30KKwordm9pZCBDUFdMX0VkaXQ6OlNldFBhcmFtQnlGbGFnKCkKK3sJCisJaWYgKEhhc0ZsYWcoUEVTX1JJR0hUKSkKKwl7CisJCW1fcEVkaXQtPlNldEFsaWdubWVudEgoMiwgRkFMU0UpOworCX0KKwllbHNlIGlmIChIYXNGbGFnKFBFU19NSURETEUpKQorCXsKKwkJbV9wRWRpdC0+U2V0QWxpZ25tZW50SCgxLCBGQUxTRSk7CisJfQorCWVsc2UKKwl7CisJCW1fcEVkaXQtPlNldEFsaWdubWVudEgoMCwgRkFMU0UpOworCX0KKworCWlmIChIYXNGbGFnKFBFU19CT1RUT00pKQorCXsKKwkJbV9wRWRpdC0+U2V0QWxpZ25tZW50VigyLCBGQUxTRSk7CisJfQorCWVsc2UgaWYgKEhhc0ZsYWcoUEVTX0NFTlRFUikpCisJeworCQltX3BFZGl0LT5TZXRBbGlnbm1lbnRWKDEsIEZBTFNFKTsKKwl9CisJZWxzZQorCXsKKwkJbV9wRWRpdC0+U2V0QWxpZ25tZW50VigwLCBGQUxTRSk7CisJfQorCisJaWYgKEhhc0ZsYWcoUEVTX1BBU1NXT1JEKSkKKwl7CisJCW1fcEVkaXQtPlNldFBhc3N3b3JkQ2hhcignKicsIEZBTFNFKTsKKwl9CisKKwltX3BFZGl0LT5TZXRNdWx0aUxpbmUoSGFzRmxhZyhQRVNfTVVMVElMSU5FKSwgRkFMU0UpOworCW1fcEVkaXQtPlNldEF1dG9SZXR1cm4oSGFzRmxhZyhQRVNfQVVUT1JFVFVSTiksIEZBTFNFKTsKKwltX3BFZGl0LT5TZXRBdXRvRm9udFNpemUoSGFzRmxhZyhQV1NfQVVUT0ZPTlRTSVpFKSwgRkFMU0UpOworCW1fcEVkaXQtPlNldEF1dG9TY3JvbGwoSGFzRmxhZyhQRVNfQVVUT1NDUk9MTCksIEZBTFNFKTsKKwltX3BFZGl0LT5FbmFibGVVbmRvKEhhc0ZsYWcoUEVTX1VORE8pKTsKKworCWlmIChIYXNGbGFnKFBFU19URVhUT1ZFUkZMT1cpKQorCXsKKwkJU2V0Q2xpcFJlY3QoQ1BERl9SZWN0KDAuMGYsMC4wZiwwLjBmLDAuMGYpKTsKKwkJbV9wRWRpdC0+U2V0VGV4dE92ZXJmbG93KFRSVUUsIEZBTFNFKTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKG1fcEVkaXRDYXJldCkKKwkJeworCQkJbV9wRWRpdENhcmV0LT5TZXRDbGlwUmVjdChDUFdMX1V0aWxzOjpJbmZsYXRlUmVjdChHZXRDbGllbnRSZWN0KCksMS4wZikpOyAvLysxIGZvciBjYXJldCBiZXNpZGUgYm9yZGVyCisJCX0KKwl9CisKKwlpZiAoSGFzRmxhZyhQRVNfU1BFTExDSEVDSykpCisJeworCQltX3BTcGVsbENoZWNrID0gR2V0Q3JlYXRpb25QYXJhbSgpLnBTcGVsbENoZWNrOworCX0KK30KKwordm9pZCBDUFdMX0VkaXQ6OkdldFRoaXNBcHBlYXJhbmNlU3RyZWFtKENGWF9CeXRlVGV4dEJ1ZiAmIHNBcHBTdHJlYW0pCit7CisJQ1BXTF9XbmQ6OkdldFRoaXNBcHBlYXJhbmNlU3RyZWFtKHNBcHBTdHJlYW0pOworCisJQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOworCUNGWF9CeXRlVGV4dEJ1ZiBzTGluZTsKKworCUZYX0lOVDMyIG5DaGFyQXJyYXkgPSBtX3BFZGl0LT5HZXRDaGFyQXJyYXkoKTsKKworCWlmIChuQ2hhckFycmF5ID4gMCkKKwl7CisJCXN3aXRjaCAoR2V0Qm9yZGVyU3R5bGUoKSkKKwkJeworCQljYXNlIFBCU19TT0xJRDoKKwkJCXsKKwkJCQlzTGluZSA8PCAicVxuIiA8PCBHZXRCb3JkZXJXaWR0aCgpIDw8ICIgd1xuIiAKKwkJCQkJPDwgQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oR2V0Qm9yZGVyQ29sb3IoKSxGQUxTRSkgPDwgIiAyIEogMCBqXG4iOwkJCQkJCisKKwkJCQlmb3IgKEZYX0lOVDMyIGk9MTtpPG5DaGFyQXJyYXk7aSsrKQorCQkJCXsKKwkJCQkJc0xpbmUgPDwgcmNDbGllbnQubGVmdCArICgocmNDbGllbnQucmlnaHQgLSByY0NsaWVudC5sZWZ0KS9uQ2hhckFycmF5KSppIDw8ICIgIgorCQkJCQkJPDwgcmNDbGllbnQuYm90dG9tIDw8ICIgbVxuIgorCQkJCQkJPDwgcmNDbGllbnQubGVmdCArICgocmNDbGllbnQucmlnaHQgLSByY0NsaWVudC5sZWZ0KS9uQ2hhckFycmF5KSppIDw8ICIgIgorCQkJCQkJPDwgcmNDbGllbnQudG9wIDw8ICIgbCBTXG4iOwkJCQkJCQorCQkJCX0KKworCQkJCXNMaW5lIDw8ICJRXG4iOwkJCQkJCisJCQl9CisJCQlicmVhazsgCisJCWNhc2UgUEJTX0RBU0g6CisJCQl7CisJCQkJc0xpbmUgPDwgInFcbiIgPDwgR2V0Qm9yZGVyV2lkdGgoKSA8PCAiIHdcbiIgCisJCQkJCTw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKEdldEJvcmRlckNvbG9yKCksRkFMU0UpIDw8ICIgMiBKIDAgalxuIgorCQkJCQk8PCAiWyIgPDwgR2V0Qm9yZGVyRGFzaCgpLm5EYXNoIDw8ICIgIiAKKwkJCQkJPDwgR2V0Qm9yZGVyRGFzaCgpLm5HYXAgPDwgIl0gIiAKKwkJCQkJPDwgR2V0Qm9yZGVyRGFzaCgpLm5QaGFzZSA8PCAiIGRcbiI7CisKKwkJCQlmb3IgKEZYX0lOVDMyIGk9MTtpPG5DaGFyQXJyYXk7aSsrKQkJCQkJCisJCQkJeworCQkJCQlzTGluZSA8PCByY0NsaWVudC5sZWZ0ICsgKChyY0NsaWVudC5yaWdodCAtIHJjQ2xpZW50LmxlZnQpL25DaGFyQXJyYXkpKmkgPDwgIiAiCisJCQkJCQk8PCByY0NsaWVudC5ib3R0b20gPDwgIiBtXG4iCisJCQkJCQk8PCByY0NsaWVudC5sZWZ0ICsgKChyY0NsaWVudC5yaWdodCAtIHJjQ2xpZW50LmxlZnQpL25DaGFyQXJyYXkpKmkgPDwgIiAiCisJCQkJCQk8PCByY0NsaWVudC50b3AgPDwgIiBsIFNcbiI7CQorCQkJCX0KKworCQkJCXNMaW5lIDw8ICJRXG4iOworCQkJfQorCQkJYnJlYWs7CisJCX0JCQorCX0KKworCXNBcHBTdHJlYW0gPDwgc0xpbmU7CisKKwlDRlhfQnl0ZVRleHRCdWYgc1RleHQ7CisKKwlDUERGX1BvaW50IHB0T2Zmc2V0ID0gQ1BERl9Qb2ludCgwLjBmLDAuMGYpOworCisJQ1BWVF9Xb3JkUmFuZ2Ugd3JXaG9sZSA9IG1fcEVkaXQtPkdldFdob2xlV29yZFJhbmdlKCk7CisJQ1BWVF9Xb3JkUmFuZ2Ugd3JTZWxlY3QgPSBHZXRTZWxlY3RXb3JkUmFuZ2UoKTsKKwlDUFZUX1dvcmRSYW5nZSB3clZpc2libGUgPSAoSGFzRmxhZyhQRVNfVEVYVE9WRVJGTE9XKSA/IHdyV2hvbGUgOiBtX3BFZGl0LT5HZXRWaXNpYmxlV29yZFJhbmdlKCkpOworCUNQVlRfV29yZFJhbmdlIHdyU2VsQmVmb3JlKHdyV2hvbGUuQmVnaW5Qb3Msd3JTZWxlY3QuQmVnaW5Qb3MpOworCUNQVlRfV29yZFJhbmdlIHdyU2VsQWZ0ZXIod3JTZWxlY3QuRW5kUG9zLHdyV2hvbGUuRW5kUG9zKTsKKworCUNQVlRfV29yZFJhbmdlIHdyVGVtcCA9IENQV0xfVXRpbHM6Ok92ZXJsYXBXb3JkUmFuZ2UoR2V0U2VsZWN0V29yZFJhbmdlKCksd3JWaXNpYmxlKTsKKwlDRlhfQnl0ZVN0cmluZyBzRWRpdFNlbCA9IENQV0xfVXRpbHM6OkdldEVkaXRTZWxBcHBTdHJlYW0obV9wRWRpdCwgcHRPZmZzZXQsCisJCQkmd3JUZW1wKTsKKworCWlmIChzRWRpdFNlbC5HZXRMZW5ndGgoKSA+IDApCisJCXNUZXh0IDw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKFBXTF9ERUZBVUxUX1NFTEJBQ0tDT0xPUikgPDwgc0VkaXRTZWwgOworCisJd3JUZW1wID0gQ1BXTF9VdGlsczo6T3ZlcmxhcFdvcmRSYW5nZSh3clZpc2libGUsd3JTZWxCZWZvcmUpOworCUNGWF9CeXRlU3RyaW5nIHNFZGl0QmVmb3JlID0gQ1BXTF9VdGlsczo6R2V0RWRpdEFwcFN0cmVhbShtX3BFZGl0LCBwdE9mZnNldCwgIAorCQkJJndyVGVtcCwgIUhhc0ZsYWcoUEVTX0NIQVJBUlJBWSksIG1fcEVkaXQtPkdldFBhc3N3b3JkQ2hhcigpKTsJCQkKKworCWlmIChzRWRpdEJlZm9yZS5HZXRMZW5ndGgoKSA+IDApCisJCXNUZXh0IDw8ICJCVFxuIiA8PCBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShHZXRUZXh0Q29sb3IoKSkgPDwgc0VkaXRCZWZvcmUgPDwgIkVUXG4iOworCisJd3JUZW1wID0gQ1BXTF9VdGlsczo6T3ZlcmxhcFdvcmRSYW5nZSh3clZpc2libGUsd3JTZWxlY3QpOworCUNGWF9CeXRlU3RyaW5nIHNFZGl0TWlkID0gQ1BXTF9VdGlsczo6R2V0RWRpdEFwcFN0cmVhbShtX3BFZGl0LCBwdE9mZnNldCwgCisJCQkmd3JUZW1wLCAhSGFzRmxhZyhQRVNfQ0hBUkFSUkFZKSwgbV9wRWRpdC0+R2V0UGFzc3dvcmRDaGFyKCkpOwkJCQorCisJaWYgKHNFZGl0TWlkLkdldExlbmd0aCgpID4gMCkKKwkJc1RleHQgPDwgIkJUXG4iIDw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMSkpIDw8IHNFZGl0TWlkIDw8ICJFVFxuIjsKKworCXdyVGVtcCA9IENQV0xfVXRpbHM6Ok92ZXJsYXBXb3JkUmFuZ2Uod3JWaXNpYmxlLHdyU2VsQWZ0ZXIpOworCUNGWF9CeXRlU3RyaW5nIHNFZGl0QWZ0ZXIgPSBDUFdMX1V0aWxzOjpHZXRFZGl0QXBwU3RyZWFtKG1fcEVkaXQsIHB0T2Zmc2V0LCAKKwkJCSZ3clRlbXAsICFIYXNGbGFnKFBFU19DSEFSQVJSQVkpLCBtX3BFZGl0LT5HZXRQYXNzd29yZENoYXIoKSk7CQkJCisKKwlpZiAoc0VkaXRBZnRlci5HZXRMZW5ndGgoKSA+IDApCisJCXNUZXh0IDw8ICJCVFxuIiA8PCBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShHZXRUZXh0Q29sb3IoKSkgPDwgc0VkaXRBZnRlcjw8ICJFVFxuIjsKKworCWlmIChIYXNGbGFnKFBFU19TUEVMTENIRUNLKSkKKwl7CisJCUNGWF9CeXRlU3RyaW5nIHNTcGVsbENoZWNrID0gQ1BXTF9VdGlsczo6R2V0U3BlbGxDaGVja0FwcFN0cmVhbShtX3BFZGl0LCBtX3BTcGVsbENoZWNrLCBwdE9mZnNldCwgJndyVmlzaWJsZSk7CisJCWlmIChzU3BlbGxDaGVjay5HZXRMZW5ndGgoKSA+IDApCisJCQlzVGV4dCA8PCBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShDUFdMX0NvbG9yKENPTE9SVFlQRV9SR0IsMSwwLDApLEZBTFNFKSA8PCBzU3BlbGxDaGVjazsKKwl9CisKKwlpZiAoc1RleHQuR2V0TGVuZ3RoKCkgPiAwKQorCXsKKwkJQ1BERl9SZWN0IHJjQ2xpZW50ID0gdGhpcy0+R2V0Q2xpZW50UmVjdCgpOworCQlzQXBwU3RyZWFtIDw8ICJxXG4vVHggQk1DXG4iOworCQkKKwkJaWYgKCFIYXNGbGFnKFBFU19URVhUT1ZFUkZMT1cpKQorCQkJc0FwcFN0cmVhbSA8PCByY0NsaWVudC5sZWZ0IDw8ICIgIiA8PCByY0NsaWVudC5ib3R0b20gPDwgIiAiCisJCQkJPDwgcmNDbGllbnQucmlnaHQgLSByY0NsaWVudC5sZWZ0IDw8ICIgIiA8PCByY0NsaWVudC50b3AgLSByY0NsaWVudC5ib3R0b20gPDwgIiByZSBXIG5cbiI7CisKKwkJc0FwcFN0cmVhbSA8PCBzVGV4dDsKKworCQlzQXBwU3RyZWFtIDw8ICJFTUNcblFcbiI7CisJfQorfQorCit2b2lkIENQV0xfRWRpdDo6RHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpCit7CisJQ1BXTF9XbmQ6OkRyYXdUaGlzQXBwZWFyYW5jZShwRGV2aWNlLHBVc2VyMkRldmljZSk7CisKKwlDUERGX1JlY3QgcmNDbGllbnQgPSBHZXRDbGllbnRSZWN0KCk7CisJQ0ZYX0J5dGVUZXh0QnVmIHNMaW5lOworCisJRlhfSU5UMzIgbkNoYXJBcnJheSA9IG1fcEVkaXQtPkdldENoYXJBcnJheSgpOworCisJaWYgKG5DaGFyQXJyYXkgPiAwKQorCXsKKwkJc3dpdGNoIChHZXRCb3JkZXJTdHlsZSgpKQorCQl7CisJCWNhc2UgUEJTX1NPTElEOgorCQkJeworCQkJCUNGWF9HcmFwaFN0YXRlRGF0YSBnc2Q7CisJCQkJZ3NkLm1fTGluZVdpZHRoID0gKEZYX0ZMT0FUKUdldEJvcmRlcldpZHRoKCk7CisKKwkJCQlDRlhfUGF0aERhdGEgcGF0aDsKKwkJCQlwYXRoLlNldFBvaW50Q291bnQoKG5DaGFyQXJyYXktMSkqMik7CisJCQkJCisJCQkJZm9yIChGWF9JTlQzMiBpPTA7IGk8bkNoYXJBcnJheS0xOyBpKyspCisJCQkJewkJCQkJCisJCQkJCXBhdGguU2V0UG9pbnQoaSoyLCByY0NsaWVudC5sZWZ0ICsgKChyY0NsaWVudC5yaWdodCAtIHJjQ2xpZW50LmxlZnQpL25DaGFyQXJyYXkpKihpKzEpLCAKKwkJCQkJCXJjQ2xpZW50LmJvdHRvbSwgRlhQVF9NT1ZFVE8pOworCQkJCQlwYXRoLlNldFBvaW50KGkqMisxLCByY0NsaWVudC5sZWZ0ICsgKChyY0NsaWVudC5yaWdodCAtIHJjQ2xpZW50LmxlZnQpL25DaGFyQXJyYXkpKihpKzEpLAorCQkJCQkJcmNDbGllbnQudG9wLCBGWFBUX0xJTkVUTyk7CQkJCQkJCQkJCQkKKwkJCQl9CQkJCisJCQkJaWYgKHBhdGguR2V0UG9pbnRDb3VudCgpID4gMCkKKwkJCQkJcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgJmdzZCwwLCAgCisJCQkJCQlDUFdMX1V0aWxzOjpQV0xDb2xvclRvRlhDb2xvcihHZXRCb3JkZXJDb2xvcigpLDI1NSksIEZYRklMTF9BTFRFUk5BVEUpOworCQkJfQorCQkJYnJlYWs7IAorCQljYXNlIFBCU19EQVNIOgorCQkJeworCQkJCUNGWF9HcmFwaFN0YXRlRGF0YSBnc2Q7CisJCQkJZ3NkLm1fTGluZVdpZHRoID0gKEZYX0ZMT0FUKUdldEJvcmRlcldpZHRoKCk7CisKKwkJCQlnc2QuU2V0RGFzaENvdW50KDIpOworCQkJCWdzZC5tX0Rhc2hBcnJheVswXSA9IChGWF9GTE9BVClHZXRCb3JkZXJEYXNoKCkubkRhc2g7CisJCQkJZ3NkLm1fRGFzaEFycmF5WzFdID0gKEZYX0ZMT0FUKUdldEJvcmRlckRhc2goKS5uR2FwOworCQkJCWdzZC5tX0Rhc2hQaGFzZSA9IChGWF9GTE9BVClHZXRCb3JkZXJEYXNoKCkublBoYXNlOworCisJCQkJQ0ZYX1BhdGhEYXRhIHBhdGg7CisJCQkJcGF0aC5TZXRQb2ludENvdW50KChuQ2hhckFycmF5LTEpKjIpOworCQkJCQorCQkJCWZvciAoRlhfSU5UMzIgaT0wOyBpPG5DaGFyQXJyYXktMTsgaSsrKQorCQkJCXsJCQkJCQorCQkJCQlwYXRoLlNldFBvaW50KGkqMiwgcmNDbGllbnQubGVmdCArICgocmNDbGllbnQucmlnaHQgLSByY0NsaWVudC5sZWZ0KS9uQ2hhckFycmF5KSooaSsxKSwgCisJCQkJCQlyY0NsaWVudC5ib3R0b20sIEZYUFRfTU9WRVRPKTsKKwkJCQkJcGF0aC5TZXRQb2ludChpKjIrMSwgcmNDbGllbnQubGVmdCArICgocmNDbGllbnQucmlnaHQgLSByY0NsaWVudC5sZWZ0KS9uQ2hhckFycmF5KSooaSsxKSwKKwkJCQkJCXJjQ2xpZW50LnRvcCwgRlhQVF9MSU5FVE8pOwkJCQkJCQkJCQkJCisJCQkJfQkJCisJCQkJaWYgKHBhdGguR2V0UG9pbnRDb3VudCgpID4gMCkKKwkJCQkJcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgJmdzZCwwLCAgCisJCQkJCQlDUFdMX1V0aWxzOjpQV0xDb2xvclRvRlhDb2xvcihHZXRCb3JkZXJDb2xvcigpLDI1NSksIEZYRklMTF9BTFRFUk5BVEUpOworCQkJfQorCQkJYnJlYWs7CisJCX0JCQorCX0KKworCUNQREZfUmVjdCByY0NsaXA7CisJQ1BWVF9Xb3JkUmFuZ2Ugd3JSYW5nZSA9IG1fcEVkaXQtPkdldFZpc2libGVXb3JkUmFuZ2UoKTsKKwlDUFZUX1dvcmRSYW5nZSogcFJhbmdlID0gTlVMTDsKKworCWlmICghSGFzRmxhZyhQRVNfVEVYVE9WRVJGTE9XKSkKKwl7CisJCXJjQ2xpcCA9IEdldENsaWVudFJlY3QoKTsKKwkJcFJhbmdlID0gJndyUmFuZ2U7CisJfQorSUZYX1N5c3RlbUhhbmRsZXIqIHBTeXNIYW5kbGVyID0gR2V0U3lzdGVtSGFuZGxlcigpOworCUlGWF9FZGl0OjpEcmF3RWRpdChwRGV2aWNlLHBVc2VyMkRldmljZSxtX3BFZGl0LAorCQlDUFdMX1V0aWxzOjpQV0xDb2xvclRvRlhDb2xvcihHZXRUZXh0Q29sb3IoKSx0aGlzLT5HZXRUcmFuc3BhcmVuY3koKSksCisJCUNQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKEdldFRleHRTdHJva2VDb2xvcigpLHRoaXMtPkdldFRyYW5zcGFyZW5jeSgpKSwKKwkJcmNDbGlwLENQREZfUG9pbnQoMC4wZiwwLjBmKSxwUmFuZ2UsIHBTeXNIYW5kbGVyLCBtX3BGb3JtRmlsbGVyKTsKKworCWlmIChIYXNGbGFnKFBFU19TUEVMTENIRUNLKSkKKwl7CisJCUNQV0xfVXRpbHM6OkRyYXdFZGl0U3BlbGxDaGVjayhwRGV2aWNlLHBVc2VyMkRldmljZSxtX3BFZGl0LHJjQ2xpcCwKKwkJCUNQREZfUG9pbnQoMC4wZiwwLjBmKSxwUmFuZ2UsIHRoaXMtPkdldENyZWF0aW9uUGFyYW0oKS5wU3BlbGxDaGVjayk7CisJfQorfQorCitGWF9CT09MIENQV0xfRWRpdDo6T25MQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKQoreworCUNQV0xfV25kOjpPbkxCdXR0b25Eb3duKHBvaW50LG5GbGFnKTsKKworCWlmIChIYXNGbGFnKFBFU19URVhUT1ZFUkZMT1cpIHx8IENsaWVudEhpdFRlc3QocG9pbnQpKQorCXsKKwkJaWYgKG1fYk1vdXNlRG93bikKKwkJCXRoaXMtPkludmFsaWRhdGVSZWN0KCk7CisKKwkJbV9iTW91c2VEb3duID0gVFJVRTsJCQorCQlTZXRDYXB0dXJlKCk7CisKKwkJbV9wRWRpdC0+T25Nb3VzZURvd24ocG9pbnQsSXNTSElGVHByZXNzZWQobkZsYWcpLElzQ1RSTHByZXNzZWQobkZsYWcpKTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTAlDUFdMX0VkaXQ6Ok9uTEJ1dHRvbkRibENsayhjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKQoreworCUNQV0xfV25kOjpPbkxCdXR0b25EYmxDbGsocG9pbnQsIG5GbGFnKTsKKworCWlmIChIYXNGbGFnKFBFU19URVhUT1ZFUkZMT1cpIHx8IENsaWVudEhpdFRlc3QocG9pbnQpKQorCXsKKwkJbV9wRWRpdC0+U2VsZWN0QWxsKCk7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKKyNkZWZpbmUgV01fUFdMRURJVF9VTkRPCQkJCQkweDAxCisjZGVmaW5lIFdNX1BXTEVESVRfUkVETwkJCQkJMHgwMgorI2RlZmluZSBXTV9QV0xFRElUX0NVVAkJCQkJMHgwMworI2RlZmluZSBXTV9QV0xFRElUX0NPUFkJCQkJCTB4MDQKKyNkZWZpbmUgV01fUFdMRURJVF9QQVNURQkJCQkweDA1CisjZGVmaW5lIFdNX1BXTEVESVRfREVMRVRFCQkJCTB4MDYKKyNkZWZpbmUgV01fUFdMRURJVF9TRUxFQ1RBTEwJCQkweDA3CisjZGVmaW5lIFdNX1BXTEVESVRfU1VHR0VTVAkJCQkweDA4CisKK0ZYX0JPT0wgQ1BXTF9FZGl0OjpPblJCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKQoreworCWlmIChtX2JNb3VzZURvd24pIHJldHVybiBGQUxTRTsKKworCUNQV0xfV25kOjpPblJCdXR0b25VcChwb2ludCwgbkZsYWcpOworCQorCWlmICghSGFzRmxhZyhQRVNfVEVYVE9WRVJGTE9XKSAmJiAhQ2xpZW50SGl0VGVzdChwb2ludCkpIHJldHVybiBUUlVFOworCisJSUZYX1N5c3RlbUhhbmRsZXIqIHBTSCA9IEdldFN5c3RlbUhhbmRsZXIoKTsKKwlpZiAoIXBTSCkgcmV0dXJuIEZBTFNFOworCisJdGhpcy0+U2V0Rm9jdXMoKTsKKworCUNQVlRfV29yZFJhbmdlIHdyTGF0aW4gPSBHZXRMYXRpbldvcmRzUmFuZ2UocG9pbnQpOworCUNGWF9XaWRlU3RyaW5nIHN3TGF0aW4gPSBtX3BFZGl0LT5HZXRSYW5nZVRleHQod3JMYXRpbik7CisKKwlGWF9ITUVOVSBoUG9wdXAgPSBwU0gtPkNyZWF0ZVBvcHVwTWVudSgpOworCWlmICghaFBvcHVwKSByZXR1cm4gRkFMU0U7CisKKwlDRlhfQnl0ZVN0cmluZ0FycmF5IHNTdWdnZXN0V29yZHM7CisJQ1BERl9Qb2ludCBwdFBvcHVwID0gcG9pbnQ7CisKKwlpZiAoIUlzUmVhZE9ubHkoKSkKKwl7CisJCWlmIChIYXNGbGFnKFBFU19TUEVMTENIRUNLKSAmJiAhc3dMYXRpbi5Jc0VtcHR5KCkpCisJCXsKKwkJCWlmIChtX3BTcGVsbENoZWNrKQorCQkJeworCQkJCUNGWF9CeXRlU3RyaW5nIHNMYXRpbiA9IENGWF9CeXRlU3RyaW5nOjpGcm9tVW5pY29kZShzd0xhdGluKTsKKworCQkJCWlmICghbV9wU3BlbGxDaGVjay0+Q2hlY2tXb3JkKHNMYXRpbikpCisJCQkJewkJCQkJCQorCQkJCQltX3BTcGVsbENoZWNrLT5TdWdnZXN0V29yZHMoc0xhdGluLHNTdWdnZXN0V29yZHMpOworCisJCQkJCUZYX0lOVDMyIG5TdWdnZXN0ID0gc1N1Z2dlc3RXb3Jkcy5HZXRTaXplKCk7CisKKwkJCQkJZm9yIChGWF9JTlQzMiBuV29yZD0wOyBuV29yZDxuU3VnZ2VzdDsgbldvcmQrKykKKwkJCQkJewkKKwkJCQkJCXBTSC0+QXBwZW5kTWVudUl0ZW0oaFBvcHVwLCBXTV9QV0xFRElUX1NVR0dFU1QrbldvcmQsIHNTdWdnZXN0V29yZHNbbldvcmRdLlVURjhEZWNvZGUoKSk7CisJCQkJCX0KKworCQkJCQlpZiAoblN1Z2dlc3QgPiAwKQorCQkJCQkJcFNILT5BcHBlbmRNZW51SXRlbShoUG9wdXAsIDAsIEwiIik7CisKKwkJCQkJcHRQb3B1cCA9IEdldFdvcmRSaWdodEJvdHRvbVBvaW50KHdyTGF0aW4uRW5kUG9zKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlJUFdMX1Byb3ZpZGVyKiBwUHJvdmlkZXIgPSB0aGlzLT5HZXRQcm92aWRlcigpOworCisJaWYgKEhhc0ZsYWcoUEVTX1VORE8pKQorCXsKKwkJcFNILT5BcHBlbmRNZW51SXRlbShoUG9wdXAsIFdNX1BXTEVESVRfVU5ETywgCisJCQlwUHJvdmlkZXIgPyBwUHJvdmlkZXItPkxvYWRQb3B1cE1lbnVTdHJpbmcoMCkgOiBMIiZVbmRvIik7CisJCXBTSC0+QXBwZW5kTWVudUl0ZW0oaFBvcHVwLCBXTV9QV0xFRElUX1JFRE8sCisJCQlwUHJvdmlkZXIgPyBwUHJvdmlkZXItPkxvYWRQb3B1cE1lbnVTdHJpbmcoMSkgOiBMIiZSZWRvIik7CisJCXBTSC0+QXBwZW5kTWVudUl0ZW0oaFBvcHVwLCAwLCBMIiIpOworCisJCWlmICghbV9wRWRpdC0+Q2FuVW5kbygpKQorCQkJcFNILT5FbmFibGVNZW51SXRlbShoUG9wdXAsIFdNX1BXTEVESVRfVU5ETywgRkFMU0UpOworCQlpZiAoIW1fcEVkaXQtPkNhblJlZG8oKSkKKwkJCXBTSC0+RW5hYmxlTWVudUl0ZW0oaFBvcHVwLCBXTV9QV0xFRElUX1JFRE8sIEZBTFNFKTsKKwl9CisKKwlwU0gtPkFwcGVuZE1lbnVJdGVtKGhQb3B1cCwgV01fUFdMRURJVF9DVVQsIAorCQlwUHJvdmlkZXIgPyBwUHJvdmlkZXItPkxvYWRQb3B1cE1lbnVTdHJpbmcoMikgOiBMIkN1JnQiKTsKKwlwU0gtPkFwcGVuZE1lbnVJdGVtKGhQb3B1cCwgV01fUFdMRURJVF9DT1BZLCAKKwkJcFByb3ZpZGVyID8gcFByb3ZpZGVyLT5Mb2FkUG9wdXBNZW51U3RyaW5nKDMpIDogTCImQ29weSIpOworCXBTSC0+QXBwZW5kTWVudUl0ZW0oaFBvcHVwLCBXTV9QV0xFRElUX1BBU1RFLCAKKwkJcFByb3ZpZGVyID8gcFByb3ZpZGVyLT5Mb2FkUG9wdXBNZW51U3RyaW5nKDQpIDogTCImUGFzdGUiKTsKKwlwU0gtPkFwcGVuZE1lbnVJdGVtKGhQb3B1cCwgV01fUFdMRURJVF9ERUxFVEUsIAorCQlwUHJvdmlkZXIgPyBwUHJvdmlkZXItPkxvYWRQb3B1cE1lbnVTdHJpbmcoNSkgOiBMIiZEZWxldGUiKTsKKworCUNGWF9XaWRlU3RyaW5nIHN3VGV4dCA9IHBTSC0+R2V0Q2xpcGJvYXJkVGV4dCh0aGlzLT5HZXRBdHRhY2hlZEhXbmQoKSk7CisJaWYgKHN3VGV4dC5Jc0VtcHR5KCkpCisJCXBTSC0+RW5hYmxlTWVudUl0ZW0oaFBvcHVwLCBXTV9QV0xFRElUX1BBU1RFLCBGQUxTRSk7CisKKwlpZiAoIW1fcEVkaXQtPklzU2VsZWN0ZWQoKSkKKwl7CisJCXBTSC0+RW5hYmxlTWVudUl0ZW0oaFBvcHVwLCBXTV9QV0xFRElUX0NVVCwgRkFMU0UpOworCQlwU0gtPkVuYWJsZU1lbnVJdGVtKGhQb3B1cCwgV01fUFdMRURJVF9DT1BZLCBGQUxTRSk7CisJCXBTSC0+RW5hYmxlTWVudUl0ZW0oaFBvcHVwLCBXTV9QV0xFRElUX0RFTEVURSwgRkFMU0UpOworCX0KKworCWlmIChJc1JlYWRPbmx5KCkpCisJeworCQlwU0gtPkVuYWJsZU1lbnVJdGVtKGhQb3B1cCwgV01fUFdMRURJVF9DVVQsIEZBTFNFKTsKKwkJcFNILT5FbmFibGVNZW51SXRlbShoUG9wdXAsIFdNX1BXTEVESVRfREVMRVRFLCBGQUxTRSk7CisJCXBTSC0+RW5hYmxlTWVudUl0ZW0oaFBvcHVwLCBXTV9QV0xFRElUX1BBU1RFLCBGQUxTRSk7CQkJCisJfQorCisJaWYgKEhhc0ZsYWcoUEVTX1BBU1NXT1JEKSkKKwl7CisJCXBTSC0+RW5hYmxlTWVudUl0ZW0oaFBvcHVwLCBXTV9QV0xFRElUX0NVVCwgRkFMU0UpOworCQlwU0gtPkVuYWJsZU1lbnVJdGVtKGhQb3B1cCwgV01fUFdMRURJVF9DT1BZLCBGQUxTRSk7CisJfQorCisJaWYgKEhhc0ZsYWcoUEVTX05PUkVBRCkpCisJeworCQlwU0gtPkVuYWJsZU1lbnVJdGVtKGhQb3B1cCwgV01fUFdMRURJVF9DVVQsIEZBTFNFKTsKKwkJcFNILT5FbmFibGVNZW51SXRlbShoUG9wdXAsIFdNX1BXTEVESVRfQ09QWSwgRkFMU0UpOworCX0KKworCXBTSC0+QXBwZW5kTWVudUl0ZW0oaFBvcHVwLCAwLCBMIiIpOworCXBTSC0+QXBwZW5kTWVudUl0ZW0oaFBvcHVwLCBXTV9QV0xFRElUX1NFTEVDVEFMTCwKKwkJcFByb3ZpZGVyID8gcFByb3ZpZGVyLT5Mb2FkUG9wdXBNZW51U3RyaW5nKDYpIDogTCImU2VsZWN0IEFsbCIpOworCisJaWYgKG1fcEVkaXQtPkdldFRvdGFsV29yZHMoKSA9PSAwKQorCXsKKwkJcFNILT5FbmFibGVNZW51SXRlbShoUG9wdXAsIFdNX1BXTEVESVRfU0VMRUNUQUxMLCBGQUxTRSk7CisJfQorCisJRlhfSU5UMzIgeCwgeTsKKwlQV0x0b1duZChwdFBvcHVwLCB4LCB5KTsKKwlwU0gtPkNsaWVudFRvU2NyZWVuKEdldEF0dGFjaGVkSFduZCgpLCB4LCB5KTsKKwlwU0gtPlNldEN1cnNvcihGWENUX0FSUk9XKTsKKwlGWF9JTlQzMiBuQ21kID0gcFNILT5UcmFja1BvcHVwTWVudShoUG9wdXAsCisJCQkJCSB4LAorCQkJCQkgeSwKKwkJCQkJIEdldEF0dGFjaGVkSFduZCgpKTsKKworCisJc3dpdGNoIChuQ21kKQorCXsKKwljYXNlIFdNX1BXTEVESVRfVU5ETzoKKwkJVW5kbygpOworCQlicmVhazsKKwljYXNlIFdNX1BXTEVESVRfUkVETzoKKwkJUmVkbygpOworCQlicmVhazsKKwljYXNlIFdNX1BXTEVESVRfQ1VUOgorCQl0aGlzLT5DdXRUZXh0KCk7CisJCWJyZWFrOworCWNhc2UgV01fUFdMRURJVF9DT1BZOgorCQl0aGlzLT5Db3B5VGV4dCgpOworCQlicmVhazsKKwljYXNlIFdNX1BXTEVESVRfUEFTVEU6CisJCXRoaXMtPlBhc3RlVGV4dCgpOworCQlicmVhazsKKwljYXNlIFdNX1BXTEVESVRfREVMRVRFOgorCQl0aGlzLT5DbGVhcigpOworCQlicmVhazsKKwljYXNlIFdNX1BXTEVESVRfU0VMRUNUQUxMOgorCQl0aGlzLT5TZWxlY3RBbGwoKTsKKwkJYnJlYWs7CisJY2FzZSBXTV9QV0xFRElUX1NVR0dFU1QgKyAwOgorCQlTZXRTZWwobV9wRWRpdC0+V29yZFBsYWNlVG9Xb3JkSW5kZXgod3JMYXRpbi5CZWdpblBvcyksbV9wRWRpdC0+V29yZFBsYWNlVG9Xb3JkSW5kZXgod3JMYXRpbi5FbmRQb3MpKTsKKwkJUmVwbGFjZVNlbChzU3VnZ2VzdFdvcmRzWzBdLlVURjhEZWNvZGUoKSk7CisJCWJyZWFrOworCWNhc2UgV01fUFdMRURJVF9TVUdHRVNUICsgMToKKwkJU2V0U2VsKG1fcEVkaXQtPldvcmRQbGFjZVRvV29yZEluZGV4KHdyTGF0aW4uQmVnaW5Qb3MpLG1fcEVkaXQtPldvcmRQbGFjZVRvV29yZEluZGV4KHdyTGF0aW4uRW5kUG9zKSk7CisJCVJlcGxhY2VTZWwoc1N1Z2dlc3RXb3Jkc1sxXS5VVEY4RGVjb2RlKCkpOworCQlicmVhazsKKwljYXNlIFdNX1BXTEVESVRfU1VHR0VTVCArIDI6CisJCVNldFNlbChtX3BFZGl0LT5Xb3JkUGxhY2VUb1dvcmRJbmRleCh3ckxhdGluLkJlZ2luUG9zKSxtX3BFZGl0LT5Xb3JkUGxhY2VUb1dvcmRJbmRleCh3ckxhdGluLkVuZFBvcykpOworCQlSZXBsYWNlU2VsKHNTdWdnZXN0V29yZHNbMl0uVVRGOERlY29kZSgpKTsKKwkJYnJlYWs7CisJY2FzZSBXTV9QV0xFRElUX1NVR0dFU1QgKyAzOgorCQlTZXRTZWwobV9wRWRpdC0+V29yZFBsYWNlVG9Xb3JkSW5kZXgod3JMYXRpbi5CZWdpblBvcyksbV9wRWRpdC0+V29yZFBsYWNlVG9Xb3JkSW5kZXgod3JMYXRpbi5FbmRQb3MpKTsKKwkJUmVwbGFjZVNlbChzU3VnZ2VzdFdvcmRzWzNdLlVURjhEZWNvZGUoKSk7CisJCWJyZWFrOworCWNhc2UgV01fUFdMRURJVF9TVUdHRVNUICsgNDoJCQorCQlTZXRTZWwobV9wRWRpdC0+V29yZFBsYWNlVG9Xb3JkSW5kZXgod3JMYXRpbi5CZWdpblBvcyksbV9wRWRpdC0+V29yZFBsYWNlVG9Xb3JkSW5kZXgod3JMYXRpbi5FbmRQb3MpKTsKKwkJUmVwbGFjZVNlbChzU3VnZ2VzdFdvcmRzWzRdLlVURjhEZWNvZGUoKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXBTSC0+RGVzdHJveU1lbnUoaFBvcHVwKTsKKworCXJldHVybiBUUlVFOworfQorCit2b2lkIENQV0xfRWRpdDo6T25TZXRGb2N1cygpCit7CisJU2V0RWRpdENhcmV0KFRSVUUpOworCisJaWYgKCFJc1JlYWRPbmx5KCkpCisJeworCQlpZiAoSVBXTF9Gb2N1c0hhbmRsZXIqIHBGb2N1c0hhbmRsZXIgPSBHZXRGb2N1c0hhbmRsZXIoKSkKKwkJCXBGb2N1c0hhbmRsZXItPk9uU2V0Rm9jdXModGhpcyk7CisJfQorCisJbV9iRm9jdXMgPSBUUlVFOworfQorCit2b2lkIENQV0xfRWRpdDo6T25LaWxsRm9jdXMoKQoreworCVNob3dWU2Nyb2xsQmFyKEZBTFNFKTsKKwkKKwltX3BFZGl0LT5TZWxlY3ROb25lKCk7CisJU2V0Q2FyZXQoRkFMU0UsIENQREZfUG9pbnQoMC4wZiwwLjBmKSwgQ1BERl9Qb2ludCgwLjBmLDAuMGYpKTsKKwkKKwlTZXRDaGFyU2V0KDApOworCisJaWYgKCFJc1JlYWRPbmx5KCkpCisJeworCQlpZiAoSVBXTF9Gb2N1c0hhbmRsZXIqIHBGb2N1c0hhbmRsZXIgPSBHZXRGb2N1c0hhbmRsZXIoKSkKKwkJCXBGb2N1c0hhbmRsZXItPk9uS2lsbEZvY3VzKHRoaXMpOworCX0KKworCW1fYkZvY3VzID0gRkFMU0U7Cit9CisKK3ZvaWQgQ1BXTF9FZGl0OjpTZXRIb3J6U2NhbGUoRlhfSU5UMzIgbkhvcnpTY2FsZSwgRlhfQk9PTCBiUGFpbnQvKiA9IFRSVUUqLykKK3sKKwltX3BFZGl0LT5TZXRIb3J6U2NhbGUobkhvcnpTY2FsZSwgYlBhaW50KTsKK30KKwordm9pZCBDUFdMX0VkaXQ6OlNldENoYXJTcGFjZShGWF9GTE9BVCBmQ2hhclNwYWNlLCBGWF9CT09MIGJQYWludC8qID0gVFJVRSovKQoreworCW1fcEVkaXQtPlNldENoYXJTcGFjZShmQ2hhclNwYWNlLCBiUGFpbnQpOworfQorCit2b2lkIENQV0xfRWRpdDo6U2V0TGluZUxlYWRpbmcoRlhfRkxPQVQgZkxpbmVMZWFkaW5nLCBGWF9CT09MIGJQYWludC8qID0gVFJVRSovKQoreworCW1fcEVkaXQtPlNldExpbmVMZWFkaW5nKGZMaW5lTGVhZGluZywgYlBhaW50KTsKK30KKworQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9FZGl0OjpHZXRTZWxlY3RBcHBlYXJhbmNlU3RyZWFtKGNvbnN0IENQREZfUG9pbnQgJiBwdE9mZnNldCkgY29uc3QKK3sKKwlDUFZUX1dvcmRSYW5nZSB3ciA9IEdldFNlbGVjdFdvcmRSYW5nZSgpOworCXJldHVybiBDUFdMX1V0aWxzOjpHZXRFZGl0U2VsQXBwU3RyZWFtKG1fcEVkaXQscHRPZmZzZXQsJndyKTsKK30KKworQ1BWVF9Xb3JkUmFuZ2UgQ1BXTF9FZGl0OjpHZXRTZWxlY3RXb3JkUmFuZ2UoKSBjb25zdAoreworCWlmIChtX3BFZGl0LT5Jc1NlbGVjdGVkKCkpCisJeworCQlGWF9JTlQzMiBuU3RhcnQgPSAtMTsKKwkJRlhfSU5UMzIgbkVuZCA9IC0xOworCisJCW1fcEVkaXQtPkdldFNlbChuU3RhcnQsIG5FbmQpOworCisJCUNQVlRfV29yZFBsYWNlIHdwU3RhcnQgPSBtX3BFZGl0LT5Xb3JkSW5kZXhUb1dvcmRQbGFjZShuU3RhcnQpOworCQlDUFZUX1dvcmRQbGFjZSB3cEVuZCA9IG1fcEVkaXQtPldvcmRJbmRleFRvV29yZFBsYWNlKG5FbmQpOworCisJCXJldHVybiBDUFZUX1dvcmRSYW5nZSh3cFN0YXJ0LHdwRW5kKTsKKwl9CisKKwlyZXR1cm4gQ1BWVF9Xb3JkUmFuZ2UoKTsKK30KKworQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9FZGl0OjpHZXRUZXh0QXBwZWFyYW5jZVN0cmVhbShjb25zdCBDUERGX1BvaW50ICYgcHRPZmZzZXQpIGNvbnN0Cit7CisJQ0ZYX0J5dGVUZXh0QnVmIHNSZXQ7CisJQ0ZYX0J5dGVTdHJpbmcgc0VkaXQgPSBDUFdMX1V0aWxzOjpHZXRFZGl0QXBwU3RyZWFtKG1fcEVkaXQscHRPZmZzZXQpOworCQorCWlmIChzRWRpdC5HZXRMZW5ndGgoKSA+IDApCisJeworCQlzUmV0IDw8ICJCVFxuIiA8PCBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShHZXRUZXh0Q29sb3IoKSkgPDwgc0VkaXQgPDwgIkVUXG4iOworCX0KKworCXJldHVybiBzUmV0LkdldEJ5dGVTdHJpbmcoKTsKK30KKworQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9FZGl0OjpHZXRDYXJldEFwcGVhcmFuY2VTdHJlYW0oY29uc3QgQ1BERl9Qb2ludCAmIHB0T2Zmc2V0KSBjb25zdAoreworCWlmIChtX3BFZGl0Q2FyZXQpCisJCXJldHVybiBtX3BFZGl0Q2FyZXQtPkdldENhcmV0QXBwZWFyYW5jZVN0cmVhbShwdE9mZnNldCk7CisKKwlyZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsKK30KKworQ1BERl9Qb2ludCBDUFdMX0VkaXQ6OkdldFdvcmRSaWdodEJvdHRvbVBvaW50KGNvbnN0IENQVlRfV29yZFBsYWNlJiB3cFdvcmQpCit7CisJQ1BERl9Qb2ludCBwdCgwLjBmLCAwLjBmKTsKKworCWlmIChJRlhfRWRpdF9JdGVyYXRvciAqIHBJdGVyYXRvciA9IG1fcEVkaXQtPkdldEl0ZXJhdG9yKCkpCisJeworCQlDUFZUX1dvcmRQbGFjZSB3cE9sZCA9IHBJdGVyYXRvci0+R2V0QXQoKTsKKwkJcEl0ZXJhdG9yLT5TZXRBdCh3cFdvcmQpOworCQlDUFZUX1dvcmQgd29yZDsKKwkJaWYgKHBJdGVyYXRvci0+R2V0V29yZCh3b3JkKSkKKwkJeworCQkJcHQgPSBDUERGX1BvaW50KHdvcmQucHRXb3JkLnggKyB3b3JkLmZXaWR0aCwgd29yZC5wdFdvcmQueSArIHdvcmQuZkRlc2NlbnQpOworCQl9CisKKwkJcEl0ZXJhdG9yLT5TZXRBdCh3cE9sZCk7CisJfQorCisJcmV0dXJuIHB0OworfQorCitGWF9CT09MCUNQV0xfRWRpdDo6SXNUZXh0RnVsbCgpIGNvbnN0Cit7CisJcmV0dXJuIG1fcEVkaXQtPklzVGV4dEZ1bGwoKTsKK30KKworRlhfRkxPQVQgQ1BXTF9FZGl0OjpHZXRDaGFyQXJyYXlBdXRvRm9udFNpemUoQ1BERl9Gb250KiBwRm9udCwgY29uc3QgQ1BERl9SZWN0JiByY1BsYXRlLCBGWF9JTlQzMiBuQ2hhckFycmF5KQoreworCWlmIChwRm9udCAmJiAhcEZvbnQtPklzU3RhbmRhcmRGb250KCkpCisJeworCQlGWF9SRUNUIHJjQkJveDsKKwkJcEZvbnQtPkdldEZvbnRCQm94KHJjQkJveCk7CisKKwkJQ1BERl9SZWN0IHJjQ2VsbCA9IHJjUGxhdGU7CisJCUZYX0ZMT0FUIHhkaXYgPSByY0NlbGwuV2lkdGgoKSAvIG5DaGFyQXJyYXkgKiAxMDAwLjBmIC8gcmNCQm94LldpZHRoKCk7CisJCUZYX0ZMT0FUIHlkaXYgPSAtIHJjQ2VsbC5IZWlnaHQoKSAqIDEwMDAuMGYgLyByY0JCb3guSGVpZ2h0KCk7CisKKwkJcmV0dXJuIHhkaXYgPCB5ZGl2ID8geGRpdiA6IHlkaXY7CisJfQorCisJcmV0dXJuIDAuMGY7Cit9CisKK3ZvaWQgQ1BXTF9FZGl0OjpTZXRDaGFyQXJyYXkoRlhfSU5UMzIgbkNoYXJBcnJheSkKK3sKKwlpZiAoSGFzRmxhZyhQRVNfQ0hBUkFSUkFZKSAmJiBuQ2hhckFycmF5ID4gMCkKKwl7CisJCW1fcEVkaXQtPlNldENoYXJBcnJheShuQ2hhckFycmF5KTsJCisJCW1fcEVkaXQtPlNldFRleHRPdmVyZmxvdyhUUlVFKTsKKworCQlpZiAoSGFzRmxhZyhQV1NfQVVUT0ZPTlRTSVpFKSkKKwkJeworCQkJaWYgKElGWF9FZGl0X0ZvbnRNYXAqIHBGb250TWFwID0gdGhpcy0+R2V0Rm9udE1hcCgpKQorCQkJeworCQkJCUZYX0ZMT0FUIGZGb250U2l6ZSA9IEdldENoYXJBcnJheUF1dG9Gb250U2l6ZShwRm9udE1hcC0+R2V0UERGRm9udCgwKSwgR2V0Q2xpZW50UmVjdCgpLCBuQ2hhckFycmF5KTsKKwkJCQlpZiAoZkZvbnRTaXplID4gMC4wZikKKwkJCQl7CisJCQkJCW1fcEVkaXQtPlNldEF1dG9Gb250U2l6ZShGQUxTRSk7CisJCQkJCW1fcEVkaXQtPlNldEZvbnRTaXplKGZGb250U2l6ZSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorfQorCit2b2lkIENQV0xfRWRpdDo6U2V0TGltaXRDaGFyKEZYX0lOVDMyIG5MaW1pdENoYXIpCit7CisJbV9wRWRpdC0+U2V0TGltaXRDaGFyKG5MaW1pdENoYXIpOworfQorCit2b2lkIENQV0xfRWRpdDo6UmVwbGFjZVNlbChGWF9MUENXU1RSIGNzVGV4dCkKK3sKKwltX3BFZGl0LT5DbGVhcigpOworCW1fcEVkaXQtPkluc2VydFRleHQoY3NUZXh0KTsKK30KKworQ1BERl9SZWN0IENQV0xfRWRpdDo6R2V0Rm9jdXNSZWN0KCkgY29uc3QKK3sKKwlyZXR1cm4gQ1BERl9SZWN0KCk7Cit9CisKK3ZvaWQgQ1BXTF9FZGl0OjpTaG93VlNjcm9sbEJhcihGWF9CT09MIGJTaG93KQoreworCWlmIChDUFdMX1Njcm9sbEJhciAqIHBTY3JvbGwgPSBHZXRWU2Nyb2xsQmFyKCkpCisJeworCQlpZiAoYlNob3cpCisJCXsKKwkJCWlmICghcFNjcm9sbC0+SXNWaXNpYmxlKCkpCisJCQl7CisJCQkJcFNjcm9sbC0+U2V0VmlzaWJsZShUUlVFKTsKKwkJCQlDUERGX1JlY3QgcmNXaW5kb3cgPSBHZXRXaW5kb3dSZWN0KCk7CisJCQkJbV9yY09sZFdpbmRvdyA9IHJjV2luZG93OworCQkJCXJjV2luZG93LnJpZ2h0ICs9IFBXTF9TQ1JPTExCQVJfV0lEVEg7CQkJCisJCQkJTW92ZShyY1dpbmRvdywgVFJVRSwgVFJVRSk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQlpZiAocFNjcm9sbC0+SXNWaXNpYmxlKCkpCisJCQl7CisJCQkJcFNjcm9sbC0+U2V0VmlzaWJsZShGQUxTRSk7CisJCQkJTW92ZShtX3JjT2xkV2luZG93LCBUUlVFLCBUUlVFKTsKKwkJCX0JCisJCX0KKwl9Cit9CisKK0ZYX0JPT0wJQ1BXTF9FZGl0OjpJc1ZTY3JvbGxCYXJWaXNpYmxlKCkgY29uc3QKK3sKKwlpZiAoQ1BXTF9TY3JvbGxCYXIgKiBwU2Nyb2xsID0gR2V0VlNjcm9sbEJhcigpKQorCXsKKwkJcmV0dXJuIHBTY3JvbGwtPklzVmlzaWJsZSgpOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKwordm9pZCBDUFdMX0VkaXQ6OkVuYWJsZVNwZWxsQ2hlY2soRlhfQk9PTCBiRW5hYmxlZCkKK3sKKwlpZiAoYkVuYWJsZWQpCisJCUFkZEZsYWcoUEVTX1NQRUxMQ0hFQ0spOworCWVsc2UKKwkJUmVtb3ZlRmxhZyhQRVNfU1BFTExDSEVDSyk7Cit9CisKK0ZYX0JPT0wgQ1BXTF9FZGl0OjpPbktleURvd24oRlhfV09SRCBuQ2hhciwgRlhfRFdPUkQgbkZsYWcpCit7CisJaWYgKG1fYk1vdXNlRG93bikgcmV0dXJuIFRSVUU7CisKKwlpZiAobkNoYXIgPT0gRldMX1ZLRVlfRGVsZXRlKQorCXsKKwkJaWYgKG1fcEZpbGxlck5vdGlmeSkKKwkJeworCQkJRlhfQk9PTCBiUkMgPSBUUlVFOworCQkJRlhfQk9PTCBiRXhpdCA9IEZBTFNFOworCQkJQ0ZYX1dpZGVTdHJpbmcgc3RyQ2hhbmdlOworCQkJQ0ZYX1dpZGVTdHJpbmcgc3RyQ2hhbmdlRXg7CisKKwkJCWludCBuU2VsU3RhcnQgPSAwOworCQkJaW50IG5TZWxFbmQgPSAwOworCQkJR2V0U2VsKG5TZWxTdGFydCwgblNlbEVuZCk7CisKKwkJCWlmIChuU2VsU3RhcnQgPT0gblNlbEVuZCkKKwkJCQluU2VsRW5kID0gblNlbFN0YXJ0ICsgMTsKKwkJCW1fcEZpbGxlck5vdGlmeS0+T25CZWZvcmVLZXlTdHJva2UoVFJVRSwgR2V0QXR0YWNoZWREYXRhKCksIEZXTF9WS0VZX0RlbGV0ZSwgc3RyQ2hhbmdlLCBzdHJDaGFuZ2VFeCwgblNlbFN0YXJ0LCBuU2VsRW5kLCBUUlVFLCBiUkMsIGJFeGl0LCBuRmxhZyk7CisJCQlpZiAoIWJSQykgcmV0dXJuIEZBTFNFOwkJCQkKKwkJCWlmIChiRXhpdCkgcmV0dXJuIEZBTFNFOworCQl9CisJfQorCisJRlhfQk9PTCBiUmV0ID0gQ1BXTF9FZGl0Q3RybDo6T25LZXlEb3duKG5DaGFyLCAgbkZsYWcpOworCisJaWYgKG5DaGFyID09IEZXTF9WS0VZX0RlbGV0ZSkKKwl7CisJCWlmIChtX3BGaWxsZXJOb3RpZnkpCisJCXsKKwkJCUZYX0JPT0wgYkV4aXQgPSBGQUxTRTsKKwkJCW1fcEZpbGxlck5vdGlmeS0+T25BZnRlcktleVN0cm9rZShUUlVFLCBHZXRBdHRhY2hlZERhdGEoKSwgYkV4aXQsbkZsYWcpOworCQkJaWYgKGJFeGl0KSByZXR1cm4gRkFMU0U7CisJCX0KKwl9CisKKwkvL0luIGNhc2Ugb2YgaW1wbGVtZW50YXRpb24gc3dhbGxvdyB0aGUgT25LZXlEb3duIGV2ZW50LgorCWlmKElzUHJvY2VlZHRvT25DaGFyKG5DaGFyLCBuRmxhZykpCisJCQlyZXR1cm4gVFJVRTsKKworCXJldHVybiBiUmV0OworfQorCisvKioKKypJbiBjYXNlIG9mIGltcGxlbWVudGF0aW9uIHN3YWxsb3cgdGhlIE9uS2V5RG93biBldmVudC4gCisqSWYgdGhlIGV2ZW50IGlzIHN3YWxsb3dlZCwgaW1wbGVtZW50YXRpb24gbWF5IGRvIG90aGVyIHVuZXhwZWN0ZWQgdGhpbmdzLCB3aGljaCBpcyBub3QgdGhlIGNvbnRyb2wgbWVhbnMgdG8gZG8uCisqLworRlhfQk9PTCBDUFdMX0VkaXQ6OklzUHJvY2VlZHRvT25DaGFyKEZYX1dPUkQgbktleUNvZGUsIEZYX0RXT1JEIG5GbGFnKQoreworCisJRlhfQk9PTCBiQ3RybCA9IElzQ1RSTHByZXNzZWQobkZsYWcpOworCUZYX0JPT0wgYkFsdCA9IElzQUxUcHJlc3NlZChuRmxhZyk7CisJaWYoYkN0cmwgJiYgIWJBbHQpCisJeworCS8vaG90IGtleXMgZm9yIGVkaXQgY29udHJvbC4JCisJCXN3aXRjaChuS2V5Q29kZSkKKwkJeworCQljYXNlICdDJzoKKwkJY2FzZSAnVic6CisJCWNhc2UgJ1gnOgorCQljYXNlICdBJzoKKwkJY2FzZSAnWic6CisJCQlyZXR1cm4gVFJVRTsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCS8vY29udHJvbCBjaGFyYWN0ZXJzLgorCXN3aXRjaChuS2V5Q29kZSkKKwl7CisJY2FzZSBGV0xfVktFWV9Fc2NhcGU6CisJY2FzZSBGV0xfVktFWV9CYWNrOgorCWNhc2UgRldMX1ZLRVlfUmV0dXJuOgorCWNhc2UgRldMX1ZLRVlfU3BhY2U6CisJCXJldHVybiBUUlVFOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gRkFMU0U7CisKK30KKworRlhfQk9PTCBDUFdMX0VkaXQ6Ok9uQ2hhcihGWF9XT1JEIG5DaGFyLCBGWF9EV09SRCBuRmxhZykKK3sKKwlpZiAobV9iTW91c2VEb3duKSByZXR1cm4gVFJVRTsKKworCUZYX0JPT0wgYlJDID0gVFJVRTsKKwlGWF9CT09MIGJFeGl0ID0gRkFMU0U7CisKKwlGWF9CT09MIGJDdHJsID0gSXNDVFJMcHJlc3NlZChuRmxhZyk7CisJaWYgKCFiQ3RybCkKKwl7CisJCWlmIChtX3BGaWxsZXJOb3RpZnkpCisJCXsKKwkJCUNGWF9XaWRlU3RyaW5nIHN3Q2hhbmdlOworCQkJRlhfSU5UMzIgbktleUNvZGU7CisKKwkJCWludCBuU2VsU3RhcnQgPSAwOworCQkJaW50IG5TZWxFbmQgPSAwOworCQkJR2V0U2VsKG5TZWxTdGFydCwgblNlbEVuZCk7CisKKwkJCXN3aXRjaCAobkNoYXIpCisJCQl7CisJCQljYXNlIEZXTF9WS0VZX0JhY2s6CisJCQkJbktleUNvZGUgPSBuQ2hhcjsKKwkJCQlpZiAoblNlbFN0YXJ0ID09IG5TZWxFbmQpCisJCQkJCW5TZWxTdGFydCA9IG5TZWxFbmQgLSAxOworCQkJCWJyZWFrOworCQkJY2FzZSBGV0xfVktFWV9SZXR1cm46CisJCQkJbktleUNvZGUgPSBuQ2hhcjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJbktleUNvZGUgPSAwOworCQkJCXN3Q2hhbmdlICs9IG5DaGFyOworCQkJCWJyZWFrOworCQkJfQorCQkKKwkJCUNGWF9XaWRlU3RyaW5nIHN0ckNoYW5nZUV4OworCQkJbV9wRmlsbGVyTm90aWZ5LT5PbkJlZm9yZUtleVN0cm9rZShUUlVFLCBHZXRBdHRhY2hlZERhdGEoKSwgbktleUNvZGUsIHN3Q2hhbmdlLCBzdHJDaGFuZ2VFeCwgblNlbFN0YXJ0LCBuU2VsRW5kLCBUUlVFLCBiUkMsIGJFeGl0LCBuRmxhZyk7CisJCX0KKwl9CisKKwlpZiAoIWJSQykgcmV0dXJuIFRSVUU7CisJaWYgKGJFeGl0KSByZXR1cm4gRkFMU0U7CisKKwlpZiAoSUZYX0VkaXRfRm9udE1hcCAqIHBGb250TWFwID0gR2V0Rm9udE1hcCgpKQorCXsKKwkJRlhfSU5UMzIgbk9sZENoYXJTZXQgPSBHZXRDaGFyU2V0KCk7CisJCUZYX0lOVDMyIG5OZXdDaGFyU2V0ID0gcEZvbnRNYXAtPkNoYXJTZXRGcm9tVW5pY29kZShuQ2hhciwgREVGQVVMVF9DSEFSU0VUKTsKKwkJaWYobk9sZENoYXJTZXQgIT0gbk5ld0NoYXJTZXQpCisJCXsKKwkJCVNldENoYXJTZXQobk5ld0NoYXJTZXQpOworCQl9CisJfQorCUZYX0JPT0wgYlJldCA9IENQV0xfRWRpdEN0cmw6Ok9uQ2hhcihuQ2hhcixuRmxhZyk7CisKKwlpZiAoIWJDdHJsKQorCXsKKwkJaWYgKG1fcEZpbGxlck5vdGlmeSkKKwkJeworCQkJbV9wRmlsbGVyTm90aWZ5LT5PbkFmdGVyS2V5U3Ryb2tlKFRSVUUsIEdldEF0dGFjaGVkRGF0YSgpLCBiRXhpdCxuRmxhZyk7CisJCQlpZiAoYkV4aXQpIHJldHVybiBGQUxTRTsKKwkJfQorCX0KKworCXJldHVybiBiUmV0OworfQorCitGWF9CT09MCUNQV0xfRWRpdDo6T25Nb3VzZVdoZWVsKHNob3J0IHpEZWx0YSwgY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZykKK3sKKwlpZiAoSGFzRmxhZyhQRVNfTVVMVElMSU5FKSkKKwl7CisJCUNQREZfUG9pbnQgcHRTY3JvbGwgPSBHZXRTY3JvbGxQb3MoKTsKKworCQlpZiAoekRlbHRhID4gMCkKKwkJeworCQkJcHRTY3JvbGwueSArPSB0aGlzLT5HZXRGb250U2l6ZSgpOworCQl9CisJCWVsc2UKKwkJeworCQkJcHRTY3JvbGwueSAtPSB0aGlzLT5HZXRGb250U2l6ZSgpOworCQl9CisJCXRoaXMtPlNldFNjcm9sbFBvcyhwdFNjcm9sbCk7CisKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCit2b2lkIENQV0xfRWRpdDo6T25JbnNlcnRSZXR1cm4oY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIHBsYWNlLCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgb2xkcGxhY2UpCit7CisJaWYgKEhhc0ZsYWcoUEVTX1NQRUxMQ0hFQ0spKQorCXsKKwkJbV9wRWRpdC0+UmVmcmVzaFdvcmRSYW5nZShDb21iaW5lV29yZFJhbmdlKEdldExhdGluV29yZHNSYW5nZShvbGRwbGFjZSksR2V0TGF0aW5Xb3Jkc1JhbmdlKHBsYWNlKSkpOworCX0KKworCWlmIChtX3BFZGl0Tm90aWZ5KQorCXsKKwkJbV9wRWRpdE5vdGlmeS0+T25JbnNlcnRSZXR1cm4ocGxhY2UsIG9sZHBsYWNlKTsKKwl9Cit9CisKK3ZvaWQgQ1BXTF9FZGl0OjpPbkJhY2tTcGFjZShjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlJiBvbGRwbGFjZSkKK3sKKwlpZiAoSGFzRmxhZyhQRVNfU1BFTExDSEVDSykpCisJeworCQltX3BFZGl0LT5SZWZyZXNoV29yZFJhbmdlKENvbWJpbmVXb3JkUmFuZ2UoR2V0TGF0aW5Xb3Jkc1JhbmdlKG9sZHBsYWNlKSxHZXRMYXRpbldvcmRzUmFuZ2UocGxhY2UpKSk7CisJfQorCisJaWYgKG1fcEVkaXROb3RpZnkpCisJeworCQltX3BFZGl0Tm90aWZ5LT5PbkJhY2tTcGFjZShwbGFjZSwgb2xkcGxhY2UpOworCX0KK30KKwordm9pZCBDUFdMX0VkaXQ6Ok9uRGVsZXRlKGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIG9sZHBsYWNlKQoreworCWlmIChIYXNGbGFnKFBFU19TUEVMTENIRUNLKSkKKwl7CisJCW1fcEVkaXQtPlJlZnJlc2hXb3JkUmFuZ2UoQ29tYmluZVdvcmRSYW5nZShHZXRMYXRpbldvcmRzUmFuZ2Uob2xkcGxhY2UpLEdldExhdGluV29yZHNSYW5nZShwbGFjZSkpKTsKKwl9CisKKwlpZiAobV9wRWRpdE5vdGlmeSkKKwl7CisJCW1fcEVkaXROb3RpZnktPk9uRGVsZXRlKHBsYWNlLCBvbGRwbGFjZSk7CisJfQorfQorCit2b2lkIENQV0xfRWRpdDo6T25DbGVhcihjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlJiBvbGRwbGFjZSkKK3sKKwlpZiAoSGFzRmxhZyhQRVNfU1BFTExDSEVDSykpCisJeworCQltX3BFZGl0LT5SZWZyZXNoV29yZFJhbmdlKENvbWJpbmVXb3JkUmFuZ2UoR2V0TGF0aW5Xb3Jkc1JhbmdlKG9sZHBsYWNlKSxHZXRMYXRpbldvcmRzUmFuZ2UocGxhY2UpKSk7CisJfQorCisJaWYgKG1fcEVkaXROb3RpZnkpCisJeworCQltX3BFZGl0Tm90aWZ5LT5PbkNsZWFyKHBsYWNlLCBvbGRwbGFjZSk7CisJfQorfQorCit2b2lkIENQV0xfRWRpdDo6T25JbnNlcnRXb3JkKGNvbnN0IENQVlRfV29yZFBsYWNlJiBwbGFjZSwgY29uc3QgQ1BWVF9Xb3JkUGxhY2UmIG9sZHBsYWNlKQoreworCWlmIChIYXNGbGFnKFBFU19TUEVMTENIRUNLKSkKKwl7CisJCW1fcEVkaXQtPlJlZnJlc2hXb3JkUmFuZ2UoQ29tYmluZVdvcmRSYW5nZShHZXRMYXRpbldvcmRzUmFuZ2Uob2xkcGxhY2UpLEdldExhdGluV29yZHNSYW5nZShwbGFjZSkpKTsKKwl9CisKKwlpZiAobV9wRWRpdE5vdGlmeSkKKwl7CisJCW1fcEVkaXROb3RpZnktPk9uSW5zZXJ0V29yZChwbGFjZSwgb2xkcGxhY2UpOworCX0KK30KKwordm9pZCBDUFdMX0VkaXQ6Ok9uU2V0VGV4dChjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlJiBvbGRwbGFjZSkKK3sKK30KKwordm9pZCBDUFdMX0VkaXQ6Ok9uSW5zZXJ0VGV4dChjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UsIGNvbnN0IENQVlRfV29yZFBsYWNlJiBvbGRwbGFjZSkKK3sKKwlpZiAoSGFzRmxhZyhQRVNfU1BFTExDSEVDSykpCisJeworCQltX3BFZGl0LT5SZWZyZXNoV29yZFJhbmdlKENvbWJpbmVXb3JkUmFuZ2UoR2V0TGF0aW5Xb3Jkc1JhbmdlKG9sZHBsYWNlKSxHZXRMYXRpbldvcmRzUmFuZ2UocGxhY2UpKSk7CisJfQorCisJaWYgKG1fcEVkaXROb3RpZnkpCisJeworCQltX3BFZGl0Tm90aWZ5LT5Pbkluc2VydFRleHQocGxhY2UsIG9sZHBsYWNlKTsKKwl9Cit9CisKK3ZvaWQgQ1BXTF9FZGl0OjpPbkFkZFVuZG8oSUZYX0VkaXRfVW5kb0l0ZW0qIHBVbmRvSXRlbSkKK3sKKwlpZiAobV9wRWRpdE5vdGlmeSkKKwl7CisJCW1fcEVkaXROb3RpZnktPk9uQWRkVW5kbyh0aGlzKTsKKwl9Cit9CisKK0NQVlRfV29yZFJhbmdlIENQV0xfRWRpdDo6Q29tYmluZVdvcmRSYW5nZShjb25zdCBDUFZUX1dvcmRSYW5nZSYgd3IxLCBjb25zdCBDUFZUX1dvcmRSYW5nZSYgd3IyKQoreworCUNQVlRfV29yZFJhbmdlIHdyUmV0OworCisJaWYgKHdyMS5CZWdpblBvcy5Xb3JkQ21wKHdyMi5CZWdpblBvcykgPCAwKQorCXsKKwkJd3JSZXQuQmVnaW5Qb3MgPSB3cjEuQmVnaW5Qb3M7CisJfQorCWVsc2UKKwl7CisJCXdyUmV0LkJlZ2luUG9zID0gd3IyLkJlZ2luUG9zOworCX0KKworCWlmICh3cjEuRW5kUG9zLldvcmRDbXAod3IyLkVuZFBvcykgPCAwKQorCXsKKwkJd3JSZXQuRW5kUG9zID0gd3IyLkVuZFBvczsKKwl9CisJZWxzZQorCXsKKwkJd3JSZXQuRW5kUG9zID0gd3IxLkVuZFBvczsKKwl9CisKKwlyZXR1cm4gd3JSZXQ7Cit9CisKK0NQVlRfV29yZFJhbmdlIENQV0xfRWRpdDo6R2V0TGF0aW5Xb3Jkc1JhbmdlKGNvbnN0IENQREZfUG9pbnQmIHBvaW50KSBjb25zdAoreworCXJldHVybiBHZXRTYW1lV29yZHNSYW5nZShtX3BFZGl0LT5TZWFyY2hXb3JkUGxhY2UocG9pbnQpLCBUUlVFLCBGQUxTRSk7Cit9CisKK0NQVlRfV29yZFJhbmdlIENQV0xfRWRpdDo6R2V0TGF0aW5Xb3Jkc1JhbmdlKGNvbnN0IENQVlRfV29yZFBsYWNlICYgcGxhY2UpIGNvbnN0Cit7CisJcmV0dXJuIEdldFNhbWVXb3Jkc1JhbmdlKHBsYWNlLCBUUlVFLCBGQUxTRSk7Cit9CisKK0NQVlRfV29yZFJhbmdlIENQV0xfRWRpdDo6R2V0QXJhYmljV29yZHNSYW5nZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlKSBjb25zdAoreworCXJldHVybiBHZXRTYW1lV29yZHNSYW5nZShwbGFjZSwgRkFMU0UsIFRSVUUpOworfQorCisjZGVmaW5lIFBXTF9JU0FSQUJJQ1dPUkQod29yZCkgKCh3b3JkID49IDB4MDYwMCAmJiB3b3JkIDw9IDB4MDZGRikgfHwgKHdvcmQgPj0gMHhGQjUwICYmIHdvcmQgPD0gMHhGRUZDKSkKKworQ1BWVF9Xb3JkUmFuZ2UgQ1BXTF9FZGl0OjpHZXRTYW1lV29yZHNSYW5nZShjb25zdCBDUFZUX1dvcmRQbGFjZSAmIHBsYWNlLCBGWF9CT09MIGJMYXRpbiwgRlhfQk9PTCBiQXJhYmljKSBjb25zdAoreworCUNQVlRfV29yZFJhbmdlIHJhbmdlOworCisJaWYgKElGWF9FZGl0X0l0ZXJhdG9yKiBwSXRlcmF0b3IgPSBtX3BFZGl0LT5HZXRJdGVyYXRvcigpKQorCXsKKwkJQ1BWVF9Xb3JkIHdvcmRpbmZvOwkKKwkJQ1BWVF9Xb3JkUGxhY2Ugd3BTdGFydChwbGFjZSksd3BFbmQocGxhY2UpOwkJCQorCQlwSXRlcmF0b3ItPlNldEF0KHBsYWNlKTsJCQkKKwkJCisJCWlmIChiTGF0aW4pCisJCXsKKwkJCXdoaWxlIChwSXRlcmF0b3ItPk5leHRXb3JkKCkpCisJCQl7CisJCQkJaWYgKHBJdGVyYXRvci0+R2V0V29yZCh3b3JkaW5mbykgJiYgRlhfRURJVF9JU0xBVElOV09SRCh3b3JkaW5mby5Xb3JkKSkKKwkJCQl7CisJCQkJCXdwRW5kID0gcEl0ZXJhdG9yLT5HZXRBdCgpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJZWxzZSAKKwkJCQkJYnJlYWs7CisJCQl9OworCQl9CisJCWVsc2UgaWYgKGJBcmFiaWMpCisJCXsKKwkJCXdoaWxlIChwSXRlcmF0b3ItPk5leHRXb3JkKCkpCisJCQl7CisJCQkJaWYgKHBJdGVyYXRvci0+R2V0V29yZCh3b3JkaW5mbykgJiYgUFdMX0lTQVJBQklDV09SRCh3b3JkaW5mby5Xb3JkKSkKKwkJCQl7CisJCQkJCXdwRW5kID0gcEl0ZXJhdG9yLT5HZXRBdCgpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJZWxzZSAKKwkJCQkJYnJlYWs7CisJCQl9OworCQl9CisKKwkJcEl0ZXJhdG9yLT5TZXRBdChwbGFjZSk7CisKKwkJaWYgKGJMYXRpbikKKwkJeworCQkJZG8KKwkJCXsKKwkJCQlpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmRpbmZvKSAmJiBGWF9FRElUX0lTTEFUSU5XT1JEKHdvcmRpbmZvLldvcmQpKQorCQkJCXsJCQkJCQorCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJd3BTdGFydCA9IHBJdGVyYXRvci0+R2V0QXQoKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJd2hpbGUgKHBJdGVyYXRvci0+UHJldldvcmQoKSk7CisJCX0KKwkJZWxzZSBpZiAoYkFyYWJpYykKKwkJeworCQkJZG8KKwkJCXsKKwkJCQlpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmRpbmZvKSAmJiBQV0xfSVNBUkFCSUNXT1JEKHdvcmRpbmZvLldvcmQpKQorCQkJCXsJCQkJCQorCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJd3BTdGFydCA9IHBJdGVyYXRvci0+R2V0QXQoKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJd2hpbGUgKHBJdGVyYXRvci0+UHJldldvcmQoKSk7CisJCX0KKworCQlyYW5nZS5TZXQod3BTdGFydCx3cEVuZCk7CisJfQkKKworCXJldHVybiByYW5nZTsKK30KKwordm9pZCBDUFdMX0VkaXQ6OkFqdXN0QXJhYmljV29yZHMoY29uc3QgQ1BWVF9Xb3JkUmFuZ2UmIHdyKQoreworfQorCit2b2lkIENQV0xfRWRpdDo6R2VuZXJhdGVQYWdlT2JqZWN0cyhDUERGX1BhZ2VPYmplY3RzKiBwUGFnZU9iamVjdHMsIAorCQkJCQkJCQkJCWNvbnN0IENQREZfUG9pbnQmIHB0T2Zmc2V0LCBDRlhfQXJyYXlUZW1wbGF0ZTxDUERGX1RleHRPYmplY3QqPiYgT2JqQXJyYXkpCit7CisJSUZYX0VkaXQ6OkdlbmVyYXRlUGFnZU9iamVjdHMocFBhZ2VPYmplY3RzLCBtX3BFZGl0LCBwdE9mZnNldCwgTlVMTCwgQ1BXTF9VdGlsczo6UFdMQ29sb3JUb0ZYQ29sb3IoR2V0VGV4dENvbG9yKCksR2V0VHJhbnNwYXJlbmN5KCkpLCBPYmpBcnJheSk7Cit9CisKK3ZvaWQgQ1BXTF9FZGl0OjpHZW5lcmF0ZVBhZ2VPYmplY3RzKENQREZfUGFnZU9iamVjdHMqIHBQYWdlT2JqZWN0cywgCisJCQkJCQkJCQljb25zdCBDUERGX1BvaW50JiBwdE9mZnNldCkKK3sKKwlDRlhfQXJyYXlUZW1wbGF0ZTxDUERGX1RleHRPYmplY3QqPiBPYmpBcnJheTsKKwlJRlhfRWRpdDo6R2VuZXJhdGVQYWdlT2JqZWN0cyhwUGFnZU9iamVjdHMsIG1fcEVkaXQsIHB0T2Zmc2V0LCBOVUxMLCBDUFdMX1V0aWxzOjpQV0xDb2xvclRvRlhDb2xvcihHZXRUZXh0Q29sb3IoKSxHZXRUcmFuc3BhcmVuY3koKSksIE9iakFycmF5KTsKK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9FZGl0Q3RybC5jcHAgYi9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX0VkaXRDdHJsLmNwcAppbmRleCAyNTYyODIyLi45MGExOThhIDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX0VkaXRDdHJsLmNwcAorKysgYi9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX0VkaXRDdHJsLmNwcApAQCAtMSw3MjggKzEsNzI4IEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUERGV2luZG93LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9XbmQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0VkaXRDdHJsLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9TY3JvbGxCYXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1V0aWxzLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9DYXJldC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfRm9udE1hcC5oIg0KLQ0KLSNkZWZpbmUgSXNGbG9hdFplcm8oZikJCQkJCQkoKGYpIDwgMC4wMDAxICYmIChmKSA+IC0wLjAwMDEpDQotI2RlZmluZSBJc0Zsb2F0QmlnZ2VyKGZhLGZiKQkJCQkoKGZhKSA+IChmYikgJiYgIUlzRmxvYXRaZXJvKChmYSkgLSAoZmIpKSkNCi0jZGVmaW5lIElzRmxvYXRTbWFsbGVyKGZhLGZiKQkJCQkoKGZhKSA8IChmYikgJiYgIUlzRmxvYXRaZXJvKChmYSkgLSAoZmIpKSkNCi0jZGVmaW5lIElzRmxvYXRFcXVhbChmYSxmYikJCQkJCUlzRmxvYXRaZXJvKChmYSktKGZiKSkNCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfRWRpdEN0cmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ1BXTF9FZGl0Q3RybDo6Q1BXTF9FZGl0Q3RybCgpIDoNCi0JbV9wRWRpdChOVUxMKSwNCi0JbV9wRWRpdENhcmV0KE5VTEwpLA0KLQltX2JNb3VzZURvd24oRkFMU0UpLA0KLQltX3BFZGl0Tm90aWZ5KE5VTEwpLA0KLQltX25DaGFyU2V0KERFRkFVTFRfQ0hBUlNFVCksDQotCW1fbkNvZGVQYWdlKDApDQotew0KLQltX3BFZGl0ID0gSUZYX0VkaXQ6Ok5ld0VkaXQoKTsNCi0JQVNTRVJUKG1fcEVkaXQgIT0gTlVMTCk7DQotfQ0KLQ0KLUNQV0xfRWRpdEN0cmw6On5DUFdMX0VkaXRDdHJsKCkNCi17DQotCUlGWF9FZGl0OjpEZWxFZGl0KG1fcEVkaXQpOw0KLX0NCi0NCi12b2lkIENQV0xfRWRpdEN0cmw6Ok9uQ3JlYXRlKFBXTF9DUkVBVEVQQVJBTSAmIGNwKQ0KLXsNCi0JY3AuZUN1cnNvclR5cGUgPSBGWENUX1ZCRUFNOw0KLX0NCi0NCi12b2lkIENQV0xfRWRpdEN0cmw6Ok9uQ3JlYXRlZCgpDQotew0KLQlTZXRGb250U2l6ZSh0aGlzLT5HZXRDcmVhdGlvblBhcmFtKCkuZkZvbnRTaXplKTsNCi0NCi0JbV9wRWRpdC0+U2V0Rm9udE1hcCh0aGlzLT5HZXRGb250TWFwKCkpOw0KLQltX3BFZGl0LT5TZXROb3RpZnkodGhpcyk7DQotCW1fcEVkaXQtPkluaXRpYWxpemUoKTsNCi19DQotDQotRlhfQk9PTCBDUFdMX0VkaXRDdHJsOjpJc1duZEhvclYoKQ0KLXsNCi0JQ1BERl9NYXRyaXggbXQgPSBHZXRXaW5kb3dNYXRyaXgoKTsNCi0JQ1BERl9Qb2ludCBwb2ludDEoMCwxKTsNCi0JQ1BERl9Qb2ludCBwb2ludDIoMSwxKTsNCi0NCi0JbXQuVHJhbnNmb3JtKHBvaW50MS54LCBwb2ludDEueSk7DQotCW10LlRyYW5zZm9ybShwb2ludDIueCwgcG9pbnQyLnkpOw0KLQ0KLQlyZXR1cm4gcG9pbnQyLnkgPT0gcG9pbnQxLnk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9FZGl0Q3RybDo6U2V0Q3Vyc29yKCkNCi17DQotCWlmIChJc1ZhbGlkKCkpIA0KLQl7DQotCQlpZiAoSUZYX1N5c3RlbUhhbmRsZXIqIHBTSCA9IEdldFN5c3RlbUhhbmRsZXIoKSkNCi0JCXsNCi0JCQlpZiAoSXNXbmRIb3JWKCkpDQotCQkJCXBTSC0+U2V0Q3Vyc29yKEZYQ1RfVkJFQU0pOw0KLQkJCWVsc2UNCi0JCQkJcFNILT5TZXRDdXJzb3IoRlhDVF9IQkVBTSk7DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBDUFdMX0VkaXRDdHJsOjpSZVBvc0NoaWxkV25kKCkNCi17DQotCW1fcEVkaXQtPlNldFBsYXRlUmVjdChHZXRDbGllbnRSZWN0KCkpOw0KLX0NCi0NCi12b2lkIENQV0xfRWRpdEN0cmw6Ok9uTm90aWZ5KENQV0xfV25kKiBwV25kLCBGWF9EV09SRCBtc2csIEZYX0lOVFBUUiB3UGFyYW0sIEZYX0lOVFBUUiBsUGFyYW0pDQotew0KLQlDUFdMX1duZDo6T25Ob3RpZnkocFduZCxtc2csd1BhcmFtLGxQYXJhbSk7DQotDQotCXN3aXRjaCAobXNnKQ0KLQl7DQotCQljYXNlIFBOTV9TRVRTQ1JPTExJTkZPOg0KLQkJCXN3aXRjaCAod1BhcmFtKQ0KLQkJCXsNCi0JCQkJY2FzZSBTQlRfVlNDUk9MTDoNCi0JCQkJCWlmIChDUFdMX1duZCAqIHBDaGlsZCA9IEdldFZTY3JvbGxCYXIoKSkNCi0JCQkJCXsNCi0JCQkJCQlwQ2hpbGQtPk9uTm90aWZ5KHBXbmQsUE5NX1NFVFNDUk9MTElORk8sd1BhcmFtLGxQYXJhbSk7DQotCQkJCQl9DQotCQkJCQlicmVhazsNCi0JCQl9DQotCQkJYnJlYWs7DQotCQljYXNlIFBOTV9TRVRTQ1JPTExQT1M6CQkJDQotCQkJc3dpdGNoICh3UGFyYW0pDQotCQkJew0KLQkJCQljYXNlIFNCVF9WU0NST0xMOg0KLQkJCQkJaWYgKENQV0xfV25kICogcENoaWxkID0gR2V0VlNjcm9sbEJhcigpKQ0KLQkJCQkJew0KLQkJCQkJCXBDaGlsZC0+T25Ob3RpZnkocFduZCxQTk1fU0VUU0NST0xMUE9TLHdQYXJhbSxsUGFyYW0pOw0KLQkJCQkJfQ0KLQkJCQkJYnJlYWs7DQotCQkJfQ0KLQkJCWJyZWFrOw0KLQkJY2FzZSBQTk1fU0NST0xMV0lORE9XOg0KLQkJCXsNCi0JCQkJRlhfRkxPQVQgZlBvcyA9ICooRlhfRkxPQVQqKWxQYXJhbTsNCi0JCQkJc3dpdGNoICh3UGFyYW0pDQotCQkJCXsNCi0JCQkJCWNhc2UgU0JUX1ZTQ1JPTEw6DQotCQkJCQkJbV9wRWRpdC0+U2V0U2Nyb2xsUG9zKENQREZfUG9pbnQobV9wRWRpdC0+R2V0U2Nyb2xsUG9zKCkueCxmUG9zKSk7DQotCQkJCQkJYnJlYWs7DQotCQkJCX0NCi0JCQl9DQotCQkJYnJlYWs7DQotCQljYXNlIFBOTV9TRVRDQVJFVElORk86DQotCQkJew0KLQkJCQlpZiAoUFdMX0NBUkVUX0lORk8gKiBwQ2FyZXRJbmZvID0gKFBXTF9DQVJFVF9JTkZPICopd1BhcmFtKQ0KLQkJCQl7DQotCQkJCQl0aGlzLT5TZXRDYXJldChwQ2FyZXRJbmZvLT5iVmlzaWJsZSwNCi0JCQkJCQlwQ2FyZXRJbmZvLT5wdEhlYWQsDQotCQkJCQkJcENhcmV0SW5mby0+cHRGb290KTsJCQkJCQ0KLQkJCQl9DQotCQkJfQ0KLQkJCWJyZWFrOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9FZGl0Q3RybDo6Q3JlYXRlQ2hpbGRXbmQoY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApDQotew0KLQlpZiAoIUlzUmVhZE9ubHkoKSkNCi0JCUNyZWF0ZUVkaXRDYXJldChjcCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9FZGl0Q3RybDo6Q3JlYXRlRWRpdENhcmV0KGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKQ0KLXsNCi0JaWYgKCFtX3BFZGl0Q2FyZXQpDQotCXsNCi0JCW1fcEVkaXRDYXJldCA9IG5ldyBDUFdMX0NhcmV0OwkNCi0JCW1fcEVkaXRDYXJldC0+U2V0SW52YWxpZFJlY3QoR2V0Q2xpZW50UmVjdCgpKTsNCi0NCi0JCVBXTF9DUkVBVEVQQVJBTQllY3AgPSBjcDsNCi0JCWVjcC5wUGFyZW50V25kID0gdGhpczsNCi0JCWVjcC5kd0ZsYWdzID0gUFdTX0NISUxEIHwgUFdTX05PUkVGUkVTSENMSVA7DQotCQllY3AuZHdCb3JkZXJXaWR0aCA9IDA7DQotCQllY3AubkJvcmRlclN0eWxlID0gUEJTX1NPTElEOw0KLQkJZWNwLnJjUmVjdFduZCA9IENQREZfUmVjdCgwLDAsMCwwKTsNCi0NCi0JCW1fcEVkaXRDYXJldC0+Q3JlYXRlKGVjcCk7DQotCX0NCi19DQotDQotdm9pZCBDUFdMX0VkaXRDdHJsOjpTZXRGb250U2l6ZShGWF9GTE9BVCBmRm9udFNpemUpDQotew0KLQltX3BFZGl0LT5TZXRGb250U2l6ZShmRm9udFNpemUpOw0KLX0NCi0NCi1GWF9GTE9BVCBDUFdMX0VkaXRDdHJsOjpHZXRGb250U2l6ZSgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9wRWRpdC0+R2V0Rm9udFNpemUoKTsNCi19DQotDQotRlhfQk9PTCBDUFdMX0VkaXRDdHJsOjpPbktleURvd24oRlhfV09SRCBuQ2hhciwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlpZiAobV9iTW91c2VEb3duKSByZXR1cm4gVFJVRTsNCi0NCi0JRlhfQk9PTCBiUmV0ID0gQ1BXTF9XbmQ6Ok9uS2V5RG93bihuQ2hhcixuRmxhZyk7DQotDQotCS8vRklMVEVSDQotCXN3aXRjaCAobkNoYXIpDQotCXsNCi0JZGVmYXVsdDoNCi0JCXJldHVybiBGQUxTRTsNCi0JY2FzZSBGV0xfVktFWV9EZWxldGU6DQotCWNhc2UgRldMX1ZLRVlfVXA6DQotCWNhc2UgRldMX1ZLRVlfRG93bjoNCi0JY2FzZSBGV0xfVktFWV9MZWZ0Og0KLQljYXNlIEZXTF9WS0VZX1JpZ2h0Og0KLQljYXNlIEZXTF9WS0VZX0hvbWU6DQotCWNhc2UgRldMX1ZLRVlfRW5kOg0KLQljYXNlIEZXTF9WS0VZX0luc2VydDoNCi0JY2FzZSAnQyc6DQotCWNhc2UgJ1YnOg0KLQljYXNlICdYJzoNCi0JY2FzZSAnQSc6DQotCWNhc2UgJ1onOg0KLQljYXNlICdjJzoNCi0JY2FzZSAndic6DQotCWNhc2UgJ3gnOg0KLQljYXNlICdhJzoNCi0JY2FzZSAneic6DQotCQlicmVhazsNCi0JfQ0KLQ0KLQlpZiAobkNoYXIgPT0gRldMX1ZLRVlfRGVsZXRlKQ0KLQl7DQotCQlpZiAobV9wRWRpdC0+SXNTZWxlY3RlZCgpKQ0KLQkJCW5DaGFyID0gRldMX1ZLRVlfVW5rbm93bjsNCi0JfQ0KLQ0KLQlzd2l0Y2ggKG5DaGFyKQ0KLQl7DQotCQljYXNlIEZXTF9WS0VZX0RlbGV0ZToJDQotCQkJRGVsZXRlKCk7DQotCQkJcmV0dXJuIFRSVUU7DQotCQljYXNlIEZXTF9WS0VZX0luc2VydDoNCi0JCQlpZiAoSXNTSElGVHByZXNzZWQobkZsYWcpKQ0KLQkJCQlQYXN0ZVRleHQoKTsNCi0JCQlyZXR1cm4gVFJVRTsNCi0JCWNhc2UgRldMX1ZLRVlfVXA6DQotCQkJbV9wRWRpdC0+T25WS19VUChJc1NISUZUcHJlc3NlZChuRmxhZyksRkFMU0UpOw0KLQkJCXJldHVybiBUUlVFOw0KLQkJY2FzZSBGV0xfVktFWV9Eb3duOg0KLQkJCW1fcEVkaXQtPk9uVktfRE9XTihJc1NISUZUcHJlc3NlZChuRmxhZyksRkFMU0UpOw0KLQkJCXJldHVybiBUUlVFOw0KLQkJY2FzZSBGV0xfVktFWV9MZWZ0Og0KLQkJCW1fcEVkaXQtPk9uVktfTEVGVChJc1NISUZUcHJlc3NlZChuRmxhZyksRkFMU0UpOw0KLQkJCXJldHVybiBUUlVFOw0KLQkJY2FzZSBGV0xfVktFWV9SaWdodDoNCi0JCQltX3BFZGl0LT5PblZLX1JJR0hUKElzU0hJRlRwcmVzc2VkKG5GbGFnKSxGQUxTRSk7DQotCQkJcmV0dXJuIFRSVUU7DQotCQljYXNlIEZXTF9WS0VZX0hvbWU6DQotCQkJbV9wRWRpdC0+T25WS19IT01FKElzU0hJRlRwcmVzc2VkKG5GbGFnKSxJc0NUUkxwcmVzc2VkKG5GbGFnKSk7DQotCQkJcmV0dXJuIFRSVUU7DQotCQljYXNlIEZXTF9WS0VZX0VuZDoNCi0JCQltX3BFZGl0LT5PblZLX0VORChJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpOw0KLQkJCXJldHVybiBUUlVFOw0KLQkJY2FzZSBGV0xfVktFWV9Vbmtub3duOg0KLQkJCWlmICghSXNTSElGVHByZXNzZWQobkZsYWcpKQ0KLQkJCQlDbGVhcigpOw0KLQkJCWVsc2UNCi0JCQkJQ3V0VGV4dCgpOw0KLQkJCXJldHVybiBUUlVFOw0KLQkJZGVmYXVsdDoNCi0JCQlicmVhazsNCi0JfQ0KLQkNCi0JcmV0dXJuIGJSZXQ7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9FZGl0Q3RybDo6T25DaGFyKEZYX1dPUkQgbkNoYXIsIEZYX0RXT1JEIG5GbGFnKQ0KLXsNCi0JaWYgKG1fYk1vdXNlRG93bikgcmV0dXJuIFRSVUU7DQotDQotCUNQV0xfV25kOjpPbkNoYXIobkNoYXIsbkZsYWcpOw0KLQ0KLQkvL0ZJTFRFUg0KLQlzd2l0Y2ggKG5DaGFyKQ0KLQl7DQotCQljYXNlIDB4MEE6DQotCQljYXNlIDB4MUI6DQotCQkJcmV0dXJuIEZBTFNFOwkJDQotCQlkZWZhdWx0Og0KLQkJCWJyZWFrOw0KLQl9DQotDQotCUZYX0JPT0wgYkN0cmwgPSBJc0NUUkxwcmVzc2VkKG5GbGFnKTsNCi0JRlhfQk9PTCBiQWx0ID0gSXNBTFRwcmVzc2VkKG5GbGFnKTsNCi0JRlhfQk9PTCBiU2hpZnQgPSBJc1NISUZUcHJlc3NlZChuRmxhZyk7DQotDQotCUZYX1dPUkQgd29yZCA9IG5DaGFyOw0KLQ0KLQlpZiAoYkN0cmwgJiYgIWJBbHQpDQotCXsNCi0JCXN3aXRjaCAobkNoYXIpDQotCQl7DQotCQkJY2FzZSAnQycgLSAnQScgKyAxOg0KLQkJCQl0aGlzLT5Db3B5VGV4dCgpOw0KLQkJCQlyZXR1cm4gVFJVRTsNCi0JCQljYXNlICdWJyAtICdBJyArIDE6DQotCQkJCXRoaXMtPlBhc3RlVGV4dCgpOw0KLQkJCQlyZXR1cm4gVFJVRTsNCi0JCQljYXNlICdYJyAtICdBJyArIDE6DQotCQkJCXRoaXMtPkN1dFRleHQoKTsNCi0JCQkJcmV0dXJuIFRSVUU7DQotCQkJY2FzZSAnQScgLSAnQScgKyAxOg0KLQkJCQl0aGlzLT5TZWxlY3RBbGwoKTsNCi0JCQkJcmV0dXJuIFRSVUU7DQotCQkJY2FzZSAnWicgLSAnQScgKyAxOg0KLQkJCQlpZiAoYlNoaWZ0KQ0KLQkJCQkJUmVkbygpOw0KLQkJCQllbHNlDQotCQkJCQlVbmRvKCk7DQotCQkJCXJldHVybiBUUlVFOw0KLQkJCWRlZmF1bHQ6DQotCQkJCWlmIChuQ2hhciA8IDMyKQ0KLQkJCQkJcmV0dXJuIEZBTFNFOw0KLQkJfQ0KLQl9DQotDQotCWlmIChJc1JlYWRPbmx5KCkpIHJldHVybiBUUlVFOw0KLQ0KLQlpZiAobV9wRWRpdC0+SXNTZWxlY3RlZCgpICYmIHdvcmQgPT0gIEZXTF9WS0VZX0JhY2spDQotCQl3b3JkID0gRldMX1ZLRVlfVW5rbm93bjsNCi0NCi0JQ2xlYXIoKTsNCi0NCi0Jc3dpdGNoICh3b3JkKQ0KLQl7DQotCWNhc2UgRldMX1ZLRVlfQmFjazoNCi0JCUJhY2tzcGFjZSgpOw0KLQkJYnJlYWs7DQotCWNhc2UgRldMX1ZLRVlfUmV0dXJuOgkNCi0JCUluc2VydFJldHVybigpOw0KLQkJYnJlYWs7DQotCWNhc2UgRldMX1ZLRVlfVW5rbm93bjoNCi0JCWJyZWFrOw0KLQlkZWZhdWx0Og0KLQkJaWYgKElzSU5TRVJUcHJlc3NlZChuRmxhZykpDQotCQkJRGVsZXRlKCk7DQotCQlJbnNlcnRXb3JkKHdvcmQsIHRoaXMtPkdldENoYXJTZXQoKSk7DQotCQlicmVhazsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBDUFdMX0VkaXRDdHJsOjpPbkxCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlDUFdMX1duZDo6T25MQnV0dG9uRG93bihwb2ludCxuRmxhZyk7DQotDQotCWlmIChDbGllbnRIaXRUZXN0KHBvaW50KSkNCi0JewkJDQotCQlpZiAobV9iTW91c2VEb3duKQ0KLQkJCXRoaXMtPkludmFsaWRhdGVSZWN0KCk7DQotDQotCQltX2JNb3VzZURvd24gPSBUUlVFOwkJDQotCQlTZXRDYXB0dXJlKCk7DQotDQotCQltX3BFZGl0LT5Pbk1vdXNlRG93bihwb2ludCxJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpOw0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIENQV0xfRWRpdEN0cmw6Ok9uTEJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlDUFdMX1duZDo6T25MQnV0dG9uVXAocG9pbnQsbkZsYWcpOw0KLQ0KLQlpZiAobV9iTW91c2VEb3duKQ0KLQl7DQotCQkvL2NhbiByZWNlaXZlIGtleWJvcmQgbWVzc2FnZQ0KLQkJaWYgKENsaWVudEhpdFRlc3QocG9pbnQpICYmICF0aGlzLT5Jc0ZvY3VzZWQoKSkNCi0JCQlTZXRGb2N1cygpOwkNCi0NCi0JCVJlbGVhc2VDYXB0dXJlKCk7DQotCQltX2JNb3VzZURvd24gPSBGQUxTRTsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBDUFdMX0VkaXRDdHJsOjpPbk1vdXNlTW92ZShjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKQ0KLXsNCi0JQ1BXTF9XbmQ6Ok9uTW91c2VNb3ZlKHBvaW50LG5GbGFnKTsNCi0NCi0JaWYgKG1fYk1vdXNlRG93bikNCi0JCW1fcEVkaXQtPk9uTW91c2VNb3ZlKHBvaW50LEZBTFNFLEZBTFNFKTsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUNQREZfUmVjdCBDUFdMX0VkaXRDdHJsOjpHZXRDb250ZW50UmVjdCgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9wRWRpdC0+R2V0Q29udGVudFJlY3QoKTsNCi19DQotDQotdm9pZCBDUFdMX0VkaXRDdHJsOjpTZXRFZGl0Q2FyZXQoRlhfQk9PTCBiVmlzaWJsZSkNCi17DQotCUNQREZfUG9pbnQgcHRIZWFkKDAsMCkscHRGb290KDAsMCk7DQotDQotCWlmIChiVmlzaWJsZSkNCi0Jew0KLQkJR2V0Q2FyZXRJbmZvKHB0SGVhZCxwdEZvb3QpOw0KLQl9DQotDQotCUNQVlRfV29yZFBsYWNlIHdwVGVtcCA9IG1fcEVkaXQtPkdldENhcmV0V29yZFBsYWNlKCk7DQotCXRoaXMtPklPblNldENhcmV0KGJWaXNpYmxlLHB0SGVhZCxwdEZvb3Qsd3BUZW1wKTsNCi19DQotDQotdm9pZCBDUFdMX0VkaXRDdHJsOjpHZXRDYXJldEluZm8oQ1BERl9Qb2ludCAmIHB0SGVhZCwgQ1BERl9Qb2ludCAmIHB0Rm9vdCkgY29uc3QNCi17DQotCWlmIChJRlhfRWRpdF9JdGVyYXRvciAqIHBJdGVyYXRvciA9IG1fcEVkaXQtPkdldEl0ZXJhdG9yKCkpDQotCXsNCi0JCXBJdGVyYXRvci0+U2V0QXQobV9wRWRpdC0+R2V0Q2FyZXQoKSk7DQotCQlDUFZUX1dvcmQgd29yZDsNCi0JCUNQVlRfTGluZSBsaW5lOw0KLQkJaWYgKHBJdGVyYXRvci0+R2V0V29yZCh3b3JkKSkNCi0JCXsNCi0JCQlwdEhlYWQueCA9IHdvcmQucHRXb3JkLnggKyB3b3JkLmZXaWR0aDsNCi0JCQlwdEhlYWQueSA9IHdvcmQucHRXb3JkLnkgKyB3b3JkLmZBc2NlbnQ7DQotCQkJcHRGb290LnggPSB3b3JkLnB0V29yZC54ICsgd29yZC5mV2lkdGg7DQotCQkJcHRGb290LnkgPSB3b3JkLnB0V29yZC55ICsgd29yZC5mRGVzY2VudDsNCi0JCX0NCi0JCWVsc2UgaWYgKHBJdGVyYXRvci0+R2V0TGluZShsaW5lKSkNCi0JCXsJCQkJDQotCQkJcHRIZWFkLnggPSBsaW5lLnB0TGluZS54Ow0KLQkJCXB0SGVhZC55ID0gbGluZS5wdExpbmUueSArIGxpbmUuZkxpbmVBc2NlbnQ7DQotCQkJcHRGb290LnggPSBsaW5lLnB0TGluZS54Ow0KLQkJCXB0Rm9vdC55ID0gbGluZS5wdExpbmUueSArIGxpbmUuZkxpbmVEZXNjZW50Ow0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9FZGl0Q3RybDo6R2V0Q2FyZXRQb3MoRlhfSU5UMzImIHgsIEZYX0lOVDMyJiB5KSBjb25zdA0KLXsNCi0JQ1BERl9Qb2ludCBwdEhlYWQoMCwwKSwgcHRGb290KDAsMCk7DQotDQotCUdldENhcmV0SW5mbyhwdEhlYWQscHRGb290KTsNCi0NCi0JUFdMdG9XbmQocHRIZWFkLCB4LCB5KTsNCi19DQotDQotdm9pZCBDUFdMX0VkaXRDdHJsOjpTZXRDYXJldChGWF9CT09MIGJWaXNpYmxlLCBjb25zdCBDUERGX1BvaW50ICYgcHRIZWFkLCBjb25zdCBDUERGX1BvaW50ICYgcHRGb290KQ0KLXsNCi0JaWYgKG1fcEVkaXRDYXJldCkNCi0Jew0KLQkJaWYgKCFJc0ZvY3VzZWQoKSB8fCBtX3BFZGl0LT5Jc1NlbGVjdGVkKCkpDQotCQkJYlZpc2libGUgPSBGQUxTRTsNCi0NCi0JCW1fcEVkaXRDYXJldC0+U2V0Q2FyZXQoYlZpc2libGUsIHB0SGVhZCwgcHRGb290KTsNCi0JfQ0KLX0NCi0NCi1GWF9CT09MCUNQV0xfRWRpdEN0cmw6OklzTW9kaWZpZWQoKSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fcEVkaXQtPklzTW9kaWZpZWQoKTsNCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgQ1BXTF9FZGl0Q3RybDo6R2V0VGV4dCgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9wRWRpdC0+R2V0VGV4dCgpOw0KLX0NCi0NCi12b2lkIENQV0xfRWRpdEN0cmw6OlNldFNlbChGWF9JTlQzMiBuU3RhcnRDaGFyLEZYX0lOVDMyIG5FbmRDaGFyKQ0KLXsNCi0JbV9wRWRpdC0+U2V0U2VsKG5TdGFydENoYXIsIG5FbmRDaGFyKTsNCi19DQotDQotdm9pZCBDUFdMX0VkaXRDdHJsOjpHZXRTZWwoRlhfSU5UMzIgJiBuU3RhcnRDaGFyLCBGWF9JTlQzMiAmIG5FbmRDaGFyICkgY29uc3QNCi17DQotCW1fcEVkaXQtPkdldFNlbChuU3RhcnRDaGFyLCBuRW5kQ2hhcik7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9FZGl0Q3RybDo6Q2xlYXIoKQ0KLXsNCi0JaWYgKCFJc1JlYWRPbmx5KCkpDQotCQltX3BFZGl0LT5DbGVhcigpOw0KLX0NCi0NCi12b2lkIENQV0xfRWRpdEN0cmw6OlNlbGVjdEFsbCgpDQotew0KLQltX3BFZGl0LT5TZWxlY3RBbGwoKTsNCi19DQotDQotdm9pZCBDUFdMX0VkaXRDdHJsOjpQYWludCgpDQotew0KLQlpZiAobV9wRWRpdCkNCi0JCW1fcEVkaXQtPlBhaW50KCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9FZGl0Q3RybDo6RW5hYmxlUmVmcmVzaChGWF9CT09MIGJSZWZyZXNoKQ0KLXsNCi0JaWYgKG1fcEVkaXQpDQotCQltX3BFZGl0LT5FbmFibGVSZWZyZXNoKGJSZWZyZXNoKTsNCi19DQotDQotRlhfSU5UMzIgQ1BXTF9FZGl0Q3RybDo6R2V0Q2FyZXQoKSBjb25zdA0KLXsNCi0JaWYgKG1fcEVkaXQpDQotCQlyZXR1cm4gbV9wRWRpdC0+R2V0Q2FyZXQoKTsNCi0NCi0JcmV0dXJuIC0xOw0KLX0NCi0NCi12b2lkIENQV0xfRWRpdEN0cmw6OlNldENhcmV0KEZYX0lOVDMyIG5Qb3MpDQotew0KLQlpZiAobV9wRWRpdCkNCi0JCW1fcEVkaXQtPlNldENhcmV0KG5Qb3MpOw0KLX0NCi0NCi1GWF9JTlQzMiBDUFdMX0VkaXRDdHJsOjpHZXRUb3RhbFdvcmRzKCkgY29uc3QNCi17DQotCWlmIChtX3BFZGl0KQ0KLQkJcmV0dXJuIG1fcEVkaXQtPkdldFRvdGFsV29yZHMoKTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9FZGl0Q3RybDo6U2V0U2Nyb2xsUG9zKGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQ0KLXsNCi0JaWYgKG1fcEVkaXQpDQotCQltX3BFZGl0LT5TZXRTY3JvbGxQb3MocG9pbnQpOw0KLX0NCi0NCi1DUERGX1BvaW50IENQV0xfRWRpdEN0cmw6OkdldFNjcm9sbFBvcygpIGNvbnN0DQotew0KLQlpZiAobV9wRWRpdCkNCi0JCXJldHVybiBtX3BFZGl0LT5HZXRTY3JvbGxQb3MoKTsNCi0NCi0JcmV0dXJuIENQREZfUG9pbnQoMC4wZiwgMC4wZik7DQotfQ0KLQ0KLUNQREZfRm9udCAqIENQV0xfRWRpdEN0cmw6OkdldENhcmV0Rm9udCgpIGNvbnN0DQotew0KLQlGWF9JTlQzMiBuRm9udEluZGV4ID0gMDsNCi0NCi0JaWYgKElGWF9FZGl0X0l0ZXJhdG9yICogcEl0ZXJhdG9yID0gbV9wRWRpdC0+R2V0SXRlcmF0b3IoKSkNCi0Jew0KLQkJcEl0ZXJhdG9yLT5TZXRBdChtX3BFZGl0LT5HZXRDYXJldCgpKTsNCi0JCUNQVlRfV29yZCB3b3JkOw0KLQkJQ1BWVF9TZWN0aW9uIHNlY3Rpb247DQotCQlpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmQpKQ0KLQkJew0KLQkJCW5Gb250SW5kZXggPSB3b3JkLm5Gb250SW5kZXg7DQotCQl9DQotCQllbHNlIGlmIChIYXNGbGFnKFBFU19SSUNIKSkNCi0JCXsNCi0JCQlpZiAocEl0ZXJhdG9yLT5HZXRTZWN0aW9uKHNlY3Rpb24pKQ0KLQkJCXsJCQkJDQotCQkJCW5Gb250SW5kZXggPSBzZWN0aW9uLldvcmRQcm9wcy5uRm9udEluZGV4Ow0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQlpZiAoSUZYX0VkaXRfRm9udE1hcCAqIHBGb250TWFwID0gR2V0Rm9udE1hcCgpKQ0KLQkJcmV0dXJuIHBGb250TWFwLT5HZXRQREZGb250KG5Gb250SW5kZXgpOw0KLQllbHNlDQotCQlyZXR1cm4gTlVMTDsNCi19DQotDQotRlhfRkxPQVQgQ1BXTF9FZGl0Q3RybDo6R2V0Q2FyZXRGb250U2l6ZSgpIGNvbnN0DQotew0KLQlGWF9GTE9BVCBmRm9udFNpemUgPSBHZXRGb250U2l6ZSgpOw0KLQ0KLQlpZiAoSUZYX0VkaXRfSXRlcmF0b3IgKiBwSXRlcmF0b3IgPSBtX3BFZGl0LT5HZXRJdGVyYXRvcigpKQ0KLQl7DQotCQlwSXRlcmF0b3ItPlNldEF0KG1fcEVkaXQtPkdldENhcmV0KCkpOw0KLQkJQ1BWVF9Xb3JkIHdvcmQ7DQotCQlDUFZUX1NlY3Rpb24gc2VjdGlvbjsNCi0JCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpDQotCQl7DQotCQkJZkZvbnRTaXplID0gd29yZC5mRm9udFNpemU7DQotCQl9DQotCQllbHNlIGlmIChIYXNGbGFnKFBFU19SSUNIKSkNCi0JCXsNCi0JCQlpZiAocEl0ZXJhdG9yLT5HZXRTZWN0aW9uKHNlY3Rpb24pKQ0KLQkJCXsJCQkJDQotCQkJCWZGb250U2l6ZSA9IHNlY3Rpb24uV29yZFByb3BzLmZGb250U2l6ZTsNCi0JCQl9DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIGZGb250U2l6ZTsNCi19DQotDQotdm9pZCBDUFdMX0VkaXRDdHJsOjpTZXRUZXh0KEZYX0xQQ1dTVFIgY3NUZXh0KQ0KLXsNCi0JbV9wRWRpdC0+U2V0VGV4dChjc1RleHQpOw0KLX0NCi0NCi12b2lkIENQV0xfRWRpdEN0cmw6OkNvcHlUZXh0KCkNCi17DQotfQ0KLQ0KLXZvaWQgQ1BXTF9FZGl0Q3RybDo6UGFzdGVUZXh0KCkNCi17DQotfQ0KLQ0KLXZvaWQgQ1BXTF9FZGl0Q3RybDo6Q3V0VGV4dCgpDQotew0KLX0NCi0NCi12b2lkIENQV0xfRWRpdEN0cmw6OlNob3dWU2Nyb2xsQmFyKEZYX0JPT0wgYlNob3cpDQotew0KLX0NCi0NCi12b2lkIENQV0xfRWRpdEN0cmw6Okluc2VydFRleHQoRlhfTFBDV1NUUiBjc1RleHQpDQotew0KLQlpZiAoIUlzUmVhZE9ubHkoKSkNCi0JCW1fcEVkaXQtPkluc2VydFRleHQoY3NUZXh0KTsNCi19DQotDQotdm9pZCBDUFdMX0VkaXRDdHJsOjpJbnNlcnRXb3JkKEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgbkNoYXJzZXQpDQotew0KLQlpZiAoIUlzUmVhZE9ubHkoKSkNCi0JCW1fcEVkaXQtPkluc2VydFdvcmQod29yZCwgbkNoYXJzZXQpOw0KLX0NCi0NCi12b2lkIENQV0xfRWRpdEN0cmw6Okluc2VydFJldHVybigpDQotew0KLQlpZiAoIUlzUmVhZE9ubHkoKSkNCi0JCW1fcEVkaXQtPkluc2VydFJldHVybigpOw0KLX0NCi0NCi12b2lkIENQV0xfRWRpdEN0cmw6OkRlbGV0ZSgpDQotew0KLQlpZiAoIUlzUmVhZE9ubHkoKSkNCi0JCW1fcEVkaXQtPkRlbGV0ZSgpOw0KLX0NCi0NCi12b2lkIENQV0xfRWRpdEN0cmw6OkJhY2tzcGFjZSgpDQotew0KLQlpZiAoIUlzUmVhZE9ubHkoKSkNCi0JCW1fcEVkaXQtPkJhY2tzcGFjZSgpOw0KLX0NCi0NCi1GWF9CT09MCUNQV0xfRWRpdEN0cmw6OkNhblVuZG8oKSBjb25zdA0KLXsNCi0JcmV0dXJuICFJc1JlYWRPbmx5KCkgJiYgbV9wRWRpdC0+Q2FuVW5kbygpOw0KLX0NCi0NCi1GWF9CT09MCUNQV0xfRWRpdEN0cmw6OkNhblJlZG8oKSBjb25zdA0KLXsNCi0JcmV0dXJuICFJc1JlYWRPbmx5KCkgJiYgbV9wRWRpdC0+Q2FuUmVkbygpOw0KLX0NCi0NCi12b2lkIENQV0xfRWRpdEN0cmw6OlJlZG8oKQ0KLXsNCi0JaWYgKENhblJlZG8oKSkNCi0JCW1fcEVkaXQtPlJlZG8oKTsNCi19DQotDQotdm9pZCBDUFdMX0VkaXRDdHJsOjpVbmRvKCkNCi17DQotCWlmIChDYW5VbmRvKCkpDQotCQltX3BFZGl0LT5VbmRvKCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9FZGl0Q3RybDo6SU9uU2V0U2Nyb2xsSW5mb1koRlhfRkxPQVQgZlBsYXRlTWluLCBGWF9GTE9BVCBmUGxhdGVNYXgsIA0KLQkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZDb250ZW50TWluLCBGWF9GTE9BVCBmQ29udGVudE1heCwgDQotCQkJCQkJCQkJCQkJRlhfRkxPQVQgZlNtYWxsU3RlcCwgRlhfRkxPQVQgZkJpZ1N0ZXApDQotew0KLQlQV0xfU0NST0xMX0lORk8gSW5mbzsNCi0NCi0JSW5mby5mUGxhdGVXaWR0aCA9IGZQbGF0ZU1heCAtIGZQbGF0ZU1pbjsNCi0JSW5mby5mQ29udGVudE1pbiA9IGZDb250ZW50TWluOw0KLQlJbmZvLmZDb250ZW50TWF4ID0gZkNvbnRlbnRNYXg7DQotCUluZm8uZlNtYWxsU3RlcCA9IGZTbWFsbFN0ZXA7DQotCUluZm8uZkJpZ1N0ZXAgPSBmQmlnU3RlcDsNCi0NCi0JdGhpcy0+T25Ob3RpZnkodGhpcyxQTk1fU0VUU0NST0xMSU5GTyxTQlRfVlNDUk9MTCwoRlhfSU5UUFRSKSZJbmZvKTsNCi0NCi0vLwlQV0xfVFJBQ0UoInNldCBzY3JvbGwgaW5mbzolZlxuIixmQ29udGVudE1heCAtIGZDb250ZW50TWluKTsNCi0NCi0JaWYgKElzRmxvYXRCaWdnZXIoSW5mby5mUGxhdGVXaWR0aCxJbmZvLmZDb250ZW50TWF4LUluZm8uZkNvbnRlbnRNaW4pDQotCQl8fCBJc0Zsb2F0RXF1YWwoSW5mby5mUGxhdGVXaWR0aCxJbmZvLmZDb250ZW50TWF4LUluZm8uZkNvbnRlbnRNaW4pKQ0KLQl7DQotCQl0aGlzLT5TaG93VlNjcm9sbEJhcihGQUxTRSk7CQkNCi0JfQ0KLQllbHNlDQotCXsNCi0JCXRoaXMtPlNob3dWU2Nyb2xsQmFyKFRSVUUpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9FZGl0Q3RybDo6SU9uU2V0U2Nyb2xsUG9zWShGWF9GTE9BVCBmeSkNCi17DQotLy8JUFdMX1RSQUNFKCJzZXQgc2Nyb2xsIHBvc2l0aW9uOiVmXG4iLGZ5KTsNCi0JdGhpcy0+T25Ob3RpZnkodGhpcyxQTk1fU0VUU0NST0xMUE9TLFNCVF9WU0NST0xMLChGWF9JTlRQVFIpJmZ5KTsNCi19DQotDQotdm9pZCBDUFdMX0VkaXRDdHJsOjpJT25TZXRDYXJldChGWF9CT09MIGJWaXNpYmxlLCBjb25zdCBDUERGX1BvaW50ICYgcHRIZWFkLCBjb25zdCBDUERGX1BvaW50ICYgcHRGb290LCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UpDQotew0KLQlQV0xfQ0FSRVRfSU5GTyBjSW5mbzsNCi0JY0luZm8uYlZpc2libGUgPSBiVmlzaWJsZTsNCi0JY0luZm8ucHRIZWFkID0gcHRIZWFkOw0KLQljSW5mby5wdEZvb3QgPSBwdEZvb3Q7DQotDQotCXRoaXMtPk9uTm90aWZ5KHRoaXMsUE5NX1NFVENBUkVUSU5GTywoRlhfSU5UUFRSKSZjSW5mbywoRlhfSU5UUFRSKU5VTEwpOw0KLX0NCi0NCi12b2lkIENQV0xfRWRpdEN0cmw6OklPbkNhcmV0Q2hhbmdlKGNvbnN0IENQVlRfU2VjUHJvcHMgJiBzZWNQcm9wcywgY29uc3QgQ1BWVF9Xb3JkUHJvcHMgJiB3b3JkUHJvcHMpDQotew0KLX0NCi0NCi12b2lkIENQV0xfRWRpdEN0cmw6OklPbkNvbnRlbnRDaGFuZ2UoY29uc3QgQ1BERl9SZWN0JiByY0NvbnRlbnQpDQotew0KLQlpZiAodGhpcy0+SXNWYWxpZCgpKQ0KLQl7DQotCQlpZiAobV9wRWRpdE5vdGlmeSkNCi0JCXsNCi0JCQltX3BFZGl0Tm90aWZ5LT5PbkNvbnRlbnRDaGFuZ2UocmNDb250ZW50KTsNCi0JCX0NCi0JfQ0KLX0NCi0NCi12b2lkIENQV0xfRWRpdEN0cmw6OklPbkludmFsaWRhdGVSZWN0KENQREZfUmVjdCAqIHBSZWN0KQ0KLXsNCi0JdGhpcy0+SW52YWxpZGF0ZVJlY3QocFJlY3QpOw0KLX0NCi0NCi1GWF9JTlQzMiBDUFdMX0VkaXRDdHJsOjpHZXRDaGFyU2V0KCkgY29uc3QNCi17DQotCWlmIChtX25DaGFyU2V0IDwgMCkNCi0JCXJldHVybiBERUZBVUxUX0NIQVJTRVQ7IA0KLQllbHNlDQotCQlyZXR1cm4gbV9uQ2hhclNldDsNCi19DQotDQotdm9pZCBDUFdMX0VkaXRDdHJsOjpHZXRUZXh0UmFuZ2UoY29uc3QgQ1BERl9SZWN0JiByZWN0LCBGWF9JTlQzMiAmIG5TdGFydENoYXIsIEZYX0lOVDMyICYgbkVuZENoYXIpIGNvbnN0DQotew0KLQluU3RhcnRDaGFyID0gbV9wRWRpdC0+V29yZFBsYWNlVG9Xb3JkSW5kZXgobV9wRWRpdC0+U2VhcmNoV29yZFBsYWNlKENQREZfUG9pbnQocmVjdC5sZWZ0LCByZWN0LnRvcCkpKTsNCi0JbkVuZENoYXIgPSBtX3BFZGl0LT5Xb3JkUGxhY2VUb1dvcmRJbmRleChtX3BFZGl0LT5TZWFyY2hXb3JkUGxhY2UoQ1BERl9Qb2ludChyZWN0LnJpZ2h0LCByZWN0LmJvdHRvbSkpKTsNCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgQ1BXTF9FZGl0Q3RybDo6R2V0VGV4dChGWF9JTlQzMiAmIG5TdGFydENoYXIsIEZYX0lOVDMyICYgbkVuZENoYXIpIGNvbnN0DQotew0KLQlDUFZUX1dvcmRQbGFjZSB3cFN0YXJ0ID0gbV9wRWRpdC0+V29yZEluZGV4VG9Xb3JkUGxhY2UoblN0YXJ0Q2hhcik7DQotCUNQVlRfV29yZFBsYWNlIHdwRW5kID0gbV9wRWRpdC0+V29yZEluZGV4VG9Xb3JkUGxhY2UobkVuZENoYXIpOw0KLQlyZXR1cm4gbV9wRWRpdC0+R2V0UmFuZ2VUZXh0KENQVlRfV29yZFJhbmdlKHdwU3RhcnQsIHdwRW5kKSk7DQotfQ0KLQ0KLXZvaWQJQ1BXTF9FZGl0Q3RybDo6U2V0UmVhZHlUb0lucHV0KCkNCi17DQotCWlmIChtX2JNb3VzZURvd24pDQotCXsNCi0JCVJlbGVhc2VDYXB0dXJlKCk7DQotCQltX2JNb3VzZURvd24gPSBGQUxTRTsNCi0JfQ0KLX0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUERGV2luZG93LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1duZC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9FZGl0Q3RybC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9TY3JvbGxCYXIuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfVXRpbHMuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfQ2FyZXQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfRm9udE1hcC5oIgorCisjZGVmaW5lIElzRmxvYXRaZXJvKGYpCQkJCQkJKChmKSA8IDAuMDAwMSAmJiAoZikgPiAtMC4wMDAxKQorI2RlZmluZSBJc0Zsb2F0QmlnZ2VyKGZhLGZiKQkJCQkoKGZhKSA+IChmYikgJiYgIUlzRmxvYXRaZXJvKChmYSkgLSAoZmIpKSkKKyNkZWZpbmUgSXNGbG9hdFNtYWxsZXIoZmEsZmIpCQkJCSgoZmEpIDwgKGZiKSAmJiAhSXNGbG9hdFplcm8oKGZhKSAtIChmYikpKQorI2RlZmluZSBJc0Zsb2F0RXF1YWwoZmEsZmIpCQkJCQlJc0Zsb2F0WmVybygoZmEpLShmYikpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9FZGl0Q3RybCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ1BXTF9FZGl0Q3RybDo6Q1BXTF9FZGl0Q3RybCgpIDoKKwltX3BFZGl0KE5VTEwpLAorCW1fcEVkaXRDYXJldChOVUxMKSwKKwltX2JNb3VzZURvd24oRkFMU0UpLAorCW1fcEVkaXROb3RpZnkoTlVMTCksCisJbV9uQ2hhclNldChERUZBVUxUX0NIQVJTRVQpLAorCW1fbkNvZGVQYWdlKDApCit7CisJbV9wRWRpdCA9IElGWF9FZGl0OjpOZXdFZGl0KCk7CisJQVNTRVJUKG1fcEVkaXQgIT0gTlVMTCk7Cit9CisKK0NQV0xfRWRpdEN0cmw6On5DUFdMX0VkaXRDdHJsKCkKK3sKKwlJRlhfRWRpdDo6RGVsRWRpdChtX3BFZGl0KTsKK30KKwordm9pZCBDUFdMX0VkaXRDdHJsOjpPbkNyZWF0ZShQV0xfQ1JFQVRFUEFSQU0gJiBjcCkKK3sKKwljcC5lQ3Vyc29yVHlwZSA9IEZYQ1RfVkJFQU07Cit9CisKK3ZvaWQgQ1BXTF9FZGl0Q3RybDo6T25DcmVhdGVkKCkKK3sKKwlTZXRGb250U2l6ZSh0aGlzLT5HZXRDcmVhdGlvblBhcmFtKCkuZkZvbnRTaXplKTsKKworCW1fcEVkaXQtPlNldEZvbnRNYXAodGhpcy0+R2V0Rm9udE1hcCgpKTsKKwltX3BFZGl0LT5TZXROb3RpZnkodGhpcyk7CisJbV9wRWRpdC0+SW5pdGlhbGl6ZSgpOworfQorCitGWF9CT09MIENQV0xfRWRpdEN0cmw6OklzV25kSG9yVigpCit7CisJQ1BERl9NYXRyaXggbXQgPSBHZXRXaW5kb3dNYXRyaXgoKTsKKwlDUERGX1BvaW50IHBvaW50MSgwLDEpOworCUNQREZfUG9pbnQgcG9pbnQyKDEsMSk7CisKKwltdC5UcmFuc2Zvcm0ocG9pbnQxLngsIHBvaW50MS55KTsKKwltdC5UcmFuc2Zvcm0ocG9pbnQyLngsIHBvaW50Mi55KTsKKworCXJldHVybiBwb2ludDIueSA9PSBwb2ludDEueTsKK30KKwordm9pZCBDUFdMX0VkaXRDdHJsOjpTZXRDdXJzb3IoKQoreworCWlmIChJc1ZhbGlkKCkpIAorCXsKKwkJaWYgKElGWF9TeXN0ZW1IYW5kbGVyKiBwU0ggPSBHZXRTeXN0ZW1IYW5kbGVyKCkpCisJCXsKKwkJCWlmIChJc1duZEhvclYoKSkKKwkJCQlwU0gtPlNldEN1cnNvcihGWENUX1ZCRUFNKTsKKwkJCWVsc2UKKwkJCQlwU0gtPlNldEN1cnNvcihGWENUX0hCRUFNKTsKKwkJfQorCX0KK30KKwordm9pZCBDUFdMX0VkaXRDdHJsOjpSZVBvc0NoaWxkV25kKCkKK3sKKwltX3BFZGl0LT5TZXRQbGF0ZVJlY3QoR2V0Q2xpZW50UmVjdCgpKTsKK30KKwordm9pZCBDUFdMX0VkaXRDdHJsOjpPbk5vdGlmeShDUFdMX1duZCogcFduZCwgRlhfRFdPUkQgbXNnLCBGWF9JTlRQVFIgd1BhcmFtLCBGWF9JTlRQVFIgbFBhcmFtKQoreworCUNQV0xfV25kOjpPbk5vdGlmeShwV25kLG1zZyx3UGFyYW0sbFBhcmFtKTsKKworCXN3aXRjaCAobXNnKQorCXsKKwkJY2FzZSBQTk1fU0VUU0NST0xMSU5GTzoKKwkJCXN3aXRjaCAod1BhcmFtKQorCQkJeworCQkJCWNhc2UgU0JUX1ZTQ1JPTEw6CisJCQkJCWlmIChDUFdMX1duZCAqIHBDaGlsZCA9IEdldFZTY3JvbGxCYXIoKSkKKwkJCQkJeworCQkJCQkJcENoaWxkLT5Pbk5vdGlmeShwV25kLFBOTV9TRVRTQ1JPTExJTkZPLHdQYXJhbSxsUGFyYW0pOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUE5NX1NFVFNDUk9MTFBPUzoJCQkKKwkJCXN3aXRjaCAod1BhcmFtKQorCQkJeworCQkJCWNhc2UgU0JUX1ZTQ1JPTEw6CisJCQkJCWlmIChDUFdMX1duZCAqIHBDaGlsZCA9IEdldFZTY3JvbGxCYXIoKSkKKwkJCQkJeworCQkJCQkJcENoaWxkLT5Pbk5vdGlmeShwV25kLFBOTV9TRVRTQ1JPTExQT1Msd1BhcmFtLGxQYXJhbSk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQTk1fU0NST0xMV0lORE9XOgorCQkJeworCQkJCUZYX0ZMT0FUIGZQb3MgPSAqKEZYX0ZMT0FUKilsUGFyYW07CisJCQkJc3dpdGNoICh3UGFyYW0pCisJCQkJeworCQkJCQljYXNlIFNCVF9WU0NST0xMOgorCQkJCQkJbV9wRWRpdC0+U2V0U2Nyb2xsUG9zKENQREZfUG9pbnQobV9wRWRpdC0+R2V0U2Nyb2xsUG9zKCkueCxmUG9zKSk7CisJCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQTk1fU0VUQ0FSRVRJTkZPOgorCQkJeworCQkJCWlmIChQV0xfQ0FSRVRfSU5GTyAqIHBDYXJldEluZm8gPSAoUFdMX0NBUkVUX0lORk8gKil3UGFyYW0pCisJCQkJeworCQkJCQl0aGlzLT5TZXRDYXJldChwQ2FyZXRJbmZvLT5iVmlzaWJsZSwKKwkJCQkJCXBDYXJldEluZm8tPnB0SGVhZCwKKwkJCQkJCXBDYXJldEluZm8tPnB0Rm9vdCk7CQkJCQkKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgQ1BXTF9FZGl0Q3RybDo6Q3JlYXRlQ2hpbGRXbmQoY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApCit7CisJaWYgKCFJc1JlYWRPbmx5KCkpCisJCUNyZWF0ZUVkaXRDYXJldChjcCk7Cit9CisKK3ZvaWQgQ1BXTF9FZGl0Q3RybDo6Q3JlYXRlRWRpdENhcmV0KGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKQoreworCWlmICghbV9wRWRpdENhcmV0KQorCXsKKwkJbV9wRWRpdENhcmV0ID0gbmV3IENQV0xfQ2FyZXQ7CQorCQltX3BFZGl0Q2FyZXQtPlNldEludmFsaWRSZWN0KEdldENsaWVudFJlY3QoKSk7CisKKwkJUFdMX0NSRUFURVBBUkFNCWVjcCA9IGNwOworCQllY3AucFBhcmVudFduZCA9IHRoaXM7CisJCWVjcC5kd0ZsYWdzID0gUFdTX0NISUxEIHwgUFdTX05PUkVGUkVTSENMSVA7CisJCWVjcC5kd0JvcmRlcldpZHRoID0gMDsKKwkJZWNwLm5Cb3JkZXJTdHlsZSA9IFBCU19TT0xJRDsKKwkJZWNwLnJjUmVjdFduZCA9IENQREZfUmVjdCgwLDAsMCwwKTsKKworCQltX3BFZGl0Q2FyZXQtPkNyZWF0ZShlY3ApOworCX0KK30KKwordm9pZCBDUFdMX0VkaXRDdHJsOjpTZXRGb250U2l6ZShGWF9GTE9BVCBmRm9udFNpemUpCit7CisJbV9wRWRpdC0+U2V0Rm9udFNpemUoZkZvbnRTaXplKTsKK30KKworRlhfRkxPQVQgQ1BXTF9FZGl0Q3RybDo6R2V0Rm9udFNpemUoKSBjb25zdAoreworCXJldHVybiBtX3BFZGl0LT5HZXRGb250U2l6ZSgpOworfQorCitGWF9CT09MIENQV0xfRWRpdEN0cmw6Ok9uS2V5RG93bihGWF9XT1JEIG5DaGFyLCBGWF9EV09SRCBuRmxhZykKK3sKKwlpZiAobV9iTW91c2VEb3duKSByZXR1cm4gVFJVRTsKKworCUZYX0JPT0wgYlJldCA9IENQV0xfV25kOjpPbktleURvd24obkNoYXIsbkZsYWcpOworCisJLy9GSUxURVIKKwlzd2l0Y2ggKG5DaGFyKQorCXsKKwlkZWZhdWx0OgorCQlyZXR1cm4gRkFMU0U7CisJY2FzZSBGV0xfVktFWV9EZWxldGU6CisJY2FzZSBGV0xfVktFWV9VcDoKKwljYXNlIEZXTF9WS0VZX0Rvd246CisJY2FzZSBGV0xfVktFWV9MZWZ0OgorCWNhc2UgRldMX1ZLRVlfUmlnaHQ6CisJY2FzZSBGV0xfVktFWV9Ib21lOgorCWNhc2UgRldMX1ZLRVlfRW5kOgorCWNhc2UgRldMX1ZLRVlfSW5zZXJ0OgorCWNhc2UgJ0MnOgorCWNhc2UgJ1YnOgorCWNhc2UgJ1gnOgorCWNhc2UgJ0EnOgorCWNhc2UgJ1onOgorCWNhc2UgJ2MnOgorCWNhc2UgJ3YnOgorCWNhc2UgJ3gnOgorCWNhc2UgJ2EnOgorCWNhc2UgJ3onOgorCQlicmVhazsKKwl9CisKKwlpZiAobkNoYXIgPT0gRldMX1ZLRVlfRGVsZXRlKQorCXsKKwkJaWYgKG1fcEVkaXQtPklzU2VsZWN0ZWQoKSkKKwkJCW5DaGFyID0gRldMX1ZLRVlfVW5rbm93bjsKKwl9CisKKwlzd2l0Y2ggKG5DaGFyKQorCXsKKwkJY2FzZSBGV0xfVktFWV9EZWxldGU6CQorCQkJRGVsZXRlKCk7CisJCQlyZXR1cm4gVFJVRTsKKwkJY2FzZSBGV0xfVktFWV9JbnNlcnQ6CisJCQlpZiAoSXNTSElGVHByZXNzZWQobkZsYWcpKQorCQkJCVBhc3RlVGV4dCgpOworCQkJcmV0dXJuIFRSVUU7CisJCWNhc2UgRldMX1ZLRVlfVXA6CisJCQltX3BFZGl0LT5PblZLX1VQKElzU0hJRlRwcmVzc2VkKG5GbGFnKSxGQUxTRSk7CisJCQlyZXR1cm4gVFJVRTsKKwkJY2FzZSBGV0xfVktFWV9Eb3duOgorCQkJbV9wRWRpdC0+T25WS19ET1dOKElzU0hJRlRwcmVzc2VkKG5GbGFnKSxGQUxTRSk7CisJCQlyZXR1cm4gVFJVRTsKKwkJY2FzZSBGV0xfVktFWV9MZWZ0OgorCQkJbV9wRWRpdC0+T25WS19MRUZUKElzU0hJRlRwcmVzc2VkKG5GbGFnKSxGQUxTRSk7CisJCQlyZXR1cm4gVFJVRTsKKwkJY2FzZSBGV0xfVktFWV9SaWdodDoKKwkJCW1fcEVkaXQtPk9uVktfUklHSFQoSXNTSElGVHByZXNzZWQobkZsYWcpLEZBTFNFKTsKKwkJCXJldHVybiBUUlVFOworCQljYXNlIEZXTF9WS0VZX0hvbWU6CisJCQltX3BFZGl0LT5PblZLX0hPTUUoSXNTSElGVHByZXNzZWQobkZsYWcpLElzQ1RSTHByZXNzZWQobkZsYWcpKTsKKwkJCXJldHVybiBUUlVFOworCQljYXNlIEZXTF9WS0VZX0VuZDoKKwkJCW1fcEVkaXQtPk9uVktfRU5EKElzU0hJRlRwcmVzc2VkKG5GbGFnKSxJc0NUUkxwcmVzc2VkKG5GbGFnKSk7CisJCQlyZXR1cm4gVFJVRTsKKwkJY2FzZSBGV0xfVktFWV9Vbmtub3duOgorCQkJaWYgKCFJc1NISUZUcHJlc3NlZChuRmxhZykpCisJCQkJQ2xlYXIoKTsKKwkJCWVsc2UKKwkJCQlDdXRUZXh0KCk7CisJCQlyZXR1cm4gVFJVRTsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKwkKKwlyZXR1cm4gYlJldDsKK30KKworRlhfQk9PTCBDUFdMX0VkaXRDdHJsOjpPbkNoYXIoRlhfV09SRCBuQ2hhciwgRlhfRFdPUkQgbkZsYWcpCit7CisJaWYgKG1fYk1vdXNlRG93bikgcmV0dXJuIFRSVUU7CisKKwlDUFdMX1duZDo6T25DaGFyKG5DaGFyLG5GbGFnKTsKKworCS8vRklMVEVSCisJc3dpdGNoIChuQ2hhcikKKwl7CisJCWNhc2UgMHgwQToKKwkJY2FzZSAweDFCOgorCQkJcmV0dXJuIEZBTFNFOwkJCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisKKwlGWF9CT09MIGJDdHJsID0gSXNDVFJMcHJlc3NlZChuRmxhZyk7CisJRlhfQk9PTCBiQWx0ID0gSXNBTFRwcmVzc2VkKG5GbGFnKTsKKwlGWF9CT09MIGJTaGlmdCA9IElzU0hJRlRwcmVzc2VkKG5GbGFnKTsKKworCUZYX1dPUkQgd29yZCA9IG5DaGFyOworCisJaWYgKGJDdHJsICYmICFiQWx0KQorCXsKKwkJc3dpdGNoIChuQ2hhcikKKwkJeworCQkJY2FzZSAnQycgLSAnQScgKyAxOgorCQkJCXRoaXMtPkNvcHlUZXh0KCk7CisJCQkJcmV0dXJuIFRSVUU7CisJCQljYXNlICdWJyAtICdBJyArIDE6CisJCQkJdGhpcy0+UGFzdGVUZXh0KCk7CisJCQkJcmV0dXJuIFRSVUU7CisJCQljYXNlICdYJyAtICdBJyArIDE6CisJCQkJdGhpcy0+Q3V0VGV4dCgpOworCQkJCXJldHVybiBUUlVFOworCQkJY2FzZSAnQScgLSAnQScgKyAxOgorCQkJCXRoaXMtPlNlbGVjdEFsbCgpOworCQkJCXJldHVybiBUUlVFOworCQkJY2FzZSAnWicgLSAnQScgKyAxOgorCQkJCWlmIChiU2hpZnQpCisJCQkJCVJlZG8oKTsKKwkJCQllbHNlCisJCQkJCVVuZG8oKTsKKwkJCQlyZXR1cm4gVFJVRTsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKG5DaGFyIDwgMzIpCisJCQkJCXJldHVybiBGQUxTRTsKKwkJfQorCX0KKworCWlmIChJc1JlYWRPbmx5KCkpIHJldHVybiBUUlVFOworCisJaWYgKG1fcEVkaXQtPklzU2VsZWN0ZWQoKSAmJiB3b3JkID09ICBGV0xfVktFWV9CYWNrKQorCQl3b3JkID0gRldMX1ZLRVlfVW5rbm93bjsKKworCUNsZWFyKCk7CisKKwlzd2l0Y2ggKHdvcmQpCisJeworCWNhc2UgRldMX1ZLRVlfQmFjazoKKwkJQmFja3NwYWNlKCk7CisJCWJyZWFrOworCWNhc2UgRldMX1ZLRVlfUmV0dXJuOgkKKwkJSW5zZXJ0UmV0dXJuKCk7CisJCWJyZWFrOworCWNhc2UgRldMX1ZLRVlfVW5rbm93bjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKElzSU5TRVJUcHJlc3NlZChuRmxhZykpCisJCQlEZWxldGUoKTsKKwkJSW5zZXJ0V29yZCh3b3JkLCB0aGlzLT5HZXRDaGFyU2V0KCkpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBDUFdMX0VkaXRDdHJsOjpPbkxCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpCit7CisJQ1BXTF9XbmQ6Ok9uTEJ1dHRvbkRvd24ocG9pbnQsbkZsYWcpOworCisJaWYgKENsaWVudEhpdFRlc3QocG9pbnQpKQorCXsJCQorCQlpZiAobV9iTW91c2VEb3duKQorCQkJdGhpcy0+SW52YWxpZGF0ZVJlY3QoKTsKKworCQltX2JNb3VzZURvd24gPSBUUlVFOwkJCisJCVNldENhcHR1cmUoKTsKKworCQltX3BFZGl0LT5Pbk1vdXNlRG93bihwb2ludCxJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpOworCX0KKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIENQV0xfRWRpdEN0cmw6Ok9uTEJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpCit7CisJQ1BXTF9XbmQ6Ok9uTEJ1dHRvblVwKHBvaW50LG5GbGFnKTsKKworCWlmIChtX2JNb3VzZURvd24pCisJeworCQkvL2NhbiByZWNlaXZlIGtleWJvcmQgbWVzc2FnZQorCQlpZiAoQ2xpZW50SGl0VGVzdChwb2ludCkgJiYgIXRoaXMtPklzRm9jdXNlZCgpKQorCQkJU2V0Rm9jdXMoKTsJCisKKwkJUmVsZWFzZUNhcHR1cmUoKTsKKwkJbV9iTW91c2VEb3duID0gRkFMU0U7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgQ1BXTF9FZGl0Q3RybDo6T25Nb3VzZU1vdmUoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZykKK3sKKwlDUFdMX1duZDo6T25Nb3VzZU1vdmUocG9pbnQsbkZsYWcpOworCisJaWYgKG1fYk1vdXNlRG93bikKKwkJbV9wRWRpdC0+T25Nb3VzZU1vdmUocG9pbnQsRkFMU0UsRkFMU0UpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0NQREZfUmVjdCBDUFdMX0VkaXRDdHJsOjpHZXRDb250ZW50UmVjdCgpIGNvbnN0Cit7CisJcmV0dXJuIG1fcEVkaXQtPkdldENvbnRlbnRSZWN0KCk7Cit9CisKK3ZvaWQgQ1BXTF9FZGl0Q3RybDo6U2V0RWRpdENhcmV0KEZYX0JPT0wgYlZpc2libGUpCit7CisJQ1BERl9Qb2ludCBwdEhlYWQoMCwwKSxwdEZvb3QoMCwwKTsKKworCWlmIChiVmlzaWJsZSkKKwl7CisJCUdldENhcmV0SW5mbyhwdEhlYWQscHRGb290KTsKKwl9CisKKwlDUFZUX1dvcmRQbGFjZSB3cFRlbXAgPSBtX3BFZGl0LT5HZXRDYXJldFdvcmRQbGFjZSgpOworCXRoaXMtPklPblNldENhcmV0KGJWaXNpYmxlLHB0SGVhZCxwdEZvb3Qsd3BUZW1wKTsKK30KKwordm9pZCBDUFdMX0VkaXRDdHJsOjpHZXRDYXJldEluZm8oQ1BERl9Qb2ludCAmIHB0SGVhZCwgQ1BERl9Qb2ludCAmIHB0Rm9vdCkgY29uc3QKK3sKKwlpZiAoSUZYX0VkaXRfSXRlcmF0b3IgKiBwSXRlcmF0b3IgPSBtX3BFZGl0LT5HZXRJdGVyYXRvcigpKQorCXsKKwkJcEl0ZXJhdG9yLT5TZXRBdChtX3BFZGl0LT5HZXRDYXJldCgpKTsKKwkJQ1BWVF9Xb3JkIHdvcmQ7CisJCUNQVlRfTGluZSBsaW5lOworCQlpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmQpKQorCQl7CisJCQlwdEhlYWQueCA9IHdvcmQucHRXb3JkLnggKyB3b3JkLmZXaWR0aDsKKwkJCXB0SGVhZC55ID0gd29yZC5wdFdvcmQueSArIHdvcmQuZkFzY2VudDsKKwkJCXB0Rm9vdC54ID0gd29yZC5wdFdvcmQueCArIHdvcmQuZldpZHRoOworCQkJcHRGb290LnkgPSB3b3JkLnB0V29yZC55ICsgd29yZC5mRGVzY2VudDsKKwkJfQorCQllbHNlIGlmIChwSXRlcmF0b3ItPkdldExpbmUobGluZSkpCisJCXsJCQkJCisJCQlwdEhlYWQueCA9IGxpbmUucHRMaW5lLng7CisJCQlwdEhlYWQueSA9IGxpbmUucHRMaW5lLnkgKyBsaW5lLmZMaW5lQXNjZW50OworCQkJcHRGb290LnggPSBsaW5lLnB0TGluZS54OworCQkJcHRGb290LnkgPSBsaW5lLnB0TGluZS55ICsgbGluZS5mTGluZURlc2NlbnQ7CisJCX0KKwl9Cit9CisKK3ZvaWQgQ1BXTF9FZGl0Q3RybDo6R2V0Q2FyZXRQb3MoRlhfSU5UMzImIHgsIEZYX0lOVDMyJiB5KSBjb25zdAoreworCUNQREZfUG9pbnQgcHRIZWFkKDAsMCksIHB0Rm9vdCgwLDApOworCisJR2V0Q2FyZXRJbmZvKHB0SGVhZCxwdEZvb3QpOworCisJUFdMdG9XbmQocHRIZWFkLCB4LCB5KTsKK30KKwordm9pZCBDUFdMX0VkaXRDdHJsOjpTZXRDYXJldChGWF9CT09MIGJWaXNpYmxlLCBjb25zdCBDUERGX1BvaW50ICYgcHRIZWFkLCBjb25zdCBDUERGX1BvaW50ICYgcHRGb290KQoreworCWlmIChtX3BFZGl0Q2FyZXQpCisJeworCQlpZiAoIUlzRm9jdXNlZCgpIHx8IG1fcEVkaXQtPklzU2VsZWN0ZWQoKSkKKwkJCWJWaXNpYmxlID0gRkFMU0U7CisKKwkJbV9wRWRpdENhcmV0LT5TZXRDYXJldChiVmlzaWJsZSwgcHRIZWFkLCBwdEZvb3QpOworCX0KK30KKworRlhfQk9PTAlDUFdMX0VkaXRDdHJsOjpJc01vZGlmaWVkKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9wRWRpdC0+SXNNb2RpZmllZCgpOworfQorCitDRlhfV2lkZVN0cmluZyBDUFdMX0VkaXRDdHJsOjpHZXRUZXh0KCkgY29uc3QKK3sKKwlyZXR1cm4gbV9wRWRpdC0+R2V0VGV4dCgpOworfQorCit2b2lkIENQV0xfRWRpdEN0cmw6OlNldFNlbChGWF9JTlQzMiBuU3RhcnRDaGFyLEZYX0lOVDMyIG5FbmRDaGFyKQoreworCW1fcEVkaXQtPlNldFNlbChuU3RhcnRDaGFyLCBuRW5kQ2hhcik7Cit9CisKK3ZvaWQgQ1BXTF9FZGl0Q3RybDo6R2V0U2VsKEZYX0lOVDMyICYgblN0YXJ0Q2hhciwgRlhfSU5UMzIgJiBuRW5kQ2hhciApIGNvbnN0Cit7CisJbV9wRWRpdC0+R2V0U2VsKG5TdGFydENoYXIsIG5FbmRDaGFyKTsKK30KKwordm9pZCBDUFdMX0VkaXRDdHJsOjpDbGVhcigpCit7CisJaWYgKCFJc1JlYWRPbmx5KCkpCisJCW1fcEVkaXQtPkNsZWFyKCk7Cit9CisKK3ZvaWQgQ1BXTF9FZGl0Q3RybDo6U2VsZWN0QWxsKCkKK3sKKwltX3BFZGl0LT5TZWxlY3RBbGwoKTsKK30KKwordm9pZCBDUFdMX0VkaXRDdHJsOjpQYWludCgpCit7CisJaWYgKG1fcEVkaXQpCisJCW1fcEVkaXQtPlBhaW50KCk7Cit9CisKK3ZvaWQgQ1BXTF9FZGl0Q3RybDo6RW5hYmxlUmVmcmVzaChGWF9CT09MIGJSZWZyZXNoKQoreworCWlmIChtX3BFZGl0KQorCQltX3BFZGl0LT5FbmFibGVSZWZyZXNoKGJSZWZyZXNoKTsKK30KKworRlhfSU5UMzIgQ1BXTF9FZGl0Q3RybDo6R2V0Q2FyZXQoKSBjb25zdAoreworCWlmIChtX3BFZGl0KQorCQlyZXR1cm4gbV9wRWRpdC0+R2V0Q2FyZXQoKTsKKworCXJldHVybiAtMTsKK30KKwordm9pZCBDUFdMX0VkaXRDdHJsOjpTZXRDYXJldChGWF9JTlQzMiBuUG9zKQoreworCWlmIChtX3BFZGl0KQorCQltX3BFZGl0LT5TZXRDYXJldChuUG9zKTsKK30KKworRlhfSU5UMzIgQ1BXTF9FZGl0Q3RybDo6R2V0VG90YWxXb3JkcygpIGNvbnN0Cit7CisJaWYgKG1fcEVkaXQpCisJCXJldHVybiBtX3BFZGl0LT5HZXRUb3RhbFdvcmRzKCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBDUFdMX0VkaXRDdHJsOjpTZXRTY3JvbGxQb3MoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpCit7CisJaWYgKG1fcEVkaXQpCisJCW1fcEVkaXQtPlNldFNjcm9sbFBvcyhwb2ludCk7Cit9CisKK0NQREZfUG9pbnQgQ1BXTF9FZGl0Q3RybDo6R2V0U2Nyb2xsUG9zKCkgY29uc3QKK3sKKwlpZiAobV9wRWRpdCkKKwkJcmV0dXJuIG1fcEVkaXQtPkdldFNjcm9sbFBvcygpOworCisJcmV0dXJuIENQREZfUG9pbnQoMC4wZiwgMC4wZik7Cit9CisKK0NQREZfRm9udCAqIENQV0xfRWRpdEN0cmw6OkdldENhcmV0Rm9udCgpIGNvbnN0Cit7CisJRlhfSU5UMzIgbkZvbnRJbmRleCA9IDA7CisKKwlpZiAoSUZYX0VkaXRfSXRlcmF0b3IgKiBwSXRlcmF0b3IgPSBtX3BFZGl0LT5HZXRJdGVyYXRvcigpKQorCXsKKwkJcEl0ZXJhdG9yLT5TZXRBdChtX3BFZGl0LT5HZXRDYXJldCgpKTsKKwkJQ1BWVF9Xb3JkIHdvcmQ7CisJCUNQVlRfU2VjdGlvbiBzZWN0aW9uOworCQlpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmQpKQorCQl7CisJCQluRm9udEluZGV4ID0gd29yZC5uRm9udEluZGV4OworCQl9CisJCWVsc2UgaWYgKEhhc0ZsYWcoUEVTX1JJQ0gpKQorCQl7CisJCQlpZiAocEl0ZXJhdG9yLT5HZXRTZWN0aW9uKHNlY3Rpb24pKQorCQkJewkJCQkKKwkJCQluRm9udEluZGV4ID0gc2VjdGlvbi5Xb3JkUHJvcHMubkZvbnRJbmRleDsKKwkJCX0KKwkJfQorCX0KKworCWlmIChJRlhfRWRpdF9Gb250TWFwICogcEZvbnRNYXAgPSBHZXRGb250TWFwKCkpCisJCXJldHVybiBwRm9udE1hcC0+R2V0UERGRm9udChuRm9udEluZGV4KTsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQorCitGWF9GTE9BVCBDUFdMX0VkaXRDdHJsOjpHZXRDYXJldEZvbnRTaXplKCkgY29uc3QKK3sKKwlGWF9GTE9BVCBmRm9udFNpemUgPSBHZXRGb250U2l6ZSgpOworCisJaWYgKElGWF9FZGl0X0l0ZXJhdG9yICogcEl0ZXJhdG9yID0gbV9wRWRpdC0+R2V0SXRlcmF0b3IoKSkKKwl7CisJCXBJdGVyYXRvci0+U2V0QXQobV9wRWRpdC0+R2V0Q2FyZXQoKSk7CisJCUNQVlRfV29yZCB3b3JkOworCQlDUFZUX1NlY3Rpb24gc2VjdGlvbjsKKwkJaWYgKHBJdGVyYXRvci0+R2V0V29yZCh3b3JkKSkKKwkJeworCQkJZkZvbnRTaXplID0gd29yZC5mRm9udFNpemU7CisJCX0KKwkJZWxzZSBpZiAoSGFzRmxhZyhQRVNfUklDSCkpCisJCXsKKwkJCWlmIChwSXRlcmF0b3ItPkdldFNlY3Rpb24oc2VjdGlvbikpCisJCQl7CQkJCQorCQkJCWZGb250U2l6ZSA9IHNlY3Rpb24uV29yZFByb3BzLmZGb250U2l6ZTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBmRm9udFNpemU7Cit9CisKK3ZvaWQgQ1BXTF9FZGl0Q3RybDo6U2V0VGV4dChGWF9MUENXU1RSIGNzVGV4dCkKK3sKKwltX3BFZGl0LT5TZXRUZXh0KGNzVGV4dCk7Cit9CisKK3ZvaWQgQ1BXTF9FZGl0Q3RybDo6Q29weVRleHQoKQoreworfQorCit2b2lkIENQV0xfRWRpdEN0cmw6OlBhc3RlVGV4dCgpCit7Cit9CisKK3ZvaWQgQ1BXTF9FZGl0Q3RybDo6Q3V0VGV4dCgpCit7Cit9CisKK3ZvaWQgQ1BXTF9FZGl0Q3RybDo6U2hvd1ZTY3JvbGxCYXIoRlhfQk9PTCBiU2hvdykKK3sKK30KKwordm9pZCBDUFdMX0VkaXRDdHJsOjpJbnNlcnRUZXh0KEZYX0xQQ1dTVFIgY3NUZXh0KQoreworCWlmICghSXNSZWFkT25seSgpKQorCQltX3BFZGl0LT5JbnNlcnRUZXh0KGNzVGV4dCk7Cit9CisKK3ZvaWQgQ1BXTF9FZGl0Q3RybDo6SW5zZXJ0V29yZChGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIG5DaGFyc2V0KQoreworCWlmICghSXNSZWFkT25seSgpKQorCQltX3BFZGl0LT5JbnNlcnRXb3JkKHdvcmQsIG5DaGFyc2V0KTsKK30KKwordm9pZCBDUFdMX0VkaXRDdHJsOjpJbnNlcnRSZXR1cm4oKQoreworCWlmICghSXNSZWFkT25seSgpKQorCQltX3BFZGl0LT5JbnNlcnRSZXR1cm4oKTsKK30KKwordm9pZCBDUFdMX0VkaXRDdHJsOjpEZWxldGUoKQoreworCWlmICghSXNSZWFkT25seSgpKQorCQltX3BFZGl0LT5EZWxldGUoKTsKK30KKwordm9pZCBDUFdMX0VkaXRDdHJsOjpCYWNrc3BhY2UoKQoreworCWlmICghSXNSZWFkT25seSgpKQorCQltX3BFZGl0LT5CYWNrc3BhY2UoKTsKK30KKworRlhfQk9PTAlDUFdMX0VkaXRDdHJsOjpDYW5VbmRvKCkgY29uc3QKK3sKKwlyZXR1cm4gIUlzUmVhZE9ubHkoKSAmJiBtX3BFZGl0LT5DYW5VbmRvKCk7Cit9CisKK0ZYX0JPT0wJQ1BXTF9FZGl0Q3RybDo6Q2FuUmVkbygpIGNvbnN0Cit7CisJcmV0dXJuICFJc1JlYWRPbmx5KCkgJiYgbV9wRWRpdC0+Q2FuUmVkbygpOworfQorCit2b2lkIENQV0xfRWRpdEN0cmw6OlJlZG8oKQoreworCWlmIChDYW5SZWRvKCkpCisJCW1fcEVkaXQtPlJlZG8oKTsKK30KKwordm9pZCBDUFdMX0VkaXRDdHJsOjpVbmRvKCkKK3sKKwlpZiAoQ2FuVW5kbygpKQorCQltX3BFZGl0LT5VbmRvKCk7Cit9CisKK3ZvaWQgQ1BXTF9FZGl0Q3RybDo6SU9uU2V0U2Nyb2xsSW5mb1koRlhfRkxPQVQgZlBsYXRlTWluLCBGWF9GTE9BVCBmUGxhdGVNYXgsIAorCQkJCQkJCQkJCQkJRlhfRkxPQVQgZkNvbnRlbnRNaW4sIEZYX0ZMT0FUIGZDb250ZW50TWF4LCAKKwkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZTbWFsbFN0ZXAsIEZYX0ZMT0FUIGZCaWdTdGVwKQoreworCVBXTF9TQ1JPTExfSU5GTyBJbmZvOworCisJSW5mby5mUGxhdGVXaWR0aCA9IGZQbGF0ZU1heCAtIGZQbGF0ZU1pbjsKKwlJbmZvLmZDb250ZW50TWluID0gZkNvbnRlbnRNaW47CisJSW5mby5mQ29udGVudE1heCA9IGZDb250ZW50TWF4OworCUluZm8uZlNtYWxsU3RlcCA9IGZTbWFsbFN0ZXA7CisJSW5mby5mQmlnU3RlcCA9IGZCaWdTdGVwOworCisJdGhpcy0+T25Ob3RpZnkodGhpcyxQTk1fU0VUU0NST0xMSU5GTyxTQlRfVlNDUk9MTCwoRlhfSU5UUFRSKSZJbmZvKTsKKworLy8JUFdMX1RSQUNFKCJzZXQgc2Nyb2xsIGluZm86JWZcbiIsZkNvbnRlbnRNYXggLSBmQ29udGVudE1pbik7CisKKwlpZiAoSXNGbG9hdEJpZ2dlcihJbmZvLmZQbGF0ZVdpZHRoLEluZm8uZkNvbnRlbnRNYXgtSW5mby5mQ29udGVudE1pbikKKwkJfHwgSXNGbG9hdEVxdWFsKEluZm8uZlBsYXRlV2lkdGgsSW5mby5mQ29udGVudE1heC1JbmZvLmZDb250ZW50TWluKSkKKwl7CisJCXRoaXMtPlNob3dWU2Nyb2xsQmFyKEZBTFNFKTsJCQorCX0KKwllbHNlCisJeworCQl0aGlzLT5TaG93VlNjcm9sbEJhcihUUlVFKTsKKwl9Cit9CisKK3ZvaWQgQ1BXTF9FZGl0Q3RybDo6SU9uU2V0U2Nyb2xsUG9zWShGWF9GTE9BVCBmeSkKK3sKKy8vCVBXTF9UUkFDRSgic2V0IHNjcm9sbCBwb3NpdGlvbjolZlxuIixmeSk7CisJdGhpcy0+T25Ob3RpZnkodGhpcyxQTk1fU0VUU0NST0xMUE9TLFNCVF9WU0NST0xMLChGWF9JTlRQVFIpJmZ5KTsKK30KKwordm9pZCBDUFdMX0VkaXRDdHJsOjpJT25TZXRDYXJldChGWF9CT09MIGJWaXNpYmxlLCBjb25zdCBDUERGX1BvaW50ICYgcHRIZWFkLCBjb25zdCBDUERGX1BvaW50ICYgcHRGb290LCBjb25zdCBDUFZUX1dvcmRQbGFjZSYgcGxhY2UpCit7CisJUFdMX0NBUkVUX0lORk8gY0luZm87CisJY0luZm8uYlZpc2libGUgPSBiVmlzaWJsZTsKKwljSW5mby5wdEhlYWQgPSBwdEhlYWQ7CisJY0luZm8ucHRGb290ID0gcHRGb290OworCisJdGhpcy0+T25Ob3RpZnkodGhpcyxQTk1fU0VUQ0FSRVRJTkZPLChGWF9JTlRQVFIpJmNJbmZvLChGWF9JTlRQVFIpTlVMTCk7Cit9CisKK3ZvaWQgQ1BXTF9FZGl0Q3RybDo6SU9uQ2FyZXRDaGFuZ2UoY29uc3QgQ1BWVF9TZWNQcm9wcyAmIHNlY1Byb3BzLCBjb25zdCBDUFZUX1dvcmRQcm9wcyAmIHdvcmRQcm9wcykKK3sKK30KKwordm9pZCBDUFdMX0VkaXRDdHJsOjpJT25Db250ZW50Q2hhbmdlKGNvbnN0IENQREZfUmVjdCYgcmNDb250ZW50KQoreworCWlmICh0aGlzLT5Jc1ZhbGlkKCkpCisJeworCQlpZiAobV9wRWRpdE5vdGlmeSkKKwkJeworCQkJbV9wRWRpdE5vdGlmeS0+T25Db250ZW50Q2hhbmdlKHJjQ29udGVudCk7CisJCX0KKwl9Cit9CisKK3ZvaWQgQ1BXTF9FZGl0Q3RybDo6SU9uSW52YWxpZGF0ZVJlY3QoQ1BERl9SZWN0ICogcFJlY3QpCit7CisJdGhpcy0+SW52YWxpZGF0ZVJlY3QocFJlY3QpOworfQorCitGWF9JTlQzMiBDUFdMX0VkaXRDdHJsOjpHZXRDaGFyU2V0KCkgY29uc3QKK3sKKwlpZiAobV9uQ2hhclNldCA8IDApCisJCXJldHVybiBERUZBVUxUX0NIQVJTRVQ7IAorCWVsc2UKKwkJcmV0dXJuIG1fbkNoYXJTZXQ7Cit9CisKK3ZvaWQgQ1BXTF9FZGl0Q3RybDo6R2V0VGV4dFJhbmdlKGNvbnN0IENQREZfUmVjdCYgcmVjdCwgRlhfSU5UMzIgJiBuU3RhcnRDaGFyLCBGWF9JTlQzMiAmIG5FbmRDaGFyKSBjb25zdAoreworCW5TdGFydENoYXIgPSBtX3BFZGl0LT5Xb3JkUGxhY2VUb1dvcmRJbmRleChtX3BFZGl0LT5TZWFyY2hXb3JkUGxhY2UoQ1BERl9Qb2ludChyZWN0LmxlZnQsIHJlY3QudG9wKSkpOworCW5FbmRDaGFyID0gbV9wRWRpdC0+V29yZFBsYWNlVG9Xb3JkSW5kZXgobV9wRWRpdC0+U2VhcmNoV29yZFBsYWNlKENQREZfUG9pbnQocmVjdC5yaWdodCwgcmVjdC5ib3R0b20pKSk7Cit9CisKK0NGWF9XaWRlU3RyaW5nIENQV0xfRWRpdEN0cmw6OkdldFRleHQoRlhfSU5UMzIgJiBuU3RhcnRDaGFyLCBGWF9JTlQzMiAmIG5FbmRDaGFyKSBjb25zdAoreworCUNQVlRfV29yZFBsYWNlIHdwU3RhcnQgPSBtX3BFZGl0LT5Xb3JkSW5kZXhUb1dvcmRQbGFjZShuU3RhcnRDaGFyKTsKKwlDUFZUX1dvcmRQbGFjZSB3cEVuZCA9IG1fcEVkaXQtPldvcmRJbmRleFRvV29yZFBsYWNlKG5FbmRDaGFyKTsKKwlyZXR1cm4gbV9wRWRpdC0+R2V0UmFuZ2VUZXh0KENQVlRfV29yZFJhbmdlKHdwU3RhcnQsIHdwRW5kKSk7Cit9CisKK3ZvaWQJQ1BXTF9FZGl0Q3RybDo6U2V0UmVhZHlUb0lucHV0KCkKK3sKKwlpZiAobV9iTW91c2VEb3duKQorCXsKKwkJUmVsZWFzZUNhcHR1cmUoKTsKKwkJbV9iTW91c2VEb3duID0gRkFMU0U7CisJfQorfQpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9Gb250TWFwLmNwcCBiL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfRm9udE1hcC5jcHAKaW5kZXggMWUyMjU5Zi4uYzY1NmYwYyAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9Gb250TWFwLmNwcAorKysgYi9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX0ZvbnRNYXAuY3BwCkBAIC0xLDYwMSArMSw2MDEgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QREZXaW5kb3cuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1duZC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfRm9udE1hcC5oIg0KLQ0KLSNkZWZpbmUgREVGQVVMVF9GT05UX05BTUUJCQkiSGVsdmV0aWNhIg0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX0ZvbnRNYXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ1BXTF9Gb250TWFwOjpDUFdMX0ZvbnRNYXAoSUZYX1N5c3RlbUhhbmRsZXIqIHBTeXN0ZW1IYW5kbGVyKSA6IAkNCi0JbV9wUERGRG9jKE5VTEwpLA0KLQltX3BTeXN0ZW1IYW5kbGVyKHBTeXN0ZW1IYW5kbGVyKQ0KLXsNCi0JQVNTRVJUKG1fcFN5c3RlbUhhbmRsZXIgIT0gTlVMTCk7DQotfQ0KLQ0KLUNQV0xfRm9udE1hcDo6fkNQV0xfRm9udE1hcCgpDQotew0KLQlpZiAobV9wUERGRG9jKQ0KLQl7DQotCQlkZWxldGUgbV9wUERGRG9jOw0KLQkJbV9wUERGRG9jID0gTlVMTDsNCi0JfQ0KLQ0KLQlFbXB0eSgpOw0KLX0NCi0NCi12b2lkIENQV0xfRm9udE1hcDo6U2V0U3lzdGVtSGFuZGxlcihJRlhfU3lzdGVtSGFuZGxlciogcFN5c3RlbUhhbmRsZXIpDQotew0KLQltX3BTeXN0ZW1IYW5kbGVyID0gcFN5c3RlbUhhbmRsZXI7DQotfQ0KLQ0KLUNQREZfRG9jdW1lbnQqIENQV0xfRm9udE1hcDo6R2V0RG9jdW1lbnQoKQ0KLXsNCi0JaWYgKCFtX3BQREZEb2MpDQotCXsNCi0JCWlmIChDUERGX01vZHVsZU1ncjo6R2V0KCkpDQotCQl7DQotCQkJbV9wUERGRG9jID0gRlhfTkVXIENQREZfRG9jdW1lbnQ7DQotCQkJbV9wUERGRG9jLT5DcmVhdGVOZXdEb2MoKTsNCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gbV9wUERGRG9jOw0KLX0NCi0NCi1DUERGX0ZvbnQqIENQV0xfRm9udE1hcDo6R2V0UERGRm9udChGWF9JTlQzMiBuRm9udEluZGV4KQ0KLXsNCi0JaWYgKG5Gb250SW5kZXggPj0wICYmIG5Gb250SW5kZXggPCBtX2FEYXRhLkdldFNpemUoKSkNCi0Jew0KLQkJaWYgKENQV0xfRm9udE1hcF9EYXRhKiBwRGF0YSA9IG1fYURhdGEuR2V0QXQobkZvbnRJbmRleCkpDQotCQl7DQotCQkJcmV0dXJuIHBEYXRhLT5wRm9udDsNCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gTlVMTDsNCi19DQotDQotQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9Gb250TWFwOjpHZXRQREZGb250QWxpYXMoRlhfSU5UMzIgbkZvbnRJbmRleCkNCi17DQotCWlmIChuRm9udEluZGV4ID49MCAmJiBuRm9udEluZGV4IDwgbV9hRGF0YS5HZXRTaXplKCkpDQotCXsNCi0JCWlmIChDUFdMX0ZvbnRNYXBfRGF0YSogcERhdGEgPSBtX2FEYXRhLkdldEF0KG5Gb250SW5kZXgpKQ0KLQkJew0KLQkJCXJldHVybiBwRGF0YS0+c0ZvbnROYW1lOw0KLQkJfQ0KLQl9DQotDQotCXJldHVybiAiIjsNCi19DQotDQotRlhfQk9PTCBDUFdMX0ZvbnRNYXA6Oktub3dXb3JkKEZYX0lOVDMyIG5Gb250SW5kZXgsIEZYX1dPUkQgd29yZCkNCi17DQotCWlmIChuRm9udEluZGV4ID49MCAmJiBuRm9udEluZGV4IDwgbV9hRGF0YS5HZXRTaXplKCkpDQotCXsNCi0JCWlmIChtX2FEYXRhLkdldEF0KG5Gb250SW5kZXgpKQ0KLQkJewkNCi0JCQlyZXR1cm4gQ2hhckNvZGVGcm9tVW5pY29kZShuRm9udEluZGV4LCB3b3JkKSA+PSAwOw0KLQkJfQ0KLQl9DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfSU5UMzIgQ1BXTF9Gb250TWFwOjpHZXRXb3JkRm9udEluZGV4KEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgbkNoYXJzZXQsIEZYX0lOVDMyIG5Gb250SW5kZXgpDQotew0KLQlpZiAobkZvbnRJbmRleCA+IDApDQotCXsNCi0JCWlmIChLbm93V29yZChuRm9udEluZGV4LCB3b3JkKSkNCi0JCQlyZXR1cm4gbkZvbnRJbmRleDsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCWlmIChjb25zdCBDUFdMX0ZvbnRNYXBfRGF0YSogcERhdGEgPSBHZXRGb250TWFwRGF0YSgwKSkNCi0JCXsNCi0JCQlpZiAobkNoYXJzZXQgPT0gREVGQVVMVF9DSEFSU0VUIHx8IA0KLQkJCQlwRGF0YS0+bkNoYXJzZXQgPT0gU1lNQk9MX0NIQVJTRVQgfHwgDQotCQkJCW5DaGFyc2V0ID09IHBEYXRhLT5uQ2hhcnNldCkNCi0JCQl7DQotCQkJCWlmIChLbm93V29yZCgwLCB3b3JkKSkNCi0JCQkJew0KLQkJCQkJcmV0dXJuIDA7DQotCQkJCX0NCi0JCQl9DQotCQl9DQotCX0NCi0NCi0JRlhfSU5UMzIgbk5ld0ZvbnRJbmRleCA9IC0xOw0KLQ0KLQluTmV3Rm9udEluZGV4ID0gdGhpcy0+R2V0Rm9udEluZGV4KEdldE5hdGl2ZUZvbnROYW1lKG5DaGFyc2V0KSwgbkNoYXJzZXQsIFRSVUUpOw0KLQlpZiAobk5ld0ZvbnRJbmRleCA+PSAwKQ0KLQl7DQotCQlpZiAoS25vd1dvcmQobk5ld0ZvbnRJbmRleCwgd29yZCkpDQotCQkJcmV0dXJuIG5OZXdGb250SW5kZXg7DQotCX0NCi0NCi0Jbk5ld0ZvbnRJbmRleCA9IHRoaXMtPkdldEZvbnRJbmRleCgiQXJpYWwgVW5pY29kZSBNUyIsIERFRkFVTFRfQ0hBUlNFVCwgRkFMU0UpOw0KLQlpZiAobk5ld0ZvbnRJbmRleCA+PSAwKQ0KLQl7DQotCQlpZiAoS25vd1dvcmQobk5ld0ZvbnRJbmRleCwgd29yZCkpDQotCQlyZXR1cm4gbk5ld0ZvbnRJbmRleDsNCi0JfQ0KLQ0KLQlyZXR1cm4gLTE7DQotfQ0KLQ0KLUZYX0lOVDMyIENQV0xfRm9udE1hcDo6Q2hhckNvZGVGcm9tVW5pY29kZShGWF9JTlQzMiBuRm9udEluZGV4LCBGWF9XT1JEIHdvcmQpDQotew0KLQlpZiAoQ1BXTF9Gb250TWFwX0RhdGEqIHBEYXRhID0gbV9hRGF0YS5HZXRBdChuRm9udEluZGV4KSkNCi0Jew0KLQkJaWYgKHBEYXRhLT5wRm9udCkNCi0JCXsNCi0JCQlpZiAocERhdGEtPnBGb250LT5Jc1VuaWNvZGVDb21wYXRpYmxlKCkpDQotCQkJew0KLQkJCQlpbnQgbkNoYXJDb2RlID0gcERhdGEtPnBGb250LT5DaGFyQ29kZUZyb21Vbmljb2RlKHdvcmQpOw0KLQkJCQlwRGF0YS0+cEZvbnQtPkdseXBoRnJvbUNoYXJDb2RlKG5DaGFyQ29kZSk7DQotCQkJCXJldHVybiBuQ2hhckNvZGU7DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCWlmICh3b3JkIDwgMHhGRikNCi0JCQkJCXJldHVybiB3b3JkOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gLTE7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfRm9udE1hcDo6R2V0TmF0aXZlRm9udE5hbWUoRlhfSU5UMzIgbkNoYXJzZXQpDQotew0KLQkvL3NlYXJjaGluZyBuYXRpdmUgZm9udCBpcyBzbG93LCBzbyB3ZSBtdXN0IHNhdmUgdGltZQ0KLQlmb3IgKEZYX0lOVDMyIGk9MCxzej1tX2FOYXRpdmVGb250LkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQl7DQotCQlpZiAoQ1BXTF9Gb250TWFwX05hdGl2ZSogcERhdGEgPSBtX2FOYXRpdmVGb250LkdldEF0KGkpKQ0KLQkJew0KLQkJCWlmIChwRGF0YS0+bkNoYXJzZXQgPT0gbkNoYXJzZXQpDQotCQkJCXJldHVybiBwRGF0YS0+c0ZvbnROYW1lOw0KLQkJfQ0KLQl9DQotDQotCUNGWF9CeXRlU3RyaW5nIHNOZXcgPSBHZXROYXRpdmVGb250KG5DaGFyc2V0KTsNCi0NCi0JaWYgKCFzTmV3LklzRW1wdHkoKSkNCi0Jew0KLQkJQ1BXTF9Gb250TWFwX05hdGl2ZSogcE5ld0RhdGEgPSBuZXcgQ1BXTF9Gb250TWFwX05hdGl2ZTsNCi0JCXBOZXdEYXRhLT5uQ2hhcnNldCA9IG5DaGFyc2V0Ow0KLQkJcE5ld0RhdGEtPnNGb250TmFtZSA9IHNOZXc7DQotDQotCQltX2FOYXRpdmVGb250LkFkZChwTmV3RGF0YSk7DQotCX0NCi0NCi0JcmV0dXJuIHNOZXc7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Gb250TWFwOjpFbXB0eSgpDQotew0KLQl7DQotCQlmb3IgKEZYX0lOVDMyIGk9MCwgc3o9bV9hRGF0YS5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0JCQlkZWxldGUgbV9hRGF0YS5HZXRBdChpKTsNCi0NCi0JCW1fYURhdGEuUmVtb3ZlQWxsKCk7DQotCX0NCi0Jew0KLQkJZm9yIChGWF9JTlQzMiBpPTAsIHN6PW1fYU5hdGl2ZUZvbnQuR2V0U2l6ZSgpOyBpPHN6OyBpKyspDQotCQkJZGVsZXRlIG1fYU5hdGl2ZUZvbnQuR2V0QXQoaSk7DQotDQotCQltX2FOYXRpdmVGb250LlJlbW92ZUFsbCgpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Gb250TWFwOjpJbml0aWFsKEZYX0xQQ1NUUiBmb250bmFtZSkNCi17DQotCUNGWF9CeXRlU3RyaW5nIHNGb250TmFtZSA9IGZvbnRuYW1lOw0KLQ0KLQlpZiAoc0ZvbnROYW1lLklzRW1wdHkoKSkNCi0JCXNGb250TmFtZSA9IERFRkFVTFRfRk9OVF9OQU1FOw0KLQ0KLQlHZXRGb250SW5kZXgoc0ZvbnROYW1lLCBBTlNJX0NIQVJTRVQsIEZBTFNFKTsNCi0NCi0JLy9HZXRGb250SW5kZXgodGhpcy0+R2V0TmF0aXZlRm9udE5hbWUobkNoYXJzZXQpLCBuQ2hhcnNldCk7DQotfQ0KLQkNCi0NCi0vKg0KLUxpc3Qgb2YgY3VycmVudGx5IHN1cHBvcnRlZCBzdGFuZGFyZCBmb250czoNCi1Db3VyaWVyLCBDb3VyaWVyLUJvbGQsIENvdXJpZXItQm9sZE9ibGlxdWUsIENvdXJpZXItT2JsaXF1ZQ0KLUhlbHZldGljYSwgSGVsdmV0aWNhLUJvbGQsIEhlbHZldGljYS1Cb2xkT2JsaXF1ZSwgSGVsdmV0aWNhLU9ibGlxdWUNCi1UaW1lcy1Sb21hbiwgVGltZXMtQm9sZCwgVGltZXMtSXRhbGljLCBUaW1lcy1Cb2xkSXRhbGljDQotU3ltYm9sLCBaYXBmRGluZ2JhdHMNCi0qLw0KLQ0KLWNvbnN0IGNoYXIqIGdfc0RFU3RhbmRhcmRGb250TmFtZVtdID0geyJDb3VyaWVyIiwgIkNvdXJpZXItQm9sZCIsICJDb3VyaWVyLUJvbGRPYmxpcXVlIiwgIkNvdXJpZXItT2JsaXF1ZSIsDQotCSJIZWx2ZXRpY2EiLCAiSGVsdmV0aWNhLUJvbGQiLCAiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIiwgIkhlbHZldGljYS1PYmxpcXVlIiwNCi0JIlRpbWVzLVJvbWFuIiwgIlRpbWVzLUJvbGQiLCAiVGltZXMtSXRhbGljIiwgIlRpbWVzLUJvbGRJdGFsaWMiLA0KLQkiU3ltYm9sIiwgIlphcGZEaW5nYmF0cyJ9Ow0KLQ0KLUZYX0JPT0wJQ1BXTF9Gb250TWFwOjpJc1N0YW5kYXJkRm9udChjb25zdCBDRlhfQnl0ZVN0cmluZyYgc0ZvbnROYW1lKQ0KLXsNCi0JZm9yIChGWF9JTlQzMiBpPTA7IGk8MTQ7IGkrKykNCi0Jew0KLQkJaWYgKHNGb250TmFtZSA9PSBnX3NERVN0YW5kYXJkRm9udE5hbWVbaV0pDQotCQkJcmV0dXJuIFRSVUU7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9JTlQzMiBDUFdMX0ZvbnRNYXA6OkZpbmRGb250KGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzRm9udE5hbWUsIEZYX0lOVDMyIG5DaGFyc2V0KQ0KLXsNCi0JZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9hRGF0YS5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJaWYgKENQV0xfRm9udE1hcF9EYXRhKiBwRGF0YSA9IG1fYURhdGEuR2V0QXQoaSkpDQotCQl7DQotCQkJaWYgKG5DaGFyc2V0ID09IERFRkFVTFRfQ0hBUlNFVCB8fCBuQ2hhcnNldCA9PSBwRGF0YS0+bkNoYXJzZXQpDQotCQkJew0KLQkJCQlpZiAoc0ZvbnROYW1lLklzRW1wdHkoKSB8fCBwRGF0YS0+c0ZvbnROYW1lID09IHNGb250TmFtZSkNCi0JCQkJCXJldHVybiBpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gLTE7DQotfQ0KLQ0KLUZYX0lOVDMyIENQV0xfRm9udE1hcDo6R2V0Rm9udEluZGV4KGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzRm9udE5hbWUsIEZYX0lOVDMyIG5DaGFyc2V0LCBGWF9CT09MIGJGaW5kKQ0KLXsNCi0JRlhfSU5UMzIgbkZvbnRJbmRleCA9IEZpbmRGb250KEVuY29kZUZvbnRBbGlhcyhzRm9udE5hbWUsIG5DaGFyc2V0KSwgbkNoYXJzZXQpOw0KLQlpZiAobkZvbnRJbmRleCA+PSAwKSByZXR1cm4gbkZvbnRJbmRleDsNCi0NCi0vLwluRm9udEluZGV4ID0gRmluZEZvbnQoIiIsIG5DaGFyc2V0KTsNCi0vLwlpZiAobkZvbnRJbmRleCA+PSAwKSByZXR1cm4gbkZvbnRJbmRleDsNCi0NCi0JQ0ZYX0J5dGVTdHJpbmcgc0FsaWFzOw0KLQlDUERGX0ZvbnQqIHBGb250ID0gTlVMTDsNCi0NCi0JaWYgKGJGaW5kKQ0KLQkJcEZvbnQgPSBGaW5kRm9udFNhbWVDaGFyc2V0KHNBbGlhcywgbkNoYXJzZXQpOw0KLQ0KLQlpZiAoIXBGb250KQ0KLQl7DQotCQlDRlhfQnl0ZVN0cmluZyBzVGVtcCA9IHNGb250TmFtZTsNCi0JCXBGb250ID0gQWRkRm9udFRvRG9jdW1lbnQoR2V0RG9jdW1lbnQoKSwgc1RlbXAsIG5DaGFyc2V0KTsNCi0NCi0JCS8qDQotCQlpZiAoRmluZEZvbnQoc0FsaWFzKSkNCi0JCXsNCi0JCQlzQWxpYXMgPSBFbmNvZGVGb250QWxpYXMoc1RlbXAsIG5DaGFyc2V0KTsNCi0JCX0NCi0JCWVsc2UNCi0JCSovDQotCQl7DQotCQkJc0FsaWFzID0gRW5jb2RlRm9udEFsaWFzKHNUZW1wLCBuQ2hhcnNldCk7DQotCQl9CQkNCi0JfQ0KLQ0KLQlBZGRlZEZvbnQocEZvbnQsIHNBbGlhcyk7DQotDQotCXJldHVybiBBZGRGb250RGF0YShwRm9udCwgc0FsaWFzLCBuQ2hhcnNldCk7DQotfQ0KLQ0KLUZYX0lOVDMyIENQV0xfRm9udE1hcDo6R2V0UFdMRm9udEluZGV4KEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgbkNoYXJzZXQpDQotew0KLQlGWF9JTlQzMiBuRmluZCA9IC0xOw0KLQ0KLQlmb3IgKEZYX0lOVDMyIGk9MCxzej1tX2FEYXRhLkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQl7DQotCQlpZiAoQ1BXTF9Gb250TWFwX0RhdGEqIHBEYXRhID0gbV9hRGF0YS5HZXRBdChpKSkNCi0JCXsNCi0JCQlpZiAocERhdGEtPm5DaGFyc2V0ID09IG5DaGFyc2V0KQ0KLQkJCXsNCi0JCQkJbkZpbmQgPSBpOw0KLQkJCQlicmVhazsNCi0JCQl9DQotCQl9DQotCX0NCi0NCi0JQ1BERl9Gb250KiBwTmV3Rm9udCA9IEdldFBERkZvbnQobkZpbmQpOw0KLQ0KLQlpZiAoIXBOZXdGb250KSByZXR1cm4gLTE7DQotDQotCS8qDQotCWlmIChDUERGX0ZvbnQqIHBGb250ID0gR2V0UERGRm9udChuRmluZCkpDQotCXsNCi0JCVBXTEZvbnQuQWRkV29yZFRvRm9udERpY3QocEZvbnREaWN0LCB3b3JkKTsNCi0JfQ0KLQkqLw0KLQ0KLSNpZmRlZiBGT1hJVF9DSFJPTUVfQlVJTEQNCi0gIENGWF9CeXRlU3RyaW5nIHNBbGlhcyA9IEVuY29kZUZvbnRBbGlhcygiQXJpYWxfQ2hyb21lIiwgbkNoYXJzZXQpOw0KLSNlbHNlDQotCUNGWF9CeXRlU3RyaW5nIHNBbGlhcyA9IEVuY29kZUZvbnRBbGlhcygiQXJpYWxfRm94aXQiLCBuQ2hhcnNldCk7DQotI2VuZGlmDQotCUFkZGVkRm9udChwTmV3Rm9udCwgc0FsaWFzKTsNCi0NCi0JcmV0dXJuIEFkZEZvbnREYXRhKHBOZXdGb250LCBzQWxpYXMsIG5DaGFyc2V0KTsNCi19DQotDQotQ1BERl9Gb250KiBDUFdMX0ZvbnRNYXA6OkZpbmRGb250U2FtZUNoYXJzZXQoQ0ZYX0J5dGVTdHJpbmcmIHNGb250QWxpYXMsIEZYX0lOVDMyIG5DaGFyc2V0KQ0KLXsNCi0JcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLUZYX0lOVDMyIENQV0xfRm9udE1hcDo6QWRkRm9udERhdGEoQ1BERl9Gb250KiBwRm9udCwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNGb250QWxpYXMsIEZYX0lOVDMyIG5DaGFyc2V0KQ0KLXsNCi0JQ1BXTF9Gb250TWFwX0RhdGEqIHBOZXdEYXRhID0gbmV3IENQV0xfRm9udE1hcF9EYXRhOw0KLQlwTmV3RGF0YS0+cEZvbnQgPSBwRm9udDsNCi0JcE5ld0RhdGEtPnNGb250TmFtZSA9IHNGb250QWxpYXM7DQotCXBOZXdEYXRhLT5uQ2hhcnNldCA9IG5DaGFyc2V0Ow0KLQ0KLQltX2FEYXRhLkFkZChwTmV3RGF0YSk7DQotDQotCXJldHVybiBtX2FEYXRhLkdldFNpemUoKSAtMTsNCi19DQotDQotdm9pZCBDUFdMX0ZvbnRNYXA6OkFkZGVkRm9udChDUERGX0ZvbnQqIHBGb250LCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc0ZvbnRBbGlhcykNCi17DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfRm9udE1hcDo6R2V0Rm9udE5hbWUoRlhfSU5UMzIgbkZvbnRJbmRleCkNCi17DQotCWlmIChuRm9udEluZGV4ID49MCAmJiBuRm9udEluZGV4IDwgbV9hRGF0YS5HZXRTaXplKCkpDQotCXsNCi0JCWlmIChDUFdMX0ZvbnRNYXBfRGF0YSogcERhdGEgPSBtX2FEYXRhLkdldEF0KG5Gb250SW5kZXgpKQ0KLQkJew0KLQkJCXJldHVybiBwRGF0YS0+c0ZvbnROYW1lOw0KLQkJfQ0KLQl9DQotDQotCXJldHVybiAiIjsNCi19DQotDQotQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9Gb250TWFwOjpHZXROYXRpdmVGb250KEZYX0lOVDMyIG5DaGFyc2V0KQ0KLXsNCi0JQ0ZYX0J5dGVTdHJpbmcgc0ZvbnROYW1lOw0KLQ0KLQlpZiAobkNoYXJzZXQgPT0gREVGQVVMVF9DSEFSU0VUKQ0KLQkJbkNoYXJzZXQgPSBHZXROYXRpdmVDaGFyc2V0KCk7DQotDQotCXNGb250TmFtZSA9IEdldERlZmF1bHRGb250QnlDaGFyc2V0KG5DaGFyc2V0KTsNCi0NCi0JaWYgKG1fcFN5c3RlbUhhbmRsZXIpDQotCXsNCi0JCWlmIChtX3BTeXN0ZW1IYW5kbGVyLT5GaW5kTmF0aXZlVHJ1ZVR5cGVGb250KG5DaGFyc2V0LCBzRm9udE5hbWUpKQ0KLQkJCXJldHVybiBzRm9udE5hbWU7DQotDQotCQlzRm9udE5hbWUgPSBtX3BTeXN0ZW1IYW5kbGVyLT5HZXROYXRpdmVUcnVlVHlwZUZvbnQobkNoYXJzZXQpOw0KLQl9DQotDQotCXJldHVybiBzRm9udE5hbWU7DQotfQ0KLQ0KLUNQREZfRm9udCogQ1BXTF9Gb250TWFwOjpBZGRGb250VG9Eb2N1bWVudChDUERGX0RvY3VtZW50KiBwRG9jLCBDRlhfQnl0ZVN0cmluZyYgc0ZvbnROYW1lLCBGWF9CWVRFIG5DaGFyc2V0KQ0KLXsNCi0JaWYgKElzU3RhbmRhcmRGb250KHNGb250TmFtZSkpDQotCQlyZXR1cm4gQWRkU3RhbmRhcmRGb250KHBEb2MsIHNGb250TmFtZSk7DQotCWVsc2UNCi0JCXJldHVybiBBZGRTeXN0ZW1Gb250KHBEb2MsIHNGb250TmFtZSwgbkNoYXJzZXQpOw0KLX0NCi0NCi1DUERGX0ZvbnQqIENQV0xfRm9udE1hcDo6QWRkU3RhbmRhcmRGb250KENQREZfRG9jdW1lbnQqIHBEb2MsIENGWF9CeXRlU3RyaW5nJiBzRm9udE5hbWUpDQotew0KLQlpZiAoIXBEb2MpIHJldHVybiBOVUxMOw0KLQ0KLQlDUERGX0ZvbnQqIHBGb250ID0gTlVMTDsNCi0NCi0JaWYgKHNGb250TmFtZSA9PSAiWmFwZkRpbmdiYXRzIikNCi0JCXBGb250ID0gcERvYy0+QWRkU3RhbmRhcmRGb250KHNGb250TmFtZSwgTlVMTCk7DQotCWVsc2UNCi0Jew0KLQkJQ1BERl9Gb250RW5jb2RpbmcgZmUoUERGRk9OVF9FTkNPRElOR19XSU5BTlNJKTsNCi0JCXBGb250ID0gcERvYy0+QWRkU3RhbmRhcmRGb250KHNGb250TmFtZSwgJmZlKTsNCi0JfQ0KLQ0KLQlyZXR1cm4gcEZvbnQ7DQotfQ0KLQ0KLUNQREZfRm9udCogQ1BXTF9Gb250TWFwOjpBZGRTeXN0ZW1Gb250KENQREZfRG9jdW1lbnQqIHBEb2MsIENGWF9CeXRlU3RyaW5nJiBzRm9udE5hbWUsIEZYX0JZVEUgbkNoYXJzZXQpDQotew0KLQlpZiAoIXBEb2MpIHJldHVybiBOVUxMOw0KLQ0KLQlpZiAoc0ZvbnROYW1lLklzRW1wdHkoKSkgc0ZvbnROYW1lID0gR2V0TmF0aXZlRm9udChuQ2hhcnNldCk7DQotCWlmIChuQ2hhcnNldCA9PSBERUZBVUxUX0NIQVJTRVQpIG5DaGFyc2V0ID0gR2V0TmF0aXZlQ2hhcnNldCgpOw0KLQ0KLQlpZiAobV9wU3lzdGVtSGFuZGxlcikNCi0JCXJldHVybiBtX3BTeXN0ZW1IYW5kbGVyLT5BZGROYXRpdmVUcnVlVHlwZUZvbnRUb1BERihwRG9jLCBzRm9udE5hbWUsIG5DaGFyc2V0KTsNCi0JDQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDUFdMX0ZvbnRNYXA6OkVuY29kZUZvbnRBbGlhcyhjb25zdCBDRlhfQnl0ZVN0cmluZyYgc0ZvbnROYW1lLCBGWF9JTlQzMiBuQ2hhcnNldCkNCi17DQotCUNGWF9CeXRlU3RyaW5nIHNQb3N0Zml4Ow0KLQlzUG9zdGZpeC5Gb3JtYXQoIl8lMDJYIiwgbkNoYXJzZXQpOw0KLQlyZXR1cm4gRW5jb2RlRm9udEFsaWFzKHNGb250TmFtZSkgKyBzUG9zdGZpeDsNCi19DQotDQotQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9Gb250TWFwOjpFbmNvZGVGb250QWxpYXMoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNGb250TmFtZSkNCi17DQotCUNGWF9CeXRlU3RyaW5nIHNSZXQgPSBzRm9udE5hbWU7DQotCXNSZXQuUmVtb3ZlKCcgJyk7DQotCXJldHVybiBzUmV0Ow0KLX0NCi0NCi1GWF9JTlQzMiBDUFdMX0ZvbnRNYXA6OkdldEZvbnRNYXBDb3VudCgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9hRGF0YS5HZXRTaXplKCk7DQotfQ0KLQ0KLWNvbnN0IENQV0xfRm9udE1hcF9EYXRhKiBDUFdMX0ZvbnRNYXA6OkdldEZvbnRNYXBEYXRhKEZYX0lOVDMyIG5JbmRleCkgY29uc3QNCi17DQotCWlmIChuSW5kZXggPj0wICYmIG5JbmRleCA8IG1fYURhdGEuR2V0U2l6ZSgpKQ0KLQl7DQotCQlyZXR1cm4gbV9hRGF0YS5HZXRBdChuSW5kZXgpOw0KLQl9DQotDQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi1GWF9JTlQzMiBDUFdMX0ZvbnRNYXA6OkdldE5hdGl2ZUNoYXJzZXQoKQ0KLXsNCi0JRlhfQllURSBuQ2hhcnNldCA9IEFOU0lfQ0hBUlNFVDsNCi0JRlhfSU5UMzIgaUNvZGVQYWdlID0gRlhTWVNfR2V0QUNQKCk7DQotCXN3aXRjaCAoaUNvZGVQYWdlKQ0KLQl7DQotCWNhc2UgOTMyOi8vSmFwYW4NCi0JCW5DaGFyc2V0ID0gU0hJRlRKSVNfQ0hBUlNFVDsNCi0JCWJyZWFrOw0KLQljYXNlIDkzNjovL0NoaW5lc2UgKFBSQywgU2luZ2Fwb3JlKQ0KLQkJbkNoYXJzZXQgPSBHQjIzMTJfQ0hBUlNFVDsNCi0JCWJyZWFrOw0KLQljYXNlIDk1MDovL0NoaW5lc2UgKFRhaXdhbjsgSG9uZyBLb25nIFNBUiwgUFJDKQ0KLQkJbkNoYXJzZXQgPSBHQjIzMTJfQ0hBUlNFVDsNCi0JCWJyZWFrOw0KLQljYXNlIDEyNTI6Ly9XaW5kb3dzIDMuMSBMYXRpbiAxIChVUywgV2VzdGVybiBFdXJvcGUpDQotCQluQ2hhcnNldCA9IEFOU0lfQ0hBUlNFVDsNCi0JCWJyZWFrOw0KLQljYXNlIDg3NDovL1RoYWkNCi0JCW5DaGFyc2V0ID0gVEhBSV9DSEFSU0VUOw0KLQkJYnJlYWs7DQotCWNhc2UgOTQ5Oi8vS29yZWFuDQotCQluQ2hhcnNldCA9IEhBTkdVTF9DSEFSU0VUOw0KLQkJYnJlYWs7DQotCWNhc2UgMTIwMDovL1VuaWNvZGUgKEJNUCBvZiBJU08gMTA2NDYpDQotCQluQ2hhcnNldCA9IEFOU0lfQ0hBUlNFVDsNCi0JCWJyZWFrOw0KLQljYXNlIDEyNTA6Ly9XaW5kb3dzIDMuMSBFYXN0ZXJuIEV1cm9wZWFuDQotCQluQ2hhcnNldCA9IEVBU1RFVVJPUEVfQ0hBUlNFVDsNCi0JCWJyZWFrOw0KLQljYXNlIDEyNTE6Ly9XaW5kb3dzIDMuMSBDeXJpbGxpYw0KLQkJbkNoYXJzZXQgPSBSVVNTSUFOX0NIQVJTRVQ7DQotCQlicmVhazsNCi0JY2FzZSAxMjUzOi8vV2luZG93cyAzLjEgR3JlZWsNCi0JCW5DaGFyc2V0ID0gR1JFRUtfQ0hBUlNFVDsNCi0JCWJyZWFrOw0KLQljYXNlIDEyNTQ6Ly9XaW5kb3dzIDMuMSBUdXJraXNoDQotCQluQ2hhcnNldCA9IFRVUktJU0hfQ0hBUlNFVDsNCi0JCWJyZWFrOw0KLQljYXNlIDEyNTU6Ly9IZWJyZXcNCi0JCW5DaGFyc2V0ID0gSEVCUkVXX0NIQVJTRVQ7DQotCQlicmVhazsNCi0JY2FzZSAxMjU2Oi8vQXJhYmljDQotCQluQ2hhcnNldCA9IEFSQUJJQ19DSEFSU0VUOw0KLQkJYnJlYWs7DQotCWNhc2UgMTI1NzovL0JhbHRpYw0KLQkJbkNoYXJzZXQgPSBCQUxUSUNfQ0hBUlNFVDsNCi0JCWJyZWFrOw0KLQljYXNlIDEyNTg6Ly9WaWV0bmFtZXNlDQotCQluQ2hhcnNldCA9IFZJRVROQU1FU0VfQ0hBUlNFVDsNCi0JCWJyZWFrOw0KLQljYXNlIDEzNjE6Ly9Lb3JlYW4oSm9oYWIpDQotCQluQ2hhcnNldCA9IEpPSEFCX0NIQVJTRVQ7DQotCQlicmVhazsNCi0JfQ0KLQlyZXR1cm4gbkNoYXJzZXQ7DQotfQ0KLQ0KLWNvbnN0IENQV0xfRm9udE1hcDo6Q2hhcnNldEZvbnRNYXAgQ1BXTF9Gb250TWFwOjpkZWZhdWx0VFRGTWFwW10gPSB7DQotCXsgQU5TSV9DSEFSU0VULCAiSGVsdmV0aWNhIiB9LA0KLQl7IEdCMjMxMl9DSEFSU0VULCAiU2ltU3VuIiB9LA0KLQl7IENISU5FU0VCSUc1X0NIQVJTRVQsICJNaW5nTGlVIiB9LA0KLQl7IFNISUZUSklTX0NIQVJTRVQsICJNUyBHb3RoaWMiIH0sDQotCXsgSEFOR1VMX0NIQVJTRVQsICJCYXRhbmciIH0sDQotCXsgUlVTU0lBTl9DSEFSU0VULCAiQXJpYWwiIH0sDQotCXsgRUFTVEVVUk9QRV9DSEFSU0VULCAiVGFob21hIiB9LA0KLQl7IEFSQUJJQ19DSEFSU0VULCAiQXJpYWwiIH0sDQotCXsgLTEsIE5VTEwgfQ0KLX07DQotDQotQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9Gb250TWFwOjpHZXREZWZhdWx0Rm9udEJ5Q2hhcnNldChGWF9JTlQzMiBuQ2hhcnNldCkNCi17DQotCWludCBpID0gMDsNCi0Jd2hpbGUgKGRlZmF1bHRUVEZNYXBbaV0uY2hhcnNldCAhPSAtMSkgew0KLQkJaWYgKG5DaGFyc2V0ID09IGRlZmF1bHRUVEZNYXBbaV0uY2hhcnNldCkNCi0JCQlyZXR1cm4gZGVmYXVsdFRURk1hcFtpXS5mb250bmFtZTsNCi0gICAgICAgICsraTsNCi0JfQ0KLQlyZXR1cm4gIiI7DQotfQ0KLQ0KLUZYX0lOVDMyIENQV0xfRm9udE1hcDo6Q2hhclNldEZyb21Vbmljb2RlKEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgbk9sZENoYXJzZXQpDQotew0KLQlpZihtX3BTeXN0ZW1IYW5kbGVyICYmICgtMSAhPSBtX3BTeXN0ZW1IYW5kbGVyLT5HZXRDaGFyU2V0KCkpKQ0KLQkJcmV0dXJuIG1fcFN5c3RlbUhhbmRsZXItPkdldENoYXJTZXQoKTsNCi0JLy90byBhdm9pZCBDSksgRm9udCB0byBzaG93IEFTQ0lJDQotCWlmICh3b3JkIDwgMHg3RikgcmV0dXJuIEFOU0lfQ0hBUlNFVDsNCi0JLy9mb2xsb3cgdGhlIG9sZCBjaGFyc2V0DQotCWlmIChuT2xkQ2hhcnNldCAhPSBERUZBVUxUX0NIQVJTRVQpIHJldHVybiBuT2xkQ2hhcnNldDsNCi0NCi0JLy9maW5kIG5ldyBjaGFyc2V0DQotCWlmICgod29yZCA+PSAweDRFMDAgJiYgd29yZCA8PSAweDlGQTUpIHx8IA0KLQkJKHdvcmQgPj0gMHhFN0M3ICYmIHdvcmQgPD0gMHhFN0YzKSB8fA0KLQkJKHdvcmQgPj0gMHgzMDAwICYmIHdvcmQgPD0gMHgzMDNGKSB8fCAvL6OpIqG2IiAiobciICKhoyIgIqGiIiANCi0JCSh3b3JkID49IDB4MjAwMCAmJiB3b3JkIDw9IDB4MjA2RikpDQotCXsNCi0JCXJldHVybiBHQjIzMTJfQ0hBUlNFVDsNCi0JfQ0KLQ0KLQlpZiAoKCh3b3JkID49IDB4MzA0MCkgJiYgKHdvcmQgPD0gMHgzMDlGKSkgfHwNCi0JCSgod29yZCA+PSAweDMwQTApICYmICh3b3JkIDw9IDB4MzBGRikpIHx8DQotCQkoKHdvcmQgPj0gMHgzMUYwKSAmJiAod29yZCA8PSAweDMxRkYpKSB8fA0KLQkJKCh3b3JkID49IDB4RkYwMCkgJiYgKHdvcmQgPD0gMHhGRkVGKSkgKQ0KLQl7DQotCQlyZXR1cm4gU0hJRlRKSVNfQ0hBUlNFVDsNCi0JfQ0KLQ0KLQlpZiAoKCh3b3JkID49IDB4QUMwMCkgJiYgKHdvcmQgPD0gMHhEN0FGKSkgfHwNCi0JCSgod29yZCA+PSAweDExMDApICYmICh3b3JkIDw9IDB4MTFGRikpIHx8DQotCQkoKHdvcmQgPj0gMHgzMTMwKSAmJiAod29yZCA8PSAweDMxOEYpKSkNCi0Jew0KLQkJcmV0dXJuIEhBTkdVTF9DSEFSU0VUOw0KLQl9DQotDQotCWlmICh3b3JkID49IDB4MEUwMCAmJiB3b3JkIDw9IDB4MEU3RikNCi0JCXJldHVybiBUSEFJX0NIQVJTRVQ7DQotDQotCWlmICgod29yZCA+PSAweDAzNzAgJiYgd29yZCA8PSAweDAzRkYpIHx8DQotCQkod29yZCA+PSAweDFGMDAgJiYgd29yZCA8PSAweDFGRkYpKQ0KLQkJcmV0dXJuIEdSRUVLX0NIQVJTRVQ7DQotDQotCWlmICgod29yZCA+PSAweDA2MDAgJiYgd29yZCA8PSAweDA2RkYpIHx8DQotCQkod29yZCA+PSAweEZCNTAgJiYgd29yZCA8PSAweEZFRkMpKQ0KLQkJcmV0dXJuIEFSQUJJQ19DSEFSU0VUOw0KLQ0KLQlpZiAod29yZCA+PSAweDA1OTAgJiYgd29yZCA8PSAweDA1RkYpDQotCQlyZXR1cm4gSEVCUkVXX0NIQVJTRVQ7DQotDQotCWlmICh3b3JkID49IDB4MDQwMCAmJiB3b3JkIDw9IDB4MDRGRikNCi0JCXJldHVybiBSVVNTSUFOX0NIQVJTRVQ7DQotDQotCWlmICh3b3JkID49IDB4MDEwMCAmJiB3b3JkIDw9IDB4MDI0RikNCi0JCXJldHVybiBFQVNURVVST1BFX0NIQVJTRVQ7DQotDQotCWlmICh3b3JkID49IDB4MUUwMCAmJiB3b3JkIDw9IDB4MUVGRikNCi0JCXJldHVybiBWSUVUTkFNRVNFX0NIQVJTRVQ7DQotDQotCXJldHVybiBBTlNJX0NIQVJTRVQ7DQotfQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX0RvY0ZvbnRNYXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ1BXTF9Eb2NGb250TWFwOjpDUFdMX0RvY0ZvbnRNYXAoSUZYX1N5c3RlbUhhbmRsZXIqIHBTeXN0ZW1IYW5kbGVyLCBDUERGX0RvY3VtZW50KiBwQXR0YWNoZWREb2MpIA0KLQk6IENQV0xfRm9udE1hcChwU3lzdGVtSGFuZGxlciksDQotCW1fcEF0dGFjaGVkRG9jKHBBdHRhY2hlZERvYykNCi17DQotfQ0KLQ0KLUNQV0xfRG9jRm9udE1hcDo6fkNQV0xfRG9jRm9udE1hcCgpDQotew0KLX0NCi0NCi1DUERGX0RvY3VtZW50KiBDUFdMX0RvY0ZvbnRNYXA6OkdldERvY3VtZW50KCkNCi17DQotCXJldHVybiBtX3BBdHRhY2hlZERvYzsNCi19DQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BERldpbmRvdy5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9XbmQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfRm9udE1hcC5oIgorCisjZGVmaW5lIERFRkFVTFRfRk9OVF9OQU1FCQkJIkhlbHZldGljYSIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfRm9udE1hcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ1BXTF9Gb250TWFwOjpDUFdMX0ZvbnRNYXAoSUZYX1N5c3RlbUhhbmRsZXIqIHBTeXN0ZW1IYW5kbGVyKSA6IAkKKwltX3BQREZEb2MoTlVMTCksCisJbV9wU3lzdGVtSGFuZGxlcihwU3lzdGVtSGFuZGxlcikKK3sKKwlBU1NFUlQobV9wU3lzdGVtSGFuZGxlciAhPSBOVUxMKTsKK30KKworQ1BXTF9Gb250TWFwOjp+Q1BXTF9Gb250TWFwKCkKK3sKKwlpZiAobV9wUERGRG9jKQorCXsKKwkJZGVsZXRlIG1fcFBERkRvYzsKKwkJbV9wUERGRG9jID0gTlVMTDsKKwl9CisKKwlFbXB0eSgpOworfQorCit2b2lkIENQV0xfRm9udE1hcDo6U2V0U3lzdGVtSGFuZGxlcihJRlhfU3lzdGVtSGFuZGxlciogcFN5c3RlbUhhbmRsZXIpCit7CisJbV9wU3lzdGVtSGFuZGxlciA9IHBTeXN0ZW1IYW5kbGVyOworfQorCitDUERGX0RvY3VtZW50KiBDUFdMX0ZvbnRNYXA6OkdldERvY3VtZW50KCkKK3sKKwlpZiAoIW1fcFBERkRvYykKKwl7CisJCWlmIChDUERGX01vZHVsZU1ncjo6R2V0KCkpCisJCXsKKwkJCW1fcFBERkRvYyA9IEZYX05FVyBDUERGX0RvY3VtZW50OworCQkJbV9wUERGRG9jLT5DcmVhdGVOZXdEb2MoKTsKKwkJfQorCX0KKworCXJldHVybiBtX3BQREZEb2M7Cit9CisKK0NQREZfRm9udCogQ1BXTF9Gb250TWFwOjpHZXRQREZGb250KEZYX0lOVDMyIG5Gb250SW5kZXgpCit7CisJaWYgKG5Gb250SW5kZXggPj0wICYmIG5Gb250SW5kZXggPCBtX2FEYXRhLkdldFNpemUoKSkKKwl7CisJCWlmIChDUFdMX0ZvbnRNYXBfRGF0YSogcERhdGEgPSBtX2FEYXRhLkdldEF0KG5Gb250SW5kZXgpKQorCQl7CisJCQlyZXR1cm4gcERhdGEtPnBGb250OworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQV0xfRm9udE1hcDo6R2V0UERGRm9udEFsaWFzKEZYX0lOVDMyIG5Gb250SW5kZXgpCit7CisJaWYgKG5Gb250SW5kZXggPj0wICYmIG5Gb250SW5kZXggPCBtX2FEYXRhLkdldFNpemUoKSkKKwl7CisJCWlmIChDUFdMX0ZvbnRNYXBfRGF0YSogcERhdGEgPSBtX2FEYXRhLkdldEF0KG5Gb250SW5kZXgpKQorCQl7CisJCQlyZXR1cm4gcERhdGEtPnNGb250TmFtZTsKKwkJfQorCX0KKworCXJldHVybiAiIjsKK30KKworRlhfQk9PTCBDUFdMX0ZvbnRNYXA6Oktub3dXb3JkKEZYX0lOVDMyIG5Gb250SW5kZXgsIEZYX1dPUkQgd29yZCkKK3sKKwlpZiAobkZvbnRJbmRleCA+PTAgJiYgbkZvbnRJbmRleCA8IG1fYURhdGEuR2V0U2l6ZSgpKQorCXsKKwkJaWYgKG1fYURhdGEuR2V0QXQobkZvbnRJbmRleCkpCisJCXsJCisJCQlyZXR1cm4gQ2hhckNvZGVGcm9tVW5pY29kZShuRm9udEluZGV4LCB3b3JkKSA+PSAwOworCQl9CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9JTlQzMiBDUFdMX0ZvbnRNYXA6OkdldFdvcmRGb250SW5kZXgoRlhfV09SRCB3b3JkLCBGWF9JTlQzMiBuQ2hhcnNldCwgRlhfSU5UMzIgbkZvbnRJbmRleCkKK3sKKwlpZiAobkZvbnRJbmRleCA+IDApCisJeworCQlpZiAoS25vd1dvcmQobkZvbnRJbmRleCwgd29yZCkpCisJCQlyZXR1cm4gbkZvbnRJbmRleDsKKwl9CisJZWxzZQorCXsKKwkJaWYgKGNvbnN0IENQV0xfRm9udE1hcF9EYXRhKiBwRGF0YSA9IEdldEZvbnRNYXBEYXRhKDApKQorCQl7CisJCQlpZiAobkNoYXJzZXQgPT0gREVGQVVMVF9DSEFSU0VUIHx8IAorCQkJCXBEYXRhLT5uQ2hhcnNldCA9PSBTWU1CT0xfQ0hBUlNFVCB8fCAKKwkJCQluQ2hhcnNldCA9PSBwRGF0YS0+bkNoYXJzZXQpCisJCQl7CisJCQkJaWYgKEtub3dXb3JkKDAsIHdvcmQpKQorCQkJCXsKKwkJCQkJcmV0dXJuIDA7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJRlhfSU5UMzIgbk5ld0ZvbnRJbmRleCA9IC0xOworCisJbk5ld0ZvbnRJbmRleCA9IHRoaXMtPkdldEZvbnRJbmRleChHZXROYXRpdmVGb250TmFtZShuQ2hhcnNldCksIG5DaGFyc2V0LCBUUlVFKTsKKwlpZiAobk5ld0ZvbnRJbmRleCA+PSAwKQorCXsKKwkJaWYgKEtub3dXb3JkKG5OZXdGb250SW5kZXgsIHdvcmQpKQorCQkJcmV0dXJuIG5OZXdGb250SW5kZXg7CisJfQorCisJbk5ld0ZvbnRJbmRleCA9IHRoaXMtPkdldEZvbnRJbmRleCgiQXJpYWwgVW5pY29kZSBNUyIsIERFRkFVTFRfQ0hBUlNFVCwgRkFMU0UpOworCWlmIChuTmV3Rm9udEluZGV4ID49IDApCisJeworCQlpZiAoS25vd1dvcmQobk5ld0ZvbnRJbmRleCwgd29yZCkpCisJCXJldHVybiBuTmV3Rm9udEluZGV4OworCX0KKworCXJldHVybiAtMTsKK30KKworRlhfSU5UMzIgQ1BXTF9Gb250TWFwOjpDaGFyQ29kZUZyb21Vbmljb2RlKEZYX0lOVDMyIG5Gb250SW5kZXgsIEZYX1dPUkQgd29yZCkKK3sKKwlpZiAoQ1BXTF9Gb250TWFwX0RhdGEqIHBEYXRhID0gbV9hRGF0YS5HZXRBdChuRm9udEluZGV4KSkKKwl7CisJCWlmIChwRGF0YS0+cEZvbnQpCisJCXsKKwkJCWlmIChwRGF0YS0+cEZvbnQtPklzVW5pY29kZUNvbXBhdGlibGUoKSkKKwkJCXsKKwkJCQlpbnQgbkNoYXJDb2RlID0gcERhdGEtPnBGb250LT5DaGFyQ29kZUZyb21Vbmljb2RlKHdvcmQpOworCQkJCXBEYXRhLT5wRm9udC0+R2x5cGhGcm9tQ2hhckNvZGUobkNoYXJDb2RlKTsKKwkJCQlyZXR1cm4gbkNoYXJDb2RlOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWlmICh3b3JkIDwgMHhGRikKKwkJCQkJcmV0dXJuIHdvcmQ7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQV0xfRm9udE1hcDo6R2V0TmF0aXZlRm9udE5hbWUoRlhfSU5UMzIgbkNoYXJzZXQpCit7CisJLy9zZWFyY2hpbmcgbmF0aXZlIGZvbnQgaXMgc2xvdywgc28gd2UgbXVzdCBzYXZlIHRpbWUKKwlmb3IgKEZYX0lOVDMyIGk9MCxzej1tX2FOYXRpdmVGb250LkdldFNpemUoKTsgaTxzejsgaSsrKQorCXsKKwkJaWYgKENQV0xfRm9udE1hcF9OYXRpdmUqIHBEYXRhID0gbV9hTmF0aXZlRm9udC5HZXRBdChpKSkKKwkJeworCQkJaWYgKHBEYXRhLT5uQ2hhcnNldCA9PSBuQ2hhcnNldCkKKwkJCQlyZXR1cm4gcERhdGEtPnNGb250TmFtZTsKKwkJfQorCX0KKworCUNGWF9CeXRlU3RyaW5nIHNOZXcgPSBHZXROYXRpdmVGb250KG5DaGFyc2V0KTsKKworCWlmICghc05ldy5Jc0VtcHR5KCkpCisJeworCQlDUFdMX0ZvbnRNYXBfTmF0aXZlKiBwTmV3RGF0YSA9IG5ldyBDUFdMX0ZvbnRNYXBfTmF0aXZlOworCQlwTmV3RGF0YS0+bkNoYXJzZXQgPSBuQ2hhcnNldDsKKwkJcE5ld0RhdGEtPnNGb250TmFtZSA9IHNOZXc7CisKKwkJbV9hTmF0aXZlRm9udC5BZGQocE5ld0RhdGEpOworCX0KKworCXJldHVybiBzTmV3OworfQorCit2b2lkIENQV0xfRm9udE1hcDo6RW1wdHkoKQoreworCXsKKwkJZm9yIChGWF9JTlQzMiBpPTAsIHN6PW1fYURhdGEuR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJCQlkZWxldGUgbV9hRGF0YS5HZXRBdChpKTsKKworCQltX2FEYXRhLlJlbW92ZUFsbCgpOworCX0KKwl7CisJCWZvciAoRlhfSU5UMzIgaT0wLCBzej1tX2FOYXRpdmVGb250LkdldFNpemUoKTsgaTxzejsgaSsrKQorCQkJZGVsZXRlIG1fYU5hdGl2ZUZvbnQuR2V0QXQoaSk7CisKKwkJbV9hTmF0aXZlRm9udC5SZW1vdmVBbGwoKTsKKwl9Cit9CisKK3ZvaWQgQ1BXTF9Gb250TWFwOjpJbml0aWFsKEZYX0xQQ1NUUiBmb250bmFtZSkKK3sKKwlDRlhfQnl0ZVN0cmluZyBzRm9udE5hbWUgPSBmb250bmFtZTsKKworCWlmIChzRm9udE5hbWUuSXNFbXB0eSgpKQorCQlzRm9udE5hbWUgPSBERUZBVUxUX0ZPTlRfTkFNRTsKKworCUdldEZvbnRJbmRleChzRm9udE5hbWUsIEFOU0lfQ0hBUlNFVCwgRkFMU0UpOworCisJLy9HZXRGb250SW5kZXgodGhpcy0+R2V0TmF0aXZlRm9udE5hbWUobkNoYXJzZXQpLCBuQ2hhcnNldCk7Cit9CisJCisKKy8qCitMaXN0IG9mIGN1cnJlbnRseSBzdXBwb3J0ZWQgc3RhbmRhcmQgZm9udHM6CitDb3VyaWVyLCBDb3VyaWVyLUJvbGQsIENvdXJpZXItQm9sZE9ibGlxdWUsIENvdXJpZXItT2JsaXF1ZQorSGVsdmV0aWNhLCBIZWx2ZXRpY2EtQm9sZCwgSGVsdmV0aWNhLUJvbGRPYmxpcXVlLCBIZWx2ZXRpY2EtT2JsaXF1ZQorVGltZXMtUm9tYW4sIFRpbWVzLUJvbGQsIFRpbWVzLUl0YWxpYywgVGltZXMtQm9sZEl0YWxpYworU3ltYm9sLCBaYXBmRGluZ2JhdHMKKyovCisKK2NvbnN0IGNoYXIqIGdfc0RFU3RhbmRhcmRGb250TmFtZVtdID0geyJDb3VyaWVyIiwgIkNvdXJpZXItQm9sZCIsICJDb3VyaWVyLUJvbGRPYmxpcXVlIiwgIkNvdXJpZXItT2JsaXF1ZSIsCisJIkhlbHZldGljYSIsICJIZWx2ZXRpY2EtQm9sZCIsICJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLCAiSGVsdmV0aWNhLU9ibGlxdWUiLAorCSJUaW1lcy1Sb21hbiIsICJUaW1lcy1Cb2xkIiwgIlRpbWVzLUl0YWxpYyIsICJUaW1lcy1Cb2xkSXRhbGljIiwKKwkiU3ltYm9sIiwgIlphcGZEaW5nYmF0cyJ9OworCitGWF9CT09MCUNQV0xfRm9udE1hcDo6SXNTdGFuZGFyZEZvbnQoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNGb250TmFtZSkKK3sKKwlmb3IgKEZYX0lOVDMyIGk9MDsgaTwxNDsgaSsrKQorCXsKKwkJaWYgKHNGb250TmFtZSA9PSBnX3NERVN0YW5kYXJkRm9udE5hbWVbaV0pCisJCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0lOVDMyIENQV0xfRm9udE1hcDo6RmluZEZvbnQoY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNGb250TmFtZSwgRlhfSU5UMzIgbkNoYXJzZXQpCit7CisJZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9hRGF0YS5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwl7CisJCWlmIChDUFdMX0ZvbnRNYXBfRGF0YSogcERhdGEgPSBtX2FEYXRhLkdldEF0KGkpKQorCQl7CisJCQlpZiAobkNoYXJzZXQgPT0gREVGQVVMVF9DSEFSU0VUIHx8IG5DaGFyc2V0ID09IHBEYXRhLT5uQ2hhcnNldCkKKwkJCXsKKwkJCQlpZiAoc0ZvbnROYW1lLklzRW1wdHkoKSB8fCBwRGF0YS0+c0ZvbnROYW1lID09IHNGb250TmFtZSkKKwkJCQkJcmV0dXJuIGk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKK0ZYX0lOVDMyIENQV0xfRm9udE1hcDo6R2V0Rm9udEluZGV4KGNvbnN0IENGWF9CeXRlU3RyaW5nJiBzRm9udE5hbWUsIEZYX0lOVDMyIG5DaGFyc2V0LCBGWF9CT09MIGJGaW5kKQoreworCUZYX0lOVDMyIG5Gb250SW5kZXggPSBGaW5kRm9udChFbmNvZGVGb250QWxpYXMoc0ZvbnROYW1lLCBuQ2hhcnNldCksIG5DaGFyc2V0KTsKKwlpZiAobkZvbnRJbmRleCA+PSAwKSByZXR1cm4gbkZvbnRJbmRleDsKKworLy8JbkZvbnRJbmRleCA9IEZpbmRGb250KCIiLCBuQ2hhcnNldCk7CisvLwlpZiAobkZvbnRJbmRleCA+PSAwKSByZXR1cm4gbkZvbnRJbmRleDsKKworCUNGWF9CeXRlU3RyaW5nIHNBbGlhczsKKwlDUERGX0ZvbnQqIHBGb250ID0gTlVMTDsKKworCWlmIChiRmluZCkKKwkJcEZvbnQgPSBGaW5kRm9udFNhbWVDaGFyc2V0KHNBbGlhcywgbkNoYXJzZXQpOworCisJaWYgKCFwRm9udCkKKwl7CisJCUNGWF9CeXRlU3RyaW5nIHNUZW1wID0gc0ZvbnROYW1lOworCQlwRm9udCA9IEFkZEZvbnRUb0RvY3VtZW50KEdldERvY3VtZW50KCksIHNUZW1wLCBuQ2hhcnNldCk7CisKKwkJLyoKKwkJaWYgKEZpbmRGb250KHNBbGlhcykpCisJCXsKKwkJCXNBbGlhcyA9IEVuY29kZUZvbnRBbGlhcyhzVGVtcCwgbkNoYXJzZXQpOworCQl9CisJCWVsc2UKKwkJKi8KKwkJeworCQkJc0FsaWFzID0gRW5jb2RlRm9udEFsaWFzKHNUZW1wLCBuQ2hhcnNldCk7CisJCX0JCQorCX0KKworCUFkZGVkRm9udChwRm9udCwgc0FsaWFzKTsKKworCXJldHVybiBBZGRGb250RGF0YShwRm9udCwgc0FsaWFzLCBuQ2hhcnNldCk7Cit9CisKK0ZYX0lOVDMyIENQV0xfRm9udE1hcDo6R2V0UFdMRm9udEluZGV4KEZYX1dPUkQgd29yZCwgRlhfSU5UMzIgbkNoYXJzZXQpCit7CisJRlhfSU5UMzIgbkZpbmQgPSAtMTsKKworCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fYURhdGEuR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJeworCQlpZiAoQ1BXTF9Gb250TWFwX0RhdGEqIHBEYXRhID0gbV9hRGF0YS5HZXRBdChpKSkKKwkJeworCQkJaWYgKHBEYXRhLT5uQ2hhcnNldCA9PSBuQ2hhcnNldCkKKwkJCXsKKwkJCQluRmluZCA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlDUERGX0ZvbnQqIHBOZXdGb250ID0gR2V0UERGRm9udChuRmluZCk7CisKKwlpZiAoIXBOZXdGb250KSByZXR1cm4gLTE7CisKKwkvKgorCWlmIChDUERGX0ZvbnQqIHBGb250ID0gR2V0UERGRm9udChuRmluZCkpCisJeworCQlQV0xGb250LkFkZFdvcmRUb0ZvbnREaWN0KHBGb250RGljdCwgd29yZCk7CisJfQorCSovCisKKyNpZmRlZiBGT1hJVF9DSFJPTUVfQlVJTEQKKyAgQ0ZYX0J5dGVTdHJpbmcgc0FsaWFzID0gRW5jb2RlRm9udEFsaWFzKCJBcmlhbF9DaHJvbWUiLCBuQ2hhcnNldCk7CisjZWxzZQorCUNGWF9CeXRlU3RyaW5nIHNBbGlhcyA9IEVuY29kZUZvbnRBbGlhcygiQXJpYWxfRm94aXQiLCBuQ2hhcnNldCk7CisjZW5kaWYKKwlBZGRlZEZvbnQocE5ld0ZvbnQsIHNBbGlhcyk7CisKKwlyZXR1cm4gQWRkRm9udERhdGEocE5ld0ZvbnQsIHNBbGlhcywgbkNoYXJzZXQpOworfQorCitDUERGX0ZvbnQqIENQV0xfRm9udE1hcDo6RmluZEZvbnRTYW1lQ2hhcnNldChDRlhfQnl0ZVN0cmluZyYgc0ZvbnRBbGlhcywgRlhfSU5UMzIgbkNoYXJzZXQpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK0ZYX0lOVDMyIENQV0xfRm9udE1hcDo6QWRkRm9udERhdGEoQ1BERl9Gb250KiBwRm9udCwgY29uc3QgQ0ZYX0J5dGVTdHJpbmcmIHNGb250QWxpYXMsIEZYX0lOVDMyIG5DaGFyc2V0KQoreworCUNQV0xfRm9udE1hcF9EYXRhKiBwTmV3RGF0YSA9IG5ldyBDUFdMX0ZvbnRNYXBfRGF0YTsKKwlwTmV3RGF0YS0+cEZvbnQgPSBwRm9udDsKKwlwTmV3RGF0YS0+c0ZvbnROYW1lID0gc0ZvbnRBbGlhczsKKwlwTmV3RGF0YS0+bkNoYXJzZXQgPSBuQ2hhcnNldDsKKworCW1fYURhdGEuQWRkKHBOZXdEYXRhKTsKKworCXJldHVybiBtX2FEYXRhLkdldFNpemUoKSAtMTsKK30KKwordm9pZCBDUFdMX0ZvbnRNYXA6OkFkZGVkRm9udChDUERGX0ZvbnQqIHBGb250LCBjb25zdCBDRlhfQnl0ZVN0cmluZyYgc0ZvbnRBbGlhcykKK3sKK30KKworQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9Gb250TWFwOjpHZXRGb250TmFtZShGWF9JTlQzMiBuRm9udEluZGV4KQoreworCWlmIChuRm9udEluZGV4ID49MCAmJiBuRm9udEluZGV4IDwgbV9hRGF0YS5HZXRTaXplKCkpCisJeworCQlpZiAoQ1BXTF9Gb250TWFwX0RhdGEqIHBEYXRhID0gbV9hRGF0YS5HZXRBdChuRm9udEluZGV4KSkKKwkJeworCQkJcmV0dXJuIHBEYXRhLT5zRm9udE5hbWU7CisJCX0KKwl9CisKKwlyZXR1cm4gIiI7Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQV0xfRm9udE1hcDo6R2V0TmF0aXZlRm9udChGWF9JTlQzMiBuQ2hhcnNldCkKK3sKKwlDRlhfQnl0ZVN0cmluZyBzRm9udE5hbWU7CisKKwlpZiAobkNoYXJzZXQgPT0gREVGQVVMVF9DSEFSU0VUKQorCQluQ2hhcnNldCA9IEdldE5hdGl2ZUNoYXJzZXQoKTsKKworCXNGb250TmFtZSA9IEdldERlZmF1bHRGb250QnlDaGFyc2V0KG5DaGFyc2V0KTsKKworCWlmIChtX3BTeXN0ZW1IYW5kbGVyKQorCXsKKwkJaWYgKG1fcFN5c3RlbUhhbmRsZXItPkZpbmROYXRpdmVUcnVlVHlwZUZvbnQobkNoYXJzZXQsIHNGb250TmFtZSkpCisJCQlyZXR1cm4gc0ZvbnROYW1lOworCisJCXNGb250TmFtZSA9IG1fcFN5c3RlbUhhbmRsZXItPkdldE5hdGl2ZVRydWVUeXBlRm9udChuQ2hhcnNldCk7CisJfQorCisJcmV0dXJuIHNGb250TmFtZTsKK30KKworQ1BERl9Gb250KiBDUFdMX0ZvbnRNYXA6OkFkZEZvbnRUb0RvY3VtZW50KENQREZfRG9jdW1lbnQqIHBEb2MsIENGWF9CeXRlU3RyaW5nJiBzRm9udE5hbWUsIEZYX0JZVEUgbkNoYXJzZXQpCit7CisJaWYgKElzU3RhbmRhcmRGb250KHNGb250TmFtZSkpCisJCXJldHVybiBBZGRTdGFuZGFyZEZvbnQocERvYywgc0ZvbnROYW1lKTsKKwllbHNlCisJCXJldHVybiBBZGRTeXN0ZW1Gb250KHBEb2MsIHNGb250TmFtZSwgbkNoYXJzZXQpOworfQorCitDUERGX0ZvbnQqIENQV0xfRm9udE1hcDo6QWRkU3RhbmRhcmRGb250KENQREZfRG9jdW1lbnQqIHBEb2MsIENGWF9CeXRlU3RyaW5nJiBzRm9udE5hbWUpCit7CisJaWYgKCFwRG9jKSByZXR1cm4gTlVMTDsKKworCUNQREZfRm9udCogcEZvbnQgPSBOVUxMOworCisJaWYgKHNGb250TmFtZSA9PSAiWmFwZkRpbmdiYXRzIikKKwkJcEZvbnQgPSBwRG9jLT5BZGRTdGFuZGFyZEZvbnQoc0ZvbnROYW1lLCBOVUxMKTsKKwllbHNlCisJeworCQlDUERGX0ZvbnRFbmNvZGluZyBmZShQREZGT05UX0VOQ09ESU5HX1dJTkFOU0kpOworCQlwRm9udCA9IHBEb2MtPkFkZFN0YW5kYXJkRm9udChzRm9udE5hbWUsICZmZSk7CisJfQorCisJcmV0dXJuIHBGb250OworfQorCitDUERGX0ZvbnQqIENQV0xfRm9udE1hcDo6QWRkU3lzdGVtRm9udChDUERGX0RvY3VtZW50KiBwRG9jLCBDRlhfQnl0ZVN0cmluZyYgc0ZvbnROYW1lLCBGWF9CWVRFIG5DaGFyc2V0KQoreworCWlmICghcERvYykgcmV0dXJuIE5VTEw7CisKKwlpZiAoc0ZvbnROYW1lLklzRW1wdHkoKSkgc0ZvbnROYW1lID0gR2V0TmF0aXZlRm9udChuQ2hhcnNldCk7CisJaWYgKG5DaGFyc2V0ID09IERFRkFVTFRfQ0hBUlNFVCkgbkNoYXJzZXQgPSBHZXROYXRpdmVDaGFyc2V0KCk7CisKKwlpZiAobV9wU3lzdGVtSGFuZGxlcikKKwkJcmV0dXJuIG1fcFN5c3RlbUhhbmRsZXItPkFkZE5hdGl2ZVRydWVUeXBlRm9udFRvUERGKHBEb2MsIHNGb250TmFtZSwgbkNoYXJzZXQpOworCQorCXJldHVybiBOVUxMOworfQorCitDRlhfQnl0ZVN0cmluZyBDUFdMX0ZvbnRNYXA6OkVuY29kZUZvbnRBbGlhcyhjb25zdCBDRlhfQnl0ZVN0cmluZyYgc0ZvbnROYW1lLCBGWF9JTlQzMiBuQ2hhcnNldCkKK3sKKwlDRlhfQnl0ZVN0cmluZyBzUG9zdGZpeDsKKwlzUG9zdGZpeC5Gb3JtYXQoIl8lMDJYIiwgbkNoYXJzZXQpOworCXJldHVybiBFbmNvZGVGb250QWxpYXMoc0ZvbnROYW1lKSArIHNQb3N0Zml4OworfQorCitDRlhfQnl0ZVN0cmluZyBDUFdMX0ZvbnRNYXA6OkVuY29kZUZvbnRBbGlhcyhjb25zdCBDRlhfQnl0ZVN0cmluZyYgc0ZvbnROYW1lKQoreworCUNGWF9CeXRlU3RyaW5nIHNSZXQgPSBzRm9udE5hbWU7CisJc1JldC5SZW1vdmUoJyAnKTsKKwlyZXR1cm4gc1JldDsKK30KKworRlhfSU5UMzIgQ1BXTF9Gb250TWFwOjpHZXRGb250TWFwQ291bnQoKSBjb25zdAoreworCXJldHVybiBtX2FEYXRhLkdldFNpemUoKTsKK30KKworY29uc3QgQ1BXTF9Gb250TWFwX0RhdGEqIENQV0xfRm9udE1hcDo6R2V0Rm9udE1hcERhdGEoRlhfSU5UMzIgbkluZGV4KSBjb25zdAoreworCWlmIChuSW5kZXggPj0wICYmIG5JbmRleCA8IG1fYURhdGEuR2V0U2l6ZSgpKQorCXsKKwkJcmV0dXJuIG1fYURhdGEuR2V0QXQobkluZGV4KTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworRlhfSU5UMzIgQ1BXTF9Gb250TWFwOjpHZXROYXRpdmVDaGFyc2V0KCkKK3sKKwlGWF9CWVRFIG5DaGFyc2V0ID0gQU5TSV9DSEFSU0VUOworCUZYX0lOVDMyIGlDb2RlUGFnZSA9IEZYU1lTX0dldEFDUCgpOworCXN3aXRjaCAoaUNvZGVQYWdlKQorCXsKKwljYXNlIDkzMjovL0phcGFuCisJCW5DaGFyc2V0ID0gU0hJRlRKSVNfQ0hBUlNFVDsKKwkJYnJlYWs7CisJY2FzZSA5MzY6Ly9DaGluZXNlIChQUkMsIFNpbmdhcG9yZSkKKwkJbkNoYXJzZXQgPSBHQjIzMTJfQ0hBUlNFVDsKKwkJYnJlYWs7CisJY2FzZSA5NTA6Ly9DaGluZXNlIChUYWl3YW47IEhvbmcgS29uZyBTQVIsIFBSQykKKwkJbkNoYXJzZXQgPSBHQjIzMTJfQ0hBUlNFVDsKKwkJYnJlYWs7CisJY2FzZSAxMjUyOi8vV2luZG93cyAzLjEgTGF0aW4gMSAoVVMsIFdlc3Rlcm4gRXVyb3BlKQorCQluQ2hhcnNldCA9IEFOU0lfQ0hBUlNFVDsKKwkJYnJlYWs7CisJY2FzZSA4NzQ6Ly9UaGFpCisJCW5DaGFyc2V0ID0gVEhBSV9DSEFSU0VUOworCQlicmVhazsKKwljYXNlIDk0OTovL0tvcmVhbgorCQluQ2hhcnNldCA9IEhBTkdVTF9DSEFSU0VUOworCQlicmVhazsKKwljYXNlIDEyMDA6Ly9Vbmljb2RlIChCTVAgb2YgSVNPIDEwNjQ2KQorCQluQ2hhcnNldCA9IEFOU0lfQ0hBUlNFVDsKKwkJYnJlYWs7CisJY2FzZSAxMjUwOi8vV2luZG93cyAzLjEgRWFzdGVybiBFdXJvcGVhbgorCQluQ2hhcnNldCA9IEVBU1RFVVJPUEVfQ0hBUlNFVDsKKwkJYnJlYWs7CisJY2FzZSAxMjUxOi8vV2luZG93cyAzLjEgQ3lyaWxsaWMKKwkJbkNoYXJzZXQgPSBSVVNTSUFOX0NIQVJTRVQ7CisJCWJyZWFrOworCWNhc2UgMTI1MzovL1dpbmRvd3MgMy4xIEdyZWVrCisJCW5DaGFyc2V0ID0gR1JFRUtfQ0hBUlNFVDsKKwkJYnJlYWs7CisJY2FzZSAxMjU0Oi8vV2luZG93cyAzLjEgVHVya2lzaAorCQluQ2hhcnNldCA9IFRVUktJU0hfQ0hBUlNFVDsKKwkJYnJlYWs7CisJY2FzZSAxMjU1Oi8vSGVicmV3CisJCW5DaGFyc2V0ID0gSEVCUkVXX0NIQVJTRVQ7CisJCWJyZWFrOworCWNhc2UgMTI1NjovL0FyYWJpYworCQluQ2hhcnNldCA9IEFSQUJJQ19DSEFSU0VUOworCQlicmVhazsKKwljYXNlIDEyNTc6Ly9CYWx0aWMKKwkJbkNoYXJzZXQgPSBCQUxUSUNfQ0hBUlNFVDsKKwkJYnJlYWs7CisJY2FzZSAxMjU4Oi8vVmlldG5hbWVzZQorCQluQ2hhcnNldCA9IFZJRVROQU1FU0VfQ0hBUlNFVDsKKwkJYnJlYWs7CisJY2FzZSAxMzYxOi8vS29yZWFuKEpvaGFiKQorCQluQ2hhcnNldCA9IEpPSEFCX0NIQVJTRVQ7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gbkNoYXJzZXQ7Cit9CisKK2NvbnN0IENQV0xfRm9udE1hcDo6Q2hhcnNldEZvbnRNYXAgQ1BXTF9Gb250TWFwOjpkZWZhdWx0VFRGTWFwW10gPSB7CisJeyBBTlNJX0NIQVJTRVQsICJIZWx2ZXRpY2EiIH0sCisJeyBHQjIzMTJfQ0hBUlNFVCwgIlNpbVN1biIgfSwKKwl7IENISU5FU0VCSUc1X0NIQVJTRVQsICJNaW5nTGlVIiB9LAorCXsgU0hJRlRKSVNfQ0hBUlNFVCwgIk1TIEdvdGhpYyIgfSwKKwl7IEhBTkdVTF9DSEFSU0VULCAiQmF0YW5nIiB9LAorCXsgUlVTU0lBTl9DSEFSU0VULCAiQXJpYWwiIH0sCisJeyBFQVNURVVST1BFX0NIQVJTRVQsICJUYWhvbWEiIH0sCisJeyBBUkFCSUNfQ0hBUlNFVCwgIkFyaWFsIiB9LAorCXsgLTEsIE5VTEwgfQorfTsKKworQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9Gb250TWFwOjpHZXREZWZhdWx0Rm9udEJ5Q2hhcnNldChGWF9JTlQzMiBuQ2hhcnNldCkKK3sKKwlpbnQgaSA9IDA7CisJd2hpbGUgKGRlZmF1bHRUVEZNYXBbaV0uY2hhcnNldCAhPSAtMSkgeworCQlpZiAobkNoYXJzZXQgPT0gZGVmYXVsdFRURk1hcFtpXS5jaGFyc2V0KQorCQkJcmV0dXJuIGRlZmF1bHRUVEZNYXBbaV0uZm9udG5hbWU7CisgICAgICAgICsraTsKKwl9CisJcmV0dXJuICIiOworfQorCitGWF9JTlQzMiBDUFdMX0ZvbnRNYXA6OkNoYXJTZXRGcm9tVW5pY29kZShGWF9XT1JEIHdvcmQsIEZYX0lOVDMyIG5PbGRDaGFyc2V0KQoreworCWlmKG1fcFN5c3RlbUhhbmRsZXIgJiYgKC0xICE9IG1fcFN5c3RlbUhhbmRsZXItPkdldENoYXJTZXQoKSkpCisJCXJldHVybiBtX3BTeXN0ZW1IYW5kbGVyLT5HZXRDaGFyU2V0KCk7CisJLy90byBhdm9pZCBDSksgRm9udCB0byBzaG93IEFTQ0lJCisJaWYgKHdvcmQgPCAweDdGKSByZXR1cm4gQU5TSV9DSEFSU0VUOworCS8vZm9sbG93IHRoZSBvbGQgY2hhcnNldAorCWlmIChuT2xkQ2hhcnNldCAhPSBERUZBVUxUX0NIQVJTRVQpIHJldHVybiBuT2xkQ2hhcnNldDsKKworCS8vZmluZCBuZXcgY2hhcnNldAorCWlmICgod29yZCA+PSAweDRFMDAgJiYgd29yZCA8PSAweDlGQTUpIHx8IAorCQkod29yZCA+PSAweEU3QzcgJiYgd29yZCA8PSAweEU3RjMpIHx8CisJCSh3b3JkID49IDB4MzAwMCAmJiB3b3JkIDw9IDB4MzAzRikgfHwgLy+jqSKhtiIgIqG3IiAioaMiICKhoiIgCisJCSh3b3JkID49IDB4MjAwMCAmJiB3b3JkIDw9IDB4MjA2RikpCisJeworCQlyZXR1cm4gR0IyMzEyX0NIQVJTRVQ7CisJfQorCisJaWYgKCgod29yZCA+PSAweDMwNDApICYmICh3b3JkIDw9IDB4MzA5RikpIHx8CisJCSgod29yZCA+PSAweDMwQTApICYmICh3b3JkIDw9IDB4MzBGRikpIHx8CisJCSgod29yZCA+PSAweDMxRjApICYmICh3b3JkIDw9IDB4MzFGRikpIHx8CisJCSgod29yZCA+PSAweEZGMDApICYmICh3b3JkIDw9IDB4RkZFRikpICkKKwl7CisJCXJldHVybiBTSElGVEpJU19DSEFSU0VUOworCX0KKworCWlmICgoKHdvcmQgPj0gMHhBQzAwKSAmJiAod29yZCA8PSAweEQ3QUYpKSB8fAorCQkoKHdvcmQgPj0gMHgxMTAwKSAmJiAod29yZCA8PSAweDExRkYpKSB8fAorCQkoKHdvcmQgPj0gMHgzMTMwKSAmJiAod29yZCA8PSAweDMxOEYpKSkKKwl7CisJCXJldHVybiBIQU5HVUxfQ0hBUlNFVDsKKwl9CisKKwlpZiAod29yZCA+PSAweDBFMDAgJiYgd29yZCA8PSAweDBFN0YpCisJCXJldHVybiBUSEFJX0NIQVJTRVQ7CisKKwlpZiAoKHdvcmQgPj0gMHgwMzcwICYmIHdvcmQgPD0gMHgwM0ZGKSB8fAorCQkod29yZCA+PSAweDFGMDAgJiYgd29yZCA8PSAweDFGRkYpKQorCQlyZXR1cm4gR1JFRUtfQ0hBUlNFVDsKKworCWlmICgod29yZCA+PSAweDA2MDAgJiYgd29yZCA8PSAweDA2RkYpIHx8CisJCSh3b3JkID49IDB4RkI1MCAmJiB3b3JkIDw9IDB4RkVGQykpCisJCXJldHVybiBBUkFCSUNfQ0hBUlNFVDsKKworCWlmICh3b3JkID49IDB4MDU5MCAmJiB3b3JkIDw9IDB4MDVGRikKKwkJcmV0dXJuIEhFQlJFV19DSEFSU0VUOworCisJaWYgKHdvcmQgPj0gMHgwNDAwICYmIHdvcmQgPD0gMHgwNEZGKQorCQlyZXR1cm4gUlVTU0lBTl9DSEFSU0VUOworCisJaWYgKHdvcmQgPj0gMHgwMTAwICYmIHdvcmQgPD0gMHgwMjRGKQorCQlyZXR1cm4gRUFTVEVVUk9QRV9DSEFSU0VUOworCisJaWYgKHdvcmQgPj0gMHgxRTAwICYmIHdvcmQgPD0gMHgxRUZGKQorCQlyZXR1cm4gVklFVE5BTUVTRV9DSEFSU0VUOworCisJcmV0dXJuIEFOU0lfQ0hBUlNFVDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfRG9jRm9udE1hcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ1BXTF9Eb2NGb250TWFwOjpDUFdMX0RvY0ZvbnRNYXAoSUZYX1N5c3RlbUhhbmRsZXIqIHBTeXN0ZW1IYW5kbGVyLCBDUERGX0RvY3VtZW50KiBwQXR0YWNoZWREb2MpIAorCTogQ1BXTF9Gb250TWFwKHBTeXN0ZW1IYW5kbGVyKSwKKwltX3BBdHRhY2hlZERvYyhwQXR0YWNoZWREb2MpCit7Cit9CisKK0NQV0xfRG9jRm9udE1hcDo6fkNQV0xfRG9jRm9udE1hcCgpCit7Cit9CisKK0NQREZfRG9jdW1lbnQqIENQV0xfRG9jRm9udE1hcDo6R2V0RG9jdW1lbnQoKQoreworCXJldHVybiBtX3BBdHRhY2hlZERvYzsKK30KZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfSWNvbi5jcHAgYi9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX0ljb24uY3BwCmluZGV4IGE4NTlhNTIuLmI4NWI4NDUgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfSWNvbi5jcHAKKysrIGIvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9JY29uLmNwcApAQCAtMSwyNzIgKzEsMjcyIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUERGV2luZG93LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9XbmQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0ljb24uaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1V0aWxzLmgiDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX0ltYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DUFdMX0ltYWdlOjpDUFdMX0ltYWdlKCkgOiBtX3BQREZTdHJlYW0oTlVMTCkNCi17DQotfQ0KLQ0KLUNQV0xfSW1hZ2U6On5DUFdMX0ltYWdlKCkNCi17DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfSW1hZ2U6OkdldEltYWdlQXBwU3RyZWFtKCkNCi17DQotCUNGWF9CeXRlVGV4dEJ1ZiBzQXBwU3RyZWFtOw0KLQ0KLQlDRlhfQnl0ZVN0cmluZyBzQWxpYXMgPSB0aGlzLT5HZXRJbWFnZUFsaWFzKCk7DQotCUNQREZfUmVjdCByY1BsYXRlID0gR2V0Q2xpZW50UmVjdCgpOw0KLQlDUERGX01hdHJpeCBtdDsNCi0JbXQuU2V0UmV2ZXJzZShHZXRJbWFnZU1hdHJpeCgpKTsNCi0NCi0JRlhfRkxPQVQgZkhTY2FsZSA9IDEuMGY7DQotCUZYX0ZMT0FUIGZWU2NhbGUgPSAxLjBmOw0KLQlHZXRTY2FsZShmSFNjYWxlLGZWU2NhbGUpOw0KLQ0KLQlGWF9GTE9BVCBmeCA9IDAuMGY7DQotCUZYX0ZMT0FUIGZ5ID0gMC4wZjsNCi0JR2V0SW1hZ2VPZmZzZXQoZngsZnkpOw0KLQ0KLQlpZiAobV9wUERGU3RyZWFtICYmIHNBbGlhcy5HZXRMZW5ndGgoKT4wKQ0KLQl7DQotCQlzQXBwU3RyZWFtIDw8ICJxXG4iOw0KLQkJc0FwcFN0cmVhbSA8PCByY1BsYXRlLmxlZnQgPDwgIiAiIDw8IHJjUGxhdGUuYm90dG9tIDw8ICIgIg0KLQkJCTw8IHJjUGxhdGUucmlnaHQgLSByY1BsYXRlLmxlZnQgPDwgIiAiIDw8IHJjUGxhdGUudG9wIC0gcmNQbGF0ZS5ib3R0b20gPDwgIiByZSBXIG5cbiI7DQotDQotCQlzQXBwU3RyZWFtIDw8IGZIU2NhbGUgPDwgIiAwIDAgIiA8PCBmVlNjYWxlIDw8ICIgIiA8PCByY1BsYXRlLmxlZnQgKyBmeCA8PCAiICIgPDwgcmNQbGF0ZS5ib3R0b20gKyBmeSA8PCAiIGNtXG4iOw0KLQkJc0FwcFN0cmVhbSA8PCBtdC5HZXRBKCkgPDwgIiAiIDw8IG10LkdldEIoKSA8PCAiICIgPDwgbXQuR2V0QygpIDw8ICIgIiA8PCBtdC5HZXREKCkgPDwgIiAiIDw8IG10LkdldEUoKSA8PCAiICIgPDwgbXQuR2V0RigpIDw8ICIgY21cbiI7DQotDQotCQlzQXBwU3RyZWFtIDw8ICIwIGcgMCBHIDEgdyAvIiA8PCBzQWxpYXMgPDwgIiBEb1xuIiA8PCAiUVxuIjsNCi0JfQ0KLQ0KLQlyZXR1cm4gc0FwcFN0cmVhbS5HZXRCeXRlU3RyaW5nKCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9JbWFnZTo6U2V0UERGU3RyZWFtKENQREZfU3RyZWFtICogcFN0cmVhbSkNCi17DQotCW1fcFBERlN0cmVhbSA9IHBTdHJlYW07DQotfQ0KLQ0KLUNQREZfU3RyZWFtICogQ1BXTF9JbWFnZTo6R2V0UERGU3RyZWFtKCkNCi17DQotCXJldHVybiB0aGlzLT5tX3BQREZTdHJlYW07DQotfQ0KLQ0KLXZvaWQgQ1BXTF9JbWFnZTo6R2V0SW1hZ2VTaXplKEZYX0ZMT0FUICYgZldpZHRoLEZYX0ZMT0FUICYgZkhlaWdodCkNCi17DQotCWZXaWR0aCA9IDAuMGY7DQotCWZIZWlnaHQgPSAwLjBmOw0KLQ0KLQlpZiAobV9wUERGU3RyZWFtKQ0KLQl7DQotCQlpZiAoQ1BERl9EaWN0aW9uYXJ5ICogcERpY3QgPSBtX3BQREZTdHJlYW0tPkdldERpY3QoKSkNCi0JCXsNCi0JCQlDUERGX1JlY3QgcmVjdCA9IHBEaWN0LT5HZXRSZWN0KCJCQm94Iik7DQotDQotCQkJZldpZHRoID0gcmVjdC5yaWdodCAtIHJlY3QubGVmdDsNCi0JCQlmSGVpZ2h0ID0gcmVjdC50b3AgLSByZWN0LmJvdHRvbTsNCi0JCX0NCi0JfQ0KLX0NCi0NCi1DUERGX01hdHJpeAlDUFdMX0ltYWdlOjpHZXRJbWFnZU1hdHJpeCgpDQotew0KLQlpZiAobV9wUERGU3RyZWFtKQ0KLQl7DQotCQlpZiAoQ1BERl9EaWN0aW9uYXJ5ICogcERpY3QgPSBtX3BQREZTdHJlYW0tPkdldERpY3QoKSkNCi0JCXsNCi0JCQlyZXR1cm4gcERpY3QtPkdldE1hdHJpeCgiTWF0cml4Iik7DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIENQREZfTWF0cml4KCk7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfSW1hZ2U6OkdldEltYWdlQWxpYXMoKQ0KLXsNCi0JaWYgKG1fc0ltYWdlQWxpYXMuSXNFbXB0eSgpKQ0KLQl7DQotCQlpZiAobV9wUERGU3RyZWFtKQ0KLQkJew0KLQkJCWlmIChDUERGX0RpY3Rpb25hcnkgKiBwRGljdCA9IG1fcFBERlN0cmVhbS0+R2V0RGljdCgpKQkJDQotCQkJew0KLQkJCQlyZXR1cm4gcERpY3QtPkdldFN0cmluZygiTmFtZSIpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQllbHNlDQotCQlyZXR1cm4gbV9zSW1hZ2VBbGlhczsNCi0NCi0JcmV0dXJuIENGWF9CeXRlU3RyaW5nKCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9JbWFnZTo6U2V0SW1hZ2VBbGlhcyhGWF9MUENTVFIgc0ltYWdlQWxpYXMpDQotew0KLQltX3NJbWFnZUFsaWFzID0gc0ltYWdlQWxpYXM7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9JbWFnZTo6R2V0U2NhbGUoRlhfRkxPQVQgJiBmSFNjYWxlLEZYX0ZMT0FUICYgZlZTY2FsZSkNCi17DQotCWZIU2NhbGUgPSAxLjBmOw0KLQlmVlNjYWxlID0gMS4wZjsNCi19DQotDQotDQotdm9pZCBDUFdMX0ltYWdlOjpHZXRJbWFnZU9mZnNldChGWF9GTE9BVCAmIHgsRlhfRkxPQVQgJiB5KQ0KLXsNCi0JeCA9IDAuMGY7DQotCXkgPSAwLjBmOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfSWNvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ1BXTF9JY29uOjpDUFdMX0ljb24oKSA6IG1fcEljb25GaXQoTlVMTCkNCi17DQotfQ0KLQ0KLUNQV0xfSWNvbjo6fkNQV0xfSWNvbigpDQotew0KLX0NCi0NCi1GWF9JTlQzMiBDUFdMX0ljb246OkdldFNjYWxlTWV0aG9kKCkNCi17DQotCWlmIChtX3BJY29uRml0KQ0KLQkJcmV0dXJuIG1fcEljb25GaXQtPkdldFNjYWxlTWV0aG9kKCk7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1GWF9CT09MCUNQV0xfSWNvbjo6SXNQcm9wb3J0aW9uYWxTY2FsZSgpDQotew0KLQlpZiAobV9wSWNvbkZpdCkNCi0JCXJldHVybiBtX3BJY29uRml0LT5Jc1Byb3BvcnRpb25hbFNjYWxlKCk7DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotdm9pZCBDUFdMX0ljb246OkdldEljb25Qb3NpdGlvbihGWF9GTE9BVCAmIGZMZWZ0LCBGWF9GTE9BVCAmIGZCb3R0b20pDQotew0KLQlpZiAobV9wSWNvbkZpdCkNCi0Jew0KLQkJLy9tX3BJY29uRml0LT5HZXRJY29uUG9zaXRpb24oZkxlZnQsZkJvdHRvbSk7DQotCQlmTGVmdCA9IDAuMGY7DQotCQlmQm90dG9tID0gMC4wZjsNCi0JCUNQREZfQXJyYXkqIHBBID0gbV9wSWNvbkZpdC0+bV9wRGljdC0+R2V0QXJyYXkoIkEiKTsNCi0JCWlmIChwQSAhPSBOVUxMKQ0KLQkJew0KLQkJCUZYX0RXT1JEIGR3Q291bnQgPSBwQS0+R2V0Q291bnQoKTsNCi0JCQlpZiAoZHdDb3VudCA+IDApIGZMZWZ0ID0gcEEtPkdldE51bWJlcigwKTsNCi0JCQlpZiAoZHdDb3VudCA+IDEpIGZCb3R0b20gPSBwQS0+R2V0TnVtYmVyKDEpOw0KLQkJfQ0KLQl9DQotCWVsc2UNCi0Jew0KLQkJZkxlZnQgPSAwLjBmOw0KLQkJZkJvdHRvbSA9IDAuMGY7DQotCX0NCi19DQotDQotRlhfQk9PTCBDUFdMX0ljb246OkdldEZpdHRpbmdCb3VuZHMoKQ0KLXsNCi0JaWYgKG1fcEljb25GaXQpDQotCQlyZXR1cm4gbV9wSWNvbkZpdC0+R2V0Rml0dGluZ0JvdW5kcygpOw0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9JY29uOjpHZXRTY2FsZShGWF9GTE9BVCAmIGZIU2NhbGUsRlhfRkxPQVQgJiBmVlNjYWxlKQ0KLXsNCi0JZkhTY2FsZSA9IDEuMGY7DQotCWZWU2NhbGUgPSAxLjBmOw0KLQkNCi0JaWYgKG1fcFBERlN0cmVhbSkNCi0Jew0KLQkJRlhfRkxPQVQgZkltYWdlV2lkdGgsZkltYWdlSGVpZ2h0Ow0KLQkJRlhfRkxPQVQgZlBsYXRlV2lkdGgsZlBsYXRlSGVpZ2h0Ow0KLQ0KLQkJQ1BERl9SZWN0IHJjUGxhdGUgPSB0aGlzLT5HZXRDbGllbnRSZWN0KCk7CQ0KLQkJZlBsYXRlV2lkdGggPSByY1BsYXRlLnJpZ2h0IC0gcmNQbGF0ZS5sZWZ0Ow0KLQkJZlBsYXRlSGVpZ2h0ID0gcmNQbGF0ZS50b3AgLSByY1BsYXRlLmJvdHRvbTsNCi0NCi0JCUdldEltYWdlU2l6ZShmSW1hZ2VXaWR0aCxmSW1hZ2VIZWlnaHQpOw0KLQ0KLQkJRlhfSU5UMzIgblNjYWxlTWV0aG9kID0gdGhpcy0+R2V0U2NhbGVNZXRob2QoKTsNCi0NCi0JCS8qDQotCQllbnVtIFNjYWxlTWV0aG9kDQotCQl7DQotCQkJQWx3YXlzID0gMCwJLy9BLCBBbHdheXMgc2NhbGUNCi0JCQlCaWdnZXIsCQkvL0IsIFNjYWxlIG9ubHkgd2hlbiB0aGUgaWNvbiBpcyBiaWdnZXIgdGhhbiB0aGUgYW5ub3RhdGlvbiByZWN0YW5nbGUNCi0JCQlTbWFsbGVyLAkvL1MsIFNjYWxlIG9ubHkgd2hlbiB0aGUgaWNvbiBpcyBzbWFsbGVyIHRoZW4gdGhlIGFubm90YXRpb24gcmVjdGFuZ2xlDQotCQkJTmV2ZXIJCS8vTiwgTmV2ZXIgc2NhbGUNCi0JCX07DQotCQkqLw0KLQ0KLQkJc3dpdGNoIChuU2NhbGVNZXRob2QpDQotCQl7DQotCQlkZWZhdWx0Og0KLQkJY2FzZSAwOg0KLQkJCWZIU2NhbGUgPSBmUGxhdGVXaWR0aCAvIFBXTF9NQVgoZkltYWdlV2lkdGgsMS4wZik7DQotCQkJZlZTY2FsZSA9IGZQbGF0ZUhlaWdodCAvIFBXTF9NQVgoZkltYWdlSGVpZ2h0LDEuMGYpOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSAxOg0KLQkJCWlmIChmUGxhdGVXaWR0aCA8IGZJbWFnZVdpZHRoKQ0KLQkJCQlmSFNjYWxlID0gZlBsYXRlV2lkdGggLyBQV0xfTUFYKGZJbWFnZVdpZHRoLDEuMGYpOw0KLQkJCWlmIChmUGxhdGVIZWlnaHQgPCBmSW1hZ2VIZWlnaHQpDQotCQkJCWZWU2NhbGUgPSBmUGxhdGVIZWlnaHQgLyBQV0xfTUFYKGZJbWFnZUhlaWdodCwxLjBmKTsNCi0JCQlicmVhazsNCi0JCWNhc2UgMjoNCi0JCQlpZiAoZlBsYXRlV2lkdGggPiBmSW1hZ2VXaWR0aCkNCi0JCQkJZkhTY2FsZSA9IGZQbGF0ZVdpZHRoIC8gUFdMX01BWChmSW1hZ2VXaWR0aCwxLjBmKTsNCi0JCQlpZiAoZlBsYXRlSGVpZ2h0ID4gZkltYWdlSGVpZ2h0KQ0KLQkJCQlmVlNjYWxlID0gZlBsYXRlSGVpZ2h0IC8gUFdMX01BWChmSW1hZ2VIZWlnaHQsMS4wZik7DQotCQkJYnJlYWs7DQotCQljYXNlIDM6DQotCQkJYnJlYWs7DQotCQl9DQotDQotCQlGWF9GTE9BVCBmTWluU2NhbGU7DQotCQlpZiAoSXNQcm9wb3J0aW9uYWxTY2FsZSgpKQ0KLQkJew0KLQkJCWZNaW5TY2FsZSA9IFBXTF9NSU4oZkhTY2FsZSxmVlNjYWxlKTsNCi0JCQlmSFNjYWxlID0gZk1pblNjYWxlOw0KLQkJCWZWU2NhbGUgPSBmTWluU2NhbGU7DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBDUFdMX0ljb246OkdldEltYWdlT2Zmc2V0KEZYX0ZMT0FUICYgeCxGWF9GTE9BVCAmIHkpDQotew0KLQlGWF9GTE9BVCBmTGVmdCxmQm90dG9tOw0KLQ0KLQl0aGlzLT5HZXRJY29uUG9zaXRpb24oZkxlZnQsZkJvdHRvbSk7DQotCXggPSAwLjBmOw0KLQl5ID0gMC4wZjsNCi0NCi0JRlhfRkxPQVQgZkltYWdlV2lkdGgsZkltYWdlSGVpZ2h0Ow0KLQlHZXRJbWFnZVNpemUoZkltYWdlV2lkdGgsZkltYWdlSGVpZ2h0KTsNCi0NCi0JRlhfRkxPQVQgZkhTY2FsZSxmVlNjYWxlOw0KLQlHZXRTY2FsZShmSFNjYWxlLGZWU2NhbGUpOw0KLQ0KLQlGWF9GTE9BVCBmSW1hZ2VGYWN0V2lkdGggPSBmSW1hZ2VXaWR0aCAqIGZIU2NhbGU7DQotCUZYX0ZMT0FUIGZJbWFnZUZhY3RIZWlnaHQgPSBmSW1hZ2VIZWlnaHQgKiBmVlNjYWxlOw0KLQ0KLQlGWF9GTE9BVCBmUGxhdGVXaWR0aCxmUGxhdGVIZWlnaHQ7DQotCUNQREZfUmVjdCByY1BsYXRlID0gdGhpcy0+R2V0Q2xpZW50UmVjdCgpOwkNCi0JZlBsYXRlV2lkdGggPSByY1BsYXRlLnJpZ2h0IC0gcmNQbGF0ZS5sZWZ0Ow0KLQlmUGxhdGVIZWlnaHQgPSByY1BsYXRlLnRvcCAtIHJjUGxhdGUuYm90dG9tOw0KLQ0KLQl4ID0gKGZQbGF0ZVdpZHRoIC0gZkltYWdlRmFjdFdpZHRoKSAqIGZMZWZ0Ow0KLQl5ID0gKGZQbGF0ZUhlaWdodCAtIGZJbWFnZUZhY3RIZWlnaHQpICAqIGZCb3R0b207DQotfQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QREZXaW5kb3cuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfV25kLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0ljb24uaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfVXRpbHMuaCIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX0ltYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ1BXTF9JbWFnZTo6Q1BXTF9JbWFnZSgpIDogbV9wUERGU3RyZWFtKE5VTEwpCit7Cit9CisKK0NQV0xfSW1hZ2U6On5DUFdMX0ltYWdlKCkKK3sKK30KKworQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9JbWFnZTo6R2V0SW1hZ2VBcHBTdHJlYW0oKQoreworCUNGWF9CeXRlVGV4dEJ1ZiBzQXBwU3RyZWFtOworCisJQ0ZYX0J5dGVTdHJpbmcgc0FsaWFzID0gdGhpcy0+R2V0SW1hZ2VBbGlhcygpOworCUNQREZfUmVjdCByY1BsYXRlID0gR2V0Q2xpZW50UmVjdCgpOworCUNQREZfTWF0cml4IG10OworCW10LlNldFJldmVyc2UoR2V0SW1hZ2VNYXRyaXgoKSk7CisKKwlGWF9GTE9BVCBmSFNjYWxlID0gMS4wZjsKKwlGWF9GTE9BVCBmVlNjYWxlID0gMS4wZjsKKwlHZXRTY2FsZShmSFNjYWxlLGZWU2NhbGUpOworCisJRlhfRkxPQVQgZnggPSAwLjBmOworCUZYX0ZMT0FUIGZ5ID0gMC4wZjsKKwlHZXRJbWFnZU9mZnNldChmeCxmeSk7CisKKwlpZiAobV9wUERGU3RyZWFtICYmIHNBbGlhcy5HZXRMZW5ndGgoKT4wKQorCXsKKwkJc0FwcFN0cmVhbSA8PCAicVxuIjsKKwkJc0FwcFN0cmVhbSA8PCByY1BsYXRlLmxlZnQgPDwgIiAiIDw8IHJjUGxhdGUuYm90dG9tIDw8ICIgIgorCQkJPDwgcmNQbGF0ZS5yaWdodCAtIHJjUGxhdGUubGVmdCA8PCAiICIgPDwgcmNQbGF0ZS50b3AgLSByY1BsYXRlLmJvdHRvbSA8PCAiIHJlIFcgblxuIjsKKworCQlzQXBwU3RyZWFtIDw8IGZIU2NhbGUgPDwgIiAwIDAgIiA8PCBmVlNjYWxlIDw8ICIgIiA8PCByY1BsYXRlLmxlZnQgKyBmeCA8PCAiICIgPDwgcmNQbGF0ZS5ib3R0b20gKyBmeSA8PCAiIGNtXG4iOworCQlzQXBwU3RyZWFtIDw8IG10LkdldEEoKSA8PCAiICIgPDwgbXQuR2V0QigpIDw8ICIgIiA8PCBtdC5HZXRDKCkgPDwgIiAiIDw8IG10LkdldEQoKSA8PCAiICIgPDwgbXQuR2V0RSgpIDw8ICIgIiA8PCBtdC5HZXRGKCkgPDwgIiBjbVxuIjsKKworCQlzQXBwU3RyZWFtIDw8ICIwIGcgMCBHIDEgdyAvIiA8PCBzQWxpYXMgPDwgIiBEb1xuIiA8PCAiUVxuIjsKKwl9CisKKwlyZXR1cm4gc0FwcFN0cmVhbS5HZXRCeXRlU3RyaW5nKCk7Cit9CisKK3ZvaWQgQ1BXTF9JbWFnZTo6U2V0UERGU3RyZWFtKENQREZfU3RyZWFtICogcFN0cmVhbSkKK3sKKwltX3BQREZTdHJlYW0gPSBwU3RyZWFtOworfQorCitDUERGX1N0cmVhbSAqIENQV0xfSW1hZ2U6OkdldFBERlN0cmVhbSgpCit7CisJcmV0dXJuIHRoaXMtPm1fcFBERlN0cmVhbTsKK30KKwordm9pZCBDUFdMX0ltYWdlOjpHZXRJbWFnZVNpemUoRlhfRkxPQVQgJiBmV2lkdGgsRlhfRkxPQVQgJiBmSGVpZ2h0KQoreworCWZXaWR0aCA9IDAuMGY7CisJZkhlaWdodCA9IDAuMGY7CisKKwlpZiAobV9wUERGU3RyZWFtKQorCXsKKwkJaWYgKENQREZfRGljdGlvbmFyeSAqIHBEaWN0ID0gbV9wUERGU3RyZWFtLT5HZXREaWN0KCkpCisJCXsKKwkJCUNQREZfUmVjdCByZWN0ID0gcERpY3QtPkdldFJlY3QoIkJCb3giKTsKKworCQkJZldpZHRoID0gcmVjdC5yaWdodCAtIHJlY3QubGVmdDsKKwkJCWZIZWlnaHQgPSByZWN0LnRvcCAtIHJlY3QuYm90dG9tOworCQl9CisJfQorfQorCitDUERGX01hdHJpeAlDUFdMX0ltYWdlOjpHZXRJbWFnZU1hdHJpeCgpCit7CisJaWYgKG1fcFBERlN0cmVhbSkKKwl7CisJCWlmIChDUERGX0RpY3Rpb25hcnkgKiBwRGljdCA9IG1fcFBERlN0cmVhbS0+R2V0RGljdCgpKQorCQl7CisJCQlyZXR1cm4gcERpY3QtPkdldE1hdHJpeCgiTWF0cml4Iik7CisJCX0KKwl9CisKKwlyZXR1cm4gQ1BERl9NYXRyaXgoKTsKK30KKworQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9JbWFnZTo6R2V0SW1hZ2VBbGlhcygpCit7CisJaWYgKG1fc0ltYWdlQWxpYXMuSXNFbXB0eSgpKQorCXsKKwkJaWYgKG1fcFBERlN0cmVhbSkKKwkJeworCQkJaWYgKENQREZfRGljdGlvbmFyeSAqIHBEaWN0ID0gbV9wUERGU3RyZWFtLT5HZXREaWN0KCkpCQkKKwkJCXsKKwkJCQlyZXR1cm4gcERpY3QtPkdldFN0cmluZygiTmFtZSIpOworCQkJfQorCQl9CisJfQorCWVsc2UKKwkJcmV0dXJuIG1fc0ltYWdlQWxpYXM7CisKKwlyZXR1cm4gQ0ZYX0J5dGVTdHJpbmcoKTsKK30KKwordm9pZCBDUFdMX0ltYWdlOjpTZXRJbWFnZUFsaWFzKEZYX0xQQ1NUUiBzSW1hZ2VBbGlhcykKK3sKKwltX3NJbWFnZUFsaWFzID0gc0ltYWdlQWxpYXM7Cit9CisKK3ZvaWQgQ1BXTF9JbWFnZTo6R2V0U2NhbGUoRlhfRkxPQVQgJiBmSFNjYWxlLEZYX0ZMT0FUICYgZlZTY2FsZSkKK3sKKwlmSFNjYWxlID0gMS4wZjsKKwlmVlNjYWxlID0gMS4wZjsKK30KKworCit2b2lkIENQV0xfSW1hZ2U6OkdldEltYWdlT2Zmc2V0KEZYX0ZMT0FUICYgeCxGWF9GTE9BVCAmIHkpCit7CisJeCA9IDAuMGY7CisJeSA9IDAuMGY7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9JY29uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ1BXTF9JY29uOjpDUFdMX0ljb24oKSA6IG1fcEljb25GaXQoTlVMTCkKK3sKK30KKworQ1BXTF9JY29uOjp+Q1BXTF9JY29uKCkKK3sKK30KKworRlhfSU5UMzIgQ1BXTF9JY29uOjpHZXRTY2FsZU1ldGhvZCgpCit7CisJaWYgKG1fcEljb25GaXQpCisJCXJldHVybiBtX3BJY29uRml0LT5HZXRTY2FsZU1ldGhvZCgpOworCisJcmV0dXJuIDA7Cit9CisKK0ZYX0JPT0wJQ1BXTF9JY29uOjpJc1Byb3BvcnRpb25hbFNjYWxlKCkKK3sKKwlpZiAobV9wSWNvbkZpdCkKKwkJcmV0dXJuIG1fcEljb25GaXQtPklzUHJvcG9ydGlvbmFsU2NhbGUoKTsKKworCXJldHVybiBGQUxTRTsKK30KKwordm9pZCBDUFdMX0ljb246OkdldEljb25Qb3NpdGlvbihGWF9GTE9BVCAmIGZMZWZ0LCBGWF9GTE9BVCAmIGZCb3R0b20pCit7CisJaWYgKG1fcEljb25GaXQpCisJeworCQkvL21fcEljb25GaXQtPkdldEljb25Qb3NpdGlvbihmTGVmdCxmQm90dG9tKTsKKwkJZkxlZnQgPSAwLjBmOworCQlmQm90dG9tID0gMC4wZjsKKwkJQ1BERl9BcnJheSogcEEgPSBtX3BJY29uRml0LT5tX3BEaWN0LT5HZXRBcnJheSgiQSIpOworCQlpZiAocEEgIT0gTlVMTCkKKwkJeworCQkJRlhfRFdPUkQgZHdDb3VudCA9IHBBLT5HZXRDb3VudCgpOworCQkJaWYgKGR3Q291bnQgPiAwKSBmTGVmdCA9IHBBLT5HZXROdW1iZXIoMCk7CisJCQlpZiAoZHdDb3VudCA+IDEpIGZCb3R0b20gPSBwQS0+R2V0TnVtYmVyKDEpOworCQl9CisJfQorCWVsc2UKKwl7CisJCWZMZWZ0ID0gMC4wZjsKKwkJZkJvdHRvbSA9IDAuMGY7CisJfQorfQorCitGWF9CT09MIENQV0xfSWNvbjo6R2V0Rml0dGluZ0JvdW5kcygpCit7CisJaWYgKG1fcEljb25GaXQpCisJCXJldHVybiBtX3BJY29uRml0LT5HZXRGaXR0aW5nQm91bmRzKCk7CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgQ1BXTF9JY29uOjpHZXRTY2FsZShGWF9GTE9BVCAmIGZIU2NhbGUsRlhfRkxPQVQgJiBmVlNjYWxlKQoreworCWZIU2NhbGUgPSAxLjBmOworCWZWU2NhbGUgPSAxLjBmOworCQorCWlmIChtX3BQREZTdHJlYW0pCisJeworCQlGWF9GTE9BVCBmSW1hZ2VXaWR0aCxmSW1hZ2VIZWlnaHQ7CisJCUZYX0ZMT0FUIGZQbGF0ZVdpZHRoLGZQbGF0ZUhlaWdodDsKKworCQlDUERGX1JlY3QgcmNQbGF0ZSA9IHRoaXMtPkdldENsaWVudFJlY3QoKTsJCisJCWZQbGF0ZVdpZHRoID0gcmNQbGF0ZS5yaWdodCAtIHJjUGxhdGUubGVmdDsKKwkJZlBsYXRlSGVpZ2h0ID0gcmNQbGF0ZS50b3AgLSByY1BsYXRlLmJvdHRvbTsKKworCQlHZXRJbWFnZVNpemUoZkltYWdlV2lkdGgsZkltYWdlSGVpZ2h0KTsKKworCQlGWF9JTlQzMiBuU2NhbGVNZXRob2QgPSB0aGlzLT5HZXRTY2FsZU1ldGhvZCgpOworCisJCS8qCisJCWVudW0gU2NhbGVNZXRob2QKKwkJeworCQkJQWx3YXlzID0gMCwJLy9BLCBBbHdheXMgc2NhbGUKKwkJCUJpZ2dlciwJCS8vQiwgU2NhbGUgb25seSB3aGVuIHRoZSBpY29uIGlzIGJpZ2dlciB0aGFuIHRoZSBhbm5vdGF0aW9uIHJlY3RhbmdsZQorCQkJU21hbGxlciwJLy9TLCBTY2FsZSBvbmx5IHdoZW4gdGhlIGljb24gaXMgc21hbGxlciB0aGVuIHRoZSBhbm5vdGF0aW9uIHJlY3RhbmdsZQorCQkJTmV2ZXIJCS8vTiwgTmV2ZXIgc2NhbGUKKwkJfTsKKwkJKi8KKworCQlzd2l0Y2ggKG5TY2FsZU1ldGhvZCkKKwkJeworCQlkZWZhdWx0OgorCQljYXNlIDA6CisJCQlmSFNjYWxlID0gZlBsYXRlV2lkdGggLyBQV0xfTUFYKGZJbWFnZVdpZHRoLDEuMGYpOworCQkJZlZTY2FsZSA9IGZQbGF0ZUhlaWdodCAvIFBXTF9NQVgoZkltYWdlSGVpZ2h0LDEuMGYpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWlmIChmUGxhdGVXaWR0aCA8IGZJbWFnZVdpZHRoKQorCQkJCWZIU2NhbGUgPSBmUGxhdGVXaWR0aCAvIFBXTF9NQVgoZkltYWdlV2lkdGgsMS4wZik7CisJCQlpZiAoZlBsYXRlSGVpZ2h0IDwgZkltYWdlSGVpZ2h0KQorCQkJCWZWU2NhbGUgPSBmUGxhdGVIZWlnaHQgLyBQV0xfTUFYKGZJbWFnZUhlaWdodCwxLjBmKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlpZiAoZlBsYXRlV2lkdGggPiBmSW1hZ2VXaWR0aCkKKwkJCQlmSFNjYWxlID0gZlBsYXRlV2lkdGggLyBQV0xfTUFYKGZJbWFnZVdpZHRoLDEuMGYpOworCQkJaWYgKGZQbGF0ZUhlaWdodCA+IGZJbWFnZUhlaWdodCkKKwkJCQlmVlNjYWxlID0gZlBsYXRlSGVpZ2h0IC8gUFdMX01BWChmSW1hZ2VIZWlnaHQsMS4wZik7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJYnJlYWs7CisJCX0KKworCQlGWF9GTE9BVCBmTWluU2NhbGU7CisJCWlmIChJc1Byb3BvcnRpb25hbFNjYWxlKCkpCisJCXsKKwkJCWZNaW5TY2FsZSA9IFBXTF9NSU4oZkhTY2FsZSxmVlNjYWxlKTsKKwkJCWZIU2NhbGUgPSBmTWluU2NhbGU7CisJCQlmVlNjYWxlID0gZk1pblNjYWxlOworCQl9CisJfQorfQorCit2b2lkIENQV0xfSWNvbjo6R2V0SW1hZ2VPZmZzZXQoRlhfRkxPQVQgJiB4LEZYX0ZMT0FUICYgeSkKK3sKKwlGWF9GTE9BVCBmTGVmdCxmQm90dG9tOworCisJdGhpcy0+R2V0SWNvblBvc2l0aW9uKGZMZWZ0LGZCb3R0b20pOworCXggPSAwLjBmOworCXkgPSAwLjBmOworCisJRlhfRkxPQVQgZkltYWdlV2lkdGgsZkltYWdlSGVpZ2h0OworCUdldEltYWdlU2l6ZShmSW1hZ2VXaWR0aCxmSW1hZ2VIZWlnaHQpOworCisJRlhfRkxPQVQgZkhTY2FsZSxmVlNjYWxlOworCUdldFNjYWxlKGZIU2NhbGUsZlZTY2FsZSk7CisKKwlGWF9GTE9BVCBmSW1hZ2VGYWN0V2lkdGggPSBmSW1hZ2VXaWR0aCAqIGZIU2NhbGU7CisJRlhfRkxPQVQgZkltYWdlRmFjdEhlaWdodCA9IGZJbWFnZUhlaWdodCAqIGZWU2NhbGU7CisKKwlGWF9GTE9BVCBmUGxhdGVXaWR0aCxmUGxhdGVIZWlnaHQ7CisJQ1BERl9SZWN0IHJjUGxhdGUgPSB0aGlzLT5HZXRDbGllbnRSZWN0KCk7CQorCWZQbGF0ZVdpZHRoID0gcmNQbGF0ZS5yaWdodCAtIHJjUGxhdGUubGVmdDsKKwlmUGxhdGVIZWlnaHQgPSByY1BsYXRlLnRvcCAtIHJjUGxhdGUuYm90dG9tOworCisJeCA9IChmUGxhdGVXaWR0aCAtIGZJbWFnZUZhY3RXaWR0aCkgKiBmTGVmdDsKKwl5ID0gKGZQbGF0ZUhlaWdodCAtIGZJbWFnZUZhY3RIZWlnaHQpICAqIGZCb3R0b207Cit9CisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfSWNvbkxpc3QuY3BwIGIvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9JY29uTGlzdC5jcHAKaW5kZXggMDliNjY3OC4uNzIzMTc5MCAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9JY29uTGlzdC5jcHAKKysrIGIvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9JY29uTGlzdC5jcHAKQEAgLTEsNTkyICsxLDU5MiBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BERldpbmRvdy5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfV25kLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9MaXN0Q3RybC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfSWNvbkxpc3QuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1V0aWxzLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9TY3JvbGxCYXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0xhYmVsLmgiDQotDQotI2RlZmluZSBQV0xfSWNvbkxpc3RfSVRFTV9JQ09OX0xFRlRNQVJHSU4JCTEwLjBmDQotI2RlZmluZSBQV0xfSWNvbkxpc3RfSVRFTV9XSURUSAkJCQkJMjAuMGYNCi0jZGVmaW5lIFBXTF9JY29uTGlzdF9JVEVNX0hFSUdIVAkJCQkyMC4wZg0KLSNkZWZpbmUgUFdMX0ljb25MaXN0X0lURU1fU1BBQ0UJCQkJCTQuMGYNCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9JY29uTGlzdF9JdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DUFdMX0ljb25MaXN0X0l0ZW06OkNQV0xfSWNvbkxpc3RfSXRlbSgpIDogDQotCW1fbkljb25JbmRleCgtMSksIA0KLQltX3BEYXRhKE5VTEwpLA0KLQltX2JTZWxlY3RlZChGQUxTRSksDQotCW1fcFRleHQoTlVMTCkNCi17DQotfQ0KLQ0KLUNQV0xfSWNvbkxpc3RfSXRlbTo6fkNQV0xfSWNvbkxpc3RfSXRlbSgpDQotew0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDUFdMX0ljb25MaXN0X0l0ZW06OkdldENsYXNzTmFtZSgpIGNvbnN0DQotew0KLQlyZXR1cm4gIkNQV0xfSWNvbkxpc3RfSXRlbSI7DQotfQ0KLQ0KLUZYX0ZMT0FUIENQV0xfSWNvbkxpc3RfSXRlbTo6R2V0SXRlbUhlaWdodChGWF9GTE9BVCBmTGltaXRXaWR0aCkNCi17DQotCXJldHVybiBQV0xfSWNvbkxpc3RfSVRFTV9IRUlHSFQ7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9JY29uTGlzdF9JdGVtOjpEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSkNCi17DQotCUNQREZfUmVjdCByY0NsaWVudCA9IEdldENsaWVudFJlY3QoKTsNCi0NCi0JaWYgKG1fYlNlbGVjdGVkKQ0KLQl7DQotCQlpZiAodGhpcy0+SXNFbmFibGVkKCkpDQotCQl7DQotCQkJQ1BXTF9VdGlsczo6RHJhd0ZpbGxSZWN0KHBEZXZpY2UsIHBVc2VyMkRldmljZSwgcmNDbGllbnQsIA0KLQkJCQlDUFdMX1V0aWxzOjpQV0xDb2xvclRvRlhDb2xvcihQV0xfREVGQVVMVF9TRUxCQUNLQ09MT1IsdGhpcy0+R2V0VHJhbnNwYXJlbmN5KCkpKTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQlDUFdMX1V0aWxzOjpEcmF3RmlsbFJlY3QocERldmljZSwgcFVzZXIyRGV2aWNlLCByY0NsaWVudCwgDQotCQkJCUNQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKFBXTF9ERUZBVUxUX0xJR0hUR1JBWUNPTE9SLHRoaXMtPkdldFRyYW5zcGFyZW5jeSgpKSk7DQotCQl9DQotCX0NCi0NCi0JQ1BERl9SZWN0IHJjSWNvbiA9IHJjQ2xpZW50Ow0KLQlyY0ljb24ubGVmdCArPSBQV0xfSWNvbkxpc3RfSVRFTV9JQ09OX0xFRlRNQVJHSU47DQotCXJjSWNvbi5yaWdodCA9IHJjSWNvbi5sZWZ0ICsgUFdMX0ljb25MaXN0X0lURU1fV0lEVEg7DQotDQotCUNQV0xfVXRpbHM6OkRyYXdJY29uQXBwU3RyZWFtKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgbV9uSWNvbkluZGV4LCByY0ljb24sIA0KLQkJbV9jckljb24sIG1fcFRleHQtPkdldFRleHRDb2xvcigpLCB0aGlzLT5HZXRUcmFuc3BhcmVuY3koKSk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9JY29uTGlzdF9JdGVtOjpTZXRTZWxlY3QoRlhfQk9PTCBiU2VsZWN0ZWQpDQotew0KLQltX2JTZWxlY3RlZCA9IGJTZWxlY3RlZDsNCi0NCi0JaWYgKGJTZWxlY3RlZCkNCi0JCW1fcFRleHQtPlNldFRleHRDb2xvcihQV0xfREVGQVVMVF9XSElURUNPTE9SKTsNCi0JZWxzZQ0KLQkJbV9wVGV4dC0+U2V0VGV4dENvbG9yKFBXTF9ERUZBVUxUX0JMQUNLQ09MT1IpOw0KLQ0KLX0NCi0NCi1GWF9CT09MCUNQV0xfSWNvbkxpc3RfSXRlbTo6SXNTZWxlY3RlZCgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9iU2VsZWN0ZWQ7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9JY29uTGlzdF9JdGVtOjpDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCkNCi17DQotCW1fcFRleHQgPSBuZXcgQ1BXTF9MYWJlbDsNCi0NCi0JUFdMX0NSRUFURVBBUkFNIGxjcCA9IGNwOw0KLQlsY3AucFBhcmVudFduZCA9IHRoaXM7DQotCWxjcC5kd0ZsYWdzID0gUFdTX0NISUxEIHwgUFdTX1ZJU0lCTEUgfCBQRVNfTEVGVCB8IFBFU19DRU5URVI7DQotCWxjcC5zVGV4dENvbG9yID0gUFdMX0RFRkFVTFRfQkxBQ0tDT0xPUjsNCi0JbGNwLmZGb250U2l6ZSA9IDEyOw0KLQltX3BUZXh0LT5DcmVhdGUobGNwKTsNCi19DQotDQotdm9pZCBDUFdMX0ljb25MaXN0X0l0ZW06OlNldERhdGEodm9pZCogcERhdGEpDQotew0KLQltX3BEYXRhID0gcERhdGE7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9JY29uTGlzdF9JdGVtOjpTZXRJY29uKEZYX0lOVDMyIG5JY29uSW5kZXgpDQotew0KLQltX25JY29uSW5kZXggPSBuSWNvbkluZGV4Ow0KLX0NCi0NCi12b2lkIENQV0xfSWNvbkxpc3RfSXRlbTo6U2V0VGV4dChjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyKQ0KLXsNCi0JbV9wVGV4dC0+U2V0VGV4dChzdHIpOw0KLX0NCi0NCi1DRlhfV2lkZVN0cmluZyBDUFdMX0ljb25MaXN0X0l0ZW06OkdldFRleHQoKSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fcFRleHQtPkdldFRleHQoKTsNCi19DQotDQotdm9pZCBDUFdMX0ljb25MaXN0X0l0ZW06OlJlUG9zQ2hpbGRXbmQoKQ0KLXsNCi0JQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOw0KLQ0KLQlyY0NsaWVudC5sZWZ0ICs9IChQV0xfSWNvbkxpc3RfSVRFTV9JQ09OX0xFRlRNQVJHSU4gKyBQV0xfSWNvbkxpc3RfSVRFTV9XSURUSCArIFBXTF9JY29uTGlzdF9JVEVNX0lDT05fTEVGVE1BUkdJTik7DQotDQotCW1fcFRleHQtPk1vdmUocmNDbGllbnQsIFRSVUUsIEZBTFNFKTsNCi19DQotDQotdm9pZCBDUFdMX0ljb25MaXN0X0l0ZW06OlNldEljb25GaWxsQ29sb3IoY29uc3QgQ1BXTF9Db2xvciYgY29sb3IpDQotew0KLQltX2NySWNvbiA9IGNvbG9yOw0KLX0NCi0NCi12b2lkIENQV0xfSWNvbkxpc3RfSXRlbTo6T25FbmFibGVkKCkNCi17DQotCWlmIChtX2JTZWxlY3RlZCkNCi0JCW1fcFRleHQtPlNldFRleHRDb2xvcihQV0xfREVGQVVMVF9XSElURUNPTE9SKTsNCi0JZWxzZQ0KLQkJbV9wVGV4dC0+U2V0VGV4dENvbG9yKFBXTF9ERUZBVUxUX0JMQUNLQ09MT1IpOw0KLQ0KLQl0aGlzLT5JbnZhbGlkYXRlUmVjdCgpOw0KLX0NCi0NCi12b2lkIENQV0xfSWNvbkxpc3RfSXRlbTo6T25EaXNhYmxlZCgpDQotew0KLQltX3BUZXh0LT5TZXRUZXh0Q29sb3IoUFdMX0RFRkFVTFRfSEVBVllHUkFZQ09MT1IpOw0KLQ0KLQl0aGlzLT5JbnZhbGlkYXRlUmVjdCgpOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLSBDUFdMX0ljb25MaXN0X0NvbnRlbnQgLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DUFdMX0ljb25MaXN0X0NvbnRlbnQ6OkNQV0xfSWNvbkxpc3RfQ29udGVudChGWF9JTlQzMiBuTGlzdENvdW50KSA6IA0KLQltX25TZWxlY3RJbmRleCgtMSksDQotCW1fcE5vdGlmeShOVUxMKSwNCi0JbV9iRW5hYmxlTm90aWZ5KFRSVUUpLA0KLQltX2JNb3VzZURvd24oRkFMU0UpLA0KLQltX25MaXN0Q291bnQobkxpc3RDb3VudCkNCi17DQotfQ0KLQ0KLUNQV0xfSWNvbkxpc3RfQ29udGVudDo6fkNQV0xfSWNvbkxpc3RfQ29udGVudCgpDQotew0KLX0NCi0NCi12b2lkIENQV0xfSWNvbkxpc3RfQ29udGVudDo6Q3JlYXRlQ2hpbGRXbmQoY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApDQotew0KLQlmb3IgKEZYX0lOVDMyIGk9MDsgaTxtX25MaXN0Q291bnQ7IGkrKykNCi0Jew0KLQkJQ1BXTF9JY29uTGlzdF9JdGVtKiBwTmV3SXRlbSA9IG5ldyBDUFdMX0ljb25MaXN0X0l0ZW0oKTsNCi0NCi0JCVBXTF9DUkVBVEVQQVJBTSBpY3AgPSBjcDsNCi0JCWljcC5wUGFyZW50V25kID0gdGhpczsNCi0JCWljcC5kd0ZsYWdzID0gUFdTX0NISUxEIHwgUFdTX1ZJU0lCTEUgfCBQV1NfTk9SRUZSRVNIQ0xJUDsNCi0JCXBOZXdJdGVtLT5DcmVhdGUoaWNwKTsNCi0JfQ0KLQ0KLQl0aGlzLT5TZXRJdGVtU3BhY2UoUFdMX0ljb25MaXN0X0lURU1fU1BBQ0UpOw0KLQl0aGlzLT5SZXNldENvbnRlbnQoMCk7DQotDQotCWlmIChDUFdMX1duZCAqIHBQYXJlbnQgPSB0aGlzLT5HZXRQYXJlbnRXaW5kb3coKSkNCi0Jew0KLQkJQ1BERl9SZWN0IHJjU2Nyb2xsID0gdGhpcy0+R2V0U2Nyb2xsQXJlYSgpOw0KLQkJdGhpcy0+R2V0U2Nyb2xsUG9zKCk7DQotDQotCQlQV0xfU0NST0xMX0lORk8gc0luZm87DQotCQlzSW5mby5mQ29udGVudE1pbiA9IHJjU2Nyb2xsLmJvdHRvbTsNCi0JCXNJbmZvLmZDb250ZW50TWF4ID0gcmNTY3JvbGwudG9wOw0KLQkJc0luZm8uZlBsYXRlV2lkdGggPSBHZXRDbGllbnRSZWN0KCkuSGVpZ2h0KCk7DQotCQlzSW5mby5mU21hbGxTdGVwID0gMTMuMGY7DQotCQlzSW5mby5mQmlnU3RlcCA9IHNJbmZvLmZQbGF0ZVdpZHRoOw0KLQ0KLQkJcFBhcmVudC0+T25Ob3RpZnkodGhpcywgUE5NX1NFVFNDUk9MTElORk8sIFNCVF9WU0NST0xMLCAoRlhfSU5UUFRSKSZzSW5mbyk7DQotCX0NCi19DQotDQotRlhfQk9PTAlDUFdMX0ljb25MaXN0X0NvbnRlbnQ6Ok9uTEJ1dHRvbkRvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KQ0KLXsNCi0JU2V0Rm9jdXMoKTsNCi0NCi0JU2V0Q2FwdHVyZSgpOw0KLQltX2JNb3VzZURvd24gPSBUUlVFOw0KLQ0KLQlGWF9JTlQzMiBuSXRlbUluZGV4ID0gRmluZEl0ZW1JbmRleChwb2ludCk7DQotCVNldFNlbGVjdChuSXRlbUluZGV4KTsNCi0JU2Nyb2xsVG9JdGVtKG5JdGVtSW5kZXgpOw0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTAlDUFdMX0ljb25MaXN0X0NvbnRlbnQ6Ok9uTEJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkNCi17DQotCW1fYk1vdXNlRG93biA9IEZBTFNFOw0KLQlSZWxlYXNlQ2FwdHVyZSgpOw0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBDUFdMX0ljb25MaXN0X0NvbnRlbnQ6Ok9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkNCi17DQotCWlmIChtX2JNb3VzZURvd24pDQotCXsNCi0JCUZYX0lOVDMyIG5JdGVtSW5kZXggPSBGaW5kSXRlbUluZGV4KHBvaW50KTsNCi0JCVNldFNlbGVjdChuSXRlbUluZGV4KTsNCi0JCVNjcm9sbFRvSXRlbShuSXRlbUluZGV4KTsNCi0JfQ0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTAlDUFdMX0ljb25MaXN0X0NvbnRlbnQ6Ok9uS2V5RG93bihGWF9XT1JEIG5DaGFyKQ0KLXsNCi0Jc3dpdGNoIChuQ2hhcikNCi0Jew0KLQljYXNlIEZXTF9WS0VZX1VwOg0KLQkJaWYgKG1fblNlbGVjdEluZGV4ID4gMCkNCi0JCXsNCi0JCQlGWF9JTlQzMiBuSXRlbUluZGV4ID0gbV9uU2VsZWN0SW5kZXggLSAxOw0KLQkJCVNldFNlbGVjdChuSXRlbUluZGV4KTsNCi0JCQlTY3JvbGxUb0l0ZW0obkl0ZW1JbmRleCk7DQotCQl9DQotCQlyZXR1cm4gVFJVRTsNCi0JY2FzZSBGV0xfVktFWV9Eb3duOg0KLQkJaWYgKG1fblNlbGVjdEluZGV4IDwgbV9uTGlzdENvdW50LTEpDQotCQl7DQotCQkJRlhfSU5UMzIgbkl0ZW1JbmRleCA9IG1fblNlbGVjdEluZGV4ICsgMTsNCi0JCQlTZXRTZWxlY3Qobkl0ZW1JbmRleCk7DQotCQkJU2Nyb2xsVG9JdGVtKG5JdGVtSW5kZXgpOw0KLQkJfQ0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9JTlQzMiBDUFdMX0ljb25MaXN0X0NvbnRlbnQ6OkZpbmRJdGVtSW5kZXgoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpDQotew0KLQlGWF9JTlQzMiBuSW5kZXggPSAwOw0KLQlmb3IgKEZYX0lOVDMyIGk9MCxzej1tX2FDaGlsZHJlbi5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJaWYgKENQV0xfV25kICogcENoaWxkID0gbV9hQ2hpbGRyZW4uR2V0QXQoaSkpDQotCQl7DQotCQkJQ1BERl9SZWN0IHJjV25kID0gcENoaWxkLT5DaGlsZFRvUGFyZW50KHBDaGlsZC0+R2V0V2luZG93UmVjdCgpKTsNCi0NCi0JCQlpZiAocG9pbnQueSA8IHJjV25kLnRvcCkNCi0JCQl7DQotCQkJCW5JbmRleCA9IGk7DQotCQkJfQ0KLQkJfQ0KLQl9DQotDQotCXJldHVybiBuSW5kZXg7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9JY29uTGlzdF9Db250ZW50OjpTY3JvbGxUb0l0ZW0oRlhfSU5UMzIgbkl0ZW1JbmRleCkNCi17DQotCUNQREZfUmVjdCByY0NsaWVudCA9IEdldENsaWVudFJlY3QoKTsNCi0NCi0JaWYgKENQV0xfSWNvbkxpc3RfSXRlbSogcEl0ZW0gPSBHZXRMaXN0SXRlbShuSXRlbUluZGV4KSkNCi0Jew0KLQkJQ1BERl9SZWN0IHJjT3JpZ2luID0gcEl0ZW0tPkdldFdpbmRvd1JlY3QoKTsNCi0JCUNQREZfUmVjdCByY1duZCA9IHBJdGVtLT5DaGlsZFRvUGFyZW50KHJjT3JpZ2luKTsNCi0NCi0JCWlmICghKHJjV25kLmJvdHRvbSA+IHJjQ2xpZW50LmJvdHRvbSAmJiByY1duZC50b3AgPCByY0NsaWVudC50b3ApKQ0KLQkJew0KLQkJCUNQREZfUG9pbnQgcHRTY3JvbGwgPSBHZXRTY3JvbGxQb3MoKTsNCi0NCi0JCQlpZiAocmNXbmQudG9wID4gcmNDbGllbnQudG9wKQ0KLQkJCXsNCi0JCQkJcHRTY3JvbGwueSA9IHJjT3JpZ2luLnRvcDsNCi0JCQl9DQotCQkJZWxzZSBpZiAocmNXbmQuYm90dG9tIDwgcmNDbGllbnQuYm90dG9tKQ0KLQkJCXsNCi0JCQkJcHRTY3JvbGwueSA9IHJjT3JpZ2luLmJvdHRvbSArIHJjQ2xpZW50LkhlaWdodCgpOwkJCQkJDQotCQkJfQ0KLQ0KLQkJCXRoaXMtPlNldFNjcm9sbFBvcyhwdFNjcm9sbCk7DQotCQkJdGhpcy0+UmVzZXRGYWNlKCk7DQotCQkJdGhpcy0+SW52YWxpZGF0ZVJlY3QoKTsNCi0JCQlpZiAoQ1BXTF9XbmQqIHBQYXJlbnQgPSB0aGlzLT5HZXRQYXJlbnRXaW5kb3coKSkNCi0JCQl7DQotCQkJCXBQYXJlbnQtPk9uTm90aWZ5KHRoaXMsIFBOTV9TRVRTQ1JPTExQT1MsIFNCVF9WU0NST0xMLCAoRlhfSU5UUFRSKSZwdFNjcm9sbC55KTsNCi0JCQl9DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBDUFdMX0ljb25MaXN0X0NvbnRlbnQ6OlNldFNlbGVjdChGWF9JTlQzMiBuSW5kZXgpDQotew0KLQlpZiAobV9uU2VsZWN0SW5kZXggIT0gbkluZGV4KQ0KLQl7DQotCQlTZWxlY3RJdGVtKG1fblNlbGVjdEluZGV4LCBGQUxTRSk7DQotCQlTZWxlY3RJdGVtKG5JbmRleCwgVFJVRSk7DQotCQltX25TZWxlY3RJbmRleCA9IG5JbmRleDsNCi0NCi0JCWlmIChJUFdMX0ljb25MaXN0X05vdGlmeSogcE5vdGlmeSA9IEdldE5vdGlmeSgpKQ0KLQkJCXBOb3RpZnktPk9uTm90ZUxpc3RTZWxDaGFuZ2VkKG5JbmRleCk7DQotCX0NCi19DQotDQotRlhfSU5UMzIgQ1BXTF9JY29uTGlzdF9Db250ZW50OjpHZXRTZWxlY3QoKSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fblNlbGVjdEluZGV4Ow0KLX0NCi0NCi1JUFdMX0ljb25MaXN0X05vdGlmeSogQ1BXTF9JY29uTGlzdF9Db250ZW50OjpHZXROb3RpZnkoKSBjb25zdA0KLXsNCi0JaWYgKG1fYkVuYWJsZU5vdGlmeSkNCi0JCXJldHVybiBtX3BOb3RpZnk7DQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi12b2lkIENQV0xfSWNvbkxpc3RfQ29udGVudDo6U2V0Tm90aWZ5KElQV0xfSWNvbkxpc3RfTm90aWZ5KiBwTm90aWZ5KQ0KLXsNCi0JbV9wTm90aWZ5ID0gcE5vdGlmeTsNCi19DQotDQotdm9pZCBDUFdMX0ljb25MaXN0X0NvbnRlbnQ6OkVuYWJsZU5vdGlmeShGWF9CT09MIGJOb3RpZnkpDQotew0KLQltX2JFbmFibGVOb3RpZnkgPSBiTm90aWZ5Ow0KLX0NCi0NCi12b2lkIENQV0xfSWNvbkxpc3RfQ29udGVudDo6U2VsZWN0SXRlbShGWF9JTlQzMiBuSXRlbUluZGV4LCBGWF9CT09MIGJTZWxlY3QpDQotew0KLQlpZiAoQ1BXTF9JY29uTGlzdF9JdGVtKiBwSXRlbSA9IEdldExpc3RJdGVtKG5JdGVtSW5kZXgpKQ0KLQl7DQotCQlwSXRlbS0+U2V0U2VsZWN0KGJTZWxlY3QpOw0KLQkJcEl0ZW0tPkludmFsaWRhdGVSZWN0KCk7CQkNCi0JfQ0KLX0NCi0NCi1DUFdMX0ljb25MaXN0X0l0ZW0qIENQV0xfSWNvbkxpc3RfQ29udGVudDo6R2V0TGlzdEl0ZW0oRlhfSU5UMzIgbkl0ZW1JbmRleCkgY29uc3QNCi17DQotCWlmIChuSXRlbUluZGV4ID49IDAgJiYgbkl0ZW1JbmRleDxtX2FDaGlsZHJlbi5HZXRTaXplKCkpDQotCXsNCi0JCWlmIChDUFdMX1duZCAqIHBDaGlsZCA9IG1fYUNoaWxkcmVuLkdldEF0KG5JdGVtSW5kZXgpKQ0KLQkJew0KLQkJCWlmIChwQ2hpbGQtPkdldENsYXNzTmFtZSgpID09ICJDUFdMX0ljb25MaXN0X0l0ZW0iKQ0KLQkJCXsNCi0JCQkJcmV0dXJuIChDUFdMX0ljb25MaXN0X0l0ZW0qKXBDaGlsZDsNCi0JCQl9DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9JY29uTGlzdF9Db250ZW50OjpTZXRMaXN0RGF0YShGWF9JTlQzMiBuSXRlbUluZGV4LCB2b2lkKiBwRGF0YSkNCi17DQotCWlmIChDUFdMX0ljb25MaXN0X0l0ZW0qIHBJdGVtID0gR2V0TGlzdEl0ZW0obkl0ZW1JbmRleCkpDQotCQlwSXRlbS0+U2V0RGF0YShwRGF0YSk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9JY29uTGlzdF9Db250ZW50OjpTZXRMaXN0SWNvbihGWF9JTlQzMiBuSXRlbUluZGV4LCBGWF9JTlQzMiBuSWNvbkluZGV4KQ0KLXsNCi0JaWYgKENQV0xfSWNvbkxpc3RfSXRlbSogcEl0ZW0gPSBHZXRMaXN0SXRlbShuSXRlbUluZGV4KSkNCi0JCXBJdGVtLT5TZXRJY29uKG5JY29uSW5kZXgpOw0KLX0NCi0NCi12b2lkIENQV0xfSWNvbkxpc3RfQ29udGVudDo6U2V0TGlzdFN0cmluZyhGWF9JTlQzMiBuSXRlbUluZGV4LCBjb25zdCBDRlhfV2lkZVN0cmluZyYgc3RyKQ0KLXsNCi0JaWYgKENQV0xfSWNvbkxpc3RfSXRlbSogcEl0ZW0gPSBHZXRMaXN0SXRlbShuSXRlbUluZGV4KSkNCi0JCXBJdGVtLT5TZXRUZXh0KHN0cik7DQotfQ0KLQ0KLUNGWF9XaWRlU3RyaW5nIENQV0xfSWNvbkxpc3RfQ29udGVudDo6R2V0TGlzdFN0cmluZyhGWF9JTlQzMiBuSXRlbUluZGV4KSBjb25zdA0KLXsNCi0JaWYgKENQV0xfSWNvbkxpc3RfSXRlbSogcEl0ZW0gPSBHZXRMaXN0SXRlbShuSXRlbUluZGV4KSkNCi0JCXJldHVybiBwSXRlbS0+R2V0VGV4dCgpOw0KLQ0KLQlyZXR1cm4gTCIiOw0KLX0NCi0NCi12b2lkIENQV0xfSWNvbkxpc3RfQ29udGVudDo6U2V0SWNvbkZpbGxDb2xvcihjb25zdCBDUFdMX0NvbG9yJiBjb2xvcikNCi17DQotCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fYUNoaWxkcmVuLkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQl7DQotCQlpZiAoQ1BXTF9XbmQgKiBwQ2hpbGQgPSBtX2FDaGlsZHJlbi5HZXRBdChpKSkNCi0JCXsNCi0JCQlpZiAocENoaWxkLT5HZXRDbGFzc05hbWUoKSA9PSAiQ1BXTF9JY29uTGlzdF9JdGVtIikNCi0JCQl7DQotCQkJCUNQV0xfSWNvbkxpc3RfSXRlbSogcEl0ZW0gPSAoQ1BXTF9JY29uTGlzdF9JdGVtKilwQ2hpbGQ7DQotCQkJCXBJdGVtLT5TZXRJY29uRmlsbENvbG9yKGNvbG9yKTsNCi0JCQkJcEl0ZW0tPkludmFsaWRhdGVSZWN0KCk7DQotCQkJfQ0KLQkJfQ0KLQl9DQotDQotfQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfSWNvbkxpc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ1BXTF9JY29uTGlzdDo6Q1BXTF9JY29uTGlzdChGWF9JTlQzMiBuTGlzdENvdW50KSA6IA0KLQltX3BMaXN0Q29udGVudChOVUxMKSwNCi0JbV9uTGlzdENvdW50KG5MaXN0Q291bnQpDQotew0KLX0NCi0NCi1DUFdMX0ljb25MaXN0Ojp+Q1BXTF9JY29uTGlzdCgpDQotew0KLX0NCi0NCi12b2lkIENQV0xfSWNvbkxpc3Q6OlJlUG9zQ2hpbGRXbmQoKQ0KLXsNCi0JQ1BXTF9XbmQ6OlJlUG9zQ2hpbGRXbmQoKTsNCi0NCi0JaWYgKG1fcExpc3RDb250ZW50KQ0KLQkJbV9wTGlzdENvbnRlbnQtPk1vdmUoR2V0Q2xpZW50UmVjdCgpLCBUUlVFLCBGQUxTRSk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9JY29uTGlzdDo6Q3JlYXRlQ2hpbGRXbmQoY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApDQotew0KLQltX3BMaXN0Q29udGVudCA9IG5ldyBDUFdMX0ljb25MaXN0X0NvbnRlbnQobV9uTGlzdENvdW50KTsNCi0NCi0JUFdMX0NSRUFURVBBUkFNIGNjcCA9IGNwOw0KLQljY3AucFBhcmVudFduZCA9IHRoaXM7DQotCWNjcC5kd0ZsYWdzID0gUFdTX0NISUxEIHwgUFdTX1ZJU0lCTEU7DQotCW1fcExpc3RDb250ZW50LT5DcmVhdGUoY2NwKTsNCi19DQotDQotdm9pZCBDUFdMX0ljb25MaXN0OjpPbkNyZWF0ZWQoKQ0KLXsNCi0JaWYgKENQV0xfU2Nyb2xsQmFyKiBwU2Nyb2xsQmFyID0gdGhpcy0+R2V0VlNjcm9sbEJhcigpKQ0KLQl7DQotCQlwU2Nyb2xsQmFyLT5SZW1vdmVGbGFnKFBXU19BVVRPVFJBTlNQQVJFTlQpOw0KLQkJcFNjcm9sbEJhci0+U2V0VHJhbnNwYXJlbmN5KDI1NSk7DQotCQlwU2Nyb2xsQmFyLT5TZXROb3RpZnlGb3JldmVyKFRSVUUpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9JY29uTGlzdDo6T25Ob3RpZnkoQ1BXTF9XbmQqIHBXbmQsIEZYX0RXT1JEIG1zZywgRlhfSU5UUFRSIHdQYXJhbSwgRlhfSU5UUFRSIGxQYXJhbSkNCi17DQotCUNQV0xfV25kOjpPbk5vdGlmeShwV25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsNCi0NCi0JaWYgKHdQYXJhbSA9PSBTQlRfVlNDUk9MTCkNCi0JewkJDQotCQlzd2l0Y2ggKG1zZykNCi0JCXsNCi0JCWNhc2UgUE5NX1NFVFNDUk9MTElORk86DQotCQkJaWYgKFBXTF9TQ1JPTExfSU5GTyogcEluZm8gPSAoUFdMX1NDUk9MTF9JTkZPKilsUGFyYW0pDQotCQkJew0KLQkJCQlpZiAoQ1BXTF9TY3JvbGxCYXIqIHBTY3JvbGxCYXIgPSB0aGlzLT5HZXRWU2Nyb2xsQmFyKCkpDQotCQkJCXsNCi0JCQkJCWlmIChwSW5mby0+ZkNvbnRlbnRNYXggLSBwSW5mby0+ZkNvbnRlbnRNaW4gPiBwSW5mby0+ZlBsYXRlV2lkdGgpDQotCQkJCQl7DQotCQkJCQkJaWYgKCFwU2Nyb2xsQmFyLT5Jc1Zpc2libGUoKSkNCi0JCQkJCQl7DQotCQkJCQkJCXBTY3JvbGxCYXItPlNldFZpc2libGUoVFJVRSk7DQotCQkJCQkJCVJlUG9zQ2hpbGRXbmQoKTsJCQkNCi0JCQkJCQl9DQotCQkJCQkJZWxzZQ0KLQkJCQkJCXsNCi0JCQkJCQl9DQotCQkJCQl9DQotCQkJCQllbHNlDQotCQkJCQl7DQotCQkJCQkJaWYgKHBTY3JvbGxCYXItPklzVmlzaWJsZSgpKQ0KLQkJCQkJCXsNCi0JCQkJCQkJcFNjcm9sbEJhci0+U2V0VmlzaWJsZShGQUxTRSk7DQotCQkJCQkJCVJlUG9zQ2hpbGRXbmQoKTsNCi0JCQkJCQl9DQotDQotCQkJCQkJaWYgKG1fcExpc3RDb250ZW50KQ0KLQkJCQkJCQltX3BMaXN0Q29udGVudC0+U2V0U2Nyb2xsUG9zKENQREZfUG9pbnQoMC4wZiwwLjBmKSk7DQotCQkJCQl9DQotCQkJCQkNCi0JCQkJCXBTY3JvbGxCYXItPk9uTm90aWZ5KHBXbmQsUE5NX1NFVFNDUk9MTElORk8sd1BhcmFtLGxQYXJhbSk7DQotCQkJCX0NCi0JCQl9DQotCQkJcmV0dXJuOw0KLQkJY2FzZSBQTk1fU0NST0xMV0lORE9XOg0KLQkJCWlmIChtX3BMaXN0Q29udGVudCkNCi0JCQl7DQotCQkJCW1fcExpc3RDb250ZW50LT5TZXRTY3JvbGxQb3MoQ1BERl9Qb2ludCgwLjBmLCAqKEZYX0ZMT0FUKilsUGFyYW0pKTsNCi0JCQkJbV9wTGlzdENvbnRlbnQtPlJlc2V0RmFjZSgpOw0KLQkJCQltX3BMaXN0Q29udGVudC0+SW52YWxpZGF0ZVJlY3QoTlVMTCk7DQotCQkJfQ0KLQkJCXJldHVybjsNCi0JCWNhc2UgUE5NX1NFVFNDUk9MTFBPUzoNCi0JCQlpZiAoQ1BXTF9TY3JvbGxCYXIqIHBTY3JvbGxCYXIgPSB0aGlzLT5HZXRWU2Nyb2xsQmFyKCkpDQotCQkJCXBTY3JvbGxCYXItPk9uTm90aWZ5KHBXbmQsUE5NX1NFVFNDUk9MTFBPUyx3UGFyYW0sbFBhcmFtKTsNCi0JCQlyZXR1cm47DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBDUFdMX0ljb25MaXN0OjpTZXRTZWxlY3QoRlhfSU5UMzIgbkluZGV4KQ0KLXsNCi0JbV9wTGlzdENvbnRlbnQtPlNldFNlbGVjdChuSW5kZXgpOw0KLX0NCi0NCi12b2lkIENQV0xfSWNvbkxpc3Q6OlNldFRvcEl0ZW0oRlhfSU5UMzIgbkluZGV4KQ0KLXsNCi0JbV9wTGlzdENvbnRlbnQtPlNjcm9sbFRvSXRlbShuSW5kZXgpOw0KLX0NCi0NCi1GWF9JTlQzMiBDUFdMX0ljb25MaXN0OjpHZXRTZWxlY3QoKSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fcExpc3RDb250ZW50LT5HZXRTZWxlY3QoKTsNCi19DQotDQotdm9pZCBDUFdMX0ljb25MaXN0OjpTZXROb3RpZnkoSVBXTF9JY29uTGlzdF9Ob3RpZnkqIHBOb3RpZnkpDQotew0KLQltX3BMaXN0Q29udGVudC0+U2V0Tm90aWZ5KHBOb3RpZnkpOw0KLX0NCi0NCi12b2lkIENQV0xfSWNvbkxpc3Q6OkVuYWJsZU5vdGlmeShGWF9CT09MIGJOb3RpZnkpDQotew0KLQltX3BMaXN0Q29udGVudC0+RW5hYmxlTm90aWZ5KGJOb3RpZnkpOw0KLX0NCi0NCi12b2lkIENQV0xfSWNvbkxpc3Q6OlNldExpc3REYXRhKEZYX0lOVDMyIG5JdGVtSW5kZXgsIHZvaWQqIHBEYXRhKQ0KLXsNCi0JbV9wTGlzdENvbnRlbnQtPlNldExpc3REYXRhKG5JdGVtSW5kZXgsIHBEYXRhKTsNCi19DQotDQotdm9pZCBDUFdMX0ljb25MaXN0OjpTZXRMaXN0SWNvbihGWF9JTlQzMiBuSXRlbUluZGV4LCBGWF9JTlQzMiBuSWNvbkluZGV4KQ0KLXsNCi0JbV9wTGlzdENvbnRlbnQtPlNldExpc3RJY29uKG5JdGVtSW5kZXgsIG5JY29uSW5kZXgpOw0KLX0NCi0NCi12b2lkIENQV0xfSWNvbkxpc3Q6OlNldExpc3RTdHJpbmcoRlhfSU5UMzIgbkl0ZW1JbmRleCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cikNCi17DQotCW1fcExpc3RDb250ZW50LT5TZXRMaXN0U3RyaW5nKG5JdGVtSW5kZXgsIHN0cik7DQotfQ0KLQ0KLUNGWF9XaWRlU3RyaW5nIENQV0xfSWNvbkxpc3Q6OkdldExpc3RTdHJpbmcoRlhfSU5UMzIgbkl0ZW1JbmRleCkgY29uc3QNCi17DQotCXJldHVybiBtX3BMaXN0Q29udGVudC0+R2V0TGlzdFN0cmluZyhuSXRlbUluZGV4KTsNCi19DQotDQotdm9pZCBDUFdMX0ljb25MaXN0OjpTZXRJY29uRmlsbENvbG9yKGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yKQ0KLXsNCi0JbV9wTGlzdENvbnRlbnQtPlNldEljb25GaWxsQ29sb3IoY29sb3IpOw0KLX0NCi0NCi1GWF9CT09MCUNQV0xfSWNvbkxpc3Q6Ok9uTW91c2VXaGVlbChzaG9ydCB6RGVsdGEsIGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkNCi17DQotCUNQREZfUG9pbnQgcHRTY3JvbGwgPSBtX3BMaXN0Q29udGVudC0+R2V0U2Nyb2xsUG9zKCk7DQotCUNQREZfUmVjdCByY1Njcm9sbCA9IG1fcExpc3RDb250ZW50LT5HZXRTY3JvbGxBcmVhKCk7DQotCUNQREZfUmVjdCByY0NvbnRlbnRzID0gbV9wTGlzdENvbnRlbnQtPkdldENsaWVudFJlY3QoKTsNCi0NCi0JaWYgKHJjU2Nyb2xsLnRvcCAtIHJjU2Nyb2xsLmJvdHRvbSA+IHJjQ29udGVudHMuSGVpZ2h0KCkpDQotCXsNCi0JCUNQREZfUG9pbnQgcHROZXcgPSBwdFNjcm9sbDsNCi0NCi0JCWlmICh6RGVsdGEgPiAwKQ0KLQkJCXB0TmV3LnkgKz0gMzA7DQotCQllbHNlDQotCQkJcHROZXcueSAtPSAzMDsNCi0NCi0JCWlmIChwdE5ldy55ID4gcmNTY3JvbGwudG9wKQ0KLQkJCXB0TmV3LnkgPSByY1Njcm9sbC50b3A7DQotCQlpZiAocHROZXcueSA8IHJjU2Nyb2xsLmJvdHRvbSArIHJjQ29udGVudHMuSGVpZ2h0KCkpDQotCQkJcHROZXcueSA9IHJjU2Nyb2xsLmJvdHRvbSArIHJjQ29udGVudHMuSGVpZ2h0KCk7DQotCQlpZiAocHROZXcueSA8IHJjU2Nyb2xsLmJvdHRvbSkNCi0JCQlwdE5ldy55ID0gcmNTY3JvbGwuYm90dG9tOw0KLQ0KLQkJaWYgKHB0TmV3LnkgIT0gcHRTY3JvbGwueSkNCi0JCXsNCi0JCQltX3BMaXN0Q29udGVudC0+U2V0U2Nyb2xsUG9zKHB0TmV3KTsNCi0JCQltX3BMaXN0Q29udGVudC0+UmVzZXRGYWNlKCk7DQotCQkJbV9wTGlzdENvbnRlbnQtPkludmFsaWRhdGVSZWN0KE5VTEwpOw0KLQkJCQ0KLQkJCWlmIChDUFdMX1Njcm9sbEJhciogcFNjcm9sbEJhciA9IHRoaXMtPkdldFZTY3JvbGxCYXIoKSkNCi0JCQkJcFNjcm9sbEJhci0+T25Ob3RpZnkodGhpcywgUE5NX1NFVFNDUk9MTFBPUywgU0JUX1ZTQ1JPTEwsIChGWF9JTlRQVFIpJnB0TmV3LnkpOw0KLQ0KLQkJCXJldHVybiBUUlVFOw0KLQkJfQ0KLQl9DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BERldpbmRvdy5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9XbmQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfTGlzdEN0cmwuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfSWNvbkxpc3QuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfVXRpbHMuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfU2Nyb2xsQmFyLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0xhYmVsLmgiCisKKyNkZWZpbmUgUFdMX0ljb25MaXN0X0lURU1fSUNPTl9MRUZUTUFSR0lOCQkxMC4wZgorI2RlZmluZSBQV0xfSWNvbkxpc3RfSVRFTV9XSURUSAkJCQkJMjAuMGYKKyNkZWZpbmUgUFdMX0ljb25MaXN0X0lURU1fSEVJR0hUCQkJCTIwLjBmCisjZGVmaW5lIFBXTF9JY29uTGlzdF9JVEVNX1NQQUNFCQkJCQk0LjBmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX0ljb25MaXN0X0l0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDUFdMX0ljb25MaXN0X0l0ZW06OkNQV0xfSWNvbkxpc3RfSXRlbSgpIDogCisJbV9uSWNvbkluZGV4KC0xKSwgCisJbV9wRGF0YShOVUxMKSwKKwltX2JTZWxlY3RlZChGQUxTRSksCisJbV9wVGV4dChOVUxMKQoreworfQorCitDUFdMX0ljb25MaXN0X0l0ZW06On5DUFdMX0ljb25MaXN0X0l0ZW0oKQoreworfQorCitDRlhfQnl0ZVN0cmluZyBDUFdMX0ljb25MaXN0X0l0ZW06OkdldENsYXNzTmFtZSgpIGNvbnN0Cit7CisJcmV0dXJuICJDUFdMX0ljb25MaXN0X0l0ZW0iOworfQorCitGWF9GTE9BVCBDUFdMX0ljb25MaXN0X0l0ZW06OkdldEl0ZW1IZWlnaHQoRlhfRkxPQVQgZkxpbWl0V2lkdGgpCit7CisJcmV0dXJuIFBXTF9JY29uTGlzdF9JVEVNX0hFSUdIVDsKK30KKwordm9pZCBDUFdMX0ljb25MaXN0X0l0ZW06OkRyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKQoreworCUNQREZfUmVjdCByY0NsaWVudCA9IEdldENsaWVudFJlY3QoKTsKKworCWlmIChtX2JTZWxlY3RlZCkKKwl7CisJCWlmICh0aGlzLT5Jc0VuYWJsZWQoKSkKKwkJeworCQkJQ1BXTF9VdGlsczo6RHJhd0ZpbGxSZWN0KHBEZXZpY2UsIHBVc2VyMkRldmljZSwgcmNDbGllbnQsIAorCQkJCUNQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKFBXTF9ERUZBVUxUX1NFTEJBQ0tDT0xPUix0aGlzLT5HZXRUcmFuc3BhcmVuY3koKSkpOworCQl9CisJCWVsc2UKKwkJeworCQkJQ1BXTF9VdGlsczo6RHJhd0ZpbGxSZWN0KHBEZXZpY2UsIHBVc2VyMkRldmljZSwgcmNDbGllbnQsIAorCQkJCUNQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKFBXTF9ERUZBVUxUX0xJR0hUR1JBWUNPTE9SLHRoaXMtPkdldFRyYW5zcGFyZW5jeSgpKSk7CisJCX0KKwl9CisKKwlDUERGX1JlY3QgcmNJY29uID0gcmNDbGllbnQ7CisJcmNJY29uLmxlZnQgKz0gUFdMX0ljb25MaXN0X0lURU1fSUNPTl9MRUZUTUFSR0lOOworCXJjSWNvbi5yaWdodCA9IHJjSWNvbi5sZWZ0ICsgUFdMX0ljb25MaXN0X0lURU1fV0lEVEg7CisKKwlDUFdMX1V0aWxzOjpEcmF3SWNvbkFwcFN0cmVhbShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIG1fbkljb25JbmRleCwgcmNJY29uLCAKKwkJbV9jckljb24sIG1fcFRleHQtPkdldFRleHRDb2xvcigpLCB0aGlzLT5HZXRUcmFuc3BhcmVuY3koKSk7Cit9CisKK3ZvaWQgQ1BXTF9JY29uTGlzdF9JdGVtOjpTZXRTZWxlY3QoRlhfQk9PTCBiU2VsZWN0ZWQpCit7CisJbV9iU2VsZWN0ZWQgPSBiU2VsZWN0ZWQ7CisKKwlpZiAoYlNlbGVjdGVkKQorCQltX3BUZXh0LT5TZXRUZXh0Q29sb3IoUFdMX0RFRkFVTFRfV0hJVEVDT0xPUik7CisJZWxzZQorCQltX3BUZXh0LT5TZXRUZXh0Q29sb3IoUFdMX0RFRkFVTFRfQkxBQ0tDT0xPUik7CisKK30KKworRlhfQk9PTAlDUFdMX0ljb25MaXN0X0l0ZW06OklzU2VsZWN0ZWQoKSBjb25zdAoreworCXJldHVybiBtX2JTZWxlY3RlZDsKK30KKwordm9pZCBDUFdMX0ljb25MaXN0X0l0ZW06OkNyZWF0ZUNoaWxkV25kKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKQoreworCW1fcFRleHQgPSBuZXcgQ1BXTF9MYWJlbDsKKworCVBXTF9DUkVBVEVQQVJBTSBsY3AgPSBjcDsKKwlsY3AucFBhcmVudFduZCA9IHRoaXM7CisJbGNwLmR3RmxhZ3MgPSBQV1NfQ0hJTEQgfCBQV1NfVklTSUJMRSB8IFBFU19MRUZUIHwgUEVTX0NFTlRFUjsKKwlsY3Auc1RleHRDb2xvciA9IFBXTF9ERUZBVUxUX0JMQUNLQ09MT1I7CisJbGNwLmZGb250U2l6ZSA9IDEyOworCW1fcFRleHQtPkNyZWF0ZShsY3ApOworfQorCit2b2lkIENQV0xfSWNvbkxpc3RfSXRlbTo6U2V0RGF0YSh2b2lkKiBwRGF0YSkKK3sKKwltX3BEYXRhID0gcERhdGE7Cit9CisKK3ZvaWQgQ1BXTF9JY29uTGlzdF9JdGVtOjpTZXRJY29uKEZYX0lOVDMyIG5JY29uSW5kZXgpCit7CisJbV9uSWNvbkluZGV4ID0gbkljb25JbmRleDsKK30KKwordm9pZCBDUFdMX0ljb25MaXN0X0l0ZW06OlNldFRleHQoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cikKK3sKKwltX3BUZXh0LT5TZXRUZXh0KHN0cik7Cit9CisKK0NGWF9XaWRlU3RyaW5nIENQV0xfSWNvbkxpc3RfSXRlbTo6R2V0VGV4dCgpIGNvbnN0Cit7CisJcmV0dXJuIG1fcFRleHQtPkdldFRleHQoKTsKK30KKwordm9pZCBDUFdMX0ljb25MaXN0X0l0ZW06OlJlUG9zQ2hpbGRXbmQoKQoreworCUNQREZfUmVjdCByY0NsaWVudCA9IEdldENsaWVudFJlY3QoKTsKKworCXJjQ2xpZW50LmxlZnQgKz0gKFBXTF9JY29uTGlzdF9JVEVNX0lDT05fTEVGVE1BUkdJTiArIFBXTF9JY29uTGlzdF9JVEVNX1dJRFRIICsgUFdMX0ljb25MaXN0X0lURU1fSUNPTl9MRUZUTUFSR0lOKTsKKworCW1fcFRleHQtPk1vdmUocmNDbGllbnQsIFRSVUUsIEZBTFNFKTsKK30KKwordm9pZCBDUFdMX0ljb25MaXN0X0l0ZW06OlNldEljb25GaWxsQ29sb3IoY29uc3QgQ1BXTF9Db2xvciYgY29sb3IpCit7CisJbV9jckljb24gPSBjb2xvcjsKK30KKwordm9pZCBDUFdMX0ljb25MaXN0X0l0ZW06Ok9uRW5hYmxlZCgpCit7CisJaWYgKG1fYlNlbGVjdGVkKQorCQltX3BUZXh0LT5TZXRUZXh0Q29sb3IoUFdMX0RFRkFVTFRfV0hJVEVDT0xPUik7CisJZWxzZQorCQltX3BUZXh0LT5TZXRUZXh0Q29sb3IoUFdMX0RFRkFVTFRfQkxBQ0tDT0xPUik7CisKKwl0aGlzLT5JbnZhbGlkYXRlUmVjdCgpOworfQorCit2b2lkIENQV0xfSWNvbkxpc3RfSXRlbTo6T25EaXNhYmxlZCgpCit7CisJbV9wVGV4dC0+U2V0VGV4dENvbG9yKFBXTF9ERUZBVUxUX0hFQVZZR1JBWUNPTE9SKTsKKworCXRoaXMtPkludmFsaWRhdGVSZWN0KCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIENQV0xfSWNvbkxpc3RfQ29udGVudCAtLS0tLS0tLS0tLS0tLS0tLSAqLworCitDUFdMX0ljb25MaXN0X0NvbnRlbnQ6OkNQV0xfSWNvbkxpc3RfQ29udGVudChGWF9JTlQzMiBuTGlzdENvdW50KSA6IAorCW1fblNlbGVjdEluZGV4KC0xKSwKKwltX3BOb3RpZnkoTlVMTCksCisJbV9iRW5hYmxlTm90aWZ5KFRSVUUpLAorCW1fYk1vdXNlRG93bihGQUxTRSksCisJbV9uTGlzdENvdW50KG5MaXN0Q291bnQpCit7Cit9CisKK0NQV0xfSWNvbkxpc3RfQ29udGVudDo6fkNQV0xfSWNvbkxpc3RfQ29udGVudCgpCit7Cit9CisKK3ZvaWQgQ1BXTF9JY29uTGlzdF9Db250ZW50OjpDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCkKK3sKKwlmb3IgKEZYX0lOVDMyIGk9MDsgaTxtX25MaXN0Q291bnQ7IGkrKykKKwl7CisJCUNQV0xfSWNvbkxpc3RfSXRlbSogcE5ld0l0ZW0gPSBuZXcgQ1BXTF9JY29uTGlzdF9JdGVtKCk7CisKKwkJUFdMX0NSRUFURVBBUkFNIGljcCA9IGNwOworCQlpY3AucFBhcmVudFduZCA9IHRoaXM7CisJCWljcC5kd0ZsYWdzID0gUFdTX0NISUxEIHwgUFdTX1ZJU0lCTEUgfCBQV1NfTk9SRUZSRVNIQ0xJUDsKKwkJcE5ld0l0ZW0tPkNyZWF0ZShpY3ApOworCX0KKworCXRoaXMtPlNldEl0ZW1TcGFjZShQV0xfSWNvbkxpc3RfSVRFTV9TUEFDRSk7CisJdGhpcy0+UmVzZXRDb250ZW50KDApOworCisJaWYgKENQV0xfV25kICogcFBhcmVudCA9IHRoaXMtPkdldFBhcmVudFdpbmRvdygpKQorCXsKKwkJQ1BERl9SZWN0IHJjU2Nyb2xsID0gdGhpcy0+R2V0U2Nyb2xsQXJlYSgpOworCQl0aGlzLT5HZXRTY3JvbGxQb3MoKTsKKworCQlQV0xfU0NST0xMX0lORk8gc0luZm87CisJCXNJbmZvLmZDb250ZW50TWluID0gcmNTY3JvbGwuYm90dG9tOworCQlzSW5mby5mQ29udGVudE1heCA9IHJjU2Nyb2xsLnRvcDsKKwkJc0luZm8uZlBsYXRlV2lkdGggPSBHZXRDbGllbnRSZWN0KCkuSGVpZ2h0KCk7CisJCXNJbmZvLmZTbWFsbFN0ZXAgPSAxMy4wZjsKKwkJc0luZm8uZkJpZ1N0ZXAgPSBzSW5mby5mUGxhdGVXaWR0aDsKKworCQlwUGFyZW50LT5Pbk5vdGlmeSh0aGlzLCBQTk1fU0VUU0NST0xMSU5GTywgU0JUX1ZTQ1JPTEwsIChGWF9JTlRQVFIpJnNJbmZvKTsKKwl9Cit9CisKK0ZYX0JPT0wJQ1BXTF9JY29uTGlzdF9Db250ZW50OjpPbkxCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkKK3sKKwlTZXRGb2N1cygpOworCisJU2V0Q2FwdHVyZSgpOworCW1fYk1vdXNlRG93biA9IFRSVUU7CisKKwlGWF9JTlQzMiBuSXRlbUluZGV4ID0gRmluZEl0ZW1JbmRleChwb2ludCk7CisJU2V0U2VsZWN0KG5JdGVtSW5kZXgpOworCVNjcm9sbFRvSXRlbShuSXRlbUluZGV4KTsKKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MCUNQV0xfSWNvbkxpc3RfQ29udGVudDo6T25MQnV0dG9uVXAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KQoreworCW1fYk1vdXNlRG93biA9IEZBTFNFOworCVJlbGVhc2VDYXB0dXJlKCk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBDUFdMX0ljb25MaXN0X0NvbnRlbnQ6Ok9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkKK3sKKwlpZiAobV9iTW91c2VEb3duKQorCXsKKwkJRlhfSU5UMzIgbkl0ZW1JbmRleCA9IEZpbmRJdGVtSW5kZXgocG9pbnQpOworCQlTZXRTZWxlY3Qobkl0ZW1JbmRleCk7CisJCVNjcm9sbFRvSXRlbShuSXRlbUluZGV4KTsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTAlDUFdMX0ljb25MaXN0X0NvbnRlbnQ6Ok9uS2V5RG93bihGWF9XT1JEIG5DaGFyKQoreworCXN3aXRjaCAobkNoYXIpCisJeworCWNhc2UgRldMX1ZLRVlfVXA6CisJCWlmIChtX25TZWxlY3RJbmRleCA+IDApCisJCXsKKwkJCUZYX0lOVDMyIG5JdGVtSW5kZXggPSBtX25TZWxlY3RJbmRleCAtIDE7CisJCQlTZXRTZWxlY3Qobkl0ZW1JbmRleCk7CisJCQlTY3JvbGxUb0l0ZW0obkl0ZW1JbmRleCk7CisJCX0KKwkJcmV0dXJuIFRSVUU7CisJY2FzZSBGV0xfVktFWV9Eb3duOgorCQlpZiAobV9uU2VsZWN0SW5kZXggPCBtX25MaXN0Q291bnQtMSkKKwkJeworCQkJRlhfSU5UMzIgbkl0ZW1JbmRleCA9IG1fblNlbGVjdEluZGV4ICsgMTsKKwkJCVNldFNlbGVjdChuSXRlbUluZGV4KTsKKwkJCVNjcm9sbFRvSXRlbShuSXRlbUluZGV4KTsKKwkJfQorCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0lOVDMyIENQV0xfSWNvbkxpc3RfQ29udGVudDo6RmluZEl0ZW1JbmRleChjb25zdCBDUERGX1BvaW50JiBwb2ludCkKK3sKKwlGWF9JTlQzMiBuSW5kZXggPSAwOworCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fYUNoaWxkcmVuLkdldFNpemUoKTsgaTxzejsgaSsrKQorCXsKKwkJaWYgKENQV0xfV25kICogcENoaWxkID0gbV9hQ2hpbGRyZW4uR2V0QXQoaSkpCisJCXsKKwkJCUNQREZfUmVjdCByY1duZCA9IHBDaGlsZC0+Q2hpbGRUb1BhcmVudChwQ2hpbGQtPkdldFdpbmRvd1JlY3QoKSk7CisKKwkJCWlmIChwb2ludC55IDwgcmNXbmQudG9wKQorCQkJeworCQkJCW5JbmRleCA9IGk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gbkluZGV4OworfQorCit2b2lkIENQV0xfSWNvbkxpc3RfQ29udGVudDo6U2Nyb2xsVG9JdGVtKEZYX0lOVDMyIG5JdGVtSW5kZXgpCit7CisJQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOworCisJaWYgKENQV0xfSWNvbkxpc3RfSXRlbSogcEl0ZW0gPSBHZXRMaXN0SXRlbShuSXRlbUluZGV4KSkKKwl7CisJCUNQREZfUmVjdCByY09yaWdpbiA9IHBJdGVtLT5HZXRXaW5kb3dSZWN0KCk7CisJCUNQREZfUmVjdCByY1duZCA9IHBJdGVtLT5DaGlsZFRvUGFyZW50KHJjT3JpZ2luKTsKKworCQlpZiAoIShyY1duZC5ib3R0b20gPiByY0NsaWVudC5ib3R0b20gJiYgcmNXbmQudG9wIDwgcmNDbGllbnQudG9wKSkKKwkJeworCQkJQ1BERl9Qb2ludCBwdFNjcm9sbCA9IEdldFNjcm9sbFBvcygpOworCisJCQlpZiAocmNXbmQudG9wID4gcmNDbGllbnQudG9wKQorCQkJeworCQkJCXB0U2Nyb2xsLnkgPSByY09yaWdpbi50b3A7CisJCQl9CisJCQllbHNlIGlmIChyY1duZC5ib3R0b20gPCByY0NsaWVudC5ib3R0b20pCisJCQl7CisJCQkJcHRTY3JvbGwueSA9IHJjT3JpZ2luLmJvdHRvbSArIHJjQ2xpZW50LkhlaWdodCgpOwkJCQkJCisJCQl9CisKKwkJCXRoaXMtPlNldFNjcm9sbFBvcyhwdFNjcm9sbCk7CisJCQl0aGlzLT5SZXNldEZhY2UoKTsKKwkJCXRoaXMtPkludmFsaWRhdGVSZWN0KCk7CisJCQlpZiAoQ1BXTF9XbmQqIHBQYXJlbnQgPSB0aGlzLT5HZXRQYXJlbnRXaW5kb3coKSkKKwkJCXsKKwkJCQlwUGFyZW50LT5Pbk5vdGlmeSh0aGlzLCBQTk1fU0VUU0NST0xMUE9TLCBTQlRfVlNDUk9MTCwgKEZYX0lOVFBUUikmcHRTY3JvbGwueSk7CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQgQ1BXTF9JY29uTGlzdF9Db250ZW50OjpTZXRTZWxlY3QoRlhfSU5UMzIgbkluZGV4KQoreworCWlmIChtX25TZWxlY3RJbmRleCAhPSBuSW5kZXgpCisJeworCQlTZWxlY3RJdGVtKG1fblNlbGVjdEluZGV4LCBGQUxTRSk7CisJCVNlbGVjdEl0ZW0obkluZGV4LCBUUlVFKTsKKwkJbV9uU2VsZWN0SW5kZXggPSBuSW5kZXg7CisKKwkJaWYgKElQV0xfSWNvbkxpc3RfTm90aWZ5KiBwTm90aWZ5ID0gR2V0Tm90aWZ5KCkpCisJCQlwTm90aWZ5LT5Pbk5vdGVMaXN0U2VsQ2hhbmdlZChuSW5kZXgpOworCX0KK30KKworRlhfSU5UMzIgQ1BXTF9JY29uTGlzdF9Db250ZW50OjpHZXRTZWxlY3QoKSBjb25zdAoreworCXJldHVybiBtX25TZWxlY3RJbmRleDsKK30KKworSVBXTF9JY29uTGlzdF9Ob3RpZnkqIENQV0xfSWNvbkxpc3RfQ29udGVudDo6R2V0Tm90aWZ5KCkgY29uc3QKK3sKKwlpZiAobV9iRW5hYmxlTm90aWZ5KQorCQlyZXR1cm4gbV9wTm90aWZ5OworCXJldHVybiBOVUxMOworfQorCit2b2lkIENQV0xfSWNvbkxpc3RfQ29udGVudDo6U2V0Tm90aWZ5KElQV0xfSWNvbkxpc3RfTm90aWZ5KiBwTm90aWZ5KQoreworCW1fcE5vdGlmeSA9IHBOb3RpZnk7Cit9CisKK3ZvaWQgQ1BXTF9JY29uTGlzdF9Db250ZW50OjpFbmFibGVOb3RpZnkoRlhfQk9PTCBiTm90aWZ5KQoreworCW1fYkVuYWJsZU5vdGlmeSA9IGJOb3RpZnk7Cit9CisKK3ZvaWQgQ1BXTF9JY29uTGlzdF9Db250ZW50OjpTZWxlY3RJdGVtKEZYX0lOVDMyIG5JdGVtSW5kZXgsIEZYX0JPT0wgYlNlbGVjdCkKK3sKKwlpZiAoQ1BXTF9JY29uTGlzdF9JdGVtKiBwSXRlbSA9IEdldExpc3RJdGVtKG5JdGVtSW5kZXgpKQorCXsKKwkJcEl0ZW0tPlNldFNlbGVjdChiU2VsZWN0KTsKKwkJcEl0ZW0tPkludmFsaWRhdGVSZWN0KCk7CQkKKwl9Cit9CisKK0NQV0xfSWNvbkxpc3RfSXRlbSogQ1BXTF9JY29uTGlzdF9Db250ZW50OjpHZXRMaXN0SXRlbShGWF9JTlQzMiBuSXRlbUluZGV4KSBjb25zdAoreworCWlmIChuSXRlbUluZGV4ID49IDAgJiYgbkl0ZW1JbmRleDxtX2FDaGlsZHJlbi5HZXRTaXplKCkpCisJeworCQlpZiAoQ1BXTF9XbmQgKiBwQ2hpbGQgPSBtX2FDaGlsZHJlbi5HZXRBdChuSXRlbUluZGV4KSkKKwkJeworCQkJaWYgKHBDaGlsZC0+R2V0Q2xhc3NOYW1lKCkgPT0gIkNQV0xfSWNvbkxpc3RfSXRlbSIpCisJCQl7CisJCQkJcmV0dXJuIChDUFdMX0ljb25MaXN0X0l0ZW0qKXBDaGlsZDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQorCit2b2lkIENQV0xfSWNvbkxpc3RfQ29udGVudDo6U2V0TGlzdERhdGEoRlhfSU5UMzIgbkl0ZW1JbmRleCwgdm9pZCogcERhdGEpCit7CisJaWYgKENQV0xfSWNvbkxpc3RfSXRlbSogcEl0ZW0gPSBHZXRMaXN0SXRlbShuSXRlbUluZGV4KSkKKwkJcEl0ZW0tPlNldERhdGEocERhdGEpOworfQorCit2b2lkIENQV0xfSWNvbkxpc3RfQ29udGVudDo6U2V0TGlzdEljb24oRlhfSU5UMzIgbkl0ZW1JbmRleCwgRlhfSU5UMzIgbkljb25JbmRleCkKK3sKKwlpZiAoQ1BXTF9JY29uTGlzdF9JdGVtKiBwSXRlbSA9IEdldExpc3RJdGVtKG5JdGVtSW5kZXgpKQorCQlwSXRlbS0+U2V0SWNvbihuSWNvbkluZGV4KTsKK30KKwordm9pZCBDUFdMX0ljb25MaXN0X0NvbnRlbnQ6OlNldExpc3RTdHJpbmcoRlhfSU5UMzIgbkl0ZW1JbmRleCwgY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cikKK3sKKwlpZiAoQ1BXTF9JY29uTGlzdF9JdGVtKiBwSXRlbSA9IEdldExpc3RJdGVtKG5JdGVtSW5kZXgpKQorCQlwSXRlbS0+U2V0VGV4dChzdHIpOworfQorCitDRlhfV2lkZVN0cmluZyBDUFdMX0ljb25MaXN0X0NvbnRlbnQ6OkdldExpc3RTdHJpbmcoRlhfSU5UMzIgbkl0ZW1JbmRleCkgY29uc3QKK3sKKwlpZiAoQ1BXTF9JY29uTGlzdF9JdGVtKiBwSXRlbSA9IEdldExpc3RJdGVtKG5JdGVtSW5kZXgpKQorCQlyZXR1cm4gcEl0ZW0tPkdldFRleHQoKTsKKworCXJldHVybiBMIiI7Cit9CisKK3ZvaWQgQ1BXTF9JY29uTGlzdF9Db250ZW50OjpTZXRJY29uRmlsbENvbG9yKGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yKQoreworCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fYUNoaWxkcmVuLkdldFNpemUoKTsgaTxzejsgaSsrKQorCXsKKwkJaWYgKENQV0xfV25kICogcENoaWxkID0gbV9hQ2hpbGRyZW4uR2V0QXQoaSkpCisJCXsKKwkJCWlmIChwQ2hpbGQtPkdldENsYXNzTmFtZSgpID09ICJDUFdMX0ljb25MaXN0X0l0ZW0iKQorCQkJeworCQkJCUNQV0xfSWNvbkxpc3RfSXRlbSogcEl0ZW0gPSAoQ1BXTF9JY29uTGlzdF9JdGVtKilwQ2hpbGQ7CisJCQkJcEl0ZW0tPlNldEljb25GaWxsQ29sb3IoY29sb3IpOworCQkJCXBJdGVtLT5JbnZhbGlkYXRlUmVjdCgpOworCQkJfQorCQl9CisJfQorCit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfSWNvbkxpc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0NQV0xfSWNvbkxpc3Q6OkNQV0xfSWNvbkxpc3QoRlhfSU5UMzIgbkxpc3RDb3VudCkgOiAKKwltX3BMaXN0Q29udGVudChOVUxMKSwKKwltX25MaXN0Q291bnQobkxpc3RDb3VudCkKK3sKK30KKworQ1BXTF9JY29uTGlzdDo6fkNQV0xfSWNvbkxpc3QoKQoreworfQorCit2b2lkIENQV0xfSWNvbkxpc3Q6OlJlUG9zQ2hpbGRXbmQoKQoreworCUNQV0xfV25kOjpSZVBvc0NoaWxkV25kKCk7CisKKwlpZiAobV9wTGlzdENvbnRlbnQpCisJCW1fcExpc3RDb250ZW50LT5Nb3ZlKEdldENsaWVudFJlY3QoKSwgVFJVRSwgRkFMU0UpOworfQorCit2b2lkIENQV0xfSWNvbkxpc3Q6OkNyZWF0ZUNoaWxkV25kKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKQoreworCW1fcExpc3RDb250ZW50ID0gbmV3IENQV0xfSWNvbkxpc3RfQ29udGVudChtX25MaXN0Q291bnQpOworCisJUFdMX0NSRUFURVBBUkFNIGNjcCA9IGNwOworCWNjcC5wUGFyZW50V25kID0gdGhpczsKKwljY3AuZHdGbGFncyA9IFBXU19DSElMRCB8IFBXU19WSVNJQkxFOworCW1fcExpc3RDb250ZW50LT5DcmVhdGUoY2NwKTsKK30KKwordm9pZCBDUFdMX0ljb25MaXN0OjpPbkNyZWF0ZWQoKQoreworCWlmIChDUFdMX1Njcm9sbEJhciogcFNjcm9sbEJhciA9IHRoaXMtPkdldFZTY3JvbGxCYXIoKSkKKwl7CisJCXBTY3JvbGxCYXItPlJlbW92ZUZsYWcoUFdTX0FVVE9UUkFOU1BBUkVOVCk7CisJCXBTY3JvbGxCYXItPlNldFRyYW5zcGFyZW5jeSgyNTUpOworCQlwU2Nyb2xsQmFyLT5TZXROb3RpZnlGb3JldmVyKFRSVUUpOworCX0KK30KKwordm9pZCBDUFdMX0ljb25MaXN0OjpPbk5vdGlmeShDUFdMX1duZCogcFduZCwgRlhfRFdPUkQgbXNnLCBGWF9JTlRQVFIgd1BhcmFtLCBGWF9JTlRQVFIgbFBhcmFtKQoreworCUNQV0xfV25kOjpPbk5vdGlmeShwV25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKKworCWlmICh3UGFyYW0gPT0gU0JUX1ZTQ1JPTEwpCisJewkJCisJCXN3aXRjaCAobXNnKQorCQl7CisJCWNhc2UgUE5NX1NFVFNDUk9MTElORk86CisJCQlpZiAoUFdMX1NDUk9MTF9JTkZPKiBwSW5mbyA9IChQV0xfU0NST0xMX0lORk8qKWxQYXJhbSkKKwkJCXsKKwkJCQlpZiAoQ1BXTF9TY3JvbGxCYXIqIHBTY3JvbGxCYXIgPSB0aGlzLT5HZXRWU2Nyb2xsQmFyKCkpCisJCQkJeworCQkJCQlpZiAocEluZm8tPmZDb250ZW50TWF4IC0gcEluZm8tPmZDb250ZW50TWluID4gcEluZm8tPmZQbGF0ZVdpZHRoKQorCQkJCQl7CisJCQkJCQlpZiAoIXBTY3JvbGxCYXItPklzVmlzaWJsZSgpKQorCQkJCQkJeworCQkJCQkJCXBTY3JvbGxCYXItPlNldFZpc2libGUoVFJVRSk7CisJCQkJCQkJUmVQb3NDaGlsZFduZCgpOwkJCQorCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJaWYgKHBTY3JvbGxCYXItPklzVmlzaWJsZSgpKQorCQkJCQkJeworCQkJCQkJCXBTY3JvbGxCYXItPlNldFZpc2libGUoRkFMU0UpOworCQkJCQkJCVJlUG9zQ2hpbGRXbmQoKTsKKwkJCQkJCX0KKworCQkJCQkJaWYgKG1fcExpc3RDb250ZW50KQorCQkJCQkJCW1fcExpc3RDb250ZW50LT5TZXRTY3JvbGxQb3MoQ1BERl9Qb2ludCgwLjBmLDAuMGYpKTsKKwkJCQkJfQorCQkJCQkKKwkJCQkJcFNjcm9sbEJhci0+T25Ob3RpZnkocFduZCxQTk1fU0VUU0NST0xMSU5GTyx3UGFyYW0sbFBhcmFtKTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm47CisJCWNhc2UgUE5NX1NDUk9MTFdJTkRPVzoKKwkJCWlmIChtX3BMaXN0Q29udGVudCkKKwkJCXsKKwkJCQltX3BMaXN0Q29udGVudC0+U2V0U2Nyb2xsUG9zKENQREZfUG9pbnQoMC4wZiwgKihGWF9GTE9BVCopbFBhcmFtKSk7CisJCQkJbV9wTGlzdENvbnRlbnQtPlJlc2V0RmFjZSgpOworCQkJCW1fcExpc3RDb250ZW50LT5JbnZhbGlkYXRlUmVjdChOVUxMKTsKKwkJCX0KKwkJCXJldHVybjsKKwkJY2FzZSBQTk1fU0VUU0NST0xMUE9TOgorCQkJaWYgKENQV0xfU2Nyb2xsQmFyKiBwU2Nyb2xsQmFyID0gdGhpcy0+R2V0VlNjcm9sbEJhcigpKQorCQkJCXBTY3JvbGxCYXItPk9uTm90aWZ5KHBXbmQsUE5NX1NFVFNDUk9MTFBPUyx3UGFyYW0sbFBhcmFtKTsKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKwordm9pZCBDUFdMX0ljb25MaXN0OjpTZXRTZWxlY3QoRlhfSU5UMzIgbkluZGV4KQoreworCW1fcExpc3RDb250ZW50LT5TZXRTZWxlY3QobkluZGV4KTsKK30KKwordm9pZCBDUFdMX0ljb25MaXN0OjpTZXRUb3BJdGVtKEZYX0lOVDMyIG5JbmRleCkKK3sKKwltX3BMaXN0Q29udGVudC0+U2Nyb2xsVG9JdGVtKG5JbmRleCk7Cit9CisKK0ZYX0lOVDMyIENQV0xfSWNvbkxpc3Q6OkdldFNlbGVjdCgpIGNvbnN0Cit7CisJcmV0dXJuIG1fcExpc3RDb250ZW50LT5HZXRTZWxlY3QoKTsKK30KKwordm9pZCBDUFdMX0ljb25MaXN0OjpTZXROb3RpZnkoSVBXTF9JY29uTGlzdF9Ob3RpZnkqIHBOb3RpZnkpCit7CisJbV9wTGlzdENvbnRlbnQtPlNldE5vdGlmeShwTm90aWZ5KTsKK30KKwordm9pZCBDUFdMX0ljb25MaXN0OjpFbmFibGVOb3RpZnkoRlhfQk9PTCBiTm90aWZ5KQoreworCW1fcExpc3RDb250ZW50LT5FbmFibGVOb3RpZnkoYk5vdGlmeSk7Cit9CisKK3ZvaWQgQ1BXTF9JY29uTGlzdDo6U2V0TGlzdERhdGEoRlhfSU5UMzIgbkl0ZW1JbmRleCwgdm9pZCogcERhdGEpCit7CisJbV9wTGlzdENvbnRlbnQtPlNldExpc3REYXRhKG5JdGVtSW5kZXgsIHBEYXRhKTsKK30KKwordm9pZCBDUFdMX0ljb25MaXN0OjpTZXRMaXN0SWNvbihGWF9JTlQzMiBuSXRlbUluZGV4LCBGWF9JTlQzMiBuSWNvbkluZGV4KQoreworCW1fcExpc3RDb250ZW50LT5TZXRMaXN0SWNvbihuSXRlbUluZGV4LCBuSWNvbkluZGV4KTsKK30KKwordm9pZCBDUFdMX0ljb25MaXN0OjpTZXRMaXN0U3RyaW5nKEZYX0lOVDMyIG5JdGVtSW5kZXgsIGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHIpCit7CisJbV9wTGlzdENvbnRlbnQtPlNldExpc3RTdHJpbmcobkl0ZW1JbmRleCwgc3RyKTsKK30KKworQ0ZYX1dpZGVTdHJpbmcgQ1BXTF9JY29uTGlzdDo6R2V0TGlzdFN0cmluZyhGWF9JTlQzMiBuSXRlbUluZGV4KSBjb25zdAoreworCXJldHVybiBtX3BMaXN0Q29udGVudC0+R2V0TGlzdFN0cmluZyhuSXRlbUluZGV4KTsKK30KKwordm9pZCBDUFdMX0ljb25MaXN0OjpTZXRJY29uRmlsbENvbG9yKGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yKQoreworCW1fcExpc3RDb250ZW50LT5TZXRJY29uRmlsbENvbG9yKGNvbG9yKTsKK30KKworRlhfQk9PTAlDUFdMX0ljb25MaXN0OjpPbk1vdXNlV2hlZWwoc2hvcnQgekRlbHRhLCBjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpCit7CisJQ1BERl9Qb2ludCBwdFNjcm9sbCA9IG1fcExpc3RDb250ZW50LT5HZXRTY3JvbGxQb3MoKTsKKwlDUERGX1JlY3QgcmNTY3JvbGwgPSBtX3BMaXN0Q29udGVudC0+R2V0U2Nyb2xsQXJlYSgpOworCUNQREZfUmVjdCByY0NvbnRlbnRzID0gbV9wTGlzdENvbnRlbnQtPkdldENsaWVudFJlY3QoKTsKKworCWlmIChyY1Njcm9sbC50b3AgLSByY1Njcm9sbC5ib3R0b20gPiByY0NvbnRlbnRzLkhlaWdodCgpKQorCXsKKwkJQ1BERl9Qb2ludCBwdE5ldyA9IHB0U2Nyb2xsOworCisJCWlmICh6RGVsdGEgPiAwKQorCQkJcHROZXcueSArPSAzMDsKKwkJZWxzZQorCQkJcHROZXcueSAtPSAzMDsKKworCQlpZiAocHROZXcueSA+IHJjU2Nyb2xsLnRvcCkKKwkJCXB0TmV3LnkgPSByY1Njcm9sbC50b3A7CisJCWlmIChwdE5ldy55IDwgcmNTY3JvbGwuYm90dG9tICsgcmNDb250ZW50cy5IZWlnaHQoKSkKKwkJCXB0TmV3LnkgPSByY1Njcm9sbC5ib3R0b20gKyByY0NvbnRlbnRzLkhlaWdodCgpOworCQlpZiAocHROZXcueSA8IHJjU2Nyb2xsLmJvdHRvbSkKKwkJCXB0TmV3LnkgPSByY1Njcm9sbC5ib3R0b207CisKKwkJaWYgKHB0TmV3LnkgIT0gcHRTY3JvbGwueSkKKwkJeworCQkJbV9wTGlzdENvbnRlbnQtPlNldFNjcm9sbFBvcyhwdE5ldyk7CisJCQltX3BMaXN0Q29udGVudC0+UmVzZXRGYWNlKCk7CisJCQltX3BMaXN0Q29udGVudC0+SW52YWxpZGF0ZVJlY3QoTlVMTCk7CisJCQkKKwkJCWlmIChDUFdMX1Njcm9sbEJhciogcFNjcm9sbEJhciA9IHRoaXMtPkdldFZTY3JvbGxCYXIoKSkKKwkJCQlwU2Nyb2xsQmFyLT5Pbk5vdGlmeSh0aGlzLCBQTk1fU0VUU0NST0xMUE9TLCBTQlRfVlNDUk9MTCwgKEZYX0lOVFBUUikmcHROZXcueSk7CisKKwkJCXJldHVybiBUUlVFOworCQl9CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX0xhYmVsLmNwcCBiL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfTGFiZWwuY3BwCmluZGV4IGUxYjg1MjIuLjE4NTgwZjMgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfTGFiZWwuY3BwCisrKyBiL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfTGFiZWwuY3BwCkBAIC0xLDE4NyArMSwxODcgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QREZXaW5kb3cuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1duZC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfTGFiZWwuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1V0aWxzLmgiDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX0xhYmVsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUNQV0xfTGFiZWw6OkNQV0xfTGFiZWwoKSA6IG1fcEVkaXQoTlVMTCkNCi17DQotCW1fcEVkaXQgPSBJRlhfRWRpdDo6TmV3RWRpdCgpOw0KLQ0KLQlBU1NFUlQobV9wRWRpdCAhPSBOVUxMKTsNCi19DQotDQotQ1BXTF9MYWJlbDo6fkNQV0xfTGFiZWwoKQ0KLXsNCi0JSUZYX0VkaXQ6OkRlbEVkaXQobV9wRWRpdCk7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfTGFiZWw6OkdldENsYXNzTmFtZSgpIGNvbnN0DQotew0KLQlyZXR1cm4gIkNQV0xfTGFiZWwiOw0KLX0NCi0NCi12b2lkIENQV0xfTGFiZWw6Ok9uQ3JlYXRlZCgpDQotew0KLQlTZXRQYXJhbUJ5RmxhZygpOw0KLQlTZXRGb250U2l6ZSh0aGlzLT5HZXRDcmVhdGlvblBhcmFtKCkuZkZvbnRTaXplKTsNCi0NCi0JbV9wRWRpdC0+U2V0Rm9udE1hcCh0aGlzLT5HZXRGb250TWFwKCkpOw0KLQltX3BFZGl0LT5Jbml0aWFsaXplKCk7DQotDQotCWlmIChIYXNGbGFnKFBFU19URVhUT1ZFUkZMT1cpKQ0KLQl7DQotCQlTZXRDbGlwUmVjdChDUERGX1JlY3QoMC4wZiwwLjBmLDAuMGYsMC4wZikpOw0KLQkJbV9wRWRpdC0+U2V0VGV4dE92ZXJmbG93KFRSVUUpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9MYWJlbDo6U2V0VGV4dChGWF9MUENXU1RSIGNzVGV4dCkNCi17DQotCW1fcEVkaXQtPlNldFRleHQoY3NUZXh0KTsNCi19DQotDQotdm9pZCBDUFdMX0xhYmVsOjpSZVBvc0NoaWxkV25kKCkNCi17DQotCW1fcEVkaXQtPlNldFBsYXRlUmVjdChHZXRDbGllbnRSZWN0KCkpOw0KLX0NCi0NCi12b2lkIENQV0xfTGFiZWw6OlNldEZvbnRTaXplKEZYX0ZMT0FUIGZGb250U2l6ZSkNCi17DQotCW1fcEVkaXQtPlNldEZvbnRTaXplKGZGb250U2l6ZSk7DQotfQ0KLQ0KLUZYX0ZMT0FUIENQV0xfTGFiZWw6OkdldEZvbnRTaXplKCkgY29uc3QNCi17DQotCXJldHVybiBtX3BFZGl0LT5HZXRGb250U2l6ZSgpOw0KLX0NCi0NCi12b2lkIENQV0xfTGFiZWw6OlNldFBhcmFtQnlGbGFnKCkNCi17CQ0KLQlpZiAoSGFzRmxhZyhQRVNfTEVGVCkpDQotCXsNCi0JCW1fcEVkaXQtPlNldEFsaWdubWVudEgoMCk7DQotCX0NCi0JZWxzZSBpZiAoSGFzRmxhZyhQRVNfTUlERExFKSkNCi0Jew0KLQkJbV9wRWRpdC0+U2V0QWxpZ25tZW50SCgxKTsNCi0JfQ0KLQllbHNlIGlmIChIYXNGbGFnKFBFU19SSUdIVCkpDQotCXsNCi0JCW1fcEVkaXQtPlNldEFsaWdubWVudEgoMik7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQltX3BFZGl0LT5TZXRBbGlnbm1lbnRIKDApOw0KLQl9DQotDQotCWlmIChIYXNGbGFnKFBFU19UT1ApKQ0KLQl7DQotCQltX3BFZGl0LT5TZXRBbGlnbm1lbnRWKDApOw0KLQl9DQotCWVsc2UgaWYgKEhhc0ZsYWcoUEVTX0NFTlRFUikpDQotCXsNCi0JCW1fcEVkaXQtPlNldEFsaWdubWVudFYoMSk7DQotCX0NCi0JZWxzZSBpZiAoSGFzRmxhZyhQRVNfQk9UVE9NKSkNCi0Jew0KLQkJbV9wRWRpdC0+U2V0QWxpZ25tZW50VigyKTsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCW1fcEVkaXQtPlNldEFsaWdubWVudFYoMCk7DQotCX0NCi0NCi0JaWYgKEhhc0ZsYWcoUEVTX1BBU1NXT1JEKSkNCi0Jew0KLQkJbV9wRWRpdC0+U2V0UGFzc3dvcmRDaGFyKCcqJyk7DQotCX0NCi0NCi0JbV9wRWRpdC0+U2V0TXVsdGlMaW5lKEhhc0ZsYWcoUEVTX01VTFRJTElORSkpOw0KLQltX3BFZGl0LT5TZXRBdXRvUmV0dXJuKEhhc0ZsYWcoUEVTX0FVVE9SRVRVUk4pKTsNCi0JbV9wRWRpdC0+U2V0QXV0b0ZvbnRTaXplKEhhc0ZsYWcoUFdTX0FVVE9GT05UU0laRSkpOw0KLQltX3BFZGl0LT5TZXRBdXRvU2Nyb2xsKEhhc0ZsYWcoUEVTX0FVVE9TQ1JPTEwpKTsNCi19DQotDQotdm9pZCBDUFdMX0xhYmVsOjpEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSkNCi17DQotCUNQV0xfV25kOjpEcmF3VGhpc0FwcGVhcmFuY2UocERldmljZSxwVXNlcjJEZXZpY2UpOw0KLQ0KLQlHZXRDbGllbnRSZWN0KCk7DQotDQotCUNQREZfUmVjdCByY0NsaXA7DQotCUNQVlRfV29yZFJhbmdlIHdyUmFuZ2UgPSBtX3BFZGl0LT5HZXRWaXNpYmxlV29yZFJhbmdlKCk7DQotCUNQVlRfV29yZFJhbmdlKiBwUmFuZ2UgPSBOVUxMOw0KLQ0KLQlpZiAoIUhhc0ZsYWcoUEVTX1RFWFRPVkVSRkxPVykpDQotCXsNCi0JCXJjQ2xpcCA9IEdldENsaWVudFJlY3QoKTsNCi0JCXBSYW5nZSA9ICZ3clJhbmdlOw0KLQl9DQotSUZYX1N5c3RlbUhhbmRsZXIqIHBTeXNIYW5kbGVyID0gR2V0U3lzdGVtSGFuZGxlcigpOw0KLQlJRlhfRWRpdDo6RHJhd0VkaXQocERldmljZSwgcFVzZXIyRGV2aWNlLCBtX3BFZGl0LA0KLQkJQ1BXTF9VdGlsczo6UFdMQ29sb3JUb0ZYQ29sb3IoR2V0VGV4dENvbG9yKCksIHRoaXMtPkdldFRyYW5zcGFyZW5jeSgpKSwNCi0JCUNQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKEdldFRleHRTdHJva2VDb2xvcigpLCB0aGlzLT5HZXRUcmFuc3BhcmVuY3koKSksDQotCQlyY0NsaXAsIENQREZfUG9pbnQoMC4wZiwwLjBmKSwgcFJhbmdlLHBTeXNIYW5kbGVyLCBOVUxMKTsNCi19DQotDQotdm9pZCBDUFdMX0xhYmVsOjpTZXRIb3J6U2NhbGUoRlhfSU5UMzIgbkhvcnpTY2FsZSkNCi17DQotCW1fcEVkaXQtPlNldEhvcnpTY2FsZShuSG9yelNjYWxlKTsNCi19DQotDQotdm9pZCBDUFdMX0xhYmVsOjpTZXRDaGFyU3BhY2UoRlhfRkxPQVQgZkNoYXJTcGFjZSkNCi17DQotCW1fcEVkaXQtPlNldENoYXJTcGFjZShmQ2hhclNwYWNlKTsNCi19DQotDQotQ1BERl9SZWN0IENQV0xfTGFiZWw6OkdldENvbnRlbnRSZWN0KCkgY29uc3QNCi17DQotCXJldHVybiBtX3BFZGl0LT5HZXRDb250ZW50UmVjdCgpOw0KLX0NCi0NCi12b2lkIENQV0xfTGFiZWw6OkdldFRoaXNBcHBlYXJhbmNlU3RyZWFtKENGWF9CeXRlVGV4dEJ1ZiAmIHNBcHBTdHJlYW0pDQotew0KLQlDUFdMX1duZDo6R2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oc0FwcFN0cmVhbSk7DQotDQotCXNBcHBTdHJlYW0gPDwgR2V0VGV4dEFwcGVhcmFuY2VTdHJlYW0oQ1BERl9Qb2ludCgwLjBmLCAwLjBmKSk7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfTGFiZWw6OkdldFRleHRBcHBlYXJhbmNlU3RyZWFtKGNvbnN0IENQREZfUG9pbnQgJiBwdE9mZnNldCkgY29uc3QNCi17DQotCUNGWF9CeXRlVGV4dEJ1ZiBzUmV0Ow0KLQlDRlhfQnl0ZVN0cmluZyBzRWRpdCA9IENQV0xfVXRpbHM6OkdldEVkaXRBcHBTdHJlYW0obV9wRWRpdCxwdE9mZnNldCk7DQotCQ0KLQlpZiAoc0VkaXQuR2V0TGVuZ3RoKCkgPiAwKQ0KLQl7DQotCQlzUmV0IDw8ICJCVFxuIiA8PCBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShHZXRUZXh0Q29sb3IoKSkgPDwgc0VkaXQgPDwgIkVUXG4iOw0KLQl9DQotDQotCXJldHVybiBzUmV0LkdldEJ5dGVTdHJpbmcoKTsNCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgQ1BXTF9MYWJlbDo6R2V0VGV4dCgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9wRWRpdC0+R2V0VGV4dCgpOw0KLX0NCi0NCi12b2lkIENQV0xfTGFiZWw6OlNldExpbWl0Q2hhcihGWF9JTlQzMiBuTGltaXRDaGFyKQ0KLXsNCi0JbV9wRWRpdC0+U2V0TGltaXRDaGFyKG5MaW1pdENoYXIpOw0KLX0NCi0NCi1GWF9JTlQzMiBDUFdMX0xhYmVsOjpHZXRUb3RhbFdvcmRzKCkNCi17DQotCWlmIChtX3BFZGl0KQ0KLQkJcmV0dXJuIG1fcEVkaXQtPkdldFRvdGFsV29yZHMoKTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QREZXaW5kb3cuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfV25kLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0xhYmVsLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1V0aWxzLmgiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9MYWJlbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ1BXTF9MYWJlbDo6Q1BXTF9MYWJlbCgpIDogbV9wRWRpdChOVUxMKQoreworCW1fcEVkaXQgPSBJRlhfRWRpdDo6TmV3RWRpdCgpOworCisJQVNTRVJUKG1fcEVkaXQgIT0gTlVMTCk7Cit9CisKK0NQV0xfTGFiZWw6On5DUFdMX0xhYmVsKCkKK3sKKwlJRlhfRWRpdDo6RGVsRWRpdChtX3BFZGl0KTsKK30KKworQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9MYWJlbDo6R2V0Q2xhc3NOYW1lKCkgY29uc3QKK3sKKwlyZXR1cm4gIkNQV0xfTGFiZWwiOworfQorCit2b2lkIENQV0xfTGFiZWw6Ok9uQ3JlYXRlZCgpCit7CisJU2V0UGFyYW1CeUZsYWcoKTsKKwlTZXRGb250U2l6ZSh0aGlzLT5HZXRDcmVhdGlvblBhcmFtKCkuZkZvbnRTaXplKTsKKworCW1fcEVkaXQtPlNldEZvbnRNYXAodGhpcy0+R2V0Rm9udE1hcCgpKTsKKwltX3BFZGl0LT5Jbml0aWFsaXplKCk7CisKKwlpZiAoSGFzRmxhZyhQRVNfVEVYVE9WRVJGTE9XKSkKKwl7CisJCVNldENsaXBSZWN0KENQREZfUmVjdCgwLjBmLDAuMGYsMC4wZiwwLjBmKSk7CisJCW1fcEVkaXQtPlNldFRleHRPdmVyZmxvdyhUUlVFKTsKKwl9Cit9CisKK3ZvaWQgQ1BXTF9MYWJlbDo6U2V0VGV4dChGWF9MUENXU1RSIGNzVGV4dCkKK3sKKwltX3BFZGl0LT5TZXRUZXh0KGNzVGV4dCk7Cit9CisKK3ZvaWQgQ1BXTF9MYWJlbDo6UmVQb3NDaGlsZFduZCgpCit7CisJbV9wRWRpdC0+U2V0UGxhdGVSZWN0KEdldENsaWVudFJlY3QoKSk7Cit9CisKK3ZvaWQgQ1BXTF9MYWJlbDo6U2V0Rm9udFNpemUoRlhfRkxPQVQgZkZvbnRTaXplKQoreworCW1fcEVkaXQtPlNldEZvbnRTaXplKGZGb250U2l6ZSk7Cit9CisKK0ZYX0ZMT0FUIENQV0xfTGFiZWw6OkdldEZvbnRTaXplKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9wRWRpdC0+R2V0Rm9udFNpemUoKTsKK30KKwordm9pZCBDUFdMX0xhYmVsOjpTZXRQYXJhbUJ5RmxhZygpCit7CQorCWlmIChIYXNGbGFnKFBFU19MRUZUKSkKKwl7CisJCW1fcEVkaXQtPlNldEFsaWdubWVudEgoMCk7CisJfQorCWVsc2UgaWYgKEhhc0ZsYWcoUEVTX01JRERMRSkpCisJeworCQltX3BFZGl0LT5TZXRBbGlnbm1lbnRIKDEpOworCX0KKwllbHNlIGlmIChIYXNGbGFnKFBFU19SSUdIVCkpCisJeworCQltX3BFZGl0LT5TZXRBbGlnbm1lbnRIKDIpOworCX0KKwllbHNlCisJeworCQltX3BFZGl0LT5TZXRBbGlnbm1lbnRIKDApOworCX0KKworCWlmIChIYXNGbGFnKFBFU19UT1ApKQorCXsKKwkJbV9wRWRpdC0+U2V0QWxpZ25tZW50VigwKTsKKwl9CisJZWxzZSBpZiAoSGFzRmxhZyhQRVNfQ0VOVEVSKSkKKwl7CisJCW1fcEVkaXQtPlNldEFsaWdubWVudFYoMSk7CisJfQorCWVsc2UgaWYgKEhhc0ZsYWcoUEVTX0JPVFRPTSkpCisJeworCQltX3BFZGl0LT5TZXRBbGlnbm1lbnRWKDIpOworCX0KKwllbHNlCisJeworCQltX3BFZGl0LT5TZXRBbGlnbm1lbnRWKDApOworCX0KKworCWlmIChIYXNGbGFnKFBFU19QQVNTV09SRCkpCisJeworCQltX3BFZGl0LT5TZXRQYXNzd29yZENoYXIoJyonKTsKKwl9CisKKwltX3BFZGl0LT5TZXRNdWx0aUxpbmUoSGFzRmxhZyhQRVNfTVVMVElMSU5FKSk7CisJbV9wRWRpdC0+U2V0QXV0b1JldHVybihIYXNGbGFnKFBFU19BVVRPUkVUVVJOKSk7CisJbV9wRWRpdC0+U2V0QXV0b0ZvbnRTaXplKEhhc0ZsYWcoUFdTX0FVVE9GT05UU0laRSkpOworCW1fcEVkaXQtPlNldEF1dG9TY3JvbGwoSGFzRmxhZyhQRVNfQVVUT1NDUk9MTCkpOworfQorCit2b2lkIENQV0xfTGFiZWw6OkRyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKQoreworCUNQV0xfV25kOjpEcmF3VGhpc0FwcGVhcmFuY2UocERldmljZSxwVXNlcjJEZXZpY2UpOworCisJR2V0Q2xpZW50UmVjdCgpOworCisJQ1BERl9SZWN0IHJjQ2xpcDsKKwlDUFZUX1dvcmRSYW5nZSB3clJhbmdlID0gbV9wRWRpdC0+R2V0VmlzaWJsZVdvcmRSYW5nZSgpOworCUNQVlRfV29yZFJhbmdlKiBwUmFuZ2UgPSBOVUxMOworCisJaWYgKCFIYXNGbGFnKFBFU19URVhUT1ZFUkZMT1cpKQorCXsKKwkJcmNDbGlwID0gR2V0Q2xpZW50UmVjdCgpOworCQlwUmFuZ2UgPSAmd3JSYW5nZTsKKwl9CitJRlhfU3lzdGVtSGFuZGxlciogcFN5c0hhbmRsZXIgPSBHZXRTeXN0ZW1IYW5kbGVyKCk7CisJSUZYX0VkaXQ6OkRyYXdFZGl0KHBEZXZpY2UsIHBVc2VyMkRldmljZSwgbV9wRWRpdCwKKwkJQ1BXTF9VdGlsczo6UFdMQ29sb3JUb0ZYQ29sb3IoR2V0VGV4dENvbG9yKCksIHRoaXMtPkdldFRyYW5zcGFyZW5jeSgpKSwKKwkJQ1BXTF9VdGlsczo6UFdMQ29sb3JUb0ZYQ29sb3IoR2V0VGV4dFN0cm9rZUNvbG9yKCksIHRoaXMtPkdldFRyYW5zcGFyZW5jeSgpKSwKKwkJcmNDbGlwLCBDUERGX1BvaW50KDAuMGYsMC4wZiksIHBSYW5nZSxwU3lzSGFuZGxlciwgTlVMTCk7Cit9CisKK3ZvaWQgQ1BXTF9MYWJlbDo6U2V0SG9yelNjYWxlKEZYX0lOVDMyIG5Ib3J6U2NhbGUpCit7CisJbV9wRWRpdC0+U2V0SG9yelNjYWxlKG5Ib3J6U2NhbGUpOworfQorCit2b2lkIENQV0xfTGFiZWw6OlNldENoYXJTcGFjZShGWF9GTE9BVCBmQ2hhclNwYWNlKQoreworCW1fcEVkaXQtPlNldENoYXJTcGFjZShmQ2hhclNwYWNlKTsKK30KKworQ1BERl9SZWN0IENQV0xfTGFiZWw6OkdldENvbnRlbnRSZWN0KCkgY29uc3QKK3sKKwlyZXR1cm4gbV9wRWRpdC0+R2V0Q29udGVudFJlY3QoKTsKK30KKwordm9pZCBDUFdMX0xhYmVsOjpHZXRUaGlzQXBwZWFyYW5jZVN0cmVhbShDRlhfQnl0ZVRleHRCdWYgJiBzQXBwU3RyZWFtKQoreworCUNQV0xfV25kOjpHZXRUaGlzQXBwZWFyYW5jZVN0cmVhbShzQXBwU3RyZWFtKTsKKworCXNBcHBTdHJlYW0gPDwgR2V0VGV4dEFwcGVhcmFuY2VTdHJlYW0oQ1BERl9Qb2ludCgwLjBmLCAwLjBmKSk7Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQV0xfTGFiZWw6OkdldFRleHRBcHBlYXJhbmNlU3RyZWFtKGNvbnN0IENQREZfUG9pbnQgJiBwdE9mZnNldCkgY29uc3QKK3sKKwlDRlhfQnl0ZVRleHRCdWYgc1JldDsKKwlDRlhfQnl0ZVN0cmluZyBzRWRpdCA9IENQV0xfVXRpbHM6OkdldEVkaXRBcHBTdHJlYW0obV9wRWRpdCxwdE9mZnNldCk7CisJCisJaWYgKHNFZGl0LkdldExlbmd0aCgpID4gMCkKKwl7CisJCXNSZXQgPDwgIkJUXG4iIDw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKEdldFRleHRDb2xvcigpKSA8PCBzRWRpdCA8PCAiRVRcbiI7CisJfQorCisJcmV0dXJuIHNSZXQuR2V0Qnl0ZVN0cmluZygpOworfQorCitDRlhfV2lkZVN0cmluZyBDUFdMX0xhYmVsOjpHZXRUZXh0KCkgY29uc3QKK3sKKwlyZXR1cm4gbV9wRWRpdC0+R2V0VGV4dCgpOworfQorCit2b2lkIENQV0xfTGFiZWw6OlNldExpbWl0Q2hhcihGWF9JTlQzMiBuTGltaXRDaGFyKQoreworCW1fcEVkaXQtPlNldExpbWl0Q2hhcihuTGltaXRDaGFyKTsKK30KKworRlhfSU5UMzIgQ1BXTF9MYWJlbDo6R2V0VG90YWxXb3JkcygpCit7CisJaWYgKG1fcEVkaXQpCisJCXJldHVybiBtX3BFZGl0LT5HZXRUb3RhbFdvcmRzKCk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9MaXN0Qm94LmNwcCBiL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfTGlzdEJveC5jcHAKaW5kZXggOTUxZWQ5My4uMDM1ZDgxOTUgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfTGlzdEJveC5jcHAKKysrIGIvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9MaXN0Qm94LmNwcApAQCAtMSw2MzIgKzEsNjMyIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUERGV2luZG93LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9XbmQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0xpc3RCb3guaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1V0aWxzLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9TY3JvbGxCYXIuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0VkaXRDdHJsLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9FZGl0LmgiDQotDQotI2RlZmluZSBJc0Zsb2F0WmVybyhmKQkJCQkJCSgoZikgPCAwLjAwMDEgJiYgKGYpID4gLTAuMDAwMSkNCi0jZGVmaW5lIElzRmxvYXRCaWdnZXIoZmEsZmIpCQkJCSgoZmEpID4gKGZiKSAmJiAhSXNGbG9hdFplcm8oKGZhKSAtIChmYikpKQ0KLSNkZWZpbmUgSXNGbG9hdFNtYWxsZXIoZmEsZmIpCQkJCSgoZmEpIDwgKGZiKSAmJiAhSXNGbG9hdFplcm8oKGZhKSAtIChmYikpKQ0KLSNkZWZpbmUgSXNGbG9hdEVxdWFsKGZhLGZiKQkJCQkJSXNGbG9hdFplcm8oKGZhKS0oZmIpKQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX0xpc3RfTm90aWZ5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ1BXTF9MaXN0X05vdGlmeTo6Q1BXTF9MaXN0X05vdGlmeShDUFdMX0xpc3RCb3gqIHBMaXN0KSA6IG1fcExpc3QocExpc3QpDQotew0KLQlBU1NFUlQobV9wTGlzdCAhPSBOVUxMKTsNCi19DQotDQotQ1BXTF9MaXN0X05vdGlmeTo6fkNQV0xfTGlzdF9Ob3RpZnkoKQ0KLXsNCi19DQotDQotdm9pZCBDUFdMX0xpc3RfTm90aWZ5OjpJT25TZXRTY3JvbGxJbmZvWShGWF9GTE9BVCBmUGxhdGVNaW4sIEZYX0ZMT0FUIGZQbGF0ZU1heCwgDQotCQkJCQkJCQkJCQkJRlhfRkxPQVQgZkNvbnRlbnRNaW4sIEZYX0ZMT0FUIGZDb250ZW50TWF4LCANCi0JCQkJCQkJCQkJCQlGWF9GTE9BVCBmU21hbGxTdGVwLCBGWF9GTE9BVCBmQmlnU3RlcCkNCi17DQotCVBXTF9TQ1JPTExfSU5GTyBJbmZvOw0KLQ0KLQlJbmZvLmZQbGF0ZVdpZHRoID0gZlBsYXRlTWF4IC0gZlBsYXRlTWluOw0KLQlJbmZvLmZDb250ZW50TWluID0gZkNvbnRlbnRNaW47DQotCUluZm8uZkNvbnRlbnRNYXggPSBmQ29udGVudE1heDsNCi0JSW5mby5mU21hbGxTdGVwID0gZlNtYWxsU3RlcDsNCi0JSW5mby5mQmlnU3RlcCA9IGZCaWdTdGVwOw0KLQ0KLQltX3BMaXN0LT5Pbk5vdGlmeShtX3BMaXN0LFBOTV9TRVRTQ1JPTExJTkZPLFNCVF9WU0NST0xMLChGWF9JTlRQVFIpJkluZm8pOw0KLQ0KLQlpZiAoQ1BXTF9TY3JvbGxCYXIgKiBwU2Nyb2xsID0gbV9wTGlzdC0+R2V0VlNjcm9sbEJhcigpKQ0KLQl7DQotCQlpZiAoSXNGbG9hdEJpZ2dlcihJbmZvLmZQbGF0ZVdpZHRoLEluZm8uZkNvbnRlbnRNYXgtSW5mby5mQ29udGVudE1pbikNCi0JCQl8fCBJc0Zsb2F0RXF1YWwoSW5mby5mUGxhdGVXaWR0aCxJbmZvLmZDb250ZW50TWF4LUluZm8uZkNvbnRlbnRNaW4pKQ0KLQkJew0KLQkJCWlmIChwU2Nyb2xsLT5Jc1Zpc2libGUoKSkNCi0JCQl7DQotCQkJCXBTY3JvbGwtPlNldFZpc2libGUoRkFMU0UpOw0KLQkJCQltX3BMaXN0LT5SZVBvc0NoaWxkV25kKCk7DQotCQkJfQkJCQ0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCWlmICghcFNjcm9sbC0+SXNWaXNpYmxlKCkpDQotCQkJew0KLQkJCQlwU2Nyb2xsLT5TZXRWaXNpYmxlKFRSVUUpOwkNCi0JCQkJbV9wTGlzdC0+UmVQb3NDaGlsZFduZCgpOw0KLQkJCX0NCi0JCX0NCi0JfQkNCi19DQotDQotdm9pZCBDUFdMX0xpc3RfTm90aWZ5OjpJT25TZXRTY3JvbGxQb3NZKEZYX0ZMT0FUIGZ5KQ0KLXsNCi0JbV9wTGlzdC0+T25Ob3RpZnkobV9wTGlzdCxQTk1fU0VUU0NST0xMUE9TLFNCVF9WU0NST0xMLChGWF9JTlRQVFIpJmZ5KTsNCi19DQotDQotdm9pZCBDUFdMX0xpc3RfTm90aWZ5OjpJT25JbnZhbGlkYXRlUmVjdChDUERGX1JlY3QgKiBwUmVjdCkNCi17DQotCW1fcExpc3QtPkludmFsaWRhdGVSZWN0KHBSZWN0KTsNCi19DQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfTGlzdEJveCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ1BXTF9MaXN0Qm94OjpDUFdMX0xpc3RCb3goKSA6DQotCW1fcExpc3QoTlVMTCksDQotCW1fcExpc3ROb3RpZnkoTlVMTCksDQotCW1fYk1vdXNlRG93bihGQUxTRSksDQotCW1fYkhvdmVyU2VsKEZBTFNFKSwNCi0JbV9wRmlsbGVyTm90aWZ5KE5VTEwpDQotew0KLQltX3BMaXN0ID0gSUZYX0xpc3Q6Ok5ld0xpc3QoKTsNCi0NCi0JQVNTRVJUKG1fcExpc3QgIT0gTlVMTCk7DQotfQ0KLQ0KLUNQV0xfTGlzdEJveDo6fkNQV0xfTGlzdEJveCgpDQotew0KLQlJRlhfTGlzdDo6RGVsTGlzdChtX3BMaXN0KTsNCi0JDQotCWlmIChtX3BMaXN0Tm90aWZ5KQ0KLQl7DQotCQlkZWxldGUgbV9wTGlzdE5vdGlmeTsNCi0JCW1fcExpc3ROb3RpZnkgPSBOVUxMOw0KLQl9DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfTGlzdEJveDo6R2V0Q2xhc3NOYW1lKCkgY29uc3QNCi17CQ0KLQlyZXR1cm4gIkNQV0xfTGlzdEJveCI7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9MaXN0Qm94OjpPbkNyZWF0ZWQoKQ0KLXsNCi0JaWYgKG1fcExpc3QpDQotCXsNCi0JCWlmIChtX3BMaXN0Tm90aWZ5KSBkZWxldGUgbV9wTGlzdE5vdGlmeTsNCi0NCi0JCW1fcExpc3QtPlNldEZvbnRNYXAoR2V0Rm9udE1hcCgpKTsNCi0JCW1fcExpc3QtPlNldE5vdGlmeShtX3BMaXN0Tm90aWZ5ID0gbmV3IENQV0xfTGlzdF9Ob3RpZnkodGhpcykpOw0KLQkNCi0JCVNldEhvdmVyU2VsKEhhc0ZsYWcoUExCU19IT1ZFUlNFTCkpOwkNCi0JCW1fcExpc3QtPlNldE11bHRpcGxlU2VsKEhhc0ZsYWcoUExCU19NVUxUSVBMRVNFTCkpOw0KLQkJbV9wTGlzdC0+U2V0Rm9udFNpemUodGhpcy0+R2V0Q3JlYXRpb25QYXJhbSgpLmZGb250U2l6ZSk7CQ0KLQ0KLQkJbV9iSG92ZXJTZWwgPSBIYXNGbGFnKFBMQlNfSE9WRVJTRUwpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9MaXN0Qm94OjpPbkRlc3Ryb3koKQ0KLXsNCi0JaWYgKG1fcExpc3ROb3RpZnkpDQotCXsNCi0JCWRlbGV0ZSBtX3BMaXN0Tm90aWZ5Ow0KLQkJbV9wTGlzdE5vdGlmeSA9IE5VTEw7DQotCX0NCi19DQotDQotdm9pZCBDUFdMX0xpc3RCb3g6OkdldFRoaXNBcHBlYXJhbmNlU3RyZWFtKENGWF9CeXRlVGV4dEJ1ZiAmIHNBcHBTdHJlYW0pDQotew0KLQlDUFdMX1duZDo6R2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oc0FwcFN0cmVhbSk7DQotDQotCUNGWF9CeXRlVGV4dEJ1ZiBzTGlzdEl0ZW1zOw0KLQ0KLQlpZiAobV9wTGlzdCkNCi0Jew0KLQkJQ1BERl9SZWN0IHJjUGxhdGUgPSBtX3BMaXN0LT5HZXRQbGF0ZVJlY3QoKTsNCi0JCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fcExpc3QtPkdldENvdW50KCk7IGk8c3o7IGkrKykNCi0JCXsNCi0JCQlDUERGX1JlY3QgcmNJdGVtID0gbV9wTGlzdC0+R2V0SXRlbVJlY3QoaSk7DQotDQotCQkJaWYgKHJjSXRlbS5ib3R0b20gPiByY1BsYXRlLnRvcCB8fCByY0l0ZW0udG9wIDwgcmNQbGF0ZS5ib3R0b20pIGNvbnRpbnVlOw0KLQkJCQ0KLQkJCUNQREZfUG9pbnQgcHRPZmZzZXQocmNJdGVtLmxlZnQsIChyY0l0ZW0udG9wICsgcmNJdGVtLmJvdHRvbSkgKiAwLjVmKTsNCi0JCQlpZiAobV9wTGlzdC0+SXNJdGVtU2VsZWN0ZWQoaSkpDQotCQkJew0KLQkJCQlzTGlzdEl0ZW1zIDw8IENQV0xfVXRpbHM6OkdldFJlY3RGaWxsQXBwU3RyZWFtKHJjSXRlbSxQV0xfREVGQVVMVF9TRUxCQUNLQ09MT1IpOw0KLQkJCQlDRlhfQnl0ZVN0cmluZyBzSXRlbSA9IENQV0xfVXRpbHM6OkdldEVkaXRBcHBTdHJlYW0obV9wTGlzdC0+R2V0SXRlbUVkaXQoaSksIHB0T2Zmc2V0KTsNCi0JCQkJaWYgKHNJdGVtLkdldExlbmd0aCgpID4gMCkNCi0JCQkJew0KLQkJCQkJc0xpc3RJdGVtcyA8PCAiQlRcbiIgPDwgQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oUFdMX0RFRkFVTFRfU0VMVEVYVENPTE9SKSA8PCBzSXRlbSA8PCAiRVRcbiI7DQotCQkJCX0NCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJQ0ZYX0J5dGVTdHJpbmcgc0l0ZW0gPSBDUFdMX1V0aWxzOjpHZXRFZGl0QXBwU3RyZWFtKG1fcExpc3QtPkdldEl0ZW1FZGl0KGkpLCBwdE9mZnNldCk7DQotCQkJCWlmIChzSXRlbS5HZXRMZW5ndGgoKSA+IDApDQotCQkJCXsNCi0JCQkJCXNMaXN0SXRlbXMgPDwgIkJUXG4iIDw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKEdldFRleHRDb2xvcigpKSA8PCBzSXRlbSA8PCAiRVRcbiI7DQotCQkJCX0NCi0JCQl9DQotCQl9DQotCX0NCi0NCi0JaWYgKHNMaXN0SXRlbXMuR2V0TGVuZ3RoKCkgPiAwKQ0KLQl7DQotCQlDRlhfQnl0ZVRleHRCdWYgc0NsaXA7CQkJDQotCQlDUERGX1JlY3QgcmNDbGllbnQgPSB0aGlzLT5HZXRDbGllbnRSZWN0KCk7DQotDQotCQlzQ2xpcCA8PCAicVxuIjsNCi0JCXNDbGlwIDw8IHJjQ2xpZW50LmxlZnQgPDwgIiAiIDw8IHJjQ2xpZW50LmJvdHRvbSA8PCAiICINCi0JCQk8PCByY0NsaWVudC5yaWdodCAtIHJjQ2xpZW50LmxlZnQgPDwgIiAiIDw8CXJjQ2xpZW50LnRvcCAtIHJjQ2xpZW50LmJvdHRvbSA8PCAiIHJlIFcgblxuIjsNCi0NCi0JCXNDbGlwIDw8IHNMaXN0SXRlbXMgPDwgIlFcbiI7DQotDQotCQlzQXBwU3RyZWFtIDw8ICIvVHggQk1DXG4iIDw8IHNDbGlwIDw8ICJFTUNcbiI7DQotCX0NCi19DQotDQotdm9pZCBDUFdMX0xpc3RCb3g6OkRyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKQ0KLXsNCi0JQ1BXTF9XbmQ6OkRyYXdUaGlzQXBwZWFyYW5jZShwRGV2aWNlLHBVc2VyMkRldmljZSk7DQotDQotCWlmIChtX3BMaXN0KQ0KLQl7DQotCQlDUERGX1JlY3QgcmNQbGF0ZSA9IG1fcExpc3QtPkdldFBsYXRlUmVjdCgpOw0KLQkJQ1BERl9SZWN0IHJjTGlzdCA9IEdldExpc3RSZWN0KCk7DQotCQlDUERGX1JlY3QgcmNDbGllbnQgPSBHZXRDbGllbnRSZWN0KCk7DQotDQotCQlmb3IgKEZYX0lOVDMyIGk9MCxzej1tX3BMaXN0LT5HZXRDb3VudCgpOyBpPHN6OyBpKyspDQotCQl7DQotCQkJQ1BERl9SZWN0IHJjSXRlbSA9IG1fcExpc3QtPkdldEl0ZW1SZWN0KGkpOw0KLQkJCWlmIChyY0l0ZW0uYm90dG9tID4gcmNQbGF0ZS50b3AgfHwgcmNJdGVtLnRvcCA8IHJjUGxhdGUuYm90dG9tKSBjb250aW51ZTsNCi0JCQkNCi0JCQlDUERGX1BvaW50IHB0T2Zmc2V0KHJjSXRlbS5sZWZ0LCAocmNJdGVtLnRvcCArIHJjSXRlbS5ib3R0b20pICogMC41Zik7DQotCQkJaWYgKElGWF9FZGl0KiBwRWRpdCA9IG1fcExpc3QtPkdldEl0ZW1FZGl0KGkpKQ0KLQkJCXsNCi0JCQkJQ1BERl9SZWN0IHJjQ29udGVudCA9IHBFZGl0LT5HZXRDb250ZW50UmVjdCgpOw0KLQkJCQlpZiAocmNDb250ZW50LldpZHRoKCkgPiByY0NsaWVudC5XaWR0aCgpKQ0KLQkJCQkJcmNJdGVtLkludGVyc2VjdChyY0xpc3QpOw0KLQkJCQllbHNlDQotCQkJCQlyY0l0ZW0uSW50ZXJzZWN0KHJjQ2xpZW50KTsNCi0JCQl9DQotDQotCQkJaWYgKG1fcExpc3QtPklzSXRlbVNlbGVjdGVkKGkpKQ0KLQkJCXsNCi0JCQkvLwlDUFdMX1V0aWxzOjpEcmF3RmlsbFJlY3QocERldmljZSwgcFVzZXIyRGV2aWNlLCByY0l0ZW0sIEFyZ2JFbmNvZGUoMjU1LDAsNTEsMTEzKSk7DQotCQkJCUlGWF9TeXN0ZW1IYW5kbGVyKiBwU3lzSGFuZGxlciA9IEdldFN5c3RlbUhhbmRsZXIoKTsNCi0JCQkJaWYocFN5c0hhbmRsZXIgJiYgcFN5c0hhbmRsZXItPklzU2VsZWN0aW9uSW1wbGVtZW50ZWQoKSkNCi0JCQkJew0KLQkJCQkJSUZYX0VkaXQ6OkRyYXdFZGl0KHBEZXZpY2UsIHBVc2VyMkRldmljZSwgbV9wTGlzdC0+R2V0SXRlbUVkaXQoaSksIENQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKEdldFRleHRDb2xvcigpKSwgQ1BXTF9VdGlsczo6UFdMQ29sb3JUb0ZYQ29sb3IoR2V0VGV4dFN0cm9rZUNvbG9yKCkpLA0KLQkJCQkJCXJjTGlzdCwgcHRPZmZzZXQsIE5VTEwscFN5c0hhbmRsZXIsIG1fcEZvcm1GaWxsZXIpOw0KLQkJCQkJcFN5c0hhbmRsZXItPk91dHB1dFNlbGVjdGVkUmVjdChtX3BGb3JtRmlsbGVyLCByY0l0ZW0pOw0KLQkJCQl9DQotCQkJCWVsc2UNCi0JCQkJew0KLQkJCQkJQ1BXTF9VdGlsczo6RHJhd0ZpbGxSZWN0KHBEZXZpY2UsIHBVc2VyMkRldmljZSwgcmNJdGVtLCBBcmdiRW5jb2RlKDI1NSwwLDUxLDExMykpOw0KLQkJCQkJSUZYX0VkaXQ6OkRyYXdFZGl0KHBEZXZpY2UsIHBVc2VyMkRldmljZSwgbV9wTGlzdC0+R2V0SXRlbUVkaXQoaSksIEFyZ2JFbmNvZGUoMjU1LDI1NSwyNTUsMjU1KSwgMCwNCi0JCQkJCQlyY0xpc3QsIHB0T2Zmc2V0LCBOVUxMLCBwU3lzSGFuZGxlciwgbV9wRm9ybUZpbGxlcik7DQotCQkJCX0NCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJSUZYX1N5c3RlbUhhbmRsZXIqIHBTeXNIYW5kbGVyID0gR2V0U3lzdGVtSGFuZGxlcigpOw0KLQkJCQlJRlhfRWRpdDo6RHJhd0VkaXQocERldmljZSwgcFVzZXIyRGV2aWNlLCBtX3BMaXN0LT5HZXRJdGVtRWRpdChpKSwgDQotCQkJCQkJQ1BXTF9VdGlsczo6UFdMQ29sb3JUb0ZYQ29sb3IoR2V0VGV4dENvbG9yKCkpLA0KLQkJCQkJCUNQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKEdldFRleHRTdHJva2VDb2xvcigpKSwNCi0JCQkJCQlyY0xpc3QsIHB0T2Zmc2V0LCBOVUxMLHBTeXNIYW5kbGVyLCBOVUxMKTsNCi0NCi0JCQl9DQotCQl9DQotCX0NCi19DQotDQotRlhfQk9PTCBDUFdMX0xpc3RCb3g6Ok9uS2V5RG93bihGWF9XT1JEIG5DaGFyLCBGWF9EV09SRCBuRmxhZykNCi17DQotCUNQV0xfV25kOjpPbktleURvd24obkNoYXIsIG5GbGFnKTsNCi0NCi0JaWYgKCFtX3BMaXN0KSByZXR1cm4gRkFMU0U7DQotDQotCXN3aXRjaCAobkNoYXIpDQotCXsNCi0JZGVmYXVsdDoNCi0JCXJldHVybiBGQUxTRTsNCi0JY2FzZSBGV0xfVktFWV9VcDoNCi0JY2FzZSBGV0xfVktFWV9Eb3duOg0KLQljYXNlIEZXTF9WS0VZX0hvbWU6DQotCWNhc2UgRldMX1ZLRVlfTGVmdDoNCi0JY2FzZSBGV0xfVktFWV9FbmQ6DQotCWNhc2UgRldMX1ZLRVlfUmlnaHQ6DQotCQlicmVhazsJDQotCX0NCi0NCi0Jc3dpdGNoIChuQ2hhcikNCi0Jew0KLQljYXNlIEZXTF9WS0VZX1VwOg0KLQkJbV9wTGlzdC0+T25WS19VUChJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpOw0KLQkJYnJlYWs7DQotCWNhc2UgRldMX1ZLRVlfRG93bjoNCi0JCW1fcExpc3QtPk9uVktfRE9XTihJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpOw0KLQkJYnJlYWs7DQotCWNhc2UgRldMX1ZLRVlfSG9tZToNCi0JCW1fcExpc3QtPk9uVktfSE9NRShJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpOw0KLQkJYnJlYWs7DQotCWNhc2UgRldMX1ZLRVlfTGVmdDoNCi0JCW1fcExpc3QtPk9uVktfTEVGVChJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpOw0KLQkJYnJlYWs7DQotCWNhc2UgRldMX1ZLRVlfRW5kOg0KLQkJbV9wTGlzdC0+T25WS19FTkQoSXNTSElGVHByZXNzZWQobkZsYWcpLElzQ1RSTHByZXNzZWQobkZsYWcpKTsNCi0JCWJyZWFrOw0KLQljYXNlIEZXTF9WS0VZX1JpZ2h0Og0KLQkJbV9wTGlzdC0+T25WS19SSUdIVChJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpOw0KLQkJYnJlYWs7DQotCWNhc2UgRldMX1ZLRVlfRGVsZXRlOg0KLQkJYnJlYWs7DQotCX0NCi0NCi0JRlhfQk9PTCBiRXhpdCA9IEZBTFNFOw0KLQlPbk5vdGlmeVNlbENoYW5nZWQoVFJVRSxiRXhpdCxuRmxhZyk7DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIENQV0xfTGlzdEJveDo6T25DaGFyKEZYX1dPUkQgbkNoYXIsIEZYX0RXT1JEIG5GbGFnKQ0KLXsNCi0JQ1BXTF9XbmQ6Ok9uQ2hhcihuQ2hhcixuRmxhZyk7DQotDQotCWlmICghbV9wTGlzdCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlpZiAoIW1fcExpc3QtPk9uQ2hhcihuQ2hhcixJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpKSByZXR1cm4gRkFMU0U7DQotDQotCUZYX0JPT0wgYkV4aXQgPSBGQUxTRTsNCi0JT25Ob3RpZnlTZWxDaGFuZ2VkKFRSVUUsYkV4aXQsIG5GbGFnKTsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9MaXN0Qm94OjpPbkxCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlDUFdMX1duZDo6T25MQnV0dG9uRG93bihwb2ludCxuRmxhZyk7DQotDQotCWlmIChDbGllbnRIaXRUZXN0KHBvaW50KSkNCi0Jew0KLQkJbV9iTW91c2VEb3duID0gVFJVRTsNCi0JCVNldEZvY3VzKCk7DQotCQlTZXRDYXB0dXJlKCk7DQotDQotCQlpZiAobV9wTGlzdCkNCi0JCQltX3BMaXN0LT5Pbk1vdXNlRG93bihwb2ludCxJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpOw0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1GWF9CT09MIENQV0xfTGlzdEJveDo6T25MQnV0dG9uVXAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZykNCi17DQotCUNQV0xfV25kOjpPbkxCdXR0b25VcChwb2ludCxuRmxhZyk7DQotDQotCWlmIChtX2JNb3VzZURvd24pDQotCXsNCi0JCVJlbGVhc2VDYXB0dXJlKCk7DQotCQltX2JNb3VzZURvd24gPSBGQUxTRTsNCi0JfQ0KLQ0KLQlGWF9CT09MIGJFeGl0ID0gRkFMU0U7DQotCU9uTm90aWZ5U2VsQ2hhbmdlZChGQUxTRSxiRXhpdCxuRmxhZyk7DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi12b2lkIENQV0xfTGlzdEJveDo6U2V0SG92ZXJTZWwoRlhfQk9PTCBiSG92ZXJTZWwpDQotew0KLQltX2JIb3ZlclNlbCA9IGJIb3ZlclNlbDsNCi19DQotDQotRlhfQk9PTCBDUFdMX0xpc3RCb3g6Ok9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlDUFdMX1duZDo6T25Nb3VzZU1vdmUocG9pbnQsIG5GbGFnKTsNCi0NCi0JaWYgKG1fYkhvdmVyU2VsICYmICFJc0NhcHR1cmVNb3VzZSgpICYmIENsaWVudEhpdFRlc3QocG9pbnQpKQ0KLQl7DQotCQlpZiAobV9wTGlzdCkNCi0JCQltX3BMaXN0LT5TZWxlY3QobV9wTGlzdC0+R2V0SXRlbUluZGV4KHBvaW50KSk7DQotCX0NCi0NCi0JaWYgKG1fYk1vdXNlRG93bikNCi0Jew0KLQkJaWYgKG1fcExpc3QpDQotCQkJbV9wTGlzdC0+T25Nb3VzZU1vdmUocG9pbnQsSXNTSElGVHByZXNzZWQobkZsYWcpLElzQ1RSTHByZXNzZWQobkZsYWcpKTsNCi0JfQkNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9MaXN0Qm94OjpPbk5vdGlmeShDUFdMX1duZCogcFduZCwgRlhfRFdPUkQgbXNnLCBGWF9JTlRQVFIgd1BhcmFtLCBGWF9JTlRQVFIgbFBhcmFtKQ0KLXsNCi0JQ1BXTF9XbmQ6Ok9uTm90aWZ5KHBXbmQsbXNnLHdQYXJhbSxsUGFyYW0pOw0KLQ0KLQlGWF9GTE9BVCBmUG9zOwkNCi0JDQotCXN3aXRjaCAobXNnKQ0KLQl7DQotCWNhc2UgUE5NX1NFVFNDUk9MTElORk86DQotCQlzd2l0Y2ggKHdQYXJhbSkNCi0JCXsNCi0JCWNhc2UgU0JUX1ZTQ1JPTEw6DQotCQkJaWYgKENQV0xfV25kICogcENoaWxkID0gR2V0VlNjcm9sbEJhcigpKQ0KLQkJCXsNCi0JCQkJcENoaWxkLT5Pbk5vdGlmeShwV25kLFBOTV9TRVRTQ1JPTExJTkZPLHdQYXJhbSxsUGFyYW0pOw0KLQkJCX0NCi0JCQlicmVhazsNCi0JCX0NCi0JCWJyZWFrOw0KLQljYXNlIFBOTV9TRVRTQ1JPTExQT1M6CQkJDQotCQlzd2l0Y2ggKHdQYXJhbSkNCi0JCXsNCi0JCWNhc2UgU0JUX1ZTQ1JPTEw6DQotCQkJaWYgKENQV0xfV25kICogcENoaWxkID0gR2V0VlNjcm9sbEJhcigpKQ0KLQkJCXsNCi0JCQkJcENoaWxkLT5Pbk5vdGlmeShwV25kLFBOTV9TRVRTQ1JPTExQT1Msd1BhcmFtLGxQYXJhbSk7DQotCQkJfQ0KLQkJCWJyZWFrOw0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgUE5NX1NDUk9MTFdJTkRPVzoNCi0JCWZQb3MgPSAqKEZYX0ZMT0FUKilsUGFyYW07DQotCQlzd2l0Y2ggKHdQYXJhbSkNCi0JCXsNCi0JCWNhc2UgU0JUX1ZTQ1JPTEw6DQotCQkJaWYgKG1fcExpc3QpDQotCQkJCW1fcExpc3QtPlNldFNjcm9sbFBvcyhDUERGX1BvaW50KDAsZlBvcykpOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQkJYnJlYWs7DQotCX0NCi19DQotDQotdm9pZCBDUFdMX0xpc3RCb3g6OktpbGxGb2N1cygpDQotew0KLQlDUFdMX1duZDo6S2lsbEZvY3VzKCk7DQotDQotCS8qDQotCWlmICh0aGlzLT5Jc011bHRpcGxlU2VsKCkpDQotCXsNCi0JCWZvcihGWF9JTlQzMiBpPTA7aTx0aGlzLT5HZXRDb3VudCgpO2krKykNCi0JCXsNCi0JCQlpZiAodGhpcy0+SXNMaXN0SXRlbVNlbGVjdGVkKGkpKQ0KLQkJCXsNCi0JCQkJaWYgKCFJc0xpc3RJdGVtVmlzaWJsZShpKSkNCi0JCQkJCXRoaXMtPlNjcm9sbFRvTGlzdEl0ZW0oaSk7DQotCQkJCWJyZWFrOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQllbHNlDQotCXsNCi0JCWlmICghSXNMaXN0SXRlbVZpc2libGUodGhpcy0+R2V0Q3VyU2VsKCkpKQ0KLQkJCXRoaXMtPlNjcm9sbFRvTGlzdEl0ZW0odGhpcy0+R2V0Q3VyU2VsKCkpOw0KLQl9DQotDQotCVNldExpc3RJdGVtQ2FyZXQobV9uQ2FyZXRJbmRleCxGQUxTRSk7DQotCSovDQotfQ0KLQ0KLXZvaWQgQ1BXTF9MaXN0Qm94OjpSZVBvc0NoaWxkV25kKCkNCi17DQotCUNQV0xfV25kOjpSZVBvc0NoaWxkV25kKCk7DQotDQotCWlmIChtX3BMaXN0KQ0KLQkJbV9wTGlzdC0+U2V0UGxhdGVSZWN0KEdldExpc3RSZWN0KCkpOw0KLX0NCi0NCi12b2lkIENQV0xfTGlzdEJveDo6T25Ob3RpZnlTZWxDaGFuZ2VkKEZYX0JPT0wgYktleURvd24sIEZYX0JPT0wgJiBiRXhpdCwgIEZYX0RXT1JEIG5GbGFnKQ0KLXsNCi0JaWYgKG1fcEZpbGxlck5vdGlmeSkNCi0JewkJDQotCQlGWF9CT09MIGJSQyA9IFRSVUU7DQotCQlDRlhfV2lkZVN0cmluZyBzd0NoYW5nZSA9IEdldFRleHQoKTsNCi0JCUNGWF9XaWRlU3RyaW5nIHN0ckNoYW5nZUV4Ow0KLQkJaW50IG5TZWxTdGFydCA9IDA7DQotCQlpbnQgblNlbEVuZCA9IHN3Q2hhbmdlLkdldExlbmd0aCgpOw0KLQkJbV9wRmlsbGVyTm90aWZ5LT5PbkJlZm9yZUtleVN0cm9rZShGQUxTRSwgR2V0QXR0YWNoZWREYXRhKCksIDAsIHN3Q2hhbmdlLCBzdHJDaGFuZ2VFeCwgblNlbFN0YXJ0LCBuU2VsRW5kLCBiS2V5RG93biwgYlJDLCBiRXhpdCwgbkZsYWcpOw0KLQkJaWYgKGJFeGl0KSByZXR1cm47DQotDQotCQltX3BGaWxsZXJOb3RpZnktPk9uQWZ0ZXJLZXlTdHJva2UoRkFMU0UsIEdldEF0dGFjaGVkRGF0YSgpLCBiRXhpdCxuRmxhZyk7DQotCX0NCi19DQotDQotQ1BERl9SZWN0IENQV0xfTGlzdEJveDo6R2V0Rm9jdXNSZWN0KCkgY29uc3QNCi17DQotCWlmIChtX3BMaXN0ICYmIG1fcExpc3QtPklzTXVsdGlwbGVTZWwoKSkNCi0Jew0KLQkJQ1BERl9SZWN0IHJjQ2FyZXQgPSBtX3BMaXN0LT5HZXRJdGVtUmVjdChtX3BMaXN0LT5HZXRDYXJldCgpKTsNCi0JCXJjQ2FyZXQuSW50ZXJzZWN0KEdldENsaWVudFJlY3QoKSk7DQotCQlyZXR1cm4gcmNDYXJldDsNCi0JfQ0KLQkNCi0JcmV0dXJuIENQV0xfV25kOjpHZXRGb2N1c1JlY3QoKTsNCi19DQotDQotdm9pZCBDUFdMX0xpc3RCb3g6OkFkZFN0cmluZyhGWF9MUENXU1RSIHN0cmluZykNCi17DQotCWlmIChtX3BMaXN0KQ0KLQl7CQkNCi0JCW1fcExpc3QtPkFkZFN0cmluZyhzdHJpbmcpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9MaXN0Qm94OjpTZXRUZXh0KEZYX0xQQ1dTVFIgY3NUZXh0LEZYX0JPT0wgYlJlZnJlc2gpDQotew0KLQkvL3JldHVybiBDUERGX0xpc3Q6OlNldFRleHQoY3NUZXh0LGJSZWZyZXNoKTsNCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgQ1BXTF9MaXN0Qm94OjpHZXRUZXh0KCkgY29uc3QNCi17DQotCWlmIChtX3BMaXN0KQ0KLQkJcmV0dXJuIG1fcExpc3QtPkdldFRleHQoKTsNCi0NCi0JcmV0dXJuIEwiIjsNCi19DQotDQotdm9pZCBDUFdMX0xpc3RCb3g6OlNldEZvbnRTaXplKEZYX0ZMT0FUIGZGb250U2l6ZSkNCi17DQotCWlmIChtX3BMaXN0KQ0KLQkJbV9wTGlzdC0+U2V0Rm9udFNpemUoZkZvbnRTaXplKTsNCi19DQotDQotRlhfRkxPQVQgQ1BXTF9MaXN0Qm94OjpHZXRGb250U2l6ZSgpIGNvbnN0DQotew0KLQlpZiAobV9wTGlzdCkNCi0JCXJldHVybiBtX3BMaXN0LT5HZXRGb250U2l6ZSgpOw0KLQlyZXR1cm4gMC4wZjsNCi19DQotDQotdm9pZCBDUFdMX0xpc3RCb3g6OlNlbGVjdChGWF9JTlQzMiBuSXRlbUluZGV4KQ0KLXsNCi0JaWYgKG1fcExpc3QpDQotCQltX3BMaXN0LT5TZWxlY3Qobkl0ZW1JbmRleCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9MaXN0Qm94OjpTZXRDYXJldChGWF9JTlQzMiBuSXRlbUluZGV4KQ0KLXsNCi0JaWYgKG1fcExpc3QpDQotCQltX3BMaXN0LT5TZXRDYXJldChuSXRlbUluZGV4KTsNCi19DQotDQotdm9pZCBDUFdMX0xpc3RCb3g6OlNldFRvcFZpc2libGVJbmRleChGWF9JTlQzMiBuSXRlbUluZGV4KQ0KLXsNCi0JaWYgKG1fcExpc3QpDQotCQltX3BMaXN0LT5TZXRUb3BJdGVtKG5JdGVtSW5kZXgpOw0KLX0NCi0NCi12b2lkIENQV0xfTGlzdEJveDo6U2Nyb2xsVG9MaXN0SXRlbShGWF9JTlQzMiBuSXRlbUluZGV4KQ0KLXsNCi0JaWYgKG1fcExpc3QpDQotCQltX3BMaXN0LT5TY3JvbGxUb0xpc3RJdGVtKG5JdGVtSW5kZXgpOw0KLX0NCi0NCi12b2lkIENQV0xfTGlzdEJveDo6UmVzZXRDb250ZW50KCkNCi17DQotCWlmIChtX3BMaXN0KQ0KLQkJbV9wTGlzdC0+RW1wdHkoKTsNCi19DQotDQotdm9pZCBDUFdMX0xpc3RCb3g6OlJlc2V0KCkNCi17DQotCWlmIChtX3BMaXN0KQ0KLQkJbV9wTGlzdC0+Q2FuY2VsKCk7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9MaXN0Qm94OjpJc011bHRpcGxlU2VsKCkgY29uc3QNCi17DQotCWlmIChtX3BMaXN0KQ0KLQkJcmV0dXJuIG1fcExpc3QtPklzTXVsdGlwbGVTZWwoKTsNCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9JTlQzMiBDUFdMX0xpc3RCb3g6OkdldENhcmV0SW5kZXgoKSBjb25zdA0KLXsNCi0JaWYgKG1fcExpc3QpDQotCQlyZXR1cm4gbV9wTGlzdC0+R2V0Q2FyZXQoKTsNCi0NCi0JcmV0dXJuIC0xOw0KLX0NCi0NCi1GWF9JTlQzMiBDUFdMX0xpc3RCb3g6OkdldEN1clNlbCgpIGNvbnN0DQotew0KLQlpZiAobV9wTGlzdCkNCi0JCXJldHVybiBtX3BMaXN0LT5HZXRTZWxlY3QoKTsNCi0NCi0JcmV0dXJuIC0xOw0KLX0NCi0NCi1GWF9CT09MIENQV0xfTGlzdEJveDo6SXNJdGVtU2VsZWN0ZWQoRlhfSU5UMzIgbkl0ZW1JbmRleCkgY29uc3QNCi17DQotCWlmIChtX3BMaXN0KQ0KLQkJcmV0dXJuIG1fcExpc3QtPklzSXRlbVNlbGVjdGVkKG5JdGVtSW5kZXgpOw0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0lOVDMyIENQV0xfTGlzdEJveDo6R2V0VG9wVmlzaWJsZUluZGV4KCkgY29uc3QNCi17DQotCWlmIChtX3BMaXN0KQ0KLQl7DQotCQltX3BMaXN0LT5TY3JvbGxUb0xpc3RJdGVtKG1fcExpc3QtPkdldEZpcnN0U2VsZWN0ZWQoKSk7DQotCQlyZXR1cm4gbV9wTGlzdC0+R2V0VG9wSXRlbSgpOw0KLQl9DQotDQotCXJldHVybiAtMTsNCi19DQotDQotRlhfSU5UMzIgQ1BXTF9MaXN0Qm94OjpHZXRDb3VudCgpIGNvbnN0DQotew0KLQlpZiAobV9wTGlzdCkNCi0JCXJldHVybiBtX3BMaXN0LT5HZXRDb3VudCgpOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotRlhfSU5UMzIgQ1BXTF9MaXN0Qm94OjpGaW5kTmV4dChGWF9JTlQzMiBuSW5kZXgsRlhfV0NIQVIgbkNoYXIpIGNvbnN0DQotew0KLQlpZiAobV9wTGlzdCkNCi0JCXJldHVybiBtX3BMaXN0LT5GaW5kTmV4dChuSW5kZXgsbkNoYXIpOw0KLQ0KLQlyZXR1cm4gbkluZGV4Ow0KLX0NCi0NCi1DUERGX1JlY3QgQ1BXTF9MaXN0Qm94OjpHZXRDb250ZW50UmVjdCgpIGNvbnN0DQotew0KLQlpZiAobV9wTGlzdCkNCi0JCXJldHVybiBtX3BMaXN0LT5HZXRDb250ZW50UmVjdCgpOw0KLQ0KLQlyZXR1cm4gQ1BERl9SZWN0KCk7DQotfQ0KLQ0KLUZYX0ZMT0FUIENQV0xfTGlzdEJveDo6R2V0Rmlyc3RIZWlnaHQoKSBjb25zdA0KLXsNCi0JaWYgKG1fcExpc3QpDQotCQlyZXR1cm4gbV9wTGlzdC0+R2V0Rmlyc3RIZWlnaHQoKTsNCi0NCi0JcmV0dXJuIDAuMGY7DQotfQ0KLQ0KLUNQREZfUmVjdCBDUFdMX0xpc3RCb3g6OkdldExpc3RSZWN0KCkgY29uc3QNCi17DQotCXJldHVybiBDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdChHZXRXaW5kb3dSZWN0KCksKEZYX0ZMT0FUKShHZXRCb3JkZXJXaWR0aCgpK0dldElubmVyQm9yZGVyV2lkdGgoKSkpOw0KLX0NCi0NCi1GWF9CT09MCUNQV0xfTGlzdEJveDo6T25Nb3VzZVdoZWVsKHNob3J0IHpEZWx0YSwgY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZykNCi17DQotCWlmICghbV9wTGlzdCkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlpZiAoekRlbHRhIDwgMCkNCi0Jew0KLQkJbV9wTGlzdC0+T25WS19ET1dOKElzU0hJRlRwcmVzc2VkKG5GbGFnKSxJc0NUUkxwcmVzc2VkKG5GbGFnKSk7DQotCX0NCi0JZWxzZQ0KLQl7DQotCQltX3BMaXN0LT5PblZLX1VQKElzU0hJRlRwcmVzc2VkKG5GbGFnKSxJc0NUUkxwcmVzc2VkKG5GbGFnKSk7DQotCX0NCi0NCi0JRlhfQk9PTCBiRXhpdCA9IEZBTFNFOw0KLQlPbk5vdGlmeVNlbENoYW5nZWQoRkFMU0UsYkV4aXQsIG5GbGFnKTsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QREZXaW5kb3cuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfV25kLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0xpc3RCb3guaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfVXRpbHMuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfU2Nyb2xsQmFyLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0VkaXRDdHJsLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0VkaXQuaCIKKworI2RlZmluZSBJc0Zsb2F0WmVybyhmKQkJCQkJCSgoZikgPCAwLjAwMDEgJiYgKGYpID4gLTAuMDAwMSkKKyNkZWZpbmUgSXNGbG9hdEJpZ2dlcihmYSxmYikJCQkJKChmYSkgPiAoZmIpICYmICFJc0Zsb2F0WmVybygoZmEpIC0gKGZiKSkpCisjZGVmaW5lIElzRmxvYXRTbWFsbGVyKGZhLGZiKQkJCQkoKGZhKSA8IChmYikgJiYgIUlzRmxvYXRaZXJvKChmYSkgLSAoZmIpKSkKKyNkZWZpbmUgSXNGbG9hdEVxdWFsKGZhLGZiKQkJCQkJSXNGbG9hdFplcm8oKGZhKS0oZmIpKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9MaXN0X05vdGlmeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDUFdMX0xpc3RfTm90aWZ5OjpDUFdMX0xpc3RfTm90aWZ5KENQV0xfTGlzdEJveCogcExpc3QpIDogbV9wTGlzdChwTGlzdCkKK3sKKwlBU1NFUlQobV9wTGlzdCAhPSBOVUxMKTsKK30KKworQ1BXTF9MaXN0X05vdGlmeTo6fkNQV0xfTGlzdF9Ob3RpZnkoKQoreworfQorCit2b2lkIENQV0xfTGlzdF9Ob3RpZnk6OklPblNldFNjcm9sbEluZm9ZKEZYX0ZMT0FUIGZQbGF0ZU1pbiwgRlhfRkxPQVQgZlBsYXRlTWF4LCAKKwkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZDb250ZW50TWluLCBGWF9GTE9BVCBmQ29udGVudE1heCwgCisJCQkJCQkJCQkJCQlGWF9GTE9BVCBmU21hbGxTdGVwLCBGWF9GTE9BVCBmQmlnU3RlcCkKK3sKKwlQV0xfU0NST0xMX0lORk8gSW5mbzsKKworCUluZm8uZlBsYXRlV2lkdGggPSBmUGxhdGVNYXggLSBmUGxhdGVNaW47CisJSW5mby5mQ29udGVudE1pbiA9IGZDb250ZW50TWluOworCUluZm8uZkNvbnRlbnRNYXggPSBmQ29udGVudE1heDsKKwlJbmZvLmZTbWFsbFN0ZXAgPSBmU21hbGxTdGVwOworCUluZm8uZkJpZ1N0ZXAgPSBmQmlnU3RlcDsKKworCW1fcExpc3QtPk9uTm90aWZ5KG1fcExpc3QsUE5NX1NFVFNDUk9MTElORk8sU0JUX1ZTQ1JPTEwsKEZYX0lOVFBUUikmSW5mbyk7CisKKwlpZiAoQ1BXTF9TY3JvbGxCYXIgKiBwU2Nyb2xsID0gbV9wTGlzdC0+R2V0VlNjcm9sbEJhcigpKQorCXsKKwkJaWYgKElzRmxvYXRCaWdnZXIoSW5mby5mUGxhdGVXaWR0aCxJbmZvLmZDb250ZW50TWF4LUluZm8uZkNvbnRlbnRNaW4pCisJCQl8fCBJc0Zsb2F0RXF1YWwoSW5mby5mUGxhdGVXaWR0aCxJbmZvLmZDb250ZW50TWF4LUluZm8uZkNvbnRlbnRNaW4pKQorCQl7CisJCQlpZiAocFNjcm9sbC0+SXNWaXNpYmxlKCkpCisJCQl7CisJCQkJcFNjcm9sbC0+U2V0VmlzaWJsZShGQUxTRSk7CisJCQkJbV9wTGlzdC0+UmVQb3NDaGlsZFduZCgpOworCQkJfQkJCQorCQl9CisJCWVsc2UKKwkJeworCQkJaWYgKCFwU2Nyb2xsLT5Jc1Zpc2libGUoKSkKKwkJCXsKKwkJCQlwU2Nyb2xsLT5TZXRWaXNpYmxlKFRSVUUpOwkKKwkJCQltX3BMaXN0LT5SZVBvc0NoaWxkV25kKCk7CisJCQl9CisJCX0KKwl9CQorfQorCit2b2lkIENQV0xfTGlzdF9Ob3RpZnk6OklPblNldFNjcm9sbFBvc1koRlhfRkxPQVQgZnkpCit7CisJbV9wTGlzdC0+T25Ob3RpZnkobV9wTGlzdCxQTk1fU0VUU0NST0xMUE9TLFNCVF9WU0NST0xMLChGWF9JTlRQVFIpJmZ5KTsKK30KKwordm9pZCBDUFdMX0xpc3RfTm90aWZ5OjpJT25JbnZhbGlkYXRlUmVjdChDUERGX1JlY3QgKiBwUmVjdCkKK3sKKwltX3BMaXN0LT5JbnZhbGlkYXRlUmVjdChwUmVjdCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX0xpc3RCb3ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDUFdMX0xpc3RCb3g6OkNQV0xfTGlzdEJveCgpIDoKKwltX3BMaXN0KE5VTEwpLAorCW1fcExpc3ROb3RpZnkoTlVMTCksCisJbV9iTW91c2VEb3duKEZBTFNFKSwKKwltX2JIb3ZlclNlbChGQUxTRSksCisJbV9wRmlsbGVyTm90aWZ5KE5VTEwpCit7CisJbV9wTGlzdCA9IElGWF9MaXN0OjpOZXdMaXN0KCk7CisKKwlBU1NFUlQobV9wTGlzdCAhPSBOVUxMKTsKK30KKworQ1BXTF9MaXN0Qm94Ojp+Q1BXTF9MaXN0Qm94KCkKK3sKKwlJRlhfTGlzdDo6RGVsTGlzdChtX3BMaXN0KTsKKwkKKwlpZiAobV9wTGlzdE5vdGlmeSkKKwl7CisJCWRlbGV0ZSBtX3BMaXN0Tm90aWZ5OworCQltX3BMaXN0Tm90aWZ5ID0gTlVMTDsKKwl9Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQV0xfTGlzdEJveDo6R2V0Q2xhc3NOYW1lKCkgY29uc3QKK3sJCisJcmV0dXJuICJDUFdMX0xpc3RCb3giOworfQorCit2b2lkIENQV0xfTGlzdEJveDo6T25DcmVhdGVkKCkKK3sKKwlpZiAobV9wTGlzdCkKKwl7CisJCWlmIChtX3BMaXN0Tm90aWZ5KSBkZWxldGUgbV9wTGlzdE5vdGlmeTsKKworCQltX3BMaXN0LT5TZXRGb250TWFwKEdldEZvbnRNYXAoKSk7CisJCW1fcExpc3QtPlNldE5vdGlmeShtX3BMaXN0Tm90aWZ5ID0gbmV3IENQV0xfTGlzdF9Ob3RpZnkodGhpcykpOworCQorCQlTZXRIb3ZlclNlbChIYXNGbGFnKFBMQlNfSE9WRVJTRUwpKTsJCisJCW1fcExpc3QtPlNldE11bHRpcGxlU2VsKEhhc0ZsYWcoUExCU19NVUxUSVBMRVNFTCkpOworCQltX3BMaXN0LT5TZXRGb250U2l6ZSh0aGlzLT5HZXRDcmVhdGlvblBhcmFtKCkuZkZvbnRTaXplKTsJCisKKwkJbV9iSG92ZXJTZWwgPSBIYXNGbGFnKFBMQlNfSE9WRVJTRUwpOworCX0KK30KKwordm9pZCBDUFdMX0xpc3RCb3g6Ok9uRGVzdHJveSgpCit7CisJaWYgKG1fcExpc3ROb3RpZnkpCisJeworCQlkZWxldGUgbV9wTGlzdE5vdGlmeTsKKwkJbV9wTGlzdE5vdGlmeSA9IE5VTEw7CisJfQorfQorCit2b2lkIENQV0xfTGlzdEJveDo6R2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oQ0ZYX0J5dGVUZXh0QnVmICYgc0FwcFN0cmVhbSkKK3sKKwlDUFdMX1duZDo6R2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oc0FwcFN0cmVhbSk7CisKKwlDRlhfQnl0ZVRleHRCdWYgc0xpc3RJdGVtczsKKworCWlmIChtX3BMaXN0KQorCXsKKwkJQ1BERl9SZWN0IHJjUGxhdGUgPSBtX3BMaXN0LT5HZXRQbGF0ZVJlY3QoKTsKKwkJZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9wTGlzdC0+R2V0Q291bnQoKTsgaTxzejsgaSsrKQorCQl7CisJCQlDUERGX1JlY3QgcmNJdGVtID0gbV9wTGlzdC0+R2V0SXRlbVJlY3QoaSk7CisKKwkJCWlmIChyY0l0ZW0uYm90dG9tID4gcmNQbGF0ZS50b3AgfHwgcmNJdGVtLnRvcCA8IHJjUGxhdGUuYm90dG9tKSBjb250aW51ZTsKKwkJCQorCQkJQ1BERl9Qb2ludCBwdE9mZnNldChyY0l0ZW0ubGVmdCwgKHJjSXRlbS50b3AgKyByY0l0ZW0uYm90dG9tKSAqIDAuNWYpOworCQkJaWYgKG1fcExpc3QtPklzSXRlbVNlbGVjdGVkKGkpKQorCQkJeworCQkJCXNMaXN0SXRlbXMgPDwgQ1BXTF9VdGlsczo6R2V0UmVjdEZpbGxBcHBTdHJlYW0ocmNJdGVtLFBXTF9ERUZBVUxUX1NFTEJBQ0tDT0xPUik7CisJCQkJQ0ZYX0J5dGVTdHJpbmcgc0l0ZW0gPSBDUFdMX1V0aWxzOjpHZXRFZGl0QXBwU3RyZWFtKG1fcExpc3QtPkdldEl0ZW1FZGl0KGkpLCBwdE9mZnNldCk7CisJCQkJaWYgKHNJdGVtLkdldExlbmd0aCgpID4gMCkKKwkJCQl7CisJCQkJCXNMaXN0SXRlbXMgPDwgIkJUXG4iIDw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKFBXTF9ERUZBVUxUX1NFTFRFWFRDT0xPUikgPDwgc0l0ZW0gPDwgIkVUXG4iOworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlDRlhfQnl0ZVN0cmluZyBzSXRlbSA9IENQV0xfVXRpbHM6OkdldEVkaXRBcHBTdHJlYW0obV9wTGlzdC0+R2V0SXRlbUVkaXQoaSksIHB0T2Zmc2V0KTsKKwkJCQlpZiAoc0l0ZW0uR2V0TGVuZ3RoKCkgPiAwKQorCQkJCXsKKwkJCQkJc0xpc3RJdGVtcyA8PCAiQlRcbiIgPDwgQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oR2V0VGV4dENvbG9yKCkpIDw8IHNJdGVtIDw8ICJFVFxuIjsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZiAoc0xpc3RJdGVtcy5HZXRMZW5ndGgoKSA+IDApCisJeworCQlDRlhfQnl0ZVRleHRCdWYgc0NsaXA7CQkJCisJCUNQREZfUmVjdCByY0NsaWVudCA9IHRoaXMtPkdldENsaWVudFJlY3QoKTsKKworCQlzQ2xpcCA8PCAicVxuIjsKKwkJc0NsaXAgPDwgcmNDbGllbnQubGVmdCA8PCAiICIgPDwgcmNDbGllbnQuYm90dG9tIDw8ICIgIgorCQkJPDwgcmNDbGllbnQucmlnaHQgLSByY0NsaWVudC5sZWZ0IDw8ICIgIiA8PAlyY0NsaWVudC50b3AgLSByY0NsaWVudC5ib3R0b20gPDwgIiByZSBXIG5cbiI7CisKKwkJc0NsaXAgPDwgc0xpc3RJdGVtcyA8PCAiUVxuIjsKKworCQlzQXBwU3RyZWFtIDw8ICIvVHggQk1DXG4iIDw8IHNDbGlwIDw8ICJFTUNcbiI7CisJfQorfQorCit2b2lkIENQV0xfTGlzdEJveDo6RHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpCit7CisJQ1BXTF9XbmQ6OkRyYXdUaGlzQXBwZWFyYW5jZShwRGV2aWNlLHBVc2VyMkRldmljZSk7CisKKwlpZiAobV9wTGlzdCkKKwl7CisJCUNQREZfUmVjdCByY1BsYXRlID0gbV9wTGlzdC0+R2V0UGxhdGVSZWN0KCk7CisJCUNQREZfUmVjdCByY0xpc3QgPSBHZXRMaXN0UmVjdCgpOworCQlDUERGX1JlY3QgcmNDbGllbnQgPSBHZXRDbGllbnRSZWN0KCk7CisKKwkJZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9wTGlzdC0+R2V0Q291bnQoKTsgaTxzejsgaSsrKQorCQl7CisJCQlDUERGX1JlY3QgcmNJdGVtID0gbV9wTGlzdC0+R2V0SXRlbVJlY3QoaSk7CisJCQlpZiAocmNJdGVtLmJvdHRvbSA+IHJjUGxhdGUudG9wIHx8IHJjSXRlbS50b3AgPCByY1BsYXRlLmJvdHRvbSkgY29udGludWU7CisJCQkKKwkJCUNQREZfUG9pbnQgcHRPZmZzZXQocmNJdGVtLmxlZnQsIChyY0l0ZW0udG9wICsgcmNJdGVtLmJvdHRvbSkgKiAwLjVmKTsKKwkJCWlmIChJRlhfRWRpdCogcEVkaXQgPSBtX3BMaXN0LT5HZXRJdGVtRWRpdChpKSkKKwkJCXsKKwkJCQlDUERGX1JlY3QgcmNDb250ZW50ID0gcEVkaXQtPkdldENvbnRlbnRSZWN0KCk7CisJCQkJaWYgKHJjQ29udGVudC5XaWR0aCgpID4gcmNDbGllbnQuV2lkdGgoKSkKKwkJCQkJcmNJdGVtLkludGVyc2VjdChyY0xpc3QpOworCQkJCWVsc2UKKwkJCQkJcmNJdGVtLkludGVyc2VjdChyY0NsaWVudCk7CisJCQl9CisKKwkJCWlmIChtX3BMaXN0LT5Jc0l0ZW1TZWxlY3RlZChpKSkKKwkJCXsKKwkJCS8vCUNQV0xfVXRpbHM6OkRyYXdGaWxsUmVjdChwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHJjSXRlbSwgQXJnYkVuY29kZSgyNTUsMCw1MSwxMTMpKTsKKwkJCQlJRlhfU3lzdGVtSGFuZGxlciogcFN5c0hhbmRsZXIgPSBHZXRTeXN0ZW1IYW5kbGVyKCk7CisJCQkJaWYocFN5c0hhbmRsZXIgJiYgcFN5c0hhbmRsZXItPklzU2VsZWN0aW9uSW1wbGVtZW50ZWQoKSkKKwkJCQl7CisJCQkJCUlGWF9FZGl0OjpEcmF3RWRpdChwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIG1fcExpc3QtPkdldEl0ZW1FZGl0KGkpLCBDUFdMX1V0aWxzOjpQV0xDb2xvclRvRlhDb2xvcihHZXRUZXh0Q29sb3IoKSksIENQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKEdldFRleHRTdHJva2VDb2xvcigpKSwKKwkJCQkJCXJjTGlzdCwgcHRPZmZzZXQsIE5VTEwscFN5c0hhbmRsZXIsIG1fcEZvcm1GaWxsZXIpOworCQkJCQlwU3lzSGFuZGxlci0+T3V0cHV0U2VsZWN0ZWRSZWN0KG1fcEZvcm1GaWxsZXIsIHJjSXRlbSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCUNQV0xfVXRpbHM6OkRyYXdGaWxsUmVjdChwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHJjSXRlbSwgQXJnYkVuY29kZSgyNTUsMCw1MSwxMTMpKTsKKwkJCQkJSUZYX0VkaXQ6OkRyYXdFZGl0KHBEZXZpY2UsIHBVc2VyMkRldmljZSwgbV9wTGlzdC0+R2V0SXRlbUVkaXQoaSksIEFyZ2JFbmNvZGUoMjU1LDI1NSwyNTUsMjU1KSwgMCwKKwkJCQkJCXJjTGlzdCwgcHRPZmZzZXQsIE5VTEwsIHBTeXNIYW5kbGVyLCBtX3BGb3JtRmlsbGVyKTsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJSUZYX1N5c3RlbUhhbmRsZXIqIHBTeXNIYW5kbGVyID0gR2V0U3lzdGVtSGFuZGxlcigpOworCQkJCUlGWF9FZGl0OjpEcmF3RWRpdChwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIG1fcExpc3QtPkdldEl0ZW1FZGl0KGkpLCAKKwkJCQkJCUNQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKEdldFRleHRDb2xvcigpKSwKKwkJCQkJCUNQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKEdldFRleHRTdHJva2VDb2xvcigpKSwKKwkJCQkJCXJjTGlzdCwgcHRPZmZzZXQsIE5VTEwscFN5c0hhbmRsZXIsIE5VTEwpOworCisJCQl9CisJCX0KKwl9Cit9CisKK0ZYX0JPT0wgQ1BXTF9MaXN0Qm94OjpPbktleURvd24oRlhfV09SRCBuQ2hhciwgRlhfRFdPUkQgbkZsYWcpCit7CisJQ1BXTF9XbmQ6Ok9uS2V5RG93bihuQ2hhciwgbkZsYWcpOworCisJaWYgKCFtX3BMaXN0KSByZXR1cm4gRkFMU0U7CisKKwlzd2l0Y2ggKG5DaGFyKQorCXsKKwlkZWZhdWx0OgorCQlyZXR1cm4gRkFMU0U7CisJY2FzZSBGV0xfVktFWV9VcDoKKwljYXNlIEZXTF9WS0VZX0Rvd246CisJY2FzZSBGV0xfVktFWV9Ib21lOgorCWNhc2UgRldMX1ZLRVlfTGVmdDoKKwljYXNlIEZXTF9WS0VZX0VuZDoKKwljYXNlIEZXTF9WS0VZX1JpZ2h0OgorCQlicmVhazsJCisJfQorCisJc3dpdGNoIChuQ2hhcikKKwl7CisJY2FzZSBGV0xfVktFWV9VcDoKKwkJbV9wTGlzdC0+T25WS19VUChJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpOworCQlicmVhazsKKwljYXNlIEZXTF9WS0VZX0Rvd246CisJCW1fcExpc3QtPk9uVktfRE9XTihJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpOworCQlicmVhazsKKwljYXNlIEZXTF9WS0VZX0hvbWU6CisJCW1fcExpc3QtPk9uVktfSE9NRShJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpOworCQlicmVhazsKKwljYXNlIEZXTF9WS0VZX0xlZnQ6CisJCW1fcExpc3QtPk9uVktfTEVGVChJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpOworCQlicmVhazsKKwljYXNlIEZXTF9WS0VZX0VuZDoKKwkJbV9wTGlzdC0+T25WS19FTkQoSXNTSElGVHByZXNzZWQobkZsYWcpLElzQ1RSTHByZXNzZWQobkZsYWcpKTsKKwkJYnJlYWs7CisJY2FzZSBGV0xfVktFWV9SaWdodDoKKwkJbV9wTGlzdC0+T25WS19SSUdIVChJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpOworCQlicmVhazsKKwljYXNlIEZXTF9WS0VZX0RlbGV0ZToKKwkJYnJlYWs7CisJfQorCisJRlhfQk9PTCBiRXhpdCA9IEZBTFNFOworCU9uTm90aWZ5U2VsQ2hhbmdlZChUUlVFLGJFeGl0LG5GbGFnKTsKKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIENQV0xfTGlzdEJveDo6T25DaGFyKEZYX1dPUkQgbkNoYXIsIEZYX0RXT1JEIG5GbGFnKQoreworCUNQV0xfV25kOjpPbkNoYXIobkNoYXIsbkZsYWcpOworCisJaWYgKCFtX3BMaXN0KSByZXR1cm4gRkFMU0U7CisKKwlpZiAoIW1fcExpc3QtPk9uQ2hhcihuQ2hhcixJc1NISUZUcHJlc3NlZChuRmxhZyksSXNDVFJMcHJlc3NlZChuRmxhZykpKSByZXR1cm4gRkFMU0U7CisKKwlGWF9CT09MIGJFeGl0ID0gRkFMU0U7CisJT25Ob3RpZnlTZWxDaGFuZ2VkKFRSVUUsYkV4aXQsIG5GbGFnKTsKKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIENQV0xfTGlzdEJveDo6T25MQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKQoreworCUNQV0xfV25kOjpPbkxCdXR0b25Eb3duKHBvaW50LG5GbGFnKTsKKworCWlmIChDbGllbnRIaXRUZXN0KHBvaW50KSkKKwl7CisJCW1fYk1vdXNlRG93biA9IFRSVUU7CisJCVNldEZvY3VzKCk7CisJCVNldENhcHR1cmUoKTsKKworCQlpZiAobV9wTGlzdCkKKwkJCW1fcExpc3QtPk9uTW91c2VEb3duKHBvaW50LElzU0hJRlRwcmVzc2VkKG5GbGFnKSxJc0NUUkxwcmVzc2VkKG5GbGFnKSk7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wgQ1BXTF9MaXN0Qm94OjpPbkxCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKQoreworCUNQV0xfV25kOjpPbkxCdXR0b25VcChwb2ludCxuRmxhZyk7CisKKwlpZiAobV9iTW91c2VEb3duKQorCXsKKwkJUmVsZWFzZUNhcHR1cmUoKTsKKwkJbV9iTW91c2VEb3duID0gRkFMU0U7CisJfQorCisJRlhfQk9PTCBiRXhpdCA9IEZBTFNFOworCU9uTm90aWZ5U2VsQ2hhbmdlZChGQUxTRSxiRXhpdCxuRmxhZyk7CisKKwlyZXR1cm4gVFJVRTsKK30KKwordm9pZCBDUFdMX0xpc3RCb3g6OlNldEhvdmVyU2VsKEZYX0JPT0wgYkhvdmVyU2VsKQoreworCW1fYkhvdmVyU2VsID0gYkhvdmVyU2VsOworfQorCitGWF9CT09MIENQV0xfTGlzdEJveDo6T25Nb3VzZU1vdmUoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZykKK3sKKwlDUFdMX1duZDo6T25Nb3VzZU1vdmUocG9pbnQsIG5GbGFnKTsKKworCWlmIChtX2JIb3ZlclNlbCAmJiAhSXNDYXB0dXJlTW91c2UoKSAmJiBDbGllbnRIaXRUZXN0KHBvaW50KSkKKwl7CisJCWlmIChtX3BMaXN0KQorCQkJbV9wTGlzdC0+U2VsZWN0KG1fcExpc3QtPkdldEl0ZW1JbmRleChwb2ludCkpOworCX0KKworCWlmIChtX2JNb3VzZURvd24pCisJeworCQlpZiAobV9wTGlzdCkKKwkJCW1fcExpc3QtPk9uTW91c2VNb3ZlKHBvaW50LElzU0hJRlRwcmVzc2VkKG5GbGFnKSxJc0NUUkxwcmVzc2VkKG5GbGFnKSk7CisJfQkKKworCXJldHVybiBUUlVFOworfQorCit2b2lkIENQV0xfTGlzdEJveDo6T25Ob3RpZnkoQ1BXTF9XbmQqIHBXbmQsIEZYX0RXT1JEIG1zZywgRlhfSU5UUFRSIHdQYXJhbSwgRlhfSU5UUFRSIGxQYXJhbSkKK3sKKwlDUFdMX1duZDo6T25Ob3RpZnkocFduZCxtc2csd1BhcmFtLGxQYXJhbSk7CisKKwlGWF9GTE9BVCBmUG9zOwkKKwkKKwlzd2l0Y2ggKG1zZykKKwl7CisJY2FzZSBQTk1fU0VUU0NST0xMSU5GTzoKKwkJc3dpdGNoICh3UGFyYW0pCisJCXsKKwkJY2FzZSBTQlRfVlNDUk9MTDoKKwkJCWlmIChDUFdMX1duZCAqIHBDaGlsZCA9IEdldFZTY3JvbGxCYXIoKSkKKwkJCXsKKwkJCQlwQ2hpbGQtPk9uTm90aWZ5KHBXbmQsUE5NX1NFVFNDUk9MTElORk8sd1BhcmFtLGxQYXJhbSk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFBOTV9TRVRTQ1JPTExQT1M6CQkJCisJCXN3aXRjaCAod1BhcmFtKQorCQl7CisJCWNhc2UgU0JUX1ZTQ1JPTEw6CisJCQlpZiAoQ1BXTF9XbmQgKiBwQ2hpbGQgPSBHZXRWU2Nyb2xsQmFyKCkpCisJCQl7CisJCQkJcENoaWxkLT5Pbk5vdGlmeShwV25kLFBOTV9TRVRTQ1JPTExQT1Msd1BhcmFtLGxQYXJhbSk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFBOTV9TQ1JPTExXSU5ET1c6CisJCWZQb3MgPSAqKEZYX0ZMT0FUKilsUGFyYW07CisJCXN3aXRjaCAod1BhcmFtKQorCQl7CisJCWNhc2UgU0JUX1ZTQ1JPTEw6CisJCQlpZiAobV9wTGlzdCkKKwkJCQltX3BMaXN0LT5TZXRTY3JvbGxQb3MoQ1BERl9Qb2ludCgwLGZQb3MpKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KK30KKwordm9pZCBDUFdMX0xpc3RCb3g6OktpbGxGb2N1cygpCit7CisJQ1BXTF9XbmQ6OktpbGxGb2N1cygpOworCisJLyoKKwlpZiAodGhpcy0+SXNNdWx0aXBsZVNlbCgpKQorCXsKKwkJZm9yKEZYX0lOVDMyIGk9MDtpPHRoaXMtPkdldENvdW50KCk7aSsrKQorCQl7CisJCQlpZiAodGhpcy0+SXNMaXN0SXRlbVNlbGVjdGVkKGkpKQorCQkJeworCQkJCWlmICghSXNMaXN0SXRlbVZpc2libGUoaSkpCisJCQkJCXRoaXMtPlNjcm9sbFRvTGlzdEl0ZW0oaSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJZWxzZQorCXsKKwkJaWYgKCFJc0xpc3RJdGVtVmlzaWJsZSh0aGlzLT5HZXRDdXJTZWwoKSkpCisJCQl0aGlzLT5TY3JvbGxUb0xpc3RJdGVtKHRoaXMtPkdldEN1clNlbCgpKTsKKwl9CisKKwlTZXRMaXN0SXRlbUNhcmV0KG1fbkNhcmV0SW5kZXgsRkFMU0UpOworCSovCit9CisKK3ZvaWQgQ1BXTF9MaXN0Qm94OjpSZVBvc0NoaWxkV25kKCkKK3sKKwlDUFdMX1duZDo6UmVQb3NDaGlsZFduZCgpOworCisJaWYgKG1fcExpc3QpCisJCW1fcExpc3QtPlNldFBsYXRlUmVjdChHZXRMaXN0UmVjdCgpKTsKK30KKwordm9pZCBDUFdMX0xpc3RCb3g6Ok9uTm90aWZ5U2VsQ2hhbmdlZChGWF9CT09MIGJLZXlEb3duLCBGWF9CT09MICYgYkV4aXQsICBGWF9EV09SRCBuRmxhZykKK3sKKwlpZiAobV9wRmlsbGVyTm90aWZ5KQorCXsJCQorCQlGWF9CT09MIGJSQyA9IFRSVUU7CisJCUNGWF9XaWRlU3RyaW5nIHN3Q2hhbmdlID0gR2V0VGV4dCgpOworCQlDRlhfV2lkZVN0cmluZyBzdHJDaGFuZ2VFeDsKKwkJaW50IG5TZWxTdGFydCA9IDA7CisJCWludCBuU2VsRW5kID0gc3dDaGFuZ2UuR2V0TGVuZ3RoKCk7CisJCW1fcEZpbGxlck5vdGlmeS0+T25CZWZvcmVLZXlTdHJva2UoRkFMU0UsIEdldEF0dGFjaGVkRGF0YSgpLCAwLCBzd0NoYW5nZSwgc3RyQ2hhbmdlRXgsIG5TZWxTdGFydCwgblNlbEVuZCwgYktleURvd24sIGJSQywgYkV4aXQsIG5GbGFnKTsKKwkJaWYgKGJFeGl0KSByZXR1cm47CisKKwkJbV9wRmlsbGVyTm90aWZ5LT5PbkFmdGVyS2V5U3Ryb2tlKEZBTFNFLCBHZXRBdHRhY2hlZERhdGEoKSwgYkV4aXQsbkZsYWcpOworCX0KK30KKworQ1BERl9SZWN0IENQV0xfTGlzdEJveDo6R2V0Rm9jdXNSZWN0KCkgY29uc3QKK3sKKwlpZiAobV9wTGlzdCAmJiBtX3BMaXN0LT5Jc011bHRpcGxlU2VsKCkpCisJeworCQlDUERGX1JlY3QgcmNDYXJldCA9IG1fcExpc3QtPkdldEl0ZW1SZWN0KG1fcExpc3QtPkdldENhcmV0KCkpOworCQlyY0NhcmV0LkludGVyc2VjdChHZXRDbGllbnRSZWN0KCkpOworCQlyZXR1cm4gcmNDYXJldDsKKwl9CisJCisJcmV0dXJuIENQV0xfV25kOjpHZXRGb2N1c1JlY3QoKTsKK30KKwordm9pZCBDUFdMX0xpc3RCb3g6OkFkZFN0cmluZyhGWF9MUENXU1RSIHN0cmluZykKK3sKKwlpZiAobV9wTGlzdCkKKwl7CQkKKwkJbV9wTGlzdC0+QWRkU3RyaW5nKHN0cmluZyk7CisJfQorfQorCit2b2lkIENQV0xfTGlzdEJveDo6U2V0VGV4dChGWF9MUENXU1RSIGNzVGV4dCxGWF9CT09MIGJSZWZyZXNoKQoreworCS8vcmV0dXJuIENQREZfTGlzdDo6U2V0VGV4dChjc1RleHQsYlJlZnJlc2gpOworfQorCitDRlhfV2lkZVN0cmluZyBDUFdMX0xpc3RCb3g6OkdldFRleHQoKSBjb25zdAoreworCWlmIChtX3BMaXN0KQorCQlyZXR1cm4gbV9wTGlzdC0+R2V0VGV4dCgpOworCisJcmV0dXJuIEwiIjsKK30KKwordm9pZCBDUFdMX0xpc3RCb3g6OlNldEZvbnRTaXplKEZYX0ZMT0FUIGZGb250U2l6ZSkKK3sKKwlpZiAobV9wTGlzdCkKKwkJbV9wTGlzdC0+U2V0Rm9udFNpemUoZkZvbnRTaXplKTsKK30KKworRlhfRkxPQVQgQ1BXTF9MaXN0Qm94OjpHZXRGb250U2l6ZSgpIGNvbnN0Cit7CisJaWYgKG1fcExpc3QpCisJCXJldHVybiBtX3BMaXN0LT5HZXRGb250U2l6ZSgpOworCXJldHVybiAwLjBmOworfQorCit2b2lkIENQV0xfTGlzdEJveDo6U2VsZWN0KEZYX0lOVDMyIG5JdGVtSW5kZXgpCit7CisJaWYgKG1fcExpc3QpCisJCW1fcExpc3QtPlNlbGVjdChuSXRlbUluZGV4KTsKK30KKwordm9pZCBDUFdMX0xpc3RCb3g6OlNldENhcmV0KEZYX0lOVDMyIG5JdGVtSW5kZXgpCit7CisJaWYgKG1fcExpc3QpCisJCW1fcExpc3QtPlNldENhcmV0KG5JdGVtSW5kZXgpOworfQorCit2b2lkIENQV0xfTGlzdEJveDo6U2V0VG9wVmlzaWJsZUluZGV4KEZYX0lOVDMyIG5JdGVtSW5kZXgpCit7CisJaWYgKG1fcExpc3QpCisJCW1fcExpc3QtPlNldFRvcEl0ZW0obkl0ZW1JbmRleCk7Cit9CisKK3ZvaWQgQ1BXTF9MaXN0Qm94OjpTY3JvbGxUb0xpc3RJdGVtKEZYX0lOVDMyIG5JdGVtSW5kZXgpCit7CisJaWYgKG1fcExpc3QpCisJCW1fcExpc3QtPlNjcm9sbFRvTGlzdEl0ZW0obkl0ZW1JbmRleCk7Cit9CisKK3ZvaWQgQ1BXTF9MaXN0Qm94OjpSZXNldENvbnRlbnQoKQoreworCWlmIChtX3BMaXN0KQorCQltX3BMaXN0LT5FbXB0eSgpOworfQorCit2b2lkIENQV0xfTGlzdEJveDo6UmVzZXQoKQoreworCWlmIChtX3BMaXN0KQorCQltX3BMaXN0LT5DYW5jZWwoKTsKK30KKworRlhfQk9PTCBDUFdMX0xpc3RCb3g6OklzTXVsdGlwbGVTZWwoKSBjb25zdAoreworCWlmIChtX3BMaXN0KQorCQlyZXR1cm4gbV9wTGlzdC0+SXNNdWx0aXBsZVNlbCgpOworCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9JTlQzMiBDUFdMX0xpc3RCb3g6OkdldENhcmV0SW5kZXgoKSBjb25zdAoreworCWlmIChtX3BMaXN0KQorCQlyZXR1cm4gbV9wTGlzdC0+R2V0Q2FyZXQoKTsKKworCXJldHVybiAtMTsKK30KKworRlhfSU5UMzIgQ1BXTF9MaXN0Qm94OjpHZXRDdXJTZWwoKSBjb25zdAoreworCWlmIChtX3BMaXN0KQorCQlyZXR1cm4gbV9wTGlzdC0+R2V0U2VsZWN0KCk7CisKKwlyZXR1cm4gLTE7Cit9CisKK0ZYX0JPT0wgQ1BXTF9MaXN0Qm94OjpJc0l0ZW1TZWxlY3RlZChGWF9JTlQzMiBuSXRlbUluZGV4KSBjb25zdAoreworCWlmIChtX3BMaXN0KQorCQlyZXR1cm4gbV9wTGlzdC0+SXNJdGVtU2VsZWN0ZWQobkl0ZW1JbmRleCk7CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0lOVDMyIENQV0xfTGlzdEJveDo6R2V0VG9wVmlzaWJsZUluZGV4KCkgY29uc3QKK3sKKwlpZiAobV9wTGlzdCkKKwl7CisJCW1fcExpc3QtPlNjcm9sbFRvTGlzdEl0ZW0obV9wTGlzdC0+R2V0Rmlyc3RTZWxlY3RlZCgpKTsKKwkJcmV0dXJuIG1fcExpc3QtPkdldFRvcEl0ZW0oKTsKKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKK0ZYX0lOVDMyIENQV0xfTGlzdEJveDo6R2V0Q291bnQoKSBjb25zdAoreworCWlmIChtX3BMaXN0KQorCQlyZXR1cm4gbV9wTGlzdC0+R2V0Q291bnQoKTsKKworCXJldHVybiAwOworfQorCitGWF9JTlQzMiBDUFdMX0xpc3RCb3g6OkZpbmROZXh0KEZYX0lOVDMyIG5JbmRleCxGWF9XQ0hBUiBuQ2hhcikgY29uc3QKK3sKKwlpZiAobV9wTGlzdCkKKwkJcmV0dXJuIG1fcExpc3QtPkZpbmROZXh0KG5JbmRleCxuQ2hhcik7CisKKwlyZXR1cm4gbkluZGV4OworfQorCitDUERGX1JlY3QgQ1BXTF9MaXN0Qm94OjpHZXRDb250ZW50UmVjdCgpIGNvbnN0Cit7CisJaWYgKG1fcExpc3QpCisJCXJldHVybiBtX3BMaXN0LT5HZXRDb250ZW50UmVjdCgpOworCisJcmV0dXJuIENQREZfUmVjdCgpOworfQorCitGWF9GTE9BVCBDUFdMX0xpc3RCb3g6OkdldEZpcnN0SGVpZ2h0KCkgY29uc3QKK3sKKwlpZiAobV9wTGlzdCkKKwkJcmV0dXJuIG1fcExpc3QtPkdldEZpcnN0SGVpZ2h0KCk7CisKKwlyZXR1cm4gMC4wZjsKK30KKworQ1BERl9SZWN0IENQV0xfTGlzdEJveDo6R2V0TGlzdFJlY3QoKSBjb25zdAoreworCXJldHVybiBDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdChHZXRXaW5kb3dSZWN0KCksKEZYX0ZMT0FUKShHZXRCb3JkZXJXaWR0aCgpK0dldElubmVyQm9yZGVyV2lkdGgoKSkpOworfQorCitGWF9CT09MCUNQV0xfTGlzdEJveDo6T25Nb3VzZVdoZWVsKHNob3J0IHpEZWx0YSwgY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZykKK3sKKwlpZiAoIW1fcExpc3QpIHJldHVybiBGQUxTRTsKKworCWlmICh6RGVsdGEgPCAwKQorCXsKKwkJbV9wTGlzdC0+T25WS19ET1dOKElzU0hJRlRwcmVzc2VkKG5GbGFnKSxJc0NUUkxwcmVzc2VkKG5GbGFnKSk7CisJfQorCWVsc2UKKwl7CisJCW1fcExpc3QtPk9uVktfVVAoSXNTSElGVHByZXNzZWQobkZsYWcpLElzQ1RSTHByZXNzZWQobkZsYWcpKTsKKwl9CisKKwlGWF9CT09MIGJFeGl0ID0gRkFMU0U7CisJT25Ob3RpZnlTZWxDaGFuZ2VkKEZBTFNFLGJFeGl0LCBuRmxhZyk7CisJcmV0dXJuIFRSVUU7Cit9CisKZGlmZiAtLWdpdCBhL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfTGlzdEN0cmwuY3BwIGIvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9MaXN0Q3RybC5jcHAKaW5kZXggNjAzYmI0YS4uOWFjMThmZCAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9MaXN0Q3RybC5jcHAKKysrIGIvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9MaXN0Q3RybC5jcHAKQEAgLTEsMjQ1ICsxLDI0NSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BERldpbmRvdy5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfV25kLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9MaXN0Q3RybC5oIg0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9MaXN0Q3RybCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ1BXTF9MaXN0Q3RybDo6Q1BXTF9MaXN0Q3RybCgpIDogDQotCW1fcmNDb250ZW50KDAsMCwwLDApLA0KLQltX3B0U2Nyb2xsKDAsMCksIA0KLQltX2ZJdGVtU3BhY2UoMC4wZiksDQotCW1fZlRvcFNwYWNlKDAuMGYpLA0KLQltX2ZCb3R0b21TcGFjZSgwLjBmKQ0KLXsNCi19DQotDQotQ1BXTF9MaXN0Q3RybDo6fkNQV0xfTGlzdEN0cmwoKQ0KLXsNCi19DQotDQotdm9pZCBDUFdMX0xpc3RDdHJsOjpTZXRTY3JvbGxQb3MoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpDQotew0KLQltX3B0U2Nyb2xsID0gcG9pbnQ7DQotDQotCWlmIChtX3B0U2Nyb2xsLnggPCBtX3JjQ29udGVudC5sZWZ0KQ0KLQkJbV9wdFNjcm9sbC54ID0gbV9yY0NvbnRlbnQubGVmdDsNCi0NCi0JaWYgKG1fcHRTY3JvbGwueCA+IG1fcmNDb250ZW50LnJpZ2h0KQ0KLQkJbV9wdFNjcm9sbC54ID0gbV9yY0NvbnRlbnQucmlnaHQ7DQotDQotCWlmIChtX3B0U2Nyb2xsLnkgPiBtX3JjQ29udGVudC50b3ApDQotCQltX3B0U2Nyb2xsLnkgPSBtX3JjQ29udGVudC50b3A7DQotDQotCWlmIChtX3B0U2Nyb2xsLnkgPCBtX3JjQ29udGVudC5ib3R0b20pDQotCQltX3B0U2Nyb2xsLnkgPSBtX3JjQ29udGVudC5ib3R0b207CQ0KLX0NCi0NCi1DUERGX1BvaW50IENQV0xfTGlzdEN0cmw6OkdldFNjcm9sbFBvcygpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9wdFNjcm9sbDsNCi19DQotDQotQ1BERl9SZWN0IENQV0xfTGlzdEN0cmw6OkdldFNjcm9sbEFyZWEoKSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fcmNDb250ZW50Ow0KLX0NCi0NCi12b2lkIENQV0xfTGlzdEN0cmw6OlJlc2V0RmFjZSgpDQotew0KLQlSZXNldEFsbChGQUxTRSwgMCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9MaXN0Q3RybDo6UmVzZXRDb250ZW50KEZYX0lOVDMyIG5TdGFydCkNCi17DQotCWlmIChuU3RhcnQgPCAwKQ0KLQkJblN0YXJ0ID0gMDsNCi0JaWYgKG5TdGFydCA+PSAwICYmIG5TdGFydCA8IG1fYUNoaWxkcmVuLkdldFNpemUoKSkNCi0JCVJlc2V0QWxsKFRSVUUsIG5TdGFydCk7DQotfQ0KLQ0KLUZYX0ZMT0FUIENQV0xfTGlzdEN0cmw6OkdldENvbnRlbnRzSGVpZ2h0KEZYX0ZMT0FUIGZMaW1pdFdpZHRoKQ0KLXsNCi0JRlhfRkxPQVQgZlJldCA9IG1fZlRvcFNwYWNlOw0KLQ0KLQlGWF9GTE9BVCBmQm9yZGVyV2lkdGggPSAoRlhfRkxPQVQpdGhpcy0+R2V0Qm9yZGVyV2lkdGgoKTsNCi0NCi0JaWYgKGZMaW1pdFdpZHRoID4gZkJvcmRlcldpZHRoKiAyKQ0KLQl7DQotCQlmb3IgKEZYX0lOVDMyIGk9MCxzej1tX2FDaGlsZHJlbi5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0JCXsNCi0JCQlpZiAoQ1BXTF9XbmQqIHBDaGlsZCA9IG1fYUNoaWxkcmVuLkdldEF0KGkpKQ0KLQkJCXsNCi0JCQkJRlhfRkxPQVQgZkxlZnQgPSBwQ2hpbGQtPkdldEl0ZW1MZWZ0TWFyZ2luKCk7DQotCQkJCUZYX0ZMT0FUIGZSaWdodCA9IHBDaGlsZC0+R2V0SXRlbVJpZ2h0TWFyZ2luKCk7DQotDQotCQkJCWZSZXQgKz0gcENoaWxkLT5HZXRJdGVtSGVpZ2h0KGZMaW1pdFdpZHRoIC0gZkJvcmRlcldpZHRoKiAyIC0gZkxlZnQgLSBmUmlnaHQpOw0KLQkJCQlmUmV0ICs9IG1fZkl0ZW1TcGFjZTsNCi0JCQl9DQotCQl9DQotDQotCQlmUmV0IC09IG1fZkl0ZW1TcGFjZTsNCi0JfQ0KLQ0KLQlmUmV0ICs9IG1fZkJvdHRvbVNwYWNlOw0KLQ0KLQlyZXR1cm4gZlJldDsNCi19DQotDQotdm9pZCBDUFdMX0xpc3RDdHJsOjpSZXNldEFsbChGWF9CT09MIGJNb3ZlLCBGWF9JTlQzMiBuU3RhcnQpDQotew0KLQlDUERGX1JlY3QgcmNDbGllbnQgPSBHZXRDbGllbnRSZWN0KCk7DQotDQotCUZYX0ZMT0FUIGZXaWR0aCA9IHJjQ2xpZW50LldpZHRoKCk7DQotDQotCUZYX0ZMT0FUIGZ5ID0gMC4wZiAtIG1fZlRvcFNwYWNlOw0KLQ0KLQlpZiAoblN0YXJ0LTEgPj0gMCAmJiBuU3RhcnQtMSA8IG1fYUNoaWxkcmVuLkdldFNpemUoKSkNCi0JCWlmIChDUFdMX1duZCogcENoaWxkID0gbV9hQ2hpbGRyZW4uR2V0QXQoblN0YXJ0LTEpKQ0KLQkJCWZ5ID0gcENoaWxkLT5HZXRXaW5kb3dSZWN0KCkuYm90dG9tIC0gbV9mSXRlbVNwYWNlOw0KLQ0KLQlmb3IgKEZYX0lOVDMyIGk9blN0YXJ0LHN6PW1fYUNoaWxkcmVuLkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQl7DQotCQlpZiAoQ1BXTF9XbmQqIHBDaGlsZCA9IG1fYUNoaWxkcmVuLkdldEF0KGkpKQ0KLQkJew0KLQkJCUZYX0ZMT0FUIGZMZWZ0ID0gcENoaWxkLT5HZXRJdGVtTGVmdE1hcmdpbigpOw0KLQkJCUZYX0ZMT0FUIGZSaWdodCA9IHBDaGlsZC0+R2V0SXRlbVJpZ2h0TWFyZ2luKCk7DQotDQotCQkJcENoaWxkLT5TZXRDaGlsZE1hdHJpeCgNCi0JCQkJQ1BERl9NYXRyaXgoMSwwLDAsMSwgDQotCQkJCXJjQ2xpZW50LmxlZnQgLSBtX3B0U2Nyb2xsLngsIA0KLQkJCQlyY0NsaWVudC50b3AgLSBtX3B0U2Nyb2xsLnkpDQotCQkJCSk7DQotDQotCQkJaWYgKGJNb3ZlKQ0KLQkJCXsNCi0JCQkJRlhfRkxPQVQgZkl0ZW1IZWlnaHQgPSBwQ2hpbGQtPkdldEl0ZW1IZWlnaHQoZldpZHRoIC0gZkxlZnQgLSBmUmlnaHQpOw0KLQkJCQlwQ2hpbGQtPk1vdmUoQ1BERl9SZWN0KGZMZWZ0LCBmeS1mSXRlbUhlaWdodCwgZldpZHRoIC0gZlJpZ2h0LCBmeSksIFRSVUUsIEZBTFNFKTsNCi0JCQkJZnkgLT0gZkl0ZW1IZWlnaHQ7DQotCQkJCWZ5IC09IG1fZkl0ZW1TcGFjZTsNCi0JCQl9DQotCQl9DQotCX0NCi0NCi0JZnkgKz0gbV9mSXRlbVNwYWNlOw0KLQ0KLQlmeSAtPSBtX2ZCb3R0b21TcGFjZTsNCi0NCi0JaWYgKGJNb3ZlKQ0KLQl7DQotCQltX3JjQ29udGVudC5sZWZ0ID0gMDsNCi0JCW1fcmNDb250ZW50LnRvcCA9IDA7DQotCQltX3JjQ29udGVudC5yaWdodCA9IGZXaWR0aDsNCi0JCW1fcmNDb250ZW50LmJvdHRvbSA9IGZ5Ow0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9MaXN0Q3RybDo6U2V0SXRlbVNwYWNlKEZYX0ZMT0FUIGZTcGFjZSkNCi17DQotCW1fZkl0ZW1TcGFjZSA9IGZTcGFjZTsNCi19DQotDQotdm9pZCBDUFdMX0xpc3RDdHJsOjpTZXRUb3BTcGFjZShGWF9GTE9BVCBmU3BhY2UpDQotew0KLQltX2ZUb3BTcGFjZSA9IGZTcGFjZTsNCi19DQotDQotdm9pZCBDUFdMX0xpc3RDdHJsOjpTZXRCb3R0b21TcGFjZShGWF9GTE9BVCBmU3BhY2UpDQotew0KLQltX2ZCb3R0b21TcGFjZSA9IGZTcGFjZTsNCi19DQotDQotdm9pZCBDUFdMX0xpc3RDdHJsOjpSZVBvc0NoaWxkV25kKCkNCi17DQotCVJlc2V0RmFjZSgpOw0KLX0NCi0NCi12b2lkIENQV0xfTGlzdEN0cmw6OkRyYXdDaGlsZEFwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSkNCi17DQotCXBEZXZpY2UtPlNhdmVTdGF0ZSgpOw0KLQlDUERGX1JlY3QgcmNDbGllbnQgPSBHZXRDbGllbnRSZWN0KCk7DQotCUNQREZfUmVjdCByY1RlbXAgPSByY0NsaWVudDsNCi0JcFVzZXIyRGV2aWNlLT5UcmFuc2Zvcm1SZWN0KHJjVGVtcCk7DQotCUZYX1JFQ1QgcmNDbGlwKChGWF9JTlQzMilyY1RlbXAubGVmdCwNCi0JCShGWF9JTlQzMilyY1RlbXAuYm90dG9tLA0KLQkJKEZYX0lOVDMyKXJjVGVtcC5yaWdodCwNCi0JCShGWF9JTlQzMilyY1RlbXAudG9wKTsNCi0NCi0JcERldmljZS0+U2V0Q2xpcF9SZWN0KCZyY0NsaXApOw0KLQ0KLQlmb3IgKEZYX0lOVDMyIGk9MCxzej1tX2FDaGlsZHJlbi5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJaWYgKENQV0xfV25kICogcENoaWxkID0gbV9hQ2hpbGRyZW4uR2V0QXQoaSkpDQotCQl7DQotCQkJQ1BERl9SZWN0IHJjQ2hpbGQgPSBwQ2hpbGQtPkNoaWxkVG9QYXJlbnQocENoaWxkLT5HZXRXaW5kb3dSZWN0KCkpOw0KLQkJCWlmICghKHJjQ2hpbGQudG9wIDwgcmNDbGllbnQuYm90dG9tIHx8IHJjQ2hpbGQuYm90dG9tID4gcmNDbGllbnQudG9wKSkNCi0JCQl7DQotCQkJCUNQREZfTWF0cml4IG10ID0gcENoaWxkLT5HZXRDaGlsZE1hdHJpeCgpOw0KLQkJCQlpZiAobXQuSXNJZGVudGl0eSgpKQ0KLQkJCQl7DQotCQkJCQlwQ2hpbGQtPkRyYXdBcHBlYXJhbmNlKHBEZXZpY2UscFVzZXIyRGV2aWNlKTsNCi0JCQkJfQ0KLQkJCQllbHNlDQotCQkJCXsNCi0JCQkJCW10LkNvbmNhdCgqcFVzZXIyRGV2aWNlKTsNCi0JCQkJCXBDaGlsZC0+RHJhd0FwcGVhcmFuY2UocERldmljZSwmbXQpOw0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQl9DQotCQ0KLQlwRGV2aWNlLT5SZXN0b3JlU3RhdGUoKTsNCi19DQotDQotRlhfSU5UMzIgQ1BXTF9MaXN0Q3RybDo6R2V0SXRlbUluZGV4KENQV0xfV25kKiBwSXRlbSkNCi17DQotCWZvciAoRlhfSU5UMzIgaT0wLCBzej1tX2FDaGlsZHJlbi5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJaWYgKHBJdGVtID09IG1fYUNoaWxkcmVuLkdldEF0KGkpKQ0KLQkJCXJldHVybiBpOw0KLQl9DQotDQotCXJldHVybiAtMTsNCi19DQotDQotQ1BERl9Qb2ludCBDUFdMX0xpc3RDdHJsOjpJblRvT3V0KGNvbnN0IENQREZfUG9pbnQmIHBvaW50KSBjb25zdA0KLXsNCi0JQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOw0KLQ0KLQlyZXR1cm4gQ1BERl9Qb2ludChwb2ludC54ICsgcmNDbGllbnQubGVmdCAtIG1fcHRTY3JvbGwueCwgDQotCQlwb2ludC55ICsgcmNDbGllbnQudG9wIC0gbV9wdFNjcm9sbC55KTsNCi19DQotDQotQ1BERl9Qb2ludCBDUFdMX0xpc3RDdHJsOjpPdXRUb0luKGNvbnN0IENQREZfUG9pbnQmIHBvaW50KSBjb25zdA0KLXsNCi0JQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOw0KLQ0KLQlyZXR1cm4gQ1BERl9Qb2ludChwb2ludC54IC0gcmNDbGllbnQubGVmdCArIG1fcHRTY3JvbGwueCwgDQotCQlwb2ludC55IC0gcmNDbGllbnQudG9wICsgbV9wdFNjcm9sbC55KTsNCi19DQotDQotQ1BERl9SZWN0IENQV0xfTGlzdEN0cmw6OkluVG9PdXQoY29uc3QgQ1BERl9SZWN0JiByZWN0KSBjb25zdA0KLXsNCi0JQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOw0KLQ0KLQlyZXR1cm4gQ1BERl9SZWN0KHJlY3QubGVmdCArIHJjQ2xpZW50LmxlZnQgLSBtX3B0U2Nyb2xsLngsDQotCQlyZWN0LmJvdHRvbSArIHJjQ2xpZW50LnRvcCAtIG1fcHRTY3JvbGwueSwNCi0JCXJlY3QucmlnaHQgKyByY0NsaWVudC5sZWZ0IC0gbV9wdFNjcm9sbC54LA0KLQkJcmVjdC50b3AgKyByY0NsaWVudC50b3AgLSBtX3B0U2Nyb2xsLnkpOw0KLX0NCi0NCi1DUERGX1JlY3QgQ1BXTF9MaXN0Q3RybDo6T3V0VG9Jbihjb25zdCBDUERGX1JlY3QmIHJlY3QpIGNvbnN0DQotew0KLQlDUERGX1JlY3QgcmNDbGllbnQgPSBHZXRDbGllbnRSZWN0KCk7DQotDQotCXJldHVybiBDUERGX1JlY3QocmVjdC5sZWZ0IC0gcmNDbGllbnQubGVmdCArIG1fcHRTY3JvbGwueCwNCi0JCXJlY3QuYm90dG9tIC0gcmNDbGllbnQudG9wICsgbV9wdFNjcm9sbC55LA0KLQkJcmVjdC5yaWdodCAtIHJjQ2xpZW50LmxlZnQgKyBtX3B0U2Nyb2xsLngsDQotCQlyZWN0LnRvcCAtIHJjQ2xpZW50LnRvcCArIG1fcHRTY3JvbGwueSk7DQotfQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QREZXaW5kb3cuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfV25kLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0xpc3RDdHJsLmgiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9MaXN0Q3RybCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0NQV0xfTGlzdEN0cmw6OkNQV0xfTGlzdEN0cmwoKSA6IAorCW1fcmNDb250ZW50KDAsMCwwLDApLAorCW1fcHRTY3JvbGwoMCwwKSwgCisJbV9mSXRlbVNwYWNlKDAuMGYpLAorCW1fZlRvcFNwYWNlKDAuMGYpLAorCW1fZkJvdHRvbVNwYWNlKDAuMGYpCit7Cit9CisKK0NQV0xfTGlzdEN0cmw6On5DUFdMX0xpc3RDdHJsKCkKK3sKK30KKwordm9pZCBDUFdMX0xpc3RDdHJsOjpTZXRTY3JvbGxQb3MoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpCit7CisJbV9wdFNjcm9sbCA9IHBvaW50OworCisJaWYgKG1fcHRTY3JvbGwueCA8IG1fcmNDb250ZW50LmxlZnQpCisJCW1fcHRTY3JvbGwueCA9IG1fcmNDb250ZW50LmxlZnQ7CisKKwlpZiAobV9wdFNjcm9sbC54ID4gbV9yY0NvbnRlbnQucmlnaHQpCisJCW1fcHRTY3JvbGwueCA9IG1fcmNDb250ZW50LnJpZ2h0OworCisJaWYgKG1fcHRTY3JvbGwueSA+IG1fcmNDb250ZW50LnRvcCkKKwkJbV9wdFNjcm9sbC55ID0gbV9yY0NvbnRlbnQudG9wOworCisJaWYgKG1fcHRTY3JvbGwueSA8IG1fcmNDb250ZW50LmJvdHRvbSkKKwkJbV9wdFNjcm9sbC55ID0gbV9yY0NvbnRlbnQuYm90dG9tOwkKK30KKworQ1BERl9Qb2ludCBDUFdMX0xpc3RDdHJsOjpHZXRTY3JvbGxQb3MoKSBjb25zdAoreworCXJldHVybiBtX3B0U2Nyb2xsOworfQorCitDUERGX1JlY3QgQ1BXTF9MaXN0Q3RybDo6R2V0U2Nyb2xsQXJlYSgpIGNvbnN0Cit7CisJcmV0dXJuIG1fcmNDb250ZW50OworfQorCit2b2lkIENQV0xfTGlzdEN0cmw6OlJlc2V0RmFjZSgpCit7CisJUmVzZXRBbGwoRkFMU0UsIDApOworfQorCit2b2lkIENQV0xfTGlzdEN0cmw6OlJlc2V0Q29udGVudChGWF9JTlQzMiBuU3RhcnQpCit7CisJaWYgKG5TdGFydCA8IDApCisJCW5TdGFydCA9IDA7CisJaWYgKG5TdGFydCA+PSAwICYmIG5TdGFydCA8IG1fYUNoaWxkcmVuLkdldFNpemUoKSkKKwkJUmVzZXRBbGwoVFJVRSwgblN0YXJ0KTsKK30KKworRlhfRkxPQVQgQ1BXTF9MaXN0Q3RybDo6R2V0Q29udGVudHNIZWlnaHQoRlhfRkxPQVQgZkxpbWl0V2lkdGgpCit7CisJRlhfRkxPQVQgZlJldCA9IG1fZlRvcFNwYWNlOworCisJRlhfRkxPQVQgZkJvcmRlcldpZHRoID0gKEZYX0ZMT0FUKXRoaXMtPkdldEJvcmRlcldpZHRoKCk7CisKKwlpZiAoZkxpbWl0V2lkdGggPiBmQm9yZGVyV2lkdGgqIDIpCisJeworCQlmb3IgKEZYX0lOVDMyIGk9MCxzej1tX2FDaGlsZHJlbi5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwkJeworCQkJaWYgKENQV0xfV25kKiBwQ2hpbGQgPSBtX2FDaGlsZHJlbi5HZXRBdChpKSkKKwkJCXsKKwkJCQlGWF9GTE9BVCBmTGVmdCA9IHBDaGlsZC0+R2V0SXRlbUxlZnRNYXJnaW4oKTsKKwkJCQlGWF9GTE9BVCBmUmlnaHQgPSBwQ2hpbGQtPkdldEl0ZW1SaWdodE1hcmdpbigpOworCisJCQkJZlJldCArPSBwQ2hpbGQtPkdldEl0ZW1IZWlnaHQoZkxpbWl0V2lkdGggLSBmQm9yZGVyV2lkdGgqIDIgLSBmTGVmdCAtIGZSaWdodCk7CisJCQkJZlJldCArPSBtX2ZJdGVtU3BhY2U7CisJCQl9CisJCX0KKworCQlmUmV0IC09IG1fZkl0ZW1TcGFjZTsKKwl9CisKKwlmUmV0ICs9IG1fZkJvdHRvbVNwYWNlOworCisJcmV0dXJuIGZSZXQ7Cit9CisKK3ZvaWQgQ1BXTF9MaXN0Q3RybDo6UmVzZXRBbGwoRlhfQk9PTCBiTW92ZSwgRlhfSU5UMzIgblN0YXJ0KQoreworCUNQREZfUmVjdCByY0NsaWVudCA9IEdldENsaWVudFJlY3QoKTsKKworCUZYX0ZMT0FUIGZXaWR0aCA9IHJjQ2xpZW50LldpZHRoKCk7CisKKwlGWF9GTE9BVCBmeSA9IDAuMGYgLSBtX2ZUb3BTcGFjZTsKKworCWlmIChuU3RhcnQtMSA+PSAwICYmIG5TdGFydC0xIDwgbV9hQ2hpbGRyZW4uR2V0U2l6ZSgpKQorCQlpZiAoQ1BXTF9XbmQqIHBDaGlsZCA9IG1fYUNoaWxkcmVuLkdldEF0KG5TdGFydC0xKSkKKwkJCWZ5ID0gcENoaWxkLT5HZXRXaW5kb3dSZWN0KCkuYm90dG9tIC0gbV9mSXRlbVNwYWNlOworCisJZm9yIChGWF9JTlQzMiBpPW5TdGFydCxzej1tX2FDaGlsZHJlbi5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwl7CisJCWlmIChDUFdMX1duZCogcENoaWxkID0gbV9hQ2hpbGRyZW4uR2V0QXQoaSkpCisJCXsKKwkJCUZYX0ZMT0FUIGZMZWZ0ID0gcENoaWxkLT5HZXRJdGVtTGVmdE1hcmdpbigpOworCQkJRlhfRkxPQVQgZlJpZ2h0ID0gcENoaWxkLT5HZXRJdGVtUmlnaHRNYXJnaW4oKTsKKworCQkJcENoaWxkLT5TZXRDaGlsZE1hdHJpeCgKKwkJCQlDUERGX01hdHJpeCgxLDAsMCwxLCAKKwkJCQlyY0NsaWVudC5sZWZ0IC0gbV9wdFNjcm9sbC54LCAKKwkJCQlyY0NsaWVudC50b3AgLSBtX3B0U2Nyb2xsLnkpCisJCQkJKTsKKworCQkJaWYgKGJNb3ZlKQorCQkJeworCQkJCUZYX0ZMT0FUIGZJdGVtSGVpZ2h0ID0gcENoaWxkLT5HZXRJdGVtSGVpZ2h0KGZXaWR0aCAtIGZMZWZ0IC0gZlJpZ2h0KTsKKwkJCQlwQ2hpbGQtPk1vdmUoQ1BERl9SZWN0KGZMZWZ0LCBmeS1mSXRlbUhlaWdodCwgZldpZHRoIC0gZlJpZ2h0LCBmeSksIFRSVUUsIEZBTFNFKTsKKwkJCQlmeSAtPSBmSXRlbUhlaWdodDsKKwkJCQlmeSAtPSBtX2ZJdGVtU3BhY2U7CisJCQl9CisJCX0KKwl9CisKKwlmeSArPSBtX2ZJdGVtU3BhY2U7CisKKwlmeSAtPSBtX2ZCb3R0b21TcGFjZTsKKworCWlmIChiTW92ZSkKKwl7CisJCW1fcmNDb250ZW50LmxlZnQgPSAwOworCQltX3JjQ29udGVudC50b3AgPSAwOworCQltX3JjQ29udGVudC5yaWdodCA9IGZXaWR0aDsKKwkJbV9yY0NvbnRlbnQuYm90dG9tID0gZnk7CisJfQorfQorCit2b2lkIENQV0xfTGlzdEN0cmw6OlNldEl0ZW1TcGFjZShGWF9GTE9BVCBmU3BhY2UpCit7CisJbV9mSXRlbVNwYWNlID0gZlNwYWNlOworfQorCit2b2lkIENQV0xfTGlzdEN0cmw6OlNldFRvcFNwYWNlKEZYX0ZMT0FUIGZTcGFjZSkKK3sKKwltX2ZUb3BTcGFjZSA9IGZTcGFjZTsKK30KKwordm9pZCBDUFdMX0xpc3RDdHJsOjpTZXRCb3R0b21TcGFjZShGWF9GTE9BVCBmU3BhY2UpCit7CisJbV9mQm90dG9tU3BhY2UgPSBmU3BhY2U7Cit9CisKK3ZvaWQgQ1BXTF9MaXN0Q3RybDo6UmVQb3NDaGlsZFduZCgpCit7CisJUmVzZXRGYWNlKCk7Cit9CisKK3ZvaWQgQ1BXTF9MaXN0Q3RybDo6RHJhd0NoaWxkQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKQoreworCXBEZXZpY2UtPlNhdmVTdGF0ZSgpOworCUNQREZfUmVjdCByY0NsaWVudCA9IEdldENsaWVudFJlY3QoKTsKKwlDUERGX1JlY3QgcmNUZW1wID0gcmNDbGllbnQ7CisJcFVzZXIyRGV2aWNlLT5UcmFuc2Zvcm1SZWN0KHJjVGVtcCk7CisJRlhfUkVDVCByY0NsaXAoKEZYX0lOVDMyKXJjVGVtcC5sZWZ0LAorCQkoRlhfSU5UMzIpcmNUZW1wLmJvdHRvbSwKKwkJKEZYX0lOVDMyKXJjVGVtcC5yaWdodCwKKwkJKEZYX0lOVDMyKXJjVGVtcC50b3ApOworCisJcERldmljZS0+U2V0Q2xpcF9SZWN0KCZyY0NsaXApOworCisJZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9hQ2hpbGRyZW4uR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJeworCQlpZiAoQ1BXTF9XbmQgKiBwQ2hpbGQgPSBtX2FDaGlsZHJlbi5HZXRBdChpKSkKKwkJeworCQkJQ1BERl9SZWN0IHJjQ2hpbGQgPSBwQ2hpbGQtPkNoaWxkVG9QYXJlbnQocENoaWxkLT5HZXRXaW5kb3dSZWN0KCkpOworCQkJaWYgKCEocmNDaGlsZC50b3AgPCByY0NsaWVudC5ib3R0b20gfHwgcmNDaGlsZC5ib3R0b20gPiByY0NsaWVudC50b3ApKQorCQkJeworCQkJCUNQREZfTWF0cml4IG10ID0gcENoaWxkLT5HZXRDaGlsZE1hdHJpeCgpOworCQkJCWlmIChtdC5Jc0lkZW50aXR5KCkpCisJCQkJeworCQkJCQlwQ2hpbGQtPkRyYXdBcHBlYXJhbmNlKHBEZXZpY2UscFVzZXIyRGV2aWNlKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJbXQuQ29uY2F0KCpwVXNlcjJEZXZpY2UpOworCQkJCQlwQ2hpbGQtPkRyYXdBcHBlYXJhbmNlKHBEZXZpY2UsJm10KTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCisJcERldmljZS0+UmVzdG9yZVN0YXRlKCk7Cit9CisKK0ZYX0lOVDMyIENQV0xfTGlzdEN0cmw6OkdldEl0ZW1JbmRleChDUFdMX1duZCogcEl0ZW0pCit7CisJZm9yIChGWF9JTlQzMiBpPTAsIHN6PW1fYUNoaWxkcmVuLkdldFNpemUoKTsgaTxzejsgaSsrKQorCXsKKwkJaWYgKHBJdGVtID09IG1fYUNoaWxkcmVuLkdldEF0KGkpKQorCQkJcmV0dXJuIGk7CisJfQorCisJcmV0dXJuIC0xOworfQorCitDUERGX1BvaW50IENQV0xfTGlzdEN0cmw6OkluVG9PdXQoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpIGNvbnN0Cit7CisJQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOworCisJcmV0dXJuIENQREZfUG9pbnQocG9pbnQueCArIHJjQ2xpZW50LmxlZnQgLSBtX3B0U2Nyb2xsLngsIAorCQlwb2ludC55ICsgcmNDbGllbnQudG9wIC0gbV9wdFNjcm9sbC55KTsKK30KKworQ1BERl9Qb2ludCBDUFdMX0xpc3RDdHJsOjpPdXRUb0luKGNvbnN0IENQREZfUG9pbnQmIHBvaW50KSBjb25zdAoreworCUNQREZfUmVjdCByY0NsaWVudCA9IEdldENsaWVudFJlY3QoKTsKKworCXJldHVybiBDUERGX1BvaW50KHBvaW50LnggLSByY0NsaWVudC5sZWZ0ICsgbV9wdFNjcm9sbC54LCAKKwkJcG9pbnQueSAtIHJjQ2xpZW50LnRvcCArIG1fcHRTY3JvbGwueSk7Cit9CisKK0NQREZfUmVjdCBDUFdMX0xpc3RDdHJsOjpJblRvT3V0KGNvbnN0IENQREZfUmVjdCYgcmVjdCkgY29uc3QKK3sKKwlDUERGX1JlY3QgcmNDbGllbnQgPSBHZXRDbGllbnRSZWN0KCk7CisKKwlyZXR1cm4gQ1BERl9SZWN0KHJlY3QubGVmdCArIHJjQ2xpZW50LmxlZnQgLSBtX3B0U2Nyb2xsLngsCisJCXJlY3QuYm90dG9tICsgcmNDbGllbnQudG9wIC0gbV9wdFNjcm9sbC55LAorCQlyZWN0LnJpZ2h0ICsgcmNDbGllbnQubGVmdCAtIG1fcHRTY3JvbGwueCwKKwkJcmVjdC50b3AgKyByY0NsaWVudC50b3AgLSBtX3B0U2Nyb2xsLnkpOworfQorCitDUERGX1JlY3QgQ1BXTF9MaXN0Q3RybDo6T3V0VG9Jbihjb25zdCBDUERGX1JlY3QmIHJlY3QpIGNvbnN0Cit7CisJQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOworCisJcmV0dXJuIENQREZfUmVjdChyZWN0LmxlZnQgLSByY0NsaWVudC5sZWZ0ICsgbV9wdFNjcm9sbC54LAorCQlyZWN0LmJvdHRvbSAtIHJjQ2xpZW50LnRvcCArIG1fcHRTY3JvbGwueSwKKwkJcmVjdC5yaWdodCAtIHJjQ2xpZW50LmxlZnQgKyBtX3B0U2Nyb2xsLngsCisJCXJlY3QudG9wIC0gcmNDbGllbnQudG9wICsgbV9wdFNjcm9sbC55KTsKK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9Ob3RlLmNwcCBiL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfTm90ZS5jcHAKaW5kZXggM2M2ZDg2Ni4uNTkyOWEzNSAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9Ob3RlLmNwcAorKysgYi9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX05vdGUuY3BwCkBAIC0xLDE3NzkgKzEsMTc3OSBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BERldpbmRvdy5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfV25kLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9CdXR0b24uaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0VkaXRDdHJsLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9FZGl0LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9MaXN0Q3RybC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfU2Nyb2xsQmFyLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9Ob3RlLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9MYWJlbC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfRWRpdC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfU2Nyb2xsQmFyLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9VdGlscy5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfQ2FyZXQuaCINCi0NCi0jZGVmaW5lIFBPUFVQX0lURU1fSEVBRF9CT1RUT00JCQkJCTMuMGYNCi0jZGVmaW5lIFBPUFVQX0lURU1fQk9UVE9NV0lEVEgJCQkJCTEuMGYNCi0jZGVmaW5lIFBPUFVQX0lURU1fU0lERU1BUkdJTgkJCQkJMy4wZg0KLSNkZWZpbmUgUE9QVVBfSVRFTV9TUEFDRQkJCQkJCTQuMGYNCi0jZGVmaW5lIFBPUFVQX0lURU1fVEVYVF9JTkRFTlQJCQkJCTIuMGYNCi0jZGVmaW5lIFBPUFVQX0lURU1fQk9SREVSQ09MT1IJCQkJCUNQV0xfQ29sb3IoQ09MT1JUWVBFX1JHQiwgODAvMjU1LjBmLCA4MC8yNTUuMGYsIDgwLzI1NS4wZikNCi0NCi0jZGVmaW5lIElzRmxvYXRaZXJvKGYpCQkJCQkJKChmKSA8IDAuMDAwMSAmJiAoZikgPiAtMC4wMDAxKQ0KLSNkZWZpbmUgSXNGbG9hdEJpZ2dlcihmYSxmYikJCQkJKChmYSkgPiAoZmIpICYmICFJc0Zsb2F0WmVybygoZmEpIC0gKGZiKSkpDQotI2RlZmluZSBJc0Zsb2F0U21hbGxlcihmYSxmYikJCQkJKChmYSkgPCAoZmIpICYmICFJc0Zsb2F0WmVybygoZmEpIC0gKGZiKSkpDQotI2RlZmluZSBJc0Zsb2F0RXF1YWwoZmEsZmIpCQkJCQlJc0Zsb2F0WmVybygoZmEpLShmYikpDQotDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX05vdGVfT3B0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ1BXTF9Ob3RlX09wdGlvbnM6OkNQV0xfTm90ZV9PcHRpb25zKCkgOiBtX3BUZXh0KE5VTEwpDQotew0KLX0NCi0NCi1DUFdMX05vdGVfT3B0aW9uczo6fkNQV0xfTm90ZV9PcHRpb25zKCkNCi17DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Ob3RlX09wdGlvbnM6OlNldFRleHRDb2xvcihjb25zdCBDUFdMX0NvbG9yICYgY29sb3IpDQotew0KLQlDUFdMX1duZDo6U2V0VGV4dENvbG9yKGNvbG9yKTsNCi0NCi0JaWYgKG1fcFRleHQpDQotCQltX3BUZXh0LT5TZXRUZXh0Q29sb3IoY29sb3IpOw0KLX0NCi0NCi12b2lkIENQV0xfTm90ZV9PcHRpb25zOjpSZVBvc0NoaWxkV25kKCkNCi17DQotCWlmICh0aGlzLT5Jc1ZhbGlkKCkpDQotCXsNCi0JCUFTU0VSVChtX3BUZXh0ICE9IE5VTEwpOw0KLQ0KLQkJQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOw0KLQ0KLQkJaWYgKHJjQ2xpZW50LldpZHRoKCkgPiAxNS4wZikNCi0JCXsNCi0JCQlyY0NsaWVudC5yaWdodCAtPSAxNS4wZjsNCi0JCQltX3BUZXh0LT5Nb3ZlKHJjQ2xpZW50LCBUUlVFLCBGQUxTRSk7DQotCQkJbV9wVGV4dC0+U2V0VmlzaWJsZShUUlVFKTsNCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQltX3BUZXh0LT5Nb3ZlKENQREZfUmVjdCgwLDAsMCwwKSwgVFJVRSwgRkFMU0UpOw0KLQkJCW1fcFRleHQtPlNldFZpc2libGUoRkFMU0UpOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Ob3RlX09wdGlvbnM6OkNyZWF0ZUNoaWxkV25kKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKQ0KLXsNCi0JbV9wVGV4dCA9IG5ldyBDUFdMX0xhYmVsOw0KLQlQV0xfQ1JFQVRFUEFSQU0gdGNwID0gY3A7DQotCXRjcC5wUGFyZW50V25kID0gdGhpczsNCi0JdGNwLmR3RmxhZ3MgPSBQV1NfQ0hJTEQgfCBQV1NfVklTSUJMRTsNCi0JbV9wVGV4dC0+Q3JlYXRlKHRjcCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Ob3RlX09wdGlvbnM6OlNldFRleHQoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNUZXh0KQ0KLXsNCi0JbV9wVGV4dC0+U2V0VGV4dChzVGV4dCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Ob3RlX09wdGlvbnM6OkRyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKQ0KLXsNCi0JQ1BXTF9XbmQ6OkRyYXdUaGlzQXBwZWFyYW5jZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UpOw0KLQ0KLQlDUERGX1JlY3QgcmNDbGllbnQgPSBHZXRDbGllbnRSZWN0KCk7DQotCXJjQ2xpZW50LmxlZnQgPSByY0NsaWVudC5yaWdodCAtIDE1LjBmOw0KLQ0KLQlDUERGX1BvaW50IHB0Q2VudGVyID0gQ1BERl9Qb2ludCgocmNDbGllbnQubGVmdCArIHJjQ2xpZW50LnJpZ2h0KSAqIDAuNWYsIChyY0NsaWVudC50b3AgKyByY0NsaWVudC5ib3R0b20pICogMC41Zik7DQotDQotCUNQREZfUG9pbnQgcHQxKHB0Q2VudGVyLnggLSAyLjBmLCBwdENlbnRlci55ICsgMi4wZiAqIDAuNWYpOw0KLQlDUERGX1BvaW50IHB0MihwdENlbnRlci54ICsgMi4wZiwgcHRDZW50ZXIueSArIDIuMGYgKiAwLjVmKTsNCi0JQ1BERl9Qb2ludCBwdDMocHRDZW50ZXIueCwgcHRDZW50ZXIueSAtIDMuMGYgKiAwLjVmKTsNCi0NCi0JQ0ZYX1BhdGhEYXRhIHBhdGg7DQotDQotCXBhdGguU2V0UG9pbnRDb3VudCg0KTsNCi0JcGF0aC5TZXRQb2ludCgwLCBwdDEueCwgcHQxLnksIEZYUFRfTU9WRVRPKTsNCi0JcGF0aC5TZXRQb2ludCgxLCBwdDIueCwgcHQyLnksIEZYUFRfTElORVRPKTsNCi0JcGF0aC5TZXRQb2ludCgyLCBwdDMueCwgcHQzLnksIEZYUFRfTElORVRPKTsNCi0JcGF0aC5TZXRQb2ludCgzLCBwdDEueCwgcHQxLnksIEZYUFRfTElORVRPKTsNCi0NCi0JcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgTlVMTCwgDQotCQlDUFdMX1V0aWxzOjpQV0xDb2xvclRvRlhDb2xvcihHZXRUZXh0Q29sb3IoKSxHZXRUcmFuc3BhcmVuY3koKSksIA0KLQkJMCwgRlhGSUxMX0FMVEVSTkFURSk7DQotfQ0KLQ0KLUNQREZfUmVjdCBDUFdMX05vdGVfT3B0aW9uczo6R2V0Q29udGVudFJlY3QoKSBjb25zdA0KLXsNCi0JQVNTRVJUKG1fcFRleHQgIT0gTlVMTCk7DQotDQotCUNQREZfUmVjdCByY1RleHQgPSBtX3BUZXh0LT5HZXRDb250ZW50UmVjdCgpOw0KLQlyY1RleHQucmlnaHQgKz0gMTUuMGY7DQotCXJldHVybiByY1RleHQ7DQotfQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9Ob3RlX0VkaXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ1BXTF9Ob3RlX0VkaXQ6OkNQV0xfTm90ZV9FZGl0KCkgOiBtX2JFbmFibGVOb3RpZnkoVFJVRSksDQotCW1fZk9sZEl0ZW1IZWlnaHQoMC4wZiksDQotCW1fYlNpemVDaGFuZ2VkKEZBTFNFKSwNCi0JbV9mT2xkTWluKDAuMGYpLA0KLQltX2ZPbGRNYXgoMC4wZikNCi17DQotfQ0KLQ0KLUNQV0xfTm90ZV9FZGl0Ojp+Q1BXTF9Ob3RlX0VkaXQoKQ0KLXsNCi19DQotDQotdm9pZCBDUFdMX05vdGVfRWRpdDo6UmVQb3NDaGlsZFduZCgpDQotew0KLQltX2JFbmFibGVOb3RpZnkgPSBGQUxTRTsJDQotCUNQV0xfRWRpdDo6UmVQb3NDaGlsZFduZCgpOw0KLQltX2JFbmFibGVOb3RpZnkgPSBUUlVFOw0KLQ0KLQltX2ZPbGRJdGVtSGVpZ2h0ID0gdGhpcy0+R2V0Q29udGVudFJlY3QoKS5IZWlnaHQoKTsNCi19DQotDQotdm9pZCBDUFdMX05vdGVfRWRpdDo6U2V0VGV4dChGWF9MUENXU1RSIGNzVGV4dCkNCi17DQotCW1fYkVuYWJsZU5vdGlmeSA9IEZBTFNFOw0KLQlDUFdMX0VkaXQ6OlNldFRleHQoY3NUZXh0KTsNCi0JbV9iRW5hYmxlTm90aWZ5ID0gVFJVRTsJDQotCW1fZk9sZEl0ZW1IZWlnaHQgPSB0aGlzLT5HZXRDb250ZW50UmVjdCgpLkhlaWdodCgpOw0KLX0NCi0NCi12b2lkIENQV0xfTm90ZV9FZGl0OjpPblNldEZvY3VzKCkNCi17DQotCW1fYkVuYWJsZU5vdGlmeSA9IEZBTFNFOwkNCi0JQ1BXTF9FZGl0OjpPblNldEZvY3VzKCk7DQotCW1fYkVuYWJsZU5vdGlmeSA9IFRSVUU7CQ0KLQ0KLQl0aGlzLT5FbmFibGVTcGVsbENoZWNrKFRSVUUpOw0KLX0NCi0NCi12b2lkIENQV0xfTm90ZV9FZGl0OjpPbktpbGxGb2N1cygpDQotew0KLQl0aGlzLT5FbmFibGVTcGVsbENoZWNrKEZBTFNFKTsNCi0NCi0JaWYgKENQV0xfV25kKiBwUGFyZW50ID0gdGhpcy0+R2V0UGFyZW50V2luZG93KCkpDQotCXsNCi0JCWlmIChDUFdMX1duZCogcEdyYW5kID0gcFBhcmVudC0+R2V0UGFyZW50V2luZG93KCkpDQotCQl7DQotCQkJQVNTRVJUKHBHcmFuZC0+R2V0Q2xhc3NOYW1lKCkgPT0gIkNQV0xfTm90ZUl0ZW0iKTsNCi0NCi0JCQlDUFdMX05vdGVJdGVtKiBwTm90ZUl0ZW0gPSAoQ1BXTF9Ob3RlSXRlbSopcEdyYW5kOw0KLQ0KLQkJCXBOb3RlSXRlbS0+T25Db250ZW50c1ZhbGlkYXRlKCk7DQotCQl9DQotCX0NCi0NCi0JQ1BXTF9FZGl0OjpPbktpbGxGb2N1cygpOw0KLX0NCi0NCi12b2lkIENQV0xfTm90ZV9FZGl0OjpPbk5vdGlmeShDUFdMX1duZCogcFduZCwgRlhfRFdPUkQgbXNnLCBGWF9JTlRQVFIgd1BhcmFtLCBGWF9JTlRQVFIgbFBhcmFtKQ0KLXsNCi0JaWYgKG1fYkVuYWJsZU5vdGlmeSkNCi0Jew0KLQkJaWYgKHdQYXJhbSA9PSBTQlRfVlNDUk9MTCkNCi0JCXsNCi0JCQlzd2l0Y2ggKG1zZykNCi0JCQl7DQotCQkJY2FzZSBQTk1fU0VUU0NST0xMSU5GTzoJDQotCQkJCWlmIChQV0xfU0NST0xMX0lORk8qIHBJbmZvID0gKFBXTF9TQ1JPTExfSU5GTyopbFBhcmFtKQ0KLQkJCQl7CQ0KLQkJCQkJaWYgKCFJc0Zsb2F0RXF1YWwocEluZm8tPmZDb250ZW50TWF4LCBtX2ZPbGRNYXgpIHx8IA0KLQkJCQkJCSFJc0Zsb2F0RXF1YWwocEluZm8tPmZDb250ZW50TWluLCBtX2ZPbGRNaW4pKQ0KLQkJCQkJew0KLQkJCQkJCW1fYlNpemVDaGFuZ2VkID0gVFJVRTsJCQkJDQotCQkJCQkJaWYgKENQV0xfV25kICogcFBhcmVudCA9IHRoaXMtPkdldFBhcmVudFdpbmRvdygpKQ0KLQkJCQkJCXsNCi0JCQkJCQkJcFBhcmVudC0+T25Ob3RpZnkodGhpcywgUE5NX05PVEVFRElUQ0hBTkdFRCwgMCwgMCk7DQotCQkJCQkJfQ0KLQ0KLQkJCQkJCW1fZk9sZE1heCA9IHBJbmZvLT5mQ29udGVudE1heDsNCi0JCQkJCQltX2ZPbGRNaW4gPSBwSW5mby0+ZkNvbnRlbnRNaW47DQotCQkJCQkJcmV0dXJuOw0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQ0KLQkJfQkJDQotCX0NCi0NCi0JQ1BXTF9FZGl0OjpPbk5vdGlmeShwV25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsNCi0NCi0JaWYgKG1fYkVuYWJsZU5vdGlmeSkNCi0Jew0KLQkJc3dpdGNoIChtc2cpDQotCQl7DQotCQljYXNlIFBOTV9TRVRDQVJFVElORk86DQotCQkJaWYgKFBXTF9DQVJFVF9JTkZPICogcEluZm8gPSAoUFdMX0NBUkVUX0lORk8qKXdQYXJhbSkNCi0JCQl7DQotCQkJCVBXTF9DQVJFVF9JTkZPIG5ld0luZm8gPSAqcEluZm87DQotCQkJCW5ld0luZm8uYlZpc2libGUgPSBUUlVFOw0KLQkJCQluZXdJbmZvLnB0SGVhZCA9IHRoaXMtPkNoaWxkVG9QYXJlbnQocEluZm8tPnB0SGVhZCk7DQotCQkJCW5ld0luZm8ucHRGb290ID0gdGhpcy0+Q2hpbGRUb1BhcmVudChwSW5mby0+cHRGb290KTsNCi0NCi0JCQkJaWYgKENQV0xfV25kICogcFBhcmVudCA9IHRoaXMtPkdldFBhcmVudFdpbmRvdygpKQ0KLQkJCQl7DQotCQkJCQlwUGFyZW50LT5Pbk5vdGlmeSh0aGlzLCBQTk1fU0VUQ0FSRVRJTkZPLCAoRlhfSU5UUFRSKSZuZXdJbmZvLCAwKTsNCi0JCQkJfQ0KLQkJCX0NCi0JCQlicmVhazsNCi0JCX0NCi0JfQ0KLX0NCi0NCi1GWF9GTE9BVCBDUFdMX05vdGVfRWRpdDo6R2V0SXRlbUhlaWdodChGWF9GTE9BVCBmTGltaXRXaWR0aCkNCi17DQotCWlmIChmTGltaXRXaWR0aCA+IDApDQotCXsNCi0JCWlmICghbV9iU2l6ZUNoYW5nZWQpDQotCQkJcmV0dXJuIG1fZk9sZEl0ZW1IZWlnaHQ7DQotDQotCQltX2JTaXplQ2hhbmdlZCA9IEZBTFNFOwkNCi0NCi0JCXRoaXMtPkVuYWJsZU5vdGlmeShGQUxTRSk7DQotCQl0aGlzLT5FbmFibGVSZWZyZXNoKEZBTFNFKTsNCi0JCW1fcEVkaXQtPkVuYWJsZU5vdGlmeShGQUxTRSk7DQotDQotCQkvL0NQREZfUmVjdCByY09sZCA9IHRoaXMtPkdldFdpbmRvd1JlY3QoKTsNCi0NCi0JCXRoaXMtPk1vdmUoQ1BERl9SZWN0KDAsMCxmTGltaXRXaWR0aCwwKSwgVFJVRSwgRkFMU0UpOw0KLQkJRlhfRkxPQVQgZlJldCA9IHRoaXMtPkdldENvbnRlbnRSZWN0KCkuSGVpZ2h0KCk7DQotDQotCQkvL3RoaXMtPk1vdmUocmNPbGQsIFRSVUUsIEZBTFNFKTsNCi0NCi0JCW1fcEVkaXQtPkVuYWJsZU5vdGlmeShUUlVFKTsNCi0JCXRoaXMtPkVuYWJsZU5vdGlmeShUUlVFKTsNCi0JCXRoaXMtPkVuYWJsZVJlZnJlc2goVFJVRSk7DQotDQotCQlyZXR1cm4gZlJldDsNCi0JfQ0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotRlhfRkxPQVQgQ1BXTF9Ob3RlX0VkaXQ6OkdldEl0ZW1MZWZ0TWFyZ2luKCkNCi17DQotCXJldHVybiBQT1BVUF9JVEVNX1RFWFRfSU5ERU5UOw0KLX0NCi0NCi1GWF9GTE9BVCBDUFdMX05vdGVfRWRpdDo6R2V0SXRlbVJpZ2h0TWFyZ2luKCkNCi17DQotCXJldHVybiBQT1BVUF9JVEVNX1RFWFRfSU5ERU5UOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX05vdGVfTEJCb3ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLQ0KLUNQV0xfTm90ZV9MQkJveDo6Q1BXTF9Ob3RlX0xCQm94KCkNCi17DQotfQ0KLQ0KLUNQV0xfTm90ZV9MQkJveDo6fkNQV0xfTm90ZV9MQkJveCgpDQotew0KLX0NCi0NCi12b2lkIENQV0xfTm90ZV9MQkJveDo6RHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpDQotew0KLQlDUERGX1JlY3QgcmNDbGllbnQgPSB0aGlzLT5HZXRDbGllbnRSZWN0KCk7DQotDQotCUNGWF9HcmFwaFN0YXRlRGF0YSBnc2Q7DQotCWdzZC5tX0xpbmVXaWR0aCA9IDEuMGY7DQotDQotCUNGWF9QYXRoRGF0YSBwYXRoQ3Jvc3M7DQotDQotCXBhdGhDcm9zcy5TZXRQb2ludENvdW50KDQpOw0KLQlwYXRoQ3Jvc3MuU2V0UG9pbnQoMCwgcmNDbGllbnQubGVmdCwgcmNDbGllbnQudG9wLCBGWFBUX01PVkVUTyk7DQotCXBhdGhDcm9zcy5TZXRQb2ludCgxLCByY0NsaWVudC5yaWdodCwgcmNDbGllbnQuYm90dG9tLCBGWFBUX0xJTkVUTyk7DQotCXBhdGhDcm9zcy5TZXRQb2ludCgyLCByY0NsaWVudC5sZWZ0LCByY0NsaWVudC5ib3R0b20gKyByY0NsaWVudC5IZWlnaHQoKSAqIDAuNWYsIEZYUFRfTU9WRVRPKTsNCi0JcGF0aENyb3NzLlNldFBvaW50KDMsIHJjQ2xpZW50LmxlZnQgKyByY0NsaWVudC5XaWR0aCgpICogMC41ZiwgcmNDbGllbnQuYm90dG9tLCBGWFBUX0xJTkVUTyk7DQotCQ0KLQlwRGV2aWNlLT5EcmF3UGF0aCgmcGF0aENyb3NzLCBwVXNlcjJEZXZpY2UsICZnc2QsIA0KLQkJMCwgQ1BXTF9VdGlsczo6UFdMQ29sb3JUb0ZYQ29sb3IoR2V0VGV4dENvbG9yKCksdGhpcy0+R2V0VHJhbnNwYXJlbmN5KCkpLCBGWEZJTExfQUxURVJOQVRFKTsNCi19DQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9Ob3RlX1JCQm94IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi0NCi1DUFdMX05vdGVfUkJCb3g6OkNQV0xfTm90ZV9SQkJveCgpDQotew0KLX0NCi0NCi1DUFdMX05vdGVfUkJCb3g6On5DUFdMX05vdGVfUkJCb3goKQ0KLXsNCi19DQotDQotdm9pZCBDUFdMX05vdGVfUkJCb3g6OkRyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKQ0KLXsNCi0JQ1BERl9SZWN0IHJjQ2xpZW50ID0gdGhpcy0+R2V0Q2xpZW50UmVjdCgpOw0KLQ0KLQlDRlhfR3JhcGhTdGF0ZURhdGEgZ3NkOw0KLQlnc2QubV9MaW5lV2lkdGggPSAxLjBmOw0KLQ0KLQlDRlhfUGF0aERhdGEgcGF0aENyb3NzOw0KLQ0KLQlwYXRoQ3Jvc3MuU2V0UG9pbnRDb3VudCg0KTsNCi0JcGF0aENyb3NzLlNldFBvaW50KDAsIHJjQ2xpZW50LnJpZ2h0LCByY0NsaWVudC50b3AsIEZYUFRfTU9WRVRPKTsNCi0JcGF0aENyb3NzLlNldFBvaW50KDEsIHJjQ2xpZW50LmxlZnQsIHJjQ2xpZW50LmJvdHRvbSwgRlhQVF9MSU5FVE8pOw0KLQlwYXRoQ3Jvc3MuU2V0UG9pbnQoMiwgcmNDbGllbnQucmlnaHQsIHJjQ2xpZW50LmJvdHRvbSArIHJjQ2xpZW50LkhlaWdodCgpICogMC41ZiwgRlhQVF9NT1ZFVE8pOw0KLQlwYXRoQ3Jvc3MuU2V0UG9pbnQoMywgcmNDbGllbnQubGVmdCArIHJjQ2xpZW50LldpZHRoKCkgKiAwLjVmLCByY0NsaWVudC5ib3R0b20sIEZYUFRfTElORVRPKTsNCi0JDQotCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoQ3Jvc3MsIHBVc2VyMkRldmljZSwgJmdzZCwgDQotCQkwLCBDUFdMX1V0aWxzOjpQV0xDb2xvclRvRlhDb2xvcihHZXRUZXh0Q29sb3IoKSx0aGlzLT5HZXRUcmFuc3BhcmVuY3koKSksIEZYRklMTF9BTFRFUk5BVEUpOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9Ob3RlX0ljb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUNQV0xfTm90ZV9JY29uOjpDUFdMX05vdGVfSWNvbigpIDogbV9uVHlwZSgwKQ0KLXsNCi19DQotDQotQ1BXTF9Ob3RlX0ljb246On5DUFdMX05vdGVfSWNvbigpDQotew0KLX0NCi0NCi12b2lkIENQV0xfTm90ZV9JY29uOjpTZXRJY29uVHlwZShGWF9JTlQzMiBuVHlwZSkNCi17DQotCW1fblR5cGUgPSBuVHlwZTsNCi19DQotDQotdm9pZCBDUFdMX05vdGVfSWNvbjo6RHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpDQotew0KLQlDUFdMX1V0aWxzOjpEcmF3SWNvbkFwcFN0cmVhbShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIG1fblR5cGUsIEdldENsaWVudFJlY3QoKSwgDQotCQl0aGlzLT5HZXRCYWNrZ3JvdW5kQ29sb3IoKSwgUFdMX0RFRkFVTFRfQkxBQ0tDT0xPUiwgdGhpcy0+R2V0VHJhbnNwYXJlbmN5KCkpOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9Ob3RlX0Nsb3NlQm94IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DUFdMX05vdGVfQ2xvc2VCb3g6OkNQV0xfTm90ZV9DbG9zZUJveCgpIDogbV9iTW91c2VEb3duKEZBTFNFKQ0KLXsNCi19DQotDQotQ1BXTF9Ob3RlX0Nsb3NlQm94Ojp+Q1BXTF9Ob3RlX0Nsb3NlQm94KCkNCi17DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Ob3RlX0Nsb3NlQm94OjpEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSkNCi17DQotCUNQV0xfQnV0dG9uOjpEcmF3VGhpc0FwcGVhcmFuY2UocERldmljZSwgcFVzZXIyRGV2aWNlKTsNCi0NCi0JQ1BERl9SZWN0IHJjQ2xpZW50ID0gdGhpcy0+R2V0Q2xpZW50UmVjdCgpOw0KLQlyY0NsaWVudCA9IENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KHJjQ2xpZW50LCAyLjBmKTsNCi0NCi0JQ0ZYX0dyYXBoU3RhdGVEYXRhIGdzZDsNCi0JZ3NkLm1fTGluZVdpZHRoID0gMS4wZjsNCi0NCi0JQ0ZYX1BhdGhEYXRhIHBhdGhDcm9zczsNCi0NCi0JaWYgKG1fYk1vdXNlRG93bikNCi0Jew0KLQkJcmNDbGllbnQubGVmdCArPSAwLjVmOw0KLQkJcmNDbGllbnQucmlnaHQgKz0gMC41ZjsNCi0JCXJjQ2xpZW50LnRvcCAtPSAwLjVmOw0KLQkJcmNDbGllbnQuYm90dG9tIC09IDAuNWY7DQotCX0NCi0NCi0JcGF0aENyb3NzLlNldFBvaW50Q291bnQoNCk7DQotCXBhdGhDcm9zcy5TZXRQb2ludCgwLCByY0NsaWVudC5sZWZ0LCByY0NsaWVudC5ib3R0b20sIEZYUFRfTU9WRVRPKTsNCi0JcGF0aENyb3NzLlNldFBvaW50KDEsIHJjQ2xpZW50LnJpZ2h0LCByY0NsaWVudC50b3AsIEZYUFRfTElORVRPKTsNCi0JcGF0aENyb3NzLlNldFBvaW50KDIsIHJjQ2xpZW50LmxlZnQsIHJjQ2xpZW50LnRvcCwgRlhQVF9NT1ZFVE8pOw0KLQlwYXRoQ3Jvc3MuU2V0UG9pbnQoMywgcmNDbGllbnQucmlnaHQsIHJjQ2xpZW50LmJvdHRvbSwgRlhQVF9MSU5FVE8pOw0KLQkNCi0JcERldmljZS0+RHJhd1BhdGgoJnBhdGhDcm9zcywgcFVzZXIyRGV2aWNlLCAmZ3NkLCANCi0JCTAsIENQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKEdldFRleHRDb2xvcigpLHRoaXMtPkdldFRyYW5zcGFyZW5jeSgpKSwgRlhGSUxMX0FMVEVSTkFURSk7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9Ob3RlX0Nsb3NlQm94OjpPbkxCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlTZXRCb3JkZXJTdHlsZShQQlNfSU5TRVQpOw0KLQlJbnZhbGlkYXRlUmVjdChOVUxMKTsNCi0NCi0JbV9iTW91c2VEb3duID0gVFJVRTsNCi0NCi0JcmV0dXJuIENQV0xfQnV0dG9uOjpPbkxCdXR0b25Eb3duKHBvaW50LG5GbGFnKTsNCi19DQotDQotRlhfQk9PTAlDUFdMX05vdGVfQ2xvc2VCb3g6Ok9uTEJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQltX2JNb3VzZURvd24gPSBGQUxTRTsNCi0NCi0JU2V0Qm9yZGVyU3R5bGUoUEJTX0JFVkVMRUQpOw0KLQlJbnZhbGlkYXRlUmVjdChOVUxMKTsNCi0NCi0JcmV0dXJuIENQV0xfQnV0dG9uOjpPbkxCdXR0b25VcChwb2ludCxuRmxhZyk7DQotfQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX05vdGVfQ29udGVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUNQV0xfTm90ZV9Db250ZW50czo6Q1BXTF9Ob3RlX0NvbnRlbnRzKCkgOiBtX3BFZGl0KE5VTEwpDQotew0KLX0NCi0NCi1DUFdMX05vdGVfQ29udGVudHM6On5DUFdMX05vdGVfQ29udGVudHMoKQ0KLXsNCi19DQotDQotQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9Ob3RlX0NvbnRlbnRzOjpHZXRDbGFzc05hbWUoKSBjb25zdA0KLXsNCi0JcmV0dXJuICJDUFdMX05vdGVfQ29udGVudHMiOw0KLX0NCi0NCi12b2lkIENQV0xfTm90ZV9Db250ZW50czo6Q3JlYXRlQ2hpbGRXbmQoY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApDQotew0KLQltX3BFZGl0ID0gbmV3IENQV0xfTm90ZV9FZGl0Ow0KLQlQV0xfQ1JFQVRFUEFSQU0gZWNwID0gY3A7DQotCWVjcC5wUGFyZW50V25kID0gdGhpczsNCi0JZWNwLmR3RmxhZ3MgPSBQV1NfVklTSUJMRSB8IFBXU19DSElMRCB8IFBFU19NVUxUSUxJTkUgfCBQRVNfQVVUT1JFVFVSTiB8IFBFU19URVhUT1ZFUkZMT1cgfCBQRVNfVU5ETyB8IFBFU19TUEVMTENIRUNLOw0KLQ0KLQltX3BFZGl0LT5FbmFibGVOb3RpZnkoRkFMU0UpOw0KLQltX3BFZGl0LT5DcmVhdGUoZWNwKTsNCi0JbV9wRWRpdC0+RW5hYmxlTm90aWZ5KFRSVUUpOw0KLX0NCi0NCi12b2lkIENQV0xfTm90ZV9Db250ZW50czo6U2V0VGV4dChjb25zdCBDRlhfV2lkZVN0cmluZyYgc1RleHQpDQotew0KLQlpZiAobV9wRWRpdCkNCi0Jew0KLQkJbV9wRWRpdC0+RW5hYmxlTm90aWZ5KEZBTFNFKTsNCi0JCW1fcEVkaXQtPlNldFRleHQoc1RleHQpOw0KLQkJbV9wRWRpdC0+RW5hYmxlTm90aWZ5KFRSVUUpOw0KLQkJT25Ob3RpZnkobV9wRWRpdCwgUE5NX05PVEVFRElUQ0hBTkdFRCwgMCwgMCk7CQkNCi0JfQ0KLX0NCi0NCi1DRlhfV2lkZVN0cmluZyBDUFdMX05vdGVfQ29udGVudHM6OkdldFRleHQoKSBjb25zdA0KLXsNCi0JaWYgKG1fcEVkaXQpDQotCQlyZXR1cm4gbV9wRWRpdC0+R2V0VGV4dCgpOw0KLQ0KLQlyZXR1cm4gTCIiOw0KLX0NCi0NCi1DUFdMX05vdGVJdGVtKiBDUFdMX05vdGVfQ29udGVudHM6OkNyZWF0ZVN1Ykl0ZW0oKQ0KLXsNCi0JQ1BXTF9Ob3RlSXRlbSogcE5vdGVJdGVtID0gbmV3IENQV0xfTm90ZUl0ZW07DQotCVBXTF9DUkVBVEVQQVJBTSBpY3AgPSB0aGlzLT5HZXRDcmVhdGlvblBhcmFtKCk7DQotCWljcC5wUGFyZW50V25kID0gdGhpczsNCi0JaWNwLmR3RmxhZ3MgPSAgUFdTX0NISUxEIHwgUFdTX1ZJU0lCTEUgfCBQV1NfQkFDS0dST1VORDsNCi0JcE5vdGVJdGVtLT5DcmVhdGUoaWNwKTsNCi0NCi0JcE5vdGVJdGVtLT5PbkNyZWF0ZU5vdGVJdGVtKCk7DQotCQ0KLQlwTm90ZUl0ZW0tPlJlc2V0U3ViamVjdE5hbWUobV9hQ2hpbGRyZW4uR2V0U2l6ZSgpIC0gMSk7DQotDQotCUZYX1NZU1RFTVRJTUUgc3Q7DQotCWlmIChJRlhfU3lzdGVtSGFuZGxlciogcFNIID0gdGhpcy0+R2V0U3lzdGVtSGFuZGxlcigpKQ0KLQkJc3QgPSBwU0gtPkdldExvY2FsVGltZSgpOw0KLQlwTm90ZUl0ZW0tPlNldERhdGVUaW1lKHN0KTsNCi0NCi0JcE5vdGVJdGVtLT5TZXRDb250ZW50cyhMIiIpOw0KLQ0KLQl0aGlzLT5Pbk5vdGlmeShwTm90ZUl0ZW0sIFBOTV9OT1RFRURJVENIQU5HRUQsIDAsIDApOwkNCi0NCi0JcmV0dXJuIHBOb3RlSXRlbTsNCi19DQotDQotRlhfSU5UMzIgQ1BXTF9Ob3RlX0NvbnRlbnRzOjpDb3VudFN1Ykl0ZW1zKCkgY29uc3QNCi17DQotCXJldHVybiBtX2FDaGlsZHJlbi5HZXRTaXplKCkgLSAxOw0KLX0NCi0NCi1JUFdMX05vdGVJdGVtKiBDUFdMX05vdGVfQ29udGVudHM6OkdldFN1Ykl0ZW1zKEZYX0lOVDMyIGluZGV4KSBjb25zdA0KLXsNCi0JRlhfSU5UMzIgbkluZGV4ID0gaW5kZXggKyAxOw0KLQ0KLQlpZiAobkluZGV4ID4gMCAmJiBuSW5kZXggPCBtX2FDaGlsZHJlbi5HZXRTaXplKCkpDQotCQlpZiAoQ1BXTF9XbmQqIHBDaGlsZCA9IG1fYUNoaWxkcmVuLkdldEF0KG5JbmRleCkpDQotCQl7DQotCQkJQVNTRVJUKHBDaGlsZC0+R2V0Q2xhc3NOYW1lKCkgPT0gIkNQV0xfTm90ZUl0ZW0iKTsNCi0JCQlDUFdMX05vdGVJdGVtKiBwSXRlbSA9IChDUFdMX05vdGVJdGVtKilwQ2hpbGQ7DQotCQkJcmV0dXJuIHBJdGVtOw0KLQkJfQ0KLQlyZXR1cm4gTlVMTDsNCi19DQotDQotdm9pZCBDUFdMX05vdGVfQ29udGVudHM6OkRlbGV0ZVN1Ykl0ZW0oSVBXTF9Ob3RlSXRlbSogcE5vdGVJdGVtKQ0KLXsNCi0JRlhfSU5UMzIgbkluZGV4ID0gdGhpcy0+R2V0SXRlbUluZGV4KChDUFdMX05vdGVJdGVtKilwTm90ZUl0ZW0pOw0KLQ0KLQlpZiAobkluZGV4ID4gMCkNCi0Jew0KLQkJaWYgKENQV0xfTm90ZUl0ZW0qIHBQV0xOb3RlSXRlbSA9IChDUFdMX05vdGVJdGVtKilwTm90ZUl0ZW0pDQotCQl7DQotCQkJcFBXTE5vdGVJdGVtLT5LaWxsRm9jdXMoKTsNCi0JCQlwUFdMTm90ZUl0ZW0tPkRlc3Ryb3koKTsNCi0JCQlkZWxldGUgcFBXTE5vdGVJdGVtOw0KLQkJfQ0KLQ0KLQkJZm9yIChGWF9JTlQzMiBpPW5JbmRleCxzej1tX2FDaGlsZHJlbi5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0JCXsNCi0JCQlpZiAoQ1BXTF9XbmQqIHBDaGlsZCA9IG1fYUNoaWxkcmVuLkdldEF0KGkpKQ0KLQkJCXsNCi0JCQkJQVNTRVJUKHBDaGlsZC0+R2V0Q2xhc3NOYW1lKCkgPT0gIkNQV0xfTm90ZUl0ZW0iKTsNCi0JCQkJQ1BXTF9Ob3RlSXRlbSogcEl0ZW0gPSAoQ1BXTF9Ob3RlSXRlbSopcENoaWxkOw0KLQkJCQlwSXRlbS0+UmVzZXRTdWJqZWN0TmFtZShpKTsNCi0JCQl9DQotCQl9DQotDQotCQl0aGlzLT5Pbk5vdGlmeSh0aGlzLCBQTk1fTk9URUVESVRDSEFOR0VELCAwLCAwKTsNCi0JfQ0KLX0NCi0NCi1JUFdMX05vdGVJdGVtKiBDUFdMX05vdGVfQ29udGVudHM6OkdldEhpdE5vdGVJdGVtKGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQ0KLXsNCi0JQ1BERl9Qb2ludCBwdCA9IHRoaXMtPlBhcmVudFRvQ2hpbGQocG9pbnQpOw0KLQ0KLQlmb3IgKEZYX0lOVDMyIGk9MCxzej1tX2FDaGlsZHJlbi5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJaWYgKENQV0xfV25kKiBwQ2hpbGQgPSBtX2FDaGlsZHJlbi5HZXRBdChpKSkNCi0JCXsNCi0JCQlpZiAocENoaWxkLT5HZXRDbGFzc05hbWUoKSA9PSAiQ1BXTF9Ob3RlSXRlbSIpDQotCQkJew0KLQkJCQlDUFdMX05vdGVJdGVtKiBwTm90ZUl0ZW0gPSAoQ1BXTF9Ob3RlSXRlbSopcENoaWxkOw0KLQkJCQlpZiAoSVBXTF9Ob3RlSXRlbSogcFJldCA9IHBOb3RlSXRlbS0+R2V0SGl0Tm90ZUl0ZW0ocHQpKQ0KLQkJCQkJcmV0dXJuIHBSZXQ7DQotCQkJfQ0KLQkJfQ0KLQl9DQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi12b2lkIENQV0xfTm90ZV9Db250ZW50czo6T25Ob3RpZnkoQ1BXTF9XbmQqIHBXbmQsIEZYX0RXT1JEIG1zZywgRlhfSU5UUFRSIHdQYXJhbSwgRlhfSU5UUFRSIGxQYXJhbSkNCi17DQotCXN3aXRjaCAobXNnKQ0KLQl7DQotCWNhc2UgUE5NX05PVEVFRElUQ0hBTkdFRDoNCi0JCXsNCi0JCQlGWF9JTlQzMiBuSW5kZXggPSB0aGlzLT5HZXRJdGVtSW5kZXgocFduZCk7DQotCQkJaWYgKG5JbmRleCA8IDApIG5JbmRleCA9IDA7DQotDQotCQkJbV9wRWRpdC0+RW5hYmxlTm90aWZ5KEZBTFNFKTsJDQotCQkJdGhpcy0+UmVzZXRDb250ZW50KG5JbmRleCk7DQotCQkJbV9wRWRpdC0+RW5hYmxlTm90aWZ5KFRSVUUpOw0KLQ0KLQkJCWZvciAoRlhfSU5UMzIgaT1uSW5kZXgrMSwgc3o9bV9hQ2hpbGRyZW4uR2V0U2l6ZSgpOyBpPHN6OyBpKyspDQotCQkJew0KLQkJCQlpZiAoQ1BXTF9XbmQqIHBDaGlsZCA9IG1fYUNoaWxkcmVuLkdldEF0KGkpKQ0KLQkJCQkJcENoaWxkLT5Pbk5vdGlmeSh0aGlzLCBQTk1fTk9URVJFU0VULCAwLCAwKTsNCi0JCQl9DQotDQotCQkJaWYgKENQV0xfV25kICogcFBhcmVudCA9IHRoaXMtPkdldFBhcmVudFdpbmRvdygpKQ0KLQkJCXsNCi0JCQkJcFBhcmVudC0+T25Ob3RpZnkodGhpcywgUE5NX05PVEVFRElUQ0hBTkdFRCwgMCwgMCk7DQotCQkJfQ0KLQkJfQ0KLQkJcmV0dXJuOw0KLQljYXNlIFBOTV9TQ1JPTExXSU5ET1c6DQotCQl0aGlzLT5TZXRTY3JvbGxQb3MoQ1BERl9Qb2ludCgwLjBmLCAqKEZYX0ZMT0FUKilsUGFyYW0pKTsNCi0JCXRoaXMtPlJlc2V0RmFjZSgpOw0KLQkJSW52YWxpZGF0ZVJlY3QoTlVMTCk7DQotCQlyZXR1cm47CQkNCi0JY2FzZSBQTk1fU0VUQ0FSRVRJTkZPOg0KLQkJaWYgKFBXTF9DQVJFVF9JTkZPICogcEluZm8gPSAoUFdMX0NBUkVUX0lORk8qKXdQYXJhbSkNCi0JCXsNCi0JCQlQV0xfQ0FSRVRfSU5GTyBuZXdJbmZvID0gKnBJbmZvOw0KLQkJCW5ld0luZm8uYlZpc2libGUgPSBUUlVFOw0KLQkJCW5ld0luZm8ucHRIZWFkID0gdGhpcy0+Q2hpbGRUb1BhcmVudChwSW5mby0+cHRIZWFkKTsNCi0JCQluZXdJbmZvLnB0Rm9vdCA9IHRoaXMtPkNoaWxkVG9QYXJlbnQocEluZm8tPnB0Rm9vdCk7DQotDQotCQkJaWYgKENQV0xfV25kICogcFBhcmVudCA9IHRoaXMtPkdldFBhcmVudFdpbmRvdygpKQ0KLQkJCXsNCi0JCQkJcFBhcmVudC0+T25Ob3RpZnkodGhpcywgUE5NX1NFVENBUkVUSU5GTywgKEZYX0lOVFBUUikmbmV3SW5mbywgMCk7DQotCQkJfQ0KLQkJfQ0KLQkJcmV0dXJuOw0KLQljYXNlIFBOTV9OT1RFUkVTRVQ6DQotCQl7DQotCQkJbV9wRWRpdC0+RW5hYmxlTm90aWZ5KEZBTFNFKTsJDQotCQkJdGhpcy0+UmVzZXRDb250ZW50KDApOw0KLQkJCW1fcEVkaXQtPkVuYWJsZU5vdGlmeShUUlVFKTsNCi0NCi0JCQlmb3IgKEZYX0lOVDMyIGk9MSwgc3o9bV9hQ2hpbGRyZW4uR2V0U2l6ZSgpOyBpPHN6OyBpKyspDQotCQkJew0KLQkJCQlpZiAoQ1BXTF9XbmQqIHBDaGlsZCA9IG1fYUNoaWxkcmVuLkdldEF0KGkpKQ0KLQkJCQkJcENoaWxkLT5Pbk5vdGlmeSh0aGlzLCBQTk1fTk9URVJFU0VULCAwLCAwKTsNCi0JCQl9CQ0KLQ0KLQkJCW1fcEVkaXQtPkVuYWJsZU5vdGlmeShGQUxTRSk7CQ0KLQkJCXRoaXMtPlJlc2V0Q29udGVudCgwKTsNCi0JCQltX3BFZGl0LT5FbmFibGVOb3RpZnkoVFJVRSk7DQotCQl9DQotCQlyZXR1cm47DQotCX0NCi0NCi0JQ1BXTF9XbmQ6Ok9uTm90aWZ5KHBXbmQsIG1zZywgd1BhcmFtLCBsUGFyYW0pOw0KLX0NCi0NCi1GWF9CT09MCUNQV0xfTm90ZV9Db250ZW50czo6T25MQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKQ0KLXsNCi0JaWYgKENQV0xfV25kOjpPbkxCdXR0b25Eb3duKHBvaW50LG5GbGFnKSkgcmV0dXJuIFRSVUU7DQotDQotCWlmICghbV9wRWRpdC0+SXNGb2N1c2VkKCkpDQotCXsNCi0JCW1fcEVkaXQtPlNldEZvY3VzKCk7DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Ob3RlX0NvbnRlbnRzOjpTZXRFZGl0Rm9jdXMoRlhfQk9PTCBiTGFzdCkNCi17DQotCWlmICghbV9wRWRpdC0+SXNGb2N1c2VkKCkpDQotCXsNCi0JCW1fcEVkaXQtPlNldEZvY3VzKCk7DQotCQltX3BFZGl0LT5TZXRDYXJldChiTGFzdCA/IG1fcEVkaXQtPkdldFRvdGFsV29yZHMoKSA6IDApOw0KLQl9DQotfQ0KLQ0KLUNQV0xfRWRpdCogQ1BXTF9Ob3RlX0NvbnRlbnRzOjpHZXRFZGl0KCkgY29uc3QNCi17DQotCXJldHVybiBtX3BFZGl0Ow0KLX0NCi0NCi12b2lkIENQV0xfTm90ZV9Db250ZW50czo6RW5hYmxlTW9kaWZ5KEZYX0JPT0wgYkVuYWJsZWQpDQotew0KLQlpZiAoIWJFbmFibGVkKQ0KLQkJbV9wRWRpdC0+QWRkRmxhZyhQV1NfUkVBRE9OTFkpOw0KLQllbHNlDQotCQltX3BFZGl0LT5SZW1vdmVGbGFnKFBXU19SRUFET05MWSk7DQotDQotCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fYUNoaWxkcmVuLkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQl7DQotCQlpZiAoQ1BXTF9XbmQqIHBDaGlsZCA9IG1fYUNoaWxkcmVuLkdldEF0KGkpKQ0KLQkJew0KLQkJCWlmIChwQ2hpbGQtPkdldENsYXNzTmFtZSgpID09ICJDUFdMX05vdGVJdGVtIikNCi0JCQl7DQotCQkJCUNQV0xfTm90ZUl0ZW0qIHBOb3RlSXRlbSA9IChDUFdMX05vdGVJdGVtKilwQ2hpbGQ7DQotCQkJCXBOb3RlSXRlbS0+RW5hYmxlTW9kaWZ5KGJFbmFibGVkKTsNCi0JCQl9DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBDUFdMX05vdGVfQ29udGVudHM6OkVuYWJsZVJlYWQoRlhfQk9PTCBiRW5hYmxlZCkNCi17DQotCWlmICghYkVuYWJsZWQpDQotCQltX3BFZGl0LT5BZGRGbGFnKFBFU19OT1JFQUQpOw0KLQllbHNlDQotCQltX3BFZGl0LT5SZW1vdmVGbGFnKFBFU19OT1JFQUQpOw0KLQ0KLQlmb3IgKEZYX0lOVDMyIGk9MCxzej1tX2FDaGlsZHJlbi5HZXRTaXplKCk7IGk8c3o7IGkrKykNCi0Jew0KLQkJaWYgKENQV0xfV25kKiBwQ2hpbGQgPSBtX2FDaGlsZHJlbi5HZXRBdChpKSkNCi0JCXsNCi0JCQlpZiAocENoaWxkLT5HZXRDbGFzc05hbWUoKSA9PSAiQ1BXTF9Ob3RlSXRlbSIpDQotCQkJew0KLQkJCQlDUFdMX05vdGVJdGVtKiBwTm90ZUl0ZW0gPSAoQ1BXTF9Ob3RlSXRlbSopcENoaWxkOw0KLQkJCQlwTm90ZUl0ZW0tPkVuYWJsZVJlYWQoYkVuYWJsZWQpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfTm90ZUl0ZW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUNQV0xfTm90ZUl0ZW06OkNQV0xfTm90ZUl0ZW0oKSA6DQotCW1fcFByaXZhdGVEYXRhKE5VTEwpLA0KLQltX3BTdWJqZWN0KE5VTEwpLA0KLQltX3BEYXRlVGltZShOVUxMKSwNCi0JbV9wQ29udGVudHMoTlVMTCksDQotCW1fc0F1dGhvcihMIiIpLA0KLQltX2ZPbGRJdGVtSGVpZ2h0KDAuMGYpLA0KLQltX2JTaXplQ2hhbmdlZChGQUxTRSksDQotCW1fYkFsbG93TW9kaWZ5KFRSVUUpDQotew0KLX0NCi0NCi1DUFdMX05vdGVJdGVtOjp+Q1BXTF9Ob3RlSXRlbSgpDQotew0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDUFdMX05vdGVJdGVtOjpHZXRDbGFzc05hbWUoKSBjb25zdA0KLXsNCi0JcmV0dXJuICJDUFdMX05vdGVJdGVtIjsNCi19DQotDQotdm9pZCBDUFdMX05vdGVJdGVtOjpDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCkNCi17DQotCUNQV0xfQ29sb3Igc1RleHRDb2xvcjsNCi0NCi0JaWYgKENQV0xfVXRpbHM6OklzQmxhY2tPcldoaXRlKHRoaXMtPkdldEJhY2tncm91bmRDb2xvcigpKSkNCi0JCXNUZXh0Q29sb3IgPSBQV0xfREVGQVVMVF9XSElURUNPTE9SOw0KLQllbHNlDQotCQlzVGV4dENvbG9yID0gUFdMX0RFRkFVTFRfQkxBQ0tDT0xPUjsNCi0NCi0JbV9wU3ViamVjdCA9IG5ldyBDUFdMX0xhYmVsOw0KLQlQV0xfQ1JFQVRFUEFSQU0gc2NwID0gY3A7DQotCXNjcC5wUGFyZW50V25kID0gdGhpczsNCi0Jc2NwLmR3RmxhZ3MgPSBQV1NfVklTSUJMRSB8IFBXU19DSElMRCB8IFBFU19MRUZUIHwgUEVTX1RPUDsNCi0Jc2NwLnNUZXh0Q29sb3IgPSBzVGV4dENvbG9yOw0KLQltX3BTdWJqZWN0LT5DcmVhdGUoc2NwKTsNCi0NCi0JbV9wRGF0ZVRpbWUgPSBuZXcgQ1BXTF9MYWJlbDsNCi0JUFdMX0NSRUFURVBBUkFNIGRjcCA9IGNwOw0KLQlkY3AucFBhcmVudFduZCA9IHRoaXM7DQotCWRjcC5kd0ZsYWdzID0gUFdTX1ZJU0lCTEUgfCBQV1NfQ0hJTEQgfCBQRVNfUklHSFQgfCBQRVNfVE9QOw0KLQlkY3Auc1RleHRDb2xvciA9IHNUZXh0Q29sb3I7DQotCW1fcERhdGVUaW1lLT5DcmVhdGUoZGNwKTsNCi0NCi0JbV9wQ29udGVudHMgPSBuZXcgQ1BXTF9Ob3RlX0NvbnRlbnRzOw0KLQlQV0xfQ1JFQVRFUEFSQU0gY2NwID0gY3A7DQotCWNjcC5wUGFyZW50V25kID0gdGhpczsNCi0JLy9jY3Auc0JhY2tncm91bmRDb2xvciA9IFBXTF9ERUZBVUxUX1dISVRFQ09MT1I7DQotCWNjcC5zQmFja2dyb3VuZENvbG9yID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfUkdCLCAyNDAvMjU1LjBmLCAyNDAvMjU1LjBmLCAyNDAvMjU1LjBmKTsNCi0JY2NwLmR3RmxhZ3MgPSBQV1NfVklTSUJMRSB8IFBXU19DSElMRCB8IFBXU19CQUNLR1JPVU5EOw0KLQltX3BDb250ZW50cy0+Q3JlYXRlKGNjcCk7DQotCW1fcENvbnRlbnRzLT5TZXRJdGVtU3BhY2UoUE9QVVBfSVRFTV9TUEFDRSk7DQotCW1fcENvbnRlbnRzLT5TZXRUb3BTcGFjZShQT1BVUF9JVEVNX1NQQUNFKTsNCi0JbV9wQ29udGVudHMtPlNldEJvdHRvbVNwYWNlKFBPUFVQX0lURU1fU1BBQ0UpOw0KLX0NCi0NCi12b2lkIENQV0xfTm90ZUl0ZW06OlJlUG9zQ2hpbGRXbmQoKQ0KLXsNCi0JaWYgKHRoaXMtPklzVmFsaWQoKSkNCi0Jew0KLQkJQVNTRVJUKG1fcFN1YmplY3QgIT0gTlVMTCk7DQotCQlBU1NFUlQobV9wRGF0ZVRpbWUgIT0gTlVMTCk7DQotCQlBU1NFUlQobV9wQ29udGVudHMgIT0gTlVMTCk7DQotDQotCQlDUERGX1JlY3QgcmNDbGllbnQgPSBHZXRDbGllbnRSZWN0KCk7DQotDQotCQlDUERGX1JlY3QgcmNTdWJqZWN0ID0gcmNDbGllbnQ7DQotCQlyY1N1YmplY3QubGVmdCArPSBQT1BVUF9JVEVNX1RFWFRfSU5ERU5UOw0KLQkJcmNTdWJqZWN0LnRvcCA9IHJjQ2xpZW50LnRvcDsNCi0JCXJjU3ViamVjdC5yaWdodCA9IFBXTF9NSU4ocmNTdWJqZWN0LmxlZnQgKyBtX3BTdWJqZWN0LT5HZXRDb250ZW50UmVjdCgpLldpZHRoKCkgKyAxLjBmLCByY0NsaWVudC5yaWdodCk7DQotCQlyY1N1YmplY3QuYm90dG9tID0gcmNTdWJqZWN0LnRvcCAtIG1fcFN1YmplY3QtPkdldENvbnRlbnRSZWN0KCkuSGVpZ2h0KCk7DQotCQlyY1N1YmplY3QuTm9ybWFsaXplKCk7DQotCQltX3BTdWJqZWN0LT5Nb3ZlKHJjU3ViamVjdCwgVFJVRSwgRkFMU0UpOw0KLQkJbV9wU3ViamVjdC0+U2V0VmlzaWJsZShDUFdMX1V0aWxzOjpDb250YWluc1JlY3QocmNDbGllbnQsIHJjU3ViamVjdCkpOw0KLQ0KLQkJQ1BERl9SZWN0IHJjRGF0ZSA9IHJjQ2xpZW50Ow0KLQkJcmNEYXRlLnJpZ2h0IC09IFBPUFVQX0lURU1fVEVYVF9JTkRFTlQ7DQotCQlyY0RhdGUubGVmdCA9IFBXTF9NQVgocmNEYXRlLnJpZ2h0IC0gbV9wRGF0ZVRpbWUtPkdldENvbnRlbnRSZWN0KCkuV2lkdGgoKSAtIDEuMGYsIHJjU3ViamVjdC5yaWdodCk7DQotCQlyY0RhdGUuYm90dG9tID0gcmNEYXRlLnRvcCAtIG1fcERhdGVUaW1lLT5HZXRDb250ZW50UmVjdCgpLkhlaWdodCgpOw0KLQkJcmNEYXRlLk5vcm1hbGl6ZSgpOw0KLQkJbV9wRGF0ZVRpbWUtPk1vdmUocmNEYXRlLCBUUlVFLCBGQUxTRSk7DQotCQltX3BEYXRlVGltZS0+U2V0VmlzaWJsZShDUFdMX1V0aWxzOjpDb250YWluc1JlY3QocmNDbGllbnQsIHJjRGF0ZSkpOw0KLQ0KLQkJQ1BERl9SZWN0IHJjQ29udGVudHMgPSByY0NsaWVudDsNCi0JCXJjQ29udGVudHMubGVmdCArPSAxLjBmOw0KLQkJcmNDb250ZW50cy5yaWdodCAtPSAxLjBmOw0KLQkJcmNDb250ZW50cy50b3AgPSByY0RhdGUuYm90dG9tIC0gUE9QVVBfSVRFTV9IRUFEX0JPVFRPTTsNCi0JCXJjQ29udGVudHMuYm90dG9tICs9IFBPUFVQX0lURU1fQk9UVE9NV0lEVEg7DQotCQlyY0NvbnRlbnRzLk5vcm1hbGl6ZSgpOw0KLQkJbV9wQ29udGVudHMtPk1vdmUocmNDb250ZW50cywgVFJVRSwgRkFMU0UpOw0KLQkJbV9wQ29udGVudHMtPlNldFZpc2libGUoQ1BXTF9VdGlsczo6Q29udGFpbnNSZWN0KHJjQ2xpZW50LCByY0NvbnRlbnRzKSk7DQotCX0NCi0NCi0JU2V0Q2xpcFJlY3QoQ1BXTF9VdGlsczo6SW5mbGF0ZVJlY3QoR2V0V2luZG93UmVjdCgpLDEuMGYpKTsNCi19DQotDQotdm9pZCBDUFdMX05vdGVJdGVtOjpTZXRQcml2YXRlRGF0YSh2b2lkKiBwRGF0YSkNCi17DQotCW1fcFByaXZhdGVEYXRhID0gcERhdGE7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Ob3RlSXRlbTo6U2V0QmtDb2xvcihjb25zdCBDUFdMX0NvbG9yJiBjb2xvcikNCi17DQotCUNQV0xfQ29sb3Igc0JLID0gY29sb3I7DQotCXRoaXMtPlNldEJhY2tncm91bmRDb2xvcihzQkspOw0KLQ0KLQlDUFdMX0NvbG9yIHNUZXh0Q29sb3I7DQotDQotCWlmIChDUFdMX1V0aWxzOjpJc0JsYWNrT3JXaGl0ZShzQkspKQ0KLQkJc1RleHRDb2xvciA9IFBXTF9ERUZBVUxUX1dISVRFQ09MT1I7DQotCWVsc2UNCi0JCXNUZXh0Q29sb3IgPSBQV0xfREVGQVVMVF9CTEFDS0NPTE9SOw0KLQ0KLQl0aGlzLT5TZXRUZXh0Q29sb3Ioc1RleHRDb2xvcik7DQotCWlmIChtX3BTdWJqZWN0KQ0KLQkJbV9wU3ViamVjdC0+U2V0VGV4dENvbG9yKHNUZXh0Q29sb3IpOw0KLQlpZiAobV9wRGF0ZVRpbWUpDQotCQltX3BEYXRlVGltZS0+U2V0VGV4dENvbG9yKHNUZXh0Q29sb3IpOw0KLQ0KLQl0aGlzLT5JbnZhbGlkYXRlUmVjdChOVUxMKTsNCi0NCi0JaWYgKElQV0xfTm90ZU5vdGlmeSogcE5vdGlmeSA9IEdldE5vdGVOb3RpZnkoKSkNCi0Jew0KLQkJcE5vdGlmeS0+T25TZXRCa0NvbG9yKHRoaXMpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Ob3RlSXRlbTo6U2V0U3ViamVjdE5hbWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNOYW1lKQ0KLXsNCi0JaWYgKG1fcFN1YmplY3QpDQotCXsNCi0JCW1fcFN1YmplY3QtPlNldFRleHQoc05hbWUpOwkNCi0JfQ0KLQ0KLQlpZiAoSVBXTF9Ob3RlTm90aWZ5KiBwTm90aWZ5ID0gR2V0Tm90ZU5vdGlmeSgpKQ0KLQl7DQotCQlwTm90aWZ5LT5PblNldFN1YmplY3ROYW1lKHRoaXMpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Ob3RlSXRlbTo6U2V0QXV0aG9yTmFtZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc05hbWUpDQotew0KLQltX3NBdXRob3IgPSBzTmFtZTsNCi0JUmVzZXRTdWJqZWN0TmFtZSgtMSk7CQ0KLQ0KLQlpZiAoSVBXTF9Ob3RlTm90aWZ5KiBwTm90aWZ5ID0gR2V0Tm90ZU5vdGlmeSgpKQ0KLQl7DQotCQlwTm90aWZ5LT5PblNldEF1dGhvck5hbWUodGhpcyk7DQotCX0NCi19DQotDQotdm9pZCBDUFdMX05vdGVJdGVtOjpSZXNldFN1YmplY3ROYW1lKEZYX0lOVDMyIG5JdGVtSW5kZXgpDQotew0KLQlpZiAobkl0ZW1JbmRleCA8IDApDQotCXsNCi0JCWlmIChDUFdMX1duZCogcFBhcmVudCA9IHRoaXMtPkdldFBhcmVudFdpbmRvdygpKQ0KLQkJew0KLQkJCUFTU0VSVChwUGFyZW50LT5HZXRDbGFzc05hbWUoKSA9PSAiQ1BXTF9Ob3RlX0NvbnRlbnRzIik7DQotDQotCQkJQ1BXTF9Ob3RlX0NvbnRlbnRzKiBwQ29udGVudHMgPSAoQ1BXTF9Ob3RlX0NvbnRlbnRzKilwUGFyZW50Ow0KLQkJCW5JdGVtSW5kZXggPSBwQ29udGVudHMtPkdldEl0ZW1JbmRleCh0aGlzKTsNCi0JCX0NCi0JfQ0KLQ0KLQljb25zdCBDUFdMX05vdGUqIHBOb3RlID0gR2V0Tm90ZSgpOw0KLQlBU1NFUlQocE5vdGUgIT0gTlVMTCk7DQotDQotCUNGWF9XaWRlU3RyaW5nIHNTdWJqZWN0Ow0KLQlzU3ViamVjdC5Gb3JtYXQocE5vdGUtPkdldFJlcGx5U3RyaW5nKCksIG5JdGVtSW5kZXgpOw0KLQ0KLQlpZiAoIW1fc0F1dGhvci5Jc0VtcHR5KCkpDQotCXsNCi0JCQ0KLQkJc1N1YmplY3QgKz0gTCIgLSAiOw0KLQkJc1N1YmplY3QgKz0gbV9zQXV0aG9yOw0KLQl9DQotCXRoaXMtPlNldFN1YmplY3ROYW1lKHNTdWJqZWN0KTsNCi0JdGhpcy0+UmVQb3NDaGlsZFduZCgpOw0KLX0NCi0NCi12b2lkIENQV0xfTm90ZUl0ZW06OlNldERhdGVUaW1lKEZYX1NZU1RFTVRJTUUgdGltZSkNCi17DQotCW1fZHROb3RlID0gdGltZTsNCi0JDQotCUNGWF9XaWRlU3RyaW5nIHN3VGltZTsNCi0Jc3dUaW1lLkZvcm1hdCgoRlhfTFBDV1NUUilMIiUwNGQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkIiwgdGltZS53WWVhciwgdGltZS53TW9udGgsIHRpbWUud0RheSwgdGltZS53SG91ciwgdGltZS53TWludXRlLCB0aW1lLndTZWNvbmQpOw0KLQlpZiAobV9wRGF0ZVRpbWUpDQotCXsNCi0JCW1fcERhdGVUaW1lLT5TZXRUZXh0KHN3VGltZSk7DQotCX0NCi0NCi0JdGhpcy0+UmVQb3NDaGlsZFduZCgpOw0KLQ0KLQlpZiAoSVBXTF9Ob3RlTm90aWZ5KiBwTm90aWZ5ID0gR2V0Tm90ZU5vdGlmeSgpKQ0KLQl7DQotCQlwTm90aWZ5LT5PblNldERhdGVUaW1lKHRoaXMpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Ob3RlSXRlbTo6U2V0Q29udGVudHMoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNDb250ZW50cykNCi17DQotCWlmIChtX3BDb250ZW50cykNCi0Jew0KLQkJbV9wQ29udGVudHMtPlNldFRleHQoc0NvbnRlbnRzKTsNCi0JfQ0KLQ0KLQlpZiAoSVBXTF9Ob3RlTm90aWZ5KiBwTm90aWZ5ID0gR2V0Tm90ZU5vdGlmeSgpKQ0KLQl7DQotCQlwTm90aWZ5LT5PblNldENvbnRlbnRzKHRoaXMpOw0KLQl9DQotfQ0KLQ0KLUNQV0xfTm90ZUl0ZW0qIENQV0xfTm90ZUl0ZW06OkdldFBhcmVudE5vdGVJdGVtKCkgY29uc3QNCi17DQotCWlmIChDUFdMX1duZCogcFBhcmVudCA9IHRoaXMtPkdldFBhcmVudFdpbmRvdygpKQ0KLQl7DQotCQlpZiAoQ1BXTF9XbmQqIHBHcmFuZCA9IHBQYXJlbnQtPkdldFBhcmVudFdpbmRvdygpKQ0KLQkJew0KLQkJCUFTU0VSVChwR3JhbmQtPkdldENsYXNzTmFtZSgpID09ICJDUFdMX05vdGVJdGVtIik7DQotCQkJcmV0dXJuIChDUFdMX05vdGVJdGVtKilwR3JhbmQ7DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLUlQV0xfTm90ZUl0ZW0qIENQV0xfTm90ZUl0ZW06OkdldFBhcmVudEl0ZW0oKSBjb25zdA0KLXsNCi0JcmV0dXJuIEdldFBhcmVudE5vdGVJdGVtKCk7DQotfQ0KLQ0KLUNQV0xfRWRpdCogQ1BXTF9Ob3RlSXRlbTo6R2V0RWRpdCgpIGNvbnN0DQotew0KLQlpZiAobV9wQ29udGVudHMpDQotCQlyZXR1cm4gbV9wQ29udGVudHMtPkdldEVkaXQoKTsNCi0JcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLXZvaWQqIENQV0xfTm90ZUl0ZW06OkdldFByaXZhdGVEYXRhKCkgY29uc3QNCi17DQotCXJldHVybiBtX3BQcml2YXRlRGF0YTsNCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgQ1BXTF9Ob3RlSXRlbTo6R2V0QXV0aG9yTmFtZSgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9zQXV0aG9yOyANCi19DQotDQotQ1BXTF9Db2xvciBDUFdMX05vdGVJdGVtOjpHZXRCa0NvbG9yKCkgY29uc3QNCi17DQotCXJldHVybiB0aGlzLT5HZXRCYWNrZ3JvdW5kQ29sb3IoKTsNCi19DQotDQotQ0ZYX1dpZGVTdHJpbmcgQ1BXTF9Ob3RlSXRlbTo6R2V0Q29udGVudHMoKSBjb25zdA0KLXsNCi0JaWYgKG1fcENvbnRlbnRzKQ0KLQkJcmV0dXJuIG1fcENvbnRlbnRzLT5HZXRUZXh0KCk7DQotDQotCXJldHVybiBMIiI7DQotfQ0KLQ0KLUZYX1NZU1RFTVRJTUUgQ1BXTF9Ob3RlSXRlbTo6R2V0RGF0ZVRpbWUoKSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fZHROb3RlOw0KLX0NCi0NCi1DRlhfV2lkZVN0cmluZyBDUFdMX05vdGVJdGVtOjpHZXRTdWJqZWN0TmFtZSgpIGNvbnN0DQotew0KLQlpZiAobV9wU3ViamVjdCkNCi0JCXJldHVybiBtX3BTdWJqZWN0LT5HZXRUZXh0KCk7DQotDQotCXJldHVybiBMIiI7DQotfQ0KLQ0KLUNQV0xfTm90ZUl0ZW0qIENQV0xfTm90ZUl0ZW06OkNyZWF0ZU5vdGVJdGVtKCkNCi17DQotCWlmIChtX3BDb250ZW50cykNCi0JCXJldHVybiBtX3BDb250ZW50cy0+Q3JlYXRlU3ViSXRlbSgpOw0KLQ0KLQlyZXR1cm4gTlVMTDsNCi19DQotDQotSVBXTF9Ob3RlSXRlbSogQ1BXTF9Ob3RlSXRlbTo6Q3JlYXRlU3ViSXRlbSgpDQotew0KLQlyZXR1cm4gQ3JlYXRlTm90ZUl0ZW0oKTsNCi19DQotDQotRlhfSU5UMzIgQ1BXTF9Ob3RlSXRlbTo6Q291bnRTdWJJdGVtcygpIGNvbnN0DQotew0KLQlpZiAobV9wQ29udGVudHMpDQotCQlyZXR1cm4gbV9wQ29udGVudHMtPkNvdW50U3ViSXRlbXMoKTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLUlQV0xfTm90ZUl0ZW0qIENQV0xfTm90ZUl0ZW06OkdldFN1Ykl0ZW1zKEZYX0lOVDMyIGluZGV4KSBjb25zdA0KLXsNCi0JaWYgKG1fcENvbnRlbnRzKQ0KLQkJcmV0dXJuIG1fcENvbnRlbnRzLT5HZXRTdWJJdGVtcyhpbmRleCk7DQotDQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi12b2lkIENQV0xfTm90ZUl0ZW06OkRlbGV0ZVN1Ykl0ZW0oSVBXTF9Ob3RlSXRlbSogcE5vdGVJdGVtKQ0KLXsNCi0JdGhpcy0+S2lsbEZvY3VzKCk7DQotDQotCWlmIChJUFdMX05vdGVOb3RpZnkqIHBOb3RpZnkgPSBHZXROb3RlTm90aWZ5KCkpDQotCXsNCi0JCXBOb3RpZnktPk9uSXRlbURlbGV0ZShwTm90ZUl0ZW0pOw0KLQl9DQotDQotCWlmIChtX3BDb250ZW50cykNCi0JCW1fcENvbnRlbnRzLT5EZWxldGVTdWJJdGVtKHBOb3RlSXRlbSk7DQotfQ0KLQ0KLUlQV0xfTm90ZUl0ZW0qIENQV0xfTm90ZUl0ZW06OkdldEhpdE5vdGVJdGVtKGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQ0KLXsNCi0JQ1BERl9Qb2ludCBwdCA9IHRoaXMtPlBhcmVudFRvQ2hpbGQocG9pbnQpOw0KLQ0KLQlpZiAodGhpcy0+V25kSGl0VGVzdChwdCkpDQotCXsNCi0JCWlmIChtX3BDb250ZW50cykNCi0JCXsNCi0JCQlpZiAoSVBXTF9Ob3RlSXRlbSogcE5vdGVJdGVtID0gbV9wQ29udGVudHMtPkdldEhpdE5vdGVJdGVtKHB0KSkNCi0JCQkJcmV0dXJuIHBOb3RlSXRlbTsNCi0JCX0NCi0NCi0JCXJldHVybiB0aGlzOw0KLQl9DQotDQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi1JUFdMX05vdGVJdGVtKiBDUFdMX05vdGVJdGVtOjpHZXRGb2N1c2VkTm90ZUl0ZW0oKSBjb25zdA0KLXsNCi0JaWYgKGNvbnN0IENQV0xfV25kKiBwV25kID0gdGhpcy0+R2V0Rm9jdXNlZCgpKQ0KLQl7DQotCQlpZiAocFduZC0+R2V0Q2xhc3NOYW1lKCkgPT0gIkNQV0xfRWRpdCIpDQotCQl7DQotCQkJaWYgKENQV0xfV25kKiBwUGFyZW50ID0gcFduZC0+R2V0UGFyZW50V2luZG93KCkpDQotCQkJew0KLQkJCQlBU1NFUlQocFBhcmVudC0+R2V0Q2xhc3NOYW1lKCkgPT0gIkNQV0xfTm90ZV9Db250ZW50cyIpOw0KLQkJCQkNCi0JCQkJaWYgKENQV0xfV25kKiBwR3JhbmQgPSBwUGFyZW50LT5HZXRQYXJlbnRXaW5kb3coKSkNCi0JCQkJew0KLQkJCQkJQVNTRVJUKHBHcmFuZC0+R2V0Q2xhc3NOYW1lKCkgPT0gIkNQV0xfTm90ZUl0ZW0iKTsJCQkJCQ0KLQkJCQkJcmV0dXJuIChDUFdMX05vdGVJdGVtKilwR3JhbmQ7DQotCQkJCX0NCi0JCQl9DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLUZYX0ZMT0FUIENQV0xfTm90ZUl0ZW06OkdldEl0ZW1IZWlnaHQoRlhfRkxPQVQgZkxpbWl0V2lkdGgpDQotew0KLQlpZiAoZkxpbWl0V2lkdGggPiAwKQ0KLQl7DQotCQlpZiAoIW1fYlNpemVDaGFuZ2VkKQ0KLQkJCXJldHVybiBtX2ZPbGRJdGVtSGVpZ2h0Ow0KLQ0KLQkJbV9iU2l6ZUNoYW5nZWQgPSBGQUxTRTsNCi0NCi0JCUFTU0VSVChtX3BTdWJqZWN0ICE9IE5VTEwpOw0KLQkJQVNTRVJUKG1fcERhdGVUaW1lICE9IE5VTEwpOw0KLQkJQVNTRVJUKG1fcENvbnRlbnRzICE9IE5VTEwpOw0KLQ0KLQkJRlhfRkxPQVQgZlJldCA9IG1fcERhdGVUaW1lLT5HZXRDb250ZW50UmVjdCgpLkhlaWdodCgpOw0KLQkJRlhfRkxPQVQgZkJvcmRlcldpZHRoID0gKEZYX0ZMT0FUKXRoaXMtPkdldEJvcmRlcldpZHRoKCk7DQotCQlpZiAoZkxpbWl0V2lkdGggPiBmQm9yZGVyV2lkdGggKiAyKQ0KLQkJCWZSZXQgKz0gbV9wQ29udGVudHMtPkdldENvbnRlbnRzSGVpZ2h0KGZMaW1pdFdpZHRoIC0gZkJvcmRlcldpZHRoICogMik7DQotCQlmUmV0ICs9IFBPUFVQX0lURU1fSEVBRF9CT1RUT00gKyBQT1BVUF9JVEVNX0JPVFRPTVdJRFRIICsgZkJvcmRlcldpZHRoICogMjsNCi0NCi0JCXJldHVybiBtX2ZPbGRJdGVtSGVpZ2h0ID0gZlJldDsNCi0JfQ0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotRlhfRkxPQVQgQ1BXTF9Ob3RlSXRlbTo6R2V0SXRlbUxlZnRNYXJnaW4oKQ0KLXsNCi0JcmV0dXJuIFBPUFVQX0lURU1fU0lERU1BUkdJTjsNCi19DQotDQotRlhfRkxPQVQgQ1BXTF9Ob3RlSXRlbTo6R2V0SXRlbVJpZ2h0TWFyZ2luKCkNCi17DQotCXJldHVybiBQT1BVUF9JVEVNX1NJREVNQVJHSU47DQotfQ0KLQ0KLUZYX0JPT0wJQ1BXTF9Ob3RlSXRlbTo6T25MQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50JiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlpZiAoIW1fcENvbnRlbnRzLT5XbmRIaXRUZXN0KG1fcENvbnRlbnRzLT5QYXJlbnRUb0NoaWxkKHBvaW50KSkpDQotCXsNCi0JCVNldE5vdGVGb2N1cyhGQUxTRSk7DQotCX0NCi0NCi0JQ1BXTF9XbmQ6Ok9uTEJ1dHRvbkRvd24ocG9pbnQsbkZsYWcpOw0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTAlDUFdMX05vdGVJdGVtOjpPblJCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKQ0KLXsNCi0JaWYgKCFtX3BDb250ZW50cy0+V25kSGl0VGVzdChtX3BDb250ZW50cy0+UGFyZW50VG9DaGlsZChwb2ludCkpKQ0KLQl7DQotCQlTZXROb3RlRm9jdXMoRkFMU0UpOw0KLQkJUG9wdXBOb3RlSXRlbU1lbnUocG9pbnQpOw0KLQ0KLQkJcmV0dXJuIFRSVUU7DQotCX0NCi0NCi0JcmV0dXJuIENQV0xfV25kOjpPblJCdXR0b25VcChwb2ludCxuRmxhZyk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Ob3RlSXRlbTo6T25Ob3RpZnkoQ1BXTF9XbmQqIHBXbmQsIEZYX0RXT1JEIG1zZywgRlhfSU5UUFRSIHdQYXJhbSwgRlhfSU5UUFRSIGxQYXJhbSkNCi17DQotCXN3aXRjaCAobXNnKQ0KLQl7DQotCWNhc2UgUE5NX05PVEVFRElUQ0hBTkdFRDoJDQotCQltX2JTaXplQ2hhbmdlZCA9IFRSVUU7DQotDQotCQlpZiAoQ1BXTF9XbmQqIHBQYXJlbnQgPSB0aGlzLT5HZXRQYXJlbnRXaW5kb3coKSkNCi0JCXsNCi0JCQlwUGFyZW50LT5Pbk5vdGlmeSh0aGlzLCBQTk1fTk9URUVESVRDSEFOR0VELCAwLCAwKTsNCi0JCX0NCi0JCXJldHVybjsJDQotCWNhc2UgUE5NX1NFVENBUkVUSU5GTzoNCi0JCWlmIChQV0xfQ0FSRVRfSU5GTyAqIHBJbmZvID0gKFBXTF9DQVJFVF9JTkZPKil3UGFyYW0pDQotCQl7DQotCQkJUFdMX0NBUkVUX0lORk8gbmV3SW5mbyA9ICpwSW5mbzsNCi0JCQluZXdJbmZvLmJWaXNpYmxlID0gVFJVRTsNCi0JCQluZXdJbmZvLnB0SGVhZCA9IHRoaXMtPkNoaWxkVG9QYXJlbnQocEluZm8tPnB0SGVhZCk7DQotCQkJbmV3SW5mby5wdEZvb3QgPSB0aGlzLT5DaGlsZFRvUGFyZW50KHBJbmZvLT5wdEZvb3QpOw0KLQ0KLQkJCWlmIChDUFdMX1duZCAqIHBQYXJlbnQgPSB0aGlzLT5HZXRQYXJlbnRXaW5kb3coKSkNCi0JCQl7DQotCQkJCXBQYXJlbnQtPk9uTm90aWZ5KHRoaXMsIFBOTV9TRVRDQVJFVElORk8sIChGWF9JTlRQVFIpJm5ld0luZm8sIDApOw0KLQkJCX0NCi0JCX0NCi0JCXJldHVybjsNCi0JY2FzZSBQTk1fTk9URVJFU0VUOg0KLQkJbV9iU2l6ZUNoYW5nZWQgPSBUUlVFOw0KLQkJbV9wQ29udGVudHMtPk9uTm90aWZ5KHRoaXMsIFBOTV9OT1RFUkVTRVQsIDAsIDApOw0KLQkJDQotCQlyZXR1cm47DQotCX0NCi0NCi0JQ1BXTF9XbmQ6Ok9uTm90aWZ5KHBXbmQsIG1zZywgd1BhcmFtLCBsUGFyYW0pOw0KLX0NCi0NCi12b2lkIENQV0xfTm90ZUl0ZW06OlBvcHVwTm90ZUl0ZW1NZW51KGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQ0KLXsNCi0JaWYgKElQV0xfTm90ZU5vdGlmeSogcE5vdGlmeSA9IEdldE5vdGVOb3RpZnkoKSkNCi0Jew0KLQkJRlhfSU5UMzIgeCx5Ow0KLQkJUFdMdG9XbmQocG9pbnQsIHgsIHkpOw0KLQkJaWYgKElGWF9TeXN0ZW1IYW5kbGVyKiBwU0ggPSBHZXRTeXN0ZW1IYW5kbGVyKCkpDQotCQkJcFNILT5DbGllbnRUb1NjcmVlbihHZXRBdHRhY2hlZEhXbmQoKSwgeCwgeSk7DQotCQlwTm90aWZ5LT5PblBvcHVwTWVudSh0aGlzLCB4LCB5KTsNCi0JfQ0KLX0NCi0NCi1jb25zdCBDUFdMX05vdGUqIENQV0xfTm90ZUl0ZW06OkdldE5vdGUoKSBjb25zdA0KLXsNCi0JaWYgKGNvbnN0IENQV0xfV25kKiBwUm9vdCA9IHRoaXMtPkdldFJvb3RXbmQoKSkNCi0Jew0KLQkJQVNTRVJUKHBSb290LT5HZXRDbGFzc05hbWUoKSA9PSAiQ1BXTF9Ob3RlSXRlbSIpOw0KLQkJQ1BXTF9Ob3RlSXRlbSogcE5vdGVJdGVtID0gKENQV0xfTm90ZUl0ZW0qKXBSb290Ow0KLQkJaWYgKHBOb3RlSXRlbS0+SXNUb3BJdGVtKCkpDQotCQl7DQotCQkJcmV0dXJuIChDUFdMX05vdGUqKXBOb3RlSXRlbTsNCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gTlVMTDsNCi19DQotDQotSVBXTF9Ob3RlTm90aWZ5KiBDUFdMX05vdGVJdGVtOjpHZXROb3RlTm90aWZ5KCkgY29uc3QNCi17DQotCWlmIChjb25zdCBDUFdMX05vdGUqIHBOb3RlID0gR2V0Tm90ZSgpKQ0KLQkJcmV0dXJuIHBOb3RlLT5HZXROb3RlTm90aWZ5KCk7DQotDQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi12b2lkIENQV0xfTm90ZUl0ZW06Ok9uQ3JlYXRlTm90ZUl0ZW0oKQ0KLXsNCi0JaWYgKElQV0xfTm90ZU5vdGlmeSogcE5vdGlmeSA9IEdldE5vdGVOb3RpZnkoKSkNCi0Jew0KLQkJcE5vdGlmeS0+T25JdGVtQ3JlYXRlKHRoaXMpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Ob3RlSXRlbTo6T25Db250ZW50c1ZhbGlkYXRlKCkNCi17DQotCWlmIChJUFdMX05vdGVOb3RpZnkqIHBOb3RpZnkgPSBHZXROb3RlTm90aWZ5KCkpDQotCXsNCi0JCXBOb3RpZnktPk9uU2V0Q29udGVudHModGhpcyk7DQotCX0NCi19DQotDQotdm9pZCBDUFdMX05vdGVJdGVtOjpTZXROb3RlRm9jdXMoRlhfQk9PTCBiTGFzdCkNCi17DQotCW1fcENvbnRlbnRzLT5TZXRFZGl0Rm9jdXMoYkxhc3QpOw0KLX0NCi0NCi12b2lkIENQV0xfTm90ZUl0ZW06OkVuYWJsZU1vZGlmeShGWF9CT09MIGJFbmFibGVkKQ0KLXsNCi0JbV9wQ29udGVudHMtPkVuYWJsZU1vZGlmeShiRW5hYmxlZCk7DQotCW1fYkFsbG93TW9kaWZ5ID0gYkVuYWJsZWQ7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Ob3RlSXRlbTo6RW5hYmxlUmVhZChGWF9CT09MIGJFbmFibGVkKQ0KLXsNCi0JbV9wQ29udGVudHMtPkVuYWJsZVJlYWQoYkVuYWJsZWQpOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfTm90ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ1BXTF9Ob3RlOjpDUFdMX05vdGUoSVBvcHVwX05vdGUqIHBQb3B1cE5vdGUsIElQV0xfTm90ZU5vdGlmeSogcE5vdGVOb3RpZnksIElQV0xfTm90ZUhhbmRsZXIqIHBOb3RlSGFuZGxlcikgOiANCi0JbV9wQXV0aG9yKE5VTEwpLA0KLQltX3BJY29uKE5VTEwpLA0KLQltX3BDbG9zZUJveChOVUxMKSwNCi0JbV9wQ29udGVudHNCYXIoTlVMTCksDQotCW1fcExCQm94KE5VTEwpLA0KLQltX3BSQkJveChOVUxMKSwNCi0JbV9wT3B0aW9ucyhOVUxMKSwNCi0JbV9iUmVzaXppbmcoRkFMU0UpLA0KLQltX3JjQ2FwdGlvbigwLDAsMCwwKSwNCi0JbV9wTm90ZU5vdGlmeShwTm90ZU5vdGlmeSksDQotCW1fYkVuYWxibGVOb3RpZnkoVFJVRSksDQotCW1fcFBvcHVwTm90ZShwUG9wdXBOb3RlKSwNCi0JbV9wTm90ZUhhbmRsZXIocE5vdGVIYW5kbGVyKQ0KLXsNCi19DQotDQotQ1BXTF9Ob3RlOjp+Q1BXTF9Ob3RlKCkNCi17DQotfQ0KLQ0KLUlQV0xfTm90ZUl0ZW0qIENQV0xfTm90ZTo6UmVwbHkoKQ0KLXsNCi0JcmV0dXJuIENyZWF0ZU5vdGVJdGVtKCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Ob3RlOjpFbmFibGVOb3RpZnkoRlhfQk9PTCBiRW5hYmxlZCkNCi17DQotCW1fYkVuYWxibGVOb3RpZnkgPSBiRW5hYmxlZDsNCi19DQotDQotdm9pZCBDUFdMX05vdGU6OlJlUG9zQ2hpbGRXbmQoKQ0KLXsNCi0JUmVQb3NOb3RlQ2hpbGRyZW4oKTsNCi0JbV9wQ29udGVudHMtPk9uTm90aWZ5KHRoaXMsIFBOTV9OT1RFUkVTRVQsIDAsIDApOw0KLQlSZXNldFNjcm9sbEJhcigpOw0KLQltX3BDb250ZW50cy0+T25Ob3RpZnkodGhpcywgUE5NX05PVEVSRVNFVCwgMCwgMCk7DQotCXRoaXMtPk9uTm90aWZ5KHRoaXMsIFBOTV9OT1RFRURJVENIQU5HRUQsIDAsIDApOw0KLQkvL82ssr0NCi0JaWYgKGNvbnN0IENQV0xfV25kKiBwV25kID0gdGhpcy0+R2V0Rm9jdXNlZCgpKQ0KLQl7DQotCQlpZiAocFduZC0+R2V0Q2xhc3NOYW1lKCkgPT0gIkNQV0xfRWRpdCIpDQotCQl7DQotCQkJQ1BXTF9FZGl0KiBwRWRpdCA9IChDUFdMX0VkaXQqKXBXbmQ7DQotCQkJcEVkaXQtPlNldENhcmV0KHBFZGl0LT5HZXRDYXJldCgpKTsNCi0JCX0NCi0JfQ0KLQkvL0NQREZfUG9pbnQgcHROZXcgPSBtX3BDb250ZW50cy0+R2V0U2Nyb2xsUG9zKCk7DQotCS8vbV9wQ29udGVudHNCYXItPk9uTm90aWZ5KHRoaXMsIFBOTV9TRVRTQ1JPTExQT1MsIFNCVF9WU0NST0xMLCAoRlhfSU5UUFRSKSZwdE5ldy55KTsNCi19DQotDQotRlhfQk9PTCBDUFdMX05vdGU6OlJlc2V0U2Nyb2xsQmFyKCkNCi17DQotCUZYX0JPT0wgYlNjcm9sbENoYW5nZWQgPSBGQUxTRTsNCi0NCi0JaWYgKFNjcm9sbEJhclNob3VsZFZpc2libGUoKSkNCi0Jew0KLQkJaWYgKCFtX3BDb250ZW50c0Jhci0+SXNWaXNpYmxlKCkpDQotCQl7DQotCQkJbV9wQ29udGVudHNCYXItPlNldFZpc2libGUoVFJVRSk7DQotCQkJaWYgKG1fcENvbnRlbnRzQmFyLT5Jc1Zpc2libGUoKSkNCi0JCQl7DQotCQkJCW1fcENvbnRlbnRzQmFyLT5JbnZhbGlkYXRlUmVjdChOVUxMKTsNCi0JCQkJYlNjcm9sbENoYW5nZWQgPSBUUlVFOw0KLQkJCX0NCi0JCX0JDQotCX0NCi0JZWxzZQ0KLQl7DQotCQlpZiAobV9wQ29udGVudHNCYXItPklzVmlzaWJsZSgpKQ0KLQkJew0KLQkJCW1fcENvbnRlbnRzQmFyLT5TZXRWaXNpYmxlKEZBTFNFKTsNCi0JCQltX3BDb250ZW50c0Jhci0+SW52YWxpZGF0ZVJlY3QoTlVMTCk7DQotDQotCQkJYlNjcm9sbENoYW5nZWQgPSBUUlVFOw0KLQkJfQ0KLQl9DQotDQotCWlmIChiU2Nyb2xsQ2hhbmdlZCkNCi0Jew0KLQkJQ1BERl9SZWN0IHJjTm90ZSA9IHRoaXMtPkdldENsaWVudFJlY3QoKTsNCi0JCUNQREZfUmVjdCByY0NvbnRlbnRzID0gbV9wQ29udGVudHMtPkdldFdpbmRvd1JlY3QoKTsNCi0JCXJjQ29udGVudHMucmlnaHQgPSByY05vdGUucmlnaHQgLSAzLjBmOw0KLQkJaWYgKG1fcENvbnRlbnRzQmFyLT5Jc1Zpc2libGUoKSkNCi0JCQlyY0NvbnRlbnRzLnJpZ2h0IC09IFBXTF9TQ1JPTExCQVJfV0lEVEg7DQotCQltX3BDb250ZW50cy0+TW92ZShyY0NvbnRlbnRzLCBUUlVFLCBUUlVFKTsNCi0JCW1fcENvbnRlbnRzLT5TZXRTY3JvbGxQb3MoQ1BERl9Qb2ludCgwLjBmLDAuMGYpKTsNCi0JCW1fcENvbnRlbnRzLT5JbnZhbGlkYXRlUmVjdChOVUxMKTsNCi0JfQ0KLQ0KLQlyZXR1cm4gYlNjcm9sbENoYW5nZWQ7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9Ob3RlOjpTY3JvbGxCYXJTaG91bGRWaXNpYmxlKCkNCi17DQotCUNQREZfUmVjdCByY0NvbnRlbnRzRmFjdCA9IG1fcENvbnRlbnRzLT5HZXRTY3JvbGxBcmVhKCk7DQotCUNQREZfUmVjdCByY0NvbnRlbnRzQ2xpZW50ID0gbV9wQ29udGVudHMtPkdldENsaWVudFJlY3QoKTsNCi0NCi0JcmV0dXJuIHJjQ29udGVudHNGYWN0LkhlaWdodCgpID4gcmNDb250ZW50c0NsaWVudC5IZWlnaHQoKTsJDQotfQ0KLQ0KLXZvaWQgQ1BXTF9Ob3RlOjpTZXRPcHRpb25zVGV4dChjb25zdCBDRlhfV2lkZVN0cmluZyYgc1RleHQpDQotew0KLQlpZiAobV9wT3B0aW9ucykNCi0JCW1fcE9wdGlvbnMtPlNldFRleHQoc1RleHQpOw0KLQ0KLQlSZVBvc05vdGVDaGlsZHJlbigpOw0KLX0NCi0NCi12b2lkIENQV0xfTm90ZTo6UmVQb3NOb3RlQ2hpbGRyZW4oKQ0KLXsNCi0JaWYgKG1fYlJlc2l6aW5nKSByZXR1cm47DQotDQotCW1fYlJlc2l6aW5nID0gVFJVRTsNCi0NCi0JaWYgKHRoaXMtPklzVmFsaWQoKSkNCi0Jew0KLQkJQVNTRVJUKG1fcFN1YmplY3QgIT0gTlVMTCk7DQotCQlBU1NFUlQobV9wRGF0ZVRpbWUgIT0gTlVMTCk7DQotCQlBU1NFUlQobV9wQ29udGVudHMgIT0gTlVMTCk7DQotCQlBU1NFUlQobV9wQXV0aG9yICE9IE5VTEwpOw0KLQkJQVNTRVJUKG1fcENsb3NlQm94ICE9IE5VTEwpOw0KLQkJQVNTRVJUKG1fcEljb24gIT0gTlVMTCk7DQotCQlBU1NFUlQobV9wTEJCb3ggIT0gTlVMTCk7DQotCQlBU1NFUlQobV9wUkJCb3ggIT0gTlVMTCk7DQotCQlBU1NFUlQobV9wQ29udGVudHNCYXIgIT0gTlVMTCk7DQotCQlBU1NFUlQobV9wT3B0aW9ucyAhPSBOVUxMKTsNCi0NCi0JCUNQREZfUmVjdCByY0NsaWVudCA9IEdldENsaWVudFJlY3QoKTsNCi0NCi0JCUNQREZfUmVjdCByY0ljb24gPSByY0NsaWVudDsNCi0JCXJjSWNvbi50b3AgLT0gMi4wZjsNCi0JCXJjSWNvbi5yaWdodCA9IHJjSWNvbi5sZWZ0ICsgMTQuMGY7DQotCQlyY0ljb24uYm90dG9tID0gcmNJY29uLnRvcCAtIDE0LjBmOw0KLQkJcmNJY29uLk5vcm1hbGl6ZSgpOw0KLQkJbV9wSWNvbi0+TW92ZShyY0ljb24sIFRSVUUsIEZBTFNFKTsNCi0JCW1fcEljb24tPlNldFZpc2libGUoQ1BXTF9VdGlsczo6Q29udGFpbnNSZWN0KHJjQ2xpZW50LCByY0ljb24pKTsNCi0NCi0JCUNQREZfUmVjdCByY0Nsb3NlQm94ID0gcmNDbGllbnQ7DQotCQlyY0Nsb3NlQm94LnJpZ2h0IC09IDEuMGY7DQotCQlyY0Nsb3NlQm94LnRvcCAtPSAxLjBmOw0KLQkJcmNDbG9zZUJveC5sZWZ0ID0gcmNDbG9zZUJveC5yaWdodCAtIDE0LjBmOw0KLQkJcmNDbG9zZUJveC5ib3R0b20gPSByY0Nsb3NlQm94LnRvcCAtIDE0LjBmOw0KLQkJcmNDbG9zZUJveC5Ob3JtYWxpemUoKTsNCi0JCW1fcENsb3NlQm94LT5Nb3ZlKHJjQ2xvc2VCb3gsIFRSVUUsIEZBTFNFKTsNCi0JCW1fcENsb3NlQm94LT5TZXRWaXNpYmxlKENQV0xfVXRpbHM6OkNvbnRhaW5zUmVjdChyY0NsaWVudCwgcmNDbG9zZUJveCkpOw0KLQ0KLQkJQ1BERl9SZWN0IHJjRGF0ZSA9IHJjQ2xpZW50Ow0KLQkJcmNEYXRlLnJpZ2h0ID0gcmNDbG9zZUJveC5sZWZ0IC0gUE9QVVBfSVRFTV9URVhUX0lOREVOVDsNCi0JCXJjRGF0ZS5sZWZ0ID0gUFdMX01BWChyY0RhdGUucmlnaHQgLSBtX3BEYXRlVGltZS0+R2V0Q29udGVudFJlY3QoKS5XaWR0aCgpIC0gMS4wZiwgcmNJY29uLnJpZ2h0ICsgMS4wZik7DQotCQlyY0RhdGUudG9wID0gcmNDbGllbnQudG9wIC0gMi4wZjsNCi0JCXJjRGF0ZS5ib3R0b20gPSByY0RhdGUudG9wIC0gbV9wRGF0ZVRpbWUtPkdldENvbnRlbnRSZWN0KCkuSGVpZ2h0KCk7DQotCQlyY0RhdGUuTm9ybWFsaXplKCk7DQotCQltX3BEYXRlVGltZS0+TW92ZShyY0RhdGUsIFRSVUUsIEZBTFNFKTsNCi0JCW1fcERhdGVUaW1lLT5TZXRWaXNpYmxlKENQV0xfVXRpbHM6OkNvbnRhaW5zUmVjdChyY0NsaWVudCwgcmNEYXRlKSk7DQotDQotCQlDUERGX1JlY3QgcmNTdWJqZWN0ID0gcmNDbGllbnQ7DQotCQlyY1N1YmplY3QudG9wID0gcmNDbGllbnQudG9wIC0gMi4wZjsNCi0JCXJjU3ViamVjdC5sZWZ0ID0gcmNJY29uLnJpZ2h0ICsgUE9QVVBfSVRFTV9URVhUX0lOREVOVDsNCi0JCXJjU3ViamVjdC5yaWdodCA9IFBXTF9NSU4ocmNTdWJqZWN0LmxlZnQgKyBtX3BTdWJqZWN0LT5HZXRDb250ZW50UmVjdCgpLldpZHRoKCkgKyAxLjBmLCByY0RhdGUubGVmdCAtIDEuMGYpOw0KLQkJcmNTdWJqZWN0LmJvdHRvbSA9IHJjU3ViamVjdC50b3AgLSBtX3BTdWJqZWN0LT5HZXRDb250ZW50UmVjdCgpLkhlaWdodCgpOw0KLQkJcmNTdWJqZWN0Lk5vcm1hbGl6ZSgpOw0KLQkJbV9wU3ViamVjdC0+TW92ZShyY1N1YmplY3QsIFRSVUUsIEZBTFNFKTsJDQotCQltX3BTdWJqZWN0LT5TZXRWaXNpYmxlKENQV0xfVXRpbHM6OkNvbnRhaW5zUmVjdChyY0NsaWVudCwgcmNTdWJqZWN0KSk7DQotDQotCQlDUERGX1JlY3QgcmNPcHRpb25zID0gcmNDbGllbnQ7DQotCQlyY09wdGlvbnMubGVmdCA9IFBXTF9NQVgocmNPcHRpb25zLnJpZ2h0IC0gbV9wT3B0aW9ucy0+R2V0Q29udGVudFJlY3QoKS5XaWR0aCgpLCByY0ljb24ucmlnaHQgKyAxLjBmKTsNCi0JCXJjT3B0aW9ucy50b3AgPSByY1N1YmplY3QuYm90dG9tIC0gNC4wZjsNCi0JCXJjT3B0aW9ucy5ib3R0b20gPSByY09wdGlvbnMudG9wIC0gbV9wT3B0aW9ucy0+R2V0Q29udGVudFJlY3QoKS5IZWlnaHQoKTsNCi0JCXJjT3B0aW9ucy5Ob3JtYWxpemUoKTsNCi0JCW1fcE9wdGlvbnMtPk1vdmUocmNPcHRpb25zLCBUUlVFLCBGQUxTRSk7DQotCQltX3BPcHRpb25zLT5TZXRWaXNpYmxlKENQV0xfVXRpbHM6OkNvbnRhaW5zUmVjdChyY0NsaWVudCwgcmNPcHRpb25zKSk7DQotDQotCQlDUERGX1JlY3QgcmNBdXRob3IgPSByY0NsaWVudDsNCi0JCXJjQXV0aG9yLnRvcCA9IHJjU3ViamVjdC5ib3R0b20gLSA0LjBmOw0KLQkJcmNBdXRob3IubGVmdCA9IHJjU3ViamVjdC5sZWZ0Ow0KLQkJcmNBdXRob3IucmlnaHQgPSBQV0xfTUlOKHJjU3ViamVjdC5sZWZ0ICsgbV9wQXV0aG9yLT5HZXRDb250ZW50UmVjdCgpLldpZHRoKCkgKyAxLjBmLCByY09wdGlvbnMubGVmdCAtIDEuMGYpOw0KLQkJcmNBdXRob3IuYm90dG9tID0gcmNBdXRob3IudG9wIC0gbV9wQXV0aG9yLT5HZXRDb250ZW50UmVjdCgpLkhlaWdodCgpOw0KLQkJcmNBdXRob3IuTm9ybWFsaXplKCk7DQotCQltX3BBdXRob3ItPk1vdmUocmNBdXRob3IsIFRSVUUsIEZBTFNFKTsNCi0JCW1fcEF1dGhvci0+U2V0VmlzaWJsZShDUFdMX1V0aWxzOjpDb250YWluc1JlY3QocmNDbGllbnQsIHJjQXV0aG9yKSk7DQotDQotCQlDUERGX1JlY3QgcmNMQkJveCA9IHJjQ2xpZW50Ow0KLQkJcmNMQkJveC50b3AgPSByY0xCQm94LmJvdHRvbSArIDcuMGY7DQotCQlyY0xCQm94LnJpZ2h0ID0gcmNMQkJveC5sZWZ0ICsgNy4wZjsNCi0JCXJjTEJCb3guTm9ybWFsaXplKCk7DQotCQltX3BMQkJveC0+TW92ZShyY0xCQm94LCBUUlVFLCBGQUxTRSk7DQotCQltX3BMQkJveC0+U2V0VmlzaWJsZShDUFdMX1V0aWxzOjpDb250YWluc1JlY3QocmNDbGllbnQsIHJjTEJCb3gpKTsNCi0NCi0JCUNQREZfUmVjdCByY1JCQm94ID0gcmNDbGllbnQ7DQotCQlyY1JCQm94LnRvcCA9IHJjUkJCb3guYm90dG9tICsgNy4wZjsNCi0JCXJjUkJCb3gubGVmdCA9IHJjUkJCb3gucmlnaHQgLSA3LjBmOw0KLQkJcmNSQkJveC5Ob3JtYWxpemUoKTsNCi0JCW1fcFJCQm94LT5Nb3ZlKHJjUkJCb3gsIFRSVUUsIEZBTFNFKTsNCi0JCW1fcFJCQm94LT5TZXRWaXNpYmxlKENQV0xfVXRpbHM6OkNvbnRhaW5zUmVjdChyY0NsaWVudCwgcmNSQkJveCkpOw0KLQ0KLQkJQ1BERl9SZWN0IHJjQ29udGVudHMgPSByY0NsaWVudDsNCi0JCXJjQ29udGVudHMudG9wID0gcmNBdXRob3IuYm90dG9tIC0gUE9QVVBfSVRFTV9IRUFEX0JPVFRPTTsNCi0JCXJjQ29udGVudHMubGVmdCArPSAzLjBmOw0KLQkJcmNDb250ZW50cy5yaWdodCAtPSAzLjBmOw0KLQkJaWYgKG1fcENvbnRlbnRzQmFyLT5Jc1Zpc2libGUoKSkNCi0JCQlyY0NvbnRlbnRzLnJpZ2h0IC09IFBXTF9TQ1JPTExCQVJfV0lEVEg7DQotCQlyY0NvbnRlbnRzLmJvdHRvbSArPSAxNC4wZjsNCi0JCXJjQ29udGVudHMuTm9ybWFsaXplKCk7DQotCQltX3BDb250ZW50cy0+TW92ZShyY0NvbnRlbnRzLCBGQUxTRSwgRkFMU0UpOw0KLQkJbV9wQ29udGVudHMtPlNldFZpc2libGUoQ1BXTF9VdGlsczo6Q29udGFpbnNSZWN0KHJjQ2xpZW50LCByY0NvbnRlbnRzKSk7DQotDQotCQlDUERGX1JlY3QgcmNDb250ZW50c0JhciA9IHJjQ29udGVudHM7DQotCQlyY0NvbnRlbnRzQmFyLnJpZ2h0ID0gcmNDbGllbnQucmlnaHQgLSAzLjBmOw0KLQkJcmNDb250ZW50c0Jhci5sZWZ0ID0gcmNDb250ZW50c0Jhci5yaWdodCAtIFBXTF9TQ1JPTExCQVJfV0lEVEg7DQotCQlyY0NvbnRlbnRzQmFyLk5vcm1hbGl6ZSgpOw0KLQkJbV9wQ29udGVudHNCYXItPk1vdmUocmNDb250ZW50c0JhciwgVFJVRSwgRkFMU0UpOw0KLQkJDQotCQltX3JjQ2FwdGlvbiA9IHJjQ2xpZW50Ow0KLQkJbV9yY0NhcHRpb24uYm90dG9tID0gcmNDb250ZW50cy50b3A7DQotCX0NCi0NCi0JbV9iUmVzaXppbmcgPSBGQUxTRTsNCi19DQotDQotLy8wLW5vcm1hbCAvIDEtY2FwdGlvbiAvIDItbGVmdGJvdHRvbSBjb3JuZXIgLyAzLXJpZ2h0Ym90dG9tIGNvcm5lciAvIDQtY2xvc2UgLyA1LW9wdGlvbnMgDQotRlhfSU5UMzIgQ1BXTF9Ob3RlOjpOb3RlSGl0VGVzdChjb25zdCBDUERGX1BvaW50JiBwb2ludCkgY29uc3QNCi17DQotCUFTU0VSVChtX3BTdWJqZWN0ICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wRGF0ZVRpbWUgIT0gTlVMTCk7DQotCUFTU0VSVChtX3BDb250ZW50cyAhPSBOVUxMKTsNCi0JQVNTRVJUKG1fcEF1dGhvciAhPSBOVUxMKTsNCi0JQVNTRVJUKG1fcEljb24gIT0gTlVMTCk7DQotCUFTU0VSVChtX3BDb250ZW50c0JhciAhPSBOVUxMKTsNCi0NCi0JQVNTRVJUKG1fcENsb3NlQm94ICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wTEJCb3ggIT0gTlVMTCk7DQotCUFTU0VSVChtX3BSQkJveCAhPSBOVUxMKTsNCi0JQVNTRVJUKG1fcE9wdGlvbnMgIT0gTlVMTCk7DQotDQotCUdldENsaWVudFJlY3QoKTsNCi0NCi0JaWYgKG1fcFN1YmplY3QtPlduZEhpdFRlc3QobV9wU3ViamVjdC0+UGFyZW50VG9DaGlsZChwb2ludCkpKSByZXR1cm4gMTsNCi0JaWYgKG1fcERhdGVUaW1lLT5XbmRIaXRUZXN0KG1fcERhdGVUaW1lLT5QYXJlbnRUb0NoaWxkKHBvaW50KSkpIHJldHVybiAxOw0KLQlpZiAobV9wQXV0aG9yLT5XbmRIaXRUZXN0KG1fcEF1dGhvci0+UGFyZW50VG9DaGlsZChwb2ludCkpKSByZXR1cm4gMTsNCi0JaWYgKG1fcEljb24tPlduZEhpdFRlc3QobV9wSWNvbi0+UGFyZW50VG9DaGlsZChwb2ludCkpKSByZXR1cm4gMTsNCi0NCi0JaWYgKG1fcENvbnRlbnRzLT5XbmRIaXRUZXN0KG1fcENvbnRlbnRzLT5QYXJlbnRUb0NoaWxkKHBvaW50KSkpIHJldHVybiAwOw0KLQlpZiAobV9wQ29udGVudHNCYXItPlduZEhpdFRlc3QobV9wQ29udGVudHNCYXItPlBhcmVudFRvQ2hpbGQocG9pbnQpKSkgcmV0dXJuIDA7DQotDQotCWlmIChtX3BDbG9zZUJveC0+V25kSGl0VGVzdChtX3BDbG9zZUJveC0+UGFyZW50VG9DaGlsZChwb2ludCkpKSByZXR1cm4gNDsNCi0JaWYgKG1fcExCQm94LT5XbmRIaXRUZXN0KG1fcExCQm94LT5QYXJlbnRUb0NoaWxkKHBvaW50KSkpIHJldHVybiAyOw0KLQlpZiAobV9wUkJCb3gtPlduZEhpdFRlc3QobV9wUkJCb3gtPlBhcmVudFRvQ2hpbGQocG9pbnQpKSkgcmV0dXJuIDM7DQotCWlmIChtX3BPcHRpb25zLT5XbmRIaXRUZXN0KG1fcE9wdGlvbnMtPlBhcmVudFRvQ2hpbGQocG9pbnQpKSkgcmV0dXJuIDU7DQotDQotCXJldHVybiAxOw0KLX0NCi0NCi12b2lkIENQV0xfTm90ZTo6Q3JlYXRlQ2hpbGRXbmQoY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApDQotew0KLQlDUFdMX05vdGVJdGVtOjpDcmVhdGVDaGlsZFduZChjcCk7DQotDQotCUNQV0xfQ29sb3Igc1RleHRDb2xvcjsNCi0NCi0JaWYgKENQV0xfVXRpbHM6OklzQmxhY2tPcldoaXRlKHRoaXMtPkdldEJhY2tncm91bmRDb2xvcigpKSkNCi0JCXNUZXh0Q29sb3IgPSBQV0xfREVGQVVMVF9XSElURUNPTE9SOw0KLQllbHNlDQotCQlzVGV4dENvbG9yID0gUFdMX0RFRkFVTFRfQkxBQ0tDT0xPUjsNCi0NCi0JbV9wQXV0aG9yID0gbmV3IENQV0xfTGFiZWw7DQotCVBXTF9DUkVBVEVQQVJBTSBhY3AgPSBjcDsNCi0JYWNwLnBQYXJlbnRXbmQgPSB0aGlzOw0KLQlhY3AuZHdGbGFncyA9IFBXU19WSVNJQkxFIHwgUFdTX0NISUxEIHwgUEVTX0xFRlQgfCBQRVNfVE9QOw0KLQlhY3Auc1RleHRDb2xvciA9IHNUZXh0Q29sb3I7DQotCW1fcEF1dGhvci0+Q3JlYXRlKGFjcCk7CSANCi0NCi0JbV9wQ2xvc2VCb3ggPSBuZXcgQ1BXTF9Ob3RlX0Nsb3NlQm94Ow0KLQlQV0xfQ1JFQVRFUEFSQU0gY2NwID0gY3A7DQotCWNjcC5wUGFyZW50V25kID0gdGhpczsNCi0JY2NwLmR3Qm9yZGVyV2lkdGggPSAyOw0KLQljY3AubkJvcmRlclN0eWxlID0gUEJTX0JFVkVMRUQ7DQotCWNjcC5kd0ZsYWdzID0gUFdTX1ZJU0lCTEUgfCBQV1NfQ0hJTEQgfCBQV1NfQk9SREVSOw0KLQljY3Auc1RleHRDb2xvciA9IHNUZXh0Q29sb3I7DQotCW1fcENsb3NlQm94LT5DcmVhdGUoY2NwKTsNCi0NCi0JbV9wSWNvbiA9IG5ldyBDUFdMX05vdGVfSWNvbjsNCi0JUFdMX0NSRUFURVBBUkFNIGljcCA9IGNwOw0KLQlpY3AucFBhcmVudFduZCA9IHRoaXM7DQotCWljcC5kd0ZsYWdzID0gUFdTX1ZJU0lCTEUgfCBQV1NfQ0hJTEQ7DQotCW1fcEljb24tPkNyZWF0ZShpY3ApOw0KLQ0KLQltX3BPcHRpb25zID0gbmV3IENQV0xfTm90ZV9PcHRpb25zOw0KLQlQV0xfQ1JFQVRFUEFSQU0gb2NwID0gY3A7DQotCW9jcC5wUGFyZW50V25kID0gdGhpczsNCi0Jb2NwLmR3RmxhZ3MgPSBQV1NfQ0hJTEQgfCBQV1NfVklTSUJMRTsNCi0Jb2NwLnNUZXh0Q29sb3IgPSBzVGV4dENvbG9yOw0KLQltX3BPcHRpb25zLT5DcmVhdGUob2NwKTsNCi0NCi0JbV9wTEJCb3ggPSBuZXcgQ1BXTF9Ob3RlX0xCQm94Ow0KLQlQV0xfQ1JFQVRFUEFSQU0gbGNwID0gY3A7DQotCWxjcC5wUGFyZW50V25kID0gdGhpczsNCi0JbGNwLmR3RmxhZ3MgPSBQV1NfVklTSUJMRSB8IFBXU19DSElMRDsNCi0JbGNwLmVDdXJzb3JUeXBlID0gRlhDVF9ORVNXOw0KLQlsY3Auc1RleHRDb2xvciA9IHNUZXh0Q29sb3I7DQotCW1fcExCQm94LT5DcmVhdGUobGNwKTsNCi0NCi0JbV9wUkJCb3ggPSBuZXcgQ1BXTF9Ob3RlX1JCQm94Ow0KLQlQV0xfQ1JFQVRFUEFSQU0gcmNwID0gY3A7DQotCXJjcC5wUGFyZW50V25kID0gdGhpczsNCi0JcmNwLmR3RmxhZ3MgPSBQV1NfVklTSUJMRSB8IFBXU19DSElMRDsNCi0JcmNwLmVDdXJzb3JUeXBlID0gRlhDVF9OV1NFOw0KLQlyY3Auc1RleHRDb2xvciA9IHNUZXh0Q29sb3I7DQotCW1fcFJCQm94LT5DcmVhdGUocmNwKTsNCi0NCi0JbV9wQ29udGVudHNCYXIgPSBuZXcgQ1BXTF9TY3JvbGxCYXIoU0JUX1ZTQ1JPTEwpOw0KLQlQV0xfQ1JFQVRFUEFSQU0gc2NwID0gY3A7DQotCXNjcC5wUGFyZW50V25kID0gdGhpczsNCi0Jc2NwLnNCYWNrZ3JvdW5kQ29sb3IgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9SR0IsIDI0MC8yNTUuMGYsIDI0MC8yNTUuMGYsIDI0MC8yNTUuMGYpOw0KLQlzY3AuZHdGbGFncyA9IFBXU19DSElMRCB8IFBXU19WSVNJQkxFIHwgUFdTX0JBQ0tHUk9VTkQ7DQotCW1fcENvbnRlbnRzQmFyLT5DcmVhdGUoc2NwKTsNCi0JbV9wQ29udGVudHNCYXItPlNldE5vdGlmeUZvcmV2ZXIoVFJVRSk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Ob3RlOjpTZXRTdWJqZWN0TmFtZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc05hbWUpDQotew0KLQlDUFdMX05vdGVJdGVtOjpTZXRTdWJqZWN0TmFtZShzTmFtZSk7DQotCVJlUG9zQ2hpbGRXbmQoKTsNCi19DQotDQotdm9pZCBDUFdMX05vdGU6OlNldEF1dGhvck5hbWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNOYW1lKQ0KLXsNCi0JaWYgKG1fcEF1dGhvcikNCi0Jew0KLQkJbV9wQXV0aG9yLT5TZXRUZXh0KHNOYW1lKTsNCi0JCVJlUG9zQ2hpbGRXbmQoKTsNCi0JfQ0KLQ0KLQlpZiAoSVBXTF9Ob3RlTm90aWZ5KiBwTm90aWZ5ID0gR2V0Tm90ZU5vdGlmeSgpKQ0KLQl7DQotCQlwTm90aWZ5LT5PblNldEF1dGhvck5hbWUodGhpcyk7DQotCX0JDQotfQ0KLQ0KLUNGWF9XaWRlU3RyaW5nIENQV0xfTm90ZTo6R2V0QXV0aG9yTmFtZSgpIGNvbnN0DQotew0KLQlpZiAobV9wQXV0aG9yKQ0KLQkJcmV0dXJuIG1fcEF1dGhvci0+R2V0VGV4dCgpOw0KLQ0KLQlyZXR1cm4gTCIiOw0KLX0NCi0NCi1GWF9CT09MIENQV0xfTm90ZTo6T25Nb3VzZVdoZWVsKHNob3J0IHpEZWx0YSwgY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZykNCi17DQotCUNQREZfUG9pbnQgcHRTY3JvbGwgPSBtX3BDb250ZW50cy0+R2V0U2Nyb2xsUG9zKCk7DQotCUNQREZfUmVjdCByY1Njcm9sbCA9IG1fcENvbnRlbnRzLT5HZXRTY3JvbGxBcmVhKCk7DQotCUNQREZfUmVjdCByY0NvbnRlbnRzID0gbV9wQ29udGVudHMtPkdldENsaWVudFJlY3QoKTsNCi0NCi0JaWYgKHJjU2Nyb2xsLnRvcCAtIHJjU2Nyb2xsLmJvdHRvbSA+IHJjQ29udGVudHMuSGVpZ2h0KCkpDQotCXsNCi0JCUNQREZfUG9pbnQgcHROZXcgPSBwdFNjcm9sbDsNCi0NCi0JCWlmICh6RGVsdGEgPiAwKQ0KLQkJCXB0TmV3LnkgKz0gMzA7DQotCQllbHNlDQotCQkJcHROZXcueSAtPSAzMDsNCi0NCi0JCWlmIChwdE5ldy55ID4gcmNTY3JvbGwudG9wKQ0KLQkJCXB0TmV3LnkgPSByY1Njcm9sbC50b3A7DQotCQlpZiAocHROZXcueSA8IHJjU2Nyb2xsLmJvdHRvbSArIHJjQ29udGVudHMuSGVpZ2h0KCkpDQotCQkJcHROZXcueSA9IHJjU2Nyb2xsLmJvdHRvbSArIHJjQ29udGVudHMuSGVpZ2h0KCk7DQotCQlpZiAocHROZXcueSA8IHJjU2Nyb2xsLmJvdHRvbSkNCi0JCQlwdE5ldy55ID0gcmNTY3JvbGwuYm90dG9tOw0KLQ0KLQkJaWYgKHB0TmV3LnkgIT0gcHRTY3JvbGwueSkNCi0JCXsNCi0JCQltX3BDb250ZW50cy0+T25Ob3RpZnkodGhpcywgUE5NX05PVEVSRVNFVCwgMCwgMCk7DQotCQkJbV9wQ29udGVudHMtPk9uTm90aWZ5KHRoaXMsIFBOTV9TQ1JPTExXSU5ET1csIFNCVF9WU0NST0xMLCAoRlhfSU5UUFRSKSZwdE5ldy55KTsJCQkNCi0JCQltX3BDb250ZW50c0Jhci0+T25Ob3RpZnkodGhpcywgUE5NX1NFVFNDUk9MTFBPUywgU0JUX1ZTQ1JPTEwsIChGWF9JTlRQVFIpJnB0TmV3LnkpOw0KLQ0KLQkJCXJldHVybiBUUlVFOw0KLQkJfQ0KLQl9DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotdm9pZCBDUFdMX05vdGU6Ok9uTm90aWZ5KENQV0xfV25kKiBwV25kLCBGWF9EV09SRCBtc2csIEZYX0lOVFBUUiB3UGFyYW0sIEZYX0lOVFBUUiBsUGFyYW0pDQotew0KLQlzd2l0Y2ggKG1zZykNCi0Jew0KLQljYXNlIFBOTV9OT1RFRURJVENIQU5HRUQ6DQotCQl7DQotCQkJQ1BERl9SZWN0IHJjU2Nyb2xsID0gbV9wQ29udGVudHMtPkdldFNjcm9sbEFyZWEoKTsNCi0JCQkNCi0NCi0JCQlQV0xfU0NST0xMX0lORk8gc0luZm87DQotCQkJc0luZm8uZkNvbnRlbnRNaW4gPSByY1Njcm9sbC5ib3R0b207DQotCQkJc0luZm8uZkNvbnRlbnRNYXggPSByY1Njcm9sbC50b3A7DQotCQkJc0luZm8uZlBsYXRlV2lkdGggPSBtX3BDb250ZW50cy0+R2V0Q2xpZW50UmVjdCgpLkhlaWdodCgpOw0KLQkJCXNJbmZvLmZTbWFsbFN0ZXAgPSAxMy4wZjsNCi0JCQlzSW5mby5mQmlnU3RlcCA9IHNJbmZvLmZQbGF0ZVdpZHRoOw0KLQ0KLQkJCWlmIChGWFNZU19tZW1jbXAoJm1fT2xkU2Nyb2xsSW5mbywgJnNJbmZvLCBzaXplb2YoUFdMX1NDUk9MTF9JTkZPKSkgIT0gMCkNCi0JCQl7DQotCQkJCUZYX0JPT0wgYlNjcm9sbENoYW5nZWQgPSBGQUxTRTsNCi0NCi0JCQkJaWYgKGxQYXJhbSA8IDMpIC8vt8DWucvA0a27tyBtYW50aXM6MTU3NTkNCi0JCQkJew0KLQkJCQkJYlNjcm9sbENoYW5nZWQgPSBSZXNldFNjcm9sbEJhcigpOw0KLQkJCQkJaWYgKGJTY3JvbGxDaGFuZ2VkKQ0KLQkJCQkJew0KLQkJCQkJCWxQYXJhbSsrOw0KLQkJCQkJCW1fcENvbnRlbnRzLT5Pbk5vdGlmeSh0aGlzLCBQTk1fTk9URVJFU0VULCAwLCAwKTsNCi0JCQkJCQl0aGlzLT5Pbk5vdGlmeSh0aGlzLCBQTk1fTk9URUVESVRDSEFOR0VELCAwLCBsUGFyYW0pOw0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJCQ0KLQkJCQlpZiAoIWJTY3JvbGxDaGFuZ2VkKQ0KLQkJCQl7DQotCQkJCQlpZiAobV9wQ29udGVudHNCYXItPklzVmlzaWJsZSgpKQ0KLQkJCQkJew0KLQkJCQkJCW1fcENvbnRlbnRzQmFyLT5Pbk5vdGlmeShwV25kLCBQTk1fU0VUU0NST0xMSU5GTywgU0JUX1ZTQ1JPTEwsIChGWF9JTlRQVFIpJnNJbmZvKTsNCi0JCQkJCQltX09sZFNjcm9sbEluZm8gPSBzSW5mbzsNCi0NCi0JCQkJCQlDUERGX1BvaW50IHB0U2Nyb2xsID0gbV9wQ29udGVudHMtPkdldFNjcm9sbFBvcygpOw0KLQkJCQkJCUNQREZfUG9pbnQgcHRPbGQgPSBwdFNjcm9sbDsNCi0NCi0JCQkJCQlpZiAocHRTY3JvbGwueSA+IHNJbmZvLmZDb250ZW50TWF4KQ0KLQkJCQkJCQlwdFNjcm9sbC55ID0gc0luZm8uZkNvbnRlbnRNYXg7DQotCQkJCQkJaWYgKHB0U2Nyb2xsLnkgPCBzSW5mby5mQ29udGVudE1pbiArIHNJbmZvLmZQbGF0ZVdpZHRoKQ0KLQkJCQkJCQlwdFNjcm9sbC55ID0gc0luZm8uZkNvbnRlbnRNaW4gKyBzSW5mby5mUGxhdGVXaWR0aDsNCi0JCQkJCQlpZiAocHRTY3JvbGwueSA8IHNJbmZvLmZDb250ZW50TWluKQ0KLQkJCQkJCQlwdFNjcm9sbC55ID0gc0luZm8uZkNvbnRlbnRNaW47DQotDQotCQkJCQkJaWYgKHB0T2xkLnkgIT0gcHRTY3JvbGwueSkNCi0JCQkJCQl7DQotCQkJCQkJCW1fcENvbnRlbnRzQmFyLT5Pbk5vdGlmeSh0aGlzLCBQTk1fU0VUU0NST0xMUE9TLCBTQlRfVlNDUk9MTCwgKEZYX0lOVFBUUikmcHRTY3JvbGwueSk7DQotCQkJCQkJCW1fcENvbnRlbnRzQmFyLT5JbnZhbGlkYXRlUmVjdChOVUxMKTsNCi0JCQkJCQkJbV9wQ29udGVudHMtPk9uTm90aWZ5KHRoaXMsIFBOTV9TQ1JPTExXSU5ET1csIFNCVF9WU0NST0xMLCAoRlhfSU5UUFRSKSZwdFNjcm9sbC55KTsNCi0JCQkJCQl9DQotCQkJCQl9DQotCQkJCX0NCi0JCQl9DQotCQl9DQotDQotCQltX3BDb250ZW50cy0+SW52YWxpZGF0ZVJlY3QoTlVMTCk7DQotDQotCQlyZXR1cm47DQotCWNhc2UgUE5NX1NDUk9MTFdJTkRPVzoNCi0JCWlmIChtX3BDb250ZW50cykNCi0JCQltX3BDb250ZW50cy0+T25Ob3RpZnkocFduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7DQotCQlyZXR1cm47DQotCWNhc2UgUE5NX1NFVFNDUk9MTFBPUzoNCi0JCWlmIChtX3BDb250ZW50c0JhcikNCi0JCQltX3BDb250ZW50c0Jhci0+T25Ob3RpZnkocFduZCxQTk1fU0VUU0NST0xMUE9TLHdQYXJhbSxsUGFyYW0pOw0KLQkJcmV0dXJuOw0KLQl9DQotDQotCWlmIChtc2cgPT0gUE5NX1NFVENBUkVUSU5GTyAmJiBJc1ZhbGlkKCkpDQotCXsNCi0JCWlmIChQV0xfQ0FSRVRfSU5GTyAqIHBJbmZvID0gKFBXTF9DQVJFVF9JTkZPKil3UGFyYW0pDQotCQl7DQotCQkJaWYgKG1fcENvbnRlbnRzKQ0KLQkJCXsNCi0JCQkJQ1BERl9SZWN0IHJjQ2xpZW50ID0gbV9wQ29udGVudHMtPkdldENsaWVudFJlY3QoKTsNCi0JCQkJaWYgKHBJbmZvLT5wdEhlYWQueSA+IHJjQ2xpZW50LnRvcCkNCi0JCQkJew0KLQkJCQkJQ1BERl9Qb2ludCBwdCA9IG1fcENvbnRlbnRzLT5PdXRUb0luKHBJbmZvLT5wdEhlYWQpOw0KLQkJCQkJbV9wQ29udGVudHMtPk9uTm90aWZ5KHRoaXMsIFBOTV9TQ1JPTExXSU5ET1csIFNCVF9WU0NST0xMLCAoRlhfSU5UUFRSKSZwdC55KTsNCi0NCi0JCQkJCUNQREZfUG9pbnQgcHRTY3JvbGwgPSBtX3BDb250ZW50cy0+R2V0U2Nyb2xsUG9zKCk7DQotCQkJCQltX3BDb250ZW50c0Jhci0+T25Ob3RpZnkodGhpcywgUE5NX1NFVFNDUk9MTFBPUywgU0JUX1ZTQ1JPTEwsIChGWF9JTlRQVFIpJnB0U2Nyb2xsLnkpOw0KLQ0KLQkJCQkJcmV0dXJuOw0KLQkJCQl9DQotCQkJCQ0KLQkJCQlpZiAocEluZm8tPnB0Rm9vdC55IDwgcmNDbGllbnQuYm90dG9tKQ0KLQkJCQl7DQotCQkJCQlDUERGX1BvaW50IHB0ID0gbV9wQ29udGVudHMtPk91dFRvSW4ocEluZm8tPnB0Rm9vdCk7DQotCQkJCQlwdC55ICs9IHJjQ2xpZW50LkhlaWdodCgpOw0KLQkJCQkJbV9wQ29udGVudHMtPk9uTm90aWZ5KHRoaXMsIFBOTV9TQ1JPTExXSU5ET1csIFNCVF9WU0NST0xMLCAoRlhfSU5UUFRSKSZwdC55KTsNCi0NCi0JCQkJCUNQREZfUG9pbnQgcHRTY3JvbGwgPSBtX3BDb250ZW50cy0+R2V0U2Nyb2xsUG9zKCk7DQotCQkJCQltX3BDb250ZW50c0Jhci0+T25Ob3RpZnkodGhpcywgUE5NX1NFVFNDUk9MTFBPUywgU0JUX1ZTQ1JPTEwsIChGWF9JTlRQVFIpJnB0U2Nyb2xsLnkpOw0KLQ0KLQkJCQkJcmV0dXJuOw0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQl9DQotDQotCUNQV0xfTm90ZUl0ZW06Ok9uTm90aWZ5KHBXbmQsIG1zZywgd1BhcmFtLCBsUGFyYW0pOw0KLX0NCi0NCi12b2lkIENQV0xfTm90ZTo6U2V0QmtDb2xvcihjb25zdCBDUFdMX0NvbG9yJiBjb2xvcikNCi17DQotCUNQV0xfTm90ZUl0ZW06OlNldEJrQ29sb3IoY29sb3IpOw0KLQ0KLQlDUFdMX0NvbG9yIHNCSyA9IGNvbG9yOw0KLQlDUFdMX0NvbG9yIHNUZXh0Q29sb3I7DQotCWlmIChDUFdMX1V0aWxzOjpJc0JsYWNrT3JXaGl0ZShzQkspKQ0KLQkJc1RleHRDb2xvciA9IFBXTF9ERUZBVUxUX1dISVRFQ09MT1I7DQotCWVsc2UNCi0JCXNUZXh0Q29sb3IgPSBQV0xfREVGQVVMVF9CTEFDS0NPTE9SOw0KLQ0KLQlpZiAobV9wQ2xvc2VCb3gpDQotCQltX3BDbG9zZUJveC0+U2V0VGV4dENvbG9yKHNUZXh0Q29sb3IpOw0KLQlpZiAobV9wQXV0aG9yKQ0KLQkJbV9wQXV0aG9yLT5TZXRUZXh0Q29sb3Ioc1RleHRDb2xvcik7DQotCWlmIChtX3BPcHRpb25zKQ0KLQkJbV9wT3B0aW9ucy0+U2V0VGV4dENvbG9yKHNUZXh0Q29sb3IpOw0KLQlpZiAobV9wTEJCb3gpDQotCQltX3BMQkJveC0+U2V0VGV4dENvbG9yKHNUZXh0Q29sb3IpOw0KLQlpZiAobV9wUkJCb3gpDQotCQltX3BSQkJveC0+U2V0VGV4dENvbG9yKHNUZXh0Q29sb3IpOw0KLX0NCi0NCi1GWF9CT09MCUNQV0xfTm90ZTo6T25MQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50JiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlpZiAobV9wT3B0aW9ucy0+V25kSGl0VGVzdChtX3BPcHRpb25zLT5QYXJlbnRUb0NoaWxkKHBvaW50KSkpDQotCXsNCi0JCWlmIChJUFdMX05vdGVOb3RpZnkqIHBOb3RpZnkgPSB0aGlzLT5HZXROb3RlTm90aWZ5KCkpDQotCQl7DQotCQkJRlhfSU5UMzIgeCwgeTsNCi0JCQlQV0x0b1duZChwb2ludCwgeCwgeSk7DQotCQkJaWYgKElGWF9TeXN0ZW1IYW5kbGVyKiBwU0ggPSBHZXRTeXN0ZW1IYW5kbGVyKCkpDQotCQkJCXBTSC0+Q2xpZW50VG9TY3JlZW4oR2V0QXR0YWNoZWRIV25kKCksIHgsIHkpOw0KLQkJCXRoaXMtPktpbGxGb2N1cygpOw0KLQkJCXBOb3RpZnktPk9uUG9wdXBNZW51KHgsIHkpOw0KLQ0KLQkJCXJldHVybiBUUlVFOw0KLQkJfQ0KLQl9DQotDQotCXJldHVybiBDUFdMX1duZDo6T25MQnV0dG9uRG93bihwb2ludCxuRmxhZyk7DQotfQ0KLQ0KLUZYX0JPT0wJQ1BXTF9Ob3RlOjpPblJCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKQ0KLXsNCi0JcmV0dXJuIENQV0xfV25kOjpPblJCdXR0b25VcChwb2ludCxuRmxhZyk7DQotfQ0KLQ0KLWNvbnN0IENQV0xfTm90ZSogQ1BXTF9Ob3RlOjpHZXROb3RlKCkgY29uc3QNCi17DQotCXJldHVybiB0aGlzOw0KLX0NCi0NCi1JUFdMX05vdGVOb3RpZnkqIENQV0xfTm90ZTo6R2V0Tm90ZU5vdGlmeSgpIGNvbnN0DQotew0KLQlpZiAobV9iRW5hbGJsZU5vdGlmeSkNCi0JCXJldHVybiBtX3BOb3RlTm90aWZ5Ow0KLQ0KLQlyZXR1cm4gTlVMTDsNCi19DQotDQotdm9pZCBDUFdMX05vdGU6OlNldEljb25UeXBlKEZYX0lOVDMyIG5UeXBlKQ0KLXsNCi0JaWYgKG1fcEljb24pDQotCQltX3BJY29uLT5TZXRJY29uVHlwZShuVHlwZSk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Ob3RlOjpFbmFibGVNb2RpZnkoRlhfQk9PTCBiRW5hYmxlZCkNCi17DQotCW1fcENvbnRlbnRzLT5FbmFibGVNb2RpZnkoYkVuYWJsZWQpOw0KLX0NCi0NCi12b2lkIENQV0xfTm90ZTo6RW5hYmxlUmVhZChGWF9CT09MIGJFbmFibGVkKQ0KLXsNCi0JbV9wQ29udGVudHMtPkVuYWJsZVJlYWQoYkVuYWJsZWQpOw0KLX0NCi0NCi1DRlhfV2lkZVN0cmluZyBDUFdMX05vdGU6OkdldFJlcGx5U3RyaW5nKCkgY29uc3QNCi17DQotCXJldHVybiBtX3NSZXBseVN0cmluZzsNCi19DQotDQotdm9pZCBDUFdMX05vdGU6OlNldFJlcGx5U3RyaW5nKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzdHJpbmcpDQotew0KLQltX3NSZXBseVN0cmluZyA9IHN0cmluZzsNCi19DQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BERldpbmRvdy5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9XbmQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfQnV0dG9uLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0VkaXRDdHJsLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0VkaXQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfTGlzdEN0cmwuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfU2Nyb2xsQmFyLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX05vdGUuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfTGFiZWwuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfRWRpdC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9TY3JvbGxCYXIuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfVXRpbHMuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfQ2FyZXQuaCIKKworI2RlZmluZSBQT1BVUF9JVEVNX0hFQURfQk9UVE9NCQkJCQkzLjBmCisjZGVmaW5lIFBPUFVQX0lURU1fQk9UVE9NV0lEVEgJCQkJCTEuMGYKKyNkZWZpbmUgUE9QVVBfSVRFTV9TSURFTUFSR0lOCQkJCQkzLjBmCisjZGVmaW5lIFBPUFVQX0lURU1fU1BBQ0UJCQkJCQk0LjBmCisjZGVmaW5lIFBPUFVQX0lURU1fVEVYVF9JTkRFTlQJCQkJCTIuMGYKKyNkZWZpbmUgUE9QVVBfSVRFTV9CT1JERVJDT0xPUgkJCQkJQ1BXTF9Db2xvcihDT0xPUlRZUEVfUkdCLCA4MC8yNTUuMGYsIDgwLzI1NS4wZiwgODAvMjU1LjBmKQorCisjZGVmaW5lIElzRmxvYXRaZXJvKGYpCQkJCQkJKChmKSA8IDAuMDAwMSAmJiAoZikgPiAtMC4wMDAxKQorI2RlZmluZSBJc0Zsb2F0QmlnZ2VyKGZhLGZiKQkJCQkoKGZhKSA+IChmYikgJiYgIUlzRmxvYXRaZXJvKChmYSkgLSAoZmIpKSkKKyNkZWZpbmUgSXNGbG9hdFNtYWxsZXIoZmEsZmIpCQkJCSgoZmEpIDwgKGZiKSAmJiAhSXNGbG9hdFplcm8oKGZhKSAtIChmYikpKQorI2RlZmluZSBJc0Zsb2F0RXF1YWwoZmEsZmIpCQkJCQlJc0Zsb2F0WmVybygoZmEpLShmYikpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX05vdGVfT3B0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0NQV0xfTm90ZV9PcHRpb25zOjpDUFdMX05vdGVfT3B0aW9ucygpIDogbV9wVGV4dChOVUxMKQoreworfQorCitDUFdMX05vdGVfT3B0aW9uczo6fkNQV0xfTm90ZV9PcHRpb25zKCkKK3sKK30KKwordm9pZCBDUFdMX05vdGVfT3B0aW9uczo6U2V0VGV4dENvbG9yKGNvbnN0IENQV0xfQ29sb3IgJiBjb2xvcikKK3sKKwlDUFdMX1duZDo6U2V0VGV4dENvbG9yKGNvbG9yKTsKKworCWlmIChtX3BUZXh0KQorCQltX3BUZXh0LT5TZXRUZXh0Q29sb3IoY29sb3IpOworfQorCit2b2lkIENQV0xfTm90ZV9PcHRpb25zOjpSZVBvc0NoaWxkV25kKCkKK3sKKwlpZiAodGhpcy0+SXNWYWxpZCgpKQorCXsKKwkJQVNTRVJUKG1fcFRleHQgIT0gTlVMTCk7CisKKwkJQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOworCisJCWlmIChyY0NsaWVudC5XaWR0aCgpID4gMTUuMGYpCisJCXsKKwkJCXJjQ2xpZW50LnJpZ2h0IC09IDE1LjBmOworCQkJbV9wVGV4dC0+TW92ZShyY0NsaWVudCwgVFJVRSwgRkFMU0UpOworCQkJbV9wVGV4dC0+U2V0VmlzaWJsZShUUlVFKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCW1fcFRleHQtPk1vdmUoQ1BERl9SZWN0KDAsMCwwLDApLCBUUlVFLCBGQUxTRSk7CisJCQltX3BUZXh0LT5TZXRWaXNpYmxlKEZBTFNFKTsKKwkJfQorCX0KK30KKwordm9pZCBDUFdMX05vdGVfT3B0aW9uczo6Q3JlYXRlQ2hpbGRXbmQoY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApCit7CisJbV9wVGV4dCA9IG5ldyBDUFdMX0xhYmVsOworCVBXTF9DUkVBVEVQQVJBTSB0Y3AgPSBjcDsKKwl0Y3AucFBhcmVudFduZCA9IHRoaXM7CisJdGNwLmR3RmxhZ3MgPSBQV1NfQ0hJTEQgfCBQV1NfVklTSUJMRTsKKwltX3BUZXh0LT5DcmVhdGUodGNwKTsKK30KKwordm9pZCBDUFdMX05vdGVfT3B0aW9uczo6U2V0VGV4dChjb25zdCBDRlhfV2lkZVN0cmluZyYgc1RleHQpCit7CisJbV9wVGV4dC0+U2V0VGV4dChzVGV4dCk7Cit9CisKK3ZvaWQgQ1BXTF9Ob3RlX09wdGlvbnM6OkRyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKQoreworCUNQV0xfV25kOjpEcmF3VGhpc0FwcGVhcmFuY2UocERldmljZSwgcFVzZXIyRGV2aWNlKTsKKworCUNQREZfUmVjdCByY0NsaWVudCA9IEdldENsaWVudFJlY3QoKTsKKwlyY0NsaWVudC5sZWZ0ID0gcmNDbGllbnQucmlnaHQgLSAxNS4wZjsKKworCUNQREZfUG9pbnQgcHRDZW50ZXIgPSBDUERGX1BvaW50KChyY0NsaWVudC5sZWZ0ICsgcmNDbGllbnQucmlnaHQpICogMC41ZiwgKHJjQ2xpZW50LnRvcCArIHJjQ2xpZW50LmJvdHRvbSkgKiAwLjVmKTsKKworCUNQREZfUG9pbnQgcHQxKHB0Q2VudGVyLnggLSAyLjBmLCBwdENlbnRlci55ICsgMi4wZiAqIDAuNWYpOworCUNQREZfUG9pbnQgcHQyKHB0Q2VudGVyLnggKyAyLjBmLCBwdENlbnRlci55ICsgMi4wZiAqIDAuNWYpOworCUNQREZfUG9pbnQgcHQzKHB0Q2VudGVyLngsIHB0Q2VudGVyLnkgLSAzLjBmICogMC41Zik7CisKKwlDRlhfUGF0aERhdGEgcGF0aDsKKworCXBhdGguU2V0UG9pbnRDb3VudCg0KTsKKwlwYXRoLlNldFBvaW50KDAsIHB0MS54LCBwdDEueSwgRlhQVF9NT1ZFVE8pOworCXBhdGguU2V0UG9pbnQoMSwgcHQyLngsIHB0Mi55LCBGWFBUX0xJTkVUTyk7CisJcGF0aC5TZXRQb2ludCgyLCBwdDMueCwgcHQzLnksIEZYUFRfTElORVRPKTsKKwlwYXRoLlNldFBvaW50KDMsIHB0MS54LCBwdDEueSwgRlhQVF9MSU5FVE8pOworCisJcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgTlVMTCwgCisJCUNQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKEdldFRleHRDb2xvcigpLEdldFRyYW5zcGFyZW5jeSgpKSwgCisJCTAsIEZYRklMTF9BTFRFUk5BVEUpOworfQorCitDUERGX1JlY3QgQ1BXTF9Ob3RlX09wdGlvbnM6OkdldENvbnRlbnRSZWN0KCkgY29uc3QKK3sKKwlBU1NFUlQobV9wVGV4dCAhPSBOVUxMKTsKKworCUNQREZfUmVjdCByY1RleHQgPSBtX3BUZXh0LT5HZXRDb250ZW50UmVjdCgpOworCXJjVGV4dC5yaWdodCArPSAxNS4wZjsKKwlyZXR1cm4gcmNUZXh0OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfTm90ZV9FZGl0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDUFdMX05vdGVfRWRpdDo6Q1BXTF9Ob3RlX0VkaXQoKSA6IG1fYkVuYWJsZU5vdGlmeShUUlVFKSwKKwltX2ZPbGRJdGVtSGVpZ2h0KDAuMGYpLAorCW1fYlNpemVDaGFuZ2VkKEZBTFNFKSwKKwltX2ZPbGRNaW4oMC4wZiksCisJbV9mT2xkTWF4KDAuMGYpCit7Cit9CisKK0NQV0xfTm90ZV9FZGl0Ojp+Q1BXTF9Ob3RlX0VkaXQoKQoreworfQorCit2b2lkIENQV0xfTm90ZV9FZGl0OjpSZVBvc0NoaWxkV25kKCkKK3sKKwltX2JFbmFibGVOb3RpZnkgPSBGQUxTRTsJCisJQ1BXTF9FZGl0OjpSZVBvc0NoaWxkV25kKCk7CisJbV9iRW5hYmxlTm90aWZ5ID0gVFJVRTsKKworCW1fZk9sZEl0ZW1IZWlnaHQgPSB0aGlzLT5HZXRDb250ZW50UmVjdCgpLkhlaWdodCgpOworfQorCit2b2lkIENQV0xfTm90ZV9FZGl0OjpTZXRUZXh0KEZYX0xQQ1dTVFIgY3NUZXh0KQoreworCW1fYkVuYWJsZU5vdGlmeSA9IEZBTFNFOworCUNQV0xfRWRpdDo6U2V0VGV4dChjc1RleHQpOworCW1fYkVuYWJsZU5vdGlmeSA9IFRSVUU7CQorCW1fZk9sZEl0ZW1IZWlnaHQgPSB0aGlzLT5HZXRDb250ZW50UmVjdCgpLkhlaWdodCgpOworfQorCit2b2lkIENQV0xfTm90ZV9FZGl0OjpPblNldEZvY3VzKCkKK3sKKwltX2JFbmFibGVOb3RpZnkgPSBGQUxTRTsJCisJQ1BXTF9FZGl0OjpPblNldEZvY3VzKCk7CisJbV9iRW5hYmxlTm90aWZ5ID0gVFJVRTsJCisKKwl0aGlzLT5FbmFibGVTcGVsbENoZWNrKFRSVUUpOworfQorCit2b2lkIENQV0xfTm90ZV9FZGl0OjpPbktpbGxGb2N1cygpCit7CisJdGhpcy0+RW5hYmxlU3BlbGxDaGVjayhGQUxTRSk7CisKKwlpZiAoQ1BXTF9XbmQqIHBQYXJlbnQgPSB0aGlzLT5HZXRQYXJlbnRXaW5kb3coKSkKKwl7CisJCWlmIChDUFdMX1duZCogcEdyYW5kID0gcFBhcmVudC0+R2V0UGFyZW50V2luZG93KCkpCisJCXsKKwkJCUFTU0VSVChwR3JhbmQtPkdldENsYXNzTmFtZSgpID09ICJDUFdMX05vdGVJdGVtIik7CisKKwkJCUNQV0xfTm90ZUl0ZW0qIHBOb3RlSXRlbSA9IChDUFdMX05vdGVJdGVtKilwR3JhbmQ7CisKKwkJCXBOb3RlSXRlbS0+T25Db250ZW50c1ZhbGlkYXRlKCk7CisJCX0KKwl9CisKKwlDUFdMX0VkaXQ6Ok9uS2lsbEZvY3VzKCk7Cit9CisKK3ZvaWQgQ1BXTF9Ob3RlX0VkaXQ6Ok9uTm90aWZ5KENQV0xfV25kKiBwV25kLCBGWF9EV09SRCBtc2csIEZYX0lOVFBUUiB3UGFyYW0sIEZYX0lOVFBUUiBsUGFyYW0pCit7CisJaWYgKG1fYkVuYWJsZU5vdGlmeSkKKwl7CisJCWlmICh3UGFyYW0gPT0gU0JUX1ZTQ1JPTEwpCisJCXsKKwkJCXN3aXRjaCAobXNnKQorCQkJeworCQkJY2FzZSBQTk1fU0VUU0NST0xMSU5GTzoJCisJCQkJaWYgKFBXTF9TQ1JPTExfSU5GTyogcEluZm8gPSAoUFdMX1NDUk9MTF9JTkZPKilsUGFyYW0pCisJCQkJewkKKwkJCQkJaWYgKCFJc0Zsb2F0RXF1YWwocEluZm8tPmZDb250ZW50TWF4LCBtX2ZPbGRNYXgpIHx8IAorCQkJCQkJIUlzRmxvYXRFcXVhbChwSW5mby0+ZkNvbnRlbnRNaW4sIG1fZk9sZE1pbikpCisJCQkJCXsKKwkJCQkJCW1fYlNpemVDaGFuZ2VkID0gVFJVRTsJCQkJCisJCQkJCQlpZiAoQ1BXTF9XbmQgKiBwUGFyZW50ID0gdGhpcy0+R2V0UGFyZW50V2luZG93KCkpCisJCQkJCQl7CisJCQkJCQkJcFBhcmVudC0+T25Ob3RpZnkodGhpcywgUE5NX05PVEVFRElUQ0hBTkdFRCwgMCwgMCk7CisJCQkJCQl9CisKKwkJCQkJCW1fZk9sZE1heCA9IHBJbmZvLT5mQ29udGVudE1heDsKKwkJCQkJCW1fZk9sZE1pbiA9IHBJbmZvLT5mQ29udGVudE1pbjsKKwkJCQkJCXJldHVybjsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQkJCisJfQorCisJQ1BXTF9FZGl0OjpPbk5vdGlmeShwV25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKKworCWlmIChtX2JFbmFibGVOb3RpZnkpCisJeworCQlzd2l0Y2ggKG1zZykKKwkJeworCQljYXNlIFBOTV9TRVRDQVJFVElORk86CisJCQlpZiAoUFdMX0NBUkVUX0lORk8gKiBwSW5mbyA9IChQV0xfQ0FSRVRfSU5GTyopd1BhcmFtKQorCQkJeworCQkJCVBXTF9DQVJFVF9JTkZPIG5ld0luZm8gPSAqcEluZm87CisJCQkJbmV3SW5mby5iVmlzaWJsZSA9IFRSVUU7CisJCQkJbmV3SW5mby5wdEhlYWQgPSB0aGlzLT5DaGlsZFRvUGFyZW50KHBJbmZvLT5wdEhlYWQpOworCQkJCW5ld0luZm8ucHRGb290ID0gdGhpcy0+Q2hpbGRUb1BhcmVudChwSW5mby0+cHRGb290KTsKKworCQkJCWlmIChDUFdMX1duZCAqIHBQYXJlbnQgPSB0aGlzLT5HZXRQYXJlbnRXaW5kb3coKSkKKwkJCQl7CisJCQkJCXBQYXJlbnQtPk9uTm90aWZ5KHRoaXMsIFBOTV9TRVRDQVJFVElORk8sIChGWF9JTlRQVFIpJm5ld0luZm8sIDApOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorfQorCitGWF9GTE9BVCBDUFdMX05vdGVfRWRpdDo6R2V0SXRlbUhlaWdodChGWF9GTE9BVCBmTGltaXRXaWR0aCkKK3sKKwlpZiAoZkxpbWl0V2lkdGggPiAwKQorCXsKKwkJaWYgKCFtX2JTaXplQ2hhbmdlZCkKKwkJCXJldHVybiBtX2ZPbGRJdGVtSGVpZ2h0OworCisJCW1fYlNpemVDaGFuZ2VkID0gRkFMU0U7CQorCisJCXRoaXMtPkVuYWJsZU5vdGlmeShGQUxTRSk7CisJCXRoaXMtPkVuYWJsZVJlZnJlc2goRkFMU0UpOworCQltX3BFZGl0LT5FbmFibGVOb3RpZnkoRkFMU0UpOworCisJCS8vQ1BERl9SZWN0IHJjT2xkID0gdGhpcy0+R2V0V2luZG93UmVjdCgpOworCisJCXRoaXMtPk1vdmUoQ1BERl9SZWN0KDAsMCxmTGltaXRXaWR0aCwwKSwgVFJVRSwgRkFMU0UpOworCQlGWF9GTE9BVCBmUmV0ID0gdGhpcy0+R2V0Q29udGVudFJlY3QoKS5IZWlnaHQoKTsKKworCQkvL3RoaXMtPk1vdmUocmNPbGQsIFRSVUUsIEZBTFNFKTsKKworCQltX3BFZGl0LT5FbmFibGVOb3RpZnkoVFJVRSk7CisJCXRoaXMtPkVuYWJsZU5vdGlmeShUUlVFKTsKKwkJdGhpcy0+RW5hYmxlUmVmcmVzaChUUlVFKTsKKworCQlyZXR1cm4gZlJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworRlhfRkxPQVQgQ1BXTF9Ob3RlX0VkaXQ6OkdldEl0ZW1MZWZ0TWFyZ2luKCkKK3sKKwlyZXR1cm4gUE9QVVBfSVRFTV9URVhUX0lOREVOVDsKK30KKworRlhfRkxPQVQgQ1BXTF9Ob3RlX0VkaXQ6OkdldEl0ZW1SaWdodE1hcmdpbigpCit7CisJcmV0dXJuIFBPUFVQX0lURU1fVEVYVF9JTkRFTlQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfTm90ZV9MQkJveCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK0NQV0xfTm90ZV9MQkJveDo6Q1BXTF9Ob3RlX0xCQm94KCkKK3sKK30KKworQ1BXTF9Ob3RlX0xCQm94Ojp+Q1BXTF9Ob3RlX0xCQm94KCkKK3sKK30KKwordm9pZCBDUFdMX05vdGVfTEJCb3g6OkRyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKQoreworCUNQREZfUmVjdCByY0NsaWVudCA9IHRoaXMtPkdldENsaWVudFJlY3QoKTsKKworCUNGWF9HcmFwaFN0YXRlRGF0YSBnc2Q7CisJZ3NkLm1fTGluZVdpZHRoID0gMS4wZjsKKworCUNGWF9QYXRoRGF0YSBwYXRoQ3Jvc3M7CisKKwlwYXRoQ3Jvc3MuU2V0UG9pbnRDb3VudCg0KTsKKwlwYXRoQ3Jvc3MuU2V0UG9pbnQoMCwgcmNDbGllbnQubGVmdCwgcmNDbGllbnQudG9wLCBGWFBUX01PVkVUTyk7CisJcGF0aENyb3NzLlNldFBvaW50KDEsIHJjQ2xpZW50LnJpZ2h0LCByY0NsaWVudC5ib3R0b20sIEZYUFRfTElORVRPKTsKKwlwYXRoQ3Jvc3MuU2V0UG9pbnQoMiwgcmNDbGllbnQubGVmdCwgcmNDbGllbnQuYm90dG9tICsgcmNDbGllbnQuSGVpZ2h0KCkgKiAwLjVmLCBGWFBUX01PVkVUTyk7CisJcGF0aENyb3NzLlNldFBvaW50KDMsIHJjQ2xpZW50LmxlZnQgKyByY0NsaWVudC5XaWR0aCgpICogMC41ZiwgcmNDbGllbnQuYm90dG9tLCBGWFBUX0xJTkVUTyk7CisJCisJcERldmljZS0+RHJhd1BhdGgoJnBhdGhDcm9zcywgcFVzZXIyRGV2aWNlLCAmZ3NkLCAKKwkJMCwgQ1BXTF9VdGlsczo6UFdMQ29sb3JUb0ZYQ29sb3IoR2V0VGV4dENvbG9yKCksdGhpcy0+R2V0VHJhbnNwYXJlbmN5KCkpLCBGWEZJTExfQUxURVJOQVRFKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9Ob3RlX1JCQm94IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworQ1BXTF9Ob3RlX1JCQm94OjpDUFdMX05vdGVfUkJCb3goKQoreworfQorCitDUFdMX05vdGVfUkJCb3g6On5DUFdMX05vdGVfUkJCb3goKQoreworfQorCit2b2lkIENQV0xfTm90ZV9SQkJveDo6RHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpCit7CisJQ1BERl9SZWN0IHJjQ2xpZW50ID0gdGhpcy0+R2V0Q2xpZW50UmVjdCgpOworCisJQ0ZYX0dyYXBoU3RhdGVEYXRhIGdzZDsKKwlnc2QubV9MaW5lV2lkdGggPSAxLjBmOworCisJQ0ZYX1BhdGhEYXRhIHBhdGhDcm9zczsKKworCXBhdGhDcm9zcy5TZXRQb2ludENvdW50KDQpOworCXBhdGhDcm9zcy5TZXRQb2ludCgwLCByY0NsaWVudC5yaWdodCwgcmNDbGllbnQudG9wLCBGWFBUX01PVkVUTyk7CisJcGF0aENyb3NzLlNldFBvaW50KDEsIHJjQ2xpZW50LmxlZnQsIHJjQ2xpZW50LmJvdHRvbSwgRlhQVF9MSU5FVE8pOworCXBhdGhDcm9zcy5TZXRQb2ludCgyLCByY0NsaWVudC5yaWdodCwgcmNDbGllbnQuYm90dG9tICsgcmNDbGllbnQuSGVpZ2h0KCkgKiAwLjVmLCBGWFBUX01PVkVUTyk7CisJcGF0aENyb3NzLlNldFBvaW50KDMsIHJjQ2xpZW50LmxlZnQgKyByY0NsaWVudC5XaWR0aCgpICogMC41ZiwgcmNDbGllbnQuYm90dG9tLCBGWFBUX0xJTkVUTyk7CisJCisJcERldmljZS0+RHJhd1BhdGgoJnBhdGhDcm9zcywgcFVzZXIyRGV2aWNlLCAmZ3NkLCAKKwkJMCwgQ1BXTF9VdGlsczo6UFdMQ29sb3JUb0ZYQ29sb3IoR2V0VGV4dENvbG9yKCksdGhpcy0+R2V0VHJhbnNwYXJlbmN5KCkpLCBGWEZJTExfQUxURVJOQVRFKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfTm90ZV9JY29uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ1BXTF9Ob3RlX0ljb246OkNQV0xfTm90ZV9JY29uKCkgOiBtX25UeXBlKDApCit7Cit9CisKK0NQV0xfTm90ZV9JY29uOjp+Q1BXTF9Ob3RlX0ljb24oKQoreworfQorCit2b2lkIENQV0xfTm90ZV9JY29uOjpTZXRJY29uVHlwZShGWF9JTlQzMiBuVHlwZSkKK3sKKwltX25UeXBlID0gblR5cGU7Cit9CisKK3ZvaWQgQ1BXTF9Ob3RlX0ljb246OkRyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKQoreworCUNQV0xfVXRpbHM6OkRyYXdJY29uQXBwU3RyZWFtKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgbV9uVHlwZSwgR2V0Q2xpZW50UmVjdCgpLCAKKwkJdGhpcy0+R2V0QmFja2dyb3VuZENvbG9yKCksIFBXTF9ERUZBVUxUX0JMQUNLQ09MT1IsIHRoaXMtPkdldFRyYW5zcGFyZW5jeSgpKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfTm90ZV9DbG9zZUJveCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK0NQV0xfTm90ZV9DbG9zZUJveDo6Q1BXTF9Ob3RlX0Nsb3NlQm94KCkgOiBtX2JNb3VzZURvd24oRkFMU0UpCit7Cit9CisKK0NQV0xfTm90ZV9DbG9zZUJveDo6fkNQV0xfTm90ZV9DbG9zZUJveCgpCit7Cit9CisKK3ZvaWQgQ1BXTF9Ob3RlX0Nsb3NlQm94OjpEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSkKK3sKKwlDUFdMX0J1dHRvbjo6RHJhd1RoaXNBcHBlYXJhbmNlKHBEZXZpY2UsIHBVc2VyMkRldmljZSk7CisKKwlDUERGX1JlY3QgcmNDbGllbnQgPSB0aGlzLT5HZXRDbGllbnRSZWN0KCk7CisJcmNDbGllbnQgPSBDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdChyY0NsaWVudCwgMi4wZik7CisKKwlDRlhfR3JhcGhTdGF0ZURhdGEgZ3NkOworCWdzZC5tX0xpbmVXaWR0aCA9IDEuMGY7CisKKwlDRlhfUGF0aERhdGEgcGF0aENyb3NzOworCisJaWYgKG1fYk1vdXNlRG93bikKKwl7CisJCXJjQ2xpZW50LmxlZnQgKz0gMC41ZjsKKwkJcmNDbGllbnQucmlnaHQgKz0gMC41ZjsKKwkJcmNDbGllbnQudG9wIC09IDAuNWY7CisJCXJjQ2xpZW50LmJvdHRvbSAtPSAwLjVmOworCX0KKworCXBhdGhDcm9zcy5TZXRQb2ludENvdW50KDQpOworCXBhdGhDcm9zcy5TZXRQb2ludCgwLCByY0NsaWVudC5sZWZ0LCByY0NsaWVudC5ib3R0b20sIEZYUFRfTU9WRVRPKTsKKwlwYXRoQ3Jvc3MuU2V0UG9pbnQoMSwgcmNDbGllbnQucmlnaHQsIHJjQ2xpZW50LnRvcCwgRlhQVF9MSU5FVE8pOworCXBhdGhDcm9zcy5TZXRQb2ludCgyLCByY0NsaWVudC5sZWZ0LCByY0NsaWVudC50b3AsIEZYUFRfTU9WRVRPKTsKKwlwYXRoQ3Jvc3MuU2V0UG9pbnQoMywgcmNDbGllbnQucmlnaHQsIHJjQ2xpZW50LmJvdHRvbSwgRlhQVF9MSU5FVE8pOworCQorCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoQ3Jvc3MsIHBVc2VyMkRldmljZSwgJmdzZCwgCisJCTAsIENQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKEdldFRleHRDb2xvcigpLHRoaXMtPkdldFRyYW5zcGFyZW5jeSgpKSwgRlhGSUxMX0FMVEVSTkFURSk7Cit9CisKK0ZYX0JPT0wgQ1BXTF9Ob3RlX0Nsb3NlQm94OjpPbkxCdXR0b25Eb3duKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpCit7CisJU2V0Qm9yZGVyU3R5bGUoUEJTX0lOU0VUKTsKKwlJbnZhbGlkYXRlUmVjdChOVUxMKTsKKworCW1fYk1vdXNlRG93biA9IFRSVUU7CisKKwlyZXR1cm4gQ1BXTF9CdXR0b246Ok9uTEJ1dHRvbkRvd24ocG9pbnQsbkZsYWcpOworfQorCitGWF9CT09MCUNQV0xfTm90ZV9DbG9zZUJveDo6T25MQnV0dG9uVXAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZykKK3sKKwltX2JNb3VzZURvd24gPSBGQUxTRTsKKworCVNldEJvcmRlclN0eWxlKFBCU19CRVZFTEVEKTsKKwlJbnZhbGlkYXRlUmVjdChOVUxMKTsKKworCXJldHVybiBDUFdMX0J1dHRvbjo6T25MQnV0dG9uVXAocG9pbnQsbkZsYWcpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9Ob3RlX0NvbnRlbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ1BXTF9Ob3RlX0NvbnRlbnRzOjpDUFdMX05vdGVfQ29udGVudHMoKSA6IG1fcEVkaXQoTlVMTCkKK3sKK30KKworQ1BXTF9Ob3RlX0NvbnRlbnRzOjp+Q1BXTF9Ob3RlX0NvbnRlbnRzKCkKK3sKK30KKworQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9Ob3RlX0NvbnRlbnRzOjpHZXRDbGFzc05hbWUoKSBjb25zdAoreworCXJldHVybiAiQ1BXTF9Ob3RlX0NvbnRlbnRzIjsKK30KKwordm9pZCBDUFdMX05vdGVfQ29udGVudHM6OkNyZWF0ZUNoaWxkV25kKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKQoreworCW1fcEVkaXQgPSBuZXcgQ1BXTF9Ob3RlX0VkaXQ7CisJUFdMX0NSRUFURVBBUkFNIGVjcCA9IGNwOworCWVjcC5wUGFyZW50V25kID0gdGhpczsKKwllY3AuZHdGbGFncyA9IFBXU19WSVNJQkxFIHwgUFdTX0NISUxEIHwgUEVTX01VTFRJTElORSB8IFBFU19BVVRPUkVUVVJOIHwgUEVTX1RFWFRPVkVSRkxPVyB8IFBFU19VTkRPIHwgUEVTX1NQRUxMQ0hFQ0s7CisKKwltX3BFZGl0LT5FbmFibGVOb3RpZnkoRkFMU0UpOworCW1fcEVkaXQtPkNyZWF0ZShlY3ApOworCW1fcEVkaXQtPkVuYWJsZU5vdGlmeShUUlVFKTsKK30KKwordm9pZCBDUFdMX05vdGVfQ29udGVudHM6OlNldFRleHQoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNUZXh0KQoreworCWlmIChtX3BFZGl0KQorCXsKKwkJbV9wRWRpdC0+RW5hYmxlTm90aWZ5KEZBTFNFKTsKKwkJbV9wRWRpdC0+U2V0VGV4dChzVGV4dCk7CisJCW1fcEVkaXQtPkVuYWJsZU5vdGlmeShUUlVFKTsKKwkJT25Ob3RpZnkobV9wRWRpdCwgUE5NX05PVEVFRElUQ0hBTkdFRCwgMCwgMCk7CQkKKwl9Cit9CisKK0NGWF9XaWRlU3RyaW5nIENQV0xfTm90ZV9Db250ZW50czo6R2V0VGV4dCgpIGNvbnN0Cit7CisJaWYgKG1fcEVkaXQpCisJCXJldHVybiBtX3BFZGl0LT5HZXRUZXh0KCk7CisKKwlyZXR1cm4gTCIiOworfQorCitDUFdMX05vdGVJdGVtKiBDUFdMX05vdGVfQ29udGVudHM6OkNyZWF0ZVN1Ykl0ZW0oKQoreworCUNQV0xfTm90ZUl0ZW0qIHBOb3RlSXRlbSA9IG5ldyBDUFdMX05vdGVJdGVtOworCVBXTF9DUkVBVEVQQVJBTSBpY3AgPSB0aGlzLT5HZXRDcmVhdGlvblBhcmFtKCk7CisJaWNwLnBQYXJlbnRXbmQgPSB0aGlzOworCWljcC5kd0ZsYWdzID0gIFBXU19DSElMRCB8IFBXU19WSVNJQkxFIHwgUFdTX0JBQ0tHUk9VTkQ7CisJcE5vdGVJdGVtLT5DcmVhdGUoaWNwKTsKKworCXBOb3RlSXRlbS0+T25DcmVhdGVOb3RlSXRlbSgpOworCQorCXBOb3RlSXRlbS0+UmVzZXRTdWJqZWN0TmFtZShtX2FDaGlsZHJlbi5HZXRTaXplKCkgLSAxKTsKKworCUZYX1NZU1RFTVRJTUUgc3Q7CisJaWYgKElGWF9TeXN0ZW1IYW5kbGVyKiBwU0ggPSB0aGlzLT5HZXRTeXN0ZW1IYW5kbGVyKCkpCisJCXN0ID0gcFNILT5HZXRMb2NhbFRpbWUoKTsKKwlwTm90ZUl0ZW0tPlNldERhdGVUaW1lKHN0KTsKKworCXBOb3RlSXRlbS0+U2V0Q29udGVudHMoTCIiKTsKKworCXRoaXMtPk9uTm90aWZ5KHBOb3RlSXRlbSwgUE5NX05PVEVFRElUQ0hBTkdFRCwgMCwgMCk7CQorCisJcmV0dXJuIHBOb3RlSXRlbTsKK30KKworRlhfSU5UMzIgQ1BXTF9Ob3RlX0NvbnRlbnRzOjpDb3VudFN1Ykl0ZW1zKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9hQ2hpbGRyZW4uR2V0U2l6ZSgpIC0gMTsKK30KKworSVBXTF9Ob3RlSXRlbSogQ1BXTF9Ob3RlX0NvbnRlbnRzOjpHZXRTdWJJdGVtcyhGWF9JTlQzMiBpbmRleCkgY29uc3QKK3sKKwlGWF9JTlQzMiBuSW5kZXggPSBpbmRleCArIDE7CisKKwlpZiAobkluZGV4ID4gMCAmJiBuSW5kZXggPCBtX2FDaGlsZHJlbi5HZXRTaXplKCkpCisJCWlmIChDUFdMX1duZCogcENoaWxkID0gbV9hQ2hpbGRyZW4uR2V0QXQobkluZGV4KSkKKwkJeworCQkJQVNTRVJUKHBDaGlsZC0+R2V0Q2xhc3NOYW1lKCkgPT0gIkNQV0xfTm90ZUl0ZW0iKTsKKwkJCUNQV0xfTm90ZUl0ZW0qIHBJdGVtID0gKENQV0xfTm90ZUl0ZW0qKXBDaGlsZDsKKwkJCXJldHVybiBwSXRlbTsKKwkJfQorCXJldHVybiBOVUxMOworfQorCit2b2lkIENQV0xfTm90ZV9Db250ZW50czo6RGVsZXRlU3ViSXRlbShJUFdMX05vdGVJdGVtKiBwTm90ZUl0ZW0pCit7CisJRlhfSU5UMzIgbkluZGV4ID0gdGhpcy0+R2V0SXRlbUluZGV4KChDUFdMX05vdGVJdGVtKilwTm90ZUl0ZW0pOworCisJaWYgKG5JbmRleCA+IDApCisJeworCQlpZiAoQ1BXTF9Ob3RlSXRlbSogcFBXTE5vdGVJdGVtID0gKENQV0xfTm90ZUl0ZW0qKXBOb3RlSXRlbSkKKwkJeworCQkJcFBXTE5vdGVJdGVtLT5LaWxsRm9jdXMoKTsKKwkJCXBQV0xOb3RlSXRlbS0+RGVzdHJveSgpOworCQkJZGVsZXRlIHBQV0xOb3RlSXRlbTsKKwkJfQorCisJCWZvciAoRlhfSU5UMzIgaT1uSW5kZXgsc3o9bV9hQ2hpbGRyZW4uR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJCXsKKwkJCWlmIChDUFdMX1duZCogcENoaWxkID0gbV9hQ2hpbGRyZW4uR2V0QXQoaSkpCisJCQl7CisJCQkJQVNTRVJUKHBDaGlsZC0+R2V0Q2xhc3NOYW1lKCkgPT0gIkNQV0xfTm90ZUl0ZW0iKTsKKwkJCQlDUFdMX05vdGVJdGVtKiBwSXRlbSA9IChDUFdMX05vdGVJdGVtKilwQ2hpbGQ7CisJCQkJcEl0ZW0tPlJlc2V0U3ViamVjdE5hbWUoaSk7CisJCQl9CisJCX0KKworCQl0aGlzLT5Pbk5vdGlmeSh0aGlzLCBQTk1fTk9URUVESVRDSEFOR0VELCAwLCAwKTsKKwl9Cit9CisKK0lQV0xfTm90ZUl0ZW0qIENQV0xfTm90ZV9Db250ZW50czo6R2V0SGl0Tm90ZUl0ZW0oY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpCit7CisJQ1BERl9Qb2ludCBwdCA9IHRoaXMtPlBhcmVudFRvQ2hpbGQocG9pbnQpOworCisJZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9hQ2hpbGRyZW4uR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJeworCQlpZiAoQ1BXTF9XbmQqIHBDaGlsZCA9IG1fYUNoaWxkcmVuLkdldEF0KGkpKQorCQl7CisJCQlpZiAocENoaWxkLT5HZXRDbGFzc05hbWUoKSA9PSAiQ1BXTF9Ob3RlSXRlbSIpCisJCQl7CisJCQkJQ1BXTF9Ob3RlSXRlbSogcE5vdGVJdGVtID0gKENQV0xfTm90ZUl0ZW0qKXBDaGlsZDsKKwkJCQlpZiAoSVBXTF9Ob3RlSXRlbSogcFJldCA9IHBOb3RlSXRlbS0+R2V0SGl0Tm90ZUl0ZW0ocHQpKQorCQkJCQlyZXR1cm4gcFJldDsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBDUFdMX05vdGVfQ29udGVudHM6Ok9uTm90aWZ5KENQV0xfV25kKiBwV25kLCBGWF9EV09SRCBtc2csIEZYX0lOVFBUUiB3UGFyYW0sIEZYX0lOVFBUUiBsUGFyYW0pCit7CisJc3dpdGNoIChtc2cpCisJeworCWNhc2UgUE5NX05PVEVFRElUQ0hBTkdFRDoKKwkJeworCQkJRlhfSU5UMzIgbkluZGV4ID0gdGhpcy0+R2V0SXRlbUluZGV4KHBXbmQpOworCQkJaWYgKG5JbmRleCA8IDApIG5JbmRleCA9IDA7CisKKwkJCW1fcEVkaXQtPkVuYWJsZU5vdGlmeShGQUxTRSk7CQorCQkJdGhpcy0+UmVzZXRDb250ZW50KG5JbmRleCk7CisJCQltX3BFZGl0LT5FbmFibGVOb3RpZnkoVFJVRSk7CisKKwkJCWZvciAoRlhfSU5UMzIgaT1uSW5kZXgrMSwgc3o9bV9hQ2hpbGRyZW4uR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJCQl7CisJCQkJaWYgKENQV0xfV25kKiBwQ2hpbGQgPSBtX2FDaGlsZHJlbi5HZXRBdChpKSkKKwkJCQkJcENoaWxkLT5Pbk5vdGlmeSh0aGlzLCBQTk1fTk9URVJFU0VULCAwLCAwKTsKKwkJCX0KKworCQkJaWYgKENQV0xfV25kICogcFBhcmVudCA9IHRoaXMtPkdldFBhcmVudFdpbmRvdygpKQorCQkJeworCQkJCXBQYXJlbnQtPk9uTm90aWZ5KHRoaXMsIFBOTV9OT1RFRURJVENIQU5HRUQsIDAsIDApOworCQkJfQorCQl9CisJCXJldHVybjsKKwljYXNlIFBOTV9TQ1JPTExXSU5ET1c6CisJCXRoaXMtPlNldFNjcm9sbFBvcyhDUERGX1BvaW50KDAuMGYsICooRlhfRkxPQVQqKWxQYXJhbSkpOworCQl0aGlzLT5SZXNldEZhY2UoKTsKKwkJSW52YWxpZGF0ZVJlY3QoTlVMTCk7CisJCXJldHVybjsJCQorCWNhc2UgUE5NX1NFVENBUkVUSU5GTzoKKwkJaWYgKFBXTF9DQVJFVF9JTkZPICogcEluZm8gPSAoUFdMX0NBUkVUX0lORk8qKXdQYXJhbSkKKwkJeworCQkJUFdMX0NBUkVUX0lORk8gbmV3SW5mbyA9ICpwSW5mbzsKKwkJCW5ld0luZm8uYlZpc2libGUgPSBUUlVFOworCQkJbmV3SW5mby5wdEhlYWQgPSB0aGlzLT5DaGlsZFRvUGFyZW50KHBJbmZvLT5wdEhlYWQpOworCQkJbmV3SW5mby5wdEZvb3QgPSB0aGlzLT5DaGlsZFRvUGFyZW50KHBJbmZvLT5wdEZvb3QpOworCisJCQlpZiAoQ1BXTF9XbmQgKiBwUGFyZW50ID0gdGhpcy0+R2V0UGFyZW50V2luZG93KCkpCisJCQl7CisJCQkJcFBhcmVudC0+T25Ob3RpZnkodGhpcywgUE5NX1NFVENBUkVUSU5GTywgKEZYX0lOVFBUUikmbmV3SW5mbywgMCk7CisJCQl9CisJCX0KKwkJcmV0dXJuOworCWNhc2UgUE5NX05PVEVSRVNFVDoKKwkJeworCQkJbV9wRWRpdC0+RW5hYmxlTm90aWZ5KEZBTFNFKTsJCisJCQl0aGlzLT5SZXNldENvbnRlbnQoMCk7CisJCQltX3BFZGl0LT5FbmFibGVOb3RpZnkoVFJVRSk7CisKKwkJCWZvciAoRlhfSU5UMzIgaT0xLCBzej1tX2FDaGlsZHJlbi5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwkJCXsKKwkJCQlpZiAoQ1BXTF9XbmQqIHBDaGlsZCA9IG1fYUNoaWxkcmVuLkdldEF0KGkpKQorCQkJCQlwQ2hpbGQtPk9uTm90aWZ5KHRoaXMsIFBOTV9OT1RFUkVTRVQsIDAsIDApOworCQkJfQkKKworCQkJbV9wRWRpdC0+RW5hYmxlTm90aWZ5KEZBTFNFKTsJCisJCQl0aGlzLT5SZXNldENvbnRlbnQoMCk7CisJCQltX3BFZGl0LT5FbmFibGVOb3RpZnkoVFJVRSk7CisJCX0KKwkJcmV0dXJuOworCX0KKworCUNQV0xfV25kOjpPbk5vdGlmeShwV25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKK30KKworRlhfQk9PTAlDUFdMX05vdGVfQ29udGVudHM6Ok9uTEJ1dHRvbkRvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZykKK3sKKwlpZiAoQ1BXTF9XbmQ6Ok9uTEJ1dHRvbkRvd24ocG9pbnQsbkZsYWcpKSByZXR1cm4gVFJVRTsKKworCWlmICghbV9wRWRpdC0+SXNGb2N1c2VkKCkpCisJeworCQltX3BFZGl0LT5TZXRGb2N1cygpOworCX0KKworCXJldHVybiBUUlVFOworfQorCit2b2lkIENQV0xfTm90ZV9Db250ZW50czo6U2V0RWRpdEZvY3VzKEZYX0JPT0wgYkxhc3QpCit7CisJaWYgKCFtX3BFZGl0LT5Jc0ZvY3VzZWQoKSkKKwl7CisJCW1fcEVkaXQtPlNldEZvY3VzKCk7CisJCW1fcEVkaXQtPlNldENhcmV0KGJMYXN0ID8gbV9wRWRpdC0+R2V0VG90YWxXb3JkcygpIDogMCk7CisJfQorfQorCitDUFdMX0VkaXQqIENQV0xfTm90ZV9Db250ZW50czo6R2V0RWRpdCgpIGNvbnN0Cit7CisJcmV0dXJuIG1fcEVkaXQ7Cit9CisKK3ZvaWQgQ1BXTF9Ob3RlX0NvbnRlbnRzOjpFbmFibGVNb2RpZnkoRlhfQk9PTCBiRW5hYmxlZCkKK3sKKwlpZiAoIWJFbmFibGVkKQorCQltX3BFZGl0LT5BZGRGbGFnKFBXU19SRUFET05MWSk7CisJZWxzZQorCQltX3BFZGl0LT5SZW1vdmVGbGFnKFBXU19SRUFET05MWSk7CisKKwlmb3IgKEZYX0lOVDMyIGk9MCxzej1tX2FDaGlsZHJlbi5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwl7CisJCWlmIChDUFdMX1duZCogcENoaWxkID0gbV9hQ2hpbGRyZW4uR2V0QXQoaSkpCisJCXsKKwkJCWlmIChwQ2hpbGQtPkdldENsYXNzTmFtZSgpID09ICJDUFdMX05vdGVJdGVtIikKKwkJCXsKKwkJCQlDUFdMX05vdGVJdGVtKiBwTm90ZUl0ZW0gPSAoQ1BXTF9Ob3RlSXRlbSopcENoaWxkOworCQkJCXBOb3RlSXRlbS0+RW5hYmxlTW9kaWZ5KGJFbmFibGVkKTsKKwkJCX0KKwkJfQorCX0KK30KKwordm9pZCBDUFdMX05vdGVfQ29udGVudHM6OkVuYWJsZVJlYWQoRlhfQk9PTCBiRW5hYmxlZCkKK3sKKwlpZiAoIWJFbmFibGVkKQorCQltX3BFZGl0LT5BZGRGbGFnKFBFU19OT1JFQUQpOworCWVsc2UKKwkJbV9wRWRpdC0+UmVtb3ZlRmxhZyhQRVNfTk9SRUFEKTsKKworCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fYUNoaWxkcmVuLkdldFNpemUoKTsgaTxzejsgaSsrKQorCXsKKwkJaWYgKENQV0xfV25kKiBwQ2hpbGQgPSBtX2FDaGlsZHJlbi5HZXRBdChpKSkKKwkJeworCQkJaWYgKHBDaGlsZC0+R2V0Q2xhc3NOYW1lKCkgPT0gIkNQV0xfTm90ZUl0ZW0iKQorCQkJeworCQkJCUNQV0xfTm90ZUl0ZW0qIHBOb3RlSXRlbSA9IChDUFdMX05vdGVJdGVtKilwQ2hpbGQ7CisJCQkJcE5vdGVJdGVtLT5FbmFibGVSZWFkKGJFbmFibGVkKTsKKwkJCX0KKwkJfQorCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX05vdGVJdGVtIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ1BXTF9Ob3RlSXRlbTo6Q1BXTF9Ob3RlSXRlbSgpIDoKKwltX3BQcml2YXRlRGF0YShOVUxMKSwKKwltX3BTdWJqZWN0KE5VTEwpLAorCW1fcERhdGVUaW1lKE5VTEwpLAorCW1fcENvbnRlbnRzKE5VTEwpLAorCW1fc0F1dGhvcihMIiIpLAorCW1fZk9sZEl0ZW1IZWlnaHQoMC4wZiksCisJbV9iU2l6ZUNoYW5nZWQoRkFMU0UpLAorCW1fYkFsbG93TW9kaWZ5KFRSVUUpCit7Cit9CisKK0NQV0xfTm90ZUl0ZW06On5DUFdMX05vdGVJdGVtKCkKK3sKK30KKworQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9Ob3RlSXRlbTo6R2V0Q2xhc3NOYW1lKCkgY29uc3QKK3sKKwlyZXR1cm4gIkNQV0xfTm90ZUl0ZW0iOworfQorCit2b2lkIENQV0xfTm90ZUl0ZW06OkNyZWF0ZUNoaWxkV25kKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKQoreworCUNQV0xfQ29sb3Igc1RleHRDb2xvcjsKKworCWlmIChDUFdMX1V0aWxzOjpJc0JsYWNrT3JXaGl0ZSh0aGlzLT5HZXRCYWNrZ3JvdW5kQ29sb3IoKSkpCisJCXNUZXh0Q29sb3IgPSBQV0xfREVGQVVMVF9XSElURUNPTE9SOworCWVsc2UKKwkJc1RleHRDb2xvciA9IFBXTF9ERUZBVUxUX0JMQUNLQ09MT1I7CisKKwltX3BTdWJqZWN0ID0gbmV3IENQV0xfTGFiZWw7CisJUFdMX0NSRUFURVBBUkFNIHNjcCA9IGNwOworCXNjcC5wUGFyZW50V25kID0gdGhpczsKKwlzY3AuZHdGbGFncyA9IFBXU19WSVNJQkxFIHwgUFdTX0NISUxEIHwgUEVTX0xFRlQgfCBQRVNfVE9QOworCXNjcC5zVGV4dENvbG9yID0gc1RleHRDb2xvcjsKKwltX3BTdWJqZWN0LT5DcmVhdGUoc2NwKTsKKworCW1fcERhdGVUaW1lID0gbmV3IENQV0xfTGFiZWw7CisJUFdMX0NSRUFURVBBUkFNIGRjcCA9IGNwOworCWRjcC5wUGFyZW50V25kID0gdGhpczsKKwlkY3AuZHdGbGFncyA9IFBXU19WSVNJQkxFIHwgUFdTX0NISUxEIHwgUEVTX1JJR0hUIHwgUEVTX1RPUDsKKwlkY3Auc1RleHRDb2xvciA9IHNUZXh0Q29sb3I7CisJbV9wRGF0ZVRpbWUtPkNyZWF0ZShkY3ApOworCisJbV9wQ29udGVudHMgPSBuZXcgQ1BXTF9Ob3RlX0NvbnRlbnRzOworCVBXTF9DUkVBVEVQQVJBTSBjY3AgPSBjcDsKKwljY3AucFBhcmVudFduZCA9IHRoaXM7CisJLy9jY3Auc0JhY2tncm91bmRDb2xvciA9IFBXTF9ERUZBVUxUX1dISVRFQ09MT1I7CisJY2NwLnNCYWNrZ3JvdW5kQ29sb3IgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9SR0IsIDI0MC8yNTUuMGYsIDI0MC8yNTUuMGYsIDI0MC8yNTUuMGYpOworCWNjcC5kd0ZsYWdzID0gUFdTX1ZJU0lCTEUgfCBQV1NfQ0hJTEQgfCBQV1NfQkFDS0dST1VORDsKKwltX3BDb250ZW50cy0+Q3JlYXRlKGNjcCk7CisJbV9wQ29udGVudHMtPlNldEl0ZW1TcGFjZShQT1BVUF9JVEVNX1NQQUNFKTsKKwltX3BDb250ZW50cy0+U2V0VG9wU3BhY2UoUE9QVVBfSVRFTV9TUEFDRSk7CisJbV9wQ29udGVudHMtPlNldEJvdHRvbVNwYWNlKFBPUFVQX0lURU1fU1BBQ0UpOworfQorCit2b2lkIENQV0xfTm90ZUl0ZW06OlJlUG9zQ2hpbGRXbmQoKQoreworCWlmICh0aGlzLT5Jc1ZhbGlkKCkpCisJeworCQlBU1NFUlQobV9wU3ViamVjdCAhPSBOVUxMKTsKKwkJQVNTRVJUKG1fcERhdGVUaW1lICE9IE5VTEwpOworCQlBU1NFUlQobV9wQ29udGVudHMgIT0gTlVMTCk7CisKKwkJQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOworCisJCUNQREZfUmVjdCByY1N1YmplY3QgPSByY0NsaWVudDsKKwkJcmNTdWJqZWN0LmxlZnQgKz0gUE9QVVBfSVRFTV9URVhUX0lOREVOVDsKKwkJcmNTdWJqZWN0LnRvcCA9IHJjQ2xpZW50LnRvcDsKKwkJcmNTdWJqZWN0LnJpZ2h0ID0gUFdMX01JTihyY1N1YmplY3QubGVmdCArIG1fcFN1YmplY3QtPkdldENvbnRlbnRSZWN0KCkuV2lkdGgoKSArIDEuMGYsIHJjQ2xpZW50LnJpZ2h0KTsKKwkJcmNTdWJqZWN0LmJvdHRvbSA9IHJjU3ViamVjdC50b3AgLSBtX3BTdWJqZWN0LT5HZXRDb250ZW50UmVjdCgpLkhlaWdodCgpOworCQlyY1N1YmplY3QuTm9ybWFsaXplKCk7CisJCW1fcFN1YmplY3QtPk1vdmUocmNTdWJqZWN0LCBUUlVFLCBGQUxTRSk7CisJCW1fcFN1YmplY3QtPlNldFZpc2libGUoQ1BXTF9VdGlsczo6Q29udGFpbnNSZWN0KHJjQ2xpZW50LCByY1N1YmplY3QpKTsKKworCQlDUERGX1JlY3QgcmNEYXRlID0gcmNDbGllbnQ7CisJCXJjRGF0ZS5yaWdodCAtPSBQT1BVUF9JVEVNX1RFWFRfSU5ERU5UOworCQlyY0RhdGUubGVmdCA9IFBXTF9NQVgocmNEYXRlLnJpZ2h0IC0gbV9wRGF0ZVRpbWUtPkdldENvbnRlbnRSZWN0KCkuV2lkdGgoKSAtIDEuMGYsIHJjU3ViamVjdC5yaWdodCk7CisJCXJjRGF0ZS5ib3R0b20gPSByY0RhdGUudG9wIC0gbV9wRGF0ZVRpbWUtPkdldENvbnRlbnRSZWN0KCkuSGVpZ2h0KCk7CisJCXJjRGF0ZS5Ob3JtYWxpemUoKTsKKwkJbV9wRGF0ZVRpbWUtPk1vdmUocmNEYXRlLCBUUlVFLCBGQUxTRSk7CisJCW1fcERhdGVUaW1lLT5TZXRWaXNpYmxlKENQV0xfVXRpbHM6OkNvbnRhaW5zUmVjdChyY0NsaWVudCwgcmNEYXRlKSk7CisKKwkJQ1BERl9SZWN0IHJjQ29udGVudHMgPSByY0NsaWVudDsKKwkJcmNDb250ZW50cy5sZWZ0ICs9IDEuMGY7CisJCXJjQ29udGVudHMucmlnaHQgLT0gMS4wZjsKKwkJcmNDb250ZW50cy50b3AgPSByY0RhdGUuYm90dG9tIC0gUE9QVVBfSVRFTV9IRUFEX0JPVFRPTTsKKwkJcmNDb250ZW50cy5ib3R0b20gKz0gUE9QVVBfSVRFTV9CT1RUT01XSURUSDsKKwkJcmNDb250ZW50cy5Ob3JtYWxpemUoKTsKKwkJbV9wQ29udGVudHMtPk1vdmUocmNDb250ZW50cywgVFJVRSwgRkFMU0UpOworCQltX3BDb250ZW50cy0+U2V0VmlzaWJsZShDUFdMX1V0aWxzOjpDb250YWluc1JlY3QocmNDbGllbnQsIHJjQ29udGVudHMpKTsKKwl9CisKKwlTZXRDbGlwUmVjdChDUFdMX1V0aWxzOjpJbmZsYXRlUmVjdChHZXRXaW5kb3dSZWN0KCksMS4wZikpOworfQorCit2b2lkIENQV0xfTm90ZUl0ZW06OlNldFByaXZhdGVEYXRhKHZvaWQqIHBEYXRhKQoreworCW1fcFByaXZhdGVEYXRhID0gcERhdGE7Cit9CisKK3ZvaWQgQ1BXTF9Ob3RlSXRlbTo6U2V0QmtDb2xvcihjb25zdCBDUFdMX0NvbG9yJiBjb2xvcikKK3sKKwlDUFdMX0NvbG9yIHNCSyA9IGNvbG9yOworCXRoaXMtPlNldEJhY2tncm91bmRDb2xvcihzQkspOworCisJQ1BXTF9Db2xvciBzVGV4dENvbG9yOworCisJaWYgKENQV0xfVXRpbHM6OklzQmxhY2tPcldoaXRlKHNCSykpCisJCXNUZXh0Q29sb3IgPSBQV0xfREVGQVVMVF9XSElURUNPTE9SOworCWVsc2UKKwkJc1RleHRDb2xvciA9IFBXTF9ERUZBVUxUX0JMQUNLQ09MT1I7CisKKwl0aGlzLT5TZXRUZXh0Q29sb3Ioc1RleHRDb2xvcik7CisJaWYgKG1fcFN1YmplY3QpCisJCW1fcFN1YmplY3QtPlNldFRleHRDb2xvcihzVGV4dENvbG9yKTsKKwlpZiAobV9wRGF0ZVRpbWUpCisJCW1fcERhdGVUaW1lLT5TZXRUZXh0Q29sb3Ioc1RleHRDb2xvcik7CisKKwl0aGlzLT5JbnZhbGlkYXRlUmVjdChOVUxMKTsKKworCWlmIChJUFdMX05vdGVOb3RpZnkqIHBOb3RpZnkgPSBHZXROb3RlTm90aWZ5KCkpCisJeworCQlwTm90aWZ5LT5PblNldEJrQ29sb3IodGhpcyk7CisJfQorfQorCit2b2lkIENQV0xfTm90ZUl0ZW06OlNldFN1YmplY3ROYW1lKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzTmFtZSkKK3sKKwlpZiAobV9wU3ViamVjdCkKKwl7CisJCW1fcFN1YmplY3QtPlNldFRleHQoc05hbWUpOwkKKwl9CisKKwlpZiAoSVBXTF9Ob3RlTm90aWZ5KiBwTm90aWZ5ID0gR2V0Tm90ZU5vdGlmeSgpKQorCXsKKwkJcE5vdGlmeS0+T25TZXRTdWJqZWN0TmFtZSh0aGlzKTsKKwl9Cit9CisKK3ZvaWQgQ1BXTF9Ob3RlSXRlbTo6U2V0QXV0aG9yTmFtZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc05hbWUpCit7CisJbV9zQXV0aG9yID0gc05hbWU7CisJUmVzZXRTdWJqZWN0TmFtZSgtMSk7CQorCisJaWYgKElQV0xfTm90ZU5vdGlmeSogcE5vdGlmeSA9IEdldE5vdGVOb3RpZnkoKSkKKwl7CisJCXBOb3RpZnktPk9uU2V0QXV0aG9yTmFtZSh0aGlzKTsKKwl9Cit9CisKK3ZvaWQgQ1BXTF9Ob3RlSXRlbTo6UmVzZXRTdWJqZWN0TmFtZShGWF9JTlQzMiBuSXRlbUluZGV4KQoreworCWlmIChuSXRlbUluZGV4IDwgMCkKKwl7CisJCWlmIChDUFdMX1duZCogcFBhcmVudCA9IHRoaXMtPkdldFBhcmVudFdpbmRvdygpKQorCQl7CisJCQlBU1NFUlQocFBhcmVudC0+R2V0Q2xhc3NOYW1lKCkgPT0gIkNQV0xfTm90ZV9Db250ZW50cyIpOworCisJCQlDUFdMX05vdGVfQ29udGVudHMqIHBDb250ZW50cyA9IChDUFdMX05vdGVfQ29udGVudHMqKXBQYXJlbnQ7CisJCQluSXRlbUluZGV4ID0gcENvbnRlbnRzLT5HZXRJdGVtSW5kZXgodGhpcyk7CisJCX0KKwl9CisKKwljb25zdCBDUFdMX05vdGUqIHBOb3RlID0gR2V0Tm90ZSgpOworCUFTU0VSVChwTm90ZSAhPSBOVUxMKTsKKworCUNGWF9XaWRlU3RyaW5nIHNTdWJqZWN0OworCXNTdWJqZWN0LkZvcm1hdChwTm90ZS0+R2V0UmVwbHlTdHJpbmcoKSwgbkl0ZW1JbmRleCk7CisKKwlpZiAoIW1fc0F1dGhvci5Jc0VtcHR5KCkpCisJeworCQkKKwkJc1N1YmplY3QgKz0gTCIgLSAiOworCQlzU3ViamVjdCArPSBtX3NBdXRob3I7CisJfQorCXRoaXMtPlNldFN1YmplY3ROYW1lKHNTdWJqZWN0KTsKKwl0aGlzLT5SZVBvc0NoaWxkV25kKCk7Cit9CisKK3ZvaWQgQ1BXTF9Ob3RlSXRlbTo6U2V0RGF0ZVRpbWUoRlhfU1lTVEVNVElNRSB0aW1lKQoreworCW1fZHROb3RlID0gdGltZTsKKwkKKwlDRlhfV2lkZVN0cmluZyBzd1RpbWU7CisJc3dUaW1lLkZvcm1hdCgoRlhfTFBDV1NUUilMIiUwNGQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkIiwgdGltZS53WWVhciwgdGltZS53TW9udGgsIHRpbWUud0RheSwgdGltZS53SG91ciwgdGltZS53TWludXRlLCB0aW1lLndTZWNvbmQpOworCWlmIChtX3BEYXRlVGltZSkKKwl7CisJCW1fcERhdGVUaW1lLT5TZXRUZXh0KHN3VGltZSk7CisJfQorCisJdGhpcy0+UmVQb3NDaGlsZFduZCgpOworCisJaWYgKElQV0xfTm90ZU5vdGlmeSogcE5vdGlmeSA9IEdldE5vdGVOb3RpZnkoKSkKKwl7CisJCXBOb3RpZnktPk9uU2V0RGF0ZVRpbWUodGhpcyk7CisJfQorfQorCit2b2lkIENQV0xfTm90ZUl0ZW06OlNldENvbnRlbnRzKGNvbnN0IENGWF9XaWRlU3RyaW5nJiBzQ29udGVudHMpCit7CisJaWYgKG1fcENvbnRlbnRzKQorCXsKKwkJbV9wQ29udGVudHMtPlNldFRleHQoc0NvbnRlbnRzKTsKKwl9CisKKwlpZiAoSVBXTF9Ob3RlTm90aWZ5KiBwTm90aWZ5ID0gR2V0Tm90ZU5vdGlmeSgpKQorCXsKKwkJcE5vdGlmeS0+T25TZXRDb250ZW50cyh0aGlzKTsKKwl9Cit9CisKK0NQV0xfTm90ZUl0ZW0qIENQV0xfTm90ZUl0ZW06OkdldFBhcmVudE5vdGVJdGVtKCkgY29uc3QKK3sKKwlpZiAoQ1BXTF9XbmQqIHBQYXJlbnQgPSB0aGlzLT5HZXRQYXJlbnRXaW5kb3coKSkKKwl7CisJCWlmIChDUFdMX1duZCogcEdyYW5kID0gcFBhcmVudC0+R2V0UGFyZW50V2luZG93KCkpCisJCXsKKwkJCUFTU0VSVChwR3JhbmQtPkdldENsYXNzTmFtZSgpID09ICJDUFdMX05vdGVJdGVtIik7CisJCQlyZXR1cm4gKENQV0xfTm90ZUl0ZW0qKXBHcmFuZDsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQorCitJUFdMX05vdGVJdGVtKiBDUFdMX05vdGVJdGVtOjpHZXRQYXJlbnRJdGVtKCkgY29uc3QKK3sKKwlyZXR1cm4gR2V0UGFyZW50Tm90ZUl0ZW0oKTsKK30KKworQ1BXTF9FZGl0KiBDUFdMX05vdGVJdGVtOjpHZXRFZGl0KCkgY29uc3QKK3sKKwlpZiAobV9wQ29udGVudHMpCisJCXJldHVybiBtX3BDb250ZW50cy0+R2V0RWRpdCgpOworCXJldHVybiBOVUxMOworfQorCit2b2lkKiBDUFdMX05vdGVJdGVtOjpHZXRQcml2YXRlRGF0YSgpIGNvbnN0Cit7CisJcmV0dXJuIG1fcFByaXZhdGVEYXRhOworfQorCitDRlhfV2lkZVN0cmluZyBDUFdMX05vdGVJdGVtOjpHZXRBdXRob3JOYW1lKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9zQXV0aG9yOyAKK30KKworQ1BXTF9Db2xvciBDUFdMX05vdGVJdGVtOjpHZXRCa0NvbG9yKCkgY29uc3QKK3sKKwlyZXR1cm4gdGhpcy0+R2V0QmFja2dyb3VuZENvbG9yKCk7Cit9CisKK0NGWF9XaWRlU3RyaW5nIENQV0xfTm90ZUl0ZW06OkdldENvbnRlbnRzKCkgY29uc3QKK3sKKwlpZiAobV9wQ29udGVudHMpCisJCXJldHVybiBtX3BDb250ZW50cy0+R2V0VGV4dCgpOworCisJcmV0dXJuIEwiIjsKK30KKworRlhfU1lTVEVNVElNRSBDUFdMX05vdGVJdGVtOjpHZXREYXRlVGltZSgpIGNvbnN0Cit7CisJcmV0dXJuIG1fZHROb3RlOworfQorCitDRlhfV2lkZVN0cmluZyBDUFdMX05vdGVJdGVtOjpHZXRTdWJqZWN0TmFtZSgpIGNvbnN0Cit7CisJaWYgKG1fcFN1YmplY3QpCisJCXJldHVybiBtX3BTdWJqZWN0LT5HZXRUZXh0KCk7CisKKwlyZXR1cm4gTCIiOworfQorCitDUFdMX05vdGVJdGVtKiBDUFdMX05vdGVJdGVtOjpDcmVhdGVOb3RlSXRlbSgpCit7CisJaWYgKG1fcENvbnRlbnRzKQorCQlyZXR1cm4gbV9wQ29udGVudHMtPkNyZWF0ZVN1Ykl0ZW0oKTsKKworCXJldHVybiBOVUxMOworfQorCitJUFdMX05vdGVJdGVtKiBDUFdMX05vdGVJdGVtOjpDcmVhdGVTdWJJdGVtKCkKK3sKKwlyZXR1cm4gQ3JlYXRlTm90ZUl0ZW0oKTsKK30KKworRlhfSU5UMzIgQ1BXTF9Ob3RlSXRlbTo6Q291bnRTdWJJdGVtcygpIGNvbnN0Cit7CisJaWYgKG1fcENvbnRlbnRzKQorCQlyZXR1cm4gbV9wQ29udGVudHMtPkNvdW50U3ViSXRlbXMoKTsKKworCXJldHVybiAwOworfQorCitJUFdMX05vdGVJdGVtKiBDUFdMX05vdGVJdGVtOjpHZXRTdWJJdGVtcyhGWF9JTlQzMiBpbmRleCkgY29uc3QKK3sKKwlpZiAobV9wQ29udGVudHMpCisJCXJldHVybiBtX3BDb250ZW50cy0+R2V0U3ViSXRlbXMoaW5kZXgpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgQ1BXTF9Ob3RlSXRlbTo6RGVsZXRlU3ViSXRlbShJUFdMX05vdGVJdGVtKiBwTm90ZUl0ZW0pCit7CisJdGhpcy0+S2lsbEZvY3VzKCk7CisKKwlpZiAoSVBXTF9Ob3RlTm90aWZ5KiBwTm90aWZ5ID0gR2V0Tm90ZU5vdGlmeSgpKQorCXsKKwkJcE5vdGlmeS0+T25JdGVtRGVsZXRlKHBOb3RlSXRlbSk7CisJfQorCisJaWYgKG1fcENvbnRlbnRzKQorCQltX3BDb250ZW50cy0+RGVsZXRlU3ViSXRlbShwTm90ZUl0ZW0pOworfQorCitJUFdMX05vdGVJdGVtKiBDUFdMX05vdGVJdGVtOjpHZXRIaXROb3RlSXRlbShjb25zdCBDUERGX1BvaW50JiBwb2ludCkKK3sKKwlDUERGX1BvaW50IHB0ID0gdGhpcy0+UGFyZW50VG9DaGlsZChwb2ludCk7CisKKwlpZiAodGhpcy0+V25kSGl0VGVzdChwdCkpCisJeworCQlpZiAobV9wQ29udGVudHMpCisJCXsKKwkJCWlmIChJUFdMX05vdGVJdGVtKiBwTm90ZUl0ZW0gPSBtX3BDb250ZW50cy0+R2V0SGl0Tm90ZUl0ZW0ocHQpKQorCQkJCXJldHVybiBwTm90ZUl0ZW07CisJCX0KKworCQlyZXR1cm4gdGhpczsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworSVBXTF9Ob3RlSXRlbSogQ1BXTF9Ob3RlSXRlbTo6R2V0Rm9jdXNlZE5vdGVJdGVtKCkgY29uc3QKK3sKKwlpZiAoY29uc3QgQ1BXTF9XbmQqIHBXbmQgPSB0aGlzLT5HZXRGb2N1c2VkKCkpCisJeworCQlpZiAocFduZC0+R2V0Q2xhc3NOYW1lKCkgPT0gIkNQV0xfRWRpdCIpCisJCXsKKwkJCWlmIChDUFdMX1duZCogcFBhcmVudCA9IHBXbmQtPkdldFBhcmVudFdpbmRvdygpKQorCQkJeworCQkJCUFTU0VSVChwUGFyZW50LT5HZXRDbGFzc05hbWUoKSA9PSAiQ1BXTF9Ob3RlX0NvbnRlbnRzIik7CisJCQkJCisJCQkJaWYgKENQV0xfV25kKiBwR3JhbmQgPSBwUGFyZW50LT5HZXRQYXJlbnRXaW5kb3coKSkKKwkJCQl7CisJCQkJCUFTU0VSVChwR3JhbmQtPkdldENsYXNzTmFtZSgpID09ICJDUFdMX05vdGVJdGVtIik7CQkJCQkKKwkJCQkJcmV0dXJuIChDUFdMX05vdGVJdGVtKilwR3JhbmQ7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK0ZYX0ZMT0FUIENQV0xfTm90ZUl0ZW06OkdldEl0ZW1IZWlnaHQoRlhfRkxPQVQgZkxpbWl0V2lkdGgpCit7CisJaWYgKGZMaW1pdFdpZHRoID4gMCkKKwl7CisJCWlmICghbV9iU2l6ZUNoYW5nZWQpCisJCQlyZXR1cm4gbV9mT2xkSXRlbUhlaWdodDsKKworCQltX2JTaXplQ2hhbmdlZCA9IEZBTFNFOworCisJCUFTU0VSVChtX3BTdWJqZWN0ICE9IE5VTEwpOworCQlBU1NFUlQobV9wRGF0ZVRpbWUgIT0gTlVMTCk7CisJCUFTU0VSVChtX3BDb250ZW50cyAhPSBOVUxMKTsKKworCQlGWF9GTE9BVCBmUmV0ID0gbV9wRGF0ZVRpbWUtPkdldENvbnRlbnRSZWN0KCkuSGVpZ2h0KCk7CisJCUZYX0ZMT0FUIGZCb3JkZXJXaWR0aCA9IChGWF9GTE9BVCl0aGlzLT5HZXRCb3JkZXJXaWR0aCgpOworCQlpZiAoZkxpbWl0V2lkdGggPiBmQm9yZGVyV2lkdGggKiAyKQorCQkJZlJldCArPSBtX3BDb250ZW50cy0+R2V0Q29udGVudHNIZWlnaHQoZkxpbWl0V2lkdGggLSBmQm9yZGVyV2lkdGggKiAyKTsKKwkJZlJldCArPSBQT1BVUF9JVEVNX0hFQURfQk9UVE9NICsgUE9QVVBfSVRFTV9CT1RUT01XSURUSCArIGZCb3JkZXJXaWR0aCAqIDI7CisKKwkJcmV0dXJuIG1fZk9sZEl0ZW1IZWlnaHQgPSBmUmV0OworCX0KKworCXJldHVybiAwOworfQorCitGWF9GTE9BVCBDUFdMX05vdGVJdGVtOjpHZXRJdGVtTGVmdE1hcmdpbigpCit7CisJcmV0dXJuIFBPUFVQX0lURU1fU0lERU1BUkdJTjsKK30KKworRlhfRkxPQVQgQ1BXTF9Ob3RlSXRlbTo6R2V0SXRlbVJpZ2h0TWFyZ2luKCkKK3sKKwlyZXR1cm4gUE9QVVBfSVRFTV9TSURFTUFSR0lOOworfQorCitGWF9CT09MCUNQV0xfTm90ZUl0ZW06Ok9uTEJ1dHRvbkRvd24oY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKQoreworCWlmICghbV9wQ29udGVudHMtPlduZEhpdFRlc3QobV9wQ29udGVudHMtPlBhcmVudFRvQ2hpbGQocG9pbnQpKSkKKwl7CisJCVNldE5vdGVGb2N1cyhGQUxTRSk7CisJfQorCisJQ1BXTF9XbmQ6Ok9uTEJ1dHRvbkRvd24ocG9pbnQsbkZsYWcpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK0ZYX0JPT0wJQ1BXTF9Ob3RlSXRlbTo6T25SQnV0dG9uVXAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZykKK3sKKwlpZiAoIW1fcENvbnRlbnRzLT5XbmRIaXRUZXN0KG1fcENvbnRlbnRzLT5QYXJlbnRUb0NoaWxkKHBvaW50KSkpCisJeworCQlTZXROb3RlRm9jdXMoRkFMU0UpOworCQlQb3B1cE5vdGVJdGVtTWVudShwb2ludCk7CisKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJcmV0dXJuIENQV0xfV25kOjpPblJCdXR0b25VcChwb2ludCxuRmxhZyk7Cit9CisKK3ZvaWQgQ1BXTF9Ob3RlSXRlbTo6T25Ob3RpZnkoQ1BXTF9XbmQqIHBXbmQsIEZYX0RXT1JEIG1zZywgRlhfSU5UUFRSIHdQYXJhbSwgRlhfSU5UUFRSIGxQYXJhbSkKK3sKKwlzd2l0Y2ggKG1zZykKKwl7CisJY2FzZSBQTk1fTk9URUVESVRDSEFOR0VEOgkKKwkJbV9iU2l6ZUNoYW5nZWQgPSBUUlVFOworCisJCWlmIChDUFdMX1duZCogcFBhcmVudCA9IHRoaXMtPkdldFBhcmVudFdpbmRvdygpKQorCQl7CisJCQlwUGFyZW50LT5Pbk5vdGlmeSh0aGlzLCBQTk1fTk9URUVESVRDSEFOR0VELCAwLCAwKTsKKwkJfQorCQlyZXR1cm47CQorCWNhc2UgUE5NX1NFVENBUkVUSU5GTzoKKwkJaWYgKFBXTF9DQVJFVF9JTkZPICogcEluZm8gPSAoUFdMX0NBUkVUX0lORk8qKXdQYXJhbSkKKwkJeworCQkJUFdMX0NBUkVUX0lORk8gbmV3SW5mbyA9ICpwSW5mbzsKKwkJCW5ld0luZm8uYlZpc2libGUgPSBUUlVFOworCQkJbmV3SW5mby5wdEhlYWQgPSB0aGlzLT5DaGlsZFRvUGFyZW50KHBJbmZvLT5wdEhlYWQpOworCQkJbmV3SW5mby5wdEZvb3QgPSB0aGlzLT5DaGlsZFRvUGFyZW50KHBJbmZvLT5wdEZvb3QpOworCisJCQlpZiAoQ1BXTF9XbmQgKiBwUGFyZW50ID0gdGhpcy0+R2V0UGFyZW50V2luZG93KCkpCisJCQl7CisJCQkJcFBhcmVudC0+T25Ob3RpZnkodGhpcywgUE5NX1NFVENBUkVUSU5GTywgKEZYX0lOVFBUUikmbmV3SW5mbywgMCk7CisJCQl9CisJCX0KKwkJcmV0dXJuOworCWNhc2UgUE5NX05PVEVSRVNFVDoKKwkJbV9iU2l6ZUNoYW5nZWQgPSBUUlVFOworCQltX3BDb250ZW50cy0+T25Ob3RpZnkodGhpcywgUE5NX05PVEVSRVNFVCwgMCwgMCk7CisJCQorCQlyZXR1cm47CisJfQorCisJQ1BXTF9XbmQ6Ok9uTm90aWZ5KHBXbmQsIG1zZywgd1BhcmFtLCBsUGFyYW0pOworfQorCit2b2lkIENQV0xfTm90ZUl0ZW06OlBvcHVwTm90ZUl0ZW1NZW51KGNvbnN0IENQREZfUG9pbnQmIHBvaW50KQoreworCWlmIChJUFdMX05vdGVOb3RpZnkqIHBOb3RpZnkgPSBHZXROb3RlTm90aWZ5KCkpCisJeworCQlGWF9JTlQzMiB4LHk7CisJCVBXTHRvV25kKHBvaW50LCB4LCB5KTsKKwkJaWYgKElGWF9TeXN0ZW1IYW5kbGVyKiBwU0ggPSBHZXRTeXN0ZW1IYW5kbGVyKCkpCisJCQlwU0gtPkNsaWVudFRvU2NyZWVuKEdldEF0dGFjaGVkSFduZCgpLCB4LCB5KTsKKwkJcE5vdGlmeS0+T25Qb3B1cE1lbnUodGhpcywgeCwgeSk7CisJfQorfQorCitjb25zdCBDUFdMX05vdGUqIENQV0xfTm90ZUl0ZW06OkdldE5vdGUoKSBjb25zdAoreworCWlmIChjb25zdCBDUFdMX1duZCogcFJvb3QgPSB0aGlzLT5HZXRSb290V25kKCkpCisJeworCQlBU1NFUlQocFJvb3QtPkdldENsYXNzTmFtZSgpID09ICJDUFdMX05vdGVJdGVtIik7CisJCUNQV0xfTm90ZUl0ZW0qIHBOb3RlSXRlbSA9IChDUFdMX05vdGVJdGVtKilwUm9vdDsKKwkJaWYgKHBOb3RlSXRlbS0+SXNUb3BJdGVtKCkpCisJCXsKKwkJCXJldHVybiAoQ1BXTF9Ob3RlKilwTm90ZUl0ZW07CisJCX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworSVBXTF9Ob3RlTm90aWZ5KiBDUFdMX05vdGVJdGVtOjpHZXROb3RlTm90aWZ5KCkgY29uc3QKK3sKKwlpZiAoY29uc3QgQ1BXTF9Ob3RlKiBwTm90ZSA9IEdldE5vdGUoKSkKKwkJcmV0dXJuIHBOb3RlLT5HZXROb3RlTm90aWZ5KCk7CisKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBDUFdMX05vdGVJdGVtOjpPbkNyZWF0ZU5vdGVJdGVtKCkKK3sKKwlpZiAoSVBXTF9Ob3RlTm90aWZ5KiBwTm90aWZ5ID0gR2V0Tm90ZU5vdGlmeSgpKQorCXsKKwkJcE5vdGlmeS0+T25JdGVtQ3JlYXRlKHRoaXMpOworCX0KK30KKwordm9pZCBDUFdMX05vdGVJdGVtOjpPbkNvbnRlbnRzVmFsaWRhdGUoKQoreworCWlmIChJUFdMX05vdGVOb3RpZnkqIHBOb3RpZnkgPSBHZXROb3RlTm90aWZ5KCkpCisJeworCQlwTm90aWZ5LT5PblNldENvbnRlbnRzKHRoaXMpOworCX0KK30KKwordm9pZCBDUFdMX05vdGVJdGVtOjpTZXROb3RlRm9jdXMoRlhfQk9PTCBiTGFzdCkKK3sKKwltX3BDb250ZW50cy0+U2V0RWRpdEZvY3VzKGJMYXN0KTsKK30KKwordm9pZCBDUFdMX05vdGVJdGVtOjpFbmFibGVNb2RpZnkoRlhfQk9PTCBiRW5hYmxlZCkKK3sKKwltX3BDb250ZW50cy0+RW5hYmxlTW9kaWZ5KGJFbmFibGVkKTsKKwltX2JBbGxvd01vZGlmeSA9IGJFbmFibGVkOworfQorCit2b2lkIENQV0xfTm90ZUl0ZW06OkVuYWJsZVJlYWQoRlhfQk9PTCBiRW5hYmxlZCkKK3sKKwltX3BDb250ZW50cy0+RW5hYmxlUmVhZChiRW5hYmxlZCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9Ob3RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ1BXTF9Ob3RlOjpDUFdMX05vdGUoSVBvcHVwX05vdGUqIHBQb3B1cE5vdGUsIElQV0xfTm90ZU5vdGlmeSogcE5vdGVOb3RpZnksIElQV0xfTm90ZUhhbmRsZXIqIHBOb3RlSGFuZGxlcikgOiAKKwltX3BBdXRob3IoTlVMTCksCisJbV9wSWNvbihOVUxMKSwKKwltX3BDbG9zZUJveChOVUxMKSwKKwltX3BDb250ZW50c0JhcihOVUxMKSwKKwltX3BMQkJveChOVUxMKSwKKwltX3BSQkJveChOVUxMKSwKKwltX3BPcHRpb25zKE5VTEwpLAorCW1fYlJlc2l6aW5nKEZBTFNFKSwKKwltX3JjQ2FwdGlvbigwLDAsMCwwKSwKKwltX3BOb3RlTm90aWZ5KHBOb3RlTm90aWZ5KSwKKwltX2JFbmFsYmxlTm90aWZ5KFRSVUUpLAorCW1fcFBvcHVwTm90ZShwUG9wdXBOb3RlKSwKKwltX3BOb3RlSGFuZGxlcihwTm90ZUhhbmRsZXIpCit7Cit9CisKK0NQV0xfTm90ZTo6fkNQV0xfTm90ZSgpCit7Cit9CisKK0lQV0xfTm90ZUl0ZW0qIENQV0xfTm90ZTo6UmVwbHkoKQoreworCXJldHVybiBDcmVhdGVOb3RlSXRlbSgpOworfQorCit2b2lkIENQV0xfTm90ZTo6RW5hYmxlTm90aWZ5KEZYX0JPT0wgYkVuYWJsZWQpCit7CisJbV9iRW5hbGJsZU5vdGlmeSA9IGJFbmFibGVkOworfQorCit2b2lkIENQV0xfTm90ZTo6UmVQb3NDaGlsZFduZCgpCit7CisJUmVQb3NOb3RlQ2hpbGRyZW4oKTsKKwltX3BDb250ZW50cy0+T25Ob3RpZnkodGhpcywgUE5NX05PVEVSRVNFVCwgMCwgMCk7CisJUmVzZXRTY3JvbGxCYXIoKTsKKwltX3BDb250ZW50cy0+T25Ob3RpZnkodGhpcywgUE5NX05PVEVSRVNFVCwgMCwgMCk7CisJdGhpcy0+T25Ob3RpZnkodGhpcywgUE5NX05PVEVFRElUQ0hBTkdFRCwgMCwgMCk7CisJLy/NrLK9CisJaWYgKGNvbnN0IENQV0xfV25kKiBwV25kID0gdGhpcy0+R2V0Rm9jdXNlZCgpKQorCXsKKwkJaWYgKHBXbmQtPkdldENsYXNzTmFtZSgpID09ICJDUFdMX0VkaXQiKQorCQl7CisJCQlDUFdMX0VkaXQqIHBFZGl0ID0gKENQV0xfRWRpdCopcFduZDsKKwkJCXBFZGl0LT5TZXRDYXJldChwRWRpdC0+R2V0Q2FyZXQoKSk7CisJCX0KKwl9CisJLy9DUERGX1BvaW50IHB0TmV3ID0gbV9wQ29udGVudHMtPkdldFNjcm9sbFBvcygpOworCS8vbV9wQ29udGVudHNCYXItPk9uTm90aWZ5KHRoaXMsIFBOTV9TRVRTQ1JPTExQT1MsIFNCVF9WU0NST0xMLCAoRlhfSU5UUFRSKSZwdE5ldy55KTsKK30KKworRlhfQk9PTCBDUFdMX05vdGU6OlJlc2V0U2Nyb2xsQmFyKCkKK3sKKwlGWF9CT09MIGJTY3JvbGxDaGFuZ2VkID0gRkFMU0U7CisKKwlpZiAoU2Nyb2xsQmFyU2hvdWxkVmlzaWJsZSgpKQorCXsKKwkJaWYgKCFtX3BDb250ZW50c0Jhci0+SXNWaXNpYmxlKCkpCisJCXsKKwkJCW1fcENvbnRlbnRzQmFyLT5TZXRWaXNpYmxlKFRSVUUpOworCQkJaWYgKG1fcENvbnRlbnRzQmFyLT5Jc1Zpc2libGUoKSkKKwkJCXsKKwkJCQltX3BDb250ZW50c0Jhci0+SW52YWxpZGF0ZVJlY3QoTlVMTCk7CisJCQkJYlNjcm9sbENoYW5nZWQgPSBUUlVFOworCQkJfQorCQl9CQorCX0KKwllbHNlCisJeworCQlpZiAobV9wQ29udGVudHNCYXItPklzVmlzaWJsZSgpKQorCQl7CisJCQltX3BDb250ZW50c0Jhci0+U2V0VmlzaWJsZShGQUxTRSk7CisJCQltX3BDb250ZW50c0Jhci0+SW52YWxpZGF0ZVJlY3QoTlVMTCk7CisKKwkJCWJTY3JvbGxDaGFuZ2VkID0gVFJVRTsKKwkJfQorCX0KKworCWlmIChiU2Nyb2xsQ2hhbmdlZCkKKwl7CisJCUNQREZfUmVjdCByY05vdGUgPSB0aGlzLT5HZXRDbGllbnRSZWN0KCk7CisJCUNQREZfUmVjdCByY0NvbnRlbnRzID0gbV9wQ29udGVudHMtPkdldFdpbmRvd1JlY3QoKTsKKwkJcmNDb250ZW50cy5yaWdodCA9IHJjTm90ZS5yaWdodCAtIDMuMGY7CisJCWlmIChtX3BDb250ZW50c0Jhci0+SXNWaXNpYmxlKCkpCisJCQlyY0NvbnRlbnRzLnJpZ2h0IC09IFBXTF9TQ1JPTExCQVJfV0lEVEg7CisJCW1fcENvbnRlbnRzLT5Nb3ZlKHJjQ29udGVudHMsIFRSVUUsIFRSVUUpOworCQltX3BDb250ZW50cy0+U2V0U2Nyb2xsUG9zKENQREZfUG9pbnQoMC4wZiwwLjBmKSk7CisJCW1fcENvbnRlbnRzLT5JbnZhbGlkYXRlUmVjdChOVUxMKTsKKwl9CisKKwlyZXR1cm4gYlNjcm9sbENoYW5nZWQ7Cit9CisKK0ZYX0JPT0wgQ1BXTF9Ob3RlOjpTY3JvbGxCYXJTaG91bGRWaXNpYmxlKCkKK3sKKwlDUERGX1JlY3QgcmNDb250ZW50c0ZhY3QgPSBtX3BDb250ZW50cy0+R2V0U2Nyb2xsQXJlYSgpOworCUNQREZfUmVjdCByY0NvbnRlbnRzQ2xpZW50ID0gbV9wQ29udGVudHMtPkdldENsaWVudFJlY3QoKTsKKworCXJldHVybiByY0NvbnRlbnRzRmFjdC5IZWlnaHQoKSA+IHJjQ29udGVudHNDbGllbnQuSGVpZ2h0KCk7CQorfQorCit2b2lkIENQV0xfTm90ZTo6U2V0T3B0aW9uc1RleHQoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNUZXh0KQoreworCWlmIChtX3BPcHRpb25zKQorCQltX3BPcHRpb25zLT5TZXRUZXh0KHNUZXh0KTsKKworCVJlUG9zTm90ZUNoaWxkcmVuKCk7Cit9CisKK3ZvaWQgQ1BXTF9Ob3RlOjpSZVBvc05vdGVDaGlsZHJlbigpCit7CisJaWYgKG1fYlJlc2l6aW5nKSByZXR1cm47CisKKwltX2JSZXNpemluZyA9IFRSVUU7CisKKwlpZiAodGhpcy0+SXNWYWxpZCgpKQorCXsKKwkJQVNTRVJUKG1fcFN1YmplY3QgIT0gTlVMTCk7CisJCUFTU0VSVChtX3BEYXRlVGltZSAhPSBOVUxMKTsKKwkJQVNTRVJUKG1fcENvbnRlbnRzICE9IE5VTEwpOworCQlBU1NFUlQobV9wQXV0aG9yICE9IE5VTEwpOworCQlBU1NFUlQobV9wQ2xvc2VCb3ggIT0gTlVMTCk7CisJCUFTU0VSVChtX3BJY29uICE9IE5VTEwpOworCQlBU1NFUlQobV9wTEJCb3ggIT0gTlVMTCk7CisJCUFTU0VSVChtX3BSQkJveCAhPSBOVUxMKTsKKwkJQVNTRVJUKG1fcENvbnRlbnRzQmFyICE9IE5VTEwpOworCQlBU1NFUlQobV9wT3B0aW9ucyAhPSBOVUxMKTsKKworCQlDUERGX1JlY3QgcmNDbGllbnQgPSBHZXRDbGllbnRSZWN0KCk7CisKKwkJQ1BERl9SZWN0IHJjSWNvbiA9IHJjQ2xpZW50OworCQlyY0ljb24udG9wIC09IDIuMGY7CisJCXJjSWNvbi5yaWdodCA9IHJjSWNvbi5sZWZ0ICsgMTQuMGY7CisJCXJjSWNvbi5ib3R0b20gPSByY0ljb24udG9wIC0gMTQuMGY7CisJCXJjSWNvbi5Ob3JtYWxpemUoKTsKKwkJbV9wSWNvbi0+TW92ZShyY0ljb24sIFRSVUUsIEZBTFNFKTsKKwkJbV9wSWNvbi0+U2V0VmlzaWJsZShDUFdMX1V0aWxzOjpDb250YWluc1JlY3QocmNDbGllbnQsIHJjSWNvbikpOworCisJCUNQREZfUmVjdCByY0Nsb3NlQm94ID0gcmNDbGllbnQ7CisJCXJjQ2xvc2VCb3gucmlnaHQgLT0gMS4wZjsKKwkJcmNDbG9zZUJveC50b3AgLT0gMS4wZjsKKwkJcmNDbG9zZUJveC5sZWZ0ID0gcmNDbG9zZUJveC5yaWdodCAtIDE0LjBmOworCQlyY0Nsb3NlQm94LmJvdHRvbSA9IHJjQ2xvc2VCb3gudG9wIC0gMTQuMGY7CisJCXJjQ2xvc2VCb3guTm9ybWFsaXplKCk7CisJCW1fcENsb3NlQm94LT5Nb3ZlKHJjQ2xvc2VCb3gsIFRSVUUsIEZBTFNFKTsKKwkJbV9wQ2xvc2VCb3gtPlNldFZpc2libGUoQ1BXTF9VdGlsczo6Q29udGFpbnNSZWN0KHJjQ2xpZW50LCByY0Nsb3NlQm94KSk7CisKKwkJQ1BERl9SZWN0IHJjRGF0ZSA9IHJjQ2xpZW50OworCQlyY0RhdGUucmlnaHQgPSByY0Nsb3NlQm94LmxlZnQgLSBQT1BVUF9JVEVNX1RFWFRfSU5ERU5UOworCQlyY0RhdGUubGVmdCA9IFBXTF9NQVgocmNEYXRlLnJpZ2h0IC0gbV9wRGF0ZVRpbWUtPkdldENvbnRlbnRSZWN0KCkuV2lkdGgoKSAtIDEuMGYsIHJjSWNvbi5yaWdodCArIDEuMGYpOworCQlyY0RhdGUudG9wID0gcmNDbGllbnQudG9wIC0gMi4wZjsKKwkJcmNEYXRlLmJvdHRvbSA9IHJjRGF0ZS50b3AgLSBtX3BEYXRlVGltZS0+R2V0Q29udGVudFJlY3QoKS5IZWlnaHQoKTsKKwkJcmNEYXRlLk5vcm1hbGl6ZSgpOworCQltX3BEYXRlVGltZS0+TW92ZShyY0RhdGUsIFRSVUUsIEZBTFNFKTsKKwkJbV9wRGF0ZVRpbWUtPlNldFZpc2libGUoQ1BXTF9VdGlsczo6Q29udGFpbnNSZWN0KHJjQ2xpZW50LCByY0RhdGUpKTsKKworCQlDUERGX1JlY3QgcmNTdWJqZWN0ID0gcmNDbGllbnQ7CisJCXJjU3ViamVjdC50b3AgPSByY0NsaWVudC50b3AgLSAyLjBmOworCQlyY1N1YmplY3QubGVmdCA9IHJjSWNvbi5yaWdodCArIFBPUFVQX0lURU1fVEVYVF9JTkRFTlQ7CisJCXJjU3ViamVjdC5yaWdodCA9IFBXTF9NSU4ocmNTdWJqZWN0LmxlZnQgKyBtX3BTdWJqZWN0LT5HZXRDb250ZW50UmVjdCgpLldpZHRoKCkgKyAxLjBmLCByY0RhdGUubGVmdCAtIDEuMGYpOworCQlyY1N1YmplY3QuYm90dG9tID0gcmNTdWJqZWN0LnRvcCAtIG1fcFN1YmplY3QtPkdldENvbnRlbnRSZWN0KCkuSGVpZ2h0KCk7CisJCXJjU3ViamVjdC5Ob3JtYWxpemUoKTsKKwkJbV9wU3ViamVjdC0+TW92ZShyY1N1YmplY3QsIFRSVUUsIEZBTFNFKTsJCisJCW1fcFN1YmplY3QtPlNldFZpc2libGUoQ1BXTF9VdGlsczo6Q29udGFpbnNSZWN0KHJjQ2xpZW50LCByY1N1YmplY3QpKTsKKworCQlDUERGX1JlY3QgcmNPcHRpb25zID0gcmNDbGllbnQ7CisJCXJjT3B0aW9ucy5sZWZ0ID0gUFdMX01BWChyY09wdGlvbnMucmlnaHQgLSBtX3BPcHRpb25zLT5HZXRDb250ZW50UmVjdCgpLldpZHRoKCksIHJjSWNvbi5yaWdodCArIDEuMGYpOworCQlyY09wdGlvbnMudG9wID0gcmNTdWJqZWN0LmJvdHRvbSAtIDQuMGY7CisJCXJjT3B0aW9ucy5ib3R0b20gPSByY09wdGlvbnMudG9wIC0gbV9wT3B0aW9ucy0+R2V0Q29udGVudFJlY3QoKS5IZWlnaHQoKTsKKwkJcmNPcHRpb25zLk5vcm1hbGl6ZSgpOworCQltX3BPcHRpb25zLT5Nb3ZlKHJjT3B0aW9ucywgVFJVRSwgRkFMU0UpOworCQltX3BPcHRpb25zLT5TZXRWaXNpYmxlKENQV0xfVXRpbHM6OkNvbnRhaW5zUmVjdChyY0NsaWVudCwgcmNPcHRpb25zKSk7CisKKwkJQ1BERl9SZWN0IHJjQXV0aG9yID0gcmNDbGllbnQ7CisJCXJjQXV0aG9yLnRvcCA9IHJjU3ViamVjdC5ib3R0b20gLSA0LjBmOworCQlyY0F1dGhvci5sZWZ0ID0gcmNTdWJqZWN0LmxlZnQ7CisJCXJjQXV0aG9yLnJpZ2h0ID0gUFdMX01JTihyY1N1YmplY3QubGVmdCArIG1fcEF1dGhvci0+R2V0Q29udGVudFJlY3QoKS5XaWR0aCgpICsgMS4wZiwgcmNPcHRpb25zLmxlZnQgLSAxLjBmKTsKKwkJcmNBdXRob3IuYm90dG9tID0gcmNBdXRob3IudG9wIC0gbV9wQXV0aG9yLT5HZXRDb250ZW50UmVjdCgpLkhlaWdodCgpOworCQlyY0F1dGhvci5Ob3JtYWxpemUoKTsKKwkJbV9wQXV0aG9yLT5Nb3ZlKHJjQXV0aG9yLCBUUlVFLCBGQUxTRSk7CisJCW1fcEF1dGhvci0+U2V0VmlzaWJsZShDUFdMX1V0aWxzOjpDb250YWluc1JlY3QocmNDbGllbnQsIHJjQXV0aG9yKSk7CisKKwkJQ1BERl9SZWN0IHJjTEJCb3ggPSByY0NsaWVudDsKKwkJcmNMQkJveC50b3AgPSByY0xCQm94LmJvdHRvbSArIDcuMGY7CisJCXJjTEJCb3gucmlnaHQgPSByY0xCQm94LmxlZnQgKyA3LjBmOworCQlyY0xCQm94Lk5vcm1hbGl6ZSgpOworCQltX3BMQkJveC0+TW92ZShyY0xCQm94LCBUUlVFLCBGQUxTRSk7CisJCW1fcExCQm94LT5TZXRWaXNpYmxlKENQV0xfVXRpbHM6OkNvbnRhaW5zUmVjdChyY0NsaWVudCwgcmNMQkJveCkpOworCisJCUNQREZfUmVjdCByY1JCQm94ID0gcmNDbGllbnQ7CisJCXJjUkJCb3gudG9wID0gcmNSQkJveC5ib3R0b20gKyA3LjBmOworCQlyY1JCQm94LmxlZnQgPSByY1JCQm94LnJpZ2h0IC0gNy4wZjsKKwkJcmNSQkJveC5Ob3JtYWxpemUoKTsKKwkJbV9wUkJCb3gtPk1vdmUocmNSQkJveCwgVFJVRSwgRkFMU0UpOworCQltX3BSQkJveC0+U2V0VmlzaWJsZShDUFdMX1V0aWxzOjpDb250YWluc1JlY3QocmNDbGllbnQsIHJjUkJCb3gpKTsKKworCQlDUERGX1JlY3QgcmNDb250ZW50cyA9IHJjQ2xpZW50OworCQlyY0NvbnRlbnRzLnRvcCA9IHJjQXV0aG9yLmJvdHRvbSAtIFBPUFVQX0lURU1fSEVBRF9CT1RUT007CisJCXJjQ29udGVudHMubGVmdCArPSAzLjBmOworCQlyY0NvbnRlbnRzLnJpZ2h0IC09IDMuMGY7CisJCWlmIChtX3BDb250ZW50c0Jhci0+SXNWaXNpYmxlKCkpCisJCQlyY0NvbnRlbnRzLnJpZ2h0IC09IFBXTF9TQ1JPTExCQVJfV0lEVEg7CisJCXJjQ29udGVudHMuYm90dG9tICs9IDE0LjBmOworCQlyY0NvbnRlbnRzLk5vcm1hbGl6ZSgpOworCQltX3BDb250ZW50cy0+TW92ZShyY0NvbnRlbnRzLCBGQUxTRSwgRkFMU0UpOworCQltX3BDb250ZW50cy0+U2V0VmlzaWJsZShDUFdMX1V0aWxzOjpDb250YWluc1JlY3QocmNDbGllbnQsIHJjQ29udGVudHMpKTsKKworCQlDUERGX1JlY3QgcmNDb250ZW50c0JhciA9IHJjQ29udGVudHM7CisJCXJjQ29udGVudHNCYXIucmlnaHQgPSByY0NsaWVudC5yaWdodCAtIDMuMGY7CisJCXJjQ29udGVudHNCYXIubGVmdCA9IHJjQ29udGVudHNCYXIucmlnaHQgLSBQV0xfU0NST0xMQkFSX1dJRFRIOworCQlyY0NvbnRlbnRzQmFyLk5vcm1hbGl6ZSgpOworCQltX3BDb250ZW50c0Jhci0+TW92ZShyY0NvbnRlbnRzQmFyLCBUUlVFLCBGQUxTRSk7CisJCQorCQltX3JjQ2FwdGlvbiA9IHJjQ2xpZW50OworCQltX3JjQ2FwdGlvbi5ib3R0b20gPSByY0NvbnRlbnRzLnRvcDsKKwl9CisKKwltX2JSZXNpemluZyA9IEZBTFNFOworfQorCisvLzAtbm9ybWFsIC8gMS1jYXB0aW9uIC8gMi1sZWZ0Ym90dG9tIGNvcm5lciAvIDMtcmlnaHRib3R0b20gY29ybmVyIC8gNC1jbG9zZSAvIDUtb3B0aW9ucyAKK0ZYX0lOVDMyIENQV0xfTm90ZTo6Tm90ZUhpdFRlc3QoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpIGNvbnN0Cit7CisJQVNTRVJUKG1fcFN1YmplY3QgIT0gTlVMTCk7CisJQVNTRVJUKG1fcERhdGVUaW1lICE9IE5VTEwpOworCUFTU0VSVChtX3BDb250ZW50cyAhPSBOVUxMKTsKKwlBU1NFUlQobV9wQXV0aG9yICE9IE5VTEwpOworCUFTU0VSVChtX3BJY29uICE9IE5VTEwpOworCUFTU0VSVChtX3BDb250ZW50c0JhciAhPSBOVUxMKTsKKworCUFTU0VSVChtX3BDbG9zZUJveCAhPSBOVUxMKTsKKwlBU1NFUlQobV9wTEJCb3ggIT0gTlVMTCk7CisJQVNTRVJUKG1fcFJCQm94ICE9IE5VTEwpOworCUFTU0VSVChtX3BPcHRpb25zICE9IE5VTEwpOworCisJR2V0Q2xpZW50UmVjdCgpOworCisJaWYgKG1fcFN1YmplY3QtPlduZEhpdFRlc3QobV9wU3ViamVjdC0+UGFyZW50VG9DaGlsZChwb2ludCkpKSByZXR1cm4gMTsKKwlpZiAobV9wRGF0ZVRpbWUtPlduZEhpdFRlc3QobV9wRGF0ZVRpbWUtPlBhcmVudFRvQ2hpbGQocG9pbnQpKSkgcmV0dXJuIDE7CisJaWYgKG1fcEF1dGhvci0+V25kSGl0VGVzdChtX3BBdXRob3ItPlBhcmVudFRvQ2hpbGQocG9pbnQpKSkgcmV0dXJuIDE7CisJaWYgKG1fcEljb24tPlduZEhpdFRlc3QobV9wSWNvbi0+UGFyZW50VG9DaGlsZChwb2ludCkpKSByZXR1cm4gMTsKKworCWlmIChtX3BDb250ZW50cy0+V25kSGl0VGVzdChtX3BDb250ZW50cy0+UGFyZW50VG9DaGlsZChwb2ludCkpKSByZXR1cm4gMDsKKwlpZiAobV9wQ29udGVudHNCYXItPlduZEhpdFRlc3QobV9wQ29udGVudHNCYXItPlBhcmVudFRvQ2hpbGQocG9pbnQpKSkgcmV0dXJuIDA7CisKKwlpZiAobV9wQ2xvc2VCb3gtPlduZEhpdFRlc3QobV9wQ2xvc2VCb3gtPlBhcmVudFRvQ2hpbGQocG9pbnQpKSkgcmV0dXJuIDQ7CisJaWYgKG1fcExCQm94LT5XbmRIaXRUZXN0KG1fcExCQm94LT5QYXJlbnRUb0NoaWxkKHBvaW50KSkpIHJldHVybiAyOworCWlmIChtX3BSQkJveC0+V25kSGl0VGVzdChtX3BSQkJveC0+UGFyZW50VG9DaGlsZChwb2ludCkpKSByZXR1cm4gMzsKKwlpZiAobV9wT3B0aW9ucy0+V25kSGl0VGVzdChtX3BPcHRpb25zLT5QYXJlbnRUb0NoaWxkKHBvaW50KSkpIHJldHVybiA1OworCisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgQ1BXTF9Ob3RlOjpDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCkKK3sKKwlDUFdMX05vdGVJdGVtOjpDcmVhdGVDaGlsZFduZChjcCk7CisKKwlDUFdMX0NvbG9yIHNUZXh0Q29sb3I7CisKKwlpZiAoQ1BXTF9VdGlsczo6SXNCbGFja09yV2hpdGUodGhpcy0+R2V0QmFja2dyb3VuZENvbG9yKCkpKQorCQlzVGV4dENvbG9yID0gUFdMX0RFRkFVTFRfV0hJVEVDT0xPUjsKKwllbHNlCisJCXNUZXh0Q29sb3IgPSBQV0xfREVGQVVMVF9CTEFDS0NPTE9SOworCisJbV9wQXV0aG9yID0gbmV3IENQV0xfTGFiZWw7CisJUFdMX0NSRUFURVBBUkFNIGFjcCA9IGNwOworCWFjcC5wUGFyZW50V25kID0gdGhpczsKKwlhY3AuZHdGbGFncyA9IFBXU19WSVNJQkxFIHwgUFdTX0NISUxEIHwgUEVTX0xFRlQgfCBQRVNfVE9QOworCWFjcC5zVGV4dENvbG9yID0gc1RleHRDb2xvcjsKKwltX3BBdXRob3ItPkNyZWF0ZShhY3ApOwkgCisKKwltX3BDbG9zZUJveCA9IG5ldyBDUFdMX05vdGVfQ2xvc2VCb3g7CisJUFdMX0NSRUFURVBBUkFNIGNjcCA9IGNwOworCWNjcC5wUGFyZW50V25kID0gdGhpczsKKwljY3AuZHdCb3JkZXJXaWR0aCA9IDI7CisJY2NwLm5Cb3JkZXJTdHlsZSA9IFBCU19CRVZFTEVEOworCWNjcC5kd0ZsYWdzID0gUFdTX1ZJU0lCTEUgfCBQV1NfQ0hJTEQgfCBQV1NfQk9SREVSOworCWNjcC5zVGV4dENvbG9yID0gc1RleHRDb2xvcjsKKwltX3BDbG9zZUJveC0+Q3JlYXRlKGNjcCk7CisKKwltX3BJY29uID0gbmV3IENQV0xfTm90ZV9JY29uOworCVBXTF9DUkVBVEVQQVJBTSBpY3AgPSBjcDsKKwlpY3AucFBhcmVudFduZCA9IHRoaXM7CisJaWNwLmR3RmxhZ3MgPSBQV1NfVklTSUJMRSB8IFBXU19DSElMRDsKKwltX3BJY29uLT5DcmVhdGUoaWNwKTsKKworCW1fcE9wdGlvbnMgPSBuZXcgQ1BXTF9Ob3RlX09wdGlvbnM7CisJUFdMX0NSRUFURVBBUkFNIG9jcCA9IGNwOworCW9jcC5wUGFyZW50V25kID0gdGhpczsKKwlvY3AuZHdGbGFncyA9IFBXU19DSElMRCB8IFBXU19WSVNJQkxFOworCW9jcC5zVGV4dENvbG9yID0gc1RleHRDb2xvcjsKKwltX3BPcHRpb25zLT5DcmVhdGUob2NwKTsKKworCW1fcExCQm94ID0gbmV3IENQV0xfTm90ZV9MQkJveDsKKwlQV0xfQ1JFQVRFUEFSQU0gbGNwID0gY3A7CisJbGNwLnBQYXJlbnRXbmQgPSB0aGlzOworCWxjcC5kd0ZsYWdzID0gUFdTX1ZJU0lCTEUgfCBQV1NfQ0hJTEQ7CisJbGNwLmVDdXJzb3JUeXBlID0gRlhDVF9ORVNXOworCWxjcC5zVGV4dENvbG9yID0gc1RleHRDb2xvcjsKKwltX3BMQkJveC0+Q3JlYXRlKGxjcCk7CisKKwltX3BSQkJveCA9IG5ldyBDUFdMX05vdGVfUkJCb3g7CisJUFdMX0NSRUFURVBBUkFNIHJjcCA9IGNwOworCXJjcC5wUGFyZW50V25kID0gdGhpczsKKwlyY3AuZHdGbGFncyA9IFBXU19WSVNJQkxFIHwgUFdTX0NISUxEOworCXJjcC5lQ3Vyc29yVHlwZSA9IEZYQ1RfTldTRTsKKwlyY3Auc1RleHRDb2xvciA9IHNUZXh0Q29sb3I7CisJbV9wUkJCb3gtPkNyZWF0ZShyY3ApOworCisJbV9wQ29udGVudHNCYXIgPSBuZXcgQ1BXTF9TY3JvbGxCYXIoU0JUX1ZTQ1JPTEwpOworCVBXTF9DUkVBVEVQQVJBTSBzY3AgPSBjcDsKKwlzY3AucFBhcmVudFduZCA9IHRoaXM7CisJc2NwLnNCYWNrZ3JvdW5kQ29sb3IgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9SR0IsIDI0MC8yNTUuMGYsIDI0MC8yNTUuMGYsIDI0MC8yNTUuMGYpOworCXNjcC5kd0ZsYWdzID0gUFdTX0NISUxEIHwgUFdTX1ZJU0lCTEUgfCBQV1NfQkFDS0dST1VORDsKKwltX3BDb250ZW50c0Jhci0+Q3JlYXRlKHNjcCk7CisJbV9wQ29udGVudHNCYXItPlNldE5vdGlmeUZvcmV2ZXIoVFJVRSk7Cit9CisKK3ZvaWQgQ1BXTF9Ob3RlOjpTZXRTdWJqZWN0TmFtZShjb25zdCBDRlhfV2lkZVN0cmluZyYgc05hbWUpCit7CisJQ1BXTF9Ob3RlSXRlbTo6U2V0U3ViamVjdE5hbWUoc05hbWUpOworCVJlUG9zQ2hpbGRXbmQoKTsKK30KKwordm9pZCBDUFdMX05vdGU6OlNldEF1dGhvck5hbWUoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHNOYW1lKQoreworCWlmIChtX3BBdXRob3IpCisJeworCQltX3BBdXRob3ItPlNldFRleHQoc05hbWUpOworCQlSZVBvc0NoaWxkV25kKCk7CisJfQorCisJaWYgKElQV0xfTm90ZU5vdGlmeSogcE5vdGlmeSA9IEdldE5vdGVOb3RpZnkoKSkKKwl7CisJCXBOb3RpZnktPk9uU2V0QXV0aG9yTmFtZSh0aGlzKTsKKwl9CQorfQorCitDRlhfV2lkZVN0cmluZyBDUFdMX05vdGU6OkdldEF1dGhvck5hbWUoKSBjb25zdAoreworCWlmIChtX3BBdXRob3IpCisJCXJldHVybiBtX3BBdXRob3ItPkdldFRleHQoKTsKKworCXJldHVybiBMIiI7Cit9CisKK0ZYX0JPT0wgQ1BXTF9Ob3RlOjpPbk1vdXNlV2hlZWwoc2hvcnQgekRlbHRhLCBjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKQoreworCUNQREZfUG9pbnQgcHRTY3JvbGwgPSBtX3BDb250ZW50cy0+R2V0U2Nyb2xsUG9zKCk7CisJQ1BERl9SZWN0IHJjU2Nyb2xsID0gbV9wQ29udGVudHMtPkdldFNjcm9sbEFyZWEoKTsKKwlDUERGX1JlY3QgcmNDb250ZW50cyA9IG1fcENvbnRlbnRzLT5HZXRDbGllbnRSZWN0KCk7CisKKwlpZiAocmNTY3JvbGwudG9wIC0gcmNTY3JvbGwuYm90dG9tID4gcmNDb250ZW50cy5IZWlnaHQoKSkKKwl7CisJCUNQREZfUG9pbnQgcHROZXcgPSBwdFNjcm9sbDsKKworCQlpZiAoekRlbHRhID4gMCkKKwkJCXB0TmV3LnkgKz0gMzA7CisJCWVsc2UKKwkJCXB0TmV3LnkgLT0gMzA7CisKKwkJaWYgKHB0TmV3LnkgPiByY1Njcm9sbC50b3ApCisJCQlwdE5ldy55ID0gcmNTY3JvbGwudG9wOworCQlpZiAocHROZXcueSA8IHJjU2Nyb2xsLmJvdHRvbSArIHJjQ29udGVudHMuSGVpZ2h0KCkpCisJCQlwdE5ldy55ID0gcmNTY3JvbGwuYm90dG9tICsgcmNDb250ZW50cy5IZWlnaHQoKTsKKwkJaWYgKHB0TmV3LnkgPCByY1Njcm9sbC5ib3R0b20pCisJCQlwdE5ldy55ID0gcmNTY3JvbGwuYm90dG9tOworCisJCWlmIChwdE5ldy55ICE9IHB0U2Nyb2xsLnkpCisJCXsKKwkJCW1fcENvbnRlbnRzLT5Pbk5vdGlmeSh0aGlzLCBQTk1fTk9URVJFU0VULCAwLCAwKTsKKwkJCW1fcENvbnRlbnRzLT5Pbk5vdGlmeSh0aGlzLCBQTk1fU0NST0xMV0lORE9XLCBTQlRfVlNDUk9MTCwgKEZYX0lOVFBUUikmcHROZXcueSk7CQkJCisJCQltX3BDb250ZW50c0Jhci0+T25Ob3RpZnkodGhpcywgUE5NX1NFVFNDUk9MTFBPUywgU0JUX1ZTQ1JPTEwsIChGWF9JTlRQVFIpJnB0TmV3LnkpOworCisJCQlyZXR1cm4gVFJVRTsKKwkJfQorCX0KKworCXJldHVybiBGQUxTRTsKK30KKwordm9pZCBDUFdMX05vdGU6Ok9uTm90aWZ5KENQV0xfV25kKiBwV25kLCBGWF9EV09SRCBtc2csIEZYX0lOVFBUUiB3UGFyYW0sIEZYX0lOVFBUUiBsUGFyYW0pCit7CisJc3dpdGNoIChtc2cpCisJeworCWNhc2UgUE5NX05PVEVFRElUQ0hBTkdFRDoKKwkJeworCQkJQ1BERl9SZWN0IHJjU2Nyb2xsID0gbV9wQ29udGVudHMtPkdldFNjcm9sbEFyZWEoKTsKKwkJCQorCisJCQlQV0xfU0NST0xMX0lORk8gc0luZm87CisJCQlzSW5mby5mQ29udGVudE1pbiA9IHJjU2Nyb2xsLmJvdHRvbTsKKwkJCXNJbmZvLmZDb250ZW50TWF4ID0gcmNTY3JvbGwudG9wOworCQkJc0luZm8uZlBsYXRlV2lkdGggPSBtX3BDb250ZW50cy0+R2V0Q2xpZW50UmVjdCgpLkhlaWdodCgpOworCQkJc0luZm8uZlNtYWxsU3RlcCA9IDEzLjBmOworCQkJc0luZm8uZkJpZ1N0ZXAgPSBzSW5mby5mUGxhdGVXaWR0aDsKKworCQkJaWYgKEZYU1lTX21lbWNtcCgmbV9PbGRTY3JvbGxJbmZvLCAmc0luZm8sIHNpemVvZihQV0xfU0NST0xMX0lORk8pKSAhPSAwKQorCQkJeworCQkJCUZYX0JPT0wgYlNjcm9sbENoYW5nZWQgPSBGQUxTRTsKKworCQkJCWlmIChsUGFyYW0gPCAzKSAvL7fA1rnLwNGtu7cgbWFudGlzOjE1NzU5CisJCQkJeworCQkJCQliU2Nyb2xsQ2hhbmdlZCA9IFJlc2V0U2Nyb2xsQmFyKCk7CisJCQkJCWlmIChiU2Nyb2xsQ2hhbmdlZCkKKwkJCQkJeworCQkJCQkJbFBhcmFtKys7CisJCQkJCQltX3BDb250ZW50cy0+T25Ob3RpZnkodGhpcywgUE5NX05PVEVSRVNFVCwgMCwgMCk7CisJCQkJCQl0aGlzLT5Pbk5vdGlmeSh0aGlzLCBQTk1fTk9URUVESVRDSEFOR0VELCAwLCBsUGFyYW0pOworCQkJCQl9CisJCQkJfQorCQkJCQorCQkJCWlmICghYlNjcm9sbENoYW5nZWQpCisJCQkJeworCQkJCQlpZiAobV9wQ29udGVudHNCYXItPklzVmlzaWJsZSgpKQorCQkJCQl7CisJCQkJCQltX3BDb250ZW50c0Jhci0+T25Ob3RpZnkocFduZCwgUE5NX1NFVFNDUk9MTElORk8sIFNCVF9WU0NST0xMLCAoRlhfSU5UUFRSKSZzSW5mbyk7CisJCQkJCQltX09sZFNjcm9sbEluZm8gPSBzSW5mbzsKKworCQkJCQkJQ1BERl9Qb2ludCBwdFNjcm9sbCA9IG1fcENvbnRlbnRzLT5HZXRTY3JvbGxQb3MoKTsKKwkJCQkJCUNQREZfUG9pbnQgcHRPbGQgPSBwdFNjcm9sbDsKKworCQkJCQkJaWYgKHB0U2Nyb2xsLnkgPiBzSW5mby5mQ29udGVudE1heCkKKwkJCQkJCQlwdFNjcm9sbC55ID0gc0luZm8uZkNvbnRlbnRNYXg7CisJCQkJCQlpZiAocHRTY3JvbGwueSA8IHNJbmZvLmZDb250ZW50TWluICsgc0luZm8uZlBsYXRlV2lkdGgpCisJCQkJCQkJcHRTY3JvbGwueSA9IHNJbmZvLmZDb250ZW50TWluICsgc0luZm8uZlBsYXRlV2lkdGg7CisJCQkJCQlpZiAocHRTY3JvbGwueSA8IHNJbmZvLmZDb250ZW50TWluKQorCQkJCQkJCXB0U2Nyb2xsLnkgPSBzSW5mby5mQ29udGVudE1pbjsKKworCQkJCQkJaWYgKHB0T2xkLnkgIT0gcHRTY3JvbGwueSkKKwkJCQkJCXsKKwkJCQkJCQltX3BDb250ZW50c0Jhci0+T25Ob3RpZnkodGhpcywgUE5NX1NFVFNDUk9MTFBPUywgU0JUX1ZTQ1JPTEwsIChGWF9JTlRQVFIpJnB0U2Nyb2xsLnkpOworCQkJCQkJCW1fcENvbnRlbnRzQmFyLT5JbnZhbGlkYXRlUmVjdChOVUxMKTsKKwkJCQkJCQltX3BDb250ZW50cy0+T25Ob3RpZnkodGhpcywgUE5NX1NDUk9MTFdJTkRPVywgU0JUX1ZTQ1JPTEwsIChGWF9JTlRQVFIpJnB0U2Nyb2xsLnkpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwkJbV9wQ29udGVudHMtPkludmFsaWRhdGVSZWN0KE5VTEwpOworCisJCXJldHVybjsKKwljYXNlIFBOTV9TQ1JPTExXSU5ET1c6CisJCWlmIChtX3BDb250ZW50cykKKwkJCW1fcENvbnRlbnRzLT5Pbk5vdGlmeShwV25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKKwkJcmV0dXJuOworCWNhc2UgUE5NX1NFVFNDUk9MTFBPUzoKKwkJaWYgKG1fcENvbnRlbnRzQmFyKQorCQkJbV9wQ29udGVudHNCYXItPk9uTm90aWZ5KHBXbmQsUE5NX1NFVFNDUk9MTFBPUyx3UGFyYW0sbFBhcmFtKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChtc2cgPT0gUE5NX1NFVENBUkVUSU5GTyAmJiBJc1ZhbGlkKCkpCisJeworCQlpZiAoUFdMX0NBUkVUX0lORk8gKiBwSW5mbyA9IChQV0xfQ0FSRVRfSU5GTyopd1BhcmFtKQorCQl7CisJCQlpZiAobV9wQ29udGVudHMpCisJCQl7CisJCQkJQ1BERl9SZWN0IHJjQ2xpZW50ID0gbV9wQ29udGVudHMtPkdldENsaWVudFJlY3QoKTsKKwkJCQlpZiAocEluZm8tPnB0SGVhZC55ID4gcmNDbGllbnQudG9wKQorCQkJCXsKKwkJCQkJQ1BERl9Qb2ludCBwdCA9IG1fcENvbnRlbnRzLT5PdXRUb0luKHBJbmZvLT5wdEhlYWQpOworCQkJCQltX3BDb250ZW50cy0+T25Ob3RpZnkodGhpcywgUE5NX1NDUk9MTFdJTkRPVywgU0JUX1ZTQ1JPTEwsIChGWF9JTlRQVFIpJnB0LnkpOworCisJCQkJCUNQREZfUG9pbnQgcHRTY3JvbGwgPSBtX3BDb250ZW50cy0+R2V0U2Nyb2xsUG9zKCk7CisJCQkJCW1fcENvbnRlbnRzQmFyLT5Pbk5vdGlmeSh0aGlzLCBQTk1fU0VUU0NST0xMUE9TLCBTQlRfVlNDUk9MTCwgKEZYX0lOVFBUUikmcHRTY3JvbGwueSk7CisKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCQkKKwkJCQlpZiAocEluZm8tPnB0Rm9vdC55IDwgcmNDbGllbnQuYm90dG9tKQorCQkJCXsKKwkJCQkJQ1BERl9Qb2ludCBwdCA9IG1fcENvbnRlbnRzLT5PdXRUb0luKHBJbmZvLT5wdEZvb3QpOworCQkJCQlwdC55ICs9IHJjQ2xpZW50LkhlaWdodCgpOworCQkJCQltX3BDb250ZW50cy0+T25Ob3RpZnkodGhpcywgUE5NX1NDUk9MTFdJTkRPVywgU0JUX1ZTQ1JPTEwsIChGWF9JTlRQVFIpJnB0LnkpOworCisJCQkJCUNQREZfUG9pbnQgcHRTY3JvbGwgPSBtX3BDb250ZW50cy0+R2V0U2Nyb2xsUG9zKCk7CisJCQkJCW1fcENvbnRlbnRzQmFyLT5Pbk5vdGlmeSh0aGlzLCBQTk1fU0VUU0NST0xMUE9TLCBTQlRfVlNDUk9MTCwgKEZYX0lOVFBUUikmcHRTY3JvbGwueSk7CisKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCUNQV0xfTm90ZUl0ZW06Ok9uTm90aWZ5KHBXbmQsIG1zZywgd1BhcmFtLCBsUGFyYW0pOworfQorCit2b2lkIENQV0xfTm90ZTo6U2V0QmtDb2xvcihjb25zdCBDUFdMX0NvbG9yJiBjb2xvcikKK3sKKwlDUFdMX05vdGVJdGVtOjpTZXRCa0NvbG9yKGNvbG9yKTsKKworCUNQV0xfQ29sb3Igc0JLID0gY29sb3I7CisJQ1BXTF9Db2xvciBzVGV4dENvbG9yOworCWlmIChDUFdMX1V0aWxzOjpJc0JsYWNrT3JXaGl0ZShzQkspKQorCQlzVGV4dENvbG9yID0gUFdMX0RFRkFVTFRfV0hJVEVDT0xPUjsKKwllbHNlCisJCXNUZXh0Q29sb3IgPSBQV0xfREVGQVVMVF9CTEFDS0NPTE9SOworCisJaWYgKG1fcENsb3NlQm94KQorCQltX3BDbG9zZUJveC0+U2V0VGV4dENvbG9yKHNUZXh0Q29sb3IpOworCWlmIChtX3BBdXRob3IpCisJCW1fcEF1dGhvci0+U2V0VGV4dENvbG9yKHNUZXh0Q29sb3IpOworCWlmIChtX3BPcHRpb25zKQorCQltX3BPcHRpb25zLT5TZXRUZXh0Q29sb3Ioc1RleHRDb2xvcik7CisJaWYgKG1fcExCQm94KQorCQltX3BMQkJveC0+U2V0VGV4dENvbG9yKHNUZXh0Q29sb3IpOworCWlmIChtX3BSQkJveCkKKwkJbV9wUkJCb3gtPlNldFRleHRDb2xvcihzVGV4dENvbG9yKTsKK30KKworRlhfQk9PTAlDUFdMX05vdGU6Ok9uTEJ1dHRvbkRvd24oY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKQoreworCWlmIChtX3BPcHRpb25zLT5XbmRIaXRUZXN0KG1fcE9wdGlvbnMtPlBhcmVudFRvQ2hpbGQocG9pbnQpKSkKKwl7CisJCWlmIChJUFdMX05vdGVOb3RpZnkqIHBOb3RpZnkgPSB0aGlzLT5HZXROb3RlTm90aWZ5KCkpCisJCXsKKwkJCUZYX0lOVDMyIHgsIHk7CisJCQlQV0x0b1duZChwb2ludCwgeCwgeSk7CisJCQlpZiAoSUZYX1N5c3RlbUhhbmRsZXIqIHBTSCA9IEdldFN5c3RlbUhhbmRsZXIoKSkKKwkJCQlwU0gtPkNsaWVudFRvU2NyZWVuKEdldEF0dGFjaGVkSFduZCgpLCB4LCB5KTsKKwkJCXRoaXMtPktpbGxGb2N1cygpOworCQkJcE5vdGlmeS0+T25Qb3B1cE1lbnUoeCwgeSk7CisKKwkJCXJldHVybiBUUlVFOworCQl9CisJfQorCisJcmV0dXJuIENQV0xfV25kOjpPbkxCdXR0b25Eb3duKHBvaW50LG5GbGFnKTsKK30KKworRlhfQk9PTAlDUFdMX05vdGU6Ok9uUkJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpCit7CisJcmV0dXJuIENQV0xfV25kOjpPblJCdXR0b25VcChwb2ludCxuRmxhZyk7Cit9CisKK2NvbnN0IENQV0xfTm90ZSogQ1BXTF9Ob3RlOjpHZXROb3RlKCkgY29uc3QKK3sKKwlyZXR1cm4gdGhpczsKK30KKworSVBXTF9Ob3RlTm90aWZ5KiBDUFdMX05vdGU6OkdldE5vdGVOb3RpZnkoKSBjb25zdAoreworCWlmIChtX2JFbmFsYmxlTm90aWZ5KQorCQlyZXR1cm4gbV9wTm90ZU5vdGlmeTsKKworCXJldHVybiBOVUxMOworfQorCit2b2lkIENQV0xfTm90ZTo6U2V0SWNvblR5cGUoRlhfSU5UMzIgblR5cGUpCit7CisJaWYgKG1fcEljb24pCisJCW1fcEljb24tPlNldEljb25UeXBlKG5UeXBlKTsKK30KKwordm9pZCBDUFdMX05vdGU6OkVuYWJsZU1vZGlmeShGWF9CT09MIGJFbmFibGVkKQoreworCW1fcENvbnRlbnRzLT5FbmFibGVNb2RpZnkoYkVuYWJsZWQpOworfQorCit2b2lkIENQV0xfTm90ZTo6RW5hYmxlUmVhZChGWF9CT09MIGJFbmFibGVkKQoreworCW1fcENvbnRlbnRzLT5FbmFibGVSZWFkKGJFbmFibGVkKTsKK30KKworQ0ZYX1dpZGVTdHJpbmcgQ1BXTF9Ob3RlOjpHZXRSZXBseVN0cmluZygpIGNvbnN0Cit7CisJcmV0dXJuIG1fc1JlcGx5U3RyaW5nOworfQorCit2b2lkIENQV0xfTm90ZTo6U2V0UmVwbHlTdHJpbmcoY29uc3QgQ0ZYX1dpZGVTdHJpbmcmIHN0cmluZykKK3sKKwltX3NSZXBseVN0cmluZyA9IHN0cmluZzsKK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9TY3JvbGxCYXIuY3BwIGIvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9TY3JvbGxCYXIuY3BwCmluZGV4IGQ1MWRlNGQuLjc3MmUxODQgMTAwNjQ0Ci0tLSBhL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfU2Nyb2xsQmFyLmNwcAorKysgYi9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX1Njcm9sbEJhci5jcHAKQEAgLTEsMTM1MyArMSwxMzUzIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUERGV2luZG93LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9XbmQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1Njcm9sbEJhci5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfVXRpbHMuaCINCi0NCi0jZGVmaW5lIElzRmxvYXRaZXJvKGYpCQkJCQkJKChmKSA8IDAuMDAwMSAmJiAoZikgPiAtMC4wMDAxKQ0KLSNkZWZpbmUgSXNGbG9hdEJpZ2dlcihmYSxmYikJCQkJKChmYSkgPiAoZmIpICYmICFJc0Zsb2F0WmVybygoZmEpIC0gKGZiKSkpDQotI2RlZmluZSBJc0Zsb2F0U21hbGxlcihmYSxmYikJCQkJKChmYSkgPCAoZmIpICYmICFJc0Zsb2F0WmVybygoZmEpIC0gKGZiKSkpDQotI2RlZmluZSBJc0Zsb2F0RXF1YWwoZmEsZmIpCQkJCQlJc0Zsb2F0WmVybygoZmEpLShmYikpDQotDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQV0xfRkxPQVRSQU5HRSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotUFdMX0ZMT0FUUkFOR0U6OlBXTF9GTE9BVFJBTkdFKCkNCi17DQotCURlZmF1bHQoKTsNCi19DQotDQotUFdMX0ZMT0FUUkFOR0U6OlBXTF9GTE9BVFJBTkdFKEZYX0ZMT0FUIG1pbixGWF9GTE9BVCBtYXgpDQotew0KLQlTZXQobWluLG1heCk7DQotfQ0KLQ0KLXZvaWQgUFdMX0ZMT0FUUkFOR0U6OkRlZmF1bHQoKQ0KLXsNCi0JZk1pbiA9IDA7DQotCWZNYXggPSAwOw0KLX0NCi0NCi12b2lkIFBXTF9GTE9BVFJBTkdFOjpTZXQoRlhfRkxPQVQgbWluLEZYX0ZMT0FUIG1heCkNCi17DQotCWlmIChtaW4gPiBtYXgpDQotCXsNCi0JCWZNaW4gPSBtYXg7DQotCQlmTWF4ID0gbWluOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJZk1pbiA9IG1pbjsNCi0JCWZNYXggPSBtYXg7DQotCX0NCi19DQotDQotRlhfQk9PTAlQV0xfRkxPQVRSQU5HRTo6SW4oRlhfRkxPQVQgeCkgY29uc3QNCi17DQotCXJldHVybiAoSXNGbG9hdEJpZ2dlcih4LGZNaW4pIHx8IElzRmxvYXRFcXVhbCh4LCBmTWluKSkgJiYgDQotCQkoSXNGbG9hdFNtYWxsZXIoeCwgZk1heCkgfHwgSXNGbG9hdEVxdWFsKHgsIGZNYXgpKTsNCi19DQotDQotRlhfRkxPQVQgUFdMX0ZMT0FUUkFOR0U6OkdldFdpZHRoKCkgY29uc3QNCi17DQotCXJldHVybiBmTWF4IC0gZk1pbjsNCi19DQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQV0xfU0NST0xMX1BSSVZBVEVEQVRBIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1QV0xfU0NST0xMX1BSSVZBVEVEQVRBOjpQV0xfU0NST0xMX1BSSVZBVEVEQVRBKCkNCi17DQotCURlZmF1bHQoKTsNCi19DQotDQotdm9pZCBQV0xfU0NST0xMX1BSSVZBVEVEQVRBOjpEZWZhdWx0KCkNCi17DQotCVNjcm9sbFJhbmdlLkRlZmF1bHQoKTsNCi0JZlNjcm9sbFBvcyA9IFNjcm9sbFJhbmdlLmZNaW47DQotCWZDbGllbnRXaWR0aCA9IDA7DQotCWZCaWdTdGVwID0gMTA7DQotCWZTbWFsbFN0ZXAgPSAxOw0KLX0NCi0NCi12b2lkIFBXTF9TQ1JPTExfUFJJVkFURURBVEE6OlNldFNjcm9sbFJhbmdlKEZYX0ZMT0FUIG1pbixGWF9GTE9BVCBtYXgpDQotew0KLQlTY3JvbGxSYW5nZS5TZXQobWluLG1heCk7DQotDQotCWlmIChJc0Zsb2F0U21hbGxlcihmU2Nyb2xsUG9zLCBTY3JvbGxSYW5nZS5mTWluKSkNCi0JCWZTY3JvbGxQb3MgPSBTY3JvbGxSYW5nZS5mTWluOw0KLQlpZiAoSXNGbG9hdEJpZ2dlcihmU2Nyb2xsUG9zLCBTY3JvbGxSYW5nZS5mTWF4KSkNCi0JCWZTY3JvbGxQb3MgPSBTY3JvbGxSYW5nZS5mTWF4OwkJDQotfQ0KLQ0KLXZvaWQgUFdMX1NDUk9MTF9QUklWQVRFREFUQTo6U2V0Q2xpZW50V2lkdGgoRlhfRkxPQVQgd2lkdGgpDQotew0KLQlmQ2xpZW50V2lkdGggPSB3aWR0aDsNCi19DQotDQotdm9pZCBQV0xfU0NST0xMX1BSSVZBVEVEQVRBOjpTZXRTbWFsbFN0ZXAoRlhfRkxPQVQgc3RlcCkNCi17DQotCWZTbWFsbFN0ZXAgPSBzdGVwOw0KLX0NCi0NCi12b2lkIFBXTF9TQ1JPTExfUFJJVkFURURBVEE6OlNldEJpZ1N0ZXAoRlhfRkxPQVQgc3RlcCkNCi17DQotCWZCaWdTdGVwID0gc3RlcDsNCi19DQotDQotRlhfQk9PTCBQV0xfU0NST0xMX1BSSVZBVEVEQVRBOjpTZXRQb3MoRlhfRkxPQVQgcG9zKQ0KLXsNCi0JaWYgKFNjcm9sbFJhbmdlLkluKHBvcykpDQotCXsNCi0JCWZTY3JvbGxQb3MgPSBwb3M7DQotCQlyZXR1cm4gVFJVRTsNCi0JfQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLXZvaWQgUFdMX1NDUk9MTF9QUklWQVRFREFUQTo6QWRkU21hbGwoKQ0KLXsNCi0JaWYgKCFTZXRQb3MoZlNjcm9sbFBvcyArIGZTbWFsbFN0ZXApKQ0KLQkJU2V0UG9zKFNjcm9sbFJhbmdlLmZNYXgpOw0KLX0NCi0NCi12b2lkIFBXTF9TQ1JPTExfUFJJVkFURURBVEE6OlN1YlNtYWxsKCkNCi17DQotCWlmICghU2V0UG9zKGZTY3JvbGxQb3MgLSBmU21hbGxTdGVwKSkNCi0JCVNldFBvcyhTY3JvbGxSYW5nZS5mTWluKTsNCi19DQotDQotdm9pZCBQV0xfU0NST0xMX1BSSVZBVEVEQVRBOjpBZGRCaWcoKQ0KLXsNCi0JaWYgKCFTZXRQb3MoZlNjcm9sbFBvcyArIGZCaWdTdGVwKSkNCi0JCVNldFBvcyhTY3JvbGxSYW5nZS5mTWF4KTsJCQ0KLX0NCi0NCi12b2lkIFBXTF9TQ1JPTExfUFJJVkFURURBVEE6OlN1YkJpZygpDQotew0KLQlpZiAoIVNldFBvcyhmU2Nyb2xsUG9zIC0gZkJpZ1N0ZXApKQ0KLQkJU2V0UG9zKFNjcm9sbFJhbmdlLmZNaW4pOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfU0JCdXR0b24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUNQV0xfU0JCdXR0b246OkNQV0xfU0JCdXR0b24oUFdMX1NDUk9MTEJBUl9UWVBFIGVTY3JvbGxCYXJUeXBlLFBXTF9TQkJVVFRPTl9UWVBFIGVCdXR0b25UeXBlKQ0KLXsNCi0JbV9lU2Nyb2xsQmFyVHlwZSA9IGVTY3JvbGxCYXJUeXBlOw0KLQltX2VTQkJ1dHRvblR5cGUgPSBlQnV0dG9uVHlwZTsNCi0NCi0JbV9iTW91c2VEb3duID0gRkFMU0U7DQotfQ0KLQ0KLUNQV0xfU0JCdXR0b246On5DUFdMX1NCQnV0dG9uKCkNCi17DQotDQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfU0JCdXR0b246OkdldENsYXNzTmFtZSgpIGNvbnN0DQotew0KLQlyZXR1cm4gIkNQV0xfU0JCdXR0b24iOw0KLX0NCi0NCi12b2lkIENQV0xfU0JCdXR0b246Ok9uQ3JlYXRlKFBXTF9DUkVBVEVQQVJBTSAmIGNwKQ0KLXsNCi0JY3AuZUN1cnNvclR5cGUgPSBGWENUX0FSUk9XOw0KLX0NCi0NCi12b2lkIENQV0xfU0JCdXR0b246OkdldFRoaXNBcHBlYXJhbmNlU3RyZWFtKENGWF9CeXRlVGV4dEJ1ZiAmIHNBcHBTdHJlYW0pDQotew0KLQlDUFdMX1duZDo6R2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oc0FwcFN0cmVhbSk7DQotDQotCWlmICghSXNWaXNpYmxlKCkpIHJldHVybjsNCi0NCi0JQ0ZYX0J5dGVUZXh0QnVmIHNCdXR0b247DQotDQotCUNQREZfUmVjdCByZWN0V25kID0gR2V0V2luZG93UmVjdCgpOw0KLQ0KLQlpZiAocmVjdFduZC5Jc0VtcHR5KCkpIHJldHVybjsNCi0NCi0Jc0FwcFN0cmVhbSA8PCAicVxuIjsNCi0NCi0JQ1BERl9Qb2ludCBwdENlbnRlciA9IHRoaXMtPkdldENlbnRlclBvaW50KCk7DQotDQotCXN3aXRjaCAodGhpcy0+bV9lU2Nyb2xsQmFyVHlwZSkNCi0Jew0KLQkJY2FzZSBTQlRfSFNDUk9MTDoNCi0JCQlzd2l0Y2ggKHRoaXMtPm1fZVNCQnV0dG9uVHlwZSkNCi0JCQl7DQotCQkJCWNhc2UgUFNCVF9NSU46DQotCQkJCQl7DQotCQkJCQkJQ1BERl9Qb2ludCBwdDEocHRDZW50ZXIueCAtIFBXTF9UUklBTkdMRV9IQUxGTEVOICogMC41ZixwdENlbnRlci55KTsNCi0JCQkJCQlDUERGX1BvaW50IHB0MihwdENlbnRlci54ICsgUFdMX1RSSUFOR0xFX0hBTEZMRU4gKiAwLjVmLHB0Q2VudGVyLnkgKyBQV0xfVFJJQU5HTEVfSEFMRkxFTik7DQotCQkJCQkJQ1BERl9Qb2ludCBwdDMocHRDZW50ZXIueCArIFBXTF9UUklBTkdMRV9IQUxGTEVOICogMC41ZixwdENlbnRlci55IC0gUFdMX1RSSUFOR0xFX0hBTEZMRU4pOw0KLQ0KLQkJCQkJCWlmIChyZWN0V25kLnJpZ2h0IC0gcmVjdFduZC5sZWZ0ID4gUFdMX1RSSUFOR0xFX0hBTEZMRU4gKiAyICYmDQotCQkJCQkJCXJlY3RXbmQudG9wIC0gcmVjdFduZC5ib3R0b20gPiBQV0xfVFJJQU5HTEVfSEFMRkxFTiApDQotCQkJCQkJew0KLQkJCQkJCQlzQnV0dG9uIDw8ICIwIGdcbiI7DQotCQkJCQkJCXNCdXR0b24gPDwgcHQxLnggPDwgIiAiIDw8IHB0MS55IDw8ICIgbVxuIjsNCi0JCQkJCQkJc0J1dHRvbiA8PCBwdDIueCA8PCAiICIgPDwgcHQyLnkgPDwgIiBsXG4iOw0KLQkJCQkJCQlzQnV0dG9uIDw8IHB0My54IDw8ICIgIiA8PCBwdDMueSA8PCAiIGxcbiI7DQotCQkJCQkJCXNCdXR0b24gPDwgcHQxLnggPDwgIiAiIDw8IHB0MS55IDw8ICIgbCBmXG4iOw0KLQ0KLQkJCQkJCQlzQXBwU3RyZWFtIDw8IHNCdXR0b247CQ0KLQkJCQkJCX0NCi0JCQkJCX0NCi0JCQkJCWJyZWFrOw0KLQkJCQljYXNlIFBTQlRfTUFYOg0KLQkJCQkJew0KLQkJCQkJCUNQREZfUG9pbnQgcHQxKHB0Q2VudGVyLnggKyBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDAuNWYscHRDZW50ZXIueSk7DQotCQkJCQkJQ1BERl9Qb2ludCBwdDIocHRDZW50ZXIueCAtIFBXTF9UUklBTkdMRV9IQUxGTEVOICogMC41ZixwdENlbnRlci55ICsgUFdMX1RSSUFOR0xFX0hBTEZMRU4pOw0KLQkJCQkJCUNQREZfUG9pbnQgcHQzKHB0Q2VudGVyLnggLSBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDAuNWYscHRDZW50ZXIueSAtIFBXTF9UUklBTkdMRV9IQUxGTEVOKTsNCi0NCi0JCQkJCQlpZiAocmVjdFduZC5yaWdodCAtIHJlY3RXbmQubGVmdCA+IFBXTF9UUklBTkdMRV9IQUxGTEVOICogMiAmJg0KLQkJCQkJCQlyZWN0V25kLnRvcCAtIHJlY3RXbmQuYm90dG9tID4gUFdMX1RSSUFOR0xFX0hBTEZMRU4gKQ0KLQkJCQkJCXsNCi0JCQkJCQkJc0J1dHRvbiA8PCAiMCBnXG4iOw0KLQkJCQkJCQlzQnV0dG9uIDw8IHB0MS54IDw8ICIgIiA8PCBwdDEueSA8PCAiIG1cbiI7DQotCQkJCQkJCXNCdXR0b24gPDwgcHQyLnggPDwgIiAiIDw8IHB0Mi55IDw8ICIgbFxuIjsNCi0JCQkJCQkJc0J1dHRvbiA8PCBwdDMueCA8PCAiICIgPDwgcHQzLnkgPDwgIiBsXG4iOw0KLQkJCQkJCQlzQnV0dG9uIDw8IHB0MS54IDw8ICIgIiA8PCBwdDEueSA8PCAiIGwgZlxuIjsNCi0NCi0JCQkJCQkJc0FwcFN0cmVhbSA8PCBzQnV0dG9uOwkNCi0JCQkJCQl9DQotCQkJCQl9DQotCQkJCQlicmVhazsNCi0JCQkJZGVmYXVsdDoNCi0JCQkJCWJyZWFrOw0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWNhc2UgU0JUX1ZTQ1JPTEw6DQotCQkJc3dpdGNoKHRoaXMtPm1fZVNCQnV0dG9uVHlwZSkNCi0JCQl7DQotCQkJCWNhc2UgUFNCVF9NSU46DQotCQkJCQl7DQotCQkJCQkJQ1BERl9Qb2ludCBwdDEocHRDZW50ZXIueCAtIFBXTF9UUklBTkdMRV9IQUxGTEVOLHB0Q2VudGVyLnkgLSBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDAuNWYpOw0KLQkJCQkJCUNQREZfUG9pbnQgcHQyKHB0Q2VudGVyLnggKyBQV0xfVFJJQU5HTEVfSEFMRkxFTixwdENlbnRlci55IC0gUFdMX1RSSUFOR0xFX0hBTEZMRU4gKiAwLjVmKTsNCi0JCQkJCQlDUERGX1BvaW50IHB0MyhwdENlbnRlci54LHB0Q2VudGVyLnkgKyBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDAuNWYpOw0KLQ0KLQkJCQkJCWlmIChyZWN0V25kLnJpZ2h0IC0gcmVjdFduZC5sZWZ0ID4gUFdMX1RSSUFOR0xFX0hBTEZMRU4gKiAyICYmDQotCQkJCQkJCXJlY3RXbmQudG9wIC0gcmVjdFduZC5ib3R0b20gPiBQV0xfVFJJQU5HTEVfSEFMRkxFTiApDQotCQkJCQkJew0KLQkJCQkJCQlzQnV0dG9uIDw8ICIwIGdcbiI7DQotCQkJCQkJCXNCdXR0b24gPDwgcHQxLnggPDwgIiAiIDw8IHB0MS55IDw8ICIgbVxuIjsNCi0JCQkJCQkJc0J1dHRvbiA8PCBwdDIueCA8PCAiICIgPDwgcHQyLnkgPDwgIiBsXG4iOw0KLQkJCQkJCQlzQnV0dG9uIDw8IHB0My54IDw8ICIgIiA8PCBwdDMueSA8PCAiIGxcbiI7DQotCQkJCQkJCXNCdXR0b24gPDwgcHQxLnggPDwgIiAiIDw8IHB0MS55IDw8ICIgbCBmXG4iOw0KLQ0KLQkJCQkJCQlzQXBwU3RyZWFtIDw8IHNCdXR0b247CQ0KLQkJCQkJCX0NCi0JCQkJCX0NCi0JCQkJCWJyZWFrOw0KLQkJCQljYXNlIFBTQlRfTUFYOg0KLQkJCQkJew0KLQkJCQkJCUNQREZfUG9pbnQgcHQxKHB0Q2VudGVyLnggLSBQV0xfVFJJQU5HTEVfSEFMRkxFTixwdENlbnRlci55ICsgUFdMX1RSSUFOR0xFX0hBTEZMRU4gKiAwLjVmKTsNCi0JCQkJCQlDUERGX1BvaW50IHB0MihwdENlbnRlci54ICsgUFdMX1RSSUFOR0xFX0hBTEZMRU4scHRDZW50ZXIueSArIFBXTF9UUklBTkdMRV9IQUxGTEVOICogMC41Zik7DQotCQkJCQkJQ1BERl9Qb2ludCBwdDMocHRDZW50ZXIueCxwdENlbnRlci55IC0gUFdMX1RSSUFOR0xFX0hBTEZMRU4gKiAwLjVmKTsNCi0NCi0JCQkJCQlpZiAocmVjdFduZC5yaWdodCAtIHJlY3RXbmQubGVmdCA+IFBXTF9UUklBTkdMRV9IQUxGTEVOICogMiAmJg0KLQkJCQkJCQlyZWN0V25kLnRvcCAtIHJlY3RXbmQuYm90dG9tID4gUFdMX1RSSUFOR0xFX0hBTEZMRU4gKQ0KLQkJCQkJCXsNCi0JCQkJCQkJc0J1dHRvbiA8PCAiMCBnXG4iOw0KLQkJCQkJCQlzQnV0dG9uIDw8IHB0MS54IDw8ICIgIiA8PCBwdDEueSA8PCAiIG1cbiI7DQotCQkJCQkJCXNCdXR0b24gPDwgcHQyLnggPDwgIiAiIDw8IHB0Mi55IDw8ICIgbFxuIjsNCi0JCQkJCQkJc0J1dHRvbiA8PCBwdDMueCA8PCAiICIgPDwgcHQzLnkgPDwgIiBsXG4iOw0KLQkJCQkJCQlzQnV0dG9uIDw8IHB0MS54IDw8ICIgIiA8PCBwdDEueSA8PCAiIGwgZlxuIjsNCi0NCi0JCQkJCQkJc0FwcFN0cmVhbSA8PCBzQnV0dG9uOwkNCi0JCQkJCQl9DQotCQkJCQl9DQotCQkJCQlicmVhazsNCi0JCQkJZGVmYXVsdDoNCi0JCQkJCWJyZWFrOw0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWRlZmF1bHQ6DQotCQkJYnJlYWs7DQotCX0NCi0NCi0Jc0FwcFN0cmVhbSA8PCAiUVxuIjsNCi19DQotDQotdm9pZCBDUFdMX1NCQnV0dG9uOjpEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSkNCi17DQotCWlmICghSXNWaXNpYmxlKCkpIHJldHVybjsNCi0NCi0JQ1BERl9SZWN0IHJlY3RXbmQgPSBHZXRXaW5kb3dSZWN0KCk7DQotCWlmIChyZWN0V25kLklzRW1wdHkoKSkgcmV0dXJuOw0KLQ0KLQlDUERGX1BvaW50IHB0Q2VudGVyID0gdGhpcy0+R2V0Q2VudGVyUG9pbnQoKTsNCi0JRlhfSU5UMzIgblRyYW5zcGFyYW5jeSA9IHRoaXMtPkdldFRyYW5zcGFyZW5jeSgpOw0KLQ0KLQlzd2l0Y2ggKHRoaXMtPm1fZVNjcm9sbEJhclR5cGUpDQotCXsNCi0JY2FzZSBTQlRfSFNDUk9MTDoNCi0JCUNQV0xfV25kOjpEcmF3VGhpc0FwcGVhcmFuY2UocERldmljZSxwVXNlcjJEZXZpY2UpOw0KLQkJc3dpdGNoICh0aGlzLT5tX2VTQkJ1dHRvblR5cGUpDQotCQl7DQotCQljYXNlIFBTQlRfTUlOOg0KLQkJCXsNCi0JCQkJQ1BERl9Qb2ludCBwdDEocHRDZW50ZXIueCAtIFBXTF9UUklBTkdMRV9IQUxGTEVOICogMC41ZixwdENlbnRlci55KTsNCi0JCQkJQ1BERl9Qb2ludCBwdDIocHRDZW50ZXIueCArIFBXTF9UUklBTkdMRV9IQUxGTEVOICogMC41ZixwdENlbnRlci55ICsgUFdMX1RSSUFOR0xFX0hBTEZMRU4pOw0KLQkJCQlDUERGX1BvaW50IHB0MyhwdENlbnRlci54ICsgUFdMX1RSSUFOR0xFX0hBTEZMRU4gKiAwLjVmLHB0Q2VudGVyLnkgLSBQV0xfVFJJQU5HTEVfSEFMRkxFTik7DQotDQotCQkJCWlmIChyZWN0V25kLnJpZ2h0IC0gcmVjdFduZC5sZWZ0ID4gUFdMX1RSSUFOR0xFX0hBTEZMRU4gKiAyICYmDQotCQkJCQlyZWN0V25kLnRvcCAtIHJlY3RXbmQuYm90dG9tID4gUFdMX1RSSUFOR0xFX0hBTEZMRU4gKQ0KLQkJCQl7DQotCQkJCQlDRlhfUGF0aERhdGEgcGF0aDsNCi0NCi0JCQkJCXBhdGguU2V0UG9pbnRDb3VudCg0KTsNCi0JCQkJCXBhdGguU2V0UG9pbnQoMCwgcHQxLngsIHB0MS55LCBGWFBUX01PVkVUTyk7DQotCQkJCQlwYXRoLlNldFBvaW50KDEsIHB0Mi54LCBwdDIueSwgRlhQVF9MSU5FVE8pOw0KLQkJCQkJcGF0aC5TZXRQb2ludCgyLCBwdDMueCwgcHQzLnksIEZYUFRfTElORVRPKTsNCi0JCQkJCXBhdGguU2V0UG9pbnQoMywgcHQxLngsIHB0MS55LCBGWFBUX0xJTkVUTyk7DQotDQotCQkJCQlwRGV2aWNlLT5EcmF3UGF0aCgmcGF0aCwgcFVzZXIyRGV2aWNlLCBOVUxMLCANCi0JCQkJCQlDUFdMX1V0aWxzOjpQV0xDb2xvclRvRlhDb2xvcihQV0xfREVGQVVMVF9CTEFDS0NPTE9SLG5UcmFuc3BhcmFuY3kpLCANCi0JCQkJCQkwLCBGWEZJTExfQUxURVJOQVRFKTsNCi0JCQkJfQ0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWNhc2UgUFNCVF9NQVg6DQotCQkJew0KLQkJCQlDUERGX1BvaW50IHB0MShwdENlbnRlci54ICsgUFdMX1RSSUFOR0xFX0hBTEZMRU4gKiAwLjVmLHB0Q2VudGVyLnkpOw0KLQkJCQlDUERGX1BvaW50IHB0MihwdENlbnRlci54IC0gUFdMX1RSSUFOR0xFX0hBTEZMRU4gKiAwLjVmLHB0Q2VudGVyLnkgKyBQV0xfVFJJQU5HTEVfSEFMRkxFTik7DQotCQkJCUNQREZfUG9pbnQgcHQzKHB0Q2VudGVyLnggLSBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDAuNWYscHRDZW50ZXIueSAtIFBXTF9UUklBTkdMRV9IQUxGTEVOKTsNCi0NCi0JCQkJaWYgKHJlY3RXbmQucmlnaHQgLSByZWN0V25kLmxlZnQgPiBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDIgJiYNCi0JCQkJCXJlY3RXbmQudG9wIC0gcmVjdFduZC5ib3R0b20gPiBQV0xfVFJJQU5HTEVfSEFMRkxFTiApDQotCQkJCXsNCi0JCQkJCUNGWF9QYXRoRGF0YSBwYXRoOw0KLQ0KLQkJCQkJcGF0aC5TZXRQb2ludENvdW50KDQpOw0KLQkJCQkJcGF0aC5TZXRQb2ludCgwLCBwdDEueCwgcHQxLnksIEZYUFRfTU9WRVRPKTsNCi0JCQkJCXBhdGguU2V0UG9pbnQoMSwgcHQyLngsIHB0Mi55LCBGWFBUX0xJTkVUTyk7DQotCQkJCQlwYXRoLlNldFBvaW50KDIsIHB0My54LCBwdDMueSwgRlhQVF9MSU5FVE8pOw0KLQkJCQkJcGF0aC5TZXRQb2ludCgzLCBwdDEueCwgcHQxLnksIEZYUFRfTElORVRPKTsNCi0NCi0JCQkJCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoLCBwVXNlcjJEZXZpY2UsIE5VTEwsIA0KLQkJCQkJCUNQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKFBXTF9ERUZBVUxUX0JMQUNLQ09MT1IsblRyYW5zcGFyYW5jeSksIA0KLQkJCQkJCTAsIEZYRklMTF9BTFRFUk5BVEUpOwkNCi0JCQkJfQ0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWRlZmF1bHQ6DQotCQkJYnJlYWs7DQotCQl9DQotCQlicmVhazsNCi0JY2FzZSBTQlRfVlNDUk9MTDoNCi0JCXN3aXRjaCh0aGlzLT5tX2VTQkJ1dHRvblR5cGUpDQotCQl7DQotCQljYXNlIFBTQlRfTUlOOg0KLQkJCXsNCi0JCQkJLy9kcmF3IGJvcmRlcg0KLQkJCQlDUERGX1JlY3QgcmNEcmF3ID0gcmVjdFduZDsNCi0JCQkJQ1BXTF9VdGlsczo6RHJhd1N0cm9rZVJlY3QocERldmljZSwgcFVzZXIyRGV2aWNlLCByY0RyYXcsIA0KLQkJCQkJQXJnYkVuY29kZShuVHJhbnNwYXJhbmN5LDEwMCwxMDAsMTAwKSwwLjBmKTsNCi0NCi0JCQkJLy9kcmF3IGlubmVyIGJvcmRlcg0KLQkJCQlyY0RyYXcgPSBDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdChyZWN0V25kLDAuNWYpOw0KLQkJCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlUmVjdChwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHJjRHJhdywgDQotCQkJCQlBcmdiRW5jb2RlKG5UcmFuc3BhcmFuY3ksMjU1LDI1NSwyNTUpLDEuMGYpOw0KLQ0KLQkJCQkvL2RyYXcgYmFja2dyb3VuZA0KLQ0KLQkJCQlyY0RyYXcgPSBDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdChyZWN0V25kLDEuMGYpOw0KLQ0KLQkJCQlpZiAodGhpcy0+SXNFbmFibGVkKCkpDQotCQkJCQlDUFdMX1V0aWxzOjpEcmF3U2hhZG93KHBEZXZpY2UsIHBVc2VyMkRldmljZSwgVFJVRSwgRkFMU0UsIHJjRHJhdywgblRyYW5zcGFyYW5jeSwgODAsIDIyMCk7DQotCQkJCWVsc2UNCi0JCQkJCUNQV0xfVXRpbHM6OkRyYXdGaWxsUmVjdChwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHJjRHJhdywgQXJnYkVuY29kZSgyNTUsMjU1LDI1NSwyNTUpKTsNCi0NCi0JCQkJLy9kcmF3IGFycm93DQotDQotCQkJCWlmIChyZWN0V25kLnRvcCAtIHJlY3RXbmQuYm90dG9tID4gNi4wZiApDQotCQkJCXsNCi0JCQkJCUZYX0ZMT0FUIGZYID0gcmVjdFduZC5sZWZ0ICsgMS41ZjsNCi0JCQkJCUZYX0ZMT0FUIGZZID0gcmVjdFduZC5ib3R0b207DQotCQkJCQlDUERGX1BvaW50IHB0c1s3XSA9IHsNCi0JCQkJCQkJCUNQREZfUG9pbnQoZlgrMi41ZiwgZlkrNC4wZiksDQotCQkJCQkJCQlDUERGX1BvaW50KGZYKzIuNWYsIGZZKzMuMGYpLA0KLQkJCQkJCQkJQ1BERl9Qb2ludChmWCs0LjVmLCBmWSs1LjBmKSwNCi0JCQkJCQkJCUNQREZfUG9pbnQoZlgrNi41ZiwgZlkrMy4wZiksDQotCQkJCQkJCQlDUERGX1BvaW50KGZYKzYuNWYsIGZZKzQuMGYpLA0KLQkJCQkJCQkJQ1BERl9Qb2ludChmWCs0LjVmLCBmWSs2LjBmKSwNCi0JCQkJCQkJCUNQREZfUG9pbnQoZlgrMi41ZiwgZlkrNC4wZil9Ow0KLQkJCQkJDQotDQotCQkJCQlpZiAodGhpcy0+SXNFbmFibGVkKCkpDQotCQkJCQkJQ1BXTF9VdGlsczo6RHJhd0ZpbGxBcmVhKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgcHRzLCA3LCBBcmdiRW5jb2RlKG5UcmFuc3BhcmFuY3ksMjU1LDI1NSwyNTUpKTsNCi0JCQkJCWVsc2UNCi0JCQkJCQlDUFdMX1V0aWxzOjpEcmF3RmlsbEFyZWEocERldmljZSwgcFVzZXIyRGV2aWNlLCBwdHMsIDcsIA0KLQkJCQkJCQlDUFdMX1V0aWxzOjpQV0xDb2xvclRvRlhDb2xvcihQV0xfREVGQVVMVF9IRUFWWUdSQVlDT0xPUiwyNTUpKTsNCi0JCQkJfQ0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWNhc2UgUFNCVF9NQVg6DQotCQkJew0KLQkJCQkvL2RyYXcgYm9yZGVyDQotCQkJCUNQREZfUmVjdCByY0RyYXcgPSByZWN0V25kOw0KLQkJCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlUmVjdChwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHJjRHJhdywgDQotCQkJCQlBcmdiRW5jb2RlKG5UcmFuc3BhcmFuY3ksMTAwLDEwMCwxMDApLDAuMGYpOw0KLQkJCQkNCi0JCQkJLy9kcmF3IGlubmVyIGJvcmRlcg0KLQkJCQlyY0RyYXcgPSBDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdChyZWN0V25kLDAuNWYpOw0KLQkJCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlUmVjdChwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHJjRHJhdywgDQotCQkJCQlBcmdiRW5jb2RlKG5UcmFuc3BhcmFuY3ksMjU1LDI1NSwyNTUpLDEuMGYpOw0KLQ0KLQkJCQkvL2RyYXcgYmFja2dyb3VuZA0KLQkJCQlyY0RyYXcgPSBDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdChyZWN0V25kLDEuMGYpOw0KLQkJCQlpZiAodGhpcy0+SXNFbmFibGVkKCkpDQotCQkJCQlDUFdMX1V0aWxzOjpEcmF3U2hhZG93KHBEZXZpY2UsIHBVc2VyMkRldmljZSwgVFJVRSwgRkFMU0UsIHJjRHJhdywgblRyYW5zcGFyYW5jeSwgODAsIDIyMCk7DQotCQkJCWVsc2UNCi0JCQkJCUNQV0xfVXRpbHM6OkRyYXdGaWxsUmVjdChwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHJjRHJhdywgQXJnYkVuY29kZSgyNTUsMjU1LDI1NSwyNTUpKTsNCi0NCi0JCQkJLy9kcmF3IGFycm93DQotDQotCQkJCWlmIChyZWN0V25kLnRvcCAtIHJlY3RXbmQuYm90dG9tID4gNi4wZiApDQotCQkJCXsNCi0JCQkJCUZYX0ZMT0FUIGZYID0gcmVjdFduZC5sZWZ0ICsgMS41ZjsNCi0JCQkJCUZYX0ZMT0FUIGZZID0gcmVjdFduZC5ib3R0b207DQotDQotCQkJCQlDUERGX1BvaW50IHB0c1s3XSA9IHsNCi0JCQkJCQkJCUNQREZfUG9pbnQoZlgrMi41ZiwgZlkrNS4wZiksDQotCQkJCQkJCQlDUERGX1BvaW50KGZYKzIuNWYsIGZZKzYuMGYpLA0KLQkJCQkJCQkJQ1BERl9Qb2ludChmWCs0LjVmLCBmWSs0LjBmKSwNCi0JCQkJCQkJCUNQREZfUG9pbnQoZlgrNi41ZiwgZlkrNi4wZiksDQotCQkJCQkJCQlDUERGX1BvaW50KGZYKzYuNWYsIGZZKzUuMGYpLA0KLQkJCQkJCQkJQ1BERl9Qb2ludChmWCs0LjVmLCBmWSszLjBmKSwNCi0JCQkJCQkJCUNQREZfUG9pbnQoZlgrMi41ZiwgZlkrNS4wZil9Ow0KLQkJCQkJDQotDQotCQkJCQlpZiAodGhpcy0+SXNFbmFibGVkKCkpDQotCQkJCQkJQ1BXTF9VdGlsczo6RHJhd0ZpbGxBcmVhKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgcHRzLCA3LCBBcmdiRW5jb2RlKG5UcmFuc3BhcmFuY3ksMjU1LDI1NSwyNTUpKTsNCi0JCQkJCWVsc2UNCi0JCQkJCQlDUFdMX1V0aWxzOjpEcmF3RmlsbEFyZWEocERldmljZSwgcFVzZXIyRGV2aWNlLCBwdHMsIDcsIA0KLQkJCQkJCQlDUFdMX1V0aWxzOjpQV0xDb2xvclRvRlhDb2xvcihQV0xfREVGQVVMVF9IRUFWWUdSQVlDT0xPUiwyNTUpKTsNCi0JCQkJfQ0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWNhc2UgUFNCVF9QT1M6DQotCQkJew0KLQkJCQkvL0NQV0xfV25kOjpEcmF3VGhpc0FwcGVhcmFuY2UocERldmljZSxwVXNlcjJEZXZpY2UpOw0KLQ0KLQkJCQkvL2RyYXcgYm9yZGVyDQotCQkJCUNQREZfUmVjdCByY0RyYXcgPSByZWN0V25kOw0KLQkJCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlUmVjdChwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHJjRHJhdywgDQotCQkJCQlBcmdiRW5jb2RlKG5UcmFuc3BhcmFuY3ksMTAwLDEwMCwxMDApLDAuMGYpOw0KLQkJCQkNCi0JCQkJLy9kcmF3IGlubmVyIGJvcmRlcg0KLQkJCQlyY0RyYXcgPSBDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdChyZWN0V25kLDAuNWYpOw0KLQkJCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlUmVjdChwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHJjRHJhdywgDQotCQkJCQlBcmdiRW5jb2RlKG5UcmFuc3BhcmFuY3ksMjU1LDI1NSwyNTUpLDEuMGYpOw0KLQ0KLQkJCQlpZiAodGhpcy0+SXNFbmFibGVkKCkpDQotCQkJCXsNCi0JCQkJCS8vZHJhdyBzaGFkb3cgZWZmZWN0CQkJCQkJDQotCQkJCQkNCi0JCQkJCUNQREZfUG9pbnQgcHRUb3AgPSBDUERGX1BvaW50KHJlY3RXbmQubGVmdCxyZWN0V25kLnRvcC0xLjBmKTsNCi0JCQkJCUNQREZfUG9pbnQgcHRCb3R0b20gPSBDUERGX1BvaW50KHJlY3RXbmQubGVmdCxyZWN0V25kLmJvdHRvbSsxLjBmKTsNCi0NCi0JCQkJCXB0VG9wLnggKz0gMS41ZjsNCi0JCQkJCXB0Qm90dG9tLnggKz0gMS41ZjsNCi0JCQkJCQ0KLQkJCQkJQ1BXTF9VdGlsczo6RHJhd1N0cm9rZUxpbmUocERldmljZSwgcFVzZXIyRGV2aWNlLCBwdFRvcCwgcHRCb3R0b20sIA0KLQkJCQkJCUFyZ2JFbmNvZGUoblRyYW5zcGFyYW5jeSwyMTAsMjEwLDIxMCksMS4wZik7DQotDQotCQkJCQlwdFRvcC54ICs9IDEuMGY7DQotCQkJCQlwdEJvdHRvbS54ICs9IDEuMGY7DQotCQkJCQkNCi0JCQkJCUNQV0xfVXRpbHM6OkRyYXdTdHJva2VMaW5lKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgcHRUb3AsIHB0Qm90dG9tLCANCi0JCQkJCQlBcmdiRW5jb2RlKG5UcmFuc3BhcmFuY3ksMjIwLDIyMCwyMjApLDEuMGYpOw0KLQ0KLQkJCQkJcHRUb3AueCArPSAxLjBmOw0KLQkJCQkJcHRCb3R0b20ueCArPSAxLjBmOw0KLQkJCQkJDQotCQkJCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlTGluZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHB0VG9wLCBwdEJvdHRvbSwgDQotCQkJCQkJQXJnYkVuY29kZShuVHJhbnNwYXJhbmN5LDI0MCwyNDAsMjQwKSwxLjBmKTsNCi0NCi0JCQkJCXB0VG9wLnggKz0gMS4wZjsNCi0JCQkJCXB0Qm90dG9tLnggKz0gMS4wZjsNCi0JCQkJCQ0KLQkJCQkJQ1BXTF9VdGlsczo6RHJhd1N0cm9rZUxpbmUocERldmljZSwgcFVzZXIyRGV2aWNlLCBwdFRvcCwgcHRCb3R0b20sIA0KLQkJCQkJCUFyZ2JFbmNvZGUoblRyYW5zcGFyYW5jeSwyNDAsMjQwLDI0MCksMS4wZik7DQotDQotCQkJCQlwdFRvcC54ICs9IDEuMGY7DQotCQkJCQlwdEJvdHRvbS54ICs9IDEuMGY7DQotCQkJCQkNCi0JCQkJCUNQV0xfVXRpbHM6OkRyYXdTdHJva2VMaW5lKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgcHRUb3AsIHB0Qm90dG9tLCANCi0JCQkJCQlBcmdiRW5jb2RlKG5UcmFuc3BhcmFuY3ksMjEwLDIxMCwyMTApLDEuMGYpOw0KLQ0KLQkJCQkJcHRUb3AueCArPSAxLjBmOw0KLQkJCQkJcHRCb3R0b20ueCArPSAxLjBmOw0KLQkJCQkJDQotCQkJCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlTGluZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHB0VG9wLCBwdEJvdHRvbSwgDQotCQkJCQkJQXJnYkVuY29kZShuVHJhbnNwYXJhbmN5LDE4MCwxODAsMTgwKSwxLjBmKTsNCi0NCi0JCQkJCXB0VG9wLnggKz0gMS4wZjsNCi0JCQkJCXB0Qm90dG9tLnggKz0gMS4wZjsNCi0JCQkJCQ0KLQkJCQkJQ1BXTF9VdGlsczo6RHJhd1N0cm9rZUxpbmUocERldmljZSwgcFVzZXIyRGV2aWNlLCBwdFRvcCwgcHRCb3R0b20sIA0KLQkJCQkJCUFyZ2JFbmNvZGUoblRyYW5zcGFyYW5jeSwxNTAsMTUwLDE1MCksMS4wZik7DQotDQotCQkJCQlwdFRvcC54ICs9IDEuMGY7DQotCQkJCQlwdEJvdHRvbS54ICs9IDEuMGY7DQotCQkJCQkNCi0JCQkJCUNQV0xfVXRpbHM6OkRyYXdTdHJva2VMaW5lKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgcHRUb3AsIHB0Qm90dG9tLCANCi0JCQkJCQlBcmdiRW5jb2RlKG5UcmFuc3BhcmFuY3ksMTUwLDE1MCwxNTApLDEuMGYpOw0KLQ0KLQkJCQkJcHRUb3AueCArPSAxLjBmOw0KLQkJCQkJcHRCb3R0b20ueCArPSAxLjBmOw0KLQkJCQkJDQotCQkJCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlTGluZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHB0VG9wLCBwdEJvdHRvbSwgDQotCQkJCQkJQXJnYkVuY29kZShuVHJhbnNwYXJhbmN5LDE4MCwxODAsMTgwKSwxLjBmKTsNCi0NCi0JCQkJCXB0VG9wLnggKz0gMS4wZjsNCi0JCQkJCXB0Qm90dG9tLnggKz0gMS4wZjsNCi0JCQkJCQ0KLQkJCQkJQ1BXTF9VdGlsczo6RHJhd1N0cm9rZUxpbmUocERldmljZSwgcFVzZXIyRGV2aWNlLCBwdFRvcCwgcHRCb3R0b20sIA0KLQkJCQkJCUFyZ2JFbmNvZGUoblRyYW5zcGFyYW5jeSwyMTAsMjEwLDIxMCksMS4wZik7DQotCQkJCX0NCi0JCQkJZWxzZQ0KLQkJCQl7DQotCQkJCQlDUFdMX1V0aWxzOjpEcmF3RmlsbFJlY3QocERldmljZSwgcFVzZXIyRGV2aWNlLCByY0RyYXcsIEFyZ2JFbmNvZGUoMjU1LDI1NSwyNTUsMjU1KSk7DQotCQkJCX0NCi0NCi0JCQkJLy9kcmF3IGZyaWN0aW9uDQotDQotCQkJCWlmIChyZWN0V25kLkhlaWdodCgpID4gOC4wZikNCi0JCQkJew0KLQkJCQkJRlhfQ09MT1JSRUYgY3JTdHJva2UgPSBBcmdiRW5jb2RlKG5UcmFuc3BhcmFuY3ksMTIwLDEyMCwxMjApOw0KLQkJCQkJaWYgKCF0aGlzLT5Jc0VuYWJsZWQoKSkNCi0JCQkJCQljclN0cm9rZSA9IENQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKFBXTF9ERUZBVUxUX0hFQVZZR1JBWUNPTE9SLDI1NSk7DQotDQotCQkJCQlGWF9GTE9BVCBuRnJpY3Rpb25XaWR0aCA9IDUuMGY7DQotCQkJCQlGWF9GTE9BVCBuRnJpY3Rpb25IZWlnaHQgPSA1LjVmOw0KLQ0KLQkJCQkJQ1BERl9Qb2ludCBwdExlZnQgPSBDUERGX1BvaW50KHB0Q2VudGVyLnggLSBuRnJpY3Rpb25XaWR0aCAvIDIuMGYsIHB0Q2VudGVyLnkgLSBuRnJpY3Rpb25IZWlnaHQgLyAyLjBmICsgMC41Zik7DQotCQkJCQlDUERGX1BvaW50IHB0UmlnaHQgPSBDUERGX1BvaW50KHB0Q2VudGVyLnggKyBuRnJpY3Rpb25XaWR0aCAvIDIuMGYsIHB0Q2VudGVyLnkgLSBuRnJpY3Rpb25IZWlnaHQgLyAyLjBmICsgMC41Zik7DQotDQotCQkJCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlTGluZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHB0TGVmdCwgcHRSaWdodCwgDQotCQkJCQkJY3JTdHJva2UsMS4wZik7DQotDQotCQkJCQlwdExlZnQueSArPSAyLjBmOw0KLQkJCQkJcHRSaWdodC55ICs9IDIuMGY7DQotDQotCQkJCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlTGluZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHB0TGVmdCwgcHRSaWdodCwgDQotCQkJCQkJY3JTdHJva2UsMS4wZik7DQotDQotCQkJCQlwdExlZnQueSArPSAyLjBmOw0KLQkJCQkJcHRSaWdodC55ICs9IDIuMGY7DQotDQotCQkJCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlTGluZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHB0TGVmdCwgcHRSaWdodCwgDQotCQkJCQkJY3JTdHJva2UsMS4wZik7DQotDQotCQkJCQkvKg0KLQkJCQkJcHRMZWZ0LnkgKz0gMS41ZjsNCi0JCQkJCXB0UmlnaHQueSArPSAxLjVmOw0KLQ0KLQkJCQkJQ1BXTF9VdGlsczo6RHJhd1N0cm9rZUxpbmUocERldmljZSwgcFVzZXIyRGV2aWNlLCBwdExlZnQsIHB0UmlnaHQsIA0KLQkJCQkJCUFyZ2JFbmNvZGUoblRyYW5zcGFyYW5jeSwxNTAsMTUwLDE1MCksMS4wZik7DQotCQkJCQkJKi8NCi0JCQkJfQ0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWRlZmF1bHQ6DQotCQkJYnJlYWs7DQotCQl9DQotCQlicmVhazsNCi0JZGVmYXVsdDoNCi0JCWJyZWFrOw0KLQl9DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9TQkJ1dHRvbjo6T25MQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKQ0KLXsNCi0JQ1BXTF9XbmQ6Ok9uTEJ1dHRvbkRvd24ocG9pbnQsbkZsYWcpOw0KLQ0KLQlpZiAoQ1BXTF9XbmQgKiBwUGFyZW50ID0gR2V0UGFyZW50V2luZG93KCkpDQotCQlwUGFyZW50LT5Pbk5vdGlmeSh0aGlzLFBOTV9MQlVUVE9ORE9XTiwwLChGWF9JTlRQVFIpJnBvaW50KTsNCi0NCi0JbV9iTW91c2VEb3duID0gVFJVRTsNCi0JU2V0Q2FwdHVyZSgpOw0KLQ0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBDUFdMX1NCQnV0dG9uOjpPbkxCdXR0b25VcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKQ0KLXsNCi0JQ1BXTF9XbmQ6Ok9uTEJ1dHRvblVwKHBvaW50LG5GbGFnKTsNCi0NCi0JaWYgKENQV0xfV25kICogcFBhcmVudCA9IEdldFBhcmVudFdpbmRvdygpKQ0KLQkJcFBhcmVudC0+T25Ob3RpZnkodGhpcyxQTk1fTEJVVFRPTlVQLDAsKEZYX0lOVFBUUikmcG9pbnQpOw0KLQ0KLQltX2JNb3VzZURvd24gPSBGQUxTRTsNCi0JUmVsZWFzZUNhcHR1cmUoKTsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9TQkJ1dHRvbjo6T25Nb3VzZU1vdmUoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZykNCi17DQotCUNQV0xfV25kOjpPbk1vdXNlTW92ZShwb2ludCxuRmxhZyk7DQotDQotCWlmIChDUFdMX1duZCAqIHBQYXJlbnQgPSBHZXRQYXJlbnRXaW5kb3coKSkNCi0JewkJDQotCQlwUGFyZW50LT5Pbk5vdGlmeSh0aGlzLFBOTV9NT1VTRU1PVkUsMCwoRlhfSU5UUFRSKSZwb2ludCk7DQotDQotCQkvKg0KLQkJaWYgKG1fYk1vdXNlRG93biAmJiAobV9lU0JCdXR0b25UeXBlID09IFBTQlRfTUlOIHx8IG1fZVNCQnV0dG9uVHlwZSA9PSBQU0JUX01BWCkpDQotCQl7DQotCQkJaWYgKCFwUGFyZW50LT5Pbk5vdGlmeSh0aGlzLFBOTV9MQlVUVE9ORE9XTixuRmxhZ3MsKEZYX0lOVFBUUikmcG9pbnQpKQ0KLQkJCQlyZXR1cm4gRkFMU0U7DQotCQl9DQotCQkqLw0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfU2Nyb2xsQmFyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DUFdMX1Njcm9sbEJhcjo6Q1BXTF9TY3JvbGxCYXIoUFdMX1NDUk9MTEJBUl9UWVBFIHNiVHlwZSk6DQotCW1fc2JUeXBlKHNiVHlwZSksDQotCW1fcE1pbkJ1dHRvbihOVUxMKSwNCi0JbV9wTWF4QnV0dG9uKE5VTEwpLA0KLQltX3BQb3NCdXR0b24oTlVMTCksDQotCW1fYk1vdXNlRG93bihGQUxTRSksDQotCW1fYk1pbk9yTWF4KEZBTFNFKSwNCi0JbV9iTm90aWZ5Rm9yZXZlcihUUlVFKQ0KLXsNCi19DQotDQotQ1BXTF9TY3JvbGxCYXI6On5DUFdMX1Njcm9sbEJhcigpDQotew0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDUFdMX1Njcm9sbEJhcjo6R2V0Q2xhc3NOYW1lKCkgY29uc3QNCi17DQotCXJldHVybiAiQ1BXTF9TY3JvbGxCYXIiOw0KLX0NCi0NCi12b2lkIENQV0xfU2Nyb2xsQmFyOjpPbkNyZWF0ZShQV0xfQ1JFQVRFUEFSQU0gJiBjcCkNCi17DQotCWNwLmVDdXJzb3JUeXBlID0gRlhDVF9BUlJPVzsNCi19DQotDQotdm9pZCBDUFdMX1Njcm9sbEJhcjo6UmVQb3NDaGlsZFduZCgpDQotew0KLQlDUERGX1JlY3QgcmNDbGllbnQgPSB0aGlzLT5HZXRDbGllbnRSZWN0KCk7DQotDQotLyoNCi0Jc3dpdGNoKG1fc2JUeXBlKQ0KLQl7DQotCQljYXNlIFNCVF9IU0NST0xMOg0KLQkJCWlmIChyY0NsaWVudC5yaWdodCAtIHJjQ2xpZW50LmxlZnQgPCBQV0xfU0NST0xMQkFSX1dJRFRIIHx8DQotCQkJCXJjQ2xpZW50LnRvcCAtIHJjQ2xpZW50LmJvdHRvbSA8IFBXTF9TQ1JPTExCQVJfV0lEVEgpDQotCQkJew0KLQkJCQlTZXRWaXNpYmxlKEZBTFNFKTsNCi0JCQl9DQotCQkJYnJlYWs7DQotCQljYXNlIFNCVF9WU0NST0xMOg0KLQkJCWlmIChyY0NsaWVudC5yaWdodCAtIHJjQ2xpZW50LmxlZnQgPCBQV0xfU0NST0xMQkFSX1dJRFRIIHx8DQotCQkJCXJjQ2xpZW50LnRvcCAtIHJjQ2xpZW50LmJvdHRvbSA8IFBXTF9TQ1JPTExCQVJfV0lEVEgpDQotCQkJew0KLQkJCQlTZXRWaXNpYmxlKEZBTFNFKTsNCi0JCQl9DQotCQkJYnJlYWs7DQotCX0JDQotKi8NCi0JQ1BERl9SZWN0IHJjTWluQnV0dG9uLHJjTWF4QnV0dG9uOw0KLQ0KLQlGWF9GTE9BVCBmQldpZHRoID0gMDsNCi0NCi0Jc3dpdGNoIChtX3NiVHlwZSkNCi0Jew0KLQljYXNlIFNCVF9IU0NST0xMOg0KLQkJaWYgKHJjQ2xpZW50LnJpZ2h0IC0gcmNDbGllbnQubGVmdCA+IFBXTF9TQ1JPTExCQVJfQlVUVE9OX1dJRFRIICogMiArIFBXTF9TQ1JPTExCQVJfUE9TQlVUVE9OX01JTldJRFRIICsgMikNCi0JCXsNCi0JCQlyY01pbkJ1dHRvbiA9IENQREZfUmVjdChyY0NsaWVudC5sZWZ0LHJjQ2xpZW50LmJvdHRvbSwNCi0JCQkJcmNDbGllbnQubGVmdCArIFBXTF9TQ1JPTExCQVJfQlVUVE9OX1dJRFRILHJjQ2xpZW50LnRvcCk7DQotCQkJcmNNYXhCdXR0b24gPSBDUERGX1JlY3QocmNDbGllbnQucmlnaHQgLSBQV0xfU0NST0xMQkFSX0JVVFRPTl9XSURUSCxyY0NsaWVudC5ib3R0b20sDQotCQkJCXJjQ2xpZW50LnJpZ2h0LHJjQ2xpZW50LnRvcCk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJZkJXaWR0aCA9IChyY0NsaWVudC5yaWdodCAtIHJjQ2xpZW50LmxlZnQgLSBQV0xfU0NST0xMQkFSX1BPU0JVVFRPTl9NSU5XSURUSCAtIDIpIC8gMjsNCi0NCi0JCQlpZiAoZkJXaWR0aCA+IDApDQotCQkJew0KLQkJCQlyY01pbkJ1dHRvbiA9IENQREZfUmVjdChyY0NsaWVudC5sZWZ0LHJjQ2xpZW50LmJvdHRvbSwNCi0JCQkJCXJjQ2xpZW50LmxlZnQgKyBmQldpZHRoLHJjQ2xpZW50LnRvcCk7DQotCQkJCXJjTWF4QnV0dG9uID0gQ1BERl9SZWN0KHJjQ2xpZW50LnJpZ2h0IC0gZkJXaWR0aCxyY0NsaWVudC5ib3R0b20sDQotCQkJCQlyY0NsaWVudC5yaWdodCxyY0NsaWVudC50b3ApOw0KLQkJCX0NCi0JCQllbHNlIFNldFZpc2libGUoRkFMU0UpOw0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgU0JUX1ZTQ1JPTEw6DQotCQlpZiAoSXNGbG9hdEJpZ2dlcihyY0NsaWVudC50b3AgLSByY0NsaWVudC5ib3R0b20sIFBXTF9TQ1JPTExCQVJfQlVUVE9OX1dJRFRIICogMiArIFBXTF9TQ1JPTExCQVJfUE9TQlVUVE9OX01JTldJRFRIICsgMikpDQotCQl7DQotCQkJcmNNaW5CdXR0b24gPSBDUERGX1JlY3QocmNDbGllbnQubGVmdCxyY0NsaWVudC50b3AgLSBQV0xfU0NST0xMQkFSX0JVVFRPTl9XSURUSCwNCi0JCQkJcmNDbGllbnQucmlnaHQscmNDbGllbnQudG9wKTsNCi0JCQlyY01heEJ1dHRvbiA9IENQREZfUmVjdChyY0NsaWVudC5sZWZ0LHJjQ2xpZW50LmJvdHRvbSwNCi0JCQkJcmNDbGllbnQucmlnaHQscmNDbGllbnQuYm90dG9tICsgUFdMX1NDUk9MTEJBUl9CVVRUT05fV0lEVEgpOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCWZCV2lkdGggPSAocmNDbGllbnQudG9wIC0gcmNDbGllbnQuYm90dG9tIC0gUFdMX1NDUk9MTEJBUl9QT1NCVVRUT05fTUlOV0lEVEggLSAyKSAvIDI7DQotDQotCQkJaWYgKElzRmxvYXRCaWdnZXIoZkJXaWR0aCwgMCkpDQotCQkJew0KLQkJCQlyY01pbkJ1dHRvbiA9IENQREZfUmVjdChyY0NsaWVudC5sZWZ0LHJjQ2xpZW50LnRvcCAtIGZCV2lkdGgsDQotCQkJCQlyY0NsaWVudC5yaWdodCxyY0NsaWVudC50b3ApOw0KLQkJCQlyY01heEJ1dHRvbiA9IENQREZfUmVjdChyY0NsaWVudC5sZWZ0LHJjQ2xpZW50LmJvdHRvbSwNCi0JCQkJCXJjQ2xpZW50LnJpZ2h0LHJjQ2xpZW50LmJvdHRvbSArIGZCV2lkdGgpOw0KLQkJCX0NCi0JCQllbHNlIFNldFZpc2libGUoRkFMU0UpOw0KLQkJfQ0KLQkJYnJlYWs7DQotCX0JDQotCQ0KLS8vCWlmIChJc1Zpc2libGUoKSkNCi0Jew0KLQkJaWYgKG1fcE1pbkJ1dHRvbikNCi0JCQltX3BNaW5CdXR0b24tPk1vdmUocmNNaW5CdXR0b24sVFJVRSxGQUxTRSk7DQotCQkNCi0JCWlmIChtX3BNYXhCdXR0b24pDQotCQkJbV9wTWF4QnV0dG9uLT5Nb3ZlKHJjTWF4QnV0dG9uLFRSVUUsRkFMU0UpOw0KLQ0KLQkJTW92ZVBvc0J1dHRvbihGQUxTRSk7DQotCX0NCi19DQotDQotdm9pZCBDUFdMX1Njcm9sbEJhcjo6R2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oQ0ZYX0J5dGVUZXh0QnVmICYgc0FwcFN0cmVhbSkNCi17DQotCUNQREZfUmVjdCByZWN0V25kID0gR2V0V2luZG93UmVjdCgpOw0KLQ0KLQlpZiAoSXNWaXNpYmxlKCkgJiYgIXJlY3RXbmQuSXNFbXB0eSgpKQ0KLQl7DQotCQlDRlhfQnl0ZVRleHRCdWYgc0J1dHRvbjsJCQ0KLQ0KLQkJc0J1dHRvbiA8PCAicVxuIjsNCi0JCXNCdXR0b24gPDwgIjAgd1xuIiA8PCBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShHZXRCYWNrZ3JvdW5kQ29sb3IoKSxUUlVFKTsNCi0JCXNCdXR0b24gPDwgcmVjdFduZC5sZWZ0IDw8ICIgIiA8PCByZWN0V25kLmJvdHRvbSA8PCAiICINCi0JCQkJPDwgcmVjdFduZC5yaWdodCAtIHJlY3RXbmQubGVmdCA8PCAiICIgPDwgcmVjdFduZC50b3AgLSByZWN0V25kLmJvdHRvbSA8PCAiIHJlIGIgUVxuIjsJDQotDQotCQlzQXBwU3RyZWFtIDw8IHNCdXR0b247CQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9TY3JvbGxCYXI6OkRyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKQ0KLXsNCi0vLwlDUFdMX1duZDo6RHJhd1RoaXNBcHBlYXJhbmNlKHBEZXZpY2UscFVzZXIyRGV2aWNlKTsNCi0JQ1BERl9SZWN0IHJlY3RXbmQgPSBHZXRXaW5kb3dSZWN0KCk7DQotDQotCWlmIChJc1Zpc2libGUoKSAmJiAhcmVjdFduZC5Jc0VtcHR5KCkpDQotCXsNCi0JCUNQV0xfVXRpbHM6OkRyYXdGaWxsUmVjdChwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHJlY3RXbmQsIHRoaXMtPkdldEJhY2tncm91bmRDb2xvcigpLCBHZXRUcmFuc3BhcmVuY3koKSk7DQotDQotCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlTGluZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIA0KLQkJCUNQREZfUG9pbnQocmVjdFduZC5sZWZ0KzIuMGYscmVjdFduZC50b3AtMi4wZiksIENQREZfUG9pbnQocmVjdFduZC5sZWZ0KzIuMGYscmVjdFduZC5ib3R0b20rMi4wZiksIA0KLQkJCUFyZ2JFbmNvZGUodGhpcy0+R2V0VHJhbnNwYXJlbmN5KCksMTAwLDEwMCwxMDApLDEuMGYpOw0KLQ0KLQkJQ1BXTF9VdGlsczo6RHJhd1N0cm9rZUxpbmUocERldmljZSwgcFVzZXIyRGV2aWNlLCANCi0JCQlDUERGX1BvaW50KHJlY3RXbmQucmlnaHQtMi4wZixyZWN0V25kLnRvcC0yLjBmKSwgQ1BERl9Qb2ludChyZWN0V25kLnJpZ2h0LTIuMGYscmVjdFduZC5ib3R0b20rMi4wZiksIA0KLQkJCUFyZ2JFbmNvZGUodGhpcy0+R2V0VHJhbnNwYXJlbmN5KCksMTAwLDEwMCwxMDApLDEuMGYpOw0KLQl9DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9TY3JvbGxCYXI6Ok9uTEJ1dHRvbkRvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZykNCi17DQotCUNQV0xfV25kOjpPbkxCdXR0b25Eb3duKHBvaW50LG5GbGFnKTsNCi0NCi0JLy9TZXRGb2N1cygpOw0KLQ0KLQlpZiAoSGFzRmxhZyhQV1NfQVVUT1RSQU5TUEFSRU5UKSkNCi0Jew0KLQkJaWYgKEdldFRyYW5zcGFyZW5jeSgpICE9IDI1NSkNCi0JCXsNCi0JCQlTZXRUcmFuc3BhcmVuY3koMjU1KTsNCi0JCQlJbnZhbGlkYXRlUmVjdCgpOw0KLQkJfQ0KLQl9DQotDQotCUNQREZfUmVjdCByY01pbkFyZWEscmNNYXhBcmVhOw0KLQ0KLQlpZiAobV9wUG9zQnV0dG9uICYmIG1fcFBvc0J1dHRvbi0+SXNWaXNpYmxlKCkpDQotCXsNCi0JCUNQREZfUmVjdCByY0NsaWVudCA9IHRoaXMtPkdldENsaWVudFJlY3QoKTsNCi0JCUNQREZfUmVjdCByY1Bvc0J1dHRvbiA9IG1fcFBvc0J1dHRvbi0+R2V0V2luZG93UmVjdCgpOw0KLQ0KLQkJc3dpdGNoIChtX3NiVHlwZSkNCi0JCXsNCi0JCWNhc2UgU0JUX0hTQ1JPTEw6DQotCQkJcmNNaW5BcmVhID0gQ1BERl9SZWN0KHJjQ2xpZW50LmxlZnQgKyBQV0xfU0NST0xMQkFSX0JVVFRPTl9XSURUSCxyY0NsaWVudC5ib3R0b20sDQotCQkJCQkJCXJjUG9zQnV0dG9uLmxlZnQscmNDbGllbnQudG9wKTsNCi0JCQlyY01heEFyZWEgPSBDUERGX1JlY3QocmNQb3NCdXR0b24ucmlnaHQscmNDbGllbnQuYm90dG9tLA0KLQkJCQkJCQlyY0NsaWVudC5yaWdodCAtIFBXTF9TQ1JPTExCQVJfQlVUVE9OX1dJRFRILHJjQ2xpZW50LnRvcCk7DQotDQotCQkJYnJlYWs7DQotCQljYXNlIFNCVF9WU0NST0xMOg0KLQkJCXJjTWluQXJlYSA9IENQREZfUmVjdChyY0NsaWVudC5sZWZ0LHJjUG9zQnV0dG9uLnRvcCwNCi0JCQkJCQkJcmNDbGllbnQucmlnaHQscmNDbGllbnQudG9wIC0gUFdMX1NDUk9MTEJBUl9CVVRUT05fV0lEVEgpOw0KLQkJCXJjTWF4QXJlYSA9IENQREZfUmVjdChyY0NsaWVudC5sZWZ0LHJjQ2xpZW50LmJvdHRvbSArIFBXTF9TQ1JPTExCQVJfQlVUVE9OX1dJRFRILA0KLQkJCQkJCQlyY0NsaWVudC5yaWdodCxyY1Bvc0J1dHRvbi5ib3R0b20pOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQ0KLQkJcmNNaW5BcmVhLk5vcm1hbGl6ZSgpOw0KLQkJcmNNYXhBcmVhLk5vcm1hbGl6ZSgpOw0KLQ0KLQkJaWYgKHJjTWluQXJlYS5Db250YWlucyhwb2ludC54LHBvaW50LnkpKQ0KLQkJew0KLQkJCW1fc0RhdGEuU3ViQmlnKCk7DQotCQkJTW92ZVBvc0J1dHRvbihUUlVFKTsNCi0JCQlOb3RpZnlTY3JvbGxXaW5kb3coKTsNCi0JCX0NCi0NCi0JCWlmIChyY01heEFyZWEuQ29udGFpbnMocG9pbnQueCxwb2ludC55KSkNCi0JCXsNCi0JCQltX3NEYXRhLkFkZEJpZygpOw0KLQkJCU1vdmVQb3NCdXR0b24oVFJVRSk7DQotCQkJTm90aWZ5U2Nyb2xsV2luZG93KCk7DQotCQl9DQotCX0NCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9TY3JvbGxCYXI6Ok9uTEJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpDQotew0KLQlDUFdMX1duZDo6T25MQnV0dG9uVXAocG9pbnQsbkZsYWcpOw0KLQ0KLQlpZiAoSGFzRmxhZyhQV1NfQVVUT1RSQU5TUEFSRU5UKSkNCi0Jew0KLQkJaWYgKEdldFRyYW5zcGFyZW5jeSgpICE9IFBXTF9TQ1JPTExCQVJfVFJBTlNQQVJBTkNZKQ0KLQkJew0KLQkJCVNldFRyYW5zcGFyZW5jeShQV0xfU0NST0xMQkFSX1RSQU5TUEFSQU5DWSk7DQotCQkJSW52YWxpZGF0ZVJlY3QoKTsNCi0JCX0NCi0JfQ0KLQ0KLQlFbmRUaW1lcigpOw0KLQltX2JNb3VzZURvd24gPSBGQUxTRTsNCi0NCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9TY3JvbGxCYXI6Ok9uTm90aWZ5KENQV0xfV25kKiBwV25kLCBGWF9EV09SRCBtc2csIEZYX0lOVFBUUiB3UGFyYW0sIEZYX0lOVFBUUiBsUGFyYW0pDQotew0KLQlDUFdMX1duZDo6T25Ob3RpZnkocFduZCxtc2csd1BhcmFtLGxQYXJhbSk7DQotDQotCXN3aXRjaCAobXNnKQ0KLQl7DQotCWNhc2UgUE5NX0xCVVRUT05ET1dOOgkJCQ0KLQkJaWYgKHBXbmQgPT0gbV9wTWluQnV0dG9uKQ0KLQkJew0KLQkJCU9uTWluQnV0dG9uTEJEb3duKCooQ1BERl9Qb2ludCopbFBhcmFtKTsNCi0JCX0NCi0NCi0JCWlmIChwV25kID09IG1fcE1heEJ1dHRvbikNCi0JCXsNCi0JCQlPbk1heEJ1dHRvbkxCRG93bigqKENQREZfUG9pbnQqKWxQYXJhbSk7DQotCQl9DQotDQotCQlpZiAocFduZCA9PSBtX3BQb3NCdXR0b24pDQotCQl7DQotCQkJT25Qb3NCdXR0b25MQkRvd24oKihDUERGX1BvaW50KilsUGFyYW0pOwkJCQkNCi0JCX0NCi0JCWJyZWFrOw0KLQljYXNlIFBOTV9MQlVUVE9OVVA6DQotCQlpZiAocFduZCA9PSBtX3BNaW5CdXR0b24pDQotCQl7DQotCQkJT25NaW5CdXR0b25MQlVwKCooQ1BERl9Qb2ludCopbFBhcmFtKTsJCQ0KLQkJfQ0KLQ0KLQkJaWYgKHBXbmQgPT0gbV9wTWF4QnV0dG9uKQ0KLQkJew0KLQkJCU9uTWF4QnV0dG9uTEJVcCgqKENQREZfUG9pbnQqKWxQYXJhbSk7CQkJCQ0KLQkJfQ0KLQ0KLQkJaWYgKHBXbmQgPT0gbV9wUG9zQnV0dG9uKQ0KLQkJew0KLQkJCU9uUG9zQnV0dG9uTEJVcCgqKENQREZfUG9pbnQqKWxQYXJhbSk7CQkJDQotCQl9DQotCQlicmVhazsNCi0JY2FzZSBQTk1fTU9VU0VNT1ZFOg0KLQkJaWYgKHBXbmQgPT0gbV9wTWluQnV0dG9uKQ0KLQkJew0KLQkJCU9uTWluQnV0dG9uTW91c2VNb3ZlKCooQ1BERl9Qb2ludCopbFBhcmFtKTsNCi0JCX0NCi0NCi0JCWlmIChwV25kID09IG1fcE1heEJ1dHRvbikNCi0JCXsNCi0JCQlPbk1heEJ1dHRvbk1vdXNlTW92ZSgqKENQREZfUG9pbnQqKWxQYXJhbSk7CQkJCQ0KLQkJfQ0KLQ0KLQkJaWYgKHBXbmQgPT0gbV9wUG9zQnV0dG9uKQ0KLQkJew0KLQkJCU9uUG9zQnV0dG9uTW91c2VNb3ZlKCooQ1BERl9Qb2ludCopbFBhcmFtKTsJCQkJDQotCQl9DQotCQlicmVhazsNCi0JY2FzZSBQTk1fU0VUU0NST0xMSU5GTzoNCi0JCXsNCi0JCQlpZiAoUFdMX1NDUk9MTF9JTkZPICogcEluZm8gPSAoUFdMX1NDUk9MTF9JTkZPKilsUGFyYW0pDQotCQkJew0KLQkJCQlpZiAoRlhTWVNfbWVtY21wKCZtX09yaWdpbkluZm8sIHBJbmZvLCBzaXplb2YoUFdMX1NDUk9MTF9JTkZPKSkgIT0gMCkNCi0JCQkJew0KLQkJCQkJbV9PcmlnaW5JbmZvID0gKnBJbmZvOw0KLQkJCQkJRlhfRkxPQVQgZk1heCA9IHBJbmZvLT5mQ29udGVudE1heCAtIHBJbmZvLT5mQ29udGVudE1pbiAtIHBJbmZvLT5mUGxhdGVXaWR0aDsNCi0JCQkJCWZNYXggPSBmTWF4ID4gMC4wZiA/IGZNYXggOiAwLjBmOw0KLQkJCQkJdGhpcy0+U2V0U2Nyb2xsUmFuZ2UoMCxmTWF4LCBwSW5mby0+ZlBsYXRlV2lkdGgpOw0KLQkJCQkJdGhpcy0+U2V0U2Nyb2xsU3RlcChwSW5mby0+ZkJpZ1N0ZXAscEluZm8tPmZTbWFsbFN0ZXApOw0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgUE5NX1NFVFNDUk9MTFBPUzoNCi0JCXsNCi0JCQlGWF9GTE9BVCBmUG9zID0gKihGWF9GTE9BVCopbFBhcmFtOw0KLQkJCXN3aXRjaCAodGhpcy0+bV9zYlR5cGUpDQotCQkJew0KLQkJCWNhc2UgU0JUX0hTQ1JPTEw6DQotCQkJCWZQb3MgPSBmUG9zIC0gbV9PcmlnaW5JbmZvLmZDb250ZW50TWluOw0KLQkJCQlicmVhazsNCi0JCQljYXNlIFNCVF9WU0NST0xMOg0KLQkJCQlmUG9zID0gbV9PcmlnaW5JbmZvLmZDb250ZW50TWF4IC0gZlBvczsNCi0JCQkJYnJlYWs7DQotCQkJfQ0KLQkJCXRoaXMtPlNldFNjcm9sbFBvcyhmUG9zKTsNCi0JCX0NCi0JCWJyZWFrOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9TY3JvbGxCYXI6OkNyZWF0ZUJ1dHRvbnMoY29uc3QgUFdMX0NSRUFURVBBUkFNICYgY3ApDQotew0KLQlQV0xfQ1JFQVRFUEFSQU0Jc2NwID0gY3A7DQotCXNjcC5wUGFyZW50V25kID0gdGhpczsNCi0Jc2NwLmR3Qm9yZGVyV2lkdGggPSAyOw0KLQlzY3AubkJvcmRlclN0eWxlID0gUEJTX0JFVkVMRUQ7DQotCQ0KLQlzY3AuZHdGbGFncyA9IFBXU19WSVNJQkxFIHwgUFdTX0NISUxEIHwgUFdTX0JPUkRFUiB8IFBXU19CQUNLR1JPVU5EIHwgUFdTX05PUkVGUkVTSENMSVA7DQotDQotCWlmICghbV9wTWluQnV0dG9uKSANCi0Jew0KLQkJbV9wTWluQnV0dG9uID0gbmV3IENQV0xfU0JCdXR0b24obV9zYlR5cGUsUFNCVF9NSU4pOw0KLQkJbV9wTWluQnV0dG9uLT5DcmVhdGUoc2NwKTsNCi0JfQ0KLQ0KLQlpZiAoIW1fcE1heEJ1dHRvbikNCi0Jew0KLQkJbV9wTWF4QnV0dG9uID0gbmV3IENQV0xfU0JCdXR0b24obV9zYlR5cGUsUFNCVF9NQVgpOw0KLQkJbV9wTWF4QnV0dG9uLT5DcmVhdGUoc2NwKTsNCi0JfQ0KLQ0KLQlpZiAoIW1fcFBvc0J1dHRvbikNCi0Jew0KLQkJbV9wUG9zQnV0dG9uID0gbmV3IENQV0xfU0JCdXR0b24obV9zYlR5cGUsUFNCVF9QT1MpOw0KLQkJbV9wUG9zQnV0dG9uLT5TZXRWaXNpYmxlKEZBTFNFKTsNCi0JCW1fcFBvc0J1dHRvbi0+Q3JlYXRlKHNjcCk7DQotCX0NCi19DQotDQotRlhfRkxPQVQgQ1BXTF9TY3JvbGxCYXI6OkdldFNjcm9sbEJhcldpZHRoKCkgY29uc3QNCi17DQotCWlmICghSXNWaXNpYmxlKCkpIHJldHVybiAwOw0KLQ0KLQlyZXR1cm4gUFdMX1NDUk9MTEJBUl9XSURUSDsNCi19DQotDQotdm9pZCBDUFdMX1Njcm9sbEJhcjo6U2V0U2Nyb2xsUmFuZ2UoRlhfRkxPQVQgZk1pbixGWF9GTE9BVCBmTWF4LEZYX0ZMT0FUIGZDbGllbnRXaWR0aCkNCi17DQotCWlmIChtX3BQb3NCdXR0b24pDQotCXsNCi0JCW1fc0RhdGEuU2V0U2Nyb2xsUmFuZ2UoZk1pbixmTWF4KTsNCi0JCW1fc0RhdGEuU2V0Q2xpZW50V2lkdGgoZkNsaWVudFdpZHRoKTsNCi0NCi0JCWlmIChJc0Zsb2F0U21hbGxlcihtX3NEYXRhLlNjcm9sbFJhbmdlLkdldFdpZHRoKCksIDAuMGYpKQ0KLQkJew0KLQkJCW1fcFBvc0J1dHRvbi0+U2V0VmlzaWJsZShGQUxTRSk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJbV9wUG9zQnV0dG9uLT5TZXRWaXNpYmxlKFRSVUUpOwkNCi0JCQlNb3ZlUG9zQnV0dG9uKFRSVUUpOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9TY3JvbGxCYXI6OlNldFNjcm9sbFBvcyhGWF9GTE9BVCBmUG9zKQ0KLXsNCi0JRlhfRkxPQVQgZk9sZFBvcyA9IG1fc0RhdGEuZlNjcm9sbFBvczsNCi0NCi0JbV9zRGF0YS5TZXRQb3MoZlBvcyk7DQotDQotCWlmICghSXNGbG9hdEVxdWFsKG1fc0RhdGEuZlNjcm9sbFBvcywgZk9sZFBvcykpDQotCQlNb3ZlUG9zQnV0dG9uKFRSVUUpOw0KLX0NCi0NCi12b2lkIENQV0xfU2Nyb2xsQmFyOjpTZXRTY3JvbGxTdGVwKEZYX0ZMT0FUIGZCaWdTdGVwLEZYX0ZMT0FUIGZTbWFsbFN0ZXApDQotew0KLQltX3NEYXRhLlNldEJpZ1N0ZXAoZkJpZ1N0ZXApOw0KLQltX3NEYXRhLlNldFNtYWxsU3RlcChmU21hbGxTdGVwKTsNCi19DQotDQotdm9pZCBDUFdMX1Njcm9sbEJhcjo6TW92ZVBvc0J1dHRvbihGWF9CT09MIGJSZWZyZXNoKQ0KLXsNCi0JQVNTRVJUIChtX3BQb3NCdXR0b24gIT0gTlVMTCk7DQotCUFTU0VSVCAobV9wTWluQnV0dG9uICE9IE5VTEwpOw0KLQlBU1NFUlQgKG1fcE1heEJ1dHRvbiAhPSBOVUxMKTsNCi0NCi0JaWYgKG1fcFBvc0J1dHRvbi0+SXNWaXNpYmxlKCkpDQotCXsNCi0NCi0NCi0NCi0NCi0JCUNQREZfUmVjdCByY0NsaWVudDsNCi0JCUNQREZfUmVjdCByY1Bvc0FyZWEscmNQb3NCdXR0b247CQ0KLQ0KLQkJcmNDbGllbnQgPSB0aGlzLT5HZXRDbGllbnRSZWN0KCk7DQotCQlyY1Bvc0FyZWEgPSBHZXRTY3JvbGxBcmVhKCk7DQotDQotCQlGWF9GTE9BVCBmTGVmdCxmUmlnaHQsZlRvcCxmQm90dG9tOw0KLQ0KLQkJc3dpdGNoIChtX3NiVHlwZSkNCi0JCXsNCi0JCWNhc2UgU0JUX0hTQ1JPTEw6DQotCQkJZkxlZnQgPSBUcnVlVG9GYWNlKG1fc0RhdGEuZlNjcm9sbFBvcyk7DQotCQkJZlJpZ2h0ID0gVHJ1ZVRvRmFjZShtX3NEYXRhLmZTY3JvbGxQb3MgKyBtX3NEYXRhLmZDbGllbnRXaWR0aCk7DQotDQotCQkJaWYgKGZSaWdodCAtIGZMZWZ0IDwgUFdMX1NDUk9MTEJBUl9QT1NCVVRUT05fTUlOV0lEVEgpDQotCQkJCWZSaWdodCA9IGZMZWZ0ICsgUFdMX1NDUk9MTEJBUl9QT1NCVVRUT05fTUlOV0lEVEg7DQotDQotCQkJaWYgKGZSaWdodCA+IHJjUG9zQXJlYS5yaWdodCkNCi0JCQl7DQotCQkJCWZSaWdodCA9IHJjUG9zQXJlYS5yaWdodDsNCi0JCQkJZkxlZnQgPSBmUmlnaHQgLSBQV0xfU0NST0xMQkFSX1BPU0JVVFRPTl9NSU5XSURUSDsNCi0JCQl9DQotDQotCQkJcmNQb3NCdXR0b24gPSBDUERGX1JlY3QoZkxlZnQgLA0KLQkJCQkJCQkJcmNQb3NBcmVhLmJvdHRvbSwNCi0JCQkJCQkJCWZSaWdodCAsDQotCQkJCQkJCQlyY1Bvc0FyZWEudG9wKTsNCi0JCQkNCi0JCQlicmVhazsNCi0JCWNhc2UgU0JUX1ZTQ1JPTEw6DQotCQkJZkJvdHRvbSA9IFRydWVUb0ZhY2UobV9zRGF0YS5mU2Nyb2xsUG9zICsgbV9zRGF0YS5mQ2xpZW50V2lkdGgpOw0KLQkJCWZUb3AgPSBUcnVlVG9GYWNlKG1fc0RhdGEuZlNjcm9sbFBvcyk7DQotDQotCQkJaWYgKElzRmxvYXRTbWFsbGVyKGZUb3AgLSBmQm90dG9tLCBQV0xfU0NST0xMQkFSX1BPU0JVVFRPTl9NSU5XSURUSCkpDQotCQkJCWZCb3R0b20gPSBmVG9wIC0gUFdMX1NDUk9MTEJBUl9QT1NCVVRUT05fTUlOV0lEVEg7DQotCQkJDQotCQkJaWYgKElzRmxvYXRTbWFsbGVyKGZCb3R0b20sIHJjUG9zQXJlYS5ib3R0b20pKQ0KLQkJCXsNCi0JCQkJZkJvdHRvbSA9IHJjUG9zQXJlYS5ib3R0b207DQotCQkJCWZUb3AgPSBmQm90dG9tICsgUFdMX1NDUk9MTEJBUl9QT1NCVVRUT05fTUlOV0lEVEg7DQotCQkJfQ0KLQ0KLQkJCXJjUG9zQnV0dG9uID0gQ1BERl9SZWN0KHJjUG9zQXJlYS5sZWZ0LA0KLQkJCQkJCQkJZkJvdHRvbSwJCQkJCQkJCQ0KLQkJCQkJCQkJcmNQb3NBcmVhLnJpZ2h0LA0KLQkJCQkJCQkJZlRvcCk7DQotCQkJDQotCQkJYnJlYWs7DQotCQl9DQotDQotCQltX3BQb3NCdXR0b24tPk1vdmUocmNQb3NCdXR0b24sVFJVRSxiUmVmcmVzaCk7DQotCX0NCi19DQotDQotdm9pZCBDUFdMX1Njcm9sbEJhcjo6T25NaW5CdXR0b25MQkRvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KQ0KLXsNCi0JbV9zRGF0YS5TdWJTbWFsbCgpOw0KLQlNb3ZlUG9zQnV0dG9uKFRSVUUpOw0KLQlOb3RpZnlTY3JvbGxXaW5kb3coKTsNCi0NCi0JbV9iTWluT3JNYXggPSBUUlVFOw0KLQ0KLQlFbmRUaW1lcigpOw0KLQlCZWdpblRpbWVyKDEwMCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9TY3JvbGxCYXI6Ok9uTWluQnV0dG9uTEJVcChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpDQotew0KLX0NCi0NCi12b2lkIENQV0xfU2Nyb2xsQmFyOjpPbk1pbkJ1dHRvbk1vdXNlTW92ZShjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpDQotewkNCi19DQotDQotdm9pZCBDUFdMX1Njcm9sbEJhcjo6T25NYXhCdXR0b25MQkRvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KQ0KLXsNCi0JbV9zRGF0YS5BZGRTbWFsbCgpOw0KLQlNb3ZlUG9zQnV0dG9uKFRSVUUpOw0KLQlOb3RpZnlTY3JvbGxXaW5kb3coKTsNCi0NCi0JbV9iTWluT3JNYXggPSBGQUxTRTsNCi0JDQotCUVuZFRpbWVyKCk7DQotCUJlZ2luVGltZXIoMTAwKTsNCi19DQotDQotdm9pZCBDUFdMX1Njcm9sbEJhcjo6T25NYXhCdXR0b25MQlVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkNCi17DQotfQ0KLQ0KLXZvaWQgQ1BXTF9TY3JvbGxCYXI6Ok9uTWF4QnV0dG9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkNCi17CQ0KLX0NCi0NCi12b2lkIENQV0xfU2Nyb2xsQmFyOjpPblBvc0J1dHRvbkxCRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpDQotew0KLQltX2JNb3VzZURvd24gPSBUUlVFOw0KLQ0KLQlpZiAobV9wUG9zQnV0dG9uKQ0KLQl7DQotCQlDUERGX1JlY3QgcmNQb3NCdXR0b24gPSBtX3BQb3NCdXR0b24tPkdldFdpbmRvd1JlY3QoKTsNCi0NCi0JCXN3aXRjaChtX3NiVHlwZSkNCi0JCXsNCi0JCWNhc2UgU0JUX0hTQ1JPTEw6DQotCQkJbV9uT2xkUG9zID0gcG9pbnQueDsNCi0JCQltX2ZPbGRQb3NCdXR0b24gPSByY1Bvc0J1dHRvbi5sZWZ0Ow0KLQkJCWJyZWFrOw0KLQkJY2FzZSBTQlRfVlNDUk9MTDoNCi0JCQltX25PbGRQb3MgPSBwb2ludC55Ow0KLQkJCW1fZk9sZFBvc0J1dHRvbiA9IHJjUG9zQnV0dG9uLnRvcDsNCi0JCQlicmVhazsNCi0JCX0NCi0JfQ0KLX0NCi0NCi12b2lkIENQV0xfU2Nyb2xsQmFyOjpPblBvc0J1dHRvbkxCVXAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KQ0KLXsNCi0JaWYgKG1fYk1vdXNlRG93bikNCi0Jew0KLQkJaWYgKCFtX2JOb3RpZnlGb3JldmVyKQ0KLQkJCU5vdGlmeVNjcm9sbFdpbmRvdygpOw0KLQl9DQotCW1fYk1vdXNlRG93biA9IEZBTFNFOw0KLX0NCi0NCi12b2lkIENQV0xfU2Nyb2xsQmFyOjpPblBvc0J1dHRvbk1vdXNlTW92ZShjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpDQotew0KLQlGWF9GTE9BVCBmT2xkU2Nyb2xsUG9zID0gbV9zRGF0YS5mU2Nyb2xsUG9zOw0KLQ0KLQlGWF9GTE9BVCBmTmV3UG9zID0gMDsNCi0NCi0Jc3dpdGNoIChtX3NiVHlwZSkNCi0Jew0KLQljYXNlIFNCVF9IU0NST0xMOg0KLQkJaWYgKEZYU1lTX2ZhYnMocG9pbnQueCAtIG1fbk9sZFBvcykgPCAxKSByZXR1cm47DQotCQlmTmV3UG9zID0gRmFjZVRvVHJ1ZShtX2ZPbGRQb3NCdXR0b24gKyBwb2ludC54IC0gbV9uT2xkUG9zKTsNCi0JCWJyZWFrOw0KLQljYXNlIFNCVF9WU0NST0xMOg0KLQkJaWYgKEZYU1lTX2ZhYnMocG9pbnQueSAtIG1fbk9sZFBvcykgPCAxKSByZXR1cm47DQotCQlmTmV3UG9zID0gRmFjZVRvVHJ1ZShtX2ZPbGRQb3NCdXR0b24gKyBwb2ludC55IC0gbV9uT2xkUG9zKTsNCi0JCWJyZWFrOw0KLQl9DQotDQotCWlmIChtX2JNb3VzZURvd24pDQotCXsNCi0JCXN3aXRjaCAobV9zYlR5cGUpDQotCQl7DQotCQljYXNlIFNCVF9IU0NST0xMOg0KLQ0KLQkJCWlmIChJc0Zsb2F0U21hbGxlcihmTmV3UG9zLCBtX3NEYXRhLlNjcm9sbFJhbmdlLmZNaW4pKQ0KLQkJCXsNCi0JCQkJZk5ld1BvcyA9IG1fc0RhdGEuU2Nyb2xsUmFuZ2UuZk1pbjsNCi0JCQl9DQotDQotCQkJaWYgKElzRmxvYXRCaWdnZXIoZk5ld1BvcywgbV9zRGF0YS5TY3JvbGxSYW5nZS5mTWF4KSkNCi0JCQl7DQotCQkJCWZOZXdQb3MgPSBtX3NEYXRhLlNjcm9sbFJhbmdlLmZNYXg7DQotCQkJfQ0KLQ0KLQkJCW1fc0RhdGEuU2V0UG9zKGZOZXdQb3MpOw0KLQkJCQ0KLQkJCWJyZWFrOw0KLQkJY2FzZSBTQlRfVlNDUk9MTDoNCi0JCQ0KLQkJCWlmIChJc0Zsb2F0U21hbGxlcihmTmV3UG9zLCBtX3NEYXRhLlNjcm9sbFJhbmdlLmZNaW4pKQ0KLQkJCXsNCi0JCQkJZk5ld1BvcyA9IG1fc0RhdGEuU2Nyb2xsUmFuZ2UuZk1pbjsNCi0JCQl9DQotDQotCQkJaWYgKElzRmxvYXRCaWdnZXIoZk5ld1BvcywgbV9zRGF0YS5TY3JvbGxSYW5nZS5mTWF4KSkNCi0JCQl7DQotCQkJCWZOZXdQb3MgPSBtX3NEYXRhLlNjcm9sbFJhbmdlLmZNYXg7DQotCQkJfQkNCi0NCi0JCQltX3NEYXRhLlNldFBvcyhmTmV3UG9zKTsNCi0JCQ0KLQkJCWJyZWFrOw0KLQkJfQkNCi0JCQ0KLQkJaWYgKCFJc0Zsb2F0RXF1YWwoZk9sZFNjcm9sbFBvcywgbV9zRGF0YS5mU2Nyb2xsUG9zKSkNCi0JCXsJCQkNCi0JCQlNb3ZlUG9zQnV0dG9uKFRSVUUpOw0KLQ0KLQkJCWlmIChtX2JOb3RpZnlGb3JldmVyKQ0KLQkJCQlOb3RpZnlTY3JvbGxXaW5kb3coKTsNCi0JCX0NCi0JfQ0KLX0NCi0NCi12b2lkIENQV0xfU2Nyb2xsQmFyOjpOb3RpZnlTY3JvbGxXaW5kb3coKQ0KLXsNCi0JaWYgKENQV0xfV25kICogcFBhcmVudCA9IHRoaXMtPkdldFBhcmVudFdpbmRvdygpKQ0KLQl7DQotCQlGWF9GTE9BVCBmUG9zOw0KLQkJc3dpdGNoICh0aGlzLT5tX3NiVHlwZSkNCi0JCXsNCi0JCWNhc2UgU0JUX0hTQ1JPTEw6DQotCQkJZlBvcyA9IG1fT3JpZ2luSW5mby5mQ29udGVudE1pbiArIG1fc0RhdGEuZlNjcm9sbFBvczsNCi0JCQlicmVhazsNCi0JCWNhc2UgU0JUX1ZTQ1JPTEw6DQotCQkJZlBvcyA9IG1fT3JpZ2luSW5mby5mQ29udGVudE1heCAtIG1fc0RhdGEuZlNjcm9sbFBvczsNCi0JCQlicmVhazsNCi0JCX0JDQotCQlwUGFyZW50LT5Pbk5vdGlmeSh0aGlzLFBOTV9TQ1JPTExXSU5ET1csKEZYX0lOVFBUUiltX3NiVHlwZSwoRlhfSU5UUFRSKSZmUG9zKTsNCi0JfQ0KLX0NCi0NCi1DUERGX1JlY3QgQ1BXTF9TY3JvbGxCYXI6OkdldFNjcm9sbEFyZWEoKSBjb25zdA0KLXsNCi0JQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOw0KLQlDUERGX1JlY3QgcmNBcmVhOw0KLQ0KLQlpZiAoIW1fcE1pbkJ1dHRvbiB8fCAhbV9wTWF4QnV0dG9uKXJldHVybiByY0NsaWVudDsNCi0NCi0JQ1BERl9SZWN0IHJjTWluID0gbV9wTWluQnV0dG9uLT5HZXRXaW5kb3dSZWN0KCk7DQotCUNQREZfUmVjdCByY01heCA9IG1fcE1heEJ1dHRvbi0+R2V0V2luZG93UmVjdCgpOw0KLQ0KLQlGWF9GTE9BVCBmTWluV2lkdGggPSByY01pbi5yaWdodCAtIHJjTWluLmxlZnQ7DQotCUZYX0ZMT0FUIGZNaW5IZWlnaHQgPSByY01pbi50b3AgLSByY01pbi5ib3R0b207DQotCUZYX0ZMT0FUIGZNYXhXaWR0aCA9IHJjTWF4LnJpZ2h0IC0gcmNNYXgubGVmdDsNCi0JRlhfRkxPQVQgZk1heEhlaWdodCA9IHJjTWF4LnRvcCAtIHJjTWF4LmJvdHRvbTsNCi0NCi0Jc3dpdGNoKG1fc2JUeXBlKQ0KLQl7DQotCWNhc2UgU0JUX0hTQ1JPTEw6DQotCQlpZiAocmNDbGllbnQucmlnaHQgLSByY0NsaWVudC5sZWZ0ID4gZk1pbldpZHRoICsgZk1heFdpZHRoICsgMikNCi0JCXsNCi0JCQlyY0FyZWEgPSBDUERGX1JlY3QocmNDbGllbnQubGVmdCArIGZNaW5XaWR0aCArIDEscmNDbGllbnQuYm90dG9tLA0KLQkJCQkJCXJjQ2xpZW50LnJpZ2h0IC0gZk1heFdpZHRoIC0gMSxyY0NsaWVudC50b3ApOw0KLQkJfQ0KLQkJZWxzZQ0KLQkJew0KLQkJCXJjQXJlYSA9IENQREZfUmVjdChyY0NsaWVudC5sZWZ0ICsgZk1pbldpZHRoICsgMSxyY0NsaWVudC5ib3R0b20sDQotCQkJCQkJcmNDbGllbnQubGVmdCArIGZNaW5XaWR0aCArIDEscmNDbGllbnQudG9wKTsNCi0JCX0NCi0JCWJyZWFrOw0KLQljYXNlIFNCVF9WU0NST0xMOg0KLQkJaWYgKHJjQ2xpZW50LnRvcCAtIHJjQ2xpZW50LmJvdHRvbSA+IGZNaW5IZWlnaHQgKyBmTWF4SGVpZ2h0ICsgMikNCi0JCXsNCi0JCQlyY0FyZWEgPSBDUERGX1JlY3QocmNDbGllbnQubGVmdCxyY0NsaWVudC5ib3R0b20gKyBmTWluSGVpZ2h0ICsgMSwNCi0JCQkJCQlyY0NsaWVudC5yaWdodCxyY0NsaWVudC50b3AgLSBmTWF4SGVpZ2h0IC0gMSk7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJcmNBcmVhID0gQ1BERl9SZWN0KHJjQ2xpZW50LmxlZnQscmNDbGllbnQuYm90dG9tICsgZk1pbkhlaWdodCArIDEsDQotCQkJCQkJcmNDbGllbnQucmlnaHQscmNDbGllbnQuYm90dG9tICsgZk1pbkhlaWdodCArIDEpOw0KLQkJfQ0KLQkJYnJlYWs7DQotCX0NCi0JDQotCXJjQXJlYS5Ob3JtYWxpemUoKTsNCi0NCi0JcmV0dXJuIHJjQXJlYTsNCi19DQotDQotRlhfRkxPQVQgQ1BXTF9TY3JvbGxCYXI6OlRydWVUb0ZhY2UoRlhfRkxPQVQgZlRydWUpDQotew0KLQlDUERGX1JlY3QgcmNQb3NBcmVhOwkNCi0JcmNQb3NBcmVhID0gR2V0U2Nyb2xsQXJlYSgpOw0KLQ0KLQlGWF9GTE9BVCBmRmFjdFdpZHRoID0gbV9zRGF0YS5TY3JvbGxSYW5nZS5HZXRXaWR0aCgpICsgbV9zRGF0YS5mQ2xpZW50V2lkdGg7DQotCWZGYWN0V2lkdGggPSBmRmFjdFdpZHRoID09IDAgPyAxIDogZkZhY3RXaWR0aDsNCi0NCi0JRlhfRkxPQVQgZkZhY2UgPSAwOw0KLQ0KLQlzd2l0Y2gobV9zYlR5cGUpDQotCXsNCi0JY2FzZSBTQlRfSFNDUk9MTDoNCi0JCWZGYWNlID0gcmNQb3NBcmVhLmxlZnQgKyBmVHJ1ZSAqIChyY1Bvc0FyZWEucmlnaHQgLSByY1Bvc0FyZWEubGVmdCkgLyBmRmFjdFdpZHRoOw0KLQkJYnJlYWs7DQotCWNhc2UgU0JUX1ZTQ1JPTEw6DQotCQlmRmFjZSA9IHJjUG9zQXJlYS50b3AgLSBmVHJ1ZSAqIChyY1Bvc0FyZWEudG9wIC0gcmNQb3NBcmVhLmJvdHRvbSkgLyBmRmFjdFdpZHRoOw0KLQkJYnJlYWs7DQotCX0JDQotDQotCXJldHVybiBmRmFjZTsNCi19DQotDQotRlhfRkxPQVQgQ1BXTF9TY3JvbGxCYXI6OkZhY2VUb1RydWUoRlhfRkxPQVQgZkZhY2UpDQotew0KLQlDUERGX1JlY3QgcmNQb3NBcmVhOwkNCi0JcmNQb3NBcmVhID0gR2V0U2Nyb2xsQXJlYSgpOw0KLQ0KLQlGWF9GTE9BVCBmRmFjdFdpZHRoID0gbV9zRGF0YS5TY3JvbGxSYW5nZS5HZXRXaWR0aCgpICsgbV9zRGF0YS5mQ2xpZW50V2lkdGg7DQotCWZGYWN0V2lkdGggPSBmRmFjdFdpZHRoID09IDAgPyAxIDogZkZhY3RXaWR0aDsNCi0NCi0JRlhfRkxPQVQgZlRydWUgPSAwOw0KLQ0KLQlzd2l0Y2gobV9zYlR5cGUpDQotCXsNCi0JY2FzZSBTQlRfSFNDUk9MTDoNCi0JCWZUcnVlID0gIChmRmFjZSAtIHJjUG9zQXJlYS5sZWZ0KSAqIGZGYWN0V2lkdGggLyAocmNQb3NBcmVhLnJpZ2h0IC0gcmNQb3NBcmVhLmxlZnQpOw0KLQkJYnJlYWs7DQotCWNhc2UgU0JUX1ZTQ1JPTEw6DQotCQlmVHJ1ZSA9IChyY1Bvc0FyZWEudG9wIC0gZkZhY2UpICogZkZhY3RXaWR0aCAvIChyY1Bvc0FyZWEudG9wIC0gcmNQb3NBcmVhLmJvdHRvbSk7DQotCQlicmVhazsNCi0JfQkNCi0NCi0JcmV0dXJuIGZUcnVlOw0KLX0NCi0NCi12b2lkIENQV0xfU2Nyb2xsQmFyOjpDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCkNCi17DQotCUNyZWF0ZUJ1dHRvbnMoY3ApOw0KLX0NCi0NCi12b2lkIENQV0xfU2Nyb2xsQmFyOjpUaW1lclByb2MoKQ0KLXsNCi0JUFdMX1NDUk9MTF9QUklWQVRFREFUQSBzVGVtcCA9IG1fc0RhdGE7DQotDQotCWlmIChtX2JNaW5Pck1heCltX3NEYXRhLlN1YlNtYWxsKCk7CQ0KLQllbHNlIG1fc0RhdGEuQWRkU21hbGwoKTsNCi0NCi0JaWYgKEZYU1lTX21lbWNtcCgmbV9zRGF0YSwgJnNUZW1wLCBzaXplb2YoUFdMX1NDUk9MTF9QUklWQVRFREFUQSkpICE9IDApDQotCXsNCi0JCU1vdmVQb3NCdXR0b24oVFJVRSk7DQotCQlOb3RpZnlTY3JvbGxXaW5kb3coKTsNCi0JfQ0KLX0NCi0NCi0vKg0KLXZvaWQgQ1BXTF9TY3JvbGxCYXI6Ok9uU2V0Rm9jdXMoKQ0KLXsNCi0JaWYgKEdldFRyYW5zcGFyZW5jeSgpICE9IDI1NSkNCi0Jew0KLQkJU2V0VHJhbnNwYXJlbmN5KDI1NSk7DQotCQlJbnZhbGlkYXRlUmVjdCgpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9TY3JvbGxCYXI6Ok9uS2lsbEZvY3VzKCkNCi17DQotCWlmIChHZXRUcmFuc3BhcmVuY3koKSAhPSBQV0xfU0NST0xMQkFSX1RSQU5TUEFSQU5DWSkNCi0Jew0KLQkJU2V0VHJhbnNwYXJlbmN5KFBXTF9TQ1JPTExCQVJfVFJBTlNQQVJBTkNZKTsNCi0JCUludmFsaWRhdGVSZWN0KCk7DQotCX0NCi19DQotKi8NCi0NCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUERGV2luZG93LmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1duZC5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9TY3JvbGxCYXIuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfVXRpbHMuaCIKKworI2RlZmluZSBJc0Zsb2F0WmVybyhmKQkJCQkJCSgoZikgPCAwLjAwMDEgJiYgKGYpID4gLTAuMDAwMSkKKyNkZWZpbmUgSXNGbG9hdEJpZ2dlcihmYSxmYikJCQkJKChmYSkgPiAoZmIpICYmICFJc0Zsb2F0WmVybygoZmEpIC0gKGZiKSkpCisjZGVmaW5lIElzRmxvYXRTbWFsbGVyKGZhLGZiKQkJCQkoKGZhKSA8IChmYikgJiYgIUlzRmxvYXRaZXJvKChmYSkgLSAoZmIpKSkKKyNkZWZpbmUgSXNGbG9hdEVxdWFsKGZhLGZiKQkJCQkJSXNGbG9hdFplcm8oKGZhKS0oZmIpKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUFdMX0ZMT0FUUkFOR0UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitQV0xfRkxPQVRSQU5HRTo6UFdMX0ZMT0FUUkFOR0UoKQoreworCURlZmF1bHQoKTsKK30KKworUFdMX0ZMT0FUUkFOR0U6OlBXTF9GTE9BVFJBTkdFKEZYX0ZMT0FUIG1pbixGWF9GTE9BVCBtYXgpCit7CisJU2V0KG1pbixtYXgpOworfQorCit2b2lkIFBXTF9GTE9BVFJBTkdFOjpEZWZhdWx0KCkKK3sKKwlmTWluID0gMDsKKwlmTWF4ID0gMDsKK30KKwordm9pZCBQV0xfRkxPQVRSQU5HRTo6U2V0KEZYX0ZMT0FUIG1pbixGWF9GTE9BVCBtYXgpCit7CisJaWYgKG1pbiA+IG1heCkKKwl7CisJCWZNaW4gPSBtYXg7CisJCWZNYXggPSBtaW47CisJfQorCWVsc2UKKwl7CisJCWZNaW4gPSBtaW47CisJCWZNYXggPSBtYXg7CisJfQorfQorCitGWF9CT09MCVBXTF9GTE9BVFJBTkdFOjpJbihGWF9GTE9BVCB4KSBjb25zdAoreworCXJldHVybiAoSXNGbG9hdEJpZ2dlcih4LGZNaW4pIHx8IElzRmxvYXRFcXVhbCh4LCBmTWluKSkgJiYgCisJCShJc0Zsb2F0U21hbGxlcih4LCBmTWF4KSB8fCBJc0Zsb2F0RXF1YWwoeCwgZk1heCkpOworfQorCitGWF9GTE9BVCBQV0xfRkxPQVRSQU5HRTo6R2V0V2lkdGgoKSBjb25zdAoreworCXJldHVybiBmTWF4IC0gZk1pbjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQV0xfU0NST0xMX1BSSVZBVEVEQVRBIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworUFdMX1NDUk9MTF9QUklWQVRFREFUQTo6UFdMX1NDUk9MTF9QUklWQVRFREFUQSgpCit7CisJRGVmYXVsdCgpOworfQorCit2b2lkIFBXTF9TQ1JPTExfUFJJVkFURURBVEE6OkRlZmF1bHQoKQoreworCVNjcm9sbFJhbmdlLkRlZmF1bHQoKTsKKwlmU2Nyb2xsUG9zID0gU2Nyb2xsUmFuZ2UuZk1pbjsKKwlmQ2xpZW50V2lkdGggPSAwOworCWZCaWdTdGVwID0gMTA7CisJZlNtYWxsU3RlcCA9IDE7Cit9CisKK3ZvaWQgUFdMX1NDUk9MTF9QUklWQVRFREFUQTo6U2V0U2Nyb2xsUmFuZ2UoRlhfRkxPQVQgbWluLEZYX0ZMT0FUIG1heCkKK3sKKwlTY3JvbGxSYW5nZS5TZXQobWluLG1heCk7CisKKwlpZiAoSXNGbG9hdFNtYWxsZXIoZlNjcm9sbFBvcywgU2Nyb2xsUmFuZ2UuZk1pbikpCisJCWZTY3JvbGxQb3MgPSBTY3JvbGxSYW5nZS5mTWluOworCWlmIChJc0Zsb2F0QmlnZ2VyKGZTY3JvbGxQb3MsIFNjcm9sbFJhbmdlLmZNYXgpKQorCQlmU2Nyb2xsUG9zID0gU2Nyb2xsUmFuZ2UuZk1heDsJCQorfQorCit2b2lkIFBXTF9TQ1JPTExfUFJJVkFURURBVEE6OlNldENsaWVudFdpZHRoKEZYX0ZMT0FUIHdpZHRoKQoreworCWZDbGllbnRXaWR0aCA9IHdpZHRoOworfQorCit2b2lkIFBXTF9TQ1JPTExfUFJJVkFURURBVEE6OlNldFNtYWxsU3RlcChGWF9GTE9BVCBzdGVwKQoreworCWZTbWFsbFN0ZXAgPSBzdGVwOworfQorCit2b2lkIFBXTF9TQ1JPTExfUFJJVkFURURBVEE6OlNldEJpZ1N0ZXAoRlhfRkxPQVQgc3RlcCkKK3sKKwlmQmlnU3RlcCA9IHN0ZXA7Cit9CisKK0ZYX0JPT0wgUFdMX1NDUk9MTF9QUklWQVRFREFUQTo6U2V0UG9zKEZYX0ZMT0FUIHBvcykKK3sKKwlpZiAoU2Nyb2xsUmFuZ2UuSW4ocG9zKSkKKwl7CisJCWZTY3JvbGxQb3MgPSBwb3M7CisJCXJldHVybiBUUlVFOworCX0KKwlyZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgUFdMX1NDUk9MTF9QUklWQVRFREFUQTo6QWRkU21hbGwoKQoreworCWlmICghU2V0UG9zKGZTY3JvbGxQb3MgKyBmU21hbGxTdGVwKSkKKwkJU2V0UG9zKFNjcm9sbFJhbmdlLmZNYXgpOworfQorCit2b2lkIFBXTF9TQ1JPTExfUFJJVkFURURBVEE6OlN1YlNtYWxsKCkKK3sKKwlpZiAoIVNldFBvcyhmU2Nyb2xsUG9zIC0gZlNtYWxsU3RlcCkpCisJCVNldFBvcyhTY3JvbGxSYW5nZS5mTWluKTsKK30KKwordm9pZCBQV0xfU0NST0xMX1BSSVZBVEVEQVRBOjpBZGRCaWcoKQoreworCWlmICghU2V0UG9zKGZTY3JvbGxQb3MgKyBmQmlnU3RlcCkpCisJCVNldFBvcyhTY3JvbGxSYW5nZS5mTWF4KTsJCQorfQorCit2b2lkIFBXTF9TQ1JPTExfUFJJVkFURURBVEE6OlN1YkJpZygpCit7CisJaWYgKCFTZXRQb3MoZlNjcm9sbFBvcyAtIGZCaWdTdGVwKSkKKwkJU2V0UG9zKFNjcm9sbFJhbmdlLmZNaW4pOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfU0JCdXR0b24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDUFdMX1NCQnV0dG9uOjpDUFdMX1NCQnV0dG9uKFBXTF9TQ1JPTExCQVJfVFlQRSBlU2Nyb2xsQmFyVHlwZSxQV0xfU0JCVVRUT05fVFlQRSBlQnV0dG9uVHlwZSkKK3sKKwltX2VTY3JvbGxCYXJUeXBlID0gZVNjcm9sbEJhclR5cGU7CisJbV9lU0JCdXR0b25UeXBlID0gZUJ1dHRvblR5cGU7CisKKwltX2JNb3VzZURvd24gPSBGQUxTRTsKK30KKworQ1BXTF9TQkJ1dHRvbjo6fkNQV0xfU0JCdXR0b24oKQoreworCit9CisKK0NGWF9CeXRlU3RyaW5nIENQV0xfU0JCdXR0b246OkdldENsYXNzTmFtZSgpIGNvbnN0Cit7CisJcmV0dXJuICJDUFdMX1NCQnV0dG9uIjsKK30KKwordm9pZCBDUFdMX1NCQnV0dG9uOjpPbkNyZWF0ZShQV0xfQ1JFQVRFUEFSQU0gJiBjcCkKK3sKKwljcC5lQ3Vyc29yVHlwZSA9IEZYQ1RfQVJST1c7Cit9CisKK3ZvaWQgQ1BXTF9TQkJ1dHRvbjo6R2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oQ0ZYX0J5dGVUZXh0QnVmICYgc0FwcFN0cmVhbSkKK3sKKwlDUFdMX1duZDo6R2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oc0FwcFN0cmVhbSk7CisKKwlpZiAoIUlzVmlzaWJsZSgpKSByZXR1cm47CisKKwlDRlhfQnl0ZVRleHRCdWYgc0J1dHRvbjsKKworCUNQREZfUmVjdCByZWN0V25kID0gR2V0V2luZG93UmVjdCgpOworCisJaWYgKHJlY3RXbmQuSXNFbXB0eSgpKSByZXR1cm47CisKKwlzQXBwU3RyZWFtIDw8ICJxXG4iOworCisJQ1BERl9Qb2ludCBwdENlbnRlciA9IHRoaXMtPkdldENlbnRlclBvaW50KCk7CisKKwlzd2l0Y2ggKHRoaXMtPm1fZVNjcm9sbEJhclR5cGUpCisJeworCQljYXNlIFNCVF9IU0NST0xMOgorCQkJc3dpdGNoICh0aGlzLT5tX2VTQkJ1dHRvblR5cGUpCisJCQl7CisJCQkJY2FzZSBQU0JUX01JTjoKKwkJCQkJeworCQkJCQkJQ1BERl9Qb2ludCBwdDEocHRDZW50ZXIueCAtIFBXTF9UUklBTkdMRV9IQUxGTEVOICogMC41ZixwdENlbnRlci55KTsKKwkJCQkJCUNQREZfUG9pbnQgcHQyKHB0Q2VudGVyLnggKyBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDAuNWYscHRDZW50ZXIueSArIFBXTF9UUklBTkdMRV9IQUxGTEVOKTsKKwkJCQkJCUNQREZfUG9pbnQgcHQzKHB0Q2VudGVyLnggKyBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDAuNWYscHRDZW50ZXIueSAtIFBXTF9UUklBTkdMRV9IQUxGTEVOKTsKKworCQkJCQkJaWYgKHJlY3RXbmQucmlnaHQgLSByZWN0V25kLmxlZnQgPiBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDIgJiYKKwkJCQkJCQlyZWN0V25kLnRvcCAtIHJlY3RXbmQuYm90dG9tID4gUFdMX1RSSUFOR0xFX0hBTEZMRU4gKQorCQkJCQkJeworCQkJCQkJCXNCdXR0b24gPDwgIjAgZ1xuIjsKKwkJCQkJCQlzQnV0dG9uIDw8IHB0MS54IDw8ICIgIiA8PCBwdDEueSA8PCAiIG1cbiI7CisJCQkJCQkJc0J1dHRvbiA8PCBwdDIueCA8PCAiICIgPDwgcHQyLnkgPDwgIiBsXG4iOworCQkJCQkJCXNCdXR0b24gPDwgcHQzLnggPDwgIiAiIDw8IHB0My55IDw8ICIgbFxuIjsKKwkJCQkJCQlzQnV0dG9uIDw8IHB0MS54IDw8ICIgIiA8PCBwdDEueSA8PCAiIGwgZlxuIjsKKworCQkJCQkJCXNBcHBTdHJlYW0gPDwgc0J1dHRvbjsJCisJCQkJCQl9CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBQU0JUX01BWDoKKwkJCQkJeworCQkJCQkJQ1BERl9Qb2ludCBwdDEocHRDZW50ZXIueCArIFBXTF9UUklBTkdMRV9IQUxGTEVOICogMC41ZixwdENlbnRlci55KTsKKwkJCQkJCUNQREZfUG9pbnQgcHQyKHB0Q2VudGVyLnggLSBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDAuNWYscHRDZW50ZXIueSArIFBXTF9UUklBTkdMRV9IQUxGTEVOKTsKKwkJCQkJCUNQREZfUG9pbnQgcHQzKHB0Q2VudGVyLnggLSBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDAuNWYscHRDZW50ZXIueSAtIFBXTF9UUklBTkdMRV9IQUxGTEVOKTsKKworCQkJCQkJaWYgKHJlY3RXbmQucmlnaHQgLSByZWN0V25kLmxlZnQgPiBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDIgJiYKKwkJCQkJCQlyZWN0V25kLnRvcCAtIHJlY3RXbmQuYm90dG9tID4gUFdMX1RSSUFOR0xFX0hBTEZMRU4gKQorCQkJCQkJeworCQkJCQkJCXNCdXR0b24gPDwgIjAgZ1xuIjsKKwkJCQkJCQlzQnV0dG9uIDw8IHB0MS54IDw8ICIgIiA8PCBwdDEueSA8PCAiIG1cbiI7CisJCQkJCQkJc0J1dHRvbiA8PCBwdDIueCA8PCAiICIgPDwgcHQyLnkgPDwgIiBsXG4iOworCQkJCQkJCXNCdXR0b24gPDwgcHQzLnggPDwgIiAiIDw8IHB0My55IDw8ICIgbFxuIjsKKwkJCQkJCQlzQnV0dG9uIDw8IHB0MS54IDw8ICIgIiA8PCBwdDEueSA8PCAiIGwgZlxuIjsKKworCQkJCQkJCXNBcHBTdHJlYW0gPDwgc0J1dHRvbjsJCisJCQkJCQl9CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTQlRfVlNDUk9MTDoKKwkJCXN3aXRjaCh0aGlzLT5tX2VTQkJ1dHRvblR5cGUpCisJCQl7CisJCQkJY2FzZSBQU0JUX01JTjoKKwkJCQkJeworCQkJCQkJQ1BERl9Qb2ludCBwdDEocHRDZW50ZXIueCAtIFBXTF9UUklBTkdMRV9IQUxGTEVOLHB0Q2VudGVyLnkgLSBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDAuNWYpOworCQkJCQkJQ1BERl9Qb2ludCBwdDIocHRDZW50ZXIueCArIFBXTF9UUklBTkdMRV9IQUxGTEVOLHB0Q2VudGVyLnkgLSBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDAuNWYpOworCQkJCQkJQ1BERl9Qb2ludCBwdDMocHRDZW50ZXIueCxwdENlbnRlci55ICsgUFdMX1RSSUFOR0xFX0hBTEZMRU4gKiAwLjVmKTsKKworCQkJCQkJaWYgKHJlY3RXbmQucmlnaHQgLSByZWN0V25kLmxlZnQgPiBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDIgJiYKKwkJCQkJCQlyZWN0V25kLnRvcCAtIHJlY3RXbmQuYm90dG9tID4gUFdMX1RSSUFOR0xFX0hBTEZMRU4gKQorCQkJCQkJeworCQkJCQkJCXNCdXR0b24gPDwgIjAgZ1xuIjsKKwkJCQkJCQlzQnV0dG9uIDw8IHB0MS54IDw8ICIgIiA8PCBwdDEueSA8PCAiIG1cbiI7CisJCQkJCQkJc0J1dHRvbiA8PCBwdDIueCA8PCAiICIgPDwgcHQyLnkgPDwgIiBsXG4iOworCQkJCQkJCXNCdXR0b24gPDwgcHQzLnggPDwgIiAiIDw8IHB0My55IDw8ICIgbFxuIjsKKwkJCQkJCQlzQnV0dG9uIDw8IHB0MS54IDw8ICIgIiA8PCBwdDEueSA8PCAiIGwgZlxuIjsKKworCQkJCQkJCXNBcHBTdHJlYW0gPDwgc0J1dHRvbjsJCisJCQkJCQl9CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBQU0JUX01BWDoKKwkJCQkJeworCQkJCQkJQ1BERl9Qb2ludCBwdDEocHRDZW50ZXIueCAtIFBXTF9UUklBTkdMRV9IQUxGTEVOLHB0Q2VudGVyLnkgKyBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDAuNWYpOworCQkJCQkJQ1BERl9Qb2ludCBwdDIocHRDZW50ZXIueCArIFBXTF9UUklBTkdMRV9IQUxGTEVOLHB0Q2VudGVyLnkgKyBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDAuNWYpOworCQkJCQkJQ1BERl9Qb2ludCBwdDMocHRDZW50ZXIueCxwdENlbnRlci55IC0gUFdMX1RSSUFOR0xFX0hBTEZMRU4gKiAwLjVmKTsKKworCQkJCQkJaWYgKHJlY3RXbmQucmlnaHQgLSByZWN0V25kLmxlZnQgPiBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDIgJiYKKwkJCQkJCQlyZWN0V25kLnRvcCAtIHJlY3RXbmQuYm90dG9tID4gUFdMX1RSSUFOR0xFX0hBTEZMRU4gKQorCQkJCQkJeworCQkJCQkJCXNCdXR0b24gPDwgIjAgZ1xuIjsKKwkJCQkJCQlzQnV0dG9uIDw8IHB0MS54IDw8ICIgIiA8PCBwdDEueSA8PCAiIG1cbiI7CisJCQkJCQkJc0J1dHRvbiA8PCBwdDIueCA8PCAiICIgPDwgcHQyLnkgPDwgIiBsXG4iOworCQkJCQkJCXNCdXR0b24gPDwgcHQzLnggPDwgIiAiIDw8IHB0My55IDw8ICIgbFxuIjsKKwkJCQkJCQlzQnV0dG9uIDw8IHB0MS54IDw8ICIgIiA8PCBwdDEueSA8PCAiIGwgZlxuIjsKKworCQkJCQkJCXNBcHBTdHJlYW0gPDwgc0J1dHRvbjsJCisJCQkJCQl9CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCX0KKworCXNBcHBTdHJlYW0gPDwgIlFcbiI7Cit9CisKK3ZvaWQgQ1BXTF9TQkJ1dHRvbjo6RHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpCit7CisJaWYgKCFJc1Zpc2libGUoKSkgcmV0dXJuOworCisJQ1BERl9SZWN0IHJlY3RXbmQgPSBHZXRXaW5kb3dSZWN0KCk7CisJaWYgKHJlY3RXbmQuSXNFbXB0eSgpKSByZXR1cm47CisKKwlDUERGX1BvaW50IHB0Q2VudGVyID0gdGhpcy0+R2V0Q2VudGVyUG9pbnQoKTsKKwlGWF9JTlQzMiBuVHJhbnNwYXJhbmN5ID0gdGhpcy0+R2V0VHJhbnNwYXJlbmN5KCk7CisKKwlzd2l0Y2ggKHRoaXMtPm1fZVNjcm9sbEJhclR5cGUpCisJeworCWNhc2UgU0JUX0hTQ1JPTEw6CisJCUNQV0xfV25kOjpEcmF3VGhpc0FwcGVhcmFuY2UocERldmljZSxwVXNlcjJEZXZpY2UpOworCQlzd2l0Y2ggKHRoaXMtPm1fZVNCQnV0dG9uVHlwZSkKKwkJeworCQljYXNlIFBTQlRfTUlOOgorCQkJeworCQkJCUNQREZfUG9pbnQgcHQxKHB0Q2VudGVyLnggLSBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDAuNWYscHRDZW50ZXIueSk7CisJCQkJQ1BERl9Qb2ludCBwdDIocHRDZW50ZXIueCArIFBXTF9UUklBTkdMRV9IQUxGTEVOICogMC41ZixwdENlbnRlci55ICsgUFdMX1RSSUFOR0xFX0hBTEZMRU4pOworCQkJCUNQREZfUG9pbnQgcHQzKHB0Q2VudGVyLnggKyBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDAuNWYscHRDZW50ZXIueSAtIFBXTF9UUklBTkdMRV9IQUxGTEVOKTsKKworCQkJCWlmIChyZWN0V25kLnJpZ2h0IC0gcmVjdFduZC5sZWZ0ID4gUFdMX1RSSUFOR0xFX0hBTEZMRU4gKiAyICYmCisJCQkJCXJlY3RXbmQudG9wIC0gcmVjdFduZC5ib3R0b20gPiBQV0xfVFJJQU5HTEVfSEFMRkxFTiApCisJCQkJeworCQkJCQlDRlhfUGF0aERhdGEgcGF0aDsKKworCQkJCQlwYXRoLlNldFBvaW50Q291bnQoNCk7CisJCQkJCXBhdGguU2V0UG9pbnQoMCwgcHQxLngsIHB0MS55LCBGWFBUX01PVkVUTyk7CisJCQkJCXBhdGguU2V0UG9pbnQoMSwgcHQyLngsIHB0Mi55LCBGWFBUX0xJTkVUTyk7CisJCQkJCXBhdGguU2V0UG9pbnQoMiwgcHQzLngsIHB0My55LCBGWFBUX0xJTkVUTyk7CisJCQkJCXBhdGguU2V0UG9pbnQoMywgcHQxLngsIHB0MS55LCBGWFBUX0xJTkVUTyk7CisKKwkJCQkJcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgTlVMTCwgCisJCQkJCQlDUFdMX1V0aWxzOjpQV0xDb2xvclRvRlhDb2xvcihQV0xfREVGQVVMVF9CTEFDS0NPTE9SLG5UcmFuc3BhcmFuY3kpLCAKKwkJCQkJCTAsIEZYRklMTF9BTFRFUk5BVEUpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBTQlRfTUFYOgorCQkJeworCQkJCUNQREZfUG9pbnQgcHQxKHB0Q2VudGVyLnggKyBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDAuNWYscHRDZW50ZXIueSk7CisJCQkJQ1BERl9Qb2ludCBwdDIocHRDZW50ZXIueCAtIFBXTF9UUklBTkdMRV9IQUxGTEVOICogMC41ZixwdENlbnRlci55ICsgUFdMX1RSSUFOR0xFX0hBTEZMRU4pOworCQkJCUNQREZfUG9pbnQgcHQzKHB0Q2VudGVyLnggLSBQV0xfVFJJQU5HTEVfSEFMRkxFTiAqIDAuNWYscHRDZW50ZXIueSAtIFBXTF9UUklBTkdMRV9IQUxGTEVOKTsKKworCQkJCWlmIChyZWN0V25kLnJpZ2h0IC0gcmVjdFduZC5sZWZ0ID4gUFdMX1RSSUFOR0xFX0hBTEZMRU4gKiAyICYmCisJCQkJCXJlY3RXbmQudG9wIC0gcmVjdFduZC5ib3R0b20gPiBQV0xfVFJJQU5HTEVfSEFMRkxFTiApCisJCQkJeworCQkJCQlDRlhfUGF0aERhdGEgcGF0aDsKKworCQkJCQlwYXRoLlNldFBvaW50Q291bnQoNCk7CisJCQkJCXBhdGguU2V0UG9pbnQoMCwgcHQxLngsIHB0MS55LCBGWFBUX01PVkVUTyk7CisJCQkJCXBhdGguU2V0UG9pbnQoMSwgcHQyLngsIHB0Mi55LCBGWFBUX0xJTkVUTyk7CisJCQkJCXBhdGguU2V0UG9pbnQoMiwgcHQzLngsIHB0My55LCBGWFBUX0xJTkVUTyk7CisJCQkJCXBhdGguU2V0UG9pbnQoMywgcHQxLngsIHB0MS55LCBGWFBUX0xJTkVUTyk7CisKKwkJCQkJcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgTlVMTCwgCisJCQkJCQlDUFdMX1V0aWxzOjpQV0xDb2xvclRvRlhDb2xvcihQV0xfREVGQVVMVF9CTEFDS0NPTE9SLG5UcmFuc3BhcmFuY3kpLCAKKwkJCQkJCTAsIEZYRklMTF9BTFRFUk5BVEUpOwkKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgU0JUX1ZTQ1JPTEw6CisJCXN3aXRjaCh0aGlzLT5tX2VTQkJ1dHRvblR5cGUpCisJCXsKKwkJY2FzZSBQU0JUX01JTjoKKwkJCXsKKwkJCQkvL2RyYXcgYm9yZGVyCisJCQkJQ1BERl9SZWN0IHJjRHJhdyA9IHJlY3RXbmQ7CisJCQkJQ1BXTF9VdGlsczo6RHJhd1N0cm9rZVJlY3QocERldmljZSwgcFVzZXIyRGV2aWNlLCByY0RyYXcsIAorCQkJCQlBcmdiRW5jb2RlKG5UcmFuc3BhcmFuY3ksMTAwLDEwMCwxMDApLDAuMGYpOworCisJCQkJLy9kcmF3IGlubmVyIGJvcmRlcgorCQkJCXJjRHJhdyA9IENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KHJlY3RXbmQsMC41Zik7CisJCQkJQ1BXTF9VdGlsczo6RHJhd1N0cm9rZVJlY3QocERldmljZSwgcFVzZXIyRGV2aWNlLCByY0RyYXcsIAorCQkJCQlBcmdiRW5jb2RlKG5UcmFuc3BhcmFuY3ksMjU1LDI1NSwyNTUpLDEuMGYpOworCisJCQkJLy9kcmF3IGJhY2tncm91bmQKKworCQkJCXJjRHJhdyA9IENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KHJlY3RXbmQsMS4wZik7CisKKwkJCQlpZiAodGhpcy0+SXNFbmFibGVkKCkpCisJCQkJCUNQV0xfVXRpbHM6OkRyYXdTaGFkb3cocERldmljZSwgcFVzZXIyRGV2aWNlLCBUUlVFLCBGQUxTRSwgcmNEcmF3LCBuVHJhbnNwYXJhbmN5LCA4MCwgMjIwKTsKKwkJCQllbHNlCisJCQkJCUNQV0xfVXRpbHM6OkRyYXdGaWxsUmVjdChwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHJjRHJhdywgQXJnYkVuY29kZSgyNTUsMjU1LDI1NSwyNTUpKTsKKworCQkJCS8vZHJhdyBhcnJvdworCisJCQkJaWYgKHJlY3RXbmQudG9wIC0gcmVjdFduZC5ib3R0b20gPiA2LjBmICkKKwkJCQl7CisJCQkJCUZYX0ZMT0FUIGZYID0gcmVjdFduZC5sZWZ0ICsgMS41ZjsKKwkJCQkJRlhfRkxPQVQgZlkgPSByZWN0V25kLmJvdHRvbTsKKwkJCQkJQ1BERl9Qb2ludCBwdHNbN10gPSB7CisJCQkJCQkJCUNQREZfUG9pbnQoZlgrMi41ZiwgZlkrNC4wZiksCisJCQkJCQkJCUNQREZfUG9pbnQoZlgrMi41ZiwgZlkrMy4wZiksCisJCQkJCQkJCUNQREZfUG9pbnQoZlgrNC41ZiwgZlkrNS4wZiksCisJCQkJCQkJCUNQREZfUG9pbnQoZlgrNi41ZiwgZlkrMy4wZiksCisJCQkJCQkJCUNQREZfUG9pbnQoZlgrNi41ZiwgZlkrNC4wZiksCisJCQkJCQkJCUNQREZfUG9pbnQoZlgrNC41ZiwgZlkrNi4wZiksCisJCQkJCQkJCUNQREZfUG9pbnQoZlgrMi41ZiwgZlkrNC4wZil9OworCQkJCQkKKworCQkJCQlpZiAodGhpcy0+SXNFbmFibGVkKCkpCisJCQkJCQlDUFdMX1V0aWxzOjpEcmF3RmlsbEFyZWEocERldmljZSwgcFVzZXIyRGV2aWNlLCBwdHMsIDcsIEFyZ2JFbmNvZGUoblRyYW5zcGFyYW5jeSwyNTUsMjU1LDI1NSkpOworCQkJCQllbHNlCisJCQkJCQlDUFdMX1V0aWxzOjpEcmF3RmlsbEFyZWEocERldmljZSwgcFVzZXIyRGV2aWNlLCBwdHMsIDcsIAorCQkJCQkJCUNQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKFBXTF9ERUZBVUxUX0hFQVZZR1JBWUNPTE9SLDI1NSkpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBTQlRfTUFYOgorCQkJeworCQkJCS8vZHJhdyBib3JkZXIKKwkJCQlDUERGX1JlY3QgcmNEcmF3ID0gcmVjdFduZDsKKwkJCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlUmVjdChwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHJjRHJhdywgCisJCQkJCUFyZ2JFbmNvZGUoblRyYW5zcGFyYW5jeSwxMDAsMTAwLDEwMCksMC4wZik7CisJCQkJCisJCQkJLy9kcmF3IGlubmVyIGJvcmRlcgorCQkJCXJjRHJhdyA9IENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KHJlY3RXbmQsMC41Zik7CisJCQkJQ1BXTF9VdGlsczo6RHJhd1N0cm9rZVJlY3QocERldmljZSwgcFVzZXIyRGV2aWNlLCByY0RyYXcsIAorCQkJCQlBcmdiRW5jb2RlKG5UcmFuc3BhcmFuY3ksMjU1LDI1NSwyNTUpLDEuMGYpOworCisJCQkJLy9kcmF3IGJhY2tncm91bmQKKwkJCQlyY0RyYXcgPSBDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdChyZWN0V25kLDEuMGYpOworCQkJCWlmICh0aGlzLT5Jc0VuYWJsZWQoKSkKKwkJCQkJQ1BXTF9VdGlsczo6RHJhd1NoYWRvdyhwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIFRSVUUsIEZBTFNFLCByY0RyYXcsIG5UcmFuc3BhcmFuY3ksIDgwLCAyMjApOworCQkJCWVsc2UKKwkJCQkJQ1BXTF9VdGlsczo6RHJhd0ZpbGxSZWN0KHBEZXZpY2UsIHBVc2VyMkRldmljZSwgcmNEcmF3LCBBcmdiRW5jb2RlKDI1NSwyNTUsMjU1LDI1NSkpOworCisJCQkJLy9kcmF3IGFycm93CisKKwkJCQlpZiAocmVjdFduZC50b3AgLSByZWN0V25kLmJvdHRvbSA+IDYuMGYgKQorCQkJCXsKKwkJCQkJRlhfRkxPQVQgZlggPSByZWN0V25kLmxlZnQgKyAxLjVmOworCQkJCQlGWF9GTE9BVCBmWSA9IHJlY3RXbmQuYm90dG9tOworCisJCQkJCUNQREZfUG9pbnQgcHRzWzddID0geworCQkJCQkJCQlDUERGX1BvaW50KGZYKzIuNWYsIGZZKzUuMGYpLAorCQkJCQkJCQlDUERGX1BvaW50KGZYKzIuNWYsIGZZKzYuMGYpLAorCQkJCQkJCQlDUERGX1BvaW50KGZYKzQuNWYsIGZZKzQuMGYpLAorCQkJCQkJCQlDUERGX1BvaW50KGZYKzYuNWYsIGZZKzYuMGYpLAorCQkJCQkJCQlDUERGX1BvaW50KGZYKzYuNWYsIGZZKzUuMGYpLAorCQkJCQkJCQlDUERGX1BvaW50KGZYKzQuNWYsIGZZKzMuMGYpLAorCQkJCQkJCQlDUERGX1BvaW50KGZYKzIuNWYsIGZZKzUuMGYpfTsKKwkJCQkJCisKKwkJCQkJaWYgKHRoaXMtPklzRW5hYmxlZCgpKQorCQkJCQkJQ1BXTF9VdGlsczo6RHJhd0ZpbGxBcmVhKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgcHRzLCA3LCBBcmdiRW5jb2RlKG5UcmFuc3BhcmFuY3ksMjU1LDI1NSwyNTUpKTsKKwkJCQkJZWxzZQorCQkJCQkJQ1BXTF9VdGlsczo6RHJhd0ZpbGxBcmVhKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgcHRzLCA3LCAKKwkJCQkJCQlDUFdMX1V0aWxzOjpQV0xDb2xvclRvRlhDb2xvcihQV0xfREVGQVVMVF9IRUFWWUdSQVlDT0xPUiwyNTUpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQU0JUX1BPUzoKKwkJCXsKKwkJCQkvL0NQV0xfV25kOjpEcmF3VGhpc0FwcGVhcmFuY2UocERldmljZSxwVXNlcjJEZXZpY2UpOworCisJCQkJLy9kcmF3IGJvcmRlcgorCQkJCUNQREZfUmVjdCByY0RyYXcgPSByZWN0V25kOworCQkJCUNQV0xfVXRpbHM6OkRyYXdTdHJva2VSZWN0KHBEZXZpY2UsIHBVc2VyMkRldmljZSwgcmNEcmF3LCAKKwkJCQkJQXJnYkVuY29kZShuVHJhbnNwYXJhbmN5LDEwMCwxMDAsMTAwKSwwLjBmKTsKKwkJCQkKKwkJCQkvL2RyYXcgaW5uZXIgYm9yZGVyCisJCQkJcmNEcmF3ID0gQ1BXTF9VdGlsczo6RGVmbGF0ZVJlY3QocmVjdFduZCwwLjVmKTsKKwkJCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlUmVjdChwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHJjRHJhdywgCisJCQkJCUFyZ2JFbmNvZGUoblRyYW5zcGFyYW5jeSwyNTUsMjU1LDI1NSksMS4wZik7CisKKwkJCQlpZiAodGhpcy0+SXNFbmFibGVkKCkpCisJCQkJeworCQkJCQkvL2RyYXcgc2hhZG93IGVmZmVjdAkJCQkJCQorCQkJCQkKKwkJCQkJQ1BERl9Qb2ludCBwdFRvcCA9IENQREZfUG9pbnQocmVjdFduZC5sZWZ0LHJlY3RXbmQudG9wLTEuMGYpOworCQkJCQlDUERGX1BvaW50IHB0Qm90dG9tID0gQ1BERl9Qb2ludChyZWN0V25kLmxlZnQscmVjdFduZC5ib3R0b20rMS4wZik7CisKKwkJCQkJcHRUb3AueCArPSAxLjVmOworCQkJCQlwdEJvdHRvbS54ICs9IDEuNWY7CisJCQkJCQorCQkJCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlTGluZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHB0VG9wLCBwdEJvdHRvbSwgCisJCQkJCQlBcmdiRW5jb2RlKG5UcmFuc3BhcmFuY3ksMjEwLDIxMCwyMTApLDEuMGYpOworCisJCQkJCXB0VG9wLnggKz0gMS4wZjsKKwkJCQkJcHRCb3R0b20ueCArPSAxLjBmOworCQkJCQkKKwkJCQkJQ1BXTF9VdGlsczo6RHJhd1N0cm9rZUxpbmUocERldmljZSwgcFVzZXIyRGV2aWNlLCBwdFRvcCwgcHRCb3R0b20sIAorCQkJCQkJQXJnYkVuY29kZShuVHJhbnNwYXJhbmN5LDIyMCwyMjAsMjIwKSwxLjBmKTsKKworCQkJCQlwdFRvcC54ICs9IDEuMGY7CisJCQkJCXB0Qm90dG9tLnggKz0gMS4wZjsKKwkJCQkJCisJCQkJCUNQV0xfVXRpbHM6OkRyYXdTdHJva2VMaW5lKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgcHRUb3AsIHB0Qm90dG9tLCAKKwkJCQkJCUFyZ2JFbmNvZGUoblRyYW5zcGFyYW5jeSwyNDAsMjQwLDI0MCksMS4wZik7CisKKwkJCQkJcHRUb3AueCArPSAxLjBmOworCQkJCQlwdEJvdHRvbS54ICs9IDEuMGY7CisJCQkJCQorCQkJCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlTGluZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHB0VG9wLCBwdEJvdHRvbSwgCisJCQkJCQlBcmdiRW5jb2RlKG5UcmFuc3BhcmFuY3ksMjQwLDI0MCwyNDApLDEuMGYpOworCisJCQkJCXB0VG9wLnggKz0gMS4wZjsKKwkJCQkJcHRCb3R0b20ueCArPSAxLjBmOworCQkJCQkKKwkJCQkJQ1BXTF9VdGlsczo6RHJhd1N0cm9rZUxpbmUocERldmljZSwgcFVzZXIyRGV2aWNlLCBwdFRvcCwgcHRCb3R0b20sIAorCQkJCQkJQXJnYkVuY29kZShuVHJhbnNwYXJhbmN5LDIxMCwyMTAsMjEwKSwxLjBmKTsKKworCQkJCQlwdFRvcC54ICs9IDEuMGY7CisJCQkJCXB0Qm90dG9tLnggKz0gMS4wZjsKKwkJCQkJCisJCQkJCUNQV0xfVXRpbHM6OkRyYXdTdHJva2VMaW5lKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgcHRUb3AsIHB0Qm90dG9tLCAKKwkJCQkJCUFyZ2JFbmNvZGUoblRyYW5zcGFyYW5jeSwxODAsMTgwLDE4MCksMS4wZik7CisKKwkJCQkJcHRUb3AueCArPSAxLjBmOworCQkJCQlwdEJvdHRvbS54ICs9IDEuMGY7CisJCQkJCQorCQkJCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlTGluZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHB0VG9wLCBwdEJvdHRvbSwgCisJCQkJCQlBcmdiRW5jb2RlKG5UcmFuc3BhcmFuY3ksMTUwLDE1MCwxNTApLDEuMGYpOworCisJCQkJCXB0VG9wLnggKz0gMS4wZjsKKwkJCQkJcHRCb3R0b20ueCArPSAxLjBmOworCQkJCQkKKwkJCQkJQ1BXTF9VdGlsczo6RHJhd1N0cm9rZUxpbmUocERldmljZSwgcFVzZXIyRGV2aWNlLCBwdFRvcCwgcHRCb3R0b20sIAorCQkJCQkJQXJnYkVuY29kZShuVHJhbnNwYXJhbmN5LDE1MCwxNTAsMTUwKSwxLjBmKTsKKworCQkJCQlwdFRvcC54ICs9IDEuMGY7CisJCQkJCXB0Qm90dG9tLnggKz0gMS4wZjsKKwkJCQkJCisJCQkJCUNQV0xfVXRpbHM6OkRyYXdTdHJva2VMaW5lKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgcHRUb3AsIHB0Qm90dG9tLCAKKwkJCQkJCUFyZ2JFbmNvZGUoblRyYW5zcGFyYW5jeSwxODAsMTgwLDE4MCksMS4wZik7CisKKwkJCQkJcHRUb3AueCArPSAxLjBmOworCQkJCQlwdEJvdHRvbS54ICs9IDEuMGY7CisJCQkJCQorCQkJCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlTGluZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIHB0VG9wLCBwdEJvdHRvbSwgCisJCQkJCQlBcmdiRW5jb2RlKG5UcmFuc3BhcmFuY3ksMjEwLDIxMCwyMTApLDEuMGYpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlDUFdMX1V0aWxzOjpEcmF3RmlsbFJlY3QocERldmljZSwgcFVzZXIyRGV2aWNlLCByY0RyYXcsIEFyZ2JFbmNvZGUoMjU1LDI1NSwyNTUsMjU1KSk7CisJCQkJfQorCisJCQkJLy9kcmF3IGZyaWN0aW9uCisKKwkJCQlpZiAocmVjdFduZC5IZWlnaHQoKSA+IDguMGYpCisJCQkJeworCQkJCQlGWF9DT0xPUlJFRiBjclN0cm9rZSA9IEFyZ2JFbmNvZGUoblRyYW5zcGFyYW5jeSwxMjAsMTIwLDEyMCk7CisJCQkJCWlmICghdGhpcy0+SXNFbmFibGVkKCkpCisJCQkJCQljclN0cm9rZSA9IENQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKFBXTF9ERUZBVUxUX0hFQVZZR1JBWUNPTE9SLDI1NSk7CisKKwkJCQkJRlhfRkxPQVQgbkZyaWN0aW9uV2lkdGggPSA1LjBmOworCQkJCQlGWF9GTE9BVCBuRnJpY3Rpb25IZWlnaHQgPSA1LjVmOworCisJCQkJCUNQREZfUG9pbnQgcHRMZWZ0ID0gQ1BERl9Qb2ludChwdENlbnRlci54IC0gbkZyaWN0aW9uV2lkdGggLyAyLjBmLCBwdENlbnRlci55IC0gbkZyaWN0aW9uSGVpZ2h0IC8gMi4wZiArIDAuNWYpOworCQkJCQlDUERGX1BvaW50IHB0UmlnaHQgPSBDUERGX1BvaW50KHB0Q2VudGVyLnggKyBuRnJpY3Rpb25XaWR0aCAvIDIuMGYsIHB0Q2VudGVyLnkgLSBuRnJpY3Rpb25IZWlnaHQgLyAyLjBmICsgMC41Zik7CisKKwkJCQkJQ1BXTF9VdGlsczo6RHJhd1N0cm9rZUxpbmUocERldmljZSwgcFVzZXIyRGV2aWNlLCBwdExlZnQsIHB0UmlnaHQsIAorCQkJCQkJY3JTdHJva2UsMS4wZik7CisKKwkJCQkJcHRMZWZ0LnkgKz0gMi4wZjsKKwkJCQkJcHRSaWdodC55ICs9IDIuMGY7CisKKwkJCQkJQ1BXTF9VdGlsczo6RHJhd1N0cm9rZUxpbmUocERldmljZSwgcFVzZXIyRGV2aWNlLCBwdExlZnQsIHB0UmlnaHQsIAorCQkJCQkJY3JTdHJva2UsMS4wZik7CisKKwkJCQkJcHRMZWZ0LnkgKz0gMi4wZjsKKwkJCQkJcHRSaWdodC55ICs9IDIuMGY7CisKKwkJCQkJQ1BXTF9VdGlsczo6RHJhd1N0cm9rZUxpbmUocERldmljZSwgcFVzZXIyRGV2aWNlLCBwdExlZnQsIHB0UmlnaHQsIAorCQkJCQkJY3JTdHJva2UsMS4wZik7CisKKwkJCQkJLyoKKwkJCQkJcHRMZWZ0LnkgKz0gMS41ZjsKKwkJCQkJcHRSaWdodC55ICs9IDEuNWY7CisKKwkJCQkJQ1BXTF9VdGlsczo6RHJhd1N0cm9rZUxpbmUocERldmljZSwgcFVzZXIyRGV2aWNlLCBwdExlZnQsIHB0UmlnaHQsIAorCQkJCQkJQXJnYkVuY29kZShuVHJhbnNwYXJhbmN5LDE1MCwxNTAsMTUwKSwxLjBmKTsKKwkJCQkJCSovCisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK0ZYX0JPT0wgQ1BXTF9TQkJ1dHRvbjo6T25MQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKQoreworCUNQV0xfV25kOjpPbkxCdXR0b25Eb3duKHBvaW50LG5GbGFnKTsKKworCWlmIChDUFdMX1duZCAqIHBQYXJlbnQgPSBHZXRQYXJlbnRXaW5kb3coKSkKKwkJcFBhcmVudC0+T25Ob3RpZnkodGhpcyxQTk1fTEJVVFRPTkRPV04sMCwoRlhfSU5UUFRSKSZwb2ludCk7CisKKwltX2JNb3VzZURvd24gPSBUUlVFOworCVNldENhcHR1cmUoKTsKKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIENQV0xfU0JCdXR0b246Ok9uTEJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpCit7CisJQ1BXTF9XbmQ6Ok9uTEJ1dHRvblVwKHBvaW50LG5GbGFnKTsKKworCWlmIChDUFdMX1duZCAqIHBQYXJlbnQgPSBHZXRQYXJlbnRXaW5kb3coKSkKKwkJcFBhcmVudC0+T25Ob3RpZnkodGhpcyxQTk1fTEJVVFRPTlVQLDAsKEZYX0lOVFBUUikmcG9pbnQpOworCisJbV9iTW91c2VEb3duID0gRkFMU0U7CisJUmVsZWFzZUNhcHR1cmUoKTsKKworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIENQV0xfU0JCdXR0b246Ok9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpCit7CisJQ1BXTF9XbmQ6Ok9uTW91c2VNb3ZlKHBvaW50LG5GbGFnKTsKKworCWlmIChDUFdMX1duZCAqIHBQYXJlbnQgPSBHZXRQYXJlbnRXaW5kb3coKSkKKwl7CQkKKwkJcFBhcmVudC0+T25Ob3RpZnkodGhpcyxQTk1fTU9VU0VNT1ZFLDAsKEZYX0lOVFBUUikmcG9pbnQpOworCisJCS8qCisJCWlmIChtX2JNb3VzZURvd24gJiYgKG1fZVNCQnV0dG9uVHlwZSA9PSBQU0JUX01JTiB8fCBtX2VTQkJ1dHRvblR5cGUgPT0gUFNCVF9NQVgpKQorCQl7CisJCQlpZiAoIXBQYXJlbnQtPk9uTm90aWZ5KHRoaXMsUE5NX0xCVVRUT05ET1dOLG5GbGFncywoRlhfSU5UUFRSKSZwb2ludCkpCisJCQkJcmV0dXJuIEZBTFNFOworCQl9CisJCSovCisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9TY3JvbGxCYXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDUFdMX1Njcm9sbEJhcjo6Q1BXTF9TY3JvbGxCYXIoUFdMX1NDUk9MTEJBUl9UWVBFIHNiVHlwZSk6CisJbV9zYlR5cGUoc2JUeXBlKSwKKwltX3BNaW5CdXR0b24oTlVMTCksCisJbV9wTWF4QnV0dG9uKE5VTEwpLAorCW1fcFBvc0J1dHRvbihOVUxMKSwKKwltX2JNb3VzZURvd24oRkFMU0UpLAorCW1fYk1pbk9yTWF4KEZBTFNFKSwKKwltX2JOb3RpZnlGb3JldmVyKFRSVUUpCit7Cit9CisKK0NQV0xfU2Nyb2xsQmFyOjp+Q1BXTF9TY3JvbGxCYXIoKQoreworfQorCitDRlhfQnl0ZVN0cmluZyBDUFdMX1Njcm9sbEJhcjo6R2V0Q2xhc3NOYW1lKCkgY29uc3QKK3sKKwlyZXR1cm4gIkNQV0xfU2Nyb2xsQmFyIjsKK30KKwordm9pZCBDUFdMX1Njcm9sbEJhcjo6T25DcmVhdGUoUFdMX0NSRUFURVBBUkFNICYgY3ApCit7CisJY3AuZUN1cnNvclR5cGUgPSBGWENUX0FSUk9XOworfQorCit2b2lkIENQV0xfU2Nyb2xsQmFyOjpSZVBvc0NoaWxkV25kKCkKK3sKKwlDUERGX1JlY3QgcmNDbGllbnQgPSB0aGlzLT5HZXRDbGllbnRSZWN0KCk7CisKKy8qCisJc3dpdGNoKG1fc2JUeXBlKQorCXsKKwkJY2FzZSBTQlRfSFNDUk9MTDoKKwkJCWlmIChyY0NsaWVudC5yaWdodCAtIHJjQ2xpZW50LmxlZnQgPCBQV0xfU0NST0xMQkFSX1dJRFRIIHx8CisJCQkJcmNDbGllbnQudG9wIC0gcmNDbGllbnQuYm90dG9tIDwgUFdMX1NDUk9MTEJBUl9XSURUSCkKKwkJCXsKKwkJCQlTZXRWaXNpYmxlKEZBTFNFKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNCVF9WU0NST0xMOgorCQkJaWYgKHJjQ2xpZW50LnJpZ2h0IC0gcmNDbGllbnQubGVmdCA8IFBXTF9TQ1JPTExCQVJfV0lEVEggfHwKKwkJCQlyY0NsaWVudC50b3AgLSByY0NsaWVudC5ib3R0b20gPCBQV0xfU0NST0xMQkFSX1dJRFRIKQorCQkJeworCQkJCVNldFZpc2libGUoRkFMU0UpOworCQkJfQorCQkJYnJlYWs7CisJfQkKKyovCisJQ1BERl9SZWN0IHJjTWluQnV0dG9uLHJjTWF4QnV0dG9uOworCisJRlhfRkxPQVQgZkJXaWR0aCA9IDA7CisKKwlzd2l0Y2ggKG1fc2JUeXBlKQorCXsKKwljYXNlIFNCVF9IU0NST0xMOgorCQlpZiAocmNDbGllbnQucmlnaHQgLSByY0NsaWVudC5sZWZ0ID4gUFdMX1NDUk9MTEJBUl9CVVRUT05fV0lEVEggKiAyICsgUFdMX1NDUk9MTEJBUl9QT1NCVVRUT05fTUlOV0lEVEggKyAyKQorCQl7CisJCQlyY01pbkJ1dHRvbiA9IENQREZfUmVjdChyY0NsaWVudC5sZWZ0LHJjQ2xpZW50LmJvdHRvbSwKKwkJCQlyY0NsaWVudC5sZWZ0ICsgUFdMX1NDUk9MTEJBUl9CVVRUT05fV0lEVEgscmNDbGllbnQudG9wKTsKKwkJCXJjTWF4QnV0dG9uID0gQ1BERl9SZWN0KHJjQ2xpZW50LnJpZ2h0IC0gUFdMX1NDUk9MTEJBUl9CVVRUT05fV0lEVEgscmNDbGllbnQuYm90dG9tLAorCQkJCXJjQ2xpZW50LnJpZ2h0LHJjQ2xpZW50LnRvcCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlmQldpZHRoID0gKHJjQ2xpZW50LnJpZ2h0IC0gcmNDbGllbnQubGVmdCAtIFBXTF9TQ1JPTExCQVJfUE9TQlVUVE9OX01JTldJRFRIIC0gMikgLyAyOworCisJCQlpZiAoZkJXaWR0aCA+IDApCisJCQl7CisJCQkJcmNNaW5CdXR0b24gPSBDUERGX1JlY3QocmNDbGllbnQubGVmdCxyY0NsaWVudC5ib3R0b20sCisJCQkJCXJjQ2xpZW50LmxlZnQgKyBmQldpZHRoLHJjQ2xpZW50LnRvcCk7CisJCQkJcmNNYXhCdXR0b24gPSBDUERGX1JlY3QocmNDbGllbnQucmlnaHQgLSBmQldpZHRoLHJjQ2xpZW50LmJvdHRvbSwKKwkJCQkJcmNDbGllbnQucmlnaHQscmNDbGllbnQudG9wKTsKKwkJCX0KKwkJCWVsc2UgU2V0VmlzaWJsZShGQUxTRSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTQlRfVlNDUk9MTDoKKwkJaWYgKElzRmxvYXRCaWdnZXIocmNDbGllbnQudG9wIC0gcmNDbGllbnQuYm90dG9tLCBQV0xfU0NST0xMQkFSX0JVVFRPTl9XSURUSCAqIDIgKyBQV0xfU0NST0xMQkFSX1BPU0JVVFRPTl9NSU5XSURUSCArIDIpKQorCQl7CisJCQlyY01pbkJ1dHRvbiA9IENQREZfUmVjdChyY0NsaWVudC5sZWZ0LHJjQ2xpZW50LnRvcCAtIFBXTF9TQ1JPTExCQVJfQlVUVE9OX1dJRFRILAorCQkJCXJjQ2xpZW50LnJpZ2h0LHJjQ2xpZW50LnRvcCk7CisJCQlyY01heEJ1dHRvbiA9IENQREZfUmVjdChyY0NsaWVudC5sZWZ0LHJjQ2xpZW50LmJvdHRvbSwKKwkJCQlyY0NsaWVudC5yaWdodCxyY0NsaWVudC5ib3R0b20gKyBQV0xfU0NST0xMQkFSX0JVVFRPTl9XSURUSCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlmQldpZHRoID0gKHJjQ2xpZW50LnRvcCAtIHJjQ2xpZW50LmJvdHRvbSAtIFBXTF9TQ1JPTExCQVJfUE9TQlVUVE9OX01JTldJRFRIIC0gMikgLyAyOworCisJCQlpZiAoSXNGbG9hdEJpZ2dlcihmQldpZHRoLCAwKSkKKwkJCXsKKwkJCQlyY01pbkJ1dHRvbiA9IENQREZfUmVjdChyY0NsaWVudC5sZWZ0LHJjQ2xpZW50LnRvcCAtIGZCV2lkdGgsCisJCQkJCXJjQ2xpZW50LnJpZ2h0LHJjQ2xpZW50LnRvcCk7CisJCQkJcmNNYXhCdXR0b24gPSBDUERGX1JlY3QocmNDbGllbnQubGVmdCxyY0NsaWVudC5ib3R0b20sCisJCQkJCXJjQ2xpZW50LnJpZ2h0LHJjQ2xpZW50LmJvdHRvbSArIGZCV2lkdGgpOworCQkJfQorCQkJZWxzZSBTZXRWaXNpYmxlKEZBTFNFKTsKKwkJfQorCQlicmVhazsKKwl9CQorCQorLy8JaWYgKElzVmlzaWJsZSgpKQorCXsKKwkJaWYgKG1fcE1pbkJ1dHRvbikKKwkJCW1fcE1pbkJ1dHRvbi0+TW92ZShyY01pbkJ1dHRvbixUUlVFLEZBTFNFKTsKKwkJCisJCWlmIChtX3BNYXhCdXR0b24pCisJCQltX3BNYXhCdXR0b24tPk1vdmUocmNNYXhCdXR0b24sVFJVRSxGQUxTRSk7CisKKwkJTW92ZVBvc0J1dHRvbihGQUxTRSk7CisJfQorfQorCit2b2lkIENQV0xfU2Nyb2xsQmFyOjpHZXRUaGlzQXBwZWFyYW5jZVN0cmVhbShDRlhfQnl0ZVRleHRCdWYgJiBzQXBwU3RyZWFtKQoreworCUNQREZfUmVjdCByZWN0V25kID0gR2V0V2luZG93UmVjdCgpOworCisJaWYgKElzVmlzaWJsZSgpICYmICFyZWN0V25kLklzRW1wdHkoKSkKKwl7CisJCUNGWF9CeXRlVGV4dEJ1ZiBzQnV0dG9uOwkJCisKKwkJc0J1dHRvbiA8PCAicVxuIjsKKwkJc0J1dHRvbiA8PCAiMCB3XG4iIDw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKEdldEJhY2tncm91bmRDb2xvcigpLFRSVUUpOworCQlzQnV0dG9uIDw8IHJlY3RXbmQubGVmdCA8PCAiICIgPDwgcmVjdFduZC5ib3R0b20gPDwgIiAiCisJCQkJPDwgcmVjdFduZC5yaWdodCAtIHJlY3RXbmQubGVmdCA8PCAiICIgPDwgcmVjdFduZC50b3AgLSByZWN0V25kLmJvdHRvbSA8PCAiIHJlIGIgUVxuIjsJCisKKwkJc0FwcFN0cmVhbSA8PCBzQnV0dG9uOwkKKwl9Cit9CisKK3ZvaWQgQ1BXTF9TY3JvbGxCYXI6OkRyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKQoreworLy8JQ1BXTF9XbmQ6OkRyYXdUaGlzQXBwZWFyYW5jZShwRGV2aWNlLHBVc2VyMkRldmljZSk7CisJQ1BERl9SZWN0IHJlY3RXbmQgPSBHZXRXaW5kb3dSZWN0KCk7CisKKwlpZiAoSXNWaXNpYmxlKCkgJiYgIXJlY3RXbmQuSXNFbXB0eSgpKQorCXsKKwkJQ1BXTF9VdGlsczo6RHJhd0ZpbGxSZWN0KHBEZXZpY2UsIHBVc2VyMkRldmljZSwgcmVjdFduZCwgdGhpcy0+R2V0QmFja2dyb3VuZENvbG9yKCksIEdldFRyYW5zcGFyZW5jeSgpKTsKKworCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlTGluZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIAorCQkJQ1BERl9Qb2ludChyZWN0V25kLmxlZnQrMi4wZixyZWN0V25kLnRvcC0yLjBmKSwgQ1BERl9Qb2ludChyZWN0V25kLmxlZnQrMi4wZixyZWN0V25kLmJvdHRvbSsyLjBmKSwgCisJCQlBcmdiRW5jb2RlKHRoaXMtPkdldFRyYW5zcGFyZW5jeSgpLDEwMCwxMDAsMTAwKSwxLjBmKTsKKworCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlTGluZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIAorCQkJQ1BERl9Qb2ludChyZWN0V25kLnJpZ2h0LTIuMGYscmVjdFduZC50b3AtMi4wZiksIENQREZfUG9pbnQocmVjdFduZC5yaWdodC0yLjBmLHJlY3RXbmQuYm90dG9tKzIuMGYpLCAKKwkJCUFyZ2JFbmNvZGUodGhpcy0+R2V0VHJhbnNwYXJlbmN5KCksMTAwLDEwMCwxMDApLDEuMGYpOworCX0KK30KKworRlhfQk9PTCBDUFdMX1Njcm9sbEJhcjo6T25MQnV0dG9uRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKQoreworCUNQV0xfV25kOjpPbkxCdXR0b25Eb3duKHBvaW50LG5GbGFnKTsKKworCS8vU2V0Rm9jdXMoKTsKKworCWlmIChIYXNGbGFnKFBXU19BVVRPVFJBTlNQQVJFTlQpKQorCXsKKwkJaWYgKEdldFRyYW5zcGFyZW5jeSgpICE9IDI1NSkKKwkJeworCQkJU2V0VHJhbnNwYXJlbmN5KDI1NSk7CisJCQlJbnZhbGlkYXRlUmVjdCgpOworCQl9CisJfQorCisJQ1BERl9SZWN0IHJjTWluQXJlYSxyY01heEFyZWE7CisKKwlpZiAobV9wUG9zQnV0dG9uICYmIG1fcFBvc0J1dHRvbi0+SXNWaXNpYmxlKCkpCisJeworCQlDUERGX1JlY3QgcmNDbGllbnQgPSB0aGlzLT5HZXRDbGllbnRSZWN0KCk7CisJCUNQREZfUmVjdCByY1Bvc0J1dHRvbiA9IG1fcFBvc0J1dHRvbi0+R2V0V2luZG93UmVjdCgpOworCisJCXN3aXRjaCAobV9zYlR5cGUpCisJCXsKKwkJY2FzZSBTQlRfSFNDUk9MTDoKKwkJCXJjTWluQXJlYSA9IENQREZfUmVjdChyY0NsaWVudC5sZWZ0ICsgUFdMX1NDUk9MTEJBUl9CVVRUT05fV0lEVEgscmNDbGllbnQuYm90dG9tLAorCQkJCQkJCXJjUG9zQnV0dG9uLmxlZnQscmNDbGllbnQudG9wKTsKKwkJCXJjTWF4QXJlYSA9IENQREZfUmVjdChyY1Bvc0J1dHRvbi5yaWdodCxyY0NsaWVudC5ib3R0b20sCisJCQkJCQkJcmNDbGllbnQucmlnaHQgLSBQV0xfU0NST0xMQkFSX0JVVFRPTl9XSURUSCxyY0NsaWVudC50b3ApOworCisJCQlicmVhazsKKwkJY2FzZSBTQlRfVlNDUk9MTDoKKwkJCXJjTWluQXJlYSA9IENQREZfUmVjdChyY0NsaWVudC5sZWZ0LHJjUG9zQnV0dG9uLnRvcCwKKwkJCQkJCQlyY0NsaWVudC5yaWdodCxyY0NsaWVudC50b3AgLSBQV0xfU0NST0xMQkFSX0JVVFRPTl9XSURUSCk7CisJCQlyY01heEFyZWEgPSBDUERGX1JlY3QocmNDbGllbnQubGVmdCxyY0NsaWVudC5ib3R0b20gKyBQV0xfU0NST0xMQkFSX0JVVFRPTl9XSURUSCwKKwkJCQkJCQlyY0NsaWVudC5yaWdodCxyY1Bvc0J1dHRvbi5ib3R0b20pOworCQkJYnJlYWs7CisJCX0KKworCQlyY01pbkFyZWEuTm9ybWFsaXplKCk7CisJCXJjTWF4QXJlYS5Ob3JtYWxpemUoKTsKKworCQlpZiAocmNNaW5BcmVhLkNvbnRhaW5zKHBvaW50LngscG9pbnQueSkpCisJCXsKKwkJCW1fc0RhdGEuU3ViQmlnKCk7CisJCQlNb3ZlUG9zQnV0dG9uKFRSVUUpOworCQkJTm90aWZ5U2Nyb2xsV2luZG93KCk7CisJCX0KKworCQlpZiAocmNNYXhBcmVhLkNvbnRhaW5zKHBvaW50LngscG9pbnQueSkpCisJCXsKKwkJCW1fc0RhdGEuQWRkQmlnKCk7CisJCQlNb3ZlUG9zQnV0dG9uKFRSVUUpOworCQkJTm90aWZ5U2Nyb2xsV2luZG93KCk7CisJCX0KKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworRlhfQk9PTCBDUFdMX1Njcm9sbEJhcjo6T25MQnV0dG9uVXAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZykKK3sKKwlDUFdMX1duZDo6T25MQnV0dG9uVXAocG9pbnQsbkZsYWcpOworCisJaWYgKEhhc0ZsYWcoUFdTX0FVVE9UUkFOU1BBUkVOVCkpCisJeworCQlpZiAoR2V0VHJhbnNwYXJlbmN5KCkgIT0gUFdMX1NDUk9MTEJBUl9UUkFOU1BBUkFOQ1kpCisJCXsKKwkJCVNldFRyYW5zcGFyZW5jeShQV0xfU0NST0xMQkFSX1RSQU5TUEFSQU5DWSk7CisJCQlJbnZhbGlkYXRlUmVjdCgpOworCQl9CisJfQorCisJRW5kVGltZXIoKTsKKwltX2JNb3VzZURvd24gPSBGQUxTRTsKKworCXJldHVybiBUUlVFOworfQorCit2b2lkIENQV0xfU2Nyb2xsQmFyOjpPbk5vdGlmeShDUFdMX1duZCogcFduZCwgRlhfRFdPUkQgbXNnLCBGWF9JTlRQVFIgd1BhcmFtLCBGWF9JTlRQVFIgbFBhcmFtKQoreworCUNQV0xfV25kOjpPbk5vdGlmeShwV25kLG1zZyx3UGFyYW0sbFBhcmFtKTsKKworCXN3aXRjaCAobXNnKQorCXsKKwljYXNlIFBOTV9MQlVUVE9ORE9XTjoJCQkKKwkJaWYgKHBXbmQgPT0gbV9wTWluQnV0dG9uKQorCQl7CisJCQlPbk1pbkJ1dHRvbkxCRG93bigqKENQREZfUG9pbnQqKWxQYXJhbSk7CisJCX0KKworCQlpZiAocFduZCA9PSBtX3BNYXhCdXR0b24pCisJCXsKKwkJCU9uTWF4QnV0dG9uTEJEb3duKCooQ1BERl9Qb2ludCopbFBhcmFtKTsKKwkJfQorCisJCWlmIChwV25kID09IG1fcFBvc0J1dHRvbikKKwkJeworCQkJT25Qb3NCdXR0b25MQkRvd24oKihDUERGX1BvaW50KilsUGFyYW0pOwkJCQkKKwkJfQorCQlicmVhazsKKwljYXNlIFBOTV9MQlVUVE9OVVA6CisJCWlmIChwV25kID09IG1fcE1pbkJ1dHRvbikKKwkJeworCQkJT25NaW5CdXR0b25MQlVwKCooQ1BERl9Qb2ludCopbFBhcmFtKTsJCQorCQl9CisKKwkJaWYgKHBXbmQgPT0gbV9wTWF4QnV0dG9uKQorCQl7CisJCQlPbk1heEJ1dHRvbkxCVXAoKihDUERGX1BvaW50KilsUGFyYW0pOwkJCQkKKwkJfQorCisJCWlmIChwV25kID09IG1fcFBvc0J1dHRvbikKKwkJeworCQkJT25Qb3NCdXR0b25MQlVwKCooQ1BERl9Qb2ludCopbFBhcmFtKTsJCQkKKwkJfQorCQlicmVhazsKKwljYXNlIFBOTV9NT1VTRU1PVkU6CisJCWlmIChwV25kID09IG1fcE1pbkJ1dHRvbikKKwkJeworCQkJT25NaW5CdXR0b25Nb3VzZU1vdmUoKihDUERGX1BvaW50KilsUGFyYW0pOworCQl9CisKKwkJaWYgKHBXbmQgPT0gbV9wTWF4QnV0dG9uKQorCQl7CisJCQlPbk1heEJ1dHRvbk1vdXNlTW92ZSgqKENQREZfUG9pbnQqKWxQYXJhbSk7CQkJCQorCQl9CisKKwkJaWYgKHBXbmQgPT0gbV9wUG9zQnV0dG9uKQorCQl7CisJCQlPblBvc0J1dHRvbk1vdXNlTW92ZSgqKENQREZfUG9pbnQqKWxQYXJhbSk7CQkJCQorCQl9CisJCWJyZWFrOworCWNhc2UgUE5NX1NFVFNDUk9MTElORk86CisJCXsKKwkJCWlmIChQV0xfU0NST0xMX0lORk8gKiBwSW5mbyA9IChQV0xfU0NST0xMX0lORk8qKWxQYXJhbSkKKwkJCXsKKwkJCQlpZiAoRlhTWVNfbWVtY21wKCZtX09yaWdpbkluZm8sIHBJbmZvLCBzaXplb2YoUFdMX1NDUk9MTF9JTkZPKSkgIT0gMCkKKwkJCQl7CisJCQkJCW1fT3JpZ2luSW5mbyA9ICpwSW5mbzsKKwkJCQkJRlhfRkxPQVQgZk1heCA9IHBJbmZvLT5mQ29udGVudE1heCAtIHBJbmZvLT5mQ29udGVudE1pbiAtIHBJbmZvLT5mUGxhdGVXaWR0aDsKKwkJCQkJZk1heCA9IGZNYXggPiAwLjBmID8gZk1heCA6IDAuMGY7CisJCQkJCXRoaXMtPlNldFNjcm9sbFJhbmdlKDAsZk1heCwgcEluZm8tPmZQbGF0ZVdpZHRoKTsKKwkJCQkJdGhpcy0+U2V0U2Nyb2xsU3RlcChwSW5mby0+ZkJpZ1N0ZXAscEluZm8tPmZTbWFsbFN0ZXApOworCQkJCX0KKwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIFBOTV9TRVRTQ1JPTExQT1M6CisJCXsKKwkJCUZYX0ZMT0FUIGZQb3MgPSAqKEZYX0ZMT0FUKilsUGFyYW07CisJCQlzd2l0Y2ggKHRoaXMtPm1fc2JUeXBlKQorCQkJeworCQkJY2FzZSBTQlRfSFNDUk9MTDoKKwkJCQlmUG9zID0gZlBvcyAtIG1fT3JpZ2luSW5mby5mQ29udGVudE1pbjsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0JUX1ZTQ1JPTEw6CisJCQkJZlBvcyA9IG1fT3JpZ2luSW5mby5mQ29udGVudE1heCAtIGZQb3M7CisJCQkJYnJlYWs7CisJCQl9CisJCQl0aGlzLT5TZXRTY3JvbGxQb3MoZlBvcyk7CisJCX0KKwkJYnJlYWs7CisJfQorfQorCit2b2lkIENQV0xfU2Nyb2xsQmFyOjpDcmVhdGVCdXR0b25zKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKQoreworCVBXTF9DUkVBVEVQQVJBTQlzY3AgPSBjcDsKKwlzY3AucFBhcmVudFduZCA9IHRoaXM7CisJc2NwLmR3Qm9yZGVyV2lkdGggPSAyOworCXNjcC5uQm9yZGVyU3R5bGUgPSBQQlNfQkVWRUxFRDsKKwkKKwlzY3AuZHdGbGFncyA9IFBXU19WSVNJQkxFIHwgUFdTX0NISUxEIHwgUFdTX0JPUkRFUiB8IFBXU19CQUNLR1JPVU5EIHwgUFdTX05PUkVGUkVTSENMSVA7CisKKwlpZiAoIW1fcE1pbkJ1dHRvbikgCisJeworCQltX3BNaW5CdXR0b24gPSBuZXcgQ1BXTF9TQkJ1dHRvbihtX3NiVHlwZSxQU0JUX01JTik7CisJCW1fcE1pbkJ1dHRvbi0+Q3JlYXRlKHNjcCk7CisJfQorCisJaWYgKCFtX3BNYXhCdXR0b24pCisJeworCQltX3BNYXhCdXR0b24gPSBuZXcgQ1BXTF9TQkJ1dHRvbihtX3NiVHlwZSxQU0JUX01BWCk7CisJCW1fcE1heEJ1dHRvbi0+Q3JlYXRlKHNjcCk7CisJfQorCisJaWYgKCFtX3BQb3NCdXR0b24pCisJeworCQltX3BQb3NCdXR0b24gPSBuZXcgQ1BXTF9TQkJ1dHRvbihtX3NiVHlwZSxQU0JUX1BPUyk7CisJCW1fcFBvc0J1dHRvbi0+U2V0VmlzaWJsZShGQUxTRSk7CisJCW1fcFBvc0J1dHRvbi0+Q3JlYXRlKHNjcCk7CisJfQorfQorCitGWF9GTE9BVCBDUFdMX1Njcm9sbEJhcjo6R2V0U2Nyb2xsQmFyV2lkdGgoKSBjb25zdAoreworCWlmICghSXNWaXNpYmxlKCkpIHJldHVybiAwOworCisJcmV0dXJuIFBXTF9TQ1JPTExCQVJfV0lEVEg7Cit9CisKK3ZvaWQgQ1BXTF9TY3JvbGxCYXI6OlNldFNjcm9sbFJhbmdlKEZYX0ZMT0FUIGZNaW4sRlhfRkxPQVQgZk1heCxGWF9GTE9BVCBmQ2xpZW50V2lkdGgpCit7CisJaWYgKG1fcFBvc0J1dHRvbikKKwl7CisJCW1fc0RhdGEuU2V0U2Nyb2xsUmFuZ2UoZk1pbixmTWF4KTsKKwkJbV9zRGF0YS5TZXRDbGllbnRXaWR0aChmQ2xpZW50V2lkdGgpOworCisJCWlmIChJc0Zsb2F0U21hbGxlcihtX3NEYXRhLlNjcm9sbFJhbmdlLkdldFdpZHRoKCksIDAuMGYpKQorCQl7CisJCQltX3BQb3NCdXR0b24tPlNldFZpc2libGUoRkFMU0UpOworCQl9CisJCWVsc2UKKwkJeworCQkJbV9wUG9zQnV0dG9uLT5TZXRWaXNpYmxlKFRSVUUpOwkKKwkJCU1vdmVQb3NCdXR0b24oVFJVRSk7CisJCX0KKwl9Cit9CisKK3ZvaWQgQ1BXTF9TY3JvbGxCYXI6OlNldFNjcm9sbFBvcyhGWF9GTE9BVCBmUG9zKQoreworCUZYX0ZMT0FUIGZPbGRQb3MgPSBtX3NEYXRhLmZTY3JvbGxQb3M7CisKKwltX3NEYXRhLlNldFBvcyhmUG9zKTsKKworCWlmICghSXNGbG9hdEVxdWFsKG1fc0RhdGEuZlNjcm9sbFBvcywgZk9sZFBvcykpCisJCU1vdmVQb3NCdXR0b24oVFJVRSk7Cit9CisKK3ZvaWQgQ1BXTF9TY3JvbGxCYXI6OlNldFNjcm9sbFN0ZXAoRlhfRkxPQVQgZkJpZ1N0ZXAsRlhfRkxPQVQgZlNtYWxsU3RlcCkKK3sKKwltX3NEYXRhLlNldEJpZ1N0ZXAoZkJpZ1N0ZXApOworCW1fc0RhdGEuU2V0U21hbGxTdGVwKGZTbWFsbFN0ZXApOworfQorCit2b2lkIENQV0xfU2Nyb2xsQmFyOjpNb3ZlUG9zQnV0dG9uKEZYX0JPT0wgYlJlZnJlc2gpCit7CisJQVNTRVJUIChtX3BQb3NCdXR0b24gIT0gTlVMTCk7CisJQVNTRVJUIChtX3BNaW5CdXR0b24gIT0gTlVMTCk7CisJQVNTRVJUIChtX3BNYXhCdXR0b24gIT0gTlVMTCk7CisKKwlpZiAobV9wUG9zQnV0dG9uLT5Jc1Zpc2libGUoKSkKKwl7CisKKworCisKKwkJQ1BERl9SZWN0IHJjQ2xpZW50OworCQlDUERGX1JlY3QgcmNQb3NBcmVhLHJjUG9zQnV0dG9uOwkKKworCQlyY0NsaWVudCA9IHRoaXMtPkdldENsaWVudFJlY3QoKTsKKwkJcmNQb3NBcmVhID0gR2V0U2Nyb2xsQXJlYSgpOworCisJCUZYX0ZMT0FUIGZMZWZ0LGZSaWdodCxmVG9wLGZCb3R0b207CisKKwkJc3dpdGNoIChtX3NiVHlwZSkKKwkJeworCQljYXNlIFNCVF9IU0NST0xMOgorCQkJZkxlZnQgPSBUcnVlVG9GYWNlKG1fc0RhdGEuZlNjcm9sbFBvcyk7CisJCQlmUmlnaHQgPSBUcnVlVG9GYWNlKG1fc0RhdGEuZlNjcm9sbFBvcyArIG1fc0RhdGEuZkNsaWVudFdpZHRoKTsKKworCQkJaWYgKGZSaWdodCAtIGZMZWZ0IDwgUFdMX1NDUk9MTEJBUl9QT1NCVVRUT05fTUlOV0lEVEgpCisJCQkJZlJpZ2h0ID0gZkxlZnQgKyBQV0xfU0NST0xMQkFSX1BPU0JVVFRPTl9NSU5XSURUSDsKKworCQkJaWYgKGZSaWdodCA+IHJjUG9zQXJlYS5yaWdodCkKKwkJCXsKKwkJCQlmUmlnaHQgPSByY1Bvc0FyZWEucmlnaHQ7CisJCQkJZkxlZnQgPSBmUmlnaHQgLSBQV0xfU0NST0xMQkFSX1BPU0JVVFRPTl9NSU5XSURUSDsKKwkJCX0KKworCQkJcmNQb3NCdXR0b24gPSBDUERGX1JlY3QoZkxlZnQgLAorCQkJCQkJCQlyY1Bvc0FyZWEuYm90dG9tLAorCQkJCQkJCQlmUmlnaHQgLAorCQkJCQkJCQlyY1Bvc0FyZWEudG9wKTsKKwkJCQorCQkJYnJlYWs7CisJCWNhc2UgU0JUX1ZTQ1JPTEw6CisJCQlmQm90dG9tID0gVHJ1ZVRvRmFjZShtX3NEYXRhLmZTY3JvbGxQb3MgKyBtX3NEYXRhLmZDbGllbnRXaWR0aCk7CisJCQlmVG9wID0gVHJ1ZVRvRmFjZShtX3NEYXRhLmZTY3JvbGxQb3MpOworCisJCQlpZiAoSXNGbG9hdFNtYWxsZXIoZlRvcCAtIGZCb3R0b20sIFBXTF9TQ1JPTExCQVJfUE9TQlVUVE9OX01JTldJRFRIKSkKKwkJCQlmQm90dG9tID0gZlRvcCAtIFBXTF9TQ1JPTExCQVJfUE9TQlVUVE9OX01JTldJRFRIOworCQkJCisJCQlpZiAoSXNGbG9hdFNtYWxsZXIoZkJvdHRvbSwgcmNQb3NBcmVhLmJvdHRvbSkpCisJCQl7CisJCQkJZkJvdHRvbSA9IHJjUG9zQXJlYS5ib3R0b207CisJCQkJZlRvcCA9IGZCb3R0b20gKyBQV0xfU0NST0xMQkFSX1BPU0JVVFRPTl9NSU5XSURUSDsKKwkJCX0KKworCQkJcmNQb3NCdXR0b24gPSBDUERGX1JlY3QocmNQb3NBcmVhLmxlZnQsCisJCQkJCQkJCWZCb3R0b20sCQkJCQkJCQkKKwkJCQkJCQkJcmNQb3NBcmVhLnJpZ2h0LAorCQkJCQkJCQlmVG9wKTsKKwkJCQorCQkJYnJlYWs7CisJCX0KKworCQltX3BQb3NCdXR0b24tPk1vdmUocmNQb3NCdXR0b24sVFJVRSxiUmVmcmVzaCk7CisJfQorfQorCit2b2lkIENQV0xfU2Nyb2xsQmFyOjpPbk1pbkJ1dHRvbkxCRG93bihjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpCit7CisJbV9zRGF0YS5TdWJTbWFsbCgpOworCU1vdmVQb3NCdXR0b24oVFJVRSk7CisJTm90aWZ5U2Nyb2xsV2luZG93KCk7CisKKwltX2JNaW5Pck1heCA9IFRSVUU7CisKKwlFbmRUaW1lcigpOworCUJlZ2luVGltZXIoMTAwKTsKK30KKwordm9pZCBDUFdMX1Njcm9sbEJhcjo6T25NaW5CdXR0b25MQlVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkKK3sKK30KKwordm9pZCBDUFdMX1Njcm9sbEJhcjo6T25NaW5CdXR0b25Nb3VzZU1vdmUoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KQorewkKK30KKwordm9pZCBDUFdMX1Njcm9sbEJhcjo6T25NYXhCdXR0b25MQkRvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KQoreworCW1fc0RhdGEuQWRkU21hbGwoKTsKKwlNb3ZlUG9zQnV0dG9uKFRSVUUpOworCU5vdGlmeVNjcm9sbFdpbmRvdygpOworCisJbV9iTWluT3JNYXggPSBGQUxTRTsKKwkKKwlFbmRUaW1lcigpOworCUJlZ2luVGltZXIoMTAwKTsKK30KKwordm9pZCBDUFdMX1Njcm9sbEJhcjo6T25NYXhCdXR0b25MQlVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkKK3sKK30KKwordm9pZCBDUFdMX1Njcm9sbEJhcjo6T25NYXhCdXR0b25Nb3VzZU1vdmUoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KQorewkKK30KKwordm9pZCBDUFdMX1Njcm9sbEJhcjo6T25Qb3NCdXR0b25MQkRvd24oY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KQoreworCW1fYk1vdXNlRG93biA9IFRSVUU7CisKKwlpZiAobV9wUG9zQnV0dG9uKQorCXsKKwkJQ1BERl9SZWN0IHJjUG9zQnV0dG9uID0gbV9wUG9zQnV0dG9uLT5HZXRXaW5kb3dSZWN0KCk7CisKKwkJc3dpdGNoKG1fc2JUeXBlKQorCQl7CisJCWNhc2UgU0JUX0hTQ1JPTEw6CisJCQltX25PbGRQb3MgPSBwb2ludC54OworCQkJbV9mT2xkUG9zQnV0dG9uID0gcmNQb3NCdXR0b24ubGVmdDsKKwkJCWJyZWFrOworCQljYXNlIFNCVF9WU0NST0xMOgorCQkJbV9uT2xkUG9zID0gcG9pbnQueTsKKwkJCW1fZk9sZFBvc0J1dHRvbiA9IHJjUG9zQnV0dG9uLnRvcDsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCit2b2lkIENQV0xfU2Nyb2xsQmFyOjpPblBvc0J1dHRvbkxCVXAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KQoreworCWlmIChtX2JNb3VzZURvd24pCisJeworCQlpZiAoIW1fYk5vdGlmeUZvcmV2ZXIpCisJCQlOb3RpZnlTY3JvbGxXaW5kb3coKTsKKwl9CisJbV9iTW91c2VEb3duID0gRkFMU0U7Cit9CisKK3ZvaWQgQ1BXTF9TY3JvbGxCYXI6Ok9uUG9zQnV0dG9uTW91c2VNb3ZlKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkKK3sKKwlGWF9GTE9BVCBmT2xkU2Nyb2xsUG9zID0gbV9zRGF0YS5mU2Nyb2xsUG9zOworCisJRlhfRkxPQVQgZk5ld1BvcyA9IDA7CisKKwlzd2l0Y2ggKG1fc2JUeXBlKQorCXsKKwljYXNlIFNCVF9IU0NST0xMOgorCQlpZiAoRlhTWVNfZmFicyhwb2ludC54IC0gbV9uT2xkUG9zKSA8IDEpIHJldHVybjsKKwkJZk5ld1BvcyA9IEZhY2VUb1RydWUobV9mT2xkUG9zQnV0dG9uICsgcG9pbnQueCAtIG1fbk9sZFBvcyk7CisJCWJyZWFrOworCWNhc2UgU0JUX1ZTQ1JPTEw6CisJCWlmIChGWFNZU19mYWJzKHBvaW50LnkgLSBtX25PbGRQb3MpIDwgMSkgcmV0dXJuOworCQlmTmV3UG9zID0gRmFjZVRvVHJ1ZShtX2ZPbGRQb3NCdXR0b24gKyBwb2ludC55IC0gbV9uT2xkUG9zKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKG1fYk1vdXNlRG93bikKKwl7CisJCXN3aXRjaCAobV9zYlR5cGUpCisJCXsKKwkJY2FzZSBTQlRfSFNDUk9MTDoKKworCQkJaWYgKElzRmxvYXRTbWFsbGVyKGZOZXdQb3MsIG1fc0RhdGEuU2Nyb2xsUmFuZ2UuZk1pbikpCisJCQl7CisJCQkJZk5ld1BvcyA9IG1fc0RhdGEuU2Nyb2xsUmFuZ2UuZk1pbjsKKwkJCX0KKworCQkJaWYgKElzRmxvYXRCaWdnZXIoZk5ld1BvcywgbV9zRGF0YS5TY3JvbGxSYW5nZS5mTWF4KSkKKwkJCXsKKwkJCQlmTmV3UG9zID0gbV9zRGF0YS5TY3JvbGxSYW5nZS5mTWF4OworCQkJfQorCisJCQltX3NEYXRhLlNldFBvcyhmTmV3UG9zKTsKKwkJCQorCQkJYnJlYWs7CisJCWNhc2UgU0JUX1ZTQ1JPTEw6CisJCQorCQkJaWYgKElzRmxvYXRTbWFsbGVyKGZOZXdQb3MsIG1fc0RhdGEuU2Nyb2xsUmFuZ2UuZk1pbikpCisJCQl7CisJCQkJZk5ld1BvcyA9IG1fc0RhdGEuU2Nyb2xsUmFuZ2UuZk1pbjsKKwkJCX0KKworCQkJaWYgKElzRmxvYXRCaWdnZXIoZk5ld1BvcywgbV9zRGF0YS5TY3JvbGxSYW5nZS5mTWF4KSkKKwkJCXsKKwkJCQlmTmV3UG9zID0gbV9zRGF0YS5TY3JvbGxSYW5nZS5mTWF4OworCQkJfQkKKworCQkJbV9zRGF0YS5TZXRQb3MoZk5ld1Bvcyk7CisJCQorCQkJYnJlYWs7CisJCX0JCisJCQorCQlpZiAoIUlzRmxvYXRFcXVhbChmT2xkU2Nyb2xsUG9zLCBtX3NEYXRhLmZTY3JvbGxQb3MpKQorCQl7CQkJCisJCQlNb3ZlUG9zQnV0dG9uKFRSVUUpOworCisJCQlpZiAobV9iTm90aWZ5Rm9yZXZlcikKKwkJCQlOb3RpZnlTY3JvbGxXaW5kb3coKTsKKwkJfQorCX0KK30KKwordm9pZCBDUFdMX1Njcm9sbEJhcjo6Tm90aWZ5U2Nyb2xsV2luZG93KCkKK3sKKwlpZiAoQ1BXTF9XbmQgKiBwUGFyZW50ID0gdGhpcy0+R2V0UGFyZW50V2luZG93KCkpCisJeworCQlGWF9GTE9BVCBmUG9zOworCQlzd2l0Y2ggKHRoaXMtPm1fc2JUeXBlKQorCQl7CisJCWNhc2UgU0JUX0hTQ1JPTEw6CisJCQlmUG9zID0gbV9PcmlnaW5JbmZvLmZDb250ZW50TWluICsgbV9zRGF0YS5mU2Nyb2xsUG9zOworCQkJYnJlYWs7CisJCWNhc2UgU0JUX1ZTQ1JPTEw6CisJCQlmUG9zID0gbV9PcmlnaW5JbmZvLmZDb250ZW50TWF4IC0gbV9zRGF0YS5mU2Nyb2xsUG9zOworCQkJYnJlYWs7CisJCX0JCisJCXBQYXJlbnQtPk9uTm90aWZ5KHRoaXMsUE5NX1NDUk9MTFdJTkRPVywoRlhfSU5UUFRSKW1fc2JUeXBlLChGWF9JTlRQVFIpJmZQb3MpOworCX0KK30KKworQ1BERl9SZWN0IENQV0xfU2Nyb2xsQmFyOjpHZXRTY3JvbGxBcmVhKCkgY29uc3QKK3sKKwlDUERGX1JlY3QgcmNDbGllbnQgPSBHZXRDbGllbnRSZWN0KCk7CisJQ1BERl9SZWN0IHJjQXJlYTsKKworCWlmICghbV9wTWluQnV0dG9uIHx8ICFtX3BNYXhCdXR0b24pcmV0dXJuIHJjQ2xpZW50OworCisJQ1BERl9SZWN0IHJjTWluID0gbV9wTWluQnV0dG9uLT5HZXRXaW5kb3dSZWN0KCk7CisJQ1BERl9SZWN0IHJjTWF4ID0gbV9wTWF4QnV0dG9uLT5HZXRXaW5kb3dSZWN0KCk7CisKKwlGWF9GTE9BVCBmTWluV2lkdGggPSByY01pbi5yaWdodCAtIHJjTWluLmxlZnQ7CisJRlhfRkxPQVQgZk1pbkhlaWdodCA9IHJjTWluLnRvcCAtIHJjTWluLmJvdHRvbTsKKwlGWF9GTE9BVCBmTWF4V2lkdGggPSByY01heC5yaWdodCAtIHJjTWF4LmxlZnQ7CisJRlhfRkxPQVQgZk1heEhlaWdodCA9IHJjTWF4LnRvcCAtIHJjTWF4LmJvdHRvbTsKKworCXN3aXRjaChtX3NiVHlwZSkKKwl7CisJY2FzZSBTQlRfSFNDUk9MTDoKKwkJaWYgKHJjQ2xpZW50LnJpZ2h0IC0gcmNDbGllbnQubGVmdCA+IGZNaW5XaWR0aCArIGZNYXhXaWR0aCArIDIpCisJCXsKKwkJCXJjQXJlYSA9IENQREZfUmVjdChyY0NsaWVudC5sZWZ0ICsgZk1pbldpZHRoICsgMSxyY0NsaWVudC5ib3R0b20sCisJCQkJCQlyY0NsaWVudC5yaWdodCAtIGZNYXhXaWR0aCAtIDEscmNDbGllbnQudG9wKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCXJjQXJlYSA9IENQREZfUmVjdChyY0NsaWVudC5sZWZ0ICsgZk1pbldpZHRoICsgMSxyY0NsaWVudC5ib3R0b20sCisJCQkJCQlyY0NsaWVudC5sZWZ0ICsgZk1pbldpZHRoICsgMSxyY0NsaWVudC50b3ApOworCQl9CisJCWJyZWFrOworCWNhc2UgU0JUX1ZTQ1JPTEw6CisJCWlmIChyY0NsaWVudC50b3AgLSByY0NsaWVudC5ib3R0b20gPiBmTWluSGVpZ2h0ICsgZk1heEhlaWdodCArIDIpCisJCXsKKwkJCXJjQXJlYSA9IENQREZfUmVjdChyY0NsaWVudC5sZWZ0LHJjQ2xpZW50LmJvdHRvbSArIGZNaW5IZWlnaHQgKyAxLAorCQkJCQkJcmNDbGllbnQucmlnaHQscmNDbGllbnQudG9wIC0gZk1heEhlaWdodCAtIDEpOworCQl9CisJCWVsc2UKKwkJeworCQkJcmNBcmVhID0gQ1BERl9SZWN0KHJjQ2xpZW50LmxlZnQscmNDbGllbnQuYm90dG9tICsgZk1pbkhlaWdodCArIDEsCisJCQkJCQlyY0NsaWVudC5yaWdodCxyY0NsaWVudC5ib3R0b20gKyBmTWluSGVpZ2h0ICsgMSk7CisJCX0KKwkJYnJlYWs7CisJfQorCQorCXJjQXJlYS5Ob3JtYWxpemUoKTsKKworCXJldHVybiByY0FyZWE7Cit9CisKK0ZYX0ZMT0FUIENQV0xfU2Nyb2xsQmFyOjpUcnVlVG9GYWNlKEZYX0ZMT0FUIGZUcnVlKQoreworCUNQREZfUmVjdCByY1Bvc0FyZWE7CQorCXJjUG9zQXJlYSA9IEdldFNjcm9sbEFyZWEoKTsKKworCUZYX0ZMT0FUIGZGYWN0V2lkdGggPSBtX3NEYXRhLlNjcm9sbFJhbmdlLkdldFdpZHRoKCkgKyBtX3NEYXRhLmZDbGllbnRXaWR0aDsKKwlmRmFjdFdpZHRoID0gZkZhY3RXaWR0aCA9PSAwID8gMSA6IGZGYWN0V2lkdGg7CisKKwlGWF9GTE9BVCBmRmFjZSA9IDA7CisKKwlzd2l0Y2gobV9zYlR5cGUpCisJeworCWNhc2UgU0JUX0hTQ1JPTEw6CisJCWZGYWNlID0gcmNQb3NBcmVhLmxlZnQgKyBmVHJ1ZSAqIChyY1Bvc0FyZWEucmlnaHQgLSByY1Bvc0FyZWEubGVmdCkgLyBmRmFjdFdpZHRoOworCQlicmVhazsKKwljYXNlIFNCVF9WU0NST0xMOgorCQlmRmFjZSA9IHJjUG9zQXJlYS50b3AgLSBmVHJ1ZSAqIChyY1Bvc0FyZWEudG9wIC0gcmNQb3NBcmVhLmJvdHRvbSkgLyBmRmFjdFdpZHRoOworCQlicmVhazsKKwl9CQorCisJcmV0dXJuIGZGYWNlOworfQorCitGWF9GTE9BVCBDUFdMX1Njcm9sbEJhcjo6RmFjZVRvVHJ1ZShGWF9GTE9BVCBmRmFjZSkKK3sKKwlDUERGX1JlY3QgcmNQb3NBcmVhOwkKKwlyY1Bvc0FyZWEgPSBHZXRTY3JvbGxBcmVhKCk7CisKKwlGWF9GTE9BVCBmRmFjdFdpZHRoID0gbV9zRGF0YS5TY3JvbGxSYW5nZS5HZXRXaWR0aCgpICsgbV9zRGF0YS5mQ2xpZW50V2lkdGg7CisJZkZhY3RXaWR0aCA9IGZGYWN0V2lkdGggPT0gMCA/IDEgOiBmRmFjdFdpZHRoOworCisJRlhfRkxPQVQgZlRydWUgPSAwOworCisJc3dpdGNoKG1fc2JUeXBlKQorCXsKKwljYXNlIFNCVF9IU0NST0xMOgorCQlmVHJ1ZSA9ICAoZkZhY2UgLSByY1Bvc0FyZWEubGVmdCkgKiBmRmFjdFdpZHRoIC8gKHJjUG9zQXJlYS5yaWdodCAtIHJjUG9zQXJlYS5sZWZ0KTsKKwkJYnJlYWs7CisJY2FzZSBTQlRfVlNDUk9MTDoKKwkJZlRydWUgPSAocmNQb3NBcmVhLnRvcCAtIGZGYWNlKSAqIGZGYWN0V2lkdGggLyAocmNQb3NBcmVhLnRvcCAtIHJjUG9zQXJlYS5ib3R0b20pOworCQlicmVhazsKKwl9CQorCisJcmV0dXJuIGZUcnVlOworfQorCit2b2lkIENQV0xfU2Nyb2xsQmFyOjpDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCkKK3sKKwlDcmVhdGVCdXR0b25zKGNwKTsKK30KKwordm9pZCBDUFdMX1Njcm9sbEJhcjo6VGltZXJQcm9jKCkKK3sKKwlQV0xfU0NST0xMX1BSSVZBVEVEQVRBIHNUZW1wID0gbV9zRGF0YTsKKworCWlmIChtX2JNaW5Pck1heCltX3NEYXRhLlN1YlNtYWxsKCk7CQorCWVsc2UgbV9zRGF0YS5BZGRTbWFsbCgpOworCisJaWYgKEZYU1lTX21lbWNtcCgmbV9zRGF0YSwgJnNUZW1wLCBzaXplb2YoUFdMX1NDUk9MTF9QUklWQVRFREFUQSkpICE9IDApCisJeworCQlNb3ZlUG9zQnV0dG9uKFRSVUUpOworCQlOb3RpZnlTY3JvbGxXaW5kb3coKTsKKwl9Cit9CisKKy8qCit2b2lkIENQV0xfU2Nyb2xsQmFyOjpPblNldEZvY3VzKCkKK3sKKwlpZiAoR2V0VHJhbnNwYXJlbmN5KCkgIT0gMjU1KQorCXsKKwkJU2V0VHJhbnNwYXJlbmN5KDI1NSk7CisJCUludmFsaWRhdGVSZWN0KCk7CisJfQorfQorCit2b2lkIENQV0xfU2Nyb2xsQmFyOjpPbktpbGxGb2N1cygpCit7CisJaWYgKEdldFRyYW5zcGFyZW5jeSgpICE9IFBXTF9TQ1JPTExCQVJfVFJBTlNQQVJBTkNZKQorCXsKKwkJU2V0VHJhbnNwYXJlbmN5KFBXTF9TQ1JPTExCQVJfVFJBTlNQQVJBTkNZKTsKKwkJSW52YWxpZGF0ZVJlY3QoKTsKKwl9Cit9CisqLworCmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX1NpZ25hdHVyZS5jcHAgYi9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX1NpZ25hdHVyZS5jcHAKaW5kZXggMzYyOTdmMy4uNWQ3OWNlOSAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9TaWduYXR1cmUuY3BwCisrKyBiL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfU2lnbmF0dXJlLmNwcApAQCAtMSwyMjAgKzEsMjIwIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUERGV2luZG93LmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9XbmQuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0ljb24uaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1NpZ25hdHVyZS5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfTGFiZWwuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1V0aWxzLmgiDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfU2lnbmF0dXJlX0ltYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUNQV0xfU2lnbmF0dXJlX0ltYWdlOjpDUFdMX1NpZ25hdHVyZV9JbWFnZSgpIDogbV9wSW1hZ2UoTlVMTCkNCi17DQotfQ0KLQ0KLUNQV0xfU2lnbmF0dXJlX0ltYWdlOjp+Q1BXTF9TaWduYXR1cmVfSW1hZ2UoKQ0KLXsNCi19DQotDQotdm9pZCBDUFdMX1NpZ25hdHVyZV9JbWFnZTo6U2V0SW1hZ2UoQ0ZYX0RJQlNvdXJjZSogcEltYWdlKQ0KLXsNCi0JbV9wSW1hZ2UgPSBwSW1hZ2U7DQotfQ0KLQ0KLUNGWF9ESUJTb3VyY2UqIENQV0xfU2lnbmF0dXJlX0ltYWdlOjpHZXRJbWFnZSgpDQotew0KLQlyZXR1cm4gbV9wSW1hZ2U7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9TaWduYXR1cmVfSW1hZ2U6OkRyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKQ0KLXsNCi0JQ1BXTF9XbmQ6OkRyYXdUaGlzQXBwZWFyYW5jZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UpOw0KLQ0KLQlpZiAobV9wSW1hZ2UpDQotCXsNCi0JCUNQREZfUmVjdCByY0NsaWVudCA9IEdldENsaWVudFJlY3QoKTsNCi0NCi0JCUZYX0ZMT0FUIHgsIHk7DQotCQlwVXNlcjJEZXZpY2UtPlRyYW5zZm9ybShyY0NsaWVudC5sZWZ0LCByY0NsaWVudC50b3AsIHgsIHkpOw0KLQ0KLQkJcERldmljZS0+U3RyZXRjaERJQml0cyhtX3BJbWFnZSwgKEZYX0lOVDMyKXgsIChGWF9JTlQzMil5LCANCi0JCQkoRlhfSU5UMzIpcmNDbGllbnQuV2lkdGgoKSwgKEZYX0lOVDMyKXJjQ2xpZW50LkhlaWdodCgpKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENQV0xfU2lnbmF0dXJlX0ltYWdlOjpHZXRUaGlzQXBwZWFyYW5jZVN0cmVhbShDRlhfQnl0ZVRleHRCdWYgJiBzQXBwU3RyZWFtKQ0KLXsNCi0Jc0FwcFN0cmVhbSA8PCBDUFdMX0ltYWdlOjpHZXRJbWFnZUFwcFN0cmVhbSgpOw0KLX0NCi0NCi12b2lkIENQV0xfU2lnbmF0dXJlX0ltYWdlOjpHZXRTY2FsZShGWF9GTE9BVCAmIGZIU2NhbGUsRlhfRkxPQVQgJiBmVlNjYWxlKQ0KLXsNCi0JRlhfRkxPQVQgZkltYWdlVywgZkltYWdlSDsNCi0NCi0JR2V0SW1hZ2VTaXplKGZJbWFnZVcsIGZJbWFnZUgpOw0KLQ0KLQlDUERGX1JlY3QgcmNDbGllbnQgPSBHZXRDbGllbnRSZWN0KCk7DQotDQotCWZIU2NhbGUgPSByY0NsaWVudC5XaWR0aCgpIC8gZkltYWdlVzsNCi0JZlZTY2FsZSA9IHJjQ2xpZW50LkhlaWdodCgpIC8gZkltYWdlSDsJDQotfQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX1NpZ25hdHVyZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DUFdMX1NpZ25hdHVyZTo6Q1BXTF9TaWduYXR1cmUoKSA6IA0KLQltX3BUZXh0KE5VTEwpLA0KLQltX3BEZXNjcmlwdGlvbihOVUxMKSwNCi0JbV9wSW1hZ2UoTlVMTCksDQotCW1fYlRleHRFeGlzdChUUlVFKSwNCi0JbV9iSW1hZ2VFeGlzdChGQUxTRSksDQotCW1fYkZsYWdFeGlzdChUUlVFKQ0KLXsNCi19DQotDQotQ1BXTF9TaWduYXR1cmU6On5DUFdMX1NpZ25hdHVyZSgpDQotew0KLX0NCi0NCi12b2lkIENQV0xfU2lnbmF0dXJlOjpTZXRUZXh0RmxhZyhGWF9CT09MIGJUZXh0RXhpc3QpDQotew0KLQltX2JUZXh0RXhpc3QgPSBiVGV4dEV4aXN0Ow0KLQ0KLQlSZVBvc0NoaWxkV25kKCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9TaWduYXR1cmU6OlNldEltYWdlRmxhZyhGWF9CT09MIGJJbWFnZUV4aXN0KQ0KLXsNCi0JbV9iSW1hZ2VFeGlzdCA9IGJJbWFnZUV4aXN0Ow0KLQ0KLQlSZVBvc0NoaWxkV25kKCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9TaWduYXR1cmU6OlNldEZveGl0RmxhZyhGWF9CT09MIGJGbGFnRXhpc3QpDQotew0KLQltX2JGbGFnRXhpc3QgPSBiRmxhZ0V4aXN0Ow0KLX0NCi0NCi12b2lkIENQV0xfU2lnbmF0dXJlOjpTZXRUZXh0KEZYX0xQQ1dTVFIgc1RleHQpDQotew0KLQltX3BUZXh0LT5TZXRUZXh0KHNUZXh0KTsNCi0NCi0JUmVQb3NDaGlsZFduZCgpOw0KLX0NCi0NCi12b2lkIENQV0xfU2lnbmF0dXJlOjpTZXREZXNjcmlwdGlvbihGWF9MUENXU1RSIHN0cmluZykNCi17DQotCW1fcERlc2NyaXB0aW9uLT5TZXRUZXh0KHN0cmluZyk7DQotDQotCVJlUG9zQ2hpbGRXbmQoKTsNCi19DQotDQotdm9pZCBDUFdMX1NpZ25hdHVyZTo6U2V0SW1hZ2UoQ0ZYX0RJQlNvdXJjZSogcEltYWdlKQ0KLXsNCi0JbV9wSW1hZ2UtPlNldEltYWdlKHBJbWFnZSk7DQotDQotCVJlUG9zQ2hpbGRXbmQoKTsNCi19DQotDQotdm9pZCBDUFdMX1NpZ25hdHVyZTo6U2V0SW1hZ2VTdHJlYW0oQ1BERl9TdHJlYW0gKiBwU3RyZWFtLCBGWF9MUENTVFIgc0ltYWdlQWxpYXMpDQotew0KLQltX3BJbWFnZS0+U2V0UERGU3RyZWFtKHBTdHJlYW0pOw0KLQltX3BJbWFnZS0+U2V0SW1hZ2VBbGlhcyhzSW1hZ2VBbGlhcyk7DQotDQotCVJlUG9zQ2hpbGRXbmQoKTsNCi19DQotDQotdm9pZCBDUFdMX1NpZ25hdHVyZTo6UmVQb3NDaGlsZFduZCgpDQotew0KLQlDUERGX1JlY3QgcmNDbGllbnQgPSBHZXRDbGllbnRSZWN0KCk7DQotDQotCUNQREZfUmVjdCByY1RleHQgPSByY0NsaWVudDsNCi0JQ1BERl9SZWN0IHJjRGVzY3JpcHRpb24gPSByY0NsaWVudDsNCi0NCi0JRlhfQk9PTCBiVGV4dFZpc2libGUgPSBtX2JUZXh0RXhpc3QgJiYgbV9wVGV4dC0+R2V0VGV4dCgpLkdldExlbmd0aCgpID4gMDsNCi0JDQotCWlmICgoYlRleHRWaXNpYmxlIHx8IG1fYkltYWdlRXhpc3QpICYmDQotCQltX3BEZXNjcmlwdGlvbi0+R2V0VGV4dCgpLkdldExlbmd0aCgpID4gMCkNCi0Jew0KLQkJaWYgKHJjQ2xpZW50LldpZHRoKCkgPj0gcmNDbGllbnQuSGVpZ2h0KCkpDQotCQl7DQotCQkJcmNUZXh0LnJpZ2h0ID0gcmNUZXh0LmxlZnQgKyByY0NsaWVudC5XaWR0aCgpIC8gMi4wZjsNCi0JCQlyY0Rlc2NyaXB0aW9uLmxlZnQgPSByY0Rlc2NyaXB0aW9uLnJpZ2h0IC0gcmNDbGllbnQuV2lkdGgoKSAvIDIuMGY7DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJcmNUZXh0LmJvdHRvbSA9IHJjVGV4dC50b3AgLSByY0NsaWVudC5IZWlnaHQoKSAvIDIuMGY7DQotCQkJcmNEZXNjcmlwdGlvbi50b3AgPSByY0Rlc2NyaXB0aW9uLmJvdHRvbSArIHJjQ2xpZW50LkhlaWdodCgpIC8gMi4wZjsNCi0JCX0NCi0JfQ0KLQ0KLQltX3BUZXh0LT5TZXRWaXNpYmxlKGJUZXh0VmlzaWJsZSk7DQotCW1fcEltYWdlLT5TZXRWaXNpYmxlKG1fYkltYWdlRXhpc3QpOw0KLQ0KLQltX3BUZXh0LT5Nb3ZlKHJjVGV4dCwgVFJVRSwgRkFMU0UpOw0KLQltX3BJbWFnZS0+TW92ZShyY1RleHQsIFRSVUUsIEZBTFNFKTsNCi0JbV9wRGVzY3JpcHRpb24tPk1vdmUocmNEZXNjcmlwdGlvbiwgVFJVRSwgRkFMU0UpOw0KLX0NCi0NCi12b2lkIENQV0xfU2lnbmF0dXJlOjpDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCkNCi17DQotCW1fcEltYWdlID0gbmV3IENQV0xfU2lnbmF0dXJlX0ltYWdlOw0KLQlQV0xfQ1JFQVRFUEFSQU0gaWNwID0gY3A7DQotCWljcC5wUGFyZW50V25kID0gdGhpczsNCi0JaWNwLmR3RmxhZ3MgPSBQV1NfQ0hJTEQgfCBQV1NfVklTSUJMRTsNCi0JaWNwLnNUZXh0Q29sb3IgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLCAwKTsNCi0JbV9wSW1hZ2UtPkNyZWF0ZShpY3ApOw0KLQ0KLQltX3BUZXh0ID0gbmV3IENQV0xfTGFiZWw7DQotCVBXTF9DUkVBVEVQQVJBTSBhY3AgPSBjcDsNCi0JYWNwLnBQYXJlbnRXbmQgPSB0aGlzOw0KLQlhY3AuZHdGbGFncyA9IFBXU19DSElMRCB8IFBXU19WSVNJQkxFIHwgUFdTX0FVVE9GT05UU0laRSB8IFBFU19NVUxUSUxJTkUgfCBQRVNfQVVUT1JFVFVSTiB8IFBFU19NSURETEUgfCBQRVNfQ0VOVEVSOw0KLQlhY3Auc1RleHRDb2xvciA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksIDApOw0KLQltX3BUZXh0LT5DcmVhdGUoYWNwKTsNCi0NCi0JbV9wRGVzY3JpcHRpb24gPSBuZXcgQ1BXTF9MYWJlbDsNCi0JUFdMX0NSRUFURVBBUkFNIGRjcCA9IGNwOw0KLQlkY3AucFBhcmVudFduZCA9IHRoaXM7DQotCWRjcC5kd0ZsYWdzID0gUFdTX0NISUxEIHwgUFdTX1ZJU0lCTEUgfCBQV1NfQVVUT0ZPTlRTSVpFIHwgUEVTX01VTFRJTElORSB8IFBFU19BVVRPUkVUVVJOIHwgUEVTX0xFRlQgfCBQRVNfQ0VOVEVSOw0KLQlkY3Auc1RleHRDb2xvciA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksIDApOw0KLQltX3BEZXNjcmlwdGlvbi0+Q3JlYXRlKGRjcCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9TaWduYXR1cmU6OkRyYXdUaGlzQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKQ0KLXsNCi0JQ1BXTF9XbmQ6OkRyYXdUaGlzQXBwZWFyYW5jZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UpOw0KLQ0KLQlpZiAobV9iRmxhZ0V4aXN0KQ0KLQkJQ1BXTF9VdGlsczo6RHJhd0ljb25BcHBTdHJlYW0ocERldmljZSwgcFVzZXIyRGV2aWNlLCBQV0xfSUNPTlRZUEVfRk9YSVQsIENQV0xfVXRpbHM6OkdldENlbnRlclNxdWFyZShHZXRDbGllbnRSZWN0KCkpLA0KLQkJCUNQV0xfQ29sb3IoQ09MT1JUWVBFX1JHQiwwLjkxZiwwLjg1NWYsMC45MmYpLCBDUFdMX0NvbG9yKENPTE9SVFlQRV9UUkFOU1BBUkVOVCksIDI1NSk7DQotDQotCS8qDQotCUNQREZfUmVjdCByY0NsaWVudCA9IEdldENsaWVudFJlY3QoKTsNCi0NCi0JQ0ZYX1BhdGhEYXRhIHBhdGg7DQotDQotCXBhdGguU2V0UG9pbnRDb3VudCgyKTsNCi0JcGF0aC5TZXRQb2ludCgwLCByY0NsaWVudC5sZWZ0LCAocmNDbGllbnQudG9wICsgcmNDbGllbnQuYm90dG9tKSAqIDAuNWYsIEZYUFRfTU9WRVRPKTsNCi0JcGF0aC5TZXRQb2ludCgxLCByY0NsaWVudC5yaWdodCwgKHJjQ2xpZW50LnRvcCArIHJjQ2xpZW50LmJvdHRvbSkgKiAwLjVmLCBGWFBUX0xJTkVUTyk7DQotDQotCUNGWF9HcmFwaFN0YXRlRGF0YSBnc2Q7DQotCWdzZC5TZXREYXNoQ291bnQoMik7CQkJCQ0KLQlnc2QubV9EYXNoQXJyYXlbMF0gPSA2LjBmOw0KLQlnc2QubV9EYXNoQXJyYXlbMV0gPSA2LjBmOw0KLQlnc2QubV9EYXNoUGhhc2UgPSAwOwkNCi0JDQotCWdzZC5tX0xpbmVXaWR0aCA9IDEwLjBmOw0KLQlwRGV2aWNlLT5EcmF3UGF0aCgmcGF0aCwgcFVzZXIyRGV2aWNlLCAmZ3NkLCAwLCBBcmdiRW5jb2RlKDI1NSwyNTUsMCwwKSwgRlhGSUxMX0FMVEVSTkFURSk7DQotCSovDQotfQ0KLQ0KLXZvaWQgQ1BXTF9TaWduYXR1cmU6OkdldFRoaXNBcHBlYXJhbmNlU3RyZWFtKENGWF9CeXRlVGV4dEJ1ZiAmIHNBcHBTdHJlYW0pDQotew0KLQlDUFdMX1duZDo6R2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oc0FwcFN0cmVhbSk7DQotfQ0KLQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QREZXaW5kb3cuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfV25kLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0ljb24uaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfU2lnbmF0dXJlLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0xhYmVsLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1V0aWxzLmgiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX1NpZ25hdHVyZV9JbWFnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ1BXTF9TaWduYXR1cmVfSW1hZ2U6OkNQV0xfU2lnbmF0dXJlX0ltYWdlKCkgOiBtX3BJbWFnZShOVUxMKQoreworfQorCitDUFdMX1NpZ25hdHVyZV9JbWFnZTo6fkNQV0xfU2lnbmF0dXJlX0ltYWdlKCkKK3sKK30KKwordm9pZCBDUFdMX1NpZ25hdHVyZV9JbWFnZTo6U2V0SW1hZ2UoQ0ZYX0RJQlNvdXJjZSogcEltYWdlKQoreworCW1fcEltYWdlID0gcEltYWdlOworfQorCitDRlhfRElCU291cmNlKiBDUFdMX1NpZ25hdHVyZV9JbWFnZTo6R2V0SW1hZ2UoKQoreworCXJldHVybiBtX3BJbWFnZTsKK30KKwordm9pZCBDUFdMX1NpZ25hdHVyZV9JbWFnZTo6RHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpCit7CisJQ1BXTF9XbmQ6OkRyYXdUaGlzQXBwZWFyYW5jZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UpOworCisJaWYgKG1fcEltYWdlKQorCXsKKwkJQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOworCisJCUZYX0ZMT0FUIHgsIHk7CisJCXBVc2VyMkRldmljZS0+VHJhbnNmb3JtKHJjQ2xpZW50LmxlZnQsIHJjQ2xpZW50LnRvcCwgeCwgeSk7CisKKwkJcERldmljZS0+U3RyZXRjaERJQml0cyhtX3BJbWFnZSwgKEZYX0lOVDMyKXgsIChGWF9JTlQzMil5LCAKKwkJCShGWF9JTlQzMilyY0NsaWVudC5XaWR0aCgpLCAoRlhfSU5UMzIpcmNDbGllbnQuSGVpZ2h0KCkpOworCX0KK30KKwordm9pZCBDUFdMX1NpZ25hdHVyZV9JbWFnZTo6R2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oQ0ZYX0J5dGVUZXh0QnVmICYgc0FwcFN0cmVhbSkKK3sKKwlzQXBwU3RyZWFtIDw8IENQV0xfSW1hZ2U6OkdldEltYWdlQXBwU3RyZWFtKCk7Cit9CisKK3ZvaWQgQ1BXTF9TaWduYXR1cmVfSW1hZ2U6OkdldFNjYWxlKEZYX0ZMT0FUICYgZkhTY2FsZSxGWF9GTE9BVCAmIGZWU2NhbGUpCit7CisJRlhfRkxPQVQgZkltYWdlVywgZkltYWdlSDsKKworCUdldEltYWdlU2l6ZShmSW1hZ2VXLCBmSW1hZ2VIKTsKKworCUNQREZfUmVjdCByY0NsaWVudCA9IEdldENsaWVudFJlY3QoKTsKKworCWZIU2NhbGUgPSByY0NsaWVudC5XaWR0aCgpIC8gZkltYWdlVzsKKwlmVlNjYWxlID0gcmNDbGllbnQuSGVpZ2h0KCkgLyBmSW1hZ2VIOwkKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfU2lnbmF0dXJlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDUFdMX1NpZ25hdHVyZTo6Q1BXTF9TaWduYXR1cmUoKSA6IAorCW1fcFRleHQoTlVMTCksCisJbV9wRGVzY3JpcHRpb24oTlVMTCksCisJbV9wSW1hZ2UoTlVMTCksCisJbV9iVGV4dEV4aXN0KFRSVUUpLAorCW1fYkltYWdlRXhpc3QoRkFMU0UpLAorCW1fYkZsYWdFeGlzdChUUlVFKQoreworfQorCitDUFdMX1NpZ25hdHVyZTo6fkNQV0xfU2lnbmF0dXJlKCkKK3sKK30KKwordm9pZCBDUFdMX1NpZ25hdHVyZTo6U2V0VGV4dEZsYWcoRlhfQk9PTCBiVGV4dEV4aXN0KQoreworCW1fYlRleHRFeGlzdCA9IGJUZXh0RXhpc3Q7CisKKwlSZVBvc0NoaWxkV25kKCk7Cit9CisKK3ZvaWQgQ1BXTF9TaWduYXR1cmU6OlNldEltYWdlRmxhZyhGWF9CT09MIGJJbWFnZUV4aXN0KQoreworCW1fYkltYWdlRXhpc3QgPSBiSW1hZ2VFeGlzdDsKKworCVJlUG9zQ2hpbGRXbmQoKTsKK30KKwordm9pZCBDUFdMX1NpZ25hdHVyZTo6U2V0Rm94aXRGbGFnKEZYX0JPT0wgYkZsYWdFeGlzdCkKK3sKKwltX2JGbGFnRXhpc3QgPSBiRmxhZ0V4aXN0OworfQorCit2b2lkIENQV0xfU2lnbmF0dXJlOjpTZXRUZXh0KEZYX0xQQ1dTVFIgc1RleHQpCit7CisJbV9wVGV4dC0+U2V0VGV4dChzVGV4dCk7CisKKwlSZVBvc0NoaWxkV25kKCk7Cit9CisKK3ZvaWQgQ1BXTF9TaWduYXR1cmU6OlNldERlc2NyaXB0aW9uKEZYX0xQQ1dTVFIgc3RyaW5nKQoreworCW1fcERlc2NyaXB0aW9uLT5TZXRUZXh0KHN0cmluZyk7CisKKwlSZVBvc0NoaWxkV25kKCk7Cit9CisKK3ZvaWQgQ1BXTF9TaWduYXR1cmU6OlNldEltYWdlKENGWF9ESUJTb3VyY2UqIHBJbWFnZSkKK3sKKwltX3BJbWFnZS0+U2V0SW1hZ2UocEltYWdlKTsKKworCVJlUG9zQ2hpbGRXbmQoKTsKK30KKwordm9pZCBDUFdMX1NpZ25hdHVyZTo6U2V0SW1hZ2VTdHJlYW0oQ1BERl9TdHJlYW0gKiBwU3RyZWFtLCBGWF9MUENTVFIgc0ltYWdlQWxpYXMpCit7CisJbV9wSW1hZ2UtPlNldFBERlN0cmVhbShwU3RyZWFtKTsKKwltX3BJbWFnZS0+U2V0SW1hZ2VBbGlhcyhzSW1hZ2VBbGlhcyk7CisKKwlSZVBvc0NoaWxkV25kKCk7Cit9CisKK3ZvaWQgQ1BXTF9TaWduYXR1cmU6OlJlUG9zQ2hpbGRXbmQoKQoreworCUNQREZfUmVjdCByY0NsaWVudCA9IEdldENsaWVudFJlY3QoKTsKKworCUNQREZfUmVjdCByY1RleHQgPSByY0NsaWVudDsKKwlDUERGX1JlY3QgcmNEZXNjcmlwdGlvbiA9IHJjQ2xpZW50OworCisJRlhfQk9PTCBiVGV4dFZpc2libGUgPSBtX2JUZXh0RXhpc3QgJiYgbV9wVGV4dC0+R2V0VGV4dCgpLkdldExlbmd0aCgpID4gMDsKKwkKKwlpZiAoKGJUZXh0VmlzaWJsZSB8fCBtX2JJbWFnZUV4aXN0KSAmJgorCQltX3BEZXNjcmlwdGlvbi0+R2V0VGV4dCgpLkdldExlbmd0aCgpID4gMCkKKwl7CisJCWlmIChyY0NsaWVudC5XaWR0aCgpID49IHJjQ2xpZW50LkhlaWdodCgpKQorCQl7CisJCQlyY1RleHQucmlnaHQgPSByY1RleHQubGVmdCArIHJjQ2xpZW50LldpZHRoKCkgLyAyLjBmOworCQkJcmNEZXNjcmlwdGlvbi5sZWZ0ID0gcmNEZXNjcmlwdGlvbi5yaWdodCAtIHJjQ2xpZW50LldpZHRoKCkgLyAyLjBmOworCQl9CisJCWVsc2UKKwkJeworCQkJcmNUZXh0LmJvdHRvbSA9IHJjVGV4dC50b3AgLSByY0NsaWVudC5IZWlnaHQoKSAvIDIuMGY7CisJCQlyY0Rlc2NyaXB0aW9uLnRvcCA9IHJjRGVzY3JpcHRpb24uYm90dG9tICsgcmNDbGllbnQuSGVpZ2h0KCkgLyAyLjBmOworCQl9CisJfQorCisJbV9wVGV4dC0+U2V0VmlzaWJsZShiVGV4dFZpc2libGUpOworCW1fcEltYWdlLT5TZXRWaXNpYmxlKG1fYkltYWdlRXhpc3QpOworCisJbV9wVGV4dC0+TW92ZShyY1RleHQsIFRSVUUsIEZBTFNFKTsKKwltX3BJbWFnZS0+TW92ZShyY1RleHQsIFRSVUUsIEZBTFNFKTsKKwltX3BEZXNjcmlwdGlvbi0+TW92ZShyY0Rlc2NyaXB0aW9uLCBUUlVFLCBGQUxTRSk7Cit9CisKK3ZvaWQgQ1BXTF9TaWduYXR1cmU6OkNyZWF0ZUNoaWxkV25kKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKQoreworCW1fcEltYWdlID0gbmV3IENQV0xfU2lnbmF0dXJlX0ltYWdlOworCVBXTF9DUkVBVEVQQVJBTSBpY3AgPSBjcDsKKwlpY3AucFBhcmVudFduZCA9IHRoaXM7CisJaWNwLmR3RmxhZ3MgPSBQV1NfQ0hJTEQgfCBQV1NfVklTSUJMRTsKKwlpY3Auc1RleHRDb2xvciA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksIDApOworCW1fcEltYWdlLT5DcmVhdGUoaWNwKTsKKworCW1fcFRleHQgPSBuZXcgQ1BXTF9MYWJlbDsKKwlQV0xfQ1JFQVRFUEFSQU0gYWNwID0gY3A7CisJYWNwLnBQYXJlbnRXbmQgPSB0aGlzOworCWFjcC5kd0ZsYWdzID0gUFdTX0NISUxEIHwgUFdTX1ZJU0lCTEUgfCBQV1NfQVVUT0ZPTlRTSVpFIHwgUEVTX01VTFRJTElORSB8IFBFU19BVVRPUkVUVVJOIHwgUEVTX01JRERMRSB8IFBFU19DRU5URVI7CisJYWNwLnNUZXh0Q29sb3IgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLCAwKTsKKwltX3BUZXh0LT5DcmVhdGUoYWNwKTsKKworCW1fcERlc2NyaXB0aW9uID0gbmV3IENQV0xfTGFiZWw7CisJUFdMX0NSRUFURVBBUkFNIGRjcCA9IGNwOworCWRjcC5wUGFyZW50V25kID0gdGhpczsKKwlkY3AuZHdGbGFncyA9IFBXU19DSElMRCB8IFBXU19WSVNJQkxFIHwgUFdTX0FVVE9GT05UU0laRSB8IFBFU19NVUxUSUxJTkUgfCBQRVNfQVVUT1JFVFVSTiB8IFBFU19MRUZUIHwgUEVTX0NFTlRFUjsKKwlkY3Auc1RleHRDb2xvciA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksIDApOworCW1fcERlc2NyaXB0aW9uLT5DcmVhdGUoZGNwKTsKK30KKwordm9pZCBDUFdMX1NpZ25hdHVyZTo6RHJhd1RoaXNBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpCit7CisJQ1BXTF9XbmQ6OkRyYXdUaGlzQXBwZWFyYW5jZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UpOworCisJaWYgKG1fYkZsYWdFeGlzdCkKKwkJQ1BXTF9VdGlsczo6RHJhd0ljb25BcHBTdHJlYW0ocERldmljZSwgcFVzZXIyRGV2aWNlLCBQV0xfSUNPTlRZUEVfRk9YSVQsIENQV0xfVXRpbHM6OkdldENlbnRlclNxdWFyZShHZXRDbGllbnRSZWN0KCkpLAorCQkJQ1BXTF9Db2xvcihDT0xPUlRZUEVfUkdCLDAuOTFmLDAuODU1ZiwwLjkyZiksIENQV0xfQ29sb3IoQ09MT1JUWVBFX1RSQU5TUEFSRU5UKSwgMjU1KTsKKworCS8qCisJQ1BERl9SZWN0IHJjQ2xpZW50ID0gR2V0Q2xpZW50UmVjdCgpOworCisJQ0ZYX1BhdGhEYXRhIHBhdGg7CisKKwlwYXRoLlNldFBvaW50Q291bnQoMik7CisJcGF0aC5TZXRQb2ludCgwLCByY0NsaWVudC5sZWZ0LCAocmNDbGllbnQudG9wICsgcmNDbGllbnQuYm90dG9tKSAqIDAuNWYsIEZYUFRfTU9WRVRPKTsKKwlwYXRoLlNldFBvaW50KDEsIHJjQ2xpZW50LnJpZ2h0LCAocmNDbGllbnQudG9wICsgcmNDbGllbnQuYm90dG9tKSAqIDAuNWYsIEZYUFRfTElORVRPKTsKKworCUNGWF9HcmFwaFN0YXRlRGF0YSBnc2Q7CisJZ3NkLlNldERhc2hDb3VudCgyKTsJCQkJCisJZ3NkLm1fRGFzaEFycmF5WzBdID0gNi4wZjsKKwlnc2QubV9EYXNoQXJyYXlbMV0gPSA2LjBmOworCWdzZC5tX0Rhc2hQaGFzZSA9IDA7CQorCQorCWdzZC5tX0xpbmVXaWR0aCA9IDEwLjBmOworCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoLCBwVXNlcjJEZXZpY2UsICZnc2QsIDAsIEFyZ2JFbmNvZGUoMjU1LDI1NSwwLDApLCBGWEZJTExfQUxURVJOQVRFKTsKKwkqLworfQorCit2b2lkIENQV0xfU2lnbmF0dXJlOjpHZXRUaGlzQXBwZWFyYW5jZVN0cmVhbShDRlhfQnl0ZVRleHRCdWYgJiBzQXBwU3RyZWFtKQoreworCUNQV0xfV25kOjpHZXRUaGlzQXBwZWFyYW5jZVN0cmVhbShzQXBwU3RyZWFtKTsKK30KKworCmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX1NwZWNpYWxCdXR0b24uY3BwIGIvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9TcGVjaWFsQnV0dG9uLmNwcAppbmRleCBhYWJmNTAzLi4yODdmZWMxIDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX1NwZWNpYWxCdXR0b24uY3BwCisrKyBiL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfU3BlY2lhbEJ1dHRvbi5jcHAKQEAgLTEsMTEwICsxLDExMCBAQAotLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQ0KLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQotIA0KLS8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tDQotDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BERldpbmRvdy5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfV25kLmgiDQotI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9CdXR0b24uaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1NwZWNpYWxCdXR0b24uaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1V0aWxzLmgiDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfUHVzaEJ1dHRvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ1BXTF9QdXNoQnV0dG9uOjpDUFdMX1B1c2hCdXR0b24oKQ0KLXsNCi19DQotDQotQ1BXTF9QdXNoQnV0dG9uOjp+Q1BXTF9QdXNoQnV0dG9uKCkNCi17DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfUHVzaEJ1dHRvbjo6R2V0Q2xhc3NOYW1lKCkgY29uc3QNCi17DQotCXJldHVybiAiQ1BXTF9QdXNoQnV0dG9uIjsNCi19DQotDQotQ1BERl9SZWN0IENQV0xfUHVzaEJ1dHRvbjo6R2V0Rm9jdXNSZWN0KCkgY29uc3QNCi17DQotCXJldHVybiBDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdCh0aGlzLT5HZXRXaW5kb3dSZWN0KCksKEZYX0ZMT0FUKUdldEJvcmRlcldpZHRoKCkpOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9DaGVja0JveCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ1BXTF9DaGVja0JveDo6Q1BXTF9DaGVja0JveCgpIDogbV9iQ2hlY2tlZChGQUxTRSkNCi17DQotfQ0KLQ0KLUNQV0xfQ2hlY2tCb3g6On5DUFdMX0NoZWNrQm94KCkNCi17DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfQ2hlY2tCb3g6OkdldENsYXNzTmFtZSgpIGNvbnN0DQotew0KLQlyZXR1cm4gIkNQV0xfQ2hlY2tCb3giOw0KLX0NCi0NCi12b2lkIENQV0xfQ2hlY2tCb3g6OlNldENoZWNrKEZYX0JPT0wgYkNoZWNrKQ0KLXsNCi0JbV9iQ2hlY2tlZCA9IGJDaGVjazsNCi19DQotDQotRlhfQk9PTCBDUFdMX0NoZWNrQm94OjpJc0NoZWNrZWQoKSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fYkNoZWNrZWQ7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9DaGVja0JveDo6T25MQnV0dG9uVXAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KQ0KLXsNCi0JaWYgKElzUmVhZE9ubHkoKSkgcmV0dXJuIEZBTFNFOw0KLQ0KLQlTZXRDaGVjayghSXNDaGVja2VkKCkpOw0KLQlyZXR1cm4gVFJVRTsNCi19DQotDQotRlhfQk9PTCBDUFdMX0NoZWNrQm94OjpPbkNoYXIoRlhfV09SRCBuQ2hhcikNCi17DQotCVNldENoZWNrKCFJc0NoZWNrZWQoKSk7DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9SYWRpb0J1dHRvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotQ1BXTF9SYWRpb0J1dHRvbjo6Q1BXTF9SYWRpb0J1dHRvbigpIDogbV9iQ2hlY2tlZChGQUxTRSkNCi17DQotfQ0KLQ0KLUNQV0xfUmFkaW9CdXR0b246On5DUFdMX1JhZGlvQnV0dG9uKCkNCi17DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfUmFkaW9CdXR0b246OkdldENsYXNzTmFtZSgpIGNvbnN0DQotew0KLQlyZXR1cm4gIkNQV0xfUmFkaW9CdXR0b24iOw0KLX0NCi0NCi1GWF9CT09MCUNQV0xfUmFkaW9CdXR0b246Ok9uTEJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkNCi17DQotCWlmIChJc1JlYWRPbmx5KCkpIHJldHVybiBGQUxTRTsNCi0NCi0JU2V0Q2hlY2soVFJVRSk7DQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi12b2lkIENQV0xfUmFkaW9CdXR0b246OlNldENoZWNrKEZYX0JPT0wgYkNoZWNrKQ0KLXsNCi0JbV9iQ2hlY2tlZCA9IGJDaGVjazsNCi19DQotDQotRlhfQk9PTCBDUFdMX1JhZGlvQnV0dG9uOjpJc0NoZWNrZWQoKSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fYkNoZWNrZWQ7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9SYWRpb0J1dHRvbjo6T25DaGFyKEZYX1dPUkQgbkNoYXIpDQotew0KLQlTZXRDaGVjayhUUlVFKTsNCi0JcmV0dXJuIFRSVUU7DQotfQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QREZXaW5kb3cuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfV25kLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0J1dHRvbi5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9TcGVjaWFsQnV0dG9uLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1V0aWxzLmgiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX1B1c2hCdXR0b24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDUFdMX1B1c2hCdXR0b246OkNQV0xfUHVzaEJ1dHRvbigpCit7Cit9CisKK0NQV0xfUHVzaEJ1dHRvbjo6fkNQV0xfUHVzaEJ1dHRvbigpCit7Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQV0xfUHVzaEJ1dHRvbjo6R2V0Q2xhc3NOYW1lKCkgY29uc3QKK3sKKwlyZXR1cm4gIkNQV0xfUHVzaEJ1dHRvbiI7Cit9CisKK0NQREZfUmVjdCBDUFdMX1B1c2hCdXR0b246OkdldEZvY3VzUmVjdCgpIGNvbnN0Cit7CisJcmV0dXJuIENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KHRoaXMtPkdldFdpbmRvd1JlY3QoKSwoRlhfRkxPQVQpR2V0Qm9yZGVyV2lkdGgoKSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX0NoZWNrQm94IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ1BXTF9DaGVja0JveDo6Q1BXTF9DaGVja0JveCgpIDogbV9iQ2hlY2tlZChGQUxTRSkKK3sKK30KKworQ1BXTF9DaGVja0JveDo6fkNQV0xfQ2hlY2tCb3goKQoreworfQorCitDRlhfQnl0ZVN0cmluZyBDUFdMX0NoZWNrQm94OjpHZXRDbGFzc05hbWUoKSBjb25zdAoreworCXJldHVybiAiQ1BXTF9DaGVja0JveCI7Cit9CisKK3ZvaWQgQ1BXTF9DaGVja0JveDo6U2V0Q2hlY2soRlhfQk9PTCBiQ2hlY2spCit7CisJbV9iQ2hlY2tlZCA9IGJDaGVjazsKK30KKworRlhfQk9PTCBDUFdMX0NoZWNrQm94OjpJc0NoZWNrZWQoKSBjb25zdAoreworCXJldHVybiBtX2JDaGVja2VkOworfQorCitGWF9CT09MIENQV0xfQ2hlY2tCb3g6Ok9uTEJ1dHRvblVwKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkKK3sKKwlpZiAoSXNSZWFkT25seSgpKSByZXR1cm4gRkFMU0U7CisKKwlTZXRDaGVjayghSXNDaGVja2VkKCkpOworCXJldHVybiBUUlVFOworfQorCitGWF9CT09MIENQV0xfQ2hlY2tCb3g6Ok9uQ2hhcihGWF9XT1JEIG5DaGFyKQoreworCVNldENoZWNrKCFJc0NoZWNrZWQoKSk7CisJcmV0dXJuIFRSVUU7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX1JhZGlvQnV0dG9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ1BXTF9SYWRpb0J1dHRvbjo6Q1BXTF9SYWRpb0J1dHRvbigpIDogbV9iQ2hlY2tlZChGQUxTRSkKK3sKK30KKworQ1BXTF9SYWRpb0J1dHRvbjo6fkNQV0xfUmFkaW9CdXR0b24oKQoreworfQorCitDRlhfQnl0ZVN0cmluZyBDUFdMX1JhZGlvQnV0dG9uOjpHZXRDbGFzc05hbWUoKSBjb25zdAoreworCXJldHVybiAiQ1BXTF9SYWRpb0J1dHRvbiI7Cit9CisKK0ZYX0JPT0wJQ1BXTF9SYWRpb0J1dHRvbjo6T25MQnV0dG9uVXAoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KQoreworCWlmIChJc1JlYWRPbmx5KCkpIHJldHVybiBGQUxTRTsKKworCVNldENoZWNrKFRSVUUpOworCXJldHVybiBUUlVFOworfQorCit2b2lkIENQV0xfUmFkaW9CdXR0b246OlNldENoZWNrKEZYX0JPT0wgYkNoZWNrKQoreworCW1fYkNoZWNrZWQgPSBiQ2hlY2s7Cit9CisKK0ZYX0JPT0wgQ1BXTF9SYWRpb0J1dHRvbjo6SXNDaGVja2VkKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9iQ2hlY2tlZDsKK30KKworRlhfQk9PTCBDUFdMX1JhZGlvQnV0dG9uOjpPbkNoYXIoRlhfV09SRCBuQ2hhcikKK3sKKwlTZXRDaGVjayhUUlVFKTsKKwlyZXR1cm4gVFJVRTsKK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9VdGlscy5jcHAgYi9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX1V0aWxzLmNwcAppbmRleCBhZWMxZDRkLi4xZGU2YjU2IDEwMDY0NAotLS0gYS9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX1V0aWxzLmNwcAorKysgYi9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX1V0aWxzLmNwcApAQCAtMSwyODQ0ICsxLDI4NDQgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QREZXaW5kb3cuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1duZC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfVXRpbHMuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX0ljb24uaCINCi0NCi0jZGVmaW5lIElzRmxvYXRaZXJvKGYpCQkJCQkJKChmKSA8IDAuMDAwMSAmJiAoZikgPiAtMC4wMDAxKQ0KLSNkZWZpbmUgSXNGbG9hdEJpZ2dlcihmYSxmYikJCQkJKChmYSkgPiAoZmIpICYmICFJc0Zsb2F0WmVybygoZmEpIC0gKGZiKSkpDQotI2RlZmluZSBJc0Zsb2F0U21hbGxlcihmYSxmYikJCQkJKChmYSkgPCAoZmIpICYmICFJc0Zsb2F0WmVybygoZmEpIC0gKGZiKSkpDQotI2RlZmluZSBJc0Zsb2F0RXF1YWwoZmEsZmIpCQkJCQlJc0Zsb2F0WmVybygoZmEpLShmYikpDQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX1V0aWxzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldEFwcFN0cmVhbUZyb21BcnJheShjb25zdCBDUFdMX1BhdGhEYXRhKiBwUGF0aERhdGEsIEZYX0lOVDMyIG5Db3VudCkNCi17DQotCUNGWF9CeXRlVGV4dEJ1ZiBjc0FQOw0KLQ0KLQlmb3IgKEZYX0lOVDMyIGk9MDsgaTxuQ291bnQ7IGkrKykNCi0Jew0KLQkJc3dpdGNoIChwUGF0aERhdGFbaV0udHlwZSkNCi0JCXsNCi0JCWNhc2UgUFdMUFRfTU9WRVRPOg0KLQkJCWNzQVAgPDwgcFBhdGhEYXRhW2ldLnBvaW50LnggPDwgIiAiIDw8IHBQYXRoRGF0YVtpXS5wb2ludC55IDw8ICIgbVxuIjsNCi0JCQlicmVhazsNCi0JCWNhc2UgUFdMUFRfTElORVRPOg0KLQkJCWNzQVAgPDwgcFBhdGhEYXRhW2ldLnBvaW50LnggPDwgIiAiIDw8IHBQYXRoRGF0YVtpXS5wb2ludC55IDw8ICIgbFxuIjsNCi0JCQlicmVhazsNCi0JCWNhc2UgUFdMUFRfQkVaSUVSVE86DQotCQkJY3NBUCA8PCBwUGF0aERhdGFbaV0ucG9pbnQueCA8PCAiICIgPDwgcFBhdGhEYXRhW2ldLnBvaW50LnkgPDwgIiAiDQotCQkJCSA8PCBwUGF0aERhdGFbaSsxXS5wb2ludC54IDw8ICIgIiA8PCBwUGF0aERhdGFbaSsxXS5wb2ludC55IDw8ICIgIg0KLQkJCQkgPDwgcFBhdGhEYXRhW2krMl0ucG9pbnQueCA8PCAiICIgPDwgcFBhdGhEYXRhW2krMl0ucG9pbnQueSA8PCAiIGNcbiI7DQotDQotCQkJaSArPSAyOw0KLQkJCWJyZWFrOw0KLQkJZGVmYXVsdDoNCi0JCQlicmVhazsNCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gY3NBUC5HZXRCeXRlU3RyaW5nKCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9VdGlsczo6R2V0UGF0aERhdGFGcm9tQXJyYXkoQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUFdMX1BhdGhEYXRhKiBwUGF0aERhdGEsIEZYX0lOVDMyIG5Db3VudCkNCi17DQotCXBhdGguU2V0UG9pbnRDb3VudChuQ291bnQpOw0KLQ0KLQlmb3IgKEZYX0lOVDMyIGk9MDsgaTxuQ291bnQ7IGkrKykNCi0Jew0KLQkJc3dpdGNoIChwUGF0aERhdGFbaV0udHlwZSkNCi0JCXsNCi0JCWNhc2UgUFdMUFRfTU9WRVRPOg0KLQkJCXBhdGguU2V0UG9pbnQoaSwgcFBhdGhEYXRhW2ldLnBvaW50LngsIHBQYXRoRGF0YVtpXS5wb2ludC55LCBGWFBUX01PVkVUTyk7DQotCQkJYnJlYWs7DQotCQljYXNlIFBXTFBUX0xJTkVUTzoNCi0JCQlwYXRoLlNldFBvaW50KGksIHBQYXRoRGF0YVtpXS5wb2ludC54LCBwUGF0aERhdGFbaV0ucG9pbnQueSwgRlhQVF9MSU5FVE8pOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSBQV0xQVF9CRVpJRVJUTzoNCi0JCQlwYXRoLlNldFBvaW50KGksIHBQYXRoRGF0YVtpXS5wb2ludC54LCBwUGF0aERhdGFbaV0ucG9pbnQueSwgRlhQVF9CRVpJRVJUTyk7DQotCQkJYnJlYWs7DQotCQlkZWZhdWx0Og0KLQkJCWJyZWFrOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLQ0KLUNQREZfUmVjdCBDUFdMX1V0aWxzOjpNYXhSZWN0KGNvbnN0IENQREZfUmVjdCAmIHJlY3QxLGNvbnN0IENQREZfUmVjdCAmIHJlY3QyKQ0KLXsNCi0JQ1BERl9SZWN0IHJjUmV0Ow0KLQ0KLQlyY1JldC5sZWZ0ID0gUFdMX01JTihyZWN0MS5sZWZ0LHJlY3QyLmxlZnQpOw0KLQlyY1JldC5ib3R0b20gPSBQV0xfTUlOKHJlY3QxLmJvdHRvbSxyZWN0Mi5ib3R0b20pOw0KLQlyY1JldC5yaWdodCA9IFBXTF9NQVgocmVjdDEucmlnaHQscmVjdDIucmlnaHQpOw0KLQlyY1JldC50b3AgPSBQV0xfTUFYKHJlY3QxLnRvcCxyZWN0Mi50b3ApOw0KLQ0KLQlyZXR1cm4gcmNSZXQ7DQotfQ0KLQ0KLUNQREZfUmVjdCBDUFdMX1V0aWxzOjpPZmZzZXRSZWN0KGNvbnN0IENQREZfUmVjdCAmIHJlY3QsRlhfRkxPQVQgeCxGWF9GTE9BVCB5KQ0KLXsNCi0JcmV0dXJuIENQREZfUmVjdChyZWN0LmxlZnQgKyB4LHJlY3QuYm90dG9tICsgeSwNCi0JCXJlY3QucmlnaHQgKyB4LHJlY3QudG9wICsgeSk7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9VdGlsczo6Q29udGFpbnNSZWN0KGNvbnN0IENQREZfUmVjdCYgcmNQYXJlbnQsIGNvbnN0IENQREZfUmVjdCYgcmNDaGlsZCkNCi17DQotCXJldHVybiByY0NoaWxkLmxlZnQgPj0gcmNQYXJlbnQubGVmdCAmJiByY0NoaWxkLmJvdHRvbSA+PSByY1BhcmVudC5ib3R0b20gJiYNCi0JCQlyY0NoaWxkLnJpZ2h0IDw9IHJjUGFyZW50LnJpZ2h0ICYmIHJjQ2hpbGQudG9wIDw9IHJjUGFyZW50LnRvcDsNCi19DQotDQotRlhfQk9PTCBDUFdMX1V0aWxzOjpJbnRlcnNlY3RSZWN0KGNvbnN0IENQREZfUmVjdCYgcmVjdDEsIGNvbnN0IENQREZfUmVjdCYgcmVjdDIpDQotew0KLQlGWF9GTE9BVCBsZWZ0ID0gcmVjdDEubGVmdCA+IHJlY3QyLmxlZnQgPyByZWN0MS5sZWZ0IDogcmVjdDIubGVmdDsNCi0JRlhfRkxPQVQgcmlnaHQgPSByZWN0MS5yaWdodCA8IHJlY3QyLnJpZ2h0ID8gcmVjdDEucmlnaHQgOiByZWN0Mi5yaWdodDsNCi0JRlhfRkxPQVQgYm90dG9tID0gcmVjdDEuYm90dG9tID4gcmVjdDIuYm90dG9tID8gcmVjdDEuYm90dG9tIDogcmVjdDIuYm90dG9tOw0KLQlGWF9GTE9BVCB0b3AgPSByZWN0MS50b3AgPCByZWN0Mi50b3AgPyByZWN0MS50b3AgOiByZWN0Mi50b3A7DQotDQotCXJldHVybiBsZWZ0IDwgcmlnaHQgJiYgYm90dG9tIDwgdG9wOw0KLX0NCi0NCi1DUERGX1BvaW50IENQV0xfVXRpbHM6Ok9mZnNldFBvaW50KGNvbnN0IENQREZfUG9pbnQmIHBvaW50LEZYX0ZMT0FUIHgsRlhfRkxPQVQgeSkNCi17DQotCXJldHVybiBDUERGX1BvaW50KHBvaW50LnggKyB4LHBvaW50LnkgKyB5KTsNCi19DQotDQotQ1BWVF9Xb3JkUmFuZ2UgQ1BXTF9VdGlsczo6T3ZlcmxhcFdvcmRSYW5nZShjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHdyMSwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiB3cjIpDQotew0KLQlDUFZUX1dvcmRSYW5nZSB3clJldDsNCi0NCi0JaWYgKHdyMi5FbmRQb3MuV29yZENtcCh3cjEuQmVnaW5Qb3MpIDwgMCB8fCB3cjIuQmVnaW5Qb3MuV29yZENtcCh3cjEuRW5kUG9zKSA+IDApIHJldHVybiB3clJldDsNCi0JaWYgKHdyMS5FbmRQb3MuV29yZENtcCh3cjIuQmVnaW5Qb3MpIDwgMCB8fCB3cjEuQmVnaW5Qb3MuV29yZENtcCh3cjIuRW5kUG9zKSA+IDApIHJldHVybiB3clJldDsNCi0NCi0JaWYgKHdyMS5CZWdpblBvcy5Xb3JkQ21wKHdyMi5CZWdpblBvcykgPCAwKQ0KLQl7DQotCQl3clJldC5CZWdpblBvcyA9IHdyMi5CZWdpblBvczsNCi0JfQ0KLQllbHNlDQotCXsNCi0JCXdyUmV0LkJlZ2luUG9zID0gd3IxLkJlZ2luUG9zOw0KLQl9DQotDQotCWlmICh3cjEuRW5kUG9zLldvcmRDbXAod3IyLkVuZFBvcykgPCAwKQ0KLQl7DQotCQl3clJldC5FbmRQb3MgPSB3cjEuRW5kUG9zOw0KLQl9DQotCWVsc2UNCi0Jew0KLQkJd3JSZXQuRW5kUG9zID0gd3IyLkVuZFBvczsNCi0JfQ0KLQ0KLQlyZXR1cm4gd3JSZXQ7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldEFQX0NoZWNrKGNvbnN0IENQREZfUmVjdCAmIGNyQkJveCkNCi17DQotCUNGWF9CeXRlVGV4dEJ1ZiBjc0FQOw0KLQ0KLQlGWF9GTE9BVCBmV2lkdGggPSBjckJCb3gucmlnaHQgLSBjckJCb3gubGVmdDsNCi0JRlhfRkxPQVQgZkhlaWdodCA9IGNyQkJveC50b3AgLSBjckJCb3guYm90dG9tOw0KLQ0KLQljb25zdCBGWF9JTlQzMiBudW0gPSA4Ow0KLQ0KLQlDUFdMX1BvaW50IHB0c1tudW0qM10gPSANCi0Jew0KLQkJLy8xDQotCQlDUFdMX1BvaW50KDAuMjhmLCAwLjUyZiksIA0KLQkJQ1BXTF9Qb2ludCgwLjI3ZiwgMC40OGYpLA0KLQkJQ1BXTF9Qb2ludCgwLjI5ZiwgMC40MGYpLA0KLQ0KLQkJLy8yDQotCQlDUFdMX1BvaW50KDAuMzBmLCAwLjMzZiksIA0KLQkJQ1BXTF9Qb2ludCgwLjMxZiwgMC4yOWYpLA0KLQkJQ1BXTF9Qb2ludCgwLjMxZiwgMC4yOGYpLA0KLQ0KLQkJLy8zDQotCQlDUFdMX1BvaW50KDAuMzlmLCAwLjI4ZiksIA0KLQkJQ1BXTF9Qb2ludCgwLjQ5ZiwgMC4yOWYpLA0KLQkJQ1BXTF9Qb2ludCgwLjc3ZiwgMC42N2YpLA0KLQ0KLQkJLy80DQotCQlDUFdMX1BvaW50KDAuNzZmLCAwLjY4ZiksIA0KLQkJQ1BXTF9Qb2ludCgwLjc4ZiwgMC42OWYpLA0KLQkJQ1BXTF9Qb2ludCgwLjc2ZiwgMC43NWYpLA0KLQ0KLQkJLy81DQotCQlDUFdMX1BvaW50KDAuNzZmLCAwLjc1ZiksIA0KLQkJQ1BXTF9Qb2ludCgwLjczZiwgMC44MGYpLA0KLQkJQ1BXTF9Qb2ludCgwLjY4ZiwgMC43NWYpLA0KLQ0KLQkJLy82DQotCQlDUFdMX1BvaW50KDAuNjhmLCAwLjc0ZiksIA0KLQkJQ1BXTF9Qb2ludCgwLjY4ZiwgMC43NGYpLA0KLQkJQ1BXTF9Qb2ludCgwLjQ0ZiwgMC40N2YpLA0KLQ0KLQkJLy83DQotCQlDUFdMX1BvaW50KDAuNDNmLCAwLjQ3ZiksIA0KLQkJQ1BXTF9Qb2ludCgwLjQwZiwgMC40N2YpLA0KLQkJQ1BXTF9Qb2ludCgwLjQxZiwgMC41OGYpLA0KLQ0KLQkJLy84DQotCQlDUFdMX1BvaW50KDAuNDBmLCAwLjYwZiksIA0KLQkJQ1BXTF9Qb2ludCgwLjI4ZiwgMC42NmYpLA0KLQkJQ1BXTF9Qb2ludCgwLjMwZiwgMC41NmYpDQotCX07DQotDQotCWZvciAoRlhfSU5UMzIgaj0wOyBqPG51bSozOyBqKyspDQotCXsNCi0JCXB0c1tqXS54ICo9IGZXaWR0aDsNCi0JCXB0c1tqXS54ICs9IGNyQkJveC5sZWZ0Ow0KLQ0KLQkJcHRzW2pdLnkgKj0gZkhlaWdodDsNCi0JCXB0c1tqXS55ICs9IGNyQkJveC5ib3R0b207DQotCX0NCi0NCi0JY3NBUCA8PCBwdHNbMF0ueCA8PCAiICIgPDwgcHRzWzBdLnkgPDwgIiBtXG4iOw0KLQ0KLQlmb3IgKEZYX0lOVDMyIGk9MDsgaTxudW07IGkrKykNCi0Jew0KLQkJRlhfSU5UMzIgbkN1ciA9IGkqMzsNCi0JCUZYX0lOVDMyIG4xID0gaSozICsgMTsNCi0JCUZYX0lOVDMyIG4yID0gaSozICsgMjsNCi0JCUZYX0lOVDMyIG5OZXh0ID0gKGkgPCBudW0tMSA/IChpKzEpKjMgOiAwKTsNCi0NCi0JCUZYX0ZMT0FUIHB4MSA9IHB0c1tuMV0ueCAtIHB0c1tuQ3VyXS54Ow0KLQkJRlhfRkxPQVQgcHkxID0gcHRzW24xXS55IC0gcHRzW25DdXJdLnk7DQotCQlGWF9GTE9BVCBweDIgPSBwdHNbbjJdLnggLSBwdHNbbk5leHRdLng7DQotCQlGWF9GTE9BVCBweTIgPSBwdHNbbjJdLnkgLSBwdHNbbk5leHRdLnk7DQotDQotCQljc0FQIDw8IHB0c1tuQ3VyXS54ICsgcHgxICogUFdMX0JFWklFUiA8PCAiICIgPDwgcHRzW25DdXJdLnkgKyBweTEgKiBQV0xfQkVaSUVSIDw8ICIgIiANCi0JCQk8PCBwdHNbbk5leHRdLnggKyBweDIgKiBQV0xfQkVaSUVSIDw8ICIgIiA8PCBwdHNbbk5leHRdLnkgKyBweTIgKiBQV0xfQkVaSUVSIDw8ICIgIg0KLQkJCTw8IHB0c1tuTmV4dF0ueCA8PCAiICIgPDwgcHRzW25OZXh0XS55IDw8ICIgY1xuIjsNCi0JfQ0KLQ0KLQlyZXR1cm4gY3NBUC5HZXRCeXRlU3RyaW5nKCk7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldEFQX0NpcmNsZShjb25zdCBDUERGX1JlY3QgJiBjckJCb3gpDQotew0KLQlDRlhfQnl0ZVRleHRCdWYgY3NBUDsNCi0NCi0JRlhfRkxPQVQgZldpZHRoID0gY3JCQm94LnJpZ2h0IC0gY3JCQm94LmxlZnQ7DQotCUZYX0ZMT0FUIGZIZWlnaHQgPSBjckJCb3gudG9wIC0gY3JCQm94LmJvdHRvbTsNCi0NCi0JQ1BERl9Qb2ludCBwdDEoY3JCQm94LmxlZnQsY3JCQm94LmJvdHRvbSArIGZIZWlnaHQgLyAyKTsNCi0JQ1BERl9Qb2ludCBwdDIoY3JCQm94LmxlZnQgKyBmV2lkdGggLyAyLGNyQkJveC50b3ApOw0KLQlDUERGX1BvaW50IHB0MyhjckJCb3gucmlnaHQsY3JCQm94LmJvdHRvbSArIGZIZWlnaHQgLyAyKTsNCi0JQ1BERl9Qb2ludCBwdDQoY3JCQm94LmxlZnQgKyBmV2lkdGggLyAyLGNyQkJveC5ib3R0b20pOw0KLQ0KLQljc0FQIDw8IHB0MS54IDw8ICIgIiA8PCBwdDEueSA8PCAiIG1cbiI7DQotDQotCUZYX0ZMT0FUIHB4ID0gcHQyLnggLSBwdDEueDsNCi0JRlhfRkxPQVQgcHkgPSBwdDIueSAtIHB0MS55Ow0KLQ0KLQljc0FQIDw8IHB0MS54IDw8ICIgIiA8PCBwdDEueSArIHB5ICogUFdMX0JFWklFUiA8PCAiICIgDQotCQk8PCBwdDIueCAtIHB4ICogUFdMX0JFWklFUiA8PCAiICIgPDwgcHQyLnkgPDwgIiAiDQotCQk8PCBwdDIueCA8PCAiICIgPDwgcHQyLnkgPDwgIiBjXG4iOw0KLQ0KLQlweCA9IHB0My54IC0gcHQyLng7DQotCXB5ID0gcHQyLnkgLSBwdDMueTsNCi0NCi0JY3NBUCA8PCBwdDIueCArIHB4ICogUFdMX0JFWklFUiA8PCAiICIgPDwgcHQyLnkgPDwgIiAiIA0KLQkJPDwgcHQzLnggPDwgIiAiIDw8IHB0My55ICsgcHkgKiBQV0xfQkVaSUVSIDw8ICIgIg0KLQkJPDwgcHQzLnggPDwgIiAiIDw8IHB0My55IDw8ICIgY1xuIjsNCi0NCi0JcHggPSBwdDMueCAtIHB0NC54Ow0KLQlweSA9IHB0My55IC0gcHQ0Lnk7DQotDQotCWNzQVAgPDwgcHQzLnggPDwgIiAiIDw8IHB0My55IC0gcHkgKiBQV0xfQkVaSUVSIDw8ICIgIiANCi0JCTw8IHB0NC54ICsgcHggKiBQV0xfQkVaSUVSIDw8ICIgIiA8PCBwdDQueSA8PCAiICINCi0JCTw8IHB0NC54IDw8ICIgIiA8PCBwdDQueSA8PCAiIGNcbiI7DQotDQotCXB4ID0gcHQ0LnggLSBwdDEueDsNCi0JcHkgPSBwdDEueSAtIHB0NC55Ow0KLQ0KLQljc0FQIDw8IHB0NC54IC0gcHggKiBQV0xfQkVaSUVSIDw8ICIgIiA8PCBwdDQueSA8PCAiICIgDQotCQk8PCBwdDEueCA8PCAiICIgPDwgcHQxLnkgLSBweSAqIFBXTF9CRVpJRVIgPDwgIiAiDQotCQk8PCBwdDEueCA8PCAiICIgPDwgcHQxLnkgPDwgIiBjXG4iOw0KLQ0KLQlyZXR1cm4gY3NBUC5HZXRCeXRlU3RyaW5nKCk7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldEFQX0Nyb3NzKGNvbnN0IENQREZfUmVjdCAmIGNyQkJveCkNCi17DQotCUNGWF9CeXRlVGV4dEJ1ZiBjc0FQOw0KLQ0KLQljc0FQIDw8IGNyQkJveC5sZWZ0IDw8ICIgIiA8PCBjckJCb3gudG9wIDw8ICIgbVxuIjsNCi0JY3NBUCA8PCBjckJCb3gucmlnaHQgPDwgIiAiIDw8IGNyQkJveC5ib3R0b20gPDwgIiBsXG4iOw0KLQljc0FQIDw8IGNyQkJveC5sZWZ0IDw8ICIgIiA8PCBjckJCb3guYm90dG9tIDw8ICIgbVxuIjsNCi0JY3NBUCA8PCBjckJCb3gucmlnaHQgPDwgIiAiIDw8IGNyQkJveC50b3AgPDwgIiBsXG4iOw0KLQ0KLQlyZXR1cm4gY3NBUC5HZXRCeXRlU3RyaW5nKCk7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldEFQX0RpYW1vbmQoY29uc3QgQ1BERl9SZWN0ICYgY3JCQm94KQ0KLXsNCi0JQ0ZYX0J5dGVUZXh0QnVmIGNzQVA7DQotDQotCUZYX0ZMT0FUIGZXaWR0aCA9IGNyQkJveC5yaWdodCAtIGNyQkJveC5sZWZ0Ow0KLQlGWF9GTE9BVCBmSGVpZ2h0ID0gY3JCQm94LnRvcCAtIGNyQkJveC5ib3R0b207DQotDQotCUNQREZfUG9pbnQgcHQxKGNyQkJveC5sZWZ0LGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0IC8gMik7DQotCUNQREZfUG9pbnQgcHQyKGNyQkJveC5sZWZ0ICsgZldpZHRoIC8gMixjckJCb3gudG9wKTsNCi0JQ1BERl9Qb2ludCBwdDMoY3JCQm94LnJpZ2h0LGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0IC8gMik7DQotCUNQREZfUG9pbnQgcHQ0KGNyQkJveC5sZWZ0ICsgZldpZHRoIC8gMixjckJCb3guYm90dG9tKTsNCi0JDQotCWNzQVAgPDwgcHQxLnggPDwgIiAiIDw8IHB0MS55IDw8ICIgbVxuIjsNCi0JY3NBUCA8PCBwdDIueCA8PCAiICIgPDwgcHQyLnkgPDwgIiBsXG4iOw0KLQljc0FQIDw8IHB0My54IDw8ICIgIiA8PCBwdDMueSA8PCAiIGxcbiI7DQotCWNzQVAgPDwgcHQ0LnggPDwgIiAiIDw8IHB0NC55IDw8ICIgbFxuIjsNCi0JY3NBUCA8PCBwdDEueCA8PCAiICIgPDwgcHQxLnkgPDwgIiBsXG4iOw0KLQ0KLQlyZXR1cm4gY3NBUC5HZXRCeXRlU3RyaW5nKCk7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldEFQX1NxdWFyZShjb25zdCBDUERGX1JlY3QgJiBjckJCb3gpDQotew0KLQlDRlhfQnl0ZVRleHRCdWYgY3NBUDsNCi0NCi0JY3NBUCA8PCBjckJCb3gubGVmdCA8PCAiICIgPDwgY3JCQm94LnRvcCA8PCAiIG1cbiI7DQotCWNzQVAgPDwgY3JCQm94LnJpZ2h0IDw8ICIgIiA8PCBjckJCb3gudG9wIDw8ICIgbFxuIjsNCi0JY3NBUCA8PCBjckJCb3gucmlnaHQgPDwgIiAiIDw8IGNyQkJveC5ib3R0b20gPDwgIiBsXG4iOw0KLQljc0FQIDw8IGNyQkJveC5sZWZ0IDw8ICIgIiA8PCBjckJCb3guYm90dG9tIDw8ICIgbFxuIjsNCi0JY3NBUCA8PCBjckJCb3gubGVmdCA8PCAiICIgPDwgY3JCQm94LnRvcCA8PCAiIGxcbiI7DQotDQotCXJldHVybiBjc0FQLkdldEJ5dGVTdHJpbmcoKTsNCi19DQotDQotQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9VdGlsczo6R2V0QVBfU3Rhcihjb25zdCBDUERGX1JlY3QgJiBjckJCb3gpDQotew0KLQlDRlhfQnl0ZVRleHRCdWYgY3NBUDsNCi0NCi0JRlhfRkxPQVQgZlJhZGl1cyA9IChjckJCb3gudG9wIC0gY3JCQm94LmJvdHRvbSkvKDErKEZYX0ZMT0FUKWNvcyhQV0xfUEkvNS4wZikpOw0KLQlDUERGX1BvaW50IHB0Q2VudGVyID0gQ1BERl9Qb2ludCgoY3JCQm94LmxlZnQgKyBjckJCb3gucmlnaHQpIC8gMi4wZiwoY3JCQm94LnRvcCArIGNyQkJveC5ib3R0b20pIC8gMi4wZik7DQotCQ0KLQlGWF9GTE9BVCBweFs1XSxweVs1XTsNCi0NCi0JRlhfRkxPQVQgZkFuZ2VsID0gUFdMX1BJLzEwLjBmOw0KLQ0KLQlmb3IgKEZYX0lOVDMyIGk9MDsgaTw1OyBpKyspDQotCXsNCi0JCXB4W2ldID0gcHRDZW50ZXIueCArIGZSYWRpdXMgKiAoRlhfRkxPQVQpY29zKGZBbmdlbCk7DQotCQlweVtpXSA9IHB0Q2VudGVyLnkgKyBmUmFkaXVzICogKEZYX0ZMT0FUKXNpbihmQW5nZWwpOw0KLQ0KLQkJZkFuZ2VsICs9IFBXTF9QSSAqIDIgLyA1LjBmOw0KLQl9DQotDQotCWNzQVAgPDwgcHhbMF0gPDwgIiAiIDw8IHB5WzBdIDw8ICIgbVxuIjsNCi0NCi0JRlhfSU5UMzIgbk5leHQgPSAwOw0KLQlmb3IgKEZYX0lOVDMyIGo9MDsgajw1OyBqKyspDQotCXsNCi0JCW5OZXh0ICs9IDI7DQotCQlpZiAobk5leHQgPj0gNSkgbk5leHQgLT0gNTsNCi0JCWNzQVAgPDwgcHhbbk5leHRdIDw8ICIgIiA8PCBweVtuTmV4dF0gPDwgIiBsXG4iOw0KLQl9DQotDQotCXJldHVybiBjc0FQLkdldEJ5dGVTdHJpbmcoKTsNCi19DQotDQotQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9VdGlsczo6R2V0QVBfSGFsZkNpcmNsZShjb25zdCBDUERGX1JlY3QgJiBjckJCb3gsRlhfRkxPQVQgZlJvdGF0ZSkNCi17DQotCUNGWF9CeXRlVGV4dEJ1ZiBjc0FQOw0KLQ0KLQlGWF9GTE9BVCBmV2lkdGggPSBjckJCb3gucmlnaHQgLSBjckJCb3gubGVmdDsNCi0JRlhfRkxPQVQgZkhlaWdodCA9IGNyQkJveC50b3AgLSBjckJCb3guYm90dG9tOw0KLQ0KLQlDUERGX1BvaW50IHB0MSgtZldpZHRoLzIsMCk7DQotCUNQREZfUG9pbnQgcHQyKDAsZkhlaWdodC8yKTsNCi0JQ1BERl9Qb2ludCBwdDMoZldpZHRoLzIsMCk7DQotDQotCUZYX0ZMT0FUIHB4LHB5Ow0KLQ0KLQljc0FQIDw8IGNvcyhmUm90YXRlKSA8PCAiICIgPDwgc2luKGZSb3RhdGUpIDw8ICIgIiA8PCAtc2luKGZSb3RhdGUpIDw8ICIgIiA8PCBjb3MoZlJvdGF0ZSkgPDwgIiAiIA0KLQkJPDwgY3JCQm94LmxlZnQgKyBmV2lkdGggLyAyIDw8ICIgIiA8PCBjckJCb3guYm90dG9tICsgZkhlaWdodCAvIDIgPDwgIiBjbVxuIjsNCi0NCi0NCi0JY3NBUCA8PCBwdDEueCA8PCAiICIgPDwgcHQxLnkgPDwgIiBtXG4iOw0KLQ0KLQlweCA9IHB0Mi54IC0gcHQxLng7DQotCXB5ID0gcHQyLnkgLSBwdDEueTsNCi0NCi0JY3NBUCA8PCBwdDEueCA8PCAiICIgPDwgcHQxLnkgKyBweSAqIFBXTF9CRVpJRVIgPDwgIiAiIA0KLQkJPDwgcHQyLnggLSBweCAqIFBXTF9CRVpJRVIgPDwgIiAiIDw8IHB0Mi55IDw8ICIgIg0KLQkJPDwgcHQyLnggPDwgIiAiIDw8IHB0Mi55IDw8ICIgY1xuIjsNCi0NCi0JcHggPSBwdDMueCAtIHB0Mi54Ow0KLQlweSA9IHB0Mi55IC0gcHQzLnk7DQotDQotCWNzQVAgPDwgcHQyLnggKyBweCAqIFBXTF9CRVpJRVIgPDwgIiAiIDw8IHB0Mi55IDw8ICIgIiANCi0JCTw8IHB0My54IDw8ICIgIiA8PCBwdDMueSArIHB5ICogUFdMX0JFWklFUiA8PCAiICINCi0JCTw8IHB0My54IDw8ICIgIiA8PCBwdDMueSA8PCAiIGNcbiI7DQotDQotCXJldHVybiBjc0FQLkdldEJ5dGVTdHJpbmcoKTsNCi19DQotDQotDQotQ1BERl9SZWN0IENQV0xfVXRpbHM6OkluZmxhdGVSZWN0KGNvbnN0IENQREZfUmVjdCAmIHJjUmVjdCwgRlhfRkxPQVQgZlNpemUpDQotew0KLQlpZiAocmNSZWN0LklzRW1wdHkoKSkgcmV0dXJuIHJjUmVjdDsNCi0NCi0JQ1BERl9SZWN0IHJjTmV3KHJjUmVjdC5sZWZ0IC0gZlNpemUsDQotCQkJCQlyY1JlY3QuYm90dG9tIC0gZlNpemUsDQotCQkJCQlyY1JlY3QucmlnaHQgKyBmU2l6ZSwNCi0JCQkJCXJjUmVjdC50b3AgKyBmU2l6ZSk7DQotCXJjTmV3Lk5vcm1hbGl6ZSgpOw0KLQlyZXR1cm4gcmNOZXc7DQotfQ0KLQ0KLUNQREZfUmVjdCBDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdChjb25zdCBDUERGX1JlY3QgJiByY1JlY3QsIEZYX0ZMT0FUIGZTaXplKQ0KLXsNCi0JaWYgKHJjUmVjdC5Jc0VtcHR5KCkpIHJldHVybiByY1JlY3Q7DQotDQotCUNQREZfUmVjdCByY05ldyhyY1JlY3QubGVmdCArIGZTaXplLA0KLQkJCQkJcmNSZWN0LmJvdHRvbSArIGZTaXplLA0KLQkJCQkJcmNSZWN0LnJpZ2h0IC0gZlNpemUsDQotCQkJCQlyY1JlY3QudG9wIC0gZlNpemUpOw0KLQlyY05ldy5Ob3JtYWxpemUoKTsNCi0JcmV0dXJuIHJjTmV3Ow0KLX0NCi0NCi1DUERGX1JlY3QgQ1BXTF9VdGlsczo6U2NhbGVSZWN0KGNvbnN0IENQREZfUmVjdCAmIHJjUmVjdCxGWF9GTE9BVCBmU2NhbGUpDQotew0KLQlGWF9GTE9BVCBmSGFsZldpZHRoID0gKHJjUmVjdC5yaWdodCAtIHJjUmVjdC5sZWZ0KSAvIDIuMGY7DQotCUZYX0ZMT0FUIGZIYWxmSGVpZ2h0ID0gKHJjUmVjdC50b3AgLSByY1JlY3QuYm90dG9tKSAvIDIuMGY7DQotDQotCUNQREZfUG9pbnQgcHRDZW50ZXIgPSBDUERGX1BvaW50KChyY1JlY3QubGVmdCArIHJjUmVjdC5yaWdodCkgLyAyLChyY1JlY3QudG9wICsgcmNSZWN0LmJvdHRvbSkgLyAyKTsNCi0NCi0JcmV0dXJuIENQREZfUmVjdChwdENlbnRlci54IC0gZkhhbGZXaWR0aCAqIGZTY2FsZSwNCi0JCQkJcHRDZW50ZXIueSAtIGZIYWxmSGVpZ2h0ICogZlNjYWxlLA0KLQkJCQlwdENlbnRlci54ICsgZkhhbGZXaWR0aCAqIGZTY2FsZSwNCi0JCQkJcHRDZW50ZXIueSArIGZIYWxmSGVpZ2h0ICogZlNjYWxlKTsNCi19DQotDQotQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9VdGlsczo6R2V0UmVjdEZpbGxBcHBTdHJlYW0oY29uc3QgQ1BERl9SZWN0ICYgcmVjdCxjb25zdCBDUFdMX0NvbG9yICYgY29sb3IpDQotew0KLQlDRlhfQnl0ZVRleHRCdWYgc0FwcFN0cmVhbTsNCi0NCi0JQ0ZYX0J5dGVTdHJpbmcgc0NvbG9yID0gR2V0Q29sb3JBcHBTdHJlYW0oY29sb3IsVFJVRSk7DQotCWlmIChzQ29sb3IuR2V0TGVuZ3RoKCkgPiAwKQ0KLQl7DQotCQlzQXBwU3RyZWFtIDw8ICJxXG4iIDw8IHNDb2xvcjsNCi0JCXNBcHBTdHJlYW0gPDwgcmVjdC5sZWZ0IDw8ICIgIiA8PCByZWN0LmJvdHRvbSA8PCAiICINCi0JCQk8PCByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0IDw8ICIgIiA8PCByZWN0LnRvcCAtIHJlY3QuYm90dG9tIDw8ICIgcmUgZlxuUVxuIjsJCQ0KLQl9DQotCQ0KLQlyZXR1cm4gc0FwcFN0cmVhbS5HZXRCeXRlU3RyaW5nKCk7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldENpcmNsZUZpbGxBcHBTdHJlYW0oY29uc3QgQ1BERl9SZWN0ICYgcmVjdCxjb25zdCBDUFdMX0NvbG9yICYgY29sb3IpDQotew0KLQlDRlhfQnl0ZVRleHRCdWYgc0FwcFN0cmVhbTsNCi0NCi0JQ0ZYX0J5dGVTdHJpbmcgc0NvbG9yID0gR2V0Q29sb3JBcHBTdHJlYW0oY29sb3IsVFJVRSk7DQotCWlmIChzQ29sb3IuR2V0TGVuZ3RoKCkgPiAwKQ0KLQl7DQotCQlzQXBwU3RyZWFtIDw8ICJxXG4iIDw8IHNDb2xvciA8PCBDUFdMX1V0aWxzOjpHZXRBUF9DaXJjbGUocmVjdCkgPDwgImZcblFcbiI7CQkNCi0JfQ0KLQkNCi0JcmV0dXJuIHNBcHBTdHJlYW0uR2V0Qnl0ZVN0cmluZygpOw0KLX0NCi0NCi1DUERGX1JlY3QgQ1BXTF9VdGlsczo6R2V0Q2VudGVyU3F1YXJlKGNvbnN0IENQREZfUmVjdCAmIHJlY3QpDQotew0KLQlGWF9GTE9BVCBmV2lkdGggPSByZWN0LnJpZ2h0IC0gIHJlY3QubGVmdDsNCi0JRlhfRkxPQVQgZkhlaWdodCA9IHJlY3QudG9wIC0gcmVjdC5ib3R0b207DQotDQotCUZYX0ZMT0FUIGZDZW50ZXJYID0gKHJlY3QubGVmdCArIHJlY3QucmlnaHQpLzIuMGY7DQotCUZYX0ZMT0FUIGZDZW50ZXJZID0gKHJlY3QudG9wICsgcmVjdC5ib3R0b20pLzIuMGY7DQotDQotCUZYX0ZMT0FUIGZSYWRpdXMgPSAoZldpZHRoID4gZkhlaWdodCkgPyBmSGVpZ2h0IC8gMiA6IGZXaWR0aCAvIDI7DQotDQotCXJldHVybiBDUERGX1JlY3QoZkNlbnRlclggLSBmUmFkaXVzLGZDZW50ZXJZIC0gZlJhZGl1cyxmQ2VudGVyWCArIGZSYWRpdXMsZkNlbnRlclkgKyBmUmFkaXVzKTsNCi19DQotDQotQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9VdGlsczo6R2V0RWRpdEFwcFN0cmVhbShJRlhfRWRpdCogcEVkaXQsIGNvbnN0IENQREZfUG9pbnQgJiBwdE9mZnNldCwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgKiBwUmFuZ2UsIA0KLQkJCQkJCQkJCQkJCQkJRlhfQk9PTCBiQ29udGludW91cywgRlhfV09SRCBTdWJXb3JkKQ0KLXsNCi0JcmV0dXJuIElGWF9FZGl0OjpHZXRFZGl0QXBwZWFyYW5jZVN0cmVhbShwRWRpdCxwdE9mZnNldCxwUmFuZ2UsYkNvbnRpbnVvdXMsU3ViV29yZCk7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldEVkaXRTZWxBcHBTdHJlYW0oSUZYX0VkaXQqIHBFZGl0LCBjb25zdCBDUERGX1BvaW50ICYgcHRPZmZzZXQsIA0KLQkJCQkJCQkJY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgKiBwUmFuZ2UpDQotew0KLQlyZXR1cm4gSUZYX0VkaXQ6OkdldFNlbGVjdEFwcGVhcmFuY2VTdHJlYW0ocEVkaXQscHRPZmZzZXQscFJhbmdlKTsNCi19DQotDQotc3RhdGljIENGWF9CeXRlU3RyaW5nIEdldFNxdWlnZ2x5QXBwZWFyYW5jZVN0cmVhbShGWF9GTE9BVCBmU3RhcnRYLCBGWF9GTE9BVCBmRW5kWCwgRlhfRkxPQVQgZlksIEZYX0ZMT0FUIGZTdGVwKQ0KLXsNCi0JQ0ZYX0J5dGVUZXh0QnVmIHNSZXQ7DQotDQotCXNSZXQgPDwgIjAgd1xuIiA8PCBmU3RhcnRYIDw8ICIgIiA8PCBmWSA8PCAiIG1cbiI7DQotDQotCUZYX0ZMT0FUIGZ4Ow0KLQlGWF9JTlQzMiBpOw0KLQ0KLQlmb3IgKGk9MSxmeD1mU3RhcnRYK2ZTdGVwOyBmeDxmRW5kWDsgZngrPWZTdGVwLGkrKykNCi0Jew0KLQkJc1JldCA8PCBmeCA8PCAiICIgPDwgZlkgKyAoaSYxKSpmU3RlcCA8PCAiIGxcbiI7DQotCX0NCi0NCi0Jc1JldCA8PCAiU1xuIjsNCi0NCi0JcmV0dXJuIHNSZXQuR2V0Qnl0ZVN0cmluZygpOw0KLX0NCi0NCi1zdGF0aWMgQ0ZYX0J5dGVTdHJpbmcgR2V0V29yZFNwZWxsQ2hlY2tBcHBlYXJhbmNlU3RyZWFtKElGWF9FZGl0X0l0ZXJhdG9yKiBwSXRlcmF0b3IsIGNvbnN0IENQREZfUG9pbnQgJiBwdE9mZnNldCwNCi0JCQkJCQkJCQkJCQkJCQkJICBjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHdyV29yZCkNCi17DQotCUNGWF9CeXRlVGV4dEJ1ZiBzUmV0Ow0KLQ0KLQlGWF9GTE9BVCBmU3RhcnRYID0gMC4wZjsNCi0JRlhfRkxPQVQgZkVuZFggPSAwLjBmOw0KLQlGWF9GTE9BVCBmWSA9IDAuMGY7DQotCUZYX0ZMT0FUIGZTdGVwID0gMC4wZjsgDQotDQotCUZYX0JPT0wgYkJyZWFrID0gRkFMU0U7DQotDQotCWlmIChwSXRlcmF0b3IpDQotCXsNCi0JCXBJdGVyYXRvci0+U2V0QXQod3JXb3JkLkJlZ2luUG9zKTsNCi0NCi0JCWRvDQotCQl7DQotCQkJQ1BWVF9Xb3JkUGxhY2UgcGxhY2UgPSBwSXRlcmF0b3ItPkdldEF0KCk7DQotDQotCQkJQ1BWVF9MaW5lIGxpbmU7CQkJCQ0KLQkJCWlmIChwSXRlcmF0b3ItPkdldExpbmUobGluZSkpDQotCQkJew0KLQkJCQlmWSA9IGxpbmUucHRMaW5lLnk7DQotCQkJCWZTdGVwID0gKGxpbmUuZkxpbmVBc2NlbnQgLSBsaW5lLmZMaW5lRGVzY2VudCkgLyAxNi4wZjsNCi0JCQl9DQotDQotCQkJaWYgKHBsYWNlLkxpbmVDbXAod3JXb3JkLkJlZ2luUG9zKSA9PSAwKQ0KLQkJCXsNCi0JCQkJcEl0ZXJhdG9yLT5TZXRBdCh3cldvcmQuQmVnaW5Qb3MpOw0KLQkJCQlDUFZUX1dvcmQgd29yZDsNCi0JCQkJaWYgKHBJdGVyYXRvci0+R2V0V29yZCh3b3JkKSkNCi0JCQkJew0KLQkJCQkJZlN0YXJ0WCA9IHdvcmQucHRXb3JkLng7DQotCQkJCX0NCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJZlN0YXJ0WCA9IGxpbmUucHRMaW5lLng7DQotCQkJfQ0KLQ0KLQkJCWlmIChwbGFjZS5MaW5lQ21wKHdyV29yZC5FbmRQb3MpID09IDApDQotCQkJew0KLQkJCQlwSXRlcmF0b3ItPlNldEF0KHdyV29yZC5FbmRQb3MpOw0KLQkJCQlDUFZUX1dvcmQgd29yZDsNCi0JCQkJaWYgKHBJdGVyYXRvci0+R2V0V29yZCh3b3JkKSkNCi0JCQkJew0KLQkJCQkJZkVuZFggPSB3b3JkLnB0V29yZC54ICsgd29yZC5mV2lkdGg7DQotCQkJCX0NCi0NCi0JCQkJYkJyZWFrID0gVFJVRTsNCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJZkVuZFggPSBsaW5lLnB0TGluZS54ICsgbGluZS5mTGluZVdpZHRoOw0KLQkJCX0NCi0NCi0JCQlzUmV0IDw8IEdldFNxdWlnZ2x5QXBwZWFyYW5jZVN0cmVhbShmU3RhcnRYICsgcHRPZmZzZXQueCwgZkVuZFggKyBwdE9mZnNldC54LCBmWSArIHB0T2Zmc2V0LnksZlN0ZXApOw0KLQ0KLQkJCWlmIChiQnJlYWspIGJyZWFrOw0KLQkJfQ0KLQkJd2hpbGUgKHBJdGVyYXRvci0+TmV4dExpbmUoKSk7DQotCX0NCi0NCi0JcmV0dXJuIHNSZXQuR2V0Qnl0ZVN0cmluZygpOw0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRTcGVsbENoZWNrQXBwU3RyZWFtKElGWF9FZGl0KiBwRWRpdCwgSVBXTF9TcGVsbENoZWNrKiBwU3BlbGxDaGVjaywgY29uc3QgQ1BERl9Qb2ludCAmIHB0T2Zmc2V0LA0KLQkJCQkJCQkJY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgKiBwUmFuZ2UpDQotew0KLQlBU1NFUlQocEVkaXQgIT0gTlVMTCk7DQotCUFTU0VSVChwU3BlbGxDaGVjayAhPSBOVUxMKTsNCi0NCi0JQ0ZYX0J5dGVUZXh0QnVmIHNSZXQ7DQotDQotCWlmIChwUmFuZ2UgJiYgcFJhbmdlLT5Jc0V4aXN0KCkpDQotCXsNCi0JCWlmIChJRlhfRWRpdF9JdGVyYXRvciogcEl0ZXJhdG9yID0gcEVkaXQtPkdldEl0ZXJhdG9yKCkpDQotCQl7DQotCQkJcEl0ZXJhdG9yLT5TZXRBdChwUmFuZ2UtPkJlZ2luUG9zKTsNCi0NCi0JCQlGWF9CT09MIGJMYXRpbldvcmQgPSBGQUxTRTsNCi0JCQlDUFZUX1dvcmRQbGFjZSB3cFdvcmRTdGFydDsNCi0JCQlDRlhfQnl0ZVN0cmluZyBzV29yZDsNCi0NCi0JCQlDUFZUX1dvcmRQbGFjZSBvbGRwbGFjZTsNCi0JCQl3aGlsZSAocEl0ZXJhdG9yLT5OZXh0V29yZCgpKQ0KLQkJCXsNCi0JCQkJQ1BWVF9Xb3JkUGxhY2UgcGxhY2UgPSBwSXRlcmF0b3ItPkdldEF0KCk7DQotCQkJCWlmIChwUmFuZ2UgJiYgcGxhY2UuV29yZENtcChwUmFuZ2UtPkVuZFBvcykgPiAwKSBicmVhazsJCQkJDQotDQotCQkJCUNQVlRfV29yZCB3b3JkOw0KLQkJCQlpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmQpKQ0KLQkJCQl7DQotCQkJCQlpZiAoRlhfRURJVF9JU0xBVElOV09SRCh3b3JkLldvcmQpKQ0KLQkJCQkJew0KLQkJCQkJCWlmICghYkxhdGluV29yZCkNCi0JCQkJCQl7DQotCQkJCQkJCXdwV29yZFN0YXJ0ID0gcGxhY2U7DQotCQkJCQkJCWJMYXRpbldvcmQgPSBUUlVFOwkJCQkJCQkJDQotCQkJCQkJfQ0KLQ0KLQkJCQkJCXNXb3JkICs9IChjaGFyKXdvcmQuV29yZDsNCi0JCQkJCQlvbGRwbGFjZSA9IHBsYWNlOw0KLQkJCQkJfQ0KLQkJCQkJZWxzZQ0KLQkJCQkJew0KLQkJCQkJCWlmIChiTGF0aW5Xb3JkKQ0KLQkJCQkJCXsNCi0JCQkJCQkJaWYgKCFwU3BlbGxDaGVjay0+Q2hlY2tXb3JkKHNXb3JkKSkNCi0JCQkJCQkJew0KLQkJCQkJCQkJc1JldCA8PCBHZXRXb3JkU3BlbGxDaGVja0FwcGVhcmFuY2VTdHJlYW0ocEl0ZXJhdG9yLHB0T2Zmc2V0LENQVlRfV29yZFJhbmdlKHdwV29yZFN0YXJ0LG9sZHBsYWNlKSk7DQotCQkJCQkJCQlwSXRlcmF0b3ItPlNldEF0KHBsYWNlKTsNCi0JCQkJCQkJfQ0KLQkJCQkJCQliTGF0aW5Xb3JkID0gRkFMU0U7DQotCQkJCQkJfQ0KLQ0KLQkJCQkJCXNXb3JkLkVtcHR5KCk7DQotCQkJCQl9DQotCQkJCX0NCi0JCQkJZWxzZQ0KLQkJCQl7DQotCQkJCQlpZiAoYkxhdGluV29yZCkNCi0JCQkJCXsNCi0JCQkJCQlpZiAoIXBTcGVsbENoZWNrLT5DaGVja1dvcmQoc1dvcmQpKQ0KLQkJCQkJCQlzUmV0IDw8IEdldFdvcmRTcGVsbENoZWNrQXBwZWFyYW5jZVN0cmVhbShwSXRlcmF0b3IscHRPZmZzZXQsQ1BWVF9Xb3JkUmFuZ2Uod3BXb3JkU3RhcnQsb2xkcGxhY2UpKTsNCi0JCQkJCQliTGF0aW5Xb3JkID0gRkFMU0U7DQotCQkJCQkJc1dvcmQuRW1wdHkoKTsNCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCX0NCi0NCi0JCQlpZiAoYkxhdGluV29yZCkNCi0JCQl7DQotCQkJCWlmICghcFNwZWxsQ2hlY2stPkNoZWNrV29yZChzV29yZCkpDQotCQkJCQlzUmV0IDw8IEdldFdvcmRTcGVsbENoZWNrQXBwZWFyYW5jZVN0cmVhbShwSXRlcmF0b3IscHRPZmZzZXQsQ1BWVF9Xb3JkUmFuZ2Uod3BXb3JkU3RhcnQsb2xkcGxhY2UpKTsNCi0NCi0JCQkJYkxhdGluV29yZCA9IEZBTFNFOw0KLQkJCQlzV29yZC5FbXB0eSgpOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gc1JldC5HZXRCeXRlU3RyaW5nKCk7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldFRleHRBcHBTdHJlYW0oY29uc3QgQ1BERl9SZWN0ICYgcmNCQm94LElGWF9FZGl0X0ZvbnRNYXAgKiBwRm9udE1hcCwNCi0JCQkJCQkJCQkJCQkJCWNvbnN0IENGWF9XaWRlU3RyaW5nICYgc1RleHQsIEZYX0lOVDMyIG5BbGlnbm1lbnRILCBGWF9JTlQzMiBuQWxpZ25tZW50ViwNCi0JCQkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZGb250U2l6ZSwgRlhfQk9PTCBiTXVsdGlMaW5lLCBGWF9CT09MIGJBdXRvUmV0dXJuLCBjb25zdCBDUFdMX0NvbG9yICYgY3JUZXh0KQ0KLXsNCi0JQ0ZYX0J5dGVUZXh0QnVmIHNSZXQ7DQotDQotCWlmIChJRlhfRWRpdCAqIHBFZGl0ID0gSUZYX0VkaXQ6Ok5ld0VkaXQoKSkNCi0JewkJCQ0KLQkJcEVkaXQtPlNldEZvbnRNYXAocEZvbnRNYXApOw0KLQ0KLQkJcEVkaXQtPlNldFBsYXRlUmVjdChyY0JCb3gpOw0KLQkJcEVkaXQtPlNldEFsaWdubWVudEgobkFsaWdubWVudEgpOw0KLQkJcEVkaXQtPlNldEFsaWdubWVudFYobkFsaWdubWVudFYpOw0KLQkJcEVkaXQtPlNldE11bHRpTGluZShiTXVsdGlMaW5lKTsNCi0JCXBFZGl0LT5TZXRBdXRvUmV0dXJuKGJBdXRvUmV0dXJuKTsNCi0JCWlmIChJc0Zsb2F0WmVybyhmRm9udFNpemUpKQ0KLQkJCXBFZGl0LT5TZXRBdXRvRm9udFNpemUoVFJVRSk7DQotCQllbHNlDQotCQkJcEVkaXQtPlNldEZvbnRTaXplKGZGb250U2l6ZSk7DQotCQlwRWRpdC0+SW5pdGlhbGl6ZSgpOw0KLQ0KLQkJcEVkaXQtPlNldFRleHQoc1RleHQpOw0KLQkJDQotCQlDRlhfQnl0ZVN0cmluZyBzRWRpdCA9IENQV0xfVXRpbHM6OkdldEVkaXRBcHBTdHJlYW0ocEVkaXQsIENQREZfUG9pbnQoMC4wZiwwLjBmKSk7DQotCQlpZiAoc0VkaXQuR2V0TGVuZ3RoKCkgPiAwKQ0KLQkJew0KLQkJCXNSZXQgPDwgIkJUXG4iIDw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKGNyVGV4dCkgPDwgc0VkaXQgPDwgIkVUXG4iOw0KLQkJfQ0KLQkJDQotCQlJRlhfRWRpdDo6RGVsRWRpdChwRWRpdCk7DQotCX0NCi0NCi0JcmV0dXJuIHNSZXQuR2V0Qnl0ZVN0cmluZygpOw0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRQdXNoQnV0dG9uQXBwU3RyZWFtKGNvbnN0IENQREZfUmVjdCAmIHJjQkJveCwNCi0JCQkJCQkJCQkJCUlGWF9FZGl0X0ZvbnRNYXAgKiBwRm9udE1hcCwNCi0JCQkJCQkJCQkJCUNQREZfU3RyZWFtICogcEljb25TdHJlYW0sDQotCQkJCQkJCQkJCQlDUERGX0ljb25GaXQgJiBJY29uRml0LA0KLQkJCQkJCQkJCQkJY29uc3QgQ0ZYX1dpZGVTdHJpbmcgJiBzTGFiZWwsCQkJCQkJCQkJCQkNCi0JCQkJCQkJCQkJCWNvbnN0IENQV0xfQ29sb3IgJiBjclRleHQsDQotCQkJCQkJCQkJCQlGWF9GTE9BVCBmRm9udFNpemUsDQotCQkJCQkJCQkJCQlGWF9JTlQzMiBuTGF5T3V0KQ0KLXsNCi0JY29uc3QgRlhfRkxPQVQgZkF1dG9Gb250U2NhbGUgPSAxLjBmIC8gMy4wZjsJDQotDQotCWlmIChJRlhfRWRpdCAqIHBFZGl0ID0gSUZYX0VkaXQ6Ok5ld0VkaXQoKSkNCi0JewkJCQ0KLQkJcEVkaXQtPlNldEZvbnRNYXAocEZvbnRNYXApOw0KLQ0KLQkJcEVkaXQtPlNldEFsaWdubWVudEgoMSk7DQotCQlwRWRpdC0+U2V0QWxpZ25tZW50VigxKTsNCi0JCXBFZGl0LT5TZXRNdWx0aUxpbmUoRkFMU0UpOw0KLQkJcEVkaXQtPlNldEF1dG9SZXR1cm4oRkFMU0UpOw0KLQkJaWYgKElzRmxvYXRaZXJvKGZGb250U2l6ZSkpDQotCQkJcEVkaXQtPlNldEF1dG9Gb250U2l6ZShUUlVFKTsNCi0JCWVsc2UNCi0JCQlwRWRpdC0+U2V0Rm9udFNpemUoZkZvbnRTaXplKTsNCi0JCXBFZGl0LT5Jbml0aWFsaXplKCk7DQotCQlwRWRpdC0+U2V0VGV4dChzTGFiZWwpOw0KLQ0KLQkJQ1BERl9SZWN0IHJjTGFiZWxDb250ZW50ID0gcEVkaXQtPkdldENvbnRlbnRSZWN0KCk7DQotCQkNCi0JCUNQV0xfSWNvbiBJY29uOw0KLQkJUFdMX0NSRUFURVBBUkFNIGNwOw0KLQkJY3AuZHdGbGFncyA9IFBXU19WSVNJQkxFOw0KLQkJSWNvbi5DcmVhdGUoY3ApOw0KLQkJSWNvbi5TZXRJY29uRml0KCZJY29uRml0KTsNCi0JCUljb24uU2V0UERGU3RyZWFtKHBJY29uU3RyZWFtKTsNCi0NCi0JCUNQREZfUmVjdCByY0xhYmVsID0gQ1BERl9SZWN0KDAsMCwwLDApOw0KLQkJQ1BERl9SZWN0IHJjSWNvbiA9IENQREZfUmVjdCgwLDAsMCwwKTsNCi0JCUZYX0ZMT0FUIGZXaWR0aCA9IDAuMGY7DQotCQlGWF9GTE9BVCBmSGVpZ2h0ID0gMC4wZjsNCi0NCi0JCXN3aXRjaCAobkxheU91dCkNCi0JCXsNCi0JCWNhc2UgUFBCTF9MQUJFTDoNCi0JCQlyY0xhYmVsID0gcmNCQm94Ow0KLQkJCXJjSWNvbiA9IENQREZfUmVjdCgwLDAsMCwwKTsNCi0JCQlicmVhazsNCi0JCWNhc2UgUFBCTF9JQ09OOg0KLQkJCXJjSWNvbiA9IHJjQkJveDsNCi0JCQlyY0xhYmVsID0gQ1BERl9SZWN0KDAsMCwwLDApOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSBQUEJMX0lDT05UT1BMQUJFTEJPVFRPTToNCi0NCi0JCQlpZiAocEljb25TdHJlYW0pDQotCQkJew0KLQkJCQlpZiAoSXNGbG9hdFplcm8oZkZvbnRTaXplKSkNCi0JCQkJew0KLQkJCQkJZkhlaWdodCA9IHJjQkJveC50b3AgLSByY0JCb3guYm90dG9tOw0KLQkJCQkJcmNMYWJlbCA9IENQREZfUmVjdChyY0JCb3gubGVmdCxyY0JCb3guYm90dG9tLHJjQkJveC5yaWdodCxyY0JCb3guYm90dG9tICsgZkhlaWdodCAqIGZBdXRvRm9udFNjYWxlKTsNCi0JCQkJCXJjSWNvbiA9IENQREZfUmVjdChyY0JCb3gubGVmdCxyY0xhYmVsLnRvcCxyY0JCb3gucmlnaHQscmNCQm94LnRvcCk7DQotCQkJCX0NCi0JCQkJZWxzZQ0KLQkJCQl7DQotCQkJCQlmSGVpZ2h0ID0gcmNMYWJlbENvbnRlbnQuSGVpZ2h0KCk7DQotDQotCQkJCQlpZiAocmNCQm94LmJvdHRvbSArIGZIZWlnaHQgPiByY0JCb3gudG9wKQ0KLQkJCQkJewkJCQ0KLQkJCQkJCXJjSWNvbiA9IENQREZfUmVjdCgwLDAsMCwwKTsJCQkJDQotCQkJCQkJcmNMYWJlbCA9IHJjQkJveDsNCi0JCQkJCX0NCi0JCQkJCWVsc2UNCi0JCQkJCXsNCi0JCQkJCQlyY0xhYmVsID0gQ1BERl9SZWN0KHJjQkJveC5sZWZ0LHJjQkJveC5ib3R0b20scmNCQm94LnJpZ2h0LHJjQkJveC5ib3R0b20gKyBmSGVpZ2h0KTsNCi0JCQkJCQlyY0ljb24gPSBDUERGX1JlY3QocmNCQm94LmxlZnQscmNMYWJlbC50b3AscmNCQm94LnJpZ2h0LHJjQkJveC50b3ApOwkNCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQlyY0xhYmVsID0gcmNCQm94Ow0KLQkJCQlyY0ljb24gPSBDUERGX1JlY3QoMCwwLDAsMCk7DQotCQkJfQ0KLQ0KLQkJCWJyZWFrOw0KLQkJY2FzZSBQUEJMX0xBQkVMVE9QSUNPTkJPVFRPTToNCi0NCi0JCQlpZiAocEljb25TdHJlYW0pDQotCQkJew0KLQkJCQlpZiAoSXNGbG9hdFplcm8oZkZvbnRTaXplKSkNCi0JCQkJew0KLQkJCQkJZkhlaWdodCA9IHJjQkJveC50b3AgLSByY0JCb3guYm90dG9tOw0KLQkJCQkJcmNMYWJlbCA9IENQREZfUmVjdChyY0JCb3gubGVmdCxyY0JCb3gudG9wIC0gZkhlaWdodCAqIGZBdXRvRm9udFNjYWxlICxyY0JCb3gucmlnaHQscmNCQm94LnRvcCk7DQotCQkJCQlyY0ljb24gPSBDUERGX1JlY3QocmNCQm94LmxlZnQscmNCQm94LmJvdHRvbSxyY0JCb3gucmlnaHQscmNMYWJlbC5ib3R0b20pOw0KLQkJCQl9DQotCQkJCWVsc2UNCi0JCQkJew0KLQkJCQkJZkhlaWdodCA9IHJjTGFiZWxDb250ZW50LkhlaWdodCgpOw0KLQ0KLQkJCQkJaWYgKHJjQkJveC5ib3R0b20gKyBmSGVpZ2h0ID4gcmNCQm94LnRvcCkNCi0JCQkJCXsJCQkNCi0JCQkJCQlyY0ljb24gPSBDUERGX1JlY3QoMCwwLDAsMCk7CQkJCQ0KLQkJCQkJCXJjTGFiZWwgPSByY0JCb3g7DQotCQkJCQl9DQotCQkJCQllbHNlDQotCQkJCQl7DQotCQkJCQkJcmNMYWJlbCA9IENQREZfUmVjdChyY0JCb3gubGVmdCxyY0JCb3gudG9wIC0gZkhlaWdodCxyY0JCb3gucmlnaHQscmNCQm94LnRvcCk7DQotCQkJCQkJcmNJY29uID0gQ1BERl9SZWN0KHJjQkJveC5sZWZ0LHJjQkJveC5ib3R0b20scmNCQm94LnJpZ2h0LHJjTGFiZWwuYm90dG9tKTsJCQ0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCXJjTGFiZWwgPSByY0JCb3g7DQotCQkJCXJjSWNvbiA9IENQREZfUmVjdCgwLDAsMCwwKTsNCi0JCQl9DQotDQotCQkJYnJlYWs7DQotCQljYXNlIFBQQkxfSUNPTkxFRlRMQUJFTFJJR0hUOg0KLQ0KLQkJCWlmIChwSWNvblN0cmVhbSkNCi0JCQl7DQotCQkJCWlmIChJc0Zsb2F0WmVybyhmRm9udFNpemUpKQ0KLQkJCQl7DQotCQkJCQlmV2lkdGggPSByY0JCb3gucmlnaHQgLSByY0JCb3gubGVmdDsNCi0JCQkJCXJjTGFiZWwgPSBDUERGX1JlY3QocmNCQm94LnJpZ2h0IC0gZldpZHRoICogZkF1dG9Gb250U2NhbGUscmNCQm94LmJvdHRvbSxyY0JCb3gucmlnaHQscmNCQm94LnRvcCk7DQotCQkJCQlyY0ljb24gPSBDUERGX1JlY3QocmNCQm94LmxlZnQscmNCQm94LmJvdHRvbSxyY0xhYmVsLmxlZnQscmNCQm94LnRvcCk7DQotDQotCQkJCQlpZiAocmNMYWJlbENvbnRlbnQuV2lkdGgoKSA8IGZXaWR0aCAqIGZBdXRvRm9udFNjYWxlKQ0KLQkJCQkJewkJCQkJCQkNCi0JCQkJCX0NCi0JCQkJCWVsc2UgDQotCQkJCQl7DQotCQkJCQkJaWYgKHJjTGFiZWxDb250ZW50LldpZHRoKCkgPCBmV2lkdGgpDQotCQkJCQkJew0KLQkJCQkJCQlyY0xhYmVsID0gQ1BERl9SZWN0KHJjQkJveC5yaWdodCAtIHJjTGFiZWxDb250ZW50LldpZHRoKCkscmNCQm94LmJvdHRvbSxyY0JCb3gucmlnaHQscmNCQm94LnRvcCk7DQotCQkJCQkJCXJjSWNvbiA9IENQREZfUmVjdChyY0JCb3gubGVmdCxyY0JCb3guYm90dG9tLHJjTGFiZWwubGVmdCxyY0JCb3gudG9wKTsNCi0JCQkJCQl9DQotCQkJCQkJZWxzZQ0KLQkJCQkJCXsNCi0JCQkJCQkJcmNMYWJlbCA9IHJjQkJveDsNCi0JCQkJCQkJcmNJY29uID0gQ1BERl9SZWN0KDAsMCwwLDApOw0KLQkJCQkJCX0NCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCQllbHNlDQotCQkJCXsNCi0JCQkJCWZXaWR0aCA9IHJjTGFiZWxDb250ZW50LldpZHRoKCk7DQotDQotCQkJCQlpZiAocmNCQm94LmxlZnQgKyBmV2lkdGggPiByY0JCb3gucmlnaHQpDQotCQkJCQl7DQotCQkJCQkJcmNMYWJlbCA9IHJjQkJveDsNCi0JCQkJCQlyY0ljb24gPSBDUERGX1JlY3QoMCwwLDAsMCk7DQotCQkJCQl9DQotCQkJCQllbHNlDQotCQkJCQl7DQotCQkJCQkJcmNMYWJlbCA9IENQREZfUmVjdChyY0JCb3gucmlnaHQgLSBmV2lkdGgscmNCQm94LmJvdHRvbSxyY0JCb3gucmlnaHQscmNCQm94LnRvcCk7DQotCQkJCQkJcmNJY29uID0gQ1BERl9SZWN0KHJjQkJveC5sZWZ0LHJjQkJveC5ib3R0b20scmNMYWJlbC5sZWZ0LHJjQkJveC50b3ApOwkJCQ0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCXJjTGFiZWwgPSByY0JCb3g7DQotCQkJCXJjSWNvbiA9IENQREZfUmVjdCgwLDAsMCwwKTsNCi0JCQl9DQotDQotCQkJYnJlYWs7DQotCQljYXNlIFBQQkxfTEFCRUxMRUZUSUNPTlJJR0hUOg0KLQ0KLQkJCWlmIChwSWNvblN0cmVhbSkNCi0JCQl7DQotCQkJCWlmIChJc0Zsb2F0WmVybyhmRm9udFNpemUpKQ0KLQkJCQl7DQotCQkJCQlmV2lkdGggPSByY0JCb3gucmlnaHQgLSByY0JCb3gubGVmdDsNCi0JCQkJCXJjTGFiZWwgPSBDUERGX1JlY3QocmNCQm94LmxlZnQscmNCQm94LmJvdHRvbSxyY0JCb3gubGVmdCArIGZXaWR0aCAqIGZBdXRvRm9udFNjYWxlLHJjQkJveC50b3ApOw0KLQkJCQkJcmNJY29uID0gQ1BERl9SZWN0KHJjTGFiZWwucmlnaHQscmNCQm94LmJvdHRvbSxyY0JCb3gucmlnaHQscmNCQm94LnRvcCk7DQotDQotCQkJCQlpZiAocmNMYWJlbENvbnRlbnQuV2lkdGgoKSA8IGZXaWR0aCAqIGZBdXRvRm9udFNjYWxlKQ0KLQkJCQkJewkJCQkJCQkNCi0JCQkJCX0NCi0JCQkJCWVsc2UgDQotCQkJCQl7DQotCQkJCQkJaWYgKHJjTGFiZWxDb250ZW50LldpZHRoKCkgPCBmV2lkdGgpDQotCQkJCQkJew0KLQkJCQkJCQlyY0xhYmVsID0gQ1BERl9SZWN0KHJjQkJveC5sZWZ0LHJjQkJveC5ib3R0b20scmNCQm94LmxlZnQgKyByY0xhYmVsQ29udGVudC5XaWR0aCgpLHJjQkJveC50b3ApOw0KLQkJCQkJCQlyY0ljb24gPSBDUERGX1JlY3QocmNMYWJlbC5yaWdodCxyY0JCb3guYm90dG9tLHJjQkJveC5yaWdodCxyY0JCb3gudG9wKTsNCi0JCQkJCQl9DQotCQkJCQkJZWxzZQ0KLQkJCQkJCXsNCi0JCQkJCQkJcmNMYWJlbCA9IHJjQkJveDsNCi0JCQkJCQkJcmNJY29uID0gQ1BERl9SZWN0KDAsMCwwLDApOw0KLQkJCQkJCX0NCi0JCQkJCX0NCi0JCQkJfQ0KLQkJCQllbHNlDQotCQkJCXsNCi0JCQkJCWZXaWR0aCA9IHJjTGFiZWxDb250ZW50LldpZHRoKCk7DQotDQotCQkJCQlpZiAocmNCQm94LmxlZnQgKyBmV2lkdGggPiByY0JCb3gucmlnaHQpDQotCQkJCQl7DQotCQkJCQkJcmNMYWJlbCA9IHJjQkJveDsNCi0JCQkJCQlyY0ljb24gPSBDUERGX1JlY3QoMCwwLDAsMCk7DQotCQkJCQl9DQotCQkJCQllbHNlDQotCQkJCQl7DQotCQkJCQkJcmNMYWJlbCA9IENQREZfUmVjdChyY0JCb3gubGVmdCxyY0JCb3guYm90dG9tLHJjQkJveC5sZWZ0ICsgZldpZHRoLHJjQkJveC50b3ApOw0KLQkJCQkJCXJjSWNvbiA9IENQREZfUmVjdChyY0xhYmVsLnJpZ2h0LHJjQkJveC5ib3R0b20scmNCQm94LnJpZ2h0LHJjQkJveC50b3ApOwkJDQotCQkJCQl9CQ0KLQkJCQl9DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCXJjTGFiZWwgPSByY0JCb3g7DQotCQkJCXJjSWNvbiA9IENQREZfUmVjdCgwLDAsMCwwKTsNCi0JCQl9DQotDQotCQkJYnJlYWs7DQotCQljYXNlIFBQQkxfTEFCRUxPVkVSSUNPTjoNCi0JCQlyY0xhYmVsID0gcmNCQm94Ow0KLQkJCXJjSWNvbiA9IHJjQkJveDsNCi0JCQlicmVhazsNCi0JCX0NCi0NCi0JCUNGWF9CeXRlVGV4dEJ1ZiBzQXBwU3RyZWFtLHNUZW1wOw0KLQ0KLQkJaWYgKCFyY0ljb24uSXNFbXB0eSgpKQ0KLQkJew0KLQkJCUljb24uTW92ZShyY0ljb24sIEZBTFNFLCBGQUxTRSk7DQotCQkJc1RlbXAgPDwgSWNvbi5HZXRJbWFnZUFwcFN0cmVhbSgpOw0KLQkJfQ0KLQ0KLQkJSWNvbi5EZXN0cm95KCk7DQotDQotCQlpZiAoIXJjTGFiZWwuSXNFbXB0eSgpKQ0KLQkJew0KLQkJCXBFZGl0LT5TZXRQbGF0ZVJlY3QocmNMYWJlbCk7DQotCQkJQ0ZYX0J5dGVTdHJpbmcgc0VkaXQgPSBDUFdMX1V0aWxzOjpHZXRFZGl0QXBwU3RyZWFtKHBFZGl0LENQREZfUG9pbnQoMC4wZiwwLjBmKSk7DQotCQkJaWYgKHNFZGl0LkdldExlbmd0aCgpID4gMCkNCi0JCQl7DQotCQkJCXNUZW1wIDw8ICJCVFxuIiA8PCBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjclRleHQpIDw8IHNFZGl0IDw8ICJFVFxuIjsNCi0JCQl9DQotCQl9DQotDQotCQlJRlhfRWRpdDo6RGVsRWRpdChwRWRpdCk7DQotDQotCQlpZiAoc1RlbXAuR2V0U2l6ZSgpID4gMCkNCi0JCXsNCi0JCQlzQXBwU3RyZWFtIDw8ICJxXG4iIDw8IHJjQkJveC5sZWZ0IDw8ICIgIiA8PCByY0JCb3guYm90dG9tIDw8ICIgIg0KLQkJCQk8PCByY0JCb3gucmlnaHQgLSByY0JCb3gubGVmdCA8PCAiICIgPDwgcmNCQm94LnRvcCAtIHJjQkJveC5ib3R0b20gPDwgIiByZSBXIG5cbiI7DQotCQkJc0FwcFN0cmVhbSA8PCBzVGVtcCA8PCAiUVxuIjsNCi0JCX0NCi0NCi0JCXJldHVybiBzQXBwU3RyZWFtLkdldEJ5dGVTdHJpbmcoKTsNCi0JfQ0KLQ0KLQlyZXR1cm4gIiI7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKGNvbnN0IENQV0xfQ29sb3IgJiBjb2xvcixjb25zdCBGWF9CT09MICYgYkZpbGxPclN0cm9rZSkNCi17DQotCUNGWF9CeXRlVGV4dEJ1ZiBzQ29sb3JTdHJlYW07DQotDQotCXN3aXRjaCAoY29sb3IubkNvbG9yVHlwZSkNCi0JewkJDQotCWNhc2UgQ09MT1JUWVBFX1JHQjoNCi0JCXNDb2xvclN0cmVhbSA8PCBjb2xvci5mQ29sb3IxIDw8ICIgIiA8PCBjb2xvci5mQ29sb3IyIDw8ICIgIiA8PCBjb2xvci5mQ29sb3IzIDw8ICIgIiANCi0JCQk8PCAoYkZpbGxPclN0cm9rZSA/ICJyZyIgOiAiUkciKSA8PCAiXG4iOw0KLQkJYnJlYWs7DQotCWNhc2UgQ09MT1JUWVBFX0dSQVk6DQotCQlzQ29sb3JTdHJlYW0gPDwgY29sb3IuZkNvbG9yMSA8PCAiICIgPDwgKGJGaWxsT3JTdHJva2UgPyAiZyIgOiAiRyIpIDw8ICJcbiI7DQotCQlicmVhazsNCi0JY2FzZSBDT0xPUlRZUEVfQ01ZSzoNCi0JCXNDb2xvclN0cmVhbSA8PCBjb2xvci5mQ29sb3IxIDw8ICIgIiA8PCBjb2xvci5mQ29sb3IyIDw8ICIgIiA8PCBjb2xvci5mQ29sb3IzIDw8ICIgIiA8PCBjb2xvci5mQ29sb3I0IDw8ICIgIiANCi0JCQk8PCAoYkZpbGxPclN0cm9rZSA/ICJrIiA6ICJLIikgPDwgIlxuIjsNCi0JCWJyZWFrOw0KLQl9DQotDQotCXJldHVybiBzQ29sb3JTdHJlYW0uR2V0Qnl0ZVN0cmluZygpOw0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRCb3JkZXJBcHBTdHJlYW0oY29uc3QgQ1BERl9SZWN0ICYgcmVjdCwgRlhfRkxPQVQgZldpZHRoLA0KLQkJCQkJCQkJCQkJCWNvbnN0IENQV0xfQ29sb3IgJiBjb2xvciwgY29uc3QgQ1BXTF9Db2xvciAmIGNyTGVmdFRvcCwgY29uc3QgQ1BXTF9Db2xvciAmIGNyUmlnaHRCb3R0b20sDQotCQkJCQkJCQkJCQkJRlhfSU5UMzIgblN0eWxlLCBjb25zdCBDUFdMX0Rhc2ggJiBkYXNoKQ0KLXsNCi0JQ0ZYX0J5dGVUZXh0QnVmIHNBcHBTdHJlYW07DQotCUNGWF9CeXRlU3RyaW5nIHNDb2xvcjsNCi0NCi0JRlhfRkxPQVQgZkxlZnQgPSByZWN0LmxlZnQ7DQotCUZYX0ZMT0FUIGZSaWdodCA9IHJlY3QucmlnaHQ7DQotCUZYX0ZMT0FUIGZUb3AgPSByZWN0LnRvcDsNCi0JRlhfRkxPQVQgZkJvdHRvbSA9IHJlY3QuYm90dG9tOw0KLQ0KLQlpZiAoZldpZHRoID4gMC4wZikNCi0Jew0KLQkJRlhfRkxPQVQgZkhhbGZXaWR0aCA9IGZXaWR0aCAvIDIuMGY7DQotDQotCQlzQXBwU3RyZWFtIDw8ICJxXG4iOw0KLQ0KLQkJc3dpdGNoIChuU3R5bGUpDQotCQl7DQotCQlkZWZhdWx0Og0KLQkJY2FzZSBQQlNfU09MSUQ6DQotCQkJc0NvbG9yID0gQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oY29sb3IsVFJVRSk7DQotCQkJaWYgKHNDb2xvci5HZXRMZW5ndGgoKSA+IDApDQotCQkJew0KLQkJCQlzQXBwU3RyZWFtIDw8IHNDb2xvcjsNCi0JCQkJc0FwcFN0cmVhbSA8PCBmTGVmdCA8PCAiICIgPDwgZkJvdHRvbSA8PCAiICIgPDwgZlJpZ2h0IC0gZkxlZnQgPDwgIiAiIDw8IGZUb3AgLSBmQm90dG9tIDw8ICIgcmVcbiI7DQotCQkJCXNBcHBTdHJlYW0gPDwgZkxlZnQgKyBmV2lkdGggPDwgIiAiIDw8IGZCb3R0b20gKyBmV2lkdGggPDwgIiAiIA0KLQkJCQkJPDwgZlJpZ2h0IC0gZkxlZnQgLSBmV2lkdGggKiAyIDw8ICIgIiA8PCBmVG9wIC0gZkJvdHRvbSAtIGZXaWR0aCAqIDIgPDwgIiByZVxuIjsNCi0JCQkJc0FwcFN0cmVhbSA8PCAiZipcbiI7DQotCQkJfQ0KLQkJCWJyZWFrOw0KLQkJY2FzZSBQQlNfREFTSDoNCi0JCQlzQ29sb3IgPSBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjb2xvcixGQUxTRSk7DQotCQkJaWYgKHNDb2xvci5HZXRMZW5ndGgoKSA+IDApDQotCQkJew0KLQkJCQlzQXBwU3RyZWFtIDw8IHNDb2xvcjsNCi0JCQkJc0FwcFN0cmVhbSA8PCBmV2lkdGggPDwgIiB3IiA8PCAiIFsiIDw8IGRhc2gubkRhc2ggPDwgIiAiIDw8IGRhc2gubkdhcCA8PCAiXSAiIDw8IGRhc2gublBoYXNlIDw8ICIgZFxuIjsNCi0JCQkJc0FwcFN0cmVhbSA8PCBmTGVmdCArIGZXaWR0aCAvIDIgPDwgIiAiIDw8IGZCb3R0b20gKyBmV2lkdGggLyAyIDw8ICIgbVxuIjsNCi0JCQkJc0FwcFN0cmVhbSA8PCBmTGVmdCArIGZXaWR0aCAvIDIgPDwgIiAiIDw8IGZUb3AgLSBmV2lkdGggLyAyIDw8ICIgbFxuIjsNCi0JCQkJc0FwcFN0cmVhbSA8PCBmUmlnaHQgLSBmV2lkdGggLyAyIDw8ICIgIiA8PCBmVG9wIC0gZldpZHRoIC8gMiA8PCAiIGxcbiI7DQotCQkJCXNBcHBTdHJlYW0gPDwgZlJpZ2h0IC0gZldpZHRoIC8gMiA8PCAiICIgPDwgZkJvdHRvbSArIGZXaWR0aCAvIDIgPDwgIiBsXG4iOw0KLQkJCQlzQXBwU3RyZWFtIDw8IGZMZWZ0ICsgZldpZHRoIC8gMiA8PCAiICIgPDwgZkJvdHRvbSArIGZXaWR0aCAvIDIgPDwgIiBsIFNcbiI7DQotCQkJfQ0KLQkJCWJyZWFrOw0KLQkJY2FzZSBQQlNfQkVWRUxFRDoNCi0JCWNhc2UgUEJTX0lOU0VUOg0KLQkJCXNDb2xvciA9IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKGNyTGVmdFRvcCxUUlVFKTsNCi0JCQlpZiAoc0NvbG9yLkdldExlbmd0aCgpID4gMCkNCi0JCQl7DQotCQkJCXNBcHBTdHJlYW0gPDwgc0NvbG9yOw0KLQkJCQlzQXBwU3RyZWFtIDw8IGZMZWZ0ICsgZkhhbGZXaWR0aCA8PCAiICIgPDwgZkJvdHRvbSArIGZIYWxmV2lkdGggPDwgIiBtXG4iOw0KLQkJCQlzQXBwU3RyZWFtIDw8IGZMZWZ0ICsgZkhhbGZXaWR0aCA8PCAiICIgPDwgZlRvcCAtIGZIYWxmV2lkdGggPDwgIiBsXG4iOw0KLQkJCQlzQXBwU3RyZWFtIDw8IGZSaWdodCAtIGZIYWxmV2lkdGggPDwgIiAiIDw8IGZUb3AgLSBmSGFsZldpZHRoIDw8ICIgbFxuIjsNCi0JCQkJc0FwcFN0cmVhbSA8PCBmUmlnaHQgLSBmSGFsZldpZHRoICogMiA8PCAiICIgPDwgZlRvcCAtIGZIYWxmV2lkdGggKiAyIDw8ICIgbFxuIjsNCi0JCQkJc0FwcFN0cmVhbSA8PCBmTGVmdCArIGZIYWxmV2lkdGggKiAyIDw8ICIgIiA8PCBmVG9wIC0gZkhhbGZXaWR0aCAqIDIgPDwgIiBsXG4iOw0KLQkJCQlzQXBwU3RyZWFtIDw8IGZMZWZ0ICsgZkhhbGZXaWR0aCAqIDIgPDwgIiAiIDw8IGZCb3R0b20gKyBmSGFsZldpZHRoICogMiA8PCAiIGwgZlxuIjsNCi0JCQl9DQotDQotCQkJc0NvbG9yID0gQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oY3JSaWdodEJvdHRvbSxUUlVFKTsNCi0JCQlpZiAoc0NvbG9yLkdldExlbmd0aCgpID4gMCkNCi0JCQl7DQotCQkJCXNBcHBTdHJlYW0gPDwgc0NvbG9yOw0KLQkJCQlzQXBwU3RyZWFtIDw8IGZSaWdodCAtIGZIYWxmV2lkdGggPDwgIiAiIDw8CWZUb3AgLSBmSGFsZldpZHRoIDw8ICIgbVxuIjsNCi0JCQkJc0FwcFN0cmVhbSA8PCBmUmlnaHQgLSBmSGFsZldpZHRoIDw8ICIgIiA8PAlmQm90dG9tICsgZkhhbGZXaWR0aCA8PCAiIGxcbiI7DQotCQkJCXNBcHBTdHJlYW0gPDwgZkxlZnQgKyBmSGFsZldpZHRoIDw8ICIgIiA8PCAJZkJvdHRvbSArIGZIYWxmV2lkdGggPDwgIiBsXG4iOw0KLQkJCQlzQXBwU3RyZWFtIDw8IGZMZWZ0ICsgZkhhbGZXaWR0aCAqIDIgPDwgIiAiIDw8IGZCb3R0b20gKyBmSGFsZldpZHRoICogMiA8PCAiIGxcbiI7DQotCQkJCXNBcHBTdHJlYW0gPDwgZlJpZ2h0IC0gZkhhbGZXaWR0aCAqIDIgPDwgIiAiIDw8IGZCb3R0b20gKyBmSGFsZldpZHRoICogMiA8PCAiIGxcbiI7DQotCQkJCXNBcHBTdHJlYW0gPDwgZlJpZ2h0IC0gZkhhbGZXaWR0aCAqIDIgPDwgIiAiIDw8IGZUb3AgLSBmSGFsZldpZHRoICogMiA8PCAiIGwgZlxuIjsNCi0JCQl9DQotDQotCQkJc0NvbG9yID0gQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oY29sb3IsVFJVRSk7DQotCQkJaWYgKHNDb2xvci5HZXRMZW5ndGgoKSA+IDApDQotCQkJew0KLQkJCQlzQXBwU3RyZWFtIDw8IHNDb2xvcjsNCi0JCQkJc0FwcFN0cmVhbSA8PCBmTGVmdCA8PCAiICIgPDwgZkJvdHRvbSA8PCAiICIgPDwJZlJpZ2h0IC0gZkxlZnQgPDwgIiAiIDw8IGZUb3AgLSBmQm90dG9tIDw8ICIgcmVcbiI7DQotCQkJCXNBcHBTdHJlYW0gPDwgZkxlZnQgKyBmSGFsZldpZHRoIDw8ICIgIiA8PCBmQm90dG9tICsgZkhhbGZXaWR0aCA8PCAiICIgDQotCQkJCQk8PCBmUmlnaHQgLSBmTGVmdCAtIGZIYWxmV2lkdGggKiAyIDw8ICIgIiA8PCBmVG9wIC0gZkJvdHRvbSAtIGZIYWxmV2lkdGggKiAyIDw8ICIgcmUgZipcbiI7CQkJCQkJDQotCQkJfQ0KLQkJCWJyZWFrOw0KLQkJY2FzZSBQQlNfVU5ERVJMSU5FRDoNCi0JCQlzQ29sb3IgPSBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjb2xvcixGQUxTRSk7DQotCQkJaWYgKHNDb2xvci5HZXRMZW5ndGgoKSA+IDApDQotCQkJew0KLQkJCQlzQXBwU3RyZWFtIDw8IHNDb2xvcjsNCi0JCQkJc0FwcFN0cmVhbSA8PCBmV2lkdGggPDwgIiB3XG4iOw0KLQkJCQlzQXBwU3RyZWFtIDw8IGZMZWZ0IDw8ICIgIiA8PCBmQm90dG9tICsgZldpZHRoIC8gMiA8PCAiIG1cbiI7DQotCQkJCXNBcHBTdHJlYW0gPDwgZlJpZ2h0IDw8ICIgIiA8PCBmQm90dG9tICsgZldpZHRoIC8gMiA8PCAiIGwgU1xuIjsNCi0JCQl9DQotCQkJYnJlYWs7DQotCQl9DQotCQkNCi0JCXNBcHBTdHJlYW0gPDwgIlFcbiI7DQotCX0NCi0NCi0JcmV0dXJuIHNBcHBTdHJlYW0uR2V0Qnl0ZVN0cmluZygpOw0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRDaXJjbGVCb3JkZXJBcHBTdHJlYW0oY29uc3QgQ1BERl9SZWN0ICYgcmVjdCwgRlhfRkxPQVQgZldpZHRoLA0KLQkJCQkJCQkJCQkJCWNvbnN0IENQV0xfQ29sb3IgJiBjb2xvciwgY29uc3QgQ1BXTF9Db2xvciAmIGNyTGVmdFRvcCwgY29uc3QgQ1BXTF9Db2xvciAmIGNyUmlnaHRCb3R0b20sDQotCQkJCQkJCQkJCQkJRlhfSU5UMzIgblN0eWxlLCBjb25zdCBDUFdMX0Rhc2ggJiBkYXNoKQ0KLXsNCi0JQ0ZYX0J5dGVUZXh0QnVmIHNBcHBTdHJlYW07DQotCUNGWF9CeXRlU3RyaW5nIHNDb2xvcjsNCi0NCi0JDQotDQotDQotDQotDQotCWlmIChmV2lkdGggPiAwLjBmKQ0KLQl7DQotCQlzQXBwU3RyZWFtIDw8ICJxXG4iOw0KLQ0KLQkJc3dpdGNoIChuU3R5bGUpDQotCQl7DQotCQlkZWZhdWx0Og0KLQkJY2FzZSBQQlNfU09MSUQ6DQotCQljYXNlIFBCU19VTkRFUkxJTkVEOg0KLQkJCXsNCi0JCQkJc0NvbG9yID0gQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oY29sb3IsRkFMU0UpOw0KLQkJCQlpZiAoc0NvbG9yLkdldExlbmd0aCgpID4gMCkNCi0JCQkJew0KLQkJCQkJc0FwcFN0cmVhbSA8PCAicVxuIiA8PCBmV2lkdGggPDwgIiB3XG4iIDw8IHNDb2xvciANCi0JCQkJCQk8PCBDUFdMX1V0aWxzOjpHZXRBUF9DaXJjbGUoQ1BXTF9VdGlsczo6RGVmbGF0ZVJlY3QocmVjdCxmV2lkdGggLyAyLjBmKSkNCi0JCQkJCQk8PCAiIFNcblFcbiI7DQotCQkJCX0NCi0JCQl9DQotCQkJYnJlYWs7DQotCQljYXNlIFBCU19EQVNIOg0KLQkJCXsNCi0JCQkJc0NvbG9yID0gQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oY29sb3IsRkFMU0UpOw0KLQkJCQlpZiAoc0NvbG9yLkdldExlbmd0aCgpID4gMCkNCi0JCQkJew0KLQkJCQkJc0FwcFN0cmVhbSA8PCAicVxuIiA8PCBmV2lkdGggPDwgIiB3XG4iIA0KLQkJCQkJCTw8ICJbIiA8PCBkYXNoLm5EYXNoIDw8ICIgIiA8PCBkYXNoLm5HYXAgPDwgIl0gIiA8PCBkYXNoLm5QaGFzZSA8PCAiIGRcbiIgDQotCQkJCQkJPDwgc0NvbG9yIDw8IENQV0xfVXRpbHM6OkdldEFQX0NpcmNsZShDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdChyZWN0LGZXaWR0aCAvIDIuMGYpKQ0KLQkJCQkJCTw8ICIgU1xuUVxuIjsNCi0JCQkJfQkJCQkJCQ0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWNhc2UgUEJTX0JFVkVMRUQ6DQotCQkJew0KLQkJCQlGWF9GTE9BVCBmSGFsZldpZHRoID0gZldpZHRoIC8gMi4wZjsNCi0NCi0JCQkJc0NvbG9yID0gQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oY29sb3IsRkFMU0UpOw0KLQkJCQlpZiAoc0NvbG9yLkdldExlbmd0aCgpID4gMCkNCi0JCQkJew0KLQkJCQkJc0FwcFN0cmVhbSA8PCAicVxuIiA8PCBmSGFsZldpZHRoIDw8ICIgd1xuIg0KLQkJCQkJCTw8IHNDb2xvciA8PCBDUFdMX1V0aWxzOjpHZXRBUF9DaXJjbGUocmVjdCkNCi0JCQkJCQk8PCAiIFNcblFcbiI7DQotCQkJCX0JCQkJCQ0KLQ0KLQkJCQlzQ29sb3IgPSBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjckxlZnRUb3AsRkFMU0UpOw0KLQkJCQlpZiAoc0NvbG9yLkdldExlbmd0aCgpID4gMCkNCi0JCQkJew0KLQkJCQkJc0FwcFN0cmVhbSA8PCAicVxuIiA8PCBmSGFsZldpZHRoIDw8ICIgd1xuIg0KLQkJCQkJCTw8IHNDb2xvciA8PCBDUFdMX1V0aWxzOjpHZXRBUF9IYWxmQ2lyY2xlKENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KHJlY3QsZkhhbGZXaWR0aCAqIDAuNzVmKSxQV0xfUEkvNC4wZikNCi0JCQkJCQk8PCAiIFNcblFcbiI7DQotCQkJCX0JDQotDQotCQkJCXNDb2xvciA9IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKGNyUmlnaHRCb3R0b20sRkFMU0UpOw0KLQkJCQlpZiAoc0NvbG9yLkdldExlbmd0aCgpID4gMCkNCi0JCQkJew0KLQkJCQkJc0FwcFN0cmVhbSA8PCAicVxuIiA8PCBmSGFsZldpZHRoIDw8ICIgd1xuIg0KLQkJCQkJCTw8IHNDb2xvciA8PCBDUFdMX1V0aWxzOjpHZXRBUF9IYWxmQ2lyY2xlKENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KHJlY3QsZkhhbGZXaWR0aCAqIDAuNzVmKSxQV0xfUEkqNS80LjBmKQ0KLQkJCQkJCTw8ICIgU1xuUVxuIjsNCi0JCQkJfQkNCi0JCQl9DQotCQkJYnJlYWs7DQotCQljYXNlIFBCU19JTlNFVDoNCi0JCQl7DQotCQkJCUZYX0ZMT0FUIGZIYWxmV2lkdGggPSBmV2lkdGggLyAyLjBmOw0KLQ0KLQkJCQlzQ29sb3IgPSBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjb2xvcixGQUxTRSk7DQotCQkJCWlmIChzQ29sb3IuR2V0TGVuZ3RoKCkgPiAwKQ0KLQkJCQl7DQotCQkJCQlzQXBwU3RyZWFtIDw8ICJxXG4iIDw8IGZIYWxmV2lkdGggPDwgIiB3XG4iDQotCQkJCQkJPDwgc0NvbG9yIDw8IENQV0xfVXRpbHM6OkdldEFQX0NpcmNsZShyZWN0KQ0KLQkJCQkJCTw8ICIgU1xuUVxuIjsNCi0JCQkJfQ0KLQ0KLQkJCQlzQ29sb3IgPSBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjckxlZnRUb3AsRkFMU0UpOw0KLQkJCQlpZiAoc0NvbG9yLkdldExlbmd0aCgpID4gMCkNCi0JCQkJew0KLQkJCQkJc0FwcFN0cmVhbSA8PCAicVxuIiA8PCBmSGFsZldpZHRoIDw8ICIgd1xuIg0KLQkJCQkJCTw8IHNDb2xvciA8PCBDUFdMX1V0aWxzOjpHZXRBUF9IYWxmQ2lyY2xlKENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KHJlY3QsZkhhbGZXaWR0aCAqIDAuNzVmKSxQV0xfUEkvNC4wZikNCi0JCQkJCQk8PCAiIFNcblFcbiI7DQotCQkJCX0JDQotDQotCQkJCXNDb2xvciA9IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKGNyUmlnaHRCb3R0b20sRkFMU0UpOw0KLQkJCQlpZiAoc0NvbG9yLkdldExlbmd0aCgpID4gMCkNCi0JCQkJew0KLQkJCQkJc0FwcFN0cmVhbSA8PCAicVxuIiA8PCBmSGFsZldpZHRoIDw8ICIgd1xuIg0KLQkJCQkJCTw8IHNDb2xvciA8PCBDUFdMX1V0aWxzOjpHZXRBUF9IYWxmQ2lyY2xlKENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KHJlY3QsZkhhbGZXaWR0aCAqIDAuNzVmKSxQV0xfUEkqNS80LjBmKQ0KLQkJCQkJCTw8ICIgU1xuUVxuIjsNCi0JCQkJfQkJCQkJCQ0KLQkJCX0NCi0JCQlicmVhazsNCi0JCX0NCi0JCQ0KLQkJc0FwcFN0cmVhbSA8PCAiUVxuIjsNCi0JfQ0KLQ0KLQlyZXR1cm4gc0FwcFN0cmVhbS5HZXRCeXRlU3RyaW5nKCk7DQotfQ0KLQ0KLUNQV0xfQ29sb3IgQ1BXTF9VdGlsczo6U3Vic3RyYWN0Q29sb3IoY29uc3QgQ1BXTF9Db2xvciAmIHNDb2xvcixGWF9GTE9BVCBmQ29sb3JTdWIpDQotew0KLQlDUFdMX0NvbG9yIHNSZXQ7DQotCXNSZXQubkNvbG9yVHlwZSA9IHNDb2xvci5uQ29sb3JUeXBlOw0KLQ0KLQlzd2l0Y2ggKHNDb2xvci5uQ29sb3JUeXBlKQ0KLQl7DQotCWNhc2UgQ09MT1JUWVBFX1RSQU5TUEFSRU5UOg0KLQkJc1JldC5uQ29sb3JUeXBlID0gQ09MT1JUWVBFX1JHQjsNCi0JCXNSZXQuZkNvbG9yMSA9IFBXTF9NQVgoMSAtIGZDb2xvclN1YiwwLjBmKTsNCi0JCXNSZXQuZkNvbG9yMiA9IFBXTF9NQVgoMSAtIGZDb2xvclN1YiwwLjBmKTsNCi0JCXNSZXQuZkNvbG9yMyA9IFBXTF9NQVgoMSAtIGZDb2xvclN1YiwwLjBmKTsNCi0JCWJyZWFrOw0KLQljYXNlIENPTE9SVFlQRV9SR0I6DQotCWNhc2UgQ09MT1JUWVBFX0dSQVk6DQotCWNhc2UgQ09MT1JUWVBFX0NNWUs6DQotCQlzUmV0LmZDb2xvcjEgPSBQV0xfTUFYKHNDb2xvci5mQ29sb3IxIC0gZkNvbG9yU3ViLDAuMGYpOw0KLQkJc1JldC5mQ29sb3IyID0gUFdMX01BWChzQ29sb3IuZkNvbG9yMiAtIGZDb2xvclN1YiwwLjBmKTsNCi0JCXNSZXQuZkNvbG9yMyA9IFBXTF9NQVgoc0NvbG9yLmZDb2xvcjMgLSBmQ29sb3JTdWIsMC4wZik7DQotCQlzUmV0LmZDb2xvcjQgPSBQV0xfTUFYKHNDb2xvci5mQ29sb3I0IC0gZkNvbG9yU3ViLDAuMGYpOw0KLQkJYnJlYWs7DQotCX0JDQotDQotCXJldHVybiBzUmV0Ow0KLX0NCi0NCi1DUFdMX0NvbG9yIENQV0xfVXRpbHM6OkRldmlkZUNvbG9yKGNvbnN0IENQV0xfQ29sb3IgJiBzQ29sb3IsRlhfRkxPQVQgZkNvbG9yRGV2aWRlKQ0KLXsNCi0JQ1BXTF9Db2xvciBzUmV0Ow0KLQlzUmV0Lm5Db2xvclR5cGUgPSBzQ29sb3IubkNvbG9yVHlwZTsNCi0NCi0Jc3dpdGNoIChzQ29sb3IubkNvbG9yVHlwZSkNCi0Jew0KLQljYXNlIENPTE9SVFlQRV9UUkFOU1BBUkVOVDoNCi0JCXNSZXQubkNvbG9yVHlwZSA9IENPTE9SVFlQRV9SR0I7DQotCQlzUmV0LmZDb2xvcjEgPSAxIC8gZkNvbG9yRGV2aWRlOw0KLQkJc1JldC5mQ29sb3IyID0gMSAvIGZDb2xvckRldmlkZTsNCi0JCXNSZXQuZkNvbG9yMyA9IDEgLyBmQ29sb3JEZXZpZGU7DQotCQlicmVhazsNCi0JY2FzZSBDT0xPUlRZUEVfUkdCOg0KLQljYXNlIENPTE9SVFlQRV9HUkFZOg0KLQljYXNlIENPTE9SVFlQRV9DTVlLOg0KLQkJc1JldCA9IHNDb2xvcjsNCi0JCXNSZXQuZkNvbG9yMSAvPSBmQ29sb3JEZXZpZGU7DQotCQlzUmV0LmZDb2xvcjIgLz0gZkNvbG9yRGV2aWRlOw0KLQkJc1JldC5mQ29sb3IzIC89IGZDb2xvckRldmlkZTsNCi0JCXNSZXQuZkNvbG9yNCAvPSBmQ29sb3JEZXZpZGU7DQotCQlicmVhazsNCi0JfQkNCi0NCi0JcmV0dXJuIHNSZXQ7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldEFwcFN0cmVhbV9DaGVjayhjb25zdCBDUERGX1JlY3QgJiByY0JCb3gsIGNvbnN0IENQV0xfQ29sb3IgJiBjclRleHQpDQotew0KLQlDRlhfQnl0ZVRleHRCdWYgc0FQOw0KLQlzQVAgPDwgInFcbiIgPDwgQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oY3JUZXh0LFRSVUUpIDw8IENQV0xfVXRpbHM6OkdldEFQX0NoZWNrKHJjQkJveCkgPDwgImZcblFcbiI7DQotCXJldHVybiBzQVAuR2V0Qnl0ZVN0cmluZygpOw0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRBcHBTdHJlYW1fQ2lyY2xlKGNvbnN0IENQREZfUmVjdCAmIHJjQkJveCwgY29uc3QgQ1BXTF9Db2xvciAmIGNyVGV4dCkNCi17DQotCUNGWF9CeXRlVGV4dEJ1ZiBzQVA7DQotCXNBUCA8PCAicVxuIiA8PCBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjclRleHQsVFJVRSkgPDwgQ1BXTF9VdGlsczo6R2V0QVBfQ2lyY2xlKHJjQkJveCkgPDwgImZcblFcbiI7DQotCXJldHVybiBzQVAuR2V0Qnl0ZVN0cmluZygpOw0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRBcHBTdHJlYW1fQ3Jvc3MoY29uc3QgQ1BERl9SZWN0ICYgcmNCQm94LCBjb25zdCBDUFdMX0NvbG9yICYgY3JUZXh0KQ0KLXsNCi0JQ0ZYX0J5dGVUZXh0QnVmIHNBUDsNCi0Jc0FQIDw8ICJxXG4iIDw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKGNyVGV4dCxGQUxTRSkgPDwgQ1BXTF9VdGlsczo6R2V0QVBfQ3Jvc3MocmNCQm94KSA8PCAiU1xuUVxuIjsNCi0JcmV0dXJuIHNBUC5HZXRCeXRlU3RyaW5nKCk7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldEFwcFN0cmVhbV9EaWFtb25kKGNvbnN0IENQREZfUmVjdCAmIHJjQkJveCwgY29uc3QgQ1BXTF9Db2xvciAmIGNyVGV4dCkNCi17DQotCUNGWF9CeXRlVGV4dEJ1ZiBzQVA7DQotCXNBUCA8PCAicVxuMSB3XG4iIDw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKGNyVGV4dCxUUlVFKSA8PCBDUFdMX1V0aWxzOjpHZXRBUF9EaWFtb25kKHJjQkJveCkgPDwgImZcblFcbiI7DQotCXJldHVybiBzQVAuR2V0Qnl0ZVN0cmluZygpOw0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRBcHBTdHJlYW1fU3F1YXJlKGNvbnN0IENQREZfUmVjdCAmIHJjQkJveCwgY29uc3QgQ1BXTF9Db2xvciAmIGNyVGV4dCkNCi17DQotCUNGWF9CeXRlVGV4dEJ1ZiBzQVA7DQotCXNBUCA8PCAicVxuIiA8PCBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjclRleHQsVFJVRSkgPDwgQ1BXTF9VdGlsczo6R2V0QVBfU3F1YXJlKHJjQkJveCkgPDwgImZcblFcbiI7DQotCXJldHVybiBzQVAuR2V0Qnl0ZVN0cmluZygpOw0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRBcHBTdHJlYW1fU3Rhcihjb25zdCBDUERGX1JlY3QgJiByY0JCb3gsIGNvbnN0IENQV0xfQ29sb3IgJiBjclRleHQpDQotew0KLQlDRlhfQnl0ZVRleHRCdWYgc0FQOw0KLQlzQVAgPDwgInFcbiIgPDwgQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oY3JUZXh0LFRSVUUpIDw8IENQV0xfVXRpbHM6OkdldEFQX1N0YXIocmNCQm94KSA8PCAiZlxuUVxuIjsNCi0JcmV0dXJuIHNBUC5HZXRCeXRlU3RyaW5nKCk7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldENoZWNrQm94QXBwU3RyZWFtKGNvbnN0IENQREZfUmVjdCAmIHJjQkJveCwNCi0JCQkJCQkJCQkJCQkJRlhfSU5UMzIgblN0eWxlLA0KLQkJCQkJCQkJCQkJCQljb25zdCBDUFdMX0NvbG9yICYgY3JUZXh0KQ0KLXsNCi0JQ1BERl9SZWN0IHJjQ2VudGVyID0gR2V0Q2VudGVyU3F1YXJlKHJjQkJveCk7DQotCXN3aXRjaCAoblN0eWxlKQ0KLQl7DQotCWRlZmF1bHQ6DQotCWNhc2UgUENTX0NIRUNLOg0KLQkJcmV0dXJuIEdldEFwcFN0cmVhbV9DaGVjayhyY0NlbnRlcixjclRleHQpOw0KLQljYXNlIFBDU19DSVJDTEU6DQotCQlyZXR1cm4gR2V0QXBwU3RyZWFtX0NpcmNsZShTY2FsZVJlY3QocmNDZW50ZXIsMi4wZi8zLjBmKSxjclRleHQpOw0KLQljYXNlIFBDU19DUk9TUzoNCi0JCXJldHVybiBHZXRBcHBTdHJlYW1fQ3Jvc3MocmNDZW50ZXIsY3JUZXh0KTsNCi0JY2FzZSBQQ1NfRElBTU9ORDoNCi0JCXJldHVybiBHZXRBcHBTdHJlYW1fRGlhbW9uZChTY2FsZVJlY3QocmNDZW50ZXIsMi4wZi8zLjBmKSxjclRleHQpOwkJDQotCWNhc2UgUENTX1NRVUFSRToNCi0JCXJldHVybiBHZXRBcHBTdHJlYW1fU3F1YXJlKFNjYWxlUmVjdChyY0NlbnRlciwyLjBmLzMuMGYpLGNyVGV4dCk7DQotCWNhc2UgUENTX1NUQVI6DQotCQlyZXR1cm4gR2V0QXBwU3RyZWFtX1N0YXIoU2NhbGVSZWN0KHJjQ2VudGVyLDIuMGYvMy4wZiksY3JUZXh0KTsNCi0JfQ0KLX0NCi0NCi1DRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRSYWRpb0J1dHRvbkFwcFN0cmVhbShjb25zdCBDUERGX1JlY3QgJiByY0JCb3gsDQotCQkJCQkJCQkJCQkJCUZYX0lOVDMyIG5TdHlsZSwNCi0JCQkJCQkJCQkJCQkJY29uc3QgQ1BXTF9Db2xvciAmIGNyVGV4dCkNCi17DQotCUNQREZfUmVjdCByY0NlbnRlciA9IEdldENlbnRlclNxdWFyZShyY0JCb3gpOw0KLQlzd2l0Y2ggKG5TdHlsZSkNCi0Jew0KLQlkZWZhdWx0Og0KLQljYXNlIFBDU19DSEVDSzoNCi0JCXJldHVybiBHZXRBcHBTdHJlYW1fQ2hlY2socmNDZW50ZXIsY3JUZXh0KTsNCi0JY2FzZSBQQ1NfQ0lSQ0xFOg0KLQkJcmV0dXJuIEdldEFwcFN0cmVhbV9DaXJjbGUoU2NhbGVSZWN0KHJjQ2VudGVyLDEuMGYvMi4wZiksY3JUZXh0KTsNCi0JY2FzZSBQQ1NfQ1JPU1M6DQotCQlyZXR1cm4gR2V0QXBwU3RyZWFtX0Nyb3NzKHJjQ2VudGVyLGNyVGV4dCk7DQotCWNhc2UgUENTX0RJQU1PTkQ6DQotCQlyZXR1cm4gR2V0QXBwU3RyZWFtX0RpYW1vbmQoU2NhbGVSZWN0KHJjQ2VudGVyLDIuMGYvMy4wZiksY3JUZXh0KTsJCQ0KLQljYXNlIFBDU19TUVVBUkU6DQotCQlyZXR1cm4gR2V0QXBwU3RyZWFtX1NxdWFyZShTY2FsZVJlY3QocmNDZW50ZXIsMi4wZi8zLjBmKSxjclRleHQpOw0KLQljYXNlIFBDU19TVEFSOg0KLQkJcmV0dXJuIEdldEFwcFN0cmVhbV9TdGFyKFNjYWxlUmVjdChyY0NlbnRlciwyLjBmLzMuMGYpLGNyVGV4dCk7DQotCX0NCi19DQotDQotQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9VdGlsczo6R2V0RHJvcEJ1dHRvbkFwcFN0cmVhbShjb25zdCBDUERGX1JlY3QgJiByY0JCb3gpDQotew0KLQlDRlhfQnl0ZVRleHRCdWYgc0FwcFN0cmVhbTsNCi0NCi0JaWYgKCFyY0JCb3guSXNFbXB0eSgpKQ0KLQl7DQotCQlzQXBwU3RyZWFtIDw8ICJxXG4iIDw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKENQV0xfQ29sb3IoQ09MT1JUWVBFX1JHQiwyMjAuMGYvMjU1LjBmLDIyMC4wZi8yNTUuMGYsMjIwLjBmLzI1NS4wZiksVFJVRSk7DQotCQlzQXBwU3RyZWFtIDw8IHJjQkJveC5sZWZ0IDw8ICIgIiA8PCByY0JCb3guYm90dG9tIDw8ICIgIiANCi0JCQkJPDwgcmNCQm94LnJpZ2h0IC0gcmNCQm94LmxlZnQgPDwgIiAiIDw8IHJjQkJveC50b3AgLSByY0JCb3guYm90dG9tIDw8ICIgcmUgZlxuIjsNCi0JCXNBcHBTdHJlYW0gPDwgIlFcbiI7DQotDQotCQlzQXBwU3RyZWFtIDw8ICJxXG4iIDw8IA0KLQkJCUNQV0xfVXRpbHM6OkdldEJvcmRlckFwcFN0cmVhbShyY0JCb3gsMixDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLDApLENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMSksQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwwLjUpLFBCU19CRVZFTEVELENQV0xfRGFzaCgzLDAsMCkpIA0KLQkJCTw8ICJRXG4iOw0KLQ0KLQkJQ1BERl9Qb2ludCBwdENlbnRlciA9IENQREZfUG9pbnQoKHJjQkJveC5sZWZ0ICsgcmNCQm94LnJpZ2h0KS8yLChyY0JCb3gudG9wICsgcmNCQm94LmJvdHRvbSkvMik7DQotCQlpZiAoSXNGbG9hdEJpZ2dlcihyY0JCb3gucmlnaHQgLSByY0JCb3gubGVmdCw2KSAmJiBJc0Zsb2F0QmlnZ2VyKHJjQkJveC50b3AgLSByY0JCb3guYm90dG9tLDYpKQ0KLQkJew0KLQkJCXNBcHBTdHJlYW0gPDwgInFcbiIgPDwgIiAwIGdcbiI7DQotCQkJc0FwcFN0cmVhbSA8PCBwdENlbnRlci54IC0gMyA8PCAiICIgPDwgcHRDZW50ZXIueSArIDEuNWYgPDwgIiBtXG4iOw0KLQkJCXNBcHBTdHJlYW0gPDwgcHRDZW50ZXIueCArIDMgPDwgIiAiIDw8IHB0Q2VudGVyLnkgKyAxLjVmIDw8ICIgbFxuIjsNCi0JCQlzQXBwU3RyZWFtIDw8IHB0Q2VudGVyLnggPDwgIiAiIDw8IHB0Q2VudGVyLnkgLSAxLjVmIDw8ICIgbFxuIjsNCi0JCQlzQXBwU3RyZWFtIDw8IHB0Q2VudGVyLnggLSAzIDw8ICIgIiA8PCBwdENlbnRlci55ICsgMS41ZiA8PCAiIGwgZlxuIjsNCi0JCQlzQXBwU3RyZWFtIDw8ICJRXG4iOw0KLQkJfQ0KLQl9DQotDQotCXJldHVybiBzQXBwU3RyZWFtLkdldEJ5dGVTdHJpbmcoKTsNCi19DQotDQotdm9pZCBDUFdMX1V0aWxzOjpDb252ZXJ0Q01ZSzJHUkFZKEZYX0ZMT0FUIGRDLEZYX0ZMT0FUIGRNLEZYX0ZMT0FUIGRZLEZYX0ZMT0FUIGRLLEZYX0ZMT0FUICZkR3JheSkNCi17DQotCWlmIChkQzwwIHx8IGRDPjEgfHwgZE08MCB8fCBkTT4xIHx8IGRZIDwgMCB8fCBkWSA+MSB8fCBkSyA8IDAgfHwgZEsgPjEpDQotCQlyZXR1cm47DQotCWRHcmF5ID0gMS4wZiAtIEZYX01JTigxLjBmLDAuM2YqZEMrMC41OWYgKiBkTSArIDAuMTFmKmRZK2RLKTsNCi19DQotDQotdm9pZCBDUFdMX1V0aWxzOjpDb252ZXJ0R1JBWTJDTVlLKEZYX0ZMT0FUIGRHcmF5LEZYX0ZMT0FUICAmZEMsRlhfRkxPQVQgJmRNLEZYX0ZMT0FUICZkWSxGWF9GTE9BVCAmZEspDQotew0KLQlpZiAoZEdyYXkgPDAgfHwgZEdyYXkgPjEpDQotCQlyZXR1cm47DQotCWRDID0gMC4wZjsNCi0JZE0gPSAwLjBmOw0KLQlkWSA9IDAuMGY7DQotCWRLID0gMS4wZi1kR3JheTsNCi19DQotDQotdm9pZCBDUFdMX1V0aWxzOjpDb252ZXJ0R1JBWTJSR0IoRlhfRkxPQVQgZEdyYXksRlhfRkxPQVQgJmRSLEZYX0ZMT0FUICZkRyxGWF9GTE9BVCAmZEIpDQotew0KLQlpZiAoZEdyYXkgPDAgfHwgZEdyYXkgPjEpDQotCQlyZXR1cm47DQotCWRSID0gZEdyYXk7DQotCWRHID0gZEdyYXk7DQotCWRCID0gZEdyYXk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9VdGlsczo6Q29udmVydFJHQjJHUkFZKEZYX0ZMT0FUIGRSLEZYX0ZMT0FUIGRHLEZYX0ZMT0FUIGRCLEZYX0ZMT0FUICZkR3JheSkNCi17DQotCWlmIChkUjwwIHx8IGRSPjEgfHwgZEc8MCB8fCBkRyA+IDAgfHwgZEIgPCAwIHx8IGRCID4xKQ0KLQkJcmV0dXJuOw0KLQlkR3JheSA9IDAuM2YqZFIrMC41OWYqZEcrMC4xMWYqZEI7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9VdGlsczo6Q29udmVydENNWUsyUkdCKEZYX0ZMT0FUIGRDLEZYX0ZMT0FUIGRNLEZYX0ZMT0FUIGRZLEZYX0ZMT0FUIGRLLEZYX0ZMT0FUICZkUixGWF9GTE9BVCAmZEcsRlhfRkxPQVQgJmRCKQ0KLXsNCi0JaWYgKGRDIDwwIHx8IGRDPjEgfHwgZE0gPCAwIHx8IGRNID4gMSB8fCBkWSA8IDAgfHwgZFkgPiAxIHx8IGRLIDwgMCB8fCBkSyA+IDEgKQ0KLQkJcmV0dXJuOw0KLQlkUiA9IDEuMGYgLSBGWF9NSU4oMS4wZiwgZEMgKyBkSyk7DQotCWRHID0gMS4wZiAtIEZYX01JTigxLjBmLCBkTSArIGRLKTsNCi0JZEIgPSAxLjBmIC0gRlhfTUlOKDEuMGYsIGRZICsgZEspOw0KLX0NCi0NCi12b2lkIENQV0xfVXRpbHM6OkNvbnZlcnRSR0IyQ01ZSyhGWF9GTE9BVCBkUixGWF9GTE9BVCBkRyxGWF9GTE9BVCBkQixGWF9GTE9BVCAmZEMsRlhfRkxPQVQgJmRNLEZYX0ZMT0FUICZkWSxGWF9GTE9BVCAmZEspDQotew0KLQlpZiAoZFI8MCB8fCBkUj4xIHx8IGRHPDAgfHwgZEc+MSB8fCBkQjwwIHx8IGRCPjEpDQotCQlyZXR1cm47DQotDQotCWRDID0gMS4wZiAtIGRSOw0KLQlkTSA9IDEuMGYgLSBkRzsNCi0JZFkgPSAxLjBmIC0gZEI7DQotCWRLID0gRlhfTUlOKGRDLCBGWF9NSU4oZE0sIGRZKSk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9VdGlsczo6UFdMQ29sb3JUb0FSR0IoY29uc3QgQ1BXTF9Db2xvciYgY29sb3IsIEZYX0lOVDMyJiBhbHBoYSwgRlhfRkxPQVQmIHJlZCwgRlhfRkxPQVQmIGdyZWVuLCBGWF9GTE9BVCYgYmx1ZSkNCi17DQotCXN3aXRjaCAoY29sb3IubkNvbG9yVHlwZSkNCi0Jew0KLQljYXNlIENPTE9SVFlQRV9UUkFOU1BBUkVOVDoNCi0JCXsNCi0JCQlhbHBoYSA9IDA7DQotCQl9DQotCQlicmVhazsNCi0JY2FzZSBDT0xPUlRZUEVfR1JBWToNCi0JCXsNCi0JCQlDb252ZXJ0R1JBWTJSR0IoY29sb3IuZkNvbG9yMSwgcmVkLCBncmVlbiwgYmx1ZSk7DQotCQl9DQotCQlicmVhazsNCi0JY2FzZSBDT0xPUlRZUEVfUkdCOg0KLQkJew0KLQkJCXJlZCA9IGNvbG9yLmZDb2xvcjE7DQotCQkJZ3JlZW4gPSBjb2xvci5mQ29sb3IyOw0KLQkJCWJsdWUgPSBjb2xvci5mQ29sb3IzOw0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgQ09MT1JUWVBFX0NNWUs6DQotCQl7DQotCQkJQ29udmVydENNWUsyUkdCKGNvbG9yLmZDb2xvcjEsIGNvbG9yLmZDb2xvcjIsIGNvbG9yLmZDb2xvcjMsIGNvbG9yLmZDb2xvcjQsDQotCQkJCXJlZCwgZ3JlZW4sIGJsdWUpOw0KLQkJfQ0KLQkJYnJlYWs7DQotCX0NCi19DQotDQotRlhfQ09MT1JSRUYgQ1BXTF9VdGlsczo6UFdMQ29sb3JUb0ZYQ29sb3IoY29uc3QgQ1BXTF9Db2xvciYgY29sb3IsIEZYX0lOVDMyIG5UcmFuc3BhcmFuY3kpDQotew0KLQlGWF9JTlQzMiBuQWxwaGEgPSBuVHJhbnNwYXJhbmN5Ow0KLQlGWF9GTE9BVCBkUmVkID0gMDsNCi0JRlhfRkxPQVQgZEdyZWVuID0gMDsNCi0JRlhfRkxPQVQgZEJsdWUgPSAwOw0KLQ0KLQlQV0xDb2xvclRvQVJHQihjb2xvciwgbkFscGhhLCBkUmVkLCBkR3JlZW4sIGRCbHVlKTsNCi0NCi0JcmV0dXJuIEFyZ2JFbmNvZGUobkFscGhhLCAoRlhfSU5UMzIpKGRSZWQqMjU1KSwgKEZYX0lOVDMyKShkR3JlZW4qMjU1KSwgKEZYX0lOVDMyKShkQmx1ZSoyNTUpKTsNCi19DQotDQotdm9pZCBDUFdMX1V0aWxzOjpEcmF3RmlsbFJlY3QoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSxjb25zdCBDUERGX1JlY3QgJiByZWN0LA0KLQkJCQkJCQkgIGNvbnN0IEZYX0NPTE9SUkVGICYgY29sb3IpDQotew0KLQlDRlhfUGF0aERhdGEgcGF0aDsNCi0JQ1BERl9SZWN0IHJjVGVtcChyZWN0KTsJDQotCXBhdGguQXBwZW5kUmVjdChyY1RlbXAubGVmdCxyY1RlbXAuYm90dG9tLHJjVGVtcC5yaWdodCxyY1RlbXAudG9wKTsNCi0JcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgTlVMTCwgY29sb3IsIDAsIEZYRklMTF9XSU5ESU5HKTsNCi19DQotDQotdm9pZCBDUFdMX1V0aWxzOjpEcmF3RmlsbEFyZWEoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwNCi0JCQkJCQkJY29uc3QgQ1BERl9Qb2ludCogcFB0cywgRlhfSU5UMzIgbkNvdW50LCBjb25zdCBGWF9DT0xPUlJFRiYgY29sb3IpDQotew0KLQlDRlhfUGF0aERhdGEgcGF0aDsNCi0JcGF0aC5TZXRQb2ludENvdW50KG5Db3VudCk7DQotDQotCXBhdGguU2V0UG9pbnQoMCwgcFB0c1swXS54LCBwUHRzWzBdLnksIEZYUFRfTU9WRVRPKTsNCi0JZm9yIChGWF9JTlQzMiBpPTE7IGk8bkNvdW50OyBpKyspDQotCQlwYXRoLlNldFBvaW50KGksIHBQdHNbaV0ueCwgcFB0c1tpXS55LCBGWFBUX0xJTkVUTyk7DQotDQotCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoLCBwVXNlcjJEZXZpY2UsIE5VTEwsIGNvbG9yLCAwLCBGWEZJTExfQUxURVJOQVRFKTsNCi19DQotDQotdm9pZCBDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlUmVjdChDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLGNvbnN0IENQREZfUmVjdCAmIHJlY3QsDQotCQkJCQkJCSAgY29uc3QgRlhfQ09MT1JSRUYgJiBjb2xvciwgRlhfRkxPQVQgZldpZHRoKQ0KLXsNCi0JQ0ZYX1BhdGhEYXRhIHBhdGg7DQotCUNQREZfUmVjdCByY1RlbXAocmVjdCk7CQ0KLQlwYXRoLkFwcGVuZFJlY3QocmNUZW1wLmxlZnQscmNUZW1wLmJvdHRvbSxyY1RlbXAucmlnaHQscmNUZW1wLnRvcCk7DQotCQ0KLQlDRlhfR3JhcGhTdGF0ZURhdGEgZ3NkOw0KLQlnc2QubV9MaW5lV2lkdGggPSBmV2lkdGg7DQotDQotCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoLCBwVXNlcjJEZXZpY2UsICZnc2QsIDAsIGNvbG9yLCBGWEZJTExfQUxURVJOQVRFKTsNCi19DQotDQotdm9pZCBDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlTGluZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLA0KLQkJCQkJCQljb25zdCBDUERGX1BvaW50ICYgcHRNb3ZlVG8sIGNvbnN0IENQREZfUG9pbnQgJiBwdExpbmVUbywgY29uc3QgRlhfQ09MT1JSRUYgJiBjb2xvciwgRlhfRkxPQVQgZldpZHRoKQ0KLXsNCi0JQ0ZYX1BhdGhEYXRhIHBhdGg7DQotCXBhdGguU2V0UG9pbnRDb3VudCgyKTsNCi0JcGF0aC5TZXRQb2ludCgwLCBwdE1vdmVUby54LCBwdE1vdmVUby55LCBGWFBUX01PVkVUTyk7DQotCXBhdGguU2V0UG9pbnQoMSwgcHRMaW5lVG8ueCwgcHRMaW5lVG8ueSwgRlhQVF9MSU5FVE8pOw0KLQ0KLQlDRlhfR3JhcGhTdGF0ZURhdGEgZ3NkOw0KLQlnc2QubV9MaW5lV2lkdGggPSBmV2lkdGg7DQotDQotCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoLCBwVXNlcjJEZXZpY2UsICZnc2QsIDAsIGNvbG9yLCBGWEZJTExfQUxURVJOQVRFKTsNCi19DQotDQotdm9pZCBDUFdMX1V0aWxzOjpEcmF3RmlsbFJlY3QoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSxjb25zdCBDUERGX1JlY3QgJiByZWN0LA0KLQkJCQkJCQkgIGNvbnN0IENQV0xfQ29sb3IgJiBjb2xvciwgRlhfSU5UMzIgblRyYW5zcGFyYW5jeSkNCi17DQotCUNQV0xfVXRpbHM6OkRyYXdGaWxsUmVjdChwRGV2aWNlLHBVc2VyMkRldmljZSxyZWN0LFBXTENvbG9yVG9GWENvbG9yKGNvbG9yLG5UcmFuc3BhcmFuY3kpKTsNCi19DQotDQotdm9pZCBDUFdMX1V0aWxzOjpEcmF3U2hhZG93KENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsDQotCQkJCQkJCQkJCQkJCQlGWF9CT09MIGJWZXJ0aWNhbCwgRlhfQk9PTCBiSG9yaXpvbnRhbCwgQ1BERl9SZWN0IHJlY3QsDQotCQkJCQkJCQkJCQkJCQlGWF9JTlQzMiBuVHJhbnNwYXJhbmN5LCBGWF9JTlQzMiBuU3RhcnRHcmF5LCBGWF9JTlQzMiBuRW5kR3JheSkNCi17DQotCUZYX0ZMT0FUIGZTdGVwR3JheSA9IDEuMGY7DQotDQotCWlmIChiVmVydGljYWwpDQotCXsNCi0JCWZTdGVwR3JheSA9IChuRW5kR3JheSAtIG5TdGFydEdyYXkpIC8gcmVjdC5IZWlnaHQoKTsNCi0NCi0JCWZvciAoRlhfRkxPQVQgZnk9cmVjdC5ib3R0b20rMC41ZjsgZnk8PXJlY3QudG9wLTAuNWY7IGZ5Kz0xLjBmKQ0KLQkJewkJCQ0KLQkJCUZYX0lOVDMyIG5HcmF5ID0gblN0YXJ0R3JheSArIChGWF9JTlQzMikoZlN0ZXBHcmF5ICogKGZ5LXJlY3QuYm90dG9tKSk7DQotCQkJQ1BXTF9VdGlsczo6RHJhd1N0cm9rZUxpbmUocERldmljZSwgcFVzZXIyRGV2aWNlLCBDUERGX1BvaW50KHJlY3QubGVmdCwgZnkpLA0KLQkJCQlDUERGX1BvaW50KHJlY3QucmlnaHQsIGZ5KSwgQXJnYkVuY29kZShuVHJhbnNwYXJhbmN5LCBuR3JheSwgbkdyYXksIG5HcmF5KSwgMS41Zik7DQotCQl9DQotCX0NCi0NCi0JaWYgKGJIb3Jpem9udGFsKQ0KLQl7DQotCQlmU3RlcEdyYXkgPSAobkVuZEdyYXkgLSBuU3RhcnRHcmF5KSAvIHJlY3QuV2lkdGgoKTsNCi0NCi0JCWZvciAoRlhfRkxPQVQgZng9cmVjdC5sZWZ0KzAuNWY7IGZ4PD1yZWN0LnJpZ2h0LTAuNWY7IGZ4Kz0xLjBmKQ0KLQkJewkJCQ0KLQkJCUZYX0lOVDMyIG5HcmF5ID0gblN0YXJ0R3JheSArIChGWF9JTlQzMikoZlN0ZXBHcmF5ICogKGZ4LXJlY3QubGVmdCkpOw0KLQkJCUNQV0xfVXRpbHM6OkRyYXdTdHJva2VMaW5lKHBEZXZpY2UsIHBVc2VyMkRldmljZSwgQ1BERl9Qb2ludChmeCwgcmVjdC5ib3R0b20pLA0KLQkJCQlDUERGX1BvaW50KGZ4LCByZWN0LnRvcCksIEFyZ2JFbmNvZGUoblRyYW5zcGFyYW5jeSwgbkdyYXksIG5HcmF5LCBuR3JheSksIDEuNWYpOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9VdGlsczo6RHJhd0JvcmRlcihDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLA0KLQkJCQkJCQkJCQkJCWNvbnN0IENQREZfUmVjdCAmIHJlY3QsIEZYX0ZMT0FUIGZXaWR0aCwNCi0JCQkJCQkJCQkJCQljb25zdCBDUFdMX0NvbG9yICYgY29sb3IsIGNvbnN0IENQV0xfQ29sb3IgJiBjckxlZnRUb3AsIGNvbnN0IENQV0xfQ29sb3IgJiBjclJpZ2h0Qm90dG9tLA0KLQkJCQkJCQkJCQkJCUZYX0lOVDMyIG5TdHlsZSwgY29uc3QgQ1BXTF9EYXNoICYgZGFzaCwgRlhfSU5UMzIgblRyYW5zcGFyYW5jeSkNCi17DQotCUZYX0ZMT0FUIGZMZWZ0ID0gcmVjdC5sZWZ0Ow0KLQlGWF9GTE9BVCBmUmlnaHQgPSByZWN0LnJpZ2h0Ow0KLQlGWF9GTE9BVCBmVG9wID0gcmVjdC50b3A7DQotCUZYX0ZMT0FUIGZCb3R0b20gPSByZWN0LmJvdHRvbTsNCi0NCi0JaWYgKGZXaWR0aCA+IDAuMGYpDQotCXsNCi0JCUZYX0ZMT0FUIGZIYWxmV2lkdGggPSBmV2lkdGggLyAyLjBmOw0KLQ0KLQkJc3dpdGNoIChuU3R5bGUpDQotCQl7DQotCQlkZWZhdWx0Og0KLQkJY2FzZSBQQlNfU09MSUQ6DQotCQkJew0KLQkJCQlDRlhfUGF0aERhdGEgcGF0aDsNCi0JCQkJcGF0aC5BcHBlbmRSZWN0KGZMZWZ0LCBmQm90dG9tLCBmUmlnaHQsIGZUb3ApOw0KLQkJCQlwYXRoLkFwcGVuZFJlY3QoZkxlZnQgKyBmV2lkdGgsIGZCb3R0b20gKyBmV2lkdGgsIGZSaWdodCAtIGZXaWR0aCwgZlRvcCAtIGZXaWR0aCk7DQotCQkJCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoLCBwVXNlcjJEZXZpY2UsIE5VTEwsIFBXTENvbG9yVG9GWENvbG9yKGNvbG9yLG5UcmFuc3BhcmFuY3kpLCAwLCBGWEZJTExfQUxURVJOQVRFKTsNCi0JCQl9DQotCQkJYnJlYWs7DQotCQljYXNlIFBCU19EQVNIOg0KLQkJCXsNCi0JCQkJQ0ZYX1BhdGhEYXRhIHBhdGg7DQotDQotCQkJCXBhdGguU2V0UG9pbnRDb3VudCg1KTsNCi0JCQkJcGF0aC5TZXRQb2ludCgwLCBmTGVmdCArIGZXaWR0aCAvIDIuMGYsIGZCb3R0b20gKyBmV2lkdGggLyAyLjBmLCBGWFBUX01PVkVUTyk7DQotCQkJCXBhdGguU2V0UG9pbnQoMSwgZkxlZnQgKyBmV2lkdGggLyAyLjBmLCBmVG9wIC0gZldpZHRoIC8gMi4wZiwgRlhQVF9MSU5FVE8pOw0KLQkJCQlwYXRoLlNldFBvaW50KDIsIGZSaWdodCAtIGZXaWR0aCAvIDIuMGYsIGZUb3AgLSBmV2lkdGggLyAyLjBmLCBGWFBUX0xJTkVUTyk7DQotCQkJCXBhdGguU2V0UG9pbnQoMywgZlJpZ2h0IC0gZldpZHRoIC8gMi4wZiwgZkJvdHRvbSArIGZXaWR0aCAvIDIuMGYsIEZYUFRfTElORVRPKTsNCi0JCQkJcGF0aC5TZXRQb2ludCg0LCBmTGVmdCArIGZXaWR0aCAvIDIuMGYsIGZCb3R0b20gKyBmV2lkdGggLyAyLjBmLCBGWFBUX0xJTkVUTyk7DQotDQotCQkJCUNGWF9HcmFwaFN0YXRlRGF0YSBnc2Q7DQotCQkJCWdzZC5TZXREYXNoQ291bnQoMik7CQkJCQ0KLQkJCQlnc2QubV9EYXNoQXJyYXlbMF0gPSAzLjBmOw0KLQkJCQlnc2QubV9EYXNoQXJyYXlbMV0gPSAzLjBmOw0KLQkJCQlnc2QubV9EYXNoUGhhc2UgPSAwOwkNCi0JCQkJDQotCQkJCWdzZC5tX0xpbmVXaWR0aCA9IGZXaWR0aDsNCi0JCQkJcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgJmdzZCwgMCwgUFdMQ29sb3JUb0ZYQ29sb3IoY29sb3IsblRyYW5zcGFyYW5jeSksIEZYRklMTF9XSU5ESU5HKTsJCQkJDQotCQkJfQkJCQ0KLQkJCWJyZWFrOw0KLQkJY2FzZSBQQlNfQkVWRUxFRDoNCi0JCWNhc2UgUEJTX0lOU0VUOgkNCi0JCQl7DQotCQkJCUNGWF9HcmFwaFN0YXRlRGF0YSBnc2Q7DQotCQkJCWdzZC5tX0xpbmVXaWR0aCA9IGZIYWxmV2lkdGg7DQotDQotCQkJCUNGWF9QYXRoRGF0YSBwYXRoTFQ7DQotDQotCQkJCXBhdGhMVC5TZXRQb2ludENvdW50KDcpOw0KLQkJCQlwYXRoTFQuU2V0UG9pbnQoMCwgZkxlZnQgKyBmSGFsZldpZHRoLCBmQm90dG9tICsgZkhhbGZXaWR0aCwgRlhQVF9NT1ZFVE8pOw0KLQkJCQlwYXRoTFQuU2V0UG9pbnQoMSwgZkxlZnQgKyBmSGFsZldpZHRoLCBmVG9wIC0gZkhhbGZXaWR0aCwgRlhQVF9MSU5FVE8pOw0KLQkJCQlwYXRoTFQuU2V0UG9pbnQoMiwgZlJpZ2h0IC0gZkhhbGZXaWR0aCwgZlRvcCAtIGZIYWxmV2lkdGgsIEZYUFRfTElORVRPKTsNCi0JCQkJcGF0aExULlNldFBvaW50KDMsIGZSaWdodCAtIGZIYWxmV2lkdGggKiAyLCBmVG9wIC0gZkhhbGZXaWR0aCAqIDIsIEZYUFRfTElORVRPKTsNCi0JCQkJcGF0aExULlNldFBvaW50KDQsIGZMZWZ0ICsgZkhhbGZXaWR0aCAqIDIsIGZUb3AgLSBmSGFsZldpZHRoICogMiwgRlhQVF9MSU5FVE8pOw0KLQkJCQlwYXRoTFQuU2V0UG9pbnQoNSwgZkxlZnQgKyBmSGFsZldpZHRoICogMiwgZkJvdHRvbSArIGZIYWxmV2lkdGggKiAyLCBGWFBUX0xJTkVUTyk7DQotCQkJCXBhdGhMVC5TZXRQb2ludCg2LCBmTGVmdCArIGZIYWxmV2lkdGgsIGZCb3R0b20gKyBmSGFsZldpZHRoLCBGWFBUX0xJTkVUTyk7DQotDQotCQkJCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoTFQsIHBVc2VyMkRldmljZSwgJmdzZCwgUFdMQ29sb3JUb0ZYQ29sb3IoY3JMZWZ0VG9wLG5UcmFuc3BhcmFuY3kpLCAwLCBGWEZJTExfQUxURVJOQVRFKTsNCi0NCi0JCQkJQ0ZYX1BhdGhEYXRhIHBhdGhSQjsNCi0NCi0JCQkJcGF0aFJCLlNldFBvaW50Q291bnQoNyk7DQotCQkJCXBhdGhSQi5TZXRQb2ludCgwLCBmUmlnaHQgLSBmSGFsZldpZHRoLCBmVG9wIC0gZkhhbGZXaWR0aCwgRlhQVF9NT1ZFVE8pOw0KLQkJCQlwYXRoUkIuU2V0UG9pbnQoMSwgZlJpZ2h0IC0gZkhhbGZXaWR0aCwgZkJvdHRvbSArIGZIYWxmV2lkdGgsIEZYUFRfTElORVRPKTsNCi0JCQkJcGF0aFJCLlNldFBvaW50KDIsIGZMZWZ0ICsgZkhhbGZXaWR0aCwgZkJvdHRvbSArIGZIYWxmV2lkdGgsIEZYUFRfTElORVRPKTsNCi0JCQkJcGF0aFJCLlNldFBvaW50KDMsIGZMZWZ0ICsgZkhhbGZXaWR0aCAqIDIsIGZCb3R0b20gKyBmSGFsZldpZHRoICogMiwgRlhQVF9MSU5FVE8pOw0KLQkJCQlwYXRoUkIuU2V0UG9pbnQoNCwgZlJpZ2h0IC0gZkhhbGZXaWR0aCAqIDIsIGZCb3R0b20gKyBmSGFsZldpZHRoICogMiwgRlhQVF9MSU5FVE8pOw0KLQkJCQlwYXRoUkIuU2V0UG9pbnQoNSwgZlJpZ2h0IC0gZkhhbGZXaWR0aCAqIDIsIGZUb3AgLSBmSGFsZldpZHRoICogMiwgRlhQVF9MSU5FVE8pOw0KLQkJCQlwYXRoUkIuU2V0UG9pbnQoNiwgZlJpZ2h0IC0gZkhhbGZXaWR0aCwgZlRvcCAtIGZIYWxmV2lkdGgsIEZYUFRfTElORVRPKTsNCi0NCi0JCQkJcERldmljZS0+RHJhd1BhdGgoJnBhdGhSQiwgcFVzZXIyRGV2aWNlLCAmZ3NkLCBQV0xDb2xvclRvRlhDb2xvcihjclJpZ2h0Qm90dG9tLG5UcmFuc3BhcmFuY3kpLCAwLCBGWEZJTExfQUxURVJOQVRFKTsNCi0NCi0JCQkJQ0ZYX1BhdGhEYXRhIHBhdGg7DQotDQotCQkJCXBhdGguQXBwZW5kUmVjdChmTGVmdCwgZkJvdHRvbSwgZlJpZ2h0LCBmVG9wKTsNCi0JCQkJcGF0aC5BcHBlbmRSZWN0KGZMZWZ0ICsgZkhhbGZXaWR0aCwgZkJvdHRvbSArIGZIYWxmV2lkdGgsIGZSaWdodCAtIGZIYWxmV2lkdGgsIGZUb3AgLSBmSGFsZldpZHRoKTsNCi0NCi0JCQkJcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgJmdzZCwgUFdMQ29sb3JUb0ZYQ29sb3IoY29sb3IsblRyYW5zcGFyYW5jeSksIDAsIEZYRklMTF9BTFRFUk5BVEUpOw0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWNhc2UgUEJTX1VOREVSTElORUQ6DQotCQkJew0KLQkJCQlDRlhfUGF0aERhdGEgcGF0aDsNCi0NCi0JCQkJcGF0aC5TZXRQb2ludENvdW50KDIpOw0KLQkJCQlwYXRoLlNldFBvaW50KDAsIGZMZWZ0LCBmQm90dG9tICsgZldpZHRoIC8gMiwgRlhQVF9NT1ZFVE8pOw0KLQkJCQlwYXRoLlNldFBvaW50KDEsIGZSaWdodCwgZkJvdHRvbSArIGZXaWR0aCAvIDIsIEZYUFRfTElORVRPKTsNCi0JCQkJDQotCQkJCUNGWF9HcmFwaFN0YXRlRGF0YSBnc2Q7DQotCQkJCWdzZC5tX0xpbmVXaWR0aCA9IGZXaWR0aDsNCi0NCi0JCQkJcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgJmdzZCwwLCAgUFdMQ29sb3JUb0ZYQ29sb3IoY29sb3IsblRyYW5zcGFyYW5jeSksIEZYRklMTF9BTFRFUk5BVEUpOw0KLQkJCX0NCi0JCQlicmVhazsNCi0JCWNhc2UgUEJTX1NIQURPVzoNCi0JCQl7DQotCQkJCUNGWF9QYXRoRGF0YSBwYXRoOw0KLQkJCQlwYXRoLkFwcGVuZFJlY3QoZkxlZnQsIGZCb3R0b20sIGZSaWdodCwgZlRvcCk7DQotCQkJCXBhdGguQXBwZW5kUmVjdChmTGVmdCArIGZXaWR0aCwgZkJvdHRvbSArIGZXaWR0aCwgZlJpZ2h0IC0gZldpZHRoLCBmVG9wIC0gZldpZHRoKTsNCi0JCQkJcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgTlVMTCwgUFdMQ29sb3JUb0ZYQ29sb3IoY29sb3IsblRyYW5zcGFyYW5jeS8yKSwgMCwgRlhGSUxMX0FMVEVSTkFURSk7DQotCQkJfQ0KLQkJCWJyZWFrOw0KLQkJfQ0KLQl9DQotfQ0KLQ0KLXN0YXRpYyB2b2lkIEFkZFNxdWlnZ2x5UGF0aChDRlhfUGF0aERhdGEgJiBQYXRoRGF0YSwgRlhfRkxPQVQgZlN0YXJ0WCwgRlhfRkxPQVQgZkVuZFgsIEZYX0ZMT0FUIGZZLCBGWF9GTE9BVCBmU3RlcCkNCi17DQotCVBhdGhEYXRhLkFkZFBvaW50Q291bnQoMSk7DQotCVBhdGhEYXRhLlNldFBvaW50KFBhdGhEYXRhLkdldFBvaW50Q291bnQoKSAtIDEsIGZTdGFydFgsIGZZLCBGWFBUX01PVkVUTyk7DQotDQotCUZYX0ZMT0FUIGZ4Ow0KLQlGWF9JTlQzMiBpOw0KLQ0KLQlmb3IgKGk9MSxmeD1mU3RhcnRYK2ZTdGVwOyBmeDxmRW5kWDsgZngrPWZTdGVwLGkrKykNCi0Jew0KLQkJUGF0aERhdGEuQWRkUG9pbnRDb3VudCgxKTsNCi0JCVBhdGhEYXRhLlNldFBvaW50KFBhdGhEYXRhLkdldFBvaW50Q291bnQoKSAtIDEsIGZ4LCBmWSArIChpJjEpKmZTdGVwLCBGWFBUX0xJTkVUTyk7DQotCX0NCi19DQotDQotc3RhdGljIHZvaWQgQWRkU3BlbGxDaGVja09iaihDRlhfUGF0aERhdGEgJiBQYXRoRGF0YSwgSUZYX0VkaXQqIHBFZGl0LCBjb25zdCBDUFZUX1dvcmRSYW5nZSYgd3JXb3JkKQ0KLXsNCi0JRlhfRkxPQVQgZlN0YXJ0WCA9IDAuMGY7DQotCUZYX0ZMT0FUIGZFbmRYID0gMC4wZjsNCi0JRlhfRkxPQVQgZlkgPSAwLjBmOw0KLQlGWF9GTE9BVCBmU3RlcCA9IDAuMGY7IA0KLQ0KLQlGWF9CT09MIGJCcmVhayA9IEZBTFNFOw0KLQ0KLQlpZiAoSUZYX0VkaXRfSXRlcmF0b3IqIHBJdGVyYXRvciA9IHBFZGl0LT5HZXRJdGVyYXRvcigpKQ0KLQl7DQotCQlwSXRlcmF0b3ItPlNldEF0KHdyV29yZC5CZWdpblBvcyk7DQotDQotCQlkbw0KLQkJew0KLQkJCUNQVlRfV29yZFBsYWNlIHBsYWNlID0gcEl0ZXJhdG9yLT5HZXRBdCgpOw0KLQ0KLQkJCUNQVlRfTGluZSBsaW5lOwkJCQkNCi0JCQlpZiAocEl0ZXJhdG9yLT5HZXRMaW5lKGxpbmUpKQ0KLQkJCXsNCi0JCQkJZlkgPSBsaW5lLnB0TGluZS55Ow0KLQkJCQlmU3RlcCA9IChsaW5lLmZMaW5lQXNjZW50IC0gbGluZS5mTGluZURlc2NlbnQpIC8gMTYuMGY7DQotCQkJfQ0KLQ0KLQkJCWlmIChwbGFjZS5MaW5lQ21wKHdyV29yZC5CZWdpblBvcykgPT0gMCkNCi0JCQl7DQotCQkJCXBJdGVyYXRvci0+U2V0QXQod3JXb3JkLkJlZ2luUG9zKTsNCi0JCQkJQ1BWVF9Xb3JkIHdvcmQ7DQotCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpDQotCQkJCXsNCi0JCQkJCWZTdGFydFggPSB3b3JkLnB0V29yZC54Ow0KLQkJCQl9DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCWZTdGFydFggPSBsaW5lLnB0TGluZS54Ow0KLQkJCX0NCi0NCi0JCQlpZiAocGxhY2UuTGluZUNtcCh3cldvcmQuRW5kUG9zKSA9PSAwKQ0KLQkJCXsNCi0JCQkJcEl0ZXJhdG9yLT5TZXRBdCh3cldvcmQuRW5kUG9zKTsNCi0JCQkJQ1BWVF9Xb3JkIHdvcmQ7DQotCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpDQotCQkJCXsNCi0JCQkJCWZFbmRYID0gd29yZC5wdFdvcmQueCArIHdvcmQuZldpZHRoOw0KLQkJCQl9DQotDQotCQkJCWJCcmVhayA9IFRSVUU7DQotCQkJfQ0KLQkJCWVsc2UNCi0JCQl7DQotCQkJCWZFbmRYID0gbGluZS5wdExpbmUueCArIGxpbmUuZkxpbmVXaWR0aDsNCi0JCQl9DQotDQotCQkJQWRkU3F1aWdnbHlQYXRoKFBhdGhEYXRhLCBmU3RhcnRYLCBmRW5kWCwgZlksIGZTdGVwKTsNCi0NCi0JCQlpZiAoYkJyZWFrKSBicmVhazsNCi0JCX0NCi0JCXdoaWxlIChwSXRlcmF0b3ItPk5leHRMaW5lKCkpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9VdGlsczo6RHJhd0VkaXRTcGVsbENoZWNrKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsIElGWF9FZGl0KiBwRWRpdCwgDQotCQkJCQkJY29uc3QgQ1BERl9SZWN0JiByY0NsaXAsIGNvbnN0IENQREZfUG9pbnQmIHB0T2Zmc2V0LCBjb25zdCBDUFZUX1dvcmRSYW5nZSogcFJhbmdlLCANCi0JCQkJCQlJUFdMX1NwZWxsQ2hlY2sgKiBwU3BlbGxDaGVjaykNCi17DQotCWNvbnN0IEZYX0NPTE9SUkVGIGNyU3BlbGwgPSBBcmdiRW5jb2RlKDI1NSwyNTUsMCwwKTsNCi0NCi0JLy9mb3Igc3BlbGxjaGVjaw0KLQlGWF9CT09MIGJMYXRpbldvcmQgPSBGQUxTRTsNCi0JQ1BWVF9Xb3JkUGxhY2Ugd3BXb3JkU3RhcnQ7DQotCUNGWF9CeXRlU3RyaW5nIHNMYXRpbldvcmQ7DQotDQotCUNGWF9QYXRoRGF0YSBwYXRoU3BlbGw7DQotDQotCXBEZXZpY2UtPlNhdmVTdGF0ZSgpOw0KLQ0KLQlpZiAoIXJjQ2xpcC5Jc0VtcHR5KCkpDQotCXsNCi0JCUNQREZfUmVjdCByY1RlbXAgPSByY0NsaXA7DQotCQlwVXNlcjJEZXZpY2UtPlRyYW5zZm9ybVJlY3QocmNUZW1wKTsNCi0JCUZYX1JFQ1QgcmNEZXZDbGlwOw0KLQkJcmNEZXZDbGlwLmxlZnQgPSAoRlhfSU5UMzIpcmNUZW1wLmxlZnQ7DQotCQlyY0RldkNsaXAucmlnaHQgPSAoRlhfSU5UMzIpcmNUZW1wLnJpZ2h0Ow0KLQkJcmNEZXZDbGlwLnRvcCA9IChGWF9JTlQzMilyY1RlbXAudG9wOw0KLQkJcmNEZXZDbGlwLmJvdHRvbSA9IChGWF9JTlQzMilyY1RlbXAuYm90dG9tOw0KLQkJcERldmljZS0+U2V0Q2xpcF9SZWN0KCZyY0RldkNsaXApOw0KLQl9DQotDQotCWlmIChJRlhfRWRpdF9JdGVyYXRvciogcEl0ZXJhdG9yID0gcEVkaXQtPkdldEl0ZXJhdG9yKCkpDQotCXsNCi0JCWlmIChwRWRpdC0+R2V0Rm9udE1hcCgpKQ0KLQkJew0KLQkJCWlmIChwUmFuZ2UpDQotCQkJCXBJdGVyYXRvci0+U2V0QXQocFJhbmdlLT5CZWdpblBvcyk7DQotCQkJZWxzZQ0KLQkJCQlwSXRlcmF0b3ItPlNldEF0KDApOw0KLQ0KLQkJCUNQVlRfV29yZFBsYWNlIG9sZHBsYWNlOwkJCQ0KLQ0KLQkJCXdoaWxlIChwSXRlcmF0b3ItPk5leHRXb3JkKCkpDQotCQkJew0KLQkJCQlDUFZUX1dvcmRQbGFjZSBwbGFjZSA9IHBJdGVyYXRvci0+R2V0QXQoKTsNCi0JCQkJaWYgKHBSYW5nZSAmJiBwbGFjZS5Xb3JkQ21wKHBSYW5nZS0+RW5kUG9zKSA+IDApIGJyZWFrOwkJCQkNCi0NCi0JCQkJQ1BWVF9Xb3JkIHdvcmQ7CQkJCQ0KLQkJCQlpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmQpKQ0KLQkJCQl7DQotCQkJCQlpZiAoRlhfRURJVF9JU0xBVElOV09SRCh3b3JkLldvcmQpKQ0KLQkJCQkJew0KLQkJCQkJCWlmICghYkxhdGluV29yZCkNCi0JCQkJCQl7DQotCQkJCQkJCXdwV29yZFN0YXJ0ID0gcGxhY2U7DQotCQkJCQkJCWJMYXRpbldvcmQgPSBUUlVFOwkJCQkJCQkJDQotCQkJCQkJfQ0KLQ0KLQkJCQkJCXNMYXRpbldvcmQgKz0gKGNoYXIpd29yZC5Xb3JkOw0KLQkJCQkJfQ0KLQkJCQkJZWxzZQ0KLQkJCQkJew0KLQkJCQkJCWlmIChiTGF0aW5Xb3JkKQ0KLQkJCQkJCXsNCi0JCQkJCQkJaWYgKCFzTGF0aW5Xb3JkLklzRW1wdHkoKSkNCi0JCQkJCQkJew0KLQkJCQkJCQkJaWYgKHBTcGVsbENoZWNrICYmICFwU3BlbGxDaGVjay0+Q2hlY2tXb3JkKHNMYXRpbldvcmQpKQ0KLQkJCQkJCQkJew0KLQkJCQkJCQkJCUFkZFNwZWxsQ2hlY2tPYmoocGF0aFNwZWxsLHBFZGl0LENQVlRfV29yZFJhbmdlKHdwV29yZFN0YXJ0LG9sZHBsYWNlKSk7CQkJCQkJCQkJDQotCQkJCQkJCQkJcEl0ZXJhdG9yLT5TZXRBdChwbGFjZSk7DQotCQkJCQkJCQl9DQotCQkJCQkJCX0NCi0JCQkJCQkJYkxhdGluV29yZCA9IEZBTFNFOw0KLQkJCQkJCX0NCi0NCi0JCQkJCQlzTGF0aW5Xb3JkLkVtcHR5KCk7DQotCQkJCQl9DQotCQkJCQkNCi0JCQkJCW9sZHBsYWNlID0gcGxhY2U7DQotCQkJCX0NCi0JCQkJZWxzZQ0KLQkJCQl7DQotCQkJCQlpZiAoYkxhdGluV29yZCkNCi0JCQkJCXsNCi0JCQkJCQlpZiAoIXNMYXRpbldvcmQuSXNFbXB0eSgpKQ0KLQkJCQkJCXsNCi0JCQkJCQkJaWYgKHBTcGVsbENoZWNrICYmICFwU3BlbGxDaGVjay0+Q2hlY2tXb3JkKHNMYXRpbldvcmQpKQ0KLQkJCQkJCQl7DQotCQkJCQkJCQlBZGRTcGVsbENoZWNrT2JqKHBhdGhTcGVsbCxwRWRpdCxDUFZUX1dvcmRSYW5nZSh3cFdvcmRTdGFydCxvbGRwbGFjZSkpOwkJCQkJCQkJCQ0KLQkJCQkJCQkJcEl0ZXJhdG9yLT5TZXRBdChwbGFjZSk7DQotCQkJCQkJCX0NCi0JCQkJCQl9DQotCQkJCQkJYkxhdGluV29yZCA9IEZBTFNFOw0KLQkJCQkJfQ0KLQ0KLQkJCQkJc0xhdGluV29yZC5FbXB0eSgpOw0KLQkJCQl9DQotCQkJfQ0KLQ0KLQkJCWlmICghc0xhdGluV29yZC5Jc0VtcHR5KCkpIA0KLQkJCXsNCi0JCQkJaWYgKHBTcGVsbENoZWNrICYmICFwU3BlbGxDaGVjay0+Q2hlY2tXb3JkKHNMYXRpbldvcmQpKQ0KLQkJCQl7DQotCQkJCQlBZGRTcGVsbENoZWNrT2JqKHBhdGhTcGVsbCxwRWRpdCxDUFZUX1dvcmRSYW5nZSh3cFdvcmRTdGFydCxvbGRwbGFjZSkpOwkNCi0JCQkJfQ0KLQkJCX0NCi0JCX0NCi0JfQ0KLQkNCi0JQ0ZYX0dyYXBoU3RhdGVEYXRhIGdzZDsNCi0JZ3NkLm1fTGluZVdpZHRoID0gMDsNCi0JaWYgKHBhdGhTcGVsbC5HZXRQb2ludENvdW50KCkgPiAwKQ0KLQkJcERldmljZS0+RHJhd1BhdGgoJnBhdGhTcGVsbCwgcFVzZXIyRGV2aWNlLCAmZ3NkLCAwLCBjclNwZWxsLCBGWEZJTExfQUxURVJOQVRFKTsNCi0NCi0JcERldmljZS0+UmVzdG9yZVN0YXRlKCk7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9VdGlsczo6SXNCbGFja09yV2hpdGUoY29uc3QgQ1BXTF9Db2xvciYgY29sb3IpDQotew0KLQlzd2l0Y2ggKGNvbG9yLm5Db2xvclR5cGUpDQotCXsNCi0JY2FzZSBDT0xPUlRZUEVfVFJBTlNQQVJFTlQ6DQotCQlyZXR1cm4gRkFMU0U7DQotCWNhc2UgQ09MT1JUWVBFX0dSQVk6DQotCQlyZXR1cm4gY29sb3IuZkNvbG9yMSA8IDAuNWY7DQotCWNhc2UgQ09MT1JUWVBFX1JHQjoNCi0JCXJldHVybiBjb2xvci5mQ29sb3IxICsgY29sb3IuZkNvbG9yMiArIGNvbG9yLmZDb2xvcjMgPCAxLjVmOw0KLQljYXNlIENPTE9SVFlQRV9DTVlLOg0KLQkJcmV0dXJuIGNvbG9yLmZDb2xvcjEgKyBjb2xvci5mQ29sb3IyICsgY29sb3IuZkNvbG9yMyArIGNvbG9yLmZDb2xvcjQgPiAyLjBmOw0KLQl9DQotDQotCXJldHVybiBUUlVFOw0KLX0NCi0NCi1DUFdMX0NvbG9yIENQV0xfVXRpbHM6OkdldFJldmVyc2VDb2xvcihjb25zdCBDUFdMX0NvbG9yJiBjb2xvcikNCi17DQotCUNQV0xfQ29sb3IgY3JSZXQgPSBjb2xvcjsNCi0NCi0Jc3dpdGNoIChjb2xvci5uQ29sb3JUeXBlKQ0KLQl7DQotCWNhc2UgQ09MT1JUWVBFX0dSQVk6DQotCQljclJldC5mQ29sb3IxID0gMS4wZiAtIGNyUmV0LmZDb2xvcjE7DQotCQlicmVhazsNCi0JY2FzZSBDT0xPUlRZUEVfUkdCOg0KLQkJY3JSZXQuZkNvbG9yMSA9IDEuMGYgLSBjclJldC5mQ29sb3IxOw0KLQkJY3JSZXQuZkNvbG9yMiA9IDEuMGYgLSBjclJldC5mQ29sb3IyOw0KLQkJY3JSZXQuZkNvbG9yMyA9IDEuMGYgLSBjclJldC5mQ29sb3IzOw0KLQkJYnJlYWs7DQotCWNhc2UgQ09MT1JUWVBFX0NNWUs6DQotCQljclJldC5mQ29sb3IxID0gMS4wZiAtIGNyUmV0LmZDb2xvcjE7DQotCQljclJldC5mQ29sb3IyID0gMS4wZiAtIGNyUmV0LmZDb2xvcjI7DQotCQljclJldC5mQ29sb3IzID0gMS4wZiAtIGNyUmV0LmZDb2xvcjM7DQotCQljclJldC5mQ29sb3I0ID0gMS4wZiAtIGNyUmV0LmZDb2xvcjQ7DQotCQlicmVhazsNCi0JfQ0KLQ0KLQlyZXR1cm4gY3JSZXQ7DQotfQ0KLQ0KLUNGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldEljb25BcHBTdHJlYW0oRlhfSU5UMzIgblR5cGUsIGNvbnN0IENQREZfUmVjdCYgcmVjdCwgY29uc3QgQ1BXTF9Db2xvciYgY3JGaWxsLCANCi0JCQkJCQkJCQkJCQljb25zdCBDUFdMX0NvbG9yJiBjclN0cm9rZSkNCi17DQotCUNGWF9CeXRlU3RyaW5nIHNBcHBTdHJlYW0gPSBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjclN0cm9rZSwgRkFMU0UpOw0KLQlzQXBwU3RyZWFtICs9IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKGNyRmlsbCwgVFJVRSk7DQotDQotCUNGWF9CeXRlU3RyaW5nIHNQYXRoOw0KLQlDRlhfUGF0aERhdGEgcGF0aDsNCi0NCi0Jc3dpdGNoIChuVHlwZSkNCi0Jew0KLQljYXNlIFBXTF9JQ09OVFlQRV9DSEVDS01BUks6DQotCQlHZXRHcmFwaGljc19DaGVja21hcmsoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1NUUkVBTSk7CQ0KLQkJYnJlYWs7DQotCWNhc2UgUFdMX0lDT05UWVBFX0NJUkNMRToNCi0JCUdldEdyYXBoaWNzX0NpcmNsZShzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfU1RSRUFNKTsNCi0JCWJyZWFrOw0KLQljYXNlIFBXTF9JQ09OVFlQRV9DT01NRU5UOg0KLQkJR2V0R3JhcGhpY3NfQ29tbWVudChzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfU1RSRUFNKTsNCi0JCWJyZWFrOw0KLQljYXNlIFBXTF9JQ09OVFlQRV9DUk9TUzoNCi0JCUdldEdyYXBoaWNzX0Nyb3NzKHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9TVFJFQU0pOw0KLQkJYnJlYWs7DQotCWNhc2UgUFdMX0lDT05UWVBFX0hFTFA6DQotCQlHZXRHcmFwaGljc19IZWxwKHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9TVFJFQU0pOw0KLQkJYnJlYWs7DQotCWNhc2UgUFdMX0lDT05UWVBFX0lOU0VSVFRFWFQ6DQotCQlHZXRHcmFwaGljc19JbnNlcnRUZXh0KHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9TVFJFQU0pOw0KLQkJYnJlYWs7DQotCWNhc2UgUFdMX0lDT05UWVBFX0tFWToNCi0JCUdldEdyYXBoaWNzX0tleShzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfU1RSRUFNKTsNCi0JCWJyZWFrOw0KLQljYXNlIFBXTF9JQ09OVFlQRV9ORVdQQVJBR1JBUEg6DQotCQlHZXRHcmFwaGljc19OZXdQYXJhZ3JhcGgoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1NUUkVBTSk7DQotCQlicmVhazsNCi0JY2FzZSBQV0xfSUNPTlRZUEVfVEVYVE5PVEU6DQotCQlHZXRHcmFwaGljc19UZXh0Tm90ZShzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfU1RSRUFNKTsNCi0JCWJyZWFrOw0KLQljYXNlIFBXTF9JQ09OVFlQRV9QQVJBR1JBUEg6DQotCQlHZXRHcmFwaGljc19QYXJhZ3JhcGgoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1NUUkVBTSk7DQotCQlicmVhazsNCi0JY2FzZSBQV0xfSUNPTlRZUEVfUklHSFRBUlJPVzoNCi0JCUdldEdyYXBoaWNzX1JpZ2h0QXJyb3coc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1NUUkVBTSk7DQotCQlicmVhazsNCi0JY2FzZSBQV0xfSUNPTlRZUEVfUklHSFRQT0lOVEVSOg0KLQkJR2V0R3JhcGhpY3NfUmlnaHRQb2ludGVyKHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9TVFJFQU0pOw0KLQkJYnJlYWs7DQotCWNhc2UgUFdMX0lDT05UWVBFX1NUQVI6DQotCQlHZXRHcmFwaGljc19TdGFyKHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9TVFJFQU0pOw0KLQkJYnJlYWs7DQotCWNhc2UgUFdMX0lDT05UWVBFX1VQQVJST1c6DQotCQlHZXRHcmFwaGljc19VcEFycm93KHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9TVFJFQU0pOw0KLQkJYnJlYWs7DQotCWNhc2UgUFdMX0lDT05UWVBFX1VQTEVGVEFSUk9XOg0KLQkJR2V0R3JhcGhpY3NfVXBMZWZ0QXJyb3coc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1NUUkVBTSk7DQotCQlicmVhazsNCi0JY2FzZSBQV0xfSUNPTlRZUEVfR1JBUEg6DQotCQlHZXRHcmFwaGljc19HcmFwaChzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfU1RSRUFNKTsNCi0JCWJyZWFrOw0KLQljYXNlIFBXTF9JQ09OVFlQRV9QQVBFUkNMSVA6DQotCQlHZXRHcmFwaGljc19QYXBlcmNsaXAoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1NUUkVBTSk7DQotCQlicmVhazsNCi0JY2FzZSBQV0xfSUNPTlRZUEVfQVRUQUNITUVOVDoNCi0JCUdldEdyYXBoaWNzX0F0dGFjaG1lbnQoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1NUUkVBTSk7DQotCQlicmVhazsNCi0JY2FzZSBQV0xfSUNPTlRZUEVfVEFHOg0KLQkJR2V0R3JhcGhpY3NfVGFnKHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9TVFJFQU0pOw0KLQkJYnJlYWs7DQotCWNhc2UgUFdMX0lDT05UWVBFX0ZPWElUOg0KLQkJR2V0R3JhcGhpY3NfRm94aXQoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1NUUkVBTSk7DQotCQlicmVhazsNCi0JfQ0KLQ0KLQlzQXBwU3RyZWFtICs9IHNQYXRoOw0KLQlpZiAoY3JTdHJva2UubkNvbG9yVHlwZSAhPSBDT0xPUlRZUEVfVFJBTlNQQVJFTlQpDQotCQlzQXBwU3RyZWFtICs9ICJCKlxuIjsNCi0JZWxzZQ0KLQkJc0FwcFN0cmVhbSArPSAiZipcbiI7DQotDQotCXJldHVybiBzQXBwU3RyZWFtOw0KLX0NCi0NCi12b2lkIENQV0xfVXRpbHM6OkRyYXdJY29uQXBwU3RyZWFtKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsDQotCQkJCQkJRlhfSU5UMzIgblR5cGUsIGNvbnN0IENQREZfUmVjdCAmIHJlY3QsIGNvbnN0IENQV0xfQ29sb3ImIGNyRmlsbCwgY29uc3QgQ1BXTF9Db2xvciYgY3JTdHJva2UsIGNvbnN0IEZYX0lOVDMyIG5UcmFuc3BhcmFuY3kpDQotew0KLQlDRlhfR3JhcGhTdGF0ZURhdGEgZ3NkOw0KLQlnc2QubV9MaW5lV2lkdGggPSAxLjBmOw0KLQ0KLQlDRlhfQnl0ZVN0cmluZyBzUGF0aDsNCi0JQ0ZYX1BhdGhEYXRhIHBhdGg7DQotDQotCXN3aXRjaCAoblR5cGUpDQotCXsNCi0JY2FzZSBQV0xfSUNPTlRZUEVfQ0hFQ0tNQVJLOg0KLQkJR2V0R3JhcGhpY3NfQ2hlY2ttYXJrKHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9QQVRIREFUQSk7DQotCQlicmVhazsNCi0JY2FzZSBQV0xfSUNPTlRZUEVfQ0lSQ0xFOg0KLQkJR2V0R3JhcGhpY3NfQ2lyY2xlKHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9QQVRIREFUQSk7DQotCQlicmVhazsNCi0JY2FzZSBQV0xfSUNPTlRZUEVfQ09NTUVOVDoNCi0JCUdldEdyYXBoaWNzX0NvbW1lbnQoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1BBVEhEQVRBKTsNCi0JCWJyZWFrOw0KLQljYXNlIFBXTF9JQ09OVFlQRV9DUk9TUzoNCi0JCUdldEdyYXBoaWNzX0Nyb3NzKHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9QQVRIREFUQSk7DQotCQlicmVhazsNCi0JY2FzZSBQV0xfSUNPTlRZUEVfSEVMUDoNCi0JCUdldEdyYXBoaWNzX0hlbHAoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1BBVEhEQVRBKTsNCi0JCWJyZWFrOw0KLQljYXNlIFBXTF9JQ09OVFlQRV9JTlNFUlRURVhUOg0KLQkJR2V0R3JhcGhpY3NfSW5zZXJ0VGV4dChzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfUEFUSERBVEEpOw0KLQkJYnJlYWs7DQotCWNhc2UgUFdMX0lDT05UWVBFX0tFWToNCi0JCUdldEdyYXBoaWNzX0tleShzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfUEFUSERBVEEpOw0KLQkJYnJlYWs7DQotCWNhc2UgUFdMX0lDT05UWVBFX05FV1BBUkFHUkFQSDoNCi0JCUdldEdyYXBoaWNzX05ld1BhcmFncmFwaChzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfUEFUSERBVEEpOw0KLQkJYnJlYWs7DQotCWNhc2UgUFdMX0lDT05UWVBFX1RFWFROT1RFOg0KLQkJR2V0R3JhcGhpY3NfVGV4dE5vdGUoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1BBVEhEQVRBKTsNCi0JCWJyZWFrOw0KLQljYXNlIFBXTF9JQ09OVFlQRV9QQVJBR1JBUEg6DQotCQlHZXRHcmFwaGljc19QYXJhZ3JhcGgoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1BBVEhEQVRBKTsNCi0JCWJyZWFrOw0KLQljYXNlIFBXTF9JQ09OVFlQRV9SSUdIVEFSUk9XOg0KLQkJR2V0R3JhcGhpY3NfUmlnaHRBcnJvdyhzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfUEFUSERBVEEpOw0KLQkJYnJlYWs7DQotCWNhc2UgUFdMX0lDT05UWVBFX1JJR0hUUE9JTlRFUjoNCi0JCUdldEdyYXBoaWNzX1JpZ2h0UG9pbnRlcihzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfUEFUSERBVEEpOw0KLQkJYnJlYWs7DQotCWNhc2UgUFdMX0lDT05UWVBFX1NUQVI6DQotCQlHZXRHcmFwaGljc19TdGFyKHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9QQVRIREFUQSk7DQotCQlicmVhazsNCi0JY2FzZSBQV0xfSUNPTlRZUEVfVVBBUlJPVzoNCi0JCUdldEdyYXBoaWNzX1VwQXJyb3coc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1BBVEhEQVRBKTsNCi0JCWJyZWFrOw0KLQljYXNlIFBXTF9JQ09OVFlQRV9VUExFRlRBUlJPVzoNCi0JCUdldEdyYXBoaWNzX1VwTGVmdEFycm93KHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9QQVRIREFUQSk7DQotCQlicmVhazsNCi0JY2FzZSBQV0xfSUNPTlRZUEVfR1JBUEg6DQotCQlHZXRHcmFwaGljc19HcmFwaChzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfUEFUSERBVEEpOw0KLQkJYnJlYWs7DQotCWNhc2UgUFdMX0lDT05UWVBFX1BBUEVSQ0xJUDoNCi0JCUdldEdyYXBoaWNzX1BhcGVyY2xpcChzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfUEFUSERBVEEpOw0KLQkJYnJlYWs7DQotCWNhc2UgUFdMX0lDT05UWVBFX0FUVEFDSE1FTlQ6DQotCQlHZXRHcmFwaGljc19BdHRhY2htZW50KHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9QQVRIREFUQSk7DQotCQlicmVhazsNCi0JY2FzZSBQV0xfSUNPTlRZUEVfVEFHOg0KLQkJR2V0R3JhcGhpY3NfVGFnKHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9QQVRIREFUQSk7DQotCQlicmVhazsNCi0JY2FzZSBQV0xfSUNPTlRZUEVfRk9YSVQ6DQotCQlHZXRHcmFwaGljc19Gb3hpdChzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfUEFUSERBVEEpOw0KLQkJYnJlYWs7DQotCWRlZmF1bHQ6DQotCQlyZXR1cm47DQotCX0NCi0NCi0JcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgJmdzZCwgDQotCQlQV0xDb2xvclRvRlhDb2xvcihjckZpbGwsblRyYW5zcGFyYW5jeSksIFBXTENvbG9yVG9GWENvbG9yKGNyU3Ryb2tlLG5UcmFuc3BhcmFuY3kpLCBGWEZJTExfQUxURVJOQVRFKTsNCi19DQotDQotdm9pZCBDUFdMX1V0aWxzOjpHZXRHcmFwaGljc19DaGVja21hcmsoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKQ0KLXsNCi0JRlhfRkxPQVQgZldpZHRoID0gY3JCQm94LnJpZ2h0IC0gY3JCQm94LmxlZnQ7DQotCUZYX0ZMT0FUIGZIZWlnaHQgPSBjckJCb3gudG9wIC0gY3JCQm94LmJvdHRvbTsNCi0NCi0JQ1BXTF9QYXRoRGF0YSBQYXRoQXJyYXlbXSA9IA0KLQl7DQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgICsgZldpZHRoIC8gMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0ICogMiAvIDUuMGYpLFBXTFBUX01PVkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgICsgZldpZHRoIC8gMTUuMGYgKyBQV0xfQkVaSUVSKihmV2lkdGggLyA3LjBmIC0gZldpZHRoIC8gMTUuMGYpLCANCi0JCQkJCSAgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQgKiAyIC8gNS4wZiArIFBXTF9CRVpJRVIqKGZIZWlnaHQgKiAyIC8gNy4wZiAtIGZIZWlnaHQgKiAyIC8gNS4wZikpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGggLyA0LjVmICsgUFdMX0JFWklFUiooZldpZHRoIC8gNS4wZiAtIGZXaWR0aCAvIDQuNWYpLA0KLQkJCQkJICBjckJCb3guYm90dG9tICsgZkhlaWdodCAvIDE2LjBmICsgUFdMX0JFWklFUiooZkhlaWdodCAvIDUuMGYgLSBmSGVpZ2h0IC8gMTYuMGYpKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoIC8gNC41ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQgLyAxNi4wZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCAvIDQuNWYgKyBQV0xfQkVaSUVSKihmV2lkdGggLyA0LjRmIC0gZldpZHRoIC8gNC41ZiksDQotCQkgICAgICAgICAgICAgIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0IC8gMTYuMGYgLSBQV0xfQkVaSUVSKmZIZWlnaHQgLyAxNi4wZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCAvIDMuMGYgKyBQV0xfQkVaSUVSKihmV2lkdGggLyA0LjBmIC0gZldpZHRoIC8gMy4wZiksDQotCQkgICAgICAgICAgICAgIGNyQkJveC5ib3R0b20pLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGggLyAzLjBmLCBjckJCb3guYm90dG9tKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoIC8gMy4wZiArIFBXTF9CRVpJRVIqZldpZHRoKigxLzcuMGYgKyAyLzE1LjBmKSwNCi0JCSAgICAgICAgICAgICAgY3JCQm94LmJvdHRvbSArIFBXTF9CRVpJRVIqZkhlaWdodCAqIDQgLyA1LjBmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICArIGZXaWR0aCAqIDE0IC8gMTUuMGYgKyBQV0xfQkVaSUVSKmZXaWR0aCooMS83LjBmIC0gNy8xNS4wZiksDQotCQkgICAgICAgICAgICAgIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0ICogMTUvMTYuMGYgKyBQV0xfQkVaSUVSKihmSGVpZ2h0ICogNC81LjBmIC0gZkhlaWdodCAqIDE1LzE2LjBmKSksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCAgKyBmV2lkdGggKiAxNCAvIDE1LjBmLGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0ICogMTUgLyAxNi4wZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCAgKyBmV2lkdGggKiAxNCAvIDE1LjBmICsgUFdMX0JFWklFUiooZldpZHRoICogNyAvIDE1LjBmIC0gZldpZHRoICogMTQgLyAxNS4wZiksDQotCQkgICAgICAgICAgICAgIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0ICogMTUgLyAxNi4wZiArIFBXTF9CRVpJRVIqKGZIZWlnaHQgKiA4IC8gNy4wZiAtIGZIZWlnaHQgKiAxNSAvIDE2LjBmKSksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCAvIDMuNmYgKyBQV0xfQkVaSUVSKihmV2lkdGggLyAzLjRmIC0gZldpZHRoIC8gMy42ZiksDQotCQkgICAgICAgICAgICAgIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0IC8gMy41ZiArIFBXTF9CRVpJRVIqKGZIZWlnaHQgLyAzLjVmIC0gZkhlaWdodCAvIDMuNWYpKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoIC8gMy42ZixjckJCb3guYm90dG9tICsgZkhlaWdodCAvIDMuNWYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGggLyAzLjZmLA0KLQkJICAgICAgICAgICAgICBjckJCb3guYm90dG9tICsgZkhlaWdodCAvIDMuNWYgKyBQV0xfQkVaSUVSKihmSGVpZ2h0IC8gNC4wZiAtIGZIZWlnaHQgLyAzLjVmKSksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCAgKyBmV2lkdGggLyAxNS4wZiArIFBXTF9CRVpJRVIqKGZXaWR0aCAvIDMuNWYgLSBmV2lkdGggLyAxNS4wZiksDQotCQkgICAgICAgICAgICAgIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0ICogMiAvIDUuMGYgKyBQV0xfQkVaSUVSKihmSGVpZ2h0ICogMy41ZiAvIDUuMGYgLSBmSGVpZ2h0ICogMiAvIDUuMGYpKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICArIGZXaWR0aCAvIDE1LjBmLGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0ICogMiAvIDUuMGYpLCBQV0xQVF9CRVpJRVJUTykNCi0JfTsNCi0NCi0JaWYodHlwZSA9PSBQV0xQVF9TVFJFQU0pDQotCQlzUGF0aERhdGEgPSBHZXRBcHBTdHJlYW1Gcm9tQXJyYXkoUGF0aEFycmF5LCAxNik7DQotCWVsc2UNCi0JCUdldFBhdGhEYXRhRnJvbUFycmF5KHBhdGgsIFBhdGhBcnJheSwgMTYpOw0KLX0NCi0NCi12b2lkIENQV0xfVXRpbHM6OkdldEdyYXBoaWNzX0NpcmNsZShDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpDQotew0KLQlGWF9GTE9BVCBmV2lkdGggPSBjckJCb3gucmlnaHQgLSBjckJCb3gubGVmdDsNCi0JRlhfRkxPQVQgZkhlaWdodCA9IGNyQkJveC50b3AgLSBjckJCb3guYm90dG9tOw0KLQ0KLQlDUFdMX1BhdGhEYXRhIFBhdGhBcnJheVtdID0NCi0Jew0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzE1LjBmLGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzIuMGYpLCBQV0xQVF9NT1ZFVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzE1LjBmLA0KLQkJICAgICAgICAgICAgICBjckJCb3guYm90dG9tICsgZkhlaWdodC8yLjBmICsgUFdMX0JFWklFUiooZkhlaWdodCoxNC8xNS4wZiAtIGZIZWlnaHQvMi4wZikpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiAtIFBXTF9CRVpJRVIqKGZXaWR0aC8yLjBmIC0gZldpZHRoLzE1LjBmKSwgY3JCQm94LnRvcCAtIGZIZWlnaHQvMTUuMGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZixjckJCb3gudG9wIC0gZkhlaWdodC8xNS4wZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8yLjBmICsgUFdMX0JFWklFUiooZldpZHRoKjE0LzE1LjBmIC0gZldpZHRoLzIuMGYpLCBjckJCb3gudG9wIC0gZkhlaWdodC8xNS4wZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzIuMGYgKyBQV0xfQkVaSUVSKihmSGVpZ2h0KjE0LzE1LjBmIC0gZkhlaWdodC8yLjBmKSksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzIuMGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzE1LjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8yLjBmIC0gUFdMX0JFWklFUiooZkhlaWdodC8yLjBmIC0gZkhlaWdodC8xNS4wZikpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiArIFBXTF9CRVpJRVIqKGZXaWR0aCoxNC8xNS4wZiAtIGZXaWR0aC8yLjBmKSwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMTUuMGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMTUuMGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiAtIFBXTF9CRVpJRVIqKGZXaWR0aC8yLjBmIC0gZldpZHRoLzE1LjBmKSwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMTUuMGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzIuMGYgLSBQV0xfQkVaSUVSKihmSGVpZ2h0LzIuMGYgLSBmSGVpZ2h0LzE1LjBmKSksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8xNS4wZixjckJCb3guYm90dG9tICsgZkhlaWdodC8yLjBmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjMvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzIuMGYpLCBQV0xQVF9NT1ZFVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjMvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzIuMGYgKyBQV0xfQkVaSUVSKihmSGVpZ2h0KjQvNS4wZiAtIGZIZWlnaHQvMi4wZikpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiAtIFBXTF9CRVpJRVIqKGZXaWR0aC8yLjBmIC0gZldpZHRoKjMvMTUuMGYpLCBjckJCb3gudG9wIC0gZkhlaWdodCozLzE1LjBmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzIuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjMvMTUuMGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiArIFBXTF9CRVpJRVIqKGZXaWR0aCo0LzUuMGYgLSBmV2lkdGgvMi4wZiksIGNyQkJveC50b3AgLSBmSGVpZ2h0KjMvMTUuMGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjMvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzIuMGYgKyBQV0xfQkVaSUVSKihmSGVpZ2h0KjQvNS4wZiAtIGZIZWlnaHQvMi4wZikpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjMvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzIuMGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjMvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzIuMGYgLSBQV0xfQkVaSUVSKihmSGVpZ2h0KjQvNS4wZiAtIGZIZWlnaHQvMi4wZikpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiArIFBXTF9CRVpJRVIqKGZXaWR0aCo0LzUuMGYgLSBmV2lkdGgvMi4wZiksIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjMvMTUuMGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMy8xNS4wZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8yLjBmIC0gUFdMX0JFWklFUiooZldpZHRoKjQvNS4wZiAtIGZXaWR0aC8yLjBmKSwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMy8xNS4wZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCozLzE1LjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8yLjBmIC0gUFdMX0JFWklFUiooZkhlaWdodCo0LzUuMGYgLSBmSGVpZ2h0LzIuMGYpKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjMvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzIuMGYpLCBQV0xQVF9CRVpJRVJUTykNCi0JfTsNCi0NCi0JaWYodHlwZSA9PSBQV0xQVF9TVFJFQU0pDQotCQlzUGF0aERhdGEgPSBHZXRBcHBTdHJlYW1Gcm9tQXJyYXkoUGF0aEFycmF5LCAyNik7DQotCWVsc2UNCi0JCUdldFBhdGhEYXRhRnJvbUFycmF5KHBhdGgsIFBhdGhBcnJheSwgMjYpOw0KLX0NCi0NCi12b2lkIENQV0xfVXRpbHM6OkdldEdyYXBoaWNzX0NvbW1lbnQoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKQ0KLXsNCi0JRlhfRkxPQVQgZldpZHRoID0gY3JCQm94LnJpZ2h0IC0gY3JCQm94LmxlZnQ7DQotCUZYX0ZMT0FUIGZIZWlnaHQgPSBjckJCb3gudG9wIC0gY3JCQm94LmJvdHRvbTsNCi0NCi0JQ1BXTF9QYXRoRGF0YSBQYXRoQXJyYXlbXSA9IA0KLQl7DQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMTUuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzYuMGYpLCBQV0xQVF9NT1ZFVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzE1LjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC82LjBmICsgUFdMX0JFWklFUiooZkhlaWdodC82LjBmIC0gZkhlaWdodC8xMC4wZikpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMi8xNS4wZiAtIFBXTF9CRVpJRVIqZldpZHRoLzE1LjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC8xMC4wZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCoyLzE1LjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC8xMC4wZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMi8xNS4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvMTAuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCoyLzE1LjBmICsgUFdMX0JFWklFUipmV2lkdGgvMTUuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzEwLjBmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC8xNS4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvNiArIFBXTF9CRVpJRVIqKGZIZWlnaHQvNi4wZiAtIGZIZWlnaHQvMTAuMGYpKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC8xNS4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvNi4wZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzMuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC8xNS4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqNC8xNS4wZiArIFBXTF9CRVpJRVIqZkhlaWdodC8xNS4wZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMi8xNS4wZiArIFBXTF9CRVpJRVIqZldpZHRoLzE1LjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCo0LzE1LjBmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCoyLzE1LjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCo0LzE1LjBmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjUvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjQvMTUuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjUvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjIvMTUgKyBQV0xfQkVaSUVSKmZIZWlnaHQqMi8xNS4wZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCo1LzE1LjBmIC0gUFdMX0JFWklFUipmV2lkdGgqMi8xNS4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMi8xNS4wZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCo2LzMwLjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCoyLzE1LjBmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjcvMzAuMGYgKyBQV0xfQkVaSUVSKmZXaWR0aC8zMC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMi8xNS4wZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCo3LzMwLjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCoyLzE1LjBmICsgUFdMX0JFWklFUipmSGVpZ2h0KjIvMTUuMGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqNy8zMC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqNC8xNS4wZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCoyLzE1LjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCo0LzE1LjBmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCoyLzE1LjBmIC0gUFdMX0JFWklFUipmV2lkdGgvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjQvMTUuMGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzMuMGYgLSBQV0xfQkVaSUVSKmZIZWlnaHQvMTUuMGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzMuMGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMTUuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzYuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjIvMTUuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjgvMzAuMGYpLCBQV0xQVF9NT1ZFVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCoyLzE1LjBmLCBjckJCb3gudG9wIC0gZkhlaWdodCo4LzMwLjBmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCoyLzE1LCBjckJCb3gudG9wIC0gZkhlaWdodCoyNS82MC4wZiksIFBXTFBUX01PVkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjIvMTUuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjI1LzYwLjBmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCoyLzE1LjBmLCBjckJCb3gudG9wIC0gZkhlaWdodCoxNy8zMC4wZiksIFBXTFBUX01PVkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjQvMTUuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjE3LzMwLjBmKSwgUFdMUFRfTElORVRPKQ0KLQl9Ow0KLQ0KLQlpZih0eXBlID09IFBXTFBUX1NUUkVBTSkNCi0JCXNQYXRoRGF0YSA9IEdldEFwcFN0cmVhbUZyb21BcnJheShQYXRoQXJyYXksIDMwKTsNCi0JZWxzZQ0KLQkJR2V0UGF0aERhdGFGcm9tQXJyYXkocGF0aCwgUGF0aEFycmF5LCAzMCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9VdGlsczo6R2V0R3JhcGhpY3NfQ3Jvc3MoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKQ0KLXsNCi0JRlhfRkxPQVQgZldpZHRoID0gY3JCQm94LnJpZ2h0IC0gY3JCQm94LmxlZnQ7DQotCUZYX0ZMT0FUIGZIZWlnaHQgPSBjckJCb3gudG9wIC0gY3JCQm94LmJvdHRvbTsNCi0JLy9GWF9GTE9BVCBmY2F0ZXJjb3JuZXIgPSAoRlhfRkxPQVQpc3FydChmV2lkdGgqZldpZHRoICsgZkhlaWdodCpmSGVpZ2h0KTsNCi0JQ1BXTF9Qb2ludCBjZW50ZXJfcG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMik7DQotDQotCUNQV0xfUGF0aERhdGEgUGF0aEFycmF5W10gPSANCi0Jew0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNlbnRlcl9wb2ludC54LCBjZW50ZXJfcG9pbnQueSArIGZIZWlnaHQvMTAuMGYpLCBQV0xQVF9NT1ZFVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNlbnRlcl9wb2ludC54ICsgZldpZHRoKjAuM2YsIGNlbnRlcl9wb2ludC55ICsgZkhlaWdodC8xMC4wZiArIGZXaWR0aCowLjNmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjZW50ZXJfcG9pbnQueCArIGZXaWR0aC8xMC4wZiArIGZXaWR0aCowLjNmLCBjZW50ZXJfcG9pbnQueSArIGZIZWlnaHQqMC4zZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY2VudGVyX3BvaW50LnggKyBmV2lkdGgvMTAuMGYsIGNlbnRlcl9wb2ludC55KSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjZW50ZXJfcG9pbnQueCArIGZXaWR0aC8xMC4wZiArIGZXaWR0aCowLjNmLCBjZW50ZXJfcG9pbnQueSAtIGZIZWlnaHQqMC4zZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY2VudGVyX3BvaW50LnggKyBmV2lkdGgqMC4zZiwgY2VudGVyX3BvaW50LnkgLSBmSGVpZ2h0LzEwLjBmIC0gZkhlaWdodCowLjNmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjZW50ZXJfcG9pbnQueCwgY2VudGVyX3BvaW50LnkgLSBmSGVpZ2h0LzEwLjBmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjZW50ZXJfcG9pbnQueCAtIGZXaWR0aCowLjNmLCBjZW50ZXJfcG9pbnQueSAtIGZIZWlnaHQvMTAgLSBmSGVpZ2h0KjAuM2YpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNlbnRlcl9wb2ludC54IC0gZldpZHRoLzEwLjBmIC0gZldpZHRoKjAuM2YsIGNlbnRlcl9wb2ludC55IC0gZkhlaWdodCowLjNmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjZW50ZXJfcG9pbnQueCAtIGZXaWR0aC8xMCwgY2VudGVyX3BvaW50LnkpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNlbnRlcl9wb2ludC54IC0gZldpZHRoLzEwIC0gZldpZHRoKjAuM2YsIGNlbnRlcl9wb2ludC55ICsgZkhlaWdodCowLjNmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjZW50ZXJfcG9pbnQueCAtIGZXaWR0aCowLjNmLCBjZW50ZXJfcG9pbnQueSArIGZIZWlnaHQvMTAuMGYgKyBmSGVpZ2h0KjAuM2YpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNlbnRlcl9wb2ludC54LCBjZW50ZXJfcG9pbnQueSArIGZIZWlnaHQvMTAuMGYpLCBQV0xQVF9MSU5FVE8pDQotCX07DQotDQotCWlmKHR5cGUgPT0gUFdMUFRfU1RSRUFNKQ0KLQkJc1BhdGhEYXRhID0gR2V0QXBwU3RyZWFtRnJvbUFycmF5KFBhdGhBcnJheSwgMTMpOw0KLQllbHNlDQotCQlHZXRQYXRoRGF0YUZyb21BcnJheShwYXRoLCBQYXRoQXJyYXksIDEzKTsNCi19DQotDQotdm9pZCBDUFdMX1V0aWxzOjpHZXRHcmFwaGljc19IZWxwKENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSkNCi17DQotCUZYX0ZMT0FUIGZXaWR0aCA9IGNyQkJveC5yaWdodCAtIGNyQkJveC5sZWZ0Ow0KLQlGWF9GTE9BVCBmSGVpZ2h0ID0gY3JCQm94LnRvcCAtIGNyQkJveC5ib3R0b207DQotDQotCUNQV0xfUGF0aERhdGEgUGF0aEFycmF5W10gPSANCi0Jew0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzYwLjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8yLjBmKSwgUFdMUFRfTU9WRVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC82MC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMi4wZiArIFBXTF9CRVpJRVIqKGZIZWlnaHQvNjAuMGYgLSBmSGVpZ2h0LzIuMGYpKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzIuMGYgLSBQV0xfQkVaSUVSKihmV2lkdGgvMi4wZiAtIGZXaWR0aC82MC4wZiksIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzYwLjBmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzIuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzYwLjBmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzIuMGYgKyBQV0xfQkVaSUVSKmZXaWR0aCoyOS82MC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvNjAuMGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzYwLjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8yLjBmICsgUFdMX0JFWklFUiooZkhlaWdodC82MC4wZiAtIGZIZWlnaHQvMi4wZikpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzYwLjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8yLjBmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC82MC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMi4wZiArIFBXTF9CRVpJRVIqZkhlaWdodCoyOS82MC4wZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8yLjBmICsgUFdMX0JFWklFUipmV2lkdGgqMjkvNjAuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzYwLjBmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzIuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzYwLjBmKSwgUFdMUFRfQkVaSUVSVE8pLAkJDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiAtIFBXTF9CRVpJRVIqZldpZHRoKjI5LzYwLjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC82MC4wZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC82MC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMi4wZiAgKyBQV0xfQkVaSUVSKmZIZWlnaHQqMjkvNjAuMGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvNjAuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzIuMGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4yN2YsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMzZmKSwgUFdMUFRfTU9WRVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjI3ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4zNmYgKyBQV0xfQkVaSUVSKmZIZWlnaHQqMC4yM2YpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC41ZiAtIFBXTF9CRVpJRVIqZldpZHRoKjAuMjNmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjg3ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjVmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjg3ZiksIFBXTFBUX0JFWklFUlRPKSwJCQ0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNWYgKyBQV0xfQkVaSUVSKmZXaWR0aCowLjIzZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC44N2YpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuMjdmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjM2ZiArIFBXTF9CRVpJRVIqZkhlaWdodCowLjIzZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC4yN2YsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMzZmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjI3ZiAtIGZXaWR0aCowLjA4ZiowLjJmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjM2ZiAtIGZIZWlnaHQqMC4xNWYqMC43ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC4zNWYgKyBmV2lkdGgqMC4wOGYqMC4yZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC41MWYgKyBmSGVpZ2h0KjAuMTVmKjAuMmYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuMzVmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjUxZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC4zNWYgLSBmV2lkdGgqMC4xZiowLjVmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjUxZiAtIGZIZWlnaHQqMC4xNWYqMC4zZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC40NWYgLSBmV2lkdGgqMC4xZiowLjVmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjY4ZiArIGZIZWlnaHQqMC4xNWYqMC41ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC40NWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuNjhmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjQ1ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4zMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjQ1ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4zMGYgLSBmV2lkdGgqMC4xZiowLjdmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjU1ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4zMGYgLSBmV2lkdGgqMC4xZiowLjdmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjU1ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4zMGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuNTVmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjY2ZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuNTVmIC0gZldpZHRoKjAuMWYqMC4wNWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuNjZmICsgZkhlaWdodCowLjE4ZiowLjVmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjQ1ZiAtIGZXaWR0aCowLjFmKjAuMDVmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjQ4ZiAtIGZIZWlnaHQqMC4xOGYqMC4zZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC40NWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuNDhmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjQ1ZiArIGZXaWR0aCowLjA4ZiowLjJmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjQ4ZiArIGZIZWlnaHQqMC4xOGYqMC4yZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC4zN2YgLSBmV2lkdGgqMC4wOGYqMC4yZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4zNmYgLSBmSGVpZ2h0KjAuMThmKjAuN2YpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuMzdmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjM2ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC4zN2YsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMzZmICsgUFdMX0JFWklFUipmSGVpZ2h0KjAuMTNmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNWYgKyBQV0xfQkVaSUVSKmZXaWR0aCowLjEzZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC43N2YpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC41ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC43N2YpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC41ZiAtIFBXTF9CRVpJRVIqZldpZHRoKjAuMTNmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjc3ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjM3ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4zNmYgKyBQV0xfQkVaSUVSKmZIZWlnaHQqMC4xM2YpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4zN2YsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMzZmKSwgUFdMUFRfQkVaSUVSVE8pLAkJDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4zN2YsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMzZmIC0gZldpZHRoKjAuMWYqMC42ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjI3ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4zNmYgLSBmV2lkdGgqMC4xZiowLjZmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMjdmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjM2ZiksIFBXTFBUX0JFWklFUlRPKSwJCQ0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjU2ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4xM2YpLCBQV0xQVF9NT1ZFVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjU2ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4xM2YgKyBQV0xfQkVaSUVSKmZIZWlnaHQqMC4wNTVmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjUwNWYgLSBQV0xfQkVaSUVSKmZXaWR0aCowLjA5NWYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMTg1ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC41MDVmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjE4NWYpLCBQV0xQVF9CRVpJRVJUTyksCQkNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC41MDVmICsgUFdMX0JFWklFUipmV2lkdGgqMC4wNjVmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjE4NWYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuNDRmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjEzZiArIFBXTF9CRVpJRVIqZkhlaWdodCowLjA1NWYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuNDRmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjEzZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC40NGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMTNmIC0gUFdMX0JFWklFUipmSGVpZ2h0KjAuMDU1ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC41MDVmICsgUFdMX0JFWklFUipmV2lkdGgqMC4wNjVmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjA3NWYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuNTA1ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4wNzVmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjUwNWYgLSBQV0xfQkVaSUVSKmZXaWR0aCowLjA2NWYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMDc1ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC41NmYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMTNmIC0gUFdMX0JFWklFUipmSGVpZ2h0KjAuMDU1ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC41NmYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMTNmKSwgUFdMUFRfQkVaSUVSVE8pDQotCX07DQotDQotCWlmKHR5cGUgPT0gUFdMUFRfU1RSRUFNKQ0KLQkJc1BhdGhEYXRhID0gR2V0QXBwU3RyZWFtRnJvbUFycmF5KFBhdGhBcnJheSwgNTkpOw0KLQllbHNlDQotCQlHZXRQYXRoRGF0YUZyb21BcnJheShwYXRoLCBQYXRoQXJyYXksIDU5KTsNCi19DQotDQotdm9pZCBDUFdMX1V0aWxzOjpHZXRHcmFwaGljc19JbnNlcnRUZXh0KENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSkNCi17DQotCUZYX0ZMT0FUIGZXaWR0aCA9IGNyQkJveC5yaWdodCAtIGNyQkJveC5sZWZ0Ow0KLQlGWF9GTE9BVCBmSGVpZ2h0ID0gY3JCQm94LnRvcCAtIGNyQkJveC5ib3R0b207DQotDQotCUNQV0xfUGF0aERhdGEgUGF0aEFycmF5W10gPSANCi0Jew0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzEwLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8xMCksIFBXTFBUX01PVkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMi8xNSksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzEwLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8xMCksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMTAsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzEwKSwgUFdMUFRfTElORVRPKQ0KLQl9Ow0KLQ0KLQlpZih0eXBlID09IFBXTFBUX1NUUkVBTSkNCi0JCXNQYXRoRGF0YSA9IEdldEFwcFN0cmVhbUZyb21BcnJheShQYXRoQXJyYXksIDQpOw0KLQllbHNlDQotCQlHZXRQYXRoRGF0YUZyb21BcnJheShwYXRoLCBQYXRoQXJyYXksIDQpOw0KLX0NCi0NCi12b2lkIENQV0xfVXRpbHM6OkdldEdyYXBoaWNzX0tleShDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpDQotew0KLQlGWF9GTE9BVCBmV2lkdGggPSBjckJCb3gucmlnaHQgLSBjckJCb3gubGVmdDsNCi0JRlhfRkxPQVQgZkhlaWdodCA9IGNyQkJveC50b3AgLSBjckJCb3guYm90dG9tOw0KLQlGWF9GTE9BVCBrID0gLWZIZWlnaHQvZldpZHRoOw0KLQlDUFdMX1BvaW50IHRhaWw7DQotCUNQV0xfUG9pbnQgQ2ljbGVDZW50ZXI7DQotCXRhaWwueCA9IGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuOWY7DQotCXRhaWwueSA9IGsqKHRhaWwueCAtIGNyQkJveC5yaWdodCkgKyBjckJCb3guYm90dG9tOw0KLQlDaWNsZUNlbnRlci54ID0gY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4xNWY7DQotCUNpY2xlQ2VudGVyLnkgPSBrKihDaWNsZUNlbnRlci54IC0gY3JCQm94LnJpZ2h0KSArIGNyQkJveC5ib3R0b207DQotDQotCUNQV0xfUGF0aERhdGEgUGF0aEFycmF5W10gPSANCi0Jew0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KHRhaWwueCArIGZXaWR0aC8zMC4wZiwgLWZXaWR0aC8zMC4wZi9rICsgdGFpbC55KSwgUFdMUFRfTU9WRVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludCh0YWlsLnggKyBmV2lkdGgvMzAuMGYgLSBmV2lkdGgqMC4xOGYsIC1rKmZXaWR0aCowLjE4ZiAtIGZXaWR0aC8zMC9rICsgdGFpbC55KSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludCh0YWlsLnggKyBmV2lkdGgvMzAgLSBmV2lkdGgqMC4xOGYgKyBmV2lkdGgqMC4wN2YsDQotCQkgICAgICAgICAgICAgIC1mV2lkdGgqMC4wN2YvayAtIGsqZldpZHRoKjAuMThmIC0gZldpZHRoLzMwL2sgKyB0YWlsLnkpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KHRhaWwueCArIGZXaWR0aC8zMCAtIGZXaWR0aCowLjE4ZiAtIGZXaWR0aC8yMCArIGZXaWR0aCowLjA3ZiwNCi0JCSAgICAgICAgICAgICAgLWZXaWR0aCowLjA3Zi9rIC0gaypmV2lkdGgvMjAgLSBrKmZXaWR0aCowLjE4ZiAtIGZXaWR0aC8zMC9rICsgdGFpbC55KSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludCh0YWlsLnggKyBmV2lkdGgvMzAgLSBmV2lkdGgqMC4xOGYgLSBmV2lkdGgvMjAsDQotCQkgICAgICAgICAgICAgIC1rKmZXaWR0aC8yMCAtIGsqZldpZHRoKjAuMThmIC0gZldpZHRoLzMwL2sgKyB0YWlsLnkpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KHRhaWwueCArIGZXaWR0aC8zMCAtIGZXaWR0aCowLjE4ZiAtIGZXaWR0aC8yMCAtIGZXaWR0aC8xNSwNCi0JCSAgICAgICAgICAgICAgLWsqZldpZHRoLzE1IC0gaypmV2lkdGgvMjAgLSBrKmZXaWR0aCowLjE4ZiAtIGZXaWR0aC8zMC9rICsgdGFpbC55KSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludCh0YWlsLnggKyBmV2lkdGgvMzAgLSBmV2lkdGgqMC4xOGYgLSBmV2lkdGgvMjAgLSBmV2lkdGgvMTUgKyBmV2lkdGgqMC4wN2YsDQotCQkgICAgICAgICAgICAgIC1mV2lkdGgqMC4wN2YvayAtIGsqZldpZHRoLzE1IC0gaypmV2lkdGgvMjAgLSBrKmZXaWR0aCowLjE4ZiAtIGZXaWR0aC8zMC9rICsgdGFpbC55KSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludCh0YWlsLnggKyBmV2lkdGgvMzAgLSBmV2lkdGgqMC4xOGYgLSBmV2lkdGgvMjAgLSBmV2lkdGgvMTUgLSBmV2lkdGgvMjAgKyBmV2lkdGgqMC4wN2YsDQotCQkgICAgICAgICAgICAgIC1mV2lkdGgqMC4wN2YvayArIC1rKmZXaWR0aC8yMCArIC1rKmZXaWR0aC8xNSAtIGsqZldpZHRoLzIwIC0gaypmV2lkdGgqMC4xOGYgLSBmV2lkdGgvMzAvayArIHRhaWwueSksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQodGFpbC54ICsgZldpZHRoLzMwIC0gZldpZHRoKjAuMThmIC0gZldpZHRoLzIwIC0gZldpZHRoLzE1IC0gZldpZHRoLzIwLA0KLQkJICAgICAgICAgICAgICAtaypmV2lkdGgvMjAgKyAtaypmV2lkdGgvMTUgLSBrKmZXaWR0aC8yMCAtIGsqZldpZHRoKjAuMThmIC0gZldpZHRoLzMwL2sgKyB0YWlsLnkpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KHRhaWwueCArIGZXaWR0aC8zMCAtIGZXaWR0aCowLjQ1ZiwgLWsqZldpZHRoKjAuNDVmIC0gZldpZHRoLzMwL2sgKyB0YWlsLnkpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KHRhaWwueCArIGZXaWR0aC8zMCAtIGZXaWR0aCowLjQ1ZiArIGZXaWR0aCowLjJmLA0KLQkJICAgICAgICAgICAgICAtZldpZHRoKjAuNGYvayAtIGsqZldpZHRoKjAuNDVmIC0gZldpZHRoLzMwL2sgKyB0YWlsLnkpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoQ2ljbGVDZW50ZXIueCArIGZXaWR0aCowLjJmLCAtIGZXaWR0aCowLjFmL2sgKyBDaWNsZUNlbnRlci55KSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KENpY2xlQ2VudGVyLngsIENpY2xlQ2VudGVyLnkpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoQ2ljbGVDZW50ZXIueCAtIGZXaWR0aC82MC4wZiwgLWsqZldpZHRoLzYwICsgQ2ljbGVDZW50ZXIueSksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChDaWNsZUNlbnRlci54IC0gZldpZHRoLzYwLCAtaypmV2lkdGgvNjAgKyBDaWNsZUNlbnRlci55KSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KENpY2xlQ2VudGVyLngsIENpY2xlQ2VudGVyLnkpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoQ2ljbGVDZW50ZXIueCAtIGZXaWR0aCowLjIyZiwgZldpZHRoKjAuMzVmL2sgKyBDaWNsZUNlbnRlci55IC0gZkhlaWdodCowLjA1ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludCh0YWlsLnggLSBmV2lkdGgvMzAgLSBmV2lkdGgqMC40NWYgLSBmV2lkdGgqMC4xOGYsIGZXaWR0aCowLjA1Zi9rIC0gaypmV2lkdGgqMC40NWYgKyBmV2lkdGgvMzAvayArIHRhaWwueSAtIGZIZWlnaHQqMC4wNWYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQodGFpbC54IC0gZldpZHRoLzMwLjBmIC0gZldpZHRoKjAuNDVmLCAtaypmV2lkdGgqMC40NWYgKyBmV2lkdGgvMzAuMGYvayArIHRhaWwueSksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludCh0YWlsLnggLSBmV2lkdGgvMzAuMGYsIGZXaWR0aC8zMC4wZi9rICsgdGFpbC55KSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludCh0YWlsLnggKyBmV2lkdGgvMzAsIC1mV2lkdGgvMzAvayArIHRhaWwueSksIFBXTFBUX0xJTkVUTyksCQkNCi0gCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoQ2ljbGVDZW50ZXIueCArIGZXaWR0aCowLjA4ZiwgaypmV2lkdGgqMC4wOGYgKyBDaWNsZUNlbnRlci55KSwgUFdMUFRfTU9WRVRPKSwNCi0gCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoQ2ljbGVDZW50ZXIueCArIGZXaWR0aCowLjA4ZiArIGZXaWR0aCowLjFmLCAtZldpZHRoKjAuMWYvayArIGsqZldpZHRoKjAuMDhmICsgQ2ljbGVDZW50ZXIueSksIFBXTFBUX0JFWklFUlRPKSwNCi0gCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoQ2ljbGVDZW50ZXIueCArIGZXaWR0aCowLjIyZiArIGZXaWR0aCowLjFmLCBrKmZXaWR0aCowLjIyZiArIENpY2xlQ2VudGVyLnkgLSBmV2lkdGgqMC4xZi9rKSwgUFdMUFRfQkVaSUVSVE8pLA0KLSAJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChDaWNsZUNlbnRlci54ICsgZldpZHRoKjAuMjJmLCBrKmZXaWR0aCowLjIyZiArIENpY2xlQ2VudGVyLnkpLCBQV0xQVF9CRVpJRVJUTyksDQotIAkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KENpY2xlQ2VudGVyLnggKyBmV2lkdGgqMC4yMmYgLSBmV2lkdGgqMC4xZiwgZldpZHRoKjAuMWYvayArIGsqZldpZHRoKjAuMjJmICsgQ2ljbGVDZW50ZXIueSksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChDaWNsZUNlbnRlci54ICsgZldpZHRoKjAuMDhmIC0gZldpZHRoKjAuMWYsIGZXaWR0aCowLjFmL2sgKyBrKmZXaWR0aCowLjA4ZiArIENpY2xlQ2VudGVyLnkpLCBQV0xQVF9CRVpJRVJUTyksDQotIAkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KENpY2xlQ2VudGVyLnggKyBmV2lkdGgqMC4wOGYsIGsqZldpZHRoKjAuMDhmICsgQ2ljbGVDZW50ZXIueSksIFBXTFBUX0JFWklFUlRPKQ0KLQl9Ow0KLQ0KLQlpZih0eXBlID09IFBXTFBUX1NUUkVBTSkNCi0JCXNQYXRoRGF0YSA9IEdldEFwcFN0cmVhbUZyb21BcnJheShQYXRoQXJyYXksIDI4KTsNCi0JZWxzZQ0KLQkJR2V0UGF0aERhdGFGcm9tQXJyYXkocGF0aCwgUGF0aEFycmF5LCAyOCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9VdGlsczo6R2V0R3JhcGhpY3NfTmV3UGFyYWdyYXBoKENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSkNCi17DQotCUZYX0ZMT0FUIGZXaWR0aCA9IGNyQkJveC5yaWdodCAtIGNyQkJveC5sZWZ0Ow0KLQlGWF9GTE9BVCBmSGVpZ2h0ID0gY3JCQm94LnRvcCAtIGNyQkJveC5ib3R0b207DQotDQotCUNQV0xfUGF0aERhdGEgUGF0aEFycmF5W10gPSANCi0Jew0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzIuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzIwLjBmKSwgUFdMUFRfTU9WRVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8xMC4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvMi4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzEwLjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC8yLjBmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8yLjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC8yMC4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4xMmYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjE3LzMwLjBmKSwgUFdMUFRfTU9WRVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjEyZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMTAuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMjJmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8xMC4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4yMmYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjE3LzMwLjBmIC0gZldpZHRoKjAuMTRmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjM4ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMTAuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNDhmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8xMC4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC40OGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjE3LzMwLjBmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjM4ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMTcvMzAuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMzhmLCBjckJCb3guYm90dG9tICsgZldpZHRoKjAuMjRmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjIyZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMTcvMzAuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMTJmLCBjckJCb3gudG9wIC0gZkhlaWdodCoxNy8zMC4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC42ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMTAuMGYpLCBQV0xQVF9NT1ZFVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuN2YsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzEwLjBmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjdmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8xMC4wZiArIGZIZWlnaHQvNy4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC45N2YsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzEwLjBmICsgZkhlaWdodC83LjBmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuOTdmLCBjckJCb3gudG9wIC0gZkhlaWdodCoxNy8zMC4wZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjdmLCBjckJCb3gudG9wIC0gZkhlaWdodCoxNy8zMC4wZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjZmLCBjckJCb3gudG9wIC0gZkhlaWdodCoxNy8zMC4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC42ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMTAuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuN2YsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzcgKyBmSGVpZ2h0KjAuMThmKSwgUFdMUFRfTU9WRVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjg1ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvNyArIGZIZWlnaHQqMC4xOGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC44NWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjE3LzMwLjBmIC0gZkhlaWdodCowLjA4ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjdmLCBjckJCb3gudG9wIC0gZkhlaWdodCoxNy8zMC4wZiAtIGZIZWlnaHQqMC4wOGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC43ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvNyArIGZIZWlnaHQqMC4xOGYpLCBQV0xQVF9MSU5FVE8pDQotCX07DQotDQotCWlmKHR5cGUgPT0gUFdMUFRfU1RSRUFNKQ0KLQkJc1BhdGhEYXRhID0gR2V0QXBwU3RyZWFtRnJvbUFycmF5KFBhdGhBcnJheSwgMjgpOw0KLQllbHNlDQotCQlHZXRQYXRoRGF0YUZyb21BcnJheShwYXRoLCBQYXRoQXJyYXksIDI4KTsNCi19DQotDQotdm9pZCBDUFdMX1V0aWxzOjpHZXRHcmFwaGljc19UZXh0Tm90ZShDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpDQotew0KLQlGWF9GTE9BVCBmV2lkdGggPSBjckJCb3gucmlnaHQgLSBjckJCb3gubGVmdDsNCi0JRlhfRkxPQVQgZkhlaWdodCA9IGNyQkJveC50b3AgLSBjckJCb3guYm90dG9tOw0KLQ0KLQlDUFdMX1BhdGhEYXRhIFBhdGhBcnJheVtdID0gDQotCXsNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMy8xMC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMTUuMGYpLCBQV0xQVF9NT1ZFVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjcvMTAuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjQvMTUuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC8xMC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqNC8xNS4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzEwLjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC8xNS4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMTAuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzE1LjBmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8xMC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMTUuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCozLzEwLjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8xNS4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzEwLjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCo0LzE1LjBmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMy8xMC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMTUuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCozLzEwLjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCo0LzE1LjBmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMTAuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjQvMTUuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzUuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjQvMTUuMGYpLCBQV0xQVF9NT1ZFVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC81LjBmLCBjckJCb3gudG9wIC0gZkhlaWdodCo0LzE1LjBmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC81LjBmLCBjckJCb3gudG9wIC0gZkhlaWdodCo3LzE1LjBmKSwgUFdMUFRfTU9WRVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvNS4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqNy8xNS4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvNS4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMTAvMTUuMGYpLCBQV0xQVF9NT1ZFVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCozLzEwLjBmLCBjckJCb3gudG9wIC0gZkhlaWdodCoxMC8xNS4wZiksIFBXTFBUX0xJTkVUTykNCi0JfTsNCi0NCi0JaWYodHlwZSA9PSBQV0xQVF9TVFJFQU0pDQotCQlzUGF0aERhdGEgPSBHZXRBcHBTdHJlYW1Gcm9tQXJyYXkoUGF0aEFycmF5LCAxNyk7DQotCWVsc2UNCi0JCUdldFBhdGhEYXRhRnJvbUFycmF5KHBhdGgsIFBhdGhBcnJheSwgMTcpOw0KLX0NCi0NCi12b2lkIENQV0xfVXRpbHM6OkdldEdyYXBoaWNzX1BhcmFncmFwaChDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpDQotew0KLQlGWF9GTE9BVCBmV2lkdGggPSBjckJCb3gucmlnaHQgLSBjckJCb3gubGVmdDsNCi0JRlhfRkxPQVQgZkhlaWdodCA9IGNyQkJveC50b3AgLSBjckJCb3guYm90dG9tOw0KLQ0KLQlDUFdMX1BhdGhEYXRhIFBhdGhBcnJheVtdID0NCi0Jew0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzIuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzE1LjBmKSwgUFdMUFRfTU9WRVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjdmLCBjckJCb3gudG9wIC0gZkhlaWdodC8xNS4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC43ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMTUuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNjM0ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMTUuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNjM0ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMi8xNS4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC41NjZmLCBjckJCb3gudG9wIC0gZkhlaWdodCoyLzE1LjBmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjU2NmYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzE1LjBmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8yLjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8xNS4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvMTUuMGYgLSBmSGVpZ2h0KjAuNGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMmYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzE1LjBmIC0gZkhlaWdodCowLjRmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMmYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzE1LjBmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzIuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzE1LjBmKSwgUFdMUFRfQkVaSUVSVE8pDQotCX07DQotDQotCWlmKHR5cGUgPT0gUFdMUFRfU1RSRUFNKQ0KLQkJc1BhdGhEYXRhID0gR2V0QXBwU3RyZWFtRnJvbUFycmF5KFBhdGhBcnJheSwgMTIpOw0KLQllbHNlDQotCQlHZXRQYXRoRGF0YUZyb21BcnJheShwYXRoLCBQYXRoQXJyYXksIDEyKTsNCi19DQotDQotdm9pZCBDUFdMX1V0aWxzOjpHZXRHcmFwaGljc19SaWdodEFycm93KENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSkNCi17DQotCUZYX0ZMT0FUIGZXaWR0aCA9IGNyQkJveC5yaWdodCAtIGNyQkJveC5sZWZ0Ow0KLQlGWF9GTE9BVCBmSGVpZ2h0ID0gY3JCQm94LnRvcCAtIGNyQkJveC5ib3R0b207DQotDQotCUNQV0xfUGF0aERhdGEgUGF0aEFycmF5W10gPSANCi0Jew0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC8xNS4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvMi4wZiksIFBXTFBUX01PVkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiArIGZXaWR0aC84LjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC81LjBmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8yLjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC81LjBmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMTUuMGYgLSBmV2lkdGgqMC4xNWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzIuMGYgLSBmV2lkdGgvMjUuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzIuMGYgLSBmV2lkdGgvMjUuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzIuMGYgKyBmV2lkdGgvMjUuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC8xNS4wZiAtIGZXaWR0aCowLjE1ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvMi4wZiArIGZXaWR0aC8yNS4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvNS4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiArIGZXaWR0aC84LjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC81LjBmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMTUuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzIuMGYpLCBQV0xQVF9MSU5FVE8pDQotCX07DQotDQotCWlmKHR5cGUgPT0gUFdMUFRfU1RSRUFNKQ0KLQkJc1BhdGhEYXRhID0gR2V0QXBwU3RyZWFtRnJvbUFycmF5KFBhdGhBcnJheSwgMTApOw0KLQllbHNlDQotCQlHZXRQYXRoRGF0YUZyb21BcnJheShwYXRoLCBQYXRoQXJyYXksIDEwKTsNCi19DQotDQotdm9pZCBDUFdMX1V0aWxzOjpHZXRHcmFwaGljc19SaWdodFBvaW50ZXIoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKQ0KLXsNCi0JRlhfRkxPQVQgZldpZHRoID0gY3JCQm94LnJpZ2h0IC0gY3JCQm94LmxlZnQ7DQotCUZYX0ZMT0FUIGZIZWlnaHQgPSBjckJCb3gudG9wIC0gY3JCQm94LmJvdHRvbTsNCi0NCi0JQ1BXTF9QYXRoRGF0YSBQYXRoQXJyYXlbXSA9IA0KLQl7DQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzMwLjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC8yLjBmKSwgUFdMUFRfTU9WRVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8zMC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvNi4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqNC8xNS4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvMi4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMzAuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzYuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC8zMC4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvMi4wZiksIFBXTFBUX0xJTkVUTykNCi0JfTsNCi0NCi0JaWYodHlwZSA9PSBQV0xQVF9TVFJFQU0pDQotCQlzUGF0aERhdGEgPSBHZXRBcHBTdHJlYW1Gcm9tQXJyYXkoUGF0aEFycmF5LCA1KTsNCi0JZWxzZQ0KLQkJR2V0UGF0aERhdGFGcm9tQXJyYXkocGF0aCwgUGF0aEFycmF5LCA1KTsNCi19DQotDQotdm9pZCBDUFdMX1V0aWxzOjpHZXRHcmFwaGljc19TdGFyKENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSkNCi17DQotCUZYX0ZMT0FUIGZMb25nUmFkaXVzID0gKGNyQkJveC50b3AgLSBjckJCb3guYm90dG9tKS8oMSsoRlhfRkxPQVQpY29zKFBXTF9QSS81LjBmKSk7DQotCWZMb25nUmFkaXVzID0gZkxvbmdSYWRpdXMgKiAwLjdmOw0KLQlGWF9GTE9BVCBmU2hvcnRSYWRpdXMgPSBmTG9uZ1JhZGl1cyAqIDAuNTVmOw0KLQlDUERGX1BvaW50IHB0Q2VudGVyID0gQ1BERl9Qb2ludCgoY3JCQm94LmxlZnQgKyBjckJCb3gucmlnaHQpIC8gMi4wZiwoY3JCQm94LnRvcCArIGNyQkJveC5ib3R0b20pIC8gMi4wZik7DQotCQ0KLQlGWF9GTE9BVCBweDFbNV0sIHB5MVs1XTsNCi0JRlhfRkxPQVQgcHgyWzVdLCBweTJbNV07DQotDQotCUZYX0ZMT0FUIGZBbmdlbCA9IFBXTF9QSS8xMC4wZjsNCi0NCi0JZm9yIChGWF9JTlQzMiBpPTA7IGk8NTsgaSsrKQ0KLQl7DQotCQlweDFbaV0gPSBwdENlbnRlci54ICsgZkxvbmdSYWRpdXMgKiAoRlhfRkxPQVQpY29zKGZBbmdlbCk7DQotCQlweTFbaV0gPSBwdENlbnRlci55ICsgZkxvbmdSYWRpdXMgKiAoRlhfRkxPQVQpc2luKGZBbmdlbCk7DQotDQotCQlmQW5nZWwgKz0gUFdMX1BJICogMiAvIDUuMGY7DQotCX0NCi0NCi0JZkFuZ2VsID0gUFdMX1BJLzUuMGYgKyBQV0xfUEkvMTAuMGY7DQotDQotCWZvciAoRlhfSU5UMzIgaj0wOyBqPDU7IGorKykNCi0Jew0KLQkJcHgyW2pdID0gcHRDZW50ZXIueCArIGZTaG9ydFJhZGl1cyAqIChGWF9GTE9BVCljb3MoZkFuZ2VsKTsNCi0JCXB5MltqXSA9IHB0Q2VudGVyLnkgKyBmU2hvcnRSYWRpdXMgKiAoRlhfRkxPQVQpc2luKGZBbmdlbCk7DQotDQotCQlmQW5nZWwgKz0gUFdMX1BJICogMiAvIDUuMGY7DQotCX0NCi0NCi0JQ1BXTF9QYXRoRGF0YSBQYXRoQXJyYXlbMTFdOw0KLQlQYXRoQXJyYXlbMF0gPSBDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQocHgxWzBdLCBweTFbMF0pLCBQV0xQVF9NT1ZFVE8pOw0KLQlQYXRoQXJyYXlbMV0gPSBDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQocHgyWzBdLCBweTJbMF0pLCBQV0xQVF9MSU5FVE8pOw0KLQ0KLQlmb3IoRlhfSU5UMzIgayA9IDA7IGsgPCA0OyBrKyspDQotCXsNCi0JCVBhdGhBcnJheVsoaysxKSoyXSA9IENQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChweDFbaysxXSwgcHkxW2srMV0pLCBQV0xQVF9MSU5FVE8pOw0KLQkJUGF0aEFycmF5WyhrKzEpKjIgKyAxXSA9IENQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChweDJbaysxXSwgcHkyW2srMV0pLCBQV0xQVF9MSU5FVE8pOw0KLQl9DQotDQotCVBhdGhBcnJheVsxMF0gPSBDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQocHgxWzBdLCBweTFbMF0pLCBQV0xQVF9MSU5FVE8pOw0KLQ0KLQlpZih0eXBlID09IFBXTFBUX1NUUkVBTSkNCi0JCXNQYXRoRGF0YSA9IEdldEFwcFN0cmVhbUZyb21BcnJheShQYXRoQXJyYXksIDExKTsNCi0JZWxzZQ0KLQkJR2V0UGF0aERhdGFGcm9tQXJyYXkocGF0aCwgUGF0aEFycmF5LCAxMSk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9VdGlsczo6R2V0R3JhcGhpY3NfVXBBcnJvdyhDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpDQotew0KLQlGWF9GTE9BVCBmV2lkdGggPSBjckJCb3gucmlnaHQgLSBjckJCb3gubGVmdDsNCi0JRlhfRkxPQVQgZkhlaWdodCA9IGNyQkJveC50b3AgLSBjckJCb3guYm90dG9tOw0KLQ0KLQlDUFdMX1BhdGhEYXRhIFBhdGhBcnJheVtdID0gDQotCXsNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8yLjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC8xNS4wZiksIFBXTFBUX01PVkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzEwLjBmLCBjckJCb3gudG9wIC0gZldpZHRoKjMvNS4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC42ZiwgY3JCQm94LnRvcCAtIGZXaWR0aCozLzUuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNmYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzE1LjBmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjRmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8xNS4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC40ZiwgY3JCQm94LnRvcCAtIGZXaWR0aCozLzUuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzEwLCBjckJCb3gudG9wIC0gZldpZHRoKjMvNS4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvMTUuMGYpLCBQV0xQVF9MSU5FVE8pDQotCX07DQotDQotCWlmKHR5cGUgPT0gUFdMUFRfU1RSRUFNKQ0KLQkJc1BhdGhEYXRhID0gR2V0QXBwU3RyZWFtRnJvbUFycmF5KFBhdGhBcnJheSwgOCk7DQotCWVsc2UNCi0JCUdldFBhdGhEYXRhRnJvbUFycmF5KHBhdGgsIFBhdGhBcnJheSwgOCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9VdGlsczo6R2V0R3JhcGhpY3NfVXBMZWZ0QXJyb3coQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKQ0KLXsNCi0JRlhfRkxPQVQgZldpZHRoID0gY3JCQm94LnJpZ2h0IC0gY3JCQm94LmxlZnQ7DQotCUZYX0ZMT0FUIGZIZWlnaHQgPSBjckJCb3gudG9wIC0gY3JCQm94LmJvdHRvbTsNCi0JQ1BXTF9Qb2ludCBsZWZ0dXAoY3JCQm94LmxlZnQsIGNyQkJveC50b3ApOw0KLQlDUFdMX1BvaW50IHJpZ2h0ZG93bihjckJCb3gucmlnaHQsIGNyQkJveC5ib3R0b20pOw0KLQlGWF9GTE9BVCBrID0gLWZIZWlnaHQvZldpZHRoOw0KLQlDUFdMX1BvaW50IHRhaWw7DQotCXRhaWwueCA9IGNyQkJveC5sZWZ0ICsgZldpZHRoKjQvNS4wZjsNCi0JdGFpbC55ID0gayoodGFpbC54IC0gY3JCQm94LnJpZ2h0KSArIHJpZ2h0ZG93bi55Ow0KLQ0KLQlDUFdMX1BhdGhEYXRhIFBhdGhBcnJheVtdID0gDQotCXsNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8yMC4wZiwgayooY3JCQm94LmxlZnQgKyBmV2lkdGgvMjAuMGYgLSByaWdodGRvd24ueCkgKyByaWdodGRvd24ueSksIFBXTFBUX01PVkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoZkhlaWdodCoxNy82MC4wZi9rICsgdGFpbC54ICsgZldpZHRoLzEwLjBmICsgZldpZHRoLzUuMGYsDQotCQkgICAgICAgICAgICAgIC1mV2lkdGgvNS4wZi9rICsgdGFpbC55IC0gZldpZHRoLzEwLjBmL2sgKyBmSGVpZ2h0KjE3LzYwLjBmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChmSGVpZ2h0KjE3LzYwLjBmL2sgKyB0YWlsLnggKyBmV2lkdGgvMTAuMGYsDQotCQkgICAgICAgICAgICAgIHRhaWwueSAtIGZXaWR0aC8xMC4wZi9rICsgZkhlaWdodCoxNy82MC4wZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQodGFpbC54ICsgZldpZHRoLzEwLjBmLCB0YWlsLnkgLSBmV2lkdGgvMTAuMGYvayksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQodGFpbC54IC0gZldpZHRoLzEwLjBmLCB0YWlsLnkgKyBmV2lkdGgvMTAuMGYvayksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoZkhlaWdodCoxNy82MC4wZi9rICsgdGFpbC54IC0gZldpZHRoLzEwLjBmLCB0YWlsLnkgKyBmV2lkdGgvMTAuMGYvayArIGZIZWlnaHQqMTcvNjAuMGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGZIZWlnaHQqMTcvNjAuMGYvayArIHRhaWwueCAtIGZXaWR0aC8xMC4wZiAtIGZXaWR0aC81LjBmLA0KLQkJICAgICAgICAgICAgICBmV2lkdGgvNS4wZi9rICsgdGFpbC55ICsgZldpZHRoLzEwLjBmL2sgKyBmSGVpZ2h0KjE3LzYwLjBmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8yMC4wZiwgayooY3JCQm94LmxlZnQgKyBmV2lkdGgvMjAuMGYgLSByaWdodGRvd24ueCkgKyByaWdodGRvd24ueSksIFBXTFBUX0xJTkVUTykNCi0JfTsNCi0NCi0JaWYodHlwZSA9PSBQV0xQVF9TVFJFQU0pDQotCQlzUGF0aERhdGEgPSBHZXRBcHBTdHJlYW1Gcm9tQXJyYXkoUGF0aEFycmF5LCA4KTsNCi0JZWxzZQ0KLQkJR2V0UGF0aERhdGFGcm9tQXJyYXkocGF0aCwgUGF0aEFycmF5LCA4KTsNCi19DQotDQotdm9pZCBDUFdMX1V0aWxzOjpHZXRHcmFwaGljc19HcmFwaChDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpDQotew0KLQlGWF9GTE9BVCBmV2lkdGggPSBjckJCb3gucmlnaHQgLSBjckJCb3gubGVmdDsNCi0JRlhfRkxPQVQgZkhlaWdodCA9IGNyQkJveC50b3AgLSBjckJCb3guYm90dG9tOw0KLQ0KLQlDUFdMX1BhdGhEYXRhIFBhdGhBcnJheVtdID0gDQotCXsNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjA1ZiwgY3JCQm94LnRvcCAtIGZXaWR0aCowLjE1ZiksIFBXTFBUX01PVkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4yNWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMTVmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjI3NWYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMDhmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjA1ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4wOGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMDVmLCBjckJCb3gudG9wIC0gZldpZHRoKjAuMTVmKSwgUFdMUFRfTElORVRPKSwNCi0NCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjI3NWYsIGNyQkJveC50b3AgLSBmV2lkdGgqMC40NWYpLCBQV0xQVF9NT1ZFVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNDc1ZiwgY3JCQm94LnRvcCAtIGZXaWR0aCowLjQ1ZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC40NzVmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjA4ZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4yNzVmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjA4ZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4yNzVmLCBjckJCb3gudG9wIC0gZldpZHRoKjAuNDVmKSwgUFdMUFRfTElORVRPKSwNCi0NCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjVmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjA1ZiksIFBXTFBUX01PVkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC43ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4wNWYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuN2YsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMDhmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjVmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjA4ZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC41ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4wNWYpLCBQV0xQVF9MSU5FVE8pLA0KLQ0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNzI1ZiwgY3JCQm94LnRvcCAtIGZXaWR0aCowLjM1ZiksIFBXTFBUX01PVkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC45MjVmLCBjckJCb3gudG9wIC0gZldpZHRoKjAuMzVmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjkyNWYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMDhmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjcyNWYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMDhmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjcyNWYsIGNyQkJveC50b3AgLSBmV2lkdGgqMC4zNWYpLCBQV0xQVF9MSU5FVE8pDQotCX07DQotDQotCWlmKHR5cGUgPT0gUFdMUFRfU1RSRUFNKQ0KLQkJc1BhdGhEYXRhID0gR2V0QXBwU3RyZWFtRnJvbUFycmF5KFBhdGhBcnJheSwgMjApOw0KLQllbHNlDQotCQlHZXRQYXRoRGF0YUZyb21BcnJheShwYXRoLCBQYXRoQXJyYXksIDIwKTsNCi19DQotDQotdm9pZCBDUFdMX1V0aWxzOjpHZXRHcmFwaGljc19QYXBlcmNsaXAoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKQ0KLXsNCi0JRlhfRkxPQVQgZldpZHRoID0gY3JCQm94LnJpZ2h0IC0gY3JCQm94LmxlZnQ7DQotCUZYX0ZMT0FUIGZIZWlnaHQgPSBjckJCb3gudG9wIC0gY3JCQm94LmJvdHRvbTsNCi0NCi0JQ1BXTF9QYXRoRGF0YSBQYXRoQXJyYXlbXSA9IA0KLQl7DQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvNjAsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMjVmKSwgUFdMUFRfTU9WRVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC82MCwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4yNWYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzYwLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjI1ZiAtIGZXaWR0aCo1Ny82MC4wZiowLjM1ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMzAsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMjVmIC0gZldpZHRoKjU3LzYwLjBmKjAuMzVmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC8zMCwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4yNWYpLCBQV0xQVF9CRVpJRVJUTyksDQotDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzMwLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjMzZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzMwLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjMzZiArIGZIZWlnaHQvMTUqMC41ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMzAgLSBmV2lkdGgqMC4xMmYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMzNmICsgZkhlaWdodC8xNSowLjVmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC8zMCAtIGZXaWR0aCowLjEyZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4zM2YpLCBQV0xQVF9CRVpJRVJUTyksDQotCQ0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC8zMCAtIGZXaWR0aCowLjEyZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4yZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzMwIC0gZldpZHRoKjAuMTJmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjJmIC0gKGZXaWR0aCo1Ny82MC4wZiAtIGZXaWR0aCowLjI0ZikqMC4yNWYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvNjAgKyBmV2lkdGgqMC4xMmYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMmYgLSAoZldpZHRoKjU3LzYwLjBmIC0gZldpZHRoKjAuMjRmKSowLjI1ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC82MCArIGZXaWR0aCowLjEyZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4yZiksIFBXTFBUX0JFWklFUlRPKSwNCi0NCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC82MCArIGZXaWR0aCowLjEyZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4yZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvNjAgKyBmV2lkdGgqMC4xMmYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMmYgKyAoZldpZHRoKjExLzEyLjBmIC0gZldpZHRoKjAuMzZmKSowLjI1ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMTUgLSBmV2lkdGgqMC4yNGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMmYgKyAoZldpZHRoKjExLzEyLjBmIC0gZldpZHRoKjAuMzZmKSowLjI1ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMTUgLSBmV2lkdGgqMC4yNGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMmYpLCBQV0xQVF9CRVpJRVJUTyksDQotDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzE1IC0gZldpZHRoKjAuMjRmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjI1ZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzE1IC0gZldpZHRoKjAuMjRmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjI1ZiAtIChmV2lkdGgqMTQvMTUuMGYgLSBmV2lkdGgqMC41M2YpKjAuMjVmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMjlmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjI1ZiAtIChmV2lkdGgqMTQvMTUuMGYgLSBmV2lkdGgqMC41M2YpKjAuMjVmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMjlmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjI1ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0NCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjI5ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4zM2YpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMjlmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjMzZiArIGZXaWR0aCowLjEyZiowLjM1ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjE3ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4zM2YgKyBmV2lkdGgqMC4xMmYqMC4zNWYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4xN2YsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMzNmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQ0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMTdmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjNmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjE3ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4zZiAtIGZXaWR0aCooMTQvMTUuMGYgLSAwLjI5ZikqMC4zNWYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzE1IC0gZldpZHRoKjAuMTJmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjNmIC0gZldpZHRoKigxNC8xNS4wZiAtIDAuMjlmKSowLjM1ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMTUgLSBmV2lkdGgqMC4xMmYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuM2YpLCBQV0xQVF9CRVpJRVJUTyksDQotDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzE1IC0gZldpZHRoKjAuMTJmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjI1ZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzE1IC0gZldpZHRoKjAuMTJmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjI1ZiArIGZXaWR0aCowLjM1ZiooMTEvMTIuMGYgLSAwLjEyZikpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvNjAsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMjVmICsgZldpZHRoKjAuMzVmKigxMS8xMi4wZiAtIDAuMTJmKSksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC82MCwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4yNWYpLCBQV0xQVF9CRVpJRVJUTykNCi0JfTsNCi0NCi0JaWYodHlwZSA9PSBQV0xQVF9TVFJFQU0pDQotCQlzUGF0aERhdGEgPSBHZXRBcHBTdHJlYW1Gcm9tQXJyYXkoUGF0aEFycmF5LCAzMyk7DQotCWVsc2UNCi0JCUdldFBhdGhEYXRhRnJvbUFycmF5KHBhdGgsIFBhdGhBcnJheSwgMzMpOwkNCi19DQotDQotdm9pZCBDUFdMX1V0aWxzOjpHZXRHcmFwaGljc19BdHRhY2htZW50KENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSkNCi17DQotCUZYX0ZMT0FUIGZXaWR0aCA9IGNyQkJveC5yaWdodCAtIGNyQkJveC5sZWZ0Ow0KLQlGWF9GTE9BVCBmSGVpZ2h0ID0gY3JCQm94LnRvcCAtIGNyQkJveC5ib3R0b207DQotDQotCUNQV0xfUGF0aERhdGEgUGF0aEFycmF5W10gPSANCi0Jew0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMjVmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjFmKSwgUFdMUFRfTU9WRVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjRmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjIzZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC40ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC41ZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC40ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC41ZiArIGZXaWR0aCowLjA0ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjZmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjVmICsgZldpZHRoKjAuMDRmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNmYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuNWYpLCBQV0xQVF9CRVpJRVJUTyksDQotDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC42ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4yM2YpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjI1ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4xZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4yNWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMWYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMjNmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjZmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjIzZiksIFBXTFBUX0xJTkVUTyksDQotDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC40ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC41ZiksIFBXTFBUX01PVkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC40ZiAtIGZXaWR0aCowLjI1ZiowLjRmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjVmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMTVmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjY1ZiArIGZIZWlnaHQqMC4xNWYqMC40ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjE1ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC42NWYpLCBQV0xQVF9CRVpJRVJUTyksDQotDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuMTVmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjY1ZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuMTVmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjY1ZiArIGZIZWlnaHQqMC4xNWYqMC40ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjZmICsgZldpZHRoKjAuMjVmKjAuNGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuNWYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC42ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC41ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0NCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjZmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjVmICsgZldpZHRoKjAuMDRmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuNWYgKyBmV2lkdGgqMC4wNGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC40ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC41ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0NCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjVmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjY1ZiksIFBXTFBUX01PVkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC41ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4xZiksIFBXTFBUX0xJTkVUTykNCi0JfTsNCi0NCi0JaWYodHlwZSA9PSBQV0xQVF9TVFJFQU0pDQotCQlzUGF0aERhdGEgPSBHZXRBcHBTdHJlYW1Gcm9tQXJyYXkoUGF0aEFycmF5LCAyNCk7DQotCWVsc2UNCi0JCUdldFBhdGhEYXRhRnJvbUFycmF5KHBhdGgsIFBhdGhBcnJheSwgMjQpOw0KLX0NCi0NCi12b2lkIENQV0xfVXRpbHM6OkdldEdyYXBoaWNzX1RhZyhDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpDQotew0KLQlGWF9GTE9BVCBmV2lkdGggPSBjckJCb3gucmlnaHQgLSBjckJCb3gubGVmdDsNCi0JRlhfRkxPQVQgZkhlaWdodCA9IGNyQkJveC50b3AgLSBjckJCb3guYm90dG9tOw0KLQ0KLQlDUFdMX1BhdGhEYXRhIFBhdGhBcnJheVtdID0gDQotCXsNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjRmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjFmKSwgUFdMUFRfTU9WRVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjFmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjVmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjNmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjFmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC4xZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4xZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuMWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMWYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMWYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuM2YpLCBQV0xQVF9NT1ZFVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjJmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjNmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjRmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjVmKSwgUFdMUFRfTU9WRVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC4yZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC41ZiksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC40ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC43ZiksIFBXTFBUX01PVkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuMmYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuN2YpLCBQV0xQVF9MSU5FVE8pDQotCX07DQotDQotCWlmKHR5cGUgPT0gUFdMUFRfU1RSRUFNKQ0KLQkJc1BhdGhEYXRhID0gR2V0QXBwU3RyZWFtRnJvbUFycmF5KFBhdGhBcnJheSwgMTIpOw0KLQllbHNlDQotCQlHZXRQYXRoRGF0YUZyb21BcnJheShwYXRoLCBQYXRoQXJyYXksIDEyKTsNCi19DQotDQotdm9pZCBDUFdMX1V0aWxzOjpHZXRHcmFwaGljc19Gb3hpdChDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpDQotew0KLQlGWF9GTE9BVCBmT3V0V2lkdGggPSBjckJCb3gucmlnaHQgLSBjckJCb3gubGVmdDsNCi0JRlhfRkxPQVQgZk91dEhlaWdodCA9IGNyQkJveC50b3AgLSBjckJCb3guYm90dG9tOw0KLQ0KLQlDUERGX1JlY3QgY3JJbkJveCA9IGNyQkJveDsNCi0JY3JJbkJveC5sZWZ0ID0gY3JCQm94LmxlZnQgKyBmT3V0V2lkdGgqMC4wOGY7DQotCWNySW5Cb3gucmlnaHQgPSBjckJCb3gucmlnaHQgLSBmT3V0V2lkdGgqMC4wOGY7DQotCWNySW5Cb3gudG9wID0gY3JCQm94LnRvcCAtIGZPdXRIZWlnaHQqMC4wOGY7DQotCWNySW5Cb3guYm90dG9tID0gY3JCQm94LmJvdHRvbSArIGZPdXRIZWlnaHQqMC4wOGY7DQotDQotCUZYX0ZMT0FUIGZXaWR0aCA9IGNySW5Cb3gucmlnaHQgLSBjckluQm94LmxlZnQ7DQotCUZYX0ZMT0FUIGZIZWlnaHQgPSBjckluQm94LnRvcCAtIGNySW5Cb3guYm90dG9tOw0KLQ0KLQlDUFdMX1BhdGhEYXRhIFBhdGhBcnJheVtdID0gDQotCXsNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckluQm94LmxlZnQsIGNySW5Cb3gudG9wKSwgUFdMUFRfTU9WRVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckluQm94LmxlZnQgKyBmV2lkdGgqMC40NWYsIGNySW5Cb3gudG9wKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckluQm94LmxlZnQgKyBmV2lkdGgqMC40NWYsIGNySW5Cb3gudG9wIC0gUFdMX0JFWklFUiAqIGZIZWlnaHQgKiAwLjRmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNySW5Cb3gubGVmdCArIGZXaWR0aCowLjQ1ZiAgLSBQV0xfQkVaSUVSICogZldpZHRoICogMC40NWYsIGNySW5Cb3gudG9wIC0gZkhlaWdodCowLjRmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNySW5Cb3gubGVmdCwgY3JJbkJveC50b3AgLSBmSGVpZ2h0KjAuNGYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JJbkJveC5sZWZ0LCBjckluQm94LnRvcCksIFBXTFBUX0xJTkVUTyksDQotDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JJbkJveC5sZWZ0ICsgZldpZHRoKjAuNjBmLCBjckluQm94LnRvcCksIFBXTFBUX01PVkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JJbkJveC5sZWZ0ICsgZldpZHRoKjAuNzVmLCBjckluQm94LnRvcCksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JJbkJveC5sZWZ0ICsgZldpZHRoKjAuNzVmLCBjckluQm94LnRvcCAtIFBXTF9CRVpJRVIgKiBmSGVpZ2h0ICogMC43ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckluQm94LmxlZnQgKyBmV2lkdGgqMC43NWYgIC0gUFdMX0JFWklFUiAqIGZXaWR0aCAqIDAuNzVmLCBjckluQm94LnRvcCAtIGZIZWlnaHQqMC43ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckluQm94LmxlZnQsIGNySW5Cb3gudG9wIC0gZkhlaWdodCowLjdmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNySW5Cb3gubGVmdCwgY3JJbkJveC50b3AgLSBmSGVpZ2h0KjAuNTVmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckluQm94LmxlZnQgKyBQV0xfQkVaSUVSICogZldpZHRoKjAuNjBmLCBjckluQm94LnRvcCAtIGZIZWlnaHQqMC41NWYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JJbkJveC5sZWZ0ICsgZldpZHRoICogMC42MGYsIGNySW5Cb3gudG9wIC0gUFdMX0JFWklFUiAqIGZIZWlnaHQgKiAwLjU1ZiksIFBXTFBUX0JFWklFUlRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckluQm94LmxlZnQgKyBmV2lkdGggKiAwLjYwZiwgY3JJbkJveC50b3ApLCBQV0xQVF9CRVpJRVJUTyksDQotDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JJbkJveC5sZWZ0ICsgZldpZHRoKjAuOTBmLCBjckluQm94LnRvcCksIFBXTFBUX01PVkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JJbkJveC5sZWZ0ICsgZldpZHRoKjAuOTBmLCBjckluQm94LnRvcCAtIFBXTF9CRVpJRVIgKiBmSGVpZ2h0ICogMC44NWYpLCBQV0xQVF9CRVpJRVJUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JJbkJveC5sZWZ0ICsgZldpZHRoKjAuOTBmICAtIFBXTF9CRVpJRVIgKiBmV2lkdGggKiAwLjkwZiwgY3JJbkJveC50b3AgLSBmSGVpZ2h0KjAuODVmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNySW5Cb3gubGVmdCwgY3JJbkJveC50b3AgLSBmSGVpZ2h0KjAuODVmKSwgUFdMUFRfQkVaSUVSVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNySW5Cb3gubGVmdCwgY3JJbkJveC5ib3R0b20pLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNySW5Cb3gucmlnaHQsIGNySW5Cb3guYm90dG9tKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckluQm94LnJpZ2h0LCBjckluQm94LnRvcCksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JJbkJveC5sZWZ0ICsgZldpZHRoKjAuOTBmLCBjckluQm94LnRvcCksIFBXTFBUX0xJTkVUTyksDQotDQotCQkvKg0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0LCBjckJCb3gudG9wKSwgUFdMUFRfTU9WRVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQsIGNyQkJveC50b3ApLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCwgY3JCQm94LmJvdHRvbSksIFBXTFBUX0xJTkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQsIGNyQkJveC5ib3R0b20pLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0LCBjckJCb3gudG9wKSwgUFdMUFRfTElORVRPKSwNCi0NCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCtmT3V0V2lkdGgqMC4wNGYsIGNyQkJveC50b3AtZk91dEhlaWdodCowLjA0ZiksIFBXTFBUX01PVkVUTyksDQotCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0LWZPdXRXaWR0aCowLjA0ZiwgY3JCQm94LnRvcC1mT3V0SGVpZ2h0KjAuMDRmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQtZk91dFdpZHRoKjAuMDRmLCBjckJCb3guYm90dG9tK2ZPdXRIZWlnaHQqMC4wNGYpLCBQV0xQVF9MSU5FVE8pLA0KLQkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0K2ZPdXRXaWR0aCowLjA0ZiwgY3JCQm94LmJvdHRvbStmT3V0SGVpZ2h0KjAuMDRmKSwgUFdMUFRfTElORVRPKSwNCi0JCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCtmT3V0V2lkdGgqMC4wNGYsIGNyQkJveC50b3AtZk91dEhlaWdodCowLjA0ZiksIFBXTFBUX0xJTkVUTyksDQotCQkqLw0KLQl9Ow0KLQ0KLQlpZih0eXBlID09IFBXTFBUX1NUUkVBTSkNCi0JCXNQYXRoRGF0YSA9IEdldEFwcFN0cmVhbUZyb21BcnJheShQYXRoQXJyYXksIDIzKTsNCi0JZWxzZQ0KLQkJR2V0UGF0aERhdGFGcm9tQXJyYXkocGF0aCwgUGF0aEFycmF5LCAyMyk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9Db2xvcjo6Q29udmVydENvbG9yVHlwZShGWF9JTlQzMiBuQ29sb3JUeXBlKQ0KLXsNCi0Jc3dpdGNoICh0aGlzLT5uQ29sb3JUeXBlKQ0KLQl7DQotCWNhc2UgQ09MT1JUWVBFX1RSQU5TUEFSRU5UOg0KLQkJYnJlYWs7DQotCWNhc2UgQ09MT1JUWVBFX0dSQVk6DQotCQlzd2l0Y2ggKG5Db2xvclR5cGUpDQotCQl7DQotCQljYXNlIENPTE9SVFlQRV9SR0I6DQotCQkJQ1BXTF9VdGlsczo6Q29udmVydEdSQVkyUkdCKHRoaXMtPmZDb2xvcjEsIHRoaXMtPmZDb2xvcjEsIHRoaXMtPmZDb2xvcjIsIHRoaXMtPmZDb2xvcjMpOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSBDT0xPUlRZUEVfQ01ZSzoNCi0JCQlDUFdMX1V0aWxzOjpDb252ZXJ0R1JBWTJDTVlLKHRoaXMtPmZDb2xvcjEsIHRoaXMtPmZDb2xvcjEsIHRoaXMtPmZDb2xvcjIsIHRoaXMtPmZDb2xvcjMsIHRoaXMtPmZDb2xvcjQpOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgQ09MT1JUWVBFX1JHQjoNCi0JCXN3aXRjaCAobkNvbG9yVHlwZSkNCi0JCXsNCi0JCWNhc2UgQ09MT1JUWVBFX0dSQVk6DQotCQkJQ1BXTF9VdGlsczo6Q29udmVydFJHQjJHUkFZKHRoaXMtPmZDb2xvcjEsIHRoaXMtPmZDb2xvcjIsIHRoaXMtPmZDb2xvcjMsIHRoaXMtPmZDb2xvcjEpOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSBDT0xPUlRZUEVfQ01ZSzoNCi0JCQlDUFdMX1V0aWxzOjpDb252ZXJ0UkdCMkNNWUsodGhpcy0+ZkNvbG9yMSwgdGhpcy0+ZkNvbG9yMiwgdGhpcy0+ZkNvbG9yMywgdGhpcy0+ZkNvbG9yMSwgdGhpcy0+ZkNvbG9yMiwgdGhpcy0+ZkNvbG9yMywgdGhpcy0+ZkNvbG9yNCk7DQotCQkJYnJlYWs7DQotCQl9DQotCQlicmVhazsNCi0JY2FzZSBDT0xPUlRZUEVfQ01ZSzoNCi0JCXN3aXRjaCAobkNvbG9yVHlwZSkNCi0JCXsNCi0JCWNhc2UgQ09MT1JUWVBFX0dSQVk6DQotCQkJQ1BXTF9VdGlsczo6Q29udmVydENNWUsyR1JBWSh0aGlzLT5mQ29sb3IxLCB0aGlzLT5mQ29sb3IyLCB0aGlzLT5mQ29sb3IzLCB0aGlzLT5mQ29sb3I0LCB0aGlzLT5mQ29sb3IxKTsNCi0JCQlicmVhazsNCi0JCWNhc2UgQ09MT1JUWVBFX1JHQjoNCi0JCQlDUFdMX1V0aWxzOjpDb252ZXJ0Q01ZSzJSR0IodGhpcy0+ZkNvbG9yMSwgdGhpcy0+ZkNvbG9yMiwgdGhpcy0+ZkNvbG9yMywgdGhpcy0+ZkNvbG9yNCwgdGhpcy0+ZkNvbG9yMSwgdGhpcy0+ZkNvbG9yMiwgdGhpcy0+ZkNvbG9yMyk7DQotCQkJYnJlYWs7DQotCQl9DQotCQlicmVhazsNCi0JfQ0KLQl0aGlzLT5uQ29sb3JUeXBlID0gbkNvbG9yVHlwZTsNCi19DQotDQotDQorLy8gQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorIAorLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20KKworI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BERldpbmRvdy5oIgorI2luY2x1ZGUgIi4uLy4uL2luY2x1ZGUvcGRmd2luZG93L1BXTF9XbmQuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfVXRpbHMuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfSWNvbi5oIgorCisjZGVmaW5lIElzRmxvYXRaZXJvKGYpCQkJCQkJKChmKSA8IDAuMDAwMSAmJiAoZikgPiAtMC4wMDAxKQorI2RlZmluZSBJc0Zsb2F0QmlnZ2VyKGZhLGZiKQkJCQkoKGZhKSA+IChmYikgJiYgIUlzRmxvYXRaZXJvKChmYSkgLSAoZmIpKSkKKyNkZWZpbmUgSXNGbG9hdFNtYWxsZXIoZmEsZmIpCQkJCSgoZmEpIDwgKGZiKSAmJiAhSXNGbG9hdFplcm8oKGZhKSAtIChmYikpKQorI2RlZmluZSBJc0Zsb2F0RXF1YWwoZmEsZmIpCQkJCQlJc0Zsb2F0WmVybygoZmEpLShmYikpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9VdGlscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9VdGlsczo6R2V0QXBwU3RyZWFtRnJvbUFycmF5KGNvbnN0IENQV0xfUGF0aERhdGEqIHBQYXRoRGF0YSwgRlhfSU5UMzIgbkNvdW50KQoreworCUNGWF9CeXRlVGV4dEJ1ZiBjc0FQOworCisJZm9yIChGWF9JTlQzMiBpPTA7IGk8bkNvdW50OyBpKyspCisJeworCQlzd2l0Y2ggKHBQYXRoRGF0YVtpXS50eXBlKQorCQl7CisJCWNhc2UgUFdMUFRfTU9WRVRPOgorCQkJY3NBUCA8PCBwUGF0aERhdGFbaV0ucG9pbnQueCA8PCAiICIgPDwgcFBhdGhEYXRhW2ldLnBvaW50LnkgPDwgIiBtXG4iOworCQkJYnJlYWs7CisJCWNhc2UgUFdMUFRfTElORVRPOgorCQkJY3NBUCA8PCBwUGF0aERhdGFbaV0ucG9pbnQueCA8PCAiICIgPDwgcFBhdGhEYXRhW2ldLnBvaW50LnkgPDwgIiBsXG4iOworCQkJYnJlYWs7CisJCWNhc2UgUFdMUFRfQkVaSUVSVE86CisJCQljc0FQIDw8IHBQYXRoRGF0YVtpXS5wb2ludC54IDw8ICIgIiA8PCBwUGF0aERhdGFbaV0ucG9pbnQueSA8PCAiICIKKwkJCQkgPDwgcFBhdGhEYXRhW2krMV0ucG9pbnQueCA8PCAiICIgPDwgcFBhdGhEYXRhW2krMV0ucG9pbnQueSA8PCAiICIKKwkJCQkgPDwgcFBhdGhEYXRhW2krMl0ucG9pbnQueCA8PCAiICIgPDwgcFBhdGhEYXRhW2krMl0ucG9pbnQueSA8PCAiIGNcbiI7CisKKwkJCWkgKz0gMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gY3NBUC5HZXRCeXRlU3RyaW5nKCk7Cit9CisKK3ZvaWQgQ1BXTF9VdGlsczo6R2V0UGF0aERhdGFGcm9tQXJyYXkoQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUFdMX1BhdGhEYXRhKiBwUGF0aERhdGEsIEZYX0lOVDMyIG5Db3VudCkKK3sKKwlwYXRoLlNldFBvaW50Q291bnQobkNvdW50KTsKKworCWZvciAoRlhfSU5UMzIgaT0wOyBpPG5Db3VudDsgaSsrKQorCXsKKwkJc3dpdGNoIChwUGF0aERhdGFbaV0udHlwZSkKKwkJeworCQljYXNlIFBXTFBUX01PVkVUTzoKKwkJCXBhdGguU2V0UG9pbnQoaSwgcFBhdGhEYXRhW2ldLnBvaW50LngsIHBQYXRoRGF0YVtpXS5wb2ludC55LCBGWFBUX01PVkVUTyk7CisJCQlicmVhazsKKwkJY2FzZSBQV0xQVF9MSU5FVE86CisJCQlwYXRoLlNldFBvaW50KGksIHBQYXRoRGF0YVtpXS5wb2ludC54LCBwUGF0aERhdGFbaV0ucG9pbnQueSwgRlhQVF9MSU5FVE8pOworCQkJYnJlYWs7CisJCWNhc2UgUFdMUFRfQkVaSUVSVE86CisJCQlwYXRoLlNldFBvaW50KGksIHBQYXRoRGF0YVtpXS5wb2ludC54LCBwUGF0aERhdGFbaV0ucG9pbnQueSwgRlhQVF9CRVpJRVJUTyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisKK0NQREZfUmVjdCBDUFdMX1V0aWxzOjpNYXhSZWN0KGNvbnN0IENQREZfUmVjdCAmIHJlY3QxLGNvbnN0IENQREZfUmVjdCAmIHJlY3QyKQoreworCUNQREZfUmVjdCByY1JldDsKKworCXJjUmV0LmxlZnQgPSBQV0xfTUlOKHJlY3QxLmxlZnQscmVjdDIubGVmdCk7CisJcmNSZXQuYm90dG9tID0gUFdMX01JTihyZWN0MS5ib3R0b20scmVjdDIuYm90dG9tKTsKKwlyY1JldC5yaWdodCA9IFBXTF9NQVgocmVjdDEucmlnaHQscmVjdDIucmlnaHQpOworCXJjUmV0LnRvcCA9IFBXTF9NQVgocmVjdDEudG9wLHJlY3QyLnRvcCk7CisKKwlyZXR1cm4gcmNSZXQ7Cit9CisKK0NQREZfUmVjdCBDUFdMX1V0aWxzOjpPZmZzZXRSZWN0KGNvbnN0IENQREZfUmVjdCAmIHJlY3QsRlhfRkxPQVQgeCxGWF9GTE9BVCB5KQoreworCXJldHVybiBDUERGX1JlY3QocmVjdC5sZWZ0ICsgeCxyZWN0LmJvdHRvbSArIHksCisJCXJlY3QucmlnaHQgKyB4LHJlY3QudG9wICsgeSk7Cit9CisKK0ZYX0JPT0wgQ1BXTF9VdGlsczo6Q29udGFpbnNSZWN0KGNvbnN0IENQREZfUmVjdCYgcmNQYXJlbnQsIGNvbnN0IENQREZfUmVjdCYgcmNDaGlsZCkKK3sKKwlyZXR1cm4gcmNDaGlsZC5sZWZ0ID49IHJjUGFyZW50LmxlZnQgJiYgcmNDaGlsZC5ib3R0b20gPj0gcmNQYXJlbnQuYm90dG9tICYmCisJCQlyY0NoaWxkLnJpZ2h0IDw9IHJjUGFyZW50LnJpZ2h0ICYmIHJjQ2hpbGQudG9wIDw9IHJjUGFyZW50LnRvcDsKK30KKworRlhfQk9PTCBDUFdMX1V0aWxzOjpJbnRlcnNlY3RSZWN0KGNvbnN0IENQREZfUmVjdCYgcmVjdDEsIGNvbnN0IENQREZfUmVjdCYgcmVjdDIpCit7CisJRlhfRkxPQVQgbGVmdCA9IHJlY3QxLmxlZnQgPiByZWN0Mi5sZWZ0ID8gcmVjdDEubGVmdCA6IHJlY3QyLmxlZnQ7CisJRlhfRkxPQVQgcmlnaHQgPSByZWN0MS5yaWdodCA8IHJlY3QyLnJpZ2h0ID8gcmVjdDEucmlnaHQgOiByZWN0Mi5yaWdodDsKKwlGWF9GTE9BVCBib3R0b20gPSByZWN0MS5ib3R0b20gPiByZWN0Mi5ib3R0b20gPyByZWN0MS5ib3R0b20gOiByZWN0Mi5ib3R0b207CisJRlhfRkxPQVQgdG9wID0gcmVjdDEudG9wIDwgcmVjdDIudG9wID8gcmVjdDEudG9wIDogcmVjdDIudG9wOworCisJcmV0dXJuIGxlZnQgPCByaWdodCAmJiBib3R0b20gPCB0b3A7Cit9CisKK0NQREZfUG9pbnQgQ1BXTF9VdGlsczo6T2Zmc2V0UG9pbnQoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQsRlhfRkxPQVQgeCxGWF9GTE9BVCB5KQoreworCXJldHVybiBDUERGX1BvaW50KHBvaW50LnggKyB4LHBvaW50LnkgKyB5KTsKK30KKworQ1BWVF9Xb3JkUmFuZ2UgQ1BXTF9VdGlsczo6T3ZlcmxhcFdvcmRSYW5nZShjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHdyMSwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UgJiB3cjIpCit7CisJQ1BWVF9Xb3JkUmFuZ2Ugd3JSZXQ7CisKKwlpZiAod3IyLkVuZFBvcy5Xb3JkQ21wKHdyMS5CZWdpblBvcykgPCAwIHx8IHdyMi5CZWdpblBvcy5Xb3JkQ21wKHdyMS5FbmRQb3MpID4gMCkgcmV0dXJuIHdyUmV0OworCWlmICh3cjEuRW5kUG9zLldvcmRDbXAod3IyLkJlZ2luUG9zKSA8IDAgfHwgd3IxLkJlZ2luUG9zLldvcmRDbXAod3IyLkVuZFBvcykgPiAwKSByZXR1cm4gd3JSZXQ7CisKKwlpZiAod3IxLkJlZ2luUG9zLldvcmRDbXAod3IyLkJlZ2luUG9zKSA8IDApCisJeworCQl3clJldC5CZWdpblBvcyA9IHdyMi5CZWdpblBvczsKKwl9CisJZWxzZQorCXsKKwkJd3JSZXQuQmVnaW5Qb3MgPSB3cjEuQmVnaW5Qb3M7CisJfQorCisJaWYgKHdyMS5FbmRQb3MuV29yZENtcCh3cjIuRW5kUG9zKSA8IDApCisJeworCQl3clJldC5FbmRQb3MgPSB3cjEuRW5kUG9zOworCX0KKwllbHNlCisJeworCQl3clJldC5FbmRQb3MgPSB3cjIuRW5kUG9zOworCX0KKworCXJldHVybiB3clJldDsKK30KKworQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9VdGlsczo6R2V0QVBfQ2hlY2soY29uc3QgQ1BERl9SZWN0ICYgY3JCQm94KQoreworCUNGWF9CeXRlVGV4dEJ1ZiBjc0FQOworCisJRlhfRkxPQVQgZldpZHRoID0gY3JCQm94LnJpZ2h0IC0gY3JCQm94LmxlZnQ7CisJRlhfRkxPQVQgZkhlaWdodCA9IGNyQkJveC50b3AgLSBjckJCb3guYm90dG9tOworCisJY29uc3QgRlhfSU5UMzIgbnVtID0gODsKKworCUNQV0xfUG9pbnQgcHRzW251bSozXSA9IAorCXsKKwkJLy8xCisJCUNQV0xfUG9pbnQoMC4yOGYsIDAuNTJmKSwgCisJCUNQV0xfUG9pbnQoMC4yN2YsIDAuNDhmKSwKKwkJQ1BXTF9Qb2ludCgwLjI5ZiwgMC40MGYpLAorCisJCS8vMgorCQlDUFdMX1BvaW50KDAuMzBmLCAwLjMzZiksIAorCQlDUFdMX1BvaW50KDAuMzFmLCAwLjI5ZiksCisJCUNQV0xfUG9pbnQoMC4zMWYsIDAuMjhmKSwKKworCQkvLzMKKwkJQ1BXTF9Qb2ludCgwLjM5ZiwgMC4yOGYpLCAKKwkJQ1BXTF9Qb2ludCgwLjQ5ZiwgMC4yOWYpLAorCQlDUFdMX1BvaW50KDAuNzdmLCAwLjY3ZiksCisKKwkJLy80CisJCUNQV0xfUG9pbnQoMC43NmYsIDAuNjhmKSwgCisJCUNQV0xfUG9pbnQoMC43OGYsIDAuNjlmKSwKKwkJQ1BXTF9Qb2ludCgwLjc2ZiwgMC43NWYpLAorCisJCS8vNQorCQlDUFdMX1BvaW50KDAuNzZmLCAwLjc1ZiksIAorCQlDUFdMX1BvaW50KDAuNzNmLCAwLjgwZiksCisJCUNQV0xfUG9pbnQoMC42OGYsIDAuNzVmKSwKKworCQkvLzYKKwkJQ1BXTF9Qb2ludCgwLjY4ZiwgMC43NGYpLCAKKwkJQ1BXTF9Qb2ludCgwLjY4ZiwgMC43NGYpLAorCQlDUFdMX1BvaW50KDAuNDRmLCAwLjQ3ZiksCisKKwkJLy83CisJCUNQV0xfUG9pbnQoMC40M2YsIDAuNDdmKSwgCisJCUNQV0xfUG9pbnQoMC40MGYsIDAuNDdmKSwKKwkJQ1BXTF9Qb2ludCgwLjQxZiwgMC41OGYpLAorCisJCS8vOAorCQlDUFdMX1BvaW50KDAuNDBmLCAwLjYwZiksIAorCQlDUFdMX1BvaW50KDAuMjhmLCAwLjY2ZiksCisJCUNQV0xfUG9pbnQoMC4zMGYsIDAuNTZmKQorCX07CisKKwlmb3IgKEZYX0lOVDMyIGo9MDsgajxudW0qMzsgaisrKQorCXsKKwkJcHRzW2pdLnggKj0gZldpZHRoOworCQlwdHNbal0ueCArPSBjckJCb3gubGVmdDsKKworCQlwdHNbal0ueSAqPSBmSGVpZ2h0OworCQlwdHNbal0ueSArPSBjckJCb3guYm90dG9tOworCX0KKworCWNzQVAgPDwgcHRzWzBdLnggPDwgIiAiIDw8IHB0c1swXS55IDw8ICIgbVxuIjsKKworCWZvciAoRlhfSU5UMzIgaT0wOyBpPG51bTsgaSsrKQorCXsKKwkJRlhfSU5UMzIgbkN1ciA9IGkqMzsKKwkJRlhfSU5UMzIgbjEgPSBpKjMgKyAxOworCQlGWF9JTlQzMiBuMiA9IGkqMyArIDI7CisJCUZYX0lOVDMyIG5OZXh0ID0gKGkgPCBudW0tMSA/IChpKzEpKjMgOiAwKTsKKworCQlGWF9GTE9BVCBweDEgPSBwdHNbbjFdLnggLSBwdHNbbkN1cl0ueDsKKwkJRlhfRkxPQVQgcHkxID0gcHRzW24xXS55IC0gcHRzW25DdXJdLnk7CisJCUZYX0ZMT0FUIHB4MiA9IHB0c1tuMl0ueCAtIHB0c1tuTmV4dF0ueDsKKwkJRlhfRkxPQVQgcHkyID0gcHRzW24yXS55IC0gcHRzW25OZXh0XS55OworCisJCWNzQVAgPDwgcHRzW25DdXJdLnggKyBweDEgKiBQV0xfQkVaSUVSIDw8ICIgIiA8PCBwdHNbbkN1cl0ueSArIHB5MSAqIFBXTF9CRVpJRVIgPDwgIiAiIAorCQkJPDwgcHRzW25OZXh0XS54ICsgcHgyICogUFdMX0JFWklFUiA8PCAiICIgPDwgcHRzW25OZXh0XS55ICsgcHkyICogUFdMX0JFWklFUiA8PCAiICIKKwkJCTw8IHB0c1tuTmV4dF0ueCA8PCAiICIgPDwgcHRzW25OZXh0XS55IDw8ICIgY1xuIjsKKwl9CisKKwlyZXR1cm4gY3NBUC5HZXRCeXRlU3RyaW5nKCk7Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldEFQX0NpcmNsZShjb25zdCBDUERGX1JlY3QgJiBjckJCb3gpCit7CisJQ0ZYX0J5dGVUZXh0QnVmIGNzQVA7CisKKwlGWF9GTE9BVCBmV2lkdGggPSBjckJCb3gucmlnaHQgLSBjckJCb3gubGVmdDsKKwlGWF9GTE9BVCBmSGVpZ2h0ID0gY3JCQm94LnRvcCAtIGNyQkJveC5ib3R0b207CisKKwlDUERGX1BvaW50IHB0MShjckJCb3gubGVmdCxjckJCb3guYm90dG9tICsgZkhlaWdodCAvIDIpOworCUNQREZfUG9pbnQgcHQyKGNyQkJveC5sZWZ0ICsgZldpZHRoIC8gMixjckJCb3gudG9wKTsKKwlDUERGX1BvaW50IHB0MyhjckJCb3gucmlnaHQsY3JCQm94LmJvdHRvbSArIGZIZWlnaHQgLyAyKTsKKwlDUERGX1BvaW50IHB0NChjckJCb3gubGVmdCArIGZXaWR0aCAvIDIsY3JCQm94LmJvdHRvbSk7CisKKwljc0FQIDw8IHB0MS54IDw8ICIgIiA8PCBwdDEueSA8PCAiIG1cbiI7CisKKwlGWF9GTE9BVCBweCA9IHB0Mi54IC0gcHQxLng7CisJRlhfRkxPQVQgcHkgPSBwdDIueSAtIHB0MS55OworCisJY3NBUCA8PCBwdDEueCA8PCAiICIgPDwgcHQxLnkgKyBweSAqIFBXTF9CRVpJRVIgPDwgIiAiIAorCQk8PCBwdDIueCAtIHB4ICogUFdMX0JFWklFUiA8PCAiICIgPDwgcHQyLnkgPDwgIiAiCisJCTw8IHB0Mi54IDw8ICIgIiA8PCBwdDIueSA8PCAiIGNcbiI7CisKKwlweCA9IHB0My54IC0gcHQyLng7CisJcHkgPSBwdDIueSAtIHB0My55OworCisJY3NBUCA8PCBwdDIueCArIHB4ICogUFdMX0JFWklFUiA8PCAiICIgPDwgcHQyLnkgPDwgIiAiIAorCQk8PCBwdDMueCA8PCAiICIgPDwgcHQzLnkgKyBweSAqIFBXTF9CRVpJRVIgPDwgIiAiCisJCTw8IHB0My54IDw8ICIgIiA8PCBwdDMueSA8PCAiIGNcbiI7CisKKwlweCA9IHB0My54IC0gcHQ0Lng7CisJcHkgPSBwdDMueSAtIHB0NC55OworCisJY3NBUCA8PCBwdDMueCA8PCAiICIgPDwgcHQzLnkgLSBweSAqIFBXTF9CRVpJRVIgPDwgIiAiIAorCQk8PCBwdDQueCArIHB4ICogUFdMX0JFWklFUiA8PCAiICIgPDwgcHQ0LnkgPDwgIiAiCisJCTw8IHB0NC54IDw8ICIgIiA8PCBwdDQueSA8PCAiIGNcbiI7CisKKwlweCA9IHB0NC54IC0gcHQxLng7CisJcHkgPSBwdDEueSAtIHB0NC55OworCisJY3NBUCA8PCBwdDQueCAtIHB4ICogUFdMX0JFWklFUiA8PCAiICIgPDwgcHQ0LnkgPDwgIiAiIAorCQk8PCBwdDEueCA8PCAiICIgPDwgcHQxLnkgLSBweSAqIFBXTF9CRVpJRVIgPDwgIiAiCisJCTw8IHB0MS54IDw8ICIgIiA8PCBwdDEueSA8PCAiIGNcbiI7CisKKwlyZXR1cm4gY3NBUC5HZXRCeXRlU3RyaW5nKCk7Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldEFQX0Nyb3NzKGNvbnN0IENQREZfUmVjdCAmIGNyQkJveCkKK3sKKwlDRlhfQnl0ZVRleHRCdWYgY3NBUDsKKworCWNzQVAgPDwgY3JCQm94LmxlZnQgPDwgIiAiIDw8IGNyQkJveC50b3AgPDwgIiBtXG4iOworCWNzQVAgPDwgY3JCQm94LnJpZ2h0IDw8ICIgIiA8PCBjckJCb3guYm90dG9tIDw8ICIgbFxuIjsKKwljc0FQIDw8IGNyQkJveC5sZWZ0IDw8ICIgIiA8PCBjckJCb3guYm90dG9tIDw8ICIgbVxuIjsKKwljc0FQIDw8IGNyQkJveC5yaWdodCA8PCAiICIgPDwgY3JCQm94LnRvcCA8PCAiIGxcbiI7CisKKwlyZXR1cm4gY3NBUC5HZXRCeXRlU3RyaW5nKCk7Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldEFQX0RpYW1vbmQoY29uc3QgQ1BERl9SZWN0ICYgY3JCQm94KQoreworCUNGWF9CeXRlVGV4dEJ1ZiBjc0FQOworCisJRlhfRkxPQVQgZldpZHRoID0gY3JCQm94LnJpZ2h0IC0gY3JCQm94LmxlZnQ7CisJRlhfRkxPQVQgZkhlaWdodCA9IGNyQkJveC50b3AgLSBjckJCb3guYm90dG9tOworCisJQ1BERl9Qb2ludCBwdDEoY3JCQm94LmxlZnQsY3JCQm94LmJvdHRvbSArIGZIZWlnaHQgLyAyKTsKKwlDUERGX1BvaW50IHB0MihjckJCb3gubGVmdCArIGZXaWR0aCAvIDIsY3JCQm94LnRvcCk7CisJQ1BERl9Qb2ludCBwdDMoY3JCQm94LnJpZ2h0LGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0IC8gMik7CisJQ1BERl9Qb2ludCBwdDQoY3JCQm94LmxlZnQgKyBmV2lkdGggLyAyLGNyQkJveC5ib3R0b20pOworCQorCWNzQVAgPDwgcHQxLnggPDwgIiAiIDw8IHB0MS55IDw8ICIgbVxuIjsKKwljc0FQIDw8IHB0Mi54IDw8ICIgIiA8PCBwdDIueSA8PCAiIGxcbiI7CisJY3NBUCA8PCBwdDMueCA8PCAiICIgPDwgcHQzLnkgPDwgIiBsXG4iOworCWNzQVAgPDwgcHQ0LnggPDwgIiAiIDw8IHB0NC55IDw8ICIgbFxuIjsKKwljc0FQIDw8IHB0MS54IDw8ICIgIiA8PCBwdDEueSA8PCAiIGxcbiI7CisKKwlyZXR1cm4gY3NBUC5HZXRCeXRlU3RyaW5nKCk7Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldEFQX1NxdWFyZShjb25zdCBDUERGX1JlY3QgJiBjckJCb3gpCit7CisJQ0ZYX0J5dGVUZXh0QnVmIGNzQVA7CisKKwljc0FQIDw8IGNyQkJveC5sZWZ0IDw8ICIgIiA8PCBjckJCb3gudG9wIDw8ICIgbVxuIjsKKwljc0FQIDw8IGNyQkJveC5yaWdodCA8PCAiICIgPDwgY3JCQm94LnRvcCA8PCAiIGxcbiI7CisJY3NBUCA8PCBjckJCb3gucmlnaHQgPDwgIiAiIDw8IGNyQkJveC5ib3R0b20gPDwgIiBsXG4iOworCWNzQVAgPDwgY3JCQm94LmxlZnQgPDwgIiAiIDw8IGNyQkJveC5ib3R0b20gPDwgIiBsXG4iOworCWNzQVAgPDwgY3JCQm94LmxlZnQgPDwgIiAiIDw8IGNyQkJveC50b3AgPDwgIiBsXG4iOworCisJcmV0dXJuIGNzQVAuR2V0Qnl0ZVN0cmluZygpOworfQorCitDRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRBUF9TdGFyKGNvbnN0IENQREZfUmVjdCAmIGNyQkJveCkKK3sKKwlDRlhfQnl0ZVRleHRCdWYgY3NBUDsKKworCUZYX0ZMT0FUIGZSYWRpdXMgPSAoY3JCQm94LnRvcCAtIGNyQkJveC5ib3R0b20pLygxKyhGWF9GTE9BVCljb3MoUFdMX1BJLzUuMGYpKTsKKwlDUERGX1BvaW50IHB0Q2VudGVyID0gQ1BERl9Qb2ludCgoY3JCQm94LmxlZnQgKyBjckJCb3gucmlnaHQpIC8gMi4wZiwoY3JCQm94LnRvcCArIGNyQkJveC5ib3R0b20pIC8gMi4wZik7CisJCisJRlhfRkxPQVQgcHhbNV0scHlbNV07CisKKwlGWF9GTE9BVCBmQW5nZWwgPSBQV0xfUEkvMTAuMGY7CisKKwlmb3IgKEZYX0lOVDMyIGk9MDsgaTw1OyBpKyspCisJeworCQlweFtpXSA9IHB0Q2VudGVyLnggKyBmUmFkaXVzICogKEZYX0ZMT0FUKWNvcyhmQW5nZWwpOworCQlweVtpXSA9IHB0Q2VudGVyLnkgKyBmUmFkaXVzICogKEZYX0ZMT0FUKXNpbihmQW5nZWwpOworCisJCWZBbmdlbCArPSBQV0xfUEkgKiAyIC8gNS4wZjsKKwl9CisKKwljc0FQIDw8IHB4WzBdIDw8ICIgIiA8PCBweVswXSA8PCAiIG1cbiI7CisKKwlGWF9JTlQzMiBuTmV4dCA9IDA7CisJZm9yIChGWF9JTlQzMiBqPTA7IGo8NTsgaisrKQorCXsKKwkJbk5leHQgKz0gMjsKKwkJaWYgKG5OZXh0ID49IDUpIG5OZXh0IC09IDU7CisJCWNzQVAgPDwgcHhbbk5leHRdIDw8ICIgIiA8PCBweVtuTmV4dF0gPDwgIiBsXG4iOworCX0KKworCXJldHVybiBjc0FQLkdldEJ5dGVTdHJpbmcoKTsKK30KKworQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9VdGlsczo6R2V0QVBfSGFsZkNpcmNsZShjb25zdCBDUERGX1JlY3QgJiBjckJCb3gsRlhfRkxPQVQgZlJvdGF0ZSkKK3sKKwlDRlhfQnl0ZVRleHRCdWYgY3NBUDsKKworCUZYX0ZMT0FUIGZXaWR0aCA9IGNyQkJveC5yaWdodCAtIGNyQkJveC5sZWZ0OworCUZYX0ZMT0FUIGZIZWlnaHQgPSBjckJCb3gudG9wIC0gY3JCQm94LmJvdHRvbTsKKworCUNQREZfUG9pbnQgcHQxKC1mV2lkdGgvMiwwKTsKKwlDUERGX1BvaW50IHB0MigwLGZIZWlnaHQvMik7CisJQ1BERl9Qb2ludCBwdDMoZldpZHRoLzIsMCk7CisKKwlGWF9GTE9BVCBweCxweTsKKworCWNzQVAgPDwgY29zKGZSb3RhdGUpIDw8ICIgIiA8PCBzaW4oZlJvdGF0ZSkgPDwgIiAiIDw8IC1zaW4oZlJvdGF0ZSkgPDwgIiAiIDw8IGNvcyhmUm90YXRlKSA8PCAiICIgCisJCTw8IGNyQkJveC5sZWZ0ICsgZldpZHRoIC8gMiA8PCAiICIgPDwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQgLyAyIDw8ICIgY21cbiI7CisKKworCWNzQVAgPDwgcHQxLnggPDwgIiAiIDw8IHB0MS55IDw8ICIgbVxuIjsKKworCXB4ID0gcHQyLnggLSBwdDEueDsKKwlweSA9IHB0Mi55IC0gcHQxLnk7CisKKwljc0FQIDw8IHB0MS54IDw8ICIgIiA8PCBwdDEueSArIHB5ICogUFdMX0JFWklFUiA8PCAiICIgCisJCTw8IHB0Mi54IC0gcHggKiBQV0xfQkVaSUVSIDw8ICIgIiA8PCBwdDIueSA8PCAiICIKKwkJPDwgcHQyLnggPDwgIiAiIDw8IHB0Mi55IDw8ICIgY1xuIjsKKworCXB4ID0gcHQzLnggLSBwdDIueDsKKwlweSA9IHB0Mi55IC0gcHQzLnk7CisKKwljc0FQIDw8IHB0Mi54ICsgcHggKiBQV0xfQkVaSUVSIDw8ICIgIiA8PCBwdDIueSA8PCAiICIgCisJCTw8IHB0My54IDw8ICIgIiA8PCBwdDMueSArIHB5ICogUFdMX0JFWklFUiA8PCAiICIKKwkJPDwgcHQzLnggPDwgIiAiIDw8IHB0My55IDw8ICIgY1xuIjsKKworCXJldHVybiBjc0FQLkdldEJ5dGVTdHJpbmcoKTsKK30KKworCitDUERGX1JlY3QgQ1BXTF9VdGlsczo6SW5mbGF0ZVJlY3QoY29uc3QgQ1BERl9SZWN0ICYgcmNSZWN0LCBGWF9GTE9BVCBmU2l6ZSkKK3sKKwlpZiAocmNSZWN0LklzRW1wdHkoKSkgcmV0dXJuIHJjUmVjdDsKKworCUNQREZfUmVjdCByY05ldyhyY1JlY3QubGVmdCAtIGZTaXplLAorCQkJCQlyY1JlY3QuYm90dG9tIC0gZlNpemUsCisJCQkJCXJjUmVjdC5yaWdodCArIGZTaXplLAorCQkJCQlyY1JlY3QudG9wICsgZlNpemUpOworCXJjTmV3Lk5vcm1hbGl6ZSgpOworCXJldHVybiByY05ldzsKK30KKworQ1BERl9SZWN0IENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KGNvbnN0IENQREZfUmVjdCAmIHJjUmVjdCwgRlhfRkxPQVQgZlNpemUpCit7CisJaWYgKHJjUmVjdC5Jc0VtcHR5KCkpIHJldHVybiByY1JlY3Q7CisKKwlDUERGX1JlY3QgcmNOZXcocmNSZWN0LmxlZnQgKyBmU2l6ZSwKKwkJCQkJcmNSZWN0LmJvdHRvbSArIGZTaXplLAorCQkJCQlyY1JlY3QucmlnaHQgLSBmU2l6ZSwKKwkJCQkJcmNSZWN0LnRvcCAtIGZTaXplKTsKKwlyY05ldy5Ob3JtYWxpemUoKTsKKwlyZXR1cm4gcmNOZXc7Cit9CisKK0NQREZfUmVjdCBDUFdMX1V0aWxzOjpTY2FsZVJlY3QoY29uc3QgQ1BERl9SZWN0ICYgcmNSZWN0LEZYX0ZMT0FUIGZTY2FsZSkKK3sKKwlGWF9GTE9BVCBmSGFsZldpZHRoID0gKHJjUmVjdC5yaWdodCAtIHJjUmVjdC5sZWZ0KSAvIDIuMGY7CisJRlhfRkxPQVQgZkhhbGZIZWlnaHQgPSAocmNSZWN0LnRvcCAtIHJjUmVjdC5ib3R0b20pIC8gMi4wZjsKKworCUNQREZfUG9pbnQgcHRDZW50ZXIgPSBDUERGX1BvaW50KChyY1JlY3QubGVmdCArIHJjUmVjdC5yaWdodCkgLyAyLChyY1JlY3QudG9wICsgcmNSZWN0LmJvdHRvbSkgLyAyKTsKKworCXJldHVybiBDUERGX1JlY3QocHRDZW50ZXIueCAtIGZIYWxmV2lkdGggKiBmU2NhbGUsCisJCQkJcHRDZW50ZXIueSAtIGZIYWxmSGVpZ2h0ICogZlNjYWxlLAorCQkJCXB0Q2VudGVyLnggKyBmSGFsZldpZHRoICogZlNjYWxlLAorCQkJCXB0Q2VudGVyLnkgKyBmSGFsZkhlaWdodCAqIGZTY2FsZSk7Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldFJlY3RGaWxsQXBwU3RyZWFtKGNvbnN0IENQREZfUmVjdCAmIHJlY3QsY29uc3QgQ1BXTF9Db2xvciAmIGNvbG9yKQoreworCUNGWF9CeXRlVGV4dEJ1ZiBzQXBwU3RyZWFtOworCisJQ0ZYX0J5dGVTdHJpbmcgc0NvbG9yID0gR2V0Q29sb3JBcHBTdHJlYW0oY29sb3IsVFJVRSk7CisJaWYgKHNDb2xvci5HZXRMZW5ndGgoKSA+IDApCisJeworCQlzQXBwU3RyZWFtIDw8ICJxXG4iIDw8IHNDb2xvcjsKKwkJc0FwcFN0cmVhbSA8PCByZWN0LmxlZnQgPDwgIiAiIDw8IHJlY3QuYm90dG9tIDw8ICIgIgorCQkJPDwgcmVjdC5yaWdodCAtIHJlY3QubGVmdCA8PCAiICIgPDwgcmVjdC50b3AgLSByZWN0LmJvdHRvbSA8PCAiIHJlIGZcblFcbiI7CQkKKwl9CisJCisJcmV0dXJuIHNBcHBTdHJlYW0uR2V0Qnl0ZVN0cmluZygpOworfQorCitDRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRDaXJjbGVGaWxsQXBwU3RyZWFtKGNvbnN0IENQREZfUmVjdCAmIHJlY3QsY29uc3QgQ1BXTF9Db2xvciAmIGNvbG9yKQoreworCUNGWF9CeXRlVGV4dEJ1ZiBzQXBwU3RyZWFtOworCisJQ0ZYX0J5dGVTdHJpbmcgc0NvbG9yID0gR2V0Q29sb3JBcHBTdHJlYW0oY29sb3IsVFJVRSk7CisJaWYgKHNDb2xvci5HZXRMZW5ndGgoKSA+IDApCisJeworCQlzQXBwU3RyZWFtIDw8ICJxXG4iIDw8IHNDb2xvciA8PCBDUFdMX1V0aWxzOjpHZXRBUF9DaXJjbGUocmVjdCkgPDwgImZcblFcbiI7CQkKKwl9CisJCisJcmV0dXJuIHNBcHBTdHJlYW0uR2V0Qnl0ZVN0cmluZygpOworfQorCitDUERGX1JlY3QgQ1BXTF9VdGlsczo6R2V0Q2VudGVyU3F1YXJlKGNvbnN0IENQREZfUmVjdCAmIHJlY3QpCit7CisJRlhfRkxPQVQgZldpZHRoID0gcmVjdC5yaWdodCAtICByZWN0LmxlZnQ7CisJRlhfRkxPQVQgZkhlaWdodCA9IHJlY3QudG9wIC0gcmVjdC5ib3R0b207CisKKwlGWF9GTE9BVCBmQ2VudGVyWCA9IChyZWN0LmxlZnQgKyByZWN0LnJpZ2h0KS8yLjBmOworCUZYX0ZMT0FUIGZDZW50ZXJZID0gKHJlY3QudG9wICsgcmVjdC5ib3R0b20pLzIuMGY7CisKKwlGWF9GTE9BVCBmUmFkaXVzID0gKGZXaWR0aCA+IGZIZWlnaHQpID8gZkhlaWdodCAvIDIgOiBmV2lkdGggLyAyOworCisJcmV0dXJuIENQREZfUmVjdChmQ2VudGVyWCAtIGZSYWRpdXMsZkNlbnRlclkgLSBmUmFkaXVzLGZDZW50ZXJYICsgZlJhZGl1cyxmQ2VudGVyWSArIGZSYWRpdXMpOworfQorCitDRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRFZGl0QXBwU3RyZWFtKElGWF9FZGl0KiBwRWRpdCwgY29uc3QgQ1BERl9Qb2ludCAmIHB0T2Zmc2V0LCBjb25zdCBDUFZUX1dvcmRSYW5nZSAqIHBSYW5nZSwgCisJCQkJCQkJCQkJCQkJCUZYX0JPT0wgYkNvbnRpbnVvdXMsIEZYX1dPUkQgU3ViV29yZCkKK3sKKwlyZXR1cm4gSUZYX0VkaXQ6OkdldEVkaXRBcHBlYXJhbmNlU3RyZWFtKHBFZGl0LHB0T2Zmc2V0LHBSYW5nZSxiQ29udGludW91cyxTdWJXb3JkKTsKK30KKworQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9VdGlsczo6R2V0RWRpdFNlbEFwcFN0cmVhbShJRlhfRWRpdCogcEVkaXQsIGNvbnN0IENQREZfUG9pbnQgJiBwdE9mZnNldCwgCisJCQkJCQkJCWNvbnN0IENQVlRfV29yZFJhbmdlICogcFJhbmdlKQoreworCXJldHVybiBJRlhfRWRpdDo6R2V0U2VsZWN0QXBwZWFyYW5jZVN0cmVhbShwRWRpdCxwdE9mZnNldCxwUmFuZ2UpOworfQorCitzdGF0aWMgQ0ZYX0J5dGVTdHJpbmcgR2V0U3F1aWdnbHlBcHBlYXJhbmNlU3RyZWFtKEZYX0ZMT0FUIGZTdGFydFgsIEZYX0ZMT0FUIGZFbmRYLCBGWF9GTE9BVCBmWSwgRlhfRkxPQVQgZlN0ZXApCit7CisJQ0ZYX0J5dGVUZXh0QnVmIHNSZXQ7CisKKwlzUmV0IDw8ICIwIHdcbiIgPDwgZlN0YXJ0WCA8PCAiICIgPDwgZlkgPDwgIiBtXG4iOworCisJRlhfRkxPQVQgZng7CisJRlhfSU5UMzIgaTsKKworCWZvciAoaT0xLGZ4PWZTdGFydFgrZlN0ZXA7IGZ4PGZFbmRYOyBmeCs9ZlN0ZXAsaSsrKQorCXsKKwkJc1JldCA8PCBmeCA8PCAiICIgPDwgZlkgKyAoaSYxKSpmU3RlcCA8PCAiIGxcbiI7CisJfQorCisJc1JldCA8PCAiU1xuIjsKKworCXJldHVybiBzUmV0LkdldEJ5dGVTdHJpbmcoKTsKK30KKworc3RhdGljIENGWF9CeXRlU3RyaW5nIEdldFdvcmRTcGVsbENoZWNrQXBwZWFyYW5jZVN0cmVhbShJRlhfRWRpdF9JdGVyYXRvciogcEl0ZXJhdG9yLCBjb25zdCBDUERGX1BvaW50ICYgcHRPZmZzZXQsCisJCQkJCQkJCQkJCQkJCQkJICBjb25zdCBDUFZUX1dvcmRSYW5nZSAmIHdyV29yZCkKK3sKKwlDRlhfQnl0ZVRleHRCdWYgc1JldDsKKworCUZYX0ZMT0FUIGZTdGFydFggPSAwLjBmOworCUZYX0ZMT0FUIGZFbmRYID0gMC4wZjsKKwlGWF9GTE9BVCBmWSA9IDAuMGY7CisJRlhfRkxPQVQgZlN0ZXAgPSAwLjBmOyAKKworCUZYX0JPT0wgYkJyZWFrID0gRkFMU0U7CisKKwlpZiAocEl0ZXJhdG9yKQorCXsKKwkJcEl0ZXJhdG9yLT5TZXRBdCh3cldvcmQuQmVnaW5Qb3MpOworCisJCWRvCisJCXsKKwkJCUNQVlRfV29yZFBsYWNlIHBsYWNlID0gcEl0ZXJhdG9yLT5HZXRBdCgpOworCisJCQlDUFZUX0xpbmUgbGluZTsJCQkJCisJCQlpZiAocEl0ZXJhdG9yLT5HZXRMaW5lKGxpbmUpKQorCQkJeworCQkJCWZZID0gbGluZS5wdExpbmUueTsKKwkJCQlmU3RlcCA9IChsaW5lLmZMaW5lQXNjZW50IC0gbGluZS5mTGluZURlc2NlbnQpIC8gMTYuMGY7CisJCQl9CisKKwkJCWlmIChwbGFjZS5MaW5lQ21wKHdyV29yZC5CZWdpblBvcykgPT0gMCkKKwkJCXsKKwkJCQlwSXRlcmF0b3ItPlNldEF0KHdyV29yZC5CZWdpblBvcyk7CisJCQkJQ1BWVF9Xb3JkIHdvcmQ7CisJCQkJaWYgKHBJdGVyYXRvci0+R2V0V29yZCh3b3JkKSkKKwkJCQl7CisJCQkJCWZTdGFydFggPSB3b3JkLnB0V29yZC54OworCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlmU3RhcnRYID0gbGluZS5wdExpbmUueDsKKwkJCX0KKworCQkJaWYgKHBsYWNlLkxpbmVDbXAod3JXb3JkLkVuZFBvcykgPT0gMCkKKwkJCXsKKwkJCQlwSXRlcmF0b3ItPlNldEF0KHdyV29yZC5FbmRQb3MpOworCQkJCUNQVlRfV29yZCB3b3JkOworCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpCisJCQkJeworCQkJCQlmRW5kWCA9IHdvcmQucHRXb3JkLnggKyB3b3JkLmZXaWR0aDsKKwkJCQl9CisKKwkJCQliQnJlYWsgPSBUUlVFOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWZFbmRYID0gbGluZS5wdExpbmUueCArIGxpbmUuZkxpbmVXaWR0aDsKKwkJCX0KKworCQkJc1JldCA8PCBHZXRTcXVpZ2dseUFwcGVhcmFuY2VTdHJlYW0oZlN0YXJ0WCArIHB0T2Zmc2V0LngsIGZFbmRYICsgcHRPZmZzZXQueCwgZlkgKyBwdE9mZnNldC55LGZTdGVwKTsKKworCQkJaWYgKGJCcmVhaykgYnJlYWs7CisJCX0KKwkJd2hpbGUgKHBJdGVyYXRvci0+TmV4dExpbmUoKSk7CisJfQorCisJcmV0dXJuIHNSZXQuR2V0Qnl0ZVN0cmluZygpOworfQorCitDRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRTcGVsbENoZWNrQXBwU3RyZWFtKElGWF9FZGl0KiBwRWRpdCwgSVBXTF9TcGVsbENoZWNrKiBwU3BlbGxDaGVjaywgY29uc3QgQ1BERl9Qb2ludCAmIHB0T2Zmc2V0LAorCQkJCQkJCQljb25zdCBDUFZUX1dvcmRSYW5nZSAqIHBSYW5nZSkKK3sKKwlBU1NFUlQocEVkaXQgIT0gTlVMTCk7CisJQVNTRVJUKHBTcGVsbENoZWNrICE9IE5VTEwpOworCisJQ0ZYX0J5dGVUZXh0QnVmIHNSZXQ7CisKKwlpZiAocFJhbmdlICYmIHBSYW5nZS0+SXNFeGlzdCgpKQorCXsKKwkJaWYgKElGWF9FZGl0X0l0ZXJhdG9yKiBwSXRlcmF0b3IgPSBwRWRpdC0+R2V0SXRlcmF0b3IoKSkKKwkJeworCQkJcEl0ZXJhdG9yLT5TZXRBdChwUmFuZ2UtPkJlZ2luUG9zKTsKKworCQkJRlhfQk9PTCBiTGF0aW5Xb3JkID0gRkFMU0U7CisJCQlDUFZUX1dvcmRQbGFjZSB3cFdvcmRTdGFydDsKKwkJCUNGWF9CeXRlU3RyaW5nIHNXb3JkOworCisJCQlDUFZUX1dvcmRQbGFjZSBvbGRwbGFjZTsKKwkJCXdoaWxlIChwSXRlcmF0b3ItPk5leHRXb3JkKCkpCisJCQl7CisJCQkJQ1BWVF9Xb3JkUGxhY2UgcGxhY2UgPSBwSXRlcmF0b3ItPkdldEF0KCk7CisJCQkJaWYgKHBSYW5nZSAmJiBwbGFjZS5Xb3JkQ21wKHBSYW5nZS0+RW5kUG9zKSA+IDApIGJyZWFrOwkJCQkKKworCQkJCUNQVlRfV29yZCB3b3JkOworCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpCisJCQkJeworCQkJCQlpZiAoRlhfRURJVF9JU0xBVElOV09SRCh3b3JkLldvcmQpKQorCQkJCQl7CisJCQkJCQlpZiAoIWJMYXRpbldvcmQpCisJCQkJCQl7CisJCQkJCQkJd3BXb3JkU3RhcnQgPSBwbGFjZTsKKwkJCQkJCQliTGF0aW5Xb3JkID0gVFJVRTsJCQkJCQkJCQorCQkJCQkJfQorCisJCQkJCQlzV29yZCArPSAoY2hhcil3b3JkLldvcmQ7CisJCQkJCQlvbGRwbGFjZSA9IHBsYWNlOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJaWYgKGJMYXRpbldvcmQpCisJCQkJCQl7CisJCQkJCQkJaWYgKCFwU3BlbGxDaGVjay0+Q2hlY2tXb3JkKHNXb3JkKSkKKwkJCQkJCQl7CisJCQkJCQkJCXNSZXQgPDwgR2V0V29yZFNwZWxsQ2hlY2tBcHBlYXJhbmNlU3RyZWFtKHBJdGVyYXRvcixwdE9mZnNldCxDUFZUX1dvcmRSYW5nZSh3cFdvcmRTdGFydCxvbGRwbGFjZSkpOworCQkJCQkJCQlwSXRlcmF0b3ItPlNldEF0KHBsYWNlKTsKKwkJCQkJCQl9CisJCQkJCQkJYkxhdGluV29yZCA9IEZBTFNFOworCQkJCQkJfQorCisJCQkJCQlzV29yZC5FbXB0eSgpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWlmIChiTGF0aW5Xb3JkKQorCQkJCQl7CisJCQkJCQlpZiAoIXBTcGVsbENoZWNrLT5DaGVja1dvcmQoc1dvcmQpKQorCQkJCQkJCXNSZXQgPDwgR2V0V29yZFNwZWxsQ2hlY2tBcHBlYXJhbmNlU3RyZWFtKHBJdGVyYXRvcixwdE9mZnNldCxDUFZUX1dvcmRSYW5nZSh3cFdvcmRTdGFydCxvbGRwbGFjZSkpOworCQkJCQkJYkxhdGluV29yZCA9IEZBTFNFOworCQkJCQkJc1dvcmQuRW1wdHkoKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJaWYgKGJMYXRpbldvcmQpCisJCQl7CisJCQkJaWYgKCFwU3BlbGxDaGVjay0+Q2hlY2tXb3JkKHNXb3JkKSkKKwkJCQkJc1JldCA8PCBHZXRXb3JkU3BlbGxDaGVja0FwcGVhcmFuY2VTdHJlYW0ocEl0ZXJhdG9yLHB0T2Zmc2V0LENQVlRfV29yZFJhbmdlKHdwV29yZFN0YXJ0LG9sZHBsYWNlKSk7CisKKwkJCQliTGF0aW5Xb3JkID0gRkFMU0U7CisJCQkJc1dvcmQuRW1wdHkoKTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiBzUmV0LkdldEJ5dGVTdHJpbmcoKTsKK30KKworQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9VdGlsczo6R2V0VGV4dEFwcFN0cmVhbShjb25zdCBDUERGX1JlY3QgJiByY0JCb3gsSUZYX0VkaXRfRm9udE1hcCAqIHBGb250TWFwLAorCQkJCQkJCQkJCQkJCQljb25zdCBDRlhfV2lkZVN0cmluZyAmIHNUZXh0LCBGWF9JTlQzMiBuQWxpZ25tZW50SCwgRlhfSU5UMzIgbkFsaWdubWVudFYsCisJCQkJCQkJCQkJCQkJCUZYX0ZMT0FUIGZGb250U2l6ZSwgRlhfQk9PTCBiTXVsdGlMaW5lLCBGWF9CT09MIGJBdXRvUmV0dXJuLCBjb25zdCBDUFdMX0NvbG9yICYgY3JUZXh0KQoreworCUNGWF9CeXRlVGV4dEJ1ZiBzUmV0OworCisJaWYgKElGWF9FZGl0ICogcEVkaXQgPSBJRlhfRWRpdDo6TmV3RWRpdCgpKQorCXsJCQkKKwkJcEVkaXQtPlNldEZvbnRNYXAocEZvbnRNYXApOworCisJCXBFZGl0LT5TZXRQbGF0ZVJlY3QocmNCQm94KTsKKwkJcEVkaXQtPlNldEFsaWdubWVudEgobkFsaWdubWVudEgpOworCQlwRWRpdC0+U2V0QWxpZ25tZW50VihuQWxpZ25tZW50Vik7CisJCXBFZGl0LT5TZXRNdWx0aUxpbmUoYk11bHRpTGluZSk7CisJCXBFZGl0LT5TZXRBdXRvUmV0dXJuKGJBdXRvUmV0dXJuKTsKKwkJaWYgKElzRmxvYXRaZXJvKGZGb250U2l6ZSkpCisJCQlwRWRpdC0+U2V0QXV0b0ZvbnRTaXplKFRSVUUpOworCQllbHNlCisJCQlwRWRpdC0+U2V0Rm9udFNpemUoZkZvbnRTaXplKTsKKwkJcEVkaXQtPkluaXRpYWxpemUoKTsKKworCQlwRWRpdC0+U2V0VGV4dChzVGV4dCk7CisJCQorCQlDRlhfQnl0ZVN0cmluZyBzRWRpdCA9IENQV0xfVXRpbHM6OkdldEVkaXRBcHBTdHJlYW0ocEVkaXQsIENQREZfUG9pbnQoMC4wZiwwLjBmKSk7CisJCWlmIChzRWRpdC5HZXRMZW5ndGgoKSA+IDApCisJCXsKKwkJCXNSZXQgPDwgIkJUXG4iIDw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKGNyVGV4dCkgPDwgc0VkaXQgPDwgIkVUXG4iOworCQl9CisJCQorCQlJRlhfRWRpdDo6RGVsRWRpdChwRWRpdCk7CisJfQorCisJcmV0dXJuIHNSZXQuR2V0Qnl0ZVN0cmluZygpOworfQorCitDRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRQdXNoQnV0dG9uQXBwU3RyZWFtKGNvbnN0IENQREZfUmVjdCAmIHJjQkJveCwKKwkJCQkJCQkJCQkJSUZYX0VkaXRfRm9udE1hcCAqIHBGb250TWFwLAorCQkJCQkJCQkJCQlDUERGX1N0cmVhbSAqIHBJY29uU3RyZWFtLAorCQkJCQkJCQkJCQlDUERGX0ljb25GaXQgJiBJY29uRml0LAorCQkJCQkJCQkJCQljb25zdCBDRlhfV2lkZVN0cmluZyAmIHNMYWJlbCwJCQkJCQkJCQkJCQorCQkJCQkJCQkJCQljb25zdCBDUFdMX0NvbG9yICYgY3JUZXh0LAorCQkJCQkJCQkJCQlGWF9GTE9BVCBmRm9udFNpemUsCisJCQkJCQkJCQkJCUZYX0lOVDMyIG5MYXlPdXQpCit7CisJY29uc3QgRlhfRkxPQVQgZkF1dG9Gb250U2NhbGUgPSAxLjBmIC8gMy4wZjsJCisKKwlpZiAoSUZYX0VkaXQgKiBwRWRpdCA9IElGWF9FZGl0OjpOZXdFZGl0KCkpCisJewkJCQorCQlwRWRpdC0+U2V0Rm9udE1hcChwRm9udE1hcCk7CisKKwkJcEVkaXQtPlNldEFsaWdubWVudEgoMSk7CisJCXBFZGl0LT5TZXRBbGlnbm1lbnRWKDEpOworCQlwRWRpdC0+U2V0TXVsdGlMaW5lKEZBTFNFKTsKKwkJcEVkaXQtPlNldEF1dG9SZXR1cm4oRkFMU0UpOworCQlpZiAoSXNGbG9hdFplcm8oZkZvbnRTaXplKSkKKwkJCXBFZGl0LT5TZXRBdXRvRm9udFNpemUoVFJVRSk7CisJCWVsc2UKKwkJCXBFZGl0LT5TZXRGb250U2l6ZShmRm9udFNpemUpOworCQlwRWRpdC0+SW5pdGlhbGl6ZSgpOworCQlwRWRpdC0+U2V0VGV4dChzTGFiZWwpOworCisJCUNQREZfUmVjdCByY0xhYmVsQ29udGVudCA9IHBFZGl0LT5HZXRDb250ZW50UmVjdCgpOworCQkKKwkJQ1BXTF9JY29uIEljb247CisJCVBXTF9DUkVBVEVQQVJBTSBjcDsKKwkJY3AuZHdGbGFncyA9IFBXU19WSVNJQkxFOworCQlJY29uLkNyZWF0ZShjcCk7CisJCUljb24uU2V0SWNvbkZpdCgmSWNvbkZpdCk7CisJCUljb24uU2V0UERGU3RyZWFtKHBJY29uU3RyZWFtKTsKKworCQlDUERGX1JlY3QgcmNMYWJlbCA9IENQREZfUmVjdCgwLDAsMCwwKTsKKwkJQ1BERl9SZWN0IHJjSWNvbiA9IENQREZfUmVjdCgwLDAsMCwwKTsKKwkJRlhfRkxPQVQgZldpZHRoID0gMC4wZjsKKwkJRlhfRkxPQVQgZkhlaWdodCA9IDAuMGY7CisKKwkJc3dpdGNoIChuTGF5T3V0KQorCQl7CisJCWNhc2UgUFBCTF9MQUJFTDoKKwkJCXJjTGFiZWwgPSByY0JCb3g7CisJCQlyY0ljb24gPSBDUERGX1JlY3QoMCwwLDAsMCk7CisJCQlicmVhazsKKwkJY2FzZSBQUEJMX0lDT046CisJCQlyY0ljb24gPSByY0JCb3g7CisJCQlyY0xhYmVsID0gQ1BERl9SZWN0KDAsMCwwLDApOworCQkJYnJlYWs7CisJCWNhc2UgUFBCTF9JQ09OVE9QTEFCRUxCT1RUT006CisKKwkJCWlmIChwSWNvblN0cmVhbSkKKwkJCXsKKwkJCQlpZiAoSXNGbG9hdFplcm8oZkZvbnRTaXplKSkKKwkJCQl7CisJCQkJCWZIZWlnaHQgPSByY0JCb3gudG9wIC0gcmNCQm94LmJvdHRvbTsKKwkJCQkJcmNMYWJlbCA9IENQREZfUmVjdChyY0JCb3gubGVmdCxyY0JCb3guYm90dG9tLHJjQkJveC5yaWdodCxyY0JCb3guYm90dG9tICsgZkhlaWdodCAqIGZBdXRvRm9udFNjYWxlKTsKKwkJCQkJcmNJY29uID0gQ1BERl9SZWN0KHJjQkJveC5sZWZ0LHJjTGFiZWwudG9wLHJjQkJveC5yaWdodCxyY0JCb3gudG9wKTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJZkhlaWdodCA9IHJjTGFiZWxDb250ZW50LkhlaWdodCgpOworCisJCQkJCWlmIChyY0JCb3guYm90dG9tICsgZkhlaWdodCA+IHJjQkJveC50b3ApCisJCQkJCXsJCQkKKwkJCQkJCXJjSWNvbiA9IENQREZfUmVjdCgwLDAsMCwwKTsJCQkJCisJCQkJCQlyY0xhYmVsID0gcmNCQm94OworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcmNMYWJlbCA9IENQREZfUmVjdChyY0JCb3gubGVmdCxyY0JCb3guYm90dG9tLHJjQkJveC5yaWdodCxyY0JCb3guYm90dG9tICsgZkhlaWdodCk7CisJCQkJCQlyY0ljb24gPSBDUERGX1JlY3QocmNCQm94LmxlZnQscmNMYWJlbC50b3AscmNCQm94LnJpZ2h0LHJjQkJveC50b3ApOwkKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlyY0xhYmVsID0gcmNCQm94OworCQkJCXJjSWNvbiA9IENQREZfUmVjdCgwLDAsMCwwKTsKKwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgUFBCTF9MQUJFTFRPUElDT05CT1RUT006CisKKwkJCWlmIChwSWNvblN0cmVhbSkKKwkJCXsKKwkJCQlpZiAoSXNGbG9hdFplcm8oZkZvbnRTaXplKSkKKwkJCQl7CisJCQkJCWZIZWlnaHQgPSByY0JCb3gudG9wIC0gcmNCQm94LmJvdHRvbTsKKwkJCQkJcmNMYWJlbCA9IENQREZfUmVjdChyY0JCb3gubGVmdCxyY0JCb3gudG9wIC0gZkhlaWdodCAqIGZBdXRvRm9udFNjYWxlICxyY0JCb3gucmlnaHQscmNCQm94LnRvcCk7CisJCQkJCXJjSWNvbiA9IENQREZfUmVjdChyY0JCb3gubGVmdCxyY0JCb3guYm90dG9tLHJjQkJveC5yaWdodCxyY0xhYmVsLmJvdHRvbSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWZIZWlnaHQgPSByY0xhYmVsQ29udGVudC5IZWlnaHQoKTsKKworCQkJCQlpZiAocmNCQm94LmJvdHRvbSArIGZIZWlnaHQgPiByY0JCb3gudG9wKQorCQkJCQl7CQkJCisJCQkJCQlyY0ljb24gPSBDUERGX1JlY3QoMCwwLDAsMCk7CQkJCQorCQkJCQkJcmNMYWJlbCA9IHJjQkJveDsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCXJjTGFiZWwgPSBDUERGX1JlY3QocmNCQm94LmxlZnQscmNCQm94LnRvcCAtIGZIZWlnaHQscmNCQm94LnJpZ2h0LHJjQkJveC50b3ApOworCQkJCQkJcmNJY29uID0gQ1BERl9SZWN0KHJjQkJveC5sZWZ0LHJjQkJveC5ib3R0b20scmNCQm94LnJpZ2h0LHJjTGFiZWwuYm90dG9tKTsJCQorCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZQorCQkJeworCQkJCXJjTGFiZWwgPSByY0JCb3g7CisJCQkJcmNJY29uID0gQ1BERl9SZWN0KDAsMCwwLDApOworCQkJfQorCisJCQlicmVhazsKKwkJY2FzZSBQUEJMX0lDT05MRUZUTEFCRUxSSUdIVDoKKworCQkJaWYgKHBJY29uU3RyZWFtKQorCQkJeworCQkJCWlmIChJc0Zsb2F0WmVybyhmRm9udFNpemUpKQorCQkJCXsKKwkJCQkJZldpZHRoID0gcmNCQm94LnJpZ2h0IC0gcmNCQm94LmxlZnQ7CisJCQkJCXJjTGFiZWwgPSBDUERGX1JlY3QocmNCQm94LnJpZ2h0IC0gZldpZHRoICogZkF1dG9Gb250U2NhbGUscmNCQm94LmJvdHRvbSxyY0JCb3gucmlnaHQscmNCQm94LnRvcCk7CisJCQkJCXJjSWNvbiA9IENQREZfUmVjdChyY0JCb3gubGVmdCxyY0JCb3guYm90dG9tLHJjTGFiZWwubGVmdCxyY0JCb3gudG9wKTsKKworCQkJCQlpZiAocmNMYWJlbENvbnRlbnQuV2lkdGgoKSA8IGZXaWR0aCAqIGZBdXRvRm9udFNjYWxlKQorCQkJCQl7CQkJCQkJCQorCQkJCQl9CisJCQkJCWVsc2UgCisJCQkJCXsKKwkJCQkJCWlmIChyY0xhYmVsQ29udGVudC5XaWR0aCgpIDwgZldpZHRoKQorCQkJCQkJeworCQkJCQkJCXJjTGFiZWwgPSBDUERGX1JlY3QocmNCQm94LnJpZ2h0IC0gcmNMYWJlbENvbnRlbnQuV2lkdGgoKSxyY0JCb3guYm90dG9tLHJjQkJveC5yaWdodCxyY0JCb3gudG9wKTsKKwkJCQkJCQlyY0ljb24gPSBDUERGX1JlY3QocmNCQm94LmxlZnQscmNCQm94LmJvdHRvbSxyY0xhYmVsLmxlZnQscmNCQm94LnRvcCk7CisJCQkJCQl9CisJCQkJCQllbHNlCisJCQkJCQl7CisJCQkJCQkJcmNMYWJlbCA9IHJjQkJveDsKKwkJCQkJCQlyY0ljb24gPSBDUERGX1JlY3QoMCwwLDAsMCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJZldpZHRoID0gcmNMYWJlbENvbnRlbnQuV2lkdGgoKTsKKworCQkJCQlpZiAocmNCQm94LmxlZnQgKyBmV2lkdGggPiByY0JCb3gucmlnaHQpCisJCQkJCXsKKwkJCQkJCXJjTGFiZWwgPSByY0JCb3g7CisJCQkJCQlyY0ljb24gPSBDUERGX1JlY3QoMCwwLDAsMCk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlyY0xhYmVsID0gQ1BERl9SZWN0KHJjQkJveC5yaWdodCAtIGZXaWR0aCxyY0JCb3guYm90dG9tLHJjQkJveC5yaWdodCxyY0JCb3gudG9wKTsKKwkJCQkJCXJjSWNvbiA9IENQREZfUmVjdChyY0JCb3gubGVmdCxyY0JCb3guYm90dG9tLHJjTGFiZWwubGVmdCxyY0JCb3gudG9wKTsJCQkKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlyY0xhYmVsID0gcmNCQm94OworCQkJCXJjSWNvbiA9IENQREZfUmVjdCgwLDAsMCwwKTsKKwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgUFBCTF9MQUJFTExFRlRJQ09OUklHSFQ6CisKKwkJCWlmIChwSWNvblN0cmVhbSkKKwkJCXsKKwkJCQlpZiAoSXNGbG9hdFplcm8oZkZvbnRTaXplKSkKKwkJCQl7CisJCQkJCWZXaWR0aCA9IHJjQkJveC5yaWdodCAtIHJjQkJveC5sZWZ0OworCQkJCQlyY0xhYmVsID0gQ1BERl9SZWN0KHJjQkJveC5sZWZ0LHJjQkJveC5ib3R0b20scmNCQm94LmxlZnQgKyBmV2lkdGggKiBmQXV0b0ZvbnRTY2FsZSxyY0JCb3gudG9wKTsKKwkJCQkJcmNJY29uID0gQ1BERl9SZWN0KHJjTGFiZWwucmlnaHQscmNCQm94LmJvdHRvbSxyY0JCb3gucmlnaHQscmNCQm94LnRvcCk7CisKKwkJCQkJaWYgKHJjTGFiZWxDb250ZW50LldpZHRoKCkgPCBmV2lkdGggKiBmQXV0b0ZvbnRTY2FsZSkKKwkJCQkJewkJCQkJCQkKKwkJCQkJfQorCQkJCQllbHNlIAorCQkJCQl7CisJCQkJCQlpZiAocmNMYWJlbENvbnRlbnQuV2lkdGgoKSA8IGZXaWR0aCkKKwkJCQkJCXsKKwkJCQkJCQlyY0xhYmVsID0gQ1BERl9SZWN0KHJjQkJveC5sZWZ0LHJjQkJveC5ib3R0b20scmNCQm94LmxlZnQgKyByY0xhYmVsQ29udGVudC5XaWR0aCgpLHJjQkJveC50b3ApOworCQkJCQkJCXJjSWNvbiA9IENQREZfUmVjdChyY0xhYmVsLnJpZ2h0LHJjQkJveC5ib3R0b20scmNCQm94LnJpZ2h0LHJjQkJveC50b3ApOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCXJjTGFiZWwgPSByY0JCb3g7CisJCQkJCQkJcmNJY29uID0gQ1BERl9SZWN0KDAsMCwwLDApOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWZXaWR0aCA9IHJjTGFiZWxDb250ZW50LldpZHRoKCk7CisKKwkJCQkJaWYgKHJjQkJveC5sZWZ0ICsgZldpZHRoID4gcmNCQm94LnJpZ2h0KQorCQkJCQl7CisJCQkJCQlyY0xhYmVsID0gcmNCQm94OworCQkJCQkJcmNJY29uID0gQ1BERl9SZWN0KDAsMCwwLDApOworCQkJCQl9CisJCQkJCWVsc2UKKwkJCQkJeworCQkJCQkJcmNMYWJlbCA9IENQREZfUmVjdChyY0JCb3gubGVmdCxyY0JCb3guYm90dG9tLHJjQkJveC5sZWZ0ICsgZldpZHRoLHJjQkJveC50b3ApOworCQkJCQkJcmNJY29uID0gQ1BERl9SZWN0KHJjTGFiZWwucmlnaHQscmNCQm94LmJvdHRvbSxyY0JCb3gucmlnaHQscmNCQm94LnRvcCk7CQkKKwkJCQkJfQkKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJcmNMYWJlbCA9IHJjQkJveDsKKwkJCQlyY0ljb24gPSBDUERGX1JlY3QoMCwwLDAsMCk7CisJCQl9CisKKwkJCWJyZWFrOworCQljYXNlIFBQQkxfTEFCRUxPVkVSSUNPTjoKKwkJCXJjTGFiZWwgPSByY0JCb3g7CisJCQlyY0ljb24gPSByY0JCb3g7CisJCQlicmVhazsKKwkJfQorCisJCUNGWF9CeXRlVGV4dEJ1ZiBzQXBwU3RyZWFtLHNUZW1wOworCisJCWlmICghcmNJY29uLklzRW1wdHkoKSkKKwkJeworCQkJSWNvbi5Nb3ZlKHJjSWNvbiwgRkFMU0UsIEZBTFNFKTsKKwkJCXNUZW1wIDw8IEljb24uR2V0SW1hZ2VBcHBTdHJlYW0oKTsKKwkJfQorCisJCUljb24uRGVzdHJveSgpOworCisJCWlmICghcmNMYWJlbC5Jc0VtcHR5KCkpCisJCXsKKwkJCXBFZGl0LT5TZXRQbGF0ZVJlY3QocmNMYWJlbCk7CisJCQlDRlhfQnl0ZVN0cmluZyBzRWRpdCA9IENQV0xfVXRpbHM6OkdldEVkaXRBcHBTdHJlYW0ocEVkaXQsQ1BERl9Qb2ludCgwLjBmLDAuMGYpKTsKKwkJCWlmIChzRWRpdC5HZXRMZW5ndGgoKSA+IDApCisJCQl7CisJCQkJc1RlbXAgPDwgIkJUXG4iIDw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKGNyVGV4dCkgPDwgc0VkaXQgPDwgIkVUXG4iOworCQkJfQorCQl9CisKKwkJSUZYX0VkaXQ6OkRlbEVkaXQocEVkaXQpOworCisJCWlmIChzVGVtcC5HZXRTaXplKCkgPiAwKQorCQl7CisJCQlzQXBwU3RyZWFtIDw8ICJxXG4iIDw8IHJjQkJveC5sZWZ0IDw8ICIgIiA8PCByY0JCb3guYm90dG9tIDw8ICIgIgorCQkJCTw8IHJjQkJveC5yaWdodCAtIHJjQkJveC5sZWZ0IDw8ICIgIiA8PCByY0JCb3gudG9wIC0gcmNCQm94LmJvdHRvbSA8PCAiIHJlIFcgblxuIjsKKwkJCXNBcHBTdHJlYW0gPDwgc1RlbXAgPDwgIlFcbiI7CisJCX0KKworCQlyZXR1cm4gc0FwcFN0cmVhbS5HZXRCeXRlU3RyaW5nKCk7CisJfQorCisJcmV0dXJuICIiOworfQorCitDRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjb25zdCBDUFdMX0NvbG9yICYgY29sb3IsY29uc3QgRlhfQk9PTCAmIGJGaWxsT3JTdHJva2UpCit7CisJQ0ZYX0J5dGVUZXh0QnVmIHNDb2xvclN0cmVhbTsKKworCXN3aXRjaCAoY29sb3IubkNvbG9yVHlwZSkKKwl7CQkKKwljYXNlIENPTE9SVFlQRV9SR0I6CisJCXNDb2xvclN0cmVhbSA8PCBjb2xvci5mQ29sb3IxIDw8ICIgIiA8PCBjb2xvci5mQ29sb3IyIDw8ICIgIiA8PCBjb2xvci5mQ29sb3IzIDw8ICIgIiAKKwkJCTw8IChiRmlsbE9yU3Ryb2tlID8gInJnIiA6ICJSRyIpIDw8ICJcbiI7CisJCWJyZWFrOworCWNhc2UgQ09MT1JUWVBFX0dSQVk6CisJCXNDb2xvclN0cmVhbSA8PCBjb2xvci5mQ29sb3IxIDw8ICIgIiA8PCAoYkZpbGxPclN0cm9rZSA/ICJnIiA6ICJHIikgPDwgIlxuIjsKKwkJYnJlYWs7CisJY2FzZSBDT0xPUlRZUEVfQ01ZSzoKKwkJc0NvbG9yU3RyZWFtIDw8IGNvbG9yLmZDb2xvcjEgPDwgIiAiIDw8IGNvbG9yLmZDb2xvcjIgPDwgIiAiIDw8IGNvbG9yLmZDb2xvcjMgPDwgIiAiIDw8IGNvbG9yLmZDb2xvcjQgPDwgIiAiIAorCQkJPDwgKGJGaWxsT3JTdHJva2UgPyAiayIgOiAiSyIpIDw8ICJcbiI7CisJCWJyZWFrOworCX0KKworCXJldHVybiBzQ29sb3JTdHJlYW0uR2V0Qnl0ZVN0cmluZygpOworfQorCitDRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRCb3JkZXJBcHBTdHJlYW0oY29uc3QgQ1BERl9SZWN0ICYgcmVjdCwgRlhfRkxPQVQgZldpZHRoLAorCQkJCQkJCQkJCQkJY29uc3QgQ1BXTF9Db2xvciAmIGNvbG9yLCBjb25zdCBDUFdMX0NvbG9yICYgY3JMZWZ0VG9wLCBjb25zdCBDUFdMX0NvbG9yICYgY3JSaWdodEJvdHRvbSwKKwkJCQkJCQkJCQkJCUZYX0lOVDMyIG5TdHlsZSwgY29uc3QgQ1BXTF9EYXNoICYgZGFzaCkKK3sKKwlDRlhfQnl0ZVRleHRCdWYgc0FwcFN0cmVhbTsKKwlDRlhfQnl0ZVN0cmluZyBzQ29sb3I7CisKKwlGWF9GTE9BVCBmTGVmdCA9IHJlY3QubGVmdDsKKwlGWF9GTE9BVCBmUmlnaHQgPSByZWN0LnJpZ2h0OworCUZYX0ZMT0FUIGZUb3AgPSByZWN0LnRvcDsKKwlGWF9GTE9BVCBmQm90dG9tID0gcmVjdC5ib3R0b207CisKKwlpZiAoZldpZHRoID4gMC4wZikKKwl7CisJCUZYX0ZMT0FUIGZIYWxmV2lkdGggPSBmV2lkdGggLyAyLjBmOworCisJCXNBcHBTdHJlYW0gPDwgInFcbiI7CisKKwkJc3dpdGNoIChuU3R5bGUpCisJCXsKKwkJZGVmYXVsdDoKKwkJY2FzZSBQQlNfU09MSUQ6CisJCQlzQ29sb3IgPSBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjb2xvcixUUlVFKTsKKwkJCWlmIChzQ29sb3IuR2V0TGVuZ3RoKCkgPiAwKQorCQkJeworCQkJCXNBcHBTdHJlYW0gPDwgc0NvbG9yOworCQkJCXNBcHBTdHJlYW0gPDwgZkxlZnQgPDwgIiAiIDw8IGZCb3R0b20gPDwgIiAiIDw8IGZSaWdodCAtIGZMZWZ0IDw8ICIgIiA8PCBmVG9wIC0gZkJvdHRvbSA8PCAiIHJlXG4iOworCQkJCXNBcHBTdHJlYW0gPDwgZkxlZnQgKyBmV2lkdGggPDwgIiAiIDw8IGZCb3R0b20gKyBmV2lkdGggPDwgIiAiIAorCQkJCQk8PCBmUmlnaHQgLSBmTGVmdCAtIGZXaWR0aCAqIDIgPDwgIiAiIDw8IGZUb3AgLSBmQm90dG9tIC0gZldpZHRoICogMiA8PCAiIHJlXG4iOworCQkJCXNBcHBTdHJlYW0gPDwgImYqXG4iOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUEJTX0RBU0g6CisJCQlzQ29sb3IgPSBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjb2xvcixGQUxTRSk7CisJCQlpZiAoc0NvbG9yLkdldExlbmd0aCgpID4gMCkKKwkJCXsKKwkJCQlzQXBwU3RyZWFtIDw8IHNDb2xvcjsKKwkJCQlzQXBwU3RyZWFtIDw8IGZXaWR0aCA8PCAiIHciIDw8ICIgWyIgPDwgZGFzaC5uRGFzaCA8PCAiICIgPDwgZGFzaC5uR2FwIDw8ICJdICIgPDwgZGFzaC5uUGhhc2UgPDwgIiBkXG4iOworCQkJCXNBcHBTdHJlYW0gPDwgZkxlZnQgKyBmV2lkdGggLyAyIDw8ICIgIiA8PCBmQm90dG9tICsgZldpZHRoIC8gMiA8PCAiIG1cbiI7CisJCQkJc0FwcFN0cmVhbSA8PCBmTGVmdCArIGZXaWR0aCAvIDIgPDwgIiAiIDw8IGZUb3AgLSBmV2lkdGggLyAyIDw8ICIgbFxuIjsKKwkJCQlzQXBwU3RyZWFtIDw8IGZSaWdodCAtIGZXaWR0aCAvIDIgPDwgIiAiIDw8IGZUb3AgLSBmV2lkdGggLyAyIDw8ICIgbFxuIjsKKwkJCQlzQXBwU3RyZWFtIDw8IGZSaWdodCAtIGZXaWR0aCAvIDIgPDwgIiAiIDw8IGZCb3R0b20gKyBmV2lkdGggLyAyIDw8ICIgbFxuIjsKKwkJCQlzQXBwU3RyZWFtIDw8IGZMZWZ0ICsgZldpZHRoIC8gMiA8PCAiICIgPDwgZkJvdHRvbSArIGZXaWR0aCAvIDIgPDwgIiBsIFNcbiI7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQQlNfQkVWRUxFRDoKKwkJY2FzZSBQQlNfSU5TRVQ6CisJCQlzQ29sb3IgPSBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjckxlZnRUb3AsVFJVRSk7CisJCQlpZiAoc0NvbG9yLkdldExlbmd0aCgpID4gMCkKKwkJCXsKKwkJCQlzQXBwU3RyZWFtIDw8IHNDb2xvcjsKKwkJCQlzQXBwU3RyZWFtIDw8IGZMZWZ0ICsgZkhhbGZXaWR0aCA8PCAiICIgPDwgZkJvdHRvbSArIGZIYWxmV2lkdGggPDwgIiBtXG4iOworCQkJCXNBcHBTdHJlYW0gPDwgZkxlZnQgKyBmSGFsZldpZHRoIDw8ICIgIiA8PCBmVG9wIC0gZkhhbGZXaWR0aCA8PCAiIGxcbiI7CisJCQkJc0FwcFN0cmVhbSA8PCBmUmlnaHQgLSBmSGFsZldpZHRoIDw8ICIgIiA8PCBmVG9wIC0gZkhhbGZXaWR0aCA8PCAiIGxcbiI7CisJCQkJc0FwcFN0cmVhbSA8PCBmUmlnaHQgLSBmSGFsZldpZHRoICogMiA8PCAiICIgPDwgZlRvcCAtIGZIYWxmV2lkdGggKiAyIDw8ICIgbFxuIjsKKwkJCQlzQXBwU3RyZWFtIDw8IGZMZWZ0ICsgZkhhbGZXaWR0aCAqIDIgPDwgIiAiIDw8IGZUb3AgLSBmSGFsZldpZHRoICogMiA8PCAiIGxcbiI7CisJCQkJc0FwcFN0cmVhbSA8PCBmTGVmdCArIGZIYWxmV2lkdGggKiAyIDw8ICIgIiA8PCBmQm90dG9tICsgZkhhbGZXaWR0aCAqIDIgPDwgIiBsIGZcbiI7CisJCQl9CisKKwkJCXNDb2xvciA9IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKGNyUmlnaHRCb3R0b20sVFJVRSk7CisJCQlpZiAoc0NvbG9yLkdldExlbmd0aCgpID4gMCkKKwkJCXsKKwkJCQlzQXBwU3RyZWFtIDw8IHNDb2xvcjsKKwkJCQlzQXBwU3RyZWFtIDw8IGZSaWdodCAtIGZIYWxmV2lkdGggPDwgIiAiIDw8CWZUb3AgLSBmSGFsZldpZHRoIDw8ICIgbVxuIjsKKwkJCQlzQXBwU3RyZWFtIDw8IGZSaWdodCAtIGZIYWxmV2lkdGggPDwgIiAiIDw8CWZCb3R0b20gKyBmSGFsZldpZHRoIDw8ICIgbFxuIjsKKwkJCQlzQXBwU3RyZWFtIDw8IGZMZWZ0ICsgZkhhbGZXaWR0aCA8PCAiICIgPDwgCWZCb3R0b20gKyBmSGFsZldpZHRoIDw8ICIgbFxuIjsKKwkJCQlzQXBwU3RyZWFtIDw8IGZMZWZ0ICsgZkhhbGZXaWR0aCAqIDIgPDwgIiAiIDw8IGZCb3R0b20gKyBmSGFsZldpZHRoICogMiA8PCAiIGxcbiI7CisJCQkJc0FwcFN0cmVhbSA8PCBmUmlnaHQgLSBmSGFsZldpZHRoICogMiA8PCAiICIgPDwgZkJvdHRvbSArIGZIYWxmV2lkdGggKiAyIDw8ICIgbFxuIjsKKwkJCQlzQXBwU3RyZWFtIDw8IGZSaWdodCAtIGZIYWxmV2lkdGggKiAyIDw8ICIgIiA8PCBmVG9wIC0gZkhhbGZXaWR0aCAqIDIgPDwgIiBsIGZcbiI7CisJCQl9CisKKwkJCXNDb2xvciA9IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKGNvbG9yLFRSVUUpOworCQkJaWYgKHNDb2xvci5HZXRMZW5ndGgoKSA+IDApCisJCQl7CisJCQkJc0FwcFN0cmVhbSA8PCBzQ29sb3I7CisJCQkJc0FwcFN0cmVhbSA8PCBmTGVmdCA8PCAiICIgPDwgZkJvdHRvbSA8PCAiICIgPDwJZlJpZ2h0IC0gZkxlZnQgPDwgIiAiIDw8IGZUb3AgLSBmQm90dG9tIDw8ICIgcmVcbiI7CisJCQkJc0FwcFN0cmVhbSA8PCBmTGVmdCArIGZIYWxmV2lkdGggPDwgIiAiIDw8IGZCb3R0b20gKyBmSGFsZldpZHRoIDw8ICIgIiAKKwkJCQkJPDwgZlJpZ2h0IC0gZkxlZnQgLSBmSGFsZldpZHRoICogMiA8PCAiICIgPDwgZlRvcCAtIGZCb3R0b20gLSBmSGFsZldpZHRoICogMiA8PCAiIHJlIGYqXG4iOwkJCQkJCQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUEJTX1VOREVSTElORUQ6CisJCQlzQ29sb3IgPSBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjb2xvcixGQUxTRSk7CisJCQlpZiAoc0NvbG9yLkdldExlbmd0aCgpID4gMCkKKwkJCXsKKwkJCQlzQXBwU3RyZWFtIDw8IHNDb2xvcjsKKwkJCQlzQXBwU3RyZWFtIDw8IGZXaWR0aCA8PCAiIHdcbiI7CisJCQkJc0FwcFN0cmVhbSA8PCBmTGVmdCA8PCAiICIgPDwgZkJvdHRvbSArIGZXaWR0aCAvIDIgPDwgIiBtXG4iOworCQkJCXNBcHBTdHJlYW0gPDwgZlJpZ2h0IDw8ICIgIiA8PCBmQm90dG9tICsgZldpZHRoIC8gMiA8PCAiIGwgU1xuIjsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCQorCQlzQXBwU3RyZWFtIDw8ICJRXG4iOworCX0KKworCXJldHVybiBzQXBwU3RyZWFtLkdldEJ5dGVTdHJpbmcoKTsKK30KKworQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9VdGlsczo6R2V0Q2lyY2xlQm9yZGVyQXBwU3RyZWFtKGNvbnN0IENQREZfUmVjdCAmIHJlY3QsIEZYX0ZMT0FUIGZXaWR0aCwKKwkJCQkJCQkJCQkJCWNvbnN0IENQV0xfQ29sb3IgJiBjb2xvciwgY29uc3QgQ1BXTF9Db2xvciAmIGNyTGVmdFRvcCwgY29uc3QgQ1BXTF9Db2xvciAmIGNyUmlnaHRCb3R0b20sCisJCQkJCQkJCQkJCQlGWF9JTlQzMiBuU3R5bGUsIGNvbnN0IENQV0xfRGFzaCAmIGRhc2gpCit7CisJQ0ZYX0J5dGVUZXh0QnVmIHNBcHBTdHJlYW07CisJQ0ZYX0J5dGVTdHJpbmcgc0NvbG9yOworCisJCisKKworCisKKwlpZiAoZldpZHRoID4gMC4wZikKKwl7CisJCXNBcHBTdHJlYW0gPDwgInFcbiI7CisKKwkJc3dpdGNoIChuU3R5bGUpCisJCXsKKwkJZGVmYXVsdDoKKwkJY2FzZSBQQlNfU09MSUQ6CisJCWNhc2UgUEJTX1VOREVSTElORUQ6CisJCQl7CisJCQkJc0NvbG9yID0gQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oY29sb3IsRkFMU0UpOworCQkJCWlmIChzQ29sb3IuR2V0TGVuZ3RoKCkgPiAwKQorCQkJCXsKKwkJCQkJc0FwcFN0cmVhbSA8PCAicVxuIiA8PCBmV2lkdGggPDwgIiB3XG4iIDw8IHNDb2xvciAKKwkJCQkJCTw8IENQV0xfVXRpbHM6OkdldEFQX0NpcmNsZShDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdChyZWN0LGZXaWR0aCAvIDIuMGYpKQorCQkJCQkJPDwgIiBTXG5RXG4iOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBCU19EQVNIOgorCQkJeworCQkJCXNDb2xvciA9IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKGNvbG9yLEZBTFNFKTsKKwkJCQlpZiAoc0NvbG9yLkdldExlbmd0aCgpID4gMCkKKwkJCQl7CisJCQkJCXNBcHBTdHJlYW0gPDwgInFcbiIgPDwgZldpZHRoIDw8ICIgd1xuIiAKKwkJCQkJCTw8ICJbIiA8PCBkYXNoLm5EYXNoIDw8ICIgIiA8PCBkYXNoLm5HYXAgPDwgIl0gIiA8PCBkYXNoLm5QaGFzZSA8PCAiIGRcbiIgCisJCQkJCQk8PCBzQ29sb3IgPDwgQ1BXTF9VdGlsczo6R2V0QVBfQ2lyY2xlKENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KHJlY3QsZldpZHRoIC8gMi4wZikpCisJCQkJCQk8PCAiIFNcblFcbiI7CisJCQkJfQkJCQkJCQorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUEJTX0JFVkVMRUQ6CisJCQl7CisJCQkJRlhfRkxPQVQgZkhhbGZXaWR0aCA9IGZXaWR0aCAvIDIuMGY7CisKKwkJCQlzQ29sb3IgPSBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjb2xvcixGQUxTRSk7CisJCQkJaWYgKHNDb2xvci5HZXRMZW5ndGgoKSA+IDApCisJCQkJeworCQkJCQlzQXBwU3RyZWFtIDw8ICJxXG4iIDw8IGZIYWxmV2lkdGggPDwgIiB3XG4iCisJCQkJCQk8PCBzQ29sb3IgPDwgQ1BXTF9VdGlsczo6R2V0QVBfQ2lyY2xlKHJlY3QpCisJCQkJCQk8PCAiIFNcblFcbiI7CisJCQkJfQkJCQkJCisKKwkJCQlzQ29sb3IgPSBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjckxlZnRUb3AsRkFMU0UpOworCQkJCWlmIChzQ29sb3IuR2V0TGVuZ3RoKCkgPiAwKQorCQkJCXsKKwkJCQkJc0FwcFN0cmVhbSA8PCAicVxuIiA8PCBmSGFsZldpZHRoIDw8ICIgd1xuIgorCQkJCQkJPDwgc0NvbG9yIDw8IENQV0xfVXRpbHM6OkdldEFQX0hhbGZDaXJjbGUoQ1BXTF9VdGlsczo6RGVmbGF0ZVJlY3QocmVjdCxmSGFsZldpZHRoICogMC43NWYpLFBXTF9QSS80LjBmKQorCQkJCQkJPDwgIiBTXG5RXG4iOworCQkJCX0JCisKKwkJCQlzQ29sb3IgPSBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjclJpZ2h0Qm90dG9tLEZBTFNFKTsKKwkJCQlpZiAoc0NvbG9yLkdldExlbmd0aCgpID4gMCkKKwkJCQl7CisJCQkJCXNBcHBTdHJlYW0gPDwgInFcbiIgPDwgZkhhbGZXaWR0aCA8PCAiIHdcbiIKKwkJCQkJCTw8IHNDb2xvciA8PCBDUFdMX1V0aWxzOjpHZXRBUF9IYWxmQ2lyY2xlKENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KHJlY3QsZkhhbGZXaWR0aCAqIDAuNzVmKSxQV0xfUEkqNS80LjBmKQorCQkJCQkJPDwgIiBTXG5RXG4iOworCQkJCX0JCisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQQlNfSU5TRVQ6CisJCQl7CisJCQkJRlhfRkxPQVQgZkhhbGZXaWR0aCA9IGZXaWR0aCAvIDIuMGY7CisKKwkJCQlzQ29sb3IgPSBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjb2xvcixGQUxTRSk7CisJCQkJaWYgKHNDb2xvci5HZXRMZW5ndGgoKSA+IDApCisJCQkJeworCQkJCQlzQXBwU3RyZWFtIDw8ICJxXG4iIDw8IGZIYWxmV2lkdGggPDwgIiB3XG4iCisJCQkJCQk8PCBzQ29sb3IgPDwgQ1BXTF9VdGlsczo6R2V0QVBfQ2lyY2xlKHJlY3QpCisJCQkJCQk8PCAiIFNcblFcbiI7CisJCQkJfQorCisJCQkJc0NvbG9yID0gQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oY3JMZWZ0VG9wLEZBTFNFKTsKKwkJCQlpZiAoc0NvbG9yLkdldExlbmd0aCgpID4gMCkKKwkJCQl7CisJCQkJCXNBcHBTdHJlYW0gPDwgInFcbiIgPDwgZkhhbGZXaWR0aCA8PCAiIHdcbiIKKwkJCQkJCTw8IHNDb2xvciA8PCBDUFdMX1V0aWxzOjpHZXRBUF9IYWxmQ2lyY2xlKENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KHJlY3QsZkhhbGZXaWR0aCAqIDAuNzVmKSxQV0xfUEkvNC4wZikKKwkJCQkJCTw8ICIgU1xuUVxuIjsKKwkJCQl9CQorCisJCQkJc0NvbG9yID0gQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oY3JSaWdodEJvdHRvbSxGQUxTRSk7CisJCQkJaWYgKHNDb2xvci5HZXRMZW5ndGgoKSA+IDApCisJCQkJeworCQkJCQlzQXBwU3RyZWFtIDw8ICJxXG4iIDw8IGZIYWxmV2lkdGggPDwgIiB3XG4iCisJCQkJCQk8PCBzQ29sb3IgPDwgQ1BXTF9VdGlsczo6R2V0QVBfSGFsZkNpcmNsZShDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdChyZWN0LGZIYWxmV2lkdGggKiAwLjc1ZiksUFdMX1BJKjUvNC4wZikKKwkJCQkJCTw8ICIgU1xuUVxuIjsKKwkJCQl9CQkJCQkJCisJCQl9CisJCQlicmVhazsKKwkJfQorCQkKKwkJc0FwcFN0cmVhbSA8PCAiUVxuIjsKKwl9CisKKwlyZXR1cm4gc0FwcFN0cmVhbS5HZXRCeXRlU3RyaW5nKCk7Cit9CisKK0NQV0xfQ29sb3IgQ1BXTF9VdGlsczo6U3Vic3RyYWN0Q29sb3IoY29uc3QgQ1BXTF9Db2xvciAmIHNDb2xvcixGWF9GTE9BVCBmQ29sb3JTdWIpCit7CisJQ1BXTF9Db2xvciBzUmV0OworCXNSZXQubkNvbG9yVHlwZSA9IHNDb2xvci5uQ29sb3JUeXBlOworCisJc3dpdGNoIChzQ29sb3IubkNvbG9yVHlwZSkKKwl7CisJY2FzZSBDT0xPUlRZUEVfVFJBTlNQQVJFTlQ6CisJCXNSZXQubkNvbG9yVHlwZSA9IENPTE9SVFlQRV9SR0I7CisJCXNSZXQuZkNvbG9yMSA9IFBXTF9NQVgoMSAtIGZDb2xvclN1YiwwLjBmKTsKKwkJc1JldC5mQ29sb3IyID0gUFdMX01BWCgxIC0gZkNvbG9yU3ViLDAuMGYpOworCQlzUmV0LmZDb2xvcjMgPSBQV0xfTUFYKDEgLSBmQ29sb3JTdWIsMC4wZik7CisJCWJyZWFrOworCWNhc2UgQ09MT1JUWVBFX1JHQjoKKwljYXNlIENPTE9SVFlQRV9HUkFZOgorCWNhc2UgQ09MT1JUWVBFX0NNWUs6CisJCXNSZXQuZkNvbG9yMSA9IFBXTF9NQVgoc0NvbG9yLmZDb2xvcjEgLSBmQ29sb3JTdWIsMC4wZik7CisJCXNSZXQuZkNvbG9yMiA9IFBXTF9NQVgoc0NvbG9yLmZDb2xvcjIgLSBmQ29sb3JTdWIsMC4wZik7CisJCXNSZXQuZkNvbG9yMyA9IFBXTF9NQVgoc0NvbG9yLmZDb2xvcjMgLSBmQ29sb3JTdWIsMC4wZik7CisJCXNSZXQuZkNvbG9yNCA9IFBXTF9NQVgoc0NvbG9yLmZDb2xvcjQgLSBmQ29sb3JTdWIsMC4wZik7CisJCWJyZWFrOworCX0JCisKKwlyZXR1cm4gc1JldDsKK30KKworQ1BXTF9Db2xvciBDUFdMX1V0aWxzOjpEZXZpZGVDb2xvcihjb25zdCBDUFdMX0NvbG9yICYgc0NvbG9yLEZYX0ZMT0FUIGZDb2xvckRldmlkZSkKK3sKKwlDUFdMX0NvbG9yIHNSZXQ7CisJc1JldC5uQ29sb3JUeXBlID0gc0NvbG9yLm5Db2xvclR5cGU7CisKKwlzd2l0Y2ggKHNDb2xvci5uQ29sb3JUeXBlKQorCXsKKwljYXNlIENPTE9SVFlQRV9UUkFOU1BBUkVOVDoKKwkJc1JldC5uQ29sb3JUeXBlID0gQ09MT1JUWVBFX1JHQjsKKwkJc1JldC5mQ29sb3IxID0gMSAvIGZDb2xvckRldmlkZTsKKwkJc1JldC5mQ29sb3IyID0gMSAvIGZDb2xvckRldmlkZTsKKwkJc1JldC5mQ29sb3IzID0gMSAvIGZDb2xvckRldmlkZTsKKwkJYnJlYWs7CisJY2FzZSBDT0xPUlRZUEVfUkdCOgorCWNhc2UgQ09MT1JUWVBFX0dSQVk6CisJY2FzZSBDT0xPUlRZUEVfQ01ZSzoKKwkJc1JldCA9IHNDb2xvcjsKKwkJc1JldC5mQ29sb3IxIC89IGZDb2xvckRldmlkZTsKKwkJc1JldC5mQ29sb3IyIC89IGZDb2xvckRldmlkZTsKKwkJc1JldC5mQ29sb3IzIC89IGZDb2xvckRldmlkZTsKKwkJc1JldC5mQ29sb3I0IC89IGZDb2xvckRldmlkZTsKKwkJYnJlYWs7CisJfQkKKworCXJldHVybiBzUmV0OworfQorCitDRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRBcHBTdHJlYW1fQ2hlY2soY29uc3QgQ1BERl9SZWN0ICYgcmNCQm94LCBjb25zdCBDUFdMX0NvbG9yICYgY3JUZXh0KQoreworCUNGWF9CeXRlVGV4dEJ1ZiBzQVA7CisJc0FQIDw8ICJxXG4iIDw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKGNyVGV4dCxUUlVFKSA8PCBDUFdMX1V0aWxzOjpHZXRBUF9DaGVjayhyY0JCb3gpIDw8ICJmXG5RXG4iOworCXJldHVybiBzQVAuR2V0Qnl0ZVN0cmluZygpOworfQorCitDRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRBcHBTdHJlYW1fQ2lyY2xlKGNvbnN0IENQREZfUmVjdCAmIHJjQkJveCwgY29uc3QgQ1BXTF9Db2xvciAmIGNyVGV4dCkKK3sKKwlDRlhfQnl0ZVRleHRCdWYgc0FQOworCXNBUCA8PCAicVxuIiA8PCBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjclRleHQsVFJVRSkgPDwgQ1BXTF9VdGlsczo6R2V0QVBfQ2lyY2xlKHJjQkJveCkgPDwgImZcblFcbiI7CisJcmV0dXJuIHNBUC5HZXRCeXRlU3RyaW5nKCk7Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldEFwcFN0cmVhbV9Dcm9zcyhjb25zdCBDUERGX1JlY3QgJiByY0JCb3gsIGNvbnN0IENQV0xfQ29sb3IgJiBjclRleHQpCit7CisJQ0ZYX0J5dGVUZXh0QnVmIHNBUDsKKwlzQVAgPDwgInFcbiIgPDwgQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oY3JUZXh0LEZBTFNFKSA8PCBDUFdMX1V0aWxzOjpHZXRBUF9Dcm9zcyhyY0JCb3gpIDw8ICJTXG5RXG4iOworCXJldHVybiBzQVAuR2V0Qnl0ZVN0cmluZygpOworfQorCitDRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRBcHBTdHJlYW1fRGlhbW9uZChjb25zdCBDUERGX1JlY3QgJiByY0JCb3gsIGNvbnN0IENQV0xfQ29sb3IgJiBjclRleHQpCit7CisJQ0ZYX0J5dGVUZXh0QnVmIHNBUDsKKwlzQVAgPDwgInFcbjEgd1xuIiA8PCBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjclRleHQsVFJVRSkgPDwgQ1BXTF9VdGlsczo6R2V0QVBfRGlhbW9uZChyY0JCb3gpIDw8ICJmXG5RXG4iOworCXJldHVybiBzQVAuR2V0Qnl0ZVN0cmluZygpOworfQorCitDRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRBcHBTdHJlYW1fU3F1YXJlKGNvbnN0IENQREZfUmVjdCAmIHJjQkJveCwgY29uc3QgQ1BXTF9Db2xvciAmIGNyVGV4dCkKK3sKKwlDRlhfQnl0ZVRleHRCdWYgc0FQOworCXNBUCA8PCAicVxuIiA8PCBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjclRleHQsVFJVRSkgPDwgQ1BXTF9VdGlsczo6R2V0QVBfU3F1YXJlKHJjQkJveCkgPDwgImZcblFcbiI7CisJcmV0dXJuIHNBUC5HZXRCeXRlU3RyaW5nKCk7Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldEFwcFN0cmVhbV9TdGFyKGNvbnN0IENQREZfUmVjdCAmIHJjQkJveCwgY29uc3QgQ1BXTF9Db2xvciAmIGNyVGV4dCkKK3sKKwlDRlhfQnl0ZVRleHRCdWYgc0FQOworCXNBUCA8PCAicVxuIiA8PCBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjclRleHQsVFJVRSkgPDwgQ1BXTF9VdGlsczo6R2V0QVBfU3RhcihyY0JCb3gpIDw8ICJmXG5RXG4iOworCXJldHVybiBzQVAuR2V0Qnl0ZVN0cmluZygpOworfQorCitDRlhfQnl0ZVN0cmluZyBDUFdMX1V0aWxzOjpHZXRDaGVja0JveEFwcFN0cmVhbShjb25zdCBDUERGX1JlY3QgJiByY0JCb3gsCisJCQkJCQkJCQkJCQkJRlhfSU5UMzIgblN0eWxlLAorCQkJCQkJCQkJCQkJCWNvbnN0IENQV0xfQ29sb3IgJiBjclRleHQpCit7CisJQ1BERl9SZWN0IHJjQ2VudGVyID0gR2V0Q2VudGVyU3F1YXJlKHJjQkJveCk7CisJc3dpdGNoIChuU3R5bGUpCisJeworCWRlZmF1bHQ6CisJY2FzZSBQQ1NfQ0hFQ0s6CisJCXJldHVybiBHZXRBcHBTdHJlYW1fQ2hlY2socmNDZW50ZXIsY3JUZXh0KTsKKwljYXNlIFBDU19DSVJDTEU6CisJCXJldHVybiBHZXRBcHBTdHJlYW1fQ2lyY2xlKFNjYWxlUmVjdChyY0NlbnRlciwyLjBmLzMuMGYpLGNyVGV4dCk7CisJY2FzZSBQQ1NfQ1JPU1M6CisJCXJldHVybiBHZXRBcHBTdHJlYW1fQ3Jvc3MocmNDZW50ZXIsY3JUZXh0KTsKKwljYXNlIFBDU19ESUFNT05EOgorCQlyZXR1cm4gR2V0QXBwU3RyZWFtX0RpYW1vbmQoU2NhbGVSZWN0KHJjQ2VudGVyLDIuMGYvMy4wZiksY3JUZXh0KTsJCQorCWNhc2UgUENTX1NRVUFSRToKKwkJcmV0dXJuIEdldEFwcFN0cmVhbV9TcXVhcmUoU2NhbGVSZWN0KHJjQ2VudGVyLDIuMGYvMy4wZiksY3JUZXh0KTsKKwljYXNlIFBDU19TVEFSOgorCQlyZXR1cm4gR2V0QXBwU3RyZWFtX1N0YXIoU2NhbGVSZWN0KHJjQ2VudGVyLDIuMGYvMy4wZiksY3JUZXh0KTsKKwl9Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldFJhZGlvQnV0dG9uQXBwU3RyZWFtKGNvbnN0IENQREZfUmVjdCAmIHJjQkJveCwKKwkJCQkJCQkJCQkJCQlGWF9JTlQzMiBuU3R5bGUsCisJCQkJCQkJCQkJCQkJY29uc3QgQ1BXTF9Db2xvciAmIGNyVGV4dCkKK3sKKwlDUERGX1JlY3QgcmNDZW50ZXIgPSBHZXRDZW50ZXJTcXVhcmUocmNCQm94KTsKKwlzd2l0Y2ggKG5TdHlsZSkKKwl7CisJZGVmYXVsdDoKKwljYXNlIFBDU19DSEVDSzoKKwkJcmV0dXJuIEdldEFwcFN0cmVhbV9DaGVjayhyY0NlbnRlcixjclRleHQpOworCWNhc2UgUENTX0NJUkNMRToKKwkJcmV0dXJuIEdldEFwcFN0cmVhbV9DaXJjbGUoU2NhbGVSZWN0KHJjQ2VudGVyLDEuMGYvMi4wZiksY3JUZXh0KTsKKwljYXNlIFBDU19DUk9TUzoKKwkJcmV0dXJuIEdldEFwcFN0cmVhbV9Dcm9zcyhyY0NlbnRlcixjclRleHQpOworCWNhc2UgUENTX0RJQU1PTkQ6CisJCXJldHVybiBHZXRBcHBTdHJlYW1fRGlhbW9uZChTY2FsZVJlY3QocmNDZW50ZXIsMi4wZi8zLjBmKSxjclRleHQpOwkJCisJY2FzZSBQQ1NfU1FVQVJFOgorCQlyZXR1cm4gR2V0QXBwU3RyZWFtX1NxdWFyZShTY2FsZVJlY3QocmNDZW50ZXIsMi4wZi8zLjBmKSxjclRleHQpOworCWNhc2UgUENTX1NUQVI6CisJCXJldHVybiBHZXRBcHBTdHJlYW1fU3RhcihTY2FsZVJlY3QocmNDZW50ZXIsMi4wZi8zLjBmKSxjclRleHQpOworCX0KK30KKworQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9VdGlsczo6R2V0RHJvcEJ1dHRvbkFwcFN0cmVhbShjb25zdCBDUERGX1JlY3QgJiByY0JCb3gpCit7CisJQ0ZYX0J5dGVUZXh0QnVmIHNBcHBTdHJlYW07CisKKwlpZiAoIXJjQkJveC5Jc0VtcHR5KCkpCisJeworCQlzQXBwU3RyZWFtIDw8ICJxXG4iIDw8IENQV0xfVXRpbHM6OkdldENvbG9yQXBwU3RyZWFtKENQV0xfQ29sb3IoQ09MT1JUWVBFX1JHQiwyMjAuMGYvMjU1LjBmLDIyMC4wZi8yNTUuMGYsMjIwLjBmLzI1NS4wZiksVFJVRSk7CisJCXNBcHBTdHJlYW0gPDwgcmNCQm94LmxlZnQgPDwgIiAiIDw8IHJjQkJveC5ib3R0b20gPDwgIiAiIAorCQkJCTw8IHJjQkJveC5yaWdodCAtIHJjQkJveC5sZWZ0IDw8ICIgIiA8PCByY0JCb3gudG9wIC0gcmNCQm94LmJvdHRvbSA8PCAiIHJlIGZcbiI7CisJCXNBcHBTdHJlYW0gPDwgIlFcbiI7CisKKwkJc0FwcFN0cmVhbSA8PCAicVxuIiA8PCAKKwkJCUNQV0xfVXRpbHM6OkdldEJvcmRlckFwcFN0cmVhbShyY0JCb3gsMixDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLDApLENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMSksQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwwLjUpLFBCU19CRVZFTEVELENQV0xfRGFzaCgzLDAsMCkpIAorCQkJPDwgIlFcbiI7CisKKwkJQ1BERl9Qb2ludCBwdENlbnRlciA9IENQREZfUG9pbnQoKHJjQkJveC5sZWZ0ICsgcmNCQm94LnJpZ2h0KS8yLChyY0JCb3gudG9wICsgcmNCQm94LmJvdHRvbSkvMik7CisJCWlmIChJc0Zsb2F0QmlnZ2VyKHJjQkJveC5yaWdodCAtIHJjQkJveC5sZWZ0LDYpICYmIElzRmxvYXRCaWdnZXIocmNCQm94LnRvcCAtIHJjQkJveC5ib3R0b20sNikpCisJCXsKKwkJCXNBcHBTdHJlYW0gPDwgInFcbiIgPDwgIiAwIGdcbiI7CisJCQlzQXBwU3RyZWFtIDw8IHB0Q2VudGVyLnggLSAzIDw8ICIgIiA8PCBwdENlbnRlci55ICsgMS41ZiA8PCAiIG1cbiI7CisJCQlzQXBwU3RyZWFtIDw8IHB0Q2VudGVyLnggKyAzIDw8ICIgIiA8PCBwdENlbnRlci55ICsgMS41ZiA8PCAiIGxcbiI7CisJCQlzQXBwU3RyZWFtIDw8IHB0Q2VudGVyLnggPDwgIiAiIDw8IHB0Q2VudGVyLnkgLSAxLjVmIDw8ICIgbFxuIjsKKwkJCXNBcHBTdHJlYW0gPDwgcHRDZW50ZXIueCAtIDMgPDwgIiAiIDw8IHB0Q2VudGVyLnkgKyAxLjVmIDw8ICIgbCBmXG4iOworCQkJc0FwcFN0cmVhbSA8PCAiUVxuIjsKKwkJfQorCX0KKworCXJldHVybiBzQXBwU3RyZWFtLkdldEJ5dGVTdHJpbmcoKTsKK30KKwordm9pZCBDUFdMX1V0aWxzOjpDb252ZXJ0Q01ZSzJHUkFZKEZYX0ZMT0FUIGRDLEZYX0ZMT0FUIGRNLEZYX0ZMT0FUIGRZLEZYX0ZMT0FUIGRLLEZYX0ZMT0FUICZkR3JheSkKK3sKKwlpZiAoZEM8MCB8fCBkQz4xIHx8IGRNPDAgfHwgZE0+MSB8fCBkWSA8IDAgfHwgZFkgPjEgfHwgZEsgPCAwIHx8IGRLID4xKQorCQlyZXR1cm47CisJZEdyYXkgPSAxLjBmIC0gRlhfTUlOKDEuMGYsMC4zZipkQyswLjU5ZiAqIGRNICsgMC4xMWYqZFkrZEspOworfQorCit2b2lkIENQV0xfVXRpbHM6OkNvbnZlcnRHUkFZMkNNWUsoRlhfRkxPQVQgZEdyYXksRlhfRkxPQVQgICZkQyxGWF9GTE9BVCAmZE0sRlhfRkxPQVQgJmRZLEZYX0ZMT0FUICZkSykKK3sKKwlpZiAoZEdyYXkgPDAgfHwgZEdyYXkgPjEpCisJCXJldHVybjsKKwlkQyA9IDAuMGY7CisJZE0gPSAwLjBmOworCWRZID0gMC4wZjsKKwlkSyA9IDEuMGYtZEdyYXk7Cit9CisKK3ZvaWQgQ1BXTF9VdGlsczo6Q29udmVydEdSQVkyUkdCKEZYX0ZMT0FUIGRHcmF5LEZYX0ZMT0FUICZkUixGWF9GTE9BVCAmZEcsRlhfRkxPQVQgJmRCKQoreworCWlmIChkR3JheSA8MCB8fCBkR3JheSA+MSkKKwkJcmV0dXJuOworCWRSID0gZEdyYXk7CisJZEcgPSBkR3JheTsKKwlkQiA9IGRHcmF5OworfQorCit2b2lkIENQV0xfVXRpbHM6OkNvbnZlcnRSR0IyR1JBWShGWF9GTE9BVCBkUixGWF9GTE9BVCBkRyxGWF9GTE9BVCBkQixGWF9GTE9BVCAmZEdyYXkpCit7CisJaWYgKGRSPDAgfHwgZFI+MSB8fCBkRzwwIHx8IGRHID4gMCB8fCBkQiA8IDAgfHwgZEIgPjEpCisJCXJldHVybjsKKwlkR3JheSA9IDAuM2YqZFIrMC41OWYqZEcrMC4xMWYqZEI7Cit9CisKK3ZvaWQgQ1BXTF9VdGlsczo6Q29udmVydENNWUsyUkdCKEZYX0ZMT0FUIGRDLEZYX0ZMT0FUIGRNLEZYX0ZMT0FUIGRZLEZYX0ZMT0FUIGRLLEZYX0ZMT0FUICZkUixGWF9GTE9BVCAmZEcsRlhfRkxPQVQgJmRCKQoreworCWlmIChkQyA8MCB8fCBkQz4xIHx8IGRNIDwgMCB8fCBkTSA+IDEgfHwgZFkgPCAwIHx8IGRZID4gMSB8fCBkSyA8IDAgfHwgZEsgPiAxICkKKwkJcmV0dXJuOworCWRSID0gMS4wZiAtIEZYX01JTigxLjBmLCBkQyArIGRLKTsKKwlkRyA9IDEuMGYgLSBGWF9NSU4oMS4wZiwgZE0gKyBkSyk7CisJZEIgPSAxLjBmIC0gRlhfTUlOKDEuMGYsIGRZICsgZEspOworfQorCit2b2lkIENQV0xfVXRpbHM6OkNvbnZlcnRSR0IyQ01ZSyhGWF9GTE9BVCBkUixGWF9GTE9BVCBkRyxGWF9GTE9BVCBkQixGWF9GTE9BVCAmZEMsRlhfRkxPQVQgJmRNLEZYX0ZMT0FUICZkWSxGWF9GTE9BVCAmZEspCit7CisJaWYgKGRSPDAgfHwgZFI+MSB8fCBkRzwwIHx8IGRHPjEgfHwgZEI8MCB8fCBkQj4xKQorCQlyZXR1cm47CisKKwlkQyA9IDEuMGYgLSBkUjsKKwlkTSA9IDEuMGYgLSBkRzsKKwlkWSA9IDEuMGYgLSBkQjsKKwlkSyA9IEZYX01JTihkQywgRlhfTUlOKGRNLCBkWSkpOworfQorCit2b2lkIENQV0xfVXRpbHM6OlBXTENvbG9yVG9BUkdCKGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yLCBGWF9JTlQzMiYgYWxwaGEsIEZYX0ZMT0FUJiByZWQsIEZYX0ZMT0FUJiBncmVlbiwgRlhfRkxPQVQmIGJsdWUpCit7CisJc3dpdGNoIChjb2xvci5uQ29sb3JUeXBlKQorCXsKKwljYXNlIENPTE9SVFlQRV9UUkFOU1BBUkVOVDoKKwkJeworCQkJYWxwaGEgPSAwOworCQl9CisJCWJyZWFrOworCWNhc2UgQ09MT1JUWVBFX0dSQVk6CisJCXsKKwkJCUNvbnZlcnRHUkFZMlJHQihjb2xvci5mQ29sb3IxLCByZWQsIGdyZWVuLCBibHVlKTsKKwkJfQorCQlicmVhazsKKwljYXNlIENPTE9SVFlQRV9SR0I6CisJCXsKKwkJCXJlZCA9IGNvbG9yLmZDb2xvcjE7CisJCQlncmVlbiA9IGNvbG9yLmZDb2xvcjI7CisJCQlibHVlID0gY29sb3IuZkNvbG9yMzsKKwkJfQorCQlicmVhazsKKwljYXNlIENPTE9SVFlQRV9DTVlLOgorCQl7CisJCQlDb252ZXJ0Q01ZSzJSR0IoY29sb3IuZkNvbG9yMSwgY29sb3IuZkNvbG9yMiwgY29sb3IuZkNvbG9yMywgY29sb3IuZkNvbG9yNCwKKwkJCQlyZWQsIGdyZWVuLCBibHVlKTsKKwkJfQorCQlicmVhazsKKwl9Cit9CisKK0ZYX0NPTE9SUkVGIENQV0xfVXRpbHM6OlBXTENvbG9yVG9GWENvbG9yKGNvbnN0IENQV0xfQ29sb3ImIGNvbG9yLCBGWF9JTlQzMiBuVHJhbnNwYXJhbmN5KQoreworCUZYX0lOVDMyIG5BbHBoYSA9IG5UcmFuc3BhcmFuY3k7CisJRlhfRkxPQVQgZFJlZCA9IDA7CisJRlhfRkxPQVQgZEdyZWVuID0gMDsKKwlGWF9GTE9BVCBkQmx1ZSA9IDA7CisKKwlQV0xDb2xvclRvQVJHQihjb2xvciwgbkFscGhhLCBkUmVkLCBkR3JlZW4sIGRCbHVlKTsKKworCXJldHVybiBBcmdiRW5jb2RlKG5BbHBoYSwgKEZYX0lOVDMyKShkUmVkKjI1NSksIChGWF9JTlQzMikoZEdyZWVuKjI1NSksIChGWF9JTlQzMikoZEJsdWUqMjU1KSk7Cit9CisKK3ZvaWQgQ1BXTF9VdGlsczo6RHJhd0ZpbGxSZWN0KENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsY29uc3QgQ1BERl9SZWN0ICYgcmVjdCwKKwkJCQkJCQkgIGNvbnN0IEZYX0NPTE9SUkVGICYgY29sb3IpCit7CisJQ0ZYX1BhdGhEYXRhIHBhdGg7CisJQ1BERl9SZWN0IHJjVGVtcChyZWN0KTsJCisJcGF0aC5BcHBlbmRSZWN0KHJjVGVtcC5sZWZ0LHJjVGVtcC5ib3R0b20scmNUZW1wLnJpZ2h0LHJjVGVtcC50b3ApOworCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoLCBwVXNlcjJEZXZpY2UsIE5VTEwsIGNvbG9yLCAwLCBGWEZJTExfV0lORElORyk7Cit9CisKK3ZvaWQgQ1BXTF9VdGlsczo6RHJhd0ZpbGxBcmVhKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsCisJCQkJCQkJY29uc3QgQ1BERl9Qb2ludCogcFB0cywgRlhfSU5UMzIgbkNvdW50LCBjb25zdCBGWF9DT0xPUlJFRiYgY29sb3IpCit7CisJQ0ZYX1BhdGhEYXRhIHBhdGg7CisJcGF0aC5TZXRQb2ludENvdW50KG5Db3VudCk7CisKKwlwYXRoLlNldFBvaW50KDAsIHBQdHNbMF0ueCwgcFB0c1swXS55LCBGWFBUX01PVkVUTyk7CisJZm9yIChGWF9JTlQzMiBpPTE7IGk8bkNvdW50OyBpKyspCisJCXBhdGguU2V0UG9pbnQoaSwgcFB0c1tpXS54LCBwUHRzW2ldLnksIEZYUFRfTElORVRPKTsKKworCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoLCBwVXNlcjJEZXZpY2UsIE5VTEwsIGNvbG9yLCAwLCBGWEZJTExfQUxURVJOQVRFKTsKK30KKwordm9pZCBDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlUmVjdChDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlLGNvbnN0IENQREZfUmVjdCAmIHJlY3QsCisJCQkJCQkJICBjb25zdCBGWF9DT0xPUlJFRiAmIGNvbG9yLCBGWF9GTE9BVCBmV2lkdGgpCit7CisJQ0ZYX1BhdGhEYXRhIHBhdGg7CisJQ1BERl9SZWN0IHJjVGVtcChyZWN0KTsJCisJcGF0aC5BcHBlbmRSZWN0KHJjVGVtcC5sZWZ0LHJjVGVtcC5ib3R0b20scmNUZW1wLnJpZ2h0LHJjVGVtcC50b3ApOworCQorCUNGWF9HcmFwaFN0YXRlRGF0YSBnc2Q7CisJZ3NkLm1fTGluZVdpZHRoID0gZldpZHRoOworCisJcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgJmdzZCwgMCwgY29sb3IsIEZYRklMTF9BTFRFUk5BVEUpOworfQorCit2b2lkIENQV0xfVXRpbHM6OkRyYXdTdHJva2VMaW5lKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsCisJCQkJCQkJY29uc3QgQ1BERl9Qb2ludCAmIHB0TW92ZVRvLCBjb25zdCBDUERGX1BvaW50ICYgcHRMaW5lVG8sIGNvbnN0IEZYX0NPTE9SUkVGICYgY29sb3IsIEZYX0ZMT0FUIGZXaWR0aCkKK3sKKwlDRlhfUGF0aERhdGEgcGF0aDsKKwlwYXRoLlNldFBvaW50Q291bnQoMik7CisJcGF0aC5TZXRQb2ludCgwLCBwdE1vdmVUby54LCBwdE1vdmVUby55LCBGWFBUX01PVkVUTyk7CisJcGF0aC5TZXRQb2ludCgxLCBwdExpbmVUby54LCBwdExpbmVUby55LCBGWFBUX0xJTkVUTyk7CisKKwlDRlhfR3JhcGhTdGF0ZURhdGEgZ3NkOworCWdzZC5tX0xpbmVXaWR0aCA9IGZXaWR0aDsKKworCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoLCBwVXNlcjJEZXZpY2UsICZnc2QsIDAsIGNvbG9yLCBGWEZJTExfQUxURVJOQVRFKTsKK30KKwordm9pZCBDUFdMX1V0aWxzOjpEcmF3RmlsbFJlY3QoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSxjb25zdCBDUERGX1JlY3QgJiByZWN0LAorCQkJCQkJCSAgY29uc3QgQ1BXTF9Db2xvciAmIGNvbG9yLCBGWF9JTlQzMiBuVHJhbnNwYXJhbmN5KQoreworCUNQV0xfVXRpbHM6OkRyYXdGaWxsUmVjdChwRGV2aWNlLHBVc2VyMkRldmljZSxyZWN0LFBXTENvbG9yVG9GWENvbG9yKGNvbG9yLG5UcmFuc3BhcmFuY3kpKTsKK30KKwordm9pZCBDUFdMX1V0aWxzOjpEcmF3U2hhZG93KENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsCisJCQkJCQkJCQkJCQkJCUZYX0JPT0wgYlZlcnRpY2FsLCBGWF9CT09MIGJIb3Jpem9udGFsLCBDUERGX1JlY3QgcmVjdCwKKwkJCQkJCQkJCQkJCQkJRlhfSU5UMzIgblRyYW5zcGFyYW5jeSwgRlhfSU5UMzIgblN0YXJ0R3JheSwgRlhfSU5UMzIgbkVuZEdyYXkpCit7CisJRlhfRkxPQVQgZlN0ZXBHcmF5ID0gMS4wZjsKKworCWlmIChiVmVydGljYWwpCisJeworCQlmU3RlcEdyYXkgPSAobkVuZEdyYXkgLSBuU3RhcnRHcmF5KSAvIHJlY3QuSGVpZ2h0KCk7CisKKwkJZm9yIChGWF9GTE9BVCBmeT1yZWN0LmJvdHRvbSswLjVmOyBmeTw9cmVjdC50b3AtMC41ZjsgZnkrPTEuMGYpCisJCXsJCQkKKwkJCUZYX0lOVDMyIG5HcmF5ID0gblN0YXJ0R3JheSArIChGWF9JTlQzMikoZlN0ZXBHcmF5ICogKGZ5LXJlY3QuYm90dG9tKSk7CisJCQlDUFdMX1V0aWxzOjpEcmF3U3Ryb2tlTGluZShwRGV2aWNlLCBwVXNlcjJEZXZpY2UsIENQREZfUG9pbnQocmVjdC5sZWZ0LCBmeSksCisJCQkJQ1BERl9Qb2ludChyZWN0LnJpZ2h0LCBmeSksIEFyZ2JFbmNvZGUoblRyYW5zcGFyYW5jeSwgbkdyYXksIG5HcmF5LCBuR3JheSksIDEuNWYpOworCQl9CisJfQorCisJaWYgKGJIb3Jpem9udGFsKQorCXsKKwkJZlN0ZXBHcmF5ID0gKG5FbmRHcmF5IC0gblN0YXJ0R3JheSkgLyByZWN0LldpZHRoKCk7CisKKwkJZm9yIChGWF9GTE9BVCBmeD1yZWN0LmxlZnQrMC41ZjsgZng8PXJlY3QucmlnaHQtMC41ZjsgZngrPTEuMGYpCisJCXsJCQkKKwkJCUZYX0lOVDMyIG5HcmF5ID0gblN0YXJ0R3JheSArIChGWF9JTlQzMikoZlN0ZXBHcmF5ICogKGZ4LXJlY3QubGVmdCkpOworCQkJQ1BXTF9VdGlsczo6RHJhd1N0cm9rZUxpbmUocERldmljZSwgcFVzZXIyRGV2aWNlLCBDUERGX1BvaW50KGZ4LCByZWN0LmJvdHRvbSksCisJCQkJQ1BERl9Qb2ludChmeCwgcmVjdC50b3ApLCBBcmdiRW5jb2RlKG5UcmFuc3BhcmFuY3ksIG5HcmF5LCBuR3JheSwgbkdyYXkpLCAxLjVmKTsKKwkJfQorCX0KK30KKwordm9pZCBDUFdMX1V0aWxzOjpEcmF3Qm9yZGVyKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UsCisJCQkJCQkJCQkJCQljb25zdCBDUERGX1JlY3QgJiByZWN0LCBGWF9GTE9BVCBmV2lkdGgsCisJCQkJCQkJCQkJCQljb25zdCBDUFdMX0NvbG9yICYgY29sb3IsIGNvbnN0IENQV0xfQ29sb3IgJiBjckxlZnRUb3AsIGNvbnN0IENQV0xfQ29sb3IgJiBjclJpZ2h0Qm90dG9tLAorCQkJCQkJCQkJCQkJRlhfSU5UMzIgblN0eWxlLCBjb25zdCBDUFdMX0Rhc2ggJiBkYXNoLCBGWF9JTlQzMiBuVHJhbnNwYXJhbmN5KQoreworCUZYX0ZMT0FUIGZMZWZ0ID0gcmVjdC5sZWZ0OworCUZYX0ZMT0FUIGZSaWdodCA9IHJlY3QucmlnaHQ7CisJRlhfRkxPQVQgZlRvcCA9IHJlY3QudG9wOworCUZYX0ZMT0FUIGZCb3R0b20gPSByZWN0LmJvdHRvbTsKKworCWlmIChmV2lkdGggPiAwLjBmKQorCXsKKwkJRlhfRkxPQVQgZkhhbGZXaWR0aCA9IGZXaWR0aCAvIDIuMGY7CisKKwkJc3dpdGNoIChuU3R5bGUpCisJCXsKKwkJZGVmYXVsdDoKKwkJY2FzZSBQQlNfU09MSUQ6CisJCQl7CisJCQkJQ0ZYX1BhdGhEYXRhIHBhdGg7CisJCQkJcGF0aC5BcHBlbmRSZWN0KGZMZWZ0LCBmQm90dG9tLCBmUmlnaHQsIGZUb3ApOworCQkJCXBhdGguQXBwZW5kUmVjdChmTGVmdCArIGZXaWR0aCwgZkJvdHRvbSArIGZXaWR0aCwgZlJpZ2h0IC0gZldpZHRoLCBmVG9wIC0gZldpZHRoKTsKKwkJCQlwRGV2aWNlLT5EcmF3UGF0aCgmcGF0aCwgcFVzZXIyRGV2aWNlLCBOVUxMLCBQV0xDb2xvclRvRlhDb2xvcihjb2xvcixuVHJhbnNwYXJhbmN5KSwgMCwgRlhGSUxMX0FMVEVSTkFURSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQQlNfREFTSDoKKwkJCXsKKwkJCQlDRlhfUGF0aERhdGEgcGF0aDsKKworCQkJCXBhdGguU2V0UG9pbnRDb3VudCg1KTsKKwkJCQlwYXRoLlNldFBvaW50KDAsIGZMZWZ0ICsgZldpZHRoIC8gMi4wZiwgZkJvdHRvbSArIGZXaWR0aCAvIDIuMGYsIEZYUFRfTU9WRVRPKTsKKwkJCQlwYXRoLlNldFBvaW50KDEsIGZMZWZ0ICsgZldpZHRoIC8gMi4wZiwgZlRvcCAtIGZXaWR0aCAvIDIuMGYsIEZYUFRfTElORVRPKTsKKwkJCQlwYXRoLlNldFBvaW50KDIsIGZSaWdodCAtIGZXaWR0aCAvIDIuMGYsIGZUb3AgLSBmV2lkdGggLyAyLjBmLCBGWFBUX0xJTkVUTyk7CisJCQkJcGF0aC5TZXRQb2ludCgzLCBmUmlnaHQgLSBmV2lkdGggLyAyLjBmLCBmQm90dG9tICsgZldpZHRoIC8gMi4wZiwgRlhQVF9MSU5FVE8pOworCQkJCXBhdGguU2V0UG9pbnQoNCwgZkxlZnQgKyBmV2lkdGggLyAyLjBmLCBmQm90dG9tICsgZldpZHRoIC8gMi4wZiwgRlhQVF9MSU5FVE8pOworCisJCQkJQ0ZYX0dyYXBoU3RhdGVEYXRhIGdzZDsKKwkJCQlnc2QuU2V0RGFzaENvdW50KDIpOwkJCQkKKwkJCQlnc2QubV9EYXNoQXJyYXlbMF0gPSAzLjBmOworCQkJCWdzZC5tX0Rhc2hBcnJheVsxXSA9IDMuMGY7CisJCQkJZ3NkLm1fRGFzaFBoYXNlID0gMDsJCisJCQkJCisJCQkJZ3NkLm1fTGluZVdpZHRoID0gZldpZHRoOworCQkJCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoLCBwVXNlcjJEZXZpY2UsICZnc2QsIDAsIFBXTENvbG9yVG9GWENvbG9yKGNvbG9yLG5UcmFuc3BhcmFuY3kpLCBGWEZJTExfV0lORElORyk7CQkJCQorCQkJfQkJCQorCQkJYnJlYWs7CisJCWNhc2UgUEJTX0JFVkVMRUQ6CisJCWNhc2UgUEJTX0lOU0VUOgkKKwkJCXsKKwkJCQlDRlhfR3JhcGhTdGF0ZURhdGEgZ3NkOworCQkJCWdzZC5tX0xpbmVXaWR0aCA9IGZIYWxmV2lkdGg7CisKKwkJCQlDRlhfUGF0aERhdGEgcGF0aExUOworCisJCQkJcGF0aExULlNldFBvaW50Q291bnQoNyk7CisJCQkJcGF0aExULlNldFBvaW50KDAsIGZMZWZ0ICsgZkhhbGZXaWR0aCwgZkJvdHRvbSArIGZIYWxmV2lkdGgsIEZYUFRfTU9WRVRPKTsKKwkJCQlwYXRoTFQuU2V0UG9pbnQoMSwgZkxlZnQgKyBmSGFsZldpZHRoLCBmVG9wIC0gZkhhbGZXaWR0aCwgRlhQVF9MSU5FVE8pOworCQkJCXBhdGhMVC5TZXRQb2ludCgyLCBmUmlnaHQgLSBmSGFsZldpZHRoLCBmVG9wIC0gZkhhbGZXaWR0aCwgRlhQVF9MSU5FVE8pOworCQkJCXBhdGhMVC5TZXRQb2ludCgzLCBmUmlnaHQgLSBmSGFsZldpZHRoICogMiwgZlRvcCAtIGZIYWxmV2lkdGggKiAyLCBGWFBUX0xJTkVUTyk7CisJCQkJcGF0aExULlNldFBvaW50KDQsIGZMZWZ0ICsgZkhhbGZXaWR0aCAqIDIsIGZUb3AgLSBmSGFsZldpZHRoICogMiwgRlhQVF9MSU5FVE8pOworCQkJCXBhdGhMVC5TZXRQb2ludCg1LCBmTGVmdCArIGZIYWxmV2lkdGggKiAyLCBmQm90dG9tICsgZkhhbGZXaWR0aCAqIDIsIEZYUFRfTElORVRPKTsKKwkJCQlwYXRoTFQuU2V0UG9pbnQoNiwgZkxlZnQgKyBmSGFsZldpZHRoLCBmQm90dG9tICsgZkhhbGZXaWR0aCwgRlhQVF9MSU5FVE8pOworCisJCQkJcERldmljZS0+RHJhd1BhdGgoJnBhdGhMVCwgcFVzZXIyRGV2aWNlLCAmZ3NkLCBQV0xDb2xvclRvRlhDb2xvcihjckxlZnRUb3AsblRyYW5zcGFyYW5jeSksIDAsIEZYRklMTF9BTFRFUk5BVEUpOworCisJCQkJQ0ZYX1BhdGhEYXRhIHBhdGhSQjsKKworCQkJCXBhdGhSQi5TZXRQb2ludENvdW50KDcpOworCQkJCXBhdGhSQi5TZXRQb2ludCgwLCBmUmlnaHQgLSBmSGFsZldpZHRoLCBmVG9wIC0gZkhhbGZXaWR0aCwgRlhQVF9NT1ZFVE8pOworCQkJCXBhdGhSQi5TZXRQb2ludCgxLCBmUmlnaHQgLSBmSGFsZldpZHRoLCBmQm90dG9tICsgZkhhbGZXaWR0aCwgRlhQVF9MSU5FVE8pOworCQkJCXBhdGhSQi5TZXRQb2ludCgyLCBmTGVmdCArIGZIYWxmV2lkdGgsIGZCb3R0b20gKyBmSGFsZldpZHRoLCBGWFBUX0xJTkVUTyk7CisJCQkJcGF0aFJCLlNldFBvaW50KDMsIGZMZWZ0ICsgZkhhbGZXaWR0aCAqIDIsIGZCb3R0b20gKyBmSGFsZldpZHRoICogMiwgRlhQVF9MSU5FVE8pOworCQkJCXBhdGhSQi5TZXRQb2ludCg0LCBmUmlnaHQgLSBmSGFsZldpZHRoICogMiwgZkJvdHRvbSArIGZIYWxmV2lkdGggKiAyLCBGWFBUX0xJTkVUTyk7CisJCQkJcGF0aFJCLlNldFBvaW50KDUsIGZSaWdodCAtIGZIYWxmV2lkdGggKiAyLCBmVG9wIC0gZkhhbGZXaWR0aCAqIDIsIEZYUFRfTElORVRPKTsKKwkJCQlwYXRoUkIuU2V0UG9pbnQoNiwgZlJpZ2h0IC0gZkhhbGZXaWR0aCwgZlRvcCAtIGZIYWxmV2lkdGgsIEZYUFRfTElORVRPKTsKKworCQkJCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoUkIsIHBVc2VyMkRldmljZSwgJmdzZCwgUFdMQ29sb3JUb0ZYQ29sb3IoY3JSaWdodEJvdHRvbSxuVHJhbnNwYXJhbmN5KSwgMCwgRlhGSUxMX0FMVEVSTkFURSk7CisKKwkJCQlDRlhfUGF0aERhdGEgcGF0aDsKKworCQkJCXBhdGguQXBwZW5kUmVjdChmTGVmdCwgZkJvdHRvbSwgZlJpZ2h0LCBmVG9wKTsKKwkJCQlwYXRoLkFwcGVuZFJlY3QoZkxlZnQgKyBmSGFsZldpZHRoLCBmQm90dG9tICsgZkhhbGZXaWR0aCwgZlJpZ2h0IC0gZkhhbGZXaWR0aCwgZlRvcCAtIGZIYWxmV2lkdGgpOworCisJCQkJcERldmljZS0+RHJhd1BhdGgoJnBhdGgsIHBVc2VyMkRldmljZSwgJmdzZCwgUFdMQ29sb3JUb0ZYQ29sb3IoY29sb3IsblRyYW5zcGFyYW5jeSksIDAsIEZYRklMTF9BTFRFUk5BVEUpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgUEJTX1VOREVSTElORUQ6CisJCQl7CisJCQkJQ0ZYX1BhdGhEYXRhIHBhdGg7CisKKwkJCQlwYXRoLlNldFBvaW50Q291bnQoMik7CisJCQkJcGF0aC5TZXRQb2ludCgwLCBmTGVmdCwgZkJvdHRvbSArIGZXaWR0aCAvIDIsIEZYUFRfTU9WRVRPKTsKKwkJCQlwYXRoLlNldFBvaW50KDEsIGZSaWdodCwgZkJvdHRvbSArIGZXaWR0aCAvIDIsIEZYUFRfTElORVRPKTsKKwkJCQkKKwkJCQlDRlhfR3JhcGhTdGF0ZURhdGEgZ3NkOworCQkJCWdzZC5tX0xpbmVXaWR0aCA9IGZXaWR0aDsKKworCQkJCXBEZXZpY2UtPkRyYXdQYXRoKCZwYXRoLCBwVXNlcjJEZXZpY2UsICZnc2QsMCwgIFBXTENvbG9yVG9GWENvbG9yKGNvbG9yLG5UcmFuc3BhcmFuY3kpLCBGWEZJTExfQUxURVJOQVRFKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBCU19TSEFET1c6CisJCQl7CisJCQkJQ0ZYX1BhdGhEYXRhIHBhdGg7CisJCQkJcGF0aC5BcHBlbmRSZWN0KGZMZWZ0LCBmQm90dG9tLCBmUmlnaHQsIGZUb3ApOworCQkJCXBhdGguQXBwZW5kUmVjdChmTGVmdCArIGZXaWR0aCwgZkJvdHRvbSArIGZXaWR0aCwgZlJpZ2h0IC0gZldpZHRoLCBmVG9wIC0gZldpZHRoKTsKKwkJCQlwRGV2aWNlLT5EcmF3UGF0aCgmcGF0aCwgcFVzZXIyRGV2aWNlLCBOVUxMLCBQV0xDb2xvclRvRlhDb2xvcihjb2xvcixuVHJhbnNwYXJhbmN5LzIpLCAwLCBGWEZJTExfQUxURVJOQVRFKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBBZGRTcXVpZ2dseVBhdGgoQ0ZYX1BhdGhEYXRhICYgUGF0aERhdGEsIEZYX0ZMT0FUIGZTdGFydFgsIEZYX0ZMT0FUIGZFbmRYLCBGWF9GTE9BVCBmWSwgRlhfRkxPQVQgZlN0ZXApCit7CisJUGF0aERhdGEuQWRkUG9pbnRDb3VudCgxKTsKKwlQYXRoRGF0YS5TZXRQb2ludChQYXRoRGF0YS5HZXRQb2ludENvdW50KCkgLSAxLCBmU3RhcnRYLCBmWSwgRlhQVF9NT1ZFVE8pOworCisJRlhfRkxPQVQgZng7CisJRlhfSU5UMzIgaTsKKworCWZvciAoaT0xLGZ4PWZTdGFydFgrZlN0ZXA7IGZ4PGZFbmRYOyBmeCs9ZlN0ZXAsaSsrKQorCXsKKwkJUGF0aERhdGEuQWRkUG9pbnRDb3VudCgxKTsKKwkJUGF0aERhdGEuU2V0UG9pbnQoUGF0aERhdGEuR2V0UG9pbnRDb3VudCgpIC0gMSwgZngsIGZZICsgKGkmMSkqZlN0ZXAsIEZYUFRfTElORVRPKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIEFkZFNwZWxsQ2hlY2tPYmooQ0ZYX1BhdGhEYXRhICYgUGF0aERhdGEsIElGWF9FZGl0KiBwRWRpdCwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UmIHdyV29yZCkKK3sKKwlGWF9GTE9BVCBmU3RhcnRYID0gMC4wZjsKKwlGWF9GTE9BVCBmRW5kWCA9IDAuMGY7CisJRlhfRkxPQVQgZlkgPSAwLjBmOworCUZYX0ZMT0FUIGZTdGVwID0gMC4wZjsgCisKKwlGWF9CT09MIGJCcmVhayA9IEZBTFNFOworCisJaWYgKElGWF9FZGl0X0l0ZXJhdG9yKiBwSXRlcmF0b3IgPSBwRWRpdC0+R2V0SXRlcmF0b3IoKSkKKwl7CisJCXBJdGVyYXRvci0+U2V0QXQod3JXb3JkLkJlZ2luUG9zKTsKKworCQlkbworCQl7CisJCQlDUFZUX1dvcmRQbGFjZSBwbGFjZSA9IHBJdGVyYXRvci0+R2V0QXQoKTsKKworCQkJQ1BWVF9MaW5lIGxpbmU7CQkJCQorCQkJaWYgKHBJdGVyYXRvci0+R2V0TGluZShsaW5lKSkKKwkJCXsKKwkJCQlmWSA9IGxpbmUucHRMaW5lLnk7CisJCQkJZlN0ZXAgPSAobGluZS5mTGluZUFzY2VudCAtIGxpbmUuZkxpbmVEZXNjZW50KSAvIDE2LjBmOworCQkJfQorCisJCQlpZiAocGxhY2UuTGluZUNtcCh3cldvcmQuQmVnaW5Qb3MpID09IDApCisJCQl7CisJCQkJcEl0ZXJhdG9yLT5TZXRBdCh3cldvcmQuQmVnaW5Qb3MpOworCQkJCUNQVlRfV29yZCB3b3JkOworCQkJCWlmIChwSXRlcmF0b3ItPkdldFdvcmQod29yZCkpCisJCQkJeworCQkJCQlmU3RhcnRYID0gd29yZC5wdFdvcmQueDsKKwkJCQl9CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJZlN0YXJ0WCA9IGxpbmUucHRMaW5lLng7CisJCQl9CisKKwkJCWlmIChwbGFjZS5MaW5lQ21wKHdyV29yZC5FbmRQb3MpID09IDApCisJCQl7CisJCQkJcEl0ZXJhdG9yLT5TZXRBdCh3cldvcmQuRW5kUG9zKTsKKwkJCQlDUFZUX1dvcmQgd29yZDsKKwkJCQlpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmQpKQorCQkJCXsKKwkJCQkJZkVuZFggPSB3b3JkLnB0V29yZC54ICsgd29yZC5mV2lkdGg7CisJCQkJfQorCisJCQkJYkJyZWFrID0gVFJVRTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlmRW5kWCA9IGxpbmUucHRMaW5lLnggKyBsaW5lLmZMaW5lV2lkdGg7CisJCQl9CisKKwkJCUFkZFNxdWlnZ2x5UGF0aChQYXRoRGF0YSwgZlN0YXJ0WCwgZkVuZFgsIGZZLCBmU3RlcCk7CisKKwkJCWlmIChiQnJlYWspIGJyZWFrOworCQl9CisJCXdoaWxlIChwSXRlcmF0b3ItPk5leHRMaW5lKCkpOworCX0KK30KKwordm9pZCBDUFdMX1V0aWxzOjpEcmF3RWRpdFNwZWxsQ2hlY2soQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwgSUZYX0VkaXQqIHBFZGl0LCAKKwkJCQkJCWNvbnN0IENQREZfUmVjdCYgcmNDbGlwLCBjb25zdCBDUERGX1BvaW50JiBwdE9mZnNldCwgY29uc3QgQ1BWVF9Xb3JkUmFuZ2UqIHBSYW5nZSwgCisJCQkJCQlJUFdMX1NwZWxsQ2hlY2sgKiBwU3BlbGxDaGVjaykKK3sKKwljb25zdCBGWF9DT0xPUlJFRiBjclNwZWxsID0gQXJnYkVuY29kZSgyNTUsMjU1LDAsMCk7CisKKwkvL2ZvciBzcGVsbGNoZWNrCisJRlhfQk9PTCBiTGF0aW5Xb3JkID0gRkFMU0U7CisJQ1BWVF9Xb3JkUGxhY2Ugd3BXb3JkU3RhcnQ7CisJQ0ZYX0J5dGVTdHJpbmcgc0xhdGluV29yZDsKKworCUNGWF9QYXRoRGF0YSBwYXRoU3BlbGw7CisKKwlwRGV2aWNlLT5TYXZlU3RhdGUoKTsKKworCWlmICghcmNDbGlwLklzRW1wdHkoKSkKKwl7CisJCUNQREZfUmVjdCByY1RlbXAgPSByY0NsaXA7CisJCXBVc2VyMkRldmljZS0+VHJhbnNmb3JtUmVjdChyY1RlbXApOworCQlGWF9SRUNUIHJjRGV2Q2xpcDsKKwkJcmNEZXZDbGlwLmxlZnQgPSAoRlhfSU5UMzIpcmNUZW1wLmxlZnQ7CisJCXJjRGV2Q2xpcC5yaWdodCA9IChGWF9JTlQzMilyY1RlbXAucmlnaHQ7CisJCXJjRGV2Q2xpcC50b3AgPSAoRlhfSU5UMzIpcmNUZW1wLnRvcDsKKwkJcmNEZXZDbGlwLmJvdHRvbSA9IChGWF9JTlQzMilyY1RlbXAuYm90dG9tOworCQlwRGV2aWNlLT5TZXRDbGlwX1JlY3QoJnJjRGV2Q2xpcCk7CisJfQorCisJaWYgKElGWF9FZGl0X0l0ZXJhdG9yKiBwSXRlcmF0b3IgPSBwRWRpdC0+R2V0SXRlcmF0b3IoKSkKKwl7CisJCWlmIChwRWRpdC0+R2V0Rm9udE1hcCgpKQorCQl7CisJCQlpZiAocFJhbmdlKQorCQkJCXBJdGVyYXRvci0+U2V0QXQocFJhbmdlLT5CZWdpblBvcyk7CisJCQllbHNlCisJCQkJcEl0ZXJhdG9yLT5TZXRBdCgwKTsKKworCQkJQ1BWVF9Xb3JkUGxhY2Ugb2xkcGxhY2U7CQkJCisKKwkJCXdoaWxlIChwSXRlcmF0b3ItPk5leHRXb3JkKCkpCisJCQl7CisJCQkJQ1BWVF9Xb3JkUGxhY2UgcGxhY2UgPSBwSXRlcmF0b3ItPkdldEF0KCk7CisJCQkJaWYgKHBSYW5nZSAmJiBwbGFjZS5Xb3JkQ21wKHBSYW5nZS0+RW5kUG9zKSA+IDApIGJyZWFrOwkJCQkKKworCQkJCUNQVlRfV29yZCB3b3JkOwkJCQkKKwkJCQlpZiAocEl0ZXJhdG9yLT5HZXRXb3JkKHdvcmQpKQorCQkJCXsKKwkJCQkJaWYgKEZYX0VESVRfSVNMQVRJTldPUkQod29yZC5Xb3JkKSkKKwkJCQkJeworCQkJCQkJaWYgKCFiTGF0aW5Xb3JkKQorCQkJCQkJeworCQkJCQkJCXdwV29yZFN0YXJ0ID0gcGxhY2U7CisJCQkJCQkJYkxhdGluV29yZCA9IFRSVUU7CQkJCQkJCQkKKwkJCQkJCX0KKworCQkJCQkJc0xhdGluV29yZCArPSAoY2hhcil3b3JkLldvcmQ7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQl7CisJCQkJCQlpZiAoYkxhdGluV29yZCkKKwkJCQkJCXsKKwkJCQkJCQlpZiAoIXNMYXRpbldvcmQuSXNFbXB0eSgpKQorCQkJCQkJCXsKKwkJCQkJCQkJaWYgKHBTcGVsbENoZWNrICYmICFwU3BlbGxDaGVjay0+Q2hlY2tXb3JkKHNMYXRpbldvcmQpKQorCQkJCQkJCQl7CisJCQkJCQkJCQlBZGRTcGVsbENoZWNrT2JqKHBhdGhTcGVsbCxwRWRpdCxDUFZUX1dvcmRSYW5nZSh3cFdvcmRTdGFydCxvbGRwbGFjZSkpOwkJCQkJCQkJCQorCQkJCQkJCQkJcEl0ZXJhdG9yLT5TZXRBdChwbGFjZSk7CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQkJYkxhdGluV29yZCA9IEZBTFNFOworCQkJCQkJfQorCisJCQkJCQlzTGF0aW5Xb3JkLkVtcHR5KCk7CisJCQkJCX0KKwkJCQkJCisJCQkJCW9sZHBsYWNlID0gcGxhY2U7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWlmIChiTGF0aW5Xb3JkKQorCQkJCQl7CisJCQkJCQlpZiAoIXNMYXRpbldvcmQuSXNFbXB0eSgpKQorCQkJCQkJeworCQkJCQkJCWlmIChwU3BlbGxDaGVjayAmJiAhcFNwZWxsQ2hlY2stPkNoZWNrV29yZChzTGF0aW5Xb3JkKSkKKwkJCQkJCQl7CisJCQkJCQkJCUFkZFNwZWxsQ2hlY2tPYmoocGF0aFNwZWxsLHBFZGl0LENQVlRfV29yZFJhbmdlKHdwV29yZFN0YXJ0LG9sZHBsYWNlKSk7CQkJCQkJCQkJCisJCQkJCQkJCXBJdGVyYXRvci0+U2V0QXQocGxhY2UpOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJCWJMYXRpbldvcmQgPSBGQUxTRTsKKwkJCQkJfQorCisJCQkJCXNMYXRpbldvcmQuRW1wdHkoKTsKKwkJCQl9CisJCQl9CisKKwkJCWlmICghc0xhdGluV29yZC5Jc0VtcHR5KCkpIAorCQkJeworCQkJCWlmIChwU3BlbGxDaGVjayAmJiAhcFNwZWxsQ2hlY2stPkNoZWNrV29yZChzTGF0aW5Xb3JkKSkKKwkJCQl7CisJCQkJCUFkZFNwZWxsQ2hlY2tPYmoocGF0aFNwZWxsLHBFZGl0LENQVlRfV29yZFJhbmdlKHdwV29yZFN0YXJ0LG9sZHBsYWNlKSk7CQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkKKwlDRlhfR3JhcGhTdGF0ZURhdGEgZ3NkOworCWdzZC5tX0xpbmVXaWR0aCA9IDA7CisJaWYgKHBhdGhTcGVsbC5HZXRQb2ludENvdW50KCkgPiAwKQorCQlwRGV2aWNlLT5EcmF3UGF0aCgmcGF0aFNwZWxsLCBwVXNlcjJEZXZpY2UsICZnc2QsIDAsIGNyU3BlbGwsIEZYRklMTF9BTFRFUk5BVEUpOworCisJcERldmljZS0+UmVzdG9yZVN0YXRlKCk7Cit9CisKK0ZYX0JPT0wgQ1BXTF9VdGlsczo6SXNCbGFja09yV2hpdGUoY29uc3QgQ1BXTF9Db2xvciYgY29sb3IpCit7CisJc3dpdGNoIChjb2xvci5uQ29sb3JUeXBlKQorCXsKKwljYXNlIENPTE9SVFlQRV9UUkFOU1BBUkVOVDoKKwkJcmV0dXJuIEZBTFNFOworCWNhc2UgQ09MT1JUWVBFX0dSQVk6CisJCXJldHVybiBjb2xvci5mQ29sb3IxIDwgMC41ZjsKKwljYXNlIENPTE9SVFlQRV9SR0I6CisJCXJldHVybiBjb2xvci5mQ29sb3IxICsgY29sb3IuZkNvbG9yMiArIGNvbG9yLmZDb2xvcjMgPCAxLjVmOworCWNhc2UgQ09MT1JUWVBFX0NNWUs6CisJCXJldHVybiBjb2xvci5mQ29sb3IxICsgY29sb3IuZkNvbG9yMiArIGNvbG9yLmZDb2xvcjMgKyBjb2xvci5mQ29sb3I0ID4gMi4wZjsKKwl9CisKKwlyZXR1cm4gVFJVRTsKK30KKworQ1BXTF9Db2xvciBDUFdMX1V0aWxzOjpHZXRSZXZlcnNlQ29sb3IoY29uc3QgQ1BXTF9Db2xvciYgY29sb3IpCit7CisJQ1BXTF9Db2xvciBjclJldCA9IGNvbG9yOworCisJc3dpdGNoIChjb2xvci5uQ29sb3JUeXBlKQorCXsKKwljYXNlIENPTE9SVFlQRV9HUkFZOgorCQljclJldC5mQ29sb3IxID0gMS4wZiAtIGNyUmV0LmZDb2xvcjE7CisJCWJyZWFrOworCWNhc2UgQ09MT1JUWVBFX1JHQjoKKwkJY3JSZXQuZkNvbG9yMSA9IDEuMGYgLSBjclJldC5mQ29sb3IxOworCQljclJldC5mQ29sb3IyID0gMS4wZiAtIGNyUmV0LmZDb2xvcjI7CisJCWNyUmV0LmZDb2xvcjMgPSAxLjBmIC0gY3JSZXQuZkNvbG9yMzsKKwkJYnJlYWs7CisJY2FzZSBDT0xPUlRZUEVfQ01ZSzoKKwkJY3JSZXQuZkNvbG9yMSA9IDEuMGYgLSBjclJldC5mQ29sb3IxOworCQljclJldC5mQ29sb3IyID0gMS4wZiAtIGNyUmV0LmZDb2xvcjI7CisJCWNyUmV0LmZDb2xvcjMgPSAxLjBmIC0gY3JSZXQuZkNvbG9yMzsKKwkJY3JSZXQuZkNvbG9yNCA9IDEuMGYgLSBjclJldC5mQ29sb3I0OworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gY3JSZXQ7Cit9CisKK0NGWF9CeXRlU3RyaW5nIENQV0xfVXRpbHM6OkdldEljb25BcHBTdHJlYW0oRlhfSU5UMzIgblR5cGUsIGNvbnN0IENQREZfUmVjdCYgcmVjdCwgY29uc3QgQ1BXTF9Db2xvciYgY3JGaWxsLCAKKwkJCQkJCQkJCQkJCWNvbnN0IENQV0xfQ29sb3ImIGNyU3Ryb2tlKQoreworCUNGWF9CeXRlU3RyaW5nIHNBcHBTdHJlYW0gPSBDUFdMX1V0aWxzOjpHZXRDb2xvckFwcFN0cmVhbShjclN0cm9rZSwgRkFMU0UpOworCXNBcHBTdHJlYW0gKz0gQ1BXTF9VdGlsczo6R2V0Q29sb3JBcHBTdHJlYW0oY3JGaWxsLCBUUlVFKTsKKworCUNGWF9CeXRlU3RyaW5nIHNQYXRoOworCUNGWF9QYXRoRGF0YSBwYXRoOworCisJc3dpdGNoIChuVHlwZSkKKwl7CisJY2FzZSBQV0xfSUNPTlRZUEVfQ0hFQ0tNQVJLOgorCQlHZXRHcmFwaGljc19DaGVja21hcmsoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1NUUkVBTSk7CQorCQlicmVhazsKKwljYXNlIFBXTF9JQ09OVFlQRV9DSVJDTEU6CisJCUdldEdyYXBoaWNzX0NpcmNsZShzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfU1RSRUFNKTsKKwkJYnJlYWs7CisJY2FzZSBQV0xfSUNPTlRZUEVfQ09NTUVOVDoKKwkJR2V0R3JhcGhpY3NfQ29tbWVudChzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfU1RSRUFNKTsKKwkJYnJlYWs7CisJY2FzZSBQV0xfSUNPTlRZUEVfQ1JPU1M6CisJCUdldEdyYXBoaWNzX0Nyb3NzKHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9TVFJFQU0pOworCQlicmVhazsKKwljYXNlIFBXTF9JQ09OVFlQRV9IRUxQOgorCQlHZXRHcmFwaGljc19IZWxwKHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9TVFJFQU0pOworCQlicmVhazsKKwljYXNlIFBXTF9JQ09OVFlQRV9JTlNFUlRURVhUOgorCQlHZXRHcmFwaGljc19JbnNlcnRUZXh0KHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9TVFJFQU0pOworCQlicmVhazsKKwljYXNlIFBXTF9JQ09OVFlQRV9LRVk6CisJCUdldEdyYXBoaWNzX0tleShzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfU1RSRUFNKTsKKwkJYnJlYWs7CisJY2FzZSBQV0xfSUNPTlRZUEVfTkVXUEFSQUdSQVBIOgorCQlHZXRHcmFwaGljc19OZXdQYXJhZ3JhcGgoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1NUUkVBTSk7CisJCWJyZWFrOworCWNhc2UgUFdMX0lDT05UWVBFX1RFWFROT1RFOgorCQlHZXRHcmFwaGljc19UZXh0Tm90ZShzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfU1RSRUFNKTsKKwkJYnJlYWs7CisJY2FzZSBQV0xfSUNPTlRZUEVfUEFSQUdSQVBIOgorCQlHZXRHcmFwaGljc19QYXJhZ3JhcGgoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1NUUkVBTSk7CisJCWJyZWFrOworCWNhc2UgUFdMX0lDT05UWVBFX1JJR0hUQVJST1c6CisJCUdldEdyYXBoaWNzX1JpZ2h0QXJyb3coc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1NUUkVBTSk7CisJCWJyZWFrOworCWNhc2UgUFdMX0lDT05UWVBFX1JJR0hUUE9JTlRFUjoKKwkJR2V0R3JhcGhpY3NfUmlnaHRQb2ludGVyKHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9TVFJFQU0pOworCQlicmVhazsKKwljYXNlIFBXTF9JQ09OVFlQRV9TVEFSOgorCQlHZXRHcmFwaGljc19TdGFyKHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9TVFJFQU0pOworCQlicmVhazsKKwljYXNlIFBXTF9JQ09OVFlQRV9VUEFSUk9XOgorCQlHZXRHcmFwaGljc19VcEFycm93KHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9TVFJFQU0pOworCQlicmVhazsKKwljYXNlIFBXTF9JQ09OVFlQRV9VUExFRlRBUlJPVzoKKwkJR2V0R3JhcGhpY3NfVXBMZWZ0QXJyb3coc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1NUUkVBTSk7CisJCWJyZWFrOworCWNhc2UgUFdMX0lDT05UWVBFX0dSQVBIOgorCQlHZXRHcmFwaGljc19HcmFwaChzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfU1RSRUFNKTsKKwkJYnJlYWs7CisJY2FzZSBQV0xfSUNPTlRZUEVfUEFQRVJDTElQOgorCQlHZXRHcmFwaGljc19QYXBlcmNsaXAoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1NUUkVBTSk7CisJCWJyZWFrOworCWNhc2UgUFdMX0lDT05UWVBFX0FUVEFDSE1FTlQ6CisJCUdldEdyYXBoaWNzX0F0dGFjaG1lbnQoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1NUUkVBTSk7CisJCWJyZWFrOworCWNhc2UgUFdMX0lDT05UWVBFX1RBRzoKKwkJR2V0R3JhcGhpY3NfVGFnKHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9TVFJFQU0pOworCQlicmVhazsKKwljYXNlIFBXTF9JQ09OVFlQRV9GT1hJVDoKKwkJR2V0R3JhcGhpY3NfRm94aXQoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1NUUkVBTSk7CisJCWJyZWFrOworCX0KKworCXNBcHBTdHJlYW0gKz0gc1BhdGg7CisJaWYgKGNyU3Ryb2tlLm5Db2xvclR5cGUgIT0gQ09MT1JUWVBFX1RSQU5TUEFSRU5UKQorCQlzQXBwU3RyZWFtICs9ICJCKlxuIjsKKwllbHNlCisJCXNBcHBTdHJlYW0gKz0gImYqXG4iOworCisJcmV0dXJuIHNBcHBTdHJlYW07Cit9CisKK3ZvaWQgQ1BXTF9VdGlsczo6RHJhd0ljb25BcHBTdHJlYW0oQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSwKKwkJCQkJCUZYX0lOVDMyIG5UeXBlLCBjb25zdCBDUERGX1JlY3QgJiByZWN0LCBjb25zdCBDUFdMX0NvbG9yJiBjckZpbGwsIGNvbnN0IENQV0xfQ29sb3ImIGNyU3Ryb2tlLCBjb25zdCBGWF9JTlQzMiBuVHJhbnNwYXJhbmN5KQoreworCUNGWF9HcmFwaFN0YXRlRGF0YSBnc2Q7CisJZ3NkLm1fTGluZVdpZHRoID0gMS4wZjsKKworCUNGWF9CeXRlU3RyaW5nIHNQYXRoOworCUNGWF9QYXRoRGF0YSBwYXRoOworCisJc3dpdGNoIChuVHlwZSkKKwl7CisJY2FzZSBQV0xfSUNPTlRZUEVfQ0hFQ0tNQVJLOgorCQlHZXRHcmFwaGljc19DaGVja21hcmsoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1BBVEhEQVRBKTsKKwkJYnJlYWs7CisJY2FzZSBQV0xfSUNPTlRZUEVfQ0lSQ0xFOgorCQlHZXRHcmFwaGljc19DaXJjbGUoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1BBVEhEQVRBKTsKKwkJYnJlYWs7CisJY2FzZSBQV0xfSUNPTlRZUEVfQ09NTUVOVDoKKwkJR2V0R3JhcGhpY3NfQ29tbWVudChzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfUEFUSERBVEEpOworCQlicmVhazsKKwljYXNlIFBXTF9JQ09OVFlQRV9DUk9TUzoKKwkJR2V0R3JhcGhpY3NfQ3Jvc3Moc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1BBVEhEQVRBKTsKKwkJYnJlYWs7CisJY2FzZSBQV0xfSUNPTlRZUEVfSEVMUDoKKwkJR2V0R3JhcGhpY3NfSGVscChzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfUEFUSERBVEEpOworCQlicmVhazsKKwljYXNlIFBXTF9JQ09OVFlQRV9JTlNFUlRURVhUOgorCQlHZXRHcmFwaGljc19JbnNlcnRUZXh0KHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9QQVRIREFUQSk7CisJCWJyZWFrOworCWNhc2UgUFdMX0lDT05UWVBFX0tFWToKKwkJR2V0R3JhcGhpY3NfS2V5KHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9QQVRIREFUQSk7CisJCWJyZWFrOworCWNhc2UgUFdMX0lDT05UWVBFX05FV1BBUkFHUkFQSDoKKwkJR2V0R3JhcGhpY3NfTmV3UGFyYWdyYXBoKHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9QQVRIREFUQSk7CisJCWJyZWFrOworCWNhc2UgUFdMX0lDT05UWVBFX1RFWFROT1RFOgorCQlHZXRHcmFwaGljc19UZXh0Tm90ZShzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfUEFUSERBVEEpOworCQlicmVhazsKKwljYXNlIFBXTF9JQ09OVFlQRV9QQVJBR1JBUEg6CisJCUdldEdyYXBoaWNzX1BhcmFncmFwaChzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfUEFUSERBVEEpOworCQlicmVhazsKKwljYXNlIFBXTF9JQ09OVFlQRV9SSUdIVEFSUk9XOgorCQlHZXRHcmFwaGljc19SaWdodEFycm93KHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9QQVRIREFUQSk7CisJCWJyZWFrOworCWNhc2UgUFdMX0lDT05UWVBFX1JJR0hUUE9JTlRFUjoKKwkJR2V0R3JhcGhpY3NfUmlnaHRQb2ludGVyKHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9QQVRIREFUQSk7CisJCWJyZWFrOworCWNhc2UgUFdMX0lDT05UWVBFX1NUQVI6CisJCUdldEdyYXBoaWNzX1N0YXIoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1BBVEhEQVRBKTsKKwkJYnJlYWs7CisJY2FzZSBQV0xfSUNPTlRZUEVfVVBBUlJPVzoKKwkJR2V0R3JhcGhpY3NfVXBBcnJvdyhzUGF0aCwgcGF0aCwgcmVjdCwgUFdMUFRfUEFUSERBVEEpOworCQlicmVhazsKKwljYXNlIFBXTF9JQ09OVFlQRV9VUExFRlRBUlJPVzoKKwkJR2V0R3JhcGhpY3NfVXBMZWZ0QXJyb3coc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1BBVEhEQVRBKTsKKwkJYnJlYWs7CisJY2FzZSBQV0xfSUNPTlRZUEVfR1JBUEg6CisJCUdldEdyYXBoaWNzX0dyYXBoKHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9QQVRIREFUQSk7CisJCWJyZWFrOworCWNhc2UgUFdMX0lDT05UWVBFX1BBUEVSQ0xJUDoKKwkJR2V0R3JhcGhpY3NfUGFwZXJjbGlwKHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9QQVRIREFUQSk7CisJCWJyZWFrOworCWNhc2UgUFdMX0lDT05UWVBFX0FUVEFDSE1FTlQ6CisJCUdldEdyYXBoaWNzX0F0dGFjaG1lbnQoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1BBVEhEQVRBKTsKKwkJYnJlYWs7CisJY2FzZSBQV0xfSUNPTlRZUEVfVEFHOgorCQlHZXRHcmFwaGljc19UYWcoc1BhdGgsIHBhdGgsIHJlY3QsIFBXTFBUX1BBVEhEQVRBKTsKKwkJYnJlYWs7CisJY2FzZSBQV0xfSUNPTlRZUEVfRk9YSVQ6CisJCUdldEdyYXBoaWNzX0ZveGl0KHNQYXRoLCBwYXRoLCByZWN0LCBQV0xQVF9QQVRIREFUQSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisKKwlwRGV2aWNlLT5EcmF3UGF0aCgmcGF0aCwgcFVzZXIyRGV2aWNlLCAmZ3NkLCAKKwkJUFdMQ29sb3JUb0ZYQ29sb3IoY3JGaWxsLG5UcmFuc3BhcmFuY3kpLCBQV0xDb2xvclRvRlhDb2xvcihjclN0cm9rZSxuVHJhbnNwYXJhbmN5KSwgRlhGSUxMX0FMVEVSTkFURSk7Cit9CisKK3ZvaWQgQ1BXTF9VdGlsczo6R2V0R3JhcGhpY3NfQ2hlY2ttYXJrKENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSkKK3sKKwlGWF9GTE9BVCBmV2lkdGggPSBjckJCb3gucmlnaHQgLSBjckJCb3gubGVmdDsKKwlGWF9GTE9BVCBmSGVpZ2h0ID0gY3JCQm94LnRvcCAtIGNyQkJveC5ib3R0b207CisKKwlDUFdMX1BhdGhEYXRhIFBhdGhBcnJheVtdID0gCisJeworCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgICsgZldpZHRoIC8gMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0ICogMiAvIDUuMGYpLFBXTFBUX01PVkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCAgKyBmV2lkdGggLyAxNS4wZiArIFBXTF9CRVpJRVIqKGZXaWR0aCAvIDcuMGYgLSBmV2lkdGggLyAxNS4wZiksIAorCQkJCQkgIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0ICogMiAvIDUuMGYgKyBQV0xfQkVaSUVSKihmSGVpZ2h0ICogMiAvIDcuMGYgLSBmSGVpZ2h0ICogMiAvIDUuMGYpKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGggLyA0LjVmICsgUFdMX0JFWklFUiooZldpZHRoIC8gNS4wZiAtIGZXaWR0aCAvIDQuNWYpLAorCQkJCQkgIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0IC8gMTYuMGYgKyBQV0xfQkVaSUVSKihmSGVpZ2h0IC8gNS4wZiAtIGZIZWlnaHQgLyAxNi4wZikpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCAvIDQuNWYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0IC8gMTYuMGYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCAvIDQuNWYgKyBQV0xfQkVaSUVSKihmV2lkdGggLyA0LjRmIC0gZldpZHRoIC8gNC41ZiksCisJCSAgICAgICAgICAgICAgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQgLyAxNi4wZiAtIFBXTF9CRVpJRVIqZkhlaWdodCAvIDE2LjBmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGggLyAzLjBmICsgUFdMX0JFWklFUiooZldpZHRoIC8gNC4wZiAtIGZXaWR0aCAvIDMuMGYpLAorCQkgICAgICAgICAgICAgIGNyQkJveC5ib3R0b20pLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCAvIDMuMGYsIGNyQkJveC5ib3R0b20pLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCAvIDMuMGYgKyBQV0xfQkVaSUVSKmZXaWR0aCooMS83LjBmICsgMi8xNS4wZiksCisJCSAgICAgICAgICAgICAgY3JCQm94LmJvdHRvbSArIFBXTF9CRVpJRVIqZkhlaWdodCAqIDQgLyA1LjBmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgICsgZldpZHRoICogMTQgLyAxNS4wZiArIFBXTF9CRVpJRVIqZldpZHRoKigxLzcuMGYgLSA3LzE1LjBmKSwKKwkJICAgICAgICAgICAgICBjckJCb3guYm90dG9tICsgZkhlaWdodCAqIDE1LzE2LjBmICsgUFdMX0JFWklFUiooZkhlaWdodCAqIDQvNS4wZiAtIGZIZWlnaHQgKiAxNS8xNi4wZikpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCAgKyBmV2lkdGggKiAxNCAvIDE1LjBmLGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0ICogMTUgLyAxNi4wZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICArIGZXaWR0aCAqIDE0IC8gMTUuMGYgKyBQV0xfQkVaSUVSKihmV2lkdGggKiA3IC8gMTUuMGYgLSBmV2lkdGggKiAxNCAvIDE1LjBmKSwKKwkJICAgICAgICAgICAgICBjckJCb3guYm90dG9tICsgZkhlaWdodCAqIDE1IC8gMTYuMGYgKyBQV0xfQkVaSUVSKihmSGVpZ2h0ICogOCAvIDcuMGYgLSBmSGVpZ2h0ICogMTUgLyAxNi4wZikpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCAvIDMuNmYgKyBQV0xfQkVaSUVSKihmV2lkdGggLyAzLjRmIC0gZldpZHRoIC8gMy42ZiksCisJCSAgICAgICAgICAgICAgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQgLyAzLjVmICsgUFdMX0JFWklFUiooZkhlaWdodCAvIDMuNWYgLSBmSGVpZ2h0IC8gMy41ZikpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCAvIDMuNmYsY3JCQm94LmJvdHRvbSArIGZIZWlnaHQgLyAzLjVmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGggLyAzLjZmLAorCQkgICAgICAgICAgICAgIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0IC8gMy41ZiArIFBXTF9CRVpJRVIqKGZIZWlnaHQgLyA0LjBmIC0gZkhlaWdodCAvIDMuNWYpKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgICsgZldpZHRoIC8gMTUuMGYgKyBQV0xfQkVaSUVSKihmV2lkdGggLyAzLjVmIC0gZldpZHRoIC8gMTUuMGYpLAorCQkgICAgICAgICAgICAgIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0ICogMiAvIDUuMGYgKyBQV0xfQkVaSUVSKihmSGVpZ2h0ICogMy41ZiAvIDUuMGYgLSBmSGVpZ2h0ICogMiAvIDUuMGYpKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgICsgZldpZHRoIC8gMTUuMGYsY3JCQm94LmJvdHRvbSArIGZIZWlnaHQgKiAyIC8gNS4wZiksIFBXTFBUX0JFWklFUlRPKQorCX07CisKKwlpZih0eXBlID09IFBXTFBUX1NUUkVBTSkKKwkJc1BhdGhEYXRhID0gR2V0QXBwU3RyZWFtRnJvbUFycmF5KFBhdGhBcnJheSwgMTYpOworCWVsc2UKKwkJR2V0UGF0aERhdGFGcm9tQXJyYXkocGF0aCwgUGF0aEFycmF5LCAxNik7Cit9CisKK3ZvaWQgQ1BXTF9VdGlsczo6R2V0R3JhcGhpY3NfQ2lyY2xlKENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSkKK3sKKwlGWF9GTE9BVCBmV2lkdGggPSBjckJCb3gucmlnaHQgLSBjckJCb3gubGVmdDsKKwlGWF9GTE9BVCBmSGVpZ2h0ID0gY3JCQm94LnRvcCAtIGNyQkJveC5ib3R0b207CisKKwlDUFdMX1BhdGhEYXRhIFBhdGhBcnJheVtdID0KKwl7CisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8xNS4wZixjckJCb3guYm90dG9tICsgZkhlaWdodC8yLjBmKSwgUFdMUFRfTU9WRVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzE1LjBmLAorCQkgICAgICAgICAgICAgIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzIuMGYgKyBQV0xfQkVaSUVSKihmSGVpZ2h0KjE0LzE1LjBmIC0gZkhlaWdodC8yLjBmKSksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzIuMGYgLSBQV0xfQkVaSUVSKihmV2lkdGgvMi4wZiAtIGZXaWR0aC8xNS4wZiksIGNyQkJveC50b3AgLSBmSGVpZ2h0LzE1LjBmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZixjckJCb3gudG9wIC0gZkhlaWdodC8xNS4wZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzIuMGYgKyBQV0xfQkVaSUVSKihmV2lkdGgqMTQvMTUuMGYgLSBmV2lkdGgvMi4wZiksIGNyQkJveC50b3AgLSBmSGVpZ2h0LzE1LjBmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzE1LjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8yLjBmICsgUFdMX0JFWklFUiooZkhlaWdodCoxNC8xNS4wZiAtIGZIZWlnaHQvMi4wZikpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzIuMGYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzIuMGYgLSBQV0xfQkVaSUVSKihmSGVpZ2h0LzIuMGYgLSBmSGVpZ2h0LzE1LjBmKSksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzIuMGYgKyBQV0xfQkVaSUVSKihmV2lkdGgqMTQvMTUuMGYgLSBmV2lkdGgvMi4wZiksIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzE1LjBmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMTUuMGYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8yLjBmIC0gUFdMX0JFWklFUiooZldpZHRoLzIuMGYgLSBmV2lkdGgvMTUuMGYpLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8xNS4wZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzE1LjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8yLjBmIC0gUFdMX0JFWklFUiooZkhlaWdodC8yLjBmIC0gZkhlaWdodC8xNS4wZikpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8xNS4wZixjckJCb3guYm90dG9tICsgZkhlaWdodC8yLjBmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMy8xNS4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMi4wZiksIFBXTFBUX01PVkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCozLzE1LjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8yLjBmICsgUFdMX0JFWklFUiooZkhlaWdodCo0LzUuMGYgLSBmSGVpZ2h0LzIuMGYpKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiAtIFBXTF9CRVpJRVIqKGZXaWR0aC8yLjBmIC0gZldpZHRoKjMvMTUuMGYpLCBjckJCb3gudG9wIC0gZkhlaWdodCozLzE1LjBmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMy8xNS4wZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzIuMGYgKyBQV0xfQkVaSUVSKihmV2lkdGgqNC81LjBmIC0gZldpZHRoLzIuMGYpLCBjckJCb3gudG9wIC0gZkhlaWdodCozLzE1LjBmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjMvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzIuMGYgKyBQV0xfQkVaSUVSKihmSGVpZ2h0KjQvNS4wZiAtIGZIZWlnaHQvMi4wZikpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMy8xNS4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMi4wZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCozLzE1LjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8yLjBmIC0gUFdMX0JFWklFUiooZkhlaWdodCo0LzUuMGYgLSBmSGVpZ2h0LzIuMGYpKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiArIFBXTF9CRVpJRVIqKGZXaWR0aCo0LzUuMGYgLSBmV2lkdGgvMi4wZiksIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjMvMTUuMGYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8yLjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCozLzE1LjBmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiAtIFBXTF9CRVpJRVIqKGZXaWR0aCo0LzUuMGYgLSBmV2lkdGgvMi4wZiksIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjMvMTUuMGYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCozLzE1LjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8yLjBmIC0gUFdMX0JFWklFUiooZkhlaWdodCo0LzUuMGYgLSBmSGVpZ2h0LzIuMGYpKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMy8xNS4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMi4wZiksIFBXTFBUX0JFWklFUlRPKQorCX07CisKKwlpZih0eXBlID09IFBXTFBUX1NUUkVBTSkKKwkJc1BhdGhEYXRhID0gR2V0QXBwU3RyZWFtRnJvbUFycmF5KFBhdGhBcnJheSwgMjYpOworCWVsc2UKKwkJR2V0UGF0aERhdGFGcm9tQXJyYXkocGF0aCwgUGF0aEFycmF5LCAyNik7Cit9CisKK3ZvaWQgQ1BXTF9VdGlsczo6R2V0R3JhcGhpY3NfQ29tbWVudChDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpCit7CisJRlhfRkxPQVQgZldpZHRoID0gY3JCQm94LnJpZ2h0IC0gY3JCQm94LmxlZnQ7CisJRlhfRkxPQVQgZkhlaWdodCA9IGNyQkJveC50b3AgLSBjckJCb3guYm90dG9tOworCisJQ1BXTF9QYXRoRGF0YSBQYXRoQXJyYXlbXSA9IAorCXsKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzE1LjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC82LjBmKSwgUFdMUFRfTU9WRVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzE1LjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC82LjBmICsgUFdMX0JFWklFUiooZkhlaWdodC82LjBmIC0gZkhlaWdodC8xMC4wZikpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCoyLzE1LjBmIC0gUFdMX0JFWklFUipmV2lkdGgvMTUuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzEwLjBmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMi8xNS4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvMTAuMGYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMi8xNS4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvMTAuMGYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjIvMTUuMGYgKyBQV0xfQkVaSUVSKmZXaWR0aC8xNS4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvMTAuMGYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMTUuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzYgKyBQV0xfQkVaSUVSKihmSGVpZ2h0LzYuMGYgLSBmSGVpZ2h0LzEwLjBmKSksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC8xNS4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvNi4wZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC8xNS4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMy4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjQvMTUuMGYgKyBQV0xfQkVaSUVSKmZIZWlnaHQvMTUuMGYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMi8xNS4wZiArIFBXTF9CRVpJRVIqZldpZHRoLzE1LjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCo0LzE1LjBmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjIvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjQvMTUuMGYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCo1LzE1LjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCo0LzE1LjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjUvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjIvMTUgKyBQV0xfQkVaSUVSKmZIZWlnaHQqMi8xNS4wZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjUvMTUuMGYgLSBQV0xfQkVaSUVSKmZXaWR0aCoyLzE1LjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCoyLzE1LjBmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqNi8zMC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMi8xNS4wZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjcvMzAuMGYgKyBQV0xfQkVaSUVSKmZXaWR0aC8zMC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMi8xNS4wZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjcvMzAuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjIvMTUuMGYgKyBQV0xfQkVaSUVSKmZIZWlnaHQqMi8xNS4wZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjcvMzAuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjQvMTUuMGYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCoyLzE1LjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCo0LzE1LjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjIvMTUuMGYgLSBQV0xfQkVaSUVSKmZXaWR0aC8xNS4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqNC8xNS4wZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzE1LjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8zLjBmIC0gUFdMX0JFWklFUipmSGVpZ2h0LzE1LjBmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMTUuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzMuMGYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8xNS4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvNi4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCoyLzE1LjBmLCBjckJCb3gudG9wIC0gZkhlaWdodCo4LzMwLjBmKSwgUFdMUFRfTU9WRVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCoyLzE1LjBmLCBjckJCb3gudG9wIC0gZkhlaWdodCo4LzMwLjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjIvMTUsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjI1LzYwLjBmKSwgUFdMUFRfTU9WRVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCoyLzE1LjBmLCBjckJCb3gudG9wIC0gZkhlaWdodCoyNS82MC4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCoyLzE1LjBmLCBjckJCb3gudG9wIC0gZkhlaWdodCoxNy8zMC4wZiksIFBXTFBUX01PVkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqNC8xNS4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMTcvMzAuMGYpLCBQV0xQVF9MSU5FVE8pCisJfTsKKworCWlmKHR5cGUgPT0gUFdMUFRfU1RSRUFNKQorCQlzUGF0aERhdGEgPSBHZXRBcHBTdHJlYW1Gcm9tQXJyYXkoUGF0aEFycmF5LCAzMCk7CisJZWxzZQorCQlHZXRQYXRoRGF0YUZyb21BcnJheShwYXRoLCBQYXRoQXJyYXksIDMwKTsKK30KKwordm9pZCBDUFdMX1V0aWxzOjpHZXRHcmFwaGljc19Dcm9zcyhDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpCit7CisJRlhfRkxPQVQgZldpZHRoID0gY3JCQm94LnJpZ2h0IC0gY3JCQm94LmxlZnQ7CisJRlhfRkxPQVQgZkhlaWdodCA9IGNyQkJveC50b3AgLSBjckJCb3guYm90dG9tOworCS8vRlhfRkxPQVQgZmNhdGVyY29ybmVyID0gKEZYX0ZMT0FUKXNxcnQoZldpZHRoKmZXaWR0aCArIGZIZWlnaHQqZkhlaWdodCk7CisJQ1BXTF9Qb2ludCBjZW50ZXJfcG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMik7CisKKwlDUFdMX1BhdGhEYXRhIFBhdGhBcnJheVtdID0gCisJeworCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY2VudGVyX3BvaW50LngsIGNlbnRlcl9wb2ludC55ICsgZkhlaWdodC8xMC4wZiksIFBXTFBUX01PVkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjZW50ZXJfcG9pbnQueCArIGZXaWR0aCowLjNmLCBjZW50ZXJfcG9pbnQueSArIGZIZWlnaHQvMTAuMGYgKyBmV2lkdGgqMC4zZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjZW50ZXJfcG9pbnQueCArIGZXaWR0aC8xMC4wZiArIGZXaWR0aCowLjNmLCBjZW50ZXJfcG9pbnQueSArIGZIZWlnaHQqMC4zZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjZW50ZXJfcG9pbnQueCArIGZXaWR0aC8xMC4wZiwgY2VudGVyX3BvaW50LnkpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY2VudGVyX3BvaW50LnggKyBmV2lkdGgvMTAuMGYgKyBmV2lkdGgqMC4zZiwgY2VudGVyX3BvaW50LnkgLSBmSGVpZ2h0KjAuM2YpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY2VudGVyX3BvaW50LnggKyBmV2lkdGgqMC4zZiwgY2VudGVyX3BvaW50LnkgLSBmSGVpZ2h0LzEwLjBmIC0gZkhlaWdodCowLjNmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNlbnRlcl9wb2ludC54LCBjZW50ZXJfcG9pbnQueSAtIGZIZWlnaHQvMTAuMGYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY2VudGVyX3BvaW50LnggLSBmV2lkdGgqMC4zZiwgY2VudGVyX3BvaW50LnkgLSBmSGVpZ2h0LzEwIC0gZkhlaWdodCowLjNmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNlbnRlcl9wb2ludC54IC0gZldpZHRoLzEwLjBmIC0gZldpZHRoKjAuM2YsIGNlbnRlcl9wb2ludC55IC0gZkhlaWdodCowLjNmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNlbnRlcl9wb2ludC54IC0gZldpZHRoLzEwLCBjZW50ZXJfcG9pbnQueSksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjZW50ZXJfcG9pbnQueCAtIGZXaWR0aC8xMCAtIGZXaWR0aCowLjNmLCBjZW50ZXJfcG9pbnQueSArIGZIZWlnaHQqMC4zZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjZW50ZXJfcG9pbnQueCAtIGZXaWR0aCowLjNmLCBjZW50ZXJfcG9pbnQueSArIGZIZWlnaHQvMTAuMGYgKyBmSGVpZ2h0KjAuM2YpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY2VudGVyX3BvaW50LngsIGNlbnRlcl9wb2ludC55ICsgZkhlaWdodC8xMC4wZiksIFBXTFBUX0xJTkVUTykKKwl9OworCisJaWYodHlwZSA9PSBQV0xQVF9TVFJFQU0pCisJCXNQYXRoRGF0YSA9IEdldEFwcFN0cmVhbUZyb21BcnJheShQYXRoQXJyYXksIDEzKTsKKwllbHNlCisJCUdldFBhdGhEYXRhRnJvbUFycmF5KHBhdGgsIFBhdGhBcnJheSwgMTMpOworfQorCit2b2lkIENQV0xfVXRpbHM6OkdldEdyYXBoaWNzX0hlbHAoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKQoreworCUZYX0ZMT0FUIGZXaWR0aCA9IGNyQkJveC5yaWdodCAtIGNyQkJveC5sZWZ0OworCUZYX0ZMT0FUIGZIZWlnaHQgPSBjckJCb3gudG9wIC0gY3JCQm94LmJvdHRvbTsKKworCUNQV0xfUGF0aERhdGEgUGF0aEFycmF5W10gPSAKKwl7CisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC82MC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMi4wZiksIFBXTFBUX01PVkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC82MC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMi4wZiArIFBXTF9CRVpJRVIqKGZIZWlnaHQvNjAuMGYgLSBmSGVpZ2h0LzIuMGYpKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiAtIFBXTF9CRVpJRVIqKGZXaWR0aC8yLjBmIC0gZldpZHRoLzYwLjBmKSwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvNjAuMGYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8yLjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC82MC4wZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzIuMGYgKyBQV0xfQkVaSUVSKmZXaWR0aCoyOS82MC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvNjAuMGYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvNjAuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzIuMGYgKyBQV0xfQkVaSUVSKihmSGVpZ2h0LzYwLjBmIC0gZkhlaWdodC8yLjBmKSksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC82MC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMi4wZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC82MC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMi4wZiArIFBXTF9CRVpJRVIqZkhlaWdodCoyOS82MC4wZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzIuMGYgKyBQV0xfQkVaSUVSKmZXaWR0aCoyOS82MC4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvNjAuMGYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8yLjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC82MC4wZiksIFBXTFBUX0JFWklFUlRPKSwJCQorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiAtIFBXTF9CRVpJRVIqZldpZHRoKjI5LzYwLjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC82MC4wZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzYwLjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8yLjBmICArIFBXTF9CRVpJRVIqZkhlaWdodCoyOS82MC4wZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzYwLjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8yLjBmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4yN2YsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMzZmKSwgUFdMUFRfTU9WRVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMjdmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjM2ZiArIFBXTF9CRVpJRVIqZkhlaWdodCowLjIzZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNWYgLSBQV0xfQkVaSUVSKmZXaWR0aCowLjIzZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC44N2YpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjVmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjg3ZiksIFBXTFBUX0JFWklFUlRPKSwJCQorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC41ZiArIFBXTF9CRVpJRVIqZldpZHRoKjAuMjNmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjg3ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjI3ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4zNmYgKyBQV0xfQkVaSUVSKmZIZWlnaHQqMC4yM2YpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC4yN2YsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMzZmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuMjdmIC0gZldpZHRoKjAuMDhmKjAuMmYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMzZmIC0gZkhlaWdodCowLjE1ZiowLjdmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuMzVmICsgZldpZHRoKjAuMDhmKjAuMmYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuNTFmICsgZkhlaWdodCowLjE1ZiowLjJmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuMzVmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjUxZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjM1ZiAtIGZXaWR0aCowLjFmKjAuNWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuNTFmIC0gZkhlaWdodCowLjE1ZiowLjNmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuNDVmIC0gZldpZHRoKjAuMWYqMC41ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC42OGYgKyBmSGVpZ2h0KjAuMTVmKjAuNWYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC40NWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuNjhmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuNDVmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjMwZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC40NWYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMzBmIC0gZldpZHRoKjAuMWYqMC43ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjU1ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4zMGYgLSBmV2lkdGgqMC4xZiowLjdmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuNTVmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjMwZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjU1ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC42NmYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuNTVmIC0gZldpZHRoKjAuMWYqMC4wNWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuNjZmICsgZkhlaWdodCowLjE4ZiowLjVmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuNDVmIC0gZldpZHRoKjAuMWYqMC4wNWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuNDhmIC0gZkhlaWdodCowLjE4ZiowLjNmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuNDVmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjQ4ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjQ1ZiArIGZXaWR0aCowLjA4ZiowLjJmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjQ4ZiArIGZIZWlnaHQqMC4xOGYqMC4yZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjM3ZiAtIGZXaWR0aCowLjA4ZiowLjJmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjM2ZiAtIGZIZWlnaHQqMC4xOGYqMC43ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjM3ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4zNmYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC4zN2YsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMzZmICsgUFdMX0JFWklFUipmSGVpZ2h0KjAuMTNmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC41ZiArIFBXTF9CRVpJRVIqZldpZHRoKjAuMTNmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjc3ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNWYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuNzdmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC41ZiAtIFBXTF9CRVpJRVIqZldpZHRoKjAuMTNmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjc3ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMzdmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjM2ZiArIFBXTF9CRVpJRVIqZkhlaWdodCowLjEzZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMzdmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjM2ZiksIFBXTFBUX0JFWklFUlRPKSwJCQorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4zN2YsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMzZmIC0gZldpZHRoKjAuMWYqMC42ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMjdmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjM2ZiAtIGZXaWR0aCowLjFmKjAuNmYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjI3ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4zNmYpLCBQV0xQVF9CRVpJRVJUTyksCQkKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjU2ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4xM2YpLCBQV0xQVF9NT1ZFVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuNTZmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjEzZiArIFBXTF9CRVpJRVIqZkhlaWdodCowLjA1NWYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC41MDVmIC0gUFdMX0JFWklFUipmV2lkdGgqMC4wOTVmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjE4NWYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC41MDVmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjE4NWYpLCBQV0xQVF9CRVpJRVJUTyksCQkKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjUwNWYgKyBQV0xfQkVaSUVSKmZXaWR0aCowLjA2NWYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMTg1ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjQ0ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4xM2YgKyBQV0xfQkVaSUVSKmZIZWlnaHQqMC4wNTVmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuNDRmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjEzZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjQ0ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4xM2YgLSBQV0xfQkVaSUVSKmZIZWlnaHQqMC4wNTVmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuNTA1ZiArIFBXTF9CRVpJRVIqZldpZHRoKjAuMDY1ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4wNzVmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuNTA1ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4wNzVmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuNTA1ZiAtIFBXTF9CRVpJRVIqZldpZHRoKjAuMDY1ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4wNzVmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuNTZmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjEzZiAtIFBXTF9CRVpJRVIqZkhlaWdodCowLjA1NWYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC41NmYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMTNmKSwgUFdMUFRfQkVaSUVSVE8pCisJfTsKKworCWlmKHR5cGUgPT0gUFdMUFRfU1RSRUFNKQorCQlzUGF0aERhdGEgPSBHZXRBcHBTdHJlYW1Gcm9tQXJyYXkoUGF0aEFycmF5LCA1OSk7CisJZWxzZQorCQlHZXRQYXRoRGF0YUZyb21BcnJheShwYXRoLCBQYXRoQXJyYXksIDU5KTsKK30KKwordm9pZCBDUFdMX1V0aWxzOjpHZXRHcmFwaGljc19JbnNlcnRUZXh0KENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSkKK3sKKwlGWF9GTE9BVCBmV2lkdGggPSBjckJCb3gucmlnaHQgLSBjckJCb3gubGVmdDsKKwlGWF9GTE9BVCBmSGVpZ2h0ID0gY3JCQm94LnRvcCAtIGNyQkJveC5ib3R0b207CisKKwlDUFdMX1BhdGhEYXRhIFBhdGhBcnJheVtdID0gCisJeworCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMTAsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzEwKSwgUFdMUFRfTU9WRVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzIsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjIvMTUpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzEwLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8xMCksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8xMCwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMTApLCBQV0xQVF9MSU5FVE8pCisJfTsKKworCWlmKHR5cGUgPT0gUFdMUFRfU1RSRUFNKQorCQlzUGF0aERhdGEgPSBHZXRBcHBTdHJlYW1Gcm9tQXJyYXkoUGF0aEFycmF5LCA0KTsKKwllbHNlCisJCUdldFBhdGhEYXRhRnJvbUFycmF5KHBhdGgsIFBhdGhBcnJheSwgNCk7Cit9CisKK3ZvaWQgQ1BXTF9VdGlsczo6R2V0R3JhcGhpY3NfS2V5KENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSkKK3sKKwlGWF9GTE9BVCBmV2lkdGggPSBjckJCb3gucmlnaHQgLSBjckJCb3gubGVmdDsKKwlGWF9GTE9BVCBmSGVpZ2h0ID0gY3JCQm94LnRvcCAtIGNyQkJveC5ib3R0b207CisJRlhfRkxPQVQgayA9IC1mSGVpZ2h0L2ZXaWR0aDsKKwlDUFdMX1BvaW50IHRhaWw7CisJQ1BXTF9Qb2ludCBDaWNsZUNlbnRlcjsKKwl0YWlsLnggPSBjckJCb3gubGVmdCArIGZXaWR0aCowLjlmOworCXRhaWwueSA9IGsqKHRhaWwueCAtIGNyQkJveC5yaWdodCkgKyBjckJCb3guYm90dG9tOworCUNpY2xlQ2VudGVyLnggPSBjckJCb3gubGVmdCArIGZXaWR0aCowLjE1ZjsKKwlDaWNsZUNlbnRlci55ID0gayooQ2ljbGVDZW50ZXIueCAtIGNyQkJveC5yaWdodCkgKyBjckJCb3guYm90dG9tOworCisJQ1BXTF9QYXRoRGF0YSBQYXRoQXJyYXlbXSA9IAorCXsKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KHRhaWwueCArIGZXaWR0aC8zMC4wZiwgLWZXaWR0aC8zMC4wZi9rICsgdGFpbC55KSwgUFdMUFRfTU9WRVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KHRhaWwueCArIGZXaWR0aC8zMC4wZiAtIGZXaWR0aCowLjE4ZiwgLWsqZldpZHRoKjAuMThmIC0gZldpZHRoLzMwL2sgKyB0YWlsLnkpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQodGFpbC54ICsgZldpZHRoLzMwIC0gZldpZHRoKjAuMThmICsgZldpZHRoKjAuMDdmLAorCQkgICAgICAgICAgICAgIC1mV2lkdGgqMC4wN2YvayAtIGsqZldpZHRoKjAuMThmIC0gZldpZHRoLzMwL2sgKyB0YWlsLnkpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQodGFpbC54ICsgZldpZHRoLzMwIC0gZldpZHRoKjAuMThmIC0gZldpZHRoLzIwICsgZldpZHRoKjAuMDdmLAorCQkgICAgICAgICAgICAgIC1mV2lkdGgqMC4wN2YvayAtIGsqZldpZHRoLzIwIC0gaypmV2lkdGgqMC4xOGYgLSBmV2lkdGgvMzAvayArIHRhaWwueSksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludCh0YWlsLnggKyBmV2lkdGgvMzAgLSBmV2lkdGgqMC4xOGYgLSBmV2lkdGgvMjAsCisJCSAgICAgICAgICAgICAgLWsqZldpZHRoLzIwIC0gaypmV2lkdGgqMC4xOGYgLSBmV2lkdGgvMzAvayArIHRhaWwueSksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludCh0YWlsLnggKyBmV2lkdGgvMzAgLSBmV2lkdGgqMC4xOGYgLSBmV2lkdGgvMjAgLSBmV2lkdGgvMTUsCisJCSAgICAgICAgICAgICAgLWsqZldpZHRoLzE1IC0gaypmV2lkdGgvMjAgLSBrKmZXaWR0aCowLjE4ZiAtIGZXaWR0aC8zMC9rICsgdGFpbC55KSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KHRhaWwueCArIGZXaWR0aC8zMCAtIGZXaWR0aCowLjE4ZiAtIGZXaWR0aC8yMCAtIGZXaWR0aC8xNSArIGZXaWR0aCowLjA3ZiwKKwkJICAgICAgICAgICAgICAtZldpZHRoKjAuMDdmL2sgLSBrKmZXaWR0aC8xNSAtIGsqZldpZHRoLzIwIC0gaypmV2lkdGgqMC4xOGYgLSBmV2lkdGgvMzAvayArIHRhaWwueSksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludCh0YWlsLnggKyBmV2lkdGgvMzAgLSBmV2lkdGgqMC4xOGYgLSBmV2lkdGgvMjAgLSBmV2lkdGgvMTUgLSBmV2lkdGgvMjAgKyBmV2lkdGgqMC4wN2YsCisJCSAgICAgICAgICAgICAgLWZXaWR0aCowLjA3Zi9rICsgLWsqZldpZHRoLzIwICsgLWsqZldpZHRoLzE1IC0gaypmV2lkdGgvMjAgLSBrKmZXaWR0aCowLjE4ZiAtIGZXaWR0aC8zMC9rICsgdGFpbC55KSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KHRhaWwueCArIGZXaWR0aC8zMCAtIGZXaWR0aCowLjE4ZiAtIGZXaWR0aC8yMCAtIGZXaWR0aC8xNSAtIGZXaWR0aC8yMCwKKwkJICAgICAgICAgICAgICAtaypmV2lkdGgvMjAgKyAtaypmV2lkdGgvMTUgLSBrKmZXaWR0aC8yMCAtIGsqZldpZHRoKjAuMThmIC0gZldpZHRoLzMwL2sgKyB0YWlsLnkpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQodGFpbC54ICsgZldpZHRoLzMwIC0gZldpZHRoKjAuNDVmLCAtaypmV2lkdGgqMC40NWYgLSBmV2lkdGgvMzAvayArIHRhaWwueSksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludCh0YWlsLnggKyBmV2lkdGgvMzAgLSBmV2lkdGgqMC40NWYgKyBmV2lkdGgqMC4yZiwKKwkJICAgICAgICAgICAgICAtZldpZHRoKjAuNGYvayAtIGsqZldpZHRoKjAuNDVmIC0gZldpZHRoLzMwL2sgKyB0YWlsLnkpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChDaWNsZUNlbnRlci54ICsgZldpZHRoKjAuMmYsIC0gZldpZHRoKjAuMWYvayArIENpY2xlQ2VudGVyLnkpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChDaWNsZUNlbnRlci54LCBDaWNsZUNlbnRlci55KSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoQ2ljbGVDZW50ZXIueCAtIGZXaWR0aC82MC4wZiwgLWsqZldpZHRoLzYwICsgQ2ljbGVDZW50ZXIueSksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KENpY2xlQ2VudGVyLnggLSBmV2lkdGgvNjAsIC1rKmZXaWR0aC82MCArIENpY2xlQ2VudGVyLnkpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChDaWNsZUNlbnRlci54LCBDaWNsZUNlbnRlci55KSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoQ2ljbGVDZW50ZXIueCAtIGZXaWR0aCowLjIyZiwgZldpZHRoKjAuMzVmL2sgKyBDaWNsZUNlbnRlci55IC0gZkhlaWdodCowLjA1ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KHRhaWwueCAtIGZXaWR0aC8zMCAtIGZXaWR0aCowLjQ1ZiAtIGZXaWR0aCowLjE4ZiwgZldpZHRoKjAuMDVmL2sgLSBrKmZXaWR0aCowLjQ1ZiArIGZXaWR0aC8zMC9rICsgdGFpbC55IC0gZkhlaWdodCowLjA1ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KHRhaWwueCAtIGZXaWR0aC8zMC4wZiAtIGZXaWR0aCowLjQ1ZiwgLWsqZldpZHRoKjAuNDVmICsgZldpZHRoLzMwLjBmL2sgKyB0YWlsLnkpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludCh0YWlsLnggLSBmV2lkdGgvMzAuMGYsIGZXaWR0aC8zMC4wZi9rICsgdGFpbC55KSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KHRhaWwueCArIGZXaWR0aC8zMCwgLWZXaWR0aC8zMC9rICsgdGFpbC55KSwgUFdMUFRfTElORVRPKSwJCQorIAkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KENpY2xlQ2VudGVyLnggKyBmV2lkdGgqMC4wOGYsIGsqZldpZHRoKjAuMDhmICsgQ2ljbGVDZW50ZXIueSksIFBXTFBUX01PVkVUTyksCisgCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoQ2ljbGVDZW50ZXIueCArIGZXaWR0aCowLjA4ZiArIGZXaWR0aCowLjFmLCAtZldpZHRoKjAuMWYvayArIGsqZldpZHRoKjAuMDhmICsgQ2ljbGVDZW50ZXIueSksIFBXTFBUX0JFWklFUlRPKSwKKyAJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChDaWNsZUNlbnRlci54ICsgZldpZHRoKjAuMjJmICsgZldpZHRoKjAuMWYsIGsqZldpZHRoKjAuMjJmICsgQ2ljbGVDZW50ZXIueSAtIGZXaWR0aCowLjFmL2spLCBQV0xQVF9CRVpJRVJUTyksCisgCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoQ2ljbGVDZW50ZXIueCArIGZXaWR0aCowLjIyZiwgaypmV2lkdGgqMC4yMmYgKyBDaWNsZUNlbnRlci55KSwgUFdMUFRfQkVaSUVSVE8pLAorIAkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KENpY2xlQ2VudGVyLnggKyBmV2lkdGgqMC4yMmYgLSBmV2lkdGgqMC4xZiwgZldpZHRoKjAuMWYvayArIGsqZldpZHRoKjAuMjJmICsgQ2ljbGVDZW50ZXIueSksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KENpY2xlQ2VudGVyLnggKyBmV2lkdGgqMC4wOGYgLSBmV2lkdGgqMC4xZiwgZldpZHRoKjAuMWYvayArIGsqZldpZHRoKjAuMDhmICsgQ2ljbGVDZW50ZXIueSksIFBXTFBUX0JFWklFUlRPKSwKKyAJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChDaWNsZUNlbnRlci54ICsgZldpZHRoKjAuMDhmLCBrKmZXaWR0aCowLjA4ZiArIENpY2xlQ2VudGVyLnkpLCBQV0xQVF9CRVpJRVJUTykKKwl9OworCisJaWYodHlwZSA9PSBQV0xQVF9TVFJFQU0pCisJCXNQYXRoRGF0YSA9IEdldEFwcFN0cmVhbUZyb21BcnJheShQYXRoQXJyYXksIDI4KTsKKwllbHNlCisJCUdldFBhdGhEYXRhRnJvbUFycmF5KHBhdGgsIFBhdGhBcnJheSwgMjgpOworfQorCit2b2lkIENQV0xfVXRpbHM6OkdldEdyYXBoaWNzX05ld1BhcmFncmFwaChDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpCit7CisJRlhfRkxPQVQgZldpZHRoID0gY3JCQm94LnJpZ2h0IC0gY3JCQm94LmxlZnQ7CisJRlhfRkxPQVQgZkhlaWdodCA9IGNyQkJveC50b3AgLSBjckJCb3guYm90dG9tOworCisJQ1BXTF9QYXRoRGF0YSBQYXRoQXJyYXlbXSA9IAorCXsKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzIuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzIwLjBmKSwgUFdMUFRfTU9WRVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzEwLjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC8yLjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC8xMC4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvMi4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8yLjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC8yMC4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjEyZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMTcvMzAuMGYpLCBQV0xQVF9NT1ZFVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4xMmYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzEwLjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMjJmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8xMC4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjIyZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMTcvMzAuMGYgLSBmV2lkdGgqMC4xNGYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4zOGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzEwLjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNDhmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8xMC4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjQ4ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMTcvMzAuMGYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4zOGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjE3LzMwLjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMzhmLCBjckJCb3guYm90dG9tICsgZldpZHRoKjAuMjRmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMjJmLCBjckJCb3gudG9wIC0gZkhlaWdodCoxNy8zMC4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjEyZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMTcvMzAuMGYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC42ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMTAuMGYpLCBQV0xQVF9NT1ZFVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC43ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMTAuMGYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC43ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMTAuMGYgKyBmSGVpZ2h0LzcuMGYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC45N2YsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzEwLjBmICsgZkhlaWdodC83LjBmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC45N2YsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjE3LzMwLjBmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC43ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMTcvMzAuMGYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjZmLCBjckJCb3gudG9wIC0gZkhlaWdodCoxNy8zMC4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjZmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8xMC4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjdmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC83ICsgZkhlaWdodCowLjE4ZiksIFBXTFBUX01PVkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjg1ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvNyArIGZIZWlnaHQqMC4xOGYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjg1ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMTcvMzAuMGYgLSBmSGVpZ2h0KjAuMDhmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC43ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMTcvMzAuMGYgLSBmSGVpZ2h0KjAuMDhmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC43ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvNyArIGZIZWlnaHQqMC4xOGYpLCBQV0xQVF9MSU5FVE8pCisJfTsKKworCWlmKHR5cGUgPT0gUFdMUFRfU1RSRUFNKQorCQlzUGF0aERhdGEgPSBHZXRBcHBTdHJlYW1Gcm9tQXJyYXkoUGF0aEFycmF5LCAyOCk7CisJZWxzZQorCQlHZXRQYXRoRGF0YUZyb21BcnJheShwYXRoLCBQYXRoQXJyYXksIDI4KTsKK30KKwordm9pZCBDUFdMX1V0aWxzOjpHZXRHcmFwaGljc19UZXh0Tm90ZShDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpCit7CisJRlhfRkxPQVQgZldpZHRoID0gY3JCQm94LnJpZ2h0IC0gY3JCQm94LmxlZnQ7CisJRlhfRkxPQVQgZkhlaWdodCA9IGNyQkJveC50b3AgLSBjckJCb3guYm90dG9tOworCisJQ1BXTF9QYXRoRGF0YSBQYXRoQXJyYXlbXSA9IAorCXsKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCozLzEwLjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodC8xNS4wZiksIFBXTFBUX01PVkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCo3LzEwLjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCo0LzE1LjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC8xMC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqNC8xNS4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMTAuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzE1LjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzEwLjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC8xNS4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8xMC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMTUuMGYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjMvMTAuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzE1LjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC8xMC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqNC8xNS4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMy8xMC4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMTUuMGYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjMvMTAuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjQvMTUuMGYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzEwLjBmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCo0LzE1LjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzUuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjQvMTUuMGYpLCBQV0xQVF9NT1ZFVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzUuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjQvMTUuMGYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvNS4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqNy8xNS4wZiksIFBXTFBUX01PVkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvNS4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqNy8xNS4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC81LjBmLCBjckJCb3gudG9wIC0gZkhlaWdodCoxMC8xNS4wZiksIFBXTFBUX01PVkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMy8xMC4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMTAvMTUuMGYpLCBQV0xQVF9MSU5FVE8pCisJfTsKKworCWlmKHR5cGUgPT0gUFdMUFRfU1RSRUFNKQorCQlzUGF0aERhdGEgPSBHZXRBcHBTdHJlYW1Gcm9tQXJyYXkoUGF0aEFycmF5LCAxNyk7CisJZWxzZQorCQlHZXRQYXRoRGF0YUZyb21BcnJheShwYXRoLCBQYXRoQXJyYXksIDE3KTsKK30KKwordm9pZCBDUFdMX1V0aWxzOjpHZXRHcmFwaGljc19QYXJhZ3JhcGgoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKQoreworCUZYX0ZMT0FUIGZXaWR0aCA9IGNyQkJveC5yaWdodCAtIGNyQkJveC5sZWZ0OworCUZYX0ZMT0FUIGZIZWlnaHQgPSBjckJCb3gudG9wIC0gY3JCQm94LmJvdHRvbTsKKworCUNQV0xfUGF0aERhdGEgUGF0aEFycmF5W10gPQorCXsKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzIuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzE1LjBmKSwgUFdMUFRfTU9WRVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuN2YsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzE1LjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuN2YsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzE1LjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNjM0ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvMTUuMGYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC42MzRmLCBjckJCb3gudG9wIC0gZkhlaWdodCoyLzE1LjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNTY2ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMi8xNS4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjU2NmYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzE1LjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzIuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzE1LjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzIuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzE1LjBmIC0gZkhlaWdodCowLjRmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMmYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzE1LjBmIC0gZkhlaWdodCowLjRmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4yZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvMTUuMGYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8yLjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC8xNS4wZiksIFBXTFBUX0JFWklFUlRPKQorCX07CisKKwlpZih0eXBlID09IFBXTFBUX1NUUkVBTSkKKwkJc1BhdGhEYXRhID0gR2V0QXBwU3RyZWFtRnJvbUFycmF5KFBhdGhBcnJheSwgMTIpOworCWVsc2UKKwkJR2V0UGF0aERhdGFGcm9tQXJyYXkocGF0aCwgUGF0aEFycmF5LCAxMik7Cit9CisKK3ZvaWQgQ1BXTF9VdGlsczo6R2V0R3JhcGhpY3NfUmlnaHRBcnJvdyhDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpCit7CisJRlhfRkxPQVQgZldpZHRoID0gY3JCQm94LnJpZ2h0IC0gY3JCQm94LmxlZnQ7CisJRlhfRkxPQVQgZkhlaWdodCA9IGNyQkJveC50b3AgLSBjckJCb3guYm90dG9tOworCisJQ1BXTF9QYXRoRGF0YSBQYXRoQXJyYXlbXSA9IAorCXsKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC8xNS4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvMi4wZiksIFBXTFBUX01PVkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8yLjBmICsgZldpZHRoLzguMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzUuMGYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMi4wZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQvNS4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMTUuMGYgLSBmV2lkdGgqMC4xNWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzIuMGYgLSBmV2lkdGgvMjUuMGYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4xZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvMi4wZiAtIGZXaWR0aC8yNS4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjFmLCBjckJCb3gudG9wIC0gZkhlaWdodC8yLjBmICsgZldpZHRoLzI1LjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC8xNS4wZiAtIGZXaWR0aCowLjE1ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvMi4wZiArIGZXaWR0aC8yNS4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8yLjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC81LjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzIuMGYgKyBmV2lkdGgvOC4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvNS4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMTUuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzIuMGYpLCBQV0xQVF9MSU5FVE8pCisJfTsKKworCWlmKHR5cGUgPT0gUFdMUFRfU1RSRUFNKQorCQlzUGF0aERhdGEgPSBHZXRBcHBTdHJlYW1Gcm9tQXJyYXkoUGF0aEFycmF5LCAxMCk7CisJZWxzZQorCQlHZXRQYXRoRGF0YUZyb21BcnJheShwYXRoLCBQYXRoQXJyYXksIDEwKTsKK30KKwordm9pZCBDUFdMX1V0aWxzOjpHZXRHcmFwaGljc19SaWdodFBvaW50ZXIoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKQoreworCUZYX0ZMT0FUIGZXaWR0aCA9IGNyQkJveC5yaWdodCAtIGNyQkJveC5sZWZ0OworCUZYX0ZMT0FUIGZIZWlnaHQgPSBjckJCb3gudG9wIC0gY3JCQm94LmJvdHRvbTsKKworCUNQV0xfUGF0aERhdGEgUGF0aEFycmF5W10gPSAKKwl7CisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMzAuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzIuMGYpLCBQV0xQVF9NT1ZFVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMzAuMGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzYuMGYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqNC8xNS4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvMi4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8zMC4wZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQvNi4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMzAuMGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0LzIuMGYpLCBQV0xQVF9MSU5FVE8pCisJfTsKKworCWlmKHR5cGUgPT0gUFdMUFRfU1RSRUFNKQorCQlzUGF0aERhdGEgPSBHZXRBcHBTdHJlYW1Gcm9tQXJyYXkoUGF0aEFycmF5LCA1KTsKKwllbHNlCisJCUdldFBhdGhEYXRhRnJvbUFycmF5KHBhdGgsIFBhdGhBcnJheSwgNSk7Cit9CisKK3ZvaWQgQ1BXTF9VdGlsczo6R2V0R3JhcGhpY3NfU3RhcihDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpCit7CisJRlhfRkxPQVQgZkxvbmdSYWRpdXMgPSAoY3JCQm94LnRvcCAtIGNyQkJveC5ib3R0b20pLygxKyhGWF9GTE9BVCljb3MoUFdMX1BJLzUuMGYpKTsKKwlmTG9uZ1JhZGl1cyA9IGZMb25nUmFkaXVzICogMC43ZjsKKwlGWF9GTE9BVCBmU2hvcnRSYWRpdXMgPSBmTG9uZ1JhZGl1cyAqIDAuNTVmOworCUNQREZfUG9pbnQgcHRDZW50ZXIgPSBDUERGX1BvaW50KChjckJCb3gubGVmdCArIGNyQkJveC5yaWdodCkgLyAyLjBmLChjckJCb3gudG9wICsgY3JCQm94LmJvdHRvbSkgLyAyLjBmKTsKKwkKKwlGWF9GTE9BVCBweDFbNV0sIHB5MVs1XTsKKwlGWF9GTE9BVCBweDJbNV0sIHB5Mls1XTsKKworCUZYX0ZMT0FUIGZBbmdlbCA9IFBXTF9QSS8xMC4wZjsKKworCWZvciAoRlhfSU5UMzIgaT0wOyBpPDU7IGkrKykKKwl7CisJCXB4MVtpXSA9IHB0Q2VudGVyLnggKyBmTG9uZ1JhZGl1cyAqIChGWF9GTE9BVCljb3MoZkFuZ2VsKTsKKwkJcHkxW2ldID0gcHRDZW50ZXIueSArIGZMb25nUmFkaXVzICogKEZYX0ZMT0FUKXNpbihmQW5nZWwpOworCisJCWZBbmdlbCArPSBQV0xfUEkgKiAyIC8gNS4wZjsKKwl9CisKKwlmQW5nZWwgPSBQV0xfUEkvNS4wZiArIFBXTF9QSS8xMC4wZjsKKworCWZvciAoRlhfSU5UMzIgaj0wOyBqPDU7IGorKykKKwl7CisJCXB4MltqXSA9IHB0Q2VudGVyLnggKyBmU2hvcnRSYWRpdXMgKiAoRlhfRkxPQVQpY29zKGZBbmdlbCk7CisJCXB5MltqXSA9IHB0Q2VudGVyLnkgKyBmU2hvcnRSYWRpdXMgKiAoRlhfRkxPQVQpc2luKGZBbmdlbCk7CisKKwkJZkFuZ2VsICs9IFBXTF9QSSAqIDIgLyA1LjBmOworCX0KKworCUNQV0xfUGF0aERhdGEgUGF0aEFycmF5WzExXTsKKwlQYXRoQXJyYXlbMF0gPSBDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQocHgxWzBdLCBweTFbMF0pLCBQV0xQVF9NT1ZFVE8pOworCVBhdGhBcnJheVsxXSA9IENQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChweDJbMF0sIHB5MlswXSksIFBXTFBUX0xJTkVUTyk7CisKKwlmb3IoRlhfSU5UMzIgayA9IDA7IGsgPCA0OyBrKyspCisJeworCQlQYXRoQXJyYXlbKGsrMSkqMl0gPSBDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQocHgxW2srMV0sIHB5MVtrKzFdKSwgUFdMUFRfTElORVRPKTsKKwkJUGF0aEFycmF5WyhrKzEpKjIgKyAxXSA9IENQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChweDJbaysxXSwgcHkyW2srMV0pLCBQV0xQVF9MSU5FVE8pOworCX0KKworCVBhdGhBcnJheVsxMF0gPSBDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQocHgxWzBdLCBweTFbMF0pLCBQV0xQVF9MSU5FVE8pOworCisJaWYodHlwZSA9PSBQV0xQVF9TVFJFQU0pCisJCXNQYXRoRGF0YSA9IEdldEFwcFN0cmVhbUZyb21BcnJheShQYXRoQXJyYXksIDExKTsKKwllbHNlCisJCUdldFBhdGhEYXRhRnJvbUFycmF5KHBhdGgsIFBhdGhBcnJheSwgMTEpOworfQorCit2b2lkIENQV0xfVXRpbHM6OkdldEdyYXBoaWNzX1VwQXJyb3coQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKQoreworCUZYX0ZMT0FUIGZXaWR0aCA9IGNyQkJveC5yaWdodCAtIGNyQkJveC5sZWZ0OworCUZYX0ZMT0FUIGZIZWlnaHQgPSBjckJCb3gudG9wIC0gY3JCQm94LmJvdHRvbTsKKworCUNQV0xfUGF0aERhdGEgUGF0aEFycmF5W10gPSAKKwl7CisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8yLjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC8xNS4wZiksIFBXTFBUX01PVkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMTAuMGYsIGNyQkJveC50b3AgLSBmV2lkdGgqMy81LjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNmYsIGNyQkJveC50b3AgLSBmV2lkdGgqMy81LjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNmYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzE1LjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0LzE1LjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNGYsIGNyQkJveC50b3AgLSBmV2lkdGgqMy81LjBmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzEwLCBjckJCb3gudG9wIC0gZldpZHRoKjMvNS4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8yLjBmLCBjckJCb3gudG9wIC0gZkhlaWdodC8xNS4wZiksIFBXTFBUX0xJTkVUTykKKwl9OworCisJaWYodHlwZSA9PSBQV0xQVF9TVFJFQU0pCisJCXNQYXRoRGF0YSA9IEdldEFwcFN0cmVhbUZyb21BcnJheShQYXRoQXJyYXksIDgpOworCWVsc2UKKwkJR2V0UGF0aERhdGFGcm9tQXJyYXkocGF0aCwgUGF0aEFycmF5LCA4KTsKK30KKwordm9pZCBDUFdMX1V0aWxzOjpHZXRHcmFwaGljc19VcExlZnRBcnJvdyhDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpCit7CisJRlhfRkxPQVQgZldpZHRoID0gY3JCQm94LnJpZ2h0IC0gY3JCQm94LmxlZnQ7CisJRlhfRkxPQVQgZkhlaWdodCA9IGNyQkJveC50b3AgLSBjckJCb3guYm90dG9tOworCUNQV0xfUG9pbnQgbGVmdHVwKGNyQkJveC5sZWZ0LCBjckJCb3gudG9wKTsKKwlDUFdMX1BvaW50IHJpZ2h0ZG93bihjckJCb3gucmlnaHQsIGNyQkJveC5ib3R0b20pOworCUZYX0ZMT0FUIGsgPSAtZkhlaWdodC9mV2lkdGg7CisJQ1BXTF9Qb2ludCB0YWlsOworCXRhaWwueCA9IGNyQkJveC5sZWZ0ICsgZldpZHRoKjQvNS4wZjsKKwl0YWlsLnkgPSBrKih0YWlsLnggLSBjckJCb3gucmlnaHQpICsgcmlnaHRkb3duLnk7CisKKwlDUFdMX1BhdGhEYXRhIFBhdGhBcnJheVtdID0gCisJeworCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvMjAuMGYsIGsqKGNyQkJveC5sZWZ0ICsgZldpZHRoLzIwLjBmIC0gcmlnaHRkb3duLngpICsgcmlnaHRkb3duLnkpLCBQV0xQVF9NT1ZFVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoZkhlaWdodCoxNy82MC4wZi9rICsgdGFpbC54ICsgZldpZHRoLzEwLjBmICsgZldpZHRoLzUuMGYsCisJCSAgICAgICAgICAgICAgLWZXaWR0aC81LjBmL2sgKyB0YWlsLnkgLSBmV2lkdGgvMTAuMGYvayArIGZIZWlnaHQqMTcvNjAuMGYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoZkhlaWdodCoxNy82MC4wZi9rICsgdGFpbC54ICsgZldpZHRoLzEwLjBmLAorCQkgICAgICAgICAgICAgIHRhaWwueSAtIGZXaWR0aC8xMC4wZi9rICsgZkhlaWdodCoxNy82MC4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludCh0YWlsLnggKyBmV2lkdGgvMTAuMGYsIHRhaWwueSAtIGZXaWR0aC8xMC4wZi9rKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KHRhaWwueCAtIGZXaWR0aC8xMC4wZiwgdGFpbC55ICsgZldpZHRoLzEwLjBmL2spLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoZkhlaWdodCoxNy82MC4wZi9rICsgdGFpbC54IC0gZldpZHRoLzEwLjBmLCB0YWlsLnkgKyBmV2lkdGgvMTAuMGYvayArIGZIZWlnaHQqMTcvNjAuMGYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoZkhlaWdodCoxNy82MC4wZi9rICsgdGFpbC54IC0gZldpZHRoLzEwLjBmIC0gZldpZHRoLzUuMGYsCisJCSAgICAgICAgICAgICAgZldpZHRoLzUuMGYvayArIHRhaWwueSArIGZXaWR0aC8xMC4wZi9rICsgZkhlaWdodCoxNy82MC4wZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC8yMC4wZiwgayooY3JCQm94LmxlZnQgKyBmV2lkdGgvMjAuMGYgLSByaWdodGRvd24ueCkgKyByaWdodGRvd24ueSksIFBXTFBUX0xJTkVUTykKKwl9OworCisJaWYodHlwZSA9PSBQV0xQVF9TVFJFQU0pCisJCXNQYXRoRGF0YSA9IEdldEFwcFN0cmVhbUZyb21BcnJheShQYXRoQXJyYXksIDgpOworCWVsc2UKKwkJR2V0UGF0aERhdGFGcm9tQXJyYXkocGF0aCwgUGF0aEFycmF5LCA4KTsKK30KKwordm9pZCBDUFdMX1V0aWxzOjpHZXRHcmFwaGljc19HcmFwaChDRlhfQnl0ZVN0cmluZyYgc1BhdGhEYXRhLCBDRlhfUGF0aERhdGEmIHBhdGgsIGNvbnN0IENQREZfUmVjdCYgY3JCQm94LCBjb25zdCBQV0xfUEFUSF9UWVBFIHR5cGUpCit7CisJRlhfRkxPQVQgZldpZHRoID0gY3JCQm94LnJpZ2h0IC0gY3JCQm94LmxlZnQ7CisJRlhfRkxPQVQgZkhlaWdodCA9IGNyQkJveC50b3AgLSBjckJCb3guYm90dG9tOworCisJQ1BXTF9QYXRoRGF0YSBQYXRoQXJyYXlbXSA9IAorCXsKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMDVmLCBjckJCb3gudG9wIC0gZldpZHRoKjAuMTVmKSwgUFdMUFRfTU9WRVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMjVmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjE1ZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjI3NWYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMDhmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMDVmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjA4ZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjA1ZiwgY3JCQm94LnRvcCAtIGZXaWR0aCowLjE1ZiksIFBXTFBUX0xJTkVUTyksCisKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMjc1ZiwgY3JCQm94LnRvcCAtIGZXaWR0aCowLjQ1ZiksIFBXTFBUX01PVkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjQ3NWYsIGNyQkJveC50b3AgLSBmV2lkdGgqMC40NWYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC40NzVmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjA4ZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjI3NWYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMDhmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMjc1ZiwgY3JCQm94LnRvcCAtIGZXaWR0aCowLjQ1ZiksIFBXTFBUX0xJTkVUTyksCisKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMDVmKSwgUFdMUFRfTU9WRVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuN2YsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMDVmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuN2YsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMDhmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNWYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMDhmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMDVmKSwgUFdMUFRfTElORVRPKSwKKworCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC43MjVmLCBjckJCb3gudG9wIC0gZldpZHRoKjAuMzVmKSwgUFdMUFRfTU9WRVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuOTI1ZiwgY3JCQm94LnRvcCAtIGZXaWR0aCowLjM1ZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjkyNWYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMDhmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNzI1ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4wOGYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC43MjVmLCBjckJCb3gudG9wIC0gZldpZHRoKjAuMzVmKSwgUFdMUFRfTElORVRPKQorCX07CisKKwlpZih0eXBlID09IFBXTFBUX1NUUkVBTSkKKwkJc1BhdGhEYXRhID0gR2V0QXBwU3RyZWFtRnJvbUFycmF5KFBhdGhBcnJheSwgMjApOworCWVsc2UKKwkJR2V0UGF0aERhdGFGcm9tQXJyYXkocGF0aCwgUGF0aEFycmF5LCAyMCk7Cit9CisKK3ZvaWQgQ1BXTF9VdGlsczo6R2V0R3JhcGhpY3NfUGFwZXJjbGlwKENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSkKK3sKKwlGWF9GTE9BVCBmV2lkdGggPSBjckJCb3gucmlnaHQgLSBjckJCb3gubGVmdDsKKwlGWF9GTE9BVCBmSGVpZ2h0ID0gY3JCQm94LnRvcCAtIGNyQkJveC5ib3R0b207CisKKwlDUFdMX1BhdGhEYXRhIFBhdGhBcnJheVtdID0gCisJeworCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvNjAsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMjVmKSwgUFdMUFRfTU9WRVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzYwLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjI1ZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC82MCwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4yNWYgLSBmV2lkdGgqNTcvNjAuMGYqMC4zNWYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMzAsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMjVmIC0gZldpZHRoKjU3LzYwLjBmKjAuMzVmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzMwLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjI1ZiksIFBXTFBUX0JFWklFUlRPKSwKKworCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzMwLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjMzZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMzAsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMzNmICsgZkhlaWdodC8xNSowLjVmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzMwIC0gZldpZHRoKjAuMTJmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjMzZiArIGZIZWlnaHQvMTUqMC41ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC8zMCAtIGZXaWR0aCowLjEyZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4zM2YpLCBQV0xQVF9CRVpJRVJUTyksCisJCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMzAgLSBmV2lkdGgqMC4xMmYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMmYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzMwIC0gZldpZHRoKjAuMTJmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjJmIC0gKGZXaWR0aCo1Ny82MC4wZiAtIGZXaWR0aCowLjI0ZikqMC4yNWYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC82MCArIGZXaWR0aCowLjEyZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4yZiAtIChmV2lkdGgqNTcvNjAuMGYgLSBmV2lkdGgqMC4yNGYpKjAuMjVmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgvNjAgKyBmV2lkdGgqMC4xMmYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMmYpLCBQV0xQVF9CRVpJRVJUTyksCisKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzYwICsgZldpZHRoKjAuMTJmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjJmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzYwICsgZldpZHRoKjAuMTJmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjJmICsgKGZXaWR0aCoxMS8xMi4wZiAtIGZXaWR0aCowLjM2ZikqMC4yNWYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMTUgLSBmV2lkdGgqMC4yNGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMmYgKyAoZldpZHRoKjExLzEyLjBmIC0gZldpZHRoKjAuMzZmKSowLjI1ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC8xNSAtIGZXaWR0aCowLjI0ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4yZiksIFBXTFBUX0JFWklFUlRPKSwKKworCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzE1IC0gZldpZHRoKjAuMjRmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjI1ZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMTUgLSBmV2lkdGgqMC4yNGYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMjVmIC0gKGZXaWR0aCoxNC8xNS4wZiAtIGZXaWR0aCowLjUzZikqMC4yNWYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjI5ZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4yNWYgLSAoZldpZHRoKjE0LzE1LjBmIC0gZldpZHRoKjAuNTNmKSowLjI1ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMjlmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjI1ZiksIFBXTFBUX0JFWklFUlRPKSwKKworCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4yOWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMzNmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMjlmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjMzZiArIGZXaWR0aCowLjEyZiowLjM1ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMTdmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjMzZiArIGZXaWR0aCowLjEyZiowLjM1ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMTdmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjMzZiksIFBXTFBUX0JFWklFUlRPKSwKKworCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4xN2YsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuM2YpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4xN2YsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuM2YgLSBmV2lkdGgqKDE0LzE1LjBmIC0gMC4yOWYpKjAuMzVmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzE1IC0gZldpZHRoKjAuMTJmLCBjckJCb3guYm90dG9tICsgZkhlaWdodCowLjNmIC0gZldpZHRoKigxNC8xNS4wZiAtIDAuMjlmKSowLjM1ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aC8xNSAtIGZXaWR0aCowLjEyZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4zZiksIFBXTFBUX0JFWklFUlRPKSwKKworCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoLzE1IC0gZldpZHRoKjAuMTJmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjI1ZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgvMTUgLSBmV2lkdGgqMC4xMmYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMjVmICsgZldpZHRoKjAuMzVmKigxMS8xMi4wZiAtIDAuMTJmKSksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoLzYwLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjI1ZiArIGZXaWR0aCowLjM1ZiooMTEvMTIuMGYgLSAwLjEyZikpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aC82MCwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4yNWYpLCBQV0xQVF9CRVpJRVJUTykKKwl9OworCisJaWYodHlwZSA9PSBQV0xQVF9TVFJFQU0pCisJCXNQYXRoRGF0YSA9IEdldEFwcFN0cmVhbUZyb21BcnJheShQYXRoQXJyYXksIDMzKTsKKwllbHNlCisJCUdldFBhdGhEYXRhRnJvbUFycmF5KHBhdGgsIFBhdGhBcnJheSwgMzMpOwkKK30KKwordm9pZCBDUFdMX1V0aWxzOjpHZXRHcmFwaGljc19BdHRhY2htZW50KENGWF9CeXRlU3RyaW5nJiBzUGF0aERhdGEsIENGWF9QYXRoRGF0YSYgcGF0aCwgY29uc3QgQ1BERl9SZWN0JiBjckJCb3gsIGNvbnN0IFBXTF9QQVRIX1RZUEUgdHlwZSkKK3sKKwlGWF9GTE9BVCBmV2lkdGggPSBjckJCb3gucmlnaHQgLSBjckJCb3gubGVmdDsKKwlGWF9GTE9BVCBmSGVpZ2h0ID0gY3JCQm94LnRvcCAtIGNyQkJveC5ib3R0b207CisKKwlDUFdMX1BhdGhEYXRhIFBhdGhBcnJheVtdID0gCisJeworCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4yNWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMWYpLCBQV0xQVF9NT1ZFVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC40ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4yM2YpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC40ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC41ZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjRmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjVmICsgZldpZHRoKjAuMDRmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC42ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC41ZiArIGZXaWR0aCowLjA0ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNmYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuNWYpLCBQV0xQVF9CRVpJRVJUTyksCisKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNmYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuMjNmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjI1ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4xZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjI1ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4xZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjRmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjIzZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjZmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjIzZiksIFBXTFBUX0xJTkVUTyksCisKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuNWYpLCBQV0xQVF9NT1ZFVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC40ZiAtIGZXaWR0aCowLjI1ZiowLjRmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjVmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4xNWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuNjVmICsgZkhlaWdodCowLjE1ZiowLjRmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4xNWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuNjVmKSwgUFdMUFRfQkVaSUVSVE8pLAorCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC4xNWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuNjVmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjE1ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC42NWYgKyBmSGVpZ2h0KjAuMTVmKjAuNGYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjZmICsgZldpZHRoKjAuMjVmKjAuNGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuNWYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjZmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjVmKSwgUFdMUFRfQkVaSUVSVE8pLAorCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjZmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjVmICsgZldpZHRoKjAuMDRmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC40ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC41ZiArIGZXaWR0aCowLjA0ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuNWYpLCBQV0xQVF9CRVpJRVJUTyksCisKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuNjVmKSwgUFdMUFRfTU9WRVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNWYsIGNyQkJveC5ib3R0b20gKyBmSGVpZ2h0KjAuMWYpLCBQV0xQVF9MSU5FVE8pCisJfTsKKworCWlmKHR5cGUgPT0gUFdMUFRfU1RSRUFNKQorCQlzUGF0aERhdGEgPSBHZXRBcHBTdHJlYW1Gcm9tQXJyYXkoUGF0aEFycmF5LCAyNCk7CisJZWxzZQorCQlHZXRQYXRoRGF0YUZyb21BcnJheShwYXRoLCBQYXRoQXJyYXksIDI0KTsKK30KKwordm9pZCBDUFdMX1V0aWxzOjpHZXRHcmFwaGljc19UYWcoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKQoreworCUZYX0ZMT0FUIGZXaWR0aCA9IGNyQkJveC5yaWdodCAtIGNyQkJveC5sZWZ0OworCUZYX0ZMT0FUIGZIZWlnaHQgPSBjckJCb3gudG9wIC0gY3JCQm94LmJvdHRvbTsKKworCUNQV0xfUGF0aERhdGEgUGF0aEFycmF5W10gPSAKKwl7CisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjRmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjFmKSwgUFdMUFRfTU9WRVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuMWYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuNWYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC4zZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4xZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC4xZiwgY3JCQm94LmJvdHRvbSArIGZIZWlnaHQqMC4xZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC4xZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC4xZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjRmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjFmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0ICsgZldpZHRoKjAuNGYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuM2YpLCBQV0xQVF9NT1ZFVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0IC0gZldpZHRoKjAuMmYsIGNyQkJveC50b3AgLSBmSGVpZ2h0KjAuM2YpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQgKyBmV2lkdGgqMC40ZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC41ZiksIFBXTFBUX01PVkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQgLSBmV2lkdGgqMC4yZiwgY3JCQm94LnRvcCAtIGZIZWlnaHQqMC41ZiksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCArIGZXaWR0aCowLjRmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjdmKSwgUFdMUFRfTU9WRVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCAtIGZXaWR0aCowLjJmLCBjckJCb3gudG9wIC0gZkhlaWdodCowLjdmKSwgUFdMUFRfTElORVRPKQorCX07CisKKwlpZih0eXBlID09IFBXTFBUX1NUUkVBTSkKKwkJc1BhdGhEYXRhID0gR2V0QXBwU3RyZWFtRnJvbUFycmF5KFBhdGhBcnJheSwgMTIpOworCWVsc2UKKwkJR2V0UGF0aERhdGFGcm9tQXJyYXkocGF0aCwgUGF0aEFycmF5LCAxMik7Cit9CisKK3ZvaWQgQ1BXTF9VdGlsczo6R2V0R3JhcGhpY3NfRm94aXQoQ0ZYX0J5dGVTdHJpbmcmIHNQYXRoRGF0YSwgQ0ZYX1BhdGhEYXRhJiBwYXRoLCBjb25zdCBDUERGX1JlY3QmIGNyQkJveCwgY29uc3QgUFdMX1BBVEhfVFlQRSB0eXBlKQoreworCUZYX0ZMT0FUIGZPdXRXaWR0aCA9IGNyQkJveC5yaWdodCAtIGNyQkJveC5sZWZ0OworCUZYX0ZMT0FUIGZPdXRIZWlnaHQgPSBjckJCb3gudG9wIC0gY3JCQm94LmJvdHRvbTsKKworCUNQREZfUmVjdCBjckluQm94ID0gY3JCQm94OworCWNySW5Cb3gubGVmdCA9IGNyQkJveC5sZWZ0ICsgZk91dFdpZHRoKjAuMDhmOworCWNySW5Cb3gucmlnaHQgPSBjckJCb3gucmlnaHQgLSBmT3V0V2lkdGgqMC4wOGY7CisJY3JJbkJveC50b3AgPSBjckJCb3gudG9wIC0gZk91dEhlaWdodCowLjA4ZjsKKwljckluQm94LmJvdHRvbSA9IGNyQkJveC5ib3R0b20gKyBmT3V0SGVpZ2h0KjAuMDhmOworCisJRlhfRkxPQVQgZldpZHRoID0gY3JJbkJveC5yaWdodCAtIGNySW5Cb3gubGVmdDsKKwlGWF9GTE9BVCBmSGVpZ2h0ID0gY3JJbkJveC50b3AgLSBjckluQm94LmJvdHRvbTsKKworCUNQV0xfUGF0aERhdGEgUGF0aEFycmF5W10gPSAKKwl7CisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckluQm94LmxlZnQsIGNySW5Cb3gudG9wKSwgUFdMUFRfTU9WRVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNySW5Cb3gubGVmdCArIGZXaWR0aCowLjQ1ZiwgY3JJbkJveC50b3ApLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JJbkJveC5sZWZ0ICsgZldpZHRoKjAuNDVmLCBjckluQm94LnRvcCAtIFBXTF9CRVpJRVIgKiBmSGVpZ2h0ICogMC40ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNySW5Cb3gubGVmdCArIGZXaWR0aCowLjQ1ZiAgLSBQV0xfQkVaSUVSICogZldpZHRoICogMC40NWYsIGNySW5Cb3gudG9wIC0gZkhlaWdodCowLjRmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JJbkJveC5sZWZ0LCBjckluQm94LnRvcCAtIGZIZWlnaHQqMC40ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNySW5Cb3gubGVmdCwgY3JJbkJveC50b3ApLCBQV0xQVF9MSU5FVE8pLAorCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckluQm94LmxlZnQgKyBmV2lkdGgqMC42MGYsIGNySW5Cb3gudG9wKSwgUFdMUFRfTU9WRVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNySW5Cb3gubGVmdCArIGZXaWR0aCowLjc1ZiwgY3JJbkJveC50b3ApLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JJbkJveC5sZWZ0ICsgZldpZHRoKjAuNzVmLCBjckluQm94LnRvcCAtIFBXTF9CRVpJRVIgKiBmSGVpZ2h0ICogMC43ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNySW5Cb3gubGVmdCArIGZXaWR0aCowLjc1ZiAgLSBQV0xfQkVaSUVSICogZldpZHRoICogMC43NWYsIGNySW5Cb3gudG9wIC0gZkhlaWdodCowLjdmKSwgUFdMUFRfQkVaSUVSVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JJbkJveC5sZWZ0LCBjckluQm94LnRvcCAtIGZIZWlnaHQqMC43ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNySW5Cb3gubGVmdCwgY3JJbkJveC50b3AgLSBmSGVpZ2h0KjAuNTVmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNySW5Cb3gubGVmdCArIFBXTF9CRVpJRVIgKiBmV2lkdGgqMC42MGYsIGNySW5Cb3gudG9wIC0gZkhlaWdodCowLjU1ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNySW5Cb3gubGVmdCArIGZXaWR0aCAqIDAuNjBmLCBjckluQm94LnRvcCAtIFBXTF9CRVpJRVIgKiBmSGVpZ2h0ICogMC41NWYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckluQm94LmxlZnQgKyBmV2lkdGggKiAwLjYwZiwgY3JJbkJveC50b3ApLCBQV0xQVF9CRVpJRVJUTyksCisKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNySW5Cb3gubGVmdCArIGZXaWR0aCowLjkwZiwgY3JJbkJveC50b3ApLCBQV0xQVF9NT1ZFVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JJbkJveC5sZWZ0ICsgZldpZHRoKjAuOTBmLCBjckluQm94LnRvcCAtIFBXTF9CRVpJRVIgKiBmSGVpZ2h0ICogMC44NWYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckluQm94LmxlZnQgKyBmV2lkdGgqMC45MGYgIC0gUFdMX0JFWklFUiAqIGZXaWR0aCAqIDAuOTBmLCBjckluQm94LnRvcCAtIGZIZWlnaHQqMC44NWYpLCBQV0xQVF9CRVpJRVJUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckluQm94LmxlZnQsIGNySW5Cb3gudG9wIC0gZkhlaWdodCowLjg1ZiksIFBXTFBUX0JFWklFUlRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNySW5Cb3gubGVmdCwgY3JJbkJveC5ib3R0b20pLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JJbkJveC5yaWdodCwgY3JJbkJveC5ib3R0b20pLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JJbkJveC5yaWdodCwgY3JJbkJveC50b3ApLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JJbkJveC5sZWZ0ICsgZldpZHRoKjAuOTBmLCBjckluQm94LnRvcCksIFBXTFBUX0xJTkVUTyksCisKKwkJLyoKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0LCBjckJCb3gudG9wKSwgUFdMUFRfTU9WRVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5yaWdodCwgY3JCQm94LnRvcCksIFBXTFBUX0xJTkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQsIGNyQkJveC5ib3R0b20pLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQsIGNyQkJveC5ib3R0b20pLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LmxlZnQsIGNyQkJveC50b3ApLCBQV0xQVF9MSU5FVE8pLAorCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gubGVmdCtmT3V0V2lkdGgqMC4wNGYsIGNyQkJveC50b3AtZk91dEhlaWdodCowLjA0ZiksIFBXTFBUX01PVkVUTyksCisJCUNQV0xfUGF0aERhdGEoQ1BXTF9Qb2ludChjckJCb3gucmlnaHQtZk91dFdpZHRoKjAuMDRmLCBjckJCb3gudG9wLWZPdXRIZWlnaHQqMC4wNGYpLCBQV0xQVF9MSU5FVE8pLAorCQlDUFdMX1BhdGhEYXRhKENQV0xfUG9pbnQoY3JCQm94LnJpZ2h0LWZPdXRXaWR0aCowLjA0ZiwgY3JCQm94LmJvdHRvbStmT3V0SGVpZ2h0KjAuMDRmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0K2ZPdXRXaWR0aCowLjA0ZiwgY3JCQm94LmJvdHRvbStmT3V0SGVpZ2h0KjAuMDRmKSwgUFdMUFRfTElORVRPKSwKKwkJQ1BXTF9QYXRoRGF0YShDUFdMX1BvaW50KGNyQkJveC5sZWZ0K2ZPdXRXaWR0aCowLjA0ZiwgY3JCQm94LnRvcC1mT3V0SGVpZ2h0KjAuMDRmKSwgUFdMUFRfTElORVRPKSwKKwkJKi8KKwl9OworCisJaWYodHlwZSA9PSBQV0xQVF9TVFJFQU0pCisJCXNQYXRoRGF0YSA9IEdldEFwcFN0cmVhbUZyb21BcnJheShQYXRoQXJyYXksIDIzKTsKKwllbHNlCisJCUdldFBhdGhEYXRhRnJvbUFycmF5KHBhdGgsIFBhdGhBcnJheSwgMjMpOworfQorCit2b2lkIENQV0xfQ29sb3I6OkNvbnZlcnRDb2xvclR5cGUoRlhfSU5UMzIgbkNvbG9yVHlwZSkKK3sKKwlzd2l0Y2ggKHRoaXMtPm5Db2xvclR5cGUpCisJeworCWNhc2UgQ09MT1JUWVBFX1RSQU5TUEFSRU5UOgorCQlicmVhazsKKwljYXNlIENPTE9SVFlQRV9HUkFZOgorCQlzd2l0Y2ggKG5Db2xvclR5cGUpCisJCXsKKwkJY2FzZSBDT0xPUlRZUEVfUkdCOgorCQkJQ1BXTF9VdGlsczo6Q29udmVydEdSQVkyUkdCKHRoaXMtPmZDb2xvcjEsIHRoaXMtPmZDb2xvcjEsIHRoaXMtPmZDb2xvcjIsIHRoaXMtPmZDb2xvcjMpOworCQkJYnJlYWs7CisJCWNhc2UgQ09MT1JUWVBFX0NNWUs6CisJCQlDUFdMX1V0aWxzOjpDb252ZXJ0R1JBWTJDTVlLKHRoaXMtPmZDb2xvcjEsIHRoaXMtPmZDb2xvcjEsIHRoaXMtPmZDb2xvcjIsIHRoaXMtPmZDb2xvcjMsIHRoaXMtPmZDb2xvcjQpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDT0xPUlRZUEVfUkdCOgorCQlzd2l0Y2ggKG5Db2xvclR5cGUpCisJCXsKKwkJY2FzZSBDT0xPUlRZUEVfR1JBWToKKwkJCUNQV0xfVXRpbHM6OkNvbnZlcnRSR0IyR1JBWSh0aGlzLT5mQ29sb3IxLCB0aGlzLT5mQ29sb3IyLCB0aGlzLT5mQ29sb3IzLCB0aGlzLT5mQ29sb3IxKTsKKwkJCWJyZWFrOworCQljYXNlIENPTE9SVFlQRV9DTVlLOgorCQkJQ1BXTF9VdGlsczo6Q29udmVydFJHQjJDTVlLKHRoaXMtPmZDb2xvcjEsIHRoaXMtPmZDb2xvcjIsIHRoaXMtPmZDb2xvcjMsIHRoaXMtPmZDb2xvcjEsIHRoaXMtPmZDb2xvcjIsIHRoaXMtPmZDb2xvcjMsIHRoaXMtPmZDb2xvcjQpOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDT0xPUlRZUEVfQ01ZSzoKKwkJc3dpdGNoIChuQ29sb3JUeXBlKQorCQl7CisJCWNhc2UgQ09MT1JUWVBFX0dSQVk6CisJCQlDUFdMX1V0aWxzOjpDb252ZXJ0Q01ZSzJHUkFZKHRoaXMtPmZDb2xvcjEsIHRoaXMtPmZDb2xvcjIsIHRoaXMtPmZDb2xvcjMsIHRoaXMtPmZDb2xvcjQsIHRoaXMtPmZDb2xvcjEpOworCQkJYnJlYWs7CisJCWNhc2UgQ09MT1JUWVBFX1JHQjoKKwkJCUNQV0xfVXRpbHM6OkNvbnZlcnRDTVlLMlJHQih0aGlzLT5mQ29sb3IxLCB0aGlzLT5mQ29sb3IyLCB0aGlzLT5mQ29sb3IzLCB0aGlzLT5mQ29sb3I0LCB0aGlzLT5mQ29sb3IxLCB0aGlzLT5mQ29sb3IyLCB0aGlzLT5mQ29sb3IzKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKwl0aGlzLT5uQ29sb3JUeXBlID0gbkNvbG9yVHlwZTsKK30KKworCmRpZmYgLS1naXQgYS9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX1duZC5jcHAgYi9mcGRmc2RrL3NyYy9wZGZ3aW5kb3cvUFdMX1duZC5jcHAKaW5kZXggMDM1ZmZiYi4uOWJiNzg0YyAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvcGRmd2luZG93L1BXTF9XbmQuY3BwCisrKyBiL2ZwZGZzZGsvc3JjL3BkZndpbmRvdy9QV0xfV25kLmNwcApAQCAtMSwxMzQyICsxLDEzNDIgQEAKLS8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLSANCi0vLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQ0KLQ0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QREZXaW5kb3cuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1duZC5oIg0KLSNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfVXRpbHMuaCINCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1Njcm9sbEJhci5oIg0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfVGltZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1zdGF0aWMgQ0ZYX01hcFB0clRlbXBsYXRlPEZYX0lOVDMyLCBDUFdMX1RpbWVyKj4JZ19UaW1lTWFwOw0KLQ0KLUNQV0xfVGltZXI6OkNQV0xfVGltZXIoQ1BXTF9UaW1lckhhbmRsZXIqIHBBdHRhY2hlZCwgSUZYX1N5c3RlbUhhbmRsZXIqIHBTeXN0ZW1IYW5kbGVyKSA6IA0KLQltX3BBdHRhY2hlZChwQXR0YWNoZWQpLA0KLQltX25UaW1lcklEKDApLA0KLQltX3BTeXN0ZW1IYW5kbGVyKHBTeXN0ZW1IYW5kbGVyKQ0KLXsNCi0JQVNTRVJUKG1fcEF0dGFjaGVkICE9IE5VTEwpOw0KLQlBU1NFUlQobV9wU3lzdGVtSGFuZGxlciAhPSBOVUxMKTsNCi19DQotDQotQ1BXTF9UaW1lcjo6fkNQV0xfVGltZXIoKQ0KLXsNCi0JS2lsbFBXTFRpbWVyKCk7DQotfQ0KLQ0KLUZYX0lOVDMyIENQV0xfVGltZXI6OlNldFBXTFRpbWVyKEZYX0lOVDMyIG5FbGFwc2UpDQotewkNCi0JaWYgKG1fblRpbWVySUQgIT0gMCkgS2lsbFBXTFRpbWVyKCk7DQotCW1fblRpbWVySUQgPSBtX3BTeXN0ZW1IYW5kbGVyLT5TZXRUaW1lcihuRWxhcHNlLCBUaW1lclByb2MpOw0KLQlnX1RpbWVNYXAuU2V0QXQobV9uVGltZXJJRCwgdGhpcyk7DQotCXJldHVybiBtX25UaW1lcklEOw0KLX0NCi0NCi12b2lkIENQV0xfVGltZXI6OktpbGxQV0xUaW1lcigpDQotew0KLQlpZiAobV9uVGltZXJJRCAhPSAwKQ0KLQl7DQotCQltX3BTeXN0ZW1IYW5kbGVyLT5LaWxsVGltZXIobV9uVGltZXJJRCk7DQotCQlnX1RpbWVNYXAuUmVtb3ZlS2V5KG1fblRpbWVySUQpOw0KLQkJbV9uVGltZXJJRCA9IDA7DQotCX0NCi19DQotDQotdm9pZCBDUFdMX1RpbWVyOjpUaW1lclByb2MoRlhfSU5UMzIgaWRFdmVudCkNCi17DQotCUNQV0xfVGltZXIqIHBUaW1lciA9IE5VTEw7DQotCWlmIChnX1RpbWVNYXAuTG9va3VwKGlkRXZlbnQsIHBUaW1lcikpDQotCXsNCi0JCWlmIChwVGltZXIpDQotCQl7CQkJDQotCQkJaWYgKHBUaW1lci0+bV9wQXR0YWNoZWQpIA0KLQkJCQlwVGltZXItPm1fcEF0dGFjaGVkLT5UaW1lclByb2MoKTsNCi0JCX0NCi0JfQ0KLX0NCi0NCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX1RpbWVySGFuZGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLw0KLQ0KLUNQV0xfVGltZXJIYW5kbGVyOjpDUFdMX1RpbWVySGFuZGxlcigpIDogbV9wVGltZXIoTlVMTCkNCi17DQotfQ0KLQ0KLUNQV0xfVGltZXJIYW5kbGVyOjp+Q1BXTF9UaW1lckhhbmRsZXIoKQ0KLXsNCi0JaWYgKG1fcFRpbWVyKSBkZWxldGUgbV9wVGltZXI7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9UaW1lckhhbmRsZXI6OkJlZ2luVGltZXIoRlhfSU5UMzIgbkVsYXBzZSkNCi17DQotCWlmICghbV9wVGltZXIpDQotCQltX3BUaW1lciA9IG5ldyBDUFdMX1RpbWVyKHRoaXMsIEdldFN5c3RlbUhhbmRsZXIoKSk7DQotDQotCWlmIChtX3BUaW1lcikNCi0JCW1fcFRpbWVyLT5TZXRQV0xUaW1lcihuRWxhcHNlKTsNCi19DQotDQotdm9pZCBDUFdMX1RpbWVySGFuZGxlcjo6RW5kVGltZXIoKQ0KLXsNCi0JaWYgKG1fcFRpbWVyKQ0KLQkJbV9wVGltZXItPktpbGxQV0xUaW1lcigpOw0KLX0NCi0NCi12b2lkIENQV0xfVGltZXJIYW5kbGVyOjpUaW1lclByb2MoKQ0KLXsNCi19DQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfTXNnQ29udHJvbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotY2xhc3MgQ1BXTF9Nc2dDb250cm9sDQotew0KLQlmcmllbmQgY2xhc3MgQ1BXTF9XbmQ7DQotDQotcHVibGljOg0KLQlDUFdMX01zZ0NvbnRyb2woQ1BXTF9XbmQgKiBwV25kKQ0KLQl7DQotLy8JCVBXTF9UUkFDRSgibmV3IENQV0xfTXNnQ29udHJvbFxuIik7DQotCQltX3BDcmVhdGVkV25kID0gcFduZDsNCi0JCURlZmF1bHQoKTsNCi0JfQ0KLQ0KLQl+Q1BXTF9Nc2dDb250cm9sKCkNCi0Jew0KLS8vCQlQV0xfVFJBQ0UoIn5DUFdMX01zZ0NvbnRyb2xcbiIpOw0KLQkJRGVmYXVsdCgpOw0KLQl9DQotDQotCXZvaWQgRGVmYXVsdCgpDQotCXsNCi0JCW1fYU1vdXNlUGF0aC5SZW1vdmVBbGwoKTsNCi0JCW1fYUtleWJvYXJkUGF0aC5SZW1vdmVBbGwoKTsNCi0JCW1fcE1haW5Nb3VzZVduZCA9IE5VTEw7DQotCQltX3BNYWluS2V5Ym9hcmRXbmQgPSBOVUxMOw0KLQl9DQotDQotCUZYX0JPT0wgSXNXbmRDcmVhdGVkKGNvbnN0IENQV0xfV25kICogcFduZCkgY29uc3QNCi0Jew0KLQkJcmV0dXJuIG1fcENyZWF0ZWRXbmQgPT0gcFduZDsNCi0JfQ0KLQ0KLQlGWF9CT09MIElzTWFpbkNhcHR1cmVNb3VzZShjb25zdCBDUFdMX1duZCAqIHBXbmQpIGNvbnN0DQotCXsNCi0JCXJldHVybiBwV25kID09IG1fcE1haW5Nb3VzZVduZDsNCi0JfQ0KLQ0KLQlGWF9CT09MIElzV25kQ2FwdHVyZU1vdXNlKGNvbnN0IENQV0xfV25kICogcFduZCkgY29uc3QNCi0Jew0KLQkJaWYgKHBXbmQpDQotCQkJZm9yKCBGWF9JTlQzMiBpPTAsc3o9bV9hTW91c2VQYXRoLkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQkJCQlpZiAobV9hTW91c2VQYXRoLkdldEF0KGkpID09IHBXbmQpDQotCQkJCQlyZXR1cm4gVFJVRTsNCi0NCi0JCXJldHVybiBGQUxTRTsNCi0JfQ0KLQ0KLQlGWF9CT09MIElzTWFpbkNhcHR1cmVLZXlib2FyZChjb25zdCBDUFdMX1duZCAqIHBXbmQpIGNvbnN0DQotCXsNCi0JCXJldHVybiBwV25kID09IG1fcE1haW5LZXlib2FyZFduZDsNCi0JfQ0KLQ0KLQ0KLQlGWF9CT09MIElzV25kQ2FwdHVyZUtleWJvYXJkKGNvbnN0IENQV0xfV25kICogcFduZCkgY29uc3QNCi0Jew0KLQkJaWYgKHBXbmQpDQotCQkJZm9yKCBGWF9JTlQzMiBpPTAsc3o9bV9hS2V5Ym9hcmRQYXRoLkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQkJCQlpZiAobV9hS2V5Ym9hcmRQYXRoLkdldEF0KGkpID09IHBXbmQpDQotCQkJCQlyZXR1cm4gVFJVRTsNCi0JCQ0KLQkJcmV0dXJuIEZBTFNFOw0KLQl9DQotDQotCXZvaWQgU2V0Rm9jdXMoQ1BXTF9XbmQgKiBwV25kKQ0KLQl7DQotCQltX2FLZXlib2FyZFBhdGguUmVtb3ZlQWxsKCk7DQotDQotCQlpZiAocFduZCkNCi0JCXsNCi0JCQltX3BNYWluS2V5Ym9hcmRXbmQgPSBwV25kOw0KLQ0KLQkJCUNQV0xfV25kICogcFBhcmVudCA9IHBXbmQ7DQotCQkJd2hpbGUgKHBQYXJlbnQpDQotCQkJew0KLQkJCQltX2FLZXlib2FyZFBhdGguQWRkKHBQYXJlbnQpOw0KLQkJCQlwUGFyZW50ID0gcFBhcmVudC0+R2V0UGFyZW50V2luZG93KCk7DQotCQkJfQ0KLQ0KLQkJCXBXbmQtPk9uU2V0Rm9jdXMoKTsNCi0JCX0NCi0JfQ0KLQ0KLQl2b2lkIEtpbGxGb2N1cygpDQotCXsNCi0JCWlmIChtX2FLZXlib2FyZFBhdGguR2V0U2l6ZSgpID4gMCkNCi0JCQlpZiAoQ1BXTF9XbmQqIHBXbmQgPSBtX2FLZXlib2FyZFBhdGguR2V0QXQoMCkpDQotCQkJCXBXbmQtPk9uS2lsbEZvY3VzKCk7DQotDQotCQltX3BNYWluS2V5Ym9hcmRXbmQgPSBOVUxMOw0KLQkJbV9hS2V5Ym9hcmRQYXRoLlJlbW92ZUFsbCgpOw0KLQl9DQotDQotCXZvaWQgU2V0Q2FwdHVyZShDUFdMX1duZCAqIHBXbmQpDQotCXsNCi0JCW1fYU1vdXNlUGF0aC5SZW1vdmVBbGwoKTsNCi0NCi0JCWlmIChwV25kKQ0KLQkJew0KLQkJCW1fcE1haW5Nb3VzZVduZCA9IHBXbmQ7DQotDQotCQkJQ1BXTF9XbmQgKiBwUGFyZW50ID0gcFduZDsNCi0JCQl3aGlsZSAocFBhcmVudCkNCi0JCQl7DQotCQkJCW1fYU1vdXNlUGF0aC5BZGQocFBhcmVudCk7DQotCQkJCXBQYXJlbnQgPSBwUGFyZW50LT5HZXRQYXJlbnRXaW5kb3coKTsNCi0JCQl9DQotCQl9DQotCX0NCi0NCi0Jdm9pZCBSZWxlYXNlQ2FwdHVyZSgpDQotCXsNCi0JCW1fcE1haW5Nb3VzZVduZCA9IE5VTEw7DQotCQltX2FNb3VzZVBhdGguUmVtb3ZlQWxsKCk7DQotCX0NCi0NCi1wcml2YXRlOg0KLQlDRlhfQXJyYXlUZW1wbGF0ZTxDUFdMX1duZCo+CW1fYU1vdXNlUGF0aDsNCi0JQ0ZYX0FycmF5VGVtcGxhdGU8Q1BXTF9XbmQqPgltX2FLZXlib2FyZFBhdGg7DQotCUNQV0xfV25kKgkJCQkJCW1fcENyZWF0ZWRXbmQ7DQotCUNQV0xfV25kKgkJCQkJCW1fcE1haW5Nb3VzZVduZDsNCi0JQ1BXTF9XbmQqCQkJCQkJbV9wTWFpbktleWJvYXJkV25kOw0KLX07DQotDQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfV25kIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCi0NCi1DUFdMX1duZDo6Q1BXTF9XbmQoKSA6DQotCW1fcFZTY3JvbGxCYXIoTlVMTCksDQotCW1fcmNXaW5kb3coKSwNCi0JbV9yY0NsaXAoKSwNCi0JbV9iQ3JlYXRlZChGQUxTRSksCQkJDQotCW1fYlZpc2libGUoRkFMU0UpLA0KLQltX2JOb3RpZnlpbmcoRkFMU0UpLA0KLQltX2JFbmFibGVkKFRSVUUpDQotew0KLX0NCi0NCi1DUFdMX1duZDo6fkNQV0xfV25kKCkNCi17DQotCUFTU0VSVChtX2JDcmVhdGVkID09IEZBTFNFKTsNCi19DQotDQotQ0ZYX0J5dGVTdHJpbmcgQ1BXTF9XbmQ6OkdldENsYXNzTmFtZSgpIGNvbnN0DQotew0KLQlyZXR1cm4gIkNQV0xfV25kIjsNCi19DQotDQotdm9pZCBDUFdMX1duZDo6Q3JlYXRlKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKQ0KLXsNCi0JaWYgKCFJc1ZhbGlkKCkpDQotCXsNCi0JCW1fc1ByaXZhdGVQYXJhbSA9IGNwOw0KLQ0KLQkJT25DcmVhdGUobV9zUHJpdmF0ZVBhcmFtKTsNCi0NCi0JCW1fc1ByaXZhdGVQYXJhbS5yY1JlY3RXbmQuTm9ybWFsaXplKCk7DQotCQltX3JjV2luZG93ID0gbV9zUHJpdmF0ZVBhcmFtLnJjUmVjdFduZDsNCi0JCW1fcmNDbGlwID0gQ1BXTF9VdGlsczo6SW5mbGF0ZVJlY3QobV9yY1dpbmRvdywxLjBmKTsNCi0NCi0JCUNyZWF0ZU1zZ0NvbnRyb2woKTsNCi0NCi0JCWlmIChtX3NQcml2YXRlUGFyYW0ucFBhcmVudFduZCkNCi0JCQltX3NQcml2YXRlUGFyYW0ucFBhcmVudFduZC0+T25Ob3RpZnkodGhpcywgUE5NX0FERENISUxEKTsNCi0NCi0JCVBXTF9DUkVBVEVQQVJBTSBjY3AgPSBtX3NQcml2YXRlUGFyYW07DQotDQotCQljY3AuZHdGbGFncyAmPSAweEZGRkYwMDAwTDsgLy9yZW1vdmUgc3ViIHN0eWxlcw0KLQkJY2NwLm10Q2hpbGQgPSBDUERGX01hdHJpeCgxLDAsMCwxLDAsMCk7DQotCQkNCi0JCUNyZWF0ZVNjcm9sbEJhcihjY3ApOw0KLQkJQ3JlYXRlQ2hpbGRXbmQoY2NwKTsgDQotDQotCQltX2JWaXNpYmxlID0gSGFzRmxhZyhQV1NfVklTSUJMRSk7DQotDQotCQlPbkNyZWF0ZWQoKTsNCi0NCi0JCVJlUG9zQ2hpbGRXbmQoKTsNCi0JCW1fYkNyZWF0ZWQgPSBUUlVFOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9XbmQ6Ok9uQ3JlYXRlKFBXTF9DUkVBVEVQQVJBTSAmIGNwKQ0KLXsNCi19DQotDQotdm9pZCBDUFdMX1duZDo6T25DcmVhdGVkKCkNCi17DQotfQ0KLQ0KLXZvaWQgQ1BXTF9XbmQ6Ok9uRGVzdHJveSgpDQotew0KLX0NCi0NCi12b2lkIENQV0xfV25kOjpEZXN0cm95KCkNCi17DQotCUtpbGxGb2N1cygpOw0KLQ0KLQlPbkRlc3Ryb3koKTsNCi0NCi0JaWYgKG1fYkNyZWF0ZWQpDQotCXsNCi0JCWZvciAoRlhfSU5UMzIgaSA9IG1fYUNoaWxkcmVuLkdldFNpemUoKS0xOyBpID49IDA7IGkgLS0pDQotCQl7DQotCQkJaWYgKENQV0xfV25kICogcENoaWxkID0gbV9hQ2hpbGRyZW5baV0pDQotCQkJew0KLQkJCQlwQ2hpbGQtPkRlc3Ryb3koKTsNCi0JCQkJZGVsZXRlIHBDaGlsZDsNCi0JCQkJcENoaWxkID0gTlVMTDsNCi0JCQl9DQotCQl9DQotDQotCQlpZiAobV9zUHJpdmF0ZVBhcmFtLnBQYXJlbnRXbmQpDQotCQkJbV9zUHJpdmF0ZVBhcmFtLnBQYXJlbnRXbmQtPk9uTm90aWZ5KHRoaXMsIFBOTV9SRU1PVkVDSElMRCk7DQotCQltX2JDcmVhdGVkID0gRkFMU0U7DQotCX0NCi0NCi0JRGVzdHJveU1zZ0NvbnRyb2woKTsNCi0NCi0JRlhTWVNfbWVtc2V0KCZtX3NQcml2YXRlUGFyYW0sIDAsIHNpemVvZihQV0xfQ1JFQVRFUEFSQU0pKTsNCi0JbV9hQ2hpbGRyZW4uUmVtb3ZlQWxsKCk7CQ0KLQltX3BWU2Nyb2xsQmFyID0gTlVMTDsNCi19DQotDQotdm9pZCBDUFdMX1duZDo6TW92ZShjb25zdCBDUERGX1JlY3QgJiByY05ldywgRlhfQk9PTCBiUmVzZXQsRlhfQk9PTCBiUmVmcmVzaCkNCi17DQotCWlmIChJc1ZhbGlkKCkpDQotCXsNCi0JCUNQREZfUmVjdCByY09sZCA9IHRoaXMtPkdldFdpbmRvd1JlY3QoKTsNCi0NCi0JCW1fcmNXaW5kb3cgPSByY05ldzsNCi0JCW1fcmNXaW5kb3cuTm9ybWFsaXplKCk7DQotCQkvL21fcmNDbGlwID0gQ1BXTF9VdGlsczo6SW5mbGF0ZVJlY3QobV9yY1dpbmRvdywxLjBmKTsgLy9mb3Igc3BlY2lhbCBjYXJldCANCi0NCi0JCWlmIChyY09sZC5sZWZ0ICE9IHJjTmV3LmxlZnQgfHwgcmNPbGQucmlnaHQgIT0gcmNOZXcucmlnaHQgfHwNCi0JCQlyY09sZC50b3AgIT0gcmNOZXcudG9wIHx8IHJjT2xkLmJvdHRvbSAhPSByY05ldy5ib3R0b20pDQotCQl7DQotCQkJaWYgKGJSZXNldCkNCi0JCQl7DQotCQkJCVJlUG9zQ2hpbGRXbmQoKTsJDQotCQkJfQkNCi0NCi0JCX0NCi0JCWlmIChiUmVmcmVzaCkNCi0JCXsJDQotCQkJSW52YWxpZGF0ZVJlY3RNb3ZlKHJjT2xkLHJjTmV3KTsNCi0JCX0NCi0NCi0JCW1fc1ByaXZhdGVQYXJhbS5yY1JlY3RXbmQgPSBtX3JjV2luZG93Ow0KLQl9DQotfQ0KLQ0KLXZvaWQgIENQV0xfV25kOjpJbnZhbGlkYXRlUmVjdE1vdmUoY29uc3QgQ1BERl9SZWN0ICYgcmNPbGQsIGNvbnN0IENQREZfUmVjdCAmIHJjTmV3KQ0KLXsNCi0JQ1BERl9SZWN0IHJjVW5pb24gPSByY09sZDsNCi0JcmNVbmlvbi5VbmlvbihyY05ldyk7DQotDQotCUludmFsaWRhdGVSZWN0KCZyY1VuaW9uKTsNCi0NCi0JLyoNCi0JQ1BERl9SZWN0IFN1YkFycmF5WzRdOyANCi0NCi0JcmNPbGQuU3Vic3RyYWN0NChyY05ldyxTdWJBcnJheSk7DQotCWZvciAoRlhfSU5UMzIgaT0wO2k8NDtpKyspDQotCXsNCi0JCWlmIChTdWJBcnJheVtpXS5sZWZ0ID09IDAgJiYNCi0JCQlTdWJBcnJheVtpXS5yaWdodCA9PSAwICYmDQotCQkJU3ViQXJyYXlbaV0udG9wID09IDAgJiYNCi0JCQlTdWJBcnJheVtpXS5ib3R0b20gPT0gMCljb250aW51ZTsNCi0NCi0JCUludmFsaWRhdGVSZWN0KCZDUFdMX1V0aWxzOjpJbmZsYXRlUmVjdChTdWJBcnJheVtpXSwyKSk7DQotCX0NCi0NCi0JcmNOZXcuU3Vic3RyYWN0NChyY09sZCxTdWJBcnJheSk7DQotCWZvciAoRlhfSU5UMzIgaj0wO2o8NDtqKyspDQotCXsNCi0JCWlmIChTdWJBcnJheVtqXS5sZWZ0ID09IDAgJiYNCi0JCQlTdWJBcnJheVtqXS5yaWdodCA9PSAwICYmDQotCQkJU3ViQXJyYXlbal0udG9wID09IDAgJiYNCi0JCQlTdWJBcnJheVtqXS5ib3R0b20gPT0gMCljb250aW51ZTsNCi0NCi0JCUludmFsaWRhdGVSZWN0KCZDUFdMX1V0aWxzOjpJbmZsYXRlUmVjdChTdWJBcnJheVtqXSwyKSk7DQotCX0NCi0JKi8NCi19DQotDQotdm9pZCBDUFdMX1duZDo6R2V0QXBwZWFyYW5jZVN0cmVhbShDRlhfQnl0ZVN0cmluZyAmIHNBcHBTdHJlYW0pDQotew0KLQlpZiAoSXNWYWxpZCgpKQ0KLQl7DQotCQlDRlhfQnl0ZVRleHRCdWYgc1RleHRCdWY7DQotCQlHZXRBcHBlYXJhbmNlU3RyZWFtKHNUZXh0QnVmKTsNCi0JCXNBcHBTdHJlYW0gKz0gc1RleHRCdWYuR2V0Qnl0ZVN0cmluZygpOw0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9XbmQ6OkdldEFwcGVhcmFuY2VTdHJlYW0oQ0ZYX0J5dGVUZXh0QnVmICYgc0FwcFN0cmVhbSkNCi17DQotCWlmIChJc1ZhbGlkKCkgJiYgSXNWaXNpYmxlKCkpDQotCXsNCi0JCUdldFRoaXNBcHBlYXJhbmNlU3RyZWFtKHNBcHBTdHJlYW0pOw0KLQkJR2V0Q2hpbGRBcHBlYXJhbmNlU3RyZWFtKHNBcHBTdHJlYW0pOw0KLQl9DQotfQ0KLQ0KLS8vaWYgZG9uJ3Qgc2V0LEdldCBkZWZhdWx0IGFwcGVyYW5jZSBzdHJlYW0NCi12b2lkIENQV0xfV25kOjpHZXRUaGlzQXBwZWFyYW5jZVN0cmVhbShDRlhfQnl0ZVRleHRCdWYgJiBzQXBwU3RyZWFtKQ0KLXsNCi0JQ1BERl9SZWN0IHJlY3RXbmQgPSBHZXRXaW5kb3dSZWN0KCk7DQotCWlmICghcmVjdFduZC5Jc0VtcHR5KCkpDQotCXsNCi0JCUNGWF9CeXRlVGV4dEJ1ZiBzVGhpczsNCi0NCi0JCWlmIChIYXNGbGFnKFBXU19CQUNLR1JPVU5EKSkNCi0JCQlzVGhpcyA8PCBDUFdMX1V0aWxzOjpHZXRSZWN0RmlsbEFwcFN0cmVhbShyZWN0V25kLHRoaXMtPkdldEJhY2tncm91bmRDb2xvcigpKTsNCi0NCi0JCWlmIChIYXNGbGFnKFBXU19CT1JERVIpKQ0KLQkJCXNUaGlzIDw8IENQV0xfVXRpbHM6OkdldEJvcmRlckFwcFN0cmVhbShyZWN0V25kLA0KLQkJCQkJCQkJCShGWF9GTE9BVClHZXRCb3JkZXJXaWR0aCgpLA0KLQkJCQkJCQkJCUdldEJvcmRlckNvbG9yKCksDQotCQkJCQkJCQkJdGhpcy0+R2V0Qm9yZGVyTGVmdFRvcENvbG9yKHRoaXMtPkdldEJvcmRlclN0eWxlKCkpLA0KLQkJCQkJCQkJCXRoaXMtPkdldEJvcmRlclJpZ2h0Qm90dG9tQ29sb3IodGhpcy0+R2V0Qm9yZGVyU3R5bGUoKSksDQotCQkJCQkJCQkJdGhpcy0+R2V0Qm9yZGVyU3R5bGUoKSwNCi0JCQkJCQkJCQl0aGlzLT5HZXRCb3JkZXJEYXNoKCkpOw0KLQ0KLQkJc0FwcFN0cmVhbSA8PCBzVGhpczsNCi0JfQ0KLX0NCi0NCi12b2lkIENQV0xfV25kOjpHZXRDaGlsZEFwcGVhcmFuY2VTdHJlYW0oQ0ZYX0J5dGVUZXh0QnVmICYgc0FwcFN0cmVhbSkNCi17DQotCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fYUNoaWxkcmVuLkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQl7DQotCQlpZiAoQ1BXTF9XbmQgKiBwQ2hpbGQgPSBtX2FDaGlsZHJlbi5HZXRBdChpKSkNCi0JCXsNCi0JCQlwQ2hpbGQtPkdldEFwcGVhcmFuY2VTdHJlYW0oc0FwcFN0cmVhbSk7DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBDUFdMX1duZDo6RHJhd0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSkNCi17DQotCWlmIChJc1ZhbGlkKCkgJiYgSXNWaXNpYmxlKCkpDQotCXsNCi0JCURyYXdUaGlzQXBwZWFyYW5jZShwRGV2aWNlLHBVc2VyMkRldmljZSk7DQotCQlEcmF3Q2hpbGRBcHBlYXJhbmNlKHBEZXZpY2UscFVzZXIyRGV2aWNlKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENQV0xfV25kOjpEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSkNCi17DQotCUNQREZfUmVjdCByZWN0V25kID0gR2V0V2luZG93UmVjdCgpOw0KLQlpZiAoIXJlY3RXbmQuSXNFbXB0eSgpKQ0KLQl7CQkNCi0JCWlmIChIYXNGbGFnKFBXU19CQUNLR1JPVU5EKSkNCi0JCXsNCi0JCQlDUERGX1JlY3QgcmNDbGllbnQgPSBDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdChyZWN0V25kLChGWF9GTE9BVCkoR2V0Qm9yZGVyV2lkdGgoKStHZXRJbm5lckJvcmRlcldpZHRoKCkpKTsNCi0JCQlDUFdMX1V0aWxzOjpEcmF3RmlsbFJlY3QocERldmljZSxwVXNlcjJEZXZpY2UscmNDbGllbnQsdGhpcy0+R2V0QmFja2dyb3VuZENvbG9yKCksR2V0VHJhbnNwYXJlbmN5KCkpOw0KLQkJfQ0KLQ0KLQkJaWYgKEhhc0ZsYWcoUFdTX0JPUkRFUikpDQotCQkJQ1BXTF9VdGlsczo6RHJhd0JvcmRlcihwRGV2aWNlLA0KLQkJCQkJCQkJcFVzZXIyRGV2aWNlLA0KLQkJCQkJCQkJcmVjdFduZCwNCi0JCQkJCQkJCShGWF9GTE9BVClHZXRCb3JkZXJXaWR0aCgpLA0KLQkJCQkJCQkJR2V0Qm9yZGVyQ29sb3IoKSwNCi0JCQkJCQkJCXRoaXMtPkdldEJvcmRlckxlZnRUb3BDb2xvcih0aGlzLT5HZXRCb3JkZXJTdHlsZSgpKSwNCi0JCQkJCQkJCXRoaXMtPkdldEJvcmRlclJpZ2h0Qm90dG9tQ29sb3IodGhpcy0+R2V0Qm9yZGVyU3R5bGUoKSksDQotCQkJCQkJCQl0aGlzLT5HZXRCb3JkZXJTdHlsZSgpLA0KLQkJCQkJCQkJdGhpcy0+R2V0Qm9yZGVyRGFzaCgpLA0KLQkJCQkJCQkJR2V0VHJhbnNwYXJlbmN5KCkpOwkJCQkJCQkJDQotCX0NCi19DQotDQotdm9pZCBDUFdMX1duZDo6RHJhd0NoaWxkQXBwZWFyYW5jZShDRlhfUmVuZGVyRGV2aWNlKiBwRGV2aWNlLCBDUERGX01hdHJpeCogcFVzZXIyRGV2aWNlKQ0KLXsNCi0JZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9hQ2hpbGRyZW4uR2V0U2l6ZSgpOyBpPHN6OyBpKyspDQotCXsNCi0JCWlmIChDUFdMX1duZCAqIHBDaGlsZCA9IG1fYUNoaWxkcmVuLkdldEF0KGkpKQ0KLQkJew0KLQkJCUNQREZfTWF0cml4IG10ID0gcENoaWxkLT5HZXRDaGlsZE1hdHJpeCgpOw0KLQkJCWlmIChtdC5Jc0lkZW50aXR5KCkpDQotCQkJew0KLQkJCQlwQ2hpbGQtPkRyYXdBcHBlYXJhbmNlKHBEZXZpY2UscFVzZXIyRGV2aWNlKTsNCi0JCQl9DQotCQkJZWxzZQ0KLQkJCXsNCi0JCQkJbXQuQ29uY2F0KCpwVXNlcjJEZXZpY2UpOw0KLQkJCQlwQ2hpbGQtPkRyYXdBcHBlYXJhbmNlKHBEZXZpY2UsJm10KTsNCi0JCQl9DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBDUFdMX1duZDo6SW52YWxpZGF0ZVJlY3QoQ1BERl9SZWN0KiBwUmVjdCkNCi17DQotCWlmIChJc1ZhbGlkKCkpDQotCXsNCi0JCUNQREZfUmVjdCByY1JlZnJlc2ggPSBwUmVjdCA/ICpwUmVjdCA6IEdldFdpbmRvd1JlY3QoKTsNCi0NCi0JCWlmICghSGFzRmxhZyhQV1NfTk9SRUZSRVNIQ0xJUCkpDQotCQl7DQotCQkJQ1BERl9SZWN0IHJjQ2xpcCA9IEdldENsaXBSZWN0KCk7CQkNCi0JCQlpZiAoIXJjQ2xpcC5Jc0VtcHR5KCkpDQotCQkJew0KLQkJCQlyY1JlZnJlc2guSW50ZXJzZWN0KHJjQ2xpcCk7DQotCQkJfQ0KLQkJfQ0KLQ0KLQkJRlhfUkVDVCByY1dpbiA9IFBXTHRvV25kKHJjUmVmcmVzaCk7DQotCQlyY1dpbi5sZWZ0IC09IFBXTF9JTlZBTElEQVRFX0lORkxBVEU7DQotCQlyY1dpbi50b3AgLT0gUFdMX0lOVkFMSURBVEVfSU5GTEFURTsNCi0JCXJjV2luLnJpZ2h0ICs9IFBXTF9JTlZBTElEQVRFX0lORkxBVEU7DQotCQlyY1dpbi5ib3R0b20gKz0gUFdMX0lOVkFMSURBVEVfSU5GTEFURTsNCi0NCi0JCWlmIChJRlhfU3lzdGVtSGFuZGxlciogcFNIID0gR2V0U3lzdGVtSGFuZGxlcigpKQ0KLQkJew0KLQkJCWlmIChGWF9IV05EIGhXbmQgPSBHZXRBdHRhY2hlZEhXbmQoKSkNCi0JCQl7DQotCQkJCXBTSC0+SW52YWxpZGF0ZVJlY3QoaFduZCwgcmNXaW4pOw0KLQkJCX0NCi0JCX0NCi0JfQ0KLX0NCi0NCi0jZGVmaW5lIFBXTF9JTVBMRU1FTlRfS0VZX01FVEhPRChrZXlfbWV0aG9kX25hbWUpXA0KLUZYX0JPT0wgQ1BXTF9XbmQ6OmtleV9tZXRob2RfbmFtZShGWF9XT1JEIG5DaGFyLCBGWF9EV09SRCBuRmxhZylcDQote1wNCi0JaWYgKElzVmFsaWQoKSAmJiBJc1Zpc2libGUoKSAmJiBJc0VuYWJsZWQoKSlcDQotCXtcDQotCQlpZiAoSXNXbmRDYXB0dXJlS2V5Ym9hcmQodGhpcykpXA0KLQkJe1wNCi0JCQlmb3IgKEZYX0lOVDMyIGk9MCxzej1tX2FDaGlsZHJlbi5HZXRTaXplKCk7IGk8c3o7IGkrKylcDQotCQkJe1wNCi0JCQkJaWYgKENQV0xfV25kICogcENoaWxkID0gbV9hQ2hpbGRyZW4uR2V0QXQoaSkpXA0KLQkJCQl7XA0KLQkJCQkJaWYgKElzV25kQ2FwdHVyZUtleWJvYXJkKHBDaGlsZCkpXA0KLQkJCQkJe1wNCi0JCQkJCQlyZXR1cm4gcENoaWxkLT5rZXlfbWV0aG9kX25hbWUobkNoYXIsbkZsYWcpO1wNCi0JCQkJCX1cDQotCQkJCX1cDQotCQkJfVwNCi0JCX1cDQotCX1cDQotCXJldHVybiBGQUxTRTtcDQotfQ0KLQ0KLSNkZWZpbmUgUFdMX0lNUExFTUVOVF9NT1VTRV9NRVRIT0QobW91c2VfbWV0aG9kX25hbWUpXA0KLUZYX0JPT0wgQ1BXTF9XbmQ6Om1vdXNlX21ldGhvZF9uYW1lKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpXA0KLXtcDQotCWlmIChJc1ZhbGlkKCkgJiYgSXNWaXNpYmxlKCkgJiYgSXNFbmFibGVkKCkpXA0KLQl7XA0KLQkJaWYgKElzV25kQ2FwdHVyZU1vdXNlKHRoaXMpKVwNCi0JCXtcDQotCQkJZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9hQ2hpbGRyZW4uR2V0U2l6ZSgpOyBpPHN6OyBpKyspXA0KLQkJCXtcDQotCQkJCWlmIChDUFdMX1duZCAqIHBDaGlsZCA9IG1fYUNoaWxkcmVuLkdldEF0KGkpKVwNCi0JCQkJe1wNCi0JCQkJCWlmIChJc1duZENhcHR1cmVNb3VzZShwQ2hpbGQpKVwNCi0JCQkJCXtcDQotCQkJCQkJcmV0dXJuIHBDaGlsZC0+bW91c2VfbWV0aG9kX25hbWUocENoaWxkLT5QYXJlbnRUb0NoaWxkKHBvaW50KSxuRmxhZyk7XA0KLQkJCQkJfVwNCi0JCQkJfVwNCi0JCQl9XA0KLQkJCVNldEN1cnNvcigpO1wNCi0JCX1cDQotCQllbHNlXA0KLQkJe1wNCi0JCQlmb3IgKEZYX0lOVDMyIGk9MCxzej1tX2FDaGlsZHJlbi5HZXRTaXplKCk7IGk8c3o7IGkrKylcDQotCQkJe1wNCi0JCQkJaWYgKENQV0xfV25kICogcENoaWxkID0gbV9hQ2hpbGRyZW4uR2V0QXQoaSkpXA0KLQkJCQl7XA0KLQkJCQkJaWYgKHBDaGlsZC0+V25kSGl0VGVzdChwQ2hpbGQtPlBhcmVudFRvQ2hpbGQocG9pbnQpKSlcDQotCQkJCQl7XA0KLQkJCQkJCXJldHVybiBwQ2hpbGQtPm1vdXNlX21ldGhvZF9uYW1lKHBDaGlsZC0+UGFyZW50VG9DaGlsZChwb2ludCksbkZsYWcpO1wNCi0JCQkJCX1cDQotCQkJCX1cDQotCQkJfVwNCi0JCQlpZiAodGhpcy0+V25kSGl0VGVzdChwb2ludCkpXA0KLQkJCQlTZXRDdXJzb3IoKTtcDQotCQl9XA0KLQl9XA0KLQlyZXR1cm4gRkFMU0U7XA0KLX0NCi0NCi1QV0xfSU1QTEVNRU5UX0tFWV9NRVRIT0QoT25LZXlEb3duKQ0KLVBXTF9JTVBMRU1FTlRfS0VZX01FVEhPRChPbktleVVwKQ0KLVBXTF9JTVBMRU1FTlRfS0VZX01FVEhPRChPbkNoYXIpDQotDQotUFdMX0lNUExFTUVOVF9NT1VTRV9NRVRIT0QoT25MQnV0dG9uRGJsQ2xrKQ0KLVBXTF9JTVBMRU1FTlRfTU9VU0VfTUVUSE9EKE9uTEJ1dHRvbkRvd24pDQotUFdMX0lNUExFTUVOVF9NT1VTRV9NRVRIT0QoT25MQnV0dG9uVXApDQotUFdMX0lNUExFTUVOVF9NT1VTRV9NRVRIT0QoT25NQnV0dG9uRGJsQ2xrKQ0KLVBXTF9JTVBMRU1FTlRfTU9VU0VfTUVUSE9EKE9uTUJ1dHRvbkRvd24pDQotUFdMX0lNUExFTUVOVF9NT1VTRV9NRVRIT0QoT25NQnV0dG9uVXApDQotUFdMX0lNUExFTUVOVF9NT1VTRV9NRVRIT0QoT25SQnV0dG9uRGJsQ2xrKQ0KLVBXTF9JTVBMRU1FTlRfTU9VU0VfTUVUSE9EKE9uUkJ1dHRvbkRvd24pDQotUFdMX0lNUExFTUVOVF9NT1VTRV9NRVRIT0QoT25SQnV0dG9uVXApDQotUFdMX0lNUExFTUVOVF9NT1VTRV9NRVRIT0QoT25Nb3VzZU1vdmUpDQotDQotRlhfQk9PTAlDUFdMX1duZDo6T25Nb3VzZVdoZWVsKHNob3J0IHpEZWx0YSwgY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50LCBGWF9EV09SRCBuRmxhZykNCi17DQotCWlmIChJc1ZhbGlkKCkgJiYgSXNWaXNpYmxlKCkgJiYgSXNFbmFibGVkKCkpDQotCXsNCi0JCVNldEN1cnNvcigpOw0KLQkJaWYgKElzV25kQ2FwdHVyZUtleWJvYXJkKHRoaXMpKQ0KLQkJew0KLQkJCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fYUNoaWxkcmVuLkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQkJCXsNCi0JCQkJaWYgKENQV0xfV25kICogcENoaWxkID0gbV9hQ2hpbGRyZW4uR2V0QXQoaSkpDQotCQkJCXsNCi0JCQkJCWlmIChJc1duZENhcHR1cmVLZXlib2FyZChwQ2hpbGQpKQ0KLQkJCQkJew0KLQkJCQkJCXJldHVybiBwQ2hpbGQtPk9uTW91c2VXaGVlbCh6RGVsdGEscENoaWxkLT5QYXJlbnRUb0NoaWxkKHBvaW50KSwgbkZsYWcpOw0KLQkJCQkJfQ0KLQkJCQl9DQotCQkJfQ0KLQkJfQ0KLQl9DQotCXJldHVybiBGQUxTRTsNCi19DQotDQotdm9pZCBDUFdMX1duZDo6QWRkQ2hpbGQoQ1BXTF9XbmQgKiBwV25kKQ0KLXsNCi0JbV9hQ2hpbGRyZW4uQWRkKHBXbmQpOw0KLX0NCi0NCi12b2lkIENQV0xfV25kOjpSZW1vdmVDaGlsZChDUFdMX1duZCAqIHBXbmQpDQotew0KLQlmb3IgKEZYX0lOVDMyIGkgPSBtX2FDaGlsZHJlbi5HZXRTaXplKCktMTsgaSA+PSAwOyBpIC0tKQ0KLQl7DQotCQlpZiAoQ1BXTF9XbmQqIHBDaGlsZCA9IG1fYUNoaWxkcmVuLkdldEF0KGkpKQ0KLQkJew0KLQkJCWlmIChwQ2hpbGQgPT0gcFduZCkNCi0JCQl7DQotCQkJCW1fYUNoaWxkcmVuLlJlbW92ZUF0KGkpOw0KLQkJCQlicmVhazsNCi0JCQl9DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBDUFdMX1duZDo6T25Ob3RpZnkoQ1BXTF9XbmQqIHBXbmQsIEZYX0RXT1JEIG1zZywgRlhfSU5UUFRSIHdQYXJhbSwgRlhfSU5UUFRSIGxQYXJhbSkNCi17DQotCXN3aXRjaCAobXNnKQ0KLQl7DQotCWNhc2UgUE5NX0FERENISUxEOg0KLQkJdGhpcy0+QWRkQ2hpbGQocFduZCk7DQotCQlicmVhazsNCi0JY2FzZSBQTk1fUkVNT1ZFQ0hJTEQ6DQotCQl0aGlzLT5SZW1vdmVDaGlsZChwV25kKTsNCi0JCWJyZWFrOw0KLQlkZWZhdWx0Og0KLQkJYnJlYWs7DQotCX0NCi19DQotDQotRlhfQk9PTCBDUFdMX1duZDo6SXNWYWxpZCgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9iQ3JlYXRlZDsNCi19DQotDQotUFdMX0NSRUFURVBBUkFNIENQV0xfV25kOjpHZXRDcmVhdGlvblBhcmFtKCkgY29uc3QNCi17DQotCXJldHVybiBtX3NQcml2YXRlUGFyYW07DQotfQ0KLQ0KLUNQV0xfV25kKiBDUFdMX1duZDo6R2V0UGFyZW50V2luZG93KCkgY29uc3QNCi17DQotCXJldHVybiBtX3NQcml2YXRlUGFyYW0ucFBhcmVudFduZDsNCi19DQotDQotQ1BERl9SZWN0IENQV0xfV25kOjpHZXRPcmlnaW5XaW5kb3dSZWN0KCkgY29uc3QNCi17DQotCXJldHVybiBtX3NQcml2YXRlUGFyYW0ucmNSZWN0V25kOw0KLX0NCi0NCi1DUERGX1JlY3QgQ1BXTF9XbmQ6OkdldFdpbmRvd1JlY3QoKSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fcmNXaW5kb3c7DQotfQ0KLQ0KLUNQREZfUmVjdCBDUFdMX1duZDo6R2V0Q2xpZW50UmVjdCgpIGNvbnN0DQotew0KLQlDUERGX1JlY3QgcmNXaW5kb3cgPSBHZXRXaW5kb3dSZWN0KCk7DQotCUNQREZfUmVjdCByY0NsaWVudCA9IENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KHJjV2luZG93LChGWF9GTE9BVCkoR2V0Qm9yZGVyV2lkdGgoKStHZXRJbm5lckJvcmRlcldpZHRoKCkpKTsNCi0NCi0JaWYgKENQV0xfU2Nyb2xsQmFyICogcFZTQiA9IHRoaXMtPkdldFZTY3JvbGxCYXIoKSkNCi0JCXJjQ2xpZW50LnJpZ2h0IC09IHBWU0ItPkdldFNjcm9sbEJhcldpZHRoKCk7DQotDQotCXJjQ2xpZW50Lk5vcm1hbGl6ZSgpOw0KLQ0KLQlpZiAocmNXaW5kb3cuQ29udGFpbnMocmNDbGllbnQpKQ0KLQkJcmV0dXJuIHJjQ2xpZW50Ow0KLQllbHNlDQotCQlyZXR1cm4gQ1BERl9SZWN0KCk7DQotfQ0KLQ0KLUNQREZfUG9pbnQgQ1BXTF9XbmQ6OkdldENlbnRlclBvaW50KCkgY29uc3QNCi17DQotCUNQREZfUmVjdCByY0NsaWVudCA9IEdldENsaWVudFJlY3QoKTsNCi0NCi0JcmV0dXJuIENQREZfUG9pbnQoKHJjQ2xpZW50LmxlZnQgKyByY0NsaWVudC5yaWdodCkgKiAwLjVmLA0KLQkJKHJjQ2xpZW50LnRvcCArIHJjQ2xpZW50LmJvdHRvbSkgKiAwLjVmKTsNCi19DQotDQotQ1BERl9SZWN0IENQV0xfV25kOjpHZXRDbGllbnRDZW50ZXJTcXVhcmUoKSBjb25zdA0KLXsNCi0JcmV0dXJuIENQV0xfVXRpbHM6OkdldENlbnRlclNxdWFyZShHZXRDbGllbnRSZWN0KCkpOw0KLX0NCi0NCi1DUERGX1JlY3QgQ1BXTF9XbmQ6OkdldFdpbmRvd0NlbnRlclNxdWFyZSgpIGNvbnN0DQotew0KLQlyZXR1cm4gQ1BXTF9VdGlsczo6R2V0Q2VudGVyU3F1YXJlKENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KEdldFdpbmRvd1JlY3QoKSwwLjFmKSk7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9XbmQ6Okhhc0ZsYWcoRlhfRFdPUkQgZHdGbGFncykgY29uc3QNCi17DQotCXJldHVybiAobV9zUHJpdmF0ZVBhcmFtLmR3RmxhZ3MgJiBkd0ZsYWdzKSAhPSAwOw0KLX0NCi0NCi12b2lkIENQV0xfV25kOjpSZW1vdmVGbGFnKEZYX0RXT1JEIGR3RmxhZ3MpDQotew0KLQltX3NQcml2YXRlUGFyYW0uZHdGbGFncyAmPSB+ZHdGbGFnczsNCi19DQotDQotdm9pZCBDUFdMX1duZDo6QWRkRmxhZyhGWF9EV09SRCBkd0ZsYWdzKQ0KLXsNCi0JbV9zUHJpdmF0ZVBhcmFtLmR3RmxhZ3MgfD0gZHdGbGFnczsNCi19DQotDQotQ1BXTF9Db2xvciBDUFdMX1duZDo6R2V0QmFja2dyb3VuZENvbG9yKCkgY29uc3QNCi17DQotCXJldHVybiBtX3NQcml2YXRlUGFyYW0uc0JhY2tncm91bmRDb2xvcjsNCi19DQotDQotdm9pZCBDUFdMX1duZDo6U2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENQV0xfQ29sb3IgJiBjb2xvcikNCi17DQotCW1fc1ByaXZhdGVQYXJhbS5zQmFja2dyb3VuZENvbG9yID0gY29sb3I7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9XbmQ6OlNldFRleHRDb2xvcihjb25zdCBDUFdMX0NvbG9yICYgY29sb3IpDQotew0KLQltX3NQcml2YXRlUGFyYW0uc1RleHRDb2xvciA9IGNvbG9yOw0KLX0NCi0NCi12b2lkIENQV0xfV25kOjpTZXRUZXh0U3Ryb2tlQ29sb3IoY29uc3QgQ1BXTF9Db2xvciAmIGNvbG9yKQ0KLXsNCi0JbV9zUHJpdmF0ZVBhcmFtLnNUZXh0U3Ryb2tlQ29sb3IgPSBjb2xvcjsNCi19DQotDQotQ1BXTF9Db2xvciBDUFdMX1duZDo6R2V0VGV4dENvbG9yKCkgY29uc3QNCi17DQotCXJldHVybiBtX3NQcml2YXRlUGFyYW0uc1RleHRDb2xvcjsNCi19DQotDQotQ1BXTF9Db2xvciBDUFdMX1duZDo6R2V0VGV4dFN0cm9rZUNvbG9yKCkgY29uc3QNCi17DQotCXJldHVybiBtX3NQcml2YXRlUGFyYW0uc1RleHRTdHJva2VDb2xvcjsNCi19DQotDQotRlhfSU5UMzIgQ1BXTF9XbmQ6OkdldEJvcmRlclN0eWxlKCkgY29uc3QNCi17DQotCXJldHVybiBtX3NQcml2YXRlUGFyYW0ubkJvcmRlclN0eWxlOw0KLX0NCi0NCi12b2lkIENQV0xfV25kOjpTZXRCb3JkZXJTdHlsZShGWF9JTlQzMiBuQm9yZGVyU3R5bGUpDQotew0KLQlpZiAoSGFzRmxhZyhQV1NfQk9SREVSKSkNCi0JCW1fc1ByaXZhdGVQYXJhbS5uQm9yZGVyU3R5bGUgPSBuQm9yZGVyU3R5bGU7DQotfQ0KLQ0KLUZYX0lOVDMyIENQV0xfV25kOjpHZXRCb3JkZXJXaWR0aCgpIGNvbnN0DQotew0KLQlpZiAoSGFzRmxhZyhQV1NfQk9SREVSKSkNCi0JCXJldHVybiBtX3NQcml2YXRlUGFyYW0uZHdCb3JkZXJXaWR0aDsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLUZYX0lOVDMyIENQV0xfV25kOjpHZXRJbm5lckJvcmRlcldpZHRoKCkgY29uc3QNCi17DQotCS8qDQotCXN3aXRjaCAoR2V0Qm9yZGVyU3R5bGUoKSkNCi0Jew0KLQljYXNlIFBCU19CRVZFTEVEOg0KLQljYXNlIFBCU19JTlNFVDoNCi0JCXJldHVybiBHZXRCb3JkZXJXaWR0aCgpIC8gMjsNCi0JfQ0KLQkqLw0KLQlyZXR1cm4gMDsNCi19DQotDQotdm9pZCBDUFdMX1duZDo6U2V0Qm9yZGVyV2lkdGgoRlhfSU5UMzIgbkJvcmRlcldpZHRoKQ0KLXsNCi0JaWYgKEhhc0ZsYWcoUFdTX0JPUkRFUikpDQotCQltX3NQcml2YXRlUGFyYW0uZHdCb3JkZXJXaWR0aCA9IG5Cb3JkZXJXaWR0aDsNCi19DQotDQotQ1BXTF9Db2xvciBDUFdMX1duZDo6R2V0Qm9yZGVyQ29sb3IoKSBjb25zdA0KLXsNCi0JaWYgKEhhc0ZsYWcoUFdTX0JPUkRFUikpDQotCQlyZXR1cm4gbV9zUHJpdmF0ZVBhcmFtLnNCb3JkZXJDb2xvcjsNCi0NCi0JcmV0dXJuIENQV0xfQ29sb3IoKTsNCi19DQotDQotdm9pZCBDUFdMX1duZDo6U2V0Qm9yZGVyQ29sb3IoY29uc3QgQ1BXTF9Db2xvciAmIGNvbG9yKQ0KLXsNCi0JaWYgKEhhc0ZsYWcoUFdTX0JPUkRFUikpDQotCQltX3NQcml2YXRlUGFyYW0uc0JvcmRlckNvbG9yID0gY29sb3I7DQotfQ0KLQ0KLUNQV0xfRGFzaCBDUFdMX1duZDo6R2V0Qm9yZGVyRGFzaCgpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9zUHJpdmF0ZVBhcmFtLnNEYXNoOw0KLX0NCi0NCi12b2lkKiBDUFdMX1duZDo6R2V0QXR0YWNoZWREYXRhKCkgY29uc3QNCi17DQotCXJldHVybiBtX3NQcml2YXRlUGFyYW0ucEF0dGFjaGVkRGF0YTsNCi19DQotDQotdm9pZCBDUFdMX1duZDo6U2V0Qm9yZGVyRGFzaChjb25zdCBDUFdMX0Rhc2ggJiBzRGFzaCkNCi17DQotCWlmIChIYXNGbGFnKFBXU19CT1JERVIpKQ0KLQkJbV9zUHJpdmF0ZVBhcmFtLnNEYXNoID0gc0Rhc2g7DQotfQ0KLQ0KLUNQV0xfU2Nyb2xsQmFyKiBDUFdMX1duZDo6R2V0VlNjcm9sbEJhcigpIGNvbnN0DQotew0KLQlpZiAoSGFzRmxhZyhQV1NfVlNDUk9MTCkpDQotCQlyZXR1cm4gbV9wVlNjcm9sbEJhcjsNCi0NCi0JcmV0dXJuIE5VTEw7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9XbmQ6OkNyZWF0ZVNjcm9sbEJhcihjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCkNCi17DQotCUNyZWF0ZVZTY3JvbGxCYXIoY3ApOw0KLX0NCi0NCi12b2lkIENQV0xfV25kOjpDcmVhdGVWU2Nyb2xsQmFyKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKQ0KLXsNCi0JaWYgKCFtX3BWU2Nyb2xsQmFyICYmIEhhc0ZsYWcoUFdTX1ZTQ1JPTEwpKQ0KLQl7DQotCQlQV0xfQ1JFQVRFUEFSQU0gc2NwID0gY3A7DQotDQotCQkvL2ZsYWdzDQotCQlzY3AuZHdGbGFncyA9IFBXU19DSElMRHwgUFdTX0JBQ0tHUk9VTkQgfCBQV1NfQVVUT1RSQU5TUEFSRU5UIHwgUFdTX05PUkVGUkVTSENMSVA7DQotCQkNCi0JCXNjcC5wUGFyZW50V25kID0gdGhpczsNCi0JCXNjcC5zQmFja2dyb3VuZENvbG9yID0gUFdMX0RFRkFVTFRfV0hJVEVDT0xPUjsNCi0JCXNjcC5lQ3Vyc29yVHlwZSA9IEZYQ1RfQVJST1c7DQotCQlzY3AublRyYW5zcGFyZW5jeSA9IFBXTF9TQ1JPTExCQVJfVFJBTlNQQVJBTkNZOw0KLQ0KLQkJaWYgKChtX3BWU2Nyb2xsQmFyID0gbmV3IENQV0xfU2Nyb2xsQmFyKFNCVF9WU0NST0xMKSkpDQotCQkJbV9wVlNjcm9sbEJhci0+Q3JlYXRlKHNjcCk7DQotCX0NCi19DQotDQotdm9pZCBDUFdMX1duZDo6U2V0Q2FwdHVyZSgpDQotew0KLQlpZiAoQ1BXTF9Nc2dDb250cm9sICogcE1zZ0N0cmwgPSBHZXRNc2dDb250cm9sKCkpDQotCQlwTXNnQ3RybC0+U2V0Q2FwdHVyZSh0aGlzKTsNCi19DQotDQotdm9pZCBDUFdMX1duZDo6UmVsZWFzZUNhcHR1cmUoKQ0KLXsNCi0JZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9hQ2hpbGRyZW4uR2V0U2l6ZSgpOyBpPHN6OyBpKyspDQotCQlpZiAoQ1BXTF9XbmQqIHBDaGlsZCA9IG1fYUNoaWxkcmVuLkdldEF0KGkpKQ0KLQkJCXBDaGlsZC0+UmVsZWFzZUNhcHR1cmUoKTsNCi0NCi0JaWYgKENQV0xfTXNnQ29udHJvbCAqIHBNc2dDdHJsID0gR2V0TXNnQ29udHJvbCgpKQ0KLQkJcE1zZ0N0cmwtPlJlbGVhc2VDYXB0dXJlKCk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9XbmQ6OlNldEZvY3VzKCkNCi17DQotCWlmIChDUFdMX01zZ0NvbnRyb2wgKiBwTXNnQ3RybCA9IEdldE1zZ0NvbnRyb2woKSkNCi0Jew0KLQkJaWYgKCFwTXNnQ3RybC0+SXNNYWluQ2FwdHVyZUtleWJvYXJkKHRoaXMpKQ0KLQkJCXBNc2dDdHJsLT5LaWxsRm9jdXMoKTsNCi0JCXBNc2dDdHJsLT5TZXRGb2N1cyh0aGlzKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENQV0xfV25kOjpLaWxsRm9jdXMoKQ0KLXsNCi0JaWYgKENQV0xfTXNnQ29udHJvbCAqIHBNc2dDdHJsID0gR2V0TXNnQ29udHJvbCgpKQ0KLQl7DQotCQlpZiAocE1zZ0N0cmwtPklzV25kQ2FwdHVyZUtleWJvYXJkKHRoaXMpKQ0KLQkJCXBNc2dDdHJsLT5LaWxsRm9jdXMoKTsNCi0JfQ0KLX0NCi0NCi12b2lkIENQV0xfV25kOjpPblNldEZvY3VzKCkNCi17DQotfQ0KLQ0KLXZvaWQgQ1BXTF9XbmQ6Ok9uS2lsbEZvY3VzKCkNCi17DQotfQ0KLQ0KLUZYX0JPT0wJQ1BXTF9XbmQ6OlduZEhpdFRlc3QoY29uc3QgQ1BERl9Qb2ludCAmIHBvaW50KSBjb25zdA0KLXsNCi0JcmV0dXJuIElzVmFsaWQoKSAmJiBJc1Zpc2libGUoKSAmJiBHZXRXaW5kb3dSZWN0KCkuQ29udGFpbnMocG9pbnQueCxwb2ludC55KTsNCi19DQotDQotRlhfQk9PTCBDUFdMX1duZDo6Q2xpZW50SGl0VGVzdChjb25zdCBDUERGX1BvaW50ICYgcG9pbnQpIGNvbnN0DQotew0KLQlyZXR1cm4gSXNWYWxpZCgpICYmIElzVmlzaWJsZSgpICYmIEdldENsaWVudFJlY3QoKS5Db250YWlucyhwb2ludC54LHBvaW50LnkpOw0KLX0NCi0NCi1jb25zdCBDUFdMX1duZCAqIENQV0xfV25kOjpHZXRSb290V25kKCkgY29uc3QNCi17DQotCWlmIChtX3NQcml2YXRlUGFyYW0ucFBhcmVudFduZCkNCi0JCXJldHVybiBtX3NQcml2YXRlUGFyYW0ucFBhcmVudFduZC0+R2V0Um9vdFduZCgpOw0KLQllbHNlDQotCQlyZXR1cm4gdGhpczsNCi19DQotDQotdm9pZCBDUFdMX1duZDo6U2V0VmlzaWJsZShGWF9CT09MIGJWaXNpYmxlKQ0KLXsNCi0JaWYgKElzVmFsaWQoKSkNCi0Jew0KLQkJZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9hQ2hpbGRyZW4uR2V0U2l6ZSgpOyBpPHN6OyBpKyspDQotCQl7DQotCQkJaWYgKENQV0xfV25kKiBwQ2hpbGQgPSBtX2FDaGlsZHJlbi5HZXRBdChpKSkNCi0JCQl7DQotCQkJCXBDaGlsZC0+U2V0VmlzaWJsZShiVmlzaWJsZSk7DQotCQkJfQ0KLQkJfQ0KLQ0KLQkJaWYgKGJWaXNpYmxlICE9IG1fYlZpc2libGUpDQotCQl7DQotCQkJbV9iVmlzaWJsZSA9IGJWaXNpYmxlOw0KLQkJCVJlUG9zQ2hpbGRXbmQoKTsJCQ0KLQkJCUludmFsaWRhdGVSZWN0KCk7DQotCQl9CQ0KLQl9DQotfQ0KLQ0KLXZvaWQgQ1BXTF9XbmQ6OlNldENsaXBSZWN0KGNvbnN0IENQREZfUmVjdCAmIHJlY3QpDQotew0KLQltX3JjQ2xpcCA9IHJlY3Q7DQotCW1fcmNDbGlwLk5vcm1hbGl6ZSgpOw0KLX0NCi0NCi1DUERGX1JlY3QgQ1BXTF9XbmQ6OkdldENsaXBSZWN0KCkgY29uc3QNCi17DQotCXJldHVybiBtX3JjQ2xpcDsNCi19DQotDQotRlhfQk9PTAlDUFdMX1duZDo6SXNSZWFkT25seSgpIGNvbnN0DQotew0KLQlyZXR1cm4gSGFzRmxhZyhQV1NfUkVBRE9OTFkpOw0KLX0NCi0NCi12b2lkIENQV0xfV25kOjpSZVBvc0NoaWxkV25kKCkNCi17DQotCUNQREZfUmVjdCByY0NvbnRlbnQgPSBDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdChHZXRXaW5kb3dSZWN0KCksKEZYX0ZMT0FUKShHZXRCb3JkZXJXaWR0aCgpK0dldElubmVyQm9yZGVyV2lkdGgoKSkpOw0KLQ0KLQlDUFdMX1Njcm9sbEJhciAqIHBWU0IgPSB0aGlzLT5HZXRWU2Nyb2xsQmFyKCk7DQotDQotCUNQREZfUmVjdCByY1ZTY3JvbGwgPSBDUERGX1JlY3QocmNDb250ZW50LnJpZ2h0IC0gUFdMX1NDUk9MTEJBUl9XSURUSCwNCi0JCQkJCQkJcmNDb250ZW50LmJvdHRvbSwNCi0JCQkJCQkJcmNDb250ZW50LnJpZ2h0LTEuMGYsDQotCQkJCQkJCXJjQ29udGVudC50b3ApOw0KLQ0KLQlpZiAocFZTQikgcFZTQi0+TW92ZShyY1ZTY3JvbGwsVFJVRSxGQUxTRSk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9XbmQ6OkNyZWF0ZUNoaWxkV25kKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKQ0KLXsNCi19DQotDQotdm9pZCBDUFdMX1duZDo6U2V0Q3Vyc29yKCkNCi17DQotCWlmIChJc1ZhbGlkKCkpIA0KLQl7DQotCQlpZiAoSUZYX1N5c3RlbUhhbmRsZXIqIHBTSCA9IEdldFN5c3RlbUhhbmRsZXIoKSkNCi0JCXsNCi0JCQlGWF9JTlQzMiBuQ3Vyc29yVHlwZSA9IHRoaXMtPkdldENyZWF0aW9uUGFyYW0oKS5lQ3Vyc29yVHlwZTsNCi0JCQlwU0gtPlNldEN1cnNvcihuQ3Vyc29yVHlwZSk7DQotCQl9DQotCX0NCi19DQotDQotdm9pZCBDUFdMX1duZDo6Q3JlYXRlTXNnQ29udHJvbCgpDQotew0KLQlpZiAoIW1fc1ByaXZhdGVQYXJhbS5wTXNnQ29udHJvbCkNCi0JCW1fc1ByaXZhdGVQYXJhbS5wTXNnQ29udHJvbCA9IG5ldyBDUFdMX01zZ0NvbnRyb2wodGhpcyk7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9XbmQ6OkRlc3Ryb3lNc2dDb250cm9sKCkNCi17DQotCWlmIChDUFdMX01zZ0NvbnRyb2wqIHBNc2dDb250cm9sID0gR2V0TXNnQ29udHJvbCgpKQ0KLQkJaWYgKHBNc2dDb250cm9sLT5Jc1duZENyZWF0ZWQodGhpcykpDQotCQkJZGVsZXRlIHBNc2dDb250cm9sOw0KLX0NCi0NCi1DUFdMX01zZ0NvbnRyb2wqIENQV0xfV25kOjpHZXRNc2dDb250cm9sKCkgY29uc3QNCi17DQotCXJldHVybiBtX3NQcml2YXRlUGFyYW0ucE1zZ0NvbnRyb2w7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9XbmQ6OklzQ2FwdHVyZU1vdXNlKCkgY29uc3QNCi17DQotCXJldHVybiBJc1duZENhcHR1cmVNb3VzZSh0aGlzKTsNCi19DQotDQotRlhfQk9PTCBDUFdMX1duZDo6SXNXbmRDYXB0dXJlTW91c2UoY29uc3QgQ1BXTF9XbmQgKiBwV25kKSBjb25zdA0KLXsNCi0JaWYgKENQV0xfTXNnQ29udHJvbCAqIHBDdHJsID0gR2V0TXNnQ29udHJvbCgpKQ0KLQkJcmV0dXJuIHBDdHJsLT5Jc1duZENhcHR1cmVNb3VzZShwV25kKTsNCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1GWF9CT09MIENQV0xfV25kOjpJc1duZENhcHR1cmVLZXlib2FyZChjb25zdCBDUFdMX1duZCAqIHBXbmQpIGNvbnN0DQotew0KLQlpZiAoQ1BXTF9Nc2dDb250cm9sICogcEN0cmwgPSBHZXRNc2dDb250cm9sKCkpDQotCQlyZXR1cm4gcEN0cmwtPklzV25kQ2FwdHVyZUtleWJvYXJkKHBXbmQpOw0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9XbmQ6OklzRm9jdXNlZCgpIGNvbnN0DQotew0KLQlpZiAoQ1BXTF9Nc2dDb250cm9sICogcEN0cmwgPSBHZXRNc2dDb250cm9sKCkpDQotCQlyZXR1cm4gcEN0cmwtPklzTWFpbkNhcHR1cmVLZXlib2FyZCh0aGlzKTsNCi0NCi0JcmV0dXJuIEZBTFNFOw0KLX0NCi0NCi1DUERGX1JlY3QgQ1BXTF9XbmQ6OkdldEZvY3VzUmVjdCgpIGNvbnN0DQotew0KLQlyZXR1cm4gQ1BXTF9VdGlsczo6SW5mbGF0ZVJlY3QodGhpcy0+R2V0V2luZG93UmVjdCgpLDEpOw0KLX0NCi0NCi1GWF9GTE9BVCBDUFdMX1duZDo6R2V0Rm9udFNpemUoKSBjb25zdA0KLXsNCi0JcmV0dXJuIHRoaXMtPm1fc1ByaXZhdGVQYXJhbS5mRm9udFNpemU7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9XbmQ6OlNldEZvbnRTaXplKEZYX0ZMT0FUIGZGb250U2l6ZSkNCi17DQotCXRoaXMtPm1fc1ByaXZhdGVQYXJhbS5mRm9udFNpemUgPSBmRm9udFNpemU7DQotfQ0KLQ0KLUlGWF9TeXN0ZW1IYW5kbGVyKiBDUFdMX1duZDo6R2V0U3lzdGVtSGFuZGxlcigpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9zUHJpdmF0ZVBhcmFtLnBTeXN0ZW1IYW5kbGVyOw0KLX0NCi0NCi1JUFdMX0ZvY3VzSGFuZGxlciogQ1BXTF9XbmQ6OkdldEZvY3VzSGFuZGxlcigpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9zUHJpdmF0ZVBhcmFtLnBGb2N1c0hhbmRsZXI7DQotfQ0KLQ0KLUlQV0xfUHJvdmlkZXIqIENQV0xfV25kOjpHZXRQcm92aWRlcigpIGNvbnN0DQotew0KLQlyZXR1cm4gbV9zUHJpdmF0ZVBhcmFtLnBQcm92aWRlcjsNCi19DQotDQotSUZYX0VkaXRfRm9udE1hcCogQ1BXTF9XbmQ6OkdldEZvbnRNYXAoKSBjb25zdA0KLXsNCi0JcmV0dXJuIG1fc1ByaXZhdGVQYXJhbS5wRm9udE1hcDsNCi19DQotDQotQ1BXTF9Db2xvciBDUFdMX1duZDo6R2V0Qm9yZGVyTGVmdFRvcENvbG9yKEZYX0lOVDMyIG5Cb3JkZXJTdHlsZSkgY29uc3QNCi17DQotCUNQV0xfQ29sb3IgY29sb3I7DQotDQotCXN3aXRjaCAobkJvcmRlclN0eWxlKQ0KLQl7DQotCQljYXNlIFBCU19TT0xJRDoNCi0JCQlicmVhazsNCi0JCWNhc2UgUEJTX0RBU0g6DQotCQkJYnJlYWs7DQotCQljYXNlIFBCU19CRVZFTEVEOg0KLQkJCWNvbG9yID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwxKTsNCi0JCQlicmVhazsNCi0JCWNhc2UgUEJTX0lOU0VUOg0KLQkJCWNvbG9yID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwwLjVmKTsNCi0JCQlicmVhazsNCi0JCWNhc2UgUEJTX1VOREVSTElORUQ6DQotCQkJYnJlYWs7DQotCX0NCi0NCi0JcmV0dXJuIGNvbG9yOw0KLX0NCi0NCi1DUFdMX0NvbG9yIENQV0xfV25kOjpHZXRCb3JkZXJSaWdodEJvdHRvbUNvbG9yKEZYX0lOVDMyIG5Cb3JkZXJTdHlsZSkgY29uc3QNCi17DQotCUNQV0xfQ29sb3IgY29sb3I7DQotDQotCXN3aXRjaCAobkJvcmRlclN0eWxlKQ0KLQl7DQotCQljYXNlIFBCU19TT0xJRDoNCi0JCQlicmVhazsNCi0JCWNhc2UgUEJTX0RBU0g6DQotCQkJYnJlYWs7DQotCQljYXNlIFBCU19CRVZFTEVEOg0KLQkJCWNvbG9yID0gQ1BXTF9VdGlsczo6RGV2aWRlQ29sb3IoR2V0QmFja2dyb3VuZENvbG9yKCksMik7DQotCQkJYnJlYWs7DQotCQljYXNlIFBCU19JTlNFVDoNCi0JCQljb2xvciA9IENQV0xfQ29sb3IoQ09MT1JUWVBFX0dSQVksMC43NWYpOw0KLQkJCWJyZWFrOw0KLQkJY2FzZSBQQlNfVU5ERVJMSU5FRDoNCi0JCQlicmVhazsNCi0JfQ0KLQ0KLQlyZXR1cm4gY29sb3I7DQotfQ0KLQ0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQotDQotRlhfSU5UMzIgQ1BXTF9XbmQ6OkdldFRyYW5zcGFyZW5jeSgpDQotew0KLQlyZXR1cm4gbV9zUHJpdmF0ZVBhcmFtLm5UcmFuc3BhcmVuY3k7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9XbmQ6OlNldFRyYW5zcGFyZW5jeShGWF9JTlQzMiBuVHJhbnNwYXJlbmN5KQ0KLXsNCi0JZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9hQ2hpbGRyZW4uR2V0U2l6ZSgpOyBpPHN6OyBpKyspDQotCXsNCi0JCWlmIChDUFdMX1duZCogcENoaWxkID0gbV9hQ2hpbGRyZW4uR2V0QXQoaSkpDQotCQl7DQotCQkJcENoaWxkLT5TZXRUcmFuc3BhcmVuY3koblRyYW5zcGFyZW5jeSk7DQotCQl9DQotCX0NCi0NCi0JbV9zUHJpdmF0ZVBhcmFtLm5UcmFuc3BhcmVuY3kgPSBuVHJhbnNwYXJlbmN5Ow0KLX0NCi0NCi1DUERGX01hdHJpeAlDUFdMX1duZDo6R2V0V2luZG93TWF0cml4KCkgY29uc3QNCi17DQotCUNQREZfTWF0cml4IG10ID0gdGhpcy0+R2V0Q2hpbGRUb1Jvb3QoKTsNCi0NCi0JaWYgKElQV0xfUHJvdmlkZXIqIHBQcm92aWRlciA9IEdldFByb3ZpZGVyKCkpDQotCXsNCi0JCW10LkNvbmNhdChwUHJvdmlkZXItPkdldFdpbmRvd01hdHJpeChHZXRBdHRhY2hlZERhdGEoKSkpOw0KLQkJcmV0dXJuIG10Ow0KLQl9DQotDQotLyoNCi0JaWYgKENSZWFkZXJfQXBwKiBwQXBwID0gQ1BXTF9Nb2R1bGU6OkdldFJlYWRlckFwcCgpKQ0KLQkJaWYgKENSZWFkZXJfRG9jdW1lbnQqIHBEb2N1bWVudCA9IHBBcHAtPkdldEN1cnJlbnREb2N1bWVudCgpKQ0KLQkJCWlmIChDUmVhZGVyX0RvY1ZpZXcqIHBEb2NWaWV3ID0gcERvY3VtZW50LT5HZXRDdXJyZW50RG9jVmlldygpKQ0KLQkJCXsNCi0JCQkJQ1BERl9NYXRyaXggbXRQYWdlVmlldzsNCi0JCQkJcERvY1ZpZXctPkdldEN1cnJlbnRNYXRyaXgobXRQYWdlVmlldyk7DQotCQkJCW10LkNvbmNhdChtdFBhZ2VWaWV3KTsNCi0JCQkJcmV0dXJuIG10Ow0KLQkJCX0JCQ0KLQkJCQ0KLSovDQotDQotCXJldHVybiBtdDsNCi19DQotDQotdm9pZCBDUFdMX1duZDo6UFdMdG9XbmQoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQsIEZYX0lOVDMyJiB4LCBGWF9JTlQzMiYgeSkgY29uc3QNCi17DQotCUNQREZfTWF0cml4IG10ID0gR2V0V2luZG93TWF0cml4KCk7DQotCUNQREZfUG9pbnQgcHQgPSBwb2ludDsNCi0JbXQuVHJhbnNmb3JtKHB0LngscHQueSk7DQotCXggPSAoRlhfSU5UMzIpKHB0LngrMC41KTsNCi0JeSA9IChGWF9JTlQzMikocHQueSswLjUpOw0KLX0NCi0NCi1GWF9SRUNUIENQV0xfV25kOjpQV0x0b1duZChjb25zdCBDUERGX1JlY3QgJiByZWN0KSBjb25zdA0KLXsNCi0JQ1BERl9SZWN0IHJjVGVtcCA9IHJlY3Q7DQotCUNQREZfTWF0cml4IG10ID0gR2V0V2luZG93TWF0cml4KCk7DQotCW10LlRyYW5zZm9ybVJlY3QocmNUZW1wKTsJDQotCXJldHVybiBGWF9SRUNUKChGWF9JTlQzMikocmNUZW1wLmxlZnQrMC41KSwgKEZYX0lOVDMyKShyY1RlbXAuYm90dG9tKzAuNSksIChGWF9JTlQzMikocmNUZW1wLnJpZ2h0KzAuNSksIChGWF9JTlQzMikocmNUZW1wLnRvcCswLjUpKTsNCi19DQotDQotRlhfSFdORCBDUFdMX1duZDo6R2V0QXR0YWNoZWRIV25kKCkgY29uc3QNCi17DQotCXJldHVybiBtX3NQcml2YXRlUGFyYW0uaEF0dGFjaGVkV25kOw0KLX0NCi0NCi1DUERGX1BvaW50IENQV0xfV25kOjpDaGlsZFRvUGFyZW50KGNvbnN0IENQREZfUG9pbnQmIHBvaW50KSBjb25zdA0KLXsNCi0JQ1BERl9NYXRyaXggbXQgPSBHZXRDaGlsZE1hdHJpeCgpOw0KLQlpZiAobXQuSXNJZGVudGl0eSgpKQ0KLQkJcmV0dXJuIHBvaW50Ow0KLQllbHNlDQotCXsNCi0JCUNQREZfUG9pbnQgcHQgPSBwb2ludDsNCi0JCW10LlRyYW5zZm9ybShwdC54LHB0LnkpOw0KLQkJcmV0dXJuIHB0Ow0KLQl9DQotfQ0KLQ0KLUNQREZfUmVjdCBDUFdMX1duZDo6Q2hpbGRUb1BhcmVudChjb25zdCBDUERGX1JlY3QmIHJlY3QpIGNvbnN0DQotew0KLQlDUERGX01hdHJpeCBtdCA9IEdldENoaWxkTWF0cml4KCk7DQotCWlmIChtdC5Jc0lkZW50aXR5KCkpDQotCQlyZXR1cm4gcmVjdDsNCi0JZWxzZQ0KLQl7DQotCQlDUERGX1JlY3QgcmMgPSByZWN0Ow0KLQkJbXQuVHJhbnNmb3JtUmVjdChyYyk7DQotCQlyZXR1cm4gcmM7DQotCX0NCi19DQotDQotQ1BERl9Qb2ludCBDUFdMX1duZDo6UGFyZW50VG9DaGlsZChjb25zdCBDUERGX1BvaW50JiBwb2ludCkgY29uc3QNCi17DQotCUNQREZfTWF0cml4IG10ID0gR2V0Q2hpbGRNYXRyaXgoKTsNCi0JaWYgKG10LklzSWRlbnRpdHkoKSkNCi0JCXJldHVybiBwb2ludDsNCi0JZWxzZQ0KLQl7DQotCQltdC5TZXRSZXZlcnNlKG10KTsNCi0JCUNQREZfUG9pbnQgcHQgPSBwb2ludDsNCi0JCW10LlRyYW5zZm9ybShwdC54LHB0LnkpOw0KLQkJcmV0dXJuIHB0Ow0KLQl9DQotfQ0KLQ0KLUNQREZfUmVjdCBDUFdMX1duZDo6UGFyZW50VG9DaGlsZChjb25zdCBDUERGX1JlY3QmIHJlY3QpIGNvbnN0DQotew0KLQlDUERGX01hdHJpeCBtdCA9IEdldENoaWxkTWF0cml4KCk7DQotCWlmIChtdC5Jc0lkZW50aXR5KCkpDQotCQlyZXR1cm4gcmVjdDsNCi0JZWxzZQ0KLQl7DQotCQltdC5TZXRSZXZlcnNlKG10KTsNCi0JCUNQREZfUmVjdCByYyA9IHJlY3Q7DQotCQltdC5UcmFuc2Zvcm1SZWN0KHJjKTsNCi0JCXJldHVybiByYzsNCi0JfQ0KLX0NCi0NCi1DUERGX01hdHJpeCBDUFdMX1duZDo6R2V0Q2hpbGRUb1Jvb3QoKSBjb25zdA0KLXsNCi0JQ1BERl9NYXRyaXggbXQoMSwwLDAsMSwwLDApOw0KLQkNCi0JaWYgKEhhc0ZsYWcoUFdTX0NISUxEKSkNCi0Jew0KLQkJY29uc3QgQ1BXTF9XbmQqIHBQYXJlbnQgPSB0aGlzOw0KLQkJd2hpbGUgKHBQYXJlbnQpDQotCQl7DQotCQkJbXQuQ29uY2F0KHBQYXJlbnQtPkdldENoaWxkTWF0cml4KCkpOw0KLQkJCXBQYXJlbnQgPSBwUGFyZW50LT5HZXRQYXJlbnRXaW5kb3coKTsNCi0JCX0NCi0JfQ0KLQ0KLQlyZXR1cm4gbXQ7DQotfQ0KLQ0KLUNQREZfTWF0cml4IENQV0xfV25kOjpHZXRDaGlsZE1hdHJpeCgpIGNvbnN0DQotew0KLQlpZiAoSGFzRmxhZyhQV1NfQ0hJTEQpKQ0KLQkJcmV0dXJuIG1fc1ByaXZhdGVQYXJhbS5tdENoaWxkOw0KLQ0KLQlyZXR1cm4gQ1BERl9NYXRyaXgoMSwwLDAsMSwwLDApOw0KLX0NCi0NCi12b2lkIENQV0xfV25kOjpTZXRDaGlsZE1hdHJpeChjb25zdCBDUERGX01hdHJpeCYgbXQpDQotew0KLQltX3NQcml2YXRlUGFyYW0ubXRDaGlsZCA9IG10Ow0KLX0NCi0NCi1jb25zdCBDUFdMX1duZCoJQ1BXTF9XbmQ6OkdldEZvY3VzZWQoKSBjb25zdA0KLXsNCi0JaWYgKENQV0xfTXNnQ29udHJvbCAqIHBNc2dDdHJsID0gR2V0TXNnQ29udHJvbCgpKQ0KLQl7DQotCQlyZXR1cm4gcE1zZ0N0cmwtPm1fcE1haW5LZXlib2FyZFduZDsNCi0JfQ0KLQ0KLQlyZXR1cm4gTlVMTDsNCi19DQotDQotdm9pZCBDUFdMX1duZDo6RW5hYmxlV2luZG93KEZYX0JPT0wgYkVuYWJsZSkNCi17DQotCWlmIChtX2JFbmFibGVkICE9IGJFbmFibGUpDQotCXsNCi0JCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fYUNoaWxkcmVuLkdldFNpemUoKTsgaTxzejsgaSsrKQ0KLQkJew0KLQkJCWlmIChDUFdMX1duZCogcENoaWxkID0gbV9hQ2hpbGRyZW4uR2V0QXQoaSkpDQotCQkJew0KLQkJCQlwQ2hpbGQtPkVuYWJsZVdpbmRvdyhiRW5hYmxlKTsNCi0JCQl9DQotCQl9DQotDQotCQl0aGlzLT5tX2JFbmFibGVkID0gYkVuYWJsZTsNCi0NCi0JCWlmIChiRW5hYmxlKQ0KLQkJCXRoaXMtPk9uRW5hYmxlZCgpOw0KLQkJZWxzZQ0KLQkJCXRoaXMtPk9uRGlzYWJsZWQoKTsNCi0JfQ0KLX0NCi0NCi1GWF9CT09MIENQV0xfV25kOjpJc0VuYWJsZWQoKQ0KLXsNCi0JcmV0dXJuIG1fYkVuYWJsZWQ7DQotfQ0KLQ0KLXZvaWQgQ1BXTF9XbmQ6Ok9uRW5hYmxlZCgpDQotew0KLX0NCi0NCi12b2lkIENQV0xfV25kOjpPbkRpc2FibGVkKCkNCi17DQotfQ0KLQ0KLUZYX0JPT0wgQ1BXTF9XbmQ6OklzQ1RSTHByZXNzZWQoRlhfRFdPUkQgbkZsYWcpIGNvbnN0DQotew0KLQlpZiAoSUZYX1N5c3RlbUhhbmRsZXIqIHBTeXN0ZW1IYW5kbGVyID0gR2V0U3lzdGVtSGFuZGxlcigpKQ0KLQl7DQotCQlyZXR1cm4gcFN5c3RlbUhhbmRsZXItPklzQ1RSTEtleURvd24obkZsYWcpOw0KLQl9DQotDQotCXJldHVybiBGQUxTRTsNCi19DQotDQotRlhfQk9PTAlDUFdMX1duZDo6SXNTSElGVHByZXNzZWQoRlhfRFdPUkQgbkZsYWcpIGNvbnN0DQotew0KLQlpZiAoSUZYX1N5c3RlbUhhbmRsZXIqIHBTeXN0ZW1IYW5kbGVyID0gR2V0U3lzdGVtSGFuZGxlcigpKQ0KLQl7DQotCQlyZXR1cm4gcFN5c3RlbUhhbmRsZXItPklzU0hJRlRLZXlEb3duKG5GbGFnKTsNCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wJQ1BXTF9XbmQ6OklzQUxUcHJlc3NlZChGWF9EV09SRCBuRmxhZykgY29uc3QNCi17DQotCWlmIChJRlhfU3lzdGVtSGFuZGxlciogcFN5c3RlbUhhbmRsZXIgPSBHZXRTeXN0ZW1IYW5kbGVyKCkpDQotCXsNCi0JCXJldHVybiBwU3lzdGVtSGFuZGxlci0+SXNBTFRLZXlEb3duKG5GbGFnKTsNCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KLUZYX0JPT0wJQ1BXTF9XbmQ6OklzSU5TRVJUcHJlc3NlZChGWF9EV09SRCBuRmxhZykgY29uc3QNCi17DQotCWlmIChJRlhfU3lzdGVtSGFuZGxlciogcFN5c3RlbUhhbmRsZXIgPSBHZXRTeXN0ZW1IYW5kbGVyKCkpDQotCXsNCi0JCXJldHVybiBwU3lzdGVtSGFuZGxlci0+SXNJTlNFUlRLZXlEb3duKG5GbGFnKTsNCi0JfQ0KLQ0KLQlyZXR1cm4gRkFMU0U7DQotfQ0KLQ0KKy8vIENvcHlyaWdodCAyMDE0IFBERml1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyAKKy8vIE9yaWdpbmFsIGNvZGUgY29weXJpZ2h0IDIwMTQgRm94aXQgU29mdHdhcmUgSW5jLiBodHRwOi8vd3d3LmZveGl0c29mdHdhcmUuY29tCisKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QREZXaW5kb3cuaCIKKyNpbmNsdWRlICIuLi8uLi9pbmNsdWRlL3BkZndpbmRvdy9QV0xfV25kLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1V0aWxzLmgiCisjaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9wZGZ3aW5kb3cvUFdMX1Njcm9sbEJhci5oIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX1RpbWVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBDRlhfTWFwUHRyVGVtcGxhdGU8RlhfSU5UMzIsIENQV0xfVGltZXIqPglnX1RpbWVNYXA7CisKK0NQV0xfVGltZXI6OkNQV0xfVGltZXIoQ1BXTF9UaW1lckhhbmRsZXIqIHBBdHRhY2hlZCwgSUZYX1N5c3RlbUhhbmRsZXIqIHBTeXN0ZW1IYW5kbGVyKSA6IAorCW1fcEF0dGFjaGVkKHBBdHRhY2hlZCksCisJbV9uVGltZXJJRCgwKSwKKwltX3BTeXN0ZW1IYW5kbGVyKHBTeXN0ZW1IYW5kbGVyKQoreworCUFTU0VSVChtX3BBdHRhY2hlZCAhPSBOVUxMKTsKKwlBU1NFUlQobV9wU3lzdGVtSGFuZGxlciAhPSBOVUxMKTsKK30KKworQ1BXTF9UaW1lcjo6fkNQV0xfVGltZXIoKQoreworCUtpbGxQV0xUaW1lcigpOworfQorCitGWF9JTlQzMiBDUFdMX1RpbWVyOjpTZXRQV0xUaW1lcihGWF9JTlQzMiBuRWxhcHNlKQorewkKKwlpZiAobV9uVGltZXJJRCAhPSAwKSBLaWxsUFdMVGltZXIoKTsKKwltX25UaW1lcklEID0gbV9wU3lzdGVtSGFuZGxlci0+U2V0VGltZXIobkVsYXBzZSwgVGltZXJQcm9jKTsKKwlnX1RpbWVNYXAuU2V0QXQobV9uVGltZXJJRCwgdGhpcyk7CisJcmV0dXJuIG1fblRpbWVySUQ7Cit9CisKK3ZvaWQgQ1BXTF9UaW1lcjo6S2lsbFBXTFRpbWVyKCkKK3sKKwlpZiAobV9uVGltZXJJRCAhPSAwKQorCXsKKwkJbV9wU3lzdGVtSGFuZGxlci0+S2lsbFRpbWVyKG1fblRpbWVySUQpOworCQlnX1RpbWVNYXAuUmVtb3ZlS2V5KG1fblRpbWVySUQpOworCQltX25UaW1lcklEID0gMDsKKwl9Cit9CisKK3ZvaWQgQ1BXTF9UaW1lcjo6VGltZXJQcm9jKEZYX0lOVDMyIGlkRXZlbnQpCit7CisJQ1BXTF9UaW1lciogcFRpbWVyID0gTlVMTDsKKwlpZiAoZ19UaW1lTWFwLkxvb2t1cChpZEV2ZW50LCBwVGltZXIpKQorCXsKKwkJaWYgKHBUaW1lcikKKwkJewkJCQorCQkJaWYgKHBUaW1lci0+bV9wQXR0YWNoZWQpIAorCQkJCXBUaW1lci0+bV9wQXR0YWNoZWQtPlRpbWVyUHJvYygpOworCQl9CisJfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDUFdMX1RpbWVySGFuZGxlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDUFdMX1RpbWVySGFuZGxlcjo6Q1BXTF9UaW1lckhhbmRsZXIoKSA6IG1fcFRpbWVyKE5VTEwpCit7Cit9CisKK0NQV0xfVGltZXJIYW5kbGVyOjp+Q1BXTF9UaW1lckhhbmRsZXIoKQoreworCWlmIChtX3BUaW1lcikgZGVsZXRlIG1fcFRpbWVyOworfQorCit2b2lkIENQV0xfVGltZXJIYW5kbGVyOjpCZWdpblRpbWVyKEZYX0lOVDMyIG5FbGFwc2UpCit7CisJaWYgKCFtX3BUaW1lcikKKwkJbV9wVGltZXIgPSBuZXcgQ1BXTF9UaW1lcih0aGlzLCBHZXRTeXN0ZW1IYW5kbGVyKCkpOworCisJaWYgKG1fcFRpbWVyKQorCQltX3BUaW1lci0+U2V0UFdMVGltZXIobkVsYXBzZSk7Cit9CisKK3ZvaWQgQ1BXTF9UaW1lckhhbmRsZXI6OkVuZFRpbWVyKCkKK3sKKwlpZiAobV9wVGltZXIpCisJCW1fcFRpbWVyLT5LaWxsUFdMVGltZXIoKTsKK30KKwordm9pZCBDUFdMX1RpbWVySGFuZGxlcjo6VGltZXJQcm9jKCkKK3sKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENQV0xfTXNnQ29udHJvbCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2NsYXNzIENQV0xfTXNnQ29udHJvbAoreworCWZyaWVuZCBjbGFzcyBDUFdMX1duZDsKKworcHVibGljOgorCUNQV0xfTXNnQ29udHJvbChDUFdMX1duZCAqIHBXbmQpCisJeworLy8JCVBXTF9UUkFDRSgibmV3IENQV0xfTXNnQ29udHJvbFxuIik7CisJCW1fcENyZWF0ZWRXbmQgPSBwV25kOworCQlEZWZhdWx0KCk7CisJfQorCisJfkNQV0xfTXNnQ29udHJvbCgpCisJeworLy8JCVBXTF9UUkFDRSgifkNQV0xfTXNnQ29udHJvbFxuIik7CisJCURlZmF1bHQoKTsKKwl9CisKKwl2b2lkIERlZmF1bHQoKQorCXsKKwkJbV9hTW91c2VQYXRoLlJlbW92ZUFsbCgpOworCQltX2FLZXlib2FyZFBhdGguUmVtb3ZlQWxsKCk7CisJCW1fcE1haW5Nb3VzZVduZCA9IE5VTEw7CisJCW1fcE1haW5LZXlib2FyZFduZCA9IE5VTEw7CisJfQorCisJRlhfQk9PTCBJc1duZENyZWF0ZWQoY29uc3QgQ1BXTF9XbmQgKiBwV25kKSBjb25zdAorCXsKKwkJcmV0dXJuIG1fcENyZWF0ZWRXbmQgPT0gcFduZDsKKwl9CisKKwlGWF9CT09MIElzTWFpbkNhcHR1cmVNb3VzZShjb25zdCBDUFdMX1duZCAqIHBXbmQpIGNvbnN0CisJeworCQlyZXR1cm4gcFduZCA9PSBtX3BNYWluTW91c2VXbmQ7CisJfQorCisJRlhfQk9PTCBJc1duZENhcHR1cmVNb3VzZShjb25zdCBDUFdMX1duZCAqIHBXbmQpIGNvbnN0CisJeworCQlpZiAocFduZCkKKwkJCWZvciggRlhfSU5UMzIgaT0wLHN6PW1fYU1vdXNlUGF0aC5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwkJCQlpZiAobV9hTW91c2VQYXRoLkdldEF0KGkpID09IHBXbmQpCisJCQkJCXJldHVybiBUUlVFOworCisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlGWF9CT09MIElzTWFpbkNhcHR1cmVLZXlib2FyZChjb25zdCBDUFdMX1duZCAqIHBXbmQpIGNvbnN0CisJeworCQlyZXR1cm4gcFduZCA9PSBtX3BNYWluS2V5Ym9hcmRXbmQ7CisJfQorCisKKwlGWF9CT09MIElzV25kQ2FwdHVyZUtleWJvYXJkKGNvbnN0IENQV0xfV25kICogcFduZCkgY29uc3QKKwl7CisJCWlmIChwV25kKQorCQkJZm9yKCBGWF9JTlQzMiBpPTAsc3o9bV9hS2V5Ym9hcmRQYXRoLkdldFNpemUoKTsgaTxzejsgaSsrKQorCQkJCWlmIChtX2FLZXlib2FyZFBhdGguR2V0QXQoaSkgPT0gcFduZCkKKwkJCQkJcmV0dXJuIFRSVUU7CisJCQorCQlyZXR1cm4gRkFMU0U7CisJfQorCisJdm9pZCBTZXRGb2N1cyhDUFdMX1duZCAqIHBXbmQpCisJeworCQltX2FLZXlib2FyZFBhdGguUmVtb3ZlQWxsKCk7CisKKwkJaWYgKHBXbmQpCisJCXsKKwkJCW1fcE1haW5LZXlib2FyZFduZCA9IHBXbmQ7CisKKwkJCUNQV0xfV25kICogcFBhcmVudCA9IHBXbmQ7CisJCQl3aGlsZSAocFBhcmVudCkKKwkJCXsKKwkJCQltX2FLZXlib2FyZFBhdGguQWRkKHBQYXJlbnQpOworCQkJCXBQYXJlbnQgPSBwUGFyZW50LT5HZXRQYXJlbnRXaW5kb3coKTsKKwkJCX0KKworCQkJcFduZC0+T25TZXRGb2N1cygpOworCQl9CisJfQorCisJdm9pZCBLaWxsRm9jdXMoKQorCXsKKwkJaWYgKG1fYUtleWJvYXJkUGF0aC5HZXRTaXplKCkgPiAwKQorCQkJaWYgKENQV0xfV25kKiBwV25kID0gbV9hS2V5Ym9hcmRQYXRoLkdldEF0KDApKQorCQkJCXBXbmQtPk9uS2lsbEZvY3VzKCk7CisKKwkJbV9wTWFpbktleWJvYXJkV25kID0gTlVMTDsKKwkJbV9hS2V5Ym9hcmRQYXRoLlJlbW92ZUFsbCgpOworCX0KKworCXZvaWQgU2V0Q2FwdHVyZShDUFdMX1duZCAqIHBXbmQpCisJeworCQltX2FNb3VzZVBhdGguUmVtb3ZlQWxsKCk7CisKKwkJaWYgKHBXbmQpCisJCXsKKwkJCW1fcE1haW5Nb3VzZVduZCA9IHBXbmQ7CisKKwkJCUNQV0xfV25kICogcFBhcmVudCA9IHBXbmQ7CisJCQl3aGlsZSAocFBhcmVudCkKKwkJCXsKKwkJCQltX2FNb3VzZVBhdGguQWRkKHBQYXJlbnQpOworCQkJCXBQYXJlbnQgPSBwUGFyZW50LT5HZXRQYXJlbnRXaW5kb3coKTsKKwkJCX0KKwkJfQorCX0KKworCXZvaWQgUmVsZWFzZUNhcHR1cmUoKQorCXsKKwkJbV9wTWFpbk1vdXNlV25kID0gTlVMTDsKKwkJbV9hTW91c2VQYXRoLlJlbW92ZUFsbCgpOworCX0KKworcHJpdmF0ZToKKwlDRlhfQXJyYXlUZW1wbGF0ZTxDUFdMX1duZCo+CW1fYU1vdXNlUGF0aDsKKwlDRlhfQXJyYXlUZW1wbGF0ZTxDUFdMX1duZCo+CW1fYUtleWJvYXJkUGF0aDsKKwlDUFdMX1duZCoJCQkJCQltX3BDcmVhdGVkV25kOworCUNQV0xfV25kKgkJCQkJCW1fcE1haW5Nb3VzZVduZDsKKwlDUFdMX1duZCoJCQkJCQltX3BNYWluS2V5Ym9hcmRXbmQ7Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ1BXTF9XbmQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitDUFdMX1duZDo6Q1BXTF9XbmQoKSA6CisJbV9wVlNjcm9sbEJhcihOVUxMKSwKKwltX3JjV2luZG93KCksCisJbV9yY0NsaXAoKSwKKwltX2JDcmVhdGVkKEZBTFNFKSwJCQkKKwltX2JWaXNpYmxlKEZBTFNFKSwKKwltX2JOb3RpZnlpbmcoRkFMU0UpLAorCW1fYkVuYWJsZWQoVFJVRSkKK3sKK30KKworQ1BXTF9XbmQ6On5DUFdMX1duZCgpCit7CisJQVNTRVJUKG1fYkNyZWF0ZWQgPT0gRkFMU0UpOworfQorCitDRlhfQnl0ZVN0cmluZyBDUFdMX1duZDo6R2V0Q2xhc3NOYW1lKCkgY29uc3QKK3sKKwlyZXR1cm4gIkNQV0xfV25kIjsKK30KKwordm9pZCBDUFdMX1duZDo6Q3JlYXRlKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKQoreworCWlmICghSXNWYWxpZCgpKQorCXsKKwkJbV9zUHJpdmF0ZVBhcmFtID0gY3A7CisKKwkJT25DcmVhdGUobV9zUHJpdmF0ZVBhcmFtKTsKKworCQltX3NQcml2YXRlUGFyYW0ucmNSZWN0V25kLk5vcm1hbGl6ZSgpOworCQltX3JjV2luZG93ID0gbV9zUHJpdmF0ZVBhcmFtLnJjUmVjdFduZDsKKwkJbV9yY0NsaXAgPSBDUFdMX1V0aWxzOjpJbmZsYXRlUmVjdChtX3JjV2luZG93LDEuMGYpOworCisJCUNyZWF0ZU1zZ0NvbnRyb2woKTsKKworCQlpZiAobV9zUHJpdmF0ZVBhcmFtLnBQYXJlbnRXbmQpCisJCQltX3NQcml2YXRlUGFyYW0ucFBhcmVudFduZC0+T25Ob3RpZnkodGhpcywgUE5NX0FERENISUxEKTsKKworCQlQV0xfQ1JFQVRFUEFSQU0gY2NwID0gbV9zUHJpdmF0ZVBhcmFtOworCisJCWNjcC5kd0ZsYWdzICY9IDB4RkZGRjAwMDBMOyAvL3JlbW92ZSBzdWIgc3R5bGVzCisJCWNjcC5tdENoaWxkID0gQ1BERl9NYXRyaXgoMSwwLDAsMSwwLDApOworCQkKKwkJQ3JlYXRlU2Nyb2xsQmFyKGNjcCk7CisJCUNyZWF0ZUNoaWxkV25kKGNjcCk7IAorCisJCW1fYlZpc2libGUgPSBIYXNGbGFnKFBXU19WSVNJQkxFKTsKKworCQlPbkNyZWF0ZWQoKTsKKworCQlSZVBvc0NoaWxkV25kKCk7CisJCW1fYkNyZWF0ZWQgPSBUUlVFOworCX0KK30KKwordm9pZCBDUFdMX1duZDo6T25DcmVhdGUoUFdMX0NSRUFURVBBUkFNICYgY3ApCit7Cit9CisKK3ZvaWQgQ1BXTF9XbmQ6Ok9uQ3JlYXRlZCgpCit7Cit9CisKK3ZvaWQgQ1BXTF9XbmQ6Ok9uRGVzdHJveSgpCit7Cit9CisKK3ZvaWQgQ1BXTF9XbmQ6OkRlc3Ryb3koKQoreworCUtpbGxGb2N1cygpOworCisJT25EZXN0cm95KCk7CisKKwlpZiAobV9iQ3JlYXRlZCkKKwl7CisJCWZvciAoRlhfSU5UMzIgaSA9IG1fYUNoaWxkcmVuLkdldFNpemUoKS0xOyBpID49IDA7IGkgLS0pCisJCXsKKwkJCWlmIChDUFdMX1duZCAqIHBDaGlsZCA9IG1fYUNoaWxkcmVuW2ldKQorCQkJeworCQkJCXBDaGlsZC0+RGVzdHJveSgpOworCQkJCWRlbGV0ZSBwQ2hpbGQ7CisJCQkJcENoaWxkID0gTlVMTDsKKwkJCX0KKwkJfQorCisJCWlmIChtX3NQcml2YXRlUGFyYW0ucFBhcmVudFduZCkKKwkJCW1fc1ByaXZhdGVQYXJhbS5wUGFyZW50V25kLT5Pbk5vdGlmeSh0aGlzLCBQTk1fUkVNT1ZFQ0hJTEQpOworCQltX2JDcmVhdGVkID0gRkFMU0U7CisJfQorCisJRGVzdHJveU1zZ0NvbnRyb2woKTsKKworCUZYU1lTX21lbXNldCgmbV9zUHJpdmF0ZVBhcmFtLCAwLCBzaXplb2YoUFdMX0NSRUFURVBBUkFNKSk7CisJbV9hQ2hpbGRyZW4uUmVtb3ZlQWxsKCk7CQorCW1fcFZTY3JvbGxCYXIgPSBOVUxMOworfQorCit2b2lkIENQV0xfV25kOjpNb3ZlKGNvbnN0IENQREZfUmVjdCAmIHJjTmV3LCBGWF9CT09MIGJSZXNldCxGWF9CT09MIGJSZWZyZXNoKQoreworCWlmIChJc1ZhbGlkKCkpCisJeworCQlDUERGX1JlY3QgcmNPbGQgPSB0aGlzLT5HZXRXaW5kb3dSZWN0KCk7CisKKwkJbV9yY1dpbmRvdyA9IHJjTmV3OworCQltX3JjV2luZG93Lk5vcm1hbGl6ZSgpOworCQkvL21fcmNDbGlwID0gQ1BXTF9VdGlsczo6SW5mbGF0ZVJlY3QobV9yY1dpbmRvdywxLjBmKTsgLy9mb3Igc3BlY2lhbCBjYXJldCAKKworCQlpZiAocmNPbGQubGVmdCAhPSByY05ldy5sZWZ0IHx8IHJjT2xkLnJpZ2h0ICE9IHJjTmV3LnJpZ2h0IHx8CisJCQlyY09sZC50b3AgIT0gcmNOZXcudG9wIHx8IHJjT2xkLmJvdHRvbSAhPSByY05ldy5ib3R0b20pCisJCXsKKwkJCWlmIChiUmVzZXQpCisJCQl7CisJCQkJUmVQb3NDaGlsZFduZCgpOwkKKwkJCX0JCisKKwkJfQorCQlpZiAoYlJlZnJlc2gpCisJCXsJCisJCQlJbnZhbGlkYXRlUmVjdE1vdmUocmNPbGQscmNOZXcpOworCQl9CisKKwkJbV9zUHJpdmF0ZVBhcmFtLnJjUmVjdFduZCA9IG1fcmNXaW5kb3c7CisJfQorfQorCit2b2lkICBDUFdMX1duZDo6SW52YWxpZGF0ZVJlY3RNb3ZlKGNvbnN0IENQREZfUmVjdCAmIHJjT2xkLCBjb25zdCBDUERGX1JlY3QgJiByY05ldykKK3sKKwlDUERGX1JlY3QgcmNVbmlvbiA9IHJjT2xkOworCXJjVW5pb24uVW5pb24ocmNOZXcpOworCisJSW52YWxpZGF0ZVJlY3QoJnJjVW5pb24pOworCisJLyoKKwlDUERGX1JlY3QgU3ViQXJyYXlbNF07IAorCisJcmNPbGQuU3Vic3RyYWN0NChyY05ldyxTdWJBcnJheSk7CisJZm9yIChGWF9JTlQzMiBpPTA7aTw0O2krKykKKwl7CisJCWlmIChTdWJBcnJheVtpXS5sZWZ0ID09IDAgJiYKKwkJCVN1YkFycmF5W2ldLnJpZ2h0ID09IDAgJiYKKwkJCVN1YkFycmF5W2ldLnRvcCA9PSAwICYmCisJCQlTdWJBcnJheVtpXS5ib3R0b20gPT0gMCljb250aW51ZTsKKworCQlJbnZhbGlkYXRlUmVjdCgmQ1BXTF9VdGlsczo6SW5mbGF0ZVJlY3QoU3ViQXJyYXlbaV0sMikpOworCX0KKworCXJjTmV3LlN1YnN0cmFjdDQocmNPbGQsU3ViQXJyYXkpOworCWZvciAoRlhfSU5UMzIgaj0wO2o8NDtqKyspCisJeworCQlpZiAoU3ViQXJyYXlbal0ubGVmdCA9PSAwICYmCisJCQlTdWJBcnJheVtqXS5yaWdodCA9PSAwICYmCisJCQlTdWJBcnJheVtqXS50b3AgPT0gMCAmJgorCQkJU3ViQXJyYXlbal0uYm90dG9tID09IDApY29udGludWU7CisKKwkJSW52YWxpZGF0ZVJlY3QoJkNQV0xfVXRpbHM6OkluZmxhdGVSZWN0KFN1YkFycmF5W2pdLDIpKTsKKwl9CisJKi8KK30KKwordm9pZCBDUFdMX1duZDo6R2V0QXBwZWFyYW5jZVN0cmVhbShDRlhfQnl0ZVN0cmluZyAmIHNBcHBTdHJlYW0pCit7CisJaWYgKElzVmFsaWQoKSkKKwl7CisJCUNGWF9CeXRlVGV4dEJ1ZiBzVGV4dEJ1ZjsKKwkJR2V0QXBwZWFyYW5jZVN0cmVhbShzVGV4dEJ1Zik7CisJCXNBcHBTdHJlYW0gKz0gc1RleHRCdWYuR2V0Qnl0ZVN0cmluZygpOworCX0KK30KKwordm9pZCBDUFdMX1duZDo6R2V0QXBwZWFyYW5jZVN0cmVhbShDRlhfQnl0ZVRleHRCdWYgJiBzQXBwU3RyZWFtKQoreworCWlmIChJc1ZhbGlkKCkgJiYgSXNWaXNpYmxlKCkpCisJeworCQlHZXRUaGlzQXBwZWFyYW5jZVN0cmVhbShzQXBwU3RyZWFtKTsKKwkJR2V0Q2hpbGRBcHBlYXJhbmNlU3RyZWFtKHNBcHBTdHJlYW0pOworCX0KK30KKworLy9pZiBkb24ndCBzZXQsR2V0IGRlZmF1bHQgYXBwZXJhbmNlIHN0cmVhbQordm9pZCBDUFdMX1duZDo6R2V0VGhpc0FwcGVhcmFuY2VTdHJlYW0oQ0ZYX0J5dGVUZXh0QnVmICYgc0FwcFN0cmVhbSkKK3sKKwlDUERGX1JlY3QgcmVjdFduZCA9IEdldFdpbmRvd1JlY3QoKTsKKwlpZiAoIXJlY3RXbmQuSXNFbXB0eSgpKQorCXsKKwkJQ0ZYX0J5dGVUZXh0QnVmIHNUaGlzOworCisJCWlmIChIYXNGbGFnKFBXU19CQUNLR1JPVU5EKSkKKwkJCXNUaGlzIDw8IENQV0xfVXRpbHM6OkdldFJlY3RGaWxsQXBwU3RyZWFtKHJlY3RXbmQsdGhpcy0+R2V0QmFja2dyb3VuZENvbG9yKCkpOworCisJCWlmIChIYXNGbGFnKFBXU19CT1JERVIpKQorCQkJc1RoaXMgPDwgQ1BXTF9VdGlsczo6R2V0Qm9yZGVyQXBwU3RyZWFtKHJlY3RXbmQsCisJCQkJCQkJCQkoRlhfRkxPQVQpR2V0Qm9yZGVyV2lkdGgoKSwKKwkJCQkJCQkJCUdldEJvcmRlckNvbG9yKCksCisJCQkJCQkJCQl0aGlzLT5HZXRCb3JkZXJMZWZ0VG9wQ29sb3IodGhpcy0+R2V0Qm9yZGVyU3R5bGUoKSksCisJCQkJCQkJCQl0aGlzLT5HZXRCb3JkZXJSaWdodEJvdHRvbUNvbG9yKHRoaXMtPkdldEJvcmRlclN0eWxlKCkpLAorCQkJCQkJCQkJdGhpcy0+R2V0Qm9yZGVyU3R5bGUoKSwKKwkJCQkJCQkJCXRoaXMtPkdldEJvcmRlckRhc2goKSk7CisKKwkJc0FwcFN0cmVhbSA8PCBzVGhpczsKKwl9Cit9CisKK3ZvaWQgQ1BXTF9XbmQ6OkdldENoaWxkQXBwZWFyYW5jZVN0cmVhbShDRlhfQnl0ZVRleHRCdWYgJiBzQXBwU3RyZWFtKQoreworCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fYUNoaWxkcmVuLkdldFNpemUoKTsgaTxzejsgaSsrKQorCXsKKwkJaWYgKENQV0xfV25kICogcENoaWxkID0gbV9hQ2hpbGRyZW4uR2V0QXQoaSkpCisJCXsKKwkJCXBDaGlsZC0+R2V0QXBwZWFyYW5jZVN0cmVhbShzQXBwU3RyZWFtKTsKKwkJfQorCX0KK30KKwordm9pZCBDUFdMX1duZDo6RHJhd0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSkKK3sKKwlpZiAoSXNWYWxpZCgpICYmIElzVmlzaWJsZSgpKQorCXsKKwkJRHJhd1RoaXNBcHBlYXJhbmNlKHBEZXZpY2UscFVzZXIyRGV2aWNlKTsKKwkJRHJhd0NoaWxkQXBwZWFyYW5jZShwRGV2aWNlLHBVc2VyMkRldmljZSk7CisJfQorfQorCit2b2lkIENQV0xfV25kOjpEcmF3VGhpc0FwcGVhcmFuY2UoQ0ZYX1JlbmRlckRldmljZSogcERldmljZSwgQ1BERl9NYXRyaXgqIHBVc2VyMkRldmljZSkKK3sKKwlDUERGX1JlY3QgcmVjdFduZCA9IEdldFdpbmRvd1JlY3QoKTsKKwlpZiAoIXJlY3RXbmQuSXNFbXB0eSgpKQorCXsJCQorCQlpZiAoSGFzRmxhZyhQV1NfQkFDS0dST1VORCkpCisJCXsKKwkJCUNQREZfUmVjdCByY0NsaWVudCA9IENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KHJlY3RXbmQsKEZYX0ZMT0FUKShHZXRCb3JkZXJXaWR0aCgpK0dldElubmVyQm9yZGVyV2lkdGgoKSkpOworCQkJQ1BXTF9VdGlsczo6RHJhd0ZpbGxSZWN0KHBEZXZpY2UscFVzZXIyRGV2aWNlLHJjQ2xpZW50LHRoaXMtPkdldEJhY2tncm91bmRDb2xvcigpLEdldFRyYW5zcGFyZW5jeSgpKTsKKwkJfQorCisJCWlmIChIYXNGbGFnKFBXU19CT1JERVIpKQorCQkJQ1BXTF9VdGlsczo6RHJhd0JvcmRlcihwRGV2aWNlLAorCQkJCQkJCQlwVXNlcjJEZXZpY2UsCisJCQkJCQkJCXJlY3RXbmQsCisJCQkJCQkJCShGWF9GTE9BVClHZXRCb3JkZXJXaWR0aCgpLAorCQkJCQkJCQlHZXRCb3JkZXJDb2xvcigpLAorCQkJCQkJCQl0aGlzLT5HZXRCb3JkZXJMZWZ0VG9wQ29sb3IodGhpcy0+R2V0Qm9yZGVyU3R5bGUoKSksCisJCQkJCQkJCXRoaXMtPkdldEJvcmRlclJpZ2h0Qm90dG9tQ29sb3IodGhpcy0+R2V0Qm9yZGVyU3R5bGUoKSksCisJCQkJCQkJCXRoaXMtPkdldEJvcmRlclN0eWxlKCksCisJCQkJCQkJCXRoaXMtPkdldEJvcmRlckRhc2goKSwKKwkJCQkJCQkJR2V0VHJhbnNwYXJlbmN5KCkpOwkJCQkJCQkJCisJfQorfQorCit2b2lkIENQV0xfV25kOjpEcmF3Q2hpbGRBcHBlYXJhbmNlKENGWF9SZW5kZXJEZXZpY2UqIHBEZXZpY2UsIENQREZfTWF0cml4KiBwVXNlcjJEZXZpY2UpCit7CisJZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9hQ2hpbGRyZW4uR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJeworCQlpZiAoQ1BXTF9XbmQgKiBwQ2hpbGQgPSBtX2FDaGlsZHJlbi5HZXRBdChpKSkKKwkJeworCQkJQ1BERl9NYXRyaXggbXQgPSBwQ2hpbGQtPkdldENoaWxkTWF0cml4KCk7CisJCQlpZiAobXQuSXNJZGVudGl0eSgpKQorCQkJeworCQkJCXBDaGlsZC0+RHJhd0FwcGVhcmFuY2UocERldmljZSxwVXNlcjJEZXZpY2UpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCW10LkNvbmNhdCgqcFVzZXIyRGV2aWNlKTsKKwkJCQlwQ2hpbGQtPkRyYXdBcHBlYXJhbmNlKHBEZXZpY2UsJm10KTsKKwkJCX0KKwkJfQorCX0KK30KKwordm9pZCBDUFdMX1duZDo6SW52YWxpZGF0ZVJlY3QoQ1BERl9SZWN0KiBwUmVjdCkKK3sKKwlpZiAoSXNWYWxpZCgpKQorCXsKKwkJQ1BERl9SZWN0IHJjUmVmcmVzaCA9IHBSZWN0ID8gKnBSZWN0IDogR2V0V2luZG93UmVjdCgpOworCisJCWlmICghSGFzRmxhZyhQV1NfTk9SRUZSRVNIQ0xJUCkpCisJCXsKKwkJCUNQREZfUmVjdCByY0NsaXAgPSBHZXRDbGlwUmVjdCgpOwkJCisJCQlpZiAoIXJjQ2xpcC5Jc0VtcHR5KCkpCisJCQl7CisJCQkJcmNSZWZyZXNoLkludGVyc2VjdChyY0NsaXApOworCQkJfQorCQl9CisKKwkJRlhfUkVDVCByY1dpbiA9IFBXTHRvV25kKHJjUmVmcmVzaCk7CisJCXJjV2luLmxlZnQgLT0gUFdMX0lOVkFMSURBVEVfSU5GTEFURTsKKwkJcmNXaW4udG9wIC09IFBXTF9JTlZBTElEQVRFX0lORkxBVEU7CisJCXJjV2luLnJpZ2h0ICs9IFBXTF9JTlZBTElEQVRFX0lORkxBVEU7CisJCXJjV2luLmJvdHRvbSArPSBQV0xfSU5WQUxJREFURV9JTkZMQVRFOworCisJCWlmIChJRlhfU3lzdGVtSGFuZGxlciogcFNIID0gR2V0U3lzdGVtSGFuZGxlcigpKQorCQl7CisJCQlpZiAoRlhfSFdORCBoV25kID0gR2V0QXR0YWNoZWRIV25kKCkpCisJCQl7CisJCQkJcFNILT5JbnZhbGlkYXRlUmVjdChoV25kLCByY1dpbik7CisJCQl9CisJCX0KKwl9Cit9CisKKyNkZWZpbmUgUFdMX0lNUExFTUVOVF9LRVlfTUVUSE9EKGtleV9tZXRob2RfbmFtZSlcCitGWF9CT09MIENQV0xfV25kOjprZXlfbWV0aG9kX25hbWUoRlhfV09SRCBuQ2hhciwgRlhfRFdPUkQgbkZsYWcpXAore1wKKwlpZiAoSXNWYWxpZCgpICYmIElzVmlzaWJsZSgpICYmIElzRW5hYmxlZCgpKVwKKwl7XAorCQlpZiAoSXNXbmRDYXB0dXJlS2V5Ym9hcmQodGhpcykpXAorCQl7XAorCQkJZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9hQ2hpbGRyZW4uR2V0U2l6ZSgpOyBpPHN6OyBpKyspXAorCQkJe1wKKwkJCQlpZiAoQ1BXTF9XbmQgKiBwQ2hpbGQgPSBtX2FDaGlsZHJlbi5HZXRBdChpKSlcCisJCQkJe1wKKwkJCQkJaWYgKElzV25kQ2FwdHVyZUtleWJvYXJkKHBDaGlsZCkpXAorCQkJCQl7XAorCQkJCQkJcmV0dXJuIHBDaGlsZC0+a2V5X21ldGhvZF9uYW1lKG5DaGFyLG5GbGFnKTtcCisJCQkJCX1cCisJCQkJfVwKKwkJCX1cCisJCX1cCisJfVwKKwlyZXR1cm4gRkFMU0U7XAorfQorCisjZGVmaW5lIFBXTF9JTVBMRU1FTlRfTU9VU0VfTUVUSE9EKG1vdXNlX21ldGhvZF9uYW1lKVwKK0ZYX0JPT0wgQ1BXTF9XbmQ6Om1vdXNlX21ldGhvZF9uYW1lKGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCwgRlhfRFdPUkQgbkZsYWcpXAore1wKKwlpZiAoSXNWYWxpZCgpICYmIElzVmlzaWJsZSgpICYmIElzRW5hYmxlZCgpKVwKKwl7XAorCQlpZiAoSXNXbmRDYXB0dXJlTW91c2UodGhpcykpXAorCQl7XAorCQkJZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9hQ2hpbGRyZW4uR2V0U2l6ZSgpOyBpPHN6OyBpKyspXAorCQkJe1wKKwkJCQlpZiAoQ1BXTF9XbmQgKiBwQ2hpbGQgPSBtX2FDaGlsZHJlbi5HZXRBdChpKSlcCisJCQkJe1wKKwkJCQkJaWYgKElzV25kQ2FwdHVyZU1vdXNlKHBDaGlsZCkpXAorCQkJCQl7XAorCQkJCQkJcmV0dXJuIHBDaGlsZC0+bW91c2VfbWV0aG9kX25hbWUocENoaWxkLT5QYXJlbnRUb0NoaWxkKHBvaW50KSxuRmxhZyk7XAorCQkJCQl9XAorCQkJCX1cCisJCQl9XAorCQkJU2V0Q3Vyc29yKCk7XAorCQl9XAorCQllbHNlXAorCQl7XAorCQkJZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9hQ2hpbGRyZW4uR2V0U2l6ZSgpOyBpPHN6OyBpKyspXAorCQkJe1wKKwkJCQlpZiAoQ1BXTF9XbmQgKiBwQ2hpbGQgPSBtX2FDaGlsZHJlbi5HZXRBdChpKSlcCisJCQkJe1wKKwkJCQkJaWYgKHBDaGlsZC0+V25kSGl0VGVzdChwQ2hpbGQtPlBhcmVudFRvQ2hpbGQocG9pbnQpKSlcCisJCQkJCXtcCisJCQkJCQlyZXR1cm4gcENoaWxkLT5tb3VzZV9tZXRob2RfbmFtZShwQ2hpbGQtPlBhcmVudFRvQ2hpbGQocG9pbnQpLG5GbGFnKTtcCisJCQkJCX1cCisJCQkJfVwKKwkJCX1cCisJCQlpZiAodGhpcy0+V25kSGl0VGVzdChwb2ludCkpXAorCQkJCVNldEN1cnNvcigpO1wKKwkJfVwKKwl9XAorCXJldHVybiBGQUxTRTtcCit9CisKK1BXTF9JTVBMRU1FTlRfS0VZX01FVEhPRChPbktleURvd24pCitQV0xfSU1QTEVNRU5UX0tFWV9NRVRIT0QoT25LZXlVcCkKK1BXTF9JTVBMRU1FTlRfS0VZX01FVEhPRChPbkNoYXIpCisKK1BXTF9JTVBMRU1FTlRfTU9VU0VfTUVUSE9EKE9uTEJ1dHRvbkRibENsaykKK1BXTF9JTVBMRU1FTlRfTU9VU0VfTUVUSE9EKE9uTEJ1dHRvbkRvd24pCitQV0xfSU1QTEVNRU5UX01PVVNFX01FVEhPRChPbkxCdXR0b25VcCkKK1BXTF9JTVBMRU1FTlRfTU9VU0VfTUVUSE9EKE9uTUJ1dHRvbkRibENsaykKK1BXTF9JTVBMRU1FTlRfTU9VU0VfTUVUSE9EKE9uTUJ1dHRvbkRvd24pCitQV0xfSU1QTEVNRU5UX01PVVNFX01FVEhPRChPbk1CdXR0b25VcCkKK1BXTF9JTVBMRU1FTlRfTU9VU0VfTUVUSE9EKE9uUkJ1dHRvbkRibENsaykKK1BXTF9JTVBMRU1FTlRfTU9VU0VfTUVUSE9EKE9uUkJ1dHRvbkRvd24pCitQV0xfSU1QTEVNRU5UX01PVVNFX01FVEhPRChPblJCdXR0b25VcCkKK1BXTF9JTVBMRU1FTlRfTU9VU0VfTUVUSE9EKE9uTW91c2VNb3ZlKQorCitGWF9CT09MCUNQV0xfV25kOjpPbk1vdXNlV2hlZWwoc2hvcnQgekRlbHRhLCBjb25zdCBDUERGX1BvaW50ICYgcG9pbnQsIEZYX0RXT1JEIG5GbGFnKQoreworCWlmIChJc1ZhbGlkKCkgJiYgSXNWaXNpYmxlKCkgJiYgSXNFbmFibGVkKCkpCisJeworCQlTZXRDdXJzb3IoKTsKKwkJaWYgKElzV25kQ2FwdHVyZUtleWJvYXJkKHRoaXMpKQorCQl7CisJCQlmb3IgKEZYX0lOVDMyIGk9MCxzej1tX2FDaGlsZHJlbi5HZXRTaXplKCk7IGk8c3o7IGkrKykKKwkJCXsKKwkJCQlpZiAoQ1BXTF9XbmQgKiBwQ2hpbGQgPSBtX2FDaGlsZHJlbi5HZXRBdChpKSkKKwkJCQl7CisJCQkJCWlmIChJc1duZENhcHR1cmVLZXlib2FyZChwQ2hpbGQpKQorCQkJCQl7CisJCQkJCQlyZXR1cm4gcENoaWxkLT5Pbk1vdXNlV2hlZWwoekRlbHRhLHBDaGlsZC0+UGFyZW50VG9DaGlsZChwb2ludCksIG5GbGFnKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgQ1BXTF9XbmQ6OkFkZENoaWxkKENQV0xfV25kICogcFduZCkKK3sKKwltX2FDaGlsZHJlbi5BZGQocFduZCk7Cit9CisKK3ZvaWQgQ1BXTF9XbmQ6OlJlbW92ZUNoaWxkKENQV0xfV25kICogcFduZCkKK3sKKwlmb3IgKEZYX0lOVDMyIGkgPSBtX2FDaGlsZHJlbi5HZXRTaXplKCktMTsgaSA+PSAwOyBpIC0tKQorCXsKKwkJaWYgKENQV0xfV25kKiBwQ2hpbGQgPSBtX2FDaGlsZHJlbi5HZXRBdChpKSkKKwkJeworCQkJaWYgKHBDaGlsZCA9PSBwV25kKQorCQkJeworCQkJCW1fYUNoaWxkcmVuLlJlbW92ZUF0KGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorfQorCit2b2lkIENQV0xfV25kOjpPbk5vdGlmeShDUFdMX1duZCogcFduZCwgRlhfRFdPUkQgbXNnLCBGWF9JTlRQVFIgd1BhcmFtLCBGWF9JTlRQVFIgbFBhcmFtKQoreworCXN3aXRjaCAobXNnKQorCXsKKwljYXNlIFBOTV9BRERDSElMRDoKKwkJdGhpcy0+QWRkQ2hpbGQocFduZCk7CisJCWJyZWFrOworCWNhc2UgUE5NX1JFTU9WRUNISUxEOgorCQl0aGlzLT5SZW1vdmVDaGlsZChwV25kKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitGWF9CT09MIENQV0xfV25kOjpJc1ZhbGlkKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9iQ3JlYXRlZDsKK30KKworUFdMX0NSRUFURVBBUkFNIENQV0xfV25kOjpHZXRDcmVhdGlvblBhcmFtKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9zUHJpdmF0ZVBhcmFtOworfQorCitDUFdMX1duZCogQ1BXTF9XbmQ6OkdldFBhcmVudFdpbmRvdygpIGNvbnN0Cit7CisJcmV0dXJuIG1fc1ByaXZhdGVQYXJhbS5wUGFyZW50V25kOworfQorCitDUERGX1JlY3QgQ1BXTF9XbmQ6OkdldE9yaWdpbldpbmRvd1JlY3QoKSBjb25zdAoreworCXJldHVybiBtX3NQcml2YXRlUGFyYW0ucmNSZWN0V25kOworfQorCitDUERGX1JlY3QgQ1BXTF9XbmQ6OkdldFdpbmRvd1JlY3QoKSBjb25zdAoreworCXJldHVybiBtX3JjV2luZG93OworfQorCitDUERGX1JlY3QgQ1BXTF9XbmQ6OkdldENsaWVudFJlY3QoKSBjb25zdAoreworCUNQREZfUmVjdCByY1dpbmRvdyA9IEdldFdpbmRvd1JlY3QoKTsKKwlDUERGX1JlY3QgcmNDbGllbnQgPSBDUFdMX1V0aWxzOjpEZWZsYXRlUmVjdChyY1dpbmRvdywoRlhfRkxPQVQpKEdldEJvcmRlcldpZHRoKCkrR2V0SW5uZXJCb3JkZXJXaWR0aCgpKSk7CisKKwlpZiAoQ1BXTF9TY3JvbGxCYXIgKiBwVlNCID0gdGhpcy0+R2V0VlNjcm9sbEJhcigpKQorCQlyY0NsaWVudC5yaWdodCAtPSBwVlNCLT5HZXRTY3JvbGxCYXJXaWR0aCgpOworCisJcmNDbGllbnQuTm9ybWFsaXplKCk7CisKKwlpZiAocmNXaW5kb3cuQ29udGFpbnMocmNDbGllbnQpKQorCQlyZXR1cm4gcmNDbGllbnQ7CisJZWxzZQorCQlyZXR1cm4gQ1BERl9SZWN0KCk7Cit9CisKK0NQREZfUG9pbnQgQ1BXTF9XbmQ6OkdldENlbnRlclBvaW50KCkgY29uc3QKK3sKKwlDUERGX1JlY3QgcmNDbGllbnQgPSBHZXRDbGllbnRSZWN0KCk7CisKKwlyZXR1cm4gQ1BERl9Qb2ludCgocmNDbGllbnQubGVmdCArIHJjQ2xpZW50LnJpZ2h0KSAqIDAuNWYsCisJCShyY0NsaWVudC50b3AgKyByY0NsaWVudC5ib3R0b20pICogMC41Zik7Cit9CisKK0NQREZfUmVjdCBDUFdMX1duZDo6R2V0Q2xpZW50Q2VudGVyU3F1YXJlKCkgY29uc3QKK3sKKwlyZXR1cm4gQ1BXTF9VdGlsczo6R2V0Q2VudGVyU3F1YXJlKEdldENsaWVudFJlY3QoKSk7Cit9CisKK0NQREZfUmVjdCBDUFdMX1duZDo6R2V0V2luZG93Q2VudGVyU3F1YXJlKCkgY29uc3QKK3sKKwlyZXR1cm4gQ1BXTF9VdGlsczo6R2V0Q2VudGVyU3F1YXJlKENQV0xfVXRpbHM6OkRlZmxhdGVSZWN0KEdldFdpbmRvd1JlY3QoKSwwLjFmKSk7Cit9CisKK0ZYX0JPT0wgQ1BXTF9XbmQ6Okhhc0ZsYWcoRlhfRFdPUkQgZHdGbGFncykgY29uc3QKK3sKKwlyZXR1cm4gKG1fc1ByaXZhdGVQYXJhbS5kd0ZsYWdzICYgZHdGbGFncykgIT0gMDsKK30KKwordm9pZCBDUFdMX1duZDo6UmVtb3ZlRmxhZyhGWF9EV09SRCBkd0ZsYWdzKQoreworCW1fc1ByaXZhdGVQYXJhbS5kd0ZsYWdzICY9IH5kd0ZsYWdzOworfQorCit2b2lkIENQV0xfV25kOjpBZGRGbGFnKEZYX0RXT1JEIGR3RmxhZ3MpCit7CisJbV9zUHJpdmF0ZVBhcmFtLmR3RmxhZ3MgfD0gZHdGbGFnczsKK30KKworQ1BXTF9Db2xvciBDUFdMX1duZDo6R2V0QmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9zUHJpdmF0ZVBhcmFtLnNCYWNrZ3JvdW5kQ29sb3I7Cit9CisKK3ZvaWQgQ1BXTF9XbmQ6OlNldEJhY2tncm91bmRDb2xvcihjb25zdCBDUFdMX0NvbG9yICYgY29sb3IpCit7CisJbV9zUHJpdmF0ZVBhcmFtLnNCYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKK30KKwordm9pZCBDUFdMX1duZDo6U2V0VGV4dENvbG9yKGNvbnN0IENQV0xfQ29sb3IgJiBjb2xvcikKK3sKKwltX3NQcml2YXRlUGFyYW0uc1RleHRDb2xvciA9IGNvbG9yOworfQorCit2b2lkIENQV0xfV25kOjpTZXRUZXh0U3Ryb2tlQ29sb3IoY29uc3QgQ1BXTF9Db2xvciAmIGNvbG9yKQoreworCW1fc1ByaXZhdGVQYXJhbS5zVGV4dFN0cm9rZUNvbG9yID0gY29sb3I7Cit9CisKK0NQV0xfQ29sb3IgQ1BXTF9XbmQ6OkdldFRleHRDb2xvcigpIGNvbnN0Cit7CisJcmV0dXJuIG1fc1ByaXZhdGVQYXJhbS5zVGV4dENvbG9yOworfQorCitDUFdMX0NvbG9yIENQV0xfV25kOjpHZXRUZXh0U3Ryb2tlQ29sb3IoKSBjb25zdAoreworCXJldHVybiBtX3NQcml2YXRlUGFyYW0uc1RleHRTdHJva2VDb2xvcjsKK30KKworRlhfSU5UMzIgQ1BXTF9XbmQ6OkdldEJvcmRlclN0eWxlKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9zUHJpdmF0ZVBhcmFtLm5Cb3JkZXJTdHlsZTsKK30KKwordm9pZCBDUFdMX1duZDo6U2V0Qm9yZGVyU3R5bGUoRlhfSU5UMzIgbkJvcmRlclN0eWxlKQoreworCWlmIChIYXNGbGFnKFBXU19CT1JERVIpKQorCQltX3NQcml2YXRlUGFyYW0ubkJvcmRlclN0eWxlID0gbkJvcmRlclN0eWxlOworfQorCitGWF9JTlQzMiBDUFdMX1duZDo6R2V0Qm9yZGVyV2lkdGgoKSBjb25zdAoreworCWlmIChIYXNGbGFnKFBXU19CT1JERVIpKQorCQlyZXR1cm4gbV9zUHJpdmF0ZVBhcmFtLmR3Qm9yZGVyV2lkdGg7CisKKwlyZXR1cm4gMDsKK30KKworRlhfSU5UMzIgQ1BXTF9XbmQ6OkdldElubmVyQm9yZGVyV2lkdGgoKSBjb25zdAoreworCS8qCisJc3dpdGNoIChHZXRCb3JkZXJTdHlsZSgpKQorCXsKKwljYXNlIFBCU19CRVZFTEVEOgorCWNhc2UgUEJTX0lOU0VUOgorCQlyZXR1cm4gR2V0Qm9yZGVyV2lkdGgoKSAvIDI7CisJfQorCSovCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ1BXTF9XbmQ6OlNldEJvcmRlcldpZHRoKEZYX0lOVDMyIG5Cb3JkZXJXaWR0aCkKK3sKKwlpZiAoSGFzRmxhZyhQV1NfQk9SREVSKSkKKwkJbV9zUHJpdmF0ZVBhcmFtLmR3Qm9yZGVyV2lkdGggPSBuQm9yZGVyV2lkdGg7Cit9CisKK0NQV0xfQ29sb3IgQ1BXTF9XbmQ6OkdldEJvcmRlckNvbG9yKCkgY29uc3QKK3sKKwlpZiAoSGFzRmxhZyhQV1NfQk9SREVSKSkKKwkJcmV0dXJuIG1fc1ByaXZhdGVQYXJhbS5zQm9yZGVyQ29sb3I7CisKKwlyZXR1cm4gQ1BXTF9Db2xvcigpOworfQorCit2b2lkIENQV0xfV25kOjpTZXRCb3JkZXJDb2xvcihjb25zdCBDUFdMX0NvbG9yICYgY29sb3IpCit7CisJaWYgKEhhc0ZsYWcoUFdTX0JPUkRFUikpCisJCW1fc1ByaXZhdGVQYXJhbS5zQm9yZGVyQ29sb3IgPSBjb2xvcjsKK30KKworQ1BXTF9EYXNoIENQV0xfV25kOjpHZXRCb3JkZXJEYXNoKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9zUHJpdmF0ZVBhcmFtLnNEYXNoOworfQorCit2b2lkKiBDUFdMX1duZDo6R2V0QXR0YWNoZWREYXRhKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9zUHJpdmF0ZVBhcmFtLnBBdHRhY2hlZERhdGE7Cit9CisKK3ZvaWQgQ1BXTF9XbmQ6OlNldEJvcmRlckRhc2goY29uc3QgQ1BXTF9EYXNoICYgc0Rhc2gpCit7CisJaWYgKEhhc0ZsYWcoUFdTX0JPUkRFUikpCisJCW1fc1ByaXZhdGVQYXJhbS5zRGFzaCA9IHNEYXNoOworfQorCitDUFdMX1Njcm9sbEJhciogQ1BXTF9XbmQ6OkdldFZTY3JvbGxCYXIoKSBjb25zdAoreworCWlmIChIYXNGbGFnKFBXU19WU0NST0xMKSkKKwkJcmV0dXJuIG1fcFZTY3JvbGxCYXI7CisKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBDUFdMX1duZDo6Q3JlYXRlU2Nyb2xsQmFyKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKQoreworCUNyZWF0ZVZTY3JvbGxCYXIoY3ApOworfQorCit2b2lkIENQV0xfV25kOjpDcmVhdGVWU2Nyb2xsQmFyKGNvbnN0IFBXTF9DUkVBVEVQQVJBTSAmIGNwKQoreworCWlmICghbV9wVlNjcm9sbEJhciAmJiBIYXNGbGFnKFBXU19WU0NST0xMKSkKKwl7CisJCVBXTF9DUkVBVEVQQVJBTSBzY3AgPSBjcDsKKworCQkvL2ZsYWdzCisJCXNjcC5kd0ZsYWdzID0gUFdTX0NISUxEfCBQV1NfQkFDS0dST1VORCB8IFBXU19BVVRPVFJBTlNQQVJFTlQgfCBQV1NfTk9SRUZSRVNIQ0xJUDsKKwkJCisJCXNjcC5wUGFyZW50V25kID0gdGhpczsKKwkJc2NwLnNCYWNrZ3JvdW5kQ29sb3IgPSBQV0xfREVGQVVMVF9XSElURUNPTE9SOworCQlzY3AuZUN1cnNvclR5cGUgPSBGWENUX0FSUk9XOworCQlzY3AublRyYW5zcGFyZW5jeSA9IFBXTF9TQ1JPTExCQVJfVFJBTlNQQVJBTkNZOworCisJCWlmICgobV9wVlNjcm9sbEJhciA9IG5ldyBDUFdMX1Njcm9sbEJhcihTQlRfVlNDUk9MTCkpKQorCQkJbV9wVlNjcm9sbEJhci0+Q3JlYXRlKHNjcCk7CisJfQorfQorCit2b2lkIENQV0xfV25kOjpTZXRDYXB0dXJlKCkKK3sKKwlpZiAoQ1BXTF9Nc2dDb250cm9sICogcE1zZ0N0cmwgPSBHZXRNc2dDb250cm9sKCkpCisJCXBNc2dDdHJsLT5TZXRDYXB0dXJlKHRoaXMpOworfQorCit2b2lkIENQV0xfV25kOjpSZWxlYXNlQ2FwdHVyZSgpCit7CisJZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9hQ2hpbGRyZW4uR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJCWlmIChDUFdMX1duZCogcENoaWxkID0gbV9hQ2hpbGRyZW4uR2V0QXQoaSkpCisJCQlwQ2hpbGQtPlJlbGVhc2VDYXB0dXJlKCk7CisKKwlpZiAoQ1BXTF9Nc2dDb250cm9sICogcE1zZ0N0cmwgPSBHZXRNc2dDb250cm9sKCkpCisJCXBNc2dDdHJsLT5SZWxlYXNlQ2FwdHVyZSgpOworfQorCit2b2lkIENQV0xfV25kOjpTZXRGb2N1cygpCit7CisJaWYgKENQV0xfTXNnQ29udHJvbCAqIHBNc2dDdHJsID0gR2V0TXNnQ29udHJvbCgpKQorCXsKKwkJaWYgKCFwTXNnQ3RybC0+SXNNYWluQ2FwdHVyZUtleWJvYXJkKHRoaXMpKQorCQkJcE1zZ0N0cmwtPktpbGxGb2N1cygpOworCQlwTXNnQ3RybC0+U2V0Rm9jdXModGhpcyk7CisJfQorfQorCit2b2lkIENQV0xfV25kOjpLaWxsRm9jdXMoKQoreworCWlmIChDUFdMX01zZ0NvbnRyb2wgKiBwTXNnQ3RybCA9IEdldE1zZ0NvbnRyb2woKSkKKwl7CisJCWlmIChwTXNnQ3RybC0+SXNXbmRDYXB0dXJlS2V5Ym9hcmQodGhpcykpCisJCQlwTXNnQ3RybC0+S2lsbEZvY3VzKCk7CisJfQorfQorCit2b2lkIENQV0xfV25kOjpPblNldEZvY3VzKCkKK3sKK30KKwordm9pZCBDUFdMX1duZDo6T25LaWxsRm9jdXMoKQoreworfQorCitGWF9CT09MCUNQV0xfV25kOjpXbmRIaXRUZXN0KGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3QKK3sKKwlyZXR1cm4gSXNWYWxpZCgpICYmIElzVmlzaWJsZSgpICYmIEdldFdpbmRvd1JlY3QoKS5Db250YWlucyhwb2ludC54LHBvaW50LnkpOworfQorCitGWF9CT09MIENQV0xfV25kOjpDbGllbnRIaXRUZXN0KGNvbnN0IENQREZfUG9pbnQgJiBwb2ludCkgY29uc3QKK3sKKwlyZXR1cm4gSXNWYWxpZCgpICYmIElzVmlzaWJsZSgpICYmIEdldENsaWVudFJlY3QoKS5Db250YWlucyhwb2ludC54LHBvaW50LnkpOworfQorCitjb25zdCBDUFdMX1duZCAqIENQV0xfV25kOjpHZXRSb290V25kKCkgY29uc3QKK3sKKwlpZiAobV9zUHJpdmF0ZVBhcmFtLnBQYXJlbnRXbmQpCisJCXJldHVybiBtX3NQcml2YXRlUGFyYW0ucFBhcmVudFduZC0+R2V0Um9vdFduZCgpOworCWVsc2UKKwkJcmV0dXJuIHRoaXM7Cit9CisKK3ZvaWQgQ1BXTF9XbmQ6OlNldFZpc2libGUoRlhfQk9PTCBiVmlzaWJsZSkKK3sKKwlpZiAoSXNWYWxpZCgpKQorCXsKKwkJZm9yIChGWF9JTlQzMiBpPTAsc3o9bV9hQ2hpbGRyZW4uR2V0U2l6ZSgpOyBpPHN6OyBpKyspCisJCXsKKwkJCWlmIChDUFdMX1duZCogcENoaWxkID0gbV9hQ2hpbGRyZW4uR2V0QXQoaSkpCisJCQl7CisJCQkJcENoaWxkLT5TZXRWaXNpYmxlKGJWaXNpYmxlKTsKKwkJCX0KKwkJfQorCisJCWlmIChiVmlzaWJsZSAhPSBtX2JWaXNpYmxlKQorCQl7CisJCQltX2JWaXNpYmxlID0gYlZpc2libGU7CisJCQlSZVBvc0NoaWxkV25kKCk7CQkKKwkJCUludmFsaWRhdGVSZWN0KCk7CisJCX0JCisJfQorfQorCit2b2lkIENQV0xfV25kOjpTZXRDbGlwUmVjdChjb25zdCBDUERGX1JlY3QgJiByZWN0KQoreworCW1fcmNDbGlwID0gcmVjdDsKKwltX3JjQ2xpcC5Ob3JtYWxpemUoKTsKK30KKworQ1BERl9SZWN0IENQV0xfV25kOjpHZXRDbGlwUmVjdCgpIGNvbnN0Cit7CisJcmV0dXJuIG1fcmNDbGlwOworfQorCitGWF9CT09MCUNQV0xfV25kOjpJc1JlYWRPbmx5KCkgY29uc3QKK3sKKwlyZXR1cm4gSGFzRmxhZyhQV1NfUkVBRE9OTFkpOworfQorCit2b2lkIENQV0xfV25kOjpSZVBvc0NoaWxkV25kKCkKK3sKKwlDUERGX1JlY3QgcmNDb250ZW50ID0gQ1BXTF9VdGlsczo6RGVmbGF0ZVJlY3QoR2V0V2luZG93UmVjdCgpLChGWF9GTE9BVCkoR2V0Qm9yZGVyV2lkdGgoKStHZXRJbm5lckJvcmRlcldpZHRoKCkpKTsKKworCUNQV0xfU2Nyb2xsQmFyICogcFZTQiA9IHRoaXMtPkdldFZTY3JvbGxCYXIoKTsKKworCUNQREZfUmVjdCByY1ZTY3JvbGwgPSBDUERGX1JlY3QocmNDb250ZW50LnJpZ2h0IC0gUFdMX1NDUk9MTEJBUl9XSURUSCwKKwkJCQkJCQlyY0NvbnRlbnQuYm90dG9tLAorCQkJCQkJCXJjQ29udGVudC5yaWdodC0xLjBmLAorCQkJCQkJCXJjQ29udGVudC50b3ApOworCisJaWYgKHBWU0IpIHBWU0ItPk1vdmUocmNWU2Nyb2xsLFRSVUUsRkFMU0UpOworfQorCit2b2lkIENQV0xfV25kOjpDcmVhdGVDaGlsZFduZChjb25zdCBQV0xfQ1JFQVRFUEFSQU0gJiBjcCkKK3sKK30KKwordm9pZCBDUFdMX1duZDo6U2V0Q3Vyc29yKCkKK3sKKwlpZiAoSXNWYWxpZCgpKSAKKwl7CisJCWlmIChJRlhfU3lzdGVtSGFuZGxlciogcFNIID0gR2V0U3lzdGVtSGFuZGxlcigpKQorCQl7CisJCQlGWF9JTlQzMiBuQ3Vyc29yVHlwZSA9IHRoaXMtPkdldENyZWF0aW9uUGFyYW0oKS5lQ3Vyc29yVHlwZTsKKwkJCXBTSC0+U2V0Q3Vyc29yKG5DdXJzb3JUeXBlKTsKKwkJfQorCX0KK30KKwordm9pZCBDUFdMX1duZDo6Q3JlYXRlTXNnQ29udHJvbCgpCit7CisJaWYgKCFtX3NQcml2YXRlUGFyYW0ucE1zZ0NvbnRyb2wpCisJCW1fc1ByaXZhdGVQYXJhbS5wTXNnQ29udHJvbCA9IG5ldyBDUFdMX01zZ0NvbnRyb2wodGhpcyk7Cit9CisKK3ZvaWQgQ1BXTF9XbmQ6OkRlc3Ryb3lNc2dDb250cm9sKCkKK3sKKwlpZiAoQ1BXTF9Nc2dDb250cm9sKiBwTXNnQ29udHJvbCA9IEdldE1zZ0NvbnRyb2woKSkKKwkJaWYgKHBNc2dDb250cm9sLT5Jc1duZENyZWF0ZWQodGhpcykpCisJCQlkZWxldGUgcE1zZ0NvbnRyb2w7Cit9CisKK0NQV0xfTXNnQ29udHJvbCogQ1BXTF9XbmQ6OkdldE1zZ0NvbnRyb2woKSBjb25zdAoreworCXJldHVybiBtX3NQcml2YXRlUGFyYW0ucE1zZ0NvbnRyb2w7Cit9CisKK0ZYX0JPT0wgQ1BXTF9XbmQ6OklzQ2FwdHVyZU1vdXNlKCkgY29uc3QKK3sKKwlyZXR1cm4gSXNXbmRDYXB0dXJlTW91c2UodGhpcyk7Cit9CisKK0ZYX0JPT0wgQ1BXTF9XbmQ6OklzV25kQ2FwdHVyZU1vdXNlKGNvbnN0IENQV0xfV25kICogcFduZCkgY29uc3QKK3sKKwlpZiAoQ1BXTF9Nc2dDb250cm9sICogcEN0cmwgPSBHZXRNc2dDb250cm9sKCkpCisJCXJldHVybiBwQ3RybC0+SXNXbmRDYXB0dXJlTW91c2UocFduZCk7CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wgQ1BXTF9XbmQ6OklzV25kQ2FwdHVyZUtleWJvYXJkKGNvbnN0IENQV0xfV25kICogcFduZCkgY29uc3QKK3sKKwlpZiAoQ1BXTF9Nc2dDb250cm9sICogcEN0cmwgPSBHZXRNc2dDb250cm9sKCkpCisJCXJldHVybiBwQ3RybC0+SXNXbmRDYXB0dXJlS2V5Ym9hcmQocFduZCk7CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wgQ1BXTF9XbmQ6OklzRm9jdXNlZCgpIGNvbnN0Cit7CisJaWYgKENQV0xfTXNnQ29udHJvbCAqIHBDdHJsID0gR2V0TXNnQ29udHJvbCgpKQorCQlyZXR1cm4gcEN0cmwtPklzTWFpbkNhcHR1cmVLZXlib2FyZCh0aGlzKTsKKworCXJldHVybiBGQUxTRTsKK30KKworQ1BERl9SZWN0IENQV0xfV25kOjpHZXRGb2N1c1JlY3QoKSBjb25zdAoreworCXJldHVybiBDUFdMX1V0aWxzOjpJbmZsYXRlUmVjdCh0aGlzLT5HZXRXaW5kb3dSZWN0KCksMSk7Cit9CisKK0ZYX0ZMT0FUIENQV0xfV25kOjpHZXRGb250U2l6ZSgpIGNvbnN0Cit7CisJcmV0dXJuIHRoaXMtPm1fc1ByaXZhdGVQYXJhbS5mRm9udFNpemU7Cit9CisKK3ZvaWQgQ1BXTF9XbmQ6OlNldEZvbnRTaXplKEZYX0ZMT0FUIGZGb250U2l6ZSkKK3sKKwl0aGlzLT5tX3NQcml2YXRlUGFyYW0uZkZvbnRTaXplID0gZkZvbnRTaXplOworfQorCitJRlhfU3lzdGVtSGFuZGxlciogQ1BXTF9XbmQ6OkdldFN5c3RlbUhhbmRsZXIoKSBjb25zdAoreworCXJldHVybiBtX3NQcml2YXRlUGFyYW0ucFN5c3RlbUhhbmRsZXI7Cit9CisKK0lQV0xfRm9jdXNIYW5kbGVyKiBDUFdMX1duZDo6R2V0Rm9jdXNIYW5kbGVyKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9zUHJpdmF0ZVBhcmFtLnBGb2N1c0hhbmRsZXI7Cit9CisKK0lQV0xfUHJvdmlkZXIqIENQV0xfV25kOjpHZXRQcm92aWRlcigpIGNvbnN0Cit7CisJcmV0dXJuIG1fc1ByaXZhdGVQYXJhbS5wUHJvdmlkZXI7Cit9CisKK0lGWF9FZGl0X0ZvbnRNYXAqIENQV0xfV25kOjpHZXRGb250TWFwKCkgY29uc3QKK3sKKwlyZXR1cm4gbV9zUHJpdmF0ZVBhcmFtLnBGb250TWFwOworfQorCitDUFdMX0NvbG9yIENQV0xfV25kOjpHZXRCb3JkZXJMZWZ0VG9wQ29sb3IoRlhfSU5UMzIgbkJvcmRlclN0eWxlKSBjb25zdAoreworCUNQV0xfQ29sb3IgY29sb3I7CisKKwlzd2l0Y2ggKG5Cb3JkZXJTdHlsZSkKKwl7CisJCWNhc2UgUEJTX1NPTElEOgorCQkJYnJlYWs7CisJCWNhc2UgUEJTX0RBU0g6CisJCQlicmVhazsKKwkJY2FzZSBQQlNfQkVWRUxFRDoKKwkJCWNvbG9yID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwxKTsKKwkJCWJyZWFrOworCQljYXNlIFBCU19JTlNFVDoKKwkJCWNvbG9yID0gQ1BXTF9Db2xvcihDT0xPUlRZUEVfR1JBWSwwLjVmKTsKKwkJCWJyZWFrOworCQljYXNlIFBCU19VTkRFUkxJTkVEOgorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNvbG9yOworfQorCitDUFdMX0NvbG9yIENQV0xfV25kOjpHZXRCb3JkZXJSaWdodEJvdHRvbUNvbG9yKEZYX0lOVDMyIG5Cb3JkZXJTdHlsZSkgY29uc3QKK3sKKwlDUFdMX0NvbG9yIGNvbG9yOworCisJc3dpdGNoIChuQm9yZGVyU3R5bGUpCisJeworCQljYXNlIFBCU19TT0xJRDoKKwkJCWJyZWFrOworCQljYXNlIFBCU19EQVNIOgorCQkJYnJlYWs7CisJCWNhc2UgUEJTX0JFVkVMRUQ6CisJCQljb2xvciA9IENQV0xfVXRpbHM6OkRldmlkZUNvbG9yKEdldEJhY2tncm91bmRDb2xvcigpLDIpOworCQkJYnJlYWs7CisJCWNhc2UgUEJTX0lOU0VUOgorCQkJY29sb3IgPSBDUFdMX0NvbG9yKENPTE9SVFlQRV9HUkFZLDAuNzVmKTsKKwkJCWJyZWFrOworCQljYXNlIFBCU19VTkRFUkxJTkVEOgorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNvbG9yOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitGWF9JTlQzMiBDUFdMX1duZDo6R2V0VHJhbnNwYXJlbmN5KCkKK3sKKwlyZXR1cm4gbV9zUHJpdmF0ZVBhcmFtLm5UcmFuc3BhcmVuY3k7Cit9CisKK3ZvaWQgQ1BXTF9XbmQ6OlNldFRyYW5zcGFyZW5jeShGWF9JTlQzMiBuVHJhbnNwYXJlbmN5KQoreworCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fYUNoaWxkcmVuLkdldFNpemUoKTsgaTxzejsgaSsrKQorCXsKKwkJaWYgKENQV0xfV25kKiBwQ2hpbGQgPSBtX2FDaGlsZHJlbi5HZXRBdChpKSkKKwkJeworCQkJcENoaWxkLT5TZXRUcmFuc3BhcmVuY3koblRyYW5zcGFyZW5jeSk7CisJCX0KKwl9CisKKwltX3NQcml2YXRlUGFyYW0ublRyYW5zcGFyZW5jeSA9IG5UcmFuc3BhcmVuY3k7Cit9CisKK0NQREZfTWF0cml4CUNQV0xfV25kOjpHZXRXaW5kb3dNYXRyaXgoKSBjb25zdAoreworCUNQREZfTWF0cml4IG10ID0gdGhpcy0+R2V0Q2hpbGRUb1Jvb3QoKTsKKworCWlmIChJUFdMX1Byb3ZpZGVyKiBwUHJvdmlkZXIgPSBHZXRQcm92aWRlcigpKQorCXsKKwkJbXQuQ29uY2F0KHBQcm92aWRlci0+R2V0V2luZG93TWF0cml4KEdldEF0dGFjaGVkRGF0YSgpKSk7CisJCXJldHVybiBtdDsKKwl9CisKKy8qCisJaWYgKENSZWFkZXJfQXBwKiBwQXBwID0gQ1BXTF9Nb2R1bGU6OkdldFJlYWRlckFwcCgpKQorCQlpZiAoQ1JlYWRlcl9Eb2N1bWVudCogcERvY3VtZW50ID0gcEFwcC0+R2V0Q3VycmVudERvY3VtZW50KCkpCisJCQlpZiAoQ1JlYWRlcl9Eb2NWaWV3KiBwRG9jVmlldyA9IHBEb2N1bWVudC0+R2V0Q3VycmVudERvY1ZpZXcoKSkKKwkJCXsKKwkJCQlDUERGX01hdHJpeCBtdFBhZ2VWaWV3OworCQkJCXBEb2NWaWV3LT5HZXRDdXJyZW50TWF0cml4KG10UGFnZVZpZXcpOworCQkJCW10LkNvbmNhdChtdFBhZ2VWaWV3KTsKKwkJCQlyZXR1cm4gbXQ7CisJCQl9CQkKKwkJCQorKi8KKworCXJldHVybiBtdDsKK30KKwordm9pZCBDUFdMX1duZDo6UFdMdG9XbmQoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQsIEZYX0lOVDMyJiB4LCBGWF9JTlQzMiYgeSkgY29uc3QKK3sKKwlDUERGX01hdHJpeCBtdCA9IEdldFdpbmRvd01hdHJpeCgpOworCUNQREZfUG9pbnQgcHQgPSBwb2ludDsKKwltdC5UcmFuc2Zvcm0ocHQueCxwdC55KTsKKwl4ID0gKEZYX0lOVDMyKShwdC54KzAuNSk7CisJeSA9IChGWF9JTlQzMikocHQueSswLjUpOworfQorCitGWF9SRUNUIENQV0xfV25kOjpQV0x0b1duZChjb25zdCBDUERGX1JlY3QgJiByZWN0KSBjb25zdAoreworCUNQREZfUmVjdCByY1RlbXAgPSByZWN0OworCUNQREZfTWF0cml4IG10ID0gR2V0V2luZG93TWF0cml4KCk7CisJbXQuVHJhbnNmb3JtUmVjdChyY1RlbXApOwkKKwlyZXR1cm4gRlhfUkVDVCgoRlhfSU5UMzIpKHJjVGVtcC5sZWZ0KzAuNSksIChGWF9JTlQzMikocmNUZW1wLmJvdHRvbSswLjUpLCAoRlhfSU5UMzIpKHJjVGVtcC5yaWdodCswLjUpLCAoRlhfSU5UMzIpKHJjVGVtcC50b3ArMC41KSk7Cit9CisKK0ZYX0hXTkQgQ1BXTF9XbmQ6OkdldEF0dGFjaGVkSFduZCgpIGNvbnN0Cit7CisJcmV0dXJuIG1fc1ByaXZhdGVQYXJhbS5oQXR0YWNoZWRXbmQ7Cit9CisKK0NQREZfUG9pbnQgQ1BXTF9XbmQ6OkNoaWxkVG9QYXJlbnQoY29uc3QgQ1BERl9Qb2ludCYgcG9pbnQpIGNvbnN0Cit7CisJQ1BERl9NYXRyaXggbXQgPSBHZXRDaGlsZE1hdHJpeCgpOworCWlmIChtdC5Jc0lkZW50aXR5KCkpCisJCXJldHVybiBwb2ludDsKKwllbHNlCisJeworCQlDUERGX1BvaW50IHB0ID0gcG9pbnQ7CisJCW10LlRyYW5zZm9ybShwdC54LHB0LnkpOworCQlyZXR1cm4gcHQ7CisJfQorfQorCitDUERGX1JlY3QgQ1BXTF9XbmQ6OkNoaWxkVG9QYXJlbnQoY29uc3QgQ1BERl9SZWN0JiByZWN0KSBjb25zdAoreworCUNQREZfTWF0cml4IG10ID0gR2V0Q2hpbGRNYXRyaXgoKTsKKwlpZiAobXQuSXNJZGVudGl0eSgpKQorCQlyZXR1cm4gcmVjdDsKKwllbHNlCisJeworCQlDUERGX1JlY3QgcmMgPSByZWN0OworCQltdC5UcmFuc2Zvcm1SZWN0KHJjKTsKKwkJcmV0dXJuIHJjOworCX0KK30KKworQ1BERl9Qb2ludCBDUFdMX1duZDo6UGFyZW50VG9DaGlsZChjb25zdCBDUERGX1BvaW50JiBwb2ludCkgY29uc3QKK3sKKwlDUERGX01hdHJpeCBtdCA9IEdldENoaWxkTWF0cml4KCk7CisJaWYgKG10LklzSWRlbnRpdHkoKSkKKwkJcmV0dXJuIHBvaW50OworCWVsc2UKKwl7CisJCW10LlNldFJldmVyc2UobXQpOworCQlDUERGX1BvaW50IHB0ID0gcG9pbnQ7CisJCW10LlRyYW5zZm9ybShwdC54LHB0LnkpOworCQlyZXR1cm4gcHQ7CisJfQorfQorCitDUERGX1JlY3QgQ1BXTF9XbmQ6OlBhcmVudFRvQ2hpbGQoY29uc3QgQ1BERl9SZWN0JiByZWN0KSBjb25zdAoreworCUNQREZfTWF0cml4IG10ID0gR2V0Q2hpbGRNYXRyaXgoKTsKKwlpZiAobXQuSXNJZGVudGl0eSgpKQorCQlyZXR1cm4gcmVjdDsKKwllbHNlCisJeworCQltdC5TZXRSZXZlcnNlKG10KTsKKwkJQ1BERl9SZWN0IHJjID0gcmVjdDsKKwkJbXQuVHJhbnNmb3JtUmVjdChyYyk7CisJCXJldHVybiByYzsKKwl9Cit9CisKK0NQREZfTWF0cml4IENQV0xfV25kOjpHZXRDaGlsZFRvUm9vdCgpIGNvbnN0Cit7CisJQ1BERl9NYXRyaXggbXQoMSwwLDAsMSwwLDApOworCQorCWlmIChIYXNGbGFnKFBXU19DSElMRCkpCisJeworCQljb25zdCBDUFdMX1duZCogcFBhcmVudCA9IHRoaXM7CisJCXdoaWxlIChwUGFyZW50KQorCQl7CisJCQltdC5Db25jYXQocFBhcmVudC0+R2V0Q2hpbGRNYXRyaXgoKSk7CisJCQlwUGFyZW50ID0gcFBhcmVudC0+R2V0UGFyZW50V2luZG93KCk7CisJCX0KKwl9CisKKwlyZXR1cm4gbXQ7Cit9CisKK0NQREZfTWF0cml4IENQV0xfV25kOjpHZXRDaGlsZE1hdHJpeCgpIGNvbnN0Cit7CisJaWYgKEhhc0ZsYWcoUFdTX0NISUxEKSkKKwkJcmV0dXJuIG1fc1ByaXZhdGVQYXJhbS5tdENoaWxkOworCisJcmV0dXJuIENQREZfTWF0cml4KDEsMCwwLDEsMCwwKTsKK30KKwordm9pZCBDUFdMX1duZDo6U2V0Q2hpbGRNYXRyaXgoY29uc3QgQ1BERl9NYXRyaXgmIG10KQoreworCW1fc1ByaXZhdGVQYXJhbS5tdENoaWxkID0gbXQ7Cit9CisKK2NvbnN0IENQV0xfV25kKglDUFdMX1duZDo6R2V0Rm9jdXNlZCgpIGNvbnN0Cit7CisJaWYgKENQV0xfTXNnQ29udHJvbCAqIHBNc2dDdHJsID0gR2V0TXNnQ29udHJvbCgpKQorCXsKKwkJcmV0dXJuIHBNc2dDdHJsLT5tX3BNYWluS2V5Ym9hcmRXbmQ7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgQ1BXTF9XbmQ6OkVuYWJsZVdpbmRvdyhGWF9CT09MIGJFbmFibGUpCit7CisJaWYgKG1fYkVuYWJsZWQgIT0gYkVuYWJsZSkKKwl7CisJCWZvciAoRlhfSU5UMzIgaT0wLHN6PW1fYUNoaWxkcmVuLkdldFNpemUoKTsgaTxzejsgaSsrKQorCQl7CisJCQlpZiAoQ1BXTF9XbmQqIHBDaGlsZCA9IG1fYUNoaWxkcmVuLkdldEF0KGkpKQorCQkJeworCQkJCXBDaGlsZC0+RW5hYmxlV2luZG93KGJFbmFibGUpOworCQkJfQorCQl9CisKKwkJdGhpcy0+bV9iRW5hYmxlZCA9IGJFbmFibGU7CisKKwkJaWYgKGJFbmFibGUpCisJCQl0aGlzLT5PbkVuYWJsZWQoKTsKKwkJZWxzZQorCQkJdGhpcy0+T25EaXNhYmxlZCgpOworCX0KK30KKworRlhfQk9PTCBDUFdMX1duZDo6SXNFbmFibGVkKCkKK3sKKwlyZXR1cm4gbV9iRW5hYmxlZDsKK30KKwordm9pZCBDUFdMX1duZDo6T25FbmFibGVkKCkKK3sKK30KKwordm9pZCBDUFdMX1duZDo6T25EaXNhYmxlZCgpCit7Cit9CisKK0ZYX0JPT0wgQ1BXTF9XbmQ6OklzQ1RSTHByZXNzZWQoRlhfRFdPUkQgbkZsYWcpIGNvbnN0Cit7CisJaWYgKElGWF9TeXN0ZW1IYW5kbGVyKiBwU3lzdGVtSGFuZGxlciA9IEdldFN5c3RlbUhhbmRsZXIoKSkKKwl7CisJCXJldHVybiBwU3lzdGVtSGFuZGxlci0+SXNDVFJMS2V5RG93bihuRmxhZyk7CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MCUNQV0xfV25kOjpJc1NISUZUcHJlc3NlZChGWF9EV09SRCBuRmxhZykgY29uc3QKK3sKKwlpZiAoSUZYX1N5c3RlbUhhbmRsZXIqIHBTeXN0ZW1IYW5kbGVyID0gR2V0U3lzdGVtSGFuZGxlcigpKQorCXsKKwkJcmV0dXJuIHBTeXN0ZW1IYW5kbGVyLT5Jc1NISUZUS2V5RG93bihuRmxhZyk7CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCitGWF9CT09MCUNQV0xfV25kOjpJc0FMVHByZXNzZWQoRlhfRFdPUkQgbkZsYWcpIGNvbnN0Cit7CisJaWYgKElGWF9TeXN0ZW1IYW5kbGVyKiBwU3lzdGVtSGFuZGxlciA9IEdldFN5c3RlbUhhbmRsZXIoKSkKKwl7CisJCXJldHVybiBwU3lzdGVtSGFuZGxlci0+SXNBTFRLZXlEb3duKG5GbGFnKTsKKwl9CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK0ZYX0JPT0wJQ1BXTF9XbmQ6OklzSU5TRVJUcHJlc3NlZChGWF9EV09SRCBuRmxhZykgY29uc3QKK3sKKwlpZiAoSUZYX1N5c3RlbUhhbmRsZXIqIHBTeXN0ZW1IYW5kbGVyID0gR2V0U3lzdGVtSGFuZGxlcigpKQorCXsKKwkJcmV0dXJuIHBTeXN0ZW1IYW5kbGVyLT5Jc0lOU0VSVEtleURvd24obkZsYWcpOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKwpkaWZmIC0tZ2l0IGEvZnBkZnNkay9zcmMvcmVzb3VyY2UuaCBiL2ZwZGZzZGsvc3JjL3Jlc291cmNlLmgKaW5kZXggZTk3ZDFkNS4uYjU4ZjA5MiAxMDA2NDQKLS0tIGEvZnBkZnNkay9zcmMvcmVzb3VyY2UuaAorKysgYi9mcGRmc2RrL3NyYy9yZXNvdXJjZS5oCkBAIC0xLDIxICsxLDIxIEBACi0vLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4NCi0gDQotLy8gT3JpZ2luYWwgY29kZSBjb3B5cmlnaHQgMjAxNCBGb3hpdCBTb2Z0d2FyZSBJbmMuIGh0dHA6Ly93d3cuZm94aXRzb2Z0d2FyZS5jb20NCi0NCi0vL3t7Tk9fREVQRU5ERU5DSUVTfX0NCi0vLyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBnZW5lcmF0ZWQgaW5jbHVkZSBmaWxlLg0KLS8vIFVzZWQgYnkgZnBkZnNka2RsbC5yYw0KLS8vDQotDQotLy8gTmV4dCBkZWZhdWx0IHZhbHVlcyBmb3IgbmV3IG9iamVjdHMNCi0vLyANCi0jaWZkZWYgQVBTVFVESU9fSU5WT0tFRA0KLSNpZm5kZWYgQVBTVFVESU9fUkVBRE9OTFlfU1lNQk9MUw0KLSNkZWZpbmUgX0FQU19ORVhUX1JFU09VUkNFX1ZBTFVFICAgICAgICAxMDQNCi0jZGVmaW5lIF9BUFNfTkVYVF9DT01NQU5EX1ZBTFVFICAgICAgICAgNDAwMDENCi0jZGVmaW5lIF9BUFNfTkVYVF9DT05UUk9MX1ZBTFVFICAgICAgICAgMTAwMA0KLSNkZWZpbmUgX0FQU19ORVhUX1NZTUVEX1ZBTFVFICAgICAgICAgICAxMDENCi0jZW5kaWYNCi0jZW5kaWYNCisvLyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisgCisvLyBPcmlnaW5hbCBjb2RlIGNvcHlyaWdodCAyMDE0IEZveGl0IFNvZnR3YXJlIEluYy4gaHR0cDovL3d3dy5mb3hpdHNvZnR3YXJlLmNvbQorCisvL3t7Tk9fREVQRU5ERU5DSUVTfX0KKy8vIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIGdlbmVyYXRlZCBpbmNsdWRlIGZpbGUuCisvLyBVc2VkIGJ5IGZwZGZzZGtkbGwucmMKKy8vCisKKy8vIE5leHQgZGVmYXVsdCB2YWx1ZXMgZm9yIG5ldyBvYmplY3RzCisvLyAKKyNpZmRlZiBBUFNUVURJT19JTlZPS0VECisjaWZuZGVmIEFQU1RVRElPX1JFQURPTkxZX1NZTUJPTFMKKyNkZWZpbmUgX0FQU19ORVhUX1JFU09VUkNFX1ZBTFVFICAgICAgICAxMDQKKyNkZWZpbmUgX0FQU19ORVhUX0NPTU1BTkRfVkFMVUUgICAgICAgICA0MDAwMQorI2RlZmluZSBfQVBTX05FWFRfQ09OVFJPTF9WQUxVRSAgICAgICAgIDEwMDAKKyNkZWZpbmUgX0FQU19ORVhUX1NZTUVEX1ZBTFVFICAgICAgICAgICAxMDEKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9zYW1wbGVzL3BkZml1bV90ZXN0LmNjIGIvc2FtcGxlcy9wZGZpdW1fdGVzdC5jYwppbmRleCA2N2MxNWUwLi4wNjc5OWY2IDEwMDY0NAotLS0gYS9zYW1wbGVzL3BkZml1bV90ZXN0LmNjCisrKyBiL3NhbXBsZXMvcGRmaXVtX3Rlc3QuY2MKQEAgLTEsMzA5ICsxLDMwOSBAQAotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUNCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLQ0KLSNpbmNsdWRlIDxsaW1pdHMuaD4NCi0jaW5jbHVkZSA8c3RkaW8uaD4NCi0jaW5jbHVkZSA8c3RkbGliLmg+DQotI2luY2x1ZGUgPHN0cmluZy5oPg0KLQ0KLSNpbmNsdWRlIDxsaXN0Pg0KLSNpbmNsdWRlIDxzdHJpbmc+DQotI2luY2x1ZGUgPHV0aWxpdHk+DQotDQotI2luY2x1ZGUgImZwZGZzZGsvaW5jbHVkZS9mcGRmX2RhdGFhdmFpbC5oIg0KLSNpbmNsdWRlICJmcGRmc2RrL2luY2x1ZGUvZnBkZl9leHQuaCINCi0jaW5jbHVkZSAiZnBkZnNkay9pbmNsdWRlL2ZwZGZmb3JtZmlsbC5oIg0KLSNpbmNsdWRlICJmcGRmc2RrL2luY2x1ZGUvZnBkZnRleHQuaCINCi0jaW5jbHVkZSAiZnBkZnNkay9pbmNsdWRlL2ZwZGZ2aWV3LmgiDQotI2luY2x1ZGUgInY4L2luY2x1ZGUvdjguaCINCi0NCi0jaWZkZWYgX1dJTjMyDQotICAjZGVmaW5lIHNucHJpbnRmIF9zbnByaW50Zg0KLSAgLyogaW4gV2luZG93cywgcmIgZm9yIG9wZW4gYW5kIHJlYWQgYmluYXJ5IGZpbGUgKi8NCi0gICNkZWZpbmUgRk9QRU5fUkVBRCAicmIiDQotI2Vsc2UNCi0gICNkZWZpbmUgRk9QRU5fUkVBRCAiciINCi0jZW5kaWYNCi0NCi1zdGF0aWMgdm9pZCBXcml0ZVBwbShjb25zdCBjaGFyKiBwZGZfbmFtZSwgaW50IG51bSwNCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBidWZmZXIsIGludCBzdHJpZGUsIGludCB3aWR0aCwgaW50IGhlaWdodCkgew0KLSAgaWYgKHN0cmlkZSA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApDQotICAgIHJldHVybjsNCi0gIGlmIChoZWlnaHQgPiAwICYmIHdpZHRoID4gSU5UX01BWCAvIGhlaWdodCkNCi0gICAgcmV0dXJuOw0KLSAgaW50IG91dF9sZW4gPSB3aWR0aCAqIGhlaWdodDsNCi0gIGlmIChvdXRfbGVuID4gSU5UX01BWCAvIDMpDQotICAgIHJldHVybjsNCi0gIG91dF9sZW4gKj0gMzsNCi0NCi0gIGNoYXIgZmlsZW5hbWVbMjU2XTsNCi0gIHNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMuJWQucHBtIiwgcGRmX25hbWUsIG51bSk7DQotICBGSUxFKiBmcCA9IGZvcGVuKGZpbGVuYW1lLCAidyIpOw0KLSAgaWYgKCFmcCkNCi0gICAgcmV0dXJuOw0KLSAgZnByaW50ZihmcCwgIlA2XG4jIFBERiB0ZXN0IHJlbmRlclxuJWQgJWRcbjI1NVxuIiwgd2lkdGgsIGhlaWdodCk7DQotICAvLyBTb3VyY2UgZGF0YSBpcyBCLCBHLCBSLCB1bnVzZWQuDQotICAvLyBEZXN0IGRhdGEgaXMgUiwgRywgQi4NCi0gIGNoYXIqIHJlc3VsdCA9IG5ldyBjaGFyW291dF9sZW5dOw0KLSAgaWYgKHJlc3VsdCkgew0KLSAgICBmb3IgKGludCBoID0gMDsgaCA8IGhlaWdodDsgKytoKSB7DQotICAgICAgY29uc3QgY2hhciogc3JjX2xpbmUgPSBidWZmZXIgKyAoc3RyaWRlICogaCk7DQotICAgICAgY2hhciogZGVzdF9saW5lID0gcmVzdWx0ICsgKHdpZHRoICogaCAqIDMpOw0KLSAgICAgIGZvciAoaW50IHcgPSAwOyB3IDwgd2lkdGg7ICsrdykgew0KLSAgICAgICAgLy8gUg0KLSAgICAgICAgZGVzdF9saW5lW3cgKiAzXSA9IHNyY19saW5lWyh3ICogNCkgKyAyXTsNCi0gICAgICAgIC8vIEcNCi0gICAgICAgIGRlc3RfbGluZVsodyAqIDMpICsgMV0gPSBzcmNfbGluZVsodyAqIDQpICsgMV07DQotICAgICAgICAvLyBCDQotICAgICAgICBkZXN0X2xpbmVbKHcgKiAzKSArIDJdID0gc3JjX2xpbmVbdyAqIDRdOw0KLSAgICAgIH0NCi0gICAgfQ0KLSAgICBmd3JpdGUocmVzdWx0LCBvdXRfbGVuLCAxLCBmcCk7DQotICAgIGRlbGV0ZSBbXSByZXN1bHQ7DQotICB9DQotICBmY2xvc2UoZnApOw0KLX0NCi0NCi1pbnQgRm9ybV9BbGVydChJUERGX0pTUExBVEZPUk0qLCBGUERGX1dJREVTVFJJTkcsIEZQREZfV0lERVNUUklORywgaW50LCBpbnQpIHsNCi0gIHByaW50ZigiRm9ybV9BbGVydCBjYWxsZWQuXG4iKTsNCi0gIHJldHVybiAwOw0KLX0NCi0NCi12b2lkIFVuc3VwcG9ydGVkX0hhbmRsZXIoVU5TVVBQT1JUX0lORk8qLCBpbnQgdHlwZSkgew0KLSAgc3RkOjpzdHJpbmcgZmVhdHVyZSA9ICJVbmtub3duIjsNCi0gIHN3aXRjaCAodHlwZSkgew0KLSAgICBjYXNlIEZQREZfVU5TUF9ET0NfWEZBRk9STToNCi0gICAgICBmZWF0dXJlID0gIlhGQSI7DQotICAgICAgYnJlYWs7DQotICAgIGNhc2UgRlBERl9VTlNQX0RPQ19QT1JUQUJMRUNPTExFQ1RJT046DQotICAgICAgZmVhdHVyZSA9ICJQb3J0Zm9saW9zX1BhY2thZ2VzIjsNCi0gICAgICBicmVhazsNCi0gICAgY2FzZSBGUERGX1VOU1BfRE9DX0FUVEFDSE1FTlQ6DQotICAgIGNhc2UgRlBERl9VTlNQX0FOTk9UX0FUVEFDSE1FTlQ6DQotICAgICAgZmVhdHVyZSA9ICJBdHRhY2htZW50IjsNCi0gICAgICBicmVhazsNCi0gICAgY2FzZSBGUERGX1VOU1BfRE9DX1NFQ1VSSVRZOg0KLSAgICAgIGZlYXR1cmUgPSAiUmlnaHRzX01hbmFnZW1lbnQiOw0KLSAgICAgIGJyZWFrOw0KLSAgICBjYXNlIEZQREZfVU5TUF9ET0NfU0hBUkVEUkVWSUVXOg0KLSAgICAgIGZlYXR1cmUgPSAiU2hhcmVkX1JldmlldyI7DQotICAgICAgYnJlYWs7DQotICAgIGNhc2UgRlBERl9VTlNQX0RPQ19TSEFSRURGT1JNX0FDUk9CQVQ6DQotICAgIGNhc2UgRlBERl9VTlNQX0RPQ19TSEFSRURGT1JNX0ZJTEVTWVNURU06DQotICAgIGNhc2UgRlBERl9VTlNQX0RPQ19TSEFSRURGT1JNX0VNQUlMOg0KLSAgICAgIGZlYXR1cmUgPSAiU2hhcmVkX0Zvcm0iOw0KLSAgICAgIGJyZWFrOw0KLSAgICBjYXNlIEZQREZfVU5TUF9BTk5PVF8zREFOTk9UOg0KLSAgICAgIGZlYXR1cmUgPSAiM0QiOw0KLSAgICAgIGJyZWFrOw0KLSAgICBjYXNlIEZQREZfVU5TUF9BTk5PVF9NT1ZJRToNCi0gICAgICBmZWF0dXJlID0gIk1vdmllIjsNCi0gICAgICBicmVhazsNCi0gICAgY2FzZSBGUERGX1VOU1BfQU5OT1RfU09VTkQ6DQotICAgICAgZmVhdHVyZSA9ICJTb3VuZCI7DQotICAgICAgYnJlYWs7DQotICAgIGNhc2UgRlBERl9VTlNQX0FOTk9UX1NDUkVFTl9NRURJQToNCi0gICAgY2FzZSBGUERGX1VOU1BfQU5OT1RfU0NSRUVOX1JJQ0hNRURJQToNCi0gICAgICBmZWF0dXJlID0gIlNjcmVlbiI7DQotICAgICAgYnJlYWs7DQotICAgIGNhc2UgRlBERl9VTlNQX0FOTk9UX1NJRzoNCi0gICAgICBmZWF0dXJlID0gIkRpZ2l0YWxfU2lnbmF0dXJlIjsNCi0gICAgICBicmVhazsNCi0gIH0NCi0gIHByaW50ZigiVW5zdXBwb3J0ZWQgZmVhdHVyZTogJXMuXG4iLCBmZWF0dXJlLmNfc3RyKCkpOw0KLX0NCi0NCi1ib29sIFBhcnNlQ29tbWFuZExpbmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSwgYm9vbCogd3JpdGVfaW1hZ2VzLA0KLSAgICAgICAgICAgICAgICAgICAgICBzdGQ6Omxpc3Q8Y29uc3QgY2hhcio+KiBmaWxlcykgew0KLSAgKndyaXRlX2ltYWdlcyA9IGZhbHNlOw0KLSAgZmlsZXMtPmNsZWFyKCk7DQotDQotICBpbnQgY3VyX2FyZyA9IDE7DQotICBpZiAoY3VyX2FyZyA8IGFyZ2MgJiYNCi0gICAgICBzdHJjbXAoYXJndltjdXJfYXJnXSwgIi0td3JpdGVfaW1hZ2VzIikgPT0gMCkgew0KLSAgICAqd3JpdGVfaW1hZ2VzID0gdHJ1ZTsNCi0gICAgY3VyX2FyZysrOw0KLSAgfQ0KLQ0KLSAgaWYgKGN1cl9hcmcgPj0gYXJnYykNCi0gICAgcmV0dXJuIGZhbHNlOw0KLQ0KLSAgZm9yIChpbnQgaSA9IGN1cl9hcmc7IGkgPCBhcmdjOyBpKyspDQotICAgIGZpbGVzLT5wdXNoX2JhY2soYXJndltpXSk7DQotDQotICByZXR1cm4gdHJ1ZTsNCi19DQotDQotY2xhc3MgVGVzdExvYWRlciB7DQotIHB1YmxpYzoNCi0gIFRlc3RMb2FkZXIoY29uc3QgY2hhciogcEJ1Ziwgc2l6ZV90IGxlbik7DQotDQotICBjb25zdCBjaGFyKiBtX3BCdWY7DQotICBzaXplX3QgbV9MZW47DQotfTsNCi0NCi1UZXN0TG9hZGVyOjpUZXN0TG9hZGVyKGNvbnN0IGNoYXIqIHBCdWYsIHNpemVfdCBsZW4pDQotICAgIDogbV9wQnVmKHBCdWYpLCBtX0xlbihsZW4pIHsNCi19DQotDQotaW50IEdldF9CbG9jayh2b2lkKiBwYXJhbSwgdW5zaWduZWQgbG9uZyBwb3MsIHVuc2lnbmVkIGNoYXIqIHBCdWYsDQotICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNpemUpIHsNCi0gIFRlc3RMb2FkZXIqIHBMb2FkZXIgPSAoVGVzdExvYWRlciopIHBhcmFtOw0KLSAgaWYgKHBvcyArIHNpemUgPCBwb3MgfHwgcG9zICsgc2l6ZSA+IHBMb2FkZXItPm1fTGVuKSByZXR1cm4gMDsNCi0gIG1lbWNweShwQnVmLCBwTG9hZGVyLT5tX3BCdWYgKyBwb3MsIHNpemUpOw0KLSAgcmV0dXJuIDE7DQotfQ0KLQ0KLWJvb2wgSXNfRGF0YV9BdmFpbChGWF9GSUxFQVZBSUwqIHBUaGlzLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkgew0KLSAgcmV0dXJuIHRydWU7DQotfQ0KLQ0KLXZvaWQgQWRkX1NlZ21lbnQoRlhfRE9XTkxPQURISU5UUyogcFRoaXMsIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKSB7DQotfQ0KLQ0KLXZvaWQgUmVuZGVyUGRmKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHBCdWYsIHNpemVfdCBsZW4sDQotICAgICAgICAgICAgICAgYm9vbCB3cml0ZV9pbWFnZXMpIHsNCi0gIHByaW50ZigiUmVuZGVyaW5nIFBERiBmaWxlICVzLlxuIiwgbmFtZSk7DQotDQotICBJUERGX0pTUExBVEZPUk0gcGxhdGZvcm1fY2FsbGJhY2tzOw0KLSAgbWVtc2V0KCZwbGF0Zm9ybV9jYWxsYmFja3MsICdcMCcsIHNpemVvZihwbGF0Zm9ybV9jYWxsYmFja3MpKTsNCi0gIHBsYXRmb3JtX2NhbGxiYWNrcy52ZXJzaW9uID0gMTsNCi0gIHBsYXRmb3JtX2NhbGxiYWNrcy5hcHBfYWxlcnQgPSBGb3JtX0FsZXJ0Ow0KLQ0KLSAgRlBERl9GT1JNRklMTElORk8gZm9ybV9jYWxsYmFja3M7DQotICBtZW1zZXQoJmZvcm1fY2FsbGJhY2tzLCAnXDAnLCBzaXplb2YoZm9ybV9jYWxsYmFja3MpKTsNCi0gIGZvcm1fY2FsbGJhY2tzLnZlcnNpb24gPSAxOw0KLSAgZm9ybV9jYWxsYmFja3MubV9wSnNQbGF0Zm9ybSA9ICZwbGF0Zm9ybV9jYWxsYmFja3M7DQotDQotICBUZXN0TG9hZGVyIGxvYWRlcihwQnVmLCBsZW4pOw0KLQ0KLSAgRlBERl9GSUxFQUNDRVNTIGZpbGVfYWNjZXNzOw0KLSAgbWVtc2V0KCZmaWxlX2FjY2VzcywgJ1wwJywgc2l6ZW9mKGZpbGVfYWNjZXNzKSk7DQotICBmaWxlX2FjY2Vzcy5tX0ZpbGVMZW4gPSBsZW47DQotICBmaWxlX2FjY2Vzcy5tX0dldEJsb2NrID0gR2V0X0Jsb2NrOw0KLSAgZmlsZV9hY2Nlc3MubV9QYXJhbSA9ICZsb2FkZXI7DQotDQotICBGWF9GSUxFQVZBSUwgZmlsZV9hdmFpbDsNCi0gIG1lbXNldCgmZmlsZV9hdmFpbCwgJ1wwJywgc2l6ZW9mKGZpbGVfYXZhaWwpKTsNCi0gIGZpbGVfYXZhaWwudmVyc2lvbiA9IDE7DQotICBmaWxlX2F2YWlsLklzRGF0YUF2YWlsID0gSXNfRGF0YV9BdmFpbDsNCi0NCi0gIEZYX0RPV05MT0FESElOVFMgaGludHM7DQotICBtZW1zZXQoJmhpbnRzLCAnXDAnLCBzaXplb2YoaGludHMpKTsNCi0gIGhpbnRzLnZlcnNpb24gPSAxOw0KLSAgaGludHMuQWRkU2VnbWVudCA9IEFkZF9TZWdtZW50Ow0KLQ0KLSAgRlBERl9ET0NVTUVOVCBkb2M7DQotICBGUERGX0FWQUlMIHBkZl9hdmFpbCA9IEZQREZBdmFpbF9DcmVhdGUoJmZpbGVfYXZhaWwsICZmaWxlX2FjY2Vzcyk7DQotDQotICAodm9pZCkgRlBERkF2YWlsX0lzRG9jQXZhaWwocGRmX2F2YWlsLCAmaGludHMpOw0KLQ0KLSAgaWYgKCFGUERGQXZhaWxfSXNMaW5lYXJpemVkKHBkZl9hdmFpbCkpIHsNCi0gICAgcHJpbnRmKCJOb24tbGluZWFyaXplZCBwYXRoLi4uXG4iKTsNCi0gICAgZG9jID0gRlBERl9Mb2FkQ3VzdG9tRG9jdW1lbnQoJmZpbGVfYWNjZXNzLCBOVUxMKTsNCi0gIH0gZWxzZSB7DQotICAgIHByaW50ZigiTGluZWFyaXplZCBwYXRoLi4uXG4iKTsNCi0gICAgZG9jID0gRlBERkF2YWlsX0dldERvY3VtZW50KHBkZl9hdmFpbCwgTlVMTCk7DQotICB9DQotDQotICAodm9pZCkgRlBERl9HZXREb2NQZXJtaXNzaW9ucyhkb2MpOw0KLSAgKHZvaWQpIEZQREZBdmFpbF9Jc0Zvcm1BdmFpbChwZGZfYXZhaWwsICZoaW50cyk7DQotDQotICBGUERGX0ZPUk1IQU5ETEUgZm9ybSA9IEZQREZET0NfSW5pdEZvcm1GaWxsRW52aXJvdW1lbnQoZG9jLCAmZm9ybV9jYWxsYmFja3MpOw0KLSAgRlBERl9TZXRGb3JtRmllbGRIaWdobGlnaHRDb2xvcihmb3JtLCAwLCAweEZGRTRERCk7DQotICBGUERGX1NldEZvcm1GaWVsZEhpZ2hsaWdodEFscGhhKGZvcm0sIDEwMCk7DQotDQotICBpbnQgZmlyc3RfcGFnZSA9IEZQREZBdmFpbF9HZXRGaXJzdFBhZ2VOdW0oZG9jKTsNCi0gICh2b2lkKSBGUERGQXZhaWxfSXNQYWdlQXZhaWwocGRmX2F2YWlsLCBmaXJzdF9wYWdlLCAmaGludHMpOw0KLQ0KLSAgaW50IHBhZ2VfY291bnQgPSBGUERGX0dldFBhZ2VDb3VudChkb2MpOw0KLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYWdlX2NvdW50OyArK2kpIHsNCi0gICAgKHZvaWQpIEZQREZBdmFpbF9Jc1BhZ2VBdmFpbChwZGZfYXZhaWwsIGksICZoaW50cyk7DQotICB9DQotDQotICBGT1JNX0RvRG9jdW1lbnRKU0FjdGlvbihmb3JtKTsNCi0gIEZPUk1fRG9Eb2N1bWVudE9wZW5BY3Rpb24oZm9ybSk7DQotDQotICBmb3IgKGludCBpID0gMDsgaSA8IHBhZ2VfY291bnQ7ICsraSkgew0KLSAgICBGUERGX1BBR0UgcGFnZSA9IEZQREZfTG9hZFBhZ2UoZG9jLCBpKTsNCi0gICAgRlBERl9URVhUUEFHRSB0ZXh0X3BhZ2UgPSBGUERGVGV4dF9Mb2FkUGFnZShwYWdlKTsNCi0gICAgRk9STV9PbkFmdGVyTG9hZFBhZ2UocGFnZSwgZm9ybSk7DQotICAgIEZPUk1fRG9QYWdlQUFjdGlvbihwYWdlLCBmb3JtLCBGUERGUEFHRV9BQUNUSU9OX09QRU4pOw0KLQ0KLSAgICBpbnQgd2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KEZQREZfR2V0UGFnZVdpZHRoKHBhZ2UpKTsNCi0gICAgaW50IGhlaWdodCA9IHN0YXRpY19jYXN0PGludD4oRlBERl9HZXRQYWdlSGVpZ2h0KHBhZ2UpKTsNCi0gICAgRlBERl9CSVRNQVAgYml0bWFwID0gRlBERkJpdG1hcF9DcmVhdGUod2lkdGgsIGhlaWdodCwgMCk7DQotICAgIEZQREZCaXRtYXBfRmlsbFJlY3QoYml0bWFwLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCAyNTUsIDI1NSwgMjU1LCAyNTUpOw0KLQ0KLSAgICBGUERGX1JlbmRlclBhZ2VCaXRtYXAoYml0bWFwLCBwYWdlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCAwLCAwKTsNCi0gICAgRlBERl9GRkxEcmF3KGZvcm0sIGJpdG1hcCwgcGFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCwgMCwgMCk7DQotICAgIGlmICh3cml0ZV9pbWFnZXMpIHsNCi0gICAgICBjb25zdCBjaGFyKiBidWZmZXIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigNCi0gICAgICAgICAgRlBERkJpdG1hcF9HZXRCdWZmZXIoYml0bWFwKSk7DQotICAgICAgaW50IHN0cmlkZSA9IEZQREZCaXRtYXBfR2V0U3RyaWRlKGJpdG1hcCk7DQotICAgICAgV3JpdGVQcG0obmFtZSwgaSwgYnVmZmVyLCBzdHJpZGUsIHdpZHRoLCBoZWlnaHQpOw0KLSAgICB9DQotDQotICAgIEZQREZCaXRtYXBfRGVzdHJveShiaXRtYXApOw0KLQ0KLSAgICBGT1JNX0RvUGFnZUFBY3Rpb24ocGFnZSwgZm9ybSwgRlBERlBBR0VfQUFDVElPTl9DTE9TRSk7DQotICAgIEZPUk1fT25CZWZvcmVDbG9zZVBhZ2UocGFnZSwgZm9ybSk7DQotICAgIEZQREZUZXh0X0Nsb3NlUGFnZSh0ZXh0X3BhZ2UpOw0KLSAgICBGUERGX0Nsb3NlUGFnZShwYWdlKTsNCi0gIH0NCi0NCi0gIEZPUk1fRG9Eb2N1bWVudEFBY3Rpb24oZm9ybSwgRlBERkRPQ19BQUNUSU9OX1dDKTsNCi0gIEZQREZET0NfRXhpdEZvcm1GaWxsRW52aXJvdW1lbnQoZm9ybSk7DQotICBGUERGX0Nsb3NlRG9jdW1lbnQoZG9jKTsNCi0gIEZQREZBdmFpbF9EZXN0cm95KHBkZl9hdmFpbCk7DQotDQotICBwcmludGYoIkxvYWRlZCwgcGFyc2VkIGFuZCByZW5kZXJlZCAlZCBwYWdlcy5cbiIsIHBhZ2VfY291bnQpOw0KLX0NCi0NCi1pbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKSB7DQotICB2ODo6Vjg6OkluaXRpYWxpemVJQ1UoKTsNCi0gIGJvb2wgd3JpdGVfaW1hZ2VzID0gZmFsc2U7DQotICBzdGQ6Omxpc3Q8Y29uc3QgY2hhcio+IGZpbGVzOw0KLSAgaWYgKCFQYXJzZUNvbW1hbmRMaW5lKGFyZ2MsIGFyZ3YsICZ3cml0ZV9pbWFnZXMsICZmaWxlcykpIHsNCi0gICAgcHJpbnRmKCJVc2FnZSBpczogdGVzdCBbLS13cml0ZV9pbWFnZXNdIC9wYXRoL3RvL3BkZlxuIik7DQotICAgIHByaW50ZigiLS13cml0ZV9pbWFnZXMgLSB0byB3cml0ZSBwYWdlIGltYWdlcyA8cGRmLW5hbWU+LjxwYWdlLW51bWJlcj4ucHBtXG4iKTsNCi0gICAgcmV0dXJuIDE7DQotICB9DQotDQotICBGUERGX0luaXRMaWJyYXJ5KE5VTEwpOw0KLQ0KLSAgVU5TVVBQT1JUX0lORk8gdW5zdXBwb3JlZF9pbmZvOw0KLSAgbWVtc2V0KCZ1bnN1cHBvcmVkX2luZm8sICdcMCcsIHNpemVvZih1bnN1cHBvcmVkX2luZm8pKTsNCi0gIHVuc3VwcG9yZWRfaW5mby52ZXJzaW9uID0gMTsNCi0gIHVuc3VwcG9yZWRfaW5mby5GU0RLX1VuU3VwcG9ydF9IYW5kbGVyID0gVW5zdXBwb3J0ZWRfSGFuZGxlcjsNCi0NCi0gIEZTREtfU2V0VW5TcE9ialByb2Nlc3NIYW5kbGVyKCZ1bnN1cHBvcmVkX2luZm8pOw0KLQ0KLSAgd2hpbGUgKCFmaWxlcy5lbXB0eSgpKSB7DQotICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lID0gZmlsZXMuZnJvbnQoKTsNCi0gICAgZmlsZXMucG9wX2Zyb250KCk7DQotICAgIEZJTEUqIGZpbGUgPSBmb3BlbihmaWxlbmFtZSwgRk9QRU5fUkVBRCk7DQotICAgIGlmICghZmlsZSkgew0KLSAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW46ICVzXG4iLCBmaWxlbmFtZSk7DQotICAgICAgY29udGludWU7DQotICAgIH0NCi0gICAgKHZvaWQpIGZzZWVrKGZpbGUsIDAsIFNFRUtfRU5EKTsNCi0gICAgc2l6ZV90IGxlbiA9IGZ0ZWxsKGZpbGUpOw0KLSAgICAodm9pZCkgZnNlZWsoZmlsZSwgMCwgU0VFS19TRVQpOw0KLSAgICBjaGFyKiBwQnVmID0gKGNoYXIqKSBtYWxsb2MobGVuKTsNCi0gICAgc2l6ZV90IHJldCA9IGZyZWFkKHBCdWYsIDEsIGxlbiwgZmlsZSk7DQotICAgICh2b2lkKSBmY2xvc2UoZmlsZSk7DQotICAgIGlmIChyZXQgIT0gbGVuKSB7DQotICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcmVhZDogJXNcbiIsIGZpbGVuYW1lKTsNCi0gICAgfSBlbHNlIHsNCi0gICAgICBSZW5kZXJQZGYoZmlsZW5hbWUsIHBCdWYsIGxlbiwgd3JpdGVfaW1hZ2VzKTsNCi0gICAgfQ0KLSAgICBmcmVlKHBCdWYpOw0KLSAgfQ0KLQ0KLSAgRlBERl9EZXN0cm95TGlicmFyeSgpOw0KLQ0KLSAgcmV0dXJuIDA7DQotfQ0KLQ0KKy8vIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dXRpbGl0eT4KKworI2luY2x1ZGUgImZwZGZzZGsvaW5jbHVkZS9mcGRmX2RhdGFhdmFpbC5oIgorI2luY2x1ZGUgImZwZGZzZGsvaW5jbHVkZS9mcGRmX2V4dC5oIgorI2luY2x1ZGUgImZwZGZzZGsvaW5jbHVkZS9mcGRmZm9ybWZpbGwuaCIKKyNpbmNsdWRlICJmcGRmc2RrL2luY2x1ZGUvZnBkZnRleHQuaCIKKyNpbmNsdWRlICJmcGRmc2RrL2luY2x1ZGUvZnBkZnZpZXcuaCIKKyNpbmNsdWRlICJ2OC9pbmNsdWRlL3Y4LmgiCisKKyNpZmRlZiBfV0lOMzIKKyAgI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyAgLyogaW4gV2luZG93cywgcmIgZm9yIG9wZW4gYW5kIHJlYWQgYmluYXJ5IGZpbGUgKi8KKyAgI2RlZmluZSBGT1BFTl9SRUFEICJyYiIKKyNlbHNlCisgICNkZWZpbmUgRk9QRU5fUkVBRCAiciIKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBXcml0ZVBwbShjb25zdCBjaGFyKiBwZGZfbmFtZSwgaW50IG51bSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGJ1ZmZlciwgaW50IHN0cmlkZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7CisgIGlmIChzdHJpZGUgPCAwIHx8IHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQorICAgIHJldHVybjsKKyAgaWYgKGhlaWdodCA+IDAgJiYgd2lkdGggPiBJTlRfTUFYIC8gaGVpZ2h0KQorICAgIHJldHVybjsKKyAgaW50IG91dF9sZW4gPSB3aWR0aCAqIGhlaWdodDsKKyAgaWYgKG91dF9sZW4gPiBJTlRfTUFYIC8gMykKKyAgICByZXR1cm47CisgIG91dF9sZW4gKj0gMzsKKworICBjaGFyIGZpbGVuYW1lWzI1Nl07CisgIHNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMuJWQucHBtIiwgcGRmX25hbWUsIG51bSk7CisgIEZJTEUqIGZwID0gZm9wZW4oZmlsZW5hbWUsICJ3Iik7CisgIGlmICghZnApCisgICAgcmV0dXJuOworICBmcHJpbnRmKGZwLCAiUDZcbiMgUERGIHRlc3QgcmVuZGVyXG4lZCAlZFxuMjU1XG4iLCB3aWR0aCwgaGVpZ2h0KTsKKyAgLy8gU291cmNlIGRhdGEgaXMgQiwgRywgUiwgdW51c2VkLgorICAvLyBEZXN0IGRhdGEgaXMgUiwgRywgQi4KKyAgY2hhciogcmVzdWx0ID0gbmV3IGNoYXJbb3V0X2xlbl07CisgIGlmIChyZXN1bHQpIHsKKyAgICBmb3IgKGludCBoID0gMDsgaCA8IGhlaWdodDsgKytoKSB7CisgICAgICBjb25zdCBjaGFyKiBzcmNfbGluZSA9IGJ1ZmZlciArIChzdHJpZGUgKiBoKTsKKyAgICAgIGNoYXIqIGRlc3RfbGluZSA9IHJlc3VsdCArICh3aWR0aCAqIGggKiAzKTsKKyAgICAgIGZvciAoaW50IHcgPSAwOyB3IDwgd2lkdGg7ICsrdykgeworICAgICAgICAvLyBSCisgICAgICAgIGRlc3RfbGluZVt3ICogM10gPSBzcmNfbGluZVsodyAqIDQpICsgMl07CisgICAgICAgIC8vIEcKKyAgICAgICAgZGVzdF9saW5lWyh3ICogMykgKyAxXSA9IHNyY19saW5lWyh3ICogNCkgKyAxXTsKKyAgICAgICAgLy8gQgorICAgICAgICBkZXN0X2xpbmVbKHcgKiAzKSArIDJdID0gc3JjX2xpbmVbdyAqIDRdOworICAgICAgfQorICAgIH0KKyAgICBmd3JpdGUocmVzdWx0LCBvdXRfbGVuLCAxLCBmcCk7CisgICAgZGVsZXRlIFtdIHJlc3VsdDsKKyAgfQorICBmY2xvc2UoZnApOworfQorCitpbnQgRm9ybV9BbGVydChJUERGX0pTUExBVEZPUk0qLCBGUERGX1dJREVTVFJJTkcsIEZQREZfV0lERVNUUklORywgaW50LCBpbnQpIHsKKyAgcHJpbnRmKCJGb3JtX0FsZXJ0IGNhbGxlZC5cbiIpOworICByZXR1cm4gMDsKK30KKwordm9pZCBVbnN1cHBvcnRlZF9IYW5kbGVyKFVOU1VQUE9SVF9JTkZPKiwgaW50IHR5cGUpIHsKKyAgc3RkOjpzdHJpbmcgZmVhdHVyZSA9ICJVbmtub3duIjsKKyAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBGUERGX1VOU1BfRE9DX1hGQUZPUk06CisgICAgICBmZWF0dXJlID0gIlhGQSI7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZQREZfVU5TUF9ET0NfUE9SVEFCTEVDT0xMRUNUSU9OOgorICAgICAgZmVhdHVyZSA9ICJQb3J0Zm9saW9zX1BhY2thZ2VzIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRlBERl9VTlNQX0RPQ19BVFRBQ0hNRU5UOgorICAgIGNhc2UgRlBERl9VTlNQX0FOTk9UX0FUVEFDSE1FTlQ6CisgICAgICBmZWF0dXJlID0gIkF0dGFjaG1lbnQiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGUERGX1VOU1BfRE9DX1NFQ1VSSVRZOgorICAgICAgZmVhdHVyZSA9ICJSaWdodHNfTWFuYWdlbWVudCI7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZQREZfVU5TUF9ET0NfU0hBUkVEUkVWSUVXOgorICAgICAgZmVhdHVyZSA9ICJTaGFyZWRfUmV2aWV3IjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRlBERl9VTlNQX0RPQ19TSEFSRURGT1JNX0FDUk9CQVQ6CisgICAgY2FzZSBGUERGX1VOU1BfRE9DX1NIQVJFREZPUk1fRklMRVNZU1RFTToKKyAgICBjYXNlIEZQREZfVU5TUF9ET0NfU0hBUkVERk9STV9FTUFJTDoKKyAgICAgIGZlYXR1cmUgPSAiU2hhcmVkX0Zvcm0iOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGUERGX1VOU1BfQU5OT1RfM0RBTk5PVDoKKyAgICAgIGZlYXR1cmUgPSAiM0QiOworICAgICAgYnJlYWs7CisgICAgY2FzZSBGUERGX1VOU1BfQU5OT1RfTU9WSUU6CisgICAgICBmZWF0dXJlID0gIk1vdmllIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRlBERl9VTlNQX0FOTk9UX1NPVU5EOgorICAgICAgZmVhdHVyZSA9ICJTb3VuZCI7CisgICAgICBicmVhazsKKyAgICBjYXNlIEZQREZfVU5TUF9BTk5PVF9TQ1JFRU5fTUVESUE6CisgICAgY2FzZSBGUERGX1VOU1BfQU5OT1RfU0NSRUVOX1JJQ0hNRURJQToKKyAgICAgIGZlYXR1cmUgPSAiU2NyZWVuIjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRlBERl9VTlNQX0FOTk9UX1NJRzoKKyAgICAgIGZlYXR1cmUgPSAiRGlnaXRhbF9TaWduYXR1cmUiOworICAgICAgYnJlYWs7CisgIH0KKyAgcHJpbnRmKCJVbnN1cHBvcnRlZCBmZWF0dXJlOiAlcy5cbiIsIGZlYXR1cmUuY19zdHIoKSk7Cit9CisKK2Jvb2wgUGFyc2VDb21tYW5kTGluZShpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdLCBib29sKiB3cml0ZV9pbWFnZXMsCisgICAgICAgICAgICAgICAgICAgICAgc3RkOjpsaXN0PGNvbnN0IGNoYXIqPiogZmlsZXMpIHsKKyAgKndyaXRlX2ltYWdlcyA9IGZhbHNlOworICBmaWxlcy0+Y2xlYXIoKTsKKworICBpbnQgY3VyX2FyZyA9IDE7CisgIGlmIChjdXJfYXJnIDwgYXJnYyAmJgorICAgICAgc3RyY21wKGFyZ3ZbY3VyX2FyZ10sICItLXdyaXRlX2ltYWdlcyIpID09IDApIHsKKyAgICAqd3JpdGVfaW1hZ2VzID0gdHJ1ZTsKKyAgICBjdXJfYXJnKys7CisgIH0KKworICBpZiAoY3VyX2FyZyA+PSBhcmdjKQorICAgIHJldHVybiBmYWxzZTsKKworICBmb3IgKGludCBpID0gY3VyX2FyZzsgaSA8IGFyZ2M7IGkrKykKKyAgICBmaWxlcy0+cHVzaF9iYWNrKGFyZ3ZbaV0pOworCisgIHJldHVybiB0cnVlOworfQorCitjbGFzcyBUZXN0TG9hZGVyIHsKKyBwdWJsaWM6CisgIFRlc3RMb2FkZXIoY29uc3QgY2hhciogcEJ1Ziwgc2l6ZV90IGxlbik7CisKKyAgY29uc3QgY2hhciogbV9wQnVmOworICBzaXplX3QgbV9MZW47Cit9OworCitUZXN0TG9hZGVyOjpUZXN0TG9hZGVyKGNvbnN0IGNoYXIqIHBCdWYsIHNpemVfdCBsZW4pCisgICAgOiBtX3BCdWYocEJ1ZiksIG1fTGVuKGxlbikgeworfQorCitpbnQgR2V0X0Jsb2NrKHZvaWQqIHBhcmFtLCB1bnNpZ25lZCBsb25nIHBvcywgdW5zaWduZWQgY2hhciogcEJ1ZiwKKyAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplKSB7CisgIFRlc3RMb2FkZXIqIHBMb2FkZXIgPSAoVGVzdExvYWRlciopIHBhcmFtOworICBpZiAocG9zICsgc2l6ZSA8IHBvcyB8fCBwb3MgKyBzaXplID4gcExvYWRlci0+bV9MZW4pIHJldHVybiAwOworICBtZW1jcHkocEJ1ZiwgcExvYWRlci0+bV9wQnVmICsgcG9zLCBzaXplKTsKKyAgcmV0dXJuIDE7Cit9CisKK2Jvb2wgSXNfRGF0YV9BdmFpbChGWF9GSUxFQVZBSUwqIHBUaGlzLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkgeworICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBZGRfU2VnbWVudChGWF9ET1dOTE9BREhJTlRTKiBwVGhpcywgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUpIHsKK30KKwordm9pZCBSZW5kZXJQZGYoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogcEJ1Ziwgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgIGJvb2wgd3JpdGVfaW1hZ2VzKSB7CisgIHByaW50ZigiUmVuZGVyaW5nIFBERiBmaWxlICVzLlxuIiwgbmFtZSk7CisKKyAgSVBERl9KU1BMQVRGT1JNIHBsYXRmb3JtX2NhbGxiYWNrczsKKyAgbWVtc2V0KCZwbGF0Zm9ybV9jYWxsYmFja3MsICdcMCcsIHNpemVvZihwbGF0Zm9ybV9jYWxsYmFja3MpKTsKKyAgcGxhdGZvcm1fY2FsbGJhY2tzLnZlcnNpb24gPSAxOworICBwbGF0Zm9ybV9jYWxsYmFja3MuYXBwX2FsZXJ0ID0gRm9ybV9BbGVydDsKKworICBGUERGX0ZPUk1GSUxMSU5GTyBmb3JtX2NhbGxiYWNrczsKKyAgbWVtc2V0KCZmb3JtX2NhbGxiYWNrcywgJ1wwJywgc2l6ZW9mKGZvcm1fY2FsbGJhY2tzKSk7CisgIGZvcm1fY2FsbGJhY2tzLnZlcnNpb24gPSAxOworICBmb3JtX2NhbGxiYWNrcy5tX3BKc1BsYXRmb3JtID0gJnBsYXRmb3JtX2NhbGxiYWNrczsKKworICBUZXN0TG9hZGVyIGxvYWRlcihwQnVmLCBsZW4pOworCisgIEZQREZfRklMRUFDQ0VTUyBmaWxlX2FjY2VzczsKKyAgbWVtc2V0KCZmaWxlX2FjY2VzcywgJ1wwJywgc2l6ZW9mKGZpbGVfYWNjZXNzKSk7CisgIGZpbGVfYWNjZXNzLm1fRmlsZUxlbiA9IGxlbjsKKyAgZmlsZV9hY2Nlc3MubV9HZXRCbG9jayA9IEdldF9CbG9jazsKKyAgZmlsZV9hY2Nlc3MubV9QYXJhbSA9ICZsb2FkZXI7CisKKyAgRlhfRklMRUFWQUlMIGZpbGVfYXZhaWw7CisgIG1lbXNldCgmZmlsZV9hdmFpbCwgJ1wwJywgc2l6ZW9mKGZpbGVfYXZhaWwpKTsKKyAgZmlsZV9hdmFpbC52ZXJzaW9uID0gMTsKKyAgZmlsZV9hdmFpbC5Jc0RhdGFBdmFpbCA9IElzX0RhdGFfQXZhaWw7CisKKyAgRlhfRE9XTkxPQURISU5UUyBoaW50czsKKyAgbWVtc2V0KCZoaW50cywgJ1wwJywgc2l6ZW9mKGhpbnRzKSk7CisgIGhpbnRzLnZlcnNpb24gPSAxOworICBoaW50cy5BZGRTZWdtZW50ID0gQWRkX1NlZ21lbnQ7CisKKyAgRlBERl9ET0NVTUVOVCBkb2M7CisgIEZQREZfQVZBSUwgcGRmX2F2YWlsID0gRlBERkF2YWlsX0NyZWF0ZSgmZmlsZV9hdmFpbCwgJmZpbGVfYWNjZXNzKTsKKworICAodm9pZCkgRlBERkF2YWlsX0lzRG9jQXZhaWwocGRmX2F2YWlsLCAmaGludHMpOworCisgIGlmICghRlBERkF2YWlsX0lzTGluZWFyaXplZChwZGZfYXZhaWwpKSB7CisgICAgcHJpbnRmKCJOb24tbGluZWFyaXplZCBwYXRoLi4uXG4iKTsKKyAgICBkb2MgPSBGUERGX0xvYWRDdXN0b21Eb2N1bWVudCgmZmlsZV9hY2Nlc3MsIE5VTEwpOworICB9IGVsc2UgeworICAgIHByaW50ZigiTGluZWFyaXplZCBwYXRoLi4uXG4iKTsKKyAgICBkb2MgPSBGUERGQXZhaWxfR2V0RG9jdW1lbnQocGRmX2F2YWlsLCBOVUxMKTsKKyAgfQorCisgICh2b2lkKSBGUERGX0dldERvY1Blcm1pc3Npb25zKGRvYyk7CisgICh2b2lkKSBGUERGQXZhaWxfSXNGb3JtQXZhaWwocGRmX2F2YWlsLCAmaGludHMpOworCisgIEZQREZfRk9STUhBTkRMRSBmb3JtID0gRlBERkRPQ19Jbml0Rm9ybUZpbGxFbnZpcm91bWVudChkb2MsICZmb3JtX2NhbGxiYWNrcyk7CisgIEZQREZfU2V0Rm9ybUZpZWxkSGlnaGxpZ2h0Q29sb3IoZm9ybSwgMCwgMHhGRkU0REQpOworICBGUERGX1NldEZvcm1GaWVsZEhpZ2hsaWdodEFscGhhKGZvcm0sIDEwMCk7CisKKyAgaW50IGZpcnN0X3BhZ2UgPSBGUERGQXZhaWxfR2V0Rmlyc3RQYWdlTnVtKGRvYyk7CisgICh2b2lkKSBGUERGQXZhaWxfSXNQYWdlQXZhaWwocGRmX2F2YWlsLCBmaXJzdF9wYWdlLCAmaGludHMpOworCisgIGludCBwYWdlX2NvdW50ID0gRlBERl9HZXRQYWdlQ291bnQoZG9jKTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYWdlX2NvdW50OyArK2kpIHsKKyAgICAodm9pZCkgRlBERkF2YWlsX0lzUGFnZUF2YWlsKHBkZl9hdmFpbCwgaSwgJmhpbnRzKTsKKyAgfQorCisgIEZPUk1fRG9Eb2N1bWVudEpTQWN0aW9uKGZvcm0pOworICBGT1JNX0RvRG9jdW1lbnRPcGVuQWN0aW9uKGZvcm0pOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFnZV9jb3VudDsgKytpKSB7CisgICAgRlBERl9QQUdFIHBhZ2UgPSBGUERGX0xvYWRQYWdlKGRvYywgaSk7CisgICAgRlBERl9URVhUUEFHRSB0ZXh0X3BhZ2UgPSBGUERGVGV4dF9Mb2FkUGFnZShwYWdlKTsKKyAgICBGT1JNX09uQWZ0ZXJMb2FkUGFnZShwYWdlLCBmb3JtKTsKKyAgICBGT1JNX0RvUGFnZUFBY3Rpb24ocGFnZSwgZm9ybSwgRlBERlBBR0VfQUFDVElPTl9PUEVOKTsKKworICAgIGludCB3aWR0aCA9IHN0YXRpY19jYXN0PGludD4oRlBERl9HZXRQYWdlV2lkdGgocGFnZSkpOworICAgIGludCBoZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KEZQREZfR2V0UGFnZUhlaWdodChwYWdlKSk7CisgICAgRlBERl9CSVRNQVAgYml0bWFwID0gRlBERkJpdG1hcF9DcmVhdGUod2lkdGgsIGhlaWdodCwgMCk7CisgICAgRlBERkJpdG1hcF9GaWxsUmVjdChiaXRtYXAsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIDI1NSwgMjU1LCAyNTUsIDI1NSk7CisKKyAgICBGUERGX1JlbmRlclBhZ2VCaXRtYXAoYml0bWFwLCBwYWdlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCAwLCAwKTsKKyAgICBGUERGX0ZGTERyYXcoZm9ybSwgYml0bWFwLCBwYWdlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCAwLCAwKTsKKyAgICBpZiAod3JpdGVfaW1hZ2VzKSB7CisgICAgICBjb25zdCBjaGFyKiBidWZmZXIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigKKyAgICAgICAgICBGUERGQml0bWFwX0dldEJ1ZmZlcihiaXRtYXApKTsKKyAgICAgIGludCBzdHJpZGUgPSBGUERGQml0bWFwX0dldFN0cmlkZShiaXRtYXApOworICAgICAgV3JpdGVQcG0obmFtZSwgaSwgYnVmZmVyLCBzdHJpZGUsIHdpZHRoLCBoZWlnaHQpOworICAgIH0KKworICAgIEZQREZCaXRtYXBfRGVzdHJveShiaXRtYXApOworCisgICAgRk9STV9Eb1BhZ2VBQWN0aW9uKHBhZ2UsIGZvcm0sIEZQREZQQUdFX0FBQ1RJT05fQ0xPU0UpOworICAgIEZPUk1fT25CZWZvcmVDbG9zZVBhZ2UocGFnZSwgZm9ybSk7CisgICAgRlBERlRleHRfQ2xvc2VQYWdlKHRleHRfcGFnZSk7CisgICAgRlBERl9DbG9zZVBhZ2UocGFnZSk7CisgIH0KKworICBGT1JNX0RvRG9jdW1lbnRBQWN0aW9uKGZvcm0sIEZQREZET0NfQUFDVElPTl9XQyk7CisgIEZQREZET0NfRXhpdEZvcm1GaWxsRW52aXJvdW1lbnQoZm9ybSk7CisgIEZQREZfQ2xvc2VEb2N1bWVudChkb2MpOworICBGUERGQXZhaWxfRGVzdHJveShwZGZfYXZhaWwpOworCisgIHByaW50ZigiTG9hZGVkLCBwYXJzZWQgYW5kIHJlbmRlcmVkICVkIHBhZ2VzLlxuIiwgcGFnZV9jb3VudCk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pIHsKKyAgdjg6OlY4OjpJbml0aWFsaXplSUNVKCk7CisgIGJvb2wgd3JpdGVfaW1hZ2VzID0gZmFsc2U7CisgIHN0ZDo6bGlzdDxjb25zdCBjaGFyKj4gZmlsZXM7CisgIGlmICghUGFyc2VDb21tYW5kTGluZShhcmdjLCBhcmd2LCAmd3JpdGVfaW1hZ2VzLCAmZmlsZXMpKSB7CisgICAgcHJpbnRmKCJVc2FnZSBpczogdGVzdCBbLS13cml0ZV9pbWFnZXNdIC9wYXRoL3RvL3BkZlxuIik7CisgICAgcHJpbnRmKCItLXdyaXRlX2ltYWdlcyAtIHRvIHdyaXRlIHBhZ2UgaW1hZ2VzIDxwZGYtbmFtZT4uPHBhZ2UtbnVtYmVyPi5wcG1cbiIpOworICAgIHJldHVybiAxOworICB9CisKKyAgRlBERl9Jbml0TGlicmFyeShOVUxMKTsKKworICBVTlNVUFBPUlRfSU5GTyB1bnN1cHBvcmVkX2luZm87CisgIG1lbXNldCgmdW5zdXBwb3JlZF9pbmZvLCAnXDAnLCBzaXplb2YodW5zdXBwb3JlZF9pbmZvKSk7CisgIHVuc3VwcG9yZWRfaW5mby52ZXJzaW9uID0gMTsKKyAgdW5zdXBwb3JlZF9pbmZvLkZTREtfVW5TdXBwb3J0X0hhbmRsZXIgPSBVbnN1cHBvcnRlZF9IYW5kbGVyOworCisgIEZTREtfU2V0VW5TcE9ialByb2Nlc3NIYW5kbGVyKCZ1bnN1cHBvcmVkX2luZm8pOworCisgIHdoaWxlICghZmlsZXMuZW1wdHkoKSkgeworICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lID0gZmlsZXMuZnJvbnQoKTsKKyAgICBmaWxlcy5wb3BfZnJvbnQoKTsKKyAgICBGSUxFKiBmaWxlID0gZm9wZW4oZmlsZW5hbWUsIEZPUEVOX1JFQUQpOworICAgIGlmICghZmlsZSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gb3BlbjogJXNcbiIsIGZpbGVuYW1lKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICAodm9pZCkgZnNlZWsoZmlsZSwgMCwgU0VFS19FTkQpOworICAgIHNpemVfdCBsZW4gPSBmdGVsbChmaWxlKTsKKyAgICAodm9pZCkgZnNlZWsoZmlsZSwgMCwgU0VFS19TRVQpOworICAgIGNoYXIqIHBCdWYgPSAoY2hhciopIG1hbGxvYyhsZW4pOworICAgIHNpemVfdCByZXQgPSBmcmVhZChwQnVmLCAxLCBsZW4sIGZpbGUpOworICAgICh2b2lkKSBmY2xvc2UoZmlsZSk7CisgICAgaWYgKHJldCAhPSBsZW4pIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHJlYWQ6ICVzXG4iLCBmaWxlbmFtZSk7CisgICAgfSBlbHNlIHsKKyAgICAgIFJlbmRlclBkZihmaWxlbmFtZSwgcEJ1ZiwgbGVuLCB3cml0ZV9pbWFnZXMpOworICAgIH0KKyAgICBmcmVlKHBCdWYpOworICB9CisKKyAgRlBERl9EZXN0cm95TGlicmFyeSgpOworCisgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9zYW1wbGVzL3NhbXBsZXMuZ3lwIGIvc2FtcGxlcy9zYW1wbGVzLmd5cAppbmRleCBmN2I3MjM3Li5lNTc2ZDk5IDEwMDY0NAotLS0gYS9zYW1wbGVzL3NhbXBsZXMuZ3lwCisrKyBiL3NhbXBsZXMvc2FtcGxlcy5neXAKQEAgLTEsMjEgKzEsMjEgQEAKLSMgQ29weXJpZ2h0IDIwMTQgUERGaXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KLQ0KLXsNCi0gICd0YXJnZXRfZGVmYXVsdHMnOiB7DQotICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLA0KLSAgICAnZGVwZW5kZW5jaWVzJzogWw0KLSAgICAgICcuLi9wZGZpdW0uZ3lwOmZwZGZzZGsnLA0KLSAgICBdLA0KLSAgICAnaW5jbHVkZV9kaXJzJzogWyc8KERFUFRIKSddLA0KLSAgfSwNCi0gICd0YXJnZXRzJzogWw0KLSAgICB7DQotICAgICAgJ3RhcmdldF9uYW1lJzogJ3BkZml1bV90ZXN0JywNCi0gICAgICAnc291cmNlcyc6IFsNCi0gICAgICAgICdwZGZpdW1fdGVzdC5jYycsDQotICAgICAgXSwNCi0gICAgfSwNCi0gIF0sDQorIyBDb3B5cmlnaHQgMjAxNCBQREZpdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCit7CisgICd0YXJnZXRfZGVmYXVsdHMnOiB7CisgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCisgICAgJ2RlcGVuZGVuY2llcyc6IFsKKyAgICAgICcuLi9wZGZpdW0uZ3lwOmZwZGZzZGsnLAorICAgIF0sCisgICAgJ2luY2x1ZGVfZGlycyc6IFsnPChERVBUSCknXSwKKyAgfSwKKyAgJ3RhcmdldHMnOiBbCisgICAgeworICAgICAgJ3RhcmdldF9uYW1lJzogJ3BkZml1bV90ZXN0JywKKyAgICAgICdzb3VyY2VzJzogWworICAgICAgICAncGRmaXVtX3Rlc3QuY2MnLAorICAgICAgXSwKKyAgICB9LAorICBdLAogfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK